diff --git a/DB/currentlsdb.sql b/DB/currentlsdb.sql new file mode 100644 index 000000000..ecca5d0d0 --- /dev/null +++ b/DB/currentlsdb.sql @@ -0,0 +1,641 @@ +-- MariaDB dump 10.17 Distrib 10.4.12-MariaDB, for Win64 (AMD64) +-- +-- Host: localhost Database: eq2ls +-- ------------------------------------------------------ +-- Server version 10.4.12-MariaDB + +/*!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' */; +/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */; + +-- +-- Table structure for table `account` +-- + +DROP TABLE IF EXISTS `account`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `account` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `name` varchar(64) COLLATE latin1_general_ci NOT NULL DEFAULT '', + `passwd` varchar(64) COLLATE latin1_general_ci NOT NULL DEFAULT '', + `ip_address` varchar(50) COLLATE latin1_general_ci NOT NULL DEFAULT '0', + `email_address` varchar(50) COLLATE latin1_general_ci NOT NULL DEFAULT 'Unknown', + `created_date` int(10) NOT NULL DEFAULT 0, + `key1` varchar(64) COLLATE latin1_general_ci NOT NULL DEFAULT '0', + `last_update` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(), + `hack_count` tinyint(3) unsigned NOT NULL DEFAULT 0, + `last_client_version` smallint(5) unsigned NOT NULL DEFAULT 0, + `account_enabled` tinyint(1) unsigned NOT NULL DEFAULT 1, + PRIMARY KEY (`id`), + UNIQUE KEY `Name` (`name`) +) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Dumping data for table `account` +-- + +LOCK TABLES `account` WRITE; +/*!40000 ALTER TABLE `account` DISABLE KEYS */; +/*!40000 ALTER TABLE `account` ENABLE KEYS */; +UNLOCK TABLES; + +-- +-- Table structure for table `appearances` +-- + +DROP TABLE IF EXISTS `appearances`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `appearances` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `appearance_id` int(10) unsigned NOT NULL, + `name` varchar(250) COLLATE latin1_general_ci NOT NULL, + `min_client_version` smallint(5) unsigned NOT NULL DEFAULT 0, + PRIMARY KEY (`id`), + UNIQUE KEY `AppIDX` (`appearance_id`) +) ENGINE=InnoDB AUTO_INCREMENT=21547 DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Dumping data for table `appearances` +-- + +LOCK TABLES `appearances` WRITE; +/*!40000 ALTER TABLE `appearances` DISABLE KEYS */; +INSERT INTO `appearances` VALUES (1,1,'staticobjects/encounter_chest',0),(2,2,'staticobjects/everling_portrait',0),(3,3,'staticobjects/bed_single',0),(4,4,'staticobjects/chair_1',0),(5,5,'staticobjects/chandalier_iron',0),(6,6,'staticobjects/table_1',0),(7,7,'staticobjects/mirror_1',0),(8,8,'staticobjects/crate_smallopen',0),(9,9,'staticobjects/cask_upright',0),(10,10,'_exp06/characters/tool_users/coldaine/coldaine_vendor',1096),(11,11,'_exp06/characters/tool_users/coldaine/coldaine_boss',1096),(12,12,'staticobjects/respawn_tent',0),(13,13,'staticobjects/fprt_sewer_entrance',0),(14,14,'staticobjects/boat_temp',0),(15,15,'staticobjects/encounter_chest_animated',0),(16,16,'staticobjects/mariners_bell',0),(17,17,'staticobjects/chessboard',0),(18,18,'staticobjects/tutorial_drake',0),(19,19,'staticobjects/signs/freeport/sign_post',0),(20,20,'staticobjects/signs/freeport/sign_post_arrow',0),(21,21,'staticobjects/signs/freeport/hood_sign_post',0),(22,22,'staticobjects/signs/freeport/hood_sign_post_arrow_beggarscourt',0),(23,23,'staticobjects/signs/freeport/hood_sign_post_arrow_bigbend',0),(24,24,'staticobjects/signs/freeport/hood_sign_post_arrow_longshadow',0),(25,25,'staticobjects/signs/freeport/hood_sign_post_arrow_templestreet',0),(26,26,'staticobjects/signs/freeport/hood_sign_wall_large',0),(27,27,'staticobjects/signs/freeport/hood_sign_wall_medium',0),(28,28,'staticobjects/signs/freeport/hood_sign_wall_small',0),(29,29,'staticobjects/signs/general/orc_stump_signpost',0),(30,30,'staticobjects/signs/qeynos/qey_roadsign_post01',0),(31,31,'staticobjects/signs/qeynos/qey_roadsign_sign01',0),(32,32,'staticobjects/qey_elddar/tree_big',0),(33,33,'staticobjects/qey_elddar/tree_small',0),(34,34,'staticobjects/qey_elddar/eye_of_ro',0),(35,35,'staticobjects/qey_village01/testvase',0),(36,36,'staticobjects/qeynos/qey_roadsign_post01',0),(37,37,'staticobjects/qeynos/qey_roadsign_sign01',0),(38,38,'staticobjects/qeynos/qey_catacomb_entrance01',0),(39,39,'staticobjects/general/orc_generic_signpost02_nektulos',0),(40,40,'staticobjects/general/orc_generic_signpost_03_freeport_nektulos',0),(41,41,'staticobjects/blacksmith/qey_blacksmith_anvil001',0),(42,42,'staticobjects/blacksmith/qey_blacksmith_bellows001',0),(43,43,'staticobjects/blacksmith/qey_blacksmith_hammer001',0),(44,44,'staticobjects/blacksmith/qey_blacksmith_oven001',0),(45,45,'staticobjects/blacksmith/qey_blacksmith_pliers001',0),(46,46,'staticobjects/blacksmith/qey_blacksmith_table001',0),(47,47,'staticobjects/poppies/qey_blacksmith_oven001',0),(48,48,'staticobjects/poppies/fprt_poppies_a',0),(49,49,'code/unknown',0),(50,50,'code/defaultapp',0),(51,51,'_exp06/characters/tool_users/coldaine/coldaine_caster',1096),(52,52,'_exp06/characters/tool_users/coldaine/coldaine_guard01',1096),(53,53,'ec/pc/ratonga/ratonga_male',0),(54,54,'ec/pc/ratonga/ratonga_female',0),(55,55,'ec/pc/ratonga/ratonga_female_01',0),(56,56,'ec/pc/ratonga/ratonga_female_02',0),(57,57,'ec/pc/ratonga/ratonga_female_03',0),(58,58,'ec/pc/ratonga/ratonga_female_04',0),(59,59,'ec/pc/ratonga/ratonga_female_05',0),(60,60,'ec/pc/ratonga/ratonga_male_01',0),(61,61,'ec/pc/ratonga/ratonga_male_02',0),(62,62,'ec/pc/ratonga/ratonga_male_03',0),(63,63,'ec/pc/ratonga/ratonga_male_04',0),(64,64,'ec/pc/ratonga/ratonga_male_05',0),(65,65,'ec/pc/ratonga/ratonga_male_06',0),(66,66,'ec/pc/ratonga/ratonga_male_07',0),(67,67,'ec/pc/ratonga/ratonga_male_08',0),(68,68,'ec/pc/ratonga/ratonga_male_09',0),(69,69,'ec/pc/ratonga/ratonga_male_10',0),(70,70,'ec/pc/ratonga/ratonga_male_11',0),(71,71,'ec/pc/ratonga/ratonga_male_12',0),(72,72,'ec/pc/ratonga/ratonga_male_13',0),(73,73,'ec/pc/ratonga/ratonga_male_14',0),(74,74,'_exp06/characters/tool_users/coldaine/coldaine_guard02',1096),(75,75,'_exp06/characters/tool_users/coldaine/coldaine_heavy',1096),(76,76,'ec/pc/froglok/froglok_female',0),(77,77,'ec/pc/froglok/froglok_male',0),(78,78,'ec/pc/halfelf/halfelf_male',0),(79,79,'ec/pc/halfelf/halfelf_female',0),(80,80,'_exp06/characters/tool_users/coldaine/coldaine_female_vendor',1096),(81,81,'ec/pc/kerra/kerra_female',0),(82,82,'ec/pc/kerra/kerra_male',0),(83,83,'_exp07/zones/exp07_dun_tower_of_frozen_shadow/tofs_mirror_floor1_event',1096),(84,84,'_exp04/monsters/phara_dar_ghost',1096),(85,85,'_exp07/zones/exp07_dun_velks_the_ascent/static_veeshans_shard_centered',1096),(86,86,'_exp06/characters/tool_users/giant_frost_kurn_tower/ghost_giant_frost_medium',1096),(87,87,'_exp06/characters/tool_users/giant_frost_kurn_tower/ghost_giant_frost_chubby',1096),(88,88,'_exp06/characters/tool_users/giant_frost_kurn_tower/ghost_giant_frost_heavy',1096),(89,89,'_exp06/characters/tool_users/giant_frost_kurn_tower/ghost_giant_frost_light',1096),(90,90,'_exp07/characters/monsters/timber_wolf/timber_wolf_white_sniff',1096),(91,91,'ec/pc/kerra/kerra_female_01',0),(92,92,'ec/pc/kerra/kerra_female_02',0),(93,93,'ec/pc/kerra/kerra_female_03',0),(94,94,'ec/pc/kerra/kerra_female_04',0),(95,95,'ec/pc/kerra/kerra_female_05',0),(96,96,'ec/pc/kerra/kerra_female_06',0),(97,97,'ec/pc/kerra/kerra_male_01',0),(98,98,'ec/pc/kerra/kerra_male_02',0),(99,99,'ec/pc/kerra/kerra_male_03',0),(100,100,'ec/pc/kerra/kerra_male_05',0),(101,101,'ec/pc/kerra/kerra_male_06',0),(102,102,'ec/pc/kerra/kerra_male_04',0),(103,103,'ec/pc/iksar/iksar_male',0),(104,104,'ec/pc/iksar/iksar_female',0),(105,105,'ec/pc/troll/troll_female',0),(106,106,'ec/pc/troll/troll_male',0),(107,107,'ec/pc/halfling/halfling_female',0),(108,108,'ec/pc/halfling/halfling_male',0),(109,109,'ec/pc/dwarf/dwarf_female',0),(110,110,'ec/pc/dwarf/dwarf_male',0),(111,111,'ec/pc/barbarian/barbarian_female',0),(112,112,'ec/pc/barbarian/barbarian_male',0),(113,113,'ec/pc/woodelf/woodelf_female',0),(114,114,'ec/pc/woodelf/woodelf_male',0),(115,115,'ec/pc/darkelf/darkelf_male',0),(116,116,'ec/pc/darkelf/darkelf_female',0),(117,117,'_exp06/characters/tool_users/coldaine/ghosts/coldaine_ghost_vendor',1096),(118,118,'_exp06/characters/tool_users/coldaine/ghosts/coldaine_ghost_caster',1096),(119,119,'ec/pc/erudite/erudite_male',0),(120,120,'ec/pc/erudite/erudite_female',0),(121,121,'ec/pc/gnome/gnome_male',0),(122,122,'ec/pc/gnome/gnome_female',0),(123,123,'ec/pc/ogre/ogre_female',0),(124,124,'ec/pc/ogre/ogre_male',0),(125,125,'_exp06/characters/tool_users/coldaine/ghosts/coldaine_ghost_guard01',1096),(126,126,'_exp06/characters/tool_users/coldaine/ghosts/coldaine_ghost_guard02',1096),(127,127,'_exp06/characters/tool_users/coldaine/ghosts/coldaine_ghost_heavy',1096),(128,128,'_exp06/characters/tool_users/coldaine/coldaine_female_heavy',1096),(129,129,'_exp06/characters/tool_users/coldaine/coldaine_female_caster',1096),(130,130,'staticobjects/_exp07/exp07_dun_kael_drakkel/kd_statue_zek_half',1096),(131,131,'accessories/wearable_items/_exp07/royal_velium_armor/royal_velium_armor_chain/chest',1096),(132,132,'ec/pc/human/human_female',0),(133,133,'accessories/wearable_items/_exp07/royal_velium_armor/royal_velium_armor_chain/feet',1096),(134,134,'ec/pc/human/human_male',0),(135,135,'ec/pc/highelf/highelf_female',0),(136,136,'ec/pc/highelf/highelf_male',0),(137,137,'ec/npc/orc',0),(138,138,'ec/npc/skeleton',0),(139,139,'ec/npc/skeletonorc',0),(140,140,'ec/npc/zombie',0),(141,141,'ec/npc/orcshaman',0),(142,142,'ec/npc/zombie_fresh_female',0),(143,143,'ec/npc/zombie_fresh_male',0),(144,144,'ec/npc/helmsman_wheel',0),(145,145,'ec/npc/goblin',0),(146,146,'ec/npc/flaming_skeleton',0),(147,147,'creatures/boss/fallengate',0),(148,148,'creatures/tu/livingstatue',0),(149,149,'creatures/tu/mysticdoll',0),(150,150,'creatures/tu/bixie',0),(151,151,'creatures/tu/troglodyte',0),(152,152,'creatures/tu/earth_elem',0),(153,153,'creatures/tu/obsidian_earth_elem',0),(154,154,'creatures/tu/riverrock_earth_elem',0),(155,155,'creatures/tu/stone_earth_elem',0),(156,156,'creatures/tu/elementalair',0),(157,157,'creatures/tu/minotaur',0),(158,158,'creatures/tu/minotaur_albino',0),(159,159,'creatures/tu/minotaur_undead',0),(160,160,'creatures/tu/golem_clay',0),(161,161,'creatures/tu/golem_flesh',0),(162,162,'creatures/tu/golem_stone',0),(163,163,'creatures/tu/bixie_small',0),(164,164,'creatures/tu/fairy',0),(165,165,'creatures/tu/mermaid',0),(166,166,'creatures/tu/ettin',0),(167,167,'creatures/tu/ettin_darker',0),(168,168,'creatures/tu/lizardman',0),(169,169,'creatures/tu/lavastatue',0),(170,170,'creatures/tu/boarfiend',0),(171,171,'creatures/tu/elementalfire',0),(172,172,'creatures/tu/elementalfire_demo',0),(173,173,'creatures/tu/nymph_dryad',0),(174,174,'creatures/tu/nymph_dryad_corrupt',0),(175,175,'creatures/tu/gelatinouscube',0),(176,176,'creatures/tu/amygdalan_dreadknight',0),(177,177,'creatures/tu/amygdalan_knight',0),(178,178,'creatures/tu/amygdalan_warrior',0),(179,179,'creatures/tu/gelatinouscube_refract',0),(180,180,'creatures/tu/siren',0),(181,181,'creatures/tu/dragonfly_faerie',0),(182,182,'creatures/tu/valkyrie',0),(183,183,'creatures/tu/tentacleterror',0),(184,184,'accessories/wearable_items/_exp07/royal_velium_armor/royal_velium_armor_chain/forearms',1096),(185,185,'accessories/wearable_items/_exp07/royal_velium_armor/royal_velium_armor_chain/hands',1096),(186,186,'accessories/wearable_items/_exp07/royal_velium_armor/royal_velium_armor_chain/head',1096),(187,187,'accessories/wearable_items/_exp07/royal_velium_armor/royal_velium_armor_chain/legs',1096),(188,188,'creatures/tu/additionalmodels/valkyrie_skirt',0),(189,189,'accessories/wearable_items/_exp07/royal_velium_armor/royal_velium_armor_chain/legs_noskirt',1096),(190,190,'creatures/monsters/monitorlizard',0),(191,191,'creatures/monsters/beam',0),(192,192,'creatures/monsters/beam2',0),(193,193,'creatures/monsters/icky_bat',0),(194,194,'creatures/monsters/barracuda',0),(195,195,'creatures/monsters/elementalwater',0),(196,196,'creatures/monsters/rat',0),(197,197,'creatures/monsters/flyingsnake',0),(198,198,'creatures/monsters/bear',0),(199,199,'creatures/monsters/monitorlizard_black',0),(200,200,'creatures/monsters/monitorlizard_blue',0),(201,201,'creatures/monsters/monitorlizard_orange',0),(202,202,'accessories/wearable_items/_exp07/royal_velium_armor/royal_velium_armor_chain/pauldron_left',1096),(203,203,'creatures/monsters/vox',0),(204,204,'creatures/monsters/pihrana',0),(205,205,'creatures/monsters/spider',0),(206,206,'creatures/monsters/dikdik',0),(207,207,'creatures/monsters/beaver',0),(208,208,'creatures/monsters/beetle',0),(209,209,'creatures/monsters/goo',0),(210,210,'creatures/monsters/octopus',0),(211,211,'creatures/monsters/crab',0),(212,212,'creatures/monsters/treeent',0),(213,213,'creatures/monsters/snake',0),(214,214,'creatures/monsters/seaturtle_gold',0),(215,215,'creatures/monsters/turtle',0),(216,216,'creatures/monsters/wolf',0),(217,217,'creatures/monsters/bee',0),(218,218,'creatures/monsters/seaturtle',0),(219,219,'creatures/monsters/mantaray',0),(220,220,'creatures/monsters/armadillo',0),(221,221,'creatures/monsters/beetlefire',0),(222,222,'creatures/monsters/beetleglow',0),(223,223,'creatures/monsters/beetlegold',0),(224,224,'creatures/monsters/frog',0),(225,225,'creatures/monsters/griffin',0),(226,226,'creatures/monsters/mimic',0),(227,227,'creatures/monsters/albinosnake',0),(228,228,'creatures/monsters/flying_dragon',0),(229,229,'creatures/monsters/ground_dragon',0),(230,230,'creatures/monsters/iron_guardian',0),(231,231,'creatures/monsters/kholrat',0),(232,232,'creatures/monsters/molerat',0),(233,233,'creatures/monsters/plague_rat',0),(234,234,'creatures/monsters/redsnake',0),(235,235,'creatures/monsters/rustmonster',0),(236,236,'creatures/monsters/thoughtbleeder',0),(237,237,'creatures/monsters/blue_frog',0),(238,238,'creatures/monsters/drake',0),(239,239,'creatures/monsters/bat',0),(240,240,'creatures/monsters/voidbeast',0),(241,241,'creatures/monsters/swordfish',0),(242,242,'creatures/monsters/shark',0),(243,243,'creatures/monsters/spider_cave',0),(244,244,'creatures/monsters/spider_fat',0),(245,245,'creatures/monsters/spider_fat_green',0),(246,246,'creatures/monsters/spider_fat_ice',0),(247,247,'creatures/monsters/evileye',0),(248,248,'creatures/monsters/bee_giant',0),(249,249,'creatures/monsters/crab_fire',0),(250,250,'creatures/monsters/scorpion_yellow',0),(251,251,'creatures/monsters/scorpion_black',0),(252,252,'creatures/monsters/slug',0),(253,253,'creatures/monsters/mantaray_dark',0),(254,254,'creatures/monsters/mantaray_darkblue',0),(255,255,'creatures/monsters/mantaray_undead',0),(256,256,'creatures/monsters/centipede',0),(257,257,'creatures/monsters/centipede_blue',0),(258,258,'creatures/monsters/centipede_bluegreen',0),(259,259,'creatures/monsters/cow',0),(260,260,'creatures/monsters/hawk',0),(261,261,'creatures/monsters/scarecrow',0),(262,262,'creatures/monsters/hoovedcarnivore',0),(263,263,'creatures/monsters/hoovedcarnivorebrown',0),(264,264,'creatures/monsters/elephant',0),(265,265,'creatures/monsters/elephantgrey',0),(266,266,'creatures/monsters/rhino',0),(267,267,'creatures/monsters/badger',0),(268,268,'creatures/monsters/unicorn',0),(269,269,'creatures/monsters/duck',0),(270,270,'creatures/monsters/owlbear',0),(271,271,'creatures/monsters/pig',0),(272,272,'creatures/monsters/pigspotted',0),(273,273,'creatures/monsters/willowisp',0),(274,274,'creatures/monsters/root_horror',0),(275,275,'creatures/monsters/nagafen',0),(276,276,'creatures/monsters/wasp',0),(277,277,'creatures/monsters/flyingsnake_cave',0),(278,278,'creatures/monsters/hyena',0),(279,279,'creatures/monsters/book_minion',0),(280,280,'creatures/monsters/book_minion_gardening',0),(281,281,'creatures/monsters/book_minion_griffin_to_molerat',0),(282,282,'creatures/monsters/book_minion_reading_for_dummies',0),(283,283,'creatures/monsters/book_minion_squirrel_to_walrusman',0),(284,284,'creatures/monsters/catoplebas',0),(285,285,'creatures/monsters/watertentacle',0),(286,286,'creatures/monsters/watertentacle_watery',0),(287,287,'creatures/monsters/crystal_dragon',0),(288,288,'creatures/monsters/octopus_boss',0),(289,289,'creatures/monsters/seaturtle_boss',0),(290,290,'creatures/monsters/skeleton_boss',0),(291,291,'creatures/monsters/cow_boss',0),(292,292,'creatures/monsters/wasp_small',0),(293,293,'creatures/monsters/manticore',0),(294,294,'creatures/monsters/goo_bubblegum',0),(295,295,'creatures/monsters/goo_fire',0),(296,296,'creatures/monsters/goo_lectric',0),(297,297,'creatures/monsters/goo_snot',0),(298,298,'creatures/monsters/goo_black',0),(299,299,'creatures/monsters/goo_mud',0),(300,300,'creatures/monsters/goo_red',0),(301,301,'creatures/monsters/goo_slug',0),(302,302,'creatures/monsters/dragon_ice',0),(303,303,'creatures/monsters/lion',0),(304,304,'creatures/monsters/cat_orange',0),(305,305,'creatures/monsters/cat_gray',0),(306,306,'creatures/monsters/cat',0),(307,307,'creatures/monsters/dervish',0),(308,308,'creatures/monsters/dervish_fire',0),(309,309,'creatures/monsters/dervish_glass',0),(310,310,'creatures/monsters/wyrm',0),(311,311,'creatures/monsters/dervish_ice',0),(312,312,'creatures/monsters/dervish_iron',0),(313,313,'accessories/wearable_items/_exp07/royal_velium_armor/royal_velium_armor_chain/pauldron_right',1096),(314,314,'accessories/wearable_items/_exp07/royal_velium_armor/royal_velium_armor_chain/shoulders',1096),(315,315,'accessories/wearable_items/_exp07/royal_velium_armor/royal_velium_armor_chain/shoulders_with_pauldrons',1096),(316,316,'accessories/wearable_items/_exp07/royal_velium_armor/royal_velium_armor_chain/skirt',1096),(317,317,'accessories/wearable_items/_exp07/royal_velium_armor/royal_velium_armor_robe/skirt',1096),(318,318,'accessories/wearable_items/cloak/exp07/cloak_heritage_coldain',1096),(319,319,'accessories/wearable_items/cloak/exp07/cloak_heritage_coldain2',1096),(320,320,'accessories/wearable_items/cloak/exp07/cloak_dragonskin2',1096),(321,321,'accessories/wearable_items/cloak/exp07/cloak_dragonskin2_diamond',1096),(322,322,'accessories/wearable_items/cloak/exp07/cloak_dragonskin',1096),(323,323,'staticobjects/_exp07/exp07_rgn_great_divide/thurgadin_incense_burner',1096),(324,324,'staticobjects/_exp07/exp07_rgn_great_divide/thurgadin_snowglobe',1096),(325,325,'staticobjects/_exp07/exp07_rgn_great_divide/coldain_metaltile',1096),(326,326,'staticobjects/_exp07/exp07_rgn_great_divide/coldain_stonetile',1096),(327,327,'staticobjects/_exp07/exp07_rgn_great_divide/thurgadin_velium_jar',1096),(328,328,'accessories/wearable_items/cloak/exp07/cloak_black_lightning',1096),(329,329,'_exp07/zones/exp07_dun_kraytocs_fortress/orb01',1096),(330,330,'staticobjects/_exp07/exp07_rgn_great_divide/coldain_summoning_crystal',1096),(331,331,'accessories/wearable_items/_exp07/station_cash_armor/robe_wyrmskin/chest',1096),(332,332,'accessories/wearable_items/_exp07/station_cash_armor/robe_wyrmskin/skirt',1096),(333,333,'accessories/wearable_items/_exp07/station_cash_armor/robe_wyrmskin/feet',1096),(334,334,'accessories/wearable_items/_exp07/station_cash_armor/robe_wyrmskin/hands',1096),(335,335,'accessories/wearable_items/_exp07/station_cash_armor/robe_wyrmskin/head',1096),(336,336,'_exp06/characters/monsters/erudite_lich/erudite_lich_black',1096),(337,337,'accessories/wearable_items/_exp07/station_cash_armor/robe_wyrmskin/legs',1096),(338,338,'accessories/wearable_items/_exp07/station_cash_armor/robe_wyrmskin/charcoal/skirt',1096),(339,339,'accessories/wearable_items/_exp07/station_cash_armor/robe_wyrmskin/charcoal/chest',1096),(340,340,'accessories/wearable_items/_exp07/station_cash_armor/robe_wyrmskin/charcoal/feet',1096),(341,341,'accessories/wearable_items/_exp07/station_cash_armor/robe_wyrmskin/charcoal/hands',1096),(342,342,'accessories/wearable_items/_exp07/station_cash_armor/robe_wyrmskin/charcoal/head',1096),(343,343,'accessories/wearable_items/_exp07/rallos_zek_armor/rallos_zek_armor_vanguard_tintable/shoulders',1096),(344,344,'accessories/wearable_items/_exp07/station_cash_armor/robe_wyrmskin/charcoal/legs',1096),(345,345,'accessories/wearable_items/_exp07/station_cash_armor/robe_wyrmskin/green/skirt',1096),(346,346,'accessories/wearable_items/_exp07/station_cash_armor/robe_wyrmskin/green/chest',1096),(347,347,'accessories/wearable_items/_exp07/station_cash_armor/robe_wyrmskin/green/feet',1096),(348,348,'accessories/wearable_items/_exp07/station_cash_armor/robe_wyrmskin/green/hands',1096),(349,349,'accessories/wearable_items/_exp07/station_cash_armor/robe_wyrmskin/green/head',1096),(350,350,'_exp07/characters/monsters/lord_yelinak/lord_yelinak_test',1096),(351,351,'accessories/wearable_items/_exp07/station_cash_armor/robe_wyrmskin/green/legs',1096),(352,352,'accessories/wearable_items/_exp07/station_cash_armor/robe_wyrmskin/red/skirt',1096),(353,353,'accessories/wearable_items/_exp07/station_cash_armor/robe_wyrmskin/red/chest',1096),(354,354,'accessories/wearable_items/_exp07/station_cash_armor/robe_wyrmskin/red/head',1096),(355,355,'staticobjects/liveevent/tinkerfest/dpo_gnomerace_powerup_speed02',1096),(356,356,'accessories/wearable_items/_exp07/station_cash_armor/robe_wyrmskin/red/legs',1096),(357,357,'accessories/wearable_items/_exp07/asian_goth_armor/chain/skirt',1096),(358,358,'accessories/wearable_items/_exp07/asian_goth_armor/chain/chest',1096),(359,359,'accessories/wearable_items/_exp07/asian_goth_armor/chain/feet',1096),(360,360,'accessories/wearable_items/_exp07/asian_goth_armor/chain/forearms',1096),(361,361,'accessories/wearable_items/_exp07/asian_goth_armor/chain/hands',1096),(362,362,'accessories/wearable_items/_exp07/asian_goth_armor/chain/head',1096),(363,363,'accessories/wearable_items/_exp07/asian_goth_armor/chain/legs',1096),(364,364,'accessories/wearable_items/_exp07/asian_goth_armor/chain/legs_noskirt',1096),(365,365,'accessories/wearable_items/_exp07/asian_goth_armor/chain/shoulders',1096),(366,366,'accessories/wearable_items/_exp07/asian_goth_armor/chain/shoulders_no_pauldrons',1096),(367,367,'accessories/wearable_items/_exp07/asian_goth_armor/chain/shoulders_snapons',1096),(368,368,'accessories/wearable_items/_exp07/asian_goth_armor/chain/snapons/head_asian_goth_chain_helm',1096),(369,369,'accessories/wearable_items/_exp07/asian_goth_armor/chain/snapons/asian_goth_chain_pauldrons_left',1096),(370,370,'accessories/wearable_items/_exp07/asian_goth_armor/chain/snapons/asian_goth_chain_pauldrons_right',1096),(371,371,'ec/pc/vampire/bat_swarm_vampire_mount',1096),(372,372,'accessories/wieldable_items/weapons/exp07/vampire_appearance/exp07_vampire_unarmed_nofx',1096),(373,373,'_exp07/characters/monsters/lich_bride/lich_bride',1096),(374,374,'accessories/wieldable_items/weapons/exp07/2h_sword/exp07_2h_specter_scythe_usable_fx',1096),(375,375,'staticobjects/_exp07/exp07_rgn_eastern_wastes/vel_coldain_weaponrack04',1096),(376,376,'_exp07/characters/tool_users/drolvarg_snow_warrior/drolvarg_snow_warrior_03',1096),(377,377,'_exp07/characters/tool_users/drolvarg_snow_warrior/drolvarg_snow_warrior_02',1096),(378,378,'accessories/hair/hair037',1096),(379,379,'staticobjects/_exp07/exp07_rgn_great_divide/dpo_thur_gnome_multi_gear_02',1096),(380,380,'accessories/wearable_items/cloak/exp07/cloak_dain',1096),(381,381,'accessories/wearable_items/cloak/exp07/cloak_dragon_hoard',1096),(382,382,'creatures/mounts/griffin_mount/griffin_mount_stormfeather',1096),(383,383,'creatures/mounts/griffin_mount/griffin_mount_tintable',1096),(384,384,'_exp07/zones/exp07_dun_tower_of_frozen_shadow/tfs_floor04_lightsource_floortorch01',1096),(385,385,'creatures/pets/wolf_pup/wolf_pup_loyal',1096),(386,386,'staticobjects/_exp07/exp07_rgn_great_divide/gd_dpo_icesphere_bobbing',1096),(387,387,'_exp07/characters/monsters/griffin_new/highland_griffin_saddle',1096),(388,388,'_exp06/zones/objects/exp06_dun_the_hole_raid/platform_debris0',1096),(389,389,'_exp06/zones/objects/exp06_dun_the_hole_raid/platform_debris1',1096),(390,390,'_exp06/zones/objects/exp06_dun_the_hole_raid/platform_debris2',1096),(391,391,'_exp07/characters/monsters/dragon_hoard/dragon_hoard',1096),(392,392,'_exp07/zones/exp07_dun_crystalcavern/exp07_dun_crystalcavern_blocker01',1096),(393,393,'_exp07/zones/exp07_dun_crystalcavern/exp07_dun_crystalcavern_blocker01_green',1096),(394,394,'_exp07/zones/exp07_dun_crystalcavern/exp07_dun_crystalcavern_blocker01_purple',1096),(395,395,'_exp07/zones/exp07_dun_crystalcavern/exp07_dun_crystalcavern_crevice01_floor01',1096),(396,396,'accessories/wearable_items/snapons/backpacks/backpack_velious_swivel/backpack_velious_swivel_rope',1096),(397,397,'accessories/wearable_items/snapons/backpacks/backpack_velious_swivel/backpack_velious_swivel',1096),(398,398,'accessories/wearable_items/snapons/backpacks/backpack_velious_swivel/backpack_velious_swivel_barrel',1096),(399,399,'accessories/wearable_items/snapons/backpacks/backpack_velious_swivel/backpack_velious_swivel_bucket',1096),(400,400,'accessories/wearable_items/snapons/backpacks/backpack_velious_swivel/backpack_velious_swivel_cage',1096),(401,401,'staticobjects/_exp07/vel_snowpile01',1096),(402,402,'staticobjects/_exp07/exp07_rgn_great_divide/vel_huge_fire_nobase_nofire',1096),(403,403,'staticobjects/_exp07/exp07_rgn_great_divide/goahmari_village_firepit01',1096),(404,404,'staticobjects/_exp07/exp07_rgn_great_divide/goahmari_village_firepit01_burning',1096),(405,405,'staticobjects/_exp07/exp07_rgn_great_divide/goahmari_village_light01',1096),(406,406,'staticobjects/_exp07/exp07_rgn_great_divide/goahmari_village_light01_nosnow01',1096),(407,407,'accessories/wearable_items/_exp07/cryomantic_armor/upperchest',1096),(408,408,'accessories/wearable_items/_exp07/cryomantic_armor/chest',1096),(409,409,'accessories/wearable_items/_exp07/cryomantic_armor/feet',1096),(410,410,'accessories/wearable_items/_exp07/cryomantic_armor/forearms',1096),(411,411,'accessories/wearable_items/_exp07/cryomantic_armor/hands',1096),(412,412,'accessories/wearable_items/_exp07/cryomantic_armor/head',1096),(413,413,'accessories/wearable_items/woven/uncommon/medium/chest',0),(414,414,'accessories/wearable_items/woven/uncommon/medium/feet',0),(415,415,'accessories/wearable_items/woven/uncommon/medium/forearms',0),(416,416,'accessories/wearable_items/woven/uncommon/medium/hands',0),(417,417,'accessories/wearable_items/woven/uncommon/medium/head',0),(418,418,'accessories/wearable_items/woven/uncommon/medium/legs',0),(419,419,'accessories/wearable_items/woven/uncommon/medium/shoulders',0),(420,420,'accessories/wearable_items/woven/uncommon/medium/skirt',0),(421,421,'accessories/wearable_items/woven/uncommon/low/chest',0),(422,422,'accessories/wearable_items/woven/uncommon/low/feet',0),(423,423,'accessories/wearable_items/woven/uncommon/low/forearms',0),(424,424,'accessories/wearable_items/woven/uncommon/low/hands',0),(425,425,'accessories/wearable_items/woven/uncommon/low/head',0),(426,426,'accessories/wearable_items/woven/uncommon/low/legs',0),(427,427,'accessories/wearable_items/woven/uncommon/low/shoulders',0),(428,428,'accessories/wearable_items/woven/uncommon/low/skirt',0),(429,429,'accessories/wearable_items/woven/uncommon/high/chest',0),(430,430,'accessories/wearable_items/woven/uncommon/high/feet',0),(431,431,'accessories/wearable_items/woven/uncommon/high/forearms',0),(432,432,'accessories/wearable_items/woven/uncommon/high/hands',0),(433,433,'accessories/wearable_items/woven/uncommon/high/head',0),(434,434,'accessories/wearable_items/woven/uncommon/high/legs',0),(435,435,'accessories/wearable_items/woven/uncommon/high/shoulders',0),(436,436,'accessories/wearable_items/woven/uncommon/high/skirt',0),(437,437,'accessories/wearable_items/_exp07/cryomantic_armor/left',1096),(438,438,'accessories/wearable_items/_exp07/cryomantic_armor/legs',1096),(439,439,'accessories/wearable_items/_exp07/cryomantic_armor/legs_noskirt',1096),(440,440,'accessories/wearable_items/_exp07/cryomantic_armor/pauldron05_vanguard_heavy_left',1096),(441,441,'accessories/wearable_items/_exp07/cryomantic_armor/pauldron05_vanguard_heavy_right',1096),(442,442,'accessories/wearable_items/_exp07/cryomantic_armor/right',1096),(443,443,'accessories/wearable_items/_exp07/cryomantic_armor/shoulders',1096),(444,444,'accessories/wearable_items/_exp07/cryomantic_armor/shoulders_epic',1096),(445,445,'accessories/wearable_items/woven/rare/low/chest',0),(446,446,'accessories/wearable_items/woven/rare/low/feet',0),(447,447,'accessories/wearable_items/woven/rare/low/forearms',0),(448,448,'accessories/wearable_items/woven/rare/low/hands',0),(449,449,'accessories/wearable_items/woven/rare/low/head',0),(450,450,'accessories/wearable_items/woven/rare/low/legs',0),(451,451,'accessories/wearable_items/woven/rare/low/shoulders',0),(452,452,'accessories/wearable_items/woven/rare/low/skirt',0),(453,453,'accessories/wearable_items/_exp07/cryomantic_armor/shoulders_nopauldrons',1096),(454,454,'accessories/wearable_items/_exp07/cryomantic_armor/shoulders_pauldron05_both',1096),(455,455,'accessories/wearable_items/_exp07/cryomantic_armor/skirt',1096),(456,456,'accessories/wearable_items/_exp07/cryomantic_armor/snapons/head_spike',1096),(457,457,'accessories/wearable_items/_exp07/cryomantic_armor/snapons/toe_spike_left',1096),(458,458,'accessories/wearable_items/_exp07/cryomantic_armor/snapons/toe_spike_right',1096),(459,459,'accessories/wieldable_items/weapons/exp07/shield/exp07_shield_cryomantic',1096),(460,460,'accessories/wieldable_items/weapons/exp07/1h_sword/exp07_1h_sword_cryomantic',1096),(461,461,'accessories/wearable_items/woven/common/medium/chest',0),(462,462,'accessories/wearable_items/woven/common/medium/feet',0),(463,463,'accessories/wearable_items/woven/common/medium/forearms',0),(464,464,'accessories/wearable_items/woven/common/medium/hands',0),(465,465,'accessories/wearable_items/woven/common/medium/head',0),(466,466,'accessories/wearable_items/woven/common/medium/legs',0),(467,467,'accessories/wearable_items/woven/common/medium/shoulders',0),(468,468,'accessories/wearable_items/woven/common/medium/skirt',0),(469,469,'accessories/wearable_items/woven/common/low/chest',0),(470,470,'accessories/wearable_items/woven/common/low/feet',0),(471,471,'accessories/wearable_items/woven/common/low/forearms',0),(472,472,'accessories/wearable_items/woven/common/low/hands',0),(473,473,'accessories/wearable_items/woven/common/low/head',0),(474,474,'accessories/wearable_items/woven/common/low/legs',0),(475,475,'accessories/wearable_items/woven/common/low/shoulders',0),(476,476,'accessories/wearable_items/woven/common/low/skirt',0),(477,477,'accessories/wearable_items/woven/common/high/chest',0),(478,478,'accessories/wearable_items/woven/common/high/feet',0),(479,479,'accessories/wearable_items/woven/common/high/forearms',0),(480,480,'accessories/wearable_items/woven/common/high/hands',0),(481,481,'accessories/wearable_items/woven/common/high/head',0),(482,482,'accessories/wearable_items/woven/common/high/legs',0),(483,483,'accessories/wearable_items/woven/common/high/shoulders',0),(484,484,'accessories/wearable_items/woven/common/high/skirt',0),(485,485,'accessories/wearable_items/snapons/backpacks/backpack_velious_swivel/backpack_velious_swivel_skillet',1096),(486,486,'staticobjects/_exp07/exp07_dun_crystalcaverns/dpo_exp07_dun_crystalcavern_blocker01',1096),(487,487,'staticobjects/_exp07/exp07_dun_crystalcaverns/dpo_exp07_dun_crystalcavern_blocker01_green',1096),(488,488,'staticobjects/_exp07/exp07_dun_crystalcaverns/dpo_exp07_dun_crystalcavern_blocker01_purple',1096),(489,489,'accessories/wearable_items/_exp07/pirate_heavycloth/skirt',1096),(490,490,'accessories/wearable_items/_exp07/pirate_heavycloth/chest',1096),(491,491,'accessories/wearable_items/_exp07/pirate_heavycloth/feet',1096),(492,492,'accessories/wearable_items/_exp07/pirate_heavycloth/hands',1096),(493,493,'accessories/wearable_items/_exp07/pirate_heavycloth/legs',1096),(494,494,'accessories/wearable_items/_exp07/pirate_heavycloth/shoulders',1096),(495,495,'accessories/wearable_items/_exp07/pirate_heavycloth/belt/skirt',1096),(496,496,'accessories/wearable_items/_exp07/pirate_heavycloth/head/head',1096),(497,497,'_exp07/zones/exp07_dun_tower_of_frozen_shadow/teleport_vision_tofs_throne',1096),(498,498,'staticobjects/eig/exp03_eig_harvest_location_rare_dark',1096),(499,499,'staticobjects/eig/eig_harvest_location_dark',1096),(500,500,'accessories/wearable_items/_exp07/pirate_heavycloth_alt/shoulders',1096),(501,501,'accessories/wearable_items/_exp07/pirate_heavycloth_alt/chest',1096),(502,502,'accessories/wearable_items/_exp07/pirate_heavycloth_alt/feet',1096),(503,503,'accessories/wearable_items/_exp07/pirate_heavycloth_alt/hands',1096),(504,504,'accessories/wearable_items/_exp07/pirate_heavycloth_alt/legs',1096),(505,505,'_exp07/zones/exp07_dun_tower_of_frozen_shadow/tfs_floor04_lightsource_wall01_nolight',1096),(506,506,'accessories/wieldable_items/weapons/exp07/1h_crush/1h_crush_nipiks_cane_sm_npc_only_side',1096),(507,507,'creatures/mounts/plague_cloud_housing',1096),(508,508,'creatures/mounts/storm_cloud_raf_housing',1096),(509,509,'accessories/wearable_items/vanguard/uncommon/medium/chest',0),(510,510,'accessories/wearable_items/vanguard/uncommon/medium/feet',0),(511,511,'accessories/wearable_items/vanguard/uncommon/medium/forearms',0),(512,512,'accessories/wearable_items/vanguard/uncommon/medium/hands',0),(513,513,'accessories/wearable_items/vanguard/uncommon/medium/head',0),(514,514,'accessories/wearable_items/vanguard/uncommon/medium/legs',0),(515,515,'accessories/wearable_items/vanguard/uncommon/medium/shoulders',0),(516,516,'accessories/wearable_items/vanguard/uncommon/medium/left',0),(517,517,'accessories/wearable_items/vanguard/uncommon/medium/right',0),(518,518,'accessories/wearable_items/vanguard/uncommon/low/chest',0),(519,519,'accessories/wearable_items/vanguard/uncommon/low/feet',0),(520,520,'accessories/wearable_items/vanguard/uncommon/low/forearms',0),(521,521,'accessories/wearable_items/vanguard/uncommon/low/hands',0),(522,522,'accessories/wearable_items/vanguard/uncommon/low/head',0),(523,523,'accessories/wearable_items/vanguard/uncommon/low/legs',0),(524,524,'accessories/wearable_items/vanguard/uncommon/low/shoulders',0),(525,525,'accessories/wearable_items/vanguard/uncommon/low/left',0),(526,526,'accessories/wearable_items/vanguard/uncommon/low/right',0),(527,527,'accessories/wearable_items/vanguard/uncommon/high/chest',0),(528,528,'accessories/wearable_items/vanguard/uncommon/high/feet',0),(529,529,'accessories/wearable_items/vanguard/uncommon/high/forearms',0),(530,530,'accessories/wearable_items/vanguard/uncommon/high/hands',0),(531,531,'accessories/wearable_items/vanguard/uncommon/high/head',0),(532,532,'accessories/wearable_items/vanguard/uncommon/high/legs',0),(533,533,'accessories/wearable_items/vanguard/uncommon/high/shoulders',0),(534,534,'accessories/wearable_items/vanguard/uncommon/high/left',0),(535,535,'accessories/wearable_items/vanguard/uncommon/high/right',0),(536,536,'accessories/wearable_items/vanguard/rare/medium/chest',0),(537,537,'accessories/wearable_items/vanguard/rare/medium/feet',0),(538,538,'accessories/wearable_items/vanguard/rare/medium/forearms',0),(539,539,'accessories/wearable_items/vanguard/rare/medium/hands',0),(540,540,'accessories/wearable_items/vanguard/rare/medium/head',0),(541,541,'accessories/wearable_items/vanguard/rare/medium/legs',0),(542,542,'accessories/wearable_items/vanguard/rare/medium/shoulders',0),(543,543,'accessories/wearable_items/vanguard/rare/medium/right',0),(544,544,'accessories/wearable_items/vanguard/rare/medium/left',0),(545,545,'accessories/wearable_items/vanguard/rare/low/chest',0),(546,546,'accessories/wearable_items/vanguard/rare/low/feet',0),(547,547,'accessories/wearable_items/vanguard/rare/low/forearms',0),(548,548,'accessories/wearable_items/vanguard/rare/low/hands',0),(549,549,'accessories/wearable_items/vanguard/rare/low/head',0),(550,550,'accessories/wearable_items/vanguard/rare/low/legs',0),(551,551,'accessories/wearable_items/vanguard/rare/low/shoulders',0),(552,552,'accessories/wearable_items/vanguard/rare/low/left',0),(553,553,'accessories/wearable_items/vanguard/rare/low/right',0),(554,554,'_exp07/zones/exp07_dun_tower_of_frozen_shadow/tfs_floor06_mirror_emptyframe01',1096),(555,555,'_exp07/zones/exp07_rgn_great_divide/dock_construction_beams',1096),(556,556,'_exp07/zones/exp07_rgn_great_divide/dock_construction_boat',1096),(557,557,'_exp07/zones/exp07_rgn_great_divide/dock_construction_dingy',1096),(558,558,'accessories/wearable_items/_exp07/othmir_gi/shoulders',1096),(559,559,'accessories/wearable_items/_exp07/othmir_gi/chest',1096),(560,560,'accessories/wearable_items/_exp07/othmir_gi/feet',1096),(561,561,'accessories/wearable_items/_exp07/othmir_gi/legs',1096),(562,562,'accessories/wearable_items/_exp07/station_cash_armor/robe_wyrmskin/collar',1096),(563,563,'accessories/wearable_items/vanguard/common/medium/chest',0),(564,564,'accessories/wearable_items/vanguard/common/medium/feet',0),(565,565,'accessories/wearable_items/vanguard/common/medium/forearms',0),(566,566,'accessories/wearable_items/vanguard/common/medium/hands',0),(567,567,'accessories/wearable_items/vanguard/common/medium/head',0),(568,568,'accessories/wearable_items/vanguard/common/medium/legs',0),(569,569,'accessories/wearable_items/vanguard/common/medium/shoulders',0),(570,570,'accessories/wearable_items/vanguard/common/medium/left',0),(571,571,'accessories/wearable_items/vanguard/common/medium/right',0),(572,572,'accessories/wearable_items/vanguard/common/low/chest',0),(573,573,'accessories/wearable_items/vanguard/common/low/feet',0),(574,574,'accessories/wearable_items/vanguard/common/low/forearms',0),(575,575,'accessories/wearable_items/vanguard/common/low/hands',0),(576,576,'accessories/wearable_items/vanguard/common/low/head',0),(577,577,'accessories/wearable_items/vanguard/common/low/legs',0),(578,578,'accessories/wearable_items/vanguard/common/low/shoulders',0),(579,579,'accessories/wearable_items/vanguard/common/low/right',0),(580,580,'accessories/wearable_items/vanguard/common/low/left',0),(581,581,'accessories/wearable_items/vanguard/common/high/chest',0),(582,582,'accessories/wearable_items/vanguard/common/high/feet',0),(583,583,'accessories/wearable_items/vanguard/common/high/forearms',0),(584,584,'accessories/wearable_items/vanguard/common/high/hands',0),(585,585,'accessories/wearable_items/vanguard/common/high/head',0),(586,586,'accessories/wearable_items/vanguard/common/high/legs',0),(587,587,'accessories/wearable_items/vanguard/common/high/shoulders',0),(588,588,'accessories/wearable_items/vanguard/common/high/left',0),(589,589,'accessories/wearable_items/vanguard/common/high/right',0),(590,590,'accessories/wearable_items/_exp07/station_cash_armor/robe_wyrmskin/charcoal/collar',1096),(591,591,'accessories/wearable_items/_exp07/station_cash_armor/robe_wyrmskin/green/collar',1096),(592,592,'accessories/wearable_items/_exp07/station_cash_armor/robe_wyrmskin/red/collar',1096),(593,593,'staticobjects/promo_items/exp07_portalpaintings_wakeninglands',1096),(594,594,'staticobjects/promo_items/exp07_portalpaintings_nipikshaven',1096),(595,595,'staticobjects/promo_items/exp07_portalpaintings_ringwar',1096),(596,596,'staticobjects/promo_items/exp07_portalpaintings_thurgadin',1096),(597,597,'_exp07/zones/exp07_dun_tower_of_frozen_shadow/doorknob',1096),(598,598,'accessories/wieldable_items/weapons/fist/monk_1h_glow_sun',1096),(599,599,'accessories/wieldable_items/weapons/exp07/1h_sword/goth_dagger_01_fx',1096),(600,600,'accessories/wieldable_items/weapons/exp07/shield/goth_shield_01_fx',1096),(601,601,'accessories/wearable_items/snapons/armbands/shoulders_armband_wyrm_wrap_right',1096),(602,602,'accessories/wearable_items/snapons/armbands/shoulders_armband_wyrm_wrap_both',1096),(603,603,'accessories/wearable_items/snapons/armbands/shoulders_armband_wyrm_wrap_left',1096),(604,604,'staticobjects/statues/dpo_menagerie_scrying_cube',1096),(605,605,'accessories/wieldable_items/shields/exp07/dragon_shield',1096),(606,606,'staticobjects/promo_items/exp07_tserrina_tofs_houseitem',1096),(607,607,'creatures/mounts/warhog_mount/warhog',1096),(608,608,'accessories/wieldable_items/weapons/exp07/shield/exp07_shield_kite_kraytok',1096),(609,609,'accessories/wieldable_items/weapons/exp07/shield/exp07_buckler_celestial',1096),(610,610,'accessories/wieldable_items/weapons/exp07/shield/exp07_shield_round_celestial',1096),(611,611,'accessories/wieldable_items/weapons/exp07/shield/exp07_shield_kite_diabolic',1096),(612,612,'accessories/wieldable_items/weapons/exp07/shield/exp07_buckler_diabolic',1096),(613,613,'accessories/wieldable_items/weapons/exp07/shield/exp07_shield_tower_diabolic',1096),(614,614,'accessories/wieldable_items/weapons/exp07/shield/exp07_shield_tower_arcane',1096),(615,615,'accessories/wieldable_items/weapons/exp07/shield/exp07_buckler_kraytok',1096),(616,616,'accessories/wieldable_items/weapons/exp07/shield/exp07_shield_cross_kraytok',1096),(617,617,'creatures/mounts/bear_mount_undead/bear_mount_undead',1096),(618,618,'creatures/mounts/warhog_mount/warhog_mount',1096),(619,619,'_exp06/characters/tool_users/snow_orc/snow_orc_ghosts/snow_orc_ghost_shaman',1096),(620,620,'_exp06/characters/tool_users/snow_orc/snow_orc_ghosts/snow_orc_ghost_chief',1096),(621,621,'_exp06/characters/tool_users/snow_orc/snow_orc_ghosts/snow_orc_ghost_common01',1096),(622,622,'_exp06/characters/tool_users/snow_orc/snow_orc_ghosts/snow_orc_ghost_common02',1096),(623,623,'_exp06/characters/tool_users/snow_orc/snow_orc_ghosts/snow_orc_ghost_common03',1096),(624,624,'_exp06/characters/tool_users/snow_orc/snow_orc_ghosts/snow_orc_ghost_common04',1096),(625,625,'_exp06/characters/tool_users/snow_orc/snow_orc_ghosts/snow_orc_ghost_heavy01',1096),(626,626,'_exp06/characters/tool_users/snow_orc/snow_orc_ghosts/snow_orc_ghost_heavy02',1096),(627,627,'_exp06/characters/tool_users/snow_orc/snow_orc_ghosts/snow_orc_ghost_heavy03',1096),(628,628,'_exp06/characters/tool_users/snow_orc/snow_orc_ghosts/snow_orc_ghost_hunter01',1096),(629,629,'_exp06/characters/tool_users/snow_orc/snow_orc_ghosts/snow_orc_ghost_hunter02',1096),(630,630,'_exp06/characters/tool_users/snow_orc/snow_orc_ghosts/snow_orc_ghost_hunter03',1096),(631,631,'creatures/mounts/warhog_mount/warhog_drunder',1096),(632,632,'_exp07/characters/monsters/warhog/warhog_drunder',1096),(633,633,'_exp07/characters/monsters/warhog/warhog',1096),(634,634,'creatures/mounts/horse_heavy/horse_stallion_ice',1096),(635,635,'accessories/wearable_items/tradesman/common/medium/arms',0),(636,636,'accessories/wearable_items/tradesman/common/medium/chest',0),(637,637,'accessories/wearable_items/tradesman/common/medium/legs',0),(638,638,'accessories/wearable_items/tradesman/common/low/arms',0),(639,639,'accessories/wearable_items/tradesman/common/low/chest',0),(640,640,'accessories/wearable_items/tradesman/common/low/legs',0),(641,641,'staticobjects/flora/dpo_ew_plant_red01',1096),(642,642,'staticobjects/flora/dpo_ew_plant_red02',1096),(643,643,'staticobjects/flora/dpo_ew_plant_red03',1096),(644,644,'staticobjects/flora/dpo_ew_plant_red04',1096),(645,645,'accessories/wieldable_items/weapons/exp07/1h_sword/exp07_1h_axe_pure_rage_pc',1096),(646,646,'creatures/mounts/griffin_mount/griffin_mount_red',1096),(647,647,'staticobjects/_exp07/kael/kd_ballista',1096),(648,648,'staticobjects/_exp07/kael/kd_banner_swinging_long',1096),(649,649,'staticobjects/_exp07/kael/kd_banner_swinging_shinvet',1096),(650,650,'staticobjects/_exp07/kael/kd_banner_swinging_shpoint',1096),(651,651,'staticobjects/_exp07/kael/kd_bar',1096),(652,652,'staticobjects/_exp07/kael/kd_barrel',1096),(653,653,'accessories/wearable_items/plate/uncommon/medium/chest',0),(654,654,'accessories/wearable_items/plate/uncommon/medium/feet',0),(655,655,'accessories/wearable_items/plate/uncommon/medium/forearms',0),(656,656,'accessories/wearable_items/plate/uncommon/medium/hands',0),(657,657,'accessories/wearable_items/plate/uncommon/medium/head',0),(658,658,'accessories/wearable_items/plate/uncommon/medium/legs',0),(659,659,'accessories/wearable_items/plate/uncommon/medium/shoulders',0),(660,660,'accessories/wearable_items/plate/uncommon/low/chest',0),(661,661,'accessories/wearable_items/plate/uncommon/low/feet',0),(662,662,'accessories/wearable_items/plate/uncommon/low/forearms',0),(663,663,'accessories/wearable_items/plate/uncommon/low/hands',0),(664,664,'accessories/wearable_items/plate/uncommon/low/head',0),(665,665,'accessories/wearable_items/plate/uncommon/low/legs',0),(666,666,'accessories/wearable_items/plate/uncommon/low/shoulders',0),(667,667,'staticobjects/_exp07/kael/kd_barrel_broken',1096),(668,668,'staticobjects/_exp07/kael/kd_bed_lrg',1096),(669,669,'staticobjects/_exp07/kael/kd_bed_sml',1096),(670,670,'staticobjects/_exp07/kael/kd_boiling_pot',1096),(671,671,'staticobjects/_exp07/kael/kd_bookcase',1096),(672,672,'staticobjects/_exp07/kael/kd_chair',1096),(673,673,'staticobjects/_exp07/kael/kd_chest_lrg',1096),(674,674,'staticobjects/_exp07/kael/kd_dragonbone_ancient',1096),(675,675,'staticobjects/_exp07/kael/kd_fence_link',1096),(676,676,'staticobjects/_exp07/kael/kd_fighting_ring',1096),(677,677,'staticobjects/_exp07/kael/kd_firebowl',1096),(678,678,'staticobjects/_exp07/kael/kd_forge_orc',1096),(679,679,'staticobjects/_exp07/kael/kd_fountain_sml',1096),(680,680,'staticobjects/_exp07/kael/kd_keg',1096),(681,681,'staticobjects/_exp07/kael/kd_mapboard',1096),(682,682,'staticobjects/_exp07/kael/kd_mug',1096),(683,683,'staticobjects/_exp07/kael/kd_podium',1096),(684,684,'staticobjects/_exp07/kael/kd_powerball',1096),(685,685,'staticobjects/_exp07/kael/kd_statue_tormax_point',1096),(686,686,'staticobjects/_exp07/kael/kd_statue_tormax_pose',1096),(687,687,'staticobjects/_exp07/kael/kd_statue_zek_crch',1096),(688,688,'accessories/wieldable_items/weapons/exp07/vampire_appearance/exp07_vampire_unarmed',1096),(689,689,'staticobjects/_exp07/kael/kd_statue_zek_half',1096),(690,690,'staticobjects/_exp07/kael/kd_statue_zek_stnd',1096),(691,691,'staticobjects/_exp07/kael/kd_swinging_hanglamp',1096),(692,692,'staticobjects/_exp07/kael/kd_table_sml',1096),(693,693,'staticobjects/_exp07/kael/kd_weapons_rack',1096),(694,694,'staticobjects/_exp07/orc/vel_island03_peltdoor01_nosnow',1096),(695,695,'accessories/wearable_items/plate/common/medium/chest',0),(696,696,'accessories/wearable_items/plate/common/medium/feet',0),(697,697,'accessories/wearable_items/plate/common/medium/forearms',0),(698,698,'accessories/wearable_items/plate/common/medium/hands',0),(699,699,'accessories/wearable_items/plate/common/medium/head',0),(700,700,'accessories/wearable_items/plate/common/medium/legs',0),(701,701,'accessories/wearable_items/plate/common/medium/shoulders',0),(702,702,'accessories/wearable_items/plate/common/low/chest',0),(703,703,'accessories/wearable_items/plate/common/low/feet',0),(704,704,'accessories/wearable_items/plate/common/low/forearms',0),(705,705,'accessories/wearable_items/plate/common/low/hands',0),(706,706,'accessories/wearable_items/plate/common/low/head',0),(707,707,'accessories/wearable_items/plate/common/low/legs',0),(708,708,'accessories/wearable_items/plate/common/low/shoulders',0),(709,709,'accessories/wearable_items/plate/common/high/chest',0),(710,710,'accessories/wearable_items/plate/common/high/feet',0),(711,711,'accessories/wearable_items/plate/common/high/forearms',0),(712,712,'accessories/wearable_items/plate/common/high/hands',0),(713,713,'accessories/wearable_items/plate/common/high/head',0),(714,714,'accessories/wearable_items/plate/common/high/legs',0),(715,715,'accessories/wearable_items/plate/common/high/shoulders',0),(716,716,'staticobjects/_exp07/orc/vel_orc_bench01',1096),(717,717,'staticobjects/_exp07/orc/vel_orc_camp_bear_trap_open',1096),(718,718,'staticobjects/_exp07/orc/vel_orc_camp_brazier01',1096),(719,719,'staticobjects/_exp07/orc/vel_orc_chair01',1096),(720,720,'staticobjects/_exp07/orc/vel_orc_chest_shoddy',1096),(721,721,'staticobjects/_exp07/orc/vel_orc_throne',1096),(722,722,'staticobjects/_exp07/orc/vel_orc_wheelbarrow_orc01',1096),(723,723,'staticobjects/_exp07/orc/vel_throne_orc01',1096),(724,724,'staticobjects/_exp07/othmir/dpo_exp07_1h_club_nipiks_cane',1096),(725,725,'staticobjects/_exp07/othmir/vel_iceclad_othmir_shell01_dpo',1096),(726,726,'staticobjects/_exp07/othmir/vel_othmir_basket01_nosnow',1096),(727,727,'staticobjects/_exp07/othmir/vel_othmir_basket02',1096),(728,728,'staticobjects/_exp07/othmir/vel_othmir_basket04',1096),(729,729,'staticobjects/_exp07/othmir/vel_othmir_basket04_shells_nosnow',1096),(730,730,'staticobjects/_exp07/othmir/vel_othmir_bed01_nosnow',1096),(731,731,'staticobjects/_exp07/othmir/vel_othmir_candle_holder01_dpo',1096),(732,732,'staticobjects/_exp07/othmir/vel_othmir_chair01_red',1096),(733,733,'staticobjects/_exp07/othmir/vel_othmir_chair01_woven',1096),(734,734,'staticobjects/_exp07/othmir/vel_othmir_crab_pot_floater02',1096),(735,735,'staticobjects/_exp07/othmir/vel_othmir_fish_rack01_nosnow',1096),(736,736,'staticobjects/_exp07/othmir/vel_othmir_fish_skeleton01',1096),(737,737,'accessories/wearable_items/magus/uncommon/medium/chest',0),(738,738,'staticobjects/_exp07/othmir/vel_othmir_floor_tray01',1096),(739,739,'accessories/wearable_items/magus/uncommon/medium/skirt',0),(740,740,'staticobjects/_exp07/othmir/vel_othmir_hanging_fish01',1096),(741,741,'accessories/wearable_items/magus/uncommon/medium/pants',0),(742,742,'staticobjects/_exp07/othmir/vel_othmir_lightsource01_nosnow',1096),(743,743,'accessories/wearable_items/magus/uncommon/low/chest',0),(744,744,'staticobjects/_exp07/othmir/vel_othmir_lightsource_hanging01_nosnow',1096),(745,745,'accessories/wearable_items/magus/uncommon/low/skirt',0),(746,746,'staticobjects/_exp07/othmir/vel_othmir_net_basket01_nosnow',1096),(747,747,'staticobjects/_exp07/othmir/vel_othmir_nipiks_memorial_01',1096),(748,748,'staticobjects/_exp07/othmir/vel_othmir_prexus_shrine_01_dpo',1096),(749,749,'accessories/wearable_items/magus/uncommon/high/chest',0),(750,750,'staticobjects/_exp07/othmir/vel_othmir_throne01_nosnow',1096),(751,751,'accessories/wearable_items/magus/uncommon/high/skirt',0),(752,752,'staticobjects/_exp07/snowfang/vel_iceclad_gnoll_banner01',1096),(753,753,'staticobjects/_exp07/snowfang/vel_iceclad_gnoll_chair01_nosnow',1096),(754,754,'accessories/wearable_items/magus/uncommon/high/pants',0),(755,755,'accessories/wearable_items/magus/rare/medium/chest',0),(756,756,'staticobjects/_exp07/snowfang/vel_iceclad_gnoll_dreamcatcher01_green_dpo',1096),(757,757,'staticobjects/_exp07/snowfang/vel_iceclad_shaman_drum01',1096),(758,758,'staticobjects/_exp07/snowfang/vel_iceclad_shaman_drum02',1096),(759,759,'accessories/wearable_items/magus/rare/medium/pants',0),(760,760,'staticobjects/_exp07/thurgadin/banner_thur_01_left',1096),(761,761,'accessories/wearable_items/magus/rare/low/chest',0),(762,762,'staticobjects/_exp07/thurgadin/banner_thur_01_right',1096),(763,763,'accessories/wearable_items/magus/rare/low/skirt',0),(764,764,'staticobjects/_exp07/thurgadin/banner_thur_02_left',1096),(765,765,'accessories/wearable_items/magus/rare/low/pants',0),(766,766,'accessories/wearable_items/magus/rare/low/hood',0),(767,767,'accessories/wearable_items/magus/rare/high/chest',0),(768,768,'staticobjects/_exp07/thurgadin/banner_thur_02_right',1096),(769,769,'accessories/wearable_items/magus/rare/high/skirt',0),(770,770,'staticobjects/_exp07/thurgadin/banner_thur_03_left',1096),(771,771,'accessories/wearable_items/magus/rare/high/pants',0),(772,772,'staticobjects/_exp07/thurgadin/banner_thur_03_right',1096),(773,773,'accessories/wearable_items/magus/common/medium/chest',0),(774,774,'staticobjects/_exp07/thurgadin/thur_blue_lamp_01',1096),(775,775,'accessories/wearable_items/magus/common/medium/skirt',0),(776,776,'staticobjects/_exp07/thurgadin/thur_chair_01',1096),(777,777,'staticobjects/_exp07/thurgadin/thur_chair_02',1096),(778,778,'staticobjects/_exp07/thurgadin/thur_chair_03',1096),(779,779,'accessories/wearable_items/magus/common/medium/hood',0),(780,780,'accessories/wearable_items/magus/common/medium/pants',0),(781,781,'staticobjects/_exp07/thurgadin/thur_table_01',1096),(782,782,'accessories/wearable_items/magus/common/low/chest',0),(783,783,'accessories/wearable_items/magus/common/low/skirt',0),(784,784,'staticobjects/_exp07/thurgadin/thur_table_02',1096),(785,785,'staticobjects/_exp07/thurgadin/thur_table_03',1096),(786,786,'staticobjects/_exp07/thurgadin/thur_table_04',1096),(787,787,'staticobjects/_exp07/thurgadin/torch_single_blue_fire_01',1096),(788,788,'accessories/wearable_items/_exp07/deepwater_knight/robe/skirt',1096),(789,789,'accessories/wearable_items/_exp07/deepwater_knight/robe/chest',1096),(790,790,'accessories/wearable_items/magus/common/low/pants',0),(791,791,'accessories/wearable_items/magus/common/low/hood',0),(792,792,'accessories/wearable_items/_exp07/deepwater_knight/robe/epic_pauldron_left',1096),(793,793,'accessories/wearable_items/magus/common/high/skirt',0),(794,794,'accessories/wearable_items/_exp07/deepwater_knight/robe/epic_pauldron_right',1096),(795,795,'accessories/wearable_items/magus/common/high/chest',0),(796,796,'accessories/wearable_items/_exp07/deepwater_knight/robe/feet',1096),(797,797,'accessories/wearable_items/magus/common/high/pants',0),(798,798,'accessories/wearable_items/_exp07/deepwater_knight/robe/hands',1096),(799,799,'accessories/wearable_items/magus/artifact/medium/chest',0),(800,800,'accessories/wearable_items/_exp07/deepwater_knight/robe/head',1096),(801,801,'accessories/wearable_items/magus/artifact/medium/skirt',0),(802,802,'accessories/wearable_items/_exp07/deepwater_knight/robe/head_collar',1096),(803,803,'accessories/wearable_items/magus/artifact/low/chest',0),(804,804,'accessories/wearable_items/_exp07/deepwater_knight/robe/head_epic',1096),(805,805,'accessories/wearable_items/magus/artifact/low/skirt',0),(806,806,'accessories/wearable_items/_exp07/deepwater_knight/robe/pants',1096),(807,807,'accessories/wearable_items/magus/artifact/high/chest',0),(808,808,'accessories/wearable_items/_exp07/deepwater_knight/robe/pauldron_left',1096),(809,809,'accessories/wearable_items/magus/artifact/high/skirt',0),(810,810,'accessories/wearable_items/_exp07/deepwater_knight/robe/pauldron_right',1096),(811,811,'accessories/wearable_items/chain/uncommon/medium/chest',0),(812,812,'accessories/wearable_items/chain/uncommon/medium/feet',0),(813,813,'accessories/wearable_items/chain/uncommon/medium/forearms',0),(814,814,'accessories/wearable_items/chain/uncommon/medium/hands',0),(815,815,'accessories/wearable_items/chain/uncommon/medium/head',0),(816,816,'accessories/wearable_items/chain/uncommon/medium/legs',0),(817,817,'accessories/wearable_items/chain/uncommon/medium/shoulders',0),(818,818,'accessories/wearable_items/chain/uncommon/medium/skirt',0),(819,819,'accessories/wearable_items/chain/uncommon/low/chest',0),(820,820,'accessories/wearable_items/chain/uncommon/low/feet',0),(821,821,'accessories/wearable_items/chain/uncommon/low/forearms',0),(822,822,'accessories/wearable_items/chain/uncommon/low/hands',0),(823,823,'accessories/wearable_items/chain/uncommon/low/head',0),(824,824,'accessories/wearable_items/chain/uncommon/low/legs',0),(825,825,'accessories/wearable_items/chain/uncommon/low/shoulders',0),(826,826,'staticobjects/_exp07/kael/kd_table_lrg',1096),(827,827,'staticobjects/_exp07/velks/exp07_dun_velkslab_fortress_messhall01_tablepart01_chair01_big01_dpo',1096),(828,828,'staticobjects/_exp07/velks/exp07_dun_velks_forgotten_pools_hallway03_light01_dpo',1096),(829,829,'staticobjects/_exp07/velks/exp07_dun_velks_forgotten_pools_pod01',1096),(830,830,'staticobjects/_exp07/velks/exp07_dun_velks_forgotten_pools_shapery01_plant01_blue01',1096),(831,831,'staticobjects/_exp07/velks/exp07_dun_velks_forgotten_pools_shapery01_plant01_red01',1096),(832,832,'staticobjects/_exp07/velks/exp07_dun_velkslab_fortress_banner05_single01',1096),(833,833,'staticobjects/_exp07/velks/exp07_dun_velkslab_fortress_banner06_single01',1096),(834,834,'creatures/monsters/bat_crystal_cave_green',1096),(835,835,'creatures/monsters/bat_crystal_cave_blue',1096),(836,836,'_exp07/characters/tool_users/othmir/othmir_male_speaker_osh',1096),(837,837,'_exp07/characters/tool_users/othmir/othmir_female_peasent_03_spotted',1096),(838,838,'_exp07/characters/tool_users/othmir/othmir_female_peasent_04_dark_blue',1096),(839,839,'_exp07/characters/tool_users/othmir/othmir_male_chief',1096),(840,840,'accessories/wearable_items/snapons/backpacks/crossblades',1096),(841,841,'accessories/wieldable_items/weapons/staff/djinn_staff/djinn_staff_blue',1096),(842,842,'creatures/mounts/flying_disc/gnome_racemount01',1096),(843,843,'staticobjects/_exp07/exp07_rgn_eastern_wastes/vel_rock_cave_small01_glow01',1096),(844,844,'staticobjects/_exp07/exp07_rgn_eastern_wastes/vel_rock_cave_small01_glow02',1096),(845,845,'staticobjects/_exp07/exp07_rgn_eastern_wastes/vel_rock_cave_small02_glow01',1096),(846,846,'staticobjects/_exp07/exp07_rgn_eastern_wastes/vel_rock_cave_small02_glow02',1096),(847,847,'staticobjects/containers/slove_basket01_pom01',1096),(848,848,'staticobjects/books/cm_book01',1096),(849,849,'staticobjects/books/cm_book02',1096),(850,850,'staticobjects/chairs/cm_chair_dining01',1096),(851,851,'staticobjects/chairs/cm_chair_dining02',1096),(852,852,'staticobjects/tables/cm_table_coffee01',1096),(853,853,'staticobjects/bottles/sen_potions03',1096),(854,854,'staticobjects/liveevent/erollisi_objects/errolisi_yellowroses_fatcandle_white',1096),(855,855,'staticobjects/liveevent/erollisi_objects/errolisi_redroses_fatcandle_white',1096),(856,856,'staticobjects/liveevent/erollisi_objects/errolisi_purpleroses_fatcandle_white',1096),(857,857,'staticobjects/liveevent/erollisi_objects/errolisi_pinkroses_fatcandle_white',1096),(858,858,'staticobjects/liveevent/erollisi_objects/errolisi_wood_gazebo_pfx',1096),(859,859,'accessories/wearable_items/chain/common/medium/chest',0),(860,860,'accessories/wearable_items/chain/common/medium/feet',0),(861,861,'accessories/wearable_items/chain/common/medium/forearms',0),(862,862,'accessories/wearable_items/chain/common/medium/hands',0),(863,863,'accessories/wearable_items/chain/common/medium/head',0),(864,864,'accessories/wearable_items/chain/common/medium/legs',0),(865,865,'accessories/wearable_items/chain/common/medium/shoulders',0),(866,866,'staticobjects/liveevent/erollisi_objects/sen_divider_01_purple',1096),(867,867,'accessories/wearable_items/chain/common/low/chest',0),(868,868,'accessories/wearable_items/chain/common/low/feet',0),(869,869,'accessories/wearable_items/chain/common/low/forearms',0),(870,870,'accessories/wearable_items/chain/common/low/hands',0),(871,871,'accessories/wearable_items/chain/common/low/head',0),(872,872,'accessories/wearable_items/chain/common/low/legs',0),(873,873,'accessories/wearable_items/chain/common/low/shoulders',0),(874,874,'accessories/wearable_items/profesion_hats/firiona_vie_tiara_lon/head_firiona_vie_tiara_lon',1096),(875,875,'accessories/wearable_items/chain/common/high/chest',0),(876,876,'accessories/wearable_items/chain/common/high/feet',0),(877,877,'accessories/wearable_items/chain/common/high/forearms',0),(878,878,'accessories/wearable_items/chain/common/high/hands',0),(879,879,'accessories/wearable_items/chain/common/high/head',0),(880,880,'accessories/wearable_items/chain/common/high/legs',0),(881,881,'accessories/wearable_items/chain/common/high/shoulders',0),(882,882,'accessories/wearable_items/_exp07/robe_darkmetal/skirt',1096),(883,883,'accessories/wearable_items/_exp07/robe_darkmetal/chest',1096),(884,884,'accessories/wearable_items/_exp07/robe_darkmetal/feet',1096),(885,885,'staticobjects/_exp07/velious/ew_bush_purp',1096),(886,886,'staticobjects/_exp07/velious/ew_dead_stump_01',1096),(887,887,'staticobjects/_exp07/velious/ew_grass01',1096),(888,888,'staticobjects/_exp07/velious/ew_rotted_tree',1096),(889,889,'staticobjects/_exp07/velious/ew_shell_nautilus01_dpo',1096),(890,890,'staticobjects/_exp07/velious/goahmari_village_light01_nosnow01',1096),(891,891,'staticobjects/_exp07/velious/vel_lightsource_lantern01_swinging',1096),(892,892,'staticobjects/_exp07/velious/vel_rime_banner01_snow01',1096),(893,893,'accessories/wearable_items/_exp07/robe_darkmetal/hands',1096),(894,894,'accessories/wearable_items/_exp07/robe_darkmetal/head',1096),(895,895,'accessories/wearable_items/_exp07/robe_darkmetal/head_collar',1096),(896,896,'accessories/wearable_items/_exp07/robe_darkmetal/pants',1096),(897,897,'staticobjects/guildhall/trophies/floor_kraytoc',1096),(898,898,'staticobjects/guildhall/trophies/floor_king_tormax',1096),(899,899,'staticobjects/guildhall/trophies/floor_statue_of_rallos_zek',1096),(900,900,'staticobjects/_exp07/kael/kd_chair_grand',1096),(901,901,'staticobjects/_exp07/tizmak/vel_iceclad_gnoll_chair01_nosnow',1096),(902,902,'staticobjects/_exp07/tizmak/vel_iceclad_lantern01',1096),(903,903,'staticobjects/_exp07/tizmak/vel_lightsource_lantern01_swinging',1096),(904,904,'staticobjects/_exp07/tizmak/vel_tizmak_items01_barrel01',1096),(905,905,'staticobjects/_exp07/tizmak/vel_tizmak_items01_bed01',1096),(906,906,'staticobjects/_exp07/tizmak/vel_tizmak_items01_bench01',1096),(907,907,'accessories/wearable_items/brigandine/uncommon/medium/chest',0),(908,908,'accessories/wearable_items/brigandine/uncommon/medium/feet',0),(909,909,'accessories/wearable_items/brigandine/uncommon/medium/forearms',0),(910,910,'accessories/wearable_items/brigandine/uncommon/medium/hands',0),(911,911,'accessories/wearable_items/brigandine/uncommon/medium/head',0),(912,912,'accessories/wearable_items/brigandine/uncommon/medium/legs',0),(913,913,'accessories/wearable_items/brigandine/uncommon/medium/shoulders',0),(914,914,'accessories/wearable_items/brigandine/uncommon/low/chest',0),(915,915,'accessories/wearable_items/brigandine/uncommon/low/feet',0),(916,916,'accessories/wearable_items/brigandine/uncommon/low/forearms',0),(917,917,'accessories/wearable_items/brigandine/uncommon/low/hands',0),(918,918,'accessories/wearable_items/brigandine/uncommon/low/head',0),(919,919,'accessories/wearable_items/brigandine/uncommon/low/legs',0),(920,920,'accessories/wearable_items/brigandine/uncommon/low/shoulders',0),(921,921,'accessories/wearable_items/brigandine/uncommon/high/chest',0),(922,922,'accessories/wearable_items/brigandine/uncommon/high/feet',0),(923,923,'accessories/wearable_items/brigandine/uncommon/high/forearms',0),(924,924,'accessories/wearable_items/brigandine/uncommon/high/hands',0),(925,925,'accessories/wearable_items/brigandine/uncommon/high/head',0),(926,926,'accessories/wearable_items/brigandine/uncommon/high/legs',0),(927,927,'accessories/wearable_items/brigandine/uncommon/high/shoulders',0),(928,928,'accessories/wearable_items/brigandine/rare/medium/chest',0),(929,929,'accessories/wearable_items/brigandine/rare/medium/feet',0),(930,930,'accessories/wearable_items/brigandine/rare/medium/forearms',0),(931,931,'accessories/wearable_items/brigandine/rare/medium/hands',0),(932,932,'accessories/wearable_items/brigandine/rare/medium/head',0),(933,933,'accessories/wearable_items/brigandine/rare/medium/legs',0),(934,934,'accessories/wearable_items/brigandine/rare/medium/shoulders',0),(935,935,'accessories/wearable_items/brigandine/rare/low/chest',0),(936,936,'accessories/wearable_items/brigandine/rare/low/feet',0),(937,937,'accessories/wearable_items/brigandine/rare/low/forearms',0),(938,938,'accessories/wearable_items/brigandine/rare/low/hands',0),(939,939,'accessories/wearable_items/brigandine/rare/low/head',0),(940,940,'accessories/wearable_items/brigandine/rare/low/legs',0),(941,941,'accessories/wearable_items/brigandine/rare/low/shoulders',0),(942,942,'accessories/wearable_items/brigandine/rare/high/chest',0),(943,943,'accessories/wearable_items/brigandine/rare/high/feet',0),(944,944,'accessories/wearable_items/brigandine/rare/high/forearms',0),(945,945,'accessories/wearable_items/brigandine/rare/high/hands',0),(946,946,'accessories/wearable_items/brigandine/rare/high/head',0),(947,947,'accessories/wearable_items/brigandine/rare/high/legs',0),(948,948,'accessories/wearable_items/brigandine/rare/high/shoulders',0),(949,949,'accessories/wearable_items/brigandine/common/medium/chest',0),(950,950,'accessories/wearable_items/brigandine/common/medium/feet',0),(951,951,'accessories/wearable_items/brigandine/common/medium/forearms',0),(952,952,'accessories/wearable_items/brigandine/common/medium/hands',0),(953,953,'accessories/wearable_items/brigandine/common/medium/head',0),(954,954,'accessories/wearable_items/brigandine/common/medium/legs',0),(955,955,'accessories/wearable_items/brigandine/common/medium/shoulders',0),(956,956,'accessories/wearable_items/brigandine/common/low/chest',0),(957,957,'accessories/wearable_items/brigandine/common/low/feet',0),(958,958,'accessories/wearable_items/brigandine/common/low/forearms',0),(959,959,'accessories/wearable_items/brigandine/common/low/hands',0),(960,960,'accessories/wearable_items/brigandine/common/low/head',0),(961,961,'accessories/wearable_items/brigandine/common/low/legs',0),(962,962,'accessories/wearable_items/brigandine/common/low/shoulders',0),(963,963,'accessories/wearable_items/brigandine/common/high/chest',0),(964,964,'accessories/wearable_items/brigandine/common/high/feet',0),(965,965,'accessories/wearable_items/brigandine/common/high/forearms',0),(966,966,'accessories/wearable_items/brigandine/common/high/hands',0),(967,967,'accessories/wearable_items/brigandine/common/high/head',0),(968,968,'accessories/wearable_items/brigandine/common/high/legs',0),(969,969,'accessories/wearable_items/brigandine/common/high/shoulders',0),(970,970,'staticobjects/_exp07/tizmak/vel_tizmak_items01_brazier01',1096),(971,971,'staticobjects/_exp07/tizmak/vel_tizmak_items01_chair01',1096),(972,972,'staticobjects/_exp07/tizmak/vel_tizmak_items01_drum01',1096),(973,973,'staticobjects/_exp07/tizmak/vel_tizmak_items01_light01',1096),(974,974,'staticobjects/_exp07/tizmak/vel_tizmak_items01_marker01',1096),(975,975,'staticobjects/_exp07/tizmak/vel_tizmak_items01_marker02',1096),(976,976,'staticobjects/_exp07/tizmak/vel_tizmak_items01_partition01',1096),(977,977,'accessories/wearable_items/brigandine/artifact/low/chest',0),(978,978,'accessories/wearable_items/brigandine/artifact/low/feet',0),(979,979,'accessories/wearable_items/brigandine/artifact/low/forearms',0),(980,980,'accessories/wearable_items/brigandine/artifact/low/hands',0),(981,981,'accessories/wearable_items/brigandine/artifact/low/head',0),(982,982,'accessories/wearable_items/brigandine/artifact/low/legs',0),(983,983,'accessories/wearable_items/brigandine/artifact/low/shoulders',0),(984,984,'staticobjects/_exp07/tizmak/vel_tizmak_items01_walllight01',1096),(985,985,'creatures/mounts/griffin_mount/griffin_mount_green',1096),(986,986,'creatures/mounts/griffin_mount/griffin_mount_black_evil',1096),(987,987,'staticobjects/_exp07/orc/vel_orc_lightsource_wall_sconce02',1096),(988,988,'staticobjects/_exp07/othmir/vel_othmir_bucket01_fish',1096),(989,989,'staticobjects/_exp07/othmir/vel_othmir_basket01_shells',1096),(990,990,'creatures/mounts/griffin_mount/griffin_mount_arctic',1096),(991,991,'accessories/wearable_items/leather/uncommon/medium/chest',0),(992,992,'accessories/wearable_items/leather/uncommon/medium/feet',0),(993,993,'accessories/wearable_items/leather/uncommon/medium/forearms',0),(994,994,'accessories/wearable_items/leather/uncommon/medium/hands',0),(995,995,'accessories/wearable_items/leather/uncommon/medium/head',0),(996,996,'accessories/wearable_items/leather/uncommon/medium/legs',0),(997,997,'accessories/wearable_items/leather/uncommon/medium/shoulders',0),(998,998,'accessories/wearable_items/leather/uncommon/medium/skirt',0),(999,999,'accessories/wearable_items/leather/uncommon/low/chest',0),(1000,1000,'accessories/wearable_items/leather/uncommon/low/feet',0),(1001,1001,'accessories/wearable_items/leather/uncommon/low/forearms',0),(1002,1002,'accessories/wearable_items/leather/uncommon/low/hands',0),(1003,1003,'accessories/wearable_items/leather/uncommon/low/head',0),(1004,1004,'accessories/wearable_items/leather/uncommon/low/legs',0),(1005,1005,'accessories/wearable_items/leather/uncommon/low/shoulders',0),(1006,1006,'accessories/wearable_items/leather/uncommon/low/skirt',0),(1007,1007,'accessories/wearable_items/leather/uncommon/high/chest',0),(1008,1008,'accessories/wearable_items/leather/uncommon/high/feet',0),(1009,1009,'accessories/wearable_items/leather/uncommon/high/forearms',0),(1010,1010,'accessories/wearable_items/leather/uncommon/high/hands',0),(1011,1011,'accessories/wearable_items/leather/uncommon/high/head',0),(1012,1012,'accessories/wearable_items/leather/uncommon/high/legs',0),(1013,1013,'accessories/wearable_items/leather/uncommon/high/shoulders',0),(1014,1014,'accessories/wearable_items/leather/uncommon/high/skirt',0),(1015,1015,'accessories/wearable_items/leather/rare/medium/chest',0),(1016,1016,'accessories/wearable_items/leather/rare/medium/feet',0),(1017,1017,'accessories/wearable_items/leather/rare/medium/forearms',0),(1018,1018,'accessories/wearable_items/leather/rare/medium/hands',0),(1019,1019,'accessories/wearable_items/leather/rare/medium/head',0),(1020,1020,'accessories/wearable_items/leather/rare/medium/legs',0),(1021,1021,'accessories/wearable_items/leather/rare/medium/shoulders',0),(1022,1022,'staticobjects/_exp07/velks/exp07_dun_velkslab_fortress_banner07_single01',1096),(1023,1023,'accessories/wearable_items/leather/rare/low/chest',0),(1024,1024,'accessories/wearable_items/leather/rare/low/feet',0),(1025,1025,'accessories/wearable_items/leather/rare/low/forearms',0),(1026,1026,'accessories/wearable_items/leather/rare/low/hands',0),(1027,1027,'accessories/wearable_items/leather/rare/low/head',0),(1028,1028,'accessories/wearable_items/leather/rare/low/legs',0),(1029,1029,'accessories/wearable_items/leather/rare/low/shoulders',0),(1030,1030,'staticobjects/_exp07/othmir/vel_iceclad_othmir_shell01_dpo',1096),(1031,1031,'accessories/wearable_items/leather/rare/high/chest',0),(1032,1032,'accessories/wearable_items/leather/rare/high/feet',0),(1033,1033,'accessories/wearable_items/leather/rare/high/forearms',0),(1034,1034,'accessories/wearable_items/leather/rare/high/hands',0),(1035,1035,'accessories/wearable_items/leather/rare/high/head',0),(1036,1036,'accessories/wearable_items/leather/rare/high/legs',0),(1037,1037,'accessories/wearable_items/leather/rare/high/shoulders',0),(1038,1038,'staticobjects/_exp07/velks/exp07_dun_velkslab_fortress_chandelier01',1096),(1039,1039,'accessories/wearable_items/leather/artifact/medium/chest',0),(1040,1040,'accessories/wearable_items/leather/artifact/medium/feet',0),(1041,1041,'accessories/wearable_items/leather/artifact/medium/forearms',0),(1042,1042,'accessories/wearable_items/leather/artifact/medium/hands',0),(1043,1043,'accessories/wearable_items/leather/artifact/medium/head',0),(1044,1044,'accessories/wearable_items/leather/artifact/medium/legs',0),(1045,1045,'accessories/wearable_items/leather/artifact/medium/shoulders',0),(1046,1046,'accessories/wearable_items/leather/artifact/medium/skirt',0),(1047,1047,'accessories/wearable_items/leather/artifact/low/chest',0),(1048,1048,'accessories/wearable_items/leather/artifact/low/feet',0),(1049,1049,'accessories/wearable_items/leather/artifact/low/forearms',0),(1050,1050,'accessories/wearable_items/leather/artifact/low/hands',0),(1051,1051,'accessories/wearable_items/leather/artifact/low/head',0),(1052,1052,'accessories/wearable_items/leather/artifact/low/legs',0),(1053,1053,'accessories/wearable_items/leather/artifact/low/shoulders',0),(1054,1054,'accessories/wearable_items/leather/artifact/low/skirt',0),(1055,1055,'accessories/wearable_items/leather/artifact/high/chest',0),(1056,1056,'accessories/wearable_items/leather/artifact/high/feet',0),(1057,1057,'accessories/wearable_items/leather/artifact/high/forearms',0),(1058,1058,'accessories/wearable_items/leather/artifact/high/hands',0),(1059,1059,'accessories/wearable_items/leather/artifact/high/head',0),(1060,1060,'accessories/wearable_items/leather/artifact/high/legs',0),(1061,1061,'accessories/wearable_items/leather/artifact/high/shoulders',0),(1062,1062,'staticobjects/_exp07/velks/exp07_dun_velkslab_fortress_banner08_single01',1096),(1063,1063,'accessories/wearable_items/leather/common/high/chest',0),(1064,1064,'accessories/wearable_items/leather/common/high/feet',0),(1065,1065,'accessories/wearable_items/leather/common/high/forearms',0),(1066,1066,'accessories/wearable_items/leather/common/high/hands',0),(1067,1067,'accessories/wearable_items/leather/common/high/head',0),(1068,1068,'accessories/wearable_items/leather/common/high/legs',0),(1069,1069,'accessories/wearable_items/leather/common/high/shoulders',0),(1070,1070,'accessories/wearable_items/leather/common/high/skirt',0),(1071,1071,'accessories/wearable_items/leather/common/medium/chest',0),(1072,1072,'accessories/wearable_items/leather/common/medium/feet',0),(1073,1073,'accessories/wearable_items/leather/common/medium/forearms',0),(1074,1074,'accessories/wearable_items/leather/common/medium/hands',0),(1075,1075,'accessories/wearable_items/leather/common/medium/head',0),(1076,1076,'accessories/wearable_items/leather/common/medium/legs',0),(1077,1077,'accessories/wearable_items/leather/common/medium/shoulders',0),(1078,1078,'accessories/wearable_items/leather/common/medium/skirt',0),(1079,1079,'accessories/wearable_items/leather/common/low/chest',0),(1080,1080,'accessories/wearable_items/leather/common/low/feet',0),(1081,1081,'accessories/wearable_items/leather/common/low/forearms',0),(1082,1082,'accessories/wearable_items/leather/common/low/hands',0),(1083,1083,'accessories/wearable_items/leather/common/low/head',0),(1084,1084,'accessories/wearable_items/leather/common/low/legs',0),(1085,1085,'accessories/wearable_items/leather/common/low/shoulders',0),(1086,1086,'accessories/wearable_items/leather/common/low/skirt',0),(1087,1087,'staticobjects/_exp07/tofs/tfs_table_glass_cathedral02_with_runner_dpo',1096),(1088,1088,'staticobjects/_exp07/tofs/tfs_floor05_tserrina_statue_pedestal01',1096),(1089,1089,'staticobjects/_exp07/tofs/tofs_statue_tserrina_cathedral01',1096),(1090,1090,'staticobjects/_exp07/tofs/tfs_banner_military_01',1096),(1091,1091,'staticobjects/_exp07/tofs/tfs_banner_military_01_wide',1096),(1092,1092,'staticobjects/_exp07/tofs/tfs_banner_military_02',1096),(1093,1093,'staticobjects/_exp07/tofs/tfs_bed_bunk_01',1096),(1094,1094,'staticobjects/_exp07/tofs/tfs_bed_maid01',1096),(1095,1095,'staticobjects/_exp07/tofs/tfs_bed_officer01',1096),(1096,1096,'staticobjects/_exp07/tofs/tfs_bed_twin01',1096),(1097,1097,'staticobjects/_exp07/tofs/tfs_bench_blue01',1096),(1098,1098,'staticobjects/_exp07/tofs/tfs_bench_maroon01',1096),(1099,1099,'staticobjects/_exp07/tofs/tfs_bench_military01',1096),(1100,1100,'staticobjects/_exp07/tofs/tfs_bench_military02',1096),(1101,1101,'staticobjects/_exp07/tofs/tfs_bookcase_low01',1096),(1102,1102,'staticobjects/_exp07/tofs/tfs_bookcase_low01_empty',1096),(1103,1103,'staticobjects/_exp07/tofs/tfs_bookcase_tall01',1096),(1104,1104,'staticobjects/_exp07/tofs/tfs_bookcase_tall01_empty',1096),(1105,1105,'staticobjects/_exp07/tofs/tfs_books_single01',1096),(1106,1106,'staticobjects/_exp07/tofs/tfs_books_single_ornate01',1096),(1107,1107,'staticobjects/_exp07/tofs/tfs_chair_blue01',1096),(1108,1108,'staticobjects/_exp07/tofs/tfs_chair_red01',1096),(1109,1109,'staticobjects/_exp07/tofs/tfs_coffin01',1096),(1110,1110,'staticobjects/_exp07/tofs/tfs_couch_blue01',1096),(1111,1111,'staticobjects/_exp07/tofs/tfs_couch_red01',1096),(1112,1112,'staticobjects/_exp07/tofs/tfs_desk_military01',1096),(1113,1113,'accessories/hair/hair000',0),(1114,1114,'accessories/hair/hair019',0),(1115,1115,'accessories/hair/hair018',0),(1116,1116,'accessories/hair/hair020',0),(1117,1117,'staticobjects/_exp07/tofs/tfs_floor01_lightsource_wall01',1096),(1118,1118,'staticobjects/_exp07/tofs/tfs_floor03_lightsource_chandelier01',1096),(1119,1119,'accessories/hair/hair021',0),(1120,1120,'accessories/hair/hair022',0),(1121,1121,'accessories/hair/hair024',0),(1122,1122,'accessories/hair/hair025',0),(1123,1123,'accessories/hair/hair023',0),(1124,1124,'accessories/hair/hair013',0),(1125,1125,'accessories/hair/hair012',0),(1126,1126,'accessories/hair/hair011',0),(1127,1127,'accessories/hair/hair010',0),(1128,1128,'accessories/hair/hair009',0),(1129,1129,'accessories/hair/hair014',0),(1130,1130,'accessories/hair/hair015',0),(1131,1131,'accessories/hair/hair016',0),(1132,1132,'accessories/hair/hair017',0),(1133,1133,'accessories/hair/hair001',0),(1134,1134,'accessories/hair/hair007',0),(1135,1135,'accessories/hair/hair008',0),(1136,1136,'accessories/hair/hair002',0),(1137,1137,'accessories/hair/hair003',0),(1138,1138,'accessories/hair/hair004',0),(1139,1139,'accessories/hair/hair005',0),(1140,1140,'accessories/hair/hair006',0),(1141,1141,'staticobjects/_exp07/tofs/tfs_floor03_lightsource_wall01',1096),(1142,1142,'staticobjects/_exp07/tofs/tfs_floor04_coffin_rest01',1096),(1143,1143,'staticobjects/_exp07/tofs/tfs_floor04_lightsource_floortorch01',1096),(1144,1144,'staticobjects/_exp07/tofs/tfs_floor04_lightsource_wall01',1096),(1145,1145,'staticobjects/_exp07/tofs/tfs_floor04_podium01',1096),(1146,1146,'staticobjects/_exp07/tofs/tfs_floor05_cake_pedestal01',1096),(1147,1147,'staticobjects/_exp07/tofs/tfs_floor05_lightsource_floor01',1096),(1148,1148,'staticobjects/_exp07/tofs/tfs_floor06_mirror_floating',1096),(1149,1149,'staticobjects/_exp07/tofs/tfs_floor07_lightsource_chandelier01',1096),(1150,1150,'staticobjects/_exp07/tofs/tfs_floor07_lightsource_floor01',1096),(1151,1151,'staticobjects/_exp07/tofs/tfs_floor07_lightsource_wall01',1096),(1152,1152,'staticobjects/_exp07/tofs/tfs_kitchen_chalice_blood02',1096),(1153,1153,'staticobjects/_exp07/tofs/tfs_mirror_boss01',1096),(1154,1154,'staticobjects/_exp07/tofs/tfs_painting_mayong01',1096),(1155,1155,'staticobjects/_exp07/tofs/tfs_piano_open01',1096),(1156,1156,'staticobjects/_exp07/tofs/tfs_rug_cathedral01',1096),(1157,1157,'staticobjects/_exp07/tofs/tfs_rug_cathedral02',1096),(1158,1158,'staticobjects/_exp07/tofs/tfs_rug_military01',1096),(1159,1159,'staticobjects/_exp07/tofs/tfs_rug_military02',1096),(1160,1160,'staticobjects/_exp07/tofs/tfs_table_bedside01',1096),(1161,1161,'staticobjects/_exp07/tofs/tfs_table_dining_military01',1096),(1162,1162,'staticobjects/_exp07/tofs/tfs_table_glass_cathedral01_with_runner_dpo',1096),(1163,1163,'staticobjects/_exp07/tofs/tfs_table_glass_cathedral02',1096),(1164,1164,'accessories/hair/face/face008',0),(1165,1165,'accessories/hair/face/face009',0),(1166,1166,'accessories/hair/face/face010',0),(1167,1167,'accessories/hair/face/face011',0),(1168,1168,'accessories/hair/face/face012',0),(1169,1169,'accessories/hair/face/face013',0),(1170,1170,'accessories/hair/face/face014',0),(1171,1171,'accessories/hair/face/face015',0),(1172,1172,'accessories/hair/face/face016',0),(1173,1173,'accessories/hair/face/face017',0),(1174,1174,'accessories/hair/face/face018',0),(1175,1175,'accessories/hair/face/face019',0),(1176,1176,'accessories/hair/face/face020',0),(1177,1177,'accessories/hair/face/face021',0),(1178,1178,'accessories/hair/face/face022',0),(1179,1179,'accessories/hair/face/face023',0),(1180,1180,'accessories/hair/face/face024',0),(1181,1181,'accessories/hair/face/face025',0),(1182,1182,'accessories/hair/face/face026',0),(1183,1183,'accessories/hair/face/face027',0),(1184,1184,'accessories/hair/face/face000',0),(1185,1185,'accessories/hair/face/face001',0),(1186,1186,'accessories/hair/face/face002',0),(1187,1187,'accessories/hair/face/face003',0),(1188,1188,'accessories/hair/face/face004',0),(1189,1189,'accessories/hair/face/face005',0),(1190,1190,'accessories/hair/face/face006',0),(1191,1191,'accessories/hair/face/face007',0),(1192,1192,'staticobjects/_exp07/tofs/tfs_table_marble_blue01',1096),(1193,1193,'staticobjects/_exp07/tofs/tfs_table_marble_blue02',1096),(1194,1194,'staticobjects/_exp07/tofs/tfs_table_marble_maroon01',1096),(1195,1195,'staticobjects/_exp07/tofs/tfs_table_marble_maroon02',1096),(1196,1196,'staticobjects/_exp07/tofs/tfs_weaponrack_wall01',1096),(1197,1197,'staticobjects/_exp07/tofs/tofs_floor08_crystal_orbit01_all_houseitem',1096),(1198,1198,'staticobjects/_exp07/tofs/tofs_statue_mayong01',1096),(1199,1199,'staticobjects/_exp07/tofs/tofs_statue_tserrina01',1096),(1200,1200,'accessories/wearable_items/_exp07/leather_overland_armor/skirt',1096),(1201,1201,'accessories/wearable_items/_exp07/leather_overland_armor/chest',1096),(1202,1202,'accessories/wearable_items/_exp07/leather_overland_armor/feet',1096),(1203,1203,'accessories/wearable_items/_exp07/leather_overland_armor/forearms',1096),(1204,1204,'accessories/wearable_items/_exp07/leather_overland_armor/hands',1096),(1205,1205,'accessories/wearable_items/_exp07/leather_overland_armor/head',1096),(1206,1206,'accessories/wearable_items/_exp07/leather_overland_armor/leather_overland_collar',1096),(1207,1207,'accessories/wearable_items/_exp07/leather_overland_armor/legs',1096),(1208,1208,'accessories/wearable_items/_exp07/leather_overland_armor/legs_noskirt',1096),(1209,1209,'accessories/wearable_items/_exp07/leather_overland_armor/pauldron_left',1096),(1210,1210,'accessories/wearable_items/_exp07/leather_overland_armor/pauldron_right',1096),(1211,1211,'accessories/wearable_items/_exp07/leather_overland_armor/shoulders',1096),(1212,1212,'accessories/wearable_items/_exp07/leather_overland_armor/shoulders_nopauldrons',1096),(1213,1213,'accessories/wearable_items/cloak/exp07/cloak_leather_overland',1096),(1214,1214,'accessories/wearable_items/_exp07/rallos_zek_armor/rallos_zek_armor_chain_tintable/skirt',1096),(1215,1215,'accessories/wearable_items/_exp07/rallos_zek_armor/rallos_zek_armor_chain_tintable/chest',1096),(1216,1216,'accessories/wearable_items/_exp07/rallos_zek_armor/rallos_zek_armor_chain_tintable/feet',1096),(1217,1217,'accessories/wearable_items/_exp07/rallos_zek_armor/rallos_zek_armor_chain_tintable/forearms',1096),(1218,1218,'accessories/wearable_items/_exp07/rallos_zek_armor/rallos_zek_armor_chain_tintable/hands',1096),(1219,1219,'accessories/wearable_items/_exp07/rallos_zek_armor/rallos_zek_armor_chain_tintable/head',1096),(1220,1220,'accessories/wearable_items/_exp07/rallos_zek_armor/rallos_zek_armor_chain_tintable/legs',1096),(1221,1221,'accessories/wearable_items/_exp07/rallos_zek_armor/rallos_zek_armor_chain_tintable/legs_noskirt',1096),(1222,1222,'accessories/wearable_items/_exp07/rallos_zek_armor/rallos_zek_armor_chain_tintable/rallos_zek_chain_pauldron_left',1096),(1223,1223,'accessories/wearable_items/_exp07/rallos_zek_armor/rallos_zek_armor_chain_tintable/rallos_zek_chain_pauldron_right',1096),(1224,1224,'accessories/wearable_items/_exp07/rallos_zek_armor/rallos_zek_armor_chain_tintable/rallos_zek_chain_pauldron_small_left',1096),(1225,1225,'accessories/wearable_items/_exp07/rallos_zek_armor/rallos_zek_armor_chain_tintable/rallos_zek_chain_pauldron_small_right',1096),(1226,1226,'staticobjects/_exp07/tradeskill_coldain_prayershawl_hq_houseitem',1096),(1227,1227,'accessories/wearable_items/_exp07/rallos_zek_armor/rallos_zek_armor_chain_tintable/shoulders_nopauldrons',1096),(1228,1228,'accessories/wearable_items/_exp07/rallos_zek_armor/rallos_zek_armor_chain_tintable/shoulders_rallos_zek_epic_pauldrons',1096),(1229,1229,'accessories/wearable_items/_exp07/rallos_zek_armor/rallos_zek_armor_chain_tintable/shoulders_rallos_zek_small_pauldrons',1096),(1230,1230,'accessories/wieldable_items/shields/exp07/lodizal_shield',1096),(1231,1231,'staticobjects/guildhall/trophies/floor_statue_of_rallos_zek_fx',1096),(1232,1232,'staticobjects/guildhall/trophies/floor_king_tormax_fx',1096),(1233,1233,'staticobjects/guildhall/trophies/floor_kraytoc_fx',1096),(1234,1234,'staticobjects/_exp07/tenth_ring_hq_houseitem',1096),(1235,1235,'_exp07/characters/monsters/ice_dragon/ice_dragon',1096),(1236,1236,'accessories/wieldable_items/weapons/exp07/1h_crush/1h_hammer_goth',1096),(1237,1237,'accessories/wearable_items/_exp07/rallos_zek_armor/rallos_zek_armor_leather_tintable/skirt',1096),(1238,1238,'accessories/wearable_items/_exp07/rallos_zek_armor/rallos_zek_armor_leather_tintable/chest',1096),(1239,1239,'accessories/wearable_items/_exp07/rallos_zek_armor/rallos_zek_armor_leather_tintable/feet',1096),(1240,1240,'accessories/wearable_items/_exp07/rallos_zek_armor/rallos_zek_armor_leather_tintable/forearms',1096),(1241,1241,'accessories/wearable_items/_exp07/rallos_zek_armor/rallos_zek_armor_leather_tintable/hands',1096),(1242,1242,'accessories/wearable_items/_exp07/rallos_zek_armor/rallos_zek_armor_leather_tintable/head',1096),(1243,1243,'accessories/wearable_items/_exp07/rallos_zek_armor/rallos_zek_armor_leather_tintable/legs',1096),(1244,1244,'accessories/wearable_items/_exp07/rallos_zek_armor/rallos_zek_armor_leather_tintable/legs_noskirt',1096),(1245,1245,'accessories/wearable_items/_exp07/rallos_zek_armor/rallos_zek_armor_leather_tintable/shoulders_nopauldrons',1096),(1246,1246,'accessories/wearable_items/_exp07/rallos_zek_armor/rallos_zek_armor_leather_tintable/shoulders_rallos_zek_epic_pauldrons',1096),(1247,1247,'accessories/wearable_items/_exp07/rallos_zek_armor/rallos_zek_armor_leather_tintable/shoulders_rallos_zek_small_pauldrons',1096),(1248,1248,'accessories/wieldable_items/weapons/fist/qeynos_wraps/qeynos_wraps_skulls',1096),(1249,1249,'_exp07/characters/tool_users/tserrina/tserrina_darkelf',1096),(1250,1250,'accessories/npc_wearables/tserrina/forearms_dark_elf',1096),(1251,1251,'accessories/npc_wearables/tserrina/feet_dark_elf_shin',1096),(1252,1252,'accessories/wieldable_items/weapons/exp07/talisman/exp07_totem_yawningmaw_velium',1096),(1253,1253,'accessories/wieldable_items/weapons/exp07/talisman/exp07_totem_yawningmaw',1096),(1254,1254,'accessories/wieldable_items/weapons/exp07/talisman/exp07_totem_yawningmaw_stone',1096),(1255,1255,'accessories/wieldable_items/weapons/exp07/talisman/exp07_totem_yawningmaw_ruby',1096),(1256,1256,'accessories/wieldable_items/weapons/exp07/talisman/exp07_scepter_brightstar',1096),(1257,1257,'accessories/wieldable_items/weapons/exp07/talisman/exp07_scepter_brightstar_iron',1096),(1258,1258,'accessories/wieldable_items/weapons/exp07/talisman/exp07_totem_bristlebane',1096),(1259,1259,'accessories/wieldable_items/weapons/exp07/talisman/book_antique',1096),(1260,1260,'accessories/wieldable_items/weapons/exp07/talisman/book_caged',1096),(1261,1261,'accessories/wieldable_items/weapons/exp07/talisman/book_caged_monster',1096),(1262,1262,'accessories/wieldable_items/weapons/exp07/talisman/book_caged_monster_undead',1096),(1263,1263,'accessories/wieldable_items/weapons/exp07/talisman/book_antique_blueglow',1096),(1264,1264,'accessories/wieldable_items/weapons/exp07/talisman/book_antique_orangeglow',1096),(1265,1265,'accessories/wieldable_items/weapons/exp07/talisman/book_songbook',1096),(1266,1266,'accessories/wieldable_items/weapons/exp07/shield/exp07_shield_kite_wooden',1096),(1267,1267,'accessories/wieldable_items/weapons/exp07/shield/exp07_shield_kite_dragon_red',1096),(1268,1268,'accessories/wieldable_items/weapons/exp07/shield/exp07_shield_kite_dragon_green',1096),(1269,1269,'accessories/wieldable_items/weapons/exp07/shield/exp07_shield_kite_dragon_dark',1096),(1270,1270,'accessories/wieldable_items/weapons/exp07/shield/exp07_shield_kite_dragon',1096),(1271,1271,'accessories/wieldable_items/weapons/exp07/shield/exp05_shield06_bloodstone',1096),(1272,1272,'accessories/wieldable_items/weapons/exp07/shield/exp05_shield06_velium',1096),(1273,1273,'accessories/wieldable_items/weapons/exp07/shield/exp07_shield_kite_woodburl',1096),(1274,1274,'accessories/wieldable_items/weapons/exp07/shield/exp07_shield_kite_metal_iron',1096),(1275,1275,'accessories/wieldable_items/weapons/exp07/shield/exp07_shield_kite_metal_bronze',1096),(1276,1276,'staticobjects/tcg/tcg_tapestry_arbor',1096),(1277,1277,'staticobjects/tcg/tcg_painting57_impetuousrover',1096),(1278,1278,'staticobjects/tcg/tcg_painting55_bloodforgehammer',1096),(1279,1279,'staticobjects/tcg/tcg_painting54_shieldmaster',1096),(1280,1280,'staticobjects/tcg/tcg_painting53_retiredhero',1096),(1281,1281,'staticobjects/tcg/tcg_painting52_vengeance',1096),(1282,1282,'staticobjects/tcg/tcg_tapestry_dragonslayer',1096),(1283,1283,'staticobjects/tcg/tcg_tapestry_guardian',1096),(1284,1284,'staticobjects/tcg/tcg_tapestry_clearing',1096),(1285,1285,'accessories/wearable_items/_exp07/rallos_zek_armor/rallos_zek_armor_vanguard_tintable/chest',1096),(1286,1286,'accessories/wearable_items/_exp07/rallos_zek_armor/rallos_zek_armor_vanguard_tintable/feet',1096),(1287,1287,'accessories/wearable_items/_exp07/rallos_zek_armor/rallos_zek_armor_vanguard_tintable/forearms',1096),(1288,1288,'accessories/wearable_items/_exp07/rallos_zek_armor/rallos_zek_armor_vanguard_tintable/hands',1096),(1289,1289,'accessories/wearable_items/_exp07/rallos_zek_armor/rallos_zek_armor_vanguard_tintable/head',1096),(1290,1290,'accessories/wearable_items/_exp07/rallos_zek_armor/rallos_zek_armor_vanguard_tintable/legs',1096),(1291,1291,'accessories/wearable_items/_exp07/rallos_zek_armor/rallos_zek_armor_vanguard_tintable/legs_noskirt',1096),(1292,1292,'accessories/wearable_items/_exp07/rallos_zek_armor/rallos_zek_armor_vanguard_tintable/rallos_zek_vanguard_pauldron_epic_left',1096),(1293,1293,'accessories/wearable_items/_exp07/rallos_zek_armor/rallos_zek_armor_vanguard_tintable/rallos_zek_vanguard_pauldron_epic_right',1096),(1294,1294,'accessories/wearable_items/_exp07/rallos_zek_armor/rallos_zek_armor_vanguard_tintable/rallos_zek_vanguard_pauldron_small_left',1096),(1295,1295,'accessories/wearable_items/_exp07/rallos_zek_armor/rallos_zek_armor_vanguard_tintable/rallos_zek_vanguard_pauldron_small_right',1096),(1296,1296,'accessories/wearable_items/_exp07/rallos_zek_armor/rallos_zek_armor_vanguard_tintable/right',1096),(1297,1297,'accessories/wearable_items/_exp07/rallos_zek_armor/rallos_zek_armor_vanguard_tintable/shoulders_nopauldrons',1096),(1298,1298,'accessories/wearable_items/_exp07/rallos_zek_armor/rallos_zek_armor_vanguard_tintable/shoulders_rallos_zek_epic_pauldrons',1096),(1299,1299,'accessories/wearable_items/_exp07/rallos_zek_armor/rallos_zek_armor_vanguard_tintable/shoulders_rallos_zek_small_pauldrons',1096),(1300,1300,'accessories/wearable_items/_exp07/rallos_zek_armor/rallos_zek_armor_vanguard_tintable/skirt',1096),(1301,1301,'staticobjects/tapestry/gh_freeport_carpenter_tapestry_dpo',1096),(1302,1302,'staticobjects/tapestry/gh_qeynos_carpenter_tapestry_dpo',1096),(1303,1303,'staticobjects/liveevent/brew_day/vel_distillery_stage_01_01',1096),(1304,1304,'staticobjects/liveevent/brew_day/vel_distillery_stage_02_01',1096),(1305,1305,'staticobjects/liveevent/brew_day/vel_distillery_stage_03_01',1096),(1306,1306,'staticobjects/liveevent/bristlebane_day/dpo_djn_steel_painting04_tree',1096),(1307,1307,'staticobjects/liveevent/bristlebane_day/dpo_runny_anvil01',1096),(1308,1308,'staticobjects/liveevent/bristlebane_day/dpo_runny_brazier03',1096),(1309,1309,'staticobjects/liveevent/bristlebane_day/dpo_runny_bucketforge01',1096),(1310,1310,'staticobjects/liveevent/bristlebane_day/dpo_halfing_barrel01_fish',1096),(1311,1311,'staticobjects/liveevent/bristlebane_day/dpo_hafling_wheelbarrow01',1096),(1312,1312,'staticobjects/liveevent/brew_day/dpo_eu_winebottle_green01',1096),(1313,1313,'staticobjects/liveevent/brew_day/dpo_hal_cup_01',1096),(1314,1314,'staticobjects/liveevent/brew_day/dpo_hal_cup_02',1096),(1315,1315,'staticobjects/liveevent/brew_day/dpo_hal_ironpot_01',1096),(1316,1316,'staticobjects/panels/dpo_panel_bristlebane_coin',1096),(1317,1317,'staticobjects/panels/dpo_panel_groundclover',1096),(1318,1318,'staticobjects/panels/dpo_panel_stainedglass_blue',1096),(1319,1319,'staticobjects/panels/dpo_panel_stainedglass_green',1096),(1320,1320,'staticobjects/panels/dpo_panel_stainedglass_purple',1096),(1321,1321,'staticobjects/panels/dpo_panel_stainedglass_red',1096),(1322,1322,'accessories/wieldable_items/weapons/exp07/1h_crush/1h_crush_nipiks_cane_sm_npc_only',1096),(1323,1323,'accessories/wearable_items/cloak/exp07/cloak_dragonskin_fl',1096),(1324,1324,'accessories/wearable_items/cloak/exp07/cloak_compass_movingclouds',1096),(1325,1325,'accessories/wieldable_items/weapons/exp07/1h_crush/1h_flail_cinder_big',1096),(1326,1326,'creatures/mounts/horse_heavy/horse_heavy_brown_evil',1096),(1327,1327,'staticobjects/_exp07/exp07_dun_tower_of_frozen_shadow/tofs_hand_mirror_01',1096),(1328,1328,'staticobjects/_exp07/exp07_dun_tower_of_frozen_shadow/tofs_hairbrush_01',1096),(1329,1329,'_exp07/objects/tofs/tofs_rock_group01',1096),(1330,1330,'creatures/monsters/gnomerace_twister_blaster',1096),(1331,1331,'staticobjects/liveevent/bristlebane_day/tradeskill_collection_golden_meat_bucket',1096),(1332,1332,'staticobjects/liveevent/bristlebane_day/bristlebane_day_totem_01',1096),(1333,1333,'accessories/wearable_items/_exp07/rallos_zek_armor/rallos_zek_armor_robe_tintable/skirt',1096),(1334,1334,'accessories/wearable_items/_exp07/rallos_zek_armor/rallos_zek_armor_robe_tintable/chest',1096),(1335,1335,'accessories/wearable_items/_exp07/rallos_zek_armor/rallos_zek_armor_robe_tintable/feet',1096),(1336,1336,'accessories/wearable_items/_exp07/rallos_zek_armor/rallos_zek_armor_robe_tintable/hands',1096),(1337,1337,'accessories/wearable_items/_exp07/rallos_zek_armor/rallos_zek_armor_robe_tintable/head',1096),(1338,1338,'accessories/wearable_items/_exp07/rallos_zek_armor/rallos_zek_armor_robe_tintable/pants',1096),(1339,1339,'accessories/wearable_items/_exp07/rallos_zek_armor/rallos_zek_armor_robe_tintable/rallos_zek_robe_belt_plate',1096),(1340,1340,'accessories/wearable_items/_exp07/vanguard_overland/skirt',1096),(1341,1341,'accessories/wearable_items/_exp07/vanguard_overland/chest',1096),(1342,1342,'accessories/wearable_items/_exp07/vanguard_overland/feet',1096),(1343,1343,'accessories/wearable_items/_exp07/vanguard_overland/hands',1096),(1344,1344,'accessories/wearable_items/_exp07/vanguard_overland/head',1096),(1345,1345,'accessories/wearable_items/_exp07/vanguard_overland/legs',1096),(1346,1346,'creatures/tu/aqua_goblin',0),(1347,1347,'staticobjects/crypt/comland_cem_mausoleum003',0),(1348,1348,'accessories/wearable_items/_exp07/vanguard_overland/legs_noskirt',1096),(1349,1349,'accessories/wearable_items/_exp07/vanguard_overland/right',1096),(1350,1350,'accessories/wearable_items/_exp07/vanguard_overland/shoulders',1096),(1351,1351,'accessories/wearable_items/_exp07/vanguard_overland/shoulders_nopauldrons',1096),(1352,1352,'staticobjects/liveevent/brew_day/dpo_drv_keg_large01',1096),(1353,1353,'staticobjects/liveevent/brew_day/dpo_drv_kegstand_double01',1096),(1354,1354,'staticobjects/liveevent/bristlebane_day/dpo_cr_beermug_orc01',1096),(1355,1355,'staticobjects/liveevent/bristlebane_day/dpo_cr_stein_orc01',1096),(1356,1356,'staticobjects/liveevent/bristlebane_day/dpo_cr_plate_orc_withgrub01',1096),(1357,1357,'staticobjects/liveevent/bristlebane_day/dpo_cr_bowl_orc_with_grub02',1096),(1358,1358,'staticobjects/liveevent/bristlebane_day/dpo_djn_steel_painting02',1096),(1359,1359,'staticobjects/liveevent/bristlebane_day/dpo_drv_pillow_seat01',1096),(1360,1360,'staticobjects/liveevent/bristlebane_day/dpo_drv_pillow_seat02',1096),(1361,1361,'staticobjects/liveevent/bristlebane_day/dpo_djn_wine_bottle_gold01',1096),(1362,1362,'staticobjects/liveevent/bristlebane_day/dpo_djn_cup_brass01',1096),(1363,1363,'staticobjects/liveevent/bristlebane_day/dpo_djn_cup_blue01',1096),(1364,1364,'staticobjects/liveevent/bristlebane_day/dpo_djn_plate_blue01',1096),(1365,1365,'staticobjects/liveevent/bristlebane_day/dpo_djn_plate_gold01',1096),(1366,1366,'staticobjects/liveevent/bristlebane_day/dpo_djn_bowl_blue01',1096),(1367,1367,'staticobjects/befallen_epic01/coffin_box_1',0),(1368,1368,'staticobjects/befallen_epic01/coffin_lid_1',0),(1369,1369,'creatures/mounts/carpet',0),(1370,1370,'creatures/monsters/gargoyle',0),(1371,1371,'creatures/monsters/gargoyle_fiendish',0),(1372,1372,'creatures/monsters/lioness',0),(1373,1373,'creatures/monsters/manticore_ebon',0),(1374,1374,'creatures/monsters/wolf_dire',0),(1375,1375,'creatures/monsters/wyrm_fire',0),(1376,1376,'creatures/monsters/wyrm_ice',0),(1377,1377,'staticobjects/liveevent/bristlebane_day/dpo_djn_bowl_gold01',1096),(1378,1378,'creatures/tu/succubus',0),(1379,1379,'staticobjects/nektulos/trailor01',0),(1380,1380,'staticobjects/nektulos/wagon01',0),(1381,1381,'staticobjects/ecology/bed_single',0),(1382,1382,'staticobjects/ecology/elfbed01',0),(1383,1383,'staticobjects/ecology/qst_unseenhand_evilchest',0),(1384,1384,'creatures/tu/gnoll',0),(1385,1385,'staticobjects/ecology/qst_unseenhand_bunkbead_1',0),(1386,1386,'staticobjects/ecology/qst_unseenhand_card_table',0),(1387,1387,'staticobjects/ecology/qst_unseenhand_operating_table',0),(1388,1388,'staticobjects/ecology/qst_unseenhand_painting_1',0),(1389,1389,'staticobjects/ecology/qst_unseenhand_barrel_1',0),(1390,1390,'staticobjects/ecology/qst_unseenhand_bookcase_1',0),(1391,1391,'staticobjects/ecology/qst_unseenhand_chair_1',0),(1392,1392,'staticobjects/ecology/qst_unseenhand_chest_1',0),(1393,1393,'staticobjects/ecology/qst_unseenhand_crate_1',0),(1394,1394,'staticobjects/ecology/qst_unseenhand_fireplace_1',0),(1395,1395,'staticobjects/ecology/qst_unseenhand_firewood_1',0),(1396,1396,'staticobjects/ecology/qst_unseenhand_firewood_2',0),(1397,1397,'staticobjects/ecology/qst_unseenhand_floorlight_1',0),(1398,1398,'staticobjects/ecology/qst_unseenhand_keg_1',0),(1399,1399,'staticobjects/ecology/qst_unseenhand_kitchen_1',0),(1400,1400,'staticobjects/ecology/qst_unseenhand_mug_1',0),(1401,1401,'staticobjects/ecology/qst_unseenhand_table_1',0),(1402,1402,'staticobjects/ecology/qst_unseenhand_table_2',0),(1403,1403,'staticobjects/ecology/qst_unseenhand_wine_1',0),(1404,1404,'staticobjects/maps/commonlandsmap01',0),(1405,1405,'staticobjects/maps/placeholder',0),(1406,1406,'staticobjects/ecology/qst_galintos_bedframe_1',0),(1407,1407,'staticobjects/ecology/qst_galintos_bedroll_1',0),(1408,1408,'staticobjects/ecology/qst_galintos_bed_1',0),(1409,1409,'staticobjects/ecology/qst_galintos_bookcase_1',0),(1410,1410,'staticobjects/ecology/qst_galintos_bookcase_2',0),(1411,1411,'staticobjects/ecology/qst_galintos_brazier_1',0),(1412,1412,'staticobjects/ecology/qst_galintos_candelabra_1',0),(1413,1413,'staticobjects/ecology/qst_galintos_chess_1',0),(1414,1414,'staticobjects/ecology/qst_galintos_dresser_1',0),(1415,1415,'staticobjects/ecology/qst_galintos_fairy_bath_1',0),(1416,1416,'staticobjects/ecology/qst_galintos_globe_1',0),(1417,1417,'staticobjects/ecology/qst_galintos_mage_1',0),(1418,1418,'staticobjects/ecology/qst_galintos_ogre_chair_1',0),(1419,1419,'staticobjects/ecology/qst_galintos_ogre_food_1',0),(1420,1420,'staticobjects/ecology/qst_galintos_ogre_mug_1',0),(1421,1421,'staticobjects/ecology/qst_galintos_ogre_soup_1',0),(1422,1422,'staticobjects/ecology/qst_galintos_ogre_table_1',0),(1423,1423,'staticobjects/ecology/qst_galintos_stove_1',0),(1424,1424,'staticobjects/ecology/qst_galintos_table_1',0),(1425,1425,'staticobjects/ecology/qst_galintos_vase_1',0),(1426,1426,'staticobjects/ecology/qst_unseenhand_picture_1',0),(1427,1427,'staticobjects/ecology/qst_unseenhand_smashed_1',0),(1428,1428,'staticobjects/ecology/qst_unseenhand_smashed_barrel_1',0),(1429,1429,'creatures/tu/ice_giant_warrior',0),(1430,1430,'ec/pc/froglok/froglok_male_blackgoo',0),(1431,1431,'ec/pc/froglok/froglok_male_leopard',0),(1432,1432,'staticobjects/fallengate/doors/boss_door_left',0),(1433,1433,'staticobjects/torches/elise_wall_scontz',0),(1434,1434,'staticobjects/jumjum_jar_01',0),(1435,1435,'staticobjects/chairs/orcish_throne',0),(1436,1436,'staticobjects/doors/huge_skull_door_left',0),(1437,1437,'staticobjects/doors/huge_skull_door_right',0),(1438,1438,'staticobjects/doors/orcish_wooden_door',0),(1439,1439,'staticobjects/doorways/heavy_stone_archway',0),(1440,1440,'ec/pc/woodelf/woodelf_female_tattoo01',0),(1441,1441,'ec/pc/woodelf/woodelf_female_tattoo02',0),(1442,1442,'ec/pc/woodelf/woodelf_female_tattoo03',0),(1443,1443,'ec/pc/woodelf/woodelf_female_tattoo04',0),(1444,1444,'ec/pc/woodelf/woodelf_female_tattoo05',0),(1445,1445,'ec/pc/woodelf/woodelf_female_tattoo06',0),(1446,1446,'ec/pc/woodelf/woodelf_female_tattoo07',0),(1447,1447,'ec/pc/woodelf/woodelf_male_tattoo01',0),(1448,1448,'ec/pc/woodelf/woodelf_male_tattoo02',0),(1449,1449,'ec/pc/woodelf/woodelf_male_tattoo03',0),(1450,1450,'ec/pc/woodelf/woodelf_male_tattoo04',0),(1451,1451,'ec/pc/woodelf/woodelf_male_tattoo05',0),(1452,1452,'ec/pc/woodelf/woodelf_male_tattoo06',0),(1453,1453,'staticobjects/books/flat_brown_goldtrim_01',0),(1454,1454,'staticobjects/doors/cazicthule/door_stone_new',0),(1455,1455,'staticobjects/doors/cazicthule/door_stone_worn',0),(1456,1456,'staticobjects/chairs/fprt_hood_chair_broken01',0),(1457,1457,'staticobjects/chairs/qst_broken_chair_warrior_cap',0),(1458,1458,'staticobjects/weapons/longsword_uncommon_nektropos',0),(1459,1459,'staticobjects/tableware/halfling_tablejunk01',0),(1460,1460,'staticobjects/tree/deadtrunk',0),(1461,1461,'staticobjects/portals/rallos_zek_portal',1096),(1462,1462,'ec/pc/barbarian/barbarian_female_tattoo01',0),(1463,1463,'ec/pc/barbarian/barbarian_female_tattoo02',0),(1464,1464,'ec/pc/barbarian/barbarian_female_tattoo03',0),(1465,1465,'ec/pc/barbarian/barbarian_female_tattoo04',0),(1466,1466,'ec/pc/barbarian/barbarian_female_tattoo05',0),(1467,1467,'ec/pc/barbarian/barbarian_male_tattoo01',0),(1468,1468,'ec/pc/barbarian/barbarian_male_tattoo02',0),(1469,1469,'ec/pc/barbarian/barbarian_male_tattoo03',0),(1470,1470,'ec/pc/barbarian/barbarian_male_tattoo04',0),(1471,1471,'ec/pc/barbarian/barbarian_male_tattoo05',0),(1472,1472,'staticobjects/beds/singlebed001',0),(1473,1473,'staticobjects/chests/chest_coll_01',0),(1474,1474,'staticobjects/sacks/qey_floursacksgroup003',0),(1475,1475,'ec/pc/dwarf/dwarf_female_tattoo01',0),(1476,1476,'ec/pc/dwarf/dwarf_female_tattoo02',0),(1477,1477,'ec/pc/dwarf/dwarf_female_tattoo03',0),(1478,1478,'ec/pc/dwarf/dwarf_female_tattoo04',0),(1479,1479,'ec/pc/dwarf/dwarf_female_tattoo05',0),(1480,1480,'ec/pc/dwarf/dwarf_male_tattoo01',0),(1481,1481,'ec/pc/dwarf/dwarf_male_tattoo02',0),(1482,1482,'ec/pc/dwarf/dwarf_male_tattoo03',0),(1483,1483,'ec/pc/dwarf/dwarf_male_tattoo04',0),(1484,1484,'ec/pc/dwarf/dwarf_male_tattoo05',0),(1485,1485,'ec/pc/dwarf/dwarf_male_tattoo06',0),(1486,1486,'ec/pc/woodelf/woodelf_female_tattoo08',0),(1487,1487,'ec/pc/woodelf/woodelf_male_tattoo07',0),(1488,1488,'ec/pc/woodelf/woodelf_male_tattoo08',0),(1489,1489,'staticobjects/sewer_grate_01',0),(1490,1490,'staticobjects/white_tombstone_01',0),(1491,1491,'staticobjects/bookcases/hum_shelf_simple_01',0),(1492,1492,'staticobjects/chairs/fprt_bench_plainlong01',0),(1493,1493,'staticobjects/chests/qey_birdcage001',0),(1494,1494,'staticobjects/chests/qey_birdcage002',0),(1495,1495,'staticobjects/chests/qey_cage001',0),(1496,1496,'staticobjects/chests/qey_cage002',0),(1497,1497,'staticobjects/containers/crate_large_long001',0),(1498,1498,'staticobjects/containers/fprt_chest_large_plain01',0),(1499,1499,'staticobjects/counters/fprt_counter_cornerornatemedium01',0),(1500,1500,'staticobjects/counters/fprt_counter_cornerplainlong01',0),(1501,1501,'staticobjects/counters/fprt_counter_straightornatelong01',0),(1502,1502,'staticobjects/counters/fprt_counter_straightornatemedium01',0),(1503,1503,'staticobjects/counters/fprt_counter_straightornatesmall01',0),(1504,1504,'staticobjects/counters/fprt_counter_straightplainlong01',0),(1505,1505,'staticobjects/counters/fprt_counter_straightplainmedium01',0),(1506,1506,'staticobjects/counters/fprt_hood_counter_wood_2mlong001',0),(1507,1507,'staticobjects/counters/fprt_hood_counter_wood_3mlong001',0),(1508,1508,'staticobjects/counters/fprt_hood_counter_wood_4mlong001',0),(1509,1509,'staticobjects/counters/fprt_hood_counter_wood_corner001',0),(1510,1510,'staticobjects/counters/qey_bar_elbow',0),(1511,1511,'staticobjects/doors/cazicthule/door_stone_ornate',0),(1512,1512,'staticobjects/qeynos/qey_bank_vault',0),(1513,1513,'staticobjects/qeynos/qey_crystal_globe',0),(1514,1514,'staticobjects/relics/cazic_bowl_green',0),(1515,1515,'staticobjects/tables/fprt_hood_table_large01',0),(1516,1516,'staticobjects/tables/fprt_hood_table_small01',0),(1517,1517,'staticobjects/tables/fprt_tables_scribedesk01',0),(1518,1518,'staticobjects/tables/qey_butcherblock',0),(1519,1519,'staticobjects/tables/qey_table_desk_plain',0),(1520,1520,'staticobjects/soe_wallet/roulette_table_dpo',1096),(1521,1521,'creatures/tu/skeleton',0),(1522,1522,'staticobjects/relics/cazic_bowl_purple',0),(1523,1523,'staticobjects/tree/nekf_mushroom_a_mature',0),(1524,1524,'staticobjects/tree/nekf_mushroom_a_young',0),(1525,1525,'staticobjects/tree/nekf_mushroom_blue',0),(1526,1526,'staticobjects/cages/goblin_broken_cage01',0),(1527,1527,'staticobjects/cages/goblin_broken_cage02',0),(1528,1528,'staticobjects/cages/goblin_cage01',0),(1529,1529,'staticobjects/chairs/goblin_chairs01',0),(1530,1530,'staticobjects/flags/goblin_flag01',0),(1531,1531,'staticobjects/flags/goblin_flag02',0),(1532,1532,'staticobjects/flags/goblin_flag03',0),(1533,1533,'staticobjects/goblin_misc/hanging_meat01',0),(1534,1534,'staticobjects/racks/weaponrack001',0),(1535,1535,'staticobjects/rubble/goblin_rubble01',0),(1536,1536,'staticobjects/rubble/goblin_rubble02',0),(1537,1537,'staticobjects/rubble/goblin_rubble03',0),(1538,1538,'staticobjects/scafolds/goblin_scafold01',0),(1539,1539,'staticobjects/scafolds/goblin_scafold02',0),(1540,1540,'staticobjects/tables/goblin_cage01',0),(1541,1541,'staticobjects/tables/goblin_table01',0),(1542,1542,'staticobjects/tables/goblin_torture_table01',0),(1543,1543,'staticobjects/targets/training_dummy001',0),(1544,1544,'staticobjects/tents/goblin_tent01',0),(1545,1545,'staticobjects/tents/goblin_tent02',0),(1546,1546,'staticobjects/fallengate_epic01_boss/fallen_wall_01',0),(1547,1547,'staticobjects/fires/goblin_brazier01',0),(1548,1548,'_exp08/characters/monsters/warboar/warboar_drunder',1096),(1549,1549,'staticobjects/gravestones/gravestone01',0),(1550,1550,'staticobjects/rocks/rock01',0),(1551,1551,'staticobjects/tree/stump01',0),(1552,1552,'staticobjects/books/halfling_bookstand01',0),(1553,1553,'staticobjects/tables/cr_librariansdesk001',0),(1554,1554,'staticobjects/barricades/barricade_corner_left',0),(1555,1555,'staticobjects/barricades/barricade_corner_right',0),(1556,1556,'staticobjects/barricades/barricade_long',0),(1557,1557,'staticobjects/barricades/barricade_short',0),(1558,1558,'staticobjects/trainingdummy/training_dummy',0),(1559,1559,'_exp08/characters/tool_users/chitari/chitari_base',1096),(1560,1560,'accessories/wieldable_items/shields/exp08/exp08_shield_celestial_tallonite_blue-gold',1096),(1561,1561,'accessories/wieldable_items/shields/exp08/exp08_shield_celestial_tallonite_blue-iron',1096),(1562,1562,'accessories/wieldable_items/shields/exp08/exp08_shield_celestial_tallonite_red-gold',1096),(1563,1563,'accessories/wieldable_items/shields/exp08/exp08_shield_celestial_tallonite_red-iron',1096),(1564,1564,'accessories/wieldable_items/weapons/exp08/1h_crush/club_tallonite_bloodstone',1096),(1565,1565,'accessories/wieldable_items/weapons/exp08/1h_crush/club_tallonite_blue-bluemetal',1096),(1566,1566,'accessories/wieldable_items/weapons/exp08/1h_crush/club_tallonite_blue-gold',1096),(1567,1567,'accessories/wieldable_items/weapons/exp08/1h_crush/club_tallonite_obsidian',1096),(1568,1568,'accessories/wearable_items/cloak/exp07/cloak_gothic3',1096),(1569,1569,'accessories/wieldable_items/weapons/exp08/1h_crush/club_tallonite_red-bluemetal',1096),(1570,1570,'accessories/wieldable_items/weapons/exp08/1h_crush/club_tallonite_red-gold',1096),(1571,1571,'staticobjects/chests/broken_orc_treasure_chest',0),(1572,1572,'ec/pc/iksar/iksar_female_blk',0),(1573,1573,'ec/pc/iksar/iksar_female_giraf',0),(1574,1574,'ec/pc/iksar/iksar_male2',0),(1575,1575,'ec/pc/iksar/iksar_male3',0),(1576,1576,'staticobjects/crates/interactive_crate',0),(1577,1577,'accessories/wieldable_items/weapons/exp08/1h_crush/club_tallonite_velium',1096),(1578,1578,'staticobjects/freeport/fprt_sewer01_gears01',0),(1579,1579,'staticobjects/freeport/fprt_sewer01_gears02',0),(1580,1580,'staticobjects/freeport/fprt_sewer01_gears03',0),(1581,1581,'staticobjects/pictures/castle_painting_01',0),(1582,1582,'staticobjects/trainingdummy/dummy_hanging',0),(1583,1583,'staticobjects/crates/animated_crate',0),(1584,1584,'creatures/monsters/shadowedman',0),(1585,1585,'creatures/tu/nightbloodwarrior',0),(1586,1586,'staticobjects/marinerbell/marinersbell001',0),(1587,1587,'ec/pc/erudite/erudite_female_tattooevil01',0),(1588,1588,'ec/pc/erudite/erudite_female_tattooevil02',0),(1589,1589,'ec/pc/erudite/erudite_female_tattooevil03',0),(1590,1590,'ec/pc/erudite/erudite_female_tattooevil04',0),(1591,1591,'ec/pc/erudite/erudite_female_tattooevil05',0),(1592,1592,'ec/pc/erudite/erudite_female_tattoogood01',0),(1593,1593,'ec/pc/erudite/erudite_female_tattoogood02',0),(1594,1594,'ec/pc/erudite/erudite_female_tattoogood03',0),(1595,1595,'ec/pc/erudite/erudite_female_tattoogood04',0),(1596,1596,'ec/pc/erudite/erudite_female_tattoogood05',0),(1597,1597,'ec/pc/erudite/erudite_male_tattooevil01',0),(1598,1598,'ec/pc/erudite/erudite_male_tattooevil02',0),(1599,1599,'ec/pc/erudite/erudite_male_tattooevil03',0),(1600,1600,'ec/pc/erudite/erudite_male_tattooevil04',0),(1601,1601,'ec/pc/erudite/erudite_male_tattooevil05',0),(1602,1602,'ec/pc/erudite/erudite_male_tattoogood01',0),(1603,1603,'ec/pc/erudite/erudite_male_tattoogood02',0),(1604,1604,'ec/pc/erudite/erudite_male_tattoogood03',0),(1605,1605,'ec/pc/erudite/erudite_male_tattoogood04',0),(1606,1606,'ec/pc/erudite/erudite_male_tattoogood05',0),(1607,1607,'staticobjects/books/halfling_bkstack01',0),(1608,1608,'staticobjects/lighting/halfling_candle_log01',0),(1609,1609,'staticobjects/lighting/halfling_lantern01_handledown',0),(1610,1610,'staticobjects/lighting/halfling_wall_light01_single',0),(1611,1611,'staticobjects/lighting/halfling_wall_light02_metal',0),(1612,1612,'staticobjects/lighting/halfling_wall_light02_wood',0),(1613,1613,'staticobjects/lighting/orc_candle_01',0),(1614,1614,'staticobjects/lighting/troll_candle_01',0),(1615,1615,'staticobjects/statues/edk_hand_eye',0),(1616,1616,'staticobjects/statues/hum_rallosmarker01',0),(1617,1617,'staticobjects/statues/nekf_darkelf_foci001',0),(1618,1618,'staticobjects/statues/prexus_minaret01',0),(1619,1619,'staticobjects/statues/solro_dragontorch01',0),(1620,1620,'staticobjects/statues/trl_tiki001',0),(1621,1621,'staticobjects/containers/halfling_bucket01',0),(1622,1622,'staticobjects/tree/fprt_flowers_purple',0),(1623,1623,'staticobjects/tree/nbhum_branches_leafy_d',0),(1624,1624,'staticobjects/tree/river_flowertree_01',0),(1625,1625,'accessories/wieldable_items/weapons/exp08/1h_crush/mace_tallonite_bloodstone',1096),(1626,1626,'accessories/wieldable_items/weapons/exp08/1h_crush/mace_tallonite_blue-bluemetal',1096),(1627,1627,'accessories/wieldable_items/weapons/exp08/1h_crush/mace_tallonite_blue-gold',1096),(1628,1628,'creatures/monsters/venekor',0),(1629,1629,'accessories/wieldable_items/weapons/exp08/1h_crush/mace_tallonite_obsidian',1096),(1630,1630,'accessories/wieldable_items/weapons/exp08/1h_crush/mace_tallonite_red-bluemetal',1096),(1631,1631,'accessories/wieldable_items/weapons/exp08/1h_crush/mace_tallonite_red-gold',1096),(1632,1632,'accessories/wieldable_items/weapons/exp08/1h_crush/mace_tallonite_velium',1096),(1633,1633,'accessories/wieldable_items/weapons/exp08/1h_pierce/exp08_dagger_obsidian',1096),(1634,1634,'accessories/wieldable_items/weapons/exp08/1h_pierce/exp08_dagger_tallonite_blue',1096),(1635,1635,'accessories/wieldable_items/tools/fisherman/common001',0),(1636,1636,'accessories/wieldable_items/tools/fisherman/uncommon001',0),(1637,1637,'creatures/tu/lizardman_shaman',0),(1638,1638,'creatures/tu/lizardman_warrior',0),(1639,1639,'accessories/wieldable_items/weapons/exp08/1h_pierce/exp08_dagger_tallonite_blue_bluemetal',1096),(1640,1640,'accessories/wieldable_items/weapons/exp08/1h_pierce/exp08_dagger_tallonite_red',1096),(1641,1641,'accessories/wieldable_items/weapons/exp08/1h_pierce/exp08_dagger_tallonite_red_bluemetal',1096),(1642,1642,'accessories/wieldable_items/weapons/exp08/1h_sword/exp08_sword_katana_obsidian',1096),(1643,1643,'accessories/wieldable_items/weapons/exp08/1h_sword/exp08_sword_katana_tallonite_blue',1096),(1644,1644,'accessories/wearable_items/magus/artifact/low/hood',0),(1645,1645,'accessories/wieldable_items/weapons/exp08/1h_sword/exp08_sword_katana_tallonite_blue_bluemetal',1096),(1646,1646,'accessories/wieldable_items/weapons/exp08/1h_sword/exp08_sword_katana_tallonite_red',1096),(1647,1647,'accessories/wearable_items/magus/artifact/low/pants',0),(1648,1648,'accessories/wieldable_items/weapons/exp08/1h_sword/exp08_sword_katana_tallonite_red_bluemetal',1096),(1649,1649,'accessories/wieldable_items/weapons/exp08/2h_sword/exp08_2h_sword_tallonite_blue-gold',1096),(1650,1650,'accessories/wieldable_items/weapons/exp08/2h_sword/exp08_2h_sword_tallonite_blue-iron',1096),(1651,1651,'accessories/wieldable_items/weapons/exp08/2h_sword/exp08_2h_sword_tallonite_gem_obsidian',1096),(1652,1652,'accessories/wieldable_items/weapons/exp08/2h_sword/exp08_2h_sword_tallonite_red-gold',1096),(1653,1653,'accessories/wieldable_items/weapons/exp08/2h_sword/exp08_2h_sword_tallonite_red-iron',1096),(1654,1654,'accessories/wieldable_items/weapons/exp08/staff/exp08_staff_fighting_tallonite_bloodstone',1096),(1655,1655,'accessories/wieldable_items/weapons/exp08/staff/exp08_staff_fighting_tallonite_blue-gold',1096),(1656,1656,'accessories/wieldable_items/weapons/exp08/staff/exp08_staff_fighting_tallonite_blue-iron',1096),(1657,1657,'accessories/wieldable_items/weapons/exp08/staff/exp08_staff_fighting_tallonite_obsidian',1096),(1658,1658,'accessories/wieldable_items/weapons/exp08/staff/exp08_staff_fighting_tallonite_red-gold',1096),(1659,1659,'staticobjects/chairs/fprt_chair_stool_military01',0),(1660,1660,'accessories/wieldable_items/weapons/exp08/staff/exp08_staff_fighting_tallonite_red-iron',1096),(1661,1661,'accessories/wieldable_items/weapons/exp08/staff/exp08_staff_fighting_tallonite_velium',1096),(1662,1662,'accessories/wieldable_items/weapons/exp08/staff/exp08_staff_mage_tallonite_bloodstone',1096),(1663,1663,'staticobjects/containers/fprt_bucket_plainlarge001',0),(1664,1664,'staticobjects/containers/fprt_planter_e',0),(1665,1665,'staticobjects/containers/fprt_vase_ornateface01',0),(1666,1666,'staticobjects/fish/fish_01',0),(1667,1667,'staticobjects/relics/egg_ice_01',0),(1668,1668,'staticobjects/rocks/rock02',0),(1669,1669,'staticobjects/rugs/qey_rug_blackcurveslarge001',0),(1670,1670,'staticobjects/shrub/fanplantgroup_001',0),(1671,1671,'staticobjects/shrub/nbhum_cropplant02',0),(1672,1672,'staticobjects/tables/fprt_crucible_table_01_smoke_fire_crucible_03',0),(1673,1673,'staticobjects/tree/tree_log_01',0),(1674,1674,'accessories/wieldable_items/weapons/exp08/staff/exp08_staff_mage_tallonite_blue-gold',1096),(1675,1675,'accessories/wieldable_items/weapons/exp08/staff/exp08_staff_mage_tallonite_blue-iron',1096),(1676,1676,'accessories/wieldable_items/weapons/exp08/staff/exp08_staff_mage_tallonite_obsidian',1096),(1677,1677,'accessories/wieldable_items/weapons/exp08/staff/exp08_staff_mage_tallonite_red-gold',1096),(1678,1678,'staticobjects/tree/feer_plant_pitcher',0),(1679,1679,'accessories/wieldable_items/weapons/exp08/staff/exp08_staff_mage_tallonite_red-iron',1096),(1680,1680,'creatures/monsters/dragon_test',0),(1681,1681,'accessories/wieldable_items/weapons/exp08/staff/exp08_staff_mage_tallonite_velium',1096),(1682,1682,'_exp07/characters/tool_users/tallonite_female/tallonite_female_queen',1096),(1683,1683,'_exp08/characters/monsters/warboar/warboar',1096),(1684,1684,'accessories/wearable_items/_exp07/storm_giant_chain_armor/storm_giant_pauldron_right',1096),(1685,1685,'accessories/wearable_items/_exp07/storm_giant_chain_armor/chest',1096),(1686,1686,'accessories/wearable_items/_exp07/storm_giant_chain_armor/feet',1096),(1687,1687,'accessories/wearable_items/_exp07/storm_giant_chain_armor/forearms',1096),(1688,1688,'accessories/wearable_items/_exp07/storm_giant_chain_armor/hands',1096),(1689,1689,'accessories/wearable_items/_exp07/storm_giant_chain_armor/head',1096),(1690,1690,'accessories/wearable_items/_exp07/storm_giant_chain_armor/legs',1096),(1691,1691,'accessories/wearable_items/_exp07/storm_giant_chain_armor/legs_noskirt',1096),(1692,1692,'accessories/wearable_items/_exp07/storm_giant_chain_armor/shoulders',1096),(1693,1693,'accessories/wearable_items/_exp07/storm_giant_chain_armor/shoulders_nopauldrons',1096),(1694,1694,'accessories/wearable_items/magus/uncommon/low/legs',0),(1695,1695,'accessories/wearable_items/_exp07/storm_giant_chain_armor/skirt',1096),(1696,1696,'ec/pc/barbarian/barbarian_male_tattoo06',0),(1697,1697,'ec/pc/barbarian/barbarian_male_tattoo07',0),(1698,1698,'ec/pc/barbarian/barbarian_male_tattoo08',0),(1699,1699,'ec/pc/barbarian/barbarian_male_tattoo09',0),(1700,1700,'ec/pc/barbarian/barbarian_male_tattoo10',0),(1701,1701,'accessories/wearable_items/_exp07/storm_giant_chain_armor/storm_giant_pauldron_left',1096),(1702,1702,'staticobjects/boats/boat',0),(1703,1703,'staticobjects/boats/boat2',0),(1704,1704,'staticobjects/statues/binding_shrine',0),(1705,1705,'staticobjects/statues/greatsword_magic',0),(1706,1706,'accessories/wearable_items/_exp07/rallos_zek_armor/rallos_zek_armor_magus_tintable/skirt',1096),(1707,1707,'accessories/wearable_items/_exp07/rallos_zek_armor/rallos_zek_armor_magus_tintable/arms',1096),(1708,1708,'accessories/wearable_items/_exp07/rallos_zek_armor/rallos_zek_armor_magus_tintable/chest',1096),(1709,1709,'staticobjects/switches/pull_switch_round',0),(1710,1710,'creatures/tu/bixie_figher',0),(1711,1711,'creatures/tu/bixie_worker',0),(1712,1712,'accessories/wearable_items/_exp07/rallos_zek_armor/rallos_zek_armor_magus_tintable/head',1096),(1713,1713,'staticobjects/signs/general/barrel_single',0),(1714,1714,'staticobjects/signs/general/road_sign_post',0),(1715,1715,'staticobjects/signs/general/sign_wall',0),(1716,1716,'staticobjects/transports/boats/elizabella_default',0),(1717,1717,'staticobjects/transports/boats/elizabella_orcish',0),(1718,1718,'staticobjects/transports/doors/cazicthule/door_stone_ornate',0),(1719,1719,'staticobjects/transports/doors/cazicthule/door_stone_worn',0),(1720,1720,'staticobjects/transports/relics/cazic_bowl_green',0),(1721,1721,'staticobjects/transports/relics/cazic_bowl_purple',0),(1722,1722,'accessories/wearable_items/_exp07/rallos_zek_armor/rallos_zek_armor_magus_tintable/legs',1096),(1723,1723,'staticobjects/respawn_tent02',0),(1724,1724,'staticobjects/rocks/qey_boulder02',0),(1725,1725,'staticobjects/rocks/qey_boulder03',0),(1726,1726,'staticobjects/shrub/cazic_roota001',0),(1727,1727,'staticobjects/shrub/cazic_rootb001',0),(1728,1728,'staticobjects/shrub/cazic_rootc001',0),(1729,1729,'staticobjects/shrub/cazic_rootd001',0),(1730,1730,'staticobjects/shrub/cazic_roote001',0),(1731,1731,'staticobjects/shrub/cazic_rootg001',0),(1732,1732,'staticobjects/shrub/cazic_rooth001',0),(1733,1733,'staticobjects/shrub/cazic_rootj001',0),(1734,1734,'staticobjects/shrub/cazic_rootk001',0),(1735,1735,'staticobjects/shrub/feer_plant_bigleaf',0),(1736,1736,'staticobjects/shrub/feer_plant_fern1',0),(1737,1737,'staticobjects/shrub/feer_plant_reid',0),(1738,1738,'staticobjects/shrub/flower',0),(1739,1739,'staticobjects/shrub/mushroom01',0),(1740,1740,'staticobjects/shrub/mushroom01_grp5',0),(1741,1741,'staticobjects/shrub/mushroom01_sk_green',0),(1742,1742,'staticobjects/shrub/mushroom01_sk_purple',0),(1743,1743,'staticobjects/shrub/mushroom02',0),(1744,1744,'staticobjects/shrub/mushroom02_sk_green',0),(1745,1745,'staticobjects/shrub/mushroom02_sk_purple',0),(1746,1746,'staticobjects/shrub/mushroom03',0),(1747,1747,'staticobjects/shrub/mushroom04',0),(1748,1748,'staticobjects/shrub/nekf_mushroom_009',0),(1749,1749,'staticobjects/statues/holysymbol01',0),(1750,1750,'staticobjects/tree/bb_stump01',0),(1751,1751,'staticobjects/tree/bb_stump02',0),(1752,1752,'staticobjects/tree/qey_adv04_log01',0),(1753,1753,'staticobjects/tree/qey_adv04_log03',0),(1754,1754,'staticobjects/tree/qey_adv04_stump01',0),(1755,1755,'staticobjects/tree/qey_adv04_stump02',0),(1756,1756,'staticobjects/tree/qey_adv04_stump03',0),(1757,1757,'staticobjects/tree/qey_adv04_stump04',0),(1758,1758,'staticobjects/tree/qey_adv04_stumpcut01',0),(1759,1759,'accessories/wieldable_items/weapons/exp08/staff/exp08_staff_mage_tallonite_red-gold_fx',1096),(1760,1760,'accessories/wieldable_items/weapons/exp08/staff/exp08_staff_fighting_tallonite_blue-gold_fx',1096),(1761,1761,'accessories/wieldable_items/weapons/exp08/staff/exp08_staff_fighting_tallonite_blue-iron_fx',1096),(1762,1762,'accessories/wieldable_items/weapons/exp08/staff/exp08_staff_fighting_tallonite_red-iron_fx',1096),(1763,1763,'projectiles/spell_mug',1096),(1764,1764,'accessories/wearable_items/snapons/backpacks/backpack_othmir_swivel/backpack_othmir_turquoise',1096),(1765,1765,'accessories/wearable_items/snapons/backpacks/backpack_othmir_swivel/backpack_othmir_blue',1096),(1766,1766,'accessories/wearable_items/snapons/backpacks/backpack_othmir_swivel/backpack_othmir_green',1096),(1767,1767,'accessories/wieldable_items/weapons/exp08/1h_crush/hammer_nature_frost',1096),(1768,1768,'accessories/wieldable_items/weapons/exp08/1h_crush/wand_nature',1096),(1769,1769,'accessories/wieldable_items/weapons/exp08/1h_crush/wand_nature_evil',1096),(1770,1770,'accessories/wieldable_items/weapons/exp08/1h_crush/wand_nature_frost',1096),(1771,1771,'accessories/wieldable_items/weapons/exp08/1h_crush/hammer_nature',1096),(1772,1772,'accessories/wieldable_items/weapons/exp08/1h_crush/hammer_nature_evil',1096),(1773,1773,'accessories/wieldable_items/weapons/exp08/1h_pierce/exp08_dagger_nature_frost',1096),(1774,1774,'accessories/wieldable_items/weapons/exp08/1h_pierce/exp08_dagger_nature',1096),(1775,1775,'accessories/wieldable_items/weapons/exp08/1h_pierce/exp08_dagger_nature_evil',1096),(1776,1776,'accessories/wieldable_items/weapons/exp08/1h_sword/exp08_sword_nature_frost',1096),(1777,1777,'accessories/wieldable_items/weapons/exp08/1h_sword/exp08_sword_nature',1096),(1778,1778,'accessories/wieldable_items/weapons/exp08/1h_sword/exp08_sword_nature_evil',1096),(1779,1779,'accessories/wieldable_items/weapons/exp08/2h_crush/exp08_2h_hammer_nature_dark_red',1096),(1780,1780,'accessories/wieldable_items/weapons/exp08/2h_crush/exp08_2h_hammer_nature',1096),(1781,1781,'accessories/wieldable_items/weapons/exp08/2h_crush/exp08_2h_hammer_nature_dark',1096),(1782,1782,'accessories/wieldable_items/weapons/exp08/staff/exp08_staff_mage_nature_frost',1096),(1783,1783,'accessories/wieldable_items/weapons/exp08/staff/exp08_spear_nature',1096),(1784,1784,'accessories/wieldable_items/weapons/exp08/staff/exp08_spear_nature_evil',1096),(1785,1785,'accessories/wieldable_items/weapons/exp08/staff/exp08_spear_nature_frost',1096),(1786,1786,'accessories/wieldable_items/weapons/exp08/staff/exp08_staff_mage_nature',1096),(1787,1787,'accessories/wieldable_items/weapons/exp08/staff/exp08_staff_mage_nature_evil',1096),(1788,1788,'accessories/wieldable_items/shields/exp08/exp08_shield_celestial_tallonite_gem_obsidian',1096),(1789,1789,'accessories/wieldable_items/shields/exp08/exp08_shield_celestial_tallonite_gem_bloodstone',1096),(1790,1790,'accessories/wieldable_items/shields/exp08/exp08_shield_celestial_tallonite_gem_frost',1096),(1791,1791,'accessories/wieldable_items/weapons/exp08/1h_crush/wand_nature_frost_fx',1096),(1792,1792,'accessories/wieldable_items/weapons/exp08/1h_crush/hammer_nature_evil_fx',1096),(1793,1793,'accessories/wieldable_items/weapons/exp08/1h_crush/hammer_nature_frost_fx',1096),(1794,1794,'accessories/wieldable_items/weapons/exp08/1h_crush/wand_nature_evil_fx',1096),(1795,1795,'accessories/wieldable_items/weapons/exp08/1h_pierce/exp08_dagger_nature_frost_fx',1096),(1796,1796,'accessories/wieldable_items/weapons/exp08/1h_pierce/exp08_dagger_nature_evil_fx',1096),(1797,1797,'accessories/wieldable_items/weapons/exp08/1h_sword/exp08_sword_nature_frost_fx',1096),(1798,1798,'accessories/wieldable_items/weapons/exp08/1h_sword/exp08_sword_nature_evil_fx',1096),(1799,1799,'accessories/wieldable_items/weapons/exp08/2h_crush/exp08_2h_hammer_nature_dark_red_fx',1096),(1800,1800,'accessories/wieldable_items/weapons/exp08/2h_crush/exp08_2h_hammer_nature_dark_fx',1096),(1801,1801,'accessories/wieldable_items/weapons/exp08/staff/exp08_staff_mage_nature_frost_fx',1096),(1802,1802,'accessories/wieldable_items/weapons/exp08/staff/exp08_spear_nature_evil_fx',1096),(1803,1803,'accessories/wieldable_items/weapons/exp08/staff/exp08_spear_nature_frost_fx',1096),(1804,1804,'accessories/wieldable_items/weapons/exp08/staff/exp08_staff_mage_nature_evil_fx',1096),(1805,1805,'creatures/mounts/flying_disc/flying_disc_tinker_deluxe_02',1096),(1806,1806,'creatures/mounts/flying_disc/flying_disc_tinker_01',1096),(1807,1807,'creatures/mounts/flying_disc/flying_disc_tinker_02',1096),(1808,1808,'creatures/mounts/flying_disc/flying_disc_tinker_deluxe_01',1096),(1809,1809,'creatures/mounts/flying_disc/flying_disc_tinker_deluxe_01green',1096),(1810,1810,'creatures/mounts/flying_disc/flying_disc_tinker_deluxe_01red',1096),(1811,1811,'creatures/mounts/flying_disc/flying_disc_tinker_deluxe_02blue',1096),(1812,1812,'creatures/mounts/flying_disc/flying_disc_tinker_deluxe_02green',1096),(1813,1813,'staticobjects/blacksmith/wall_wallchain_dwarf_forge_dpo',1096),(1814,1814,'creatures/mounts/pegasus_mount/pegasus_mount_base',1096),(1815,1815,'staticobjects/soe_wallet/wheel_of_chance_dpo',1096),(1816,1816,'staticobjects/soe_wallet/slot_machine_dpo',1096),(1817,1817,'staticobjects/tools/vastydeep01_objects01_shovel01',1096),(1818,1818,'staticobjects/tools/vastydeep01_objects01_rake01',1096),(1819,1819,'staticobjects/liveevent/tinkerfest/dpo_tinkerfest_distillery_stage03',1096),(1820,1820,'staticobjects/liveevent/tinkerfest/dpo_tinkerfest_distillery_stage02',1096),(1821,1821,'accessories/wearable_items/_exp08/robe_elemental/fire/chest',1096),(1822,1822,'accessories/wearable_items/_exp08/robe_elemental/fire/feet',1096),(1823,1823,'accessories/wearable_items/_exp08/robe_elemental/fire/hands',1096),(1824,1824,'accessories/wearable_items/_exp08/robe_elemental/fire/head',1096),(1825,1825,'accessories/wearable_items/_exp08/robe_elemental/fire/head_collar',1096),(1826,1826,'accessories/wearable_items/_exp08/robe_elemental/fire/pants',1096),(1827,1827,'accessories/wearable_items/_exp08/robe_elemental/fire/skirt',1096),(1828,1828,'accessories/wearable_items/_exp08/robe_elemental/water/chest',1096),(1829,1829,'accessories/wearable_items/_exp08/robe_elemental/water/feet',1096),(1830,1830,'accessories/wearable_items/_exp08/robe_elemental/water/hands',1096),(1831,1831,'accessories/wearable_items/_exp08/robe_elemental/water/head',1096),(1832,1832,'accessories/wearable_items/_exp08/robe_elemental/water/head_collar',1096),(1833,1833,'accessories/wearable_items/_exp08/robe_elemental/water/pants',1096),(1834,1834,'accessories/wearable_items/_exp08/robe_elemental/water/skirt',1096),(1835,1835,'staticobjects/soe_wallet/craps_table_dpo',1096),(1836,1836,'accessories/wieldable_items/weapons/exp08/1h_sword/exp08_sword_elemental_stormblade',1096),(1837,1837,'accessories/wieldable_items/weapons/exp08/2h_crush/exp08_2h_hammer_elemental_thunderhammer',1096),(1838,1838,'accessories/wieldable_items/weapons/exp08/2h_sword/exp08_2h_sword_elemental_windblade',1096),(1839,1839,'accessories/wieldable_items/weapons/exp08/2h_sword/exp08_2h_axe_elemental_earthshatter',1096),(1840,1840,'accessories/wearable_items/cloak/exp08/cloak_feathered_raven',1096),(1841,1841,'accessories/wearable_items/cloak/exp08/cloak_feathered_white',1096),(1842,1842,'accessories/wearable_items/cloak/exp08/cloak_gothic01',1096),(1843,1843,'code/test',0),(1844,1844,'accessories/wearable_items/cloak/exp08/cloak_powered01',1096),(1845,1845,'staticobjects/cauldron/cauldron',0),(1846,1846,'accessories/wearable_items/magus/uncommon/low/forearms',0),(1847,1847,'staticobjects/bones/human_skeleton_bones',0),(1848,1848,'staticobjects/hay/haybail_1',0),(1849,1849,'accessories/wearable_items/cloak/exp08/cloak_feathered_white_short',1096),(1850,1850,'accessories/wearable_items/cloak/exp08/cloak_feathered_raven_short',1096),(1851,1851,'accessories/wearable_items/cloak/exp08/cloak_tinkered01',1096),(1852,1852,'accessories/wearable_items/magus/artifact/medium/hood',0),(1853,1853,'accessories/wearable_items/magus/artifact/medium/pants',0),(1854,1854,'staticobjects/gravestones/gravestone02',0),(1855,1855,'staticobjects/urns/small_urn',0),(1856,1856,'staticobjects/coffins_and_sarcophagus/simple_wooden_coffin',0),(1857,1857,'staticobjects/doors/wooden_door01',0),(1858,1858,'staticobjects/statues/monk_statue',0),(1859,1859,'staticobjects/world_devices/trdskl_qey_forge01',0),(1860,1860,'staticobjects/weapons/dagger',0),(1861,1861,'accessories/wearable_items/cloak/exp08/cloak_tinkered01_copper',1096),(1862,1862,'accessories/wearable_items/magus/uncommon/medium/hood',0),(1863,1863,'accessories/wearable_items/cloak/exp08/cloak_tinkered01_treadmill_copper',1096),(1864,1864,'accessories/wearable_items/magus/artifact/high/arms',0),(1865,1865,'accessories/wearable_items/magus/rare/medium/shoulders',0),(1866,1866,'accessories/wearable_items/cloak/exp08/cloak_tinkered01_treadmill_tin',1096),(1867,1867,'accessories/wearable_items/cloak/exp08/cloak_tinkered02_copper',1096),(1868,1868,'accessories/wearable_items/cloak/exp08/cloak_tinkered02_tin',1096),(1869,1869,'accessories/wearable_items/clothing/common/high/arms',0),(1870,1870,'accessories/wearable_items/clothing/common/high/chest',0),(1871,1871,'accessories/wearable_items/clothing/common/high/legs',0),(1872,1872,'accessories/wearable_items/clothing/common/low/arms',0),(1873,1873,'accessories/wearable_items/clothing/common/low/chest',0),(1874,1874,'accessories/wearable_items/clothing/common/low/legs',0),(1875,1875,'accessories/wearable_items/clothing/common/medium/arms',0),(1876,1876,'accessories/wearable_items/clothing/common/medium/chest',0),(1877,1877,'accessories/wearable_items/clothing/common/medium/legs',0),(1878,1878,'accessories/wearable_items/clothing/uncommon/high/arms',0),(1879,1879,'accessories/wearable_items/clothing/uncommon/high/chest',0),(1880,1880,'accessories/wearable_items/clothing/uncommon/high/legs',0),(1881,1881,'staticobjects/doors/stormhold_door01',0),(1882,1882,'accessories/wearable_items/_exp08/robe_elemental/air/skirt',1096),(1883,1883,'staticobjects/relics/magic_globe',0),(1884,1884,'accessories/wearable_items/journeyman/journeyman_leather/chest',0),(1885,1885,'accessories/wearable_items/journeyman/journeyman_leather/feet',0),(1886,1886,'accessories/wearable_items/journeyman/journeyman_leather/forearms',0),(1887,1887,'accessories/wearable_items/journeyman/journeyman_leather/hands',0),(1888,1888,'accessories/wearable_items/journeyman/journeyman_leather/head',0),(1889,1889,'accessories/wearable_items/journeyman/journeyman_leather/legs',0),(1890,1890,'accessories/wearable_items/journeyman/journeyman_leather/shoulders',0),(1891,1891,'accessories/wearable_items/brigandine/common/low/skirt',0),(1892,1892,'accessories/wearable_items/leather/plain/stitched/chest',0),(1893,1893,'accessories/wearable_items/leather/plain/stitched/feet',0),(1894,1894,'accessories/wearable_items/leather/plain/stitched/forearms',0),(1895,1895,'accessories/wearable_items/leather/plain/stitched/hands',0),(1896,1896,'accessories/wearable_items/leather/plain/stitched/head',0),(1897,1897,'accessories/wearable_items/leather/plain/stitched/legs',0),(1898,1898,'accessories/wearable_items/leather/plain/stitched/shoulders',0),(1899,1899,'accessories/wearable_items/leather/plain/stitched/skirt',0),(1900,1900,'staticobjects/banners/gnoll_banner_spear',0),(1901,1901,'accessories/wearable_items/_exp08/robe_elemental/air/chest',1096),(1902,1902,'accessories/wearable_items/_exp08/robe_elemental/air/feet',1096),(1903,1903,'staticobjects/benches/floor_bench_human_militia',0),(1904,1904,'staticobjects/boats/canoe',0),(1905,1905,'staticobjects/brazier/floor_brazier_erudite_steam',0),(1906,1906,'staticobjects/carts/covered_cart',0),(1907,1907,'staticobjects/chairs/floor_chair_halfling_rocking',0),(1908,1908,'staticobjects/chests/gnoll_bone_chest',0),(1909,1909,'staticobjects/containers/barrel_small_light',0),(1910,1910,'staticobjects/crystals/crystals_01',0),(1911,1911,'staticobjects/crystals/crystals_02',0),(1912,1912,'staticobjects/crystals/crystals_03',0),(1913,1913,'staticobjects/dressers/floor_dresser_elf_elddar',0),(1914,1914,'staticobjects/lighting/ceiling_chandelier_darkelf_candle',0),(1915,1915,'accessories/wearable_items/_exp08/robe_elemental/air/hands',1096),(1916,1916,'staticobjects/pictures/wall_painting_orc_oil',0),(1917,1917,'staticobjects/relics/diamond_ring',0),(1918,1918,'staticobjects/trainingdummy/scarecrow',0),(1919,1919,'staticobjects/blacksmith/floor_anvil_any_blacksmith',0),(1920,1920,'staticobjects/blacksmith/floor_bellows_any_blacksmith',0),(1921,1921,'staticobjects/blacksmith/floor_oven_any_blacksmith',0),(1922,1922,'staticobjects/blacksmith/floor_table_any_blacksmith',0),(1923,1923,'staticobjects/clothspinners/floor_clothrack_any_clothspinners',0),(1924,1924,'staticobjects/barrels/floor_barrel01_any_wood',0),(1925,1925,'staticobjects/barrels/floor_barrel02_any_wood',0),(1926,1926,'staticobjects/barrels/floor_barrel03_any_wood',0),(1927,1927,'staticobjects/beds/floor_bed_halfling_wood',0),(1928,1928,'staticobjects/cages/ceiling_birdcage01_any_wood',0),(1929,1929,'staticobjects/cages/ceiling_birdcage02_any_wood',0),(1930,1930,'staticobjects/cages/ceiling_birdcage03_any_wood',0),(1931,1931,'staticobjects/cages/ceiling_birdcage04_any_wood',0),(1932,1932,'staticobjects/cages/ceiling_birdcage05_any_wood',0),(1933,1933,'staticobjects/cages/ceiling_birdcage06_any_wood',0),(1934,1934,'staticobjects/chests/floor_chest01_any_ironband',0),(1935,1935,'staticobjects/chests/floor_chest01_any_wood',0),(1936,1936,'staticobjects/chests/floor_chest02_any_ironband',0),(1937,1937,'staticobjects/chests/floor_chest02_any_wood',0),(1938,1938,'staticobjects/clothspinners/floor_loom_any_clothspinners',0),(1939,1939,'staticobjects/clothspinners/floor_sewingtable_any_clothspinners',0),(1940,1940,'staticobjects/clothspinners/floor_spinningwheel_any_clothspinners',0),(1941,1941,'staticobjects/containers/floor_bucket_any_wood',0),(1942,1942,'staticobjects/containers/floor_trough01_any_wood',0),(1943,1943,'staticobjects/containers/floor_trough02_any_wood',0),(1944,1944,'staticobjects/containers/floor_tub_any_wood',0),(1945,1945,'staticobjects/containers/floor_vase01_any_clay',0),(1946,1946,'staticobjects/containers/floor_vase02_any_clay',0),(1947,1947,'staticobjects/containers/floor_vase03_any_clay',0),(1948,1948,'staticobjects/containers/floor_vase04_any_clay',0),(1949,1949,'staticobjects/crates/floor_crate01_any_wood',0),(1950,1950,'staticobjects/crates/floor_crate02_any_wood',0),(1951,1951,'staticobjects/crates/floor_crate03_any_wood',0),(1952,1952,'staticobjects/crates/floor_crate04_any_wood',0),(1953,1953,'staticobjects/crystals/floor_globe_any_crystal',0),(1954,1954,'staticobjects/dressers/floor_dresser_halfling_wood',0),(1955,1955,'staticobjects/kegs/floor_keg01_any_wood',0),(1956,1956,'staticobjects/kegs/floor_keg02_any_wood',0),(1957,1957,'staticobjects/nautical/floor_steeringwheelstand_any_wood',0),(1958,1958,'staticobjects/pictures/wall_painting_halfling_milestoners',0),(1959,1959,'staticobjects/urns/floor_urn01_any_clay',0),(1960,1960,'staticobjects/urns/floor_urn02_any_clay',0),(1961,1961,'creatures/tu/lord_everling',0),(1962,1962,'staticobjects/beds/floor_bed01_any_farmer',0),(1963,1963,'staticobjects/beds/floor_bed02_any_farmer',0),(1964,1964,'staticobjects/beds/floor_bed_any_bunks',0),(1965,1965,'staticobjects/beds/floor_bed_any_merchant',0),(1966,1966,'staticobjects/bookcases/floor_bookcase_any_fancy',0),(1967,1967,'staticobjects/bookcases/floor_bookcase_any_wood',0),(1968,1968,'staticobjects/chairs/floor_chair_any_fancy',0),(1969,1969,'staticobjects/chairs/floor_chair_any_judicial',0),(1970,1970,'staticobjects/chairs/floor_chair_any_leather',0),(1971,1971,'staticobjects/chairs/floor_chair_any_wood',0),(1972,1972,'staticobjects/chairs/floor_stool_any_leather',0),(1973,1973,'staticobjects/chairs/floor_stool_any_wood',0),(1974,1974,'staticobjects/counters/floor_counter_any_2mlong',0),(1975,1975,'staticobjects/counters/floor_counter_any_3mlong',0),(1976,1976,'staticobjects/counters/floor_counter_any_4mlong',0),(1977,1977,'staticobjects/counters/floor_counter_any_5mlong',0),(1978,1978,'staticobjects/counters/floor_counter_any_corner',0),(1979,1979,'staticobjects/dressers/floor_dresser_any_fancy',0),(1980,1980,'staticobjects/dressers/floor_dresser_any_tall',0),(1981,1981,'staticobjects/dressers/floor_dresser_any_wood',0),(1982,1982,'staticobjects/shelfs/wall_shelf_any_2mlong',0),(1983,1983,'staticobjects/shelfs/wall_shelf_any_4mlong',0),(1984,1984,'staticobjects/shelfs/wall_shelf_any_corner',0),(1985,1985,'staticobjects/signs/general/base_sign',0),(1986,1986,'staticobjects/statues/floor_statue_human_erudin',0),(1987,1987,'staticobjects/statues/odd_creature',0),(1988,1988,'staticobjects/tables/floor_table01_any_fancy',0),(1989,1989,'staticobjects/tables/floor_table01_any_marble',0),(1990,1990,'staticobjects/tables/floor_table02_any_fancy',0),(1991,1991,'staticobjects/tables/floor_table02_any_marble',0),(1992,1992,'staticobjects/tables/floor_table03_any_marble',0),(1993,1993,'staticobjects/tables/floor_table04_any_marble',0),(1994,1994,'staticobjects/tables/floor_table_any_judicial',0),(1995,1995,'staticobjects/tables/floor_table_any_long',0),(1996,1996,'staticobjects/tables/floor_table_any_short',0),(1997,1997,'staticobjects/beds/floor_bedroll01_any_dirty',0),(1998,1998,'staticobjects/beds/floor_bedroll02_any_dirty',0),(1999,1999,'staticobjects/beds/floor_bed_human_step',0),(2000,2000,'staticobjects/beds/floor_bed_human_wood',0),(2001,2001,'staticobjects/benches/floor_bench01_human_plain',0),(2002,2002,'staticobjects/benches/floor_bench02_human_plain',0),(2003,2003,'staticobjects/benches/floor_bench03_human_plain',0),(2004,2004,'staticobjects/benches/floor_bench04_human_plain',0),(2005,2005,'staticobjects/benches/floor_bench05_human_plain',0),(2006,2006,'staticobjects/bookcases/floor_bookcase01_human_step',0),(2007,2007,'staticobjects/bookcases/floor_bookcase02_human_step',0),(2008,2008,'staticobjects/bookcases/floor_bookcase_any_slayer',0),(2009,2009,'staticobjects/chairs/floor_chair01_gnome_plain',0),(2010,2010,'staticobjects/chairs/floor_chair01_human_hood',0),(2011,2011,'staticobjects/chairs/floor_chair01_human_plain',0),(2012,2012,'staticobjects/chairs/floor_chair02_gnome_plain',0),(2013,2013,'staticobjects/chairs/floor_chair02_human_plain',0),(2014,2014,'staticobjects/chairs/floor_chair_human_weathered',0),(2015,2015,'staticobjects/chairs/floor_stool01_human_plain',0),(2016,2016,'staticobjects/chairs/floor_stool02_human_plain',0),(2017,2017,'staticobjects/containers/floor_bucket01_human_wood',0),(2018,2018,'staticobjects/containers/floor_bucket02_human_wood',0),(2019,2019,'staticobjects/fires/small_ring_fire',0),(2020,2020,'staticobjects/tents/grey_lean_to',0),(2021,2021,'staticobjects/barrels/floor_barrel_any_wood01',0),(2022,2022,'staticobjects/barrels/floor_barrel_any_wood02',0),(2023,2023,'staticobjects/barrels/floor_barrel_any_wood03',0),(2024,2024,'accessories/wearable_items/_exp08/robe_elemental/air/head',1096),(2025,2025,'staticobjects/brazier/floor_brazier_human_military',0),(2026,2026,'staticobjects/chairs/floor_chair_human_plain01',0),(2027,2027,'staticobjects/chairs/floor_stool_human_plain01',0),(2028,2028,'staticobjects/chests/floor_chest_human_step01',0),(2029,2029,'staticobjects/chests/floor_chest_human_step02',0),(2030,2030,'staticobjects/chests/floor_chest_human_wood',0),(2031,2031,'staticobjects/doors/fprt_door_plain',0),(2032,2032,'staticobjects/shelves/wall_shelf_any_2mlong',0),(2033,2033,'staticobjects/shelves/wall_shelf_any_4mlong',0),(2034,2034,'staticobjects/shelves/wall_shelf_any_corner',0),(2035,2035,'staticobjects/shelves/wall_shelf_human_2mlong',0),(2036,2036,'staticobjects/shelves/wall_shelf_human_simple01',0),(2037,2037,'staticobjects/tables/floor_table_gnome_plain01',0),(2038,2038,'staticobjects/tables/floor_table_gnome_plain02',0),(2039,2039,'staticobjects/tables/floor_table_human_generic01',0),(2040,2040,'staticobjects/tables/floor_table_human_generic02',0),(2041,2041,'staticobjects/tables/floor_table_human_hood01',0),(2042,2042,'staticobjects/tables/floor_table_human_hood02',0),(2043,2043,'staticobjects/tables/floor_table_human_hood03',0),(2044,2044,'staticobjects/tables/floor_table_human_hood04',0),(2045,2045,'staticobjects/tables/floor_table_human_hood05',0),(2046,2046,'staticobjects/tables/floor_table_human_hood06',0),(2047,2047,'staticobjects/tables/floor_table_human_plain01',0),(2048,2048,'staticobjects/tables/floor_table_human_plain02',0),(2049,2049,'staticobjects/tables/floor_table_human_plain03',0),(2050,2050,'staticobjects/tables/floor_table_human_step01',0),(2051,2051,'staticobjects/tables/floor_table_human_step02',0),(2052,2052,'staticobjects/beds/floor_bed_highelf_ornate',0),(2053,2053,'staticobjects/beds/floor_bed_woodelf_single',0),(2054,2054,'staticobjects/chairs/floor_chair_darkelf_wood',0),(2055,2055,'staticobjects/chairs/floor_chair_ogre_rock',0),(2056,2056,'staticobjects/chairs/floor_chair_troll_wood',0),(2057,2057,'staticobjects/chairs/floor_chair_woodelf_hood',0),(2058,2058,'staticobjects/chairs/floor_stool_any_wood01',0),(2059,2059,'staticobjects/chairs/floor_stool_highelf_wood',0),(2060,2060,'staticobjects/crates/floor_crate_troll_wood',0),(2061,2061,'staticobjects/lighting/floor_torch_ogre_rock',0),(2062,2062,'staticobjects/racks/floor_rack_darkelf_wine',0),(2063,2063,'staticobjects/tables/floor_table_darkelf_hood',0),(2064,2064,'staticobjects/tables/floor_table_gnome_round',0),(2065,2065,'staticobjects/tables/floor_table_highelf_tavern01',0),(2066,2066,'staticobjects/tables/floor_table_highelf_tavern02',0),(2067,2067,'staticobjects/tables/floor_table_ogre_rock',0),(2068,2068,'staticobjects/tables/floor_table_troll_small',0),(2069,2069,'staticobjects/tables/floor_table_woodelf_hood',0),(2070,2070,'staticobjects/blacksmith/wall_wallchain_dwarf_forge',0),(2071,2071,'staticobjects/key/key_oversized',0),(2072,2072,'staticobjects/lighting/floor_lantern_dwarf_oil',0),(2073,2073,'staticobjects/containers/floor_bucket_barbarian_wood',0),(2074,2074,'staticobjects/containers/floor_bucket_dwarf_wood',0),(2075,2075,'staticobjects/containers/floor_pod_barbarian_iron',0),(2076,2076,'staticobjects/containers/floor_vase_froglok_clay',0),(2077,2077,'staticobjects/containers/floor_vase_halfelf_clay01',0),(2078,2078,'staticobjects/containers/floor_vase_halfelf_clay02',0),(2079,2079,'staticobjects/containers/floor_vase_halfelf_clay03',0),(2080,2080,'staticobjects/lighting/floor_floorlamp_human_candle',0),(2081,2081,'staticobjects/light_sources_player_housing_only/ceiling_chandelier_darkelf_candle',0),(2082,2082,'staticobjects/light_sources_player_housing_only/floor_brazier_human_military',0),(2083,2083,'staticobjects/light_sources_player_housing_only/floor_floorlamp_human_candle',0),(2084,2084,'staticobjects/light_sources_player_housing_only/halfling_candle_log01',0),(2085,2085,'staticobjects/light_sources_player_housing_only/halfling_lantern01_handledown',0),(2086,2086,'staticobjects/light_sources_player_housing_only/halfling_wall_light01_single',0),(2087,2087,'staticobjects/light_sources_player_housing_only/halfling_wall_light02_metal',0),(2088,2088,'staticobjects/light_sources_player_housing_only/halfling_wall_light02_wood',0),(2089,2089,'staticobjects/light_sources_player_housing_only/orc_candle_01',0),(2090,2090,'staticobjects/light_sources_player_housing_only/qst_galintos_candelabra_1',0),(2091,2091,'staticobjects/light_sources_player_housing_only/troll_candle_01',0),(2092,2092,'staticobjects/musical/floor_drum_halfling_wood',0),(2093,2093,'accessories/wearable_items/_exp08/robe_elemental/air/head_collar',1096),(2094,2094,'staticobjects/tables/floor_table_barbarian_wood',0),(2095,2095,'staticobjects/tables/floor_table_halfling_wood',0),(2096,2096,'staticobjects/beds/floor_bed_human_ornate',0),(2097,2097,'staticobjects/beds/floor_bed_human_ornate01',0),(2098,2098,'staticobjects/chairs/floor_chair_human_ornate01',0),(2099,2099,'staticobjects/chairs/floor_chair_human_ornate02',0),(2100,2100,'staticobjects/chairs/floor_chair_kerra_wood',0),(2101,2101,'staticobjects/chests/floor_chest_iksar_skulls',0),(2102,2102,'staticobjects/chests/floor_chest_ratonga_wood',0),(2103,2103,'staticobjects/containers/floor_bucket_froglok_wood',0),(2104,2104,'staticobjects/containers/floor_vase_erudite_marble',0),(2105,2105,'staticobjects/dressers/floor_dresser_kerra_wood',0),(2106,2106,'staticobjects/dressers/floor_dresser_ratonga_wood',0),(2107,2107,'staticobjects/kegs/floor_keg_ratonga_small',0),(2108,2108,'staticobjects/kitchen/floor_stove_human_iron',0),(2109,2109,'staticobjects/lighting/floor_floorlamp_kerra_ornate',0),(2110,2110,'staticobjects/lighting/floor_lamp_erudite_plain',0),(2111,2111,'staticobjects/mounts/wall_mount_iksar_boarhead',0),(2112,2112,'staticobjects/posts/floor_post_iksar_skull',0),(2113,2113,'staticobjects/shelves/wall_shelf_froglok_ironwood',0),(2114,2114,'staticobjects/tables/floor_table_human_ornate01',0),(2115,2115,'staticobjects/tables/floor_table_human_ornate02',0),(2116,2116,'staticobjects/urns/floor_urn_erudite_brazier',0),(2117,2117,'staticobjects/beds/floor_bed_human_bunks',0),(2118,2118,'staticobjects/beds/floor_bed_human_double',0),(2119,2119,'staticobjects/beds/floor_bed_human_double01',0),(2120,2120,'staticobjects/beds/floor_bed_human_king',0),(2121,2121,'staticobjects/beds/floor_bed_human_king01',0),(2122,2122,'staticobjects/beds/floor_bed_human_single',0),(2123,2123,'staticobjects/beds/floor_bed_human_single01',0),(2124,2124,'staticobjects/benches/floor_bench_human_ornate01',0),(2125,2125,'staticobjects/benches/floor_bench_human_ornate02',0),(2126,2126,'staticobjects/bookcases/floor_bookcase_human_ornate01',0),(2127,2127,'staticobjects/bookcases/floor_bookcase_human_ornate02',0),(2128,2128,'staticobjects/bookcases/floor_bookcase_human_plain01',0),(2129,2129,'staticobjects/bookcases/floor_bookcase_human_stone',0),(2130,2130,'staticobjects/bookcases/floor_bookcase_human_stone01',0),(2131,2131,'staticobjects/chairs/floor_chair_human_fancy01',0),(2132,2132,'staticobjects/chairs/floor_chair_human_fancy02',0),(2133,2133,'staticobjects/chairs/floor_chair_human_fancy03',0),(2134,2134,'staticobjects/chairs/floor_chair_human_ornate03',0),(2135,2135,'staticobjects/chairs/floor_chair_human_ornate04',0),(2136,2136,'staticobjects/chairs/floor_chair_human_wood01',0),(2137,2137,'staticobjects/chairs/floor_chair_human_wood02',0),(2138,2138,'staticobjects/chairs/floor_chair_human_wood03',0),(2139,2139,'staticobjects/chairs/floor_chair_human_wood04',0),(2140,2140,'staticobjects/chairs/floor_stool_human_military01',0),(2141,2141,'staticobjects/chairs/floor_stool_human_ornate01',0),(2142,2142,'staticobjects/chairs/floor_stool_human_wood01',0),(2143,2143,'staticobjects/chests/floor_chest_human_wood01',0),(2144,2144,'staticobjects/containers/floor_vase_human_marble01',0),(2145,2145,'staticobjects/containers/floor_vase_human_ornate01',0),(2146,2146,'staticobjects/containers/floor_vase_human_ornate02',0),(2147,2147,'staticobjects/counters/floor_counter_human_corner01',0),(2148,2148,'staticobjects/counters/floor_counter_human_round01',0),(2149,2149,'staticobjects/dressers/floor_dresser_human_ornate01',0),(2150,2150,'staticobjects/dressers/floor_dresser_human_plain01',0),(2151,2151,'staticobjects/lighting/ceiling_ceilinglamp_any_fancy',0),(2152,2152,'staticobjects/lighting/floor_floorlamp_human_ornate01',0),(2153,2153,'staticobjects/lighting/floor_floorlamp_human_ornate02',0),(2154,2154,'staticobjects/lighting/floor_floorlamp_human_ornate03',0),(2155,2155,'staticobjects/lighting/floor_floorlamp_human_stone01',0),(2156,2156,'staticobjects/lighting/floor_tablelamp_human_ornate01',0),(2157,2157,'staticobjects/lighting/floor_tablelamp_human_plain01',0),(2158,2158,'staticobjects/lighting/floor_tablelamp_human_plain02',0),(2159,2159,'staticobjects/musical/fprt_music_bonechimes001',0),(2160,2160,'staticobjects/musical/fprt_music_bonexylophone001',0),(2161,2161,'staticobjects/musical/fprt_music_drum001',0),(2162,2162,'staticobjects/musical/fprt_music_harp001',0),(2163,2163,'staticobjects/musical/fprt_music_mandolin001',0),(2164,2164,'staticobjects/shelves/wall_shelf_human_double01',0),(2165,2165,'staticobjects/shelves/wall_shelf_human_double02',0),(2166,2166,'staticobjects/shelves/wall_shelf_human_double03',0),(2167,2167,'staticobjects/shelves/wall_shelf_human_military01',0),(2168,2168,'staticobjects/shelves/wall_shelf_human_ornate01',0),(2169,2169,'staticobjects/tables/floor_endtable_human_ornate',0),(2170,2170,'staticobjects/tables/floor_endtable_human_plain',0),(2171,2171,'staticobjects/tables/floor_table_human_bedside01',0),(2172,2172,'staticobjects/tables/floor_table_human_bedside02',0),(2173,2173,'staticobjects/tables/floor_table_human_butcherblock',0),(2174,2174,'staticobjects/tables/floor_table_human_circular01',0),(2175,2175,'staticobjects/tables/floor_table_human_circular02',0),(2176,2176,'staticobjects/tables/floor_table_human_desk01',0),(2177,2177,'staticobjects/tables/floor_table_human_desk02',0),(2178,2178,'staticobjects/tables/floor_table_human_ornate03',0),(2179,2179,'staticobjects/tables/floor_table_human_ornate04',0),(2180,2180,'staticobjects/tables/floor_table_human_oval01',0),(2181,2181,'staticobjects/tables/floor_table_human_plain04',0),(2182,2182,'staticobjects/urns/floor_urn_human_ornate01',0),(2183,2183,'staticobjects/urns/floor_urn_human_plain01',0),(2184,2184,'staticobjects/urns/floor_urn_human_plain02',0),(2185,2185,'staticobjects/archery/archery_target',0),(2186,2186,'staticobjects/chairs/floor_stool_any_simple01',0),(2187,2187,'staticobjects/chests/floor_chest_barbarian_ornate01',0),(2188,2188,'staticobjects/containers/floor_bucket_any_handle01',0),(2189,2189,'staticobjects/counters/floor_counter_any_generic01',0),(2190,2190,'staticobjects/pictures/wall_painting_human_billportrait',0),(2191,2191,'staticobjects/pictures/wall_painting_human_brickbuilding',0),(2192,2192,'staticobjects/pictures/wall_painting_human_castle',0),(2193,2193,'staticobjects/pictures/wall_painting_human_cathedral',0),(2194,2194,'staticobjects/pictures/wall_painting_human_claymore',0),(2195,2195,'staticobjects/pictures/wall_painting_human_cliffs',0),(2196,2196,'staticobjects/pictures/wall_painting_human_hillbuilding',0),(2197,2197,'staticobjects/pictures/wall_painting_human_horseknight',0),(2198,2198,'staticobjects/pictures/wall_painting_human_knight',0),(2199,2199,'staticobjects/pictures/wall_painting_human_qeynoscastle',0),(2200,2200,'staticobjects/pictures/wall_painting_human_stonebuilding01',0),(2201,2201,'staticobjects/pictures/wall_painting_human_stonebuilding02',0),(2202,2202,'staticobjects/pictures/wall_painting_human_sun',0),(2203,2203,'staticobjects/pictures/wall_painting_human_trees',0),(2204,2204,'staticobjects/relics/floor_orb_erudite_warding01',0),(2205,2205,'staticobjects/rugs/floor_rug_kerra_ornate01',0),(2206,2206,'staticobjects/rugs/floor_rug_kerra_ornate02',0),(2207,2207,'staticobjects/tables/floor_table_any_bedside01',0),(2208,2208,'staticobjects/tables/floor_table_any_coffee01',0),(2209,2209,'staticobjects/carts/damaged_wood_cart',0),(2210,2210,'staticobjects/rocks/steppes_flatrock',0),(2211,2211,'staticobjects/shelves/wall_shelf_human_hook',0),(2212,2212,'staticobjects/tools/shovel_steppes',0),(2213,2213,'accessories/wieldable_items/weapons/dagger/dagger/dagger001_ornate',0),(2214,2214,'accessories/wieldable_items/weapons/dagger/dagger/dagger001_plain',0),(2215,2215,'accessories/wieldable_items/weapons/dagger/dagger/dagger001_runic',0),(2216,2216,'accessories/wieldable_items/weapons/dagger/dirk/dirk001_plain',0),(2217,2217,'accessories/wieldable_items/weapons/dagger/stiletto/stiletto001_rusty',0),(2218,2218,'accessories/wieldable_items/weapons/dagger/stiletto/stiletto002_runic',0),(2219,2219,'accessories/wieldable_items/weapons/great_axe/bardiche/bardiche02_ornate',0),(2220,2220,'accessories/wieldable_items/weapons/great_axe/executioner_axe/executioner_axe003_runic',0),(2221,2221,'accessories/wieldable_items/weapons/great_axe/halberd/halberd003_plain',0),(2222,2222,'staticobjects/fires/qey_adv04_stumpcut01',0),(2223,2223,'staticobjects/statues/goblin_totem',0),(2224,2224,'accessories/wearable_items/chain/common/low/skirt',0),(2225,2225,'accessories/wieldable_items/weapons/dagger/dagger/dagger002_rusty',0),(2226,2226,'accessories/wieldable_items/weapons/dagger/dirk/dirk002_runic',0),(2227,2227,'accessories/wieldable_items/weapons/great_axe/assault_axe/assault_axe001_ornate',0),(2228,2228,'accessories/wieldable_items/weapons/great_axe/assault_axe/assault_axe002_plain',0),(2229,2229,'accessories/wieldable_items/weapons/great_axe/bardiche/bardiche01_runic',0),(2230,2230,'accessories/wieldable_items/weapons/great_axe/bardiche/bardiche03_rusty',0),(2231,2231,'accessories/wieldable_items/weapons/great_axe/military_pick/military_pick002_ornate',0),(2232,2232,'accessories/wearable_items/vanguard/common/low/skirt',0),(2233,2233,'accessories/wearable_items/vanguard/rare/low/skirt',0),(2234,2234,'accessories/wearable_items/_exp08/robe_elemental/air/left_shoulder_effect',1096),(2235,2235,'accessories/wearable_items/_exp08/robe_elemental/air/pants',1096),(2236,2236,'accessories/wieldable_items/weapons/great_axe/executioner_axe/executioner_axe001_plain',0),(2237,2237,'accessories/wieldable_items/weapons/great_axe/executioner_axe/executioner_axe001_rusty',0),(2238,2238,'accessories/wieldable_items/weapons/great_axe/halberd/halberd001_runic',0),(2239,2239,'accessories/wieldable_items/weapons/great_axe/halberd/halberd002_rusty',0),(2240,2240,'accessories/wieldable_items/weapons/great_axe/military_pick/military_pick001_rusty',0),(2241,2241,'staticobjects/banners/centaur_banner_steppes',0),(2242,2242,'staticobjects/carts/damaged_wood_cart_2',0),(2243,2243,'staticobjects/carts/wood_cart',0),(2244,2244,'staticobjects/eig/eig_harvest_location',0),(2245,2245,'staticobjects/freeport/fprt_citizenship_sign',0),(2246,2246,'staticobjects/qeynos/clear_appearance_plane',0),(2247,2247,'accessories/wearable_items/_exp08/robe_elemental/air/right_shoulder_effect',1096),(2248,2248,'accessories/wieldable_items/weapons/axe/hand_axe/hand_axe001_ornate',0),(2249,2249,'accessories/wieldable_items/weapons/axe/hand_axe/hand_axe001_plain',0),(2250,2250,'accessories/wieldable_items/weapons/axe/hatchet/hatchet001_ornate',0),(2251,2251,'accessories/wieldable_items/weapons/axe/hatchet/hatchet001_plain',0),(2252,2252,'accessories/wieldable_items/weapons/axe/hatchet/hatchet002_runic',0),(2253,2253,'accessories/wieldable_items/weapons/axe/hatchet/hatchet002_rusty',0),(2254,2254,'accessories/wieldable_items/weapons/great_sword/flamberge/flamberge001_runic',0),(2255,2255,'accessories/wieldable_items/weapons/great_sword/flamberge/flamberge002_ornate',0),(2256,2256,'accessories/wieldable_items/weapons/great_sword/tulwar/tulwar001_ornate',0),(2257,2257,'accessories/wieldable_items/weapons/great_sword/tulwar/tulwar001_plain',0),(2258,2258,'accessories/wieldable_items/weapons/sword/long_sword/long_sword001_runic',0),(2259,2259,'accessories/wieldable_items/weapons/sword/long_sword/long_sword002_ornate',0),(2260,2260,'accessories/wieldable_items/weapons/sword/scimitar/scimitar001_runic',0),(2261,2261,'accessories/wieldable_items/weapons/sword/scimitar/scimitar002_plain',0),(2262,2262,'accessories/wieldable_items/weapons/sword/short_sword/short_sword001_runic',0),(2263,2263,'accessories/wieldable_items/weapons/sword/short_sword/short_sword002_plain',0),(2264,2264,'accessories/wieldable_items/weapons/sword/short_sword/short_sword002_rusty',0),(2265,2265,'staticobjects/rocks/rubble_chunks',0),(2266,2266,'accessories/wieldable_items/weapons/axe/hand_axe/hand_axe001_runic',0),(2267,2267,'accessories/wieldable_items/weapons/axe/hand_axe/hand_axe002_rusty',0),(2268,2268,'accessories/wieldable_items/weapons/fist/cestus/spiked_cestus001_plain',0),(2269,2269,'accessories/wearable_items/vanguard/common/high/skirt',0),(2270,2270,'accessories/wearable_items/vanguard/common/medium/skirt',0),(2271,2271,'accessories/wearable_items/vanguard/uncommon/high/skirt',0),(2272,2272,'accessories/wearable_items/vanguard/uncommon/low/skirt',0),(2273,2273,'accessories/wearable_items/vanguard/uncommon/medium/skirt',0),(2274,2274,'accessories/wieldable_items/weapons/fist/claws/claws001_plain',0),(2275,2275,'accessories/wieldable_items/weapons/fist/katar/katar001_plain',0),(2276,2276,'_exp07/zones/exp07_dun_drunder/dpo_tallon_pedestal',1096),(2277,2277,'_exp07/zones/exp07_dun_drunder/dpo_tallon_pedestal_w_bow',1096),(2278,2278,'accessories/wieldable_items/weapons/great_sword/greatsword/greatsword001_ornate',0),(2279,2279,'accessories/wieldable_items/weapons/great_sword/greatsword/greatsword002_runic',0),(2280,2280,'accessories/wieldable_items/weapons/sword/spatha_sword/spatha_sword001_ornate',0),(2281,2281,'accessories/wieldable_items/weapons/sword/spatha_sword/spatha_sword002_plain',0),(2282,2282,'accessories/wieldable_items/weapons/sword/spatha_sword/spatha_sword002_rusty',0),(2283,2283,'staticobjects/mushroom/mushroom_small',0),(2284,2284,'accessories/wieldable_items/weapons/fist/cestus/spiked_cestus002_ornate',0),(2285,2285,'accessories/wieldable_items/weapons/fist/cestus/spiked_cestus002_runic',0),(2286,2286,'accessories/wieldable_items/weapons/hammer/cudgel/cudgel001_plain',0),(2287,2287,'accessories/wieldable_items/weapons/hammer/cudgel/cudgel002_rusty',0),(2288,2288,'accessories/wieldable_items/weapons/fist/katar/katar002_runic',0),(2289,2289,'accessories/wieldable_items/weapons/great_spear/trident/trident001_plain',0),(2290,2290,'accessories/wieldable_items/weapons/spear/javelin/javeling001_plain',0),(2291,2291,'accessories/wieldable_items/weapons/spear/spear/spear001_ornate',0),(2292,2292,'accessories/wieldable_items/weapons/spear/spear/spear001_plain',0),(2293,2293,'staticobjects/tents/nektulos_small_red01',0),(2294,2294,'accessories/wieldable_items/weapons/axe/waraxe/waraxe001_ornate',0),(2295,2295,'accessories/wieldable_items/weapons/axe/waraxe/waraxe001_plain',0),(2296,2296,'accessories/wieldable_items/weapons/axe/waraxe/waraxe001_rusty',0),(2297,2297,'accessories/wieldable_items/weapons/axe/waraxe/waraxe002_runic',0),(2298,2298,'accessories/wieldable_items/weapons/great_hammer/maul/maul001_plain',0),(2299,2299,'accessories/wieldable_items/weapons/great_hammer/maul/maul002_runic',0),(2300,2300,'accessories/wieldable_items/weapons/great_spear/great_spear/great_spear001_plain',0),(2301,2301,'accessories/wieldable_items/weapons/great_spear/trident/trident002_runic',0),(2302,2302,'accessories/wieldable_items/weapons/spear/leaf_blade/leaf_blade001_plain',0),(2303,2303,'accessories/wieldable_items/weapons/spear/leaf_blade/leaf_blade001_rusty',0),(2304,2304,'accessories/wieldable_items/weapons/spear/short_spear/short_spear001_plain',0),(2305,2305,'accessories/wieldable_items/weapons/sword/falchion_sword/falchion_sword001_plain',0),(2306,2306,'staticobjects/dpo_invisible_cube/dpo_invisible_cube',0),(2307,2307,'accessories/wearable_items/tradesman/clothing/plainbluelacey/shoulders',0),(2308,2308,'accessories/wearable_items/tradesman/clothing/plainbluelacey/chest',0),(2309,2309,'accessories/wearable_items/tradesman/clothing/plainbluelacey/legs',0),(2310,2310,'accessories/wieldable_items/weapons/axe/cresent_axe/cresent_axe001_plain',0),(2311,2311,'accessories/wieldable_items/weapons/axe/cresent_axe/cresent_axe001_runic',0),(2312,2312,'accessories/wieldable_items/weapons/axe/cresent_axe/cresent_axe001_rusty',0),(2313,2313,'accessories/wieldable_items/weapons/axe/cresent_axe/cresent_axe002_ornate',0),(2314,2314,'accessories/wieldable_items/weapons/axe/battleaxe/battleaxe001_good',0),(2315,2315,'accessories/wieldable_items/weapons/axe/battleaxe/battleaxe001_ornate',0),(2316,2316,'accessories/wieldable_items/weapons/axe/battleaxe/battleaxe001_plain',0),(2317,2317,'accessories/wieldable_items/weapons/axe/battleaxe/battleaxe001_runic',0),(2318,2318,'accessories/wieldable_items/weapons/axe/battleaxe/battleaxe002_evil',0),(2319,2319,'accessories/wieldable_items/weapons/axe/battleaxe/battleaxe002_rusty',0),(2320,2320,'accessories/wieldable_items/weapons/hammer/battlehammer/battlehammer001_runic',0),(2321,2321,'accessories/wieldable_items/weapons/hammer/battlehammer/battlehammer002_rusty',0),(2322,2322,'accessories/wieldable_items/weapons/hammer/mace/mace01_runic',0),(2323,2323,'accessories/wieldable_items/weapons/hammer/mace/mace02_plain',0),(2324,2324,'accessories/wieldable_items/weapons/hammer/mace/mace02_rusty',0),(2325,2325,'accessories/wieldable_items/weapons/hammer/mace/mace03_ornate',0),(2326,2326,'staticobjects/tableware/floor_mug_any_dirty',0),(2327,2327,'_exp07/zones/exp07_dun_drunder/dpo_vallon_pedestal',1096),(2328,2328,'staticobjects/lab/floor_flask_iksar_lab',0),(2329,2329,'staticobjects/artisan/floor_easel_human_wooden01',0),(2330,2330,'accessories/wearable_items/tradesman/clothing/ornateshinygold/chest',0),(2331,2331,'accessories/wearable_items/tradesman/clothing/ornateshinygold/legs',0),(2332,2332,'accessories/wearable_items/tradesman/clothing/ornateshinygold/shoulders',0),(2333,2333,'accessories/wieldable_items/weapons/axe/tomahawk/tomahawk001_plain',0),(2334,2334,'accessories/wieldable_items/weapons/axe/tomahawk/tomahawk002_ornate',0),(2335,2335,'creatures/monsters/seagull',0),(2336,2336,'creatures/monsters/sheep',0),(2337,2337,'staticobjects/catapult/catapult_broken',0),(2338,2338,'staticobjects/world_devices/trdskl_fprt_chemistrytable01',0),(2339,2339,'staticobjects/world_devices/trdskl_fprt_engraveddesk01',0),(2340,2340,'staticobjects/world_devices/trdskl_fprt_stoveandkeg01',0),(2341,2341,'staticobjects/world_devices/trdskl_fprt_woodworkingtable01',0),(2342,2342,'staticobjects/world_devices/trdskl_fprt_workbench01',0),(2343,2343,'staticobjects/world_devices/trdskl_qey_chemistrytable01',0),(2344,2344,'staticobjects/world_devices/trdskl_qey_engraveddesk01',0),(2345,2345,'staticobjects/world_devices/trdskl_qey_stoveandkeg01',0),(2346,2346,'staticobjects/world_devices/trdskl_qey_woodworkingtable01',0),(2347,2347,'accessories/wieldable_items/weapons/dagger/parrying_blade/parrying_blade001_plain',0),(2348,2348,'accessories/wieldable_items/weapons/dagger/parrying_blade/parrying_blade002_runic',0),(2349,2349,'accessories/wieldable_items/weapons/dagger/sai/sai001_plain',0),(2350,2350,'accessories/wieldable_items/weapons/rapier/cutlass/cutlass001_runic',0),(2351,2351,'accessories/wieldable_items/weapons/rapier/epee/epee001_runic',0),(2352,2352,'accessories/wieldable_items/weapons/rapier/foil/foil001_ornate',0),(2353,2353,'accessories/wieldable_items/weapons/rapier/karabela/karabela001_runic',0),(2354,2354,'accessories/wieldable_items/weapons/rapier/saber/saber001_runic',0),(2355,2355,'accessories/wieldable_items/weapons/staff/scorcerers_staff/scorcerers_staff001_ornate',0),(2356,2356,'accessories/wieldable_items/weapons/staff/scorcerers_staff/scorcerers_staff002_runic',0),(2357,2357,'accessories/wieldable_items/weapons/throwing_weapons/throwing_hammer/throwing_hammer001_runic',0),(2358,2358,'creatures/monsters/hawk_redtail',0),(2359,2359,'creatures/pets/diseases_servant',0),(2360,2360,'creatures/pets/elemental_fire',0),(2361,2361,'creatures/pets/factor_earth',0),(2362,2362,'creatures/pets/factor_fire',0),(2363,2363,'creatures/pets/form_earth',0),(2364,2364,'creatures/pets/horse',0),(2365,2365,'creatures/pets/icebone_skeleton',0),(2366,2366,'staticobjects/bones/bones_weapons',0),(2367,2367,'staticobjects/bones/bones_weapons_1',0),(2368,2368,'staticobjects/bones/bone_collection_large',0),(2369,2369,'staticobjects/bones/jumbled_bones08',0),(2370,2370,'staticobjects/bones/speared_skeleton',0),(2371,2371,'staticobjects/carcase/barnyard_dead_dog',0),(2372,2372,'staticobjects/carcase/horse_carcase',0),(2373,2373,'staticobjects/catapult/orc_batteringram',0),(2374,2374,'staticobjects/catapult/orc_siegetower',0),(2375,2375,'staticobjects/catapult/orc_siegetower_damaged',0),(2376,2376,'staticobjects/dervish/dervish_outhouse_1',0),(2377,2377,'staticobjects/gravestones/spreadtombs_1',0),(2378,2378,'staticobjects/rocks/rock_formation',0),(2379,2379,'staticobjects/tents/orc_tent_large',0),(2380,2380,'staticobjects/tree/barricade_corner_left',0),(2381,2381,'staticobjects/tree/log_dead',0),(2382,2382,'staticobjects/tree/tree_savanah_dry',0),(2383,2383,'staticobjects/tree/trunk_tree_dead',0),(2384,2384,'accessories/wieldable_items/weapons/dagger/kris/kris001_runic',0),(2385,2385,'accessories/wieldable_items/weapons/great_spear/pike/pike001_plain',0),(2386,2386,'accessories/wieldable_items/weapons/great_spear/pike/pike001_runic',0),(2387,2387,'accessories/wieldable_items/weapons/great_spear/voulge/voulge001_ornate',0),(2388,2388,'accessories/wieldable_items/weapons/spear/ornate_spear/ornate_spear001_ornate',0),(2389,2389,'creatures/monsters/dragonfly',0),(2390,2390,'creatures/pets/elemental_water',0),(2391,2391,'creatures/pets/essence_water',0),(2392,2392,'creatures/pets/factor_water',0),(2393,2393,'creatures/pets/form_fire',0),(2394,2394,'creatures/pets/form_water',0),(2395,2395,'staticobjects/blacksmith/df_armorhook01',0),(2396,2396,'accessories/wieldable_items/weapons/spear/tribal_spear/tribal_spear001_plain',0),(2397,2397,'creatures/monsters/turkey',0),(2398,2398,'projectiles/spell_spiral',0),(2399,2399,'staticobjects/nest',0),(2400,2400,'staticobjects/nests/nest',0),(2401,2401,'staticobjects/rubble/ratpile',0),(2402,2402,'accessories/wearable_items/vanguard/rare/medium/skirt',0),(2403,2403,'accessories/wieldable_items/weapons/great_sword/bastard_sword/bastard_sword001_plain',0),(2404,2404,'accessories/wieldable_items/weapons/great_sword/bastard_sword/bastard_sword001_runic',0),(2405,2405,'accessories/wieldable_items/weapons/great_sword/bastard_sword/bastard_sword002_ornate',0),(2406,2406,'accessories/wieldable_items/weapons/great_sword/broad_sword/broad_sword001_ornate',0),(2407,2407,'accessories/wieldable_items/weapons/great_sword/broad_sword/broad_sword001_plain',0),(2408,2408,'accessories/wieldable_items/weapons/great_sword/broad_sword/broad_sword002_runic',0),(2409,2409,'accessories/wieldable_items/weapons/great_sword/broad_sword/broad_sword002_rusty',0),(2410,2410,'accessories/wieldable_items/weapons/rapier/rapier/rapier001_ornate',0),(2411,2411,'creatures/monsters/rumbler_coal',0),(2412,2412,'creatures/monsters/rumbler_rocky',0),(2413,2413,'creatures/monsters/rumbler_slimey',0),(2414,2414,'creatures/monsters/stagg',0),(2415,2415,'creatures/monsters/tiger',0),(2416,2416,'creatures/pets/elemental_air',0),(2417,2417,'staticobjects/gears/gears_table00',0),(2418,2418,'accessories/wearable_items/magus/robes/fancy_goldburgundy/chest',0),(2419,2419,'accessories/wearable_items/magus/robes/fancy_goldburgundy/hood',0),(2420,2420,'accessories/wearable_items/magus/robes/fancy_goldburgundy/pants',0),(2421,2421,'accessories/wearable_items/magus/robes/fancy_goldburgundy/skirt',0),(2422,2422,'accessories/wieldable_items/weapons/staff/bo_staff/bo_staff001_plain',0),(2423,2423,'accessories/wieldable_items/weapons/staff/bo_staff/bo_staff002_ornate',0),(2424,2424,'accessories/wieldable_items/weapons/staff/fighting_batons/fighting_batons001_runic',0),(2425,2425,'accessories/wieldable_items/weapons/staff/great_staff/great_staff001_runic',0),(2426,2426,'accessories/wieldable_items/weapons/staff/great_staff/great_staff002_plain',0),(2427,2427,'accessories/wieldable_items/weapons/staff/metal_rod/metal_rod001_runic',0),(2428,2428,'accessories/wieldable_items/weapons/staff/quarterstaff/quarterstaff001_runic',0),(2429,2429,'projectiles/spell_shriek',0),(2430,2430,'staticobjects/bones/bone_pile',0),(2431,2431,'staticobjects/bones/seated_skeleton',0),(2432,2432,'staticobjects/bones/skull_single',0),(2433,2433,'staticobjects/containers/mugs_and_plates',0),(2434,2434,'staticobjects/pictures/halfling_blueprint',0),(2435,2435,'staticobjects/plants/stump01',0),(2436,2436,'staticobjects/plants/weeds01',0),(2437,2437,'staticobjects/plants/weeds02',0),(2438,2438,'staticobjects/smoking_utensils/waterpipe',0),(2439,2439,'_exp07/zones/exp07_dun_drunder/dpo_vallon_pedestal_w_scimitar',1096),(2440,2440,'accessories/wieldable_items/weapons/exp07/talisman/book_caged_monster_undead_fx',1096),(2441,2441,'accessories/wieldable_items/shields/buckler_shield/metal_buckler/metal_buckler001_ornate',0),(2442,2442,'accessories/wieldable_items/shields/buckler_shield/streatched_leather_buckler/streatched_leather_buckler001_plain',0),(2443,2443,'accessories/wieldable_items/shields/buckler_shield/wooden_buckler/wooden_buckler001_plain',0),(2444,2444,'accessories/wieldable_items/weapons/exp07/talisman/book_songbook_fx',1096),(2445,2445,'accessories/wieldable_items/shields/round_shield/metal_etched_round/round_shield_etched001_plain',0),(2446,2446,'accessories/wieldable_items/shields/round_shield/wooden_round/wooden_round_shield001_plain',0),(2447,2447,'accessories/wieldable_items/shields/tower_shield/tower_shield_freeport/tower_shield_freeport001',0),(2448,2448,'accessories/wieldable_items/shields/tower_shield/tower_shield_qeynos/tower_shield_qeynos001',0),(2449,2449,'accessories/wieldable_items/weapons/axe/tomahawk/tomahawk001_rusty',0),(2450,2450,'accessories/wieldable_items/weapons/axe/tomahawk/tomahawk002_runic',0),(2451,2451,'staticobjects/dpo_invisible_cube/cage_collision',0),(2452,2452,'accessories/wieldable_items/shields/buckler_shield/metal_buckler/metal_buckler001_plain',0),(2453,2453,'accessories/wieldable_items/shields/kite_shield/wooden_kite/wooden_kite_shield001_ornate',0),(2454,2454,'accessories/wieldable_items/shields/round_shield/metal_round/metal_round_shield001_plain',0),(2455,2455,'accessories/wieldable_items/shields/round_shield/wooden_round/wooden_round_shield001_runic',0),(2456,2456,'creatures/monsters/cow_bell',0),(2457,2457,'staticobjects/musical/plain_flute',1096),(2458,2458,'accessories/wieldable_items/shields/kite_shield/kite_shield_freeport/kite_shield_freeport001',0),(2459,2459,'accessories/wieldable_items/shields/kite_shield/kite_shield_qeynos/kite_shield_qeynos001',0),(2460,2460,'accessories/wieldable_items/shields/kite_shield/metal_kite/metal_kite_shield001_ornate',0),(2461,2461,'accessories/wieldable_items/shields/tower_shield/wooden_tower_shield/wooden_tower_shield001_ornate',0),(2462,2462,'creatures/pets/elemental_earth',0),(2463,2463,'creatures/pets/essence_earth',0),(2464,2464,'accessories/wieldable_items/shields/tower_shield/metal_tower_shield/metal_tower_shield001_ornate',0),(2465,2465,'accessories/wieldable_items/weapons/great_axe/military_pick/military_pick002_runic',0),(2466,2466,'accessories/wieldable_items/weapons/great_axe/military_pick/military_pick001_plain',0),(2467,2467,'staticobjects/tents/gnoll_tent',0),(2468,2468,'staticobjects/liveevent/guides/guide_drum',1096),(2469,2469,'projectiles/arrow_simple_plain',0),(2470,2470,'projectiles/spell_blue_star',0),(2471,2471,'accessories/wearable_items/chain/plain/low/chest',0),(2472,2472,'accessories/wearable_items/chain/plain/low/feet',0),(2473,2473,'accessories/wearable_items/chain/plain/low/forearms',0),(2474,2474,'accessories/wearable_items/chain/plain/low/hands',0),(2475,2475,'accessories/wearable_items/chain/plain/low/head',0),(2476,2476,'accessories/wearable_items/chain/plain/low/legs',0),(2477,2477,'accessories/wearable_items/chain/plain/low/shoulders',0),(2478,2478,'accessories/wearable_items/chain/plain/low/skirt',0),(2479,2479,'accessories/wieldable_items/tools/alchemist/beaker',0),(2480,2480,'accessories/wieldable_items/tools/alchemist/testtube',0),(2481,2481,'accessories/wieldable_items/tools/cook/pot',0),(2482,2482,'accessories/wieldable_items/tools/cook/spoon',0),(2483,2483,'accessories/wieldable_items/tools/jeweler/gem',0),(2484,2484,'accessories/wieldable_items/tools/jeweler/magnifying_glass',0),(2485,2485,'accessories/wieldable_items/tools/smith/hammer',0),(2486,2486,'accessories/wieldable_items/tools/smith/tongs_wmetal',0),(2487,2487,'accessories/wieldable_items/tools/tailor/cloth',0),(2488,2488,'accessories/wieldable_items/tools/tailor/needle',0),(2489,2489,'accessories/wieldable_items/tools/woodworker/saw',0),(2490,2490,'accessories/wieldable_items/tools/woodworker/wood',0),(2491,2491,'staticobjects/liveevent/tinkerfest/dpo_tinkerfest_distillery_pipe_single',1096),(2492,2492,'staticobjects/_exp07/othmir/othmir_firepit02',1096),(2493,2493,'staticobjects/_exp07/othmir/othmir_firepit01',1096),(2494,2494,'staticobjects/halloween/ark01_broken',1096),(2495,2495,'staticobjects/halloween/bef_asylum_lamp_swinging01',1096),(2496,2496,'staticobjects/halloween/bef_cave_torch_light01',1096),(2497,2497,'staticobjects/halloween/bef_claypot01_tall_broken01',1096),(2498,2498,'staticobjects/halloween/fprt_ext_tombstonee001',1096),(2499,2499,'staticobjects/halloween/fprt_ext_tombstoneg001',1096),(2500,2500,'staticobjects/flying_mount_platform/antonica',0),(2501,2501,'staticobjects/rubble/rubble_pile01',0),(2502,2502,'staticobjects/halloween/halfing_display_traps01',1096),(2503,2503,'staticobjects/halloween/holiday_skull_candy_dispenser_01',1096),(2504,2504,'staticobjects/halloween/lp_lightsource_somborn_double_post01',1096),(2505,2505,'staticobjects/halloween/oblost_pot01_brkn_w_organs',1096),(2506,2506,'accessories/wieldable_items/tools/tailor/tanning_cloth',0),(2507,2507,'accessories/wearable_items/tradesman/clothing/plain_brown_female/chest',0),(2508,2508,'accessories/wearable_items/tradesman/clothing/plain_brown_female/legs',0),(2509,2509,'accessories/wieldable_items/shields/round_shield/metal_round/metal_round_shield001_rusty',0),(2510,2510,'staticobjects/halloween/oth_bones_wall_04',1096),(2511,2511,'staticobjects/halloween/pf_haypile01',1096),(2512,2512,'staticobjects/doorways/qey_tradeskill_entrance01',0),(2513,2513,'accessories/wieldable_items/shields/tower_shield/metal_tower_shield/metal_tower_shield001_rusty',0),(2514,2514,'accessories/wieldable_items/weapons/great_axe/executioner_axe/executioner_axe002_evil',0),(2515,2515,'accessories/wieldable_items/weapons/great_hammer/great_mace/great_mace001_plain',0),(2516,2516,'accessories/wieldable_items/weapons/great_hammer/great_mace/great_mace002_rusty',0),(2517,2517,'accessories/wieldable_items/weapons/great_hammer/knotted_club/knotted_club001_plain',0),(2518,2518,'staticobjects/halloween/tfs_present02_big',1096),(2519,2519,'accessories/wieldable_items/weapons/great_hammer/maul/maul001_rusty',0),(2520,2520,'accessories/wieldable_items/weapons/great_hammer/maul/maul002_ornate',0),(2521,2521,'accessories/wieldable_items/weapons/great_hammer/war_hammer/war_hammer001_ornate',0),(2522,2522,'accessories/wieldable_items/weapons/great_hammer/war_hammer/war_hammer001_plain',0),(2523,2523,'accessories/wieldable_items/weapons/great_hammer/war_hammer/war_hammer001_runic',0),(2524,2524,'accessories/wieldable_items/weapons/great_hammer/war_hammer/war_hammer002_ornate',0),(2525,2525,'accessories/wieldable_items/weapons/great_hammer/war_hammer/war_hammer002_rusty',0),(2526,2526,'accessories/wieldable_items/weapons/great_hammer/war_hammer/war_hammer003_evil',0),(2527,2527,'accessories/wieldable_items/weapons/sword/scimitar/scimitar002_rusty',0),(2528,2528,'staticobjects/doors/qey_scribe_village06_door01',0),(2529,2529,'staticobjects/world_devices/trdskl_fprt_forge01',0),(2530,2530,'staticobjects/world_devices/trdskl_fprt_sewingtable_mannequin_loom01',0),(2531,2531,'staticobjects/world_devices/trdskl_qey_workbench01',0),(2532,2532,'accessories/wieldable_items/weapons/fist/knuckles/knuckles001_ornate',0),(2533,2533,'accessories/wieldable_items/weapons/fist/knuckles/knuckles001_plain',0),(2534,2534,'accessories/wieldable_items/weapons/fist/knuckles/knuckles001_rusty',0),(2535,2535,'accessories/wieldable_items/weapons/fist/knuckles/knuckles002_runic',0),(2536,2536,'accessories/wieldable_items/weapons/fist/knuckles/knuckles002_rusty',0),(2537,2537,'accessories/wieldable_items/weapons/great_axe/assault_axe/assault_axe002_rusty',0),(2538,2538,'accessories/wieldable_items/weapons/great_hammer/morning_star/morning_star001_rusty',0),(2539,2539,'accessories/wieldable_items/weapons/great_hammer/morning_star/morning_star002_plain',0),(2540,2540,'accessories/wieldable_items/weapons/great_hammer/morning_star/morning_star002_runic',0),(2541,2541,'accessories/wieldable_items/weapons/great_sword/claymore_sword/claymore_sword001_ornate',0),(2542,2542,'accessories/wieldable_items/weapons/great_sword/claymore_sword/claymore_sword001_plain',0),(2543,2543,'creatures/pets/hawk_ghost',0),(2544,2544,'staticobjects/scrolls/scroll01',0),(2545,2545,'staticobjects/world_devices/trdskl_qey_sewingtable_mannequin_loom01',0),(2546,2546,'accessories/wieldable_items/weapons/fist/katar/katar001_rusty',0),(2547,2547,'accessories/wieldable_items/weapons/fist/katar/katar002_ornate',0),(2548,2548,'accessories/wieldable_items/weapons/sword/falchion_sword/falchion_sword002_rusty',0),(2549,2549,'accessories/wieldable_items/weapons/throwing_weapons/throwing_axe/throwing_axe001_ornate',0),(2550,2550,'accessories/wieldable_items/weapons/throwing_weapons/throwing_axe/throwing_axe001_rusty',0),(2551,2551,'accessories/wieldable_items/weapons/throwing_weapons/throwing_axe/throwing_axe002_plain',0),(2552,2552,'accessories/wieldable_items/weapons/throwing_weapons/throwing_hammer/throwing_hammer001_ornate',0),(2553,2553,'creatures/tu/golem_ice',0),(2554,2554,'creatures/tu/siren_queen',0),(2555,2555,'creatures/tu/tentacleterror_crystal',0),(2556,2556,'projectiles/spell_electric_ball',0),(2557,2557,'staticobjects/boats/travel_boat',0),(2558,2558,'ec/pc/barbarian/barbarian_female_ghost',0),(2559,2559,'staticobjects/cages/ceiling_petcage_any_wood01',0),(2560,2560,'staticobjects/fx/icicles',0),(2561,2561,'staticobjects/artisan/floor_easel_human_canvas01',0),(2562,2562,'staticobjects/barrels/floor_barrel_any_cask01',0),(2563,2563,'staticobjects/barrels/floor_barrel_any_ornate01',0),(2564,2564,'staticobjects/barrels/floor_barrel_any_ornate02',0),(2565,2565,'staticobjects/barrels/floor_barrel_any_small01',0),(2566,2566,'staticobjects/barrels/floor_barrel_any_small02',0),(2567,2567,'staticobjects/barrels/floor_barrel_any_small03',0),(2568,2568,'staticobjects/barrels/floor_barrel_any_storage01',0),(2569,2569,'staticobjects/barrels/floor_barrel_any_storage02',0),(2570,2570,'staticobjects/barrels/floor_barrel_any_wine01',0),(2571,2571,'staticobjects/barrels/floor_barrel_elf_ornate01',0),(2572,2572,'staticobjects/beds/floor_bed_any_bunks01',0),(2573,2573,'staticobjects/beds/floor_bed_any_plain01',0),(2574,2574,'staticobjects/beds/floor_bed_any_torture01',0),(2575,2575,'staticobjects/beds/floor_bed_any_torture02',0),(2576,2576,'staticobjects/beds/floor_bed_darkelf_bunks01',0),(2577,2577,'staticobjects/bookcases/floor_bookcase_any_plain01',0),(2578,2578,'staticobjects/bookcases/floor_bookcase_any_stone01',0),(2579,2579,'staticobjects/bookcases/floor_bookcase_any_stone02',0),(2580,2580,'staticobjects/bookcases/floor_bookcase_any_wood01',0),(2581,2581,'staticobjects/bookcases/floor_bookcase_any_wood02',0),(2582,2582,'staticobjects/bookcases/floor_bookcase_any_wood03',0),(2583,2583,'staticobjects/bookcases/floor_bookcase_any_wood04',0),(2584,2584,'staticobjects/bookcases/floor_bookcase_any_wood05',0),(2585,2585,'staticobjects/bookcases/floor_bookcase_any_wood06',0),(2586,2586,'staticobjects/bookcases/floor_bookcase_bixie_ornate01',0),(2587,2587,'staticobjects/bookcases/floor_bookcase_darkelf_ornate01',0),(2588,2588,'staticobjects/bookcases/floor_bookcase_darkelf_ornate03',0),(2589,2589,'staticobjects/bookcases/floor_bookcase_darkelf_ornate04',0),(2590,2590,'staticobjects/bookcases/floor_bookcase_darkelf_ornate05',0),(2591,2591,'staticobjects/books/floor_books_any_mixed01',0),(2592,2592,'staticobjects/books/floor_books_any_mixed02',0),(2593,2593,'staticobjects/books/floor_books_any_mixed03',0),(2594,2594,'staticobjects/books/floor_books_any_mixed04',0),(2595,2595,'staticobjects/books/floor_books_any_mixed05',0),(2596,2596,'staticobjects/books/floor_book_any_cazic01',0),(2597,2597,'staticobjects/books/floor_book_any_cazic02',0),(2598,2598,'staticobjects/books/floor_book_any_cazic03',0),(2599,2599,'staticobjects/books/floor_book_any_cazic04',0),(2600,2600,'staticobjects/books/floor_book_any_cazic05',0),(2601,2601,'staticobjects/books/floor_book_darkelf_plain01',0),(2602,2602,'staticobjects/books/floor_book_darkelf_plain02',0),(2603,2603,'staticobjects/books/floor_book_darkelf_plain03',0),(2604,2604,'staticobjects/books/floor_book_darkelf_plain04',0),(2605,2605,'staticobjects/bottles/floor_bottle_any_fermentation01',0),(2606,2606,'staticobjects/bottles/floor_bottle_any_potion01',0),(2607,2607,'staticobjects/bottles/floor_bottle_darkelf_bar01',0),(2608,2608,'staticobjects/bottles/floor_bottle_darkelf_bar02',0),(2609,2609,'staticobjects/bottles/floor_bottle_darkelf_bar03',0),(2610,2610,'staticobjects/bottles/floor_bottle_darkelf_lab01',0),(2611,2611,'staticobjects/bottles/floor_bottle_darkelf_lab02',0),(2612,2612,'staticobjects/bottles/floor_bottle_darkelf_lab03',0),(2613,2613,'staticobjects/bottles/floor_bottle_darkelf_lab04',0),(2614,2614,'staticobjects/bottles/floor_potionbottle_any_large01',0),(2615,2615,'staticobjects/bottles/floor_potionbottle_any_large02',0),(2616,2616,'staticobjects/bottles/floor_potionbottle_any_large03',0),(2617,2617,'staticobjects/bottles/floor_potionbottle_any_large04',0),(2618,2618,'staticobjects/bottles/floor_potionbottle_any_large05',0),(2619,2619,'staticobjects/bottles/floor_potionbottle_any_medium01',0),(2620,2620,'staticobjects/bottles/floor_potionbottle_any_medium02',0),(2621,2621,'staticobjects/bottles/floor_potionbottle_any_medium03',0),(2622,2622,'staticobjects/bottles/floor_potionbottle_any_medium04',0),(2623,2623,'staticobjects/bottles/floor_potionbottle_any_small01',0),(2624,2624,'staticobjects/bottles/floor_potionbottle_any_small02',0),(2625,2625,'staticobjects/bottles/floor_potionbottle_any_small03',0),(2626,2626,'staticobjects/bottles/floor_potionbottle_any_small04',0),(2627,2627,'staticobjects/bottles/floor_potionbottle_any_small05',0),(2628,2628,'staticobjects/cages/floor_cage_any_bone01',0),(2629,2629,'staticobjects/cauldron/floor_pot_darkelf_cauldron01',0),(2630,2630,'staticobjects/chairs/floor_bench_any_simple01',0),(2631,2631,'staticobjects/chairs/floor_bench_darkelf_ornate01',0),(2632,2632,'staticobjects/chairs/floor_chair_any_bar01',0),(2633,2633,'staticobjects/chairs/floor_chair_any_bar02',0),(2634,2634,'staticobjects/chairs/floor_chair_any_dining01',0),(2635,2635,'staticobjects/chairs/floor_chair_any_dining02',0),(2636,2636,'staticobjects/chairs/floor_chair_any_dining03',0),(2637,2637,'staticobjects/chairs/floor_chair_any_office01',0),(2638,2638,'staticobjects/chairs/floor_chair_any_office02',0),(2639,2639,'staticobjects/chairs/floor_chair_any_office03',0),(2640,2640,'staticobjects/chairs/floor_chair_any_stone01',0),(2641,2641,'staticobjects/chairs/floor_chair_any_stone02',0),(2642,2642,'staticobjects/chairs/floor_chair_darkelf_ornate01',0),(2643,2643,'staticobjects/chairs/floor_chair_darkelf_ornate02',0),(2644,2644,'staticobjects/chairs/floor_chair_darkelf_weathered01',0),(2645,2645,'staticobjects/chairs/floor_chair_darkelf_wood01',0),(2646,2646,'staticobjects/chairs/floor_chair_woodelf_hood01',0),(2647,2647,'staticobjects/chairs/floor_chair_woodelf_hood02',0),(2648,2648,'staticobjects/chairs/floor_stool_darkelf_ornate01',0),(2649,2649,'staticobjects/chairs/floor_stool_darkelf_simple01',0),(2650,2650,'staticobjects/chairs/floor_stool_darkelf_thorny01',0),(2651,2651,'staticobjects/chairs/floor_stool_darkelf_thorny02',0),(2652,2652,'staticobjects/chairs/floor_stool_darkelf_wood01',0),(2653,2653,'staticobjects/chairs/floor_stool_halfling_wood01',0),(2654,2654,'staticobjects/chests/floor_chest_any_ornate01',0),(2655,2655,'staticobjects/chests/floor_chest_any_wood01',0),(2656,2656,'staticobjects/chests/floor_chest_darkelf_ornate01',0),(2657,2657,'staticobjects/chests/floor_chest_darkelf_ornate02',0),(2658,2658,'staticobjects/chests/floor_chest_elf_wood01',0),(2659,2659,'staticobjects/containers/floor_bucket_any_simple01',0),(2660,2660,'staticobjects/containers/floor_bucket_any_wood01',0),(2661,2661,'staticobjects/containers/floor_bucket_darkelf_metal01',0),(2662,2662,'staticobjects/containers/floor_pot_any_canopic01',0),(2663,2663,'staticobjects/containers/floor_pot_any_ornate01',0),(2664,2664,'staticobjects/containers/floor_pot_any_ornate02',0),(2665,2665,'staticobjects/containers/floor_pot_any_ornate03',0),(2666,2666,'staticobjects/containers/floor_pot_any_ornate04',0),(2667,2667,'staticobjects/containers/floor_pot_any_ornate05',0),(2668,2668,'staticobjects/containers/floor_trough_any_wood01',0),(2669,2669,'staticobjects/containers/floor_trough_darkelf_ornate01',0),(2670,2670,'staticobjects/containers/floor_vase01_any_capped01',0),(2671,2671,'staticobjects/containers/floor_vase01_any_capped02',0),(2672,2672,'staticobjects/containers/floor_vase01_any_capped03',0),(2673,2673,'staticobjects/containers/floor_vase01_any_capped04',0),(2674,2674,'staticobjects/counters/floor_counter_any_corner01',0),(2675,2675,'staticobjects/counters/floor_counter_any_generic02',0),(2676,2676,'staticobjects/counters/floor_counter_darkelf_bar01',0),(2677,2677,'staticobjects/crates/floor_crate_darkelf_wood01',0),(2678,2678,'staticobjects/crates/floor_crate_darkelf_wood02',0),(2679,2679,'staticobjects/crates/floor_crate_darkelf_wood03',0),(2680,2680,'staticobjects/crates/floor_crate_darkelf_wood04',0),(2681,2681,'staticobjects/crystals/floor_sphere_any_crystal',0),(2682,2682,'staticobjects/diode/floor_diode_any_enchanter',0),(2683,2683,'staticobjects/diode/floor_diode_any_sorcerer',0),(2684,2684,'staticobjects/diode/floor_diode_any_summoner',0),(2685,2685,'staticobjects/dressers/floor_dresser_any_ornate01',0),(2686,2686,'staticobjects/dressers/floor_dresser_darkelf_ornate01',0),(2687,2687,'staticobjects/dressers/floor_dresser_darkelf_ornate02',0),(2688,2688,'staticobjects/dressers/floor_dresser_darkelf_ornate03',0),(2689,2689,'staticobjects/kitchen/floor_pan_any_frying01',0),(2690,2690,'staticobjects/kitchen/floor_pan_any_frying02',0),(2691,2691,'staticobjects/kitchen/floor_pot_any_cooking01',0),(2692,2692,'staticobjects/kitchen/floor_pot_any_cooking02',0),(2693,2693,'staticobjects/kitchen/wall_breadholder_any_wood01',0),(2694,2694,'staticobjects/lighting/ceiling_chandalier_any_antler',0),(2695,2695,'staticobjects/lighting/ceiling_chandelier_any_skull01',0),(2696,2696,'staticobjects/lighting/ceiling_chandelier_darkelf_ornate01',0),(2697,2697,'staticobjects/lighting/ceiling_chandelier_darkelf_ornate02',0),(2698,2698,'staticobjects/lighting/ceiling_chandelier_darkelf_ornate03',0),(2699,2699,'staticobjects/lighting/ceiling_lamp_bixie_crystal01',0),(2700,2700,'staticobjects/lighting/ceiling_lamp_bixie_crystal02',0),(2701,2701,'staticobjects/lighting/ceiling_lamp_darkelf_skull01',0),(2702,2702,'staticobjects/lighting/floor_brazier_any_cazic01',0),(2703,2703,'staticobjects/lighting/floor_brazier_any_cazic02',0),(2704,2704,'staticobjects/lighting/floor_candelabra_any_table01',0),(2705,2705,'staticobjects/lighting/floor_candlelamp_any_skull01',0),(2706,2706,'staticobjects/lighting/floor_candlelamp_any_skull02',0),(2707,2707,'staticobjects/lighting/floor_candlelamp_any_skull03',0),(2708,2708,'staticobjects/lighting/floor_candlelamp_any_skull04',0),(2709,2709,'staticobjects/lighting/floor_candlelamp_any_skull05',0),(2710,2710,'staticobjects/lighting/floor_candles_any_group01',0),(2711,2711,'staticobjects/lighting/floor_candles_any_group02',0),(2712,2712,'staticobjects/lighting/floor_candles_any_group03',0),(2713,2713,'staticobjects/lighting/floor_lamp_any_table01',0),(2714,2714,'staticobjects/lighting/floor_lamp_any_table02',0),(2715,2715,'staticobjects/lighting/floor_lamp_bixie_crystal01',0),(2716,2716,'staticobjects/lighting/floor_lamp_darkelf_candle01',0),(2717,2717,'staticobjects/lighting/floor_lamp_darkelf_candle02',0),(2718,2718,'staticobjects/lighting/floor_lamp_darkelf_globe01',0),(2719,2719,'staticobjects/lighting/floor_lamp_darkelf_globe02',0),(2720,2720,'staticobjects/lighting/floor_lamp_darkelf_globe03',0),(2721,2721,'staticobjects/lighting/floor_lamp_darkelf_globe04',0),(2722,2722,'staticobjects/lighting/floor_lamp_darkelf_globe05',0),(2723,2723,'staticobjects/lighting/floor_lamp_darkelf_globe06',0),(2724,2724,'staticobjects/lighting/floor_lamp_darkelf_ornate01',0),(2725,2725,'staticobjects/lighting/floor_lamp_elf_candle01',0),(2726,2726,'staticobjects/lighting/wall_lamp_any_cazic01',0),(2727,2727,'staticobjects/lighting/wall_lamp_any_cazic02',0),(2728,2728,'staticobjects/lighting/wall_lamp_any_fancy01',0),(2729,2729,'staticobjects/lighting/wall_lamp_any_fancy02',0),(2730,2730,'staticobjects/lighting/wall_lamp_any_militia01',0),(2731,2731,'staticobjects/lighting/wall_lamp_any_militia02',0),(2732,2732,'staticobjects/lighting/wall_lamp_bixie_crystal01',0),(2733,2733,'staticobjects/lighting/wall_lamp_bixie_crystal02',0),(2734,2734,'staticobjects/lighting/wall_lamp_bixie_ornate01',0),(2735,2735,'staticobjects/lighting/wall_lamp_bixie_ornate02',0),(2736,2736,'staticobjects/lighting/wall_lamp_darkelf_candle01',0),(2737,2737,'staticobjects/lighting/wall_lamp_darkelf_globe01',0),(2738,2738,'staticobjects/lighting/wall_lamp_darkelf_globe02',0),(2739,2739,'staticobjects/lighting/wall_lamp_darkelf_globe03',0),(2740,2740,'staticobjects/lighting/wall_lamp_darkelf_torchbowl01',0),(2741,2741,'staticobjects/lighting/wall_lamp_elf_candle01',0),(2742,2742,'staticobjects/lighting/wall_walllamp_any_figurehead01',0),(2743,2743,'staticobjects/lighting/wall_walllamp_darkelf_ornate01',0),(2744,2744,'staticobjects/lighting/wall_walllamp_darkelf_ornate02',0),(2745,2745,'staticobjects/mounts/wall_mount_any_sharkhead',0),(2746,2746,'staticobjects/nautical/ceiling_shippulley_any_hanging01',0),(2747,2747,'staticobjects/nautical/floor_shippulley_any_wood01',0),(2748,2748,'staticobjects/nautical/wall_steeringwheel_any_wood01',0),(2749,2749,'staticobjects/pillow/floor_pillow_any_display01',0),(2750,2750,'staticobjects/pillow/floor_pillow_any_display02',0),(2751,2751,'staticobjects/pillow/floor_pillow_any_display03',0),(2752,2752,'staticobjects/pillow/floor_pillow_any_display04',0),(2753,2753,'staticobjects/pillow/floor_pillow_any_display05',0),(2754,2754,'staticobjects/racks/floor_rack_elf_firewood01',0),(2755,2755,'staticobjects/relics/floor_offeringbowl_any_cazic01',0),(2756,2756,'staticobjects/relics/floor_offeringbowl_any_cazic02',0),(2757,2757,'staticobjects/relics/floor_offeringbowl_any_cazic03',0),(2758,2758,'staticobjects/rugs/floor_mat_any_dirty01',0),(2759,2759,'staticobjects/rugs/floor_mat_any_display01',0),(2760,2760,'staticobjects/shelves/floor_shelf_any_floor01',0),(2761,2761,'staticobjects/shelves/wall_shelf_any_display01',0),(2762,2762,'staticobjects/shelves/wall_shelf_any_display02',0),(2763,2763,'staticobjects/shelves/wall_shelf_any_skull01',0),(2764,2764,'staticobjects/shelves/wall_shelf_any_skull02',0),(2765,2765,'staticobjects/shelves/wall_shelf_any_skull03',0),(2766,2766,'staticobjects/shelves/wall_shelf_any_weathered01',0),(2767,2767,'staticobjects/shelves/wall_shelf_halfling_wooden01',0),(2768,2768,'staticobjects/shelves/wall_shelf_halfling_wooden02',0),(2769,2769,'staticobjects/shelves/wall_shelf_halfling_wooden03',0),(2770,2770,'staticobjects/shelves/wall_shelf_halfling_wooden04',0),(2771,2771,'staticobjects/shop/floor_display_darkelf_wooden01',0),(2772,2772,'staticobjects/shop/floor_display_darkelf_wooden02',0),(2773,2773,'staticobjects/statues/floor_skeleton_human_display01',0),(2774,2774,'staticobjects/statues/wall_statue_any_figurehead01',0),(2775,2775,'staticobjects/tables/floor_desk_any_librarian01',0),(2776,2776,'staticobjects/tables/floor_desk_any_office01',0),(2777,2777,'staticobjects/tables/floor_desk_any_ornate01',0),(2778,2778,'staticobjects/tables/floor_desk_halfling_wood01',0),(2779,2779,'staticobjects/tables/floor_table_any_bedside02',0),(2780,2780,'staticobjects/tables/floor_table_any_dining01',0),(2781,2781,'staticobjects/tables/floor_table_any_dining02',0),(2782,2782,'staticobjects/tables/floor_table_any_generic01',0),(2783,2783,'staticobjects/tables/floor_table_any_generic02',0),(2784,2784,'staticobjects/tables/floor_table_any_generic03',0),(2785,2785,'staticobjects/tables/floor_table_any_ornate01',0),(2786,2786,'staticobjects/tables/floor_table_any_ornate02',0),(2787,2787,'staticobjects/tables/floor_table_any_plain01',0),(2788,2788,'staticobjects/tables/floor_table_any_plain02',0),(2789,2789,'staticobjects/tables/floor_table_any_torture01',0),(2790,2790,'staticobjects/tables/floor_table_any_torture02',0),(2791,2791,'staticobjects/tables/floor_table_any_torture03',0),(2792,2792,'staticobjects/tables/floor_table_any_wood01',0),(2793,2793,'staticobjects/tables/floor_table_any_wood02',0),(2794,2794,'staticobjects/tables/floor_table_bixie_ornate01',0),(2795,2795,'staticobjects/tables/floor_table_darkelf_ornate01',0),(2796,2796,'staticobjects/tables/floor_table_darkelf_ornate02',0),(2797,2797,'staticobjects/tables/floor_table_darkelf_ornate03',0),(2798,2798,'staticobjects/tables/floor_table_darkelf_wooden01',0),(2799,2799,'staticobjects/tables/floor_table_elf_ornate01',0),(2800,2800,'staticobjects/tables/floor_table_elf_wood01',0),(2801,2801,'staticobjects/tables/floor_table_halfling_wood01',0),(2802,2802,'staticobjects/tableware/floor_bowl_darkelf_dining01',0),(2803,2803,'staticobjects/tableware/floor_bowl_halfling_simple01',0),(2804,2804,'staticobjects/tableware/floor_bowl_halfling_simple02',0),(2805,2805,'staticobjects/tableware/floor_cup_any_coffee01',0),(2806,2806,'staticobjects/tableware/floor_cup_any_coffee02',0),(2807,2807,'staticobjects/tableware/floor_cup_any_wood01',0),(2808,2808,'staticobjects/tableware/floor_cup_darkelf_glass01',0),(2809,2809,'staticobjects/tableware/floor_cup_darkelf_glass02',0),(2810,2810,'staticobjects/tableware/floor_fork_darkelf_dining01',0),(2811,2811,'staticobjects/tableware/floor_glass_darkelf_cocktail01',0),(2812,2812,'staticobjects/tableware/floor_knife_darkelf_dining01',0),(2813,2813,'staticobjects/tableware/floor_plate_any_dining01',0),(2814,2814,'staticobjects/tableware/floor_plate_darkelf_dining01',0),(2815,2815,'staticobjects/tableware/floor_spoon_darkelf_dining01',0),(2816,2816,'staticobjects/tents/grey_tent_large01',0),(2817,2817,'staticobjects/tents/grey_tent_small01',0),(2818,2818,'staticobjects/tools/floor_hammer_darkelf_crafting01',0),(2819,2819,'staticobjects/tools/floor_handsaw_darkelf_crafting01',0),(2820,2820,'staticobjects/tools/floor_kiln_darkelf_crafting01',0),(2821,2821,'staticobjects/tools/floor_pick_darkelf_crafting01',0),(2822,2822,'staticobjects/tools/floor_pitchfork_darkelf_crafting01',0),(2823,2823,'staticobjects/tools/floor_potterywheel_darkelf_crafting01',0),(2824,2824,'staticobjects/tools/floor_scythe_darkelf_crafting01',0),(2825,2825,'staticobjects/world_devices/temp_alchemy',0),(2826,2826,'staticobjects/world_devices/temp_desk',0),(2827,2827,'staticobjects/world_devices/temp_keg',0),(2828,2828,'staticobjects/world_devices/temp_loom',0),(2829,2829,'staticobjects/world_devices/temp_rune',0),(2830,2830,'staticobjects/world_devices/temp_sawhorse',0),(2831,2831,'staticobjects/world_devices/temp_scribe',0),(2832,2832,'staticobjects/world_devices/temp_stove',0),(2833,2833,'creatures/monsters/bat_ghost',0),(2834,2834,'creatures/monsters/bear_ghost',0),(2835,2835,'creatures/monsters/wolf_ghost',0),(2836,2836,'ec/pc/barbarian/barbarian_male_ghost',0),(2837,2837,'ec/pc/darkelf/darkelf_female_ghost',0),(2838,2838,'ec/pc/darkelf/darkelf_male_ghost',0),(2839,2839,'ec/pc/dwarf/dwarf_female_ghost',0),(2840,2840,'ec/pc/dwarf/dwarf_male_ghost',0),(2841,2841,'ec/pc/erudite/erudite_female_ghost',0),(2842,2842,'ec/pc/erudite/erudite_male_ghost',0),(2843,2843,'ec/pc/gnome/gnome_female_ghost',0),(2844,2844,'ec/pc/gnome/gnome_male_ghost',0),(2845,2845,'ec/pc/halfelf/halfelf_female_ghost',0),(2846,2846,'ec/pc/halfelf/halfelf_male_ghost',0),(2847,2847,'ec/pc/halfling/halfling_female_ghost',0),(2848,2848,'ec/pc/halfling/halfling_male_ghost',0),(2849,2849,'ec/pc/highelf/highelf_female_ghost',0),(2850,2850,'ec/pc/highelf/highelf_male_ghost',0),(2851,2851,'ec/pc/human/human_female_ghost',0),(2852,2852,'ec/pc/human/human_male_ghost',0),(2853,2853,'ec/pc/iksar/iksar_female_ghost',0),(2854,2854,'ec/pc/iksar/iksar_male_ghost',0),(2855,2855,'ec/pc/kerra/kerra_female_ghost',0),(2856,2856,'ec/pc/kerra/kerra_male_ghost',0),(2857,2857,'ec/pc/ogre/ogre_female_ghost',0),(2858,2858,'ec/pc/ogre/ogre_male_ghost',0),(2859,2859,'ec/pc/ratonga/ratonga_female_ghost',0),(2860,2860,'ec/pc/ratonga/ratonga_male_ghost',0),(2861,2861,'ec/pc/troll/troll_female_ghost',0),(2862,2862,'ec/pc/troll/troll_male_ghost',0),(2863,2863,'ec/pc/woodelf/woodelf_female_ghost',0),(2864,2864,'ec/pc/woodelf/woodelf_male_ghost',0),(2865,2865,'staticobjects/scrolls/obelisk_scroll_case',0),(2866,2866,'accessories/wearable_items/magus/robes/plain_quilted/chest',0),(2867,2867,'accessories/wearable_items/magus/robes/plain_quilted/hood',0),(2868,2868,'accessories/wearable_items/magus/robes/plain_quilted/pants',0),(2869,2869,'accessories/wearable_items/magus/robes/plain_quilted/skirt',0),(2870,2870,'staticobjects/barrels/six_barrels',0),(2871,2871,'staticobjects/candles/evil_skull_flaming',0),(2872,2872,'staticobjects/canopicjars/large_broken',0),(2873,2873,'staticobjects/canopicjars/large_broken_laying',0),(2874,2874,'staticobjects/canopicjars/medium_whole',0),(2875,2875,'staticobjects/canopicjars/small_whole',0),(2876,2876,'staticobjects/cobwebs/cobwebs',0),(2877,2877,'staticobjects/coffins_and_sarcophagus/nektropos_coffin',0),(2878,2878,'staticobjects/coffins_and_sarcophagus/nektropos_coffin_lid',0),(2879,2879,'staticobjects/coffins_and_sarcophagus/plain_grey',0),(2880,2880,'staticobjects/coffins_and_sarcophagus/shroud',0),(2881,2881,'accessories/wearable_items/magus/robes/plain_quilted_patches/chest',0),(2882,2882,'accessories/wearable_items/magus/robes/plain_quilted_patches/hood',0),(2883,2883,'accessories/wearable_items/magus/robes/plain_quilted_patches/pants',0),(2884,2884,'accessories/wearable_items/magus/robes/plain_quilted_patches/skirt',0),(2885,2885,'accessories/wearable_items/tradesman/clothing/brawler/brawler_wrapped/chest',0),(2886,2886,'staticobjects/halloween/tfs_present02_medium',1096),(2887,2887,'accessories/wearable_items/tradesman/clothing/brawler/brawler_wrapped/pants',0),(2888,2888,'accessories/wearable_items/tradesman/clothing/brawler/brawler_wrapped/shoulders',0),(2889,2889,'staticobjects/halloween/th_skeletons_skell01',1096),(2890,2890,'accessories/wieldable_items/weapons/rapier/cutlass/cutlass001_plain',0),(2891,2891,'accessories/wieldable_items/weapons/rapier/cutlass/cutlass001_rusty',0),(2892,2892,'accessories/wieldable_items/weapons/rapier/epee/epee001_ornate',0),(2893,2893,'accessories/wieldable_items/weapons/rapier/epee/epee001_plain',0),(2894,2894,'accessories/wieldable_items/weapons/rapier/epee/epee001_rusty',0),(2895,2895,'creatures/monsters/gargoyle_graveyard',0),(2896,2896,'creatures/pets/factor_order',0),(2897,2897,'creatures/pets/form_order',0),(2898,2898,'creatures/pets/fragment_order',0),(2899,2899,'creatures/tu/golem_lava',0),(2900,2900,'ec/npc/goblin_lava',0),(2901,2901,'ec/npc/skeleton_darkbone',0),(2902,2902,'staticobjects/chests/orc_chest_locked',0),(2903,2903,'staticobjects/pillars/large_pillar',0),(2904,2904,'staticobjects/pillars/small_pillar',0),(2905,2905,'staticobjects/racks/gnoll_weapon_rack01',0),(2906,2906,'staticobjects/trapdoor/trapdoor_frame',0),(2907,2907,'staticobjects/trapdoor/trapdoor_lid',0),(2908,2908,'accessories/wieldable_items/weapons/rapier/foil/foil001_plain',0),(2909,2909,'accessories/wieldable_items/weapons/rapier/foil/foil001_rusty',0),(2910,2910,'accessories/wieldable_items/weapons/rapier/karabela/karabela001_plain',0),(2911,2911,'accessories/wieldable_items/weapons/rapier/karabela/karabela001_rusty',0),(2912,2912,'creatures/monsters/lioness_ghost',0),(2913,2913,'creatures/monsters/lion_ghost',0),(2914,2914,'creatures/monsters/mimic_ghost',0),(2915,2915,'creatures/monsters/thoughtbleeder_ghost',0),(2916,2916,'staticobjects/gravestones/gravedirt01',0),(2917,2917,'staticobjects/gravestones/gravedirt02',0),(2918,2918,'staticobjects/gravestones/gravestone03',0),(2919,2919,'staticobjects/gravestones/gravestone04',0),(2920,2920,'staticobjects/gravestones/gravestone05',0),(2921,2921,'staticobjects/gravestones/gravestone06',0),(2922,2922,'staticobjects/gravestones/gravestone07',0),(2923,2923,'staticobjects/gravestones/gravestone08',0),(2924,2924,'staticobjects/gravestones/gravestone09',0),(2925,2925,'staticobjects/gravestones/gravestone10',0),(2926,2926,'accessories/wearable_items/tradesman/clothing/brawler/brawler_wrapped/feet',0),(2927,2927,'accessories/wieldable_items/weapons/rapier/rapier/rapier001_plain',0),(2928,2928,'accessories/wieldable_items/weapons/rapier/rapier/rapier001_runic',0),(2929,2929,'accessories/wieldable_items/weapons/rapier/rapier/rapier001_rusty',0),(2930,2930,'creatures/monsters/spider_cave_ghost',0),(2931,2931,'accessories/wieldable_items/weapons/talisman/censer/censer001_ornate',0),(2932,2932,'staticobjects/halloween/vel_rock_ettin_skull01',1096),(2933,2933,'ec/npc/skeleton_ghost',0),(2934,2934,'ec/npc/skeleton_icebone',0),(2935,2935,'ec/npc/skeleton_meaty',0),(2936,2936,'ec/npc/skeleton_stone_servant',0),(2937,2937,'ec/npc/skeleton_terminator',0),(2938,2938,'staticobjects/alter/floor_alter_any_crucifixion01',0),(2939,2939,'staticobjects/barrels/floor_barrel_human_ornate01',0),(2940,2940,'staticobjects/barrels/floor_barrel_human_ornate02',0),(2941,2941,'staticobjects/barrels/floor_barrel_human_plain01',0),(2942,2942,'staticobjects/barrels/floor_barrel_human_plain02',0),(2943,2943,'staticobjects/barrels/floor_barrel_human_weathered01',0),(2944,2944,'staticobjects/barrels/floor_barrel_human_weathered02',0),(2945,2945,'staticobjects/barrels/floor_barrel_human_wood01',0),(2946,2946,'staticobjects/barrels/floor_barrel_human_wood02',0),(2947,2947,'staticobjects/barrels/floor_barrel_human_wood03',0),(2948,2948,'staticobjects/beds/floor_bedframe_elf_broken01',0),(2949,2949,'staticobjects/beds/floor_bedframe_elf_broken02',0),(2950,2950,'staticobjects/beds/floor_bedframe_human_wood01',0),(2951,2951,'staticobjects/beds/floor_bed_elf_dirty01',0),(2952,2952,'staticobjects/beds/floor_bed_human_jail01',0),(2953,2953,'staticobjects/beds/floor_bed_human_warped01',0),(2954,2954,'staticobjects/beds/floor_bed_human_warped02',0),(2955,2955,'staticobjects/beds/floor_bed_human_warped03',0),(2956,2956,'staticobjects/beds/floor_bed_human_warped04',0),(2957,2957,'staticobjects/beds/floor_bed_human_warped05',0),(2958,2958,'staticobjects/beds/floor_bed_human_warped06',0),(2959,2959,'staticobjects/beds/floor_bed_human_warped07',0),(2960,2960,'staticobjects/beds/floor_bed_human_warped08',0),(2961,2961,'staticobjects/beds/floor_bed_human_warped09',0),(2962,2962,'staticobjects/beds/floor_bed_human_warped10',0),(2963,2963,'staticobjects/beds/floor_bunkbed_human_step01',0),(2964,2964,'staticobjects/beds/floor_doublebed_human_grand01',0),(2965,2965,'staticobjects/beds/floor_doublebed_human_grand02',0),(2966,2966,'staticobjects/beds/floor_doublebed_human_ornate01',0),(2967,2967,'staticobjects/beds/floor_doublebed_human_plain01',0),(2968,2968,'staticobjects/beds/floor_singlebed_human_ornate01',0),(2969,2969,'staticobjects/beds/floor_singlebed_human_ornate02',0),(2970,2970,'staticobjects/beds/floor_singlebed_human_ornate03',0),(2971,2971,'staticobjects/beds/floor_singlebed_human_ornate04',0),(2972,2972,'staticobjects/beds/floor_singlebed_human_ornate05',0),(2973,2973,'staticobjects/beds/floor_singlebed_human_ornate06',0),(2974,2974,'staticobjects/beds/floor_singlebed_human_ornate07',0),(2975,2975,'staticobjects/beds/floor_singlebed_human_plain01',0),(2976,2976,'staticobjects/beds/wall_bed_human_jail01',0),(2977,2977,'staticobjects/bell/floor_bell_human_large01',0),(2978,2978,'staticobjects/bell/floor_bell_human_large02',0),(2979,2979,'staticobjects/benches/floor_bench_human_bench01',0),(2980,2980,'staticobjects/benches/floor_bench_human_bench02',0),(2981,2981,'staticobjects/benches/floor_bench_human_ornate03',0),(2982,2982,'staticobjects/benches/floor_bench_human_stone01',0),(2983,2983,'staticobjects/bixie/floor_den_bixie_ornate01',0),(2984,2984,'staticobjects/blacksmith/floor_anvil_any_plain01',0),(2985,2985,'staticobjects/bones/floor_bones_human_eroded01',0),(2986,2986,'staticobjects/bones/floor_bones_human_eroded02',0),(2987,2987,'staticobjects/bones/floor_bones_human_eroded03',0),(2988,2988,'staticobjects/bones/floor_bones_human_eroded04',0),(2989,2989,'staticobjects/bones/floor_bones_human_plain01',0),(2990,2990,'staticobjects/bones/floor_bones_human_plain02',0),(2991,2991,'staticobjects/bones/floor_bones_human_plain03',0),(2992,2992,'staticobjects/bones/floor_bones_human_plain04',0),(2993,2993,'staticobjects/bones/floor_bone_human_skull01',0),(2994,2994,'staticobjects/bones/floor_bone_human_skull02',0),(2995,2995,'staticobjects/bones/floor_bone_human_skull03',0),(2996,2996,'staticobjects/bones/floor_bone_iksar_skull01',0),(2997,2997,'staticobjects/bones/floor_bone_iksar_skull02',0),(2998,2998,'staticobjects/bones/floor_bone_orc_skull01',0),(2999,2999,'staticobjects/bones/floor_skull_human_bashed01',0),(3000,3000,'staticobjects/bones/floor_skull_human_bashed02',0),(3001,3001,'staticobjects/bones/floor_skull_human_row01',0),(3002,3002,'staticobjects/bookcases/floor_bookcase_any_tall01',0),(3003,3003,'staticobjects/bookcases/floor_bookcase_any_tall02',0),(3004,3004,'staticobjects/bookcases/floor_bookcase_any_tall03',0),(3005,3005,'staticobjects/bookcases/floor_bookcase_any_tall04',0),(3006,3006,'staticobjects/bookcases/floor_bookcase_darkelf_broken01',0),(3007,3007,'staticobjects/bookcases/floor_bookcase_human_ornate03',0),(3008,3008,'staticobjects/bookcases/floor_bookcase_human_ornate04',0),(3009,3009,'staticobjects/bookcases/floor_bookcase_human_ornate05',0),(3010,3010,'staticobjects/bookcases/floor_bookcase_human_ornate06',0),(3011,3011,'staticobjects/bookcases/floor_bookcase_human_ornate07',0),(3012,3012,'staticobjects/bookcases/floor_bookcase_human_ornate08',0),(3013,3013,'staticobjects/bookcases/floor_bookcase_human_plain02',0),(3014,3014,'staticobjects/bookcases/floor_bookcase_human_plain03',0),(3015,3015,'staticobjects/bookcases/floor_bookcase_human_plain04',0),(3016,3016,'staticobjects/bookcases/floor_bookcase_human_plain05',0),(3017,3017,'staticobjects/bookcases/floor_bookcase_human_preserves01',0),(3018,3018,'staticobjects/bookcases/floor_bookcase_human_preserves02',0),(3019,3019,'staticobjects/bookcases/floor_bookcase_human_refined01',0),(3020,3020,'staticobjects/bookcases/floor_bookcase_human_stone02',0),(3021,3021,'staticobjects/bookcases/floor_bookcase_human_stone03',0),(3022,3022,'staticobjects/books/floor_books_human_row01',0),(3023,3023,'staticobjects/books/floor_books_human_row02',0),(3024,3024,'staticobjects/books/floor_books_human_row03',0),(3025,3025,'staticobjects/books/floor_books_human_row04',0),(3026,3026,'staticobjects/books/floor_books_human_stack01',0),(3027,3027,'staticobjects/books/floor_books_human_stack02',0),(3028,3028,'staticobjects/books/floor_books_human_stack03',0),(3029,3029,'staticobjects/books/floor_books_human_stack04',0),(3030,3030,'staticobjects/books/floor_book_human_open01',0),(3031,3031,'staticobjects/books/floor_book_human_ornate01',0),(3032,3032,'staticobjects/books/floor_book_human_ornate02',0),(3033,3033,'staticobjects/books/floor_book_human_ornate03',0),(3034,3034,'staticobjects/books/floor_book_human_plain01',0),(3035,3035,'staticobjects/books/floor_book_human_plain02',0),(3036,3036,'staticobjects/books/floor_book_human_plain03',0),(3037,3037,'staticobjects/books/floor_book_human_plain04',0),(3038,3038,'staticobjects/cages/ceiling_cage_any_steel01',0),(3039,3039,'staticobjects/cages/floor_cage_any_stabbing01',0),(3040,3040,'staticobjects/chairs/floor_chair_darkelf_broken01',0),(3041,3041,'staticobjects/chairs/floor_chair_darkelf_broken02',0),(3042,3042,'staticobjects/chairs/floor_chair_darkelf_broken03',0),(3043,3043,'staticobjects/chairs/floor_chair_darkelf_broken04',0),(3044,3044,'staticobjects/chairs/floor_chair_darkelf_broken05',0),(3045,3045,'staticobjects/chairs/floor_chair_gnome_ornate01',0),(3046,3046,'staticobjects/chairs/floor_chair_human_elite01',0),(3047,3047,'staticobjects/chairs/floor_chair_human_elite02',0),(3048,3048,'staticobjects/chairs/floor_chair_human_elite03',0),(3049,3049,'staticobjects/chairs/floor_chair_human_elite04',0),(3050,3050,'staticobjects/chairs/floor_chair_human_hood01',0),(3051,3051,'staticobjects/chairs/floor_chair_human_mahogany01',0),(3052,3052,'staticobjects/chairs/floor_chair_human_mahogany02',0),(3053,3053,'staticobjects/chairs/floor_chair_human_mahogany03',0),(3054,3054,'staticobjects/chairs/floor_chair_human_mahogany04',0),(3055,3055,'staticobjects/chairs/floor_chair_human_mahogany05',0),(3056,3056,'staticobjects/chairs/floor_chair_human_mahogany06',0),(3057,3057,'staticobjects/chairs/floor_chair_human_militia01',0),(3058,3058,'staticobjects/chairs/floor_chair_human_militia02',0),(3059,3059,'staticobjects/chairs/floor_chair_human_missingleg01',0),(3060,3060,'staticobjects/chairs/floor_chair_human_plain03',0),(3061,3061,'staticobjects/chairs/floor_chair_human_twisted01',0),(3062,3062,'staticobjects/chairs/floor_chair_human_wooden01',0),(3063,3063,'staticobjects/chairs/floor_chair_human_wooden02',0),(3064,3064,'staticobjects/chairs/floor_chair_human_wooden03',0),(3065,3065,'staticobjects/chairs/floor_chair_woodelf_broken',0),(3066,3066,'staticobjects/chairs/floor_chair_woodelf_broken01',0),(3067,3067,'staticobjects/chairs/floor_couch_bixie_ornate01',0),(3068,3068,'staticobjects/chairs/floor_couch_bixie_ornate02',0),(3069,3069,'staticobjects/chairs/floor_stool_darkelf_broken01',0),(3070,3070,'staticobjects/chairs/floor_stool_human_elite01',0),(3071,3071,'staticobjects/chairs/floor_stool_human_leather01',0),(3072,3072,'staticobjects/chairs/floor_stool_human_mahogany01',0),(3073,3073,'staticobjects/chairs/floor_stool_human_simple01',0),(3074,3074,'staticobjects/chests/floor_chest_human_apothecary01',0),(3075,3075,'staticobjects/chests/floor_chest_human_apothecary02',0),(3076,3076,'staticobjects/chests/floor_chest_human_hood01',0),(3077,3077,'staticobjects/chests/floor_chest_human_hood02',0),(3078,3078,'staticobjects/chests/floor_chest_human_hood03',0),(3079,3079,'staticobjects/chests/floor_chest_human_hood04',0),(3080,3080,'staticobjects/chests/floor_chest_human_militia01',0),(3081,3081,'staticobjects/chests/floor_chest_human_militia02',0),(3082,3082,'staticobjects/chests/floor_chest_human_ornate01',0),(3083,3083,'staticobjects/chests/floor_chest_human_ornate02',0),(3084,3084,'staticobjects/chests/floor_chest_human_plain01',0),(3085,3085,'staticobjects/chests/floor_chest_human_plain02',0),(3086,3086,'staticobjects/chests/floor_chest_human_plain03',0),(3087,3087,'staticobjects/chests/floor_chest_human_wood02',0),(3088,3088,'staticobjects/chests/floor_chest_human_wood03',0),(3089,3089,'staticobjects/clothspinners/floor_loom_any_wooden01',0),(3090,3090,'staticobjects/clothspinners/floor_spinningwheel_any_wood01',0),(3091,3091,'staticobjects/coffins_and_sarcophagus/floor_ark_any_sacred01',0),(3092,3092,'staticobjects/coffins_and_sarcophagus/floor_casket_any_cadaver01',0),(3093,3093,'staticobjects/coffins_and_sarcophagus/floor_casket_any_ornate01',0),(3094,3094,'staticobjects/containers/floor_basin_any_ornate01',0),(3095,3095,'staticobjects/containers/floor_bottle_human_milk01',0),(3096,3096,'staticobjects/containers/floor_bottle_human_pill01',0),(3097,3097,'staticobjects/containers/floor_bottle_human_potion01',0),(3098,3098,'staticobjects/containers/floor_bottle_human_potion02',0),(3099,3099,'staticobjects/containers/floor_bottle_human_preservation01',0),(3100,3100,'staticobjects/containers/floor_bottle_human_preservation02',0),(3101,3101,'staticobjects/containers/floor_bottle_human_preservation03',0),(3102,3102,'staticobjects/containers/floor_box_any_wood01',0),(3103,3103,'staticobjects/containers/floor_bucket_any_winepress01',0),(3104,3104,'staticobjects/containers/floor_bucket_barbarian_wood01',0),(3105,3105,'staticobjects/containers/floor_bucket_human_ornate01',0),(3106,3106,'staticobjects/containers/floor_bucket_human_ornate02',0),(3107,3107,'staticobjects/containers/floor_bucket_human_plain01',0),(3108,3108,'staticobjects/containers/floor_bucket_human_plain02',0),(3109,3109,'staticobjects/containers/floor_bucket_human_plain03',0),(3110,3110,'staticobjects/containers/floor_bucket_human_wood01',0),(3111,3111,'staticobjects/containers/floor_flask_human_leather01',0),(3112,3112,'staticobjects/containers/floor_flask_human_leather02',0),(3113,3113,'staticobjects/containers/floor_jar_any_canopic01',0),(3114,3114,'staticobjects/containers/floor_jar_any_canopic02',0),(3115,3115,'staticobjects/containers/floor_jar_any_canopic03',0),(3116,3116,'staticobjects/containers/floor_jar_halfling_ornate01',0),(3117,3117,'staticobjects/containers/floor_jar_halfling_ornate02',0),(3118,3118,'staticobjects/containers/floor_jar_halfling_plain01',0),(3119,3119,'staticobjects/containers/floor_jar_halfling_plain02',0),(3120,3120,'staticobjects/containers/floor_trough_human_wood01',0),(3121,3121,'staticobjects/containers/floor_trough_human_wood02',0),(3122,3122,'staticobjects/containers/floor_trough_human_wood03',0),(3123,3123,'staticobjects/containers/floor_urn_any_cazic01',0),(3124,3124,'staticobjects/containers/floor_urn_any_cazic02',0),(3125,3125,'staticobjects/containers/wall_flask_human_leather01',0),(3126,3126,'staticobjects/counters/floor_barcounter_human_ornate01',0),(3127,3127,'staticobjects/counters/floor_cornercounter_human_plain01',0),(3128,3128,'staticobjects/counters/floor_cornercounter_human_plain02',0),(3129,3129,'staticobjects/counters/floor_cornercounter_human_stone01',0),(3130,3130,'staticobjects/counters/floor_cornercounter_human_stone02',0),(3131,3131,'staticobjects/counters/floor_counter_human_corner02',0),(3132,3132,'staticobjects/counters/floor_counter_human_ornate01',0),(3133,3133,'staticobjects/counters/floor_counter_human_ornate02',0),(3134,3134,'staticobjects/counters/floor_counter_human_ornate03',0),(3135,3135,'staticobjects/counters/floor_counter_human_plain01',0),(3136,3136,'staticobjects/counters/floor_counter_human_plain02',0),(3137,3137,'staticobjects/counters/floor_counter_human_stone01',0),(3138,3138,'staticobjects/counters/floor_counter_human_stone02',0),(3139,3139,'staticobjects/counters/floor_counter_human_wood01',0),(3140,3140,'staticobjects/counters/floor_counter_human_wood02',0),(3141,3141,'staticobjects/counters/floor_counter_human_wood03',0),(3142,3142,'staticobjects/counters/floor_counter_human_wood04',0),(3143,3143,'staticobjects/counters/floor_counter_human_wood05',0),(3144,3144,'staticobjects/counters/floor_roundcounter_human_plain01',0),(3145,3145,'staticobjects/counters/floor_roundcounter_human_stone01',0),(3146,3146,'staticobjects/crates/floor_crate_human_boarded01',0),(3147,3147,'staticobjects/crates/floor_crate_human_boarded02',0),(3148,3148,'staticobjects/crates/floor_crate_human_boarded03',0),(3149,3149,'staticobjects/crates/floor_crate_human_boarded04',0),(3150,3150,'staticobjects/crates/floor_crate_human_boarded05',0),(3151,3151,'staticobjects/crates/floor_crate_human_hood01',0),(3152,3152,'staticobjects/crates/floor_crate_human_hood02',0),(3153,3153,'staticobjects/crates/floor_crate_human_hood03',0),(3154,3154,'staticobjects/crates/floor_crate_human_hood04',0),(3155,3155,'staticobjects/crates/floor_crate_human_plain01',0),(3156,3156,'staticobjects/crates/floor_crate_human_plain02',0),(3157,3157,'staticobjects/crates/floor_crate_human_plain03',0),(3158,3158,'staticobjects/crystals/floor_crystal_any_gem01',0),(3159,3159,'staticobjects/crystals/floor_crystal_any_gem02',0),(3160,3160,'staticobjects/crystals/floor_crystal_any_gem03',0),(3161,3161,'staticobjects/crystals/floor_crystal_any_gem04',0),(3162,3162,'staticobjects/crystals/floor_crystal_any_gem05',0),(3163,3163,'staticobjects/crystals/floor_crystal_any_gem06',0),(3164,3164,'staticobjects/dressers/floor_cabinet_bixie_ornate01',0),(3165,3165,'staticobjects/dressers/floor_dresser_human_elite01',0),(3166,3166,'staticobjects/dressers/floor_dresser_human_warped01',0),(3167,3167,'staticobjects/dressers/floor_dresser_human_warped02',0),(3168,3168,'staticobjects/dressers/floor_dresser_human_warped03',0),(3169,3169,'staticobjects/dressers/floor_dresser_human_warped04',0),(3170,3170,'staticobjects/dressers/floor_dresser_human_warped05',0),(3171,3171,'staticobjects/dressers/floor_dresser_human_warped06',0),(3172,3172,'staticobjects/games/floor_gamecards_human_spread01',0),(3173,3173,'staticobjects/games/floor_gamecards_human_spread02',0),(3174,3174,'staticobjects/games/floor_gamecards_human_spread03',0),(3175,3175,'staticobjects/games/floor_gamecards_human_stack01',0),(3176,3176,'staticobjects/games/floor_gamechips_human_stack01',0),(3177,3177,'staticobjects/games/floor_gamechips_human_stack02',0),(3178,3178,'staticobjects/gears/floor_gear_any_cogwheel01',0),(3179,3179,'staticobjects/gears/gear_single',0),(3180,3180,'staticobjects/general/floor_pedestal_any_ornate01',0),(3181,3181,'staticobjects/kegs/floor_keg_halfing_factory01',0),(3182,3182,'staticobjects/kegs/floor_keg_halfling_wood01',0),(3183,3183,'staticobjects/kegs/floor_keg_human_basic01',0),(3184,3184,'staticobjects/kegs/floor_keg_human_basic02',0),(3185,3185,'staticobjects/kegs/floor_keg_human_ornate01',0),(3186,3186,'staticobjects/kegs/floor_keg_human_ornate02',0),(3187,3187,'staticobjects/kegs/floor_keg_human_plain01',0),(3188,3188,'staticobjects/kegs/floor_keg_human_plain02',0),(3189,3189,'staticobjects/kegs/floor_keg_human_wood01',0),(3190,3190,'staticobjects/kegs/floor_keg_human_wood02',0),(3191,3191,'staticobjects/kegs/floor_keg_ogre_wood01',0),(3192,3192,'staticobjects/kegs/floor_keg_ogre_wood02',0),(3193,3193,'staticobjects/lighting/ceiling_torch_any_flaming01',0),(3194,3194,'staticobjects/lighting/floor_torch_any_flaming01',0),(3195,3195,'staticobjects/lighting/floor_torch_any_flaming02',0),(3196,3196,'staticobjects/lighting/floor_torch_any_horizontal01',0),(3197,3197,'staticobjects/lighting/wall_torch_any_flaming01',0),(3198,3198,'staticobjects/lighting/wall_torch_any_palm01',0),(3199,3199,'staticobjects/maps/floor_globe_any_map01',0),(3200,3200,'staticobjects/pictures/wall_portrait_human_girl01',0),(3201,3201,'staticobjects/pictures/wall_portrait_human_girl02',0),(3202,3202,'staticobjects/pictures/wall_portrait_human_girl03',0),(3203,3203,'staticobjects/pictures/wall_portrait_human_girl04',0),(3204,3204,'staticobjects/pictures/wall_portrait_human_girl05',0),(3205,3205,'staticobjects/pictures/wall_portrait_human_girl06',0),(3206,3206,'staticobjects/pictures/wall_portrait_human_girl07',0),(3207,3207,'staticobjects/podium/floor_podium_any_chanting01',0),(3208,3208,'staticobjects/racks/floor_rack_any_firewood01',0),(3209,3209,'staticobjects/riser/floor_riser_human_wood01',0),(3210,3210,'staticobjects/riser/floor_riser_human_wood02',0),(3211,3211,'staticobjects/rugs/floor_rug_any_ornate01',0),(3212,3212,'staticobjects/sacks/floor_sack_any_flour01',0),(3213,3213,'staticobjects/scrolls/floor_scroll_any_cazic01',0),(3214,3214,'staticobjects/scrolls/floor_scroll_any_cazic02',0),(3215,3215,'staticobjects/scrolls/floor_scroll_any_cazic03',0),(3216,3216,'staticobjects/scrolls/floor_scroll_any_cazic04',0),(3217,3217,'staticobjects/scrolls/floor_scroll_any_plain01',0),(3218,3218,'staticobjects/scrolls/floor_scroll_any_plain02',0),(3219,3219,'staticobjects/scrolls/floor_scroll_any_plain03',0),(3220,3220,'staticobjects/shop/floor_window_any_teller01',0),(3221,3221,'staticobjects/statues/wall_statue_any_stoneface01',0),(3222,3222,'staticobjects/tables/floor_chesstable_human_ornate01',0),(3223,3223,'staticobjects/tables/floor_gametable_gnome_round01',0),(3224,3224,'staticobjects/tables/floor_gametable_gnome_round02',0),(3225,3225,'staticobjects/tables/floor_gametable_human_card01',0),(3226,3226,'staticobjects/tables/floor_gametable_human_missingleg01',0),(3227,3227,'staticobjects/tables/floor_gametable_human_missingleg02',0),(3228,3228,'staticobjects/tables/floor_gametable_human_ornate01',0),(3229,3229,'staticobjects/tables/floor_gametable_human_round01',0),(3230,3230,'staticobjects/tables/floor_gametable_human_round02',0),(3231,3231,'staticobjects/tools/floor_grindingwheel_any_wood01',0),(3232,3232,'staticobjects/tools/floor_scale_any_table01',0),(3233,3233,'staticobjects/tools/floor_tools_any_torture01',0),(3234,3234,'staticobjects/tools/floor_tools_any_torture02',0),(3235,3235,'staticobjects/tools/floor_tool_any_compass01',0),(3236,3236,'staticobjects/tools/floor_tool_any_rollingpin01',0),(3237,3237,'staticobjects/tools/wall_spoon_any_wooden01',0),(3238,3238,'staticobjects/torture_chamber/wall_shackes_any_plain01',0),(3239,3239,'staticobjects/weapons/floor_cannonball_any_ballistabolt01',0),(3240,3240,'accessories/wieldable_items/weapons/great_sword/flamberge/flamberge001_plain',0),(3241,3241,'accessories/wieldable_items/weapons/great_sword/flamberge/flamberge001_rusty',0),(3242,3242,'accessories/wieldable_items/weapons/great_sword/tulwar/tulwar001_rusty',0),(3243,3243,'accessories/wieldable_items/weapons/rapier/saber/saber001_plain',0),(3244,3244,'accessories/wieldable_items/weapons/rapier/saber/saber001_rusty',0),(3245,3245,'accessories/wieldable_items/weapons/sword/long_sword/long_sword001_rusty',0),(3246,3246,'accessories/wieldable_items/weapons/sword/long_sword/long_sword002_plain',0),(3247,3247,'accessories/wieldable_items/weapons/talisman/holy_symbol/holy_symbol001_plain',0),(3248,3248,'accessories/wieldable_items/weapons/talisman/holy_symbol/holy_symbol001_rusty',0),(3249,3249,'accessories/wieldable_items/weapons/talisman/tablet/tablet001_rusty',0),(3250,3250,'accessories/wieldable_items/weapons/throwing_weapons/throwing_hammer/throwing_hammer001_plain',0),(3251,3251,'accessories/wieldable_items/weapons/throwing_weapons/throwing_hammer/throwing_hammer001_rusty',0),(3252,3252,'staticobjects/gnomish_devices/globe_device',0),(3253,3253,'staticobjects/light_sources_player_housing_only/wall_sewer_torch_01',0),(3254,3254,'accessories/wieldable_items/shields/buckler_shield/metal_buckler/metal_buckler001_runic',0),(3255,3255,'accessories/wieldable_items/shields/buckler_shield/metal_buckler/metal_buckler001_rusty',0),(3256,3256,'accessories/wieldable_items/shields/buckler_shield/streatched_leather_buckler/streatched_leather_buckler001_ornate',0),(3257,3257,'accessories/wieldable_items/shields/buckler_shield/streatched_leather_buckler/streatched_leather_buckler001_rusty',0),(3258,3258,'accessories/wieldable_items/shields/buckler_shield/wooden_buckler/wooden_buckler001_ornate',0),(3259,3259,'accessories/wieldable_items/shields/buckler_shield/wooden_buckler/wooden_buckler001_rusty',0),(3260,3260,'accessories/wieldable_items/shields/kite_shield/kite_shield_freeport001',0),(3261,3261,'accessories/wieldable_items/shields/kite_shield/metal_kite/metal_kite_shield001_plain',0),(3262,3262,'accessories/wieldable_items/shields/kite_shield/metal_kite/metal_kite_shield001_runic',0),(3263,3263,'accessories/wieldable_items/shields/kite_shield/metal_kite/metal_kite_shield001_rusty',0),(3264,3264,'accessories/wieldable_items/shields/kite_shield/wooden_kite/wooden_kite_shield001_plain',0),(3265,3265,'accessories/wieldable_items/shields/kite_shield/wooden_kite/wooden_kite_shield001_runic',0),(3266,3266,'accessories/wieldable_items/shields/kite_shield/wooden_kite/wooden_kite_shield001_rusty',0),(3267,3267,'accessories/wieldable_items/shields/round_shield/metal_etched_round/round_shield_etched001_ornate',0),(3268,3268,'accessories/wieldable_items/shields/round_shield/metal_etched_round/round_shield_etched001_runic',0),(3269,3269,'accessories/wieldable_items/shields/round_shield/metal_etched_round/round_shield_etched001_rusty',0),(3270,3270,'accessories/wieldable_items/shields/round_shield/wooden_round/wooden_round_shield001_ornate',0),(3271,3271,'accessories/wieldable_items/shields/round_shield/wooden_round/wooden_round_shield001_rusty',0),(3272,3272,'accessories/wieldable_items/shields/tower_shield/metal_tower_shield/metal_tower_shield001_plain',0),(3273,3273,'accessories/wieldable_items/shields/tower_shield/wooden_tower_shield/wooden_tower_shield001_plain',0),(3274,3274,'accessories/wieldable_items/shields/tower_shield/wooden_tower_shield/wooden_tower_shield001_runic',0),(3275,3275,'accessories/wieldable_items/shields/tower_shield/wooden_tower_shield/wooden_tower_shield001_rusty',0),(3276,3276,'accessories/wieldable_items/weapons/great_sword/greatsword/greatsword001_plain',0),(3277,3277,'accessories/wieldable_items/weapons/great_sword/greatsword/greatsword001_rusty',0),(3278,3278,'accessories/wieldable_items/weapons/hammer/sceptre/sceptre001_plain',0),(3279,3279,'accessories/wieldable_items/weapons/hammer/sceptre/sceptre001_runic',0),(3280,3280,'accessories/wieldable_items/weapons/hammer/sceptre/sceptre002_ornate',0),(3281,3281,'accessories/wieldable_items/weapons/hammer/sceptre/sceptre003_rusty',0),(3282,3282,'accessories/wearable_items/tradesman/clothing/ornateshinygold/sleeves',0),(3283,3283,'accessories/wearable_items/tradesman/clothing/plainbluelacey/sleeves',0),(3284,3284,'accessories/wearable_items/tradesman/common/low/sleeves',0),(3285,3285,'accessories/wearable_items/tradesman/common/medium/sleeves',0),(3286,3286,'accessories/wieldable_items/weapons/dagger/dirk/dirk001_rusty',0),(3287,3287,'accessories/wieldable_items/weapons/dagger/kris/kris001_plain',0),(3288,3288,'accessories/wieldable_items/weapons/dagger/kris/kris001_rusty',0),(3289,3289,'accessories/wieldable_items/weapons/dagger/sai/sai001_rusty',0),(3290,3290,'accessories/wieldable_items/weapons/fist/cestus/spiked_cestus001_rusty',0),(3291,3291,'accessories/wieldable_items/weapons/great_hammer/knotted_club/knotted_club001_runic',0),(3292,3292,'accessories/wieldable_items/weapons/great_hammer/knotted_club/knotted_club002_rusty',0),(3293,3293,'accessories/wieldable_items/weapons/talisman/idol/idol001_rusty',0),(3294,3294,'ec/npc/fire_soldier',0),(3295,3295,'ec/npc/illusionary_soldier',0),(3296,3296,'accessories/wieldable_items/weapons/dagger/stiletto/stiletto001_plain',0),(3297,3297,'accessories/wieldable_items/weapons/talisman/orb/orb001_plain',0),(3298,3298,'accessories/wieldable_items/weapons/talisman/orb/orb001_rusty',0),(3299,3299,'accessories/wieldable_items/weapons/talisman/wand/wand001_plain',0),(3300,3300,'accessories/wieldable_items/weapons/talisman/wand/wand001_rusty',0),(3301,3301,'staticobjects/artisan/floor_bowl_human_jewel01',0),(3302,3302,'staticobjects/artisan/floor_crucible_human_artisan01',0),(3303,3303,'staticobjects/artisan/floor_easel_human_painting01',0),(3304,3304,'staticobjects/artisan/floor_pot_human_iron01',0),(3305,3305,'staticobjects/artisan/floor_pot_human_iron02',0),(3306,3306,'staticobjects/barrels/floor_barrel_human_broken01',0),(3307,3307,'staticobjects/barrels/floor_barrel_human_broken02',0),(3308,3308,'staticobjects/barrels/floor_barrel_human_broken03',0),(3309,3309,'staticobjects/barrels/floor_barrel_human_broken04',0),(3310,3310,'staticobjects/barrels/floor_barrel_human_broken05',0),(3311,3311,'staticobjects/barrels/floor_barrel_human_broken06',0),(3312,3312,'staticobjects/benches/floor_bench_human_broken01',0),(3313,3313,'staticobjects/benches/floor_bench_human_broken02',0),(3314,3314,'staticobjects/blacksmith/floor_anvil_human_blacksmith01',0),(3315,3315,'staticobjects/blacksmith/floor_anvil_human_blacksmith02',0),(3316,3316,'staticobjects/blacksmith/floor_anvil_human_large01',0),(3317,3317,'staticobjects/blacksmith/floor_forge_human_blacksmith01',0),(3318,3318,'staticobjects/blacksmith/floor_forge_human_blacksmith02',0),(3319,3319,'staticobjects/blacksmith/floor_forge_human_blacksmith03',0),(3320,3320,'staticobjects/blacksmith/floor_grindingwheel_any_wood02',0),(3321,3321,'staticobjects/blacksmith/floor_tongs_human_iron01',0),(3322,3322,'staticobjects/books/floor_book_human_artisan01',0),(3323,3323,'staticobjects/books/floor_book_human_open02',0),(3324,3324,'staticobjects/chairs/floor_chair_human_broken01',0),(3325,3325,'staticobjects/chairs/floor_chair_human_broken02',0),(3326,3326,'staticobjects/chairs/floor_chair_human_broken03',0),(3327,3327,'staticobjects/chairs/floor_chair_human_broken04',0),(3328,3328,'staticobjects/chairs/floor_chair_human_broken05',0),(3329,3329,'staticobjects/chairs/floor_chair_human_broken06',0),(3330,3330,'staticobjects/coffins_and_sarcophagus/floor_sacophagus_human_nektropos01',0),(3331,3331,'staticobjects/coffins_and_sarcophagus/floor_sacophagus_human_nektropos02',0),(3332,3332,'staticobjects/coffins_and_sarcophagus/floor_sacophagus_human_nektropos03',0),(3333,3333,'staticobjects/coffins_and_sarcophagus/floor_sacophagus_human_nektropos04',0),(3334,3334,'staticobjects/coffins_and_sarcophagus/floor_sacophagus_human_nektropos05',0),(3335,3335,'staticobjects/containers/floor_bucket_human_iron01',0),(3336,3336,'staticobjects/containers/floor_bucket_human_iron02',0),(3337,3337,'staticobjects/containers/floor_trough_human_stable01',0),(3338,3338,'staticobjects/containers/floor_trough_human_stable02',0),(3339,3339,'staticobjects/containers/floor_trough_human_wood04',0),(3340,3340,'staticobjects/containers/floor_vase_elf_broken01',0),(3341,3341,'staticobjects/containers/floor_vase_elf_broken02',0),(3342,3342,'staticobjects/containers/floor_vase_elf_broken03',0),(3343,3343,'staticobjects/containers/floor_vase_elf_broken04',0),(3344,3344,'staticobjects/fireplace_items/floor_firering_human_stone01',0),(3345,3345,'staticobjects/fireplace_items/floor_rack_human_wood01',0),(3346,3346,'staticobjects/fireplace_items/floor_wood_human_stack01',0),(3347,3347,'staticobjects/fireplace_items/floor_wood_human_stack02',0),(3348,3348,'staticobjects/fireplace_items/floor_wood_human_stack03',0),(3349,3349,'staticobjects/fireplace_items/floor_wood_human_stack04',0),(3350,3350,'staticobjects/fireplace_items/floor_wood_human_stack05',0),(3351,3351,'staticobjects/gravestones/floor_gravestone_human_plain01',0),(3352,3352,'staticobjects/kitchen/floor_bowl_human_iron01',0),(3353,3353,'staticobjects/kitchen/floor_bowl_human_ornate01',0),(3354,3354,'staticobjects/kitchen/floor_bowl_human_ornate02',0),(3355,3355,'staticobjects/kitchen/floor_bowl_human_square01',0),(3356,3356,'staticobjects/kitchen/floor_bowl_human_square02',0),(3357,3357,'staticobjects/kitchen/floor_bowl_human_wood01',0),(3358,3358,'staticobjects/kitchen/floor_breadholder_human_wood01',0),(3359,3359,'staticobjects/kitchen/floor_bread_human_french01',0),(3360,3360,'staticobjects/kitchen/floor_bread_human_loaf01',0),(3361,3361,'staticobjects/kitchen/floor_chalice_human_plain01',0),(3362,3362,'staticobjects/kitchen/floor_fork_human_wood01',0),(3363,3363,'staticobjects/kitchen/floor_fork_human_wood02',0),(3364,3364,'staticobjects/kitchen/floor_kitchenpan_human_bake01',0),(3365,3365,'staticobjects/kitchen/floor_kitchenpan_human_bread01',0),(3366,3366,'staticobjects/kitchen/floor_kitchenpan_human_bread02',0),(3367,3367,'staticobjects/kitchen/floor_kitchenpan_human_muffin01',0),(3368,3368,'staticobjects/kitchen/floor_knife_human_butcher01',0),(3369,3369,'staticobjects/kitchen/floor_knife_human_butcher02',0),(3370,3370,'staticobjects/kitchen/floor_knife_human_butcher03',0),(3371,3371,'staticobjects/kitchen/floor_knife_human_butcher04',0),(3372,3372,'staticobjects/kitchen/floor_knife_human_kitchen01',0),(3373,3373,'staticobjects/kitchen/floor_knife_human_kitchen02',0),(3374,3374,'staticobjects/kitchen/floor_knife_human_kitchen03',0),(3375,3375,'staticobjects/kitchen/floor_muffin_human_single01',0),(3376,3376,'staticobjects/kitchen/floor_muffin_human_stack01',0),(3377,3377,'staticobjects/kitchen/floor_mug_human_ornate01',0),(3378,3378,'staticobjects/kitchen/floor_mug_human_ornate02',0),(3379,3379,'staticobjects/kitchen/floor_mug_human_ornate03',0),(3380,3380,'staticobjects/kitchen/floor_mug_human_ornate04',0),(3381,3381,'staticobjects/kitchen/floor_mug_human_ornate05',0),(3382,3382,'staticobjects/kitchen/floor_mug_human_plain01',0),(3383,3383,'staticobjects/kitchen/floor_mug_human_plain02',0),(3384,3384,'staticobjects/kitchen/floor_pan_human_bake01',0),(3385,3385,'staticobjects/kitchen/floor_pan_human_bread01',0),(3386,3386,'staticobjects/kitchen/floor_pan_human_bread02',0),(3387,3387,'staticobjects/kitchen/floor_pan_human_muffin01',0),(3388,3388,'staticobjects/kitchen/floor_pie_human_single01',0),(3389,3389,'staticobjects/kitchen/floor_pitcher_human_ornate01',0),(3390,3390,'staticobjects/kitchen/floor_pitcher_human_ornate02',0),(3391,3391,'staticobjects/kitchen/floor_pitcher_human_plain01',0),(3392,3392,'staticobjects/kitchen/floor_pitcher_human_plain02',0),(3393,3393,'staticobjects/kitchen/floor_plate_human_muffin01',0),(3394,3394,'staticobjects/kitchen/floor_pot_human_cooking01',0),(3395,3395,'staticobjects/kitchen/floor_pot_human_cooking02',0),(3396,3396,'staticobjects/kitchen/floor_pot_human_cooking03',0),(3397,3397,'staticobjects/kitchen/floor_pot_human_cooking04',0),(3398,3398,'staticobjects/kitchen/floor_pot_human_cooking05',0),(3399,3399,'staticobjects/kitchen/floor_rollingpin_human_kitchen01',0),(3400,3400,'staticobjects/kitchen/floor_rollingpin_human_kitchen02',0),(3401,3401,'staticobjects/kitchen/floor_spatula_human_wooden01',0),(3402,3402,'staticobjects/kitchen/floor_spoon_human_kitchen01',0),(3403,3403,'staticobjects/kitchen/floor_spoon_human_kitchen02',0),(3404,3404,'staticobjects/kitchen/floor_stove_human_kitchen01',0),(3405,3405,'staticobjects/kitchen/floor_stove_human_kitchen02',0),(3406,3406,'staticobjects/lab/floor_beaker_human_lab01',0),(3407,3407,'staticobjects/lab/floor_beaker_human_lab02',0),(3408,3408,'staticobjects/lab/floor_crucible_human_lab01',0),(3409,3409,'staticobjects/lab/floor_crucible_human_lab02',0),(3410,3410,'staticobjects/lab/floor_distillery_human_crucible01',0),(3411,3411,'staticobjects/lab/floor_distillery_human_crucible02',0),(3412,3412,'staticobjects/lab/floor_distillery_human_kitchen01',0),(3413,3413,'staticobjects/lab/floor_distillery_human_lab01',0),(3414,3414,'staticobjects/lab/floor_distillery_human_lab02',0),(3415,3415,'staticobjects/lab/floor_distillery_human_lab03',0),(3416,3416,'staticobjects/lab/floor_distillery_human_lab04',0),(3417,3417,'staticobjects/lab/floor_egg_human_crystal01',0),(3418,3418,'staticobjects/lab/floor_egg_human_crystal02',0),(3419,3419,'staticobjects/lab/floor_egg_human_crystal03',0),(3420,3420,'staticobjects/lab/floor_stand_human_egg01',0),(3421,3421,'staticobjects/lab/floor_stand_human_egg02',0),(3422,3422,'staticobjects/lab/floor_stand_human_egg03',0),(3423,3423,'staticobjects/lab/floor_stand_human_egg04',0),(3424,3424,'staticobjects/lab/floor_table_human_lab01',0),(3425,3425,'staticobjects/lab/floor_table_human_lab02',0),(3426,3426,'staticobjects/lab/floor_tool_human_compass01',0),(3427,3427,'staticobjects/lighting/ceiling_chandelier_human_iron01',0),(3428,3428,'staticobjects/lighting/ceiling_chandelier_human_militia01',0),(3429,3429,'staticobjects/lighting/ceiling_chandelier_human_ornate01',0),(3430,3430,'staticobjects/lighting/ceiling_chandelier_human_ornate02',0),(3431,3431,'staticobjects/lighting/ceiling_chandelier_human_plain01',0),(3432,3432,'staticobjects/lighting/ceiling_chandelier_human_plain02',0),(3433,3433,'staticobjects/lighting/ceiling_chandelier_human_plain03',0),(3434,3434,'staticobjects/lighting/ceiling_lamp_human_ornate01',0),(3435,3435,'staticobjects/lighting/ceiling_lamp_human_ornate02',0),(3436,3436,'staticobjects/lighting/ceiling_lamp_human_plain01',0),(3437,3437,'staticobjects/lighting/ceiling_lamp_human_plain02',0),(3438,3438,'staticobjects/lighting/ceiling_lantern_human_hanging01',0),(3439,3439,'staticobjects/lighting/floor_candelabra_human_ornate01',0),(3440,3440,'staticobjects/lighting/floor_candelabra_human_plain01',0),(3441,3441,'staticobjects/lighting/floor_candleholder_human_ornate01',0),(3442,3442,'staticobjects/lighting/floor_candleholder_human_ornate02',0),(3443,3443,'staticobjects/lighting/floor_candleholder_human_ornate03',0),(3444,3444,'staticobjects/lighting/floor_candleholder_human_ornate04',0),(3445,3445,'staticobjects/lighting/floor_candleholder_human_ornate05',0),(3446,3446,'staticobjects/lighting/floor_candleholder_human_plain01',0),(3447,3447,'staticobjects/lighting/floor_candleholder_human_plain02',0),(3448,3448,'staticobjects/lighting/floor_candleholder_human_plain03',0),(3449,3449,'staticobjects/lighting/floor_candles_human_group01',0),(3450,3450,'staticobjects/lighting/floor_candle_human_single01',0),(3451,3451,'staticobjects/lighting/floor_candle_human_single02',0),(3452,3452,'staticobjects/lighting/floor_candle_human_single03',0),(3453,3453,'staticobjects/lighting/floor_floorbrazier_human_mililtia01',0),(3454,3454,'staticobjects/lighting/floor_floorbrazier_human_plain01',0),(3455,3455,'staticobjects/lighting/floor_floorbrazier_human_plain02',0),(3456,3456,'staticobjects/lighting/floor_floorbrazier_human_stone01',0),(3457,3457,'staticobjects/lighting/floor_floorlamp_human_plain01',0),(3458,3458,'staticobjects/lighting/floor_lamppost_darkelf_globe01',0),(3459,3459,'staticobjects/lighting/floor_lamppost_darkelf_globe02',0),(3460,3460,'staticobjects/lighting/floor_lamppost_darkelf_globe03',0),(3461,3461,'staticobjects/lighting/floor_lamppost_darkelf_globe04',0),(3462,3462,'staticobjects/lighting/floor_lamppost_darkelf_wingskull01',0),(3463,3463,'staticobjects/lighting/floor_lamp_human_stoop01',0),(3464,3464,'staticobjects/lighting/floor_lantern_human_standing01',0),(3465,3465,'staticobjects/lighting/floor_pot_human_fire01',0),(3466,3466,'staticobjects/lighting/floor_tablebrazier_human_broken01',0),(3467,3467,'staticobjects/lighting/floor_tablebrazier_human_coal01',0),(3468,3468,'staticobjects/lighting/wall_lamp_human_hanging01',0),(3469,3469,'staticobjects/lighting/wall_sconce_human_iron01',0),(3470,3470,'staticobjects/lighting/wall_sconce_human_militia01',0),(3471,3471,'staticobjects/lighting/wall_sconce_human_ornate01',0),(3472,3472,'staticobjects/lighting/wall_sconce_human_ornate02',0),(3473,3473,'staticobjects/lighting/wall_sconce_human_ornate03',0),(3474,3474,'staticobjects/lighting/wall_sconce_human_plain01',0),(3475,3475,'staticobjects/lighting/wall_sconce_human_plain02',0),(3476,3476,'staticobjects/lighting/wall_sconce_human_plain03',0),(3477,3477,'staticobjects/monuments/floor_fountain_human_dragonhead01',0),(3478,3478,'staticobjects/monuments/floor_fountain_human_griffin01',0),(3479,3479,'staticobjects/monuments/floor_fountain_human_griffin02',0),(3480,3480,'staticobjects/monuments/floor_fountain_human_griffin03',0),(3481,3481,'staticobjects/monuments/floor_marker_human_eaglehead01',0),(3482,3482,'staticobjects/monuments/floor_marker_human_generic01',0),(3483,3483,'staticobjects/monuments/floor_marker_human_generic02',0),(3484,3484,'staticobjects/monuments/floor_marker_human_generic03',0),(3485,3485,'staticobjects/monuments/floor_marker_human_head01',0),(3486,3486,'staticobjects/monuments/floor_marker_human_head02',0),(3487,3487,'staticobjects/monuments/floor_marker_human_head03',0),(3488,3488,'staticobjects/monuments/floor_marker_human_pail01',0),(3489,3489,'staticobjects/monuments/floor_pool_human_recreational01',0),(3490,3490,'staticobjects/musical/floor_chime_human_bone01',0),(3491,3491,'staticobjects/musical/floor_drumhammers_human_plain01',0),(3492,3492,'staticobjects/musical/floor_drumhammers_human_plain02',0),(3493,3493,'staticobjects/musical/floor_drum_human_plain01',0),(3494,3494,'staticobjects/musical/floor_mandolin_human_wood01',0),(3495,3495,'staticobjects/musical/floor_xylophone_human_bone01',0),(3496,3496,'staticobjects/papers/floor_paper_human_blank01',0),(3497,3497,'staticobjects/papers/floor_paper_human_stack01',0),(3498,3498,'staticobjects/papers/floor_paper_human_written01',0),(3499,3499,'staticobjects/papers/floor_paper_human_written02',0),(3500,3500,'staticobjects/pen_and_ink/floor_inkwell_human_ornate01',0),(3501,3501,'staticobjects/pen_and_ink/floor_inkwell_human_ornate02',0),(3502,3502,'staticobjects/pen_and_ink/floor_inkwell_human_plain01',0),(3503,3503,'staticobjects/pen_and_ink/floor_inkwell_human_plain02',0),(3504,3504,'staticobjects/pen_and_ink/floor_pen_human_bone01',0),(3505,3505,'staticobjects/pictures/wall_painting_human_girl01',0),(3506,3506,'staticobjects/pictures/wall_painting_human_girl02',0),(3507,3507,'staticobjects/pictures/wall_painting_human_girl03',0),(3508,3508,'staticobjects/pictures/wall_painting_human_girl04',0),(3509,3509,'staticobjects/pictures/wall_painting_human_girl05',0),(3510,3510,'staticobjects/pictures/wall_painting_human_girl06',0),(3511,3511,'staticobjects/pictures/wall_painting_human_girl07',0),(3512,3512,'staticobjects/rugs/floor_carpet_human_ornate01',0),(3513,3513,'staticobjects/rugs/floor_carpet_human_ornate02',0),(3514,3514,'staticobjects/rugs/floor_carpet_human_ornate03',0),(3515,3515,'staticobjects/rugs/floor_rug_human_fancy01',0),(3516,3516,'staticobjects/rugs/floor_rug_human_fancy02',0),(3517,3517,'staticobjects/rugs/floor_rug_human_fancy03',0),(3518,3518,'staticobjects/rugs/floor_rug_human_fancy04',0),(3519,3519,'staticobjects/rugs/floor_rug_human_fancy05',0),(3520,3520,'staticobjects/rugs/floor_rug_human_fancy06',0),(3521,3521,'staticobjects/rugs/floor_rug_human_fancy07',0),(3522,3522,'staticobjects/rugs/floor_rug_human_fancy08',0),(3523,3523,'staticobjects/rugs/floor_rug_human_fancy09',0),(3524,3524,'staticobjects/rugs/floor_rug_human_fancy10',0),(3525,3525,'staticobjects/rugs/floor_rug_human_fancy11',0),(3526,3526,'staticobjects/rugs/floor_rug_human_fancy12',0),(3527,3527,'staticobjects/rugs/floor_rug_human_fancy13',0),(3528,3528,'staticobjects/rugs/floor_rug_human_ornate01',0),(3529,3529,'staticobjects/rugs/floor_rug_human_ornate02',0),(3530,3530,'staticobjects/rugs/floor_rug_human_ornate03',0),(3531,3531,'staticobjects/sacks/floor_sack_human_flour01',0),(3532,3532,'staticobjects/sacks/floor_sack_human_flour02',0),(3533,3533,'staticobjects/sacks/floor_sack_human_flour03',0),(3534,3534,'staticobjects/sacks/floor_sack_human_flour04',0),(3535,3535,'staticobjects/sacks/floor_sack_human_grain01',0),(3536,3536,'staticobjects/sacks/floor_sack_human_grain02',0),(3537,3537,'staticobjects/sacks/floor_sack_human_grain03',0),(3538,3538,'staticobjects/sacks/floor_sack_human_grain04',0),(3539,3539,'staticobjects/sacks/floor_sack_human_large01',0),(3540,3540,'staticobjects/sacks/floor_sack_human_large02',0),(3541,3541,'staticobjects/sacks/floor_sack_human_large03',0),(3542,3542,'staticobjects/sacks/floor_sack_human_large04',0),(3543,3543,'staticobjects/sacks/floor_sack_human_large05',0),(3544,3544,'staticobjects/sacks/floor_sack_human_large06',0),(3545,3545,'staticobjects/sacks/floor_sack_human_small01',0),(3546,3546,'staticobjects/sacks/floor_sack_human_small02',0),(3547,3547,'staticobjects/sacks/floor_sack_human_small03',0),(3548,3548,'staticobjects/scrolls/floor_scrollpaper_human_stack01',0),(3549,3549,'staticobjects/scrolls/floor_scroll_human_ornate01',0),(3550,3550,'staticobjects/scrolls/floor_scroll_human_ornate02',0),(3551,3551,'staticobjects/scrolls/floor_scroll_human_ornate03',0),(3552,3552,'staticobjects/scrolls/floor_scroll_human_paper01',0),(3553,3553,'staticobjects/scrolls/floor_scroll_human_stack01',0),(3554,3554,'staticobjects/shelves/wall_shelf_human_double04',0),(3555,3555,'staticobjects/shelves/wall_shelf_human_double05',0),(3556,3556,'staticobjects/shelves/wall_shelf_human_hooks01',0),(3557,3557,'staticobjects/shelves/wall_shelf_human_ironwood01',0),(3558,3558,'staticobjects/shelves/wall_shelf_human_ironwood02',0),(3559,3559,'staticobjects/shelves/wall_shelf_human_militia01',0),(3560,3560,'staticobjects/shelves/wall_shelf_human_multideck01',0),(3561,3561,'staticobjects/shelves/wall_shelf_human_multideck02',0),(3562,3562,'staticobjects/shelves/wall_shelf_human_ornate02',0),(3563,3563,'staticobjects/shelves/wall_shelf_human_ornate03',0),(3564,3564,'staticobjects/shelves/wall_shelf_human_pegs01',0),(3565,3565,'staticobjects/shelves/wall_shelf_human_plain01',0),(3566,3566,'staticobjects/shelves/wall_shelf_human_plain02',0),(3567,3567,'staticobjects/shop/floor_cabinet_human_display01',0),(3568,3568,'staticobjects/shop/floor_cabinet_human_display02',0),(3569,3569,'staticobjects/stable_items/ceiling_hook_human_hanging01',0),(3570,3570,'staticobjects/stable_items/floor_cultivator_human_stable01',0),(3571,3571,'staticobjects/stable_items/floor_cultivator_human_stable02',0),(3572,3572,'staticobjects/stable_items/floor_haybail_human_stable01',0),(3573,3573,'staticobjects/stable_items/floor_haybail_human_stack01',0),(3574,3574,'staticobjects/stable_items/floor_rope_human_stable01',0),(3575,3575,'staticobjects/stable_items/wall_hook_human_iron01',0),(3576,3576,'staticobjects/stable_items/wall_horseshoe_human_stable01',0),(3577,3577,'staticobjects/stable_items/wall_rein_human_stable01',0),(3578,3578,'staticobjects/stable_items/wall_rein_human_stable02',0),(3579,3579,'staticobjects/stable_items/wall_rope_human_stable01',0),(3580,3580,'staticobjects/stable_items/wall_rope_human_stable02',0),(3581,3581,'staticobjects/statues/death',0),(3582,3582,'staticobjects/statues/valkyrie',0),(3583,3583,'staticobjects/tables/floor_brokentable_darkelf_hood01',0),(3584,3584,'staticobjects/tables/floor_brokentable_elf_hood01',0),(3585,3585,'staticobjects/tables/floor_desk_gnome_wood01',0),(3586,3586,'staticobjects/tables/floor_endtable_human_mahogany01',0),(3587,3587,'staticobjects/tables/floor_endtable_human_wood01',0),(3588,3588,'staticobjects/tables/floor_table_darkelf_broken01',0),(3589,3589,'staticobjects/tables/floor_table_darkelf_broken02',0),(3590,3590,'staticobjects/tables/floor_table_darkelf_broken03',0),(3591,3591,'staticobjects/tables/floor_table_darkelf_broken04',0),(3592,3592,'staticobjects/tables/floor_table_elf_broken01',0),(3593,3593,'staticobjects/tables/floor_table_elf_broken02',0),(3594,3594,'staticobjects/tables/floor_table_elf_broken03',0),(3595,3595,'staticobjects/tables/floor_table_elf_broken04',0),(3596,3596,'staticobjects/tables/floor_table_gnome_ornate01',0),(3597,3597,'staticobjects/tables/floor_table_human_bedside03',0),(3598,3598,'staticobjects/tables/floor_table_human_desk03',0),(3599,3599,'staticobjects/tables/floor_table_human_dining01',0),(3600,3600,'staticobjects/tables/floor_table_human_fancy01',0),(3601,3601,'staticobjects/tables/floor_table_human_fancy02',0),(3602,3602,'staticobjects/tables/floor_table_human_militia01',0),(3603,3603,'staticobjects/tables/floor_table_human_militia02',0),(3604,3604,'staticobjects/tables/floor_table_human_ornate05',0),(3605,3605,'staticobjects/tables/floor_table_human_ornate06',0),(3606,3606,'staticobjects/tables/floor_table_human_ornate07',0),(3607,3607,'staticobjects/tables/floor_table_human_plain05',0),(3608,3608,'staticobjects/tables/floor_table_human_plain06',0),(3609,3609,'staticobjects/tables/floor_table_human_plank01',0),(3610,3610,'staticobjects/tables/floor_table_human_plank02',0),(3611,3611,'staticobjects/tables/floor_table_human_riser01',0),(3612,3612,'staticobjects/tables/floor_table_human_twisted01',0),(3613,3613,'staticobjects/tables/floor_table_human_twisted02',0),(3614,3614,'staticobjects/tables/floor_table_human_wood01',0),(3615,3615,'staticobjects/tables/floor_table_human_wood02',0),(3616,3616,'staticobjects/tables/floor_table_human_wood03',0),(3617,3617,'staticobjects/tables/floor_table_human_wood04',0),(3618,3618,'staticobjects/tables/floor_table_human_wood05',0),(3619,3619,'staticobjects/tables/floor_table_human_workbench01',0),(3620,3620,'staticobjects/tableware/floor_fork_human_dining01',0),(3621,3621,'staticobjects/tableware/floor_knife_human_dining01',0),(3622,3622,'staticobjects/tableware/floor_mug_human_wood01',0),(3623,3623,'staticobjects/tableware/floor_pitcher_human_wood01',0),(3624,3624,'staticobjects/tableware/floor_spoon_human_dining01',0),(3625,3625,'staticobjects/tools/floor_hammer_human_blacksmith01',0),(3626,3626,'staticobjects/tools/floor_hammer_human_crafting01',0),(3627,3627,'staticobjects/tools/floor_handsaw_human_crafting01',0),(3628,3628,'staticobjects/tools/floor_iron_human_plain01',0),(3629,3629,'staticobjects/tools/floor_potterywheel_human_crafting01',0),(3630,3630,'staticobjects/tools/floor_scale_human_table01',0),(3631,3631,'accessories/wieldable_items/weapons/talisman/doll/doll001_plain',0),(3632,3632,'accessories/wieldable_items/weapons/talisman/doll/doll001_rusty',0),(3633,3633,'accessories/wieldable_items/weapons/talisman/book/book001_plain',0),(3634,3634,'accessories/wieldable_items/weapons/talisman/stringed_instrument/string_instrument001_plain',0),(3635,3635,'accessories/wieldable_items/weapons/talisman/stringed_instrument/string_instrument001_rusty',0),(3636,3636,'ec/npc/mistman',0),(3637,3637,'accessories/wearable_items/tradesman/clothing/plain_green_vest/chest',0),(3638,3638,'accessories/wearable_items/tradesman/clothing/plain_green_vest/legs',0),(3639,3639,'accessories/wearable_items/tradesman/clothing/plain_green_vest/arms',0),(3640,3640,'accessories/wieldable_items/weapons/dagger/wizards_dagger/wizards_dagger001_runic',0),(3641,3641,'accessories/wieldable_items/weapons/dagger/wizards_dagger/wizards_dagger002_plain',0),(3642,3642,'accessories/wieldable_items/weapons/dagger/wizards_dagger/wizards_dagger002_rusty',0),(3643,3643,'accessories/wieldable_items/weapons/talisman/drum/drum001_plain',0),(3644,3644,'accessories/wieldable_items/weapons/talisman/drum/drum001_rusty',0),(3645,3645,'creatures/tu/fire_soldier_tu',0),(3646,3646,'creatures/tu/illusionary_soldier_tu',0),(3647,3647,'creatures/tu/mistman_tu',0),(3648,3648,'staticobjects/halloween/vel_rock_feedstone_skull',1096),(3649,3649,'accessories/wieldable_items/weapons/throwing_weapons/boomerang/boomerang001_plain',0),(3650,3650,'accessories/wieldable_items/weapons/throwing_weapons/boomerang/boomerang001_rusty',0),(3651,3651,'accessories/wieldable_items/weapons/throwing_weapons/spike/spike001_plain',0),(3652,3652,'accessories/wieldable_items/weapons/throwing_weapons/spike/spike001_rusty',0),(3653,3653,'creatures/monsters/vox_ice',0),(3654,3654,'ec/npc/skeleton_greenfire',0),(3655,3655,'staticobjects/scrolls/wantedposter',0),(3656,3656,'accessories/wieldable_items/weapons/staff/bo_staff/bo_staff001_rusty',0),(3657,3657,'accessories/wieldable_items/weapons/staff/fighting_batons/fighting_batons001_plain',0),(3658,3658,'accessories/wieldable_items/weapons/staff/fighting_batons/fighting_batons001_rusty',0),(3659,3659,'accessories/wieldable_items/weapons/staff/great_staff/great_staff002_rusty',0),(3660,3660,'accessories/wieldable_items/weapons/staff/scorcerers_staff/scorcerers_staff001_plain',0),(3661,3661,'accessories/wieldable_items/weapons/staff/scorcerers_staff/scorcerers_staff002_rusty',0),(3662,3662,'accessories/wieldable_items/weapons/throwing_weapons/dart/dart001_plain',0),(3663,3663,'accessories/wieldable_items/weapons/throwing_weapons/dart/dart001_rusty',0),(3664,3664,'accessories/wearable_items/tradesman/clothing/smith/common_good/chest',0),(3665,3665,'accessories/wearable_items/tradesman/clothing/smith/common_good/feet',0),(3666,3666,'accessories/wearable_items/tradesman/clothing/smith/common_good/hands',0),(3667,3667,'accessories/wearable_items/tradesman/clothing/smith/common_good/legs',0),(3668,3668,'accessories/wearable_items/tradesman/clothing/smith/common_good/skirt',0),(3669,3669,'accessories/wieldable_items/weapons/spear/javelin/javeling001_rusty',0),(3670,3670,'accessories/wieldable_items/weapons/spear/ornate_spear/ornate_spear001_plain',0),(3671,3671,'accessories/wieldable_items/weapons/spear/ornate_spear/ornate_spear001_rusty',0),(3672,3672,'accessories/wieldable_items/weapons/spear/short_spear/short_spear001_rusty',0),(3673,3673,'accessories/wieldable_items/weapons/spear/spear/spear001_rusty',0),(3674,3674,'accessories/wieldable_items/weapons/spear/tribal_spear/tribal_spear001_rusty',0),(3675,3675,'accessories/wieldable_items/weapons/staff/quarterstaff/quarterstaff002_rusty',0),(3676,3676,'accessories/wieldable_items/weapons/sword/kukri_sword/kukri_sword001_plain',0),(3677,3677,'accessories/wieldable_items/weapons/throwing_weapons/boomerang/boomerang001_ornate',0),(3678,3678,'accessories/wieldable_items/weapons/throwing_weapons/boomerang/boomerang001_runic',0),(3679,3679,'accessories/wieldable_items/weapons/throwing_weapons/glass_vial/glass_vial001_plain',0),(3680,3680,'accessories/wieldable_items/weapons/throwing_weapons/glass_vial/glass_vial001_rusty',0),(3681,3681,'accessories/wieldable_items/weapons/throwing_weapons/glass_vial/glass_vial002_ornate',0),(3682,3682,'accessories/wieldable_items/weapons/throwing_weapons/glass_vial/glass_vial002_runic',0),(3683,3683,'creatures/monsters/armadillo_ghost',0),(3684,3684,'creatures/monsters/badger_ghost',0),(3685,3685,'creatures/monsters/barracuda_ghost',0),(3686,3686,'creatures/monsters/cow_ghost',0),(3687,3687,'creatures/monsters/dervish_chaosform',0),(3688,3688,'creatures/monsters/dervish_ghost',0),(3689,3689,'creatures/monsters/frog_ghost',0),(3690,3690,'creatures/monsters/gargoyle_ghost',0),(3691,3691,'creatures/monsters/goo_chaosform',0),(3692,3692,'creatures/monsters/goo_ghost',0),(3693,3693,'creatures/monsters/goo_slime_chaosform',0),(3694,3694,'creatures/monsters/ground_dragon_ghost',0),(3695,3695,'creatures/monsters/hawk_ghost_red',0),(3696,3696,'creatures/monsters/hyena_ghost',0),(3697,3697,'creatures/monsters/iron_guardian_ghost',0),(3698,3698,'creatures/monsters/mantaray_ghost',0),(3699,3699,'creatures/monsters/manticore_ghost',0),(3700,3700,'creatures/monsters/pihrana_ghost',0),(3701,3701,'creatures/monsters/rat_ghost',0),(3702,3702,'creatures/monsters/root_horror_ghost',0),(3703,3703,'creatures/monsters/rustmonster_ghost',0),(3704,3704,'creatures/monsters/slug_ghost',0),(3705,3705,'creatures/monsters/snake_ghost',0),(3706,3706,'creatures/monsters/tiger_white',0),(3707,3707,'creatures/monsters/treeent_ghost',0),(3708,3708,'staticobjects/halloween/wc_gravemarker04',1096),(3709,3709,'creatures/monsters/wasp_ghost',0),(3710,3710,'creatures/monsters/willowisp_cloudofsouls',0),(3711,3711,'creatures/monsters/wolf_white',0),(3712,3712,'creatures/monsters/wolf_winter',0),(3713,3713,'creatures/mounts/carpet_ghost',0),(3714,3714,'staticobjects/weapons/dpo_tablet001_ornate',1096),(3715,3715,'staticobjects/weapons/dpo_tablet001_runic',1096),(3716,3716,'creatures/pets/element_order',0),(3717,3717,'creatures/pets/essence_chaos',0),(3718,3718,'creatures/tu/bixie_figher_ghost',0),(3719,3719,'creatures/tu/bixie_ghost',0),(3720,3720,'creatures/tu/bixie_worker_ghost',0),(3721,3721,'creatures/tu/dragonfly_faerie_ghost',0),(3722,3722,'creatures/tu/earth_elem_ghost',0),(3723,3723,'creatures/tu/gnoll_ghost',0),(3724,3724,'creatures/tu/livingstatue_ghost',0),(3725,3725,'creatures/tu/lizardman_ghost',0),(3726,3726,'creatures/tu/lizardman_shaman_ghost',0),(3727,3727,'creatures/tu/lizardman_warrior_ghost',0),(3728,3728,'creatures/tu/shadow',0),(3729,3729,'creatures/tu/succubus_ghost',0),(3730,3730,'creatures/tu/tentacleterror_crystal_ghost',0),(3731,3731,'creatures/tu/tentacleterror_ghost',0),(3732,3732,'creatures/tu/troglodyte_ghost',0),(3733,3733,'ec/npc/orcshaman_ghost',0),(3734,3734,'ec/npc/orc_ghost',0),(3735,3735,'ec/npc/skeleton_diseased',0),(3736,3736,'ec/npc/zombie_diseased',0),(3737,3737,'ec/npc/zombie_ghost',0),(3738,3738,'staticobjects/doors/fprt_academy_doubledoor_01',0),(3739,3739,'accessories/wieldable_items/weapons/throwing_weapons/dart/dart002_ornate',0),(3740,3740,'accessories/wieldable_items/weapons/throwing_weapons/dart/dart002_runic',0),(3741,3741,'accessories/wieldable_items/weapons/throwing_weapons/spike/spike003_ornate',0),(3742,3742,'accessories/wearable_items/ghost/ghost_leather/chest',0),(3743,3743,'accessories/wearable_items/ghost/ghost_leather/feet',0),(3744,3744,'accessories/wearable_items/ghost/ghost_leather/forearms',0),(3745,3745,'accessories/wearable_items/ghost/ghost_leather/hands',0),(3746,3746,'accessories/wearable_items/ghost/ghost_leather/head',0),(3747,3747,'accessories/wearable_items/ghost/ghost_leather/legs',0),(3748,3748,'accessories/wearable_items/ghost/ghost_leather/shoulders',0),(3749,3749,'accessories/wearable_items/ghost/ghost_leather/skirt',0),(3750,3750,'accessories/wearable_items/ghost/ghost_vanguard/chest',0),(3751,3751,'accessories/wearable_items/ghost/ghost_vanguard/feet',0),(3752,3752,'accessories/wearable_items/ghost/ghost_vanguard/forearms',0),(3753,3753,'accessories/wearable_items/ghost/ghost_vanguard/hands',0),(3754,3754,'accessories/wearable_items/ghost/ghost_vanguard/head',0),(3755,3755,'accessories/wearable_items/ghost/ghost_vanguard/left',0),(3756,3756,'accessories/wearable_items/ghost/ghost_vanguard/legs',0),(3757,3757,'accessories/wearable_items/ghost/ghost_vanguard/right',0),(3758,3758,'accessories/wearable_items/ghost/ghost_vanguard/shoulders',0),(3759,3759,'accessories/wearable_items/ghost/ghost_vanguard/skirt',0),(3760,3760,'accessories/wearable_items/vanguard/common/high/upperchest',0),(3761,3761,'accessories/wearable_items/vanguard/common/low/upperchest',0),(3762,3762,'accessories/wearable_items/vanguard/common/medium/upperchest',0),(3763,3763,'accessories/wearable_items/vanguard/rare/low/upperchest',0),(3764,3764,'accessories/wearable_items/vanguard/rare/medium/upperchest',0),(3765,3765,'accessories/wearable_items/vanguard/uncommon/high/upperchest',0),(3766,3766,'accessories/wearable_items/vanguard/uncommon/low/upperchest',0),(3767,3767,'accessories/wearable_items/vanguard/uncommon/medium/upperchest',0),(3768,3768,'accessories/wieldable_items/shields/buckler_shield/streatched_leather_buckler/streatched_leather_buckler001_runic',0),(3769,3769,'accessories/wieldable_items/shields/buckler_shield/wooden_buckler/wooden_buckler001_runic',0),(3770,3770,'accessories/wieldable_items/shields/tower_shield/metal_tower_shield/metal_tower_shield001_runic',0),(3771,3771,'accessories/wieldable_items/weapons/great_spear/great_spear/great_spear001_rusty',0),(3772,3772,'accessories/wieldable_items/weapons/great_spear/harpoon/harpoon001_plain',0),(3773,3773,'accessories/wieldable_items/weapons/great_spear/harpoon/harpoon001_rusty',0),(3774,3774,'accessories/wieldable_items/weapons/great_spear/lance/lance001_ornate',0),(3775,3775,'accessories/wieldable_items/weapons/great_spear/lance/lance001_plain',0),(3776,3776,'accessories/wieldable_items/weapons/great_spear/lance/lance001_rusyt',0),(3777,3777,'accessories/wieldable_items/weapons/great_spear/pike/pike001_rusty',0),(3778,3778,'accessories/wieldable_items/weapons/great_spear/trident/trident001_rusty',0),(3779,3779,'accessories/wieldable_items/weapons/great_spear/voulge/voulge001_plain',0),(3780,3780,'accessories/wieldable_items/weapons/great_spear/voulge/voulge001_rusty',0),(3781,3781,'accessories/wieldable_items/weapons/spear/javelin/javeling001_runic',0),(3782,3782,'accessories/wieldable_items/weapons/talisman/orb/orb001_ornate',0),(3783,3783,'accessories/wieldable_items/weapons/talisman/orb/orb001_runic',0),(3784,3784,'accessories/wieldable_items/weapons/throwing_weapons/spike/spike004_runic',0),(3785,3785,'creatures/pets/enevenomed_servant',0),(3786,3786,'creatures/pets/essence_order',0),(3787,3787,'ec/pc/froglok/froglok_male_albino',0),(3788,3788,'ec/pc/froglok/froglok_male_black1',0),(3789,3789,'ec/pc/froglok/froglok_male_black2',0),(3790,3790,'ec/pc/froglok/froglok_male_blackglove',0),(3791,3791,'ec/pc/froglok/froglok_male_rainbow',0),(3792,3792,'ec/pc/froglok/froglok_male_toad',0),(3793,3793,'ec/pc/froglok/froglok_male_toadplain',0),(3794,3794,'staticobjects/weapons/dpo_tablet001_rusty',1096),(3795,3795,'staticobjects/panels/dpo_panel_fog_red',1096),(3796,3796,'accessories/wieldable_items/weapons/great_axe/doubleheaded_axe/double_axe001_ornate',0),(3797,3797,'accessories/wieldable_items/weapons/great_axe/doubleheaded_axe/double_axe002_runic',0),(3798,3798,'accessories/wieldable_items/weapons/staff/metal_rod/metal_rod001_plain',0),(3799,3799,'accessories/wieldable_items/weapons/staff/metal_rod/metal_rod001_rusty',0),(3800,3800,'accessories/wieldable_items/weapons/talisman/idol/idol001_ornate',0),(3801,3801,'accessories/wieldable_items/weapons/talisman/idol/idol001_runic',0),(3802,3802,'accessories/wieldable_items/weapons/talisman/tablet/tablet002_ornate',0),(3803,3803,'creatures/monsters/dikdik_undead',0),(3804,3804,'creatures/monsters/mammoth',0),(3805,3805,'creatures/tu/giant_hill',0),(3806,3806,'staticobjects/chests/gnoll_ark_ornate01',0),(3807,3807,'accessories/wieldable_items/weapons/spear/javelin/javeling001_ornate',0),(3808,3808,'accessories/wieldable_items/weapons/spear/ornate_spear/ornate_spear001_runic',0),(3809,3809,'accessories/wieldable_items/weapons/spear/spear/spear001_runic',0),(3810,3810,'accessories/wieldable_items/weapons/spear/tribal_spear/tribal_spear001_ornate',0),(3811,3811,'accessories/wieldable_items/weapons/spear/tribal_spear/tribal_spear001_runic',0),(3812,3812,'creatures/tu/giant_hill_bald',0),(3813,3813,'creatures/tu/giant_hill_captain',0),(3814,3814,'creatures/tu/gnoll_guard1',0),(3815,3815,'creatures/tu/gnoll_guard2',0),(3816,3816,'creatures/tu/gnoll_paw',0),(3817,3817,'accessories/wieldable_items/weapons/great_axe/assault_axe/assault_axe001_runic',0),(3818,3818,'accessories/wieldable_items/weapons/great_axe/executioner_axe/executioner_axe002_ornate',0),(3819,3819,'accessories/wieldable_items/weapons/great_spear/great_spear/great_spear001_ornate',0),(3820,3820,'accessories/wieldable_items/weapons/great_spear/great_spear/great_spear001_runic',0),(3821,3821,'accessories/wieldable_items/weapons/great_spear/harpoon/harpoon001_ornate',0),(3822,3822,'accessories/wieldable_items/weapons/great_spear/harpoon/harpoon001_runic',0),(3823,3823,'accessories/wieldable_items/weapons/great_spear/lance/lance001_runic',0),(3824,3824,'accessories/wieldable_items/weapons/great_spear/lance/lance001_rusty',0),(3825,3825,'accessories/wieldable_items/weapons/great_spear/pike/pike001_ornate',0),(3826,3826,'accessories/wieldable_items/weapons/great_spear/trident/trident002_ornate',0),(3827,3827,'accessories/wieldable_items/weapons/great_spear/voulge/voulge001_runic',0),(3828,3828,'accessories/wieldable_items/weapons/great_sword/bastard_sword/bastard_sword002_rusty',0),(3829,3829,'accessories/wieldable_items/weapons/sword/scimitar/scimitar001_ornate',0),(3830,3830,'accessories/wieldable_items/weapons/throwing_weapons/throwing_axe/throwing_axe002_runic',0),(3831,3831,'accessories/wieldable_items/weapons/throwing_weapons/throwing_star/throwing_star001_ornate',0),(3832,3832,'accessories/wieldable_items/weapons/throwing_weapons/throwing_star/throwing_star001_plain',0),(3833,3833,'accessories/wieldable_items/weapons/throwing_weapons/throwing_star/throwing_star001_runic',0),(3834,3834,'accessories/wieldable_items/weapons/throwing_weapons/throwing_star/throwing_star001_rusty',0),(3835,3835,'creatures/monsters/raven',0),(3836,3836,'creatures/monsters/white_bear',0),(3837,3837,'accessories/wieldable_items/weapons/great_axe/bardiche/bardiche01_plain',0),(3838,3838,'accessories/wieldable_items/weapons/great_axe/halberd/halberd003_ornate',0),(3839,3839,'accessories/wieldable_items/weapons/great_hammer/great_flail/great_flail001_plain',0),(3840,3840,'accessories/wieldable_items/weapons/great_hammer/great_flail/great_flail001_runic',0),(3841,3841,'accessories/wieldable_items/weapons/great_hammer/great_flail/great_flail002_ornate',0),(3842,3842,'accessories/wieldable_items/weapons/great_hammer/great_flail/great_flail002_rusty',0),(3843,3843,'accessories/wieldable_items/weapons/great_hammer/knotted_club/knotted_club001_rusty',0),(3844,3844,'accessories/wieldable_items/weapons/great_sword/claymore_sword/claymore_sword001_runic',0),(3845,3845,'accessories/wieldable_items/weapons/great_sword/claymore_sword/claymore_sword002_rusty',0),(3846,3846,'accessories/wieldable_items/weapons/great_sword/tulwar/tulwar001_runic',0),(3847,3847,'accessories/wieldable_items/weapons/rapier/cutlass/cutlass001_ornate',0),(3848,3848,'accessories/wieldable_items/weapons/spear/leaf_blade/leaf_blade001_ornate',0),(3849,3849,'accessories/wieldable_items/weapons/spear/leaf_blade/leaf_blade001_runic',0),(3850,3850,'accessories/wieldable_items/weapons/spear/short_spear/short_spear001_ornate',0),(3851,3851,'accessories/wieldable_items/weapons/spear/short_spear/short_spear001_runic',0),(3852,3852,'accessories/wieldable_items/weapons/sword/falchion_sword/falchion_sword001_ornate',0),(3853,3853,'accessories/wieldable_items/weapons/sword/falchion_sword/falchion_sword002_runic',0),(3854,3854,'accessories/wieldable_items/weapons/sword/kukri_sword/kukri_sword001_rusty',0),(3855,3855,'accessories/wieldable_items/weapons/sword/kukri_sword/kukri_sword002_ornate',0),(3856,3856,'accessories/wieldable_items/weapons/sword/kukri_sword/kukri_sword002_runic',0),(3857,3857,'accessories/wieldable_items/weapons/sword/short_sword/short_sword002_ornate',0),(3858,3858,'accessories/wieldable_items/weapons/sword/spatha_sword/spatha_sword002_runic',0),(3859,3859,'accessories/wieldable_items/weapons/sword/whip/whip001_ornate',0),(3860,3860,'accessories/wieldable_items/weapons/sword/whip/whip001_plain',0),(3861,3861,'accessories/wieldable_items/weapons/sword/whip/whip001_runic',0),(3862,3862,'accessories/wieldable_items/weapons/sword/whip/whip001_rusty',0),(3863,3863,'accessories/wieldable_items/weapons/talisman/book/book001_ornate',0),(3864,3864,'accessories/wieldable_items/weapons/talisman/book/book001_runic',0),(3865,3865,'accessories/wieldable_items/weapons/talisman/book/book001_rustu',0),(3866,3866,'accessories/wieldable_items/weapons/talisman/censer/censer001_plain',0),(3867,3867,'accessories/wieldable_items/weapons/talisman/censer/censer001_runic',0),(3868,3868,'accessories/wieldable_items/weapons/talisman/censer/censer001_rusty',0),(3869,3869,'accessories/wieldable_items/weapons/talisman/doll/doll001_ornate',0),(3870,3870,'accessories/wieldable_items/weapons/talisman/doll/doll001_runic',0),(3871,3871,'accessories/wieldable_items/weapons/talisman/drum/drum001_ornate',0),(3872,3872,'accessories/wieldable_items/weapons/talisman/drum/drum001_runic',0),(3873,3873,'accessories/wieldable_items/weapons/talisman/holy_symbol/holy_sybol001_rusty',0),(3874,3874,'accessories/wieldable_items/weapons/talisman/holy_symbol/holy_symbol_fear001',0),(3875,3875,'accessories/wieldable_items/weapons/talisman/holy_symbol/holy_symbol_love001',0),(3876,3876,'accessories/wieldable_items/weapons/talisman/stringed_instrument/string_instrument001_ornate',0),(3877,3877,'accessories/wieldable_items/weapons/talisman/stringed_instrument/string_instrument001_runic',0),(3878,3878,'accessories/wieldable_items/weapons/talisman/tablet/tablet002_runic',0),(3879,3879,'accessories/wieldable_items/weapons/talisman/wand/wand001_ornate',0),(3880,3880,'accessories/wieldable_items/weapons/talisman/wand/wand001_runic',0),(3881,3881,'creatures/monsters/goo_ice',0),(3882,3882,'creatures/monsters/undead_dog',0),(3883,3883,'staticobjects/panels/dpo_panel_fog_blue',1096),(3884,3884,'ec/npc/goblin_ice',0),(3885,3885,'accessories/wieldable_items/weapons/bow/long_bow/long_bow001_ornate',0),(3886,3886,'accessories/wieldable_items/weapons/bow/long_bow/long_bow001_plain',0),(3887,3887,'accessories/wieldable_items/weapons/bow/long_bow/long_bow001_runic',0),(3888,3888,'accessories/wieldable_items/weapons/bow/long_bow/long_bow001_rusty',0),(3889,3889,'accessories/wieldable_items/weapons/bow/short_bow/short_bow001_ornate',0),(3890,3890,'accessories/wieldable_items/weapons/bow/short_bow/short_bow001_plain',0),(3891,3891,'accessories/wieldable_items/weapons/bow/short_bow/short_bow001_runic',0),(3892,3892,'accessories/wieldable_items/weapons/bow/short_bow/short_bow001_rusty',0),(3893,3893,'accessories/wieldable_items/weapons/great_hammer/knotted_club/knotted_club001_ornate',0),(3894,3894,'accessories/wieldable_items/weapons/great_hammer/morning_star/morning_star001_ornate',0),(3895,3895,'accessories/wieldable_items/weapons/talisman/holy_symbol/holy_symbol_hate001',0),(3896,3896,'accessories/wieldable_items/weapons/talisman/holy_symbol/holy_symbol_tranquility001',0),(3897,3897,'accessories/wieldable_items/weapons/talisman/idol/idol001_plain',0),(3898,3898,'accessories/wieldable_items/weapons/talisman/tablet/tablet001_plain',0),(3899,3899,'accessories/wieldable_items/weapons/throwing_weapons/rock/rock001_ornate',0),(3900,3900,'accessories/wieldable_items/weapons/throwing_weapons/rock/rock001_plain',0),(3901,3901,'accessories/wieldable_items/weapons/throwing_weapons/rock/rock001_runic',0),(3902,3902,'accessories/wieldable_items/weapons/throwing_weapons/rock/rock001_rusty',0),(3903,3903,'accessories/wieldable_items/weapons/throwing_weapons/throwing_knife/throwing_knife001_ornate',0),(3904,3904,'accessories/wieldable_items/weapons/throwing_weapons/throwing_knife/throwing_knife001_plain',0),(3905,3905,'accessories/wieldable_items/weapons/throwing_weapons/throwing_knife/throwing_knife001_runic',0),(3906,3906,'accessories/wieldable_items/weapons/throwing_weapons/throwing_knife/throwing_knife001_rusty',0),(3907,3907,'ec/npc/lucan_statue',0),(3908,3908,'staticobjects/harvested/bushes/hrvst_bush_healthygreenanaconda01',0),(3909,3909,'staticobjects/harvested/bushes/hrvst_bush_healthygreenanaconda_berries01',0),(3910,3910,'staticobjects/harvested/coral/hrvst_coral_group001',0),(3911,3911,'staticobjects/harvested/coral/hrvst_coral_group002',0),(3912,3912,'staticobjects/harvested/coral/hrvst_coral_single001',0),(3913,3913,'staticobjects/harvested/coral/hrvst_coral_single002',0),(3914,3914,'staticobjects/harvested/crystals/hrvst_crystals_roundformation001',0),(3915,3915,'staticobjects/harvested/crystals/hrvst_crystals_roundformation002',0),(3916,3916,'staticobjects/harvested/crystals/hrvst_crystals_roundformation003',0),(3917,3917,'staticobjects/harvested/crystals/hrvst_stalagmite01',0),(3918,3918,'staticobjects/harvested/crystals/hrvst_stalagmite02',0),(3919,3919,'staticobjects/harvested/crystals/hrvst_stalagmite03',0),(3920,3920,'staticobjects/harvested/crystals/hrvst_stalagmite04',0),(3921,3921,'staticobjects/harvested/debris/hrvst_debris01',0),(3922,3922,'staticobjects/harvested/debris/hrvst_debris02',0),(3923,3923,'staticobjects/harvested/debris/hrvst_debris03',0),(3924,3924,'staticobjects/harvested/debris/hrvst_debris04',0),(3925,3925,'staticobjects/harvested/logs/hrvst_log_ant_blossom01',0),(3926,3926,'staticobjects/harvested/logs/hrvst_log_ant_pine01',0),(3927,3927,'staticobjects/harvested/logs/hrvst_log_ant_pine02',0),(3928,3928,'staticobjects/harvested/logs/hrvst_log_cmmn_oak01',0),(3929,3929,'staticobjects/harvested/logs/hrvst_log_cmmn_oak02',0),(3930,3930,'staticobjects/harvested/logs/hrvst_log_cmmn_savannah01',0),(3931,3931,'staticobjects/harvested/logs/hrvst_log_ench_blossom01',0),(3932,3932,'staticobjects/harvested/logs/hrvst_log_ench_jaggedpine01',0),(3933,3933,'staticobjects/harvested/logs/hrvst_log_ench_jaggedpine02',0),(3934,3934,'staticobjects/harvested/logs/hrvst_log_jaggedpine_scorched01',0),(3935,3935,'staticobjects/harvested/logs/hrvst_log_jaggedpine_scorched02',0),(3936,3936,'staticobjects/harvested/logs/hrvst_log_jaggedpine_scorched03',0),(3937,3937,'staticobjects/harvested/logs/hrvst_log_nbhum_eucalyptus01',0),(3938,3938,'staticobjects/harvested/logs/hrvst_log_nbhum_eucalyptus02',0),(3939,3939,'staticobjects/harvested/logs/hrvst_log_nbhum_pine01',0),(3940,3940,'staticobjects/harvested/logs/hrvst_log_nekf_twistedfungus01',0),(3941,3941,'staticobjects/harvested/logs/hrvst_log_nekf_twistedfungus02',0),(3942,3942,'staticobjects/harvested/logs/hrvst_log_nekf_twistedfungus03',0),(3943,3943,'staticobjects/harvested/logs/hrvst_log_ow_jaggedpine01',0),(3944,3944,'staticobjects/harvested/logs/hrvst_log_ow_torreypine01',0),(3945,3945,'staticobjects/harvested/logs/hrvst_log_ow_torreypine02',0),(3946,3946,'staticobjects/harvested/logs/hrvst_log_step_jaggedpine01',0),(3947,3947,'staticobjects/harvested/logs/hrvst_log_step_jaggedpine02',0),(3948,3948,'staticobjects/harvested/logs/hrvst_log_step_oak01',0),(3949,3949,'staticobjects/harvested/mushrooms/hrvst_mushrooms_cluster01',0),(3950,3950,'staticobjects/harvested/mushrooms/hrvst_mushrooms_cluster02',0),(3951,3951,'staticobjects/harvested/mushrooms/hrvst_mushrooms_cluster03',0),(3952,3952,'staticobjects/harvested/mushrooms/hrvst_mushrooms_fairyring01',0),(3953,3953,'staticobjects/harvested/mushrooms/hrvst_mushrooms_fairyring02',0),(3954,3954,'staticobjects/harvested/mushrooms/hrvst_mushrooms_fairyring03',0),(3955,3955,'staticobjects/harvested/rocks/hrvst_rocks_mineralveins01',0),(3956,3956,'staticobjects/harvested/rocks/hrvst_rocks_mineralveins02',0),(3957,3957,'staticobjects/harvested/rocks/hrvst_rocks_mineralveins03',0),(3958,3958,'staticobjects/harvested/shells/hrvst_shells_abalone01',0),(3959,3959,'staticobjects/harvested/shells/hrvst_shells_abalone02',0),(3960,3960,'staticobjects/harvested/shells/hrvst_shells_abaloneunderside02',0),(3961,3961,'staticobjects/harvested/shells/hrvst_shells_beach01',0),(3962,3962,'staticobjects/harvested/shells/hrvst_shells_beachunderside01',0),(3963,3963,'staticobjects/harvested/shells/hrvst_shells_conch01',0),(3964,3964,'staticobjects/harvested/shells/hrvst_shells_nautilus01',0),(3965,3965,'staticobjects/harvested/shells/hrvst_shells_oyster01',0),(3966,3966,'staticobjects/harvested/shells/hrvst_shells_oyster02',0),(3967,3967,'staticobjects/harvested/shells/hrvst_shells_oysterunderside01',0),(3968,3968,'staticobjects/harvested/shells/hrvst_shells_sanddollar01',0),(3969,3969,'staticobjects/harvested/shells/hrvst_shells_sanddollarunderside01',0),(3970,3970,'staticobjects/harvested/trapping/hrvst_trapping_ant_dirtmound01',0),(3971,3971,'staticobjects/harvested/trapping/hrvst_trapping_ant_dirtmound02',0),(3972,3972,'staticobjects/harvested/trapping/hrvst_trapping_cmmn_dirtmound01',0),(3973,3973,'staticobjects/harvested/trapping/hrvst_trapping_cmmn_dirtmound02',0),(3974,3974,'staticobjects/panels/dpo_panel_fog_cloud',1096),(3975,3975,'staticobjects/panels/dpo_bonetower_wall',1096),(3976,3976,'staticobjects/panels/dpo_antonica_bone',1096),(3977,3977,'staticobjects/harvested/trapping/hrvst_trapping_dirtmound01',0),(3978,3978,'staticobjects/harvested/trapping/hrvst_trapping_dirtmound02',0),(3979,3979,'staticobjects/harvested/trapping/hrvst_trapping_dirtmound03',0),(3980,3980,'staticobjects/harvested/trapping/hrvst_trapping_ench_dirtmound01',0),(3981,3981,'staticobjects/harvested/trapping/hrvst_trapping_ench_dirtmound02',0),(3982,3982,'staticobjects/harvested/trapping/hrvst_trapping_feer_dirtmound01',0),(3983,3983,'staticobjects/harvested/trapping/hrvst_trapping_feer_dirtmound02',0),(3984,3984,'staticobjects/harvested/trapping/hrvst_trapping_fprtadv_dirtmound01',0),(3985,3985,'staticobjects/harvested/trapping/hrvst_trapping_fprtadv_dirtmound02',0),(3986,3986,'staticobjects/harvested/trapping/hrvst_trapping_ls_dirtmound01',0),(3987,3987,'staticobjects/harvested/trapping/hrvst_trapping_ls_dirtmound02',0),(3988,3988,'staticobjects/harvested/trapping/hrvst_trapping_nbhum_dirtmound01',0),(3989,3989,'staticobjects/harvested/trapping/hrvst_trapping_nbhum_dirtmound02',0),(3990,3990,'staticobjects/harvested/trapping/hrvst_trapping_nekf_dirtmound01',0),(3991,3991,'staticobjects/harvested/trapping/hrvst_trapping_nekf_dirtmound02',0),(3992,3992,'staticobjects/harvested/trapping/hrvst_trapping_ow_dirtmound01',0),(3993,3993,'staticobjects/harvested/trapping/hrvst_trapping_ow_dirtmound02',0),(3994,3994,'staticobjects/harvested/trapping/hrvst_trapping_qey_dirtmound01',0),(3995,3995,'staticobjects/harvested/trapping/hrvst_trapping_qey_dirtmound02',0),(3996,3996,'staticobjects/harvested/trapping/hrvst_trapping_rockden001',0),(3997,3997,'staticobjects/harvested/trapping/hrvst_trapping_rockden002',0),(3998,3998,'staticobjects/harvested/trapping/hrvst_trapping_rockden003',0),(3999,3999,'staticobjects/harvested/trapping/hrvst_trapping_rockden004',0),(4000,4000,'staticobjects/harvested/trapping/hrvst_trapping_step_dirtmound01',0),(4001,4001,'staticobjects/harvested/trapping/hrvst_trapping_step_dirtmound02',0),(4002,4002,'staticobjects/harvested/trapping/hrvst_trapping_thicket001',0),(4003,4003,'staticobjects/harvested/trapping/hrvst_trapping_thicket002',0),(4004,4004,'staticobjects/harvested/trapping/hrvst_trapping_thicket003',0),(4005,4005,'accessories/wieldable_items/weapons/fist/claws/claws001_ornate',0),(4006,4006,'accessories/wieldable_items/weapons/fist/claws/claws001_runic',0),(4007,4007,'accessories/wieldable_items/weapons/fist/claws/claws001_rusty',0),(4008,4008,'accessories/wieldable_items/weapons/talisman/flute/flute001_plain',0),(4009,4009,'accessories/wieldable_items/weapons/talisman/flute/flute002_rusty',0),(4010,4010,'accessories/wieldable_items/weapons/talisman/flute/flute003_ornate',0),(4011,4011,'accessories/wieldable_items/weapons/talisman/flute/flute004_runic',0),(4012,4012,'accessories/wieldable_items/weapons/talisman/holy_symbol/holy_symbol_nature001',0),(4013,4013,'accessories/wieldable_items/weapons/talisman/holy_symbol/holy_symbol_valor001',0),(4014,4014,'creatures/tu/giant_frost_captain',0),(4015,4015,'staticobjects/chests/chest_animated_large',0),(4016,4016,'staticobjects/chests/chest_animated_medium',0),(4017,4017,'accessories/wieldable_items/misc/stein001_runic',0),(4018,4018,'accessories/wieldable_items/misc/stein002_plain',0),(4019,4019,'accessories/wieldable_items/misc/stein002_rusty',0),(4020,4020,'accessories/wieldable_items/misc/stein003_ornate',0),(4021,4021,'accessories/wearable_items/_exp08/robe_elemental/earth/skirt',1096),(4022,4022,'accessories/wearable_items/_exp08/robe_elemental/earth/chest',1096),(4023,4023,'accessories/wieldable_items/weapons/hammer/flail/flail001_ornate',0),(4024,4024,'accessories/wieldable_items/weapons/hammer/flail/flail001_rusty',0),(4025,4025,'accessories/wieldable_items/weapons/hammer/flail/flail002_plain',0),(4026,4026,'accessories/wieldable_items/weapons/hammer/flail/flail002_runic',0),(4027,4027,'accessories/wieldable_items/weapons/hammer/scourge/scourge001_runic',0),(4028,4028,'accessories/wieldable_items/weapons/hammer/scourge/scourge001_rusty',0),(4029,4029,'accessories/wieldable_items/weapons/hammer/scourge/scourge002_ornate',0),(4030,4030,'accessories/wieldable_items/weapons/hammer/scourge/scourge002_plain',0),(4031,4031,'accessories/wieldable_items/weapons/rapier/karabela/karabela001_ornate',0),(4032,4032,'accessories/wieldable_items/weapons/rapier/saber/saber001_ornate',0),(4033,4033,'creatures/tu/lesser_efreeti',0),(4034,4034,'staticobjects/chests/chest_animated_small',0),(4035,4035,'accessories/wearable_items/magus/robes/dragon_ornate/chest',0),(4036,4036,'accessories/wearable_items/magus/robes/dragon_ornate/pants',0),(4037,4037,'accessories/wearable_items/magus/robes/dragon_ornate/skirt',0),(4038,4038,'accessories/wearable_items/tradesman/clothing/brawler/med_studded/arms',0),(4039,4039,'accessories/wearable_items/tradesman/clothing/brawler/med_studded/chest',0),(4040,4040,'accessories/wearable_items/_exp08/robe_elemental/earth/feet',1096),(4041,4041,'accessories/wearable_items/tradesman/clothing/brawler/med_studded/legs',0),(4042,4042,'accessories/wieldable_items/misc/treeclub001_plain',0),(4043,4043,'accessories/wieldable_items/weapons/dagger/dirk/dirk002_ornate',0),(4044,4044,'accessories/wieldable_items/weapons/dagger/kris/kris001_ornate',0),(4045,4045,'accessories/wieldable_items/weapons/dagger/parrying_blade/parrying_blade001_ornate',0),(4046,4046,'accessories/wieldable_items/weapons/dagger/parrying_blade/parrying_blade002_rusty',0),(4047,4047,'accessories/wieldable_items/weapons/dagger/sai/sai001_ornate',0),(4048,4048,'accessories/wieldable_items/weapons/dagger/sai/sai001_runic',0),(4049,4049,'accessories/wieldable_items/weapons/dagger/stiletto/stiletto002_ornate',0),(4050,4050,'accessories/wieldable_items/weapons/dagger/wizards_dagger/wizards_dagger001_ornate',0),(4051,4051,'accessories/wieldable_items/weapons/great_hammer/great_mace/great_mace001_ornate',0),(4052,4052,'accessories/wieldable_items/weapons/great_hammer/great_mace/great_mace001_runic',0),(4053,4053,'accessories/wieldable_items/weapons/hammer/cudgel/cudgel002_ornate',0),(4054,4054,'accessories/wieldable_items/weapons/hammer/cudgel/cudgel002_runic',0),(4055,4055,'accessories/wieldable_items/weapons/staff/bo_staff/bo_staff002_runic',0),(4056,4056,'accessories/wieldable_items/weapons/staff/fighting_batons/fighting_batons001_ornate',0),(4057,4057,'accessories/wieldable_items/weapons/staff/great_staff/great_staff001_ornate',0),(4058,4058,'accessories/wieldable_items/weapons/staff/metal_rod/metal_rod001_ornate',0),(4059,4059,'accessories/wieldable_items/weapons/staff/quarterstaff/quarterstaff001_plain',0),(4060,4060,'accessories/wieldable_items/weapons/staff/quarterstaff/quarterstaff002_ornate',0),(4061,4061,'accessories/wieldable_items/weapons/staff/quarterstaff/quarterstaff002_runic',0),(4062,4062,'creatures/tu/giant_frost_helmet',0),(4063,4063,'ec/npc/antonia_statue',0),(4064,4064,'staticobjects/qeynos/qey_citizenship_plain',0),(4065,4065,'accessories/wieldable_items/weapons/great_axe/doubleheaded_axe/double_axe001_plain',0),(4066,4066,'accessories/wieldable_items/weapons/great_axe/doubleheaded_axe/double_axe002_rusty',0),(4067,4067,'staticobjects/market_object/market_object',0),(4068,4068,'accessories/wearable_items/_exp08/robe_elemental/earth/hands',1096),(4069,4069,'projectiles/spell_shriek_wave',0),(4070,4070,'projectiles/spell_fire_ball',0),(4071,4071,'projectiles/spell_fire_ball_blue',0),(4072,4072,'projectiles/spell_fire_ball_green',0),(4073,4073,'projectiles/spell_fuliginous_ball',0),(4074,4074,'projectiles/spell_skull',0),(4075,4075,'staticobjects/harvested/bushes/hrvst_bush_anaconda_brown01',0),(4076,4076,'staticobjects/harvested/bushes/hrvst_bush_healthygreenoak01',0),(4077,4077,'staticobjects/harvested/bushes/hrvst_bush_healthygreenoak_berries01',0),(4078,4078,'staticobjects/harvested/bushes/hrvst_bush_oak_brown01',0),(4079,4079,'accessories/wearable_items/_exp08/robe_elemental/earth/head',1096),(4080,4080,'accessories/wearable_items/_exp08/robe_elemental/earth/head_collar',1096),(4081,4081,'accessories/wearable_items/_exp08/robe_elemental/earth/pants',1096),(4082,4082,'accessories/wearable_items/_exp08/robe_elemental/earth/right_shoulder_effect',1096),(4083,4083,'accessories/wearable_items/_exp08/robe_elemental/earth/left_shoulder_effect',1096),(4084,4084,'accessories/wearable_items/snapons/backpacks/backpack_tinkered_tin',1096),(4085,4085,'accessories/wearable_items/snapons/backpacks/backpack_tinkered_rusty',1096),(4086,4086,'accessories/wieldable_items/shields/exp08/exp08_shield_tinkered_gear_tin',1096),(4087,4087,'accessories/wieldable_items/shields/exp08/exp08_buckler_tinkered_gear_rusty',1096),(4088,4088,'accessories/wieldable_items/shields/exp08/exp08_buckler_tinkered_gear_tin',1096),(4089,4089,'accessories/wieldable_items/shields/exp08/exp08_shield_tinkered_gear_rusty',1096),(4090,4090,'accessories/wieldable_items/weapons/exp08/1h_crush/club_tinkered_wrench_tin',1096),(4091,4091,'accessories/wieldable_items/weapons/exp08/1h_crush/club_tinkered_wrench_detailed_rusty',1096),(4092,4092,'accessories/wieldable_items/weapons/exp08/1h_crush/club_tinkered_wrench_detailed_tin',1096),(4093,4093,'accessories/wieldable_items/weapons/exp08/1h_crush/club_tinkered_wrench_rusty',1096),(4094,4094,'accessories/wieldable_items/weapons/exp08/1h_pierce/exp08_dagger_tinkered_drill_tin',1096),(4095,4095,'accessories/wieldable_items/weapons/exp08/1h_pierce/exp08_dagger_tinkered_drill_rusty',1096),(4096,4096,'creatures/pets/baby_dragon',0),(4097,4097,'accessories/wieldable_items/weapons/rapier/foil/foil001_runic',0),(4098,4098,'creatures/tu/centaur_male',0),(4099,4099,'creatures/tu/gnoll_mage',0),(4100,4100,'projectiles/spell_icy_comet',0),(4101,4101,'projectiles/spell_poison_spore',0),(4102,4102,'staticobjects/eye/cazic_eye_red_glow',0),(4103,4103,'staticobjects/ladders/ladder01',0),(4104,4104,'staticobjects/ladders/ladder_long01',0),(4105,4105,'staticobjects/ladders/ladder_short01',0),(4106,4106,'creatures/tu/centaur_female',0),(4107,4107,'projectiles/spell_mindblast',0),(4108,4108,'staticobjects/harvested/crystals/hrvst_crystals_roundformation001_dirty',0),(4109,4109,'staticobjects/harvested/crystals/hrvst_crystals_roundformation003_purple',0),(4110,4110,'creatures/tu/giant_fire',0),(4111,4111,'ec/npc/antonia',0),(4112,4112,'ec/npc/lucan',0),(4113,4113,'accessories/wearable_items/npcskirts/antonia_skirt',0),(4114,4114,'accessories/wearable_items/npcskirts/lucan_skirt',0),(4115,4115,'accessories/wieldable_items/weapons/exp08/1h_sword/exp08_sword_tinkered_tin',1096),(4116,4116,'creatures/tu/giant_fire_lord',0),(4117,4117,'creatures/tu/lesser_water_elemental',0),(4118,4118,'accessories/wieldable_items/weapons/exp08/1h_sword/exp08_axe_tinkered_buzzgear_copper',1096),(4119,4119,'accessories/wieldable_items/weapons/exp08/1h_sword/exp08_axe_tinkered_buzzgear_tin',1096),(4120,4120,'accessories/wieldable_items/weapons/exp08/1h_sword/exp08_sword_tinkered_rusty',1096),(4121,4121,'accessories/wieldable_items/weapons/exp08/staff/exp08_staff_mage_tinkered_lantern_tin',1096),(4122,4122,'accessories/wieldable_items/weapons/exp08/staff/exp08_staff_mage_tinkered_lantern_rusty',1096),(4123,4123,'accessories/wearable_items/cloak/exp08/cloak_artisan_water_blue',1096),(4124,4124,'accessories/wearable_items/cloak/exp08/cloak_artisan_water_red',1096),(4125,4125,'accessories/wieldable_items/weapons/exp08/staff/exp08_staff_mage_tallonite_blue-iron_fx',1096),(4126,4126,'ec/npc/goblin_cave',0),(4127,4127,'staticobjects/doors/qey_l04_int01_r01_door01',0),(4128,4128,'staticobjects/oop_buff_widgets/brew_barrel',0),(4129,4129,'staticobjects/oop_buff_widgets/chest_full_of_skulls',0),(4130,4130,'staticobjects/oop_buff_widgets/evil_face_cauldron',0),(4131,4131,'staticobjects/oop_buff_widgets/evil_offering_pedistal',0),(4132,4132,'staticobjects/oop_buff_widgets/evil_skull_post',0),(4133,4133,'staticobjects/oop_buff_widgets/evil_skull_with_dagger',0),(4134,4134,'staticobjects/oop_buff_widgets/evil_statue',0),(4135,4135,'staticobjects/oop_buff_widgets/gnoll_bone_ark',0),(4136,4136,'staticobjects/oop_buff_widgets/gnoll_wood_ark',0),(4137,4137,'staticobjects/oop_buff_widgets/goblin_totem',0),(4138,4138,'staticobjects/oop_buff_widgets/human_skull_pile',0),(4139,4139,'staticobjects/oop_buff_widgets/magical_sphere_podium',0),(4140,4140,'staticobjects/oop_buff_widgets/orc_skull_torch',0),(4141,4141,'staticobjects/oop_buff_widgets/pottery_bowl_purple',0),(4142,4142,'staticobjects/oop_buff_widgets/urn_large',0),(4143,4143,'staticobjects/oop_buff_widgets/urn_three_tier_elf',0),(4144,4144,'staticobjects/oop_buff_widgets/witches_cauldron',0),(4145,4145,'projectiles/arrow_ornate',0),(4146,4146,'projectiles/arrow_ornate_fire',0),(4147,4147,'projectiles/arrow_plain',0),(4148,4148,'projectiles/arrow_plain_fire',0),(4149,4149,'projectiles/arrow_runic',0),(4150,4150,'projectiles/arrow_runic_fire',0),(4151,4151,'projectiles/arrow_rusty',0),(4152,4152,'projectiles/arrow_rusty_fire',0),(4153,4153,'projectiles/arrow_simple_plain_fire',0),(4154,4154,'projectiles/spell_fire_ball_purple',0),(4155,4155,'staticobjects/harvested/fish/hrvst_fish_deep',0),(4156,4156,'staticobjects/harvested/fish/hrvst_fish_deep_koi',0),(4157,4157,'staticobjects/harvested/fish/hrvst_fish_medium',0),(4158,4158,'staticobjects/harvested/fish/hrvst_fish_medium_koi',0),(4159,4159,'staticobjects/harvested/fish/hrvst_fish_shallow',0),(4160,4160,'staticobjects/harvested/fish/hrvst_fish_shallow_koi',0),(4161,4161,'staticobjects/doorways/fprt_tradeskill_entrance01',0),(4162,4162,'staticobjects/draconic_widgets/armorcollection003',0),(4163,4163,'staticobjects/draconic_widgets/booknarrow001',0),(4164,4164,'staticobjects/draconic_widgets/booknarrow003',0),(4165,4165,'staticobjects/draconic_widgets/cazic_bookblackleather001',0),(4166,4166,'staticobjects/draconic_widgets/cazic_bookbrownleather001',0),(4167,4167,'staticobjects/draconic_widgets/cazic_bookcrackedleather001',0),(4168,4168,'staticobjects/draconic_widgets/cazic_bookredleather001',0),(4169,4169,'staticobjects/draconic_widgets/cazic_bookwface001',0),(4170,4170,'staticobjects/draconic_widgets/cazic_lizardmansckullwhole001',0),(4171,4171,'staticobjects/draconic_widgets/cazic_scroll_leather001',0),(4172,4172,'staticobjects/draconic_widgets/cazic_scroll_magic001',0),(4173,4173,'staticobjects/draconic_widgets/cazic_scroll_parchmentbone001',0),(4174,4174,'staticobjects/draconic_widgets/cazic_scroll_skinbone001',0),(4175,4175,'staticobjects/draconic_widgets/edk_book001',0),(4176,4176,'staticobjects/draconic_widgets/edk_book003',0),(4177,4177,'staticobjects/draconic_widgets/fprt_books_singlethickornate01',0),(4178,4178,'staticobjects/draconic_widgets/fprt_books_singlethickornate02',0),(4179,4179,'staticobjects/draconic_widgets/fprt_books_singlethinornate01',0),(4180,4180,'staticobjects/draconic_widgets/oblost_scroll_lrg_cld',0),(4181,4181,'staticobjects/draconic_widgets/oblost_scroll_lrg_plain',0),(4182,4182,'staticobjects/draconic_widgets/oblost_scroll_pile02',0),(4183,4183,'staticobjects/draconic_widgets/oblost_scroll_pil_l0',0),(4184,4184,'staticobjects/draconic_widgets/orc_chest_closed001',0),(4185,4185,'staticobjects/draconic_widgets/qey_3tower_scroll001',0),(4186,4186,'staticobjects/draconic_widgets/qey_backpack001',0),(4187,4187,'staticobjects/draconic_widgets/scroll002',0),(4188,4188,'staticobjects/draconic_widgets/scroll003',0),(4189,4189,'staticobjects/draconic_widgets/vrsn_book02',0),(4190,4190,'staticobjects/draconic_widgets/vrsn_book03',0),(4191,4191,'staticobjects/draconic_widgets/vrsn_scrool01',0),(4192,4192,'staticobjects/draconic_widgets/vrsn_scrool02',0),(4193,4193,'staticobjects/pictures/fprt_ph_painting_eq1_horizontal01_guardsmonument_l0',0),(4194,4194,'staticobjects/pictures/fprt_ph_painting_eq1_horizontal02_dragon_l0',0),(4195,4195,'staticobjects/pictures/fprt_ph_painting_eq1_horizontal03_hallwayguards_l0',0),(4196,4196,'staticobjects/pictures/fprt_ph_painting_eq1_horizontal04_evilhouse_l0',0),(4197,4197,'staticobjects/pictures/fprt_ph_painting_eq1_horizontal05_redbuilding_l0',0),(4198,4198,'staticobjects/pictures/fprt_ph_painting_eq1_horizontal06_reddragon_l0',0),(4199,4199,'staticobjects/pictures/fprt_ph_painting_eq1_horizontal07_blackburrow_l0',0),(4200,4200,'staticobjects/pictures/fprt_ph_painting_eq1_horizontal08_treehouse_l0',0),(4201,4201,'staticobjects/pictures/fprt_ph_painting_eq1_horizontal09_bluecastle_l0',0),(4202,4202,'staticobjects/pictures/fprt_ph_painting_eq1_horizontal10_redcourtyard_l0',0),(4203,4203,'staticobjects/pictures/fprt_ph_painting_eq1_horizontal11_redfountain_l0',0),(4204,4204,'staticobjects/pictures/fprt_ph_painting_eq1_horizontal12_temple_l0',0),(4205,4205,'staticobjects/pictures/fprt_ph_painting_eq1_square25_castleonmountain_l0',0),(4206,4206,'staticobjects/pictures/fprt_ph_painting_eq1_square26_purpleskull_l0',0),(4207,4207,'staticobjects/pictures/fprt_ph_painting_eq1_square27_rainonguards_l0',0),(4208,4208,'staticobjects/pictures/fprt_ph_painting_eq1_square28_halassign_l0',0),(4209,4209,'staticobjects/pictures/fprt_ph_painting_eq1_square29_bluedragon_l0',0),(4210,4210,'staticobjects/pictures/fprt_ph_painting_eq1_square30_bloodyfrogs_l0',0),(4211,4211,'staticobjects/pictures/fprt_ph_painting_eq1_square31_torchincave_l0',0),(4212,4212,'staticobjects/pictures/fprt_ph_painting_eq1_square32_elephanthuts_l0',0),(4213,4213,'staticobjects/pictures/fprt_ph_painting_eq1_square33_buildingwithvines_l0',0),(4214,4214,'staticobjects/pictures/fprt_ph_painting_eq1_square34_qeynosentrance_l0',0),(4215,4215,'staticobjects/pictures/fprt_ph_painting_eq1_square35_catwalk_l0',0),(4216,4216,'staticobjects/pictures/fprt_ph_painting_eq1_square36_skullentrance_l0',0),(4217,4217,'staticobjects/pictures/fprt_ph_painting_eq1_vertical13_candleswithsymbol_l0',0),(4218,4218,'staticobjects/pictures/fprt_ph_painting_eq1_vertical14_sumoguard_l0',0),(4219,4219,'staticobjects/pictures/fprt_ph_painting_eq1_vertical15_lizardwithape_l0',0),(4220,4220,'staticobjects/pictures/fprt_ph_painting_eq1_vertical16_manatdock_l0',0),(4221,4221,'staticobjects/pictures/fprt_ph_painting_eq1_vertical17_eyetemple_l0',0),(4222,4222,'staticobjects/pictures/fprt_ph_painting_eq1_vertical18_floatingbuilding_l0',0),(4223,4223,'staticobjects/pictures/fprt_ph_painting_eq1_vertical19_floatingbuildingchains_l0',0),(4224,4224,'staticobjects/pictures/fprt_ph_painting_eq1_vertical20_evildragonentrance_l0',0),(4225,4225,'staticobjects/pictures/fprt_ph_painting_eq1_vertical21_hangingcorpse_l0',0),(4226,4226,'staticobjects/pictures/fprt_ph_painting_eq1_vertical22_citadel_l0',0),(4227,4227,'accessories/wieldable_items/weapons/exp08/1h_crush/club_crystalline_purple',1096),(4228,4228,'staticobjects/pictures/fprt_ph_painting_eq1_vertical24_statuewithclaymore_l0',0),(4229,4229,'staticobjects/pictures/fprt_ph_painting_eq2_horizontal01_falls_l0',0),(4230,4230,'staticobjects/pictures/fprt_ph_painting_eq2_horizontal02_treessunset_l0',0),(4231,4231,'staticobjects/pictures/fprt_ph_painting_eq2_horizontal03_trolllizard_l0',0),(4232,4232,'staticobjects/pictures/fprt_ph_painting_eq2_horizontal04_lakefish_l0',0),(4233,4233,'staticobjects/pictures/fprt_ph_painting_eq2_horizontal05_towerssunset_l0',0),(4234,4234,'staticobjects/pictures/fprt_ph_painting_eq2_horizontal06_sunsetlaketrees_l0',0),(4235,4235,'staticobjects/pictures/fprt_ph_painting_eq2_horizontal07_sunsettrees_l0',0),(4236,4236,'staticobjects/pictures/fprt_ph_painting_eq2_horizontal08_freeportskyline_l0',0),(4237,4237,'staticobjects/pictures/fprt_ph_painting_eq2_horizontal09_fightingfountain_l0',0),(4238,4238,'staticobjects/pictures/fprt_ph_painting_eq2_horizontal10_foreststream_l0',0),(4239,4239,'staticobjects/pictures/fprt_ph_painting_eq2_horizontal11_nightsky_l0',0),(4240,4240,'staticobjects/pictures/fprt_ph_painting_eq2_horizontal12_troops_l0',0),(4241,4241,'staticobjects/pictures/fprt_ph_painting_eq2_square25_wasps_l0',0),(4242,4242,'staticobjects/pictures/fprt_ph_painting_eq2_square26_moat_l0',0),(4243,4243,'staticobjects/pictures/fprt_ph_painting_eq2_square27_ratogre_l0',0),(4244,4244,'staticobjects/pictures/fprt_ph_painting_eq2_square28_zombie_l0',0),(4245,4245,'staticobjects/pictures/fprt_ph_painting_eq2_square29_wolfrivervale_l0',0),(4246,4246,'staticobjects/pictures/fprt_ph_painting_eq2_square30_waterhouse_l0',0),(4247,4247,'staticobjects/pictures/fprt_ph_painting_eq2_square31_guardhouse_l0',0),(4248,4248,'staticobjects/pictures/fprt_ph_painting_eq2_square32_lizard_l0',0),(4249,4249,'staticobjects/pictures/fprt_ph_painting_eq2_square33_treeisland_l0',0),(4250,4250,'staticobjects/pictures/fprt_ph_painting_eq2_square34_kneelingattorch_l0',0),(4251,4251,'staticobjects/pictures/fprt_ph_painting_eq2_square35_spire_l0',0),(4252,4252,'staticobjects/pictures/fprt_ph_painting_eq2_square36_qeynoscottage_l0',0),(4253,4253,'staticobjects/pictures/fprt_ph_painting_eq2_vertical13_forest_l0',0),(4254,4254,'staticobjects/pictures/fprt_ph_painting_eq2_vertical14_kerraaquaduct_l0',0),(4255,4255,'staticobjects/pictures/fprt_ph_painting_eq2_vertical15_forestwoodelf_l0',0),(4256,4256,'staticobjects/pictures/fprt_ph_painting_eq2_vertical16_ogrewithfairy_l0',0),(4257,4257,'staticobjects/pictures/fprt_ph_painting_eq2_vertical17_statuewithcandles_l0',0),(4258,4258,'staticobjects/pictures/fprt_ph_painting_eq2_vertical18_kerranpurplerobe_l0',0),(4259,4259,'staticobjects/pictures/fprt_ph_painting_eq2_vertical19_ratonga_l0',0),(4260,4260,'staticobjects/pictures/fprt_ph_painting_eq2_vertical20_skeleton_l0',0),(4261,4261,'staticobjects/pictures/fprt_ph_painting_eq2_vertical21_troll_l0',0),(4262,4262,'staticobjects/pictures/fprt_ph_painting_eq2_vertical22_iskar_l0',0),(4263,4263,'staticobjects/pictures/fprt_ph_painting_eq2_vertical23_highelf_l0',0),(4264,4264,'staticobjects/pictures/fprt_ph_painting_eq2_vertical24_iskarbystream_l0',0),(4265,4265,'accessories/wieldable_items/weapons/exp08/1h_crush/club_crystalline_blue',1096),(4266,4266,'accessories/wieldable_items/weapons/exp08/1h_crush/club_crystalline_green',1096),(4267,4267,'accessories/wieldable_items/weapons/exp08/1h_sword/exp08_sword_crystalline_purple',1096),(4268,4268,'accessories/wieldable_items/weapons/exp08/1h_sword/exp08_sword_crystalline_blue',1096),(4269,4269,'accessories/wieldable_items/weapons/exp08/1h_sword/exp08_sword_crystalline_green',1096),(4270,4270,'accessories/wieldable_items/weapons/exp08/2h_sword/exp08_2h_sword_crystalline_purple',1096),(4271,4271,'accessories/wieldable_items/weapons/exp08/2h_sword/exp08_2h_sword_crystalline_blue',1096),(4272,4272,'accessories/wieldable_items/weapons/exp08/2h_sword/exp08_2h_sword_crystalline_green',1096),(4273,4273,'accessories/wieldable_items/weapons/exp08/staff/exp08_staff_crystalline_purple',1096),(4274,4274,'accessories/wieldable_items/weapons/exp08/staff/exp08_staff_crystalline_blue',1096),(4275,4275,'accessories/wieldable_items/weapons/exp08/staff/exp08_staff_crystalline_green',1096),(4276,4276,'staticobjects/pictures/fprt_ph_painting_prestige_horizontal01_cecilwhale_l0',0),(4277,4277,'staticobjects/pictures/fprt_ph_painting_prestige_horizontal02_scuffle_l0',0),(4278,4278,'staticobjects/pictures/fprt_ph_painting_prestige_horizontal03_triptich_l0',0),(4279,4279,'staticobjects/pictures/fprt_ph_painting_prestige_horizontal04_diagram_l0',0),(4280,4280,'staticobjects/pictures/fprt_ph_painting_prestige_horizontal05_skullbatteringram_l0',0),(4281,4281,'staticobjects/pictures/fprt_ph_painting_prestige_horizontal06_halloftruth_l0',0),(4282,4282,'staticobjects/pictures/fprt_ph_painting_prestige_square07_centmale_l0',0),(4283,4283,'staticobjects/pictures/fprt_ph_painting_prestige_square08_bixiequeen_l0',0),(4284,4284,'staticobjects/pictures/fprt_ph_painting_prestige_square09_avatarstorms_l0',0),(4285,4285,'staticobjects/pictures/fprt_ph_painting_prestige_square10_rjtree_l0',0),(4286,4286,'staticobjects/pictures/fprt_ph_painting_prestige_square11_fireydragon_l0',0),(4287,4287,'staticobjects/pictures/fprt_ph_painting_prestige_square12_succubus_l0',0),(4288,4288,'staticobjects/pictures/fprt_ph_painting_prestige_vertical13_treefort_l0',0),(4289,4289,'staticobjects/pictures/fprt_ph_painting_prestige_vertical14_angryfalls_l0',0),(4290,4290,'accessories/wieldable_items/weapons/exp07/1h_sword/exp07_1h_sword_emerald_dawn_corrupt',1096),(4291,4291,'staticobjects/pictures/fprt_ph_painting_prestige_vertical15_warrior_l0',0),(4292,4292,'staticobjects/pictures/fprt_ph_painting_prestige_vertical16_qeynosmap_l0',0),(4293,4293,'staticobjects/pictures/fprt_ph_painting_prestige_vertical17_freeportmap_l0',0),(4294,4294,'staticobjects/pictures/fprt_ph_painting_prestige_vertical18_fiestyhalfling_l0',0),(4295,4295,'accessories/wieldable_items/weapons/exp08/1h_crush/club_crystalline_purple_fx',1096),(4296,4296,'accessories/wieldable_items/weapons/exp08/1h_crush/club_crystalline_blue_fx',1096),(4297,4297,'accessories/wieldable_items/weapons/exp08/1h_crush/club_crystalline_green_fx',1096),(4298,4298,'accessories/wieldable_items/weapons/exp08/1h_sword/exp08_sword_crystalline_purple_fx',1096),(4299,4299,'accessories/wieldable_items/weapons/exp08/1h_sword/exp08_sword_crystalline_blue_fx',1096),(4300,4300,'accessories/wieldable_items/weapons/exp08/1h_sword/exp08_sword_crystalline_green_fx',1096),(4301,4301,'accessories/wieldable_items/weapons/exp08/2h_sword/exp08_2h_sword_crystalline_purple_fx',1096),(4302,4302,'accessories/wieldable_items/weapons/exp08/2h_sword/exp08_2h_sword_crystalline_blue_fx',1096),(4303,4303,'accessories/wieldable_items/weapons/exp08/2h_sword/exp08_2h_sword_crystalline_green_fx',1096),(4304,4304,'accessories/wieldable_items/weapons/exp08/staff/exp08_staff_crystalline_purple_fx',1096),(4305,4305,'accessories/wieldable_items/weapons/exp08/staff/exp08_staff_crystalline_blue_fx',1096),(4306,4306,'accessories/wieldable_items/weapons/exp08/staff/exp08_staff_crystalline_green_fx',1096),(4307,4307,'accessories/wearable_items/cloak/exp08/cloak_artisan_fire',1096),(4308,4308,'creatures/mounts/pegasus_mount/pegasus_mount_black',1096),(4309,4309,'_exp04/tool_users/drachnid_queen_drunder',1096),(4310,4310,'_exp04/tool_users/drachnid_female_brown_chain',1096),(4311,4311,'creatures/monsters/roper_crystal_green',1096),(4312,4312,'creatures/monsters/roper_crystal_blue',1096),(4313,4313,'creatures/monsters/roper_crystal_blue_epic',1096),(4314,4314,'_exp08/characters/tool_users/aviak_armored/aviak_eagle_warrior_armored_light_04',1096),(4315,4315,'_exp08/characters/tool_users/aviak_armored/aviak_eagle_king_armored_dark',1096),(4316,4316,'_exp08/characters/tool_users/aviak_armored/aviak_eagle_king_armored_light',1096),(4317,4317,'_exp08/characters/tool_users/aviak_armored/aviak_eagle_warrior_armored_dark_01',1096),(4318,4318,'_exp08/characters/tool_users/aviak_armored/aviak_eagle_warrior_armored_dark_02',1096),(4319,4319,'staticobjects/pictures/qey_ph_painting_eq1_horizontal01_guardsmonument_l0',0),(4320,4320,'staticobjects/pictures/qey_ph_painting_eq1_horizontal02_dragon_l0',0),(4321,4321,'staticobjects/pictures/qey_ph_painting_eq1_horizontal03_hallwayguards_l0',0),(4322,4322,'staticobjects/pictures/qey_ph_painting_eq1_horizontal04_evilhouse_l0',0),(4323,4323,'staticobjects/pictures/qey_ph_painting_eq1_horizontal05_redbuilding_l0',0),(4324,4324,'staticobjects/pictures/qey_ph_painting_eq1_horizontal06_reddragon_l0',0),(4325,4325,'staticobjects/pictures/qey_ph_painting_eq1_horizontal07_blackburrow_l0',0),(4326,4326,'staticobjects/pictures/qey_ph_painting_eq1_horizontal08_treehouse_l0',0),(4327,4327,'staticobjects/pictures/qey_ph_painting_eq1_horizontal09_bluecastle_l0',0),(4328,4328,'staticobjects/pictures/qey_ph_painting_eq1_horizontal10_redcourtyard_l0',0),(4329,4329,'staticobjects/pictures/qey_ph_painting_eq1_horizontal11_redfountain_l0',0),(4330,4330,'staticobjects/pictures/qey_ph_painting_eq1_horizontal12_temple_l0',0),(4331,4331,'staticobjects/pictures/qey_ph_painting_eq1_square25_castleonmountain_l0',0),(4332,4332,'staticobjects/pictures/qey_ph_painting_eq1_square26_purpleskull_l0',0),(4333,4333,'staticobjects/pictures/qey_ph_painting_eq1_square27_rainonguards_l0',0),(4334,4334,'staticobjects/pictures/qey_ph_painting_eq1_square28_halassign_l0',0),(4335,4335,'staticobjects/pictures/qey_ph_painting_eq1_square29_bluedragon_l0',0),(4336,4336,'staticobjects/pictures/qey_ph_painting_eq1_square30_bloodyfrogs_l0',0),(4337,4337,'staticobjects/pictures/qey_ph_painting_eq1_square31_torchincave_l0',0),(4338,4338,'staticobjects/pictures/qey_ph_painting_eq1_square32_elephanthuts_l0',0),(4339,4339,'staticobjects/pictures/qey_ph_painting_eq1_square33_buildingwithvines_l0',0),(4340,4340,'staticobjects/pictures/qey_ph_painting_eq1_square34_qeynosentrance_l0',0),(4341,4341,'staticobjects/pictures/qey_ph_painting_eq1_square35_catwalk_l0',0),(4342,4342,'staticobjects/pictures/qey_ph_painting_eq1_square36_skullentrance_l0',0),(4343,4343,'staticobjects/pictures/qey_ph_painting_eq1_vertical13_candleswithsymbol_l0',0),(4344,4344,'staticobjects/pictures/qey_ph_painting_eq1_vertical14_sumoguard_l0',0),(4345,4345,'staticobjects/pictures/qey_ph_painting_eq1_vertical15_lizardwithape_l0',0),(4346,4346,'staticobjects/pictures/qey_ph_painting_eq1_vertical16_manatdock_l0',0),(4347,4347,'staticobjects/pictures/qey_ph_painting_eq1_vertical17_eyetemple_l0',0),(4348,4348,'staticobjects/pictures/qey_ph_painting_eq1_vertical18_floatingbuilding_l0',0),(4349,4349,'staticobjects/pictures/qey_ph_painting_eq1_vertical19_floatingbuildingchains_l0',0),(4350,4350,'staticobjects/pictures/qey_ph_painting_eq1_vertical20_evildragonentrance_l0',0),(4351,4351,'staticobjects/pictures/qey_ph_painting_eq1_vertical21_hangingcorpse_l0',0),(4352,4352,'staticobjects/pictures/qey_ph_painting_eq1_vertical22_citadel_l0',0),(4353,4353,'staticobjects/pictures/qey_ph_painting_eq1_vertical23_greenmonument_l0',0),(4354,4354,'staticobjects/pictures/qey_ph_painting_eq1_vertical24_statuewithclaymore_l0',0),(4355,4355,'staticobjects/pictures/qey_ph_painting_eq2_horizontal01_falls_l0',0),(4356,4356,'staticobjects/pictures/qey_ph_painting_eq2_horizontal02_treessunset_l0',0),(4357,4357,'staticobjects/pictures/qey_ph_painting_eq2_horizontal03_trolllizard_l0',0),(4358,4358,'staticobjects/pictures/qey_ph_painting_eq2_horizontal04_lakefish_l0',0),(4359,4359,'staticobjects/pictures/qey_ph_painting_eq2_horizontal05_towerssunset_l0',0),(4360,4360,'staticobjects/pictures/qey_ph_painting_eq2_horizontal06_sunsetlaketrees_l0',0),(4361,4361,'staticobjects/pictures/qey_ph_painting_eq2_horizontal07_sunsettrees_l0',0),(4362,4362,'staticobjects/pictures/qey_ph_painting_eq2_horizontal08_freeportskyline_l0',0),(4363,4363,'staticobjects/pictures/qey_ph_painting_eq2_horizontal09_fightingfountain_l0',0),(4364,4364,'staticobjects/pictures/qey_ph_painting_eq2_horizontal10_foreststream_l0',0),(4365,4365,'staticobjects/pictures/qey_ph_painting_eq2_horizontal11_nightsky_l0',0),(4366,4366,'staticobjects/pictures/qey_ph_painting_eq2_horizontal12_troops_l0',0),(4367,4367,'staticobjects/pictures/qey_ph_painting_eq2_square25_wasps_l0',0),(4368,4368,'staticobjects/pictures/qey_ph_painting_eq2_square26_moat_l0',0),(4369,4369,'staticobjects/pictures/qey_ph_painting_eq2_square27_ratogre_l0',0),(4370,4370,'staticobjects/pictures/qey_ph_painting_eq2_square28_zombie_l0',0),(4371,4371,'staticobjects/pictures/qey_ph_painting_eq2_square29_wolfrivervale_l0',0),(4372,4372,'staticobjects/pictures/qey_ph_painting_eq2_square30_waterhouse_l0',0),(4373,4373,'staticobjects/pictures/qey_ph_painting_eq2_square31_guardhouse_l0',0),(4374,4374,'staticobjects/pictures/qey_ph_painting_eq2_square32_lizard_l0',0),(4375,4375,'staticobjects/pictures/qey_ph_painting_eq2_square33_treeisland_l0',0),(4376,4376,'staticobjects/pictures/qey_ph_painting_eq2_square34_kneelingattorch_l0',0),(4377,4377,'staticobjects/pictures/qey_ph_painting_eq2_square35_spire_l0',0),(4378,4378,'staticobjects/pictures/qey_ph_painting_eq2_square36_qeynoscottage_l0',0),(4379,4379,'staticobjects/pictures/qey_ph_painting_eq2_vertical13_forest_l0',0),(4380,4380,'staticobjects/pictures/qey_ph_painting_eq2_vertical14_kerraaquaduct_l0',0),(4381,4381,'staticobjects/pictures/qey_ph_painting_eq2_vertical15_forestwoodelf_l0',0),(4382,4382,'staticobjects/pictures/qey_ph_painting_eq2_vertical16_ogrewithfairy_l0',0),(4383,4383,'staticobjects/pictures/qey_ph_painting_eq2_vertical17_statuewithcandles_l0',0),(4384,4384,'staticobjects/pictures/qey_ph_painting_eq2_vertical18_kerranpurplerobe_l0',0),(4385,4385,'staticobjects/pictures/qey_ph_painting_eq2_vertical19_ratonga_l0',0),(4386,4386,'staticobjects/pictures/qey_ph_painting_eq2_vertical20_skeleton_l0',0),(4387,4387,'staticobjects/pictures/qey_ph_painting_eq2_vertical21_troll_l0',0),(4388,4388,'staticobjects/pictures/qey_ph_painting_eq2_vertical22_iskar_l0',0),(4389,4389,'staticobjects/pictures/qey_ph_painting_eq2_vertical23_highelf_l0',0),(4390,4390,'staticobjects/pictures/qey_ph_painting_eq2_vertical24_iskarbystream_l0',0),(4391,4391,'_exp08/characters/tool_users/aviak_armored/aviak_eagle_warrior_armored_dark_03',1096),(4392,4392,'_exp08/characters/tool_users/aviak_armored/aviak_eagle_warrior_armored_dark_04',1096),(4393,4393,'_exp08/characters/tool_users/aviak_armored/aviak_eagle_warrior_armored_light_01',1096),(4394,4394,'_exp08/characters/tool_users/aviak_armored/aviak_eagle_warrior_armored_light_02',1096),(4395,4395,'_exp08/characters/tool_users/aviak_armored/aviak_eagle_warrior_armored_light_03',1096),(4396,4396,'_exp04/tool_users/drachnid_male_crystal',1096),(4397,4397,'accessories/wieldable_items/weapons/exp07/2h_sword/goth_scythe_2_hand_01_pc',1096),(4398,4398,'creatures/monsters/hoovedcarnivore_demonic',1096),(4399,4399,'_exp07/objects/crystalcaverns/exp07_dun_crystalcavern_crystal_dpo01_blue',1096),(4400,4400,'_exp07/objects/crystalcaverns/exp07_dun_crystalcavern_crystal_dpo01_green',1096),(4401,4401,'_exp07/objects/crystalcaverns/exp07_dun_crystalcavern_crystal_dpo01_purple',1096),(4402,4402,'accessories/wieldable_items/weapons/exp07/1h_sword/exp07_1h_sword_silver_scimitar',1096),(4403,4403,'accessories/wieldable_items/weapons/exp08/1h_pierce/pick_snowchipper',1096),(4404,4404,'staticobjects/pictures/qey_ph_painting_prestige_horizontal01_cecilwhale_l0',0),(4405,4405,'staticobjects/pictures/qey_ph_painting_prestige_horizontal02_scuffle_l0',0),(4406,4406,'staticobjects/pictures/qey_ph_painting_prestige_horizontal03_triptich_l0',0),(4407,4407,'staticobjects/pictures/qey_ph_painting_prestige_horizontal04_diagram_l0',0),(4408,4408,'staticobjects/pictures/qey_ph_painting_prestige_horizontal05_skullbatteringram_l0',0),(4409,4409,'staticobjects/pictures/qey_ph_painting_prestige_horizontal06_halloftruth_l0',0),(4410,4410,'staticobjects/pictures/qey_ph_painting_prestige_square07_centmale_l0',0),(4411,4411,'staticobjects/pictures/qey_ph_painting_prestige_square08_bixiequeen_l0',0),(4412,4412,'staticobjects/pictures/qey_ph_painting_prestige_square09_avatarstorms_l0',0),(4413,4413,'staticobjects/pictures/qey_ph_painting_prestige_square10_rjtree_l0',0),(4414,4414,'staticobjects/containers/dpo_oblost_pot01_brkn_pice1',1096),(4415,4415,'staticobjects/pictures/qey_ph_painting_prestige_square11_fireydragon_l0',0),(4416,4416,'staticobjects/containers/dpo_oblost_pot02_brkn_piec2',1096),(4417,4417,'staticobjects/pictures/qey_ph_painting_prestige_square12_succubus_l0',0),(4418,4418,'accessories/wearable_items/cloak/exp08/cloak_tartan_greenred',1096),(4419,4419,'staticobjects/pictures/qey_ph_painting_prestige_vertical13_treefort_l0',0),(4420,4420,'staticobjects/pictures/qey_ph_painting_prestige_vertical14_angryfalls_l0',0),(4421,4421,'staticobjects/pictures/qey_ph_painting_prestige_vertical15_warrior_l0',0),(4422,4422,'staticobjects/pictures/qey_ph_painting_prestige_vertical16_qeynosmap_l0',0),(4423,4423,'staticobjects/pictures/qey_ph_painting_prestige_vertical17_freeportmap_l0',0),(4424,4424,'staticobjects/pictures/qey_ph_painting_prestige_vertical18_fiestyhalfling_l0',0),(4425,4425,'projectiles/spell_rock_ball',0),(4426,4426,'projectiles/spell_skull_dark',0),(4427,4427,'staticobjects/wizard_spires/base_circle_1',0),(4428,4428,'staticobjects/wizard_spires/chunk_glow_1',0),(4429,4429,'staticobjects/wizard_spires/chunk_glow_2',0),(4430,4430,'staticobjects/wizard_spires/chunk_glow_3',0),(4431,4431,'staticobjects/wizard_spires/chunk_pointy_1',0),(4432,4432,'staticobjects/wizard_spires/fully_destroyed',0),(4433,4433,'staticobjects/wizard_spires/single_spire_1',0),(4434,4434,'staticobjects/bottles/floor_bottle_any_distiller01',0),(4435,4435,'staticobjects/carts/floor_cart_any_display01',0),(4436,4436,'staticobjects/cauldron/floor_cauldron_any_black01',0),(4437,4437,'staticobjects/cauldron/floor_cauldron_any_face01',0),(4438,4438,'staticobjects/chairs/floor_chair_any_skeletal01',0),(4439,4439,'staticobjects/chests/floor_box_any_collection01',0),(4440,4440,'staticobjects/chests/floor_box_any_collection02',0),(4441,4441,'staticobjects/containers/floor_tray_human_incenseburner01',0),(4442,4442,'staticobjects/containers/floor_vase_any_reflective01',0),(4443,4443,'staticobjects/containers/floor_vase_any_weaponholder01',0),(4444,4444,'staticobjects/crystals/floor_orb_human_ornate01',0),(4445,4445,'staticobjects/games/floor_chessboard_any_ornate01',0),(4446,4446,'staticobjects/general/floor_pedestal_any_lionpalm01',0),(4447,4447,'staticobjects/mirrors/floor_mirror_any_desktop01',0),(4448,4448,'staticobjects/mirrors/wall_mirror_any_ornate01',0),(4449,4449,'staticobjects/mirrors/wall_mirror_any_ornate02',0),(4450,4450,'staticobjects/monuments/floor_marker_any_windstalker01',0),(4451,4451,'staticobjects/monuments/floor_pool_human_divin01',0),(4452,4452,'staticobjects/musical/floor_harpl_human_ornate01',0),(4453,4453,'staticobjects/podium/floor_podium_any_chanting02',0),(4454,4454,'staticobjects/posts/floor_post_any_skulls01',0),(4455,4455,'staticobjects/racks/floor_rack_any_weapon01',0),(4456,4456,'staticobjects/relics/floor_box_any_puzzle01',0),(4457,4457,'staticobjects/relics/floor_orb_any_holder01',0),(4458,4458,'staticobjects/relics/floor_ornament_any_daggerskull01',0),(4459,4459,'staticobjects/relics/floor_sword_any_magic01',0),(4460,4460,'staticobjects/rugs/floor_rug_any_bear01',0),(4461,4461,'staticobjects/shop/floor_displalycase_any_ornate01',0),(4462,4462,'staticobjects/statues/floor_statue_any_fiend01',0),(4463,4463,'staticobjects/statues/floor_statue_any_soldier01',0),(4464,4464,'staticobjects/statues/floor_statue_orc_kight01',0),(4465,4465,'staticobjects/statues/floor_statue_troll_tiki01',0),(4466,4466,'staticobjects/torture_chamber/floor_casket_any_ironmaiden01',0),(4467,4467,'staticobjects/trainingdummy/floor_dummy_any_training01',0),(4468,4468,'staticobjects/weapons/floor_staff_any_eagle01',0),(4469,4469,'staticobjects/weapons/wall_bow_any_ornate01',0),(4470,4470,'staticobjects/containers/floor_flask_any_glass01',0),(4471,4471,'projectiles/spell_wavey_neg',0),(4472,4472,'staticobjects/cages/solusekseye_hanging_cage_open',0),(4473,4473,'staticobjects/rubble/debris_sewer_00',0),(4474,4474,'staticobjects/rubble/debris_sewer_01',0),(4475,4475,'staticobjects/rubble/debris_sewer_02',0),(4476,4476,'staticobjects/rubble/debris_sewer_03',0),(4477,4477,'staticobjects/rubble/debris_sewer_04',0),(4478,4478,'staticobjects/transports/platform',0),(4479,4479,'staticobjects/artifact/artifact_location',0),(4480,4480,'accessories/wieldable_items/weapons/hammer/fighting_stick/fighting_stick_capped_ornate',0),(4481,4481,'accessories/wieldable_items/weapons/hammer/fighting_stick/fighting_stick_capped_plain',0),(4482,4482,'accessories/wieldable_items/weapons/hammer/fighting_stick/fighting_stick_capped_runic',0),(4483,4483,'accessories/wieldable_items/weapons/hammer/fighting_stick/fighting_stick_capped_rusty',0),(4484,4484,'accessories/wieldable_items/weapons/hammer/fighting_stick/fighting_stick_ornate',0),(4485,4485,'accessories/wieldable_items/weapons/hammer/fighting_stick/fighting_stick_plain',0),(4486,4486,'accessories/wieldable_items/weapons/hammer/fighting_stick/fighting_stick_runic',0),(4487,4487,'accessories/wieldable_items/weapons/hammer/fighting_stick/fighting_stick_rusty',0),(4488,4488,'accessories/wieldable_items/weapons/spear/one_handed_spear/assegai_ornate',0),(4489,4489,'accessories/wieldable_items/weapons/spear/one_handed_spear/assegai_plain',0),(4490,4490,'accessories/wieldable_items/weapons/spear/one_handed_spear/assegai_runic',0),(4491,4491,'accessories/wieldable_items/weapons/spear/one_handed_spear/assegai_rusty',0),(4492,4492,'accessories/wieldable_items/weapons/spear/one_handed_spear/barbed_spear_ornate',0),(4493,4493,'accessories/wieldable_items/weapons/spear/one_handed_spear/barbed_spear_plain',0),(4494,4494,'accessories/wieldable_items/weapons/spear/one_handed_spear/barbed_spear_runic',0),(4495,4495,'accessories/wieldable_items/weapons/spear/one_handed_spear/barbed_spear_rusty',0),(4496,4496,'creatures/monsters/darathar',0),(4497,4497,'staticobjects/rocks/solusekseye_cluster',0),(4498,4498,'staticobjects/solusekseye_elevator/base',0),(4499,4499,'staticobjects/solusekseye_elevator/handle',0),(4500,4500,'staticobjects/fires/plane_of_fire',0),(4501,4501,'staticobjects/fires/plane_of_fire_boat',0),(4502,4502,'accessories/wieldable_items/weapons/great_sword/claymore_sword/claymore_sword_magic_prismatic_uber',0),(4503,4503,'accessories/wieldable_items/weapons/hammer/sceptre/sceptre_magic_prismatic_uber',0),(4504,4504,'accessories/wieldable_items/weapons/staff/fighting_batons/fighting_batons_magic_prismatic_uber',0),(4505,4505,'accessories/wieldable_items/weapons/sword/long_sword/long_sword_magic_acid_uber',0),(4506,4506,'accessories/wieldable_items/weapons/sword/long_sword/long_sword_magic_electric_uber',0),(4507,4507,'accessories/wieldable_items/weapons/sword/long_sword/long_sword_magic_fire_uber',0),(4508,4508,'accessories/wieldable_items/weapons/sword/long_sword/long_sword_magic_glow_white_uber',0),(4509,4509,'accessories/wieldable_items/weapons/sword/long_sword/long_sword_magic_ice_uber',0),(4510,4510,'accessories/wieldable_items/weapons/sword/long_sword/long_sword_magic_lava_uber',0),(4511,4511,'accessories/wieldable_items/weapons/sword/long_sword/long_sword_magic_plasma_uber',0),(4512,4512,'accessories/wieldable_items/weapons/sword/long_sword/long_sword_magic_poison_green_uber',0),(4513,4513,'accessories/wieldable_items/weapons/sword/long_sword/long_sword_magic_prismatic_uber',0),(4514,4514,'accessories/wieldable_items/weapons/sword/long_sword/long_sword_magic_runes_uber',0),(4515,4515,'accessories/wieldable_items/weapons/sword/long_sword/long_sword_magic_sparks_green_uber',0),(4516,4516,'accessories/wieldable_items/weapons/sword/long_sword/long_sword_magic_sparks_red_uber',0),(4517,4517,'accessories/wearable_items/cloak/exp08/cloak_tartan_bluefur',1096),(4518,4518,'accessories/wieldable_items/weapons/sword/long_sword/long_sword_magic_stone_uber',0),(4519,4519,'accessories/wieldable_items/weapons/sword/long_sword/long_sword_magic_water_uber',0),(4520,4520,'accessories/wieldable_items/weapons/sword/short_sword/short_sword_magic_prismatic_uber',0),(4521,4521,'accessories/wieldable_items/weapons/talisman/wand/wand_magic_prismatic_uber',0),(4522,4522,'accessories/wieldable_items/weapons/axe/battleaxe/battleaxe_magic_prismatic_uber',0),(4523,4523,'accessories/wieldable_items/weapons/great_axe/doubleheaded_axe/double_axe_magic_prismatic_uber',0),(4524,4524,'accessories/wieldable_items/weapons/hammer/battlehammer/battlehammer_magic_prismatic_uber',0),(4525,4525,'accessories/wieldable_items/weapons/hammer/fighting_stick/fighting_stick_magic_prismatic_uber',0),(4526,4526,'accessories/wieldable_items/weapons/hammer/mace/mace_magic_prismatic_uber',0),(4527,4527,'creatures/monsters/hellhound',0),(4528,4528,'creatures/monsters/hellhound_lava',0),(4529,4529,'staticobjects/lab/floor_beaker_iksar_capped_redgoo01',0),(4530,4530,'staticobjects/liveevent/tinkerfest/dpo_panel_porthole',1096),(4531,4531,'_exp01/characters/monsters/beetle_dune',0),(4532,4532,'_exp01/characters/monsters/scorpion_dune',0),(4533,4533,'_exp01/characters/monsters/scorpion_fire',0),(4534,4534,'_exp01/characters/monsters/spider_dune',0),(4535,4535,'creatures/tu/skeleton_mage',0),(4536,4536,'creatures/tu/skeleton_mystic',0),(4537,4537,'creatures/tu/skeleton_paladin',0),(4538,4538,'creatures/tu/skeleton_priest',0),(4539,4539,'creatures/tu/skeleton_sergeant',0),(4540,4540,'creatures/tu/skeleton_sergeant_paladin',0),(4541,4541,'creatures/tu/skeleton_sergeant_rusty',0),(4542,4542,'creatures/tu/skeleton_warrior',0),(4543,4543,'creatures/tu/skeleton_warrior_rusty',0),(4544,4544,'staticobjects/dpo_invisible_wall/invisible_wall_thick',0),(4545,4545,'creatures/monsters/fleshgoyle',0),(4546,4546,'accessories/wieldable_items/weapons/sword/long_sword/long_sword_magic_blood_uber',0),(4547,4547,'creatures/tu/reverant',0),(4548,4548,'creatures/tu/reverant_lesser',0),(4549,4549,'staticobjects/liveevent/tinkerfest/dpo_panel_rusty_quarters',1096),(4550,4550,'staticobjects/mushroom/mushroom_spotted_green',0),(4551,4551,'staticobjects/mushroom/mushroom_spotted_purple',0),(4552,4552,'staticobjects/vines/vines_01',0),(4553,4553,'staticobjects/vines/vines_02',0),(4554,4554,'staticobjects/vines/vines_03',0),(4555,4555,'staticobjects/vines/vines_04',0),(4556,4556,'staticobjects/vines/vines_up_01',0),(4557,4557,'creatures/tu/skeleton_king_greater',0),(4558,4558,'creatures/tu/skeleton_king_lesser',0),(4559,4559,'creatures/tu/skeleton_king_paladin_greater',0),(4560,4560,'creatures/tu/skeleton_king_paladin_lesser',0),(4561,4561,'creatures/tu/skeleton_king_ranger_greater',0),(4562,4562,'creatures/tu/skeleton_king_ranger_lesser',0),(4563,4563,'accessories/wieldable_items/weapons/sword/vampire_sword/vampire_sword_plain',0),(4564,4564,'animatedobjects/vases/ton_vase_breakable',0),(4565,4565,'accessories/wearable_items/leather/artifact/low/legs_noskirt',0),(4566,4566,'accessories/wearable_items/leather/artifact/medium/legs_noskirt',0),(4567,4567,'accessories/wearable_items/leather/common/high/legs_noskirt',0),(4568,4568,'accessories/wearable_items/leather/common/low/legs_noskirt',0),(4569,4569,'accessories/wearable_items/leather/common/medium/legs_noskirt',0),(4570,4570,'accessories/wearable_items/leather/uncommon/high/legs_noskirt',0),(4571,4571,'accessories/wearable_items/leather/uncommon/low/legs_noskirt',0),(4572,4572,'accessories/wearable_items/leather/uncommon/medium/legs_noskirt',0),(4573,4573,'accessories/wearable_items/vanguard/common/high/legs_noskirt',0),(4574,4574,'accessories/wearable_items/vanguard/common/high/shoulders_nopauldrons',0),(4575,4575,'accessories/wearable_items/vanguard/common/low/legs_noskirt',0),(4576,4576,'accessories/wearable_items/vanguard/common/low/shoulders_nopauldrons',0),(4577,4577,'accessories/wearable_items/vanguard/common/medium/legs_noskirt',0),(4578,4578,'accessories/wearable_items/vanguard/common/medium/shoulders_nopauldrons',0),(4579,4579,'accessories/wearable_items/vanguard/rare/low/legs_noskirt',0),(4580,4580,'accessories/wearable_items/vanguard/rare/low/shoulders_nopauldrons',0),(4581,4581,'accessories/wearable_items/vanguard/rare/medium/legs_noskirt',0),(4582,4582,'accessories/wearable_items/vanguard/rare/medium/shoulders_nopauldrons',0),(4583,4583,'accessories/wearable_items/vanguard/uncommon/high/legs_noskirt',0),(4584,4584,'accessories/wearable_items/vanguard/uncommon/high/shoulders_nopauldrons',0),(4585,4585,'accessories/wearable_items/vanguard/uncommon/low/legs_noskirt',0),(4586,4586,'accessories/wearable_items/vanguard/uncommon/low/shoulders_nopauldrons',0),(4587,4587,'accessories/wearable_items/vanguard/uncommon/medium/legs_noskirt',0),(4588,4588,'accessories/wearable_items/vanguard/uncommon/medium/shoulders_nopauldrons',0),(4589,4589,'accessories/wearable_items/woven/common/high/legs_noskirt',0),(4590,4590,'accessories/wearable_items/woven/common/low/legs_noskirt',0),(4591,4591,'accessories/wearable_items/woven/common/medium/legs_noskirt',0),(4592,4592,'accessories/wearable_items/woven/rare/low/legs_noskirt',0),(4593,4593,'accessories/wearable_items/woven/uncommon/high/legs_noskirt',0),(4594,4594,'accessories/wearable_items/woven/uncommon/low/legs_noskirt',0),(4595,4595,'accessories/wearable_items/woven/uncommon/medium/legs_noskirt',0),(4596,4596,'accessories/wieldable_items/weapons/axe/kopesh/kopesh_axe_plain',0),(4597,4597,'accessories/wieldable_items/weapons/sword/khanda_sword/khanda_sword001_plain',0),(4598,4598,'accessories/wieldable_items/weapons/sword/khanda_sword/khanda_sword002_plain',0),(4599,4599,'accessories/wieldable_items/weapons/sword/vampire_sword/vampire_sword_ornate',0),(4600,4600,'staticobjects/liveevent/tinkerfest/dpo_panel_striped_quarters',1096),(4601,4601,'animatedobjects/sarcophagus/ton_sarcophagus_breakable_boss',0),(4602,4602,'animatedobjects/sarcophagus/ton_sarcophagus_breakable_common',0),(4603,4603,'animatedobjects/sarcophagus/ton_sarcophagus_breakable_noble',0),(4604,4604,'staticobjects/bottles/floor_bottle_any_wine01',0),(4605,4605,'staticobjects/boxes/floor_storagebox_any_wooden01',0),(4606,4606,'staticobjects/cauldron/floor_cauldron_darkelf_campfire01',0),(4607,4607,'staticobjects/chests/floor_treasurechest_any_clean01',0),(4608,4608,'staticobjects/containers/floor_bucket_orc_bloodore01',0),(4609,4609,'staticobjects/containers/floor_vase_human_clay03',0),(4610,4610,'staticobjects/lab/floor_sphereflask_iksar_redgoo01',0),(4611,4611,'staticobjects/lab/floor_testtuberack_iksar_redgoo01',0),(4612,4612,'staticobjects/racks/floor_rack_any_clothing01',0),(4613,4613,'staticobjects/racks/floor_rack_any_clothing02',0),(4614,4614,'staticobjects/racks/floor_rack_any_weapon02',0),(4615,4615,'staticobjects/shop/floor_case_any_display01',0),(4616,4616,'staticobjects/tents/floor_tent_human_closed01',0),(4617,4617,'staticobjects/tents/floor_tent_human_open01',0),(4618,4618,'accessories/wieldable_items/weapons/great_sword/scimitar_broad_sword/scimitar_broad_sword001_plain',0),(4619,4619,'accessories/wieldable_items/weapons/great_sword/scimitar_broad_sword/scimitar_broad_sword001_rusty',0),(4620,4620,'creatures/monsters/frog_illusion',0),(4621,4621,'_exp01/characters/tool_users/lizardman_desert_plain',0),(4622,4622,'_exp01/characters/tool_users/lizardman_desert_priest',0),(4623,4623,'_exp01/characters/tool_users/lizardman_desert_warrior',0),(4624,4624,'animatedobjects/walls/breakable_wall_brick',0),(4625,4625,'staticobjects/statues/statue_of_marr',0),(4626,4626,'_exp01/characters/tool_users/lizardman_desert_wizard',0),(4627,4627,'staticobjects/housing_portal_objects/vision_home_skyblade01',1096),(4628,4628,'staticobjects/housing_portal_objects/vision_home_everfrost_menagerie01',1096),(4629,4629,'accessories/wieldable_items/weapons/axe/small_dwarf/small_dwarf_axe_plain',0),(4630,4630,'accessories/wieldable_items/weapons/great_axe/large_dwarf_axe/large_dwarf_axe_plain',0),(4631,4631,'creatures/tu/vampire_darkelf_female_captain',0),(4632,4632,'creatures/tu/vampire_darkelf_female_mage',0),(4633,4633,'creatures/tu/vampire_darkelf_female_warrior',0),(4634,4634,'creatures/tu/vampire_darkelf_male_captain',0),(4635,4635,'creatures/tu/vampire_darkelf_male_lord',0),(4636,4636,'creatures/tu/vampire_darkelf_male_mage',0),(4637,4637,'creatures/tu/vampire_darkelf_male_warrior',0),(4638,4638,'staticobjects/coffins_and_sarcophagus/shroud_only',0),(4639,4639,'staticobjects/tables/pedestal_table',0),(4640,4640,'_exp01/characters/tool_users/lizardman_desert_king',0),(4641,4641,'accessories/wieldable_items/weapons/hammer/eagle_sceptre/eagle_sceptre_plain',0),(4642,4642,'animatedobjects/walls/breakable_wall_plain',0),(4643,4643,'staticobjects/barrels/floor_barrel_any_water01',0),(4644,4644,'staticobjects/boats/floor_boat_human_fishing01',0),(4645,4645,'staticobjects/books/floor_books_halfling_stack01',0),(4646,4646,'staticobjects/books/floor_books_halfling_stack02',0),(4647,4647,'staticobjects/boxes/floor_collectionbox_any_wood01',0),(4648,4648,'staticobjects/carts/floor_displaycart_any_closed01',0),(4649,4649,'staticobjects/containers/floor_bucket_halfling_fish01',0),(4650,4650,'staticobjects/containers/floor_bucket_orc_ore01',0),(4651,4651,'staticobjects/racks/floor_rack_any_weapon03',0),(4652,4652,'staticobjects/rocks/fallengate_rock01',0),(4653,4653,'staticobjects/rocks/floor_stones_any_wall01',0),(4654,4654,'staticobjects/shop/floor_display_halfling_armor01',0),(4655,4655,'staticobjects/signs/general/floor_signs_elf_roadmarker01',0),(4656,4656,'staticobjects/tents/nekf_tent_large_purple001',0),(4657,4657,'staticobjects/dpo_invisible_wall/invisible_bridge',0),(4658,4658,'staticobjects/chests/floor_chest_any_fancybox01',0),(4659,4659,'staticobjects/chests/floor_chest_any_flattop01',0),(4660,4660,'_exp01/characters/monsters/cobra_bone',0),(4661,4661,'_exp01/characters/monsters/cobra_desert',0),(4662,4662,'_exp01/characters/monsters/cobra_iron',0),(4663,4663,'staticobjects/rocks/floor_stones_any_pile01',0),(4664,4664,'_exp01/characters/monsters/snake_bone',0),(4665,4665,'staticobjects/ap1_mini_entrances/door01',0),(4666,4666,'staticobjects/ap1_mini_entrances/door02',0),(4667,4667,'staticobjects/ap1_mini_entrances/door03vdl',0),(4668,4668,'staticobjects/ap1_mini_entrances/mound01',0),(4669,4669,'staticobjects/ap1_mini_entrances/mound02',0),(4670,4670,'staticobjects/ap1_mini_entrances/mound03',0),(4671,4671,'animatedobjects/walls/breakable_wall_plain_small',0),(4672,4672,'ec/npc/goblin_zombie',0),(4673,4673,'ec/npc/goblin_zombie_aqua',0),(4674,4674,'staticobjects/rocks/brown_rock_large',0),(4675,4675,'staticobjects/wood/wood_plank01',0),(4676,4676,'staticobjects/wood/wood_plank02',0),(4677,4677,'accessories/wieldable_items/shields/kite_shield/metal_kite/metal_kite_shield_magic_ether_flame_medium',0),(4678,4678,'accessories/wieldable_items/shields/kite_shield/metal_kite/metal_kite_shield_magic_ice_lesser',0),(4679,4679,'accessories/wieldable_items/shields/kite_shield/metal_kite/metal_kite_shield_magic_ice_medium',0),(4680,4680,'accessories/wieldable_items/shields/kite_shield/wooden_kite/wooden_kite_shield_magic_prismatic_lesser',0),(4681,4681,'accessories/wieldable_items/shields/kite_shield/wooden_kite/wooden_kite_shield_magic_prismatic_uber',0),(4682,4682,'accessories/wieldable_items/shields/round_shield/metal_etched_round/round_shield_etched_magic_fire_lesser',0),(4683,4683,'accessories/wieldable_items/shields/round_shield/metal_etched_round/round_shield_etched_magic_fire_medium',0),(4684,4684,'accessories/wieldable_items/shields/round_shield/metal_etched_round/round_shield_etched_magic_fire_uber',0),(4685,4685,'animatedobjects/walls/breakable_wall_plain_collision',0),(4686,4686,'animatedobjects/walls/breakable_wall_plain_small_collision',0),(4687,4687,'accessories/wieldable_items/shields/ghost_shields/metal_kite_shield001_ghost',0),(4688,4688,'accessories/wieldable_items/shields/ghost_shields/round_shield_etched001_ghost',0),(4689,4689,'accessories/wieldable_items/shields/ghost_shields/streatched_leather_buckler001_ghost',0),(4690,4690,'accessories/wieldable_items/shields/ghost_shields/wooden_tower_shield001_ghost',0),(4691,4691,'accessories/wieldable_items/weapons/ghost_weapons/battlehammer001_ghost',0),(4692,4692,'accessories/wieldable_items/weapons/ghost_weapons/claws001_ghost',0),(4693,4693,'accessories/wieldable_items/weapons/ghost_weapons/dagger001_ghost',0),(4694,4694,'accessories/wieldable_items/weapons/ghost_weapons/double_axe001_ghost',0),(4695,4695,'accessories/wieldable_items/weapons/ghost_weapons/greatsword001_ghost',0),(4696,4696,'accessories/wieldable_items/weapons/ghost_weapons/great_spear001_ghost',0),(4697,4697,'accessories/wieldable_items/weapons/ghost_weapons/hand_axe001_ghost',0),(4698,4698,'accessories/wieldable_items/weapons/ghost_weapons/long_bow001_ghost',0),(4699,4699,'accessories/wieldable_items/weapons/ghost_weapons/quarterstaff001_ghost',0),(4700,4700,'accessories/wieldable_items/weapons/ghost_weapons/rapier001_ghost',0),(4701,4701,'accessories/wieldable_items/weapons/ghost_weapons/short_spear001_ghost',0),(4702,4702,'accessories/wieldable_items/weapons/ghost_weapons/short_sword002_ghost',0),(4703,4703,'accessories/wieldable_items/weapons/ghost_weapons/throwing_hammer001_ghost',0),(4704,4704,'accessories/wieldable_items/weapons/ghost_weapons/wand001_ghost',0),(4705,4705,'accessories/wieldable_items/weapons/ghost_weapons/war_hammer001_ghost',0),(4706,4706,'accessories/wieldable_items/weapons/great_hammer/orc_hammer/orc_hammer_plain',0),(4707,4707,'staticobjects/artifact/mailboxes/mailbox_home',0),(4708,4708,'staticobjects/artifact/mailboxes/mailbox_kisok',0),(4709,4709,'staticobjects/mailboxes/mailbox_home',0),(4710,4710,'staticobjects/mailboxes/mailbox_kisok',0),(4711,4711,'_exp01/characters/monsters/cobra_metallic',0),(4712,4712,'accessories/wieldable_items/weapons/hammer/club_stone/club_stone_plain',0),(4713,4713,'staticobjects/helmet/crown_tranix_chain_uncommon_medium',0),(4714,4714,'staticobjects/shield/shiny_brass_shield_round_shield_etched001_runic',0),(4715,4715,'staticobjects/stein/stein_of_moggok_stein001_runic',0),(4716,4716,'projectiles/spell_electric_ball_red',0),(4717,4717,'staticobjects/fences/ant_qeynos_fencepiece01',0),(4718,4718,'staticobjects/fences/ant_qeynos_fencepiece02',0),(4719,4719,'staticobjects/fences/ant_qeynos_fencepiece03',0),(4720,4720,'staticobjects/fences/ant_qeynos_fencepiece04',0),(4721,4721,'staticobjects/rocks/commonlands_rock',0),(4722,4722,'staticobjects/tree/fprt_datepalm_02',0),(4723,4723,'accessories/wearable_items/monk/monk_plain/chest',0),(4724,4724,'accessories/wearable_items/monk/monk_plain/feet',0),(4725,4725,'accessories/wearable_items/monk/monk_plain/forearms',0),(4726,4726,'accessories/wearable_items/monk/monk_plain/head',0),(4727,4727,'staticobjects/housing_portal_objects/vision_home_gorowyn_5room01',1096),(4728,4728,'accessories/wearable_items/monk/monk_plain/shoulders',0),(4729,4729,'staticobjects/rocks/lavastorm_black_rock_pile',0),(4730,4730,'accessories/wieldable_items/weapons/axe/axe_curved_handle/axe_curved_handle_plain',0),(4731,4731,'accessories/wearable_items/monk/monk_plain/legs',0),(4732,4732,'creatures/tu/gnoll_skeleton',0),(4733,4733,'staticobjects/relics/magic_globe_red',0),(4734,4734,'staticobjects/ap2_ss_rockslide/rockslide_01',0),(4735,4735,'staticobjects/ap2_ss_rockslide/rockslide_wall_01',0),(4736,4736,'accessories/wieldable_items/weapons/great_sword/vampire_greatsword/vampire_greatsword_ornate',0),(4737,4737,'accessories/wieldable_items/weapons/great_sword/vampire_greatsword/vampire_greatsword_plain',0),(4738,4738,'designdummy/designdummy',0),(4739,4739,'_exp01/characters/tool_users/giant_sand_plain_beard',0),(4740,4740,'_exp01/characters/tool_users/giant_sand_plain_goatee',0),(4741,4741,'_exp01/characters/tool_users/giant_sand_plain_mustache',0),(4742,4742,'_exp01/characters/tool_users/giant_sand_plain_none',0),(4743,4743,'staticobjects/majdul_temp_ph_objects/awning_small001',0),(4744,4744,'staticobjects/majdul_temp_ph_objects/tapestry001_longceiling',0),(4745,4745,'_exp01/characters/monsters/crocodile',0),(4746,4746,'animatedobjects/walls/dc_breakable_wall_plain',0),(4747,4747,'animatedobjects/walls/dc_breakable_wall_plain_small',0),(4748,4748,'staticobjects/plants/feerrott_plant_bigleaf',0),(4749,4749,'staticobjects/plants/feerrott_plant_redtop',0),(4750,4750,'staticobjects/housing_portal_objects/vision_home_majdul_bottle01',1096),(4751,4751,'staticobjects/housing_portal_objects/vision_home_majdul_library01',1096),(4752,4752,'staticobjects/housing_portal_objects/vision_home_mistmoore_5room01',1096),(4753,4753,'staticobjects/housing_portal_objects/vision_home_neriak_opera01',1096),(4754,4754,'staticobjects/housing_portal_objects/vision_home_qeynos_dojo01',1096),(4755,4755,'accessories/wearable_items/_exp08/unkown_faction_armor/vanguard/skirt',1096),(4756,4756,'accessories/wearable_items/_exp08/unkown_faction_armor/vanguard/chest',1096),(4757,4757,'accessories/wearable_items/_exp08/unkown_faction_armor/vanguard/feet',1096),(4758,4758,'accessories/wearable_items/_exp08/unkown_faction_armor/vanguard/forearms',1096),(4759,4759,'accessories/wearable_items/_exp08/unkown_faction_armor/vanguard/hands',1096),(4760,4760,'accessories/wearable_items/_exp08/unkown_faction_armor/vanguard/head',1096),(4761,4761,'accessories/wearable_items/_exp08/unkown_faction_armor/vanguard/legs',1096),(4762,4762,'accessories/wearable_items/_exp08/unkown_faction_armor/vanguard/legs_noskirt',1096),(4763,4763,'accessories/wearable_items/_exp08/unkown_faction_armor/vanguard/right',1096),(4764,4764,'accessories/wearable_items/_exp08/unkown_faction_armor/vanguard/shoulders',1096),(4765,4765,'accessories/wearable_items/_exp08/unkown_faction_armor/vanguard/shoulders_nopauldrons',1096),(4766,4766,'creatures/monsters/wolf_shade_green',1096),(4767,4767,'ec/npc/goblin_burglar',1096),(4768,4768,'accessories/wieldable_items/weapons/exp08/1h_pierce/exp08_dagger_goblin1',1096),(4769,4769,'_exp07/zones/exp07_dun_drunder/dpo_dru_drunder_sullon_sconce01_on',1096),(4770,4770,'_exp07/zones/exp07_dun_drunder/dpo_dru_drunder_sullon_sconce01_off',1096),(4771,4771,'accessories/wearable_items/cloak/exp08/cloak_feathered_red',1096),(4772,4772,'accessories/wearable_items/cloak/exp08/cloak_feathered_parrot1',1096),(4773,4773,'accessories/wearable_items/cloak/exp08/cloak_feathered_parrot2',1096),(4774,4774,'accessories/wearable_items/profesion_hats/snow_bunny_hat/head_pink_whiteears_bunny_hat',1096),(4775,4775,'staticobjects/soe_wallet/wheel_of_chance_table_01',1096),(4776,4776,'staticobjects/soe_wallet/card_table_01',1096),(4777,4777,'staticobjects/soe_wallet/card_table_empty_01',1096),(4778,4778,'staticobjects/soe_wallet/cue_ball_black_01',1096),(4779,4779,'staticobjects/soe_wallet/cue_ball_blue_solid_01',1096),(4780,4780,'staticobjects/soe_wallet/cue_ball_blue_stripe_01',1096),(4781,4781,'staticobjects/soe_wallet/cue_ball_green_solid_01',1096),(4782,4782,'staticobjects/soe_wallet/cue_ball_green_stripe_01',1096),(4783,4783,'staticobjects/soe_wallet/cue_ball_magenta_solid_01',1096),(4784,4784,'accessories/wearable_items/_exp07/royal_velium_armor/royal_velium_armor_robe/pants',1096),(4785,4785,'staticobjects/soe_wallet/cue_ball_magenta_stripe_01',1096),(4786,4786,'staticobjects/soe_wallet/cue_ball_orange_solid_01',1096),(4787,4787,'staticobjects/soe_wallet/cue_ball_orange_stripe_01',1096),(4788,4788,'staticobjects/soe_wallet/cue_ball_purple_solid_01',1096),(4789,4789,'staticobjects/soe_wallet/cue_ball_purple_stripe_01',1096),(4790,4790,'staticobjects/soe_wallet/cue_ball_red_solid_01',1096),(4791,4791,'staticobjects/soe_wallet/cue_ball_red_stripe_01',1096),(4792,4792,'staticobjects/soe_wallet/cue_ball_white_01',1096),(4793,4793,'staticobjects/soe_wallet/cue_ball_yellow_solid_01',1096),(4794,4794,'staticobjects/soe_wallet/cue_ball_yellow_stripe_01',1096),(4795,4795,'staticobjects/soe_wallet/cue_rack_01',1096),(4796,4796,'staticobjects/soe_wallet/cue_stick_01',1096),(4797,4797,'staticobjects/soe_wallet/deck_of_cards_01',1096),(4798,4798,'staticobjects/soe_wallet/poker_chips_01',1096),(4799,4799,'staticobjects/soe_wallet/pool_table_01',1096),(4800,4800,'staticobjects/liveevent/erollisi_objects/dpo_erollosi_platecupcakes01',1096),(4801,4801,'staticobjects/liveevent/erollisi_objects/dpo_erollosi_white_chocolate_box',1096),(4802,4802,'staticobjects/liveevent/frostfell/dpo_bauble_bell_string_lights_green_ceiling',1096),(4803,4803,'staticobjects/liveevent/frostfell/dpo_bauble_glass_icicle01_blue',1096),(4804,4804,'staticobjects/liveevent/frostfell/dpo_bauble_glass_icicle01_green',1096),(4805,4805,'staticobjects/liveevent/frostfell/dpo_bauble_glass_icicle01_red',1096),(4806,4806,'staticobjects/liveevent/frostfell/dpo_bauble_oblong_bluesilver01',1096),(4807,4807,'staticobjects/liveevent/frostfell/dpo_bauble_oblong_purplegold01',1096),(4808,4808,'staticobjects/liveevent/frostfell/dpo_bauble_oblong_redgreen01',1096),(4809,4809,'staticobjects/liveevent/frostfell/dpo_snowglobe_halas01',1096),(4810,4810,'staticobjects/liveevent/frostfell/dpo_snowglobe_thurgadin01',1096),(4811,4811,'staticobjects/liveevent/halloween/dpo_banner_notd_fire',1096),(4812,4812,'staticobjects/liveevent/halloween/dpo_banner_notd_nightsky',1096),(4813,4813,'staticobjects/liveevent/halloween/dpo_banner_notd_web_spider',1096),(4814,4814,'staticobjects/liveevent/halloween/dpo_halloween_hanging_spider01_swinging',1096),(4815,4815,'staticobjects/liveevent/halloween/holiday_skull_candy_dispenser_01',1096),(4816,4816,'staticobjects/liveevent/halloween/halfing_display_traps01',1096),(4817,4817,'staticobjects/halloween/fprt_tombstonea001',1096),(4818,4818,'staticobjects/soe_wallet/slot_machine_reward_coin',1096),(4819,4819,'staticobjects/housing_portal_objects/vision_home_freeport01',1096),(4820,4820,'staticobjects/housing_portal_objects/vision_home_halas01',1096),(4821,4821,'staticobjects/housing_portal_objects/vision_home_kelethin01',1096),(4822,4822,'staticobjects/housing_portal_objects/vision_home_majdul01',1096),(4823,4823,'staticobjects/housing_portal_objects/vision_home_neriak01',1096),(4824,4824,'staticobjects/housing_portal_objects/vision_home_qeynos01',1096),(4825,4825,'staticobjects/housing_portal_objects/vision_home_veteran_mistmoore01',1096),(4826,4826,'_exp08/characters/monsters/wuoshi_decay/wuoshi_decay',1096),(4827,4827,'_exp08/characters/tool_users/war_generals/war_general_male',1096),(4828,4828,'staticobjects/mushroom/lf_flora_mushroom_small01',1096),(4829,4829,'staticobjects/mushroom/lf_flora_mushroom_small02',1096),(4830,4830,'staticobjects/mushroom/lf_flora_mushroom_small03',1096),(4831,4831,'staticobjects/mushroom/lf_flora_mushroom_small04',1096),(4832,4832,'_exp07/zones/exp07_rgn_eastern_wastes/teleport_vision_eastern_wastes_spires',1096),(4833,4833,'staticobjects/barrels/floor_barrel_any_small02triplesize',1096),(4834,4834,'staticobjects/weapons/great_spear_ornate001_uprightx10_dpo',1096),(4835,4835,'creatures/mounts/flying_disc/tinkered_skiff_01',1096),(4836,4836,'_exp07/objects/vel_dragon_ring_broken',1096),(4837,4837,'_exp07/objects/vel_dragon_ring_fixed',1096),(4838,4838,'staticobjects/halloween/dpo_halloween_candy_corn',1096),(4839,4839,'staticobjects/halloween/dpo_halloween_light_candy_corn',1096),(4840,4840,'staticobjects/liveevent/frostfell/dpo_holiday_candy_bowl01',1096),(4841,4841,'staticobjects/liveevent/frostfell/dpo_candy_peppermint01',1096),(4842,4842,'staticobjects/liveevent/frostfell/dpo_candy_peppermint02',1096),(4843,4843,'staticobjects/liveevent/frostfell/dpo_candy_rectangle01',1096),(4844,4844,'staticobjects/liveevent/frostfell/dpo_candy_rectangle01_red',1096),(4845,4845,'staticobjects/liveevent/frostfell/dpo_candy_rectangle_blue',1096),(4846,4846,'staticobjects/liveevent/frostfell/dpo_candy_rectangle_green',1096),(4847,4847,'staticobjects/liveevent/frostfell/dpo_candy_rectangle_red02',1096),(4848,4848,'staticobjects/liveevent/frostfell/dpo_candy_rectangle_red03',1096),(4849,4849,'staticobjects/liveevent/frostfell/dpo_candy_rectangle_silver',1096),(4850,4850,'staticobjects/liveevent/frostfell/dpo_candy_round_blue',1096),(4851,4851,'staticobjects/liveevent/frostfell/dpo_candy_round_gold',1096),(4852,4852,'staticobjects/liveevent/frostfell/dpo_candy_round_green',1096),(4853,4853,'staticobjects/liveevent/frostfell/dpo_candy_round_red',1096),(4854,4854,'staticobjects/liveevent/frostfell/dpo_candy_round_silver',1096),(4855,4855,'accessories/wearable_items/_exp08/dragon_armor/chain_blue/skirt',1096),(4856,4856,'accessories/wearable_items/_exp08/dragon_armor/chain_blue/chest',1096),(4857,4857,'accessories/wearable_items/_exp08/dragon_armor/chain_blue/feet',1096),(4858,4858,'accessories/wearable_items/_exp08/dragon_armor/chain_blue/forearms',1096),(4859,4859,'accessories/wearable_items/_exp08/dragon_armor/chain_blue/hands',1096),(4860,4860,'accessories/wearable_items/_exp08/dragon_armor/chain_blue/head',1096),(4861,4861,'accessories/wearable_items/_exp08/dragon_armor/chain_blue/legs',1096),(4862,4862,'accessories/wearable_items/_exp08/dragon_armor/chain_blue/legs_noskirt',1096),(4863,4863,'accessories/wearable_items/_exp08/dragon_armor/chain_blue/shoulders',1096),(4864,4864,'accessories/wearable_items/_exp08/dragon_armor/chain_blue/shoulders_epic',1096),(4865,4865,'accessories/wearable_items/_exp08/dragon_armor/chain_brown/skirt',1096),(4866,4866,'accessories/wearable_items/_exp08/dragon_armor/chain_brown/chest',1096),(4867,4867,'accessories/wearable_items/_exp08/dragon_armor/chain_brown/feet',1096),(4868,4868,'accessories/wearable_items/_exp08/dragon_armor/chain_brown/forearms',1096),(4869,4869,'accessories/wearable_items/_exp08/dragon_armor/chain_brown/hands',1096),(4870,4870,'accessories/wearable_items/_exp08/dragon_armor/chain_brown/head',1096),(4871,4871,'accessories/wearable_items/_exp08/dragon_armor/chain_brown/legs',1096),(4872,4872,'accessories/wearable_items/_exp08/dragon_armor/chain_brown/legs_noskirt',1096),(4873,4873,'accessories/wearable_items/_exp08/dragon_armor/chain_brown/shoulders',1096),(4874,4874,'accessories/wearable_items/_exp08/dragon_armor/chain_brown/shoulders_epic',1096),(4875,4875,'accessories/wearable_items/_exp08/dragon_armor/chain_green/skirt',1096),(4876,4876,'accessories/wearable_items/_exp08/dragon_armor/chain_green/chest',1096),(4877,4877,'accessories/wearable_items/_exp08/dragon_armor/chain_green/feet',1096),(4878,4878,'accessories/wearable_items/_exp08/dragon_armor/chain_green/forearms',1096),(4879,4879,'accessories/wearable_items/_exp08/dragon_armor/chain_green/hands',1096),(4880,4880,'accessories/wearable_items/_exp08/dragon_armor/chain_green/head',1096),(4881,4881,'accessories/wearable_items/_exp08/dragon_armor/chain_green/legs',1096),(4882,4882,'accessories/wearable_items/_exp08/dragon_armor/chain_green/legs_noskirt',1096),(4883,4883,'accessories/wearable_items/_exp08/dragon_armor/chain_green/shoulders',1096),(4884,4884,'accessories/wearable_items/_exp08/dragon_armor/chain_green/shoulders_epic',1096),(4885,4885,'accessories/wearable_items/_exp08/dragon_armor/chain_red/skirt',1096),(4886,4886,'accessories/wearable_items/_exp08/dragon_armor/chain_red/chest',1096),(4887,4887,'accessories/wearable_items/_exp08/dragon_armor/chain_red/feet',1096),(4888,4888,'accessories/wearable_items/_exp08/dragon_armor/chain_red/forearms',1096),(4889,4889,'accessories/wearable_items/_exp08/dragon_armor/chain_red/hands',1096),(4890,4890,'accessories/wearable_items/_exp08/dragon_armor/chain_red/head',1096),(4891,4891,'accessories/wearable_items/_exp08/dragon_armor/chain_red/legs',1096),(4892,4892,'accessories/wearable_items/_exp08/dragon_armor/chain_red/legs_noskirt',1096),(4893,4893,'accessories/wearable_items/_exp08/dragon_armor/chain_red/shoulders',1096),(4894,4894,'_exp01/zones/animated_objects/djn_mirror_translocation',0),(4895,4895,'_exp01/zones/animated_objects/djn_mirror_translocation_base',0),(4896,4896,'accessories/wieldable_items/weapons/hammer/mace_obsidian_edged/mace_obsidian_edged_plain',0),(4897,4897,'_exp01/characters/monsters/dragon_siyamak',0),(4898,4898,'staticobjects/feerrott_epic02_froglok/firefly_particles',0),(4899,4899,'staticobjects/feerrott_epic02_froglok/froglok_totem',0),(4900,4900,'staticobjects/feerrott_epic02_froglok/ogre_pillar_1',0),(4901,4901,'staticobjects/feerrott_epic02_froglok/ogre_tower',0),(4902,4902,'staticobjects/feerrott_epic02_froglok/ogre_wall_1',0),(4903,4903,'staticobjects/feerrott_epic02_froglok/ogre_wall_2',0),(4904,4904,'staticobjects/feerrott_epic02_froglok/ogre_wall_3',0),(4905,4905,'staticobjects/feerrott_epic02_froglok/ogre_wall_low_1',0),(4906,4906,'staticobjects/feerrott_epic02_froglok/ogre_wall_low_2',0),(4907,4907,'staticobjects/feerrott_epic02_froglok/ogre_wall_low_3',0),(4908,4908,'staticobjects/feerrott_epic02_froglok/ogre_wall_low_4',0),(4909,4909,'staticobjects/feerrott_epic02_froglok/ogre_wall_low_5',0),(4910,4910,'staticobjects/feerrott_epic02_froglok/tent_large',0),(4911,4911,'staticobjects/feerrott_epic02_froglok/tent_small',0),(4912,4912,'staticobjects/feerrott_epic02_froglok/tiki_torch',0),(4913,4913,'staticobjects/feerrott_epic02_froglok/wall_large_1',0),(4914,4914,'accessories/wieldable_items/weapons/great_spear/scythe/scythe_plain',0),(4915,4915,'staticobjects/relics/nekcas_eviltrinket_brokentablet001',0),(4916,4916,'_exp01/characters/monsters/dragon_barakah',0),(4917,4917,'_exp01/characters/tool_users/dervish_male_peasant',0),(4918,4918,'_exp01/characters/tool_users/giant_sand_wizard_beard',0),(4919,4919,'_exp01/characters/tool_users/giant_sand_wizard_combo',0),(4920,4920,'_exp01/characters/tool_users/giant_sand_wizard_mustache',0),(4921,4921,'_exp01/characters/tool_users/giant_sand_wizard_plain',0),(4922,4922,'_exp01/characters/tool_users/dervish_male_peasant_beard',0),(4923,4923,'staticobjects/ap2/terraporter',0),(4924,4924,'staticobjects/tables/floor_table_troll_large',0),(4925,4925,'accessories/wieldable_items/weapons/hammer/mace_eagle_prongs/mace_eagle_prongs_plain',0),(4926,4926,'staticobjects/brazier/floor_brazier_gnoll',0),(4927,4927,'_exp01/characters/tool_users/dervish_female_peasant',0),(4928,4928,'accessories/wearable_items/magus/common/high/hood',0),(4929,4929,'accessories/wearable_items/_exp08/dragon_armor/chain_red/shoulders_epic',1096),(4930,4930,'accessories/wearable_items/magus/rare/high/hood',0),(4931,4931,'staticobjects/ap2/gnoll_totem',0),(4932,4932,'staticobjects/ap2/gnoll_wall_teeth1',0),(4933,4933,'staticobjects/ap2/gnoll_wall_teeth2',0),(4934,4934,'staticobjects/ap2/gnoll_wall_teeth3',0),(4935,4935,'staticobjects/chairs/gnoll_chair',0),(4936,4936,'ec/pc/froglok/froglok_female_toadplain',0),(4937,4937,'ec/pc/froglok/froglok_female_toad',0),(4938,4938,'ec/pc/froglok/froglok_female_rainbow',0),(4939,4939,'ec/pc/froglok/froglok_female_leopard',0),(4940,4940,'ec/pc/froglok/froglok_female_blackgoo',0),(4941,4941,'ec/pc/froglok/froglok_female_blackglove',0),(4942,4942,'ec/pc/froglok/froglok_female_black2',0),(4943,4943,'ec/pc/froglok/froglok_female_black1',0),(4944,4944,'ec/pc/froglok/froglok_female_albino',0),(4945,4945,'_exp01/characters/tool_users/orc_desert_worker',0),(4946,4946,'accessories/wearable_items/ghost/ghost_plate/chest',0),(4947,4947,'accessories/wearable_items/ghost/ghost_plate/legs',0),(4948,4948,'accessories/wearable_items/ghost/ghost_plate/feet',0),(4949,4949,'accessories/wearable_items/ghost/ghost_plate/forearms',0),(4950,4950,'accessories/wearable_items/ghost/ghost_plate/hands',0),(4951,4951,'accessories/wearable_items/ghost/ghost_plate/head',0),(4952,4952,'accessories/wearable_items/ghost/ghost_plate/shoulders',0),(4953,4953,'ec/pc/froglok/froglok_male_zombie',0),(4954,4954,'accessories/wearable_items/ghost/ghost_mage/arms',0),(4955,4955,'accessories/wearable_items/ghost/ghost_mage/chest',0),(4956,4956,'accessories/wearable_items/ghost/ghost_mage/skirt',0),(4957,4957,'accessories/wearable_items/ghost/ghost_robes/chest',0),(4958,4958,'accessories/wearable_items/ghost/ghost_robes/pants',0),(4959,4959,'accessories/wearable_items/ghost/ghost_robes/skirt',0),(4960,4960,'accessories/wearable_items/magus/robes/dragon_ornate/hood',0),(4961,4961,'accessories/wieldable_items/weapons/dagger/embalming_blade/embalming_blade_plain',0),(4962,4962,'accessories/wieldable_items/weapons/axe/ratskull_hatchet/ratskull_hatchet_plain',0),(4963,4963,'ec/pc/barbarian/soga_barbarian_female',0),(4964,4964,'ec/pc/barbarian/soga_barbarian_male',0),(4965,4965,'ec/pc/darkelf/soga_darkelf_female',0),(4966,4966,'ec/pc/darkelf/soga_darkelf_male',0),(4967,4967,'ec/pc/dwarf/soga_dwarf_female',0),(4968,4968,'ec/pc/dwarf/soga_dwarf_male',0),(4969,4969,'ec/pc/erudite/soga_erudite_female',0),(4970,4970,'ec/pc/erudite/soga_erudite_male',0),(4971,4971,'ec/pc/gnome/soga_gnome_female',0),(4972,4972,'ec/pc/gnome/soga_gnome_male',0),(4973,4973,'ec/pc/halfelf/soga_halfelf_female',0),(4974,4974,'ec/pc/halfelf/soga_halfelf_female_scar01',0),(4975,4975,'ec/pc/halfelf/soga_halfelf_female_scar02',0),(4976,4976,'ec/pc/halfelf/soga_halfelf_female_scar03',0),(4977,4977,'ec/pc/halfelf/soga_halfelf_female_scar04',0),(4978,4978,'ec/pc/halfelf/soga_halfelf_female_scar05',0),(4979,4979,'ec/pc/halfelf/soga_halfelf_male',0),(4980,4980,'ec/pc/halfelf/soga_halfelf_male_scar01',0),(4981,4981,'ec/pc/halfelf/soga_halfelf_male_scar02',0),(4982,4982,'ec/pc/halfelf/soga_halfelf_male_scar03',0),(4983,4983,'ec/pc/halfelf/soga_halfelf_male_scar04',0),(4984,4984,'ec/pc/halfelf/soga_halfelf_male_scar05',0),(4985,4985,'ec/pc/halfling/soga_halfling_female',0),(4986,4986,'ec/pc/halfling/soga_halfling_male',0),(4987,4987,'ec/pc/highelf/soga_highelf_female',0),(4988,4988,'ec/pc/highelf/soga_highelf_male',0),(4989,4989,'ec/pc/human/soga_human_female',0),(4990,4990,'ec/pc/human/soga_human_male',0),(4991,4991,'ec/pc/woodelf/soga_woodelf_female',0),(4992,4992,'ec/pc/woodelf/soga_woodelf_male',0),(4993,4993,'ec/pc/ogre/soga_ogre_female',0),(4994,4994,'ec/pc/ogre/soga_ogre_male',0),(4995,4995,'staticobjects/ladders/orc_tilted_ladder01',0),(4996,4996,'accessories/wearable_items/_exp08/dragon_armor/chain_shadow/skirt',1096),(4997,4997,'staticobjects/doors/evefrost_snow_large_door',0),(4998,4998,'staticobjects/doorways/evefrost_snow_large_archway',0),(4999,4999,'_exp01/characters/tool_users/dervish_male_guard',0),(5000,5000,'_exp01/characters/tool_users/specter_phantom',0),(5001,5001,'_exp01/characters/tool_users/specter_phantom_ghost',0),(5002,5002,'_exp01/characters/tool_users/specter_skeleton',0),(5003,5003,'_exp01/characters/tool_users/specter_skeleton_ghost',0),(5004,5004,'_exp01/characters/monsters/dragon_barakah_flying',0),(5005,5005,'_exp01/characters/monsters/dragon_siyamak_flying',0),(5006,5006,'_exp01/characters/monsters/monkey',0),(5007,5007,'staticobjects/land/icefloat',0),(5008,5008,'animatedobjects/barrels/barrel_plainlarge',0),(5009,5009,'accessories/wieldable_items/weapons/great_spear/scythe_dragon_tooth/scythe_dragon_tooth_plain',0),(5010,5010,'_exp01/characters/tool_users/dervish_female_guard',0),(5011,5011,'animatedobjects/walls/perm_breakable_wall_plain_small',0),(5012,5012,'animatedobjects/walls/perm_breakable_wall_plain',0),(5013,5013,'staticobjects/statues/floor_statue_nagafen',0),(5014,5014,'staticobjects/rocks/perm_boulder01',0),(5015,5015,'staticobjects/dueling_banner/dueling_banner',0),(5016,5016,'_exp01/characters/tool_users/cyclops',0),(5017,5017,'_exp01/characters/tool_users/cyclops_horn1',0),(5018,5018,'_exp01/characters/tool_users/cyclops_horn2',0),(5019,5019,'ap02/gnoll_dobermann',0),(5020,5020,'ap02/rock_crawler',0),(5021,5021,'_exp01/characters/tool_users/orc_desert_worker_bald',0),(5022,5022,'_exp01/characters/tool_users/orc_desert_warrior_bald',0),(5023,5023,'_exp01/characters/tool_users/orc_desert_warrior_bald_round',0),(5024,5024,'_exp01/characters/tool_users/orc_desert_warrior_bald_square',0),(5025,5025,'_exp01/characters/tool_users/orc_desert_warrior_helm',0),(5026,5026,'_exp01/characters/tool_users/orc_desert_warrior_helm_round',0),(5027,5027,'_exp01/characters/tool_users/orc_desert_warrior_helm_square',0),(5028,5028,'ec/pc/barbarian/soga_barbarian_female_tattoo01',0),(5029,5029,'ec/pc/barbarian/soga_barbarian_female_tattoo02',0),(5030,5030,'ec/pc/barbarian/soga_barbarian_female_tattoo03',0),(5031,5031,'ec/pc/barbarian/soga_barbarian_female_tattoo04',0),(5032,5032,'ec/pc/barbarian/soga_barbarian_female_tattoo05',0),(5033,5033,'ec/pc/barbarian/soga_barbarian_male_tattoo01',0),(5034,5034,'ec/pc/barbarian/soga_barbarian_male_tattoo02',0),(5035,5035,'ec/pc/barbarian/soga_barbarian_male_tattoo03',0),(5036,5036,'ec/pc/barbarian/soga_barbarian_male_tattoo04',0),(5037,5037,'ec/pc/barbarian/soga_barbarian_male_tattoo05',0),(5038,5038,'ec/pc/dwarf/soga_dwarf_female_tattoo01',0),(5039,5039,'ec/pc/dwarf/soga_dwarf_female_tattoo02',0),(5040,5040,'ec/pc/dwarf/soga_dwarf_female_tattoo03',0),(5041,5041,'ec/pc/dwarf/soga_dwarf_female_tattoo04',0),(5042,5042,'ec/pc/dwarf/soga_dwarf_female_tattoo05',0),(5043,5043,'ec/pc/dwarf/soga_dwarf_male_tattoo01',0),(5044,5044,'ec/pc/dwarf/soga_dwarf_male_tattoo02',0),(5045,5045,'ec/pc/dwarf/soga_dwarf_male_tattoo03',0),(5046,5046,'ec/pc/dwarf/soga_dwarf_male_tattoo04',0),(5047,5047,'ec/pc/dwarf/soga_dwarf_male_tattoo05',0),(5048,5048,'ec/pc/dwarf/soga_dwarf_male_tattoo06',0),(5049,5049,'ec/pc/erudite/soga_erudite_female_tattooevil01',0),(5050,5050,'ec/pc/erudite/soga_erudite_female_tattooevil02',0),(5051,5051,'ec/pc/erudite/soga_erudite_female_tattooevil03',0),(5052,5052,'ec/pc/erudite/soga_erudite_female_tattooevil04',0),(5053,5053,'ec/pc/erudite/soga_erudite_female_tattooevil05',0),(5054,5054,'ec/pc/erudite/soga_erudite_female_tattoogood01',0),(5055,5055,'ec/pc/erudite/soga_erudite_female_tattoogood02',0),(5056,5056,'ec/pc/erudite/soga_erudite_female_tattoogood03',0),(5057,5057,'ec/pc/erudite/soga_erudite_female_tattoogood04',0),(5058,5058,'ec/pc/erudite/soga_erudite_female_tattoogood05',0),(5059,5059,'ec/pc/erudite/soga_erudite_male_tattooevil01',0),(5060,5060,'ec/pc/erudite/soga_erudite_male_tattooevil02',0),(5061,5061,'ec/pc/erudite/soga_erudite_male_tattooevil03',0),(5062,5062,'ec/pc/erudite/soga_erudite_male_tattooevil04',0),(5063,5063,'ec/pc/erudite/soga_erudite_male_tattooevil05',0),(5064,5064,'ec/pc/erudite/soga_erudite_male_tattoogood01',0),(5065,5065,'ec/pc/erudite/soga_erudite_male_tattoogood02',0),(5066,5066,'ec/pc/erudite/soga_erudite_male_tattoogood03',0),(5067,5067,'ec/pc/erudite/soga_erudite_male_tattoogood04',0),(5068,5068,'ec/pc/erudite/soga_erudite_male_tattoogood05',0),(5069,5069,'ec/pc/woodelf/soga_woodelf_female_tattoo01',0),(5070,5070,'ec/pc/woodelf/soga_woodelf_female_tattoo02',0),(5071,5071,'ec/pc/woodelf/soga_woodelf_female_tattoo03',0),(5072,5072,'ec/pc/woodelf/soga_woodelf_female_tattoo04',0),(5073,5073,'ec/pc/woodelf/soga_woodelf_female_tattoo05',0),(5074,5074,'ec/pc/woodelf/soga_woodelf_female_tattoo06',0),(5075,5075,'ec/pc/woodelf/soga_woodelf_female_tattoo07',0),(5076,5076,'ec/pc/woodelf/soga_woodelf_female_tattoo08',0),(5077,5077,'ec/pc/woodelf/soga_woodelf_male_tattoo01',0),(5078,5078,'ec/pc/woodelf/soga_woodelf_male_tattoo02',0),(5079,5079,'ec/pc/woodelf/soga_woodelf_male_tattoo03',0),(5080,5080,'ec/pc/woodelf/soga_woodelf_male_tattoo04',0),(5081,5081,'ec/pc/woodelf/soga_woodelf_male_tattoo05',0),(5082,5082,'ec/pc/woodelf/soga_woodelf_male_tattoo06',0),(5083,5083,'ec/pc/woodelf/soga_woodelf_male_tattoo07',0),(5084,5084,'ec/pc/woodelf/soga_woodelf_male_tattoo08',0),(5085,5085,'_exp01/zones/dungeons/living_tombs/lt_rm02/lt_rm02_fountain01_symbol',0),(5086,5086,'staticobjects/wood/wood_plank03',0),(5087,5087,'staticobjects/ap2/gnoll_crystal_wheelbarrow',0),(5088,5088,'_exp01/zones/regions/sinking_sands/ss_objects/ss_rocks/ss_rocks_group03',0),(5089,5089,'accessories/wearable_items/_exp08/dragon_armor/chain_shadow/chest',1096),(5090,5090,'_exp01/zones/regions/pillars_of_flame/pf_objects/pf_rock/pf_rock_medium05',0),(5091,5091,'accessories/wearable_items/_exp08/dragon_armor/chain_shadow/feet',1096),(5092,5092,'accessories/wearable_items/_exp08/dragon_armor/chain_shadow/forearms',1096),(5093,5093,'accessories/wearable_items/_exp08/dragon_armor/chain_shadow/hands',1096),(5094,5094,'_exp01/zones/regions/pillars_of_flame/pf_objects/pf_rock/pf_rock_medium04',0),(5095,5095,'ap02/hellboar',0),(5096,5096,'ap02/fungusman',0),(5097,5097,'accessories/wearable_items/_exp08/dragon_armor/chain_shadow/head',1096),(5098,5098,'ap02/gnoll_overlord',0),(5099,5099,'_exp01/zones/animated_objects/cr_vase_breakable',0),(5100,5100,'_exp01/zones/animated_objects/md_vase_breakable',0),(5101,5101,'_exp01/zones/animated_objects/pf_vase_breakable',0),(5102,5102,'_exp01/zones/animated_objects/sc_vase_breakable',0),(5103,5103,'_exp01/zones/animated_objects/ss_vase_breakable',0),(5104,5104,'accessories/wearable_items/_exp08/dragon_armor/chain_shadow/legs',1096),(5105,5105,'_exp01/zones/regions/sinking_sands/ss_objects/ss_rocks/ss_rocks_group01',0),(5106,5106,'_exp01/zones/regions/sinking_sands/ss_objects/ss_rocks/ss_rocks_group02',0),(5107,5107,'_exp01/characters/tool_users/orc_desert_shaman',0),(5108,5108,'_exp01/characters/tool_users/orc_desert_shaman_bald',0),(5109,5109,'accessories/wearable_items/_exp08/dragon_armor/chain_shadow/legs_noskirt',1096),(5110,5110,'accessories/wearable_items/_exp08/dragon_armor/chain_shadow/shoulders',1096),(5111,5111,'accessories/wearable_items/_exp08/dragon_armor/chain_shadow/shoulders_epic',1096),(5112,5112,'accessories/wearable_items/_exp08/dragon_armor/chain-scale_blue/skirt',1096),(5113,5113,'accessories/wearable_items/_exp08/dragon_armor/chain-scale_blue/chest',1096),(5114,5114,'accessories/wearable_items/_exp08/dragon_armor/chain-scale_blue/feet',1096),(5115,5115,'accessories/wearable_items/_exp08/dragon_armor/chain-scale_blue/forearms',1096),(5116,5116,'accessories/wearable_items/_exp08/dragon_armor/chain-scale_blue/hands',1096),(5117,5117,'accessories/wearable_items/_exp08/dragon_armor/chain-scale_blue/head',1096),(5118,5118,'_exp01/characters/tool_users/cyclops_berserker_heavy',0),(5119,5119,'_exp01/characters/tool_users/cyclops_berserker_light',0),(5120,5120,'_exp01/characters/tool_users/cyclops_berserker_medium',0),(5121,5121,'staticobjects/staff/sorcerers_staff001_ornate_upright',0),(5122,5122,'accessories/wearable_items/_exp08/dragon_armor/chain-scale_blue/legs',1096),(5123,5123,'ap02/gnoll_overlord_armored',0),(5124,5124,'ap02/gnoll_dobermann_ghost',0),(5125,5125,'ap02/gnoll_overlord_armored_ghost',0),(5126,5126,'ap02/gnoll_overlord_ghost',0),(5127,5127,'_exp01/zones/objects/mirrors/djin_mirror_teleporter01',0),(5128,5128,'staticobjects/interiors/scenes/dungeons/adv02/objects/adv02_debris001',0),(5129,5129,'accessories/wieldable_items/weapons/dagger/dagger/dpo_housing/dagger001_plain_upright',0),(5130,5130,'_exp01/characters/tool_users/mummy',0),(5131,5131,'_exp01/characters/tool_users/mummy_pharoh1',0),(5132,5132,'_exp01/characters/tool_users/mummy_pharoh2',0),(5133,5133,'_exp01/characters/tool_users/mummy_priest',0),(5134,5134,'_exp01/characters/tool_users/mummy_soldier',0),(5135,5135,'_exp01/characters/tool_users/mummy_zombie',0),(5136,5136,'_exp01/characters/tool_users/mummy_zombie_pharoh1',0),(5137,5137,'_exp01/characters/tool_users/mummy_zombie_pharoh2',0),(5138,5138,'_exp01/characters/tool_users/mummy_zombie_priest',0),(5139,5139,'_exp01/characters/tool_users/mummy_zombie_soldier',0),(5140,5140,'staticobjects/cobwebs/dpo_spiderweb_corner01',0),(5141,5141,'staticobjects/cobwebs/dpo_spiderweb_large01',0),(5142,5142,'staticobjects/cobwebs/dpo_spiderweb_large02',0),(5143,5143,'staticobjects/cobwebs/dpo_spiderweb_small01',0),(5144,5144,'staticobjects/cobwebs/dpo_spiderweb_small02',0),(5145,5145,'accessories/wearable_items/_exp08/dragon_armor/chain-scale_blue/legs_noskirt',1096),(5146,5146,'_exp01/zones/regions/pillars_of_flame/pf_objects/pf_rock/pf_rock_small01',0),(5147,5147,'accessories/wearable_items/_exp08/dragon_armor/chain-scale_blue/shoulders',1096),(5148,5148,'_exp01/zones/objects/containers/drv_container_merch_basketshort01',0),(5149,5149,'_exp01/zones/objects/containers/ss_crate_small01',0),(5150,5150,'_exp01/zones/flora/cacti/ss_flora_cacti_med01',0),(5151,5151,'_exp01/zones/flora/cacti/ss_flora_cacti_multi01',0),(5152,5152,'_exp01/zones/flora/cacti/ss_flora_cacti_round01',0),(5153,5153,'accessories/wearable_items/_exp08/dragon_armor/chain-scale_blue/shoulders_epic',1096),(5154,5154,'accessories/wearable_items/_exp08/dragon_armor/chain-scale_green/skirt',1096),(5155,5155,'_exp01/zones/objects/tents/drv_tent_merchant_blue',0),(5156,5156,'_exp01/zones/objects/tents/drv_tent_merchant_orange',0),(5157,5157,'_exp01/zones/objects/tents/drv_tent_merchant_red',0),(5158,5158,'_exp01/zones/objects/tents/drv_tent_merchant_teal',0),(5159,5159,'_exp01/zones/objects/tents/pf_tent_monk01',0),(5160,5160,'_exp01/zones/objects/tents/sc_tent_bard01',0),(5161,5161,'_exp01/zones/objects/tents/ss_tent_nomad_double01',0),(5162,5162,'_exp01/zones/objects/tents/pf_tent/pf_tent_crude_nomad01',0),(5163,5163,'_exp01/zones/objects/tents/pf_tent/pf_tent_crude_nomad02',0),(5164,5164,'_exp01/zones/objects/tents/pf_tent/pf_tent_purple_nomad01',0),(5165,5165,'_exp01/zones/objects/buckets/cr_bucket_orc_full_meat',0),(5166,5166,'_exp01/zones/objects/butcher_tools/cr_meat_hanger_orc',0),(5167,5167,'_exp01/zones/objects/chairs/cr_stool_orc_wood01',0),(5168,5168,'_exp01/zones/objects/firepits/cr_firepit_orc01',0),(5169,5169,'_exp01/zones/objects/firepits/cr_signal_fire',0),(5170,5170,'_exp01/zones/objects/mats/cr_straw_mat_worn01',0),(5171,5171,'_exp01/zones/objects/mats/cr_straw_mat_worn02',0),(5172,5172,'_exp01/zones/objects/rubbish/cr_orc_rubbishpile01',0),(5173,5173,'_exp01/zones/objects/rubbish/cr_orc_rubbishpile02',0),(5174,5174,'_exp01/zones/objects/eggs/pf_scorpion_egg_group',0),(5175,5175,'_exp01/zones/objects/eggs/pf_scorpion_egg_group_broken',0),(5176,5176,'_exp01/characters/tool_users/cyclops_shaman1',0),(5177,5177,'_exp01/characters/tool_users/cyclops_shaman1_tattoo1',0),(5178,5178,'_exp01/characters/tool_users/cyclops_shaman1_tattoo2',0),(5179,5179,'_exp01/characters/tool_users/cyclops_shaman1_tattoo3',0),(5180,5180,'_exp01/characters/tool_users/cyclops_shaman2',0),(5181,5181,'_exp01/characters/tool_users/cyclops_shaman2_tattoo1',0),(5182,5182,'_exp01/characters/tool_users/cyclops_shaman2_tattoo2',0),(5183,5183,'_exp01/characters/tool_users/cyclops_shaman2_tattoo3',0),(5184,5184,'_exp01/characters/tool_users/cyclops_shaman3',0),(5185,5185,'_exp01/characters/tool_users/cyclops_shaman3_tattoo1',0),(5186,5186,'_exp01/characters/tool_users/cyclops_shaman3_tattoo2',0),(5187,5187,'_exp01/characters/tool_users/cyclops_shaman3_tattoo3',0),(5188,5188,'_exp01/zones/objects/musical_instruments/djn_music_mandolin01',0),(5189,5189,'_exp01/zones/objects/musical_instruments/djn_music_harp01',0),(5190,5190,'_exp01/characters/tool_users/sand_goblin_worker',0),(5191,5191,'_exp01/characters/monsters/sphinx',0),(5192,5192,'_exp01/characters/monsters/sphinx_crio',0),(5193,5193,'_exp01/characters/monsters/sphinx_hieraco',0),(5194,5194,'_exp01/characters/monsters/sphinx_zombie',0),(5195,5195,'_exp01/characters/tool_users/gnolll_anubis',0),(5196,5196,'_exp01/characters/tool_users/gnolll_anubis_mummy',0),(5197,5197,'_exp01/zones/objects/doorknocker/md_doorknocker01',0),(5198,5198,'_exp01/zones/objects/eggs/pf_falconeggs_broken',0),(5199,5199,'_exp01/zones/objects/eggs/pf_falconeggs_mixed',0),(5200,5200,'_exp01/zones/objects/eggs/pf_falconeggs_unbroken',0),(5201,5201,'_exp01/zones/objects/nests/pf_nest_harpy01',0),(5202,5202,'_exp01/zones/objects/climbables/md_p20_lattice_large01',0),(5203,5203,'_exp01/zones/objects/climbables/md_p20_oh_med01',0),(5204,5204,'_exp01/zones/objects/climbables/md_p20_oh_med02',0),(5205,5205,'_exp01/zones/objects/climbables/md_p20_oh_med03',0),(5206,5206,'_exp01/zones/objects/climbables/md_p20_oh_small01',0),(5207,5207,'_exp01/zones/objects/climbables/md_p20_plank_large01',0),(5208,5208,'_exp01/zones/objects/climbables/md_p20_plank_small01',0),(5209,5209,'staticobjects/gnomish_devices/cog_table',0),(5210,5210,'staticobjects/gnomish_devices/crank_machine',0),(5211,5211,'staticobjects/gnomish_devices/sproket_cluster',0),(5212,5212,'_exp01/zones/objects/tower_banners/court_banner_blades',0),(5213,5213,'_exp01/zones/objects/tower_banners/court_banner_dagger',0),(5214,5214,'_exp01/zones/objects/tower_banners/court_banner_suncoin',0),(5215,5215,'_exp01/zones/objects/tower_banners/court_banner_truth',0),(5216,5216,'_exp01/characters/tool_users/minotaur_golden',0),(5217,5217,'_exp01/characters/monsters/monkey_golden',0),(5218,5218,'_exp01/characters/tool_users/sand_goblin_warrior',0),(5219,5219,'_exp01/characters/monsters/harpy',0),(5220,5220,'_exp01/zones/objects/pottery/drv_vase_ornate_porcelain_large02',0),(5221,5221,'_exp01/zones/objects/training_items/drv_lashingboard',0),(5222,5222,'_exp01/zones/objects/rugs/drv_rug_round01',0),(5223,5223,'_exp01/zones/objects/rugs/drv_rug_square01',0),(5224,5224,'_exp01/zones/objects/potted_plants/djn_pottedplant_palm01_small_blue',0),(5225,5225,'_exp01/zones/objects/pillows/djn_pillow_floor_group01',0),(5226,5226,'_exp01/zones/objects/urns/drv_urn_large02',0),(5227,5227,'_exp01/zones/objects/urns/drv_urn_small01',0),(5228,5228,'_exp01/zones/objects/urns/drv_urn_small02',0),(5229,5229,'_exp01/characters/monsters/naga',0),(5230,5230,'_exp01/characters/monsters/naga_guardian',0),(5231,5231,'_exp01/characters/monsters/naga_mummy',0),(5232,5232,'_exp01/characters/monsters/naga_zombie',0),(5233,5233,'_exp01/characters/tool_users/genie_male',0),(5234,5234,'_exp01/characters/tool_users/genie_female',0),(5235,5235,'_exp01/characters/tool_users/genie_female_bluegold',0),(5236,5236,'_exp01/characters/tool_users/genie_female_purplepink',0),(5237,5237,'_exp01/characters/monsters/velociraptor',0),(5238,5238,'_exp01/zones/objects/pillows/drv_pillow_seat_weights01',0),(5239,5239,'accessories/wearable_items/_exp08/dragon_armor/chain-scale_green/chest',1096),(5240,5240,'_exp01/zones/objects/vases/djn_vase_gold02',0),(5241,5241,'_exp01/zones/objects/vases/djn_vase_brass02',0),(5242,5242,'_exp01/zones/objects/basins/djn_basin_water_goldbrass01',0),(5243,5243,'_exp01/zones/objects/basins/djn_basin_water_steel01',0),(5244,5244,'_exp01/zones/objects/urns/lt_urn01',0),(5245,5245,'_exp01/zones/objects/pottery/drv_vase_ornate_large01',0),(5246,5246,'_exp01/zones/objects/musical_instruments/djn_music_mandolin_broken01',0),(5247,5247,'_exp01/zones/objects/roomdivider/drv_divider_ornate01',0),(5248,5248,'_exp01/zones/dungeons/shimmering_citadel/objects/shim_obj_liftplatform01',0),(5249,5249,'_exp01/characters/monsters/sabertooth',0),(5250,5250,'_exp01/zones/objects/tables/drv_table_coffee_ornate01',0),(5251,5251,'_exp01/zones/objects/tapestries/drv_tapestry_short01',0),(5252,5252,'_exp01/zones/objects/tapestries/drv_tapestry_short02',0),(5253,5253,'_exp01/zones/objects/tapestries/drv_tapestry_tall01',0),(5254,5254,'_exp01/zones/objects/tapestries/drv_tapestry_tall02',0),(5255,5255,'_exp01/zones/objects/chairs/drv_bench_brass_ornate01',0),(5256,5256,'_exp01/zones/objects/chairs/drv_stool_wicker_plain01',0),(5257,5257,'_exp01/zones/objects/pillows/drv_pillow_bench_pattern01',0),(5258,5258,'_exp01/zones/objects/light_sources/drv_lightsource_int_lantern_ornate01',0),(5259,5259,'_exp01/zones/objects/rugs/drv_rug_rect_palaceblue01',0),(5260,5260,'_exp01/zones/objects/rugs/drv_rug_rect_palacered01',0),(5261,5261,'staticobjects/papers/floor_paper_human_written01_slightly_raised',0),(5262,5262,'_exp01/characters/tool_users/dervish_male_noble',0),(5263,5263,'_exp01/characters/tool_users/dervish_female_noble',0),(5264,5264,'_exp01/zones/objects/orbs/drv_orb_gazing01',0),(5265,5265,'_exp01/zones/objects/orbs/djn_orb_elevatorswitch01',0),(5266,5266,'_exp01/zones/objects/arena/arena_flag_and_stand_blue01',0),(5267,5267,'_exp01/zones/objects/arena/arena_flag_and_stand_red01',0),(5268,5268,'_exp01/zones/objects/arena/arena_flag_captured_blue01',0),(5269,5269,'_exp01/zones/objects/arena/arena_flag_captured_red01',0),(5270,5270,'_exp01/zones/objects/arena/arena_flag_stand_base01',0),(5271,5271,'staticobjects/pictures/fprt_ph_painting_eq2exp01_horizontal01_poetsforestroom_l0',0),(5272,5272,'staticobjects/pictures/fprt_ph_painting_eq2exp01_horizontal02_palmcastledawn_l0',0),(5273,5273,'staticobjects/pictures/fprt_ph_painting_eq2exp01_horizontal03_palmatsunset_l0',0),(5274,5274,'staticobjects/pictures/fprt_ph_painting_eq2exp01_horizontal04_sinkingsandsfacade_l0',0),(5275,5275,'staticobjects/pictures/qey_ph_painting_eq2exp01_horizontal01_poetsforestroom_l0',0),(5276,5276,'staticobjects/pictures/qey_ph_painting_eq2exp01_horizontal02_palmcastledawn_l0',0),(5277,5277,'staticobjects/pictures/qey_ph_painting_eq2exp01_horizontal03_palmatsunset_l0',0),(5278,5278,'staticobjects/pictures/qey_ph_painting_eq2exp01_horizontal04_sinkingsandsfacade_l0',0),(5279,5279,'_exp01/zones/objects/mats/pf_monk_mat02',0),(5280,5280,'_exp01/zones/objects/musical_instruments/djn_music_harp_broken01',0),(5281,5281,'_exp01/zones/objects/mats/pf_monk_mat01',0),(5282,5282,'_exp01/zones/objects/vases/djn_vase_gold_broken01',0),(5283,5283,'_exp01/zones/objects/pillows/drv_pillow_floor_square_worn01',0),(5284,5284,'_exp01/zones/dungeons/poets_palace/objects/poet_hallofdoors_door01',0),(5285,5285,'_exp01/zones/objects/beds/djn_bed_gold01',0),(5286,5286,'_exp01/zones/objects/barrels/drv_barrel_large01',0),(5287,5287,'_exp01/zones/objects/barrels/cr_barrel_orc_large01',0),(5288,5288,'_exp01/zones/objects/barrels/drv_barrel_small01',0),(5289,5289,'_exp01/zones/objects/barrels/drv_barrels_group01',0),(5290,5290,'_exp01/zones/objects/barrels/drv_barrels_group02',0),(5291,5291,'_exp01/zones/objects/barrels/drv_barrels_group03',0),(5292,5292,'_exp01/zones/objects/barrels/pf_barrels_sandfang_group01',0),(5293,5293,'_exp01/zones/objects/barrels/pf_barrels_sandfang_single01',0),(5294,5294,'_exp01/zones/objects/barricades/pf_goblin_barricade_long01',0),(5295,5295,'_exp01/zones/objects/carts/pf_cart_nomad01',0),(5296,5296,'_exp01/zones/objects/chairs/cr_chair_orc_wood01',0),(5297,5297,'_exp01/zones/objects/chairs/djn_chair_artiststool_brass01',0),(5298,5298,'_exp01/zones/objects/chairs/djn_chair_artiststool_steel01',0),(5299,5299,'_exp01/zones/objects/chairs/djn_chair_high_brass01',0),(5300,5300,'_exp01/zones/objects/chairs/djn_chair_high_gold01',0),(5301,5301,'_exp01/zones/objects/chairs/djn_chair_high_platinum01',0),(5302,5302,'_exp01/zones/objects/chairs/drv_bench_wicker_plain01',0),(5303,5303,'_exp01/zones/objects/chairs/drv_bench_wood_ornate01',0),(5304,5304,'_exp01/zones/objects/chairs/drv_chair_sultan_ornate01',0),(5305,5305,'_exp01/zones/objects/chairs/drv_chair_wood_octagonal01',0),(5306,5306,'_exp01/zones/objects/chairs/drv_stool_brass_ornate01',0),(5307,5307,'_exp01/zones/objects/chests/cr_chest_orc_closed01',0),(5308,5308,'_exp01/zones/objects/chests/cr_treasurechest_orc01',0),(5309,5309,'_exp01/zones/objects/chests/cr_treasurechest_orc_open01',0),(5310,5310,'_exp01/zones/objects/chests/drv_chest_ornate02',0),(5311,5311,'_exp01/zones/objects/chests/drv_chest_wood01',0),(5312,5312,'_exp01/zones/objects/chests/drv_chest_wood02',0),(5313,5313,'_exp01/zones/objects/containers/drv_container_merch_basketlong_open01',0),(5314,5314,'_exp01/zones/objects/containers/drv_container_merch_basketshort_open01',0),(5315,5315,'_exp01/zones/objects/containers/drv_container_merch_basketshort_open02',0),(5316,5316,'_exp01/zones/objects/containers/drv_container_merch_bowl01',0),(5317,5317,'_exp01/zones/objects/containers/drv_container_merch_bowl02',0),(5318,5318,'_exp01/zones/objects/firepits/cr_firepit_orc_withutensils01',0),(5319,5319,'_exp01/zones/objects/incense_burners/djn_genielamp_gold01',0),(5320,5320,'_exp01/zones/objects/incense_burners/djn_incenseburner_brass01',0),(5321,5321,'_exp01/zones/objects/incense_burners/djn_genielamp_rusty01',0),(5322,5322,'_exp01/zones/objects/incense_burners/djn_incenseburner_gold01',0),(5323,5323,'_exp01/zones/objects/kegs/drv_keg_large01',0),(5324,5324,'_exp01/zones/objects/kegs/drv_keg_small01',0),(5325,5325,'_exp01/zones/objects/kegs/drv_kegstand01',0),(5326,5326,'_exp01/zones/objects/kegs/drv_kegstand_base01',0),(5327,5327,'_exp01/zones/objects/kegs/drv_kegstand_double01',0),(5328,5328,'_exp01/zones/objects/kegs/drv_kegstand_keg01',0),(5329,5329,'_exp01/zones/objects/kegs/drv_kegstand_keg01_swinging',0),(5330,5330,'_exp01/zones/objects/light_sources/cr_lightsource_orc_torch_ornate01',0),(5331,5331,'_exp01/zones/objects/light_sources/drv_lightsource_candles_group01',0),(5332,5332,'_exp01/zones/objects/light_sources/drv_lightsource_ext_lantern01',0),(5333,5333,'_exp01/zones/objects/light_sources/drv_lightsource_ext_lantern01_swinging',0),(5334,5334,'_exp01/zones/objects/mirrors/drv_mirror_ornate01',0),(5335,5335,'_exp01/zones/objects/mirrors/drv_mirror_plain01',0),(5336,5336,'_exp01/zones/objects/pillows/djn_pillow_floor_redsquare01',0),(5337,5337,'_exp01/zones/objects/pillows/drv_pillow_bench_pattern02',0),(5338,5338,'_exp01/zones/objects/pillows/drv_pillow_floor_palace_oval01',0),(5339,5339,'_exp01/zones/objects/pillows/drv_pillow_floor_palace_round01',0),(5340,5340,'_exp01/zones/objects/pillows/drv_pillow_floor_palace_square01',0),(5341,5341,'_exp01/zones/objects/pillows/drv_pillow_floor_palace_square02',0),(5342,5342,'_exp01/zones/objects/pillows/drv_pillow_floor_round_worn01',0),(5343,5343,'_exp01/zones/objects/pillows/drv_pillow_floor_round_worn02',0),(5344,5344,'_exp01/zones/objects/pillows/drv_pillow_floor_square_worn02',0),(5345,5345,'_exp01/zones/objects/pillows/drv_pillow_seat01',0),(5346,5346,'_exp01/zones/objects/pillows/drv_pillow_seat02',0),(5347,5347,'_exp01/zones/objects/pillows/drv_pillow_seat_weights_worn02',0),(5348,5348,'_exp01/zones/objects/pillows/drv_pillow_seat_worn01',0),(5349,5349,'_exp01/zones/objects/pillows/drv_pillow_seat_worn02',0),(5350,5350,'_exp01/zones/objects/pillows/drv_pillow_bench_pattern01_worn',0),(5351,5351,'_exp01/zones/objects/pillows/drv_pillow_bench_dirty01',0),(5352,5352,'_exp01/zones/objects/pillows/drv_pillow_bench_clean01',0),(5353,5353,'_exp01/zones/objects/pillows/drv_pillow_floor_oval_worn02',0),(5354,5354,'_exp01/zones/objects/pillows/drv_pillow_floor_oval_worn01',0),(5355,5355,'_exp01/zones/objects/podiums/sc_podium_nosphinx_small01',0),(5356,5356,'_exp01/zones/objects/potted_plants/djn_pottedplant_palm02_med_blue',0),(5357,5357,'_exp01/zones/objects/pottery/djn_vase_brokenpieces_group01',0),(5358,5358,'_exp01/zones/objects/pottery/djn_vase_brokenpieces_group02',0),(5359,5359,'_exp01/zones/objects/pottery/djn_vase_gold_broken01',0),(5360,5360,'_exp01/zones/objects/pottery/drv_vase_brass_broken02',0),(5361,5361,'_exp01/zones/objects/pottery/drv_vase_broken01',0),(5362,5362,'_exp01/zones/objects/pottery/drv_vase_broken02',0),(5363,5363,'_exp01/zones/objects/pottery/drv_vase_brokenpieces_group01',0),(5364,5364,'_exp01/zones/objects/pottery/drv_vase_brokenpieces_group02',0),(5365,5365,'_exp01/zones/objects/pottery/drv_vase_brokenpieces_group03',0),(5366,5366,'_exp01/zones/objects/pottery/drv_vase_brokenpieces_group04',0),(5367,5367,'_exp01/zones/objects/pottery/drv_vase_brokenpieces_group05',0),(5368,5368,'_exp01/zones/objects/pottery/drv_vase_ornate01',0),(5369,5369,'_exp01/zones/objects/pottery/drv_vase_ornate02',0),(5370,5370,'_exp01/zones/objects/pottery/drv_vase_ornate_large02',0),(5371,5371,'_exp01/zones/objects/pottery/drv_vase_ornate_porcelain_large01',0),(5372,5372,'_exp01/zones/objects/pottery/drv_vase_plain01',0),(5373,5373,'_exp01/zones/objects/pottery/drv_vase_porcelain_ornate01',0),(5374,5374,'_exp01/zones/objects/pottery/drv_vase_porcelain_ornate02',0),(5375,5375,'_exp01/zones/objects/rocks/pf_rocks_gnollboulders_painted01',0),(5376,5376,'_exp01/zones/objects/roomdivider/drv_divider_plain01',0),(5377,5377,'_exp01/zones/objects/rugs/cr_animal_hide_rug',0),(5378,5378,'_exp01/zones/objects/rugs/drv_rug_group01',0),(5379,5379,'_exp01/zones/objects/rugs/drv_rug_group02',0),(5380,5380,'_exp01/zones/objects/rugs/drv_rug_group03',0),(5381,5381,'_exp01/zones/objects/rugs/drv_rug_rect_worn01',0),(5382,5382,'_exp01/zones/objects/rugs/drv_rug_rect_worn02',0),(5383,5383,'_exp01/zones/objects/rugs/drv_rug_rolled_worn01',0),(5384,5384,'_exp01/zones/objects/rugs/drv_rug_rolled_worn02',0),(5385,5385,'_exp01/zones/objects/rugs/drv_rug_round02',0),(5386,5386,'_exp01/zones/objects/rugs/drv_rug_round_worn01',0),(5387,5387,'_exp01/zones/objects/rugs/drv_rug_round_worn02',0),(5388,5388,'_exp01/zones/objects/rugs/drv_rug_square02',0),(5389,5389,'_exp01/zones/objects/rugs/drv_rug_square03',0),(5390,5390,'_exp01/zones/objects/rugs/drv_rug_square04',0),(5391,5391,'_exp01/zones/objects/rugs/drv_rug_square_worn01',0),(5392,5392,'_exp01/zones/objects/rugs/drv_rug_square_worn02',0),(5393,5393,'_exp01/zones/objects/rugs/drv_rug_square_worn03',0),(5394,5394,'_exp01/zones/objects/rugs/drv_rugs_rolled_group01',0),(5395,5395,'_exp01/zones/objects/rugs/drv_rugs_rolled_group02',0),(5396,5396,'_exp01/zones/objects/rugs/drv_rugs_rolled_worn_group01',0),(5397,5397,'_exp01/zones/objects/scrolls/djn_scriptorium_scrollracks_6m',0),(5398,5398,'_exp01/zones/objects/tables/djn_table_bedside01',0),(5399,5399,'_exp01/zones/objects/tables/djn_table_floating02',0),(5400,5400,'_exp01/zones/objects/tables/drv_table_coffee_plain01',0),(5401,5401,'_exp01/zones/objects/tables/drv_table_dining_ornate01',0),(5402,5402,'_exp01/zones/objects/tables/drv_table_dining_ornate02',0),(5403,5403,'_exp01/zones/objects/tables/drv_table_dining_roundplain01',0),(5404,5404,'_exp01/zones/objects/tables/drv_table_dining_squareplain01',0),(5405,5405,'_exp01/zones/objects/tables/drv_table_end_round01',0),(5406,5406,'_exp01/zones/objects/tables/drv_table_merchant01',0),(5407,5407,'_exp01/zones/objects/tables/drv_table_merchant_long01',0),(5408,5408,'_exp01/zones/objects/tablets/lt_tablet01',0),(5409,5409,'_exp01/zones/objects/tablets/pf_tablet_broken01',0),(5410,5410,'_exp01/zones/objects/tablets/pf_tablet_broken02',0),(5411,5411,'_exp01/zones/objects/tapestries/drv_tapestry_4m_brasstrim_beige01_swinging',0),(5412,5412,'_exp01/zones/objects/tapestries/drv_tapestry_4m_woodtrim_beige01_swinging',0),(5413,5413,'_exp01/zones/objects/tapestries/drv_tapestry_4m_woodtrim_purple01_swinging',0),(5414,5414,'_exp01/zones/objects/tapestries/drv_tapestry_6m_brasstrim_purple01_swinging',0),(5415,5415,'_exp01/zones/objects/tapestries/drv_tapestry_6m_brasstrim_red01_swinging',0),(5416,5416,'_exp01/zones/objects/tapestries/drv_tapestry_6m_wood_purple01_swinging',0),(5417,5417,'_exp01/zones/objects/tapestries/drv_tapestry_6m_wood_red01_swinging',0),(5418,5418,'_exp01/zones/objects/tapestries/drv_tapestry_apparatus01',0),(5419,5419,'_exp01/zones/objects/tapestries/drv_tapestry_brass_apparatus02',0),(5420,5420,'_exp01/zones/objects/tapestries/drv_tapestry_brass_ceilingmount01',0),(5421,5421,'_exp01/zones/objects/tapestries/drv_tapestry_brass_dualhooks01',0),(5422,5422,'_exp01/zones/objects/tapestries/drv_tapestry_wood_apparatus02',0),(5423,5423,'_exp01/zones/objects/tapestries/drv_tapestry_wood_ceilingmount01',0),(5424,5424,'accessories/wearable_items/_exp08/dragon_armor/chain-scale_green/feet',1096),(5425,5425,'_exp01/zones/objects/tents/drv_tent_merchant_hanging_blue',0),(5426,5426,'_exp01/zones/objects/tents/drv_tent_merchant_hanging_orange',0),(5427,5427,'_exp01/zones/objects/tents/drv_tent_merchant_hanging_red',0),(5428,5428,'_exp01/zones/objects/tents/drv_tent_merchant_hanging_teal',0),(5429,5429,'_exp01/zones/objects/tents/pf_goblin_tent',0),(5430,5430,'_exp01/zones/objects/tents/pf_tent',0),(5431,5431,'_exp01/zones/objects/tents/pf_tent_sandgiant',0),(5432,5432,'_exp01/zones/objects/tents/ss_tent_lizardmen',0),(5433,5433,'_exp01/zones/objects/tents/ss_tent_gnoll_anubis01',0),(5434,5434,'_exp01/zones/objects/tents/ss_tent_nomad_double_group01',0),(5435,5435,'_exp01/zones/objects/tents/ss_tent_orc01',0),(5436,5436,'_exp01/zones/objects/tools/cr_tool_orc_forge_anvil',0),(5437,5437,'_exp01/zones/objects/urns/drv_urn_large01',0),(5438,5438,'_exp01/zones/objects/vases/djn_vase_brass01',0),(5439,5439,'_exp01/zones/objects/vases/djn_vase_brass_broken01',0),(5440,5440,'_exp01/zones/objects/vases/djn_vase_gold01',0),(5441,5441,'_exp01/zones/objects/wallchargers/drv_wallcharger_brass01',0),(5442,5442,'_exp01/zones/objects/wallchargers/drv_wallcharger_brass02',0),(5443,5443,'_exp01/zones/objects/wallchargers/drv_wallcharger_ceramic01',0),(5444,5444,'_exp01/zones/objects/wallchargers/drv_wallcharger_ceramic02',0),(5445,5445,'_exp01/zones/objects/wallchargers/drv_wallcharger_porcelain01',0),(5446,5446,'_exp01/zones/objects/pillows/djn_pillow_floor_bluesquare01',0),(5447,5447,'_exp01/zones/objects/tables/djn_table_artist_brass01',0),(5448,5448,'_exp01/zones/objects/arena/powerups/arena_powerup_potion_red',0),(5449,5449,'_exp01/zones/objects/arena/powerups/arena_powerup_potion_blue',0),(5450,5450,'_exp01/zones/objects/arena/powerups/arena_powerup_shield_blue',0),(5451,5451,'_exp01/zones/objects/arena/powerups/arena_powerup_star_orange',0),(5452,5452,'_exp01/zones/objects/arena/powerups/arena_powerup_axe_red',0),(5453,5453,'_exp01/zones/objects/arena/powerups/arena_powerup_bolt_yellow',0),(5454,5454,'_exp01/zones/objects/doorknocker/md_doorknocker01',0),(5455,5455,'_exp01/zones/objects/columns/prism_column01',0),(5456,5456,'accessories/wearable_items/starter_clothes/barbarian_female/arms',0),(5457,5457,'accessories/wearable_items/starter_clothes/barbarian_female/chest',0),(5458,5458,'accessories/wearable_items/starter_clothes/barbarian_female/legs',0),(5459,5459,'accessories/wearable_items/starter_clothes/barbarian_female/sleeves',0),(5460,5460,'accessories/wearable_items/starter_clothes/barbarian_male/arms',0),(5461,5461,'accessories/wearable_items/starter_clothes/barbarian_male/chest',0),(5462,5462,'accessories/wearable_items/starter_clothes/barbarian_male/legs',0),(5463,5463,'accessories/wearable_items/starter_clothes/barbarian_male/sleeves',0),(5464,5464,'accessories/wearable_items/starter_clothes/darkelf_female/arms',0),(5465,5465,'accessories/wearable_items/starter_clothes/darkelf_female/chest',0),(5466,5466,'accessories/wearable_items/starter_clothes/darkelf_female/legs',0),(5467,5467,'accessories/wearable_items/starter_clothes/darkelf_female/sleeves',0),(5468,5468,'accessories/wearable_items/starter_clothes/darkelf_male/arms',0),(5469,5469,'accessories/wearable_items/starter_clothes/darkelf_male/chest',0),(5470,5470,'accessories/wearable_items/starter_clothes/darkelf_male/legs',0),(5471,5471,'accessories/wearable_items/starter_clothes/darkelf_male/sleeves',0),(5472,5472,'accessories/wearable_items/starter_clothes/dwarf_female/arms',0),(5473,5473,'accessories/wearable_items/starter_clothes/dwarf_female/chest',0),(5474,5474,'accessories/wearable_items/starter_clothes/dwarf_female/legs',0),(5475,5475,'accessories/wearable_items/starter_clothes/dwarf_female/sleeves',0),(5476,5476,'accessories/wearable_items/starter_clothes/dwarf_male/arms',0),(5477,5477,'accessories/wearable_items/starter_clothes/dwarf_male/chest',0),(5478,5478,'accessories/wearable_items/starter_clothes/dwarf_male/legs',0),(5479,5479,'accessories/wearable_items/starter_clothes/dwarf_male/sleeves',0),(5480,5480,'accessories/wearable_items/starter_clothes/erudite_female/arms',0),(5481,5481,'accessories/wearable_items/starter_clothes/erudite_female/chest',0),(5482,5482,'accessories/wearable_items/starter_clothes/erudite_female/legs',0),(5483,5483,'accessories/wearable_items/starter_clothes/erudite_female/sleeves',0),(5484,5484,'accessories/wearable_items/starter_clothes/erudite_male/arms',0),(5485,5485,'accessories/wearable_items/starter_clothes/erudite_male/chest',0),(5486,5486,'accessories/wearable_items/starter_clothes/erudite_male/legs',0),(5487,5487,'accessories/wearable_items/starter_clothes/erudite_male/sleeves',0),(5488,5488,'accessories/wearable_items/starter_clothes/froglok_female/arms',0),(5489,5489,'accessories/wearable_items/starter_clothes/froglok_female/chest',0),(5490,5490,'accessories/wearable_items/starter_clothes/froglok_female/legs',0),(5491,5491,'accessories/wearable_items/starter_clothes/froglok_female/sleeves',0),(5492,5492,'accessories/wearable_items/starter_clothes/froglok_male/arms',0),(5493,5493,'accessories/wearable_items/starter_clothes/froglok_male/chest',0),(5494,5494,'accessories/wearable_items/starter_clothes/froglok_male/legs',0),(5495,5495,'accessories/wearable_items/starter_clothes/froglok_male/sleeves',0),(5496,5496,'accessories/wearable_items/starter_clothes/gnome_female/arms',0),(5497,5497,'accessories/wearable_items/starter_clothes/gnome_female/chest',0),(5498,5498,'accessories/wearable_items/starter_clothes/gnome_female/legs',0),(5499,5499,'accessories/wearable_items/starter_clothes/gnome_female/sleeves',0),(5500,5500,'accessories/wearable_items/starter_clothes/gnome_male/arms',0),(5501,5501,'accessories/wearable_items/starter_clothes/gnome_male/chest',0),(5502,5502,'accessories/wearable_items/starter_clothes/gnome_male/legs',0),(5503,5503,'accessories/wearable_items/starter_clothes/gnome_male/sleeves',0),(5504,5504,'accessories/wearable_items/starter_clothes/halfelf_female/arms',0),(5505,5505,'accessories/wearable_items/starter_clothes/halfelf_female/chest',0),(5506,5506,'accessories/wearable_items/starter_clothes/halfelf_female/legs',0),(5507,5507,'accessories/wearable_items/starter_clothes/halfelf_female/sleeves',0),(5508,5508,'accessories/wearable_items/starter_clothes/halfelf_male/arms',0),(5509,5509,'accessories/wearable_items/starter_clothes/halfelf_male/chest',0),(5510,5510,'accessories/wearable_items/starter_clothes/halfelf_male/legs',0),(5511,5511,'accessories/wearable_items/starter_clothes/halfelf_male/sleeves',0),(5512,5512,'accessories/wearable_items/starter_clothes/halfling_female/arms',0),(5513,5513,'accessories/wearable_items/starter_clothes/halfling_female/chest',0),(5514,5514,'accessories/wearable_items/starter_clothes/halfling_female/legs',0),(5515,5515,'accessories/wearable_items/starter_clothes/halfling_female/sleeves',0),(5516,5516,'accessories/wearable_items/starter_clothes/halfling_male/arms',0),(5517,5517,'accessories/wearable_items/starter_clothes/halfling_male/chest',0),(5518,5518,'accessories/wearable_items/starter_clothes/halfling_male/legs',0),(5519,5519,'accessories/wearable_items/starter_clothes/halfling_male/sleeves',0),(5520,5520,'accessories/wearable_items/starter_clothes/highelf_female/arms',0),(5521,5521,'accessories/wearable_items/starter_clothes/highelf_female/chest',0),(5522,5522,'accessories/wearable_items/starter_clothes/highelf_female/legs',0),(5523,5523,'accessories/wearable_items/starter_clothes/highelf_female/sleeves',0),(5524,5524,'accessories/wearable_items/starter_clothes/highelf_male/arms',0),(5525,5525,'accessories/wearable_items/starter_clothes/highelf_male/chest',0),(5526,5526,'accessories/wearable_items/starter_clothes/highelf_male/legs',0),(5527,5527,'accessories/wearable_items/starter_clothes/highelf_male/sleeves',0),(5528,5528,'accessories/wearable_items/starter_clothes/human_female/arms',0),(5529,5529,'accessories/wearable_items/starter_clothes/human_female/chest',0),(5530,5530,'accessories/wearable_items/starter_clothes/human_female/legs',0),(5531,5531,'accessories/wearable_items/starter_clothes/human_female/sleeves',0),(5532,5532,'accessories/wearable_items/starter_clothes/human_male/arms',0),(5533,5533,'accessories/wearable_items/starter_clothes/human_male/chest',0),(5534,5534,'accessories/wearable_items/starter_clothes/human_male/legs',0),(5535,5535,'accessories/wearable_items/starter_clothes/human_male/sleeves',0),(5536,5536,'accessories/wearable_items/starter_clothes/iksar_female/arms',0),(5537,5537,'accessories/wearable_items/starter_clothes/iksar_female/chest',0),(5538,5538,'accessories/wearable_items/starter_clothes/iksar_female/legs',0),(5539,5539,'accessories/wearable_items/starter_clothes/iksar_female/sleeves',0),(5540,5540,'accessories/wearable_items/starter_clothes/iksar_male/arms',0),(5541,5541,'accessories/wearable_items/starter_clothes/iksar_male/chest',0),(5542,5542,'accessories/wearable_items/starter_clothes/iksar_male/legs',0),(5543,5543,'accessories/wearable_items/starter_clothes/iksar_male/sleeves',0),(5544,5544,'accessories/wearable_items/starter_clothes/kerra_female/arms',0),(5545,5545,'accessories/wearable_items/starter_clothes/kerra_female/chest',0),(5546,5546,'accessories/wearable_items/starter_clothes/kerra_female/legs',0),(5547,5547,'accessories/wearable_items/starter_clothes/kerra_female/sleeves',0),(5548,5548,'accessories/wearable_items/starter_clothes/kerra_male/arms',0),(5549,5549,'accessories/wearable_items/starter_clothes/kerra_male/chest',0),(5550,5550,'accessories/wearable_items/starter_clothes/kerra_male/legs',0),(5551,5551,'accessories/wearable_items/starter_clothes/kerra_male/sleeves',0),(5552,5552,'accessories/wearable_items/starter_clothes/ogre_female/arms',0),(5553,5553,'accessories/wearable_items/starter_clothes/ogre_female/chest',0),(5554,5554,'accessories/wearable_items/starter_clothes/ogre_female/legs',0),(5555,5555,'accessories/wearable_items/starter_clothes/ogre_female/sleeves',0),(5556,5556,'accessories/wearable_items/starter_clothes/ogre_male/arms',0),(5557,5557,'accessories/wearable_items/starter_clothes/ogre_male/chest',0),(5558,5558,'accessories/wearable_items/starter_clothes/ogre_male/legs',0),(5559,5559,'accessories/wearable_items/starter_clothes/ogre_male/sleeves',0),(5560,5560,'accessories/wearable_items/starter_clothes/ratonga_female/arms',0),(5561,5561,'accessories/wearable_items/starter_clothes/ratonga_female/chest',0),(5562,5562,'accessories/wearable_items/starter_clothes/ratonga_female/legs',0),(5563,5563,'accessories/wearable_items/starter_clothes/ratonga_female/sleeves',0),(5564,5564,'accessories/wearable_items/starter_clothes/troll_female/arms',0),(5565,5565,'accessories/wearable_items/starter_clothes/troll_female/chest',0),(5566,5566,'accessories/wearable_items/starter_clothes/troll_female/legs',0),(5567,5567,'accessories/wearable_items/starter_clothes/troll_female/sleeves',0),(5568,5568,'accessories/wearable_items/starter_clothes/troll_male/arms',0),(5569,5569,'accessories/wearable_items/starter_clothes/troll_male/chest',0),(5570,5570,'accessories/wearable_items/starter_clothes/troll_male/legs',0),(5571,5571,'accessories/wearable_items/starter_clothes/troll_male/sleeves',0),(5572,5572,'accessories/wearable_items/starter_clothes/woodelf_female/arms',0),(5573,5573,'accessories/wearable_items/starter_clothes/woodelf_female/chest',0),(5574,5574,'accessories/wearable_items/starter_clothes/woodelf_female/legs',0),(5575,5575,'accessories/wearable_items/starter_clothes/woodelf_female/sleeves',0),(5576,5576,'accessories/wearable_items/starter_clothes/woodelf_male/arms',0),(5577,5577,'accessories/wearable_items/starter_clothes/woodelf_male/chest',0),(5578,5578,'accessories/wearable_items/starter_clothes/woodelf_male/legs',0),(5579,5579,'accessories/wearable_items/starter_clothes/woodelf_male/sleeves',0),(5580,5580,'_exp01/zones/objects/arena/arena_poi_tower01',0),(5581,5581,'_exp01/zones/objects/arena/arena_poi_wallspike01',0),(5582,5582,'_exp01/zones/objects/arena/arena_poi_arch01',0),(5583,5583,'_exp01/zones/objects/arena/arena_poi_bridge01',0),(5584,5584,'_exp01/zones/objects/arena/arena_poi_pillar01',0),(5585,5585,'_exp01/zones/objects/arena/arena_poi_platform01',0),(5586,5586,'_exp01/zones/objects/arena/arena_poi_wall01',0),(5587,5587,'_exp01/zones/objects/arena/arena_poi_dugout01',0),(5588,5588,'_exp01/zones/objects/beds/djn_bed_brass01',0),(5589,5589,'accessories/wearable_items/_exp08/dragon_armor/chain-scale_green/forearms',1096),(5590,5590,'creatures/tu/noteman_tu',0),(5591,5591,'_exp01/zones/cities/majdul/md_p11/md_p11_int_truth_door04',0),(5592,5592,'_exp01/zones/dungeons/clefts_of_rujark/clefts_int2/clefts_int2_door_dead01',0),(5593,5593,'_exp01/zones/dungeons/clefts_of_rujark/clefts_int2/clefts_int2_door_frsme_dead01',0),(5594,5594,'_exp01/zones/objects/arena/arena_flag_team_red',0),(5595,5595,'_exp01/zones/objects/arena/arena_flag_team_blue',0),(5596,5596,'_exp01/characters/monsters/devil_dust',0),(5597,5597,'_exp01/characters/monsters/devil_fire',0),(5598,5598,'_exp01/zones/objects/mobile_barricades/drv_mobile_barricade',0),(5599,5599,'accessories/wearable_items/_exp08/dragon_armor/chain-scale_green/hands',1096),(5600,5600,'accessories/wearable_items/_exp08/dragon_armor/chain-scale_green/head',1096),(5601,5601,'_exp01/zones/objects/md_doors/md_doors_03_02_l',0),(5602,5602,'_exp01/characters/tool_users/orc_desert_warrior_bald_ghost',0),(5603,5603,'_exp01/characters/tool_users/orc_desert_warrior_bald_square_ghost',0),(5604,5604,'_exp01/characters/tool_users/orc_desert_warrior_helm_round_ghost',0),(5605,5605,'_exp01/characters/tool_users/orc_desert_warrior_helm_square_ghost',0),(5606,5606,'_exp01/characters/monsters/camel',0),(5607,5607,'_exp01/characters/monsters/camel_pack',0),(5608,5608,'accessories/wearable_items/_exp08/dragon_armor/chain-scale_green/legs',1096),(5609,5609,'_exp01/zones/objects/light_sources/drv_lightsource_candlestick_plain01',0),(5610,5610,'_exp01/zones/objects/chairs/drv_bench_wood_plain01',0),(5611,5611,'accessories/wearable_items/heavy_cloth/heavy_cloth_dervish_plain/chest',0),(5612,5612,'accessories/wearable_items/heavy_cloth/heavy_cloth_dervish_plain/feet',0),(5613,5613,'accessories/wearable_items/heavy_cloth/heavy_cloth_dervish_plain/forearms',0),(5614,5614,'accessories/wearable_items/heavy_cloth/heavy_cloth_dervish_plain/hands',0),(5615,5615,'accessories/wearable_items/heavy_cloth/heavy_cloth_dervish_plain/head',0),(5616,5616,'accessories/wearable_items/heavy_cloth/heavy_cloth_dervish_plain/legs',0),(5617,5617,'accessories/wearable_items/heavy_cloth/heavy_cloth_dervish_plain/shoulders',0),(5618,5618,'_exp01/characters/tool_users/mummy_godking_anuk',0),(5619,5619,'staticobjects/fx/medium_fire',0),(5620,5620,'staticobjects/fx/wind_smoke',0),(5621,5621,'staticobjects/fx/smoke_medium_thin',0),(5622,5622,'_exp01/zones/objects/beds/drv_bed_doubleplain001',0),(5623,5623,'_exp01/zones/objects/beds/drv_bed_kingplain001',0),(5624,5624,'_exp01/zones/objects/beds/drv_bed_singleplain001',0),(5625,5625,'_exp01/zones/objects/bookcases/drv_bookcase_ornate_short01',0),(5626,5626,'_exp01/zones/objects/bookcases/drv_bookcase_ornate_tall01',0),(5627,5627,'_exp01/characters/monsters/spider_terrorantula',0),(5628,5628,'accessories/wieldable_items/weapons/axe/cobra_hatchet/cobra_hatchet_plain',0),(5629,5629,'accessories/wieldable_items/weapons/dagger/jambiya/jambiya_plain',0),(5630,5630,'accessories/wieldable_items/weapons/staff/cobra_staff/cobra_staff_plain',0),(5631,5631,'accessories/wieldable_items/weapons/hammer/lotus_sceptre/lotus_sceptre_plain',0),(5632,5632,'accessories/wieldable_items/weapons/hammer/amber_sceptre/amber_sceptre_plain',0),(5633,5633,'accessories/wieldable_items/weapons/hammer/crab_sceptre/crab_sceptre_plain',0),(5634,5634,'_exp01/characters/monsters/devil_dust_tornado',0),(5635,5635,'_exp01/characters/monsters/camel_dromedary',0),(5636,5636,'accessories/wearable_items/_exp08/dragon_armor/chain-scale_green/legs_noskirt',1096),(5637,5637,'accessories/wearable_items/_exp08/dragon_armor/chain-scale_green/shoulders',1096),(5638,5638,'_exp01/zones/objects/bottle/bottle_with_ship01',0),(5639,5639,'accessories/wearable_items/_exp08/dragon_armor/chain-scale_green/shoulders_epic',1096),(5640,5640,'staticobjects/bookcases/scrollcase01',0),(5641,5641,'staticobjects/bookcases/scrollcase01_brkn',0),(5642,5642,'_exp01/zones/objects/doors_doorways/drv_manhole_cover',0),(5643,5643,'_exp01/zones/animated_objects/djn_mirror_translocation_citadelexterior',0),(5644,5644,'_exp01/zones/animated_objects/djn_mirror_translocation_firstfloor_sphinx',0),(5645,5645,'_exp01/zones/animated_objects/djn_mirror_translocation_fourthfloor',0),(5646,5646,'_exp01/zones/animated_objects/djn_mirror_translocation_hallofdoors',0),(5647,5647,'_exp01/zones/animated_objects/djn_mirror_translocation_pillars',0),(5648,5648,'_exp01/zones/animated_objects/djn_mirror_translocation_secondfloor',0),(5649,5649,'_exp01/zones/objects/bench/lt_stonebench01',0),(5650,5650,'_exp01/zones/objects/light_sources/sc_lightsource_flamingfeather01',0),(5651,5651,'_exp01/zones/objects/light_sources/sc_lightsource_glassvessel01',0),(5652,5652,'_exp01/zones/objects/urns/lt_vase01',0),(5653,5653,'_exp01/zones/objects/urns/lt_vase02',0),(5654,5654,'_exp01/zones/objects/urns/lt_vase03',0),(5655,5655,'_exp01/zones/objects/lights/md_light_5m00',0),(5656,5656,'_exp01/zones/objects/lights/md_light_5m01',0),(5657,5657,'_exp01/zones/objects/lights/md_light_2m00',0),(5658,5658,'_exp01/zones/objects/lights/md_light_2m01',0),(5659,5659,'accessories/wearable_items/_exp08/dragon_armor/chain-scale_red/skirt',1096),(5660,5660,'_exp01/zones/objects/kitchen_tools/drv_cup_ornate_brass',0),(5661,5661,'_exp01/zones/objects/kitchen_tools/drv_cup_ornate_pewter',0),(5662,5662,'_exp01/zones/objects/kitchen_tools/drv_wine_bottle_ornate_brass',0),(5663,5663,'_exp01/zones/objects/kitchen_tools/drv_wine_bottle_ornate_pewter',0),(5664,5664,'_exp01/zones/objects/light_sources/sc_lightsource_flamingfeather01_no_lightsource',0),(5665,5665,'_exp01/zones/objects/light_sources/drv_lightsource_int_lanternhanging_plain01',0),(5666,5666,'_exp01/zones/dungeons/silent_city/sc_temple/sc_temple_symbol_01_pink',0),(5667,5667,'_exp01/zones/dungeons/silent_city/sc_temple/sc_temple_symbol_02_yellow',0),(5668,5668,'_exp01/zones/dungeons/silent_city/sc_temple/sc_temple_symbol_03_orange',0),(5669,5669,'_exp01/zones/dungeons/silent_city/sc_temple/sc_temple_symbol_04_green',0),(5670,5670,'_exp01/zones/dungeons/silent_city/sc_temple/sc_temple_symbol_05_blue',0),(5671,5671,'_exp01/zones/dungeons/silent_city/sc_temple/sc_temple_symbol_06_purple',0),(5672,5672,'_exp01/zones/dungeons/silent_city/sc_temple/sc_temple_symbol_07_red',0),(5673,5673,'_exp01/zones/dungeons/silent_city/sc_temple/sc_temple_symbol_08_white',0),(5674,5674,'_exp01/zones/dungeons/silent_city/sc_temple/sc_temple_symbol_09_black',0),(5675,5675,'_exp01/zones/objects/banners/ss_orc_tribalbanner01_l0',0),(5676,5676,'_exp01/zones/objects/beetle/ss_dunebeetle_carapace01',0),(5677,5677,'_exp01/zones/objects/crates/ss_crate_boarded_long01',0),(5678,5678,'_exp01/zones/objects/crates/ss_crate_large01',0),(5679,5679,'_exp01/zones/objects/crates/ss_crate_small01',0),(5680,5680,'_exp01/zones/objects/switches/sc_objects_puzzlebox_switch01',0),(5681,5681,'_exp01/zones/objects/urns/lt_urn02',0),(5682,5682,'_exp01/zones/dungeons/silent_city/sc_temple/sc_temple_ewer',0),(5683,5683,'_exp01/zones/dungeons/silent_city/sc_temple/sc_temple_int_waterfall02_up',0),(5684,5684,'_exp01/characters/monsters/leopard_yellow',0),(5685,5685,'_exp01/characters/monsters/leopard_black',0),(5686,5686,'_exp01/characters/tool_users/djinn_master',0),(5687,5687,'_exp01/zones/objects/light_sources/drv_lightsource_ext_torch01',0),(5688,5688,'_exp01/zones/objects/arena/powerups/arena_powerup_bolt_blue',0),(5689,5689,'_exp01/zones/objects/arena/powerups/arena_powerup_bolt_green',0),(5690,5690,'_exp01/zones/objects/arena/powerups/arena_powerup_bolt_orange',0),(5691,5691,'_exp01/zones/objects/arena/powerups/arena_powerup_bolt_purple',0),(5692,5692,'_exp01/zones/objects/arena/powerups/arena_powerup_bolt_red',0),(5693,5693,'_exp01/zones/objects/arena/powerups/arena_powerup_shield_green',0),(5694,5694,'_exp01/zones/objects/arena/powerups/arena_powerup_shield_orange',0),(5695,5695,'_exp01/zones/objects/arena/powerups/arena_powerup_shield_purple',0),(5696,5696,'_exp01/zones/objects/arena/powerups/arena_powerup_shield_red',0),(5697,5697,'_exp01/zones/objects/arena/powerups/arena_powerup_star_blue',0),(5698,5698,'_exp01/zones/objects/arena/powerups/arena_powerup_star_green',0),(5699,5699,'_exp01/zones/objects/arena/powerups/arena_powerup_star_purple',0),(5700,5700,'_exp01/zones/objects/arena/powerups/arena_powerup_star_red',0),(5701,5701,'_exp01/zones/objects/arena/powerups/arena_powerup_axe_blue',0),(5702,5702,'_exp01/zones/objects/arena/powerups/arena_powerup_axe_green',0),(5703,5703,'_exp01/zones/objects/arena/powerups/arena_powerup_axe_purple',0),(5704,5704,'_exp01/zones/objects/arena/powerups/arena_powerup_axe_yellow',0),(5705,5705,'accessories/wearable_items/white_robe/chest',0),(5706,5706,'accessories/wearable_items/white_robe/hood',0),(5707,5707,'accessories/wearable_items/white_robe/pants',0),(5708,5708,'accessories/wearable_items/white_robe/skirt',0),(5709,5709,'accessories/wearable_items/heavy_plate/plain/chest',0),(5710,5710,'accessories/wearable_items/heavy_plate/plain/feet',0),(5711,5711,'accessories/wearable_items/heavy_plate/plain/forearms',0),(5712,5712,'accessories/wearable_items/heavy_plate/plain/hands',0),(5713,5713,'accessories/wearable_items/heavy_plate/plain/head',0),(5714,5714,'accessories/wearable_items/heavy_plate/plain/left',0),(5715,5715,'accessories/wearable_items/heavy_plate/plain/legs',0),(5716,5716,'accessories/wearable_items/heavy_plate/plain/legs_noskirt',0),(5717,5717,'accessories/wearable_items/heavy_plate/plain/shoulders',0),(5718,5718,'accessories/wearable_items/heavy_plate/plain/shoulders_nopauldrons',0),(5719,5719,'accessories/wearable_items/heavy_plate/plain/skirt',0),(5720,5720,'accessories/wearable_items/heavy_plate/plain/upperchest',0),(5721,5721,'creatures/mounts/carpet_sun',0),(5722,5722,'_exp01/characters/tool_users/orc_desert_warrior_helm_ghost',0),(5723,5723,'accessories/wearable_items/heavy_plate/plain/right',0),(5724,5724,'accessories/wearable_items/starter_clothes/ratonga_male/arms',0),(5725,5725,'accessories/wearable_items/starter_clothes/ratonga_male/chest',0),(5726,5726,'accessories/wearable_items/starter_clothes/ratonga_male/legs',0),(5727,5727,'accessories/wearable_items/starter_clothes/ratonga_male/sleeves',0),(5728,5728,'accessories/wearable_items/_exp08/dragon_armor/chain-scale_red/chest',1096),(5729,5729,'accessories/wearable_items/_exp08/dragon_armor/chain-scale_red/feet',1096),(5730,5730,'accessories/wearable_items/_exp08/dragon_armor/chain-scale_red/forearms',1096),(5731,5731,'accessories/wearable_items/_exp08/dragon_armor/chain-scale_red/hands',1096),(5732,5732,'accessories/wearable_items/_exp08/dragon_armor/chain-scale_red/head',1096),(5733,5733,'accessories/wearable_items/_exp08/dragon_armor/chain-scale_red/legs',1096),(5734,5734,'accessories/wearable_items/_exp08/dragon_armor/chain-scale_red/legs_noskirt',1096),(5735,5735,'accessories/wearable_items/_exp08/dragon_armor/chain-scale_red/shoulders',1096),(5736,5736,'accessories/wearable_items/_exp08/dragon_armor/chain-scale_red/shoulders_epic',1096),(5737,5737,'accessories/wearable_items/_exp08/dragon_armor/chain-scale_shadow/skirt',1096),(5738,5738,'_exp01/zones/objects/arena/powerups/arena_powerup_shield_yellow',0),(5739,5739,'_exp01/zones/objects/arena/powerups/arena_powerup_star_yellow',0),(5740,5740,'_exp01/zones/objects/arena/powerups/arena_powerup_axe_orange',0),(5741,5741,'_exp01/zones/objects/firepits/pf_campfire_spit_sandfang01',0),(5742,5742,'_exp01/zones/objects/hay/pf_haypile01',0),(5743,5743,'_exp01/zones/regions/pillars_of_flame/pf_objects/pf_rock/pf_rock_pillar01',0),(5744,5744,'accessories/wieldable_items/weapons/hammer/battle_spoon/battle_spoon',0),(5745,5745,'staticobjects/fish/fishing_pole_00',0),(5746,5746,'accessories/wearable_items/_exp08/dragon_armor/chain-scale_shadow/chest',1096),(5747,5747,'_exp01/zones/objects/lights/md_light_10m00',0),(5748,5748,'_exp01/zones/objects/lights/md_light_10m01',0),(5749,5749,'_exp01/zones/objects/arena/arenaflag_ph_500win',0),(5750,5750,'_exp01/zones/objects/arena/arenaflag_ph_1000win',0),(5751,5751,'_exp01/zones/objects/arena/arenaflag_ph_championship_win',0),(5752,5752,'_exp01/zones/objects/arena/arenaflag_ph_perfect_game',0),(5753,5753,'_exp01/zones/objects/arena/arenaflag_ph_tournament_win',0),(5754,5754,'_exp01/zones/objects/arena/arenaflag_ph_undefeated',0),(5755,5755,'accessories/wieldable_items/weapons/staff/cobra_staff/cobra_staff_special',0),(5756,5756,'_exp01/zones/objects/tapestries/drv_tapestry_wall_jollyroger',0),(5757,5757,'_exp02/characters/tool_users/insectoid_worker',0),(5758,5758,'staticobjects/banners/drv_tapestries_wall_jollyroger',0),(5759,5759,'creatures/monsters/stagg_deer_female',0),(5760,5760,'accessories/wearable_items/chain/common/low/legs_noskirt',0),(5761,5761,'accessories/wearable_items/chain/plain/low/legs_noskirt',0),(5762,5762,'accessories/wieldable_items/weapons/staff/cobra_staff/cobra_staff_ornate',0),(5763,5763,'staticobjects/chests/chest_animated_ornate_highbrass',0),(5764,5764,'accessories/wearable_items/_exp08/dragon_armor/chain-scale_shadow/feet',1096),(5765,5765,'accessories/wearable_items/_exp08/dragon_armor/chain-scale_shadow/forearms',1096),(5766,5766,'staticobjects/chests/chest_animated_ornate_woodgold',0),(5767,5767,'staticobjects/chests/chest_animated_ornate_silvergold',0),(5768,5768,'staticobjects/chests/chest_animated_ornate_woodsilver',0),(5769,5769,'_exp02/characters/monsters/beholder_undead',0),(5770,5770,'_exp02/characters/monsters/beholder_undead_bloody',0),(5771,5771,'creatures/tu/golem_water',0),(5772,5772,'_exp01/characters/monsters/cobra_water_elemental',0),(5773,5773,'accessories/wearable_items/halloween_masks/antonia_mask/head',0),(5774,5774,'accessories/wearable_items/halloween_masks/cat_mask/head',0),(5775,5775,'accessories/wearable_items/halloween_masks/goblin_mask/head',0),(5776,5776,'accessories/wearable_items/halloween_masks/hatchet_mask/head',0),(5777,5777,'accessories/wearable_items/halloween_masks/lucan_mask/head',0),(5778,5778,'accessories/wearable_items/halloween_masks/mask_mask/head',0),(5779,5779,'accessories/wearable_items/halloween_masks/scarecrow_mask/head',0),(5780,5780,'accessories/wearable_items/halloween_masks/skeleton_mask/head',0),(5781,5781,'staticobjects/statues/holysymbol01_localpivot',0),(5782,5782,'projectiles/spell_fire_ball_long_trail',0),(5783,5783,'staticobjects/interiors/scenes/objects_race/human/halloween/le_evilpitchfork01',0),(5784,5784,'staticobjects/interiors/scenes/objects_race/human/halloween/le_hanging_bat01_swinging',0),(5785,5785,'staticobjects/interiors/scenes/objects_race/human/halloween/le_jackolantern01',0),(5786,5786,'staticobjects/interiors/scenes/objects_race/human/halloween/le_jackolantern02',0),(5787,5787,'staticobjects/interiors/scenes/objects_race/human/halloween/le_jackolantern03',0),(5788,5788,'staticobjects/rocks/ant_p5_meteor01',0),(5789,5789,'accessories/wearable_items/_exp08/dragon_armor/chain-scale_shadow/hands',1096),(5790,5790,'accessories/wearable_items/_exp08/dragon_armor/chain-scale_shadow/head',1096),(5791,5791,'staticobjects/gravestones/gravestone11',0),(5792,5792,'staticobjects/beds/sleepingrollleather02',0),(5793,5793,'accessories/wearable_items/chain/chain_tint01/chest',0),(5794,5794,'accessories/wearable_items/chain/chain_tint01/feet',0),(5795,5795,'accessories/wearable_items/chain/chain_tint01/forearms',0),(5796,5796,'accessories/wearable_items/chain/chain_tint01/hands',0),(5797,5797,'accessories/wearable_items/chain/chain_tint01/head',0),(5798,5798,'accessories/wearable_items/chain/chain_tint01/legs',0),(5799,5799,'accessories/wearable_items/chain/chain_tint01/legs_noskirt',0),(5800,5800,'accessories/wearable_items/chain/chain_tint01/shoulders',0),(5801,5801,'accessories/wearable_items/chain/chain_tint01/skirt',0),(5802,5802,'accessories/wearable_items/brigandine/brigandine_tint01/chest',0),(5803,5803,'accessories/wearable_items/brigandine/brigandine_tint01/feet',0),(5804,5804,'accessories/wearable_items/brigandine/brigandine_tint01/forearms',0),(5805,5805,'accessories/wearable_items/brigandine/brigandine_tint01/hands',0),(5806,5806,'accessories/wearable_items/brigandine/brigandine_tint01/head',0),(5807,5807,'accessories/wearable_items/brigandine/brigandine_tint01/legs',0),(5808,5808,'accessories/wearable_items/brigandine/brigandine_tint01/shoulders',0),(5809,5809,'accessories/wearable_items/plate/plate_tint02/chest',0),(5810,5810,'accessories/wearable_items/plate/plate_tint02/feet',0),(5811,5811,'accessories/wearable_items/plate/plate_tint02/forearms',0),(5812,5812,'accessories/wearable_items/plate/plate_tint02/hands',0),(5813,5813,'accessories/wearable_items/plate/plate_tint02/head',0),(5814,5814,'accessories/wearable_items/plate/plate_tint02/legs',0),(5815,5815,'accessories/wearable_items/plate/plate_tint02/shoulders',0),(5816,5816,'accessories/wearable_items/leather/leather_tint01/chest',0),(5817,5817,'accessories/wearable_items/leather/leather_tint01/feet',0),(5818,5818,'accessories/wearable_items/leather/leather_tint01/forearms',0),(5819,5819,'accessories/wearable_items/leather/leather_tint01/hands',0),(5820,5820,'accessories/wearable_items/leather/leather_tint01/head',0),(5821,5821,'accessories/wearable_items/leather/leather_tint01/legs',0),(5822,5822,'accessories/wearable_items/leather/leather_tint01/shoulders',0),(5823,5823,'accessories/wearable_items/leather/leather_tint01/skirt',0),(5824,5824,'accessories/wearable_items/leather/leather_tint01/legs_noskirt',0),(5825,5825,'accessories/wearable_items/magus/uncommon/high/hood',0),(5826,5826,'accessories/wearable_items/vanguard/vanguard_tint01/chest',0),(5827,5827,'accessories/wearable_items/vanguard/vanguard_tint01/feet',0),(5828,5828,'accessories/wearable_items/vanguard/vanguard_tint01/forearms',0),(5829,5829,'accessories/wearable_items/vanguard/vanguard_tint01/hands',0),(5830,5830,'accessories/wearable_items/vanguard/vanguard_tint01/head',0),(5831,5831,'accessories/wearable_items/vanguard/vanguard_tint01/legs',0),(5832,5832,'accessories/wearable_items/vanguard/vanguard_tint01/right',0),(5833,5833,'accessories/wearable_items/vanguard/vanguard_tint01/shoulders',0),(5834,5834,'accessories/wearable_items/vanguard/vanguard_tint01/shoulders_nopauldrons',0),(5835,5835,'staticobjects/platforms/fstc_flying_mount_station',0),(5836,5836,'staticobjects/platforms/fstc_flying_mount_station_build01',0),(5837,5837,'staticobjects/platforms/fstc_flying_mount_station_build02',0),(5838,5838,'accessories/wearable_items/heavy_chain/plain/chest',0),(5839,5839,'accessories/wearable_items/heavy_chain/plain/feet',0),(5840,5840,'accessories/wearable_items/heavy_chain/plain/forearms',0),(5841,5841,'accessories/wearable_items/heavy_chain/plain/hands',0),(5842,5842,'accessories/wearable_items/heavy_chain/plain/head',0),(5843,5843,'accessories/wearable_items/heavy_chain/plain/legs',0),(5844,5844,'accessories/wearable_items/heavy_chain/plain/legs_noskirt',0),(5845,5845,'accessories/wearable_items/heavy_chain/plain/pauldrons',0),(5846,5846,'accessories/wearable_items/heavy_chain/plain/shoulders',0),(5847,5847,'accessories/wearable_items/heavy_chain/plain/shoulders_no_pauldrons',0),(5848,5848,'accessories/wearable_items/heavy_chain/plain/skirt',0),(5849,5849,'accessories/wearable_items/plate/plate_tint01/chest',0),(5850,5850,'accessories/wearable_items/plate/plate_tint01/feet',0),(5851,5851,'accessories/wearable_items/plate/plate_tint01/forearms',0),(5852,5852,'accessories/wearable_items/plate/plate_tint01/hands',0),(5853,5853,'accessories/wearable_items/plate/plate_tint01/head',0),(5854,5854,'accessories/wearable_items/plate/plate_tint01/legs',0),(5855,5855,'accessories/wearable_items/plate/plate_tint01/shoulders',0),(5856,5856,'_exp02/characters/tool_users/insectoid_worker_white',0),(5857,5857,'_exp02/characters/tool_users/insectoid_warlord_noarmor_white',0),(5858,5858,'_exp02/characters/tool_users/insectoid_warlord_white',0),(5859,5859,'_exp02/characters/tool_users/insectoid_spellcaster',0),(5860,5860,'_exp02/characters/tool_users/insectoid_warlord',0),(5861,5861,'_exp02/characters/tool_users/insectoid_warlord_noarmor',0),(5862,5862,'_exp02/characters/monsters/basilisk',0),(5863,5863,'_exp02/characters/monsters/otyugh',0),(5864,5864,'staticobjects/chests/chest_animated_treasured',0),(5865,5865,'staticobjects/chests/chest_animated_legendary',0),(5866,5866,'staticobjects/statues/idol_rusty_upright',0),(5867,5867,'staticobjects/shelves/wall_shelf_halfling_wooden02_houseitem',0),(5868,5868,'staticobjects/shelves/wall_shelf_halfling_wooden03_houseitem',0),(5869,5869,'staticobjects/lighting/wall_sconce_human_iron02',0),(5870,5870,'accessories/wieldable_items/weapons/bow/long_bow/long_bow001_ornate_house_item',0),(5871,5871,'accessories/wieldable_items/weapons/throwing_weapons/throwing_star/throwing_star001_ornate_houseitem',0),(5872,5872,'accessories/wieldable_items/weapons/talisman/orb/orb001_rusty_houseitem',0),(5873,5873,'staticobjects/trophies/griffon_tower_trophy',0),(5874,5874,'accessories/wearable_items/heavy_cloth/heavy_cloth_dervish_plain/legs_noskirt',0),(5875,5875,'accessories/wearable_items/heavy_cloth/heavy_cloth_dervish_plain/skirt',0),(5876,5876,'accessories/wearable_items/profesion_hats/illusionist/illusionist_01/head',0),(5877,5877,'staticobjects/clock_akanon',0),(5878,5878,'_exp02/zones/objects/banners/ls_banner_minion01',0),(5879,5879,'_exp02/zones/objects/beds/hf_bed_guard_ornate01',0),(5880,5880,'_exp02/zones/objects/books/hf_book_single01',0),(5881,5881,'_exp02/zones/objects/books/ls_tome_dragon_brass01',0),(5882,5882,'_exp02/zones/objects/books/ls_tome_dragon_brass02',0),(5883,5883,'_exp02/zones/objects/books/ls_tome_dragon_group01',0),(5884,5884,'_exp02/zones/objects/books/ls_tome_dragon_group02',0),(5885,5885,'_exp02/zones/objects/books/ls_tome_dragon_purple01',0),(5886,5886,'_exp02/zones/objects/books/ls_tome_dragon_purple02',0),(5887,5887,'_exp02/zones/objects/chairs_benches/hf_bench_ornate01',0),(5888,5888,'_exp02/zones/objects/chests/ls_chest_metal01',0),(5889,5889,'_exp02/zones/objects/crude_tools/hf_tools_excavation_drill',0),(5890,5890,'_exp02/zones/objects/crude_tools/hf_tools_excavation_group01',0),(5891,5891,'_exp02/zones/objects/crude_tools/hf_tools_excavation_hammer',0),(5892,5892,'_exp02/zones/objects/crude_tools/hf_tools_excavation_pick',0),(5893,5893,'accessories/wearable_items/_exp08/dragon_armor/chain-scale_shadow/legs',1096),(5894,5894,'_exp02/zones/objects/crude_tools/hf_tools_excavation_toolbox',0),(5895,5895,'_exp02/zones/objects/decorations/hf_decoration_scrimshawfang_floor01',0),(5896,5896,'_exp02/zones/objects/decorations/hf_decoration_scrimshawfang_floor02',0),(5897,5897,'_exp02/zones/objects/decorations/hf_decoration_scrimshawfang_wall01',0),(5898,5898,'_exp02/zones/objects/desks/hf_desk_ornate01',0),(5899,5899,'_exp02/zones/objects/dragon_bones/rn_bones_dragon01',0),(5900,5900,'_exp02/zones/objects/dragon_bones/rn_bones_dragon02',0),(5901,5901,'_exp02/zones/objects/plants/rn_stinkweed_group01',0),(5902,5902,'_exp02/zones/objects/plants/rn_stinkweed_group02',0),(5903,5903,'_exp02/zones/objects/plants/rn_stinkweed_group03',0),(5904,5904,'_exp02/zones/objects/plants/rn_stinkweed_intertwined01',0),(5905,5905,'_exp02/zones/objects/plants/rn_stinkweed_intertwined02',0),(5906,5906,'_exp02/zones/objects/plants/rn_stinkweed_single01',0),(5907,5907,'_exp02/characters/tool_users/aviak_eagle_warrior_dark',0),(5908,5908,'_exp02/characters/tool_users/aviak_eagle_king_dark',0),(5909,5909,'_exp02/characters/tool_users/aviak_eagle_king_light',0),(5910,5910,'_exp02/characters/tool_users/aviak_eagle_warrior_light',0),(5911,5911,'_exp02/characters/tool_users/hooluk_owl_mystic',0),(5912,5912,'accessories/wieldable_items/weapons/staff/anubis_staff/anubis_staff_plain',0),(5913,5913,'accessories/wearable_items/profesion_hats/shadowknight/shadowknight_01/head',0),(5914,5914,'creatures/pets/wyrm_fire',0),(5915,5915,'_exp02/characters/monsters/dragon_evil_tint01',0),(5916,5916,'_exp02/characters/monsters/dragon_good_albino',0),(5917,5917,'_exp02/characters/monsters/dragon_good_tint01',0),(5918,5918,'_exp02/characters/monsters/beholder',0),(5919,5919,'_exp02/characters/monsters/tarranax',0),(5920,5920,'accessories/wieldable_items/weapons/great_sword/qeynos_claymore_sword/qeynos_claymore_sword',0),(5921,5921,'accessories/wearable_items/profesion_hats/wizard/wizard_01/head',0),(5922,5922,'staticobjects/interiors/scenes/objects_race/dp_objects/nests/beehive01',0),(5923,5923,'staticobjects/interiors/scenes/objects_race/dp_objects/nests/beehive02',0),(5924,5924,'staticobjects/interiors/scenes/objects_race/dp_objects/nests/beehive03',0),(5925,5925,'accessories/wearable_items/_exp08/dragon_armor/chain-scale_shadow/legs_noskirt',1096),(5926,5926,'projectiles/exp02/hof_molotov_cocktail',0),(5927,5927,'_exp02/characters/tool_users/vultak_vulture_spellcaster',0),(5928,5928,'staticobjects/flora/rocks/commonlands/commonlands_central/scenes/nbhum_rock01',0),(5929,5929,'_exp02/zones/objects/jail_cells/los_jail_cell_piece01',0),(5930,5930,'accessories/wieldable_items/weapons/great_spear/wyrmslayer/exp02_wyrmslayer',0),(5931,5931,'accessories/wearable_items/_exp08/dragon_armor/chain-scale_shadow/shoulders',1096),(5932,5932,'accessories/wieldable_items/weapons/staff/djinn_staff/djinn_staff_plain',0),(5933,5933,'accessories/wieldable_items/weapons/sword/katana/katana_plain',0),(5934,5934,'accessories/wieldable_items/weapons/sword/katana/katana_ornate',0),(5935,5935,'accessories/wieldable_items/weapons/great_sword/dragon_katana/dragon_katana_plain',0),(5936,5936,'accessories/wieldable_items/weapons/great_sword/dragon_katana/dragon_katana_ornate',0),(5937,5937,'accessories/wieldable_items/weapons/staff/escrima/escrima001_plain',0),(5938,5938,'accessories/wieldable_items/weapons/staff/escrima/escrima002_ornate',0),(5939,5939,'_exp02/characters/tool_users/aviak_eagle_white',0),(5940,5940,'_exp02/characters/tool_users/aviak_eagle_dark',0),(5941,5941,'_exp02/zones/objects/dragon_statues/ls_statue_dragon_bust01',0),(5942,5942,'accessories/wearable_items/profesion_hats/swashbuckler/swashbuckler_01/head',0),(5943,5943,'accessories/wearable_items/_exp08/dragon_armor/chain-scale_shadow/shoulders_epic',1096),(5944,5944,'accessories/wearable_items/_exp08/dragon_armor/leather1/skirt',1096),(5945,5945,'_exp02/characters/tool_users/vultak_vulture_king',0),(5946,5946,'_exp02/characters/monsters/carnivorous_plant',0),(5947,5947,'_exp02/characters/tool_users/draconian',0),(5948,5948,'_exp02/zones/objects/bottles/glass_vial001_rusty',0),(5949,5949,'accessories/wearable_items/profesion_hats/inquisitor/inquisitor_01/head',0),(5950,5950,'accessories/wearable_items/_exp08/dragon_armor/leather1/chest',1096),(5951,5951,'accessories/wearable_items/christmas_hats/santa_hat/head',0),(5952,5952,'_exp02/zones/objects/lift/sos_lift_platform',0),(5953,5953,'_exp02/characters/tool_users/vultak_vulture_warrior',0),(5954,5954,'_exp02/zones/objects/dragon_statues/ls_statue_dragon01',0),(5955,5955,'_exp02/characters/monsters/harla_dar',0),(5956,5956,'staticobjects/liveevent/rainbow_bridge',0),(5957,5957,'staticobjects/liveevent/dpo_bucket_snowballs01',0),(5958,5958,'staticobjects/liveevent/dpo_holiday05_stocking_green',0),(5959,5959,'staticobjects/liveevent/dpo_holiday05_stocking_red',0),(5960,5960,'staticobjects/liveevent/dpo_holiday05_stocking_redgold',0),(5961,5961,'staticobjects/liveevent/dpo_holiday_candlegroup01_bluesilver',0),(5962,5962,'staticobjects/liveevent/dpo_holiday_candlegroup01_redgreen',0),(5963,5963,'staticobjects/liveevent/dpo_holiday_candlegroup02_bluesilver',0),(5964,5964,'staticobjects/liveevent/dpo_holiday_wallcandles01_gold',0),(5965,5965,'staticobjects/liveevent/dpo_holiday_wallcandles01_silver',0),(5966,5966,'accessories/wearable_items/_exp08/dragon_armor/leather1/feet',1096),(5967,5967,'staticobjects/liveevent/dpo_present01_medium',0),(5968,5968,'staticobjects/liveevent/dpo_present01_small',0),(5969,5969,'staticobjects/liveevent/dpo_present02_big',0),(5970,5970,'staticobjects/liveevent/dpo_present02_medium',0),(5971,5971,'staticobjects/liveevent/dpo_present_group01',0),(5972,5972,'staticobjects/liveevent/dpo_present_group02',0),(5973,5973,'staticobjects/liveevent/dpo_snowglobe_freeport01',0),(5974,5974,'staticobjects/liveevent/dpo_snowglobe_qeynos01',0),(5975,5975,'staticobjects/liveevent/dpo_snowman01',0),(5976,5976,'staticobjects/liveevent/dpo_snowwoman01',0),(5977,5977,'staticobjects/liveevent/dpo_present01_big',0),(5978,5978,'staticobjects/boxes/floor_collectionbox_any_ornate01',0),(5979,5979,'staticobjects/boxes/floor_collectionbox_any_ornate02',0),(5980,5980,'staticobjects/boxes/floor_collectionbox_any_rough01',0),(5981,5981,'staticobjects/boxes/floor_collectionbox_any_wood02',0),(5982,5982,'staticobjects/liveevent/dpo_everfrost_wonderlandwalls01',0),(5983,5983,'staticobjects/liveevent/dpo_holiday_candycane_large01',0),(5984,5984,'staticobjects/liveevent/dpo_holiday_candycane_large02',0),(5985,5985,'staticobjects/liveevent/dpo_holiday_candycane_small01',0),(5986,5986,'staticobjects/liveevent/dpo_holiday_candycane_small02',0),(5987,5987,'creatures/tu/invisible_soldier_tu',0),(5988,5988,'accessories/wearable_items/pauldrons/evil01/pauldron_evil01',0),(5989,5989,'accessories/wearable_items/pauldrons/evil01/shoulders_pauldron_evil01',0),(5990,5990,'staticobjects/liveevent/christmas_tree01',0),(5991,5991,'staticobjects/weapons/dpo_voulge001_ornate',0),(5992,5992,'_exp02/characters/monsters/gold_flyingsnake',0),(5993,5993,'_exp02/characters/tool_users/draconian_skeleton',0),(5994,5994,'creatures/monsters/wyrm_undead',0),(5995,5995,'creatures/monsters/drake_undead',0),(5996,5996,'staticobjects/dpo_invisible_wall/invisible_platform',0),(5997,5997,'creatures/mounts/carpet_nodraw',0),(5998,5998,'_exp02/zones/objects/bookcases/ss_bookcase_ornate_ceiling01',0),(5999,5999,'_exp02/zones/objects/bookcases/ss_bookcase_ornate01',0),(6000,6000,'_exp02/zones/objects/chairs_benches/ls_chair_metal02',0),(6001,6001,'_exp02/zones/objects/decorations/ls_decoration_wall_dragonhead01',0),(6002,6002,'accessories/wearable_items/_exp02/heavy_cloth_heroic/legs',0),(6003,6003,'creatures/monsters/flyingsnake_undead',0),(6004,6004,'creatures/monsters/drake_goowater',0),(6005,6005,'accessories/wearable_items/_exp02/heavy_cloth_heroic/shoulders',0),(6006,6006,'accessories/wearable_items/_exp08/dragon_armor/leather1/forearms',1096),(6007,6007,'accessories/wearable_items/_exp08/dragon_armor/leather1/hands',1096),(6008,6008,'_exp02/characters/monsters/lord_vyemm',0),(6009,6009,'projectiles/spell_snowball',0),(6010,6010,'_exp02/zones/objects/tents/dn_tent_red',0),(6011,6011,'_exp02/characters/monsters/dragon_good_essence',0),(6012,6012,'accessories/wearable_items/pauldrons/evil02/pauldron_evil02',0),(6013,6013,'accessories/wearable_items/pauldrons/evil02/shoulders_pauldron_evil02',0),(6014,6014,'_exp02/characters/tool_users/draconian_assassin',0),(6015,6015,'_exp02/characters/tool_users/draconian_warlord',0),(6016,6016,'_exp02/characters/tool_users/draconian_wizard',0),(6017,6017,'_exp02/characters/tool_users/draconian_undead',0),(6018,6018,'creatures/monsters/ground_dragon_ghost_pc',0),(6019,6019,'_exp02/zones/objects/lift/rd_ter_palace_floater',0),(6020,6020,'accessories/wearable_items/_exp08/dragon_armor/leather1/head',1096),(6021,6021,'accessories/wearable_items/profesion_hats/animal_hide/animal_hide_01/head',0),(6022,6022,'accessories/wearable_items/profesion_hats/ranger/ranger_01/head',0),(6023,6023,'staticobjects/monuments/fprt_lucanstatue_pedestal',0),(6024,6024,'_exp02/zones/objects/plants/rn_stinkweed_bud01',0),(6025,6025,'staticobjects/spires/spire_construction_1',0),(6026,6026,'staticobjects/spires/spire_construction_2',0),(6027,6027,'staticobjects/spires/spire_construction_3',0),(6028,6028,'staticobjects/spires/spire_construction_4',0),(6029,6029,'staticobjects/spires/spire_construction_5',0),(6030,6030,'_exp02/zones/objects/eggs/ls_dragoneggs_broken',0),(6031,6031,'_exp02/zones/objects/eggs/ls_dragoneggs_mixed',0),(6032,6032,'_exp02/zones/objects/eggs/ls_dragoneggs_unbroken',0),(6033,6033,'_exp02/characters/monsters/basilisk_undead',0),(6034,6034,'accessories/wearable_items/magus/robes/robe_newbie_tint01/chest',0),(6035,6035,'accessories/wearable_items/magus/robes/robe_newbie_tint01/hood',0),(6036,6036,'accessories/wearable_items/magus/robes/robe_newbie_tint01/pants',0),(6037,6037,'accessories/wearable_items/magus/robes/robe_newbie_tint01/skirt',0),(6038,6038,'_exp02/zones/objects/doors/sos_wood_door',0),(6039,6039,'accessories/wearable_items/profesion_hats/paladin/paladin_01/head',0),(6040,6040,'_exp02/characters/tool_users/hooluk_owl',0),(6041,6041,'_exp02/characters/tool_users/hooluk_owl_hood',0),(6042,6042,'_exp02/zones/objects/doors/hf_door01',0),(6043,6043,'_exp02/zones/objects/doors/hf_door02',0),(6044,6044,'_exp02/zones/objects/eggs/hf_egg_single_blue_upright01',0),(6045,6045,'_exp02/zones/objects/eggs/hf_egg_single_bronze_upright01',0),(6046,6046,'accessories/wieldable_items/weapons/fist/chakram/chakram_plain',0),(6047,6047,'accessories/wearable_items/_exp02/leather_heavy/chest',0),(6048,6048,'accessories/wearable_items/_exp02/leather_heavy/feet',0),(6049,6049,'accessories/wearable_items/_exp02/leather_heavy/forearms',0),(6050,6050,'accessories/wearable_items/_exp02/leather_heavy/hands',0),(6051,6051,'accessories/wearable_items/_exp02/leather_heavy/head',0),(6052,6052,'accessories/wearable_items/_exp02/leather_heavy/legs',0),(6053,6053,'accessories/wearable_items/_exp02/leather_heavy/legs_noskirt',0),(6054,6054,'accessories/wearable_items/_exp02/leather_heavy/shoulders',0),(6055,6055,'accessories/wearable_items/_exp02/leather_heavy/skirt',0),(6056,6056,'staticobjects/mirrors/dpo_djn_mirror_translocation01',0),(6057,6057,'accessories/wieldable_items/weapons/great_sword/dragon_katana/exp02_dragon_katana_ornate_fire',0),(6058,6058,'_exp02/zones/objects/dragon_bones/rn_bones_dragon_skullfull01',0),(6059,6059,'_exp02/zones/objects/dragon_bones/rn_bones_dragon_verte01',0),(6060,6060,'accessories/wearable_items/_exp02/vanguard_chitin/legs_noskirt',0),(6061,6061,'accessories/wearable_items/_exp02/vanguard_chitin/right',0),(6062,6062,'accessories/wearable_items/_exp02/vanguard_chitin/shoulders',0),(6063,6063,'accessories/wearable_items/_exp02/vanguard_chitin/shoulders_nopauldrons',0),(6064,6064,'accessories/wearable_items/_exp02/vanguard_chitin/skirt',0),(6065,6065,'accessories/wearable_items/_exp02/vanguard_chitin/head',0),(6066,6066,'accessories/wearable_items/_exp02/vanguard_chitin/legs',0),(6067,6067,'accessories/wearable_items/_exp02/vanguard_chitin/feet',0),(6068,6068,'accessories/wearable_items/_exp02/vanguard_chitin/forearms',0),(6069,6069,'accessories/wearable_items/_exp02/vanguard_chitin/chest',0),(6070,6070,'accessories/wearable_items/_exp02/vanguard_chitin/hands',0),(6071,6071,'accessories/wieldable_items/weapons/ghost_weapons/exp02_wand001_ghost_magic',0),(6072,6072,'accessories/wieldable_items/weapons/dagger/dirk/exp02_dirk002_magic',0),(6073,6073,'accessories/wieldable_items/weapons/staff/djinn_staff/exp02_djinn_staff_fire',0),(6074,6074,'accessories/wieldable_items/weapons/hammer/lotus_sceptre/exp02_lotus_sceptre_red_sparkles',0),(6075,6075,'_exp02/zones/objects/chests/hf_chest_reliquary_bones01',0),(6076,6076,'_exp02/zones/objects/chests/hf_chest_reliquary_bones02',0),(6077,6077,'accessories/wieldable_items/weapons/axe/pick_axe/pick_axe01',0),(6078,6078,'accessories/wearable_items/_exp08/dragon_armor/leather1/legs',1096),(6079,6079,'_exp02/zones/objects/light_sources/dn_lightsource_orb01_purple',0),(6080,6080,'staticobjects/pictures/fprt_ph_painting_eq1_vertical23_greenmonument_l0',0),(6081,6081,'accessories/wearable_items/_exp02/plate_heroic/shoulders',0),(6082,6082,'accessories/wearable_items/_exp02/plate_heroic/chest',0),(6083,6083,'accessories/wearable_items/_exp02/plate_heroic/feet',0),(6084,6084,'accessories/wearable_items/_exp02/plate_heroic/forearms',0),(6085,6085,'accessories/wearable_items/_exp02/plate_heroic/hands',0),(6086,6086,'accessories/wearable_items/_exp02/plate_heroic/head',0),(6087,6087,'accessories/wearable_items/_exp02/plate_heroic/legs',0),(6088,6088,'_exp02/zones/objects/eggs/sos_dragoneggs_broken_blue',0),(6089,6089,'_exp02/zones/objects/gears/gear_single',0),(6090,6090,'_exp02/characters/monsters/beholder_illusion',0),(6091,6091,'_exp02/characters/monsters/carnivorous_plant_illusion',0),(6092,6092,'_exp02/zones/objects/bookcases/hf_bookcase_largeornate01',0),(6093,6093,'_exp02/zones/objects/bookcases/hf_bookcase_largeornate02',0),(6094,6094,'_exp02/zones/objects/chairs_benches/hf_bench_ornate01_global',0),(6095,6095,'_exp02/zones/objects/chairs_benches/ls_chair_metal01',0),(6096,6096,'_exp02/zones/objects/chairs_benches/rd_chair_vulture_papasan01',0),(6097,6097,'_exp02/zones/objects/chairs_benches/ls_chair_metal02_global',0),(6098,6098,'_exp02/zones/objects/chests/ls_chest_metal01_global',0),(6099,6099,'_exp02/zones/objects/desks/hf_desk_ornate01_global',0),(6100,6100,'_exp02/zones/objects/fountain/sos_fountain_birdbath_floor',0),(6101,6101,'_exp02/zones/objects/fountain/sos_fountain_birdbath_wall',0),(6102,6102,'_exp02/zones/objects/light_sources/ls_lamp_metal_blue',0),(6103,6103,'_exp02/zones/objects/light_sources/ls_lightsource_walltorch02',0),(6104,6104,'_exp02/zones/objects/rugs/ls_ring_scales01',0),(6105,6105,'_exp02/zones/objects/sculptures/hf_decoration_scrimshawfang_floor01',0),(6106,6106,'_exp02/zones/objects/sculptures/hf_decoration_scrimshawfang_floor02',0),(6107,6107,'_exp02/zones/objects/sculptures/ls_sculpture_glass02',0),(6108,6108,'_exp02/zones/objects/sculptures/ls_sculpture_glass03',0),(6109,6109,'_exp02/zones/objects/sculptures/ls_sculpture_glass_double01',0),(6110,6110,'_exp02/zones/objects/sculptures/ls_sculpture_glass_double02',0),(6111,6111,'_exp02/zones/objects/sculptures/sos_orb_gazing01',0),(6112,6112,'_exp02/zones/objects/statues/ls_statue_dragon01',0),(6113,6113,'_exp02/zones/objects/statues/ls_statue_dragon02',0),(6114,6114,'_exp02/zones/objects/statues/ls_statue_dragon_bust01',0),(6115,6115,'_exp02/zones/objects/tables/ls_table_long01',0),(6116,6116,'_exp02/zones/objects/tables/ls_table_long02',0),(6117,6117,'_exp02/zones/objects/tables/ls_table_short01',0),(6118,6118,'_exp02/zones/objects/tables/ls_table_short02',0),(6119,6119,'_exp02/zones/objects/tables/sos_aviak_table01',0),(6120,6120,'_exp02/zones/objects/tapestry/ls_tapestry_awakened_cult01',0),(6121,6121,'_exp02/zones/objects/tapestry/ls_tapestry_kerafyrm_apocalypse01',0),(6122,6122,'_exp02/zones/objects/tapestry/ls_tapestry_kerafyrm_awakening01',0),(6123,6123,'accessories/wearable_items/_exp02/woven_monk/chest',0),(6124,6124,'accessories/wearable_items/_exp02/woven_monk/feet',0),(6125,6125,'accessories/wearable_items/_exp02/woven_monk/forearms',0),(6126,6126,'accessories/wearable_items/_exp02/woven_monk/hands',0),(6127,6127,'accessories/wearable_items/_exp02/woven_monk/head',0),(6128,6128,'accessories/wearable_items/_exp02/woven_monk/legs',0),(6129,6129,'accessories/wearable_items/_exp02/woven_monk/legs_noskirt',0),(6130,6130,'accessories/wearable_items/_exp02/woven_monk/shoulders',0),(6131,6131,'accessories/wearable_items/_exp02/woven_monk/skirt',0),(6132,6132,'accessories/wieldable_items/weapons/bow/long_bow/exp02_long_bow001_runic_soulseeker',0),(6133,6133,'accessories/wieldable_items/weapons/great_spear/scythe_dragon_tooth/exp02_scythe_dragon_tooth_spine',0),(6134,6134,'accessories/wieldable_items/weapons/hammer/crab_sceptre/exp02_crab_sceptre_destruction',0),(6135,6135,'accessories/wieldable_items/weapons/talisman/tablet/exp02_tablet002_ornate_runes',0),(6136,6136,'accessories/wieldable_items/shields/kite_shield/kite_shield_freeport/exp02_kite_shield_flesh',0),(6137,6137,'accessories/wieldable_items/weapons/bow/short_bow/exp02_short_bow001_runic_heartstinger',0),(6138,6138,'accessories/wearable_items/_exp02/brigandine_heavy/chest',0),(6139,6139,'accessories/wearable_items/_exp02/brigandine_heavy/feet',0),(6140,6140,'accessories/wearable_items/_exp02/brigandine_heavy/forearms',0),(6141,6141,'accessories/wearable_items/_exp02/brigandine_heavy/hands',0),(6142,6142,'accessories/wearable_items/_exp02/brigandine_heavy/head',0),(6143,6143,'accessories/wearable_items/_exp02/brigandine_heavy/legs',0),(6144,6144,'accessories/wearable_items/_exp02/brigandine_heavy/shoulders',0),(6145,6145,'staticobjects/spires/spire_construction_6',0),(6146,6146,'creatures/monsters/root_horror_exp02',0),(6147,6147,'staticobjects/spires/dpo_teleportspires_houseitem01',0),(6148,6148,'projectiles/bone_human_skull01',0),(6149,6149,'accessories/wieldable_items/weapons/great_axe/executioner_axe/exp02_executioner_axe002_helmsplitter',0),(6150,6150,'accessories/wieldable_items/weapons/great_axe/halberd/halberd001_runic_anuk',0),(6151,6151,'accessories/wieldable_items/weapons/staff/cobra_staff/cobra_staff_plain_anuk',0),(6152,6152,'accessories/wieldable_items/weapons/hammer/eagle_sceptre/eagle_sceptre_plain_anuk',0),(6153,6153,'accessories/wieldable_items/weapons/rapier/epee/epee001_runic_anuk',0),(6154,6154,'accessories/wieldable_items/weapons/hammer/amber_sceptre/amber_sceptre_plain_anuk',0),(6155,6155,'accessories/wearable_items/_exp02/robe_fire/chest',0),(6156,6156,'accessories/wearable_items/_exp02/robe_fire/hood',0),(6157,6157,'accessories/wearable_items/_exp02/robe_fire/pants',0),(6158,6158,'accessories/wearable_items/_exp02/robe_fire/skirt',0),(6159,6159,'staticobjects/dpo_invisible_cube/dpo_invisible_cube_cached',0),(6160,6160,'accessories/wearable_items/_exp02/heavy_cloth_heroic/chest',0),(6161,6161,'accessories/wearable_items/_exp02/heavy_cloth_heroic/feet',0),(6162,6162,'accessories/wearable_items/_exp02/heavy_cloth_heroic/forearms',0),(6163,6163,'accessories/wearable_items/_exp02/heavy_cloth_heroic/hands',0),(6164,6164,'accessories/wearable_items/_exp08/dragon_armor/leather1/legs_noskirt',1096),(6165,6165,'accessories/wieldable_items/weapons/great_spear/droag_butchering_tools/droag_butcher01',0),(6166,6166,'accessories/wieldable_items/weapons/great_spear/droag_butchering_tools/droag_butcher02',0),(6167,6167,'accessories/wieldable_items/weapons/great_spear/droag_butchering_tools/droag_butcher03',0),(6168,6168,'_exp02/zones/objects/light_sources/hf_lightsource_brazier_blue01',0),(6169,6169,'accessories/wearable_items/_exp02/chain_heroic/chest',0),(6170,6170,'accessories/wearable_items/_exp02/chain_heroic/feet',0),(6171,6171,'accessories/wearable_items/_exp02/chain_heroic/forearms',0),(6172,6172,'accessories/wearable_items/_exp02/chain_heroic/hands',0),(6173,6173,'accessories/wearable_items/_exp02/chain_heroic/head',0),(6174,6174,'accessories/wearable_items/_exp02/chain_heroic/legs',0),(6175,6175,'accessories/wearable_items/_exp02/chain_heroic/legs_noskirt',0),(6176,6176,'accessories/wearable_items/_exp02/chain_heroic/shoulders',0),(6177,6177,'accessories/wearable_items/_exp02/chain_heroic/skirt',0),(6178,6178,'accessories/wieldable_items/weapons/sword/long_sword/exp02_long_sword_of_rage',0),(6179,6179,'accessories/wieldable_items/weapons/dagger/embalming_blade/exp02_embalming_blade_vyemms_fang',0),(6180,6180,'accessories/wieldable_items/weapons/great_sword/vampire_greatsword/exp02_vampire_greatsword_gaudralek',0),(6181,6181,'accessories/wieldable_items/weapons/hammer/mace_obsidian_edged/exp02_mace_dragonrib_club',0),(6182,6182,'accessories/wieldable_items/weapons/great_hammer/war_hammer/exp02_war_hammer001_sledge_of_smashing',0),(6183,6183,'accessories/wieldable_items/weapons/axe/small_dwarf/exp02_dwarf_axe_frostwrath',0),(6184,6184,'accessories/wieldable_items/weapons/bow/short_bow/exp02_short_bow001_wurm_destroyer',0),(6185,6185,'accessories/wieldable_items/weapons/staff/scorcerers_staff/exp02_staff_of_the_silent_star',0),(6186,6186,'_exp02/zones/objects/crystals/dp_crystal_shard01',0),(6187,6187,'_exp01/zones/objects/containers/dpo_brownweave_basket01',0),(6188,6188,'accessories/wearable_items/_exp02/vanguard_chitin/exp02_chest_parasite',0),(6189,6189,'accessories/wieldable_items/misc/stein002_ichor',0),(6190,6190,'accessories/wieldable_items/shields/buckler_shield/streatched_leather_buckler/streatched_leather_buckler001_spikes',0),(6191,6191,'accessories/wieldable_items/shields/ghost_shields/round_shield_etched001_mists',0),(6192,6192,'accessories/wieldable_items/shields/round_shield/metal_etched_round/round_shield_etched001_retina',0),(6193,6193,'accessories/wieldable_items/shields/round_shield/metal_round/metal_round_shield001_flameshield',0),(6194,6194,'accessories/wieldable_items/shields/tower_shield/wooden_tower_shield/wooden_tower_shield001_viscera',0),(6195,6195,'accessories/wieldable_items/weapons/axe/axe_curved_handle/axe_curved_handle_ascendant',0),(6196,6196,'accessories/wieldable_items/weapons/great_sword/scimitar_broad_sword/scimitar_broad_sword001_runic',0),(6197,6197,'accessories/wieldable_items/weapons/great_sword/scimitar_broad_sword/scimitar_broad_sword001_pride',0),(6198,6198,'accessories/wieldable_items/weapons/throwing_weapons/spike/exp02_spike004_spine',0),(6199,6199,'_exp02/zones/objects/aviak_totems/sos_totem_aviak_dualwieldaxe01',0),(6200,6200,'_exp02/zones/objects/aviak_totems/sos_totem_aviak_dualwieldswordshield01',0),(6201,6201,'_exp02/zones/regions/realm_of_dawn/rd_rock_small01',0),(6202,6202,'_exp02/zones/regions/realm_of_dawn/rd_rock_small04',0),(6203,6203,'accessories/wearable_items/profesion_hats/brigand_hat/head',0),(6204,6204,'_exp02/zones/regions/realm_of_dawn/rd_arena_warp_cylinder01',0),(6205,6205,'accessories/wieldable_items/weapons/dagger/parrying_blade/exp02_parrying_blade001_talon',0),(6206,6206,'accessories/wieldable_items/weapons/talisman/orb/orb001_soulless',0),(6207,6207,'accessories/wieldable_items/weapons/fist/cestus/spiked_cestus002_bone',0),(6208,6208,'accessories/wieldable_items/weapons/great_spear/droag_butchering_tools/droag_butcher_render',0),(6209,6209,'accessories/wieldable_items/weapons/great_hammer/morning_star/morning_star001_dominance',0),(6210,6210,'accessories/wieldable_items/weapons/bow/short_bow/exp02_short_bow001_ichorstrand',0),(6211,6211,'accessories/wieldable_items/weapons/great_hammer/orc_hammer/exp02_orc_hammer_spinesnapper',0),(6212,6212,'accessories/wieldable_items/weapons/great_sword/broad_sword/exp02_broad_sword002_runic',0),(6213,6213,'accessories/wieldable_items/shields/buckler_shield/buckler_fae/buckler_fae_01',0),(6214,6214,'accessories/wieldable_items/weapons/dagger/embalming_blade/exp02_embalming_blade_dragonfang',0),(6215,6215,'accessories/wieldable_items/weapons/dagger/kris/exp02_kris001_absolution',0),(6216,6216,'accessories/wieldable_items/weapons/great_spear/droag_butchering_tools/droag_butcher_manslayer',0),(6217,6217,'accessories/wieldable_items/weapons/great_sword/greatsword/exp02_greatsword002_runeblade',0),(6218,6218,'accessories/wieldable_items/weapons/fist/katar/exp02_katar002_twin_calamities1',0),(6219,6219,'accessories/wieldable_items/weapons/hammer/crab_sceptre/exp02_crab_sceptre_doomsworn',0),(6220,6220,'accessories/wieldable_items/weapons/spear/one_handed_spear/exp02_barbed_spear_skewer',0),(6221,6221,'accessories/wieldable_items/weapons/rapier/rapier/exp02_rapier001_conflagrant',0),(6222,6222,'accessories/wieldable_items/weapons/sword/long_sword/exp02_long_sword_annealed_defender',0),(6223,6223,'accessories/wieldable_items/weapons/sword/katana/exp02_katana_oblivions_edge',0),(6224,6224,'accessories/wieldable_items/weapons/hammer/battlehammer/exp02_battlehammer_doomhammer',0),(6225,6225,'accessories/wieldable_items/weapons/sword/scimitar/exp02_scimitar001_accord_blade',0),(6226,6226,'_exp02/zones/objects/orbs/sos_orb_gazing01',0),(6227,6227,'accessories/wieldable_items/weapons/great_spear/wyrmslayer/exp02_wyrmslayer_magic',0),(6228,6228,'accessories/wieldable_items/weapons/great_spear/wyrmslayer/exp02_wyrmslayer_rusty',0),(6229,6229,'_exp03/characters/tool_users/orc_crushbone/orc_crushbone_soldier_bald',0),(6230,6230,'accessories/wearable_items/_exp08/dragon_armor/leather1/shoulders',1096),(6231,6231,'ec/pc/fae_wings/fae_wing01',0),(6232,6232,'ec/pc/fae_wings/fae_wing02',0),(6233,6233,'ec/pc/fae_wings/fae_wing03',0),(6234,6234,'accessories/wearable_items/_exp08/dragon_armor/leather1/shoulders_epic',1096),(6235,6235,'accessories/wearable_items/profesion_hats/troubadour/troubadour_01/head',0),(6236,6236,'_exp02/zones/objects/weapon_racks_displays/ls_minion_weapons_armorstand01',0),(6237,6237,'accessories/wieldable_items/weapons/bow/long_bow/exp02_long_bow001_dragonhorn_recurve',0),(6238,6238,'accessories/wieldable_items/weapons/dagger/dirk/exp02_dirk002_mordiggian',0),(6239,6239,'accessories/wieldable_items/weapons/dagger/jambiya/exp02_jambiya_blade_numinos',0),(6240,6240,'accessories/wieldable_items/weapons/fist/cestus/exp02_spiked_cestus002_fist',0),(6241,6241,'accessories/wieldable_items/weapons/great_axe/bardiche/exp02_bardiche01_ashbringer',0),(6242,6242,'accessories/wieldable_items/weapons/hammer/mace_obsidian_edged/exp02_mace_obsidian_obscenity',0),(6243,6243,'accessories/wieldable_items/weapons/sword/scimitar/exp02_scimitar001_hierophant',0),(6244,6244,'_exp03/characters/tool_users/orc_crushbone/orc_crushbone_warlord',0),(6245,6245,'accessories/wearable_items/profesion_hats/templar/templar_helm_01/head',0),(6246,6246,'accessories/wieldable_items/weapons/ghost_weapons/war_hammer002_ornate_ghost',0),(6247,6247,'accessories/wieldable_items/shields/tower_shield/qeynos_guard_tower_shield/exp02_qeynos_guard_tower_shield_plain',0),(6248,6248,'accessories/wieldable_items/weapons/hammer/cudgel/exp02_cudgel002_ornate',0),(6249,6249,'accessories/wieldable_items/weapons/sword/qeynos_cutlass/exp02_qeynos_cutlass',0),(6250,6250,'accessories/wearable_items/profesion_hats/berserker/berserker_helm_01/head',0),(6251,6251,'accessories/wieldable_items/shields/buckler_shield/qeynos_buckler/exp02_qeynos_buckler',0),(6252,6252,'accessories/wearable_items/profesion_hats/berserker/berserker_helm_02/head',0),(6253,6253,'_exp03/characters/tool_users/orc_crushbone/orc_crushbone_scout',0),(6254,6254,'accessories/wieldable_items/weapons/fist/qeynos_wraps/exp02_qeynos_wraps',0),(6255,6255,'accessories/wieldable_items/shields/buckler_shield/qeynos_buckler/exp02_qeynos_buckler_red',0),(6256,6256,'creatures/monsters/goo_spikes',0),(6257,6257,'accessories/wearable_items/_exp08/dragon_armor/leather1_blue/skirt',1096),(6258,6258,'accessories/wearable_items/_exp08/dragon_armor/leather1_blue/chest',1096),(6259,6259,'_exp03/characters/tool_users/orc_crushbone/orc_crushbone_mystic',0),(6260,6260,'accessories/wearable_items/_exp08/dragon_armor/leather1_blue/feet',1096),(6261,6261,'accessories/wearable_items/profesion_hats/dirge/dirge_01/head',0),(6262,6262,'staticobjects/racks/fprt_weaponrack_sword001',0),(6263,6263,'staticobjects/containers/fprt_crate_large_militaryboarded01',0),(6264,6264,'staticobjects/containers/fprt_crate_small_military01',0),(6265,6265,'staticobjects/weapons/fprt_weapons_arrowgroup01',0),(6266,6266,'staticobjects/weapons/fprt_weapons_tableshortbow01',0),(6267,6267,'staticobjects/weapons/fprt_weapons_tablethrowaxe01',0),(6268,6268,'accessories/wearable_items/_exp08/dragon_armor/leather1_blue/forearms',1096),(6269,6269,'accessories/wearable_items/_exp08/dragon_armor/leather1_blue/hands',1096),(6270,6270,'accessories/wearable_items/_exp08/dragon_armor/leather1_blue/head',1096),(6271,6271,'ec/pc/fae_wings/fae_wing04',0),(6272,6272,'ec/pc/fae_wings/fae_wing05',0),(6273,6273,'ec/pc/fae_wings/fae_wing06',0),(6274,6274,'ec/pc/fae_wings/fae_wing07',0),(6275,6275,'ec/pc/fae_wings/fae_wing08',0),(6276,6276,'ec/pc/fae_wings/fae_wing09',0),(6277,6277,'ec/pc/fae_wings/fae_wing10',0),(6278,6278,'ec/pc/fae_wings/fae_wing11',0),(6279,6279,'ec/pc/fae_wings/fae_wing12',0),(6280,6280,'_exp03/characters/monsters/golem_crystal',0),(6281,6281,'_exp03/characters/monsters/golem_magma',0),(6282,6282,'_exp03/characters/monsters/golem_shambling_mound',0),(6283,6283,'_exp03/characters/monsters/golem_marble',0),(6284,6284,'_exp03/characters/monsters/golem_stone',0),(6285,6285,'_exp03/characters/monsters/clockwork_menace',0),(6286,6286,'_exp03/characters/monsters/copter_enforcer',0),(6287,6287,'_exp03/characters/monsters/copter_fixer',0),(6288,6288,'_exp03/characters/monsters/copter_welder',0),(6289,6289,'_exp03/characters/monsters/stirge',0),(6290,6290,'_exp03/characters/monsters/werewolf',0),(6291,6291,'_exp03/characters/monsters/wood_elemental',0),(6292,6292,'accessories/wearable_items/starter_clothes/fae_male/arms',0),(6293,6293,'accessories/wearable_items/starter_clothes/fae_male/chest',0),(6294,6294,'accessories/wearable_items/starter_clothes/fae_male/legs',0),(6295,6295,'accessories/wearable_items/starter_clothes/fae_male/sleeves',0),(6296,6296,'accessories/wearable_items/starter_clothes/fae_female/arms',0),(6297,6297,'accessories/wearable_items/starter_clothes/fae_female/chest',0),(6298,6298,'accessories/wearable_items/starter_clothes/fae_female/legs',0),(6299,6299,'accessories/wearable_items/starter_clothes/fae_female/sleeves',0),(6300,6300,'accessories/wearable_items/_exp08/dragon_armor/leather1_blue/legs',1096),(6301,6301,'ap04/adv04_dun_end_of_endless/end_r143_int_door04',0),(6302,6302,'ap04/adv04_dun_end_of_endless/end_r149_int_backdoor01',0),(6303,6303,'accessories/wearable_items/_exp08/dragon_armor/leather1_blue/legs_noskirt',1096),(6304,6304,'staticobjects/tents/qey_tent03',0),(6305,6305,'soga_appearances/ec/npc/ghost_soga_vl_child_female01_h1',0),(6306,6306,'soga_appearances/ec/npc/ghost_soga_vl_child_male01_h2',0),(6307,6307,'soga_appearances/ec/npc/ghost_soga_vl_old_female01_h2',0),(6308,6308,'soga_appearances/ec/npc/ghost_soga_vl_old_male01_h1_b1',0),(6309,6309,'soga_appearances/ec/npc/ghost_soga_vl_young_female01_h2',0),(6310,6310,'soga_appearances/ec/npc/ghost_soga_vl_young_female02_h3',0),(6311,6311,'soga_appearances/ec/npc/ghost_soga_vl_young_male01_h1_b0',0),(6312,6312,'soga_appearances/ec/npc/ghost_soga_vl_young_male02_h2_b3',0),(6313,6313,'staticobjects/dpo_invisible_cube/dpo_invisible_cube_big',0),(6314,6314,'staticobjects/crystals/crystals_04',0),(6315,6315,'_exp03/characters/monsters/bone_golem',0),(6316,6316,'accessories/wearable_items/profesion_hats/guardian/guardian_01/head',0),(6317,6317,'soga_appearances/ec/npc/tc_soga_vl_young_female01_h1',0),(6318,6318,'soga_appearances/ec/npc/tc_soga_vl_young_female01_h3',0),(6319,6319,'soga_appearances/ec/npc/tc_soga_vl_young_female03',0),(6320,6320,'soga_appearances/ec/npc/tc_soga_vl_young_male01_h0_b1',0),(6321,6321,'soga_appearances/ec/npc/tc_soga_vl_young_male01_h0_b2',0),(6322,6322,'soga_appearances/ec/npc/tc_soga_vl_young_male01_h1_b0',0),(6323,6323,'soga_appearances/ec/npc/tc_soga_vl_young_male01_h2_b0',0),(6324,6324,'staticobjects/freeport/fprt_a04_floatingplatform01',0),(6325,6325,'accessories/wieldable_items/weapons/great_hammer/morning_star/morning_star01_2h',0),(6326,6326,'accessories/wearable_items/profesion_hats/jester/jester_01/head',0),(6327,6327,'staticobjects/liveevent/diamond_ring_april',0),(6328,6328,'_exp03/zones/objects/banners/sfm_kobold_banner01',0),(6329,6329,'_exp03/zones/objects/beds/sfm_bed_single01',0),(6330,6330,'_exp03/zones/objects/chairs/sfm_bench_ornate01',0),(6331,6331,'_exp03/zones/objects/chairs/sfm_bench_ornate01_long',0),(6332,6332,'_exp03/zones/objects/mechanical_parts/sfm_gear_panel01',0),(6333,6333,'_exp03/zones/objects/mechanical_parts/sfm_gear_panel02',0),(6334,6334,'_exp03/zones/objects/mechanical_parts/sfm_wrench01',0),(6335,6335,'_exp03/zones/objects/tables/sfm_table_wood01',0),(6336,6336,'_exp03/zones/objects/tables/sfm_table_woodround01',0),(6337,6337,'_exp03/zones/objects/tents/sf_tent_kobold01',0),(6338,6338,'staticobjects/doors/arch_iron_grid',0),(6339,6339,'accessories/wieldable_items/soga_weapons/fighter/blade_of_fist',0),(6340,6340,'accessories/wieldable_items/soga_weapons/fighter/calamity_of_sky',0),(6341,6341,'accessories/wieldable_items/soga_weapons/fighter/destroyer',0),(6342,6342,'accessories/wieldable_items/soga_weapons/fighter/invincibility_of_eight',0),(6343,6343,'accessories/wieldable_items/soga_weapons/fighter/sword_of_nova',0),(6344,6344,'accessories/wieldable_items/soga_weapons/fighter/sword_of_serpent',0),(6345,6345,'accessories/wieldable_items/soga_weapons/mage/staff_of_blackwind',0),(6346,6346,'accessories/wieldable_items/soga_weapons/mage/staff_of_bloody',0),(6347,6347,'accessories/wieldable_items/soga_weapons/mage/staff_of_creator',0),(6348,6348,'accessories/wieldable_items/soga_weapons/mage/staff_of_elemental',0),(6349,6349,'accessories/wieldable_items/soga_weapons/mage/staff_of_octahedral',0),(6350,6350,'accessories/wieldable_items/soga_weapons/mage/staff_of_phenix',0),(6351,6351,'accessories/wieldable_items/soga_weapons/priest/deadman_call',0),(6352,6352,'accessories/wieldable_items/soga_weapons/priest/eternal_flame',0),(6353,6353,'accessories/wieldable_items/soga_weapons/priest/massive_hammer',0),(6354,6354,'accessories/wieldable_items/soga_weapons/priest/seal_of_templar',0),(6355,6355,'accessories/wieldable_items/soga_weapons/priest/the_holy_spirit',0),(6356,6356,'accessories/wieldable_items/soga_weapons/priest/thunder_blade',0),(6357,6357,'accessories/wieldable_items/soga_weapons/scout/dragon_sharp',0),(6358,6358,'accessories/wieldable_items/soga_weapons/scout/great_shark',0),(6359,6359,'accessories/wieldable_items/soga_weapons/scout/misty_silver',0),(6360,6360,'accessories/wieldable_items/soga_weapons/scout/silver_moon',0),(6361,6361,'accessories/wieldable_items/soga_weapons/scout/traceless',0),(6362,6362,'accessories/wieldable_items/soga_weapons/scout/wannish_dream',0),(6363,6363,'accessories/wieldable_items/soga_weapons/unique4/decree_executor',0),(6364,6364,'accessories/wieldable_items/soga_weapons/unique4/demon_eye_black',0),(6365,6365,'accessories/wieldable_items/soga_weapons/unique4/demon_eye_red',0),(6366,6366,'accessories/wieldable_items/soga_weapons/unique4/dragon_flame',0),(6367,6367,'accessories/wieldable_items/soga_weapons/unique4/flame_of_truth',0),(6368,6368,'accessories/wearable_items/clothing/common_tint01/chest',0),(6369,6369,'accessories/wearable_items/clothing/common_tint01/legs',0),(6370,6370,'accessories/wearable_items/clothing/common_tint01/shoulders',0),(6371,6371,'ec/npc/curt_schilling',0),(6372,6372,'ec/npc/curt_schilling_helm',0),(6373,6373,'staticobjects/adv04/end_r143_int_obj_brazier01',0),(6374,6374,'staticobjects/adv04/furniture/objects_004_bottle',0),(6375,6375,'staticobjects/adv04/furniture/objects_008_bottle',0),(6376,6376,'staticobjects/adv04/furniture/objects_009_bottle',0),(6377,6377,'staticobjects/adv04/furniture/objects_bamboo_capboard',0),(6378,6378,'staticobjects/adv04/furniture/objects_bamboo_chair',0),(6379,6379,'staticobjects/adv04/furniture/objects_bed',0),(6380,6380,'staticobjects/adv04/furniture/objects_bed_2',0),(6381,6381,'staticobjects/adv04/furniture/objects_big_square_desk',0),(6382,6382,'staticobjects/adv04/furniture/objects_circledesk',0),(6383,6383,'staticobjects/adv04/furniture/objects_circledesk_chair',0),(6384,6384,'staticobjects/adv04/furniture/objects_cupboard02',0),(6385,6385,'staticobjects/adv04/furniture/objects_desk_lamp',0),(6386,6386,'staticobjects/adv04/furniture/objects_small_square_chair',0),(6387,6387,'staticobjects/adv04/furniture/objects_small_square_desk',0),(6388,6388,'staticobjects/adv04/furniture/objects_wood_capboard',0),(6389,6389,'staticobjects/adv04/furniture/potted_bonsai_1',0),(6390,6390,'staticobjects/adv04/furniture/potted_bonsai_2',0),(6391,6391,'ap04/adv04_rgn_mystic_lake/lake_obj_humanstatue_01',0),(6392,6392,'creatures/tu/livingstatue_tc',0),(6393,6393,'accessories/wieldable_items/weapons/talisman/orb/adv04_orb001_necromantic',0),(6394,6394,'staticobjects/traps/befallen_spikes_trap',0),(6395,6395,'staticobjects/traps/cmmn_orccatpult_weight',0),(6396,6396,'accessories/wearable_items/profesion_hats/bruiser/bruiser_01/head',0),(6397,6397,'accessories/wieldable_items/misc/bottle_invisibleman',0),(6398,6398,'staticobjects/walls/nektropos_basement',0),(6399,6399,'accessories/wieldable_items/weapons/exp03/1h_crush/exp03_1hc_elven_scepter_plain',0),(6400,6400,'accessories/wieldable_items/weapons/exp03/1h_crush/exp03_1hc_human_skull_scepter_plain',0),(6401,6401,'accessories/wieldable_items/weapons/exp03/1h_crush/exp03_1hc_ivy_shrouded_glowing_orb',0),(6402,6402,'accessories/wieldable_items/weapons/exp03/1h_crush/exp03_1hc_kama_plain',0),(6403,6403,'accessories/wieldable_items/weapons/exp03/1h_crush/exp03_1hc_long_plain_wand',0),(6404,6404,'accessories/wieldable_items/weapons/exp03/1h_crush/exp03_1hc_particle_battlehammer_plain',0),(6405,6405,'accessories/wieldable_items/weapons/exp03/1h_crush/exp03_1hc_zombie_arm_club_animated',0),(6406,6406,'accessories/wieldable_items/weapons/exp03/1h_crush/exp03_1hc_zombie_arm_club_plain',0),(6407,6407,'accessories/wieldable_items/weapons/exp03/1h_pierce/exp03_1hp_unicorn_horn_dagger_plain',0),(6408,6408,'accessories/wieldable_items/weapons/exp03/1h_pierce/exp03_1hp_vampiric_sacrificial_dagger',0),(6409,6409,'accessories/wieldable_items/weapons/exp03/1h_sword/exp03_1hs_orc_machete_plain',0),(6410,6410,'accessories/wieldable_items/weapons/exp03/1h_sword/exp03_1hs_ornate_elven_rapier',0),(6411,6411,'accessories/wieldable_items/weapons/exp03/1h_sword/exp03_1hs_wakizashi_plain',0),(6412,6412,'accessories/wieldable_items/weapons/exp03/2h_sword/exp03_2hs_bugbear_rock_club',0),(6413,6413,'accessories/wieldable_items/weapons/exp03/2h_sword/exp03_2hs_bugbear_rock_sword',0),(6414,6414,'accessories/wieldable_items/weapons/exp03/bow/exp03_bow_giant_wooden_bow',0),(6415,6415,'accessories/wieldable_items/shields/exp03/exp03_diamond_shaped_round_shield_plain',0),(6416,6416,'accessories/wieldable_items/shields/exp03/exp03_high_elven_kite_shield_plain',0),(6417,6417,'staticobjects/liveevent/exp03/dpo_fear_gate',0),(6418,6418,'accessories/wieldable_items/weapons/exp03/1h_crush/exp03_1hc_wooden_vine_scepter_plain',0),(6419,6419,'staticobjects/containers/floor_vase_human_qey_lovingcup01',0),(6420,6420,'staticobjects/containers/floor_vase_human_marbleblack_med02',0),(6421,6421,'staticobjects/containers/floor_vase_human_obsidian_med01',0),(6422,6422,'staticobjects/chairs/floor_chair_solro_chair01',0),(6423,6423,'staticobjects/chairs/floor_chair_solro_chair02_wide',0),(6424,6424,'staticobjects/chests/floor_chest_orc_treasurechest01',0),(6425,6425,'staticobjects/torches/floor_torch_solro_tabletorch01',0),(6426,6426,'staticobjects/tables/floor_table_solro_square01',0),(6427,6427,'staticobjects/tables/floor_table_solro_long01',0),(6428,6428,'staticobjects/tables/floor_table_befallen_round01',0),(6429,6429,'staticobjects/chairs/floor_chair_befallen_office01',0),(6430,6430,'staticobjects/dressers/floor_closet_befallen_02',0),(6431,6431,'staticobjects/dressers/floor_armoire_befallen_01',0),(6432,6432,'staticobjects/beds/floor_bed_befallen_lord01',0),(6433,6433,'staticobjects/dressers/floor_closet_befallen_01',0),(6434,6434,'staticobjects/tables/floor_table_befallen_office01',0),(6435,6435,'staticobjects/tables/floor_table_befallen_square01',0),(6436,6436,'accessories/wieldable_items/soga_weapons/scout/dragon_sharp_magic_poison',0),(6437,6437,'accessories/wieldable_items/soga_weapons/scout/wannish_dream_smoking',0),(6438,6438,'accessories/wieldable_items/soga_weapons/fighter/invincibility_of_eight_magic_ninja',0),(6439,6439,'accessories/wieldable_items/soga_weapons/fighter/calamity_of_sky_magic',0),(6440,6440,'accessories/wieldable_items/soga_weapons/scout/silver_moon_magic_poison',0),(6441,6441,'creatures/tu/gelatinouscube_crate',0),(6442,6442,'staticobjects/liveevent/exp03/life_statue',0),(6443,6443,'staticobjects/liveevent/exp03/valor_statue',0),(6444,6444,'staticobjects/gravestones/gravestone12',0),(6445,6445,'creatures/monsters/dervish_stone',0),(6446,6446,'_exp03/characters/tool_users/clockwork_protector',0),(6447,6447,'_exp03/characters/tool_users/clockwork_soldier',0),(6448,6448,'_exp03/characters/tool_users/kobold_caster_base',0),(6449,6449,'_exp03/characters/tool_users/kobold_caster_hyena',0),(6450,6450,'_exp03/characters/tool_users/kobold_caster_leopard',0),(6451,6451,'_exp03/characters/tool_users/kobold_chieftan',0),(6452,6452,'_exp03/characters/tool_users/kobold_soldier_base',0),(6453,6453,'_exp03/characters/tool_users/kobold_soldier_hyena',0),(6454,6454,'_exp03/characters/tool_users/kobold_soldier_leopard',0),(6455,6455,'_exp03/characters/tool_users/kobold_woker_base',0),(6456,6456,'_exp03/characters/tool_users/kobold_woker_hyena',0),(6457,6457,'_exp03/characters/tool_users/kobold_woker_leopard',0),(6458,6458,'accessories/wieldable_items/weapons/exp03/1h_crush/exp03_1hc_wrench01',0),(6459,6459,'ec/pc/fae_wings/fae_wing01_t',0),(6460,6460,'ec/pc/fae_wings/fae_wing02_t',0),(6461,6461,'ec/pc/fae_wings/fae_wing03_t',0),(6462,6462,'ec/pc/fae_wings/fae_wing04_t',0),(6463,6463,'ec/pc/fae_wings/fae_wing05_t',0),(6464,6464,'ec/pc/fae_wings/fae_wing06_t',0),(6465,6465,'ec/pc/fae_wings/fae_wing07_t',0),(6466,6466,'ec/pc/fae_wings/fae_wing08_t',0),(6467,6467,'ec/pc/fae_wings/fae_wing09_t',0),(6468,6468,'ec/pc/fae_wings/fae_wing10_t',0),(6469,6469,'accessories/wearable_items/cloak/exp03/cloak_sq_01',0),(6470,6470,'staticobjects/doors/df_jaildoor01',0),(6471,6471,'staticobjects/crates/floor_crate05_any_wood',0),(6472,6472,'staticobjects/shop/floor_display_any_bags01',0),(6473,6473,'accessories/wearable_items/profesion_hats/assassin/assassin_01/head',0),(6474,6474,'staticobjects/gong/ogr_gong001',0),(6475,6475,'staticobjects/lighting/wall_walllamp_darkelf_ornate01_tradeskill',0),(6476,6476,'accessories/wearable_items/cloak/exp03/cloak_di_01',0),(6477,6477,'accessories/wearable_items/cloak/exp03/cloak_dt_01',0),(6478,6478,'staticobjects/switches/door_switchfloor1',0),(6479,6479,'staticobjects/switches/door_switchfloor01_handle',0),(6480,6480,'staticobjects/switches/door_switchwall01',0),(6481,6481,'staticobjects/switches/door_switchwall01_handle',0),(6482,6482,'accessories/wearable_items/_exp08/dragon_armor/leather1_blue/shoulders',1096),(6483,6483,'accessories/wieldable_items/weapons/exp03/1h_sword/exp03_1hs_soulfire',0),(6484,6484,'staticobjects/adv04/furniture/objects_wood_capboard_dpo',0),(6485,6485,'ec/pc/fae_silvani/fae_silvani',0),(6486,6486,'ec/pc/fae/fae_dark_female',0),(6487,6487,'ec/pc/fae/fae_dark_male',0),(6488,6488,'ec/pc/fae/fae_light_female',0),(6489,6489,'ec/pc/fae/fae_light_male',0),(6490,6490,'_exp03/characters/tool_users/vampire_greater/vampire_greater_male01',0),(6491,6491,'_exp03/characters/tool_users/vampire_greater/vampire_greater_male02',0),(6492,6492,'accessories/wearable_items/profesion_hats/evil_helm/evil_helm_01/head',0),(6493,6493,'_exp03/zones/objects/weapon_rack/cbk_weapon_rack_floor02',0),(6494,6494,'_exp03/zones/objects/weapon_rack/cbk_weapon_rack_floor02_blue',0),(6495,6495,'_exp03/zones/objects/weapon_rack/cbk_weapon_rack_floor',0),(6496,6496,'_exp03/zones/objects/weapon_rack/cbk_weapon_rack_floor_blue',0),(6497,6497,'_exp03/zones/objects/rubbish/cbk_rubbish_muckbones01',0),(6498,6498,'_exp03/zones/objects/rubbish/cbk_rubbish_muckbones02',0),(6499,6499,'_exp03/zones/objects/tables/cbk_table_small01',0),(6500,6500,'_exp03/zones/objects/tables/cbk_table_small01_blue',0),(6501,6501,'_exp03/zones/objects/tables/cbk_table_long',0),(6502,6502,'_exp03/zones/objects/tables/cbk_table_long_blue',0),(6503,6503,'_exp03/zones/objects/chests/cbk_chest_metal01',0),(6504,6504,'_exp03/zones/objects/chests/cbk_chest_metal02',0),(6505,6505,'_exp03/zones/objects/chests/cbk_trunk_shoddy',0),(6506,6506,'_exp03/zones/objects/weapon_rack/cbk_weaponsrack_wall01',0),(6507,6507,'_exp03/zones/objects/weapon_rack/cbk_weaponsrack_wall01_blue',0),(6508,6508,'_exp03/zones/objects/weapon_rack/cbk_weaponsrack_wall02',0),(6509,6509,'_exp03/zones/objects/weapon_rack/cbk_weaponsrack_wall02_blue',0),(6510,6510,'_exp03/zones/objects/bookcases/cbk_bookcase01',0),(6511,6511,'_exp03/zones/objects/bookcases/cbk_bookcase02',0),(6512,6512,'_exp03/zones/objects/bookcases/cbk_potionsack',0),(6513,6513,'_exp03/zones/objects/chairs/cbk_chair01',0),(6514,6514,'_exp03/zones/objects/chairs/cbk_chair01_blue',0),(6515,6515,'accessories/wieldable_items/misc/pillow_invisibleman',0),(6516,6516,'_exp03/characters/tool_users/goblin_aqua_exp03',0),(6517,6517,'_exp03/zones/exp03_dun_klakanon/recharging_station',0),(6518,6518,'_exp03/zones/exp03_rgn_greater_faydark/gf_rock_medium02',0),(6519,6519,'accessories/wieldable_items/weapons/hammer/fighting_stick/fighting_stick_capped_flaming',0),(6520,6520,'_exp03/characters/tool_users/vampire_greater/vampire_greater_female01',0),(6521,6521,'_exp03/characters/tool_users/vampire_greater/vampire_greater_female02',0),(6522,6522,'_exp03/zones/exp03_dun_klakanon/recharging_station_cm',0),(6523,6523,'accessories/wieldable_items/weapons/hammer/wine_bottle/winebottle01_blue',0),(6524,6524,'_exp03/characters/monsters/clockwork_worker',0),(6525,6525,'_exp03/characters/tool_users/myrdal_chieftain',0),(6526,6526,'_exp03/characters/tool_users/myrdal_mystic',0),(6527,6527,'_exp03/characters/tool_users/myrdal_warrior',0),(6528,6528,'_exp03/characters/tool_users/myrdal_worker',0),(6529,6529,'_exp03/characters/monsters/fairy_drake',0),(6530,6530,'_exp03/zones/objects/switches/klakanon_large_switch_base',0),(6531,6531,'_exp03/zones/objects/switches/klakanon_large_switch_lever',0),(6532,6532,'_exp03/zones/objects/switches/klakanon_small_switch_base',0),(6533,6533,'_exp03/zones/objects/switches/klakanon_small_switch_lever',0),(6534,6534,'projectiles/spell_electric_ball_eyepoint',0),(6535,6535,'_exp03/characters/monsters/clockwork_dustpan',0),(6536,6536,'_exp03/characters/monsters/fairy_drake01',0),(6537,6537,'_exp03/characters/tool_users/vampire_greater/mayong_mistmoore',0),(6538,6538,'_exp03/characters/tool_users/satyr',0),(6539,6539,'_exp03/characters/tool_users/satyr01',0),(6540,6540,'_exp03/characters/monsters/rumbler_shambler',0),(6541,6541,'accessories/wieldable_items/weapons/great_sword/dragon_katana/exp03_dragon_katana_plain_mist',0),(6542,6542,'accessories/wieldable_items/weapons/exp03/1h_sword/exp03_1h_orc_machete_maestro',0),(6543,6543,'accessories/wieldable_items/weapons/exp03/1h_sword/exp03_1hs_wakizashi_plain_cyphermist',0),(6544,6544,'_exp03/zones/objects/idols/kal_idol_kobold_sitting',0),(6545,6545,'_exp03/zones/objects/idols/kal_idol_kobold_standing',0),(6546,6546,'_exp03/zones/objects/door/kal_obj_hatch01',0),(6547,6547,'accessories/wieldable_items/weapons/exp03/1h_crush/exp03_1hc_massive_hammer_miststrike',0),(6548,6548,'accessories/wieldable_items/weapons/exp03/1h_crush/exp03_1hc_staff_of_elemental_fiery',0),(6549,6549,'accessories/wieldable_items/weapons/exp03/talisman/exp03_book_ornate_penta',0),(6550,6550,'accessories/wearable_items/_exp03/chain_heroic_pristine/chest',0),(6551,6551,'accessories/wearable_items/_exp03/chain_heroic_pristine/feet',0),(6552,6552,'accessories/wearable_items/_exp03/chain_heroic_pristine/forearms',0),(6553,6553,'accessories/wearable_items/_exp03/chain_heroic_pristine/hands',0),(6554,6554,'accessories/wearable_items/_exp03/chain_heroic_pristine/head',0),(6555,6555,'accessories/wearable_items/_exp03/chain_heroic_pristine/legs',0),(6556,6556,'accessories/wearable_items/_exp03/chain_heroic_pristine/legs_noskirt',0),(6557,6557,'accessories/wearable_items/_exp03/chain_heroic_pristine/shoulders',0),(6558,6558,'accessories/wearable_items/_exp03/chain_heroic_pristine/skirt',0),(6559,6559,'_exp03/zones/objects/altar/kal_altar_paladin',0),(6560,6560,'accessories/wieldable_items/shields/exp03/exp03_high_elven_kite_shield_defender',0),(6561,6561,'accessories/wearable_items/_exp03/faydark_leather_01/chest',0),(6562,6562,'accessories/wearable_items/_exp03/faydark_leather_01/feet',0),(6563,6563,'accessories/wearable_items/_exp03/faydark_leather_01/forearms',0),(6564,6564,'accessories/wearable_items/_exp03/faydark_leather_01/hands',0),(6565,6565,'accessories/wearable_items/_exp03/faydark_leather_01/head',0),(6566,6566,'accessories/wearable_items/_exp03/faydark_leather_01/legs',0),(6567,6567,'accessories/wearable_items/_exp03/faydark_leather_01/legs_noskirt',0),(6568,6568,'accessories/wearable_items/_exp03/faydark_leather_01/shoulders',0),(6569,6569,'accessories/wearable_items/_exp03/faydark_leather_01/skirt',0),(6570,6570,'_exp03/zones/objects/greater_faydark/lightsources/gf_lightsource_lamppost03',0),(6571,6571,'_exp03/zones/objects/lesser_faydark/lightsources/lf_lightsource_nybright_torch01',0),(6572,6572,'_exp03/zones/objects/lesser_faydark/tents/lf_satyr_tent01',0),(6573,6573,'_exp03/zones/objects/lesser_faydark/tents/lf_satyr_wall_tent01',0),(6574,6574,'_exp03/zones/objects/banners/gf_crushbone_post01',0),(6575,6575,'_exp03/zones/objects/firepits/gf_firepit_bugbear01',0),(6576,6576,'_exp03/zones/objects/lesser_faydark/tents/lf_tent_nybright01',0),(6577,6577,'staticobjects/halloween/le_jackolantern01',0),(6578,6578,'staticobjects/halloween/le_jackolantern02',0),(6579,6579,'staticobjects/halloween/le_jackolantern03',0),(6580,6580,'_exp03/zones/objects/kelethin/tents/kel_fae_tent_merchant01',0),(6581,6581,'_exp03/zones/objects/kelethin/tents/kel_fae_tent_merchant02',0),(6582,6582,'_exp03/zones/objects/kelethin/forge/kel_fae_forge01',0),(6583,6583,'_exp03/zones/objects/kelethin/containers/kel_container_basket02',0),(6584,6584,'_exp03/zones/objects/kelethin/containers/kel_container_basket03',0),(6585,6585,'_exp03/zones/objects/kelethin/banners/kel_banner_standing_sylvanhunters01',0),(6586,6586,'_exp03/zones/objects/kelethin/banners/kel_banner_post',0),(6587,6587,'_exp03/zones/objects/kelethin/banners/kel_banner_scout01',0),(6588,6588,'_exp02/zones/objects/eggs/sos_dragoneggs_broken_pink',0),(6589,6589,'_exp02/zones/objects/eggs/sos_dragoneggs_broken_purple',0),(6590,6590,'_exp02/zones/objects/eggs/sos_dragoneggs_unbroken_blue',0),(6591,6591,'_exp02/zones/objects/eggs/sos_dragoneggs_unbroken_pink',0),(6592,6592,'_exp02/zones/objects/eggs/sos_dragoneggs_mixed_purple',0),(6593,6593,'_exp03/zones/regions/greater_faydark/gf_flora/gf_flora_mushroom_huge03',0),(6594,6594,'_exp03/zones/objects/lesser_faydark/lightsources/lf_lightsource_monk_torch_withbase01',0),(6595,6595,'staticobjects/tree/tree_pine_jagged01',0),(6596,6596,'_exp03/zones/regions/lesser_faydark/lf_flora/lf_flora_mushroom_bent02',0),(6597,6597,'_exp03/zones/regions/lesser_faydark/lf_flora/lf_flora_mushroom_bent01',0),(6598,6598,'projectiles/exp03/pumpkin_flaming',0),(6599,6599,'accessories/wieldable_items/soga_weapons/mage/dpo_housing/staff_of_creator_dpo',0),(6600,6600,'_exp03/zones/objects/emerald_halls/eh_flora_wuoshi_victim02',0),(6601,6601,'_exp03/zones/objects/firepits/cbk_lightsource_firepot_small01',0),(6602,6602,'_exp03/zones/objects/signs/lp_roadsign_post01',0),(6603,6603,'_exp03/zones/objects/signs/lp_roadsign_post_double01',0),(6604,6604,'_exp03/zones/objects/signs/lp_roadsign_post_doubleangle01',0),(6605,6605,'_exp03/zones/objects/signs/lp_roadsign_post_triple01',0),(6606,6606,'_exp03/zones/objects/signs/lp_roadsign_sign01',0),(6607,6607,'_exp03/zones/objects/signs/lp_roadsign_sign02',0),(6608,6608,'accessories/wearable_items/_exp08/dragon_armor/leather1_blue/shoulders_epic',1096),(6609,6609,'accessories/wearable_items/_exp08/dragon_armor/leather1_green/skirt',1096),(6610,6610,'accessories/wieldable_items/weapons/exp03/bostaff/exp03_bws_tribal_spear_frost',0),(6611,6611,'_exp03/characters/tool_users/vampire_greater/vampire_greater_armored_female01',0),(6612,6612,'_exp03/characters/tool_users/vampire_greater/vampire_greater_armored_male01',0),(6613,6613,'_exp03/characters/monsters/wuoshi',0),(6614,6614,'accessories/wieldable_items/weapons/exp03/pike/exp03_pke_elven_wizard_staff',0),(6615,6615,'accessories/wieldable_items/weapons/exp03/pike/exp03_pke_elven_wizard_staff_princess',0),(6616,6616,'accessories/wieldable_items/weapons/exp03/bow/exp03_bow_wannish_dreams_raincaller',0),(6617,6617,'_exp03/zones/exp03_dun_klakanon_epic02_court/power_cell',0),(6618,6618,'_exp03/zones/objects/mechanical_parts/clockwork_gear',0),(6619,6619,'accessories/wieldable_items/shields/exp03/exp03_gnomish_shield',0),(6620,6620,'accessories/wieldable_items/shields/exp03/exp03_mistmoore_shield',0),(6621,6621,'accessories/wieldable_items/shields/exp03/exp03_orc_round_shield',0),(6622,6622,'accessories/wieldable_items/shields/exp03/exp03_small_held_symbol',0),(6623,6623,'accessories/wieldable_items/shields/exp03/exp03_small_held_symbol_blue',0),(6624,6624,'accessories/wieldable_items/shields/exp03/exp03_small_held_symbol_gold',0),(6625,6625,'accessories/wieldable_items/shields/exp03/exp03_small_held_symbol_green',0),(6626,6626,'accessories/wieldable_items/shields/exp03/exp03_small_held_symbol_red',0),(6627,6627,'accessories/wieldable_items/shields/exp03/exp03_small_held_symbol_violet',0),(6628,6628,'accessories/wieldable_items/shields/exp03/exp03_small_held_symbol_white',0),(6629,6629,'accessories/wearable_items/_exp03/kaladim_chain_01/chest',0),(6630,6630,'accessories/wearable_items/_exp03/kaladim_chain_01/feet',0),(6631,6631,'accessories/wearable_items/_exp03/kaladim_chain_01/forearms',0),(6632,6632,'accessories/wearable_items/_exp03/kaladim_chain_01/hands',0),(6633,6633,'accessories/wearable_items/_exp03/kaladim_chain_01/head',0),(6634,6634,'accessories/wearable_items/_exp03/kaladim_chain_01/legs',0),(6635,6635,'accessories/wearable_items/_exp03/kaladim_chain_01/legs_noskirt',0),(6636,6636,'accessories/wearable_items/_exp03/kaladim_chain_01/shoulders',0),(6637,6637,'accessories/wearable_items/_exp03/kaladim_chain_01/skirt',0),(6638,6638,'accessories/wieldable_items/weapons/staff/bo_staff/bo_staff002_ornate_fiery',0),(6639,6639,'accessories/wieldable_items/shields/exp03/exp03_fae_buckler',0),(6640,6640,'accessories/wearable_items/_exp03/kaladim_vanguard_01/chest',0),(6641,6641,'accessories/wearable_items/_exp03/kaladim_vanguard_01/feet',0),(6642,6642,'accessories/wearable_items/_exp03/kaladim_vanguard_01/forearms',0),(6643,6643,'accessories/wearable_items/_exp03/kaladim_vanguard_01/hands',0),(6644,6644,'accessories/wearable_items/_exp03/kaladim_vanguard_01/head',0),(6645,6645,'accessories/wearable_items/_exp03/kaladim_vanguard_01/legs',0),(6646,6646,'accessories/wearable_items/_exp03/kaladim_vanguard_01/legs_noskirt',0),(6647,6647,'accessories/wearable_items/_exp03/kaladim_vanguard_01/right',0),(6648,6648,'accessories/wearable_items/_exp03/kaladim_vanguard_01/shoulders',0),(6649,6649,'accessories/wearable_items/_exp03/kaladim_vanguard_01/shoulders_nopauldrons',0),(6650,6650,'accessories/wearable_items/_exp03/kaladim_vanguard_01/skirt',0),(6651,6651,'_exp03/zones/objects/mechanical_parts/clockwork_gear2',0),(6652,6652,'staticobjects/liveevent/exp03/dpo_houseitem_solusekro',0),(6653,6653,'staticobjects/dock_items/fprt_hood_fish01',0),(6654,6654,'staticobjects/dock_items/fprt_hood_fish_bucket01',0),(6655,6655,'accessories/wieldable_items/shields/exp03/exp03_decaying_tower_shield',0),(6656,6656,'_exp03/zones/objects/kelethin/dresser/kel_dresser01',0),(6657,6657,'staticobjects/papers/hanging_clipboard',0),(6658,6658,'accessories/wieldable_items/weapons/exp03/bostaff/exp03_bws_elven_wizard_staff',0),(6659,6659,'accessories/wearable_items/_exp03/faydark_robe_01/chest',0),(6660,6660,'accessories/wearable_items/_exp03/faydark_robe_01/hood',0),(6661,6661,'accessories/wearable_items/_exp03/faydark_robe_01/pants',0),(6662,6662,'accessories/wearable_items/_exp03/faydark_robe_01/skirt',0),(6663,6663,'_exp03/characters/monsters/mcp',0),(6664,6664,'_exp03/zones/regions/greater_faydark/gf_door/gf_door_rock_frame01',0),(6665,6665,'_exp03/zones/regions/greater_faydark/gf_door/gf_door_wood_door01',0),(6666,6666,'_exp03/zones/regions/greater_faydark/gf_door/gf_door_wood_frame01',0),(6667,6667,'_exp03/zones/objects/idols/holy_symbol_nature001',0),(6668,6668,'staticobjects/halloween/lavastorm_fire_bridge',0),(6669,6669,'_exp03/characters/tool_users/clockwork_gnome_female',0),(6670,6670,'_exp03/characters/tool_users/clockwork_gnome_male',0),(6671,6671,'accessories/wearable_items/_exp08/dragon_armor/leather1_green/chest',1096),(6672,6672,'accessories/wearable_items/halloween_masks/nightblood_mask/head',0),(6673,6673,'creatures/mounts/hover_pad',0),(6674,6674,'staticobjects/eig/exp03_eig_harvest_location_rare',0),(6675,6675,'staticobjects/doors/qey_ph_int_5r01_rm06_door01',0),(6676,6676,'accessories/wearable_items/halloween_masks/arrow_mask/head',0),(6677,6677,'accessories/wieldable_items/weapons/exp03/pike/exp03_pik_solusekro',0),(6678,6678,'accessories/wearable_items/halloween_masks/amygdalan_mask/head',0),(6679,6679,'_exp03/characters/monsters/clockwork_spider',0),(6680,6680,'_exp03/zones/regions/steamfont_mountains/sfm_epic01/sfm_epic01_mainroom_bridge01',0),(6681,6681,'_exp03/zones/regions/steamfont_mountains/sfm_epic01/sfm_epic01_mainroom_bridge02',0),(6682,6682,'_exp03/zones/regions/steamfont_mountains/sfm_epic01/sfm_epic01_mainroom_bridge03',0),(6683,6683,'accessories/wearable_items/cloak/exp03/cloak_sq_02',0),(6684,6684,'staticobjects/liveevent/halloween/cazic_bonefetisha001',0),(6685,6685,'staticobjects/liveevent/halloween/cazic_bonefetishb001',0),(6686,6686,'staticobjects/liveevent/halloween/cazic_bonefetishc001',0),(6687,6687,'_exp03/zones/objects/tents/gf_tent_fprtexile_red01',0),(6688,6688,'_exp03/zones/objects/tents/gf_tent_fprtexile_yellow01',0),(6689,6689,'_exp03/zones/objects/kaladim/barricade/kal_barricade_dwarf01',0),(6690,6690,'_exp03/zones/objects/kaladim/chairs/kal_chair_dwarf',0),(6691,6691,'_exp03/zones/objects/kaladim/chairs/kal_stool_dwarf',0),(6692,6692,'_exp03/zones/objects/kaladim/stein/kal_stein_dwarf01',0),(6693,6693,'_exp03/zones/objects/kaladim/tables/kal_table_dwarf_large',0),(6694,6694,'_exp03/zones/objects/kaladim/tables/kal_table_dwarf_sm',0),(6695,6695,'_exp03/zones/objects/kaladim/throne/kal_throne_dwarf',0),(6696,6696,'_exp03/zones/objects/kaladim/bookcases/bbm_bookcase_dwarf01',0),(6697,6697,'_exp03/zones/objects/kaladim/chests/bbm_crate_wood01',0),(6698,6698,'_exp03/zones/objects/kaladim/chests/bbm_crate_wood02',0),(6699,6699,'_exp03/zones/objects/kaladim/doors/kal_obj_door_static01',0),(6700,6700,'_exp03/zones/objects/kaladim/signs/kal_obj_sign01',0),(6701,6701,'_exp03/zones/objects/kaladim/doors/kal_obj_stormguard_door_solid01',0),(6702,6702,'_exp03/zones/objects/kaladim/doors/kal_obj_stormguard_doorframe_solid01',0),(6703,6703,'_exp03/zones/objects/kaladim/pillars/kal_obj_wallbrace01',0),(6704,6704,'accessories/wieldable_items/weapons/exp03/2h_sword/exp03_2hs_mithanielmarr',0),(6705,6705,'staticobjects/halloween/halloween_greenblack_candles01',0),(6706,6706,'staticobjects/halloween/halloween_orangeblack_candles01',0),(6707,6707,'_exp03/characters/monsters/bugbear_mystic',0),(6708,6708,'accessories/wieldable_items/weapons/exp03/npc_only/bugbear_mystic_staff',0),(6709,6709,'staticobjects/bucket/orc_bucket_full_meat001',0),(6710,6710,'_exp03/zones/objects/food_items/mc_meat_piece',0),(6711,6711,'_exp03/characters/tool_users/honor_elf/honor_elf_female',0),(6712,6712,'_exp03/characters/tool_users/honor_elf/honor_elf_male',0),(6713,6713,'accessories/wearable_items/_exp03/kaladim_bruiser_gi_01/chest',0),(6714,6714,'accessories/wearable_items/_exp03/kaladim_bruiser_gi_01/pants',0),(6715,6715,'accessories/wearable_items/_exp03/kaladim_bruiser_gi_01/shoulders',0),(6716,6716,'creatures/tu/gods_brell_serilis',0),(6717,6717,'creatures/tu/gods_innoruuk',0),(6718,6718,'creatures/tu/gods_mithaniel_marr',0),(6719,6719,'creatures/tu/gods_quellious',0),(6720,6720,'creatures/tu/gods_rallos_zek',0),(6721,6721,'creatures/tu/gods_solusek_ro',0),(6722,6722,'creatures/tu/gods_tunare',0),(6723,6723,'_exp03/zones/objects/greater_faydark/roadsigns/gf_roadsign_post',0),(6724,6724,'_exp03/zones/objects/greater_faydark/roadsigns/gf_roadsign01',0),(6725,6725,'accessories/wieldable_items/weapons/exp03/2h_sword/exp03_2hs_ralloszek',0),(6726,6726,'_exp03/characters/tool_users/skeleton_marble/exp03_marble_skeleton_bishop',0),(6727,6727,'_exp03/characters/tool_users/skeleton_marble/exp03_marble_skeleton_king',0),(6728,6728,'_exp03/characters/tool_users/skeleton_marble/exp03_marble_skeleton_knight',0),(6729,6729,'_exp03/characters/tool_users/skeleton_marble/exp03_marble_skeleton_pawn',0),(6730,6730,'_exp03/characters/tool_users/skeleton_marble/exp03_marble_skeleton_queen',0),(6731,6731,'_exp03/characters/tool_users/skeleton_marble/exp03_marble_skeleton_rook',0),(6732,6732,'accessories/wearable_items/_exp03/faydark_plate_01/chest',0),(6733,6733,'accessories/wearable_items/_exp03/faydark_plate_01/feet',0),(6734,6734,'accessories/wearable_items/_exp03/faydark_plate_01/forearms',0),(6735,6735,'accessories/wearable_items/_exp03/faydark_plate_01/hands',0),(6736,6736,'accessories/wearable_items/_exp03/faydark_plate_01/head',0),(6737,6737,'accessories/wearable_items/_exp03/faydark_plate_01/legs',0),(6738,6738,'accessories/wearable_items/_exp03/faydark_plate_01/shoulders',0),(6739,6739,'accessories/wearable_items/_exp03/mistmoore_brigandine_01/chest',0),(6740,6740,'accessories/wearable_items/_exp03/mistmoore_brigandine_01/feet',0),(6741,6741,'accessories/wearable_items/_exp03/mistmoore_brigandine_01/forearms',0),(6742,6742,'accessories/wearable_items/_exp03/mistmoore_brigandine_01/hands',0),(6743,6743,'accessories/wearable_items/_exp03/mistmoore_brigandine_01/head',0),(6744,6744,'accessories/wearable_items/_exp03/mistmoore_brigandine_01/legs',0),(6745,6745,'accessories/wearable_items/_exp03/mistmoore_brigandine_01/shoulders',0),(6746,6746,'accessories/wearable_items/_exp03/mistmoore_chain_01/chest',0),(6747,6747,'accessories/wearable_items/_exp03/mistmoore_chain_01/feet',0),(6748,6748,'accessories/wearable_items/_exp03/mistmoore_chain_01/forearms',0),(6749,6749,'accessories/wearable_items/_exp03/mistmoore_chain_01/hands',0),(6750,6750,'accessories/wearable_items/_exp03/mistmoore_chain_01/head',0),(6751,6751,'accessories/wearable_items/_exp03/mistmoore_chain_01/legs',0),(6752,6752,'accessories/wearable_items/_exp03/mistmoore_chain_01/legs_noskirt',0),(6753,6753,'accessories/wearable_items/_exp03/mistmoore_chain_01/shoulders',0),(6754,6754,'accessories/wearable_items/_exp03/mistmoore_chain_01/skirt',0),(6755,6755,'accessories/wearable_items/_exp03/mistmoore_heavy_cloth_01/chest',0),(6756,6756,'accessories/wearable_items/_exp03/mistmoore_heavy_cloth_01/feet',0),(6757,6757,'accessories/wearable_items/_exp03/mistmoore_heavy_cloth_01/forearms',0),(6758,6758,'accessories/wearable_items/_exp03/mistmoore_heavy_cloth_01/hands',0),(6759,6759,'accessories/wearable_items/_exp08/dragon_armor/leather1_green/feet',1096),(6760,6760,'accessories/wearable_items/_exp03/mistmoore_heavy_cloth_01/legs',0),(6761,6761,'accessories/wearable_items/_exp03/mistmoore_heavy_cloth_01/legs_noskirt',0),(6762,6762,'accessories/wearable_items/_exp03/mistmoore_heavy_cloth_01/shoulders',0),(6763,6763,'accessories/wearable_items/_exp03/mistmoore_heavy_cloth_01/skirt',0),(6764,6764,'accessories/wearable_items/_exp03/mistmoore_leather_01/chest',0),(6765,6765,'accessories/wearable_items/_exp03/mistmoore_leather_01/feet',0),(6766,6766,'accessories/wearable_items/_exp03/mistmoore_leather_01/forearms',0),(6767,6767,'accessories/wearable_items/_exp03/mistmoore_leather_01/hands',0),(6768,6768,'accessories/wearable_items/_exp03/mistmoore_leather_01/head',0),(6769,6769,'accessories/wearable_items/_exp03/mistmoore_leather_01/legs',0),(6770,6770,'accessories/wearable_items/_exp03/mistmoore_leather_01/legs_noskirt',0),(6771,6771,'accessories/wearable_items/_exp03/mistmoore_leather_01/shoulders',0),(6772,6772,'accessories/wearable_items/_exp03/mistmoore_leather_01/skirt',0),(6773,6773,'accessories/wearable_items/_exp03/mistmoore_plate_01/chest',0),(6774,6774,'accessories/wearable_items/_exp03/mistmoore_plate_01/feet',0),(6775,6775,'accessories/wearable_items/_exp03/mistmoore_plate_01/forearms',0),(6776,6776,'accessories/wearable_items/_exp03/mistmoore_plate_01/hands',0),(6777,6777,'accessories/wearable_items/_exp03/mistmoore_plate_01/head',0),(6778,6778,'accessories/wearable_items/_exp03/mistmoore_plate_01/legs',0),(6779,6779,'accessories/wearable_items/_exp03/mistmoore_plate_01/shoulders',0),(6780,6780,'accessories/wearable_items/_exp03/mistmoore_robe_01/chest',0),(6781,6781,'accessories/wearable_items/_exp03/mistmoore_robe_01/hood',0),(6782,6782,'accessories/wearable_items/_exp03/mistmoore_robe_01/pants',0),(6783,6783,'accessories/wearable_items/_exp03/mistmoore_robe_01/skirt',0),(6784,6784,'accessories/wearable_items/_exp03/mistmoore_vanguard_01/chest',0),(6785,6785,'accessories/wearable_items/_exp03/mistmoore_vanguard_01/feet',0),(6786,6786,'accessories/wearable_items/_exp03/mistmoore_vanguard_01/forearms',0),(6787,6787,'accessories/wearable_items/_exp03/mistmoore_vanguard_01/hands',0),(6788,6788,'accessories/wearable_items/_exp03/mistmoore_vanguard_01/head',0),(6789,6789,'accessories/wearable_items/_exp03/mistmoore_vanguard_01/legs',0),(6790,6790,'accessories/wearable_items/_exp03/mistmoore_vanguard_01/legs_noskirt',0),(6791,6791,'accessories/wearable_items/_exp03/mistmoore_vanguard_01/right',0),(6792,6792,'accessories/wearable_items/_exp03/mistmoore_vanguard_01/shoulders',0),(6793,6793,'accessories/wearable_items/_exp03/mistmoore_vanguard_01/shoulders_nopauldrons',0),(6794,6794,'accessories/wearable_items/_exp03/mistmoore_vanguard_01/skirt',0),(6795,6795,'accessories/wearable_items/_exp03/mistmoore_woven_01/chest',0),(6796,6796,'accessories/wearable_items/_exp03/mistmoore_woven_01/feet',0),(6797,6797,'accessories/wearable_items/_exp03/mistmoore_woven_01/forearms',0),(6798,6798,'accessories/wearable_items/_exp03/mistmoore_woven_01/hands',0),(6799,6799,'accessories/wearable_items/_exp03/mistmoore_woven_01/head',0),(6800,6800,'accessories/wearable_items/_exp03/mistmoore_woven_01/legs',0),(6801,6801,'accessories/wearable_items/_exp03/mistmoore_woven_01/legs_noskirt',0),(6802,6802,'accessories/wearable_items/_exp03/mistmoore_woven_01/shoulders',0),(6803,6803,'accessories/wearable_items/_exp03/mistmoore_woven_01/skirt',0),(6804,6804,'accessories/wearable_items/_exp03/faydark_chain_01/chest',0),(6805,6805,'accessories/wearable_items/_exp03/faydark_chain_01/feet',0),(6806,6806,'accessories/wearable_items/_exp03/faydark_chain_01/forearms',0),(6807,6807,'accessories/wearable_items/_exp03/faydark_chain_01/hands',0),(6808,6808,'accessories/wearable_items/_exp03/faydark_chain_01/head',0),(6809,6809,'accessories/wearable_items/_exp03/faydark_chain_01/legs',0),(6810,6810,'accessories/wearable_items/_exp03/faydark_chain_01/legs_noskirt',0),(6811,6811,'accessories/wearable_items/_exp03/faydark_chain_01/shoulders',0),(6812,6812,'accessories/wearable_items/_exp03/faydark_chain_01/skirt',0),(6813,6813,'accessories/wearable_items/_exp08/dragon_armor/leather1_green/forearms',1096),(6814,6814,'_exp03/zones/objects/idols/kal_totem_brell',0),(6815,6815,'accessories/wieldable_items/weapons/exp03/pike/exp03_pik_tunare',0),(6816,6816,'accessories/wieldable_items/soga_weapons/priest/exp03_deadman_call_countenance',0),(6817,6817,'_exp03/zones/regions/emeraldhalls/eh_flora/eh_flora_rm05_bloom_of_growth',0),(6818,6818,'_exp03/characters/tool_users/honor_elf/honor_elf_male_paladin',0),(6819,6819,'_exp03/characters/tool_users/honor_elf/honor_elf_female_wizard',0),(6820,6820,'accessories/wearable_items/_exp08/dragon_armor/leather1_green/hands',1096),(6821,6821,'accessories/wieldable_items/weapons/exp03/1h_sword/exp03_1hs_brellserilis',0),(6822,6822,'_exp03/zones/objects/lesser_faydark/stones/lf_obj_game_stone_dark01',0),(6823,6823,'_exp03/zones/objects/lesser_faydark/stones/lf_obj_game_stone_light01',0),(6824,6824,'_exp03/characters/monsters/imp',0),(6825,6825,'_exp03/characters/monsters/carnivorous_ape',0),(6826,6826,'_exp03/characters/tool_users/orc_crushbone/orc_crushbone_crush',0),(6827,6827,'_exp03/zones/exp03_dun_klakanon_epic02_court/power_cell_collision_cylinder',0),(6828,6828,'creatures/mounts/horse_armor01/horse01_armor01_appoloosa',0),(6829,6829,'creatures/mounts/horse_armor01/horse01_armor01_misty',0),(6830,6830,'creatures/mounts/horse_armor01/horse01_armor01_morgan',0),(6831,6831,'creatures/mounts/horse_armor01/horse01_armor01_nightmare',0),(6832,6832,'creatures/mounts/horse_armor01/horse01_armor01_paint',0),(6833,6833,'creatures/mounts/horse_armor01/horse01_armor01_palomino',0),(6834,6834,'creatures/mounts/horse_armor01/horse01_armor01_pinto',0),(6835,6835,'creatures/mounts/horse_armor01/horse01_armor01_solid',0),(6836,6836,'creatures/mounts/horse_armor02/horse01_armor02_appoloosa',0),(6837,6837,'creatures/mounts/horse_armor02/horse01_armor02_morgan',0),(6838,6838,'creatures/mounts/horse_armor02/horse01_armor02_palomino',0),(6839,6839,'creatures/mounts/horse_armor02/horse01_armor02_pinto',0),(6840,6840,'creatures/mounts/horse_armor02/horse01_armor02_solid',0),(6841,6841,'creatures/mounts/horse_base/horse01_appoloosa',0),(6842,6842,'creatures/mounts/horse_base/horse01_morgan',0),(6843,6843,'creatures/mounts/horse_base/horse01_paint',0),(6844,6844,'creatures/mounts/horse_base/horse01_palomino',0),(6845,6845,'creatures/mounts/horse_base/horse01_pinto',0),(6846,6846,'creatures/mounts/horse_base/horse01_solid',0),(6847,6847,'creatures/mounts/horse_saddle01/horse01_sadle01_appoloosa',0),(6848,6848,'creatures/mounts/horse_saddle01/horse01_sadle01_morgan',0),(6849,6849,'creatures/mounts/horse_saddle01/horse01_sadle01_paint',0),(6850,6850,'creatures/mounts/horse_saddle01/horse01_sadle01_palomino',0),(6851,6851,'creatures/mounts/horse_saddle01/horse01_sadle01_pinto',0),(6852,6852,'creatures/mounts/horse_saddle01/horse01_sadle01_solid',0),(6853,6853,'creatures/mounts/horse_saddle02/horse01_sadle02_appoloosa',0),(6854,6854,'creatures/mounts/horse_saddle02/horse01_sadle02_morgan',0),(6855,6855,'creatures/mounts/horse_saddle02/horse01_sadle02_paint',0),(6856,6856,'creatures/mounts/horse_saddle02/horse01_sadle02_palomino',0),(6857,6857,'creatures/mounts/horse_saddle02/horse01_sadle02_pinto',0),(6858,6858,'creatures/mounts/horse_saddle02/horse01_sadle02_solid',0),(6859,6859,'_exp03/characters/monsters/werewolf_01',0),(6860,6860,'accessories/wearable_items/character_create/chest',0),(6861,6861,'creatures/tu/gods_cazic_thule',0),(6862,6862,'_exp03/zones/objects/kelethin/mailbox/kel_obj_mail_kiosk01',0),(6863,6863,'_exp03/zones/objects/banners/fel_banner_fallingstar01',0),(6864,6864,'staticobjects/deity_altars/altar_brellserilis_basic',0),(6865,6865,'staticobjects/deity_altars/altar_brellserilis_crafted',0),(6866,6866,'staticobjects/deity_altars/altar_brellserilis_exceptional',0),(6867,6867,'staticobjects/deity_altars/altar_cazicthule_basic02',0),(6868,6868,'staticobjects/deity_altars/altar_cazicthule_crafted02',0),(6869,6869,'staticobjects/deity_altars/altar_cazicthule_exceptional02',0),(6870,6870,'staticobjects/deity_altars/altar_innoruuk_basic01',0),(6871,6871,'staticobjects/deity_altars/altar_innoruuk_crafted01',0),(6872,6872,'staticobjects/deity_altars/altar_innoruuk_exceptional01',0),(6873,6873,'staticobjects/deity_altars/altar_mithanielmarr_basic',0),(6874,6874,'staticobjects/deity_altars/altar_mithanielmarr_crafted',0),(6875,6875,'staticobjects/deity_altars/altar_mithanielmarr_exceptional',0),(6876,6876,'staticobjects/deity_altars/altar_quellious_basic',0),(6877,6877,'staticobjects/deity_altars/altar_quellious_crafted',0),(6878,6878,'staticobjects/deity_altars/altar_quellious_exceptional',0),(6879,6879,'staticobjects/deity_altars/altar_ralloszek_basic',0),(6880,6880,'staticobjects/deity_altars/altar_ralloszek_crafted',0),(6881,6881,'staticobjects/deity_altars/altar_ralloszek_exceptional',0),(6882,6882,'staticobjects/deity_altars/altar_solusekro_basic',0),(6883,6883,'staticobjects/deity_altars/altar_solusekro_crafted',0),(6884,6884,'staticobjects/deity_altars/altar_solusekro_exceptional',0),(6885,6885,'staticobjects/deity_altars/altar_tunare_basic',0),(6886,6886,'staticobjects/deity_altars/altar_tunare_crafted',0),(6887,6887,'staticobjects/deity_altars/altar_tunare_exceptional',0),(6888,6888,'staticobjects/statues/binding_shrine_no_fx',0),(6889,6889,'_exp03/characters/tool_users/bugbear',0),(6890,6890,'accessories/wieldable_items/weapons/exp03/bostaff/exp03_bws_elven_wizard_staff_princess',0),(6891,6891,'_exp03/characters/tool_users/bugbear_mystic_tu',0),(6892,6892,'_exp03/characters/tool_users/bugbear_warrior_tu',0),(6893,6893,'staticobjects/harvested/gems_mining/exp03_harvesting_gems_tier01',0),(6894,6894,'staticobjects/harvested/gems_mining/exp03_harvesting_gems_tier02',0),(6895,6895,'staticobjects/harvested/gems_mining/exp03_harvesting_gems_tier03',0),(6896,6896,'staticobjects/harvested/lairs_trapping/exp03_harvesting_trapping_tier01',0),(6897,6897,'staticobjects/harvested/lairs_trapping/exp03_harvesting_trapping_tier02',0),(6898,6898,'staticobjects/harvested/lairs_trapping/exp03_harvesting_trapping_tier03',0),(6899,6899,'staticobjects/harvested/logs_foresting/exp03_harvesting_logs_tier01',0),(6900,6900,'staticobjects/harvested/logs_foresting/exp03_harvesting_logs_tier02',0),(6901,6901,'staticobjects/harvested/logs_foresting/exp03_harvesting_logs_tier03',0),(6902,6902,'staticobjects/harvested/ore_mining/exp03_harvesting_ore_tier01',0),(6903,6903,'staticobjects/harvested/ore_mining/exp03_harvesting_ore_tier02',0),(6904,6904,'staticobjects/harvested/ore_mining/exp03_harvesting_ore_tier03',0),(6905,6905,'staticobjects/harvested/roots_gathering/exp03_harvesting_roots_tier01',0),(6906,6906,'staticobjects/harvested/roots_gathering/exp03_harvesting_roots_tier02',0),(6907,6907,'staticobjects/harvested/roots_gathering/exp03_harvesting_roots_tier03',0),(6908,6908,'_exp03/zones/objects/mistmoore_catacombs/pedestal/mc_pedestal_statue01',0),(6909,6909,'creatures/mounts/horse_armor01/horse01_armor01_good',0),(6910,6910,'creatures/monsters/vulwretch',0),(6911,6911,'creatures/monsters/horse01',0),(6912,6912,'staticobjects/dock_items/fprt_hood_fish02',0),(6913,6913,'_exp03/zones/exp03_dun_klakanon/energy_cell_menace_factory_key',0),(6914,6914,'_exp03/zones/objects/chests/cm_chest_treasure02',0),(6915,6915,'_exp03/zones/objects/vases/cm_vase_large01',0),(6916,6916,'_exp03/zones/objects/mechanical_parts/clockwork_gear_small',0),(6917,6917,'creatures/mounts/horse_armor01/horse01_armor01_ghost',0),(6918,6918,'creatures/mounts/horse_armor02/horse01_armor02_ghost',0),(6919,6919,'creatures/mounts/horse_base/horse01_ghost',0),(6920,6920,'creatures/mounts/horse_saddle01/horse01_sadle01_ghost',0),(6921,6921,'creatures/mounts/horse_saddle02/horse01_sadle02_ghost',0),(6922,6922,'accessories/wearable_items/_exp03/newbee_cloth_01/chest',0),(6923,6923,'accessories/wearable_items/_exp03/newbee_cloth_01/feet',0),(6924,6924,'accessories/wearable_items/_exp03/newbee_cloth_01/forearms',0),(6925,6925,'accessories/wearable_items/_exp03/newbee_cloth_01/hands',0),(6926,6926,'accessories/wearable_items/_exp03/newbee_cloth_01/head',0),(6927,6927,'accessories/wearable_items/_exp03/newbee_cloth_01/legs',0),(6928,6928,'accessories/wearable_items/_exp03/newbee_cloth_01/legs_noskirt',0),(6929,6929,'accessories/wearable_items/_exp03/newbee_cloth_01/shoulders',0),(6930,6930,'accessories/wearable_items/_exp03/newbee_cloth_01/skirt',0),(6931,6931,'_exp03/characters/monsters/bugbear_warrior',0),(6932,6932,'accessories/wieldable_items/weapons/exp03/npc_only/bugbear_warrior_sword',0),(6933,6933,'accessories/wieldable_items/weapons/exp03/npc_only/crush_sword',0),(6934,6934,'accessories/wieldable_items/weapons/exp03/2h_sword/exp03_2hs_crush',0),(6935,6935,'_exp03/zones/objects/crushbone_keep/tents/cbk_tent_orc01',0),(6936,6936,'_exp03/zones/objects/crushbone_keep/tents/cbk_tent_orc02',0),(6937,6937,'_exp03/zones/objects/crushbone_keep/chests/cbk_chest_metal01',0),(6938,6938,'_exp03/zones/objects/crushbone_keep/chests/cbk_chest_metal02',0),(6939,6939,'_exp03/zones/objects/crushbone_keep/chests/cbk_trunk_shoddy',0),(6940,6940,'_exp03/zones/objects/crushbone_keep/banners/cbk_post_orc_crushbone',0),(6941,6941,'_exp03/zones/objects/crushbone_keep/beds/cbk_bunk_orc01',0),(6942,6942,'staticobjects/pumpkin_flaming/pumpkin_flaming',0),(6943,6943,'_exp03/zones/objects/kelethin/signpost_signs/kel_roadsign_post01',0),(6944,6944,'_exp03/zones/objects/kelethin/signpost_signs/kel_roadsign_sign01',0),(6945,6945,'staticobjects/lighting/halfling_wall_light02_metal_dpo',0),(6946,6946,'_exp03/zones/objects/oil_can/eu_oil_can01',0),(6947,6947,'_exp03/zones/objects/gaming/eu_gaming_pawnpiece01',0),(6948,6948,'_exp03/zones/objects/key/eu_key_single01',0),(6949,6949,'accessories/wieldable_items/weapons/exp03/1h_sword/exp03_1h_crescent_axe_hope_devourer',0),(6950,6950,'accessories/wieldable_items/weapons/exp03/1h_sword/exp03_short_sword002_eitholi',0),(6951,6951,'accessories/wearable_items/cloak/exp03/cloak_sq_01_flames',0),(6952,6952,'accessories/wearable_items/heavy_cloth/heavy_cloth_commoner_plain/chest',0),(6953,6953,'accessories/wearable_items/heavy_cloth/heavy_cloth_commoner_plain/feet',0),(6954,6954,'accessories/wearable_items/heavy_cloth/heavy_cloth_commoner_plain/forearms',0),(6955,6955,'accessories/wearable_items/heavy_cloth/heavy_cloth_commoner_plain/hands',0),(6956,6956,'accessories/wearable_items/heavy_cloth/heavy_cloth_commoner_plain/legs',0),(6957,6957,'accessories/wearable_items/heavy_cloth/heavy_cloth_commoner_plain/shoulders',0),(6958,6958,'accessories/wearable_items/_exp08/dragon_armor/leather1_green/head',1096),(6959,6959,'accessories/wearable_items/_exp03/npc_only/cloak_mayong_sq_01',0),(6960,6960,'staticobjects/interiors/scenes/objects_race/dp_objects/exp03_objects/cbk_torture_chair01',0),(6961,6961,'staticobjects/interiors/scenes/objects_race/dp_objects/exp03_objects/cm_piano_bench01',0),(6962,6962,'staticobjects/interiors/scenes/objects_race/dp_objects/exp03_objects/cm_piano_open01',0),(6963,6963,'staticobjects/interiors/scenes/objects_race/dp_objects/exp03_objects/eu_gaming_chesstable01',0),(6964,6964,'staticobjects/interiors/scenes/objects_race/dp_objects/exp03_objects/fel_bonsaitree_planter01',0),(6965,6965,'staticobjects/interiors/scenes/objects_race/dp_objects/exp03_objects/fel_trinket_fireice_twisted01',0),(6966,6966,'staticobjects/interiors/scenes/objects_race/dp_objects/exp03_objects/kal_altar_paladin',0),(6967,6967,'staticobjects/interiors/scenes/objects_race/dp_objects/exp03_objects/kel_distillery_hanging01',0),(6968,6968,'staticobjects/interiors/scenes/objects_race/dp_objects/exp03_objects/kel_globe_fallingstar01',0),(6969,6969,'staticobjects/interiors/scenes/objects_race/dp_objects/exp03_objects/kel_incense_burner01',0),(6970,6970,'accessories/wearable_items/cloak/exp03/cloak_dt_01_dark_lord',0),(6971,6971,'accessories/wieldable_items/weapons/exp03/1h_crush/exp03_1hc_battlehammer_plain',0),(6972,6972,'accessories/wieldable_items/weapons/exp03/1h_crush/exp03_1hc_ivy_shrouded_orb',0),(6973,6973,'accessories/wieldable_items/weapons/exp03/bostaff/exp03_bws_elven_staff',0),(6974,6974,'accessories/wieldable_items/weapons/exp03/pike/exp03_pke_elven_staff',0),(6975,6975,'_exp03/zones/objects/firepits/eu_fireplace_andiron01',0),(6976,6976,'_exp03/zones/objects/signs/sfm_roadsign_post01',0),(6977,6977,'_exp03/zones/objects/signs/sfm_roadsign_sign01',0),(6978,6978,'_exp03/zones/objects/signs/sfm_sign_wall01',0),(6979,6979,'accessories/wearable_items/_exp03/npc_only/cloak_innoruuk_sq_01',0),(6980,6980,'_exp03/zones/exp03_dun_klakanon_epic02_court/power_cell_dead',0),(6981,6981,'accessories/wieldable_items/weapons/exp03/1h_crush/exp03_1hc_orc_cudgel01',0),(6982,6982,'accessories/wieldable_items/weapons/exp03/1h_crush/exp03_1hc_orc_hammer01',0),(6983,6983,'accessories/wieldable_items/weapons/exp03/1h_pierce/exp03_1hp_orc_stake01',0),(6984,6984,'accessories/wieldable_items/weapons/exp03/bostaff/exp03_bws_orc_spear01',0),(6985,6985,'accessories/wieldable_items/weapons/exp03/pike/exp03_pke_orc_halberd01',0),(6986,6986,'accessories/wieldable_items/weapons/exp03/pike/exp03_pke_orc_halberd02',0),(6987,6987,'accessories/wieldable_items/weapons/exp03/pike/exp03_pke_orc_halberd03',0),(6988,6988,'accessories/wieldable_items/weapons/exp03/pike/exp03_pke_orc_trident03',0),(6989,6989,'accessories/wieldable_items/shields/exp03/exp03_gnomish_shield_electrified',0),(6990,6990,'accessories/wieldable_items/shields/exp03/exp03_high_elven_kite_shield_grove',0),(6991,6991,'accessories/wieldable_items/shields/tower_shield/wooden_tower_shield/wooden_tower_shield001_electrified',0),(6992,6992,'accessories/wieldable_items/weapons/axe/small_dwarf/exp03_small_dwarf_axe_natural',0),(6993,6993,'accessories/wieldable_items/weapons/dagger/dirk/exp03_dirk002_balanced',0),(6994,6994,'accessories/wieldable_items/weapons/exp03/1h_crush/exp03_1hc_battlehammer_emerald',0),(6995,6995,'accessories/wieldable_items/weapons/exp03/1h_crush/exp03_1hc_long_plain_wand_particle',0),(6996,6996,'accessories/wieldable_items/weapons/exp03/1h_sword/exp03_1hs_ornate_elven_rapier_tunarian',0),(6997,6997,'accessories/wieldable_items/weapons/great_spear/harpoon/exp03_harpoon001_tunare',0),(6998,6998,'_exp03/zones/objects/coffins/lp_coffin_stone01_closed',0),(6999,6999,'_exp03/zones/objects/coffins/lp_coffin_stone01_open01',0),(7000,7000,'_exp03/zones/objects/coffins/lp_coffin_stone01_open02',0),(7001,7001,'_exp03/zones/objects/kelethin/crates/kel_crate_fay01',0),(7002,7002,'_exp03/zones/objects/kelethin/crates/kel_crate_fay02',0),(7003,7003,'_exp03/zones/objects/kelethin/crates/kel_crate_fay03',0),(7004,7004,'_exp03/zones/objects/graveyard_crypts/lp_graveyard_crypt_plaque',0),(7005,7005,'accessories/wieldable_items/weapons/exp03/fist/exp03_monk_1h_glow',0),(7006,7006,'accessories/wieldable_items/soga_weapons/mage/staff_of_the_observers',0),(7007,7007,'accessories/wieldable_items/shields/exp03/exp03_small_held_symbol_prismatic',0),(7008,7008,'ui_fx/fx/systems/environment/any/instance_portal',0),(7009,7009,'_exp03/zones/objects/coffins/cm_coffin_mistmoore01',0),(7010,7010,'_exp03/zones/objects/coffins/cm_coffin_stone01',0),(7011,7011,'_exp03/zones/objects/coffins/cm_pedestal_coffin_mistmoore01',0),(7012,7012,'staticobjects/nests/nest_harpy01',0),(7013,7013,'_exp03/zones/objects/lesser_faydark/eggs/lf_drake_eggs_unbroken_blue',0),(7014,7014,'_exp03/zones/objects/statues/gf_statue_fey',0),(7015,7015,'accessories/wieldable_items/weapons/sword/long_sword/exp03_long_sword001_balance',0),(7016,7016,'accessories/wieldable_items/weapons/sword/scimitar/exp03_scimitar001_grove',0),(7017,7017,'accessories/wieldable_items/shields/exp03/exp03_qeynos_buckler',0),(7018,7018,'accessories/wieldable_items/soga_weapons/scout/exp03_traceless_wounding',0),(7019,7019,'accessories/wearable_items/starter_clothes/fae_dark_male/arms',0),(7020,7020,'accessories/wearable_items/starter_clothes/fae_dark_male/chest',0),(7021,7021,'accessories/wearable_items/starter_clothes/fae_dark_male/legs',0),(7022,7022,'accessories/wearable_items/starter_clothes/fae_dark_male/sleeves',0),(7023,7023,'accessories/wearable_items/starter_clothes/fae_dark_female/arms',0),(7024,7024,'accessories/wearable_items/starter_clothes/fae_dark_female/chest',0),(7025,7025,'accessories/wearable_items/starter_clothes/fae_dark_female/legs',0),(7026,7026,'accessories/wearable_items/starter_clothes/fae_dark_female/sleeves',0),(7027,7027,'accessories/wearable_items/starter_clothes/fae_light_male/arms',0),(7028,7028,'accessories/wearable_items/starter_clothes/fae_light_male/chest',0),(7029,7029,'accessories/wearable_items/starter_clothes/fae_light_male/legs',0),(7030,7030,'accessories/wearable_items/starter_clothes/fae_light_male/sleeves',0),(7031,7031,'accessories/wearable_items/starter_clothes/fae_light_female/arms',0),(7032,7032,'accessories/wearable_items/starter_clothes/fae_light_female/chest',0),(7033,7033,'accessories/wearable_items/starter_clothes/fae_light_female/legs',0),(7034,7034,'accessories/wearable_items/starter_clothes/fae_light_female/sleeves',0),(7035,7035,'projectiles/spell_fruitcake',0),(7036,7036,'accessories/wieldable_items/weapons/sword/candy_cane_1hs/candy_cane_1hs_01',0),(7037,7037,'accessories/wearable_items/christmas_hats/santa_hat_02/head',0),(7038,7038,'_exp03/characters/tool_users/satyr_snow',0),(7039,7039,'ec/npc/goblin_snow',0),(7040,7040,'creatures/monsters/snowman01',0),(7041,7041,'creatures/monsters/snowwoman01',0),(7042,7042,'projectiles/spell_snowball_big',0),(7043,7043,'_exp03/characters/monsters/carnivorous_ape_boss',0),(7044,7044,'staticobjects/shelves/wall_shelf_halfling_wooden01_houseitem',0),(7045,7045,'staticobjects/lighting/wall_lamp_darkelf_torchbowl01_dpohousing',0),(7046,7046,'accessories/wieldable_items/weapons/dagger/dirk/exp02_dirk002_nightfall',0),(7047,7047,'staticobjects/liveevent/frostfell/dpo_holiday_candlegroup01_greensilver',0),(7048,7048,'staticobjects/liveevent/frostfell/dpo_holiday_candlegroup01_redsilver',0),(7049,7049,'staticobjects/liveevent/frostfell/dpo_holiday_candycane_large03_blue',0),(7050,7050,'staticobjects/liveevent/frostfell/dpo_holiday_candycane_large04_green',0),(7051,7051,'staticobjects/liveevent/frostfell/dpo_holiday_candycane_large05_redpink',0),(7052,7052,'staticobjects/liveevent/frostfell/dpo_holiday_candycane_small03_blue',0),(7053,7053,'staticobjects/liveevent/frostfell/dpo_holiday_candycane_small04_green',0),(7054,7054,'staticobjects/liveevent/frostfell/dpo_holiday_candycane_small05_redpink',0),(7055,7055,'staticobjects/liveevent/frostfell/dpo_holiday_wallcandles02_goldgreen',0),(7056,7056,'staticobjects/liveevent/frostfell/dpo_holiday_wallcandles02_silverred',0),(7057,7057,'staticobjects/liveevent/frostfell/dpo_snowglobe_cazicthule01',0),(7058,7058,'staticobjects/liveevent/frostfell/dpo_snowglobe_drafling01',0),(7059,7059,'staticobjects/liveevent/frostfell/dpo_snowglobe_frostfelltree01',0),(7060,7060,'staticobjects/liveevent/frostfell/dpo_snowglobe_kelethin01',0),(7061,7061,'staticobjects/liveevent/frostfell/dpo_snowglobe_lavastorm01',0),(7062,7062,'staticobjects/liveevent/frostfell/dpo_snowglobe_majdul01',0),(7063,7063,'staticobjects/liveevent/frostfell/dpo_snowglobe_nektropos01',0),(7064,7064,'staticobjects/liveevent/frostfell/dpo_snowglobe_pagoda01',0),(7065,7065,'staticobjects/liveevent/frostfell/dpo_snowglobe_qeyclamore01',0),(7066,7066,'staticobjects/liveevent/frostfell/dpo_snowman01_sad',0),(7067,7067,'staticobjects/liveevent/frostfell/dpo_snowwoman01_sad',0),(7068,7068,'staticobjects/liveevent/frostfell/dpo_xmas_apples',0),(7069,7069,'staticobjects/liveevent/frostfell/dpo_xmas_candy',0),(7070,7070,'staticobjects/liveevent/frostfell/dpo_xmas_eggnog',0),(7071,7071,'staticobjects/liveevent/frostfell/holiday_fruitcake',0),(7072,7072,'staticobjects/liveevent/frostfell/holiday_turkey',0),(7073,7073,'staticobjects/liveevent/frostfell/holiday_wreath01',0),(7074,7074,'staticobjects/liveevent/frostfell/dpo_bow01_gold',0),(7075,7075,'staticobjects/liveevent/frostfell/dpo_bow01_green',0),(7076,7076,'staticobjects/liveevent/frostfell/dpo_bow01_red',0),(7077,7077,'staticobjects/liveevent/frostfell/dpo_present03_big',0),(7078,7078,'staticobjects/liveevent/frostfell/dpo_present03_medium',0),(7079,7079,'staticobjects/liveevent/frostfell/dpo_bow01_gold_wall',0),(7080,7080,'staticobjects/liveevent/frostfell/dpo_bow01_green_wall',0),(7081,7081,'staticobjects/liveevent/frostfell/dpo_bow01_red_wall',0),(7082,7082,'staticobjects/liveevent/frostfell/ice_throne',0),(7083,7083,'staticobjects/liveevent/frostfell/dpo_christmas_tree_small01_houseitem',0),(7084,7084,'staticobjects/liveevent/frostfell/dpo_christmas_tree_small01_kelethin',0),(7085,7085,'staticobjects/liveevent/frostfell/lamp_post',0),(7086,7086,'accessories/wieldable_items/weapons/great_spear/voulge/voulge001_ornate_pike',0),(7087,7087,'staticobjects/fireplaces/dpo_fireplace01_houseitem',0),(7088,7088,'staticobjects/fireplaces/dpo_fireplace02_houseitem',0),(7089,7089,'staticobjects/fireplaces/dpo_fireplace03_houseitem',0),(7090,7090,'staticobjects/liveevent/frostfell/holiday_cranberrie_plate',0),(7091,7091,'accessories/wieldable_items/weapons/exp03/fist/exp03_quellious_1h_glow',0),(7092,7092,'staticobjects/stoves/floor_stove_halfling_round01',0),(7093,7093,'staticobjects/liveevent/frostfell/dpo_holiday_snowpile01',0),(7094,7094,'_exp03/zones/objects/crib/eu_crib01',0),(7095,7095,'_exp04/monsters/apopheli',0),(7096,7096,'ec/pc/fae_wings/fae_d_wing01',0),(7097,7097,'ec/pc/fae_wings/fae_d_wing01_t',0),(7098,7098,'ec/pc/fae_wings/fae_d_wing02',0),(7099,7099,'ec/pc/fae_wings/fae_d_wing02_t',0),(7100,7100,'ec/pc/fae_wings/fae_d_wing03',0),(7101,7101,'ec/pc/fae_wings/fae_d_wing03_t',0),(7102,7102,'ec/pc/fae_wings/fae_d_wing04',0),(7103,7103,'ec/pc/fae_wings/fae_d_wing04_t',0),(7104,7104,'ec/pc/fae_wings/fae_d_wing05',0),(7105,7105,'ec/pc/fae_wings/fae_d_wing05_t',0),(7106,7106,'ec/pc/fae_wings/fae_d_wing06',0),(7107,7107,'ec/pc/fae_wings/fae_d_wing06_t',0),(7108,7108,'ec/pc/fae_wings/fae_d_wing07',0),(7109,7109,'ec/pc/fae_wings/fae_d_wing07_t',0),(7110,7110,'ec/pc/fae_wings/fae_d_wing08',0),(7111,7111,'ec/pc/fae_wings/fae_d_wing08_t',0),(7112,7112,'ec/pc/fae_wings/fae_d_wing09',0),(7113,7113,'ec/pc/fae_wings/fae_d_wing09_t',0),(7114,7114,'ec/pc/fae_wings/fae_d_wing10',0),(7115,7115,'ec/pc/fae_wings/fae_d_wing10_t',0),(7116,7116,'ec/pc/fae_wings/fae_d_wing11',0),(7117,7117,'ec/pc/fae_wings/fae_d_wing11_t',0),(7118,7118,'ec/pc/fae_wings/fae_d_wing12',0),(7119,7119,'ec/pc/fae_wings/fae_d_wing12_t',0),(7120,7120,'staticobjects/liveevent/erollisi_objects/errolisi_box0choclates',0),(7121,7121,'staticobjects/liveevent/erollisi_objects/errolisi_goodheartvase01',0),(7122,7122,'staticobjects/liveevent/erollisi_objects/errolisi_goodheartvase02',0),(7123,7123,'staticobjects/liveevent/erollisi_objects/errolisi_heartpillow',0),(7124,7124,'staticobjects/liveevent/erollisi_objects/errolisi_heartvase01',0),(7125,7125,'staticobjects/liveevent/erollisi_objects/errolisi_heartvase02',0),(7126,7126,'staticobjects/liveevent/erollisi_objects/errolisi_multithreeroses01',0),(7127,7127,'staticobjects/liveevent/erollisi_objects/errolisi_pink_purplerose_ovalvase01',0),(7128,7128,'staticobjects/liveevent/erollisi_objects/errolisi_pink_redrosevase01',0),(7129,7129,'staticobjects/liveevent/erollisi_objects/errolisi_pinkrose01',0),(7130,7130,'staticobjects/liveevent/erollisi_objects/errolisi_pinkrose_ovalvase01',0),(7131,7131,'staticobjects/liveevent/erollisi_objects/errolisi_pinkrosevase01',0),(7132,7132,'staticobjects/liveevent/erollisi_objects/errolisi_pinkthreeroses01',0),(7133,7133,'staticobjects/liveevent/erollisi_objects/errolisi_purple_redrose_ovalvase01',0),(7134,7134,'staticobjects/liveevent/erollisi_objects/errolisi_purple_redrosevase01',0),(7135,7135,'staticobjects/liveevent/erollisi_objects/errolisi_purplerose01',0),(7136,7136,'staticobjects/liveevent/erollisi_objects/errolisi_purplerose_ovalvase01',0),(7137,7137,'staticobjects/liveevent/erollisi_objects/errolisi_purplerosevase01',0),(7138,7138,'staticobjects/liveevent/erollisi_objects/errolisi_purplethreeroses01',0),(7139,7139,'staticobjects/liveevent/erollisi_objects/errolisi_red_pinkrose_ovalvase01',0),(7140,7140,'staticobjects/liveevent/erollisi_objects/errolisi_red_whiterose_ovalvase01',0),(7141,7141,'staticobjects/liveevent/erollisi_objects/errolisi_red_whiterosevase01',0),(7142,7142,'staticobjects/liveevent/erollisi_objects/errolisi_redrose01',0),(7143,7143,'staticobjects/liveevent/erollisi_objects/errolisi_redrose_ovalvase01',0),(7144,7144,'staticobjects/liveevent/erollisi_objects/errolisi_redrosevase01',0),(7145,7145,'staticobjects/liveevent/erollisi_objects/errolisi_redthreeroses01',0),(7146,7146,'accessories/wearable_items/_exp08/dragon_armor/leather1_green/legs',1096),(7147,7147,'accessories/wearable_items/_exp08/dragon_armor/leather1_green/legs_noskirt',1096),(7148,7148,'accessories/wearable_items/_exp08/dragon_armor/leather1_green/shoulders',1096),(7149,7149,'staticobjects/liveevent/erollisi_objects/errolisi_whiterose01',0),(7150,7150,'staticobjects/liveevent/erollisi_objects/errolisi_whiterose_ovalvase01',0),(7151,7151,'staticobjects/liveevent/erollisi_objects/errolisi_whiterosevase01',0),(7152,7152,'staticobjects/liveevent/erollisi_objects/errolisi_whitethreeroses01',0),(7153,7153,'accessories/wearable_items/profesion_hats/warden/warden_01/head',0),(7154,7154,'accessories/wearable_items/profesion_hats/fury/fury_01/head',0),(7155,7155,'accessories/wearable_items/profesion_hats/necromancer/necromancer_01/head',0),(7156,7156,'accessories/wearable_items/profesion_hats/warlock/warlock_01/head',0),(7157,7157,'_exp04/tool_users/sarnak',0),(7158,7158,'accessories/wieldable_items/soga_weapons/priest/exp03_thunder_blade_waning_moon',0),(7159,7159,'accessories/wieldable_items/soga_weapons/scout/exp03_great_shark_sariks_fang',0),(7160,7160,'accessories/wieldable_items/weapons/exp03/1h_crush/exp03_1hc_battlehammer_inlaid_rock',0),(7161,7161,'accessories/wieldable_items/weapons/exp03/1h_crush/exp03_1hc_ivy_shrouded_orb_sparkling',0),(7162,7162,'accessories/wieldable_items/weapons/exp03/1h_crush/exp03_1hc_wooden_vine_scepter_knotted_pine',0),(7163,7163,'accessories/wieldable_items/weapons/exp03/1h_sword/exp03_1hs_orc_machete_clearcutter',0),(7164,7164,'accessories/wieldable_items/weapons/exp03/bow/exp03_bow_giant_wooden_grove',0),(7165,7165,'accessories/wieldable_items/weapons/fist/claws/claws001_thorn_wrapped',0),(7166,7166,'accessories/wieldable_items/weapons/rapier/epee/exp03_epee001_bixie_sticker',0),(7167,7167,'accessories/wieldable_items/weapons/rapier/saber/exp03_saber001_bisected_saber',0),(7168,7168,'accessories/wieldable_items/weapons/spear/one_handed_spear/exp03_barbed_spear_bee_sting',0),(7169,7169,'staticobjects/shield/exp03_mistmoore_shield_heritage_housteitem',0),(7170,7170,'staticobjects/shelves/houseitems/wall_shelf_any_skull01',0),(7171,7171,'staticobjects/shelves/houseitems/wall_shelf_any_skull02',0),(7172,7172,'staticobjects/shelves/houseitems/wall_shelf_any_skull03',0),(7173,7173,'staticobjects/statues/wall_statue_any_figurehead01_housedpo',0),(7174,7174,'accessories/wieldable_items/weapons/exp03/1h_sword/exp03_1hs_ornate_elven_rapier_beeswarm',0),(7175,7175,'_exp04/monsters/fishman',0),(7176,7176,'staticobjects/world_devices/trdskl_fprt_chemistrytable_summoned',0),(7177,7177,'staticobjects/world_devices/trdskl_fprt_engraveddesk_summoned',0),(7178,7178,'staticobjects/world_devices/trdskl_fprt_forge_summoned',0),(7179,7179,'staticobjects/world_devices/trdskl_fprt_sewingtable_mannequin_loom_summoned',0),(7180,7180,'staticobjects/world_devices/trdskl_fprt_stoveandkeg_summoned',0),(7181,7181,'staticobjects/world_devices/trdskl_fprt_woodworkingtable_summoned',0),(7182,7182,'staticobjects/world_devices/trdskl_fprt_workbench_summoned',0),(7183,7183,'creatures/mounts/horse_armor01/horse01_armor01_nightmare_blue',0),(7184,7184,'staticobjects/catapult/catapult',0),(7185,7185,'_exp04/monsters/wyvern',0),(7186,7186,'_exp04/tool_users/fishman_tu',0),(7187,7187,'accessories/wieldable_items/misc/stein001_runic_tumpy_tankard',0),(7188,7188,'accessories/wieldable_items/soga_weapons/fighter/invincibility_of_eight_flowing_blood',0),(7189,7189,'accessories/wieldable_items/soga_weapons/fighter/sword_of_nova_infirmity',0),(7190,7190,'accessories/wieldable_items/soga_weapons/mage/staff_of_elemental_wand_of_crystalized_plasma',0),(7191,7191,'accessories/wieldable_items/soga_weapons/scout/wannish_dream_torn_ligament',0),(7192,7192,'accessories/wearable_items/cloak/exp03/cloak_sq_01_unrest_vapor',0),(7193,7193,'accessories/wieldable_items/weapons/great_axe/large_dwarf_axe/large_dwarf_axe_plain_bloodbath',0),(7194,7194,'accessories/wieldable_items/weapons/great_hammer/war_hammer/war_hammer002_ornate_torklars',0),(7195,7195,'accessories/wieldable_items/weapons/sword/vampire_sword/vampire_sword_plain_modinthalis',0),(7196,7196,'accessories/wieldable_items/weapons/exp03/1h_pierce/exp03_1hp_vampiric_sacrificial_dagger_cold_blooded',0),(7197,7197,'accessories/wieldable_items/weapons/exp03/1h_sword/exp03_1hs_ornate_elven_rapier_bloodspiller',0),(7198,7198,'accessories/wieldable_items/weapons/exp03/1h_crush/exp03_1hc_wrench01_cogturner',0),(7199,7199,'_exp03/zones/objects/castle_mistmoore/cm_statues_mayong_bust',0),(7200,7200,'_exp03/zones/objects/greater_faydark/lightsources/gf_lamppost_flower01',0),(7201,7201,'accessories/wearable_items/profesion_hats/conjuror/conjuror_01/head',0),(7202,7202,'accessories/wearable_items/profesion_hats/coercer/coercer_01/head',0),(7203,7203,'staticobjects/world_devices/orc_forge',0),(7204,7204,'accessories/wearable_items/profesion_hats/coercer/coercer_02/head',0),(7205,7205,'accessories/wearable_items/_exp08/dragon_armor/leather1_green/shoulders_epic',1096),(7206,7206,'creatures/mounts/rhino_mount/rhino_armor01',0),(7207,7207,'creatures/monsters/elephant_white',0),(7208,7208,'staticobjects/plants/dw_objects_plant_tree01',0),(7209,7209,'staticobjects/plants/dw_objects_planttreebark01',0),(7210,7210,'_exp03/zones/felwithe_castle/fel_rod_crystal',0),(7211,7211,'_exp04/monsters/fishman_warrior',0),(7212,7212,'_exp04/tool_users/fishman_warrior_tu',0),(7213,7213,'creatures/mounts/warg_mount/warg',0),(7214,7214,'creatures/mounts/warg_mount/warg_armor01',0),(7215,7215,'creatures/mounts/warg_mount/warg_armor02',0),(7216,7216,'creatures/mounts/warg_mount/warg_saddle01',0),(7217,7217,'_exp04/monsters/erollisi',0),(7218,7218,'creatures/mounts/warg_mount/warg_armor01_spotted',0),(7219,7219,'creatures/mounts/warg_mount/warg_armor01_twotoned',0),(7220,7220,'creatures/mounts/warg_mount/warg_armor02_spotted',0),(7221,7221,'creatures/mounts/warg_mount/warg_armor02_twotoned',0),(7222,7222,'creatures/mounts/warg_mount/warg_spotted',0),(7223,7223,'creatures/mounts/warg_mount/warg_twotoned',0),(7224,7224,'staticobjects/brazier/floor_brazier_erudite_smoke',0),(7225,7225,'_exp03/zones/felwithe_castle/fel_rod_crystal_dropped',0),(7226,7226,'_exp04/tool_users/drachnid_female',0),(7227,7227,'_exp04/tool_users/drachnid_queen',0),(7228,7228,'creatures/mounts/warg_mount/warg_saddle01_spotted',0),(7229,7229,'creatures/mounts/warg_mount/warg_saddle01_twotoned',0),(7230,7230,'creatures/monsters/willowisp_dark',0),(7231,7231,'accessories/wieldable_items/weapons/staff/felwithe_staff/felwithe_bws_staff',0),(7232,7232,'_exp03/zones/felwithe_castle/dpo_invisible_cube_felwithe',0),(7233,7233,'_exp03/zones/regions/greater_faydark/gf_flora/gf_flora_mushroom_limecap_dpo',0),(7234,7234,'_exp04/monsters/xygoz',0),(7235,7235,'_exp04/monsters/cockatrice',0),(7236,7236,'_exp04/monsters/skorpikis',0),(7237,7237,'staticobjects/dpo_invisible_wall/invisible_wall_dw_shadow_oak_drwy',0),(7238,7238,'staticobjects/dpo_invisible_wall/invisible_wall_dw_tower_of_bone_drwy',0),(7239,7239,'staticobjects/dpo_invisible_wall/invisible_wall_nk_seagate_teleporter',0),(7240,7240,'creatures/monsters/hellhound_blue',0),(7241,7241,'creatures/monsters/willowisp_ball_lightning',0),(7242,7242,'creatures/mounts/warg_mount/warg_armor02_blue',0),(7243,7243,'creatures/mounts/warg_mount/warg_armor02_fire',0),(7244,7244,'creatures/mounts/warg_mount/warg_armor02_misty',0),(7245,7245,'projectiles/nightmare_ghost',0),(7246,7246,'_exp04/monsters/clay_golem',0),(7247,7247,'_exp04/monsters/clay_keeper',0),(7248,7248,'creatures/monsters/willowisp_vampire_orb',0),(7249,7249,'ec/npc/nightmare_ghost',0),(7250,7250,'_exp04/monsters/cinder_wasp',0),(7251,7251,'_exp04/monsters/clay_shackled',0),(7252,7252,'_exp04/monsters/carrion_crawler',0),(7253,7253,'_exp04/monsters/sokokar',0),(7254,7254,'_exp04/tool_users/spiroc',0),(7255,7255,'_exp04/monsters/succulent',0),(7256,7256,'staticobjects/rugs/qey_rug_beigeblacklarge',0),(7257,7257,'_exp04/monsters/yeti',0),(7258,7258,'_exp04/monsters/brute',0),(7259,7259,'staticobjects/lighting/torchsword001',0),(7260,7260,'staticobjects/chairs/vrsn_chair03_dpo',0),(7261,7261,'staticobjects/globes/globe001',0),(7262,7262,'staticobjects/lighting/bonetorch001',0),(7263,7263,'staticobjects/lighting/candleholderlarge001',0),(7264,7264,'staticobjects/musical/halfling_drum03_dpo',0),(7265,7265,'staticobjects/lighting/tablelamp002',0),(7266,7266,'staticobjects/lighting/tablelamp003',0),(7267,7267,'staticobjects/kitchen/fprt_kitchen_chaliceshort001_dpo',0),(7268,7268,'staticobjects/pillars/column001',0),(7269,7269,'staticobjects/pillars/columnsmall002',0),(7270,7270,'staticobjects/kitchen/muffin_pan_dpo',0),(7271,7271,'staticobjects/racks/winerack001_assembly001',0),(7272,7272,'staticobjects/tapestry/tapestry001_longcealing_dirty',0),(7273,7273,'accessories/wearable_items/_exp08/dragon_armor/leather1_red/skirt',1096),(7274,7274,'accessories/wieldable_items/weapons/exp03/1h_crush/exp03_1hc_soulfire_hammer',0),(7275,7275,'accessories/wieldable_items/weapons/exp03/1h_crush/exp03_1hc_soulfire_kama',0),(7276,7276,'accessories/wieldable_items/weapons/exp03/1h_sword/exp03_1hs_soulfire_bastard',0),(7277,7277,'accessories/wieldable_items/weapons/exp03/1h_sword/exp03_1hs_soulfire_gladius',0),(7278,7278,'accessories/wieldable_items/weapons/exp03/1h_sword/exp03_1hs_soulfire_sabre',0),(7279,7279,'accessories/wieldable_items/weapons/exp03/pike/exp03_pike_soulfire_staff',0),(7280,7280,'staticobjects/lighting/chandelier001_dpo',0),(7281,7281,'staticobjects/lighting/torchsword001_dpo',0),(7282,7282,'creatures/tu/gods_bristlebane',0),(7283,7283,'accessories/wieldable_items/weapons/exp04/1h_pierce/exp04_1hp_triblade_dagger',0),(7284,7284,'accessories/wieldable_items/weapons/exp04/1h_crush/exp04_1hc_truncheon',0),(7285,7285,'accessories/wieldable_items/weapons/exp04/1h_sword/exp04_1hs_lamentation',0),(7286,7286,'accessories/wieldable_items/weapons/exp04/1h_crush/exp04_1hc_truncheon_koadavie',0),(7287,7287,'accessories/wieldable_items/weapons/exp04/1h_pierce/exp04_1hp_triblade_dagger_koadavie',0),(7288,7288,'accessories/wieldable_items/weapons/exp04/1h_pierce/exp04_1hp_vampiric_sacrificial_dagger_koadavie',0),(7289,7289,'accessories/wieldable_items/weapons/exp04/1h_sword/exp04_1hs_lamentation_koadavie',0),(7290,7290,'accessories/wieldable_items/shields/buckler_shield/wooden_buckler/wooden_buckler001_runic_koadavie',0),(7291,7291,'accessories/wieldable_items/shields/round_shield/wooden_round/wooden_round_shield001_ornate_koadavie',0),(7292,7292,'accessories/wieldable_items/shields/tower_shield/wooden_tower_shield/wooden_tower_shield001_koadavie',0),(7293,7293,'_exp04/monsters/devourer',0),(7294,7294,'accessories/wieldable_items/shields/buckler_shield/buckler_fae/buckler_fae_01_koadavie',0),(7295,7295,'code/spawn_ring',0),(7296,7296,'_exp04/tool_users/goblin_shaman',0),(7297,7297,'_exp04/monsters/wurm',0),(7298,7298,'staticobjects/armor/undead_iksar_male_breastplate',0),(7299,7299,'accessories/wieldable_items/soga_weapons/fighter/sword_of_serpent_koadavie',0),(7300,7300,'_exp04/tool_users/drachnid_female_chain',0),(7301,7301,'_exp04/tool_users/drachnid_male',0),(7302,7302,'_exp04/tool_users/drachnid_male_plate',0),(7303,7303,'staticobjects/mirrors/mirror001_wallmnt_dpo',0),(7304,7304,'_exp04/monsters/devil_dust_tornado_timorous',0),(7305,7305,'accessories/wieldable_items/weapons/exp03/1h_crush/exp03_1hc_lucanic_hammer',0),(7306,7306,'accessories/wieldable_items/weapons/exp03/1h_crush/exp03_1hc_lucanic_kama',0),(7307,7307,'accessories/wieldable_items/weapons/exp03/pike/exp03_pike_lucanic_staff',0),(7308,7308,'accessories/wieldable_items/weapons/exp03/1h_sword/exp03_1hs_lucanic_bastard',0),(7309,7309,'accessories/wieldable_items/weapons/exp03/1h_sword/exp03_1hs_lucanic_gladius',0),(7310,7310,'accessories/wieldable_items/weapons/exp03/1h_sword/exp03_1hs_lucanic_sabre',0),(7311,7311,'_exp04/tool_users/goblin_warrior',0),(7312,7312,'staticobjects/musical/floor_horn_halfling',0),(7313,7313,'creatures/mounts/warg_mount/warg_armor02_albino',0),(7314,7314,'accessories/wearable_items/cloak/exp03/cloak_sq_01_water',0),(7315,7315,'ec/pc01/sarnak_male/sarnak_male_thin',0),(7316,7316,'accessories/wearable_items/cloak/exp03/cloak_sq_01_chelsith',0),(7317,7317,'accessories/wearable_items/cloak/exp03/cloak_sq_01_disguise',0),(7318,7318,'accessories/wearable_items/cloak/exp03/cloak_sq_01_lon',0),(7319,7319,'accessories/wieldable_items/weapons/sword/long_sword/long_sword_magic_uber',0),(7320,7320,'creatures/mounts/carpet_lon',0),(7321,7321,'_exp04/monsters/chokidai_armoured',0),(7322,7322,'creatures/mounts/carpet_lon02',0),(7323,7323,'_exp04/monsters/chokidai',0),(7324,7324,'_exp04/tool_users/goblin_scout',0),(7325,7325,'code/target_aoe_ring',0),(7326,7326,'staticobjects/lighting/halfling_lantern01_handledown_dpo',0),(7327,7327,'staticobjects/lighting/halfling_lantern01_handleup_dpo',0),(7328,7328,'staticobjects/tables/halfing_desk01_dpo',0),(7329,7329,'staticobjects/benches/floor_bench_halfing_paded01_ltwd_dpo',0),(7330,7330,'staticobjects/chairs/floor_loveseat_halfing_paded01',0),(7331,7331,'staticobjects/chairs/halfling_chair_padded_dpo',0),(7332,7332,'staticobjects/beds/halfing_bed01_wdlt_dpo',0),(7333,7333,'staticobjects/lighting/halfling_candle_log01_dpo',0),(7334,7334,'staticobjects/counters/halfing_counter_merchant01_dpo',0),(7335,7335,'staticobjects/stoves/floor_stove_halfling_square01_dpo',0),(7336,7336,'staticobjects/musical/halfling_zylophone_dpo',0),(7337,7337,'staticobjects/musical/halfling_music_chimes01_dpo',0),(7338,7338,'staticobjects/plants/halfling_hangingpot01_dpo',0),(7339,7339,'staticobjects/rugs/halfing_rugcircle01_dpo',0),(7340,7340,'staticobjects/rugs/halfing_rugsquare01_dpo',0),(7341,7341,'staticobjects/fountains_and_pools/sos_fountain_birdbath_floor_small_dpo',0),(7342,7342,'staticobjects/musical/halfling_jimba01_dpo',0),(7343,7343,'staticobjects/plants/potted_shrub_dpo',0),(7344,7344,'staticobjects/plants/potted_shrub_berries_dpo',0),(7345,7345,'staticobjects/chairs/floor_chair_halfing_paded02',0),(7346,7346,'staticobjects/kitchen/qey_kitchen_breadpan_withbread001_dpo',0),(7347,7347,'staticobjects/kitchen/bowl_steam02_dpo',0),(7348,7348,'staticobjects/kitchen/bowl_steam03_dpo',0),(7349,7349,'staticobjects/stoves/qey_kitchen_stoveornate001_dpo',0),(7350,7350,'staticobjects/fountains_and_pools/sos_fountain_birdbath_floor_dpo',0),(7351,7351,'staticobjects/fountains_and_pools/sos_fountain_birdbath_wall_dpo',0),(7352,7352,'accessories/hair/hair026',0),(7353,7353,'accessories/wearable_items/cloak/exp03/cloak_sq_01_iksar',0),(7354,7354,'_exp04/zones/objects/timorous_deep/sarnak_spear_phalanx',0),(7355,7355,'accessories/wieldable_items/weapons/exp03/2h_sword/exp03_2hs_lucanic',0),(7356,7356,'_exp04/tool_users/sarnak_caster',0),(7357,7357,'accessories/wieldable_items/weapons/exp03/2h_sword/exp03_2hs_soulfire',0),(7358,7358,'accessories/wieldable_items/weapons/exp03/1h_crush/exp03_1hc_lucanic_staff',0),(7359,7359,'accessories/wieldable_items/weapons/exp03/1h_crush/exp03_1hc_soulfire_staff',0),(7360,7360,'accessories/wieldable_items/weapons/exp03/1h_crush/exp03_1hc_solusekro',0),(7361,7361,'_exp04/monsters/leech',0),(7362,7362,'_exp04/monsters/stoneent',0),(7363,7363,'staticobjects/interiors/scenes/objects_race/dp_objects/tcg_items/tcg_cardcase01',0),(7364,7364,'staticobjects/interiors/scenes/objects_race/dp_objects/tcg_items/tcg_painting01',0),(7365,7365,'staticobjects/interiors/scenes/objects_race/dp_objects/tcg_items/tcg_painting02',0),(7366,7366,'staticobjects/interiors/scenes/objects_race/dp_objects/tcg_items/tcg_painting03',0),(7367,7367,'staticobjects/interiors/scenes/objects_race/dp_objects/tcg_items/tcg_paintingarray01',0),(7368,7368,'_exp04/tool_users/sarnak_warrior',0),(7369,7369,'ec/pc01/sarnak_male/sarnak_male_thin02',0),(7370,7370,'ec/pc01/sarnak_male/sarnak_male_thin03',0),(7371,7371,'ec/pc01/sarnak_male/sarnak_male_thin04',0),(7372,7372,'ec/pc01/sarnak_male/sarnak_male_thin05',0),(7373,7373,'ec/pc01/sarnak_male/sarnak_male_thin06',0),(7374,7374,'ec/pc01/sarnak_male/sarnak_male_thin07',0),(7375,7375,'ec/pc01/sarnak_male/sarnak_male_thin08',0),(7376,7376,'ec/pc01/sarnak_male/sarnak_male_thin09',0),(7377,7377,'ec/pc01/sarnak_female/sarnak_female_thin',0),(7378,7378,'staticobjects/fountains_and_pools/griffin_fountain_dpo',0),(7379,7379,'accessories/wearable_items/_exp08/dragon_armor/leather1_red/chest',1096),(7380,7380,'staticobjects/fish/swordfish_dpo',0),(7381,7381,'staticobjects/fountains_and_pools/sundial_pool_dpo',0),(7382,7382,'staticobjects/fountains_and_pools/oracle_fountain_dpo',0),(7383,7383,'staticobjects/fountains_and_pools/thunder_fountain_dpo',0),(7384,7384,'staticobjects/lighting/darklight_crystal',0),(7385,7385,'staticobjects/banners/indigo_brotherhood_banner_dpo',0),(7386,7386,'staticobjects/arches/forest_archway',0),(7387,7387,'staticobjects/fountains_and_pools/neriak_fountain_dpo',0),(7388,7388,'accessories/wieldable_items/weapons/exp04/1h_crush/exp04_1hc_sharktooth_mace',0),(7389,7389,'accessories/wieldable_items/weapons/exp04/1h_crush/exp04_1hc_spiked_mace',0),(7390,7390,'ec/pc01/sarnak_female/sarnak_female_thin04',0),(7391,7391,'ec/pc01/sarnak_female/sarnak_female_thin05',0),(7392,7392,'_exp04/monsters/raptor',0),(7393,7393,'_exp04/monsters/skyfiredrake',0),(7394,7394,'_exp04/tool_users/burynai',0),(7395,7395,'_exp04/tool_users/froglok_kunark',0),(7396,7396,'accessories/wieldable_items/weapons/exp04/1h_sword/exp04_1hs_linked',0),(7397,7397,'_exp04/zones/objects/timorous_deep/tablets/deep_tablet_iksar02',0),(7398,7398,'accessories/wieldable_items/weapons/exp04/1h_sword/exp04_1hs_kunzar',0),(7399,7399,'accessories/wieldable_items/weapons/exp04/1h_sword/exp04_1hs_reaver',0),(7400,7400,'accessories/wieldable_items/weapons/exp04/1h_sword/exp04_1hs_jagged',0),(7401,7401,'accessories/wieldable_items/weapons/exp04/bow/exp04_bow_dragon_bow',0),(7402,7402,'accessories/wieldable_items/weapons/exp04/pike/exp04_pike_spiney_spear',0),(7403,7403,'accessories/wieldable_items/weapons/exp04/shield/exp04_shld_dragonhead_shield',0),(7404,7404,'accessories/wieldable_items/weapons/exp04/fist/exp04_fist_ornate_knuckledusters',0),(7405,7405,'accessories/wieldable_items/weapons/exp04/2h_crush/exp04_2hc_sarnak_skull_staff',0),(7406,7406,'accessories/wieldable_items/weapons/exp04/1h_pierce/exp04_1hp_dual_bladed_stiletto',0),(7407,7407,'accessories/wieldable_items/weapons/exp04/staff/exp04_staff_spiked_staff',0),(7408,7408,'accessories/wieldable_items/weapons/exp04/pike/exp04_pike_fisherman_trident',0),(7409,7409,'accessories/wieldable_items/weapons/exp04/bow/exp04_bow_ornate_bow',0),(7410,7410,'accessories/wieldable_items/weapons/exp04/shield/exp04_shld_spiney_shield_shield',0),(7411,7411,'accessories/wieldable_items/weapons/exp04/fist/exp04_fist_dull_ulak',0),(7412,7412,'accessories/wieldable_items/weapons/exp04/2h_crush/exp04_2hc_iksar_skull_staff',0),(7413,7413,'accessories/wieldable_items/weapons/exp04/1h_sword/exp04_1hs_dragon_axe',0),(7414,7414,'accessories/wieldable_items/weapons/exp04/1h_crush/exp04_1hc_jagged_mace',0),(7415,7415,'accessories/wieldable_items/weapons/exp04/1h_pierce/exp04_1hp_dragonhilt_dagger',0),(7416,7416,'accessories/wieldable_items/weapons/exp04/1h_sword/exp04_1hs_cleaver_sword',0),(7417,7417,'accessories/wieldable_items/weapons/exp04/2h_crush/exp04_2hc_spiked_hammer',0),(7418,7418,'accessories/wieldable_items/weapons/exp04/pike/exp04_pike_spikey_spear',0),(7419,7419,'accessories/wieldable_items/weapons/exp04/shield/exp04_shld_sebilisian_shield',0),(7420,7420,'accessories/wieldable_items/weapons/exp04/2h_sword/exp04_2hs_jagged_sword',0),(7421,7421,'accessories/wearable_items01/_exp03/kaladim_bruiser_gi_01/feet',0),(7422,7422,'accessories/wieldable_items/weapons/exp04/2h_sword/exp04_2hs_cleaver_sword',0),(7423,7423,'_exp04/tool_users/drolvarg_berserker',0),(7424,7424,'_exp04/tool_users/drolvarg_priest',0),(7425,7425,'_exp04/tool_users/drolvarg_warrior',0),(7426,7426,'projectiles/lava_rock_burning',0),(7427,7427,'staticobjects/pictures/df_painting04_dpo',0),(7428,7428,'accessories/wieldable_items/weapons/exp04/_epic/1h_crush/exp04_1hc_cudgel_of_obviation',0),(7429,7429,'accessories/wieldable_items/weapons/exp04/_epic/1h_crush/exp04_1hc_dragons_marrow',0),(7430,7430,'accessories/wieldable_items/weapons/exp04/_epic/1h_crush/exp04_1hc_elemental_dominance',0),(7431,7431,'accessories/wieldable_items/weapons/exp04/_epic/1h_crush/exp04_1hc_eye_of_siren',0),(7432,7432,'accessories/wieldable_items/weapons/exp04/_epic/1h_crush/exp04_1hc_penitents_absolution',0),(7433,7433,'accessories/wieldable_items/weapons/exp04/_epic/1h_crush/exp04_1hc_the_impact_of_the_sacrosanct',0),(7434,7434,'accessories/wieldable_items/weapons/exp04/_epic/1h_crush/exp04_1hc_torrid_gore',0),(7435,7435,'accessories/wieldable_items/weapons/exp04/_epic/1h_pierce/exp04_1hp_charms_way',0),(7436,7436,'accessories/wieldable_items/weapons/exp04/_epic/1h_pierce/exp04_1hp_deaths_grip',0),(7437,7437,'accessories/wieldable_items/weapons/exp04/_epic/1h_pierce/exp04_1hp_fang_of_ichor',0),(7438,7438,'accessories/wieldable_items/weapons/exp04/_epic/1h_sword/exp04_1hs_ayonic_axe',0),(7439,7439,'accessories/wieldable_items/weapons/exp04/_epic/1h_sword/exp04_1hs_dragons_temper',0),(7440,7440,'accessories/wieldable_items/weapons/exp04/_epic/1h_sword/exp04_1hs_fire_of_the_stalwart',0),(7441,7441,'accessories/wieldable_items/weapons/exp04/_epic/1h_sword/exp04_1hs_lamentation_of_the_intrepid',0),(7442,7442,'accessories/wieldable_items/weapons/exp04/_epic/1h_sword/exp04_1hs_night_terror',0),(7443,7443,'accessories/wieldable_items/weapons/exp04/_epic/1h_sword/exp04_1hs_sedition',0),(7444,7444,'accessories/wieldable_items/weapons/exp04/_epic/1h_sword/exp04_1hs_the_bite_of_the_wolf',0),(7445,7445,'accessories/wieldable_items/weapons/exp04/_epic/1h_sword/exp04_1hs_the_truth_of_marr',0),(7446,7446,'accessories/wieldable_items/weapons/exp04/_epic/1h_sword/exp04_1hs_wrath_of_nature',0),(7447,7447,'accessories/wieldable_items/weapons/exp04/_epic/bow/exp04_bow_eagles_talon',0),(7448,7448,'accessories/wieldable_items/weapons/exp04/_epic/fist/exp04_fist_gorynn\'s_fist',0),(7449,7449,'accessories/wieldable_items/weapons/exp04/_epic/fist/exp04_fist_hand_of_serenity',0),(7450,7450,'accessories/wieldable_items/weapons/exp04/_epic/pike/exp04_pike_dream_scorcher',0),(7451,7451,'accessories/wieldable_items/weapons/exp04/_epic/1h_crush/exp04_1hc_mirage_star',0),(7452,7452,'accessories/wearable_items/_exp08/dragon_armor/leather1_red/feet',1096),(7453,7453,'accessories/wieldable_items/weapons/exp04/2h_sword/exp04_2hs_dragon',0),(7454,7454,'_exp04/tool_users/golem_jade',0),(7455,7455,'staticobjects/pictures/df_painting01_dpo',0),(7456,7456,'staticobjects/pictures/df_painting02_dpo',0),(7457,7457,'staticobjects/pictures/df_painting03_dpo',0),(7458,7458,'staticobjects/pictures/df_painting05_dpo',0),(7459,7459,'staticobjects/pictures/df_painting06_dpo',0),(7460,7460,'staticobjects/light_sources_player_housing_only/dt_bee_walllamp01_dpo',0),(7461,7461,'staticobjects/light_sources_player_housing_only/dt_wall_lamp01_dpo',0),(7462,7462,'staticobjects/plants/dt_flowerpot01_dpo',0),(7463,7463,'staticobjects/plants/dt_flowerpot02_dpo',0),(7464,7464,'staticobjects/dpo_invisible_wall/invisible_wall_sof_well_drwy',0),(7465,7465,'_exp04/tool_users/golem_iron',0),(7466,7466,'staticobjects/dpo_invisible_cube/wisp_collision',0),(7467,7467,'accessories/wearable_items/_exp04/dragon_chain/chest',0),(7468,7468,'accessories/wearable_items/_exp04/dragon_chain/feet',0),(7469,7469,'accessories/wearable_items/_exp04/dragon_chain/forearms',0),(7470,7470,'accessories/wearable_items/_exp04/dragon_chain/hands',0),(7471,7471,'accessories/wearable_items/_exp04/dragon_chain/head',0),(7472,7472,'accessories/wearable_items/_exp04/dragon_chain/legs',0),(7473,7473,'accessories/wearable_items/_exp04/dragon_chain/legs_noskirt',0),(7474,7474,'accessories/wearable_items/_exp04/dragon_chain/shoulders',0),(7475,7475,'accessories/wearable_items/_exp04/dragon_chain/skirt',0),(7476,7476,'accessories/wearable_items/_exp04/dragon_gi/chest',0),(7477,7477,'accessories/wearable_items/_exp04/dragon_gi/pants',0),(7478,7478,'accessories/wearable_items/_exp04/dragon_gi/shoulders',0),(7479,7479,'accessories/wearable_items/_exp04/dragon_leather/chest',0),(7480,7480,'accessories/wearable_items/_exp04/dragon_leather/feet',0),(7481,7481,'accessories/wearable_items/_exp04/dragon_leather/forearms',0),(7482,7482,'accessories/wearable_items/_exp04/dragon_leather/hands',0),(7483,7483,'accessories/wearable_items/_exp04/dragon_leather/head',0),(7484,7484,'accessories/wearable_items/_exp04/dragon_leather/legs',0),(7485,7485,'accessories/wearable_items/_exp04/dragon_leather/legs_noskirt',0),(7486,7486,'accessories/wearable_items/_exp04/dragon_leather/shoulders',0),(7487,7487,'accessories/wearable_items/_exp04/dragon_leather/skirt',0),(7488,7488,'accessories/wearable_items/_exp04/dragon_robe/chest',0),(7489,7489,'accessories/wearable_items/_exp04/dragon_robe/hood',0),(7490,7490,'accessories/wearable_items/_exp04/dragon_robe/pants',0),(7491,7491,'accessories/wearable_items/_exp04/dragon_robe/skirt',0),(7492,7492,'accessories/wearable_items/_exp04/dragon_vanguard/chest',0),(7493,7493,'accessories/wearable_items/_exp04/dragon_vanguard/feet',0),(7494,7494,'accessories/wearable_items/_exp04/dragon_vanguard/forearms',0),(7495,7495,'accessories/wearable_items/_exp04/dragon_vanguard/hands',0),(7496,7496,'accessories/wearable_items/_exp04/dragon_vanguard/head',0),(7497,7497,'accessories/wearable_items/_exp04/dragon_vanguard/legs',0),(7498,7498,'accessories/wearable_items/_exp04/dragon_vanguard/legs_noskirt',0),(7499,7499,'accessories/wearable_items/_exp04/dragon_vanguard/shoulders',0),(7500,7500,'accessories/wearable_items/_exp04/dragon_vanguard/shoulders_nopauldrons',0),(7501,7501,'accessories/wearable_items/_exp04/dragon_vanguard/skirt',0),(7502,7502,'accessories/wearable_items/_exp04/dragon_vanguard_priest/chest',0),(7503,7503,'accessories/wearable_items/_exp04/dragon_vanguard_priest/feet',0),(7504,7504,'accessories/wearable_items/_exp04/dragon_vanguard_priest/forearms',0),(7505,7505,'accessories/wearable_items/_exp04/dragon_vanguard_priest/hands',0),(7506,7506,'accessories/wearable_items/_exp04/dragon_vanguard_priest/head',0),(7507,7507,'accessories/wearable_items/_exp04/dragon_vanguard_priest/legs',0),(7508,7508,'accessories/wearable_items/_exp04/dragon_vanguard_priest/legs_noskirt',0),(7509,7509,'accessories/wearable_items/_exp04/dragon_vanguard_priest/shoulders',0),(7510,7510,'accessories/wearable_items/_exp04/dragon_vanguard_priest/shoulders_nopauldrons',0),(7511,7511,'accessories/wearable_items/_exp04/dragon_vanguard_priest/skirt',0),(7512,7512,'accessories/wearable_items/_exp04/iksar_chain/chest',0),(7513,7513,'accessories/wearable_items/_exp04/iksar_chain/feet',0),(7514,7514,'accessories/wearable_items/_exp04/iksar_chain/forearms',0),(7515,7515,'accessories/wearable_items/_exp04/iksar_chain/hands',0),(7516,7516,'accessories/wearable_items/_exp04/iksar_chain/head',0),(7517,7517,'accessories/wearable_items/_exp04/iksar_chain/legs',0),(7518,7518,'accessories/wearable_items/_exp04/iksar_chain/legs_noskirt',0),(7519,7519,'accessories/wearable_items/_exp04/iksar_chain/shoulders',0),(7520,7520,'accessories/wearable_items/_exp04/iksar_chain/skirt',0),(7521,7521,'accessories/wearable_items/_exp04/iksar_gi/chest',0),(7522,7522,'accessories/wearable_items/_exp04/iksar_gi/pants',0),(7523,7523,'accessories/wearable_items/_exp04/iksar_gi/shoulders',0),(7524,7524,'accessories/wearable_items/_exp04/iksar_leather/chest',0),(7525,7525,'accessories/wearable_items/_exp04/iksar_leather/feet',0),(7526,7526,'accessories/wearable_items/_exp04/iksar_leather/forearms',0),(7527,7527,'accessories/wearable_items/_exp04/iksar_leather/hands',0),(7528,7528,'accessories/wearable_items/_exp04/iksar_leather/head',0),(7529,7529,'accessories/wearable_items/_exp04/iksar_leather/legs',0),(7530,7530,'accessories/wearable_items/_exp04/iksar_leather/legs_noskirt',0),(7531,7531,'accessories/wearable_items/_exp04/iksar_leather/shoulders',0),(7532,7532,'accessories/wearable_items/_exp04/iksar_leather/skirt',0),(7533,7533,'accessories/wearable_items/_exp04/iksar_robe/chest',0),(7534,7534,'accessories/wearable_items/_exp04/iksar_robe/hood',0),(7535,7535,'accessories/wearable_items/_exp04/iksar_robe/pants',0),(7536,7536,'accessories/wearable_items/_exp04/iksar_robe/skirt',0),(7537,7537,'accessories/wearable_items/_exp04/iksar_vanguard/chest',0),(7538,7538,'accessories/wearable_items/_exp04/iksar_vanguard/feet',0),(7539,7539,'accessories/wearable_items/_exp04/iksar_vanguard/forearms',0),(7540,7540,'accessories/wearable_items/_exp04/iksar_vanguard/hands',0),(7541,7541,'accessories/wearable_items/_exp04/iksar_vanguard/head',0),(7542,7542,'accessories/wearable_items/_exp04/iksar_vanguard/legs',0),(7543,7543,'accessories/wearable_items/_exp04/iksar_vanguard/legs_noskirt',0),(7544,7544,'accessories/wearable_items/_exp08/dragon_armor/leather1_red/forearms',1096),(7545,7545,'accessories/wearable_items/_exp04/iksar_vanguard/shoulders',0),(7546,7546,'accessories/wearable_items/_exp04/iksar_vanguard/shoulders_nopauldrons',0),(7547,7547,'accessories/wearable_items/_exp04/iksar_vanguard/skirt',0),(7548,7548,'accessories/wearable_items/_exp04/sarnak_chain/chest',0),(7549,7549,'accessories/wearable_items/_exp04/sarnak_chain/feet',0),(7550,7550,'accessories/wearable_items/_exp04/sarnak_chain/forearms',0),(7551,7551,'accessories/wearable_items/_exp04/sarnak_chain/hands',0),(7552,7552,'accessories/wearable_items/_exp04/sarnak_chain/head',0),(7553,7553,'accessories/wearable_items/_exp04/sarnak_chain/legs',0),(7554,7554,'accessories/wearable_items/_exp04/sarnak_chain/legs_noskirt',0),(7555,7555,'accessories/wearable_items/_exp04/sarnak_chain/shoulders',0),(7556,7556,'accessories/wearable_items/_exp04/sarnak_chain/skirt',0),(7557,7557,'accessories/wearable_items/_exp04/sarnak_chain_caster/chest',0),(7558,7558,'accessories/wearable_items/_exp04/sarnak_chain_caster/feet',0),(7559,7559,'accessories/wearable_items/_exp04/sarnak_chain_caster/forearms',0),(7560,7560,'accessories/wearable_items/_exp04/sarnak_chain_caster/hands',0),(7561,7561,'accessories/wearable_items/_exp04/sarnak_chain_caster/head',0),(7562,7562,'accessories/wearable_items/_exp04/sarnak_chain_caster/legs',0),(7563,7563,'accessories/wearable_items/_exp04/sarnak_chain_caster/legs_noskirt',0),(7564,7564,'accessories/wearable_items/_exp04/sarnak_chain_caster/shoulders',0),(7565,7565,'accessories/wearable_items/_exp04/sarnak_chain_caster/skirt',0),(7566,7566,'accessories/wearable_items/_exp04/sarnak_leather/chest',0),(7567,7567,'accessories/wearable_items/_exp04/sarnak_leather/feet',0),(7568,7568,'accessories/wearable_items/_exp04/sarnak_leather/forearms',0),(7569,7569,'accessories/wearable_items/_exp04/sarnak_leather/hands',0),(7570,7570,'accessories/wearable_items/_exp04/sarnak_leather/head',0),(7571,7571,'accessories/wearable_items/_exp04/sarnak_leather/legs',0),(7572,7572,'accessories/wearable_items/_exp04/sarnak_leather/legs_noskirt',0),(7573,7573,'accessories/wearable_items/_exp04/sarnak_leather/shoulders',0),(7574,7574,'accessories/wearable_items/_exp04/sarnak_leather/skirt',0),(7575,7575,'accessories/wearable_items/_exp04/sarnak_robe/chest',0),(7576,7576,'accessories/wearable_items/_exp04/sarnak_robe/hood',0),(7577,7577,'accessories/wearable_items/_exp04/sarnak_robe/pants',0),(7578,7578,'accessories/wearable_items/_exp04/sarnak_robe/skirt',0),(7579,7579,'accessories/wearable_items/_exp04/sarnak_vanguard/chest',0),(7580,7580,'accessories/wearable_items/_exp04/sarnak_vanguard/feet',0),(7581,7581,'accessories/wearable_items/_exp04/sarnak_vanguard/forearms',0),(7582,7582,'accessories/wearable_items/_exp04/sarnak_vanguard/hands',0),(7583,7583,'accessories/wearable_items/_exp04/sarnak_vanguard/head',0),(7584,7584,'accessories/wearable_items/_exp04/sarnak_vanguard/legs',0),(7585,7585,'accessories/wearable_items/_exp04/sarnak_vanguard/legs_noskirt',0),(7586,7586,'accessories/wearable_items/_exp04/sarnak_vanguard/shoulders',0),(7587,7587,'accessories/wearable_items/_exp04/sarnak_vanguard/shoulders_nopauldrons',0),(7588,7588,'accessories/wearable_items/_exp04/sarnak_vanguard/skirt',0),(7589,7589,'projectiles/cow_launched',0),(7590,7590,'_exp04/zones/objects/jarsath_wastes/jw_barricade01_iksar',0),(7591,7591,'_exp04/monsters/trakanon',0),(7592,7592,'accessories/wearable_items/_exp08/dragon_armor/leather1_red/hands',1096),(7593,7593,'projectiles/spell_beehive',0),(7594,7594,'_exp04/zones/objects/veeshans_peak/field_generator/vp_fieldgenerator_base01',0),(7595,7595,'_exp04/zones/objects/veeshans_peak/weapon_rack/vp_weapon_rack01',0),(7596,7596,'_exp04/zones/objects/timorous_deep/spiroc_cage',0),(7597,7597,'_exp04/zones/objects/timorous_deep/spiroc_cagedoor',0),(7598,7598,'_exp04/tool_users/drolvarg_pawbuster',0),(7599,7599,'accessories/wieldable_items/weapons/staff/escrima/escrima002_bristlebane',0),(7600,7600,'_exp04/monsters/clay_golem_magma',0),(7601,7601,'staticobjects/deity_altars/altar_bristlebane_basic',0),(7602,7602,'staticobjects/deity_altars/altar_bristlebane_crafted',0),(7603,7603,'staticobjects/deity_altars/altar_bristlebane_exceptional',0),(7604,7604,'staticobjects/bookcases/qey_bookcase_ornate001_dpo',0),(7605,7605,'staticobjects/bookcases/qey_bookcase_plain001_dpo',0),(7606,7606,'staticobjects/games/qey_gametable_card_withcards001_dpo',0),(7607,7607,'staticobjects/light_sources_player_housing_only/vrsn_candelabra01_skel_dpo',0),(7608,7608,'staticobjects/light_sources_player_housing_only/vrsn_torch01_wall_green_dpo',0),(7609,7609,'staticobjects/light_sources_player_housing_only/vrsn_torch02_wall_green_dpo',0),(7610,7610,'staticobjects/pictures/qey_painting_billportrait001_dpo',0),(7611,7611,'staticobjects/pictures/qey_painting_claymore001_dpo',0),(7612,7612,'staticobjects/pictures/qey_painting_horseknight001_dpo',0),(7613,7613,'staticobjects/bookcases/fprt_bookcase_smallornate03_dpo',0),(7614,7614,'staticobjects/bookcases/nk_obj_bookcase_large01_dpo',0),(7615,7615,'staticobjects/counters/nk_obj_counterlarge01_dpo',0),(7616,7616,'staticobjects/counters/nk_obj_counterlarge03_dpo',0),(7617,7617,'staticobjects/counters/nk_obj_counternormal01_dpo',0),(7618,7618,'staticobjects/chairs/nk_obj_chair_ornate_metal01_dpo',0),(7619,7619,'staticobjects/tables/nk_obj_table_ornate01_dpo',0),(7620,7620,'staticobjects/beds/nk_obj_ornate_metal_bed01_dpo',0),(7621,7621,'staticobjects/beds/nk_obj_darklight_palace_bed01_dpo',0),(7622,7622,'staticobjects/chairs/nk_obj_brotherhood_dpo',0),(7623,7623,'staticobjects/light_sources_player_housing_only/dw_obj_chandelier_gothic01_red_dpo',0),(7624,7624,'staticobjects/light_sources_player_housing_only/dw_obj_chandelier_crystal01_green_dpo',0),(7625,7625,'_exp04/zones/objects/misc/hitching_post',0),(7626,7626,'staticobjects/games/qey_gametable_roundcard_withcards001_dpo',0),(7627,7627,'_exp04/monsters/skyfiredrake_cinder',0),(7628,7628,'_exp04/zones/objects/veeshans_peak/field_generator/vp_fieldgenerator_base02',0),(7629,7629,'accessories/wearable_items/_exp08/dragon_armor/leather1_red/head',1096),(7630,7630,'_exp04/zones/objects/veeshans_peak/vp_teleporter',0),(7631,7631,'_exp04/monsters/dragon_skeleton',0),(7632,7632,'_exp04/monsters/hoshkar',0),(7633,7633,'_exp04/monsters/nexona',0),(7634,7634,'_exp04/monsters/phara_dar',0),(7635,7635,'_exp04/monsters/silverwing',0),(7636,7636,'_exp04/tool_users/burynai_caster',0),(7637,7637,'_exp04/tool_users/burynai_warrior',0),(7638,7638,'_exp04/tool_users/iksar_skeleton',0),(7639,7639,'_exp04/tool_users/mountain_giant',0),(7640,7640,'_exp04/tool_users/xalgoz',0),(7641,7641,'_exp04/monsters/behemoth_medusa',0),(7642,7642,'ec/npc/zombie_fresh_male_halfling',0),(7643,7643,'_exp04/zones/objects/misc/sebilis_obj_gate02',0),(7644,7644,'staticobjects/boats/fullboat',0),(7645,7645,'_exp04/monsters/fishman_scout',0),(7646,7646,'_exp04/tool_users/fishman_scout_tu',0),(7647,7647,'staticobjects/dpo_invisible_cube/dpo_invisible_cube_bigger',0),(7648,7648,'_exp04/tool_users/froglok_kunark_chain',0),(7649,7649,'_exp04/zones/objects/chardok/char_totem',0),(7650,7650,'staticobjects/crates/floor_crate_sebilis_closed01',0),(7651,7651,'_exp04/zones/objects/charasis/cha_crystal_purple01',0),(7652,7652,'_exp04/zones/objects/charasis/cha_crystal_turquoise01',0),(7653,7653,'_exp04/zones/objects/charasis/cha_crystal01_invisiblepurple',0),(7654,7654,'_exp04/zones/objects/charasis/cha_crystal01_invisibleturquoise',0),(7655,7655,'_exp04/zones/objects/sebilis/desk_torch',0),(7656,7656,'staticobjects/eig/eig_harvest_location_green',0),(7657,7657,'staticobjects/eig/eig_harvest_location_purple',0),(7658,7658,'staticobjects/eig/eig_harvest_location_red',0),(7659,7659,'_exp04/zones/objects/fens_of_nathsar/riliss_pen_fence',0),(7660,7660,'staticobjects/candles/df_candelabra02_dpo',0),(7661,7661,'staticobjects/torture_chamber/df_bars01_dpo',0),(7662,7662,'staticobjects/torture_chamber/df_shackle03_dpo',0),(7663,7663,'staticobjects/torture_chamber/bef_stolentorturechair001_dpo',0),(7664,7664,'staticobjects/platforms/df_banquetplatform_dpo',0),(7665,7665,'staticobjects/torture_chamber/df_torturestockade01_dpo',0),(7666,7666,'staticobjects/torture_chamber/df_torturetable01_dpo',0),(7667,7667,'staticobjects/torture_chamber/df_torturechair01_dpo',0),(7668,7668,'staticobjects/light_sources_player_housing_only/orc_roadsign_dpo',0),(7669,7669,'staticobjects/platforms/df_dais02_dpo',0),(7670,7670,'staticobjects/pillars/df_thronepillar01_dpo',0),(7671,7671,'staticobjects/light_sources_player_housing_only/df_columnfire_dpo',0),(7672,7672,'staticobjects/light_sources_player_housing_only/orc_brazier02_dpo',0),(7673,7673,'staticobjects/beds/df_emperorbed01_dpo',0),(7674,7674,'staticobjects/tapestry/df_drapes01_dpo',0),(7675,7675,'staticobjects/light_sources_player_housing_only/df_torch02_dpo',0),(7676,7676,'staticobjects/candles/df_candle03_dpo',0),(7677,7677,'staticobjects/torture_chamber/df_skeletonbox01_dpo',0),(7678,7678,'staticobjects/torture_chamber/df_skeletonbox006_dpo',0),(7679,7679,'staticobjects/torture_chamber/df_skeletonbox03_dpo',0),(7680,7680,'staticobjects/torture_chamber/df_spearedskele02_dpo',0),(7681,7681,'accessories/wearable_items/_exp08/dragon_armor/leather1_red/legs',1096),(7682,7682,'_exp04/monsters/behemoth_piercer',0),(7683,7683,'_exp04/tool_users/drusella_sathir',0),(7684,7684,'_exp04/zones/objects/jarsath_wastes/lava_hrvst_fish_shallow',0),(7685,7685,'accessories/wearable_items01/_exp00/magus/artifact/high/legs',0),(7686,7686,'accessories/wearable_items01/_exp00/magus/artifact/high/feet',0),(7687,7687,'_exp04/monsters/clay_golem_storm',0),(7688,7688,'accessories/wearable_items/_exp08/dragon_armor/leather1_red/legs_noskirt',1096),(7689,7689,'ec/pc01/sarnak_female/sarnak_female_thin02',0),(7690,7690,'ec/pc01/sarnak_female/sarnak_female_thin03',0),(7691,7691,'staticobjects/armor/brigandine_iksar_male_chest',0),(7692,7692,'accessories/wieldable_items/weapons/exp04/1h_sword/exp04_1hs_translucent_sword',0),(7693,7693,'accessories/wieldable_items/weapons/exp04/1h_crush/exp04_1hc_flailcensor',0),(7694,7694,'accessories/wieldable_items/weapons/exp04/2h_sword/exp04_2hs_translucent_greatsword',0),(7695,7695,'accessories/wieldable_items/weapons/exp04/1h_sword/exp04_1hs_hook_dagger',0),(7696,7696,'accessories/wieldable_items/weapons/exp04/1h_sword/exp04_1hs_pronged_sword',0),(7697,7697,'accessories/wieldable_items/weapons/exp04/1h_pierce/exp04_1hp_flame_dagger',0),(7698,7698,'accessories/wieldable_items/weapons/exp04/shield/exp04_shld_dragonscale_shield',0),(7699,7699,'accessories/wieldable_items/weapons/exp04/1h_sword/exp04_1hs_hooked_sword',0),(7700,7700,'accessories/wieldable_items/weapons/exp04/shield/exp04_shld_tiki_shield',0),(7701,7701,'accessories/wieldable_items/weapons/exp04/1h_pierce/exp04_1hp_vampiric_sacrificial_dagger',0),(7702,7702,'accessories/wieldable_items/weapons/exp04/shield/exp04_shld_diamond_shield',0),(7703,7703,'staticobjects/plants/qey_objects_treeplanter01_dpo',0),(7704,7704,'staticobjects/light_sources_player_housing_only/halfling_streetlamp01_sm_dpo',0),(7705,7705,'staticobjects/light_sources_player_housing_only/halfling_streetlamp01_pot_lrg_dpo',0),(7706,7706,'staticobjects/light_sources_player_housing_only/halfling_streetlamp01_lrg_dpo',0),(7707,7707,'staticobjects/light_sources_player_housing_only/halfling_streetlamp01_pot_sm_dpo',0),(7708,7708,'staticobjects/tools/qey_3towers_hourglass001_dpo',0),(7709,7709,'staticobjects/tools/fprt_scribe_inkwellornate01_dpo',0),(7710,7710,'staticobjects/tools/fprt_bank_scalestipped01_dpo',0),(7711,7711,'_exp04/zones/objects/sebilis/audiencechamber_door',0),(7712,7712,'_exp04/zones/objects/veeshans_peak/vp_light_game_door_barrier',0),(7713,7713,'_exp04/tool_users/venril_sathir',0),(7714,7714,'ui_fx/fx/systems/wieldables/1h_sword_invisible',0),(7715,7715,'ui_fx/fx/systems/wieldables/1h_crush_invisible',0),(7716,7716,'accessories/wieldable_items/weapons/exp04/2h_crush/exp04_2hc_mage_staff',0),(7717,7717,'_exp04/zones/objects/veeshans_peak/eggs/vp_dragoneggs_broken01',0),(7718,7718,'_exp04/zones/objects/veeshans_peak/eggs/vp_dragoneggs_broken02',0),(7719,7719,'_exp04/zones/objects/veeshans_peak/eggs/vp_dragoneggs_unbroken01',0),(7720,7720,'_exp04/zones/objects/veeshans_peak/eggs/vp_dragoneggs_unbroken02',0),(7721,7721,'_exp04/zones/objects/veeshans_peak/switch_block/vp_switchblock_base',0),(7722,7722,'_exp04/zones/objects/veeshans_peak/switch_block/vp_switchblock_switch',0),(7723,7723,'_exp04/zones/objects/chardok/chardok_bunks01',0),(7724,7724,'_exp04/zones/objects/chardok/chardok_bunks02',0),(7725,7725,'_exp04/monsters/behemoth_basher',0),(7726,7726,'_exp04/monsters/behemoth_eyestalk',0),(7727,7727,'_exp04/monsters/behemoth_main',0),(7728,7728,'_exp04/monsters/behemoth_spitter',0),(7729,7729,'_exp04/zones/objects/veeshans_peak/statues/vp_ring_of_scale01',0),(7730,7730,'accessories/wieldable_items/weapons/exp04/1h_crush/exp04_1hc_crystal_wand',0),(7731,7731,'accessories/wearable_items/starter_clothes/sarnak_male/chest',0),(7732,7732,'accessories/wearable_items/starter_clothes/sarnak_male/legs',0),(7733,7733,'accessories/wearable_items/starter_clothes/sarnak_female/chest',0),(7734,7734,'accessories/wearable_items/starter_clothes/sarnak_female/legs',0),(7735,7735,'_exp04/zones/objects/charasis/cha_totem_south',0),(7736,7736,'_exp04/zones/objects/charasis/cha_canopic_vase02',0),(7737,7737,'accessories/wieldable_items/weapons/exp04/talisman/exp04_tribal_idol',0),(7738,7738,'accessories/wieldable_items/weapons/exp04/1h_crush/exp04_1hc_golden_wand',0),(7739,7739,'creatures/tu/gods_tribunal',0),(7740,7740,'accessories/wieldable_items/weapons/exp04/orb/exp04_orb_multicolored_glass_ball',0),(7741,7741,'creatures/monsters/crab_timorous',0),(7742,7742,'creatures/monsters/griffin_tintable',0),(7743,7743,'_exp04/zones/objects/chardok/char_lever_wall_base01',0),(7744,7744,'_exp04/zones/objects/chardok/char_lever_wall_switch01',0),(7745,7745,'staticobjects/interiors/scenes/objects_race/dp_objects/tcg_items/tcg_venril_painting01',0),(7746,7746,'accessories/wieldable_items/weapons/exp04/shield/exp04_shld_sarnak_shield',0),(7747,7747,'accessories/wieldable_items/weapons/exp04/shield/exp04_shld_unusual_shield',0),(7748,7748,'_exp04/zones/objects/chardok/sarnak_barricade',0),(7749,7749,'accessories/wieldable_items/shields/exp04/exp04_small_held_symbol_green_praetor',0),(7750,7750,'accessories/wieldable_items/shields/exp04/exp04_small_held_symbol_blue_ice',0),(7751,7751,'accessories/wieldable_items/shields/exp04/exp04_small_held_symbol_green_poison',0),(7752,7752,'accessories/wieldable_items/shields/exp04/exp04_small_held_symbol_red_fire',0),(7753,7753,'accessories/wearable_items/_exp08/dragon_armor/leather1_red/shoulders',1096),(7754,7754,'accessories/wieldable_items/weapons/exp04/shield/exp04_shld_shipwheel_shield01',0),(7755,7755,'accessories/wieldable_items/weapons/exp04/shield/exp04_shld_shipwheel_shield02',0),(7756,7756,'accessories/wieldable_items/weapons/exp04/shield/exp04_shld_shipwheel_shield03',0),(7757,7757,'staticobjects/deity_altars/altar_bertoxxulous_basic',0),(7758,7758,'staticobjects/deity_altars/altar_bertoxxulous_crafted',0),(7759,7759,'staticobjects/deity_altars/altar_bertoxxulous_exceptional',0),(7760,7760,'staticobjects/deity_altars/altar_karana_basic',0),(7761,7761,'staticobjects/deity_altars/altar_karana_crafted',0),(7762,7762,'staticobjects/deity_altars/altar_karana_exceptional',0),(7763,7763,'staticobjects/deity_altars/altar_tribunal_basic',0),(7764,7764,'staticobjects/deity_altars/altar_tribunal_crafted',0),(7765,7765,'staticobjects/deity_altars/altar_tribunal_exceptional',0),(7766,7766,'accessories/wearable_items01/_exp04/dragon_chain/chest',0),(7767,7767,'accessories/wearable_items01/_exp04/dragon_chain/feet',0),(7768,7768,'accessories/wearable_items01/_exp04/dragon_chain/forearms',0),(7769,7769,'accessories/wearable_items01/_exp04/dragon_chain/hands',0),(7770,7770,'accessories/wearable_items01/_exp04/dragon_chain/head',0),(7771,7771,'accessories/wearable_items01/_exp04/dragon_chain/legs',0),(7772,7772,'accessories/wearable_items01/_exp04/dragon_chain/legs_noskirt',0),(7773,7773,'accessories/wearable_items01/_exp04/dragon_chain/shoulders',0),(7774,7774,'accessories/wearable_items01/_exp04/dragon_chain/skirt',0),(7775,7775,'accessories/wearable_items01/_exp04/dragon_gi/chest',0),(7776,7776,'accessories/wearable_items01/_exp04/dragon_gi/pants',0),(7777,7777,'accessories/wearable_items01/_exp04/dragon_gi/shoulders',0),(7778,7778,'accessories/wearable_items01/_exp04/dragon_leather/chest',0),(7779,7779,'accessories/wearable_items01/_exp04/dragon_leather/feet',0),(7780,7780,'accessories/wearable_items01/_exp04/dragon_leather/forearms',0),(7781,7781,'accessories/wearable_items01/_exp04/dragon_leather/hands',0),(7782,7782,'accessories/wearable_items01/_exp04/dragon_leather/head',0),(7783,7783,'accessories/wearable_items01/_exp04/dragon_leather/legs',0),(7784,7784,'accessories/wearable_items01/_exp04/dragon_leather/legs_noskirt',0),(7785,7785,'accessories/wearable_items01/_exp04/dragon_leather/shoulders',0),(7786,7786,'accessories/wearable_items01/_exp04/dragon_leather/skirt',0),(7787,7787,'accessories/wearable_items01/_exp04/dragon_robe/chest',0),(7788,7788,'accessories/wearable_items01/_exp04/dragon_robe/hood',0),(7789,7789,'accessories/wearable_items01/_exp04/dragon_robe/pants',0),(7790,7790,'accessories/wearable_items01/_exp04/dragon_robe/skirt',0),(7791,7791,'accessories/wearable_items01/_exp04/dragon_vanguard/chest',0),(7792,7792,'accessories/wearable_items01/_exp04/dragon_vanguard/feet',0),(7793,7793,'accessories/wearable_items01/_exp04/dragon_vanguard/forearms',0),(7794,7794,'accessories/wearable_items01/_exp04/dragon_vanguard/hands',0),(7795,7795,'accessories/wearable_items01/_exp04/dragon_vanguard/head',0),(7796,7796,'accessories/wearable_items01/_exp04/dragon_vanguard/legs',0),(7797,7797,'accessories/wearable_items01/_exp04/dragon_vanguard/legs_noskirt',0),(7798,7798,'accessories/wearable_items01/_exp04/dragon_vanguard/right',0),(7799,7799,'accessories/wearable_items01/_exp04/dragon_vanguard/shoulders',0),(7800,7800,'accessories/wearable_items01/_exp04/dragon_vanguard/shoulders_nopauldrons',0),(7801,7801,'accessories/wearable_items01/_exp04/dragon_vanguard/skirt',0),(7802,7802,'accessories/wearable_items01/_exp04/dragon_vanguard_priest/chest',0),(7803,7803,'accessories/wearable_items01/_exp04/dragon_vanguard_priest/feet',0),(7804,7804,'accessories/wearable_items01/_exp04/dragon_vanguard_priest/forearms',0),(7805,7805,'accessories/wearable_items01/_exp04/dragon_vanguard_priest/hands',0),(7806,7806,'accessories/wearable_items01/_exp04/dragon_vanguard_priest/head',0),(7807,7807,'accessories/wearable_items01/_exp04/dragon_vanguard_priest/legs',0),(7808,7808,'accessories/wearable_items01/_exp04/dragon_vanguard_priest/legs_noskirt',0),(7809,7809,'accessories/wearable_items01/_exp04/dragon_vanguard_priest/right',0),(7810,7810,'accessories/wearable_items01/_exp04/dragon_vanguard_priest/shoulders',0),(7811,7811,'accessories/wearable_items01/_exp04/dragon_vanguard_priest/shoulders_nopauldrons',0),(7812,7812,'accessories/wearable_items01/_exp04/dragon_vanguard_priest/skirt',0),(7813,7813,'accessories/wearable_items01/_exp04/iksar_chain/chest',0),(7814,7814,'accessories/wearable_items01/_exp04/iksar_chain/feet',0),(7815,7815,'accessories/wearable_items01/_exp04/iksar_chain/forearms',0),(7816,7816,'accessories/wearable_items01/_exp04/iksar_chain/hands',0),(7817,7817,'accessories/wearable_items01/_exp04/iksar_chain/head',0),(7818,7818,'accessories/wearable_items01/_exp04/iksar_chain/legs',0),(7819,7819,'accessories/wearable_items01/_exp04/iksar_chain/legs_noskirt',0),(7820,7820,'accessories/wearable_items01/_exp04/iksar_chain/shoulders',0),(7821,7821,'accessories/wearable_items01/_exp04/iksar_chain/skirt',0),(7822,7822,'accessories/wearable_items01/_exp04/iksar_gi/chest',0),(7823,7823,'accessories/wearable_items01/_exp04/iksar_gi/pants',0),(7824,7824,'accessories/wearable_items01/_exp04/iksar_gi/shoulders',0),(7825,7825,'accessories/wearable_items01/_exp04/iksar_leather/chest',0),(7826,7826,'accessories/wearable_items01/_exp04/iksar_leather/feet',0),(7827,7827,'accessories/wearable_items01/_exp04/iksar_leather/forearms',0),(7828,7828,'accessories/wearable_items01/_exp04/iksar_leather/hands',0),(7829,7829,'accessories/wearable_items01/_exp04/iksar_leather/head',0),(7830,7830,'accessories/wearable_items01/_exp04/iksar_leather/legs',0),(7831,7831,'accessories/wearable_items01/_exp04/iksar_leather/legs_noskirt',0),(7832,7832,'accessories/wearable_items01/_exp04/iksar_leather/shoulders',0),(7833,7833,'accessories/wearable_items01/_exp04/iksar_leather/skirt',0),(7834,7834,'accessories/wearable_items01/_exp04/iksar_robe/chest',0),(7835,7835,'accessories/wearable_items01/_exp04/iksar_robe/hood',0),(7836,7836,'accessories/wearable_items01/_exp04/iksar_robe/pants',0),(7837,7837,'accessories/wearable_items01/_exp04/iksar_robe/skirt',0),(7838,7838,'accessories/wearable_items01/_exp04/iksar_vanguard/chest',0),(7839,7839,'accessories/wearable_items01/_exp04/iksar_vanguard/feet',0),(7840,7840,'accessories/wearable_items01/_exp04/iksar_vanguard/forearms',0),(7841,7841,'accessories/wearable_items01/_exp04/iksar_vanguard/hands',0),(7842,7842,'accessories/wearable_items01/_exp04/iksar_vanguard/head',0),(7843,7843,'accessories/wearable_items01/_exp04/iksar_vanguard/legs',0),(7844,7844,'accessories/wearable_items01/_exp04/iksar_vanguard/legs_noskirt',0),(7845,7845,'accessories/wearable_items01/_exp04/iksar_vanguard/right',0),(7846,7846,'accessories/wearable_items01/_exp04/iksar_vanguard/shoulders',0),(7847,7847,'accessories/wearable_items01/_exp04/iksar_vanguard/shoulders_nopauldrons',0),(7848,7848,'accessories/wearable_items01/_exp04/iksar_vanguard/skirt',0),(7849,7849,'accessories/wearable_items01/_exp04/sarnak_chain/chest',0),(7850,7850,'accessories/wearable_items01/_exp04/sarnak_chain/feet',0),(7851,7851,'accessories/wearable_items01/_exp04/sarnak_chain/forearms',0),(7852,7852,'accessories/wearable_items01/_exp04/sarnak_chain/hands',0),(7853,7853,'accessories/wearable_items01/_exp04/sarnak_chain/head',0),(7854,7854,'accessories/wearable_items01/_exp04/sarnak_chain/legs',0),(7855,7855,'accessories/wearable_items01/_exp04/sarnak_chain/legs_noskirt',0),(7856,7856,'accessories/wearable_items01/_exp04/sarnak_chain/shoulders',0),(7857,7857,'accessories/wearable_items01/_exp04/sarnak_chain/skirt',0),(7858,7858,'accessories/wearable_items01/_exp04/sarnak_chain_caster/chest',0),(7859,7859,'accessories/wearable_items01/_exp04/sarnak_chain_caster/feet',0),(7860,7860,'accessories/wearable_items01/_exp04/sarnak_chain_caster/forearms',0),(7861,7861,'accessories/wearable_items01/_exp04/sarnak_chain_caster/hands',0),(7862,7862,'accessories/wearable_items01/_exp04/sarnak_chain_caster/head',0),(7863,7863,'accessories/wearable_items01/_exp04/sarnak_chain_caster/legs',0),(7864,7864,'accessories/wearable_items01/_exp04/sarnak_chain_caster/legs_noskirt',0),(7865,7865,'accessories/wearable_items01/_exp04/sarnak_chain_caster/shoulders',0),(7866,7866,'accessories/wearable_items01/_exp04/sarnak_chain_caster/skirt',0),(7867,7867,'accessories/wearable_items01/_exp04/sarnak_leather/chest',0),(7868,7868,'accessories/wearable_items01/_exp04/sarnak_leather/feet',0),(7869,7869,'accessories/wearable_items01/_exp04/sarnak_leather/forearms',0),(7870,7870,'accessories/wearable_items01/_exp04/sarnak_leather/hands',0),(7871,7871,'accessories/wearable_items01/_exp04/sarnak_leather/head',0),(7872,7872,'accessories/wearable_items01/_exp04/sarnak_leather/legs',0),(7873,7873,'accessories/wearable_items01/_exp04/sarnak_leather/legs_noskirt',0),(7874,7874,'accessories/wearable_items01/_exp04/sarnak_leather/shoulders',0),(7875,7875,'accessories/wearable_items01/_exp04/sarnak_leather/skirt',0),(7876,7876,'accessories/wearable_items01/_exp04/sarnak_robe/chest',0),(7877,7877,'accessories/wearable_items01/_exp04/sarnak_robe/hood',0),(7878,7878,'accessories/wearable_items01/_exp04/sarnak_robe/pants',0),(7879,7879,'accessories/wearable_items01/_exp04/sarnak_robe/skirt',0),(7880,7880,'accessories/wearable_items01/_exp04/sarnak_vanguard/chest',0),(7881,7881,'accessories/wearable_items01/_exp04/sarnak_vanguard/feet',0),(7882,7882,'accessories/wearable_items01/_exp04/sarnak_vanguard/forearms',0),(7883,7883,'accessories/wearable_items01/_exp04/sarnak_vanguard/hands',0),(7884,7884,'accessories/wearable_items01/_exp04/sarnak_vanguard/head',0),(7885,7885,'accessories/wearable_items01/_exp04/sarnak_vanguard/legs',0),(7886,7886,'accessories/wearable_items01/_exp04/sarnak_vanguard/legs_noskirt',0),(7887,7887,'accessories/wearable_items01/_exp04/sarnak_vanguard/right',0),(7888,7888,'accessories/wearable_items01/_exp04/sarnak_vanguard/shoulders',0),(7889,7889,'accessories/wearable_items01/_exp04/sarnak_vanguard/shoulders_nopauldrons',0),(7890,7890,'accessories/wearable_items01/_exp04/sarnak_vanguard/skirt',0),(7891,7891,'_exp04/zones/objects/chelsith/water_barrier_1a',0),(7892,7892,'_exp04/zones/objects/chelsith/water_barrier_1b',0),(7893,7893,'_exp04/zones/objects/timorous_deep/mail/mail_kiosk_outdoor',0),(7894,7894,'_exp04/zones/objects/timorous_deep/mail/mail_kiosk_indoor',0),(7895,7895,'staticobjects/mirrors/dpo_cha_mirror01_north',0),(7896,7896,'staticobjects/rugs/dpo_cha_rug_square03',0),(7897,7897,'staticobjects/exp04_collections/dpo_cha_rug_square04',0),(7898,7898,'staticobjects/exp04_collections/dpo_cha_stand_scroll',0),(7899,7899,'staticobjects/tables/dpo_cha_table_sm01_north',0),(7900,7900,'staticobjects/exp04_collections/dpo_cha_bowl_jewels',0),(7901,7901,'staticobjects/light_sources_player_housing_only/dpo_char_lantern_antibat',0),(7902,7902,'staticobjects/light_sources_player_housing_only/dpo_char_lightsource_brazier',0),(7903,7903,'staticobjects/exp04_collections/dpo_char_lightsource_iksarskull',0),(7904,7904,'staticobjects/dressers/dpo_kc_locker_standing_closed',0),(7905,7905,'staticobjects/rugs/dpo_kc_rug01',0),(7906,7906,'staticobjects/exp04_collections/dpo_kc_scrying_pool',0),(7907,7907,'staticobjects/light_sources_player_housing_only/dpo_kp_lightsource_iksar_temple',0),(7908,7908,'staticobjects/pillow/dpo_seb_bed_froglok_slave',0),(7909,7909,'staticobjects/tables/dpo_seb_table_bedside01',0),(7910,7910,'staticobjects/light_sources_player_housing_only/dpo_seb_lightsource_firepot',0),(7911,7911,'staticobjects/exp04_collections/dpo_seb_lightsource_floor',0),(7912,7912,'staticobjects/light_sources_player_housing_only/dpo_seb_lightsource_table01',0),(7913,7913,'staticobjects/chairs/dpo_deep_stool_sarnak01',0),(7914,7914,'staticobjects/bookcases/dpo_goro_scrollcase_empty',0),(7915,7915,'staticobjects/tables/dpo_deep_table_sarnak01',0),(7916,7916,'staticobjects/statues/dpo_vp_statue_trakanon04',0),(7917,7917,'ec/pc01/sarnak_male/sarnak_male_thin12',0),(7918,7918,'ec/pc01/sarnak_female/sarnak_female_thin15',0),(7919,7919,'ec/pc01/sarnak_female/sarnak_female_thin14',0),(7920,7920,'accessories/wearable_items/_exp08/dragon_armor/leather1_red/shoulders_epic',1096),(7921,7921,'ec/pc01/sarnak_male/sarnak_male_thin13',0),(7922,7922,'ec/pc01/sarnak_male/sarnak_male_thin10',0),(7923,7923,'_exp04/zones/objects/fens_of_nathsar/fon_table_riliss01_dpo',0),(7924,7924,'ec/pc01/sarnak_female/sarnak_female_thin11',0),(7925,7925,'_exp04/zones/objects/kylong_plains/mail/klp_obj_mail_kiosk01',0),(7926,7926,'_exp04/zones/objects/fens_of_nathsar/fon_obj_mail_kiosk01',0),(7927,7927,'_exp04/zones/objects/kunzar_jungle/mail/kj_obj_mail_kiosk01',0),(7928,7928,'staticobjects/fountains_and_pools/round_griffin_fountain_dpo',0),(7929,7929,'projectiles/spell_barracuda',0),(7930,7930,'code/lights_for_screenshots',0),(7931,7931,'code/lights_for_screenshots_bright',0),(7932,7932,'ec/pc01/sarnak_female/sarnak_female_thin07',0),(7933,7933,'_exp04/monsters/jaled_dar_ghost',0),(7934,7934,'_exp04/zones/objects/veeshans_peak/statues/vp_ring_of_scale01_fx',0),(7935,7935,'_exp04/zones/objects/veeshans_peak/trakanons_orb',0),(7936,7936,'accessories/wearable_items/_exp04/dragon_vanguard/right',0),(7937,7937,'accessories/wearable_items/_exp04/dragon_vanguard_priest/right',0),(7938,7938,'accessories/wearable_items/_exp04/iksar_vanguard/right',0),(7939,7939,'accessories/wearable_items/_exp04/sarnak_vanguard/right',0),(7940,7940,'staticobjects/boats/travel_boat_freeport',0),(7941,7941,'staticobjects/boats/travel_boat_magic',0),(7942,7942,'_exp04/zones/objects/karnors/capacitor_nub01',0),(7943,7943,'_exp04/zones/objects/karnors/capacitor_nub02',0),(7944,7944,'_exp04/zones/objects/karnors/capacitor_nub03',0),(7945,7945,'accessories/wieldable_items/weapons/exp04/1h_crush/exp04_1hc_crystal_wand_blueflame',0),(7946,7946,'_exp04/zones/objects/fens_of_nathsar/fon_crate_small_closed02_dpo',0),(7947,7947,'_exp04/zones/objects/jarsath_wastes/mail/jw_obj_mail_kiosk01',0),(7948,7948,'_exp04/zones/objects/misc/dpo_chelsith_stone',0),(7949,7949,'staticobjects/liveevent/frostfell/dpo_holiday_candycane_large_greenblk01',0),(7950,7950,'staticobjects/liveevent/frostfell/dpo_holiday_candycane_large_purpleblk01',0),(7951,7951,'staticobjects/liveevent/frostfell/dpo_holiday_candycane_large_redblk01',0),(7952,7952,'accessories/wieldable_items/weapons/sword/whip/whip002_ornate',0),(7953,7953,'accessories/wieldable_items/weapons/sword/whip/whip002_plain',0),(7954,7954,'accessories/wieldable_items/weapons/sword/whip/whip002_runic',0),(7955,7955,'accessories/wieldable_items/weapons/sword/whip/whip002_rusty',0),(7956,7956,'staticobjects/general/tcg_neriak_teleporter',0),(7957,7957,'staticobjects/general/tcg_scryingcube_everfrost',0),(7958,7958,'accessories/wieldable_items/weapons/great_sword/greatsword/tunaria_greatsword',0),(7959,7959,'staticobjects/interiors/scenes/objects_race/dp_objects/tcg_items/tcg_painting04_warelf',0),(7960,7960,'staticobjects/interiors/scenes/objects_race/dp_objects/tcg_items/tcg_painting05_chosen',0),(7961,7961,'staticobjects/interiors/scenes/objects_race/dp_objects/tcg_items/tcg_painting06_basilisk',0),(7962,7962,'staticobjects/interiors/scenes/objects_race/dp_objects/tcg_items/tcg_painting07_lucan',0),(7963,7963,'staticobjects/interiors/scenes/objects_race/dp_objects/tcg_items/tcg_painting08_nagafen',0),(7964,7964,'staticobjects/books/frostfell_card01_dpo',0),(7965,7965,'staticobjects/books/frostfell_card02_dpo',0),(7966,7966,'staticobjects/books/frostfell_card03_dpo',0),(7967,7967,'staticobjects/books/frostfell_card04_dpo',0),(7968,7968,'staticobjects/liveevent/frostfell/dpo_cookie_plate01',0),(7969,7969,'staticobjects/liveevent/frostfell/dpo_cookie_plate02',0),(7970,7970,'staticobjects/liveevent/frostfell/dpo_snowglobe_gorowynn01',0),(7971,7971,'staticobjects/liveevent/frostfell/dpo_snowglobe_neriak01',0),(7972,7972,'staticobjects/liveevent/frostfell/holiday_custard_pie',0),(7973,7973,'staticobjects/liveevent/frostfell/holiday_mistletoe',0),(7974,7974,'staticobjects/liveevent/frostfell/holliday_fatcandle_green',0),(7975,7975,'staticobjects/liveevent/frostfell/holliday_fatcandle_red',0),(7976,7976,'staticobjects/liveevent/frostfell/holliday_fatcandle_white',0),(7977,7977,'staticobjects/lighting/ceiling_goro_obj_lantern01_blue',0),(7978,7978,'staticobjects/lighting/ceiling_goro_obj_lantern01_purple',0),(7979,7979,'staticobjects/lighting/ceiling_goro_obj_lantern01_yellow',0),(7980,7980,'creatures/mounts/rhino_mount/rhino_armor01_fire',0),(7981,7981,'creatures/mounts/rhino_mount/rhino_armor01_fire_purple',0),(7982,7982,'projectiles/spell_pie',0),(7983,7983,'accessories/wearable_items/cloak/exp03/cloak_sq_01_dragon',0),(7984,7984,'accessories/wearable_items/cloak/exp03/cloak_sq_01_iksar_01',0),(7985,7985,'accessories/wearable_items/cloak/exp03/cloak_sq_01_pirate',0),(7986,7986,'accessories/wearable_items/cloak/exp03/cloak_sq_01_sarnak',0),(7987,7987,'accessories/wieldable_items/weapons/exp04/1h_crush/exp04_1hc_tribunal',0),(7988,7988,'accessories/wieldable_items/weapons/exp04/2h_crush/exp04_2hc_tribunal',0),(7989,7989,'staticobjects/interiors/scenes/objects_race/dp_objects/tcg_items/tcg_innoruukarm_goblin_thrower',0),(7990,7990,'accessories/wearable_items/profesion_hats/jester/jester_02/head',0),(7991,7991,'accessories/wieldable_items/weapons/exp04/_epic/1h_crush/exp04_1hc_cudgel_of_obviation_raid',0),(7992,7992,'accessories/wearable_items/profesion_hats/pirate/pirate_01/head',0),(7993,7993,'projectiles/spell_glob',0),(7994,7994,'accessories/wearable_items/profesion_hats/ninja/ninja_01/head',0),(7995,7995,'staticobjects/liveevent/frostfell/dpo_plain_tree_small01',0),(7996,7996,'projectiles/spell_bread',0),(7997,7997,'accessories/wearable_items/_exp03/npc_only/cloak_tribunal_sq_01',0),(7998,7998,'staticobjects/bookcases/nekcas_int_library_bookcase01_dpo',0),(7999,7999,'staticobjects/bookcases/nekcas_int_library_bookcase02_dpo',0),(8000,8000,'staticobjects/bookcases/nekcas_int_library_bookcase03_dpo',0),(8001,8001,'staticobjects/scrolls/nekcas_eviltrinket_fancyscroll_dpo',0),(8002,8002,'staticobjects/weapons/drafling_tower_giant_arrow',0),(8003,8003,'creatures/tu/gods_karna',0),(8004,8004,'accessories/wearable_items/_exp03/npc_only/cloak_karana_sq_01',0),(8005,8005,'accessories/wieldable_items/weapons/exp04/1h_crush/exp04_1hc_karana',0),(8006,8006,'accessories/wieldable_items/weapons/exp04/pike/exp04_pike_karana',0),(8007,8007,'staticobjects/books/nekcas_eviltrinket_book001_vertical_dpo',0),(8008,8008,'creatures/tu/gods_bertoxxulous',0),(8009,8009,'accessories/wieldable_items/weapons/exp04/_epic/1h_crush/exp04_1hc_dragons_marrow_raid',0),(8010,8010,'accessories/wieldable_items/weapons/exp04/_epic/1h_crush/exp04_1hc_elemental_dominance_raid',0),(8011,8011,'accessories/wieldable_items/weapons/exp04/_epic/1h_crush/exp04_1hc_eye_of_siren_raid',0),(8012,8012,'accessories/wieldable_items/weapons/exp04/_epic/1h_crush/exp04_1hc_mirage_star_raid',0),(8013,8013,'accessories/wieldable_items/weapons/exp04/_epic/1h_crush/exp04_1hc_the_impact_of_the_sacrosanct_raid',0),(8014,8014,'accessories/wieldable_items/weapons/exp04/_epic/1h_crush/exp04_1hc_torrid_gore_raid',0),(8015,8015,'accessories/wieldable_items/weapons/exp04/_epic/1h_crush/exp04_1hc_penitents_absolution_raid',0),(8016,8016,'_exp04/zones/objects/kunzar_jungle/kp_weaponrack_iksar01',0),(8017,8017,'accessories/wieldable_items/weapons/exp04/_epic/1h_pierce/exp04_1hp_charms_way_raid',0),(8018,8018,'accessories/wieldable_items/weapons/exp04/_epic/1h_pierce/exp04_1hp_deaths_grip_raid',0),(8019,8019,'accessories/wieldable_items/weapons/exp04/_epic/1h_pierce/exp04_1hp_fang_of_ichor_raid',0),(8020,8020,'accessories/wieldable_items/weapons/exp04/1h_pierce/exp04_1hp_bertox',0),(8021,8021,'accessories/wieldable_items/weapons/exp04/_epic/1h_sword/exp04_1hs_ayonic_axe_raid',0),(8022,8022,'accessories/wieldable_items/weapons/exp04/_epic/1h_sword/exp04_1hs_dragons_temper_raid',0),(8023,8023,'accessories/wieldable_items/weapons/exp04/_epic/1h_sword/exp04_1hs_fire_of_the_stalwart_raid',0),(8024,8024,'accessories/wieldable_items/weapons/exp04/_epic/1h_sword/exp04_1hs_lamentation_of_the_intrepid_raid',0),(8025,8025,'accessories/wieldable_items/weapons/exp04/_epic/1h_sword/exp04_1hs_night_terror_raid',0),(8026,8026,'accessories/wieldable_items/weapons/exp04/_epic/1h_sword/exp04_1hs_sedition_raid',0),(8027,8027,'accessories/wieldable_items/weapons/exp04/_epic/1h_sword/exp04_1hs_the_bite_of_the_wolf_raid',0),(8028,8028,'accessories/wieldable_items/weapons/exp04/_epic/1h_sword/exp04_1hs_the_truth_of_marr_raid',0),(8029,8029,'accessories/wieldable_items/weapons/exp04/_epic/1h_sword/exp04_1hs_wrath_of_nature_raid',0),(8030,8030,'accessories/wieldable_items/weapons/exp04/_epic/bow/exp04_bow_eagles_talon_raid',0),(8031,8031,'accessories/wieldable_items/weapons/exp04/_epic/fist/exp04_fist_gorynn\'s_fist_raid',0),(8032,8032,'accessories/wieldable_items/weapons/exp04/_epic/fist/exp04_fist_hand_of_serenity_raid',0),(8033,8033,'accessories/wieldable_items/weapons/exp04/_epic/pike/exp04_pike_dream_scorcher_raid',0),(8034,8034,'staticobjects/rugs/dpo_char_rug02',0),(8035,8035,'staticobjects/banners/dpo_jw_banner_droag01',0),(8036,8036,'staticobjects/light_sources_player_housing_only/dpo_jw_lightsource_firepot_iksar',0),(8037,8037,'staticobjects/torture_chamber/dpo_char_chain_hook_skull_swinging',0),(8038,8038,'staticobjects/light_sources_player_housing_only/dpo_kj_lightsource_iksar_lantern01',0),(8039,8039,'staticobjects/canopicjars/dpo_cha_iksar_skull_bobbing',0),(8040,8040,'staticobjects/rugs/dpo_goro_rug_round01',0),(8041,8041,'staticobjects/coffins_and_sarcophagus/dpo_cha_sarcophagi_ornate',0),(8042,8042,'staticobjects/rugs/dpo_seb_rug01',0),(8043,8043,'staticobjects/banners/dpo_char_banner_dizok02',0),(8044,8044,'staticobjects/statues/dpo_kp_statue_iksar_kneel',0),(8045,8045,'staticobjects/statues/dpo_vp_statue_sarnak01',0),(8046,8046,'staticobjects/banners/dpo_cha_banner_iksar_hanging',0),(8047,8047,'staticobjects/statues/dpo_kp_statue_iksar_standing02',0),(8048,8048,'staticobjects/chairs/dpo_cha_stool_ornate01',0),(8049,8049,'soga_appearances/ec/npc/ghost_soga_vl_young_male02_pet',0),(8050,8050,'creatures/tu/armor_dummy',0),(8051,8051,'accessories/armor_dummy/armor_dummy_idle',0),(8052,8052,'accessories/armor_dummy/armor_dummy_female_idle',0),(8053,8053,'creatures/tu/armor_dummy_female',0),(8054,8054,'staticobjects/lighting/dpo_goro_obj_lantern03_red_pfx',0),(8055,8055,'accessories/equipment_display/equipment_display_01',0),(8056,8056,'accessories/equipment_display/equipment_display_02',0),(8057,8057,'accessories/equipment_display/equipment_display_03',0),(8058,8058,'creatures/monsters/willowisp_air_elemental',0),(8059,8059,'creatures/monsters/willowisp_earth_elemental',0),(8060,8060,'creatures/monsters/willowisp_fire_elemental',0),(8061,8061,'creatures/monsters/willowisp_water_elemental',0),(8062,8062,'accessories/wearable_items/profesion_hats/turtleshell_helm/turtleshell_helm01/head',0),(8063,8063,'creatures/tu/sarnak_skeleton',0),(8064,8064,'projectiles/spell_book',0),(8065,8065,'staticobjects/mirrors/dpo_cha_mirror01_south',0),(8066,8066,'staticobjects/chairs/dpo_cm_chair_chaise01',0),(8067,8067,'staticobjects/chairs/dpo_cm_chair_chaise02',0),(8068,8068,'accessories/wearable_items/cloak/exp03/cloak_dir_01_fur',0),(8069,8069,'accessories/wearable_items/cloak/exp03/cloak_sq_01_armorer',0),(8070,8070,'accessories/wearable_items/cloak/exp03/cloak_sq_01_chain',0),(8071,8071,'accessories/wearable_items/cloak/exp03/cloak_sq_01_hanging_chain',0),(8072,8072,'accessories/wearable_items/cloak/exp03/cloak_sq_01_leather_fur',0),(8073,8073,'accessories/wearable_items/cloak/exp03/cloak_sq_01_shreaded',0),(8074,8074,'accessories/wearable_items/cloak/exp03/cloak_sq_01_weaponsmith',0),(8075,8075,'accessories/wearable_items/cloak/exp03/cloak_sq_01_woodworker',0),(8076,8076,'accessories/wearable_items/cloak/exp03/cloak_sq_01_alchemist',0),(8077,8077,'accessories/wearable_items/cloak/exp03/cloak_sq_01_provisioner',0),(8078,8078,'accessories/wearable_items/cloak/exp03/cloak_sq_01_sage',0),(8079,8079,'staticobjects/liveevent/erollisi_objects/dpo_erollosi_plate0cookies01',0),(8080,8080,'staticobjects/liveevent/erollisi_objects/dpo_erollosi_plate0marrsipan01',0),(8081,8081,'staticobjects/liveevent/erollisi_objects/errolisi_gold_threeroses01',0),(8082,8082,'staticobjects/liveevent/erollisi_objects/errolisi_heartpillow_purple_whiteribbon',0),(8083,8083,'staticobjects/liveevent/erollisi_objects/errolisi_heartpillow_white_redribbon',0),(8084,8084,'staticobjects/liveevent/erollisi_objects/errolisi_heartpillow_yellow_whiteribbon',0),(8085,8085,'staticobjects/liveevent/erollisi_objects/errolisi_silver_threeroses01',0),(8086,8086,'staticobjects/liveevent/erollisi_objects/dpo_erollosi_teddyburynai',0),(8087,8087,'staticobjects/liveevent/erollisi_objects/dpo_erollosi_purfume_closed01',0),(8088,8088,'staticobjects/liveevent/erollisi_objects/dpo_erollosi_purfume_open01',0),(8089,8089,'staticobjects/gears/gnome_mech03_gears_01_dpo',0),(8090,8090,'accessories/wearable_items/cloak/exp03/cloak_sq_01_carpenter',0),(8091,8091,'accessories/wearable_items/cloak/exp03/cloak_sq_01_jeweler',0),(8092,8092,'accessories/wearable_items/cloak/exp03/cloak_sq_01_tailer',0),(8093,8093,'accessories/armor_dummy/armor_dummy_dwarf_female_idle',0),(8094,8094,'accessories/armor_dummy/armor_dummy_dwarf_male_idle',0),(8095,8095,'creatures/tu/armor_dummy_dwarf_female',0),(8096,8096,'creatures/tu/armor_dummy_dwarf_male',0),(8097,8097,'accessories/armor_dummy/armor_dummy_froglok_female_idle',0),(8098,8098,'accessories/armor_dummy/armor_dummy_froglok_male_idle',0),(8099,8099,'creatures/tu/armor_dummy_froglok_female',0),(8100,8100,'creatures/tu/armor_dummy_froglok_male',0),(8101,8101,'accessories/wearable_items/cloak/exp03/cloak_sq_01_beerfest',0),(8102,8102,'staticobjects/counters/qey_bar_singleplain001_dpo',0),(8103,8103,'accessories/wieldable_items/weapons/misc/metalpoker',0),(8104,8104,'accessories/wieldable_items/weapons/staff/woodenhand/woodenhand',0),(8105,8105,'_exp01/zones/dungeons/poets_palace/objects/drv_lightsource_candles_group01_dpo',0),(8106,8106,'_exp01/zones/dungeons/poets_palace/objects/djn_pillow_floor_blue_round02_dpo',0),(8107,8107,'_exp01/zones/dungeons/poets_palace/objects/djn_pillow_floor_blue_square02_dpo',0),(8108,8108,'_exp01/zones/dungeons/poets_palace/objects/djn_scriptorium_scrollracks_3m_dpo',0),(8109,8109,'_exp01/zones/dungeons/poets_palace/objects/djn_scrollrack_bookcase_6m_dpo',0),(8110,8110,'_exp01/zones/dungeons/poets_palace/objects/djn_vase_gold01_dpo',0),(8111,8111,'_exp01/zones/objects/display_stands/djn_display_stand_platinum',0),(8112,8112,'accessories/wieldable_items/shields/round_shield/wood_shield/shld_spikedwood_bathezid_shield',0),(8113,8113,'accessories/wieldable_items/shields/round_shield/wood_shield/shld_spikedwood_sarnak_shield',0),(8114,8114,'accessories/wieldable_items/shields/round_shield/wood_shield/shld_wood_shield',0),(8115,8115,'accessories/wieldable_items/shields/buckler_shield/spikedwood_buckler/spikedwood_bathezid_buckler',0),(8116,8116,'accessories/wieldable_items/shields/buckler_shield/spikedwood_buckler/spikedwood_sarnak_buckler',0),(8117,8117,'accessories/wieldable_items/shields/buckler_shield/spikedwood_buckler/wood_buckler',0),(8118,8118,'staticobjects/interiors/scenes/objects_race/dp_objects/tcg_items/tcg_cardcase02',0),(8119,8119,'staticobjects/interiors/scenes/objects_race/dp_objects/tcg_items/tcg_drinkcart',0),(8120,8120,'staticobjects/interiors/scenes/objects_race/dp_objects/tcg_items/tcg_foodcart',0),(8121,8121,'staticobjects/interiors/scenes/objects_race/dp_objects/tcg_items/tcg_painting09_cristanos',0),(8122,8122,'staticobjects/interiors/scenes/objects_race/dp_objects/tcg_items/tcg_painting10_clockwork',0),(8123,8123,'staticobjects/interiors/scenes/objects_race/dp_objects/tcg_items/tcg_painting11_mayong',0),(8124,8124,'staticobjects/interiors/scenes/objects_race/dp_objects/tcg_items/tcg_painting12_musicians',0),(8125,8125,'staticobjects/interiors/scenes/objects_race/dp_objects/tcg_items/tcg_painting14_vox',0),(8126,8126,'creatures/tu/froglok_skeleton',0),(8127,8127,'_exp01/zones/objects/pillows/djn_pillow_floor_bluesquare02_small_dpo',0),(8128,8128,'creatures/mounts/warg_mount/warg_armor02_spirit',0),(8129,8129,'creatures/mounts/warg_mount/warg_armor02_fire_spirit',0),(8130,8130,'staticobjects/liveevent/bristlebane_day/dpo_gigglegibber_crateofcomfort',0),(8131,8131,'accessories/wearable_items/halloween_masks/mask_fire/head',0),(8132,8132,'staticobjects/liveevent/brew_day/dpo_brewday_tumpy_tonic',0),(8133,8133,'staticobjects/liveevent/bristlebane_day/qey_kitchen_ironpotlarge001_dpo',0),(8134,8134,'staticobjects/promo_items/dpo_vp_treasure_chest01',0),(8135,8135,'accessories/wearable_items01/_exp00/halloween_masks/mask_fire/head',0),(8136,8136,'creatures/mounts/warg_mount/warg_armor03',0),(8137,8137,'accessories/wieldable_items/weapons/talisman/orb/orb001_eyeball',0),(8138,8138,'accessories/wieldable_items/shields/kite_shield/righteous_barrier_devotion',0),(8139,8139,'accessories/wieldable_items/shields/buckler_shield/brace_corporeal_darklight',0),(8140,8140,'accessories/wieldable_items/weapons/dagger/dagger/dagger_deadly_seduction',0),(8141,8141,'creatures/mounts/warg_mount/warg_armor02_gold',0),(8142,8142,'creatures/mounts/warg_mount/warg_armor02_silver',0),(8143,8143,'creatures/tu/froglok_zombie_kunark',0),(8144,8144,'staticobjects/fires/soh_firepit_houseitem',0),(8145,8145,'accessories/wieldable_items/weapons/axe/battleaxe/battleaxe_venom',0),(8146,8146,'accessories/wieldable_items/weapons/talisman/censer/censer001_runic_darkfx',0),(8147,8147,'accessories/wieldable_items/weapons/talisman/book/book001_runic_poisonfx',0),(8148,8148,'accessories/wieldable_items/shields/exp03/exp03_mistmoore_shield_cloudfx',0),(8149,8149,'accessories/wieldable_items/weapons/exp03/1h_crush/exp03_1hc_zombie_arm_club_animated_fx',0),(8150,8150,'accessories/wieldable_items/weapons/great_hammer/knotted_club/knotted_club001_runic_bugs',0),(8151,8151,'accessories/wieldable_items/weapons/exp04/bow/exp04_bow_dragon_bow_spikes_fx',0),(8152,8152,'accessories/wieldable_items/weapons/exp04/1h_sword/exp04_1hs_hooked_sword_darkfx',0),(8153,8153,'accessories/wearable_items/_exp08/dragon_armor/leather1_shadow/skirt',1096),(8154,8154,'creatures/monsters/gargoyle_bronze',0),(8155,8155,'accessories/wieldable_items/weapons/exp04/1h_crush/exp04_1hc_flailcensor_darkfx',0),(8156,8156,'accessories/wieldable_items/weapons/exp03/1h_sword/exp03_1hs_ornate_elven_rapier_bardfx',0),(8157,8157,'staticobjects/fires/soh_firepit_houseitem_tranquil',0),(8158,8158,'_exp05/zones/objects/exp05_dun_veksar/vek_mirror01',0),(8159,8159,'_exp05/zones/objects/exp05_dun_veksar/golem_head',0),(8160,8160,'_exp05/zones/objects/exp05_dun_veksar/golem_left_leg',0),(8161,8161,'_exp05/zones/objects/exp05_dun_veksar/golem_right_leg',0),(8162,8162,'_exp05/zones/objects/exp05_dun_veksar/golem_torso',0),(8163,8163,'accessories/wearable_items/_exp08/dragon_armor/leather1_shadow/chest',1096),(8164,8164,'accessories/wearable_items/_exp08/dragon_armor/leather1_shadow/feet',1096),(8165,8165,'accessories/wearable_items/_exp08/dragon_armor/leather1_shadow/forearms',1096),(8166,8166,'accessories/wearable_items/_exp08/dragon_armor/leather1_shadow/hands',1096),(8167,8167,'accessories/wearable_items/_exp08/dragon_armor/leather1_shadow/head',1096),(8168,8168,'accessories/wearable_items/_exp08/dragon_armor/leather1_shadow/legs',1096),(8169,8169,'accessories/wearable_items/_exp08/dragon_armor/leather1_shadow/legs_noskirt',1096),(8170,8170,'accessories/wearable_items/_exp08/dragon_armor/leather1_shadow/shoulders',1096),(8171,8171,'creatures/tu/fungusman_02_big',0),(8172,8172,'creatures/tu/fungusman_02_big_white',0),(8173,8173,'creatures/tu/fungusman_02_burly',0),(8174,8174,'creatures/tu/fungusman_02_burly_white',0),(8175,8175,'creatures/tu/fungusman_02_skinny',0),(8176,8176,'creatures/tu/fungusman_02_skinny_white',0),(8177,8177,'accessories/wearable_items/magus/common/low/pants_tintable',0),(8178,8178,'accessories/wearable_items/magus/common/high/chest_tintpants',0),(8179,8179,'accessories/wieldable_items/weapons/exp04/shield/exp04_shld_dragonscale_buckler',0),(8180,8180,'accessories/wieldable_items/weapons/exp04/1h_pierce/exp04_1hp_dragonhilt_dagger_blood',0),(8181,8181,'accessories/wieldable_items/soga_weapons/unique4/flame_of_truth_02',0),(8182,8182,'accessories/wearable_items/cloak/exp03/cloak_sq_01_vampire_regalia',0),(8183,8183,'accessories/wieldable_items/weapons/exp04/shield/exp04_shld_sebilisian_metal_shield',0),(8184,8184,'accessories/wearable_items/cloak/exp03/cloak_sq_01_eye_in_dark',0),(8185,8185,'ui_fx/fx/systems/environment/shard_of_hate/teleport_vision_shard_of_hate',0),(8186,8186,'accessories/wearable_items/cloak/exp03/cloak_sq_01_death',0),(8187,8187,'staticobjects/books/cazic_bookwface001_flat_dpo',0),(8188,8188,'projectiles/spell_netting',0),(8189,8189,'creatures/mounts/warg_mount/warg_armor03_albino',0),(8190,8190,'creatures/mounts/warg_mount/warg_armor03_fire_spirit',0),(8191,8191,'creatures/mounts/warg_mount/warg_armor03_spotted',0),(8192,8192,'creatures/mounts/warg_mount/warg_armor03_twotoned',0),(8193,8193,'creatures/mounts/warg_mount/warg_armor03_spirit',0),(8194,8194,'staticobjects/weapons/great_spear_ornate001_dpo',0),(8195,8195,'_exp05/monsters/elemental_wave_dirt',0),(8196,8196,'_exp05/monsters/elemental_wave_electro',0),(8197,8197,'_exp05/monsters/elemental_wave_jello',0),(8198,8198,'_exp05/monsters/elemental_wave_magma',0),(8199,8199,'_exp05/monsters/elemental_wave_mercury',0),(8200,8200,'_exp05/monsters/elemental_wave_oil',0),(8201,8201,'_exp05/monsters/elemental_wave_snow',0),(8202,8202,'_exp05/monsters/elemental_wave_vomit',0),(8203,8203,'_exp05/monsters/elemental_wave_water',0),(8204,8204,'_exp05/monsters/elemental_wave_sand',0),(8205,8205,'_exp03/zones/exp03_dun_klakanon_craftingdemo/sfm_housing_door_smallbuilding01_dpo',0),(8206,8206,'_exp03/zones/exp03_dun_klakanon_craftingdemo/sfm_gear_medium02_yellow_dpo',0),(8207,8207,'_exp03/zones/exp03_dun_klakanon_craftingdemo/sfm_mine_cart_ore01_dpo',0),(8208,8208,'creatures/tu/gods_anashti_sul',0),(8209,8209,'accessories/wearable_items/cloak/exp03/cloak_sq_01_anashti_sul',0),(8210,8210,'creatures/mounts/horse_armor01/horse01_armor01_misty_purple',0),(8211,8211,'creatures/mounts/horse_armor01/horse01_armor01_nightmare_purple',0),(8212,8212,'_exp03/zones/objects/kitchen_tools/eu_winebottle_red01',0),(8213,8213,'staticobjects/harvested/fish/hrvst_fish_shallow_rainbow_koi',0),(8214,8214,'projectiles/spell_brick',0),(8215,8215,'_exp05/monsters/elemental_wave_ice',0),(8216,8216,'_exp05/monsters/elemental_wave_light',0),(8217,8217,'_exp05/monsters/elemental_wave_magma02',0),(8218,8218,'_exp05/monsters/elemental_wave_magma03',0),(8219,8219,'_exp05/monsters/elemental_wave_wisp',0),(8220,8220,'_exp05/monsters/void_beast_01',0),(8221,8221,'_exp05/monsters/void_beast_02',0),(8222,8222,'_exp05/monsters/void_beast_03',0),(8223,8223,'_exp05/monsters/void_beast_04',0),(8224,8224,'_exp05/monsters/void_beast_05',0),(8225,8225,'_exp05/monsters/void_beast_06',0),(8226,8226,'creatures/mounts/horse_armor01/horse01_armor01_firespirit',0),(8227,8227,'creatures/mounts/horse_armor01/horse01_armor01_manaspirit',0),(8228,8228,'_exp05/zones/objects/exp05_dun_nuroga/dun_nuroga_skull_brazier',0),(8229,8229,'staticobjects/tcg/tcg_boomerang',0),(8230,8230,'_exp03/zones/objects/crib/eu_crib_rattle',0),(8231,8231,'accessories/wearable_items/jester_hat/head',0),(8232,8232,'accessories/wearable_items/profesion_hats/clockwork/clockwork_hat_01/head',0),(8233,8233,'creatures/tu/valkyrie_greater',0),(8234,8234,'creatures/tu/valkyrie_icemaiden',0),(8235,8235,'accessories/wearable_items/_exp08/dragon_armor/leather1_shadow/shoulders_epic',1096),(8236,8236,'_exp03/zones/objects/door/unrest_door',0),(8237,8237,'creatures/pets/gigglegibber_crate',0),(8238,8238,'_exp05/zones/objects/exp05_dun_miragul_upper/glass_orb',0),(8239,8239,'accessories/wearable_items/_exp08/dragon_armor/leather2_green/skirt',1096),(8240,8240,'_exp05/zones/objects/exp05_dun_miragul_upper/glass_orb_ped_real',0),(8241,8241,'staticobjects/clothing/wedding_veil',0),(8242,8242,'accessories/wearable_items/cloak/exp05/cloak_sq_01_bertoxxulous_01',0),(8243,8243,'accessories/wearable_items/cloak/exp05/cloak_sq_01_comfort_01',0),(8244,8244,'accessories/wearable_items/cloak/exp05/cloak_sq_01_fizzlethorpebristlebane',0),(8245,8245,'accessories/wearable_items/cloak/exp05/cloak_sq_01_generic_floral',0),(8246,8246,'creatures/tu/skeleton_king_greater_ice',0),(8247,8247,'staticobjects/kitchen/floor_muffin_plate_dpo',0),(8248,8248,'staticobjects/kitchen/floor_pie_plate_steaming_dpo',0),(8249,8249,'staticobjects/kitchen/ornate_fork_dpo',0),(8250,8250,'staticobjects/kitchen/ornate_knife_dpo',0),(8251,8251,'staticobjects/kitchen/tableware_wooden_set',0),(8252,8252,'staticobjects/clothing/wedding_veil_01',0),(8253,8253,'accessories/wearable_items/cloak/exp05/cloak_sq_01_dark_energy',0),(8254,8254,'accessories/wearable_items/cloak/exp05/cloak_sq_01_dark_water',0),(8255,8255,'accessories/wearable_items/cloak/exp05/cloak_sq_01_sludge',0),(8256,8256,'accessories/wearable_items/cloak/exp05/cloak_sq_01_traveler',0),(8257,8257,'accessories/wearable_items/cloak/exp05/cloak_sq_01_vile_putridness',0),(8258,8258,'staticobjects/kitchen/ornate_spoon_dpo',0),(8259,8259,'staticobjects/books/tcg_book_volume01',0),(8260,8260,'staticobjects/books/tcg_book_volume02',0),(8261,8261,'staticobjects/books/tcg_book_volume03',0),(8262,8262,'staticobjects/books/tcg_book_volume04',0),(8263,8263,'staticobjects/books/tcg_book_volume05',0),(8264,8264,'_exp05/monsters/void_storm_tornado',0),(8265,8265,'staticobjects/interiors/scenes/objects_race/dp_objects/tcg_items/tcg_tapestry01_design_chelsith',0),(8266,8266,'staticobjects/interiors/scenes/objects_race/dp_objects/tcg_items/tcg_tapestry01_design_dragon',0),(8267,8267,'staticobjects/interiors/scenes/objects_race/dp_objects/tcg_items/tcg_tapestry01_design_flowingwater',0),(8268,8268,'staticobjects/interiors/scenes/objects_race/dp_objects/tcg_items/tcg_tapestry01_design_iksar',0),(8269,8269,'staticobjects/interiors/scenes/objects_race/dp_objects/tcg_items/tcg_tapestry01_design_sarnak',0),(8270,8270,'accessories/wearable_items/cloak/exp05/cloak_sq_01_anashti_sul_undead',0),(8271,8271,'creatures/tu/gods_anashti_sul_undead',0),(8272,8272,'accessories/npc_wearables/fungusman_02_appearances/chest_fungusman_02_armor',0),(8273,8273,'accessories/npc_wearables/fungusman_02_appearances/chest_fungusman_02_armor_white',0),(8274,8274,'accessories/npc_wearables/fungusman_02_appearances/head_fungusman_02_flat',0),(8275,8275,'accessories/npc_wearables/fungusman_02_appearances/head_fungusman_02_flat_white',0),(8276,8276,'accessories/npc_wearables/fungusman_02_appearances/head_fungusman_02_pointy',0),(8277,8277,'accessories/npc_wearables/fungusman_02_appearances/head_fungusman_02_pointy_white',0),(8278,8278,'accessories/npc_wearables/fungusman_02_appearances/head_fungusman_02_round',0),(8279,8279,'accessories/npc_wearables/fungusman_02_appearances/head_fungusman_02_round_white',0),(8280,8280,'accessories/wieldable_items/weapons/exp05/1h_void_sword01',0),(8281,8281,'accessories/wieldable_items/weapons/exp05/1hc_void_axe01',0),(8282,8282,'accessories/wieldable_items/weapons/exp05/1hc_void_hammer01',0),(8283,8283,'accessories/wieldable_items/weapons/exp05/2h_void_staff01',0),(8284,8284,'accessories/wieldable_items/weapons/exp05/void_bow01',0),(8285,8285,'accessories/wearable_items/cloak/exp05/cloak_sq_01_oathbreaker',0),(8286,8286,'accessories/wearable_items/cloak/exp05/cloak_sq_01_brellserilis',0),(8287,8287,'accessories/wearable_items/cloak/exp05/cloak_sq_01_cazicthule',0),(8288,8288,'accessories/wearable_items/cloak/exp05/cloak_sq_01_innoruuk',0),(8289,8289,'staticobjects/interiors/scenes/objects_race/dp_objects/exp03_objects/cm_piano_closed01',0),(8290,8290,'_exp05/monsters/bat_swarm',0),(8291,8291,'accessories/wearable_items/halloween_masks/mask_evil_fire/head',0),(8292,8292,'accessories/wearable_items/cloak/exp05/cloak_sq_01_tunare',0),(8293,8293,'accessories/wearable_items/cloak/exp05/cloak_sq_01_ralloszek',0),(8294,8294,'accessories/wearable_items/cloak/exp05/cloak_sq_01_tribunal',0),(8295,8295,'accessories/wearable_items/cloak/exp05/cloak_sq_01_quellious',0),(8296,8296,'accessories/wearable_items/cloak/exp05/cloak_sq_01_solusekro',0),(8297,8297,'accessories/wearable_items/cloak/exp05/cloak_sq_01_mithanielmarr',0),(8298,8298,'accessories/wearable_items/cloak/exp05/cloak_sq_01_karana',0),(8299,8299,'accessories/wearable_items01/_exp00/halloween_masks/mask_evil_fire/head',0),(8300,8300,'accessories/wearable_items/cloak/exp05/cloak_sq_01_void_energy',0),(8301,8301,'creatures/tu/gods_rodcet_nife',0),(8302,8302,'_exp04/monsters/clay_golem_pet',0),(8303,8303,'creatures/tu/earth_elem_pet',0),(8304,8304,'creatures/tu/riverrock_earth_elem_pet',0),(8305,8305,'_exp03/characters/monsters/golem_magma_pet',0),(8306,8306,'_exp04/monsters/clay_keeper_pet',0),(8307,8307,'_exp04/tool_users/golem_jade_pet',0),(8308,8308,'creatures/tu/obsidian_earth_elem_pet',0),(8309,8309,'_exp05/monsters/skull_wisp',0),(8310,8310,'_exp04/zones/objects/sebilis/desk_torch',0),(8311,8311,'accessories/wieldable_items/weapons/talisman/censer/censer001_runic_cloudfx',0),(8312,8312,'staticobjects/books/floor_booknarrow002_dpo',0),(8313,8313,'staticobjects/books/floor_bookwide01_dpo',0),(8314,8314,'staticobjects/books/floor_bookwide02_dpo',0),(8315,8315,'staticobjects/books/floor_bookwide03_dpo',0),(8316,8316,'staticobjects/books/floor_df_book01_dpo',0),(8317,8317,'staticobjects/books/floor_df_book03_dpo',0),(8318,8318,'staticobjects/books/floor_df_book04_dpo',0),(8319,8319,'staticobjects/books/floor_vrsn_book01_dpo',0),(8320,8320,'staticobjects/books/floor_vrsn_book04_dpo',0),(8321,8321,'staticobjects/books/floor_vrsn_book05_dpo',0),(8322,8322,'staticobjects/books/floor_vrsn_book06_dpo',0),(8323,8323,'staticobjects/banners/dpo_kel_banner_royal01',0),(8324,8324,'staticobjects/benches/dpo_eu_bench_long02_wcushion',0),(8325,8325,'staticobjects/benches/dpo_eu_bench_short_wcushion01',0),(8326,8326,'staticobjects/chairs/dpo_eu_chair_dining03',0),(8327,8327,'staticobjects/chairs/dpo_eu_chair_dining06',0),(8328,8328,'staticobjects/chairs/dpo_eu_chair_head_dining01',0),(8329,8329,'staticobjects/chairs/dpo_eu_couch01',0),(8330,8330,'staticobjects/chairs/dpo_eu_couch02',0),(8331,8331,'staticobjects/chairs/dpo_eu_gaming_cardtable01_empty',0),(8332,8332,'staticobjects/chairs/dpo_eu_stool_round01',0),(8333,8333,'staticobjects/chairs/dpo_kel_chair_wood02',0),(8334,8334,'staticobjects/chairs/dpo_kel_tavern_stool01_green',0),(8335,8335,'staticobjects/counters/dpo_kel_tavern_counter01',0),(8336,8336,'staticobjects/dividers/dpo_drv_divider_ornate01',0),(8337,8337,'staticobjects/dividers/dpo_drv_divider_plain01',0),(8338,8338,'staticobjects/light_sources_player_housing_only/dpo_gf_lightsource_lampppost01',0),(8339,8339,'staticobjects/light_sources_player_housing_only/dpo_gf_lightsource_wall_flower02',0),(8340,8340,'staticobjects/light_sources_player_housing_only/dpo_kel_lightsource_chandelier_crystal01',0),(8341,8341,'staticobjects/light_sources_player_housing_only/dpo_kel_lightsource_wisplantern_wall01',0),(8342,8342,'staticobjects/musical/dpo_eu_piano_open01',0),(8343,8343,'staticobjects/plants/dpo_gf_lamppost_flower02',0),(8344,8344,'staticobjects/rugs/dpo_kel_rug_blue_round01',0),(8345,8345,'staticobjects/rugs/dpo_kel_rug_green_round02',0),(8346,8346,'staticobjects/rugs/dpo_kel_rug_leaf',0),(8347,8347,'staticobjects/shelves/dpo_kel_tavern_shelves01',0),(8348,8348,'staticobjects/tables/desk_with_book_and_candle_dpo',0),(8349,8349,'staticobjects/tables/dpo_eu_gaming_cardtable01_empty',0),(8350,8350,'staticobjects/tables/dpo_eu_gaming_cardtable02',0),(8351,8351,'staticobjects/tables/dpo_eu_table_bedside01',0),(8352,8352,'staticobjects/tables/dpo_eu_table_coffee01',0),(8353,8353,'staticobjects/tables/dpo_eu_table_long01',0),(8354,8354,'staticobjects/tableware/dpo_kel_tavern_cup02',0),(8355,8355,'staticobjects/tableware/dpo_kel_tavern_jar_honey01',0),(8356,8356,'staticobjects/tableware/dpo_kel_tavern_mug02',0),(8357,8357,'staticobjects/tableware/dpo_kel_tavern_mug03',0),(8358,8358,'staticobjects/tapestry/dpo_kel_tapestry_starchart01',0),(8359,8359,'staticobjects/walls/dpo_gf_kel_int_divider_wall01',0),(8360,8360,'projectiles/spell_barrel',0),(8361,8361,'_exp05/monsters/book_dervish',0),(8362,8362,'projectiles/spell_book_trail',0),(8363,8363,'accessories/wearable_items/leather/common/low/pauldron01_leather_heavy_left',0),(8364,8364,'accessories/wearable_items/leather/common/low/pauldron01_leather_heavy_right',0),(8365,8365,'accessories/wearable_items/leather/common/low/shoulders_pauldron01_both',0),(8366,8366,'accessories/wearable_items/leather/common/low/shoulders_pauldron01_left',0),(8367,8367,'accessories/wearable_items/leather/common/low/shoulders_pauldron01_right',0),(8368,8368,'accessories/wearable_items/_exp02/woven_monk/pauldron01_leather_heavy_left',0),(8369,8369,'accessories/wearable_items/_exp02/woven_monk/pauldron01_leather_heavy_right',0),(8370,8370,'accessories/wearable_items/_exp02/woven_monk/shoulders_pauldron01_both',0),(8371,8371,'accessories/wearable_items/_exp02/woven_monk/shoulders_pauldron01_left',0),(8372,8372,'accessories/wearable_items/_exp02/woven_monk/shoulders_pauldron01_right',0),(8373,8373,'accessories/wearable_items/_exp03/chain_heroic_pristine/pauldron01_leather_heavy_left',0),(8374,8374,'accessories/wearable_items/_exp03/chain_heroic_pristine/pauldron01_leather_heavy_right',0),(8375,8375,'accessories/wearable_items/_exp03/chain_heroic_pristine/shoulders_pauldron01_both',0),(8376,8376,'accessories/wearable_items/_exp03/chain_heroic_pristine/shoulders_pauldron01_left',0),(8377,8377,'accessories/wearable_items/_exp03/chain_heroic_pristine/shoulders_pauldron01_right',0),(8378,8378,'accessories/wearable_items/chain/chain_tint01/pauldron01_leather_heavy_left',0),(8379,8379,'accessories/wearable_items/chain/chain_tint01/pauldron01_leather_heavy_right',0),(8380,8380,'accessories/wearable_items/chain/chain_tint01/shoulders_pauldron01_both',0),(8381,8381,'accessories/wearable_items/chain/chain_tint01/shoulders_pauldron01_left',0),(8382,8382,'accessories/wearable_items/chain/chain_tint01/shoulders_pauldron01_right',0),(8383,8383,'accessories/wearable_items/heavy_plate/plain02/pauldron02_vanguard_ridged_left',0),(8384,8384,'accessories/wearable_items/heavy_plate/plain02/pauldron02_vanguard_ridged_right',0),(8385,8385,'accessories/wearable_items/heavy_plate/plain02/pauldron03_vanguard_flared_left',0),(8386,8386,'accessories/wearable_items/heavy_plate/plain02/pauldron03_vanguard_flared_right',0),(8387,8387,'accessories/wearable_items/heavy_plate/plain02/pauldron04_vanguard_medium_left',0),(8388,8388,'accessories/wearable_items/heavy_plate/plain02/pauldron04_vanguard_medium_right',0),(8389,8389,'accessories/wearable_items/heavy_plate/plain02/pauldron05_vanguard_heavy_left',0),(8390,8390,'accessories/wearable_items/heavy_plate/plain02/pauldron05_vanguard_heavy_right',0),(8391,8391,'accessories/wearable_items/heavy_plate/plain02/pauldron06_vanguard_horns_left',0),(8392,8392,'accessories/wearable_items/heavy_plate/plain02/pauldron06_vanguard_horns_right',0),(8393,8393,'accessories/wearable_items/heavy_plate/plain02/pauldron07_vanguard_gothic_left',0),(8394,8394,'accessories/wearable_items/heavy_plate/plain02/pauldron07_vanguard_gothic_right',0),(8395,8395,'accessories/wearable_items/heavy_plate/plain02/pauldron08_vanguard_horns_skulls_left',0),(8396,8396,'accessories/wearable_items/heavy_plate/plain02/pauldron08_vanguard_horns_skulls_right',0),(8397,8397,'accessories/wearable_items/heavy_plate/plain02/shoulders_pauldron02_both',0),(8398,8398,'accessories/wearable_items/heavy_plate/plain02/shoulders_pauldron02_left',0),(8399,8399,'accessories/wearable_items/heavy_plate/plain02/shoulders_pauldron02_right',0),(8400,8400,'accessories/wearable_items/heavy_plate/plain02/shoulders_pauldron03_both',0),(8401,8401,'accessories/wearable_items/heavy_plate/plain02/shoulders_pauldron03_left',0),(8402,8402,'accessories/wearable_items/heavy_plate/plain02/shoulders_pauldron03_right',0),(8403,8403,'accessories/wearable_items/heavy_plate/plain02/shoulders_pauldron04_both',0),(8404,8404,'accessories/wearable_items/heavy_plate/plain02/shoulders_pauldron04_left',0),(8405,8405,'accessories/wearable_items/heavy_plate/plain02/shoulders_pauldron04_right',0),(8406,8406,'accessories/wearable_items/heavy_plate/plain02/shoulders_pauldron05_both',0),(8407,8407,'accessories/wearable_items/heavy_plate/plain02/shoulders_pauldron05_left',0),(8408,8408,'accessories/wearable_items/heavy_plate/plain02/shoulders_pauldron05_right',0),(8409,8409,'accessories/wearable_items/heavy_plate/plain02/shoulders_pauldron06_both',0),(8410,8410,'accessories/wearable_items/heavy_plate/plain02/shoulders_pauldron06_left',0),(8411,8411,'accessories/wearable_items/heavy_plate/plain02/shoulders_pauldron06_right',0),(8412,8412,'accessories/wearable_items/heavy_plate/plain02/shoulders_pauldron07_both',0),(8413,8413,'accessories/wearable_items/heavy_plate/plain02/shoulders_pauldron07_left',0),(8414,8414,'accessories/wearable_items/heavy_plate/plain02/shoulders_pauldron07_right',0),(8415,8415,'accessories/wearable_items/heavy_plate/plain02/shoulders_pauldron08_both',0),(8416,8416,'accessories/wearable_items/heavy_plate/plain02/shoulders_pauldron08_left',0),(8417,8417,'accessories/wearable_items/heavy_plate/plain02/shoulders_pauldron08_right',0),(8418,8418,'accessories/wearable_items/_exp04/sarnak_vanguard/pauldron02_vanguard_ridged_left',0),(8419,8419,'accessories/wearable_items/_exp04/sarnak_vanguard/pauldron02_vanguard_ridged_right',0),(8420,8420,'accessories/wearable_items/_exp04/sarnak_vanguard/shoulders_pauldron02_both',0),(8421,8421,'accessories/wearable_items/_exp04/sarnak_vanguard/shoulders_pauldron02_left',0),(8422,8422,'accessories/wearable_items/_exp04/sarnak_vanguard/shoulders_pauldron02_right',0),(8423,8423,'accessories/wearable_items/_exp02/vanguard_chitin/pauldron02_vanguard_ridged_left',0),(8424,8424,'accessories/wearable_items/_exp02/vanguard_chitin/pauldron02_vanguard_ridged_right',0),(8425,8425,'accessories/wearable_items/_exp02/vanguard_chitin/shoulders_pauldron02_both',0),(8426,8426,'accessories/wearable_items/_exp02/vanguard_chitin/shoulders_pauldron02_left',0),(8427,8427,'accessories/wearable_items/_exp02/vanguard_chitin/shoulders_pauldron02_right',0),(8428,8428,'accessories/wearable_items/heavy_plate/plain_white/pauldron03_vanguard_flared_left',0),(8429,8429,'accessories/wearable_items/heavy_plate/plain_white/pauldron03_vanguard_flared_right',0),(8430,8430,'accessories/wearable_items/heavy_plate/plain_white/pauldron05_vanguard_heavy_left',0),(8431,8431,'accessories/wearable_items/heavy_plate/plain_white/pauldron05_vanguard_heavy_right',0),(8432,8432,'accessories/wearable_items/heavy_plate/plain_white/shoulders_pauldron03_both',0),(8433,8433,'accessories/wearable_items/heavy_plate/plain_white/shoulders_pauldron03_left',0),(8434,8434,'accessories/wearable_items/heavy_plate/plain_white/shoulders_pauldron03_right',0),(8435,8435,'accessories/wearable_items/heavy_plate/plain_white/shoulders_pauldron05_both',0),(8436,8436,'accessories/wearable_items/heavy_plate/plain_white/shoulders_pauldron05_left',0),(8437,8437,'accessories/wearable_items/heavy_plate/plain_white/shoulders_pauldron05_right',0),(8438,8438,'accessories/wearable_items/_exp03/kaladim_vanguard_01/pauldron03_vanguard_flared_left',0),(8439,8439,'accessories/wearable_items/_exp03/kaladim_vanguard_01/pauldron03_vanguard_flared_right',0),(8440,8440,'accessories/wearable_items/_exp03/kaladim_vanguard_01/shoulders_pauldron03_both',0),(8441,8441,'accessories/wearable_items/_exp03/kaladim_vanguard_01/shoulders_pauldron03_left',0),(8442,8442,'accessories/wearable_items/_exp03/kaladim_vanguard_01/shoulders_pauldron03_right',0),(8443,8443,'accessories/wearable_items/vanguard/common/low/pauldron03_vanguard_flared_left',0),(8444,8444,'accessories/wearable_items/vanguard/common/low/pauldron03_vanguard_flared_right',0),(8445,8445,'accessories/wearable_items/vanguard/common/low/shoulders_pauldron03_both',0),(8446,8446,'accessories/wearable_items/vanguard/common/low/shoulders_pauldron03_left',0),(8447,8447,'accessories/wearable_items/vanguard/common/low/shoulders_pauldron03_right',0),(8448,8448,'accessories/wearable_items/heavy_plate/plain/pauldron03_vanguard_flared_left',0),(8449,8449,'accessories/wearable_items/heavy_plate/plain/pauldron03_vanguard_flared_right',0),(8450,8450,'accessories/wearable_items/heavy_plate/plain/shoulders_pauldron03_both',0),(8451,8451,'accessories/wearable_items/heavy_plate/plain/shoulders_pauldron03_left',0),(8452,8452,'accessories/wearable_items/heavy_plate/plain/shoulders_pauldron03_right',0),(8453,8453,'accessories/wearable_items/vanguard/vanguard_tint01/pauldron04_vanguard_medium_left',0),(8454,8454,'accessories/wearable_items/vanguard/vanguard_tint01/pauldron04_vanguard_medium_right',0),(8455,8455,'accessories/wearable_items/vanguard/vanguard_tint01/shoulders_pauldron04_both',0),(8456,8456,'accessories/wearable_items/vanguard/vanguard_tint01/shoulders_pauldron04_left',0),(8457,8457,'accessories/wearable_items/vanguard/vanguard_tint01/shoulders_pauldron04_right',0),(8458,8458,'accessories/wearable_items/vanguard/common/high/pauldron06_vanguard_horns_left',0),(8459,8459,'accessories/wearable_items/vanguard/common/high/pauldron06_vanguard_horns_right',0),(8460,8460,'accessories/wearable_items/vanguard/common/high/shoulders_pauldron06_both',0),(8461,8461,'accessories/wearable_items/vanguard/common/high/shoulders_pauldron06_left',0),(8462,8462,'accessories/wearable_items/vanguard/common/high/shoulders_pauldron06_right',0),(8463,8463,'accessories/wearable_items/vanguard/uncommon/low/pauldron06_vanguard_horns_left',0),(8464,8464,'accessories/wearable_items/vanguard/uncommon/low/pauldron06_vanguard_horns_right',0),(8465,8465,'accessories/wearable_items/vanguard/uncommon/low/shoulders_pauldron06_both',0),(8466,8466,'accessories/wearable_items/vanguard/uncommon/low/shoulders_pauldron06_left',0),(8467,8467,'accessories/wearable_items/vanguard/uncommon/low/shoulders_pauldron06_right',0),(8468,8468,'accessories/wearable_items/heavy_plate/plain02/chest',0),(8469,8469,'accessories/wearable_items/heavy_plate/plain02/feet',0),(8470,8470,'accessories/wearable_items/heavy_plate/plain02/forearms',0),(8471,8471,'accessories/wearable_items/heavy_plate/plain02/hands',0),(8472,8472,'accessories/wearable_items/heavy_plate/plain02/head',0),(8473,8473,'accessories/wearable_items/heavy_plate/plain02/left',0),(8474,8474,'accessories/wearable_items/heavy_plate/plain02/legs',0),(8475,8475,'accessories/wearable_items/heavy_plate/plain02/legs_noskirt',0),(8476,8476,'accessories/wearable_items/heavy_plate/plain02/right',0),(8477,8477,'accessories/wearable_items/heavy_plate/plain02/shoulders',0),(8478,8478,'accessories/wearable_items/heavy_plate/plain02/shoulders_nopauldrons',0),(8479,8479,'accessories/wearable_items/heavy_plate/plain02/skirt',0),(8480,8480,'accessories/wearable_items/heavy_plate/plain02/upperchest',0),(8481,8481,'accessories/wearable_items/heavy_plate/plain_white/chest',0),(8482,8482,'accessories/wearable_items/heavy_plate/plain_white/feet',0),(8483,8483,'accessories/wearable_items/heavy_plate/plain_white/forearms',0),(8484,8484,'accessories/wearable_items/heavy_plate/plain_white/hands',0),(8485,8485,'accessories/wearable_items/heavy_plate/plain_white/head',0),(8486,8486,'accessories/wearable_items/heavy_plate/plain_white/left',0),(8487,8487,'accessories/wearable_items/heavy_plate/plain_white/legs',0),(8488,8488,'accessories/wearable_items/heavy_plate/plain_white/legs_noskirt',0),(8489,8489,'accessories/wearable_items/heavy_plate/plain_white/right',0),(8490,8490,'accessories/wearable_items/heavy_plate/plain_white/shoulders',0),(8491,8491,'accessories/wearable_items/heavy_plate/plain_white/shoulders_nopauldrons',0),(8492,8492,'accessories/wearable_items/heavy_plate/plain_white/skirt',0),(8493,8493,'accessories/wearable_items/heavy_plate/plain_white/upperchest',0),(8494,8494,'accessories/wearable_items/_exp03/mistmoore_vanguard_01/shoulders_pauldron02_both',0),(8495,8495,'accessories/wearable_items/_exp03/mistmoore_vanguard_01/shoulders_pauldron02_left',0),(8496,8496,'accessories/wearable_items/_exp03/mistmoore_vanguard_01/shoulders_pauldron02_right',0),(8497,8497,'accessories/wearable_items/heavy_plate/plain_white_sun_symbol/chest',0),(8498,8498,'accessories/wearable_items/heavy_plate/plain_white_sun_symbol/feet',0),(8499,8499,'accessories/wearable_items/heavy_plate/plain_white_sun_symbol/forearms',0),(8500,8500,'accessories/wearable_items/heavy_plate/plain_white_sun_symbol/hands',0),(8501,8501,'accessories/wearable_items/heavy_plate/plain_white_sun_symbol/head',0),(8502,8502,'accessories/wearable_items/heavy_plate/plain_white_sun_symbol/left',0),(8503,8503,'accessories/wearable_items/heavy_plate/plain_white_sun_symbol/legs',0),(8504,8504,'accessories/wearable_items/heavy_plate/plain_white_sun_symbol/legs_noskirt',0),(8505,8505,'accessories/wearable_items/heavy_plate/plain_white_sun_symbol/right',0),(8506,8506,'accessories/wearable_items/heavy_plate/plain_white_sun_symbol/shoulders',0),(8507,8507,'accessories/wearable_items/heavy_plate/plain_white_sun_symbol/shoulders_nopauldrons',0),(8508,8508,'accessories/wearable_items/heavy_plate/plain_white_sun_symbol/skirt',0),(8509,8509,'accessories/wearable_items/heavy_plate/plain_white_sun_symbol/upperchest',0),(8510,8510,'accessories/wearable_items01/_exp00/heavy_plate/plain02/chest',0),(8511,8511,'accessories/wearable_items01/_exp00/heavy_plate/plain02/feet',0),(8512,8512,'accessories/wearable_items01/_exp00/heavy_plate/plain02/forearms',0),(8513,8513,'accessories/wearable_items01/_exp00/heavy_plate/plain02/hands',0),(8514,8514,'accessories/wearable_items01/_exp00/heavy_plate/plain02/left',0),(8515,8515,'accessories/wearable_items01/_exp00/heavy_plate/plain02/legs',0),(8516,8516,'accessories/wearable_items01/_exp00/heavy_plate/plain02/legs_noskirt',0),(8517,8517,'accessories/wearable_items01/_exp00/heavy_plate/plain02/right',0),(8518,8518,'accessories/wearable_items01/_exp00/heavy_plate/plain02/shoulders',0),(8519,8519,'accessories/wearable_items01/_exp00/heavy_plate/plain02/skirt',0),(8520,8520,'accessories/wearable_items01/_exp00/heavy_plate/plain02/upperchest',0),(8521,8521,'accessories/wearable_items01/_exp00/heavy_plate/plain_white/chest',0),(8522,8522,'accessories/wearable_items01/_exp00/heavy_plate/plain_white/feet',0),(8523,8523,'accessories/wearable_items01/_exp00/heavy_plate/plain_white/forearms',0),(8524,8524,'accessories/wearable_items01/_exp00/heavy_plate/plain_white/hands',0),(8525,8525,'accessories/wearable_items01/_exp00/heavy_plate/plain_white/head',0),(8526,8526,'accessories/wearable_items01/_exp00/heavy_plate/plain_white/left',0),(8527,8527,'accessories/wearable_items01/_exp00/heavy_plate/plain_white/legs',0),(8528,8528,'accessories/wearable_items01/_exp00/heavy_plate/plain_white/legs_noskirt',0),(8529,8529,'accessories/wearable_items01/_exp00/heavy_plate/plain_white/right',0),(8530,8530,'accessories/wearable_items01/_exp00/heavy_plate/plain_white/shoulders',0),(8531,8531,'accessories/wearable_items01/_exp00/heavy_plate/plain_white/skirt',0),(8532,8532,'accessories/wearable_items01/_exp00/heavy_plate/plain_white/upperchest',0),(8533,8533,'accessories/wearable_items01/_exp00/heavy_plate/plain_white_sun_symbol/chest',0),(8534,8534,'accessories/wearable_items01/_exp00/heavy_plate/plain_white_sun_symbol/feet',0),(8535,8535,'accessories/wearable_items01/_exp00/heavy_plate/plain_white_sun_symbol/forearms',0),(8536,8536,'accessories/wearable_items01/_exp00/heavy_plate/plain_white_sun_symbol/hands',0),(8537,8537,'accessories/wearable_items01/_exp00/heavy_plate/plain_white_sun_symbol/head',0),(8538,8538,'accessories/wearable_items01/_exp00/heavy_plate/plain_white_sun_symbol/left',0),(8539,8539,'accessories/wearable_items01/_exp00/heavy_plate/plain_white_sun_symbol/legs',0),(8540,8540,'accessories/wearable_items01/_exp00/heavy_plate/plain_white_sun_symbol/legs_noskirt',0),(8541,8541,'accessories/wearable_items01/_exp00/heavy_plate/plain_white_sun_symbol/right',0),(8542,8542,'accessories/wearable_items01/_exp00/heavy_plate/plain_white_sun_symbol/shoulders_nopauldrons',0),(8543,8543,'accessories/wearable_items01/_exp00/heavy_plate/plain_white_sun_symbol/shoulders_pauldron03_both',0),(8544,8544,'accessories/wearable_items01/_exp00/heavy_plate/plain_white_sun_symbol/shoulders_pauldron03_left',0),(8545,8545,'accessories/wearable_items01/_exp00/heavy_plate/plain_white_sun_symbol/shoulders_pauldron03_right',0),(8546,8546,'accessories/wearable_items01/_exp00/heavy_plate/plain_white_sun_symbol/shoulders_pauldron05_both',0),(8547,8547,'accessories/wearable_items01/_exp00/heavy_plate/plain_white_sun_symbol/shoulders_pauldron05_left',0),(8548,8548,'accessories/wearable_items01/_exp00/heavy_plate/plain_white_sun_symbol/shoulders_pauldron05_right',0),(8549,8549,'accessories/wearable_items01/_exp00/heavy_plate/plain_white_sun_symbol/skirt',0),(8550,8550,'accessories/wearable_items01/_exp00/heavy_plate/plain_white_sun_symbol/upperchest',0),(8551,8551,'accessories/wearable_items01/_exp00/chain/chain_tint01/shoulders_pauldron01_both',0),(8552,8552,'accessories/wearable_items01/_exp00/chain/chain_tint01/shoulders_pauldron01_left',0),(8553,8553,'accessories/wearable_items01/_exp00/chain/chain_tint01/shoulders_pauldron01_right',0),(8554,8554,'accessories/wearable_items01/_exp00/heavy_plate/plain/shoulders_pauldron03_both',0),(8555,8555,'accessories/wearable_items01/_exp00/heavy_plate/plain/shoulders_pauldron03_left',0),(8556,8556,'accessories/wearable_items01/_exp00/heavy_plate/plain/shoulders_pauldron03_right',0),(8557,8557,'accessories/wearable_items01/_exp00/heavy_plate/plain02/shoulders_pauldron02_both',0),(8558,8558,'accessories/wearable_items01/_exp00/heavy_plate/plain02/shoulders_pauldron02_left',0),(8559,8559,'accessories/wearable_items01/_exp00/heavy_plate/plain02/shoulders_pauldron02_right',0),(8560,8560,'accessories/wearable_items01/_exp00/heavy_plate/plain02/shoulders_pauldron03_both',0),(8561,8561,'accessories/wearable_items01/_exp00/heavy_plate/plain02/shoulders_pauldron03_left',0),(8562,8562,'accessories/wearable_items01/_exp00/heavy_plate/plain02/shoulders_pauldron03_right',0),(8563,8563,'accessories/wearable_items01/_exp00/heavy_plate/plain02/shoulders_pauldron04_both',0),(8564,8564,'accessories/wearable_items01/_exp00/heavy_plate/plain02/shoulders_pauldron04_left',0),(8565,8565,'accessories/wearable_items01/_exp00/heavy_plate/plain02/shoulders_pauldron04_right',0),(8566,8566,'accessories/wearable_items01/_exp00/heavy_plate/plain02/shoulders_pauldron05_both',0),(8567,8567,'accessories/wearable_items01/_exp00/heavy_plate/plain02/shoulders_pauldron05_left',0),(8568,8568,'accessories/wearable_items01/_exp00/heavy_plate/plain02/shoulders_pauldron05_right',0),(8569,8569,'accessories/wearable_items01/_exp00/heavy_plate/plain02/shoulders_pauldron06_both',0),(8570,8570,'accessories/wearable_items01/_exp00/heavy_plate/plain02/shoulders_pauldron06_left',0),(8571,8571,'accessories/wearable_items01/_exp00/heavy_plate/plain02/shoulders_pauldron06_right',0),(8572,8572,'accessories/wearable_items01/_exp00/heavy_plate/plain02/shoulders_pauldron07_both',0),(8573,8573,'accessories/wearable_items01/_exp00/heavy_plate/plain02/shoulders_pauldron07_left',0),(8574,8574,'accessories/wearable_items01/_exp00/heavy_plate/plain02/shoulders_pauldron07_right',0),(8575,8575,'accessories/wearable_items01/_exp00/heavy_plate/plain02/shoulders_pauldron08_both',0),(8576,8576,'accessories/wearable_items01/_exp00/heavy_plate/plain02/shoulders_pauldron08_left',0),(8577,8577,'accessories/wearable_items01/_exp00/heavy_plate/plain02/shoulders_pauldron08_right',0),(8578,8578,'accessories/wearable_items01/_exp00/heavy_plate/plain_white/shoulders_pauldron03_both',0),(8579,8579,'accessories/wearable_items01/_exp00/heavy_plate/plain_white/shoulders_pauldron03_left',0),(8580,8580,'accessories/wearable_items01/_exp00/heavy_plate/plain_white/shoulders_pauldron03_right',0),(8581,8581,'accessories/wearable_items01/_exp00/heavy_plate/plain_white/shoulders_pauldron05_both',0),(8582,8582,'accessories/wearable_items01/_exp00/heavy_plate/plain_white/shoulders_pauldron05_left',0),(8583,8583,'accessories/wearable_items01/_exp00/heavy_plate/plain_white/shoulders_pauldron05_right',0),(8584,8584,'accessories/wearable_items01/_exp00/leather/common/low/shoulders_pauldron01_both',0),(8585,8585,'accessories/wearable_items01/_exp00/leather/common/low/shoulders_pauldron01_left',0),(8586,8586,'accessories/wearable_items01/_exp00/leather/common/low/shoulders_pauldron01_right',0),(8587,8587,'accessories/wearable_items01/_exp00/vanguard/common/low/shoulders_pauldron03_both',0),(8588,8588,'accessories/wearable_items01/_exp00/vanguard/common/low/shoulders_pauldron03_left',0),(8589,8589,'accessories/wearable_items01/_exp00/vanguard/common/low/shoulders_pauldron03_right',0),(8590,8590,'accessories/wearable_items01/_exp00/vanguard/common/high/shoulders_pauldron06_both',0),(8591,8591,'accessories/wearable_items01/_exp00/vanguard/common/high/shoulders_pauldron06_left',0),(8592,8592,'accessories/wearable_items01/_exp00/vanguard/common/high/shoulders_pauldron06_right',0),(8593,8593,'accessories/wearable_items01/_exp02/vanguard_chitin/shoulders_pauldron02_both',0),(8594,8594,'accessories/wearable_items01/_exp02/vanguard_chitin/shoulders_pauldron02_left',0),(8595,8595,'accessories/wearable_items01/_exp02/vanguard_chitin/shoulders_pauldron02_right',0),(8596,8596,'accessories/wearable_items01/_exp02/woven_monk/shoulders_pauldron01_both',0),(8597,8597,'accessories/wearable_items01/_exp02/woven_monk/shoulders_pauldron01_left',0),(8598,8598,'accessories/wearable_items01/_exp02/woven_monk/shoulders_pauldron01_right',0),(8599,8599,'accessories/wearable_items01/_exp03/chain_heroic_pristine/shoulders_pauldron01_both',0),(8600,8600,'accessories/wearable_items01/_exp03/chain_heroic_pristine/shoulders_pauldron01_left',0),(8601,8601,'accessories/wearable_items01/_exp03/chain_heroic_pristine/shoulders_pauldron01_right',0),(8602,8602,'accessories/wearable_items01/_exp03/kaladim_vanguard_01/shoulders_pauldron03_both',0),(8603,8603,'accessories/wearable_items01/_exp03/kaladim_vanguard_01/shoulders_pauldron03_left',0),(8604,8604,'accessories/wearable_items01/_exp03/kaladim_vanguard_01/shoulders_pauldron03_right',0),(8605,8605,'accessories/wearable_items01/_exp03/mistmoore_vanguard_01/shoulders_pauldron02_both',0),(8606,8606,'accessories/wearable_items01/_exp03/mistmoore_vanguard_01/shoulders_pauldron02_left',0),(8607,8607,'accessories/wearable_items01/_exp03/mistmoore_vanguard_01/shoulders_pauldron02_right',0),(8608,8608,'accessories/wearable_items01/_exp04/sarnak_vanguard/shoulders_pauldron02_both',0),(8609,8609,'accessories/wearable_items01/_exp04/sarnak_vanguard/shoulders_pauldron02_left',0),(8610,8610,'accessories/wearable_items01/_exp04/sarnak_vanguard/shoulders_pauldron02_right',0),(8611,8611,'accessories/wearable_items01/_exp00/vanguard/uncommon/low/shoulders_pauldron06_both',0),(8612,8612,'accessories/wearable_items01/_exp00/vanguard/uncommon/low/shoulders_pauldron06_left',0),(8613,8613,'accessories/wearable_items01/_exp00/vanguard/uncommon/low/shoulders_pauldron06_right',0),(8614,8614,'_exp03/characters/tool_users/honor_elf/honor_elf_male_paladin02',0),(8615,8615,'_exp03/characters/tool_users/honor_elf/honor_elf_male_paladin03',0),(8616,8616,'_exp03/characters/tool_users/honor_elf/honor_elf_male_paladin04',0),(8617,8617,'_exp03/characters/tool_users/honor_elf/honor_elf_male_paladin05',0),(8618,8618,'_exp03/characters/tool_users/honor_elf/honor_elf_male_paladin06',0),(8619,8619,'_exp03/characters/tool_users/honor_elf/honor_elf_male_paladin07',0),(8620,8620,'accessories/wieldable_items/misc/pillow01',0),(8621,8621,'staticobjects/tapestry/dpo_tapestry_design_flames',0),(8622,8622,'staticobjects/tapestry/runny_standflag01_fire_blue_dpo',0),(8623,8623,'staticobjects/cauldron/runnyeye_meltingpot_with_eyes_dpo',0),(8624,8624,'staticobjects/torture_chamber/hanging_evileye_dpo',0),(8625,8625,'staticobjects/tapestry/dpo_tapestry_design_vampire',0),(8626,8626,'staticobjects/tapestry/dpo_tapestry_design_death',0),(8627,8627,'staticobjects/tapestry/dpo_tapestry_design_eyesdark',0),(8628,8628,'staticobjects/containers/dpo_kel_container_basket02',0),(8629,8629,'staticobjects/chairs/dpo_kel_chair_wood01',0),(8630,8630,'staticobjects/tableware/dpo_lt_cup01',0),(8631,8631,'staticobjects/tableware/dpo_lt_jug01',0),(8632,8632,'staticobjects/crystals/dpo_kel_crystal_cylinder_growing01',0),(8633,8633,'staticobjects/pillow/dpo_drv_pillow_floor_round_worn01',0),(8634,8634,'staticobjects/pillow/dpo_djn_pillow_floor_bluesquare02',0),(8635,8635,'staticobjects/carcase/dpo_ss_dunebeetle_carapace01',0),(8636,8636,'staticobjects/tables/dpo_drv_table_end_round01',0),(8637,8637,'staticobjects/tools/dpo_djn_artist_inkbottle01',0),(8638,8638,'accessories/wieldable_items/shields/exp05/tribal_shield',0),(8639,8639,'staticobjects/interiors/scenes/objects_race/dp_objects/tcg_items/tcg_painting13_sporali',0),(8640,8640,'staticobjects/interiors/scenes/objects_race/dp_objects/tcg_items/tcg_painting15_cyndras',0),(8641,8641,'staticobjects/interiors/scenes/objects_race/dp_objects/tcg_items/tcg_painting16_greaves',0),(8642,8642,'staticobjects/interiors/scenes/objects_race/dp_objects/tcg_items/tcg_painting17_bunny',0),(8643,8643,'staticobjects/tableware/dpo_lt_openbowl01',0),(8644,8644,'accessories/wearable_items/_exp08/dragon_armor/leather2_green/chest',1096),(8645,8645,'accessories/wearable_items/_exp08/dragon_armor/leather2_green/feet',1096),(8646,8646,'accessories/wearable_items/_exp08/dragon_armor/leather2_green/forearms',1096),(8647,8647,'accessories/wearable_items/_exp08/dragon_armor/leather2_green/hands',1096),(8648,8648,'creatures/tu/gods_varsoon',0),(8649,8649,'accessories/wearable_items01/_exp00/vanguard/vanguard_tint01/shoulders_pauldron04_right',0),(8650,8650,'accessories/wearable_items01/_exp00/vanguard/vanguard_tint01/shoulders_pauldron04_left',0),(8651,8651,'accessories/wearable_items01/_exp00/vanguard/vanguard_tint01/shoulders_pauldron04_both',0),(8652,8652,'accessories/wearable_items01/_exp00/profesion_hats/clockwork/clockwork_hat_01/head',0),(8653,8653,'accessories/wearable_items01/_exp00/heavy_plate/plain02/head',0),(8654,8654,'accessories/wearable_items01/_exp00/heavy_plate/plain02/shoulders_nopauldrons',0),(8655,8655,'accessories/wearable_items01/_exp00/heavy_plate/plain_white/shoulders_nopauldrons',0),(8656,8656,'_exp01/characters/tool_users/genie_male_warterlord',0),(8657,8657,'ec/pc/darkelf/darkelf_male_vampire',0),(8658,8658,'ec/pc/darkelf/darkelf_female_vampire',0),(8659,8659,'accessories/wearable_items/sallet_helmet/heavy_plate_plain/head',0),(8660,8660,'accessories/wearable_items01/_exp00/sallet_helmet/heavy_plate_plain/head',0),(8661,8661,'_exp05/tool_users/troll_male_pirate',0),(8662,8662,'accessories/npc_wearables/pirates/troll_male_pirate_hat',0),(8663,8663,'accessories/wearable_items/_exp03/mistmoore_vanguard_01/pauldron02_vanguard_ridged_left',0),(8664,8664,'accessories/wearable_items/_exp03/mistmoore_vanguard_01/pauldron02_vanguard_ridged_right',0),(8665,8665,'ec/pc/ogre/fire_ogre_male',0),(8666,8666,'_exp05/zones/objects/exp05_dun_najena_forge/nh_spin_wheel_gold',0),(8667,8667,'_exp05/zones/objects/exp05_dun_najena_forge/nh_wheel_control_panel',0),(8668,8668,'creatures/monsters/wolf_shade',0),(8669,8669,'_exp01/characters/tool_users/water_djinn_master',0),(8670,8670,'_exp02/characters/monsters/basilisk_ice',0),(8671,8671,'ec/pc/ogre/green_mist_ogre_female',0),(8672,8672,'ec/pc/ogre/green_mist_ogre_male',0),(8673,8673,'staticobjects/weapons/dpo_zombie_club_animated02',0),(8674,8674,'accessories/wearable_items/heavy_plate/plain02/pauldron08_vanguard_skulls_sarnak_left',0),(8675,8675,'accessories/wearable_items/heavy_plate/plain02/pauldron08_vanguard_skulls_sarnak_right',0),(8676,8676,'accessories/wearable_items/vanguard/vanguard_chitin_fresnel/chest',0),(8677,8677,'accessories/wearable_items/vanguard/vanguard_chitin_fresnel/feet',0),(8678,8678,'accessories/wearable_items/vanguard/vanguard_chitin_fresnel/forearms',0),(8679,8679,'accessories/wearable_items/vanguard/vanguard_chitin_fresnel/hands',0),(8680,8680,'accessories/wearable_items/vanguard/vanguard_chitin_fresnel/head',0),(8681,8681,'accessories/wearable_items/vanguard/vanguard_chitin_fresnel/left',0),(8682,8682,'accessories/wearable_items/vanguard/vanguard_chitin_fresnel/legs',0),(8683,8683,'accessories/wearable_items/vanguard/vanguard_chitin_fresnel/legs_noskirt',0),(8684,8684,'accessories/wearable_items/vanguard/vanguard_chitin_fresnel/pauldron07_vanguard_gothic_left',0),(8685,8685,'accessories/wearable_items/vanguard/vanguard_chitin_fresnel/pauldron07_vanguard_gothic_right',0),(8686,8686,'accessories/wearable_items/vanguard/vanguard_chitin_fresnel/right',0),(8687,8687,'accessories/wearable_items/vanguard/vanguard_chitin_fresnel/shoulders',0),(8688,8688,'accessories/wearable_items/vanguard/vanguard_chitin_fresnel/shoulders_nopauldrons',0),(8689,8689,'accessories/wearable_items/vanguard/vanguard_chitin_fresnel/shoulders_pauldron07_both',0),(8690,8690,'accessories/wearable_items/vanguard/vanguard_chitin_fresnel/shoulders_pauldron07_left',0),(8691,8691,'accessories/wearable_items/vanguard/vanguard_chitin_fresnel/shoulders_pauldron07_right',0),(8692,8692,'accessories/wearable_items/vanguard/vanguard_chitin_fresnel/skirt',0),(8693,8693,'accessories/wearable_items/vanguard/vanguard_chitin_fresnel/upperchest',0),(8694,8694,'accessories/wearable_items01/_exp00/vanguard/vanguard_chitin_fresnel/chest',0),(8695,8695,'accessories/wearable_items01/_exp00/vanguard/vanguard_chitin_fresnel/feet',0),(8696,8696,'accessories/wearable_items01/_exp00/vanguard/vanguard_chitin_fresnel/forearms',0),(8697,8697,'accessories/wearable_items01/_exp00/vanguard/vanguard_chitin_fresnel/hands',0),(8698,8698,'accessories/wearable_items01/_exp00/vanguard/vanguard_chitin_fresnel/head',0),(8699,8699,'accessories/wearable_items01/_exp00/vanguard/vanguard_chitin_fresnel/legs',0),(8700,8700,'accessories/wearable_items01/_exp00/vanguard/vanguard_chitin_fresnel/legs_noskirt',0),(8701,8701,'accessories/wearable_items01/_exp00/vanguard/vanguard_chitin_fresnel/right',0),(8702,8702,'accessories/wearable_items01/_exp00/vanguard/vanguard_chitin_fresnel/shoulders',0),(8703,8703,'accessories/wearable_items01/_exp00/vanguard/vanguard_chitin_fresnel/shoulders_nopauldrons',0),(8704,8704,'accessories/wearable_items01/_exp00/vanguard/vanguard_chitin_fresnel/shoulders_pauldron07_both',0),(8705,8705,'accessories/wearable_items01/_exp00/vanguard/vanguard_chitin_fresnel/shoulders_pauldron07_left',0),(8706,8706,'accessories/wearable_items01/_exp00/vanguard/vanguard_chitin_fresnel/shoulders_pauldron07_right',0),(8707,8707,'accessories/wearable_items01/_exp00/vanguard/vanguard_chitin_fresnel/skirt',0),(8708,8708,'accessories/wearable_items01/_exp00/vanguard/vanguard_chitin_fresnel/upperchest',0),(8709,8709,'creatures/tu/iksar_skeleton__bruiser_01_female',0),(8710,8710,'creatures/tu/iksar_skeleton__mage_01_female',0),(8711,8711,'creatures/tu/iksar_skeleton_female',0),(8712,8712,'creatures/tu/iksar_skeleton_mage_01',0),(8713,8713,'creatures/tu/iksar_skeleton_miniboss_01',0),(8714,8714,'creatures/tu/iksar_skeleton_warrior_01',0),(8715,8715,'creatures/tu/iksar_skeleton_warrior_01_female',0),(8716,8716,'creatures/tu/iksar_skeleton_warrior_02',0),(8717,8717,'creatures/tu/iksar_skeleton_warrior_02_female',0),(8718,8718,'creatures/tu/iksar_skeleton_warrior_03',0),(8719,8719,'accessories/wearable_items/sallet_helmet/vanguard_chitin_fresnel/head',0),(8720,8720,'staticobjects/liveevent/frostfell/dpo_apple_pie',0),(8721,8721,'staticobjects/liveevent/frostfell/dpo_apple_pie2',0),(8722,8722,'staticobjects/liveevent/frostfell/dpo_bauble_blue01',0),(8723,8723,'staticobjects/liveevent/frostfell/dpo_bauble_glass_blue01',0),(8724,8724,'staticobjects/liveevent/frostfell/dpo_bauble_glass_green01',0),(8725,8725,'staticobjects/liveevent/frostfell/dpo_bauble_glass_red01',0),(8726,8726,'staticobjects/liveevent/frostfell/dpo_bauble_gold01',0),(8727,8727,'staticobjects/liveevent/frostfell/dpo_bauble_green01',0),(8728,8728,'staticobjects/liveevent/frostfell/dpo_bauble_red01',0),(8729,8729,'staticobjects/liveevent/frostfell/dpo_bauble_silver01',0),(8730,8730,'staticobjects/liveevent/frostfell/dpo_candle_darkver_black01',0),(8731,8731,'staticobjects/liveevent/frostfell/dpo_candle_darkver_black02',0),(8732,8732,'staticobjects/liveevent/frostfell/dpo_candle_darkver_floating01',0),(8733,8733,'staticobjects/liveevent/frostfell/dpo_candle_darkver_purple01',0),(8734,8734,'staticobjects/liveevent/frostfell/dpo_candle_darkver_purple02',0),(8735,8735,'staticobjects/liveevent/frostfell/dpo_candlegroup_darkver_greenblack',0),(8736,8736,'staticobjects/liveevent/frostfell/dpo_candlegroup_darkver_greensilver',0),(8737,8737,'staticobjects/liveevent/frostfell/dpo_candlegroup_darkver_purpleblack',0),(8738,8738,'staticobjects/liveevent/frostfell/dpo_candlegroup_darkver_purplesilver',0),(8739,8739,'staticobjects/liveevent/frostfell/dpo_ham01',0),(8740,8740,'staticobjects/liveevent/frostfell/dpo_pastries01',0),(8741,8741,'staticobjects/liveevent/frostfell/dpo_present_darkver_black_big',0),(8742,8742,'staticobjects/liveevent/frostfell/dpo_present_darkver_black_medium',0),(8743,8743,'staticobjects/liveevent/frostfell/dpo_present_darkver_leather_cracked_large',0),(8744,8744,'staticobjects/liveevent/frostfell/dpo_present_darkver_leather_group01',0),(8745,8745,'staticobjects/liveevent/frostfell/dpo_present_darkver_leather_patched_medium',0),(8746,8746,'staticobjects/liveevent/frostfell/dpo_present_darkver_leather_small',0),(8747,8747,'staticobjects/liveevent/frostfell/dpo_present_darkver_purple_big',0),(8748,8748,'staticobjects/liveevent/frostfell/dpo_present_darkver_purple_group01',0),(8749,8749,'staticobjects/liveevent/frostfell/dpo_present_darkver_purple_small',0),(8750,8750,'staticobjects/liveevent/frostfell/dpo_sack_of_coal01',0),(8751,8751,'staticobjects/liveevent/frostfell/dpo_snowflake01',0),(8752,8752,'staticobjects/liveevent/frostfell/dpo_snowflake01_rotate',0),(8753,8753,'staticobjects/liveevent/frostfell/dpo_snowflake02',0),(8754,8754,'staticobjects/liveevent/frostfell/dpo_snowflake02_rotate',0),(8755,8755,'staticobjects/liveevent/frostfell/dpo_stocking_darkver_female_purple',0),(8756,8756,'staticobjects/liveevent/frostfell/dpo_stocking_darkver_female_warg_spotted',0),(8757,8757,'staticobjects/liveevent/frostfell/dpo_stocking_darkver_female_warg_striped',0),(8758,8758,'staticobjects/liveevent/frostfell/dpo_stocking_darkver_green_elven',0),(8759,8759,'staticobjects/liveevent/frostfell/dpo_stocking_darkver_green_elven_female',0),(8760,8760,'staticobjects/liveevent/frostfell/dpo_stocking_darkver_leathercracked',0),(8761,8761,'staticobjects/liveevent/frostfell/dpo_stocking_darkver_leatherpatch',0),(8762,8762,'staticobjects/liveevent/frostfell/dpo_stocking_darkver_purple_large',0),(8763,8763,'staticobjects/liveevent/frostfell/dpo_stocking_darkver_purple_small',0),(8764,8764,'staticobjects/liveevent/frostfell/dpo_wallcandles01_darkver_gold',0),(8765,8765,'staticobjects/liveevent/frostfell/dpo_wallcandles01_darkver_iron',0),(8766,8766,'staticobjects/liveevent/frostfell/dpo_wallcandles01_darkver_silver',0),(8767,8767,'staticobjects/liveevent/halloween/dpo_pumpkin_pie',0),(8768,8768,'_exp05/tool_users/lich_knight',0),(8769,8769,'_exp05/tool_users/lich_mage_01',0),(8770,8770,'_exp05/tool_users/lich_mage_02',0),(8771,8771,'_exp05/tool_users/lich_specter_01',0),(8772,8772,'_exp05/tool_users/lich_specter_02',0),(8773,8773,'_exp05/tool_users/lich_wizard',0),(8774,8774,'_exp04/monsters/clay_golem_water',0),(8775,8775,'creatures/monsters/rumbler_water',0),(8776,8776,'accessories/wieldable_items/weapons/great_sword/greatsword/greatsword002_runic_ice',0),(8777,8777,'accessories/wieldable_items/weapons/sword/long_sword/long_sword001_runic_ice',0),(8778,8778,'accessories/wieldable_items/weapons/great_axe/large_dwarf_axe/large_dwarf_axe_ice',0),(8779,8779,'accessories/wieldable_items/weapons/hammer/mace/mace01_runic_ice',0),(8780,8780,'accessories/wieldable_items/weapons/great_hammer/war_hammer/war_hammer001_runic_ice',0),(8781,8781,'accessories/wieldable_items/weapons/axe/waraxe/waraxe002_runic_ice',0),(8782,8782,'creatures/tu/froglok_kunark_king',0),(8783,8783,'staticobjects/crates/floor_crate_darkelf_pile',0),(8784,8784,'creatures/tu/froglok_undead_guard',0),(8785,8785,'_exp05/monsters/animatedhand_01',0),(8786,8786,'_exp05/monsters/animatedhand_01_bracers',0),(8787,8787,'_exp05/monsters/animatedhand_02',0),(8788,8788,'_exp05/monsters/animatedhand_02_bracers',0),(8789,8789,'staticobjects/liveevent/erollisi_objects/vase_with_gold_roses',0),(8790,8790,'staticobjects/liveevent/erollisi_objects/vase_with_red_roses',0),(8791,8791,'staticobjects/urns/fprt_vase_glass01_dpo',0),(8792,8792,'accessories/wearable_items01/_exp00/sallet_helmet/vanguard_chitin_fresnel/head',0),(8793,8793,'accessories/wieldable_items/weapons/staff/anashti_sul_staff/anashti_sul_staff',0),(8794,8794,'accessories/wieldable_items/weapons/staff/anashti_sul_staff/anashti_sul_staff_undead',0),(8795,8795,'staticobjects/dressers/floor_mayong_dresser',0),(8796,8796,'staticobjects/beds/floor_mayong_bed',0),(8797,8797,'staticobjects/dressers/floor_mayong_desk',0),(8798,8798,'staticobjects/statues/female_suit_of_armor',0),(8799,8799,'staticobjects/chairs/floor_chair_mayong_desk',0),(8800,8800,'staticobjects/chairs/floor_couch_mayong_blue_double',0),(8801,8801,'staticobjects/chairs/floor_couch_mayong_blue_single',0),(8802,8802,'staticobjects/chairs/floor_couch_mayong_gold_double',0),(8803,8803,'staticobjects/chairs/floor_couch_mayong_gold_single',0),(8804,8804,'staticobjects/bookcases/floor_mayong_bookcase',0),(8805,8805,'staticobjects/beds/floor_bed_mayong_blue',0),(8806,8806,'staticobjects/beds/floor_bed_mayong_purple',0),(8807,8807,'staticobjects/brazier/floor_basin',0),(8808,8808,'staticobjects/dressers/floor_mayong_dresser02',0),(8809,8809,'staticobjects/weapons/dpo_axe_curved_handle_plain',0),(8810,8810,'staticobjects/weapons/dpo_battleaxe_uncom',0),(8811,8811,'staticobjects/weapons/dpo_battleaxe_uncom3_dwarven',0),(8812,8812,'staticobjects/weapons/dpo_cobra_hatchet_plain',0),(8813,8813,'staticobjects/weapons/dpo_crescentaxe_uncom',0),(8814,8814,'staticobjects/weapons/dpo_executioners_axe',0),(8815,8815,'staticobjects/weapons/dpo_executioners_axe_com',0),(8816,8816,'staticobjects/weapons/dpo_executioners_cleaver',0),(8817,8817,'staticobjects/weapons/dpo_pickaxe_uncommon1',0),(8818,8818,'_exp05/monsters/dire_bear01_warmor01',0),(8819,8819,'_exp05/monsters/dire_bear01_warmor02',0),(8820,8820,'_exp05/monsters/dire_bear01_wsaddle',0),(8821,8821,'_exp05/monsters/dire_bear01_wsaddle_armor01',0),(8822,8822,'_exp05/monsters/dire_bear01_wsaddle_armor02',0),(8823,8823,'_exp05/monsters/dire_bear02_warmor01',0),(8824,8824,'_exp05/monsters/dire_bear02_warmor02',0),(8825,8825,'_exp05/monsters/dire_bear02_wsaddle',0),(8826,8826,'_exp05/monsters/dire_bear02_wsaddle_armor01',0),(8827,8827,'_exp05/monsters/dire_bear02_wsaddle_armor02',0),(8828,8828,'_exp05/monsters/dire_bear03_warmor01',0),(8829,8829,'_exp05/monsters/dire_bear03_warmor02',0),(8830,8830,'_exp05/monsters/dire_bear03_wsaddle',0),(8831,8831,'_exp05/monsters/dire_bear03_wsaddle_armor01',0),(8832,8832,'_exp05/monsters/dire_bear03_wsaddle_armor02',0),(8833,8833,'_exp05/monsters/dire_bear04_warmor01',0),(8834,8834,'_exp05/monsters/dire_bear04_warmor02',0),(8835,8835,'_exp05/monsters/dire_bear04_wsaddle',0),(8836,8836,'_exp05/monsters/dire_bear04_wsaddle_armor01',0),(8837,8837,'_exp05/monsters/dire_bear04_wsaddle_armor02',0),(8838,8838,'_exp05/tool_users/troll_female_pirate',0),(8839,8839,'accessories/wearable_items01/_exp00/magus/common/low/pants_tintable',0),(8840,8840,'accessories/wearable_items01/_exp00/magus/common/high/chest_tintpants',0),(8841,8841,'staticobjects/transports/carriage',0),(8842,8842,'accessories/wieldable_items/weapons/exp03/1h_pierce/exp03_1hp_unicorn_horn_dagger_ice',0),(8843,8843,'_exp05/monsters/animatedhand_03',0),(8844,8844,'_exp05/monsters/animatedhand_03_bracers',0),(8845,8845,'_exp05/zones/objects/exp05_dun_mistmoore_repository/projector_base',0),(8846,8846,'_exp05/zones/objects/exp05_dun_mistmoore_repository/projector_coin',0),(8847,8847,'creatures/monsters/drake_fire',0),(8848,8848,'staticobjects/chairs/dpo_djn_chair_artiststool_brass01',0),(8849,8849,'staticobjects/chairs/dpo_djn_chair_high_brass01',0),(8850,8850,'staticobjects/dressers/dpo_kel_dresser01',0),(8851,8851,'staticobjects/pillow/dpo_djn_pillow_floor_redround02',0),(8852,8852,'staticobjects/tables/dpo_djn_table_bedside02_brass01',0),(8853,8853,'staticobjects/tables/dpo_drv_bench_brass_ornate01',0),(8854,8854,'accessories/wearable_items/_exp08/dragon_armor/leather2_green/head',1096),(8855,8855,'accessories/wearable_items/_exp08/dragon_armor/leather2_green/legs',1096),(8856,8856,'accessories/wearable_items/_exp08/dragon_armor/leather2_green/legs_noskirt',1096),(8857,8857,'accessories/wearable_items/profesion_hats/centurion_helm/shiny/head',0),(8858,8858,'accessories/wearable_items/profesion_hats/centurion_helm/shiny/straight_crest_shiny',0),(8859,8859,'accessories/wearable_items/profesion_hats/centurion_helm/shiny/transverse_crest_shiny',0),(8860,8860,'accessories/wearable_items/_exp08/dragon_armor/leather2_green/shoulders',1096),(8861,8861,'accessories/wearable_items/_exp08/dragon_armor/leather2_green/shoulders_epic',1096),(8862,8862,'accessories/wearable_items/_exp08/dragon_armor/leather2_red/skirt',1096),(8863,8863,'accessories/wearable_items01/_exp00/profesion_hats/centurion_helm/shiny/head',0),(8864,8864,'accessories/wearable_items01/_exp00/profesion_hats/centurion_helm/shiny/straight_crest_shiny',0),(8865,8865,'accessories/wearable_items/_exp08/dragon_armor/leather2_red/chest',1096),(8866,8866,'ec/pc/cyclops/cyclops_male',0),(8867,8867,'ec/pc/cyclops/cyclops_male_fire',0),(8868,8868,'accessories/wearable_items/cloak/exp05/cloak_void_01',0),(8869,8869,'_exp05/monsters/dire_bear01',0),(8870,8870,'_exp05/monsters/dire_bear02',0),(8871,8871,'_exp05/monsters/dire_bear03',0),(8872,8872,'_exp05/monsters/dire_bear04',0),(8873,8873,'creatures/pets/pet_rock01',0),(8874,8874,'creatures/pets/pet_rock02',0),(8875,8875,'creatures/pets/pet_rock03',0),(8876,8876,'creatures/pets/pet_rock04',0),(8877,8877,'creatures/pets/pet_rock05',0),(8878,8878,'creatures/pets/pet_rock01_copperspots',0),(8879,8879,'creatures/pets/pet_rock01_purplespots',0),(8880,8880,'creatures/pets/pet_rock02_copperspots',0),(8881,8881,'creatures/pets/pet_rock02_purplespots',0),(8882,8882,'creatures/pets/pet_rock03_copperspots',0),(8883,8883,'creatures/pets/pet_rock03_purplespots',0),(8884,8884,'creatures/pets/pet_rock04_copperspots',0),(8885,8885,'creatures/pets/pet_rock04_purplespots',0),(8886,8886,'creatures/pets/pet_rock05_coppespots',0),(8887,8887,'creatures/pets/pet_rock05_purplespots',0),(8888,8888,'accessories/wearable_items/cloak/exp05/cloak_sq_01_beer_stained_01',0),(8889,8889,'creatures/monsters/mantaray_shadow',0),(8890,8890,'_exp05/tool_users/lich_shadow_01',0),(8891,8891,'_exp05/tool_users/lich_shadow_02',0),(8892,8892,'_exp05/tool_users/lich_knight_ghost',0),(8893,8893,'_exp05/tool_users/lich_shadow_03',0),(8894,8894,'_exp05/tool_users/lich_shadow_04',0),(8895,8895,'accessories/npc_wearables/voidman_armor/voidman_chest_01',0),(8896,8896,'accessories/npc_wearables/voidman_armor/voidman_head_01',0),(8897,8897,'accessories/npc_wearables/voidman_armor/voidman_head_02',0),(8898,8898,'accessories/npc_wearables/voidman_armor/voidman_head_03',0),(8899,8899,'accessories/npc_wearables/voidman_armor/voidman_head_04',0),(8900,8900,'accessories/npc_wearables/voidman_armor/voidman_legs_01',0),(8901,8901,'accessories/npc_wearables/voidman_armor/voidman_legs_02',0),(8902,8902,'accessories/npc_wearables/voidman_armor/voidman_legs_03',0),(8903,8903,'accessories/npc_wearables/voidman_armor/voidman_legs_04',0),(8904,8904,'accessories/npc_wearables/voidman_armor/voidman_legs_06',0),(8905,8905,'accessories/npc_wearables/voidman_armor/voidman_shoulders_01',0),(8906,8906,'accessories/npc_wearables/voidman_armor/voidman_shoulders_02',0),(8907,8907,'accessories/npc_wearables/voidman_armor/voidman_shoulders_03',0),(8908,8908,'accessories/npc_wearables/voidman_armor/voidman_shoulders_04',0),(8909,8909,'accessories/npc_wearables/voidman_armor/runes/all_orbs',0),(8910,8910,'accessories/npc_wearables/voidman_armor/runes/all_runes',0),(8911,8911,'accessories/npc_wearables/voidman_armor/runes/orb01',0),(8912,8912,'accessories/npc_wearables/voidman_armor/runes/orb02',0),(8913,8913,'accessories/npc_wearables/voidman_armor/runes/orb03',0),(8914,8914,'accessories/npc_wearables/voidman_armor/runes/orb04',0),(8915,8915,'accessories/npc_wearables/voidman_armor/runes/orb05',0),(8916,8916,'accessories/npc_wearables/voidman_armor/runes/orb06',0),(8917,8917,'accessories/npc_wearables/voidman_armor/runes/rune01',0),(8918,8918,'accessories/npc_wearables/voidman_armor/runes/rune02',0),(8919,8919,'accessories/npc_wearables/voidman_armor/runes/rune03',0),(8920,8920,'accessories/npc_wearables/voidman_armor/runes/rune04',0),(8921,8921,'accessories/npc_wearables/voidman_armor/runes/rune05',0),(8922,8922,'accessories/npc_wearables/voidman_armor/runes/rune06',0),(8923,8923,'_exp05/tool_users/voidman',0),(8924,8924,'_exp05/tool_users/voidman_commoner_01',0),(8925,8925,'_exp05/tool_users/voidman_commoner_02',0),(8926,8926,'_exp05/tool_users/voidman_mage_01',0),(8927,8927,'_exp05/tool_users/voidman_mage_02',0),(8928,8928,'_exp05/tool_users/voidman_warrior_01',0),(8929,8929,'_exp05/tool_users/voidman_warrior_02',0),(8930,8930,'accessories/wearable_items/profesion_hats/centurion_helm/shiny/centurion_helmet_shiny_head_no_crest',0),(8931,8931,'accessories/wearable_items/profesion_hats/centurion_helm/shiny/centurion_helmet_shiny_head_straight_crest',0),(8932,8932,'accessories/wearable_items/profesion_hats/centurion_helm/shiny/centurion_helmet_shiny_head_transverse_crest',0),(8933,8933,'accessories/wearable_items01/_exp00/profesion_hats/centurion_helm/shiny/centurion_helmet_shiny_head_no_crest',0),(8934,8934,'accessories/wearable_items01/_exp00/profesion_hats/centurion_helm/shiny/centurion_helmet_shiny_head_straight_crest',0),(8935,8935,'accessories/wearable_items/_exp08/dragon_armor/leather2_red/feet',1096),(8936,8936,'_exp05/zones/objects/tradeskill_dungeons/shipyard/shipyard_dock_dpo',0),(8937,8937,'_exp01/characters/tool_users/specter_shade',0),(8938,8938,'accessories/wearable_items01/_exp00/profesion_hats/centurion_helm/shiny/transverse_crest_shiny',0),(8939,8939,'accessories/wearable_items01/_exp00/profesion_hats/centurion_helm/shiny/centurion_helmet_shiny_head_transverse_crest',0),(8940,8940,'accessories/wearable_items/profesion_hats/centurion_helm/plain01/centurion_helmet_plain01_head_no_crest',0),(8941,8941,'accessories/wearable_items/profesion_hats/centurion_helm/plain01/centurion_helmet_plain01_head_straight_crest',0),(8942,8942,'accessories/wearable_items/profesion_hats/centurion_helm/plain01/centurion_helmet_plain01_head_transverse_crest',0),(8943,8943,'accessories/wearable_items/profesion_hats/centurion_helm/plain01/head',0),(8944,8944,'accessories/wearable_items/profesion_hats/centurion_helm/plain01/straight_crest_plain01',0),(8945,8945,'accessories/wearable_items/profesion_hats/centurion_helm/plain01/transverse_crest_plain01',0),(8946,8946,'accessories/wearable_items01/_exp00/profesion_hats/centurion_helm/plain_01/centurion_helmet_plain01_head_no_crest',0),(8947,8947,'accessories/wearable_items01/_exp00/profesion_hats/centurion_helm/plain_01/centurion_helmet_plain01_head_straight_crest',0),(8948,8948,'accessories/wearable_items01/_exp00/profesion_hats/centurion_helm/plain_01/centurion_helmet_plain01_head_transverse_crest',0),(8949,8949,'accessories/wearable_items01/_exp00/profesion_hats/centurion_helm/plain_01/head',0),(8950,8950,'accessories/wearable_items01/_exp00/profesion_hats/centurion_helm/plain_01/straight_crest_plain01',0),(8951,8951,'accessories/wearable_items01/_exp00/profesion_hats/centurion_helm/plain_01/transverse_crest_plain01',0),(8952,8952,'staticobjects/kitchen/spoon_wall_dpo',0),(8953,8953,'_exp05/tool_users/ogre_male_pirate',0),(8954,8954,'_exp05/zones/objects/tradeskill_dungeons/shipyard/shipyard_side_supports01_dpo',0),(8955,8955,'ec/pc/troll/troll_female_void',0),(8956,8956,'ec/pc/troll/troll_male_void',0),(8957,8957,'creatures/monsters/thoughtbleeder_shade',0),(8958,8958,'creatures/tu/illusionary_soldier_void',0),(8959,8959,'_exp05/tool_users/grummus_01',0),(8960,8960,'accessories/wearable_items/profesion_hats/proffiddlewiz_cap/head',0),(8961,8961,'accessories/wearable_items01/_exp00/profesion_hats/miners_helm/head',0),(8962,8962,'accessories/wearable_items/profesion_hats/miners_helm/head',0),(8963,8963,'accessories/wieldable_items/weapons/exp05/shld_nurgg_shield',0),(8964,8964,'accessories/wieldable_items/weapons/exp05/exp05_1hs_kruzz_sword',0),(8965,8965,'accessories/wieldable_items/weapons/exp05/exp05_1hp_asharae_dagger',0),(8966,8966,'staticobjects/guildhall/gh_loot_cm_coffin_mistmoore01',0),(8967,8967,'staticobjects/guildhall/gh_loot_darathar_head_floor',0),(8968,8968,'accessories/wearable_items/_exp08/dragon_armor/leather2_red/forearms',1096),(8969,8969,'staticobjects/guildhall/gh_loot_gnoll_head_floor',0),(8970,8970,'accessories/wearable_items/_exp08/dragon_armor/leather2_red/hands',1096),(8971,8971,'staticobjects/guildhall/gh_loot_godking_anuk01',0),(8972,8972,'staticobjects/guildhall/gh_loot_tarinax_head_floor',0),(8973,8973,'accessories/wearable_items/_exp08/dragon_armor/leather2_red/head',1096),(8974,8974,'staticobjects/guildhall/gh_loot_venekor_head_floor',0),(8975,8975,'accessories/wearable_items/_exp08/dragon_armor/leather2_red/legs',1096),(8976,8976,'staticobjects/guildhall/gh_loot_vox_head_floor',0),(8977,8977,'accessories/wearable_items/_exp08/dragon_armor/leather2_red/legs_noskirt',1096),(8978,8978,'staticobjects/guildhall/fprt_obj_landmarkstatue01',0),(8979,8979,'staticobjects/guildhall/fprt_obj_squarestatue01',0),(8980,8980,'staticobjects/guildhall/qey_obj_landmarkstatue01',0),(8981,8981,'staticobjects/guildhall/qey_obj_squarestatue01',0),(8982,8982,'_exp05/zones/objects/exp05_dun_mistmoore_repository/projector_complete',0),(8983,8983,'accessories/wieldable_items/weapons/exp05/exp05_1hc_eylee_drum',0),(8984,8984,'accessories/wieldable_items/weapons/exp05/exp05_1hs_claymore_bayle',0),(8985,8985,'accessories/wieldable_items/weapons/exp05/exp05_bow_illisia_bow',0),(8986,8986,'accessories/wieldable_items/shields/tower_shield/marrowguts_blocker/marrowguts_blocker',0),(8987,8987,'accessories/wearable_items/crown_of_tearis/head',0),(8988,8988,'accessories/wearable_items/crown_of_tearis/head_crown_unbroken',0),(8989,8989,'accessories/wearable_items01/_exp00/crown_of_tearis/head',0),(8990,8990,'accessories/wearable_items01/_exp00/crown_of_tearis/head_crown_unbroken',0),(8991,8991,'accessories/wieldable_items/weapons/exp05/exp05_1hc_katluk_censor',0),(8992,8992,'accessories/wearable_items/cloak/exp05/cloak_sq_01_roadyle_mage',0),(8993,8993,'_exp05/tool_users/proto_myrdal_01',0),(8994,8994,'staticobjects/racks/winerack_assembly_dpo',0),(8995,8995,'accessories/wearable_items/profesion_hats/centurion_helm/fire_crest/centurion_helmet_shiny_head_straight_fire_crest',0),(8996,8996,'accessories/wearable_items/profesion_hats/centurion_helm/fire_crest/centurion_helmet_shiny_head_transverse_fire_crest',0),(8997,8997,'accessories/wearable_items/profesion_hats/centurion_helm/fire_crest/straight_fire_crest_shiny',0),(8998,8998,'accessories/wearable_items/profesion_hats/centurion_helm/fire_crest/transverse_fire_crest_shiny',0),(8999,8999,'accessories/wearable_items01/_exp00/profesion_hats/centurion_helm/fire_crest/centurion_helmet_shiny_head_straight_fire_crest',0),(9000,9000,'accessories/wearable_items01/_exp00/profesion_hats/centurion_helm/fire_crest/centurion_helmet_shiny_head_transverse_fire_crest',0),(9001,9001,'accessories/wearable_items01/_exp00/profesion_hats/centurion_helm/fire_crest/straight_fire_crest_shiny',0),(9002,9002,'accessories/wearable_items01/_exp00/profesion_hats/centurion_helm/fire_crest/transverse_fire_crest_shiny',0),(9003,9003,'staticobjects/dressers/dpo_kel_container_merch_acorn02',0),(9004,9004,'accessories/wieldable_items/shields/exp05/ethernaut_shield',0),(9005,9005,'creatures/tu/nightbloodwarrior_shade',0),(9006,9006,'_exp05/zones/objects/exp05_dun_mistmoore_manor/man_portrait_big_goldblack',0),(9007,9007,'_exp05/tool_users/lich_light_spirit',0),(9008,9008,'_exp05/tool_users/lich_specter_02_negativelight',0),(9009,9009,'accessories/wearable_items/cloak/exp05/cloak_sq_01_ethernaut',0),(9010,9010,'creatures/mounts/carpet_ethernaut',0),(9011,9011,'_exp05/zones/objects/exp05_dun_miragul_shard/miragul_obj_crystal',0),(9012,9012,'staticobjects/tapestry/dpo_tapestry_beer_stained_fan_faire_2008',0),(9013,9013,'accessories/npc_wearables/dire_bear_armor/direbear_armor01_chest',0),(9014,9014,'accessories/npc_wearables/dire_bear_armor/direbear_armor01_hands',0),(9015,9015,'accessories/npc_wearables/dire_bear_armor/direbear_armor01_head',0),(9016,9016,'accessories/npc_wearables/dire_bear_armor/direbear_armor01_legs',0),(9017,9017,'accessories/npc_wearables/dire_bear_armor/direbear_armor01_shoulders',0),(9018,9018,'accessories/npc_wearables/dire_bear_armor/direbear_armor02_chest',0),(9019,9019,'accessories/npc_wearables/dire_bear_armor/direbear_armor02_hands',0),(9020,9020,'accessories/npc_wearables/dire_bear_armor/direbear_armor02_head',0),(9021,9021,'accessories/npc_wearables/dire_bear_armor/direbear_armor02_legs',0),(9022,9022,'accessories/npc_wearables/dire_bear_armor/direbear_armor02_shoulders',0),(9023,9023,'accessories/npc_wearables/dire_bear_armor/direbear_saddle01_chest',0),(9024,9024,'creatures/mounts/horse_armor01/horse01_armor01_shadow',0),(9025,9025,'ec/npc/skeletonorc_shadow',0),(9026,9026,'ec/npc/skeletonorc_shadow_negativelight',0),(9027,9027,'creatures/tu/nightbloodwarrior_shade_negativelight',0),(9028,9028,'creatures/tu/skeleton_king_greater_shade_negativelight',0),(9029,9029,'creatures/tu/froglok_skeleton_redeyes',0),(9030,9030,'_exp01/characters/monsters/harpy_raven',0),(9031,9031,'creatures/mounts/horse_saddle_bags_01/horse01_sadle_bags_01_appoloosa',0),(9032,9032,'creatures/mounts/horse_saddle_bags_01/horse01_sadle_bags_01_palomino',0),(9033,9033,'creatures/mounts/horse_saddle_bags_01/horse01_sadle_bags_01_solid',0),(9034,9034,'creatures/monsters/dervish_glass_tintable',0),(9035,9035,'ec/pc/human/human_female_ghost_loop',0),(9036,9036,'ec/pc/human/human_male_ghost_loop',0),(9037,9037,'creatures/monsters/gargoyle_shade',0),(9038,9038,'_exp05/tool_users/gynok_moltor_shade',0),(9039,9039,'staticobjects/tcg/tcg_tempest_teacup',0),(9040,9040,'accessories/wearable_items/_exp05/guk_heavycloth/chest',0),(9041,9041,'accessories/wearable_items/_exp05/guk_heavycloth/feet',0),(9042,9042,'accessories/wearable_items/_exp05/guk_heavycloth/forearms',0),(9043,9043,'accessories/wearable_items/_exp05/guk_heavycloth/hands',0),(9044,9044,'accessories/wearable_items/_exp05/guk_heavycloth/legs',0),(9045,9045,'accessories/wearable_items/_exp05/guk_heavycloth/shoulders',0),(9046,9046,'accessories/wearable_items/_exp05/guk_leather/chest',0),(9047,9047,'accessories/wearable_items/_exp05/guk_leather/feet',0),(9048,9048,'accessories/wearable_items/_exp05/guk_leather/forearms',0),(9049,9049,'accessories/wearable_items/_exp05/guk_leather/hands',0),(9050,9050,'accessories/wearable_items/_exp05/guk_leather/legs',0),(9051,9051,'accessories/wearable_items/_exp05/guk_leather/legs_noskirt',0),(9052,9052,'accessories/wearable_items/_exp05/guk_leather/shoulders',0),(9053,9053,'accessories/wearable_items/_exp05/guk_leather/skirt',0),(9054,9054,'accessories/wearable_items/_exp05/guk_vanguard/chest',0),(9055,9055,'accessories/wearable_items/_exp05/guk_vanguard/feet',0),(9056,9056,'accessories/wearable_items/_exp05/guk_vanguard/forearms',0),(9057,9057,'accessories/wearable_items/_exp05/guk_vanguard/hands',0),(9058,9058,'accessories/wearable_items/_exp05/guk_vanguard/legs',0),(9059,9059,'accessories/wearable_items/_exp05/guk_vanguard/legs_noskirt',0),(9060,9060,'accessories/wearable_items/_exp05/guk_vanguard/right',0),(9061,9061,'accessories/wearable_items/_exp05/guk_vanguard/shoulders',0),(9062,9062,'accessories/wearable_items/_exp05/guk_vanguard/shoulders_nopauldrons',0),(9063,9063,'accessories/wearable_items/_exp05/guk_vanguard/skirt',0),(9064,9064,'_exp05/tool_users/troll_female_pirate_skimpy',0),(9065,9065,'_exp05/tool_users/troll_male_pirate_pegleg',0),(9066,9066,'staticobjects/guildhall/majdul_derv_orrey01',0),(9067,9067,'_exp05/zones/objects/exp05_dun_befallen_forsaken/befallen_stone_bench_01',0),(9068,9068,'_exp05/zones/objects/exp05_dun_befallen_forsaken/befallen_stone_bench_02',0),(9069,9069,'_exp05/zones/objects/exp05_dun_befallen_forsaken/befallen_stone_table_01',0),(9070,9070,'_exp05/zones/objects/exp05_dun_befallen_forsaken/befallen_stone_table_long_01',0),(9071,9071,'_exp05/zones/objects/exp05_dun_befallen_forsaken/befallen_canopic_jar_01',0),(9072,9072,'_exp05/zones/objects/exp05_dun_befallen_forsaken/fprt_hood_bar_counter_broken_01',0),(9073,9073,'_exp05/zones/objects/exp05_dun_befallen_forsaken/fprt_hood_bar_counter_broken_02',0),(9074,9074,'_exp05/zones/objects/exp05_dun_befallen_forsaken/fprt_hood_bench_broken_01',0),(9075,9075,'_exp05/zones/objects/exp05_dun_befallen_forsaken/fprt_hood_chair_broken_01',0),(9076,9076,'_exp05/zones/objects/exp05_dun_befallen_forsaken/fprt_hood_chair_broken_02',0),(9077,9077,'_exp05/zones/objects/exp05_dun_befallen_forsaken/fprt_hood_chair_broken_03',0),(9078,9078,'_exp05/zones/objects/exp05_dun_befallen_forsaken/fprt_hood_table_large_broken_01',0),(9079,9079,'_exp05/zones/objects/exp05_dun_befallen_forsaken/fprt_hood_table_large_broken_02',0),(9080,9080,'_exp05/zones/objects/exp05_dun_befallen_forsaken/fprt_hood_table_small_broken_01',0),(9081,9081,'_exp05/zones/objects/exp05_dun_befallen_forsaken/fprt_hood_table_small_broken_02',0),(9082,9082,'_exp05/zones/objects/exp05_dun_befallen_forsaken/befallen_stone_chair_01',0),(9083,9083,'_exp05/zones/objects/exp05_dun_befallen_forsaken/befallen_clay_pot_tall_01',0),(9084,9084,'_exp05/zones/objects/exp05_dun_befallen_forsaken/fallengate_swordrack_01',0),(9085,9085,'_exp05/zones/objects/exp05_dun_befallen_forsaken/fallengate_swordrack_busted_01',0),(9086,9086,'accessories/wearable_items/cloak/exp05/cloak_sq_01_ethernaut_asharae',0),(9087,9087,'accessories/wearable_items/cloak/exp05/cloak_sq_01_ethernaut_illisia',0),(9088,9088,'accessories/wearable_items/_exp05/guk_magus/chest',0),(9089,9089,'accessories/wearable_items/_exp08/dragon_armor/leather2_red/shoulders',1096),(9090,9090,'accessories/wearable_items/_exp08/dragon_armor/leather2_red/shoulders_epic',1096),(9091,9091,'accessories/wearable_items/_exp05/guk_robe/chest',0),(9092,9092,'accessories/wearable_items/_exp05/guk_robe/pants',0),(9093,9093,'accessories/wearable_items/_exp05/guk_robe/skirt',0),(9094,9094,'staticobjects/guildhall/fprt_obj_landmarkstatue01_nobirds',0),(9095,9095,'staticobjects/guildhall/qey_obj_landmarkstatue01_nobirds',0),(9096,9096,'_exp05/tool_users/gynok_moltor',0),(9097,9097,'_exp05/tool_users/mummy_variant_mage_01',0),(9098,9098,'_exp05/zones/objects/exp05_dun_guk_lower/banners/guk_lower_banner01_wall01',0),(9099,9099,'_exp05/zones/objects/exp05_dun_guk_lower/banners/guk_lower_banner01_wall02',0),(9100,9100,'accessories/wieldable_items/weapons/hammer/rolling_pin/rolling_pin_01',0),(9101,9101,'accessories/wieldable_items/weapons/hammer/rolling_pin/rolling_pin_metal',0),(9102,9102,'_exp05/tool_users/proto_drachnid_01',0),(9103,9103,'accessories/wearable_items/cloak/exp05/cloak_sq_01_ethernaut_bayle',0),(9104,9104,'staticobjects/tcg/tcg_ice_cream_cart_01',0),(9105,9105,'accessories/wieldable_items/misc/npc_torch_01',0),(9106,9106,'_exp01/characters/monsters/naga_shade',0),(9107,9107,'_exp05/zones/objects/exp05_dun_befallen_forsaken/befallen_statue_mounted_knight',0),(9108,9108,'_exp05/zones/objects/exp05_dun_befallen_forsaken/befallen_statue_mounted_knight_headless',0),(9109,9109,'_exp05/zones/objects/exp05_dun_befallen_forsaken/befallen_statue_knight',0),(9110,9110,'staticobjects/liveevent/dpo_temple_of_life',0),(9111,9111,'accessories/wieldable_items/weapons/exp05/2h_void_staff01_bubbles',0),(9112,9112,'creatures/mounts/unicorn/unicorn_saddle01',0),(9113,9113,'creatures/mounts/unicorn/unicorn_saddle02',0),(9114,9114,'creatures/mounts/unicorn/unicorn_saddle_bags_01',0),(9115,9115,'_exp05/tool_users/boarfiend_armor_light',0),(9116,9116,'_exp05/tool_users/boarfiend_armor_medium',0),(9117,9117,'_exp05/tool_users/boarfiend_armor_heavy',0),(9118,9118,'_exp05/zones/objects/exp05_dun_befallen_forsaken/befallen_hourglass',0),(9119,9119,'accessories/wearable_items/_exp05/guk_heavycloth/guk_pauldron01_left',0),(9120,9120,'accessories/wearable_items/_exp05/guk_heavycloth/guk_pauldron01_right',0),(9121,9121,'accessories/wearable_items/_exp05/guk_heavycloth/guk_pauldron02_left',0),(9122,9122,'accessories/wearable_items/_exp05/guk_heavycloth/guk_pauldron02_right',0),(9123,9123,'accessories/wearable_items/_exp05/guk_heavycloth/guk_wrist01_left',0),(9124,9124,'accessories/wearable_items/_exp05/guk_heavycloth/guk_wrist01_right',0),(9125,9125,'accessories/wearable_items/_exp05/guk_heavycloth/guk_wrist02_left',0),(9126,9126,'accessories/wearable_items/_exp05/guk_heavycloth/guk_wrist02_right',0),(9127,9127,'accessories/wearable_items/_exp05/guk_heavycloth/hands_wrist01_both',0),(9128,9128,'accessories/wearable_items/_exp05/guk_heavycloth/hands_wrist02_both',0),(9129,9129,'accessories/wearable_items/_exp05/guk_heavycloth/shoulders_pauldron01_both',0),(9130,9130,'accessories/wearable_items/_exp05/guk_heavycloth/shoulders_pauldron02_both',0),(9131,9131,'accessories/wearable_items/_exp05/guk_helms/guk_hat01',0),(9132,9132,'accessories/wearable_items/_exp05/guk_helms/guk_hat02',0),(9133,9133,'accessories/wearable_items/_exp05/guk_leather/hands_wrist01_both',0),(9134,9134,'accessories/wearable_items/_exp05/guk_leather/hands_wrist02_both',0),(9135,9135,'accessories/wearable_items/_exp05/guk_leather/shoulders_pauldron01_both',0),(9136,9136,'accessories/wearable_items/_exp05/guk_leather/shoulders_pauldron02_both',0),(9137,9137,'accessories/wearable_items/_exp05/guk_magus/chest_pauldrons01_both',0),(9138,9138,'accessories/wearable_items/_exp05/guk_magus/chest_pauldrons02_both',0),(9139,9139,'accessories/wearable_items/_exp05/guk_robe/chest_pauldrons01_both',0),(9140,9140,'accessories/wearable_items/_exp05/guk_robe/chest_pauldrons02_both',0),(9141,9141,'accessories/wearable_items/_exp05/guk_vanguard/hands_wrist01_both',0),(9142,9142,'accessories/wearable_items/_exp05/guk_vanguard/hands_wrist02_both',0),(9143,9143,'accessories/wearable_items/_exp05/guk_vanguard/shoulders_pauldrons01_both',0),(9144,9144,'accessories/wearable_items/_exp05/guk_vanguard/shoulders_pauldrons02_both',0),(9145,9145,'creatures/tu/lavastatue_boss',0),(9146,9146,'accessories/wieldable_items/shields/tower_shield/turtle_shield/turtle_shield01',0),(9147,9147,'accessories/wearable_items/_exp05/void_heavycloth/chest',0),(9148,9148,'accessories/wearable_items/_exp05/void_heavycloth/feet',0),(9149,9149,'accessories/wearable_items/_exp05/void_heavycloth/forearms',0),(9150,9150,'accessories/wearable_items/_exp05/void_heavycloth/hands',0),(9151,9151,'accessories/wearable_items/_exp05/void_heavycloth/head',0),(9152,9152,'accessories/wearable_items/_exp05/void_heavycloth/legs',0),(9153,9153,'accessories/wearable_items/_exp05/void_heavycloth/shoulders',0),(9154,9154,'accessories/wearable_items/_exp05/void_leather/chest',0),(9155,9155,'accessories/wearable_items/_exp05/void_leather/feet',0),(9156,9156,'accessories/wearable_items/_exp05/void_leather/forearms',0),(9157,9157,'accessories/wearable_items/_exp05/void_leather/hands',0),(9158,9158,'accessories/wearable_items/_exp05/void_leather/head',0),(9159,9159,'accessories/wearable_items/_exp05/void_leather/legs',0),(9160,9160,'accessories/wearable_items/_exp05/void_leather/legs_noskirt',0),(9161,9161,'accessories/wearable_items/_exp05/void_leather/shoulders',0),(9162,9162,'accessories/wearable_items/_exp05/void_leather/skirt',0),(9163,9163,'accessories/wearable_items/_exp05/void_magus/chest',0),(9164,9164,'accessories/wearable_items/_exp08/dragon_armor/leather2_shadow/skirt',1096),(9165,9165,'accessories/wearable_items/_exp08/dragon_armor/leather2_shadow/chest',1096),(9166,9166,'accessories/wearable_items/_exp05/void_robe/chest',0),(9167,9167,'accessories/wearable_items/_exp05/void_robe/hood',0),(9168,9168,'accessories/wearable_items/_exp05/void_robe/pants',0),(9169,9169,'accessories/wearable_items/_exp05/void_robe/skirt',0),(9170,9170,'accessories/wearable_items/_exp05/void_vanguard/chest',0),(9171,9171,'accessories/wearable_items/_exp05/void_vanguard/feet',0),(9172,9172,'accessories/wearable_items/_exp05/void_vanguard/forearms',0),(9173,9173,'accessories/wearable_items/_exp05/void_vanguard/hands',0),(9174,9174,'accessories/wearable_items/_exp05/void_vanguard/head',0),(9175,9175,'accessories/wearable_items/_exp05/void_vanguard/legs',0),(9176,9176,'accessories/wearable_items/_exp05/void_vanguard/legs_noskirt',0),(9177,9177,'accessories/wearable_items/_exp05/void_vanguard/right',0),(9178,9178,'accessories/wearable_items/_exp05/void_vanguard/shoulders',0),(9179,9179,'accessories/wearable_items/_exp05/void_vanguard/shoulders_nopauldrons',0),(9180,9180,'accessories/wearable_items/_exp05/void_vanguard/skirt',0),(9181,9181,'accessories/wieldable_items/weapons/staff/staff_of_theer/staff_of_theer',0),(9182,9182,'_exp05/zones/objects/exp05_dun_mistmoore_manor/female_suit_of_armor',0),(9183,9183,'_exp05/zones/objects/exp05_dun_void_anchor/void_lamp01',0),(9184,9184,'_exp05/tool_users/mummy_variant_warrior_01',0),(9185,9185,'accessories/npc_wearables/voidman_armor/voidman_legs_05',0),(9186,9186,'accessories/wearable_items/cloak/exp05/cloak_sq_01_antonia',0),(9187,9187,'accessories/wearable_items/cloak/exp05/cloak_sq_01_lucan',0),(9188,9188,'_exp05/zones/objects/exp05_dun_befallen_forsaken/bef_shield_statue01',0),(9189,9189,'_exp05/zones/objects/exp05_dun_befallen_forsaken/bef_statue_warrior_shield01',0),(9190,9190,'_exp05/zones/objects/exp05_dun_befallen_forsaken/bef_statue_warrior01',0),(9191,9191,'_exp05/tool_users/boarfiend_chieftan',0),(9192,9192,'_exp05/tool_users/trollzombie_male',0),(9193,9193,'accessories/wearable_items/cloak/nights_of_the_dead/notd_fire_cloak',0),(9194,9194,'accessories/wearable_items/cloak/nights_of_the_dead/notd_night_sky_cloak',0),(9195,9195,'accessories/wearable_items/cloak/nights_of_the_dead/notd_web_spider_cloak',0),(9196,9196,'_exp05/tool_users/mummy_variant_toturer_01',0),(9197,9197,'_exp05/tool_users/mummy_variant_toturer_full_armor',0),(9198,9198,'_exp05/tool_users/mummy_variant_toturer_no_armor',0),(9199,9199,'accessories/wearable_items/_exp08/dragon_armor/leather2_shadow/feet',1096),(9200,9200,'accessories/wearable_items/_exp08/dragon_armor/leather2_shadow/forearms',1096),(9201,9201,'accessories/wearable_items/_exp05/guk_heavycloth/shoulders_turtle_both',0),(9202,9202,'accessories/wearable_items/_exp05/guk_magus/arms',0),(9203,9203,'accessories/wearable_items/_exp05/guk_magus/skirt',0),(9204,9204,'accessories/wearable_items/_exp05/guk_robe/hood',0),(9205,9205,'accessories/wearable_items/_exp05/void_magus/arms',0),(9206,9206,'accessories/wearable_items/_exp05/void_magus/skirt',0),(9207,9207,'creatures/tu/livingstatue_blackmarble',0),(9208,9208,'creatures/tu/livingstatue_whitemarble',0),(9209,9209,'staticobjects/boats/shipwreck',0),(9210,9210,'accessories/wearable_items/cloak/frostfell/frostfell_cloak_gigglegibber',0),(9211,9211,'staticobjects/liveevent/halloween/halloween_alchemist_flasks',0),(9212,9212,'staticobjects/liveevent/halloween/halloween_butcher_block',0),(9213,9213,'staticobjects/liveevent/halloween/halloween_candelabra_skel',0),(9214,9214,'staticobjects/liveevent/halloween/halloween_cauldron',0),(9215,9215,'staticobjects/liveevent/halloween/halloween_iron_maiden',0),(9216,9216,'staticobjects/liveevent/halloween/halloween_orangegreen_pillows',0),(9217,9217,'staticobjects/liveevent/halloween/halloween_orb_chandelier',0),(9218,9218,'staticobjects/liveevent/halloween/halloween_shackled_skeleton01',0),(9219,9219,'staticobjects/liveevent/halloween/halloween_shackled_skeleton02',0),(9220,9220,'staticobjects/liveevent/halloween/halloween_shackles',0),(9221,9221,'staticobjects/liveevent/halloween/halloween_skeleton_cage',0),(9222,9222,'staticobjects/liveevent/halloween/halloween_skull_chandelier',0),(9223,9223,'staticobjects/liveevent/halloween/halloween_skull_drapery',0),(9224,9224,'staticobjects/liveevent/halloween/halloween_wall_candle',0),(9225,9225,'accessories/wearable_items/cloak/frostfell/frostfell_cloak_giftwrap_01',0),(9226,9226,'accessories/wieldable_items/weapons/exp05/claymore_sword001_ornate_epic',0),(9227,9227,'_exp05/tool_users/mummy_variant_priest_01',0),(9228,9228,'accessories/wearable_items/cloak/frostfell/frostfell_cloak_giftwrap_02',0),(9229,9229,'staticobjects/liveevent/halloween/halloween_spider_eggs',0),(9230,9230,'_exp05/tool_users/trollzombie_female',0),(9231,9231,'_exp05/tool_users/mummy_variant_captain',0),(9232,9232,'_exp05/tool_users/mummy_variant_brawler',0),(9233,9233,'accessories/wearable_items/cloak/frostfell/frostfell_cloak_snowflakes',0),(9234,9234,'staticobjects/kitchen/floor_plate_of_rats',0),(9235,9235,'staticobjects/rubble/boarfiend_garbage',0),(9236,9236,'accessories/wearable_items/cloak/frostfell/frostfell_cloak_candy_canes',0),(9237,9237,'staticobjects/guildhall/druidring_drystone',0),(9238,9238,'accessories/wieldable_items/weapons/exp05/exp05_1hc_thex_mallet',0),(9239,9239,'staticobjects/liveevent/frostfell/dpo_christmas_snowtree_small01_houseitem',0),(9240,9240,'accessories/wieldable_items/weapons/exp05/exp05_2hc_thex_mallet',0),(9241,9241,'accessories/wearable_items/cloak/exp05/cloak_sq_01_akella_01',0),(9242,9242,'accessories/wieldable_items/weapons/exp05/exp05_1hs_greenmist_katana',0),(9243,9243,'staticobjects/liveevent/frostfell/dpo_christmas_evil_tree_small01_houseitem',0),(9244,9244,'accessories/wieldable_items/weapons/exp05/1hc_battlehammer_shadow',0),(9245,9245,'accessories/wieldable_items/weapons/exp05/1hc_human_skull_scepter_shadow',0),(9246,9246,'accessories/wieldable_items/weapons/exp05/1hp_dual_bladed_stiletto_shadow',0),(9247,9247,'accessories/wieldable_items/weapons/exp05/1hs_lamentation_shadow',0),(9248,9248,'accessories/wieldable_items/weapons/exp05/1hs_ornate_elven_rapier_shadow',0),(9249,9249,'accessories/wieldable_items/weapons/exp05/battleaxe001_shadow',0),(9250,9250,'accessories/wieldable_items/weapons/exp05/blade_of_fist_shadow',0),(9251,9251,'accessories/wieldable_items/weapons/exp05/bow_giant_wooden_bow_shadow',0),(9252,9252,'accessories/wieldable_items/weapons/exp05/claymore_sword001_shadow',0),(9253,9253,'accessories/wieldable_items/weapons/exp05/cobra_staff_shadow',0),(9254,9254,'accessories/wieldable_items/weapons/exp05/crab_sceptre_shadow',0),(9255,9255,'accessories/wieldable_items/weapons/exp05/deadman_call_shadow',0),(9256,9256,'accessories/wieldable_items/weapons/exp05/dragon_flame_shadow',0),(9257,9257,'accessories/wieldable_items/weapons/exp05/dragon_katana_shadow',0),(9258,9258,'accessories/wieldable_items/weapons/exp05/holy_symbol001_shadow',0),(9259,9259,'accessories/wieldable_items/weapons/exp05/orb001_shadow',0),(9260,9260,'accessories/wieldable_items/weapons/exp05/silver_moon_shadow',0),(9261,9261,'accessories/wieldable_items/weapons/exp05/staff_of_bloody_shadow',0),(9262,9262,'accessories/wieldable_items/weapons/exp05/sword_of_nova_shadow',0),(9263,9263,'accessories/wieldable_items/weapons/exp05/wannish_dream_shadow',0),(9264,9264,'accessories/wieldable_items/weapons/exp05/waraxe002_shadow',0),(9265,9265,'accessories/wieldable_items/weapons/exp05/wizards_dagger001_shadow',0),(9266,9266,'_exp05/tool_users/humanzombie_male',0),(9267,9267,'_exp05/zones/objects/exp05_rgn_innothule/fungusman_husk_01',0),(9268,9268,'_exp05/zones/objects/exp05_rgn_innothule/fungusman_husk_02',0),(9269,9269,'_exp05/zones/objects/exp05_rgn_innothule/fungusman_husk_03',0),(9270,9270,'_exp05/zones/objects/exp05_rgn_innothule/fungusman_husk_04',0),(9271,9271,'_exp05/zones/objects/exp05_rgn_innothule/fungusman_husk_05',0),(9272,9272,'accessories/wearable_items/leather/plain/plain/chest',0),(9273,9273,'accessories/wearable_items/leather/plain/plain/feet',0),(9274,9274,'accessories/wearable_items/leather/plain/plain/forearms',0),(9275,9275,'accessories/wearable_items/leather/plain/plain/hands',0),(9276,9276,'accessories/wearable_items/leather/plain/plain/head',0),(9277,9277,'accessories/wearable_items/leather/plain/plain/legs',0),(9278,9278,'accessories/wearable_items/leather/plain/plain/legs_noskirt',0),(9279,9279,'accessories/wearable_items/leather/plain/plain/shoulders',0),(9280,9280,'accessories/wearable_items/leather/plain/plain/skirt',0),(9281,9281,'accessories/wearable_items/leather/plain/plain_studded/chest',0),(9282,9282,'accessories/wearable_items/leather/plain/plain_studded/feet',0),(9283,9283,'accessories/wearable_items/leather/plain/plain_studded/forearms',0),(9284,9284,'accessories/wearable_items/leather/plain/plain_studded/hands',0),(9285,9285,'accessories/wearable_items/leather/plain/plain_studded/head',0),(9286,9286,'accessories/wearable_items/leather/plain/plain_studded/legs',0),(9287,9287,'accessories/wearable_items/leather/plain/plain_studded/pauldron01_leather_heavy_right',0),(9288,9288,'accessories/wearable_items/leather/plain/plain_studded/pauldron01_leather_heavy_left',0),(9289,9289,'accessories/wearable_items/leather/plain/plain_studded/legs_noskirt',0),(9290,9290,'accessories/wearable_items/leather/plain/plain_studded/shoulders',0),(9291,9291,'accessories/wearable_items/leather/plain/plain_studded/shoulders_pauldron01_both',0),(9292,9292,'accessories/wearable_items/leather/plain/plain_studded/skirt',0),(9293,9293,'accessories/wearable_items/leather/plain/unseen_hand/chest',0),(9294,9294,'accessories/wearable_items/leather/plain/unseen_hand/feet',0),(9295,9295,'accessories/wearable_items/leather/plain/unseen_hand/forearms',0),(9296,9296,'accessories/wearable_items/leather/plain/unseen_hand/head',0),(9297,9297,'accessories/wearable_items/leather/plain/unseen_hand/hands',0),(9298,9298,'accessories/wearable_items/leather/plain/unseen_hand/legs',0),(9299,9299,'accessories/wearable_items/leather/plain/unseen_hand/legs_noskirt',0),(9300,9300,'accessories/wearable_items/leather/plain/unseen_hand/shoulders',0),(9301,9301,'accessories/wearable_items/leather/plain/unseen_hand/skirt',0),(9302,9302,'accessories/wieldable_items/misc/ice_cream_cone01',0),(9303,9303,'accessories/wearable_items/profesion_hats/ice_cream_hat/ice_cream_hat01',0),(9304,9304,'accessories/wearable_items/christmas_hats/santa_hat_03/head',0),(9305,9305,'accessories/wearable_items01/_exp00/christmas_hats/santa_hat_03/head',0),(9306,9306,'accessories/wearable_items/_exp05/flowing_black_robe/chest',0),(9307,9307,'accessories/wearable_items/_exp05/flowing_black_robe/hood',0),(9308,9308,'accessories/wearable_items/_exp05/flowing_black_robe/pants',0),(9309,9309,'accessories/wearable_items/_exp05/flowing_black_robe/skirt',0),(9310,9310,'accessories/wearable_items/cloak/exp05/cloak_sq_01_flowing_black_cloak',0),(9311,9311,'creatures/monsters/flyingsnake_ghost',0),(9312,9312,'_exp03/characters/monsters/bone_golem_spirit',0),(9313,9313,'_exp04/monsters/xygoz_spirit',0),(9314,9314,'staticobjects/plants/dpo_gf_lamppost_flower01',0),(9315,9315,'staticobjects/plants/dpo_kel_fae_arbor',0),(9316,9316,'staticobjects/light_sources_player_housing_only/dpo_wallflower_pink',0),(9317,9317,'staticobjects/light_sources_player_housing_only/dpo_wallflower_yellow',0),(9318,9318,'accessories/wieldable_items/weapons/exp05/1h_void_sword02',0),(9319,9319,'accessories/wieldable_items/weapons/exp05/1hc_void_axe02',0),(9320,9320,'accessories/wieldable_items/weapons/exp05/1hc_void_hammer02',0),(9321,9321,'accessories/wieldable_items/weapons/exp05/2h_void_staff02',0),(9322,9322,'accessories/wieldable_items/weapons/exp05/void_bow02',0),(9323,9323,'_exp05/tool_users/trollzombie_female_ec',0),(9324,9324,'accessories/wieldable_items/shields/peppermint_shield/peppermint_shield',0),(9325,9325,'_exp01/zones/regions/sinking_sands/ss_objects/ss_landing_dock/dpo_ss_landing_dock_phase1',0),(9326,9326,'staticobjects/mirrors/vampire_mirror',0),(9327,9327,'_exp05/tool_users/trollzombie_male_ec',0),(9328,9328,'staticobjects/liveevent/community/dpo_assembly_campfire',0),(9329,9329,'staticobjects/liveevent/community/dpo_assembly_curved_stone_bar_01',0),(9330,9330,'staticobjects/liveevent/community/dpo_assembly_curved_wooden_bar_01',0),(9331,9331,'staticobjects/liveevent/community/dpo_assembly_evil_lamppost_with_pillows',0),(9332,9332,'staticobjects/liveevent/community/dpo_assembly_evil_military_bench_and_wine',0),(9333,9333,'staticobjects/liveevent/community/dpo_assembly_evil_purple_tent_01',0),(9334,9334,'staticobjects/liveevent/community/dpo_assembly_evil_red_tent_01',0),(9335,9335,'staticobjects/liveevent/community/dpo_assembly_evil_stone_bench_and_lamps',0),(9336,9336,'staticobjects/liveevent/community/dpo_assembly_good_blue_tent_01',0),(9337,9337,'staticobjects/liveevent/community/dpo_assembly_good_maroon_tent_01',0),(9338,9338,'staticobjects/liveevent/community/dpo_assembly_good_wooden_bench_and_lamps',0),(9339,9339,'_exp05/tool_users/humanzombie_male_ec',0),(9340,9340,'_exp05/tool_users/humanzombie_female',0),(9341,9341,'_exp05/tool_users/humanzombie_female_ec',0),(9342,9342,'accessories/wearable_items/_exp05/shinny_metallic_robe/chest',0),(9343,9343,'accessories/wearable_items/_exp05/shinny_metallic_robe/hood',0),(9344,9344,'accessories/wearable_items/_exp05/shinny_metallic_robe/pants',0),(9345,9345,'accessories/wearable_items/_exp05/shinny_metallic_robe/skirt',0),(9346,9346,'accessories/wearable_items/cloak/exp05/cloak_sq_01_shinny_metallic_cloak',0),(9347,9347,'staticobjects/brazier/dpo_tablebrazier001_lit',0),(9348,9348,'staticobjects/brazier/dpo_tablebrazier001_unlit',0),(9349,9349,'staticobjects/interiors/scenes/objects_race/dp_objects/tcg_items/tcg_painting18_nurgg',0),(9350,9350,'staticobjects/interiors/scenes/objects_race/dp_objects/tcg_items/tcg_painting19_illisia',0),(9351,9351,'staticobjects/interiors/scenes/objects_race/dp_objects/tcg_items/tcg_painting20_bayle',0),(9352,9352,'staticobjects/interiors/scenes/objects_race/dp_objects/tcg_items/tcg_painting21_asharae',0),(9353,9353,'staticobjects/interiors/scenes/objects_race/dp_objects/tcg_items/tcg_painting22_detonation',0),(9354,9354,'staticobjects/interiors/scenes/objects_race/dp_objects/tcg_items/tcg_painting23_flight',0),(9355,9355,'staticobjects/interiors/scenes/objects_race/dp_objects/tcg_items/tcg_painting24_stamina',0),(9356,9356,'staticobjects/interiors/scenes/objects_race/dp_objects/tcg_items/tcg_painting25_mermaid',0),(9357,9357,'staticobjects/interiors/scenes/objects_race/dp_objects/tcg_items/tcg_painting26_kaltuk',0),(9358,9358,'staticobjects/interiors/scenes/objects_race/dp_objects/tcg_items/tcg_painting27_chestplate',0),(9359,9359,'staticobjects/interiors/scenes/objects_race/dp_objects/tcg_items/tcg_painting28_fetid',0),(9360,9360,'staticobjects/interiors/scenes/objects_race/dp_objects/tcg_items/tcg_painting29_lightning',0),(9361,9361,'staticobjects/interiors/scenes/objects_race/dp_objects/tcg_items/tcg_tapestry01_design_asharae',0),(9362,9362,'staticobjects/interiors/scenes/objects_race/dp_objects/tcg_items/tcg_tapestry01_design_bayle',0),(9363,9363,'staticobjects/interiors/scenes/objects_race/dp_objects/tcg_items/tcg_tapestry01_design_illisia',0),(9364,9364,'accessories/wearable_items/cloak/exp05/cloak_sq_01_harvester',0),(9365,9365,'accessories/wieldable_items/weapons/exp05/exp04_orb_of_tishan',0),(9366,9366,'accessories/wearable_items/cloak/exp05/cloak_sq_01_white_dragonscale_cloak',0),(9367,9367,'accessories/wieldable_items/weapons/exp05/whip001_rusty_shadow',0),(9368,9368,'_exp05/zones/objects/exp05_dun_guk_stronghold/dun_guk_stronghold_statues_statue01',0),(9369,9369,'_exp05/zones/objects/tradeskill_dungeons/shipyard/shipyard_boat_stage1_dpo',0),(9370,9370,'_exp05/zones/objects/tradeskill_dungeons/shipyard/shipyard_boat_stage2_dpo',0),(9371,9371,'_exp05/zones/objects/tradeskill_dungeons/shipyard/shipyard_boat_stage3_dpo',0),(9372,9372,'_exp05/zones/objects/tradeskill_dungeons/shipyard/shipyard_boat_complete_dpo',0),(9373,9373,'_exp01/zones/regions/sinking_sands/ss_objects/ss_landing_dock/ss_landing_dock_complete',0),(9374,9374,'accessories/wearable_items/_exp03/mistmoore_vanguard_01_golden/chest',0),(9375,9375,'accessories/wearable_items/_exp03/mistmoore_vanguard_01_golden/feet',0),(9376,9376,'accessories/wearable_items/_exp03/mistmoore_vanguard_01_golden/forearms',0),(9377,9377,'accessories/wearable_items/_exp03/mistmoore_vanguard_01_golden/hands',0),(9378,9378,'accessories/wearable_items/_exp03/mistmoore_vanguard_01_golden/head',0),(9379,9379,'accessories/wearable_items/_exp03/mistmoore_vanguard_01_golden/legs',0),(9380,9380,'accessories/wearable_items/_exp03/mistmoore_vanguard_01_golden/legs_noskirt',0),(9381,9381,'accessories/wearable_items/_exp03/mistmoore_vanguard_01_golden/pauldron02_vanguard_ridged_left',0),(9382,9382,'accessories/wearable_items/_exp03/mistmoore_vanguard_01_golden/pauldron02_vanguard_ridged_right',0),(9383,9383,'accessories/wearable_items/_exp03/mistmoore_vanguard_01_golden/pauldron04_vanguard_medium_left',0),(9384,9384,'accessories/wearable_items/_exp03/mistmoore_vanguard_01_golden/pauldron04_vanguard_medium_right',0),(9385,9385,'accessories/wearable_items/_exp03/mistmoore_vanguard_01_golden/right',0),(9386,9386,'accessories/wearable_items/_exp03/mistmoore_vanguard_01_golden/shoulders',0),(9387,9387,'accessories/wearable_items/_exp03/mistmoore_vanguard_01_golden/shoulders_nopauldrons',0),(9388,9388,'accessories/wearable_items/_exp03/mistmoore_vanguard_01_golden/shoulders_pauldron02_both',0),(9389,9389,'accessories/wearable_items/_exp03/mistmoore_vanguard_01_golden/shoulders_pauldron02_left',0),(9390,9390,'accessories/wearable_items/_exp03/mistmoore_vanguard_01_golden/shoulders_pauldron02_right',0),(9391,9391,'accessories/wearable_items/_exp03/mistmoore_vanguard_01_golden/shoulders_pauldron04_both',0),(9392,9392,'accessories/wearable_items/_exp03/mistmoore_vanguard_01_golden/skirt',0),(9393,9393,'accessories/wearable_items/cloak/exp05/cloak_sq_01_twiddy_cloudskipper_cloak',0),(9394,9394,'ec/pc/troll/troll_male_golden',0),(9395,9395,'creatures/monsters/gargoyle_guk',0),(9396,9396,'staticobjects/halloween/dpo_halloween_hanging_bat_ghost_swinging',0),(9397,9397,'ec/npc/gigglegibber_goblin',0),(9398,9398,'staticobjects/liveevent/dpo_anashti_sul_staff_houseitem',0),(9399,9399,'staticobjects/liveevent/dpo_anashti_sul_staff_undead_houseitem',0),(9400,9400,'staticobjects/tapestry/dpo_tapestry_design_ethernaut',0),(9401,9401,'_exp05/tool_users/troll_strategist',0),(9402,9402,'_exp05/tool_users/troll_guard_captain',0),(9403,9403,'creatures/tu/froglok_skeleton_armor',0),(9404,9404,'creatures/tu/froglok_skeleton_chain',0),(9405,9405,'creatures/tu/froglok_skeleton_guard',0),(9406,9406,'creatures/tu/froglok_zombie_chain',0),(9407,9407,'staticobjects/liveevent/guides/dpo_guide_lizard_cage',0),(9408,9408,'staticobjects/liveevent/guides/dpo_guide_lizard_cage_reward',0),(9409,9409,'staticobjects/deity_altars/altar_anashtisul_basic',0),(9410,9410,'staticobjects/deity_altars/altar_anashtisul_crafted',0),(9411,9411,'staticobjects/deity_altars/altar_anashtisul_exceptional',0),(9412,9412,'staticobjects/deity_altars/altar_rodcetnife_basic',0),(9413,9413,'staticobjects/deity_altars/altar_rodcetnife_crafted',0),(9414,9414,'staticobjects/deity_altars/altar_rodcetnife_exceptional',0),(9415,9415,'accessories/wearable_items/cloak/exp05/cloak_sq_01_magmatic_bronze_splinted',0),(9416,9416,'accessories/wieldable_items/weapons/exp05/exp05_2hs_bone_blade_claymore',0),(9417,9417,'accessories/wieldable_items/weapons/exp05/exp05_2hs_bone_blade_claymore_epic',0),(9418,9418,'staticobjects/books/floor_book_any_thex01',0),(9419,9419,'staticobjects/doors/dpo_comland_gate',0),(9420,9420,'staticobjects/doors/dpo_comland_wallsection',0),(9421,9421,'_exp05/monsters/iksar_greenmist_boss',0),(9422,9422,'_exp05/tool_users/troll_guard_ykesha',0),(9423,9423,'accessories/wieldable_items/weapons/exp05/exp05_2hc_zombie_shovel',0),(9424,9424,'creatures/tu/froglok_undead_executioner',0),(9425,9425,'creatures/pets/baby_dragon_ice',0),(9426,9426,'accessories/wieldable_items/weapons/exp05/exp05_1hs_froglok_executioner',0),(9427,9427,'accessories/wearable_items/cloak/exp05/cloak_pirate_01',0),(9428,9428,'accessories/wearable_items/cloak/exp05/cloak_icecream_01',0),(9429,9429,'accessories/wieldable_items/weapons/exp05/shld_guk_tower_shield',0),(9430,9430,'staticobjects/pictures/dpo_man_portrait_big_goldred',0),(9431,9431,'accessories/wieldable_items/weapons/exp05/shld_shield_01',0),(9432,9432,'accessories/wieldable_items/weapons/exp05/shld_shield_02',0),(9433,9433,'accessories/wieldable_items/weapons/exp05/shld_shield_03',0),(9434,9434,'accessories/wieldable_items/weapons/exp05/shld_shield_04',0),(9435,9435,'accessories/wieldable_items/weapons/exp05/shld_shield_05',0),(9436,9436,'accessories/wieldable_items/weapons/exp05/shld_shield_06',0),(9437,9437,'accessories/wieldable_items/weapons/exp05/shld_shield_07',0),(9438,9438,'accessories/wieldable_items/weapons/exp05/shld_shield_08',0),(9439,9439,'accessories/wieldable_items/weapons/exp05/shld_shield_09',0),(9440,9440,'accessories/wieldable_items/weapons/exp05/shld_shield_10',0),(9441,9441,'staticobjects/pictures/dpo_man_portrait_big_goldblack',0),(9442,9442,'staticobjects/liveevent/frostfell/holiday_custard_pie_flambe',0),(9443,9443,'accessories/wieldable_items/weapons/exp05/exp05_1hp_guk_dagger',0),(9444,9444,'accessories/wieldable_items/weapons/exp05/shld_guk_buckler',0),(9445,9445,'accessories/wieldable_items/weapons/exp05/exp05_bow_guk_bow',0),(9446,9446,'staticobjects/boats/skyblade_full',0),(9447,9447,'accessories/wieldable_items/weapons/exp05/exp05_1hs_guk_axe',0),(9448,9448,'accessories/wieldable_items/weapons/exp05/exp05_guk_totem',0),(9449,9449,'accessories/wieldable_items/weapons/exp05/exp05_guk_orb',0),(9450,9450,'accessories/wearable_items/leather/plain/unseen_hand/pauldron01_leather_heavy_left',0),(9451,9451,'accessories/wearable_items/leather/plain/unseen_hand/pauldron01_leather_heavy_right',0),(9452,9452,'accessories/wearable_items/leather/plain/unseen_hand/shoulders_leather_heavy_both',0),(9453,9453,'accessories/wieldable_items/misc/exp05_stein_guk',0),(9454,9454,'staticobjects/liveevent/frostfell/dpo_peppermint_shield',0),(9455,9455,'creatures/mounts/zeppelin_01',0),(9456,9456,'staticobjects/tapestry/torn_hangingcloth',0),(9457,9457,'staticobjects/scrolls/wantedposter02',0),(9458,9458,'accessories/wearable_items/_exp08/dragon_armor/leather2_shadow/hands',1096),(9459,9459,'_exp05/zones/objects/exp05_rgn_innothule/dpo_inna_high_container_tall01_stone',0),(9460,9460,'_exp05/zones/objects/tradeskill_dungeons/adv04_rgn_village/dpo_innb_obj_barnacle01',0),(9461,9461,'staticobjects/pirate/dpo_inna_pirate_floater_globes01',0),(9462,9462,'accessories/wieldable_items/weapons/exp05/exp05_korsha_staff2h',0),(9463,9463,'accessories/wieldable_items/weapons/exp05/exp05_korsha_longbow',0),(9464,9464,'accessories/wieldable_items/weapons/exp05/exp05_korsha_claymore2h',0),(9465,9465,'accessories/wieldable_items/weapons/exp05/exp05_korsha_axe1h',0),(9466,9466,'accessories/wieldable_items/weapons/exp05/exp05_korsha_hammer1h',0),(9467,9467,'accessories/wieldable_items/shields/exp05/exp05_korsha_kiteshield',0),(9468,9468,'accessories/wieldable_items/shields/exp05/exp05_korsha_roundshield',0),(9469,9469,'accessories/wearable_items/heavy_chain/plain02/chest',0),(9470,9470,'accessories/wearable_items/heavy_chain/plain02/feet',0),(9471,9471,'accessories/wearable_items/heavy_chain/plain02/forearms',0),(9472,9472,'accessories/wearable_items/heavy_chain/plain02/hands',0),(9473,9473,'accessories/wearable_items/heavy_chain/plain02/head',0),(9474,9474,'accessories/wearable_items/heavy_chain/plain02/legs',0),(9475,9475,'accessories/wearable_items/heavy_chain/plain02/legs_noskirt',0),(9476,9476,'accessories/wearable_items/heavy_chain/plain02/pauldron_leahter_light_left',0),(9477,9477,'accessories/wearable_items/heavy_chain/plain02/pauldron_leahter_light_right',0),(9478,9478,'accessories/wearable_items/heavy_chain/plain02/shoulders',0),(9479,9479,'accessories/wearable_items/heavy_chain/plain02/shoulders_no_pauldrons',0),(9480,9480,'accessories/wearable_items/heavy_chain/plain02/skirt',0),(9481,9481,'accessories/wearable_items/cloak/exp05/cloak_water_01',0),(9482,9482,'_exp04/tool_users/golem_jade_ice',0),(9483,9483,'_exp05/tool_users/mummy_variant_toturer_full_armor_ice',0),(9484,9484,'_exp05/monsters/dragon_vampire',0),(9485,9485,'projectiles/spear_ornate',0),(9486,9486,'accessories/wearable_items/_exp08/dragon_armor/leather2_shadow/head',1096),(9487,9487,'staticobjects/pirate/plate_of_dead_rats',0),(9488,9488,'staticobjects/flora/fungusmen_flowerpot',0),(9489,9489,'_exp05/zones/objects/exp05_rgn_innothule/dpo_seb_mushroom_cave_wall01',0),(9490,9490,'_exp05/zones/objects/exp05_dun_guk_upper/guk_upper_table01_sacrifice01_dpo',0),(9491,9491,'_exp05/zones/objects/exp05_dun_guk_lower/keyhole/dun_guk_lower_keyhole01_dpo',0),(9492,9492,'_exp05/zones/objects/exp05_dun_guk_lower/switch/guk_lower_switch01_base_dpo',0),(9493,9493,'_exp05/zones/objects/exp05_dun_guk_lower/switch/guk_lower_switch01_shaft_dpo',0),(9494,9494,'_exp05/zones/objects/exp05_rgn_innothule/boat_platform_innothule',0),(9495,9495,'accessories/wearable_items/cloak/exp05/cloak_sq_01_kor\'sha_atrebe',0),(9496,9496,'accessories/wearable_items/cloak/exp05/cloak_sq_01_kor\'sha_fighter',0),(9497,9497,'accessories/wearable_items/cloak/exp05/cloak_sq_01_kor\'sha_mage',0),(9498,9498,'accessories/wearable_items/cloak/exp05/cloak_sq_01_kor\'sha_priest',0),(9499,9499,'accessories/wearable_items/cloak/exp05/cloak_sq_01_kor\'sha_scout',0),(9500,9500,'_exp05/zones/objects/exp05_dun_nuroga/drogan_crystal',0),(9501,9501,'accessories/wearable_items/sallet_helmet/galvanized/head',0),(9502,9502,'accessories/wearable_items/vanguard/uncommon/high/pauldron02_vanguard_ridged_left',0),(9503,9503,'accessories/wearable_items/vanguard/uncommon/high/pauldron02_vanguard_ridged_right',0),(9504,9504,'accessories/wearable_items/vanguard/uncommon/high/pauldron05_vanguard_heavy_left',0),(9505,9505,'accessories/wearable_items/vanguard/uncommon/high/pauldron05_vanguard_heavy_right',0),(9506,9506,'accessories/wearable_items/vanguard/uncommon/high/pauldron07_vanguard_gothic_left',0),(9507,9507,'accessories/wearable_items/vanguard/uncommon/high/pauldron07_vanguard_gothic_right',0),(9508,9508,'accessories/wearable_items/vanguard/uncommon/high/shoulders_pauldron02_both',0),(9509,9509,'accessories/wearable_items/vanguard/uncommon/high/shoulders_pauldron05_both',0),(9510,9510,'accessories/wearable_items/vanguard/uncommon/high/shoulders_pauldron07_both',0),(9511,9511,'accessories/wearable_items/_exp05/token_reward_01_robe/chest',0),(9512,9512,'accessories/wearable_items/_exp05/token_reward_01_robe/hood',0),(9513,9513,'accessories/wearable_items/_exp05/token_reward_01_robe/pants',0),(9514,9514,'accessories/wearable_items/_exp05/token_reward_01_robe/skirt',0),(9515,9515,'accessories/wearable_items/_exp05/token_reward_02_robe/chest',0),(9516,9516,'accessories/wearable_items/_exp05/token_reward_02_robe/hood',0),(9517,9517,'accessories/wearable_items/_exp05/token_reward_02_robe/pants',0),(9518,9518,'accessories/wearable_items/_exp05/token_reward_02_robe/skirt',0),(9519,9519,'accessories/wearable_items/_exp05/token_reward_03_robe/chest',0),(9520,9520,'accessories/wearable_items/_exp05/token_reward_03_robe/hood',0),(9521,9521,'accessories/wearable_items/_exp05/token_reward_03_robe/pants',0),(9522,9522,'accessories/wearable_items/_exp05/token_reward_03_robe/skirt',0),(9523,9523,'accessories/wearable_items/_exp05/token_reward_04_robe/chest',0),(9524,9524,'accessories/wearable_items/_exp05/token_reward_04_robe/hood',0),(9525,9525,'accessories/wearable_items/_exp05/token_reward_04_robe/pants',0),(9526,9526,'accessories/wearable_items/_exp05/token_reward_04_robe/skirt',0),(9527,9527,'staticobjects/creatures/slug_dpo',0),(9528,9528,'_exp05/monsters/void_beast_case',0),(9529,9529,'accessories/wearable_items01/_exp00/profesion_hats/priest_helm/heavy_plate_plain/head',0),(9530,9530,'accessories/wearable_items/profesion_hats/priest_helm/heavy_plate_plain/head',0),(9531,9531,'creatures/mounts/horse_pack/horse_pack',0),(9532,9532,'_exp05/monsters/golem_shambling_mound_swamp',0),(9533,9533,'accessories/wearable_items/cloak/exp05/cloak_sq_01_unseen_hand',0),(9534,9534,'_exp05/zones/objects/exp05_rgn_innothule/boat_platform_innothule_02',0),(9535,9535,'accessories/wearable_items/cloak/exp05/cloak_sq_01_far_seas_trader',0),(9536,9536,'accessories/wearable_items01/_exp00/sallet_helmet/galvanized/head',0),(9537,9537,'accessories/wearable_items01/_exp00/vanguard/uncommon/high/shoulders_pauldron02_both',0),(9538,9538,'accessories/wearable_items01/_exp00/vanguard/uncommon/high/shoulders_pauldron05_both',0),(9539,9539,'accessories/wearable_items01/_exp00/vanguard/uncommon/high/shoulders_pauldron07_both',0),(9540,9540,'accessories/wearable_items/_exp05/guk_leather/shoulders_turtle_pauldron_both',0),(9541,9541,'accessories/wearable_items/_exp05/guk_magus/chest_turtle_pauldrons_both',0),(9542,9542,'accessories/wearable_items/_exp05/guk_robe/chest_turtle_pauldrons_both',0),(9543,9543,'accessories/wearable_items/_exp05/guk_vanguard/shoulders_turtle_pauldrons_both',0),(9544,9544,'accessories/wieldable_items/weapons/exp05/shld_congealed_gore_buckler',0),(9545,9545,'accessories/wieldable_items/weapons/exp05/exp05_talisman_undead_idol',0),(9546,9546,'staticobjects/light_sources_player_housing_only/dpo_bef_asylum_wall_lamp_small',0),(9547,9547,'staticobjects/tapestry/dpo_bef_banner_asylum02',0),(9548,9548,'staticobjects/tapestry/dpo_bef_banner_forsaken01',0),(9549,9549,'staticobjects/tapestry/dpo_bef_banner_forsaken02',0),(9550,9550,'staticobjects/light_sources_player_housing_only/dpo_bef_lightsource_candelabra_hanging01',0),(9551,9551,'staticobjects/light_sources_player_housing_only/dpo_bef_lightsource_floor01',0),(9552,9552,'staticobjects/light_sources_player_housing_only/dpo_bef_lightsource_wall_asylum',0),(9553,9553,'staticobjects/light_sources_player_housing_only/dpo_bef_lightsource_wallsconce01',0),(9554,9554,'staticobjects/light_sources_player_housing_only/dpo_inna_high_lightsource_wall01_grobb',0),(9555,9555,'staticobjects/statues/dpo_bef_lion_statue01',0),(9556,9556,'staticobjects/rugs/dpo_bef_rug_blue01',0),(9557,9557,'staticobjects/tableware/dpo_sfm_gnome_cup01',0),(9558,9558,'staticobjects/rugs/dpo_bef_rug_yellow01',0),(9559,9559,'staticobjects/banners/dpo_dn_banners001_wallbrace07',0),(9560,9560,'staticobjects/statues/dpo_dun_guk_stronghold_statues_statue01',0),(9561,9561,'staticobjects/banners/dpo_guk_lower_banner01_wall01',0),(9562,9562,'staticobjects/banners/dpo_guk_lower_banner01_wall02',0),(9563,9563,'staticobjects/flora/dpo_guk_lower_foliage_bush01',0),(9564,9564,'staticobjects/flora/dpo_guk_stronghold_foliage_bush01',0),(9565,9565,'staticobjects/flora/dpo_guk_upper_foliage_bush02',0),(9566,9566,'staticobjects/dressers/dpo_inna_bank_vault01',0),(9567,9567,'staticobjects/benches/dpo_inna_high_bench01_grobb',0),(9568,9568,'staticobjects/chairs/dpo_inna_high_chair01_grobb',0),(9569,9569,'staticobjects/chairs/dpo_inna_high_chair_troll01',0),(9570,9570,'staticobjects/chairs/dpo_inna_high_chair_troll02',0),(9571,9571,'staticobjects/containers/dpo_inna_high_container_tall01_stone',0),(9572,9572,'staticobjects/tables/dpo_inna_high_table02_grobb',0),(9573,9573,'staticobjects/tables/dpo_inna_high_table_troll01',0),(9574,9574,'staticobjects/light_sources_player_housing_only/dpo_inna_lightsource_pirate_lantern',0),(9575,9575,'staticobjects/pirate/dpo_inna_pirate_net_floaters01_swinging',0),(9576,9576,'staticobjects/light_sources_player_housing_only/dpo_inna_lightsource_tupta_hangingvine01',0),(9577,9577,'staticobjects/light_sources_player_housing_only/dpo_inna_lightsource_tupta_lamppost01',0),(9578,9578,'staticobjects/light_sources_player_housing_only/dpo_inna_lightsource_tupta_wall01',0),(9579,9579,'staticobjects/light_sources_player_housing_only/dpo_miragul_obj_coldflamebrazier',0),(9580,9580,'staticobjects/tableware/dpo_inna_low_bowl01_fungusmen',0),(9581,9581,'staticobjects/tableware/dpo_inna_low_shells01',0),(9582,9582,'staticobjects/tableware/dpo_inna_pirate_cup_gold01',0),(9583,9583,'staticobjects/urns/dpo_inna_vase_clay04',0),(9584,9584,'staticobjects/tableware/dpo_inna_pirate_jug_gold01',0),(9585,9585,'staticobjects/tableware/dpo_inna_pirate_stein_blue02',0),(9586,9586,'staticobjects/tableware/dpo_inna_pirate_stein_gold01',0),(9587,9587,'staticobjects/fountains_and_pools/dpo_inna_tupta_tadpole_bowl01',0),(9588,9588,'staticobjects/banners/dpo_inna_tupta_wall_banner01',0),(9589,9589,'staticobjects/urns/dpo_inna_vase_clay02',0),(9590,9590,'staticobjects/urns/dpo_inna_vase_clay_tall01',0),(9591,9591,'staticobjects/pictures/dpo_man_portrait2_big_purple',0),(9592,9592,'staticobjects/pictures/dpo_man_portrait3_big_purple',0),(9593,9593,'staticobjects/pictures/dpo_man_portrait4_big_purple',0),(9594,9594,'staticobjects/pictures/dpo_man_portrait5_big_purple',0),(9595,9595,'staticobjects/chairs/dpo_miragul_chair01',0),(9596,9596,'staticobjects/light_sources_player_housing_only/dpo_miragul_obj_chandellier',0),(9597,9597,'staticobjects/light_sources_player_housing_only/dpo_miragul_obj_chandellier_large',0),(9598,9598,'staticobjects/statues/dpo_miragul_obj_statue01',0),(9599,9599,'staticobjects/statues/dpo_miragul_obj_statue02',0),(9600,9600,'staticobjects/tapestry/dpo_na_banner01',0),(9601,9601,'staticobjects/banners/dpo_na_banner02',0),(9602,9602,'staticobjects/tapestry/dpo_ols_hangingcloth_airship01',0),(9603,9603,'staticobjects/tapestry/dpo_ols_hangingcloth_bow01',0),(9604,9604,'staticobjects/tapestry/dpo_seb_banner_iksar01',0),(9605,9605,'staticobjects/artifact/dpo_vek_headpiece01',0),(9606,9606,'staticobjects/artifact/dpo_vek_headpiece02',0),(9607,9607,'staticobjects/light_sources_player_housing_only/dpo_vek_lightsource_jar_fireflies01_fx',0),(9608,9608,'staticobjects/light_sources_player_housing_only/dpo_vek_lightsource_jar_standalone',0),(9609,9609,'accessories/wieldable_items/weapons/exp05/exp05_befallen_book',0),(9610,9610,'accessories/wieldable_items/weapons/exp05/exp05_bow_befallen_bow',0),(9611,9611,'accessories/wieldable_items/weapons/exp05/shld_shield_10_ice',0),(9612,9612,'staticobjects/tapestry/dpo_tapestry_design_white_dragonscale_hq',0),(9613,9613,'accessories/wieldable_items/weapons/exp05/exp05_1hs_befallen_sabre',0),(9614,9614,'creatures/pets/dice/eight_sided_dice_black_marble',0),(9615,9615,'creatures/pets/dice/four_sided_dice_black_marble',0),(9616,9616,'creatures/pets/dice/four_sided_dice_cyanblack_marble',0),(9617,9617,'creatures/pets/dice/four_sided_dice_golden_marble',0),(9618,9618,'creatures/pets/dice/four_sided_dice_green_marble',0),(9619,9619,'creatures/pets/dice/four_sided_dice_grey_marble',0),(9620,9620,'creatures/pets/dice/four_sided_dice_orange_marble',0),(9621,9621,'creatures/pets/dice/four_sided_dice_plastic_tint',0),(9622,9622,'creatures/pets/dice/four_sided_dice_white_marble',0),(9623,9623,'creatures/pets/dice/twelve_sided_dice_black_marble',0),(9624,9624,'creatures/pets/dice/twelve_sided_dice_cyanblack_marble',0),(9625,9625,'creatures/pets/dice/twelve_sided_dice_golden_marble',0),(9626,9626,'creatures/pets/dice/twelve_sided_dice_green_marble',0),(9627,9627,'creatures/pets/dice/twelve_sided_dice_grey_marble',0),(9628,9628,'creatures/pets/dice/twelve_sided_dice_orange_marble',0),(9629,9629,'creatures/pets/dice/twelve_sided_dice_plastic_tint',0),(9630,9630,'creatures/pets/dice/twelve_sided_dice_red_marble',0),(9631,9631,'creatures/pets/dice/twelve_sided_dice_white_marble',0),(9632,9632,'creatures/pets/dice/twenty_sided_dice_black_marble',0),(9633,9633,'creatures/pets/dice/twenty_sided_dice_cyanblack_marble',0),(9634,9634,'creatures/pets/dice/twenty_sided_dice_golden_marble',0),(9635,9635,'creatures/pets/dice/twenty_sided_dice_green_marble',0),(9636,9636,'creatures/pets/dice/twenty_sided_dice_grey_marble',0),(9637,9637,'creatures/pets/dice/twenty_sided_dice_orange_marble',0),(9638,9638,'creatures/pets/dice/twenty_sided_dice_plastic_tint',0),(9639,9639,'creatures/pets/dice/twenty_sided_dice_red_marble',0),(9640,9640,'creatures/pets/dice/twenty_sided_dice_white_marble',0),(9641,9641,'creatures/monsters/wall_slug',0),(9642,9642,'accessories/wieldable_items/weapons/exp05/exp05_1hs_befallen_rapier',0),(9643,9643,'accessories/wieldable_items/weapons/exp05/exp05_orb_of_earth',0),(9644,9644,'accessories/wieldable_items/weapons/exp05/exp05_orb_of_fire',0),(9645,9645,'accessories/wieldable_items/weapons/exp05/exp05_orb_of_fire_sun',0),(9646,9646,'accessories/wieldable_items/weapons/exp05/exp05_orb_of_ice',0),(9647,9647,'accessories/wieldable_items/shields/buckler_shield/metal_buckler/metal_buckler001_ice',0),(9648,9648,'accessories/wieldable_items/shields/tower_shield/metal_tower_shield/planar_tower_shield',0),(9649,9649,'accessories/wieldable_items/weapons/bow/long_bow/dreadnaughts_longbow',0),(9650,9650,'_exp05/zones/objects/exp05_rgn_innothule/rubbish_pile',0),(9651,9651,'staticobjects/gnomish_devices/zeppelin_mobile',0),(9652,9652,'accessories/wieldable_items/weapons/exp05/exp05_befallen_censor',0),(9653,9653,'accessories/wieldable_items/weapons/exp05/exp05_lance_of_dreams',0),(9654,9654,'staticobjects/gnomish_devices/zeppelin_mobile_03',0),(9655,9655,'creatures/pets/dice/four_sided_dice_red_marble',0),(9656,9656,'_exp01/characters/tool_users/djinn_master_fire',0),(9657,9657,'_exp01/characters/tool_users/genie_male_efreeti',0),(9658,9658,'_exp01/characters/tool_users/genie_male_evil',0),(9659,9659,'_exp01/characters/tool_users/genie_male_evil_hair',0),(9660,9660,'_exp01/characters/tool_users/genie_male_lesser',0),(9661,9661,'_exp01/characters/tool_users/genie_male_lesser_hair',0),(9662,9662,'accessories/wearable_items/_exp05/far_seas_trader_leather/chest',0),(9663,9663,'accessories/wearable_items/_exp05/far_seas_trader_leather/feet',0),(9664,9664,'accessories/wearable_items/_exp05/far_seas_trader_leather/hands',0),(9665,9665,'accessories/wearable_items/_exp05/far_seas_trader_leather/forearms',0),(9666,9666,'accessories/wearable_items/_exp05/far_seas_trader_leather/head',0),(9667,9667,'accessories/wearable_items/_exp05/far_seas_trader_leather/legs',0),(9668,9668,'accessories/wearable_items/_exp05/far_seas_trader_leather/legs_noskirt',0),(9669,9669,'accessories/wearable_items/_exp05/far_seas_trader_leather/shoulders',0),(9670,9670,'accessories/wearable_items/_exp05/far_seas_trader_leather/skirt',0),(9671,9671,'staticobjects/urns/dpo_inna_vase_clay_tall02',0),(9672,9672,'staticobjects/statues/unicorn_statue',0),(9673,9673,'accessories/wearable_items/cloak/exp05/cloak_sq_01_bechoi',0),(9674,9674,'accessories/wearable_items/cloak/exp05/cloak_sq_01_lubesh',0),(9675,9675,'accessories/wearable_items/cloak/exp05/cloak_sq_01_rajadevi',0),(9676,9676,'accessories/wearable_items/cloak/exp05/cloak_sq_01_yciid',0),(9677,9677,'accessories/wearable_items/cloak/exp05/cloak_sq_01_vashota',0),(9678,9678,'staticobjects/liveevent/frostfell/goblinpop01',0),(9679,9679,'staticobjects/liveevent/frostfell/goblinpop02',0),(9680,9680,'staticobjects/liveevent/frostfell/goblinpop03',0),(9681,9681,'accessories/wearable_items/profesion_hats/priest_helm/heavy_plate_white/head',0),(9682,9682,'accessories/wearable_items01/_exp00/profesion_hats/priest_helm/heavy_plate_white/head',0),(9683,9683,'staticobjects/tapestry/dpo_tapestry_design_unseen',0),(9684,9684,'staticobjects/weapons/dpo_battle_spoon',0),(9685,9685,'staticobjects/weapons/dpo_rolling_pin',0),(9686,9686,'staticobjects/light_sources_player_housing_only/dpo_gf_lightsource_lampppost01',0),(9687,9687,'staticobjects/carts/damaged_wood_cart_no_collide',0),(9688,9688,'staticobjects/liveevent/frostfell/dpo_greeting_card_frostfell01',0),(9689,9689,'staticobjects/liveevent/frostfell/dpo_greeting_card_frostfell02',0),(9690,9690,'staticobjects/liveevent/frostfell/dpo_greeting_card_frostfell03',0),(9691,9691,'staticobjects/liveevent/frostfell/dpo_greeting_card_frostfell04',0),(9692,9692,'_exp05/zones/objects/exp05_dun_void_palace/fx_void_teleporter',0),(9693,9693,'_exp05/zones/objects/exp05_dun_void_palace/void_case',0),(9694,9694,'staticobjects/signs/neriak/dpo_sign_small_business01',0),(9695,9695,'accessories/wearable_items/_exp05/tradeskill_magus_low/chest',0),(9696,9696,'accessories/wearable_items/_exp05/tradeskill_magus_low/arms',0),(9697,9697,'accessories/wearable_items/_exp05/tradeskill_magus_low/skirt',0),(9698,9698,'_exp05/zones/objects/exp05_dun_veksar/vek_container_egg_bobbing',0),(9699,9699,'staticobjects/tapestry/dpo_tapestry_design_water',0),(9700,9700,'_exp05/zones/objects/exp05_dun_void_palace/fx_glowing_blue_sphere',0),(9701,9701,'accessories/wearable_items/cloak/exp05/cloak_sq_01_guide',0),(9702,9702,'_exp01/zones/dungeons/silent_city/sc_temple/sc_ewer_exp5_quest',0),(9703,9703,'_exp05/zones/objects/exp05_dun_miragul_shard/miragul_amygdalan_scaled',0),(9704,9704,'_exp05/zones/objects/exp05_dun_miragul_shard/miragul_tree_scaled',0),(9705,9705,'_exp05/zones/objects/exp05_dun_befallen_forsaken/spider_web01',0),(9706,9706,'_exp05/zones/objects/exp05_dun_befallen_forsaken/spider_web02',0),(9707,9707,'_exp05/zones/objects/exp05_dun_befallen_forsaken/spider_web03',0),(9708,9708,'_exp05/zones/objects/exp05_dun_befallen_forsaken/spider_web04',0),(9709,9709,'_exp05/zones/objects/exp05_dun_befallen_forsaken/spider_web05',0),(9710,9710,'_exp05/zones/objects/exp05_dun_befallen_forsaken/spider_web06',0),(9711,9711,'_exp05/zones/objects/exp05_dun_befallen_forsaken/spider_web07',0),(9712,9712,'staticobjects/lighting/floor_lamp_ice',0),(9713,9713,'creatures/tu/froglok_skeleton_ghost',0),(9714,9714,'_exp05/zones/objects/exp05_dun_guk_upper/dn_guk_upper_shinlordtower01_poison01',0),(9715,9715,'_exp05/monsters/dire_bear01_wsaddle_armor03',0),(9716,9716,'_exp05/monsters/dire_bear01_wsaddle_armor04',0),(9717,9717,'_exp05/monsters/dire_bear01_wsaddle_armor05',0),(9718,9718,'_exp05/zones/objects/tradeskill_dungeons/void/dpo_airship_stage1',0),(9719,9719,'_exp05/zones/objects/tradeskill_dungeons/void/dpo_airship_stage2',0),(9720,9720,'_exp05/zones/objects/tradeskill_dungeons/void/dpo_airship_stage3',0),(9721,9721,'_exp05/zones/objects/tradeskill_dungeons/void/dpo_airship_stage4',0),(9722,9722,'_exp05/zones/objects/tradeskill_dungeons/void/tinkered_workstation_dpo',0),(9723,9723,'staticobjects/beds/dpo_cm_bed_twin01',0),(9724,9724,'staticobjects/beds/dpo_cm_bed_twin02',0),(9725,9725,'staticobjects/beds/dpo_kel_bed_inn01',0),(9726,9726,'staticobjects/cages/dpo_drv_cage_gilded01_swinging',0),(9727,9727,'staticobjects/scrolls/dpo_goro_scrolls_stack01',0),(9728,9728,'staticobjects/scrolls/dpo_goro_scrolls_stack02',0),(9729,9729,'staticobjects/tables/dpo_djn_table_brass02',0),(9730,9730,'accessories/wearable_items/halloween_masks/skull_circlet/skull_circlet_head',0),(9731,9731,'accessories/wearable_items/christmas_hats/ice_crown/ice_crown_head',0),(9732,9732,'creatures/mounts/dire_bear/dire_bear01',0),(9733,9733,'creatures/mounts/dire_bear/dire_bear01_wsaddle',0),(9734,9734,'creatures/mounts/dire_bear/dire_bear01_wsaddle_armor01',0),(9735,9735,'creatures/mounts/dire_bear/dire_bear01_wsaddle_armor02',0),(9736,9736,'creatures/mounts/dire_bear/dire_bear01_wsaddle_armor03',0),(9737,9737,'creatures/mounts/dire_bear/dire_bear01_wsaddle_armor04',0),(9738,9738,'creatures/mounts/dire_bear/dire_bear01_wsaddle_armor05',0),(9739,9739,'creatures/mounts/dire_bear/dire_bear02_wsaddle',0),(9740,9740,'creatures/mounts/dire_bear/dire_bear02_wsaddle_armor01',0),(9741,9741,'creatures/mounts/dire_bear/dire_bear02_wsaddle_armor02',0),(9742,9742,'creatures/mounts/dire_bear/dire_bear03_wsaddle',0),(9743,9743,'creatures/mounts/dire_bear/dire_bear03_wsaddle_armor01',0),(9744,9744,'creatures/mounts/dire_bear/dire_bear03_wsaddle_armor02',0),(9745,9745,'creatures/mounts/dire_bear/dire_bear04_wsaddle',0),(9746,9746,'creatures/mounts/dire_bear/dire_bear04_wsaddle_armor01',0),(9747,9747,'creatures/mounts/dire_bear/dire_bear04_wsaddle_armor02',0),(9748,9748,'accessories/wearable_items/_exp06/elf_armor_vanguard/chest',0),(9749,9749,'accessories/wearable_items/_exp06/elf_armor_vanguard/elf_armor_pauldron_left',0),(9750,9750,'accessories/wearable_items/_exp06/elf_armor_vanguard/elf_armor_pauldron_right',0),(9751,9751,'accessories/wearable_items/_exp06/elf_armor_vanguard/feet',0),(9752,9752,'accessories/wearable_items/_exp06/elf_armor_vanguard/forearms',0),(9753,9753,'accessories/wearable_items/_exp06/elf_armor_vanguard/hands',0),(9754,9754,'accessories/wearable_items/_exp06/elf_armor_vanguard/head',0),(9755,9755,'accessories/wearable_items/_exp06/elf_armor_vanguard/head_elf_armor',0),(9756,9756,'accessories/wearable_items/_exp06/elf_armor_vanguard/legs',0),(9757,9757,'accessories/wearable_items/_exp06/elf_armor_vanguard/legs_noskirt',0),(9758,9758,'accessories/wearable_items/_exp06/elf_armor_vanguard/right',0),(9759,9759,'accessories/wearable_items/_exp06/elf_armor_vanguard/shoulders',0),(9760,9760,'accessories/wearable_items/_exp06/elf_armor_vanguard/shoulders_elf_amor',0),(9761,9761,'accessories/wearable_items/_exp06/elf_armor_vanguard/shoulders_nopauldrons',0),(9762,9762,'accessories/wearable_items/_exp06/elf_armor_vanguard/skirt',0),(9763,9763,'staticobjects/liveevent/guides/dpo_guide_halfling_table',0),(9764,9764,'staticobjects/liveevent/guides/dpo_guide_hanging_light',0),(9765,9765,'staticobjects/liveevent/guides/dpo_guide_rolling_pin_metal',0),(9766,9766,'accessories/wearable_items/_exp06/elf_armor_chain/chest',0),(9767,9767,'accessories/wearable_items/_exp06/elf_armor_chain/elf_armor_pauldron_left',0),(9768,9768,'accessories/wearable_items/_exp06/elf_armor_chain/elf_armor_pauldron_right',0),(9769,9769,'accessories/wearable_items/_exp06/elf_armor_chain/feet',0),(9770,9770,'accessories/wearable_items/_exp06/elf_armor_chain/forearms',0),(9771,9771,'accessories/wearable_items/_exp06/elf_armor_chain/hands',0),(9772,9772,'accessories/wearable_items/_exp06/elf_armor_chain/head',0),(9773,9773,'accessories/wearable_items/_exp06/elf_armor_chain/head_elf_armor',0),(9774,9774,'accessories/wearable_items/_exp06/elf_armor_chain/legs',0),(9775,9775,'accessories/wearable_items/_exp06/elf_armor_chain/legs_noskirt',0),(9776,9776,'accessories/wearable_items/_exp06/elf_armor_chain/shoulders',0),(9777,9777,'accessories/wearable_items/_exp06/elf_armor_chain/shoulders_nopauldrons',0),(9778,9778,'accessories/wearable_items/_exp06/elf_armor_chain/skirt',0),(9779,9779,'_exp04/monsters/xygoz_fire',0),(9780,9780,'_exp04/monsters/xygoz_shade',0),(9781,9781,'_exp05/monsters/ice_dervish',0),(9782,9782,'creatures/tu/elementalfire_greater',0),(9783,9783,'creatures/tu/void_stalker',0),(9784,9784,'creatures/mounts/dire_bear/dire_bear01_wsaddle_armor01_firespirit',0),(9785,9785,'creatures/mounts/dire_bear/dire_bear01_wsaddle_armor01_void',0),(9786,9786,'creatures/mounts/dire_bear/dire_bear01_wsaddle_armor01_icepirit',0),(9787,9787,'accessories/wearable_items/_exp08/dragon_armor/leather2_shadow/legs',1096),(9788,9788,'accessories/wearable_items/elemental_crowns/elemental_crown_fire',0),(9789,9789,'accessories/wearable_items/elemental_crowns/elemental_crown_ice',0),(9790,9790,'accessories/wearable_items/elemental_crowns/sparkle_crown',0),(9791,9791,'accessories/wearable_items/elemental_crowns/star_crown',0),(9792,9792,'creatures/tu/gelatinouscube_comfort_spring',0),(9793,9793,'creatures/tu/gelatinouscube_spring',0),(9794,9794,'accessories/wearable_items/_exp06/elf_armor_leather/chest',0),(9795,9795,'accessories/wearable_items/_exp06/elf_armor_leather/elf_armor_pauldron_right',0),(9796,9796,'accessories/wearable_items/_exp06/elf_armor_leather/feet',0),(9797,9797,'accessories/wearable_items/_exp06/elf_armor_leather/forearms',0),(9798,9798,'accessories/wearable_items/_exp06/elf_armor_leather/hands',0),(9799,9799,'accessories/wearable_items/_exp06/elf_armor_leather/head',0),(9800,9800,'accessories/wearable_items/_exp06/elf_armor_leather/head_elf_armor',0),(9801,9801,'accessories/wearable_items/_exp06/elf_armor_leather/legs',0),(9802,9802,'accessories/wearable_items/_exp06/elf_armor_leather/legs_noskirt',0),(9803,9803,'accessories/wearable_items/_exp06/elf_armor_leather/shoulders',0),(9804,9804,'accessories/wearable_items/_exp06/elf_armor_leather/shoulders_nopauldrons',0),(9805,9805,'accessories/wearable_items/_exp06/elf_armor_leather/skirt',0),(9806,9806,'creatures/tu/nightbloodwarrior_golden',0),(9807,9807,'accessories/wearable_items/robe_02/chest',0),(9808,9808,'accessories/wearable_items/robe_02/head',0),(9809,9809,'accessories/wearable_items/robe_02/hood',0),(9810,9810,'accessories/wearable_items/_exp08/dragon_armor/leather2_shadow/legs_noskirt',1096),(9811,9811,'accessories/wearable_items/robe_02/skirt',0),(9812,9812,'accessories/wearable_items/cloak/exp06/cloak_kaltuk',0),(9813,9813,'accessories/wearable_items/_exp06/dwarf_armor_chain/breastplate_disc',0),(9814,9814,'accessories/wearable_items/_exp06/dwarf_armor_chain/chest',0),(9815,9815,'accessories/wearable_items/_exp06/dwarf_armor_chain/chest_disc_chain_dwarf',0),(9816,9816,'accessories/wearable_items/_exp06/dwarf_armor_chain/crest_boar_01',0),(9817,9817,'accessories/wearable_items/_exp06/dwarf_armor_chain/feet',0),(9818,9818,'accessories/wearable_items/_exp06/dwarf_armor_chain/forearms',0),(9819,9819,'accessories/wearable_items/_exp06/dwarf_armor_chain/hands',0),(9820,9820,'accessories/wearable_items/_exp06/dwarf_armor_chain/head',0),(9821,9821,'accessories/wearable_items/_exp08/dragon_armor/leather2_shadow/shoulders',1096),(9822,9822,'accessories/wearable_items/_exp08/dragon_armor/leather2_shadow/shoulders_epic',1096),(9823,9823,'accessories/wearable_items/_exp08/dragon_armor/leather2_slate/skirt',1096),(9824,9824,'accessories/wearable_items/_exp06/dwarf_armor_chain/horn_01_left',0),(9825,9825,'accessories/wearable_items/_exp06/dwarf_armor_chain/horn_01_right',0),(9826,9826,'accessories/wearable_items/_exp06/dwarf_armor_chain/legs',0),(9827,9827,'accessories/wearable_items/_exp06/dwarf_armor_chain/legs_noskirt',0),(9828,9828,'accessories/wearable_items/_exp06/dwarf_armor_chain/pauldron_leather_flat_boar_left',0),(9829,9829,'accessories/wearable_items/_exp06/dwarf_armor_chain/pauldron_leather_flat_boar_right',0),(9830,9830,'accessories/wearable_items/_exp06/dwarf_armor_chain/pauldron_leather_flat_left',0),(9831,9831,'accessories/wearable_items/_exp06/dwarf_armor_chain/pauldron_leather_flat_right',0),(9832,9832,'accessories/wearable_items/_exp06/dwarf_armor_chain/pauldron_leather_light_left',0),(9833,9833,'accessories/wearable_items/_exp06/dwarf_armor_chain/pauldron_leather_light_right',0),(9834,9834,'accessories/wearable_items/_exp06/dwarf_armor_chain/shoulders',0),(9835,9835,'accessories/wearable_items/_exp06/dwarf_armor_chain/shoulders_leather_flat_boar_pauldrons_both',0),(9836,9836,'accessories/wearable_items/_exp06/dwarf_armor_chain/shoulders_leather_flat_pauldrons_both',0),(9837,9837,'accessories/wearable_items/_exp06/dwarf_armor_chain/shoulders_no_pauldrons',0),(9838,9838,'accessories/wearable_items/_exp06/dwarf_armor_chain/skirt',0),(9839,9839,'accessories/wearable_items/cloak/exp06/cloak_nurgg',0),(9840,9840,'accessories/wearable_items/cloak/exp06/cloak_journeyman',0),(9841,9841,'accessories/wearable_items/cloak/exp06/cloak_journeyman_blue',0),(9842,9842,'accessories/wearable_items/cloak/exp06/cloak_journeyman_green',0),(9843,9843,'accessories/wearable_items/cloak/exp06/cloak_journeyman_red',0),(9844,9844,'creatures/tu/water_elemental_soldier',0),(9845,9845,'creatures/tu/fire_elemental_soldier',0),(9846,9846,'creatures/tu/poison_elemental_soldier_',0),(9847,9847,'creatures/tu/snow_flake_soldier',0),(9848,9848,'creatures/tu/storm_elemental_soldier',0),(9849,9849,'accessories/wearable_items/_exp06/mayan_robe/chest',0),(9850,9850,'accessories/wearable_items/_exp06/mayan_robe/head',0),(9851,9851,'accessories/wearable_items/_exp06/mayan_robe/pants',0),(9852,9852,'accessories/wearable_items/_exp06/mayan_robe/skirt',0),(9853,9853,'staticobjects/bank/dpo_inna_chest_treasure_open01',0),(9854,9854,'staticobjects/bank/dpo_inna_coin_pile_large01',0),(9855,9855,'staticobjects/bank/dpo_inna_crate_closed01_single',0),(9856,9856,'staticobjects/bank/dpo_inna_crate_treasure_open01',0),(9857,9857,'staticobjects/bank/dpo_inna_gold_coin_pile01',0),(9858,9858,'staticobjects/bank/dpo_inna_gold_coin_pile02',0),(9859,9859,'accessories/wearable_items/_exp06/dwarf_armor_chain/crest_horns_01',0),(9860,9860,'accessories/wearable_items/_exp06/dwarf_armor_chain/head_boarcrest',0),(9861,9861,'accessories/wearable_items/_exp06/dwarf_armor_chain/head_boarcrest_horns_01',0),(9862,9862,'accessories/wearable_items/_exp06/dwarf_armor_chain/head_boarcrest_horns_02',0),(9863,9863,'accessories/wearable_items/_exp06/dwarf_armor_chain/head_boarcrest_horns_03',0),(9864,9864,'accessories/wearable_items/_exp06/dwarf_armor_chain/head_boarcrest_horns_04',0),(9865,9865,'accessories/wearable_items/_exp06/dwarf_armor_chain/head_hornedcrest_horns_03',0),(9866,9866,'accessories/wearable_items/_exp06/dwarf_armor_chain/horn_02_left',0),(9867,9867,'accessories/wearable_items/_exp06/dwarf_armor_chain/horn_02_right',0),(9868,9868,'accessories/wearable_items/_exp06/dwarf_armor_chain/horn_03_left',0),(9869,9869,'accessories/wearable_items/_exp06/dwarf_armor_chain/horn_03_right',0),(9870,9870,'accessories/wearable_items/_exp06/dwarf_armor_chain/horn_04_left',0),(9871,9871,'accessories/wearable_items/_exp06/dwarf_armor_chain/horn_04_right',0),(9872,9872,'accessories/wearable_items/_exp06/elf_armor_robe/chest',0),(9873,9873,'accessories/wearable_items/_exp06/elf_armor_robe/elf_armor_pauldron_left',0),(9874,9874,'accessories/wearable_items/_exp06/elf_armor_robe/elf_armor_pauldron_right',0),(9875,9875,'accessories/wearable_items/_exp06/elf_armor_robe/head',0),(9876,9876,'accessories/wearable_items/_exp06/elf_armor_robe/hood',0),(9877,9877,'accessories/wearable_items/_exp06/elf_armor_robe/pants',0),(9878,9878,'accessories/wearable_items/_exp06/elf_armor_robe/skirt',0),(9879,9879,'_exp05/zones/objects/exp05_dun_najena_atheneum/gold_bar',0),(9880,9880,'accessories/wearable_items/_exp06/plain_01_robe/chest',0),(9881,9881,'accessories/wearable_items/_exp06/plain_01_robe/head',0),(9882,9882,'accessories/wearable_items/_exp06/plain_01_robe/pants',0),(9883,9883,'accessories/wearable_items/_exp06/plain_01_robe/skirt',0),(9884,9884,'accessories/wearable_items01/_exp00/heavy_plate/plain_white_sun_symbol/shoulders',0),(9885,9885,'_exp05/zones/objects/exp05_dun_najena_atheneum/lava_boulder_01',0),(9886,9886,'_exp05/zones/objects/exp05_dun_najena_atheneum/lava_boulder_02',0),(9887,9887,'_exp05/zones/objects/exp05_dun_najena_atheneum/lava_boulder_03',0),(9888,9888,'_exp05/zones/objects/exp05_dun_najena_atheneum/lava_boulder_04',0),(9889,9889,'staticobjects/doors/qey_obj_door_type05_1',0),(9890,9890,'staticobjects/doors/qey_obj_door_type05_2',0),(9891,9891,'accessories/wearable_items/cloak/exp06/cloak_erollisi_sister',0),(9892,9892,'accessories/wearable_items/cloak/exp06/erollisi_head',0),(9893,9893,'accessories/wearable_items/profesion_hats/wizard_hat_merlin/wizard_hat_merlin',0),(9894,9894,'accessories/wearable_items/cloak/exp06/fae_d_wing01_void',0),(9895,9895,'accessories/wearable_items/heavy_plate/lava/chest',0),(9896,9896,'accessories/wearable_items/heavy_plate/lava/feet',0),(9897,9897,'accessories/wearable_items/heavy_plate/lava/forearms',0),(9898,9898,'accessories/wearable_items/heavy_plate/lava/hands',0),(9899,9899,'accessories/wearable_items/heavy_plate/lava/head',0),(9900,9900,'accessories/wearable_items/heavy_plate/lava/left',0),(9901,9901,'accessories/wearable_items/heavy_plate/lava/legs',0),(9902,9902,'accessories/wearable_items/heavy_plate/lava/legs_noskirt',0),(9903,9903,'accessories/wearable_items/heavy_plate/lava/pauldron03_vanguard_flared_left',0),(9904,9904,'accessories/wearable_items/heavy_plate/lava/pauldron03_vanguard_flared_right',0),(9905,9905,'accessories/wearable_items/heavy_plate/lava/pauldron_plain_left',0),(9906,9906,'accessories/wearable_items/heavy_plate/lava/pauldron_plain_right',0),(9907,9907,'accessories/wearable_items/heavy_plate/lava/right',0),(9908,9908,'accessories/wearable_items/heavy_plate/lava/shoulders',0),(9909,9909,'accessories/wearable_items/heavy_plate/lava/shoulders_flared_both',0),(9910,9910,'accessories/wearable_items/heavy_plate/lava/shoulders_nopauldrons',0),(9911,9911,'accessories/wearable_items/heavy_plate/lava/skirt',0),(9912,9912,'accessories/wearable_items/heavy_plate/lava/upperchest',0),(9913,9913,'ec/pc/darkelf/darkelf_female_voidtainted',0),(9914,9914,'ec/pc/ogre/fire_ogre_male_voidtainted',0),(9915,9915,'_exp04/tool_users/burynai_warrior_voidtainted',0),(9916,9916,'_exp01/characters/tool_users/water_djinn_master_voidtainted',0),(9917,9917,'accessories/wearable_items/profesion_hats/vampire_hunter/vampire_hunter',0),(9918,9918,'accessories/wearable_items/_exp06/elf_armor_robe/chest_with_pauldrons',0),(9919,9919,'accessories/wearable_items/profesion_hats/executioner_helm/head',0),(9920,9920,'accessories/wearable_items/_exp06/varsoon_robe/chest_with_skull_pauldrons',0),(9921,9921,'accessories/wearable_items/_exp06/varsoon_robe/chest',0),(9922,9922,'accessories/wearable_items/_exp06/varsoon_robe/head',0),(9923,9923,'accessories/wearable_items/_exp06/varsoon_robe/pants',0),(9924,9924,'accessories/wearable_items/_exp06/varsoon_robe/pauldron_varsoon_left',0),(9925,9925,'accessories/wearable_items/_exp06/varsoon_robe/pauldron_varsoon_right',0),(9926,9926,'accessories/wearable_items/_exp06/varsoon_robe/skirt',0),(9927,9927,'accessories/wearable_items/profesion_hats/priest_helm/priest_templar_helm/head',0),(9928,9928,'accessories/wearable_items/profesion_hats/warrior_helm/warrior_helm',0),(9929,9929,'staticobjects/liveevent/erollisi_objects/errolisi_grass_patch_butterflies_01',0),(9930,9930,'staticobjects/liveevent/erollisi_objects/errolisi_grass_patch_fireflies_01',0),(9931,9931,'accessories/wearable_items/_exp06/elf_armor_robe_red/chest',0),(9932,9932,'accessories/wearable_items/_exp06/elf_armor_robe_red/chest_with_pauldrons',0),(9933,9933,'accessories/wearable_items/_exp06/elf_armor_robe_red/elf_armor_pauldron_left',0),(9934,9934,'accessories/wearable_items/_exp06/elf_armor_robe_red/elf_armor_pauldron_right',0),(9935,9935,'accessories/wearable_items/_exp06/elf_armor_robe_red/head',0),(9936,9936,'accessories/wearable_items/_exp06/elf_armor_robe_red/hood',0),(9937,9937,'accessories/wearable_items/_exp06/elf_armor_robe_red/pants',0),(9938,9938,'accessories/wearable_items/_exp06/elf_armor_robe_red/skirt',0),(9939,9939,'accessories/wearable_items/_exp06/dwarf_armor_chain/head_horns_01',0),(9940,9940,'accessories/wearable_items/_exp06/dwarf_armor_chain/head_horns_02',0),(9941,9941,'accessories/wearable_items/_exp06/dwarf_armor_chain/head_horns_03',0),(9942,9942,'accessories/wearable_items/_exp06/dwarf_armor_chain/head_horns_04',0),(9943,9943,'accessories/wieldable_items/weapons/exp06/1h_sword/exp06_1h_axe_bone_spike',0),(9944,9944,'accessories/wieldable_items/weapons/exp06/1h_sword/exp06_1h_axe_double_fang',0),(9945,9945,'accessories/wieldable_items/weapons/exp06/1h_sword/exp06_1h_axe_dragon_eater',0),(9946,9946,'accessories/wieldable_items/weapons/exp06/1h_sword/exp06_1h_axe_emerald_ripper',0),(9947,9947,'accessories/wieldable_items/weapons/exp06/1h_sword/exp06_1h_axe_golden_eagle_talon',0),(9948,9948,'accessories/wieldable_items/weapons/exp06/1h_sword/exp06_1h_axe_golden_sun',0),(9949,9949,'accessories/wieldable_items/weapons/exp06/1h_sword/exp06_1h_axe_holey_defiler',0),(9950,9950,'accessories/wieldable_items/weapons/exp06/1h_sword/exp06_1h_axe_jagged_diamond',0),(9951,9951,'accessories/wieldable_items/weapons/exp06/1h_sword/exp06_1h_axe_mayan_smasher',0),(9952,9952,'accessories/wieldable_items/weapons/exp06/1h_sword/exp06_1h_axe_quad_impaler',0),(9953,9953,'accessories/wieldable_items/weapons/exp06/1h_sword/exp06_1h_sword_arasai_slicer',0),(9954,9954,'accessories/wieldable_items/weapons/exp06/1h_sword/exp06_1h_sword_crystal_blade_of_chaos',0),(9955,9955,'accessories/wieldable_items/weapons/exp06/1h_sword/exp06_1h_sword_necrobone',0),(9956,9956,'accessories/wieldable_items/weapons/exp06/1h_sword/exp06_1h_sword_serpent_tongue',0),(9957,9957,'accessories/wieldable_items/weapons/exp06/1h_sword/exp06_1h_sword_silver_tip',0),(9958,9958,'accessories/wieldable_items/weapons/exp06/1h_sword/exp06_1h_sword_skewed_escargo',0),(9959,9959,'accessories/wieldable_items/weapons/exp06/1h_sword/exp06_1h_sword_soulleach',0),(9960,9960,'accessories/wieldable_items/weapons/exp06/1h_sword/exp06_1h_sword_spirit_of_the_forest',0),(9961,9961,'accessories/wieldable_items/weapons/exp06/1h_sword/exp06_1h_sword_tangler',0),(9962,9962,'accessories/wieldable_items/weapons/exp06/1h_sword/exp06_1h_sword_toothed_cleaver',0),(9963,9963,'creatures/mounts/horse_armor02/horse01_armor02_lava',0),(9964,9964,'creatures/mounts/horse_armor02/horse01_armor02_ice',0),(9965,9965,'accessories/wearable_items/elemental_crowns/elemental_crown_fire_purple',0),(9966,9966,'accessories/wearable_items/elemental_crowns/elemental_crown_ice_green',0),(9967,9967,'accessories/wearable_items/elemental_crowns/elemental_crown_ice_purple',0),(9968,9968,'accessories/wearable_items/elemental_crowns/sparkle_crown_purple',0),(9969,9969,'accessories/wearable_items/elemental_crowns/star_crown_purple',0),(9970,9970,'creatures/mounts/horse_armor_warhorse/horse01_armor_warhorse_pinto',0),(9971,9971,'creatures/mounts/horse_armor_cataphract/horse_armor_cataphract_black',0),(9972,9972,'creatures/mounts/horse_armor_cataphract/horse_armor_cataphract_blue',0),(9973,9973,'creatures/mounts/horse_armor_cataphract/horse_armor_cataphract_bronze',0),(9974,9974,'creatures/mounts/horse_armor_cataphract/horse_armor_cataphract_gold',0),(9975,9975,'creatures/mounts/horse_armor_cataphract/horse_armor_cataphract_purple',0),(9976,9976,'creatures/mounts/horse_armor_cataphract/horse_armor_cataphract_red',0),(9977,9977,'creatures/mounts/horse_armor_cataphract/horse_armor_cataphract_silver',0),(9978,9978,'creatures/mounts/horse_demon/horse_demon',0),(9979,9979,'_exp05/zones/objects/tradeskill_dungeons/void/dpo_transport_stage1',0),(9980,9980,'_exp05/zones/objects/tradeskill_dungeons/void/dpo_transport_stage2',0),(9981,9981,'_exp05/zones/objects/tradeskill_dungeons/void/dpo_transport_stage3',0),(9982,9982,'_exp05/zones/objects/tradeskill_dungeons/void/dpo_transport_stage4',0),(9983,9983,'accessories/wearable_items/profesion_hats/centurion_helm/ice_crest/head_centurion_ice_crest',0),(9984,9984,'accessories/wearable_items/profesion_hats/centurion_helm/ice_crest/ice_crest',0),(9985,9985,'accessories/wearable_items/profesion_hats/centurion_helm/lightning_crest/head_centurion_lightning_crest',0),(9986,9986,'accessories/wearable_items/profesion_hats/centurion_helm/lightning_crest/lightning_crest',0),(9987,9987,'accessories/wearable_items/profesion_hats/centurion_helm/poison_crest/head_centurion_poison_crest',0),(9988,9988,'accessories/wearable_items/profesion_hats/centurion_helm/poison_crest/poison_crest',0),(9989,9989,'creatures/mounts/unicorn/unicorn_saddle01_love',0),(9990,9990,'accessories/wearable_items/profesion_hats/tin_foil_helm/tin_foil_helm_dome',0),(9991,9991,'accessories/wearable_items/profesion_hats/tin_foil_helm/tin_foil_helm_pointy',0),(9992,9992,'accessories/wearable_items/cloak/exp06/cloak_community_team',0),(9993,9993,'staticobjects/liveevent/brew_day/dpo_kal_jug_dwarf01',0),(9994,9994,'staticobjects/liveevent/bristlebane_day/dpo_cm_arcane_bottle_glass02',0),(9995,9995,'staticobjects/liveevent/bristlebane_day/dpo_fprt_kitchen_winebottleplain001',0),(9996,9996,'staticobjects/liveevent/bristlebane_day/dpo_vp_jar0202',0),(9997,9997,'creatures/monsters/shadowedman_void',0),(9998,9998,'accessories/wearable_items/cloak/exp06/cloak_burning_dead',0),(9999,9999,'staticobjects/adv04/vessel_ice',0),(10000,10000,'staticobjects/bookcases/floor_bookcase_any_fancy_ice',0),(10001,10001,'staticobjects/brazier/floor_brazier_erudite_steam_ice',0),(10002,10002,'staticobjects/dressers/floor_dresser_any_fancy_ice',0),(10003,10003,'staticobjects/pillars/columnsmall002_ice',0),(10004,10004,'staticobjects/statues/binding_shrine_ice',0),(10005,10005,'staticobjects/walls/dpo_gf_kel_int_divider_wall01_ice',0),(10006,10006,'staticobjects/portals/lavastorm_teleporter_ring',0),(10007,10007,'staticobjects/torches/solro_dragontorch',0),(10008,10008,'staticobjects/bookcases/solro_bookcase01_dpo',0),(10009,10009,'staticobjects/bookcases/solro_bookcase02_dpo',0),(10010,10010,'staticobjects/bookcases/solro_bookcase03_dpo',0),(10011,10011,'staticobjects/books/solro_book01_dpo',0),(10012,10012,'staticobjects/books/solro_book01_flat_dpo',0),(10013,10013,'staticobjects/papers/solro_page01_dpo',0),(10014,10014,'staticobjects/papers/solro_page02_dpo',0),(10015,10015,'staticobjects/papers/solro_page03_dpo',0),(10016,10016,'staticobjects/tables/solro_desk_dpo',0),(10017,10017,'accessories/wieldable_items/weapons/exp05/1hp_dual_bladed_stiletto_blue',0),(10018,10018,'staticobjects/cages/sol_cage_closed01',0),(10019,10019,'staticobjects/crystals/dpo_lavastorm_crystals_group',0),(10020,10020,'_exp06/characters/tool_users/erudite_classic_female/erudite_classic_female',0),(10021,10021,'_exp06/characters/tool_users/erudite_classic_male/erudite_classic_male',0),(10022,10022,'accessories/wearable_items/_exp06/elf_armor_chain_black_red/chest',0),(10023,10023,'accessories/wearable_items/_exp06/elf_armor_chain_black_red/elf_armor_pauldron_left',0),(10024,10024,'accessories/wearable_items/_exp06/elf_armor_chain_black_red/elf_armor_pauldron_right',0),(10025,10025,'accessories/wearable_items/_exp06/elf_armor_chain_black_red/feet',0),(10026,10026,'accessories/wearable_items/_exp06/elf_armor_chain_black_red/forearms',0),(10027,10027,'accessories/wearable_items/_exp06/elf_armor_chain_black_red/hands',0),(10028,10028,'accessories/wearable_items/_exp06/elf_armor_chain_black_red/head',0),(10029,10029,'accessories/wearable_items/_exp06/elf_armor_chain_black_red/head_elf_armor',0),(10030,10030,'accessories/wearable_items/_exp06/elf_armor_chain_black_red/legs',0),(10031,10031,'accessories/wearable_items/_exp06/elf_armor_chain_black_red/legs_noskirt',0),(10032,10032,'accessories/wearable_items/_exp06/elf_armor_chain_black_red/shoulders',0),(10033,10033,'accessories/wearable_items/_exp06/elf_armor_chain_black_red/shoulders_nopauldrons',0),(10034,10034,'accessories/wearable_items/_exp06/elf_armor_chain_black_red/skirt',0),(10035,10035,'accessories/wearable_items/_exp06/elf_armor_vanguard_purple_gold/chest',0),(10036,10036,'accessories/wearable_items/_exp06/elf_armor_vanguard_purple_gold/elf_armor_pauldron_left',0),(10037,10037,'accessories/wearable_items/_exp06/elf_armor_vanguard_purple_gold/elf_armor_pauldron_right',0),(10038,10038,'accessories/wearable_items/_exp06/elf_armor_vanguard_purple_gold/feet',0),(10039,10039,'accessories/wearable_items/_exp06/elf_armor_vanguard_purple_gold/forearms',0),(10040,10040,'accessories/wearable_items/_exp06/elf_armor_vanguard_purple_gold/hands',0),(10041,10041,'accessories/wearable_items/_exp06/elf_armor_vanguard_purple_gold/head',0),(10042,10042,'accessories/wearable_items/_exp06/elf_armor_vanguard_purple_gold/head_elf_armor',0),(10043,10043,'accessories/wearable_items/_exp06/elf_armor_vanguard_purple_gold/legs',0),(10044,10044,'accessories/wearable_items/_exp06/elf_armor_vanguard_purple_gold/legs_noskirt',0),(10045,10045,'accessories/wearable_items/_exp06/elf_armor_vanguard_purple_gold/right',0),(10046,10046,'accessories/wearable_items/_exp06/elf_armor_vanguard_purple_gold/shoulders',0),(10047,10047,'accessories/wearable_items/_exp06/elf_armor_vanguard_purple_gold/shoulders_elf_amor',0),(10048,10048,'accessories/wearable_items/_exp06/elf_armor_vanguard_purple_gold/shoulders_nopauldrons',0),(10049,10049,'accessories/wearable_items/_exp06/elf_armor_vanguard_purple_gold/skirt',0),(10050,10050,'staticobjects/tables/dpo_dn_table_books',0),(10051,10051,'staticobjects/tables/dpo_dn_table_empty',0),(10052,10052,'staticobjects/torches/floor_torch_solro_tabletorch01',0),(10053,10053,'accessories/wearable_items/_exp06/predator_chain/chest',0),(10054,10054,'accessories/wearable_items/_exp06/predator_chain/feet',0),(10055,10055,'accessories/wearable_items/_exp06/predator_chain/forearms',0),(10056,10056,'accessories/wearable_items/_exp06/predator_chain/hands',0),(10057,10057,'accessories/wearable_items/_exp06/predator_chain/head',0),(10058,10058,'accessories/wearable_items/_exp06/predator_chain/head_predator',0),(10059,10059,'accessories/wearable_items/_exp06/predator_chain/legs',0),(10060,10060,'accessories/wearable_items/_exp06/predator_chain/legs_noskirt',0),(10061,10061,'accessories/wearable_items/_exp06/predator_chain/predator_pauldron_left',0),(10062,10062,'accessories/wearable_items/_exp06/predator_chain/predator_pauldron_right',0),(10063,10063,'accessories/wearable_items/_exp06/predator_chain/shoulders',0),(10064,10064,'accessories/wearable_items/_exp06/predator_chain/shoulders_nopauldrons',0),(10065,10065,'accessories/wearable_items/_exp06/predator_chain/shoulders_pauldrons_only',0),(10066,10066,'accessories/wearable_items/_exp06/predator_chain/skirt',0),(10067,10067,'accessories/wearable_items/_exp06/raven_armor_vanguard/chest',0),(10068,10068,'accessories/wearable_items/_exp06/raven_armor_vanguard/feet',0),(10069,10069,'accessories/wearable_items/_exp06/raven_armor_vanguard/forearms',0),(10070,10070,'accessories/wearable_items/_exp06/raven_armor_vanguard/hands',0),(10071,10071,'accessories/wearable_items/_exp06/raven_armor_vanguard/head',0),(10072,10072,'accessories/wearable_items/_exp06/raven_armor_vanguard/head_raven_armor',0),(10073,10073,'accessories/wearable_items/_exp06/raven_armor_vanguard/legs',0),(10074,10074,'accessories/wearable_items/_exp06/raven_armor_vanguard/legs_noskirt',0),(10075,10075,'accessories/wearable_items/_exp06/raven_armor_vanguard/raven_shoulder_left',0),(10076,10076,'accessories/wearable_items/_exp06/raven_armor_vanguard/raven_shoulder_right',0),(10077,10077,'accessories/wearable_items/_exp06/raven_armor_vanguard/right',0),(10078,10078,'accessories/wearable_items/_exp06/raven_armor_vanguard/shoulders',0),(10079,10079,'accessories/wearable_items/_exp06/raven_armor_vanguard/shoulders_nopauldrons',0),(10080,10080,'accessories/wearable_items/_exp06/raven_armor_vanguard/shoulders_raven_both',0),(10081,10081,'accessories/wearable_items/_exp06/raven_armor_vanguard/skirt',0),(10082,10082,'staticobjects/armor/armor_collection03_dpo',0),(10083,10083,'staticobjects/goblin_misc/goblin_smokestack03_dpo',0),(10084,10084,'staticobjects/goblin_misc/goblin_wallsmokestack01_dpo',0),(10085,10085,'staticobjects/goblin_misc/runnyeye_anvil02_dpo',0),(10086,10086,'staticobjects/goblin_misc/runnyeye_boxforge01_dpo',0),(10087,10087,'staticobjects/goblin_misc/runnyeye_coalbin01_dpo',0),(10088,10088,'staticobjects/goblin_misc/runnyeye_coalbin01_spill_dpo',0),(10089,10089,'staticobjects/goblin_misc/runnyeye_wallforge02_dpo',0),(10090,10090,'staticobjects/tools/nbhum_forge01_dpo',0),(10091,10091,'staticobjects/goblin_misc/goblin_smokestack02_dpo',0),(10092,10092,'staticobjects/carts/dpo_na_lava_cart01',0),(10093,10093,'staticobjects/carts/dpo_solro_mincart_rocks',0),(10094,10094,'staticobjects/flora/dpo_jw_sporepod01',0),(10095,10095,'staticobjects/rocks/dpo_nh_rock_large01',0),(10096,10096,'staticobjects/rocks/dpo_nh_rock_large02',0),(10097,10097,'staticobjects/statues/dpo_nh_statue01',0),(10098,10098,'staticobjects/torture_chamber/dpo_nh_bone_wall',0),(10099,10099,'staticobjects/fish/barracuda_dpo',0),(10100,10100,'_exp05/zones/objects/exp05_dun_miragul_upper/glass_orb_ped_collision',0),(10101,10101,'staticobjects/blacksmith/orc_forge_houseitem',0),(10102,10102,'staticobjects/guildhall/trophies/floor_aiden',0),(10103,10103,'staticobjects/guildhall/trophies/floor_behemoth',0),(10104,10104,'staticobjects/guildhall/trophies/floor_cheldrak',0),(10105,10105,'staticobjects/guildhall/trophies/floor_clockwork',0),(10106,10106,'staticobjects/guildhall/trophies/floor_darathar_head',0),(10107,10107,'staticobjects/guildhall/trophies/floor_djinn_master',0),(10108,10108,'staticobjects/guildhall/trophies/floor_godking_anuk_head',0),(10109,10109,'staticobjects/guildhall/trophies/floor_gynok',0),(10110,10110,'staticobjects/guildhall/trophies/floor_mayong_coffin',0),(10111,10111,'staticobjects/guildhall/trophies/floor_munzok',0),(10112,10112,'staticobjects/guildhall/trophies/floor_tarinax_head',0),(10113,10113,'staticobjects/guildhall/trophies/floor_venekor_head',0),(10114,10114,'staticobjects/guildhall/trophies/floor_trakanon_head',0),(10115,10115,'staticobjects/guildhall/trophies/floor_venril',0),(10116,10116,'staticobjects/guildhall/trophies/floor_vox_head_full',0),(10117,10117,'staticobjects/guildhall/trophies/floor_vyemm_head',0),(10118,10118,'staticobjects/guildhall/trophies/floor_wuoshi_head',0),(10119,10119,'staticobjects/guildhall/trophies/floor_ykesha',0),(10120,10120,'staticobjects/guildhall/trophies/floor_zarakon_head',0),(10121,10121,'staticobjects/alter/le_lavastorm_altar01_dpo',0),(10122,10122,'staticobjects/cages/sol_cage_closed01',0),(10123,10123,'staticobjects/carts/na_lava_cart01_dpo',0),(10124,10124,'staticobjects/statues/le_lavastorm_forge01_dpo',0),(10125,10125,'staticobjects/statues/le_lavastorm_pedestal01_dpo',0),(10126,10126,'staticobjects/statues/na_statue_01_dpo',0),(10127,10127,'staticobjects/statues/nh_bone_wall_dpo',0),(10128,10128,'staticobjects/statues/nh_statue_01_dpo',0),(10129,10129,'accessories/wieldable_items/misc/weaponsmith_forged_sword',0),(10130,10130,'accessories/wieldable_items/misc/alchemist_flask',0),(10131,10131,'accessories/wieldable_items/misc/armorer_tongs',0),(10132,10132,'accessories/wieldable_items/misc/carpenter_hammer',0),(10133,10133,'accessories/wieldable_items/misc/jewelers_tongs',0),(10134,10134,'accessories/wieldable_items/misc/provisioner_skillet',0),(10135,10135,'accessories/wieldable_items/misc/sage_scroll',0),(10136,10136,'accessories/wieldable_items/misc/tailor_long_needle',0),(10137,10137,'accessories/wieldable_items/misc/woodworker_saw',0),(10138,10138,'accessories/wearable_items/_exp06/shadowknight_skull_vanguard/chest',0),(10139,10139,'accessories/wearable_items/_exp06/shadowknight_skull_vanguard/feet',0),(10140,10140,'accessories/wearable_items/_exp06/shadowknight_skull_vanguard/forearms',0),(10141,10141,'accessories/wearable_items/_exp06/shadowknight_skull_vanguard/hands',0),(10142,10142,'accessories/wearable_items/_exp06/shadowknight_skull_vanguard/head',0),(10143,10143,'accessories/wearable_items/_exp06/shadowknight_skull_vanguard/head_shadowknight_skull_vanguard',0),(10144,10144,'accessories/wearable_items/_exp06/shadowknight_skull_vanguard/legs',0),(10145,10145,'accessories/wearable_items/_exp06/shadowknight_skull_vanguard/legs_noskirt',0),(10146,10146,'accessories/wearable_items/_exp06/shadowknight_skull_vanguard/right',0),(10147,10147,'accessories/wearable_items/_exp06/shadowknight_skull_vanguard/shadowknight_skull_pauldrons_left',0),(10148,10148,'accessories/wearable_items/_exp06/shadowknight_skull_vanguard/shadowknight_skull_pauldrons_right',0),(10149,10149,'accessories/wearable_items/_exp06/shadowknight_skull_vanguard/shoulders',0),(10150,10150,'accessories/wearable_items/_exp06/shadowknight_skull_vanguard/shoulders_nopauldrons',0),(10151,10151,'accessories/wearable_items/_exp06/shadowknight_skull_vanguard/shoulders_shadowknight_skull_vanguard',0),(10152,10152,'accessories/wearable_items/_exp06/shadowknight_skull_vanguard/skirt',0),(10153,10153,'accessories/wearable_items/_exp06/white_paladin_vanguard/chest',0),(10154,10154,'accessories/wearable_items/_exp06/white_paladin_vanguard/feet',0),(10155,10155,'accessories/wearable_items/_exp06/white_paladin_vanguard/forearms',0),(10156,10156,'accessories/wearable_items/_exp06/white_paladin_vanguard/hands',0),(10157,10157,'accessories/wearable_items/_exp06/white_paladin_vanguard/head',0),(10158,10158,'accessories/wearable_items/_exp06/white_paladin_vanguard/head_white_paladin_vanguard',0),(10159,10159,'accessories/wearable_items/_exp06/white_paladin_vanguard/legs',0),(10160,10160,'accessories/wearable_items/_exp06/white_paladin_vanguard/legs_noskirt',0),(10161,10161,'accessories/wearable_items/_exp06/white_paladin_vanguard/right',0),(10162,10162,'accessories/wearable_items/_exp06/white_paladin_vanguard/shoulders',0),(10163,10163,'accessories/wearable_items/_exp06/white_paladin_vanguard/shoulders_nopauldrons',0),(10164,10164,'accessories/wearable_items/_exp06/white_paladin_vanguard/shoulders_white_paladin_vanguard',0),(10165,10165,'accessories/wearable_items/_exp06/white_paladin_vanguard/skirt',0),(10166,10166,'accessories/wearable_items/_exp06/white_paladin_vanguard/white_paladin_vanguard_pauldron_left',0),(10167,10167,'accessories/wearable_items/_exp06/white_paladin_vanguard/white_paladin_vanguard_pauldron_right',0),(10168,10168,'staticobjects/flora/dpo_jw_sporepod01',0),(10169,10169,'creatures/mounts/warg_mount/warg_armor03_ice',0),(10170,10170,'creatures/mounts/warg_mount/warg_armor03_lava',0),(10171,10171,'creatures/mounts/warg_mount/warg_armor03_void',0),(10172,10172,'creatures/mounts/carpet_lava',0),(10173,10173,'creatures/mounts/carpet_void',0),(10174,10174,'creatures/mounts/rhino_mount/rhino_armor01_void',0),(10175,10175,'creatures/mounts/rhino_mount/rhino_armor01_lava',0),(10176,10176,'creatures/mounts/rhino_mount/rhino_armor01_ice',0),(10177,10177,'creatures/mounts/rhino_mount/rhino_armor01_golden',0),(10178,10178,'creatures/mounts/rhino_mount/rhino_armor01_chrome',0),(10179,10179,'staticobjects/weapons/dpo_felwithe_bws_staff',0),(10180,10180,'staticobjects/pictures/eq2book_painting_venekor_dpo',0),(10181,10181,'accessories/wearable_items/_exp06/shadowknight_skull_vanguard/head_shadowknight_elf_armor',0),(10182,10182,'accessories/wearable_items/_exp06/shadowknight_skull_vanguard/shadowknight_elf_pauldrons_left',0),(10183,10183,'accessories/wearable_items/_exp06/shadowknight_skull_vanguard/shadowknight_elf_pauldrons_right',0),(10184,10184,'accessories/wearable_items/_exp06/shadowknight_skull_vanguard/shoulders_shadowknight_elf_armor',0),(10185,10185,'accessories/wearable_items/_exp06/elf_armor_leather/shoulders_elf_pauldrons',0),(10186,10186,'accessories/wearable_items/profesion_hats/warden/plain_metal_circlet/head',0),(10187,10187,'accessories/wearable_items/_exp06/elf_armor_robe_black_red/chest',0),(10188,10188,'accessories/wearable_items/_exp06/elf_armor_robe_black_red/chest_with_pauldrons',0),(10189,10189,'accessories/wearable_items/_exp06/elf_armor_robe_black_red/elf_armor_pauldron_left',0),(10190,10190,'accessories/wearable_items/_exp06/elf_armor_robe_black_red/elf_armor_pauldron_right',0),(10191,10191,'accessories/wearable_items/_exp06/elf_armor_robe_black_red/head',0),(10192,10192,'accessories/wearable_items/_exp06/elf_armor_robe_black_red/hood',0),(10193,10193,'accessories/wearable_items/_exp06/elf_armor_robe_black_red/pants',0),(10194,10194,'accessories/wearable_items/_exp06/elf_armor_robe_black_red/skirt',0),(10195,10195,'accessories/wearable_items/_exp06/elf_armor_robe_blue/chest',0),(10196,10196,'accessories/wearable_items/_exp06/elf_armor_robe_blue/chest_with_pauldrons',0),(10197,10197,'accessories/wearable_items/_exp06/elf_armor_robe_blue/elf_armor_pauldron_left',0),(10198,10198,'accessories/wearable_items/_exp06/elf_armor_robe_blue/elf_armor_pauldron_right',0),(10199,10199,'accessories/wearable_items/_exp06/elf_armor_robe_blue/head',0),(10200,10200,'accessories/wearable_items/_exp06/elf_armor_robe_blue/hood',0),(10201,10201,'accessories/wearable_items/_exp06/elf_armor_robe_blue/pants',0),(10202,10202,'accessories/wearable_items/_exp06/elf_armor_robe_blue/skirt',0),(10203,10203,'staticobjects/promo_items/equipment_display_01_nagaefen_dpo',0),(10204,10204,'accessories/wearable_items/_exp06/elf_armor_chain_gold/chest',0),(10205,10205,'accessories/wearable_items/_exp06/elf_armor_chain_gold/elf_armor_pauldron_left',0),(10206,10206,'accessories/wearable_items/_exp06/elf_armor_chain_gold/elf_armor_pauldron_right',0),(10207,10207,'accessories/wearable_items/_exp06/elf_armor_chain_gold/feet',0),(10208,10208,'accessories/wearable_items/_exp06/elf_armor_chain_gold/forearms',0),(10209,10209,'accessories/wearable_items/_exp06/elf_armor_chain_gold/hands',0),(10210,10210,'accessories/wearable_items/_exp06/elf_armor_chain_gold/head',0),(10211,10211,'accessories/wearable_items/_exp06/elf_armor_chain_gold/head_elf_armor',0),(10212,10212,'accessories/wearable_items/_exp06/elf_armor_chain_gold/legs',0),(10213,10213,'accessories/wearable_items/_exp06/elf_armor_chain_gold/legs_noskirt',0),(10214,10214,'accessories/wearable_items/_exp06/elf_armor_chain_gold/shoulders',0),(10215,10215,'accessories/wearable_items/_exp06/elf_armor_chain_gold/shoulders_nopauldrons',0),(10216,10216,'accessories/wearable_items/_exp06/elf_armor_chain_gold/skirt',0),(10217,10217,'staticobjects/promo_items/equipment_display_01_nagaefen_dpo',0),(10218,10218,'staticobjects/soe_wallet/cherry_armoire_dpo',0),(10219,10219,'staticobjects/soe_wallet/cherry_bench_dpo',0),(10220,10220,'staticobjects/soe_wallet/cherry_cabinet_dpo',0),(10221,10221,'staticobjects/soe_wallet/cherry_chair_dpo',0),(10222,10222,'staticobjects/soe_wallet/cherry_dresser_dpo',0),(10223,10223,'staticobjects/soe_wallet/cherry_nightstand_dpo',0),(10224,10224,'staticobjects/soe_wallet/cherry_sleigh_bed_dpo',0),(10225,10225,'staticobjects/soe_wallet/cherry_table_dpo',0),(10226,10226,'accessories/wieldable_items/weapons/fist/fist_of_lava',0),(10227,10227,'accessories/wieldable_items/shields/buckler_shield/brace_wall_of_air',0),(10228,10228,'accessories/wearable_items/_exp06/elf_armor_chain_black_blue/chest',0),(10229,10229,'accessories/wearable_items/_exp06/elf_armor_chain_black_blue/elf_armor_pauldron_left',0),(10230,10230,'accessories/wearable_items/_exp06/elf_armor_chain_black_blue/elf_armor_pauldron_right',0),(10231,10231,'accessories/wearable_items/_exp06/elf_armor_chain_black_blue/feet',0),(10232,10232,'accessories/wearable_items/_exp06/elf_armor_chain_black_blue/forearms',0),(10233,10233,'accessories/wearable_items/_exp06/elf_armor_chain_black_blue/hands',0),(10234,10234,'accessories/wearable_items/_exp06/elf_armor_chain_black_blue/head',0),(10235,10235,'accessories/wearable_items/_exp06/elf_armor_chain_black_blue/head_elf_armor',0),(10236,10236,'accessories/wearable_items/_exp06/elf_armor_chain_black_blue/legs',0),(10237,10237,'accessories/wearable_items/_exp06/elf_armor_chain_black_blue/legs_noskirt',0),(10238,10238,'accessories/wearable_items/_exp06/elf_armor_chain_black_blue/shoulders',0),(10239,10239,'accessories/wearable_items/_exp06/elf_armor_chain_black_blue/shoulders_nopauldrons',0),(10240,10240,'accessories/wearable_items/_exp06/elf_armor_chain_black_blue/skirt',0),(10241,10241,'accessories/wieldable_items/shields/buckler_shield/void_portal_buckler',0),(10242,10242,'accessories/wieldable_items/shields/buckler_shield/brace_void_portal_buckler',0),(10243,10243,'accessories/wearable_items/_exp06/erudite_classic_armor/erudite_classic_armor_robe_white/chest',0),(10244,10244,'accessories/wearable_items/_exp06/erudite_classic_armor/erudite_classic_armor_robe_white/head',0),(10245,10245,'accessories/wearable_items/_exp06/erudite_classic_armor/erudite_classic_armor_robe_white/head_for_classic_erudite',0),(10246,10246,'accessories/wearable_items/_exp06/erudite_classic_armor/erudite_classic_armor_robe_white/hood',0),(10247,10247,'accessories/wearable_items/_exp06/erudite_classic_armor/erudite_classic_armor_robe_white/pants',0),(10248,10248,'accessories/wearable_items/_exp06/erudite_classic_armor/erudite_classic_armor_robe_white/skirt',0),(10249,10249,'accessories/wearable_items/_exp06/predator_chain/head_predator_no_mask',0),(10250,10250,'accessories/wearable_items/_exp06/ornate_leather01/chest',0),(10251,10251,'accessories/wearable_items/_exp06/ornate_leather01/feet',0),(10252,10252,'accessories/wearable_items/_exp06/ornate_leather01/forearms',0),(10253,10253,'accessories/wearable_items/_exp06/ornate_leather01/hands',0),(10254,10254,'accessories/wearable_items/_exp06/ornate_leather01/head',0),(10255,10255,'accessories/wearable_items/_exp06/ornate_leather01/legs',0),(10256,10256,'accessories/wearable_items/_exp06/ornate_leather01/legs_noskirt',0),(10257,10257,'accessories/wearable_items/_exp06/ornate_leather01/shoulders',0),(10258,10258,'accessories/wearable_items/_exp06/ornate_leather01/skirt',0),(10259,10259,'accessories/wearable_items/_exp06/ornate_chain01/chest',0),(10260,10260,'accessories/wearable_items/_exp06/ornate_chain01/feet',0),(10261,10261,'accessories/wearable_items/_exp06/ornate_chain01/forearms',0),(10262,10262,'accessories/wearable_items/_exp06/ornate_chain01/head',0),(10263,10263,'accessories/wearable_items/_exp06/ornate_chain01/legs',0),(10264,10264,'accessories/wearable_items/_exp06/ornate_chain01/legs_noskirt',0),(10265,10265,'accessories/wearable_items/_exp06/ornate_chain01/shoulders',0),(10266,10266,'accessories/wearable_items/_exp06/ornate_chain01/skirt',0),(10267,10267,'accessories/wearable_items/_exp06/ornate_vanguard01/chest',0),(10268,10268,'accessories/wearable_items/_exp06/ornate_vanguard01/feet',0),(10269,10269,'accessories/wearable_items/_exp06/ornate_vanguard01/forearms',0),(10270,10270,'accessories/wearable_items/_exp06/ornate_vanguard01/hands',0),(10271,10271,'accessories/wearable_items/_exp06/ornate_vanguard01/head',0),(10272,10272,'accessories/wearable_items/_exp06/ornate_vanguard01/legs',0),(10273,10273,'accessories/wearable_items/_exp06/ornate_vanguard01/legs_noskirt',0),(10274,10274,'accessories/wearable_items/_exp06/ornate_vanguard01/right',0),(10275,10275,'accessories/wearable_items/_exp06/ornate_vanguard01/shoulders',0),(10276,10276,'accessories/wearable_items/_exp06/ornate_vanguard01/shoulders_nopauldrons',0),(10277,10277,'accessories/wearable_items/_exp06/ornate_vanguard01/skirt',0),(10278,10278,'accessories/wearable_items/_exp06/elf_armor_leather/head_elf_armor_no_mask',0),(10279,10279,'accessories/wearable_items/leather/plain/unseen_hand_specfx/chest',0),(10280,10280,'accessories/wearable_items/leather/plain/unseen_hand_specfx/feet',0),(10281,10281,'accessories/wearable_items/leather/plain/unseen_hand_specfx/forearms',0),(10282,10282,'accessories/wearable_items/leather/plain/unseen_hand_specfx/hands',0),(10283,10283,'accessories/wearable_items/leather/plain/unseen_hand_specfx/head',0),(10284,10284,'accessories/wearable_items/leather/plain/unseen_hand_specfx/legs',0),(10285,10285,'accessories/wearable_items/leather/plain/unseen_hand_specfx/legs_noskirt',0),(10286,10286,'accessories/wearable_items/leather/plain/unseen_hand_specfx/pauldron01_leather_heavy_left',0),(10287,10287,'accessories/wearable_items/leather/plain/unseen_hand_specfx/pauldron01_leather_heavy_right',0),(10288,10288,'accessories/wearable_items/leather/plain/unseen_hand_specfx/shoulders',0),(10289,10289,'accessories/wearable_items/leather/plain/unseen_hand_specfx/shoulders_leather_heavy_both',0),(10290,10290,'accessories/wearable_items/leather/plain/unseen_hand_specfx/skirt',0),(10291,10291,'accessories/wearable_items/_exp06/ornate_magus01/arms',0),(10292,10292,'accessories/wearable_items/_exp06/ornate_magus01/chest',0),(10293,10293,'accessories/wearable_items/_exp06/ornate_magus01/skirt',0),(10294,10294,'accessories/wearable_items/_exp06/vanguard_iceknight/chest',0),(10295,10295,'accessories/wearable_items/_exp06/vanguard_iceknight/feet',0),(10296,10296,'accessories/wearable_items/_exp06/vanguard_iceknight/forearms',0),(10297,10297,'accessories/wearable_items/_exp06/vanguard_iceknight/hands',0),(10298,10298,'accessories/wearable_items/_exp06/vanguard_iceknight/head',0),(10299,10299,'accessories/wearable_items/_exp06/vanguard_iceknight/head_vanguard_iceknight_skull_vanguard',0),(10300,10300,'accessories/wearable_items/_exp06/vanguard_iceknight/legs',0),(10301,10301,'accessories/wearable_items/_exp06/vanguard_iceknight/legs_noskirt',0),(10302,10302,'accessories/wearable_items/_exp06/vanguard_iceknight/right',0),(10303,10303,'accessories/wearable_items/_exp06/vanguard_iceknight/shoulders',0),(10304,10304,'accessories/wearable_items/_exp06/vanguard_iceknight/shoulders_nopauldrons',0),(10305,10305,'accessories/wearable_items/_exp06/vanguard_iceknight/shoulders_vanguard_ice_skull_pauldrons',0),(10306,10306,'accessories/wearable_items/_exp06/vanguard_iceknight/skirt',0),(10307,10307,'accessories/wearable_items/_exp06/vanguard_iceknight/vanguard_iceknight_skull_pauldrons_left',0),(10308,10308,'accessories/wearable_items/_exp06/vanguard_iceknight/vanguard_iceknight_skull_pauldrons_right',0),(10309,10309,'accessories/wearable_items/profesion_hats/flower_circlet/daisy_circlet_head',0),(10310,10310,'accessories/wearable_items/profesion_hats/flower_circlet/daisy_red_circlet_head',0),(10311,10311,'accessories/wearable_items/profesion_hats/flower_circlet/flower_circlet_full_head',0),(10312,10312,'accessories/wearable_items/profesion_hats/flower_circlet/flower_circlet_full_head1',0),(10313,10313,'accessories/wearable_items/profesion_hats/flower_circlet/mum_circlet_head',0),(10314,10314,'accessories/wearable_items/profesion_hats/flower_circlet/mum_green_circlet_head',0),(10315,10315,'staticobjects/statues/firiona_vie_fanfaire_dpo',0),(10316,10316,'accessories/wearable_items/profesion_hats/flower_circlet/mum_orange_circlet_head',0),(10317,10317,'accessories/wearable_items/profesion_hats/flower_circlet/flower_circlet_black',0),(10318,10318,'accessories/wearable_items/profesion_hats/flower_circlet/mum_red_circlet_head',0),(10319,10319,'accessories/wearable_items/profesion_hats/flower_circlet/mum_pink_yellow_circlet_head',0),(10320,10320,'accessories/wearable_items/profesion_hats/flower_circlet/mum_pink_white_circlet_head',0),(10321,10321,'accessories/wearable_items/profesion_hats/flower_circlet/daisy_yellow_circlet_head',0),(10322,10322,'accessories/wearable_items/profesion_hats/flower_circlet/daisy_blue_circlet_head',0),(10323,10323,'accessories/wearable_items/profesion_hats/flower_circlet/daisy_pink_circlet_head',0),(10324,10324,'staticobjects/crystals/dpo_crystals_02',0),(10325,10325,'staticobjects/flora/dpo_jw_firecactus',0),(10326,10326,'staticobjects/tree/dpo_jw_tree_oak_green',0),(10327,10327,'staticobjects/tree/dpo_ant_ext_oaktree',0),(10328,10328,'staticobjects/mushroom/mushroom_spotted_lavender',0),(10329,10329,'staticobjects/portals/dpo_mushroom_ring',0),(10330,10330,'accessories/wearable_items/_exp06/magic_rune_leather01/chest',0),(10331,10331,'accessories/wearable_items/_exp06/magic_rune_leather01/feet',0),(10332,10332,'accessories/wearable_items/_exp06/magic_rune_leather01/forearms',0),(10333,10333,'accessories/wearable_items/_exp06/magic_rune_leather01/hands',0),(10334,10334,'accessories/wearable_items/_exp06/magic_rune_leather01/head',0),(10335,10335,'accessories/wearable_items/_exp06/magic_rune_leather01/legs',0),(10336,10336,'accessories/wearable_items/_exp06/magic_rune_leather01/legs_noskirt',0),(10337,10337,'accessories/wearable_items/_exp06/magic_rune_leather01/shoulders',0),(10338,10338,'accessories/wearable_items/_exp06/magic_rune_leather01/skirt',0),(10339,10339,'accessories/wearable_items/_exp06/frostrune_armor_vanguard/chest',0),(10340,10340,'accessories/wearable_items/_exp06/frostrune_armor_vanguard/feet',0),(10341,10341,'accessories/wearable_items/_exp06/frostrune_armor_vanguard/forearms',0),(10342,10342,'accessories/wearable_items/_exp06/frostrune_armor_vanguard/frostrune_pauldron_left',0),(10343,10343,'accessories/wearable_items/_exp06/frostrune_armor_vanguard/frostrune_pauldron_right',0),(10344,10344,'accessories/wearable_items/_exp06/frostrune_armor_vanguard/hands',0),(10345,10345,'accessories/wearable_items/_exp06/frostrune_armor_vanguard/head',0),(10346,10346,'accessories/wearable_items/_exp06/frostrune_armor_vanguard/head_frostrune_epic',0),(10347,10347,'accessories/wearable_items/_exp06/frostrune_armor_vanguard/legs',0),(10348,10348,'accessories/wearable_items/_exp06/frostrune_armor_vanguard/legs_noskirt',0),(10349,10349,'accessories/wearable_items/_exp06/frostrune_armor_vanguard/right',0),(10350,10350,'accessories/wearable_items/_exp06/frostrune_armor_vanguard/shoulders',0),(10351,10351,'accessories/wearable_items/_exp06/frostrune_armor_vanguard/shoulders_frostrune_epic',0),(10352,10352,'accessories/wearable_items/_exp06/frostrune_armor_vanguard/shoulders_nopauldrons',0),(10353,10353,'accessories/wearable_items/_exp06/frostrune_armor_vanguard/skirt',0),(10354,10354,'_exp05/monsters/skull_wisp_blue',0),(10355,10355,'_exp05/monsters/skull_wisp_green',0),(10356,10356,'_exp05/monsters/skull_wisp_purple',0),(10357,10357,'staticobjects/portals/gorowyn_teleporter',0),(10358,10358,'accessories/wearable_items/profesion_hats/dwarf_vanguard_helm/head_dwarf_armor_vanguard',0),(10359,10359,'accessories/wearable_items/profesion_hats/snow_bunny_hat/head_black_bunny_hat',0),(10360,10360,'accessories/wearable_items/profesion_hats/snow_bunny_hat/head_green_bunny_hat',0),(10361,10361,'accessories/wearable_items/profesion_hats/snow_bunny_hat/head_grey_bunny_hat',0),(10362,10362,'accessories/wearable_items/profesion_hats/snow_bunny_hat/head_pink_bunny_hat',0),(10363,10363,'accessories/wearable_items/profesion_hats/snow_bunny_hat/head_red_bunny_hat',0),(10364,10364,'accessories/wearable_items/profesion_hats/snow_bunny_hat/head_snow_bunny_hat',0),(10365,10365,'accessories/wearable_items/profesion_hats/snow_bunny_hat/head_tan_bunny_hat',0),(10366,10366,'accessories/wearable_items/_exp06/ornate_chain01/hands',0),(10367,10367,'accessories/wearable_items/_exp06/magic_rune_chain01/chest',0),(10368,10368,'accessories/wearable_items/_exp06/magic_rune_chain01/feet',0),(10369,10369,'accessories/wearable_items/_exp06/magic_rune_chain01/forearms',0),(10370,10370,'accessories/wearable_items/_exp06/magic_rune_chain01/hands',0),(10371,10371,'accessories/wearable_items/_exp06/magic_rune_chain01/head',0),(10372,10372,'accessories/wearable_items/_exp06/magic_rune_chain01/legs',0),(10373,10373,'accessories/wearable_items/_exp06/magic_rune_chain01/legs_noskirt',0),(10374,10374,'accessories/wearable_items/_exp06/magic_rune_chain01/shoulders',0),(10375,10375,'accessories/wearable_items/_exp06/magic_rune_chain01/skirt',0),(10376,10376,'staticobjects/liveevent/cityfestivals/dpo_dw_obj_chandelier_gothic01',0),(10377,10377,'staticobjects/liveevent/cityfestivals/dpo_floating_lantern_blue',0),(10378,10378,'staticobjects/liveevent/cityfestivals/dpo_floating_lantern_green',0),(10379,10379,'staticobjects/liveevent/cityfestivals/dpo_floating_lantern_purple',0),(10380,10380,'staticobjects/liveevent/cityfestivals/dpo_floating_lantern_red',0),(10381,10381,'staticobjects/liveevent/cityfestivals/dpo_floating_lantern_yellow',0),(10382,10382,'staticobjects/liveevent/cityfestivals/dpo_nk_obj_banner_cloth',0),(10383,10383,'accessories/wearable_items/_exp08/dragon_armor/leather2_slate/chest',1096),(10384,10384,'staticobjects/liveevent/cityfestivals/gf_elf_bed01',0),(10385,10385,'staticobjects/liveevent/cityfestivals/gf_elf_chair02',0),(10386,10386,'staticobjects/liveevent/cityfestivals/gf_elf_chair02_yellow',0),(10387,10387,'staticobjects/liveevent/cityfestivals/gf_elf_table_bedside01',0),(10388,10388,'accessories/wearable_items/_exp08/dragon_armor/leather2_slate/feet',1096),(10389,10389,'staticobjects/liveevent/cityfestivals/kel_banner_guild_protectors01',0),(10390,10390,'accessories/wearable_items/_exp08/dragon_armor/leather2_slate/forearms',1096),(10391,10391,'staticobjects/liveevent/cityfestivals/kel_banner_standing_protectors01',0),(10392,10392,'staticobjects/liveevent/cityfestivals/nk_obj_chair_bar_stool01',0),(10393,10393,'staticobjects/liveevent/cityfestivals/nk_obj_chair_simple01',0),(10394,10394,'accessories/wearable_items/_exp08/dragon_armor/leather2_slate/hands',1096),(10395,10395,'accessories/wearable_items/_exp06/frostrune_armor_leather/chest',0),(10396,10396,'accessories/wearable_items/_exp06/frostrune_armor_leather/feet',0),(10397,10397,'accessories/wearable_items/_exp06/frostrune_armor_leather/forearms',0),(10398,10398,'accessories/wearable_items/_exp06/frostrune_armor_leather/frostrune_leather_epic_pauldron_left',0),(10399,10399,'accessories/wearable_items/_exp06/frostrune_armor_leather/frostrune_leather_epic_pauldron_right',0),(10400,10400,'accessories/wearable_items/_exp06/frostrune_armor_leather/hands',0),(10401,10401,'accessories/wearable_items/_exp06/frostrune_armor_leather/head',0),(10402,10402,'accessories/wearable_items/_exp06/frostrune_armor_leather/head_frostrune_leather_epic',0),(10403,10403,'accessories/wearable_items/_exp06/frostrune_armor_leather/legs',0),(10404,10404,'accessories/wearable_items/_exp06/frostrune_armor_leather/legs_noskirt',0),(10405,10405,'accessories/wearable_items/_exp06/frostrune_armor_leather/shoulders',0),(10406,10406,'accessories/wearable_items/_exp06/frostrune_armor_leather/shoulders_nopauldrons',0),(10407,10407,'accessories/wearable_items/_exp06/frostrune_armor_leather/skirt',0),(10408,10408,'accessories/wearable_items/_exp06/frostrune_armor_chain/chest',0),(10409,10409,'accessories/wearable_items/_exp06/frostrune_armor_chain/feet',0),(10410,10410,'accessories/wearable_items/_exp06/frostrune_armor_chain/forearms',0),(10411,10411,'accessories/wearable_items/_exp06/frostrune_armor_chain/frostrune_chain_epic_pauldron_left',0),(10412,10412,'accessories/wearable_items/_exp06/frostrune_armor_chain/frostrune_chain_epic_pauldron_right',0),(10413,10413,'accessories/wearable_items/_exp06/frostrune_armor_chain/hands',0),(10414,10414,'accessories/wearable_items/_exp06/frostrune_armor_chain/head',0),(10415,10415,'accessories/wearable_items/_exp06/frostrune_armor_chain/head_frostrune_chain_epic',0),(10416,10416,'accessories/wearable_items/_exp06/frostrune_armor_chain/legs',0),(10417,10417,'accessories/wearable_items/_exp06/frostrune_armor_chain/legs_noskirt',0),(10418,10418,'accessories/wearable_items/_exp06/frostrune_armor_chain/shoulders',0),(10419,10419,'accessories/wearable_items/_exp06/frostrune_armor_chain/shoulders_nopauldrons',0),(10420,10420,'accessories/wearable_items/_exp06/frostrune_armor_chain/skirt',0),(10421,10421,'accessories/wearable_items/_exp06/frostrune_armor_robe/chest',0),(10422,10422,'accessories/wearable_items/_exp06/frostrune_armor_robe/chest_with_pauldrons',0),(10423,10423,'accessories/wearable_items/_exp06/frostrune_armor_robe/frostrune_armor_pauldron_left',0),(10424,10424,'accessories/wearable_items/_exp06/frostrune_armor_robe/frostrune_armor_pauldron_right',0),(10425,10425,'accessories/wearable_items/_exp06/frostrune_armor_robe/head',0),(10426,10426,'accessories/wearable_items/_exp06/frostrune_armor_robe/hood',0),(10427,10427,'accessories/wearable_items/_exp06/frostrune_armor_robe/pants',0),(10428,10428,'accessories/wearable_items/_exp06/frostrune_armor_robe/skirt',0),(10429,10429,'accessories/wearable_items/robe_02/pants',0),(10430,10430,'creatures/monsters/lion_snow',0),(10431,10431,'creatures/monsters/lioness_snow',0),(10432,10432,'staticobjects/rocks/dpo_eh_rock_medium05',0),(10433,10433,'accessories/wieldable_items/weapons/staff/firiona_vie_style_wand/firiona_vie_style_wand',0),(10434,10434,'accessories/wearable_items/_exp06/magic_rune_robe01/chest',0),(10435,10435,'accessories/wearable_items/_exp06/magic_rune_robe01/head',0),(10436,10436,'accessories/wearable_items/_exp06/magic_rune_robe01/hood',0),(10437,10437,'accessories/wearable_items/_exp06/magic_rune_robe01/pants',0),(10438,10438,'accessories/wearable_items/_exp06/magic_rune_robe01/skirt',0),(10439,10439,'accessories/wearable_items/profesion_hats/firiona_vie_tiara/head_firiona_vie_tiara',0),(10440,10440,'creatures/mounts/carpet_shamrock',0),(10441,10441,'creatures/mounts/carpet_leaf',0),(10442,10442,'creatures/mounts/unicorn/unicorn_saddle01_autumnstrider',0),(10443,10443,'creatures/mounts/unicorn/unicorn_saddle01_springstrider',0),(10444,10444,'staticobjects/liveevent/cityfestivals/dw_hehome_streetlamp01',0),(10445,10445,'staticobjects/liveevent/cityfestivals/dpo_tapestry_design_void_energy',0),(10446,10446,'staticobjects/liveevent/cityfestivals/goro_obj_lantern_green_pfx_col',0),(10447,10447,'staticobjects/liveevent/cityfestivals/goro_obj_lantern_pink_pfx_col',0),(10448,10448,'staticobjects/tcg/tcg_ice_cream_tapestry',0),(10449,10449,'staticobjects/tcg/tcg_tapestry_kaltuk',0),(10450,10450,'staticobjects/tcg/tcg_tapestry_nurgg',0),(10451,10451,'staticobjects/crystals/dpo_crystals_03',0),(10452,10452,'staticobjects/flora/dpo_ceiling_harvesting_roots_tier03',0),(10453,10453,'staticobjects/flora/dpo_gf_flora_mushroom_huge02',0),(10454,10454,'staticobjects/flora/dpo_gf_flora_mushroom_small01',0),(10455,10455,'staticobjects/flora/dpo_ow_stumpwell01',0),(10456,10456,'staticobjects/flora/dpo_wall_gf_flora_r02_vine01',0),(10457,10457,'staticobjects/flora/dpo_ceiling_lf_flora_rm04_vine01',0),(10458,10458,'staticobjects/flora/dpo_lf_flora_rm04_vine01',0),(10459,10459,'staticobjects/flora/dpo_gf_flora_r02_vine02_flowers03',0),(10460,10460,'staticobjects/flora/dpo_lf_flora_rm01_vine01',0),(10461,10461,'staticobjects/flora/dpo_lf_flora_rm08_vine02_flower',0),(10462,10462,'accessories/wearable_items/_exp06/magic_rune_magus01/arms',0),(10463,10463,'accessories/wearable_items/_exp06/magic_rune_magus01/chest',0),(10464,10464,'accessories/wearable_items/_exp06/magic_rune_magus01/legs',0),(10465,10465,'accessories/wearable_items/_exp06/magic_rune_magus01/skirt',0),(10466,10466,'_exp04/zones/objects/kurns_tower/kt_elevator_switch_01',0),(10467,10467,'creatures/mounts/horse_frost_unicorn/horse_frost_unicorn',0),(10468,10468,'creatures/pets/baby_dragon_evil_black',0),(10469,10469,'creatures/pets/baby_dragon_evil_dark',0),(10470,10470,'creatures/pets/baby_dragon_evil_red',0),(10471,10471,'creatures/pets/baby_dragon_good_blue',0),(10472,10472,'creatures/pets/baby_dragon_good_green',0),(10473,10473,'creatures/pets/baby_dragon_good_pink',0),(10474,10474,'accessories/wearable_items/_exp06/ornate_magus01/legs',0),(10475,10475,'accessories/wearable_items/cloak/exp06/cloak_kaladim_brew',0),(10476,10476,'accessories/wearable_items/cloak/exp06/cloak_shard_of_love',0),(10477,10477,'accessories/wearable_items/cloak/exp06/cloak_arachnid',0),(10478,10478,'accessories/wearable_items/cloak/exp06/cloak_cityfest_reward',0),(10479,10479,'accessories/wearable_items/_exp06/magic_rune_vanguard01/chest',0),(10480,10480,'accessories/wearable_items/_exp06/magic_rune_vanguard01/feet',0),(10481,10481,'accessories/wearable_items/_exp06/magic_rune_vanguard01/forearms',0),(10482,10482,'accessories/wearable_items/_exp06/magic_rune_vanguard01/hands',0),(10483,10483,'accessories/wearable_items/_exp06/magic_rune_vanguard01/head',0),(10484,10484,'accessories/wearable_items/_exp06/magic_rune_vanguard01/legs',0),(10485,10485,'accessories/wearable_items/_exp06/magic_rune_vanguard01/legs_noskirt',0),(10486,10486,'accessories/wearable_items/_exp06/magic_rune_vanguard01/right',0),(10487,10487,'accessories/wearable_items/_exp06/magic_rune_vanguard01/shoulders',0),(10488,10488,'accessories/wearable_items/_exp06/magic_rune_vanguard01/shoulders_nopauldrons',0),(10489,10489,'accessories/wearable_items/_exp06/magic_rune_vanguard01/skirt',0),(10490,10490,'accessories/wearable_items/cloak/exp06/cloak_dark_rider',0),(10491,10491,'accessories/wearable_items/cloak/exp06/cloak_boots_and_wings',0),(10492,10492,'accessories/wearable_items/_exp06/magic_rune_vanguard_plain/chest',0),(10493,10493,'accessories/wearable_items/_exp06/magic_rune_vanguard_plain/feet',0),(10494,10494,'accessories/wearable_items/_exp06/magic_rune_vanguard_plain/forearms',0),(10495,10495,'accessories/wearable_items/_exp06/magic_rune_vanguard_plain/hands',0),(10496,10496,'accessories/wearable_items/_exp06/magic_rune_vanguard_plain/head',0),(10497,10497,'accessories/wearable_items/_exp06/magic_rune_vanguard_plain/legs',0),(10498,10498,'accessories/wearable_items/_exp06/magic_rune_vanguard_plain/legs_noskirt',0),(10499,10499,'accessories/wearable_items/_exp06/magic_rune_vanguard_plain/right',0),(10500,10500,'accessories/wearable_items/_exp06/magic_rune_vanguard_plain/shoulders',0),(10501,10501,'accessories/wearable_items/_exp06/magic_rune_vanguard_plain/shoulders_nopauldrons',0),(10502,10502,'accessories/wearable_items/_exp06/magic_rune_vanguard_plain/skirt',0),(10503,10503,'creatures/tu/dragonfly_faerie_white',0),(10504,10504,'accessories/wearable_items/cloak/void_cloaks/void_cloak_fighter',0),(10505,10505,'accessories/wearable_items/cloak/void_cloaks/void_cloak_mage',0),(10506,10506,'accessories/wearable_items/cloak/void_cloaks/void_cloak_priest',0),(10507,10507,'accessories/wearable_items/cloak/void_cloaks/void_cloak_range_scout',0),(10508,10508,'accessories/wearable_items/cloak/void_cloaks/void_cloak_scout',0),(10509,10509,'accessories/wearable_items/cloak/void_cloaks/void_cloak_summoner',0),(10510,10510,'creatures/monsters/willowisp_arasi_spirit_bud',0),(10511,10511,'creatures/monsters/willowisp_fae_spirit_bud',0),(10512,10512,'creatures/monsters/willowisp_sparkle_purple',0),(10513,10513,'creatures/monsters/willowisp_sparkle_red',0),(10514,10514,'creatures/monsters/willowisp_clockwork',0),(10515,10515,'creatures/monsters/willowisp_faydark_autumn',0),(10516,10516,'creatures/monsters/willowisp_faydark_spring',0),(10517,10517,'creatures/monsters/willowisp_rose_petal_red',0),(10518,10518,'creatures/monsters/willowisp_rose_petal_yellow',0),(10519,10519,'accessories/wearable_items/_exp06/magic_rune_robe_plain/chest',0),(10520,10520,'accessories/wearable_items/_exp06/magic_rune_robe_plain/head',0),(10521,10521,'accessories/wearable_items/_exp06/magic_rune_robe_plain/hood',0),(10522,10522,'accessories/wearable_items/_exp06/magic_rune_robe_plain/pants',0),(10523,10523,'accessories/wearable_items/_exp06/magic_rune_robe_plain/skirt',0),(10524,10524,'accessories/wearable_items/_exp06/magic_rune_magus_plain/arms',0),(10525,10525,'accessories/wearable_items/_exp06/magic_rune_magus_plain/chest',0),(10526,10526,'accessories/wearable_items/_exp06/magic_rune_magus_plain/legs',0),(10527,10527,'accessories/wearable_items/_exp06/magic_rune_magus_plain/skirt',0),(10528,10528,'creatures/monsters/clockwork_gazer',0),(10529,10529,'creatures/monsters/clockwork_rustysteel_gazer',0),(10530,10530,'creatures/monsters/clockwork_steel_gazer',0),(10531,10531,'creatures/monsters/mummified_gazer',0),(10532,10532,'creatures/monsters/gazer',0),(10533,10533,'accessories/wieldable_items/weapons/great_sword/dragon_katana/dragon_katana_ornate_blue_fx',0),(10534,10534,'accessories/wieldable_items/weapons/great_sword/dragon_katana/dragon_katana_ornate_green_fx',0),(10535,10535,'accessories/wieldable_items/weapons/great_sword/dragon_katana/dragon_katana_ornate_purple_fx',0),(10536,10536,'accessories/wieldable_items/weapons/great_sword/dragon_katana/dragon_katana_ornate_yellow_fx',0),(10537,10537,'accessories/wearable_items/_exp06/magic_rune_leather_plain/chest',0),(10538,10538,'accessories/wearable_items/_exp06/magic_rune_leather_plain/feet',0),(10539,10539,'accessories/wearable_items/_exp06/magic_rune_leather_plain/forearms',0),(10540,10540,'accessories/wearable_items/_exp06/magic_rune_leather_plain/hands',0),(10541,10541,'accessories/wearable_items/_exp06/magic_rune_leather_plain/head',0),(10542,10542,'accessories/wearable_items/_exp06/magic_rune_leather_plain/legs',0),(10543,10543,'accessories/wearable_items/_exp06/magic_rune_leather_plain/legs_noskirt',0),(10544,10544,'accessories/wearable_items/_exp06/magic_rune_leather_plain/shoulders',0),(10545,10545,'accessories/wearable_items/_exp06/magic_rune_leather_plain/skirt',0),(10546,10546,'staticobjects/liveevent/tinkerfest/dpo_sfm_bed_single01',0),(10547,10547,'staticobjects/liveevent/tinkerfest/dpo_sfm_bench_ornate01',0),(10548,10548,'staticobjects/liveevent/tinkerfest/dpo_sfm_bench_ornate01_long',0),(10549,10549,'staticobjects/liveevent/tinkerfest/dpo_sfm_bookcase_wood01',0),(10550,10550,'staticobjects/liveevent/tinkerfest/dpo_sfm_chair_ornate01',0),(10551,10551,'staticobjects/liveevent/tinkerfest/dpo_sfm_chair_ornate02',0),(10552,10552,'staticobjects/liveevent/tinkerfest/dpo_sfm_chest_ornate01',0),(10553,10553,'staticobjects/liveevent/tinkerfest/dpo_sfm_chest_ornate02',0),(10554,10554,'staticobjects/flora/dpo_gf_plant_cattail02',0),(10555,10555,'staticobjects/liveevent/tinkerfest/dpo_inna_landing_governor01',0),(10556,10556,'staticobjects/liveevent/tinkerfest/dpo_orcishwastes_smokestack01',0),(10557,10557,'staticobjects/liveevent/tinkerfest/dpo_sfm_gear_large01_grey',0),(10558,10558,'staticobjects/liveevent/tinkerfest/dpo_sfm_gear_large01_red',0),(10559,10559,'staticobjects/liveevent/tinkerfest/dpo_sfm_gear_large01_red_rotating',0),(10560,10560,'staticobjects/liveevent/tinkerfest/dpo_sfm_gear_large02_ronium_upright',0),(10561,10561,'staticobjects/liveevent/tinkerfest/dpo_sfm_gear_large02_yellow_upright',0),(10562,10562,'accessories/wearable_items/_exp08/dragon_armor/leather2_slate/head',1096),(10563,10563,'accessories/wearable_items/_exp08/dragon_armor/leather2_slate/legs',1096),(10564,10564,'staticobjects/liveevent/tinkerfest/dpo_sfm_gear_medium01_red',0),(10565,10565,'staticobjects/liveevent/tinkerfest/dpo_sfm_gear_medium02_grey',0),(10566,10566,'staticobjects/liveevent/tinkerfest/dpo_sfm_gear_medium02_red',0),(10567,10567,'staticobjects/liveevent/tinkerfest/dpo_sfm_gear_medium02_red_rotating',0),(10568,10568,'staticobjects/liveevent/tinkerfest/dpo_sfm_gear_medium02_yellow',0),(10569,10569,'staticobjects/liveevent/tinkerfest/dpo_sfm_gear_medium02_yellow_rotating',0),(10570,10570,'staticobjects/liveevent/tinkerfest/dpo_sfm_gear_small01_red',0),(10571,10571,'staticobjects/liveevent/tinkerfest/dpo_sfm_gear_small01_red_rotating',0),(10572,10572,'staticobjects/liveevent/tinkerfest/dpo_sfm_gear_small01_yellow',0),(10573,10573,'staticobjects/liveevent/tinkerfest/dpo_sfm_gear_small01_yellow_rotating',0),(10574,10574,'staticobjects/liveevent/tinkerfest/dpo_sfm_gearpiece01_yellow',0),(10575,10575,'staticobjects/liveevent/tinkerfest/dpo_sfm_lights_gnome_lamp01',0),(10576,10576,'staticobjects/liveevent/tinkerfest/dpo_sfm_lights_gnome_lantern01',0),(10577,10577,'staticobjects/liveevent/tinkerfest/dpo_sfm_lightsource_freestanding01',0),(10578,10578,'staticobjects/liveevent/tinkerfest/dpo_sfm_lightsource_freestanding02',0),(10579,10579,'staticobjects/liveevent/tinkerfest/dpo_sfm_lightsource_freestanding03',0),(10580,10580,'staticobjects/liveevent/tinkerfest/dpo_sfm_lightsource_freestanding04',0),(10581,10581,'staticobjects/liveevent/tinkerfest/dpo_sfm_lightsource_lantern01',0),(10582,10582,'staticobjects/liveevent/tinkerfest/dpo_sfm_lightsource_lantern02',0),(10583,10583,'staticobjects/liveevent/tinkerfest/dpo_sfm_spring_upright01_red',0),(10584,10584,'staticobjects/liveevent/tinkerfest/dpo_sfm_lightsource_mine01',0),(10585,10585,'staticobjects/liveevent/tinkerfest/dpo_sfm_lightsource_mine02',0),(10586,10586,'staticobjects/liveevent/tinkerfest/dpo_soleye_gnome_rockpick02',0),(10587,10587,'staticobjects/liveevent/tinkerfest/dpo_soleye_lightpost01',0),(10588,10588,'staticobjects/liveevent/tinkerfest/dpo_soleye_standlamp01',0),(10589,10589,'staticobjects/liveevent/tinkerfest/dpo_soleye_walllamp01',0),(10590,10590,'staticobjects/scrolls/dpo_gf_scroll_single01',0),(10591,10591,'staticobjects/scrolls/dpo_gf_scrolls_parchmentcombo01',0),(10592,10592,'staticobjects/liveevent/tinkerfest/dpo_sfm_table_wood01',0),(10593,10593,'staticobjects/liveevent/tinkerfest/dpo_sfm_table_woodround01',0),(10594,10594,'staticobjects/liveevent/tinkerfest/dpo_sfm_gnome_mug01',0),(10595,10595,'accessories/wieldable_items/weapons/exp06/2h_sword/exp06_2h_axe_jagged_frostrune',0),(10596,10596,'accessories/wieldable_items/soga_weapons/unique4/demon_eye_red_purple',0),(10597,10597,'accessories/wearable_items/cloak/exp06/cloak_magic_rune',0),(10598,10598,'accessories/wearable_items/cloak/exp06/cloak_frostrune',0),(10599,10599,'accessories/wearable_items/_exp06/dwarf_armor_vanguard/chest',0),(10600,10600,'accessories/wearable_items/_exp06/dwarf_armor_vanguard/chest_dwarf_vanguard_plate',0),(10601,10601,'accessories/wearable_items/_exp06/dwarf_armor_vanguard/dwarf_armor_vanguard_pauldron_left',0),(10602,10602,'accessories/wearable_items/_exp06/dwarf_armor_vanguard/dwarf_armor_vanguard_pauldron_right',0),(10603,10603,'accessories/wearable_items/_exp06/dwarf_armor_vanguard/dwarf_vanguard_chest_plate',0),(10604,10604,'accessories/wearable_items/_exp06/dwarf_armor_vanguard/feet',0),(10605,10605,'accessories/wearable_items/_exp06/dwarf_armor_vanguard/forearms',0),(10606,10606,'accessories/wearable_items/_exp06/dwarf_armor_vanguard/hands',0),(10607,10607,'accessories/wearable_items/_exp06/dwarf_armor_vanguard/head',0),(10608,10608,'accessories/wearable_items/_exp06/dwarf_armor_vanguard/legs',0),(10609,10609,'accessories/wearable_items/_exp06/dwarf_armor_vanguard/legs_noskirt',0),(10610,10610,'accessories/wearable_items/_exp06/dwarf_armor_vanguard/right',0),(10611,10611,'accessories/wearable_items/_exp06/dwarf_armor_vanguard/shoulders',0),(10612,10612,'accessories/wearable_items/_exp06/dwarf_armor_vanguard/shoulders_dwarf_armor_vanguard',0),(10613,10613,'accessories/wearable_items/_exp06/dwarf_armor_vanguard/shoulders_nopauldrons',0),(10614,10614,'accessories/wearable_items/_exp06/dwarf_armor_vanguard/skirt',0),(10615,10615,'accessories/wearable_items/_exp08/dragon_armor/leather2_slate/legs_noskirt',1096),(10616,10616,'accessories/wearable_items/_exp08/dragon_armor/leather2_slate/shoulders',1096),(10617,10617,'staticobjects/liveevent/cityfestivals/dpo_fprt_door_expensive01',0),(10618,10618,'staticobjects/liveevent/cityfestivals/dpo_fprt_door_fancy01',0),(10619,10619,'accessories/wearable_items/_exp08/dragon_armor/leather2_slate/shoulders_epic',1096),(10620,10620,'accessories/wearable_items/_exp08/dragon_armor/robe_blue/skirt',1096),(10621,10621,'accessories/wearable_items/_exp08/dragon_armor/robe_blue/chest',1096),(10622,10622,'staticobjects/liveevent/tinkerfest/dpo_gnome_mech03_gears_01',0),(10623,10623,'staticobjects/liveevent/tinkerfest/dpo_hum_genericmarker003',0),(10624,10624,'staticobjects/liveevent/tinkerfest/dpo_hum_genericmarker003_wall',0),(10625,10625,'staticobjects/liveevent/tinkerfest/dpo_qey_cog_flat',0),(10626,10626,'staticobjects/liveevent/tinkerfest/dpo_sfm_gear_medium01_red_rotating',0),(10627,10627,'staticobjects/liveevent/tinkerfest/dpo_sfm_gear_medium01_red_rotating',0),(10628,10628,'staticobjects/liveevent/tinkerfest/dpo_sfm_gear_medium02_grey_rotating',0),(10629,10629,'staticobjects/liveevent/tinkerfest/dpo_sfm_table_wood01',0),(10630,10630,'staticobjects/liveevent/tinkerfest/dpo_soleye_rotating_sprocket01',0),(10631,10631,'staticobjects/liveevent/tinkerfest/dpo_soleye_rotating_sprocket02',0),(10632,10632,'staticobjects/liveevent/tinkerfest/dpo_soleye_sprocket01',0),(10633,10633,'staticobjects/liveevent/tinkerfest/dpo_soleye_sprocket02',0),(10634,10634,'staticobjects/liveevent/tinkerfest/eig_tinkerfest_sparkly',0),(10635,10635,'staticobjects/plants/houseitem_feerrott_plant_fern1',0),(10636,10636,'staticobjects/liveevent/tinkerfest/gnome_cog_cup',0),(10637,10637,'accessories/wearable_items/_exp06/raven_armor_chain/chest',0),(10638,10638,'accessories/wearable_items/_exp06/raven_armor_chain/feet',0),(10639,10639,'accessories/wearable_items/_exp06/raven_armor_chain/forearms',0),(10640,10640,'accessories/wearable_items/_exp06/raven_armor_chain/hands',0),(10641,10641,'accessories/wearable_items/_exp06/raven_armor_chain/head',0),(10642,10642,'accessories/wearable_items/_exp06/raven_armor_chain/head_raven_armor_chain',0),(10643,10643,'accessories/wearable_items/_exp06/raven_armor_chain/legs',0),(10644,10644,'accessories/wearable_items/_exp06/raven_armor_chain/legs_noskirt',0),(10645,10645,'accessories/wearable_items/_exp06/raven_armor_chain/raven_shoulder_left',0),(10646,10646,'accessories/wearable_items/_exp06/raven_armor_chain/raven_shoulder_right',0),(10647,10647,'accessories/wearable_items/_exp06/raven_armor_chain/shoulders',0),(10648,10648,'accessories/wearable_items/_exp06/raven_armor_chain/shoulders_raven_chain',0),(10649,10649,'accessories/wearable_items/_exp06/raven_armor_chain/skirt',0),(10650,10650,'accessories/wearable_items/_exp06/raven_armor_leather/chest',0),(10651,10651,'accessories/wearable_items/_exp06/raven_armor_leather/feet',0),(10652,10652,'accessories/wearable_items/_exp06/raven_armor_leather/forearms',0),(10653,10653,'accessories/wearable_items/_exp06/raven_armor_leather/hands',0),(10654,10654,'accessories/wearable_items/_exp06/raven_armor_leather/head',0),(10655,10655,'accessories/wearable_items/_exp06/raven_armor_leather/head_raven_armor_leather',0),(10656,10656,'accessories/wearable_items/_exp06/raven_armor_leather/legs',0),(10657,10657,'accessories/wearable_items/_exp06/raven_armor_leather/legs_noskirt',0),(10658,10658,'accessories/wearable_items/_exp06/raven_armor_leather/raven_shoulder_left',0),(10659,10659,'accessories/wearable_items/_exp06/raven_armor_leather/raven_shoulder_right',0),(10660,10660,'accessories/wearable_items/_exp06/raven_armor_leather/shoulders',0),(10661,10661,'accessories/wearable_items/_exp06/raven_armor_leather/shoulders_raven_leather',0),(10662,10662,'accessories/wearable_items/_exp06/raven_armor_leather/skirt',0),(10663,10663,'accessories/wearable_items/_exp06/raven_robe/chest',0),(10664,10664,'accessories/wearable_items/_exp06/raven_robe/head',0),(10665,10665,'accessories/wearable_items/_exp06/raven_robe/pants',0),(10666,10666,'accessories/wearable_items/_exp06/raven_robe/skirt',0),(10667,10667,'accessories/wearable_items/cloak/exp06/cloak_kruzz_fur',0),(10668,10668,'creatures/monsters/mantaray_frost',0),(10669,10669,'accessories/wearable_items/_exp08/dragon_armor/robe_blue/chest_epic',1096),(10670,10670,'staticobjects/liveevent/cityfestivals/dpo_gf_kel_int_divider_wall01_blackmarble',0),(10671,10671,'staticobjects/liveevent/cityfestivals/dpo_gf_kel_int_divider_wall01_bluemarble',0),(10672,10672,'accessories/wearable_items/_exp08/dragon_armor/robe_blue/feet',1096),(10673,10673,'staticobjects/liveevent/cityfestivals/dpo_gf_kel_int_divider_wall01_redmarble',0),(10674,10674,'staticobjects/liveevent/cityfestivals/dpo_gf_kel_int_divider_wall01_whitemarble',0),(10675,10675,'staticobjects/liveevent/tinkerfest/dpo_gf_kel_int_divider_wall01_goldpatternedmetal',0),(10676,10676,'staticobjects/liveevent/tinkerfest/dpo_gf_kel_int_divider_wall01_patternedmetal',0),(10677,10677,'staticobjects/dividers/dpo_gf_kel_int_divider_wall01_altarwood',0),(10678,10678,'staticobjects/dividers/dpo_gf_kel_int_divider_wall01_ashwood',0),(10679,10679,'staticobjects/dividers/dpo_gf_kel_int_divider_wall01_blondwood',0),(10680,10680,'staticobjects/dividers/dpo_gf_kel_int_divider_wall01_brownwood',0),(10681,10681,'staticobjects/dividers/dpo_gf_kel_int_divider_wall01_fairy_woodbrownmoss',0),(10682,10682,'staticobjects/dividers/dpo_gf_kel_int_divider_wall01_marrplanks',0),(10683,10683,'staticobjects/dividers/dpo_gf_kel_int_divider_wall01_wavywood',0),(10684,10684,'staticobjects/dividers/dpo_gf_kel_int_divider_wall01_weatheredplanks',0),(10685,10685,'creatures/monsters/lion_ghost_red',0),(10686,10686,'staticobjects/dividers/dpo_gf_kel_int_divider_wall01_metalwood',0),(10687,10687,'staticobjects/dividers/dpo_gf_kel_int_divider_wall01_redwood',0),(10688,10688,'staticobjects/dividers/dpo_gf_kel_int_divider_wall01_rosewood',0),(10689,10689,'staticobjects/dividers/dpo_gf_kel_int_divider_wall01_sandalwood',0),(10690,10690,'staticobjects/dividers/dpo_gf_kel_int_divider_wall01_tablenoplanks',0),(10691,10691,'staticobjects/dividers/dpo_gf_kel_int_divider_wall01_tableplanks',0),(10692,10692,'staticobjects/plants/houseitem_feerrott_plant_bigleaf',0),(10693,10693,'accessories/wearable_items/cloak/exp06/cloak_roadyle_terethe_yol',0),(10694,10694,'ec/pc/human/human_male_headless',0),(10695,10695,'creatures/monsters/willowisp_seaweed',0),(10696,10696,'_exp03/characters/monsters/golem_shambling_mound_pet',0),(10697,10697,'ec/pc/human/human_male_air_elemental',0),(10698,10698,'staticobjects/books_user/userbook_common_blackred',0),(10699,10699,'staticobjects/books_user/userbook_common_blacksilverblue',0),(10700,10700,'staticobjects/books_user/userbook_common_browngold',0),(10701,10701,'staticobjects/books_user/userbook_common_goldblue',0),(10702,10702,'staticobjects/books_user/userbook_common_goldwhitepurple',0),(10703,10703,'staticobjects/books_user/userbook_common_greenteal',0),(10704,10704,'staticobjects/books_user/userbook_common_purpleblack',0),(10705,10705,'staticobjects/books_user/userbook_common_purplegreen',0),(10706,10706,'staticobjects/books_user/userbook_common_redgold',0),(10707,10707,'staticobjects/books_user/userbook_common_whitesilverblue',0),(10708,10708,'staticobjects/books_user/userbook_fancy_blackgold01',0),(10709,10709,'staticobjects/books_user/userbook_fancy_blackgreen01',0),(10710,10710,'staticobjects/books_user/userbook_fancy_blackred01',0),(10711,10711,'staticobjects/books_user/userbook_fancy_bluered01',0),(10712,10712,'staticobjects/books_user/userbook_fancy_goldbrown01',0),(10713,10713,'staticobjects/books_user/userbook_fancy_green01',0),(10714,10714,'staticobjects/books_user/userbook_fancy_purple01',0),(10715,10715,'staticobjects/books_user/userbook_fancy_red01',0),(10716,10716,'staticobjects/books_user/userbook_fancy_silverblue01',0),(10717,10717,'staticobjects/books_user/userbook_fancy_silverred01',0),(10718,10718,'staticobjects/books_user/userbook_fancy_whiteblue01',0),(10719,10719,'staticobjects/books_user/userbook_fancy_whitegold01',0),(10720,10720,'accessories/wearable_items/heavy_cloth/new_halas/chest',0),(10721,10721,'accessories/wearable_items/heavy_cloth/new_halas/feet',0),(10722,10722,'accessories/wearable_items/heavy_cloth/new_halas/forearms',0),(10723,10723,'accessories/wearable_items/heavy_cloth/new_halas/hands',0),(10724,10724,'accessories/wearable_items/heavy_cloth/new_halas/legs',0),(10725,10725,'accessories/wearable_items/heavy_cloth/new_halas/shoulders',0),(10726,10726,'staticobjects/benches/dpo_blue_bench_long02_wcushion',0),(10727,10727,'staticobjects/benches/dpo_blue_bench_short_wcushion01',0),(10728,10728,'staticobjects/chairs/dpo_blue_chair_dining01',0),(10729,10729,'staticobjects/chairs/dpo_blue_chair_dining02',0),(10730,10730,'staticobjects/chairs/dpo_blue_chair_head_dining01',0),(10731,10731,'staticobjects/chairs/dpo_blue_couch01',0),(10732,10732,'staticobjects/chairs/dpo_blue_couch02',0),(10733,10733,'staticobjects/chairs/dpo_blue_stool_round01',0),(10734,10734,'staticobjects/pillars/dpo_column001_blackmarble',0),(10735,10735,'staticobjects/pillars/dpo_column001_bluemarble',0),(10736,10736,'staticobjects/pillars/dpo_column001_redmarble',0),(10737,10737,'staticobjects/pillars/dpo_column001_whitemarble',0),(10738,10738,'staticobjects/tables/dpo_blue_gaming_cardtable01_empty',0),(10739,10739,'staticobjects/tables/dpo_blue_gaming_cardtable02',0),(10740,10740,'staticobjects/tables/dpo_blue_table_bedside01',0),(10741,10741,'staticobjects/tables/dpo_blue_table_coffee01',0),(10742,10742,'staticobjects/tables/dpo_blue_table_long01',0),(10743,10743,'staticobjects/tcg/tcg_painting_servant',0),(10744,10744,'staticobjects/tcg/tcg_painting_fangshield',0),(10745,10745,'staticobjects/tcg/tcg_painting_favor',0),(10746,10746,'staticobjects/tcg/tcg_painting_paradox',0),(10747,10747,'staticobjects/tcg/tcg_painting_sporali',0),(10748,10748,'staticobjects/tcg/tcg_painting_faith',0),(10749,10749,'staticobjects/tcg/tcg_painting_malevolence',0),(10750,10750,'staticobjects/tcg/tcg_painting_engineer',0),(10751,10751,'staticobjects/tcg/tcg_painting_defiler',0),(10752,10752,'staticobjects/liveevent/guides/guide_diamondring',0),(10753,10753,'_exp06/characters/tool_users/giant_frost_kurn_tower/giant_frost_chubby',0),(10754,10754,'_exp06/characters/tool_users/giant_frost_kurn_tower/giant_frost_muscular',0),(10755,10755,'accessories/npc_wearables/giant_frost_kurn_tower/beards/beard_01',0),(10756,10756,'accessories/npc_wearables/giant_frost_kurn_tower/beards/beard_02',0),(10757,10757,'accessories/npc_wearables/giant_frost_kurn_tower/beards/beard_03_mustache',0),(10758,10758,'accessories/npc_wearables/giant_frost_kurn_tower/beards/beard_04_lamb_chops',0),(10759,10759,'accessories/npc_wearables/giant_frost_kurn_tower/glowing_armor_pieces/chest_armor_heavy',0),(10760,10760,'accessories/npc_wearables/giant_frost_kurn_tower/glowing_armor_pieces/chest_armor_heavy_nopauldrons',0),(10761,10761,'accessories/npc_wearables/giant_frost_kurn_tower/glowing_armor_pieces/chest_armor_medium',0),(10762,10762,'accessories/npc_wearables/giant_frost_kurn_tower/glowing_armor_pieces/chest_armor_medium_nopauldrons',0),(10763,10763,'accessories/npc_wearables/giant_frost_kurn_tower/glowing_armor_pieces/chest_armor_medium_pauldronsonly',0),(10764,10764,'accessories/npc_wearables/giant_frost_kurn_tower/glowing_armor_pieces/feet_armor_heavy',0),(10765,10765,'accessories/npc_wearables/giant_frost_kurn_tower/glowing_armor_pieces/feet_armor_medium',0),(10766,10766,'accessories/npc_wearables/giant_frost_kurn_tower/glowing_armor_pieces/hands_armor_heavy',0),(10767,10767,'accessories/npc_wearables/giant_frost_kurn_tower/glowing_armor_pieces/hands_armor_light',0),(10768,10768,'accessories/npc_wearables/giant_frost_kurn_tower/glowing_armor_pieces/hands_armor_medium',0),(10769,10769,'accessories/npc_wearables/giant_frost_kurn_tower/glowing_armor_pieces/head_armor_heavy',0),(10770,10770,'accessories/npc_wearables/giant_frost_kurn_tower/glowing_armor_pieces/head_armor_horn_crown',0),(10771,10771,'accessories/npc_wearables/giant_frost_kurn_tower/glowing_armor_pieces/head_armor_medium',0),(10772,10772,'accessories/npc_wearables/giant_frost_kurn_tower/glowing_armor_pieces/legs_armor_heavy',0),(10773,10773,'accessories/npc_wearables/giant_frost_kurn_tower/glowing_armor_pieces/legs_armor_medium',0),(10774,10774,'accessories/npc_wearables/giant_frost_kurn_tower/glowing_armor_pieces/shoulders_armor_heavy',0),(10775,10775,'accessories/npc_wearables/giant_frost_kurn_tower/glowing_armor_pieces/shoulders_armor_medium',0),(10776,10776,'accessories/npc_wearables/giant_frost_kurn_tower/hair/hair_01_einstien',0),(10777,10777,'accessories/npc_wearables/giant_frost_kurn_tower/hair/hair_02_full',0),(10778,10778,'accessories/npc_wearables/giant_frost_kurn_tower/hair/hair_03_pony_tail',0),(10779,10779,'accessories/npc_wearables/giant_frost_kurn_tower/velious_armor_peices/chest_armor_light',0),(10780,10780,'accessories/npc_wearables/giant_frost_kurn_tower/velious_armor_peices/feet_armor_light',0),(10781,10781,'accessories/npc_wearables/giant_frost_kurn_tower/velious_armor_peices/hands_armor_light',0),(10782,10782,'accessories/npc_wearables/giant_frost_kurn_tower/velious_armor_peices/head_armor_light',0),(10783,10783,'accessories/npc_wearables/giant_frost_kurn_tower/velious_armor_peices/legs_armor_light',0),(10784,10784,'creatures/monsters/roper_moss',0),(10785,10785,'accessories/wearable_items/_exp06/demonic_chain/chest',0),(10786,10786,'accessories/wearable_items/_exp06/demonic_chain/feet',0),(10787,10787,'accessories/wearable_items/_exp06/demonic_chain/forearms',0),(10788,10788,'accessories/wearable_items/_exp06/demonic_chain/hands',0),(10789,10789,'accessories/wearable_items/_exp06/demonic_chain/head',0),(10790,10790,'accessories/wearable_items/_exp06/demonic_chain/legs',0),(10791,10791,'accessories/wearable_items/_exp06/demonic_chain/shoulders',0),(10792,10792,'accessories/wearable_items/_exp06/demonic_chain/skirt',0),(10793,10793,'accessories/wieldable_items/shields/tinkerfest_shield/tinkerfest_shield',0),(10794,10794,'accessories/wieldable_items/weapons/fist/fist_of_lightining',0),(10795,10795,'accessories/wieldable_items/weapons/fist/fist_of_the_void',0),(10796,10796,'accessories/wieldable_items/weapons/fist/monk_1h_glow_cold',0),(10797,10797,'accessories/wieldable_items/weapons/fist/monk_1h_glow_divine',0),(10798,10798,'accessories/wieldable_items/weapons/fist/monk_1h_glow_poison',0),(10799,10799,'accessories/wieldable_items/weapons/fist/monk_1h_glow_prismatic',0),(10800,10800,'accessories/wieldable_items/weapons/fist/qeynos_wraps/qeynos_wraps_heat',0),(10801,10801,'accessories/wieldable_items/weapons/fist/qeynos_wraps/qeynos_wraps_magic',0),(10802,10802,'accessories/wieldable_items/weapons/fist/qeynos_wraps/qeynos_wraps_poison',0),(10803,10803,'accessories/wieldable_items/weapons/fist/qeynos_wraps/qeynos_wraps_prismatic',0),(10804,10804,'accessories/wieldable_items/weapons/exp04/1h_pierce/exp04_1hp_dragonhilt_dagger_ice',0),(10805,10805,'accessories/wieldable_items/weapons/exp04/1h_crush/exp04_1hc_crystal_wand_ice',0),(10806,10806,'_exp06/zones/dun_eru_research/dpo_eru_cable_plugs',0),(10807,10807,'accessories/wieldable_items/weapons/exp04/fist/exp04_fist_ornate_knuckledusters_ice',0),(10808,10808,'accessories/wieldable_items/weapons/hammer/tinkerfest_wrench/tinkerfest_wrench',0),(10809,10809,'creatures/monsters/shambling_mound',0),(10810,10810,'creatures/monsters/scarecrow_new',0),(10811,10811,'creatures/monsters/wickerman',0),(10812,10812,'creatures/monsters/roper',0),(10813,10813,'creatures/monsters/animated_bonepile',0),(10814,10814,'creatures/monsters/bull_stone',0),(10815,10815,'creatures/monsters/bull_standard',0),(10816,10816,'creatures/monsters/bull_skeleton',0),(10817,10817,'creatures/monsters/catoplebas_new',0),(10818,10818,'creatures/monsters/catoplebas_skeletal',0),(10819,10819,'creatures/monsters/chimera',0),(10820,10820,'creatures/monsters/chimera_skeletal',0),(10821,10821,'accessories/wearable_items/_exp06/magic_rune_chain_plain/chest',0),(10822,10822,'accessories/wearable_items/_exp06/magic_rune_chain_plain/feet',0),(10823,10823,'accessories/wearable_items/_exp06/magic_rune_chain_plain/forearms',0),(10824,10824,'accessories/wearable_items/_exp06/magic_rune_chain_plain/hands',0),(10825,10825,'accessories/wearable_items/_exp06/magic_rune_chain_plain/head',0),(10826,10826,'accessories/wearable_items/_exp06/magic_rune_chain_plain/legs',0),(10827,10827,'accessories/wearable_items/_exp06/magic_rune_chain_plain/legs_noskirt',0),(10828,10828,'accessories/wearable_items/_exp06/magic_rune_chain_plain/shoulders',0),(10829,10829,'accessories/wearable_items/_exp06/magic_rune_chain_plain/skirt',0),(10830,10830,'_exp06/characters/tool_users/giant_frost_kurn_tower/giant_frost_kraytok',0),(10831,10831,'creatures/monsters/centipede_water',0),(10832,10832,'creatures/monsters/roper_beige_marble',0),(10833,10833,'creatures/monsters/roper_vine',0),(10834,10834,'accessories/wieldable_items/weapons/great_sword/dragon_katana/evileye_katana',0),(10835,10835,'projectiles/spell_fruit',0),(10836,10836,'accessories/wearable_items/profesion_hats/priest_helm/heavy_plate_plain02/head',0),(10837,10837,'creatures/monsters/willowisp_bubble_leaf',0),(10838,10838,'accessories/wearable_items/_exp06/plain_robe01_evil/skirt',0),(10839,10839,'accessories/wearable_items/_exp06/plain_robe01_evil/chest',0),(10840,10840,'accessories/wearable_items/_exp06/plain_robe01_evil/head',0),(10841,10841,'accessories/wearable_items/_exp06/plain_robe01_evil/hood',0),(10842,10842,'accessories/wearable_items/_exp06/plain_robe01_evil/pants',0),(10843,10843,'accessories/wearable_items/_exp06/frostrune_armor_robe/chest_left_pauldron_only',0),(10844,10844,'accessories/wearable_items/_exp06/black_rivet_vanguard/skirt',0),(10845,10845,'accessories/wearable_items/_exp06/black_rivet_vanguard/chest',0),(10846,10846,'accessories/wearable_items/_exp06/black_rivet_vanguard/feet',0),(10847,10847,'accessories/wearable_items/_exp06/black_rivet_vanguard/forearms',0),(10848,10848,'accessories/wearable_items/_exp06/black_rivet_vanguard/hands',0),(10849,10849,'accessories/wearable_items/_exp06/black_rivet_vanguard/head',0),(10850,10850,'accessories/wearable_items/_exp06/black_rivet_vanguard/legs',0),(10851,10851,'accessories/wearable_items/_exp06/black_rivet_vanguard/legs_noskirt',0),(10852,10852,'accessories/wearable_items/_exp06/black_rivet_vanguard/right',0),(10853,10853,'accessories/wearable_items/_exp06/black_rivet_vanguard/shoulders',0),(10854,10854,'accessories/wearable_items/_exp06/black_rivet_vanguard/shoulders_nopauldrons',0),(10855,10855,'accessories/wearable_items/_exp06/plain_robe01/skirt',0),(10856,10856,'accessories/wearable_items/_exp06/plain_robe01/chest',0),(10857,10857,'accessories/wearable_items/_exp06/plain_robe01/head',0),(10858,10858,'accessories/wearable_items/_exp06/plain_robe01/hood',0),(10859,10859,'accessories/wearable_items/_exp06/plain_robe01/pants',0),(10860,10860,'accessories/wearable_items/heavy_cloth/new_halas/new_halas_helm',0),(10861,10861,'accessories/wearable_items/heavy_cloth/new_halas/new_halas_pauldron_left',0),(10862,10862,'accessories/wearable_items/heavy_cloth/new_halas/new_halas_pauldron_right',0),(10863,10863,'accessories/wearable_items/heavy_cloth/new_halas/new_halas_pauldrons',0),(10864,10864,'accessories/wearable_items/heavy_cloth/new_halas/shoulders_no_pauldrons',0),(10865,10865,'staticobjects/globes/quest_iksar_snowglobe',0),(10866,10866,'accessories/wearable_items/cloak/exp06/cloak_ward_of_the_elements_spirit',0),(10867,10867,'accessories/wearable_items/cloak/exp06/cloak_ward_of_the_elements_daggers',0),(10868,10868,'accessories/wearable_items/cloak/exp06/cloak_ward_of_the_elements_magma',0),(10869,10869,'accessories/wearable_items/cloak/exp06/cloak_ward_of_the_elements_nature',0),(10870,10870,'accessories/wieldable_items/weapons/sword/tinkerfest_sprocketspinner/tinkerfest_sprocketspinner',0),(10871,10871,'_exp06/characters/tool_users/roekillik_female/roekillik_female',0),(10872,10872,'staticobjects/bookcases/dpo_eu_bookend02',0),(10873,10873,'staticobjects/nursery/dpo_crib_rattle',0),(10874,10874,'_exp06/characters/tool_users/roekillik_male/roekillik_male',0),(10875,10875,'accessories/wearable_items/_exp06/vanguard_iceknight_black/skirt',0),(10876,10876,'accessories/wearable_items/_exp06/vanguard_iceknight_black/chest',0),(10877,10877,'accessories/wearable_items/_exp06/vanguard_iceknight_black/feet',0),(10878,10878,'accessories/wearable_items/_exp06/vanguard_iceknight_black/forearms',0),(10879,10879,'accessories/wearable_items/_exp06/vanguard_iceknight_black/hands',0),(10880,10880,'accessories/wearable_items/_exp06/vanguard_iceknight_black/head',0),(10881,10881,'accessories/wearable_items/_exp06/vanguard_iceknight_black/legs',0),(10882,10882,'accessories/wearable_items/_exp06/vanguard_iceknight_black/legs_noskirt',0),(10883,10883,'accessories/wearable_items/_exp06/vanguard_iceknight_black/right',0),(10884,10884,'accessories/wearable_items/_exp06/vanguard_iceknight_black/shoulders',0),(10885,10885,'accessories/wearable_items/_exp06/vanguard_iceknight_black/shoulders_nopauldrons',0),(10886,10886,'accessories/wearable_items/_exp06/nature_leather/skirt',0),(10887,10887,'accessories/wearable_items/_exp06/nature_leather/chest',0),(10888,10888,'accessories/wearable_items/_exp06/nature_leather/feet',0),(10889,10889,'accessories/wearable_items/_exp06/nature_leather/forearms',0),(10890,10890,'accessories/wearable_items/_exp06/nature_leather/hands',0),(10891,10891,'accessories/wearable_items/_exp06/nature_leather/head',0),(10892,10892,'accessories/wearable_items/_exp06/nature_leather/legs',0),(10893,10893,'accessories/wearable_items/_exp06/nature_leather/legs_noskirt',0),(10894,10894,'accessories/wearable_items/_exp06/nature_leather/shoulders',0),(10895,10895,'accessories/wearable_items/_exp06/frostrune_armor_robe/chest_left_pauldron_only',0),(10896,10896,'staticobjects/soe_wallet/cheery_coffee_table_dpo',0),(10897,10897,'staticobjects/soe_wallet/cheery_couch_pillows_dpo',0),(10898,10898,'staticobjects/soe_wallet/cheery_end_table_dpo',0),(10899,10899,'staticobjects/soe_wallet/cheery_loveseat_pillows_dpo',0),(10900,10900,'staticobjects/soe_wallet/cheery_office_bookshelf_small_dpo',0),(10901,10901,'staticobjects/soe_wallet/cheery_office_bookshelf_tall_dpo',0),(10902,10902,'staticobjects/soe_wallet/cheery_office_chair_dpo',0),(10903,10903,'staticobjects/soe_wallet/cheery_office_chest_lid_dpo',0),(10904,10904,'staticobjects/soe_wallet/cheery_office_desk_dpo',0),(10905,10905,'staticobjects/soe_wallet/cheery_vanity_drawers_dpo',0),(10906,10906,'staticobjects/soe_wallet/cheery_vanity_mirror_dpo',0),(10907,10907,'staticobjects/soe_wallet/cheery_vanity_stool_dpo',0),(10908,10908,'staticobjects/soe_wallet/cheery_vanity_table_mirror_dpo',0),(10909,10909,'staticobjects/soe_wallet/cheery_vanity_washing_table_dpo',0),(10910,10910,'accessories/wearable_items/_exp06/demonic_vanguard/skirt',0),(10911,10911,'accessories/wearable_items/_exp06/demonic_vanguard/chest',0),(10912,10912,'accessories/wearable_items/_exp06/demonic_vanguard/feet',0),(10913,10913,'accessories/wearable_items/_exp06/demonic_vanguard/forearms',0),(10914,10914,'accessories/wearable_items/_exp06/demonic_vanguard/hands',0),(10915,10915,'accessories/wearable_items/_exp06/demonic_vanguard/head',0),(10916,10916,'accessories/wearable_items/_exp06/demonic_vanguard/legs',0),(10917,10917,'accessories/wearable_items/_exp06/demonic_vanguard/legs_noskirt',0),(10918,10918,'accessories/wearable_items/_exp06/demonic_vanguard/right',0),(10919,10919,'accessories/wearable_items/_exp06/demonic_vanguard/shoulders',0),(10920,10920,'accessories/wearable_items/_exp06/demonic_vanguard/shoulders_nopauldrons',0),(10921,10921,'accessories/wearable_items/_exp06/priest_armor/chest',0),(10922,10922,'accessories/wearable_items/_exp06/priest_armor/feet',0),(10923,10923,'accessories/wearable_items/_exp06/priest_armor/forearms',0),(10924,10924,'accessories/wearable_items/_exp06/priest_armor/hands',0),(10925,10925,'accessories/wearable_items/_exp06/priest_armor/head',0),(10926,10926,'accessories/wearable_items/_exp06/priest_armor/legs',0),(10927,10927,'accessories/wearable_items/_exp06/priest_armor/legs_noskirt',0),(10928,10928,'accessories/wearable_items/_exp06/priest_armor/priest_flared_left',0),(10929,10929,'accessories/wearable_items/_exp06/priest_armor/priest_flared_right',0),(10930,10930,'accessories/wearable_items/_exp06/priest_armor/right',0),(10931,10931,'accessories/wearable_items/_exp06/priest_armor/shoulders',0),(10932,10932,'accessories/wearable_items/_exp06/priest_armor/shoulders_epic',0),(10933,10933,'accessories/wearable_items/_exp06/priest_armor/shoulders_nopauldrons',0),(10934,10934,'accessories/wearable_items/_exp06/priest_armor/skirt',0),(10935,10935,'accessories/wearable_items/leather/plain/plain_banded/skirt',0),(10936,10936,'accessories/wearable_items/leather/plain/plain_banded/chest',0),(10937,10937,'accessories/wearable_items/leather/plain/plain_banded/feet',0),(10938,10938,'accessories/wearable_items/leather/plain/plain_banded/forearms',0),(10939,10939,'accessories/wearable_items/leather/plain/plain_banded/hands',0),(10940,10940,'accessories/wearable_items/leather/plain/plain_banded/head',0),(10941,10941,'accessories/wearable_items/leather/plain/plain_banded/legs',0),(10942,10942,'accessories/wearable_items/leather/plain/plain_banded/legs_noskirt',0),(10943,10943,'accessories/wearable_items/leather/plain/plain_banded/pauldron_plain_banded_left',0),(10944,10944,'accessories/wearable_items/leather/plain/plain_banded/pauldron_plain_banded_right',0),(10945,10945,'accessories/wearable_items/leather/plain/plain_banded/shoulders',0),(10946,10946,'accessories/wearable_items/leather/plain/plain_banded/shoulders_pauldrons_plain',0),(10947,10947,'_exp04/monsters/cockatrice_golden',0),(10948,10948,'accessories/wearable_items/_exp06/assassin_leather/skirt',0),(10949,10949,'accessories/wearable_items/_exp06/assassin_leather/chest',0),(10950,10950,'accessories/wearable_items/_exp06/assassin_leather/feet',0),(10951,10951,'accessories/wearable_items/_exp06/assassin_leather/forearms',0),(10952,10952,'accessories/wearable_items/_exp06/assassin_leather/hands',0),(10953,10953,'accessories/wearable_items/_exp06/assassin_leather/head',0),(10954,10954,'accessories/wearable_items/_exp06/assassin_leather/legs',0),(10955,10955,'accessories/wearable_items/_exp06/assassin_leather/legs_noskirt',0),(10956,10956,'accessories/wearable_items/_exp06/assassin_leather/shoulders',0),(10957,10957,'accessories/wearable_items/_exp06/conjurer_robe/skirt',0),(10958,10958,'accessories/wearable_items/_exp06/conjurer_robe/chest',0),(10959,10959,'accessories/wearable_items/_exp06/conjurer_robe/head',0),(10960,10960,'accessories/wearable_items/_exp06/conjurer_robe/pants',0),(10961,10961,'creatures/monsters/stagg_ice',0),(10962,10962,'creatures/monsters/turtle_ice',0),(10963,10963,'creatures/monsters/badger_ice',0),(10964,10964,'creatures/monsters/boar_ice',0),(10965,10965,'creatures/monsters/crab_ice',0),(10966,10966,'accessories/wearable_items/_exp06/demonic_chain/demonic_pauldron_left',0),(10967,10967,'accessories/wearable_items/_exp06/demonic_chain/demonic_pauldron_right',0),(10968,10968,'accessories/wearable_items/_exp06/demonic_chain/head_mask',0),(10969,10969,'accessories/wearable_items/_exp06/demonic_chain/legs_noskirt',0),(10970,10970,'accessories/wearable_items/_exp06/demonic_chain/shoulders_pauldrons',0),(10971,10971,'staticobjects/containers/dpo_fon_ruins_phylactery01',0),(10972,10972,'staticobjects/plants/dpo_fon_plant_cattail02',0),(10973,10973,'staticobjects/crystals/dpo_fon_crystals_formation03',0),(10974,10974,'staticobjects/crystals/dpo_fon_crystals_formation01',0),(10975,10975,'staticobjects/crystals/dpo_fon_crystals_formation02',0),(10976,10976,'soga_appearances/ec/npc/soga_dragon_turtle_northern',0),(10977,10977,'accessories/wearable_items/cloak/exp06/cloak_repair',0),(10978,10978,'creatures/mounts/flying_disc/flying_disc_evil_01',0),(10979,10979,'staticobjects/racks/dpo_seb_weaponrack_floor02',0),(10980,10980,'staticobjects/barrels/dpo_fon_gu53_barrel01',0),(10981,10981,'staticobjects/crates/dpo_fen_gu53_crate01',0),(10982,10982,'staticobjects/crates/dpo_fen_gu53_crate01_short',0),(10983,10983,'creatures/mounts/flying_disc/flying_disc_good_02',0),(10984,10984,'creatures/mounts/flying_disc/flying_disc_evil_02',0),(10985,10985,'creatures/mounts/flying_disc/flying_disc_good_01',0),(10986,10986,'staticobjects/tcg/tcg_golden_egg',0),(10987,10987,'staticobjects/beds/dpo_blue_eu_bed_queen',0),(10988,10988,'staticobjects/dressers/dpo_eu_dresser_single',0),(10989,10989,'staticobjects/nursery/dpo_blue_eu_crib',0),(10990,10990,'staticobjects/pillow/dpo_blue_eu_bed_pillow',0),(10991,10991,'staticobjects/brazier/dpo_fon_gu53_firepit01',0),(10992,10992,'staticobjects/fires/dpo_fen_gu53_forge',0),(10993,10993,'staticobjects/barrels/dpo_jw_gu53_barrel01',0),(10994,10994,'staticobjects/crates/dpo_jw_gu53_crate01',0),(10995,10995,'staticobjects/crates/dpo_jw_gu53_crate01_short',0),(10996,10996,'staticobjects/tents/dpo_fon_gu53_tent01',0),(10997,10997,'staticobjects/tents/dpo_jw_gu53_tent02',0),(10998,10998,'staticobjects/tents/dpo_jw_gu53_tent',0),(10999,10999,'staticobjects/banners/dpo_fon_gu53_tapestry01',0),(11000,11000,'staticobjects/banners/dpo_fon_gu53_tapestry01_frosted',0),(11001,11001,'_exp04/zones/objects/fens_of_nathsar/fon_shinies_aqua_burnyai01',0),(11002,11002,'_exp04/zones/objects/fens_of_nathsar/fon_shinies_green_burnyai01',0),(11003,11003,'_exp04/zones/objects/fens_of_nathsar/fon_shinies_purple_burnyai01',0),(11004,11004,'_exp04/zones/objects/fens_of_nathsar/fon_shinies_red_burnyai01',0),(11005,11005,'_exp04/zones/objects/kunzar_jungle/dpo_kj_egg',0),(11006,11006,'_exp04/zones/objects/kunzar_jungle/dpo_kj_eggs02',0),(11007,11007,'_exp04/zones/objects/kunzar_jungle/dpo_kj_eggs04',0),(11008,11008,'accessories/wearable_items/_exp06/roekillik_vanguard/skirt',0),(11009,11009,'accessories/wearable_items/_exp06/roekillik_vanguard/chest',0),(11010,11010,'accessories/wearable_items/_exp06/roekillik_vanguard/feet',0),(11011,11011,'accessories/wearable_items/_exp06/roekillik_vanguard/forearms',0),(11012,11012,'accessories/wearable_items/_exp06/roekillik_vanguard/hands',0),(11013,11013,'accessories/wearable_items/_exp06/roekillik_vanguard/head',0),(11014,11014,'accessories/wearable_items/_exp06/roekillik_vanguard/legs',0),(11015,11015,'accessories/wearable_items/_exp06/roekillik_vanguard/legs_noskirt',0),(11016,11016,'accessories/wearable_items/_exp06/roekillik_vanguard/right',0),(11017,11017,'accessories/wearable_items/_exp06/roekillik_vanguard/shoulders',0),(11018,11018,'accessories/wearable_items/_exp06/roekillik_vanguard/shoulders_nopauldrons',0),(11019,11019,'accessories/wearable_items/_exp06/roekillik_vanguard02/skirt',0),(11020,11020,'accessories/wearable_items/_exp06/roekillik_vanguard02/chest',0),(11021,11021,'accessories/wearable_items/_exp06/roekillik_vanguard02/feet',0),(11022,11022,'accessories/wearable_items/_exp06/roekillik_vanguard02/forearms',0),(11023,11023,'accessories/wearable_items/_exp06/roekillik_vanguard02/hands',0),(11024,11024,'accessories/wearable_items/_exp06/roekillik_vanguard02/head',0),(11025,11025,'accessories/wearable_items/_exp06/roekillik_vanguard02/legs',0),(11026,11026,'accessories/wearable_items/_exp06/roekillik_vanguard02/legs_noskirt',0),(11027,11027,'accessories/wearable_items/_exp06/roekillik_vanguard02/right',0),(11028,11028,'accessories/wearable_items/_exp06/roekillik_vanguard02/roekillik_pauldron_left',0),(11029,11029,'accessories/wearable_items/_exp06/roekillik_vanguard02/roekillik_pauldron_right',0),(11030,11030,'accessories/wearable_items/_exp06/roekillik_vanguard02/shoulders',0),(11031,11031,'accessories/wearable_items/_exp06/roekillik_vanguard02/shoulders_epicpauldrons',0),(11032,11032,'accessories/wearable_items/_exp06/roekillik_vanguard02/shoulders_nopauldrons',0),(11033,11033,'staticobjects/bookcases/dpo_fon_riliss_bookcase01',0),(11034,11034,'staticobjects/chairs/dpo_cha_bench_square',0),(11035,11035,'staticobjects/chairs/dpo_kp_throne_iksar',0),(11036,11036,'staticobjects/coffins_and_sarcophagus/dpo_fon_ruins_tomb01',0),(11037,11037,'staticobjects/crates/dpo_fon_crate_ruins_openlid02',0),(11038,11038,'staticobjects/kitchen/floor_plate_of_fish',0),(11039,11039,'staticobjects/nautical/dpo_fon_restaurant_crossedoars01',0),(11040,11040,'staticobjects/pillars/dpo_cha_column_large01',0),(11041,11041,'staticobjects/pillars/dpo_cha_column_small01',0),(11042,11042,'staticobjects/platforms/dpo_charasiswest_r04_platform',0),(11043,11043,'staticobjects/platforms/dpo_charasiswest_r04_platform_fx',0),(11044,11044,'staticobjects/rugs/dpo_cha_rugs_rolled_group02',0),(11045,11045,'staticobjects/torches/dpo_fon_shinies_aqua_burynai01',0),(11046,11046,'staticobjects/torches/dpo_fon_shinies_green_burynai01',0),(11047,11047,'staticobjects/torches/dpo_fon_shinies_purple_burynai01',0),(11048,11048,'accessories/wearable_items/_exp08/dragon_armor/robe_blue/hands',1096),(11049,11049,'staticobjects/urns/dpo_cha_canopic_vase02_south',0),(11050,11050,'creatures/monsters/cerberus_skeletal',0),(11051,11051,'creatures/monsters/cerberus',0),(11052,11052,'creatures/monsters/cerberus_ice',0),(11053,11053,'staticobjects/rocks/dpo_fon_rock_small_field02',0),(11054,11054,'staticobjects/panels/dpo_grass_panel',0),(11055,11055,'accessories/wearable_items/_exp06/conjurer_robe/feet',0),(11056,11056,'accessories/wearable_items/_exp06/conjurer_robe/hands',0),(11057,11057,'staticobjects/torches/dpo_fon_shinies_red_burynai01a',0),(11058,11058,'staticobjects/containers/dpo_cockatrice_egg_basket',0),(11059,11059,'creatures/mounts/flying_disc/flying_disc_good_03',0),(11060,11060,'accessories/wearable_items/_exp06/varsoon_robe/chest_with_skull_pauldrons_head_piece',0),(11061,11061,'_exp06/characters/monsters/vasty_guardian/vasty_guardian',0),(11062,11062,'_exp06/characters/monsters/vasty_guardian_rusty/vasty_guardian_rusty',0),(11063,11063,'staticobjects/feathers/dpo_flamingfeather01',0),(11064,11064,'creatures/monsters/pegasus',0),(11065,11065,'_exp06/characters/monsters/bookminion_erudin01/bookminion_erudin01',0),(11066,11066,'_exp06/characters/monsters/bookminion_erudin02/bookminion_erudin02',0),(11067,11067,'_exp06/characters/monsters/bookminion_erudin03/bookminion_erudin03',0),(11068,11068,'staticobjects/globes/quest_iksar_snowglobe02',0),(11069,11069,'accessories/wearable_items/_exp06/demonic_leather/skirt',0),(11070,11070,'accessories/wearable_items/_exp06/demonic_leather/chest',0),(11071,11071,'accessories/wearable_items/_exp06/demonic_leather/feet',0),(11072,11072,'accessories/wearable_items/_exp06/demonic_leather/forearms',0),(11073,11073,'accessories/wearable_items/_exp06/demonic_leather/hands',0),(11074,11074,'accessories/wearable_items/_exp06/demonic_leather/head',0),(11075,11075,'accessories/wearable_items/_exp06/demonic_leather/legs',0),(11076,11076,'accessories/wearable_items/_exp06/demonic_leather/legs_noskirt',0),(11077,11077,'accessories/wearable_items/_exp06/demonic_leather/shoulders',0),(11078,11078,'accessories/wearable_items/_exp08/dragon_armor/robe_blue/head',1096),(11079,11079,'accessories/wearable_items/_exp06/erudite_classic_armor/erudite_classic_armor_robe_violet/skirt',0),(11080,11080,'accessories/wearable_items/_exp06/erudite_classic_armor/erudite_classic_armor_robe_violet/chest',0),(11081,11081,'accessories/wearable_items/_exp06/erudite_classic_armor/erudite_classic_armor_robe_violet/head',0),(11082,11082,'accessories/wearable_items/_exp06/erudite_classic_armor/erudite_classic_armor_robe_violet/head_for_classic_erudite',0),(11083,11083,'accessories/wearable_items/_exp06/erudite_classic_armor/erudite_classic_armor_robe_violet/hood',0),(11084,11084,'accessories/wearable_items/_exp06/erudite_classic_armor/erudite_classic_armor_robe_violet/pants',0),(11085,11085,'accessories/wearable_items/_exp06/erudite_classic_armor/erudite_classic_armor_robe_red/skirt',0),(11086,11086,'accessories/wearable_items/_exp06/erudite_classic_armor/erudite_classic_armor_robe_red/chest',0),(11087,11087,'accessories/wearable_items/_exp06/erudite_classic_armor/erudite_classic_armor_robe_red/head',0),(11088,11088,'accessories/wearable_items/_exp06/erudite_classic_armor/erudite_classic_armor_robe_red/head_for_classic_erudite',0),(11089,11089,'accessories/wearable_items/_exp06/erudite_classic_armor/erudite_classic_armor_robe_red/hood',0),(11090,11090,'accessories/wearable_items/_exp06/erudite_classic_armor/erudite_classic_armor_robe_red/pants',0),(11091,11091,'accessories/wearable_items/_exp06/erudite_classic_armor/erudite_classic_armor_robe_orange/skirt',0),(11092,11092,'accessories/wearable_items/_exp06/erudite_classic_armor/erudite_classic_armor_robe_orange/chest',0),(11093,11093,'accessories/wearable_items/_exp06/erudite_classic_armor/erudite_classic_armor_robe_orange/head',0),(11094,11094,'accessories/wearable_items/_exp06/erudite_classic_armor/erudite_classic_armor_robe_orange/head_for_classic_erudite',0),(11095,11095,'accessories/wearable_items/_exp06/erudite_classic_armor/erudite_classic_armor_robe_orange/hood',0),(11096,11096,'accessories/wearable_items/_exp06/erudite_classic_armor/erudite_classic_armor_robe_orange/pants',0),(11097,11097,'accessories/wearable_items/_exp06/erudite_classic_armor/erudite_classic_armor_robe_blue/skirt',0),(11098,11098,'accessories/wearable_items/_exp06/erudite_classic_armor/erudite_classic_armor_robe_blue/chest',0),(11099,11099,'accessories/wearable_items/_exp06/erudite_classic_armor/erudite_classic_armor_robe_blue/head',0),(11100,11100,'accessories/wearable_items/_exp06/erudite_classic_armor/erudite_classic_armor_robe_blue/head_for_classic_erudite',0),(11101,11101,'accessories/wearable_items/_exp06/erudite_classic_armor/erudite_classic_armor_robe_blue/hood',0),(11102,11102,'accessories/wearable_items/_exp06/erudite_classic_armor/erudite_classic_armor_robe_blue/pants',0),(11103,11103,'staticobjects/helmet/head_armor_heavy',0),(11104,11104,'staticobjects/tcg/tcg_tapestry_repair',0),(11105,11105,'staticobjects/tcg/tcg_tapestry_loab',0),(11106,11106,'staticobjects/tcg/tcg_tapestry_arachnid',0),(11107,11107,'staticobjects/tcg/tcg_tapestry_roadyle',0),(11108,11108,'staticobjects/tcg/tcg_tapestry_kruzz',0),(11109,11109,'accessories/wearable_items/_exp06/demonic_vanguard/head_demonic',0),(11110,11110,'staticobjects/halloween/dpo_gf_kel_int_divider_wall01_bones',0),(11111,11111,'accessories/wearable_items/_exp06/defender_of_light_vanguard/skirt',0),(11112,11112,'accessories/wearable_items/_exp06/defender_of_light_vanguard/chest',0),(11113,11113,'accessories/wearable_items/_exp06/defender_of_light_vanguard/feet',0),(11114,11114,'accessories/wearable_items/_exp06/defender_of_light_vanguard/forearms',0),(11115,11115,'accessories/wearable_items/_exp06/defender_of_light_vanguard/hands',0),(11116,11116,'accessories/wearable_items/_exp06/defender_of_light_vanguard/head',0),(11117,11117,'accessories/wearable_items/_exp06/defender_of_light_vanguard/legs',0),(11118,11118,'accessories/wearable_items/_exp06/defender_of_light_vanguard/legs_noskirt',0),(11119,11119,'accessories/wearable_items/_exp06/defender_of_light_vanguard/right',0),(11120,11120,'accessories/wearable_items/_exp06/defender_of_light_vanguard/shoulders',0),(11121,11121,'accessories/wearable_items/_exp06/defender_of_light_vanguard/shoulders_nopauldrons',0),(11122,11122,'_exp05/zones/objects/exp05_dun_miragul_shard/miragul_firebolt_zapper',0),(11123,11123,'_exp05/zones/objects/exp05_dun_miragul_shard/miragul_ghost_trapper',0),(11124,11124,'accessories/wearable_items/_exp06/demonic_robe/skirt',0),(11125,11125,'accessories/wearable_items/_exp06/demonic_robe/chest',0),(11126,11126,'accessories/wearable_items/_exp06/demonic_robe/head',0),(11127,11127,'accessories/wearable_items/_exp06/demonic_robe/hood',0),(11128,11128,'accessories/wearable_items/_exp06/demonic_robe/pants',0),(11129,11129,'staticobjects/liveevent/halloween/halloween_hedge',0),(11130,11130,'_exp06/characters/monsters/moss_grathok/moss_grathok',0),(11131,11131,'staticobjects/liveevent/halloween/halloween_tapestry_fire',0),(11132,11132,'staticobjects/liveevent/halloween/halloween_tapestry_sky',0),(11133,11133,'staticobjects/liveevent/halloween/halloween_tapestry_spider',0),(11134,11134,'accessories/wieldable_items/shields/ice_shield/non_ice_shield_metal',0),(11135,11135,'accessories/wieldable_items/shields/ice_shield/crusted_ice_shield',0),(11136,11136,'accessories/wieldable_items/shields/ice_shield/crusted_ice_shield_metal',0),(11137,11137,'accessories/wieldable_items/shields/ice_shield/ice_shield',0),(11138,11138,'accessories/wieldable_items/shields/ice_shield/ice_shield_greater',0),(11139,11139,'accessories/wieldable_items/shields/ice_shield/non_ice_shield',0),(11140,11140,'accessories/wieldable_items/shields/exp06/metal_round_shield',0),(11141,11141,'accessories/wieldable_items/shields/exp06/golden_round_shield',0),(11142,11142,'accessories/wieldable_items/shields/exp06/metal_tower_shield',0),(11143,11143,'accessories/wieldable_items/shields/exp06/golden_tower_shield',0),(11144,11144,'accessories/wearable_items/_exp08/dragon_armor/robe_blue/head_collar',1096),(11145,11145,'accessories/wearable_items/_exp06/demonic_gi/chest',0),(11146,11146,'accessories/wearable_items/_exp06/demonic_gi/feet',0),(11147,11147,'accessories/wearable_items/_exp06/demonic_gi/hands',0),(11148,11148,'accessories/wearable_items/_exp08/dragon_armor/robe_blue/pants',1096),(11149,11149,'accessories/wearable_items/_exp06/demonic_gi/pants',0),(11150,11150,'accessories/wieldable_items/weapons/exp06/2h_sword/exp06_2h_rhoen_theer_good',0),(11151,11151,'accessories/wieldable_items/weapons/exp06/2h_sword/exp06_2h_rhoen_theer_evil',0),(11152,11152,'accessories/wearable_items/_exp06/magic_rune_vanguard01/magic_rune_vanguard_pauldron_left',0),(11153,11153,'accessories/wearable_items/_exp06/magic_rune_vanguard01/magic_rune_vanguard_pauldron_right',0),(11154,11154,'accessories/wearable_items/_exp06/magic_rune_vanguard01/shoulders_fancy_pauldrons',0),(11155,11155,'accessories/wearable_items/_exp06/defender_of_light_vanguard/shoulders_defender_of_light_pauldrons',0),(11156,11156,'accessories/wearable_items/_exp06/defender_of_light_vanguard/defender_of_light_pauldron_left',0),(11157,11157,'accessories/wearable_items/_exp06/defender_of_light_vanguard/defender_of_light_pauldron_right',0),(11158,11158,'accessories/wearable_items/profesion_hats/defender_of_light_helm/defender_of_light_head',0),(11159,11159,'accessories/wearable_items/_exp06/defender_of_light_vanguard/defender_of_light_belt',0),(11160,11160,'accessories/wearable_items/_exp06/defender_of_light_vanguard/legs_belt',0),(11161,11161,'accessories/wearable_items/_exp06/defender_of_light_vanguard/legs_noskirt_belt',0),(11162,11162,'accessories/wearable_items/profesion_hats/defender_of_light_helm/defender_of_light_crest',0),(11163,11163,'accessories/wearable_items/profesion_hats/defender_of_light_helm/defender_of_light_head_crest',0),(11164,11164,'_exp06/characters/monsters/sea_dragon/sea_dragon',0),(11165,11165,'accessories/wieldable_items/shields/exp06/void_claw_shield',0),(11166,11166,'accessories/wieldable_items/shields/exp06/crystal_star_shield',0),(11167,11167,'accessories/wieldable_items/shields/exp06/frost_scale_shield',0),(11168,11168,'accessories/wieldable_items/shields/exp06/hades_mouth_shield',0),(11169,11169,'accessories/wieldable_items/shields/exp06/kraag_the_undying_shield',0),(11170,11170,'accessories/wieldable_items/shields/exp06/rhino_skull_shield',0),(11171,11171,'accessories/wieldable_items/shields/exp06/viny_bulb_shield',0),(11172,11172,'accessories/wieldable_items/shields/exp06/violet_spike_shield',0),(11173,11173,'accessories/wearable_items/_exp06/demonic_leather/head_demonic_leather_no_mask',0),(11174,11174,'accessories/wearable_items/_exp06/demonic_leather/shoulders_pauldrons',0),(11175,11175,'accessories/wearable_items/_exp06/demonic_leather/demonic_pauldron_left',0),(11176,11176,'accessories/wearable_items/_exp06/demonic_leather/demonic_pauldron_right',0),(11177,11177,'accessories/wearable_items/_exp06/demonic_robe/chest_pauldrons',0),(11178,11178,'accessories/wearable_items/_exp06/demonic_robe/demonic_pauldron_left',0),(11179,11179,'accessories/wearable_items/_exp06/demonic_robe/demonic_pauldron_right',0),(11180,11180,'accessories/wearable_items/_exp06/demonic_robe/feet',0),(11181,11181,'accessories/wearable_items/_exp06/demonic_robe/hands',0),(11182,11182,'accessories/wearable_items/_exp06/demonic_vanguard/demonic_vanguard_pauldron_left',0),(11183,11183,'accessories/wearable_items/_exp06/demonic_vanguard/demonic_vanguard_pauldron_right',0),(11184,11184,'accessories/wearable_items/_exp06/demonic_vanguard/shoulders_demonic_pauldrons',0),(11185,11185,'accessories/wearable_items/profesion_hats/proffiddlewiz_cap_black/head',0),(11186,11186,'accessories/wearable_items/profesion_hats/werewolf_mask/head',0),(11187,11187,'accessories/wearable_items/cloak/exp06/cloak_miragul_icicle',0),(11188,11188,'accessories/wearable_items/cloak/exp06/cloak_miragul_glacial',0),(11189,11189,'accessories/wearable_items/cloak/exp06/cloak_miragul_glittering_cloak',0),(11190,11190,'accessories/wearable_items/cloak/exp06/cloak_miragul_ice_comet',0),(11191,11191,'ui_fx/fx/systems/environment/shard_of_love/teleport_vision_shard_of_love',0),(11192,11192,'staticobjects/benches/slove_flame_bench01',0),(11193,11193,'staticobjects/candles/slove_p04_incense_chalice01_swinging',0),(11194,11194,'staticobjects/containers/slove_basket01_pom02',0),(11195,11195,'staticobjects/containers/slove_basket01_pom02_rotten',0),(11196,11196,'staticobjects/kitchen/slove_pomegranate_piece_rotted01',0),(11197,11197,'staticobjects/kitchen/slove_pomegranate_whole_dark01',0),(11198,11198,'staticobjects/pillow/slove_drapery01_destroyed01',0),(11199,11199,'staticobjects/rubble/slove_rubblepiece_purple01',0),(11200,11200,'staticobjects/rubble/slove_rubblepiece_trim01',0),(11201,11201,'staticobjects/statues/slove_statue_arrow01',0),(11202,11202,'staticobjects/statues/slove_statue_bow_arrow01_covered',0),(11203,11203,'staticobjects/statues/slove_statue_bow_arrow02_covered',0),(11204,11204,'staticobjects/statues/slove_statue_bow_arrow03_covered',0),(11205,11205,'staticobjects/tapestry/dpo_tapestry_design_erollisi_sister',0),(11206,11206,'accessories/wearable_items/snapons/backpacks/backpack',0),(11207,11207,'accessories/wearable_items/snapons/backpacks/backpack_pandamen',0),(11208,11208,'accessories/wearable_items/snapons/backpacks/backpack_adventurer',0),(11209,11209,'staticobjects/cannon/tinkered_cannon_dpo',0),(11210,11210,'accessories/wearable_items/_exp08/dragon_armor/robe_brown/skirt',1096),(11211,11211,'creatures/monsters/displacer_beast',0),(11212,11212,'creatures/monsters/displacer_beast_skeletal',0),(11213,11213,'creatures/monsters/drake_flight_path_dawn',0),(11214,11214,'creatures/monsters/gorgon',0),(11215,11215,'creatures/monsters/gorgon_golden',0),(11216,11216,'creatures/monsters/gorgon_rusty',0),(11217,11217,'creatures/monsters/pegasus_transport',0),(11218,11218,'_exp06/characters/tool_users/erudite_classic_female/erudite_classic_female_ghost_loop',0),(11219,11219,'_exp06/characters/tool_users/erudite_classic_male/erudite_classic_male_ghost_loop',0),(11220,11220,'_exp06/characters/monsters/sea_nayad_good/sea_nayad_good',0),(11221,11221,'accessories/wearable_items/vanguard/vanguard_chitin_black_golden/upperchest',0),(11222,11222,'accessories/wearable_items/vanguard/vanguard_chitin_black_golden/chest',0),(11223,11223,'accessories/wearable_items/vanguard/vanguard_chitin_black_golden/feet',0),(11224,11224,'accessories/wearable_items/vanguard/vanguard_chitin_black_golden/forearms',0),(11225,11225,'accessories/wearable_items/vanguard/vanguard_chitin_black_golden/hands',0),(11226,11226,'accessories/wearable_items/vanguard/vanguard_chitin_black_golden/head',0),(11227,11227,'accessories/wearable_items/vanguard/vanguard_chitin_black_golden/left',0),(11228,11228,'accessories/wearable_items/vanguard/vanguard_chitin_black_golden/legs',0),(11229,11229,'accessories/wearable_items/vanguard/vanguard_chitin_black_golden/legs_noskirt',0),(11230,11230,'accessories/wearable_items/vanguard/vanguard_chitin_black_golden/pauldron02_vanguard_ridged_left',0),(11231,11231,'accessories/wearable_items/vanguard/vanguard_chitin_black_golden/pauldron02_vanguard_ridged_right',0),(11232,11232,'accessories/wearable_items/vanguard/vanguard_chitin_black_golden/pauldron03_vanguard_flared_left',0),(11233,11233,'accessories/wearable_items/vanguard/vanguard_chitin_black_golden/pauldron03_vanguard_flared_right',0),(11234,11234,'accessories/wearable_items/vanguard/vanguard_chitin_black_golden/right',0),(11235,11235,'accessories/wearable_items/vanguard/vanguard_chitin_black_golden/shoulders',0),(11236,11236,'accessories/wearable_items/vanguard/vanguard_chitin_black_golden/shoulders_nopauldrons',0),(11237,11237,'accessories/wearable_items/vanguard/vanguard_chitin_black_golden/shoulders_pauldrons_flared',0),(11238,11238,'accessories/wearable_items/vanguard/vanguard_chitin_black_golden/shoulders_pauldrons_ridged',0),(11239,11239,'accessories/wearable_items/vanguard/vanguard_chitin_black_golden/skirt',0),(11240,11240,'accessories/wearable_items/_exp08/dragon_armor/robe_brown/chest',1096),(11241,11241,'accessories/wearable_items/_exp08/dragon_armor/robe_brown/chest_epic',1096),(11242,11242,'creatures/tu/pandaman_warrior',0),(11243,11243,'creatures/tu/pandaman',0),(11244,11244,'creatures/tu/pandaman_monk',0),(11245,11245,'creatures/tu/pandaman_traveler',0),(11246,11246,'creatures/tu/pandaman_warlord',0),(11247,11247,'creatures/tu/pandaman_warrior_ghost_loop',0),(11248,11248,'_exp06/characters/monsters/sea_nayad_evil/sea_nayad_evil',0),(11249,11249,'accessories/wearable_items/snapons/backpacks/backpack_provisioner',0),(11250,11250,'staticobjects/eig/eig_harvest_location_love',0),(11251,11251,'creatures/monsters/stagg_glass',0),(11252,11252,'creatures/tu/pandaman_warlord_ghost_loop',0),(11253,11253,'staticobjects/halloween/bef_banner_burned02',0),(11254,11254,'staticobjects/halloween/bef_bone_pile01',0),(11255,11255,'staticobjects/halloween/bef_bone_totem01',0),(11256,11256,'staticobjects/halloween/bef_bone_totem02',0),(11257,11257,'staticobjects/halloween/bef_statue_warrior_brokenarm01',0),(11258,11258,'staticobjects/halloween/cbk_plate_withbone',0),(11259,11259,'staticobjects/halloween/cbk_plate_withrats',0),(11260,11260,'staticobjects/halloween/cbk_torch001_skull',0),(11261,11261,'staticobjects/halloween/cbk_torture_stockade01',0),(11262,11262,'staticobjects/halloween/cm_manacles_double_wall01',0),(11263,11263,'staticobjects/halloween/kp_cocoon_ground02_w_coll',0),(11264,11264,'staticobjects/halloween/lp_coffin_stone01_open01',0),(11265,11265,'staticobjects/halloween/vek_bottle01',0),(11266,11266,'staticobjects/halloween/vek_sarcophagi_broken01',0),(11267,11267,'staticobjects/halloween/vek_sarcophagi_lid',0),(11268,11268,'staticobjects/halloween/vek_sarcophagi_lower_half',0),(11269,11269,'accessories/wearable_items/_exp06/defender_of_light_vanguard_gold/shoulders_nopauldrons',0),(11270,11270,'accessories/wearable_items/_exp06/defender_of_light_vanguard_gold/skirt',0),(11271,11271,'accessories/wearable_items/_exp06/defender_of_light_vanguard_gold/chest',0),(11272,11272,'accessories/wearable_items/_exp06/defender_of_light_vanguard_gold/defender_of_light_belt',0),(11273,11273,'accessories/wearable_items/_exp06/defender_of_light_vanguard_gold/defender_of_light_pauldron_left',0),(11274,11274,'accessories/wearable_items/_exp06/defender_of_light_vanguard_gold/defender_of_light_pauldron_right',0),(11275,11275,'accessories/wearable_items/_exp06/defender_of_light_vanguard_gold/feet',0),(11276,11276,'accessories/wearable_items/_exp06/defender_of_light_vanguard_gold/forearms',0),(11277,11277,'accessories/wearable_items/_exp06/defender_of_light_vanguard_gold/hands',0),(11278,11278,'accessories/wearable_items/_exp06/defender_of_light_vanguard_gold/head',0),(11279,11279,'accessories/wearable_items/_exp06/defender_of_light_vanguard_gold/legs',0),(11280,11280,'accessories/wearable_items/_exp06/defender_of_light_vanguard_gold/legs_belt',0),(11281,11281,'accessories/wearable_items/_exp06/defender_of_light_vanguard_gold/legs_noskirt',0),(11282,11282,'accessories/wearable_items/_exp06/defender_of_light_vanguard_gold/legs_noskirt_belt',0),(11283,11283,'accessories/wearable_items/_exp06/defender_of_light_vanguard_gold/right',0),(11284,11284,'accessories/wearable_items/_exp06/defender_of_light_vanguard_gold/shoulders',0),(11285,11285,'accessories/wearable_items/_exp06/defender_of_light_vanguard_gold/shoulders_defender_of_light_pauldrons',0),(11286,11286,'ec/npc/orc_ghost_loop',0),(11287,11287,'accessories/wieldable_items/weapons/exp06/talisman/book/ice_tome_frost',0),(11288,11288,'accessories/armor_dummy/armor_dummy_female_idle_hologram',0),(11289,11289,'accessories/armor_dummy/armor_dummy_idle_hologram',0),(11290,11290,'accessories/wearable_items/snapons/backpacks/backpack_brewmeister',0),(11291,11291,'staticobjects/portals/void_portal',0),(11292,11292,'accessories/wearable_items/cloak/exp06/cloak_quellthulian_symbol',0),(11293,11293,'accessories/wearable_items/_exp06/quellthulian_symbol_vanguard/skirt',0),(11294,11294,'accessories/wearable_items/_exp06/quellthulian_symbol_vanguard/chest',0),(11295,11295,'accessories/wearable_items/_exp06/quellthulian_symbol_vanguard/feet',0),(11296,11296,'accessories/wearable_items/_exp06/quellthulian_symbol_vanguard/forearms',0),(11297,11297,'accessories/wearable_items/_exp06/quellthulian_symbol_vanguard/hands',0),(11298,11298,'accessories/wearable_items/_exp06/quellthulian_symbol_vanguard/head',0),(11299,11299,'accessories/wearable_items/_exp06/quellthulian_symbol_vanguard/head_quellthulian',0),(11300,11300,'accessories/wearable_items/_exp06/quellthulian_symbol_vanguard/legs',0),(11301,11301,'accessories/wearable_items/_exp06/quellthulian_symbol_vanguard/legs_noskirt',0),(11302,11302,'accessories/wearable_items/_exp06/quellthulian_symbol_vanguard/quellthulian_pauldrons_left',0),(11303,11303,'accessories/wearable_items/_exp06/quellthulian_symbol_vanguard/quellthulian_pauldrons_right',0),(11304,11304,'accessories/wearable_items/_exp06/quellthulian_symbol_vanguard/quellthulian_shoulders',0),(11305,11305,'accessories/wearable_items/_exp06/quellthulian_symbol_vanguard/right',0),(11306,11306,'accessories/wearable_items/_exp06/quellthulian_symbol_vanguard/shoulders',0),(11307,11307,'accessories/wearable_items/_exp06/quellthulian_symbol_vanguard/shoulders_nopauldrons',0),(11308,11308,'_exp06/characters/tool_users/yael_eyes/yael_eyes',0),(11309,11309,'accessories/wearable_items/cloak/exp06/cloak_achievement_moon',0),(11310,11310,'staticobjects/guildhall/trophies/floor_headless',0),(11311,11311,'accessories/wearable_items/profesion_hats/defender_of_light_helm/defender_of_light_head_gold',0),(11312,11312,'accessories/wearable_items/profesion_hats/defender_of_light_helm/defender_of_light_head_gold_crest',0),(11313,11313,'accessories/wearable_items/cloak/exp06/fae_d_wing02_love',0),(11314,11314,'staticobjects/kitchen/slove_pomegranate_piece_fresh01',0),(11315,11315,'staticobjects/kitchen/slove_pomegranate_whole01',0),(11316,11316,'accessories/wearable_items/_exp06/order_of_nature_leather/skirt',0),(11317,11317,'accessories/wearable_items/_exp06/order_of_nature_leather/chest',0),(11318,11318,'accessories/wearable_items/_exp06/order_of_nature_leather/demonic_pauldron_left',0),(11319,11319,'accessories/wearable_items/_exp06/order_of_nature_leather/demonic_pauldron_right',0),(11320,11320,'accessories/wearable_items/_exp06/order_of_nature_leather/feet',0),(11321,11321,'accessories/wearable_items/_exp06/order_of_nature_leather/forearms',0),(11322,11322,'accessories/wearable_items/_exp06/order_of_nature_leather/hands',0),(11323,11323,'accessories/wearable_items/_exp06/order_of_nature_leather/head',0),(11324,11324,'accessories/wearable_items/_exp06/order_of_nature_leather/head_demonic_leather_no_mask',0),(11325,11325,'accessories/wearable_items/_exp06/order_of_nature_leather/legs',0),(11326,11326,'accessories/wearable_items/_exp06/order_of_nature_leather/legs_noskirt',0),(11327,11327,'accessories/wearable_items/_exp06/order_of_nature_leather/shoulders',0),(11328,11328,'accessories/wearable_items/_exp06/order_of_nature_leather/shoulders_nopauldrons',0),(11329,11329,'accessories/wearable_items/_exp06/order_of_nature_leather/shoulders_pauldrons',0),(11330,11330,'accessories/wieldable_items/weapons/exp06/2h_sword/exp06_2h_korsha_claymore_ice',0),(11331,11331,'_exp05/monsters/book_dervish_plain',0),(11332,11332,'accessories/wearable_items/elemental_crowns/shard_of_love_crown_fire',0),(11333,11333,'accessories/wearable_items/elemental_crowns/shard_of_love_crown_petals',0),(11334,11334,'staticobjects/chests/tinkered_harvest_depot',0),(11335,11335,'staticobjects/globes/shard_of_love_flower_snowglobe',0),(11336,11336,'_exp04/monsters/erollisi_dead_open',0),(11337,11337,'staticobjects/flora/exp06_toxxulia_flower',0),(11338,11338,'staticobjects/flora/exp06_bamboo_plant',0),(11339,11339,'staticobjects/flora/exp06_toxxulia_plant',0),(11340,11340,'staticobjects/_exp06/paineel_chair_01',0),(11341,11341,'staticobjects/_exp06/paineel_chair_02',0),(11342,11342,'staticobjects/_exp06/paineel_divider_small',0),(11343,11343,'staticobjects/_exp06/paineel_divider_triple',0),(11344,11344,'staticobjects/_exp06/paineel_vase',0),(11345,11345,'staticobjects/_exp06/paineel_table',0),(11346,11346,'ui_fx/fx/systems/environment/shard_of_love/teleport_vision_everfrost',0),(11347,11347,'creatures/mounts/flying_disc/hotwired_gnomish_hoverpad',0),(11348,11348,'creatures/tu/gods_mithaniel_marr_sword',0),(11349,11349,'accessories/wieldable_items/weapons/dagger/sai/sai001_ornate_sol',0),(11350,11350,'accessories/wieldable_items/weapons/great_hammer/great_mace/great_mace001_ornate_sol',0),(11351,11351,'accessories/wieldable_items/weapons/sword/whip/whip002_runic_sol',0),(11352,11352,'accessories/wieldable_items/weapons/sword/spatha_sword/spatha_sword001_ornate_sol',0),(11353,11353,'accessories/wieldable_items/weapons/staff/djinn_staff/djinn_staff_plain_sol',0),(11354,11354,'accessories/wieldable_items/weapons/dagger/sai/sai001_ornate_love',0),(11355,11355,'accessories/wieldable_items/weapons/great_hammer/great_mace/great_mace001_ornate_love',0),(11356,11356,'accessories/wieldable_items/weapons/staff/djinn_staff/djinn_staff_plain_love',0),(11357,11357,'accessories/wieldable_items/weapons/sword/spatha_sword/spatha_sword001_ornate_love',0),(11358,11358,'accessories/wieldable_items/weapons/sword/whip/whip002_runic_love',0),(11359,11359,'staticobjects/bookcases/bixie_bookcase01_full_dpo',0),(11360,11360,'staticobjects/books/nekcas_eviltrinket_book001_dpo',0),(11361,11361,'accessories/wieldable_items/weapons/exp03/bow/exp03_bow_giant_wooden_grove_love',0),(11362,11362,'accessories/wieldable_items/weapons/exp03/bow/exp03_bow_giant_wooden_grove_sol',0),(11363,11363,'_exp06/characters/tool_users/crystaline_folk/crystaline_folk',0),(11364,11364,'staticobjects/liveevent/frostfell/dpo_klp_icycles_group01',0),(11365,11365,'staticobjects/liveevent/frostfell/dpo_klp_icycles_group02',0),(11366,11366,'staticobjects/liveevent/frostfell/dpo_klp_icycles_group03',0),(11367,11367,'accessories/wearable_items/_exp06/order_of_nature_chain/skirt',0),(11368,11368,'accessories/wearable_items/_exp06/order_of_nature_chain/chest',0),(11369,11369,'accessories/wearable_items/_exp06/order_of_nature_chain/feet',0),(11370,11370,'accessories/wearable_items/_exp06/order_of_nature_chain/forearms',0),(11371,11371,'accessories/wearable_items/_exp06/order_of_nature_chain/hands',0),(11372,11372,'accessories/wearable_items/_exp06/order_of_nature_chain/head',0),(11373,11373,'accessories/wearable_items/_exp06/order_of_nature_chain/legs',0),(11374,11374,'accessories/wearable_items/_exp06/order_of_nature_chain/legs_noskirt',0),(11375,11375,'accessories/wearable_items/_exp06/order_of_nature_chain/shoulders',0),(11376,11376,'staticobjects/tables/librariansdesk_dark',0),(11377,11377,'staticobjects/racks/towelrack_dark',0),(11378,11378,'staticobjects/pillow/qey_gemdisplaypillow_dark',0),(11379,11379,'staticobjects/beds/df_emperorbed02_dark',0),(11380,11380,'staticobjects/beds/qey_bed_ornateking001_dark',0),(11381,11381,'staticobjects/bookcases/bixie_bookcase01_dark',0),(11382,11382,'staticobjects/chairs/bd_judicialchair_dark',0),(11383,11383,'staticobjects/chairs/cm_chair_chaise01_dark',0),(11384,11384,'staticobjects/chairs/cm_couch01_dark',0),(11385,11385,'staticobjects/benches/edk_bench001_fancy_dark',0),(11386,11386,'accessories/wearable_items/_exp08/dragon_armor/robe_brown/feet',1096),(11387,11387,'staticobjects/chairs/halfling_stool_square_padded_dark',0),(11388,11388,'staticobjects/cupboards/bixie_cabinet_dark',0),(11389,11389,'staticobjects/cupboards/dresser001_dark',0),(11390,11390,'staticobjects/pillow/slove_rose_couch',0),(11391,11391,'staticobjects/tables/bixie_table01_dark',0),(11392,11392,'staticobjects/tapestry/slove_tapestry_red',0),(11393,11393,'staticobjects/weapons/slove_arrow_houseitem',0),(11394,11394,'staticobjects/beds/dpo_miragul_bed_ice01',0),(11395,11395,'staticobjects/bookcases/dpo_miragul_scrollrack_single01',0),(11396,11396,'staticobjects/tables/dpo_miragul_table_round01',0),(11397,11397,'staticobjects/brazier/floor_brazier_erudite',0),(11398,11398,'staticobjects/hitching_posts/fprt_hitchingpostsingle01',0),(11399,11399,'staticobjects/hitching_posts/qey_hitchingpost_fancy01',0),(11400,11400,'staticobjects/hitching_posts/qey_hitchingpost_plain01',0),(11401,11401,'staticobjects/fences/qey_fence_wroughtiron_main01',0),(11402,11402,'staticobjects/tapestry/dpo_tapestry_design_holiday_canes',0),(11403,11403,'staticobjects/tapestry/dpo_tapestry_design_holiday_gigglegibber',0),(11404,11404,'staticobjects/tapestry/dpo_tapestry_design_holiday_snowflakes',0),(11405,11405,'accessories/wieldable_items/shields/exp06/shard_of_love_gold_shield',0),(11406,11406,'accessories/wieldable_items/shields/exp06/shard_of_love_white_shield',0),(11407,11407,'accessories/wieldable_items/weapons/exp04/shield/exp04_shld_dragonhead_ice_composite_shield',0),(11408,11408,'_exp06/zones/objects/exp06_dun_the_sentinel/sen_final_globe_prop_dpo',0),(11409,11409,'staticobjects/sacks/step_sack_small_open01',0),(11410,11410,'staticobjects/tables/hum_largetablefancy001_dark',0),(11411,11411,'accessories/wearable_items/_exp08/dragon_armor/robe_brown/hands',1096),(11412,11412,'accessories/wearable_items/cloak/exp06/cloak_sol',0),(11413,11413,'accessories/wieldable_items/tools/fisherman/common001_right_for_panda',0),(11414,11414,'accessories/wieldable_items/shields/exp06/broken_heart_shield',0),(11415,11415,'accessories/wieldable_items/shields/exp06/shard_of_love_tower_shield',0),(11416,11416,'accessories/wearable_items/cloak/exp06/cloak_sunset',0),(11417,11417,'staticobjects/liveevent/frostfell/dpo_holiday_bones_cazic',0),(11418,11418,'staticobjects/liveevent/frostfell/dpo_xmas_bowl_skull_apple',0),(11419,11419,'staticobjects/liveevent/frostfell/dpo_snowman01_dagger',0),(11420,11420,'staticobjects/liveevent/frostfell/dpo_holiday_skullrow_candycane',0),(11421,11421,'_exp06/zones/objects/exp06_prelude_events/dpo_teleportspires_ghosted_ulteran',0),(11422,11422,'staticobjects/dressers/washbasin_dresser_dpo',0),(11423,11423,'staticobjects/liveevent/contest_painting_aug09/contest_painting_valeric',0),(11424,11424,'staticobjects/liveevent/contest_painting_aug09/contest_painting_bramdar',0),(11425,11425,'staticobjects/liveevent/contest_painting_aug09/contest_painting_citadelli_1stplace',0),(11426,11426,'staticobjects/liveevent/contest_painting_aug09/contest_painting_crabbok',0),(11427,11427,'staticobjects/liveevent/contest_painting_aug09/contest_painting_elquinjena',0),(11428,11428,'staticobjects/liveevent/contest_painting_aug09/contest_painting_enna',0),(11429,11429,'staticobjects/liveevent/contest_painting_aug09/contest_painting_nahdia',0),(11430,11430,'staticobjects/liveevent/contest_painting_aug09/contest_painting_ryusaru',0),(11431,11431,'staticobjects/liveevent/contest_painting_aug09/contest_painting_saisha',0),(11432,11432,'staticobjects/liveevent/contest_painting_aug09/contest_painting_sucuri',0),(11433,11433,'staticobjects/panels/dpo_blueglass_panel',0),(11434,11434,'staticobjects/panels/dpo_darkplank_panel',0),(11435,11435,'staticobjects/panels/dpo_purpleflower_panel',0),(11436,11436,'staticobjects/panels/dpo_sand_panel',0),(11437,11437,'staticobjects/panels/dpo_wavysand_panel',0),(11438,11438,'staticobjects/chairs/dpo_queenscouch_dark',0),(11439,11439,'staticobjects/chests/dpo_treasurechest_clean003_dark',0),(11440,11440,'staticobjects/dividers/dpo_gf_kel_int_divider_wall01_sumac',0),(11441,11441,'staticobjects/dividers/dpo_drv_divider_plain01_dark2',0),(11442,11442,'staticobjects/dividers/dpo_drv_divider_plain01_dark',0),(11443,11443,'staticobjects/liveevent/cityfestivals/dpo_wallmailbox_freeport',0),(11444,11444,'staticobjects/liveevent/cityfestivals/dpo_wallmailbox_gorowyn',0),(11445,11445,'staticobjects/liveevent/cityfestivals/dpo_wallmailbox_kelethin',0),(11446,11446,'staticobjects/liveevent/cityfestivals/dpo_wallmailbox_neriak',0),(11447,11447,'staticobjects/liveevent/cityfestivals/dpo_wallmailbox_qeynos',0),(11448,11448,'creatures/monsters/goo_glass_green',0),(11449,11449,'_exp06/monsters/skull_green',0),(11450,11450,'staticobjects/liveevent/frostfell/dpo_holiday_orcskull_candycane',0),(11451,11451,'staticobjects/chairs/miragul_obj_dias01',0),(11452,11452,'staticobjects/benches/miragul_obj_dias02',0),(11453,11453,'accessories/wieldable_items/weapons/exp06/1h_crush/exp06_1h_crush_erolissi_censer',0),(11454,11454,'staticobjects/tcg/tcg_tapestry_boots_wings',0),(11455,11455,'accessories/wearable_items/cloak/exp06/cloak_solid_black_rune',0),(11456,11456,'accessories/wearable_items/cloak/exp06/cloak_master_assassin',0),(11457,11457,'creatures/monsters/willowisp_branches',0),(11458,11458,'accessories/wearable_items/_exp06/defender_of_light_armor_leather/skirt',0),(11459,11459,'accessories/wearable_items/_exp06/defender_of_light_armor_leather/chest',0),(11460,11460,'accessories/wearable_items/_exp06/defender_of_light_armor_leather/feet',0),(11461,11461,'accessories/wearable_items/_exp06/defender_of_light_armor_leather/forearms',0),(11462,11462,'accessories/wearable_items/_exp06/defender_of_light_armor_leather/hands',0),(11463,11463,'accessories/wearable_items/_exp06/defender_of_light_armor_leather/head',0),(11464,11464,'accessories/wearable_items/_exp06/defender_of_light_armor_leather/legs',0),(11465,11465,'accessories/wearable_items/_exp06/defender_of_light_armor_leather/legs_noskirt',0),(11466,11466,'accessories/wearable_items/_exp06/defender_of_light_armor_leather/pauldron_defender_of_light_left',0),(11467,11467,'accessories/wearable_items/_exp06/defender_of_light_armor_leather/pauldron_defender_of_light_right',0),(11468,11468,'accessories/wearable_items/_exp06/defender_of_light_armor_leather/shoulders',0),(11469,11469,'accessories/wearable_items/_exp06/defender_of_light_armor_leather/shoulders_nopauldrons',0),(11470,11470,'accessories/wearable_items/_exp06/achievement_fire_chain/skirt',0),(11471,11471,'accessories/wearable_items/_exp06/achievement_fire_chain/chest',0),(11472,11472,'accessories/wearable_items/_exp06/achievement_fire_chain/feet',0),(11473,11473,'accessories/wearable_items/_exp06/achievement_fire_chain/forearms',0),(11474,11474,'accessories/wearable_items/_exp06/achievement_fire_chain/hands',0),(11475,11475,'accessories/wearable_items/_exp06/achievement_fire_chain/head',0),(11476,11476,'accessories/wearable_items/_exp06/achievement_fire_chain/legs',0),(11477,11477,'accessories/wearable_items/_exp06/achievement_fire_chain/legs_noskirt',0),(11478,11478,'accessories/wearable_items/_exp06/achievement_fire_chain/shoulders',0),(11479,11479,'accessories/wearable_items/_exp06/achievement_forest_chain/skirt',0),(11480,11480,'accessories/wearable_items/_exp06/achievement_forest_chain/chest',0),(11481,11481,'accessories/wearable_items/_exp06/achievement_forest_chain/feet',0),(11482,11482,'accessories/wearable_items/_exp06/achievement_forest_chain/forearms',0),(11483,11483,'accessories/wearable_items/_exp06/achievement_forest_chain/hands',0),(11484,11484,'accessories/wearable_items/_exp06/achievement_forest_chain/head',0),(11485,11485,'accessories/wearable_items/_exp06/achievement_forest_chain/legs',0),(11486,11486,'accessories/wearable_items/_exp06/achievement_forest_chain/legs_noskirt',0),(11487,11487,'accessories/wearable_items/_exp06/achievement_forest_chain/shoulders',0),(11488,11488,'accessories/wearable_items/_exp06/achievement_sky_leather/skirt',0),(11489,11489,'accessories/wearable_items/_exp06/achievement_sky_leather/chest',0),(11490,11490,'accessories/wearable_items/_exp06/achievement_sky_leather/feet',0),(11491,11491,'accessories/wearable_items/_exp06/achievement_sky_leather/forearms',0),(11492,11492,'accessories/wearable_items/_exp06/achievement_sky_leather/hands',0),(11493,11493,'accessories/wearable_items/_exp06/achievement_sky_leather/head',0),(11494,11494,'accessories/wearable_items/_exp06/achievement_sky_leather/legs',0),(11495,11495,'accessories/wearable_items/_exp06/achievement_sky_leather/legs_noskirt',0),(11496,11496,'accessories/wearable_items/_exp06/achievement_sky_leather/shoulders',0),(11497,11497,'accessories/wearable_items/_exp06/achievement_sky_vanguard/skirt',0),(11498,11498,'accessories/wearable_items/_exp06/achievement_sky_vanguard/chest',0),(11499,11499,'accessories/wearable_items/_exp06/achievement_sky_vanguard/feet',0),(11500,11500,'accessories/wearable_items/_exp06/achievement_sky_vanguard/forearms',0),(11501,11501,'accessories/wearable_items/_exp06/achievement_sky_vanguard/hands',0),(11502,11502,'accessories/wearable_items/_exp06/achievement_sky_vanguard/head',0),(11503,11503,'accessories/wearable_items/_exp06/achievement_sky_vanguard/legs',0),(11504,11504,'accessories/wearable_items/_exp06/achievement_sky_vanguard/legs_noskirt',0),(11505,11505,'accessories/wearable_items/_exp06/achievement_sky_vanguard/right',0),(11506,11506,'accessories/wearable_items/_exp06/achievement_sky_vanguard/shoulders',0),(11507,11507,'accessories/wearable_items/_exp06/achievement_sky_vanguard/shoulders_nopauldrons',0),(11508,11508,'accessories/wearable_items/_exp06/achievement_swamp_vanguard/skirt',0),(11509,11509,'accessories/wearable_items/_exp06/achievement_swamp_vanguard/chest',0),(11510,11510,'accessories/wearable_items/_exp06/achievement_swamp_vanguard/feet',0),(11511,11511,'accessories/wearable_items/_exp06/achievement_swamp_vanguard/forearms',0),(11512,11512,'accessories/wearable_items/_exp06/achievement_swamp_vanguard/hands',0),(11513,11513,'accessories/wearable_items/_exp06/achievement_swamp_vanguard/head',0),(11514,11514,'accessories/wearable_items/_exp06/achievement_swamp_vanguard/legs',0),(11515,11515,'accessories/wearable_items/_exp06/achievement_swamp_vanguard/legs_noskirt',0),(11516,11516,'accessories/wearable_items/_exp06/achievement_swamp_vanguard/right',0),(11517,11517,'accessories/wearable_items/_exp06/achievement_swamp_vanguard/shoulders',0),(11518,11518,'accessories/wearable_items/_exp06/achievement_swamp_vanguard/shoulders_nopauldrons',0),(11519,11519,'creatures/tu/gods_mithaniel_marr_beard_helm',0),(11520,11520,'creatures/tu/gods_mithaniel_marr_helm_beard_sword',0),(11521,11521,'staticobjects/mirrors/vampire_mirror_nocol',0),(11522,11522,'accessories/wearable_items/_exp06/achievement_fire_robe/skirt',0),(11523,11523,'accessories/wearable_items/_exp06/achievement_fire_robe/chest',0),(11524,11524,'accessories/wearable_items/_exp06/achievement_fire_robe/head',0),(11525,11525,'accessories/wearable_items/_exp06/achievement_fire_robe/hood',0),(11526,11526,'accessories/wearable_items/_exp06/achievement_fire_robe/pants',0),(11527,11527,'accessories/wearable_items/_exp06/achievement_forest_robe/skirt',0),(11528,11528,'accessories/wearable_items/_exp06/achievement_forest_robe/chest',0),(11529,11529,'accessories/wearable_items/_exp06/achievement_forest_robe/head',0),(11530,11530,'accessories/wearable_items/_exp06/achievement_forest_robe/hood',0),(11531,11531,'accessories/wearable_items/_exp06/achievement_forest_robe/pants',0),(11532,11532,'accessories/wearable_items/_exp06/achievement_swamp_robe/skirt',0),(11533,11533,'accessories/wearable_items/_exp06/achievement_swamp_robe/chest',0),(11534,11534,'accessories/wearable_items/_exp06/achievement_swamp_robe/head',0),(11535,11535,'accessories/wearable_items/_exp06/achievement_swamp_robe/hood',0),(11536,11536,'accessories/wearable_items/_exp06/achievement_swamp_robe/pants',0),(11537,11537,'accessories/wieldable_items/shields/exp06/mithaniel_round_shield',0),(11538,11538,'accessories/wearable_items/cloak/exp06/cloak_crystal_shard',0),(11539,11539,'accessories/wieldable_items/weapons/exp04/1h_crush/exp04_1hc_spiked_mace_love',0),(11540,11540,'accessories/wieldable_items/weapons/exp04/1h_crush/exp04_1hc_spiked_mace_sol',0),(11541,11541,'accessories/wearable_items/_exp06/order_of_nature_vanguard/skirt',0),(11542,11542,'accessories/wearable_items/_exp06/order_of_nature_vanguard/chest',0),(11543,11543,'accessories/wearable_items/_exp06/order_of_nature_vanguard/feet',0),(11544,11544,'accessories/wearable_items/_exp06/order_of_nature_vanguard/forearms',0),(11545,11545,'accessories/wearable_items/_exp06/order_of_nature_vanguard/hands',0),(11546,11546,'accessories/wearable_items/_exp06/order_of_nature_vanguard/head',0),(11547,11547,'accessories/wearable_items/_exp06/order_of_nature_vanguard/legs',0),(11548,11548,'accessories/wearable_items/_exp06/order_of_nature_vanguard/legs_noskirt',0),(11549,11549,'accessories/wearable_items/_exp06/order_of_nature_vanguard/right',0),(11550,11550,'accessories/wearable_items/_exp06/order_of_nature_vanguard/shoulders',0),(11551,11551,'accessories/wearable_items/_exp06/order_of_nature_vanguard/shoulders_nopauldrons',0),(11552,11552,'_exp06/zones/objects/exp06_prelude_events/dpo_teleportspires01_phase01_everfrost',0),(11553,11553,'_exp06/zones/objects/exp06_prelude_events/dpo_teleportspires01_phase02_everfrost',0),(11554,11554,'_exp06/zones/objects/exp06_prelude_events/dpo_teleportspires01_phase03_everfrost',0),(11555,11555,'_exp06/zones/objects/exp06_prelude_events/dpo_teleportspires01_phase04_everfrost',0),(11556,11556,'_exp06/zones/objects/exp06_prelude_events/dpo_teleportspires01_phase05_everfrost',0),(11557,11557,'_exp06/zones/objects/exp06_prelude_events/dpo_teleportspires01_phase06_everfrost_final',0),(11558,11558,'staticobjects/liveevent/frostfell/floortile_ice',0),(11559,11559,'staticobjects/liveevent/frostfell/pedestal_table_ice',0),(11560,11560,'staticobjects/liveevent/frostfell/mirror_ice',0),(11561,11561,'staticobjects/liveevent/cityfestivals/freeport_floortile_black',0),(11562,11562,'staticobjects/liveevent/cityfestivals/qeynos_roundcounter',0),(11563,11563,'staticobjects/liveevent/cityfestivals/travelling_cart_twowheel',0),(11564,11564,'staticobjects/liveevent/cityfestivals/travelling_cart_fourwheel',0),(11565,11565,'staticobjects/liveevent/cityfestivals/freeport_candeholder',0),(11566,11566,'staticobjects/liveevent/cityfestivals/freeport_candelabra',0),(11567,11567,'staticobjects/liveevent/cityfestivals/neriak_streetlamp_plain_red',0),(11568,11568,'staticobjects/liveevent/cityfestivals/neriak_streetlamp_plain_purple',0),(11569,11569,'staticobjects/liveevent/cityfestivals/neriak_streetlamp_plain_green',0),(11570,11570,'staticobjects/liveevent/cityfestivals/neriak_streetlamp_plain_blue',0),(11571,11571,'staticobjects/liveevent/cityfestivals/neriak_streetlamp_purple',0),(11572,11572,'staticobjects/liveevent/cityfestivals/neriak_streetlamp_blue',0),(11573,11573,'staticobjects/liveevent/cityfestivals/neriak_streetlamp',0),(11574,11574,'staticobjects/liveevent/cityfestivals/neriak_table_large',0),(11575,11575,'staticobjects/liveevent/cityfestivals/kelethin_chair_royal',0),(11576,11576,'staticobjects/liveevent/cityfestivals/kelethin_table_round_fancy',0),(11577,11577,'staticobjects/liveevent/cityfestivals/kelethin_table_round_inlaid',0),(11578,11578,'staticobjects/liveevent/cityfestivals/kelethin_table_curvy',0),(11579,11579,'staticobjects/liveevent/cityfestivals/kelethin_table_long',0),(11580,11580,'staticobjects/liveevent/cityfestivals/kelethin_table_bedside',0),(11581,11581,'staticobjects/liveevent/cityfestivals/kelethin_desk',0),(11582,11582,'staticobjects/liveevent/cityfestivals/kelethin_chair_leaf',0),(11583,11583,'staticobjects/liveevent/cityfestivals/kelethin_banner_royal',0),(11584,11584,'staticobjects/liveevent/cityfestivals/kelethin_basket_gourd_mixedberry',0),(11585,11585,'staticobjects/liveevent/cityfestivals/kelethin_basket_gourd_raspberry',0),(11586,11586,'staticobjects/liveevent/cityfestivals/kelethin_basket_gourd_cranberry',0),(11587,11587,'staticobjects/liveevent/cityfestivals/kelethin_basket_gourd_blueberry',0),(11588,11588,'staticobjects/liveevent/cityfestivals/kelethin_basket_cranberry',0),(11589,11589,'staticobjects/liveevent/cityfestivals/kelethin_basket_blueberry_short',0),(11590,11590,'staticobjects/liveevent/cityfestivals/kelethin_basket_raspberry',0),(11591,11591,'staticobjects/liveevent/cityfestivals/kelethin_basket_blueberry',0),(11592,11592,'staticobjects/liveevent/cityfestivals/kelethin_shelf_shroom_blue',0),(11593,11593,'staticobjects/liveevent/cityfestivals/kelethin_shelf_shroom',0),(11594,11594,'staticobjects/liveevent/cityfestivals/gorowyn_bankvault',0),(11595,11595,'staticobjects/liveevent/cityfestivals/gorowyn_cauldron',0),(11596,11596,'staticobjects/liveevent/cityfestivals/gorowyn_weaponrack',0),(11597,11597,'staticobjects/liveevent/cityfestivals/gorowyn_scrollcase_dual',0),(11598,11598,'staticobjects/liveevent/cityfestivals/gorowyn_counter',0),(11599,11599,'staticobjects/liveevent/cityfestivals/gorowyn_weathervane',0),(11600,11600,'staticobjects/liveevent/cityfestivals/qeynos_sconce',0),(11601,11601,'staticobjects/liveevent/cityfestivals/freeport_candle',0),(11602,11602,'staticobjects/liveevent/cityfestivals/qeynos_table_pedestal',0),(11603,11603,'staticobjects/liveevent/cityfestivals/gorowyn_table_pedestal',0),(11604,11604,'staticobjects/liveevent/cityfestivals/kelethin_table_pedestal',0),(11605,11605,'staticobjects/liveevent/cityfestivals/neriak_table_pedestal',0),(11606,11606,'staticobjects/liveevent/cityfestivals/freeport_table_pedestal',0),(11607,11607,'staticobjects/liveevent/cityfestivals/qeynos_post',0),(11608,11608,'staticobjects/liveevent/cityfestivals/neriak_post',0),(11609,11609,'staticobjects/liveevent/cityfestivals/kelethin_post',0),(11610,11610,'staticobjects/liveevent/cityfestivals/gorowyn_post',0),(11611,11611,'staticobjects/liveevent/cityfestivals/freeport_post',0),(11612,11612,'staticobjects/liveevent/cityfestivals/qeynos_wallsconce_fancy',0),(11613,11613,'staticobjects/liveevent/cityfestivals/gorowyn_floorlamp_plain',0),(11614,11614,'staticobjects/liveevent/cityfestivals/kelethin_floorlamp_plain',0),(11615,11615,'staticobjects/liveevent/cityfestivals/qeynos_candlestick',0),(11616,11616,'staticobjects/liveevent/cityfestivals/qeynos_quad_lamppost',0),(11617,11617,'staticobjects/liveevent/cityfestivals/qeynos_dual_lamppost',0),(11618,11618,'staticobjects/liveevent/cityfestivals/qeynos_short_lamp',0),(11619,11619,'staticobjects/liveevent/cityfestivals/qeynos_wallhanging_lamp',0),(11620,11620,'staticobjects/liveevent/cityfestivals/gorowyn_brazier',0),(11621,11621,'staticobjects/liveevent/cityfestivals/qeynos_mirror',0),(11622,11622,'staticobjects/liveevent/cityfestivals/neriak_mirror',0),(11623,11623,'staticobjects/liveevent/cityfestivals/kelethin_mirror',0),(11624,11624,'staticobjects/liveevent/cityfestivals/gorowyn_mirror',0),(11625,11625,'staticobjects/liveevent/cityfestivals/freeport_mirror',0),(11626,11626,'staticobjects/liveevent/cityfestivals/freeport_lantern_post_short',0),(11627,11627,'staticobjects/liveevent/cityfestivals/freeport_lantern_post',0),(11628,11628,'staticobjects/liveevent/cityfestivals/freeport_lamppost',0),(11629,11629,'staticobjects/liveevent/cityfestivals/neriak_roundcounter',0),(11630,11630,'staticobjects/liveevent/cityfestivals/kelethin_roundcounter',0),(11631,11631,'staticobjects/liveevent/cityfestivals/gorowyn_roundcounter',0),(11632,11632,'staticobjects/liveevent/cityfestivals/freeport_roundcounter',0),(11633,11633,'staticobjects/liveevent/cityfestivals/freeport_banner',0),(11634,11634,'staticobjects/liveevent/cityfestivals/neriak_candelabra',0),(11635,11635,'staticobjects/liveevent/cityfestivals/neriak_sign',0),(11636,11636,'staticobjects/liveevent/cityfestivals/qeynos_sign',0),(11637,11637,'staticobjects/liveevent/cityfestivals/freeport_sign',0),(11638,11638,'staticobjects/liveevent/cityfestivals/gorowyn_sign',0),(11639,11639,'staticobjects/liveevent/cityfestivals/kelethin_sign',0),(11640,11640,'staticobjects/liveevent/cityfestivals/neriak_wallsign',0),(11641,11641,'staticobjects/liveevent/cityfestivals/qeynos_largecolumn',0),(11642,11642,'staticobjects/liveevent/cityfestivals/gorowyn_largecolumn',0),(11643,11643,'staticobjects/liveevent/cityfestivals/kelethin_largecolumn',0),(11644,11644,'staticobjects/liveevent/cityfestivals/neriak_largecolumn',0),(11645,11645,'staticobjects/liveevent/cityfestivals/freeport_largecolumn',0),(11646,11646,'staticobjects/liveevent/cityfestivals/qeynos_displaycounter',0),(11647,11647,'staticobjects/liveevent/cityfestivals/neriak_displaycounter',0),(11648,11648,'staticobjects/liveevent/cityfestivals/kelethin_displaycounter',0),(11649,11649,'staticobjects/liveevent/cityfestivals/gorowyn_displaycounter',0),(11650,11650,'staticobjects/liveevent/cityfestivals/freeport_displaycounter',0),(11651,11651,'staticobjects/liveevent/cityfestivals/qeynos_floortile_white',0),(11652,11652,'staticobjects/liveevent/cityfestivals/gorowyn_floortile_red',0),(11653,11653,'staticobjects/liveevent/cityfestivals/kelethin_floortile_wood',0),(11654,11654,'staticobjects/liveevent/cityfestivals/neriak_floortile_blue',0),(11655,11655,'accessories/wearable_items/_exp08/dragon_armor/robe_brown/head',1096),(11656,11656,'staticobjects/liveevent/cityfestivals/qeynos_banner',0),(11657,11657,'staticobjects/tapestry/dpo_tapestry_design_shardoflove1',0),(11658,11658,'staticobjects/tapestry/dpo_tapestry_design_shardoflove2',0),(11659,11659,'staticobjects/globes/sol_globe01',0),(11660,11660,'staticobjects/liveevent/eq2anniversary_moon_tapestry01',0),(11661,11661,'staticobjects/liveevent/eq2anniversary_claymore01',0),(11662,11662,'accessories/wearable_items/snapons/backpacks/backpack_frostfell_01',0),(11663,11663,'staticobjects/_exp06/bamboo_stalk_small',0),(11664,11664,'staticobjects/tradeskill_objects/vrsn_fabricbolt01_blue',0),(11665,11665,'staticobjects/tradeskill_objects/vrsn_fabricbolt01_green',0),(11666,11666,'staticobjects/tradeskill_objects/vrsn_fabricbolt01_print01',0),(11667,11667,'staticobjects/tradeskill_objects/vrsn_fabricbolt01_print02',0),(11668,11668,'staticobjects/tradeskill_objects/vrsn_fabricbolt01_print03',0),(11669,11669,'staticobjects/tradeskill_objects/vrsn_fabricbolt01_print04',0),(11670,11670,'staticobjects/tradeskill_objects/vrsn_fabricbolt01_red',0),(11671,11671,'staticobjects/tradeskill_objects/vrsn_fabricbolt01_yellow',0),(11672,11672,'staticobjects/tradeskill_objects/vrsn_loom01',0),(11673,11673,'staticobjects/tradeskill_objects/vrsn_spinningwheel01',0),(11674,11674,'staticobjects/tradeskill_objects/vrsn_table06_sewing',0),(11675,11675,'creatures/tu/rhoen_theer',0),(11676,11676,'creatures/tu/rhoen_theer_evil',0),(11677,11677,'staticobjects/_exp06/dpo_panda_skull',0),(11678,11678,'_exp06/characters/tool_users/crystaline_folk_blue/crystaline_folk_blue',0),(11679,11679,'_exp06/characters/tool_users/crystaline_folk_red/crystaline_folk_red',0),(11680,11680,'accessories/npc_wearables/crystaline_folk/shoulders_right_large',0),(11681,11681,'accessories/npc_wearables/crystaline_folk/chest_huge_back',0),(11682,11682,'accessories/npc_wearables/crystaline_folk/head_crystal_crown',0),(11683,11683,'accessories/npc_wearables/crystaline_folk/legs_both_lower',0),(11684,11684,'accessories/npc_wearables/crystaline_folk/legs_left_lower',0),(11685,11685,'accessories/npc_wearables/crystaline_folk/legs_right_lower',0),(11686,11686,'accessories/npc_wearables/crystaline_folk/shoulders_both_claw',0),(11687,11687,'accessories/npc_wearables/crystaline_folk/shoulders_both_hook',0),(11688,11688,'accessories/npc_wearables/crystaline_folk/shoulders_both_hook_claw',0),(11689,11689,'accessories/npc_wearables/crystaline_folk/shoulders_both_hook_large',0),(11690,11690,'accessories/npc_wearables/crystaline_folk/shoulders_both_large',0),(11691,11691,'accessories/npc_wearables/crystaline_folk/shoulders_left_claw',0),(11692,11692,'accessories/npc_wearables/crystaline_folk/shoulders_left_hook',0),(11693,11693,'accessories/npc_wearables/crystaline_folk/shoulders_left_large',0),(11694,11694,'accessories/npc_wearables/crystaline_folk/shoulders_right_claw',0),(11695,11695,'accessories/npc_wearables/crystaline_folk/shoulders_right_hook',0),(11696,11696,'accessories/npc_wearables/crystaline_folk_blue/shoulders_right_large_blue',0),(11697,11697,'accessories/npc_wearables/crystaline_folk_blue/chest_huge_back_blue',0),(11698,11698,'accessories/npc_wearables/crystaline_folk_blue/legs_both_lower_blue',0),(11699,11699,'accessories/npc_wearables/crystaline_folk_blue/legs_left_lower_blue',0),(11700,11700,'accessories/npc_wearables/crystaline_folk_blue/legs_right_lower_blue',0),(11701,11701,'accessories/npc_wearables/crystaline_folk_blue/shoulders_both_claw_blue',0),(11702,11702,'accessories/npc_wearables/crystaline_folk_blue/shoulders_both_hook_blue',0),(11703,11703,'accessories/npc_wearables/crystaline_folk_blue/shoulders_both_hook_claw_blue',0),(11704,11704,'accessories/npc_wearables/crystaline_folk_blue/shoulders_both_hook_large_blue',0),(11705,11705,'accessories/npc_wearables/crystaline_folk_blue/shoulders_both_large_blue',0),(11706,11706,'accessories/npc_wearables/crystaline_folk_blue/shoulders_left_claw_blue',0),(11707,11707,'accessories/npc_wearables/crystaline_folk_blue/shoulders_left_hook_blue',0),(11708,11708,'accessories/npc_wearables/crystaline_folk_blue/shoulders_left_large_blue',0),(11709,11709,'accessories/npc_wearables/crystaline_folk_blue/shoulders_right_claw_blue',0),(11710,11710,'accessories/npc_wearables/crystaline_folk_blue/shoulders_right_hook_blue',0),(11711,11711,'accessories/npc_wearables/crystaline_folk_red/shoulders_right_large_red',0),(11712,11712,'accessories/npc_wearables/crystaline_folk_red/chest_huge_back_red',0),(11713,11713,'accessories/npc_wearables/crystaline_folk_red/legs_both_lower_red',0),(11714,11714,'accessories/npc_wearables/crystaline_folk_red/legs_left_lower_red',0),(11715,11715,'accessories/npc_wearables/crystaline_folk_red/legs_right_lower_red',0),(11716,11716,'accessories/npc_wearables/crystaline_folk_red/shoulders_both_claw_red',0),(11717,11717,'accessories/npc_wearables/crystaline_folk_red/shoulders_both_hook_claw_red',0),(11718,11718,'accessories/npc_wearables/crystaline_folk_red/shoulders_both_hook_large_red',0),(11719,11719,'accessories/npc_wearables/crystaline_folk_red/shoulders_both_hook_red',0),(11720,11720,'accessories/npc_wearables/crystaline_folk_red/shoulders_both_large_red',0),(11721,11721,'accessories/npc_wearables/crystaline_folk_red/shoulders_left_claw_red',0),(11722,11722,'accessories/npc_wearables/crystaline_folk_red/shoulders_left_hook_red',0),(11723,11723,'accessories/npc_wearables/crystaline_folk_red/shoulders_left_large_red',0),(11724,11724,'accessories/npc_wearables/crystaline_folk_red/shoulders_right_claw_red',0),(11725,11725,'accessories/npc_wearables/crystaline_folk_red/shoulders_right_hook_red',0),(11726,11726,'creatures/monsters/skeletal_pegasus',0),(11727,11727,'accessories/wearable_items/_exp06/defender_of_light_armor_chain/skirt',0),(11728,11728,'accessories/wearable_items/_exp06/defender_of_light_armor_chain/chest',0),(11729,11729,'accessories/wearable_items/_exp06/defender_of_light_armor_chain/feet',0),(11730,11730,'accessories/wearable_items/_exp06/defender_of_light_armor_chain/forearms',0),(11731,11731,'accessories/wearable_items/_exp06/defender_of_light_armor_chain/hands',0),(11732,11732,'accessories/wearable_items/_exp06/defender_of_light_armor_chain/head',0),(11733,11733,'accessories/wearable_items/_exp06/defender_of_light_armor_chain/legs',0),(11734,11734,'accessories/wearable_items/_exp06/defender_of_light_armor_chain/legs_noskirt',0),(11735,11735,'accessories/wearable_items/_exp06/defender_of_light_armor_chain/pauldron_defender_of_light_left',0),(11736,11736,'accessories/wearable_items/_exp06/defender_of_light_armor_chain/pauldron_defender_of_light_right',0),(11737,11737,'accessories/wearable_items/_exp06/defender_of_light_armor_chain/shoulders',0),(11738,11738,'accessories/wearable_items/_exp06/defender_of_light_armor_chain/shoulders_nopauldrons',0),(11739,11739,'accessories/wearable_items/_exp06/order_of_nature_robe/skirt',0),(11740,11740,'accessories/wearable_items/_exp06/order_of_nature_robe/chest',0),(11741,11741,'accessories/wearable_items/_exp06/order_of_nature_robe/feet',0),(11742,11742,'accessories/wearable_items/_exp06/order_of_nature_robe/hands',0),(11743,11743,'accessories/wearable_items/_exp06/order_of_nature_robe/head',0),(11744,11744,'accessories/wearable_items/_exp06/order_of_nature_robe/pants',0),(11745,11745,'creatures/tu/goatman',0),(11746,11746,'creatures/tu/goatman_priest',0),(11747,11747,'creatures/tu/goatman_warlord',0),(11748,11748,'creatures/tu/goatman_warrior',0),(11749,11749,'creatures/tu/goatman_wizard',0),(11750,11750,'_exp06/characters/tool_users/talonite/talonite_male/talonite_male_base_tattoo_thorn_left',0),(11751,11751,'_exp06/characters/tool_users/talonite/talonite_male/talonite_male_base',0),(11752,11752,'_exp06/characters/tool_users/talonite/talonite_male/talonite_male_base_tatto_swirl_left',0),(11753,11753,'_exp06/characters/tool_users/talonite/talonite_male/talonite_male_base_tattoo_swirl_both',0),(11754,11754,'_exp06/characters/tool_users/talonite/talonite_male/talonite_male_base_tattoo_thorn_both',0),(11755,11755,'accessories/npc_wearables/talonite_wearables/talonite_male/armor/added_armor_pieces/shoulders_armor_plate_left',0),(11756,11756,'accessories/npc_wearables/talonite_wearables/talonite_male/armor/added_armor_pieces/shoulders_armor_cloth_left',0),(11757,11757,'accessories/npc_wearables/talonite_wearables/talonite_male/armor/shoulders_armor_plate_right_cloth_left',0),(11758,11758,'accessories/npc_wearables/talonite_wearables/talonite_male/armor/chest_collar_cloth',0),(11759,11759,'accessories/npc_wearables/talonite_wearables/talonite_male/armor/chest_shoulders_cloth',0),(11760,11760,'accessories/npc_wearables/talonite_wearables/talonite_male/armor/feet_armor_plate',0),(11761,11761,'accessories/npc_wearables/talonite_wearables/talonite_male/armor/head_mask_cloth',0),(11762,11762,'accessories/npc_wearables/talonite_wearables/talonite_male/armor/legs_armor_cloth',0),(11763,11763,'accessories/npc_wearables/talonite_wearables/talonite_male/armor/legs_armor_sash',0),(11764,11764,'accessories/npc_wearables/talonite_wearables/talonite_male/armor/shoulders_armor_cloth_both',0),(11765,11765,'accessories/npc_wearables/talonite_wearables/talonite_male/armor/shoulders_armor_plate_both',0),(11766,11766,'accessories/npc_wearables/talonite_wearables/talonite_male/hair/hair_topknot',0),(11767,11767,'accessories/npc_wearables/talonite_wearables/talonite_male/hair/hair_braid',0),(11768,11768,'accessories/npc_wearables/talonite_wearables/talonite_male/hair/hair_long',0),(11769,11769,'accessories/npc_wearables/talonite_wearables/talonite_male/hair/hair_ponytail',0),(11770,11770,'_exp06/monsters/toxxulia',0),(11771,11771,'creatures/monsters/rustmonster_new',0),(11772,11772,'_exp06/characters/monsters/sea_eel/sea_eel',0),(11773,11773,'accessories/wearable_items/snapons/backpacks/backpack_frostfell_02_evil',0),(11774,11774,'accessories/wearable_items/snapons/backpacks/backpack_frostfell_swivel/backpack_frostfell_swivel_urn',0),(11775,11775,'accessories/wearable_items/snapons/backpacks/backpack_frostfell_swivel/backpack_frostfell_swivel_wreath_evil',0),(11776,11776,'accessories/wearable_items/snapons/backpacks/backpack_frostfell_swivel/backpack_frostfell_swivel_skull',0),(11777,11777,'accessories/wearable_items/snapons/backpacks/backpack_frostfell_swivel/backpack_frostfell_swivel_snowbucket_evil',0),(11778,11778,'accessories/wearable_items/snapons/backpacks/backpack_frostfell_swivel/backpack_frostfell_swivel_stocking_evil',0),(11779,11779,'_exp06/zones/objects/exp06_dun_the_sentinel/sentinel_divider_tunnel',0),(11780,11780,'_exp06/zones/objects/exp06_dun_the_sentinel/sentinel_divider',0),(11781,11781,'_exp06/zones/objects/exp06_dun_the_sentinel/sentinel_divider_short',0),(11782,11782,'_exp06/zones/objects/exp06_dun_the_sentinel/sentinel_divider_flat',0),(11783,11783,'_exp06/zones/objects/exp06_dun_the_sentinel/sentinel_divider_frzr',0),(11784,11784,'staticobjects/lighting/dpo_floating_candles_for_cshome',0),(11785,11785,'staticobjects/bottles/vek_bottle02',0),(11786,11786,'staticobjects/bottles/vek_bottle03',0),(11787,11787,'staticobjects/bottles/vek_bottle04_square',0),(11788,11788,'staticobjects/pillow/mistmoore_manor_man_pillow01',0),(11789,11789,'staticobjects/pillow/mistmoore_manor_man_pillow02',0),(11790,11790,'staticobjects/pillow/mistmoore_manor_man_pillow_round01',0),(11791,11791,'staticobjects/rugs/mistmoore_manor_man_rug02',0),(11792,11792,'staticobjects/rugs/mistmoore_manor_man_rug03',0),(11793,11793,'staticobjects/rugs/mistmoore_manor_man_runner01',0),(11794,11794,'_exp05/tool_users/lich_hologram_01',0),(11795,11795,'_exp03/characters/monsters/bone_golem_soot',0),(11796,11796,'_exp05/tool_users/grummus_01_soot',0),(11797,11797,'_exp06/monsters/skull_yellow',0),(11798,11798,'accessories/npc_wearables/talonite_wearables/talonite_male/armor/chest_plate',0),(11799,11799,'accessories/npc_wearables/talonite_wearables/talonite_male/armor/head_plate',0),(11800,11800,'accessories/npc_wearables/talonite_wearables/talonite_male/armor/added_armor_pieces/shoulders_armor_glove_left',0),(11801,11801,'accessories/npc_wearables/talonite_wearables/talonite_male/armor/shoulders_armor_gloves',0),(11802,11802,'accessories/npc_wearables/talonite_wearables/talonite_male/armor/shoulders_armor_plate_glove_left_tatonly',0),(11803,11803,'accessories/npc_wearables/talonite_wearables/talonite_male/armor/shoulders_armor_cloth_globe_left_tatonly',0),(11804,11804,'accessories/wearable_items/halloween_masks/mask_mask/head_white_tintable',0),(11805,11805,'_exp06/characters/monsters/sea_nayad_boss/sea_nayad_boss',0),(11806,11806,'accessories/npc_wearables/sea_nayad_boss/head_eel_hair',0),(11807,11807,'accessories/npc_wearables/sea_nayad_boss/chest_choker',0),(11808,11808,'accessories/wearable_items/_exp06/sea_nayad_boss/sea_nayad_boss_head',0),(11809,11809,'_exp06/zones/objects/exp06_dun_the_sentinel/sen_cage_02_dpo',0),(11810,11810,'_exp06/zones/objects/exp06_dun_the_sentinel/sen_cage_door_02_dpo',0),(11811,11811,'staticobjects/tents/qey_tent01',0),(11812,11812,'staticobjects/liveevent/cityfestivals/dpo_container_beans',0),(11813,11813,'staticobjects/liveevent/cityfestivals/dpo_container_chili',0),(11814,11814,'staticobjects/liveevent/cityfestivals/dpo_container_chili_open',0),(11815,11815,'staticobjects/liveevent/cityfestivals/dpo_container_grain',0),(11816,11816,'staticobjects/liveevent/cityfestivals/dpo_container_orange',0),(11817,11817,'staticobjects/liveevent/cityfestivals/dpo_container_tall_wicker',0),(11818,11818,'staticobjects/boats/farseas_boat_dpo',0),(11819,11819,'accessories/wearable_items/profesion_hats/defender_of_light_helmet_chain/head',0),(11820,11820,'accessories/wearable_items/profesion_hats/defender_of_light_helmet_chain/crest_01',0),(11821,11821,'accessories/wearable_items/profesion_hats/defender_of_light_helmet_chain/crest_03',0),(11822,11822,'accessories/wearable_items/profesion_hats/defender_of_light_helmet_chain/crest_05',0),(11823,11823,'_exp06/characters/monsters/frostfell_cube/frostfell_cube',0),(11824,11824,'accessories/npc_wearables/frostfell_cube/frostfell_cube_goblin',0),(11825,11825,'accessories/npc_wearables/frostfell_cube/frostfell_cube_candycane',0),(11826,11826,'accessories/npc_wearables/frostfell_cube/frostfell_cube_cap',0),(11827,11827,'accessories/npc_wearables/frostfell_cube/frostfell_cube_darkelf',0),(11828,11828,'_exp06/zones/objects/incense_burner_fx',0),(11829,11829,'accessories/wearable_items/profesion_hats/defender_of_light_helmet_leather/head',0),(11830,11830,'creatures/monsters/tyrannosaurus',0),(11831,11831,'creatures/monsters/stegosaurus',0),(11832,11832,'accessories/wearable_items/_exp06/dragon_leather/skirt',0),(11833,11833,'accessories/wearable_items/_exp06/dragon_leather/chest',0),(11834,11834,'accessories/wearable_items/_exp06/dragon_leather/feet',0),(11835,11835,'accessories/wearable_items/_exp06/dragon_leather/forearms',0),(11836,11836,'accessories/wearable_items/_exp06/dragon_leather/hands',0),(11837,11837,'accessories/wearable_items/_exp06/dragon_leather/head',0),(11838,11838,'accessories/wearable_items/_exp06/dragon_leather/legs',0),(11839,11839,'accessories/wearable_items/_exp06/dragon_leather/legs_noskirt',0),(11840,11840,'accessories/wearable_items/_exp06/dragon_leather/shoulders',0),(11841,11841,'_exp06/zones/objects/exp06_dun_the_sentinel/sentinel_container_side',0),(11842,11842,'_exp06/zones/objects/exp06_dun_the_sentinel/sentinel_forcefield',0),(11843,11843,'_exp06/zones/objects/exp06_dun_the_sentinel/sen_switch_base_02',0),(11844,11844,'_exp06/zones/objects/exp06_dun_the_sentinel/swith_sphere_bobbing_01',0),(11845,11845,'_exp06/zones/objects/exp06_dun_the_sentinel/sen_switch_base_01',0),(11846,11846,'_exp06/zones/objects/exp06_dun_the_sentinel/sen_symbol_card_01',0),(11847,11847,'_exp06/zones/objects/exp06_dun_vastydeep02/vasrtydeep02_objects_teleportpad01',0),(11848,11848,'accessories/wearable_items/_exp06/dragon_chain/skirt',0),(11849,11849,'accessories/wearable_items/_exp06/dragon_chain/chest',0),(11850,11850,'accessories/wearable_items/_exp06/dragon_chain/feet',0),(11851,11851,'accessories/wearable_items/_exp06/dragon_chain/forearms',0),(11852,11852,'accessories/wearable_items/_exp06/dragon_chain/hands',0),(11853,11853,'accessories/wearable_items/_exp06/dragon_chain/head',0),(11854,11854,'accessories/wearable_items/_exp06/dragon_chain/head_mask',0),(11855,11855,'accessories/wearable_items/_exp06/dragon_chain/legs',0),(11856,11856,'accessories/wearable_items/_exp06/dragon_chain/legs_noskirt',0),(11857,11857,'accessories/wearable_items/_exp06/dragon_chain/shoulders',0),(11858,11858,'accessories/wearable_items/_exp06/dragon_chain/shoulders_pauldrons',0),(11859,11859,'accessories/wearable_items/_exp06/defender_of_light_armor_magus/skirt',0),(11860,11860,'accessories/wearable_items/_exp06/defender_of_light_armor_magus/arms',0),(11861,11861,'accessories/wearable_items/_exp06/defender_of_light_armor_magus/chest',0),(11862,11862,'accessories/wearable_items/_exp06/defender_of_light_armor_magus/legs',0),(11863,11863,'creatures/tu/livingstatue_tooluser',0),(11864,11864,'_exp01/characters/tool_users/water_djinn_avatar',0),(11865,11865,'ec/pc/erudite/erudite_zombie_male',0),(11866,11866,'_exp06/zones/objects/exp06_dun_vastydeep01/generic01_barrier01_combo01',0),(11867,11867,'staticobjects/_exp06/bamboo_woodpiles',0),(11868,11868,'_exp06/characters/tool_users/coldaine/coldaine_male',0),(11869,11869,'accessories/npc_wearables/coldaine/legs_basic_pants',0),(11870,11870,'accessories/npc_wearables/coldaine/beard_basic_01',0),(11871,11871,'accessories/npc_wearables/coldaine/chest_utility_both',0),(11872,11872,'accessories/npc_wearables/coldaine/chest_utility_both_fur',0),(11873,11873,'accessories/npc_wearables/coldaine/chest_utility_left01',0),(11874,11874,'accessories/npc_wearables/coldaine/chest_utility_left_fur',0),(11875,11875,'accessories/npc_wearables/coldaine/chest_utility_right01',0),(11876,11876,'accessories/npc_wearables/coldaine/chest_utility_right_fur',0),(11877,11877,'accessories/npc_wearables/coldaine/feet_basic_boots',0),(11878,11878,'accessories/npc_wearables/coldaine/forearms_both_armstraps',0),(11879,11879,'accessories/npc_wearables/coldaine/forearms_both_fur',0),(11880,11880,'accessories/npc_wearables/coldaine/forearms_both_fur_armstraps',0),(11881,11881,'accessories/npc_wearables/coldaine/forearms_left_armstrap',0),(11882,11882,'accessories/npc_wearables/coldaine/forearms_left_fur',0),(11883,11883,'accessories/npc_wearables/coldaine/forearms_left_fur_armstrap',0),(11884,11884,'accessories/npc_wearables/coldaine/forearms_right_armstrap',0),(11885,11885,'accessories/npc_wearables/coldaine/forearms_right_fur',0),(11886,11886,'accessories/npc_wearables/coldaine/forearms_right_fur_armstrap',0),(11887,11887,'accessories/npc_wearables/coldaine/hair_basic_01',0),(11888,11888,'accessories/npc_wearables/coldaine/hair_basic_02',0),(11889,11889,'accessories/npc_wearables/coldaine/hair_basic_03',0),(11890,11890,'accessories/wearable_items/_exp06/defender_of_light_armor_robe/skirt',0),(11891,11891,'accessories/wearable_items/_exp06/defender_of_light_armor_robe/chest',0),(11892,11892,'accessories/wearable_items/_exp06/defender_of_light_armor_robe/feet',0),(11893,11893,'accessories/wearable_items/_exp06/defender_of_light_armor_robe/hands',0),(11894,11894,'accessories/wearable_items/_exp06/defender_of_light_armor_robe/head',0),(11895,11895,'accessories/wearable_items/_exp06/defender_of_light_armor_robe/pants',0),(11896,11896,'_exp06/zones/objects/exp06_dun_the_sentinel/sen_apple_plate_dpo',0),(11897,11897,'_exp06/zones/objects/exp06_dun_the_sentinel/sen_cantelope_plate_dpo',0),(11898,11898,'_exp06/zones/objects/exp06_dun_the_sentinel/sen_eaten_plate_05_dpo',0),(11899,11899,'_exp06/zones/objects/exp06_dun_the_sentinel/sen_main_mix_plate_dpo',0),(11900,11900,'_exp06/zones/objects/exp06_dun_the_sentinel/sen_mix_fruit_plate_dpo',0),(11901,11901,'_exp06/zones/objects/exp06_dun_the_sentinel/sen_plate_fish_dpo',0),(11902,11902,'_exp06/zones/objects/exp06_dun_the_sentinel/sen_plate_orange_dpo',0),(11903,11903,'_exp06/zones/objects/exp06_dun_the_sentinel/sen_small_apple_plate_dpo',0),(11904,11904,'_exp06/zones/objects/exp06_dun_the_sentinel/sentinal_obj_appleholder_dpo',0),(11905,11905,'_exp06/zones/objects/exp06_dun_the_sentinel/sentinal_obj_desertholder_dpo',0),(11906,11906,'_exp06/zones/objects/exp06_dun_the_sentinel/sentinal_obj_jello_dpo',0),(11907,11907,'_exp06/zones/objects/exp06_dun_the_sentinel/sentinal_obj_orangeholder_dpo',0),(11908,11908,'_exp06/zones/objects/exp06_dun_the_sentinel/sentinal_obj_piegroup_dpo',0),(11909,11909,'_exp06/zones/objects/exp06_dun_the_sentinel/sentinal_obj_pot_dpo',0),(11910,11910,'_exp06/zones/objects/exp06_dun_the_sentinel/sentinal_obj_punchbowl_dpo',0),(11911,11911,'_exp06/zones/objects/exp06_dun_the_sentinel/sentinal_obj_turkeyplatter_dpo',0),(11912,11912,'accessories/npc_wearables/coldaine/shoulders_basic_right',0),(11913,11913,'accessories/npc_wearables/coldaine/shoulders_basic_both',0),(11914,11914,'accessories/npc_wearables/coldaine/shoulders_basic_left',0),(11915,11915,'staticobjects/shield/broken_heart_shield_dpo',0),(11916,11916,'staticobjects/shield/shard_of_love_tower_shield_dpo',0),(11917,11917,'accessories/wearable_items/_exp06/elf_armor_vanguard_kaborite_black/skirt',0),(11918,11918,'accessories/wearable_items/_exp06/elf_armor_vanguard_kaborite_black/chest',0),(11919,11919,'accessories/wearable_items/_exp06/elf_armor_vanguard_kaborite_black/feet',0),(11920,11920,'accessories/wearable_items/_exp06/elf_armor_vanguard_kaborite_black/forearms',0),(11921,11921,'accessories/wearable_items/_exp06/elf_armor_vanguard_kaborite_black/hands',0),(11922,11922,'accessories/wearable_items/_exp06/elf_armor_vanguard_kaborite_black/head',0),(11923,11923,'accessories/wearable_items/_exp06/elf_armor_vanguard_kaborite_black/legs',0),(11924,11924,'accessories/wearable_items/_exp06/elf_armor_vanguard_kaborite_black/legs_noskirt',0),(11925,11925,'accessories/wearable_items/_exp06/elf_armor_vanguard_kaborite_black/right',0),(11926,11926,'accessories/wearable_items/_exp06/elf_armor_vanguard_kaborite_black/shoulders',0),(11927,11927,'accessories/wearable_items/_exp06/elf_armor_vanguard_kaborite_black/shoulders_nopauldrons',0),(11928,11928,'accessories/wearable_items/_exp06/elf_armor_vanguard_kaborite_gold/skirt',0),(11929,11929,'accessories/wearable_items/_exp06/elf_armor_vanguard_kaborite_gold/chest',0),(11930,11930,'accessories/wearable_items/_exp06/elf_armor_vanguard_kaborite_gold/feet',0),(11931,11931,'accessories/wearable_items/_exp06/elf_armor_vanguard_kaborite_gold/forearms',0),(11932,11932,'accessories/wearable_items/_exp06/elf_armor_vanguard_kaborite_gold/hands',0),(11933,11933,'accessories/wearable_items/_exp06/elf_armor_vanguard_kaborite_gold/head',0),(11934,11934,'accessories/wearable_items/_exp06/elf_armor_vanguard_kaborite_gold/legs',0),(11935,11935,'accessories/wearable_items/_exp06/elf_armor_vanguard_kaborite_gold/legs_noskirt',0),(11936,11936,'accessories/wearable_items/_exp06/elf_armor_vanguard_kaborite_gold/right',0),(11937,11937,'accessories/wearable_items/_exp06/elf_armor_vanguard_kaborite_gold/shoulders',0),(11938,11938,'accessories/wearable_items/_exp06/elf_armor_vanguard_kaborite_gold/shoulders_nopauldrons',0),(11939,11939,'accessories/wearable_items/_exp06/elf_armor_vanguard_kaborite_red/skirt',0),(11940,11940,'accessories/wearable_items/_exp06/elf_armor_vanguard_kaborite_red/chest',0),(11941,11941,'accessories/wearable_items/_exp06/elf_armor_vanguard_kaborite_red/feet',0),(11942,11942,'accessories/wearable_items/_exp06/elf_armor_vanguard_kaborite_red/forearms',0),(11943,11943,'accessories/wearable_items/_exp06/elf_armor_vanguard_kaborite_red/hands',0),(11944,11944,'accessories/wearable_items/_exp06/elf_armor_vanguard_kaborite_red/head',0),(11945,11945,'accessories/wearable_items/_exp06/elf_armor_vanguard_kaborite_red/legs',0),(11946,11946,'accessories/wearable_items/_exp06/elf_armor_vanguard_kaborite_red/legs_noskirt',0),(11947,11947,'accessories/wearable_items/_exp06/elf_armor_vanguard_kaborite_red/right',0),(11948,11948,'accessories/wearable_items/_exp06/elf_armor_vanguard_kaborite_red/shoulders',0),(11949,11949,'accessories/wearable_items/_exp06/elf_armor_vanguard_kaborite_red/shoulders_nopauldrons',0),(11950,11950,'accessories/wearable_items/_exp06/elf_armor_vanguard_kaborite_silver/skirt',0),(11951,11951,'accessories/wearable_items/_exp06/elf_armor_vanguard_kaborite_silver/chest',0),(11952,11952,'accessories/wearable_items/_exp06/elf_armor_vanguard_kaborite_silver/feet',0),(11953,11953,'accessories/wearable_items/_exp06/elf_armor_vanguard_kaborite_silver/forearms',0),(11954,11954,'accessories/wearable_items/_exp06/elf_armor_vanguard_kaborite_silver/hands',0),(11955,11955,'accessories/wearable_items/_exp06/elf_armor_vanguard_kaborite_silver/head',0),(11956,11956,'accessories/wearable_items/_exp06/elf_armor_vanguard_kaborite_silver/legs',0),(11957,11957,'accessories/wearable_items/_exp06/elf_armor_vanguard_kaborite_silver/legs_noskirt',0),(11958,11958,'accessories/wearable_items/_exp06/elf_armor_vanguard_kaborite_silver/right',0),(11959,11959,'accessories/wearable_items/_exp06/elf_armor_vanguard_kaborite_silver/shoulders',0),(11960,11960,'accessories/wearable_items/_exp06/elf_armor_vanguard_kaborite_silver/shoulders_nopauldrons',0),(11961,11961,'accessories/wearable_items/_exp06/plain_robe_cloth_tradeskill/pants',0),(11962,11962,'accessories/wearable_items/_exp06/plain_robe_cloth_tradeskill/chest',0),(11963,11963,'_exp06/characters/tool_users/erudite_classic_male/erudite_classic_male_ghost',0),(11964,11964,'accessories/wearable_items/_exp06/token_reward_tradeskill_robe/skirt',0),(11965,11965,'accessories/wearable_items/_exp06/token_reward_tradeskill_robe/chest',0),(11966,11966,'accessories/wearable_items/_exp06/token_reward_tradeskill_robe/hood',0),(11967,11967,'accessories/wearable_items/_exp06/token_reward_tradeskill_robe/pants',0),(11968,11968,'_exp06/characters/tool_users/coldaine/coldaine_female',0),(11969,11969,'accessories/npc_wearables/coldaine/coldaine_female/legs_basic_pants',0),(11970,11970,'accessories/npc_wearables/coldaine/coldaine_female/chest_basic_strap',0),(11971,11971,'accessories/npc_wearables/coldaine/coldaine_female/chest_basic_strap_fur',0),(11972,11972,'accessories/npc_wearables/coldaine/coldaine_female/feet_basic_boots',0),(11973,11973,'accessories/npc_wearables/coldaine/coldaine_female/feet_basic_fur_cuff',0),(11974,11974,'accessories/npc_wearables/coldaine/coldaine_female/forearms_both_fur_wrap',0),(11975,11975,'accessories/npc_wearables/coldaine/coldaine_female/forearms_both_leather',0),(11976,11976,'accessories/npc_wearables/coldaine/coldaine_female/forearms_both_upper_leather',0),(11977,11977,'accessories/npc_wearables/coldaine/coldaine_female/forearms_left_fur_wrap',0),(11978,11978,'accessories/npc_wearables/coldaine/coldaine_female/forearms_left_leather',0),(11979,11979,'accessories/npc_wearables/coldaine/coldaine_female/forearms_left_upper_leather',0),(11980,11980,'accessories/npc_wearables/coldaine/coldaine_female/forearms_right_fur_wrap',0),(11981,11981,'accessories/npc_wearables/coldaine/coldaine_female/forearms_right_leather',0),(11982,11982,'accessories/npc_wearables/coldaine/coldaine_female/forearms_right_upper_leather',0),(11983,11983,'accessories/npc_wearables/coldaine/coldaine_female/hair_basic_01',0),(11984,11984,'accessories/npc_wearables/coldaine/coldaine_female/head_basic_hood',0),(11985,11985,'accessories/wearable_items/_exp06/dragon_robe/skirt',0),(11986,11986,'accessories/wearable_items/_exp06/dragon_robe/chest',0),(11987,11987,'accessories/wearable_items/_exp06/dragon_robe/feet',0),(11988,11988,'accessories/wearable_items/_exp06/dragon_robe/head',0),(11989,11989,'accessories/wearable_items/_exp06/dragon_robe/hood',0),(11990,11990,'accessories/wearable_items/_exp06/dragon_robe/legs',0),(11991,11991,'accessories/wearable_items/_exp06/dragon_robe/pants',0),(11992,11992,'staticobjects/world_devices/trdskl_achievement_workbench',0),(11993,11993,'staticobjects/world_devices/trdskl_achievement_chemistrytable',0),(11994,11994,'staticobjects/world_devices/trdskl_achievement_engraveddesk',0),(11995,11995,'staticobjects/world_devices/trdskl_achievement_forge',0),(11996,11996,'staticobjects/world_devices/trdskl_achievement_sewingtable_mannequin_loom',0),(11997,11997,'staticobjects/world_devices/trdskl_achievement_stoveandkeg',0),(11998,11998,'staticobjects/world_devices/trdskl_achievement_woodworkingtable',0),(11999,11999,'accessories/npc_wearables/coldaine/hands_basic_ice',0),(12000,12000,'accessories/npc_wearables/coldaine/hands_spiked_ice',0),(12001,12001,'accessories/npc_wearables/coldaine/chest_keg_basic',0),(12002,12002,'staticobjects/_exp06/kerra_spirit_totem_dpo',0),(12003,12003,'_exp06/characters/tool_users/coldaine/coldaine_male_with_keg_walk',0),(12004,12004,'accessories/wieldable_items/shields/exp06/coldaine_ice_shield',0),(12005,12005,'accessories/wieldable_items/weapons/exp06/1h_sword/exp06_1h_axe_coldaine_ice',0),(12006,12006,'_exp06/zones/objects/exp06_dun_the_sentinel/sen_symbol_card_02',0),(12007,12007,'accessories/wearable_items/_exp06/chaos_armor/vanguard_armor/skirt',0),(12008,12008,'accessories/wearable_items/_exp06/chaos_armor/vanguard_armor/chest',0),(12009,12009,'accessories/wearable_items/_exp06/chaos_armor/vanguard_armor/feet',0),(12010,12010,'accessories/wearable_items/_exp06/chaos_armor/vanguard_armor/forearms',0),(12011,12011,'accessories/wearable_items/_exp06/chaos_armor/vanguard_armor/hands',0),(12012,12012,'accessories/wearable_items/_exp06/chaos_armor/vanguard_armor/hands_chaos_gauntlets',0),(12013,12013,'accessories/wearable_items/_exp06/chaos_armor/vanguard_armor/head',0),(12014,12014,'accessories/wearable_items/_exp06/chaos_armor/vanguard_armor/head_chaos_helm',0),(12015,12015,'accessories/wearable_items/_exp06/chaos_armor/vanguard_armor/legs',0),(12016,12016,'accessories/wearable_items/_exp06/chaos_armor/vanguard_armor/legs_chaos_shins',0),(12017,12017,'accessories/wearable_items/_exp06/chaos_armor/vanguard_armor/legs_noskirt',0),(12018,12018,'accessories/wearable_items/_exp06/chaos_armor/vanguard_armor/right',0),(12019,12019,'accessories/wearable_items/_exp06/chaos_armor/vanguard_armor/shoulders',0),(12020,12020,'accessories/wearable_items/_exp06/chaos_armor/vanguard_armor/shoulders_chaos_armor_all',0),(12021,12021,'accessories/wearable_items/_exp06/chaos_armor/vanguard_armor/shoulders_nopauldrons',0),(12022,12022,'accessories/wearable_items/_exp06/chaos_armor/vanguard_armor/snap_ons/chaos_shin_right',0),(12023,12023,'accessories/wearable_items/_exp06/chaos_armor/vanguard_armor/snap_ons/chaos_forearm_left',0),(12024,12024,'accessories/wearable_items/_exp06/chaos_armor/vanguard_armor/snap_ons/chaos_forearm_right',0),(12025,12025,'accessories/wearable_items/_exp06/chaos_armor/vanguard_armor/snap_ons/chaos_pauldrons_lower_left',0),(12026,12026,'accessories/wearable_items/_exp06/chaos_armor/vanguard_armor/snap_ons/chaos_pauldrons_lower_right',0),(12027,12027,'accessories/wearable_items/_exp06/chaos_armor/vanguard_armor/snap_ons/chaos_pauldrons_upper_left',0),(12028,12028,'accessories/wearable_items/_exp06/chaos_armor/vanguard_armor/snap_ons/chaos_pauldrons_upper_right',0),(12029,12029,'accessories/wearable_items/_exp06/chaos_armor/vanguard_armor/snap_ons/chaos_shin_left',0),(12030,12030,'staticobjects/_exp06/erudin_palace_symbol',0),(12031,12031,'staticobjects/_exp06/kerra_vagabond_feather',0),(12032,12032,'accessories/wearable_items/_exp06/dragon_robe/hands',0),(12033,12033,'staticobjects/beds/drv_bed_double_dpo',0),(12034,12034,'staticobjects/bones/bones_cobra_dead',0),(12035,12035,'staticobjects/display_stands/djn_display_stand_steel_large_dpo',0),(12036,12036,'staticobjects/tables/drv_table_dining_ornate02_blue_dpo',0),(12037,12037,'staticobjects/tables/cr_table_map_red_and_black_dpo',0),(12038,12038,'staticobjects/tableware/djn_plate_brass_blue_dpo',0),(12039,12039,'staticobjects/urns/djn_vase_gold02_dpo',0),(12040,12040,'staticobjects/urns/djn_incense_platinum_dpo',0),(12041,12041,'staticobjects/chests/drv_chest_glass',0),(12042,12042,'accessories/wearable_items/_exp06/journeyman_leather_tradeskill/shoulders',0),(12043,12043,'accessories/wearable_items/_exp06/journeyman_leather_tradeskill/chest',0),(12044,12044,'accessories/wearable_items/_exp06/journeyman_leather_tradeskill/feet',0),(12045,12045,'accessories/wearable_items/_exp06/journeyman_leather_tradeskill/forearms',0),(12046,12046,'accessories/wearable_items/_exp06/journeyman_leather_tradeskill/hands',0),(12047,12047,'accessories/wearable_items/_exp06/journeyman_leather_tradeskill/head',0),(12048,12048,'accessories/wearable_items/_exp06/journeyman_leather_tradeskill/legs',0),(12049,12049,'accessories/wearable_items/_exp06/tradeskill_armor_chain_kaborite_black/skirt',0),(12050,12050,'accessories/wearable_items/_exp06/tradeskill_armor_chain_kaborite_black/chest',0),(12051,12051,'accessories/wearable_items/_exp06/tradeskill_armor_chain_kaborite_black/feet',0),(12052,12052,'accessories/wearable_items/_exp06/tradeskill_armor_chain_kaborite_black/forearms',0),(12053,12053,'accessories/wearable_items/_exp06/tradeskill_armor_chain_kaborite_black/hands',0),(12054,12054,'accessories/wearable_items/_exp06/tradeskill_armor_chain_kaborite_black/head',0),(12055,12055,'accessories/wearable_items/_exp06/tradeskill_armor_chain_kaborite_black/legs',0),(12056,12056,'accessories/wearable_items/_exp06/tradeskill_armor_chain_kaborite_black/legs_noskirt',0),(12057,12057,'accessories/wearable_items/_exp06/tradeskill_armor_chain_kaborite_black/shoulders',0),(12058,12058,'accessories/wearable_items/_exp06/tradeskill_armor_chain_kaborite_blue/skirt',0),(12059,12059,'accessories/wearable_items/_exp06/tradeskill_armor_chain_kaborite_blue/chest',0),(12060,12060,'accessories/wearable_items/_exp06/tradeskill_armor_chain_kaborite_blue/feet',0),(12061,12061,'accessories/wearable_items/_exp06/tradeskill_armor_chain_kaborite_blue/forearms',0),(12062,12062,'accessories/wearable_items/_exp06/tradeskill_armor_chain_kaborite_blue/hands',0),(12063,12063,'accessories/wearable_items/_exp06/tradeskill_armor_chain_kaborite_blue/head',0),(12064,12064,'accessories/wearable_items/_exp06/tradeskill_armor_chain_kaborite_blue/legs',0),(12065,12065,'accessories/wearable_items/_exp06/tradeskill_armor_chain_kaborite_blue/legs_noskirt',0),(12066,12066,'accessories/wearable_items/_exp06/tradeskill_armor_chain_kaborite_blue/shoulders',0),(12067,12067,'accessories/wearable_items/_exp06/tradeskill_armor_chain_kaborite_gold/skirt',0),(12068,12068,'accessories/wearable_items/_exp06/tradeskill_armor_chain_kaborite_gold/chest',0),(12069,12069,'accessories/wearable_items/_exp06/tradeskill_armor_chain_kaborite_gold/feet',0),(12070,12070,'accessories/wearable_items/_exp06/tradeskill_armor_chain_kaborite_gold/forearms',0),(12071,12071,'accessories/wearable_items/_exp06/tradeskill_armor_chain_kaborite_gold/hands',0),(12072,12072,'accessories/wearable_items/_exp06/tradeskill_armor_chain_kaborite_gold/head',0),(12073,12073,'accessories/wearable_items/_exp06/tradeskill_armor_chain_kaborite_gold/legs',0),(12074,12074,'accessories/wearable_items/_exp06/tradeskill_armor_chain_kaborite_gold/legs_noskirt',0),(12075,12075,'accessories/wearable_items/_exp06/tradeskill_armor_chain_kaborite_gold/shoulders',0),(12076,12076,'accessories/wearable_items/_exp06/tradeskill_armor_chain_kaborite_green/skirt',0),(12077,12077,'accessories/wearable_items/_exp06/tradeskill_armor_chain_kaborite_green/chest',0),(12078,12078,'accessories/wearable_items/_exp06/tradeskill_armor_chain_kaborite_green/feet',0),(12079,12079,'accessories/wearable_items/_exp06/tradeskill_armor_chain_kaborite_green/forearms',0),(12080,12080,'accessories/wearable_items/_exp06/tradeskill_armor_chain_kaborite_green/hands',0),(12081,12081,'accessories/wearable_items/_exp06/tradeskill_armor_chain_kaborite_green/head',0),(12082,12082,'accessories/wearable_items/_exp06/tradeskill_armor_chain_kaborite_green/legs',0),(12083,12083,'accessories/wearable_items/_exp06/tradeskill_armor_chain_kaborite_green/legs_noskirt',0),(12084,12084,'accessories/wearable_items/_exp06/tradeskill_armor_chain_kaborite_green/shoulders',0),(12085,12085,'accessories/wearable_items/_exp06/tradeskill_armor_chain_kaborite_metallic/skirt',0),(12086,12086,'accessories/wearable_items/_exp06/tradeskill_armor_chain_kaborite_metallic/chest',0),(12087,12087,'accessories/wearable_items/_exp06/tradeskill_armor_chain_kaborite_metallic/feet',0),(12088,12088,'accessories/wearable_items/_exp06/tradeskill_armor_chain_kaborite_metallic/forearms',0),(12089,12089,'accessories/wearable_items/_exp06/tradeskill_armor_chain_kaborite_metallic/hands',0),(12090,12090,'accessories/wearable_items/_exp06/tradeskill_armor_chain_kaborite_metallic/head',0),(12091,12091,'accessories/wearable_items/_exp06/tradeskill_armor_chain_kaborite_metallic/legs',0),(12092,12092,'accessories/wearable_items/_exp06/tradeskill_armor_chain_kaborite_metallic/legs_noskirt',0),(12093,12093,'accessories/wearable_items/_exp06/tradeskill_armor_chain_kaborite_metallic/shoulders',0),(12094,12094,'staticobjects/_exp06/cooked_fish',0),(12095,12095,'staticobjects/_exp06/panda_skull',0),(12096,12096,'staticobjects/benches/cm_bench_long',0),(12097,12097,'staticobjects/benches/cm_bench_short',0),(12098,12098,'staticobjects/stainedglass/dpo_shimplatform_karnors_stainedglass',0),(12099,12099,'staticobjects/stainedglass/dpo_shimplatform_befallen_stainedglass',0),(12100,12100,'staticobjects/stainedglass/dpo_shimplatform_qeystainglass03',0),(12101,12101,'staticobjects/stainedglass/dpo_shimplatform_chardok_stainedglass',0),(12102,12102,'staticobjects/stainedglass/dpo_shimplatform_mmc_stainedglass02',0),(12103,12103,'accessories/wearable_items/_exp08/dragon_armor/robe_brown/head_collar',1096),(12104,12104,'accessories/wearable_items/_exp08/dragon_armor/robe_brown/pants',1096),(12105,12105,'staticobjects/chairs/mc_couch_purple_dpo',0),(12106,12106,'staticobjects/chairs/mc_couch_yellow_dpo',0),(12107,12107,'staticobjects/chairs/mc_couch_green_dpo',0),(12108,12108,'staticobjects/chairs/mc_couch_red_dpo',0),(12109,12109,'accessories/wearable_items/_exp08/dragon_armor/robe_green/skirt',1096),(12110,12110,'accessories/wearable_items/_exp08/dragon_armor/robe_green/chest',1096),(12111,12111,'accessories/wearable_items/_exp08/dragon_armor/robe_green/chest_epic',1096),(12112,12112,'staticobjects/bookcases/vastydeep_library01_stacks',0),(12113,12113,'accessories/wearable_items/_exp08/dragon_armor/robe_green/feet',1096),(12114,12114,'staticobjects/dividers/paineel_screen_triple',0),(12115,12115,'staticobjects/dividers/sentinel_divider_02',0),(12116,12116,'staticobjects/dividers/erudin_screen_triple',0),(12117,12117,'staticobjects/dressers/washbasin_dresser_wood_gold_dpo',0),(12118,12118,'staticobjects/dressers/cm_dresser_single01',0),(12119,12119,'staticobjects/dressers/cm_dresser_servant01',0),(12120,12120,'staticobjects/beds/sentinel_bed_small_01',0),(12121,12121,'staticobjects/beds/sentinel_bed_main_02',0),(12122,12122,'staticobjects/banners/erudin_banner01_long_red',0),(12123,12123,'staticobjects/banners/erudin_banner03_long_green',0),(12124,12124,'staticobjects/banners/erudin_banner02_long_blue',0),(12125,12125,'staticobjects/fires/fel_firepit_dpo',0),(12126,12126,'staticobjects/mirrors/dpo_mosaic_mirror',0),(12127,12127,'staticobjects/mirrors/erudin_reflecting_mirror',0),(12128,12128,'staticobjects/urns/sentinel_vase_water_dpo',0),(12129,12129,'staticobjects/urns/erudin_vase01_w_plant01',0),(12130,12130,'staticobjects/urns/fel_vase_large02',0),(12131,12131,'staticobjects/platforms/shim_liftplatform_water',0),(12132,12132,'staticobjects/platforms/shim_liftplatform_jello',0),(12133,12133,'staticobjects/platforms/shim_liftplatform_lava',0),(12134,12134,'staticobjects/platforms/shim_liftplatform_mirror',0),(12135,12135,'staticobjects/maps/sentinel_main_map_02',0),(12136,12136,'staticobjects/maps/sentinel_globe_assembly',0),(12137,12137,'staticobjects/maps/sentinel_main_map_01',0),(12138,12138,'staticobjects/tables/erudin_table01',0),(12139,12139,'staticobjects/tables/fel_winetable_dpo',0),(12140,12140,'staticobjects/tables/cm_table_magical',0),(12141,12141,'staticobjects/tables/cm_table_long_dpo',0),(12142,12142,'staticobjects/tables/cm_table_hallway01',0),(12143,12143,'staticobjects/tables/cm_table_bedside01',0),(12144,12144,'staticobjects/tables/drv_table_dining_ornate02_sumac_dpo',0),(12145,12145,'staticobjects/rugs/erudin_rug_biground',0),(12146,12146,'staticobjects/rugs/erudin_rug03_bigred',0),(12147,12147,'staticobjects/rugs/erudin_rug02_purple',0),(12148,12148,'staticobjects/rugs/erudin_rug01_blue',0),(12149,12149,'staticobjects/lighting/erudin_floor_lamp01_light',0),(12150,12150,'staticobjects/lighting/erudin_wall_lamp04_light',0),(12151,12151,'staticobjects/lighting/erudin_wall_lamp03_light',0),(12152,12152,'staticobjects/lighting/erudin_ceiling_lamp01_light',0),(12153,12153,'staticobjects/lighting/erudin_ceiling_lamp02_light',0),(12154,12154,'staticobjects/lighting/cm_candlestick02',0),(12155,12155,'staticobjects/lighting/cm_table_candelabra01',0),(12156,12156,'staticobjects/lighting/cm_chandelier02_swinging',0),(12157,12157,'staticobjects/lighting/cm_chandelier01_swinging',0),(12158,12158,'staticobjects/soe_wallet/discoball_purple',0),(12159,12159,'staticobjects/soe_wallet/discoball_gold',0),(12160,12160,'staticobjects/tableware/fel_jug_water01',0),(12161,12161,'accessories/wieldable_items/weapons/exp05/exp05_2hc_zombie_shovel_dpo',0),(12162,12162,'accessories/wearable_items/_exp06/erudite_classic_armor/erudite_classic_armor_robe_black/skirt',0),(12163,12163,'accessories/wearable_items/_exp06/erudite_classic_armor/erudite_classic_armor_robe_black/chest',0),(12164,12164,'accessories/wearable_items/_exp06/erudite_classic_armor/erudite_classic_armor_robe_black/head',0),(12165,12165,'accessories/wearable_items/_exp06/erudite_classic_armor/erudite_classic_armor_robe_black/head_for_classic_erudite',0),(12166,12166,'accessories/wearable_items/_exp06/erudite_classic_armor/erudite_classic_armor_robe_black/hood',0),(12167,12167,'accessories/wearable_items/_exp06/erudite_classic_armor/erudite_classic_armor_robe_black/pants',0),(12168,12168,'staticobjects/tables/man_desk_ornate01_dpo',0),(12169,12169,'staticobjects/chairs/cm_diningchair_yellow_dpo',0),(12170,12170,'staticobjects/chairs/cm_diningchair_blue_dpo',0),(12171,12171,'staticobjects/chairs/cm_diningchair_green_dpo',0),(12172,12172,'staticobjects/chairs/cm_diningchair_purple_dpo',0),(12173,12173,'staticobjects/chairs/cm_diningchair_red_dpo',0),(12174,12174,'accessories/wearable_items/_exp08/dragon_armor/robe_green/hands',1096),(12175,12175,'staticobjects/chairs/mc_couch_blue_dpo',0),(12176,12176,'staticobjects/chairs/man_chair_large01_blue_dpo',0),(12177,12177,'staticobjects/chairs/man_chair_large01_green_dpo',0),(12178,12178,'staticobjects/chairs/man_chair_large01_purple_dpo',0),(12179,12179,'staticobjects/chairs/man_chair_large01_red_dpo',0),(12180,12180,'staticobjects/chairs/man_chair_large01_yellow_dpo',0),(12181,12181,'staticobjects/chairs/man_couch_double01_blue_dpo',0),(12182,12182,'staticobjects/chairs/man_couch_double01_green_dpo',0),(12183,12183,'staticobjects/chairs/man_couch_double01_purple_dpo',0),(12184,12184,'staticobjects/chairs/man_couch_double01_red_dpo',0),(12185,12185,'staticobjects/chairs/man_couch_double01_yellow_dpo',0),(12186,12186,'staticobjects/beds/man_bed_master01_yellow_dpo',0),(12187,12187,'staticobjects/beds/man_bed_master01_blue_dpo',0),(12188,12188,'staticobjects/beds/man_bed_master01_green_dpo',0),(12189,12189,'staticobjects/beds/man_bed_master01_purple_dpo',0),(12190,12190,'staticobjects/beds/man_bed_master01_red_dpo',0),(12191,12191,'staticobjects/beds/man_bed_master01_redtapestry_dpo',0),(12192,12192,'staticobjects/tables/man_desk_ornate01_sumac_dpo',0),(12193,12193,'staticobjects/tents/qey_tent01_farseas',0),(12194,12194,'creatures/monsters/bear_panda',0),(12195,12195,'staticobjects/nektulos/nekcas_eviltrinket_severedhand001',0),(12196,12196,'creatures/pets/pet_kitten/odus_kitten',0),(12197,12197,'_exp04/monsters/clay_golem_storm_pet_nfs',0),(12198,12198,'_exp04/monsters/clay_golem_storm_pet_nfs_epic',0),(12199,12199,'_exp06/characters/monsters/sea_nayad_fire/sea_nayad_fire',0),(12200,12200,'_exp06/characters/monsters/sea_nayad_fire/sea_nayad_fire_epic',0),(12201,12201,'creatures/monsters/roper_crystal',0),(12202,12202,'creatures/monsters/roper_crystal_epic',0),(12203,12203,'staticobjects/crystals/dpo_kaborite_crucible',0),(12204,12204,'staticobjects/_exp06/dpo_kaborite_crystalshard01',0),(12205,12205,'staticobjects/tools/humantools_mineshovel01_dpo',0),(12206,12206,'staticobjects/tools/humantoolsfarmpitchfork01_dpo',0),(12207,12207,'accessories/wearable_items/_exp06/mermaid_scale_armor/shoulders',0),(12208,12208,'accessories/wearable_items/_exp06/mermaid_scale_armor/chest',0),(12209,12209,'accessories/wearable_items/_exp06/mermaid_scale_armor/feet',0),(12210,12210,'accessories/wearable_items/_exp06/mermaid_scale_armor/forearms',0),(12211,12211,'accessories/wearable_items/_exp06/mermaid_scale_armor/hands',0),(12212,12212,'accessories/wearable_items/_exp06/mermaid_scale_armor/head',0),(12213,12213,'accessories/wearable_items/_exp06/mermaid_scale_armor/legs',0),(12214,12214,'ec/npc/skeletonorc_armor_greater',0),(12215,12215,'ec/npc/skeletonorc_armor_lesser',0),(12216,12216,'_exp05/monsters/animatedhand_01_water',0),(12217,12217,'staticobjects/stainedglass/dpo_shimplatform_manor_stainedglass',0),(12218,12218,'staticobjects/stainedglass/dpo_shimplatform_qeystainglass01',0),(12219,12219,'staticobjects/chairs/edk_chair002_fancy_dark',0),(12220,12220,'accessories/wearable_items/cloak/exp06/cloak_mermaid_scale',0),(12221,12221,'staticobjects/chairs/cm_chaise_yellow_dpo',0),(12222,12222,'staticobjects/chairs/cm_chaise_blue_dpo',0),(12223,12223,'staticobjects/chairs/cm_chaise_green_dpo',0),(12224,12224,'staticobjects/chairs/cm_chaise_purple_dpo',0),(12225,12225,'staticobjects/chairs/cm_chaise_red_dpo',0),(12226,12226,'staticobjects/panels/dpo_vrsn_ceilingstars_panel',0),(12227,12227,'staticobjects/panels/dpo_clouds_panel',0),(12228,12228,'staticobjects/panels/dpo_cobblestone_panel',0),(12229,12229,'staticobjects/panels/dpo_sewer_ceilingglow_panel',0),(12230,12230,'staticobjects/panels/dpo_mmc_tile03_panel',0),(12231,12231,'staticobjects/panels/dpo_mmc_tile01_panel',0),(12232,12232,'staticobjects/panels/dpo_bluemosaic_panel',0),(12233,12233,'accessories/npc_wearables/talonite_wearables/talonite_male/armor/chest_no_appearance',0),(12234,12234,'accessories/wearable_items/_exp06/demonic_chain/shoulders_demonic_skull_pauldrons',0),(12235,12235,'accessories/wearable_items/_exp06/demonic_leather/demonic_skull_pauldron_left',0),(12236,12236,'accessories/wearable_items/_exp06/demonic_leather/shoulders_demonic_skull_pauldrons',0),(12237,12237,'accessories/wearable_items/_exp06/demonic_leather/demonic_skull_pauldron_right',0),(12238,12238,'accessories/wearable_items/_exp06/demonic_robe/chest_demonic_skull_pauldrons',0),(12239,12239,'accessories/wearable_items/_exp06/demonic_robe/demonic_skull_pauldron_left',0),(12240,12240,'accessories/wearable_items/_exp06/demonic_robe/demonic_skull_pauldron_right',0),(12241,12241,'staticobjects/easels/easel_square_tree_circle',0),(12242,12242,'staticobjects/soe_wallet/man_dresser_mayong01',0),(12243,12243,'staticobjects/soe_wallet/man_coffin_bed_black_white',0),(12244,12244,'staticobjects/soe_wallet/man_coffin_bed_black_blue',0),(12245,12245,'staticobjects/soe_wallet/man_coffin_bed_black_red',0),(12246,12246,'accessories/wieldable_items/weapons/soe_wallet/hearts_wand',0),(12247,12247,'accessories/wieldable_items/weapons/soe_wallet/bubble_wand',0),(12248,12248,'accessories/wieldable_items/weapons/soe_wallet/evilstars_wand',0),(12249,12249,'staticobjects/_exp06/observatory_concentrator_fixed',0),(12250,12250,'staticobjects/_exp06/observatory_concentrator_cracked',0),(12251,12251,'staticobjects/_exp06/kerra_coconut',0),(12252,12252,'accessories/wearable_items/_exp06/six_vet_reward/head',0),(12253,12253,'accessories/wearable_items/cloak/exp06/cloak_six_vet_cloak',0),(12254,12254,'staticobjects/soe_wallet/ebony_bdrm_armoire_dpo',0),(12255,12255,'staticobjects/soe_wallet/ebony_bdrm_dresser_dpo',0),(12256,12256,'staticobjects/soe_wallet/ebony_vanity_washing_table_closed_dpo',0),(12257,12257,'staticobjects/soe_wallet/ebony_vanity_stool_dpo',0),(12258,12258,'staticobjects/soe_wallet/plushie_envenomed_servant',0),(12259,12259,'staticobjects/soe_wallet/ebony_vanity_washing_table_dpo',0),(12260,12260,'staticobjects/soe_wallet/ebony_vanity_table_mirror_dpo',0),(12261,12261,'staticobjects/soe_wallet/ebony_vanity_mirror_dpo',0),(12262,12262,'staticobjects/soe_wallet/ebony_vanity_drawers_dpo',0),(12263,12263,'staticobjects/soe_wallet/ebony_office_desk_dpo',0),(12264,12264,'staticobjects/soe_wallet/ebony_office_chest_w_goldcoins_dpo',0),(12265,12265,'staticobjects/soe_wallet/ebony_office_chair_dpo',0),(12266,12266,'staticobjects/soe_wallet/ebony_office_bookshelf_tall_dpo',0),(12267,12267,'staticobjects/soe_wallet/ebony_office_bookshelf_small_dpo',0),(12268,12268,'staticobjects/soe_wallet/ebony_living_table_end_dpo',0),(12269,12269,'staticobjects/soe_wallet/ebony_living_table_coffee_dpo',0),(12270,12270,'staticobjects/soe_wallet/ebony_living_loveseat_pillows_dpo',0),(12271,12271,'staticobjects/soe_wallet/ebony_living_couch_pillows_dpo',0),(12272,12272,'staticobjects/soe_wallet/ebony_dining_table_dpo',0),(12273,12273,'staticobjects/soe_wallet/ebony_dining_chair_dpo',0),(12274,12274,'staticobjects/soe_wallet/ebony_dining_cabinet_dpo',0),(12275,12275,'staticobjects/soe_wallet/ebony_dining_bench_dpo',0),(12276,12276,'staticobjects/soe_wallet/ebony_bdrm_nightstand_dpo',0),(12277,12277,'staticobjects/soe_wallet/ebony_vanity_dresser_dpo',0),(12278,12278,'staticobjects/soe_wallet/ebony_bdrm_bed_sleigh_dpo',0),(12279,12279,'staticobjects/easels/easel_square_abstract_bluedrip',0),(12280,12280,'staticobjects/easels/easel_square_abstract_green',0),(12281,12281,'staticobjects/easels/easel_square_abstract_orange',0),(12282,12282,'staticobjects/easels/easel_square_abstract_purple',0),(12283,12283,'staticobjects/easels/easel_square_abstract_red',0),(12284,12284,'staticobjects/easels/easel_square_armored',0),(12285,12285,'staticobjects/easels/easel_square_camels_circle',0),(12286,12286,'staticobjects/easels/easel_square_castle',0),(12287,12287,'staticobjects/easels/easel_square_everlingdaughter02',0),(12288,12288,'staticobjects/easels/easel_square_garinok',0),(12289,12289,'staticobjects/easels/easel_square_inn',0),(12290,12290,'staticobjects/easels/easel_square_knight',0),(12291,12291,'staticobjects/easels/easel_square_lion',0),(12292,12292,'staticobjects/easels/easel_square_map',0),(12293,12293,'staticobjects/easels/easel_square_oldman',0),(12294,12294,'staticobjects/easels/easel_square_pie',0),(12295,12295,'staticobjects/easels/easel_square_potions',0),(12296,12296,'staticobjects/easels/easel_square_rivervaleboats',0),(12297,12297,'staticobjects/easels/easel_square_rivervalechart',0),(12298,12298,'staticobjects/liveevent/frostfell/dpo_holiday_snowpile_fog',0),(12299,12299,'staticobjects/liveevent/frostfell/dpo_holiday_dirtpile_fog',0),(12300,12300,'accessories/wearable_items/cloak/exp06/cloak_six_vet_cloak_red',0),(12301,12301,'accessories/wearable_items/_exp06/six_vet_reward_red/head',0),(12302,12302,'_exp05/tool_users/mummy_variant_mage_greater',0),(12303,12303,'accessories/wieldable_items/weapons/exp06/1h_crush/1h_crush_fish_club',0),(12304,12304,'_exp06/zones/objects/exp06_dun_the_sentinel/sentinel_rm06_stairs',0),(12305,12305,'accessories/wieldable_items/weapons/exp06/great_spear/broom',0),(12306,12306,'staticobjects/_exp06/odso_toxx_vinebud01',0),(12307,12307,'staticobjects/liveevent/erollisi_objects/errolisi_cookie_plate01',0),(12308,12308,'staticobjects/liveevent/erollisi_objects/errolisi_candles_pinkwhite01',0),(12309,12309,'staticobjects/liveevent/erollisi_objects/errolisi_candles_purplewhite01',0),(12310,12310,'staticobjects/liveevent/erollisi_objects/errolisi_candles_redwhite01',0),(12311,12311,'staticobjects/_exp06/kerra_drum',0),(12312,12312,'accessories/wearable_items/profesion_hats/fungus_man_cap/fungus_man_cap_flat/head',0),(12313,12313,'accessories/wearable_items/profesion_hats/fungus_man_cap/fungus_man_cap_pointy/head',0),(12314,12314,'_exp06/zones/objects/exp06_rgn_odus_north/quest_object_egg',0),(12315,12315,'staticobjects/_exp06/open_rat_trap',0),(12316,12316,'staticobjects/_exp06/panda_statue_completed',0),(12317,12317,'staticobjects/_exp06/closed_rat_trap',0),(12318,12318,'accessories/wearable_items/snapons/backpacks/backpack_frostfell_swivel/backpack_frostfell_swivel_jug',0),(12319,12319,'accessories/wearable_items/snapons/backpacks/backpack_frostfell_swivel/backpack_frostfell_swivel_snowbucket',0),(12320,12320,'accessories/wearable_items/snapons/backpacks/backpack_frostfell_swivel/backpack_frostfell_swivel_stocking',0),(12321,12321,'accessories/wearable_items/snapons/backpacks/backpack_frostfell_swivel/backpack_frostfell_swivel_wreath',0),(12322,12322,'accessories/wieldable_items/shields/exp06/demonic_round_shield',0),(12323,12323,'accessories/wieldable_items/weapons/exp06/1h_sword/exp06_1h_sword_demonic',0),(12324,12324,'staticobjects/_exp06/hua_scroll_01',0),(12325,12325,'staticobjects/_exp06/hua_scroll_02',0),(12326,12326,'staticobjects/_exp06/so_rock_01',0),(12327,12327,'staticobjects/_exp06/so_rock_02',0),(12328,12328,'staticobjects/_exp06/hua_table_small',0),(12329,12329,'staticobjects/_exp06/hua_tea_kettle',0),(12330,12330,'staticobjects/_exp06/hua_weaponrack',0),(12331,12331,'staticobjects/_exp06/ishaq_podium',0),(12332,12332,'staticobjects/_exp06/barrel_fish',0),(12333,12333,'staticobjects/_exp06/square_crate',0),(12334,12334,'staticobjects/_exp06/dpo_dirtmound',0),(12335,12335,'staticobjects/_exp06/dpo_totem_tentpole',0),(12336,12336,'staticobjects/_exp06/dpo_open_book',0),(12337,12337,'staticobjects/_exp06/book_pile_01',0),(12338,12338,'accessories/npc_wearables/talonite_wearables/tallonite_weapons/dragon_katana',0),(12339,12339,'accessories/npc_wearables/talonite_wearables/tallonite_weapons/korsha_staff2h',0),(12340,12340,'accessories/npc_wearables/talonite_wearables/tallonite_weapons/scimitar_tallonite',0),(12341,12341,'accessories/npc_wearables/talonite_wearables/tallonite_weapons/tallonite_longbow_2hb',0),(12342,12342,'_exp06/zones/objects/exp06_dun_erudin_palace/erudin03_symbol_r04',0),(12343,12343,'creatures/mounts/lynx_mount/lynx_mount_heavy_armor',0),(12344,12344,'staticobjects/_exp06/steam_bowl_01',0),(12345,12345,'staticobjects/_exp06/harvest/exp06_gem_node',0),(12346,12346,'staticobjects/_exp06/harvest/exp06_wood_node',0),(12347,12347,'staticobjects/_exp06/harvest/exp06_ore_node',0),(12348,12348,'staticobjects/_exp06/harvest/exp06_root_node',0),(12349,12349,'staticobjects/_exp06/harvest/exp06_den_node',0),(12350,12350,'staticobjects/_exp06/harvest/exp06_bush_node',0),(12351,12351,'staticobjects/_exp06/roekillik_weaponrack',0),(12352,12352,'staticobjects/_exp06/human_cart',0),(12353,12353,'staticobjects/_exp06/stable_trough_long',0),(12354,12354,'staticobjects/_exp06/hua_basket_tall',0),(12355,12355,'staticobjects/_exp06/storage_box_01',0),(12356,12356,'staticobjects/_exp06/collectionbox_01',0),(12357,12357,'staticobjects/_exp06/square_crate_02',0),(12358,12358,'staticobjects/_exp06/dead_rat',0),(12359,12359,'staticobjects/_exp06/weeds_brown',0),(12360,12360,'staticobjects/_exp06/tablet_scribbles_01',0),(12361,12361,'staticobjects/_exp06/tablet_scribbles_02',0),(12362,12362,'staticobjects/_exp06/tablet_scribbles_03',0),(12363,12363,'staticobjects/_exp06/kaborite_gem',0),(12364,12364,'staticobjects/_exp06/toxfly_egg',0),(12365,12365,'staticobjects/_exp06/hua_cup_01',0),(12366,12366,'staticobjects/_exp06/odso_small_tox_tree_01',0),(12367,12367,'staticobjects/_exp06/odso_dagger001_plain',0),(12368,12368,'staticobjects/_exp06/odso_dagger001_ornate',0),(12369,12369,'staticobjects/_exp06/odso_dirtmound01',0),(12370,12370,'staticobjects/_exp06/exp06_plant_harvesting',0),(12371,12371,'staticobjects/_exp06/exp06_bush_harvesting',0),(12372,12372,'staticobjects/_exp06/odso_panda_totem_tradeskill',0),(12373,12373,'staticobjects/_exp06/odso_mushroom01',0),(12374,12374,'staticobjects/_exp06/odso_small_tox_tree_02',0),(12375,12375,'accessories/wearable_items/_exp06/dragon_leather/head_dragon_helm',0),(12376,12376,'staticobjects/carts/klakanon_mine_cart',0),(12377,12377,'staticobjects/gears/square_gear_inactive',0),(12378,12378,'accessories/wearable_items/snapons/armbands/shoulders_armband_strap_right',0),(12379,12379,'accessories/wearable_items/snapons/armbands/shoulders_armband_gems_both',0),(12380,12380,'accessories/wearable_items/snapons/armbands/shoulders_armband_gems_left',0),(12381,12381,'accessories/wearable_items/snapons/armbands/shoulders_armband_gems_right',0),(12382,12382,'accessories/wearable_items/snapons/armbands/shoulders_armband_golden_both',0),(12383,12383,'accessories/wearable_items/snapons/armbands/shoulders_armband_golden_left',0),(12384,12384,'accessories/wearable_items/snapons/armbands/shoulders_armband_golden_right',0),(12385,12385,'accessories/wearable_items/snapons/armbands/shoulders_armband_strap_both',0),(12386,12386,'accessories/wearable_items/snapons/armbands/shoulders_armband_strap_left',0),(12387,12387,'accessories/wearable_items/snapons/armbands/shoulders_armband_gems_silver_both',0),(12388,12388,'accessories/wearable_items/snapons/armbands/shoulders_armband_gems_silver_left',0),(12389,12389,'accessories/wearable_items/snapons/armbands/shoulders_armband_gems_silver_right',0),(12390,12390,'accessories/wearable_items/snapons/armbands/shoulders_armband_silver_both',0),(12391,12391,'accessories/wearable_items/snapons/armbands/shoulders_armband_silver_left',0),(12392,12392,'accessories/wearable_items/snapons/armbands/shoulders_armband_silver_right',0),(12393,12393,'accessories/wearable_items/_exp06/erudite_classic_armor/erudite_classic_armor_robe_white/erudite_robe_pauldron_right',0),(12394,12394,'accessories/wearable_items/_exp06/erudite_classic_armor/erudite_classic_armor_robe_white/chest_epic_pauldrons',0),(12395,12395,'accessories/wearable_items/_exp06/erudite_classic_armor/erudite_classic_armor_robe_white/erudite_robe_pauldron_left',0),(12396,12396,'accessories/wearable_items/cloak/exp06/cloak_rune_10',0),(12397,12397,'accessories/wearable_items/cloak/exp06/cloak_rune_13',0),(12398,12398,'creatures/tu/ettin_new',0),(12399,12399,'_exp06/characters/monsters/sea_dragon_undead/sea_dragon_undead',0),(12400,12400,'accessories/wearable_items/cloak/exp06/cloak_rune_13_leafy',0),(12401,12401,'staticobjects/_exp06/odno_erudin_macguffin01',0),(12402,12402,'staticobjects/_exp06/tox_flowerbud_small',0),(12403,12403,'staticobjects/_exp06/dpo_kaborite_crucible',0),(12404,12404,'staticobjects/_exp06/dpo_odso_chest02_w_lid',0),(12405,12405,'staticobjects/_exp02/ss_vase_porcelain_small02',0),(12406,12406,'staticobjects/_exp02/dn_lightsource_clawlamp_withorbs01_blue',0),(12407,12407,'staticobjects/_exp02/dn_lightsource_clawlamp_withorbs_orangegreen',0),(12408,12408,'staticobjects/_exp02/dn_lightsource_lantern01',0),(12409,12409,'staticobjects/_exp02/dn_lightsource_lavaskullwell01',0),(12410,12410,'staticobjects/_exp02/dn_lightsource_shadowlamp01_orange',0),(12411,12411,'staticobjects/_exp02/dn_tapestry_hide01',0),(12412,12412,'staticobjects/_exp02/dn_tapestry_wing_dead01',0),(12413,12413,'staticobjects/_exp02/hf_egg_holder_large01',0),(12414,12414,'staticobjects/_exp02/hf_lightsource_chandalier_bones_center01',0),(12415,12415,'staticobjects/_exp02/hf_weapons_wall_shield01',0),(12416,12416,'staticobjects/_exp02/los_jail_cell_piece01',0),(12417,12417,'staticobjects/_exp02/ls_decoration_wall_dragonhead01',0),(12418,12418,'staticobjects/_exp02/ls_dragoneggs_mixed',0),(12419,12419,'staticobjects/_exp02/ls_vase_curved01',0),(12420,12420,'staticobjects/_exp02/ls_vase_curved02',0),(12421,12421,'staticobjects/_exp02/rd_nest_blue_draconian_wall01',0),(12422,12422,'staticobjects/_exp02/rn_bones_skull01',0),(12423,12423,'staticobjects/_exp02/rn_lightsource_torch01',0),(12424,12424,'staticobjects/_exp02/sos_aviak_bench01',0),(12425,12425,'staticobjects/_exp02/sos_aviak_stool01',0),(12426,12426,'staticobjects/_exp02/sos_aviak_weaponstand01',0),(12427,12427,'staticobjects/_exp02/sos_banner_awakened_dpo',0),(12428,12428,'staticobjects/_exp02/sos_banner_erudite_dpo',0),(12429,12429,'staticobjects/_exp02/sos_dragoneggs_unbroken_blue',0),(12430,12430,'staticobjects/_exp02/sos_dragoneggs_unbroken_pink',0),(12431,12431,'staticobjects/_exp02/sos_dragoneggs_unbroken_purple',0),(12432,12432,'staticobjects/_exp02/sos_lightsource_chandelier_orange_swinging',0),(12433,12433,'staticobjects/_exp02/sos_lightsource_hanginglamp_swinging',0),(12434,12434,'staticobjects/_exp02/sos_pillows_red_group01',0),(12435,12435,'staticobjects/_exp02/sos_trophy_dragon',0),(12436,12436,'staticobjects/_exp02/sos_trophy_insect',0),(12437,12437,'staticobjects/_exp02/ss_bookcase_ornate01',0),(12438,12438,'staticobjects/_exp02/ss_bookcase_ornate_ceiling01',0),(12439,12439,'staticobjects/_exp02/ss_vase_curved01',0),(12440,12440,'staticobjects/_exp02/ss_vase_curved02',0),(12441,12441,'staticobjects/_exp02/ss_vase_porcelain_large01',0),(12442,12442,'staticobjects/_exp02/ss_vase_porcelain_large02',0),(12443,12443,'accessories/npc_wearables/talonite_wearables/tallonite_weapons/tallonite_longbow',0),(12444,12444,'staticobjects/papers/floor_paper_human_written01_raised_noflutter',0),(12445,12445,'accessories/npc_wearables/talonite_wearables/tallonite_weapons/katana_1h_tallonite',0),(12446,12446,'accessories/npc_wearables/talonite_wearables/tallonite_weapons/silvertip_sword_1h_tallonite',0),(12447,12447,'staticobjects/shop/floor_displaycase_any_ornate01_small',0),(12448,12448,'staticobjects/mirrors/dpo_charasis_mirror_ice',0),(12449,12449,'creatures/mounts/flying_disc/flying_disc_good_fx',0),(12450,12450,'_exp06/monsters/goo_energy_globs',0),(12451,12451,'accessories/wieldable_items/weapons/exp05/exp05_2hc_zombie_shovel_dpo2',0),(12452,12452,'staticobjects/promo_items/promo_alkaborrest_statue01',0),(12453,12453,'accessories/wearable_items/_exp08/dragon_armor/robe_green/head',1096),(12454,12454,'accessories/wearable_items/_exp08/dragon_armor/robe_green/head_collar',1096),(12455,12455,'accessories/wearable_items/_exp08/dragon_armor/robe_green/pants',1096),(12456,12456,'accessories/wearable_items/_exp08/dragon_armor/robe_ivory/skirt',1096),(12457,12457,'accessories/wearable_items/_exp08/dragon_armor/robe_ivory/chest',1096),(12458,12458,'accessories/wearable_items/_exp08/dragon_armor/robe_ivory/chest_epic',1096),(12459,12459,'accessories/wearable_items/_exp08/dragon_armor/robe_ivory/feet',1096),(12460,12460,'accessories/wearable_items/_exp08/dragon_armor/robe_ivory/hands',1096),(12461,12461,'accessories/wearable_items/_exp08/dragon_armor/robe_ivory/head',1096),(12462,12462,'accessories/wearable_items/_exp08/dragon_armor/robe_ivory/head_collar',1096),(12463,12463,'accessories/wearable_items/_exp06/ornate_robe01/head',0),(12464,12464,'accessories/wearable_items/_exp06/ornate_robe01/skirt',0),(12465,12465,'accessories/wearable_items/_exp06/ornate_robe01/chest',0),(12466,12466,'accessories/wearable_items/_exp06/ornate_robe01/hood',0),(12467,12467,'accessories/wearable_items/_exp06/ornate_robe01/pants',0),(12468,12468,'staticobjects/_exp06/kerra_plate_of_cheese',0),(12469,12469,'creatures/monsters/roper_petrified',0),(12470,12470,'_exp06/characters/tool_users/construct_necro/construct_necro_dark',0),(12471,12471,'_exp06/characters/tool_users/construct_necro/construct_necro',0),(12472,12472,'_exp06/characters/tool_users/construct_necro/construct_necro_boss',0),(12473,12473,'accessories/npc_wearables/construct_necro/chest_construct_necro_tank_dark',0),(12474,12474,'accessories/npc_wearables/construct_necro/chest_construct_necro_boss',0),(12475,12475,'accessories/npc_wearables/construct_necro/chest_construct_necro_dps',0),(12476,12476,'accessories/npc_wearables/construct_necro/chest_construct_necro_dps_dark',0),(12477,12477,'accessories/npc_wearables/construct_necro/chest_construct_necro_tank',0),(12478,12478,'creatures/monsters/dervish_petrified',0),(12479,12479,'staticobjects/_exp06/odso_observatory_table',0),(12480,12480,'staticobjects/_exp06/kerra_table_square01',0),(12481,12481,'staticobjects/_exp06/kerra_table_round01',0),(12482,12482,'staticobjects/_exp06/kerra_scratchingpost02',0),(12483,12483,'staticobjects/_exp06/kerra_scratchingpost01',0),(12484,12484,'staticobjects/_exp06/kerra_torch01',0),(12485,12485,'staticobjects/_exp06/kerra_chair_tall01',0),(12486,12486,'staticobjects/_exp06/kerra_chair_short01',0),(12487,12487,'staticobjects/_exp06/kerra_basket_tall_grain02',0),(12488,12488,'staticobjects/_exp06/kerra_basket_tall_covered01',0),(12489,12489,'staticobjects/_exp06/kerra_banner_stand',0),(12490,12490,'staticobjects/_exp06/kerra_stairs01',0),(12491,12491,'staticobjects/_exp06/kerra_kejek_totem01',0),(12492,12492,'staticobjects/_exp06/hua_totem01',0),(12493,12493,'staticobjects/_exp06/hua_statue_traveler03',0),(12494,12494,'staticobjects/_exp06/hua_statue_traveler02',0),(12495,12495,'staticobjects/_exp06/hua_statue_traveler01',0),(12496,12496,'staticobjects/_exp06/hua_light_short',0),(12497,12497,'staticobjects/_exp06/hua_light_tall',0),(12498,12498,'staticobjects/_exp06/hua_table_short',0),(12499,12499,'staticobjects/_exp06/hua_table_low',0),(12500,12500,'staticobjects/_exp06/hua_food_container',0),(12501,12501,'staticobjects/_exp06/hua_chair_tall',0),(12502,12502,'staticobjects/_exp06/hua_chair_low',0),(12503,12503,'staticobjects/_exp06/hua_mat_round',0),(12504,12504,'staticobjects/_exp06/hua_mat_bed',0),(12505,12505,'staticobjects/_exp06/hua_basket_fish',0),(12506,12506,'staticobjects/_exp06/hua_basket_empty01',0),(12507,12507,'staticobjects/_exp06/hua_basket_oranges',0),(12508,12508,'staticobjects/_exp06/hua_banner02',0),(12509,12509,'staticobjects/_exp06/hua_banner01',0),(12510,12510,'staticobjects/_exp06/hua_umbrella_01',0),(12511,12511,'staticobjects/_exp06/hua_potion_sack_01',0),(12512,12512,'staticobjects/_exp06/hua_inkwell_01',0),(12513,12513,'staticobjects/_exp06/hua_bedroll01',0),(12514,12514,'staticobjects/_exp06/odno_bench_wide01',0),(12515,12515,'staticobjects/_exp06/odno_bench_small01',0),(12516,12516,'staticobjects/_exp06/odno_bench_platform01',0),(12517,12517,'staticobjects/_exp06/odso_bottle_glass03',0),(12518,12518,'staticobjects/_exp06/odso_bottle_glass02',0),(12519,12519,'staticobjects/_exp06/odso_bottle_glass01',0),(12520,12520,'staticobjects/_exp06/paineel_wall_weaponrack',0),(12521,12521,'staticobjects/_exp06/odso_barrel_fish',0),(12522,12522,'staticobjects/_exp06/odso_rattrap_closed',0),(12523,12523,'staticobjects/_exp06/odso_rattrap_open',0),(12524,12524,'staticobjects/_exp06/odso_gem_emeraldcut',0),(12525,12525,'staticobjects/_exp06/paineel_table_shelves01',0),(12526,12526,'staticobjects/_exp06/paineel_table_round01',0),(12527,12527,'staticobjects/_exp06/paineel_table_necromy01',0),(12528,12528,'staticobjects/_exp06/paineel_necro_desk01',0),(12529,12529,'staticobjects/_exp06/paineel_table_merchant01',0),(12530,12530,'staticobjects/_exp06/paineel_table_hutch_wings',0),(12531,12531,'staticobjects/_exp06/paineel_pedestal01',0),(12532,12532,'staticobjects/_exp06/paineel_podium01',0),(12533,12533,'staticobjects/_exp06/paineel_wall_lamp01',0),(12534,12534,'staticobjects/_exp06/paineel_street_lamp01',0),(12535,12535,'staticobjects/_exp06/paineel_sculpture01',0),(12536,12536,'staticobjects/_exp06/paineel_floor_lamp01',0),(12537,12537,'staticobjects/_exp06/paineel_bookcase_tall01',0),(12538,12538,'staticobjects/_exp06/paineel_bench_01',0),(12539,12539,'staticobjects/_exp06/paineel_chair_03',0),(12540,12540,'staticobjects/lighting/erudin_wall_lamp01_light',0),(12541,12541,'staticobjects/liveevent/cityfestivals/dpo_halas_table_lantern',0),(12542,12542,'creatures/tu/earth_elemental_petrified',0),(12543,12543,'staticobjects/bookcases/hum_bookcase001_rural_dark',0),(12544,12544,'creatures/monsters/tiger_white_black_stripe',0),(12545,12545,'creatures/monsters/dispacer_beast_fire_epic',0),(12546,12546,'creatures/monsters/dispacer_beast_fire',0),(12547,12547,'accessories/wearable_items/_exp06/guardian_reasoned_robe/skirt',0),(12548,12548,'accessories/wearable_items/_exp06/guardian_reasoned_robe/chest',0),(12549,12549,'accessories/wearable_items/_exp06/guardian_reasoned_robe/feet',0),(12550,12550,'accessories/wearable_items/_exp06/guardian_reasoned_robe/hands',0),(12551,12551,'accessories/wearable_items/_exp06/guardian_reasoned_robe/head_collar',0),(12552,12552,'accessories/wearable_items/_exp06/guardian_reasoned_robe/pants',0),(12553,12553,'accessories/wearable_items/_exp06/guardian_reasoned_robe/pauldron_left',0),(12554,12554,'accessories/wearable_items/_exp06/guardian_reasoned_robe/pauldron_right',0),(12555,12555,'_exp04/monsters/stoneent_petrified',0),(12556,12556,'accessories/wearable_items/snapons/rings/hand_ring_copper_gems_jade_right/hands',0),(12557,12557,'accessories/wearable_items/snapons/rings/hand_ring_copper_right/hands',0),(12558,12558,'accessories/wearable_items/snapons/rings/hand_ring_gold_gems_amber_right/hands',0),(12559,12559,'accessories/wearable_items/snapons/rings/hand_ring_gold_gems_ruby_right/hands',0),(12560,12560,'accessories/wearable_items/snapons/rings/hand_ring_gold_right/hands',0),(12561,12561,'accessories/wearable_items/snapons/rings/hand_ring_silver_gems_amethyst_right/hands',0),(12562,12562,'accessories/wearable_items/snapons/rings/hand_ring_silver_gems_azure_right/hands',0),(12563,12563,'accessories/wearable_items/snapons/rings/hand_ring_silver_right/hands',0),(12564,12564,'accessories/wearable_items/snapons/rings/hand_ring_triple_gems_azure_right/hands',0),(12565,12565,'accessories/wearable_items/snapons/rings/hand_ring_triple_gems_jade_right/hands',0),(12566,12566,'accessories/wearable_items/_exp06/guardian_learned_robe/skirt',0),(12567,12567,'accessories/wearable_items/_exp06/guardian_learned_robe/chest',0),(12568,12568,'accessories/wearable_items/_exp06/guardian_learned_robe/feet',0),(12569,12569,'accessories/wearable_items/_exp06/guardian_learned_robe/hands',0),(12570,12570,'accessories/wearable_items/_exp06/guardian_learned_robe/head_collar',0),(12571,12571,'accessories/wearable_items/_exp06/guardian_learned_robe/pants',0),(12572,12572,'accessories/wearable_items/_exp06/guardian_learned_robe/pauldron_left',0),(12573,12573,'accessories/wearable_items/_exp06/guardian_learned_robe/pauldron_right',0),(12574,12574,'accessories/wearable_items/_exp06/dartain_robe/skirt',0),(12575,12575,'accessories/wearable_items/_exp06/dartain_robe/chest',0),(12576,12576,'accessories/wearable_items/_exp06/dartain_robe/chest_pauldrons',0),(12577,12577,'accessories/wearable_items/_exp06/dartain_robe/dartain_pauldron_left',0),(12578,12578,'accessories/wearable_items/_exp06/dartain_robe/dartain_pauldron_right',0),(12579,12579,'accessories/wearable_items/_exp06/dartain_robe/feet',0),(12580,12580,'accessories/wearable_items/_exp06/dartain_robe/hands',0),(12581,12581,'accessories/wearable_items/_exp06/dartain_robe/head',0),(12582,12582,'accessories/wearable_items/_exp06/dartain_robe/head_collar',0),(12583,12583,'accessories/wearable_items/_exp06/dartain_robe/pants',0),(12584,12584,'_exp06/zones/objects/exp06_dun_erudin_palace/erudin03_secret_wall',0),(12585,12585,'accessories/wieldable_items/weapons/staff/globe_of_everburning_flame/globe_of_everburning_flame',0),(12586,12586,'staticobjects/liveevent/brew_day/dpo_drv_cup_ornate_brass',0),(12587,12587,'staticobjects/liveevent/brew_day/dpo_drv_cup_ornate_pewter',0),(12588,12588,'staticobjects/liveevent/brew_day/dpo_drv_kegstand_keg01_swinging',0),(12589,12589,'staticobjects/liveevent/brew_day/dpo_drv_wine_bottle_ornate_brass',0),(12590,12590,'staticobjects/liveevent/brew_day/dpo_drv_wine_bottle_ornate_pewter',0),(12591,12591,'staticobjects/liveevent/brew_day/dpo_tapestry_design_beerfest',0),(12592,12592,'staticobjects/_exp06/odso_paineel_mailbox',0),(12593,12593,'accessories/wearable_items/_exp08/dragon_armor/robe_ivory/pants',1096),(12594,12594,'accessories/wearable_items/_exp08/dragon_armor/robe_red/skirt',1096),(12595,12595,'accessories/wearable_items/_exp08/dragon_armor/robe_red/chest',1096),(12596,12596,'accessories/wearable_items/_exp08/dragon_armor/robe_red/chest_epic',1096),(12597,12597,'accessories/wearable_items/_exp08/dragon_armor/robe_red/feet',1096),(12598,12598,'accessories/wearable_items/_exp08/dragon_armor/robe_red/hands',1096),(12599,12599,'accessories/wearable_items/_exp08/dragon_armor/robe_red/head',1096),(12600,12600,'accessories/wearable_items/_exp08/dragon_armor/robe_red/hood',1096),(12601,12601,'accessories/wearable_items/_exp08/dragon_armor/robe_red/pants',1096),(12602,12602,'accessories/wearable_items/_exp08/dragon_armor/robe_shadow/skirt',1096),(12603,12603,'accessories/wearable_items/_exp08/dragon_armor/robe_shadow/chest',1096),(12604,12604,'accessories/wearable_items/_exp08/dragon_armor/robe_shadow/chest_epic',1096),(12605,12605,'creatures/tu/rhoen_theer_spirit',0),(12606,12606,'creatures/mounts/lynx_mount/lynx_mount_bare',0),(12607,12607,'staticobjects/liveevent/brew_day/dpo_drv_kegstand01',0),(12608,12608,'accessories/wieldable_items/weapons/fist/mystical_claws_of_jojo/mystical_claws_of_jojo',0),(12609,12609,'_exp06/zones/objects/plunderable_loot/vastydeep01_objects01_banner01',0),(12610,12610,'_exp06/zones/objects/plunderable_loot/vastydeep02_objects01_banner01',0),(12611,12611,'_exp06/zones/objects/plunderable_loot/vastydeep03_objects01_vase06',0),(12612,12612,'_exp06/zones/objects/plunderable_loot/vase_small_full_01',0),(12613,12613,'_exp06/zones/objects/plunderable_loot/sent_rug_01',0),(12614,12614,'_exp06/zones/objects/plunderable_loot/sent_big_chair_01',0),(12615,12615,'_exp06/zones/objects/plunderable_loot/th_banners_b01',0),(12616,12616,'_exp06/zones/objects/plunderable_loot/th_lrge_lamp_stand_fx',0),(12617,12617,'_exp06/zones/objects/plunderable_loot/th_crystals_crystal01',0),(12618,12618,'_exp06/zones/objects/plunderable_loot/erudin_rug_round_lrg01',0),(12619,12619,'_exp06/zones/objects/plunderable_loot/erudin_banner02_long',0),(12620,12620,'_exp06/zones/objects/plunderable_loot/erudin_bench02',0),(12621,12621,'_exp06/characters/monsters/erudite_lich/erudite_lich',0),(12622,12622,'staticobjects/liveevent/brew_day/dpo_sentinal_obj_cake01',0),(12623,12623,'staticobjects/liveevent/brew_day/dpo_halfing_churner01_keg',0),(12624,12624,'staticobjects/liveevent/bristlebane_day/dpo_halfing_candle_log01',0),(12625,12625,'staticobjects/liveevent/bristlebane_day/dpo_halfing_churner01',0),(12626,12626,'staticobjects/liveevent/bristlebane_day/dpo_halfing_display_gordflask01',0),(12627,12627,'staticobjects/liveevent/bristlebane_day/dpo_halfing_tablekeg01_lg',0),(12628,12628,'staticobjects/liveevent/bristlebane_day/dpo_sen_apple_bitten',0),(12629,12629,'staticobjects/liveevent/bristlebane_day/dpo_sen_food_lettuce',0),(12630,12630,'staticobjects/liveevent/bristlebane_day/dpo_sentinal_obj_hummus',0),(12631,12631,'staticobjects/liveevent/bristlebane_day/dpo_sentinal_obj_pie02',0),(12632,12632,'_exp06/zones/objects/exp06_rgn_odus_north/respawn_graves',0),(12633,12633,'_exp06/zones/objects/exp06_dun_erudin_library/weapon_wrench',0),(12634,12634,'_exp06/zones/objects/exp06_dun_erudin_library/corpse_01_chest',0),(12635,12635,'_exp06/zones/objects/exp06_dun_erudin_library/corpse_02_chest',0),(12636,12636,'_exp06/zones/objects/exp06_dun_erudin_library/corpse_bench',0),(12637,12637,'_exp06/zones/objects/exp06_dun_erudin_library/corpse_rug',0),(12638,12638,'_exp06/zones/objects/exp06_dun_erudin_library/corpse_screen',0),(12639,12639,'_exp06/zones/objects/exp06_dun_erudin_library/corpse_table',0),(12640,12640,'_exp06/zones/objects/exp06_dun_erudin_library/corpse_vase',0),(12641,12641,'_exp06/zones/objects/exp06_dun_erudin_library/weapon_candlestick',0),(12642,12642,'_exp06/zones/objects/exp06_dun_erudin_library/weapon_chain_of_office',0),(12643,12643,'_exp06/zones/objects/exp06_dun_erudin_library/weapon_dagger',0),(12644,12644,'_exp06/zones/objects/exp06_dun_erudin_library/weapon_staff',0),(12645,12645,'_exp06/zones/objects/exp06_dun_erudin_library/weapon_wand',0),(12646,12646,'_exp06/zones/objects/dragoneggs_hatching',0),(12647,12647,'_exp06/zones/objects/exp06_dun_vastydeep01/vastydeep01_objects01_shellrecepticle01',1045),(12648,12648,'accessories/wieldable_items/weapons/exp06/bow/exp06_bow_of_the_underfoot',1045),(12649,12649,'_exp06/zones/objects/collection_rewards/erudin_chest02_w_lid01',1045),(12650,12650,'_exp06/zones/objects/collection_rewards/eru_research_stool01',1045),(12651,12651,'_exp06/zones/objects/collection_rewards/sentinel_small_crate_01',1045),(12652,12652,'_exp06/zones/objects/collection_rewards/sentinel_stool_01',1045),(12653,12653,'_exp06/zones/objects/collection_rewards/sentinel_scroll_single_cap_01',1045),(12654,12654,'_exp06/zones/objects/collection_rewards/sen_potions05',1045),(12655,12655,'_exp06/zones/objects/collection_rewards/sen_potions04',1045),(12656,12656,'_exp06/zones/objects/collection_rewards/sen_potions01',1045),(12657,12657,'_exp06/zones/objects/collection_rewards/sen_potions02',1045),(12658,12658,'_exp06/zones/objects/collection_rewards/vastydeep01_objects01_wheelbarrow01',1045),(12659,12659,'_exp06/zones/objects/collection_rewards/vastydeep03_objects01_vase07',1045),(12660,12660,'_exp06/zones/objects/collection_rewards/vastydeep03_objects01_vase01',1045),(12661,12661,'_exp06/zones/objects/collection_rewards/vastydeep03_objects01_vase05',1045),(12662,12662,'_exp06/zones/objects/exp06_dun_erudin_research/reflecting_mirror',1045),(12663,12663,'accessories/wearable_items/_exp06/chaos_armor/robe_armor/skirt',1045),(12664,12664,'accessories/wearable_items/_exp06/chaos_armor/robe_armor/chest',1045),(12665,12665,'accessories/wearable_items/_exp06/chaos_armor/robe_armor/chest_chaos_pauldrons',1045),(12666,12666,'accessories/wearable_items/_exp06/chaos_armor/robe_armor/head',1045),(12667,12667,'accessories/wearable_items/_exp06/chaos_armor/robe_armor/head_chaos_helm',1045),(12668,12668,'accessories/wearable_items/_exp06/chaos_armor/robe_armor/head_collar',1045),(12669,12669,'accessories/wearable_items/_exp06/chaos_armor/robe_armor/pants',1045),(12670,12670,'accessories/wearable_items/_exp06/chaos_armor/robe_armor/snap_ons/chaos_pauldrons_upper_right',1045),(12671,12671,'accessories/wearable_items/_exp06/chaos_armor/robe_armor/snap_ons/chaos_pauldrons_lower_left',1045),(12672,12672,'accessories/wearable_items/_exp06/chaos_armor/robe_armor/snap_ons/chaos_pauldrons_lower_right',1045),(12673,12673,'accessories/wearable_items/_exp06/chaos_armor/robe_armor/snap_ons/chaos_pauldrons_upper_left',1045),(12674,12674,'creatures/monsters/snake_black_red',1045),(12675,12675,'creatures/monsters/snake_black',1045),(12676,12676,'_exp06/characters/monsters/erudite_lich/classic_erudite_lich',1045),(12677,12677,'_exp06/characters/tool_users/roekillik_female/roekillik_female_ghost',1045),(12678,12678,'_exp06/characters/tool_users/roekillik_male/roekillik_male_ghost',1045),(12679,12679,'accessories/wearable_items/_exp05/guk_turtle_vanguard/shoulders_turtle_pauldrons_both',1045),(12680,12680,'accessories/wearable_items/_exp05/guk_turtle_vanguard/chest',1045),(12681,12681,'accessories/wearable_items/_exp05/guk_turtle_vanguard/feet',1045),(12682,12682,'accessories/wearable_items/_exp05/guk_turtle_vanguard/forearms',1045),(12683,12683,'accessories/wearable_items/_exp05/guk_turtle_vanguard/guk_turtle_knee_plate_left',1045),(12684,12684,'accessories/wearable_items/_exp05/guk_turtle_vanguard/guk_turtle_knee_plate_right',1045),(12685,12685,'accessories/wearable_items/_exp05/guk_turtle_vanguard/hands',1045),(12686,12686,'accessories/wearable_items/_exp05/guk_turtle_vanguard/legs_noskirt',1045),(12687,12687,'accessories/wearable_items/_exp05/guk_turtle_vanguard/legs_turtle_kneepads',1045),(12688,12688,'accessories/wearable_items/_exp05/guk_turtle_vanguard/right',1045),(12689,12689,'accessories/wearable_items/_exp05/guk_turtle_vanguard/shoulders',1045),(12690,12690,'accessories/wearable_items/_exp05/guk_turtle_vanguard/shoulders_nopauldrons',1045),(12691,12691,'ec/pc/kerra/kerra_female_ghost_loop',1045),(12692,12692,'ec/pc/kerra/kerra_male_ghost_loop',1045),(12693,12693,'accessories/wearable_items/_exp06/shiny_robe_of_the_underfoot/chest',1045),(12694,12694,'accessories/wearable_items/_exp06/shiny_robe_of_the_underfoot/feet',1045),(12695,12695,'accessories/wearable_items/_exp06/shiny_robe_of_the_underfoot/hands',1045),(12696,12696,'accessories/wearable_items/_exp06/shiny_robe_of_the_underfoot/head',1045),(12697,12697,'accessories/wearable_items/_exp06/shiny_robe_of_the_underfoot/pants',1045),(12698,12698,'accessories/wearable_items/_exp06/shiny_robe_of_the_underfoot/skirt',1045),(12699,12699,'creatures/monsters/winged_nightmare_transport',1045),(12700,12700,'accessories/wearable_items/_exp06/shiny_robe_of_the_underfoot/chest_disc',1045),(12701,12701,'accessories/wearable_items/_exp06/shiny_robe_of_the_underfoot/chest_disc_pauldrons',1045),(12702,12702,'accessories/wearable_items/_exp06/shiny_robe_of_the_underfoot/chest_pauldrons',1045),(12703,12703,'accessories/wearable_items/_exp06/shiny_robe_of_the_underfoot/crystal_disc',1045),(12704,12704,'accessories/wearable_items/_exp06/shiny_robe_of_the_underfoot/shiny_robe_of_the_underfoot_pauldron_left',1045),(12705,12705,'accessories/wearable_items/_exp06/shiny_robe_of_the_underfoot/shiny_robe_of_the_underfoot_pauldron_right',1045),(12706,12706,'accessories/wieldable_items/shields/exp06/chaos_shield',1045),(12707,12707,'accessories/wearable_items/_exp06/tradeskill_armor_cloth_shamrocks/feet',1045),(12708,12708,'accessories/wearable_items/snapons/fx/feet_trail_shamrocks',1045),(12709,12709,'staticobjects/liveevent/brew_day/dpo_brewday_frothy_mug01',1045),(12710,12710,'staticobjects/liveevent/brew_day/dpo_brewday_frothy_mug02',1045),(12711,12711,'staticobjects/liveevent/brew_day/dpo_brewday_frothy_mug03',1045),(12712,12712,'accessories/wieldable_items/misc/stein002_plain_frothy',1045),(12713,12713,'accessories/wieldable_items/weapons/staff/cobra_staff/cobra_staff_plain_shissar',1045),(12714,12714,'staticobjects/_exp06/erudin_bench02_globe',1045),(12715,12715,'staticobjects/_exp06/erudin_library_orb',1045),(12716,12716,'staticobjects/_exp06/erudin_library_r01_transporter',1045),(12717,12717,'staticobjects/_exp06/erudin_library_bookcase_sliding01',1045),(12718,12718,'staticobjects/_exp06/erudin_table01_marble',1045),(12719,12719,'staticobjects/_exp06/erudin_table01_hutch_marble',1045),(12720,12720,'staticobjects/_exp06/erudin_rug_rolled_group01',1045),(12721,12721,'staticobjects/_exp06/erudin_research_stool',1045),(12722,12722,'staticobjects/_exp06/erudin_research_table',1045),(12723,12723,'staticobjects/_exp06/erudin_bottle_purplegoo',1045),(12724,12724,'staticobjects/_exp06/erudin_book04',1045),(12725,12725,'staticobjects/_exp06/erudin_book03',1045),(12726,12726,'staticobjects/_exp06/erudin_book02',1045),(12727,12727,'staticobjects/_exp06/erudin_book01',1045),(12728,12728,'staticobjects/_exp06/erudin_chair02_globe',1045),(12729,12729,'staticobjects/_exp06/erudin_chair01_globe',1045),(12730,12730,'staticobjects/promo_items/promo_battlegrounds_statue',1045),(12731,12731,'staticobjects/liveevent/brew_day/dpo_vrsn_winebottle01_red',1045),(12732,12732,'staticobjects/_exp06/hua_cup_01_filled',1045),(12733,12733,'staticobjects/kitchen/floor_pot_human_cooking02_water_dpo',1045),(12734,12734,'staticobjects/portals/tallonite_portal',1045),(12735,12735,'staticobjects/_exp06/odus_north_mailbox',1045),(12736,12736,'creatures/monsters/ankylosaurus',1045),(12737,12737,'accessories/wearable_items/_exp05/guk_heavycloth/guk_turrtle_pauldron01_right',1045),(12738,12738,'accessories/wearable_items/_exp05/guk_heavycloth/guk_turrtle_pauldron01_left',1045),(12739,12739,'creatures/mounts/horse_demon/horse_demon_velium',1045),(12740,12740,'accessories/wearable_items/_exp06/erudite_classic_armor/erudite_classic_armor_leather_white/skirt',1045),(12741,12741,'accessories/wearable_items/_exp06/erudite_classic_armor/erudite_classic_armor_leather_white/chest',1045),(12742,12742,'accessories/wearable_items/_exp06/erudite_classic_armor/erudite_classic_armor_leather_white/feet',1045),(12743,12743,'accessories/wearable_items/_exp06/erudite_classic_armor/erudite_classic_armor_leather_white/forearms',1045),(12744,12744,'accessories/wearable_items/_exp06/erudite_classic_armor/erudite_classic_armor_leather_white/hands',1045),(12745,12745,'accessories/wearable_items/_exp06/erudite_classic_armor/erudite_classic_armor_leather_white/head',1045),(12746,12746,'accessories/wearable_items/_exp06/erudite_classic_armor/erudite_classic_armor_leather_white/head_for_classic_erudite',1045),(12747,12747,'accessories/wearable_items/_exp06/erudite_classic_armor/erudite_classic_armor_leather_white/legs',1045),(12748,12748,'accessories/wearable_items/_exp06/erudite_classic_armor/erudite_classic_armor_leather_white/legs_noskirt',1045),(12749,12749,'accessories/wearable_items/_exp06/erudite_classic_armor/erudite_classic_armor_leather_white/shoulders',1045),(12750,12750,'accessories/wearable_items/_exp08/dragon_armor/robe_shadow/feet',1096),(12751,12751,'accessories/wieldable_items/weapons/exp06/1h_sword/exp06_1h_sword_grimblade',1045),(12752,12752,'accessories/wearable_items/_exp06/erudite_classic_armor/erudite_classic_armor_leather_black/skirt',1045),(12753,12753,'accessories/wearable_items/_exp06/erudite_classic_armor/erudite_classic_armor_leather_black/chest',1045),(12754,12754,'accessories/wearable_items/_exp06/erudite_classic_armor/erudite_classic_armor_leather_black/feet',1045),(12755,12755,'accessories/wearable_items/_exp06/erudite_classic_armor/erudite_classic_armor_leather_black/forearms',1045),(12756,12756,'accessories/wearable_items/_exp06/erudite_classic_armor/erudite_classic_armor_leather_black/hands',1045),(12757,12757,'accessories/wearable_items/_exp06/erudite_classic_armor/erudite_classic_armor_leather_black/head',1045),(12758,12758,'accessories/wearable_items/_exp06/erudite_classic_armor/erudite_classic_armor_leather_black/head_for_classic_erudite',1045),(12759,12759,'accessories/wearable_items/_exp06/erudite_classic_armor/erudite_classic_armor_leather_black/legs',1045),(12760,12760,'accessories/wearable_items/_exp06/erudite_classic_armor/erudite_classic_armor_leather_black/legs_noskirt',1045),(12761,12761,'accessories/wearable_items/_exp06/erudite_classic_armor/erudite_classic_armor_leather_black/shoulders',1045),(12762,12762,'accessories/wearable_items/_exp06/erudite_classic_armor/erudite_classic_armor_leather_blue/skirt',1045),(12763,12763,'accessories/wearable_items/_exp06/erudite_classic_armor/erudite_classic_armor_leather_blue/chest',1045),(12764,12764,'accessories/wearable_items/_exp06/erudite_classic_armor/erudite_classic_armor_leather_blue/feet',1045),(12765,12765,'accessories/wearable_items/_exp06/erudite_classic_armor/erudite_classic_armor_leather_blue/forearms',1045),(12766,12766,'accessories/wearable_items/_exp06/erudite_classic_armor/erudite_classic_armor_leather_blue/hands',1045),(12767,12767,'accessories/wearable_items/_exp06/erudite_classic_armor/erudite_classic_armor_leather_blue/head',1045),(12768,12768,'accessories/wearable_items/_exp06/erudite_classic_armor/erudite_classic_armor_leather_blue/head_for_classic_erudite',1045),(12769,12769,'accessories/wearable_items/_exp06/erudite_classic_armor/erudite_classic_armor_leather_blue/legs',1045),(12770,12770,'accessories/wearable_items/_exp06/erudite_classic_armor/erudite_classic_armor_leather_blue/legs_noskirt',1045),(12771,12771,'accessories/wearable_items/_exp06/erudite_classic_armor/erudite_classic_armor_leather_blue/shoulders',1045),(12772,12772,'accessories/wearable_items/_exp06/erudite_classic_armor/erudite_classic_armor_leather_orange/skirt',1045),(12773,12773,'accessories/wearable_items/_exp06/erudite_classic_armor/erudite_classic_armor_leather_orange/chest',1045),(12774,12774,'accessories/wearable_items/_exp06/erudite_classic_armor/erudite_classic_armor_leather_orange/feet',1045),(12775,12775,'accessories/wearable_items/_exp06/erudite_classic_armor/erudite_classic_armor_leather_orange/forearms',1045),(12776,12776,'accessories/wearable_items/_exp06/erudite_classic_armor/erudite_classic_armor_leather_orange/hands',1045),(12777,12777,'accessories/wearable_items/_exp06/erudite_classic_armor/erudite_classic_armor_leather_orange/head',1045),(12778,12778,'accessories/wearable_items/_exp06/erudite_classic_armor/erudite_classic_armor_leather_orange/head_for_classic_erudite',1045),(12779,12779,'accessories/wearable_items/_exp06/erudite_classic_armor/erudite_classic_armor_leather_orange/legs',1045),(12780,12780,'accessories/wearable_items/_exp06/erudite_classic_armor/erudite_classic_armor_leather_orange/legs_noskirt',1045),(12781,12781,'accessories/wearable_items/_exp06/erudite_classic_armor/erudite_classic_armor_leather_orange/shoulders',1045),(12782,12782,'accessories/wearable_items/_exp06/erudite_classic_armor/erudite_classic_armor_leather_red/skirt',1045),(12783,12783,'accessories/wearable_items/_exp06/erudite_classic_armor/erudite_classic_armor_leather_red/chest',1045),(12784,12784,'accessories/wearable_items/_exp06/erudite_classic_armor/erudite_classic_armor_leather_red/feet',1045),(12785,12785,'accessories/wearable_items/_exp06/erudite_classic_armor/erudite_classic_armor_leather_red/forearms',1045),(12786,12786,'accessories/wearable_items/_exp06/erudite_classic_armor/erudite_classic_armor_leather_red/hands',1045),(12787,12787,'accessories/wearable_items/_exp06/erudite_classic_armor/erudite_classic_armor_leather_red/head',1045),(12788,12788,'accessories/wearable_items/_exp06/erudite_classic_armor/erudite_classic_armor_leather_red/head_for_classic_erudite',1045),(12789,12789,'accessories/wearable_items/_exp06/erudite_classic_armor/erudite_classic_armor_leather_red/legs',1045),(12790,12790,'accessories/wearable_items/_exp06/erudite_classic_armor/erudite_classic_armor_leather_red/legs_noskirt',1045),(12791,12791,'accessories/wearable_items/_exp06/erudite_classic_armor/erudite_classic_armor_leather_red/shoulders',1045),(12792,12792,'accessories/wearable_items/_exp06/erudite_classic_armor/erudite_classic_armor_leather_violet/skirt',1045),(12793,12793,'accessories/wearable_items/_exp06/erudite_classic_armor/erudite_classic_armor_leather_violet/chest',1045),(12794,12794,'accessories/wearable_items/_exp06/erudite_classic_armor/erudite_classic_armor_leather_violet/feet',1045),(12795,12795,'accessories/wearable_items/_exp06/erudite_classic_armor/erudite_classic_armor_leather_violet/forearms',1045),(12796,12796,'accessories/wearable_items/_exp06/erudite_classic_armor/erudite_classic_armor_leather_violet/hands',1045),(12797,12797,'accessories/wearable_items/_exp06/erudite_classic_armor/erudite_classic_armor_leather_violet/head',1045),(12798,12798,'accessories/wearable_items/_exp06/erudite_classic_armor/erudite_classic_armor_leather_violet/head_for_classic_erudite',1045),(12799,12799,'accessories/wearable_items/_exp06/erudite_classic_armor/erudite_classic_armor_leather_violet/legs',1045),(12800,12800,'accessories/wearable_items/_exp06/erudite_classic_armor/erudite_classic_armor_leather_violet/legs_noskirt',1045),(12801,12801,'accessories/wearable_items/_exp06/erudite_classic_armor/erudite_classic_armor_leather_violet/shoulders',1045),(12802,12802,'_exp06/zones/objects/exp06_dun_the_sentinel/sen_small_crate_01_dpo',1045),(12803,12803,'_exp06/zones/objects/exp06_dun_vastydeep01/vastydeep01_topiary_dpo',1045),(12804,12804,'_exp06/zones/objects/exp06_dun_vastydeep02/vastydeep02_tube_dpo',1045),(12805,12805,'_exp06/zones/objects/exp06_dun_vastydeep03/vastydeep03_shrine01_dpo',1045),(12806,12806,'staticobjects/weapons/dpo_small_dwarf_axe',1045),(12807,12807,'staticobjects/statues/citymerchant_90_statue_base',1045),(12808,12808,'staticobjects/statues/citymerchant_90_statue_dragon',1045),(12809,12809,'staticobjects/_exp03/dpo_dwarf_winebottle01',1045),(12810,12810,'staticobjects/_exp03/dpo_dwarf_bed01',1045),(12811,12811,'staticobjects/_exp03/dpo_dwarf_bed02',1045),(12812,12812,'staticobjects/_exp03/dpo_dwarf_bookcase01',1045),(12813,12813,'staticobjects/_exp03/dpo_dwarf_chair01',1045),(12814,12814,'staticobjects/_exp03/dpo_dwarf_crate01',1045),(12815,12815,'staticobjects/_exp03/dpo_dwarf_cup01',1045),(12816,12816,'staticobjects/_exp03/dpo_dwarf_lantern01',1045),(12817,12817,'staticobjects/_exp03/dpo_dwarf_nightstand01',1045),(12818,12818,'staticobjects/_exp03/dpo_dwarf_stool01',1045),(12819,12819,'staticobjects/_exp03/dpo_dwarf_table01',1045),(12820,12820,'staticobjects/_exp03/dpo_dwarf_table02',1045),(12821,12821,'staticobjects/_exp03/dpo_dwarf_throne01',1045),(12822,12822,'staticobjects/_exp03/dpo_dwarf_weaponrack01',1045),(12823,12823,'staticobjects/easels/dpo_djn_paintbuckets_group01',1045),(12824,12824,'staticobjects/easels/djn_paintbucket01',1045),(12825,12825,'accessories/wieldable_items/soga_weapons/mage/staff_of_phoenix_flame_fx',1045),(12826,12826,'accessories/wieldable_items/soga_weapons/scout/traceless_wounding_dark_fx',1045),(12827,12827,'staticobjects/battlegrounds/battleground_flag_blue',1045),(12828,12828,'staticobjects/battlegrounds/battleground_flag_red',1045),(12829,12829,'staticobjects/battlegrounds/battleground_flag_white',1045),(12830,12830,'accessories/wearable_items/_exp06/chaos_armor/leather_armor/skirt',1045),(12831,12831,'accessories/wearable_items/_exp06/chaos_armor/leather_armor/chest',1045),(12832,12832,'accessories/wearable_items/_exp06/chaos_armor/leather_armor/feet',1045),(12833,12833,'accessories/wearable_items/_exp06/chaos_armor/leather_armor/forearms',1045),(12834,12834,'accessories/wearable_items/_exp06/chaos_armor/leather_armor/hands',1045),(12835,12835,'accessories/wearable_items/_exp06/chaos_armor/leather_armor/head',1045),(12836,12836,'accessories/wearable_items/_exp06/chaos_armor/leather_armor/head_chaos_epic',1045),(12837,12837,'accessories/wearable_items/_exp06/chaos_armor/leather_armor/legs',1045),(12838,12838,'accessories/wearable_items/_exp06/chaos_armor/leather_armor/legs_noskirt',1045),(12839,12839,'accessories/wearable_items/_exp06/chaos_armor/leather_armor/shoulders_epic_pauldrons',1045),(12840,12840,'accessories/wearable_items/_exp06/chaos_armor/leather_armor/shoulders_no_pauldrons',1045),(12841,12841,'accessories/wearable_items/_exp06/chaos_armor/leather_armor/snap_ons/head_chaos_helm',1045),(12842,12842,'accessories/wearable_items/_exp06/chaos_armor/leather_armor/snap_ons/chaos_pauldrons_left',1045),(12843,12843,'accessories/wearable_items/_exp06/chaos_armor/leather_armor/snap_ons/chaos_pauldrons_right',1045),(12844,12844,'accessories/wearable_items/_exp06/chaos_armor/robe_armor/feet',1045),(12845,12845,'accessories/wearable_items/_exp06/chaos_armor/robe_armor/hands',1045),(12846,12846,'accessories/wearable_items/_exp08/dragon_armor/robe_shadow/hands',1096),(12847,12847,'_exp06/characters/tool_users/erudite_classic_el_arad/erudite_classic_el_arad',1045),(12848,12848,'accessories/wieldable_items/weapons/exp06/staff/exp06_2h_staff_el_arad',1045),(12849,12849,'accessories/wearable_items/cloak/exp06/cloak_battleground_symbol',1045),(12850,12850,'staticobjects/tcg/tcg_tapestry_crystalshards',1045),(12851,12851,'staticobjects/tcg/tcg_tapestry_master_assassin',1045),(12852,12852,'staticobjects/tcg/tcg_tapestry_runes',1045),(12853,12853,'staticobjects/tcg/tcg_painting43_krulkiel',1045),(12854,12854,'staticobjects/tcg/tcg_painting39_lordknight',1045),(12855,12855,'staticobjects/tcg/tcg_painting40_goddess',1045),(12856,12856,'staticobjects/tcg/tcg_painting41_beast',1045),(12857,12857,'staticobjects/tcg/tcg_painting42_lesson',1045),(12858,12858,'accessories/wearable_items/_exp06/chaos_armor/chain_armor/skirt',1045),(12859,12859,'accessories/wearable_items/_exp06/chaos_armor/chain_armor/chest',1045),(12860,12860,'accessories/wearable_items/_exp06/chaos_armor/chain_armor/feet',1045),(12861,12861,'accessories/wearable_items/_exp06/chaos_armor/chain_armor/forearms',1045),(12862,12862,'accessories/wearable_items/_exp06/chaos_armor/chain_armor/hands',1045),(12863,12863,'accessories/wearable_items/_exp06/chaos_armor/chain_armor/head',1045),(12864,12864,'accessories/wearable_items/_exp06/chaos_armor/chain_armor/head_chain_epic',1045),(12865,12865,'accessories/wearable_items/_exp06/chaos_armor/chain_armor/legs',1045),(12866,12866,'accessories/wearable_items/_exp06/chaos_armor/chain_armor/legs_noskirt',1045),(12867,12867,'accessories/wearable_items/_exp06/chaos_armor/chain_armor/shoulders_epic_pauldrons',1045),(12868,12868,'accessories/wearable_items/_exp06/chaos_armor/chain_armor/shoulders_no_pauldrons',1045),(12869,12869,'accessories/wearable_items/_exp06/chaos_armor/chain_armor/snap_ons/chaos_pauldrons_right',1045),(12870,12870,'accessories/wearable_items/_exp06/chaos_armor/chain_armor/snap_ons/chaos_pauldrons_left',1045),(12871,12871,'staticobjects/tcg/tcg_painting_lon9',1045),(12872,12872,'_exp06/zones/objects/exp06_rgn_odus_north/barricade_long',1045),(12873,12873,'accessories/wearable_items/cloak/exp06/cloak_battleground_symbol_02',1045),(12874,12874,'staticobjects/battlegrounds/battleground_relic',1045),(12875,12875,'_exp06/characters/tool_users/erudite_classic_male/erudite_classic_male_hover',1045),(12876,12876,'_exp06/zones/objects/exp06_dun_vastydeep02/dragon_test_tube_intact_dpo',1045),(12877,12877,'_exp06/zones/objects/exp06_dun_vastydeep02/dragon_test_tube_broken_dpo',1045),(12878,12878,'staticobjects/easels/djn_paintbucket01_orange',1045),(12879,12879,'staticobjects/easels/djn_paintbucket01_blue',1045),(12880,12880,'_exp06/zones/objects/exp06_dun_vastydeep02/dragon_room_clear_tube',1045),(12881,12881,'_exp06/zones/objects/plunderable_loot/eru_rug01_rolled',1045),(12882,12882,'staticobjects/guildhall/standard_flag_blue',1045),(12883,12883,'staticobjects/guildhall/standard_flag_green',1045),(12884,12884,'staticobjects/guildhall/standard_flag_orange',1045),(12885,12885,'staticobjects/guildhall/standard_flag_purple',1045),(12886,12886,'staticobjects/guildhall/standard_flag_red',1045),(12887,12887,'staticobjects/guildhall/standard_flag_white',1045),(12888,12888,'staticobjects/guildhall/standard_flag_yellow',1045),(12889,12889,'accessories/wearable_items/_exp06/holy_robe_of_the_underfoot/skirt',1045),(12890,12890,'accessories/wearable_items/_exp06/holy_robe_of_the_underfoot/chest',1045),(12891,12891,'accessories/wearable_items/_exp06/holy_robe_of_the_underfoot/feet',1045),(12892,12892,'accessories/wearable_items/_exp06/holy_robe_of_the_underfoot/hands',1045),(12893,12893,'accessories/wearable_items/_exp06/holy_robe_of_the_underfoot/head',1045),(12894,12894,'accessories/wearable_items/_exp08/dragon_armor/robe_shadow/head',1096),(12895,12895,'accessories/wearable_items/_exp06/holy_robe_of_the_underfoot/pants',1045),(12896,12896,'accessories/wearable_items/_exp08/dragon_armor/robe_shadow/head_collar',1096),(12897,12897,'accessories/wearable_items/_exp08/dragon_armor/robe_shadow/pants',1096),(12898,12898,'accessories/wearable_items/_exp08/dragon_armor/snapons/dragon_armor_shin_shadow_right',1096),(12899,12899,'accessories/wearable_items/_exp08/dragon_armor/snapons/dragon_armor_forearm_blue_left',1096),(12900,12900,'accessories/wearable_items/_exp08/dragon_armor/snapons/dragon_armor_forearm_blue_right',1096),(12901,12901,'accessories/wearable_items/_exp08/dragon_armor/snapons/dragon_armor_forearm_green_left',1096),(12902,12902,'accessories/wearable_items/_exp08/dragon_armor/snapons/dragon_armor_forearm_green_right',1096),(12903,12903,'accessories/wearable_items/_exp08/dragon_armor/snapons/dragon_armor_forearm_left',1096),(12904,12904,'accessories/wearable_items/_exp08/dragon_armor/snapons/dragon_armor_forearm_right',1096),(12905,12905,'accessories/wearable_items/_exp08/dragon_armor/snapons/dragon_armor_forearm_shadow_left',1096),(12906,12906,'accessories/wearable_items/_exp08/dragon_armor/snapons/dragon_armor_forearm_shadow_right',1096),(12907,12907,'accessories/wearable_items/_exp08/dragon_armor/snapons/dragon_armor_leather-chain_pauldron_bronzegreen_left',1096),(12908,12908,'accessories/wearable_items/_exp08/dragon_armor/snapons/dragon_armor_leather-chain_pauldron_bronzegreen_right',1096),(12909,12909,'accessories/wearable_items/_exp08/dragon_armor/snapons/dragon_armor_leather-chain_pauldron_bronzered_left',1096),(12910,12910,'accessories/wearable_items/_exp08/dragon_armor/snapons/dragon_armor_leather-chain_pauldron_bronzered_right',1096),(12911,12911,'accessories/wearable_items/_exp08/dragon_armor/snapons/dragon_armor_leather-chain_pauldron_effects_left',1096),(12912,12912,'accessories/wearable_items/_exp08/dragon_armor/snapons/dragon_armor_leather-chain_pauldron_effects_right',1096),(12913,12913,'accessories/wearable_items/_exp08/dragon_armor/snapons/dragon_armor_leather-chain_pauldron_goldivory_left',1096),(12914,12914,'accessories/wearable_items/_exp08/dragon_armor/snapons/dragon_armor_leather-chain_pauldron_goldivory_right',1096),(12915,12915,'accessories/wearable_items/_exp08/dragon_armor/snapons/dragon_armor_leather-chain_pauldron_ironblue_left',1096),(12916,12916,'accessories/wearable_items/_exp08/dragon_armor/snapons/dragon_armor_leather-chain_pauldron_ironblue_right',1096),(12917,12917,'accessories/wearable_items/_exp08/dragon_armor/snapons/dragon_armor_leather-chain_pauldron_ironshadow_left',1096),(12918,12918,'accessories/wearable_items/_exp08/dragon_armor/snapons/dragon_armor_leather-chain_pauldron_ironshadow_right',1096),(12919,12919,'accessories/wearable_items/_exp08/dragon_armor/snapons/dragon_armor_pauldron_upper_left_blue',1096),(12920,12920,'accessories/wearable_items/_exp08/dragon_armor/snapons/dragon_armor_pauldron_upper_left_green',1096),(12921,12921,'accessories/wearable_items/_exp08/dragon_armor/snapons/dragon_armor_pauldron_upper_left_red',1096),(12922,12922,'accessories/wearable_items/_exp08/dragon_armor/snapons/dragon_armor_pauldron_upper_left_shadow',1096),(12923,12923,'accessories/wearable_items/_exp08/dragon_armor/snapons/dragon_armor_pauldron_upper_right_blue',1096),(12924,12924,'accessories/wearable_items/_exp08/dragon_armor/snapons/dragon_armor_pauldron_upper_right_green',1096),(12925,12925,'accessories/wearable_items/_exp08/dragon_armor/snapons/dragon_armor_pauldron_upper_right_red',1096),(12926,12926,'accessories/wearable_items/_exp08/dragon_armor/snapons/dragon_armor_pauldron_upper_right_shadow',1096),(12927,12927,'accessories/wearable_items/_exp08/dragon_armor/snapons/dragon_armor_pauldrons_lower_blue_left',1096),(12928,12928,'accessories/wearable_items/_exp08/dragon_armor/snapons/dragon_armor_pauldrons_lower_blue_right',1096),(12929,12929,'accessories/wearable_items/_exp08/dragon_armor/snapons/dragon_armor_pauldrons_lower_green_left',1096),(12930,12930,'accessories/wearable_items/_exp08/dragon_armor/snapons/dragon_armor_pauldrons_lower_green_right',1096),(12931,12931,'accessories/wearable_items/_exp08/dragon_armor/snapons/dragon_armor_pauldrons_lower_left',1096),(12932,12932,'accessories/wearable_items/_exp08/dragon_armor/snapons/dragon_armor_pauldrons_lower_right',1096),(12933,12933,'accessories/wearable_items/_exp08/dragon_armor/snapons/dragon_armor_pauldrons_lower_shadow_left',1096),(12934,12934,'accessories/wearable_items/_exp08/dragon_armor/snapons/dragon_armor_pauldrons_lower_shadow_right',1096),(12935,12935,'accessories/wearable_items/_exp08/dragon_armor/snapons/dragon_armor_shin_blue_left',1096),(12936,12936,'accessories/wearable_items/_exp08/dragon_armor/snapons/dragon_armor_shin_blue_right',1096),(12937,12937,'accessories/wearable_items/_exp08/dragon_armor/snapons/dragon_armor_shin_green_left',1096),(12938,12938,'accessories/wearable_items/_exp08/dragon_armor/snapons/dragon_armor_shin_green_right',1096),(12939,12939,'accessories/wearable_items/_exp08/dragon_armor/snapons/dragon_armor_shin_left',1096),(12940,12940,'accessories/wearable_items/_exp08/dragon_armor/snapons/dragon_armor_shin_right',1096),(12941,12941,'accessories/wearable_items/_exp08/dragon_armor/snapons/dragon_armor_shin_shadow_left',1096),(12942,12942,'accessories/wearable_items/_exp08/dragon_armor/vanguard_blue/skirt',1096),(12943,12943,'accessories/wearable_items/_exp08/dragon_armor/vanguard_blue/chest',1096),(12944,12944,'accessories/wearable_items/_exp08/dragon_armor/vanguard_blue/feet',1096),(12945,12945,'accessories/wearable_items/_exp08/dragon_armor/vanguard_blue/forearms',1096),(12946,12946,'accessories/wearable_items/_exp08/dragon_armor/vanguard_blue/hands',1096),(12947,12947,'accessories/wearable_items/_exp08/dragon_armor/vanguard_blue/hands_epic',1096),(12948,12948,'accessories/wearable_items/_exp08/dragon_armor/vanguard_blue/head',1096),(12949,12949,'accessories/wearable_items/_exp08/dragon_armor/vanguard_blue/head_epic',1096),(12950,12950,'accessories/wearable_items/_exp08/dragon_armor/vanguard_blue/left',1096),(12951,12951,'accessories/wearable_items/_exp08/dragon_armor/vanguard_blue/legs',1096),(12952,12952,'accessories/wearable_items/_exp08/dragon_armor/vanguard_blue/legs_epic',1096),(12953,12953,'accessories/wearable_items/_exp08/dragon_armor/vanguard_blue/legs_noskirt',1096),(12954,12954,'accessories/wearable_items/_exp08/dragon_armor/vanguard_blue/right',1096),(12955,12955,'accessories/wearable_items/_exp08/dragon_armor/vanguard_blue/shoulders',1096),(12956,12956,'accessories/wearable_items/_exp08/dragon_armor/vanguard_blue/shoulders_epic',1096),(12957,12957,'accessories/wearable_items/_exp08/dragon_armor/vanguard_blue/shoulders_nopauldrons',1096),(12958,12958,'accessories/wearable_items/_exp08/dragon_armor/vanguard_green/skirt',1096),(12959,12959,'accessories/wearable_items/_exp08/dragon_armor/vanguard_green/chest',1096),(12960,12960,'accessories/wearable_items/_exp08/dragon_armor/vanguard_green/feet',1096),(12961,12961,'accessories/wearable_items/_exp08/dragon_armor/vanguard_green/forearms',1096),(12962,12962,'accessories/wearable_items/_exp08/dragon_armor/vanguard_green/hands',1096),(12963,12963,'accessories/wearable_items/_exp08/dragon_armor/vanguard_green/hands_epic',1096),(12964,12964,'accessories/wearable_items/_exp08/dragon_armor/vanguard_green/head',1096),(12965,12965,'accessories/wearable_items/_exp08/dragon_armor/vanguard_green/head_epic',1096),(12966,12966,'accessories/wearable_items/_exp08/dragon_armor/vanguard_green/left',1096),(12967,12967,'accessories/wearable_items/_exp08/dragon_armor/vanguard_green/legs',1096),(12968,12968,'accessories/wearable_items/_exp08/dragon_armor/vanguard_green/legs_epic',1096),(12969,12969,'accessories/wearable_items/_exp08/dragon_armor/vanguard_green/legs_noskirt',1096),(12970,12970,'accessories/wearable_items/_exp08/dragon_armor/vanguard_green/right',1096),(12971,12971,'accessories/wearable_items/_exp08/dragon_armor/vanguard_green/shoulders',1096),(12972,12972,'accessories/wearable_items/_exp08/dragon_armor/vanguard_green/shoulders_epic',1096),(12973,12973,'accessories/wearable_items/_exp08/dragon_armor/vanguard_green/shoulders_nopauldrons',1096),(12974,12974,'accessories/wearable_items/_exp08/dragon_armor/vanguard_red/skirt',1096),(12975,12975,'accessories/wearable_items/_exp08/dragon_armor/vanguard_red/chest',1096),(12976,12976,'accessories/wearable_items/_exp08/dragon_armor/vanguard_red/feet',1096),(12977,12977,'accessories/wearable_items/_exp08/dragon_armor/vanguard_red/forearms',1096),(12978,12978,'accessories/wearable_items/_exp08/dragon_armor/vanguard_red/hands',1096),(12979,12979,'accessories/wearable_items/_exp08/dragon_armor/vanguard_red/hands_epic',1096),(12980,12980,'accessories/wearable_items/_exp08/dragon_armor/vanguard_red/head',1096),(12981,12981,'accessories/wearable_items/_exp08/dragon_armor/vanguard_red/head_epic',1096),(12982,12982,'accessories/wearable_items/_exp08/dragon_armor/vanguard_red/left',1096),(12983,12983,'accessories/wearable_items/_exp08/dragon_armor/vanguard_red/legs',1096),(12984,12984,'accessories/wearable_items/_exp08/dragon_armor/vanguard_red/legs_epic',1096),(12985,12985,'accessories/wearable_items/_exp08/dragon_armor/vanguard_red/legs_noskirt',1096),(12986,12986,'staticobjects/battlegrounds/battleground_relic_force_bars',1045),(12987,12987,'creatures/mounts/warg_mount/warg_armor04',1045),(12988,12988,'creatures/mounts/warg_mount/warg_armor04_twotoned',1045),(12989,12989,'creatures/mounts/warg_mount/warg_armor04_albino',1045),(12990,12990,'creatures/mounts/warg_mount/warg_armor04_spotted',1045),(12991,12991,'creatures/mounts/flying_disc/flying_disc_battleground_red',1045),(12992,12992,'creatures/mounts/flying_disc/flying_disc_battleground_blue',1045),(12993,12993,'creatures/monsters/clockwork_steel_gazer_with_light',1045),(12994,12994,'accessories/wearable_items/_exp06/holy_robe_of_the_underfoot/head_collar',1045),(12995,12995,'staticobjects/cages/dpo_qey_birdcage002_parrot',1045),(12996,12996,'staticobjects/battlegrounds/battleground_ctf_base01_force_bars',1045),(12997,12997,'staticobjects/battlegrounds/battleground_ctf_base02_force_bars',1045),(12998,12998,'staticobjects/bookcases/vastydeep_library01_flatstacks01_shortwide',1045),(12999,12999,'staticobjects/bookcases/vastydeep_library01_flatstacks01_tall',1045),(13000,13000,'accessories/wieldable_items/weapons/exp06/staff/exp06_2h_staff_tallonite_glow',1045),(13001,13001,'accessories/wieldable_items/weapons/exp06/staff/exp06_2h_staff_tallonite',1045),(13002,13002,'staticobjects/bookcases/vastydeep_library01_flatstacks01_2rows',1045),(13003,13003,'staticobjects/bookcases/vastydeep_library01_flatstacks01_2rowswide',1045),(13004,13004,'staticobjects/battlegrounds/battleground_smuggler_den_base01_force_bars',1045),(13005,13005,'staticobjects/battlegrounds/battleground_smuggler_den_base02_force_bars',1045),(13006,13006,'staticobjects/pictures/exp06_citymerchant_venekor',1045),(13007,13007,'staticobjects/pictures/exp06_carpenter_jarsath',1045),(13008,13008,'staticobjects/pictures/exp06_carpenter_rivervalebar',1045),(13009,13009,'staticobjects/pictures/exp06_carpenter_tinkerfest',1045),(13010,13010,'staticobjects/pictures/exp06_citymerchant_barrensky',1045),(13011,13011,'staticobjects/pictures/exp06_citymerchant_kurns',1045),(13012,13012,'staticobjects/pictures/exp06_citymerchant_rime',1045),(13013,13013,'accessories/wieldable_items/weapons/exp06/staff/erudite_rune_staff',1045),(13014,13014,'accessories/wieldable_items/weapons/exp06/1h_sword/exp06_1h_sword_tallonite_katana_slice',1045),(13015,13015,'accessories/wieldable_items/weapons/exp06/1h_sword/exp06_1h_sword_tallonite_katana_parry',1045),(13016,13016,'accessories/wearable_items/_exp06/chaos_armor_black/chain_armor/snap_ons/chaos_pauldrons_right',1045),(13017,13017,'accessories/wearable_items/_exp06/chaos_armor_black/chain_armor/snap_ons/chaos_pauldrons_left',1045),(13018,13018,'accessories/wearable_items/_exp06/chaos_armor_black/chain_armor/skirt',1045),(13019,13019,'accessories/wearable_items/_exp06/chaos_armor_black/chain_armor/chest',1045),(13020,13020,'accessories/wearable_items/_exp06/chaos_armor_black/chain_armor/feet',1045),(13021,13021,'accessories/wearable_items/_exp06/chaos_armor_black/chain_armor/forearms',1045),(13022,13022,'accessories/wearable_items/_exp06/chaos_armor_black/chain_armor/hands',1045),(13023,13023,'accessories/wearable_items/_exp06/chaos_armor_black/chain_armor/head',1045),(13024,13024,'accessories/wearable_items/_exp06/chaos_armor_black/chain_armor/head_chain_epic',1045),(13025,13025,'accessories/wearable_items/_exp06/chaos_armor_black/chain_armor/legs',1045),(13026,13026,'accessories/wearable_items/_exp06/chaos_armor_black/chain_armor/legs_noskirt',1045),(13027,13027,'accessories/wearable_items/_exp06/chaos_armor_black/chain_armor/shoulders',1045),(13028,13028,'accessories/wearable_items/_exp06/chaos_armor_black/chain_armor/shoulders_chaos_epic',1045),(13029,13029,'accessories/wearable_items/_exp06/chaos_armor_black/leather_armor/chest',1045),(13030,13030,'accessories/wearable_items/_exp06/chaos_armor_black/leather_armor/snap_ons/head_chaos_helm',1045),(13031,13031,'accessories/wearable_items/_exp06/chaos_armor_black/leather_armor/snap_ons/chaos_pauldrons_left',1045),(13032,13032,'accessories/wearable_items/_exp06/chaos_armor_black/leather_armor/snap_ons/chaos_pauldrons_right',1045),(13033,13033,'accessories/wearable_items/_exp06/chaos_armor_black/leather_armor/skirt',1045),(13034,13034,'accessories/wearable_items/_exp06/chaos_armor_black/leather_armor/feet',1045),(13035,13035,'accessories/wearable_items/_exp06/chaos_armor_black/leather_armor/forearms',1045),(13036,13036,'accessories/wearable_items/_exp06/chaos_armor_black/leather_armor/hands',1045),(13037,13037,'accessories/wearable_items/_exp06/chaos_armor_black/leather_armor/head',1045),(13038,13038,'accessories/wearable_items/_exp06/chaos_armor_black/leather_armor/head_chaos_epic',1045),(13039,13039,'accessories/wearable_items/_exp06/chaos_armor_black/leather_armor/legs',1045),(13040,13040,'accessories/wearable_items/_exp06/chaos_armor_black/leather_armor/legs_noskirt',1045),(13041,13041,'accessories/wearable_items/_exp06/chaos_armor_black/leather_armor/shoulders_epic_pauldrons',1045),(13042,13042,'accessories/wearable_items/_exp06/chaos_armor_black/leather_armor/shoulders_no_pauldrons',1045),(13043,13043,'accessories/wearable_items/_exp06/chaos_armor_black/robe_armor/snap_ons/chaos_pauldrons_upper_right',1045),(13044,13044,'accessories/wearable_items/_exp06/chaos_armor_black/robe_armor/snap_ons/chaos_pauldrons_lower_left',1045),(13045,13045,'accessories/wearable_items/_exp06/chaos_armor_black/robe_armor/snap_ons/chaos_pauldrons_lower_right',1045),(13046,13046,'accessories/wearable_items/_exp06/chaos_armor_black/robe_armor/snap_ons/chaos_pauldrons_upper_left',1045),(13047,13047,'accessories/wearable_items/_exp06/chaos_armor_black/robe_armor/skirt',1045),(13048,13048,'accessories/wearable_items/_exp06/chaos_armor_black/robe_armor/chest',1045),(13049,13049,'accessories/wearable_items/_exp06/chaos_armor_black/robe_armor/chest_chaos_pauldrons',1045),(13050,13050,'accessories/wearable_items/_exp06/chaos_armor_black/robe_armor/feet',1045),(13051,13051,'accessories/wearable_items/_exp06/chaos_armor_black/robe_armor/hands',1045),(13052,13052,'accessories/wearable_items/_exp06/chaos_armor_black/robe_armor/head',1045),(13053,13053,'accessories/wearable_items/_exp06/chaos_armor_black/robe_armor/head_chaos_helm',1045),(13054,13054,'accessories/wearable_items/_exp06/chaos_armor_black/robe_armor/head_collar',1045),(13055,13055,'accessories/wearable_items/_exp06/chaos_armor_black/robe_armor/pants',1045),(13056,13056,'accessories/wearable_items/_exp06/chaos_armor_black/vanguard_armor/snap_ons/chaos_shin_right',1045),(13057,13057,'accessories/wearable_items/_exp06/chaos_armor_black/vanguard_armor/snap_ons/chaos_forearm_left',1045),(13058,13058,'accessories/wearable_items/_exp06/chaos_armor_black/vanguard_armor/snap_ons/chaos_forearm_right',1045),(13059,13059,'accessories/wearable_items/_exp06/chaos_armor_black/vanguard_armor/snap_ons/chaos_pauldrons_lower_left',1045),(13060,13060,'accessories/wearable_items/_exp06/chaos_armor_black/vanguard_armor/snap_ons/chaos_pauldrons_lower_right',1045),(13061,13061,'accessories/wearable_items/_exp06/chaos_armor_black/vanguard_armor/snap_ons/chaos_pauldrons_upper_left',1045),(13062,13062,'accessories/wearable_items/_exp06/chaos_armor_black/vanguard_armor/snap_ons/chaos_pauldrons_upper_right',1045),(13063,13063,'accessories/wearable_items/_exp06/chaos_armor_black/vanguard_armor/snap_ons/chaos_shin_left',1045),(13064,13064,'accessories/wearable_items/_exp06/chaos_armor_black/vanguard_armor/skirt',1045),(13065,13065,'accessories/wearable_items/_exp06/chaos_armor_black/vanguard_armor/chest',1045),(13066,13066,'accessories/wearable_items/_exp06/chaos_armor_black/vanguard_armor/feet',1045),(13067,13067,'accessories/wearable_items/_exp06/chaos_armor_black/vanguard_armor/forearms',1045),(13068,13068,'accessories/wearable_items/_exp06/chaos_armor_black/vanguard_armor/hands',1045),(13069,13069,'accessories/wearable_items/_exp06/chaos_armor_black/vanguard_armor/hands_chaos_gauntlets',1045),(13070,13070,'accessories/wearable_items/_exp06/chaos_armor_black/vanguard_armor/head',1045),(13071,13071,'accessories/wearable_items/_exp06/chaos_armor_black/vanguard_armor/head_chaos_helm',1045),(13072,13072,'accessories/wearable_items/_exp06/chaos_armor_black/vanguard_armor/legs',1045),(13073,13073,'accessories/wearable_items/_exp06/chaos_armor_black/vanguard_armor/legs_chaos_shins',1045),(13074,13074,'accessories/wearable_items/_exp06/chaos_armor_black/vanguard_armor/legs_noskirt',1045),(13075,13075,'accessories/wearable_items/_exp06/chaos_armor_black/vanguard_armor/right',1045),(13076,13076,'accessories/wearable_items/_exp06/chaos_armor_black/vanguard_armor/shoulders',1045),(13077,13077,'accessories/wearable_items/_exp06/chaos_armor_black/vanguard_armor/shoulders_chaos_armor_all',1045),(13078,13078,'accessories/wearable_items/_exp06/chaos_armor_black/vanguard_armor/shoulders_nopauldrons',1045),(13079,13079,'staticobjects/_exp06/thehole_platcol_01',1045),(13080,13080,'accessories/wieldable_items/weapons/exp06/2h_crush/exp06_2h_korshahammer',1045),(13081,13081,'_exp06/zones/objects/exp06_dun_vastydeep02/exp06_dun_vastydeep02_secretroom01_panel01',1045),(13082,13082,'accessories/wearable_items/_exp06/raven_robe/raven_shoulder_right',1045),(13083,13083,'accessories/wearable_items/_exp06/raven_robe/chest_epic_pauldrons',1045),(13084,13084,'accessories/wearable_items/_exp06/raven_robe/feet',1045),(13085,13085,'accessories/wearable_items/_exp06/raven_robe/hands',1045),(13086,13086,'accessories/wearable_items/_exp06/raven_robe/head_epic_hood',1045),(13087,13087,'accessories/wearable_items/_exp06/raven_robe/raven_shoulder_left',1045),(13088,13088,'accessories/wearable_items/_exp06/raven_robe/snap_ons/head_raven_helm',1045),(13089,13089,'accessories/wieldable_items/weapons/exp06/1h_sword/exp06_1h_sword_akinakes',1045),(13090,13090,'accessories/wieldable_items/weapons/exp06/1h_pierce/exp06_1hp_serpent_tongue',1045),(13091,13091,'staticobjects/battlegrounds/dpo_bg_ctf_statue_sword_houseitem01',1045),(13092,13092,'staticobjects/battlegrounds/dpo_battleground_flag01_blue',1045),(13093,13093,'staticobjects/battlegrounds/dpo_battleground_flag01_brown',1045),(13094,13094,'staticobjects/battlegrounds/dpo_battleground_flag01_green',1045),(13095,13095,'staticobjects/battlegrounds/dpo_battleground_flag01_orange',1045),(13096,13096,'staticobjects/battlegrounds/dpo_battleground_flag01_pink',1045),(13097,13097,'staticobjects/battlegrounds/dpo_battleground_flag01_purple',1045),(13098,13098,'staticobjects/battlegrounds/dpo_battleground_flag01_red',1045),(13099,13099,'staticobjects/battlegrounds/dpo_battleground_flag01_white',1045),(13100,13100,'staticobjects/battlegrounds/dpo_battleground_flag01_yellow',1045),(13101,13101,'staticobjects/soe_wallet/battlegrounds_relic01_murderballpedestal01_dpo',1045),(13102,13102,'staticobjects/soe_wallet/battlegrounds_relic01_console01_dpo',1045),(13103,13103,'staticobjects/battlegrounds/battlegrounds_relic01_console02_dpo',1045),(13104,13104,'staticobjects/soe_wallet/battlegrounds_relic01_crane01_dpo',1045),(13105,13105,'staticobjects/battlegrounds/battlegrounds_relic01_crane02_dpo',1045),(13106,13106,'staticobjects/brazier/erudite_totem01',1045),(13107,13107,'_exp06/characters/monsters/golem_odus/golem_odus',1045),(13108,13108,'accessories/wearable_items/cloak/exp06/cloak_bg_chaos_red',1045),(13109,13109,'accessories/wearable_items/cloak/exp06/cloak_bg_chaos',1045),(13110,13110,'accessories/wearable_items/cloak/exp06/cloak_bg_chaos_gold',1045),(13111,13111,'staticobjects/soe_wallet/battleground_ctf_wallbrazier01_blue',1045),(13112,13112,'staticobjects/soe_wallet/battleground_ctf_wallbrazier01_red',1045),(13113,13113,'staticobjects/soe_wallet/battleground_nodes_coffinornament01_blue',1045),(13114,13114,'staticobjects/soe_wallet/battleground_nodes_coffinornament01_red',1045),(13115,13115,'staticobjects/guildhall/trophies/floor_vuulan_head',1045),(13116,13116,'staticobjects/guildhall/trophies/floor_perah_head',1045),(13117,13117,'staticobjects/guildhall/trophies/floor_seadragon_head',1045),(13118,13118,'staticobjects/guildhall/trophies/floor_theer_sword_evil',1045),(13119,13119,'staticobjects/guildhall/trophies/floor_theer_sword_good',1045),(13120,13120,'staticobjects/guildhall/trophies/floor_toxx_head',1045),(13121,13121,'staticobjects/weapons/dpo_weaponsmith_tool',1045),(13122,13122,'staticobjects/weapons/dpo_alchemist_tool',1045),(13123,13123,'staticobjects/weapons/dpo_armorer_tool',1045),(13124,13124,'staticobjects/weapons/dpo_carpenter_tool',1045),(13125,13125,'staticobjects/weapons/dpo_jeweler_tool',1045),(13126,13126,'staticobjects/weapons/dpo_provisioner_tool',1045),(13127,13127,'staticobjects/weapons/dpo_sage_tool',1045),(13128,13128,'staticobjects/weapons/dpo_tailor_tool',1045),(13129,13129,'staticobjects/_exp06/paineel_graves',1045),(13130,13130,'accessories/wieldable_items/weapons/exp06/staff/exp06_2h_silver_staff',1045),(13131,13131,'accessories/wearable_items/_exp06/order_of_nature_robe/chest_epic_pauldrons',1045),(13132,13132,'accessories/wearable_items/_exp06/order_of_nature_robe/order_of_nature_pauldron_left',1045),(13133,13133,'accessories/wearable_items/_exp06/order_of_nature_robe/order_of_nature_pauldron_right',1045),(13134,13134,'creatures/monsters/floating_book',1045),(13135,13135,'accessories/wieldable_items/shields/exp06/crystal_star_shield_fx',1045),(13136,13136,'accessories/wieldable_items/soga_weapons/priest/the_holy_spirit_fx',1045),(13137,13137,'accessories/wieldable_items/soga_weapons/priest/massive_hammer_fx',1045),(13138,13138,'accessories/wieldable_items/weapons/dagger/embalming_blade/embalming_blade_plain_fx',1045),(13139,13139,'accessories/wieldable_items/weapons/dagger/jambiya/jambiya_plain_fx',1045),(13140,13140,'accessories/wieldable_items/weapons/exp04/1h_pierce/exp04_1hp_flame_dagger_fx',1045),(13141,13141,'accessories/wieldable_items/weapons/exp04/1h_pierce/exp04_1hp_flame_dagger_rune_fx',1045),(13142,13142,'accessories/wieldable_items/weapons/exp04/1h_pierce/exp04_1hp_dragonhilt_dagger_fire',1045),(13143,13143,'accessories/wieldable_items/weapons/exp04/1h_pierce/exp04_1hp_dual_bladed_stiletto_fx',1045),(13144,13144,'accessories/wieldable_items/weapons/exp05/exp05_bow_guk_bow_fx',1045),(13145,13145,'accessories/wieldable_items/weapons/exp05/exp05_korsha_longbow_fx',1045),(13146,13146,'accessories/wieldable_items/weapons/exp06/1h_sword/exp06_1h_sword_tangler_fx',1045),(13147,13147,'accessories/wieldable_items/weapons/exp06/1h_sword/exp06_1h_axe_emerald_ripper_fx',1045),(13148,13148,'accessories/wieldable_items/weapons/exp06/1h_sword/exp06_1h_sword_crystal_blade_of_chaos_fx',1045),(13149,13149,'accessories/wieldable_items/weapons/exp06/1h_sword/exp06_1h_sword_soulleach_fx',1045),(13150,13150,'accessories/wieldable_items/weapons/exp06/1h_sword/exp06_1h_sword_spirit_of_the_forest_fx',1045),(13151,13151,'accessories/wieldable_items/weapons/exp04/fist/exp04_fist_dull_ulak_fx',1045),(13152,13152,'accessories/wieldable_items/weapons/rapier/epee/epee001_runic_fx',1045),(13153,13153,'accessories/wieldable_items/weapons/talisman/censer/censer001_runic_lightfx',1045),(13154,13154,'accessories/wieldable_items/weapons/staff/escrima/escrima002_ornate_fx',1045),(13155,13155,'_exp06/zones/objects/exp06_dun_erudin_palace/good_theer_sword_placed',1045),(13156,13156,'_exp06/zones/objects/exp06_dun_erudin_palace/evil_theer_sword_placed',1045),(13157,13157,'staticobjects/_exp06/thehole_breakable_wall',1045),(13158,13158,'accessories/wieldable_items/weapons/exp06/1h_crush/exp06_1h_crush_candlestick',1045),(13159,13159,'accessories/wieldable_items/weapons/exp06/1h_pierce/exp06_1hp_erudin_dagger',1045),(13160,13160,'accessories/wieldable_items/weapons/exp06/staff/exp06_2h_staff_erudin',1045),(13161,13161,'accessories/wearable_items/_exp06/dragon_vanguard/skirt',1045),(13162,13162,'accessories/wearable_items/_exp06/dragon_vanguard/chest',1045),(13163,13163,'accessories/wearable_items/_exp06/dragon_vanguard/dragon_pauldrons_left',1045),(13164,13164,'accessories/wearable_items/_exp06/dragon_vanguard/dragon_pauldrons_right',1045),(13165,13165,'accessories/wearable_items/_exp06/dragon_vanguard/feet',1045),(13166,13166,'accessories/wearable_items/_exp06/dragon_vanguard/forearms',1045),(13167,13167,'accessories/wearable_items/_exp06/dragon_vanguard/hands',1045),(13168,13168,'accessories/wearable_items/_exp06/dragon_vanguard/head',1045),(13169,13169,'accessories/wearable_items/_exp06/dragon_vanguard/head_dragon_helm',1045),(13170,13170,'accessories/wearable_items/_exp06/dragon_vanguard/legs',1045),(13171,13171,'accessories/wearable_items/_exp06/dragon_vanguard/legs_dragon_snapons',1045),(13172,13172,'accessories/wearable_items/_exp06/dragon_vanguard/legs_noskirt',1045),(13173,13173,'accessories/wearable_items/_exp06/dragon_vanguard/right',1045),(13174,13174,'accessories/wearable_items/_exp06/dragon_vanguard/shoulders',1045),(13175,13175,'accessories/wearable_items/_exp06/dragon_vanguard/shoulders_dragon_pauldron',1045),(13176,13176,'accessories/wearable_items/_exp06/dragon_vanguard/shoulders_nopauldrons',1045),(13177,13177,'accessories/wearable_items/_exp06/dragon_chain/dragon_pauldron_left',1045),(13178,13178,'accessories/wearable_items/_exp06/dragon_chain/dragon_pauldron_right',1045),(13179,13179,'accessories/wearable_items/_exp06/dragon_chain/head_dragon_helm',1045),(13180,13180,'accessories/wearable_items/_exp06/dragon_leather/shoulders_pauldrons',1045),(13181,13181,'accessories/wearable_items/_exp06/dragon_robe/chest_pauldrons',1045),(13182,13182,'accessories/wearable_items/_exp06/dragon_robe/head_dragon_hood',1045),(13183,13183,'staticobjects/_exp02/bonemire_houseitem_dpo',1045),(13184,13184,'accessories/wieldable_items/weapons/exp06/1h_crush/exp06_1h_crush_erudin_library_wrench',1045),(13185,13185,'accessories/wieldable_items/weapons/exp06/1h_crush/exp06_1h_crush_erudin_library_wand',1045),(13186,13186,'accessories/wearable_items/_exp06/dragon_vanguard/snap_ons/dragon_shin_right',1045),(13187,13187,'accessories/wearable_items/_exp06/dragon_vanguard/snap_ons/dragon_forearm_left',1045),(13188,13188,'accessories/wearable_items/_exp06/dragon_vanguard/snap_ons/dragon_forearm_right',1045),(13189,13189,'accessories/wearable_items/_exp06/dragon_vanguard/snap_ons/dragon_pauldrons_lower_left',1045),(13190,13190,'accessories/wearable_items/_exp06/dragon_vanguard/snap_ons/dragon_pauldrons_lower_right',1045),(13191,13191,'accessories/wearable_items/_exp06/dragon_vanguard/snap_ons/dragon_shin_left',1045),(13192,13192,'accessories/wieldable_items/weapons/exp06/bow/exp06_2h_tallonite_longbow',1045),(13193,13193,'accessories/wieldable_items/weapons/exp06/bow/exp06_tallonite_longbow',1045),(13194,13194,'accessories/wearable_items/snapons/backpacks/backpack_brewmeister_swivel/backpack_brewmeister_swivel_mug',1045),(13195,13195,'accessories/wearable_items/snapons/backpacks/backpack_brewmeister_swivel/backpack_brewmeister_swivel',1045),(13196,13196,'accessories/wearable_items/snapons/backpacks/backpack_brewmeister_swivel/backpack_brewmeister_swivel_barrel',1045),(13197,13197,'accessories/wearable_items/snapons/backpacks/backpack_brewmeister_swivel/backpack_brewmeister_swivel_chalice',1045),(13198,13198,'accessories/wearable_items/snapons/backpacks/backpack_brewmeister_swivel/backpack_brewmeister_swivel_cup',1045),(13199,13199,'accessories/wearable_items/_exp07/ice_armor/chain/skirt',1045),(13200,13200,'accessories/wearable_items/_exp07/ice_armor/chain/chest',1045),(13201,13201,'accessories/wearable_items/_exp07/ice_armor/chain/feet',1045),(13202,13202,'accessories/wearable_items/_exp07/ice_armor/chain/forearms',1045),(13203,13203,'accessories/wearable_items/_exp07/ice_armor/chain/hands',1045),(13204,13204,'accessories/wearable_items/_exp07/ice_armor/chain/head',1045),(13205,13205,'accessories/wearable_items/_exp07/ice_armor/chain/legs',1045),(13206,13206,'accessories/wearable_items/_exp07/ice_armor/chain/legs_noskirt',1045),(13207,13207,'accessories/wearable_items/_exp07/ice_armor/chain/shoulders',1045),(13208,13208,'accessories/wearable_items/_exp07/ice_armor/chain/shoulders_pauldrons',1045),(13209,13209,'_exp06/characters/tool_users/snow_orc/snow_orc_base',1045),(13210,13210,'accessories/npc_wearables/snow_orc/shoulders_common_armor',1045),(13211,13211,'accessories/npc_wearables/snow_orc/chest_common_armor',1045),(13212,13212,'accessories/npc_wearables/snow_orc/chest_heavy_armor',1045),(13213,13213,'accessories/npc_wearables/snow_orc/chest_hunter_armor',1045),(13214,13214,'accessories/npc_wearables/snow_orc/chest_hunter_armor_no_shoulders',1045),(13215,13215,'accessories/npc_wearables/snow_orc/feet_common_armor',1045),(13216,13216,'accessories/npc_wearables/snow_orc/feet_heavy_armor',1045),(13217,13217,'accessories/npc_wearables/snow_orc/feet_hunter_armor',1045),(13218,13218,'accessories/npc_wearables/snow_orc/forearms_heavy_armor_both',1045),(13219,13219,'accessories/npc_wearables/snow_orc/forearms_hunter_armor_both',1045),(13220,13220,'accessories/npc_wearables/snow_orc/hands_common_armor',1045),(13221,13221,'accessories/npc_wearables/snow_orc/head_common_armor',1045),(13222,13222,'accessories/npc_wearables/snow_orc/head_heavy_armor',1045),(13223,13223,'accessories/npc_wearables/snow_orc/head_hunter_armor',1045),(13224,13224,'accessories/npc_wearables/snow_orc/legs_common_armor',1045),(13225,13225,'accessories/npc_wearables/snow_orc/legs_heavy_armor',1045),(13226,13226,'staticobjects/liveevent/cityfestivals/halas_cup_03',1045),(13227,13227,'staticobjects/tableware/hal_cup_04',1045),(13228,13228,'staticobjects/liveevent/cityfestivals/halas_coldain_bench_02',1045),(13229,13229,'staticobjects/liveevent/cityfestivals/halas_barbarian_anvil',1045),(13230,13230,'staticobjects/liveevent/cityfestivals/halas_barbarian_bar_01',1045),(13231,13231,'staticobjects/liveevent/cityfestivals/halas_barbarian_bar_02',1045),(13232,13232,'staticobjects/crates/halas_crate_04',1045),(13233,13233,'staticobjects/counters/halas_barbarian_counter_02',1045),(13234,13234,'staticobjects/liveevent/cityfestivals/halas_barbarian_stool_01',1045),(13235,13235,'staticobjects/liveevent/cityfestivals/halas_barbarian_table_01',1045),(13236,13236,'staticobjects/soe_wallet/halas_barbarian_bar_table_02',1045),(13237,13237,'staticobjects/liveevent/cityfestivals/halas_forge_02',1045),(13238,13238,'staticobjects/liveevent/cityfestivals/halas_forge_01',1045),(13239,13239,'staticobjects/liveevent/cityfestivals/halas_anvil_01',1045),(13240,13240,'staticobjects/liveevent/cityfestivals/halas_floortile_ice',1045),(13241,13241,'staticobjects/liveevent/cityfestivals/dpo_wallmailbox_halas',1045),(13242,13242,'staticobjects/liveevent/cityfestivals/dpo_gf_kel_int_divider_wall01_halas',1045),(13243,13243,'staticobjects/liveevent/cityfestivals/halas_mirror',1045),(13244,13244,'staticobjects/liveevent/cityfestivals/halas_largecolumn',1045),(13245,13245,'staticobjects/liveevent/cityfestivals/halas_displaycounter',1045),(13246,13246,'staticobjects/liveevent/cityfestivals/halas_table_pedestal',1045),(13247,13247,'staticobjects/liveevent/cityfestivals/halas_table_03',1045),(13248,13248,'staticobjects/liveevent/cityfestivals/halas_coldain_torch_01',1045),(13249,13249,'staticobjects/liveevent/cityfestivals/halas_chair_05',1045),(13250,13250,'staticobjects/liveevent/cityfestivals/halas_chair_04',1045),(13251,13251,'accessories/wearable_items/_exp07/ice_armor/leather/skirt',1045),(13252,13252,'accessories/wearable_items/_exp07/ice_armor/leather/chest',1045),(13253,13253,'accessories/wearable_items/_exp07/ice_armor/leather/feet',1045),(13254,13254,'accessories/wearable_items/_exp07/ice_armor/leather/forearms',1045),(13255,13255,'accessories/wearable_items/_exp07/ice_armor/leather/hands',1045),(13256,13256,'accessories/wearable_items/_exp07/ice_armor/leather/head',1045),(13257,13257,'accessories/wearable_items/_exp07/ice_armor/leather/legs',1045),(13258,13258,'accessories/wearable_items/_exp07/ice_armor/leather/legs_noskirt',1045),(13259,13259,'accessories/wearable_items/_exp07/ice_armor/leather/shoulders',1045),(13260,13260,'accessories/wearable_items/_exp07/ice_armor/leather/shoulders_pauldrons',1045),(13261,13261,'accessories/wearable_items/snapons/backpacks/backpack_adventurer_swivel/backpack_adventurer_swivel_spikes',1045),(13262,13262,'accessories/wearable_items/snapons/backpacks/backpack_adventurer_swivel/backpack_adventurer_swivel',1045),(13263,13263,'accessories/wearable_items/snapons/backpacks/backpack_adventurer_swivel/backpack_adventurer_swivel_jug',1045),(13264,13264,'accessories/wearable_items/snapons/backpacks/backpack_adventurer_swivel/backpack_adventurer_swivel_lock',1045),(13265,13265,'accessories/wearable_items/snapons/backpacks/backpack_adventurer_swivel/backpack_adventurer_swivel_mallet',1045),(13266,13266,'accessories/wearable_items/snapons/backpacks/backpack_adventurer_swivel/backpack_adventurer_swivel_rope',1045),(13267,13267,'accessories/wearable_items/snapons/backpacks/backpack_provisioner_swivel/backpack_provisioner_swivel_sauce_pan',1045),(13268,13268,'accessories/wearable_items/snapons/backpacks/backpack_provisioner_swivel/backpack_provisioner_swivel',1045),(13269,13269,'accessories/wearable_items/snapons/backpacks/backpack_provisioner_swivel/backpack_provisioner_swivel_bread_loaf',1045),(13270,13270,'accessories/wearable_items/snapons/backpacks/backpack_provisioner_swivel/backpack_provisioner_swivel_coffee_pot',1045),(13271,13271,'accessories/wearable_items/snapons/backpacks/backpack_provisioner_swivel/backpack_provisioner_swivel_cooking_pot',1045),(13272,13272,'accessories/wearable_items/snapons/backpacks/backpack_provisioner_swivel/backpack_provisioner_swivel_rolling_pin',1045),(13273,13273,'accessories/wearable_items/snapons/backpacks/backpack_provisioner_swivel/backpack_provisioner_swivel_salami_base',1045),(13274,13274,'accessories/wearable_items/snapons/backpacks/backpack_provisioner_swivel/backpack_provisioner_swivel_salami_end_01',1045),(13275,13275,'accessories/wearable_items/snapons/backpacks/backpack_provisioner_swivel/backpack_provisioner_swivel_salami_end_02',1045),(13276,13276,'accessories/wearable_items/snapons/backpacks/backpack_provisioner_swivel/backpack_provisioner_swivel_salami_three_links',1045),(13277,13277,'accessories/wearable_items/snapons/backpacks/backpack_provisioner_swivel/backpack_provisioner_swivel_salami_two_links',1045),(13278,13278,'creatures/monsters/drake_ice',1045),(13279,13279,'staticobjects/rocks/hal_obj_cave_rock02',1045),(13280,13280,'staticobjects/chests/chest_halas_01',1045),(13281,13281,'staticobjects/chests/chest_halas_02',1045),(13282,13282,'staticobjects/chests/chest_halas_03',1045),(13283,13283,'staticobjects/chairs/halas_barbarian_stool_02',1045),(13284,13284,'staticobjects/chairs/halas_chair_02',1045),(13285,13285,'staticobjects/soe_wallet/halas_chair_03',1045),(13286,13286,'staticobjects/racks/hal_barbarian_weaponrack_01',1045),(13287,13287,'staticobjects/racks/hal_barbarian_weaponrack_02',1045),(13288,13288,'staticobjects/racks/hal_coldain_weaponrack_01',1045),(13289,13289,'staticobjects/barricades/hal_barricade_coldane_01',1045),(13290,13290,'staticobjects/benches/halas_coldain_bench_01',1045),(13291,13291,'staticobjects/counters/halas_barbarian_counter_01',1045),(13292,13292,'staticobjects/books/halas_coldain_books_03',1045),(13293,13293,'staticobjects/books/halas_coldain_books_05',1045),(13294,13294,'staticobjects/liveevent/cityfestivals/halas_coldain_bookshelf_01',1045),(13295,13295,'staticobjects/soe_wallet/halas_coldain_bookshelf_02',1045),(13296,13296,'staticobjects/liveevent/cityfestivals/halas_coldain_bookshelf_03',1045),(13297,13297,'staticobjects/lighting/halas_coldain_lantern_01',1045),(13298,13298,'staticobjects/lighting/halas_oil_lamp_01',1045),(13299,13299,'staticobjects/lighting/halas_oil_lamp_03',1045),(13300,13300,'staticobjects/lighting/halas_shipwreck_torch_01',1045),(13301,13301,'staticobjects/crates/halas_crate_01',1045),(13302,13302,'staticobjects/crates/halas_crate_02',1045),(13303,13303,'staticobjects/crates/halas_crate_03',1045),(13304,13304,'staticobjects/stable_items/halas_hitchingpost_01',1045),(13305,13305,'staticobjects/tables/halas_barbarian_table_01',1045),(13306,13306,'staticobjects/tables/halas_barbarian_table_02',1045),(13307,13307,'staticobjects/tables/halas_shipwreck_table_01',1045),(13308,13308,'staticobjects/weapons/halas_hammer_01',1045),(13309,13309,'staticobjects/blacksmith/halas_tongs_01',1045),(13310,13310,'staticobjects/fires/halas_ph_firepit_blue_01',1045),(13311,13311,'staticobjects/fires/halas_ph_firepit_red_01',1045),(13312,13312,'staticobjects/fires/halas_ph_firepit_unlit_01',1045),(13313,13313,'staticobjects/barricades/hal_barricade_coldane_02',1045),(13314,13314,'staticobjects/barricades/hal_barricade_coldane_03',1045),(13315,13315,'creatures/tu/ettin_shaman',1045),(13316,13316,'creatures/tu/ettin_skeletal',1045),(13317,13317,'creatures/tu/ettin_warlord',1045),(13318,13318,'creatures/tu/ettin_warrior',1045),(13319,13319,'staticobjects/mailboxes/halas_mail_kiosk_01',1045),(13320,13320,'creatures/mounts/rhino_mount/rhino_snow',1045),(13321,13321,'creatures/mounts/flying_disc/flying_disc_elven_01',1045),(13322,13322,'staticobjects/soe_wallet/halas_barbarian_bed_01',1045),(13323,13323,'staticobjects/liveevent/cityfestivals/halas_barbarian_bed_02',1045),(13324,13324,'staticobjects/liveevent/cityfestivals/halas_barbarian_bed_03',1045),(13325,13325,'staticobjects/fish/kp_fish_hanging01',1045),(13326,13326,'staticobjects/signs/halas/hal_barbarian_great_hall_sign_01',1045),(13327,13327,'staticobjects/signs/halas/hal_coldain_hanging_sign_01',1045),(13328,13328,'staticobjects/signs/halas/hal_coldain_hanging_sign_02',1045),(13329,13329,'staticobjects/signs/halas/hal_coldain_house_sign_01',1045),(13330,13330,'staticobjects/signs/halas/hal_coldain_house_sign_02',1045),(13331,13331,'staticobjects/liveevent/cityfestivals/halas_coldain_house_sign_03',1045),(13332,13332,'staticobjects/signs/halas/hal_coldain_house_sign_04',1045),(13333,13333,'staticobjects/signs/halas/hal_coldain_house_sign_05',1045),(13334,13334,'staticobjects/barrels/halas_four_barrels_01',1045),(13335,13335,'staticobjects/barrels/halas_three_barrels_01',1045),(13336,13336,'staticobjects/barrels/halas_three_barrels_snow_01',1045),(13337,13337,'staticobjects/barrels/halas_three_barrels_snow_02',1045),(13338,13338,'staticobjects/debris/halas_coldain_debris_01',1045),(13339,13339,'staticobjects/debris/halas_coldain_debris_02',1045),(13340,13340,'staticobjects/kegs/halas_keg_large_01',1045),(13341,13341,'staticobjects/tents/halas_lean_tent_01',1045),(13342,13342,'staticobjects/tents/halas_lean_tent_02',1045),(13343,13343,'staticobjects/weapons/halas_miningtool_pick01',1045),(13344,13344,'creatures/monsters/slug_trail_fx',1045),(13345,13345,'accessories/wearable_items/_exp07/new_halas_armor/leather_fur/skirt',1045),(13346,13346,'accessories/wearable_items/_exp07/new_halas_armor/leather_fur/chest',1045),(13347,13347,'accessories/wearable_items/_exp07/new_halas_armor/leather_fur/feet',1045),(13348,13348,'accessories/wearable_items/_exp07/new_halas_armor/leather_fur/forearms',1045),(13349,13349,'accessories/wearable_items/_exp07/new_halas_armor/leather_fur/hands',1045),(13350,13350,'accessories/wearable_items/_exp07/new_halas_armor/leather_fur/head',1045),(13351,13351,'accessories/wearable_items/_exp07/new_halas_armor/leather_fur/legs',1045),(13352,13352,'accessories/wearable_items/_exp07/new_halas_armor/leather_fur/legs_noskirt',1045),(13353,13353,'accessories/wearable_items/_exp07/new_halas_armor/leather_fur/pauldron_left',1045),(13354,13354,'accessories/wearable_items/_exp07/new_halas_armor/leather_fur/pauldron_right',1045),(13355,13355,'accessories/wearable_items/_exp07/new_halas_armor/leather_fur/shoulders',1045),(13356,13356,'accessories/wearable_items/_exp07/new_halas_armor/leather_fur/shoulders_nopauldrons',1045),(13357,13357,'staticobjects/soe_wallet/halas_polarbear_rug_01',1045),(13358,13358,'staticobjects/rugs/halas_rug_01',1045),(13359,13359,'staticobjects/rugs/halas_rug_02',1045),(13360,13360,'staticobjects/rugs/halas_rug_03',1045),(13361,13361,'staticobjects/rugs/halas_rug_04',1045),(13362,13362,'staticobjects/rugs/halas_rug_05',1045),(13363,13363,'staticobjects/rugs/halas_rug_06',1045),(13364,13364,'staticobjects/rugs/halas_rug_07',1045),(13365,13365,'_exp07/characters/monsters/vrewwx_dragon/vrewwx',1045),(13366,13366,'accessories/wearable_items/cloak/exp07/cloak_fur_silk',1045),(13367,13367,'accessories/wearable_items/cloak/exp07/cloak_stained_glass',1045),(13368,13368,'_exp07/characters/monsters/vrewwx_dragon/vrewwx_baby',1045),(13369,13369,'staticobjects/liveevent/cityfestivals/dpo_mailbox_halas',1045),(13370,13370,'accessories/wearable_items/_exp07/ice_armor/vanguard/skirt',1045),(13371,13371,'accessories/wearable_items/_exp07/ice_armor/vanguard/chest',1045),(13372,13372,'accessories/wearable_items/_exp07/ice_armor/vanguard/feet',1045),(13373,13373,'accessories/wearable_items/_exp07/ice_armor/vanguard/forearms',1045),(13374,13374,'accessories/wearable_items/_exp07/ice_armor/vanguard/hands',1045),(13375,13375,'accessories/wearable_items/_exp07/ice_armor/vanguard/head',1045),(13376,13376,'accessories/wearable_items/_exp07/ice_armor/vanguard/ice_pauldron_left',1045),(13377,13377,'accessories/wearable_items/_exp07/ice_armor/vanguard/ice_pauldron_right',1045),(13378,13378,'accessories/wearable_items/_exp07/ice_armor/vanguard/legs',1045),(13379,13379,'accessories/wearable_items/_exp07/ice_armor/vanguard/legs_noskirt',1045),(13380,13380,'accessories/wearable_items/_exp07/ice_armor/vanguard/right',1045),(13381,13381,'accessories/wearable_items/_exp07/ice_armor/vanguard/shoulders',1045),(13382,13382,'accessories/wearable_items/_exp07/ice_armor/vanguard/shoulders_ice_pauldrons',1045),(13383,13383,'accessories/wearable_items/_exp07/ice_armor/vanguard/shoulders_nopauldrons',1045),(13384,13384,'staticobjects/shop/halas_displaycase_small',1045),(13385,13385,'staticobjects/shop/floor_displaycase_any_ornate01_small',1045),(13386,13386,'staticobjects/trophies/halas_polar_bear_head_01',1045),(13387,13387,'staticobjects/rugs/halas_lion_pelt_01',1045),(13388,13388,'staticobjects/tapestry/halas_orc_camp_pelt_01',1045),(13389,13389,'staticobjects/wood/halas_orc_camp_firewood_01',1045),(13390,13390,'staticobjects/liveevent/tinkerfest/dpo_inna_wreckage_doublefloorcog',1045),(13391,13391,'staticobjects/liveevent/tinkerfest/dpo_inna_wreckage_doublewallcog',1045),(13392,13392,'staticobjects/liveevent/tinkerfest/dpo_inna_wreckage_floorcog',1045),(13393,13393,'staticobjects/liveevent/tinkerfest/dpo_inna_wreckage_wallcogrounded',1045),(13394,13394,'staticobjects/liveevent/tinkerfest/dpo_inna_landing_counter01',1045),(13395,13395,'staticobjects/liveevent/tinkerfest/dpo_klak_light01',1045),(13396,13396,'staticobjects/liveevent/tinkerfest/dpo_klak_rm03_int_gate',1045),(13397,13397,'staticobjects/liveevent/tinkerfest/dpo_klak_rm03_int_gear01_greyplates',1045),(13398,13398,'staticobjects/liveevent/tinkerfest/dpo_klak_rm03_int_gear08_grey',1045),(13399,13399,'staticobjects/liveevent/tinkerfest/dpo_klak_rm04_int_bowlfan',1045),(13400,13400,'staticobjects/liveevent/tinkerfest/dpo_klak_rm04_int_fan01',1045),(13401,13401,'staticobjects/liveevent/tinkerfest/dpo_klak_rm04_int_roller01_rot',1045),(13402,13402,'staticobjects/liveevent/tinkerfest/dpo_klak_rm06_int_rechargingpod',1045),(13403,13403,'staticobjects/liveevent/tinkerfest/dpo_klak_rm06_int_rechargingstation',1045),(13404,13404,'staticobjects/liveevent/tinkerfest/dpo_powerorb_assembly',1045),(13405,13405,'staticobjects/liveevent/tinkerfest/dpo_klak_rm08_int_medicallight',1045),(13406,13406,'staticobjects/liveevent/tinkerfest/dpo_klak_rm05_int_squaregear02_rot',1045),(13407,13407,'staticobjects/liveevent/tinkerfest/dpo_klak_rm14_int_powercell01',1045),(13408,13408,'staticobjects/liveevent/tinkerfest/dpo_inna_wreckage_bigfloorcog',1045),(13409,13409,'staticobjects/liveevent/tinkerfest/dpo_klak_rm03_int_gear01_shinysilver',1045),(13410,13410,'staticobjects/liveevent/tinkerfest/dpo_klak_rm03_int_gear01_red',1045),(13411,13411,'staticobjects/liveevent/tinkerfest/dpo_panel_red_plates',1045),(13412,13412,'staticobjects/liveevent/tinkerfest/dpo_panel_hammered_metal',1045),(13413,13413,'staticobjects/liveevent/tinkerfest/dpo_panel_grey_plates',1045),(13414,13414,'staticobjects/liveevent/tinkerfest/dpo_panel_rusty_plates',1045),(13415,13415,'staticobjects/liveevent/tinkerfest/dpo_panel_grey_patterned',1045),(13416,13416,'staticobjects/liveevent/tinkerfest/dpo_inna_wreckage_propeller',1045),(13417,13417,'staticobjects/liveevent/tinkerfest/dpo_klak_rm03_int_gear01_yellow',1045),(13418,13418,'staticobjects/liveevent/tinkerfest/dpo_klak_rm16_int_door',1045),(13419,13419,'staticobjects/liveevent/tinkerfest/dpo_klak_rm09_int_menacekey',1045),(13420,13420,'staticobjects/_exp06/ornate_torch01',1045),(13421,13421,'staticobjects/_exp06/ornate_torch01_lit',1045),(13422,13422,'staticobjects/catapult/snow_goblin_catapult',1045),(13423,13423,'staticobjects/liveevent/tinkerfest/tinkerfest_book01',1045),(13424,13424,'accessories/wieldable_items/weapons/exp07/1h_sword/exp07_sword_swept',1045),(13425,13425,'accessories/wearable_items/_exp07/new_halas_armor/robe_fur/skirt',1045),(13426,13426,'accessories/wearable_items/_exp07/new_halas_armor/robe_fur/chest',1045),(13427,13427,'accessories/wearable_items/_exp07/new_halas_armor/robe_fur/feet',1045),(13428,13428,'accessories/wearable_items/_exp07/new_halas_armor/robe_fur/hands',1045),(13429,13429,'accessories/wearable_items/_exp07/new_halas_armor/robe_fur/head',1045),(13430,13430,'accessories/wearable_items/_exp07/new_halas_armor/robe_fur/head_collar',1045),(13431,13431,'accessories/wearable_items/_exp07/new_halas_armor/robe_fur/pants',1045),(13432,13432,'accessories/wearable_items/_exp07/new_halas_armor/robe_fur/pauldron_left',1045),(13433,13433,'accessories/wearable_items/_exp07/new_halas_armor/robe_fur/pauldron_right',1045),(13434,13434,'creatures/tu/elf_princess',1045),(13435,13435,'creatures/tu/firiona_vie',1045),(13436,13436,'staticobjects/pvp/dpo_bone_tower_warfields',1045),(13437,13437,'staticobjects/pvp/dpo_stone_steppes_tower_warfields',1045),(13438,13438,'staticobjects/weapons/dpo_arrow_green_sparkles',1045),(13439,13439,'staticobjects/soe_wallet/halas_barbarian_weaponrack_01_weapons_02',1045),(13440,13440,'staticobjects/soe_wallet/halas_candle_blue_table_base',1045),(13441,13441,'accessories/wearable_items/_exp08/dragon_armor/vanguard_red/right',1096),(13442,13442,'accessories/wearable_items/_exp08/dragon_armor/vanguard_red/shoulders',1096),(13443,13443,'accessories/wearable_items/_exp08/dragon_armor/vanguard_red/shoulders_epic',1096),(13444,13444,'accessories/wearable_items/_exp07/ice_armor/vanguard/head_ice_helm',1045),(13445,13445,'creatures/tu/ettin_warlord_helm_ice',1045),(13446,13446,'creatures/tu/ettin_warlord_helm',1045),(13447,13447,'creatures/tu/valkyrie_ghost_loop',1045),(13448,13448,'accessories/wearable_items/cloak/exp07/cloak_tinker_fest',1045),(13449,13449,'creatures/tu/skeleton_sergeant_paladin_ice',1045),(13450,13450,'creatures/tu/skeleton_mage_ice',1045),(13451,13451,'creatures/tu/succubus_ice',1045),(13452,13452,'ec/npc/goblin_ice_transparent',1045),(13453,13453,'creatures/monsters/dervish_ice_dark',1045),(13454,13454,'creatures/tu/skeleton_sergeant_paladin_ice_dark',1045),(13455,13455,'creatures/tu/skeleton_king_greater_ice_dark',1045),(13456,13456,'creatures/tu/skeleton_mage_ice_dark',1045),(13457,13457,'creatures/tu/succubus_ice_dark',1045),(13458,13458,'ec/npc/goblin_new_ice_dark',1045),(13459,13459,'ec/npc/goblin_new_ice',1045),(13460,13460,'staticobjects/tcg/tcg_tinkered_box_red_button',1045),(13461,13461,'_exp07/characters/tool_users/othmir_male_base',1045),(13462,13462,'accessories/wieldable_items/weapons/exp05/exp05_korsha_hammer1h_fx',1045),(13463,13463,'accessories/wieldable_items/weapons/exp06/1h_sword/exp06_1h_sword_toothed_cleaver_fx',1045),(13464,13464,'accessories/wieldable_items/weapons/exp06/1h_sword/exp06_1h_sword_tallonite_katana_slice_fx',1045),(13465,13465,'accessories/wieldable_items/weapons/fist/fist_aether_striker',1045),(13466,13466,'accessories/wieldable_items/weapons/exp05/exp05_bow_guk_bow_eyefx',1045),(13467,13467,'accessories/wieldable_items/weapons/exp06/1h_crush/exp06_1h_crush_erudin_library_wand_fx',1045),(13468,13468,'accessories/wieldable_items/weapons/exp06/staff/erudite_rune_staff_fx',1045),(13469,13469,'accessories/wearable_items/_exp06/chaos_armor_gold/chain_armor/skirt',1045),(13470,13470,'accessories/wearable_items/_exp06/chaos_armor_gold/chain_armor/chest',1045),(13471,13471,'accessories/wearable_items/_exp06/chaos_armor_gold/chain_armor/feet',1045),(13472,13472,'accessories/wearable_items/_exp06/chaos_armor_gold/chain_armor/forearms',1045),(13473,13473,'accessories/wearable_items/_exp06/chaos_armor_gold/chain_armor/hands',1045),(13474,13474,'accessories/wearable_items/_exp06/chaos_armor_gold/chain_armor/head',1045),(13475,13475,'accessories/wearable_items/_exp06/chaos_armor_gold/chain_armor/head_chain_epic',1045),(13476,13476,'accessories/wearable_items/_exp06/chaos_armor_gold/chain_armor/legs',1045),(13477,13477,'accessories/wearable_items/_exp06/chaos_armor_gold/chain_armor/legs_noskirt',1045),(13478,13478,'accessories/wearable_items/_exp06/chaos_armor_gold/chain_armor/shoulders',1045),(13479,13479,'accessories/wearable_items/_exp06/chaos_armor_gold/chain_armor/shoulders_chaos_epic',1045),(13480,13480,'accessories/wearable_items/_exp06/chaos_armor_gold/chain_armor/snap_ons/chaos_pauldrons_right',1045),(13481,13481,'accessories/wearable_items/_exp06/chaos_armor_gold/chain_armor/snap_ons/chaos_pauldrons_left',1045),(13482,13482,'accessories/wearable_items/_exp06/chaos_armor_gold/leather_armor/snap_ons/head_chaos_helm',1045),(13483,13483,'accessories/wearable_items/_exp06/chaos_armor_gold/leather_armor/snap_ons/chaos_pauldrons_left',1045),(13484,13484,'accessories/wearable_items/_exp06/chaos_armor_gold/leather_armor/snap_ons/chaos_pauldrons_right',1045),(13485,13485,'accessories/wearable_items/_exp06/chaos_armor_gold/leather_armor/skirt',1045),(13486,13486,'accessories/wearable_items/_exp06/chaos_armor_gold/leather_armor/chest',1045),(13487,13487,'accessories/wearable_items/_exp06/chaos_armor_gold/leather_armor/feet',1045),(13488,13488,'accessories/wearable_items/_exp06/chaos_armor_gold/leather_armor/forearms',1045),(13489,13489,'accessories/wearable_items/_exp06/chaos_armor_gold/leather_armor/hands',1045),(13490,13490,'accessories/wearable_items/_exp06/chaos_armor_gold/leather_armor/head',1045),(13491,13491,'accessories/wearable_items/_exp06/chaos_armor_gold/leather_armor/head_chaos_epic',1045),(13492,13492,'accessories/wearable_items/_exp06/chaos_armor_gold/leather_armor/legs',1045),(13493,13493,'accessories/wearable_items/_exp06/chaos_armor_gold/leather_armor/legs_noskirt',1045),(13494,13494,'accessories/wearable_items/_exp06/chaos_armor_gold/leather_armor/shoulders_epic_pauldrons',1045),(13495,13495,'accessories/wearable_items/_exp06/chaos_armor_gold/leather_armor/shoulders_no_pauldrons',1045),(13496,13496,'accessories/wearable_items/_exp06/chaos_armor_gold/robe_armor/snap_ons/chaos_pauldrons_upper_right',1045),(13497,13497,'accessories/wearable_items/_exp06/chaos_armor_gold/robe_armor/snap_ons/chaos_pauldrons_lower_left',1045),(13498,13498,'accessories/wearable_items/_exp06/chaos_armor_gold/robe_armor/snap_ons/chaos_pauldrons_lower_right',1045),(13499,13499,'accessories/wearable_items/_exp06/chaos_armor_gold/robe_armor/snap_ons/chaos_pauldrons_upper_left',1045),(13500,13500,'accessories/wearable_items/_exp06/chaos_armor_gold/robe_armor/skirt',1045),(13501,13501,'accessories/wearable_items/_exp06/chaos_armor_gold/robe_armor/chest',1045),(13502,13502,'accessories/wearable_items/_exp06/chaos_armor_gold/robe_armor/chest_chaos_pauldrons',1045),(13503,13503,'accessories/wearable_items/_exp06/chaos_armor_gold/robe_armor/feet',1045),(13504,13504,'accessories/wearable_items/_exp06/chaos_armor_gold/robe_armor/hands',1045),(13505,13505,'accessories/wearable_items/_exp06/chaos_armor_gold/robe_armor/head',1045),(13506,13506,'accessories/wearable_items/_exp06/chaos_armor_gold/robe_armor/head_chaos_helm',1045),(13507,13507,'accessories/wearable_items/_exp06/chaos_armor_gold/robe_armor/head_collar',1045),(13508,13508,'accessories/wearable_items/_exp06/chaos_armor_gold/robe_armor/pants',1045),(13509,13509,'accessories/wearable_items/_exp06/chaos_armor_gold/vanguard_armor/snap_ons/chaos_shin_right',1045),(13510,13510,'accessories/wearable_items/_exp06/chaos_armor_gold/vanguard_armor/snap_ons/chaos_forearm_left',1045),(13511,13511,'accessories/wearable_items/_exp06/chaos_armor_gold/vanguard_armor/snap_ons/chaos_forearm_right',1045),(13512,13512,'accessories/wearable_items/_exp06/chaos_armor_gold/vanguard_armor/snap_ons/chaos_pauldrons_lower_left',1045),(13513,13513,'accessories/wearable_items/_exp06/chaos_armor_gold/vanguard_armor/snap_ons/chaos_pauldrons_lower_right',1045),(13514,13514,'accessories/wearable_items/_exp06/chaos_armor_gold/vanguard_armor/snap_ons/chaos_pauldrons_upper_left',1045),(13515,13515,'accessories/wearable_items/_exp06/chaos_armor_gold/vanguard_armor/snap_ons/chaos_pauldrons_upper_right',1045),(13516,13516,'accessories/wearable_items/_exp06/chaos_armor_gold/vanguard_armor/snap_ons/chaos_shin_left',1045),(13517,13517,'accessories/wearable_items/_exp06/chaos_armor_gold/vanguard_armor/skirt',1045),(13518,13518,'accessories/wearable_items/_exp06/chaos_armor_gold/vanguard_armor/chest',1045),(13519,13519,'accessories/wearable_items/_exp06/chaos_armor_gold/vanguard_armor/feet',1045),(13520,13520,'accessories/wearable_items/_exp06/chaos_armor_gold/vanguard_armor/forearms',1045),(13521,13521,'accessories/wearable_items/_exp06/chaos_armor_gold/vanguard_armor/hands',1045),(13522,13522,'accessories/wearable_items/_exp06/chaos_armor_gold/vanguard_armor/hands_chaos_gauntlets',1045),(13523,13523,'accessories/wearable_items/_exp06/chaos_armor_gold/vanguard_armor/head',1045),(13524,13524,'accessories/wearable_items/_exp06/chaos_armor_gold/vanguard_armor/head_chaos_helm',1045),(13525,13525,'accessories/wearable_items/_exp06/chaos_armor_gold/vanguard_armor/legs',1045),(13526,13526,'accessories/wearable_items/_exp06/chaos_armor_gold/vanguard_armor/legs_chaos_shins',1045),(13527,13527,'accessories/wearable_items/_exp06/chaos_armor_gold/vanguard_armor/legs_noskirt',1045),(13528,13528,'accessories/wearable_items/_exp06/chaos_armor_gold/vanguard_armor/right',1045),(13529,13529,'accessories/wearable_items/_exp06/chaos_armor_gold/vanguard_armor/shoulders',1045),(13530,13530,'accessories/wearable_items/_exp06/chaos_armor_gold/vanguard_armor/shoulders_chaos_armor_all',1045),(13531,13531,'accessories/wearable_items/_exp06/chaos_armor_gold/vanguard_armor/shoulders_nopauldrons',1045),(13532,13532,'accessories/wearable_items/_exp07/station_cash_armor/leather_fur_black/skirt',1045),(13533,13533,'accessories/wearable_items/_exp07/station_cash_armor/leather_fur_black/chest',1045),(13534,13534,'accessories/wearable_items/_exp07/station_cash_armor/leather_fur_black/feet',1045),(13535,13535,'accessories/wearable_items/_exp07/station_cash_armor/leather_fur_black/forearms',1045),(13536,13536,'accessories/wearable_items/_exp07/station_cash_armor/leather_fur_black/hands',1045),(13537,13537,'accessories/wearable_items/_exp07/station_cash_armor/leather_fur_black/head',1045),(13538,13538,'accessories/wearable_items/_exp07/station_cash_armor/leather_fur_black/legs',1045),(13539,13539,'accessories/wearable_items/_exp07/station_cash_armor/leather_fur_black/legs_noskirt',1045),(13540,13540,'accessories/wearable_items/_exp07/station_cash_armor/leather_fur_black/pauldron_left',1045),(13541,13541,'accessories/wearable_items/_exp07/station_cash_armor/leather_fur_black/pauldron_right',1045),(13542,13542,'accessories/wearable_items/_exp07/station_cash_armor/leather_fur_black/shoulders',1045),(13543,13543,'accessories/wearable_items/_exp07/station_cash_armor/leather_fur_black/shoulders_nopauldrons',1045),(13544,13544,'accessories/wearable_items/_exp07/station_cash_armor/robe_fur_black/skirt',1045),(13545,13545,'accessories/wearable_items/_exp07/station_cash_armor/robe_fur_black/chest',1045),(13546,13546,'accessories/wearable_items/_exp07/station_cash_armor/robe_fur_black/feet',1045),(13547,13547,'accessories/wearable_items/_exp07/station_cash_armor/robe_fur_black/hands',1045),(13548,13548,'accessories/wearable_items/_exp07/station_cash_armor/robe_fur_black/head',1045),(13549,13549,'accessories/wearable_items/_exp07/station_cash_armor/robe_fur_black/head_collar',1045),(13550,13550,'accessories/wearable_items/_exp07/station_cash_armor/robe_fur_black/pants',1045),(13551,13551,'accessories/wearable_items/_exp07/station_cash_armor/robe_fur_black/pauldron_left',1045),(13552,13552,'accessories/wearable_items/_exp07/station_cash_armor/robe_fur_black/pauldron_right',1045),(13553,13553,'accessories/armor_dummy/armor_dummy_male_topiary',1045),(13554,13554,'accessories/armor_dummy/armor_dummy_female_topiary',1045),(13555,13555,'accessories/wearable_items/_exp06/chaos_armor_gold/chain_armor/snap_ons/chaos_pauldrons_right_fx',1045),(13556,13556,'accessories/wearable_items/_exp06/chaos_armor_gold/chain_armor/snap_ons/chaos_pauldrons_left_fx',1045),(13557,13557,'accessories/wearable_items/_exp06/chaos_armor_gold/chain_armor/shoulders_chaos_epic_fx',1045),(13558,13558,'accessories/wearable_items/_exp06/chaos_armor_gold/leather_armor/snap_ons/chaos_pauldrons_right_fx',1045),(13559,13559,'accessories/wearable_items/_exp06/chaos_armor_gold/leather_armor/snap_ons/chaos_pauldrons_left_fx',1045),(13560,13560,'accessories/wearable_items/_exp06/chaos_armor_gold/leather_armor/shoulders_epic_pauldrons_fx',1045),(13561,13561,'accessories/wearable_items/_exp06/chaos_armor_gold/robe_armor/chest_chaos_pauldrons_fx',1045),(13562,13562,'accessories/wearable_items/_exp06/chaos_armor_gold/robe_armor/snap_ons/chaos_pauldrons_upper_right_fx',1045),(13563,13563,'accessories/wearable_items/_exp06/chaos_armor_gold/robe_armor/snap_ons/chaos_pauldrons_upper_left_fx',1045),(13564,13564,'accessories/wearable_items/_exp06/chaos_armor_gold/vanguard_armor/shoulders_chaos_armor_all_fx',1045),(13565,13565,'accessories/wearable_items/_exp06/chaos_armor_gold/vanguard_armor/snap_ons/chaos_pauldrons_upper_right_fx',1045),(13566,13566,'accessories/wearable_items/_exp06/chaos_armor_gold/vanguard_armor/snap_ons/chaos_pauldrons_upper_left_fx',1045),(13567,13567,'staticobjects/_exp06/odno_firepit_rocks_orange',1045),(13568,13568,'staticobjects/_exp06/odno_firepit_rocks_orange_unlit',1045),(13569,13569,'creatures/mounts/horse_white_elf/horse_white_elf',1045),(13570,13570,'staticobjects/_exp06/odno_kejak_barrel01',1045),(13571,13571,'staticobjects/_exp06/odno_kejak_barrel02',1045),(13572,13572,'accessories/wieldable_items/soga_weapons/fighter/1h_destroyer',1045),(13573,13573,'staticobjects/liveevent/frostfell/permafrost_frostfell_chessboard_full',1045),(13574,13574,'staticobjects/liveevent/cityfestivals/halas_barbarian_bar_02',1045),(13575,13575,'staticobjects/plants/slove_pomegranate_whole01',1045),(13576,13576,'accessories/wearable_items/cloak/exp07/cloak_water2',1045),(13577,13577,'accessories/wearable_items/cloak/exp07/cloak_earth1',1045),(13578,13578,'accessories/wearable_items/cloak/exp07/cloak_earth2',1045),(13579,13579,'accessories/wearable_items/cloak/exp07/cloak_water1',1045),(13580,13580,'_exp06/characters/tool_users/crystaline_folk_halas/crystaline_folk_ice',1045),(13581,13581,'_exp06/characters/tool_users/crystaline_folk_halas/crystaline_folk_halas',1045),(13582,13582,'accessories/npc_wearables/crystaline_folk_halas/shoulders_right_large_ice',1045),(13583,13583,'accessories/npc_wearables/crystaline_folk_halas/chest_huge_back_halas',1045),(13584,13584,'accessories/npc_wearables/crystaline_folk_halas/chest_huge_back_ice',1045),(13585,13585,'accessories/npc_wearables/crystaline_folk_halas/head_crystal_crown_halas',1045),(13586,13586,'accessories/npc_wearables/crystaline_folk_halas/head_crystal_crown_ice',1045),(13587,13587,'accessories/npc_wearables/crystaline_folk_halas/legs_both_lower_halas',1045),(13588,13588,'accessories/npc_wearables/crystaline_folk_halas/legs_both_lower_ice',1045),(13589,13589,'accessories/npc_wearables/crystaline_folk_halas/legs_left_lower_halas',1045),(13590,13590,'accessories/npc_wearables/crystaline_folk_halas/legs_left_lower_ice',1045),(13591,13591,'accessories/npc_wearables/crystaline_folk_halas/legs_right_lower_halas',1045),(13592,13592,'accessories/npc_wearables/crystaline_folk_halas/legs_right_lower_ice',1045),(13593,13593,'accessories/npc_wearables/crystaline_folk_halas/shoulders_both_claw_halas',1045),(13594,13594,'accessories/npc_wearables/crystaline_folk_halas/shoulders_both_claw_ice',1045),(13595,13595,'accessories/npc_wearables/crystaline_folk_halas/shoulders_both_hook_claw_halas',1045),(13596,13596,'accessories/npc_wearables/crystaline_folk_halas/shoulders_both_hook_claw_ice',1045),(13597,13597,'accessories/npc_wearables/crystaline_folk_halas/shoulders_both_hook_halas',1045),(13598,13598,'accessories/npc_wearables/crystaline_folk_halas/shoulders_both_hook_ice',1045),(13599,13599,'accessories/npc_wearables/crystaline_folk_halas/shoulders_both_hook_large_halas',1045),(13600,13600,'accessories/npc_wearables/crystaline_folk_halas/shoulders_both_hook_large_ice',1045),(13601,13601,'accessories/npc_wearables/crystaline_folk_halas/shoulders_both_large_halas',1045),(13602,13602,'accessories/npc_wearables/crystaline_folk_halas/shoulders_both_large_ice',1045),(13603,13603,'accessories/npc_wearables/crystaline_folk_halas/shoulders_left_claw_halas',1045),(13604,13604,'accessories/npc_wearables/crystaline_folk_halas/shoulders_left_claw_ice',1045),(13605,13605,'accessories/npc_wearables/crystaline_folk_halas/shoulders_left_hook_halas',1045),(13606,13606,'accessories/npc_wearables/crystaline_folk_halas/shoulders_left_hook_ice',1045),(13607,13607,'accessories/npc_wearables/crystaline_folk_halas/shoulders_left_large_halas',1045),(13608,13608,'accessories/npc_wearables/crystaline_folk_halas/shoulders_left_large_ice',1045),(13609,13609,'accessories/npc_wearables/crystaline_folk_halas/shoulders_right_claw_halas',1045),(13610,13610,'accessories/npc_wearables/crystaline_folk_halas/shoulders_right_claw_ice',1045),(13611,13611,'accessories/npc_wearables/crystaline_folk_halas/shoulders_right_hook_halas',1045),(13612,13612,'accessories/npc_wearables/crystaline_folk_halas/shoulders_right_hook_ice',1045),(13613,13613,'accessories/npc_wearables/crystaline_folk_halas/shoulders_right_large_halas',1045),(13614,13614,'accessories/wearable_items/_exp08/dragon_armor/vanguard_shadow/skirt',1096),(13615,13615,'accessories/wearable_items/_exp08/dragon_armor/vanguard_shadow/chest',1096),(13616,13616,'accessories/wearable_items/_exp08/dragon_armor/vanguard_shadow/feet',1096),(13617,13617,'staticobjects/catapult/orc_harpoon_launcher',1045),(13618,13618,'staticobjects/liveevent/frostfell/permafrost_frostfell_chessboard_door_chains',1045),(13619,13619,'staticobjects/candles/halas_candle_blue',1045),(13620,13620,'staticobjects/weapons/halas_miningtool_pick02',1045),(13621,13621,'staticobjects/weapons/halas_orc_harpoon_01',1045),(13622,13622,'staticobjects/weapons/halas_orc_harpoon_base_01',1045),(13623,13623,'staticobjects/bottles/halas_wine_bottle_01',1045),(13624,13624,'staticobjects/plants/feerrott_plant_bigleaf_frozen',1045),(13625,13625,'staticobjects/fires/halas_signalfire_01',1045),(13626,13626,'accessories/wieldable_items/weapons/exp07/2h_sword/exp07_2h_sword_swept',1045),(13627,13627,'staticobjects/liveevent/frostfell/permafrost_frostfell_yeti_statue',1045),(13628,13628,'staticobjects/tree/halas_ash_tree_01',1045),(13629,13629,'staticobjects/harvested/crystals/halas_gems_harvesting_01',1045),(13630,13630,'staticobjects/harvested/bushes/halas_harvest_bush_01',1045),(13631,13631,'staticobjects/harvested/trapping/halas_harvest_dens_01',1045),(13632,13632,'staticobjects/harvested/ore_mining/halas_harvest_ore_01',1045),(13633,13633,'staticobjects/harvested/logs/halas_tree_log_01',1045),(13634,13634,'staticobjects/harvested/roots_gathering/halas_vines_01',1045),(13635,13635,'staticobjects/soe_wallet/tudor_vanity_washstand',1045),(13636,13636,'staticobjects/soe_wallet/tudor_bdrm_armoire',1045),(13637,13637,'staticobjects/soe_wallet/tudor_bdrm_bed',1045),(13638,13638,'staticobjects/soe_wallet/tudor_bdrm_dresser',1045),(13639,13639,'staticobjects/soe_wallet/tudor_bdrm_nightstand',1045),(13640,13640,'staticobjects/soe_wallet/tudor_dining_cabinet',1045),(13641,13641,'staticobjects/soe_wallet/tudor_dining_chair',1045),(13642,13642,'staticobjects/soe_wallet/tudor_dining_cupboard',1045),(13643,13643,'staticobjects/soe_wallet/tudor_dining_table',1045),(13644,13644,'staticobjects/soe_wallet/tudor_living_coffeetable',1045),(13645,13645,'staticobjects/soe_wallet/tudor_living_endtable',1045),(13646,13646,'staticobjects/soe_wallet/tudor_living_settee',1045),(13647,13647,'staticobjects/soe_wallet/tudor_living_sofa',1045),(13648,13648,'staticobjects/soe_wallet/tudor_office_chair',1045),(13649,13649,'staticobjects/soe_wallet/tudor_office_chest',1045),(13650,13650,'staticobjects/soe_wallet/tudor_office_desk',1045),(13651,13651,'staticobjects/soe_wallet/tudor_office_shelves',1045),(13652,13652,'staticobjects/soe_wallet/tudor_vanity_stool',1045),(13653,13653,'staticobjects/soe_wallet/tudor_vanity_table',1045),(13654,13654,'staticobjects/liveevent/frostfell/permafrost_frostfell_valkarie_statue',1045),(13655,13655,'creatures/pets/pet_kitten/halas_kitten',1045),(13656,13656,'_exp07/characters/tool_users/othmir_female_base',1045),(13657,13657,'creatures/pets/pet_kitten/halas_kitten_collar',1045),(13658,13658,'staticobjects/soe_wallet/tudor_vanity_bathtub',1045),(13659,13659,'staticobjects/liveevent/cityfestivals/halas_candle_blue_wall_base',1045),(13660,13660,'staticobjects/bell/dpo_mariner_bell_01',1045),(13661,13661,'accessories/wearable_items/cloak/exp07/cloak_halas',1045),(13662,13662,'accessories/wearable_items/_exp07/ice_armor/robe/skirt',1045),(13663,13663,'accessories/wearable_items/_exp07/ice_armor/robe/chest',1045),(13664,13664,'accessories/wearable_items/_exp07/ice_armor/robe/feet',1045),(13665,13665,'accessories/wearable_items/_exp07/ice_armor/robe/hands',1045),(13666,13666,'accessories/wearable_items/_exp07/ice_armor/robe/head',1045),(13667,13667,'accessories/wearable_items/_exp07/ice_armor/robe/hood',1045),(13668,13668,'accessories/wearable_items/_exp07/ice_armor/robe/pants',1045),(13669,13669,'staticobjects/tcg/tcg_painting47_karana',1045),(13670,13670,'staticobjects/tcg/tcg_painting48_tunare',1045),(13671,13671,'staticobjects/tcg/tcg_painting44_bristlebane',1045),(13672,13672,'staticobjects/tcg/tcg_painting45_innoruuk',1045),(13673,13673,'staticobjects/tcg/tcg_painting46_solusek',1045),(13674,13674,'staticobjects/tcg/tcg_tapestry_silver_guardian',1045),(13675,13675,'staticobjects/tcg/tcg_tapestry_emblematic_power',1045),(13676,13676,'staticobjects/weapons/halas_orc_catapult_busted_01',1045),(13677,13677,'staticobjects/vanity/bathtub_w_water',1045),(13678,13678,'staticobjects/vanity/bathtub',1045),(13679,13679,'accessories/wearable_items/snapons/backpacks/backpack_treasure_hunter_swivel/backpack_treasure_hunter_swivel_pouch03',1045),(13680,13680,'accessories/wearable_items/snapons/backpacks/backpack_treasure_hunter_swivel/backpack_treasure_hunter_swivel',1045),(13681,13681,'accessories/wearable_items/snapons/backpacks/backpack_treasure_hunter_swivel/backpack_treasure_hunter_swivel_chest',1045),(13682,13682,'accessories/wearable_items/snapons/backpacks/backpack_treasure_hunter_swivel/backpack_treasure_hunter_swivel_chest_lid',1045),(13683,13683,'accessories/wearable_items/snapons/backpacks/backpack_treasure_hunter_swivel/backpack_treasure_hunter_swivel_keys',1045),(13684,13684,'accessories/wearable_items/snapons/backpacks/backpack_treasure_hunter_swivel/backpack_treasure_hunter_swivel_lantern',1045),(13685,13685,'accessories/wearable_items/snapons/backpacks/backpack_treasure_hunter_swivel/backpack_treasure_hunter_swivel_pouch01',1045),(13686,13686,'accessories/wearable_items/snapons/backpacks/backpack_treasure_hunter_swivel/backpack_treasure_hunter_swivel_pouch02',1045),(13687,13687,'staticobjects/liveevent/frostfell/ho_chess_tile_dark',1045),(13688,13688,'staticobjects/liveevent/frostfell/ho_chess_tile_light',1045),(13689,13689,'staticobjects/liveevent/frostfell/object_ice_statue_01',1045),(13690,13690,'staticobjects/liveevent/frostfell/object_ice_statue_02',1045),(13691,13691,'staticobjects/liveevent/frostfell/object_ice_statue_03',1045),(13692,13692,'staticobjects/liveevent/frostfell/object_ice_weapon_rack',1045),(13693,13693,'staticobjects/liveevent/frostfell/object_wall_ice_sword',1045),(13694,13694,'staticobjects/liveevent/frostfell/object_wall_ice_hammer',1045),(13695,13695,'staticobjects/liveevent/frostfell/object_ice_chest',1045),(13696,13696,'staticobjects/liveevent/frostfell/object_ice_ceiling_lamp',1045),(13697,13697,'staticobjects/liveevent/frostfell/object_ice_wardrobe',1045),(13698,13698,'_exp06/zones/objects/exp06_dun_the_hole_raid/roekillik_barricade',1045),(13699,13699,'_exp06/zones/objects/exp06_dun_the_hole_raid/hole_crystal',1045),(13700,13700,'staticobjects/globes/gh_sentinel_globe_dpo',1045),(13701,13701,'staticobjects/_exp07_prelude/druid_ring_phase1',1045),(13702,13702,'staticobjects/_exp07_prelude/druid_ring_phase1_loping',1045),(13703,13703,'staticobjects/_exp07_prelude/druid_ring_phase1_nek',1045),(13704,13704,'staticobjects/_exp07_prelude/druid_ring_phase1_zek',1045),(13705,13705,'staticobjects/_exp07_prelude/druid_ring_phase2',1045),(13706,13706,'staticobjects/_exp07_prelude/druid_ring_phase2_loping',1045),(13707,13707,'staticobjects/_exp07_prelude/druid_ring_phase2_nek',1045),(13708,13708,'staticobjects/_exp07_prelude/druid_ring_phase2_zek',1045),(13709,13709,'staticobjects/_exp07_prelude/druid_ring_phase3',1045),(13710,13710,'staticobjects/_exp07_prelude/druid_ring_phase3_ferrott_off',1045),(13711,13711,'staticobjects/_exp07_prelude/druid_ring_phase3_ferrott_on',1045),(13712,13712,'staticobjects/_exp07_prelude/druid_ring_phase3_loping_on',1045),(13713,13713,'staticobjects/_exp07_prelude/druid_ring_phase3_nek',1045),(13714,13714,'staticobjects/_exp07_prelude/druid_ring_phase3_stonebrunt_off',1045),(13715,13715,'staticobjects/_exp07_prelude/druid_ring_phase3_stonebrunt_on',1045),(13716,13716,'staticobjects/_exp07_prelude/druid_ring_phase3_zek',1045),(13717,13717,'staticobjects/_exp07_prelude/druid_ring_phase3_zek_off',1045),(13718,13718,'staticobjects/_exp07_prelude/druid_ring_phase3_zek_on',1045),(13719,13719,'accessories/wieldable_items/weapons/exp07/1h_crush/1h_crush_mace_crowned',1045),(13720,13720,'accessories/wieldable_items/weapons/exp07/1h_crush/1h_crush_club_crowned',1045),(13721,13721,'accessories/wieldable_items/weapons/exp07/1h_pierce/exp07_1hp_dagger_swept',1045),(13722,13722,'accessories/wieldable_items/weapons/exp07/1h_sword/exp07_1h_axe_swept',1045),(13723,13723,'accessories/wieldable_items/weapons/exp07/1h_sword/exp07_fist_axe_sweptknuckle',1045),(13724,13724,'accessories/wieldable_items/weapons/exp07/1h_sword/exp07_shortsword_swept',1045),(13725,13725,'accessories/wieldable_items/weapons/exp07/2h_crush/exp07_2hc_hammer_crown',1045),(13726,13726,'accessories/wieldable_items/weapons/exp07/staff/exp07_halberd',1045),(13727,13727,'accessories/wieldable_items/weapons/exp07/staff/exp07_scythe',1045),(13728,13728,'accessories/wieldable_items/weapons/exp07/staff/exp07_spear',1045),(13729,13729,'accessories/wieldable_items/weapons/exp07/staff/exp07_staff_fighting',1045),(13730,13730,'accessories/wieldable_items/weapons/exp07/staff/exp07_staff_magi',1045),(13731,13731,'_exp07/characters/tool_users/tserrina/tserrina',1045),(13732,13732,'staticobjects/tcg/tcg_painting_lon10',1045),(13733,13733,'_exp05/monsters/dire_bear03_warmor_lon_01',1045),(13734,13734,'_exp05/monsters/dire_bear03_wsaddle_armor_lon_01',1045),(13735,13735,'_exp05/monsters/dire_bear03_wsaddle_lon_01',1045),(13736,13736,'_exp07/zones/exp07_dun_velks_the_ascent/the_ascent_vineroom_walls_test',1045),(13737,13737,'_exp07/zones/exp07_dun_velks_the_ascent/the_ascent_bridgeroom_bridge_01',1045),(13738,13738,'_exp07/zones/exp07_dun_velks_the_ascent/the_ascent_bridgeroom_walls_01',1045),(13739,13739,'_exp07/zones/exp07_dun_velks_the_ascent/the_ascent_entrance_hallway_01',1045),(13740,13740,'_exp07/zones/exp07_dun_velks_the_ascent/the_ascent_fort_hallway_01',1045),(13741,13741,'_exp07/zones/exp07_dun_velks_the_ascent/the_ascent_fort_hallway_02',1045),(13742,13742,'_exp07/zones/exp07_dun_velks_the_ascent/the_ascent_guardroom_hallway_01',1045),(13743,13743,'_exp07/zones/exp07_dun_velks_the_ascent/the_ascent_guardroom_hallway_02',1045),(13744,13744,'_exp07/zones/exp07_dun_velks_the_ascent/the_ascent_guardroom_hallway_03',1045),(13745,13745,'_exp07/zones/exp07_dun_velks_the_ascent/the_ascent_guardroom_hallway_04',1045),(13746,13746,'_exp07/zones/exp07_dun_velks_the_ascent/the_ascent_guardroom_hallway_05',1045),(13747,13747,'_exp07/zones/exp07_dun_velks_the_ascent/the_ascent_shard_altar_01',1045),(13748,13748,'_exp07/zones/exp07_dun_velks_the_ascent/the_ascent_shard_room_01',1045),(13749,13749,'_exp07/zones/exp07_dun_velks_the_ascent/the_ascent_vineroom_platforms_01',1045),(13750,13750,'_exp07/zones/exp07_dun_velks_the_ascent/the_ascent_vineroom_walls_01',1045),(13751,13751,'accessories/wearable_items/profesion_hats/bruiser/station_cash_martial_skullcap/head',1045),(13752,13752,'_exp07/zones/exp07_dun_velks_the_ascent/the_ascent_vineroom_walls_01_alive',1045),(13753,13753,'_exp07/zones/exp07_dun_velks_the_ascent/the_ascent_bridgeroom_bridge_01_alive',1045),(13754,13754,'_exp07/zones/exp07_dun_velks_the_ascent/the_ascent_bridgeroom_walls_01_alive',1045),(13755,13755,'_exp07/zones/exp07_dun_velks_the_ascent/the_ascent_entrance_hallway_01_alive',1045),(13756,13756,'_exp07/zones/exp07_dun_velks_the_ascent/the_ascent_fort_hallway_01_alive',1045),(13757,13757,'_exp07/zones/exp07_dun_velks_the_ascent/the_ascent_fort_hallway_02_alive',1045),(13758,13758,'_exp07/zones/exp07_dun_velks_the_ascent/the_ascent_guardroom_hallway_01_alive',1045),(13759,13759,'_exp07/zones/exp07_dun_velks_the_ascent/the_ascent_guardroom_hallway_02_alive',1045),(13760,13760,'_exp07/zones/exp07_dun_velks_the_ascent/the_ascent_guardroom_hallway_03_alive',1045),(13761,13761,'_exp07/zones/exp07_dun_velks_the_ascent/the_ascent_guardroom_hallway_04_alive',1045),(13762,13762,'_exp07/zones/exp07_dun_velks_the_ascent/the_ascent_guardroom_hallway_05_alive',1045),(13763,13763,'_exp07/zones/exp07_dun_velks_the_ascent/the_ascent_shard_altar_01_alive',1045),(13764,13764,'_exp07/zones/exp07_dun_velks_the_ascent/the_ascent_shard_room_01_alive',1045),(13765,13765,'_exp07/zones/exp07_dun_velks_the_ascent/the_ascent_vineroom_platforms_01_alive',1045),(13766,13766,'ec/pc/human/human_male_ghost_loop_flipped',1045),(13767,13767,'_exp07/zones/exp07_dun_velks_the_ascent/the_ascent_bridgeroom_plantbridge',1045),(13768,13768,'staticobjects/fireplace_items/dpo_fire_andiron_fire',1045),(13769,13769,'accessories/wearable_items/_exp06/dragon_chain_white/skirt',1045),(13770,13770,'accessories/wearable_items/_exp06/dragon_chain_white/chest',1045),(13771,13771,'accessories/wearable_items/_exp06/dragon_chain_white/dragon_pauldron_left',1045),(13772,13772,'accessories/wearable_items/_exp06/dragon_chain_white/dragon_pauldron_right',1045),(13773,13773,'accessories/wearable_items/_exp06/dragon_chain_white/feet',1045),(13774,13774,'accessories/wearable_items/_exp06/dragon_chain_white/forearms',1045),(13775,13775,'accessories/wearable_items/_exp06/dragon_chain_white/hands',1045),(13776,13776,'accessories/wearable_items/_exp06/dragon_chain_white/head',1045),(13777,13777,'accessories/wearable_items/_exp06/dragon_chain_white/head_dragon_helm',1045),(13778,13778,'accessories/wearable_items/_exp06/dragon_chain_white/legs',1045),(13779,13779,'accessories/wearable_items/_exp06/dragon_chain_white/legs_noskirt',1045),(13780,13780,'accessories/wearable_items/_exp06/dragon_chain_white/shoulders',1045),(13781,13781,'accessories/wearable_items/_exp06/dragon_chain_white/shoulders_pauldrons',1045),(13782,13782,'accessories/wearable_items/_exp06/dragon_leather_white/chest',1045),(13783,13783,'accessories/wearable_items/_exp06/dragon_leather_white/feet',1045),(13784,13784,'accessories/wearable_items/_exp06/dragon_leather_white/forearms',1045),(13785,13785,'accessories/wearable_items/_exp06/dragon_leather_white/hands',1045),(13786,13786,'accessories/wearable_items/_exp06/dragon_leather_white/head',1045),(13787,13787,'accessories/wearable_items/_exp06/dragon_leather_white/head_dragon_helm',1045),(13788,13788,'accessories/wearable_items/_exp06/dragon_leather_white/legs',1045); +INSERT INTO `appearances` VALUES (13789,13789,'accessories/wearable_items/_exp06/dragon_leather_white/legs_noskirt',1045),(13790,13790,'accessories/wearable_items/_exp06/dragon_leather_white/shoulders',1045),(13791,13791,'accessories/wearable_items/_exp06/dragon_leather_white/shoulders_pauldrons',1045),(13792,13792,'accessories/wearable_items/_exp06/dragon_leather_white/skirt',1045),(13793,13793,'accessories/wearable_items/_exp06/dragon_robe_white/chest',1045),(13794,13794,'accessories/wearable_items/_exp06/dragon_robe_white/chest_pauldrons',1045),(13795,13795,'accessories/wearable_items/_exp06/dragon_robe_white/feet',1045),(13796,13796,'accessories/wearable_items/_exp06/dragon_robe_white/hands',1045),(13797,13797,'accessories/wearable_items/_exp06/dragon_robe_white/head',1045),(13798,13798,'accessories/wearable_items/_exp06/dragon_robe_white/head_dragon_hood',1045),(13799,13799,'accessories/wearable_items/_exp06/dragon_robe_white/hood',1045),(13800,13800,'accessories/wearable_items/_exp06/dragon_robe_white/pants',1045),(13801,13801,'accessories/wearable_items/_exp06/dragon_robe_white/skirt',1045),(13802,13802,'accessories/wearable_items/_exp06/dragon_vanguard_white/chest',1045),(13803,13803,'accessories/wearable_items/_exp06/dragon_vanguard_white/dragon_pauldrons_left',1045),(13804,13804,'accessories/wearable_items/_exp06/dragon_vanguard_white/dragon_pauldrons_right',1045),(13805,13805,'accessories/wearable_items/_exp06/dragon_vanguard_white/feet',1045),(13806,13806,'accessories/wearable_items/_exp06/dragon_vanguard_white/forearms',1045),(13807,13807,'accessories/wearable_items/_exp06/dragon_vanguard_white/hands',1045),(13808,13808,'accessories/wearable_items/_exp06/dragon_vanguard_white/head',1045),(13809,13809,'accessories/wearable_items/_exp06/dragon_vanguard_white/head_dragon_helm',1045),(13810,13810,'accessories/wearable_items/_exp06/dragon_vanguard_white/legs',1045),(13811,13811,'accessories/wearable_items/_exp06/dragon_vanguard_white/legs_dragon_snapons',1045),(13812,13812,'accessories/wearable_items/_exp06/dragon_vanguard_white/legs_noskirt',1045),(13813,13813,'accessories/wearable_items/_exp06/dragon_vanguard_white/right',1045),(13814,13814,'accessories/wearable_items/_exp06/dragon_vanguard_white/shoulders',1045),(13815,13815,'accessories/wearable_items/_exp06/dragon_vanguard_white/shoulders_dragon_pauldron',1045),(13816,13816,'accessories/wearable_items/_exp06/dragon_vanguard_white/shoulders_nopauldrons',1045),(13817,13817,'accessories/wearable_items/_exp06/dragon_vanguard_white/skirt',1045),(13818,13818,'accessories/wearable_items/_exp06/dragon_vanguard_white/snap_ons/dragon_forearm_left',1045),(13819,13819,'accessories/wearable_items/_exp06/dragon_vanguard_white/snap_ons/dragon_forearm_right',1045),(13820,13820,'accessories/wearable_items/_exp06/dragon_vanguard_white/snap_ons/dragon_pauldrons_lower_left',1045),(13821,13821,'accessories/wearable_items/_exp06/dragon_vanguard_white/snap_ons/dragon_pauldrons_lower_right',1045),(13822,13822,'accessories/wearable_items/_exp06/dragon_vanguard_white/snap_ons/dragon_shin_left',1045),(13823,13823,'accessories/wearable_items/_exp06/dragon_vanguard_white/snap_ons/dragon_shin_right',1045),(13824,13824,'staticobjects/_exp07_prelude/druid_ring_phase3_nek_on',1045),(13825,13825,'staticobjects/_exp07_prelude/druid_ring_phase3_loping',1045),(13826,13826,'accessories/wieldable_items/weapons/exp07/2h_sword/goth_scythe_2_hand_01',1045),(13827,13827,'accessories/wieldable_items/weapons/exp07/2h_sword/goth_axe_2_hand_01',1045),(13828,13828,'accessories/wieldable_items/weapons/exp07/1h_pierce/exp07_1hp_dagger_koshigatana',1045),(13829,13829,'accessories/wieldable_items/weapons/exp07/2h_crush/exp07_2hc_hammer_blight',1045),(13830,13830,'accessories/wieldable_items/weapons/exp07/shield/exp07_buckler_bladestopper',1045),(13831,13831,'accessories/wieldable_items/weapons/exp07/shield/exp07_shield_bladestopper',1045),(13832,13832,'accessories/wearable_items/cloak/exp07/cloak_of_flame',1045),(13833,13833,'accessories/wieldable_items/weapons/exp07/shield/goth_shield_01',1045),(13834,13834,'accessories/wieldable_items/weapons/exp07/2h_crush/goth_hammer_2_hand_01',1045),(13835,13835,'accessories/npc_wearables/ice_shade/goth_scythe_pike',1045),(13836,13836,'creatures/mounts/lizard_mount/lizard_mount_base',1045),(13837,13837,'accessories/wieldable_items/weapons/exp07/1h_sword/goth_dagger_01',1045),(13838,13838,'accessories/wearable_items/_exp07/station_cash_armor/evil_conjurer_helmet/head',1045),(13839,13839,'accessories/wearable_items/_exp07/station_cash_armor/robe_evil_dark/skirt',1045),(13840,13840,'accessories/wearable_items/_exp07/station_cash_armor/robe_evil_dark/chest',1045),(13841,13841,'accessories/wearable_items/_exp07/station_cash_armor/robe_evil_dark/feet',1045),(13842,13842,'accessories/wearable_items/_exp07/station_cash_armor/robe_evil_dark/hands',1045),(13843,13843,'accessories/wearable_items/_exp07/station_cash_armor/robe_evil_dark/head_collar',1045),(13844,13844,'accessories/wearable_items/_exp07/station_cash_armor/robe_evil_dark/pants',1045),(13845,13845,'creatures/mounts/odus_prowler/odus_prowler',1045),(13846,13846,'creatures/mounts/odus_prowler/odus_prowler_black_poison',1045),(13847,13847,'_exp07/characters/monsters/sea_monster/sea_monster',1045),(13848,13848,'accessories/wieldable_items/tools/cook/spoon_gnoll',1045),(13849,13849,'_exp07/characters/monsters/sea_monster/sea_monster_shell',1045),(13850,13850,'accessories/wieldable_items/weapons/exp06/staff/claw_staff',1045),(13851,13851,'creatures/mounts/odus_prowler/odus_prowler_black_death',1045),(13852,13852,'accessories/wieldable_items/weapons/exp07/1h_crush/1h_hammer_velium',1045),(13853,13853,'accessories/wieldable_items/weapons/exp07/1h_crush/1h_hammer_firecore',1045),(13854,13854,'accessories/wieldable_items/weapons/exp07/1h_crush/1h_hammer_icecore',1045),(13855,13855,'accessories/wieldable_items/weapons/exp07/1h_crush/1h_hammer_piston',1045),(13856,13856,'accessories/wieldable_items/weapons/exp07/1h_sword/exp07_1h_cleaver_battle_velium',1045),(13857,13857,'accessories/wieldable_items/weapons/exp07/1h_sword/exp07_1h_cleaver',1045),(13858,13858,'accessories/wieldable_items/weapons/exp07/1h_sword/exp07_1h_cleaver_aged',1045),(13859,13859,'accessories/wieldable_items/weapons/exp07/1h_sword/exp07_1h_cleaver_battle',1045),(13860,13860,'accessories/wieldable_items/weapons/exp07/2h_crush/exp07_2h_hammer_velium',1045),(13861,13861,'accessories/wieldable_items/weapons/exp07/2h_crush/exp07_2h_hammer_piston',1045),(13862,13862,'projectiles/arrow_simple_plain_notes',1045),(13863,13863,'staticobjects/liveevent/frostfell/permafrost_frostfell_frozen_barrier',1096),(13864,13864,'accessories/wieldable_items/weapons/exp07/1h_sword/exp07_1h_sword_serrated',1096),(13865,13865,'accessories/wieldable_items/weapons/exp07/1h_sword/exp07_1h_sword_serrated_velium',1096),(13866,13866,'accessories/wieldable_items/weapons/exp07/1h_pierce/exp07_1hp_dagger_metal',1096),(13867,13867,'accessories/wieldable_items/weapons/exp07/1h_pierce/exp07_1hp_dagger2_metal',1096),(13868,13868,'accessories/wieldable_items/weapons/exp07/1h_pierce/exp07_1hp_dagger2_ornate_velium',1096),(13869,13869,'accessories/wieldable_items/weapons/exp07/1h_pierce/exp07_1hp_dagger2_velium',1096),(13870,13870,'accessories/wieldable_items/weapons/exp07/1h_pierce/exp07_1hp_dagger_infectedstone',1096),(13871,13871,'staticobjects/halloween/bef_asylum_skeleton_swinging01',1096),(13872,13872,'staticobjects/halloween/bef_asylum_skeleton_swinging02',1096),(13873,13873,'staticobjects/halloween/bef_hanging_bones_swinging',1096),(13874,13874,'staticobjects/halloween/dpo_bucket_of_apples',1096),(13875,13875,'staticobjects/halloween/dpo_candied_apple_plate',1096),(13876,13876,'staticobjects/halloween/dpo_canopic_jar_bats',1096),(13877,13877,'staticobjects/halloween/dpo_canopic_jar_spiders',1096),(13878,13878,'staticobjects/halloween/dpo_chaise_black_01',1096),(13879,13879,'staticobjects/halloween/dpo_chaise_orange_01',1096),(13880,13880,'staticobjects/halloween/dpo_chaise_red_01',1096),(13881,13881,'staticobjects/halloween/dpo_cookie_plate_halloween',1096),(13882,13882,'staticobjects/halloween/dpo_tapestry_design_notd_fire',1096),(13883,13883,'staticobjects/halloween/dpo_tapestry_design_notd_sky',1096),(13884,13884,'staticobjects/halloween/dpo_tapestry_design_notd_spider',1096),(13885,13885,'staticobjects/halloween/eu_chair_shrouded01',1096),(13886,13886,'staticobjects/halloween/eu_chair_shrouded_wfoot01',1096),(13887,13887,'staticobjects/halloween/eu_fireplace_toolset01',1096),(13888,13888,'staticobjects/halloween/eu_kitchen_hangingrack01',1096),(13889,13889,'staticobjects/halloween/eu_lightsource_floor_green_candelabra01',1096),(13890,13890,'staticobjects/halloween/eu_lightsource_floor_red_candelabra01',1096),(13891,13891,'staticobjects/halloween/kc_lightsource_green_iksarskull01',1096),(13892,13892,'staticobjects/halloween/kc_rug01',1096),(13893,13893,'staticobjects/halloween/kc_rug_long01',1096),(13894,13894,'staticobjects/halloween/kc_skull_dizok01',1096),(13895,13895,'staticobjects/halloween/lp_coffin_stone02',1096),(13896,13896,'staticobjects/halloween/mc_banner_vampire_hanging01',1096),(13897,13897,'staticobjects/halloween/mc_coffin_wood01',1096),(13898,13898,'staticobjects/tableware/hal_plate_stack_dpo',1096),(13899,13899,'staticobjects/tradeskill_objects/hal_spinningwheel01',1096),(13900,13900,'staticobjects/chests/chest002openbroken',1096),(13901,13901,'staticobjects/bucket/halas_bucket_snow03',1096),(13902,13902,'staticobjects/tradeskill_objects/hal_fabricroll_01',1096),(13903,13903,'staticobjects/tradeskill_objects/hal_fabricroll_02',1096),(13904,13904,'staticobjects/tradeskill_objects/hal_fabricroll_03',1096),(13905,13905,'creatures/mounts/storm_cloud_raf',1096),(13906,13906,'accessories/wearable_items/_exp07/asian_goth_armor/vanguard/skirt',1096),(13907,13907,'accessories/wearable_items/_exp07/asian_goth_armor/vanguard/chest',1096),(13908,13908,'accessories/wearable_items/_exp07/asian_goth_armor/vanguard/feet',1096),(13909,13909,'accessories/wearable_items/_exp07/asian_goth_armor/vanguard/forearms',1096),(13910,13910,'accessories/wearable_items/_exp07/asian_goth_armor/vanguard/hands',1096),(13911,13911,'accessories/wearable_items/_exp07/asian_goth_armor/vanguard/head',1096),(13912,13912,'accessories/wearable_items/_exp07/asian_goth_armor/vanguard/legs',1096),(13913,13913,'accessories/wearable_items/_exp07/asian_goth_armor/vanguard/legs_noskirt',1096),(13914,13914,'accessories/wearable_items/_exp07/asian_goth_armor/vanguard/right',1096),(13915,13915,'accessories/wearable_items/_exp07/asian_goth_armor/vanguard/shoulders',1096),(13916,13916,'accessories/wearable_items/_exp07/asian_goth_armor/vanguard/shoulders_asian_goth_pauldron',1096),(13917,13917,'accessories/wearable_items/_exp07/asian_goth_armor/vanguard/shoulders_nopauldrons',1096),(13918,13918,'accessories/wearable_items/_exp07/asian_goth_armor/vanguard/snapons/head_asian_goth_vanguard',1096),(13919,13919,'accessories/wearable_items/_exp07/asian_goth_armor/vanguard/snapons/asian_goth_pauldrons_lower_left',1096),(13920,13920,'accessories/wearable_items/_exp07/asian_goth_armor/vanguard/snapons/asian_goth_pauldrons_lower_right',1096),(13921,13921,'accessories/wearable_items/_exp07/asian_goth_armor/vanguard/snapons/asian_goth_pauldrons_upper_left',1096),(13922,13922,'accessories/wearable_items/_exp07/asian_goth_armor/vanguard/snapons/asian_goth_pauldrons_upper_right',1096),(13923,13923,'creatures/tu/goatman_wizard_white',1096),(13924,13924,'creatures/tu/goatman_priest_white',1096),(13925,13925,'creatures/tu/goatman_warlord_white',1096),(13926,13926,'creatures/tu/goatman_warrior_white',1096),(13927,13927,'creatures/tu/goatman_white',1096),(13928,13928,'accessories/wearable_items/_exp06/dragon_vanguard/dragon_pauldrons_right_nowings',1096),(13929,13929,'accessories/wearable_items/_exp06/dragon_vanguard/shoulders_dragon_pauldron_nowings',1096),(13930,13930,'accessories/wearable_items/_exp06/dragon_vanguard/dragon_pauldrons_left_nowings',1096),(13931,13931,'accessories/wearable_items/_exp07/rallos_zek_armor/rallos_zek_armor_leather/skirt',1096),(13932,13932,'accessories/wearable_items/_exp07/rallos_zek_armor/rallos_zek_armor_leather/chest',1096),(13933,13933,'accessories/wearable_items/_exp07/rallos_zek_armor/rallos_zek_armor_leather/feet',1096),(13934,13934,'accessories/wearable_items/_exp07/rallos_zek_armor/rallos_zek_armor_leather/forearms',1096),(13935,13935,'accessories/wearable_items/_exp07/rallos_zek_armor/rallos_zek_armor_leather/hands',1096),(13936,13936,'accessories/wearable_items/_exp07/rallos_zek_armor/rallos_zek_armor_leather/head',1096),(13937,13937,'accessories/wearable_items/_exp07/rallos_zek_armor/rallos_zek_armor_leather/head_rallos_zek_leather_helmet',1096),(13938,13938,'accessories/wearable_items/_exp07/rallos_zek_armor/rallos_zek_armor_leather/legs',1096),(13939,13939,'accessories/wearable_items/_exp07/rallos_zek_armor/rallos_zek_armor_leather/legs_noskirt',1096),(13940,13940,'accessories/wearable_items/_exp07/rallos_zek_armor/rallos_zek_armor_leather/shoulders_nopauldrons',1096),(13941,13941,'accessories/wearable_items/raf_helm/head',1096),(13942,13942,'staticobjects/liveevent/halloween/halloween_tile_bones_dpo',1096),(13943,13943,'staticobjects/halloween/vastydeep02_objects_sidetable03_dpo',1096),(13944,13944,'creatures/mounts/griffin_mount/griffin_mount_base',1096),(13945,13945,'ec/pc/barbarian/barbarian_female_albino_lipstat',1096),(13946,13946,'ec/pc/barbarian/barbarian_female_albino',1096),(13947,13947,'ec/pc/barbarian/barbarian_female_albino_headtat',1096),(13948,13948,'ec/pc/barbarian/barbarian_male_albino_maskedtat',1096),(13949,13949,'ec/pc/barbarian/barbarian_male_albino_skulltat',1096),(13950,13950,'ec/pc/barbarian/barbarian_male_albino',1096),(13951,13951,'accessories/wearable_items/_exp07/asian_goth_armor/leather/skirt',1096),(13952,13952,'accessories/wearable_items/_exp07/asian_goth_armor/leather/chest',1096),(13953,13953,'accessories/wearable_items/_exp07/asian_goth_armor/leather/feet',1096),(13954,13954,'accessories/wearable_items/_exp07/asian_goth_armor/leather/feet_dagger',1096),(13955,13955,'accessories/wearable_items/_exp07/asian_goth_armor/leather/forearms',1096),(13956,13956,'accessories/wearable_items/_exp07/asian_goth_armor/leather/hands',1096),(13957,13957,'accessories/wearable_items/_exp07/asian_goth_armor/leather/head',1096),(13958,13958,'accessories/wearable_items/_exp07/asian_goth_armor/leather/legs',1096),(13959,13959,'accessories/wearable_items/_exp07/asian_goth_armor/leather/legs_noskirt',1096),(13960,13960,'accessories/wearable_items/_exp07/asian_goth_armor/leather/shoulders',1096),(13961,13961,'accessories/wearable_items/_exp07/asian_goth_armor/leather/shoulders_no_pauldrons',1096),(13962,13962,'accessories/wearable_items/_exp07/asian_goth_armor/leather/shoulders_pauldrons_snapons',1096),(13963,13963,'accessories/wearable_items/_exp07/asian_goth_armor/leather/snapons/head_asian_goth_leather',1096),(13964,13964,'accessories/wearable_items/_exp07/asian_goth_armor/leather/snapons/asian_goth_leather_dagger',1096),(13965,13965,'accessories/wearable_items/_exp07/asian_goth_armor/leather/snapons/asian_goth_leather_pauldrons_left',1096),(13966,13966,'accessories/wearable_items/_exp07/asian_goth_armor/leather/snapons/asian_goth_leather_pauldrons_right',1096),(13967,13967,'accessories/wearable_items/_exp07/rallos_zek_armor/rallos_zek_armor_leather/shoulders_rallos_zek_epic_pauldrons',1096),(13968,13968,'accessories/wearable_items/_exp07/rallos_zek_armor/rallos_zek_armor_leather/hands_rallos_zek_leather_gauntlets',1096),(13969,13969,'accessories/wearable_items/_exp07/rallos_zek_armor/rallos_zek_armor_leather/legs_rallos_zek_shins',1096),(13970,13970,'accessories/wearable_items/_exp07/rallos_zek_armor/rallos_zek_armor_leather/rallos_zek_leather_gauntlets_forearm_left',1096),(13971,13971,'accessories/wearable_items/_exp07/rallos_zek_armor/rallos_zek_armor_leather/rallos_zek_leather_gauntlets_forearm_right',1096),(13972,13972,'accessories/wearable_items/_exp07/rallos_zek_armor/rallos_zek_armor_leather/rallos_zek_leather_pauldron_left',1096),(13973,13973,'accessories/wearable_items/_exp07/rallos_zek_armor/rallos_zek_armor_leather/rallos_zek_leather_pauldron_right',1096),(13974,13974,'accessories/wearable_items/_exp07/rallos_zek_armor/rallos_zek_armor_leather/rallos_zek_leather_shin_left',1096),(13975,13975,'accessories/wearable_items/_exp07/rallos_zek_armor/rallos_zek_armor_leather/rallos_zek_leather_shin_right',1096),(13976,13976,'accessories/wearable_items/cloak/exp07/cloak_rune_leather',1096),(13977,13977,'staticobjects/doors/halas_door03',1096),(13978,13978,'accessories/wieldable_items/weapons/exp07/1h_crush/1h_mace_rallosian_dull',1096),(13979,13979,'accessories/wieldable_items/weapons/exp07/1h_crush/1h_mace_rallosian',1096),(13980,13980,'accessories/wieldable_items/weapons/exp07/1h_pierce/exp07_1hp_dagger_rallosian',1096),(13981,13981,'accessories/wieldable_items/weapons/exp07/1h_pierce/exp07_1hp_dagger_rallosian_dull',1096),(13982,13982,'accessories/wieldable_items/weapons/exp07/1h_sword/exp07_1hs_sword_rallosian',1096),(13983,13983,'accessories/wieldable_items/weapons/exp07/1h_sword/exp07_1hs_sword_rallosian_dull',1096),(13984,13984,'accessories/wieldable_items/weapons/exp07/1h_sword/exp07_1hs_axe_rallosian',1096),(13985,13985,'accessories/wieldable_items/weapons/exp07/1h_sword/exp07_1hs_axe_rallosian_dull',1096),(13986,13986,'accessories/wieldable_items/weapons/exp07/2h_sword/exp07_2hs_axe_rallosian',1096),(13987,13987,'accessories/wieldable_items/weapons/exp07/2h_sword/exp07_2hs_axe_rallosian_dull',1096),(13988,13988,'accessories/wieldable_items/weapons/exp07/shield/exp07_shield_rallosian1',1096),(13989,13989,'accessories/wieldable_items/weapons/exp07/shield/exp07_shield_rallosian1_damaged',1096),(13990,13990,'accessories/wieldable_items/weapons/exp07/shield/exp07_shield_rallosian1_glow',1096),(13991,13991,'accessories/wieldable_items/weapons/exp07/shield/exp07_shield_rallosian2',1096),(13992,13992,'accessories/wieldable_items/weapons/exp07/shield/exp07_shield_rallosian2_damaged',1096),(13993,13993,'accessories/wieldable_items/weapons/exp07/shield/exp07_shield_rallosian2_damaged_glow',1096),(13994,13994,'accessories/wieldable_items/weapons/exp07/staff/exp07_2hp_spear_forked_dull',1096),(13995,13995,'accessories/wieldable_items/weapons/exp07/staff/exp07_2hp_spear_forked',1096),(13996,13996,'_exp07/characters/tool_users/storm_giants/storm_giant_mage_02',1096),(13997,13997,'_exp07/characters/tool_users/storm_giants/storm_giant_barbarian_01',1096),(13998,13998,'_exp07/characters/tool_users/storm_giants/storm_giant_barbarian_02',1096),(13999,13999,'_exp07/characters/tool_users/storm_giants/storm_giant_heavy_01',1096),(14000,14000,'_exp07/characters/tool_users/storm_giants/storm_giant_heavy_02',1096),(14001,14001,'_exp07/characters/tool_users/storm_giants/storm_giant_king',1096),(14002,14002,'_exp07/characters/tool_users/storm_giants/storm_giant_mage_01',1096),(14003,14003,'creatures/tu/lava_earth_elem',1096),(14004,14004,'creatures/boss/fallengate_disease',1096),(14005,14005,'accessories/wearable_items/cloak/exp07/cloak_gothic_glass',1096),(14006,14006,'staticobjects/blacksmith/fprt_forge',1096),(14007,14007,'creatures/boss/fallengate_blue_black',1096),(14008,14008,'staticobjects/trainingdummy/kc_training_dummy',1096),(14009,14009,'staticobjects/trainingdummy/dpo_hanging_dummy_new',1096),(14010,14010,'staticobjects/trainingdummy/dpo_hanging_dummy_stained',1096),(14011,14011,'staticobjects/arches/kj_arch',1096),(14012,14012,'_exp07/characters/tool_users/tserrina/tserrina_fly',1096),(14013,14013,'staticobjects/chests/dpo_gnomish_chest_lid',1096),(14014,14014,'staticobjects/chests/dpo_gnomish_chest_open',1096),(14015,14015,'_exp06/zones/objects/exp06_dun_erudin_library/eru_exit_pillar',1096),(14016,14016,'_exp07/characters/tool_users/storm_giants/storm_giant_heavy_03',1096),(14017,14017,'staticobjects/crystals/dpo_salt_crystal',1096),(14018,14018,'_exp07/zones/exp07_dun_kraytocs_fortress/kraytocs_telescoping_pillar_barriers',1096),(14019,14019,'accessories/wearable_items/_exp07/rallos_zek_armor/rallos_zek_armor_chain/skirt',1096),(14020,14020,'accessories/wearable_items/_exp07/rallos_zek_armor/rallos_zek_armor_chain/chest',1096),(14021,14021,'accessories/wearable_items/_exp07/rallos_zek_armor/rallos_zek_armor_chain/feet',1096),(14022,14022,'accessories/wearable_items/_exp07/rallos_zek_armor/rallos_zek_armor_chain/forearms',1096),(14023,14023,'accessories/wearable_items/_exp07/rallos_zek_armor/rallos_zek_armor_chain/hands',1096),(14024,14024,'accessories/wearable_items/_exp07/rallos_zek_armor/rallos_zek_armor_chain/hands_rallos_zek_chain_gauntlets',1096),(14025,14025,'accessories/wearable_items/_exp07/rallos_zek_armor/rallos_zek_armor_chain/head',1096),(14026,14026,'accessories/wearable_items/_exp07/rallos_zek_armor/rallos_zek_armor_chain/head_rallos_zek_chain_helmet',1096),(14027,14027,'accessories/wearable_items/_exp07/rallos_zek_armor/rallos_zek_armor_chain/legs',1096),(14028,14028,'accessories/wearable_items/_exp07/rallos_zek_armor/rallos_zek_armor_chain/legs_noskirt',1096),(14029,14029,'accessories/wearable_items/_exp07/rallos_zek_armor/rallos_zek_armor_chain/legs_rallos_zek_shins',1096),(14030,14030,'accessories/wearable_items/_exp07/rallos_zek_armor/rallos_zek_armor_chain/rallos_zek_chain_gauntlets_forearm_left',1096),(14031,14031,'accessories/wearable_items/_exp07/rallos_zek_armor/rallos_zek_armor_chain/rallos_zek_chain_gauntlets_forearm_right',1096),(14032,14032,'accessories/wearable_items/_exp07/rallos_zek_armor/rallos_zek_armor_chain/rallos_zek_chain_pauldron_left',1096),(14033,14033,'accessories/wearable_items/_exp07/rallos_zek_armor/rallos_zek_armor_chain/rallos_zek_chain_pauldron_right',1096),(14034,14034,'accessories/wearable_items/_exp07/rallos_zek_armor/rallos_zek_armor_chain/rallos_zek_chain_shin_left',1096),(14035,14035,'accessories/wearable_items/_exp07/rallos_zek_armor/rallos_zek_armor_chain/rallos_zek_chain_shin_right',1096),(14036,14036,'accessories/wearable_items/_exp07/rallos_zek_armor/rallos_zek_armor_chain/shoulders',1096),(14037,14037,'accessories/wearable_items/_exp07/rallos_zek_armor/rallos_zek_armor_chain/shoulders_nopauldrons',1096),(14038,14038,'accessories/wearable_items/_exp07/rallos_zek_armor/rallos_zek_armor_chain/shoulders_rallos_zek_epic_pauldrons',1096),(14039,14039,'_exp07/zones/exp07_dun_kraytocs_fortress/kraytocs_telescoping_pillars',1096),(14040,14040,'accessories/wearable_items/cloak/exp07/cloak_sky_clouds',1096),(14041,14041,'accessories/wearable_items/cloak/exp07/cloak_sky_storm',1096),(14042,14042,'accessories/wearable_items/_exp08/dragon_armor/vanguard_shadow/hands',1096),(14043,14043,'ec/pc/darkelf/darkelf_male_zombie',1096),(14044,14044,'ec/pc/darkelf/darkelf_female_zombie',1096),(14045,14045,'staticobjects/rocks/rock03',1096),(14046,14046,'creatures/pets/spirit_totem',1096),(14047,14047,'_exp07/zones/exp07_dun_kraytocs_fortress/dragon_room_hot',1096),(14048,14048,'_exp07/zones/exp07_dun_kraytocs_fortress/dragon_room_cold',1096),(14049,14049,'_exp03/zones/objects/greater_faydark/crates/gf_crate_long_elf01',1096),(14050,14050,'_exp03/zones/objects/greater_faydark/crates/gf_crate_small_elf01',1096),(14051,14051,'staticobjects/barricades/hal_barricade_shipwreck_01',1096),(14052,14052,'staticobjects/barricades/hal_barricade_shipwreck_02',1096),(14053,14053,'staticobjects/barricades/hal_barricade_shipwreck_03',1096),(14054,14054,'creatures/mounts/horse_sun/horse_sun',1096),(14055,14055,'creatures/mounts/warg_mount/warg_armor04_lava',1096),(14056,14056,'staticobjects/rubble/steaming_ash_pile',1096),(14057,14057,'accessories/wearable_items/cloak/exp07/cloak_tree',1096),(14058,14058,'accessories/wearable_items/cloak/exp07/cloak_aurora',1096),(14059,14059,'accessories/wearable_items/cloak/exp07/cloak_rune_parchment',1096),(14060,14060,'staticobjects/barricades/dpo_barricade_steamfont',1096),(14061,14061,'staticobjects/catapult/dpo_harpoon_launcher_steamfont',1096),(14062,14062,'accessories/wearable_items/_exp07/antonican_crusader_vanguard/skirt',1096),(14063,14063,'accessories/wearable_items/_exp07/antonican_crusader_vanguard/chest',1096),(14064,14064,'accessories/wearable_items/_exp07/antonican_crusader_vanguard/feet',1096),(14065,14065,'accessories/wearable_items/_exp07/antonican_crusader_vanguard/forearms',1096),(14066,14066,'accessories/wearable_items/_exp07/antonican_crusader_vanguard/hands',1096),(14067,14067,'accessories/wearable_items/_exp07/antonican_crusader_vanguard/head',1096),(14068,14068,'accessories/wearable_items/_exp07/antonican_crusader_vanguard/head_epic',1096),(14069,14069,'accessories/wearable_items/_exp07/antonican_crusader_vanguard/legs',1096),(14070,14070,'accessories/wearable_items/_exp07/antonican_crusader_vanguard/legs_noskirt',1096),(14071,14071,'accessories/wearable_items/_exp07/antonican_crusader_vanguard/pauldron_left',1096),(14072,14072,'accessories/wearable_items/_exp07/antonican_crusader_vanguard/pauldron_right',1096),(14073,14073,'accessories/wearable_items/_exp07/antonican_crusader_vanguard/right',1096),(14074,14074,'accessories/wearable_items/_exp07/antonican_crusader_vanguard/shoulders',1096),(14075,14075,'accessories/wearable_items/_exp07/antonican_crusader_vanguard/shoulders_epic',1096),(14076,14076,'accessories/wearable_items/_exp07/antonican_crusader_vanguard/shoulders_nopauldrons',1096),(14077,14077,'accessories/wieldable_items/weapons/exp07/1h_crush/1h_wand_deathbringer_glow',1096),(14078,14078,'accessories/wieldable_items/weapons/exp07/1h_crush/1h_hammer_deathbringer',1096),(14079,14079,'accessories/wieldable_items/weapons/exp07/1h_crush/1h_hammer_deathbringer_glow',1096),(14080,14080,'accessories/wieldable_items/weapons/exp07/1h_crush/1h_mace_deathbringer',1096),(14081,14081,'accessories/wieldable_items/weapons/exp07/1h_crush/1h_mace_deathbringer_glow',1096),(14082,14082,'accessories/wieldable_items/weapons/exp07/1h_crush/1h_wand_deathbringer',1096),(14083,14083,'accessories/wieldable_items/weapons/exp07/1h_pierce/exp07_1hp_dagger_deathbringer_glow',1096),(14084,14084,'accessories/wieldable_items/weapons/exp07/1h_pierce/exp07_1hp_dagger_deathbringer',1096),(14085,14085,'accessories/wieldable_items/weapons/exp07/1h_sword/exp07_1hs_sword_deathbringer_glow',1096),(14086,14086,'accessories/wieldable_items/weapons/exp07/1h_sword/exp07_1hs_sword_deathbringer',1096),(14087,14087,'accessories/wieldable_items/weapons/exp07/2h_sword/exp07_2hs_sword_deathbringer_glow',1096),(14088,14088,'accessories/wieldable_items/weapons/exp07/2h_sword/exp07_2hs_sword_deathbringer',1096),(14089,14089,'accessories/wieldable_items/weapons/exp07/1h_crush/1h_wand_deathbringer_glowfx',1096),(14090,14090,'accessories/wieldable_items/weapons/exp07/1h_crush/1h_hammer_deathbringer_glowfx',1096),(14091,14091,'accessories/wieldable_items/weapons/exp07/1h_crush/1h_mace_deathbringer_glowfx',1096),(14092,14092,'accessories/wieldable_items/weapons/exp07/1h_pierce/exp07_1hp_dagger_deathbringer_glowfx',1096),(14093,14093,'accessories/wieldable_items/weapons/exp07/1h_sword/exp07_1hs_sword_deathbringer_glowfx',1096),(14094,14094,'accessories/wieldable_items/weapons/exp07/2h_sword/exp07_2hs_sword_deathbringer_glowfx',1096),(14095,14095,'staticobjects/draconic_widgets/solro_dragonpost',1096),(14096,14096,'staticobjects/bones/dpo_lost_soul',1096),(14097,14097,'staticobjects/chests/dpo_nek_skull_chest',1096),(14098,14098,'staticobjects/signs/neriak/darklight_wall_sign',1096),(14099,14099,'staticobjects/coffins_and_sarcophagus/dpo_thexian_sarcophagus_lid',1096),(14100,14100,'staticobjects/signs/neriak/darklight_wall_sign_batwings',1096),(14101,14101,'staticobjects/signs/neriak/darklight_wall_sign_spider',1096),(14102,14102,'staticobjects/portals/guk_spire_portal',1096),(14103,14103,'accessories/wearable_items/_exp07/station_cash_armor/casual_clothing/casual_clothing_plain/legs',1096),(14104,14104,'accessories/wearable_items/_exp07/station_cash_armor/casual_clothing/casual_clothing_plain/belt',1096),(14105,14105,'accessories/wearable_items/_exp07/station_cash_armor/casual_clothing/casual_clothing_plain/chest',1096),(14106,14106,'accessories/wearable_items/_exp07/station_cash_armor/casual_clothing/casual_clothing_plain/feet',1096),(14107,14107,'accessories/wieldable_items/weapons/exp07/1h_pierce/exp07_1hp_guk',1096),(14108,14108,'accessories/wieldable_items/weapons/exp07/bow/exp07_guk_bow',1096),(14109,14109,'accessories/wieldable_items/weapons/exp07/shield/exp07_guk_shield',1096),(14110,14110,'accessories/wieldable_items/weapons/exp07/talisman/exp07_orb_gukvdl',1096),(14111,14111,'accessories/wieldable_items/weapons/exp07/talisman/exp07_talisman_guk',1096),(14112,14112,'creatures/mounts/odus_prowler/odus_prowler_black_void',1096),(14113,14113,'staticobjects/crates/animated_crate_tinkered',1096),(14114,14114,'accessories/wearable_items/_exp07/bloodsaber_deathknight/skirt',1096),(14115,14115,'accessories/wearable_items/_exp07/bloodsaber_deathknight/chest',1096),(14116,14116,'accessories/wearable_items/_exp07/bloodsaber_deathknight/feet',1096),(14117,14117,'accessories/wearable_items/_exp07/bloodsaber_deathknight/forearms',1096),(14118,14118,'accessories/wearable_items/_exp07/bloodsaber_deathknight/hands',1096),(14119,14119,'accessories/wearable_items/_exp07/bloodsaber_deathknight/head',1096),(14120,14120,'accessories/wearable_items/_exp07/bloodsaber_deathknight/head_epic',1096),(14121,14121,'accessories/wearable_items/_exp07/bloodsaber_deathknight/legs',1096),(14122,14122,'accessories/wearable_items/_exp07/bloodsaber_deathknight/legs_noskirt',1096),(14123,14123,'accessories/wearable_items/_exp07/bloodsaber_deathknight/pauldrons_left',1096),(14124,14124,'accessories/wearable_items/_exp07/bloodsaber_deathknight/pauldrons_right',1096),(14125,14125,'accessories/wearable_items/_exp07/bloodsaber_deathknight/right',1096),(14126,14126,'accessories/wearable_items/_exp07/bloodsaber_deathknight/shoulders',1096),(14127,14127,'accessories/wearable_items/_exp07/bloodsaber_deathknight/shoulders_epic',1096),(14128,14128,'accessories/wearable_items/_exp07/bloodsaber_deathknight/shoulders_nopauldrons',1096),(14129,14129,'accessories/wearable_items/cloak/exp07/cloak_shroud_faithful',1096),(14130,14130,'accessories/wearable_items/_exp07/nizaran_assassin_armor/skirt',1096),(14131,14131,'accessories/wearable_items/_exp07/nizaran_assassin_armor/chest',1096),(14132,14132,'accessories/wearable_items/_exp07/nizaran_assassin_armor/feet',1096),(14133,14133,'accessories/wearable_items/_exp07/nizaran_assassin_armor/forearms',1096),(14134,14134,'accessories/wearable_items/_exp07/nizaran_assassin_armor/hands',1096),(14135,14135,'accessories/wearable_items/_exp07/nizaran_assassin_armor/head',1096),(14136,14136,'accessories/wearable_items/_exp07/nizaran_assassin_armor/legs',1096),(14137,14137,'accessories/wearable_items/_exp07/nizaran_assassin_armor/legs_noskirt',1096),(14138,14138,'accessories/wearable_items/_exp07/nizaran_assassin_armor/shoulders',1096),(14139,14139,'accessories/wieldable_items/weapons/exp07/2h_crush/exp07_2h_hammer_deathbringer_glow',1096),(14140,14140,'accessories/wieldable_items/weapons/exp07/2h_crush/exp07_2h_hammer_deathbringer',1096),(14141,14141,'accessories/wieldable_items/weapons/exp07/staff/exp07_staff_deathbringer_glow',1096),(14142,14142,'accessories/wieldable_items/weapons/exp07/staff/exp07_staff_deathbringer',1096),(14143,14143,'accessories/wearable_items/cloak/exp07/cloak_dark_elf_chain',1096),(14144,14144,'accessories/wearable_items/_exp07/station_cash_armor/dark_elf_armor_chain/skirt',1096),(14145,14145,'accessories/wearable_items/_exp07/station_cash_armor/dark_elf_armor_chain/chest',1096),(14146,14146,'accessories/wearable_items/_exp07/station_cash_armor/dark_elf_armor_chain/dark_elf_chain_collar',1096),(14147,14147,'accessories/wearable_items/_exp07/station_cash_armor/dark_elf_armor_chain/dark_elf_chain_forearm_left',1096),(14148,14148,'accessories/wearable_items/_exp07/station_cash_armor/dark_elf_armor_chain/dark_elf_chain_forearm_right',1096),(14149,14149,'accessories/wearable_items/_exp07/station_cash_armor/dark_elf_armor_chain/dark_elf_chain_pauldron_left',1096),(14150,14150,'accessories/wearable_items/_exp07/station_cash_armor/dark_elf_armor_chain/dark_elf_chain_pauldron_right',1096),(14151,14151,'accessories/wearable_items/_exp07/station_cash_armor/dark_elf_armor_chain/dark_elf_chain_shin_left',1096),(14152,14152,'accessories/wearable_items/_exp07/station_cash_armor/dark_elf_armor_chain/dark_elf_chain_shin_right',1096),(14153,14153,'accessories/wearable_items/_exp07/station_cash_armor/dark_elf_armor_chain/dark_elf_chain_upperarm_left',1096),(14154,14154,'accessories/wearable_items/_exp07/station_cash_armor/dark_elf_armor_chain/dark_elf_chain_upperarm_right',1096),(14155,14155,'accessories/wearable_items/_exp07/station_cash_armor/dark_elf_armor_chain/feet',1096),(14156,14156,'accessories/wearable_items/_exp07/station_cash_armor/dark_elf_armor_chain/feet_dark_elf_shin',1096),(14157,14157,'accessories/wearable_items/_exp07/station_cash_armor/dark_elf_armor_chain/forearms',1096),(14158,14158,'accessories/wearable_items/_exp07/station_cash_armor/dark_elf_armor_chain/forearms_dark_elf',1096),(14159,14159,'accessories/wearable_items/_exp07/station_cash_armor/dark_elf_armor_chain/hands',1096),(14160,14160,'accessories/wearable_items/_exp07/station_cash_armor/dark_elf_armor_chain/head',1096),(14161,14161,'accessories/wearable_items/_exp07/station_cash_armor/dark_elf_armor_chain/head_dark_elf_chain_helmet',1096),(14162,14162,'accessories/wearable_items/_exp07/station_cash_armor/dark_elf_armor_chain/legs',1096),(14163,14163,'accessories/wearable_items/_exp07/station_cash_armor/dark_elf_armor_chain/legs_noskirt',1096),(14164,14164,'accessories/wearable_items/_exp07/station_cash_armor/dark_elf_armor_chain/shoulders',1096),(14165,14165,'accessories/wearable_items/_exp07/station_cash_armor/dark_elf_armor_chain/shoulders_dark_elf_lower',1096),(14166,14166,'accessories/wearable_items/_exp07/station_cash_armor/dark_elf_armor_chain/shoulders_dark_elf_pauldrons',1096),(14167,14167,'accessories/wearable_items/_exp07/rallos_zek_armor/rallos_zek_armor_chain/shoulders_rallos_zek_small_pauldrons',1096),(14168,14168,'accessories/wearable_items/_exp07/rallos_zek_armor/rallos_zek_armor_chain/rallos_zek_chain_pauldron_small_left',1096),(14169,14169,'accessories/wearable_items/_exp07/rallos_zek_armor/rallos_zek_armor_chain/rallos_zek_chain_pauldron_small_right',1096),(14170,14170,'accessories/wieldable_items/shields/exp07/sea_turtle_shield',1096),(14171,14171,'accessories/wieldable_items/weapons/exp07/2h_crush/exp07_2h_hammer_deathbringer_glow_fx',1096),(14172,14172,'accessories/wieldable_items/weapons/exp07/staff/exp07_staff_deathbringer_glow_fx',1096),(14173,14173,'creatures/tu/gods_rallos_zek_new',1096),(14174,14174,'_exp02/zones/objects/rock_pile/rn_rocks_obsidianclump04',1096),(14175,14175,'_exp02/zones/objects/rock_pile/rn_rocks_lavarock02clump06',1096),(14176,14176,'_exp02/zones/objects/rock_pile/rn_rocks_lavarockclump01',1096),(14177,14177,'_exp02/zones/objects/rock_pile/rn_rocks_lavarockclump03',1096),(14178,14178,'_exp02/zones/objects/rock_pile/rn_rocks_lavarockclump04',1096),(14179,14179,'_exp02/zones/objects/rock_pile/rn_rocks_lavarockclump05',1096),(14180,14180,'_exp02/zones/objects/rock_pile/rn_rocks_lavarockclump06',1096),(14181,14181,'_exp02/zones/objects/rock_pile/rn_rocks_obsidianclump01',1096),(14182,14182,'_exp02/zones/objects/rock_pile/rn_rocks_obsidianclump02',1096),(14183,14183,'_exp02/zones/objects/rock_pile/rn_rocks_obsidianclump03',1096),(14184,14184,'_exp02/zones/objects/dragon_bones/rn_bones_dragon_largerib01',1096),(14185,14185,'_exp02/zones/objects/dragon_bones/rn_bones_dragon_skullhalf01',1096),(14186,14186,'staticobjects/liveevent/contest_painting_july10/contest_painting_adiene',1096),(14187,14187,'staticobjects/liveevent/contest_painting_july10/contest_painting_ainaree',1096),(14188,14188,'staticobjects/liveevent/contest_painting_july10/contest_painting_corisu',1096),(14189,14189,'staticobjects/liveevent/contest_painting_july10/contest_painting_diamante',1096),(14190,14190,'staticobjects/liveevent/contest_painting_july10/contest_painting_enna',1096),(14191,14191,'staticobjects/liveevent/contest_painting_july10/contest_painting_erithe',1096),(14192,14192,'staticobjects/liveevent/contest_painting_july10/contest_painting_hortensia',1096),(14193,14193,'staticobjects/liveevent/contest_painting_july10/contest_painting_inni',1096),(14194,14194,'staticobjects/liveevent/contest_painting_july10/contest_painting_lillyaana',1096),(14195,14195,'staticobjects/liveevent/contest_painting_july10/contest_painting_shanyssa',1096),(14196,14196,'accessories/wearable_items/_exp07/station_cash_armor/casual_clothing/casual_clothing_tartan/shoulders',1096),(14197,14197,'accessories/wearable_items/_exp07/station_cash_armor/casual_clothing/casual_clothing_tartan/belt',1096),(14198,14198,'accessories/wearable_items/_exp07/station_cash_armor/casual_clothing/casual_clothing_tartan/chest',1096),(14199,14199,'accessories/wearable_items/_exp07/station_cash_armor/casual_clothing/casual_clothing_tartan/feet',1096),(14200,14200,'accessories/wearable_items/_exp07/station_cash_armor/casual_clothing/casual_clothing_tartan/legs',1096),(14201,14201,'staticobjects/tradeskill_objects/hal_spinningwheel01_broken',1096),(14202,14202,'staticobjects/tradeskill_objects/hal_crate_broken_plates',1096),(14203,14203,'accessories/wearable_items/_exp06/dragon_chain/shoulders_pauldrons_epic',1096),(14204,14204,'accessories/wearable_items/_exp06/dragon_chain/dragon_pauldron_left_epic',1096),(14205,14205,'accessories/wearable_items/_exp06/dragon_chain/dragon_pauldron_right_epic',1096),(14206,14206,'accessories/wearable_items/_exp06/dragon_leather/shoulders_pauldrons_epic',1096),(14207,14207,'accessories/wearable_items/_exp06/dragon_robe/chest_pauldrons_epic',1096),(14208,14208,'accessories/wearable_items/_exp06/dragon_vanguard/shoulders_dragon_pauldron_epic',1096),(14209,14209,'accessories/wearable_items/_exp06/dragon_vanguard/dragon_pauldrons_left_epic',1096),(14210,14210,'accessories/wearable_items/_exp06/dragon_vanguard/dragon_pauldrons_right_epic',1096),(14211,14211,'staticobjects/tradeskill_objects/hal_fabricroll_damaged',1096),(14212,14212,'staticobjects/liveevent/frostfell/dpo_bauble_bell_blue01',1096),(14213,14213,'staticobjects/liveevent/frostfell/dpo_bauble_bell_gold01',1096),(14214,14214,'staticobjects/liveevent/frostfell/dpo_bauble_bell_green01',1096),(14215,14215,'staticobjects/liveevent/frostfell/dpo_bauble_bell_red01',1096),(14216,14216,'staticobjects/liveevent/frostfell/dpo_bauble_bell_silver01',1096),(14217,14217,'staticobjects/liveevent/frostfell/dpo_bauble_glass_icicle01',1096),(14218,14218,'staticobjects/liveevent/frostfell/dpo_bauble_oblong_redgold01',1096),(14219,14219,'staticobjects/liveevent/frostfell/dpo_bauble_oblong_silvergrn01',1096),(14220,14220,'staticobjects/liveevent/frostfell/dpo_holiday_bow_wall_blugrn',1096),(14221,14221,'staticobjects/liveevent/frostfell/dpo_holiday_bow_wall_pinkpat',1096),(14222,14222,'staticobjects/liveevent/frostfell/dpo_holiday_bow_wall_pursnow',1096),(14223,14223,'staticobjects/liveevent/frostfell/dpo_holiday_bow_wall_purstripe',1096),(14224,14224,'staticobjects/liveevent/frostfell/dpo_holiday_bow_wall_redstar',1096),(14225,14225,'staticobjects/liveevent/frostfell/dpo_holiday_bow_wall_yellowgrn',1096),(14226,14226,'staticobjects/liveevent/frostfell/dpo_room_divider_basic_purple_snowflakes',1096),(14227,14227,'staticobjects/liveevent/frostfell/dpo_room_divider_basic_red',1096),(14228,14228,'staticobjects/liveevent/frostfell/dpo_room_divider_basic_red_stars',1096),(14229,14229,'staticobjects/liveevent/frostfell/dpo_room_divider_gingerbread',1096),(14230,14230,'staticobjects/liveevent/frostfell/dpo_tree_rug_blue',1096),(14231,14231,'staticobjects/liveevent/frostfell/dpo_tree_rug_gold',1096),(14232,14232,'staticobjects/liveevent/frostfell/dpo_tree_rug_grn',1096),(14233,14233,'staticobjects/liveevent/frostfell/dpo_tree_rug_red',1096),(14234,14234,'staticobjects/liveevent/frostfell/holiday_figgypudding',1096),(14235,14235,'accessories/wieldable_items/weapons/exp07/shield/exp07_shield_tower_deathbringer_glow',1096),(14236,14236,'accessories/wieldable_items/weapons/exp07/shield/exp07_shield_round_deathbringer',1096),(14237,14237,'accessories/wieldable_items/weapons/exp07/shield/exp07_shield_round_deathbringer_glow',1096),(14238,14238,'accessories/wieldable_items/weapons/exp07/shield/exp07_shield_tower_deathbringer',1096),(14239,14239,'accessories/wieldable_items/weapons/exp07/bow/exp07_bow_deathbringer_glow',1096),(14240,14240,'accessories/wieldable_items/weapons/exp07/bow/exp07_bow_deathbringer',1096),(14241,14241,'staticobjects/bookcases/dpo_miragul_bookcase01',1096),(14242,14242,'staticobjects/books/dpo_miragul_bookstack_ice_short01',1096),(14243,14243,'staticobjects/lighting/dpo_miragul_lightsource_brazier_short01',1096),(14244,14244,'staticobjects/kitchen/sen_plate_small_orange_dpo',1096),(14245,14245,'staticobjects/tables/dpo_sen_small_table_01',1096),(14246,14246,'staticobjects/_exp07/exp07_dun_tower_of_frozen_shadow/tofs_mirror_01',1096),(14247,14247,'staticobjects/_exp07/exp07_dun_tower_of_frozen_shadow/tofs_mirror_fragment_01',1096),(14248,14248,'staticobjects/_exp07/exp07_dun_tower_of_frozen_shadow/tofs_mirror_fragment_02',1096),(14249,14249,'staticobjects/_exp07/exp07_dun_tower_of_frozen_shadow/tofs_mirror_fragment_03',1096),(14250,14250,'staticobjects/_exp07/exp07_dun_tower_of_frozen_shadow/tofs_mirror_fragment_04',1096),(14251,14251,'staticobjects/_exp07/exp07_dun_tower_of_frozen_shadow/tofs_mirror_fragment_05',1096),(14252,14252,'staticobjects/_exp07/exp07_dun_tower_of_frozen_shadow/tofs_mirror_fragment_06',1096),(14253,14253,'_exp01/zones/objects/light_sources/pf_lightsource_nomad_torch01',1096),(14254,14254,'accessories/wieldable_items/weapons/exp07/1h_sword/goth_axe_1_hand_01',1096),(14255,14255,'_exp07/characters/tool_users/othmir/othmir_male_warrior_03_black',1096),(14256,14256,'_exp07/characters/tool_users/othmir/othmir_female_base',1096),(14257,14257,'_exp07/characters/tool_users/othmir/othmir_female_peasent_01',1096),(14258,14258,'_exp07/characters/tool_users/othmir/othmir_female_peasent_01_spotted',1096),(14259,14259,'_exp07/characters/tool_users/othmir/othmir_female_peasent_02',1096),(14260,14260,'_exp07/characters/tool_users/othmir/othmir_female_peasent_02_dark',1096),(14261,14261,'_exp07/characters/tool_users/othmir/othmir_female_shaman',1096),(14262,14262,'_exp07/characters/tool_users/othmir/othmir_female_shaman_pattern',1096),(14263,14263,'_exp07/characters/tool_users/othmir/othmir_male_base',1096),(14264,14264,'_exp07/characters/tool_users/othmir/othmir_male_king',1096),(14265,14265,'_exp07/characters/tool_users/othmir/othmir_male_shaman',1096),(14266,14266,'_exp07/characters/tool_users/othmir/othmir_male_warrior_01',1096),(14267,14267,'_exp07/characters/tool_users/othmir/othmir_male_warrior_01_black',1096),(14268,14268,'_exp07/characters/tool_users/othmir/othmir_male_warrior_01_spotted',1096),(14269,14269,'_exp07/characters/tool_users/othmir/othmir_male_warrior_02',1096),(14270,14270,'_exp07/characters/tool_users/othmir/othmir_male_warrior_02_black',1096),(14271,14271,'_exp07/characters/tool_users/othmir/othmir_male_warrior_02_spotted',1096),(14272,14272,'_exp07/characters/tool_users/othmir/othmir_male_warrior_02_white',1096),(14273,14273,'_exp07/characters/tool_users/othmir/othmir_male_warrior_03',1096),(14274,14274,'_exp07/characters/tool_users/tallonite_female/tallonite_female_plate',1096),(14275,14275,'_exp07/characters/tool_users/tallonite_female/tallonite_female_fighter',1096),(14276,14276,'_exp07/characters/tool_users/tallonite_female/tallonite_female_mage',1096),(14277,14277,'_exp07/characters/tool_users/othmir/othmir_male_peasant_02',1096),(14278,14278,'accessories/wearable_items/_exp07/rallos_zek_armor/rallos_zek_armor_vanguard/skirt',1096),(14279,14279,'accessories/wearable_items/_exp07/rallos_zek_armor/rallos_zek_armor_vanguard/chest',1096),(14280,14280,'accessories/wearable_items/_exp07/rallos_zek_armor/rallos_zek_armor_vanguard/feet',1096),(14281,14281,'accessories/wearable_items/_exp07/rallos_zek_armor/rallos_zek_armor_vanguard/feet_rallos_zek_vanguard_shin_braces',1096),(14282,14282,'accessories/wearable_items/_exp07/rallos_zek_armor/rallos_zek_armor_vanguard/forearms',1096),(14283,14283,'accessories/wearable_items/_exp07/rallos_zek_armor/rallos_zek_armor_vanguard/hands',1096),(14284,14284,'accessories/wearable_items/_exp07/rallos_zek_armor/rallos_zek_armor_vanguard/hands_rallos_zek_vanguard_gauntlets',1096),(14285,14285,'accessories/wearable_items/_exp07/rallos_zek_armor/rallos_zek_armor_vanguard/head',1096),(14286,14286,'accessories/wearable_items/_exp07/rallos_zek_armor/rallos_zek_armor_vanguard/head_rallos_zek_vanguard_helmet',1096),(14287,14287,'accessories/wearable_items/_exp07/rallos_zek_armor/rallos_zek_armor_vanguard/legs',1096),(14288,14288,'accessories/wearable_items/_exp07/rallos_zek_armor/rallos_zek_armor_vanguard/legs_noskirt',1096),(14289,14289,'accessories/wearable_items/_exp07/rallos_zek_armor/rallos_zek_armor_vanguard/legs_noskirt_rallos_zek_vanguard_shin_braces',1096),(14290,14290,'accessories/wearable_items/_exp07/rallos_zek_armor/rallos_zek_armor_vanguard/legs_rallos_zek_vanguard_shin_braces',1096),(14291,14291,'accessories/wearable_items/_exp07/rallos_zek_armor/rallos_zek_armor_vanguard/rallos_zek_vanguard_forearm_left',1096),(14292,14292,'accessories/wearable_items/_exp07/rallos_zek_armor/rallos_zek_armor_vanguard/rallos_zek_vanguard_forearm_right',1096),(14293,14293,'accessories/wearable_items/_exp07/rallos_zek_armor/rallos_zek_armor_vanguard/rallos_zek_vanguard_pauldron_epic_left',1096),(14294,14294,'accessories/wearable_items/_exp07/rallos_zek_armor/rallos_zek_armor_vanguard/rallos_zek_vanguard_pauldron_epic_right',1096),(14295,14295,'accessories/wearable_items/_exp07/rallos_zek_armor/rallos_zek_armor_vanguard/rallos_zek_vanguard_pauldron_small_left',1096),(14296,14296,'accessories/wearable_items/_exp07/rallos_zek_armor/rallos_zek_armor_vanguard/rallos_zek_vanguard_pauldron_small_right',1096),(14297,14297,'accessories/wearable_items/_exp07/rallos_zek_armor/rallos_zek_armor_vanguard/rallos_zek_vanguard_shin_left',1096),(14298,14298,'accessories/wearable_items/_exp07/rallos_zek_armor/rallos_zek_armor_vanguard/rallos_zek_vanguard_shin_right',1096),(14299,14299,'accessories/wearable_items/_exp07/rallos_zek_armor/rallos_zek_armor_vanguard/right',1096),(14300,14300,'accessories/wearable_items/_exp07/rallos_zek_armor/rallos_zek_armor_vanguard/shoulders',1096),(14301,14301,'accessories/wearable_items/_exp07/rallos_zek_armor/rallos_zek_armor_vanguard/shoulders_nopauldrons',1096),(14302,14302,'accessories/wearable_items/_exp07/rallos_zek_armor/rallos_zek_armor_vanguard/shoulders_rallos_zek_epic_pauldrons',1096),(14303,14303,'accessories/wearable_items/_exp07/rallos_zek_armor/rallos_zek_armor_vanguard/shoulders_rallos_zek_small_pauldrons',1096),(14304,14304,'accessories/wearable_items/cloak/exp07/fae_d_wing01_female_demon',1096),(14305,14305,'accessories/wearable_items/cloak/exp07/fae_d_wing01_demon',1096),(14306,14306,'staticobjects/doors/dpo_qeynos_door',1096),(14307,14307,'staticobjects/doors/dpo_freeport_door',1096),(14308,14308,'staticobjects/doors/dpo_gorowyn_door',1096),(14309,14309,'staticobjects/doors/dpo_kelethin_door',1096),(14310,14310,'staticobjects/doors/dpo_neriak_door',1096),(14311,14311,'accessories/wearable_items/cloak/exp07/cloak_dragon',1096),(14312,14312,'accessories/wearable_items/cloak/exp07/cloak_dragon_slayer',1096),(14313,14313,'accessories/wieldable_items/weapons/exp07/bow/exp07_bow_deathbringer_glowfx',1096),(14314,14314,'creatures/mounts/flying_disc/flying_disc_elven_dark',1096),(14315,14315,'staticobjects/liveevent/community/dpo_reward_coin_bowl',1096),(14316,14316,'accessories/wearable_items/cloak/exp07/fae_d_wing02_good',1096),(14317,14317,'staticobjects/panels/dpo_snow_panel',1096),(14318,14318,'staticobjects/panels/dpo_erollisi_grass_panel',1096),(14319,14319,'staticobjects/panels/dpo_hay_panel',1096),(14320,14320,'accessories/wearable_items/_exp07/rallos_zek_armor/rallos_zek_armor_vanguard/rallos_zek_vanguard_belt_plate',1096),(14321,14321,'staticobjects/beds/dpo_fprt_bedroll01',1096),(14322,14322,'accessories/wearable_items/cloak/exp07/fae_d_wing02_evil',1096),(14323,14323,'accessories/wearable_items/halloween_masks/flaming_pumpkin/head',1096),(14324,14324,'accessories/wearable_items/halloween_masks/mask_fire_new/head',1096),(14325,14325,'_exp07/characters/tool_users/tallonite_female/vallonite_female_mage',1096),(14326,14326,'_exp07/characters/tool_users/tallonite_female/vallonite_female_fighter',1096),(14327,14327,'_exp07/characters/monsters/ice_wurm/ice_wurm_violet',1096),(14328,14328,'_exp07/characters/monsters/ice_wurm/ice_wurm_blue',1096),(14329,14329,'_exp07/characters/monsters/ice_wurm/ice_wurm_cobalt',1096),(14330,14330,'_exp07/characters/monsters/ice_wurm/ice_wurm_green',1096),(14331,14331,'_exp07/characters/monsters/ice_wurm/ice_wurm_sea_foam',1096),(14332,14332,'creatures/mounts/wolf_mount/wolf_mount_base',1096),(14333,14333,'accessories/wieldable_items/weapons/exp07/staff/exp07_spear_of_takha',1096),(14334,14334,'creatures/mounts/horse_heavy/horse_heavy_white_orange',1096),(14335,14335,'creatures/mounts/horse_heavy/horse_heavy_black_blue',1096),(14336,14336,'creatures/mounts/horse_heavy/horse_heavy_black_orange',1096),(14337,14337,'creatures/mounts/horse_heavy/horse_heavy_brown_blue',1096),(14338,14338,'creatures/mounts/horse_heavy/horse_heavy_brown_orange',1096),(14339,14339,'creatures/mounts/horse_heavy/horse_heavy_white_blue',1096),(14340,14340,'accessories/wieldable_items/weapons/exp07/shield/exp07_shield_tower_deathbringer_glowfx',1096),(14341,14341,'accessories/wieldable_items/weapons/exp07/shield/exp07_shield_round_deathbringer_glowfx',1096),(14342,14342,'staticobjects/books/dpo_cazicbook_black',1096),(14343,14343,'staticobjects/books/dpo_cazicbook_green',1096),(14344,14344,'staticobjects/books/dpo_cazicbook_red',1096),(14345,14345,'accessories/wearable_items/cloak/exp07/cloak_sc_valentine01',1096),(14346,14346,'creatures/tu/clockwork_bixie_figher',1096),(14347,14347,'accessories/wearable_items/cloak/exp07/cloak_sc_falling_snowflakes_01',1096),(14348,14348,'staticobjects/liveevent/guides/dpo_guide_fortuneteller_table',1096),(14349,14349,'staticobjects/liveevent/guides/dpo_guide_filghty_fae_candlestick',1096),(14350,14350,'staticobjects/liveevent/guides/dpo_guide_filghty_fae_picnic',1096),(14351,14351,'accessories/wearable_items/_exp08/dragon_armor/vanguard_shadow/hands_epic',1096),(14352,14352,'accessories/wearable_items/_exp08/dragon_armor/vanguard_shadow/head',1096),(14353,14353,'accessories/wearable_items/_exp08/dragon_armor/vanguard_shadow/head_epic',1096),(14354,14354,'accessories/wearable_items/_exp08/dragon_armor/vanguard_shadow/left',1096),(14355,14355,'staticobjects/tableware/dpo_eu_wineglass_red01',1096),(14356,14356,'staticobjects/tableware/dpo_eu_wineglass_yellow01',1096),(14357,14357,'staticobjects/liveevent/halloween/pumpkin_candy_dispenser_01',1096),(14358,14358,'accessories/wieldable_items/weapons/exp03/1h_crush/exp03_1hc_wooden_vine_scepter_torch',1096),(14359,14359,'_exp07/zones/exp07_dun_velks_forgotten_pools/blocker_01',1096),(14360,14360,'_exp07/zones/exp07_dun_velks_forgotten_pools/breakable_door_01',1096),(14361,14361,'_exp07/zones/exp07_dun_velks_forgotten_pools/breakable_door_01_open',1096),(14362,14362,'_exp07/zones/exp07_dun_velks_forgotten_pools/breakable_door_01_blue',1096),(14363,14363,'_exp07/zones/exp07_dun_velks_forgotten_pools/breakable_door_01_open_blue',1096),(14364,14364,'_exp07/zones/exp07_dun_velks_forgotten_pools/doorshield_01',1096),(14365,14365,'_exp07/zones/exp07_dun_velks_forgotten_pools/doorshield_switch_01',1096),(14366,14366,'_exp07/zones/exp07_dun_velks_forgotten_pools/invis_wall_breakable_door_col_01',1096),(14367,14367,'_exp07/zones/exp07_dun_velks_forgotten_pools/door_boss_01',1096),(14368,14368,'staticobjects/guildhall/gh_qeynos_tapestry_dpo',1096),(14369,14369,'staticobjects/guildhall/gh_freeport_tapestry_dpo',1096),(14370,14370,'staticobjects/liveevent/cityfestivals/kelethin_table_bedside_mossy',1096),(14371,14371,'_exp07/characters/monsters/timber_wolf/timber_wolf',1096),(14372,14372,'_exp03/zones/objects/beds/kel_bed_royalty01',1096),(14373,14373,'_exp03/zones/objects/bookcases/kel_bookcase01',1096),(14374,14374,'_exp03/zones/objects/kelethin/crystals/kel_crystal_cylinder_growing03',1096),(14375,14375,'_exp03/zones/objects/kelethin/oven/kel_oven02',1096),(14376,14376,'_exp03/zones/objects/kelethin/rugs/kel_rug_yellow_square02',1096),(14377,14377,'_exp03/zones/objects/kelethin/tavern_items/kel_tavern_chair01_yellow',1096),(14378,14378,'_exp03/zones/objects/kelethin/tavern_items/kel_tavern_stool01_yellow',1096),(14379,14379,'_exp03/zones/objects/tables/gf_elf_table02',1096),(14380,14380,'_exp03/zones/objects/greater_faydark/lightsources/gf_bugbear_torch01',1096),(14381,14381,'staticobjects/liveevent/frostfell/xmas_item_santa_sleigh_01',1096),(14382,14382,'accessories/wieldable_items/weapons/exp07/1h_crush/1h_mace_chillborn',1096),(14383,14383,'accessories/wieldable_items/weapons/exp07/1h_sword/exp07_1hs_sword_chillborn',1096),(14384,14384,'accessories/wieldable_items/weapons/exp07/bow/exp05_bow_chillborn',1096),(14385,14385,'accessories/wieldable_items/weapons/exp07/staff/exp07_2hp_spear_chillborn',1096),(14386,14386,'creatures/mounts/wolf_mount/wolf_mount_white',1096),(14387,14387,'creatures/mounts/wolf_mount/wolf_mount_black',1096),(14388,14388,'creatures/mounts/wolf_mount/wolf_mount_black_demon',1096),(14389,14389,'accessories/wearable_items/_exp07/station_cash_armor/ogre_vanguard_armor/skirt',1096),(14390,14390,'accessories/wearable_items/_exp07/station_cash_armor/ogre_vanguard_armor/chest',1096),(14391,14391,'accessories/wearable_items/_exp07/station_cash_armor/ogre_vanguard_armor/chest_ogre_armor',1096),(14392,14392,'accessories/wearable_items/_exp07/station_cash_armor/ogre_vanguard_armor/feet',1096),(14393,14393,'accessories/wearable_items/_exp07/station_cash_armor/ogre_vanguard_armor/forearms',1096),(14394,14394,'accessories/wearable_items/_exp07/station_cash_armor/ogre_vanguard_armor/hands',1096),(14395,14395,'accessories/wearable_items/_exp07/station_cash_armor/ogre_vanguard_armor/hands_ogre_armor',1096),(14396,14396,'accessories/wearable_items/_exp07/station_cash_armor/ogre_vanguard_armor/head',1096),(14397,14397,'accessories/wearable_items/_exp07/station_cash_armor/ogre_vanguard_armor/head_ogre_armor_helmet',1096),(14398,14398,'accessories/wearable_items/_exp07/station_cash_armor/ogre_vanguard_armor/legs',1096),(14399,14399,'accessories/wearable_items/_exp07/station_cash_armor/ogre_vanguard_armor/legs_noskirt',1096),(14400,14400,'accessories/wearable_items/_exp07/station_cash_armor/ogre_vanguard_armor/legs_ogre_armor',1096),(14401,14401,'accessories/wearable_items/_exp07/station_cash_armor/ogre_vanguard_armor/ogre_armor_vanguard_belt',1096),(14402,14402,'accessories/wearable_items/_exp07/station_cash_armor/ogre_vanguard_armor/ogre_armor_vanguard_collar',1096),(14403,14403,'accessories/wearable_items/_exp07/station_cash_armor/ogre_vanguard_armor/ogre_armor_vanguard_foot_left',1096),(14404,14404,'accessories/wearable_items/_exp07/station_cash_armor/ogre_vanguard_armor/ogre_armor_vanguard_foot_right',1096),(14405,14405,'accessories/wearable_items/_exp07/station_cash_armor/ogre_vanguard_armor/ogre_armor_vanguard_forearm_right',1096),(14406,14406,'accessories/wearable_items/_exp07/station_cash_armor/ogre_vanguard_armor/ogre_armor_vanguard_hand_right',1096),(14407,14407,'accessories/wearable_items/_exp07/station_cash_armor/ogre_vanguard_armor/ogre_armor_vanguard_pauldron_left',1096),(14408,14408,'accessories/wearable_items/_exp07/station_cash_armor/ogre_vanguard_armor/ogre_armor_vanguard_pauldron_right',1096),(14409,14409,'accessories/wearable_items/_exp07/station_cash_armor/ogre_vanguard_armor/ogre_armor_vanguard_shin_left',1096),(14410,14410,'accessories/wearable_items/_exp07/station_cash_armor/ogre_vanguard_armor/ogre_armor_vanguard_shin_right',1096),(14411,14411,'accessories/wearable_items/_exp07/station_cash_armor/ogre_vanguard_armor/ogre_armor_vanguard_thigh_left',1096),(14412,14412,'accessories/wearable_items/_exp07/station_cash_armor/ogre_vanguard_armor/ogre_armor_vanguard_upperarm_right',1096),(14413,14413,'accessories/wearable_items/_exp07/station_cash_armor/ogre_vanguard_armor/right',1096),(14414,14414,'accessories/wearable_items/_exp07/station_cash_armor/ogre_vanguard_armor/shoulders',1096),(14415,14415,'accessories/wearable_items/_exp07/station_cash_armor/ogre_vanguard_armor/shoulders_nopauldrons',1096),(14416,14416,'accessories/wearable_items/_exp07/station_cash_armor/ogre_vanguard_armor/shoulders_ogre_armor',1096),(14417,14417,'_exp02/zones/objects/eggs/hf_egg_single_purple_upright01',1096),(14418,14418,'accessories/wearable_items/cloak/exp07/cloak_ogre_vanguard',1096),(14419,14419,'creatures/mounts/odus_prowler/odus_prowler_skeleton_poison',1096),(14420,14420,'creatures/mounts/odus_prowler/odus_prowler_skeleton',1096),(14421,14421,'creatures/mounts/odus_prowler/odus_prowler_skeleton_armor',1096),(14422,14422,'creatures/mounts/odus_prowler/odus_prowler_skeleton_death',1096),(14423,14423,'accessories/wearable_items/_exp08/dragon_armor/vanguard_shadow/legs',1096),(14424,14424,'accessories/wearable_items/_exp08/dragon_armor/vanguard_shadow/legs_epic',1096),(14425,14425,'accessories/wearable_items/_exp08/dragon_armor/vanguard_shadow/legs_noskirt',1096),(14426,14426,'accessories/wearable_items/_exp08/dragon_armor/vanguard_shadow/right',1096),(14427,14427,'_exp06/characters/tool_users/talonite/talonite_male_full_suits/talonite_male_zonn',1096),(14428,14428,'_exp06/characters/tool_users/talonite/talonite_male_full_suits/talonite_male_archer',1096),(14429,14429,'_exp06/characters/tool_users/talonite/talonite_male_full_suits/talonite_male_boss',1096),(14430,14430,'_exp06/characters/tool_users/talonite/talonite_male_full_suits/talonite_male_mage',1096),(14431,14431,'accessories/wieldable_items/weapons/exp07/1h_crush/1h_mace_chillborn_fx',1096),(14432,14432,'accessories/wieldable_items/weapons/exp07/1h_sword/exp07_1hs_sword_chillborn_fx',1096),(14433,14433,'accessories/wieldable_items/weapons/exp07/bow/exp05_bow_chillborn_fx',1096),(14434,14434,'accessories/wieldable_items/weapons/exp07/staff/exp07_2hp_spear_chillborn_fx',1096),(14435,14435,'_exp06/characters/tool_users/talonite/talonite_male_full_suits/talonite_male_zonn_blue',1096),(14436,14436,'_exp06/characters/tool_users/talonite/talonite_male_full_suits/talonite_male_archer_blue',1096),(14437,14437,'_exp06/characters/tool_users/talonite/talonite_male_full_suits/talonite_male_boss_blue',1096),(14438,14438,'_exp06/characters/tool_users/talonite/talonite_male_full_suits/talonite_male_mage_blue',1096),(14439,14439,'accessories/wearable_items/_exp07/station_cash_armor/human_heritage_armor_chain/pauldron_right',1096),(14440,14440,'accessories/wearable_items/_exp07/station_cash_armor/human_heritage_armor_chain/shoulders',1096),(14441,14441,'accessories/wearable_items/_exp07/station_cash_armor/human_heritage_armor_chain/skirt',1096),(14442,14442,'accessories/wearable_items/_exp07/station_cash_armor/human_heritage_armor_chain/chest',1096),(14443,14443,'accessories/wearable_items/_exp07/station_cash_armor/human_heritage_armor_chain/feet',1096),(14444,14444,'accessories/wearable_items/_exp07/station_cash_armor/human_heritage_armor_chain/forearms',1096),(14445,14445,'accessories/wearable_items/_exp07/station_cash_armor/human_heritage_armor_chain/hands',1096),(14446,14446,'accessories/wearable_items/_exp07/station_cash_armor/human_heritage_armor_chain/head',1096),(14447,14447,'accessories/wearable_items/_exp07/station_cash_armor/human_heritage_armor_chain/head_human_heritage_chain_helmet',1096),(14448,14448,'accessories/wearable_items/_exp07/station_cash_armor/human_heritage_armor_chain/human_heritage_chain_arm_left',1096),(14449,14449,'accessories/wearable_items/_exp07/station_cash_armor/human_heritage_armor_chain/human_heritage_chain_arm_right',1096),(14450,14450,'accessories/wearable_items/_exp07/station_cash_armor/human_heritage_armor_chain/human_heritage_chain_belt',1096),(14451,14451,'accessories/wearable_items/_exp07/station_cash_armor/human_heritage_armor_chain/human_heritage_chain_pauldron_guard_left',1096),(14452,14452,'accessories/wearable_items/_exp07/station_cash_armor/human_heritage_armor_chain/human_heritage_chain_shin_left',1096),(14453,14453,'accessories/wearable_items/_exp07/station_cash_armor/human_heritage_armor_chain/human_heritage_chain_shin_right',1096),(14454,14454,'accessories/wearable_items/_exp07/station_cash_armor/human_heritage_armor_chain/legs',1096),(14455,14455,'accessories/wearable_items/_exp07/station_cash_armor/human_heritage_armor_chain/legs_noskirt',1096),(14456,14456,'accessories/wearable_items/_exp07/station_cash_armor/human_heritage_armor_chain/pauldron_left',1096),(14457,14457,'staticobjects/bucket/dpo_kel_bucket_water',1096),(14458,14458,'staticobjects/bucket/dpo_orc_bucket_sludge',1096),(14459,14459,'accessories/wearable_items/_exp08/dragon_armor/vanguard_shadow/shoulders',1096),(14460,14460,'accessories/wearable_items/cloak/exp07/cloak_human_heritage_armor_red',1096),(14461,14461,'accessories/wearable_items/cloak/exp07/cloak_human_heritage_armor_blue',1096),(14462,14462,'accessories/wearable_items/cloak/exp07/cloak_human_heritage_armor_gold',1096),(14463,14463,'accessories/wearable_items/cloak/exp07/cloak_human_heritage_armor_pewter',1096),(14464,14464,'creatures/mounts/odus_prowler/odus_prowler_skeleton_armor_cold',1096),(14465,14465,'accessories/wieldable_items/weapons/exp07/1h_pierce/exp07_1hp_guk_cold',1096),(14466,14466,'accessories/wieldable_items/weapons/exp07/talisman/exp07_orb_guk_cold',1096),(14467,14467,'accessories/wieldable_items/weapons/exp07/bow/exp07_guk_bow_cold',1096),(14468,14468,'accessories/wearable_items/_exp07/guk_skull/snap_ons/shin_right',1096),(14469,14469,'accessories/wearable_items/_exp07/guk_skull/snap_ons/forearm_left',1096),(14470,14470,'accessories/wearable_items/_exp07/guk_skull/snap_ons/forearm_right',1096),(14471,14471,'accessories/wearable_items/_exp07/guk_skull/snap_ons/pauldrons_left',1096),(14472,14472,'accessories/wearable_items/_exp07/guk_skull/snap_ons/pauldrons_lower_left',1096),(14473,14473,'accessories/wearable_items/_exp07/guk_skull/snap_ons/pauldrons_lower_right',1096),(14474,14474,'accessories/wearable_items/_exp07/guk_skull/snap_ons/pauldrons_right',1096),(14475,14475,'accessories/wearable_items/_exp07/guk_skull/snap_ons/shin_left',1096),(14476,14476,'accessories/wearable_items/_exp07/guk_skull/skirt',1096),(14477,14477,'accessories/wearable_items/_exp07/guk_skull/chest',1096),(14478,14478,'accessories/wearable_items/_exp07/guk_skull/feet',1096),(14479,14479,'accessories/wearable_items/_exp07/guk_skull/forearms',1096),(14480,14480,'accessories/wearable_items/_exp07/guk_skull/hands',1096),(14481,14481,'accessories/wearable_items/_exp07/guk_skull/hands_epic',1096),(14482,14482,'accessories/wearable_items/_exp07/guk_skull/head',1096),(14483,14483,'accessories/wearable_items/_exp07/guk_skull/head_epic',1096),(14484,14484,'accessories/wearable_items/_exp07/guk_skull/legs',1096),(14485,14485,'accessories/wearable_items/_exp07/guk_skull/legs_epic',1096),(14486,14486,'accessories/wearable_items/_exp07/guk_skull/legs_noskirt',1096),(14487,14487,'accessories/wearable_items/_exp07/guk_skull/right',1096),(14488,14488,'accessories/wearable_items/_exp07/guk_skull/shoulders',1096),(14489,14489,'accessories/wearable_items/_exp07/guk_skull/shoulders_epic',1096),(14490,14490,'accessories/wearable_items/_exp07/guk_skull/shoulders_nopauldrons',1096),(14491,14491,'creatures/monsters/odus_prowler_skeletal',1096),(14492,14492,'_exp07/zones/exp07_dun_velks_forgotten_pools/pod_01',1096),(14493,14493,'staticobjects/_exp07/trapped_crab',1096),(14494,14494,'_exp07/zones/exp07_dun_kraytocs_fortress/messhall_tables_giant_broken_dpo',1096),(14495,14495,'_exp07/zones/exp07_dun_kraytocs_fortress/messhall_tables_giant_dpo',1096),(14496,14496,'_exp07/zones/exp07_dun_kraytocs_fortress/messhall_tables_human_broken_dpo',1096),(14497,14497,'_exp07/zones/exp07_dun_kraytocs_fortress/messhall_tables_human_dpo',1096),(14498,14498,'creatures/mounts/horse_heavy/horse_stallion_black',1096),(14499,14499,'_exp07/zones/exp07_dun_tower_of_frozen_shadow/floating_mirror',1096),(14500,14500,'_exp07/characters/tool_users/tallon_zek/tallon_zek',1096),(14501,14501,'accessories/wearable_items/_exp07/kraytok/chain/skirt',1096),(14502,14502,'accessories/wearable_items/_exp07/kraytok/chain/chest',1096),(14503,14503,'accessories/wearable_items/_exp07/kraytok/chain/feet',1096),(14504,14504,'accessories/wearable_items/_exp07/kraytok/chain/forearms',1096),(14505,14505,'accessories/wearable_items/_exp07/kraytok/chain/hands',1096),(14506,14506,'accessories/wearable_items/_exp07/kraytok/chain/head',1096),(14507,14507,'accessories/wearable_items/_exp07/kraytok/chain/legs',1096),(14508,14508,'accessories/wearable_items/_exp07/kraytok/chain/legs_noskirt',1096),(14509,14509,'accessories/wearable_items/_exp07/kraytok/chain/pauldron_left',1096),(14510,14510,'accessories/wearable_items/_exp07/kraytok/chain/pauldron_right',1096),(14511,14511,'accessories/wearable_items/_exp07/kraytok/chain/shoulders',1096),(14512,14512,'accessories/wearable_items/_exp07/kraytok/chain/shoulders_nopauldrons',1096),(14513,14513,'accessories/wearable_items/_exp07/kraytok/leather/skirt',1096),(14514,14514,'accessories/wearable_items/_exp07/kraytok/leather/chest',1096),(14515,14515,'accessories/wearable_items/_exp07/kraytok/leather/feet',1096),(14516,14516,'accessories/wearable_items/_exp07/kraytok/leather/forearms',1096),(14517,14517,'accessories/wearable_items/_exp07/kraytok/leather/hands',1096),(14518,14518,'accessories/wearable_items/_exp07/kraytok/leather/head',1096),(14519,14519,'accessories/wearable_items/_exp07/kraytok/leather/legs',1096),(14520,14520,'accessories/wearable_items/_exp07/kraytok/leather/legs_noskirt',1096),(14521,14521,'accessories/wearable_items/_exp07/kraytok/leather/pauldron_left',1096),(14522,14522,'accessories/wearable_items/_exp07/kraytok/leather/pauldron_right',1096),(14523,14523,'accessories/wearable_items/_exp07/kraytok/leather/shoulders',1096),(14524,14524,'accessories/wearable_items/_exp07/kraytok/leather/shoulders_nopauldrons',1096),(14525,14525,'accessories/wearable_items/_exp07/kraytok/robe/skirt',1096),(14526,14526,'accessories/wearable_items/_exp07/kraytok/robe/chest',1096),(14527,14527,'accessories/wearable_items/_exp07/kraytok/robe/chest_paldrons',1096),(14528,14528,'accessories/wearable_items/_exp07/kraytok/robe/feet',1096),(14529,14529,'accessories/wearable_items/_exp07/kraytok/robe/hands',1096),(14530,14530,'accessories/wearable_items/_exp07/kraytok/robe/head',1096),(14531,14531,'accessories/wearable_items/_exp07/kraytok/robe/head_collar',1096),(14532,14532,'accessories/wearable_items/_exp07/kraytok/robe/pants',1096),(14533,14533,'accessories/wearable_items/_exp07/kraytok/robe/pauldron_left',1096),(14534,14534,'accessories/wearable_items/_exp07/kraytok/robe/pauldron_right',1096),(14535,14535,'staticobjects/tcg/tcg_painting49_erollisimarr',1096),(14536,14536,'staticobjects/tcg/tcg_fishtank01',1096),(14537,14537,'staticobjects/tcg/tcg_tapestry_stained_glass_dragon',1096),(14538,14538,'staticobjects/tcg/tcg_tapestry_silken_glory',1096),(14539,14539,'staticobjects/tcg/tcg_painting51_izathoth',1096),(14540,14540,'staticobjects/tcg/tcg_painting50_grandmaster',1096),(14541,14541,'accessories/wearable_items/profesion_hats/dragon_helm/head_dragon_helm',1096),(14542,14542,'accessories/wearable_items/profesion_hats/dragon_helm/head_dragon_gold_helm',1096),(14543,14543,'accessories/wearable_items/_exp07/guk_raven/chain/skirt',1096),(14544,14544,'accessories/wearable_items/_exp07/guk_raven/chain/chest',1096),(14545,14545,'accessories/wearable_items/_exp07/guk_raven/chain/feet',1096),(14546,14546,'accessories/wearable_items/_exp07/guk_raven/chain/forearms',1096),(14547,14547,'accessories/wearable_items/_exp07/guk_raven/chain/hands',1096),(14548,14548,'accessories/wearable_items/_exp07/guk_raven/chain/head',1096),(14549,14549,'accessories/wearable_items/_exp07/guk_raven/chain/head_epic',1096),(14550,14550,'accessories/wearable_items/_exp07/guk_raven/chain/legs',1096),(14551,14551,'accessories/wearable_items/_exp07/guk_raven/chain/legs_noskirt',1096),(14552,14552,'accessories/wearable_items/_exp07/guk_raven/chain/raven_shoulder_left',1096),(14553,14553,'accessories/wearable_items/_exp07/guk_raven/chain/raven_shoulder_right',1096),(14554,14554,'accessories/wearable_items/_exp07/guk_raven/chain/shoulders',1096),(14555,14555,'accessories/wearable_items/_exp07/guk_raven/chain/shoulders_epic_pauldrons',1096),(14556,14556,'accessories/wearable_items/_exp07/guk_raven/leather/skirt',1096),(14557,14557,'accessories/wearable_items/_exp07/guk_raven/leather/chest',1096),(14558,14558,'accessories/wearable_items/_exp07/guk_raven/leather/feet',1096),(14559,14559,'accessories/wearable_items/_exp07/guk_raven/leather/forearms',1096),(14560,14560,'accessories/wearable_items/_exp07/guk_raven/leather/hands',1096),(14561,14561,'accessories/wearable_items/_exp07/guk_raven/leather/head',1096),(14562,14562,'accessories/wearable_items/_exp07/guk_raven/leather/head_epic',1096),(14563,14563,'accessories/wearable_items/_exp07/guk_raven/leather/legs',1096),(14564,14564,'accessories/wearable_items/_exp07/guk_raven/leather/legs_noskirt',1096),(14565,14565,'accessories/wearable_items/_exp07/guk_raven/leather/raven_shoulder_left',1096),(14566,14566,'accessories/wearable_items/_exp07/guk_raven/leather/raven_shoulder_right',1096),(14567,14567,'accessories/wearable_items/_exp07/guk_raven/leather/shoulders',1096),(14568,14568,'accessories/wearable_items/_exp07/guk_raven/leather/shoulders_epic_pauldrons',1096),(14569,14569,'accessories/wearable_items/_exp07/guk_raven/robe/snap_ons/head_raven_helm',1096),(14570,14570,'accessories/wearable_items/_exp07/guk_raven/robe/skirt',1096),(14571,14571,'accessories/wearable_items/_exp07/guk_raven/robe/chest',1096),(14572,14572,'accessories/wearable_items/_exp07/guk_raven/robe/chest_epic_pauldrons',1096),(14573,14573,'accessories/wearable_items/_exp07/guk_raven/robe/feet',1096),(14574,14574,'accessories/wearable_items/_exp07/guk_raven/robe/hands',1096),(14575,14575,'accessories/wearable_items/_exp07/guk_raven/robe/head',1096),(14576,14576,'accessories/wearable_items/_exp07/guk_raven/robe/head_epic',1096),(14577,14577,'accessories/wearable_items/_exp07/guk_raven/robe/pants',1096),(14578,14578,'accessories/wearable_items/_exp07/guk_raven/vanguard/skirt',1096),(14579,14579,'accessories/wearable_items/_exp07/guk_raven/vanguard/chest',1096),(14580,14580,'accessories/wearable_items/_exp07/guk_raven/vanguard/feet',1096),(14581,14581,'accessories/wearable_items/_exp07/guk_raven/vanguard/forearms',1096),(14582,14582,'accessories/wearable_items/_exp07/guk_raven/vanguard/hands',1096),(14583,14583,'accessories/wearable_items/_exp07/guk_raven/vanguard/head',1096),(14584,14584,'accessories/wearable_items/_exp07/guk_raven/vanguard/head_epic',1096),(14585,14585,'accessories/wearable_items/_exp07/guk_raven/vanguard/legs',1096),(14586,14586,'accessories/wearable_items/_exp07/guk_raven/vanguard/legs_noskirt',1096),(14587,14587,'accessories/wearable_items/_exp07/guk_raven/vanguard/raven_shoulder_left',1096),(14588,14588,'accessories/wearable_items/_exp07/guk_raven/vanguard/raven_shoulder_right',1096),(14589,14589,'accessories/wearable_items/_exp07/guk_raven/vanguard/right',1096),(14590,14590,'accessories/wearable_items/_exp07/guk_raven/vanguard/shoulders',1096),(14591,14591,'accessories/wearable_items/_exp07/guk_raven/vanguard/shoulders_epic',1096),(14592,14592,'accessories/wearable_items/_exp07/guk_raven/vanguard/shoulders_nopauldrons',1096),(14593,14593,'accessories/wearable_items/_exp07/station_cash_armor/gnome_chain/skirt',1096),(14594,14594,'accessories/wearable_items/_exp07/station_cash_armor/gnome_chain/chest',1096),(14595,14595,'accessories/wearable_items/_exp07/station_cash_armor/gnome_chain/chest_snapons',1096),(14596,14596,'accessories/wearable_items/_exp07/station_cash_armor/gnome_chain/feet',1096),(14597,14597,'accessories/wearable_items/_exp07/station_cash_armor/gnome_chain/feet_snapons',1096),(14598,14598,'accessories/wearable_items/_exp07/station_cash_armor/gnome_chain/forearms',1096),(14599,14599,'accessories/wearable_items/_exp07/station_cash_armor/gnome_chain/forearms_control_panel',1096),(14600,14600,'accessories/wearable_items/_exp07/station_cash_armor/gnome_chain/hands',1096),(14601,14601,'accessories/wearable_items/_exp07/station_cash_armor/gnome_chain/hands_snapons',1096),(14602,14602,'accessories/wearable_items/_exp07/station_cash_armor/gnome_chain/head',1096),(14603,14603,'accessories/wearable_items/_exp07/station_cash_armor/gnome_chain/legs',1096),(14604,14604,'accessories/wearable_items/_exp07/station_cash_armor/gnome_chain/legs_noskirt',1096),(14605,14605,'accessories/wearable_items/_exp07/station_cash_armor/gnome_chain/shoulders',1096),(14606,14606,'accessories/wearable_items/_exp07/station_cash_armor/gnome_chain/shoulders_snapons',1096),(14607,14607,'accessories/wearable_items/_exp07/station_cash_armor/gnome_chain/snapons/gnome_leg_right',1096),(14608,14608,'accessories/wearable_items/_exp07/station_cash_armor/gnome_chain/snapons/gnome_arm_controls_left',1096),(14609,14609,'accessories/wearable_items/_exp07/station_cash_armor/gnome_chain/snapons/gnome_arm_lower_right',1096),(14610,14610,'accessories/wearable_items/_exp07/station_cash_armor/gnome_chain/snapons/gnome_arm_upper_right',1096),(14611,14611,'accessories/wearable_items/_exp07/station_cash_armor/gnome_chain/snapons/gnome_chain_pad_lock',1096),(14612,14612,'accessories/wearable_items/_exp07/station_cash_armor/gnome_chain/snapons/gnome_chain_pauldron_left',1096),(14613,14613,'accessories/wearable_items/_exp07/station_cash_armor/gnome_chain/snapons/gnome_chain_pauldron_right',1096),(14614,14614,'accessories/wearable_items/_exp07/station_cash_armor/gnome_chain/snapons/gnome_chain_smoke_stack',1096),(14615,14615,'accessories/wearable_items/_exp08/dragon_armor/vanguard_shadow/shoulders_epic',1096),(14616,14616,'accessories/wearable_items/_exp07/station_cash_armor/gnome_chain/snapons/gnome_leg_left',1096),(14617,14617,'staticobjects/tcg/tcg_cup_of_fulfillment',1096),(14618,14618,'accessories/wearable_items/_exp07/tinted_armor/dragon_vanguard_blighted/chest',1096),(14619,14619,'accessories/wearable_items/_exp07/tinted_armor/dragon_vanguard_blighted/feet',1096),(14620,14620,'accessories/wearable_items/_exp07/tinted_armor/dragon_vanguard_blighted/forearms',1096),(14621,14621,'accessories/wearable_items/_exp07/tinted_armor/dragon_vanguard_blighted/hands',1096),(14622,14622,'accessories/wearable_items/_exp07/tinted_armor/dragon_vanguard_blighted/head',1096),(14623,14623,'accessories/wearable_items/_exp07/tinted_armor/dragon_vanguard_blighted/legs',1096),(14624,14624,'accessories/wearable_items/_exp07/tinted_armor/dragon_vanguard_blighted/legs_noskirt',1096),(14625,14625,'accessories/wearable_items/_exp07/tinted_armor/dragon_vanguard_blighted/right',1096),(14626,14626,'accessories/wearable_items/_exp07/tinted_armor/dragon_vanguard_blighted/shoulders',1096),(14627,14627,'accessories/wearable_items/_exp07/tinted_armor/dragon_vanguard_blighted/shoulders_nopauldrons',1096),(14628,14628,'accessories/wearable_items/_exp07/tinted_armor/dragon_vanguard_blighted/skirt',1096),(14629,14629,'accessories/wearable_items/_exp07/station_cash_armor/casual_clothing/casual_clothing_nobleman/shoulders',1096),(14630,14630,'accessories/wearable_items/_exp07/station_cash_armor/casual_clothing/casual_clothing_nobleman/belt',1096),(14631,14631,'accessories/wearable_items/_exp07/station_cash_armor/casual_clothing/casual_clothing_nobleman/chest',1096),(14632,14632,'accessories/wearable_items/_exp07/station_cash_armor/casual_clothing/casual_clothing_nobleman/feet',1096),(14633,14633,'accessories/wearable_items/_exp07/station_cash_armor/casual_clothing/casual_clothing_nobleman/legs',1096),(14634,14634,'_exp04/zones/objects/timorous_deep/goro_obj_door_dpo',1096),(14635,14635,'accessories/wearable_items/_exp07/station_cash_armor/robe_good_white/skirt',1096),(14636,14636,'accessories/wearable_items/_exp07/station_cash_armor/robe_good_white/arm_left',1096),(14637,14637,'accessories/wearable_items/_exp07/station_cash_armor/robe_good_white/arm_right',1096),(14638,14638,'accessories/wearable_items/_exp07/station_cash_armor/robe_good_white/chest',1096),(14639,14639,'accessories/wearable_items/_exp07/station_cash_armor/robe_good_white/feet',1096),(14640,14640,'accessories/wearable_items/_exp07/station_cash_armor/robe_good_white/hands',1096),(14641,14641,'accessories/wearable_items/_exp07/station_cash_armor/robe_good_white/head',1096),(14642,14642,'accessories/wearable_items/_exp07/station_cash_armor/robe_good_white/pants',1096),(14643,14643,'_exp07/characters/monsters/griffin_new/server_griffin',1096),(14644,14644,'accessories/wearable_items/cloak/exp07/fae_d_wing_skeleton_medium',1096),(14645,14645,'accessories/wearable_items/cloak/exp07/fae_d_wing_skeleton',1096),(14646,14646,'accessories/wearable_items/cloak/exp07/fae_d_wing_skeleton_large',1096),(14647,14647,'accessories/wearable_items/cloak/exp07/cloak_gnome',1096),(14648,14648,'staticobjects/trophies/legion_force_trophy',1096),(14649,14649,'staticobjects/tcg/tcg_painting_lon11',1096),(14650,14650,'staticobjects/liveevent/contest_painting_oct10/contest3_painting_bwibip01',1096),(14651,14651,'staticobjects/liveevent/contest_painting_oct10/contest3_painting_byblis01',1096),(14652,14652,'staticobjects/liveevent/contest_painting_oct10/contest3_painting_corvo01',1096),(14653,14653,'staticobjects/liveevent/contest_painting_oct10/contest3_painting_crymsyn01',1096),(14654,14654,'staticobjects/liveevent/contest_painting_oct10/contest3_painting_ladyaerfen01',1096),(14655,14655,'staticobjects/liveevent/contest_painting_oct10/contest3_painting_linger01',1096),(14656,14656,'_exp07/characters/monsters/griffin_new/highland_griffin',1096),(14657,14657,'staticobjects/_exp07_prelude/sea_monster_plushy',1096),(14658,14658,'_exp07/characters/tool_users/carac_omnica/carac_omnica_mask_hand',1096),(14659,14659,'_exp07/characters/tool_users/carac_omnica/carac_omnica',1096),(14660,14660,'_exp07/characters/tool_users/carac_omnica/carac_omnica_mask',1096),(14661,14661,'accessories/npc_wearables/carac_omica/carac_omica_mask_hand',1096),(14662,14662,'accessories/npc_wearables/carac_omica/carac_omica_mask',1096),(14663,14663,'accessories/wearable_items/_exp07/station_cash_armor/gnome_chain/head_epic',1096),(14664,14664,'_exp03/characters/tool_users/vampire_greater/vampire_greater_male01_upsidedown',1096),(14665,14665,'_exp03/characters/tool_users/vampire_greater/vampire_greater_armored_female01_upsidedown',1096),(14666,14666,'_exp03/characters/tool_users/vampire_greater/vampire_greater_armored_male01_upsidedown',1096),(14667,14667,'_exp04/tool_users/drachnid_female_chain_upsidedown',1096),(14668,14668,'_exp04/tool_users/drachnid_female_upsidedown',1096),(14669,14669,'_exp04/tool_users/drachnid_queen_upsidedown',1096),(14670,14670,'creatures/tu/skeleton_upsidedown',1096),(14671,14671,'accessories/wieldable_items/weapons/exp07/1h_sword/exp07_1h_axe_rallos_npc',1096),(14672,14672,'accessories/wieldable_items/weapons/exp07/shield/exp07_shield_rallos_npc',1096),(14673,14673,'creatures/monsters/bat_upsidedown',1096),(14674,14674,'accessories/wearable_items/_exp07/rallos_zek_armor/rallos_zek_armor_robe/skirt',1096),(14675,14675,'accessories/wearable_items/_exp07/rallos_zek_armor/rallos_zek_armor_robe/chest',1096),(14676,14676,'accessories/wearable_items/_exp07/rallos_zek_armor/rallos_zek_armor_robe/chest_rallos_zek_robe_pauldrons',1096),(14677,14677,'accessories/wearable_items/_exp07/rallos_zek_armor/rallos_zek_armor_robe/feet',1096),(14678,14678,'accessories/wearable_items/_exp07/rallos_zek_armor/rallos_zek_armor_robe/hands',1096),(14679,14679,'accessories/wearable_items/_exp07/rallos_zek_armor/rallos_zek_armor_robe/hands_rallos_zek_robe_gauntlets',1096),(14680,14680,'accessories/wearable_items/_exp07/rallos_zek_armor/rallos_zek_armor_robe/head',1096),(14681,14681,'accessories/wearable_items/_exp07/rallos_zek_armor/rallos_zek_armor_robe/head_rallos_zek_horns',1096),(14682,14682,'accessories/wearable_items/_exp07/rallos_zek_armor/rallos_zek_armor_robe/pants',1096),(14683,14683,'accessories/wearable_items/_exp07/rallos_zek_armor/rallos_zek_armor_robe/pauldron_left',1096),(14684,14684,'accessories/wearable_items/_exp07/rallos_zek_armor/rallos_zek_armor_robe/pauldron_right',1096),(14685,14685,'accessories/wearable_items/_exp07/rallos_zek_armor/rallos_zek_armor_robe/rallos_zek_robe_belt_plate',1096),(14686,14686,'accessories/wearable_items/_exp07/rallos_zek_armor/rallos_zek_armor_robe/rallos_zek_robe_gauntlets_forearm_left',1096),(14687,14687,'accessories/wearable_items/_exp07/rallos_zek_armor/rallos_zek_armor_robe/rallos_zek_robe_gauntlets_forearm_right',1096),(14688,14688,'accessories/wearable_items/_exp07/rallos_zek_armor/rallos_zek_armor_robe/rallos_zek_robe_hood_horns',1096),(14689,14689,'accessories/wearable_items/_exp07/rallos_zek_armor/rallos_zek_armor_robe/rallos_zek_robe_pauldron_left',1096),(14690,14690,'accessories/wearable_items/_exp07/rallos_zek_armor/rallos_zek_armor_robe/rallos_zek_robe_pauldron_right',1096),(14691,14691,'_exp07/characters/monsters/timber_wolf/timber_wolf_white_boss',1096),(14692,14692,'_exp07/characters/monsters/timber_wolf/timber_wolf_black',1096),(14693,14693,'_exp07/characters/monsters/timber_wolf/timber_wolf_white',1096),(14694,14694,'accessories/wearable_items/cloak/exp07/cloak_adventuring',1096),(14695,14695,'accessories/wearable_items/_exp07/gindan_armor/skirt',1096),(14696,14696,'accessories/wearable_items/_exp07/gindan_armor/chest',1096),(14697,14697,'accessories/wearable_items/_exp07/gindan_armor/feet',1096),(14698,14698,'accessories/wearable_items/_exp07/gindan_armor/forearms',1096),(14699,14699,'accessories/wearable_items/_exp07/gindan_armor/hands',1096),(14700,14700,'accessories/wearable_items/_exp07/gindan_armor/head',1096),(14701,14701,'accessories/wearable_items/_exp07/gindan_armor/head_dragon_helm',1096),(14702,14702,'accessories/wearable_items/_exp07/gindan_armor/legs',1096),(14703,14703,'accessories/wearable_items/_exp07/gindan_armor/legs_noskirt',1096),(14704,14704,'accessories/wearable_items/_exp07/gindan_armor/right',1096),(14705,14705,'accessories/wearable_items/_exp07/gindan_armor/shoulders',1096),(14706,14706,'accessories/wearable_items/_exp07/gindan_armor/shoulders_nopauldrons',1096),(14707,14707,'accessories/wearable_items/_exp07/gindan_armor/shoulders_snapons',1096),(14708,14708,'accessories/wearable_items/_exp07/gindan_armor/snapons/gindan_pauldron_right',1096),(14709,14709,'accessories/wearable_items/_exp07/gindan_armor/snapons/gindan_pauldron_left',1096),(14710,14710,'_exp07/zones/exp07_dun_tower_of_frozen_shadow/tofs_bunk_bed_01',1096),(14711,14711,'accessories/wearable_items/_exp08/dragon_armor/vanguard_shadow/shoulders_nopauldrons',1096),(14712,14712,'accessories/wearable_items/_exp08/dragon_armor/snapons/dragon_armor_leather-chain_pauldron_effects_right_shadow',1096),(14713,14713,'accessories/wearable_items/_exp08/dragon_armor/snapons/dragon_armor_leather-chain_pauldron_effects_left_green',1096),(14714,14714,'_exp07/zones/exp07_dun_tower_of_frozen_shadow/tofs_bedside_table_small',1096),(14715,14715,'accessories/wearable_items/_exp08/dragon_armor/snapons/dragon_armor_leather-chain_pauldron_effects_left_ivory',1096),(14716,14716,'accessories/wearable_items/_exp08/dragon_armor/snapons/dragon_armor_leather-chain_pauldron_effects_left_red',1096),(14717,14717,'accessories/wearable_items/_exp08/dragon_armor/snapons/dragon_armor_leather-chain_pauldron_effects_left_shadow',1096),(14718,14718,'accessories/wearable_items/_exp08/dragon_armor/snapons/dragon_armor_leather-chain_pauldron_effects_right_green',1096),(14719,14719,'accessories/wearable_items/_exp08/dragon_armor/snapons/dragon_armor_leather-chain_pauldron_effects_right_ivory',1096),(14720,14720,'_exp07/zones/exp07_dun_tower_of_frozen_shadow/tofs_plain_chest',1096),(14721,14721,'_exp07/zones/exp07_dun_tower_of_frozen_shadow/tofs_cake_decayed',1096),(14722,14722,'accessories/wearable_items/_exp08/dragon_armor/snapons/dragon_armor_leather-chain_pauldron_effects_right_red',1096),(14723,14723,'_exp07/zones/exp07_dun_tower_of_frozen_shadow/tofs_fear_orb',1096),(14724,14724,'accessories/wieldable_items/weapons/exp08/staff/exp08_staff_sullon_zek_dual',1096),(14725,14725,'_exp07/zones/exp07_dun_tower_of_frozen_shadow/tofs_pedestal',1096),(14726,14726,'accessories/wieldable_items/weapons/exp08/staff/exp08_staff_sullon_zek',1096),(14727,14727,'_exp07/zones/exp07_dun_tower_of_frozen_shadow/tofs_large_floorrug',1096),(14728,14728,'staticobjects/liveevent/frostfell/dpo_bauble_string_lights_purple_ceiling',1096),(14729,14729,'staticobjects/liveevent/frostfell/dpo_bauble_bell_string_lights_blue_ceiling',1096),(14730,14730,'_exp07/zones/exp07_dun_tower_of_frozen_shadow/tofs_table',1096),(14731,14731,'staticobjects/liveevent/frostfell/dpo_bauble_bell_string_lights_gold_ceiling',1096),(14732,14732,'staticobjects/liveevent/frostfell/dpo_bauble_bell_string_lights_red_ceiling',1096),(14733,14733,'accessories/wearable_items/_exp07/chain_vindicator/skirt',1096),(14734,14734,'accessories/wearable_items/_exp07/chain_vindicator/chest',1096),(14735,14735,'accessories/wearable_items/_exp07/chain_vindicator/epic_pauldron_left',1096),(14736,14736,'accessories/wearable_items/_exp07/chain_vindicator/epic_pauldron_right',1096),(14737,14737,'accessories/wearable_items/_exp07/chain_vindicator/feet',1096),(14738,14738,'accessories/wearable_items/_exp07/chain_vindicator/forearms',1096),(14739,14739,'accessories/wearable_items/_exp07/chain_vindicator/hands',1096),(14740,14740,'accessories/wearable_items/_exp07/chain_vindicator/head',1096),(14741,14741,'accessories/wearable_items/_exp07/chain_vindicator/legs',1096),(14742,14742,'accessories/wearable_items/_exp07/chain_vindicator/legs_noskirt',1096),(14743,14743,'accessories/wearable_items/_exp07/chain_vindicator/pauldron_left',1096),(14744,14744,'accessories/wearable_items/_exp07/chain_vindicator/pauldron_right',1096),(14745,14745,'accessories/wearable_items/_exp07/chain_vindicator/shoulders',1096),(14746,14746,'accessories/wearable_items/_exp07/chain_vindicator/shoulders_nopauldrons',1096),(14747,14747,'accessories/wearable_items/_exp07/plate_vindicator/shoulders',1096),(14748,14748,'accessories/wearable_items/_exp07/plate_vindicator/chest',1096),(14749,14749,'accessories/wearable_items/_exp07/plate_vindicator/epic_pauldron_left',1096),(14750,14750,'accessories/wearable_items/_exp07/plate_vindicator/epic_pauldron_right',1096),(14751,14751,'accessories/wearable_items/_exp07/plate_vindicator/feet',1096),(14752,14752,'accessories/wearable_items/_exp07/plate_vindicator/forearms',1096),(14753,14753,'accessories/wearable_items/_exp07/plate_vindicator/hands',1096),(14754,14754,'accessories/wearable_items/_exp07/plate_vindicator/head',1096),(14755,14755,'accessories/wearable_items/_exp07/plate_vindicator/legs',1096),(14756,14756,'_exp07/characters/tool_users/rallos_statue/rallos_statue',1096),(14757,14757,'_exp07/characters/tool_users/storm_giants/storm_giant_heavy_05',1096),(14758,14758,'_exp07/characters/tool_users/storm_giants/storm_giant_heavy_04',1096),(14759,14759,'creatures/mounts/godly_cloud',1096),(14760,14760,'creatures/mounts/plague_cloud',1096),(14761,14761,'staticobjects/liveevent/community/dpo_reward_chalice',1096),(14762,14762,'_exp07/characters/monsters/snow_rhino/snow_rhino',1096),(14763,14763,'_exp07/characters/monsters/wurm/wurm_white',1096),(14764,14764,'_exp07/characters/monsters/wurm/wurm_green',1096),(14765,14765,'_exp07/characters/monsters/wurm/wurm_orange',1096),(14766,14766,'_exp07/characters/monsters/wurm/wurm_rock',1096),(14767,14767,'creatures/mounts/griffin_mount/griffin_mount_evil',1096),(14768,14768,'creatures/mounts/griffin_mount/griffin_mount_crow',1096),(14769,14769,'_exp07/zones/exp07_dun_tower_of_frozen_shadow/tofs_floating_book_animated',1096),(14770,14770,'_exp07/zones/exp07_dun_velks_forgotten_pools/egg_01',1096),(14771,14771,'staticobjects/_exp07/exp07_dun_velks_forgotten_pools/egg_01',1096),(14772,14772,'_exp07/zones/exp07_dun_velks_forgotten_pools/nest_01',1096),(14773,14773,'staticobjects/_exp07/exp07_dun_velks_forgotten_pools/nest_01',1096),(14774,14774,'_exp07/zones/exp07_dun_kraytocs_fortress/barrel_01',1096),(14775,14775,'_exp07/zones/exp07_dun_kraytocs_fortress/crate_02',1096),(14776,14776,'accessories/wieldable_items/weapons/exp07/bow/exp07_obsidian_warbow',1096),(14777,14777,'_exp07/characters/tool_users/vallon_zek/vallon_zek',1096),(14778,14778,'accessories/wearable_items/cloak/exp07/cloak_vallon_zek',1096),(14779,14779,'accessories/wieldable_items/weapons/exp07/1h_sword/exp07_1h_sword_obsidian_war_scimitar',1096),(14780,14780,'staticobjects/crates/floor_crate_sebilis_closed02',1096),(14781,14781,'staticobjects/_exp07/exp07_rgn_great_divide/simple_sewing_loom',1096),(14782,14782,'_exp07/characters/tool_users/golem_blue/golem_blue',1096),(14783,14783,'accessories/wieldable_items/weapons/exp07/1h_crush/1h_flail_flame',1096),(14784,14784,'accessories/wieldable_items/weapons/exp07/1h_crush/1h_flail_cinder',1096),(14785,14785,'accessories/wieldable_items/weapons/exp07/1h_pierce/exp07_1hp_dagger_cinder',1096),(14786,14786,'accessories/wieldable_items/weapons/exp07/1h_pierce/exp07_1hp_dagger_flame',1096),(14787,14787,'accessories/wieldable_items/weapons/exp07/1h_sword/exp07_1hs_sword_flame',1096),(14788,14788,'accessories/wieldable_items/weapons/exp07/1h_sword/exp07_1h_axe_cinder',1096),(14789,14789,'accessories/wieldable_items/weapons/exp07/1h_sword/exp07_1h_axe_flame',1096),(14790,14790,'accessories/wieldable_items/weapons/exp07/1h_sword/exp07_1hs_sword_cinder',1096),(14791,14791,'staticobjects/_exp07/exp07_rgn_great_divide/othmir_fish_trap',1096),(14792,14792,'staticobjects/_exp07/exp07_rgn_great_divide/trapped_crab',1096),(14793,14793,'ec/pc/vampire/vampire_female',1096),(14794,14794,'accessories/wearable_items/cloak/exp07/cloak_phoenix',1096),(14795,14795,'accessories/wearable_items/cloak/exp07/cloak_redmoon_water',1096),(14796,14796,'accessories/wearable_items/cloak/exp07/cloak_stained_glass_tree',1096),(14797,14797,'accessories/wearable_items/cloak/exp07/cloak_stained_glass_tree_autumn',1096),(14798,14798,'accessories/wearable_items/cloak/exp07/cloak_wolf_moon',1096),(14799,14799,'accessories/wearable_items/cloak/exp07/cloak_compass_dark',1096),(14800,14800,'accessories/wearable_items/cloak/exp07/cloak_compass_light',1096),(14801,14801,'accessories/wearable_items/cloak/exp07/cloak_moon_water',1096),(14802,14802,'accessories/wearable_items/_exp07/rallos_zek_armor/rallos_zek_armor_magus/skirt',1096),(14803,14803,'accessories/wearable_items/_exp07/rallos_zek_armor/rallos_zek_armor_magus/arms',1096),(14804,14804,'accessories/wearable_items/_exp07/rallos_zek_armor/rallos_zek_armor_magus/chest',1096),(14805,14805,'accessories/wearable_items/_exp07/rallos_zek_armor/rallos_zek_armor_magus/head',1096),(14806,14806,'accessories/wearable_items/_exp07/rallos_zek_armor/rallos_zek_armor_magus/legs',1096),(14807,14807,'staticobjects/liveevent/frostfell/dpo_bauble_bow_string_lights_gold_wall',1096),(14808,14808,'staticobjects/liveevent/frostfell/dpo_bauble_bow_string_lights_red_wall',1096),(14809,14809,'staticobjects/liveevent/frostfell/dpo_bauble_string_lights_blue_ceiling',1096),(14810,14810,'accessories/wearable_items/_exp07/rallos_zek_armor/rallos_zek_armor_magus/rallos_zek_magus_pauldron_left',1096),(14811,14811,'accessories/wearable_items/_exp07/rallos_zek_armor/rallos_zek_armor_magus/rallos_zek_magus_pauldron_right',1096),(14812,14812,'_exp07/characters/tool_users/sullon_zek/sullon_zek',1096),(14813,14813,'accessories/wearable_items/_exp07/mara_cloth/legs',1096),(14814,14814,'accessories/wearable_items/_exp07/mara_cloth/chest',1096),(14815,14815,'accessories/wearable_items/_exp07/mara_cloth2/legs',1096),(14816,14816,'accessories/wearable_items/_exp07/mara_cloth2/chest',1096),(14817,14817,'_exp07/zones/exp07_dun_velks_the_ascent/static_veeshans_shard',1096),(14818,14818,'_exp07/zones/exp07_dun_velks_the_ascent/the_ascent_bridgeroom_icebridge',1096),(14819,14819,'_exp07/zones/exp07_dun_velks_the_ascent/the_ascent_switch',1096),(14820,14820,'_exp07/zones/exp07_dun_velks_the_ascent/the_ascent_switchbase',1096),(14821,14821,'_exp07/characters/tool_users/dain_frostweaver/dain_frostweaver',1096),(14822,14822,'staticobjects/_exp07/exp07_rgn_great_divide/othmir_fishing_boat',1096),(14823,14823,'staticobjects/_exp07/exp07_rgn_great_divide/othmir_basket03',1096),(14824,14824,'staticobjects/_exp07/exp07_rgn_great_divide/othmir_drum',1096),(14825,14825,'staticobjects/_exp07/exp07_rgn_great_divide/othmir_shell01',1096),(14826,14826,'staticobjects/_exp07/exp07_rgn_great_divide/othmir_shell02',1096),(14827,14827,'staticobjects/_exp07/exp07_rgn_great_divide/othmir_shell03',1096),(14828,14828,'staticobjects/_exp07/exp07_rgn_great_divide/othmir_shell04',1096),(14829,14829,'_exp07/characters/tool_users/efreeti_blue/efreeti_blue_ice',1096),(14830,14830,'staticobjects/liveevent/frostfell/dpo_bauble_string_lights_gold_ceiling',1096),(14831,14831,'_exp07/characters/tool_users/djinn_ice/djinn_male_ice',1096),(14832,14832,'accessories/wieldable_items/weapons/exp07/1h_sword/exp07_1h_axe_pure_rage',1096),(14833,14833,'accessories/wieldable_items/weapons/exp07/1h_pierce/exp07_1hp_embalmers_knife',1096),(14834,14834,'staticobjects/_exp07/exp07_rgn_great_divide/othmir_table01',1096),(14835,14835,'staticobjects/_exp07/exp07_rgn_great_divide/othmir_basket04_shells',1096),(14836,14836,'staticobjects/_exp07/exp07_rgn_great_divide/ew_flowers01',1096),(14837,14837,'_exp07/characters/tool_users/dain_frostweaver_jr/dain_jr',1096),(14838,14838,'_exp06/characters/tool_users/snow_orc/snow_orc_optimized_hunter_03',1096),(14839,14839,'_exp06/characters/tool_users/snow_orc/snow_orc_optimized_common_01',1096),(14840,14840,'_exp06/characters/tool_users/snow_orc/snow_orc_optimized_common_02',1096),(14841,14841,'_exp06/characters/tool_users/snow_orc/snow_orc_optimized_common_03',1096),(14842,14842,'_exp06/characters/tool_users/snow_orc/snow_orc_optimized_common_04',1096),(14843,14843,'_exp06/characters/tool_users/snow_orc/snow_orc_optimized_heavy_01',1096),(14844,14844,'_exp06/characters/tool_users/snow_orc/snow_orc_optimized_heavy_02',1096),(14845,14845,'_exp06/characters/tool_users/snow_orc/snow_orc_optimized_heavy_03',1096),(14846,14846,'_exp06/characters/tool_users/snow_orc/snow_orc_optimized_hunter_01',1096),(14847,14847,'_exp06/characters/tool_users/snow_orc/snow_orc_optimized_hunter_02',1096),(14848,14848,'_exp07/zones/exp07_dun_velks_the_ascent/static_veeshans_shard_nofx',1096),(14849,14849,'accessories/wieldable_items/weapons/exp07/1h_sword/exp07_1h_sword_emerald_dawn',1096),(14850,14850,'_exp07/characters/monsters/sea_monster/sea_monster_plushie',1096),(14851,14851,'staticobjects/liveevent/frostfell/dpo_bauble_string_lights_green_ceiling',1096),(14852,14852,'_exp06/characters/tool_users/snow_orc/snow_orc_shaman',1096),(14853,14853,'creatures/pets/wolf_pup/wolf_pup',1096),(14854,14854,'_exp06/characters/tool_users/snow_orc/snow_orc_chief',1096),(14855,14855,'creatures/pets/wolf_pup/wolf_pup_white_boss',1096),(14856,14856,'creatures/pets/wolf_pup/wolf_pup_black',1096),(14857,14857,'creatures/pets/wolf_pup/wolf_pup_white',1096),(14858,14858,'staticobjects/_exp07/dru_ice_totem',1096),(14859,14859,'staticobjects/_exp07/dru_earth_totem',1096),(14860,14860,'staticobjects/_exp07/dru_fire_totem',1096),(14861,14861,'accessories/wieldable_items/weapons/exp07/1h_crush/1h_hammer_inflamed',1096),(14862,14862,'accessories/wieldable_items/weapons/exp07/1h_pierce/exp07_1hp_dagger_inflamed',1096),(14863,14863,'accessories/wieldable_items/weapons/exp07/1h_sword/exp07_1h_sword_inflamed',1096),(14864,14864,'accessories/wieldable_items/weapons/exp07/1h_sword/exp07_1h_axe_inflamed',1096),(14865,14865,'accessories/wieldable_items/weapons/exp07/bow/exp07_bow_inflamed',1096),(14866,14866,'accessories/wieldable_items/weapons/exp07/shield/exp07_shield_inflamed',1096),(14867,14867,'accessories/wieldable_items/weapons/exp07/shield/exp07_buckler_inflamed',1096),(14868,14868,'accessories/wieldable_items/weapons/exp07/staff/exp07_staff_inflamed',1096),(14869,14869,'accessories/npc_wearables/efreeti_blue_turban/efreeti_blue_turban',1096),(14870,14870,'_exp07/characters/tool_users/othmir/othmir_male_nipik',1096),(14871,14871,'_exp07/zones/exp07_dun_tower_of_frozen_shadow/tofs_upsidedown_book_02',1096),(14872,14872,'staticobjects/_exp07/exp07_rgn_great_divide/othmir_basket01_shells',1096),(14873,14873,'staticobjects/_exp07/exp07_rgn_great_divide/othmir_bucket01_fish',1096),(14874,14874,'staticobjects/_exp07/dru_drunder_sullon_elemental_earth',1096),(14875,14875,'staticobjects/_exp07/dru_drunder_sullon_elemental_fire',1096),(14876,14876,'staticobjects/_exp07/dru_drunder_sullon_elemental_ice',1096),(14877,14877,'staticobjects/_exp07/dru_drunder_sullon_idol',1096),(14878,14878,'staticobjects/_exp07/dru_drunder_tallon_idol',1096),(14879,14879,'staticobjects/_exp07/dru_drunder_vallon_idol',1096),(14880,14880,'creatures/monsters/octopus_blue',1096),(14881,14881,'accessories/wearable_items/cloak/exp07/cloak_chained',1096),(14882,14882,'accessories/wieldable_items/weapons/exp07/1h_crush/1h_mace_winters_bite',1096),(14883,14883,'accessories/wieldable_items/weapons/exp07/1h_crush/1h_wand_winters_bite',1096),(14884,14884,'accessories/wieldable_items/weapons/exp07/1h_crush/1h_hammer_winters_bite',1096),(14885,14885,'accessories/wieldable_items/weapons/exp07/1h_pierce/exp07_1hp_dagger_winters_bite',1096),(14886,14886,'accessories/wieldable_items/weapons/exp07/1h_sword/exp07_1hs_sword_winters_bite',1096),(14887,14887,'accessories/wieldable_items/weapons/exp07/2h_crush/exp07_2h_hammer_winters_bite',1096),(14888,14888,'accessories/wieldable_items/weapons/exp07/2h_sword/exp07_2hs_sword_winters_bite',1096),(14889,14889,'accessories/wieldable_items/weapons/exp07/bow/exp07_bow_winters_bite',1096),(14890,14890,'accessories/wieldable_items/weapons/exp07/staff/exp07_staff_winters_bite',1096),(14891,14891,'accessories/wieldable_items/weapons/exp07/shield/exp07_shield_round_winters_bite',1096),(14892,14892,'accessories/wieldable_items/weapons/exp07/shield/exp07_shield_tower_winters_bite',1096),(14893,14893,'staticobjects/_exp07/exp07_rgn_eastern_wastes/vel_orc_barrel_orc01',1096),(14894,14894,'staticobjects/_exp07/exp07_rgn_eastern_wastes/vel_orc_bench01',1096),(14895,14895,'staticobjects/_exp07/exp07_rgn_eastern_wastes/vel_orc_camp_barrels_01',1096),(14896,14896,'staticobjects/_exp07/exp07_rgn_eastern_wastes/vel_orc_camp_barrels_02',1096),(14897,14897,'staticobjects/_exp07/exp07_rgn_eastern_wastes/vel_orc_camp_cooking_fish_01',1096),(14898,14898,'staticobjects/_exp07/exp07_rgn_eastern_wastes/vel_orc_camp_firewood_01',1096),(14899,14899,'staticobjects/_exp07/exp07_rgn_eastern_wastes/vel_orc_camp_fish_stand_01',1096),(14900,14900,'staticobjects/_exp07/exp07_rgn_eastern_wastes/vel_orc_camp_pelt_01',1096),(14901,14901,'staticobjects/_exp07/exp07_rgn_eastern_wastes/vel_orc_camp_seat_01',1096),(14902,14902,'staticobjects/_exp07/exp07_rgn_eastern_wastes/vel_orc_camp_seat_02',1096),(14903,14903,'staticobjects/_exp07/exp07_rgn_eastern_wastes/vel_orc_camp_sign_01',1096),(14904,14904,'staticobjects/_exp07/exp07_rgn_eastern_wastes/vel_orc_camp_spears_01',1096),(14905,14905,'staticobjects/_exp07/exp07_rgn_eastern_wastes/vel_orc_catapult_busted_01',1096),(14906,14906,'staticobjects/_exp07/exp07_rgn_eastern_wastes/vel_orc_chair01',1096),(14907,14907,'staticobjects/_exp07/exp07_rgn_eastern_wastes/vel_orc_chest_metal01',1096),(14908,14908,'staticobjects/_exp07/exp07_rgn_eastern_wastes/vel_orc_chest_metal02',1096),(14909,14909,'staticobjects/_exp07/exp07_rgn_eastern_wastes/vel_orc_chest_shoddy',1096),(14910,14910,'staticobjects/_exp07/exp07_rgn_eastern_wastes/vel_orc_crate_wood',1096),(14911,14911,'staticobjects/_exp07/exp07_rgn_eastern_wastes/vel_orc_crate_wood_long01',1096),(14912,14912,'staticobjects/_exp07/exp07_rgn_eastern_wastes/vel_orc_forge',1096),(14913,14913,'staticobjects/_exp07/exp07_rgn_eastern_wastes/vel_orc_forgetool_poker01',1096),(14914,14914,'staticobjects/_exp07/exp07_rgn_eastern_wastes/vel_orc_harpoon_01',1096),(14915,14915,'staticobjects/_exp07/exp07_rgn_eastern_wastes/vel_orc_harpoon_02',1096),(14916,14916,'staticobjects/_exp07/exp07_rgn_eastern_wastes/vel_orc_harpoon_base_01',1096),(14917,14917,'staticobjects/_exp07/exp07_rgn_eastern_wastes/vel_orc_lantern',1096),(14918,14918,'staticobjects/_exp07/exp07_rgn_eastern_wastes/vel_orc_lantern_post',1096),(14919,14919,'staticobjects/_exp07/exp07_rgn_eastern_wastes/vel_orc_lightsource_firepot01',1096),(14920,14920,'staticobjects/_exp07/exp07_rgn_eastern_wastes/vel_orc_lightsource_firepot_small01',1096),(14921,14921,'staticobjects/_exp07/exp07_rgn_eastern_wastes/vel_orc_lightsource_torch01',1096),(14922,14922,'staticobjects/_exp07/exp07_rgn_eastern_wastes/vel_orc_lightsource_wall_sconce02',1096),(14923,14923,'staticobjects/_exp07/exp07_rgn_eastern_wastes/vel_orc_miningtool_pick01',1096),(14924,14924,'staticobjects/_exp07/exp07_rgn_eastern_wastes/vel_orc_miningtool_shovel01',1096),(14925,14925,'staticobjects/_exp07/exp07_rgn_eastern_wastes/vel_orc_rubblegravelcrystalpile01',1096),(14926,14926,'staticobjects/_exp07/exp07_rgn_eastern_wastes/vel_orc_rubblegravelcrystalpile02',1096),(14927,14927,'staticobjects/_exp07/exp07_rgn_eastern_wastes/vel_orc_rubblegravelpile01',1096),(14928,14928,'staticobjects/_exp07/exp07_rgn_eastern_wastes/vel_orc_rubblegravelpile02',1096),(14929,14929,'staticobjects/_exp07/exp07_rgn_eastern_wastes/vel_orc_rubblegravelpile03',1096),(14930,14930,'staticobjects/_exp07/exp07_rgn_eastern_wastes/vel_orc_stool_orc_wood01',1096),(14931,14931,'staticobjects/_exp07/exp07_rgn_eastern_wastes/vel_orc_throne',1096),(14932,14932,'staticobjects/_exp07/exp07_rgn_eastern_wastes/vel_orc_weapon_rack_floor02',1096),(14933,14933,'staticobjects/_exp07/exp07_rgn_eastern_wastes/vel_orc_weaponsrack_wall02',1096),(14934,14934,'staticobjects/_exp07/exp07_rgn_eastern_wastes/vel_orc_wheelbarrow_orc01',1096),(14935,14935,'accessories/wieldable_items/weapons/exp07/1h_crush/1h_wand_winters_bite_fx',1096),(14936,14936,'accessories/wieldable_items/weapons/exp07/1h_crush/1h_hammer_winters_bite_fx',1096),(14937,14937,'accessories/wieldable_items/weapons/exp07/1h_crush/1h_mace_winters_bite_fx',1096),(14938,14938,'accessories/wieldable_items/weapons/exp07/1h_pierce/exp07_1hp_dagger_winters_bite_fx',1096),(14939,14939,'accessories/wieldable_items/weapons/exp07/1h_sword/exp07_1hs_sword_winters_bite_fx',1096),(14940,14940,'accessories/wieldable_items/weapons/exp07/2h_crush/exp07_2h_hammer_winters_bite_fx',1096),(14941,14941,'accessories/wieldable_items/weapons/exp07/2h_sword/exp07_2hs_sword_winters_bite_fx',1096),(14942,14942,'accessories/wieldable_items/weapons/exp07/bow/exp07_bow_winters_bite_fx',1096),(14943,14943,'accessories/wieldable_items/weapons/exp07/shield/exp07_shield_tower_winters_bite_fx',1096),(14944,14944,'accessories/wieldable_items/weapons/exp07/shield/exp07_shield_round_winters_bite_fx',1096),(14945,14945,'accessories/wieldable_items/weapons/exp07/staff/exp07_staff_winters_bite_fx',1096),(14946,14946,'creatures/mounts/griffin_mount/griffin_mount_server',1096),(14947,14947,'accessories/wearable_items/_exp07/asian_goth_armor/robe/skirt',1096),(14948,14948,'accessories/wearable_items/_exp07/asian_goth_armor/robe/chest',1096),(14949,14949,'accessories/wearable_items/_exp07/asian_goth_armor/robe/feet',1096),(14950,14950,'accessories/wearable_items/_exp07/asian_goth_armor/robe/hands',1096),(14951,14951,'accessories/wearable_items/_exp07/asian_goth_armor/robe/head',1096),(14952,14952,'accessories/wearable_items/_exp07/asian_goth_armor/robe/head_collar',1096),(14953,14953,'accessories/wearable_items/_exp07/asian_goth_armor/robe/pants',1096),(14954,14954,'staticobjects/_exp07/exp07_rgn_great_divide/gnomish_pirates_spirits',1096),(14955,14955,'staticobjects/cages/square_birdcage_dpo',1096),(14956,14956,'staticobjects/cages/round_birdcage_dpo',1096),(14957,14957,'staticobjects/_exp07/exp07_dun_drunder_vallon_tower/dru_drunder03_hourglass_01',1096),(14958,14958,'_exp07/characters/tool_users/diaku_ogres/diaku_ogre_female',1096),(14959,14959,'_exp07/characters/tool_users/diaku_ogres/diaku_ogre_male',1096),(14960,14960,'accessories/wieldable_items/weapons/exp07/1h_crush/1h_crush_nipiks_cane',1096),(14961,14961,'_exp06/characters/tool_users/coldaine/coldaine_houseman',1096),(14962,14962,'accessories/wearable_items/_exp07/rallos_zek_armor/rallos_zek_armor_chain_blue/skirt',1096),(14963,14963,'accessories/wearable_items/_exp07/rallos_zek_armor/rallos_zek_armor_chain_blue/chest',1096),(14964,14964,'accessories/wearable_items/_exp07/rallos_zek_armor/rallos_zek_armor_chain_blue/feet',1096),(14965,14965,'accessories/wearable_items/_exp07/rallos_zek_armor/rallos_zek_armor_chain_blue/forearms',1096),(14966,14966,'accessories/wearable_items/_exp07/rallos_zek_armor/rallos_zek_armor_chain_blue/hands',1096),(14967,14967,'accessories/wearable_items/_exp07/rallos_zek_armor/rallos_zek_armor_chain_blue/head',1096),(14968,14968,'accessories/wearable_items/_exp07/rallos_zek_armor/rallos_zek_armor_chain_blue/legs',1096),(14969,14969,'accessories/wearable_items/_exp07/rallos_zek_armor/rallos_zek_armor_chain_blue/legs_noskirt',1096),(14970,14970,'accessories/wearable_items/_exp07/rallos_zek_armor/rallos_zek_armor_chain_blue/rallos_zek_chain_pauldron_left',1096),(14971,14971,'accessories/wearable_items/_exp07/rallos_zek_armor/rallos_zek_armor_chain_blue/rallos_zek_chain_pauldron_right',1096),(14972,14972,'accessories/wearable_items/_exp07/rallos_zek_armor/rallos_zek_armor_chain_blue/rallos_zek_chain_pauldron_small_left',1096),(14973,14973,'accessories/wearable_items/_exp07/rallos_zek_armor/rallos_zek_armor_chain_blue/rallos_zek_chain_pauldron_small_right',1096),(14974,14974,'accessories/wearable_items/_exp07/rallos_zek_armor/rallos_zek_armor_chain_blue/shoulders_nopauldrons',1096),(14975,14975,'accessories/wearable_items/_exp07/rallos_zek_armor/rallos_zek_armor_chain_blue/shoulders_rallos_zek_epic_pauldrons',1096),(14976,14976,'accessories/wearable_items/_exp07/rallos_zek_armor/rallos_zek_armor_chain_blue/shoulders_rallos_zek_small_pauldrons',1096),(14977,14977,'accessories/wearable_items/profesion_hats/centurion_helm/roman_helm_black/transverse_crest_blue',1096),(14978,14978,'accessories/wearable_items/profesion_hats/centurion_helm/roman_helm_black/head_no_crest',1096),(14979,14979,'accessories/wearable_items/profesion_hats/centurion_helm/roman_helm_black/head_straight_crest',1096),(14980,14980,'accessories/wearable_items/profesion_hats/centurion_helm/roman_helm_black/head_transverse_crest',1096),(14981,14981,'accessories/wearable_items/profesion_hats/centurion_helm/roman_helm_black/straight_crest_blue',1096),(14982,14982,'_exp07/zones/exp07_dun_tower_of_frozen_shadow/tofs_shadow_crystal',1096),(14983,14983,'accessories/wieldable_items/weapons/exp07/1h_crush/1h_scepter_human_skull',1096),(14984,14984,'accessories/wieldable_items/weapons/exp07/1h_sword/exp07_1hs_sword_goth',1096),(14985,14985,'accessories/wieldable_items/weapons/exp07/2h_sword/exp07_2hs_sword_goth',1096),(14986,14986,'staticobjects/_exp07/exp07_rgn_great_divide/opaque_ice_block',1096),(14987,14987,'_exp07/zones/exp07_dun_tower_of_frozen_shadow/tofs_cocoon',1096),(14988,14988,'_exp07/zones/exp07_dun_tower_of_frozen_shadow/tofs_floor7_transport_room_w_door',1096),(14989,14989,'_exp07/zones/exp07_dun_tower_of_frozen_shadow/tofs_floor7_transport_room_wo_door',1096),(14990,14990,'creatures/monsters/hawk_arctic',1096),(14991,14991,'accessories/wearable_items/_exp07/rallos_zek_armor/rallos_zek_armor_leather_blue/skirt',1096),(14992,14992,'accessories/wearable_items/_exp07/rallos_zek_armor/rallos_zek_armor_leather_blue/chest',1096),(14993,14993,'accessories/wearable_items/_exp07/rallos_zek_armor/rallos_zek_armor_leather_blue/feet',1096),(14994,14994,'accessories/wearable_items/_exp07/rallos_zek_armor/rallos_zek_armor_leather_blue/forearms',1096),(14995,14995,'accessories/wearable_items/_exp07/rallos_zek_armor/rallos_zek_armor_leather_blue/hands',1096),(14996,14996,'accessories/wearable_items/_exp07/rallos_zek_armor/rallos_zek_armor_leather_blue/head',1096),(14997,14997,'accessories/wearable_items/_exp07/rallos_zek_armor/rallos_zek_armor_leather_blue/legs',1096),(14998,14998,'accessories/wearable_items/_exp07/rallos_zek_armor/rallos_zek_armor_leather_blue/legs_noskirt',1096),(14999,14999,'accessories/wearable_items/_exp07/rallos_zek_armor/rallos_zek_armor_leather_blue/shoulders_nopauldrons',1096),(15000,15000,'accessories/wearable_items/_exp07/rallos_zek_armor/rallos_zek_armor_leather_blue/shoulders_rallos_zek_epic_pauldrons',1096),(15001,15001,'accessories/wearable_items/_exp07/rallos_zek_armor/rallos_zek_armor_leather_blue/shoulders_rallos_zek_small_pauldrons',1096),(15002,15002,'staticobjects/_exp07/exp07_rgn_eastern_wastes/gd_nest01',1096),(15003,15003,'staticobjects/_exp07/exp07_rgn_eastern_wastes/gd_nest01_full01',1096),(15004,15004,'staticobjects/_exp07/exp07_rgn_eastern_wastes/gd_nest01_full02',1096),(15005,15005,'staticobjects/_exp07/exp07_rgn_eastern_wastes/vel_barricade_mobile01',1096),(15006,15006,'staticobjects/_exp07/exp07_rgn_eastern_wastes/vel_cannon_thurgadin01',1096),(15007,15007,'staticobjects/_exp07/exp07_rgn_eastern_wastes/vel_cart_nomad01',1096),(15008,15008,'staticobjects/_exp07/exp07_rgn_eastern_wastes/vel_coldain_barricade01_big',1096),(15009,15009,'staticobjects/_exp07/exp07_rgn_eastern_wastes/vel_coldain_barricade02_small',1096),(15010,15010,'staticobjects/_exp07/exp07_rgn_eastern_wastes/vel_coldain_bench01',1096),(15011,15011,'staticobjects/_exp07/exp07_rgn_eastern_wastes/vel_coldain_bench02',1096),(15012,15012,'staticobjects/_exp07/exp07_rgn_eastern_wastes/vel_coldain_tent01',1096),(15013,15013,'staticobjects/_exp07/exp07_rgn_eastern_wastes/vel_coldain_weaponrack01',1096),(15014,15014,'staticobjects/_exp07/exp07_rgn_eastern_wastes/vel_coldain_weaponrack02',1096),(15015,15015,'staticobjects/_exp07/exp07_rgn_eastern_wastes/vel_ice_blocks_ring_war_coldain01_handout01',1096),(15016,15016,'staticobjects/_exp07/exp07_rgn_eastern_wastes/vel_ice_blocks_ring_war_coldain02',1096),(15017,15017,'staticobjects/_exp07/exp07_rgn_eastern_wastes/vel_ice_blocks_ring_war_coldain03',1096),(15018,15018,'staticobjects/_exp07/exp07_rgn_eastern_wastes/vel_ice_blocks_ring_war_coldain04',1096),(15019,15019,'staticobjects/_exp07/exp07_rgn_eastern_wastes/vel_ice_blocks_ring_war_combo01',1096),(15020,15020,'staticobjects/_exp07/exp07_rgn_eastern_wastes/vel_ice_blocks_ring_war_combo02_big01',1096),(15021,15021,'staticobjects/_exp07/exp07_rgn_eastern_wastes/vel_ice_blocks_ring_war_empty01',1096),(15022,15022,'staticobjects/_exp07/exp07_rgn_eastern_wastes/vel_ice_blocks_ring_war_giant01',1096),(15023,15023,'staticobjects/_exp07/exp07_rgn_eastern_wastes/vel_rime_crate01_frost',1096),(15024,15024,'staticobjects/_exp07/exp07_rgn_eastern_wastes/vel_rime_crate01_short_frost',1096),(15025,15025,'staticobjects/_exp07/exp07_rgn_eastern_wastes/vel_rime_tapestry01',1096),(15026,15026,'staticobjects/_exp07/exp07_rgn_eastern_wastes/vel_rime_temts_large01',1096),(15027,15027,'staticobjects/_exp07/exp07_rgn_eastern_wastes/vel_rime_temts_leanto01',1096),(15028,15028,'staticobjects/_exp07/exp07_rgn_eastern_wastes/vel_tent_crude01',1096),(15029,15029,'staticobjects/_exp07/exp07_rgn_eastern_wastes/vel_tizmak_items01_barrel01',1096),(15030,15030,'staticobjects/_exp07/exp07_rgn_eastern_wastes/vel_tizmak_items01_bed01',1096),(15031,15031,'staticobjects/_exp07/exp07_rgn_eastern_wastes/vel_tizmak_items01_bench01',1096),(15032,15032,'staticobjects/_exp07/exp07_rgn_eastern_wastes/vel_tizmak_items01_brazier01',1096),(15033,15033,'staticobjects/_exp07/exp07_rgn_eastern_wastes/vel_tizmak_items01_chair01',1096),(15034,15034,'staticobjects/_exp07/exp07_rgn_eastern_wastes/vel_tizmak_items01_drum01',1096),(15035,15035,'staticobjects/_exp07/exp07_rgn_eastern_wastes/vel_tizmak_items01_light01',1096),(15036,15036,'staticobjects/_exp07/exp07_rgn_eastern_wastes/vel_tizmak_items01_marker01',1096),(15037,15037,'staticobjects/_exp07/exp07_rgn_eastern_wastes/vel_tizmak_items01_marker02',1096),(15038,15038,'staticobjects/_exp07/exp07_rgn_eastern_wastes/vel_tizmak_items01_partition01',1096),(15039,15039,'staticobjects/_exp07/exp07_rgn_eastern_wastes/vel_tizmak_items01_table01',1096),(15040,15040,'staticobjects/_exp07/exp07_rgn_eastern_wastes/vel_tizmak_items01_walllight01',1096),(15041,15041,'staticobjects/_exp07/exp07_rgn_eastern_wastes/vel_tool_forge_anvil',1096),(15042,15042,'staticobjects/_exp07/exp07_rgn_eastern_wastes/vel_tool_forge_pliers',1096),(15043,15043,'creatures/tu/tentacleterror_diseased',1096),(15044,15044,'accessories/wearable_items/_exp07/kraytok/masked_hood/head',1096),(15045,15045,'accessories/wearable_items/_exp07/rallos_zek_armor/rallos_zek_armor_vanguard_blue/skirt',1096),(15046,15046,'accessories/wearable_items/_exp07/rallos_zek_armor/rallos_zek_armor_vanguard_blue/chest',1096),(15047,15047,'accessories/wearable_items/_exp07/rallos_zek_armor/rallos_zek_armor_vanguard_blue/feet',1096),(15048,15048,'accessories/wearable_items/_exp07/rallos_zek_armor/rallos_zek_armor_vanguard_blue/forearms',1096),(15049,15049,'accessories/wearable_items/_exp07/rallos_zek_armor/rallos_zek_armor_vanguard_blue/hands',1096),(15050,15050,'accessories/wearable_items/_exp07/rallos_zek_armor/rallos_zek_armor_vanguard_blue/head',1096),(15051,15051,'accessories/wearable_items/_exp07/rallos_zek_armor/rallos_zek_armor_vanguard_blue/legs',1096),(15052,15052,'accessories/wearable_items/_exp07/rallos_zek_armor/rallos_zek_armor_vanguard_blue/legs_noskirt',1096),(15053,15053,'accessories/wearable_items/_exp07/rallos_zek_armor/rallos_zek_armor_vanguard_blue/rallos_zek_vanguard_belt_plate',1096),(15054,15054,'accessories/wearable_items/_exp07/rallos_zek_armor/rallos_zek_armor_vanguard_blue/rallos_zek_vanguard_pauldron_epic_left',1096),(15055,15055,'accessories/wearable_items/_exp07/rallos_zek_armor/rallos_zek_armor_vanguard_blue/rallos_zek_vanguard_pauldron_epic_right',1096),(15056,15056,'accessories/wearable_items/_exp07/rallos_zek_armor/rallos_zek_armor_vanguard_blue/rallos_zek_vanguard_pauldron_small_left',1096),(15057,15057,'accessories/wearable_items/_exp07/rallos_zek_armor/rallos_zek_armor_vanguard_blue/rallos_zek_vanguard_pauldron_small_right',1096),(15058,15058,'accessories/wearable_items/_exp07/rallos_zek_armor/rallos_zek_armor_vanguard_blue/right',1096),(15059,15059,'accessories/wearable_items/_exp07/rallos_zek_armor/rallos_zek_armor_vanguard_blue/shoulders',1096),(15060,15060,'accessories/wearable_items/_exp07/rallos_zek_armor/rallos_zek_armor_vanguard_blue/shoulders_nopauldrons',1096),(15061,15061,'accessories/wearable_items/_exp07/rallos_zek_armor/rallos_zek_armor_vanguard_blue/shoulders_rallos_zek_epic_pauldrons',1096),(15062,15062,'accessories/wearable_items/_exp07/rallos_zek_armor/rallos_zek_armor_vanguard_blue/shoulders_rallos_zek_small_pauldrons',1096),(15063,15063,'_exp07/zones/exp07_dun_tower_of_frozen_shadow/tofs_tserrina_brooch',1096),(15064,15064,'staticobjects/_exp07/exp07_rgn_great_divide/thurgadin_crate_group_01',1096),(15065,15065,'staticobjects/_exp07/exp07_rgn_great_divide/thurgadin_crate_group_02',1096),(15066,15066,'staticobjects/_exp07/exp07_rgn_great_divide/othmir_bones_wall_01',1096),(15067,15067,'_exp07/zones/exp07_rgn_great_divide/daggerflow_snow_pen',1096),(15068,15068,'staticobjects/_exp07/exp07_rgn_great_divide/othmir_barricade01_net',1096),(15069,15069,'accessories/wearable_items/cloak/exp07/cloak_waterfall',1096),(15070,15070,'accessories/wearable_items/cloak/exp07/cloak_belts',1096),(15071,15071,'accessories/wearable_items/cloak/exp07/cloak_belts_diamond',1096),(15072,15072,'accessories/wearable_items/cloak/exp07/cloak_metal_plate',1096),(15073,15073,'accessories/wearable_items/cloak/exp07/cloak_metal_plate_pristine',1096),(15074,15074,'accessories/wearable_items/cloak/exp07/cloak_metal_plate_pristine_inset',1096),(15075,15075,'accessories/wearable_items/cloak/exp07/cloak_metal_scale',1096),(15076,15076,'accessories/wearable_items/cloak/exp07/cloak_metal_scale_diamond',1096),(15077,15077,'accessories/wearable_items/cloak/exp07/cloak_quilted',1096),(15078,15078,'accessories/wearable_items/cloak/exp07/cloak_quilted_blue',1096),(15079,15079,'accessories/wearable_items/cloak/exp07/cloak_quilted_red',1096),(15080,15080,'staticobjects/_exp07/exp07_rgn_great_divide/othmir_barricade02_net',1096),(15081,15081,'staticobjects/_exp07/exp07_rgn_great_divide/othmir_figh01',1096),(15082,15082,'accessories/wearable_items/_exp07/rallos_zek_armor/rallos_zek_armor_robe_blue/skirt',1096),(15083,15083,'accessories/wearable_items/_exp07/rallos_zek_armor/rallos_zek_armor_robe_blue/chest',1096),(15084,15084,'accessories/wearable_items/_exp07/rallos_zek_armor/rallos_zek_armor_robe_blue/feet',1096),(15085,15085,'accessories/wearable_items/_exp07/rallos_zek_armor/rallos_zek_armor_robe_blue/hands',1096),(15086,15086,'accessories/wearable_items/_exp07/rallos_zek_armor/rallos_zek_armor_robe_blue/head',1096),(15087,15087,'accessories/wearable_items/_exp07/rallos_zek_armor/rallos_zek_armor_robe_blue/pants',1096),(15088,15088,'accessories/wearable_items/_exp07/rallos_zek_armor/rallos_zek_armor_robe_blue/rallos_zek_robe_belt_plate',1096),(15089,15089,'staticobjects/_exp07/exp07_rgn_great_divide/othmir_barricade01',1096),(15090,15090,'staticobjects/_exp07/exp07_rgn_great_divide/othmir_barricade02',1096),(15091,15091,'staticobjects/promo_items/winter_2010_velious_painting',1096),(15092,15092,'creatures/monsters/badger_cream',1096),(15093,15093,'creatures/monsters/hawk_arctic_white',1096),(15094,15094,'accessories/wearable_items/_exp07/rallos_zek_armor/rallos_zek_armor_magus_blue/skirt',1096),(15095,15095,'accessories/wearable_items/_exp07/rallos_zek_armor/rallos_zek_armor_magus_blue/arms',1096),(15096,15096,'accessories/wearable_items/_exp07/rallos_zek_armor/rallos_zek_armor_magus_blue/chest',1096),(15097,15097,'accessories/wearable_items/_exp07/rallos_zek_armor/rallos_zek_armor_magus_blue/chest_no_pauldrons',1096),(15098,15098,'accessories/wearable_items/_exp07/rallos_zek_armor/rallos_zek_armor_magus_blue/head',1096),(15099,15099,'accessories/wearable_items/_exp07/rallos_zek_armor/rallos_zek_armor_magus_blue/legs',1096),(15100,15100,'accessories/wearable_items/_exp07/rallos_zek_armor/rallos_zek_armor_magus_blue/rallos_zek_magus_pauldron_left',1096),(15101,15101,'accessories/wearable_items/_exp07/rallos_zek_armor/rallos_zek_armor_magus_blue/rallos_zek_magus_pauldron_right',1096),(15102,15102,'_exp07/characters/monsters/lord_yelinak/lord_yelinak',1096),(15103,15103,'staticobjects/_exp07/exp07_rgn_great_divide/dpo_crusted_ice_shield',1096),(15104,15104,'staticobjects/_exp07/exp07_rgn_great_divide/dpo_exp07_cleaver_aged',1096),(15105,15105,'staticobjects/_exp07/exp07_rgn_great_divide/dpo_exp07_cleaver_battle',1096),(15106,15106,'staticobjects/_exp07/exp07_rgn_great_divide/upside_down_hrvst_coral_group001',1096),(15107,15107,'staticobjects/_exp07/exp07_rgn_great_divide/upside_down_hrvst_coral_group002',1096),(15108,15108,'staticobjects/_exp07/exp07_rgn_great_divide/upside_down_jw_sporepod01',1096),(15109,15109,'_exp07/zones/exp07_dun_tower_of_frozen_shadow/tofs_ice_large_col_01',1096),(15110,15110,'_exp07/zones/exp07_dun_tower_of_frozen_shadow/tofs_ice_large_col_02',1096),(15111,15111,'staticobjects/_exp07/exp07_rgn_great_divide/gnomish_pirate_distillery',1096),(15112,15112,'staticobjects/_exp07/exp07_rgn_great_divide/coldain_icy_chalice',1096),(15113,15113,'staticobjects/_exp07/exp07_rgn_great_divide/coldain_kitchen_utensilholder',1096),(15114,15114,'staticobjects/_exp07/exp07_rgn_great_divide/coldain_saucepan',1096),(15115,15115,'accessories/hair/hair031',1096),(15116,15116,'accessories/hair/hair027',1096),(15117,15117,'accessories/hair/hair028',1096),(15118,15118,'accessories/hair/hair029',1096),(15119,15119,'accessories/hair/hair030',1096),(15120,15120,'staticobjects/_exp07/exp07_rgn_great_divide/dpo_tizmak_gems',1096),(15121,15121,'staticobjects/_exp07/exp07_rgn_thurgadin/crate_group_01',1096),(15122,15122,'staticobjects/_exp07/exp07_rgn_thurgadin/crate_group_02',1096),(15123,15123,'staticobjects/_exp07/exp07_rgn_thurgadin/crate_single_01',1096),(15124,15124,'staticobjects/_exp07/exp07_rgn_thurgadin/thur_blue_lamp_01',1096),(15125,15125,'staticobjects/_exp07/exp07_rgn_thurgadin/thur_chair_01',1096),(15126,15126,'staticobjects/_exp07/exp07_rgn_thurgadin/thur_chair_02',1096),(15127,15127,'staticobjects/_exp07/exp07_rgn_thurgadin/thur_chair_03',1096),(15128,15128,'staticobjects/_exp07/exp07_rgn_thurgadin/thur_table_01',1096),(15129,15129,'staticobjects/_exp07/exp07_rgn_thurgadin/thur_table_02',1096),(15130,15130,'staticobjects/_exp07/exp07_rgn_thurgadin/thur_table_03',1096),(15131,15131,'staticobjects/_exp07/exp07_rgn_thurgadin/thur_table_04',1096),(15132,15132,'staticobjects/_exp07/exp07_rgn_thurgadin/torch_single_01',1096),(15133,15133,'staticobjects/_exp07/exp07_rgn_thurgadin/torch_single_blue_fire_01',1096),(15134,15134,'ec/pc/vampire/vampire_male',1096),(15135,15135,'accessories/hair/hair036',1096),(15136,15136,'staticobjects/_exp07/exp07_rgn_eastern_wastes/turned_ettin_assault_axe001_ornate',1096),(15137,15137,'staticobjects/_exp07/exp07_rgn_eastern_wastes/vel_kael_crate',1096),(15138,15138,'staticobjects/_exp07/exp07_rgn_eastern_wastes/vel_kael_crate_broken',1096),(15139,15139,'staticobjects/_exp07/exp07_rgn_eastern_wastes/vel_kael_barrel',1096),(15140,15140,'staticobjects/_exp07/exp07_rgn_eastern_wastes/vel_kael_barrel_broken',1096),(15141,15141,'staticobjects/_exp07/exp07_rgn_great_divide/gnomish_pirates_spirits',1096),(15142,15142,'staticobjects/_exp07/exp07_rgn_great_divide/gnoll_dreamcatcher',1096),(15143,15143,'accessories/wearable_items/_exp07/station_cash_armor/erudite_gi/cloak_heritage_erudite',1096),(15144,15144,'ec/pc/vampire/vampire_female_evil_illusion',1096),(15145,15145,'staticobjects/_exp07/exp07_rgn_great_divide/goahmari_pillow',1096),(15146,15146,'_exp07/characters/tool_users/tserrina/tserrina_test',1096),(15147,15147,'ec/pc/vampire/vampire_male_evil_illusion',1096),(15148,15148,'accessories/wearable_items/_exp07/station_cash_armor/erudite_gi/legs',1096),(15149,15149,'accessories/wearable_items/cloak/exp07/cloak_shadows',1096),(15150,15150,'accessories/wearable_items/_exp07/station_cash_armor/erudite_gi/snapon/erudite_forearm_left',1096),(15151,15151,'accessories/wearable_items/cloak/exp07/cloak_cara',1096),(15152,15152,'_exp07/characters/monsters/vyskudra/vyskudra',1096),(15153,15153,'accessories/wearable_items/_exp07/station_cash_armor/erudite_gi/snapon/foot_right',1096),(15154,15154,'accessories/wearable_items/cloak/exp07/cloak_gothic2_scalloped',1096),(15155,15155,'accessories/wearable_items/cloak/exp07/cloak_gothic3_inset',1096),(15156,15156,'accessories/wearable_items/cloak/exp07/cloak_cara_scalloped',1096),(15157,15157,'accessories/wearable_items/_exp07/station_cash_armor/erudite_gi/snapon/foot_left',1096),(15158,15158,'accessories/wearable_items/_exp07/station_cash_armor/erudite_gi/head',1096),(15159,15159,'accessories/wearable_items/_exp07/station_cash_armor/erudite_gi/chest',1096),(15160,15160,'accessories/wearable_items/cloak/exp07/cloak_gothic1_diamond',1096),(15161,15161,'accessories/wearable_items/cloak/exp07/cloak_tserrina_diamond',1096),(15162,15162,'accessories/wearable_items/cloak/exp07/cloak_tserrina',1096),(15163,15163,'_exp07/characters/tool_users/othmir/othmir_female_papoose_01',1096),(15164,15164,'accessories/wearable_items/_exp07/station_cash_armor/erudite_gi/snapon/erudite_forearm_right',1096),(15165,15165,'accessories/wearable_items/_exp07/station_cash_armor/erudite_gi/shoulders',1096),(15166,15166,'accessories/wearable_items/cloak/exp07/cloak_gothic1',1096),(15167,15167,'staticobjects/books/halas_coldain_books_04',1096),(15168,15168,'accessories/wearable_items/_exp07/station_cash_armor/erudite_gi/snapon/erudite_cloak_attachment',1096),(15169,15169,'accessories/wearable_items/cloak/exp07/cloak_shadows_scalloped',1096),(15170,15170,'accessories/wearable_items/_exp07/station_cash_armor/erudite_gi/feet',1096),(15171,15171,'_exp05/monsters/ice_dervish_no_shake',1096),(15172,15172,'staticobjects/_exp07/exp07_rgn_great_divide/dpo_coldain_prayer_shawl_tradeskill',1096),(15173,15173,'staticobjects/chests/chest_animated_ornate_silvergold_flipped',1096),(15174,15174,'_exp06/characters/monsters/frostfell_cube/frostfell_cube_bones',1096),(15175,15175,'_exp07/zones/exp07_dun_kael_drakkel/kd_alter',1096),(15176,15176,'_exp07/zones/exp07_dun_kael_drakkel/kd_chair',1096),(15177,15177,'_exp07/zones/exp07_dun_kael_drakkel/kd_chair_grand',1096),(15178,15178,'_exp07/zones/exp07_dun_kael_drakkel/kd_chest',1096),(15179,15179,'_exp07/zones/exp07_dun_kael_drakkel/kd_crate',1096),(15180,15180,'_exp07/zones/exp07_dun_kael_drakkel/kd_crate_broken',1096),(15181,15181,'_exp07/zones/exp07_dun_kael_drakkel/kd_dragonbone',1096),(15182,15182,'_exp07/zones/exp07_dun_kael_drakkel/kd_dragonbone_ancient',1096),(15183,15183,'_exp07/zones/exp07_dun_kael_drakkel/kd_forge_orc',1096),(15184,15184,'_exp07/zones/exp07_dun_kael_drakkel/kd_mug',1096),(15185,15185,'_exp07/zones/exp07_dun_kael_drakkel/kd_podium',1096),(15186,15186,'_exp07/zones/exp07_dun_kael_drakkel/kd_statue_platform',1096),(15187,15187,'_exp07/zones/exp07_dun_kael_drakkel/kd_statue_zek_crch',1096),(15188,15188,'_exp07/zones/exp07_dun_kael_drakkel/kd_statue_zek_half',1096),(15189,15189,'_exp07/zones/exp07_dun_kael_drakkel/kd_statue_zek_stand',1096),(15190,15190,'_exp07/zones/exp07_dun_kael_drakkel/kd_table_lrg',1096),(15191,15191,'_exp07/zones/exp07_dun_kael_drakkel/kd_table_sml',1096),(15192,15192,'_exp07/zones/exp07_dun_kael_drakkel/kd_teleporter',1096),(15193,15193,'_exp07/zones/exp07_dun_kael_drakkel/kd_throne',1096),(15194,15194,'_exp07/zones/exp07_dun_kael_drakkel/kd_weapons_rack',1096),(15195,15195,'_exp07/zones/exp07_dun_kael_drakkel/kd_bookcase',1096),(15196,15196,'_exp07/zones/exp07_dun_kael_drakkel/kd_armor_plate',1096),(15197,15197,'_exp07/zones/exp07_dun_kael_drakkel/kd_ballista',1096),(15198,15198,'_exp07/zones/exp07_dun_kael_drakkel/kd_barrel',1096),(15199,15199,'_exp07/zones/exp07_dun_kael_drakkel/kd_bucket',1096),(15200,15200,'_exp07/zones/exp07_dun_kael_drakkel/kd_sword',1096),(15201,15201,'_exp07/zones/exp07_dun_kael_drakkel/kd_sword2',1096),(15202,15202,'_exp07/zones/exp07_dun_kael_drakkel/kd_polearm',1096),(15203,15203,'_exp07/zones/exp07_dun_kael_drakkel/kd_forge_giant',1096),(15204,15204,'_exp07/zones/exp07_dun_kael_drakkel/kd_statue_tormax_pose',1096),(15205,15205,'_exp07/zones/exp07_dun_kael_drakkel/kd_mapboard',1096),(15206,15206,'_exp07/zones/exp07_dun_kael_drakkel/kd_keg',1096),(15207,15207,'_exp07/zones/exp07_dun_kael_drakkel/kd_fountain_sml',1096),(15208,15208,'_exp07/zones/exp07_dun_kael_drakkel/kd_fountain_lrg',1096),(15209,15209,'_exp07/zones/exp07_dun_kael_drakkel/kd_bed_lrg',1096),(15210,15210,'_exp07/zones/exp07_dun_kael_drakkel/kd_bed_sml',1096),(15211,15211,'_exp07/zones/exp07_dun_kael_drakkel/kd_bar_table',1096),(15212,15212,'_exp07/zones/exp07_dun_kael_drakkel/kd_statue_tormax_point',1096),(15213,15213,'staticobjects/_exp07/exp07_rgn_eastern_wastes/oth_spear_grave_marker',1096),(15214,15214,'accessories/wearable_items/_exp07/kraytok/gi/legs',1096),(15215,15215,'accessories/wieldable_items/weapons/exp07/1h_sword/exp07_1h_shortsword_hoarfrost_frosty',1096),(15216,15216,'accessories/wieldable_items/weapons/exp07/2h_sword/exp07_2hs_sword_hoarfrost',1096),(15217,15217,'accessories/wearable_items/_exp07/royal_velium_armor/royal_velium_armor_robe/feet',1096),(15218,15218,'accessories/wearable_items/_exp07/asian_goth_armor/gi/shoulders',1096),(15219,15219,'accessories/wieldable_items/weapons/exp07/1h_crush/1h_club_hoarfrost',1096),(15220,15220,'accessories/hair/hair033',1096),(15221,15221,'accessories/wearable_items/_exp07/asian_goth_armor/gi/chest',1096),(15222,15222,'_exp07/characters/tool_users/gnoll_snow/gnoll_snow',1096),(15223,15223,'accessories/wearable_items/_exp07/kraytok/gi/feet',1096),(15224,15224,'_exp07/characters/monsters/kd_barrel/kd_barrel',1096),(15225,15225,'staticobjects/_exp07/exp07_rgn_great_divide/coldain_scroll_paper',1096),(15226,15226,'accessories/wearable_items/_exp07/kraytok/gi/chest',1096),(15227,15227,'accessories/wearable_items/_exp07/royal_velium_armor/royal_velium_armor_robe/head',1096),(15228,15228,'accessories/wearable_items/_exp07/royal_velium_armor/royal_velium_armor_robe/chest',1096),(15229,15229,'accessories/hair/hair032',1096),(15230,15230,'accessories/wieldable_items/weapons/exp07/1h_sword/exp07_1h_sword_hoarfrost',1096),(15231,15231,'accessories/wieldable_items/weapons/exp07/2h_sword/exp07_2hs_sword_hoarfrost_frosty',1096),(15232,15232,'accessories/wieldable_items/weapons/exp07/1h_crush/1h_club_hoarfrost_frosty',1096),(15233,15233,'accessories/wieldable_items/weapons/exp07/1h_sword/exp07_1h_shortsword_hoarfrost',1096),(15234,15234,'accessories/wearable_items/_exp07/asian_goth_armor/gi/legs',1096),(15235,15235,'accessories/wieldable_items/weapons/exp07/1h_sword/exp07_1h_fist_hoarfrost_frosty',1096),(15236,15236,'accessories/wieldable_items/weapons/exp07/1h_sword/exp07_1h_sword_hoarfrost_frosty',1096),(15237,15237,'accessories/wieldable_items/weapons/exp07/staff/exp07_staff_hoarfrost',1096),(15238,15238,'_exp07/characters/tool_users/drolvarg_snow_warrior/drolvarg_snow_warrior',1096),(15239,15239,'accessories/wearable_items/_exp07/kraytok/gi/shoulders',1096),(15240,15240,'accessories/wearable_items/_exp07/royal_velium_armor/royal_velium_armor_robe/hands',1096),(15241,15241,'accessories/wearable_items/_exp07/asian_goth_armor/gi/feet',1096),(15242,15242,'accessories/hair/hair035',1096),(15243,15243,'accessories/wieldable_items/weapons/exp07/1h_sword/exp07_1h_fist_hoarfrost',1096),(15244,15244,'accessories/wieldable_items/weapons/exp07/staff/exp07_staff_hoarfrost_frosty',1096),(15245,15245,'accessories/hair/hair034',1096),(15246,15246,'_exp07/zones/exp07_rgn_eastern_wastes/teleport_vision_eastern_wastes',1096),(15247,15247,'_exp07/zones/exp07_rgn_great_divide/teleport_vision_great_divide',1096),(15248,15248,'_exp07/zones/exp07_rgn_great_divide/thurgadin_harbor_wall_elevator',1096),(15249,15249,'staticobjects/_exp07/upside_down_invis_cube',1096),(15250,15250,'staticobjects/_exp07/exp07_rgn_great_divide/othmir_jar_standalone',1096),(15251,15251,'staticobjects/_exp07/exp07_rgn_great_divide/othmir_fish_skeleton',1096),(15252,15252,'staticobjects/_exp07/exp07_rgn_great_divide/gnoll_wood_planks01',1096),(15253,15253,'staticobjects/_exp07/exp07_rgn_great_divide/gnoll_wood_planks02',1096),(15254,15254,'staticobjects/_exp07/exp07_rgn_great_divide/thurgadin_crate_single_01',1096),(15255,15255,'staticobjects/_exp07/exp07_rgn_great_divide/othmir_hanging_fish01',1096),(15256,15256,'staticobjects/_exp07/exp07_rgn_great_divide/othmir_hanging_jar02_pfx',1096),(15257,15257,'staticobjects/_exp07/exp07_rgn_great_divide/othmir_lightsource_hanging01_nosnow_pfx',1096),(15258,15258,'staticobjects/_exp07/exp07_rgn_great_divide/othmir_standing_net01_nosnow',1096),(15259,15259,'staticobjects/liveevent/tinkerfest/dpo_gnomerace_objects_scoreboard01',1096),(15260,15260,'staticobjects/liveevent/tinkerfest/dpo_gnomerace_objects_stands_01',1096),(15261,15261,'staticobjects/liveevent/tinkerfest/dpo_gnomerace_powerup_speed01',1096),(15262,15262,'staticobjects/liveevent/tinkerfest/dpo_gnomerace_powerup_time03_pfx',1096),(15263,15263,'staticobjects/liveevent/tinkerfest/dpo_gnomerace_powerup_twister01',1096),(15264,15264,'staticobjects/liveevent/tinkerfest/dpo_gnomerace_powerup_twister_blaster',1096),(15265,15265,'staticobjects/liveevent/tinkerfest/dpo_gnomerace_ring_greensfx',1096),(15266,15266,'staticobjects/liveevent/tinkerfest/dpo_gnomerace_ring_nosfx',1096),(15267,15267,'staticobjects/liveevent/tinkerfest/dpo_gnomerace_ring_yellowsfx',1096),(15268,15268,'_exp07/objects/kael/kael_lever_switch',1096),(15269,15269,'_exp07/objects/kael/kael_lever_switch_base',1096),(15270,15270,'staticobjects/liveevent/tinkerfest/dpo_gnomerace_ring_finishline',1096),(15271,15271,'staticobjects/liveevent/tinkerfest/dpo_gnomerace_ring_finishline_greengatesfx',1096),(15272,15272,'staticobjects/liveevent/tinkerfest/dpo_gnomerace_ring_finishline_red',1096),(15273,15273,'staticobjects/liveevent/tinkerfest/dpo_gnomerace_ring_greengatesfx',1096),(15274,15274,'staticobjects/liveevent/tinkerfest/dpo_gnomerace_powerup_timer',1096),(15275,15275,'staticobjects/liveevent/tinkerfest/dpo_gnomerace_powerup_timer2',1096),(15276,15276,'staticobjects/liveevent/frostfell/dpo_bauble_streamers_purple_ceiling',1096),(15277,15277,'staticobjects/liveevent/frostfell/dpo_bauble_bell_garland_blue_ceiling',1096),(15278,15278,'staticobjects/liveevent/frostfell/dpo_bauble_bell_garland_gold_ceiling',1096),(15279,15279,'staticobjects/liveevent/frostfell/dpo_bauble_bell_garland_green_ceiling',1096),(15280,15280,'staticobjects/liveevent/frostfell/dpo_bauble_bell_garland_red_ceiling',1096),(15281,15281,'staticobjects/liveevent/frostfell/dpo_bauble_streamers_blue_ceiling',1096),(15282,15282,'staticobjects/liveevent/frostfell/dpo_bauble_streamers_gold_ceiling',1096),(15283,15283,'staticobjects/liveevent/frostfell/dpo_bauble_streamers_green_ceiling',1096),(15284,15284,'accessories/wearable_items/_exp08/dragon_armor/snapons/dragon_armor_pauldrons_skull-shadowiron_lower_right',1096),(15285,15285,'accessories/wearable_items/_exp08/dragon_armor/snapons/dragon_armor_pauldrons_skull-blueiron_lower_left',1096),(15286,15286,'accessories/wearable_items/_exp08/dragon_armor/snapons/dragon_armor_pauldrons_skull-blueiron_lower_right',1096),(15287,15287,'accessories/wearable_items/_exp08/dragon_armor/snapons/dragon_armor_pauldrons_skull-goldivory_lower_left',1096),(15288,15288,'accessories/wearable_items/_exp08/dragon_armor/snapons/dragon_armor_pauldrons_skull-goldivory_lower_right',1096),(15289,15289,'accessories/wearable_items/_exp08/dragon_armor/snapons/dragon_armor_pauldrons_skull-greenbronze_lower_left',1096),(15290,15290,'accessories/wearable_items/_exp08/dragon_armor/snapons/dragon_armor_pauldrons_skull-greenbronze_lower_right',1096),(15291,15291,'accessories/wearable_items/_exp08/dragon_armor/snapons/dragon_armor_pauldrons_skull-redbronze_lower_left',1096),(15292,15292,'accessories/wearable_items/_exp08/dragon_armor/snapons/dragon_armor_pauldrons_skull-redbronze_lower_right',1096),(15293,15293,'accessories/wearable_items/_exp08/dragon_armor/snapons/dragon_armor_pauldrons_skull-shadowiron_lower_left',1096),(15294,15294,'accessories/wieldable_items/weapons/exp08/1h_crush/club_tallonite_red-gold_fx',1096),(15295,15295,'accessories/wieldable_items/weapons/exp08/1h_crush/club_tallonite_bloodstone_fx',1096),(15296,15296,'accessories/wieldable_items/weapons/exp08/1h_crush/club_tallonite_blue-bluemetal_fx',1096),(15297,15297,'accessories/wieldable_items/weapons/exp08/1h_crush/club_tallonite_blue-gold_fx',1096),(15298,15298,'accessories/wieldable_items/weapons/exp08/1h_crush/club_tallonite_obsidian_fx',1096),(15299,15299,'accessories/wieldable_items/weapons/exp08/1h_crush/club_tallonite_red-bluemetal_fx',1096),(15300,15300,'accessories/wieldable_items/weapons/exp08/1h_pierce/exp08_dagger_tallonite_red_fx',1096),(15301,15301,'accessories/wieldable_items/weapons/exp08/1h_pierce/exp08_dagger_obsidian_fx',1096),(15302,15302,'accessories/wieldable_items/weapons/exp08/1h_pierce/exp08_dagger_tallonite_blue_bluemetal_fx',1096),(15303,15303,'accessories/wieldable_items/weapons/exp08/1h_pierce/exp08_dagger_tallonite_blue_fx',1096),(15304,15304,'accessories/wieldable_items/weapons/exp08/1h_pierce/exp08_dagger_tallonite_red_bluemetal_fx',1096),(15305,15305,'accessories/wieldable_items/weapons/exp08/1h_sword/exp08_sword_katana_tallonite_red_fx',1096),(15306,15306,'accessories/wieldable_items/weapons/exp08/1h_sword/exp08_sword_katana_obsidian_fx',1096),(15307,15307,'accessories/wieldable_items/weapons/exp08/1h_sword/exp08_sword_katana_tallonite_blue_bluemetal_fx',1096),(15308,15308,'accessories/wieldable_items/weapons/exp08/1h_sword/exp08_sword_katana_tallonite_blue_fx',1096),(15309,15309,'accessories/wieldable_items/weapons/exp08/1h_sword/exp08_sword_katana_tallonite_red_bluemetal_fx',1096),(15310,15310,'accessories/wieldable_items/weapons/exp08/2h_sword/exp08_2h_sword_tallonite_red-iron_fx',1096),(15311,15311,'accessories/wieldable_items/weapons/exp08/2h_sword/exp08_2h_sword_tallonite_blue-gold_fx',1096),(15312,15312,'accessories/wieldable_items/weapons/exp08/2h_sword/exp08_2h_sword_tallonite_blue-iron_fx',1096),(15313,15313,'accessories/wieldable_items/weapons/exp08/2h_sword/exp08_2h_sword_tallonite_gem_obsidian_fx',1096),(15314,15314,'accessories/wieldable_items/weapons/exp08/2h_sword/exp08_2h_sword_tallonite_red-gold_fx',1096),(15315,15315,'creatures/monsters/gnomerace_twister_blaster_snow',1096),(15316,15316,'creatures/monsters/gnomerace_twister_blaster_bixie',1096),(15317,15317,'creatures/monsters/gnomerace_twister_blaster_insects',1096),(15318,15318,'creatures/monsters/gnomerace_twister_blaster_skulls',1096),(15319,15319,'staticobjects/_exp07/drunder/dru_weapon_rack01',1096),(15320,15320,'staticobjects/_exp07/drunder/dpo_rygorr_painting01',1096),(15321,15321,'staticobjects/_exp07/drunder/dpo_rygorr_painting02',1096),(15322,15322,'staticobjects/_exp07/drunder/dpo_rygorr_painting03',1096),(15323,15323,'staticobjects/_exp07/drunder/dpo_wicker_demijohn',1096),(15324,15324,'staticobjects/_exp07/drunder/dru_banner_rallos01_dpo',1096),(15325,15325,'staticobjects/_exp07/drunder/dru_banner_sullon01_dpo',1096),(15326,15326,'staticobjects/_exp07/drunder/dru_banner_tallon01_dpo',1096),(15327,15327,'staticobjects/_exp07/drunder/dru_banner_vallon01_dpo',1096),(15328,15328,'staticobjects/_exp07/drunder/dru_divider',1096),(15329,15329,'staticobjects/_exp07/drunder/dru_divider_tall',1096),(15330,15330,'staticobjects/_exp07/drunder/dru_drunder_sullon_elemental_earth_01',1096),(15331,15331,'staticobjects/_exp07/drunder/dru_drunder_sullon_elemental_fire_01',1096),(15332,15332,'staticobjects/_exp07/drunder/dru_drunder_sullon_elemental_ice_01',1096),(15333,15333,'staticobjects/_exp07/drunder/dru_drunder_sullon_sconce01_on',1096),(15334,15334,'staticobjects/_exp07/drunder/dru_tallon_statue',1096),(15335,15335,'staticobjects/_exp07/drunder/dru_vallon_statue',1096),(15336,15336,'staticobjects/panels/dpo_panel_odus_hole_tile',1096),(15337,15337,'staticobjects/panels/dpo_panel_tilled_soil',1096),(15338,15338,'staticobjects/panels/dpo_panel_spaced_cobbles_antonica',1096),(15339,15339,'staticobjects/panels/dpo_panel_odus_shingles',1096),(15340,15340,'staticobjects/panels/dpo_panel_odus_bluemarble',1096),(15341,15341,'staticobjects/panels/dpo_panel_large_cobbles_antonica',1096),(15342,15342,'staticobjects/panels/dpo_panel_lakebed_mud',1096),(15343,15343,'staticobjects/panels/dpo_panel_deadleaf',1096),(15344,15344,'staticobjects/_exp07/drunder/dru_drunder_sullon_axefloat',1096),(15345,15345,'staticobjects/_exp07/drunder/dpo_obsidian_war_scimitar',1096),(15346,15346,'staticobjects/_exp07/drunder/dpo_obsidian_warbow',1096),(15347,15347,'staticobjects/_exp07/drunder/dpo_panel_drunder_vallon',1096),(15348,15348,'staticobjects/_exp07/drunder/dpo_panel_drunder_bluetile',1096),(15349,15349,'staticobjects/_exp07/drunder/dpo_panel_drunder_dark_paving',1096),(15350,15350,'staticobjects/_exp07/drunder/dpo_panel_drunder_goldtile',1096),(15351,15351,'staticobjects/_exp07/drunder/dpo_panel_drunder_grey_paving',1096),(15352,15352,'staticobjects/_exp07/drunder/dpo_panel_drunder_platinumtile',1096),(15353,15353,'staticobjects/_exp07/drunder/dpo_panel_drunder_purple_paving',1096),(15354,15354,'staticobjects/_exp07/drunder/dpo_panel_drunder_purpletile',1096),(15355,15355,'staticobjects/_exp07/drunder/dpo_panel_drunder_sullon',1096),(15356,15356,'staticobjects/_exp07/drunder/dpo_panel_drunder_tallon',1096),(15357,15357,'staticobjects/_exp07/drunder/dpo_sullon_pedestal_axe',1096),(15358,15358,'staticobjects/_exp07/drunder/dpo_tallon_pedestal_w_bow',1096),(15359,15359,'staticobjects/_exp07/drunder/dpo_vallon_pedestal_w_scimitar',1096),(15360,15360,'staticobjects/weapons/dpo_1h_crush_fish_club',1096),(15361,15361,'staticobjects/weapons/dpo_broom',1096),(15362,15362,'staticobjects/weapons/dpo_exp05_2hc_zombie_shovel',1096),(15363,15363,'staticobjects/weapons/dpo_military_pick001_rusty_rotated',1096),(15364,15364,'creatures/mounts/griffin_mount/griffin_fire_epic',1144),(15365,15365,'accessories/wearable_items/_exp08/ratonga_heritage_armor/skirt',1144),(15366,15366,'accessories/wearable_items/_exp08/ratonga_heritage_armor/chest',1144),(15367,15367,'accessories/wearable_items/_exp08/ratonga_heritage_armor/feet',1144),(15368,15368,'accessories/wearable_items/_exp08/ratonga_heritage_armor/hands',1144),(15369,15369,'accessories/wearable_items/_exp08/ratonga_heritage_armor/head_ratonga_heritage',1144),(15370,15370,'accessories/wearable_items/_exp08/ratonga_heritage_armor/legs',1144),(15371,15371,'accessories/wearable_items/_exp08/ratonga_heritage_armor/ratonga_boot_cuff_left',1144),(15372,15372,'accessories/wearable_items/_exp08/ratonga_heritage_armor/ratonga_boot_cuff_right',1144),(15373,15373,'accessories/wearable_items/_exp08/ratonga_heritage_armor/ratonga_boot_strap_left',1144),(15374,15374,'accessories/wearable_items/_exp08/ratonga_heritage_armor/ratonga_boot_strap_right',1144),(15375,15375,'accessories/wearable_items/_exp08/ratonga_heritage_armor/ratonga_shoulder_pad_left',1144),(15376,15376,'accessories/wearable_items/_exp08/ratonga_heritage_armor/ratonga_shoulder_pad_right',1144),(15377,15377,'accessories/wearable_items/_exp08/ratonga_heritage_armor/shoulders',1144),(15378,15378,'accessories/wearable_items/cloak/exp08/cloak_ratonga_heritage',1144),(15379,15379,'creatures/mounts/warhog_mount/warhog_drunder_mount',1144),(15380,15380,'staticobjects/portals/gnome_race_teleporter',1144),(15381,15381,'creatures/mounts/terrorbird_mount/terrorbird_mount_base',1144),(15382,15382,'creatures/tu/mysticdoll_alternate_zombie',1144),(15383,15383,'creatures/tu/mysticdoll_alternate',1144),(15384,15384,'staticobjects/housing_portal_objects/vision_home_kael01',1144),(15385,15385,'staticobjects/housing_portal_objects/vision_home_thurgadin01',1144),(15386,15386,'staticobjects/housing_portal_objects/vision_home_felwithe01',1144),(15387,15387,'_exp07/objects/dpo_vel_dragon_ring',1144),(15388,15388,'_exp07/objects/dpo_vel_wizard_spire',1144),(15389,15389,'creatures/tu/mysticdoll_alternate_voodoo',1144),(15390,15390,'_exp07/objects/kael/signal_horn',1144),(15391,15391,'_exp07/objects/kael/kael_weapon_rack',1144),(15392,15392,'accessories/wieldable_items/shields/exp08/exp08_shield_kite_stormshield',1144),(15393,15393,'accessories/wieldable_items/shields/exp08/exp08_shield_round_lifebound',1144),(15394,15394,'accessories/wieldable_items/shields/exp08/exp08_shield_tower_soulscorned',1144),(15395,15395,'creatures/pets/building_block_kerra',1144),(15396,15396,'creatures/mounts/raptor_mount/raptor_mount_base',1144),(15397,15397,'creatures/mounts/backpack_mount/gnomish_jetpack',1144),(15398,15398,'accessories/npc_wearables/sifaye_accessories/sifaye_wing',1144),(15399,15399,'accessories/npc_wearables/sifaye_accessories/head_antennae1',1144),(15400,15400,'accessories/npc_wearables/sifaye_accessories/head_antennae2',1144),(15401,15401,'accessories/npc_wearables/sifaye_accessories/head_sifaye_crown_antennae',1144),(15402,15402,'accessories/wearable_items/snapons/armbands/shoulders_armband_wyrm_wrap_silver_right',1144),(15403,15403,'accessories/wearable_items/snapons/armbands/shoulders_armband_wyrm_wrap_silver_both',1144),(15404,15404,'accessories/wearable_items/snapons/armbands/shoulders_armband_wyrm_wrap_silver_left',1144),(15405,15405,'staticobjects/soe_wallet/ratonga_plate_cheese01',1144),(15406,15406,'accessories/wearable_items/_exp08/tallonite_armor/chain/skirt',1144),(15407,15407,'accessories/wearable_items/_exp08/tallonite_armor/chain/chest',1144),(15408,15408,'accessories/wearable_items/_exp08/tallonite_armor/chain/feet',1144),(15409,15409,'accessories/wearable_items/_exp08/tallonite_armor/chain/forearms',1144),(15410,15410,'accessories/wearable_items/_exp08/tallonite_armor/chain/hands',1144),(15411,15411,'accessories/wearable_items/_exp08/tallonite_armor/chain/head',1144),(15412,15412,'accessories/wearable_items/_exp08/tallonite_armor/chain/legs',1144),(15413,15413,'accessories/wearable_items/_exp08/tallonite_armor/chain/legs_noskirt',1144),(15414,15414,'accessories/wearable_items/_exp08/tallonite_armor/chain/shoulders',1144),(15415,15415,'accessories/wearable_items/_exp08/tallonite_armor/chain/shoulders_talonite_pauldron',1144),(15416,15416,'accessories/wearable_items/_exp08/tallonite_armor/gi/skirt',1144),(15417,15417,'accessories/wearable_items/_exp08/tallonite_armor/gi/arms',1144),(15418,15418,'accessories/wearable_items/_exp08/tallonite_armor/gi/chest',1144),(15419,15419,'accessories/wearable_items/_exp08/tallonite_armor/gi/legs',1144),(15420,15420,'accessories/wearable_items/_exp08/tallonite_armor/leather/skirt',1144),(15421,15421,'accessories/wearable_items/_exp08/tallonite_armor/leather/chest',1144),(15422,15422,'accessories/wearable_items/_exp08/tallonite_armor/leather/feet',1144),(15423,15423,'accessories/wearable_items/_exp08/tallonite_armor/leather/forearms',1144),(15424,15424,'accessories/wearable_items/_exp08/tallonite_armor/leather/hands',1144),(15425,15425,'accessories/wearable_items/_exp08/tallonite_armor/leather/head',1144),(15426,15426,'accessories/wearable_items/_exp08/tallonite_armor/leather/legs',1144),(15427,15427,'accessories/wearable_items/_exp08/tallonite_armor/leather/legs_noskirt',1144),(15428,15428,'accessories/wearable_items/_exp08/tallonite_armor/leather/shoulders',1144),(15429,15429,'accessories/wearable_items/_exp08/tallonite_armor/robe/skirt',1144),(15430,15430,'accessories/wearable_items/_exp08/tallonite_armor/robe/chest',1144),(15431,15431,'accessories/wearable_items/_exp08/tallonite_armor/robe/feet',1144),(15432,15432,'accessories/wearable_items/_exp08/tallonite_armor/robe/hands',1144),(15433,15433,'accessories/wearable_items/_exp08/tallonite_armor/robe/head',1144),(15434,15434,'accessories/wearable_items/_exp08/tallonite_armor/robe/pants',1144),(15435,15435,'accessories/wearable_items/_exp08/tallonite_armor/snapons/vanguard_pauldrons_upper_right',1144),(15436,15436,'accessories/wearable_items/_exp08/tallonite_armor/snapons/chain_pauldrons_upper_left',1144),(15437,15437,'accessories/wearable_items/_exp08/tallonite_armor/snapons/chain_pauldrons_upper_right',1144),(15438,15438,'accessories/wearable_items/_exp08/tallonite_armor/snapons/gi_pauldrons_upper_left',1144),(15439,15439,'accessories/wearable_items/_exp08/tallonite_armor/snapons/gi_pauldrons_upper_right',1144),(15440,15440,'accessories/wearable_items/_exp08/tallonite_armor/snapons/head_talonite_snapon',1144),(15441,15441,'accessories/wearable_items/_exp08/tallonite_armor/snapons/vanguard_pauldrons_upper_left',1144),(15442,15442,'accessories/wearable_items/_exp08/tallonite_armor/vanguard/skirt',1144),(15443,15443,'accessories/wearable_items/_exp08/tallonite_armor/vanguard/chest',1144),(15444,15444,'accessories/wearable_items/_exp08/tallonite_armor/vanguard/feet',1144),(15445,15445,'accessories/wearable_items/_exp08/tallonite_armor/vanguard/forearms',1144),(15446,15446,'accessories/wearable_items/_exp08/tallonite_armor/vanguard/hands',1144),(15447,15447,'accessories/wearable_items/_exp08/tallonite_armor/vanguard/head',1144),(15448,15448,'accessories/wearable_items/_exp08/tallonite_armor/vanguard/legs',1144),(15449,15449,'accessories/wearable_items/_exp08/tallonite_armor/vanguard/legs_noskirt',1144),(15450,15450,'accessories/wearable_items/_exp08/tallonite_armor/vanguard/right',1144),(15451,15451,'accessories/wearable_items/_exp08/tallonite_armor/vanguard/shoulders',1144),(15452,15452,'accessories/wearable_items/_exp08/tallonite_armor/vanguard/shoulders_nopauldrons',1144),(15453,15453,'accessories/wearable_items/_exp08/tallonite_armor/vanguard/shoulders_talonite_pauldron',1144),(15454,15454,'staticobjects/liveevent/frostfell/dpo_gumdrop_green01',1144),(15455,15455,'staticobjects/liveevent/frostfell/dpo_gumdrop_red01',1144),(15456,15456,'staticobjects/liveevent/frostfell/dpo_gumdrop_stack01',1144),(15457,15457,'staticobjects/liveevent/frostfell/dpo_gumdrop_white01',1144),(15458,15458,'staticobjects/liveevent/frostfell/dpo_vel_snowpile01',1144),(15459,15459,'staticobjects/liveevent/frostfell/dpo_holiday_gravy_boat01',1144),(15460,15460,'staticobjects/liveevent/frostfell/dpo_holiday_cup01',1144),(15461,15461,'staticobjects/liveevent/frostfell/dpo_holiday_cup02',1144),(15462,15462,'staticobjects/liveevent/frostfell/dpo_holiday_cake01',1144),(15463,15463,'staticobjects/liveevent/frostfell/dpo_holiday_soup_tureen01',1144),(15464,15464,'staticobjects/liveevent/frostfell/dpo_holiday_bowl_beans01',1144),(15465,15465,'staticobjects/liveevent/frostfell/dpo_holiday_bowl_chilis01',1144),(15466,15466,'staticobjects/liveevent/frostfell/dpo_gnome_sleigh_01',1144),(15467,15467,'accessories/wearable_items/_exp08/sifaye_armor/robe/skirt',1144),(15468,15468,'accessories/wearable_items/_exp08/sifaye_armor/robe/chest_fullrobe',1144),(15469,15469,'accessories/wearable_items/_exp08/sifaye_armor/robe/chest_noskirt',1144),(15470,15470,'accessories/wearable_items/_exp08/sifaye_armor/robe/feet',1144),(15471,15471,'accessories/wearable_items/_exp08/sifaye_armor/robe/hands',1144),(15472,15472,'accessories/wearable_items/_exp08/sifaye_armor/robe/head_collar',1144),(15473,15473,'accessories/wearable_items/_exp08/sifaye_armor/robe/head_hood',1144),(15474,15474,'accessories/wearable_items/_exp08/sifaye_armor/robe/pants',1144),(15475,15475,'accessories/wearable_items/profesion_hats/proffiddlewiz_cap_gearworked/head_dark',1144),(15476,15476,'accessories/wearable_items/profesion_hats/proffiddlewiz_cap_gearworked/head',1144),(15477,15477,'staticobjects/battlegrounds/dpo_bg_lobby_zoner',1144),(15478,15478,'staticobjects/battlegrounds/dpo_bg_lobby_armor_stand01',1144),(15479,15479,'staticobjects/battlegrounds/dpo_bg_lobby_counter01',1144),(15480,15480,'staticobjects/battlegrounds/dpo_bg_lobby_crate01_closed',1144),(15481,15481,'staticobjects/battlegrounds/dpo_bg_lobby_crate02_closed',1144),(15482,15482,'staticobjects/battlegrounds/dpo_bg_lobby_rug01',1144),(15483,15483,'staticobjects/battlegrounds/dpo_bg_lobby_scales_empty01',1144),(15484,15484,'staticobjects/battlegrounds/dpo_bg_lobby_scales_tipped01',1144),(15485,15485,'staticobjects/battlegrounds/dpo_bg_lobby_weaponrack01',1144),(15486,15486,'staticobjects/battlegrounds/dpo_bg_lobby_weaponrack_weapons01',1144),(15487,15487,'creatures/mounts/frostfell_snow_cloud',1144),(15488,15488,'staticobjects/soe_wallet/djn_lightsource_balloon_ornate01',1144),(15489,15489,'staticobjects/soe_wallet/djn_lightsource_balloon_ornate01_swinging',1144),(15490,15490,'staticobjects/soe_wallet/djn_lightsource_balloon_ornate01_yellow',1144),(15491,15491,'staticobjects/soe_wallet/djn_lightsource_balloon_ornate01_yellow_swinging',1144),(15492,15492,'staticobjects/soe_wallet/djn_lightsource_balloon_ornate02',1144),(15493,15493,'staticobjects/soe_wallet/djn_lightsource_balloon_ornate02_swinging',1144),(15494,15494,'staticobjects/archery/dpo_archery_target',1144),(15495,15495,'_exp08/characters/tool_users/war_generals/war_general_male_light',1144),(15496,15496,'_exp08/characters/tool_users/war_generals/war_general_female',1144),(15497,15497,'_exp08/characters/tool_users/war_generals/war_general_male_black',1144),(15498,15498,'_exp08/characters/tool_users/war_generals/war_general_male_boss',1144),(15499,15499,'_exp08/characters/tool_users/war_generals/war_general_male_heavy01',1144),(15500,15500,'accessories/wearable_items/cloak/exp08/cloak_3straps_red',1144),(15501,15501,'accessories/wearable_items/cloak/exp08/cloak_3straps',1144),(15502,15502,'accessories/wearable_items/_exp08/unkown_faction_armor/chain/skirt',1144),(15503,15503,'accessories/wearable_items/_exp08/unkown_faction_armor/chain/chest',1144),(15504,15504,'accessories/wearable_items/_exp08/unkown_faction_armor/chain/feet',1144),(15505,15505,'accessories/wearable_items/_exp08/unkown_faction_armor/chain/forearms',1144),(15506,15506,'accessories/wearable_items/_exp08/unkown_faction_armor/chain/hands',1144),(15507,15507,'accessories/wearable_items/_exp08/unkown_faction_armor/chain/head',1144),(15508,15508,'accessories/wearable_items/_exp08/unkown_faction_armor/chain/legs',1144),(15509,15509,'accessories/wearable_items/_exp08/unkown_faction_armor/chain/legs_noskirt',1144),(15510,15510,'accessories/wearable_items/_exp08/unkown_faction_armor/chain/shoulders',1144),(15511,15511,'accessories/wearable_items/_exp08/tallonite_armor/snapons/leather_pauldrons_upper_left',1144),(15512,15512,'accessories/wearable_items/_exp08/tallonite_armor/snapons/leather_pauldrons_upper_right',1144),(15513,15513,'accessories/wearable_items/_exp08/unkown_faction_armor/leather/skirt',1144),(15514,15514,'accessories/wearable_items/_exp08/unkown_faction_armor/leather/chest',1144),(15515,15515,'accessories/wearable_items/_exp08/unkown_faction_armor/leather/feet',1144),(15516,15516,'accessories/wearable_items/_exp08/unkown_faction_armor/leather/forearms',1144),(15517,15517,'accessories/wearable_items/_exp08/unkown_faction_armor/leather/hands',1144),(15518,15518,'accessories/wearable_items/_exp08/unkown_faction_armor/leather/head',1144),(15519,15519,'accessories/wearable_items/_exp08/unkown_faction_armor/leather/legs',1144),(15520,15520,'accessories/wearable_items/_exp08/unkown_faction_armor/leather/legs_noskirt',1144),(15521,15521,'accessories/wearable_items/_exp08/unkown_faction_armor/leather/shoulders',1144),(15522,15522,'accessories/wearable_items/_exp08/unkown_faction_armor/robe/chest',1144),(15523,15523,'accessories/wearable_items/_exp08/unkown_faction_armor/robe/feet',1144),(15524,15524,'accessories/wearable_items/_exp08/unkown_faction_armor/robe/hands',1144),(15525,15525,'accessories/wearable_items/_exp08/unkown_faction_armor/robe/head',1144),(15526,15526,'accessories/wearable_items/_exp08/unkown_faction_armor/robe/pants',1144),(15527,15527,'accessories/wearable_items/_exp08/unkown_faction_armor/robe/skirt',1144),(15528,15528,'staticobjects/guildhall/trophies/floor_vallon_zek_fx',1144),(15529,15529,'staticobjects/guildhall/trophies/floor_sullon_zek',1144),(15530,15530,'staticobjects/guildhall/trophies/floor_sullon_zek_fx',1144),(15531,15531,'staticobjects/guildhall/trophies/floor_tallon_zek',1144),(15532,15532,'staticobjects/guildhall/trophies/floor_tallon_zek_fx',1144),(15533,15533,'staticobjects/guildhall/trophies/floor_vallon_zek',1144),(15534,15534,'_exp07/objects/vel_coldain_frozen_in_ice',1144),(15535,15535,'creatures/mounts/flying_disc/flying_disc_clockwork_purple',1144),(15536,15536,'creatures/mounts/flying_disc/flying_disc_clockwork_gold',1144),(15537,15537,'creatures/mounts/flying_disc/flying_disc_clockwork_green',1144),(15538,15538,'creatures/mounts/class_hover_pads/hover_pad_assassin',1144),(15539,15539,'creatures/mounts/class_hover_pads/hover_pad_berserker',1144),(15540,15540,'creatures/mounts/class_hover_pads/hover_pad_brigand',1144),(15541,15541,'creatures/mounts/class_hover_pads/hover_pad_bruiser',1144),(15542,15542,'creatures/mounts/class_hover_pads/hover_pad_coercer',1144),(15543,15543,'creatures/mounts/class_hover_pads/hover_pad_conjuror',1144),(15544,15544,'creatures/mounts/class_hover_pads/hover_pad_defiler',1144),(15545,15545,'creatures/mounts/class_hover_pads/hover_pad_dirge',1144),(15546,15546,'creatures/mounts/class_hover_pads/hover_pad_fury',1144),(15547,15547,'creatures/mounts/class_hover_pads/hover_pad_guardian',1144),(15548,15548,'creatures/mounts/class_hover_pads/hover_pad_illusionist',1144),(15549,15549,'creatures/mounts/class_hover_pads/hover_pad_inquisitor',1144),(15550,15550,'creatures/mounts/class_hover_pads/hover_pad_monk',1144),(15551,15551,'creatures/mounts/class_hover_pads/hover_pad_mystic',1144),(15552,15552,'creatures/mounts/class_hover_pads/hover_pad_necromancer',1144),(15553,15553,'creatures/mounts/class_hover_pads/hover_pad_paladin',1144),(15554,15554,'creatures/mounts/class_hover_pads/hover_pad_ranger',1144),(15555,15555,'creatures/mounts/class_hover_pads/hover_pad_shadowknight',1144),(15556,15556,'creatures/mounts/class_hover_pads/hover_pad_swashbuckler',1144),(15557,15557,'creatures/mounts/class_hover_pads/hover_pad_templar',1144),(15558,15558,'creatures/mounts/class_hover_pads/hover_pad_troubador',1144),(15559,15559,'creatures/mounts/class_hover_pads/hover_pad_warden',1144),(15560,15560,'creatures/mounts/class_hover_pads/hover_pad_warlock',1144),(15561,15561,'creatures/mounts/raptor_mount/evil_raptor_mount',1144),(15562,15562,'accessories/wieldable_items/weapons/misc/sparkler_stick',1144),(15563,15563,'creatures/mounts/komodo_mount/komodo_mount_base',1144),(15564,15564,'creatures/mounts/komodo_mount/komodo_mount_black',1144),(15565,15565,'creatures/mounts/komodo_mount/komodo_mount_brown',1144),(15566,15566,'creatures/mounts/komodo_mount/komodo_mount_iceblue',1144),(15567,15567,'staticobjects/liveevent/dpo_fireworks_vase06',1144),(15568,15568,'staticobjects/liveevent/dpo_fireworks_vase01',1144),(15569,15569,'staticobjects/liveevent/dpo_fireworks_vase02',1144),(15570,15570,'staticobjects/liveevent/dpo_fireworks_vase03',1144),(15571,15571,'staticobjects/liveevent/dpo_fireworks_vase04',1144),(15572,15572,'staticobjects/liveevent/dpo_fireworks_vase05',1144),(15573,15573,'accessories/wearable_items/snapons/armbands/shoulders_armband_fur_right',1144),(15574,15574,'accessories/wearable_items/snapons/armbands/shoulders_armband_fur_left',1144),(15575,15575,'accessories/wearable_items/_exp08/short_skirts/basic/snap_ons/short_skirt',1144),(15576,15576,'accessories/wearable_items/_exp08/short_skirts/basic/snap_ons/belt',1144),(15577,15577,'accessories/wearable_items/_exp08/short_skirts/basic/shoulders_armband_fur',1144),(15578,15578,'accessories/wearable_items/_exp08/short_skirts/basic/chest',1144),(15579,15579,'accessories/wearable_items/_exp08/short_skirts/basic/feet',1144),(15580,15580,'accessories/wearable_items/_exp08/short_skirts/basic/hands',1144),(15581,15581,'accessories/wearable_items/_exp08/short_skirts/basic/head',1144),(15582,15582,'accessories/wearable_items/_exp08/short_skirts/basic/legs_short_skirt_base',1144),(15583,15583,'accessories/wearable_items/_exp08/short_skirts/basic/shoulders',1144),(15584,15584,'creatures/mounts/wolf_mount/wolf_mount_storm',1144),(15585,15585,'accessories/wearable_items/_exp08/short_skirts/short_skirt_02/snap_ons/short_skirt',1144),(15586,15586,'accessories/wearable_items/_exp08/short_skirts/short_skirt_02/snap_ons/belt',1144),(15587,15587,'accessories/wearable_items/_exp08/short_skirts/short_skirt_02/shoulders_armband_fur',1144),(15588,15588,'accessories/wearable_items/_exp08/short_skirts/short_skirt_02/chest',1144),(15589,15589,'accessories/wearable_items/_exp08/short_skirts/short_skirt_02/feet',1144),(15590,15590,'accessories/wearable_items/_exp08/short_skirts/short_skirt_02/hands',1144),(15591,15591,'accessories/wearable_items/_exp08/short_skirts/short_skirt_02/head',1144),(15592,15592,'accessories/wearable_items/_exp08/short_skirts/short_skirt_02/legs_short_skirt_base',1144),(15593,15593,'accessories/wearable_items/_exp08/short_skirts/short_skirt_02/shoulders',1144),(15594,15594,'creatures/mounts/raptor_mount/tradeskill_raptor_mount',1144),(15595,15595,'creatures/mounts/flying_disc/elemental_flying_disc_water',1144),(15596,15596,'creatures/mounts/flying_disc/elemental_flying_disc_air',1144),(15597,15597,'creatures/mounts/flying_disc/elemental_flying_disc_earth',1144),(15598,15598,'creatures/mounts/flying_disc/elemental_flying_disc_fire',1144),(15599,15599,'accessories/wearable_items/_exp08/combine_armor/snapons-helms/combine_shin_right',1144),(15600,15600,'accessories/wearable_items/_exp08/combine_armor/snapons-helms/combine_forearm_left',1144),(15601,15601,'accessories/wearable_items/_exp08/combine_armor/snapons-helms/combine_forearm_right',1144),(15602,15602,'accessories/wearable_items/_exp08/combine_armor/snapons-helms/combine_pauldron_left',1144),(15603,15603,'accessories/wearable_items/_exp08/combine_armor/snapons-helms/combine_pauldron_right',1144),(15604,15604,'accessories/wearable_items/_exp08/combine_armor/snapons-helms/combine_pauldrons_lower_left',1144),(15605,15605,'accessories/wearable_items/_exp08/combine_armor/snapons-helms/combine_pauldrons_lower_right',1144),(15606,15606,'accessories/wearable_items/_exp08/combine_armor/snapons-helms/combine_shin_left',1144),(15607,15607,'accessories/wearable_items/_exp08/combine_armor/vanguard/skirt_robe',1144),(15608,15608,'accessories/wearable_items/_exp08/combine_armor/vanguard/chest',1144),(15609,15609,'accessories/wearable_items/_exp08/combine_armor/vanguard/feet',1144),(15610,15610,'accessories/wearable_items/_exp08/combine_armor/vanguard/forearms',1144),(15611,15611,'accessories/wearable_items/_exp08/combine_armor/vanguard/hands',1144),(15612,15612,'accessories/wearable_items/_exp08/combine_armor/vanguard/head_combine_helm',1144),(15613,15613,'accessories/wearable_items/_exp08/combine_armor/vanguard/legs',1144),(15614,15614,'accessories/wearable_items/_exp08/combine_armor/vanguard/legs_epic',1144),(15615,15615,'accessories/wearable_items/_exp08/combine_armor/vanguard/legs_noskirt',1144),(15616,15616,'accessories/wearable_items/_exp08/combine_armor/vanguard/shoulders',1144),(15617,15617,'accessories/wearable_items/_exp08/combine_armor/vanguard/shoulders_epic',1144),(15618,15618,'accessories/wearable_items/_exp08/combine_armor/vanguard/skirt_chain',1144),(15619,15619,'accessories/wieldable_items/weapons/exp07/1h_crush/1h_wand_deathbringer_yellow',1144),(15620,15620,'accessories/wieldable_items/weapons/exp07/1h_crush/1h_hammer_deathbringer_green',1144),(15621,15621,'accessories/wieldable_items/weapons/exp07/1h_crush/1h_hammer_deathbringer_purple',1144),(15622,15622,'accessories/wieldable_items/weapons/exp07/1h_crush/1h_hammer_deathbringer_yellow',1144),(15623,15623,'accessories/wieldable_items/weapons/exp07/1h_crush/1h_wand_deathbringer_green',1144),(15624,15624,'accessories/wieldable_items/weapons/exp07/1h_crush/1h_wand_deathbringer_purple',1144),(15625,15625,'accessories/wieldable_items/weapons/exp07/1h_sword/exp07_1hs_sword_deathbringer_yellow',1144),(15626,15626,'accessories/wieldable_items/weapons/exp07/1h_sword/exp07_1hs_sword_deathbringer_green',1144),(15627,15627,'accessories/wieldable_items/weapons/exp07/1h_sword/exp07_1hs_sword_deathbringer_purple',1144),(15628,15628,'accessories/wieldable_items/weapons/exp07/2h_sword/exp07_2hs_sword_deathbringer_yellow',1144),(15629,15629,'accessories/wieldable_items/weapons/exp07/2h_sword/exp07_2hs_sword_deathbringer_green',1144),(15630,15630,'accessories/wieldable_items/weapons/exp07/2h_sword/exp07_2hs_sword_deathbringer_purple',1144),(15631,15631,'accessories/wieldable_items/weapons/exp07/staff/exp07_staff_deathbringer_yellow',1144),(15632,15632,'accessories/wieldable_items/weapons/exp07/staff/exp07_staff_deathbringer_green',1144),(15633,15633,'accessories/wieldable_items/weapons/exp07/staff/exp07_staff_deathbringer_purple',1144),(15634,15634,'creatures/mounts/komodo_mount/komodo_mount_packtrade',1144),(15635,15635,'_exp08/characters/tool_users/ulthork/ulthork_male_light01',1144),(15636,15636,'_exp08/characters/tool_users/hunter_female/hunter_female',1144),(15637,15637,'accessories/wearable_items/cloak/exp08/cloak_poppies_scalloped',1144),(15638,15638,'_exp08/characters/monsters/komodo/komodo',1144),(15639,15639,'creatures/mounts/raptor_mount/raptor_wild_base',1144),(15640,15640,'creatures/mounts/terrorbird_mount/terrorbird_wild',1144),(15641,15641,'creatures/mounts/raptor_mount/raptor_wild_evil',1144),(15642,15642,'staticobjects/housing_portal_objects/vision_home_floatingisland01',1144),(15643,15643,'creatures/mounts/raptor_mount/tropical_raptor_mount_base',1144),(15644,15644,'staticobjects/liveevent/tinkerfest/dpo_tinkered_hologram_projector',1144),(15645,15645,'_exp08/characters/monsters/komodo/komodo_blackred',1144),(15646,15646,'staticobjects/soe_wallet/station_furniture_kaladim_table01',1144),(15647,15647,'staticobjects/soe_wallet/station_furniture_kaladim_bed01',1144),(15648,15648,'staticobjects/soe_wallet/station_furniture_kaladim_bench01',1144),(15649,15649,'staticobjects/soe_wallet/station_furniture_kaladim_largetable01',1144),(15650,15650,'staticobjects/soe_wallet/station_furniture_kaladim_nightstand01',1144),(15651,15651,'staticobjects/soe_wallet/station_furniture_kaladim_singlekeg01',1144),(15652,15652,'staticobjects/soe_wallet/station_furniture_kaladim_stool01',1144),(15653,15653,'accessories/wearable_items/cloak/exp08/cloak_3straps_komodo',1144),(15654,15654,'creatures/mounts/horse_saddle_bags_01/horse01_sadle_bags_01_appoloosa_alt',1144),(15655,15655,'_exp04/zones/objects/fens_of_nathsar/fon_poi_ruin_cabilis_wall03',1144),(15656,15656,'accessories/wearable_items/_exp08/ullkorruuk_armor/chest',1144),(15657,15657,'accessories/wearable_items/_exp08/ullkorruuk_armor/feet',1144),(15658,15658,'accessories/wearable_items/_exp08/ullkorruuk_armor/forearms',1144),(15659,15659,'accessories/wearable_items/_exp08/ullkorruuk_armor/hands',1144),(15660,15660,'accessories/wearable_items/_exp08/ullkorruuk_armor/head',1144),(15661,15661,'accessories/wearable_items/_exp08/ullkorruuk_armor/head_vanguard',1144),(15662,15662,'accessories/wearable_items/_exp08/ullkorruuk_armor/legs',1144),(15663,15663,'accessories/wearable_items/_exp08/ullkorruuk_armor/legs_noskirt',1144),(15664,15664,'accessories/wearable_items/_exp08/ullkorruuk_armor/right',1144),(15665,15665,'accessories/wearable_items/_exp08/ullkorruuk_armor/shoulders',1144),(15666,15666,'accessories/wearable_items/_exp08/ullkorruuk_armor/shoulders_nopauldrons',1144),(15667,15667,'accessories/wearable_items/_exp08/ullkorruuk_armor/shoulders_ullkorruuk',1144),(15668,15668,'accessories/wearable_items/_exp08/ullkorruuk_armor/skirt',1144),(15669,15669,'accessories/wearable_items/_exp08/ullkorruuk_armor/ullkorruuk_armor_pauldron_left',1144),(15670,15670,'accessories/wearable_items/_exp08/ullkorruuk_armor/ullkorruuk_armor_pauldron_right',1144),(15671,15671,'accessories/wearable_items/_exp08/ullkorruuk_armor/ullkorruuk_armor_waist',1144),(15672,15672,'_exp08/characters/monsters/falcon_god/falcon_god',1144),(15673,15673,'accessories/wieldable_items/weapons/exp08/2h_crush/exp08_2h_crush_pillarofjustice',1144),(15674,15674,'accessories/wieldable_items/weapons/exp08/2h_sword/exp07_2hs_sword_knightslayer',1144),(15675,15675,'creatures/mounts/griffin_mount/griffin_mount_peacock',1144),(15676,15676,'accessories/wearable_items/cloak/exp08/cloak_peacock',1144),(15677,15677,'staticobjects/_exp07/pw_ballista_launcher',1144),(15678,15678,'staticobjects/rubble/slove_rubblepiece_purple01_horizontal',1144),(15679,15679,'staticobjects/rubble/slove_rubblepiece_trim01_horizontal',1144),(15680,15680,'accessories/wearable_items/valkyrie/chest',1144),(15681,15681,'accessories/wearable_items/valkyrie/hands',1144),(15682,15682,'accessories/wearable_items/valkyrie/legs',1144),(15683,15683,'accessories/wearable_items/snapons/backpacks/backpack_assassin',1144),(15684,15684,'accessories/wieldable_items/shields/exp08/exp08_shield_round_crystalline',1144),(15685,15685,'accessories/wieldable_items/weapons/exp08/1h_crush/wand_crystalline',1144),(15686,15686,'accessories/wieldable_items/weapons/exp08/1h_crush/mace_crystalline',1144),(15687,15687,'accessories/wieldable_items/weapons/exp08/1h_sword/exp08_sword_crystalline',1144),(15688,15688,'accessories/wieldable_items/weapons/exp08/2h_sword/exp07_2hs_sword_crystalline',1144),(15689,15689,'staticobjects/signs/freeport/dpo_freeport_wall_sign',1144),(15690,15690,'staticobjects/signs/freeport/dpo_freeport_post_sign',1144),(15691,15691,'staticobjects/signs/general/dpo_rivervale_post_sign',1144),(15692,15692,'staticobjects/signs/gorowyn/dpo_gorowyn_wall_sign',1144),(15693,15693,'staticobjects/signs/kelethin/dpo_kelethin_post_sign',1144),(15694,15694,'staticobjects/signs/neriak/dpo_neriak_square_sign',1144),(15695,15695,'staticobjects/signs/qeynos/dpo_qeynos_wall_sign',1144),(15696,15696,'staticobjects/signs/qeynos/dpo_qeynos_hanging_sign',1144),(15697,15697,'staticobjects/shield/lodizal_shield_houseitem',1144),(15698,15698,'creatures/monsters/tyrannosaurus_mount',1144),(15699,15699,'accessories/wearable_items/_exp08/robe_evil_dark_red/chest',1144),(15700,15700,'accessories/wearable_items/_exp08/robe_evil_dark_red/feet',1144),(15701,15701,'accessories/wearable_items/_exp08/robe_evil_dark_red/hands',1144),(15702,15702,'accessories/wearable_items/_exp08/robe_evil_dark_red/head_collar',1144),(15703,15703,'accessories/wearable_items/_exp08/robe_evil_dark_red/head_evil_conjurer',1144),(15704,15704,'accessories/wearable_items/_exp08/robe_evil_dark_red/pants',1144),(15705,15705,'accessories/wearable_items/_exp08/robe_evil_dark_red/skirt',1144),(15706,15706,'accessories/wieldable_items/shields/exp08/exp08_shield_ice',1144),(15707,15707,'accessories/wieldable_items/shields/exp08/exp08_shield_nature',1144),(15708,15708,'accessories/wieldable_items/weapons/exp08/bow/exp08_bow_nature',1144),(15709,15709,'accessories/wieldable_items/weapons/exp08/fist/exp08_fist_icespike',1144),(15710,15710,'accessories/wearable_items/vanguard/vanguard_chitin_black_silver/chest',1144),(15711,15711,'accessories/wearable_items/vanguard/vanguard_chitin_black_silver/feet',1144),(15712,15712,'accessories/wearable_items/vanguard/vanguard_chitin_black_silver/forearms',1144),(15713,15713,'accessories/wearable_items/vanguard/vanguard_chitin_black_silver/hands',1144),(15714,15714,'accessories/wearable_items/vanguard/vanguard_chitin_black_silver/head',1144),(15715,15715,'accessories/wearable_items/vanguard/vanguard_chitin_black_silver/left',1144),(15716,15716,'accessories/wearable_items/vanguard/vanguard_chitin_black_silver/legs',1144),(15717,15717,'accessories/wearable_items/vanguard/vanguard_chitin_black_silver/legs_noskirt',1144),(15718,15718,'accessories/wearable_items/vanguard/vanguard_chitin_black_silver/pauldron02_vanguard_ridged_left',1144),(15719,15719,'accessories/wearable_items/vanguard/vanguard_chitin_black_silver/pauldron02_vanguard_ridged_right',1144),(15720,15720,'accessories/wearable_items/vanguard/vanguard_chitin_black_silver/pauldron03_vanguard_flared_left',1144),(15721,15721,'accessories/wearable_items/vanguard/vanguard_chitin_black_silver/pauldron03_vanguard_flared_right',1144),(15722,15722,'accessories/wearable_items/vanguard/vanguard_chitin_black_silver/right',1144),(15723,15723,'accessories/wearable_items/vanguard/vanguard_chitin_black_silver/shoulders',1144),(15724,15724,'accessories/wearable_items/vanguard/vanguard_chitin_black_silver/shoulders_flared',1144),(15725,15725,'accessories/wearable_items/vanguard/vanguard_chitin_black_silver/shoulders_nopauldrons',1144),(15726,15726,'accessories/wearable_items/vanguard/vanguard_chitin_black_silver/shoulders_ridged',1144),(15727,15727,'accessories/wearable_items/vanguard/vanguard_chitin_black_silver/skirt',1144),(15728,15728,'accessories/wearable_items/vanguard/vanguard_chitin_black_silver/upperchest',1144),(15729,15729,'creatures/mounts/fae_mount/fae_mount',1144),(15730,15730,'creatures/mounts/komodo_mount/komodo_mount_iceblue_epic',1144),(15731,15731,'accessories/wearable_items/snapons/armbands/shoulders_armband_fire_green_both',1144),(15732,15732,'accessories/wearable_items/snapons/armbands/shoulders_armband_fire_green_left',1144),(15733,15733,'accessories/wearable_items/snapons/armbands/shoulders_armband_fire_green_right',1144),(15734,15734,'accessories/wearable_items/snapons/armbands/shoulders_armband_fire_red_both',1144),(15735,15735,'accessories/wearable_items/snapons/armbands/shoulders_armband_fire_red_left',1144),(15736,15736,'accessories/wearable_items/snapons/armbands/shoulders_armband_fire_red_right',1144),(15737,15737,'accessories/wearable_items/snapons/backpacks/backpack_samurai',1144),(15738,15738,'creatures/mounts/raptor_mount/raptor_mount_armor_blue',1144),(15739,15739,'creatures/mounts/pegasus_mount/pegasus_mount_nightmare',1144),(15740,15740,'creatures/mounts/pegasus_mount/pegasus_mount_nightmare_green',1144),(15741,15741,'creatures/mounts/pegasus_mount/pegasus_mount_nightmare_violet',1144),(15742,15742,'staticobjects/dividers/dpo_gf_kel_int_divider_wall01_qey_stone14',1144),(15743,15743,'staticobjects/dividers/dpo_gf_kel_int_divider_wall01_qey_stone01',1144),(15744,15744,'staticobjects/dividers/dpo_gf_kel_int_divider_wall01_qey_stone02',1144),(15745,15745,'staticobjects/dividers/dpo_gf_kel_int_divider_wall01_qey_stone12',1144),(15746,15746,'staticobjects/panels/dpo_tile_weathereddark',1144),(15747,15747,'staticobjects/panels/dpo_cloudsk_panel',1144),(15748,15748,'staticobjects/panels/dpo_tile_altarwood',1144),(15749,15749,'staticobjects/panels/dpo_tile_ashenwood',1144),(15750,15750,'staticobjects/panels/dpo_tile_blondwood',1144),(15751,15751,'staticobjects/panels/dpo_tile_brownwood',1144),(15752,15752,'staticobjects/panels/dpo_tile_fairy_mossywood',1144),(15753,15753,'staticobjects/panels/dpo_tile_halaswood',1144),(15754,15754,'staticobjects/panels/dpo_tile_halaswoodtrim',1144),(15755,15755,'staticobjects/panels/dpo_tile_marrwood',1144),(15756,15756,'staticobjects/panels/dpo_tile_metalwood',1144),(15757,15757,'staticobjects/panels/dpo_tile_qey_stone01',1144),(15758,15758,'staticobjects/panels/dpo_tile_qey_stone02',1144),(15759,15759,'staticobjects/panels/dpo_tile_qey_stone12',1144),(15760,15760,'staticobjects/panels/dpo_tile_qey_stone14',1144),(15761,15761,'staticobjects/panels/dpo_tile_redwood',1144),(15762,15762,'staticobjects/panels/dpo_tile_rosewood',1144),(15763,15763,'staticobjects/panels/dpo_tile_sandalwood',1144),(15764,15764,'staticobjects/panels/dpo_tile_sumacwood',1144),(15765,15765,'staticobjects/panels/dpo_tile_tablenoplanks',1144),(15766,15766,'staticobjects/panels/dpo_tile_wavywood',1144),(15767,15767,'staticobjects/dividers/dpo_gf_kel_int_divider_wall01_halaswood',1144),(15768,15768,'creatures/pets/pet_kitten/odus_prowler_kitten',1144),(15769,15769,'creatures/pets/pet_kitten/odus_prowler_kitten_death',1144),(15770,15770,'creatures/pets/pet_kitten/odus_prowler_kitten_poison',1144),(15771,15771,'creatures/pets/pet_kitten/odus_prowler_kitten_skeletal',1144),(15772,15772,'creatures/pets/pet_kitten/odus_prowler_kitten_void',1144),(15773,15773,'accessories/wieldable_items/shields/exp08/exp08_shield_flame',1144),(15774,15774,'accessories/wieldable_items/shields/exp08/exp08_shield_soulripper',1144),(15775,15775,'accessories/wieldable_items/weapons/exp08/bow/exp08_bow_flame',1144),(15776,15776,'accessories/wieldable_items/weapons/exp08/bow/exp08_bow_soulripper',1144),(15777,15777,'accessories/wieldable_items/weapons/exp08/staff/exp08_staff_bugbearmystic',1144),(15778,15778,'accessories/wearable_items/cloak/exp08/cloak_squirrel',1144),(15779,15779,'accessories/wearable_items/cloak/exp08/cloak_squirrel_skunk',1144),(15780,15780,'staticobjects/pictures/conceptpainting_oduswasteland',1144),(15781,15781,'staticobjects/pictures/conceptpainting_guk',1144),(15782,15782,'staticobjects/soe_wallet/painting_skyfire',1144),(15783,15783,'staticobjects/soe_wallet/painting_burningwoods',1144),(15784,15784,'staticobjects/soe_wallet/painting_chelsith',1144),(15785,15785,'staticobjects/soe_wallet/painting_craterjungle',1144),(15786,15786,'staticobjects/soe_wallet/painting_frontier',1144),(15787,15787,'creatures/tu/gods_rallos_zek_new_gold',1144),(15788,15788,'creatures/tu/gods_rallos_zek_new_stone',1144),(15789,15789,'accessories/wieldable_items/weapons/exp08/1h_crush/club_zombiebane',1144),(15790,15790,'accessories/wieldable_items/weapons/exp08/staff/exp08_staff_pitchfork',1144),(15791,15791,'accessories/wearable_items/profesion_hats/firiona_vie_tiara_lon/head_firiona_vie_tiara_lon_evil',1144),(15792,15792,'accessories/wearable_items/cloak/exp08/cloak_3straps_black',1144),(15793,15793,'accessories/wearable_items/cloak/exp08/cloak_3straps_white',1144),(15794,15794,'accessories/wearable_items/profesion_hats/firiona_vie_tiara_lon/head_firiona_vie_tiara_lon_evil_fx',1144),(15795,15795,'accessories/wearable_items/snapons/backpacks/crossblades_empowered',1144),(15796,15796,'staticobjects/weapons/dpo_sc_exp08_fist_icespike',1144),(15797,15797,'staticobjects/shield/dpo_sc_exp08_shield_crystalline',1144),(15798,15798,'staticobjects/shield/dpo_sc_exp08_shield_icespike',1144),(15799,15799,'staticobjects/soe_wallet/holiday_objects/pumpkin_bowl_eyes_purple',1144),(15800,15800,'staticobjects/soe_wallet/holiday_objects/pumpkin_bowl_candy',1144),(15801,15801,'staticobjects/soe_wallet/holiday_objects/pumpkin_bowl_candy_green',1144),(15802,15802,'staticobjects/soe_wallet/holiday_objects/pumpkin_bowl_candy_purple',1144),(15803,15803,'staticobjects/soe_wallet/holiday_objects/pumpkin_bowl_eyes',1144),(15804,15804,'staticobjects/soe_wallet/holiday_objects/pumpkin_bowl_eyes_green',1144),(15805,15805,'staticobjects/soe_wallet/furniture_grecian_wash',1144),(15806,15806,'staticobjects/soe_wallet/furniture_grecian_alt1_column',1144),(15807,15807,'staticobjects/soe_wallet/furniture_grecian_alt1_fountain',1144),(15808,15808,'staticobjects/soe_wallet/furniture_grecian_alt1_kingbed',1144),(15809,15809,'staticobjects/soe_wallet/furniture_grecian_alt1_sofa',1144),(15810,15810,'staticobjects/soe_wallet/furniture_grecian_alt1_table',1144),(15811,15811,'staticobjects/soe_wallet/furniture_grecian_alt1_wash',1144),(15812,15812,'staticobjects/soe_wallet/furniture_grecian_column',1144),(15813,15813,'staticobjects/soe_wallet/furniture_grecian_fountain',1144),(15814,15814,'staticobjects/soe_wallet/furniture_grecian_kingbed',1144),(15815,15815,'staticobjects/soe_wallet/furniture_grecian_sofa',1144),(15816,15816,'staticobjects/soe_wallet/furniture_grecian_table',1144),(15817,15817,'_exp08/characters/monsters/pw_ballista/pw_ballista',1144),(15818,15818,'accessories/wearable_items/_exp08/red_dark_elf_armor/skirt',1144),(15819,15819,'accessories/wearable_items/_exp08/red_dark_elf_armor/chest',1144),(15820,15820,'accessories/wearable_items/_exp08/red_dark_elf_armor/feet',1144),(15821,15821,'accessories/wearable_items/_exp08/red_dark_elf_armor/forearms',1144),(15822,15822,'accessories/wearable_items/_exp08/red_dark_elf_armor/hands',1144),(15823,15823,'accessories/wearable_items/_exp08/red_dark_elf_armor/head',1144),(15824,15824,'accessories/wearable_items/_exp08/red_dark_elf_armor/legs',1144),(15825,15825,'accessories/wearable_items/_exp08/red_dark_elf_armor/legs_noskirt',1144),(15826,15826,'accessories/wearable_items/_exp08/red_dark_elf_armor/shoulders',1144),(15827,15827,'accessories/wearable_items/_exp08/short_skirts/tintable_01/snap_ons/belt',1144),(15828,15828,'accessories/wearable_items/_exp08/short_skirts/tintable_01/snap_ons/short_skirt',1144),(15829,15829,'accessories/wearable_items/_exp08/short_skirts/tintable_01/chest',1144),(15830,15830,'accessories/wearable_items/_exp08/short_skirts/tintable_01/feet',1144),(15831,15831,'accessories/wearable_items/_exp08/short_skirts/tintable_01/hands',1144),(15832,15832,'accessories/wearable_items/_exp08/short_skirts/tintable_01/head',1144),(15833,15833,'accessories/wearable_items/_exp08/short_skirts/tintable_01/legs_short_skirt_base',1144),(15834,15834,'accessories/wearable_items/_exp08/short_skirts/tintable_01/shoulders',1144),(15835,15835,'creatures/mounts/pegasus_mount/pegasus_mount_epic',1144),(15836,15836,'accessories/wieldable_items/weapons/exp08/bow/exp08_bow_huntress',1144),(15837,15837,'staticobjects/_exp07/exp07_dun_plane_of_war_raid/pow_stone_pillar',1144),(15838,15838,'accessories/wieldable_items/weapons/exp08/1h_crush/club_treebranch',1144),(15839,15839,'accessories/wearable_items/snapons/backpacks/backpack_assassin_swivel/backpack_assassin_swivel',1144),(15840,15840,'accessories/wearable_items/snapons/backpacks/backpack_assassin_swivel/backpack_assassin_swivel_jug',1144),(15841,15841,'accessories/wieldable_items/weapons/exp08/bow/exp08_bow_lightning',1144),(15842,15842,'creatures/mounts/horse_heavy/horse_nightmare_fire',1144),(15843,15843,'creatures/mounts/horse_heavy/horse_epic_good',1144),(15844,15844,'creatures/mounts/terrorbird_mount/terrorbird_mount_vulrich',1144),(15845,15845,'staticobjects/soe_wallet/dpo_moon_telescope',1144),(15846,15846,'staticobjects/soe_wallet/holiday_objects/holiday_brazier',1144),(15847,15847,'staticobjects/shield/dpo_sc_exp08_shield_flame',1144),(15848,15848,'staticobjects/housing_portal_objects/vision_home_pedestal01',1144),(15849,15849,'staticobjects/housing_portal_objects/vision_home_majdul_blades01',1144),(15850,15850,'staticobjects/housing_portal_objects/vision_home_majdul_moon01',1144),(15851,15851,'staticobjects/housing_portal_objects/vision_home_unrest',1144),(15852,15852,'accessories/wieldable_items/weapons/exp08/1h_wand/wand_magic_prismatic_uber',1144),(15853,15853,'accessories/wieldable_items/weapons/exp08/1h_wand/wand001_ornate',1144),(15854,15854,'accessories/wieldable_items/weapons/exp08/1h_wand/wand001_plain',1144),(15855,15855,'accessories/wieldable_items/weapons/exp08/1h_wand/wand001_runic',1144),(15856,15856,'accessories/wieldable_items/weapons/exp08/1h_wand/wand001_rusty',1144),(15857,15857,'creatures/mounts/squirrel_mount/squirrel_mount_base',1144),(15858,15858,'_exp07/characters/tool_users/sullon_zek/sullon_zek_glowing',1144),(15859,15859,'_exp07/characters/tool_users/tallon_zek/tallon_zek_glow',1144),(15860,15860,'_exp07/characters/tool_users/vallon_zek/vallon_zek_glow',1144),(15861,15861,'creatures/mounts/anglerserpent_mount/anglerserpent_mount_base',1144),(15862,15862,'creatures/mounts/anglerserpent_mount/anglerserpent_mount_iceblue',1144),(15863,15863,'creatures/mounts/anglerserpent_mount/anglerserpent_mount_lizardgreen',1144),(15864,15864,'creatures/mounts/anglerserpent_mount/anglerserpent_mount_redhot',1144),(15865,15865,'accessories/wieldable_items/shields/exp08/exp08_shield_vjornir',1144),(15866,15866,'staticobjects/tcg/tcg_painting61_shadowmagic',1144),(15867,15867,'staticobjects/tcg/tcg_painting58_cherryblossom',1144),(15868,15868,'staticobjects/tcg/tcg_painting59_sacredgrove',1144),(15869,15869,'staticobjects/tcg/tcg_painting60_grimbelly',1144),(15870,15870,'staticobjects/_exp07/exp07_dun_plane_of_war_raid/pow_throne_orb',1144),(15871,15871,'accessories/wieldable_items/shields/exp08/exp08_shield_round_crystalline_skull',1144),(15872,15872,'_exp08/characters/tool_users/ulthork/ulthork_male_base',1144),(15873,15873,'staticobjects/soe_wallet/treasure_pile_gold_gems',1144),(15874,15874,'staticobjects/soe_wallet/treasure_pile_gold',1144),(15875,15875,'_exp08/characters/tool_users/ulthork/ulthork_male_grey',1144),(15876,15876,'_exp08/characters/tool_users/ulthork/ulthork_male_heavy01',1144),(15877,15877,'_exp08/characters/tool_users/ulthork/ulthork_male_tattoo',1144),(15878,15878,'_exp01/zones/objects/scrolls/drv_stand_scroll_lamp',1144),(15879,15879,'accessories/wearable_items/_exp08/barbarian_heritage_armor/snap_ons/barbarian_armband_large_left',1144),(15880,15880,'accessories/wearable_items/_exp08/barbarian_heritage_armor/snap_ons/barbarian_armband_large_right',1144),(15881,15881,'accessories/wearable_items/_exp08/barbarian_heritage_armor/snap_ons/barbarian_armband_left',1144),(15882,15882,'accessories/wearable_items/_exp08/barbarian_heritage_armor/snap_ons/barbarian_armband_right',1144),(15883,15883,'accessories/wearable_items/_exp08/barbarian_heritage_armor/snap_ons/barbarian_boot_cuff_left',1144),(15884,15884,'accessories/wearable_items/_exp08/barbarian_heritage_armor/snap_ons/barbarian_boot_cuff_right',1144),(15885,15885,'accessories/wearable_items/_exp08/barbarian_heritage_armor/snap_ons/barbarian_pauldron_left',1144),(15886,15886,'accessories/wearable_items/_exp08/barbarian_heritage_armor/snap_ons/barbarian_pauldron_right',1144),(15887,15887,'accessories/wearable_items/_exp08/barbarian_heritage_armor/snap_ons/belt',1144),(15888,15888,'accessories/wearable_items/_exp08/barbarian_heritage_armor/snap_ons/short_skirt',1144),(15889,15889,'accessories/wearable_items/_exp08/barbarian_heritage_armor/snap_ons/swivel_feather_01',1144),(15890,15890,'accessories/wearable_items/_exp08/barbarian_heritage_armor/snap_ons/swivel_fur_01',1144),(15891,15891,'accessories/wearable_items/_exp08/barbarian_heritage_armor/snap_ons/swivel_fur_02',1144),(15892,15892,'accessories/wearable_items/_exp08/barbarian_heritage_armor/chest',1144),(15893,15893,'accessories/wieldable_items/shields/exp08/exp08_shield_pvp',1144),(15894,15894,'accessories/wieldable_items/weapons/exp08/1h_crush/exp07_1h_crush_pvp',1144),(15895,15895,'accessories/wearable_items/_exp08/barbarian_heritage_armor/feet_barbarian_heritage',1144),(15896,15896,'accessories/wearable_items/_exp08/barbarian_heritage_armor/hands',1144),(15897,15897,'accessories/wearable_items/_exp08/barbarian_heritage_armor/head_barbarian_heritage',1144),(15898,15898,'accessories/wearable_items/_exp08/barbarian_heritage_armor/legs_short_skirt_base',1144),(15899,15899,'accessories/wearable_items/_exp08/barbarian_heritage_armor/shoulders_armbands_only',1144),(15900,15900,'accessories/wearable_items/_exp08/barbarian_heritage_armor/shoulders_barbarian_heritage_pauldrons',1144),(15901,15901,'staticobjects/housing_rewards/housing_trophy_gold',1144),(15902,15902,'accessories/wieldable_items/weapons/exp08/1h_crush/exp08_pvp_swivel_hook',1144),(15903,15903,'accessories/wieldable_items/weapons/exp08/1h_pierce/exp08_1h_dagger_pvp',1144),(15904,15904,'accessories/wieldable_items/weapons/exp08/1h_sword/exp07_1hs_sword_pvp',1144),(15905,15905,'accessories/wearable_items/_exp08/barbarian_heritage_armor/snap_ons/shoulders',1144),(15906,15906,'creatures/monsters/stagg_glass_giant',1144),(15907,15907,'_exp08/characters/tool_users/ulthork/ulthork_male_shaman01',1144),(15908,15908,'_exp08/characters/tool_users/ulthork/ulthork_swivel_skull',1144),(15909,15909,'ec/pc/human/human_male_normal_test',1144),(15910,15910,'accessories/wearable_items/_exp08/barbarian_heritage_armor/snap_ons/barbarian_heritage_fur_collar',1144),(15911,15911,'accessories/wearable_items/cloak/exp08/cloak_barbarian_heritage',1144),(15912,15912,'_exp08/characters/tool_users/chitari/chitari_male_base',1144),(15913,15913,'accessories/wearable_items/_exp08/pvp_armor/chain/chest',1144),(15914,15914,'accessories/wearable_items/_exp08/pvp_armor/chain/feet',1144),(15915,15915,'accessories/wearable_items/_exp08/pvp_armor/chain/forearms',1144),(15916,15916,'accessories/wearable_items/_exp08/pvp_armor/chain/forearms_epic',1144),(15917,15917,'accessories/wearable_items/_exp08/pvp_armor/chain/hands',1144),(15918,15918,'accessories/wearable_items/_exp08/pvp_armor/chain/head',1144),(15919,15919,'accessories/wearable_items/_exp08/pvp_armor/chain/head_epic',1144),(15920,15920,'accessories/wearable_items/_exp08/pvp_armor/chain/legs',1144),(15921,15921,'accessories/wearable_items/_exp08/pvp_armor/chain/legs_epic',1144),(15922,15922,'accessories/wearable_items/_exp08/pvp_armor/chain/legs_noskirt',1144),(15923,15923,'accessories/wearable_items/_exp08/pvp_armor/chain/shoulders',1144),(15924,15924,'accessories/wearable_items/_exp08/pvp_armor/chain/shoulders_epic',1144),(15925,15925,'accessories/wearable_items/_exp08/pvp_armor/chain/skirt',1144),(15926,15926,'accessories/wearable_items/_exp08/pvp_armor/gi/chest',1144),(15927,15927,'accessories/wearable_items/_exp08/pvp_armor/gi/feet',1144),(15928,15928,'accessories/wearable_items/_exp08/pvp_armor/gi/legs',1144),(15929,15929,'accessories/wearable_items/_exp08/pvp_armor/gi/shoulders',1144),(15930,15930,'accessories/wearable_items/_exp08/pvp_armor/gi/shoulders_epic',1144),(15931,15931,'accessories/wearable_items/_exp08/pvp_armor/gi/skirt',1144),(15932,15932,'accessories/wearable_items/_exp08/pvp_armor/gi/female/chest',1144),(15933,15933,'accessories/wearable_items/_exp08/pvp_armor/gi/female/feet',1144),(15934,15934,'accessories/wearable_items/_exp08/pvp_armor/gi/female/legs',1144),(15935,15935,'accessories/wearable_items/_exp08/pvp_armor/gi/female/shoulders',1144),(15936,15936,'accessories/wearable_items/_exp08/pvp_armor/gi/female/skirt',1144),(15937,15937,'accessories/wearable_items/_exp08/pvp_armor/gi/male/chest',1144),(15938,15938,'accessories/wearable_items/_exp08/pvp_armor/gi/male/feet',1144),(15939,15939,'accessories/wearable_items/_exp08/pvp_armor/gi/male/legs',1144),(15940,15940,'accessories/wearable_items/_exp08/pvp_armor/gi/male/shoulders',1144),(15941,15941,'accessories/wearable_items/_exp08/pvp_armor/gi/male/skirt',1144),(15942,15942,'accessories/wearable_items/_exp08/pvp_armor/heavy/chest',1144),(15943,15943,'accessories/wearable_items/_exp08/pvp_armor/heavy/feet',1144),(15944,15944,'accessories/wearable_items/_exp08/pvp_armor/heavy/forearms',1144),(15945,15945,'accessories/wearable_items/_exp08/pvp_armor/heavy/hands',1144),(15946,15946,'accessories/wearable_items/_exp08/pvp_armor/heavy/head',1144),(15947,15947,'accessories/wearable_items/_exp08/pvp_armor/heavy/head_epic',1144),(15948,15948,'accessories/wearable_items/_exp08/pvp_armor/heavy/left',1144),(15949,15949,'accessories/wearable_items/_exp08/pvp_armor/heavy/legs',1144),(15950,15950,'accessories/wearable_items/_exp08/pvp_armor/heavy/legs_epic',1144),(15951,15951,'accessories/wearable_items/_exp08/pvp_armor/heavy/legs_noskirt',1144),(15952,15952,'accessories/wearable_items/_exp08/pvp_armor/heavy/right',1144),(15953,15953,'accessories/wearable_items/_exp08/pvp_armor/heavy/shoulders',1144),(15954,15954,'accessories/wearable_items/_exp08/pvp_armor/heavy/shoulders_epic',1144),(15955,15955,'accessories/wearable_items/_exp08/pvp_armor/heavy/shoulders-nopauldrons',1144),(15956,15956,'accessories/wearable_items/_exp08/pvp_armor/heavy/skirt',1144),(15957,15957,'accessories/wearable_items/_exp08/pvp_armor/leather/chest',1144),(15958,15958,'accessories/wearable_items/_exp08/pvp_armor/leather/feet',1144),(15959,15959,'accessories/wearable_items/_exp08/pvp_armor/leather/forearms',1144),(15960,15960,'accessories/wearable_items/_exp08/pvp_armor/leather/hands',1144),(15961,15961,'accessories/wearable_items/_exp08/pvp_armor/leather/head',1144),(15962,15962,'accessories/wearable_items/_exp08/pvp_armor/leather/head_epic',1144),(15963,15963,'accessories/wearable_items/_exp08/pvp_armor/leather/legs',1144),(15964,15964,'accessories/wearable_items/_exp08/pvp_armor/leather/legs_noskirt',1144),(15965,15965,'accessories/wearable_items/_exp08/pvp_armor/leather/shoulders',1144),(15966,15966,'accessories/wearable_items/_exp08/pvp_armor/leather/shoulders_epic',1144),(15967,15967,'accessories/wearable_items/_exp08/pvp_armor/leather/skirt',1144),(15968,15968,'accessories/wearable_items/_exp08/pvp_armor/robe/chest',1144),(15969,15969,'accessories/wearable_items/_exp08/pvp_armor/robe/chest_epic',1144),(15970,15970,'accessories/wearable_items/_exp08/pvp_armor/robe/feet',1144),(15971,15971,'accessories/wearable_items/_exp08/pvp_armor/robe/hands',1144),(15972,15972,'accessories/wearable_items/_exp08/pvp_armor/robe/head_collar',1144),(15973,15973,'accessories/wearable_items/_exp08/pvp_armor/robe/head_hood',1144),(15974,15974,'accessories/wearable_items/_exp08/pvp_armor/robe/pants',1144),(15975,15975,'accessories/wearable_items/_exp08/pvp_armor/robe/skirt',1144),(15976,15976,'accessories/wearable_items/_exp08/pvp_armor/snapons/bicep_gi_left',1144),(15977,15977,'accessories/wearable_items/_exp08/pvp_armor/snapons/bicep_gi_right',1144),(15978,15978,'accessories/wearable_items/_exp08/pvp_armor/snapons/bicep_robe_left',1144),(15979,15979,'accessories/wearable_items/_exp08/pvp_armor/snapons/bicep_robe_right',1144),(15980,15980,'accessories/wearable_items/_exp08/pvp_armor/snapons/forearm_chain_left',1144),(15981,15981,'accessories/wearable_items/_exp08/pvp_armor/snapons/forearm_chain_right',1144),(15982,15982,'accessories/wearable_items/_exp08/pvp_armor/snapons/forearm_gi_left',1144),(15983,15983,'accessories/wearable_items/_exp08/pvp_armor/snapons/forearm_gi_right',1144),(15984,15984,'accessories/wearable_items/_exp08/pvp_armor/snapons/forearm_left',1144),(15985,15985,'accessories/wearable_items/_exp08/pvp_armor/snapons/forearm_right',1144),(15986,15986,'accessories/wearable_items/_exp08/pvp_armor/snapons/pauldron_chain_left',1144),(15987,15987,'accessories/wearable_items/_exp08/pvp_armor/snapons/pauldron_chain_right',1144),(15988,15988,'accessories/wearable_items/_exp08/pvp_armor/snapons/pauldron_leather_left',1144),(15989,15989,'accessories/wearable_items/_exp08/pvp_armor/snapons/pauldron_leather_right',1144),(15990,15990,'accessories/wearable_items/_exp08/pvp_armor/snapons/pauldron_left',1144),(15991,15991,'accessories/wearable_items/_exp08/pvp_armor/snapons/pauldron_right',1144),(15992,15992,'accessories/wearable_items/_exp08/pvp_armor/snapons/pauldron_robe_left',1144),(15993,15993,'accessories/wearable_items/_exp08/pvp_armor/snapons/pauldron_robe_right',1144),(15994,15994,'accessories/wearable_items/_exp08/pvp_armor/snapons/pauldrons_lower_left',1144),(15995,15995,'accessories/wearable_items/_exp08/pvp_armor/snapons/pauldrons_lower_right',1144),(15996,15996,'accessories/wearable_items/_exp08/pvp_armor/snapons/pvp_armor_head',1144),(15997,15997,'accessories/wearable_items/_exp08/pvp_armor/snapons/pvp_armor_head_epic',1144),(15998,15998,'accessories/wearable_items/_exp08/pvp_armor/snapons/pvp_chain_head_epic',1144),(15999,15999,'accessories/wearable_items/_exp08/pvp_armor/snapons/pvp_leather_head_epic',1144),(16000,16000,'accessories/wearable_items/_exp08/pvp_armor/snapons/ramhorn_left',1144),(16001,16001,'accessories/wearable_items/_exp08/pvp_armor/snapons/ramhorn_right',1144),(16002,16002,'accessories/wearable_items/_exp08/pvp_armor/snapons/shin_chain_left',1144),(16003,16003,'accessories/wearable_items/_exp08/pvp_armor/snapons/shin_chain_right',1144),(16004,16004,'accessories/wearable_items/_exp08/pvp_armor/snapons/shin_left',1144),(16005,16005,'accessories/wearable_items/_exp08/pvp_armor/snapons/shin_right',1144),(16006,16006,'staticobjects/_exp07/exp07_dun_plane_of_war_raid/pow_rallos_chest',1144),(16007,16007,'accessories/wearable_items/_exp08/pvp_armor/gi/head/head',1144),(16008,16008,'accessories/wearable_items/_exp08/pvp_armor/gi/head',1144),(16009,16009,'_exp08/characters/tool_users/chitari/chitari_male_dark',1144),(16010,16010,'_exp08/characters/tool_users/chitari/chitari_male_heavy01',1144),(16011,16011,'ec/pc/human/human_male_2011/human_male_base',1144),(16012,16012,'accessories/wearable_items/_exp08/short_skirts/tintable_01/head_gothic_helmet',1144),(16013,16013,'accessories/wearable_items/_exp08/short_skirts/tintable_01/shoulders_pauldrons',1144),(16014,16014,'accessories/wearable_items/_exp08/short_skirts/tintable_01/snap_ons/belt_buckle_gothic',1144),(16015,16015,'_exp03/characters/tool_users/clockwork_necro_soldier',1144),(16016,16016,'_exp03/characters/tool_users/clockwork_necro_gnome_female',1144),(16017,16017,'accessories/wearable_items/_exp08/short_skirts/tintable_01/snap_ons/pauldron_gothic_left',1144),(16018,16018,'accessories/wearable_items/_exp08/short_skirts/tintable_01/snap_ons/pauldron_gothic_right',1144),(16019,16019,'_exp03/characters/tool_users/clockwork_necro_gnome_male',1144),(16020,16020,'_exp03/characters/tool_users/clockwork_necro_protector',1144),(16021,16021,'ec/pc/human/human_male_2011/human_male_white_test',1144),(16022,16022,'ec/pc/human/human_male_2011/human_male_normal_black_test',1144),(16023,16023,'accessories/wieldable_items/weapons/exp08/2h_sword/exp07_2hs_sword_pvp',1144),(16024,16024,'accessories/wieldable_items/weapons/exp08/2h_sword/exp08_pvp_swivel',1144),(16025,16025,'accessories/wieldable_items/weapons/exp08/fist/exp07_fist_pvp',1144),(16026,16026,'accessories/wieldable_items/weapons/exp08/staff/exp08_2h_staff_fighter_pvp',1144),(16027,16027,'accessories/wieldable_items/weapons/exp08/staff/exp08_2h_staff_mage_pvp',1144),(16028,16028,'accessories/wearable_items/_exp08/ralloszek_armor/accessories/chain_head_epic',1144),(16029,16029,'accessories/wearable_items/_exp08/ralloszek_armor/accessories/forearm_left',1144),(16030,16030,'accessories/wearable_items/_exp08/ralloszek_armor/accessories/forearm_right',1144),(16031,16031,'accessories/wearable_items/_exp08/ralloszek_armor/accessories/leather_head_epic',1144),(16032,16032,'accessories/wearable_items/_exp08/ralloszek_armor/accessories/pauldron_alt_left',1144),(16033,16033,'accessories/wearable_items/_exp08/ralloszek_armor/accessories/pauldron_alt_right',1144),(16034,16034,'accessories/wearable_items/_exp08/ralloszek_armor/accessories/pauldron_left',1144),(16035,16035,'accessories/wearable_items/_exp08/ralloszek_armor/accessories/pauldron_right',1144),(16036,16036,'accessories/wearable_items/_exp08/ralloszek_armor/accessories/ramhorn_left',1144),(16037,16037,'accessories/wearable_items/_exp08/ralloszek_armor/accessories/ramhorn_right',1144),(16038,16038,'accessories/wearable_items/_exp08/ralloszek_armor/accessories/shin_left',1144),(16039,16039,'accessories/wearable_items/_exp08/ralloszek_armor/accessories/shin_right',1144),(16040,16040,'accessories/wearable_items/_exp08/ralloszek_armor/accessories/vanguard_head_epic',1144),(16041,16041,'accessories/wearable_items/_exp08/ralloszek_armor/chain/chest',1144),(16042,16042,'accessories/wearable_items/_exp08/ralloszek_armor/chain/feet',1144),(16043,16043,'accessories/wearable_items/_exp08/ralloszek_armor/chain/forearms',1144),(16044,16044,'accessories/wearable_items/_exp08/ralloszek_armor/chain/hands',1144),(16045,16045,'accessories/wearable_items/_exp08/ralloszek_armor/chain/head',1144),(16046,16046,'accessories/wearable_items/_exp08/ralloszek_armor/chain/head_epic',1144),(16047,16047,'accessories/wearable_items/_exp08/ralloszek_armor/chain/legs',1144),(16048,16048,'accessories/wearable_items/_exp08/ralloszek_armor/chain/legs_epic',1144),(16049,16049,'accessories/wearable_items/_exp08/ralloszek_armor/chain/legs_noskirt',1144),(16050,16050,'accessories/wearable_items/_exp08/ralloszek_armor/chain/pauldron_alt_left',1144),(16051,16051,'accessories/wearable_items/_exp08/ralloszek_armor/chain/pauldron_alt_right',1144),(16052,16052,'accessories/wearable_items/_exp08/ralloszek_armor/chain/shoulders',1144),(16053,16053,'accessories/wearable_items/_exp08/ralloszek_armor/chain/shoulders_epic',1144),(16054,16054,'accessories/wearable_items/_exp08/ralloszek_armor/chain/skirt',1144),(16055,16055,'accessories/wearable_items/_exp08/ralloszek_armor/leather/chest',1144),(16056,16056,'accessories/wearable_items/_exp08/ralloszek_armor/leather/feet',1144),(16057,16057,'accessories/wearable_items/_exp08/ralloszek_armor/leather/forearms',1144),(16058,16058,'accessories/wearable_items/_exp08/ralloszek_armor/leather/hands',1144),(16059,16059,'accessories/wearable_items/_exp08/ralloszek_armor/leather/head',1144),(16060,16060,'accessories/wearable_items/_exp08/ralloszek_armor/leather/head_epic',1144),(16061,16061,'accessories/wearable_items/_exp08/ralloszek_armor/leather/legs',1144),(16062,16062,'accessories/wearable_items/_exp08/ralloszek_armor/leather/legs_noskirt',1144),(16063,16063,'accessories/wearable_items/_exp08/ralloszek_armor/leather/pauldron_alt_left',1144),(16064,16064,'accessories/wearable_items/_exp08/ralloszek_armor/leather/pauldron_alt_right',1144),(16065,16065,'accessories/wearable_items/_exp08/ralloszek_armor/leather/shoulders',1144),(16066,16066,'accessories/wearable_items/_exp08/ralloszek_armor/leather/shoulders_epic',1144),(16067,16067,'accessories/wearable_items/_exp08/ralloszek_armor/leather/skirt',1144),(16068,16068,'accessories/wearable_items/_exp08/ralloszek_armor/robe/chest',1144),(16069,16069,'accessories/wearable_items/_exp08/ralloszek_armor/robe/chest_epic',1144),(16070,16070,'accessories/wearable_items/_exp08/ralloszek_armor/robe/feet',1144),(16071,16071,'accessories/wearable_items/_exp08/ralloszek_armor/robe/hands',1144),(16072,16072,'accessories/wearable_items/_exp08/ralloszek_armor/robe/head_collar',1144),(16073,16073,'accessories/wearable_items/_exp08/ralloszek_armor/robe/head_hood',1144),(16074,16074,'accessories/wearable_items/_exp08/ralloszek_armor/robe/pants',1144),(16075,16075,'accessories/wearable_items/_exp08/ralloszek_armor/robe/pauldron_alt_left',1144),(16076,16076,'accessories/wearable_items/_exp08/ralloszek_armor/robe/pauldron_alt_right',1144),(16077,16077,'accessories/wearable_items/_exp08/ralloszek_armor/robe/skirt',1144),(16078,16078,'accessories/wearable_items/_exp08/ralloszek_armor/vanguard/chest',1144),(16079,16079,'accessories/wearable_items/_exp08/ralloszek_armor/vanguard/feet',1144),(16080,16080,'accessories/wearable_items/_exp08/ralloszek_armor/vanguard/forearms',1144),(16081,16081,'accessories/wearable_items/_exp08/ralloszek_armor/vanguard/hands',1144),(16082,16082,'accessories/wearable_items/_exp08/ralloszek_armor/vanguard/head',1144),(16083,16083,'accessories/wearable_items/_exp08/ralloszek_armor/vanguard/head_epic',1144),(16084,16084,'accessories/wearable_items/_exp08/ralloszek_armor/vanguard/left',1144),(16085,16085,'accessories/wearable_items/_exp08/ralloszek_armor/vanguard/legs',1144),(16086,16086,'accessories/wearable_items/_exp08/ralloszek_armor/vanguard/legs_epic',1144),(16087,16087,'accessories/wearable_items/_exp08/ralloszek_armor/vanguard/legs_noskirt',1144),(16088,16088,'accessories/wearable_items/_exp08/ralloszek_armor/vanguard/right',1144),(16089,16089,'accessories/wearable_items/_exp08/ralloszek_armor/vanguard/shoulders',1144),(16090,16090,'accessories/wearable_items/_exp08/ralloszek_armor/vanguard/shoulders_epic',1144),(16091,16091,'accessories/wearable_items/_exp08/ralloszek_armor/vanguard/shoulders_nopauldrons',1144),(16092,16092,'accessories/wearable_items/_exp08/ralloszek_armor/vanguard/skirt',1144),(16093,16093,'accessories/wearable_items/_exp08/ralloszek_armor/vanguard/upperchest',1144),(16094,16094,'accessories/wieldable_items/weapons/exp08/1h_crush/1h_hammer_rallos_zek',1144),(16095,16095,'accessories/wieldable_items/weapons/exp08/1h_crush/club_rallos_zek',1144),(16096,16096,'accessories/wieldable_items/weapons/exp08/1h_crush/mace_rallos_zek',1144),(16097,16097,'accessories/wieldable_items/weapons/exp08/1h_pierce/exp08_dagger_rallos_zek',1144),(16098,16098,'accessories/wearable_items/cloak/exp08/zek_class_cloaks/ralloszek_cloak1',1144),(16099,16099,'accessories/wieldable_items/weapons/exp08/1h_sword/exp08_sword_katana_rallos_zek',1144),(16100,16100,'accessories/wieldable_items/weapons/exp08/2h_crush/exp08_2hc_hammer_rallos_zek',1144),(16101,16101,'accessories/wieldable_items/weapons/exp08/2h_sword/exp08_2h_sword_rallos_zek',1144),(16102,16102,'accessories/wieldable_items/weapons/exp08/bow/exp08_bow_rallos_zek',1144),(16103,16103,'accessories/wieldable_items/weapons/exp08/staff/exp08_staff_rallos_zek',1144),(16104,16104,'accessories/wieldable_items/weapons/exp08/talisman/book_rallos_zek',1144),(16105,16105,'accessories/wearable_items/cloak/exp08/zek_class_cloaks/ralloszek_cloak2',1144),(16106,16106,'accessories/wearable_items/cloak/exp08/zek_class_cloaks/ralloszek_cloak3',1144),(16107,16107,'accessories/wearable_items/cloak/exp08/zek_class_cloaks/ralloszek_cloak4',1144),(16108,16108,'accessories/wearable_items/cloak/exp08/zek_class_cloaks/ralloszek_cloak5',1144),(16109,16109,'accessories/wearable_items/cloak/exp08/zek_class_cloaks/ralloszek_cloak6',1144),(16110,16110,'accessories/wearable_items/cloak/exp08/zek_class_cloaks/sullonzek_cloak1',1144),(16111,16111,'accessories/wearable_items/cloak/exp08/zek_class_cloaks/sullonzek_cloak2',1144),(16112,16112,'accessories/wearable_items/cloak/exp08/zek_class_cloaks/sullonzek_cloak3',1144),(16113,16113,'accessories/wearable_items/cloak/exp08/zek_class_cloaks/sullonzek_cloak4',1144),(16114,16114,'accessories/wearable_items/cloak/exp08/zek_class_cloaks/sullonzek_cloak5',1144),(16115,16115,'accessories/wearable_items/cloak/exp08/zek_class_cloaks/sullonzek_cloak6',1144),(16116,16116,'accessories/wearable_items/cloak/exp08/zek_class_cloaks/tallonzek_cloak1',1144),(16117,16117,'accessories/wearable_items/cloak/exp08/zek_class_cloaks/tallonzek_cloak2',1144),(16118,16118,'accessories/wearable_items/cloak/exp08/zek_class_cloaks/tallonzek_cloak3',1144),(16119,16119,'accessories/wearable_items/cloak/exp08/zek_class_cloaks/tallonzek_cloak4',1144),(16120,16120,'accessories/wearable_items/cloak/exp08/zek_class_cloaks/tallonzek_cloak5',1144),(16121,16121,'accessories/wearable_items/cloak/exp08/zek_class_cloaks/tallonzek_cloak6',1144),(16122,16122,'accessories/wearable_items/cloak/exp08/zek_class_cloaks/vallonzek_cloak1',1144),(16123,16123,'accessories/wearable_items/cloak/exp08/zek_class_cloaks/vallonzek_cloak2',1144),(16124,16124,'accessories/wearable_items/cloak/exp08/zek_class_cloaks/vallonzek_cloak3',1144),(16125,16125,'accessories/wearable_items/cloak/exp08/zek_class_cloaks/vallonzek_cloak4',1144),(16126,16126,'accessories/wearable_items/cloak/exp08/zek_class_cloaks/vallonzek_cloak5',1144),(16127,16127,'accessories/wearable_items/cloak/exp08/zek_class_cloaks/vallonzek_cloak6',1144),(16128,16128,'accessories/wieldable_items/shields/exp08/exp08_shield_celestial_rallos_zek',1144),(16129,16129,'accessories/wieldable_items/shields/exp08/exp08_shield_celestial_rallos_zek_gem',1144),(16130,16130,'creatures/mounts/lynx_mount/white_cat_mount',1144),(16131,16131,'accessories/wearable_items/profesion_hats/firiona_vie_tiara_lon/head_opal_darkbriar_tiara',1144),(16132,16132,'accessories/wearable_items/_exp08/opal_darkbriar/robe/chest',1144),(16133,16133,'accessories/wearable_items/_exp08/opal_darkbriar/robe/feet',1144),(16134,16134,'accessories/wearable_items/_exp08/opal_darkbriar/robe/hands',1144),(16135,16135,'accessories/wearable_items/_exp08/opal_darkbriar/robe/head_collar',1144),(16136,16136,'accessories/wearable_items/_exp08/opal_darkbriar/robe/head_hood',1144),(16137,16137,'accessories/wearable_items/_exp08/opal_darkbriar/robe/pants',1144),(16138,16138,'accessories/wearable_items/_exp08/opal_darkbriar/robe/skirt',1144),(16139,16139,'accessories/wieldable_items/weapons/exp08/1h_crush/wand_opal_darkbriar',1144),(16140,16140,'accessories/wieldable_items/weapons/exp08/2h_sword/exp07_2h_sword_opal_darkbriar',1144),(16141,16141,'accessories/wieldable_items/weapons/exp08/staff/exp08_staff_opal_darkbriar',1144),(16142,16142,'accessories/wearable_items/_exp08/opal_darkbriar/robe_alt/chest',1144),(16143,16143,'accessories/wearable_items/_exp08/opal_darkbriar/robe_alt/feet',1144),(16144,16144,'accessories/wearable_items/_exp08/opal_darkbriar/robe_alt/hands',1144),(16145,16145,'accessories/wearable_items/_exp08/opal_darkbriar/robe_alt/head_collar',1144),(16146,16146,'accessories/wearable_items/_exp08/opal_darkbriar/robe_alt/head_hood',1144),(16147,16147,'accessories/wearable_items/_exp08/opal_darkbriar/robe_alt/pants',1144),(16148,16148,'accessories/wearable_items/_exp08/opal_darkbriar/robe_alt/skirt',1144),(16149,16149,'accessories/wearable_items/profesion_hats/beastlord/head_beastlord_helmet_lion',1144),(16150,16150,'accessories/wearable_items/profesion_hats/beastlord/head_beastlord_helmet_panther',1144),(16151,16151,'accessories/wearable_items/profesion_hats/beastlord/head_beastlord_helmet_white_tiger',1144),(16152,16152,'_exp08/characters/monsters/exp04raptor/raptor',1144),(16153,16153,'_exp08/characters/tool_users/freeport_knight/freeport_knight_base',1144),(16154,16154,'accessories/wieldable_items/weapons/exp08/1h_crush/exp08_club_peppermint',1144),(16155,16155,'accessories/wieldable_items/weapons/exp08/1h_pierce/exp08_dagger_peppermint_shiv',1144),(16156,16156,'accessories/wieldable_items/weapons/exp08/1h_sword/exp08_sword_peppermint_blade',1144),(16157,16157,'accessories/wieldable_items/weapons/exp08/bow/exp08_shortbow_peppermint',1144),(16158,16158,'accessories/wieldable_items/weapons/exp08/staff/exp08_staff_peppermint',1144),(16159,16159,'creatures/tu/holgresh_male_base',1144),(16160,16160,'accessories/wieldable_items/weapons/exp08/1h_crush/exp08_club_peppermint_spearmint',1144),(16161,16161,'accessories/wieldable_items/weapons/exp08/1h_crush/exp08_club_peppermint_evilgreen',1144),(16162,16162,'accessories/wieldable_items/weapons/exp08/1h_crush/exp08_club_peppermint_evilpurple',1144),(16163,16163,'accessories/wieldable_items/weapons/exp08/1h_pierce/exp08_dagger_peppermint_shiv_evilgreen',1144),(16164,16164,'accessories/wieldable_items/weapons/exp08/1h_pierce/exp08_dagger_peppermint_shiv_evilpurple',1144),(16165,16165,'accessories/wieldable_items/weapons/exp08/1h_pierce/exp08_dagger_peppermint_shiv_spearmint',1144),(16166,16166,'accessories/wieldable_items/weapons/exp08/1h_sword/exp08_sword_peppermint_blade_evilpurple',1144),(16167,16167,'accessories/wieldable_items/weapons/exp08/1h_sword/exp08_sword_peppermint_blade_evilgreen',1144),(16168,16168,'accessories/wieldable_items/weapons/exp08/1h_sword/exp08_sword_peppermint_blade_spearmint',1144),(16169,16169,'accessories/wieldable_items/weapons/exp08/bow/exp08_shortbow_peppermint_evilpurple',1144),(16170,16170,'accessories/wieldable_items/weapons/exp08/bow/exp08_shortbow_peppermint_evilgreen',1144),(16171,16171,'accessories/wieldable_items/weapons/exp08/bow/exp08_shortbow_peppermint_spearmint',1144),(16172,16172,'accessories/wieldable_items/weapons/exp08/staff/exp08_staff_peppermint_evilpurple',1144),(16173,16173,'accessories/wieldable_items/weapons/exp08/staff/exp08_staff_peppermint_evilgreen',1144),(16174,16174,'accessories/wieldable_items/weapons/exp08/staff/exp08_staff_peppermint_spearmint',1144),(16175,16175,'accessories/wieldable_items/weapons/exp08/fist/exp08_fist_beastlord_blades',1144),(16176,16176,'_exp08/characters/monsters/kerafyrm/kerafyrm',1144),(16177,16177,'accessories/wieldable_items/weapons/exp08/2h_crush/exp08_2h_crush_steinhammer',1144),(16178,16178,'accessories/wieldable_items/weapons/exp08/2h_crush/exp08_2h_crush_steinhammer_lid',1144),(16179,16179,'staticobjects/panels/dpo_panel_stainedglass_orange',1144),(16180,16180,'staticobjects/panels/dpo_panel_stainedglass_yellow',1144),(16181,16181,'creatures/mounts/horse_demon/horse_demon_silver',1144),(16182,16182,'creatures/mounts/horse_demon/swivels/horse_demon_swivel_chain',1144),(16183,16183,'creatures/mounts/horse_demon/swivels/horse_demon_swivel_skull',1144),(16184,16184,'accessories/wearable_items/profesion_hats/pirate/pirate_captain/head_pirate_admiral',1144),(16185,16185,'accessories/wearable_items/profesion_hats/pirate/pirate_captain/head_pirate_blue',1144),(16186,16186,'accessories/wearable_items/profesion_hats/pirate/pirate_captain/head_pirate_captain',1144),(16187,16187,'accessories/wearable_items/profesion_hats/pirate/pirate_captain/head_pirate_green',1144),(16188,16188,'accessories/wearable_items/profesion_hats/pirate/pirate_captain/head_pirate_tintable',1144),(16189,16189,'accessories/wearable_items/profesion_hats/pirate/pirate_captain/snap_ons/coin_swivel',1144),(16190,16190,'accessories/wearable_items/profesion_hats/pirate/pirate_captain/snap_ons/ring_swivel',1144),(16191,16191,'accessories/wearable_items/profesion_hats/pirate/pirate_captain/snap_ons/skull_swivel',1144),(16192,16192,'_exp08/characters/tool_users/chitari/chitari_male_light01',1144),(16193,16193,'_exp08/characters/tool_users/chitari/chitari_male_medium01',1144),(16194,16194,'_exp08/characters/tool_users/chitari/chitari_male_medium02',1144),(16195,16195,'creatures/mounts/player_wing/player_wing_mount',1144),(16196,16196,'_exp08/characters/monsters/drake/drake_black',1144),(16197,16197,'_exp08/characters/monsters/drake/drake_blue',1144),(16198,16198,'_exp08/characters/monsters/drake/drake_green',1144),(16199,16199,'_exp08/characters/monsters/drake/drake_red',1144),(16200,16200,'_exp08/characters/monsters/drake/drake1',1144),(16201,16201,'_exp08/characters/tool_users/zombie_orc/zombie_orc',1144),(16202,16202,'accessories/wearable_items/cloak/exp08/cloak_squirrel_skunk_evil',1144),(16203,16203,'accessories/wearable_items/cloak/exp08/cloak_squirrel_skunk_evil_inset',1144),(16204,16204,'creatures/mounts/player_wing/player_wing_angel',1144),(16205,16205,'accessories/wearable_items/_exp08/assassin_soul_armor/chest',1144),(16206,16206,'accessories/wearable_items/_exp08/assassin_soul_armor/feet',1144),(16207,16207,'accessories/wearable_items/_exp08/assassin_soul_armor/forearms',1144),(16208,16208,'accessories/wearable_items/_exp08/assassin_soul_armor/hands',1144),(16209,16209,'accessories/wearable_items/_exp08/assassin_soul_armor/head',1144),(16210,16210,'accessories/wearable_items/_exp08/assassin_soul_armor/legs',1144),(16211,16211,'accessories/wearable_items/_exp08/assassin_soul_armor/legs_noskirt',1144),(16212,16212,'accessories/wearable_items/_exp08/assassin_soul_armor/shoulders',1144),(16213,16213,'accessories/wearable_items/_exp08/assassin_soul_armor/skirt',1144),(16214,16214,'accessories/wearable_items/snapons/armbands/shoulders_armband_fur_02_left',1144),(16215,16215,'accessories/wearable_items/snapons/armbands/shoulders_armband_fur_02_right',1144),(16216,16216,'ec/pc/fae_wings/fae_angel',1144),(16217,16217,'creatures/monsters/hawk_optimized',1190),(16218,16218,'accessories/wearable_items/cloak/exp08/cloak_beastlord',1190),(16219,16219,'accessories/wearable_items/_exp08/truespirit/chest',1190),(16220,16220,'accessories/wearable_items/_exp08/truespirit/feet',1190),(16221,16221,'accessories/wearable_items/_exp08/truespirit/hands',1190),(16222,16222,'accessories/wearable_items/_exp08/truespirit/head_collar',1190),(16223,16223,'accessories/wearable_items/_exp08/truespirit/head_hood',1190),(16224,16224,'accessories/wearable_items/_exp08/truespirit/pants',1190),(16225,16225,'accessories/wearable_items/_exp08/truespirit/skirt',1190),(16226,16226,'accessories/wearable_items/_exp08/truespirit2/chest',1190),(16227,16227,'accessories/wearable_items/_exp08/truespirit2/feet',1190),(16228,16228,'accessories/wearable_items/_exp08/truespirit2/hands',1190),(16229,16229,'accessories/wearable_items/_exp08/truespirit2/head_collar',1190),(16230,16230,'accessories/wearable_items/_exp08/truespirit2/head_hood',1190),(16231,16231,'accessories/wearable_items/_exp08/truespirit2/pants',1190),(16232,16232,'accessories/wearable_items/_exp08/truespirit2/skirt',1190),(16233,16233,'accessories/wearable_items/profesion_hats/firiona_vie_tiara_lon/head_tiara_evil',1190),(16234,16234,'accessories/wearable_items/_exp08/lon_card_outfit/chest',1190),(16235,16235,'accessories/wearable_items/_exp08/lon_card_outfit/hands',1190),(16236,16236,'accessories/wearable_items/_exp08/lon_card_outfit/legs',1190),(16237,16237,'creatures/mounts/lynx_mount/lynx_mount_white_tintable_saddle',1190),(16238,16238,'accessories/wearable_items/_exp08/freeport_guard/chain/skirt',1190),(16239,16239,'accessories/wearable_items/_exp08/freeport_guard/chain/chest',1190),(16240,16240,'accessories/wearable_items/_exp08/freeport_guard/chain/cowl',1190),(16241,16241,'accessories/wearable_items/_exp08/freeport_guard/chain/feet',1190),(16242,16242,'accessories/wearable_items/_exp08/freeport_guard/chain/forearms',1190),(16243,16243,'accessories/wearable_items/_exp08/freeport_guard/chain/freeport_head_snapon',1190),(16244,16244,'accessories/wearable_items/_exp08/freeport_guard/chain/hands',1190),(16245,16245,'accessories/wearable_items/_exp08/freeport_guard/chain/head',1190),(16246,16246,'accessories/wearable_items/_exp08/freeport_guard/chain/legs',1190),(16247,16247,'accessories/wearable_items/_exp08/freeport_guard/chain/legs_noskirt',1190),(16248,16248,'accessories/wearable_items/_exp08/freeport_guard/chain/shoulders',1190),(16249,16249,'accessories/wearable_items/_exp08/freeport_guard/chain/shoulders_snapon_epic',1190),(16250,16250,'accessories/wearable_items/_exp08/freeport_guard/leather/skirt',1190),(16251,16251,'accessories/wearable_items/_exp08/freeport_guard/leather/chest',1190),(16252,16252,'accessories/wearable_items/_exp08/freeport_guard/leather/cowl',1190),(16253,16253,'accessories/wearable_items/_exp08/freeport_guard/leather/feet',1190),(16254,16254,'accessories/wearable_items/_exp08/freeport_guard/leather/forearms',1190),(16255,16255,'accessories/wearable_items/_exp08/freeport_guard/leather/freeport_head_snapon',1190),(16256,16256,'accessories/wearable_items/_exp08/freeport_guard/leather/hands',1190),(16257,16257,'accessories/wearable_items/_exp08/freeport_guard/leather/head',1190),(16258,16258,'accessories/wearable_items/_exp08/freeport_guard/leather/legs',1190),(16259,16259,'accessories/wearable_items/_exp08/freeport_guard/leather/legs_noskirt',1190),(16260,16260,'accessories/wearable_items/_exp08/freeport_guard/leather/shoulders',1190),(16261,16261,'accessories/wearable_items/_exp08/freeport_guard/leather/shoulders_snapon_epic',1190),(16262,16262,'accessories/wearable_items/_exp08/freeport_guard/robe/chest',1190),(16263,16263,'accessories/wearable_items/_exp08/freeport_guard/robe/cowl',1190),(16264,16264,'accessories/wearable_items/_exp08/freeport_guard/robe/feet',1190),(16265,16265,'accessories/wearable_items/_exp08/freeport_guard/robe/hands',1190),(16266,16266,'accessories/wearable_items/_exp08/freeport_guard/robe/head',1190),(16267,16267,'accessories/wearable_items/_exp08/freeport_guard/robe/pants',1190),(16268,16268,'accessories/wearable_items/_exp08/freeport_guard/robe/skirt',1190),(16269,16269,'accessories/wearable_items/_exp08/freeport_guard/snapons/chain_pauldrons_upper_left',1190),(16270,16270,'accessories/wearable_items/_exp08/freeport_guard/snapons/chain_pauldrons_upper_right',1190),(16271,16271,'accessories/wearable_items/_exp08/freeport_guard/snapons/leather_pauldrons_upper_left',1190),(16272,16272,'accessories/wearable_items/_exp08/freeport_guard/snapons/leather_pauldrons_upper_right',1190),(16273,16273,'accessories/wearable_items/_exp08/freeport_guard/snapons/vanguard_pauldrons_upper_left',1190),(16274,16274,'accessories/wearable_items/_exp08/freeport_guard/snapons/vanguard_pauldrons_upper_right',1190),(16275,16275,'accessories/wearable_items/_exp08/freeport_guard/vanguard/chest',1190),(16276,16276,'accessories/wearable_items/_exp08/freeport_guard/vanguard/cowl',1190),(16277,16277,'accessories/wearable_items/_exp08/freeport_guard/vanguard/feet',1190),(16278,16278,'accessories/wearable_items/_exp08/freeport_guard/vanguard/forearms',1190),(16279,16279,'accessories/wearable_items/_exp08/freeport_guard/vanguard/freeport_head_snapon',1190),(16280,16280,'accessories/wearable_items/_exp08/freeport_guard/vanguard/hands',1190),(16281,16281,'accessories/wearable_items/_exp08/freeport_guard/vanguard/head',1190),(16282,16282,'accessories/wearable_items/_exp08/freeport_guard/vanguard/legs',1190),(16283,16283,'accessories/wearable_items/_exp08/freeport_guard/vanguard/legs_noskirt',1190),(16284,16284,'accessories/wearable_items/_exp08/freeport_guard/vanguard/right',1190),(16285,16285,'accessories/wearable_items/_exp08/freeport_guard/vanguard/shoulders',1190),(16286,16286,'accessories/wearable_items/_exp08/freeport_guard/vanguard/shoulders_nopauldrons',1190),(16287,16287,'accessories/wearable_items/_exp08/freeport_guard/vanguard/shoulders_pauldron_epic',1190),(16288,16288,'accessories/wearable_items/_exp08/freeport_guard/vanguard/skirt',1190),(16289,16289,'accessories/wieldable_items/weapons/exp08/talisman/book_bookmarked_glow',1190),(16290,16290,'accessories/wieldable_items/weapons/exp08/talisman/book_bookmarked_glow2',1190),(16291,16291,'accessories/wieldable_items/weapons/exp08/talisman/exp08_symbol_crystalline',1190),(16292,16292,'accessories/wieldable_items/weapons/exp08/talisman/exp08_symbol_sphere',1190),(16293,16293,'accessories/wieldable_items/weapons/exp08/talisman/exp08_symbol_spiked',1190),(16294,16294,'creatures/mounts/player_wing/player_wing_nightmare',1190),(16295,16295,'ec/pc/fae_wings/fae_nightmare',1190),(16296,16296,'_exp04/monsters/chokidai_old',1190),(16297,16297,'_exp04/monsters/chokidai_red',1190),(16298,16298,'accessories/wearable_items/_exp08/chainmail_gi/chest',1190),(16299,16299,'accessories/wearable_items/_exp08/chainmail_gi/feet',1190),(16300,16300,'accessories/wearable_items/_exp08/chainmail_gi/head',1190),(16301,16301,'accessories/wearable_items/_exp08/chainmail_gi/legs',1190),(16302,16302,'accessories/wearable_items/_exp08/chainmail_gi/shoulders',1190),(16303,16303,'accessories/wearable_items/_exp08/chainmail_gi/snap_ons/belt',1190),(16304,16304,'accessories/wearable_items/_exp08/chainmail_gi/snap_ons/chain_link_01',1190),(16305,16305,'accessories/wearable_items/_exp08/chainmail_gi/snap_ons/chain_link_02',1190),(16306,16306,'accessories/wieldable_items/weapons/exp08/1h_sword/exp08_sword_freeportknight',1190),(16307,16307,'creatures/mounts/squirrel_mount/squirrel_mount_skunk',1190),(16308,16308,'accessories/wearable_items/cloak/exp08/cloak_fur',1190),(16309,16309,'accessories/wearable_items/cloak/exp08/snap_ons/cloak_fur_attachment',1190),(16310,16310,'accessories/wieldable_items/weapons/exp08/1h_crush/hammer_soulscorned',1190),(16311,16311,'accessories/wieldable_items/weapons/exp08/1h_sword/exp08_axe_soulscorned',1190),(16312,16312,'accessories/wieldable_items/weapons/exp08/1h_sword/exp08_sword_soulscorned',1190),(16313,16313,'accessories/wieldable_items/weapons/exp08/2h_sword/exp07_2hs_sword_soulscorned',1190),(16314,16314,'accessories/wieldable_items/weapons/exp08/fist/exp08_fist_soulscorned',1190),(16315,16315,'accessories/wieldable_items/weapons/exp08/staff/exp08_staff_soulscorned',1190),(16316,16316,'accessories/wearable_items/cloak/exp08/cloak_bookshelf',1190),(16317,16317,'creatures/mounts/unicorn/unicorn_armored',1190),(16318,16318,'creatures/mounts/unicorn/unicorn_armored_mist',1190),(16319,16319,'accessories/wearable_items/cloak/exp08/cloak_freeport_vanguard',1190),(16320,16320,'accessories/wearable_items/cloak/exp08/cloak_freeport_chain',1190),(16321,16321,'accessories/wearable_items/cloak/exp08/cloak_freeport_chain_cowl_snapon',1190),(16322,16322,'accessories/wearable_items/cloak/exp08/cloak_freeport_guard_cowl_snapon',1190),(16323,16323,'accessories/wearable_items/cloak/exp08/cloak_freeport_leather',1190),(16324,16324,'accessories/wearable_items/cloak/exp08/cloak_freeport_leather_cowl_snapon',1190),(16325,16325,'accessories/wearable_items/cloak/exp08/cloak_freeport_robe',1190),(16326,16326,'accessories/wearable_items/cloak/exp08/cloak_freeport_robe_cowl_snapon',1190),(16327,16327,'accessories/wieldable_items/weapons/exp08/1h_crush/flail_lucanic_dark',1190),(16328,16328,'accessories/wieldable_items/weapons/exp08/1h_crush/mace_lucanic_dark',1190),(16329,16329,'accessories/wieldable_items/weapons/exp08/1h_pierce/exp08_dagger_lucanic_split',1190),(16330,16330,'accessories/wieldable_items/weapons/exp08/1h_sword/exp08_axe_lucanic_dark',1190),(16331,16331,'accessories/wieldable_items/weapons/exp08/1h_sword/exp08_kama_lucanic_batwing',1190),(16332,16332,'accessories/wieldable_items/weapons/exp08/1h_sword/exp08_sword_lucanic_long',1190),(16333,16333,'accessories/wieldable_items/weapons/exp08/1h_sword/exp08_sword_lucanic_scimitar',1190),(16334,16334,'accessories/wieldable_items/weapons/exp08/1h_sword/exp08_sword_lucanic_short',1190),(16335,16335,'accessories/wieldable_items/weapons/exp08/2h_sword/exp08_2h_sword_lucanic_dark',1190),(16336,16336,'accessories/wieldable_items/weapons/exp08/staff/exp08_poleaxe_lucanic_hollow',1190),(16337,16337,'_exp08/characters/tool_users/freeport_knight/freeport_knight_mounted',1190),(16338,16338,'creatures/mounts/horse_heavy/horse_nightmare_fire_freeport',1190),(16339,16339,'creatures/mounts/pegasus_mount/pegasus_mount_nightmare_freeport',1190),(16340,16340,'accessories/wieldable_items/shields/exp08/exp08_shield_freeportknight',1190),(16341,16341,'accessories/wieldable_items/shields/exp08/exp08_shield_freeportknight_npc',1190),(16342,16342,'accessories/wearable_items/_exp08/flame_gi/chest',1190),(16343,16343,'accessories/wearable_items/_exp08/flame_gi/hands',1190),(16344,16344,'accessories/wearable_items/_exp08/flame_gi/legs',1190),(16345,16345,'accessories/wearable_items/_exp08/flame_gi/shoulders',1190),(16346,16346,'accessories/wearable_items/_exp08/flame_gi/snap_ons/armband_flame_gi_left',1190),(16347,16347,'accessories/wearable_items/_exp08/flame_gi/snap_ons/armband_flame_gi_right',1190),(16348,16348,'accessories/wearable_items/_exp08/flame_gi/snap_ons/gem_disc',1190),(16349,16349,'accessories/wearable_items/profesion_hats/beastlord2/head_beastlord',1190),(16350,16350,'accessories/wearable_items/profesion_hats/beastlord2/swivel_feather1',1190),(16351,16351,'accessories/wearable_items/profesion_hats/beastlord2/swivel_feather2',1190),(16352,16352,'creatures/mounts/pegasus_mount/pegasus_mount_winter',1190),(16353,16353,'accessories/wieldable_items/weapons/exp08/1h_wand/wand_lucanic_serpent',1190),(16354,16354,'accessories/wieldable_items/weapons/exp08/1h_pierce/exp08_dagger_burningblack',1190),(16355,16355,'accessories/wieldable_items/weapons/exp08/fist/katar_burningsilver',1190),(16356,16356,'accessories/wieldable_items/weapons/exp08/staff/exp08_staff_lightningrod',1190),(16357,16357,'_exp02/characters/tool_users/draconian_elite',1190),(16358,16358,'accessories/wieldable_items/weapons/exp08/1h_crush/flail_lucanic_dark_fx',1190),(16359,16359,'accessories/wieldable_items/weapons/exp08/1h_crush/mace_lucanic_dark_fx',1190),(16360,16360,'accessories/wieldable_items/weapons/exp08/1h_pierce/exp08_dagger_lucanic_split_fx',1190),(16361,16361,'accessories/wieldable_items/weapons/exp08/1h_sword/exp08_sword_lucanic_short_fx',1190),(16362,16362,'accessories/wieldable_items/weapons/exp08/1h_sword/exp08_axe_lucanic_dark_fx',1190),(16363,16363,'accessories/wieldable_items/weapons/exp08/1h_sword/exp08_kama_lucanic_batwing_fx',1190),(16364,16364,'accessories/wieldable_items/weapons/exp08/1h_sword/exp08_sword_lucanic_long_fx',1190),(16365,16365,'accessories/wieldable_items/weapons/exp08/1h_sword/exp08_sword_lucanic_scimitar_fx',1190),(16366,16366,'accessories/wieldable_items/weapons/exp08/1h_wand/wand_lucanic_serpent_fx',1190),(16367,16367,'accessories/wieldable_items/weapons/exp08/2h_sword/exp08_2h_sword_lucanic_dark_fx',1190),(16368,16368,'accessories/wieldable_items/weapons/exp08/staff/exp08_poleaxe_lucanic_hollow_fx',1190),(16369,16369,'accessories/wearable_items/_exp08/redglow_sets/leather/chest',1190),(16370,16370,'accessories/wearable_items/_exp08/redglow_sets/leather/feet',1190),(16371,16371,'accessories/wearable_items/_exp08/redglow_sets/leather/forearms',1190),(16372,16372,'accessories/wearable_items/_exp08/redglow_sets/leather/hands',1190),(16373,16373,'accessories/wearable_items/_exp08/redglow_sets/leather/head',1190),(16374,16374,'accessories/wearable_items/_exp08/redglow_sets/leather/legs',1190),(16375,16375,'accessories/wearable_items/_exp08/redglow_sets/leather/legs_noskirt',1190),(16376,16376,'accessories/wearable_items/_exp08/redglow_sets/leather/shoulders',1190),(16377,16377,'accessories/wearable_items/_exp08/redglow_sets/leather/skirt',1190),(16378,16378,'accessories/wearable_items/_exp08/redglow_sets/robe/chest',1190),(16379,16379,'accessories/wearable_items/_exp08/redglow_sets/robe/feet',1190),(16380,16380,'accessories/wearable_items/_exp08/redglow_sets/robe/hands',1190),(16381,16381,'accessories/wearable_items/_exp08/redglow_sets/robe/head',1190),(16382,16382,'accessories/wearable_items/_exp08/redglow_sets/robe/head_collar',1190),(16383,16383,'accessories/wearable_items/_exp08/redglow_sets/robe/pants',1190),(16384,16384,'accessories/wearable_items/_exp08/redglow_sets/robe/skirt',1190),(16385,16385,'_exp08/characters/monsters/warboar/warboar_beastlord',1190),(16386,16386,'creatures/mounts/warhog_mount/warhog_beastlord_mount',1190),(16387,16387,'accessories/wearable_items/_exp08/redglow_sets/leather/pauldron_left',1190),(16388,16388,'accessories/wearable_items/_exp08/redglow_sets/leather/pauldron_right',1190),(16389,16389,'accessories/wearable_items/_exp08/redglow_sets/leather/shoulders_pauldrons',1190),(16390,16390,'accessories/wearable_items/_exp08/redglow_sets/robe/chest_pauldrons',1190),(16391,16391,'staticobjects/_exp08/dyod/crushbone/dyod_cbk_banner_emperorcrush',1190),(16392,16392,'_exp08/characters/tool_users/freeport_knight/freeport_knight_joust',1190),(16393,16393,'creatures/mounts/horse_heavy/horse_heavy_joust',1190),(16394,16394,'accessories/wieldable_items/weapons/great_spear/great_spear/great_spear_joust',1190),(16395,16395,'staticobjects/freeport_combined/fpalt_vase_ornateface01_dpo',1190),(16396,16396,'staticobjects/freeport_combined/fpalt_bank_coinpile001_dpo',1190),(16397,16397,'staticobjects/freeport_combined/fpalt_bank_coinpile002_dpo',1190),(16398,16398,'staticobjects/freeport_combined/fpalt_bank_scales01_dpo',1190),(16399,16399,'staticobjects/freeport_combined/fpalt_bankvaultplain001_dpo',1190),(16400,16400,'staticobjects/freeport_combined/fpalt_banner_gorowyn_stand01_dpo',1190),(16401,16401,'staticobjects/freeport_combined/fpalt_banner_lucan_hoods01_dpo',1190),(16402,16402,'staticobjects/freeport_combined/fpalt_banner_military_stable01_dpo',1190),(16403,16403,'staticobjects/freeport_combined/fpalt_banner_neriak_stand01_dpo',1190),(16404,16404,'staticobjects/freeport_combined/fpalt_barrel_ornatelarge001_dpo',1190),(16405,16405,'staticobjects/freeport_combined/fpalt_barrel_ornatesmall001_dpo',1190),(16406,16406,'staticobjects/freeport_combined/fpalt_bed_doubleornate01_dpo',1190),(16407,16407,'staticobjects/freeport_combined/fpalt_bed_singleornate01_dpo',1190),(16408,16408,'staticobjects/freeport_combined/fpalt_bench_militaryshort01_dpo',1190),(16409,16409,'staticobjects/freeport_combined/fpalt_bench_ornateshort01_dpo',1190),(16410,16410,'staticobjects/freeport_combined/fpalt_bookcase_smallornate01_dpo',1190),(16411,16411,'staticobjects/freeport_combined/fpalt_bookcase_smallornate02_dpo',1190),(16412,16412,'staticobjects/freeport_combined/fpalt_bookcase_smallornate03_dpo',1190),(16413,16413,'staticobjects/freeport_combined/fpalt_bucket_ornatelarge01_dpo',1190),(16414,16414,'staticobjects/freeport_combined/fpalt_chair_military01_dpo',1190),(16415,16415,'staticobjects/freeport_combined/fpalt_chair_ornate01_dpo',1190),(16416,16416,'staticobjects/freeport_combined/fpalt_chair_stool_military01_dpo',1190),(16417,16417,'staticobjects/freeport_combined/fpalt_chair_stool_ornate01_dpo',1190),(16418,16418,'staticobjects/freeport_combined/fpalt_chest_large_ornate01_dpo',1190),(16419,16419,'staticobjects/freeport_combined/fpalt_chest_small_ornate01_dpo',1190),(16420,16420,'staticobjects/freeport_combined/fpalt_counter_roundornatelong01_dpo',1190),(16421,16421,'staticobjects/freeport_combined/fpalt_lighting_floorbraziermilitary01_dpo',1190),(16422,16422,'staticobjects/freeport_combined/fpalt_lighting_tablecandleplain01_dpo',1190),(16423,16423,'staticobjects/freeport_combined/fpalt_rugs01_dpo',1190),(16424,16424,'staticobjects/freeport_combined/fpalt_rugs02_dpo',1190),(16425,16425,'staticobjects/freeport_combined/fpalt_rugs03_dpo',1190),(16426,16426,'staticobjects/freeport_combined/fpalt_stable_troughlong01_dpo',1190),(16427,16427,'staticobjects/freeport_combined/fpalt_stables_haybail01_dpo',1190),(16428,16428,'staticobjects/freeport_combined/fpalt_table_militarysmall01_dpo',1190),(16429,16429,'staticobjects/freeport_combined/fpalt_table_ornatesmall01_dpo',1190),(16430,16430,'staticobjects/freeport_combined/fpalt_training_dummy01_dpo',1190),(16431,16431,'staticobjects/freeport_combined/fpalt_urn_plain_large01_dpo',1190),(16432,16432,'accessories/wieldable_items/weapons/exp08/1h_sword/exp08_sword_gem_bronze_short',1190),(16433,16433,'accessories/wearable_items/_exp08/redglow_sets/vanguard/chest',1190),(16434,16434,'accessories/wearable_items/_exp08/redglow_sets/vanguard/feet',1190),(16435,16435,'accessories/wearable_items/_exp08/redglow_sets/vanguard/forearms',1190),(16436,16436,'accessories/wearable_items/_exp08/redglow_sets/vanguard/hands',1190),(16437,16437,'accessories/wearable_items/_exp08/redglow_sets/vanguard/head',1190),(16438,16438,'accessories/wearable_items/_exp08/redglow_sets/vanguard/legs',1190),(16439,16439,'accessories/wearable_items/_exp08/redglow_sets/vanguard/legs_noskirt',1190),(16440,16440,'accessories/wearable_items/_exp08/redglow_sets/vanguard/redglow_pauldron_left',1190),(16441,16441,'accessories/wearable_items/_exp08/redglow_sets/vanguard/redglow_pauldron_right',1190),(16442,16442,'accessories/wearable_items/_exp08/redglow_sets/vanguard/right',1190),(16443,16443,'accessories/wearable_items/_exp08/redglow_sets/vanguard/shoulders',1190),(16444,16444,'accessories/wearable_items/_exp08/redglow_sets/vanguard/shoulders_epic_pauldrons',1190),(16445,16445,'accessories/wearable_items/_exp08/redglow_sets/vanguard/shoulders_nopauldrons',1190),(16446,16446,'accessories/wearable_items/_exp08/redglow_sets/vanguard/skirt',1190),(16447,16447,'accessories/wearable_items/cloak/exp08/cloak_beastlord_epic',1190),(16448,16448,'staticobjects/_exp06/odno_kejak_ladder',1190),(16449,16449,'_exp08/characters/monsters/dragon_lumpy/dragon_lumpy_purple',1190),(16450,16450,'_exp08/characters/monsters/dragon_lumpy/dragon_lumpy_purple_glowing',1190),(16451,16451,'_exp08/characters/monsters/dragon_lumpy/dragon_lumpy_red',1190),(16452,16452,'_exp08/characters/monsters/dragon_lumpy/dragon_lumpy_red_glowing',1190),(16453,16453,'accessories/wearable_items/_exp08/redglow_sets/chain/chest',1190),(16454,16454,'accessories/wearable_items/_exp08/redglow_sets/chain/feet',1190),(16455,16455,'accessories/wearable_items/_exp08/redglow_sets/chain/forearms',1190),(16456,16456,'accessories/wearable_items/_exp08/redglow_sets/chain/hands',1190),(16457,16457,'accessories/wearable_items/_exp08/redglow_sets/chain/head',1190),(16458,16458,'accessories/wearable_items/_exp08/redglow_sets/chain/legs',1190),(16459,16459,'accessories/wearable_items/_exp08/redglow_sets/chain/legs_noskirt',1190),(16460,16460,'accessories/wearable_items/_exp08/redglow_sets/chain/pauldron_left',1190),(16461,16461,'accessories/wearable_items/_exp08/redglow_sets/chain/pauldron_right',1190),(16462,16462,'accessories/wearable_items/_exp08/redglow_sets/chain/shoulders',1190),(16463,16463,'accessories/wearable_items/_exp08/redglow_sets/chain/shoulders_pauldrons',1190),(16464,16464,'accessories/wearable_items/_exp08/redglow_sets/chain/skirt',1190),(16465,16465,'staticobjects/_exp06/odno_rock01_purple',1190),(16466,16466,'accessories/wearable_items/_exp08/grozmok_robe/antler_left',1190),(16467,16467,'accessories/wearable_items/_exp08/grozmok_robe/antler_right',1190),(16468,16468,'accessories/wearable_items/_exp08/grozmok_robe/chest',1190),(16469,16469,'accessories/wearable_items/_exp08/grozmok_robe/chest_pauldrons',1190),(16470,16470,'accessories/wearable_items/_exp08/grozmok_robe/feet',1190),(16471,16471,'accessories/wearable_items/_exp08/grozmok_robe/grozmok_pauldron_left',1190),(16472,16472,'accessories/wearable_items/_exp08/grozmok_robe/grozmok_pauldron_right',1190),(16473,16473,'accessories/wearable_items/_exp08/grozmok_robe/hands',1190),(16474,16474,'accessories/wearable_items/_exp08/grozmok_robe/head',1190),(16475,16475,'accessories/wearable_items/_exp08/grozmok_robe/head_collar',1190),(16476,16476,'accessories/wearable_items/_exp08/grozmok_robe/head_epic',1190),(16477,16477,'accessories/wearable_items/_exp08/grozmok_robe/pants',1190),(16478,16478,'accessories/wearable_items/_exp08/grozmok_robe/skirt',1190),(16479,16479,'accessories/wieldable_items/weapons/exp08/1h_sword/exp08_sword_gem_rapier',1190),(16480,16480,'staticobjects/_exp06/bl_kerra_stone',1190),(16481,16481,'staticobjects/_exp06/bl_kerra_stone_broken',1190),(16482,16482,'_exp08/characters/tool_users/lucan_2011/lucan_2011',1190),(16483,16483,'accessories/wearable_items/_exp08/redglow_sets/gi/chest',1190),(16484,16484,'accessories/wearable_items/_exp08/redglow_sets/gi/feet',1190),(16485,16485,'accessories/wearable_items/_exp08/redglow_sets/gi/head',1190),(16486,16486,'accessories/wearable_items/_exp08/redglow_sets/gi/legs',1190),(16487,16487,'accessories/wearable_items/_exp08/redglow_sets/gi/shoulders',1190),(16488,16488,'accessories/wearable_items/_exp08/redglow_sets/gi/skirt',1190),(16489,16489,'accessories/wearable_items/_exp08/redglow_sets/gi/female/arms',1190),(16490,16490,'accessories/wearable_items/_exp08/redglow_sets/gi/male/shoulders',1190),(16491,16491,'accessories/wearable_items/_exp08/redglow_sets/gi/monk_hat/head',1190),(16492,16492,'accessories/wieldable_items/weapons/exp08/1h_sword/exp08_sword_gem_epee',1190),(16493,16493,'staticobjects/housing_portal_objects/vision_home_lavastorm',1190),(16494,16494,'_exp08/characters/monsters/timber_wolf_harbinger',1190),(16495,16495,'_exp08/characters/monsters/bear_harbinger',1190),(16496,16496,'_exp08/characters/monsters/chokidai_harbinger',1190),(16497,16497,'_exp08/characters/monsters/crocodile_harbinger',1190),(16498,16498,'_exp08/characters/monsters/tiger_harbinger',1190),(16499,16499,'ec/npc/wheel',1190),(16500,16500,'staticobjects/crates/freeport_crate_01',1190),(16501,16501,'staticobjects/crates/freeport_crate_large_militaryboarded',1190),(16502,16502,'staticobjects/promo_items/anniversary_antonia_statue',1190),(16503,16503,'staticobjects/promo_items/anniversary_lucan_statue',1190),(16504,16504,'accessories/wieldable_items/weapons/exp08/1h_sword/exp08_sword_gem_cutlass',1190),(16505,16505,'accessories/wearable_items/profesion_hats/beastlord2/head_beastlord_tintable',1190),(16506,16506,'accessories/wieldable_items/weapons/exp08/1h_crush/exp08_1h_crush_beastlord_epic',1190),(16507,16507,'accessories/wieldable_items/weapons/exp08/2h_sword/exp08_2h_sword_lion',1190),(16508,16508,'accessories/wieldable_items/weapons/exp08/fist/exp08_fist_beastlord_blades_silver',1190),(16509,16509,'staticobjects/freeport_combined/fpalt_bank_scalestipped01',1190),(16510,16510,'staticobjects/freeport_combined/fpalt_banner_lucan_hoods_wall01',1190),(16511,16511,'staticobjects/freeport_combined/fpalt_banner_lucan_hoods_wall02',1190),(16512,16512,'staticobjects/freeport_combined/fpalt_banner_lucan_stand01',1190),(16513,16513,'staticobjects/freeport_combined/fpalt_banner_military_stand01',1190),(16514,16514,'staticobjects/freeport_combined/fpalt_banner_militiahouse01',1190),(16515,16515,'staticobjects/freeport_combined/fpalt_bed_kingornate01',1190),(16516,16516,'staticobjects/freeport_combined/fpalt_bed_monk_mat01',1190),(16517,16517,'staticobjects/freeport_combined/fpalt_bench_militarylong01',1190),(16518,16518,'staticobjects/freeport_combined/fpalt_bench_ornatelong01',1190),(16519,16519,'staticobjects/freeport_combined/fpalt_benchstone01',1190),(16520,16520,'staticobjects/freeport_combined/fpalt_boat_fishing01',1190),(16521,16521,'staticobjects/freeport_combined/fpalt_bookcase_largeornate01',1190),(16522,16522,'staticobjects/freeport_combined/fpalt_bookcase_largeornate02',1190),(16523,16523,'staticobjects/freeport_combined/fpalt_bookcase_largeornate03',1190),(16524,16524,'staticobjects/freeport_combined/fpalt_bucket_ornatesmall01',1190),(16525,16525,'staticobjects/freeport_combined/fpalt_chair_military02',1190),(16526,16526,'staticobjects/freeport_combined/fpalt_chair_ornate02',1190),(16527,16527,'staticobjects/freeport_combined/fpalt_chair_ornate03',1190),(16528,16528,'staticobjects/freeport_combined/fpalt_chest_large_plainsymbol01',1190),(16529,16529,'staticobjects/freeport_combined/fpalt_counter_cornerornatemedium01',1190),(16530,16530,'staticobjects/freeport_combined/fpalt_counter_cornerornatemedium02',1190),(16531,16531,'staticobjects/freeport_combined/fpalt_counter_straightornatelong01',1190),(16532,16532,'staticobjects/freeport_combined/fpalt_counter_straightornatemedium01',1190),(16533,16533,'staticobjects/freeport_combined/fpalt_counter_straightornatesmall01',1190),(16534,16534,'staticobjects/freeport_combined/fpalt_crate_large_militaryboarded01',1190),(16535,16535,'staticobjects/freeport_combined/fpalt_crate_large_plainboardedsymbol01',1190),(16536,16536,'staticobjects/freeport_combined/fpalt_crate_portwine01',1190),(16537,16537,'staticobjects/freeport_combined/fpalt_crate_small_military01',1190),(16538,16538,'staticobjects/freeport_combined/fpalt_crate_small_plain01',1190),(16539,16539,'staticobjects/freeport_combined/fpalt_dartboard01',1190),(16540,16540,'staticobjects/freeport_combined/fpalt_displays_cabinetornate01',1190),(16541,16541,'staticobjects/freeport_combined/fpalt_fireplace_military01',1190),(16542,16542,'staticobjects/freeport_combined/fpalt_fireplace_ornatestone01',1190),(16543,16543,'staticobjects/freeport_combined/fpalt_forge_anvil01',1190),(16544,16544,'staticobjects/freeport_combined/fpalt_forge_grindingwheel01',1190),(16545,16545,'staticobjects/freeport_combined/fpalt_forge_hammer01',1190),(16546,16546,'staticobjects/freeport_combined/fpalt_forge_pliers01',1190),(16547,16547,'staticobjects/freeport_combined/fpalt_hitchingpostmultiple01',1190),(16548,16548,'staticobjects/freeport_combined/fpalt_hitchingpostsingle01',1190),(16549,16549,'staticobjects/freeport_combined/fpalt_hoods_roadsign01',1190),(16550,16550,'staticobjects/freeport_combined/fpalt_keg_ornatelarge001',1190),(16551,16551,'staticobjects/freeport_combined/fpalt_keg_ornatesmall001',1190),(16552,16552,'staticobjects/freeport_combined/fpalt_lantern_freestanding01_timed',1190),(16553,16553,'staticobjects/freeport_combined/fpalt_lighting_chandaliermilitary01',1190),(16554,16554,'staticobjects/freeport_combined/fpalt_lighting_chandalierornate01',1190),(16555,16555,'staticobjects/freeport_combined/fpalt_lighting_floorbrazierornate01',1190),(16556,16556,'staticobjects/freeport_combined/fpalt_lighting_floorbrazierplain02',1190),(16557,16557,'staticobjects/freeport_combined/fpalt_lighting_tablebrazier_coals001',1190),(16558,16558,'staticobjects/freeport_combined/fpalt_lighting_tablecandlemagical01',1190),(16559,16559,'staticobjects/freeport_combined/fpalt_lighting_tablecandleornate01',1190),(16560,16560,'staticobjects/freeport_combined/fpalt_lighting_tablecandleplain02',1190),(16561,16561,'staticobjects/freeport_combined/fpalt_lighting_wallsconcemilitary01',1190),(16562,16562,'staticobjects/freeport_combined/fpalt_lighting_wallsconceornate01',1190),(16563,16563,'staticobjects/freeport_combined/fpalt_mailbox_kiosk01',1190),(16564,16564,'staticobjects/freeport_combined/fpalt_mariners_bell01_all',1190),(16565,16565,'staticobjects/freeport_combined/fpalt_nautical_steeringwheelstand01',1190),(16566,16566,'staticobjects/freeport_combined/fpalt_roadsign_arrow01_beggarsct',1190),(16567,16567,'staticobjects/freeport_combined/fpalt_roadsign_arrow01_bigbend',1190),(16568,16568,'staticobjects/freeport_combined/fpalt_roadsign_arrow01_longshadow',1190),(16569,16569,'staticobjects/freeport_combined/fpalt_roadsign_arrow01_temple',1190),(16570,16570,'staticobjects/freeport_combined/fpalt_rug_rolled_group01',1190),(16571,16571,'staticobjects/freeport_combined/fpalt_scribe_scroll01',1190),(16572,16572,'staticobjects/freeport_combined/fpalt_scribe_scroll02',1190),(16573,16573,'staticobjects/freeport_combined/fpalt_scribe_scroll03',1190),(16574,16574,'staticobjects/freeport_combined/fpalt_shelves_ornatelong001',1190),(16575,16575,'staticobjects/freeport_combined/fpalt_shelves_ornatelongdouble001',1190),(16576,16576,'staticobjects/freeport_combined/fpalt_shelves_ornateshortdouble001',1190),(16577,16577,'staticobjects/freeport_combined/fpalt_table_endtableornate01',1190),(16578,16578,'staticobjects/freeport_combined/fpalt_table_militarylarge01',1190),(16579,16579,'staticobjects/freeport_combined/fpalt_table_militarystone01',1190),(16580,16580,'staticobjects/freeport_combined/fpalt_table_militia_round01',1190),(16581,16581,'staticobjects/freeport_combined/fpalt_table_ornatelarge01',1190),(16582,16582,'staticobjects/freeport_combined/fpalt_table_workbenchplain01',1190),(16583,16583,'staticobjects/freeport_combined/fpalt_tools_hammer001',1190),(16584,16584,'staticobjects/freeport_combined/fpalt_tools_handsaw001',1190),(16585,16585,'staticobjects/freeport_combined/fpalt_trough_round01',1190),(16586,16586,'staticobjects/freeport_combined/fpalt_urn_ornate_large01',1190),(16587,16587,'staticobjects/freeport_combined/fpalt_urn_plain_large02',1190),(16588,16588,'staticobjects/freeport_combined/fpalt_vase_magicalsphere01',1190),(16589,16589,'staticobjects/freeport_combined/fpalt_vase_ornate_maskhandles01',1190),(16590,16590,'staticobjects/freeport_combined/fpalt_vase_smallgold01',1190),(16591,16591,'staticobjects/freeport_combined/fpalt_weaponrack_full01',1190),(16592,16592,'staticobjects/freeport_combined/fpalt_weaponrack_temple01',1190),(16593,16593,'staticobjects/freeport_combined/fpalt_weaponrack_temple02',1190),(16594,16594,'staticobjects/freeport_combined/fpalt_weaponrack_temple03',1190),(16595,16595,'staticobjects/freeport_combined/fpalt_weaponrack_triple01',1190),(16596,16596,'staticobjects/freeport_combined/fpalt_weaponrack_triple02',1190),(16597,16597,'staticobjects/freeport_combined/fpalt_sewer_entrance01',1190),(16598,16598,'staticobjects/freeport_combined/fpalt_roadsign_arrow01_fprtcity',1190),(16599,16599,'staticobjects/freeport_combined/fpalt_cellar_door01',1190),(16600,16600,'accessories/wearable_items/_exp08/combine_armor/chain/chest',1190),(16601,16601,'accessories/wearable_items/_exp08/combine_armor/chain/feet',1190),(16602,16602,'accessories/wearable_items/_exp08/combine_armor/chain/forearms',1190),(16603,16603,'accessories/wearable_items/_exp08/combine_armor/chain/hands',1190),(16604,16604,'accessories/wearable_items/_exp08/combine_armor/chain/head',1190),(16605,16605,'accessories/wearable_items/_exp08/combine_armor/chain/legs',1190),(16606,16606,'accessories/wearable_items/_exp08/combine_armor/chain/legs_noskirt',1190),(16607,16607,'accessories/wearable_items/_exp08/combine_armor/chain/shoulders',1190),(16608,16608,'accessories/wearable_items/_exp08/combine_armor/chain/shoulders_epic',1190),(16609,16609,'accessories/wearable_items/_exp08/combine_armor/chain/skirt',1190),(16610,16610,'accessories/wearable_items/_exp08/combine_armor/gi_cloth/chest',1190),(16611,16611,'accessories/wearable_items/_exp08/combine_armor/gi_cloth/cloak',1190),(16612,16612,'accessories/wearable_items/_exp08/combine_armor/gi_cloth/hands',1190),(16613,16613,'accessories/wearable_items/_exp08/combine_armor/gi_cloth/head',1190),(16614,16614,'accessories/wearable_items/_exp08/combine_armor/gi_cloth/legs',1190),(16615,16615,'accessories/wearable_items/_exp08/combine_armor/leather/chest',1190),(16616,16616,'accessories/wearable_items/_exp08/combine_armor/leather/feet',1190),(16617,16617,'accessories/wearable_items/_exp08/combine_armor/leather/forearms',1190),(16618,16618,'accessories/wearable_items/_exp08/combine_armor/leather/hands',1190),(16619,16619,'accessories/wearable_items/_exp08/combine_armor/leather/head',1190),(16620,16620,'accessories/wearable_items/_exp08/combine_armor/leather/legs',1190),(16621,16621,'accessories/wearable_items/_exp08/combine_armor/leather/legs_noskirt',1190),(16622,16622,'accessories/wearable_items/_exp08/combine_armor/leather/shoulders',1190),(16623,16623,'accessories/wearable_items/_exp08/combine_armor/leather/shoulders_epic',1190),(16624,16624,'accessories/wearable_items/_exp08/combine_armor/leather/skirt',1190),(16625,16625,'accessories/wearable_items/_exp08/combine_armor/snapons-helms/combine_pauldrons_chain_left',1190),(16626,16626,'accessories/wearable_items/_exp08/combine_armor/snapons-helms/combine_pauldrons_chain_right',1190),(16627,16627,'accessories/wearable_items/_exp08/combine_armor/snapons-helms/combine_pauldrons_leather_left',1190),(16628,16628,'accessories/wearable_items/_exp08/combine_armor/snapons-helms/combine_pauldrons_leather_right',1190),(16629,16629,'staticobjects/coffins_and_sarcophagus/shroud_no_shroud',1190),(16630,16630,'accessories/wieldable_items/weapons/exp08/2h_sword/exp08_2h_sword_gem_engraved',1190),(16631,16631,'accessories/wieldable_items/weapons/exp08/1h_sword/exp08_sword_gem_dragon_blade',1190),(16632,16632,'staticobjects/housing_portal_objects/vision_home_sullon_spire',1190),(16633,16633,'staticobjects/housing_portal_objects/vision_home_stormy_isle',1190),(16634,16634,'staticobjects/soe_wallet/station_fancy_candleholder',1190),(16635,16635,'staticobjects/soe_wallet/station_fancy_candleholder_gold',1190),(16636,16636,'staticobjects/soe_wallet/station_fancy_shelf_gold',1190),(16637,16637,'staticobjects/soe_wallet/station_fancy_mirror',1190),(16638,16638,'staticobjects/soe_wallet/station_fancy_mirror_gold',1190),(16639,16639,'staticobjects/soe_wallet/station_fancy_shelf',1190),(16640,16640,'accessories/wieldable_items/weapons/exp08/fist/exp08_fist_beastlord_blades_silver_red',1190),(16641,16641,'accessories/wieldable_items/weapons/exp08/fist/exp08_fist_beastlord_blades_blue',1190),(16642,16642,'_exp08/characters/monsters/nayad_merc/nayad_merc',1190),(16643,16643,'_exp08/characters/monsters/nayad_merc/nayad_merc_tintable',1190),(16644,16644,'creatures/tu/mysticdoll_alternate_pin_warrior',1190),(16645,16645,'staticobjects/_exp08/dyod/crushbone/dyod_cbk_barrel_orc01',1190),(16646,16646,'staticobjects/_exp08/dyod/crushbone/dyod_cbk_bed_shoddy',1190),(16647,16647,'staticobjects/_exp08/dyod/crushbone/dyod_cbk_bench01',1190),(16648,16648,'staticobjects/_exp08/dyod/crushbone/dyod_cbk_bench01_blue',1190),(16649,16649,'staticobjects/_exp08/dyod/crushbone/dyod_cbk_book_blue',1190),(16650,16650,'staticobjects/_exp08/dyod/crushbone/dyod_cbk_book_copper',1190),(16651,16651,'staticobjects/_exp08/dyod/crushbone/dyod_cbk_book_group01',1190),(16652,16652,'staticobjects/_exp08/dyod/crushbone/dyod_cbk_book_group02',1190),(16653,16653,'staticobjects/_exp08/dyod/crushbone/dyod_cbk_chest_metal01',1190),(16654,16654,'staticobjects/_exp08/dyod/crushbone/dyod_cbk_bookcase02',1190),(16655,16655,'staticobjects/_exp08/dyod/crushbone/dyod_cbk_bottle',1190),(16656,16656,'staticobjects/_exp08/dyod/crushbone/dyod_cbk_bowl_orc',1190),(16657,16657,'staticobjects/_exp08/dyod/crushbone/dyod_cbk_bunk_orc01',1190),(16658,16658,'staticobjects/_exp08/dyod/crushbone/dyod_cbk_butcher_cleaver',1190),(16659,16659,'staticobjects/_exp08/dyod/crushbone/dyod_cbk_butcher_knife01',1190),(16660,16660,'staticobjects/_exp08/dyod/crushbone/dyod_cbk_candle_blue',1190),(16661,16661,'staticobjects/_exp08/dyod/crushbone/dyod_cbk_candle_orange',1190),(16662,16662,'staticobjects/_exp08/dyod/crushbone/dyod_cbk_candle_wine',1190),(16663,16663,'staticobjects/_exp08/dyod/crushbone/dyod_cbk_cart_jailer01',1190),(16664,16664,'staticobjects/_exp08/dyod/crushbone/dyod_cbk_chair01',1190),(16665,16665,'staticobjects/_exp08/dyod/crushbone/dyod_cbk_chair01_blue',1190),(16666,16666,'staticobjects/_exp08/dyod/crushbone/dyod_cbk_jail_cup',1190),(16667,16667,'staticobjects/_exp08/dyod/crushbone/dyod_cbk_chest_metal02',1190),(16668,16668,'staticobjects/_exp08/dyod/crushbone/dyod_cbk_climbing_spike01',1190),(16669,16669,'staticobjects/_exp08/dyod/crushbone/dyod_cbk_climbing_spike02',1190),(16670,16670,'staticobjects/_exp08/dyod/crushbone/dyod_cbk_club',1190),(16671,16671,'staticobjects/_exp08/dyod/crushbone/dyod_cbk_counter_carving',1190),(16672,16672,'staticobjects/_exp08/dyod/crushbone/dyod_cbk_crate_wood',1190),(16673,16673,'staticobjects/_exp08/dyod/crushbone/dyod_cbk_crate_wood_long01',1190),(16674,16674,'staticobjects/_exp08/dyod/crushbone/dyod_cbk_cup_orc',1190),(16675,16675,'staticobjects/_exp08/dyod/crushbone/dyod_cbk_darkelfthrone',1190),(16676,16676,'staticobjects/_exp08/dyod/crushbone/dyod_cbk_firepit_orc01',1190),(16677,16677,'staticobjects/_exp08/dyod/crushbone/dyod_cbk_firepit_orc_withutensils01',1190),(16678,16678,'staticobjects/_exp08/dyod/crushbone/dyod_cbk_floursack_single001',1190),(16679,16679,'staticobjects/_exp08/dyod/crushbone/dyod_cbk_floursack_single002',1190),(16680,16680,'staticobjects/_exp08/dyod/crushbone/dyod_cbk_floursacksgroup001',1190),(16681,16681,'staticobjects/_exp08/dyod/crushbone/dyod_cbk_floursacksgroup002',1190),(16682,16682,'staticobjects/_exp08/dyod/crushbone/dyod_cbk_floursacksgroup003',1190),(16683,16683,'staticobjects/_exp08/dyod/crushbone/dyod_cbk_forge',1190),(16684,16684,'staticobjects/_exp08/dyod/crushbone/dyod_cbk_forgetool_poker01',1190),(16685,16685,'staticobjects/_exp08/dyod/crushbone/dyod_cbk_fryingpan_orc_large01',1190),(16686,16686,'staticobjects/_exp08/dyod/crushbone/dyod_cbk_gravelcrystalpile01',1190),(16687,16687,'staticobjects/_exp08/dyod/crushbone/dyod_cbk_gravelcrystalpile02',1190),(16688,16688,'staticobjects/_exp08/dyod/crushbone/dyod_cbk_gravelpile01',1190),(16689,16689,'staticobjects/_exp08/dyod/crushbone/dyod_cbk_gravelpile02',1190),(16690,16690,'staticobjects/_exp08/dyod/crushbone/dyod_cbk_gravelpile03',1190),(16691,16691,'staticobjects/_exp08/dyod/crushbone/dyod_cbk_hammer01',1190),(16692,16692,'staticobjects/_exp08/dyod/crushbone/dyod_cbk_oven',1190),(16693,16693,'staticobjects/_exp08/dyod/crushbone/dyod_cbk_jailer_keys',1190),(16694,16694,'staticobjects/_exp08/dyod/crushbone/dyod_cbk_jailer_keys_hanging',1190),(16695,16695,'staticobjects/_exp08/dyod/crushbone/dyod_cbk_keg_orc_large',1190),(16696,16696,'staticobjects/_exp08/dyod/crushbone/dyod_cbk_knife_orc01',1190),(16697,16697,'staticobjects/_exp08/dyod/crushbone/dyod_cbk_ladder_orc01',1190),(16698,16698,'staticobjects/_exp08/dyod/crushbone/dyod_cbk_large_animalcage',1190),(16699,16699,'staticobjects/_exp08/dyod/crushbone/dyod_cbk_large_animalcage_gold',1190),(16700,16700,'staticobjects/_exp08/dyod/crushbone/dyod_cbk_lightsource_cavewall_torch',1190),(16701,16701,'staticobjects/_exp08/dyod/crushbone/dyod_cbk_lightsource_chandelier01',1190),(16702,16702,'staticobjects/_exp08/dyod/crushbone/dyod_cbk_lightsource_chandelier01_swinging',1190),(16703,16703,'staticobjects/_exp08/dyod/crushbone/dyod_cbk_lightsource_chandelier01_swinging_lit',1190),(16704,16704,'staticobjects/_exp08/dyod/crushbone/dyod_cbk_lightsource_chandelier_mount',1190),(16705,16705,'staticobjects/_exp08/dyod/crushbone/dyod_cbk_lightsource_firepot01',1190),(16706,16706,'staticobjects/_exp08/dyod/crushbone/dyod_cbk_lightsource_firepot_small01',1190),(16707,16707,'staticobjects/_exp08/dyod/crushbone/dyod_cbk_lightsource_torch01',1190),(16708,16708,'staticobjects/_exp08/dyod/crushbone/dyod_cbk_lightsource_wall_sconce01',1190),(16709,16709,'staticobjects/_exp08/dyod/crushbone/dyod_cbk_lightsource_wall_sconce01_lit',1190),(16710,16710,'staticobjects/_exp08/dyod/crushbone/dyod_cbk_lightsource_wall_sconce02',1190),(16711,16711,'staticobjects/_exp08/dyod/crushbone/dyod_cbk_lightsource_wall_sconce02_lit',1190),(16712,16712,'staticobjects/_exp08/dyod/crushbone/dyod_cbk_meat_rack_orc',1190),(16713,16713,'staticobjects/_exp08/dyod/crushbone/dyod_cbk_miningtool_pick01',1190),(16714,16714,'staticobjects/_exp08/dyod/crushbone/dyod_cbk_miningtool_shovel01',1190),(16715,16715,'staticobjects/_exp08/dyod/crushbone/dyod_cbk_orc_banner_crushbone',1190),(16716,16716,'staticobjects/_exp08/dyod/crushbone/dyod_cbk_orc_banner_emperorcrush',1190),(16717,16717,'staticobjects/_exp08/dyod/crushbone/dyod_cbk_orc_bonepile01',1190),(16718,16718,'staticobjects/_exp08/dyod/crushbone/dyod_cbk_wheelbarrow_orc01',1190),(16719,16719,'staticobjects/_exp08/dyod/crushbone/dyod_cbk_wall_shield01',1190),(16720,16720,'staticobjects/_exp08/dyod/crushbone/dyod_cbk_weapon_rack_floor02',1190),(16721,16721,'staticobjects/_exp08/dyod/crushbone/dyod_cbk_weapon_rack_floor02_blue',1190),(16722,16722,'staticobjects/_exp08/dyod/crushbone/dyod_cbk_weapon_rack_floor',1190),(16723,16723,'staticobjects/_exp08/dyod/crushbone/dyod_cbk_weapon_rack_floor_blue',1190),(16724,16724,'staticobjects/_exp08/dyod/crushbone/dyod_cbk_weapon_rack_floor_empty',1190),(16725,16725,'staticobjects/_exp08/dyod/crushbone/dyod_cbk_weapon_rack_floor_empty_blue',1190),(16726,16726,'staticobjects/_exp08/dyod/crushbone/dyod_cbk_weapon_rack_floor_spear',1190),(16727,16727,'staticobjects/_exp08/dyod/crushbone/dyod_cbk_weapon_rack_floor_spear_blue',1190),(16728,16728,'staticobjects/_exp08/dyod/crushbone/dyod_cbk_weapons_wall_crossed01',1190),(16729,16729,'staticobjects/_exp08/dyod/crushbone/dyod_cbk_weaponsrack_wall01',1190),(16730,16730,'staticobjects/_exp08/dyod/crushbone/dyod_cbk_weaponsrack_wall01_blue',1190),(16731,16731,'staticobjects/_exp08/dyod/crushbone/dyod_cbk_weaponsrack_wall02',1190),(16732,16732,'staticobjects/_exp08/dyod/crushbone/dyod_cbk_weaponsrack_wall02_blue',1190),(16733,16733,'staticobjects/_exp08/dyod/crushbone/dyod_cbk_weaponsrack_wall_empty',1190),(16734,16734,'staticobjects/_exp08/dyod/crushbone/dyod_cbk_weaponsrack_wall_empty_blue',1190),(16735,16735,'staticobjects/_exp08/dyod/crushbone/dyod_cbk_torch001_skull',1190),(16736,16736,'staticobjects/_exp08/dyod/crushbone/dyod_cbk_planks01',1190),(16737,16737,'staticobjects/_exp08/dyod/crushbone/dyod_cbk_planks02',1190),(16738,16738,'staticobjects/_exp08/dyod/crushbone/dyod_cbk_plate_jail',1190),(16739,16739,'staticobjects/_exp08/dyod/crushbone/dyod_cbk_plate_withbone',1190),(16740,16740,'staticobjects/_exp08/dyod/crushbone/dyod_cbk_plate_withrats',1190),(16741,16741,'staticobjects/_exp08/dyod/crushbone/dyod_cbk_polearm',1190),(16742,16742,'staticobjects/_exp08/dyod/crushbone/dyod_cbk_poleaxe',1190),(16743,16743,'staticobjects/_exp08/dyod/crushbone/dyod_cbk_post_orc_crushbone',1190),(16744,16744,'staticobjects/_exp08/dyod/crushbone/dyod_cbk_post_orc_emperorcrush',1190),(16745,16745,'staticobjects/_exp08/dyod/crushbone/dyod_cbk_potionsack',1190),(16746,16746,'staticobjects/_exp08/dyod/crushbone/dyod_cbk_pots_orc_large01',1190),(16747,16747,'staticobjects/_exp08/dyod/crushbone/dyod_cbk_pots_orc_small01',1190),(16748,16748,'staticobjects/_exp08/dyod/crushbone/dyod_cbk_rubbish_muckbones01',1190),(16749,16749,'staticobjects/_exp08/dyod/crushbone/dyod_cbk_rubbish_muckbones02',1190),(16750,16750,'staticobjects/_exp08/dyod/crushbone/dyod_cbk_skull_human01',1190),(16751,16751,'staticobjects/_exp08/dyod/crushbone/dyod_cbk_spear01',1190),(16752,16752,'staticobjects/_exp08/dyod/crushbone/dyod_cbk_spoon_orc_wood',1190),(16753,16753,'staticobjects/_exp08/dyod/crushbone/dyod_cbk_statue_orc_knight01',1190),(16754,16754,'staticobjects/_exp08/dyod/crushbone/dyod_cbk_stool_orc_wood01',1190),(16755,16755,'staticobjects/_exp08/dyod/crushbone/dyod_cbk_table_darkelfthrone',1190),(16756,16756,'staticobjects/_exp08/dyod/crushbone/dyod_cbk_table_long',1190),(16757,16757,'staticobjects/_exp08/dyod/crushbone/dyod_cbk_table_long_blue',1190),(16758,16758,'staticobjects/_exp08/dyod/crushbone/dyod_cbk_table_long_withfood',1190),(16759,16759,'staticobjects/_exp08/dyod/crushbone/dyod_cbk_table_small01',1190),(16760,16760,'staticobjects/_exp08/dyod/crushbone/dyod_cbk_table_small01_blue',1190),(16761,16761,'staticobjects/_exp08/dyod/crushbone/dyod_cbk_torture_chair01',1190),(16762,16762,'staticobjects/_exp08/dyod/crushbone/dyod_cbk_torture_hangingcage_long01',1190),(16763,16763,'staticobjects/_exp08/dyod/crushbone/dyod_cbk_torture_hangingcage_short01',1190),(16764,16764,'staticobjects/_exp08/dyod/crushbone/dyod_cbk_torture_hangingcage_short01_nofx',1190),(16765,16765,'staticobjects/_exp08/dyod/crushbone/dyod_cbk_torture_manacles_ceiling_swinging',1190),(16766,16766,'staticobjects/_exp08/dyod/crushbone/dyod_cbk_torture_manacles_wall01',1190),(16767,16767,'staticobjects/_exp08/dyod/crushbone/dyod_cbk_torture_manacles_wall02',1190),(16768,16768,'staticobjects/_exp08/dyod/crushbone/dyod_cbk_torture_pear_closed01',1190),(16769,16769,'staticobjects/_exp08/dyod/crushbone/dyod_cbk_torture_pear_open01',1190),(16770,16770,'staticobjects/_exp08/dyod/crushbone/dyod_cbk_torture_stockade01',1190),(16771,16771,'staticobjects/_exp08/dyod/crushbone/dyod_cbk_torture_table01',1190),(16772,16772,'staticobjects/_exp08/dyod/crushbone/dyod_cbk_torture_tool01',1190),(16773,16773,'staticobjects/_exp08/dyod/crushbone/dyod_cbk_trunk_shoddy',1190),(16774,16774,'staticobjects/_exp08/dyod/lair_of_scale/dyod_ls_sculpture_glass_rotate01',1190),(16775,16775,'staticobjects/_exp08/dyod/lair_of_scale/dyod_los_jail_cell_piece01',1190),(16776,16776,'staticobjects/_exp08/dyod/lair_of_scale/dyod_ls_banner_minion01',1190),(16777,16777,'staticobjects/_exp08/dyod/lair_of_scale/dyod_ls_banner_minion_flag',1190),(16778,16778,'staticobjects/_exp08/dyod/lair_of_scale/dyod_ls_banner_minion_post01',1190),(16779,16779,'staticobjects/_exp08/dyod/lair_of_scale/dyod_ls_bowl_jewels01',1190),(16780,16780,'staticobjects/_exp08/dyod/lair_of_scale/dyod_ls_bowl_steam01',1190),(16781,16781,'staticobjects/_exp08/dyod/lair_of_scale/dyod_ls_bowl_steam02',1190),(16782,16782,'staticobjects/_exp08/dyod/lair_of_scale/dyod_ls_bowl_steam03',1190),(16783,16783,'staticobjects/_exp08/dyod/lair_of_scale/dyod_ls_chair_metal01',1190),(16784,16784,'staticobjects/_exp08/dyod/lair_of_scale/dyod_ls_chair_metal02',1190),(16785,16785,'staticobjects/_exp08/dyod/lair_of_scale/dyod_ls_chest_metal01',1190),(16786,16786,'staticobjects/_exp08/dyod/lair_of_scale/dyod_ls_decoration_wall_dragonhead01',1190),(16787,16787,'staticobjects/_exp08/dyod/lair_of_scale/dyod_ls_dragoneggs_broken',1190),(16788,16788,'staticobjects/_exp08/dyod/lair_of_scale/dyod_ls_dragoneggs_mixed',1190),(16789,16789,'staticobjects/_exp08/dyod/lair_of_scale/dyod_ls_dragoneggs_unbroken',1190),(16790,16790,'staticobjects/_exp08/dyod/lair_of_scale/dyod_ls_lamp_metal_blue',1190),(16791,16791,'staticobjects/_exp08/dyod/lair_of_scale/dyod_ls_lava_lamp01',1190),(16792,16792,'staticobjects/_exp08/dyod/lair_of_scale/dyod_ls_lightsource_doorwaytorch01',1190),(16793,16793,'staticobjects/_exp08/dyod/lair_of_scale/dyod_ls_lightsource_orb_blue',1190),(16794,16794,'staticobjects/_exp08/dyod/lair_of_scale/dyod_ls_lightsource_walltorch01',1190),(16795,16795,'staticobjects/_exp08/dyod/lair_of_scale/dyod_ls_lightsource_walltorch02',1190),(16796,16796,'staticobjects/_exp08/dyod/lair_of_scale/dyod_ls_lightsource_walltorch02_lit',1190),(16797,16797,'staticobjects/_exp08/dyod/lair_of_scale/dyod_ls_lightsource_walltorch_red01',1190),(16798,16798,'staticobjects/_exp08/dyod/lair_of_scale/dyod_ls_minion_empty_armorstand01',1190),(16799,16799,'staticobjects/_exp08/dyod/lair_of_scale/dyod_ls_minion_weapons_armorstand01',1190),(16800,16800,'staticobjects/_exp08/dyod/lair_of_scale/dyod_ls_plants_blueflame_group01',1190),(16801,16801,'staticobjects/_exp08/dyod/lair_of_scale/dyod_ls_plants_blueflame_group02',1190),(16802,16802,'staticobjects/_exp08/dyod/lair_of_scale/dyod_ls_plants_blueflame_large01',1190),(16803,16803,'staticobjects/_exp08/dyod/lair_of_scale/dyod_ls_plants_blueflame_single01',1190),(16804,16804,'staticobjects/_exp08/dyod/lair_of_scale/dyod_ls_plants_blueflame_single02',1190),(16805,16805,'staticobjects/_exp08/dyod/lair_of_scale/dyod_ls_plants_blueflame_small',1190),(16806,16806,'staticobjects/_exp08/dyod/lair_of_scale/dyod_ls_plants_blueflame_smallsingle03',1190),(16807,16807,'staticobjects/_exp08/dyod/lair_of_scale/dyod_ls_ring_scales01',1190),(16808,16808,'staticobjects/_exp08/dyod/lair_of_scale/dyod_ls_sculpture_glass01',1190),(16809,16809,'staticobjects/_exp08/dyod/lair_of_scale/dyod_ls_sculpture_glass02',1190),(16810,16810,'staticobjects/_exp08/dyod/lair_of_scale/dyod_ls_sculpture_glass03',1190),(16811,16811,'staticobjects/_exp08/dyod/lair_of_scale/dyod_ls_sculpture_glass_double01',1190),(16812,16812,'staticobjects/_exp08/dyod/lair_of_scale/dyod_ls_sculpture_glass_double02',1190),(16813,16813,'staticobjects/_exp08/dyod/lair_of_scale/dyod_ls_vase_curved02',1190),(16814,16814,'staticobjects/_exp08/dyod/lair_of_scale/dyod_ls_sculpture_glass_rotate02',1190),(16815,16815,'staticobjects/_exp08/dyod/lair_of_scale/dyod_ls_sculpture_glass_rotate03',1190),(16816,16816,'staticobjects/_exp08/dyod/lair_of_scale/dyod_ls_sculpture_rotating02',1190),(16817,16817,'staticobjects/_exp08/dyod/lair_of_scale/dyod_ls_sculpture_rotating03',1190),(16818,16818,'staticobjects/_exp08/dyod/lair_of_scale/dyod_ls_sculpture_rotating',1190),(16819,16819,'staticobjects/_exp08/dyod/lair_of_scale/dyod_ls_statue_dragon01',1190),(16820,16820,'staticobjects/_exp08/dyod/lair_of_scale/dyod_ls_statue_dragon02',1190),(16821,16821,'staticobjects/_exp08/dyod/lair_of_scale/dyod_ls_statue_dragon_bust01',1190),(16822,16822,'staticobjects/_exp08/dyod/lair_of_scale/dyod_ls_table_long01',1190),(16823,16823,'staticobjects/_exp08/dyod/lair_of_scale/dyod_ls_table_long02',1190),(16824,16824,'staticobjects/_exp08/dyod/lair_of_scale/dyod_ls_table_long_chemistry01',1190),(16825,16825,'staticobjects/_exp08/dyod/lair_of_scale/dyod_ls_table_short01',1190),(16826,16826,'staticobjects/_exp08/dyod/lair_of_scale/dyod_ls_table_short02',1190),(16827,16827,'staticobjects/_exp08/dyod/lair_of_scale/dyod_ls_tapestry_awakened_cult01',1190),(16828,16828,'staticobjects/_exp08/dyod/lair_of_scale/dyod_ls_tapestry_kerafyrm_apocalypse01',1190),(16829,16829,'staticobjects/_exp08/dyod/lair_of_scale/dyod_ls_tapestry_kerafyrm_awakening01',1190),(16830,16830,'staticobjects/_exp08/dyod/lair_of_scale/dyod_ls_tent_minion',1190),(16831,16831,'staticobjects/_exp08/dyod/lair_of_scale/dyod_ls_tome_dragon_brass01',1190),(16832,16832,'staticobjects/_exp08/dyod/lair_of_scale/dyod_ls_tome_dragon_brass02',1190),(16833,16833,'staticobjects/_exp08/dyod/lair_of_scale/dyod_ls_tome_dragon_group01',1190),(16834,16834,'staticobjects/_exp08/dyod/lair_of_scale/dyod_ls_tome_dragon_group02',1190),(16835,16835,'staticobjects/_exp08/dyod/lair_of_scale/dyod_ls_tome_dragon_purple01',1190),(16836,16836,'staticobjects/_exp08/dyod/lair_of_scale/dyod_ls_tome_dragon_purple02',1190),(16837,16837,'staticobjects/_exp08/dyod/lair_of_scale/dyod_ls_vase_curved01',1190),(16838,16838,'staticobjects/_exp08/dyod/mistmoore/dyod_cm_dresser_single01',1190),(16839,16839,'staticobjects/_exp08/dyod/mistmoore/dyod_cm_arcane_bookcase01',1190),(16840,16840,'staticobjects/_exp08/dyod/mistmoore/dyod_cm_arcane_bottle_glass01',1190),(16841,16841,'staticobjects/_exp08/dyod/mistmoore/dyod_cm_arcane_bottle_glass02',1190),(16842,16842,'staticobjects/_exp08/dyod/mistmoore/dyod_cm_arcane_candlestack01',1190),(16843,16843,'staticobjects/_exp08/dyod/mistmoore/dyod_cm_arcane_potionsack01',1190),(16844,16844,'staticobjects/_exp08/dyod/mistmoore/dyod_cm_basin01_water',1190),(16845,16845,'staticobjects/_exp08/dyod/mistmoore/dyod_cm_basin02_water',1190),(16846,16846,'staticobjects/_exp08/dyod/mistmoore/dyod_cm_bed_master01',1190),(16847,16847,'staticobjects/_exp08/dyod/mistmoore/dyod_cm_bed_master02',1190),(16848,16848,'staticobjects/_exp08/dyod/mistmoore/dyod_cm_bed_twin01',1190),(16849,16849,'staticobjects/_exp08/dyod/mistmoore/dyod_cm_bed_twin02',1190),(16850,16850,'staticobjects/_exp08/dyod/mistmoore/dyod_cm_bench_marble01',1190),(16851,16851,'staticobjects/_exp08/dyod/mistmoore/dyod_cm_bench_marble_short01',1190),(16852,16852,'staticobjects/_exp08/dyod/mistmoore/dyod_cm_bench_metal01',1190),(16853,16853,'staticobjects/_exp08/dyod/mistmoore/dyod_cm_bench_metal_short01',1190),(16854,16854,'staticobjects/_exp08/dyod/mistmoore/dyod_cm_bench_wood01',1190),(16855,16855,'staticobjects/_exp08/dyod/mistmoore/dyod_cm_bench_wood_short01',1190),(16856,16856,'staticobjects/_exp08/dyod/mistmoore/dyod_cm_book01',1190),(16857,16857,'staticobjects/_exp08/dyod/mistmoore/dyod_cm_book02',1190),(16858,16858,'staticobjects/_exp08/dyod/mistmoore/dyod_cm_book_group01',1190),(16859,16859,'staticobjects/_exp08/dyod/mistmoore/dyod_cm_book_group02',1190),(16860,16860,'staticobjects/_exp08/dyod/mistmoore/dyod_cm_book_openbook01',1190),(16861,16861,'staticobjects/_exp08/dyod/mistmoore/dyod_cm_bookcase01',1190),(16862,16862,'staticobjects/_exp08/dyod/mistmoore/dyod_cm_bookcase02',1190),(16863,16863,'staticobjects/_exp08/dyod/mistmoore/dyod_cm_bookcase_empty01',1190),(16864,16864,'staticobjects/_exp08/dyod/mistmoore/dyod_cm_candle_white01',1190),(16865,16865,'staticobjects/_exp08/dyod/mistmoore/dyod_cm_chair_chaise01',1190),(16866,16866,'staticobjects/_exp08/dyod/mistmoore/dyod_cm_chair_chaise02',1190),(16867,16867,'staticobjects/_exp08/dyod/mistmoore/dyod_cm_chair_dining01',1190),(16868,16868,'staticobjects/_exp08/dyod/mistmoore/dyod_cm_chair_dining02',1190),(16869,16869,'staticobjects/_exp08/dyod/mistmoore/dyod_cm_chair_dining03',1190),(16870,16870,'staticobjects/_exp08/dyod/mistmoore/dyod_cm_chair_dining04',1190),(16871,16871,'staticobjects/_exp08/dyod/mistmoore/dyod_cm_chest_treasure01',1190),(16872,16872,'staticobjects/_exp08/dyod/mistmoore/dyod_cm_chest_treasure02',1190),(16873,16873,'staticobjects/_exp08/dyod/mistmoore/dyod_cm_coffin_stone01',1190),(16874,16874,'staticobjects/_exp08/dyod/mistmoore/dyod_cm_couch01',1190),(16875,16875,'staticobjects/_exp08/dyod/mistmoore/dyod_cm_couch02',1190),(16876,16876,'staticobjects/_exp08/dyod/mistmoore/dyod_cm_dresser_servant01',1190),(16877,16877,'staticobjects/_exp08/dyod/mistmoore/dyod_cm_vase_large01',1190),(16878,16878,'staticobjects/_exp08/dyod/mistmoore/dyod_cm_fabricbolt01',1190),(16879,16879,'staticobjects/_exp08/dyod/mistmoore/dyod_cm_fabricbolt02',1190),(16880,16880,'staticobjects/_exp08/dyod/mistmoore/dyod_cm_lightsource_candlestick01',1190),(16881,16881,'staticobjects/_exp08/dyod/mistmoore/dyod_cm_lightsource_candlestick02',1190),(16882,16882,'staticobjects/_exp08/dyod/mistmoore/dyod_cm_lightsource_chandalier01',1190),(16883,16883,'staticobjects/_exp08/dyod/mistmoore/dyod_cm_lightsource_chandalier01_swinging',1190),(16884,16884,'staticobjects/_exp08/dyod/mistmoore/dyod_cm_lightsource_chandalier02',1190),(16885,16885,'staticobjects/_exp08/dyod/mistmoore/dyod_cm_lightsource_chandalier02_swinging',1190),(16886,16886,'staticobjects/_exp08/dyod/mistmoore/dyod_cm_lightsource_floor_candelabra01',1190),(16887,16887,'staticobjects/_exp08/dyod/mistmoore/dyod_cm_lightsource_floor_candelabra02',1190),(16888,16888,'staticobjects/_exp08/dyod/mistmoore/dyod_cm_lightsource_table_candelabra01',1190),(16889,16889,'staticobjects/_exp08/dyod/mistmoore/dyod_cm_manacles_double_wall01',1190),(16890,16890,'staticobjects/_exp08/dyod/mistmoore/dyod_cm_manacles_double_wall02',1190),(16891,16891,'staticobjects/_exp08/dyod/mistmoore/dyod_cm_manacles_single_wall01',1190),(16892,16892,'staticobjects/_exp08/dyod/mistmoore/dyod_cm_manacles_single_wall02',1190),(16893,16893,'staticobjects/_exp08/dyod/mistmoore/dyod_cm_piano_bench01',1190),(16894,16894,'staticobjects/_exp08/dyod/mistmoore/dyod_cm_piano_closed01',1190),(16895,16895,'staticobjects/_exp08/dyod/mistmoore/dyod_cm_piano_open01',1190),(16896,16896,'staticobjects/_exp08/dyod/mistmoore/dyod_cm_scrolls_stack01',1190),(16897,16897,'staticobjects/_exp08/dyod/mistmoore/dyod_cm_scrolls_stack02',1190),(16898,16898,'staticobjects/_exp08/dyod/mistmoore/dyod_cm_table_bedside01',1190),(16899,16899,'staticobjects/_exp08/dyod/mistmoore/dyod_cm_table_coffee01',1190),(16900,16900,'staticobjects/_exp08/dyod/mistmoore/dyod_cm_table_endtable01_small',1190),(16901,16901,'staticobjects/_exp08/dyod/mistmoore/dyod_cm_table_hallway01',1190),(16902,16902,'staticobjects/_exp08/dyod/mistmoore/dyod_cm_table_long01',1190),(16903,16903,'staticobjects/_exp08/dyod/mistmoore/dyod_cm_table_magical01',1190),(16904,16904,'staticobjects/_exp08/dyod/mistmoore/dyod_cm_table_short01',1190),(16905,16905,'staticobjects/_exp08/dyod/dungeon_builder_enter_box',1190),(16906,16906,'staticobjects/shield/shard_of_love_shield_gold_dpo',1190),(16907,16907,'creatures/monsters/monitorlizard_orange_no_idle_sound',1190),(16908,16908,'staticobjects/freeport_combined/grozmok_pauldron_dpo',1190),(16909,16909,'staticobjects/pictures/freeport_painting01',1190),(16910,16910,'staticobjects/pictures/freeport_painting02',1190),(16911,16911,'staticobjects/pictures/freeport_painting03',1190),(16912,16912,'staticobjects/pictures/freeport_painting04',1190),(16913,16913,'staticobjects/pictures/freeport_painting05',1190),(16914,16914,'staticobjects/pictures/freeport_painting06',1190),(16915,16915,'staticobjects/pictures/freeport_painting07',1190),(16916,16916,'staticobjects/_exp08/dyod/chardok/dyod_char_banner_dizok01',1190),(16917,16917,'staticobjects/_exp08/dyod/chardok/dyod_char_banner_dizok02',1190),(16918,16918,'staticobjects/_exp08/dyod/chardok/dyod_char_bed_sarnak_bunk01',1190),(16919,16919,'staticobjects/_exp08/dyod/chardok/dyod_char_bed_sarnak_bunk02',1190),(16920,16920,'staticobjects/_exp08/dyod/chardok/dyod_char_book01_dizok',1190),(16921,16921,'staticobjects/_exp08/dyod/chardok/dyod_char_book02_korsha',1190),(16922,16922,'staticobjects/_exp08/dyod/chardok/dyod_char_book_single01',1190),(16923,16923,'staticobjects/_exp08/dyod/chardok/dyod_char_book_single02',1190),(16924,16924,'staticobjects/_exp08/dyod/chardok/dyod_char_bookcase01',1190),(16925,16925,'staticobjects/_exp08/dyod/chardok/dyod_char_bookcase01_empty01',1190),(16926,16926,'staticobjects/_exp08/dyod/chardok/dyod_char_bookcase02',1190),(16927,16927,'staticobjects/_exp08/dyod/chardok/dyod_char_bookcase02_empty01',1190),(16928,16928,'staticobjects/_exp08/dyod/chardok/dyod_char_chain_hook_empty_swinging',1190),(16929,16929,'staticobjects/_exp08/dyod/chardok/dyod_char_chain_hook_skull_swinging',1190),(16930,16930,'staticobjects/_exp08/dyod/chardok/dyod_char_chest_military01',1190),(16931,16931,'staticobjects/_exp08/dyod/chardok/dyod_char_chest_sarnak_treasure01',1190),(16932,16932,'staticobjects/_exp08/dyod/chardok/dyod_char_haypile01',1190),(16933,16933,'staticobjects/_exp08/dyod/chardok/dyod_char_hitchingpost_sokokar01',1190),(16934,16934,'staticobjects/_exp08/dyod/chardok/dyod_char_lantern_antibat01',1190),(16935,16935,'staticobjects/_exp08/dyod/chardok/dyod_char_lightsource_brazier01',1190),(16936,16936,'staticobjects/_exp08/dyod/chardok/dyod_char_lightsource_chandalier01',1190),(16937,16937,'staticobjects/_exp08/dyod/chardok/dyod_char_lightsource_iksarskull01',1190),(16938,16938,'staticobjects/_exp08/dyod/chardok/dyod_char_rug01',1190),(16939,16939,'staticobjects/_exp08/dyod/chardok/dyod_char_rug02',1190),(16940,16940,'staticobjects/_exp08/dyod/chardok/dyod_char_skull_dizok01',1190),(16941,16941,'staticobjects/_exp08/dyod/chardok/dyod_char_statue_sarnak01',1190),(16942,16942,'staticobjects/_exp08/dyod/chardok/dyod_char_statue_sarnak02',1190),(16943,16943,'staticobjects/_exp08/dyod/chardok/dyod_char_throne_korsha01',1190),(16944,16944,'staticobjects/_exp08/dyod/chardok/dyod_char_throne_table_tall01',1190),(16945,16945,'staticobjects/_exp08/dyod/chardok/dyod_char_totem01',1190),(16946,16946,'staticobjects/_exp08/dyod/chardok/dyod_char_totem02',1190),(16947,16947,'staticobjects/_exp08/dyod/chardok/dyod_char_totem_base01',1190),(16948,16948,'staticobjects/_exp08/dyod/chardok/dyod_char_totem_crystal01',1190),(16949,16949,'staticobjects/_exp08/dyod/chardok/dyod_char_totem_crystal01_colored',1190),(16950,16950,'staticobjects/_exp08/dyod/chardok/dyod_char_totem_crystal02_runes',1190),(16951,16951,'staticobjects/_exp08/dyod/chardok/dyod_char_totem_stone01',1190),(16952,16952,'staticobjects/_exp08/dyod/chardok/dyod_char_totem_stone02_norunes',1190),(16953,16953,'staticobjects/_exp08/dyod/chardok/dyod_char_totem_stonecrystal01',1190),(16954,16954,'staticobjects/_exp08/dyod/chardok/dyod_char_weaponrack_empty01',1190),(16955,16955,'staticobjects/_exp08/dyod/chardok/dyod_char_weaponrack_floor01',1190),(16956,16956,'staticobjects/_exp08/dyod/chardok/dyod_char_weaponrack_floor02',1190),(16957,16957,'accessories/wearable_items/snapons/backpacks/backpack_assassin_swivel/backpack_assassin_swivel_kinves',1190),(16958,16958,'_exp08/characters/monsters/dragon_made_golem/dragon_made_golem_arcane',1190),(16959,16959,'_exp08/characters/monsters/dragon_made_golem/dragon_made_golem_base',1190),(16960,16960,'_exp08/characters/monsters/dragon_made_golem/dragon_made_golem_diplomatic',1190),(16961,16961,'_exp09/characters/tool_users/musk_creeper_giants/musk_creeper_giant1',1190),(16962,16962,'_exp09/characters/tool_users/musk_creeper_giants/musk_creeper_giant2',1190),(16963,16963,'_exp09/characters/tool_users/musk_creeper_giants/musk_creeper_giant3',1190),(16964,16964,'creatures/mounts/frostfell_snow_cloud_housing',1190),(16965,16965,'_exp08/characters/monsters/dragon_bone_golem/dragon_bone_golem_blue',1190),(16966,16966,'_exp08/characters/monsters/dragon_bone_golem/dragon_bone_golem_red',1190),(16967,16967,'_exp09/characters/monsters/queen_bug/queen_bug_blue',1190),(16968,16968,'_exp09/characters/monsters/queen_bug/queen_bug_red',1190),(16969,16969,'accessories/wearable_items/_exp09/freeport_militia/vanguard/chest',1190),(16970,16970,'accessories/wearable_items/_exp09/freeport_militia/vanguard/epic_pauldron_left',1190),(16971,16971,'accessories/wearable_items/_exp09/freeport_militia/vanguard/epic_pauldron_right',1190),(16972,16972,'accessories/wearable_items/_exp09/freeport_militia/vanguard/feet',1190),(16973,16973,'accessories/wearable_items/_exp09/freeport_militia/vanguard/forearms',1190),(16974,16974,'accessories/wearable_items/_exp09/freeport_militia/vanguard/hands',1190),(16975,16975,'accessories/wearable_items/_exp09/freeport_militia/vanguard/head',1190),(16976,16976,'accessories/wearable_items/_exp09/freeport_militia/vanguard/head_epic',1190),(16977,16977,'accessories/wearable_items/_exp09/freeport_militia/vanguard/legs',1190),(16978,16978,'accessories/wearable_items/_exp09/freeport_militia/vanguard/legs_noskirt',1190),(16979,16979,'accessories/wearable_items/_exp09/freeport_militia/vanguard/right',1190),(16980,16980,'accessories/wearable_items/_exp09/freeport_militia/vanguard/shoulders',1190),(16981,16981,'accessories/wearable_items/_exp09/freeport_militia/vanguard/shoulders_epic',1190),(16982,16982,'accessories/wearable_items/_exp09/freeport_militia/vanguard/shoulders_nopauldrons',1190),(16983,16983,'accessories/wearable_items/_exp09/freeport_militia/vanguard/skirt',1190),(16984,16984,'accessories/wearable_items/cloak/exp09/cloak_freeport_militia',1190),(16985,16985,'accessories/wearable_items/_exp08/freeport_lucanknight/chest',1190),(16986,16986,'accessories/wearable_items/_exp08/freeport_lucanknight/cowl',1190),(16987,16987,'accessories/wearable_items/_exp08/freeport_lucanknight/feet',1190),(16988,16988,'accessories/wearable_items/_exp08/freeport_lucanknight/forearm_left',1190),(16989,16989,'accessories/wearable_items/_exp08/freeport_lucanknight/forearm_right',1190),(16990,16990,'accessories/wearable_items/_exp08/freeport_lucanknight/forearms',1190),(16991,16991,'accessories/wearable_items/_exp08/freeport_lucanknight/hands',1190),(16992,16992,'accessories/wearable_items/_exp08/freeport_lucanknight/hands_epic',1190),(16993,16993,'accessories/wearable_items/_exp08/freeport_lucanknight/head',1190),(16994,16994,'accessories/wearable_items/_exp08/freeport_lucanknight/head_epic',1190),(16995,16995,'accessories/wearable_items/_exp08/freeport_lucanknight/legs',1190),(16996,16996,'accessories/wearable_items/_exp08/freeport_lucanknight/legs_noskirt',1190),(16997,16997,'accessories/wearable_items/_exp08/freeport_lucanknight/pauldron_left',1190),(16998,16998,'accessories/wearable_items/_exp08/freeport_lucanknight/pauldron_right',1190),(16999,16999,'accessories/wearable_items/_exp08/freeport_lucanknight/right',1190),(17000,17000,'accessories/wearable_items/_exp08/freeport_lucanknight/shoulders',1190),(17001,17001,'accessories/wearable_items/_exp08/freeport_lucanknight/shoulders_epic',1190),(17002,17002,'accessories/wearable_items/_exp08/freeport_lucanknight/shoulders_nopauldrons',1190),(17003,17003,'accessories/wearable_items/_exp08/freeport_lucanknight/skirt',1190),(17004,17004,'accessories/wearable_items/cloak/exp09/cloak_arcane_science_incut',1190),(17005,17005,'accessories/wearable_items/cloak/exp09/cloak_arcane_science_scallop',1190),(17006,17006,'accessories/wearable_items/cloak/exp09/cloak_arcane_science_sq',1190),(17007,17007,'accessories/wearable_items/_exp09/robe_arcane_science/chest',1190),(17008,17008,'accessories/wearable_items/_exp09/robe_arcane_science/chest_epic',1190),(17009,17009,'accessories/wearable_items/_exp09/robe_arcane_science/feet',1190),(17010,17010,'accessories/wearable_items/_exp09/robe_arcane_science/hands',1190),(17011,17011,'accessories/wearable_items/_exp09/robe_arcane_science/head',1190),(17012,17012,'accessories/wearable_items/_exp09/robe_arcane_science/head_collar_flared',1190),(17013,17013,'accessories/wearable_items/_exp09/robe_arcane_science/pants',1190),(17014,17014,'accessories/wearable_items/_exp09/robe_arcane_science/pauldron_left',1190),(17015,17015,'accessories/wearable_items/_exp09/robe_arcane_science/pauldron_right',1190),(17016,17016,'accessories/wearable_items/_exp09/robe_arcane_science/skirt',1190),(17017,17017,'accessories/wearable_items/cloak/exp08/cloak_freeportknight_epic',1190),(17018,17018,'accessories/wearable_items/cloak/exp08/cloak_freeportknight',1190),(17019,17019,'accessories/wearable_items/cloak/exp08/cloak_freeportknight_npc',1190),(17020,17020,'accessories/wearable_items/_exp09/chain_dismal_rage/chest',1190),(17021,17021,'accessories/wearable_items/_exp09/chain_dismal_rage/feet',1190),(17022,17022,'accessories/wearable_items/_exp09/chain_dismal_rage/forearms',1190),(17023,17023,'accessories/wearable_items/_exp09/chain_dismal_rage/hands',1190),(17024,17024,'accessories/wearable_items/_exp09/chain_dismal_rage/head',1190),(17025,17025,'accessories/wearable_items/_exp09/chain_dismal_rage/head_hood',1190),(17026,17026,'accessories/wearable_items/_exp09/chain_dismal_rage/legs',1190),(17027,17027,'accessories/wearable_items/_exp09/chain_dismal_rage/legs_noskirt',1190),(17028,17028,'accessories/wearable_items/_exp09/chain_dismal_rage/pauldron_left_dismal_rage',1190),(17029,17029,'accessories/wearable_items/_exp09/chain_dismal_rage/pauldron_right_dismal_rage',1190),(17030,17030,'accessories/wearable_items/_exp09/chain_dismal_rage/shoulders',1190),(17031,17031,'accessories/wearable_items/_exp09/chain_dismal_rage/shoulders_epic',1190),(17032,17032,'accessories/wearable_items/_exp09/chain_dismal_rage/skirt',1190),(17033,17033,'accessories/wearable_items/cloak/exp09/cloak_dismal_rage',1190),(17034,17034,'accessories/wearable_items/cloak/exp09/cloak_dismal_rage_incut',1190),(17035,17035,'accessories/wearable_items/_exp09/seafury_buccaneer/heavycloth/chest',1190),(17036,17036,'accessories/wearable_items/_exp09/seafury_buccaneer/heavycloth/feet',1190),(17037,17037,'accessories/wearable_items/_exp09/seafury_buccaneer/heavycloth/feet_peg_left',1190),(17038,17038,'accessories/wearable_items/_exp09/seafury_buccaneer/heavycloth/feet_peg_right',1190),(17039,17039,'accessories/wearable_items/_exp09/seafury_buccaneer/heavycloth/forearms',1190),(17040,17040,'accessories/wearable_items/_exp09/seafury_buccaneer/heavycloth/hands',1190),(17041,17041,'accessories/wearable_items/_exp09/seafury_buccaneer/heavycloth/head',1190),(17042,17042,'accessories/wearable_items/_exp09/seafury_buccaneer/heavycloth/head_captain',1190),(17043,17043,'accessories/wearable_items/_exp09/seafury_buccaneer/heavycloth/head_swashbuckler',1190),(17044,17044,'accessories/wearable_items/_exp09/seafury_buccaneer/heavycloth/legs',1190),(17045,17045,'accessories/wearable_items/_exp09/seafury_buccaneer/heavycloth/shoulders',1190),(17046,17046,'accessories/wearable_items/_exp09/seafury_buccaneer/heavycloth/skirt',1190),(17047,17047,'accessories/wearable_items/cloak/exp09/cloak_seafury_buccaneer',1190),(17048,17048,'_exp09/characters/monsters/wyvern_updated/wyvern_updated_greenyellow',1190),(17049,17049,'_exp09/characters/monsters/wyvern_updated/wyvern_updated_ice',1190),(17050,17050,'_exp09/characters/monsters/wyvern_updated/wyvern_updated_natural',1190),(17051,17051,'_exp09/characters/monsters/wyvern_updated/wyvern_updated_redgray',1190),(17052,17052,'_exp09/characters/monsters/wyvern_updated/wyvern_updated_sand',1190),(17053,17053,'_exp09/characters/monsters/wyvern_updated/wyvern_updated_shadow',1190),(17054,17054,'_exp04/monsters/xygoz01',1190),(17055,17055,'_exp04/monsters/dragon_skeleton01',1190),(17056,17056,'_exp04/monsters/hoshkar01',1190),(17057,17057,'_exp04/monsters/nexona01',1190),(17058,17058,'_exp04/monsters/xygoz_fire01',1190),(17059,17059,'_exp04/monsters/xygoz_shade01',1190),(17060,17060,'_exp04/monsters/xygoz_spirit01',1190),(17061,17061,'_exp08/characters/monsters/dragon_bone_golem/dragon_bone_golem',1190),(17062,17062,'_exp08/characters/monsters/dragon_made_golem/dragon_made_golem_boss',1190),(17063,17063,'staticobjects/pillow/drv_pillow_seat_weights01',1190),(17064,17064,'staticobjects/pillow/drv_pillow_seat_weights02',1190),(17065,17065,'staticobjects/pillow/slove02_drapery_houseitem01',1190),(17066,17066,'staticobjects/benches/slove02_flame_bench01',1190),(17067,17067,'_exp09/characters/monsters/cobalt_scar_bear/timber_bear_black',1190),(17068,17068,'_exp09/characters/monsters/cobalt_scar_bear/timber_bear_brown',1190),(17069,17069,'_exp09/characters/monsters/cobalt_scar_bear/timber_bear_grey',1190),(17070,17070,'_exp08/characters/tool_users/chitari/chitari_male_heavy02',1190),(17071,17071,'_exp08/characters/tool_users/chitari/chitari_male_light02',1190),(17072,17072,'_exp08/characters/tool_users/chitari/chitari_swivel_skull',1190),(17073,17073,'staticobjects/liveevent/erollisi_objects/dpo_bauble_bow_string_daisy_purple',1190),(17074,17074,'staticobjects/liveevent/erollisi_objects/dpo_bauble_bow_string_mums_red',1190),(17075,17075,'staticobjects/liveevent/erollisi_objects/dpo_bauble_rose_purple',1190),(17076,17076,'staticobjects/liveevent/erollisi_objects/dpo_bauble_rose_red',1190),(17077,17077,'staticobjects/liveevent/erollisi_objects/dpo_bauble_string_lights_hearts',1190),(17078,17078,'staticobjects/liveevent/erollisi_objects/dpo_bauble_string_lights_roses',1190),(17079,17079,'staticobjects/urns/dpo_slove02_vase01',1190),(17080,17080,'staticobjects/urns/dpo_slove02_vase02',1190),(17081,17081,'staticobjects/urns/dpo_slove02_vase03',1190),(17082,17082,'creatures/mounts/drakota_mount/drakota_mount_black',1190),(17083,17083,'creatures/mounts/drakota_mount/drakota_mount_blue',1190),(17084,17084,'creatures/mounts/drakota_mount/drakota_mount_green',1190),(17085,17085,'creatures/mounts/drakota_mount/drakota_mount_red',1190),(17086,17086,'staticobjects/liveevent/erollisi_objects/othmir_heartpillow_brown',1190),(17087,17087,'staticobjects/liveevent/erollisi_objects/othmir_heartpillow_white',1190),(17088,17088,'staticobjects/soe_wallet/building_blocks/ice/houseblock_1x1_column_ice',1190),(17089,17089,'staticobjects/soe_wallet/building_blocks/ice/houseblock_1x2_column_ice',1190),(17090,17090,'staticobjects/soe_wallet/building_blocks/ice/houseblock_1x2_divider_ice',1190),(17091,17091,'staticobjects/soe_wallet/building_blocks/ice/houseblock_1xhalf_ice',1190),(17092,17092,'staticobjects/soe_wallet/building_blocks/ice/houseblock_2x2_divider_ice',1190),(17093,17093,'staticobjects/soe_wallet/building_blocks/ice/houseblock_rail_ice',1190),(17094,17094,'staticobjects/soe_wallet/building_blocks/ice/houseblock_roundtile_ice',1190),(17095,17095,'staticobjects/soe_wallet/building_blocks/ice/houseblock_stair_ice',1190),(17096,17096,'staticobjects/soe_wallet/building_blocks/ice/housecube_1x1_block_ice',1190),(17097,17097,'staticobjects/soe_wallet/building_blocks/los_metal/houseblock_1x1_column_los_metal',1190),(17098,17098,'staticobjects/soe_wallet/building_blocks/los_metal/houseblock_1x2_column_los_metal',1190),(17099,17099,'staticobjects/soe_wallet/building_blocks/los_metal/houseblock_1x2_divider_los_metal',1190),(17100,17100,'staticobjects/soe_wallet/building_blocks/los_metal/houseblock_1xhalf_los_metal',1190),(17101,17101,'staticobjects/soe_wallet/building_blocks/los_metal/houseblock_2x2_divider_los_metal',1190),(17102,17102,'staticobjects/soe_wallet/building_blocks/los_metal/houseblock_rail_los_metal',1190),(17103,17103,'staticobjects/soe_wallet/building_blocks/los_metal/houseblock_roundtile_los_metal',1190),(17104,17104,'staticobjects/soe_wallet/building_blocks/los_metal/houseblock_stair_los_metal',1190),(17105,17105,'staticobjects/soe_wallet/building_blocks/los_metal/housecube_1x1_block_los_metal',1190),(17106,17106,'staticobjects/soe_wallet/building_blocks/qey_stone2/houseblock_1x1_column_stone2',1190),(17107,17107,'staticobjects/soe_wallet/building_blocks/qey_stone2/houseblock_1x2_column_stone2',1190),(17108,17108,'staticobjects/soe_wallet/building_blocks/qey_stone2/houseblock_1x2_dividerblock_stone2',1190),(17109,17109,'staticobjects/soe_wallet/building_blocks/qey_stone2/houseblock_1xhalf_block_stone2',1190),(17110,17110,'staticobjects/soe_wallet/building_blocks/qey_stone2/houseblock_2x2_divider_stone2',1190),(17111,17111,'staticobjects/soe_wallet/building_blocks/qey_stone2/houseblock_rail_stone2',1190),(17112,17112,'staticobjects/soe_wallet/building_blocks/qey_stone2/houseblock_roundtile_stone2',1190),(17113,17113,'staticobjects/soe_wallet/building_blocks/qey_stone2/houseblock_stair_stone2',1190),(17114,17114,'staticobjects/soe_wallet/building_blocks/qey_stone2/housecube_1x1_block_stone2',1190),(17115,17115,'staticobjects/soe_wallet/building_blocks/red_marble/houseblock_1x1_column_redmarble',1190),(17116,17116,'staticobjects/soe_wallet/building_blocks/red_marble/houseblock_1x2_column_redmarble',1190),(17117,17117,'staticobjects/soe_wallet/building_blocks/red_marble/houseblock_1x2_divider_redmarble',1190),(17118,17118,'staticobjects/soe_wallet/building_blocks/red_marble/houseblock_1xhalf_block_redmarble',1190),(17119,17119,'staticobjects/soe_wallet/building_blocks/red_marble/houseblock_2x2_divider_redmarble',1190),(17120,17120,'staticobjects/soe_wallet/building_blocks/red_marble/houseblock_rail_redmarble',1190),(17121,17121,'staticobjects/soe_wallet/building_blocks/red_marble/houseblock_roundtile_redmarble',1190),(17122,17122,'staticobjects/soe_wallet/building_blocks/red_marble/houseblock_stair_redmarble',1190),(17123,17123,'staticobjects/soe_wallet/building_blocks/red_marble/housecube_1x1_block_redmarble',1190),(17124,17124,'staticobjects/panels/dpo_neriak_roof',1190),(17125,17125,'staticobjects/soe_wallet/grandfather_clock',1190),(17126,17126,'_exp09/characters/monsters/cobalt_scar_bear/timber_bear_red',1190),(17127,17127,'_exp09/characters/monsters/cobalt_scar_bear/timber_bear_white',1190),(17128,17128,'staticobjects/soe_wallet/building_blocks/los_metal/panel_los_metal',1190),(17129,17129,'staticobjects/soe_wallet/building_blocks/qey_stone2/panel_stone2',1190),(17130,17130,'staticobjects/soe_wallet/building_blocks/ice/panel_ice',1190),(17131,17131,'creatures/mounts/class_hover_pads/hover_pad_beastlord',1190),(17132,17132,'creatures/mounts/drakota_mount/drakota_mount_base',1190),(17133,17133,'_exp09/characters/tool_users/dracurion_palladin/dracurion_palladin',1190),(17134,17134,'_exp09/characters/tool_users/dracurion_shadowknight/dracurion_shadowknight',1190),(17135,17135,'staticobjects/shield/dpo_sc_exp08_shield_nature',1190),(17136,17136,'staticobjects/shield/dpo_sc_exp08_shield_vjornir',1190),(17137,17137,'accessories/wearable_items/_exp08/highelf_heritage_armor/lon/chest',1190),(17138,17138,'accessories/wearable_items/_exp08/highelf_heritage_armor/lon/forearms_wristbands',1190),(17139,17139,'accessories/wearable_items/_exp08/highelf_heritage_armor/lon/hands',1190),(17140,17140,'accessories/wearable_items/_exp08/highelf_heritage_armor/lon/legs',1190),(17141,17141,'accessories/wearable_items/_exp08/highelf_heritage_armor/lon/legs_robe_skirt',1190),(17142,17142,'accessories/wearable_items/_exp08/highelf_heritage_armor/lon/shoulder_armband_male',1190),(17143,17143,'accessories/wearable_items/_exp08/highelf_heritage_armor/lon/sash_version/legs',1190),(17144,17144,'accessories/wearable_items/_exp08/highelf_heritage_armor/lon/sash_version/chest',1190),(17145,17145,'accessories/wearable_items/_exp08/highelf_heritage_armor/lon/sash_version/chest_pendant',1190),(17146,17146,'accessories/wearable_items/_exp08/highelf_heritage_armor/lon/sash_version/hands',1190),(17147,17147,'accessories/wearable_items/_exp08/highelf_heritage_armor/robe/skirt',1190),(17148,17148,'accessories/wearable_items/_exp08/highelf_heritage_armor/robe/chest',1190),(17149,17149,'accessories/wearable_items/_exp08/highelf_heritage_armor/robe/chest_pauldrons',1190),(17150,17150,'accessories/wearable_items/_exp08/highelf_heritage_armor/robe/feet',1190),(17151,17151,'accessories/wearable_items/_exp08/highelf_heritage_armor/robe/hands',1190),(17152,17152,'accessories/wearable_items/_exp08/highelf_heritage_armor/robe/head',1190),(17153,17153,'accessories/wearable_items/_exp08/highelf_heritage_armor/robe/pants',1190),(17154,17154,'accessories/wearable_items/_exp08/highelf_heritage_armor/snapons/shoulder_armband_male_right',1190),(17155,17155,'accessories/wearable_items/_exp08/highelf_heritage_armor/snapons/forearm_wristband_male_left',1190),(17156,17156,'accessories/wearable_items/_exp08/highelf_heritage_armor/snapons/forearm_wristband_male_right',1190),(17157,17157,'accessories/wearable_items/_exp08/highelf_heritage_armor/station_cash_full_set/chest',1190),(17158,17158,'accessories/wearable_items/_exp08/highelf_heritage_armor/snapons/head_highelf_heritage_tiara',1190),(17159,17159,'accessories/wearable_items/_exp08/highelf_heritage_armor/snapons/highelf_heritage_pauldrons_left',1190),(17160,17160,'accessories/wearable_items/_exp08/highelf_heritage_armor/snapons/highelf_heritage_pauldrons_right',1190),(17161,17161,'accessories/wearable_items/_exp08/highelf_heritage_armor/snapons/highelf_heritage_pendant',1190),(17162,17162,'accessories/wearable_items/_exp08/highelf_heritage_armor/snapons/shoulder_armband_female_right',1190),(17163,17163,'accessories/wearable_items/_exp08/highelf_heritage_armor/snapons/shoulder_armband_male_left',1190),(17164,17164,'accessories/wieldable_items/weapons/exp08/1h_crush/mace_satyr_witheringlands',1190),(17165,17165,'accessories/wieldable_items/weapons/exp08/1h_sword/exp08_sword_satyr_witheringlands',1190),(17166,17166,'accessories/wieldable_items/weapons/exp08/staff/exp08_staff_satyr_witheringlands',1190),(17167,17167,'accessories/wieldable_items/weapons/exp08/staff/exp08_staff_satyr_witheringlands_swivel',1190),(17168,17168,'accessories/wieldable_items/weapons/exp08/staff/exp08_staff_satyr_witheringlands_ornament_swival_02',1190),(17169,17169,'accessories/wieldable_items/weapons/exp08/staff/exp08_staff_satyr_witheringlands_ornament_swival_01',1190),(17170,17170,'_exp08/characters/tool_users/satyr_witheringlands/satyr_boss',1190),(17171,17171,'_exp08/characters/tool_users/satyr_witheringlands/satyr_01',1190),(17172,17172,'_exp08/characters/tool_users/satyr_witheringlands/satyr_02',1190),(17173,17173,'_exp08/characters/tool_users/satyr_witheringlands/satyr_03',1190),(17174,17174,'_exp08/characters/tool_users/satyr_witheringlands/satyr_boss02',1190),(17175,17175,'accessories/wearable_items/_exp08/highelf_heritage_armor/station_cash_full_set/feet',1190),(17176,17176,'accessories/wearable_items/_exp08/highelf_heritage_armor/station_cash_full_set/forearms',1190),(17177,17177,'accessories/wearable_items/_exp08/highelf_heritage_armor/station_cash_full_set/head',1190),(17178,17178,'accessories/wearable_items/_exp08/highelf_heritage_armor/station_cash_full_set/legs',1190),(17179,17179,'accessories/wearable_items/_exp08/highelf_heritage_armor/station_cash_full_set/shoulders',1190),(17180,17180,'accessories/wearable_items/_exp08/highelf_heritage_armor/chain/chest',1190),(17181,17181,'accessories/wearable_items/_exp08/highelf_heritage_armor/chain/feet',1190),(17182,17182,'accessories/wearable_items/_exp08/highelf_heritage_armor/chain/forearms',1190),(17183,17183,'accessories/wearable_items/_exp08/highelf_heritage_armor/chain/hands',1190),(17184,17184,'accessories/wearable_items/_exp08/highelf_heritage_armor/chain/head',1190),(17185,17185,'accessories/wearable_items/_exp08/highelf_heritage_armor/chain/legs',1190),(17186,17186,'accessories/wearable_items/_exp08/highelf_heritage_armor/chain/legs_noskirt',1190),(17187,17187,'accessories/wearable_items/_exp08/highelf_heritage_armor/chain/shoulders',1190),(17188,17188,'accessories/wearable_items/_exp08/highelf_heritage_armor/chain/skirt',1190),(17189,17189,'staticobjects/beds/drunder_sullon_bed_blue',1190),(17190,17190,'staticobjects/beds/drunder_sullon_bed_gold',1190),(17191,17191,'staticobjects/beds/drunder_sullon_bed_pink',1190),(17192,17192,'staticobjects/beds/drunder_sullon_bed_red',1190),(17193,17193,'staticobjects/beds/drunder_sullon_bed_teal',1190),(17194,17194,'staticobjects/soe_wallet/drunder_sullon_bed_white',1190),(17195,17195,'staticobjects/soe_wallet/drunder_sullon_bed_black',1190),(17196,17196,'staticobjects/soe_wallet/drunder_sullon_bed',1190),(17197,17197,'accessories/wearable_items/_exp09/dracurion_player_usable/snapons/dracurion_paladin_foot_left',1190),(17198,17198,'accessories/wearable_items/_exp09/dracurion_player_usable/snapons/dracurion_paladin_foot_right',1190),(17199,17199,'accessories/wearable_items/_exp09/dracurion_player_usable/snapons/dracurion_paladin_forearm_left',1190),(17200,17200,'accessories/wearable_items/_exp09/dracurion_player_usable/snapons/dracurion_paladin_forearm_right',1190),(17201,17201,'accessories/wearable_items/_exp09/dracurion_player_usable/snapons/dracurion_paladin_pauldron_left',1190),(17202,17202,'accessories/wearable_items/_exp09/dracurion_player_usable/snapons/dracurion_paladin_pauldron_right',1190),(17203,17203,'accessories/wearable_items/_exp09/dracurion_player_usable/snapons/dracurion_paladin_pauldron2_left',1190),(17204,17204,'accessories/wearable_items/_exp09/dracurion_player_usable/snapons/dracurion_paladin_pauldron2_right',1190),(17205,17205,'accessories/wearable_items/_exp09/dracurion_player_usable/snapons/dracurion_paladin_shin_left',1190),(17206,17206,'accessories/wearable_items/_exp09/dracurion_player_usable/snapons/dracurion_paladin_shin_right',1190),(17207,17207,'accessories/wearable_items/_exp09/dracurion_player_usable/snapons/dracurion_shadowknight_forearm_left',1190),(17208,17208,'accessories/wearable_items/_exp09/dracurion_player_usable/snapons/dracurion_shadowknight_forearm_right',1190),(17209,17209,'accessories/wearable_items/_exp09/dracurion_player_usable/snapons/dracurion_shadowknight_pauldron_left',1190),(17210,17210,'accessories/wearable_items/_exp09/dracurion_player_usable/snapons/dracurion_shadowknight_pauldron_right',1190),(17211,17211,'accessories/wearable_items/_exp09/dracurion_player_usable/snapons/dracurion_shadowknight_pauldron2_left',1190),(17212,17212,'accessories/wearable_items/_exp09/dracurion_player_usable/snapons/dracurion_shadowknight_pauldron2_right',1190),(17213,17213,'accessories/wearable_items/_exp09/dracurion_player_usable/snapons/dracurion_shadowknight_shin_left',1190),(17214,17214,'accessories/wearable_items/_exp09/dracurion_player_usable/snapons/dracurion_shadowknight_shin_right',1190),(17215,17215,'accessories/wearable_items/_exp09/dracurion_player_usable/vanguard/chest',1190),(17216,17216,'accessories/wearable_items/_exp09/dracurion_player_usable/vanguard/feet',1190),(17217,17217,'accessories/wearable_items/_exp09/dracurion_player_usable/vanguard/feet_epic',1190),(17218,17218,'accessories/wearable_items/_exp09/dracurion_player_usable/vanguard/forearms',1190),(17219,17219,'accessories/wearable_items/_exp09/dracurion_player_usable/vanguard/hands',1190),(17220,17220,'accessories/wearable_items/_exp09/dracurion_player_usable/vanguard/hands_epic',1190),(17221,17221,'accessories/wearable_items/_exp09/dracurion_player_usable/vanguard/head',1190),(17222,17222,'accessories/wearable_items/_exp09/dracurion_player_usable/vanguard/left',1190),(17223,17223,'accessories/wearable_items/_exp09/dracurion_player_usable/vanguard/legs',1190),(17224,17224,'accessories/wearable_items/_exp09/dracurion_player_usable/vanguard/legs_epic',1190),(17225,17225,'accessories/wearable_items/_exp09/dracurion_player_usable/vanguard/legs_noskirt',1190),(17226,17226,'accessories/wearable_items/_exp09/dracurion_player_usable/vanguard/right',1190),(17227,17227,'accessories/wearable_items/_exp09/dracurion_player_usable/vanguard/shoulders',1190),(17228,17228,'accessories/wearable_items/_exp09/dracurion_player_usable/vanguard/shoulders_epic',1190),(17229,17229,'accessories/wearable_items/_exp09/dracurion_player_usable/vanguard/shoulders_nopauldrons',1190),(17230,17230,'accessories/wearable_items/_exp09/dracurion_player_usable/vanguard/skirt',1190),(17231,17231,'accessories/wearable_items/_exp09/dracurion_player_usable/vanguard2/chest',1190),(17232,17232,'accessories/wearable_items/_exp09/dracurion_player_usable/vanguard2/feet',1190),(17233,17233,'accessories/wearable_items/_exp09/dracurion_player_usable/vanguard2/forearms',1190),(17234,17234,'accessories/wearable_items/_exp09/dracurion_player_usable/vanguard2/hands',1190),(17235,17235,'accessories/wearable_items/_exp09/dracurion_player_usable/vanguard2/hands_epic',1190),(17236,17236,'accessories/wearable_items/_exp09/dracurion_player_usable/vanguard2/head',1190),(17237,17237,'accessories/wearable_items/_exp09/dracurion_player_usable/vanguard2/left',1190),(17238,17238,'accessories/wearable_items/_exp09/dracurion_player_usable/vanguard2/legs',1190),(17239,17239,'accessories/wearable_items/_exp09/dracurion_player_usable/vanguard2/legs_epic',1190),(17240,17240,'accessories/wearable_items/_exp09/dracurion_player_usable/vanguard2/legs_noskirt',1190),(17241,17241,'accessories/wearable_items/_exp09/dracurion_player_usable/vanguard2/right',1190),(17242,17242,'accessories/wearable_items/_exp09/dracurion_player_usable/vanguard2/shoulders',1190),(17243,17243,'accessories/wearable_items/_exp09/dracurion_player_usable/vanguard2/shoulders_epic',1190),(17244,17244,'accessories/wearable_items/_exp09/dracurion_player_usable/vanguard2/shoulders_nopauldrons',1190),(17245,17245,'accessories/wearable_items/_exp09/dracurion_player_usable/vanguard2/skirt',1190),(17246,17246,'staticobjects/building_blocks/adamantine/houseblock_1x1_column_qey_stone12',1190),(17247,17247,'staticobjects/building_blocks/adamantine/houseblock_1x2_column_qey_stone12',1190),(17248,17248,'staticobjects/building_blocks/adamantine/houseblock_1x2_dividerblock_qey_stone12',1190),(17249,17249,'staticobjects/building_blocks/adamantine/houseblock_1xhalf_block_qey_stone12',1190),(17250,17250,'staticobjects/building_blocks/adamantine/houseblock_2x2_dividerblock_qey_stone12',1190),(17251,17251,'staticobjects/building_blocks/adamantine/houseblock_rail_qey_stone12',1190),(17252,17252,'staticobjects/building_blocks/adamantine/houseblock_roundtile_qey_stone12',1190),(17253,17253,'staticobjects/building_blocks/adamantine/houseblock_stair_qey_stone12',1190),(17254,17254,'staticobjects/building_blocks/adamantine/housecube_1x1_block_qey_stone12',1190),(17255,17255,'staticobjects/building_blocks/ash/houseblock_1x1_column_blondwood',1190),(17256,17256,'staticobjects/building_blocks/ash/houseblock_1x2_column_blondwood',1190),(17257,17257,'staticobjects/building_blocks/ash/houseblock_1x2_dividerblock_blondwood',1190),(17258,17258,'staticobjects/building_blocks/ash/houseblock_1xhalf_block_blondwood',1190),(17259,17259,'staticobjects/building_blocks/ash/houseblock_2x2_dividerblock_blondwood',1190),(17260,17260,'staticobjects/building_blocks/ash/houseblock_rail_blondwood',1190),(17261,17261,'staticobjects/building_blocks/ash/houseblock_roundtile_blondwood',1190),(17262,17262,'staticobjects/building_blocks/ash/houseblock_stair_blondwood',1190),(17263,17263,'staticobjects/building_blocks/ash/housecube_1x1_block_blondwood',1190),(17264,17264,'staticobjects/building_blocks/briarwood/houseblock_1x1_column_marrwood',1190),(17265,17265,'staticobjects/building_blocks/briarwood/houseblock_1x2_column_marrwood',1190),(17266,17266,'staticobjects/building_blocks/briarwood/houseblock_1x2_dividerblock_marrwood',1190),(17267,17267,'staticobjects/building_blocks/briarwood/houseblock_1xhalf_block_marrwood',1190),(17268,17268,'staticobjects/building_blocks/briarwood/houseblock_2x2_dividerblock_marrwood',1190),(17269,17269,'staticobjects/building_blocks/briarwood/houseblock_rail_marrwood',1190),(17270,17270,'staticobjects/building_blocks/briarwood/houseblock_roundtile_marrwood',1190),(17271,17271,'staticobjects/building_blocks/briarwood/houseblock_stair_marrwood',1190),(17272,17272,'staticobjects/building_blocks/briarwood/housecube_1x1_block_marrwood',1190),(17273,17273,'staticobjects/building_blocks/elm/houseblock_1x1_column_weathereddark',1190),(17274,17274,'staticobjects/building_blocks/elm/houseblock_1x2_column_weathereddark',1190),(17275,17275,'staticobjects/building_blocks/elm/houseblock_1x2_dividerblock_weathereddark',1190),(17276,17276,'staticobjects/building_blocks/elm/houseblock_1xhalf_block_weathereddark',1190),(17277,17277,'staticobjects/building_blocks/elm/houseblock_2x2_dividerblock_weathereddark',1190),(17278,17278,'staticobjects/building_blocks/elm/houseblock_rail_weathereddark',1190),(17279,17279,'staticobjects/building_blocks/elm/houseblock_roundtile_weathereddark',1190),(17280,17280,'staticobjects/building_blocks/elm/houseblock_stair_weathereddark',1190),(17281,17281,'staticobjects/building_blocks/elm/housecube_1x1_block_weathereddark',1190),(17282,17282,'staticobjects/building_blocks/fulginate/houseblock_1x1_column_qey_stone14',1190),(17283,17283,'staticobjects/building_blocks/fulginate/houseblock_1x2_column_qey_stone14',1190),(17284,17284,'staticobjects/building_blocks/fulginate/houseblock_1x2_dividerblock_qey_stone14',1190),(17285,17285,'staticobjects/building_blocks/fulginate/houseblock_1xhalf_block_qey_stone14',1190),(17286,17286,'staticobjects/building_blocks/fulginate/houseblock_2x2_dividerblock_qey_stone14',1190),(17287,17287,'staticobjects/building_blocks/fulginate/houseblock_rail_qey_stone14',1190),(17288,17288,'staticobjects/building_blocks/fulginate/houseblock_roundtile_qey_stone14',1190),(17289,17289,'staticobjects/building_blocks/fulginate/houseblock_stair_qey_stone14',1190),(17290,17290,'staticobjects/building_blocks/fulginate/housecube_1x1_block_qey_stone14',1190),(17291,17291,'staticobjects/building_blocks/maple/houseblock_1x1_column_brownwood',1190),(17292,17292,'staticobjects/building_blocks/maple/houseblock_1x2_column_brownwood',1190),(17293,17293,'staticobjects/building_blocks/maple/houseblock_1x2_dividerblock_brownwood',1190),(17294,17294,'staticobjects/building_blocks/maple/houseblock_1xhalf_block_brownwood',1190),(17295,17295,'staticobjects/building_blocks/maple/houseblock_2x2_dividerblock_brownwood',1190),(17296,17296,'staticobjects/building_blocks/maple/houseblock_rail_brownwood',1190),(17297,17297,'staticobjects/building_blocks/maple/houseblock_roundtile_brownwood',1190),(17298,17298,'staticobjects/building_blocks/maple/houseblock_stair_brownwood',1190),(17299,17299,'staticobjects/building_blocks/maple/housecube_1x1_block_brownwood',1190),(17300,17300,'staticobjects/building_blocks/mossybriarwood/houseblock_1x1_column_mossywood',1190),(17301,17301,'staticobjects/building_blocks/mossybriarwood/houseblock_1x2_column_mossywood',1190),(17302,17302,'staticobjects/building_blocks/mossybriarwood/houseblock_1x2_dividerblock_mossywood',1190),(17303,17303,'staticobjects/building_blocks/mossybriarwood/houseblock_1xhalf_block_mossywood',1190),(17304,17304,'staticobjects/building_blocks/mossybriarwood/houseblock_2x2_dividerblock_mossywood',1190),(17305,17305,'staticobjects/building_blocks/mossybriarwood/houseblock_rail_mossywood',1190),(17306,17306,'staticobjects/building_blocks/mossybriarwood/houseblock_roundtile_mossywood',1190),(17307,17307,'staticobjects/building_blocks/mossybriarwood/houseblock_stair_mossywood',1190),(17308,17308,'staticobjects/building_blocks/mossybriarwood/housecube_1x1_block_mossywood',1190),(17309,17309,'staticobjects/building_blocks/redwood/houseblock_1x1_column_tablenoplanks',1190),(17310,17310,'staticobjects/building_blocks/redwood/houseblock_1x2_column_tablenoplanks',1190),(17311,17311,'staticobjects/building_blocks/redwood/houseblock_1x2_dividerblock_tablenoplanks',1190),(17312,17312,'staticobjects/building_blocks/redwood/houseblock_1xhalf_block_tablenoplanks',1190),(17313,17313,'staticobjects/building_blocks/redwood/houseblock_2x2_dividerblock_tablenoplanks',1190),(17314,17314,'staticobjects/building_blocks/redwood/houseblock_rail_tablenoplanks',1190),(17315,17315,'staticobjects/building_blocks/redwood/houseblock_roundtile_tablenoplanks',1190),(17316,17316,'staticobjects/building_blocks/redwood/houseblock_stair_tablenoplanks',1190),(17317,17317,'staticobjects/building_blocks/redwood/housecube_1x1_block_tablenoplanks',1190),(17318,17318,'staticobjects/building_blocks/sandalwood/houseblock_1x1_column_metalwood01',1190),(17319,17319,'staticobjects/building_blocks/sandalwood/houseblock_1x2_column_metalwood01',1190),(17320,17320,'staticobjects/building_blocks/sandalwood/houseblock_1x2_dividerblock_metalwood01',1190),(17321,17321,'staticobjects/building_blocks/sandalwood/houseblock_1xhalf_block_metalwood01',1190),(17322,17322,'staticobjects/building_blocks/sandalwood/houseblock_2x2_dividerblock_metalwood01',1190),(17323,17323,'staticobjects/building_blocks/sandalwood/houseblock_rail_metalwood01',1190),(17324,17324,'staticobjects/building_blocks/sandalwood/houseblock_roundtile_metalwood01',1190),(17325,17325,'staticobjects/building_blocks/sandalwood/houseblock_stair_metalwood01',1190),(17326,17326,'staticobjects/building_blocks/sandalwood/housecube_1x1_block_metalwood01',1190),(17327,17327,'staticobjects/building_blocks/sumac/houseblock_1x1_column_sumacwood',1190),(17328,17328,'staticobjects/building_blocks/sumac/houseblock_1x2_column_sumacwood',1190),(17329,17329,'staticobjects/building_blocks/sumac/houseblock_1x2_dividerblock_sumacwood',1190),(17330,17330,'staticobjects/building_blocks/sumac/houseblock_1xhalf_block_sumacwood',1190),(17331,17331,'staticobjects/building_blocks/sumac/houseblock_2x2_dividerblock_sumacwood',1190),(17332,17332,'staticobjects/building_blocks/sumac/houseblock_rail_sumacwood',1190),(17333,17333,'staticobjects/building_blocks/sumac/houseblock_roundtile_sumacwood',1190),(17334,17334,'staticobjects/building_blocks/sumac/houseblock_stair_sumacwood',1190),(17335,17335,'staticobjects/building_blocks/sumac/housecube_1x1_block_sumacwood',1190),(17336,17336,'staticobjects/building_blocks/teak/houseblock_1x1_column_wavywood',1190),(17337,17337,'staticobjects/building_blocks/teak/houseblock_1x2_column_wavywood',1190),(17338,17338,'staticobjects/building_blocks/teak/houseblock_1x2_dividerblock_wavywood',1190),(17339,17339,'staticobjects/building_blocks/teak/houseblock_1xhalf_block_wavywood',1190),(17340,17340,'staticobjects/building_blocks/teak/houseblock_2x2_dividerblock_wavywood',1190),(17341,17341,'staticobjects/building_blocks/teak/houseblock_rail_wavywood',1190),(17342,17342,'staticobjects/building_blocks/teak/houseblock_roundtile_wavywood',1190),(17343,17343,'staticobjects/building_blocks/teak/houseblock_stair_wavywood',1190),(17344,17344,'staticobjects/building_blocks/teak/housecube_1x1_block_wavywood',1190),(17345,17345,'_exp09/characters/tool_users/dracurion_shadowknight/dracurion_shadowknight1',1190),(17346,17346,'_exp09/characters/tool_users/dracurion_shadowknight/dracurion_shadowknight2',1190),(17347,17347,'_exp09/characters/tool_users/dracurion_shadowknight/dracurion_shadowknight3',1190),(17348,17348,'_exp09/characters/tool_users/dracurion_shadowknight/dracurion_shadowknight4',1190),(17349,17349,'_exp09/characters/tool_users/dracurion_palladin/dracurion_palladin1',1190),(17350,17350,'_exp09/characters/tool_users/dracurion_palladin/dracurion_palladin2',1190),(17351,17351,'_exp09/characters/tool_users/dracurion_palladin/dracurion_palladin3',1190),(17352,17352,'_exp09/characters/tool_users/dracurion_palladin/dracurion_palladin4',1190),(17353,17353,'_exp09/characters/monsters/skyshrine_drake/skyshrine_drake_black',1190),(17354,17354,'_exp09/characters/monsters/skyshrine_drake/skyshrine_drake_blue',1190),(17355,17355,'_exp09/characters/monsters/skyshrine_drake/skyshrine_drake_gold',1190),(17356,17356,'_exp09/characters/monsters/skyshrine_drake/skyshrine_drake_green',1190),(17357,17357,'_exp09/characters/monsters/skyshrine_drake/skyshrine_drake_red',1190),(17358,17358,'accessories/wearable_items/cloak/exp08/cloak_high_elf_heritage',1190),(17359,17359,'staticobjects/liveevent/brew_day/dpo_fpalt_kitchen_muffinplate01',1190),(17360,17360,'staticobjects/liveevent/brew_day/dpo_fpalt_kitchen_mugplain01',1190),(17361,17361,'staticobjects/liveevent/brew_day/dpo_fpalt_kitchen_steinornate01',1190),(17362,17362,'staticobjects/liveevent/brew_day/dpo_fpalt_kitchen_winebottleplain02',1190),(17363,17363,'staticobjects/liveevent/brew_day/dpo_halfing_bar_rack_cups01',1190),(17364,17364,'staticobjects/liveevent/brew_day/dpo_halfing_distilery_sm01',1190),(17365,17365,'staticobjects/liveevent/brew_day/dpo_halfing_fermenting_tank01',1190),(17366,17366,'staticobjects/liveevent/bristlebane_day/dpo_fpalt_kitchen_winebottleornate01',1190),(17367,17367,'staticobjects/liveevent/bristlebane_day/dpo_fpalt_kitchen_winebottleplain01',1190),(17368,17368,'staticobjects/liveevent/bristlebane_day/dpo_runny_table_sm_meat01',1190),(17369,17369,'staticobjects/soe_wallet/building_blocks/blackmarble/houseblock_1x1_column_blackmarble',1190),(17370,17370,'staticobjects/soe_wallet/building_blocks/blackmarble/houseblock_1x2_column_blackmarble',1190),(17371,17371,'staticobjects/soe_wallet/building_blocks/blackmarble/houseblock_1x2_dividerblock_blackmarble',1190),(17372,17372,'staticobjects/soe_wallet/building_blocks/blackmarble/houseblock_1xhalf_block_blackmarble',1190),(17373,17373,'staticobjects/soe_wallet/building_blocks/blackmarble/houseblock_2x2_dividerblock_blackmarble',1190),(17374,17374,'staticobjects/soe_wallet/building_blocks/blackmarble/houseblock_rail_blackmarble',1190),(17375,17375,'staticobjects/soe_wallet/building_blocks/blackmarble/houseblock_roundtile_blackmarble',1190),(17376,17376,'staticobjects/soe_wallet/building_blocks/blackmarble/houseblock_stair_blackmarble',1190),(17377,17377,'staticobjects/soe_wallet/building_blocks/blackmarble/housecube_1x1_block_blackmarble',1190),(17378,17378,'staticobjects/soe_wallet/building_blocks/bluemarble/houseblock_1x1_column_bluemarble',1190),(17379,17379,'staticobjects/soe_wallet/building_blocks/bluemarble/houseblock_1x2_column_bluemarble',1190),(17380,17380,'staticobjects/soe_wallet/building_blocks/bluemarble/houseblock_1x2_dividerblock_bluemarble',1190),(17381,17381,'staticobjects/soe_wallet/building_blocks/bluemarble/houseblock_1xhalf_block_bluemarble',1190),(17382,17382,'staticobjects/soe_wallet/building_blocks/bluemarble/houseblock_2x2_dividerblock_bluemarble',1190),(17383,17383,'staticobjects/soe_wallet/building_blocks/bluemarble/houseblock_rail_bluemarble',1190),(17384,17384,'staticobjects/soe_wallet/building_blocks/bluemarble/houseblock_roundtile_bluemarble',1190),(17385,17385,'staticobjects/soe_wallet/building_blocks/bluemarble/houseblock_stair_bluemarble',1190),(17386,17386,'staticobjects/soe_wallet/building_blocks/bluemarble/housecube_1x1_block_bluemarble',1190),(17387,17387,'staticobjects/soe_wallet/building_blocks/kelethinwood/houseblock_1x1_column_kelethinwood',1190),(17388,17388,'staticobjects/soe_wallet/building_blocks/kelethinwood/houseblock_1x2_column_kelethinwood',1190),(17389,17389,'staticobjects/soe_wallet/building_blocks/kelethinwood/houseblock_1x2_dividerblock_kelethinwood',1190),(17390,17390,'staticobjects/soe_wallet/building_blocks/kelethinwood/houseblock_1xhalf_block_kelethinwood',1190),(17391,17391,'staticobjects/soe_wallet/building_blocks/kelethinwood/houseblock_2x2_dividerblock_kelethinwood',1190),(17392,17392,'staticobjects/soe_wallet/building_blocks/kelethinwood/houseblock_rail_kelethinwood',1190),(17393,17393,'staticobjects/soe_wallet/building_blocks/kelethinwood/houseblock_roundtile_kelethinwood',1190),(17394,17394,'staticobjects/soe_wallet/building_blocks/kelethinwood/houseblock_stair_kelethinwood',1190),(17395,17395,'staticobjects/soe_wallet/building_blocks/kelethinwood/housecube_1x1_block_kelethinwood',1190),(17396,17396,'staticobjects/soe_wallet/building_blocks/whitemarble/houseblock_1x1_column_whitemarble',1190),(17397,17397,'staticobjects/soe_wallet/building_blocks/whitemarble/houseblock_1x2_column_whitemarble',1190),(17398,17398,'staticobjects/soe_wallet/building_blocks/whitemarble/houseblock_1x2_dividerblock_whitemarble',1190),(17399,17399,'staticobjects/soe_wallet/building_blocks/whitemarble/houseblock_1xhalf_block_whitemarble',1190),(17400,17400,'staticobjects/soe_wallet/building_blocks/whitemarble/houseblock_2x2_dividerblock_whitemarble',1190),(17401,17401,'staticobjects/soe_wallet/building_blocks/whitemarble/houseblock_rai_whitemarble',1190),(17402,17402,'staticobjects/soe_wallet/building_blocks/whitemarble/houseblock_roundtile_whitemarble',1190),(17403,17403,'staticobjects/soe_wallet/building_blocks/whitemarble/houseblock_stair_whitemarble',1190),(17404,17404,'staticobjects/soe_wallet/building_blocks/whitemarble/housecube_1x1_block_whitemarble',1190),(17405,17405,'ec/pc/fae_wings/fae_dracurion',1190),(17406,17406,'accessories/wearable_items/profesion_hats/warden/plain_metal_circlet/head_burnished_metal',1190),(17407,17407,'accessories/wearable_items/profesion_hats/warden/plain_metal_circlet/head_candle_back',1190),(17408,17408,'accessories/wearable_items/profesion_hats/warden/plain_metal_circlet/head_candle_front',1190),(17409,17409,'accessories/wearable_items/profesion_hats/warden/plain_metal_circlet/head_candle_left',1190),(17410,17410,'accessories/wearable_items/profesion_hats/warden/plain_metal_circlet/head_candle_right',1190),(17411,17411,'_exp08/characters/monsters/exp04raptor/raptor_tintable',1190),(17412,17412,'accessories/wearable_items/profesion_hats/flower_circlet/rose_red_circlet_head',1190),(17413,17413,'_exp09/characters/monsters/tigeraptor/tigeraptor_base',1190),(17414,17414,'creatures/monsters/willowisp_golem_parts',1190),(17415,17415,'creatures/mounts/player_wing/player_wing_angel_ice',1190),(17416,17416,'creatures/monsters/willowisp_golem_parts03',1190),(17417,17417,'creatures/monsters/willowisp_golem_parts02',1190),(17418,17418,'_exp09/characters/monsters/mud_elemental/mud_elemental',1190),(17419,17419,'staticobjects/liveevent/brew_day/dpo_brew_beer_keg_building',1190),(17420,17420,'staticobjects/liveevent/brew_day/dpo_brew_keg_building_door',1190),(17421,17421,'staticobjects/liveevent/brew_day/dpo_brew_explode_barrel',1190),(17422,17422,'staticobjects/liveevent/brew_day/dpo_brew_plate_cornbeef',1190),(17423,17423,'staticobjects/liveevent/brew_day/dpo_brew_plate_mashers',1190),(17424,17424,'staticobjects/liveevent/brew_day/dpo_brew_plate_pancake',1190),(17425,17425,'staticobjects/liveevent/brew_day/dpo_brew_plate_stew',1190),(17426,17426,'_exp09/characters/monsters/tigeraptor/tigeraptor_boss',1190),(17427,17427,'_exp09/characters/monsters/tigeraptor/tigeraptor_swivel_skull',1190),(17428,17428,'_exp09/characters/monsters/tigeraptor/tigeraptor_tribal',1190),(17429,17429,'creatures/monsters/willowisp_withered_branches',1190),(17430,17430,'_exp09/characters/monsters/mist_panther/mist_panther',1190),(17431,17431,'accessories/wieldable_items/weapons/exp08/staff/exp08_staff_satyr_witheringlands_swivel01',1190),(17432,17432,'accessories/wieldable_items/weapons/exp08/staff/exp08_staff_satyr_witheringlands01',1190),(17433,17433,'accessories/wearable_items/_exp09/dracurion_player_usable/chain/chest',1190),(17434,17434,'accessories/wearable_items/_exp09/dracurion_player_usable/chain/feet',1190),(17435,17435,'accessories/wearable_items/_exp09/dracurion_player_usable/chain/forearms',1190),(17436,17436,'accessories/wearable_items/_exp09/dracurion_player_usable/chain/hands',1190),(17437,17437,'accessories/wearable_items/_exp09/dracurion_player_usable/chain/head',1190),(17438,17438,'accessories/wearable_items/_exp09/dracurion_player_usable/chain/legs',1190),(17439,17439,'accessories/wearable_items/_exp09/dracurion_player_usable/chain/legs_noskirt',1190),(17440,17440,'accessories/wearable_items/_exp09/dracurion_player_usable/chain/shoulders',1190),(17441,17441,'accessories/wearable_items/_exp09/dracurion_player_usable/chain/shoulders_epic',1190),(17442,17442,'accessories/wearable_items/_exp09/dracurion_player_usable/chain/skirt',1190),(17443,17443,'accessories/wearable_items/_exp09/dracurion_player_usable/chain2/chest',1190),(17444,17444,'accessories/wearable_items/_exp09/dracurion_player_usable/chain2/feet',1190),(17445,17445,'accessories/wearable_items/_exp09/dracurion_player_usable/chain2/forearms',1190),(17446,17446,'accessories/wearable_items/_exp09/dracurion_player_usable/chain2/hands',1190),(17447,17447,'accessories/wearable_items/_exp09/dracurion_player_usable/chain2/head',1190),(17448,17448,'accessories/wearable_items/_exp09/dracurion_player_usable/chain2/legs',1190),(17449,17449,'accessories/wearable_items/_exp09/dracurion_player_usable/chain2/legs_noskirt',1190),(17450,17450,'accessories/wearable_items/_exp09/dracurion_player_usable/chain2/shoulders',1190),(17451,17451,'accessories/wearable_items/_exp09/dracurion_player_usable/chain2/shoulders_epic',1190),(17452,17452,'accessories/wearable_items/_exp09/dracurion_player_usable/chain2/skirt',1190),(17453,17453,'accessories/wearable_items/_exp09/dracurion_player_usable/cloth/arms',1190),(17454,17454,'accessories/wearable_items/_exp09/dracurion_player_usable/cloth/chest',1190),(17455,17455,'accessories/wearable_items/_exp09/dracurion_player_usable/cloth/chest_epic',1190),(17456,17456,'accessories/wearable_items/_exp09/dracurion_player_usable/cloth/legs',1190),(17457,17457,'accessories/wearable_items/_exp09/dracurion_player_usable/cloth/skirt',1190),(17458,17458,'accessories/wearable_items/_exp09/dracurion_player_usable/cloth2/arms',1190),(17459,17459,'accessories/wearable_items/_exp09/dracurion_player_usable/cloth2/chest',1190),(17460,17460,'accessories/wearable_items/_exp09/dracurion_player_usable/cloth2/chest_epic',1190),(17461,17461,'accessories/wearable_items/_exp09/dracurion_player_usable/cloth2/legs',1190),(17462,17462,'accessories/wearable_items/_exp09/dracurion_player_usable/cloth2/skirt',1190),(17463,17463,'accessories/wearable_items/_exp09/dracurion_player_usable/leather/chest',1190),(17464,17464,'accessories/wearable_items/_exp09/dracurion_player_usable/leather/feet',1190),(17465,17465,'accessories/wearable_items/_exp09/dracurion_player_usable/leather/forearms',1190),(17466,17466,'accessories/wearable_items/_exp09/dracurion_player_usable/leather/hands',1190),(17467,17467,'accessories/wearable_items/_exp09/dracurion_player_usable/leather/head',1190),(17468,17468,'accessories/wearable_items/_exp09/dracurion_player_usable/leather/legs',1190),(17469,17469,'accessories/wearable_items/_exp09/dracurion_player_usable/leather/legs_noskirt',1190),(17470,17470,'accessories/wearable_items/_exp09/dracurion_player_usable/leather/shoulders',1190),(17471,17471,'accessories/wearable_items/_exp09/dracurion_player_usable/leather/shoulders_epic',1190),(17472,17472,'accessories/wearable_items/_exp09/dracurion_player_usable/leather/skirt',1190),(17473,17473,'accessories/wearable_items/_exp09/dracurion_player_usable/leather2/chest',1190),(17474,17474,'accessories/wearable_items/_exp09/dracurion_player_usable/leather2/feet',1190),(17475,17475,'accessories/wearable_items/_exp09/dracurion_player_usable/leather2/forearms',1190),(17476,17476,'accessories/wearable_items/_exp09/dracurion_player_usable/leather2/hands',1190),(17477,17477,'accessories/wearable_items/_exp09/dracurion_player_usable/leather2/head',1190),(17478,17478,'accessories/wearable_items/_exp09/dracurion_player_usable/leather2/legs',1190),(17479,17479,'accessories/wearable_items/_exp09/dracurion_player_usable/leather2/legs_noskirt',1190),(17480,17480,'accessories/wearable_items/_exp09/dracurion_player_usable/leather2/shoulders',1190),(17481,17481,'accessories/wearable_items/_exp09/dracurion_player_usable/leather2/shoulders_epic',1190),(17482,17482,'accessories/wearable_items/_exp09/dracurion_player_usable/leather2/skirt',1190),(17483,17483,'accessories/wearable_items/_exp09/dracurion_player_usable/snapons/dracurion_paladin_forearm_cloth_left',1190),(17484,17484,'accessories/wearable_items/_exp09/dracurion_player_usable/snapons/dracurion_paladin_forearm_cloth_right',1190),(17485,17485,'accessories/wearable_items/_exp09/dracurion_player_usable/snapons/dracurion_paladin_pauldron_chain_left',1190),(17486,17486,'accessories/wearable_items/_exp09/dracurion_player_usable/snapons/dracurion_paladin_pauldron_chain_right',1190),(17487,17487,'accessories/wearable_items/_exp09/dracurion_player_usable/snapons/dracurion_paladin_pauldron_cloth_left',1190),(17488,17488,'accessories/wearable_items/_exp09/dracurion_player_usable/snapons/dracurion_paladin_pauldron_cloth_right',1190),(17489,17489,'accessories/wearable_items/_exp09/dracurion_player_usable/snapons/dracurion_paladin_pauldron_leather_left',1190),(17490,17490,'accessories/wearable_items/_exp09/dracurion_player_usable/snapons/dracurion_paladin_pauldron_leather_right',1190),(17491,17491,'accessories/wearable_items/_exp09/dracurion_player_usable/snapons/dracurion_shadowknight_forearm_cloth_left',1190),(17492,17492,'accessories/wearable_items/_exp09/dracurion_player_usable/snapons/dracurion_shadowknight_forearm_cloth_right',1190),(17493,17493,'accessories/wearable_items/_exp09/dracurion_player_usable/snapons/dracurion_shadowknight_pauldron_chain_left',1190),(17494,17494,'accessories/wearable_items/_exp09/dracurion_player_usable/snapons/dracurion_shadowknight_pauldron_chain_right',1190),(17495,17495,'accessories/wearable_items/_exp09/dracurion_player_usable/snapons/dracurion_shadowknight_pauldron_cloth_left',1190),(17496,17496,'accessories/wearable_items/_exp09/dracurion_player_usable/snapons/dracurion_shadowknight_pauldron_cloth_right',1190),(17497,17497,'accessories/wearable_items/_exp09/dracurion_player_usable/snapons/dracurion_shadowknight_pauldron_leather_left',1190),(17498,17498,'accessories/wearable_items/_exp09/dracurion_player_usable/snapons/dracurion_shadowknight_pauldron_leather_right',1190),(17499,17499,'_exp09/characters/monsters/mist_panther/mist_panther_corrupted',1190),(17500,17500,'accessories/wearable_items/cloak/exp09/cloak_lava2',1190),(17501,17501,'accessories/wearable_items/cloak/exp09/cloak_lava2_scallop',1190),(17502,17502,'accessories/wearable_items/cloak/exp09/cloak_lava',1190),(17503,17503,'accessories/wearable_items/cloak/exp09/cloak_lava_blue2',1190),(17504,17504,'accessories/wearable_items/cloak/exp09/cloak_lava_blue',1190),(17505,17505,'accessories/wearable_items/cloak/exp09/cloak_lava_green2',1190),(17506,17506,'accessories/wearable_items/cloak/exp09/cloak_lava_green',1190),(17507,17507,'accessories/wearable_items/cloak/exp09/cloak_lava_purple2',1190),(17508,17508,'accessories/wearable_items/cloak/exp09/cloak_lava_purple',1190),(17509,17509,'creatures/mounts/drakota_mount/drakota_mount_green_druid',1190),(17510,17510,'accessories/wearable_items/_exp09/nightborne_sc_vanguard/chest',1190),(17511,17511,'accessories/wearable_items/_exp09/nightborne_sc_vanguard/feet',1190),(17512,17512,'accessories/wearable_items/_exp09/nightborne_sc_vanguard/forearms',1190),(17513,17513,'accessories/wearable_items/_exp09/nightborne_sc_vanguard/hands',1190),(17514,17514,'accessories/wearable_items/_exp09/nightborne_sc_vanguard/hands_epic',1190),(17515,17515,'accessories/wearable_items/_exp09/nightborne_sc_vanguard/head',1190),(17516,17516,'accessories/wearable_items/_exp09/nightborne_sc_vanguard/head_epic',1190),(17517,17517,'accessories/wearable_items/_exp09/nightborne_sc_vanguard/legs',1190),(17518,17518,'accessories/wearable_items/_exp09/nightborne_sc_vanguard/legs_epic',1190),(17519,17519,'accessories/wearable_items/_exp09/nightborne_sc_vanguard/legs_noskirt',1190),(17520,17520,'accessories/wearable_items/_exp09/nightborne_sc_vanguard/right',1190),(17521,17521,'accessories/wearable_items/_exp09/nightborne_sc_vanguard/shoulders',1190),(17522,17522,'accessories/wearable_items/_exp09/nightborne_sc_vanguard/shoulders_epic',1190),(17523,17523,'accessories/wearable_items/_exp09/nightborne_sc_vanguard/shoulders_nopauldrons',1190),(17524,17524,'accessories/wearable_items/_exp09/nightborne_sc_vanguard/skirt',1190),(17525,17525,'accessories/wearable_items/_exp09/nightborne_sc_vanguard/snap_ons/forearm_left',1190),(17526,17526,'accessories/wearable_items/_exp09/nightborne_sc_vanguard/snap_ons/forearm_right',1190),(17527,17527,'accessories/wearable_items/_exp09/nightborne_sc_vanguard/snap_ons/pauldrons_lower_left',1190),(17528,17528,'accessories/wearable_items/_exp09/nightborne_sc_vanguard/snap_ons/pauldrons_lower_right',1190),(17529,17529,'accessories/wearable_items/_exp09/nightborne_sc_vanguard/snap_ons/pauldrons_upper_left',1190),(17530,17530,'accessories/wearable_items/_exp09/nightborne_sc_vanguard/snap_ons/pauldrons_upper_right',1190),(17531,17531,'accessories/wearable_items/_exp09/nightborne_sc_vanguard/snap_ons/shin_left',1190),(17532,17532,'accessories/wearable_items/_exp09/nightborne_sc_vanguard/snap_ons/shin_right',1190),(17533,17533,'accessories/wieldable_items/shields/exp09/nightborne_shield',1190),(17534,17534,'staticobjects/soe_wallet/holiday_objects/erollisi_card_01',1190),(17535,17535,'staticobjects/soe_wallet/holiday_objects/erollisi_card_02',1190),(17536,17536,'staticobjects/soe_wallet/holiday_objects/erollisi_card_03',1190),(17537,17537,'creatures/monsters/dikdik_corrupted',1190),(17538,17538,'accessories/wieldable_items/weapons/throwing_weapons/throwing_star/throwing_star002_ro',1190),(17539,17539,'staticobjects/rocks/mining_gravel',1190),(17540,17540,'_exp09/characters/tool_users/dracurion_palladin/dracurion_palladin_chain',1190),(17541,17541,'_exp09/characters/tool_users/dracurion_palladin/dracurion_palladin_chain_var1',1190),(17542,17542,'_exp09/characters/tool_users/dracurion_palladin/dracurion_palladin_horns',1190),(17543,17543,'_exp09/characters/tool_users/dracurion_palladin/dracurion_palladin_horns_var1',1190),(17544,17544,'_exp09/characters/tool_users/dracurion_palladin/dracurion_palladin_medallion',1190),(17545,17545,'_exp09/characters/tool_users/dracurion_palladin/dracurion_palladin_medallion_var1',1190),(17546,17546,'_exp09/characters/tool_users/dracurion_shadowknight/dracurion_shadowknight_a',1190),(17547,17547,'_exp09/characters/tool_users/dracurion_shadowknight/dracurion_shadowknight_b',1190),(17548,17548,'_exp04/monsters/erollisi_corrupted',1190),(17549,17549,'_exp04/monsters/erollisi_corrupted_boss',1190),(17550,17550,'staticobjects/eig/eig_harvest_location_wl_sky',1190),(17551,17551,'_exp09/characters/monsters/carnivorous_plant_2012/carnivorous_plant_2012',1190),(17552,17552,'staticobjects/_exp08/player_housing/skyshrine_arcane_lamp_dpo',1190),(17553,17553,'staticobjects/_exp08/player_housing/skyshrine_bench_01_dpo',1190),(17554,17554,'staticobjects/_exp08/player_housing/skyshrine_bench_02_dpo',1190),(17555,17555,'staticobjects/_exp08/player_housing/skyshrine_bonealtar_dpo',1190),(17556,17556,'staticobjects/_exp08/player_housing/skyshrine_brazier_hanging_dpo',1190),(17557,17557,'staticobjects/_exp08/player_housing/skyshrine_brazier_pillar_dpo',1190),(17558,17558,'staticobjects/_exp08/player_housing/skyshrine_brazier_smoke_dpo',1190),(17559,17559,'staticobjects/_exp08/player_housing/skyshrine_dragon_head_metal_base_dpo',1190),(17560,17560,'staticobjects/_exp08/player_housing/skyshrine_dragon_statue_big_dpo',1190),(17561,17561,'staticobjects/_exp08/player_housing/skyshrine_drake_statue_01',1190),(17562,17562,'staticobjects/_exp08/player_housing/skyshrine_flag_green_dpo',1190),(17563,17563,'staticobjects/_exp08/player_housing/skyshrine_flag_hanging_dpo',1190),(17564,17564,'staticobjects/_exp08/player_housing/skyshrine_flag_red_dpo',1190),(17565,17565,'staticobjects/_exp08/player_housing/skyshrine_flag_yellow_dpo',1190),(17566,17566,'accessories/wearable_items/_exp09/antonican_faction_armor/feet_hands/feet',1190),(17567,17567,'staticobjects/_exp08/player_housing/skyshrine_pillar_epic_dpo',1190),(17568,17568,'staticobjects/_exp08/player_housing/skyshrine_rug_01_dpo',1190),(17569,17569,'staticobjects/_exp08/player_housing/skyshrine_rug_02_dpo',1190),(17570,17570,'staticobjects/_exp08/player_housing/skyshrine_rug_03_dpo',1190),(17571,17571,'staticobjects/_exp08/player_housing/skyshrine_rug_04_dpo',1190),(17572,17572,'staticobjects/_exp08/player_housing/skyshrine_rug_05_dpo',1190),(17573,17573,'staticobjects/_exp08/player_housing/skyshrine_rug_06_big_dpo',1190),(17574,17574,'staticobjects/_exp08/player_housing/skyshrine_stage_dpo',1190),(17575,17575,'staticobjects/_exp08/player_housing/skyshrine_statue_epic_dpo',1190),(17576,17576,'staticobjects/_exp08/player_housing/skyshrine_table_2_dpo',1190),(17577,17577,'staticobjects/_exp08/player_housing/skyshrine_table_dpo',1190),(17578,17578,'staticobjects/_exp08/player_housing/wl_bench_dpo',1190),(17579,17579,'staticobjects/_exp08/player_housing/wl_brazier_dpo',1190),(17580,17580,'accessories/wearable_items/_exp09/antonican_faction_armor/feet_hands/hands',1190),(17581,17581,'accessories/wearable_items/_exp09/antonican_faction_armor/robe/chest',1190),(17582,17582,'accessories/wearable_items/_exp09/antonican_faction_armor/robe/chest_epic',1190),(17583,17583,'accessories/wearable_items/_exp09/antonican_faction_armor/robe/head',1190),(17584,17584,'staticobjects/_exp08/player_housing/wl_dragon_skull_dpo',1190),(17585,17585,'staticobjects/_exp08/player_housing/wl_evil_flower',1190),(17586,17586,'accessories/wearable_items/_exp09/antonican_faction_armor/robe/head_collar_flared',1190),(17587,17587,'staticobjects/_exp08/player_housing/wl_spire_dpo',1190),(17588,17588,'staticobjects/_exp08/player_housing/wl_stage_dpo',1190),(17589,17589,'staticobjects/_exp08/player_housing/wl_swamp_lilly_dpo',1190),(17590,17590,'staticobjects/_exp08/player_housing/wl_swamp_plant_dpo',1190),(17591,17591,'staticobjects/_exp08/player_housing/wl_vine_dpo',1190),(17592,17592,'staticobjects/_exp08/player_housing/wl_vine_squash_dpo',1190),(17593,17593,'staticobjects/_exp08/player_housing/wl_wheelbarrow_dpo',1190),(17594,17594,'creatures/mounts/player_wing/player_wing_angel_black',1190),(17595,17595,'_exp09/characters/monsters/withering_tree_ent/withering_tree_ent',1190),(17596,17596,'accessories/wearable_items/_exp09/withering_lands/chain/skirt',1190),(17597,17597,'accessories/wearable_items/_exp09/withering_lands/chain/chest',1190),(17598,17598,'accessories/wearable_items/_exp09/withering_lands/chain/feet',1190),(17599,17599,'accessories/wearable_items/_exp09/withering_lands/chain/forearms',1190),(17600,17600,'accessories/wearable_items/_exp09/withering_lands/chain/hands',1190),(17601,17601,'accessories/wearable_items/_exp09/withering_lands/chain/head',1190),(17602,17602,'accessories/wearable_items/_exp09/withering_lands/chain/legs',1190),(17603,17603,'accessories/wearable_items/_exp09/withering_lands/chain/legs_noskirt',1190),(17604,17604,'accessories/wearable_items/_exp09/withering_lands/chain/shoulders',1190),(17605,17605,'accessories/wearable_items/_exp09/withering_lands/chain/shoulders_snapons',1190),(17606,17606,'accessories/wearable_items/_exp09/withering_lands/leather/skirt',1190),(17607,17607,'accessories/wearable_items/_exp09/withering_lands/leather/chest',1190),(17608,17608,'accessories/wearable_items/_exp09/withering_lands/leather/feet',1190),(17609,17609,'accessories/wearable_items/_exp09/withering_lands/leather/forearms',1190),(17610,17610,'accessories/wearable_items/_exp09/withering_lands/leather/hands',1190),(17611,17611,'accessories/wearable_items/_exp09/withering_lands/leather/head',1190),(17612,17612,'accessories/wearable_items/_exp09/withering_lands/leather/legs',1190),(17613,17613,'accessories/wearable_items/_exp09/withering_lands/leather/legs_noskirt',1190),(17614,17614,'accessories/wearable_items/_exp09/withering_lands/leather/shoulders',1190),(17615,17615,'accessories/wearable_items/_exp09/withering_lands/leather/shoulders_snapons',1190),(17616,17616,'accessories/wearable_items/_exp09/withering_lands/snapons/robe_shoulder_bag_right',1190),(17617,17617,'accessories/wearable_items/_exp09/withering_lands/snapons/chain_shoulder_left',1190),(17618,17618,'accessories/wearable_items/_exp09/withering_lands/snapons/chain_shoulder_right',1190),(17619,17619,'accessories/wearable_items/_exp09/withering_lands/snapons/leather_shoulder_left',1190),(17620,17620,'accessories/wearable_items/_exp09/withering_lands/snapons/leather_shoulder_right',1190),(17621,17621,'accessories/wearable_items/_exp09/withering_lands/robe/skirt',1190),(17622,17622,'accessories/wearable_items/_exp09/withering_lands/robe/chest',1190),(17623,17623,'accessories/wearable_items/_exp09/withering_lands/robe/feet',1190),(17624,17624,'accessories/wearable_items/_exp09/withering_lands/robe/hands',1190),(17625,17625,'accessories/wearable_items/_exp09/withering_lands/robe/head',1190),(17626,17626,'accessories/wearable_items/_exp09/withering_lands/robe/pants',1190),(17627,17627,'_exp09/characters/monsters/timber_wolf_corrupted/timber_wolf_corrupted',1190),(17628,17628,'creatures/pets/wolf_pup/wolf_pup_corrupted',1190),(17629,17629,'accessories/wearable_items/cloak/exp09/cloak_bookshelf2',1190),(17630,17630,'accessories/wearable_items/cloak/exp09/cloak_bookshelf2_blue',1190),(17631,17631,'accessories/wearable_items/cloak/exp09/cloak_lace',1190),(17632,17632,'accessories/wearable_items/cloak/exp09/cloak_lace2',1190),(17633,17633,'accessories/wearable_items/cloak/exp09/cloak_nightflies2',1190),(17634,17634,'accessories/wearable_items/cloak/exp09/cloak_nightflies',1190),(17635,17635,'accessories/wearable_items/cloak/exp09/cloak_lava3',1190),(17636,17636,'accessories/wearable_items/profesion_hats/flower_circlet/rose_dark_circlet_head',1190),(17637,17637,'accessories/wearable_items/profesion_hats/flower_circlet/rose_gold_circlet_head',1190),(17638,17638,'accessories/wearable_items/_exp09/withering_lands/robe/chest_snapon',1190),(17639,17639,'accessories/wearable_items/_exp09/withering_lands/vanguard/skirt',1190),(17640,17640,'accessories/wearable_items/_exp09/withering_lands/vanguard/chest',1190),(17641,17641,'accessories/wearable_items/_exp09/withering_lands/vanguard/feet',1190),(17642,17642,'accessories/wearable_items/_exp09/withering_lands/vanguard/forearms',1190),(17643,17643,'accessories/wearable_items/_exp09/withering_lands/vanguard/hands',1190),(17644,17644,'accessories/wearable_items/_exp09/withering_lands/vanguard/head',1190),(17645,17645,'accessories/wearable_items/_exp09/withering_lands/vanguard/legs',1190),(17646,17646,'accessories/wearable_items/_exp09/withering_lands/vanguard/legs_noskirt',1190),(17647,17647,'accessories/wearable_items/_exp09/withering_lands/vanguard/right',1190),(17648,17648,'accessories/wearable_items/_exp09/withering_lands/vanguard/shoulders',1190),(17649,17649,'accessories/wearable_items/_exp09/withering_lands/vanguard/shoulders_nopauldrons',1190),(17650,17650,'accessories/wearable_items/_exp09/withering_lands/vanguard/shoulders_snapons',1190),(17651,17651,'accessories/wearable_items/_exp09/withering_lands/snapons/vanguard_shoulder_right',1190),(17652,17652,'accessories/wearable_items/_exp09/withering_lands/snapons/vanguard_shoulder_left',1190),(17653,17653,'accessories/wearable_items/_exp09/withering_lands/snapons/robe_bag',1190),(17654,17654,'accessories/wieldable_items/weapons/exp09/1h_crush/1h_hammer_skyshrine_evil',1190),(17655,17655,'accessories/wieldable_items/weapons/exp09/1h_crush/1h_hammer_skyshrine_good',1190),(17656,17656,'accessories/wieldable_items/weapons/exp09/1h_pierce/dagger_skyshrine_evil',1190),(17657,17657,'accessories/wieldable_items/weapons/exp09/1h_pierce/dagger_skyshrine_good',1190),(17658,17658,'accessories/wieldable_items/weapons/exp09/1h_sword/1h_axe_skyshrine_evil',1190),(17659,17659,'accessories/wieldable_items/weapons/exp09/1h_sword/1h_axe_skyshrine_good',1190),(17660,17660,'accessories/wieldable_items/weapons/exp09/1h_sword/1h_sword_skyshrine_evil',1190),(17661,17661,'accessories/wieldable_items/weapons/exp09/1h_sword/1h_sword_skyshrine_good',1190),(17662,17662,'accessories/wieldable_items/weapons/exp09/2h_sword/2h_sword_skyshrine_evil',1190),(17663,17663,'accessories/wieldable_items/weapons/exp09/2h_sword/2h_sword_skyshrine_good',1190),(17664,17664,'accessories/wieldable_items/weapons/exp09/bow/longbow_skyshrine_evil',1190),(17665,17665,'accessories/wieldable_items/weapons/exp09/bow/longbow_skyshrine_good',1190),(17666,17666,'accessories/wieldable_items/weapons/exp09/fist/katar_spiked_skyshrine_evil',1190),(17667,17667,'accessories/wieldable_items/weapons/exp09/fist/katar_spiked_skyshrine_good',1190),(17668,17668,'accessories/wieldable_items/weapons/exp09/staff/halberd_skyshrine_evil',1190),(17669,17669,'accessories/wieldable_items/weapons/exp09/staff/halberd_skyshrine_good',1190),(17670,17670,'accessories/wieldable_items/weapons/exp09/staff/spear_open_skyshrine_evil',1190),(17671,17671,'accessories/wieldable_items/weapons/exp09/staff/spear_open_skyshrine_good',1190),(17672,17672,'accessories/wieldable_items/weapons/exp09/staff/spear_skyshrine_evil',1190),(17673,17673,'accessories/wieldable_items/weapons/exp09/staff/spear_skyshrine_good',1190),(17674,17674,'accessories/wieldable_items/weapons/exp09/staff/staff_skyshrine_evil',1190),(17675,17675,'accessories/wieldable_items/weapons/exp09/staff/staff_skyshrine_good',1190),(17676,17676,'accessories/wieldable_items/shields/exp09/buckler_skyshrine_evil',1190),(17677,17677,'accessories/wieldable_items/shields/exp09/buckler_skyshrine_good',1190),(17678,17678,'accessories/wieldable_items/shields/exp09/kite_skyshrine_evil',1190),(17679,17679,'accessories/wieldable_items/shields/exp09/kite_skyshrine_good',1190),(17680,17680,'accessories/npc_wearables/dracurion/2h_sword_skyshrine_evil',1190),(17681,17681,'accessories/npc_wearables/dracurion/2h_sword_skyshrine_good',1190),(17682,17682,'accessories/npc_wearables/dracurion/halberd_skyshrine_evil',1190),(17683,17683,'accessories/npc_wearables/dracurion/halberd_skyshrine_good',1190),(17684,17684,'accessories/npc_wearables/dracurion/spear_skyshrine_evil',1190),(17685,17685,'accessories/npc_wearables/dracurion/spear_skyshrine_good',1190),(17686,17686,'accessories/npc_wearables/dracurion/spear2_skyshrine_evil',1190),(17687,17687,'accessories/npc_wearables/dracurion/spear2_skyshrine_good',1190),(17688,17688,'accessories/npc_wearables/dracurion/staff_skyshrine_evil',1190),(17689,17689,'accessories/npc_wearables/dracurion/staff_skyshrine_good',1190),(17690,17690,'accessories/wearable_items/_exp09/dracurion_player_usable/chain/head_epic',1190),(17691,17691,'accessories/wearable_items/_exp09/dracurion_player_usable/chain2/head_epic',1190),(17692,17692,'accessories/wearable_items/_exp09/dracurion_player_usable/leather/head_epic',1190),(17693,17693,'accessories/wearable_items/_exp09/dracurion_player_usable/leather2/head_epic',1190),(17694,17694,'_exp09/characters/monsters/mud_monster/mud_monster',1190),(17695,17695,'creatures/mounts/horse_heavy/horse_new_combine',1190),(17696,17696,'creatures/mounts/horse_heavy/new_combine_flags/horse_new_combine_flag_freeport',1190),(17697,17697,'creatures/mounts/horse_heavy/new_combine_flags/horse_new_combine_flag_gorowyn',1190),(17698,17698,'creatures/mounts/horse_heavy/new_combine_flags/horse_new_combine_flag_halas',1190),(17699,17699,'creatures/mounts/horse_heavy/new_combine_flags/horse_new_combine_flag_kelethin',1190),(17700,17700,'creatures/mounts/horse_heavy/new_combine_flags/horse_new_combine_flag_neriak',1190),(17701,17701,'creatures/mounts/horse_heavy/new_combine_flags/horse_new_combine_flag_qeynos',1190),(17702,17702,'creatures/mounts/warhog_mount/swivels/warhog_beastlord_swivel',1190),(17703,17703,'staticobjects/_exp08/harvestables/exp08_bush_harvesting',1190),(17704,17704,'staticobjects/_exp08/harvestables/exp08_gems_harvesting',1190),(17705,17705,'staticobjects/_exp08/harvestables/exp08_log_harvesting',1190),(17706,17706,'staticobjects/_exp08/harvestables/exp08_ore_harvesting',1190),(17707,17707,'staticobjects/_exp08/harvestables/exp08_roots_harvesting',1190),(17708,17708,'staticobjects/_exp08/harvestables/exp08_trapping_harvesting',1190),(17709,17709,'_exp09/characters/monsters/skyshrine_drake/skyshrine_drake_storm',1190),(17710,17710,'_exp09/characters/monsters/skyshrine_drake/skyshrine_drake_storm_violet',1190),(17711,17711,'accessories/wearable_items/snapons/backpacks/backpack_othmir_swivel/backpack_othmir_animated',1190),(17712,17712,'_exp09/characters/monsters/beetle/beetle_grappler',1190),(17713,17713,'_exp09/characters/monsters/beetle/beetle_grappler_clockwork',1190),(17714,17714,'_exp09/characters/monsters/beetle/beetle_grappler_sanguine',1190),(17715,17715,'_exp09/characters/monsters/beetle/beetle_grappler_shadow',1190),(17716,17716,'_exp09/characters/monsters/beetle/beetle_hercules',1190),(17717,17717,'_exp09/characters/monsters/beetle/beetle_hercules_clockwork',1190),(17718,17718,'_exp09/characters/monsters/beetle/beetle_hercules_sanguine',1190),(17719,17719,'_exp09/characters/monsters/beetle/beetle_hercules_shadow',1190),(17720,17720,'_exp09/characters/monsters/beetle/beetle_lobber',1190),(17721,17721,'_exp09/characters/monsters/beetle/beetle_lobber_clockwork',1190),(17722,17722,'_exp09/characters/monsters/beetle/beetle_lobber_sanguine',1190),(17723,17723,'_exp09/characters/monsters/beetle/beetle_lobber_shadow',1190),(17724,17724,'_exp09/characters/monsters/beetle/beetle_lobber2',1190),(17725,17725,'_exp09/characters/monsters/beetle/beetle_original',1190),(17726,17726,'_exp09/characters/monsters/beetle/beetle_original_clockwork',1190),(17727,17727,'_exp09/characters/monsters/beetle/beetle_original_ladybug',1190),(17728,17728,'_exp09/characters/monsters/beetle/beetle_original_sanguine',1190),(17729,17729,'_exp09/characters/monsters/beetle/beetle_original_shadow',1190),(17730,17730,'_exp09/characters/monsters/beetle_groundattack/beetle',1190),(17731,17731,'_exp09/characters/monsters/beetle_groundattack/beetle_grappler',1190),(17732,17732,'_exp09/characters/monsters/beetle_groundattack/beetle_grappler_clockwork',1190),(17733,17733,'_exp09/characters/monsters/beetle_groundattack/beetle_grappler_sanguine',1190),(17734,17734,'_exp09/characters/monsters/beetle_groundattack/beetle_grappler_shadow',1190),(17735,17735,'_exp09/characters/monsters/beetle_groundattack/beetle_hercules',1190),(17736,17736,'_exp09/characters/monsters/beetle_groundattack/beetle_hercules_clockwork',1190),(17737,17737,'_exp09/characters/monsters/beetle_groundattack/beetle_hercules_sanguine',1190),(17738,17738,'_exp09/characters/monsters/beetle_groundattack/beetle_hercules_shadow',1190),(17739,17739,'_exp09/characters/monsters/beetle_groundattack/beetle_lobber',1190),(17740,17740,'_exp09/characters/monsters/beetle_groundattack/beetle_lobber_clockwork',1190),(17741,17741,'_exp09/characters/monsters/beetle_groundattack/beetle_lobber_sanguine',1190),(17742,17742,'_exp09/characters/monsters/beetle_groundattack/beetle_lobber_shadow',1190),(17743,17743,'_exp09/characters/monsters/beetle_groundattack/beetle_lobber2',1190),(17744,17744,'_exp09/characters/monsters/beetle_groundattack/beetle_original',1190),(17745,17745,'_exp09/characters/monsters/beetle_groundattack/beetle_original_clockwork',1190),(17746,17746,'_exp09/characters/monsters/beetle_groundattack/beetle_original_ladybug',1190),(17747,17747,'_exp09/characters/monsters/beetle_groundattack/beetle_original_sanguine',1190),(17748,17748,'_exp09/characters/monsters/beetle_groundattack/beetle_original_shadow',1190),(17749,17749,'_exp08/characters/tool_users/vampire_female_merc/vampire_female_merc',1190),(17750,17750,'accessories/wearable_items/cloak/exp08/cloak_vampire_merc',1190),(17751,17751,'accessories/wieldable_items/weapons/exp08/1h_pierce/exp08_dagger_vampire_merc',1190),(17752,17752,'_exp08/characters/tool_users/vampire_female_merc/vampire_female_merc_evil',1190),(17753,17753,'accessories/wieldable_items/shields/exp08/exp08_shield_dragonanimated_gold',1190),(17754,17754,'accessories/wieldable_items/shields/exp09/spike_shield',1190),(17755,17755,'accessories/wieldable_items/shields/exp09/spike_shield_hot',1190),(17756,17756,'_exp08/characters/monsters/dozekar/dozekar_base',1190),(17757,17757,'staticobjects/_exp08/player_housing/new/exp08_skyshrine_objects01_crate01_dpo',1190),(17758,17758,'staticobjects/_exp08/player_housing/new/exp08_skyshrine_lower_objects01_torch01_fx_dpo',1190),(17759,17759,'staticobjects/_exp08/player_housing/new/exp08_skyshrine_lower_objects01_torch02_fx_dpo',1190),(17760,17760,'staticobjects/_exp08/player_housing/new/exp08_skyshrine_objects01_barricade01_dpo',1190),(17761,17761,'staticobjects/_exp08/player_housing/new/exp08_skyshrine_objects01_bench01_dpo',1190),(17762,17762,'staticobjects/_exp08/player_housing/new/exp08_skyshrine_objects01_bench01b_dpo',1190),(17763,17763,'staticobjects/_exp08/player_housing/new/exp08_skyshrine_objects01_flag_noflag01_dpo',1190),(17764,17764,'staticobjects/_exp08/player_housing/new/exp08_skyshrine_objects01_flagblue01_dpo',1190),(17765,17765,'staticobjects/_exp08/player_housing/new/exp08_skyshrine_objects01_flaggreen01_dpo',1190),(17766,17766,'staticobjects/_exp08/player_housing/new/exp08_skyshrine_objects01_flagred01_dpo',1190),(17767,17767,'staticobjects/_exp08/player_housing/new/exp08_skyshrine_objects01_flagyellow01_dpo',1190),(17768,17768,'staticobjects/_exp08/player_housing/new/exp08_skyshrine_objects01_grouptable01_dpo',1190),(17769,17769,'staticobjects/_exp08/player_housing/new/exp08_skyshrine_objects01_grouptable01_shade_dpo',1190),(17770,17770,'staticobjects/_exp08/player_housing/new/exp08_skyshrine_objects01_grouptable02_dpo',1190),(17771,17771,'staticobjects/_exp08/player_housing/new/exp08_skyshrine_objects01_grouptable02_shade_dpo',1190),(17772,17772,'staticobjects/_exp08/player_housing/new/exp08_skyshrine_objects01_grouptable03_dpo',1190),(17773,17773,'staticobjects/_exp08/player_housing/new/exp08_skyshrine_objects01_grouptable03_shade_dpo',1190),(17774,17774,'staticobjects/_exp08/player_housing/new/exp08_skyshrine_objects01_grouptable04_dpo',1190),(17775,17775,'staticobjects/_exp08/player_housing/new/exp08_skyshrine_objects01_grouptable04_shade_dpo',1190),(17776,17776,'staticobjects/_exp08/player_housing/new/exp08_skyshrine_objects01_grouptable05_dpo',1190),(17777,17777,'staticobjects/_exp08/player_housing/new/exp08_skyshrine_objects01_grouptable05_shade_dpo',1190),(17778,17778,'staticobjects/_exp08/player_housing/new/exp08_skyshrine_objects01_grouptable06_dpo',1190),(17779,17779,'staticobjects/_exp08/player_housing/new/exp08_skyshrine_objects01_groupvase01_dpo',1190),(17780,17780,'staticobjects/_exp08/player_housing/new/exp08_skyshrine_objects01_groupvase02_dpo',1190),(17781,17781,'staticobjects/_exp08/player_housing/new/exp08_skyshrine_objects01_groupvase03_dpo',1190),(17782,17782,'staticobjects/_exp08/player_housing/new/exp08_skyshrine_objects01_groupvase04_dpo',1190),(17783,17783,'staticobjects/_exp08/player_housing/new/exp08_skyshrine_objects01_groupvase05_dpo',1190),(17784,17784,'staticobjects/_exp08/player_housing/new/exp08_skyshrine_objects01_groupvase06_dpo',1190),(17785,17785,'staticobjects/_exp08/player_housing/new/exp08_skyshrine_objects01_groupvase07_dpo',1190),(17786,17786,'staticobjects/_exp08/player_housing/new/exp08_skyshrine_objects01_groupvase08_dpo',1190),(17787,17787,'staticobjects/_exp08/player_housing/new/exp08_skyshrine_objects01_pedastalarcane01_dpo',1190),(17788,17788,'staticobjects/_exp08/player_housing/new/exp08_skyshrine_objects01_pedastalgov01_dpo',1190),(17789,17789,'accessories/wearable_items/_exp09/antonican_faction_armor/robe/head_mask',1190),(17790,17790,'staticobjects/_exp08/player_housing/new/exp08_skyshrine_objects01_rug01_dpo',1190),(17791,17791,'staticobjects/_exp08/player_housing/new/exp08_skyshrine_objects01_rug02_dpo',1190),(17792,17792,'staticobjects/_exp08/player_housing/new/exp08_skyshrine_objects01_rug03_dpo',1190),(17793,17793,'staticobjects/_exp08/player_housing/new/exp08_skyshrine_objects01_rug04_dpo',1190),(17794,17794,'staticobjects/_exp08/player_housing/new/exp08_skyshrine_objects01_rug05_dpo',1190),(17795,17795,'staticobjects/_exp08/player_housing/new/exp08_skyshrine_objects01_rug06_big_dpo',1190),(17796,17796,'staticobjects/_exp08/player_housing/new/exp08_skyshrine_objects01_statue01_gold_dpo',1190),(17797,17797,'staticobjects/_exp08/player_housing/new/exp08_skyshrine_objects01_statue01_marble_dpo',1190),(17798,17798,'staticobjects/_exp08/player_housing/new/exp08_skyshrine_objects01_statue01_metal_dpo',1190),(17799,17799,'staticobjects/_exp08/player_housing/new/exp08_skyshrine_objects01_statue02_gold_dpo',1190),(17800,17800,'staticobjects/_exp08/player_housing/new/exp08_skyshrine_objects01_statue02_marble_dpo',1190),(17801,17801,'staticobjects/_exp08/player_housing/new/exp08_skyshrine_objects01_statue02_metal_dpo',1190),(17802,17802,'staticobjects/_exp08/player_housing/new/exp08_skyshrine_objects01_statue03_gov01_gold_dpo',1190),(17803,17803,'accessories/wearable_items/_exp09/antonican_faction_armor/robe/head_mask_hood',1190),(17804,17804,'staticobjects/_exp08/player_housing/new/exp08_skyshrine_objects01_statue03_gov01_metal_dpo',1190),(17805,17805,'staticobjects/_exp08/player_housing/new/exp08_skyshrine_objects01_statue04_arcane01_gold_dpo',1190),(17806,17806,'staticobjects/_exp08/player_housing/new/exp08_skyshrine_objects01_statue04_arcane01_marble_dpo',1190),(17807,17807,'staticobjects/_exp08/player_housing/new/exp08_skyshrine_objects01_statue04_arcane01_metal_dpo',1190),(17808,17808,'staticobjects/_exp08/player_housing/new/exp08_skyshrine_objects01_statue05_gold_dpo',1190),(17809,17809,'staticobjects/_exp08/player_housing/new/exp08_skyshrine_objects01_statue05_marble_dpo',1190),(17810,17810,'staticobjects/_exp08/player_housing/new/exp08_skyshrine_objects01_statue05_metal_dpo',1190),(17811,17811,'staticobjects/_exp08/player_housing/new/exp08_skyshrine_objects01_table01_dpo',1190),(17812,17812,'staticobjects/_exp08/player_housing/new/exp08_skyshrine_objects01_table01b_dpo',1190),(17813,17813,'staticobjects/_exp08/player_housing/new/exp08_skyshrine_objects01_torch01_dpo',1190),(17814,17814,'staticobjects/_exp08/player_housing/new/exp08_skyshrine_objects01_torch02_dpo',1190),(17815,17815,'staticobjects/_exp08/player_housing/new/exp08_skyshrine_objects01_torcharcane01_dpo',1190),(17816,17816,'staticobjects/_exp08/player_housing/new/exp08_skyshrine_objects01_torchgov01_dpo',1190),(17817,17817,'staticobjects/_exp08/player_housing/new/exp08_skyshrine_objects01_torchmerchant01_dpo',1190),(17818,17818,'staticobjects/_exp08/player_housing/new/exp08_skyshrine_objects01_vase01_dpo',1190),(17819,17819,'staticobjects/_exp08/player_housing/new/exp08_skyshrine_objects01_vase01b_dpo',1190),(17820,17820,'staticobjects/_exp08/player_housing/new/exp08_skyshrine_objects01_vase02_dpo',1190),(17821,17821,'staticobjects/_exp08/player_housing/new/exp08_skyshrine_objects01_vase02b_dpo',1190),(17822,17822,'staticobjects/_exp08/player_housing/new/exp08_skyshrine_objects01_vase03_dpo',1190),(17823,17823,'staticobjects/_exp08/player_housing/new/exp08_skyshrine_objects01_vase03b_dpo',1190),(17824,17824,'staticobjects/_exp08/player_housing/new/exp08_skyshrine_objects01_vase04_dpo',1190),(17825,17825,'staticobjects/_exp08/player_housing/new/exp08_skyshrine_objects01_vase04b_dpo',1190),(17826,17826,'staticobjects/_exp08/player_housing/new/exp08_skyshrine_objects01_vase05_dpo',1190),(17827,17827,'staticobjects/_exp08/player_housing/new/exp08_skyshrine_objects01_vase05b_dpo',1190),(17828,17828,'staticobjects/_exp08/player_housing/new/exp08_skyshrine_objects01_wagonarcane01_dpo',1190),(17829,17829,'staticobjects/_exp08/player_housing/new/exp08_skyshrine_objects01_wagonarcane02_dpo',1190),(17830,17830,'staticobjects/_exp08/player_housing/new/exp08_skyshrine_objects01_wagongov01_dpo',1190),(17831,17831,'staticobjects/_exp08/player_housing/new/exp08_skyshrine_objects01_wagongov02_dpo',1190),(17832,17832,'staticobjects/_exp08/player_housing/new/exp08_skyshrine_objects01_wagonmerchant01_dpo',1190),(17833,17833,'staticobjects/_exp08/player_housing/new/exp08_skyshrine_objects01_wagonmerchant02_dpo',1190),(17834,17834,'creatures/mounts/anglerserpent_mount/anglerserpent_mount_ice_transparent',1190),(17835,17835,'accessories/wieldable_items/weapons/exp09/1h_crush/1h_hammer_skyshrine_evil_fx',1190),(17836,17836,'accessories/wieldable_items/weapons/exp09/1h_crush/1h_hammer_skyshrine_good_fx',1190),(17837,17837,'accessories/wieldable_items/weapons/exp09/1h_pierce/dagger_skyshrine_evil_fx',1190),(17838,17838,'accessories/wieldable_items/weapons/exp09/1h_pierce/dagger_skyshrine_good_fx',1190),(17839,17839,'accessories/wieldable_items/weapons/exp09/1h_sword/1h_axe_skyshrine_evil_fx',1190),(17840,17840,'accessories/wieldable_items/weapons/exp09/1h_sword/1h_axe_skyshrine_good_fx',1190),(17841,17841,'accessories/wieldable_items/weapons/exp09/1h_sword/1h_sword_skyshrine_evil_fx',1190),(17842,17842,'accessories/wieldable_items/weapons/exp09/1h_sword/1h_sword_skyshrine_good_fx',1190),(17843,17843,'accessories/wieldable_items/weapons/exp09/2h_sword/2h_sword_skyshrine_evil_fx',1190),(17844,17844,'accessories/wieldable_items/weapons/exp09/2h_sword/2h_sword_skyshrine_good_fx',1190),(17845,17845,'accessories/wieldable_items/weapons/exp09/bow/longbow_skyshrine_evil_fx',1190),(17846,17846,'accessories/wieldable_items/weapons/exp09/bow/longbow_skyshrine_good_fx',1190),(17847,17847,'accessories/wieldable_items/weapons/exp09/fist/katar_spiked_skyshrine_evil_fx',1190),(17848,17848,'accessories/wieldable_items/weapons/exp09/fist/katar_spiked_skyshrine_good_fx',1190),(17849,17849,'accessories/wieldable_items/weapons/exp09/staff/halberd_skyshrine_evil_fx',1190),(17850,17850,'accessories/wieldable_items/weapons/exp09/staff/halberd_skyshrine_good_fx',1190),(17851,17851,'accessories/wieldable_items/weapons/exp09/staff/spear_open_skyshrine_evil_fx',1190),(17852,17852,'accessories/wieldable_items/weapons/exp09/staff/spear_open_skyshrine_good_fx',1190),(17853,17853,'accessories/wieldable_items/weapons/exp09/staff/spear_skyshrine_evil_fx',1190),(17854,17854,'accessories/wieldable_items/weapons/exp09/staff/spear_skyshrine_good_fx',1190),(17855,17855,'accessories/wieldable_items/weapons/exp09/staff/staff_skyshrine_evil_fx',1190),(17856,17856,'accessories/wieldable_items/weapons/exp09/staff/staff_skyshrine_good_fx',1190),(17857,17857,'staticobjects/_exp08/player_housing/new/exp08_skyshrine_objects01_pedastalmerchant01_dpo',1190),(17858,17858,'accessories/wearable_items/_exp09/antonican_faction_armor/robe/pants',1190),(17859,17859,'creatures/mounts/player_wing/player_wing_clockwork_clear',1190),(17860,17860,'creatures/mounts/player_wing/player_wing_clockwork_clear_red',1190),(17861,17861,'creatures/mounts/player_wing/player_wing_clockwork_evil',1190),(17862,17862,'creatures/mounts/player_wing/player_wing_clockwork_evil2',1190),(17863,17863,'creatures/mounts/player_wing/player_wing_clockwork_goldblue',1190),(17864,17864,'creatures/mounts/player_wing/player_wing_clockwork_goldpink',1190),(17865,17865,'creatures/mounts/player_wing/player_wing_clockwork1',1190),(17866,17866,'creatures/mounts/player_wing/player_wing_clockwork1_blue',1190),(17867,17867,'creatures/mounts/player_wing/player_wing_clockwork1_dark',1190),(17868,17868,'creatures/mounts/player_wing/player_wing_clockwork1_darkgreen',1190),(17869,17869,'creatures/mounts/player_wing/player_wing_clockwork1_green',1190),(17870,17870,'creatures/mounts/player_wing/player_wing_clockwork1_red',1190),(17871,17871,'accessories/wearable_items/cloak/exp09/cloak_mistshire',1190),(17872,17872,'accessories/wearable_items/_exp08/tradeskill_vanguard/dark/chest',1190),(17873,17873,'accessories/wearable_items/_exp08/tradeskill_vanguard/dark/feet',1190),(17874,17874,'accessories/wearable_items/_exp08/tradeskill_vanguard/dark/forearms',1190),(17875,17875,'accessories/wearable_items/_exp08/tradeskill_vanguard/dark/hands',1190),(17876,17876,'accessories/wearable_items/_exp08/tradeskill_vanguard/dark/head',1190),(17877,17877,'accessories/wearable_items/_exp08/tradeskill_vanguard/dark/left',1190),(17878,17878,'accessories/wearable_items/_exp08/tradeskill_vanguard/dark/legs',1190),(17879,17879,'accessories/wearable_items/_exp08/tradeskill_vanguard/dark/legs_noskirt',1190),(17880,17880,'accessories/wearable_items/_exp08/tradeskill_vanguard/dark/pauldron02_vanguard_ridged_left',1190),(17881,17881,'accessories/wearable_items/_exp08/tradeskill_vanguard/dark/pauldron02_vanguard_ridged_right',1190),(17882,17882,'accessories/wearable_items/_exp08/tradeskill_vanguard/dark/right',1190),(17883,17883,'accessories/wearable_items/_exp08/tradeskill_vanguard/dark/shoulders',1190),(17884,17884,'accessories/wearable_items/_exp08/tradeskill_vanguard/dark/shoulders_epic',1190),(17885,17885,'accessories/wearable_items/_exp08/tradeskill_vanguard/dark/shoulders_nopauldrons',1190),(17886,17886,'accessories/wearable_items/_exp08/tradeskill_vanguard/dark/skirt',1190),(17887,17887,'accessories/wearable_items/_exp08/tradeskill_vanguard/gold/chest',1190),(17888,17888,'accessories/wearable_items/_exp08/tradeskill_vanguard/gold/feet',1190),(17889,17889,'accessories/wearable_items/_exp08/tradeskill_vanguard/gold/forearms',1190),(17890,17890,'accessories/wearable_items/_exp08/tradeskill_vanguard/gold/hands',1190),(17891,17891,'accessories/wearable_items/_exp08/tradeskill_vanguard/gold/head',1190),(17892,17892,'accessories/wearable_items/_exp08/tradeskill_vanguard/gold/left',1190),(17893,17893,'accessories/wearable_items/_exp08/tradeskill_vanguard/gold/legs',1190),(17894,17894,'accessories/wearable_items/_exp08/tradeskill_vanguard/gold/legs_noskirt',1190),(17895,17895,'accessories/wearable_items/_exp08/tradeskill_vanguard/gold/pauldron02_vanguard_ridged_left',1190),(17896,17896,'accessories/wearable_items/_exp08/tradeskill_vanguard/gold/pauldron02_vanguard_ridged_right',1190),(17897,17897,'accessories/wearable_items/_exp08/tradeskill_vanguard/gold/right',1190),(17898,17898,'accessories/wearable_items/_exp08/tradeskill_vanguard/gold/shoulders',1190),(17899,17899,'accessories/wearable_items/_exp08/tradeskill_vanguard/gold/shoulders_epic',1190),(17900,17900,'accessories/wearable_items/_exp08/tradeskill_vanguard/gold/shoulders_nopauldrons',1190),(17901,17901,'accessories/wearable_items/_exp08/tradeskill_vanguard/gold/skirt',1190),(17902,17902,'accessories/wearable_items/_exp08/tradeskill_vanguard/green/chest',1190),(17903,17903,'accessories/wearable_items/_exp08/tradeskill_vanguard/green/feet',1190),(17904,17904,'accessories/wearable_items/_exp08/tradeskill_vanguard/green/forearms',1190),(17905,17905,'accessories/wearable_items/_exp08/tradeskill_vanguard/green/hands',1190),(17906,17906,'accessories/wearable_items/_exp08/tradeskill_vanguard/green/head',1190),(17907,17907,'accessories/wearable_items/_exp08/tradeskill_vanguard/green/left',1190),(17908,17908,'accessories/wearable_items/_exp08/tradeskill_vanguard/green/legs',1190),(17909,17909,'accessories/wearable_items/_exp08/tradeskill_vanguard/green/legs_noskirt',1190),(17910,17910,'accessories/wearable_items/_exp08/tradeskill_vanguard/green/pauldron02_vanguard_ridged_left',1190),(17911,17911,'accessories/wearable_items/_exp08/tradeskill_vanguard/green/pauldron02_vanguard_ridged_right',1190),(17912,17912,'accessories/wearable_items/_exp08/tradeskill_vanguard/green/right',1190),(17913,17913,'accessories/wearable_items/_exp08/tradeskill_vanguard/green/shoulders',1190),(17914,17914,'accessories/wearable_items/_exp08/tradeskill_vanguard/green/shoulders_epic',1190),(17915,17915,'accessories/wearable_items/_exp08/tradeskill_vanguard/green/shoulders_nopauldrons',1190),(17916,17916,'accessories/wearable_items/_exp08/tradeskill_vanguard/green/skirt',1190),(17917,17917,'accessories/wearable_items/_exp08/tradeskill_vanguard/iron/chest',1190),(17918,17918,'accessories/wearable_items/_exp08/tradeskill_vanguard/iron/feet',1190),(17919,17919,'accessories/wearable_items/_exp08/tradeskill_vanguard/iron/forearms',1190),(17920,17920,'accessories/wearable_items/_exp08/tradeskill_vanguard/iron/hands',1190),(17921,17921,'accessories/wearable_items/_exp08/tradeskill_vanguard/iron/head',1190),(17922,17922,'accessories/wearable_items/_exp08/tradeskill_vanguard/iron/left',1190),(17923,17923,'accessories/wearable_items/_exp08/tradeskill_vanguard/iron/legs',1190),(17924,17924,'accessories/wearable_items/_exp08/tradeskill_vanguard/iron/legs_noskirt',1190),(17925,17925,'accessories/wearable_items/_exp08/tradeskill_vanguard/iron/pauldron02_vanguard_ridged_left',1190),(17926,17926,'accessories/wearable_items/_exp08/tradeskill_vanguard/iron/pauldron02_vanguard_ridged_right',1190),(17927,17927,'accessories/wearable_items/_exp08/tradeskill_vanguard/iron/right',1190),(17928,17928,'accessories/wearable_items/_exp08/tradeskill_vanguard/iron/shoulders',1190),(17929,17929,'accessories/wearable_items/_exp08/tradeskill_vanguard/iron/shoulders_epic',1190),(17930,17930,'accessories/wearable_items/_exp08/tradeskill_vanguard/iron/shoulders_nopauldrons',1190),(17931,17931,'accessories/wearable_items/_exp08/tradeskill_vanguard/iron/skirt',1190),(17932,17932,'accessories/wearable_items/_exp08/tradeskill_vanguard/red/chest',1190),(17933,17933,'accessories/wearable_items/_exp08/tradeskill_vanguard/red/feet',1190),(17934,17934,'accessories/wearable_items/_exp08/tradeskill_vanguard/red/forearms',1190),(17935,17935,'accessories/wearable_items/_exp08/tradeskill_vanguard/red/hands',1190),(17936,17936,'accessories/wearable_items/_exp08/tradeskill_vanguard/red/head',1190),(17937,17937,'accessories/wearable_items/_exp08/tradeskill_vanguard/red/left',1190),(17938,17938,'accessories/wearable_items/_exp08/tradeskill_vanguard/red/legs',1190),(17939,17939,'accessories/wearable_items/_exp08/tradeskill_vanguard/red/legs_noskirt',1190),(17940,17940,'accessories/wearable_items/_exp08/tradeskill_vanguard/red/pauldron02_vanguard_ridged_left',1190),(17941,17941,'accessories/wearable_items/_exp08/tradeskill_vanguard/red/pauldron02_vanguard_ridged_right',1190),(17942,17942,'accessories/wearable_items/_exp08/tradeskill_vanguard/red/right',1190),(17943,17943,'accessories/wearable_items/_exp08/tradeskill_vanguard/red/shoulders',1190),(17944,17944,'accessories/wearable_items/_exp08/tradeskill_vanguard/red/shoulders_epic',1190),(17945,17945,'accessories/wearable_items/_exp08/tradeskill_vanguard/red/shoulders_nopauldrons',1190),(17946,17946,'accessories/wearable_items/_exp08/tradeskill_vanguard/red/skirt',1190),(17947,17947,'accessories/wearable_items/_exp08/tradeskill_vanguard/chest',1190),(17948,17948,'accessories/wearable_items/_exp08/tradeskill_vanguard/feet',1190),(17949,17949,'accessories/wearable_items/_exp08/tradeskill_vanguard/forearms',1190),(17950,17950,'accessories/wearable_items/_exp08/tradeskill_vanguard/hands',1190),(17951,17951,'accessories/wearable_items/_exp08/tradeskill_vanguard/head',1190),(17952,17952,'accessories/wearable_items/_exp08/tradeskill_vanguard/left',1190),(17953,17953,'accessories/wearable_items/_exp08/tradeskill_vanguard/legs',1190),(17954,17954,'accessories/wearable_items/_exp08/tradeskill_vanguard/legs_noskirt',1190),(17955,17955,'accessories/wearable_items/_exp08/tradeskill_vanguard/pauldron02_vanguard_ridged_left',1190),(17956,17956,'accessories/wearable_items/_exp08/tradeskill_vanguard/pauldron02_vanguard_ridged_right',1190),(17957,17957,'accessories/wearable_items/_exp08/tradeskill_vanguard/right',1190),(17958,17958,'accessories/wearable_items/_exp08/tradeskill_vanguard/shoulders',1190),(17959,17959,'accessories/wearable_items/_exp08/tradeskill_vanguard/shoulders_epic',1190),(17960,17960,'accessories/wearable_items/_exp08/tradeskill_vanguard/shoulders_nopauldrons',1190),(17961,17961,'accessories/wearable_items/_exp08/tradeskill_vanguard/skirt',1190),(17962,17962,'accessories/wieldable_items/shields/exp08/exp08_shield_celticanimated_bluegold',1190),(17963,17963,'accessories/wieldable_items/weapons/exp08/1h_crush/mace_satyr_withering_lands',1190),(17964,17964,'accessories/wieldable_items/weapons/exp08/1h_crush/wand_satyr_withering_lands',1190),(17965,17965,'accessories/wieldable_items/weapons/exp08/1h_pierce/exp08_dagger_satyr_withering_lands',1190),(17966,17966,'accessories/wieldable_items/weapons/exp08/1h_sword/exp08_sword_satyr_withering_lands',1190),(17967,17967,'accessories/wieldable_items/weapons/exp08/2h_crush/exp08_2h_hammer_satyr_withering_lands',1190),(17968,17968,'accessories/wieldable_items/weapons/exp08/2h_sword/exp08_2hs_sword_satyr_withering_lands',1190),(17969,17969,'accessories/wieldable_items/weapons/exp08/bow/exp08_bow_satyr_withering_lands',1190),(17970,17970,'accessories/wieldable_items/weapons/exp08/staff/exp08_staff_satyr_withering_lands',1190),(17971,17971,'_exp08/characters/monsters/dragon_grendish/dragon_grendish',1190),(17972,17972,'accessories/wearable_items/cloak/exp09/cloak_sarnak',1190),(17973,17973,'staticobjects/_exp08/exp08_dun_skyshrine_contested/exp08_skyshrine_objects01_portalfx01_arcane01_pfx',1190),(17974,17974,'staticobjects/_exp08/exp08_dun_skyshrine_contested/exp08_skyshrine_objects01_portalfx01_gov01_pfx',1190),(17975,17975,'staticobjects/_exp08/exp08_dun_skyshrine_contested/exp08_skyshrine_objects01_portalfx01_merchant01_pfx',1190),(17976,17976,'_exp08/characters/monsters/fish_bowl/fish_bowl_base',1190),(17977,17977,'_exp08/characters/monsters/dragon_lendiniara/dragon_lendiniara',1190),(17978,17978,'accessories/wieldable_items/weapons/exp09/1h_crush/1h_hammer_tradeskill_bronze',1190),(17979,17979,'accessories/wieldable_items/weapons/exp09/1h_crush/1h_hammer_tradeskill_darkmetal',1190),(17980,17980,'accessories/wieldable_items/weapons/exp09/1h_crush/1h_hammer_tradeskill_gold',1190),(17981,17981,'accessories/wieldable_items/weapons/exp09/1h_crush/1h_hammer_tradeskill_iron',1190),(17982,17982,'accessories/wieldable_items/weapons/exp09/1h_pierce/dagger_tradeskill_bronze',1190),(17983,17983,'accessories/wieldable_items/weapons/exp09/1h_pierce/dagger_tradeskill_darkmetal',1190),(17984,17984,'accessories/wieldable_items/weapons/exp09/1h_pierce/dagger_tradeskill_gold',1190),(17985,17985,'accessories/wieldable_items/weapons/exp09/1h_pierce/dagger_tradeskill_iron',1190),(17986,17986,'accessories/wieldable_items/weapons/exp09/1h_sword/1h_axe_tradeskill_bronze',1190),(17987,17987,'accessories/wieldable_items/weapons/exp09/1h_sword/1h_axe_tradeskill_darkmetal',1190),(17988,17988,'accessories/wieldable_items/weapons/exp09/1h_sword/1h_axe_tradeskill_gold',1190),(17989,17989,'accessories/wieldable_items/weapons/exp09/1h_sword/1h_axe_tradeskill_iron',1190),(17990,17990,'accessories/wieldable_items/weapons/exp09/1h_sword/1h_sword_tradeskill_bronze',1190),(17991,17991,'accessories/wieldable_items/weapons/exp09/1h_sword/1h_sword_tradeskill_darkmetal',1190),(17992,17992,'accessories/wieldable_items/weapons/exp09/1h_sword/1h_sword_tradeskill_gold',1190),(17993,17993,'accessories/wieldable_items/weapons/exp09/1h_sword/1h_sword_tradeskill_iron',1190),(17994,17994,'accessories/wieldable_items/weapons/exp09/bow/longbow_tradeskill_bronze',1190),(17995,17995,'accessories/wieldable_items/weapons/exp09/bow/longbow_tradeskill_darkmetal',1190),(17996,17996,'accessories/wieldable_items/weapons/exp09/bow/longbow_tradeskill_gold',1190),(17997,17997,'accessories/wieldable_items/weapons/exp09/bow/longbow_tradeskill_iron',1190),(17998,17998,'accessories/wieldable_items/weapons/exp09/staff/halberd_tradeskill_bronze',1190),(17999,17999,'accessories/wieldable_items/weapons/exp09/staff/halberd_tradeskill_darkmetal',1190),(18000,18000,'accessories/wieldable_items/weapons/exp09/staff/halberd_tradeskill_gold',1190),(18001,18001,'accessories/wieldable_items/weapons/exp09/staff/halberd_tradeskill_iron',1190),(18002,18002,'accessories/wieldable_items/weapons/exp09/staff/staff_tradeskill_bronze',1190),(18003,18003,'accessories/wieldable_items/weapons/exp09/staff/staff_tradeskill_darkmetal',1190),(18004,18004,'accessories/wieldable_items/weapons/exp09/staff/staff_tradeskill_gold',1190),(18005,18005,'accessories/wieldable_items/weapons/exp09/staff/staff_tradeskill_iron',1190),(18006,18006,'staticobjects/fish_tank/fishtank_01_dpo',1190),(18007,18007,'staticobjects/soe_wallet/painting_withered02',1190),(18008,18008,'staticobjects/soe_wallet/fishtank_02_dpo',1190),(18009,18009,'staticobjects/soe_wallet/painting_skyshrine',1190),(18010,18010,'staticobjects/soe_wallet/painting_withered01',1190),(18011,18011,'creatures/mounts/horse_heavy/horse_epic_lava',1190),(18012,18012,'accessories/wieldable_items/weapons/exp08/1h_crush/hammer_combine_qeynos',1190),(18013,18013,'accessories/wieldable_items/weapons/exp08/1h_crush/hammer_combine_freeport',1190),(18014,18014,'accessories/wieldable_items/weapons/exp08/1h_crush/hammer_combine_neriak',1190),(18015,18015,'accessories/wieldable_items/weapons/exp08/1h_crush/hammer_combine_gorowyn',1190),(18016,18016,'accessories/wieldable_items/weapons/exp08/1h_crush/hammer_combine_halas',1190),(18017,18017,'accessories/wieldable_items/weapons/exp08/1h_crush/hammer_combine_kelethin',1190),(18018,18018,'accessories/wieldable_items/weapons/exp08/1h_pierce/exp08_dagger_combine_freeport',1190),(18019,18019,'accessories/wieldable_items/weapons/exp08/1h_pierce/exp08_dagger_combine_qeynos',1190),(18020,18020,'accessories/wieldable_items/weapons/exp08/1h_pierce/exp08_dagger_combine_neriak',1190),(18021,18021,'accessories/wieldable_items/weapons/exp08/1h_pierce/exp08_dagger_combine_gorowyn',1190),(18022,18022,'accessories/wieldable_items/weapons/exp08/1h_pierce/exp08_dagger_combine_halas',1190),(18023,18023,'accessories/wieldable_items/weapons/exp08/1h_pierce/exp08_dagger_combine_kelethin',1190),(18024,18024,'accessories/wieldable_items/weapons/exp08/1h_sword/exp08_sword_combine_gorowyn',1190),(18025,18025,'accessories/wieldable_items/weapons/exp08/1h_sword/exp08_sword_combine_qeynos',1190),(18026,18026,'accessories/wieldable_items/weapons/exp08/1h_sword/exp08_sword_combine_neriak',1190),(18027,18027,'accessories/wieldable_items/weapons/exp08/1h_sword/exp08_sword_combine_freeport',1190),(18028,18028,'accessories/wieldable_items/weapons/exp08/1h_sword/exp08_sword_combine_kelethin',1190),(18029,18029,'accessories/wieldable_items/weapons/exp08/1h_sword/exp08_sword_combine_halas',1190),(18030,18030,'accessories/wieldable_items/weapons/exp08/1h_sword/exp08_sword_combine_base',1190),(18031,18031,'accessories/wieldable_items/weapons/exp08/2h_sword/exp08_2hs_sword_combine_freeport',1190),(18032,18032,'accessories/wieldable_items/weapons/exp08/2h_sword/exp08_2hs_sword_combine_qeynos',1190),(18033,18033,'accessories/wieldable_items/weapons/exp08/2h_sword/exp08_2hs_sword_combine_neriak',1190),(18034,18034,'accessories/wieldable_items/weapons/exp08/2h_sword/exp08_2hs_sword_combine_gorowyn',1190),(18035,18035,'accessories/wieldable_items/weapons/exp08/2h_sword/exp08_2hs_sword_combine_halas',1190),(18036,18036,'accessories/wieldable_items/weapons/exp08/2h_sword/exp08_2hs_sword_combine_kelethin',1190),(18037,18037,'accessories/wearable_items/cloak/exp08/cloak_brawlin_riggins',1190),(18038,18038,'accessories/wearable_items/_exp08/brawlin_riggins_armor/snap_ons/brawlin_riggins_boot_cuff_left',1190),(18039,18039,'accessories/wearable_items/_exp08/brawlin_riggins_armor/snap_ons/brawlin_riggins_boot_cuff_right',1190),(18040,18040,'accessories/wearable_items/_exp08/brawlin_riggins_armor/snap_ons/brawlin_riggins_elbow_left',1190),(18041,18041,'accessories/wearable_items/_exp08/brawlin_riggins_armor/snap_ons/brawlin_riggins_pauldron_left',1190),(18042,18042,'accessories/wearable_items/_exp08/brawlin_riggins_armor/snap_ons/brawlin_riggins_wrist_left',1190),(18043,18043,'accessories/wearable_items/_exp08/brawlin_riggins_armor/snap_ons/brawlin_riggins_wrist_right',1190),(18044,18044,'accessories/wearable_items/_exp08/brawlin_riggins_armor/snap_ons/head_collar_brawlin_riggins',1190),(18045,18045,'accessories/wearable_items/_exp08/brawlin_riggins_armor/chest',1190),(18046,18046,'accessories/wearable_items/_exp08/brawlin_riggins_armor/feet',1190),(18047,18047,'accessories/wearable_items/_exp08/brawlin_riggins_armor/feet_peg_left',1190),(18048,18048,'accessories/wearable_items/_exp08/brawlin_riggins_armor/feet_peg_right',1190),(18049,18049,'accessories/wearable_items/_exp08/brawlin_riggins_armor/forearms',1190),(18050,18050,'accessories/wearable_items/_exp08/brawlin_riggins_armor/hands',1190),(18051,18051,'accessories/wearable_items/_exp08/brawlin_riggins_armor/head',1190),(18052,18052,'accessories/wearable_items/_exp08/brawlin_riggins_armor/legs',1190),(18053,18053,'accessories/wearable_items/_exp08/brawlin_riggins_armor/shoulders',1190),(18054,18054,'accessories/wearable_items/_exp08/brawlin_riggins_armor/skirt',1190),(18055,18055,'accessories/wieldable_items/shields/exp08/exp08_shield_tower_combine_kelethin',1190),(18056,18056,'accessories/wieldable_items/shields/exp08/exp08_shield_tower_combine_halas',1190),(18057,18057,'accessories/wieldable_items/shields/exp08/exp08_shield_tower_combine_gorowyn',1190),(18058,18058,'accessories/wieldable_items/shields/exp08/exp08_shield_tower_combine_neriak',1190),(18059,18059,'accessories/wieldable_items/shields/exp08/exp08_shield_tower_combine_freeport',1190),(18060,18060,'accessories/wieldable_items/shields/exp08/exp08_shield_tower_combine_qeynos',1190),(18061,18061,'_exp01/characters/monsters/crocodile_thin_nose',1190),(18062,18062,'accessories/wearable_items/_exp08/tradeskill_robe/chest',1190),(18063,18063,'accessories/wearable_items/_exp08/tradeskill_robe/feet',1190),(18064,18064,'accessories/wearable_items/_exp08/tradeskill_robe/hands',1190),(18065,18065,'accessories/wearable_items/_exp08/tradeskill_robe/head_collar',1190),(18066,18066,'accessories/wearable_items/_exp08/tradeskill_robe/head_robe',1190),(18067,18067,'accessories/wearable_items/_exp08/tradeskill_robe/pants',1190),(18068,18068,'accessories/wearable_items/_exp08/tradeskill_robe/skirt',1190),(18069,18069,'accessories/wearable_items/_exp08/tradeskill_robe/dark/chest',1190),(18070,18070,'accessories/wearable_items/_exp08/tradeskill_robe/dark/feet',1190),(18071,18071,'accessories/wearable_items/_exp08/tradeskill_robe/dark/hands',1190),(18072,18072,'accessories/wearable_items/_exp08/tradeskill_robe/dark/head_collar',1190),(18073,18073,'accessories/wearable_items/_exp08/tradeskill_robe/dark/head_hood',1190),(18074,18074,'accessories/wearable_items/_exp08/tradeskill_robe/dark/pants',1190),(18075,18075,'accessories/wearable_items/_exp08/tradeskill_robe/dark/skirt',1190),(18076,18076,'accessories/wearable_items/_exp08/tradeskill_robe/gold/chest',1190),(18077,18077,'accessories/wearable_items/_exp08/tradeskill_robe/gold/feet',1190),(18078,18078,'accessories/wearable_items/_exp08/tradeskill_robe/gold/hands',1190),(18079,18079,'accessories/wearable_items/_exp08/tradeskill_robe/gold/head_collar',1190),(18080,18080,'accessories/wearable_items/_exp08/tradeskill_robe/gold/head_hood',1190),(18081,18081,'accessories/wearable_items/_exp08/tradeskill_robe/gold/pants',1190),(18082,18082,'accessories/wearable_items/_exp08/tradeskill_robe/gold/skirt',1190),(18083,18083,'accessories/wearable_items/_exp08/tradeskill_robe/green/chest',1190),(18084,18084,'accessories/wearable_items/_exp08/tradeskill_robe/green/feet',1190),(18085,18085,'accessories/wearable_items/_exp08/tradeskill_robe/green/hands',1190),(18086,18086,'accessories/wearable_items/_exp08/tradeskill_robe/green/head_collar',1190),(18087,18087,'accessories/wearable_items/_exp08/tradeskill_robe/green/head_hood',1190),(18088,18088,'accessories/wearable_items/_exp08/tradeskill_robe/green/pants',1190),(18089,18089,'accessories/wearable_items/_exp08/tradeskill_robe/green/skirt',1190),(18090,18090,'accessories/wearable_items/_exp08/tradeskill_robe/iron/chest',1190),(18091,18091,'accessories/wearable_items/_exp08/tradeskill_robe/iron/feet',1190),(18092,18092,'accessories/wearable_items/_exp08/tradeskill_robe/iron/hands',1190),(18093,18093,'accessories/wearable_items/_exp08/tradeskill_robe/iron/head_collar',1190),(18094,18094,'accessories/wearable_items/_exp08/tradeskill_robe/iron/head_hood',1190),(18095,18095,'accessories/wearable_items/_exp08/tradeskill_robe/iron/pants',1190),(18096,18096,'accessories/wearable_items/_exp08/tradeskill_robe/iron/skirt',1190),(18097,18097,'accessories/wearable_items/_exp08/tradeskill_robe/red/chest',1190),(18098,18098,'accessories/wearable_items/_exp08/tradeskill_robe/red/feet',1190),(18099,18099,'accessories/wearable_items/_exp08/tradeskill_robe/red/hands',1190),(18100,18100,'accessories/wearable_items/_exp08/tradeskill_robe/red/head_collar',1190),(18101,18101,'accessories/wearable_items/_exp08/tradeskill_robe/red/head_hood',1190),(18102,18102,'accessories/wearable_items/_exp08/tradeskill_robe/red/pants',1190),(18103,18103,'accessories/wearable_items/_exp08/tradeskill_robe/red/skirt',1190),(18104,18104,'staticobjects/housing_portal_objects/vision_home_void01',1190),(18105,18105,'staticobjects/housing_portal_objects/vision_home_vasty_library01',1190),(18106,18106,'staticobjects/_exp08/exp08_dun_skyshrine_contested/teleport_portalfx01',1190),(18107,18107,'_exp08/characters/monsters/dragon_susarrak/susarrak',1190),(18108,18108,'accessories/wieldable_items/shields/exp08/exp08_shield_buckler_tradeskill',1190),(18109,18109,'accessories/wieldable_items/shields/exp08/exp08_shield_buckler_tradeskill_dark',1190),(18110,18110,'accessories/wieldable_items/shields/exp08/exp08_shield_buckler_tradeskill_gold',1190),(18111,18111,'accessories/wieldable_items/shields/exp08/exp08_shield_buckler_tradeskill_iron',1190),(18112,18112,'accessories/wieldable_items/shields/exp08/exp08_shield_kite_tradeskill',1190),(18113,18113,'accessories/wieldable_items/shields/exp08/exp08_shield_kite_tradeskill_dark',1190),(18114,18114,'accessories/wieldable_items/shields/exp08/exp08_shield_kite_tradeskill_gold',1190),(18115,18115,'accessories/wieldable_items/shields/exp08/exp08_shield_kite_tradeskill_iron',1190),(18116,18116,'accessories/wieldable_items/shields/exp08/exp08_shield_round_tradeskill',1190),(18117,18117,'accessories/wieldable_items/shields/exp08/exp08_shield_round_tradeskill_dark',1190),(18118,18118,'accessories/wieldable_items/shields/exp08/exp08_shield_round_tradeskill_gold',1190),(18119,18119,'accessories/wieldable_items/shields/exp08/exp08_shield_round_tradeskill_iron',1190),(18120,18120,'_exp09/characters/monsters/mud_monster/mud_monster_skyshrine',1190),(18121,18121,'accessories/wearable_items/cloak/exp08/jester/cloak_jester_blackred',1190),(18122,18122,'accessories/wearable_items/cloak/exp08/jester/cloak_jester_blackwhite',1190),(18123,18123,'accessories/wearable_items/cloak/exp08/jester/cloak_jester_blueyellow',1190),(18124,18124,'accessories/wearable_items/cloak/exp08/jester/cloak_jester_greengold',1190),(18125,18125,'accessories/wearable_items/cloak/exp08/jester/cloak_jester_purplepink',1190),(18126,18126,'accessories/wearable_items/cloak/exp08/jester/cloak_jester_redgold',1190),(18127,18127,'accessories/wearable_items/_exp08/jester_heavycloth/blackred/belt/skirt 2',1190),(18128,18128,'accessories/wearable_items/_exp08/jester_heavycloth/blackred/belt/skirt',1190),(18129,18129,'accessories/wearable_items/_exp08/jester_heavycloth/blackred/head/head',1190),(18130,18130,'accessories/wearable_items/_exp08/jester_heavycloth/blackred/chest',1190),(18131,18131,'accessories/wearable_items/_exp08/jester_heavycloth/blackred/feet',1190),(18132,18132,'accessories/wearable_items/_exp08/jester_heavycloth/blackred/hands',1190),(18133,18133,'accessories/wearable_items/_exp08/jester_heavycloth/blackred/head_jester',1190),(18134,18134,'accessories/wearable_items/_exp08/jester_heavycloth/blackred/legs',1190),(18135,18135,'accessories/wearable_items/_exp08/jester_heavycloth/blackred/shoulders',1190),(18136,18136,'accessories/wearable_items/_exp08/jester_heavycloth/blackred/skirt',1190),(18137,18137,'accessories/wearable_items/_exp08/jester_heavycloth/blackwhite/belt/skirt',1190),(18138,18138,'accessories/wearable_items/_exp08/jester_heavycloth/blackwhite/belt/skirt_nofroglok',1190),(18139,18139,'accessories/wearable_items/_exp08/jester_heavycloth/blackwhite/chest',1190),(18140,18140,'accessories/wearable_items/_exp08/jester_heavycloth/blackwhite/feet',1190),(18141,18141,'accessories/wearable_items/_exp08/jester_heavycloth/blackwhite/hands',1190),(18142,18142,'accessories/wearable_items/_exp08/jester_heavycloth/blackwhite/head_jester',1190),(18143,18143,'accessories/wearable_items/_exp08/jester_heavycloth/blackwhite/legs',1190),(18144,18144,'accessories/wearable_items/_exp08/jester_heavycloth/blackwhite/shoulders',1190),(18145,18145,'accessories/wearable_items/_exp08/jester_heavycloth/blackwhite/skirt',1190),(18146,18146,'accessories/wearable_items/_exp08/jester_heavycloth/blueyellow/belt/skirt',1190),(18147,18147,'accessories/wearable_items/_exp08/jester_heavycloth/blueyellow/belt/skirt_nofroglok',1190),(18148,18148,'accessories/wearable_items/_exp08/jester_heavycloth/blueyellow/chest',1190),(18149,18149,'accessories/wearable_items/_exp08/jester_heavycloth/blueyellow/feet',1190),(18150,18150,'accessories/wearable_items/_exp08/jester_heavycloth/blueyellow/hands',1190),(18151,18151,'accessories/wearable_items/_exp08/jester_heavycloth/blueyellow/head_jester',1190),(18152,18152,'accessories/wearable_items/_exp08/jester_heavycloth/blueyellow/legs',1190),(18153,18153,'accessories/wearable_items/_exp08/jester_heavycloth/blueyellow/shoulders',1190),(18154,18154,'accessories/wearable_items/_exp08/jester_heavycloth/blueyellow/skirt',1190),(18155,18155,'accessories/wearable_items/_exp08/jester_heavycloth/greenyellow/chest',1190),(18156,18156,'accessories/wearable_items/_exp08/jester_heavycloth/greenyellow/feet',1190),(18157,18157,'accessories/wearable_items/_exp08/jester_heavycloth/greenyellow/hands',1190),(18158,18158,'accessories/wearable_items/_exp08/jester_heavycloth/greenyellow/head_jester',1190),(18159,18159,'accessories/wearable_items/_exp08/jester_heavycloth/greenyellow/legs',1190),(18160,18160,'accessories/wearable_items/_exp08/jester_heavycloth/greenyellow/shoulders',1190),(18161,18161,'accessories/wearable_items/_exp08/jester_heavycloth/greenyellow/skirt',1190),(18162,18162,'accessories/wearable_items/_exp08/jester_heavycloth/greenyellow/belt/skirt',1190),(18163,18163,'accessories/wearable_items/_exp08/jester_heavycloth/greenyellow/belt/skirt_nofroglok',1190),(18164,18164,'accessories/wearable_items/_exp08/jester_heavycloth/purplepink/chest',1190),(18165,18165,'accessories/wearable_items/_exp08/jester_heavycloth/purplepink/feet',1190),(18166,18166,'accessories/wearable_items/_exp08/jester_heavycloth/purplepink/hands',1190),(18167,18167,'accessories/wearable_items/_exp08/jester_heavycloth/purplepink/head_jester',1190),(18168,18168,'accessories/wearable_items/_exp08/jester_heavycloth/purplepink/legs',1190),(18169,18169,'accessories/wearable_items/_exp08/jester_heavycloth/purplepink/shoulders',1190),(18170,18170,'accessories/wearable_items/_exp08/jester_heavycloth/purplepink/skirt',1190),(18171,18171,'accessories/wearable_items/_exp08/jester_heavycloth/purplepink/belt/skirt',1190),(18172,18172,'accessories/wearable_items/_exp08/jester_heavycloth/purplepink/belt/skirt_nofroglok',1190),(18173,18173,'accessories/wearable_items/_exp08/jester_heavycloth/set1/belt/skirt',1190),(18174,18174,'accessories/wearable_items/_exp08/jester_heavycloth/set1/belt/skirt2',1190),(18175,18175,'accessories/wearable_items/_exp08/jester_heavycloth/set1/chest',1190),(18176,18176,'accessories/wearable_items/_exp08/jester_heavycloth/set1/feet',1190),(18177,18177,'accessories/wearable_items/_exp08/jester_heavycloth/set1/hands',1190),(18178,18178,'accessories/wearable_items/_exp08/jester_heavycloth/set1/head_jester',1190),(18179,18179,'accessories/wearable_items/_exp08/jester_heavycloth/set1/legs',1190),(18180,18180,'accessories/wearable_items/_exp08/jester_heavycloth/set1/shoulders',1190),(18181,18181,'accessories/wearable_items/_exp08/jester_heavycloth/set1/skirt',1190),(18182,18182,'creatures/mounts/horse_frost_unicorn/horse_darkspirit_unicorn',1190),(18183,18183,'creatures/mounts/horse_frost_unicorn/horse_darkspirit_unicorn_blue',1190),(18184,18184,'creatures/mounts/horse_frost_unicorn/horse_darkspirit_unicorn_greenblue',1190),(18185,18185,'creatures/mounts/horse_frost_unicorn/horse_darkspirit_unicorn_orange',1190),(18186,18186,'creatures/mounts/horse_frost_unicorn/horse_darkspirit_unicorn_purple',1190),(18187,18187,'creatures/mounts/horse_frost_unicorn/horse_darkspirit_unicorn_purpleblue',1190),(18188,18188,'creatures/mounts/horse_frost_unicorn/horse_darkspirit_unicorn_red',1190),(18189,18189,'creatures/mounts/drakota_mount/drakota_mount_blue_rainstorm',1190),(18190,18190,'creatures/mounts/drakota_mount/drakota_mount_red_firestorm',1190),(18191,18191,'accessories/wieldable_items/weapons/exp09/fist/trueheart_claw',1190),(18192,18192,'accessories/wieldable_items/weapons/exp09/fist/trueheart_claw_gold',1190),(18193,18193,'accessories/wieldable_items/weapons/exp08/1h_crush/exp08_1h_crush_tradeskill',1190),(18194,18194,'accessories/wieldable_items/weapons/exp08/1h_crush/exp08_1h_crush_tradeskill_dark',1190),(18195,18195,'accessories/wieldable_items/weapons/exp08/1h_crush/exp08_1h_crush_tradeskill_gold',1190),(18196,18196,'accessories/wieldable_items/weapons/exp08/1h_crush/exp08_1h_crush_tradeskill_iron',1190),(18197,18197,'accessories/wieldable_items/weapons/exp08/1h_pierce/exp08_1h_dagger_tradeskill',1190),(18198,18198,'accessories/wieldable_items/weapons/exp08/1h_pierce/exp08_1h_dagger_tradeskill_dark',1190),(18199,18199,'accessories/wieldable_items/weapons/exp08/1h_pierce/exp08_1h_dagger_tradeskill_gold',1190),(18200,18200,'accessories/wieldable_items/weapons/exp08/1h_pierce/exp08_1h_dagger_tradeskill_iron',1190),(18201,18201,'accessories/wieldable_items/weapons/exp08/1h_sword/exp08_axe_tradeskill',1190),(18202,18202,'accessories/wieldable_items/weapons/exp08/1h_sword/exp08_axe_tradeskill_dark',1190),(18203,18203,'accessories/wieldable_items/weapons/exp08/1h_sword/exp08_axe_tradeskill_gold',1190),(18204,18204,'accessories/wieldable_items/weapons/exp08/1h_sword/exp08_axe_tradeskill_iron',1190),(18205,18205,'accessories/wieldable_items/weapons/exp08/1h_sword/exp08_sword_tradeskill_hooked',1190),(18206,18206,'accessories/wieldable_items/weapons/exp08/1h_sword/exp08_sword_tradeskill_hooked_dark',1190),(18207,18207,'accessories/wieldable_items/weapons/exp08/1h_sword/exp08_sword_tradeskill_hooked_gold',1190),(18208,18208,'accessories/wieldable_items/weapons/exp08/1h_sword/exp08_sword_tradeskill_hooked_iron',1190),(18209,18209,'accessories/wieldable_items/weapons/exp08/2h_sword/exp08_2h_axe_tradeskill',1190),(18210,18210,'accessories/wieldable_items/weapons/exp08/2h_sword/exp08_2h_axe_tradeskill_dark',1190),(18211,18211,'accessories/wieldable_items/weapons/exp08/2h_sword/exp08_2h_axe_tradeskill_gold',1190),(18212,18212,'accessories/wieldable_items/weapons/exp08/2h_sword/exp08_2h_axe_tradeskill_iron',1190),(18213,18213,'creatures/tu/holgresh_male_tainted01',1190),(18214,18214,'ec/pc/human/human_male_bandaged',1190),(18215,18215,'accessories/wearable_items/_exp08/combine_armor/vanguard_dirty/chest',1190),(18216,18216,'accessories/wearable_items/_exp08/combine_armor/vanguard_dirty/feet',1190),(18217,18217,'accessories/wearable_items/_exp08/combine_armor/vanguard_dirty/forearms',1190),(18218,18218,'accessories/wearable_items/_exp08/combine_armor/vanguard_dirty/hands',1190),(18219,18219,'accessories/wearable_items/_exp08/combine_armor/vanguard_dirty/head_combine_helm',1190),(18220,18220,'accessories/wearable_items/_exp08/combine_armor/vanguard_dirty/legs_noskirt',1190),(18221,18221,'accessories/wearable_items/_exp08/combine_armor/vanguard_dirty/legs_robeskirt',1190),(18222,18222,'accessories/wearable_items/_exp08/combine_armor/vanguard_dirty/legs_robeskirt_epic',1190),(18223,18223,'accessories/wearable_items/_exp08/combine_armor/vanguard_dirty/shoulders',1190),(18224,18224,'accessories/wearable_items/_exp08/combine_armor/vanguard_dirty/shoulders_epic',1190),(18225,18225,'accessories/wearable_items/_exp08/combine_armor/vanguard_dirty/skirt_robe',1190),(18226,18226,'accessories/wearable_items/_exp08/combine_armor/snapons-helms/dirty_combine_forearm_left',1190),(18227,18227,'accessories/wearable_items/_exp08/combine_armor/snapons-helms/dirty_combine_forearm_right',1190),(18228,18228,'accessories/wearable_items/_exp08/combine_armor/snapons-helms/dirty_combine_pauldron_left',1190),(18229,18229,'accessories/wearable_items/_exp08/combine_armor/snapons-helms/dirty_combine_pauldron_right',1190),(18230,18230,'accessories/wearable_items/_exp08/combine_armor/snapons-helms/dirty_combine_pauldrons_lower_left',1190),(18231,18231,'accessories/wearable_items/_exp08/combine_armor/snapons-helms/dirty_combine_pauldrons_lower_right',1190),(18232,18232,'accessories/wearable_items/_exp08/combine_armor/snapons-helms/dirty_combine_shin_left',1190),(18233,18233,'accessories/wearable_items/_exp08/combine_armor/snapons-helms/dirty_combine_shin_right',1190),(18234,18234,'accessories/wearable_items/_exp08/jester_heavycloth/whitered/chest',1190),(18235,18235,'accessories/wearable_items/_exp08/jester_heavycloth/whitered/feet',1190),(18236,18236,'accessories/wearable_items/_exp08/jester_heavycloth/whitered/hands',1190),(18237,18237,'accessories/wearable_items/_exp08/jester_heavycloth/whitered/head_jester',1190),(18238,18238,'accessories/wearable_items/_exp08/jester_heavycloth/whitered/legs',1190),(18239,18239,'accessories/wearable_items/_exp08/jester_heavycloth/whitered/shoulders',1190),(18240,18240,'accessories/wearable_items/_exp08/jester_heavycloth/whitered/skirt',1190),(18241,18241,'accessories/wearable_items/_exp08/jester_heavycloth/whitered/belt/skirt',1190),(18242,18242,'accessories/wearable_items/_exp08/jester_heavycloth/whitered/belt/skirt_nofroglok',1190),(18243,18243,'creatures/mounts/carpet_fly',1190),(18244,18244,'accessories/wearable_items/cloak/exp08/jester/cloak_jester_whitered',1190),(18245,18245,'staticobjects/_exp08/dyod/poets/dyod_djn_artist_inkbottle01',1190),(18246,18246,'staticobjects/_exp08/dyod/poets/dyod_djn_displaystand_steel01',1190),(18247,18247,'staticobjects/_exp08/dyod/poets/dyod_djn_basin_water_goldbrass01',1190),(18248,18248,'staticobjects/_exp08/dyod/poets/dyod_djn_basin_water_steel01',1190),(18249,18249,'staticobjects/_exp08/dyod/poets/dyod_djn_bed_brass01',1190),(18250,18250,'staticobjects/_exp08/dyod/poets/dyod_djn_bed_gold01',1190),(18251,18251,'staticobjects/_exp08/dyod/poets/dyod_djn_books_stack_small01',1190),(18252,18252,'staticobjects/_exp08/dyod/poets/dyod_djn_books_stack_small02',1190),(18253,18253,'staticobjects/_exp08/dyod/poets/dyod_djn_books_stack_tall01',1190),(18254,18254,'staticobjects/_exp08/dyod/poets/dyod_djn_books_stack_tall02',1190),(18255,18255,'staticobjects/_exp08/dyod/poets/dyod_djn_bowl_blue01',1190),(18256,18256,'staticobjects/_exp08/dyod/poets/dyod_djn_bowl_gold01',1190),(18257,18257,'staticobjects/_exp08/dyod/poets/dyod_djn_chair_artiststool_brass01',1190),(18258,18258,'staticobjects/_exp08/dyod/poets/dyod_djn_chair_artiststool_steel01',1190),(18259,18259,'staticobjects/_exp08/dyod/poets/dyod_djn_chair_high_brass01',1190),(18260,18260,'staticobjects/_exp08/dyod/poets/dyod_djn_chair_high_gold01',1190),(18261,18261,'staticobjects/_exp08/dyod/poets/dyod_djn_chair_high_platinum01',1190),(18262,18262,'staticobjects/_exp08/dyod/poets/dyod_djn_cup_blue01',1190),(18263,18263,'staticobjects/_exp08/dyod/poets/dyod_djn_cup_brass01',1190),(18264,18264,'staticobjects/_exp08/dyod/poets/dyod_djn_desk_brass01',1190),(18265,18265,'staticobjects/_exp08/dyod/poets/dyod_djn_displaystand01',1190),(18266,18266,'staticobjects/_exp08/dyod/poets/dyod_djn_displaystand_brass03',1190),(18267,18267,'staticobjects/_exp08/dyod/poets/dyod_djn_displaystand_brass_large02',1190),(18268,18268,'staticobjects/_exp08/dyod/poets/dyod_djn_displaystand_broken01',1190),(18269,18269,'staticobjects/_exp08/dyod/poets/dyod_djn_displaystand_large01',1190),(18270,18270,'staticobjects/_exp08/dyod/poets/dyod_djn_displaystand_platinum02',1190),(18271,18271,'staticobjects/_exp08/dyod/poets/dyod_djn_pillow_floor_blueround01',1190),(18272,18272,'staticobjects/_exp08/dyod/poets/dyod_djn_displaystand_steel_large01',1190),(18273,18273,'staticobjects/_exp08/dyod/poets/dyod_djn_genielamp_gold01',1190),(18274,18274,'staticobjects/_exp08/dyod/poets/dyod_djn_genielamp_rusty01',1190),(18275,18275,'staticobjects/_exp08/dyod/poets/dyod_djn_incenseburner_brass01',1190),(18276,18276,'staticobjects/_exp08/dyod/poets/dyod_djn_incenseburner_gold01',1190),(18277,18277,'staticobjects/_exp08/dyod/poets/dyod_djn_lightsource_balloon_ornate01',1190),(18278,18278,'staticobjects/_exp08/dyod/poets/dyod_djn_lightsource_balloon_ornate01_yellow',1190),(18279,18279,'staticobjects/_exp08/dyod/poets/dyod_djn_lightsource_balloon_ornate02',1190),(18280,18280,'staticobjects/_exp08/dyod/poets/dyod_djn_lightsource_balloon_ornate03',1190),(18281,18281,'staticobjects/_exp08/dyod/poets/dyod_djn_lightsource_balloon_plain01',1190),(18282,18282,'staticobjects/_exp08/dyod/poets/dyod_djn_lightsource_table_balloon_blue',1190),(18283,18283,'staticobjects/_exp08/dyod/poets/dyod_djn_lightsource_table_balloon_orange',1190),(18284,18284,'staticobjects/_exp08/dyod/poets/dyod_djn_lightsource_table_balloon_yellow',1190),(18285,18285,'staticobjects/_exp08/dyod/poets/dyod_djn_lightsource_torch01',1190),(18286,18286,'staticobjects/_exp08/dyod/poets/dyod_djn_lightsource_torch01_blue',1190),(18287,18287,'staticobjects/_exp08/dyod/poets/dyod_djn_lightsource_walltorch01',1190),(18288,18288,'staticobjects/_exp08/dyod/poets/dyod_djn_mirror_teleporter01',1190),(18289,18289,'staticobjects/_exp08/dyod/poets/dyod_djn_mirror_translocation01',1190),(18290,18290,'staticobjects/_exp08/dyod/poets/dyod_djn_mirror_translocation_base01',1190),(18291,18291,'staticobjects/_exp08/dyod/poets/dyod_djn_mirror_wall01',1190),(18292,18292,'staticobjects/_exp08/dyod/poets/dyod_djn_music_harp01',1190),(18293,18293,'staticobjects/_exp08/dyod/poets/dyod_djn_music_harp_broken01',1190),(18294,18294,'staticobjects/_exp08/dyod/poets/dyod_djn_music_mandolin01',1190),(18295,18295,'staticobjects/_exp08/dyod/poets/dyod_djn_music_mandolin_broken01',1190),(18296,18296,'staticobjects/_exp08/dyod/poets/dyod_djn_orb_elevatorswitch01',1190),(18297,18297,'staticobjects/_exp08/dyod/poets/dyod_djn_wine_bottle_gold',1190),(18298,18298,'staticobjects/_exp08/dyod/poets/dyod_djn_pillow_floor_blueround02',1190),(18299,18299,'staticobjects/_exp08/dyod/poets/dyod_djn_pillow_floor_bluesquare01',1190),(18300,18300,'staticobjects/_exp08/dyod/poets/dyod_djn_pillow_floor_bluesquare02',1190),(18301,18301,'staticobjects/_exp08/dyod/poets/dyod_djn_pillow_floor_bluesquare03',1190),(18302,18302,'staticobjects/_exp08/dyod/poets/dyod_djn_pillow_floor_group01',1190),(18303,18303,'staticobjects/_exp08/dyod/poets/dyod_djn_pillow_floor_group01_dirty',1190),(18304,18304,'staticobjects/_exp08/dyod/poets/dyod_djn_pillow_floor_group02',1190),(18305,18305,'staticobjects/_exp08/dyod/poets/dyod_djn_pillow_floor_group02_dirty',1190),(18306,18306,'staticobjects/_exp08/dyod/poets/dyod_djn_pillow_floor_redround01',1190),(18307,18307,'staticobjects/_exp08/dyod/poets/dyod_djn_pillow_floor_redround01_dirty',1190),(18308,18308,'staticobjects/_exp08/dyod/poets/dyod_djn_pillow_floor_redround02',1190),(18309,18309,'staticobjects/_exp08/dyod/poets/dyod_djn_pillow_floor_redround02_dirty',1190),(18310,18310,'staticobjects/_exp08/dyod/poets/dyod_djn_pillow_floor_redsquare01',1190),(18311,18311,'staticobjects/_exp08/dyod/poets/dyod_djn_pillow_floor_redsquare01_dirty',1190),(18312,18312,'staticobjects/_exp08/dyod/poets/dyod_djn_pillow_floor_redsquare02',1190),(18313,18313,'staticobjects/_exp08/dyod/poets/dyod_djn_pillow_floor_redsquare02_dirty',1190),(18314,18314,'staticobjects/_exp08/dyod/poets/dyod_djn_plate_blue01',1190),(18315,18315,'staticobjects/_exp08/dyod/poets/dyod_djn_plate_gold01',1190),(18316,18316,'staticobjects/_exp08/dyod/poets/dyod_djn_pottedplant_palm01_small_blue',1190),(18317,18317,'staticobjects/_exp08/dyod/poets/dyod_djn_scriptorium_scrollracks_3m',1190),(18318,18318,'staticobjects/_exp08/dyod/poets/dyod_djn_scriptorium_scrollracks_6m',1190),(18319,18319,'staticobjects/_exp08/dyod/poets/dyod_djn_scriptorium_scrollracks_8m',1190),(18320,18320,'staticobjects/_exp08/dyod/poets/dyod_djn_scriptorium_scrollracks_candlevasebrass02',1190),(18321,18321,'staticobjects/_exp08/dyod/poets/dyod_djn_scriptorium_scrollracks_candlevasegold01',1190),(18322,18322,'staticobjects/_exp08/dyod/poets/dyod_djn_scroll_single_open01',1190),(18323,18323,'staticobjects/_exp08/dyod/poets/dyod_djn_scrolls_group03',1190),(18324,18324,'staticobjects/_exp08/dyod/poets/dyod_djn_table_artist_brass01',1190),(18325,18325,'staticobjects/_exp08/dyod/poets/dyod_djn_table_artist_steel01',1190),(18326,18326,'staticobjects/_exp08/dyod/poets/dyod_djn_table_bedside01',1190),(18327,18327,'staticobjects/_exp08/dyod/poets/dyod_djn_table_bedside02_brass01',1190),(18328,18328,'staticobjects/_exp08/dyod/poets/dyod_djn_table_brass02',1190),(18329,18329,'staticobjects/_exp08/dyod/poets/dyod_djn_table_gold01',1190),(18330,18330,'staticobjects/_exp08/dyod/poets/dyod_djn_table_platinum01',1190),(18331,18331,'staticobjects/_exp08/dyod/poets/dyod_djn_vase_brass01',1190),(18332,18332,'staticobjects/_exp08/dyod/poets/dyod_djn_vase_brass02',1190),(18333,18333,'staticobjects/_exp08/dyod/poets/dyod_djn_vase_gold01',1190),(18334,18334,'staticobjects/_exp08/dyod/poets/dyod_djn_vase_gold02',1190),(18335,18335,'staticobjects/_exp08/player_housing/new/exp08_withered_lands_satyr_totem_1',1190),(18336,18336,'staticobjects/_exp08/player_housing/new/exp08_withered_lands_satyr_totem_2',1190),(18337,18337,'staticobjects/_exp08/player_housing/new/exp08_withered_lands_satyr_totem_3',1190),(18338,18338,'staticobjects/_exp08/player_housing/new/exp08_withered_lands_satyr_totem_4',1190),(18339,18339,'accessories/wearable_items/_exp06/dwarf_armor_chain/head_hornedcrest',1190),(18340,18340,'accessories/wearable_items/cloak/exp08/cloak_royal',1190),(18341,18341,'accessories/wearable_items/_exp08/robe_royal/redgold/chest',1190),(18342,18342,'accessories/wearable_items/_exp08/robe_royal/redgold/feet',1190),(18343,18343,'accessories/wearable_items/_exp08/robe_royal/redgold/hands',1190),(18344,18344,'accessories/wearable_items/_exp08/robe_royal/redgold/head',1190),(18345,18345,'accessories/wearable_items/_exp08/robe_royal/redgold/head_collar',1190),(18346,18346,'accessories/wearable_items/_exp08/robe_royal/redgold/pants',1190),(18347,18347,'accessories/wearable_items/_exp08/robe_royal/redgold/skirt',1190),(18348,18348,'_exp08/objects/satyr_camp_stone_unbroken',1190),(18349,18349,'_exp08/objects/satyr_camp_stone_broken',1190),(18350,18350,'_exp08/objects/stele_broken',1190),(18351,18351,'_exp08/objects/stele_fixed',1190),(18352,18352,'_exp08/objects/stele_fragment_01',1190),(18353,18353,'_exp08/objects/stele_fragment_02',1190),(18354,18354,'_exp08/objects/stele_fragment_03',1190),(18355,18355,'_exp08/objects/combine_barrel_01',1190),(18356,18356,'_exp08/objects/dirt_fertile',1190),(18357,18357,'_exp08/objects/dirt_not_fertile',1190),(18358,18358,'creatures/mounts/drakota_mount/drakota_mount_black_stormy',1190),(18359,18359,'staticobjects/_exp08/player_housing/new/exp08_withered_lands_satyr_totem_base',1190),(18360,18360,'accessories/wearable_items/_exp08/kilt_jewelled/base/belt',1190),(18361,18361,'accessories/wearable_items/_exp08/kilt_jewelled/base/chest',1190),(18362,18362,'accessories/wearable_items/_exp08/kilt_jewelled/base/feet',1190),(18363,18363,'accessories/wearable_items/_exp08/kilt_jewelled/base/hands',1190),(18364,18364,'accessories/wearable_items/_exp08/kilt_jewelled/base/legs_short_skirt_base',1190),(18365,18365,'accessories/wearable_items/_exp08/kilt_jewelled/base/shoulders',1190),(18366,18366,'accessories/wearable_items/_exp08/kilt_jewelled/base/snap_ons/belt',1190),(18367,18367,'accessories/wearable_items/_exp08/kilt_jewelled/base/snap_ons/short_skirt',1190),(18368,18368,'accessories/wearable_items/_exp08/kilt_jewelled/troubadour_hat_jewelled/head',1190),(18369,18369,'accessories/wearable_items/_exp08/kilt_jewelled/base/head',1190),(18370,18370,'creatures/mounts/drakota_mount/drakota_mount_base_server',1190),(18371,18371,'creatures/mounts/drakota_mount/drakota_mount_black_server',1190),(18372,18372,'creatures/mounts/drakota_mount/drakota_mount_blue_server',1190),(18373,18373,'creatures/mounts/drakota_mount/drakota_mount_green_server',1190),(18374,18374,'creatures/mounts/drakota_mount/drakota_mount_red_server',1190),(18375,18375,'_exp08/objects/stele_brush',1190),(18376,18376,'accessories/wearable_items/cloak/exp08/cloak_jewel',1190),(18377,18377,'accessories/wearable_items/cloak/exp08/cloak_jewel_scallop',1190),(18378,18378,'_exp08/objects/baracades/wl_baracade03_dpo',1190),(18379,18379,'_exp08/objects/baracades/wl_baracade01_dpo',1190),(18380,18380,'_exp08/objects/baracades/wl_baracade02_dpo',1190),(18381,18381,'_exp08/objects/bones/wl_bones_satyr_dpo',1190),(18382,18382,'_exp08/objects/bones/wl_bones_raptor_dpo',1190),(18383,18383,'_exp08/objects/bug_eggs/wl_bug_egg_dpo',1190),(18384,18384,'_exp08/objects/giant_zombie_objects/wl_weapons_rack_dpo',1190),(18385,18385,'_exp08/objects/giant_zombie_objects/wl_chair_dpo',1190),(18386,18386,'_exp08/objects/giant_zombie_objects/wl_chest_lrg_dpo',1190),(18387,18387,'_exp08/objects/holgresh/wl_hol_vertebrae_table_dpo',1190),(18388,18388,'_exp08/objects/holgresh/wl_barricade1_dpo',1190),(18389,18389,'_exp08/objects/holgresh/wl_barricade1_graveyard_dpo',1190),(18390,18390,'_exp08/objects/holgresh/wl_barricade2_dpo',1190),(18391,18391,'_exp08/objects/holgresh/wl_barricade2_graveyard_dpo',1190),(18392,18392,'_exp08/objects/holgresh/wl_barricade3_dpo',1190),(18393,18393,'_exp08/objects/holgresh/wl_barricade3_graveyard_dpo',1190),(18394,18394,'_exp08/objects/holgresh/wl_hol_bed1_dpo',1190),(18395,18395,'_exp08/objects/holgresh/wl_hol_bed2_dpo',1190),(18396,18396,'_exp08/objects/holgresh/wl_hol_bonepile1_dpo',1190),(18397,18397,'_exp08/objects/holgresh/wl_hol_bonepile2_dpo',1190),(18398,18398,'_exp08/objects/holgresh/wl_hol_bonepile3_dpo',1190),(18399,18399,'_exp08/objects/holgresh/wl_hol_bonepile4_dpo',1190),(18400,18400,'_exp08/objects/holgresh/wl_hol_bowl1_dpo',1190),(18401,18401,'_exp08/objects/holgresh/wl_hol_bowl2_dpo',1190),(18402,18402,'_exp08/objects/holgresh/wl_hol_dragon_shoulder_dpo',1190),(18403,18403,'_exp08/objects/holgresh/wl_hol_dragonskullfire_dpo',1190),(18404,18404,'_exp08/objects/holgresh/wl_hol_dragontooth_dpo',1190),(18405,18405,'_exp08/objects/holgresh/wl_hol_fetish_long1_dpo',1190),(18406,18406,'_exp08/objects/holgresh/wl_hol_fetish_long2_dpo',1190),(18407,18407,'_exp08/objects/holgresh/wl_hol_fetish_med1_dpo',1190),(18408,18408,'_exp08/objects/holgresh/wl_hol_fetish_med2_dpo',1190),(18409,18409,'_exp08/objects/holgresh/wl_hol_fetish_med3_dpo',1190),(18410,18410,'_exp08/objects/holgresh/wl_hol_fetish_short_dpo',1190),(18411,18411,'_exp08/objects/holgresh/wl_hol_skull_table_dpo',1190),(18412,18412,'_exp08/objects/holgresh/wl_hol_skullfire1_dpo',1190),(18413,18413,'_exp08/objects/holgresh/wl_hol_skullfire2_dpo',1190),(18414,18414,'_exp08/objects/satyr_camp/wl_satyr_mat01_dpo',1190),(18415,18415,'_exp08/objects/satyr_camp/wl_container_basketlong_open01_dpo',1190),(18416,18416,'_exp08/objects/satyr_camp/wl_container_basketshort01_dpo',1190),(18417,18417,'_exp08/objects/satyr_camp/wl_container_baskettall02_dpo',1190),(18418,18418,'_exp08/objects/satyr_camp/wl_container_bowl01_dpo',1190),(18419,18419,'_exp08/objects/satyr_camp/wl_goodsatyr_candle_dpo',1190),(18420,18420,'_exp08/objects/withering_lands/wl_veggie_vine02_dpo',1190),(18421,18421,'_exp08/objects/withering_lands/wl_evil_flower01_dpo',1190),(18422,18422,'_exp08/objects/withering_lands/wl_evil_orchid_01_dpo',1190),(18423,18423,'_exp08/objects/withering_lands/wl_happy_bush01_dpo',1190),(18424,18424,'_exp08/objects/withering_lands/wl_swamp_pads01_dpo',1190),(18425,18425,'_exp08/objects/withering_lands/wl_swamp_pads02_dpo',1190),(18426,18426,'_exp08/objects/withering_lands/wl_swamp_pads03_dpo',1190),(18427,18427,'_exp08/objects/withering_lands/wl_swamp_plant_dpo',1190),(18428,18428,'_exp08/objects/withering_lands/wl_twisted_tree_sapling_01_dpo',1190),(18429,18429,'_exp08/objects/withering_lands/wl_veggie_vine01_dpo',1190),(18430,18430,'_exp08/characters/monsters/dozekar/dozekar_02',1190),(18431,18431,'_exp08/characters/monsters/insect_queen/insect_queen_blue',1190),(18432,18432,'_exp08/characters/monsters/lady_nevederia/lady_nevederia',1190),(18433,18433,'_exp08/characters/tool_users/satyr_witheringlands_good/satyr_03',1190),(18434,18434,'_exp08/objects/ritual_stone',1190),(18435,18435,'_exp01/characters/monsters/crocodile_thin_nose_white',1190),(18436,18436,'_exp01/characters/monsters/crocodile_white',1190),(18437,18437,'_exp01/characters/monsters/crocodile_white_spots',1190),(18438,18438,'_exp08/objects/raptor_nest',1190),(18439,18439,'accessories/wieldable_items/weapons/exp08/2h_sword/exp08_2hs_sword_nightmare',1190),(18440,18440,'accessories/wieldable_items/weapons/exp08/1h_pierce/exp08_dagger_serpentstrike_silver',1190),(18441,18441,'accessories/wieldable_items/weapons/exp08/1h_pierce/exp08_dagger_serpentstrike_gold',1190),(18442,18442,'accessories/wearable_items/_exp08/arasai_heritage_armor/snap_ons/arasai_heritage_boot_cuff_female_left',1190),(18443,18443,'accessories/wearable_items/_exp08/arasai_heritage_armor/snap_ons/arasai_heritage_boot_cuff_female_right',1190),(18444,18444,'accessories/wearable_items/_exp08/arasai_heritage_armor/snap_ons/arasai_heritage_boot_cuff_left',1190),(18445,18445,'accessories/wearable_items/_exp08/arasai_heritage_armor/snap_ons/arasai_heritage_boot_cuff_right',1190),(18446,18446,'accessories/wearable_items/_exp08/arasai_heritage_armor/snap_ons/arasai_heritage_chest',1190),(18447,18447,'accessories/wearable_items/_exp08/arasai_heritage_armor/snap_ons/arasai_heritage_collar',1190),(18448,18448,'accessories/wearable_items/_exp08/arasai_heritage_armor/snap_ons/arasai_heritage_foot_left',1190),(18449,18449,'accessories/wearable_items/_exp08/arasai_heritage_armor/snap_ons/arasai_heritage_foot_right',1190),(18450,18450,'accessories/wearable_items/_exp08/arasai_heritage_armor/snap_ons/arasai_heritage_forearm_left',1190),(18451,18451,'accessories/wearable_items/_exp08/arasai_heritage_armor/snap_ons/arasai_heritage_forearm_right',1190),(18452,18452,'accessories/wearable_items/_exp08/arasai_heritage_armor/snap_ons/arasai_heritage_pauldron_left',1190),(18453,18453,'accessories/wearable_items/_exp08/arasai_heritage_armor/snap_ons/arasai_heritage_pauldron_right',1190),(18454,18454,'accessories/wearable_items/_exp08/arasai_heritage_armor/snap_ons/arasai_heritage_shin_left',1190),(18455,18455,'accessories/wearable_items/_exp08/arasai_heritage_armor/snap_ons/arasai_heritage_shin_right',1190),(18456,18456,'accessories/wearable_items/_exp08/arasai_heritage_armor/snap_ons/arasai_heritage_upperarm_left',1190),(18457,18457,'accessories/wearable_items/_exp08/arasai_heritage_armor/snap_ons/arasai_heritage_upperarm_right',1190),(18458,18458,'accessories/wearable_items/_exp08/arasai_heritage_armor/snap_ons/arasai_heritage_upperthigh_left',1190),(18459,18459,'accessories/wearable_items/_exp08/arasai_heritage_armor/snap_ons/arasai_heritage_upperthigh_right',1190),(18460,18460,'accessories/wearable_items/_exp08/arasai_heritage_armor/chest',1190),(18461,18461,'accessories/wearable_items/_exp08/arasai_heritage_armor/hands',1190),(18462,18462,'accessories/wearable_items/_exp08/arasai_heritage_armor/head_arasai_heritage',1190),(18463,18463,'accessories/wearable_items/_exp08/arasai_heritage_armor/legs',1190),(18464,18464,'accessories/wearable_items/cloak/exp08/cloak_arasai_heritage',1190),(18465,18465,'accessories/wieldable_items/shields/exp08/exp08_shield_gemstone_marbleflame',1190),(18466,18466,'accessories/wieldable_items/shields/exp08/exp08_shield_gemstone_purple',1190),(18467,18467,'accessories/wieldable_items/shields/exp08/exp08_shield_gemstone_marblemist',1190),(18468,18468,'accessories/wieldable_items/shields/exp08/exp08_shield_gemstone_blue',1190),(18469,18469,'accessories/wieldable_items/weapons/exp08/bow/exp08_bow_emberwood',1190),(18470,18470,'accessories/wieldable_items/weapons/exp08/bow/exp08_bow_emberwood_dark',1190),(18471,18471,'creatures/mounts/wyvern_mount/wyvern_mount_base',1190),(18472,18472,'accessories/wieldable_items/shields/exp08/exp08_shield_dragonanimated_royalvelium',1190),(18473,18473,'accessories/wieldable_items/shields/exp08/exp08_shield_dragonanimated_silver',1190),(18474,18474,'accessories/wieldable_items/shields/exp08/exp08_shield_dragonanimated_velium',1190),(18475,18475,'creatures/mounts/carpet_fly_battlemage_pestillence',1190),(18476,18476,'creatures/mounts/carpet_fly_battlemage_purple',1190),(18477,18477,'creatures/mounts/carpet_fly_battlemage_red',1190),(18478,18478,'creatures/mounts/carpet_fly_glass_swirl_blue',1190),(18479,18479,'creatures/mounts/carpet_fly_glass_swirl_red',1190),(18480,18480,'creatures/mounts/horse_heavy/horse_new_combine_freeport',1190),(18481,18481,'creatures/mounts/horse_heavy/horse_new_combine_halas',1190),(18482,18482,'_exp08/characters/tool_users/satyr_witheringlands_good/satyr_01',1190),(18483,18483,'creatures/mounts/horse_heavy/horse_new_combine_kelethin',1190),(18484,18484,'creatures/mounts/horse_heavy/horse_new_combine_neriak',1190),(18485,18485,'creatures/mounts/horse_heavy/horse_new_combine_qeynos',1190),(18486,18486,'creatures/mounts/horse_heavy/horse_new_combine_gorowyn',1190),(18487,18487,'accessories/wearable_items/cloak/exp09/cloak_withering_lands',1190),(18488,18488,'_exp08/characters/tool_users/combine_woodelf/combine_woodelf_optimized',1190),(18489,18489,'creatures/pets/lumpy_pet/pet_dragon_lumpy_blue',1190),(18490,18490,'creatures/pets/lumpy_pet/pet_dragon_lumpy_gold',1190),(18491,18491,'creatures/pets/lumpy_pet/pet_dragon_lumpy_green',1190),(18492,18492,'creatures/pets/lumpy_pet/pet_dragon_lumpy_purple',1190),(18493,18493,'creatures/pets/lumpy_pet/pet_dragon_lumpy_red',1190),(18494,18494,'creatures/pets/lumpy_pet/pet_dragon_lumpy_shadow',1190),(18495,18495,'_exp08/characters/tool_users/satyr_witheringlands_good/satyr_02',1190),(18496,18496,'_exp08/characters/tool_users/satyr_witheringlands_good/satyr_04',1190),(18497,18497,'_exp08/characters/tool_users/satyr_witheringlands_good/satyr_05',1190),(18498,18498,'staticobjects/tcg/tcg_painting68_burnish',1190),(18499,18499,'staticobjects/tcg/tcg_painting62_transcendinghelm',1190),(18500,18500,'staticobjects/tcg/tcg_painting63_library',1190),(18501,18501,'staticobjects/tcg/tcg_painting64_daughter',1190),(18502,18502,'staticobjects/tcg/tcg_painting65_sandguard',1190),(18503,18503,'staticobjects/tcg/tcg_painting66_fitbattle',1190),(18504,18504,'staticobjects/tcg/tcg_painting67_buccaneer',1190),(18505,18505,'accessories/wieldable_items/weapons/exp08/1h_crush/exp08_1h_club_holgresh',1190),(18506,18506,'accessories/wieldable_items/weapons/exp08/1h_pierce/exp08_1h_dagger_holgresh',1190),(18507,18507,'accessories/wieldable_items/weapons/exp08/1h_sword/exp08_1hs_axe_holgresh',1190),(18508,18508,'accessories/wieldable_items/weapons/exp08/1h_sword/exp08_1hs_sword_holgresh',1190),(18509,18509,'accessories/wieldable_items/weapons/exp08/1h_sword/exp08_1hs_axe_holgresh_pc',1190),(18510,18510,'staticobjects/_exp08/player_housing/new/exp08_withered_lands_combine_mailbox',1190),(18511,18511,'_exp09/characters/monsters/mud_monster/mud_monster_illusion',1190),(18512,18512,'creatures/monsters/goo_withering_lands',1190),(18513,18513,'accessories/wearable_items/profesion_hats/snow_bunny_hat/lumpy_dragon_variants/head_snow_bunny_hat_blue',1190),(18514,18514,'accessories/wearable_items/profesion_hats/snow_bunny_hat/lumpy_dragon_variants/head_snow_bunny_hat_gold',1190),(18515,18515,'accessories/wearable_items/profesion_hats/snow_bunny_hat/lumpy_dragon_variants/head_snow_bunny_hat_green',1190),(18516,18516,'accessories/wearable_items/profesion_hats/snow_bunny_hat/lumpy_dragon_variants/head_snow_bunny_hat_purple',1190),(18517,18517,'accessories/wearable_items/profesion_hats/snow_bunny_hat/lumpy_dragon_variants/head_snow_bunny_hat_red',1190),(18518,18518,'accessories/wearable_items/profesion_hats/snow_bunny_hat/lumpy_dragon_variants/head_snow_bunny_hat_shadow',1190),(18519,18519,'_exp08/characters/monsters/wyvern_new/wyvern_new_base',1190),(18520,18520,'accessories/wearable_items/_exp08/highelf_heritage_armor/valkyrie_new/chest',1190),(18521,18521,'creatures/pets/terrorbird_chick/terrorbird_chick',1190),(18522,18522,'accessories/wearable_items/_exp08/highelf_heritage_armor/valkyrie_new/forearms',1190),(18523,18523,'accessories/wearable_items/cloak/exp08/cloak_antonican_guard_chain',1190),(18524,18524,'accessories/wearable_items/_exp08/highelf_heritage_armor/valkyrie_new/legs',1190),(18525,18525,'creatures/tu/holgresh_male_caster01',1190),(18526,18526,'creatures/tu/holgresh_male_caster02',1190),(18527,18527,'creatures/tu/holgresh_male_caster03',1190),(18528,18528,'creatures/tu/holgresh_male_warrior01',1190),(18529,18529,'creatures/tu/holgresh_male_warrior02',1190),(18530,18530,'staticobjects/_exp08/player_housing/new/exp08_withered_lands_combine_trough',1190),(18531,18531,'staticobjects/_exp08/player_housing/new/exp08_withered_lands_combine_wheelbarrow',1190),(18532,18532,'staticobjects/_exp08/player_housing/new/exp08_withered_lands_combine_ark',1190),(18533,18533,'staticobjects/_exp08/player_housing/new/exp08_withered_lands_combine_barrel',1190),(18534,18534,'staticobjects/_exp08/player_housing/new/exp08_withered_lands_combine_bellows',1190),(18535,18535,'staticobjects/_exp08/player_housing/new/exp08_withered_lands_combine_bench',1190),(18536,18536,'staticobjects/_exp08/player_housing/new/exp08_withered_lands_combine_book_01',1190),(18537,18537,'staticobjects/_exp08/player_housing/new/exp08_withered_lands_combine_book_02',1190),(18538,18538,'staticobjects/_exp08/player_housing/new/exp08_withered_lands_combine_book_03',1190),(18539,18539,'staticobjects/_exp08/player_housing/new/exp08_withered_lands_combine_book_04',1190),(18540,18540,'staticobjects/_exp08/player_housing/new/exp08_withered_lands_combine_brazier_01',1190),(18541,18541,'staticobjects/_exp08/player_housing/new/exp08_withered_lands_combine_brazier_02',1190),(18542,18542,'staticobjects/_exp08/player_housing/new/exp08_withered_lands_combine_brazier_03',1190),(18543,18543,'staticobjects/_exp08/player_housing/new/exp08_withered_lands_combine_crate_01',1190),(18544,18544,'staticobjects/_exp08/player_housing/new/exp08_withered_lands_combine_cupboard_01',1190),(18545,18545,'staticobjects/_exp08/player_housing/new/exp08_withered_lands_combine_cupboard_02',1190),(18546,18546,'staticobjects/_exp08/player_housing/new/exp08_withered_lands_combine_cupboard_03',1190),(18547,18547,'staticobjects/_exp08/player_housing/new/exp08_withered_lands_combine_flag_freeport',1190),(18548,18548,'staticobjects/_exp08/player_housing/new/exp08_withered_lands_combine_flag_freeport_hanging',1190),(18549,18549,'staticobjects/_exp08/player_housing/new/exp08_withered_lands_combine_flag_gorowyn',1190),(18550,18550,'staticobjects/_exp08/player_housing/new/exp08_withered_lands_combine_flag_gorowyn_hanging',1190),(18551,18551,'staticobjects/_exp08/player_housing/new/exp08_withered_lands_combine_flag_halas',1190),(18552,18552,'staticobjects/_exp08/player_housing/new/exp08_withered_lands_combine_flag_halas_hanging',1190),(18553,18553,'staticobjects/_exp08/player_housing/new/exp08_withered_lands_combine_flag_kelethin',1190),(18554,18554,'staticobjects/_exp08/player_housing/new/exp08_withered_lands_combine_flag_kelethin_hanging',1190),(18555,18555,'staticobjects/_exp08/player_housing/new/exp08_withered_lands_combine_flag_neriak',1190),(18556,18556,'staticobjects/_exp08/player_housing/new/exp08_withered_lands_combine_flag_neriak_hanging',1190),(18557,18557,'staticobjects/_exp08/player_housing/new/exp08_withered_lands_combine_flag_qeynos',1190),(18558,18558,'staticobjects/_exp08/player_housing/new/exp08_withered_lands_combine_flag_qeynos_hanging',1190),(18559,18559,'staticobjects/_exp08/player_housing/new/exp08_withered_lands_combine_grave',1190),(18560,18560,'staticobjects/_exp08/player_housing/new/exp08_withered_lands_combine_gravestone_01',1190),(18561,18561,'staticobjects/_exp08/player_housing/new/exp08_withered_lands_combine_gravestone_02',1190),(18562,18562,'staticobjects/_exp08/player_housing/new/exp08_withered_lands_combine_gravestone_03',1190),(18563,18563,'staticobjects/_exp08/player_housing/new/exp08_withered_lands_combine_gravestone_04',1190),(18564,18564,'staticobjects/_exp08/player_housing/new/exp08_withered_lands_combine_gravestone_05',1190),(18565,18565,'staticobjects/_exp08/player_housing/new/exp08_withered_lands_combine_gravestone_06',1190),(18566,18566,'staticobjects/_exp08/player_housing/new/exp08_withered_lands_combine_jewelry_box',1190),(18567,18567,'staticobjects/_exp08/player_housing/new/exp08_withered_lands_combine_map',1190),(18568,18568,'staticobjects/_exp08/player_housing/new/exp08_withered_lands_combine_nightstand',1190),(18569,18569,'staticobjects/_exp08/player_housing/new/exp08_withered_lands_combine_rug_01',1190),(18570,18570,'staticobjects/_exp08/player_housing/new/exp08_withered_lands_combine_rug_02',1190),(18571,18571,'staticobjects/_exp08/player_housing/new/exp08_withered_lands_combine_rug_03',1190),(18572,18572,'staticobjects/_exp08/player_housing/new/exp08_withered_lands_combine_rug_04',1190),(18573,18573,'staticobjects/_exp08/player_housing/new/exp08_withered_lands_combine_rug_05',1190),(18574,18574,'staticobjects/_exp08/player_housing/new/exp08_withered_lands_combine_rug_06',1190),(18575,18575,'staticobjects/_exp08/player_housing/new/exp08_withered_lands_combine_stage',1190),(18576,18576,'staticobjects/_exp08/player_housing/new/exp08_withered_lands_combine_stairs',1190),(18577,18577,'staticobjects/_exp08/player_housing/new/exp08_withered_lands_combine_stool',1190),(18578,18578,'staticobjects/_exp08/player_housing/new/exp08_withered_lands_combine_table',1190),(18579,18579,'accessories/wearable_items/cloak/exp09/cloak_springtime_blue',1190),(18580,18580,'accessories/wearable_items/cloak/exp09/cloak_springwrap_gold',1190),(18581,18581,'accessories/wearable_items/cloak/exp09/cloak_springwrap_green',1190),(18582,18582,'accessories/wearable_items/cloak/exp09/cloak_springwrap_purp',1190),(18583,18583,'accessories/wearable_items/cloak/exp09/cloak_springwrap_red',1190),(18584,18584,'accessories/wearable_items/cloak/exp09/cloak_springwrap_shadow',1190),(18585,18585,'staticobjects/_exp08/player_housing/wl_draconic_spire_platform_dpo',1190),(18586,18586,'ec/pc/human/human_male_voicetest',1190),(18587,18587,'_exp08/objects/holgresh_head_on_pike',1190),(18588,18588,'staticobjects/tcg/tcg_tinkered_box_blue_button',1190),(18589,18589,'staticobjects/tcg/tcg_tinkered_box_red_button2',1190),(18590,18590,'_exp08/objects/combine_wagon_01',1190),(18591,18591,'_exp08/objects/combine_wagon_nowheel_01',1190),(18592,18592,'_exp08/objects/combine_wagon_wheel_01',1190),(18593,18593,'staticobjects/guildhall/trophies/floor_dozekar_the_ancient',1190),(18594,18594,'staticobjects/guildhall/trophies/floor_sevalak_of_storms',1190),(18595,18595,'staticobjects/guildhall/trophies/floor_vyskudra_the_ancient',1190),(18596,18596,'_exp08/objects/wl_hol_evil_totem',1190),(18597,18597,'_exp08/characters/monsters/dragon_made_golem/dragon_made_golem_crystaline',1190),(18598,18598,'staticobjects/guildhall/trophies/floor_dozekar_the_ancient_fx',1190),(18599,18599,'_exp09/objects/sleepers_tomb/sleepers_tomb_oblisque02',1190),(18600,18600,'accessories/wearable_items/_exp08/antonican_guard/chain/chest',1190),(18601,18601,'accessories/wearable_items/_exp08/antonican_guard/chain/feet',1190),(18602,18602,'staticobjects/housing_portal_objects/vision_home_enchanted01',1190),(18603,18603,'staticobjects/housing_portal_objects/vision_home_citadel01',1190),(18604,18604,'accessories/wearable_items/_exp08/highelf_heritage_armor/snapons/shoulder_armband_female_right_and_left',1190),(18605,18605,'accessories/wearable_items/_exp08/highelf_heritage_armor/snapons/shoulder_armband_female_left',1190),(18606,18606,'staticobjects/_exp08/player_housing/new/exp08_skyshrine_objects01_statue03_gov01_mable_dpo',1190),(18607,18607,'accessories/wearable_items/_exp09/antonican_faction_armor/robe/pauldron_left',1190),(18608,18608,'accessories/wearable_items/_exp09/antonican_faction_armor/robe/pauldron_right',1190),(18609,18609,'accessories/wearable_items/_exp09/antonican_faction_armor/robe/skirt',1190),(18610,18610,'accessories/wearable_items/_exp09/celestial_watch/chest',1190),(18611,18611,'accessories/wearable_items/_exp09/celestial_watch/feet',1190),(18612,18612,'accessories/wearable_items/_exp09/celestial_watch/forearms',1190),(18613,18613,'accessories/wearable_items/_exp09/celestial_watch/hands',1190),(18614,18614,'accessories/wearable_items/_exp09/celestial_watch/head',1190),(18615,18615,'accessories/wearable_items/_exp09/celestial_watch/legs',1190),(18616,18616,'accessories/wearable_items/_exp09/celestial_watch/legs_noskirt',1190),(18617,18617,'accessories/wearable_items/_exp09/celestial_watch/pauldron_left_celestial_watch',1190),(18618,18618,'accessories/wearable_items/_exp09/celestial_watch/pauldron_right_celestial_watch',1190),(18619,18619,'accessories/wearable_items/_exp09/celestial_watch/shoulders',1190),(18620,18620,'accessories/wearable_items/_exp09/celestial_watch/shoulders_epic',1190),(18621,18621,'accessories/wearable_items/_exp09/celestial_watch/skirt',1190),(18622,18622,'accessories/wearable_items/_exp09/celestial_watch/robe_head/head_hood',1190),(18623,18623,'accessories/wearable_items/cloak/exp09/cloak_celestial_watch',1190),(18624,18624,'accessories/wieldable_items/shields/exp09/shield_celestial_watch',1190),(18625,18625,'accessories/wearable_items/_exp08/rogue_whisperweave/chest_1',1190),(18626,18626,'accessories/wearable_items/_exp08/rogue_whisperweave/hands_1',1190),(18627,18627,'accessories/wearable_items/_exp08/rogue_whisperweave/legs_1',1190),(18628,18628,'accessories/wearable_items/_exp08/antonican_guard/chain/forearms',1190),(18629,18629,'accessories/wearable_items/_exp08/antonican_guard/chain/hands',1190),(18630,18630,'accessories/wearable_items/_exp08/antonican_guard/chain/head',1190),(18631,18631,'accessories/wearable_items/_exp08/antonican_guard/chain/legs',1190),(18632,18632,'accessories/wearable_items/_exp08/antonican_guard/chain/legs_noskirt',1190),(18633,18633,'accessories/wearable_items/_exp08/antonican_guard/chain/shoulders',1190),(18634,18634,'accessories/wearable_items/_exp08/antonican_guard/chain/shoulders_nopauldrons',1190),(18635,18635,'accessories/wearable_items/_exp08/antonican_guard/chain/skirt',1190),(18636,18636,'accessories/wearable_items/_exp08/antonican_guard/leather_heavycloth/belt/skirt 2',1190),(18637,18637,'accessories/wearable_items/_exp08/antonican_guard/leather_heavycloth/belt/skirt',1190),(18638,18638,'accessories/wearable_items/_exp08/antonican_guard/leather_heavycloth/chest',1190),(18639,18639,'accessories/wearable_items/_exp08/antonican_guard/leather_heavycloth/feet',1190),(18640,18640,'accessories/wearable_items/_exp08/antonican_guard/leather_heavycloth/hands',1190),(18641,18641,'accessories/wearable_items/_exp08/antonican_guard/leather_heavycloth/head_hood',1190),(18642,18642,'accessories/wearable_items/_exp08/antonican_guard/leather_heavycloth/legs',1190),(18643,18643,'accessories/wearable_items/_exp08/antonican_guard/leather_heavycloth/shoulders',1190),(18644,18644,'accessories/wearable_items/_exp08/antonican_guard/leather_heavycloth/shoulders_nopauldrons',1190),(18645,18645,'accessories/wearable_items/_exp08/antonican_guard/leather_heavycloth/skirt',1190),(18646,18646,'accessories/wearable_items/_exp08/antonican_guard/robe/chest',1190),(18647,18647,'accessories/wearable_items/_exp08/antonican_guard/robe/chest_pauldrons',1190),(18648,18648,'accessories/wearable_items/_exp08/antonican_guard/robe/feet',1190),(18649,18649,'accessories/wearable_items/_exp08/antonican_guard/robe/hands',1190),(18650,18650,'accessories/wearable_items/_exp08/antonican_guard/robe/head_collar',1190),(18651,18651,'accessories/wearable_items/_exp08/antonican_guard/robe/head_collar_flared',1190),(18652,18652,'accessories/wearable_items/_exp08/antonican_guard/robe/head_hood',1190),(18653,18653,'accessories/wearable_items/_exp08/antonican_guard/robe/pants',1190),(18654,18654,'accessories/wearable_items/_exp08/antonican_guard/robe/skirt',1190),(18655,18655,'accessories/wearable_items/_exp08/antonican_guard/snapons_extras/head_crest',1190),(18656,18656,'accessories/wearable_items/_exp08/antonican_guard/snapons_extras/head_topknot',1190),(18657,18657,'accessories/wearable_items/_exp08/antonican_guard/snapons_extras/qeynos_pauldron_light_left',1190),(18658,18658,'accessories/wearable_items/_exp08/antonican_guard/snapons_extras/qeynos_pauldron_light_right',1190),(18659,18659,'accessories/wearable_items/_exp08/antonican_guard/snapons_extras/qeynos_vanguard_pauldron_chain_left',1190),(18660,18660,'accessories/wearable_items/_exp08/antonican_guard/snapons_extras/qeynos_vanguard_pauldron_chain_right',1190),(18661,18661,'accessories/wearable_items/_exp08/antonican_guard/snapons_extras/qeynos_pauldron_robe_right',1190),(18662,18662,'accessories/wearable_items/_exp08/antonican_guard/snapons_extras/qeynos_pauldron_robe_left',1190),(18663,18663,'accessories/wearable_items/_exp08/antonican_guard/snapons_extras/qeynos_vanguard_pauldron_sm_left',1190),(18664,18664,'accessories/wearable_items/_exp08/antonican_guard/snapons_extras/qeynos_vanguard_pauldron_sm_right',1190),(18665,18665,'accessories/wearable_items/_exp08/antonican_guard/snapons_extras/qeynos_vanguard_shinguard_left',1190),(18666,18666,'accessories/wearable_items/_exp08/antonican_guard/snapons_extras/qeynos_vanguard_shinguard_right',1190),(18667,18667,'accessories/wearable_items/_exp08/antonican_guard/snapons_extras/qeynos_vanguard_bracer_left',1190),(18668,18668,'accessories/wearable_items/_exp08/antonican_guard/snapons_extras/qeynos_vanguard_bracer_right',1190),(18669,18669,'accessories/wearable_items/_exp08/antonican_guard/snapons_extras/qeynos_vanguard_pauldron2_left',1190),(18670,18670,'accessories/wearable_items/_exp08/antonican_guard/snapons_extras/qeynos_vanguard_pauldron2_right',1190),(18671,18671,'accessories/wearable_items/_exp08/antonican_guard/snapons_extras/qeynos_vanguard_pauldron_left',1190),(18672,18672,'accessories/wearable_items/_exp08/antonican_guard/snapons_extras/qeynos_vanguard_pauldron_right',1190),(18673,18673,'accessories/wearable_items/_exp08/antonican_guard/vanguard/chest',1190),(18674,18674,'accessories/wearable_items/_exp08/antonican_guard/vanguard/feet',1190),(18675,18675,'accessories/wearable_items/_exp08/antonican_guard/vanguard/forearms',1190),(18676,18676,'accessories/wearable_items/_exp08/antonican_guard/vanguard/hands',1190),(18677,18677,'accessories/wearable_items/_exp08/antonican_guard/vanguard/head',1190),(18678,18678,'accessories/wearable_items/_exp08/antonican_guard/vanguard/head_epic',1190),(18679,18679,'accessories/wearable_items/_exp08/antonican_guard/vanguard/head_epic_crest',1190),(18680,18680,'accessories/wearable_items/_exp08/antonican_guard/vanguard/head_epic_topknot',1190),(18681,18681,'accessories/wearable_items/_exp08/antonican_guard/vanguard/left',1190),(18682,18682,'accessories/wearable_items/_exp08/antonican_guard/vanguard/legs',1190),(18683,18683,'accessories/wearable_items/_exp08/antonican_guard/vanguard/legs_epic',1190),(18684,18684,'accessories/wearable_items/_exp08/antonican_guard/vanguard/legs_noskirt',1190),(18685,18685,'accessories/wearable_items/_exp08/antonican_guard/vanguard/right',1190),(18686,18686,'accessories/wearable_items/_exp08/antonican_guard/vanguard/shoulders',1190),(18687,18687,'accessories/wearable_items/_exp08/antonican_guard/vanguard/shoulders_epic',1190),(18688,18688,'accessories/wearable_items/_exp08/antonican_guard/vanguard/shoulders_nopauldron',1190),(18689,18689,'accessories/wearable_items/_exp08/antonican_guard/vanguard/skirt',1190),(18690,18690,'accessories/wearable_items/cloak/exp08/cloak_antonican_guard_leather',1190),(18691,18691,'ec/npc/antonia_2012_paladin',1190),(18692,18692,'ec/npc/antonia_2012_regal',1190),(18693,18693,'creatures/mounts/griffin_classic/griffin_classic',1190),(18694,18694,'accessories/wearable_items/cloak/exp08/cloak_antonia_2012',1190),(18695,18695,'accessories/wieldable_items/shields/exp08/exp08_shield_antonia_paladin',1190),(18696,18696,'accessories/wieldable_items/weapons/exp08/1h_sword/exp08_1hs_sword_antonia_paladin',1190),(18697,18697,'accessories/wearable_items/_exp09/qeynos_faction/vanguard/chest',1190),(18698,18698,'accessories/wearable_items/_exp09/qeynos_faction/vanguard/epic_pauldron_left',1190),(18699,18699,'accessories/wearable_items/_exp09/qeynos_faction/vanguard/epic_pauldron_right',1190),(18700,18700,'accessories/wearable_items/_exp09/qeynos_faction/vanguard/feet',1190),(18701,18701,'accessories/wearable_items/_exp09/qeynos_faction/vanguard/forearms',1190),(18702,18702,'accessories/wearable_items/_exp09/qeynos_faction/vanguard/hands',1190),(18703,18703,'accessories/wearable_items/_exp09/qeynos_faction/vanguard/head',1190),(18704,18704,'accessories/wearable_items/_exp09/qeynos_faction/vanguard/head_epic',1190),(18705,18705,'accessories/wearable_items/_exp09/qeynos_faction/vanguard/legs',1190),(18706,18706,'accessories/wearable_items/_exp09/qeynos_faction/vanguard/legs_noskirt',1190),(18707,18707,'accessories/wearable_items/_exp09/qeynos_faction/vanguard/right',1190),(18708,18708,'accessories/wearable_items/_exp09/qeynos_faction/vanguard/shoulders',1190),(18709,18709,'accessories/wearable_items/_exp09/qeynos_faction/vanguard/shoulders_epic',1190),(18710,18710,'accessories/wearable_items/_exp09/qeynos_faction/vanguard/shoulders_nopauldrons',1190),(18711,18711,'accessories/wearable_items/_exp09/qeynos_faction/vanguard/skirt',1190),(18712,18712,'accessories/wearable_items/cloak/exp09/cloak_qeynos_faction',1190),(18713,18713,'accessories/wieldable_items/weapons/exp08/1h_crush/mace_antonican_guard',1190),(18714,18714,'accessories/wieldable_items/weapons/exp08/1h_crush/exp08_wand_antonican_guard',1190),(18715,18715,'accessories/wieldable_items/weapons/exp08/1h_crush/hammer_antonican_guard',1190),(18716,18716,'accessories/wieldable_items/weapons/exp08/1h_pierce/exp08_dagger_hunter_antonican_guard',1190),(18717,18717,'accessories/wieldable_items/weapons/exp08/1h_pierce/exp08_dagger_wizard_antonican_guard',1190),(18718,18718,'accessories/wieldable_items/weapons/exp08/1h_sword/exp08_1hsword_antonican_guard',1190),(18719,18719,'accessories/wieldable_items/weapons/exp08/1h_sword/exp08_1hsword_short_antonican_guard',1190),(18720,18720,'accessories/wieldable_items/weapons/exp08/2h_sword/exp08_2hsword_antonican_guard',1190),(18721,18721,'accessories/wieldable_items/weapons/exp08/bow/longbow_antonican_guard',1190),(18722,18722,'accessories/wieldable_items/weapons/exp08/staff/halberd_antonican_guard',1190),(18723,18723,'accessories/wieldable_items/shields/exp08/exp08_shield_kite_antonican_guard',1190),(18724,18724,'creatures/mounts/lion_winged/lion_winged_base',1190),(18725,18725,'_exp09/characters/tool_users/dracurion_palladin/dracurion_palladin_chain_pc_illusion',1190),(18726,18726,'_exp09/characters/tool_users/dracurion_palladin/dracurion_palladin_chain_var1_pc_illusion',1190),(18727,18727,'_exp09/characters/tool_users/dracurion_palladin/dracurion_palladin_horns_pc_illusion',1190),(18728,18728,'_exp09/characters/tool_users/dracurion_palladin/dracurion_palladin_horns_var1_pc_illusion',1190),(18729,18729,'_exp09/characters/tool_users/dracurion_palladin/dracurion_palladin_medallion_pc_illusion',1190),(18730,18730,'_exp09/characters/tool_users/dracurion_palladin/dracurion_palladin_medallion_var1_pc_illusion',1190),(18731,18731,'_exp09/characters/tool_users/dracurion_palladin/dracurion_palladin_pc_illusion',1190),(18732,18732,'_exp09/characters/tool_users/dracurion_palladin/dracurion_palladin1_pc_illusion',1190),(18733,18733,'_exp09/characters/tool_users/dracurion_palladin/dracurion_palladin2_pc_illusion',1190),(18734,18734,'_exp09/characters/tool_users/dracurion_palladin/dracurion_palladin3_pc_illusion',1190),(18735,18735,'_exp09/characters/tool_users/dracurion_palladin/dracurion_palladin4_pc_illusion',1190),(18736,18736,'_exp09/characters/tool_users/dracurion_shadowknight/dracurion_shadowknight_a_pc_illusion',1190),(18737,18737,'_exp09/characters/tool_users/dracurion_shadowknight/dracurion_shadowknight_b_pc_illusion',1190),(18738,18738,'_exp09/characters/tool_users/dracurion_shadowknight/dracurion_shadowknight_pc_illusion',1190),(18739,18739,'_exp09/characters/tool_users/dracurion_shadowknight/dracurion_shadowknight1_pc_illusion',1190),(18740,18740,'_exp09/characters/tool_users/dracurion_shadowknight/dracurion_shadowknight2_pc_illusion',1190),(18741,18741,'_exp09/characters/tool_users/dracurion_shadowknight/dracurion_shadowknight3_pc_illusion',1190),(18742,18742,'_exp09/characters/tool_users/dracurion_shadowknight/dracurion_shadowknight4_pc_illusion',1190),(18743,18743,'creatures/mounts/bird_mount/evil/bird_evil_base',1190),(18744,18744,'accessories/wieldable_items/shields/exp08/exp08_shield_round_circleoften',1190),(18745,18745,'accessories/wearable_items/cloak/exp08/cloak_circleoften_square',1190),(18746,18746,'accessories/wearable_items/cloak/exp08/cloak_circleoften_scallop',1190),(18747,18747,'staticobjects/flora/dpo_gf_flora_fae_flower_bud01',1190),(18748,18748,'_exp09/characters/monsters/timber_wolf_corrupted/timber_wolf_shadowed',1190),(18749,18749,'staticobjects/debris/gnoll_burrowpile01',1190),(18750,18750,'_exp08/characters/monsters/dragon_made_golem/dragon_made_golem_crystaline_02',1190),(18751,18751,'_exp08/characters/monsters/dragon_made_golem/dragon_made_golem_crystaline_03',1190),(18752,18752,'_exp09/characters/tool_users/armored_gnoll/armored_gnoll',1190),(18753,18753,'_exp09/characters/tool_users/armored_gnoll/armored_gnoll_gold',1190),(18754,18754,'_exp09/characters/monsters/skyshrine_drake/skyshrine_drake_spirit_blue',1190),(18755,18755,'_exp09/characters/tool_users/baelon/baelon',1190),(18756,18756,'_exp08/characters/tool_users/qeynos_guard/qeynos_guard_female',1190),(18757,18757,'_exp08/characters/tool_users/qeynos_guard/qeynos_guard_male',1190),(18758,18758,'_exp09/characters/monsters/wyvern_sleepers_tomb/wyvern_sleepers_tomb',1190),(18759,18759,'creatures/mounts/pegasus_mount/pegasus_mount_epic_qeynos',1190),(18760,18760,'_exp08/characters/monsters/gargoyle_sleeper/gargoyle_sleeper',1190),(18761,18761,'projectiles/spell_vial',1190),(18762,18762,'_exp08/characters/tool_users/child_human/child_human_male',1190),(18763,18763,'_exp08/characters/tool_users/lich_spectre/lich_spectre',1190),(18764,18764,'_exp08/characters/monsters/dragon_made_golem/dragon_made_golem_crystaline_red',1190),(18765,18765,'creatures/mounts/wyvern_mount/wyvern_mount_golden',1190),(18766,18766,'creatures/mounts/wyvern_mount/wyvern_mount_green',1190),(18767,18767,'creatures/mounts/wyvern_mount/wyvern_mount_red',1190),(18768,18768,'creatures/mounts/wyvern_mount/wyvern_mount_shadow',1190),(18769,18769,'accessories/wearable_items/_exp09/tunarian_alliance/leather/chest',1190),(18770,18770,'accessories/wearable_items/_exp09/tunarian_alliance/leather/feet',1190),(18771,18771,'accessories/wearable_items/_exp09/tunarian_alliance/leather/forearms',1190),(18772,18772,'accessories/wearable_items/_exp09/tunarian_alliance/leather/hands',1190),(18773,18773,'accessories/wearable_items/_exp09/tunarian_alliance/leather/head',1190),(18774,18774,'accessories/wearable_items/_exp09/tunarian_alliance/leather/legs',1190),(18775,18775,'accessories/wearable_items/_exp09/tunarian_alliance/leather/shoulders',1190),(18776,18776,'accessories/wearable_items/_exp09/tunarian_alliance/leather/skirt',1190),(18777,18777,'accessories/wearable_items/cloak/exp09/cloak_tunarian_alliance_leather',1190),(18778,18778,'_exp09/characters/monsters/beetle/beetle_grappler_clockwork_corroded',1190),(18779,18779,'_exp09/characters/monsters/beetle/beetle_hercules_clockwork_corroded',1190),(18780,18780,'_exp09/characters/monsters/beetle/beetle_lobber_clockwork_corroded',1190),(18781,18781,'_exp09/characters/monsters/beetle/beetle_original_clockwork_corroded',1190),(18782,18782,'_exp09/characters/monsters/beetle_groundattack/beetle_grappler_clockwork_corroded',1190),(18783,18783,'_exp09/characters/monsters/beetle_groundattack/beetle_hercules_clockwork_corroded',1190),(18784,18784,'_exp09/characters/monsters/beetle_groundattack/beetle_lobber_clockwork_corroded',1190),(18785,18785,'_exp09/characters/monsters/beetle_groundattack/beetle_original_clockwork_corroded',1190),(18786,18786,'_exp08/characters/tool_users/lich_undead/lich_undead',1190),(18787,18787,'_exp09/characters/tool_users/halfelf_child_female/halfelf_child_female',1190),(18788,18788,'_exp09/characters/tool_users/halfelf_child_male/halfelf_child_male',1190),(18789,18789,'accessories/npc_wearables/halfelf_children/halfelf_child_hair_01',1190),(18790,18790,'accessories/npc_wearables/halfelf_children/halfelf_child_hair_02',1190),(18791,18791,'accessories/npc_wearables/halfelf_children/halfelf_child_hair_03',1190),(18792,18792,'accessories/npc_wearables/halfelf_children/halfelf_child_hair_male_01',1190),(18793,18793,'accessories/npc_wearables/halfelf_children/halfelf_child_hair_male_02',1190),(18794,18794,'accessories/npc_wearables/halfelf_children/halfelf_child_hair_male_03',1190),(18795,18795,'_exp09/characters/monsters/drake_sleepers_tomb/drake_sleepers_tomb',1190),(18796,18796,'creatures/monsters/mouth_eye_blob',1190),(18797,18797,'ec/npc/antonia_2012_beggar',1190),(18798,18798,'staticobjects/flora/dpo_slove02_lilypad_small01',1190),(18799,18799,'_exp08/characters/tool_users/banshee_sleeper/banshee_sleeper',1190),(18800,18800,'accessories/wearable_items/_exp08/arasai_heritage_armor/shoulders',1190),(18801,18801,'accessories/wearable_items/_exp08/antonican_guard/vanguard/hands_epic',1190),(18802,18802,'staticobjects/qeynos/armor_dummy_antonia_2012',1190),(18803,18803,'accessories/wearable_items/_exp08/darklight_armor/plate/chest',1190),(18804,18804,'accessories/wearable_items/_exp08/darklight_armor/plate/feet',1190),(18805,18805,'accessories/wearable_items/_exp08/darklight_armor/plate/forearms',1190),(18806,18806,'accessories/wearable_items/_exp08/darklight_armor/plate/hands',1190),(18807,18807,'accessories/wearable_items/_exp08/darklight_armor/plate/head',1190),(18808,18808,'accessories/wearable_items/_exp08/darklight_armor/plate/head_epic',1190),(18809,18809,'accessories/wearable_items/_exp08/darklight_armor/plate/legs',1190),(18810,18810,'accessories/wearable_items/_exp08/darklight_armor/plate/shoulders',1190),(18811,18811,'accessories/wearable_items/_exp08/darklight_armor/plate/shoulders_epic',1190),(18812,18812,'accessories/wearable_items/_exp08/darklight_armor/plate/snap_ons/pauldrons_left',1190),(18813,18813,'accessories/wearable_items/_exp08/darklight_armor/plate/snap_ons/pauldrons_right',1190),(18814,18814,'staticobjects/soe_wallet/elddar_treehouse_treehouse_dpo',1190),(18815,18815,'accessories/wearable_items/_exp09/celestial_watch/chest_blue_gold/chest',1190),(18816,18816,'accessories/wearable_items/_exp09/celestial_watch/chest_blue_gold/feet',1190),(18817,18817,'accessories/wearable_items/_exp09/celestial_watch/chest_blue_gold/forearms',1190),(18818,18818,'accessories/wearable_items/_exp09/celestial_watch/chest_blue_gold/hands',1190),(18819,18819,'accessories/wearable_items/_exp09/celestial_watch/chest_blue_gold/head',1190),(18820,18820,'accessories/wearable_items/_exp09/celestial_watch/chest_blue_gold/legs',1190),(18821,18821,'accessories/wearable_items/_exp09/celestial_watch/chest_blue_gold/legs_noskirt',1190),(18822,18822,'accessories/wearable_items/_exp09/celestial_watch/chest_blue_gold/pauldron_left_celestial_watch',1190),(18823,18823,'accessories/wearable_items/_exp09/celestial_watch/chest_blue_gold/pauldron_right_celestial_watch',1190),(18824,18824,'accessories/wearable_items/_exp09/celestial_watch/chest_blue_gold/shoulders',1190),(18825,18825,'accessories/wearable_items/_exp09/celestial_watch/chest_blue_gold/shoulders_epic',1190),(18826,18826,'accessories/wearable_items/_exp09/celestial_watch/chest_blue_gold/skirt',1190),(18827,18827,'accessories/wearable_items/_exp09/celestial_watch/robe_head_blue_gold/head',1190),(18828,18828,'accessories/wieldable_items/weapons/exp08/1h_sword/exp08_1h_scythe_lich_spectre',1190),(18829,18829,'accessories/wearable_items/_exp08/darklight_armor/heavycloth_leather/chest',1190),(18830,18830,'accessories/wearable_items/_exp08/darklight_armor/heavycloth_leather/feet',1190),(18831,18831,'accessories/wearable_items/_exp08/darklight_armor/heavycloth_leather/hands',1190),(18832,18832,'accessories/wearable_items/_exp08/darklight_armor/heavycloth_leather/head',1190),(18833,18833,'accessories/wearable_items/_exp08/darklight_armor/heavycloth_leather/legs',1190),(18834,18834,'accessories/wearable_items/_exp08/darklight_armor/heavycloth_leather/shoulders',1190),(18835,18835,'accessories/wearable_items/_exp08/darklight_armor/heavycloth_leather/skirt',1190),(18836,18836,'accessories/wearable_items/_exp08/darklight_armor/heavycloth_leather/belt/skirt 2',1190),(18837,18837,'accessories/wearable_items/_exp08/darklight_armor/heavycloth_leather/belt/skirt',1190),(18838,18838,'accessories/wearable_items/_exp08/darklight_armor/heavycloth_leather/head/head',1190),(18839,18839,'accessories/wearable_items/_exp08/darklight_armor/vanguard/chest',1190),(18840,18840,'accessories/wearable_items/_exp08/darklight_armor/vanguard/feet',1190),(18841,18841,'accessories/wearable_items/_exp08/darklight_armor/vanguard/forearms',1190),(18842,18842,'accessories/wearable_items/_exp08/darklight_armor/vanguard/hands',1190),(18843,18843,'accessories/wearable_items/_exp08/darklight_armor/vanguard/head',1190),(18844,18844,'accessories/wearable_items/_exp08/darklight_armor/vanguard/head_epic',1190),(18845,18845,'accessories/wearable_items/_exp08/darklight_armor/vanguard/left',1190),(18846,18846,'accessories/wearable_items/_exp08/darklight_armor/vanguard/legs',1190),(18847,18847,'accessories/wearable_items/_exp08/darklight_armor/vanguard/legs_noskirt',1190),(18848,18848,'accessories/wearable_items/_exp08/darklight_armor/vanguard/right',1190),(18849,18849,'accessories/wearable_items/_exp08/darklight_armor/vanguard/shoulders',1190),(18850,18850,'accessories/wearable_items/_exp08/darklight_armor/vanguard/shoulders_epic',1190),(18851,18851,'accessories/wearable_items/_exp08/darklight_armor/vanguard/shoulders_nopauldrons',1190),(18852,18852,'accessories/wearable_items/_exp08/darklight_armor/vanguard/skirt',1190),(18853,18853,'accessories/wearable_items/_exp08/darklight_armor/vanguard/pauldrons/pauldron_left',1190),(18854,18854,'accessories/wearable_items/_exp08/darklight_armor/vanguard/pauldrons/pauldron_right',1190),(18855,18855,'accessories/wearable_items/_exp08/darklight_armor/vanguard/shadowknight_helm/head',1190),(18856,18856,'accessories/wearable_items/_exp08/darklight_armor/vanguard/shadowknight_helm/head_epic',1190),(18857,18857,'accessories/wearable_items/cloak/exp09/cloak_antonica_faction',1190),(18858,18858,'accessories/wearable_items/cloak/exp09/cloak_antonica_faction_incut',1190),(18859,18859,'accessories/wearable_items/cloak/exp09/cloak_antonica_faction_scallop',1190),(18860,18860,'accessories/wearable_items/cloak/exp09/cloak_antonica_faction_whole',1190),(18861,18861,'ec/npc/goblin_tophat',1190),(18862,18862,'_exp08/characters/tool_users/lich_undead/lich_undead_green',1190),(18863,18863,'_exp08/characters/tool_users/lich_undead/lich_undead_green_nofx',1190),(18864,18864,'ec/pc/human/human_male_2011/human_male_base',1190),(18865,18865,'_exp09/characters/tool_users/ethenere_npcs/darkelf_female_ethenere',1190),(18866,18866,'_exp09/characters/tool_users/ethenere_npcs/darkelf_male_ethenere',1190),(18867,18867,'_exp08/characters/tool_users/banshee_sleeper/banshee_sleeper_queen',1190),(18868,18868,'_exp08/characters/tool_users/bog_wraith/bog_wraith',1190),(18869,18869,'_exp08/characters/tool_users/bog_wraith/bog_wraith_chain',1190),(18870,18870,'_exp08/characters/tool_users/bog_wraith/bog_wraith_spectre',1190),(18871,18871,'accessories/wearable_items/_exp08/primal_velium/chain/chest',1190),(18872,18872,'accessories/wearable_items/_exp08/primal_velium/chain/feet',1190),(18873,18873,'accessories/wearable_items/_exp08/primal_velium/chain/forearms',1190),(18874,18874,'accessories/wearable_items/_exp08/primal_velium/chain/hands',1190),(18875,18875,'accessories/wearable_items/_exp08/primal_velium/chain/head',1190),(18876,18876,'accessories/wearable_items/_exp08/primal_velium/chain/legs',1190),(18877,18877,'accessories/wearable_items/_exp08/primal_velium/chain/legs_noskirt',1190),(18878,18878,'accessories/wearable_items/_exp08/primal_velium/chain/shoulders',1190),(18879,18879,'accessories/wearable_items/_exp08/primal_velium/chain/shoulders_epic',1190),(18880,18880,'accessories/wearable_items/_exp08/primal_velium/chain/skirt',1190),(18881,18881,'accessories/wearable_items/_exp08/primal_velium/heavycloth/chest',1190),(18882,18882,'accessories/wearable_items/_exp08/primal_velium/heavycloth/feet',1190),(18883,18883,'accessories/wearable_items/_exp08/primal_velium/heavycloth/hands',1190),(18884,18884,'accessories/wearable_items/_exp08/primal_velium/heavycloth/head',1190),(18885,18885,'accessories/wearable_items/_exp08/primal_velium/heavycloth/legs',1190),(18886,18886,'accessories/wearable_items/_exp08/primal_velium/heavycloth/shoulders',1190),(18887,18887,'accessories/wearable_items/_exp08/primal_velium/heavycloth/shoulders_epic',1190),(18888,18888,'accessories/wearable_items/_exp08/primal_velium/heavycloth/skirt',1190),(18889,18889,'accessories/wearable_items/_exp08/primal_velium/heavycloth/belt/skirt 2',1190),(18890,18890,'accessories/wearable_items/_exp08/primal_velium/heavycloth/belt/skirt',1190),(18891,18891,'accessories/wearable_items/_exp08/primal_velium/leather/chest',1190),(18892,18892,'accessories/wearable_items/_exp08/primal_velium/leather/feet',1190),(18893,18893,'accessories/wearable_items/_exp08/primal_velium/leather/forearms',1190),(18894,18894,'accessories/wearable_items/_exp08/primal_velium/leather/hands',1190),(18895,18895,'accessories/wearable_items/_exp08/primal_velium/leather/head',1190),(18896,18896,'accessories/wearable_items/_exp08/primal_velium/leather/legs',1190),(18897,18897,'accessories/wearable_items/_exp08/primal_velium/leather/legs_noskirt',1190),(18898,18898,'accessories/wearable_items/_exp08/primal_velium/leather/shoulders',1190),(18899,18899,'accessories/wearable_items/_exp08/primal_velium/leather/shoulders_epic',1190),(18900,18900,'accessories/wearable_items/_exp08/primal_velium/leather/skirt',1190),(18901,18901,'accessories/wearable_items/_exp08/primal_velium/robe/chest',1190),(18902,18902,'accessories/wearable_items/_exp08/primal_velium/robe/chest_epic',1190),(18903,18903,'accessories/wearable_items/_exp08/primal_velium/robe/feet',1190),(18904,18904,'accessories/wearable_items/_exp08/primal_velium/robe/hands',1190),(18905,18905,'accessories/wearable_items/_exp08/primal_velium/robe/head',1190),(18906,18906,'accessories/wearable_items/_exp08/primal_velium/robe/pants',1190),(18907,18907,'accessories/wearable_items/_exp08/primal_velium/robe/skirt',1190),(18908,18908,'accessories/wearable_items/_exp08/primal_velium/vanguard/chest',1190),(18909,18909,'accessories/wearable_items/_exp08/primal_velium/vanguard/feet',1190),(18910,18910,'accessories/wearable_items/_exp08/primal_velium/vanguard/forearms',1190),(18911,18911,'accessories/wearable_items/_exp08/primal_velium/vanguard/hands',1190),(18912,18912,'accessories/wearable_items/_exp08/primal_velium/vanguard/hands_epic',1190),(18913,18913,'accessories/wearable_items/_exp08/primal_velium/vanguard/head',1190),(18914,18914,'accessories/wearable_items/_exp08/primal_velium/vanguard/head_epic',1190),(18915,18915,'accessories/wearable_items/_exp08/primal_velium/vanguard/left',1190),(18916,18916,'accessories/wearable_items/_exp08/primal_velium/vanguard/legs',1190),(18917,18917,'accessories/wearable_items/_exp08/primal_velium/vanguard/legs_epic',1190),(18918,18918,'accessories/wearable_items/_exp08/primal_velium/vanguard/legs_noskirt',1190),(18919,18919,'accessories/wearable_items/_exp08/primal_velium/vanguard/pauldron2_left',1190),(18920,18920,'accessories/wearable_items/_exp08/primal_velium/vanguard/right',1190),(18921,18921,'accessories/wearable_items/_exp08/primal_velium/vanguard/shoulders',1190),(18922,18922,'accessories/wearable_items/_exp08/primal_velium/vanguard/shoulders_epic',1190),(18923,18923,'accessories/wearable_items/_exp08/primal_velium/vanguard/shoulders_nopauldrons',1190),(18924,18924,'accessories/wearable_items/_exp08/primal_velium/vanguard/skirt',1190),(18925,18925,'accessories/wearable_items/_exp08/primal_velium/vanguard/snapons/bracer_left',1190),(18926,18926,'accessories/wearable_items/_exp08/primal_velium/vanguard/snapons/bracer_right',1190),(18927,18927,'accessories/wearable_items/_exp08/primal_velium/vanguard/snapons/pauldron_leather_left',1190),(18928,18928,'accessories/wearable_items/_exp08/primal_velium/vanguard/snapons/pauldron_leather_right',1190),(18929,18929,'accessories/wearable_items/_exp08/primal_velium/vanguard/snapons/pauldron_left',1190),(18930,18930,'accessories/wearable_items/_exp08/primal_velium/vanguard/snapons/pauldron_light_left',1190),(18931,18931,'accessories/wearable_items/_exp08/primal_velium/vanguard/snapons/pauldron_light_right',1190),(18932,18932,'accessories/wearable_items/_exp08/primal_velium/vanguard/snapons/pauldron_right',1190),(18933,18933,'accessories/wearable_items/_exp08/primal_velium/vanguard/snapons/pauldron_right2',1190),(18934,18934,'accessories/wearable_items/_exp08/primal_velium/vanguard/snapons/pauldron2_left',1190),(18935,18935,'accessories/wearable_items/_exp08/primal_velium/vanguard/snapons/pauldron2_right',1190),(18936,18936,'accessories/wearable_items/_exp08/primal_velium/vanguard/snapons/shinguard_left',1190),(18937,18937,'accessories/wearable_items/_exp08/primal_velium/vanguard/snapons/shinguard_right',1190),(18938,18938,'ec/pc/darkelf/darkelf_male_2011',1190),(18939,18939,'_exp08/characters/pets/jackolantern/jackolantern',1190),(18940,18940,'accessories/wearable_items/cloak/exp08/cloak_primal_velium2_diamond',1190),(18941,18941,'accessories/wearable_items/cloak/exp08/cloak_primal_velium1_diamond',1190),(18942,18942,'accessories/wearable_items/cloak/exp08/cloak_primal_velium2',1190),(18943,18943,'accessories/wearable_items/cloak/exp08/cloak_primal_velium1',1190),(18944,18944,'projectiles/spell_lightning_ball',1190),(18945,18945,'_exp08/characters/monsters/kerafyrm/kerafyrm_trapped',1190),(18946,18946,'staticobjects/pictures/qeynos_painting_harbor01_dpo',1190),(18947,18947,'staticobjects/pictures/qeynos_painting01_dpo',1190),(18948,18948,'staticobjects/pictures/qeynos_painting02_dpo',1190),(18949,18949,'staticobjects/pictures/qeynos_painting03_dpo',1190),(18950,18950,'staticobjects/pictures/qeynos_painting04_dpo',1190),(18951,18951,'staticobjects/pictures/qeynos_painting05_dpo',1190),(18952,18952,'staticobjects/pictures/qeynos_painting06_dpo',1190),(18953,18953,'staticobjects/pictures/qeynos_painting07_dpo',1190),(18954,18954,'ec/pc/halfelf/halfelf_male_2011',1190),(18955,18955,'staticobjects/mailboxes/qnos_rev_mailbox01_dpo',1190),(18956,18956,'staticobjects/marinerbell/qnos_rev_mariners_bell01_all_dpo',1190),(18957,18957,'staticobjects/qeynos/qey_thunderfountain_dpo',1190),(18958,18958,'staticobjects/qeynos/qey_baylestatue_dpo',1190),(18959,18959,'staticobjects/qeynos/qey_castle_statue_dpo',1190),(18960,18960,'staticobjects/qeynos/qey_floating_torch_blue_dpo',1190),(18961,18961,'staticobjects/qeynos/qey_floating_torch_yellow_dpo',1190),(18962,18962,'staticobjects/qeynos/qey_lions_circle_counter_dpo',1190),(18963,18963,'staticobjects/qeynos/qey_lions_elbow_counter_dpo',1190),(18964,18964,'staticobjects/qeynos/qey_lions_straight_counter_dpo',1190),(18965,18965,'staticobjects/qeynos/qey_lionsmane_crest_dpo',1190),(18966,18966,'staticobjects/qeynos/qey_pennants01_dpo',1190),(18967,18967,'staticobjects/qeynos/qey_pennants02_dpo',1190),(18968,18968,'staticobjects/qeynos/qey_pennants03_dpo',1190),(18969,18969,'staticobjects/qeynos/qey_stadium_banner01_dpo',1190),(18970,18970,'staticobjects/qeynos/qey_stadium_banner02_dpo',1190),(18971,18971,'staticobjects/qeynos/qey_stadium_banner03_dpo',1190),(18972,18972,'ec/pc/darkelf/darkelf_female_2011',1190),(18973,18973,'ec/pc/highelf/highelf_male_2011',1190),(18974,18974,'ec/pc/halfelf/halfelf_female_2011',1190),(18975,18975,'staticobjects/_exp07/dru_drunder_sullon_idol02',1190),(18976,18976,'ec/pc/kerra/kerra_male_2011',1190),(18977,18977,'ec/pc/kerra/kerra_female_2011',1190),(18978,18978,'ec/pc/human/human_female_2011',1190),(18979,18979,'ec/pc/human/human_male_2011',1190),(18980,18980,'staticobjects/qeynos/qey_terrain_village03_kaladimstone',1190),(18981,18981,'accessories/wearable_items/cloak/exp09/cloak_celestial_watch_blue_gold',1190),(18982,18982,'_exp09/characters/monsters/skyshrine_drake/skyshrine_drake_spirit_black',1190),(18983,18983,'_exp09/characters/monsters/skyshrine_drake/skyshrine_drake_spirit_gold',1190),(18984,18984,'_exp09/characters/monsters/skyshrine_drake/skyshrine_drake_spirit_red',1190),(18985,18985,'_exp09/characters/tool_users/were/were_black_base',1190),(18986,18986,'staticobjects/banners/kelethin_banner_arcane_standing',1190),(18987,18987,'ec/pc/highelf/highelf_female_2011',1190),(18988,18988,'staticobjects/qeynos/halfelf_compass',1190),(18989,18989,'creatures/mounts/odus_prowler/prowler_stone_jade',1190),(18990,18990,'creatures/mounts/odus_prowler/prowler_stone_marble',1190),(18991,18991,'creatures/mounts/odus_prowler/prowler_stone_onyx',1190),(18992,18992,'_exp08/characters/tool_users/banshee_sleeper/banshee_sleeper_spirit',1190),(18993,18993,'staticobjects/housing_portal_objects/vision_home_magetower01',1190),(18994,18994,'staticobjects/soe_wallet/qeynos/qey_window_double_wood_square01',1190),(18995,18995,'staticobjects/soe_wallet/qeynos/qey_window_castle_round01',1190),(18996,18996,'staticobjects/soe_wallet/qeynos/qey_window_dome_stone_fancy01',1190),(18997,18997,'staticobjects/soe_wallet/qeynos/qey_window_dome_stone_rect02',1190),(18998,18998,'staticobjects/soe_wallet/qeynos/qey_window_dome_wood_fancy01',1190),(18999,18999,'staticobjects/soe_wallet/qeynos/qey_window_dome_wood_rect01',1190),(19000,19000,'staticobjects/soe_wallet/qeynos/qey_window_dome_wood_rect02',1190),(19001,19001,'staticobjects/soe_wallet/qeynos/qey_window_dome_wood_stone01',1190),(19002,19002,'staticobjects/soe_wallet/station_tinkered/gnome_stool',1190),(19003,19003,'staticobjects/soe_wallet/station_tinkered/gnome_bed',1190),(19004,19004,'staticobjects/soe_wallet/station_tinkered/gnome_ceilingfan_base',1190),(19005,19005,'staticobjects/soe_wallet/station_tinkered/gnome_chest',1190),(19006,19006,'staticobjects/soe_wallet/station_tinkered/gnome_clock',1190),(19007,19007,'staticobjects/soe_wallet/station_tinkered/gnome_dresser',1190),(19008,19008,'staticobjects/soe_wallet/station_tinkered/gnome_gear_large_pfx',1190),(19009,19009,'staticobjects/soe_wallet/station_tinkered/gnome_gear_small_pfx',1190),(19010,19010,'staticobjects/soe_wallet/station_tinkered/gnome_mirror',1190),(19011,19011,'staticobjects/soe_wallet/station_tinkered/gnome_nightstand',1190),(19012,19012,'staticobjects/soe_wallet/station_tinkered/gnome_shelf',1190),(19013,19013,'_exp09/characters/tool_users/baelon/baelon_unarmed',1190),(19014,19014,'_exp09/characters/monsters/winged_lion/winged_lion_base',1190),(19015,19015,'staticobjects/tree/river_flowertree_01_shrunk_dpo',1190),(19016,19016,'ec/pc/woodelf/woodelf_male_2011',1190),(19017,19017,'ec/pc/woodelf/woodelf_female_2011',1190),(19018,19018,'accessories/wieldable_items/weapons/exp09/staff/staff_drinal',1190),(19019,19019,'projectiles/spell_fire_ball_no_trail',1190),(19020,19020,'staticobjects/liveevent/tinkerfest/building_blocks/houseblock_1x1_column_bluemetal',1190),(19021,19021,'staticobjects/liveevent/tinkerfest/building_blocks/houseblock_1x1_column_redplates',1190),(19022,19022,'staticobjects/liveevent/tinkerfest/building_blocks/houseblock_1x2_column_bluemetal',1190),(19023,19023,'staticobjects/liveevent/tinkerfest/building_blocks/houseblock_1x2_column_redplates',1190),(19024,19024,'staticobjects/liveevent/tinkerfest/building_blocks/houseblock_1x2_dividerblock_bluemetal',1190),(19025,19025,'staticobjects/liveevent/tinkerfest/building_blocks/houseblock_1x2_dividerblock_redplates',1190),(19026,19026,'staticobjects/liveevent/tinkerfest/building_blocks/housecube_1x1_block_redplates',1190),(19027,19027,'staticobjects/liveevent/tinkerfest/building_blocks/houseblock_1xhalf_block_bluemetal',1190),(19028,19028,'staticobjects/liveevent/tinkerfest/building_blocks/houseblock_1xhalf_block_redplates',1190),(19029,19029,'staticobjects/liveevent/tinkerfest/building_blocks/houseblock_2x2_dividerblock_bluemetal',1190),(19030,19030,'staticobjects/liveevent/tinkerfest/building_blocks/houseblock_2x2_dividerblock_redplates',1190),(19031,19031,'staticobjects/liveevent/tinkerfest/building_blocks/houseblock_rail_bluemetal',1190),(19032,19032,'staticobjects/liveevent/tinkerfest/building_blocks/houseblock_rail_redplates',1190),(19033,19033,'staticobjects/liveevent/tinkerfest/building_blocks/houseblock_roundtile_bluemetal',1190),(19034,19034,'staticobjects/liveevent/tinkerfest/building_blocks/houseblock_roundtile_redplates',1190),(19035,19035,'staticobjects/liveevent/tinkerfest/building_blocks/houseblock_stair_bluemetal',1190),(19036,19036,'staticobjects/liveevent/tinkerfest/building_blocks/houseblock_stair_redplates',1190),(19037,19037,'staticobjects/liveevent/tinkerfest/building_blocks/housecube_1x1_block_bluemetal',1190),(19038,19038,'staticobjects/liveevent/tinkerfest/dpo_fprt_hood03_temple_tank01',1190),(19039,19039,'staticobjects/liveevent/tinkerfest/dpo_battleground_relic01_background_gear01',1190),(19040,19040,'staticobjects/liveevent/tinkerfest/dpo_battleground_relic01_murderball01',1190),(19041,19041,'staticobjects/liveevent/tinkerfest/dpo_battleground_relic01_murderball01_combo01',1190),(19042,19042,'staticobjects/liveevent/tinkerfest/dpo_battleground_relic01_murderball01_pedestal01',1190),(19043,19043,'staticobjects/liveevent/tinkerfest/dpo_qnos_tinker_vertgear_001',1190),(19044,19044,'staticobjects/liveevent/tinkerfest/dpo_qnos_tinker_ani_drill_001',1190),(19045,19045,'staticobjects/liveevent/tinkerfest/dpo_qnos_tinker_ani_gear_001',1190),(19046,19046,'staticobjects/liveevent/tinkerfest/dpo_qnos_tinker_ani_vertgear_001',1190),(19047,19047,'staticobjects/liveevent/tinkerfest/dpo_qnos_tinker_box_001',1190),(19048,19048,'staticobjects/liveevent/tinkerfest/dpo_qnos_tinker_broiler_001',1190),(19049,19049,'staticobjects/liveevent/tinkerfest/dpo_qnos_tinker_broiler_002',1190),(19050,19050,'staticobjects/liveevent/tinkerfest/dpo_qnos_tinker_drill_001',1190),(19051,19051,'staticobjects/liveevent/tinkerfest/dpo_qnos_tinker_gear_001',1190),(19052,19052,'creatures/mounts/pegasus_mount/pegasus_mount_epic_qeynos_gold',1190),(19053,19053,'accessories/wearable_items/_exp08/antonican_guard/vanguard_crusader/chest',1190),(19054,19054,'accessories/wearable_items/_exp08/antonican_guard/vanguard_crusader/feet',1190),(19055,19055,'accessories/wearable_items/_exp08/antonican_guard/vanguard_crusader/forearms',1190),(19056,19056,'accessories/wearable_items/_exp08/antonican_guard/vanguard_crusader/hands',1190),(19057,19057,'accessories/wearable_items/_exp08/antonican_guard/vanguard_crusader/head',1190),(19058,19058,'accessories/wearable_items/_exp08/antonican_guard/vanguard_crusader/head_epic',1190),(19059,19059,'accessories/wearable_items/_exp08/antonican_guard/vanguard_crusader/head_epic_crest',1190),(19060,19060,'accessories/wearable_items/_exp08/antonican_guard/vanguard_crusader/head_epic_topknot',1190),(19061,19061,'accessories/wearable_items/_exp08/antonican_guard/vanguard_crusader/left',1190),(19062,19062,'accessories/wearable_items/_exp08/antonican_guard/vanguard_crusader/legs',1190),(19063,19063,'accessories/wearable_items/_exp08/antonican_guard/vanguard_crusader/legs_noskirt',1190),(19064,19064,'accessories/wearable_items/_exp08/antonican_guard/vanguard_crusader/right',1190),(19065,19065,'accessories/wearable_items/_exp08/antonican_guard/vanguard_crusader/shoulders',1190),(19066,19066,'accessories/wearable_items/_exp08/antonican_guard/vanguard_crusader/shoulders_nopauldron',1190),(19067,19067,'accessories/wearable_items/_exp08/antonican_guard/vanguard_crusader/skirt',1190),(19068,19068,'accessories/wearable_items/_exp08/antonican_guard/vanguard_crusader/hands_epic',1190),(19069,19069,'accessories/wearable_items/_exp08/antonican_guard/vanguard_crusader/legs_epic',1190),(19070,19070,'accessories/wearable_items/_exp08/antonican_guard/vanguard_crusader/shoulders_epic',1190),(19071,19071,'accessories/wearable_items/_exp08/antonican_guard/snapons_extras/shinguard_crusader_left',1190),(19072,19072,'accessories/wearable_items/_exp08/antonican_guard/snapons_extras/shinguard_crusader_right',1190),(19073,19073,'accessories/wearable_items/_exp08/antonican_guard/snapons_extras/pauldron2_crusader_left',1190),(19074,19074,'accessories/wearable_items/_exp08/antonican_guard/snapons_extras/pauldron2_crusader_right',1190),(19075,19075,'accessories/wearable_items/_exp08/antonican_guard/snapons_extras/pauldron_crusader_right',1190),(19076,19076,'accessories/wearable_items/_exp08/antonican_guard/snapons_extras/pauldron_crusader_left',1190),(19077,19077,'accessories/wearable_items/_exp08/antonican_guard/snapons_extras/bracer_crusader_right',1190),(19078,19078,'accessories/wearable_items/_exp08/antonican_guard/snapons_extras/bracer_crusader_left',1190),(19079,19079,'accessories/wearable_items/_exp08/antonican_guard/snapons_extras/head_topknot_crusader',1190),(19080,19080,'accessories/wearable_items/_exp08/antonican_guard/snapons_extras/head_crest_crusader',1190),(19081,19081,'creatures/mounts/pegasus_mount/pegasus_mount_freeport',1190),(19082,19082,'creatures/mounts/pegasus_mount/swivels/pegasus_freeport_swivel_skull',1190),(19083,19083,'creatures/tu/succubus_flying',1190),(19084,19084,'accessories/wearable_items/cloak/exp08/cloak_antonican_guard_crusader',1190),(19085,19085,'_exp09/characters/tool_users/baelon/baelon_summon',1190),(19086,19086,'staticobjects/soe_wallet/qeynos_akanon_clock_dpo',1190),(19087,19087,'_exp09/characters/monsters/skirth/skirth',1190),(19088,19088,'accessories/wieldable_items/weapons/exp09/2h_sword/2h_ethernere_sword',1190),(19089,19089,'accessories/wieldable_items/weapons/exp09/1h_crush/ethernere_mace',1190),(19090,19090,'_exp09/characters/tool_users/drinal/drinal',1190),(19091,19091,'accessories/wearable_items/_exp09/ethernere_armors/chain/chest',1190),(19092,19092,'accessories/wearable_items/_exp09/ethernere_armors/chain/feet',1190),(19093,19093,'accessories/wearable_items/_exp09/ethernere_armors/chain/forearms',1190),(19094,19094,'accessories/wearable_items/_exp09/ethernere_armors/chain/hands',1190),(19095,19095,'accessories/wearable_items/_exp09/ethernere_armors/chain/head',1190),(19096,19096,'accessories/wearable_items/_exp09/ethernere_armors/chain/legs',1190),(19097,19097,'accessories/wearable_items/_exp09/ethernere_armors/chain/shoulders',1190),(19098,19098,'accessories/wearable_items/_exp09/ethernere_armors/chain/shoulders_epic',1190),(19099,19099,'accessories/wearable_items/_exp09/ethernere_armors/leather/chest',1190),(19100,19100,'accessories/wearable_items/_exp09/ethernere_armors/leather/feet',1190),(19101,19101,'accessories/wearable_items/_exp09/ethernere_armors/leather/forearms',1190),(19102,19102,'accessories/wearable_items/_exp09/ethernere_armors/leather/hands',1190),(19103,19103,'accessories/wearable_items/_exp09/ethernere_armors/leather/head',1190),(19104,19104,'accessories/wearable_items/_exp09/ethernere_armors/leather/legs',1190),(19105,19105,'accessories/wearable_items/_exp09/ethernere_armors/leather/legs_noskirt',1190),(19106,19106,'accessories/wearable_items/_exp09/ethernere_armors/leather/shoulders',1190),(19107,19107,'accessories/wearable_items/_exp09/ethernere_armors/leather/shoulders_epic',1190),(19108,19108,'accessories/wearable_items/_exp09/ethernere_armors/leather/skirt',1190),(19109,19109,'accessories/wearable_items/_exp09/ethernere_armors/robe/chest',1190),(19110,19110,'accessories/wearable_items/_exp09/ethernere_armors/robe/chest_epic',1190),(19111,19111,'accessories/wearable_items/_exp09/ethernere_armors/robe/feet',1190),(19112,19112,'accessories/wearable_items/_exp09/ethernere_armors/robe/hands',1190),(19113,19113,'accessories/wearable_items/_exp09/ethernere_armors/robe/head',1190),(19114,19114,'accessories/wearable_items/_exp09/ethernere_armors/robe/head_hood',1190),(19115,19115,'accessories/wearable_items/_exp09/ethernere_armors/robe/pants',1190),(19116,19116,'accessories/wearable_items/_exp09/ethernere_armors/robe/skirt',1190),(19117,19117,'accessories/wearable_items/_exp09/ethernere_armors/snapons_pauldrons/ethernere_bracer_left',1190),(19118,19118,'accessories/wearable_items/_exp09/ethernere_armors/snapons_pauldrons/ethernere_bracer_right',1190),(19119,19119,'accessories/wearable_items/_exp09/ethernere_armors/snapons_pauldrons/ethernere_heavy_pauldron_chain_left',1190),(19120,19120,'accessories/wearable_items/_exp09/ethernere_armors/snapons_pauldrons/ethernere_heavy_pauldron_chain_right',1190),(19121,19121,'accessories/wearable_items/_exp09/ethernere_armors/snapons_pauldrons/ethernere_heavy_pauldron_left',1190),(19122,19122,'accessories/wearable_items/_exp09/ethernere_armors/snapons_pauldrons/ethernere_heavy_pauldron_right',1190),(19123,19123,'accessories/wearable_items/_exp09/ethernere_armors/snapons_pauldrons/ethernere_heavy_pauldron2_left',1190),(19124,19124,'accessories/wearable_items/_exp09/ethernere_armors/snapons_pauldrons/ethernere_heavy_pauldron2_right',1190),(19125,19125,'accessories/wearable_items/_exp09/ethernere_armors/snapons_pauldrons/ethernere_light_pauldron_left',1190),(19126,19126,'accessories/wearable_items/_exp09/ethernere_armors/snapons_pauldrons/ethernere_light_pauldron_right',1190),(19127,19127,'accessories/wearable_items/_exp09/ethernere_armors/snapons_pauldrons/ethernere_light_pauldron_robe_left',1190),(19128,19128,'accessories/wearable_items/_exp09/ethernere_armors/snapons_pauldrons/ethernere_light_pauldron_robe_right',1190),(19129,19129,'accessories/wearable_items/_exp09/ethernere_armors/snapons_pauldrons/ethernere_shinguard_left',1190),(19130,19130,'accessories/wearable_items/_exp09/ethernere_armors/snapons_pauldrons/ethernere_shinguard_right',1190),(19131,19131,'accessories/wearable_items/_exp09/ethernere_armors/vanguard/chest',1190),(19132,19132,'accessories/wearable_items/_exp09/ethernere_armors/vanguard/feet',1190),(19133,19133,'accessories/wearable_items/_exp09/ethernere_armors/vanguard/forearms',1190),(19134,19134,'accessories/wearable_items/_exp09/ethernere_armors/vanguard/hands',1190),(19135,19135,'accessories/wearable_items/_exp09/ethernere_armors/vanguard/hands_epic',1190),(19136,19136,'accessories/wearable_items/_exp09/ethernere_armors/vanguard/head',1190),(19137,19137,'accessories/wearable_items/_exp09/ethernere_armors/vanguard/left',1190),(19138,19138,'accessories/wearable_items/_exp09/ethernere_armors/vanguard/legs',1190),(19139,19139,'accessories/wearable_items/_exp09/ethernere_armors/vanguard/legs_noskirt',1190),(19140,19140,'accessories/wearable_items/_exp09/ethernere_armors/vanguard/right',1190),(19141,19141,'accessories/wearable_items/_exp09/ethernere_armors/vanguard/shoulders',1190),(19142,19142,'accessories/wearable_items/_exp09/ethernere_armors/vanguard/shoulders_epic',1190),(19143,19143,'accessories/wearable_items/_exp09/ethernere_armors/vanguard/shoulders_nopauldrons',1190),(19144,19144,'accessories/wearable_items/_exp09/ethernere_armors/vanguard/skirt',1190),(19145,19145,'_exp09/characters/monsters/mud_monster/mud_monster_cazic_thule',1190),(19146,19146,'accessories/wearable_items/cloak/exp09/cloak_ethernere_short',1190),(19147,19147,'accessories/wearable_items/cloak/exp09/cloak_ethernere_long',1190),(19148,19148,'creatures/monsters/mouth_eye_blob_ethenere',1190),(19149,19149,'_exp08/characters/tool_users/bog_wraith/bog_wraith_spectre_chain',1190),(19150,19150,'accessories/wieldable_items/weapons/exp09/1h_crush/ethernere_hammer',1190),(19151,19151,'_exp09/characters/monsters/dragon_shadowdrach/dragon_shadowdrach',1190),(19152,19152,'_exp09/characters/tool_users/ethenere_npcs/human_male_ethenere',1190),(19153,19153,'_exp09/characters/tool_users/illithid/illithid',1190),(19154,19154,'accessories/wieldable_items/weapons/exp09/staff/spear_ethernere',1190),(19155,19155,'accessories/wieldable_items/weapons/exp09/fist/ethernere_claws',1190),(19156,19156,'_exp09/characters/tool_users/ethenere_npcs/dwarf_female_ethenere',1190),(19157,19157,'_exp09/characters/tool_users/ethenere_npcs/dwarf_male_ethenere',1190),(19158,19158,'_exp09/characters/tool_users/ethenere_npcs/human_female_ethenere',1190),(19159,19159,'_exp09/characters/tool_users/ethenere_npcs/ogre_male_ethenere',1190),(19160,19160,'staticobjects/halloween/le_jackolantern01_green',1190),(19161,19161,'staticobjects/halloween/le_jackolantern01_purple',1190),(19162,19162,'staticobjects/halloween/le_jackolantern02_green',1190),(19163,19163,'staticobjects/halloween/le_jackolantern02_purple',1190),(19164,19164,'staticobjects/halloween/le_jackolantern03_green',1190),(19165,19165,'staticobjects/halloween/le_jackolantern03_purple',1190),(19166,19166,'staticobjects/halloween/dpo_bat_skull_garland',1190),(19167,19167,'staticobjects/halloween/dpo_pitchfork_skull_garland',1190),(19168,19168,'_exp09/characters/tool_users/drinal/drinal_evil',1190),(19169,19169,'_exp08/characters/monsters/dragon_made_golem/dragon_made_golem_ice',1190),(19170,19170,'_exp09/characters/monsters/tirun_enforcer/tirun_enforcer',1190),(19171,19171,'accessories/wieldable_items/weapons/exp09/1h_pierce/dagger_ethernere',1190),(19172,19172,'accessories/wieldable_items/weapons/exp09/1h_sword/1h_sword_cazic',1190),(19173,19173,'accessories/wieldable_items/weapons/exp09/2h_sword/2h_sword_cazic',1190),(19174,19174,'staticobjects/halloween/fprt_ext_tombstonec001',1190),(19175,19175,'staticobjects/halloween/container_spec01_organ',1190),(19176,19176,'staticobjects/halloween/oblost_pot02_worgans',1190),(19177,19177,'staticobjects/halloween/bef_weaponrack02',1190),(19178,19178,'staticobjects/halloween/tfs_present01_medium',1190),(19179,19179,'staticobjects/halloween/seb_lightsource_firepot_iksar_large01_w_light',1190),(19180,19180,'staticobjects/halloween/wl_satyr_skull_candles',1190),(19181,19181,'staticobjects/halloween/bef_armor_display01',1190),(19182,19182,'_exp09/characters/monsters/carnivorous_ape_boss/carnivorous_ape_boss',1190),(19183,19183,'ec/pc/human/human_male_2011/human_male_normal_black_test',1190),(19184,19184,'ec/pc/human/human_male_2011/human_male_white_test',1190),(19185,19185,'accessories/wieldable_items/weapons/exp09/bow/bow_ethernere',1190),(19186,19186,'accessories/wieldable_items/weapons/exp09/bow/longbow_ethernere',1190),(19187,19187,'_exp09/characters/monsters/ethereal_construct/ethereal_construct',1190),(19188,19188,'accessories/wieldable_items/weapons/exp09/staff/wand_ethernere',1190),(19189,19189,'creatures/mounts/pegasus_demon/pegasus_demon',1190),(19190,19190,'accessories/wieldable_items/weapons/exp09/staff/staff_ethernere',1190),(19191,19191,'_exp09/objects/sleepers_tomb/sleepers_tomb_column',1190),(19192,19192,'_exp09/objects/sleepers_tomb/sleepers_tomb_column_02',1190),(19193,19193,'accessories/wearable_items/_exp09/thullian_armor/accessories/armband_base_left',1190),(19194,19194,'accessories/wearable_items/_exp09/thullian_armor/accessories/armband_base_right',1190),(19195,19195,'accessories/wearable_items/_exp09/thullian_armor/accessories/pauldron_light_left',1190),(19196,19196,'accessories/wearable_items/_exp09/thullian_armor/accessories/pauldron_light_right',1190),(19197,19197,'accessories/wearable_items/_exp09/thullian_armor/accessories/pauldron_robe_left',1190),(19198,19198,'accessories/wearable_items/_exp09/thullian_armor/accessories/pauldron_robe_right',1190),(19199,19199,'accessories/wearable_items/_exp09/thullian_armor/accessories/pauldrons_chain_left',1190),(19200,19200,'accessories/wearable_items/_exp09/thullian_armor/accessories/pauldrons_chain_right',1190),(19201,19201,'accessories/wearable_items/_exp09/thullian_armor/accessories/pauldrons_left',1190),(19202,19202,'accessories/wearable_items/_exp09/thullian_armor/accessories/pauldrons_right',1190),(19203,19203,'accessories/wearable_items/_exp09/thullian_armor/chain/chest',1190),(19204,19204,'accessories/wearable_items/_exp09/thullian_armor/chain/feet',1190),(19205,19205,'accessories/wearable_items/_exp09/thullian_armor/chain/forearms',1190),(19206,19206,'accessories/wearable_items/_exp09/thullian_armor/chain/hands',1190),(19207,19207,'accessories/wearable_items/_exp09/thullian_armor/chain/head',1190),(19208,19208,'accessories/wearable_items/_exp09/thullian_armor/chain/legs',1190),(19209,19209,'accessories/wearable_items/_exp09/thullian_armor/chain/shoulders',1190),(19210,19210,'accessories/wearable_items/_exp09/thullian_armor/chain/shoulders_epic',1190),(19211,19211,'accessories/wearable_items/_exp09/thullian_armor/gi_valkeryie/chest',1190),(19212,19212,'accessories/wearable_items/_exp09/thullian_armor/gi_valkeryie/hands',1190),(19213,19213,'accessories/wearable_items/_exp09/thullian_armor/gi_valkeryie/legs',1190),(19214,19214,'accessories/wearable_items/_exp09/thullian_armor/gi_valkeryie/shoulders',1190),(19215,19215,'accessories/wearable_items/_exp09/thullian_armor/leather/chest',1190),(19216,19216,'accessories/wearable_items/_exp09/thullian_armor/leather/feet',1190),(19217,19217,'accessories/wearable_items/_exp09/thullian_armor/leather/forearms',1190),(19218,19218,'accessories/wearable_items/_exp09/thullian_armor/leather/hands',1190),(19219,19219,'accessories/wearable_items/_exp09/thullian_armor/leather/head',1190),(19220,19220,'accessories/wearable_items/_exp09/thullian_armor/leather/legs',1190),(19221,19221,'accessories/wearable_items/_exp09/thullian_armor/leather/legs_noskirt',1190),(19222,19222,'accessories/wearable_items/_exp09/thullian_armor/leather/shoulders',1190),(19223,19223,'accessories/wearable_items/_exp09/thullian_armor/leather/shoulders_epic',1190),(19224,19224,'accessories/wearable_items/_exp09/thullian_armor/leather/skirt',1190),(19225,19225,'accessories/wearable_items/_exp09/thullian_armor/robe/chest',1190),(19226,19226,'accessories/wearable_items/_exp09/thullian_armor/robe/chest_epic',1190),(19227,19227,'accessories/wearable_items/_exp09/thullian_armor/robe/feet',1190),(19228,19228,'accessories/wearable_items/_exp09/thullian_armor/robe/hands',1190),(19229,19229,'accessories/wearable_items/_exp09/thullian_armor/robe/head',1190),(19230,19230,'accessories/wearable_items/_exp09/thullian_armor/robe/head_collar',1190),(19231,19231,'accessories/wearable_items/_exp09/thullian_armor/robe/pants',1190),(19232,19232,'accessories/wearable_items/_exp09/thullian_armor/robe/skirt',1190),(19233,19233,'accessories/wearable_items/_exp09/thullian_armor/vanguard/chest',1190),(19234,19234,'accessories/wearable_items/_exp09/thullian_armor/vanguard/feet',1190),(19235,19235,'accessories/wearable_items/_exp09/thullian_armor/vanguard/forearms',1190),(19236,19236,'accessories/wearable_items/_exp09/thullian_armor/vanguard/hands',1190),(19237,19237,'accessories/wearable_items/_exp09/thullian_armor/vanguard/head',1190),(19238,19238,'accessories/wearable_items/_exp09/thullian_armor/vanguard/left',1190),(19239,19239,'accessories/wearable_items/_exp09/thullian_armor/vanguard/legs',1190),(19240,19240,'accessories/wearable_items/_exp09/thullian_armor/vanguard/legs_noskirt',1190),(19241,19241,'accessories/wearable_items/_exp09/thullian_armor/vanguard/right',1190),(19242,19242,'accessories/wearable_items/_exp09/thullian_armor/vanguard/shoulders',1190),(19243,19243,'accessories/wearable_items/_exp09/thullian_armor/vanguard/shoulders_epic',1190),(19244,19244,'accessories/wearable_items/_exp09/thullian_armor/vanguard/shoulders_nopauldrons',1190),(19245,19245,'accessories/wearable_items/_exp09/thullian_armor/vanguard/skirt',1190),(19246,19246,'_exp09/objects/drinals/object_wisp_crystal',1190),(19247,19247,'_exp08/characters/tool_users/chitari/chitari_male_statue',1190),(19248,19248,'accessories/wieldable_items/weapons/exp08/1h_crush/exp08_1h_crush_chitari',1190),(19249,19249,'accessories/wieldable_items/weapons/exp08/1h_sword/exp08_1hs_axe_chitari',1190),(19250,19250,'accessories/wieldable_items/weapons/exp09/staff/bostaff_ethernere',1190),(19251,19251,'staticobjects/_exp08/sleepers_tomb/sleepers_tomb_urngroup03',1190),(19252,19252,'staticobjects/_exp08/sleepers_tomb/exp08_dun_sleepers_tomb_brazier_large02',1190),(19253,19253,'staticobjects/_exp08/sleepers_tomb/exp08_dun_sleepers_tomb_brazier_med01',1190),(19254,19254,'staticobjects/_exp08/sleepers_tomb/exp08_dun_sleepers_tomb_rug01',1190),(19255,19255,'staticobjects/_exp08/sleepers_tomb/exp08_dun_sleepers_tomb_rug02',1190),(19256,19256,'staticobjects/_exp08/sleepers_tomb/exp08_dun_sleepers_tomb_rug03',1190),(19257,19257,'staticobjects/_exp08/sleepers_tomb/exp08_dun_sleepers_tomb_urn01',1190),(19258,19258,'staticobjects/_exp08/sleepers_tomb/exp08_dun_sleepers_tomb_urn02',1190),(19259,19259,'staticobjects/_exp08/sleepers_tomb/exp08_dun_sleepers_tomb_urn03',1190),(19260,19260,'staticobjects/_exp08/sleepers_tomb/exp08_dun_sleepers_tomb_urn04',1190),(19261,19261,'staticobjects/_exp08/sleepers_tomb/exp08_dun_sleepers_tomb_urn05',1190),(19262,19262,'staticobjects/_exp08/sleepers_tomb/exp08_dun_sleepers_tomb_urn06',1190),(19263,19263,'staticobjects/_exp08/sleepers_tomb/sleepers_tomb_bookgroup01',1190),(19264,19264,'staticobjects/_exp08/sleepers_tomb/sleepers_tomb_bookgroup02',1190),(19265,19265,'staticobjects/_exp08/sleepers_tomb/sleepers_tomb_bookgroup03',1190),(19266,19266,'staticobjects/_exp08/sleepers_tomb/sleepers_tomb_brazier01_large',1190),(19267,19267,'staticobjects/_exp08/sleepers_tomb/sleepers_tomb_chest_large01',1190),(19268,19268,'staticobjects/_exp08/sleepers_tomb/sleepers_tomb_chest_large01_open',1190),(19269,19269,'staticobjects/_exp08/sleepers_tomb/sleepers_tomb_chest_large02',1190),(19270,19270,'staticobjects/_exp08/sleepers_tomb/sleepers_tomb_cornersconce_01',1190),(19271,19271,'staticobjects/_exp08/sleepers_tomb/sleepers_tomb_cornersconce_02',1190),(19272,19272,'staticobjects/_exp08/sleepers_tomb/sleepers_tomb_crate_large01',1190),(19273,19273,'staticobjects/_exp08/sleepers_tomb/sleepers_tomb_crate_large02',1190),(19274,19274,'staticobjects/_exp08/sleepers_tomb/sleepers_tomb_crate_large03',1190),(19275,19275,'staticobjects/_exp08/sleepers_tomb/sleepers_tomb_hangingsconce_01',1190),(19276,19276,'staticobjects/_exp08/sleepers_tomb/sleepers_tomb_urnfancy01',1190),(19277,19277,'accessories/wearable_items/_exp09/mummy_wraps/chest',1190),(19278,19278,'accessories/wearable_items/_exp09/mummy_wraps/hands',1190),(19279,19279,'accessories/wearable_items/_exp09/mummy_wraps/legs',1190),(19280,19280,'accessories/wearable_items/_exp09/mummy_wraps/shoulders',1190),(19281,19281,'accessories/wearable_items/_exp09/mummy_wraps/accessories/armband_base_left',1190),(19282,19282,'accessories/wearable_items/_exp09/mummy_wraps/accessories/armband_base_right',1190),(19283,19283,'accessories/wearable_items/_exp09/mummy_wraps_royal/chest',1190),(19284,19284,'accessories/wearable_items/_exp09/mummy_wraps_royal/hands',1190),(19285,19285,'accessories/wearable_items/_exp09/mummy_wraps_royal/legs',1190),(19286,19286,'accessories/wearable_items/_exp09/mummy_wraps_royal/shoulders',1190),(19287,19287,'ec/pc/darkelf/darkelf_female_ethernere',1190),(19288,19288,'ec/pc/darkelf/darkelf_male_ethernere',1190),(19289,19289,'creatures/monsters/spider_ethernerearmor3',1190),(19290,19290,'creatures/monsters/spider_ethernerearmor2',1190),(19291,19291,'creatures/monsters/spider_ethernerearmor1',1190),(19292,19292,'creatures/monsters/spider_yellowrecluse',1190),(19293,19293,'creatures/monsters/spider_treespringer',1190),(19294,19294,'creatures/monsters/spider_shadowspawn',1190),(19295,19295,'creatures/monsters/spider_sanguinated',1190),(19296,19296,'creatures/monsters/spider_redyellow',1190),(19297,19297,'creatures/monsters/spider_bonecollector',1190),(19298,19298,'accessories/wieldable_items/weapons/exp09/1h_crush/axe_ethernere',1190),(19299,19299,'accessories/wieldable_items/weapons/exp09/1h_sword/1h_sword_ethernere',1190),(19300,19300,'creatures/monsters/dervish_spinning_obolplain_stonestack',1190),(19301,19301,'creatures/monsters/dervish_spinning_obolplain_sand',1190),(19302,19302,'creatures/monsters/dervish_spinning_obolplain_rock',1190),(19303,19303,'creatures/monsters/dervish_spinning_obolplain_gravel',1190),(19304,19304,'creatures/monsters/dervish_obolplain_stonestack',1190),(19305,19305,'creatures/monsters/dervish_obolplain_sand',1190),(19306,19306,'creatures/monsters/dervish_obolplain_rock',1190),(19307,19307,'creatures/monsters/dervish_obolplain_gravel',1190),(19308,19308,'_exp09/characters/monsters/elemental_wave/elementalwave_obolplain_flowergrass',1190),(19309,19309,'_exp09/characters/monsters/elemental_wave/elementalwave_obolplain_grass',1190),(19310,19310,'_exp09/characters/monsters/elemental_wave/elementalwave_obolplain_purpleleaves',1190),(19311,19311,'_exp09/characters/monsters/elemental_wave/elementalwave_obolplain_sand',1190),(19312,19312,'_exp09/characters/monsters/elemental_wave/elementalwave_obolplain_sandwet',1190),(19313,19313,'accessories/wearable_items/_exp09/nightborne_sc_chain/snap_ons/chaos_pauldrons_left',1190),(19314,19314,'accessories/wearable_items/_exp09/nightborne_sc_chain/snap_ons/chaos_pauldrons_right',1190),(19315,19315,'accessories/wearable_items/_exp09/nightborne_sc_chain/chest',1190),(19316,19316,'accessories/wearable_items/_exp09/nightborne_sc_chain/feet',1190),(19317,19317,'accessories/wearable_items/_exp09/nightborne_sc_chain/forearms',1190),(19318,19318,'accessories/wearable_items/_exp09/nightborne_sc_chain/hands',1190),(19319,19319,'accessories/wearable_items/_exp09/nightborne_sc_chain/head',1190),(19320,19320,'accessories/wearable_items/_exp09/nightborne_sc_chain/head_epic',1190),(19321,19321,'accessories/wearable_items/_exp09/nightborne_sc_chain/legs',1190),(19322,19322,'accessories/wearable_items/_exp09/nightborne_sc_chain/legs_noskirt',1190),(19323,19323,'accessories/wearable_items/_exp09/nightborne_sc_chain/shoulders',1190),(19324,19324,'accessories/wearable_items/_exp09/nightborne_sc_chain/shoulders_epic',1190),(19325,19325,'accessories/wearable_items/_exp09/nightborne_sc_chain/skirt',1190),(19326,19326,'accessories/wearable_items/_exp09/nightborne_sc_leather/snap_ons/head_skull',1190),(19327,19327,'accessories/wearable_items/_exp09/nightborne_sc_leather/snap_ons/pauldrons_left',1190),(19328,19328,'accessories/wearable_items/_exp09/nightborne_sc_leather/snap_ons/pauldrons_right',1190),(19329,19329,'accessories/wearable_items/_exp09/nightborne_sc_leather/chest',1190),(19330,19330,'accessories/wearable_items/_exp09/nightborne_sc_leather/feet',1190),(19331,19331,'accessories/wearable_items/_exp09/nightborne_sc_leather/forearms',1190),(19332,19332,'accessories/wearable_items/_exp09/nightborne_sc_leather/hands',1190),(19333,19333,'accessories/wearable_items/_exp09/nightborne_sc_leather/head',1190),(19334,19334,'accessories/wearable_items/_exp09/nightborne_sc_leather/head_epic',1190),(19335,19335,'accessories/wearable_items/_exp09/nightborne_sc_leather/legs',1190),(19336,19336,'accessories/wearable_items/_exp09/nightborne_sc_leather/legs_noskirt',1190),(19337,19337,'accessories/wearable_items/_exp09/nightborne_sc_leather/shoulders_epic',1190),(19338,19338,'accessories/wearable_items/_exp09/nightborne_sc_leather/shoulders_no_pauldrons',1190),(19339,19339,'accessories/wearable_items/_exp09/nightborne_sc_leather/skirt',1190),(19340,19340,'accessories/wearable_items/_exp09/nightborne_sc_robe/snap_ons/pants',1190),(19341,19341,'accessories/wearable_items/_exp09/nightborne_sc_robe/snap_ons/pauldrons_lower_left',1190),(19342,19342,'accessories/wearable_items/_exp09/nightborne_sc_robe/snap_ons/pauldrons_lower_right',1190),(19343,19343,'accessories/wearable_items/_exp09/nightborne_sc_robe/snap_ons/pauldrons_upper_left',1190),(19344,19344,'accessories/wearable_items/_exp09/nightborne_sc_robe/snap_ons/pauldrons_upper_right',1190),(19345,19345,'accessories/wearable_items/_exp09/nightborne_sc_robe/snap_ons/skirt',1190),(19346,19346,'accessories/wearable_items/_exp09/nightborne_sc_robe/chest',1190),(19347,19347,'accessories/wearable_items/_exp09/nightborne_sc_robe/chest_epic',1190),(19348,19348,'accessories/wearable_items/_exp09/nightborne_sc_robe/feet',1190),(19349,19349,'accessories/wearable_items/_exp09/nightborne_sc_robe/hands',1190),(19350,19350,'accessories/wearable_items/_exp09/nightborne_sc_robe/head',1190),(19351,19351,'accessories/wearable_items/_exp09/nightborne_sc_robe/head_collar',1190),(19352,19352,'accessories/wearable_items/_exp09/nightborne_sc_robe/head_epic',1190),(19353,19353,'creatures/monsters/willowisp_ethernere01',1190),(19354,19354,'_exp08/characters/monsters/gargoyle_sleeper/gargoyle_obsidian_black',1190),(19355,19355,'creatures/monsters/willowisp_ethernere02',1190),(19356,19356,'creatures/monsters/willowisp_ethernere02_dark',1190),(19357,19357,'creatures/monsters/willowisp_ethernere03',1190),(19358,19358,'creatures/tu/ethernere_elemental_soldier',1190),(19359,19359,'_exp08/characters/monsters/komodo/komodo_blue',1190),(19360,19360,'_exp08/characters/monsters/komodo/komodo_green',1190),(19361,19361,'_exp08/characters/monsters/komodo/komodo_red',1190),(19362,19362,'creatures/mounts/komodo_mount/komodo_mount_obolplains_redpack',1190),(19363,19363,'creatures/mounts/komodo_mount/komodo_mount_obolplains_greenpack',1190),(19364,19364,'creatures/mounts/komodo_mount/komodo_mount_obolplains_bluepack',1190),(19365,19365,'creatures/mounts/komodo_mount/komodo_mount_obolplains_green',1190),(19366,19366,'creatures/mounts/komodo_mount/komodo_mount_obolplains_red',1190),(19367,19367,'creatures/mounts/komodo_mount/komodo_mount_obolplains_blue',1190),(19368,19368,'creatures/monsters/willowisp_sparkle_purple_dead_fx',1190),(19369,19369,'_exp09/characters/monsters/withering_tree_ent/fear_tree_ent',1190),(19370,19370,'_exp09/characters/monsters/withering_tree_ent/glowing_tree_ent',1190),(19371,19371,'_exp09/characters/monsters/scorpion_updated/scorpion_updated_bonepicker',1190),(19372,19372,'_exp09/characters/monsters/scorpion_updated/scorpion_updated_brown',1190),(19373,19373,'_exp09/characters/monsters/scorpion_updated/scorpion_updated_hematic',1190),(19374,19374,'_exp09/characters/monsters/scorpion_updated/scorpion_updated_jungle',1190),(19375,19375,'_exp09/characters/monsters/scorpion_updated/scorpion_updated_shadecasted',1190),(19376,19376,'_exp09/characters/tool_users/illithid/illithid_staff',1190),(19377,19377,'_exp09/characters/monsters/elementalair_ethernere/elementalair_ethernere_blue',1190),(19378,19378,'_exp09/characters/monsters/elementalair_ethernere/elementalair_ethernere_bluechaos',1190),(19379,19379,'_exp09/characters/monsters/elementalair_ethernere/elementalair_ethernere_fire',1190),(19380,19380,'_exp09/characters/monsters/elementalair_ethernere/elementalair_ethernere_firechaos',1190),(19381,19381,'_exp09/characters/monsters/elementalair_ethernere/elementalair_ethernere_soulfire',1190),(19382,19382,'_exp08/characters/tool_users/banshee_sleeper/banshee_sleeper_spectre_blue',1190),(19383,19383,'_exp08/characters/tool_users/banshee_sleeper/banshee_sleeper_spectre_green',1190),(19384,19384,'_exp08/characters/tool_users/banshee_sleeper/banshee_sleeper_spectre_violet',1190),(19385,19385,'_exp08/characters/tool_users/banshee_sleeper/banshee_sleeper_spectre_queen_blue',1190),(19386,19386,'_exp08/characters/tool_users/banshee_sleeper/banshee_sleeper_spectre_queen_green',1190),(19387,19387,'_exp08/characters/tool_users/banshee_sleeper/banshee_sleeper_spectre_queen_violet',1190),(19388,19388,'accessories/wearable_items/cloak/exp09/dragon_cloak',1190),(19389,19389,'accessories/wearable_items/cloak/exp09/dragon_cloak_blue',1190),(19390,19390,'accessories/wearable_items/cloak/exp09/dragon_cloak_green',1190),(19391,19391,'_exp09/characters/tool_users/ethenere_npcs/erudite_female_ethenere',1190),(19392,19392,'_exp09/characters/tool_users/ethenere_npcs/erudite_male_ethenere',1190),(19393,19393,'_exp09/characters/tool_users/ethenere_npcs/gnome_female_ethenere',1190),(19394,19394,'_exp09/characters/tool_users/ethenere_npcs/gnome_male_ethenere',1190),(19395,19395,'_exp09/characters/tool_users/ethenere_npcs/highelf_female_ethenere',1190),(19396,19396,'_exp09/characters/tool_users/ethenere_npcs/highelf_male_ethenere',1190),(19397,19397,'creatures/tu/firiona_vie_ethenere',1190),(19398,19398,'_exp09/characters/monsters/timber_wolf_ethernere/timber_wolf_ethernere',1190),(19399,19399,'_exp08/characters/monsters/dragon_made_golem/dragon_made_golem_sleepers_blue',1190),(19400,19400,'_exp08/characters/monsters/dragon_made_golem/dragon_made_golem_sleepers_green',1190),(19401,19401,'_exp08/characters/monsters/dragon_made_golem/dragon_made_golem_sleepers_violet',1190),(19402,19402,'_exp09/characters/tool_users/ethenere_npcs/ogre_female_ethenere',1190),(19403,19403,'accessories/wieldable_items/weapons/exp09/1h_crush/axe_1h_primal_velium',1190),(19404,19404,'accessories/wieldable_items/weapons/exp09/1h_crush/hammer_1h_primal_velium',1190),(19405,19405,'accessories/wieldable_items/weapons/exp09/1h_sword/1h_sword_primal_velium',1190),(19406,19406,'accessories/wieldable_items/weapons/exp09/2h_crush/2h_axe_primal_velium',1190),(19407,19407,'accessories/wieldable_items/weapons/exp09/2h_crush/2h_hammer_primal_velium',1190),(19408,19408,'accessories/wieldable_items/weapons/exp09/2h_sword/2h_sword_primal_velium',1190),(19409,19409,'accessories/wieldable_items/weapons/exp09/bow/longbow_primal_velium',1190),(19410,19410,'accessories/wieldable_items/weapons/exp09/fist/fist_primal_velium',1190),(19411,19411,'accessories/wieldable_items/weapons/exp09/staff/staff_primal_velium',1190),(19412,19412,'accessories/wieldable_items/weapons/exp09/staff/bowstaff_primal_velium',1190),(19413,19413,'accessories/wieldable_items/weapons/exp09/staff/cazic_pike',1190),(19414,19414,'_exp09/characters/tool_users/illithid/illithid_cowl',1190),(19415,19415,'_exp09/characters/tool_users/illithid/illithid_cowl_staff',1190),(19416,19416,'accessories/wieldable_items/weapons/exp09/1h_crush/cazic_wand',1190),(19417,19417,'accessories/wieldable_items/weapons/exp09/1h_crush/1h_hammer_cazic',1190),(19418,19418,'accessories/wieldable_items/weapons/exp09/2h_crush/exp09_2h_hammer_cazic',1190),(19419,19419,'accessories/wieldable_items/weapons/exp09/fist/fist_cazic',1190),(19420,19420,'accessories/wearable_items/snapons/backpacks/quivers/quiver_basic1_cherry',1190),(19421,19421,'accessories/wearable_items/snapons/backpacks/quivers/quiver_basic1_driftwood',1190),(19422,19422,'accessories/wearable_items/snapons/backpacks/quivers/quiver_basic1_enameled',1190),(19423,19423,'accessories/wearable_items/snapons/backpacks/quivers/quiver_basic1_walnut',1190),(19424,19424,'accessories/wearable_items/snapons/backpacks/quivers/quiver_basic2_black',1190),(19425,19425,'accessories/wearable_items/snapons/backpacks/quivers/quiver_basic2_blue',1190),(19426,19426,'accessories/wearable_items/snapons/backpacks/quivers/quiver_basic2_brown',1190),(19427,19427,'accessories/wearable_items/snapons/backpacks/quivers/quiver_basic2_green',1190),(19428,19428,'accessories/wearable_items/snapons/backpacks/quivers/quiver_basic2_red',1190),(19429,19429,'accessories/wearable_items/snapons/backpacks/quivers/quiver_belted_blue',1190),(19430,19430,'accessories/wearable_items/snapons/backpacks/quivers/quiver_belted_brown',1190),(19431,19431,'accessories/wearable_items/snapons/backpacks/quivers/quiver_belted_green',1190),(19432,19432,'accessories/wearable_items/snapons/backpacks/quivers/quiver_belted_purple',1190),(19433,19433,'accessories/wearable_items/snapons/backpacks/quivers/quiver_belted_red',1190),(19434,19434,'_exp08/characters/monsters/dragon_bone_golem/dragon_bone_golem_dirty',1190),(19435,19435,'_exp09/characters/monsters/skeleton_dervish/skeleton_dervish',1190),(19436,19436,'staticobjects/soe_wallet/curtains_plain',1190),(19437,19437,'_exp09/characters/tool_users/gehein/gehein',1190),(19438,19438,'accessories/wearable_items/profesion_hats/tophat/head_basic',1190),(19439,19439,'accessories/wearable_items/profesion_hats/tophat/head_goblin',1190),(19440,19440,'accessories/wearable_items/profesion_hats/tophat/head_leather',1190),(19441,19441,'accessories/wearable_items/profesion_hats/tophat/head_leather_blue',1190),(19442,19442,'accessories/wearable_items/profesion_hats/tophat/head_leather_dark',1190),(19443,19443,'accessories/wearable_items/profesion_hats/tophat/head_leather_green',1190),(19444,19444,'accessories/wearable_items/profesion_hats/tophat/head_leather_purple',1190),(19445,19445,'accessories/wearable_items/profesion_hats/tophat/head_leather_red',1190),(19446,19446,'_exp09/objects/sleepers_tomb/gargoyle_sleeper_pedestal',1190),(19447,19447,'creatures/mounts/player_wing/player_wyvern_tintable',1190),(19448,19448,'_exp09/characters/monsters/ethereal_construct/ethereal_construct_base',1190),(19449,19449,'_exp09/characters/monsters/ethereal_construct/ethereal_construct_weapon',1190),(19450,19450,'accessories/wearable_items/profesion_hats/tiara_mummy/head_bronze',1190),(19451,19451,'accessories/wearable_items/profesion_hats/tiara_mummy/head_darkiron',1190),(19452,19452,'accessories/wearable_items/profesion_hats/tiara_mummy/head_gem_emerald',1190),(19453,19453,'accessories/wearable_items/profesion_hats/tiara_mummy/head_gem_onyx',1190),(19454,19454,'accessories/wearable_items/profesion_hats/tiara_mummy/head_gem_ruby',1190),(19455,19455,'accessories/wearable_items/profesion_hats/tiara_mummy/head_glacial',1190),(19456,19456,'accessories/wearable_items/profesion_hats/tiara_mummy/head_golden',1190),(19457,19457,'accessories/wearable_items/profesion_hats/tiara_mummy/head_sandstone',1190),(19458,19458,'accessories/wearable_items/profesion_hats/tiara_mummy/head_stone',1190),(19459,19459,'accessories/wieldable_items/weapons/exp09/bow/longbow_cazic',1190),(19460,19460,'accessories/wearable_items/_exp09/heritage_woodelf/leather/chest',1190),(19461,19461,'accessories/wearable_items/_exp09/heritage_woodelf/leather/feet',1190),(19462,19462,'accessories/wearable_items/_exp09/heritage_woodelf/leather/forearms',1190),(19463,19463,'accessories/wearable_items/_exp09/heritage_woodelf/leather/hands',1190),(19464,19464,'accessories/wearable_items/_exp09/heritage_woodelf/leather/head',1190),(19465,19465,'accessories/wearable_items/_exp09/heritage_woodelf/leather/head_hood',1190),(19466,19466,'accessories/wearable_items/_exp09/heritage_woodelf/leather/legs',1190),(19467,19467,'accessories/wearable_items/_exp09/heritage_woodelf/leather/legs_noskirt',1190),(19468,19468,'accessories/wearable_items/_exp09/heritage_woodelf/leather/shoulders',1190),(19469,19469,'accessories/wearable_items/_exp09/heritage_woodelf/leather/shoulders_epic',1190),(19470,19470,'accessories/wearable_items/_exp09/heritage_woodelf/leather/skirt',1190),(19471,19471,'accessories/wearable_items/_exp09/heritage_woodelf/leather/pauldron/shoulder_pauldron_left',1190),(19472,19472,'accessories/wearable_items/_exp09/heritage_woodelf/leather/pauldron/shoulder_pauldron_right',1190),(19473,19473,'accessories/wearable_items/_exp09/heritage_woodelf/leather/hood/head',1190),(19474,19474,'accessories/wearable_items/cloak/exp09/cloak_heritage_woodelf',1190),(19475,19475,'accessories/wearable_items/cloak/exp09/cloak_heritage_woodelf_effect',1190),(19476,19476,'_exp09/characters/monsters/shambling_mound/shambling_mound',1190),(19477,19477,'_exp09/characters/monsters/shambling_mound/shambling_mound_02',1190),(19478,19478,'_exp09/characters/monsters/shambling_mound/shambling_mound_03',1190),(19479,19479,'accessories/wearable_items/_exp09/armband_stationcash/armband_left',1190),(19480,19480,'accessories/wearable_items/_exp09/armband_stationcash/armband_right',1190),(19481,19481,'_exp09/characters/monsters/rust_monster/rustmonster',1190),(19482,19482,'creatures/monsters/bat_ethernere',1190),(19483,19483,'projectiles/arrow_emberwood',1190),(19484,19484,'projectiles/arrow_somberwood',1190),(19485,19485,'projectiles/throwing_star_of_ro',1190),(19486,19486,'_exp09/characters/monsters/rust_monster/rustmonster_02',1190),(19487,19487,'accessories/wearable_items/snapons/armbands/shoulders_effect_leaf_left',1190),(19488,19488,'accessories/wearable_items/snapons/armbands/shoulders_effect_leaf_right',1190),(19489,19489,'accessories/wearable_items/snapons/armbands/shoulders_effect_leaf_both',1190),(19490,19490,'_exp09/objects/prelude_portal',1190),(19491,19491,'_exp09/characters/tool_users/gehein/gehein_staff',1190),(19492,19492,'_exp09/characters/tool_users/gehein/gehein_sword',1190),(19493,19493,'_exp09/objects/exp09_rgn_plains_of_obol/po_long_leaf_plant01_dpo',1190),(19494,19494,'creatures/monsters/wyvern_base',1190),(19495,19495,'creatures/monsters/wyvern_brown',1190),(19496,19496,'creatures/monsters/wyvern_green',1190),(19497,19497,'creatures/monsters/wyvern_red',1190),(19498,19498,'creatures/monsters/wyvern_shadow',1190),(19499,19499,'accessories/wieldable_items/weapons/exp09/1h_pierce/dagger_cazic',1190),(19500,19500,'accessories/wieldable_items/weapons/exp09/1h_crush/mace_fantasy_bluebronze',1190),(19501,19501,'accessories/wieldable_items/weapons/exp09/1h_crush/mace_fantasy_greengold',1190),(19502,19502,'accessories/wieldable_items/weapons/exp09/1h_crush/mace_fantasy_rediron',1190),(19503,19503,'accessories/wieldable_items/weapons/exp09/1h_crush/mace_fantasy_fire',1190),(19504,19504,'accessories/wieldable_items/weapons/exp09/1h_crush/mace_fantasy_spectral',1190),(19505,19505,'accessories/wieldable_items/weapons/exp09/1h_crush/mace_fantasy_stone',1190),(19506,19506,'accessories/wieldable_items/weapons/exp09/1h_crush/mace_fantasy_rusty',1190),(19507,19507,'accessories/wieldable_items/weapons/exp09/1h_crush/mace_fantasy_glacial',1190),(19508,19508,'accessories/wieldable_items/weapons/exp09/1h_crush/mace_fantasy_obsidian',1190),(19509,19509,'accessories/wieldable_items/weapons/exp09/1h_crush/wand_fantasy_spectral',1190),(19510,19510,'accessories/wieldable_items/weapons/exp09/1h_crush/wand_fantasy_rusty_greenorb',1190),(19511,19511,'accessories/wieldable_items/weapons/exp09/1h_crush/wand_fantasy_rusty_fireorb',1190),(19512,19512,'accessories/wieldable_items/weapons/exp09/1h_crush/wand_fantasy_rediron',1190),(19513,19513,'accessories/wieldable_items/weapons/exp09/1h_crush/wand_fantasy_blueice',1190),(19514,19514,'accessories/wieldable_items/weapons/exp09/1h_crush/wand_fantasy_bluebronze',1190),(19515,19515,'accessories/wieldable_items/weapons/exp09/1h_crush/hammer_fantasy_bluebronze',1190),(19516,19516,'accessories/wieldable_items/weapons/exp09/1h_crush/hammer_fantasy_greengold',1190),(19517,19517,'accessories/wieldable_items/weapons/exp09/1h_crush/hammer_fantasy_rediron',1190),(19518,19518,'accessories/wieldable_items/weapons/exp09/1h_sword/sword_fantasy_stone',1190),(19519,19519,'accessories/wieldable_items/weapons/exp09/1h_sword/sword_fantasy_spectral',1190),(19520,19520,'accessories/wieldable_items/weapons/exp09/1h_sword/sword_fantasy_rusty',1190),(19521,19521,'accessories/wieldable_items/weapons/exp09/1h_sword/sword_fantasy_obsidian',1190),(19522,19522,'accessories/wieldable_items/weapons/exp09/1h_sword/sword_fantasy_glacial',1190),(19523,19523,'accessories/wieldable_items/weapons/exp09/1h_sword/sword_fantasy_flame',1190),(19524,19524,'accessories/wieldable_items/weapons/exp09/1h_sword/sword_fantasy_rediron',1190),(19525,19525,'accessories/wieldable_items/weapons/exp09/1h_sword/sword_fantasy_greengold',1190),(19526,19526,'accessories/wieldable_items/weapons/exp09/1h_sword/sword_fantasy_bluebronze',1190),(19527,19527,'accessories/wieldable_items/weapons/exp09/1h_sword/shortsword_fantasy_stone',1190),(19528,19528,'accessories/wieldable_items/weapons/exp09/1h_sword/shortsword_fantasy_spectral',1190),(19529,19529,'accessories/wieldable_items/weapons/exp09/1h_sword/shortsword_fantasy_rusty',1190),(19530,19530,'accessories/wieldable_items/weapons/exp09/1h_sword/shortsword_fantasy_glacial',1190),(19531,19531,'accessories/wieldable_items/weapons/exp09/1h_sword/shortsword_fantasy_flame',1190),(19532,19532,'accessories/wieldable_items/weapons/exp09/1h_sword/shortsword_fantasy_rediron',1190),(19533,19533,'accessories/wieldable_items/weapons/exp09/1h_sword/shortsword_fantasy_greengold',1190),(19534,19534,'accessories/wieldable_items/weapons/exp09/1h_sword/shortsword_fantasy_bluebronze',1190),(19535,19535,'accessories/wieldable_items/weapons/exp09/2h_sword/2hsword_fantasy_rusty',1190),(19536,19536,'accessories/wieldable_items/weapons/exp09/2h_sword/2hsword_fantasy_rediron',1190),(19537,19537,'accessories/wieldable_items/weapons/exp09/2h_sword/2hsword_fantasy_obsidian',1190),(19538,19538,'accessories/wieldable_items/weapons/exp09/2h_sword/2hsword_fantasy_greengold',1190),(19539,19539,'accessories/wieldable_items/weapons/exp09/2h_sword/2hsword_fantasy_glacial',1190),(19540,19540,'accessories/wieldable_items/weapons/exp09/2h_sword/2hsword_fantasy_flame',1190),(19541,19541,'accessories/wieldable_items/weapons/exp09/2h_sword/2hsword_fantasy_spectral',1190),(19542,19542,'accessories/wieldable_items/weapons/exp09/2h_sword/2hsword_fantasy_bluebronze',1190),(19543,19543,'accessories/wieldable_items/weapons/exp09/bow/longbow_fantasy_stone',1190),(19544,19544,'accessories/wieldable_items/weapons/exp09/bow/longbow_fantasy_spectral',1190),(19545,19545,'accessories/wieldable_items/weapons/exp09/bow/longbow_fantasy_obsidian',1190),(19546,19546,'accessories/wieldable_items/weapons/exp09/bow/longbow_fantasy_glacial',1190),(19547,19547,'accessories/wieldable_items/weapons/exp09/bow/longbow_fantasy_fire',1190),(19548,19548,'accessories/wieldable_items/weapons/exp09/bow/longbow_fantasy_rediron',1190),(19549,19549,'accessories/wieldable_items/weapons/exp09/bow/longbow_fantasy_greengold',1190),(19550,19550,'accessories/wieldable_items/weapons/exp09/bow/longbow_fantasy_bluebronze',1190),(19551,19551,'accessories/wieldable_items/weapons/exp09/1h_pierce/dagger_hunter_fantasy_stone',1190),(19552,19552,'accessories/wieldable_items/weapons/exp09/1h_pierce/dagger_hunter_fantasy_spectral',1190),(19553,19553,'accessories/wieldable_items/weapons/exp09/1h_pierce/dagger_hunter_fantasy_rediron',1190),(19554,19554,'accessories/wieldable_items/weapons/exp09/1h_pierce/dagger_hunter_fantasy_obsidian',1190),(19555,19555,'accessories/wieldable_items/weapons/exp09/1h_pierce/dagger_hunter_fantasy_greengold',1190),(19556,19556,'accessories/wieldable_items/weapons/exp09/1h_pierce/dagger_hunter_fantasy_fire',1190),(19557,19557,'accessories/wieldable_items/weapons/exp09/1h_pierce/dagger_hunter_fantasy_bluebronze',1190),(19558,19558,'_exp09/characters/monsters/displacer_beast/displacer_beast',1190),(19559,19559,'_exp08/characters/tool_users/chitari/chitari_male_heavy03',1190),(19560,19560,'_exp08/characters/tool_users/chitari/chitari_male_light03',1190),(19561,19561,'_exp08/characters/tool_users/chitari/chitari_male_medium01_base',1190),(19562,19562,'_exp08/characters/tool_users/chitari/chitari_male_medium01_dark',1190),(19563,19563,'_exp08/characters/tool_users/chitari/chitari_male_medium02_albino',1190),(19564,19564,'_exp08/characters/tool_users/chitari/chitari_male_medium02_dark',1190),(19565,19565,'accessories/wieldable_items/weapons/exp09/1h_crush/wand_fantasy_greengold',1190),(19566,19566,'accessories/wieldable_items/weapons/exp09/1h_crush/hammer_fantasy_spectral',1190),(19567,19567,'accessories/wieldable_items/weapons/exp09/1h_crush/hammer_fantasy_stone',1190),(19568,19568,'accessories/wieldable_items/weapons/exp09/1h_crush/hammer_fantasy_glacial',1190),(19569,19569,'accessories/wieldable_items/weapons/exp09/1h_crush/hammer_fantasy_flame',1190),(19570,19570,'accessories/wieldable_items/weapons/exp09/1h_crush/hammer_fantasy_obsidian',1190),(19571,19571,'_exp09/characters/tool_users/ethenere_npcs/woodelf_female_ethenere',1190),(19572,19572,'_exp09/characters/tool_users/ethenere_npcs/woodelf_male_ethenere',1190),(19573,19573,'_exp09/objects/exp09_rgn_plains_of_obol/po_long_leaf_plant01_dpo_02',1190),(19574,19574,'_exp09/characters/tool_users/were/were_black_feral',1190),(19575,19575,'_exp09/characters/tool_users/were/were_black_scout',1190),(19576,19576,'_exp09/characters/tool_users/were/were_fox_base',1190),(19577,19577,'_exp09/characters/tool_users/were/were_fox_heavy',1190),(19578,19578,'_exp09/characters/tool_users/were/were_fox_scout',1190),(19579,19579,'_exp09/characters/tool_users/were/were_white_base',1190),(19580,19580,'_exp09/characters/tool_users/were/were_white_heavy',1190),(19581,19581,'_exp09/characters/tool_users/were/were_white_mage',1190),(19582,19582,'_exp09/characters/tool_users/were/were_wild_feral',1190),(19583,19583,'_exp09/characters/tool_users/were/were_wild_heavy',1190),(19584,19584,'_exp09/characters/tool_users/were/were_wild_mage',1190),(19585,19585,'_exp09/characters/monsters/elementalair_ethernere/elementalair_ethernere_red',1190),(19586,19586,'accessories/wearable_items/_exp09/armband_stationcash/armband_both',1190),(19587,19587,'staticobjects/soe_wallet/boats/boat01_farseas',1190),(19588,19588,'staticobjects/soe_wallet/boats/boat01_freeport',1190),(19589,19589,'staticobjects/soe_wallet/boats/boat01_magic',1190),(19590,19590,'staticobjects/soe_wallet/boats/boat01_nature',1190),(19591,19591,'staticobjects/soe_wallet/boats/boat01_nektulos',1190),(19592,19592,'staticobjects/soe_wallet/boats/boat01_orcish',1190),(19593,19593,'staticobjects/soe_wallet/boats/boat01_qeynos',1190),(19594,19594,'creatures/monsters/gazer_redeye',1190),(19595,19595,'creatures/monsters/evileye_red',1190),(19596,19596,'accessories/wearable_items/_exp09/formal_wear/chest',1190),(19597,19597,'accessories/wearable_items/_exp09/formal_wear/chest_combined',1190),(19598,19598,'accessories/wearable_items/_exp09/formal_wear/feet',1190),(19599,19599,'accessories/wearable_items/_exp09/formal_wear/hands',1190),(19600,19600,'accessories/wearable_items/_exp09/formal_wear/legs',1190),(19601,19601,'accessories/wearable_items/_exp09/formal_wear/shoulders',1190),(19602,19602,'accessories/wearable_items/_exp09/formal_wear/skirt',1190),(19603,19603,'accessories/wearable_items/_exp09/formal_wear_blue/chest',1190),(19604,19604,'accessories/wearable_items/_exp09/formal_wear_blue/chest_combined',1190),(19605,19605,'accessories/wearable_items/_exp09/formal_wear_blue/feet',1190),(19606,19606,'accessories/wearable_items/_exp09/formal_wear_blue/hands',1190),(19607,19607,'accessories/wearable_items/_exp09/formal_wear_blue/legs',1190),(19608,19608,'accessories/wearable_items/_exp09/formal_wear_blue/shoulders',1190),(19609,19609,'accessories/wearable_items/_exp09/formal_wear_blue/skirt',1190),(19610,19610,'accessories/wearable_items/_exp09/formal_wear_dark/chest',1190),(19611,19611,'accessories/wearable_items/_exp09/formal_wear_dark/chest_combined',1190),(19612,19612,'accessories/wearable_items/_exp09/formal_wear_dark/feet',1190),(19613,19613,'accessories/wearable_items/_exp09/formal_wear_dark/hands',1190),(19614,19614,'accessories/wearable_items/_exp09/formal_wear_dark/legs',1190),(19615,19615,'accessories/wearable_items/_exp09/formal_wear_dark/shoulders',1190),(19616,19616,'accessories/wearable_items/_exp09/formal_wear_dark/skirt',1190),(19617,19617,'accessories/wearable_items/_exp09/formal_wear_green/chest _combined',1190),(19618,19618,'accessories/wearable_items/_exp09/formal_wear_green/chest',1190),(19619,19619,'accessories/wearable_items/_exp09/formal_wear_green/feet',1190),(19620,19620,'accessories/wearable_items/_exp09/formal_wear_green/hands',1190),(19621,19621,'accessories/wearable_items/_exp09/formal_wear_green/legs',1190),(19622,19622,'accessories/wearable_items/_exp09/formal_wear_green/shoulders',1190),(19623,19623,'accessories/wearable_items/_exp09/formal_wear_green/skirt',1190),(19624,19624,'accessories/wearable_items/_exp09/formal_wear_red/chest',1190),(19625,19625,'accessories/wearable_items/_exp09/formal_wear_red/chest_combined',1190),(19626,19626,'accessories/wearable_items/_exp09/formal_wear_red/feet',1190),(19627,19627,'accessories/wearable_items/_exp09/formal_wear_red/hands',1190),(19628,19628,'accessories/wearable_items/_exp09/formal_wear_red/legs',1190),(19629,19629,'accessories/wearable_items/_exp09/formal_wear_red/shoulders',1190),(19630,19630,'accessories/wearable_items/_exp09/formal_wear_red/skirt',1190),(19631,19631,'_exp08/characters/tool_users/chitari/chitari_bonelord',1190),(19632,19632,'_exp09/objects/exp09_dun_temple_of_faceless/cazic_door_blocker',1190),(19633,19633,'_exp09/characters/tool_users/lizardmen_2012/lizardman_ethenere',1190),(19634,19634,'_exp09/characters/tool_users/lizardmen_2012/lizardman_fear',1190),(19635,19635,'staticobjects/liveevent/halloween/dpo_halloween_poison_bottle',1190),(19636,19636,'accessories/wearable_items/_exp09/heritage_woodelf/leather/snapons/armband_left',1190),(19637,19637,'accessories/wearable_items/_exp09/heritage_woodelf/leather/snapons/armband_right',1190),(19638,19638,'accessories/wearable_items/_exp09/heritage_woodelf/leather/snapons/headband',1190),(19639,19639,'accessories/wearable_items/_exp09/heritage_woodelf/leather/snapons/shinguard_left',1190),(19640,19640,'accessories/wearable_items/_exp09/heritage_woodelf/leather/snapons/shinguard_right',1190),(19641,19641,'accessories/wearable_items/_exp09/heritage_woodelf/leather/legs_epic',1190),(19642,19642,'accessories/wearable_items/_exp09/heritage_woodelf/leather/shoulders_armbands',1190),(19643,19643,'accessories/wieldable_items/weapons/exp07/wand/wand_flame',1190),(19644,19644,'accessories/wearable_items/_exp09/formal_wear_blackwhite/chest',1190),(19645,19645,'accessories/wearable_items/_exp09/formal_wear_blackwhite/chest_combined',1190),(19646,19646,'accessories/wearable_items/_exp09/formal_wear_blackwhite/feet',1190),(19647,19647,'accessories/wearable_items/_exp09/formal_wear_blackwhite/hands',1190),(19648,19648,'accessories/wearable_items/_exp09/formal_wear_blackwhite/legs',1190),(19649,19649,'accessories/wearable_items/_exp09/formal_wear_blackwhite/shoulders',1190),(19650,19650,'accessories/wearable_items/_exp09/formal_wear_blackwhite/skirt',1190),(19651,19651,'creatures/test/goblin_firiona_antonia',1190),(19652,19652,'_exp09/characters/monsters/ape_fear_touched/_ape_fear_touched',1190),(19653,19653,'_exp09/characters/monsters/ape_fear_touched/_ape_fear_touched_b',1190),(19654,19654,'accessories/wearable_items/profesion_hats/tiara_jeweled/tiara_crystal',1190),(19655,19655,'accessories/wearable_items/profesion_hats/tiara_jeweled/tiara_dragonkin',1190),(19656,19656,'accessories/wearable_items/profesion_hats/tiara_jeweled/tiara_flame',1190),(19657,19657,'accessories/wearable_items/profesion_hats/tiara_jeweled/tiara_flamedrop',1190),(19658,19658,'accessories/wearable_items/profesion_hats/tiara_jeweled/tiara_greenember',1190),(19659,19659,'accessories/wearable_items/profesion_hats/tiara_jeweled/tiara_jewelled',1190),(19660,19660,'accessories/wearable_items/profesion_hats/tiara_jeweled/tiara_lavender',1190),(19661,19661,'accessories/wearable_items/profesion_hats/tiara_jeweled/tiara_spectral',1190),(19662,19662,'accessories/wearable_items/profesion_hats/tiara_jeweled/tiara_steam',1190),(19663,19663,'accessories/wearable_items/profesion_hats/tiara_jeweled/tiara_stone',1190),(19664,19664,'_exp09/characters/tool_users/lizardmen_2012/lizardman_scout',1190),(19665,19665,'_exp09/characters/tool_users/lizardmen_2012/lizardman_shaman',1190),(19666,19666,'_exp09/objects/exp09_rgn_plains_of_obol/spirit_totem_dpo_01',1190),(19667,19667,'accessories/wearable_items/profesion_hats/tiara_veiled/tiara_veiled',1190),(19668,19668,'accessories/wieldable_items/weapons/talisman/doll/lizardman_frog',1190),(19669,19669,'accessories/wieldable_items/weapons/talisman/doll/lizardman_frog_swivel',1190),(19670,19670,'_exp09/characters/tool_users/lizardmen_2012/lizardman_fear_scout',1190),(19671,19671,'_exp09/characters/tool_users/lizardmen_2012/lizardman_fear_shaman',1190),(19672,19672,'accessories/wieldable_items/weapons/talisman/doll/lizardman_frog_fear',1190),(19673,19673,'accessories/wieldable_items/weapons/talisman/doll/lizardman_frog_fear_swivel',1190),(19674,19674,'_exp08/characters/tool_users/bog_wraith/banshee_sleeper_drinal_castle',1190),(19675,19675,'accessories/wieldable_items/weapons/exp09/staff/bostaff_cazic',1190),(19676,19676,'accessories/wieldable_items/weapons/exp09/staff/staff_cazic',1190),(19677,19677,'_exp09/objects/exp09_rgn_plains_of_obol/water_plane_quest_dpo',1190),(19678,19678,'staticobjects/halloween/dpo_pitchfork_candy_cordon',1190),(19679,19679,'staticobjects/halloween/dpo_poker_candy_cordon',1190),(19680,19680,'creatures/mounts/ethernere_cloud',1190),(19681,19681,'accessories/wearable_items/profesion_hats/skull_hood/head',1190),(19682,19682,'_exp09/objects/exp09_rgn_plains_of_obol/dragon_bone_jaw01_dpo',1190),(19683,19683,'creatures/mounts/wyvern_mount/wyvern_armored_black',1190),(19684,19684,'accessories/wieldable_items/shields/exp09/exp09_shield_round_evilmetal',1190),(19685,19685,'_exp09/characters/tool_users/ogre_ogguk/ogre_male_ogguk_fur',1190),(19686,19686,'_exp09/characters/tool_users/ogre_ogguk/ogre_male_ogguk_pants',1190),(19687,19687,'_exp09/characters/tool_users/ogre_ogguk/ogre_male_ogguk_scout',1190),(19688,19688,'creatures/tu/lizardkin_base',1190),(19689,19689,'staticobjects/rocks/gf_rock_dirt_cave_small02',1190),(19690,19690,'staticobjects/weapons/dpo_tinkered_wrench_tin',1190),(19691,19691,'accessories/wieldable_items/shields/exp09/kite_shield_sc',1190),(19692,19692,'accessories/wearable_items/_exp09/elder_age/chain/chest',1190),(19693,19693,'accessories/wearable_items/_exp09/elder_age/chain/feet',1190),(19694,19694,'accessories/wearable_items/_exp09/elder_age/chain/forearms',1190),(19695,19695,'accessories/wearable_items/_exp09/elder_age/chain/hands',1190),(19696,19696,'accessories/wearable_items/_exp09/elder_age/chain/head',1190),(19697,19697,'accessories/wearable_items/_exp09/elder_age/chain/legs',1190),(19698,19698,'accessories/wearable_items/_exp09/elder_age/chain/shoulders',1190),(19699,19699,'accessories/wearable_items/_exp09/elder_age/chain/shoulders_epic',1190),(19700,19700,'accessories/wearable_items/_exp09/elder_age/leather/chest',1190),(19701,19701,'accessories/wearable_items/_exp09/elder_age/leather/feet',1190),(19702,19702,'accessories/wearable_items/_exp09/elder_age/leather/forearms',1190),(19703,19703,'accessories/wearable_items/_exp09/elder_age/leather/hands',1190),(19704,19704,'accessories/wearable_items/_exp09/elder_age/leather/head',1190),(19705,19705,'accessories/wearable_items/_exp09/elder_age/leather/legs',1190),(19706,19706,'accessories/wearable_items/_exp09/elder_age/leather/legs_noskirt',1190),(19707,19707,'accessories/wearable_items/_exp09/elder_age/leather/shoulders',1190),(19708,19708,'accessories/wearable_items/_exp09/elder_age/leather/shoulders_epic',1190),(19709,19709,'accessories/wearable_items/_exp09/elder_age/leather/skirt',1190),(19710,19710,'accessories/wearable_items/_exp09/elder_age/robe/chest',1190),(19711,19711,'accessories/wearable_items/_exp09/elder_age/robe/feet',1190),(19712,19712,'accessories/wearable_items/_exp09/elder_age/robe/hands',1190),(19713,19713,'accessories/wearable_items/_exp09/elder_age/robe/head_collar',1190),(19714,19714,'accessories/wearable_items/_exp09/elder_age/robe/head_evil_conjurer',1190),(19715,19715,'accessories/wearable_items/_exp09/elder_age/robe/pants',1190),(19716,19716,'accessories/wearable_items/_exp09/elder_age/robe/skirt',1190),(19717,19717,'accessories/wearable_items/_exp09/elder_age/snapons/bracer_left',1190),(19718,19718,'accessories/wearable_items/_exp09/elder_age/snapons/bracer_right',1190),(19719,19719,'accessories/wearable_items/_exp09/elder_age/snapons/pauldron_chain_left',1190),(19720,19720,'accessories/wearable_items/_exp09/elder_age/snapons/pauldron_chain_right',1190),(19721,19721,'accessories/wearable_items/_exp09/elder_age/snapons/pauldron_heavy_left',1190),(19722,19722,'accessories/wearable_items/_exp09/elder_age/snapons/pauldron_heavy_right',1190),(19723,19723,'accessories/wearable_items/_exp09/elder_age/snapons/pauldron_light_left',1190),(19724,19724,'accessories/wearable_items/_exp09/elder_age/snapons/pauldron_light_right',1190),(19725,19725,'accessories/wearable_items/_exp09/elder_age/snapons/shinguard_chain_left',1190),(19726,19726,'accessories/wearable_items/_exp09/elder_age/snapons/shinguard_chain_right',1190),(19727,19727,'accessories/wearable_items/_exp09/elder_age/snapons/shinguard_left',1190),(19728,19728,'accessories/wearable_items/_exp09/elder_age/snapons/shinguard_right',1190),(19729,19729,'accessories/wearable_items/_exp09/elder_age/valkeryie_gi/chest',1190),(19730,19730,'accessories/wearable_items/_exp09/elder_age/valkeryie_gi/hands',1190),(19731,19731,'accessories/wearable_items/_exp09/elder_age/valkeryie_gi/legs',1190),(19732,19732,'accessories/wearable_items/_exp09/elder_age/vanguard/chest',1190),(19733,19733,'accessories/wearable_items/_exp09/elder_age/vanguard/feet',1190),(19734,19734,'accessories/wearable_items/_exp09/elder_age/vanguard/forearms',1190),(19735,19735,'accessories/wearable_items/_exp09/elder_age/vanguard/hands',1190),(19736,19736,'accessories/wearable_items/_exp09/elder_age/vanguard/hands_epic',1190),(19737,19737,'accessories/wearable_items/_exp09/elder_age/vanguard/head',1190),(19738,19738,'accessories/wearable_items/_exp09/elder_age/vanguard/left',1190),(19739,19739,'accessories/wearable_items/_exp09/elder_age/vanguard/legs',1190),(19740,19740,'accessories/wearable_items/_exp09/elder_age/vanguard/legs_epic',1190),(19741,19741,'accessories/wearable_items/_exp09/elder_age/vanguard/legs_noskirt',1190),(19742,19742,'accessories/wearable_items/_exp09/elder_age/vanguard/right',1190),(19743,19743,'accessories/wearable_items/_exp09/elder_age/vanguard/shoulders',1190),(19744,19744,'accessories/wearable_items/_exp09/elder_age/vanguard/shoulders_epic',1190),(19745,19745,'accessories/wearable_items/_exp09/elder_age/vanguard/shoulders_nopauldrons',1190),(19746,19746,'accessories/wearable_items/_exp09/elder_age/vanguard/skirt',1190),(19747,19747,'accessories/wearable_items/_exp09/ethernere_armors/chain_green/chest',1190),(19748,19748,'accessories/wearable_items/_exp09/ethernere_armors/chain_green/feet',1190),(19749,19749,'accessories/wearable_items/_exp09/ethernere_armors/chain_green/forearms',1190),(19750,19750,'accessories/wearable_items/_exp09/ethernere_armors/chain_green/hands',1190),(19751,19751,'accessories/wearable_items/_exp09/ethernere_armors/chain_green/head',1190),(19752,19752,'accessories/wearable_items/_exp09/ethernere_armors/chain_green/legs',1190),(19753,19753,'accessories/wearable_items/_exp09/ethernere_armors/chain_green/shoulders',1190),(19754,19754,'accessories/wearable_items/_exp09/ethernere_armors/chain_green/shoulders_epic',1190),(19755,19755,'accessories/wearable_items/_exp09/ethernere_armors/chain_red/chest',1190),(19756,19756,'accessories/wearable_items/_exp09/ethernere_armors/chain_red/feet',1190),(19757,19757,'accessories/wearable_items/_exp09/ethernere_armors/chain_red/forearms',1190),(19758,19758,'accessories/wearable_items/_exp09/ethernere_armors/chain_red/hands',1190),(19759,19759,'accessories/wearable_items/_exp09/ethernere_armors/chain_red/head',1190),(19760,19760,'accessories/wearable_items/_exp09/ethernere_armors/chain_red/legs',1190),(19761,19761,'accessories/wearable_items/_exp09/ethernere_armors/chain_red/shoulders',1190),(19762,19762,'accessories/wearable_items/_exp09/ethernere_armors/chain_red/shoulders_epic',1190),(19763,19763,'accessories/wearable_items/_exp09/ethernere_armors/leather_green/chest',1190),(19764,19764,'accessories/wearable_items/_exp09/ethernere_armors/leather_green/feet',1190),(19765,19765,'accessories/wearable_items/_exp09/ethernere_armors/leather_green/forearms',1190),(19766,19766,'accessories/wearable_items/_exp09/ethernere_armors/leather_green/hands',1190),(19767,19767,'accessories/wearable_items/_exp09/ethernere_armors/leather_green/head',1190),(19768,19768,'accessories/wearable_items/_exp09/ethernere_armors/leather_green/legs',1190),(19769,19769,'accessories/wearable_items/_exp09/ethernere_armors/leather_green/legs_noskirt',1190),(19770,19770,'accessories/wearable_items/_exp09/ethernere_armors/leather_green/shoulders',1190),(19771,19771,'accessories/wearable_items/_exp09/ethernere_armors/leather_green/shoulders_epic',1190),(19772,19772,'accessories/wearable_items/_exp09/ethernere_armors/leather_green/skirt',1190),(19773,19773,'accessories/wearable_items/_exp09/ethernere_armors/leather_red/chest',1190),(19774,19774,'accessories/wearable_items/_exp09/ethernere_armors/leather_red/feet',1190),(19775,19775,'accessories/wearable_items/_exp09/ethernere_armors/leather_red/forearms',1190),(19776,19776,'accessories/wearable_items/_exp09/ethernere_armors/leather_red/hands',1190),(19777,19777,'accessories/wearable_items/_exp09/ethernere_armors/leather_red/head',1190),(19778,19778,'accessories/wearable_items/_exp09/ethernere_armors/leather_red/legs',1190),(19779,19779,'accessories/wearable_items/_exp09/ethernere_armors/leather_red/legs_noskirt',1190),(19780,19780,'accessories/wearable_items/_exp09/ethernere_armors/leather_red/shoulders',1190),(19781,19781,'accessories/wearable_items/_exp09/ethernere_armors/leather_red/shoulders_epic',1190),(19782,19782,'accessories/wearable_items/_exp09/ethernere_armors/leather_red/skirt',1190),(19783,19783,'accessories/wearable_items/_exp09/ethernere_armors/robe_green/chest',1190),(19784,19784,'accessories/wearable_items/_exp09/ethernere_armors/robe_green/chest_epic',1190),(19785,19785,'accessories/wearable_items/_exp09/ethernere_armors/robe_green/feet',1190),(19786,19786,'accessories/wearable_items/_exp09/ethernere_armors/robe_green/hands',1190),(19787,19787,'accessories/wearable_items/_exp09/ethernere_armors/robe_green/head',1190),(19788,19788,'accessories/wearable_items/_exp09/ethernere_armors/robe_green/head_collar',1190),(19789,19789,'accessories/wearable_items/_exp09/ethernere_armors/robe_green/pants',1190),(19790,19790,'accessories/wearable_items/_exp09/ethernere_armors/robe_green/skirt',1190),(19791,19791,'accessories/wearable_items/_exp09/ethernere_armors/robe_red/chest',1190),(19792,19792,'accessories/wearable_items/_exp09/ethernere_armors/robe_red/chest_epic',1190),(19793,19793,'accessories/wearable_items/_exp09/ethernere_armors/robe_red/feet',1190),(19794,19794,'accessories/wearable_items/_exp09/ethernere_armors/robe_red/hands',1190),(19795,19795,'accessories/wearable_items/_exp09/ethernere_armors/robe_red/head',1190),(19796,19796,'accessories/wearable_items/_exp09/ethernere_armors/robe_red/head_collar',1190),(19797,19797,'accessories/wearable_items/_exp09/ethernere_armors/robe_red/pants',1190),(19798,19798,'accessories/wearable_items/_exp09/ethernere_armors/robe_red/skirt',1190),(19799,19799,'accessories/wearable_items/_exp09/ethernere_armors/snapons_pauldrons/ethernere_heavy_pauldron2_red_right',1190),(19800,19800,'accessories/wearable_items/_exp09/ethernere_armors/snapons_pauldrons/ethernere_heavy_pauldron2_red_left',1190),(19801,19801,'accessories/wearable_items/_exp09/ethernere_armors/snapons_pauldrons/ethernere_heavy_pauldron2_green_right',1190),(19802,19802,'accessories/wearable_items/_exp09/ethernere_armors/snapons_pauldrons/ethernere_heavy_pauldron2_green_left',1190),(19803,19803,'accessories/wearable_items/_exp09/ethernere_armors/snapons_pauldrons/ethernere_shinguard_red_right',1190),(19804,19804,'accessories/wearable_items/_exp09/ethernere_armors/snapons_pauldrons/ethernere_shinguard_green_right',1190),(19805,19805,'accessories/wearable_items/_exp09/ethernere_armors/snapons_pauldrons/ethernere_shinguard_red_left',1190),(19806,19806,'accessories/wearable_items/_exp09/ethernere_armors/snapons_pauldrons/ethernere_shinguard_green_left',1190),(19807,19807,'accessories/wearable_items/_exp09/ethernere_armors/snapons_pauldrons/ethernere_light_pauldron_red_right',1190),(19808,19808,'accessories/wearable_items/_exp09/ethernere_armors/snapons_pauldrons/ethernere_light_pauldron_green_right',1190),(19809,19809,'accessories/wearable_items/_exp09/ethernere_armors/snapons_pauldrons/ethernere_light_pauldron_red_left',1190),(19810,19810,'accessories/wearable_items/_exp09/ethernere_armors/snapons_pauldrons/ethernere_light_pauldron_green_left',1190),(19811,19811,'accessories/wearable_items/_exp09/ethernere_armors/snapons_pauldrons/ethernere_heavy_pauldron_red_right',1190),(19812,19812,'accessories/wearable_items/_exp09/ethernere_armors/snapons_pauldrons/ethernere_heavy_pauldron_green_right',1190),(19813,19813,'accessories/wearable_items/_exp09/ethernere_armors/snapons_pauldrons/ethernere_heavy_pauldron_red_left',1190),(19814,19814,'accessories/wearable_items/_exp09/ethernere_armors/snapons_pauldrons/ethernere_heavy_pauldron_green_left',1190),(19815,19815,'accessories/wearable_items/_exp09/ethernere_armors/snapons_pauldrons/ethernere_heavy_pauldron_chain_red_right',1190),(19816,19816,'accessories/wearable_items/_exp09/ethernere_armors/snapons_pauldrons/ethernere_heavy_pauldron_chain_green_right',1190),(19817,19817,'accessories/wearable_items/_exp09/ethernere_armors/snapons_pauldrons/ethernere_heavy_pauldron_chain_red_left',1190),(19818,19818,'accessories/wearable_items/_exp09/ethernere_armors/snapons_pauldrons/ethernere_heavy_pauldron_chain_green_left',1190),(19819,19819,'accessories/wearable_items/_exp09/ethernere_armors/snapons_pauldrons/ethernere_light_pauldron_robe_red_right',1190),(19820,19820,'accessories/wearable_items/_exp09/ethernere_armors/snapons_pauldrons/ethernere_light_pauldron_robe_green_right',1190),(19821,19821,'accessories/wearable_items/_exp09/ethernere_armors/snapons_pauldrons/ethernere_light_pauldron_robe_red_left',1190),(19822,19822,'accessories/wearable_items/_exp09/ethernere_armors/snapons_pauldrons/ethernere_light_pauldron_robe_green_left',1190),(19823,19823,'accessories/wearable_items/_exp09/ethernere_armors/snapons_pauldrons/ethernere_bracer_red_right',1190),(19824,19824,'accessories/wearable_items/_exp09/ethernere_armors/snapons_pauldrons/ethernere_bracer_green_right',1190),(19825,19825,'accessories/wearable_items/_exp09/ethernere_armors/snapons_pauldrons/ethernere_bracer_red_left',1190),(19826,19826,'accessories/wearable_items/_exp09/ethernere_armors/snapons_pauldrons/ethernere_bracer_green_left',1190),(19827,19827,'accessories/wearable_items/_exp09/ethernere_armors/vanguard_green/chest',1190),(19828,19828,'accessories/wearable_items/_exp09/ethernere_armors/vanguard_green/feet',1190),(19829,19829,'accessories/wearable_items/_exp09/ethernere_armors/vanguard_green/forearms',1190),(19830,19830,'accessories/wearable_items/_exp09/ethernere_armors/vanguard_green/hands',1190),(19831,19831,'accessories/wearable_items/_exp09/ethernere_armors/vanguard_green/hands_epic',1190),(19832,19832,'accessories/wearable_items/_exp09/ethernere_armors/vanguard_green/head',1190),(19833,19833,'accessories/wearable_items/_exp09/ethernere_armors/vanguard_green/left',1190),(19834,19834,'accessories/wearable_items/_exp09/ethernere_armors/vanguard_green/legs',1190),(19835,19835,'accessories/wearable_items/_exp09/ethernere_armors/vanguard_green/legs_noskirt',1190),(19836,19836,'accessories/wearable_items/_exp09/ethernere_armors/vanguard_green/right',1190),(19837,19837,'accessories/wearable_items/_exp09/ethernere_armors/vanguard_green/shoulders',1190),(19838,19838,'accessories/wearable_items/_exp09/ethernere_armors/vanguard_green/shoulders_epic',1190),(19839,19839,'accessories/wearable_items/_exp09/ethernere_armors/vanguard_green/shoulders_nopauldrons',1190),(19840,19840,'accessories/wearable_items/_exp09/ethernere_armors/vanguard_green/skirt',1190),(19841,19841,'accessories/wearable_items/_exp09/ethernere_armors/vanguard_red/chest',1190),(19842,19842,'accessories/wearable_items/_exp09/ethernere_armors/vanguard_red/feet',1190),(19843,19843,'accessories/wearable_items/_exp09/ethernere_armors/vanguard_red/forearms',1190),(19844,19844,'accessories/wearable_items/_exp09/ethernere_armors/vanguard_red/hands',1190),(19845,19845,'accessories/wearable_items/_exp09/ethernere_armors/vanguard_red/hands_epic',1190),(19846,19846,'accessories/wearable_items/_exp09/ethernere_armors/vanguard_red/head',1190),(19847,19847,'accessories/wearable_items/_exp09/ethernere_armors/vanguard_red/left',1190),(19848,19848,'accessories/wearable_items/_exp09/ethernere_armors/vanguard_red/legs',1190),(19849,19849,'accessories/wearable_items/_exp09/ethernere_armors/vanguard_red/legs_noskirt',1190),(19850,19850,'accessories/wearable_items/_exp09/ethernere_armors/vanguard_red/right',1190),(19851,19851,'accessories/wearable_items/_exp09/ethernere_armors/vanguard_red/shoulders',1190),(19852,19852,'accessories/wearable_items/_exp09/ethernere_armors/vanguard_red/shoulders_epic',1190),(19853,19853,'accessories/wearable_items/_exp09/ethernere_armors/vanguard_red/shoulders_nopauldrons',1190),(19854,19854,'accessories/wearable_items/_exp09/ethernere_armors/vanguard_red/skirt',1190),(19855,19855,'accessories/wearable_items/cloak/exp09/cloak_ethernere_short_red',1190),(19856,19856,'accessories/wearable_items/cloak/exp09/cloak_ethernere_long_red',1190),(19857,19857,'accessories/wearable_items/cloak/exp09/cloak_ethernere_short_green',1190),(19858,19858,'accessories/wearable_items/cloak/exp09/cloak_ethernere_long_green',1190),(19859,19859,'staticobjects/chests/dpo_mship_chest01',1190),(19860,19860,'staticobjects/chests/dpo_mship_chest02',1190),(19861,19861,'staticobjects/crates/dpo_mship_crate01',1190),(19862,19862,'staticobjects/crates/dpo_mship_crate02',1190),(19863,19863,'_exp09/objects/exp09_rgn_plains_of_obol/po_bush01_dpo',1190),(19864,19864,'_exp09/objects/exp09_rgn_plains_of_obol/po_plant02_dpo',1190),(19865,19865,'accessories/wearable_items/profesion_hats/crown_antons/crown_antons',1190),(19866,19866,'accessories/wearable_items/_exp09/elder_age/magus_gi/chest',1190),(19867,19867,'accessories/wearable_items/_exp09/elder_age/magus_gi/feet',1190),(19868,19868,'accessories/wearable_items/_exp09/elder_age/magus_gi/legs',1190),(19869,19869,'accessories/wearable_items/_exp09/elder_age/magus_gi/shoulders',1190),(19870,19870,'accessories/wearable_items/cloak/exp09/cloak_ethernere_short_firiona',1190),(19871,19871,'accessories/wearable_items/cloak/exp09/cloak_ethernere_long_firiona',1190),(19872,19872,'staticobjects/soe_wallet/blossom_bdrm_bed_sleigh_set01',1190),(19873,19873,'staticobjects/soe_wallet/blossom_living_sofa_large_set02',1190),(19874,19874,'staticobjects/soe_wallet/blossom_living_sofa_large_w_pillows_set02',1190),(19875,19875,'staticobjects/soe_wallet/blossom_living_sofa_small_set02',1190),(19876,19876,'staticobjects/soe_wallet/blossom_dining_chair02_set02',1190),(19877,19877,'staticobjects/soe_wallet/blossom_living_sofa_small_w_pillows_set02',1190),(19878,19878,'staticobjects/soe_wallet/blossom_office_chair01_set02',1190),(19879,19879,'staticobjects/soe_wallet/blossom_vanity_stool01_set02',1190),(19880,19880,'staticobjects/soe_wallet/blossom_dining_bench_set01',1190),(19881,19881,'staticobjects/soe_wallet/blossom_dining_chair_set01',1190),(19882,19882,'staticobjects/soe_wallet/red_bdrm_bed_sleigh_set01',1190),(19883,19883,'staticobjects/soe_wallet/red_dining_bench_set01',1190),(19884,19884,'staticobjects/soe_wallet/red_dining_chair_set01',1190),(19885,19885,'staticobjects/soe_wallet/red_living_sofa_small_set02',1190),(19886,19886,'staticobjects/soe_wallet/red_living_sofa_large_w_pillows_set02',1190),(19887,19887,'staticobjects/soe_wallet/red_living_sofa_small_w_pillows_set02',1190),(19888,19888,'staticobjects/soe_wallet/red_dining_chair02_set02',1190),(19889,19889,'staticobjects/soe_wallet/red_living_sofa_large_set02',1190),(19890,19890,'staticobjects/soe_wallet/red_vanity_stool01_set02',1190),(19891,19891,'staticobjects/soe_wallet/red_office_chair01_set02',1190),(19892,19892,'_exp09/objects/drinals/drinals_tower_collision',1190),(19893,19893,'_exp09/characters/tool_users/ogre_ogguk/ogre_female_ogguk_fur',1190),(19894,19894,'_exp09/characters/tool_users/ogre_ogguk/ogre_female_ogguk_scout',1190),(19895,19895,'staticobjects/soe_wallet/curtains_plain_dark',1190),(19896,19896,'_exp09/objects/dpo/housing/elven_dresser',1190),(19897,19897,'_exp09/objects/dpo/housing/elven_stool',1190),(19898,19898,'_exp09/objects/dpo/housing/elven_table',1190),(19899,19899,'_exp09/objects/dpo/housing/elven_tavern_table',1190),(19900,19900,'_exp09/objects/dpo/housing/miners_lucky_crystal_pile',1190),(19901,19901,'_exp09/objects/dpo/housing/miners_lucky_geode_pile',1190),(19902,19902,'_exp09/objects/dpo/housing/alchemists_burner',1190),(19903,19903,'_exp09/objects/dpo/housing/alchemists_burner_filtration',1190),(19904,19904,'_exp09/objects/dpo/housing/alchemists_hourglass',1190),(19905,19905,'_exp09/objects/dpo/housing/alchemists_vial_stand',1190),(19906,19906,'_exp09/objects/dpo/housing/ancient_bar_shelf',1190),(19907,19907,'_exp09/objects/dpo/housing/ancient_bar_table',1190),(19908,19908,'_exp09/objects/dpo/housing/antique_stone_stove',1190),(19909,19909,'_exp09/objects/dpo/housing/apple_bowl',1190),(19910,19910,'_exp09/objects/dpo/housing/coffin_pillow',1190),(19911,19911,'_exp09/objects/dpo/housing/decorative_cursed_chalice',1190),(19912,19912,'_exp09/objects/dpo/housing/dwarven_chandalier',1190),(19913,19913,'_exp09/objects/dpo/housing/dwarven_firepot',1190),(19914,19914,'_exp09/objects/dpo/housing/dwarven_throne',1190),(19915,19915,'_exp09/objects/dpo/housing/dwarven_totem',1190),(19916,19916,'_exp09/objects/dpo/housing/dwarven_work_stool',1190),(19917,19917,'_exp09/objects/dpo/housing/dwarven_work_table',1190),(19918,19918,'_exp09/objects/dpo/housing/elven_bed',1190),(19919,19919,'_exp09/objects/dpo/housing/elven_bedside_table',1190),(19920,19920,'_exp09/objects/dpo/housing/elven_bookcase',1190),(19921,19921,'_exp09/objects/dpo/housing/elven_cabinet',1190),(19922,19922,'_exp08/characters/monsters/komodo/komodo_evil_idle',1190),(19923,19923,'_exp08/characters/monsters/komodo/komodo_evil_idle_blackred',1190),(19924,19924,'_exp08/characters/monsters/komodo/komodo_evil_idle_blue',1190),(19925,19925,'_exp08/characters/monsters/komodo/komodo_evil_idle_green',1190),(19926,19926,'_exp08/characters/monsters/komodo/komodo_evil_idle_red',1190),(19927,19927,'accessories/wieldable_items/shields/exp09/exp09_kite_ethernere',1190),(19928,19928,'_exp09/characters/monsters/skirth/skirth_boss',1190),(19929,19929,'_exp09/characters/monsters/tirun_enforcer/tirun_enforcer_boss',1190),(19930,19930,'_exp09/objects/drinals/drinal_ethernere_bell_static',1190),(19931,19931,'_exp09/objects/drinals/drinal_ethernere_bell_tolling',1190),(19932,19932,'_exp09/characters/tool_users/lizardmen_2012/lizardman_boss_scout',1190),(19933,19933,'_exp09/characters/tool_users/lizardmen_2012/lizardman_boss_shaman',1190),(19934,19934,'creatures/mounts/prestige_cloud_pad',1190),(19935,19935,'creatures/mounts/fear_cloud_pad',1190),(19936,19936,'accessories/wieldable_items/weapons/exp09/2h_sword/exp09_axe_2h_ethernere_sc',1190),(19937,19937,'staticobjects/tcg/soelive2012_painting',1190),(19938,19938,'accessories/wieldable_items/weapons/exp09/1h_crush/1h_hammer_were',1190),(19939,19939,'accessories/wieldable_items/weapons/exp09/1h_sword/1h_axe_were',1190),(19940,19940,'accessories/wieldable_items/weapons/exp07/1h_sword/goth_axe_1_hand_01_redgold',1190),(19941,19941,'accessories/wieldable_items/weapons/exp07/shield/goth_shield_01_redgold',1190),(19942,19942,'creatures/monsters/evileye_red_flyer',1190),(19943,19943,'accessories/wearable_items/_exp09/mummy_wraps_ancient/chest',1190),(19944,19944,'accessories/wearable_items/_exp09/mummy_wraps_ancient/hands',1190),(19945,19945,'accessories/wearable_items/_exp09/mummy_wraps_ancient/head',1190),(19946,19946,'accessories/wearable_items/_exp09/mummy_wraps_ancient/legs',1190),(19947,19947,'accessories/wearable_items/_exp09/mummy_wraps_ancient/shoulders',1190),(19948,19948,'accessories/wearable_items/_exp09/mummy_wraps_ancient/snap_ons_dont_use/chest_waist',1190),(19949,19949,'accessories/wearable_items/_exp09/mummy_wraps_ancient/snap_ons_dont_use/head_sarnak',1190),(19950,19950,'creatures/mounts/bird_mount/evil/bird_evil_green',1190),(19951,19951,'creatures/mounts/bird_mount/evil/bird_evil_red',1190),(19952,19952,'creatures/mounts/bird_mount/evil/bird_evil_yellow',1190),(19953,19953,'_exp09/characters/monsters/lion_new/lion_new_base',1190),(19954,19954,'_exp09/characters/tool_users/gehein_houseplushie/gehein_houseplushie',1190),(19955,19955,'_exp09/characters/tool_users/elemental_solusek/elemental_solusek',1190),(19956,19956,'_exp09/characters/monsters/elemental_storm/elemental_storm',1190),(19957,19957,'_exp09/characters/monsters/elemental_storm/elemental_storm_upgrade',1190),(19958,19958,'_exp09/characters/tool_users/elemental_solusek/elemental_solusek_daughter',1190),(19959,19959,'_exp09/characters/tool_users/elemental_solusek/elemental_solusek_upgraded',1190),(19960,19960,'staticobjects/tcg/tcg_cheesecart',1190),(19961,19961,'staticobjects/tcg/tcg_tapestry01_design_lavawalker',1190),(19962,19962,'staticobjects/tcg/tcg_tapestry01_design_dragonhunter',1190),(19963,19963,'_exp09/characters/monsters/water_spout/water_spout',1190),(19964,19964,'creatures/mounts/bird_mount/evil/bird_evil_america',1190),(19965,19965,'_exp09/characters/monsters/dervish_necromantic/dervish_necromantic_pestillencevortex',1190),(19966,19966,'_exp09/characters/monsters/dervish_necromantic/dervish_necromantic_pestillencevortex_upgrade',1190),(19967,19967,'_exp09/characters/monsters/dervish_necromantic/dervish_necromantic_redswarmingdeath',1190),(19968,19968,'_exp09/characters/monsters/dervish_necromantic/dervish_necromantic_redswarmingdeath_upgrade',1190),(19969,19969,'_exp09/objects/exp09_rgn_eidolon_jungle/po_soul_spire_lrg_active',1190),(19970,19970,'_exp09/objects/exp09_rgn_eidolon_jungle/po_soul_spire_lrg_inactive',1190),(19971,19971,'_exp09/objects/exp09_rgn_eidolon_jungle/po_soul_spire_sml_active',1190),(19972,19972,'_exp09/objects/exp09_rgn_eidolon_jungle/po_soul_spire_sml_inactive',1190),(19973,19973,'_exp09/objects/exp09_rgn_eidolon_jungle/turbillion_vestibule_active',1190),(19974,19974,'_exp09/objects/exp09_rgn_eidolon_jungle/turbillion_vestibule_active_no_rotation',1190),(19975,19975,'_exp09/objects/exp09_rgn_eidolon_jungle/turbillion_vestibule_inactive',1190),(19976,19976,'accessories/wieldable_items/weapons/exp09/1h_sword/1h_axe_ethernere',1190),(19977,19977,'accessories/npc_wearables/ogre_ogguk/head_ogre_ogguk',1190),(19978,19978,'accessories/npc_wearables/ogre_ogguk/ogre_ogguk_pauldron_left',1190),(19979,19979,'accessories/npc_wearables/ogre_ogguk/ogre_ogguk_pauldron_right',1190),(19980,19980,'accessories/wieldable_items/shields/exp09/exp09_shield_buckler_ethernere',1190),(19981,19981,'accessories/wieldable_items/weapons/exp09/2h_sword/exp09_2h_axe_ethernere',1190),(19982,19982,'_exp09/objects/exp09_rgn_eidolon_jungle/dun_temple_of_faceless_feergate',1190),(19983,19983,'_exp09/objects/exp09_rgn_eidolon_jungle/dun_temple_of_faceless_feergate_fx',1190),(19984,19984,'staticobjects/_exp09/dpo_exp09_staff_drinal',1190),(19985,19985,'_exp09/objects/exp09_rgn_eidolon_jungle/wooden_barricade_long',1190),(19986,19986,'_exp09/objects/exp09_rgn_eidolon_jungle/wooden_barricade_short',1190),(19987,19987,'accessories/wieldable_items/weapons/exp09/1h_crush/hammer_fantasy_bluebronze_epic',1190),(19988,19988,'accessories/wieldable_items/weapons/exp09/1h_crush/hammer_fantasy_greengold_epic',1190),(19989,19989,'accessories/wieldable_items/weapons/exp09/1h_crush/hammer_fantasy_rediron_epic',1190),(19990,19990,'accessories/wieldable_items/weapons/exp09/1h_crush/mace_fantasy_bluebronze_epic',1190),(19991,19991,'accessories/wieldable_items/weapons/exp09/1h_crush/mace_fantasy_greengold_epic',1190),(19992,19992,'accessories/wieldable_items/weapons/exp09/1h_crush/mace_fantasy_rediron_epic',1190),(19993,19993,'accessories/wieldable_items/weapons/exp09/1h_crush/wand_fantasy_bluebronze_epic',1190),(19994,19994,'accessories/wieldable_items/weapons/exp09/1h_crush/wand_fantasy_greengold_epic',1190),(19995,19995,'accessories/wieldable_items/weapons/exp09/1h_crush/wand_fantasy_rediron_epic',1190),(19996,19996,'accessories/wieldable_items/weapons/exp09/1h_pierce/dagger_hunter_fantasy_bluebronze_epic',1190),(19997,19997,'accessories/wieldable_items/weapons/exp09/1h_pierce/dagger_hunter_fantasy_greengold_epic',1190),(19998,19998,'accessories/wieldable_items/weapons/exp09/1h_pierce/dagger_hunter_fantasy_rediron_epic',1190),(19999,19999,'accessories/wieldable_items/weapons/exp09/1h_sword/shortsword_fantasy_bluebronze_epic',1190),(20000,20000,'accessories/wieldable_items/weapons/exp09/1h_sword/shortsword_fantasy_greengold_epic',1190),(20001,20001,'accessories/wieldable_items/weapons/exp09/1h_sword/shortsword_fantasy_rediron_epic',1190),(20002,20002,'accessories/wieldable_items/weapons/exp09/1h_sword/sword_fantasy_bluebronze_epic',1190),(20003,20003,'accessories/wieldable_items/weapons/exp09/1h_sword/sword_fantasy_greengold_epic',1190),(20004,20004,'accessories/wieldable_items/weapons/exp09/1h_sword/sword_fantasy_rediron_epic',1190),(20005,20005,'accessories/wieldable_items/weapons/exp09/2h_sword/2hsword_fantasy_bluebronze_epic',1190),(20006,20006,'accessories/wieldable_items/weapons/exp09/2h_sword/2hsword_fantasy_greengold_epic',1190),(20007,20007,'accessories/wieldable_items/weapons/exp09/2h_sword/2hsword_fantasy_rediron_epic',1190),(20008,20008,'accessories/wieldable_items/weapons/exp09/bow/longbow_fantasy_bluebronze_epic',1190),(20009,20009,'accessories/wieldable_items/weapons/exp09/bow/longbow_fantasy_greengold_epic',1190),(20010,20010,'accessories/wieldable_items/weapons/exp09/bow/longbow_fantasy_rediron_epic',1190),(20011,20011,'_exp09/characters/monsters/elemental_storm/elemental_storm_epic',1190),(20012,20012,'_exp09/characters/monsters/elemental_storm/elemental_storm_upgrade_epic',1190),(20013,20013,'_exp09/objects/exp09_dun_temple_of_faceless/brazier_01_red',1190),(20014,20014,'_exp09/objects/exp09_dun_temple_of_faceless/brazier_01_white',1190),(20015,20015,'_exp09/objects/exp09_dun_temple_of_faceless/sconce_01_red',1190),(20016,20016,'_exp09/objects/exp09_dun_temple_of_faceless/sconce_01_white',1190),(20017,20017,'_exp09/objects/exp09_dun_temple_of_faceless/sconce_02_red',1190),(20018,20018,'_exp09/objects/exp09_dun_temple_of_faceless/sconce_02_white',1190),(20019,20019,'_exp09/objects/exp09_dun_temple_of_faceless/morrel_statue',1190),(20020,20020,'_exp09/objects/exp09_dun_temple_of_faceless/terris_statue',1190),(20021,20021,'creatures/mounts/wyvern_mount/wyvern_mount_ethernere',1190),(20022,20022,'_exp09/characters/monsters/carnivorous_ape_boss/carnivorous_ape_boss_perched',1190),(20023,20023,'staticobjects/weapons/dpo_beastlord_silver',1190),(20024,20024,'staticobjects/weapons/dpo_beastlord_mythical',1190),(20025,20025,'_exp09/characters/monsters/lion_winged/lion_winged_male',1190),(20026,20026,'staticobjects/_exp09/po_soul_spire_sml_dpo',1190),(20027,20027,'staticobjects/_exp09/drinal_monolith_dpo',1190),(20028,20028,'staticobjects/_exp09/dun_temple_of_faceless_brazier01_dpo',1190),(20029,20029,'staticobjects/_exp09/ej_temple_staff01_dpo',1190),(20030,20030,'staticobjects/_exp09/exp09_rgn_ej_oggok01_brazier01_dpo',1190),(20031,20031,'staticobjects/_exp09/po_lightsource_brazier_were01_dpo',1190),(20032,20032,'staticobjects/_exp09/po_rug_outdoor_orange01_dpo',1190),(20033,20033,'_exp09/objects/exp09_rgn_eidolon_jungle/ej_temple_cyluuh_totem01',1190),(20034,20034,'_exp09/objects/exp09_rgn_eidolon_jungle/ej_temple_cyluuh_totem01_ghost',1190),(20035,20035,'_exp09/objects/exp09_rgn_eidolon_jungle/ej_temple_staff01',1190),(20036,20036,'_exp09/objects/exp09_rgn_eidolon_jungle/ej_temple_yulsluu_key_post01',1190),(20037,20037,'_exp09/objects/exp09_rgn_eidolon_jungle/ej_temple_yulsluu_key_post02',1190),(20038,20038,'accessories/wearable_items/cloak/exp09/cloak_drinals_castle',1190),(20039,20039,'_exp09/objects/exp09_rgn_eidolon_jungle/ej_hand_totem',1190),(20040,20040,'_exp09/objects/exp09_rgn_eidolon_jungle/oggok_pole_with_flag',1190),(20041,20041,'_exp09/objects/exp09_rgn_eidolon_jungle/oggok_weapon_cache_table',1190),(20042,20042,'_exp09/objects/exp09_rgn_eidolon_jungle/oggok_weapon_cot',1190),(20043,20043,'_exp09/objects/drinals/drinals_soulwell_blue_01',1190),(20044,20044,'_exp09/objects/drinals/drinals_soulwell_gold_01',1190),(20045,20045,'_exp09/objects/drinals/drinals_soulwell_green_01',1190),(20046,20046,'_exp09/objects/drinals/drinals_soulwell_red_01',1190),(20047,20047,'_exp09/objects/drinals/drinals_soulwell_blue_holder_01',1190),(20048,20048,'_exp09/objects/drinals/drinals_soulwell_gold_holder_01',1190),(20049,20049,'_exp09/objects/drinals/drinals_soulwell_green_holder_01',1190),(20050,20050,'_exp09/objects/drinals/drinals_soulwell_red_holder_01',1190),(20051,20051,'_exp09/objects/drinals/drinals_soulwell_blue_orb_01',1190),(20052,20052,'_exp09/objects/drinals/drinals_soulwell_gold_orb_01',1190),(20053,20053,'_exp09/objects/drinals/drinals_soulwell_green_orb_01',1190),(20054,20054,'_exp09/objects/drinals/drinals_soulwell_red_orb_01',1190),(20055,20055,'_exp09/objects/harvested/bush',1190),(20056,20056,'_exp09/objects/harvested/den',1190),(20057,20057,'_exp09/objects/harvested/gems',1190),(20058,20058,'_exp09/objects/harvested/log',1190),(20059,20059,'_exp09/objects/harvested/ore',1190),(20060,20060,'_exp09/objects/harvested/roots',1190),(20061,20061,'accessories/wieldable_items/weapons/exp09/2h_sword/exp09_2h_sword_ethernere',1190),(20062,20062,'_exp09/objects/exp09_rgn_eidolon_jungle/ej_anchor_base',1190),(20063,20063,'accessories/wieldable_items/weapons/exp09/1h_sword/exp09_1h_sword_ethernere',1190),(20064,20064,'_exp09/objects/exp09_rgn_plains_of_obol/po_chest_large_ornate01',1190),(20065,20065,'_exp09/objects/exp09_rgn_plains_of_obol/po_chest_small_ornate01',1190),(20066,20066,'_exp09/objects/exp09_rgn_plains_of_obol/po_crate_open01',1190),(20067,20067,'_exp09/objects/exp09_rgn_plains_of_obol/po_horde_burrowpile01',1190),(20068,20068,'_exp09/objects/exp09_rgn_plains_of_obol/po_scroll_single01',1190),(20069,20069,'_exp09/objects/exp09_rgn_plains_of_obol/po_scrolls_group01',1190),(20070,20070,'_exp09/objects/exp09_rgn_plains_of_obol/po_scrolls_group02',1190),(20071,20071,'_exp09/objects/exp09_rgn_plains_of_obol/po_scrolls_group03',1190),(20072,20072,'_exp09/objects/exp09_rgn_plains_of_obol/turbillion_vestibule01',1190),(20073,20073,'_exp09/objects/exp09_rgn_plains_of_obol/turbillion_vestibule01_noglow',1190),(20074,20074,'_exp09/objects/drinals/dc_books_single01',1190),(20075,20075,'_exp09/objects/drinals/dc_books_single02',1190),(20076,20076,'_exp09/objects/drinals/dc_books_single03',1190),(20077,20077,'_exp09/objects/drinals/dc_scroll_single02',1190),(20078,20078,'_exp09/objects/drinals/dc_scrolls_group03',1190),(20079,20079,'_exp09/objects/drinals/dc_scrolls_group04',1190),(20080,20080,'_exp09/objects/exp09_rgn_eidolon_jungle/exp09_rgn_ej_oggok01_banner01',1190),(20081,20081,'_exp09/objects/exp09_rgn_eidolon_jungle/exp09_rgn_ej_oggok01_forge01',1190),(20082,20082,'_exp09/objects/exp09_rgn_eidolon_jungle/exp09_rgn_ej_oggok01_forge02',1190),(20083,20083,'_exp09/objects/exp09_rgn_eidolon_jungle/dun_temple_of_faceless_brazier01',1190),(20084,20084,'_exp09/objects/exp09_rgn_eidolon_jungle/dun_temple_of_faceless_brazier01_white',1190),(20085,20085,'_exp09/objects/exp09_rgn_eidolon_jungle/dun_temple_of_faceless_oblsq01',1190),(20086,20086,'_exp09/objects/exp09_rgn_eidolon_jungle/dun_temple_of_faceless_sconce01',1190),(20087,20087,'_exp09/objects/exp09_rgn_eidolon_jungle/dun_temple_of_faceless_sconce01_white',1190),(20088,20088,'_exp09/objects/exp09_rgn_eidolon_jungle/dun_temple_of_faceless_sconce02',1190),(20089,20089,'_exp09/objects/exp09_rgn_eidolon_jungle/dun_temple_of_faceless_sconce02_white',1190),(20090,20090,'_exp09/objects/exp09_rgn_eidolon_jungle/dun_temple_of_faceless_urn01',1190),(20091,20091,'_exp09/objects/exp09_rgn_eidolon_jungle/dun_temple_of_faceless_urn02',1190),(20092,20092,'_exp09/objects/exp09_rgn_eidolon_jungle/dun_temple_of_faceless_urn03',1190),(20093,20093,'_exp09/objects/exp09_rgn_eidolon_jungle/dun_temple_of_faceless_urn04',1190),(20094,20094,'_exp09/objects/exp09_rgn_eidolon_jungle/dun_temple_of_faceless_urn05',1190),(20095,20095,'_exp09/objects/exp09_rgn_eidolon_jungle/ej_anchor_base01',1190),(20096,20096,'accessories/wearable_items/cloak/exp09/cloak_gemstone_armor_red_split',1190),(20097,20097,'accessories/wearable_items/cloak/exp09/cloak_gemstone_armor_red_inset',1190),(20098,20098,'accessories/wearable_items/cloak/exp09/cloak_gemstone_armor_red_3strap',1190),(20099,20099,'accessories/wearable_items/cloak/exp09/cloak_gemstone_armor_red_square',1190),(20100,20100,'accessories/wearable_items/_exp09/gemstone_armor/red/chain/chest',1190),(20101,20101,'accessories/wearable_items/_exp09/gemstone_armor/red/chain/feet',1190),(20102,20102,'accessories/wearable_items/_exp09/gemstone_armor/red/chain/forearms',1190),(20103,20103,'accessories/wearable_items/_exp09/gemstone_armor/red/chain/hands',1190),(20104,20104,'accessories/wearable_items/_exp09/gemstone_armor/red/chain/head',1190),(20105,20105,'accessories/wearable_items/_exp09/gemstone_armor/red/chain/legs',1190),(20106,20106,'accessories/wearable_items/_exp09/gemstone_armor/red/chain/shoulders',1190),(20107,20107,'accessories/wearable_items/_exp09/gemstone_armor/red/chain/shoulders_epic',1190),(20108,20108,'accessories/wearable_items/_exp09/gemstone_armor/red/gi_heavycloth/chest',1190),(20109,20109,'accessories/wearable_items/_exp09/gemstone_armor/red/gi_heavycloth/feet',1190),(20110,20110,'accessories/wearable_items/_exp09/gemstone_armor/red/gi_heavycloth/hands',1190),(20111,20111,'accessories/wearable_items/_exp09/gemstone_armor/red/gi_heavycloth/head',1190),(20112,20112,'accessories/wearable_items/_exp09/gemstone_armor/red/gi_heavycloth/legs',1190),(20113,20113,'accessories/wearable_items/_exp09/gemstone_armor/red/gi_heavycloth/shoulders',1190),(20114,20114,'accessories/wearable_items/_exp09/gemstone_armor/red/gi_heavycloth/shoulders_epic',1190),(20115,20115,'accessories/wearable_items/_exp09/gemstone_armor/red/gi_heavycloth/skirt',1190),(20116,20116,'accessories/wearable_items/_exp09/gemstone_armor/red/gi_heavycloth/belt/skirt 2',1190),(20117,20117,'accessories/wearable_items/_exp09/gemstone_armor/red/gi_heavycloth/belt/skirt',1190),(20118,20118,'accessories/wearable_items/_exp09/gemstone_armor/red/leather/chest',1190),(20119,20119,'accessories/wearable_items/_exp09/gemstone_armor/red/leather/feet',1190),(20120,20120,'accessories/wearable_items/_exp09/gemstone_armor/red/leather/forearms',1190),(20121,20121,'accessories/wearable_items/_exp09/gemstone_armor/red/leather/hands',1190),(20122,20122,'accessories/wearable_items/_exp09/gemstone_armor/red/leather/head',1190),(20123,20123,'accessories/wearable_items/_exp09/gemstone_armor/red/leather/head_hood',1190),(20124,20124,'accessories/wearable_items/_exp09/gemstone_armor/red/leather/legs',1190),(20125,20125,'accessories/wearable_items/_exp09/gemstone_armor/red/leather/legs_noskirt',1190),(20126,20126,'accessories/wearable_items/_exp09/gemstone_armor/red/leather/shoulders',1190),(20127,20127,'accessories/wearable_items/_exp09/gemstone_armor/red/leather/shoulders_epic',1190),(20128,20128,'accessories/wearable_items/_exp09/gemstone_armor/red/leather/skirt',1190),(20129,20129,'accessories/wearable_items/_exp09/gemstone_armor/red/robe/chest',1190),(20130,20130,'accessories/wearable_items/_exp09/gemstone_armor/red/robe/chest_epic',1190),(20131,20131,'accessories/wearable_items/_exp09/gemstone_armor/red/robe/feet',1190),(20132,20132,'accessories/wearable_items/_exp09/gemstone_armor/red/robe/hands',1190),(20133,20133,'accessories/wearable_items/_exp09/gemstone_armor/red/robe/head',1190),(20134,20134,'accessories/wearable_items/_exp09/gemstone_armor/red/robe/head_collar',1190),(20135,20135,'accessories/wearable_items/_exp09/gemstone_armor/red/robe/head_crystalcirclet',1190),(20136,20136,'accessories/wearable_items/_exp09/gemstone_armor/red/robe/pants',1190),(20137,20137,'accessories/wearable_items/_exp09/gemstone_armor/red/robe/skirt',1190),(20138,20138,'accessories/wearable_items/_exp09/gemstone_armor/red/snapons/bracer_left',1190),(20139,20139,'accessories/wearable_items/_exp09/gemstone_armor/red/snapons/bracer_right',1190),(20140,20140,'accessories/wearable_items/_exp09/gemstone_armor/red/snapons/head_chain_epic',1190),(20141,20141,'accessories/wearable_items/_exp09/gemstone_armor/red/snapons/head_vanguard_epic',1190),(20142,20142,'accessories/wearable_items/_exp09/gemstone_armor/red/snapons/pauldron_chain_left',1190),(20143,20143,'accessories/wearable_items/_exp09/gemstone_armor/red/snapons/pauldron_chain_right',1190),(20144,20144,'accessories/wearable_items/_exp09/gemstone_armor/red/snapons/pauldron_gi_left',1190),(20145,20145,'accessories/wearable_items/_exp09/gemstone_armor/red/snapons/pauldron_gi_right',1190),(20146,20146,'accessories/wearable_items/_exp09/gemstone_armor/red/snapons/pauldron_heavy_left',1190),(20147,20147,'accessories/wearable_items/_exp09/gemstone_armor/red/snapons/pauldron_heavy_right',1190),(20148,20148,'accessories/wearable_items/_exp09/gemstone_armor/red/snapons/pauldron_leather_left',1190),(20149,20149,'accessories/wearable_items/_exp09/gemstone_armor/red/snapons/pauldron_leather_right',1190),(20150,20150,'accessories/wearable_items/_exp09/gemstone_armor/red/snapons/pauldron_robe_left',1190),(20151,20151,'accessories/wearable_items/_exp09/gemstone_armor/red/snapons/pauldron_robe_right',1190),(20152,20152,'accessories/wearable_items/_exp09/gemstone_armor/red/snapons/shinguard_left',1190),(20153,20153,'accessories/wearable_items/_exp09/gemstone_armor/red/snapons/shinguard_right',1190),(20154,20154,'accessories/wearable_items/_exp09/gemstone_armor/red/vanguard/chest',1190),(20155,20155,'accessories/wearable_items/_exp09/gemstone_armor/red/vanguard/feet',1190),(20156,20156,'accessories/wearable_items/_exp09/gemstone_armor/red/vanguard/forearms',1190),(20157,20157,'accessories/wearable_items/_exp09/gemstone_armor/red/vanguard/hands',1190),(20158,20158,'accessories/wearable_items/_exp09/gemstone_armor/red/vanguard/head',1190),(20159,20159,'accessories/wearable_items/_exp09/gemstone_armor/red/vanguard/head_epic',1190),(20160,20160,'accessories/wearable_items/_exp09/gemstone_armor/red/vanguard/left',1190),(20161,20161,'accessories/wearable_items/_exp09/gemstone_armor/red/vanguard/legs',1190),(20162,20162,'accessories/wearable_items/_exp09/gemstone_armor/red/vanguard/legs_epic',1190),(20163,20163,'accessories/wearable_items/_exp09/gemstone_armor/red/vanguard/legs_noskirt',1190),(20164,20164,'accessories/wearable_items/_exp09/gemstone_armor/red/vanguard/right',1190),(20165,20165,'accessories/wearable_items/_exp09/gemstone_armor/red/vanguard/shoulders',1190),(20166,20166,'accessories/wearable_items/_exp09/gemstone_armor/red/vanguard/shoulders_epic',1190),(20167,20167,'accessories/wearable_items/_exp09/gemstone_armor/red/vanguard/shoulders_nopauldrons',1190),(20168,20168,'accessories/wearable_items/_exp09/gemstone_armor/red/vanguard/skirt',1190),(20169,20169,'_exp09/objects/ethernere_portal_fx',1190),(20170,20170,'staticobjects/_exp09/firiona_tapestry01',1190),(20171,20171,'_exp09/objects/exp09_rgn_eidolon_jungle/ej_fear_tree_root',1190),(20172,20172,'creatures/pets/frostfell_gumdrop/frostfell_gumdrop_blue',1190),(20173,20173,'creatures/pets/frostfell_gumdrop/frostfell_gumdrop_green',1190),(20174,20174,'creatures/pets/frostfell_gumdrop/frostfell_gumdrop_orange',1190),(20175,20175,'creatures/pets/frostfell_gumdrop/frostfell_gumdrop_pink',1190),(20176,20176,'creatures/pets/frostfell_gumdrop/frostfell_gumdrop_red',1190),(20177,20177,'creatures/pets/frostfell_gumdrop/frostfell_gumdrop_yellow',1190),(20178,20178,'_exp09/objects/exp09_rgn_eidolon_jungle/oggok_weapon_cache',1190),(20179,20179,'creatures/pets/frostfell_gumdrop/frostfell_gumdrop_black',1190),(20180,20180,'creatures/pets/frostfell_gumdrop/frostfell_gumdrop_violet',1190),(20181,20181,'creatures/pets/frostfell_gumdrop/frostfell_gumdrop_void',1190),(20182,20182,'staticobjects/tcg/tcg_painting73_belligerence',1190),(20183,20183,'staticobjects/tcg/tcg_painting71_preservation',1190),(20184,20184,'staticobjects/tcg/tcg_painting70_revitalize',1190),(20185,20185,'staticobjects/tcg/tcg_painting74_telluricfury',1190),(20186,20186,'staticobjects/tcg/tcg_painting72_rapidstab',1190),(20187,20187,'staticobjects/tcg/tcg_painting_lonset15',1190),(20188,20188,'_exp09/objects/exp09_rgn_eidolon_jungle/oggok_rallos_helm_statue',1190),(20189,20189,'_exp09/objects/exp09_rgn_eidolon_jungle/exp09_rgn_ej_oggok01_banner02',1190),(20190,20190,'_exp09/objects/exp09_rgn_plains_of_obol/po_rug_purple01',1190),(20191,20191,'_exp09/objects/exp09_rgn_plains_of_obol/po_rug_blue01',1190),(20192,20192,'_exp09/objects/exp09_rgn_plains_of_obol/po_table_scientific01',1190),(20193,20193,'_exp09/objects/exp09_rgn_plains_of_obol/clothspinners_clothrack01',1190),(20194,20194,'_exp09/objects/exp09_rgn_plains_of_obol/weaponrack_sword001',1190),(20195,20195,'_exp09/objects/exp09_rgn_plains_of_obol/df_objects_rug02',1190),(20196,20196,'_exp09/objects/exp09_dun_deepchelsith/exp09_dun_dpch_p05_crypt_long01',1190),(20197,20197,'_exp09/objects/exp09_dun_deepchelsith/exp09_dun_dpch_p05_crypt_short01',1190),(20198,20198,'_exp09/objects/exp09_dun_deepchelsith/exp09_dun_dpch_p05_crypt_vase01',1190),(20199,20199,'_exp09/objects/exp09_dun_deepchelsith/exp09_dun_dpch_p05_crypt_vase01_broken01',1190),(20200,20200,'creatures/mounts/wyvern_mount/wyvern_armored_drinal',1190),(20201,20201,'_exp09/objects/exp09_dun_wurmbones_end/exp09_dun_we01_crystal01fx',1190),(20202,20202,'_exp09/objects/exp09_dun_deepchelsith/exp09_dun_dpch_p05_crypt_vase02',1190),(20203,20203,'accessories/wearable_items/snapons/backpacks/backpack_bard/backpack_drum_swivel',1190),(20204,20204,'staticobjects/_exp09/dun_deepchelsith_crystal',1190),(20205,20205,'_exp09/objects/soulspire_comm_device01',1190),(20206,20206,'accessories/wieldable_items/weapons/exp09/1h_crush/1h_hammer_were_epic',1190),(20207,20207,'accessories/wieldable_items/weapons/exp09/1h_sword/1h_axe_were_epic',1190),(20208,20208,'_exp09/objects/drinals/drinals_collumn_blue',1190),(20209,20209,'_exp09/objects/drinals/drinals_collumn_red',1190),(20210,20210,'_exp09/objects/firiona_vie_rest_dpo',1190),(20211,20211,'accessories/wearable_items/snapons/backpacks/backpack_bard/backpack_bard',1190),(20212,20212,'_exp09/objects/dpo/housing/guildhall_trophy_tukaarak',1190),(20213,20213,'_exp09/objects/dpo/housing/guildhall_trophy_hraashna',1190),(20214,20214,'_exp09/objects/dpo/housing/guildhall_trophy_ventani',1190),(20215,20215,'_exp09/objects/dpo/housing/guildhall_trophy_nanzata',1190),(20216,20216,'_exp09/objects/dpo/housing/guildhall_trophy_drinal',1190),(20217,20217,'_exp09/objects/dpo/housing/guildhall_trophy_fear_ape',1190),(20218,20218,'_exp09/objects/dpo/housing/guildhall_trophy_baelon',1190),(20219,20219,'_exp09/objects/dpo/housing/guildhall_trophy_amalgamon',1190),(20220,20220,'accessories/wearable_items/_exp08/robe_elemental/water/left_shoulder_effect',1190),(20221,20221,'accessories/wearable_items/_exp08/robe_elemental/water/right_shoulder_effect',1190),(20222,20222,'accessories/wearable_items/_exp09/galvanic_armor/galvanic_set_combined/chest',1190),(20223,20223,'accessories/wearable_items/_exp09/galvanic_armor/galvanic_set_combined/chest_combined',1190),(20224,20224,'accessories/wearable_items/_exp09/galvanic_armor/galvanic_set_combined/chest_combined_epic1',1190),(20225,20225,'accessories/wearable_items/_exp09/galvanic_armor/galvanic_set_combined/chest_combined_epic2',1190),(20226,20226,'accessories/wearable_items/_exp09/galvanic_armor/galvanic_set_combined/feet',1190),(20227,20227,'accessories/wearable_items/_exp09/galvanic_armor/galvanic_set_combined/hands',1190),(20228,20228,'accessories/wearable_items/_exp09/galvanic_armor/galvanic_set_combined/head_goggles',1190),(20229,20229,'accessories/wearable_items/_exp09/galvanic_armor/galvanic_set_combined/legs',1190),(20230,20230,'accessories/wearable_items/_exp09/galvanic_armor/galvanic_set_combined/shoulders',1190),(20231,20231,'accessories/wearable_items/_exp09/galvanic_armor/galvanic_set_combined/skirt',1190),(20232,20232,'accessories/wearable_items/_exp09/galvanic_armor/galvanic_set_combined_brown/chest',1190),(20233,20233,'accessories/wearable_items/_exp09/galvanic_armor/galvanic_set_combined_brown/chest_combined',1190),(20234,20234,'accessories/wearable_items/_exp09/galvanic_armor/galvanic_set_combined_brown/chest_combined_epic1',1190),(20235,20235,'accessories/wearable_items/_exp09/galvanic_armor/galvanic_set_combined_brown/chest_combined_epic2',1190),(20236,20236,'accessories/wearable_items/_exp09/galvanic_armor/galvanic_set_combined_brown/chest_combined_epic3',1190),(20237,20237,'accessories/wearable_items/_exp09/galvanic_armor/galvanic_set_combined_brown/feet',1190),(20238,20238,'accessories/wearable_items/_exp09/galvanic_armor/galvanic_set_combined_brown/hands',1190),(20239,20239,'accessories/wearable_items/_exp09/galvanic_armor/galvanic_set_combined_brown/head_goggles',1190),(20240,20240,'accessories/wearable_items/_exp09/galvanic_armor/galvanic_set_combined_brown/legs',1190),(20241,20241,'accessories/wearable_items/_exp09/galvanic_armor/galvanic_set_combined_brown/shoulders',1190),(20242,20242,'accessories/wearable_items/_exp09/galvanic_armor/galvanic_set_combined_brown/skirt',1190),(20243,20243,'accessories/wearable_items/_exp09/galvanic_armor/galvanic_set_combined_mauve/chest',1190),(20244,20244,'accessories/wearable_items/_exp09/galvanic_armor/galvanic_set_combined_mauve/chest_combined',1190),(20245,20245,'accessories/wearable_items/_exp09/galvanic_armor/galvanic_set_combined_mauve/chest_combined_epic1',1190),(20246,20246,'accessories/wearable_items/_exp09/galvanic_armor/galvanic_set_combined_mauve/chest_combined_epic2',1190),(20247,20247,'accessories/wearable_items/_exp09/galvanic_armor/galvanic_set_combined_mauve/feet',1190),(20248,20248,'accessories/wearable_items/_exp09/galvanic_armor/galvanic_set_combined_mauve/hands',1190),(20249,20249,'accessories/wearable_items/_exp09/galvanic_armor/galvanic_set_combined_mauve/head_goggles_dark',1190),(20250,20250,'accessories/wearable_items/_exp09/galvanic_armor/galvanic_set_combined_mauve/legs',1190),(20251,20251,'accessories/wearable_items/_exp09/galvanic_armor/galvanic_set_combined_mauve/shoulders',1190),(20252,20252,'accessories/wearable_items/_exp09/galvanic_armor/galvanic_set_combined_mauve/skirt',1190),(20253,20253,'accessories/wearable_items/_exp09/galvanic_armor/snapons/galvanic_bracer_dark_right',1190),(20254,20254,'accessories/wearable_items/_exp09/galvanic_armor/snapons/galvanic_bracer_right',1190),(20255,20255,'accessories/wearable_items/_exp09/galvanic_armor/snapons/galvanic_pauldron_heavy1_left',1190),(20256,20256,'accessories/wearable_items/_exp09/galvanic_armor/snapons/galvanic_pauldron_heavy1_right',1190),(20257,20257,'accessories/wearable_items/_exp09/galvanic_armor/snapons/galvanic_pauldron_heavy2_left',1190),(20258,20258,'accessories/wearable_items/_exp09/galvanic_armor/snapons/galvanic_pauldron_heavy2_left_dark',1190),(20259,20259,'accessories/wearable_items/_exp09/galvanic_armor/snapons/galvanic_pauldron_heavy2_right',1190),(20260,20260,'accessories/wearable_items/_exp09/galvanic_armor/snapons/galvanic_pauldron_heavy2_right_dark',1190),(20261,20261,'accessories/wearable_items/_exp09/galvanic_armor/snapons/galvanic_pauldron_heavy3_left',1190),(20262,20262,'accessories/wearable_items/_exp09/galvanic_armor/snapons/galvanic_pauldron_heavy3_left_dark',1190),(20263,20263,'accessories/wearable_items/_exp09/galvanic_armor/snapons/galvanic_pauldron_heavy3_right',1190),(20264,20264,'accessories/wearable_items/_exp09/galvanic_armor/snapons/galvanic_pauldron_heavy3_right_dark',1190),(20265,20265,'accessories/wearable_items/_exp09/galvanic_armor/snapons/galvanic_pauldron_light1_left',1190),(20266,20266,'accessories/wearable_items/_exp09/galvanic_armor/snapons/galvanic_pauldron_light1_left_dark',1190),(20267,20267,'accessories/wearable_items/_exp09/galvanic_armor/snapons/galvanic_pauldron_light1_right',1190),(20268,20268,'accessories/wearable_items/_exp09/galvanic_armor/snapons/galvanic_pauldron_light1_right_dark',1190),(20269,20269,'accessories/wearable_items/_exp09/galvanic_armor/snapons/galvanic_pauldron_light2_left',1190),(20270,20270,'accessories/wearable_items/_exp09/galvanic_armor/snapons/galvanic_pauldron_light2_left_dark',1190),(20271,20271,'accessories/wearable_items/_exp09/galvanic_armor/snapons/galvanic_pauldron_light2_right',1190),(20272,20272,'accessories/wearable_items/_exp09/galvanic_armor/snapons/galvanic_pauldron_light2_right_dark',1190),(20273,20273,'accessories/wearable_items/_exp09/galvanic_armor/snapons/galvanic_pauldron_under1_left',1190),(20274,20274,'accessories/wearable_items/_exp09/galvanic_armor/snapons/galvanic_pauldron_under1_left_dark',1190),(20275,20275,'accessories/wearable_items/_exp09/galvanic_armor/snapons/galvanic_pauldron_under1_right',1190),(20276,20276,'accessories/wearable_items/_exp09/galvanic_armor/snapons/galvanic_pauldron_under1_right_dark',1190),(20277,20277,'accessories/wearable_items/_exp09/galvanic_armor/snapons/galvanic_pauldron_under2_left',1190),(20278,20278,'accessories/wearable_items/_exp09/galvanic_armor/snapons/galvanic_pauldron_under2_left_dark',1190),(20279,20279,'accessories/wearable_items/_exp09/galvanic_armor/snapons/galvanic_pauldron_under2_right',1190),(20280,20280,'accessories/wearable_items/_exp09/galvanic_armor/snapons/galvanic_pauldron_under2_right_dark',1190),(20281,20281,'accessories/wearable_items/_exp09/galvanic_armor/snapons/galvanic_thigh_left',1190),(20282,20282,'accessories/wearable_items/_exp09/galvanic_armor/snapons/galvanic_thigh_left_dark',1190),(20283,20283,'accessories/wearable_items/_exp09/galvanic_armor/snapons/galvanic_thigh_right',1190),(20284,20284,'accessories/wearable_items/_exp09/galvanic_armor/snapons/galvanic_thigh_right_dark',1190),(20285,20285,'accessories/wearable_items/_exp09/galvanic_armor/snapons/head_goggles',1190),(20286,20286,'accessories/wearable_items/_exp09/galvanic_armor/snapons/head_goggles_dark',1190),(20287,20287,'_exp09/objects/exp09_rgn_eidolon_jungle/camp_ej_anvil01',1190),(20288,20288,'_exp09/objects/exp09_rgn_eidolon_jungle/camp_ej_chest_wood_long_closed002',1190),(20289,20289,'_exp09/objects/exp09_rgn_eidolon_jungle/camp_ej_chest_wood_small_closed002',1190),(20290,20290,'_exp09/objects/exp09_rgn_eidolon_jungle/camp_ej_crate_small_long001',1190),(20291,20291,'_exp09/objects/exp09_rgn_eidolon_jungle/camp_ej_crate_small001',1190),(20292,20292,'_exp09/objects/exp09_rgn_eidolon_jungle/camp_ej_flask_leather001',1190),(20293,20293,'_exp09/objects/exp09_rgn_eidolon_jungle/camp_ej_forge01',1190),(20294,20294,'_exp09/objects/exp09_rgn_eidolon_jungle/camp_ej_hum_forge01',1190),(20295,20295,'_exp09/objects/exp09_rgn_eidolon_jungle/camp_ej_labbeaker_large_capped_redgoo001',1190),(20296,20296,'_exp09/objects/exp09_rgn_eidolon_jungle/camp_ej_lantern_handledwn',1190),(20297,20297,'_exp09/objects/exp09_rgn_eidolon_jungle/camp_ej_weaponrack001',1190),(20298,20298,'accessories/wearable_items/cloak/exp09/cloak_galvanic_mauve',1190),(20299,20299,'accessories/wearable_items/cloak/exp09/cloak_galvanic_red',1190),(20300,20300,'staticobjects/mailboxes/ethernere_mailbox01',1190),(20301,20301,'accessories/wieldable_items/weapons/talisman/doll/lizardman_frog_fear_secondary',1190),(20302,20302,'accessories/wieldable_items/weapons/talisman/doll/lizardman_frog_secondary',1190),(20303,20303,'creatures/mounts/skyshrine_drake_mount/skyshrine_drake_mount_base',1190),(20304,20304,'_exp09/characters/monsters/cookie_man/gingerbread_man1',1190),(20305,20305,'_exp09/characters/monsters/cookie_man/gingerbread_man1_chocolate',1190),(20306,20306,'_exp09/characters/monsters/cookie_man/gingerbread_man1_dark',1190),(20307,20307,'_exp09/characters/monsters/cookie_man/gingerbread_man1_sugar',1190),(20308,20308,'_exp09/characters/monsters/cookie_man/gingerbread_man2',1190),(20309,20309,'_exp09/characters/monsters/cookie_man/gingerbread_man2_chocolate',1190),(20310,20310,'_exp09/characters/monsters/cookie_man/gingerbread_man2_dark',1190),(20311,20311,'_exp09/characters/monsters/cookie_man/gingerbread_man2_sugar',1190),(20312,20312,'_exp09/characters/monsters/cookie_man/gingerbread_man3',1190),(20313,20313,'_exp09/characters/monsters/cookie_man/gingerbread_man3_chocolate',1190),(20314,20314,'_exp09/characters/monsters/cookie_man/gingerbread_man3_dark',1190),(20315,20315,'_exp09/characters/monsters/cookie_man/gingerbread_man3_sugar',1190),(20316,20316,'staticobjects/soe_wallet/sc_painting_wurmbone03',1190),(20317,20317,'staticobjects/soe_wallet/sc_painting_wurmbone02',1190),(20318,20318,'staticobjects/_exp09/sc_painting_skyshrine02',1190),(20319,20319,'staticobjects/_exp09/sc_painting_wurmbone04',1190),(20320,20320,'staticobjects/_exp09/sc_painting_wurmbone01',1190),(20321,20321,'staticobjects/_exp09/sc_painting_eidolon01',1190),(20322,20322,'staticobjects/tcg/tcg_painting77_loyalist',1190),(20323,20323,'staticobjects/tcg/tcg_painting76_antonia',1190),(20324,20324,'accessories/wearable_items/cloak/exp09/scarf/cloak_scarf_blue_snowflakes',1190),(20325,20325,'accessories/wearable_items/cloak/exp09/scarf/cloak_scarf_striped_blue',1190),(20326,20326,'accessories/wearable_items/cloak/exp09/scarf/cloak_scarf_striped_green',1190),(20327,20327,'accessories/wearable_items/cloak/exp09/scarf/cloak_scarf_striped_purple',1190),(20328,20328,'accessories/wearable_items/cloak/exp09/scarf/cloak_scarf_striped_red',1190),(20329,20329,'accessories/wearable_items/cloak/exp09/scarf/cloak_scarf_striped_white',1190),(20330,20330,'accessories/wearable_items/cloak/exp09/scarf/cloak_scarf_striped1',1190),(20331,20331,'accessories/wearable_items/cloak/exp09/scarf/neckrings/cloak_scarf_neckring_solidblue',1190),(20332,20332,'accessories/wearable_items/cloak/exp09/scarf/neckrings/cloak_scarf_neckring_striped',1190),(20333,20333,'accessories/wearable_items/cloak/exp09/scarf/neckrings/cloak_scarf_neckring_stripedblue',1190),(20334,20334,'accessories/wearable_items/cloak/exp09/scarf/neckrings/cloak_scarf_neckring_stripedgreen',1190),(20335,20335,'accessories/wearable_items/cloak/exp09/scarf/neckrings/cloak_scarf_neckring_stripedpurple',1190),(20336,20336,'accessories/wearable_items/cloak/exp09/scarf/neckrings/cloak_scarf_neckring_stripedred',1190),(20337,20337,'accessories/wearable_items/cloak/exp09/scarf/neckrings/cloak_scarf_neckring_stripedwhite',1190),(20338,20338,'accessories/wearable_items/cloak/exp09/cloak_thorns',1190),(20339,20339,'accessories/wearable_items/cloak/exp09/cloak_thorns_blue',1190),(20340,20340,'accessories/wearable_items/cloak/exp09/cloak_thorns_collar',1190),(20341,20341,'accessories/wearable_items/cloak/exp09/cloak_thorns_collar_blue',1190),(20342,20342,'accessories/wearable_items/cloak/exp09/cloak_thorns_collar_green',1190),(20343,20343,'accessories/wearable_items/cloak/exp09/cloak_thorns_green',1190),(20344,20344,'creatures/mounts/player_wing/player_wing_frostfell',1190),(20345,23280,'_exp07/characters/tool_users/drolvarg_boss/drolvarg_boss',1096),(20346,50001,'soga_appearances/ec/npc/soga_bird_man',0),(20347,50002,'soga_appearances/ec/npc/soga_dragon_turtle',0),(20348,50003,'soga_appearances/ec/npc/soga_snake_woman_boss',0),(20349,50004,'soga_appearances/ec/npc/soga_snake_woman_captain',0),(20350,50005,'soga_appearances/ec/npc/soga_snake_woman_mira',0),(20351,50006,'soga_appearances/ec/npc/soga_snake_woman_soldier',0),(20352,50007,'soga_appearances/ec/npc/soga_vl_child_female01',0),(20353,50008,'soga_appearances/ec/npc/soga_vl_child_male01',0),(20354,50009,'soga_appearances/ec/npc/soga_vl_old_female01',0),(20355,50010,'soga_appearances/ec/npc/soga_vl_old_male01',0),(20356,50011,'soga_appearances/ec/npc/soga_vl_young_female01',0),(20357,50012,'soga_appearances/ec/npc/soga_vl_young_female02',0),(20358,50013,'soga_appearances/ec/npc/soga_vl_young_female03',0),(20359,50014,'soga_appearances/ec/npc/soga_vl_young_male01',0),(20360,50015,'soga_appearances/ec/npc/soga_vl_young_male02',0),(20361,50016,'soga_appearances/ec/npc/soga_vl_young_male03',0),(20362,50017,'soga_appearances/accessories/facial_hair/soga_vl_old_male_facialhair01',0),(20363,50018,'soga_appearances/accessories/facial_hair/soga_vl_old_male_facialhair02',0),(20364,50019,'soga_appearances/accessories/facial_hair/soga_vl_young_male_facialhair01',0),(20365,50020,'soga_appearances/accessories/facial_hair/soga_vl_young_male_facialhair02',0),(20366,50021,'soga_appearances/accessories/hair/soga_jj_hair',0),(20367,50022,'soga_appearances/accessories/hair/soga_vl_child_female_hair01',0),(20368,50023,'soga_appearances/accessories/hair/soga_vl_child_female_hair02',0),(20369,50024,'soga_appearances/accessories/hair/soga_vl_child_male_hair01',0),(20370,50025,'soga_appearances/accessories/hair/soga_vl_child_male_hair02',0),(20371,50026,'soga_appearances/accessories/hair/soga_vl_old_female_hair01',0),(20372,50027,'soga_appearances/accessories/hair/soga_vl_old_female_hair02',0),(20373,50028,'soga_appearances/accessories/hair/soga_vl_old_male_hair01',0),(20374,50029,'soga_appearances/accessories/hair/soga_vl_old_male_hair02',0),(20375,50030,'soga_appearances/accessories/hair/soga_vl_young_female_hair01',0),(20376,50031,'soga_appearances/accessories/hair/soga_vl_young_female_hair02',0),(20377,50032,'soga_appearances/accessories/hair/soga_vl_young_female_hair03',0),(20378,50033,'soga_appearances/accessories/hair/soga_vl_young_male_hair01',0),(20379,50034,'soga_appearances/accessories/hair/soga_vl_young_male_hair02',0),(20380,50064,'soga_appearances/ec/npc/soga_vl_child_female01_h1',0),(20381,50065,'soga_appearances/ec/npc/soga_vl_child_female01_h2',0),(20382,50066,'soga_appearances/ec/npc/soga_vl_child_male01_h1',0),(20383,50067,'soga_appearances/ec/npc/soga_vl_child_male01_h2',0),(20384,50068,'soga_appearances/ec/npc/soga_vl_old_female01_h1',0),(20385,50069,'soga_appearances/ec/npc/soga_vl_old_female01_h2',0),(20386,50070,'soga_appearances/ec/npc/soga_vl_old_male01_h0_b1',0),(20387,50071,'soga_appearances/ec/npc/soga_vl_old_male01_h0_b2',0),(20388,50072,'soga_appearances/ec/npc/soga_vl_old_male01_h1_b0',0),(20389,50073,'soga_appearances/ec/npc/soga_vl_old_male01_h1_b1',0),(20390,50074,'soga_appearances/ec/npc/soga_vl_old_male01_h1_b2',0),(20391,50075,'soga_appearances/ec/npc/soga_vl_old_male01_h2_b0',0),(20392,50076,'soga_appearances/ec/npc/soga_vl_old_male01_h2_b1',0),(20393,50077,'soga_appearances/ec/npc/soga_vl_old_male01_h2_b2',0),(20394,50078,'soga_appearances/ec/npc/soga_vl_young_female01_h1',0),(20395,50079,'soga_appearances/ec/npc/soga_vl_young_female01_h2',0),(20396,50080,'soga_appearances/ec/npc/soga_vl_young_female01_h3',0),(20397,50081,'soga_appearances/ec/npc/soga_vl_young_female02_h1',0),(20398,50082,'soga_appearances/ec/npc/soga_vl_young_female02_h2',0),(20399,50083,'soga_appearances/ec/npc/soga_vl_young_female02_h3',0),(20400,50084,'soga_appearances/ec/npc/soga_vl_young_male01_h0_b1',0),(20401,50085,'soga_appearances/ec/npc/soga_vl_young_male01_h0_b2',0),(20402,50086,'soga_appearances/ec/npc/soga_vl_young_male01_h0_b3',0),(20403,50087,'soga_appearances/ec/npc/soga_vl_young_male01_h1_b0',0),(20404,50088,'soga_appearances/ec/npc/soga_vl_young_male01_h1_b1',0),(20405,50089,'soga_appearances/ec/npc/soga_vl_young_male01_h1_b2',0),(20406,50090,'soga_appearances/ec/npc/soga_vl_young_male01_h1_b3',0),(20407,50091,'soga_appearances/ec/npc/soga_vl_young_male01_h2_b0',0),(20408,50092,'soga_appearances/ec/npc/soga_vl_young_male01_h2_b1',0),(20409,50093,'soga_appearances/ec/npc/soga_vl_young_male01_h2_b2',0),(20410,50094,'soga_appearances/ec/npc/soga_vl_young_male01_h2_b3',0),(20411,50095,'soga_appearances/ec/npc/soga_vl_young_male02_h0_b1',0),(20412,50096,'soga_appearances/ec/npc/soga_vl_young_male02_h0_b2',0),(20413,50097,'soga_appearances/ec/npc/soga_vl_young_male02_h0_b3',0),(20414,50098,'soga_appearances/ec/npc/soga_vl_young_male02_h1_b0',0),(20415,50099,'soga_appearances/ec/npc/soga_vl_young_male02_h1_b1',0),(20416,50100,'soga_appearances/ec/npc/soga_vl_young_male02_h1_b2',0),(20417,50101,'soga_appearances/ec/npc/soga_vl_young_male02_h1_b3',0),(20418,50102,'soga_appearances/ec/npc/soga_vl_young_male02_h2_b0',0),(20419,50103,'soga_appearances/ec/npc/soga_vl_young_male02_h2_b1',0),(20420,50104,'soga_appearances/ec/npc/soga_vl_young_male02_h2_b2',0),(20421,50105,'soga_appearances/ec/npc/soga_vl_young_male02_h2_b3',0),(20422,50106,'staticobjects/adv04/end_r143_int_door',0),(20423,50107,'staticobjects/adv04/statue_dragon',0),(20424,50108,'staticobjects/adv04/statue_lion',0),(20425,50109,'staticobjects/adv04/vessel',0),(20426,50110,'staticobjects/adv04/door_2',0),(20427,50111,'staticobjects/adv04/small_bag',0),(20428,50544,'accessories/wearable_items/cloak/exp07/cloak_gothic2_diamond',1096),(20429,51001,'accessories/wearable_items01/_exp00/brigandine/artifact/low/chest',0),(20430,51002,'accessories/wearable_items01/_exp00/brigandine/artifact/low/feet',0),(20431,51003,'accessories/wearable_items01/_exp00/brigandine/artifact/low/forearms',0),(20432,51004,'accessories/wearable_items01/_exp00/brigandine/artifact/low/hands',0),(20433,51005,'accessories/wearable_items01/_exp00/brigandine/artifact/low/head',0),(20434,51006,'accessories/wearable_items01/_exp00/brigandine/artifact/low/legs',0),(20435,51007,'accessories/wearable_items01/_exp00/brigandine/artifact/low/shoulders',0),(20436,51008,'accessories/wearable_items01/_exp00/brigandine/brigandine_tint01/chest',0),(20437,51009,'accessories/wearable_items01/_exp00/brigandine/brigandine_tint01/feet',0),(20438,51010,'accessories/wearable_items01/_exp00/brigandine/brigandine_tint01/forearms',0),(20439,51011,'accessories/wearable_items01/_exp00/brigandine/brigandine_tint01/hands',0),(20440,51012,'accessories/wearable_items01/_exp00/brigandine/brigandine_tint01/head',0),(20441,51013,'accessories/wearable_items01/_exp00/brigandine/brigandine_tint01/legs',0),(20442,51014,'accessories/wearable_items01/_exp00/brigandine/brigandine_tint01/shoulders',0),(20443,51015,'accessories/wearable_items01/_exp00/brigandine/common/high/chest',0),(20444,51016,'accessories/wearable_items01/_exp00/brigandine/common/high/feet',0),(20445,51017,'accessories/wearable_items01/_exp00/brigandine/common/high/forearms',0),(20446,51018,'accessories/wearable_items01/_exp00/brigandine/common/high/hands',0),(20447,51019,'accessories/wearable_items01/_exp00/brigandine/common/high/head',0),(20448,51020,'accessories/wearable_items01/_exp00/brigandine/common/high/legs',0),(20449,51021,'accessories/wearable_items01/_exp00/brigandine/common/high/shoulders',0),(20450,51022,'accessories/wearable_items01/_exp00/brigandine/common/low/chest',0),(20451,51023,'accessories/wearable_items01/_exp00/brigandine/common/low/feet',0),(20452,51024,'accessories/wearable_items01/_exp00/brigandine/common/low/forearms',0),(20453,51025,'accessories/wearable_items01/_exp00/brigandine/common/low/hands',0),(20454,51026,'accessories/wearable_items01/_exp00/brigandine/common/low/head',0),(20455,51027,'accessories/wearable_items01/_exp00/brigandine/common/low/legs',0),(20456,51028,'accessories/wearable_items01/_exp00/brigandine/common/low/shoulders',0),(20457,51029,'accessories/wearable_items01/_exp00/brigandine/common/low/skirt',0),(20458,51030,'accessories/wearable_items01/_exp00/brigandine/common/medium/chest',0),(20459,51031,'accessories/wearable_items01/_exp00/brigandine/common/medium/feet',0),(20460,51032,'accessories/wearable_items01/_exp00/brigandine/common/medium/forearms',0),(20461,51033,'accessories/wearable_items01/_exp00/brigandine/common/medium/hands',0),(20462,51034,'accessories/wearable_items01/_exp00/brigandine/common/medium/head',0),(20463,51035,'accessories/wearable_items01/_exp00/brigandine/common/medium/legs',0),(20464,51036,'accessories/wearable_items01/_exp00/brigandine/common/medium/shoulders',0),(20465,51037,'accessories/wearable_items01/_exp00/brigandine/rare/high/chest',0),(20466,51038,'accessories/wearable_items01/_exp00/brigandine/rare/high/feet',0),(20467,51039,'accessories/wearable_items01/_exp00/brigandine/rare/high/forearms',0),(20468,51040,'accessories/wearable_items01/_exp00/brigandine/rare/high/hands',0),(20469,51041,'accessories/wearable_items01/_exp00/brigandine/rare/high/head',0),(20470,51042,'accessories/wearable_items01/_exp00/brigandine/rare/high/legs',0),(20471,51043,'accessories/wearable_items01/_exp00/brigandine/rare/high/shoulders',0),(20472,51044,'accessories/wearable_items01/_exp00/brigandine/rare/low/chest',0),(20473,51045,'accessories/wearable_items01/_exp00/brigandine/rare/low/feet',0),(20474,51046,'accessories/wearable_items01/_exp00/brigandine/rare/low/forearms',0),(20475,51047,'accessories/wearable_items01/_exp00/brigandine/rare/low/hands',0),(20476,51048,'accessories/wearable_items01/_exp00/brigandine/rare/low/head',0),(20477,51049,'accessories/wearable_items01/_exp00/brigandine/rare/low/legs',0),(20478,51050,'accessories/wearable_items01/_exp00/brigandine/rare/low/shoulders',0),(20479,51051,'accessories/wearable_items01/_exp00/brigandine/rare/medium/chest',0),(20480,51052,'accessories/wearable_items01/_exp00/brigandine/rare/medium/feet',0),(20481,51053,'accessories/wearable_items01/_exp00/brigandine/rare/medium/forearms',0),(20482,51054,'accessories/wearable_items01/_exp00/brigandine/rare/medium/hands',0),(20483,51055,'accessories/wearable_items01/_exp00/brigandine/rare/medium/head',0),(20484,51056,'accessories/wearable_items01/_exp00/brigandine/rare/medium/legs',0),(20485,51057,'accessories/wearable_items01/_exp00/brigandine/rare/medium/shoulders',0),(20486,51058,'accessories/wearable_items01/_exp00/brigandine/uncommon/high/chest',0),(20487,51059,'accessories/wearable_items01/_exp00/brigandine/uncommon/high/feet',0),(20488,51060,'accessories/wearable_items01/_exp00/brigandine/uncommon/high/forearms',0),(20489,51061,'accessories/wearable_items01/_exp00/brigandine/uncommon/high/hands',0),(20490,51062,'accessories/wearable_items01/_exp00/brigandine/uncommon/high/head',0),(20491,51063,'accessories/wearable_items01/_exp00/brigandine/uncommon/high/legs',0),(20492,51064,'accessories/wearable_items01/_exp00/brigandine/uncommon/high/shoulders',0),(20493,51065,'accessories/wearable_items01/_exp00/brigandine/uncommon/low/chest',0),(20494,51066,'accessories/wearable_items01/_exp00/brigandine/uncommon/low/feet',0),(20495,51067,'accessories/wearable_items01/_exp00/brigandine/uncommon/low/forearms',0),(20496,51068,'accessories/wearable_items01/_exp00/brigandine/uncommon/low/hands',0),(20497,51069,'accessories/wearable_items01/_exp00/brigandine/uncommon/low/head',0),(20498,51070,'accessories/wearable_items01/_exp00/brigandine/uncommon/low/legs',0),(20499,51071,'accessories/wearable_items01/_exp00/brigandine/uncommon/low/shoulders',0),(20500,51072,'accessories/wearable_items01/_exp00/brigandine/uncommon/medium/chest',0),(20501,51073,'accessories/wearable_items01/_exp00/brigandine/uncommon/medium/feet',0),(20502,51074,'accessories/wearable_items01/_exp00/brigandine/uncommon/medium/forearms',0),(20503,51075,'accessories/wearable_items01/_exp00/brigandine/uncommon/medium/hands',0),(20504,51076,'accessories/wearable_items01/_exp00/brigandine/uncommon/medium/head',0),(20505,51077,'accessories/wearable_items01/_exp00/brigandine/uncommon/medium/legs',0),(20506,51078,'accessories/wearable_items01/_exp00/brigandine/uncommon/medium/shoulders',0),(20507,51079,'accessories/wearable_items01/_exp00/chain/chain_tint01/chest',0),(20508,51080,'accessories/wearable_items01/_exp00/chain/chain_tint01/feet',0),(20509,51081,'accessories/wearable_items01/_exp00/chain/chain_tint01/forearms',0),(20510,51082,'accessories/wearable_items01/_exp00/chain/chain_tint01/hands',0),(20511,51083,'accessories/wearable_items01/_exp00/chain/chain_tint01/head',0),(20512,51084,'accessories/wearable_items01/_exp00/chain/chain_tint01/legs',0),(20513,51085,'accessories/wearable_items01/_exp00/chain/chain_tint01/legs_noskirt',0),(20514,51086,'accessories/wearable_items01/_exp00/chain/chain_tint01/shoulders',0),(20515,51087,'accessories/wearable_items01/_exp00/chain/chain_tint01/skirt',0),(20516,51088,'accessories/wearable_items01/_exp00/chain/common/high/chest',0),(20517,51089,'accessories/wearable_items01/_exp00/chain/common/high/feet',0),(20518,51090,'accessories/wearable_items01/_exp00/chain/common/high/forearms',0),(20519,51091,'accessories/wearable_items01/_exp00/chain/common/high/hands',0),(20520,51092,'accessories/wearable_items01/_exp00/chain/common/high/head',0),(20521,51093,'accessories/wearable_items01/_exp00/chain/common/high/legs',0),(20522,51094,'accessories/wearable_items01/_exp00/chain/common/high/shoulders',0),(20523,51095,'accessories/wearable_items01/_exp00/chain/common/low/chest',0),(20524,51096,'accessories/wearable_items01/_exp00/chain/common/low/feet',0),(20525,51097,'accessories/wearable_items01/_exp00/chain/common/low/forearms',0),(20526,51098,'accessories/wearable_items01/_exp00/chain/common/low/hands',0),(20527,51099,'accessories/wearable_items01/_exp00/chain/common/low/head',0),(20528,51100,'accessories/wearable_items01/_exp00/chain/common/low/legs',0),(20529,51101,'accessories/wearable_items01/_exp00/chain/common/low/legs_noskirt',0),(20530,51102,'accessories/wearable_items01/_exp00/chain/common/low/shoulders',0),(20531,51103,'accessories/wearable_items01/_exp00/chain/common/low/skirt',0),(20532,51104,'accessories/wearable_items01/_exp00/chain/common/medium/chest',0),(20533,51105,'accessories/wearable_items01/_exp00/chain/common/medium/feet',0),(20534,51106,'accessories/wearable_items01/_exp00/chain/common/medium/forearms',0),(20535,51107,'accessories/wearable_items01/_exp00/chain/common/medium/hands',0),(20536,51108,'accessories/wearable_items01/_exp00/chain/common/medium/head',0),(20537,51109,'accessories/wearable_items01/_exp00/chain/common/medium/legs',0),(20538,51110,'accessories/wearable_items01/_exp00/chain/common/medium/shoulders',0),(20539,51111,'accessories/wearable_items01/_exp00/chain/plain/low/chest',0),(20540,51112,'accessories/wearable_items01/_exp00/chain/plain/low/feet',0),(20541,51113,'accessories/wearable_items01/_exp00/chain/plain/low/forearms',0),(20542,51114,'accessories/wearable_items01/_exp00/chain/plain/low/hands',0),(20543,51115,'accessories/wearable_items01/_exp00/chain/plain/low/head',0),(20544,51116,'accessories/wearable_items01/_exp00/chain/plain/low/legs',0),(20545,51117,'accessories/wearable_items01/_exp00/chain/plain/low/legs_noskirt',0),(20546,51118,'accessories/wearable_items01/_exp00/chain/plain/low/shoulders',0),(20547,51119,'accessories/wearable_items01/_exp00/chain/plain/low/skirt',0),(20548,51120,'accessories/wearable_items01/_exp00/chain/uncommon/low/chest',0),(20549,51121,'accessories/wearable_items01/_exp00/chain/uncommon/low/feet',0),(20550,51122,'accessories/wearable_items01/_exp00/chain/uncommon/low/forearms',0),(20551,51123,'accessories/wearable_items01/_exp00/chain/uncommon/low/hands',0),(20552,51124,'accessories/wearable_items01/_exp00/chain/uncommon/low/head',0),(20553,51125,'accessories/wearable_items01/_exp00/chain/uncommon/low/legs',0),(20554,51126,'accessories/wearable_items01/_exp00/chain/uncommon/low/shoulders',0),(20555,51127,'accessories/wearable_items01/_exp00/chain/uncommon/medium/chest',0),(20556,51128,'accessories/wearable_items01/_exp00/chain/uncommon/medium/feet',0),(20557,51129,'accessories/wearable_items01/_exp00/chain/uncommon/medium/forearms',0),(20558,51130,'accessories/wearable_items01/_exp00/chain/uncommon/medium/hands',0),(20559,51131,'accessories/wearable_items01/_exp00/chain/uncommon/medium/head',0),(20560,51132,'accessories/wearable_items01/_exp00/chain/uncommon/medium/legs',0),(20561,51133,'accessories/wearable_items01/_exp00/chain/uncommon/medium/shoulders',0),(20562,51134,'accessories/wearable_items01/_exp00/chain/uncommon/medium/skirt',0),(20563,51135,'accessories/wearable_items01/_exp00/character_create/chest',0),(20564,51136,'accessories/wearable_items01/_exp00/christmas_hats/santa_hat/head',0),(20565,51137,'accessories/wearable_items01/_exp00/christmas_hats/santa_hat_02/head',0),(20566,51148,'accessories/wearable_items01/_exp00/cloak/exp03/cloak_di_01',0),(20567,51149,'accessories/wearable_items01/_exp00/cloak/exp03/cloak_dt_01',0),(20568,51150,'accessories/wearable_items01/_exp00/cloak/exp03/cloak_dt_01_dark_lord',0),(20569,51151,'accessories/wearable_items01/_exp00/cloak/exp03/cloak_sq_01',0),(20570,51152,'accessories/wearable_items01/_exp00/cloak/exp03/cloak_sq_01_flames',0),(20571,51153,'accessories/wearable_items01/_exp00/cloak/exp03/cloak_sq_01_unrest_vapor',0),(20572,51154,'accessories/wearable_items01/_exp00/cloak/exp03/cloak_sq_02',0),(20573,51155,'accessories/wearable_items01/_exp00/clothing/common/high/arms',0),(20574,51156,'accessories/wearable_items01/_exp00/clothing/common/high/chest',0),(20575,51157,'accessories/wearable_items01/_exp00/clothing/common/high/legs',0),(20576,51158,'accessories/wearable_items01/_exp00/clothing/common/low/arms',0),(20577,51159,'accessories/wearable_items01/_exp00/clothing/common/low/chest',0),(20578,51160,'accessories/wearable_items01/_exp00/clothing/common/low/legs',0),(20579,51161,'accessories/wearable_items01/_exp00/clothing/common/medium/arms',0),(20580,51162,'accessories/wearable_items01/_exp00/clothing/common/medium/chest',0),(20581,51163,'accessories/wearable_items01/_exp00/clothing/common/medium/legs',0),(20582,51164,'accessories/wearable_items01/_exp00/clothing/common_tint01/chest',0),(20583,51165,'accessories/wearable_items01/_exp00/clothing/common_tint01/legs',0),(20584,51166,'accessories/wearable_items01/_exp00/clothing/common_tint01/shoulders',0),(20585,51167,'accessories/wearable_items01/_exp00/clothing/uncommon/high/arms',0),(20586,51168,'accessories/wearable_items01/_exp00/clothing/uncommon/high/chest',0),(20587,51169,'accessories/wearable_items01/_exp00/clothing/uncommon/high/legs',0),(20588,51170,'accessories/wearable_items01/_exp00/ghost/ghost_leather/chest',0),(20589,51171,'accessories/wearable_items01/_exp00/ghost/ghost_leather/feet',0),(20590,51172,'accessories/wearable_items01/_exp00/ghost/ghost_leather/forearms',0),(20591,51173,'accessories/wearable_items01/_exp00/ghost/ghost_leather/hands',0),(20592,51174,'accessories/wearable_items01/_exp00/ghost/ghost_leather/head',0),(20593,51175,'accessories/wearable_items01/_exp00/ghost/ghost_leather/legs',0),(20594,51176,'accessories/wearable_items01/_exp00/ghost/ghost_leather/shoulders',0),(20595,51177,'accessories/wearable_items01/_exp00/ghost/ghost_leather/skirt',0),(20596,51178,'accessories/wearable_items01/_exp00/ghost/ghost_mage/arms',0),(20597,51179,'accessories/wearable_items01/_exp00/ghost/ghost_mage/chest',0),(20598,51180,'accessories/wearable_items01/_exp00/ghost/ghost_mage/skirt',0),(20599,51181,'accessories/wearable_items01/_exp00/ghost/ghost_plate/chest',0),(20600,51182,'accessories/wearable_items01/_exp00/ghost/ghost_plate/feet',0),(20601,51183,'accessories/wearable_items01/_exp00/ghost/ghost_plate/forearms',0),(20602,51184,'accessories/wearable_items01/_exp00/ghost/ghost_plate/hands',0),(20603,51185,'accessories/wearable_items01/_exp00/ghost/ghost_plate/head',0),(20604,51186,'accessories/wearable_items01/_exp00/ghost/ghost_plate/legs',0),(20605,51187,'accessories/wearable_items01/_exp00/ghost/ghost_plate/shoulders',0),(20606,51188,'accessories/wearable_items01/_exp00/ghost/ghost_robes/chest',0),(20607,51189,'accessories/wearable_items01/_exp00/ghost/ghost_robes/hood',0),(20608,51190,'accessories/wearable_items01/_exp00/ghost/ghost_robes/pants',0),(20609,51191,'accessories/wearable_items01/_exp00/ghost/ghost_robes/skirt',0),(20610,51192,'accessories/wearable_items01/_exp00/ghost/ghost_vanguard/chest',0),(20611,51193,'accessories/wearable_items01/_exp00/ghost/ghost_vanguard/feet',0),(20612,51194,'accessories/wearable_items01/_exp00/ghost/ghost_vanguard/forearms',0),(20613,51195,'accessories/wearable_items01/_exp00/ghost/ghost_vanguard/hands',0),(20614,51196,'accessories/wearable_items01/_exp00/ghost/ghost_vanguard/head',0),(20615,51197,'accessories/wearable_items01/_exp00/ghost/ghost_vanguard/left',0),(20616,51198,'accessories/wearable_items01/_exp00/ghost/ghost_vanguard/legs',0),(20617,51199,'accessories/wearable_items01/_exp00/ghost/ghost_vanguard/right',0),(20618,51200,'accessories/wearable_items01/_exp00/ghost/ghost_vanguard/shoulders',0),(20619,51201,'accessories/wearable_items01/_exp00/ghost/ghost_vanguard/skirt',0),(20620,51202,'accessories/wearable_items01/_exp00/halloween_masks/amygdalan_mask/head',0),(20621,51203,'accessories/wearable_items01/_exp00/halloween_masks/antonia_mask/head',0),(20622,51204,'accessories/wearable_items01/_exp00/halloween_masks/arrow_mask/head',0),(20623,51205,'accessories/wearable_items01/_exp00/halloween_masks/cat_mask/head',0),(20624,51206,'accessories/wearable_items01/_exp00/halloween_masks/goblin_mask/head',0),(20625,51207,'accessories/wearable_items01/_exp00/halloween_masks/hatchet_mask/head',0),(20626,51208,'accessories/wearable_items01/_exp00/halloween_masks/lucan_mask/head',0),(20627,51209,'accessories/wearable_items01/_exp00/halloween_masks/mask_mask/head',0),(20628,51210,'accessories/wearable_items01/_exp00/halloween_masks/nightblood_mask/head',0),(20629,51211,'accessories/wearable_items01/_exp00/halloween_masks/scarecrow_mask/head',0),(20630,51212,'accessories/wearable_items01/_exp00/halloween_masks/skeleton_mask/head',0),(20631,51213,'accessories/wearable_items01/_exp00/heavy_chain/plain/chest',0),(20632,51214,'accessories/wearable_items01/_exp00/heavy_chain/plain/feet',0),(20633,51215,'accessories/wearable_items01/_exp00/heavy_chain/plain/forearms',0),(20634,51216,'accessories/wearable_items01/_exp00/heavy_chain/plain/hands',0),(20635,51217,'accessories/wearable_items01/_exp00/heavy_chain/plain/head',0),(20636,51218,'accessories/wearable_items01/_exp00/heavy_chain/plain/legs',0),(20637,51219,'accessories/wearable_items01/_exp00/heavy_chain/plain/legs_noskirt',0),(20638,51220,'accessories/wearable_items01/_exp00/heavy_chain/plain/pauldrons',0),(20639,51221,'accessories/wearable_items01/_exp00/heavy_chain/plain/shoulders',0),(20640,51222,'accessories/wearable_items01/_exp00/heavy_chain/plain/shoulders_no_pauldrons',0),(20641,51223,'accessories/wearable_items01/_exp00/heavy_chain/plain/skirt',0),(20642,51224,'accessories/wearable_items01/_exp00/heavy_cloth/heavy_cloth_commoner_plain/chest',0),(20643,51225,'accessories/wearable_items01/_exp00/heavy_cloth/heavy_cloth_commoner_plain/feet',0),(20644,51226,'accessories/wearable_items01/_exp00/heavy_cloth/heavy_cloth_commoner_plain/forearms',0),(20645,51227,'accessories/wearable_items01/_exp00/heavy_cloth/heavy_cloth_commoner_plain/hands',0),(20646,51228,'accessories/wearable_items01/_exp00/heavy_cloth/heavy_cloth_commoner_plain/legs',0),(20647,51229,'accessories/wearable_items01/_exp00/heavy_cloth/heavy_cloth_commoner_plain/shoulders',0),(20648,51230,'accessories/wearable_items01/_exp00/heavy_cloth/heavy_cloth_dervish_plain/chest',0),(20649,51231,'accessories/wearable_items01/_exp00/heavy_cloth/heavy_cloth_dervish_plain/feet',0),(20650,51232,'accessories/wearable_items01/_exp00/heavy_cloth/heavy_cloth_dervish_plain/forearms',0),(20651,51233,'accessories/wearable_items01/_exp00/heavy_cloth/heavy_cloth_dervish_plain/hands',0),(20652,51234,'accessories/wearable_items01/_exp00/heavy_cloth/heavy_cloth_dervish_plain/head',0),(20653,51235,'accessories/wearable_items01/_exp00/heavy_cloth/heavy_cloth_dervish_plain/legs',0),(20654,51236,'accessories/wearable_items01/_exp00/heavy_cloth/heavy_cloth_dervish_plain/legs_noskirt',0),(20655,51237,'accessories/wearable_items01/_exp00/heavy_cloth/heavy_cloth_dervish_plain/shoulders',0),(20656,51238,'accessories/wearable_items01/_exp00/heavy_cloth/heavy_cloth_dervish_plain/skirt',0),(20657,51239,'accessories/wearable_items01/_exp00/heavy_plate/plain/chest',0),(20658,51240,'accessories/wearable_items01/_exp00/heavy_plate/plain/feet',0),(20659,51241,'accessories/wearable_items01/_exp00/heavy_plate/plain/forearms',0),(20660,51242,'accessories/wearable_items01/_exp00/heavy_plate/plain/hands',0),(20661,51243,'accessories/wearable_items01/_exp00/heavy_plate/plain/head',0),(20662,51244,'accessories/wearable_items01/_exp00/heavy_plate/plain/left',0),(20663,51245,'accessories/wearable_items01/_exp00/heavy_plate/plain/legs',0),(20664,51246,'accessories/wearable_items01/_exp00/heavy_plate/plain/legs_noskirt',0),(20665,51247,'accessories/wearable_items01/_exp00/heavy_plate/plain/right',0),(20666,51248,'accessories/wearable_items01/_exp00/heavy_plate/plain/shoulders',0),(20667,51249,'accessories/wearable_items01/_exp00/heavy_plate/plain/shoulders_nopauldrons',0),(20668,51250,'accessories/wearable_items01/_exp00/heavy_plate/plain/skirt',0),(20669,51251,'accessories/wearable_items01/_exp00/heavy_plate/plain/upperchest',0),(20670,51252,'accessories/wearable_items01/_exp00/journeyman/journeyman_leather/chest',0),(20671,51253,'accessories/wearable_items01/_exp00/journeyman/journeyman_leather/feet',0),(20672,51254,'accessories/wearable_items01/_exp00/journeyman/journeyman_leather/forearms',0),(20673,51255,'accessories/wearable_items01/_exp00/journeyman/journeyman_leather/hands',0),(20674,51256,'accessories/wearable_items01/_exp00/journeyman/journeyman_leather/head',0),(20675,51257,'accessories/wearable_items01/_exp00/journeyman/journeyman_leather/legs',0),(20676,51258,'accessories/wearable_items01/_exp00/journeyman/journeyman_leather/shoulders',0),(20677,51259,'accessories/wearable_items01/_exp00/leather/artifact/high/chest',0),(20678,51260,'accessories/wearable_items01/_exp00/leather/artifact/high/feet',0),(20679,51261,'accessories/wearable_items01/_exp00/leather/artifact/high/forearms',0),(20680,51262,'accessories/wearable_items01/_exp00/leather/artifact/high/hands',0),(20681,51263,'accessories/wearable_items01/_exp00/leather/artifact/high/head',0),(20682,51264,'accessories/wearable_items01/_exp00/leather/artifact/high/legs',0),(20683,51265,'accessories/wearable_items01/_exp00/leather/artifact/high/shoulders',0),(20684,51266,'accessories/wearable_items01/_exp00/leather/artifact/low/chest',0),(20685,51267,'accessories/wearable_items01/_exp00/leather/artifact/low/feet',0),(20686,51268,'accessories/wearable_items01/_exp00/leather/artifact/low/forearms',0),(20687,51269,'accessories/wearable_items01/_exp00/leather/artifact/low/hands',0),(20688,51270,'accessories/wearable_items01/_exp00/leather/artifact/low/head',0),(20689,51271,'accessories/wearable_items01/_exp00/leather/artifact/low/legs',0),(20690,51272,'accessories/wearable_items01/_exp00/leather/artifact/low/legs_noskirt',0),(20691,51273,'accessories/wearable_items01/_exp00/leather/artifact/low/shoulders',0),(20692,51274,'accessories/wearable_items01/_exp00/leather/artifact/low/skirt',0),(20693,51275,'accessories/wearable_items01/_exp00/leather/artifact/medium/chest',0),(20694,51276,'accessories/wearable_items01/_exp00/leather/artifact/medium/feet',0),(20695,51277,'accessories/wearable_items01/_exp00/leather/artifact/medium/forearms',0),(20696,51278,'accessories/wearable_items01/_exp00/leather/artifact/medium/hands',0),(20697,51279,'accessories/wearable_items01/_exp00/leather/artifact/medium/head',0),(20698,51280,'accessories/wearable_items01/_exp00/leather/artifact/medium/legs',0),(20699,51281,'accessories/wearable_items01/_exp00/leather/artifact/medium/legs_noskirt',0),(20700,51282,'accessories/wearable_items01/_exp00/leather/artifact/medium/shoulders',0),(20701,51283,'accessories/wearable_items01/_exp00/leather/artifact/medium/skirt',0),(20702,51284,'accessories/wearable_items01/_exp00/leather/common/high/chest',0),(20703,51285,'accessories/wearable_items01/_exp00/leather/common/high/feet',0),(20704,51286,'accessories/wearable_items01/_exp00/leather/common/high/forearms',0),(20705,51287,'accessories/wearable_items01/_exp00/leather/common/high/hands',0),(20706,51288,'accessories/wearable_items01/_exp00/leather/common/high/head',0),(20707,51289,'accessories/wearable_items01/_exp00/leather/common/high/legs',0),(20708,51290,'accessories/wearable_items01/_exp00/leather/common/high/legs_noskirt',0),(20709,51291,'accessories/wearable_items01/_exp00/leather/common/high/shoulders',0),(20710,51292,'accessories/wearable_items01/_exp00/leather/common/high/skirt',0),(20711,51293,'accessories/wearable_items01/_exp00/leather/common/low/chest',0),(20712,51294,'accessories/wearable_items01/_exp00/leather/common/low/feet',0),(20713,51295,'accessories/wearable_items01/_exp00/leather/common/low/forearms',0),(20714,51296,'accessories/wearable_items01/_exp00/leather/common/low/hands',0),(20715,51297,'accessories/wearable_items01/_exp00/leather/common/low/head',0),(20716,51298,'accessories/wearable_items01/_exp00/leather/common/low/legs',0),(20717,51299,'accessories/wearable_items01/_exp00/leather/common/low/legs_noskirt',0),(20718,51300,'accessories/wearable_items01/_exp00/leather/common/low/shoulders',0),(20719,51301,'accessories/wearable_items01/_exp00/leather/common/low/skirt',0),(20720,51302,'accessories/wearable_items01/_exp00/leather/common/medium/chest',0),(20721,51303,'accessories/wearable_items01/_exp00/leather/common/medium/feet',0),(20722,51304,'accessories/wearable_items01/_exp00/leather/common/medium/forearms',0),(20723,51305,'accessories/wearable_items01/_exp00/leather/common/medium/hands',0),(20724,51306,'accessories/wearable_items01/_exp00/leather/common/medium/head',0),(20725,51307,'accessories/wearable_items01/_exp00/leather/common/medium/legs',0),(20726,51308,'accessories/wearable_items01/_exp00/leather/common/medium/legs_noskirt',0),(20727,51309,'accessories/wearable_items01/_exp00/leather/common/medium/shoulders',0),(20728,51310,'accessories/wearable_items01/_exp00/leather/common/medium/skirt',0),(20729,51311,'accessories/wearable_items01/_exp00/leather/leather_tint01/chest',0),(20730,51312,'accessories/wearable_items01/_exp00/leather/leather_tint01/feet',0),(20731,51313,'accessories/wearable_items01/_exp00/leather/leather_tint01/forearms',0),(20732,51314,'accessories/wearable_items01/_exp00/leather/leather_tint01/hands',0),(20733,51315,'accessories/wearable_items01/_exp00/leather/leather_tint01/head',0),(20734,51316,'accessories/wearable_items01/_exp00/leather/leather_tint01/legs',0),(20735,51317,'accessories/wearable_items01/_exp00/leather/leather_tint01/legs_noskirt',0),(20736,51318,'accessories/wearable_items01/_exp00/leather/leather_tint01/shoulders',0),(20737,51319,'accessories/wearable_items01/_exp00/leather/leather_tint01/skirt',0),(20738,51320,'accessories/wearable_items01/_exp00/leather/plain/stitched/chest',0),(20739,51321,'accessories/wearable_items01/_exp00/leather/plain/stitched/feet',0),(20740,51322,'accessories/wearable_items01/_exp00/leather/plain/stitched/forearms',0),(20741,51323,'accessories/wearable_items01/_exp00/leather/plain/stitched/hands',0),(20742,51324,'accessories/wearable_items01/_exp00/leather/plain/stitched/head',0),(20743,51325,'accessories/wearable_items01/_exp00/leather/plain/stitched/legs',0),(20744,51326,'accessories/wearable_items01/_exp00/leather/plain/stitched/shoulders',0),(20745,51327,'accessories/wearable_items01/_exp00/leather/plain/stitched/skirt',0),(20746,51328,'accessories/wearable_items01/_exp00/leather/rare/high/chest',0),(20747,51329,'accessories/wearable_items01/_exp00/leather/rare/high/feet',0),(20748,51330,'accessories/wearable_items01/_exp00/leather/rare/high/forearms',0),(20749,51331,'accessories/wearable_items01/_exp00/leather/rare/high/hands',0),(20750,51332,'accessories/wearable_items01/_exp00/leather/rare/high/head',0),(20751,51333,'accessories/wearable_items01/_exp00/leather/rare/high/legs',0),(20752,51334,'accessories/wearable_items01/_exp00/leather/rare/high/shoulders',0),(20753,51335,'accessories/wearable_items01/_exp00/leather/rare/low/chest',0),(20754,51336,'accessories/wearable_items01/_exp00/leather/rare/low/feet',0),(20755,51337,'accessories/wearable_items01/_exp00/leather/rare/low/forearms',0),(20756,51338,'accessories/wearable_items01/_exp00/leather/rare/low/hands',0),(20757,51339,'accessories/wearable_items01/_exp00/leather/rare/low/head',0),(20758,51340,'accessories/wearable_items01/_exp00/leather/rare/low/legs',0),(20759,51341,'accessories/wearable_items01/_exp00/leather/rare/low/shoulders',0),(20760,51342,'accessories/wearable_items01/_exp00/leather/rare/medium/chest',0),(20761,51343,'accessories/wearable_items01/_exp00/leather/rare/medium/feet',0),(20762,51344,'accessories/wearable_items01/_exp00/leather/rare/medium/forearms',0),(20763,51345,'accessories/wearable_items01/_exp00/leather/rare/medium/hands',0),(20764,51346,'accessories/wearable_items01/_exp00/leather/rare/medium/head',0),(20765,51347,'accessories/wearable_items01/_exp00/leather/rare/medium/legs',0),(20766,51348,'accessories/wearable_items01/_exp00/leather/rare/medium/shoulders',0),(20767,51349,'accessories/wearable_items01/_exp00/leather/uncommon/high/chest',0),(20768,51350,'accessories/wearable_items01/_exp00/leather/uncommon/high/feet',0),(20769,51351,'accessories/wearable_items01/_exp00/leather/uncommon/high/forearms',0),(20770,51352,'accessories/wearable_items01/_exp00/leather/uncommon/high/hands',0),(20771,51353,'accessories/wearable_items01/_exp00/leather/uncommon/high/head',0),(20772,51354,'accessories/wearable_items01/_exp00/leather/uncommon/high/legs',0),(20773,51355,'accessories/wearable_items01/_exp00/leather/uncommon/high/legs_noskirt',0),(20774,51356,'accessories/wearable_items01/_exp00/leather/uncommon/high/shoulders',0),(20775,51357,'accessories/wearable_items01/_exp00/leather/uncommon/high/skirt',0),(20776,51358,'accessories/wearable_items01/_exp00/leather/uncommon/low/chest',0),(20777,51359,'accessories/wearable_items01/_exp00/leather/uncommon/low/feet',0),(20778,51360,'accessories/wearable_items01/_exp00/leather/uncommon/low/forearms',0),(20779,51361,'accessories/wearable_items01/_exp00/leather/uncommon/low/hands',0),(20780,51362,'accessories/wearable_items01/_exp00/leather/uncommon/low/head',0),(20781,51363,'accessories/wearable_items01/_exp00/leather/uncommon/low/legs',0),(20782,51364,'accessories/wearable_items01/_exp00/leather/uncommon/low/legs_noskirt',0),(20783,51365,'accessories/wearable_items01/_exp00/leather/uncommon/low/shoulders',0),(20784,51366,'accessories/wearable_items01/_exp00/leather/uncommon/low/skirt',0),(20785,51367,'accessories/wearable_items01/_exp00/leather/uncommon/medium/chest',0),(20786,51368,'accessories/wearable_items01/_exp00/leather/uncommon/medium/feet',0),(20787,51369,'accessories/wearable_items01/_exp00/leather/uncommon/medium/forearms',0),(20788,51370,'accessories/wearable_items01/_exp00/leather/uncommon/medium/hands',0),(20789,51371,'accessories/wearable_items01/_exp00/leather/uncommon/medium/head',0),(20790,51372,'accessories/wearable_items01/_exp00/leather/uncommon/medium/legs',0),(20791,51373,'accessories/wearable_items01/_exp00/leather/uncommon/medium/legs_noskirt',0),(20792,51374,'accessories/wearable_items01/_exp00/leather/uncommon/medium/shoulders',0),(20793,51375,'accessories/wearable_items01/_exp00/leather/uncommon/medium/skirt',0),(20794,51376,'accessories/wearable_items01/_exp00/magus/artifact/high/arms',0),(20795,51377,'accessories/wearable_items01/_exp00/magus/artifact/high/chest',0),(20796,51378,'accessories/wearable_items01/_exp00/magus/artifact/high/skirt',0),(20797,51379,'accessories/wearable_items01/_exp00/magus/artifact/low/chest',0),(20798,51380,'accessories/wearable_items01/_exp00/magus/artifact/low/hood',0),(20799,51381,'accessories/wearable_items01/_exp00/magus/artifact/low/pants',0),(20800,51382,'accessories/wearable_items01/_exp00/magus/artifact/low/skirt',0),(20801,51383,'accessories/wearable_items01/_exp00/magus/artifact/medium/chest',0),(20802,51384,'accessories/wearable_items01/_exp00/magus/artifact/medium/hood',0),(20803,51385,'accessories/wearable_items01/_exp00/magus/artifact/medium/pants',0),(20804,51386,'accessories/wearable_items01/_exp00/magus/artifact/medium/skirt',0),(20805,51387,'accessories/wearable_items01/_exp00/magus/common/high/chest',0),(20806,51388,'accessories/wearable_items01/_exp00/magus/common/high/hood',0),(20807,51389,'accessories/wearable_items01/_exp00/magus/common/high/pants',0),(20808,51390,'accessories/wearable_items01/_exp00/magus/common/high/skirt',0),(20809,51391,'accessories/wearable_items01/_exp00/magus/common/low/chest',0),(20810,51392,'accessories/wearable_items01/_exp00/magus/common/low/hood',0),(20811,51393,'accessories/wearable_items01/_exp00/magus/common/low/pants',0),(20812,51394,'accessories/wearable_items01/_exp00/magus/common/low/skirt',0),(20813,51395,'accessories/wearable_items01/_exp00/magus/common/medium/chest',0),(20814,51396,'accessories/wearable_items01/_exp00/magus/common/medium/hood',0),(20815,51397,'accessories/wearable_items01/_exp00/magus/common/medium/pants',0),(20816,51398,'accessories/wearable_items01/_exp00/magus/common/medium/skirt',0),(20817,51399,'accessories/wearable_items01/_exp00/magus/rare/high/chest',0),(20818,51400,'accessories/wearable_items01/_exp00/magus/rare/high/hood',0),(20819,51401,'accessories/wearable_items01/_exp00/magus/rare/high/pants',0),(20820,51402,'accessories/wearable_items01/_exp00/magus/rare/high/skirt',0),(20821,51403,'accessories/wearable_items01/_exp00/magus/rare/low/chest',0),(20822,51404,'accessories/wearable_items01/_exp00/magus/rare/low/hood',0),(20823,51405,'accessories/wearable_items01/_exp00/magus/rare/low/pants',0),(20824,51406,'accessories/wearable_items01/_exp00/magus/rare/low/skirt',0),(20825,51407,'accessories/wearable_items01/_exp00/magus/rare/medium/chest',0),(20826,51408,'accessories/wearable_items01/_exp00/magus/rare/medium/pants',0),(20827,51409,'accessories/wearable_items01/_exp00/magus/rare/medium/shoulders',0),(20828,51410,'accessories/wearable_items01/_exp00/magus/robes/dragon_ornate/chest',0),(20829,51411,'accessories/wearable_items01/_exp00/magus/robes/dragon_ornate/hood',0),(20830,51412,'accessories/wearable_items01/_exp00/magus/robes/dragon_ornate/pants',0),(20831,51413,'accessories/wearable_items01/_exp00/magus/robes/dragon_ornate/skirt',0),(20832,51414,'accessories/wearable_items01/_exp00/magus/robes/fancy_goldburgundy/chest',0),(20833,51415,'accessories/wearable_items01/_exp00/magus/robes/fancy_goldburgundy/hood',0),(20834,51416,'accessories/wearable_items01/_exp00/magus/robes/fancy_goldburgundy/pants',0),(20835,51417,'accessories/wearable_items01/_exp00/magus/robes/fancy_goldburgundy/skirt',0),(20836,51418,'accessories/wearable_items01/_exp00/magus/robes/plain_quilted/chest',0),(20837,51419,'accessories/wearable_items01/_exp00/magus/robes/plain_quilted/hood',0),(20838,51420,'accessories/wearable_items01/_exp00/magus/robes/plain_quilted/pants',0),(20839,51421,'accessories/wearable_items01/_exp00/magus/robes/plain_quilted/skirt',0),(20840,51422,'accessories/wearable_items01/_exp00/magus/robes/plain_quilted_patches/chest',0),(20841,51423,'accessories/wearable_items01/_exp00/magus/robes/plain_quilted_patches/hood',0),(20842,51424,'accessories/wearable_items01/_exp00/magus/robes/plain_quilted_patches/pants',0),(20843,51425,'accessories/wearable_items01/_exp00/magus/robes/plain_quilted_patches/skirt',0),(20844,51426,'accessories/wearable_items01/_exp00/magus/robes/robe_newbie_tint01/chest',0),(20845,51427,'accessories/wearable_items01/_exp00/magus/robes/robe_newbie_tint01/hood',0),(20846,51428,'accessories/wearable_items01/_exp00/magus/robes/robe_newbie_tint01/pants',0),(20847,51429,'accessories/wearable_items01/_exp00/magus/robes/robe_newbie_tint01/skirt',0),(20848,51430,'accessories/wearable_items01/_exp00/magus/uncommon/high/chest',0),(20849,51431,'accessories/wearable_items01/_exp00/magus/uncommon/high/hood',0),(20850,51432,'accessories/wearable_items01/_exp00/magus/uncommon/high/pants',0),(20851,51433,'accessories/wearable_items01/_exp00/magus/uncommon/high/skirt',0),(20852,51434,'accessories/wearable_items01/_exp00/magus/uncommon/low/chest',0),(20853,51435,'accessories/wearable_items01/_exp00/magus/uncommon/low/forearms',0),(20854,51436,'accessories/wearable_items01/_exp00/magus/uncommon/low/legs',0),(20855,51437,'accessories/wearable_items01/_exp00/magus/uncommon/low/skirt',0),(20856,51438,'accessories/wearable_items01/_exp00/magus/uncommon/medium/chest',0),(20857,51439,'accessories/wearable_items01/_exp00/magus/uncommon/medium/hood',0),(20858,51440,'accessories/wearable_items01/_exp00/magus/uncommon/medium/pants',0),(20859,51441,'accessories/wearable_items01/_exp00/magus/uncommon/medium/skirt',0),(20860,51442,'accessories/wearable_items01/_exp00/monk/monk_plain/chest',0),(20861,51443,'accessories/wearable_items01/_exp00/monk/monk_plain/feet',0),(20862,51444,'accessories/wearable_items01/_exp00/monk/monk_plain/forearms',0),(20863,51445,'accessories/wearable_items01/_exp00/monk/monk_plain/head',0),(20864,51446,'accessories/wearable_items01/_exp00/monk/monk_plain/legs',0),(20865,51447,'accessories/wearable_items01/_exp00/monk/monk_plain/shoulders',0),(20866,51448,'accessories/wearable_items01/_exp00/npcskirts/antonia_skirt',0),(20867,51449,'accessories/wearable_items01/_exp00/npcskirts/lucan_skirt',0),(20868,51450,'accessories/wearable_items01/_exp00/pauldrons/evil01/pauldron_evil01',0),(20869,51451,'accessories/wearable_items01/_exp00/pauldrons/evil01/shoulders_pauldron_evil01',0),(20870,51452,'accessories/wearable_items01/_exp00/pauldrons/evil02/pauldron_evil02',0),(20871,51453,'accessories/wearable_items01/_exp00/pauldrons/evil02/shoulders_pauldron_evil02',0),(20872,51454,'accessories/wearable_items01/_exp00/plate/common/high/chest',0),(20873,51455,'accessories/wearable_items01/_exp00/plate/common/high/feet',0),(20874,51456,'accessories/wearable_items01/_exp00/plate/common/high/forearms',0),(20875,51457,'accessories/wearable_items01/_exp00/plate/common/high/hands',0),(20876,51458,'accessories/wearable_items01/_exp00/plate/common/high/head',0),(20877,51459,'accessories/wearable_items01/_exp00/plate/common/high/legs',0),(20878,51460,'accessories/wearable_items01/_exp00/plate/common/high/shoulders',0),(20879,51461,'accessories/wearable_items01/_exp00/plate/common/low/chest',0),(20880,51462,'accessories/wearable_items01/_exp00/plate/common/low/feet',0),(20881,51463,'accessories/wearable_items01/_exp00/plate/common/low/forearms',0),(20882,51464,'accessories/wearable_items01/_exp00/plate/common/low/hands',0),(20883,51465,'accessories/wearable_items01/_exp00/plate/common/low/head',0),(20884,51466,'accessories/wearable_items01/_exp00/plate/common/low/legs',0),(20885,51467,'accessories/wearable_items01/_exp00/plate/common/low/shoulders',0),(20886,51468,'accessories/wearable_items01/_exp00/plate/common/medium/chest',0),(20887,51469,'accessories/wearable_items01/_exp00/plate/common/medium/feet',0),(20888,51470,'accessories/wearable_items01/_exp00/plate/common/medium/forearms',0),(20889,51471,'accessories/wearable_items01/_exp00/plate/common/medium/hands',0),(20890,51472,'accessories/wearable_items01/_exp00/plate/common/medium/head',0),(20891,51473,'accessories/wearable_items01/_exp00/plate/common/medium/legs',0),(20892,51474,'accessories/wearable_items01/_exp00/plate/common/medium/shoulders',0),(20893,51475,'accessories/wearable_items01/_exp00/plate/plate_tint01/chest',0),(20894,51476,'accessories/wearable_items01/_exp00/plate/plate_tint01/feet',0),(20895,51477,'accessories/wearable_items01/_exp00/plate/plate_tint01/forearms',0),(20896,51478,'accessories/wearable_items01/_exp00/plate/plate_tint01/hands',0),(20897,51479,'accessories/wearable_items01/_exp00/plate/plate_tint01/head',0),(20898,51480,'accessories/wearable_items01/_exp00/plate/plate_tint01/legs',0),(20899,51481,'accessories/wearable_items01/_exp00/plate/plate_tint01/shoulders',0),(20900,51482,'accessories/wearable_items01/_exp00/plate/plate_tint02/chest',0),(20901,51483,'accessories/wearable_items01/_exp00/plate/plate_tint02/feet',0),(20902,51484,'accessories/wearable_items01/_exp00/plate/plate_tint02/forearms',0),(20903,51485,'accessories/wearable_items01/_exp00/plate/plate_tint02/hands',0),(20904,51486,'accessories/wearable_items01/_exp00/plate/plate_tint02/head',0),(20905,51487,'accessories/wearable_items01/_exp00/plate/plate_tint02/legs',0),(20906,51488,'accessories/wearable_items01/_exp00/plate/plate_tint02/shoulders',0),(20907,51489,'accessories/wearable_items01/_exp00/plate/uncommon/low/chest',0),(20908,51490,'accessories/wearable_items01/_exp00/plate/uncommon/low/feet',0),(20909,51491,'accessories/wearable_items01/_exp00/plate/uncommon/low/forearms',0),(20910,51492,'accessories/wearable_items01/_exp00/plate/uncommon/low/hands',0),(20911,51493,'accessories/wearable_items01/_exp00/plate/uncommon/low/head',0),(20912,51494,'accessories/wearable_items01/_exp00/plate/uncommon/low/legs',0),(20913,51495,'accessories/wearable_items01/_exp00/plate/uncommon/low/shoulders',0),(20914,51496,'accessories/wearable_items01/_exp00/plate/uncommon/medium/chest',0),(20915,51497,'accessories/wearable_items01/_exp00/plate/uncommon/medium/feet',0),(20916,51498,'accessories/wearable_items01/_exp00/plate/uncommon/medium/forearms',0),(20917,51499,'accessories/wearable_items01/_exp00/plate/uncommon/medium/hands',0),(20918,51500,'accessories/wearable_items01/_exp00/plate/uncommon/medium/head',0),(20919,51501,'accessories/wearable_items01/_exp00/plate/uncommon/medium/legs',0),(20920,51502,'accessories/wearable_items01/_exp00/plate/uncommon/medium/shoulders',0),(20921,51503,'accessories/wearable_items01/_exp00/profesion_hats/animal_hide/animal_hide_01/head',0),(20922,51504,'accessories/wearable_items01/_exp00/profesion_hats/assassin/assassin_01/head',0),(20923,51505,'accessories/wearable_items01/_exp00/profesion_hats/berserker/berserker_helm_01/head',0),(20924,51506,'accessories/wearable_items01/_exp00/profesion_hats/berserker/berserker_helm_02/head',0),(20925,51507,'accessories/wearable_items01/_exp00/profesion_hats/brigand_hat/head',0),(20926,51508,'accessories/wearable_items01/_exp00/profesion_hats/bruiser/bruiser_01/head',0),(20927,51509,'accessories/wearable_items01/_exp00/profesion_hats/coercer/coercer_01/head',0),(20928,51510,'accessories/wearable_items01/_exp00/profesion_hats/coercer/coercer_02/head',0),(20929,51511,'accessories/wearable_items01/_exp00/profesion_hats/conjuror/conjuror_01/head',0),(20930,51512,'accessories/wearable_items01/_exp00/profesion_hats/dirge/dirge_01/head',0),(20931,51513,'accessories/wearable_items01/_exp00/profesion_hats/evil_helm/evil_helm_01/head',0),(20932,51514,'accessories/wearable_items01/_exp00/profesion_hats/fury/fury_01/head',0),(20933,51515,'accessories/wearable_items01/_exp00/profesion_hats/guardian/guardian_01/head',0),(20934,51516,'accessories/wearable_items01/_exp00/profesion_hats/illusionist/illusionist_01/head',0),(20935,51517,'accessories/wearable_items01/_exp00/profesion_hats/inquisitor/inquisitor_01/head',0),(20936,51518,'accessories/wearable_items01/_exp00/profesion_hats/jester/jester_01/head',0),(20937,51519,'accessories/wearable_items01/_exp00/profesion_hats/necromancer/necromancer_01/head',0),(20938,51520,'accessories/wearable_items01/_exp00/profesion_hats/paladin/paladin_01/head',0),(20939,51521,'accessories/wearable_items01/_exp00/profesion_hats/ranger/ranger_01/head',0),(20940,51522,'accessories/wearable_items01/_exp00/profesion_hats/shadowknight/shadowknight_01/head',0),(20941,51523,'accessories/wearable_items01/_exp00/profesion_hats/swashbuckler/swashbuckler_01/head',0),(20942,51524,'accessories/wearable_items01/_exp00/profesion_hats/templar/templar_helm_01/head',0),(20943,51525,'accessories/wearable_items01/_exp00/profesion_hats/troubadour/troubadour_01/head',0),(20944,51526,'accessories/wearable_items01/_exp00/profesion_hats/warden/warden_01/head',0),(20945,51527,'accessories/wearable_items01/_exp00/profesion_hats/warlock/warlock_01/head',0),(20946,51528,'accessories/wearable_items01/_exp00/profesion_hats/wizard/wizard_01/head',0),(20947,51529,'accessories/wearable_items01/_exp00/starter_clothes/barbarian_female/arms',0),(20948,51530,'accessories/wearable_items01/_exp00/starter_clothes/barbarian_female/chest',0),(20949,51531,'accessories/wearable_items01/_exp00/starter_clothes/barbarian_female/legs',0),(20950,51532,'accessories/wearable_items01/_exp00/starter_clothes/barbarian_female/sleeves',0),(20951,51533,'accessories/wearable_items01/_exp00/starter_clothes/barbarian_male/arms',0),(20952,51534,'accessories/wearable_items01/_exp00/starter_clothes/barbarian_male/chest',0),(20953,51535,'accessories/wearable_items01/_exp00/starter_clothes/barbarian_male/legs',0),(20954,51536,'accessories/wearable_items01/_exp00/starter_clothes/barbarian_male/sleeves',0),(20955,51537,'accessories/wearable_items01/_exp00/starter_clothes/darkelf_female/arms',0),(20956,51538,'accessories/wearable_items01/_exp00/starter_clothes/darkelf_female/chest',0),(20957,51539,'accessories/wearable_items01/_exp00/starter_clothes/darkelf_female/legs',0),(20958,51540,'accessories/wearable_items01/_exp00/starter_clothes/darkelf_female/sleeves',0),(20959,51541,'accessories/wearable_items01/_exp00/starter_clothes/darkelf_male/arms',0),(20960,51542,'accessories/wearable_items01/_exp00/starter_clothes/darkelf_male/chest',0),(20961,51543,'accessories/wearable_items01/_exp00/starter_clothes/darkelf_male/legs',0),(20962,51544,'accessories/wearable_items01/_exp00/starter_clothes/darkelf_male/sleeves',0),(20963,51545,'accessories/wearable_items01/_exp00/starter_clothes/dwarf_female/arms',0),(20964,51546,'accessories/wearable_items01/_exp00/starter_clothes/dwarf_female/chest',0),(20965,51547,'accessories/wearable_items01/_exp00/starter_clothes/dwarf_female/legs',0),(20966,51548,'accessories/wearable_items01/_exp00/starter_clothes/dwarf_female/sleeves',0),(20967,51549,'accessories/wearable_items01/_exp00/starter_clothes/dwarf_male/arms',0),(20968,51550,'accessories/wearable_items01/_exp00/starter_clothes/dwarf_male/chest',0),(20969,51551,'accessories/wearable_items01/_exp00/starter_clothes/dwarf_male/legs',0),(20970,51552,'accessories/wearable_items01/_exp00/starter_clothes/dwarf_male/sleeves',0),(20971,51553,'accessories/wearable_items01/_exp00/starter_clothes/erudite_female/arms',0),(20972,51554,'accessories/wearable_items01/_exp00/starter_clothes/erudite_female/chest',0),(20973,51555,'accessories/wearable_items01/_exp00/starter_clothes/erudite_female/legs',0),(20974,51556,'accessories/wearable_items01/_exp00/starter_clothes/erudite_female/sleeves',0),(20975,51557,'accessories/wearable_items01/_exp00/starter_clothes/erudite_male/arms',0),(20976,51558,'accessories/wearable_items01/_exp00/starter_clothes/erudite_male/chest',0),(20977,51559,'accessories/wearable_items01/_exp00/starter_clothes/erudite_male/legs',0),(20978,51560,'accessories/wearable_items01/_exp00/starter_clothes/erudite_male/sleeves',0),(20979,51561,'accessories/wearable_items01/_exp00/starter_clothes/fae_dark_female/arms',0),(20980,51562,'accessories/wearable_items01/_exp00/starter_clothes/fae_dark_female/chest',0),(20981,51563,'accessories/wearable_items01/_exp00/starter_clothes/fae_dark_female/legs',0),(20982,51564,'accessories/wearable_items01/_exp00/starter_clothes/fae_dark_female/sleeves',0),(20983,51565,'accessories/wearable_items01/_exp00/starter_clothes/fae_dark_male/arms',0),(20984,51566,'accessories/wearable_items01/_exp00/starter_clothes/fae_dark_male/chest',0),(20985,51567,'accessories/wearable_items01/_exp00/starter_clothes/fae_dark_male/legs',0),(20986,51568,'accessories/wearable_items01/_exp00/starter_clothes/fae_dark_male/sleeves',0),(20987,51569,'accessories/wearable_items01/_exp00/starter_clothes/fae_female/arms',0),(20988,51570,'accessories/wearable_items01/_exp00/starter_clothes/fae_female/chest',0),(20989,51571,'accessories/wearable_items01/_exp00/starter_clothes/fae_female/legs',0),(20990,51572,'accessories/wearable_items01/_exp00/starter_clothes/fae_female/sleeves',0),(20991,51573,'accessories/wearable_items01/_exp00/starter_clothes/fae_light_female/arms',0),(20992,51574,'accessories/wearable_items01/_exp00/starter_clothes/fae_light_female/chest',0),(20993,51575,'accessories/wearable_items01/_exp00/starter_clothes/fae_light_female/legs',0),(20994,51576,'accessories/wearable_items01/_exp00/starter_clothes/fae_light_female/sleeves',0),(20995,51577,'accessories/wearable_items01/_exp00/starter_clothes/fae_light_male/arms',0),(20996,51578,'accessories/wearable_items01/_exp00/starter_clothes/fae_light_male/chest',0),(20997,51579,'accessories/wearable_items01/_exp00/starter_clothes/fae_light_male/legs',0),(20998,51580,'accessories/wearable_items01/_exp00/starter_clothes/fae_light_male/sleeves',0),(20999,51581,'accessories/wearable_items01/_exp00/starter_clothes/fae_male/arms',0),(21000,51582,'accessories/wearable_items01/_exp00/starter_clothes/fae_male/chest',0),(21001,51583,'accessories/wearable_items01/_exp00/starter_clothes/fae_male/legs',0),(21002,51584,'accessories/wearable_items01/_exp00/starter_clothes/fae_male/sleeves',0),(21003,51585,'accessories/wearable_items01/_exp00/starter_clothes/froglok_female/arms',0),(21004,51586,'accessories/wearable_items01/_exp00/starter_clothes/froglok_female/chest',0),(21005,51587,'accessories/wearable_items01/_exp00/starter_clothes/froglok_female/legs',0),(21006,51588,'accessories/wearable_items01/_exp00/starter_clothes/froglok_female/sleeves',0),(21007,51589,'accessories/wearable_items01/_exp00/starter_clothes/froglok_male/arms',0),(21008,51590,'accessories/wearable_items01/_exp00/starter_clothes/froglok_male/chest',0),(21009,51591,'accessories/wearable_items01/_exp00/starter_clothes/froglok_male/legs',0),(21010,51592,'accessories/wearable_items01/_exp00/starter_clothes/froglok_male/sleeves',0),(21011,51593,'accessories/wearable_items01/_exp00/starter_clothes/gnome_female/arms',0),(21012,51594,'accessories/wearable_items01/_exp00/starter_clothes/gnome_female/chest',0),(21013,51595,'accessories/wearable_items01/_exp00/starter_clothes/gnome_female/legs',0),(21014,51596,'accessories/wearable_items01/_exp00/starter_clothes/gnome_female/sleeves',0),(21015,51597,'accessories/wearable_items01/_exp00/starter_clothes/gnome_male/arms',0),(21016,51598,'accessories/wearable_items01/_exp00/starter_clothes/gnome_male/chest',0),(21017,51599,'accessories/wearable_items01/_exp00/starter_clothes/gnome_male/legs',0),(21018,51600,'accessories/wearable_items01/_exp00/starter_clothes/gnome_male/sleeves',0),(21019,51601,'accessories/wearable_items01/_exp00/starter_clothes/halfelf_female/arms',0),(21020,51602,'accessories/wearable_items01/_exp00/starter_clothes/halfelf_female/chest',0),(21021,51603,'accessories/wearable_items01/_exp00/starter_clothes/halfelf_female/legs',0),(21022,51604,'accessories/wearable_items01/_exp00/starter_clothes/halfelf_female/sleeves',0),(21023,51605,'accessories/wearable_items01/_exp00/starter_clothes/halfelf_male/arms',0),(21024,51606,'accessories/wearable_items01/_exp00/starter_clothes/halfelf_male/chest',0),(21025,51607,'accessories/wearable_items01/_exp00/starter_clothes/halfelf_male/legs',0),(21026,51608,'accessories/wearable_items01/_exp00/starter_clothes/halfelf_male/sleeves',0),(21027,51609,'accessories/wearable_items01/_exp00/starter_clothes/halfling_female/arms',0),(21028,51610,'accessories/wearable_items01/_exp00/starter_clothes/halfling_female/chest',0),(21029,51611,'accessories/wearable_items01/_exp00/starter_clothes/halfling_female/legs',0),(21030,51612,'accessories/wearable_items01/_exp00/starter_clothes/halfling_female/sleeves',0),(21031,51613,'accessories/wearable_items01/_exp00/starter_clothes/halfling_male/arms',0),(21032,51614,'accessories/wearable_items01/_exp00/starter_clothes/halfling_male/chest',0),(21033,51615,'accessories/wearable_items01/_exp00/starter_clothes/halfling_male/legs',0),(21034,51616,'accessories/wearable_items01/_exp00/starter_clothes/halfling_male/sleeves',0),(21035,51617,'accessories/wearable_items01/_exp00/starter_clothes/highelf_female/arms',0),(21036,51618,'accessories/wearable_items01/_exp00/starter_clothes/highelf_female/chest',0),(21037,51619,'accessories/wearable_items01/_exp00/starter_clothes/highelf_female/legs',0),(21038,51620,'accessories/wearable_items01/_exp00/starter_clothes/highelf_female/sleeves',0),(21039,51621,'accessories/wearable_items01/_exp00/starter_clothes/highelf_male/arms',0),(21040,51622,'accessories/wearable_items01/_exp00/starter_clothes/highelf_male/chest',0),(21041,51623,'accessories/wearable_items01/_exp00/starter_clothes/highelf_male/legs',0),(21042,51624,'accessories/wearable_items01/_exp00/starter_clothes/highelf_male/sleeves',0),(21043,51625,'accessories/wearable_items01/_exp00/starter_clothes/human_female/arms',0),(21044,51626,'accessories/wearable_items01/_exp00/starter_clothes/human_female/chest',0),(21045,51627,'accessories/wearable_items01/_exp00/starter_clothes/human_female/legs',0),(21046,51628,'accessories/wearable_items01/_exp00/starter_clothes/human_female/sleeves',0),(21047,51629,'accessories/wearable_items01/_exp00/starter_clothes/human_male/arms',0),(21048,51630,'accessories/wearable_items01/_exp00/starter_clothes/human_male/chest',0),(21049,51631,'accessories/wearable_items01/_exp00/starter_clothes/human_male/legs',0),(21050,51632,'accessories/wearable_items01/_exp00/starter_clothes/human_male/sleeves',0),(21051,51633,'accessories/wearable_items01/_exp00/starter_clothes/iksar_female/arms',0),(21052,51634,'accessories/wearable_items01/_exp00/starter_clothes/iksar_female/chest',0),(21053,51635,'accessories/wearable_items01/_exp00/starter_clothes/iksar_female/legs',0),(21054,51636,'accessories/wearable_items01/_exp00/starter_clothes/iksar_female/sleeves',0),(21055,51637,'accessories/wearable_items01/_exp00/starter_clothes/iksar_male/arms',0),(21056,51638,'accessories/wearable_items01/_exp00/starter_clothes/iksar_male/chest',0),(21057,51639,'accessories/wearable_items01/_exp00/starter_clothes/iksar_male/legs',0),(21058,51640,'accessories/wearable_items01/_exp00/starter_clothes/iksar_male/sleeves',0),(21059,51641,'accessories/wearable_items01/_exp00/starter_clothes/kerra_female/arms',0),(21060,51642,'accessories/wearable_items01/_exp00/starter_clothes/kerra_female/chest',0),(21061,51643,'accessories/wearable_items01/_exp00/starter_clothes/kerra_female/legs',0),(21062,51644,'accessories/wearable_items01/_exp00/starter_clothes/kerra_female/sleeves',0),(21063,51645,'accessories/wearable_items01/_exp00/starter_clothes/kerra_male/arms',0),(21064,51646,'accessories/wearable_items01/_exp00/starter_clothes/kerra_male/chest',0),(21065,51647,'accessories/wearable_items01/_exp00/starter_clothes/kerra_male/legs',0),(21066,51648,'accessories/wearable_items01/_exp00/starter_clothes/kerra_male/sleeves',0),(21067,51649,'accessories/wearable_items01/_exp00/starter_clothes/ogre_female/arms',0),(21068,51650,'accessories/wearable_items01/_exp00/starter_clothes/ogre_female/chest',0),(21069,51651,'accessories/wearable_items01/_exp00/starter_clothes/ogre_female/legs',0),(21070,51652,'accessories/wearable_items01/_exp00/starter_clothes/ogre_female/sleeves',0),(21071,51653,'accessories/wearable_items01/_exp00/starter_clothes/ogre_male/arms',0),(21072,51654,'accessories/wearable_items01/_exp00/starter_clothes/ogre_male/chest',0),(21073,51655,'accessories/wearable_items01/_exp00/starter_clothes/ogre_male/legs',0),(21074,51656,'accessories/wearable_items01/_exp00/starter_clothes/ogre_male/sleeves',0),(21075,51657,'accessories/wearable_items01/_exp00/starter_clothes/ratonga_female/arms',0),(21076,51658,'accessories/wearable_items01/_exp00/starter_clothes/ratonga_female/chest',0),(21077,51659,'accessories/wearable_items01/_exp00/starter_clothes/ratonga_female/legs',0),(21078,51660,'accessories/wearable_items01/_exp00/starter_clothes/ratonga_female/sleeves',0),(21079,51661,'accessories/wearable_items01/_exp00/starter_clothes/ratonga_male/arms',0),(21080,51662,'accessories/wearable_items01/_exp00/starter_clothes/ratonga_male/chest',0),(21081,51663,'accessories/wearable_items01/_exp00/starter_clothes/ratonga_male/legs',0),(21082,51664,'accessories/wearable_items01/_exp00/starter_clothes/ratonga_male/sleeves',0),(21083,51665,'accessories/wearable_items01/_exp00/starter_clothes/troll_female/arms',0),(21084,51666,'accessories/wearable_items01/_exp00/starter_clothes/troll_female/chest',0),(21085,51667,'accessories/wearable_items01/_exp00/starter_clothes/troll_female/legs',0),(21086,51668,'accessories/wearable_items01/_exp00/starter_clothes/troll_female/sleeves',0),(21087,51669,'accessories/wearable_items01/_exp00/starter_clothes/troll_male/arms',0),(21088,51670,'accessories/wearable_items01/_exp00/starter_clothes/troll_male/chest',0),(21089,51671,'accessories/wearable_items01/_exp00/starter_clothes/troll_male/legs',0),(21090,51672,'accessories/wearable_items01/_exp00/starter_clothes/troll_male/sleeves',0),(21091,51673,'accessories/wearable_items01/_exp00/starter_clothes/woodelf_female/arms',0),(21092,51674,'accessories/wearable_items01/_exp00/starter_clothes/woodelf_female/chest',0),(21093,51675,'accessories/wearable_items01/_exp00/starter_clothes/woodelf_female/legs',0),(21094,51676,'accessories/wearable_items01/_exp00/starter_clothes/woodelf_female/sleeves',0),(21095,51677,'accessories/wearable_items01/_exp00/starter_clothes/woodelf_male/arms',0),(21096,51678,'accessories/wearable_items01/_exp00/starter_clothes/woodelf_male/chest',0),(21097,51679,'accessories/wearable_items01/_exp00/starter_clothes/woodelf_male/legs',0),(21098,51680,'accessories/wearable_items01/_exp00/starter_clothes/woodelf_male/sleeves',0),(21099,51681,'accessories/wearable_items01/_exp00/tradesman/clothing/brawler/brawler_wrapped/chest',0),(21100,51682,'accessories/wearable_items01/_exp00/tradesman/clothing/brawler/brawler_wrapped/feet',0),(21101,51683,'accessories/wearable_items01/_exp00/tradesman/clothing/brawler/brawler_wrapped/pants',0),(21102,51684,'accessories/wearable_items01/_exp00/tradesman/clothing/brawler/brawler_wrapped/shoulders',0),(21103,51685,'accessories/wearable_items01/_exp00/tradesman/clothing/brawler/med_studded/arms',0),(21104,51686,'accessories/wearable_items01/_exp00/tradesman/clothing/brawler/med_studded/chest',0),(21105,51687,'accessories/wearable_items01/_exp00/tradesman/clothing/brawler/med_studded/legs',0),(21106,51688,'accessories/wearable_items01/_exp00/tradesman/clothing/ornateshinygold/chest',0),(21107,51689,'accessories/wearable_items01/_exp00/tradesman/clothing/ornateshinygold/legs',0),(21108,51690,'accessories/wearable_items01/_exp00/tradesman/clothing/ornateshinygold/shoulders',0),(21109,51691,'accessories/wearable_items01/_exp00/tradesman/clothing/ornateshinygold/sleeves',0),(21110,51692,'accessories/wearable_items01/_exp00/tradesman/clothing/plain_brown_female/chest',0),(21111,51693,'accessories/wearable_items01/_exp00/tradesman/clothing/plain_brown_female/legs',0),(21112,51694,'accessories/wearable_items01/_exp00/tradesman/clothing/plain_green_vest/arms',0),(21113,51695,'accessories/wearable_items01/_exp00/tradesman/clothing/plain_green_vest/chest',0),(21114,51696,'accessories/wearable_items01/_exp00/tradesman/clothing/plain_green_vest/legs',0),(21115,51697,'accessories/wearable_items01/_exp00/tradesman/clothing/plain_green_vest/sleeves',0),(21116,51698,'accessories/wearable_items01/_exp00/tradesman/clothing/plainbluelacey/chest',0),(21117,51699,'accessories/wearable_items01/_exp00/tradesman/clothing/plainbluelacey/legs',0),(21118,51700,'accessories/wearable_items01/_exp00/tradesman/clothing/plainbluelacey/shoulders',0),(21119,51701,'accessories/wearable_items01/_exp00/tradesman/clothing/plainbluelacey/sleeves',0),(21120,51702,'accessories/wearable_items01/_exp00/tradesman/clothing/smith/common_good/chest',0),(21121,51703,'accessories/wearable_items01/_exp00/tradesman/clothing/smith/common_good/feet',0),(21122,51704,'accessories/wearable_items01/_exp00/tradesman/clothing/smith/common_good/hands',0),(21123,51705,'accessories/wearable_items01/_exp00/tradesman/clothing/smith/common_good/legs',0),(21124,51706,'accessories/wearable_items01/_exp00/tradesman/clothing/smith/common_good/skirt',0),(21125,51707,'accessories/wearable_items01/_exp00/tradesman/common/low/arms',0),(21126,51708,'accessories/wearable_items01/_exp00/tradesman/common/low/chest',0),(21127,51709,'accessories/wearable_items01/_exp00/tradesman/common/low/legs',0),(21128,51710,'accessories/wearable_items01/_exp00/tradesman/common/low/sleeves',0),(21129,51711,'accessories/wearable_items01/_exp00/tradesman/common/medium/arms',0),(21130,51712,'accessories/wearable_items01/_exp00/tradesman/common/medium/chest',0),(21131,51713,'accessories/wearable_items01/_exp00/tradesman/common/medium/legs',0),(21132,51714,'accessories/wearable_items01/_exp00/tradesman/common/medium/sleeves',0),(21133,51715,'accessories/wearable_items01/_exp00/vanguard/common/high/chest',0),(21134,51716,'accessories/wearable_items01/_exp00/vanguard/common/high/feet',0),(21135,51717,'accessories/wearable_items01/_exp00/vanguard/common/high/forearms',0),(21136,51718,'accessories/wearable_items01/_exp00/vanguard/common/high/hands',0),(21137,51719,'accessories/wearable_items01/_exp00/vanguard/common/high/head',0),(21138,51720,'accessories/wearable_items01/_exp00/vanguard/common/high/left',0),(21139,51721,'accessories/wearable_items01/_exp00/vanguard/common/high/legs',0),(21140,51722,'accessories/wearable_items01/_exp00/vanguard/common/high/legs_noskirt',0),(21141,51723,'accessories/wearable_items01/_exp00/vanguard/common/high/right',0),(21142,51724,'accessories/wearable_items01/_exp00/vanguard/common/high/shoulders',0),(21143,51725,'accessories/wearable_items01/_exp00/vanguard/common/high/shoulders_nopauldrons',0),(21144,51726,'accessories/wearable_items01/_exp00/vanguard/common/high/skirt',0),(21145,51727,'accessories/wearable_items01/_exp00/vanguard/common/high/upperchest',0),(21146,51728,'accessories/wearable_items01/_exp00/vanguard/common/low/chest',0),(21147,51729,'accessories/wearable_items01/_exp00/vanguard/common/low/feet',0),(21148,51730,'accessories/wearable_items01/_exp00/vanguard/common/low/forearms',0),(21149,51731,'accessories/wearable_items01/_exp00/vanguard/common/low/hands',0),(21150,51732,'accessories/wearable_items01/_exp00/vanguard/common/low/head',0),(21151,51733,'accessories/wearable_items01/_exp00/vanguard/common/low/left',0),(21152,51734,'accessories/wearable_items01/_exp00/vanguard/common/low/legs',0),(21153,51735,'accessories/wearable_items01/_exp00/vanguard/common/low/legs_noskirt',0),(21154,51736,'accessories/wearable_items01/_exp00/vanguard/common/low/right',0),(21155,51737,'accessories/wearable_items01/_exp00/vanguard/common/low/shoulders',0),(21156,51738,'accessories/wearable_items01/_exp00/vanguard/common/low/shoulders_nopauldrons',0),(21157,51739,'accessories/wearable_items01/_exp00/vanguard/common/low/skirt',0),(21158,51740,'accessories/wearable_items01/_exp00/vanguard/common/low/upperchest',0),(21159,51741,'accessories/wearable_items01/_exp00/vanguard/common/medium/chest',0),(21160,51742,'accessories/wearable_items01/_exp00/vanguard/common/medium/feet',0),(21161,51743,'accessories/wearable_items01/_exp00/vanguard/common/medium/forearms',0),(21162,51744,'accessories/wearable_items01/_exp00/vanguard/common/medium/hands',0),(21163,51745,'accessories/wearable_items01/_exp00/vanguard/common/medium/head',0),(21164,51746,'accessories/wearable_items01/_exp00/vanguard/common/medium/left',0),(21165,51747,'accessories/wearable_items01/_exp00/vanguard/common/medium/legs',0),(21166,51748,'accessories/wearable_items01/_exp00/vanguard/common/medium/legs_noskirt',0),(21167,51749,'accessories/wearable_items01/_exp00/vanguard/common/medium/right',0),(21168,51750,'accessories/wearable_items01/_exp00/vanguard/common/medium/shoulders',0),(21169,51751,'accessories/wearable_items01/_exp00/vanguard/common/medium/shoulders_nopauldrons',0),(21170,51752,'accessories/wearable_items01/_exp00/vanguard/common/medium/skirt',0),(21171,51753,'accessories/wearable_items01/_exp00/vanguard/common/medium/upperchest',0),(21172,51754,'accessories/wearable_items01/_exp00/vanguard/rare/low/chest',0),(21173,51755,'accessories/wearable_items01/_exp00/vanguard/rare/low/feet',0),(21174,51756,'accessories/wearable_items01/_exp00/vanguard/rare/low/forearms',0),(21175,51757,'accessories/wearable_items01/_exp00/vanguard/rare/low/hands',0),(21176,51758,'accessories/wearable_items01/_exp00/vanguard/rare/low/head',0),(21177,51759,'accessories/wearable_items01/_exp00/vanguard/rare/low/left',0),(21178,51760,'accessories/wearable_items01/_exp00/vanguard/rare/low/legs',0),(21179,51761,'accessories/wearable_items01/_exp00/vanguard/rare/low/legs_noskirt',0),(21180,51762,'accessories/wearable_items01/_exp00/vanguard/rare/low/right',0),(21181,51763,'accessories/wearable_items01/_exp00/vanguard/rare/low/shoulders',0),(21182,51764,'accessories/wearable_items01/_exp00/vanguard/rare/low/shoulders_nopauldrons',0),(21183,51765,'accessories/wearable_items01/_exp00/vanguard/rare/low/skirt',0),(21184,51766,'accessories/wearable_items01/_exp00/vanguard/rare/low/upperchest',0),(21185,51767,'accessories/wearable_items01/_exp00/vanguard/rare/medium/chest',0),(21186,51768,'accessories/wearable_items01/_exp00/vanguard/rare/medium/feet',0),(21187,51769,'accessories/wearable_items01/_exp00/vanguard/rare/medium/forearms',0),(21188,51770,'accessories/wearable_items01/_exp00/vanguard/rare/medium/hands',0),(21189,51771,'accessories/wearable_items01/_exp00/vanguard/rare/medium/head',0),(21190,51772,'accessories/wearable_items01/_exp00/vanguard/rare/medium/left',0),(21191,51773,'accessories/wearable_items01/_exp00/vanguard/rare/medium/legs',0),(21192,51774,'accessories/wearable_items01/_exp00/vanguard/rare/medium/legs_noskirt',0),(21193,51775,'accessories/wearable_items01/_exp00/vanguard/rare/medium/right',0),(21194,51776,'accessories/wearable_items01/_exp00/vanguard/rare/medium/shoulders',0),(21195,51777,'accessories/wearable_items01/_exp00/vanguard/rare/medium/shoulders_nopauldrons',0),(21196,51778,'accessories/wearable_items01/_exp00/vanguard/rare/medium/skirt',0),(21197,51779,'accessories/wearable_items01/_exp00/vanguard/rare/medium/upperchest',0),(21198,51780,'accessories/wearable_items01/_exp00/vanguard/uncommon/high/chest',0),(21199,51781,'accessories/wearable_items01/_exp00/vanguard/uncommon/high/feet',0),(21200,51782,'accessories/wearable_items01/_exp00/vanguard/uncommon/high/forearms',0),(21201,51783,'accessories/wearable_items01/_exp00/vanguard/uncommon/high/hands',0),(21202,51784,'accessories/wearable_items01/_exp00/vanguard/uncommon/high/head',0),(21203,51785,'accessories/wearable_items01/_exp00/vanguard/uncommon/high/left',0),(21204,51786,'accessories/wearable_items01/_exp00/vanguard/uncommon/high/legs',0),(21205,51787,'accessories/wearable_items01/_exp00/vanguard/uncommon/high/legs_noskirt',0),(21206,51788,'accessories/wearable_items01/_exp00/vanguard/uncommon/high/right',0),(21207,51789,'accessories/wearable_items01/_exp00/vanguard/uncommon/high/shoulders',0),(21208,51790,'accessories/wearable_items01/_exp00/vanguard/uncommon/high/shoulders_nopauldrons',0),(21209,51791,'accessories/wearable_items01/_exp00/vanguard/uncommon/high/skirt',0),(21210,51792,'accessories/wearable_items01/_exp00/vanguard/uncommon/high/upperchest',0),(21211,51793,'accessories/wearable_items01/_exp00/vanguard/uncommon/low/chest',0),(21212,51794,'accessories/wearable_items01/_exp00/vanguard/uncommon/low/feet',0),(21213,51795,'accessories/wearable_items01/_exp00/vanguard/uncommon/low/forearms',0),(21214,51796,'accessories/wearable_items01/_exp00/vanguard/uncommon/low/hands',0),(21215,51797,'accessories/wearable_items01/_exp00/vanguard/uncommon/low/head',0),(21216,51798,'accessories/wearable_items01/_exp00/vanguard/uncommon/low/left',0),(21217,51799,'accessories/wearable_items01/_exp00/vanguard/uncommon/low/legs',0),(21218,51800,'accessories/wearable_items01/_exp00/vanguard/uncommon/low/legs_noskirt',0),(21219,51801,'accessories/wearable_items01/_exp00/vanguard/uncommon/low/right',0),(21220,51802,'accessories/wearable_items01/_exp00/vanguard/uncommon/low/shoulders',0),(21221,51803,'accessories/wearable_items01/_exp00/vanguard/uncommon/low/shoulders_nopauldrons',0),(21222,51804,'accessories/wearable_items01/_exp00/vanguard/uncommon/low/skirt',0),(21223,51805,'accessories/wearable_items01/_exp00/vanguard/uncommon/low/upperchest',0),(21224,51806,'accessories/wearable_items01/_exp00/vanguard/uncommon/medium/chest',0),(21225,51807,'accessories/wearable_items01/_exp00/vanguard/uncommon/medium/feet',0),(21226,51808,'accessories/wearable_items01/_exp00/vanguard/uncommon/medium/forearms',0),(21227,51809,'accessories/wearable_items01/_exp00/vanguard/uncommon/medium/hands',0),(21228,51810,'accessories/wearable_items01/_exp00/vanguard/uncommon/medium/head',0),(21229,51811,'accessories/wearable_items01/_exp00/vanguard/uncommon/medium/left',0),(21230,51812,'accessories/wearable_items01/_exp00/vanguard/uncommon/medium/legs',0),(21231,51813,'accessories/wearable_items01/_exp00/vanguard/uncommon/medium/legs_noskirt',0),(21232,51814,'accessories/wearable_items01/_exp00/vanguard/uncommon/medium/right',0),(21233,51815,'accessories/wearable_items01/_exp00/vanguard/uncommon/medium/shoulders',0),(21234,51816,'accessories/wearable_items01/_exp00/vanguard/uncommon/medium/shoulders_nopauldrons',0),(21235,51817,'accessories/wearable_items01/_exp00/vanguard/uncommon/medium/skirt',0),(21236,51818,'accessories/wearable_items01/_exp00/vanguard/uncommon/medium/upperchest',0),(21237,51819,'accessories/wearable_items01/_exp00/vanguard/vanguard_tint01/chest',0),(21238,51820,'accessories/wearable_items01/_exp00/vanguard/vanguard_tint01/feet',0),(21239,51821,'accessories/wearable_items01/_exp00/vanguard/vanguard_tint01/forearms',0),(21240,51822,'accessories/wearable_items01/_exp00/vanguard/vanguard_tint01/hands',0),(21241,51823,'accessories/wearable_items01/_exp00/vanguard/vanguard_tint01/head',0),(21242,51824,'accessories/wearable_items01/_exp00/vanguard/vanguard_tint01/legs',0),(21243,51825,'accessories/wearable_items01/_exp00/vanguard/vanguard_tint01/right',0),(21244,51826,'accessories/wearable_items01/_exp00/vanguard/vanguard_tint01/shoulders',0),(21245,51827,'accessories/wearable_items01/_exp00/vanguard/vanguard_tint01/shoulders_nopauldrons',0),(21246,51828,'accessories/wearable_items01/_exp00/vanguard/vanguard_tint01/upperchest',0),(21247,51829,'accessories/wearable_items01/_exp00/white_robe/chest',0),(21248,51830,'accessories/wearable_items01/_exp00/white_robe/hood',0),(21249,51831,'accessories/wearable_items01/_exp00/white_robe/pants',0),(21250,51832,'accessories/wearable_items01/_exp00/white_robe/skirt',0),(21251,51833,'accessories/wearable_items01/_exp00/woven/common/high/chest',0),(21252,51834,'accessories/wearable_items01/_exp00/woven/common/high/feet',0),(21253,51835,'accessories/wearable_items01/_exp00/woven/common/high/forearms',0),(21254,51836,'accessories/wearable_items01/_exp00/woven/common/high/hands',0),(21255,51837,'accessories/wearable_items01/_exp00/woven/common/high/head',0),(21256,51838,'accessories/wearable_items01/_exp00/woven/common/high/legs',0),(21257,51839,'accessories/wearable_items01/_exp00/woven/common/high/legs_noskirt',0),(21258,51840,'accessories/wearable_items01/_exp00/woven/common/high/shoulders',0),(21259,51841,'accessories/wearable_items01/_exp00/woven/common/high/skirt',0),(21260,51842,'accessories/wearable_items01/_exp00/woven/common/low/chest',0),(21261,51843,'accessories/wearable_items01/_exp00/woven/common/low/feet',0),(21262,51844,'accessories/wearable_items01/_exp00/woven/common/low/forearms',0),(21263,51845,'accessories/wearable_items01/_exp00/woven/common/low/hands',0),(21264,51846,'accessories/wearable_items01/_exp00/woven/common/low/head',0),(21265,51847,'accessories/wearable_items01/_exp00/woven/common/low/legs',0),(21266,51848,'accessories/wearable_items01/_exp00/woven/common/low/legs_noskirt',0),(21267,51849,'accessories/wearable_items01/_exp00/woven/common/low/shoulders',0),(21268,51850,'accessories/wearable_items01/_exp00/woven/common/low/skirt',0),(21269,51851,'accessories/wearable_items01/_exp00/woven/common/medium/chest',0),(21270,51852,'accessories/wearable_items01/_exp00/woven/common/medium/feet',0),(21271,51853,'accessories/wearable_items01/_exp00/woven/common/medium/forearms',0),(21272,51854,'accessories/wearable_items01/_exp00/woven/common/medium/hands',0),(21273,51855,'accessories/wearable_items01/_exp00/woven/common/medium/head',0),(21274,51856,'accessories/wearable_items01/_exp00/woven/common/medium/legs',0),(21275,51857,'accessories/wearable_items01/_exp00/woven/common/medium/legs_noskirt',0),(21276,51858,'accessories/wearable_items01/_exp00/woven/common/medium/shoulders',0),(21277,51859,'accessories/wearable_items01/_exp00/woven/common/medium/skirt',0),(21278,51860,'accessories/wearable_items01/_exp00/woven/rare/low/chest',0),(21279,51861,'accessories/wearable_items01/_exp00/woven/rare/low/feet',0),(21280,51862,'accessories/wearable_items01/_exp00/woven/rare/low/forearms',0),(21281,51863,'accessories/wearable_items01/_exp00/woven/rare/low/hands',0),(21282,51864,'accessories/wearable_items01/_exp00/woven/rare/low/head',0),(21283,51865,'accessories/wearable_items01/_exp00/woven/rare/low/legs',0),(21284,51866,'accessories/wearable_items01/_exp00/woven/rare/low/legs_noskirt',0),(21285,51867,'accessories/wearable_items01/_exp00/woven/rare/low/shoulders',0),(21286,51868,'accessories/wearable_items01/_exp00/woven/rare/low/skirt',0),(21287,51869,'accessories/wearable_items01/_exp00/woven/uncommon/high/chest',0),(21288,51870,'accessories/wearable_items01/_exp00/woven/uncommon/high/feet',0),(21289,51871,'accessories/wearable_items01/_exp00/woven/uncommon/high/forearms',0),(21290,51872,'accessories/wearable_items01/_exp00/woven/uncommon/high/hands',0),(21291,51873,'accessories/wearable_items01/_exp00/woven/uncommon/high/head',0),(21292,51874,'accessories/wearable_items01/_exp00/woven/uncommon/high/legs',0),(21293,51875,'accessories/wearable_items01/_exp00/woven/uncommon/high/legs_noskirt',0),(21294,51876,'accessories/wearable_items01/_exp00/woven/uncommon/high/shoulders',0),(21295,51877,'accessories/wearable_items01/_exp00/woven/uncommon/high/skirt',0),(21296,51878,'accessories/wearable_items01/_exp00/woven/uncommon/low/chest',0),(21297,51879,'accessories/wearable_items01/_exp00/woven/uncommon/low/feet',0),(21298,51880,'accessories/wearable_items01/_exp00/woven/uncommon/low/forearms',0),(21299,51881,'accessories/wearable_items01/_exp00/woven/uncommon/low/hands',0),(21300,51882,'accessories/wearable_items01/_exp00/woven/uncommon/low/head',0),(21301,51883,'accessories/wearable_items01/_exp00/woven/uncommon/low/legs',0),(21302,51884,'accessories/wearable_items01/_exp00/woven/uncommon/low/legs_noskirt',0),(21303,51885,'accessories/wearable_items01/_exp00/woven/uncommon/low/shoulders',0),(21304,51886,'accessories/wearable_items01/_exp00/woven/uncommon/low/skirt',0),(21305,51887,'accessories/wearable_items01/_exp00/woven/uncommon/medium/chest',0),(21306,51888,'accessories/wearable_items01/_exp00/woven/uncommon/medium/feet',0),(21307,51889,'accessories/wearable_items01/_exp00/woven/uncommon/medium/forearms',0),(21308,51890,'accessories/wearable_items01/_exp00/woven/uncommon/medium/hands',0),(21309,51891,'accessories/wearable_items01/_exp00/woven/uncommon/medium/head',0),(21310,51892,'accessories/wearable_items01/_exp00/woven/uncommon/medium/legs',0),(21311,51893,'accessories/wearable_items01/_exp00/woven/uncommon/medium/legs_noskirt',0),(21312,51894,'accessories/wearable_items01/_exp00/woven/uncommon/medium/shoulders',0),(21313,51895,'accessories/wearable_items01/_exp00/woven/uncommon/medium/skirt',0),(21314,51896,'accessories/wearable_items01/_exp02/brigandine_heavy/chest',0),(21315,51897,'accessories/wearable_items01/_exp02/brigandine_heavy/feet',0),(21316,51898,'accessories/wearable_items01/_exp02/brigandine_heavy/forearms',0),(21317,51899,'accessories/wearable_items01/_exp02/brigandine_heavy/hands',0),(21318,51900,'accessories/wearable_items01/_exp02/brigandine_heavy/head',0),(21319,51901,'accessories/wearable_items01/_exp02/brigandine_heavy/legs',0),(21320,51902,'accessories/wearable_items01/_exp02/brigandine_heavy/shoulders',0),(21321,51903,'accessories/wearable_items01/_exp02/chain_heroic/chest',0),(21322,51904,'accessories/wearable_items01/_exp02/chain_heroic/feet',0),(21323,51905,'accessories/wearable_items01/_exp02/chain_heroic/forearms',0),(21324,51906,'accessories/wearable_items01/_exp02/chain_heroic/hands',0),(21325,51907,'accessories/wearable_items01/_exp02/chain_heroic/head',0),(21326,51908,'accessories/wearable_items01/_exp02/chain_heroic/legs',0),(21327,51909,'accessories/wearable_items01/_exp02/chain_heroic/legs_noskirt',0),(21328,51910,'accessories/wearable_items01/_exp02/chain_heroic/shoulders',0),(21329,51911,'accessories/wearable_items01/_exp02/chain_heroic/skirt',0),(21330,51912,'accessories/wearable_items01/_exp02/heavy_cloth_heroic/chest',0),(21331,51913,'accessories/wearable_items01/_exp02/heavy_cloth_heroic/feet',0),(21332,51914,'accessories/wearable_items01/_exp02/heavy_cloth_heroic/forearms',0),(21333,51915,'accessories/wearable_items01/_exp02/heavy_cloth_heroic/hands',0),(21334,51916,'accessories/wearable_items01/_exp02/heavy_cloth_heroic/legs',0),(21335,51917,'accessories/wearable_items01/_exp02/heavy_cloth_heroic/shoulders',0),(21336,51918,'accessories/wearable_items01/_exp02/leather_heavy/chest',0),(21337,51919,'accessories/wearable_items01/_exp02/leather_heavy/feet',0),(21338,51920,'accessories/wearable_items01/_exp02/leather_heavy/forearms',0),(21339,51921,'accessories/wearable_items01/_exp02/leather_heavy/hands',0),(21340,51922,'accessories/wearable_items01/_exp02/leather_heavy/head',0),(21341,51923,'accessories/wearable_items01/_exp02/leather_heavy/legs',0),(21342,51924,'accessories/wearable_items01/_exp02/leather_heavy/legs_noskirt',0),(21343,51925,'accessories/wearable_items01/_exp02/leather_heavy/shoulders',0),(21344,51926,'accessories/wearable_items01/_exp02/leather_heavy/skirt',0),(21345,51927,'accessories/wearable_items01/_exp02/plate_heroic/chest',0),(21346,51928,'accessories/wearable_items01/_exp02/plate_heroic/feet',0),(21347,51929,'accessories/wearable_items01/_exp02/plate_heroic/forearms',0),(21348,51930,'accessories/wearable_items01/_exp02/plate_heroic/hands',0),(21349,51931,'accessories/wearable_items01/_exp02/plate_heroic/head',0),(21350,51932,'accessories/wearable_items01/_exp02/plate_heroic/legs',0),(21351,51933,'accessories/wearable_items01/_exp02/plate_heroic/shoulders',0),(21352,51934,'accessories/wearable_items01/_exp02/robe_fire/chest',0),(21353,51935,'accessories/wearable_items01/_exp02/robe_fire/hood',0),(21354,51936,'accessories/wearable_items01/_exp02/robe_fire/pants',0),(21355,51937,'accessories/wearable_items01/_exp02/robe_fire/skirt',0),(21356,51938,'accessories/wearable_items01/_exp02/vanguard_chitin/chest',0),(21357,51939,'accessories/wearable_items01/_exp02/vanguard_chitin/exp02_chest_parasite',0),(21358,51940,'accessories/wearable_items01/_exp02/vanguard_chitin/feet',0),(21359,51941,'accessories/wearable_items01/_exp02/vanguard_chitin/forearms',0),(21360,51942,'accessories/wearable_items01/_exp02/vanguard_chitin/hands',0),(21361,51943,'accessories/wearable_items01/_exp02/vanguard_chitin/head',0),(21362,51944,'accessories/wearable_items01/_exp02/vanguard_chitin/legs',0),(21363,51945,'accessories/wearable_items01/_exp02/vanguard_chitin/legs_noskirt',0),(21364,51946,'accessories/wearable_items01/_exp02/vanguard_chitin/right',0),(21365,51947,'accessories/wearable_items01/_exp02/vanguard_chitin/shoulders',0),(21366,51948,'accessories/wearable_items01/_exp02/vanguard_chitin/shoulders_nopauldrons',0),(21367,51949,'accessories/wearable_items01/_exp02/vanguard_chitin/skirt',0),(21368,51950,'accessories/wearable_items01/_exp02/woven_monk/chest',0),(21369,51951,'accessories/wearable_items01/_exp02/woven_monk/feet',0),(21370,51952,'accessories/wearable_items01/_exp02/woven_monk/forearms',0),(21371,51953,'accessories/wearable_items01/_exp02/woven_monk/hands',0),(21372,51954,'accessories/wearable_items01/_exp02/woven_monk/head',0),(21373,51955,'accessories/wearable_items01/_exp02/woven_monk/legs',0),(21374,51956,'accessories/wearable_items01/_exp02/woven_monk/legs_noskirt',0),(21375,51957,'accessories/wearable_items01/_exp02/woven_monk/shoulders',0),(21376,51958,'accessories/wearable_items01/_exp02/woven_monk/skirt',0),(21377,51959,'accessories/wearable_items01/_exp03/chain_heroic_pristine/chest',0),(21378,51960,'accessories/wearable_items01/_exp03/chain_heroic_pristine/feet',0),(21379,51961,'accessories/wearable_items01/_exp03/chain_heroic_pristine/forearms',0),(21380,51962,'accessories/wearable_items01/_exp03/chain_heroic_pristine/hands',0),(21381,51963,'accessories/wearable_items01/_exp03/chain_heroic_pristine/head',0),(21382,51964,'accessories/wearable_items01/_exp03/chain_heroic_pristine/legs',0),(21383,51965,'accessories/wearable_items01/_exp03/chain_heroic_pristine/legs_noskirt',0),(21384,51966,'accessories/wearable_items01/_exp03/chain_heroic_pristine/shoulders',0),(21385,51967,'accessories/wearable_items01/_exp03/chain_heroic_pristine/skirt',0),(21386,51968,'accessories/wearable_items01/_exp03/faydark_chain_01/chest',0),(21387,51969,'accessories/wearable_items01/_exp03/faydark_chain_01/feet',0),(21388,51970,'accessories/wearable_items01/_exp03/faydark_chain_01/forearms',0),(21389,51971,'accessories/wearable_items01/_exp03/faydark_chain_01/hands',0),(21390,51972,'accessories/wearable_items01/_exp03/faydark_chain_01/head',0),(21391,51973,'accessories/wearable_items01/_exp03/faydark_chain_01/legs',0),(21392,51974,'accessories/wearable_items01/_exp03/faydark_chain_01/legs_noskirt',0),(21393,51975,'accessories/wearable_items01/_exp03/faydark_chain_01/shoulders',0),(21394,51976,'accessories/wearable_items01/_exp03/faydark_chain_01/skirt',0),(21395,51977,'accessories/wearable_items01/_exp03/faydark_leather_01/chest',0),(21396,51978,'accessories/wearable_items01/_exp03/faydark_leather_01/feet',0),(21397,51979,'accessories/wearable_items01/_exp03/faydark_leather_01/forearms',0),(21398,51980,'accessories/wearable_items01/_exp03/faydark_leather_01/hands',0),(21399,51981,'accessories/wearable_items01/_exp03/faydark_leather_01/head',0),(21400,51982,'accessories/wearable_items01/_exp03/faydark_leather_01/legs',0),(21401,51983,'accessories/wearable_items01/_exp03/faydark_leather_01/legs_noskirt',0),(21402,51984,'accessories/wearable_items01/_exp03/faydark_leather_01/shoulders',0),(21403,51985,'accessories/wearable_items01/_exp03/faydark_leather_01/skirt',0),(21404,51986,'accessories/wearable_items01/_exp03/faydark_plate_01/chest',0),(21405,51987,'accessories/wearable_items01/_exp03/faydark_plate_01/feet',0),(21406,51988,'accessories/wearable_items01/_exp03/faydark_plate_01/forearms',0),(21407,51989,'accessories/wearable_items01/_exp03/faydark_plate_01/hands',0),(21408,51990,'accessories/wearable_items01/_exp03/faydark_plate_01/head',0),(21409,51991,'accessories/wearable_items01/_exp03/faydark_plate_01/legs',0),(21410,51992,'accessories/wearable_items01/_exp03/faydark_plate_01/shoulders',0),(21411,51993,'accessories/wearable_items01/_exp03/faydark_robe_01/chest',0),(21412,51994,'accessories/wearable_items01/_exp03/faydark_robe_01/hood',0),(21413,51995,'accessories/wearable_items01/_exp03/faydark_robe_01/pants',0),(21414,51996,'accessories/wearable_items01/_exp03/faydark_robe_01/skirt',0),(21415,51997,'accessories/wearable_items01/_exp03/kaladim_bruiser_gi_01/chest',0),(21416,51998,'accessories/wearable_items01/_exp03/kaladim_bruiser_gi_01/pants',0),(21417,51999,'accessories/wearable_items01/_exp03/kaladim_bruiser_gi_01/shoulders',0),(21418,52000,'accessories/wearable_items01/_exp03/kaladim_chain_01/chest',0),(21419,52001,'accessories/wearable_items01/_exp03/kaladim_chain_01/feet',0),(21420,52002,'accessories/wearable_items01/_exp03/kaladim_chain_01/forearms',0),(21421,52003,'accessories/wearable_items01/_exp03/kaladim_chain_01/hands',0),(21422,52004,'accessories/wearable_items01/_exp03/kaladim_chain_01/head',0),(21423,52005,'accessories/wearable_items01/_exp03/kaladim_chain_01/legs',0),(21424,52006,'accessories/wearable_items01/_exp03/kaladim_chain_01/legs_noskirt',0),(21425,52007,'accessories/wearable_items01/_exp03/kaladim_chain_01/shoulders',0),(21426,52008,'accessories/wearable_items01/_exp03/kaladim_chain_01/skirt',0),(21427,52009,'accessories/wearable_items01/_exp03/kaladim_vanguard_01/chest',0),(21428,52010,'accessories/wearable_items01/_exp03/kaladim_vanguard_01/feet',0),(21429,52011,'accessories/wearable_items01/_exp03/kaladim_vanguard_01/forearms',0),(21430,52012,'accessories/wearable_items01/_exp03/kaladim_vanguard_01/hands',0),(21431,52013,'accessories/wearable_items01/_exp03/kaladim_vanguard_01/head',0),(21432,52014,'accessories/wearable_items01/_exp03/kaladim_vanguard_01/legs',0),(21433,52015,'accessories/wearable_items01/_exp03/kaladim_vanguard_01/legs_noskirt',0),(21434,52016,'accessories/wearable_items01/_exp03/kaladim_vanguard_01/right',0),(21435,52017,'accessories/wearable_items01/_exp03/kaladim_vanguard_01/shoulders',0),(21436,52018,'accessories/wearable_items01/_exp03/kaladim_vanguard_01/shoulders_nopauldrons',0),(21437,52019,'accessories/wearable_items01/_exp03/kaladim_vanguard_01/skirt',0),(21438,52020,'accessories/wearable_items01/_exp03/mistmoore_brigandine_01/chest',0),(21439,52021,'accessories/wearable_items01/_exp03/mistmoore_brigandine_01/feet',0),(21440,52022,'accessories/wearable_items01/_exp03/mistmoore_brigandine_01/forearms',0),(21441,52023,'accessories/wearable_items01/_exp03/mistmoore_brigandine_01/hands',0),(21442,52024,'accessories/wearable_items01/_exp03/mistmoore_brigandine_01/head',0),(21443,52025,'accessories/wearable_items01/_exp03/mistmoore_brigandine_01/legs',0),(21444,52026,'accessories/wearable_items01/_exp03/mistmoore_brigandine_01/shoulders',0),(21445,52027,'accessories/wearable_items01/_exp03/mistmoore_chain_01/chest',0),(21446,52028,'accessories/wearable_items01/_exp03/mistmoore_chain_01/feet',0),(21447,52029,'accessories/wearable_items01/_exp03/mistmoore_chain_01/forearms',0),(21448,52030,'accessories/wearable_items01/_exp03/mistmoore_chain_01/hands',0),(21449,52031,'accessories/wearable_items01/_exp03/mistmoore_chain_01/head',0),(21450,52032,'accessories/wearable_items01/_exp03/mistmoore_chain_01/legs',0),(21451,52033,'accessories/wearable_items01/_exp03/mistmoore_chain_01/legs_noskirt',0),(21452,52034,'accessories/wearable_items01/_exp03/mistmoore_chain_01/shoulders',0),(21453,52035,'accessories/wearable_items01/_exp03/mistmoore_chain_01/skirt',0),(21454,52036,'accessories/wearable_items01/_exp03/mistmoore_heavy_cloth_01/chest',0),(21455,52037,'accessories/wearable_items01/_exp03/mistmoore_heavy_cloth_01/feet',0),(21456,52038,'accessories/wearable_items01/_exp03/mistmoore_heavy_cloth_01/forearms',0),(21457,52039,'accessories/wearable_items01/_exp03/mistmoore_heavy_cloth_01/hands',0),(21458,52040,'accessories/wearable_items01/_exp03/mistmoore_heavy_cloth_01/legs',0),(21459,52041,'accessories/wearable_items01/_exp03/mistmoore_heavy_cloth_01/legs_noskirt',0),(21460,52042,'accessories/wearable_items01/_exp03/mistmoore_heavy_cloth_01/shoulders',0),(21461,52043,'accessories/wearable_items01/_exp03/mistmoore_heavy_cloth_01/skirt',0),(21462,52044,'accessories/wearable_items01/_exp03/mistmoore_leather_01/chest',0),(21463,52045,'accessories/wearable_items01/_exp03/mistmoore_leather_01/feet',0),(21464,52046,'accessories/wearable_items01/_exp03/mistmoore_leather_01/forearms',0),(21465,52047,'accessories/wearable_items01/_exp03/mistmoore_leather_01/hands',0),(21466,52048,'accessories/wearable_items01/_exp03/mistmoore_leather_01/head',0),(21467,52049,'accessories/wearable_items01/_exp03/mistmoore_leather_01/legs',0),(21468,52050,'accessories/wearable_items01/_exp03/mistmoore_leather_01/legs_noskirt',0),(21469,52051,'accessories/wearable_items01/_exp03/mistmoore_leather_01/shoulders',0),(21470,52052,'accessories/wearable_items01/_exp03/mistmoore_leather_01/skirt',0),(21471,52053,'accessories/wearable_items01/_exp03/mistmoore_plate_01/chest',0),(21472,52054,'accessories/wearable_items01/_exp03/mistmoore_plate_01/feet',0),(21473,52055,'accessories/wearable_items01/_exp03/mistmoore_plate_01/forearms',0),(21474,52056,'accessories/wearable_items01/_exp03/mistmoore_plate_01/hands',0),(21475,52057,'accessories/wearable_items01/_exp03/mistmoore_plate_01/head',0),(21476,52058,'accessories/wearable_items01/_exp03/mistmoore_plate_01/legs',0),(21477,52059,'accessories/wearable_items01/_exp03/mistmoore_plate_01/shoulders',0),(21478,52060,'accessories/wearable_items01/_exp03/mistmoore_robe_01/chest',0),(21479,52061,'accessories/wearable_items01/_exp03/mistmoore_robe_01/hood',0),(21480,52062,'accessories/wearable_items01/_exp03/mistmoore_robe_01/pants',0),(21481,52063,'accessories/wearable_items01/_exp03/mistmoore_robe_01/skirt',0),(21482,52064,'accessories/wearable_items01/_exp03/mistmoore_vanguard_01/chest',0),(21483,52065,'accessories/wearable_items01/_exp03/mistmoore_vanguard_01/feet',0),(21484,52066,'accessories/wearable_items01/_exp03/mistmoore_vanguard_01/forearms',0),(21485,52067,'accessories/wearable_items01/_exp03/mistmoore_vanguard_01/hands',0),(21486,52068,'accessories/wearable_items01/_exp03/mistmoore_vanguard_01/head',0),(21487,52069,'accessories/wearable_items01/_exp03/mistmoore_vanguard_01/legs',0),(21488,52070,'accessories/wearable_items01/_exp03/mistmoore_vanguard_01/legs_noskirt',0),(21489,52071,'accessories/wearable_items01/_exp03/mistmoore_vanguard_01/right',0),(21490,52072,'accessories/wearable_items01/_exp03/mistmoore_vanguard_01/shoulders',0),(21491,52073,'accessories/wearable_items01/_exp03/mistmoore_vanguard_01/shoulders_nopauldrons',0),(21492,52074,'accessories/wearable_items01/_exp03/mistmoore_vanguard_01/skirt',0),(21493,52075,'accessories/wearable_items01/_exp03/mistmoore_woven_01/chest',0),(21494,52076,'accessories/wearable_items01/_exp03/mistmoore_woven_01/feet',0),(21495,52077,'accessories/wearable_items01/_exp03/mistmoore_woven_01/forearms',0),(21496,52078,'accessories/wearable_items01/_exp03/mistmoore_woven_01/hands',0),(21497,52079,'accessories/wearable_items01/_exp03/mistmoore_woven_01/head',0),(21498,52080,'accessories/wearable_items01/_exp03/mistmoore_woven_01/legs',0),(21499,52081,'accessories/wearable_items01/_exp03/mistmoore_woven_01/legs_noskirt',0),(21500,52082,'accessories/wearable_items01/_exp03/mistmoore_woven_01/shoulders',0),(21501,52083,'accessories/wearable_items01/_exp03/mistmoore_woven_01/skirt',0),(21502,52084,'accessories/wearable_items01/_exp03/newbee_cloth_01/chest',0),(21503,52085,'accessories/wearable_items01/_exp03/newbee_cloth_01/feet',0),(21504,52086,'accessories/wearable_items01/_exp03/newbee_cloth_01/forearms',0),(21505,52087,'accessories/wearable_items01/_exp03/newbee_cloth_01/hands',0),(21506,52088,'accessories/wearable_items01/_exp03/newbee_cloth_01/head',0),(21507,52089,'accessories/wearable_items01/_exp03/newbee_cloth_01/legs',0),(21508,52090,'accessories/wearable_items01/_exp03/newbee_cloth_01/legs_noskirt',0),(21509,52091,'accessories/wearable_items01/_exp03/newbee_cloth_01/shoulders',0),(21510,52092,'accessories/wearable_items01/_exp03/newbee_cloth_01/skirt',0),(21511,52093,'accessories/wearable_items01/_exp03/npc_only/cloak_innoruuk_sq_01',0),(21512,52094,'accessories/wearable_items01/_exp03/npc_only/cloak_mayong_sq_01',0),(21513,52095,'staticobjects/signs/general/dpo_sfm_sign_floor',0),(21514,52096,'staticobjects/liveevent/exp06/dpo_tapestry_design_quellios',0),(21515,52097,'_exp06/zones/objects/exp06_prelude_events/dpo_teleportspires_ghosted_ulteran',0),(21516,52098,'_exp06/zones/objects/exp06_prelude_events/dpo_teleportspires01_phase01_everfrost',0),(21517,52099,'_exp06/zones/objects/exp06_prelude_events/dpo_teleportspires01_phase02_everfrost',0),(21518,52100,'_exp06/zones/objects/exp06_prelude_events/dpo_teleportspires01_phase03_everfrost',0),(21519,52101,'_exp06/zones/objects/exp06_prelude_events/dpo_teleportspires01_phase04_everfrost',0),(21520,52102,'_exp06/zones/objects/exp06_prelude_events/dpo_teleportspires01_phase05_everfrost',0),(21521,52103,'_exp06/zones/objects/exp06_prelude_events/dpo_teleportspires01_phase06_everfrost_final',0),(21522,52104,'_exp06/zones/objects/exp06_prelude_events/dpo_fprt_vase_smallgold01_floor',0),(21523,52105,'_exp06/zones/objects/exp06_prelude_events/dpo_gold_vase01_floor',0),(21524,52106,'_exp06/zones/objects/exp06_prelude_events/dpo_sos_aviak_papasan01_floor',0),(21525,52107,'_exp06/zones/objects/exp06_prelude_events/dpo_ss_vase_porcelain_small01_floor',0),(21526,52108,'_exp06/zones/objects/exp06_rgn_odus_south/qst_scalp',1045),(21527,52109,'staticobjects/_exp07/exp07_rgn_eastern_wastes/vel_orc_camp_bear_trap_closed',1096),(21528,52110,'staticobjects/_exp07/exp07_rgn_eastern_wastes/vel_orc_camp_bear_trap_open',1096),(21529,52111,'staticobjects/_exp07/exp07_rgn_eastern_wastes/vel_tizmak_items01_broken_drum01',1096),(21530,52112,'staticobjects/_exp07/exp07_rgn_great_divide/vel_othmir_cooking_hang_pot_no_fire_01',1096),(21531,52113,'staticobjects/_exp07/exp07_rgn_great_divide/vel_othmir_nipiks_memorial_01',1096),(21532,52114,'staticobjects/_exp07/exp07_rgn_great_divide/vel_othmir_prexus_shrine_01',1096),(21533,52115,'staticobjects/_exp07/exp07_rgn_great_divide/vel_rock_ice_medium01',1096),(21534,52116,'staticobjects/_exp07/exp07_rgn_eastern_wastes/vel_rock_wakin_medium01',1096),(21535,52117,'staticobjects/_exp07/exp07_rgn_eastern_wastes/vel_rock_wakin_small01',1096),(21536,52118,'staticobjects/_exp07/exp07_rgn_eastern_wastes/vel_rock_wakin_small02',1096),(21537,52119,'staticobjects/battlegrounds/kd_base_gate01',1096),(21538,52120,'staticobjects/battlegrounds/thur_entrance_gate01',1096),(21539,52121,'staticobjects/battlegrounds/kd_base_gate01_coll',1096),(21540,52122,'staticobjects/battlegrounds/thur_entrance_gate01_coll',1096),(21541,52123,'staticobjects/battlegrounds/bg_def_kael_idol01_mainbase',1144),(21542,52124,'staticobjects/battlegrounds/bg_def_kael_idol01_tower01',1144),(21543,52125,'staticobjects/battlegrounds/bg_def_kael_idol01_tower02',1144),(21544,52126,'staticobjects/battlegrounds/bg_def_thur_idol01_mainbase',1144),(21545,52127,'staticobjects/battlegrounds/bg_def_thur_idol01_tower01',1144),(21546,52128,'staticobjects/battlegrounds/bg_def_thur_idol01_tower02',1144); +/*!40000 ALTER TABLE `appearances` ENABLE KEYS */; +UNLOCK TABLES; + +-- +-- Table structure for table `bug_notes` +-- + +DROP TABLE IF EXISTS `bug_notes`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `bug_notes` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `bug_id` int(10) unsigned NOT NULL DEFAULT 0, + `note` text COLLATE latin1_general_ci DEFAULT NULL, + `author` varchar(64) COLLATE latin1_general_ci NOT NULL DEFAULT '', + `note_date` int(10) unsigned NOT NULL DEFAULT 0, + PRIMARY KEY (`id`), + KEY `BugIDX` (`bug_id`) +) ENGINE=InnoDB DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci ROW_FORMAT=COMPACT; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Dumping data for table `bug_notes` +-- + +LOCK TABLES `bug_notes` WRITE; +/*!40000 ALTER TABLE `bug_notes` DISABLE KEYS */; +/*!40000 ALTER TABLE `bug_notes` ENABLE KEYS */; +UNLOCK TABLES; + +-- +-- Table structure for table `bugs` +-- + +DROP TABLE IF EXISTS `bugs`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `bugs` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `Status` enum('New','Invalid','Fixed','Server Specific','Assigned','Duplicate','Closed','Not Implemented','Deleted','Not a Bug','By Design','Fixed in Dev') CHARACTER SET latin2 COLLATE latin2_bin NOT NULL DEFAULT 'New', + `world_id` int(10) unsigned NOT NULL DEFAULT 0, + `account_id` int(10) unsigned NOT NULL DEFAULT 0, + `player` varchar(64) NOT NULL DEFAULT ' ', + `category` varchar(64) NOT NULL DEFAULT ' ', + `subcategory` varchar(64) NOT NULL DEFAULT ' ', + `causes_crash` varchar(64) NOT NULL DEFAULT '', + `reproducible` varchar(64) NOT NULL DEFAULT '', + `summary` varchar(128) NOT NULL DEFAULT ' ', + `description` text NOT NULL, + `version` varchar(32) NOT NULL DEFAULT '', + `spawn_name` varchar(64) NOT NULL DEFAULT 'N/A', + `spawn_id` int(10) unsigned NOT NULL DEFAULT 0, + `bug_datetime` timestamp NOT NULL DEFAULT current_timestamp(), + `zone_id` int(10) unsigned NOT NULL DEFAULT 0, + `assign_to_forum_id` int(10) DEFAULT 0, + `fixed_by_forum_id` int(10) unsigned NOT NULL DEFAULT 0, + `forum_id` int(10) unsigned NOT NULL DEFAULT 0, + `post_id` int(10) unsigned NOT NULL DEFAULT 0, + `priority` tinyint(3) unsigned NOT NULL DEFAULT 0, + `bug_updated` int(10) NOT NULL DEFAULT 0, + `bug_type` tinyint(1) unsigned NOT NULL DEFAULT 0, + PRIMARY KEY (`id`) +) ENGINE=MyISAM AUTO_INCREMENT=606 DEFAULT CHARSET=latin1; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Dumping data for table `bugs` +-- + +LOCK TABLES `bugs` WRITE; +/*!40000 ALTER TABLE `bugs` DISABLE KEYS */; +/*!40000 ALTER TABLE `bugs` ENABLE KEYS */; +UNLOCK TABLES; + +-- +-- Table structure for table `log_messages` +-- + +DROP TABLE IF EXISTS `log_messages`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `log_messages` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `log_time` int(10) unsigned NOT NULL DEFAULT 0, + `log_type` varchar(64) COLLATE latin1_general_ci NOT NULL, + `message` text COLLATE latin1_general_ci NOT NULL, + `account` varchar(64) COLLATE latin1_general_ci NOT NULL DEFAULT '', + `client_data_version` int(10) unsigned NOT NULL DEFAULT 0, + `log_entry_archived` tinyint(1) unsigned NOT NULL DEFAULT 0, + `type` text COLLATE latin1_general_ci DEFAULT NULL, + `name` text COLLATE latin1_general_ci NOT NULL DEFAULT '', + `version` text COLLATE latin1_general_ci DEFAULT 0, + PRIMARY KEY (`id`) +) ENGINE=MyISAM AUTO_INCREMENT=19 DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Dumping data for table `log_messages` +-- + +LOCK TABLES `log_messages` WRITE; +/*!40000 ALTER TABLE `log_messages` DISABLE KEYS */; +INSERT INTO `log_messages` VALUES (1,1387653218,'Verify Log','build=\"SOEBuild=10586L\" version=\"SOEVersionString=2013/11/20 14:00:57\" build_type=\"USER OPTIMIZED\" ls_address=\"none\" zone=\"ZoneScene::onOpen\" loc=\"-124.68 59.82 -890.29\" performance=\"7\" alert=\"G:\\live\\eq2\\framework\\resman\\ResourceManager.cpp(125): Resource leak! (ui/default/images/window_elements_specific.dds)\"\nbuild=\"SOEBuild=10586L\" version=\"SOEVersionString=2013/11/20 14:00:57\" build_type=\"USER OPTIMIZED\" ls_address=\"none\" zone=\"ZoneScene::onOpen\" loc=\"-124.68 59.82 -890.29\" performance=\"7\" alert=\"G:\\live\\eq2\\framework\\resman\\ResourceManager.cpp(125): Resource leak! (ui/default/images/specialelements.dds)\"\nbuild=\"SOEBuild=10586L\" version=\"SOEVersionString=2013/11/20 14:00:57\" build_type=\"USER OPTIMIZED\" ls_address=\"none\" zone=\"\" loc=\" 0.00 0.00 0.00\" performance=\"3\" alert=\"G:\\live\\eq2\\framework\\vdl\\VdlErr.cpp(85): (VDL Parser) runtimevdl/cbaseclasses.vdl(21) : Error, File not found, runtimevdl/services.vdl.\n\"\nbuild=\"SOEBuild=10586L\" version=\"SOEVersionString=2013/11/20 14:00:57\" build_type=\"USER OPTIMIZED\" ls_address=\"none\" zone=\"\" loc=\" 0.00 0.00 0.00\" performance=\"3\" alert=\"G:\\live\\eq2\\framework\\vdl\\VdlErr.cpp(85): (VDL Parser) runtimevdl/cbaseclasses.vdl(22) : Error, File not found, runtimevdl/soemote.vdl.\n\"\nbuild=\"SOEBuild=10648L\" version=\"SOEVersionString=2013/12/16 11:02:09\" build_type=\"USER OPTIMIZED\" ls_address=\"none\" zone=\"\" loc=\" 0.00 0.00 0.00\" performance=\"3\" alert=\"G:\\live\\eq2\\framework\\vdl\\VdlErr.cpp(85): (VDL Parser) runtimevdl/cbaseclasses.vdl(21) : Error, File not found, runtimevdl/services.vdl.\n\"\nbuild=\"SOEBuild=10648L\" version=\"SOEVersionString=2013/12/16 11:02:09\" build_type=\"USER OPTIMIZED\" ls_address=\"none\" zone=\"\" loc=\" 0.00 0.00 0.00\" performance=\"3\" alert=\"G:\\live\\eq2\\framework\\vdl\\VdlErr.cpp(85): (VDL Parser) runtimevdl/cbaseclasses.vdl(22) : Error, File not found, runtimevdl/soemote.vdl.\n\"\nbuild=\"SOEBuild=10648L\" version=\"SOEVersionString=2013/12/16 11:02:09\" build_type=\"USER OPTIMIZED\" ls_address=\"none\" zone=\"\" loc=\" 0.00 0.00 0.00\" performance=\"3\" alert=\"G:\\live\\eq2\\framework\\vdl\\VdlErr.cpp(85): (VDL Parser) runtimevdl/cbaseclasses.vdl(21) : Error, File not found, runtimevdl/services.vdl.\n\"\nbuild=\"SOEBuild=10648L\" version=\"SOEVersionString=2013/12/16 11:02:09\" build_type=\"USER OPTIMIZED\" ls_address=\"none\" zone=\"\" loc=\" 0.00 0.00 0.00\" performance=\"3\" alert=\"G:\\live\\eq2\\framework\\vdl\\VdlErr.cpp(85): (VDL Parser) runtimevdl/cbaseclasses.vdl(22) : Error, File not found, runtimevdl/soemote.vdl.\n\"\n','admin',57123,0,NULL,'','0'),(2,1387653577,'Verify Log','build=\"SOEBuild=10648L\" version=\"SOEVersionString=2013/12/16 11:02:09\" build_type=\"USER OPTIMIZED\" ls_address=\"none\" zone=\"halas\" loc=\"-229.54 34.62 -725.88\" performance=\"7\" alert=\"G:\\live\\eq2\\game\\Client\\src\\GameScene.cpp(19148): CRC missmatch in EqCreateGhostCmd state buf.\"\nbuild=\"SOEBuild=10648L\" version=\"SOEVersionString=2013/12/16 11:02:09\" build_type=\"USER OPTIMIZED\" ls_address=\"none\" zone=\"halas\" loc=\"-229.54 34.62 -725.88\" performance=\"7\" alert=\"G:\\live\\eq2\\game\\gamecommon\\client\\CompressedXOR.cpp(244): Bogus compressed data. This is normally caused by mismatched client and server.\"\nbuild=\"SOEBuild=10648L\" version=\"SOEVersionString=2013/12/16 11:02:09\" build_type=\"USER OPTIMIZED\" ls_address=\"none\" zone=\"halas\" loc=\"-229.54 34.62 -725.88\" performance=\"7\" alert=\"G:\\live\\eq2\\framework\\core\\util\\VeNetLUT.cpp(126): VeNetLUT: ID 255 not found in lut.\"\nbuild=\"SOEBuild=10648L\" version=\"SOEVersionString=2013/12/16 11:02:09\" build_type=\"USER OPTIMIZED\" ls_address=\"none\" zone=\"halas\" loc=\"-229.54 36.12 -730.88\" performance=\"7\" alert=\"G:\\live\\eq2\\framework\\core\\util\\VeNetLUT.cpp(126): VeNetLUT: ID 20 not found in lut.\"\n','admin',57123,0,NULL,'','0'),(3,1387654532,'Verify Log','build=\"SOEBuild=10648L\" version=\"SOEVersionString=2013/12/16 11:02:09\" build_type=\"USER OPTIMIZED\" ls_address=\"none\" zone=\"ZoneScene::onOpen\" loc=\"-124.68 59.82 -890.29\" performance=\"7\" alert=\"G:\\live\\eq2\\framework\\resman\\ResourceManager.cpp(125): Resource leak! (ui/default/images/window_elements_specific.dds)\"\nbuild=\"SOEBuild=10648L\" version=\"SOEVersionString=2013/12/16 11:02:09\" build_type=\"USER OPTIMIZED\" ls_address=\"none\" zone=\"\" loc=\" 0.00 0.00 0.00\" performance=\"3\" alert=\"G:\\live\\eq2\\framework\\vdl\\VdlErr.cpp(85): (VDL Parser) runtimevdl/cbaseclasses.vdl(21) : Error, File not found, runtimevdl/services.vdl.\n\"\nbuild=\"SOEBuild=10648L\" version=\"SOEVersionString=2013/12/16 11:02:09\" build_type=\"USER OPTIMIZED\" ls_address=\"none\" zone=\"\" loc=\" 0.00 0.00 0.00\" performance=\"3\" alert=\"G:\\live\\eq2\\framework\\vdl\\VdlErr.cpp(85): (VDL Parser) runtimevdl/cbaseclasses.vdl(22) : Error, File not found, runtimevdl/soemote.vdl.\n\"\n','admin',57123,0,NULL,'','0'),(4,1387656028,'Verify Log','build=\"SOEBuild=10648L\" version=\"SOEVersionString=2013/12/16 11:02:09\" build_type=\"USER OPTIMIZED\" ls_address=\"none\" zone=\"halas\" loc=\"-229.54 34.62 -725.88\" performance=\"7\" alert=\"G:\\live\\eq2\\game\\Client\\src\\GameScene.cpp(19148): CRC missmatch in EqCreateGhostCmd state buf.\"\nbuild=\"SOEBuild=10648L\" version=\"SOEVersionString=2013/12/16 11:02:09\" build_type=\"USER OPTIMIZED\" ls_address=\"none\" zone=\"halas\" loc=\"-229.54 34.62 -725.88\" performance=\"7\" alert=\"G:\\live\\eq2\\game\\gamecommon\\client\\CompressedXOR.cpp(244): Bogus compressed data. This is normally caused by mismatched client and server.\"\nbuild=\"SOEBuild=10648L\" version=\"SOEVersionString=2013/12/16 11:02:09\" build_type=\"USER OPTIMIZED\" ls_address=\"none\" zone=\"halas\" loc=\"-229.54 34.62 -725.88\" performance=\"7\" alert=\"G:\\live\\eq2\\framework\\core\\util\\VeNetLUT.cpp(126): VeNetLUT: ID 255 not found in lut.\"\nbuild=\"SOEBuild=10648L\" version=\"SOEVersionString=2013/12/16 11:02:09\" build_type=\"USER OPTIMIZED\" ls_address=\"none\" zone=\"halas\" loc=\"-229.54 36.12 -730.88\" performance=\"7\" alert=\"G:\\live\\eq2\\framework\\core\\util\\VeNetLUT.cpp(126): VeNetLUT: ID 20 not found in lut.\"\nbuild=\"SOEBuild=10648L\" version=\"SOEVersionString=2013/12/16 11:02:09\" build_type=\"USER OPTIMIZED\" ls_address=\"none\" zone=\"halas\" loc=\"-229.54 36.52 -721.75\" performance=\"7\" alert=\"G:\\live\\eq2\\framework\\resman\\ResourceManager.cpp(125): Resource leak! (ui/default/images/specialelements.dds)\"\nbuild=\"SOEBuild=10648L\" version=\"SOEVersionString=2013/12/16 11:02:09\" build_type=\"USER OPTIMIZED\" ls_address=\"none\" zone=\"\" loc=\" 0.00 0.00 0.00\" performance=\"3\" alert=\"G:\\live\\eq2\\framework\\vdl\\VdlErr.cpp(85): (VDL Parser) runtimevdl/cbaseclasses.vdl(21) : Error, File not found, runtimevdl/services.vdl.\n\"\nbuild=\"SOEBuild=10648L\" version=\"SOEVersionString=2013/12/16 11:02:09\" build_type=\"USER OPTIMIZED\" ls_address=\"none\" zone=\"\" loc=\" 0.00 0.00 0.00\" performance=\"3\" alert=\"G:\\live\\eq2\\framework\\vdl\\VdlErr.cpp(85): (VDL Parser) runtimevdl/cbaseclasses.vdl(22) : Error, File not found, runtimevdl/soemote.vdl.\n\"\n','admin',57123,0,NULL,'','0'),(5,1387656871,'Verify Log','build=\"SOEBuild=10648L\" version=\"SOEVersionString=2013/12/16 11:02:09\" build_type=\"USER OPTIMIZED\" ls_address=\"none\" zone=\"halas\" loc=\"-229.54 34.62 -725.88\" performance=\"7\" alert=\"G:\\live\\eq2\\game\\Client\\src\\GameScene.cpp(19148): CRC missmatch in EqCreateGhostCmd state buf.\"\nbuild=\"SOEBuild=10648L\" version=\"SOEVersionString=2013/12/16 11:02:09\" build_type=\"USER OPTIMIZED\" ls_address=\"none\" zone=\"halas\" loc=\"-229.54 34.62 -725.88\" performance=\"7\" alert=\"G:\\live\\eq2\\game\\gamecommon\\client\\CompressedXOR.cpp(244): Bogus compressed data. This is normally caused by mismatched client and server.\"\nbuild=\"SOEBuild=10648L\" version=\"SOEVersionString=2013/12/16 11:02:09\" build_type=\"USER OPTIMIZED\" ls_address=\"none\" zone=\"halas\" loc=\"-229.54 34.62 -725.88\" performance=\"7\" alert=\"G:\\live\\eq2\\framework\\core\\util\\VeNetLUT.cpp(126): VeNetLUT: ID 255 not found in lut.\"\nbuild=\"SOEBuild=10648L\" version=\"SOEVersionString=2013/12/16 11:02:09\" build_type=\"USER OPTIMIZED\" ls_address=\"none\" zone=\"halas\" loc=\"-229.54 36.12 -730.88\" performance=\"7\" alert=\"G:\\live\\eq2\\framework\\core\\util\\VeNetLUT.cpp(126): VeNetLUT: ID 20 not found in lut.\"\nbuild=\"SOEBuild=10648L\" version=\"SOEVersionString=2013/12/16 11:02:09\" build_type=\"USER OPTIMIZED\" ls_address=\"none\" zone=\"halas\" loc=\"-228.13 38.70 -745.32\" performance=\"7\" alert=\"G:\\live\\eq2\\game\\gamecommon\\client\\EqConstants_Client.cpp(2344): Failed to find 13, returning :gc7490d79ba52dd9be:hit\"\nbuild=\"SOEBuild=10648L\" version=\"SOEVersionString=2013/12/16 11:02:09\" build_type=\"USER OPTIMIZED\" ls_address=\"none\" zone=\"halas\" loc=\"-228.13 38.70 -745.32\" performance=\"7\" alert=\"G:\\live\\eq2\\game\\gamecommon\\client\\EqConstants_Client.cpp(2365): Failed to find 13, returning :gc7490d79be57093d4:hits\"\nbuild=\"SOEBuild=10648L\" version=\"SOEVersionString=2013/12/16 11:02:09\" build_type=\"USER OPTIMIZED\" ls_address=\"none\" zone=\"halas\" loc=\"-228.13 38.70 -745.32\" performance=\"7\" alert=\"G:\\live\\eq2\\game\\gamecommon\\client\\EqConstants_Client.cpp(2389): Failed to find 13, returning :gc50a5a57b3018845e:melee\"\nbuild=\"SOEBuild=10648L\" version=\"SOEVersionString=2013/12/16 11:02:09\" build_type=\"USER OPTIMIZED\" ls_address=\"none\" zone=\"halas\" loc=\"-228.13 38.70 -745.32\" performance=\"7\" alert=\"G:\\live\\eq2\\game\\gamecommon\\client\\EqConstants_Client.cpp(2323): Failed to find 13, returning :gc7490d79b9d609f5e:Hit\"\nbuild=\"SOEBuild=10648L\" version=\"SOEVersionString=2013/12/16 11:02:09\" build_type=\"USER OPTIMIZED\" ls_address=\"none\" zone=\"halas\" loc=\"-230.63 41.71 -743.89\" performance=\"7\" alert=\"G:\\live\\eq2\\game\\Client\\src\\GameScene.cpp(13467): Unhandled client cmd 160, last: 652\"\nbuild=\"SOEBuild=10648L\" version=\"SOEVersionString=2013/12/16 11:02:09\" build_type=\"USER OPTIMIZED\" ls_address=\"none\" zone=\"halas\" loc=\"-230.63 41.71 -743.89\" performance=\"7\" alert=\"G:\\live\\eq2\\game\\Client\\src\\GameScene.cpp(13467): Unhandled client cmd 0, last: 160\"\nbuild=\"SOEBuild=10648L\" version=\"SOEVersionString=2013/12/16 11:02:09\" build_type=\"USER OPTIMIZED\" ls_address=\"none\" zone=\"halas\" loc=\"-332.50 45.79 -763.37\" performance=\"7\" alert=\"G:\\live\\eq2\\framework\\resman\\ResourceManager.cpp(125): Resource leak! (ui/default/images/specialelements.dds)\"\nbuild=\"SOEBuild=10648L\" version=\"SOEVersionString=2013/12/16 11:02:09\" build_type=\"USER OPTIMIZED\" ls_address=\"none\" zone=\"\" loc=\" 0.00 0.00 0.00\" performance=\"3\" alert=\"G:\\live\\eq2\\framework\\vdl\\VdlErr.cpp(85): (VDL Parser) runtimevdl/cbaseclasses.vdl(21) : Error, File not found, runtimevdl/services.vdl.\n\"\nbuild=\"SOEBuild=10648L\" version=\"SOEVersionString=2013/12/16 11:02:09\" build_type=\"USER OPTIMIZED\" ls_address=\"none\" zone=\"\" loc=\" 0.00 0.00 0.00\" performance=\"3\" alert=\"G:\\live\\eq2\\framework\\vdl\\VdlErr.cpp(85): (VDL Parser) runtimevdl/cbaseclasses.vdl(22) : Error, File not found, runtimevdl/soemote.vdl.\n\"\n','admin',57123,0,NULL,'','0'),(6,1387657163,'Verify Log','build=\"SOEBuild=10648L\" version=\"SOEVersionString=2013/12/16 11:02:09\" build_type=\"USER OPTIMIZED\" ls_address=\"none\" zone=\"halas\" loc=\"-336.91 40.32 -765.24\" performance=\"7\" alert=\"G:\\live\\eq2\\game\\Client\\src\\GameScene.cpp(19148): CRC missmatch in EqCreateGhostCmd state buf.\"\nbuild=\"SOEBuild=10648L\" version=\"SOEVersionString=2013/12/16 11:02:09\" build_type=\"USER OPTIMIZED\" ls_address=\"none\" zone=\"halas\" loc=\"-336.91 40.32 -765.24\" performance=\"7\" alert=\"G:\\live\\eq2\\framework\\core\\util\\VeNetLUT.cpp(126): VeNetLUT: ID 255 not found in lut.\"\nbuild=\"SOEBuild=10648L\" version=\"SOEVersionString=2013/12/16 11:02:09\" build_type=\"USER OPTIMIZED\" ls_address=\"none\" zone=\"halas\" loc=\"-336.91 40.32 -765.24\" performance=\"7\" alert=\"G:\\live\\eq2\\game\\gamecommon\\client\\CompressedXOR.cpp(244): Bogus compressed data. This is normally caused by mismatched client and server.\"\nbuild=\"SOEBuild=10648L\" version=\"SOEVersionString=2013/12/16 11:02:09\" build_type=\"USER OPTIMIZED\" ls_address=\"none\" zone=\"halas\" loc=\"-336.91 40.32 -765.24\" performance=\"7\" alert=\"G:\\live\\eq2\\framework\\core\\util\\VeNetLUT.cpp(126): VeNetLUT: ID 20 not found in lut.\"\n','admin',57123,0,NULL,'','0'),(7,1581736967,'Alert Log','build=\"SOEBuild=7198\" version=\"SOEVersionString=2010/12/14 22:01:57\" build_type=\"USER OPTIMIZED\" ls_address=\"none\" zone=\"\" loc=\" 0.00 0.00 0.00\" performance=\"2\" verify=\"E:\\dev\\eq2\\game\\client\\src\\ClientNet.cpp(603): Failed to deserialize net message (type 236); last message type -1 00458671 10e74470\"\n','devn00b',1084,0,NULL,'','0'),(8,1582069362,'Crash Log','build=\"SOEBuild=6065L\" version=\"SOEVersionString=2009/11/19 16:05:47\" build_type=\"USER OPTIMIZED\" ls_address=\"none\" zone=\"ZoneScene::onOpen\" loc=\"-124.68 59.82 -890.29\" performance=\"2\" alert=\"E:\\live\\eq2\\game\\client\\src\\OptionInfoBoolean.cpp(262): [DEVL] Option r_usethreepointoshaders is invalid.\"\nbuild=\"SOEBuild=6065L\" version=\"SOEVersionString=2009/11/19 16:05:47\" build_type=\"USER OPTIMIZED\" ls_address=\"none\" zone=\"ZoneScene::onOpen\" loc=\"-124.68 59.82 -890.29\" performance=\"2\" alert=\"E:\\live\\eq2\\game\\client\\src\\OptionInfoBoolean.cpp(262): [DEVL] Option r_shader3_darkness is invalid.\"\nbuild=\"SOEBuild=6065L\" version=\"SOEVersionString=2009/11/19 16:05:47\" build_type=\"USER OPTIMIZED\" ls_address=\"none\" zone=\"ZoneScene::onOpen\" loc=\"-124.68 59.82 -890.29\" performance=\"2\" alert=\"E:\\live\\eq2\\game\\client\\src\\OptionInfoFloat.cpp(310): [DEVL] Option r_S3LightRange is invalid.\"\nbuild=\"SOEBuild=6065L\" version=\"SOEVersionString=2009/11/19 16:05:47\" build_type=\"USER OPTIMIZED\" ls_address=\"none\" zone=\"ZoneScene::onOpen\" loc=\"-124.68 59.82 -890.29\" performance=\"2\" alert=\"E:\\live\\eq2\\game\\client\\src\\OptionInfoBoolean.cpp(262): [DEVL] Option r_run_point_light_cpu_shadows is invalid.\"\nbuild=\"SOEBuild=6065L\" version=\"SOEVersionString=2009/11/19 16:05:47\" build_type=\"USER OPTIMIZED\" ls_address=\"none\" zone=\"ZoneScene::onOpen\" loc=\"-124.68 59.82 -890.29\" performance=\"2\" alert=\"E:\\live\\eq2\\game\\client\\src\\OptionInfoBoolean.cpp(262): [DEVL] Option r_gpu_shadows_keep is invalid.\"\nbuild=\"SOEBuild=6065L\" version=\"SOEVersionString=2009/11/19 16:05:47\" build_type=\"USER OPTIMIZED\" ls_address=\"none\" zone=\"ZoneScene::onOpen\" loc=\"-124.68 59.82 -890.29\" performance=\"2\" alert=\"E:\\live\\eq2\\game\\client\\src\\OptionInfoList.cpp(243): [DEVL] Option suspend_mount_mode is invalid.\"\nbuild=\"SOEBuild=6065L\" version=\"SOEVersionString=2009/11/19 16:05:47\" build_type=\"USER OPTIMIZED\" ls_address=\"none\" zone=\"ZoneScene::onOpen\" loc=\"-124.68 59.82 -890.29\" performance=\"2\" alert=\"E:\\live\\eq2\\game\\client\\src\\OptionInfoBoolean.cpp(262): [DEVL] Option stereo_display_enable is invalid.\"\nbuild=\"SOEBuild=6065L\" version=\"SOEVersionString=2009/11/19 16:05:47\" build_type=\"USER OPTIMIZED\" ls_address=\"none\" zone=\"ZoneScene::onOpen\" loc=\"-124.68 59.82 -890.29\" performance=\"2\" alert=\"E:\\live\\eq2\\game\\client\\src\\OptionInfoFloat.cpp(310): [DEVL] Option stereo_display_convergence is invalid.\"\nbuild=\"SOEBuild=6065L\" version=\"SOEVersionString=2009/11/19 16:05:47\" build_type=\"USER OPTIMIZED\" ls_address=\"none\" zone=\"ZoneScene::onOpen\" loc=\"-124.68 59.82 -890.29\" performance=\"2\" alert=\"E:\\live\\eq2\\game\\client\\src\\OptionInfoFloat.cpp(310): [DEVL] Option stereo_display_separation is invalid.\"\nbuild=\"SOEBuild=6065L\" version=\"SOEVersionString=2009/11/19 16:05:47\" build_type=\"USER OPTIMIZED\" ls_address=\"none\" zone=\"ZoneScene::onOpen\" loc=\"-124.68 59.82 -890.29\" performance=\"2\" alert=\"E:\\live\\eq2\\game\\client\\src\\OptionInfoBoolean.cpp(262): [DEVL] Option stereo_display_software_cursor is invalid.\"\nbuild=\"SOEBuild=6065L\" version=\"SOEVersionString=2009/11/19 16:05:47\" build_type=\"USER OPTIMIZED\" ls_address=\"none\" zone=\"ZoneScene::onOpen\" loc=\"-124.68 59.82 -890.29\" performance=\"2\" alert=\"E:\\live\\eq2\\game\\client\\src\\OptionInfoFloat.cpp(310): [DEVL] Option software_cursor_scale is invalid.\"\nbuild=\"SOEBuild=6065L\" version=\"SOEVersionString=2009/11/19 16:05:47\" build_type=\"USER OPTIMIZED\" ls_address=\"none\" zone=\"ZoneScene::onOpen\" loc=\"-124.68 59.82 -890.29\" performance=\"2\" alert=\"E:\\live\\eq2\\game\\client\\src\\OptionInfoBoolean.cpp(262): [DEVL] Option stereo_display_world_depth_chat_bubbles is invalid.\"\nbuild=\"SOEBuild=6065L\" version=\"SOEVersionString=2009/11/19 16:05:47\" build_type=\"USER OPTIMIZED\" ls_address=\"none\" zone=\"ZoneScene::onOpen\" loc=\"-124.68 59.82 -890.29\" performance=\"2\" alert=\"E:\\live\\eq2\\game\\client\\src\\OptionInfoBoolean.cpp(262): [DEVL] Option r_depthoffield is invalid.\"\nbuild=\"SOEBuild=6065L\" version=\"SOEVersionString=2009/11/19 16:05:47\" build_type=\"USER OPTIMIZED\" ls_address=\"none\" zone=\"ZoneScene::onOpen\" loc=\"-124.68 59.82 -890.29\" performance=\"2\" alert=\"E:\\live\\eq2\\game','devn00b',1084,0,NULL,'','0'),(9,1582605938,'Verify Log','build=\"SOEBuild=12133L\" version=\"SOEVersionString=2015/8/17 11:12:50\" build_type=\"USER OPTIMIZED\" ls_address=\"none\" zone=\"\" loc=\" 0.00 0.00 0.00\" performance=\"3\" alert=\"G:\\live\\eq2\\framework\\vdl\\VdlErr.cpp(85): (VDL Parser) runtimevdl/cbaseclasses.vdl(21) : Error, File not found, runtimevdl/services.vdl.\n\"\nbuild=\"SOEBuild=12133L\" version=\"SOEVersionString=2015/8/17 11:12:50\" build_type=\"USER OPTIMIZED\" ls_address=\"none\" zone=\"\" loc=\" 0.00 0.00 0.00\" performance=\"3\" alert=\"G:\\live\\eq2\\framework\\vdl\\VdlErr.cpp(85): (VDL Parser) runtimevdl/cbaseclasses.vdl(22) : Error, File not found, runtimevdl/soemote.vdl.\n\"\n','devn00b',60114,0,NULL,'','0'),(10,1582607048,'Verify Log','build=\"SOEBuild=12133L\" version=\"SOEVersionString=2015/8/17 11:12:50\" build_type=\"USER OPTIMIZED\" ls_address=\"none\" zone=\"\" loc=\" 0.00 0.00 0.00\" performance=\"3\" alert=\"G:\\live\\eq2\\framework\\vdl\\VdlErr.cpp(85): (VDL Parser) runtimevdl/cbaseclasses.vdl(21) : Error, File not found, runtimevdl/services.vdl.\n\"\nbuild=\"SOEBuild=12133L\" version=\"SOEVersionString=2015/8/17 11:12:50\" build_type=\"USER OPTIMIZED\" ls_address=\"none\" zone=\"\" loc=\" 0.00 0.00 0.00\" performance=\"3\" alert=\"G:\\live\\eq2\\framework\\vdl\\VdlErr.cpp(85): (VDL Parser) runtimevdl/cbaseclasses.vdl(22) : Error, File not found, runtimevdl/soemote.vdl.\n\"\nbuild=\"SOEBuild=12133L\" version=\"SOEVersionString=2015/8/17 11:12:50\" build_type=\"USER OPTIMIZED\" ls_address=\"none\" zone=\"\" loc=\" 0.00 0.00 0.00\" performance=\"3\" alert=\"G:\\live\\eq2\\framework\\vdl\\VdlErr.cpp(85): (VDL Parser) runtimevdl/cbaseclasses.vdl(21) : Error, File not found, runtimevdl/services.vdl.\n\"\nbuild=\"SOEBuild=12133L\" version=\"SOEVersionString=2015/8/17 11:12:50\" build_type=\"USER OPTIMIZED\" ls_address=\"none\" zone=\"\" loc=\" 0.00 0.00 0.00\" performance=\"3\" alert=\"G:\\live\\eq2\\framework\\vdl\\VdlErr.cpp(85): (VDL Parser) runtimevdl/cbaseclasses.vdl(22) : Error, File not found, runtimevdl/soemote.vdl.\n\"\nbuild=\"SOEBuild=12133L\" version=\"SOEVersionString=2015/8/17 11:12:50\" build_type=\"USER OPTIMIZED\" ls_address=\"none\" zone=\"\" loc=\" 0.00 0.00 0.00\" performance=\"3\" alert=\"G:\\live\\eq2\\framework\\vdl\\VdlErr.cpp(85): (VDL Parser) runtimevdl/cbaseclasses.vdl(21) : Error, File not found, runtimevdl/services.vdl.\n\"\nbuild=\"SOEBuild=12133L\" version=\"SOEVersionString=2015/8/17 11:12:50\" build_type=\"USER OPTIMIZED\" ls_address=\"none\" zone=\"\" loc=\" 0.00 0.00 0.00\" performance=\"3\" alert=\"G:\\live\\eq2\\framework\\vdl\\VdlErr.cpp(85): (VDL Parser) runtimevdl/cbaseclasses.vdl(22) : Error, File not found, runtimevdl/soemote.vdl.\n\"\nbuild=\"SOEBuild=12133L\" version=\"SOEVersionString=2015/8/17 11:12:50\" build_type=\"USER OPTIMIZED\" ls_address=\"none\" zone=\"\" loc=\" 0.00 0.00 0.00\" performance=\"3\" alert=\"G:\\live\\eq2\\framework\\vdl\\VdlErr.cpp(85): (VDL Parser) runtimevdl/cbaseclasses.vdl(21) : Error, File not found, runtimevdl/services.vdl.\n\"\nbuild=\"SOEBuild=12133L\" version=\"SOEVersionString=2015/8/17 11:12:50\" build_type=\"USER OPTIMIZED\" ls_address=\"none\" zone=\"\" loc=\" 0.00 0.00 0.00\" performance=\"3\" alert=\"G:\\live\\eq2\\framework\\vdl\\VdlErr.cpp(85): (VDL Parser) runtimevdl/cbaseclasses.vdl(22) : Error, File not found, runtimevdl/soemote.vdl.\n\"\nbuild=\"SOEBuild=12133L\" version=\"SOEVersionString=2015/8/17 11:12:50\" build_type=\"USER OPTIMIZED\" ls_address=\"none\" zone=\"\" loc=\" 0.00 0.00 0.00\" performance=\"3\" alert=\"G:\\live\\eq2\\framework\\vdl\\VdlErr.cpp(85): (VDL Parser) runtimevdl/cbaseclasses.vdl(21) : Error, File not found, runtimevdl/services.vdl.\n\"\nbuild=\"SOEBuild=12133L\" version=\"SOEVersionString=2015/8/17 11:12:50\" build_type=\"USER OPTIMIZED\" ls_address=\"none\" zone=\"\" loc=\" 0.00 0.00 0.00\" performance=\"3\" alert=\"G:\\live\\eq2\\framework\\vdl\\VdlErr.cpp(85): (VDL Parser) runtimevdl/cbaseclasses.vdl(22) : Error, File not found, runtimevdl/soemote.vdl.\n\"\nbuild=\"SOEBuild=12133L\" version=\"SOEVersionString=2015/8/17 11:12:50\" build_type=\"USER OPTIMIZED\" ls_address=\"none\" zone=\"\" loc=\" 0.00 0.00 0.00\" performance=\"3\" alert=\"G:\\live\\eq2\\framework\\vdl\\VdlErr.cpp(85): (VDL Parser) runtimevdl/cbaseclasses.vdl(21) : Error, File not found, runtimevdl/services.vdl.\n\"\nbuild=\"SOEBuild=12133L\" version=\"SOEVersionString=2015/8/17 11:12:50\" build_type=\"USER OPTIMIZED\" ls_address=\"none\" zone=\"\" loc=\" 0.00 0.00 0.00\" performance=\"3\" alert=\"G:\\live\\eq2\\framework\\vdl\\VdlErr.cpp(85): (VDL Parser) runtimevdl/cbaseclasses.vdl(22) : Error, File not found, runtimevdl/soemote.vdl.\n\"\nbuild=\"SOEBuild=12133L\" version=\"SOEVersionString=2015/8/17 11:12:50\" build_type=\"USER OPTIMIZED\" ls_address=\"none\" zone=\"\" loc=\" 0.00 0.00 0.00\" performance=\"3\" alert=\"G:\\live\\eq2\\framework\\vdl\\VdlErr.cpp(85): (VDL Parser) runtimevdl/cbaseclasses.vdl(21) : Erro','image',60114,0,NULL,'','0'),(11,1582640950,'Verify Log','build=\"SOEBuild=12133L\" version=\"SOEVersionString=2015/8/17 11:12:50\" build_type=\"USER OPTIMIZED\" ls_address=\"none\" zone=\"\" loc=\" 0.00 0.00 0.00\" performance=\"3\" alert=\"G:\\live\\eq2\\framework\\vdl\\VdlErr.cpp(85): (VDL Parser) runtimevdl/cbaseclasses.vdl(21) : Error, File not found, runtimevdl/services.vdl.\n\"\nbuild=\"SOEBuild=12133L\" version=\"SOEVersionString=2015/8/17 11:12:50\" build_type=\"USER OPTIMIZED\" ls_address=\"none\" zone=\"\" loc=\" 0.00 0.00 0.00\" performance=\"3\" alert=\"G:\\live\\eq2\\framework\\vdl\\VdlErr.cpp(85): (VDL Parser) runtimevdl/cbaseclasses.vdl(22) : Error, File not found, runtimevdl/soemote.vdl.\n\"\nbuild=\"SOEBuild=12133L\" version=\"SOEVersionString=2015/8/17 11:12:50\" build_type=\"USER OPTIMIZED\" ls_address=\"none\" zone=\"\" loc=\" 0.00 0.00 0.00\" performance=\"3\" alert=\"G:\\live\\eq2\\framework\\vdl\\VdlErr.cpp(85): (VDL Parser) runtimevdl/cbaseclasses.vdl(21) : Error, File not found, runtimevdl/services.vdl.\n\"\nbuild=\"SOEBuild=12133L\" version=\"SOEVersionString=2015/8/17 11:12:50\" build_type=\"USER OPTIMIZED\" ls_address=\"none\" zone=\"\" loc=\" 0.00 0.00 0.00\" performance=\"3\" alert=\"G:\\live\\eq2\\framework\\vdl\\VdlErr.cpp(85): (VDL Parser) runtimevdl/cbaseclasses.vdl(22) : Error, File not found, runtimevdl/soemote.vdl.\n\"\nbuild=\"SOEBuild=12133L\" version=\"SOEVersionString=2015/8/17 11:12:50\" build_type=\"USER OPTIMIZED\" ls_address=\"none\" zone=\"\" loc=\" 0.00 0.00 0.00\" performance=\"3\" alert=\"G:\\live\\eq2\\framework\\vdl\\VdlErr.cpp(85): (VDL Parser) runtimevdl/cbaseclasses.vdl(21) : Error, File not found, runtimevdl/services.vdl.\n\"\nbuild=\"SOEBuild=12133L\" version=\"SOEVersionString=2015/8/17 11:12:50\" build_type=\"USER OPTIMIZED\" ls_address=\"none\" zone=\"\" loc=\" 0.00 0.00 0.00\" performance=\"3\" alert=\"G:\\live\\eq2\\framework\\vdl\\VdlErr.cpp(85): (VDL Parser) runtimevdl/cbaseclasses.vdl(22) : Error, File not found, runtimevdl/soemote.vdl.\n\"\n','image',60114,0,NULL,'','0'),(12,1582660496,'Verify Log','build=\"SOEBuild=12133L\" version=\"SOEVersionString=2015/8/17 11:12:50\" build_type=\"USER OPTIMIZED\" ls_address=\"none\" zone=\"ZoneScene::onOpen\" loc=\" 0.00 0.00 0.00\" performance=\"2\" alert=\"G:\\live\\eq2\\framework\\core\\util\\VeNetLUT.cpp(97): VeNetLUT: String \'ec/pc01/darkelf_female/darkelf_female\' not found in lut.\"\nbuild=\"SOEBuild=12133L\" version=\"SOEVersionString=2015/8/17 11:12:50\" build_type=\"USER OPTIMIZED\" ls_address=\"none\" zone=\"ZoneScene::onOpen\" loc=\" 0.00 0.00 0.00\" performance=\"2\" alert=\"G:\\live\\eq2\\game\\gamecommon\\client\\ProxyAppUtil.cpp(2312): ERROR - Invalid base appearance.\"\nbuild=\"SOEBuild=12133L\" version=\"SOEVersionString=2015/8/17 11:12:50\" build_type=\"USER OPTIMIZED\" ls_address=\"none\" zone=\"ZoneScene::onOpen\" loc=\" 0.00 0.00 0.00\" performance=\"2\" alert=\"G:\\live\\eq2\\game\\Client\\UI\\src\\CreateRec.cpp(119): No customization definiton\"\nbuild=\"SOEBuild=12133L\" version=\"SOEVersionString=2015/8/17 11:12:50\" build_type=\"USER OPTIMIZED\" ls_address=\"none\" zone=\"ZoneScene::onOpen\" loc=\" 0.00 0.00 0.00\" performance=\"2\" alert=\"G:\\live\\eq2\\game\\Client\\UI\\src\\CreateRec.cpp(302): Invalid customization definition\"\nbuild=\"SOEBuild=12133L\" version=\"SOEVersionString=2015/8/17 11:12:50\" build_type=\"USER OPTIMIZED\" ls_address=\"none\" zone=\"ZoneScene::onOpen\" loc=\"-1519.16 -31.14 -1019.06\" performance=\"2\" alert=\"G:\\live\\eq2\\game\\Client\\src\\ZoneScene.cpp(6185): Camera is not in a room.\"\nbuild=\"SOEBuild=12133L\" version=\"SOEVersionString=2015/8/17 11:12:50\" build_type=\"USER OPTIMIZED\" ls_address=\"none\" zone=\"ZoneScene::onOpen\" loc=\"-1516.70 -31.04 -1015.91\" performance=\"2\" alert=\"G:\\live\\eq2\\framework\\core\\util\\VeNetLUT.cpp(97): VeNetLUT: String \'ec/pc01/erudite_male/erudite_male_thin\' not found in lut.\"\nbuild=\"SOEBuild=12133L\" version=\"SOEVersionString=2015/8/17 11:12:50\" build_type=\"USER OPTIMIZED\" ls_address=\"none\" zone=\"ZoneScene::onOpen\" loc=\"-1516.70 -31.04 -1015.91\" performance=\"2\" alert=\"G:\\live\\eq2\\framework\\core\\util\\VeNetLUT.cpp(97): VeNetLUT: String \'ec/pc01/aerakyn_male/aerakyn_male_standard\' not found in lut.\"\nbuild=\"SOEBuild=12133L\" version=\"SOEVersionString=2015/8/17 11:12:50\" build_type=\"USER OPTIMIZED\" ls_address=\"none\" zone=\"ZoneScene::onOpen\" loc=\"-1516.70 -31.04 -1015.91\" performance=\"2\" alert=\"G:\\live\\eq2\\framework\\core\\util\\VeNetLUT.cpp(97): VeNetLUT: String \'ec/pc01/barbarian_male/barbarian_male_muscular\' not found in lut.\"\nbuild=\"SOEBuild=12133L\" version=\"SOEVersionString=2015/8/17 11:12:50\" build_type=\"USER OPTIMIZED\" ls_address=\"none\" zone=\"ZoneScene::onOpen\" loc=\"-1516.70 -31.04 -1015.91\" performance=\"2\" alert=\"G:\\live\\eq2\\framework\\core\\util\\VeNetLUT.cpp(97): VeNetLUT: String \'ec/pc01/dwarf_male/dwarf_male_standard\' not found in lut.\"\nbuild=\"SOEBuild=12133L\" version=\"SOEVersionString=2015/8/17 11:12:50\" build_type=\"USER OPTIMIZED\" ls_address=\"none\" zone=\"\" loc=\" 0.00 0.00 0.00\" performance=\"3\" alert=\"G:\\live\\eq2\\framework\\vdl\\VdlErr.cpp(85): (VDL Parser) runtimevdl/cbaseclasses.vdl(21) : Error, File not found, runtimevdl/services.vdl.\n\"\nbuild=\"SOEBuild=12133L\" version=\"SOEVersionString=2015/8/17 11:12:50\" build_type=\"USER OPTIMIZED\" ls_address=\"none\" zone=\"\" loc=\" 0.00 0.00 0.00\" performance=\"3\" alert=\"G:\\live\\eq2\\framework\\vdl\\VdlErr.cpp(85): (VDL Parser) runtimevdl/cbaseclasses.vdl(22) : Error, File not found, runtimevdl/soemote.vdl.\n\"\nbuild=\"SOEBuild=12133L\" version=\"SOEVersionString=2015/8/17 11:12:50\" build_type=\"USER OPTIMIZED\" ls_address=\"none\" zone=\"\" loc=\" 0.00 0.00 0.00\" performance=\"2\" alert=\"G:\\live\\eq2\\framework\\core\\devices\\DirectX9RenderDevice.cpp(18893): Restore: SetDeviceGammaRamp(\\\\.\\DISPLAY1) failed: 87\"\nbuild=\"SOEBuild=12133L\" version=\"SOEVersionString=2015/8/17 11:12:50\" build_type=\"USER OPTIMIZED\" ls_address=\"none\" zone=\"\" loc=\" 0.00 0.00 0.00\" performance=\"2\" alert=\"G:\\live\\eq2\\framework\\core\\devices\\DirectX9RenderDevice.cpp(1881): Failed gamma restoration test during startup. Gamma settings will be ignored.\"\n','image',60114,0,NULL,'','0'),(13,1582662791,'Verify Log','build=\"SOEBuild=12133L\" version=\"SOEVersionString=2015/8/17 11:12:50\" build_type=\"USER OPTIMIZED\" ls_address=\"none\" zone=\"ZoneScene::onOpen\" loc=\" 0.00 0.00 0.00\" performance=\"2\" alert=\"G:\\live\\eq2\\framework\\core\\util\\VeNetLUT.cpp(97): VeNetLUT: String \'ec/pc01/darkelf_female/darkelf_female\' not found in lut.\"\nbuild=\"SOEBuild=12133L\" version=\"SOEVersionString=2015/8/17 11:12:50\" build_type=\"USER OPTIMIZED\" ls_address=\"none\" zone=\"ZoneScene::onOpen\" loc=\" 0.00 0.00 0.00\" performance=\"2\" alert=\"G:\\live\\eq2\\game\\gamecommon\\client\\ProxyAppUtil.cpp(2312): ERROR - Invalid base appearance.\"\nbuild=\"SOEBuild=12133L\" version=\"SOEVersionString=2015/8/17 11:12:50\" build_type=\"USER OPTIMIZED\" ls_address=\"none\" zone=\"ZoneScene::onOpen\" loc=\" 0.00 0.00 0.00\" performance=\"2\" alert=\"G:\\live\\eq2\\game\\Client\\UI\\src\\CreateRec.cpp(119): No customization definiton\"\nbuild=\"SOEBuild=12133L\" version=\"SOEVersionString=2015/8/17 11:12:50\" build_type=\"USER OPTIMIZED\" ls_address=\"none\" zone=\"ZoneScene::onOpen\" loc=\" 0.00 0.00 0.00\" performance=\"2\" alert=\"G:\\live\\eq2\\game\\Client\\UI\\src\\CreateRec.cpp(302): Invalid customization definition\"\nbuild=\"SOEBuild=12133L\" version=\"SOEVersionString=2015/8/17 11:12:50\" build_type=\"USER OPTIMIZED\" ls_address=\"none\" zone=\"ZoneScene::onOpen\" loc=\"-1519.16 -31.14 -1019.06\" performance=\"2\" alert=\"G:\\live\\eq2\\game\\Client\\src\\ZoneScene.cpp(6185): Camera is not in a room.\"\nbuild=\"SOEBuild=12133L\" version=\"SOEVersionString=2015/8/17 11:12:50\" build_type=\"USER OPTIMIZED\" ls_address=\"none\" zone=\"\" loc=\" 0.00 0.00 0.00\" performance=\"3\" alert=\"G:\\live\\eq2\\framework\\vdl\\VdlErr.cpp(85): (VDL Parser) runtimevdl/cbaseclasses.vdl(21) : Error, File not found, runtimevdl/services.vdl.\n\"\nbuild=\"SOEBuild=12133L\" version=\"SOEVersionString=2015/8/17 11:12:50\" build_type=\"USER OPTIMIZED\" ls_address=\"none\" zone=\"\" loc=\" 0.00 0.00 0.00\" performance=\"3\" alert=\"G:\\live\\eq2\\framework\\vdl\\VdlErr.cpp(85): (VDL Parser) runtimevdl/cbaseclasses.vdl(22) : Error, File not found, runtimevdl/soemote.vdl.\n\"\nbuild=\"SOEBuild=12133L\" version=\"SOEVersionString=2015/8/17 11:12:50\" build_type=\"USER OPTIMIZED\" ls_address=\"none\" zone=\"\" loc=\" 0.00 0.00 0.00\" performance=\"6\" alert=\"G:\\live\\eq2\\framework\\core\\devices\\DirectX9RenderDevice.cpp(18893): Restore: SetDeviceGammaRamp(\\\\.\\DISPLAY1) failed: 87\"\nbuild=\"SOEBuild=12133L\" version=\"SOEVersionString=2015/8/17 11:12:50\" build_type=\"USER OPTIMIZED\" ls_address=\"none\" zone=\"\" loc=\" 0.00 0.00 0.00\" performance=\"6\" alert=\"G:\\live\\eq2\\framework\\core\\devices\\DirectX9RenderDevice.cpp(1881): Failed gamma restoration test during startup. Gamma settings will be ignored.\"\n','image',60114,0,NULL,'','0'),(14,1582663254,'Verify Log','build=\"SOEBuild=12133L\" version=\"SOEVersionString=2015/8/17 11:12:50\" build_type=\"USER OPTIMIZED\" ls_address=\"none\" zone=\"ZoneScene::onOpen\" loc=\" 0.00 0.00 0.00\" performance=\"6\" alert=\"G:\\live\\eq2\\framework\\core\\util\\VeNetLUT.cpp(97): VeNetLUT: String \'ec/pc01/darkelf_female/darkelf_female\' not found in lut.\"\nbuild=\"SOEBuild=12133L\" version=\"SOEVersionString=2015/8/17 11:12:50\" build_type=\"USER OPTIMIZED\" ls_address=\"none\" zone=\"ZoneScene::onOpen\" loc=\" 0.00 0.00 0.00\" performance=\"6\" alert=\"G:\\live\\eq2\\game\\gamecommon\\client\\ProxyAppUtil.cpp(2312): ERROR - Invalid base appearance.\"\nbuild=\"SOEBuild=12133L\" version=\"SOEVersionString=2015/8/17 11:12:50\" build_type=\"USER OPTIMIZED\" ls_address=\"none\" zone=\"ZoneScene::onOpen\" loc=\" 0.00 0.00 0.00\" performance=\"6\" alert=\"G:\\live\\eq2\\game\\Client\\UI\\src\\CreateRec.cpp(119): No customization definiton\"\nbuild=\"SOEBuild=12133L\" version=\"SOEVersionString=2015/8/17 11:12:50\" build_type=\"USER OPTIMIZED\" ls_address=\"none\" zone=\"ZoneScene::onOpen\" loc=\" 0.00 0.00 0.00\" performance=\"6\" alert=\"G:\\live\\eq2\\game\\Client\\UI\\src\\CreateRec.cpp(302): Invalid customization definition\"\nbuild=\"SOEBuild=12133L\" version=\"SOEVersionString=2015/8/17 11:12:50\" build_type=\"USER OPTIMIZED\" ls_address=\"none\" zone=\"ZoneScene::onOpen\" loc=\"-1519.16 -31.14 -1019.06\" performance=\"6\" alert=\"G:\\live\\eq2\\game\\Client\\src\\ZoneScene.cpp(6185): Camera is not in a room.\"\nbuild=\"SOEBuild=12133L\" version=\"SOEVersionString=2015/8/17 11:12:50\" build_type=\"USER OPTIMIZED\" ls_address=\"none\" zone=\"\" loc=\" 0.00 0.00 0.00\" performance=\"3\" alert=\"G:\\live\\eq2\\framework\\vdl\\VdlErr.cpp(85): (VDL Parser) runtimevdl/cbaseclasses.vdl(21) : Error, File not found, runtimevdl/services.vdl.\n\"\nbuild=\"SOEBuild=12133L\" version=\"SOEVersionString=2015/8/17 11:12:50\" build_type=\"USER OPTIMIZED\" ls_address=\"none\" zone=\"\" loc=\" 0.00 0.00 0.00\" performance=\"3\" alert=\"G:\\live\\eq2\\framework\\vdl\\VdlErr.cpp(85): (VDL Parser) runtimevdl/cbaseclasses.vdl(22) : Error, File not found, runtimevdl/soemote.vdl.\n\"\nbuild=\"SOEBuild=12133L\" version=\"SOEVersionString=2015/8/17 11:12:50\" build_type=\"USER OPTIMIZED\" ls_address=\"none\" zone=\"\" loc=\" 0.00 0.00 0.00\" performance=\"6\" alert=\"G:\\live\\eq2\\framework\\core\\devices\\DirectX9RenderDevice.cpp(18893): Restore: SetDeviceGammaRamp(\\\\.\\DISPLAY1) failed: 87\"\nbuild=\"SOEBuild=12133L\" version=\"SOEVersionString=2015/8/17 11:12:50\" build_type=\"USER OPTIMIZED\" ls_address=\"none\" zone=\"\" loc=\" 0.00 0.00 0.00\" performance=\"6\" alert=\"G:\\live\\eq2\\framework\\core\\devices\\DirectX9RenderDevice.cpp(1881): Failed gamma restoration test during startup. Gamma settings will be ignored.\"\n','image',60114,0,NULL,'','0'),(15,1582663400,'Verify Log','build=\"SOEBuild=12133L\" version=\"SOEVersionString=2015/8/17 11:12:50\" build_type=\"USER OPTIMIZED\" ls_address=\"none\" zone=\"\" loc=\" 0.00 0.00 0.00\" performance=\"3\" alert=\"G:\\live\\eq2\\framework\\vdl\\VdlErr.cpp(85): (VDL Parser) runtimevdl/cbaseclasses.vdl(21) : Error, File not found, runtimevdl/services.vdl.\n\"\nbuild=\"SOEBuild=12133L\" version=\"SOEVersionString=2015/8/17 11:12:50\" build_type=\"USER OPTIMIZED\" ls_address=\"none\" zone=\"\" loc=\" 0.00 0.00 0.00\" performance=\"3\" alert=\"G:\\live\\eq2\\framework\\vdl\\VdlErr.cpp(85): (VDL Parser) runtimevdl/cbaseclasses.vdl(22) : Error, File not found, runtimevdl/soemote.vdl.\n\"\nbuild=\"SOEBuild=12133L\" version=\"SOEVersionString=2015/8/17 11:12:50\" build_type=\"USER OPTIMIZED\" ls_address=\"none\" zone=\"\" loc=\" 0.00 0.00 0.00\" performance=\"6\" alert=\"G:\\live\\eq2\\framework\\core\\devices\\DirectX9RenderDevice.cpp(18893): Restore: SetDeviceGammaRamp(\\\\.\\DISPLAY1) failed: 87\"\nbuild=\"SOEBuild=12133L\" version=\"SOEVersionString=2015/8/17 11:12:50\" build_type=\"USER OPTIMIZED\" ls_address=\"none\" zone=\"\" loc=\" 0.00 0.00 0.00\" performance=\"6\" alert=\"G:\\live\\eq2\\framework\\core\\devices\\DirectX9RenderDevice.cpp(1881): Failed gamma restoration test during startup. Gamma settings will be ignored.\"\n','image',60114,0,NULL,'','0'),(16,1582663667,'Verify Log','build=\"SOEBuild=12133L\" version=\"SOEVersionString=2015/8/17 11:12:50\" build_type=\"USER OPTIMIZED\" ls_address=\"none\" zone=\"\" loc=\" 0.00 0.00 0.00\" performance=\"3\" alert=\"G:\\live\\eq2\\framework\\vdl\\VdlErr.cpp(85): (VDL Parser) runtimevdl/cbaseclasses.vdl(21) : Error, File not found, runtimevdl/services.vdl.\n\"\nbuild=\"SOEBuild=12133L\" version=\"SOEVersionString=2015/8/17 11:12:50\" build_type=\"USER OPTIMIZED\" ls_address=\"none\" zone=\"\" loc=\" 0.00 0.00 0.00\" performance=\"3\" alert=\"G:\\live\\eq2\\framework\\vdl\\VdlErr.cpp(85): (VDL Parser) runtimevdl/cbaseclasses.vdl(22) : Error, File not found, runtimevdl/soemote.vdl.\n\"\nbuild=\"SOEBuild=12133L\" version=\"SOEVersionString=2015/8/17 11:12:50\" build_type=\"USER OPTIMIZED\" ls_address=\"none\" zone=\"\" loc=\" 0.00 0.00 0.00\" performance=\"6\" alert=\"G:\\live\\eq2\\framework\\core\\devices\\DirectX9RenderDevice.cpp(18893): Restore: SetDeviceGammaRamp(\\\\.\\DISPLAY1) failed: 87\"\nbuild=\"SOEBuild=12133L\" version=\"SOEVersionString=2015/8/17 11:12:50\" build_type=\"USER OPTIMIZED\" ls_address=\"none\" zone=\"\" loc=\" 0.00 0.00 0.00\" performance=\"6\" alert=\"G:\\live\\eq2\\framework\\core\\devices\\DirectX9RenderDevice.cpp(1881): Failed gamma restoration test during startup. Gamma settings will be ignored.\"\nbuild=\"SOEBuild=12133L\" version=\"SOEVersionString=2015/8/17 11:12:50\" build_type=\"USER OPTIMIZED\" ls_address=\"none\" zone=\"\" loc=\" 0.00 0.00 0.00\" performance=\"3\" alert=\"G:\\live\\eq2\\framework\\vdl\\VdlErr.cpp(85): (VDL Parser) runtimevdl/cbaseclasses.vdl(21) : Error, File not found, runtimevdl/services.vdl.\n\"\nbuild=\"SOEBuild=12133L\" version=\"SOEVersionString=2015/8/17 11:12:50\" build_type=\"USER OPTIMIZED\" ls_address=\"none\" zone=\"\" loc=\" 0.00 0.00 0.00\" performance=\"3\" alert=\"G:\\live\\eq2\\framework\\vdl\\VdlErr.cpp(85): (VDL Parser) runtimevdl/cbaseclasses.vdl(22) : Error, File not found, runtimevdl/soemote.vdl.\n\"\nbuild=\"SOEBuild=12133L\" version=\"SOEVersionString=2015/8/17 11:12:50\" build_type=\"USER OPTIMIZED\" ls_address=\"none\" zone=\"\" loc=\" 0.00 0.00 0.00\" performance=\"6\" alert=\"G:\\live\\eq2\\framework\\core\\devices\\DirectX9RenderDevice.cpp(18893): Restore: SetDeviceGammaRamp(\\\\.\\DISPLAY1) failed: 87\"\nbuild=\"SOEBuild=12133L\" version=\"SOEVersionString=2015/8/17 11:12:50\" build_type=\"USER OPTIMIZED\" ls_address=\"none\" zone=\"\" loc=\" 0.00 0.00 0.00\" performance=\"6\" alert=\"G:\\live\\eq2\\framework\\core\\devices\\DirectX9RenderDevice.cpp(1881): Failed gamma restoration test during startup. Gamma settings will be ignored.\"\n','image',60114,0,NULL,'','0'),(17,1582663838,'Verify Log','build=\"SOEBuild=12133L\" version=\"SOEVersionString=2015/8/17 11:12:50\" build_type=\"USER OPTIMIZED\" ls_address=\"none\" zone=\"\" loc=\" 0.00 0.00 0.00\" performance=\"3\" alert=\"G:\\live\\eq2\\framework\\vdl\\VdlErr.cpp(85): (VDL Parser) runtimevdl/cbaseclasses.vdl(21) : Error, File not found, runtimevdl/services.vdl.\n\"\nbuild=\"SOEBuild=12133L\" version=\"SOEVersionString=2015/8/17 11:12:50\" build_type=\"USER OPTIMIZED\" ls_address=\"none\" zone=\"\" loc=\" 0.00 0.00 0.00\" performance=\"3\" alert=\"G:\\live\\eq2\\framework\\vdl\\VdlErr.cpp(85): (VDL Parser) runtimevdl/cbaseclasses.vdl(22) : Error, File not found, runtimevdl/soemote.vdl.\n\"\nbuild=\"SOEBuild=12133L\" version=\"SOEVersionString=2015/8/17 11:12:50\" build_type=\"USER OPTIMIZED\" ls_address=\"none\" zone=\"\" loc=\" 0.00 0.00 0.00\" performance=\"6\" alert=\"G:\\live\\eq2\\framework\\core\\devices\\DirectX9RenderDevice.cpp(18893): Restore: SetDeviceGammaRamp(\\\\.\\DISPLAY1) failed: 87\"\nbuild=\"SOEBuild=12133L\" version=\"SOEVersionString=2015/8/17 11:12:50\" build_type=\"USER OPTIMIZED\" ls_address=\"none\" zone=\"\" loc=\" 0.00 0.00 0.00\" performance=\"6\" alert=\"G:\\live\\eq2\\framework\\core\\devices\\DirectX9RenderDevice.cpp(1881): Failed gamma restoration test during startup. Gamma settings will be ignored.\"\n','image',60114,0,NULL,'','0'),(18,1582775683,'Verify Log','build=\"SOEBuild=12133L\" version=\"SOEVersionString=2015/8/17 11:12:50\" build_type=\"USER OPTIMIZED\" ls_address=\"none\" zone=\"ZoneScene::onOpen\" loc=\"-124.68 59.82 -890.29\" performance=\"6\" alert=\"G:\\live\\eq2\\framework\\resman\\ResourceManager.cpp(126): Resource leak! (shaders/templates/t2_bmp1_uvset_spwv_blend.vdl)\"\nbuild=\"SOEBuild=12133L\" version=\"SOEVersionString=2015/8/17 11:12:50\" build_type=\"USER OPTIMIZED\" ls_address=\"none\" zone=\"ZoneScene::onOpen\" loc=\"-124.68 59.82 -890.29\" performance=\"6\" alert=\"G:\\live\\eq2\\framework\\resman\\ResourceManager.cpp(126): Resource leak! (cooked/interiors/scenes/regions/antonica/halas/hal_collision_flying01_l0.sp)\"\nbuild=\"SOEBuild=12133L\" version=\"SOEVersionString=2015/8/17 11:12:50\" build_type=\"USER OPTIMIZED\" ls_address=\"none\" zone=\"ZoneScene::onOpen\" loc=\"-124.68 59.82 -890.29\" performance=\"6\" alert=\"G:\\live\\eq2\\framework\\resman\\ResourceManager.cpp(126): Resource leak! (cooked/interiors/scenes/regions/antonica/halas/hal_deserted_islands01_l0.sp)\"\nbuild=\"SOEBuild=12133L\" version=\"SOEVersionString=2015/8/17 11:12:50\" build_type=\"USER OPTIMIZED\" ls_address=\"none\" zone=\"ZoneScene::onOpen\" loc=\"-124.68 59.82 -890.29\" performance=\"6\" alert=\"G:\\live\\eq2\\framework\\resman\\ResourceManager.cpp(126): Resource leak! (cooked/interiors/scenes/regions/antonica/halas/hal_3dsketch_island04_l0.sp)\"\nbuild=\"SOEBuild=12133L\" version=\"SOEVersionString=2015/8/17 11:12:50\" build_type=\"USER OPTIMIZED\" ls_address=\"none\" zone=\"ZoneScene::onOpen\" loc=\"-124.68 59.82 -890.29\" performance=\"6\" alert=\"G:\\live\\eq2\\framework\\resman\\ResourceManager.cpp(126): Resource leak! (shaders/interiors/nodraw.vdl)\"\nbuild=\"SOEBuild=12133L\" version=\"SOEVersionString=2015/8/17 11:12:50\" build_type=\"USER OPTIMIZED\" ls_address=\"none\" zone=\"ZoneScene::onOpen\" loc=\"-124.68 59.82 -890.29\" performance=\"6\" alert=\"G:\\live\\eq2\\framework\\resman\\ResourceManager.cpp(126): Resource leak! (shaders/interiors/regions/antonica/halas/hal_bromze_metal_02.vdl)\"\nbuild=\"SOEBuild=12133L\" version=\"SOEVersionString=2015/8/17 11:12:50\" build_type=\"USER OPTIMIZED\" ls_address=\"none\" zone=\"ZoneScene::onOpen\" loc=\"-124.68 59.82 -890.29\" performance=\"6\" alert=\"G:\\live\\eq2\\framework\\resman\\ResourceManager.cpp(126): Resource leak! (shaders/interiors/regions/antonica/halas/hal_wood_base_snow_02.vdl)\"\nbuild=\"SOEBuild=12133L\" version=\"SOEVersionString=2015/8/17 11:12:50\" build_type=\"USER OPTIMIZED\" ls_address=\"none\" zone=\"ZoneScene::onOpen\" loc=\"-124.68 59.82 -890.29\" performance=\"6\" alert=\"G:\\live\\eq2\\framework\\resman\\ResourceManager.cpp(126): Resource leak! (shaders/interiors/regions/antonica/halas/hal_ice_layered.vdl)\"\nbuild=\"SOEBuild=12133L\" version=\"SOEVersionString=2015/8/17 11:12:50\" build_type=\"USER OPTIMIZED\" ls_address=\"none\" zone=\"ZoneScene::onOpen\" loc=\"-124.68 59.82 -890.29\" performance=\"6\" alert=\"G:\\live\\eq2\\framework\\resman\\ResourceManager.cpp(126): Resource leak! (shaders/interiors/regions/antonica/halas/hal_ice_solid_blue.vdl)\"\nbuild=\"SOEBuild=12133L\" version=\"SOEVersionString=2015/8/17 11:12:50\" build_type=\"USER OPTIMIZED\" ls_address=\"none\" zone=\"ZoneScene::onOpen\" loc=\"-124.68 59.82 -890.29\" performance=\"6\" alert=\"G:\\live\\eq2\\framework\\resman\\ResourceManager.cpp(126): Resource leak! (shaders/interiors/regions/antonica/halas/hal_ice_chunks.vdl)\"\nbuild=\"SOEBuild=12133L\" version=\"SOEVersionString=2015/8/17 11:12:50\" build_type=\"USER OPTIMIZED\" ls_address=\"none\" zone=\"ZoneScene::onOpen\" loc=\"-124.68 59.82 -890.29\" performance=\"6\" alert=\"G:\\live\\eq2\\framework\\resman\\ResourceManager.cpp(126): Resource leak! (shaders/interiors/regions/antonica/halas/hal_snow_drifty01.vdl)\"\nbuild=\"SOEBuild=12133L\" version=\"SOEVersionString=2015/8/17 11:12:50\" build_type=\"USER OPTIMIZED\" ls_address=\"none\" zone=\"ZoneScene::onOpen\" loc=\"-124.68 59.82 -890.29\" performance=\"6\" alert=\"G:\\live\\eq2\\framework\\resman\\ResourceManager.cpp(126): Resource leak! (shaders/interiors/regions/antonica/halas/hal_snow_drifty01_to_darker.vdl)\"\nbuild=\"SOEBuild=12133L\" version=\"SOEVersionString=2015/8/17 11:12:50\" build_type=\"USER OPTIMIZED\" ls_address=\"none\" zone=\"ZoneScene::onOpen\" loc=\"-','image',60114,0,NULL,'','0'); +/*!40000 ALTER TABLE `log_messages` ENABLE KEYS */; +UNLOCK TABLES; + +-- +-- Table structure for table `login_char_colors` +-- + +DROP TABLE IF EXISTS `login_char_colors`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `login_char_colors` ( + `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT, + `login_characters_id` int(10) unsigned NOT NULL, + `signed_value` tinyint(4) NOT NULL DEFAULT 0, + `type` varchar(32) COLLATE latin1_general_ci NOT NULL, + `red` smallint(6) NOT NULL DEFAULT 0, + `green` smallint(6) NOT NULL DEFAULT 0, + `blue` smallint(6) NOT NULL DEFAULT 0, + PRIMARY KEY (`id`), + UNIQUE KEY `id` (`id`), + KEY `id_2` (`id`), + KEY `CharID` (`login_characters_id`) +) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Dumping data for table `login_char_colors` +-- + +LOCK TABLES `login_char_colors` WRITE; +/*!40000 ALTER TABLE `login_char_colors` DISABLE KEYS */; +/*!40000 ALTER TABLE `login_char_colors` ENABLE KEYS */; +UNLOCK TABLES; + +-- +-- Table structure for table `login_characters` +-- + +DROP TABLE IF EXISTS `login_characters`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `login_characters` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `account_id` int(10) unsigned NOT NULL DEFAULT 0, + `server_id` int(10) unsigned NOT NULL DEFAULT 0, + `name` varchar(64) COLLATE latin1_general_ci NOT NULL DEFAULT '', + `race` tinyint(3) unsigned NOT NULL DEFAULT 0, + `class` tinyint(3) unsigned NOT NULL DEFAULT 0, + `gender` tinyint(3) unsigned NOT NULL DEFAULT 0, + `deity` tinyint(3) unsigned NOT NULL DEFAULT 0, + `body_size` float NOT NULL DEFAULT 0, + `body_age` float NOT NULL DEFAULT 0, + `current_zone` varchar(64) COLLATE latin1_general_ci NOT NULL DEFAULT 'antonica', + `current_zone_id` int(10) unsigned NOT NULL DEFAULT 0, + `level` int(10) unsigned NOT NULL DEFAULT 1, + `tradeskill_class` tinyint(3) unsigned NOT NULL DEFAULT 0, + `tradeskill_level` int(10) unsigned NOT NULL DEFAULT 1, + `soga_wing_type` mediumint(8) unsigned NOT NULL, + `soga_chest_type` mediumint(8) unsigned NOT NULL, + `soga_legs_type` mediumint(8) unsigned NOT NULL, + `soga_hair_type` mediumint(8) unsigned NOT NULL, + `soga_facial_hair_type` mediumint(8) unsigned NOT NULL DEFAULT 0, + `legs_type` mediumint(8) unsigned NOT NULL, + `chest_type` mediumint(8) unsigned NOT NULL, + `wing_type` mediumint(8) unsigned NOT NULL, + `hair_type` mediumint(8) unsigned NOT NULL, + `facial_hair_type` mediumint(8) unsigned NOT NULL DEFAULT 0, + `deleted` tinyint(3) unsigned NOT NULL DEFAULT 0, + `unix_timestamp` int(10) NOT NULL DEFAULT 0, + `created_date` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(), + `last_played` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', + `char_id` int(11) NOT NULL DEFAULT 0, + PRIMARY KEY (`id`), + KEY `ServerIDX` (`account_id`,`server_id`,`char_id`) +) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Dumping data for table `login_characters` +-- + +LOCK TABLES `login_characters` WRITE; +/*!40000 ALTER TABLE `login_characters` DISABLE KEYS */; +/*!40000 ALTER TABLE `login_characters` ENABLE KEYS */; +UNLOCK TABLES; + +-- +-- Table structure for table `login_config` +-- + +DROP TABLE IF EXISTS `login_config`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `login_config` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `config_name` varchar(64) COLLATE latin1_general_ci NOT NULL DEFAULT '', + `config_value` varchar(64) COLLATE latin1_general_ci NOT NULL DEFAULT '', + PRIMARY KEY (`id`) +) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci CHECKSUM=1 DELAY_KEY_WRITE=1 ROW_FORMAT=DYNAMIC COMMENT='moving some hard-coded values out of Login source to this ta'; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Dumping data for table `login_config` +-- + +LOCK TABLES `login_config` WRITE; +/*!40000 ALTER TABLE `login_config` DISABLE KEYS */; +INSERT INTO `login_config` VALUES (1,'login_heartbeat','1582776503'),(2,'max_server_offline_age','604800'); +/*!40000 ALTER TABLE `login_config` ENABLE KEYS */; +UNLOCK TABLES; + +-- +-- Table structure for table `login_equipment` +-- + +DROP TABLE IF EXISTS `login_equipment`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `login_equipment` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `login_characters_id` int(10) unsigned NOT NULL DEFAULT 0, + `equip_type` smallint(5) unsigned NOT NULL DEFAULT 0, + `red` tinyint(3) unsigned NOT NULL DEFAULT 255, + `green` tinyint(3) unsigned NOT NULL DEFAULT 255, + `blue` tinyint(3) unsigned NOT NULL DEFAULT 255, + `highlight_red` tinyint(3) unsigned NOT NULL DEFAULT 255, + `highlight_green` tinyint(3) unsigned NOT NULL DEFAULT 255, + `highlight_blue` tinyint(3) unsigned NOT NULL DEFAULT 255, + `slot` int(11) NOT NULL DEFAULT 0, + `last_updated` timestamp NOT NULL DEFAULT current_timestamp(), + PRIMARY KEY (`id`), + UNIQUE KEY `CharSlotIDX` (`login_characters_id`,`slot`) +) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Dumping data for table `login_equipment` +-- + +LOCK TABLES `login_equipment` WRITE; +/*!40000 ALTER TABLE `login_equipment` DISABLE KEYS */; +/*!40000 ALTER TABLE `login_equipment` ENABLE KEYS */; +UNLOCK TABLES; + +-- +-- Table structure for table `login_versions` +-- + +DROP TABLE IF EXISTS `login_versions`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `login_versions` ( + `id` smallint(5) unsigned NOT NULL AUTO_INCREMENT, + `version` varchar(30) COLLATE latin1_general_ci NOT NULL DEFAULT '', + PRIMARY KEY (`id`), + UNIQUE KEY `NewIndex` (`version`) +) ENGINE=MyISAM AUTO_INCREMENT=7 DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Dumping data for table `login_versions` +-- + +LOCK TABLES `login_versions` WRITE; +/*!40000 ALTER TABLE `login_versions` DISABLE KEYS */; +INSERT INTO `login_versions` VALUES (4,'0.7.2-dev'),(1,'0.7'),(2,'0.7.1-dev'),(3,'0.7.1'),(5,'0.7.2'),(6,'0.7.3-dev'); +/*!40000 ALTER TABLE `login_versions` ENABLE KEYS */; +UNLOCK TABLES; + +-- +-- Table structure for table `login_worldservers` +-- + +DROP TABLE IF EXISTS `login_worldservers`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `login_worldservers` ( + `id` int(11) unsigned NOT NULL AUTO_INCREMENT, + `name` varchar(250) COLLATE latin1_general_ci NOT NULL DEFAULT '', + `disabled` tinyint(3) unsigned NOT NULL DEFAULT 0, + `account` varchar(30) COLLATE latin1_general_ci NOT NULL DEFAULT '', + `chat_shortname` varchar(20) COLLATE latin1_general_ci NOT NULL DEFAULT '', + `description` text COLLATE latin1_general_ci NOT NULL, + `server_type` varchar(15) COLLATE latin1_general_ci NOT NULL DEFAULT '0', + `password` varchar(32) COLLATE latin1_general_ci NOT NULL, + `serverop` varchar(64) COLLATE latin1_general_ci NOT NULL DEFAULT '', + `lastseen` int(10) unsigned NOT NULL DEFAULT 0, + `admin_id` int(11) unsigned NOT NULL DEFAULT 0, + `greenname` tinyint(1) unsigned NOT NULL DEFAULT 0, + `showdown` tinyint(4) NOT NULL DEFAULT 0, + `chat` varchar(20) COLLATE latin1_general_ci NOT NULL DEFAULT '0', + `note` tinytext COLLATE latin1_general_ci NOT NULL, + `ip_address` varchar(50) COLLATE latin1_general_ci NOT NULL DEFAULT '0', + `reset_needed` tinyint(3) unsigned NOT NULL DEFAULT 0, + `created_date` int(10) unsigned NOT NULL DEFAULT 0, + `hide_status` tinyint(1) unsigned NOT NULL DEFAULT 0, + `hide_details` tinyint(1) unsigned NOT NULL DEFAULT 0, + `hide_admin` tinyint(1) unsigned NOT NULL DEFAULT 0, + `hide_serverlist` tinyint(1) NOT NULL DEFAULT 0, + `server_url` varchar(250) COLLATE latin1_general_ci DEFAULT '', + `server_category` enum('Standard','Preferred','Premium','Development') COLLATE latin1_general_ci DEFAULT 'Standard', + `server_admin` varchar(64) COLLATE latin1_general_ci NOT NULL DEFAULT '', + `server_sticky` tinyint(1) unsigned NOT NULL DEFAULT 0, + `gm_list` text COLLATE latin1_general_ci DEFAULT NULL, + `reset_zone_descriptions` tinyint(1) unsigned NOT NULL DEFAULT 0, + `reset_login_appearances` tinyint(1) unsigned NOT NULL DEFAULT 0, + `login_version` varchar(32) COLLATE latin1_general_ci NOT NULL DEFAULT '0', + PRIMARY KEY (`id`), + UNIQUE KEY `account` (`account`), + UNIQUE KEY `NameIDX` (`name`) +) ENGINE=MyISAM AUTO_INCREMENT=2 DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Dumping data for table `login_worldservers` +-- + +LOCK TABLES `login_worldservers` WRITE; +/*!40000 ALTER TABLE `login_worldservers` DISABLE KEYS */; +INSERT INTO `login_worldservers` VALUES (1,'Zeklabs',0,'zeklabs','','zeklabs','0','ed8acc7338a6ba5072472ae4554c16','admin',1582775680,1,0,0,'0','','10.1.1.2',0,1387650563,1,1,1,1,'','Standard','Admin',0,NULL,0,0,'0.7.3-dev'); +/*!40000 ALTER TABLE `login_worldservers` ENABLE KEYS */; +UNLOCK TABLES; + +-- +-- Table structure for table `login_worldstats` +-- + +DROP TABLE IF EXISTS `login_worldstats`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `login_worldstats` ( + `id` int(11) unsigned NOT NULL AUTO_INCREMENT, + `world_id` int(11) unsigned NOT NULL DEFAULT 0, + `world_status` int(11) NOT NULL DEFAULT -1, + `current_players` int(11) unsigned NOT NULL DEFAULT 0, + `current_zones` int(11) unsigned NOT NULL DEFAULT 0, + `connected_time` timestamp NOT NULL DEFAULT current_timestamp(), + `last_update` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00', + `world_max_level` tinyint(3) unsigned NOT NULL DEFAULT 0, + PRIMARY KEY (`id`), + UNIQUE KEY `NewIndex` (`world_id`) +) ENGINE=MyISAM AUTO_INCREMENT=2 DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Dumping data for table `login_worldstats` +-- + +LOCK TABLES `login_worldstats` WRITE; +/*!40000 ALTER TABLE `login_worldstats` DISABLE KEYS */; +INSERT INTO `login_worldstats` VALUES (1,1,1,0,1,'2020-02-28 05:11:28','2020-02-28 05:12:28',0); +/*!40000 ALTER TABLE `login_worldstats` ENABLE KEYS */; +UNLOCK TABLES; + +-- +-- Table structure for table `ls_character_picture` +-- + +DROP TABLE IF EXISTS `ls_character_picture`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `ls_character_picture` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `server_id` int(10) unsigned NOT NULL, + `account_id` int(10) unsigned NOT NULL, + `character_id` int(10) NOT NULL, + `picture` text NOT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `character_id` (`character_id`,`server_id`,`account_id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Dumping data for table `ls_character_picture` +-- + +LOCK TABLES `ls_character_picture` WRITE; +/*!40000 ALTER TABLE `ls_character_picture` DISABLE KEYS */; +/*!40000 ALTER TABLE `ls_character_picture` ENABLE KEYS */; +UNLOCK TABLES; + +-- +-- Table structure for table `ls_sessions` +-- + +DROP TABLE IF EXISTS `ls_sessions`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `ls_sessions` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `session_id` varchar(64) COLLATE latin1_general_ci NOT NULL, + `session_owner` int(10) unsigned NOT NULL DEFAULT 0, + `session_ip` varchar(64) COLLATE latin1_general_ci NOT NULL, + `session_state` enum('Launchpad','Patcher','Login','CharSel','World','Chat') COLLATE latin1_general_ci NOT NULL DEFAULT 'Patcher', + `session_create_date` int(10) unsigned NOT NULL DEFAULT 0, + `session_expire_date` int(10) unsigned NOT NULL DEFAULT 0, + PRIMARY KEY (`id`), + UNIQUE KEY `NewIndex1` (`session_id`,`session_owner`), + KEY `FK_ls_sessions` (`session_owner`), + CONSTRAINT `FK_ls_sessions` FOREIGN KEY (`session_owner`) REFERENCES `ls_accounts` (`id`) ON DELETE CASCADE +) ENGINE=InnoDB DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Dumping data for table `ls_sessions` +-- + +LOCK TABLES `ls_sessions` WRITE; +/*!40000 ALTER TABLE `ls_sessions` DISABLE KEYS */; +/*!40000 ALTER TABLE `ls_sessions` ENABLE KEYS */; +UNLOCK TABLES; + +-- +-- Table structure for table `ls_world_zones` +-- + +DROP TABLE IF EXISTS `ls_world_zones`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `ls_world_zones` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `server_id` int(10) unsigned NOT NULL DEFAULT 0, + `zone_id` int(10) unsigned NOT NULL DEFAULT 0, + `name` varchar(128) COLLATE latin1_general_ci NOT NULL DEFAULT '', + `description` varchar(128) COLLATE latin1_general_ci NOT NULL DEFAULT '', + PRIMARY KEY (`id`), + UNIQUE KEY `id` (`id`), + UNIQUE KEY `IDXServerZone` (`server_id`,`zone_id`), + KEY `id_2` (`id`) +) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Dumping data for table `ls_world_zones` +-- + +LOCK TABLES `ls_world_zones` WRITE; +/*!40000 ALTER TABLE `ls_world_zones` DISABLE KEYS */; +/*!40000 ALTER TABLE `ls_world_zones` ENABLE KEYS */; +UNLOCK TABLES; + +-- +-- Table structure for table `opcodes` +-- + +DROP TABLE IF EXISTS `opcodes`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `opcodes` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `version_range1` smallint(5) unsigned NOT NULL DEFAULT 0, + `version_range2` smallint(5) unsigned NOT NULL DEFAULT 0, + `name` varchar(255) COLLATE latin1_general_ci NOT NULL DEFAULT '', + `opcode` smallint(5) unsigned NOT NULL DEFAULT 0, + `table_data_version` smallint(5) unsigned NOT NULL DEFAULT 1, + PRIMARY KEY (`id`), + UNIQUE KEY `newindex` (`version_range1`,`name`,`version_range2`) +) ENGINE=InnoDB AUTO_INCREMENT=29498 DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Dumping data for table `opcodes` +-- + +LOCK TABLES `opcodes` WRITE; +/*!40000 ALTER TABLE `opcodes` DISABLE KEYS */; +INSERT INTO `opcodes` VALUES (1,0,0,'OP_LoginRequestMsg',0,1),(2,0,0,'OP_LoginByNumRequestMsg',1,1),(3,0,0,'OP_WSLoginRequestMsg',2,1),(4,0,0,'OP_ESLoginRequestMsg',3,1),(5,0,0,'OP_LoginReplyMsg',4,1),(6,0,0,'OP_WSStatusReplyMsg',5,1),(7,0,0,'OP_WorldStatusChangeMsg',6,1),(8,0,0,'OP_AllWSDescRequestMsg',7,1),(9,0,0,'OP_WorldListMsg',8,1),(10,0,0,'OP_AllCharactersDescRequestMsg',9,1),(11,0,0,'OP_AllCharactersDescReplyMsg',10,1),(12,0,0,'OP_CreateCharacterRequestMsg',11,1),(13,0,0,'OP_CreateCharacterReplyMsg',12,1),(14,0,0,'OP_WSCreateCharacterRequestMsg',13,1),(15,0,0,'OP_WSCreateCharacterReplyMsg',14,1),(16,0,0,'OP_ReskinCharacterRequestMsg',15,1),(17,0,0,'OP_DeleteCharacterRequestMsg',16,1),(18,0,0,'OP_DeleteCharacterReplyMsg',17,1),(19,0,0,'OP_PlayCharacterRequestMsg',18,1),(20,0,0,'OP_PlayCharacterReplyMsg',19,1),(21,0,0,'OP_ExpectClientAsCharacterReplyMs',22,1),(22,0,0,'OP_ServerPlayCharacterRequestMsg',23,1),(23,0,0,'OP_ServerPlayCharacterReplyMsg',24,1),(24,0,0,'OP_ESInitMsg',25,1),(25,0,0,'OP_ESReadyForClientsMsg',26,1),(26,0,0,'OP_CreateZoneInstanceMsg',27,1),(27,0,0,'OP_ZoneInstanceCreateReplyMsg',28,1),(28,0,0,'OP_ZoneInstanceDestroyedMsg',29,1),(29,0,0,'OP_ExpectClientAsCharacterRequest',30,1),(30,0,0,'OP_ZoneInfoMsg',31,1),(31,0,0,'OP_DoneLoadingZoneResourcesMsg',32,1),(32,0,0,'OP_DoneSendingInitialEntitiesMsg',33,1),(33,0,0,'OP_DoneLoadingEntityResourcesMsg',34,1),(34,0,0,'OP_PredictionUpdateMsg',35,1),(35,0,0,'OP_UpdatePositionMsg',36,1),(36,0,0,'OP_SetRemoteCmdsMsg',37,1),(37,0,0,'OP_RemoteCmdMsg',38,1),(38,0,0,'OP_GameWorldTimeMsg',39,1),(39,0,0,'OP_MOTDMsg',40,1),(40,0,0,'OP_ZoneMOTDMsg',41,1),(41,0,0,'OP_AvatarCreatedMsg',42,1),(42,0,0,'OP_AvatarDestroyedMsg',43,1),(43,0,0,'OP_RequestCampMsg',45,1),(44,0,0,'OP_CampStartedMsg',46,1),(45,0,0,'OP_CampAbortedMsg',47,1),(46,0,0,'OP_WhoQueryRequestMsg',48,1),(47,0,0,'OP_WhoQueryReplyMsg',49,1),(48,0,0,'OP_MonitorReplyMsg',50,1),(49,0,0,'OP_Unknown_51',51,1),(50,0,0,'OP_MonitorCharacterListRequestMsg',52,1),(51,0,0,'OP_ClientCmdMsg',53,1),(52,0,0,'OP_DispatchESMsg',54,1),(53,0,0,'OP_DispatchClientCmdMsg',55,1),(54,0,0,'OP_UpdateTargetMsg',56,1),(55,0,0,'OP_UpdateTargetLocMsg',57,1),(56,0,0,'OP_UpdateCharacterSheetMsg',58,1),(57,0,0,'OP_UpdateSpellBookMsg',59,1),(58,0,0,'OP_UpdateInventoryMsg',61,1),(59,0,0,'OP_UpdateRecipeBookMsg',63,1),(60,0,0,'OP_RequestRecipeDetailsMsg',64,1),(61,0,0,'OP_RecipeDetailsMsg',65,1),(62,0,0,'OP_UpdateSkillBookMsg',66,1),(63,0,0,'OP_UpdateSkillsMsg',67,1),(64,0,0,'OP_UpdateOpportunityMsg',68,1),(65,0,0,'OP_ChangeZoneMsg',70,1),(66,0,0,'OP_ClientTeleportRequestMsg',71,1),(67,0,0,'OP_TeleportWithinZoneMsg',72,1),(68,0,0,'OP_TeleportWithinZoneNoReloadMsg',73,1),(69,0,0,'OP_MigrateClientToZoneRequestMsg',74,1),(70,0,0,'OP_MigrateClientToZoneReplyMsg',75,1),(71,0,0,'OP_ReadyToZoneMsg',76,1),(72,0,0,'OP_RemoveClientFromGroupMsg',77,1),(73,0,0,'OP_RemoveGroupFromGroupMsg',78,1),(74,0,0,'OP_MakeGroupLeaderMsg',79,1),(75,0,0,'OP_GroupCreatedMsg',80,1),(76,0,0,'OP_GroupDestroyedMsg',81,1),(77,0,0,'OP_GroupMemberAddedMsg',82,1),(78,0,0,'OP_GroupMemberRemovedMsg',83,1),(79,0,0,'OP_GroupRemovedFromGroupMsg',84,1),(80,0,0,'OP_GroupLeaderChangedMsg',85,1),(81,0,0,'OP_GroupResendOOZDataMsg',86,1),(82,0,0,'OP_GroupSettingsChangedMsg',87,1),(83,0,0,'OP_OutOfZoneMemberDataMsg',88,1),(84,0,0,'OP_SendLatestRequestMsg',89,1),(85,0,0,'OP_ClearDataMsg',90,1),(86,0,0,'OP_SetSocialMsg',91,1),(87,0,0,'OP_ESStatusMsg',92,1),(88,0,0,'OP_ESZoneInstanceStatusMsg',93,1),(89,0,0,'OP_ZonesStatusRequestMsg',94,1),(90,0,0,'OP_ZonesStatusMsg',95,1),(91,0,0,'OP_ESWeatherRequestMsg',96,1),(92,0,0,'OP_ESWeatherRequestEndMsg',97,1),(93,0,0,'OP_DialogSelectMsg',98,1),(94,0,0,'OP_DialogCloseMsg',99,1),(95,0,0,'OP_RemoveSpellEffectMsg',100,1),(96,0,0,'OP_RemoveConcentrationMsg',101,1),(97,0,0,'OP_QuestJournalOpenMsg',104,1),(98,0,0,'OP_QuestJournalInspectMsg',105,1),(99,0,0,'OP_QuestJournalSetVisibleMsg',106,1),(100,0,0,'OP_QuestJournalWaypointMsg',107,1),(101,0,0,'OP_CreateGuildRequestMsg',108,1),(102,0,0,'OP_CreateGuildReplyMsg',109,1),(103,0,0,'OP_GuildsayMsg',110,1),(104,0,0,'OP_GuildUpdateMsg',111,1),(105,0,0,'OP_DeleteGuildMsg',112,1),(106,0,0,'OP_FellowshipExpMsg',113,1),(107,0,0,'OP_ConsignmentCloseStoreMsg',114,1),(108,0,0,'OP_ConsignItemRequestMsg',115,1),(109,0,0,'OP_ConsignItemResponseMsg',116,1),(110,0,0,'OP_PurchaseConsignmentRequestMsg',117,1),(111,0,0,'OP_HouseDeletedRemotelyMsg',118,1),(112,0,0,'OP_UpdateHouseDataMsg',119,1),(113,0,0,'OP_UpdateHouseAccessDataMsg',120,1),(114,0,0,'OP_PlayerHouseBaseScreenMsg',121,1),(115,0,0,'OP_PlayerHousePurchaseScreenMsg',122,1),(116,0,0,'OP_PlayerHouseAccessUpdateMsg',123,1),(117,0,0,'OP_PlayerHouseDisplayStatusMsg',124,1),(118,0,0,'OP_PlayerHouseCloseUIMsg',125,1),(119,0,0,'OP_BuyPlayerHouseMsg',126,1),(120,0,0,'OP_BuyPlayerHouseTintMsg',127,1),(121,0,0,'OP_CollectAllHouseItemsMsg',128,1),(122,0,0,'OP_RelinquishHouseMsg',129,1),(123,0,0,'OP_EnterHouseMsg',130,1),(124,0,0,'OP_ExitHouseMsg',131,1),(125,0,0,'OP_HouseDefaultAccessSetMsg',132,1),(126,0,0,'OP_HouseAccessSetMsg',133,1),(127,0,0,'OP_HouseAccessRemoveMsg',134,1),(128,0,0,'OP_PayHouseUpkeepMsg',135,1),(129,0,0,'OP_MoveableObjectPlacementCriteri',136,1),(130,0,0,'OP_EnterMoveObjectModeMsg',137,1),(131,0,0,'OP_PositionMoveableObject',138,1),(132,0,0,'OP_CancelMoveObjectModeMsg',139,1),(133,0,0,'OP_ShaderCustomizationMsg',140,1),(134,0,0,'OP_ReplaceableSubMeshesMsg',141,1),(135,0,0,'OP_HouseCustomizationScreenMsg',142,1),(136,0,0,'OP_CustomizationPurchaseRequestMs',143,1),(137,0,0,'OP_CustomizationSetRequestMsg',144,1),(138,0,0,'OP_CustomizationReplyMsg',145,1),(139,0,0,'OP_TintWidgetsMsg',146,1),(140,0,0,'OP_ExamineConsignmentRequestMsg',147,1),(141,0,0,'OP_ExamineConsignmentResponseMsg',148,1),(142,0,0,'OP_UISettingsResponseMsg',149,1),(143,0,0,'OP_UIResetMsg',150,1),(144,0,0,'OP_KeymapLoadMsg',151,1),(145,0,0,'OP_KeymapNoneMsg',152,1),(146,0,0,'OP_KeymapDataMsg',153,1),(147,0,0,'OP_KeymapSaveMsg',154,1),(148,0,0,'OP_DispatchSpellCmdMsg',155,1),(149,0,0,'OP_EntityVerbsRequestMsg',157,1),(150,0,0,'OP_EntityVerbsReplyMsg',158,1),(151,0,0,'OP_EntityVerbsVerbMsg',159,1),(152,0,0,'OP_ChatRelationshipUpdateMsg',161,1),(153,0,0,'OP_LootItemsRequestMsg',162,1),(154,0,0,'OP_StoppedLootingMsg',163,1),(155,0,0,'OP_SitMsg',164,1),(156,0,0,'OP_StandMsg',165,1),(157,0,0,'OP_SatMsg',166,1),(158,0,0,'OP_StoodMsg',167,1),(159,0,0,'OP_ClearForTakeOffMsg',168,1),(160,0,0,'OP_ReadyForTakeOffMsg',169,1),(161,0,0,'OP_ShowIllusionsMsg',170,1),(162,0,0,'OP_HideIllusionsMsg',171,1),(163,0,0,'OP_ExamineItemRequestMsg',172,1),(164,0,0,'OP_ReadBookPageMsg',173,1),(165,0,0,'OP_DefaultGroupOptionsRequestMsg',174,1),(166,0,0,'OP_DefaultGroupOptionsMsg',175,1),(167,0,0,'OP_GroupOptionsMsg',176,1),(168,0,0,'OP_DisplayGroupOptionsScreenMsg',177,1),(169,0,0,'OP_DisplayInnVisitScreenMsg',178,1),(170,0,0,'OP_DumpSchedulerMsg',179,1),(171,0,0,'OP_LSRequestPlayerDescMsg',180,1),(172,0,0,'OP_LSCheckAcctLockMsg',181,1),(173,0,0,'OP_WSAcctLockStatusMsg',182,1),(174,0,0,'OP_RequestHelpRepathMsg',183,1),(175,0,0,'OP_RequestTargetLocMsg',184,1),(176,0,0,'OP_UpdateMotdMsg',185,1),(177,0,0,'OP_PerformPlayerKnockbackMsg',186,1),(178,0,0,'OP_PerformCameraShakeMsg',187,1),(179,0,0,'OP_PopulateSkillMapsMsg',188,1),(180,0,0,'OP_CancelledFeignMsg',190,1),(181,0,0,'OP_SignalMsg',191,1),(182,0,0,'OP_ShowCreateFromRecipeUIMsg',192,1),(183,0,0,'OP_CancelCreateFromRecipeMsg',193,1),(184,0,0,'OP_BeginItemCreationMsg',194,1),(185,0,0,'OP_StopItemCreationMsg',195,1),(186,0,0,'OP_ShowItemCreationProcessUIMsg',196,1),(187,0,0,'OP_UpdateItemCreationProcessUIMsg',197,1),(188,0,0,'OP_DisplayTSEventReactionMsg',198,1),(189,0,0,'OP_ShowRecipeBookMsg',199,1),(190,0,0,'OP_KnowledgebaseRequestMsg',200,1),(191,0,0,'OP_KnowledgebaseResponseMsg',201,1),(192,0,0,'OP_CSTicketHeaderRequestMsg',202,1),(193,0,0,'OP_CSTicketInfoMsg',203,1),(194,0,0,'OP_CSTicketCommentRequestMsg',204,1),(195,0,0,'OP_CSTicketCommentResponseMsg',205,1),(196,0,0,'OP_CSTicketCreateMsg',206,1),(197,0,0,'OP_CSTicketAddCommentMsg',207,1),(198,0,0,'OP_CSTicketDeleteMsg',208,1),(199,0,0,'OP_CSTicketChangeNotificationMsg',209,1),(200,0,0,'OP_WorldDataUpdateMsg',210,1),(201,0,0,'OP_KnownLanguagesMsg',211,1),(202,0,0,'OP_LsRequestClientCrashLogMsg',212,1),(203,0,0,'OP_LsClientBaselogReplyMsg',213,1),(204,0,0,'OP_LsClientCrashlogReplyMsg',214,1),(205,0,0,'OP_LsClientAlertlogReplyMsg',215,1),(206,0,0,'OP_LsClientVerifylogReplyMsg',216,1),(207,0,0,'OP_ClientTeleportToLocationMsg',217,1),(208,0,0,'OP_UpdateClientPredFlagsMsg',218,1),(209,0,0,'OP_ChangeServerControlFlagMsg',219,1),(210,0,0,'OP_CSToolsRequestMsg',220,1),(211,0,0,'OP_CSToolsResponseMsg',221,1),(212,0,0,'OP_AddSocialStructureStandingMsg',222,1),(213,0,0,'OP_CreateBoatTransportsMsg',223,1),(214,0,0,'OP_PositionBoatTransportMsg',224,1),(215,0,0,'OP_MigrateBoatTransportMsg',225,1),(216,0,0,'OP_MigrateBoatTransportReplyMsg',226,1),(217,0,0,'OP_DisplayDebugNLLPointsMsg',227,1),(218,0,0,'OP_ExamineInfoRequestMsg',228,1),(219,0,0,'OP_QuickbarInitMsg',229,1),(220,0,0,'OP_QuickbarUpdateMsg',230,1),(221,0,0,'OP_MacroInitMsg',231,1),(222,0,0,'OP_MacroUpdateMsg',232,1),(223,0,0,'OP_QuestionnaireMsg',233,1),(224,0,0,'OP_LevelChangedMsg',234,1),(225,0,0,'OP_SpellGainedMsg',235,1),(226,0,0,'OP_EncounterBrokenMsg',236,1),(227,0,0,'OP_OnscreenMsgMsg',237,1),(228,0,0,'OP_DisplayWarningMsg',238,1),(229,0,0,'OP_ModifyGuildMsg',239,1),(230,0,0,'OP_GuildEventMsg',240,1),(231,0,0,'OP_GuildEventAddMsg',241,1),(232,0,0,'OP_GuildEventActionMsg',242,1),(233,0,0,'OP_GuildEventListMsg',243,1),(234,0,0,'OP_RequestGuildEventDetailsMsg',244,1),(235,0,0,'OP_GuildEventDetailsMsg',245,1),(236,0,0,'OP_RequestGuildInfoMsg',246,1),(237,0,0,'OP_GuildBankActionMsg',247,1),(238,0,0,'OP_GuildBankActionResponseMsg',248,1),(239,0,0,'OP_GuildBankItemDetailsRequestMsg',249,1),(240,0,0,'OP_GuildBankItemDetailsResponseMs',250,1),(241,0,0,'OP_GuildBankUpdateMsg',251,1),(242,0,0,'OP_GuildBankEventListMsg',252,1),(243,0,0,'OP_RequestGuildBankEventDetailsMs',253,1),(244,0,0,'OP_RewardPackMsg',254,1),(245,0,0,'OP_RenameGuildMsg',255,1),(246,0,0,'OP_ZoneToFriendRequestMsg',257,1),(247,0,0,'OP_ZoneToFriendReplyMsg',258,1),(248,0,0,'OP_ChatCreateChannelMsg',259,1),(249,0,0,'OP_ChatJoinChannelMsg',260,1),(250,0,0,'OP_ChatWhoChannelMsg',261,1),(251,0,0,'OP_ChatLeaveChannelMsg',262,1),(252,0,0,'OP_ChatTellChannelMsg',263,1),(253,0,0,'OP_ChatTellUserMsg',264,1),(254,0,0,'OP_ChatToggleFriendMsg',265,1),(255,0,0,'OP_ChatToggleIgnoreMsg',266,1),(256,0,0,'OP_ChatSendFriendsMsg',267,1),(257,0,0,'OP_ChatSendIgnoresMsg',268,1),(258,0,0,'OP_QuestReward',294,1),(259,0,0,'OP_ChatFiltersMsg',309,1),(260,0,0,'OP_MailGetHeadersMsg',310,1),(261,0,0,'OP_MailGetMessageMsg',311,1),(262,0,0,'OP_MailSendMessageMsg',312,1),(263,0,0,'OP_MailDeleteMessageMsg',313,1),(264,0,0,'OP_MailGetHeadersReplyMsg',314,1),(265,0,0,'OP_MailGetMessageReplyMsg',315,1),(266,0,0,'OP_MailSendMessageReplyMsg',316,1),(267,0,0,'OP_MailCommitSendMessageMsg',317,1),(268,0,0,'OP_MailSendSystemMessageMsg',318,1),(269,0,0,'OP_MailRemoveAttachFromMailMsg',319,1),(270,0,0,'OP_WaypointRequestMsg',321,1),(271,0,0,'OP_WaypointReplyMsg',322,1),(272,0,0,'OP_WaypointSelectMsg',323,1),(273,0,0,'OP_WaypointUpdateMsg',324,1),(274,0,0,'OP_CharNameChangedMsg',325,1),(275,0,0,'OP_ShowZoneTeleporterDestinations',326,1),(276,0,0,'OP_SelectZoneTeleporterDestinatio',327,1),(277,0,0,'OP_ReloadLocalizedTxtMsg',328,1),(278,0,0,'OP_RequestGuildMembershipMsg',329,1),(279,0,0,'OP_GuildMembershipResponseMsg',330,1),(280,0,0,'OP_LeaveGuildNotifyMsg',331,1),(281,0,0,'OP_JoinGuildNotifyMsg',332,1),(282,0,0,'OP_AvatarUpdateMsg',334,1),(283,0,0,'OP_BioUpdateMsg',335,1),(284,0,0,'OP_InspectPlayerMsg',336,1),(285,0,0,'OP_WSServerLockMsg',337,1),(286,0,0,'OP_LSServerLockMsg',338,1),(287,0,0,'OP_WSServerHideMsg',339,1),(288,0,0,'OP_CsCategoryRequestMsg',340,1),(289,0,0,'OP_CsCategoryResponseMsg',341,1),(290,0,0,'OP_KnowledgeWindowSlotMappingMsg',342,1),(291,0,0,'OP_LFGUpdateMsg',343,1),(292,0,0,'OP_AFKUpdateMsg',344,1),(293,0,0,'OP_AnonUpdateMsg',345,1),(294,0,0,'OP_UpdateActivePublicZonesMsg',346,1),(295,0,0,'OP_UnknownNpcMsg',347,1),(296,0,0,'OP_PromoFlagsDetailsMsg',348,1),(297,0,0,'OP_ConsignViewCreateMsg',349,1),(298,0,0,'OP_ConsignViewGetPageMsg',350,1),(299,0,0,'OP_ConsignViewReleaseMsg',351,1),(300,0,0,'OP_ConsignRemoveItemsMsg',352,1),(301,0,0,'OP_UpdateDebugRadiiMsg',353,1),(302,0,0,'OP_SnoopMsg',354,1),(303,0,0,'OP_ReportMsg',355,1),(304,0,0,'OP_UpdateRaidMsg',356,1),(305,0,0,'OP_ConsignViewSortMsg',357,1),(306,0,0,'OP_TitleUpdateMsg',358,1),(307,0,0,'OP_ClientFellMsg',359,1),(308,0,0,'OP_ClientInDeathRegionMsg',360,1),(309,0,0,'OP_CampClientMsg',361,1),(310,0,0,'OP_CSToolAccessResponseMsg',362,1),(311,0,0,'OP_TrackingUpdateMsg',363,1),(312,0,0,'OP_BeginTrackingMsg',364,1),(313,0,0,'OP_StopTrackingMsg',365,1),(314,0,0,'OP_GetAvatarAccessRequestForCSToo',366,1),(315,0,0,'OP_AdvancementRequestMsg',367,1),(316,0,0,'OP_UpdateAvgFrameTimeMsg',368,1),(317,0,0,'OP_MapFogDataInitMsg',369,1),(318,0,0,'OP_MapFogDataUpdateMsg',370,1),(319,0,0,'OP_CloseGroupInviteWindowMsg',371,1),(320,0,0,'OP_UpdateGroupMemberDataMsg',372,1),(321,0,0,'OP_WorldPingMsg',373,1),(322,0,0,'OP_MoveLogUpdateMsg',374,1),(323,0,0,'OP_OfferQuestMsg',375,1),(324,0,0,'OP_WorldShutdownUpdateMsg',376,1),(325,0,0,'OP_DisplayMailScreenMsg',377,1),(326,0,0,'OP_ClientIdleBeginMsg',378,1),(327,0,0,'OP_ClientIdleEndMsg',379,1),(328,0,0,'OP_PurchaseConsignmentLoreCheckRe',380,1),(329,0,0,'OP_NotifyApprenticeStoppedMentori',381,1),(330,0,0,'OP_CorruptedClientMsg',382,1),(331,0,0,'OP_WorldDataChangeMsg',383,1),(332,0,0,'OP_MailEventNotificationMsg',384,1),(333,0,0,'OP_RestartZoneMsg',385,1),(334,0,0,'OP_FlightPathsMsg',386,1),(335,0,0,'OP_CharacterLinkdeadMsg',387,1),(336,0,0,'OP_CharTransferStartRequestMsg',388,1),(337,0,0,'OP_CharTransferStartReplyMsg',389,1),(338,0,0,'OP_CharTransferRequestMsg',390,1),(339,0,0,'OP_CharTransferReplyMsg',391,1),(340,0,0,'OP_CharTransferRollbackRequestMsg',392,1),(341,0,0,'OP_CharTransferCommitRequestMsg',393,1),(342,0,0,'OP_CharTransferRollbackReplyMsg',394,1),(343,0,0,'OP_CharTransferCommitReplyMsg',395,1),(344,0,0,'OP_GetCharacterSerializedRequestM',396,1),(345,0,0,'OP_GetCharacterSerializedReplyMsg',397,1),(346,0,0,'OP_CreateCharFromCBBRequestMsg',398,1),(347,0,0,'OP_CreateCharFromCBBReplyMsg',399,1),(348,0,0,'OP_HousingDataChangedMsg',400,1),(349,0,0,'OP_HousingRestoreMsg',401,1),(350,0,0,'OP_AuctionItem',402,1),(351,0,0,'OP_AuctionItemReply',403,1),(352,0,0,'OP_AuctionCoin',404,1),(353,0,0,'OP_AuctionCoinReply',405,1),(354,0,0,'OP_AuctionCharacter',406,1),(355,0,0,'OP_AuctionCharacterReply',407,1),(356,0,0,'OP_AuctionCommitMsg',408,1),(357,0,0,'OP_AuctionAbortMsg',409,1),(358,0,0,'OP_CharTransferValidateRequestMsg',410,1),(359,0,0,'OP_CharTransferValidateReplyMsg',411,1),(360,0,0,'OP_RaceRestrictionMsg',412,1),(361,0,0,'OP_SetInstanceDisplayNameMsg',413,1),(362,0,0,'OP_GetAuctionAssetIDMsg',414,1),(363,0,0,'OP_GetAuctionAssetIDReplyMsg',415,1),(364,0,0,'OP_ResendWorldChannelsMsg',416,1),(365,0,0,'OP_DisplayExchangeScreenMsg',417,1),(366,0,0,'OP_ArenaGameTypesMsg',418,1),(367,0,0,'OP_AuditAuctionEventMsg',420,1),(368,0,0,'OP_InviteRequestMsg',422,1),(369,0,0,'OP_InviteResponseMsg',423,1),(370,0,0,'OP_InviteTargetResponseMsg',424,1),(371,0,0,'OP_InspectPlayerRequestMsg',425,1),(372,0,0,'OP_DispatchMsg',426,1),(373,0,0,'OP_DisplayEventMsg',427,1),(374,0,0,'OP_PrePossessionMsg',428,1),(375,0,0,'OP_PostPossessionMsg',429,1),(376,0,0,'OP_AdventureList',454,1),(377,0,0,'OP_CancelSpellCast',455,1),(378,0,0,'OP_UpdateTitleCmd',461,1),(379,0,0,'OP_AttackAllowed',467,1),(380,0,0,'OP_AttackNotAllowed',468,1),(381,0,0,'OP_DressingRoom',474,1),(382,0,0,'OP_SkillInfoRequest',478,1),(383,0,0,'OP_SkillInfoResponse',479,1),(384,0,0,'OP_EqHearChatCmd',480,1),(385,0,0,'OP_EqDisplayTextCmd',481,1),(386,0,0,'OP_EqCreateGhostCmd',482,1),(387,0,0,'OP_EqCreateWidgetCmd',483,1),(388,0,0,'OP_EqCreateSignWidgetCmd',484,1),(389,0,0,'OP_EqDestroyGhostCmd',485,1),(390,0,0,'OP_EqUpdateGhostCmd',486,1),(391,0,0,'OP_EqSetControlGhostCmd',487,1),(392,0,0,'OP_EqSetPOVGhostCmd',488,1),(393,0,0,'OP_EqHearCombatCmd',489,1),(394,0,0,'OP_EqHearSpellCastCmd',490,1),(395,0,0,'OP_EqHearSpellInterruptCmd',493,1),(396,0,0,'OP_EqHearSpellFizzleCmd',494,1),(397,0,0,'OP_EqHearConsiderCmd',495,1),(398,0,0,'OP_EqUpdateSubClassesCmd',496,1),(399,0,0,'OP_EqCreateListBoxCmd',497,1),(400,0,0,'OP_EqSetDebugPathPointsCmd',498,1),(401,0,0,'OP_EqCannedEmoteCmd',500,1),(402,0,0,'OP_EqStateCmd',501,1),(403,0,0,'OP_EqPlaySoundCmd',502,1),(404,0,0,'OP_EqPlaySound3DCmd',503,1),(405,0,0,'OP_EqPlayVoiceCmd',504,1),(406,0,0,'OP_EqHearDrowningCmd',505,1),(407,0,0,'OP_EqHearDeathCmd',506,1),(408,0,0,'OP_EqGroupMemberRemovedCmd',507,1),(409,0,0,'OP_EqHearChainEffectCmd',508,1),(410,0,0,'OP_EqReceiveOfferCmd',509,1),(411,0,0,'OP_EqInspectPCResultsCmd',510,1),(412,0,0,'OP_EqDrawablePathGraphCmd',511,1),(413,0,0,'OP_EqDialogOpenCmd',512,1),(414,0,0,'OP_EqDialogCloseCmd',513,1),(415,0,0,'OP_EqFactionUpdateCmd',514,1),(416,0,0,'OP_EqCollectionUpdateCmd',515,1),(417,0,0,'OP_EqCollectionFilterCmd',516,1),(418,0,0,'OP_EqCollectionItemCmd',517,1),(419,0,0,'OP_EqQuestJournalUpdateCmd',518,1),(420,0,0,'OP_EqQuestJournalReplyCmd',520,1),(421,0,0,'OP_EqQuestGroupCmd',521,1),(422,0,0,'OP_EqUpdateMerchantCmd',522,1),(423,0,0,'OP_EqUpdateStoreCmd',523,1),(424,0,0,'OP_EqUpdatePlayerTradeCmd',524,1),(425,0,0,'OP_EqHelpPathCmd',525,1),(426,0,0,'OP_EqHelpPathClearCmd',526,1),(427,0,0,'OP_EqUpdateBankCmd',527,1),(428,0,0,'OP_EqExamineInfoCmd',528,1),(429,0,0,'OP_EqCloseWindowCmd',529,1),(430,0,0,'OP_EqUpdateLootCmd',530,1),(431,0,0,'OP_EqJunctionListCmd',531,1),(432,0,0,'OP_EqShowDeathWindowCmd',532,1),(433,0,0,'OP_EqDisplaySpellFailCmd',533,1),(434,0,0,'OP_EqSpellCastStartCmd',534,1),(435,0,0,'OP_EqSpellCastEndCmd',535,1),(436,0,0,'OP_EqResurrectedCmd',536,1),(437,0,0,'OP_EqChoiceWinCmd',537,1),(438,0,0,'OP_EqSetDefaultVerbCmd',538,1),(439,0,0,'OP_EqInstructionWindowCmd',540,1),(440,0,0,'OP_EqInstructionWindowCloseCmd',541,1),(441,0,0,'OP_EqInstructionWindowGoalCmd',542,1),(442,0,0,'OP_EqInstructionWindowTaskCmd',543,1),(443,0,0,'OP_EqEnableGameEventCmd',544,1),(444,0,0,'OP_EqShowWindowCmd',545,1),(445,0,0,'OP_EqEnableWindowCmd',546,1),(446,0,0,'OP_EqFlashWindowCmd',547,1),(447,0,0,'OP_EqHearPlayFlavorCmd',548,1),(448,0,0,'OP_EqUpdateSignWidgetCmd',550,1),(449,0,0,'OP_EqDebugPVDCmd',551,1),(450,0,0,'OP_EqShowBookCmd',552,1),(451,0,0,'OP_EqQuestionnaireCmd',553,1),(452,0,0,'OP_EqGetProbsCmd',554,1),(453,0,0,'OP_EqHearHealCmd',555,1),(454,0,0,'OP_EqChatChannelUpdateCmd',556,1),(455,0,0,'OP_EqWhoChannelQueryReplyCmd',557,1),(456,0,0,'OP_EqAvailWorldChannelsCmd',558,1),(457,0,0,'OP_EqUpdateTargetCmd',559,1),(458,0,0,'OP_EqConsignmentItemsCmd',561,1),(459,0,0,'OP_EqStartBrokerCmd',563,1),(460,0,0,'OP_EqMapExplorationCmd',564,1),(461,0,0,'OP_EqStoreLogCmd',565,1),(462,0,0,'OP_EqSpellMoveToRangeAndRetryCmd',566,1),(463,0,0,'OP_EqUpdatePlayerMailCmd',567,1),(464,0,0,'OP_EqArenaResultsCmd',568,1),(465,0,0,'OP_EqGuildBankEventActionCmd',569,1),(466,0,0,'OP_EqGuildBankExamineInfoCmd',570,1),(467,0,0,'OP_EqHearSpellNoLandCmd',571,1),(468,0,0,'OP_Lottery',572,1),(469,0,0,'OP_GuildRecruitingMemberInfo',573,1),(470,0,0,'OP_GuildRecruiting',574,1),(471,0,0,'OP_GuildRecruitingDetails',575,1),(472,0,0,'OP_GuildRecruitingImage',576,1),(473,0,0,'OP_PointOfInterest',597,1),(474,0,0,'OP_TraitsList',599,1),(475,0,0,'OP_RecipeList',608,1),(476,0,0,'OP_CharacterAchievements',655,1),(477,0,0,'OP_AddClientToGroupMsg',999,1),(478,0,0,'OP_AddGroupToGroupMsg',999,1),(479,0,0,'OP_GuildKickMsg',999,1),(480,0,0,'OP_PurchaseConsignmentResponseMsg',999,1),(481,0,0,'OP_ProcessScriptMsg',999,1),(482,0,0,'OP_ProcessWorkspaceMsg',999,1),(483,0,0,'OP_QuickbarAddMsg',999,1),(484,0,0,'OP_SkillSlotMapping',999,1),(485,0,0,'OP_MapRequest',999,1),(486,0,0,'OP_BadLanguageFilter',999,1),(487,0,0,'OP_Unknown',10000,1),(488,0,0,'OP_WSWeatherUpdateMsg',10012,1),(489,839,844,'OP_LoginRequestMsg',0,1),(490,839,844,'OP_LoginByNumRequestMsg',1,1),(491,839,844,'OP_WSLoginRequestMsg',2,1),(492,839,844,'OP_ESLoginRequestMsg',3,1),(493,839,844,'OP_LoginReplyMsg',4,1),(494,839,844,'OP_WSStatusReplyMsg',5,1),(495,839,844,'OP_WorldStatusChangeMsg',6,1),(496,839,844,'OP_AllWSDescRequestMsg',7,1),(497,839,844,'OP_WorldListMsg',8,1),(498,839,844,'OP_AllCharactersDescRequestMsg',9,1),(499,839,844,'OP_AllCharactersDescReplyMsg',10,1),(500,839,844,'OP_CreateCharacterRequestMsg',11,1),(501,839,844,'OP_CreateCharacterReplyMsg',12,1),(502,839,844,'OP_WSCreateCharacterRequestMsg',13,1),(503,839,844,'OP_WSCreateCharacterReplyMsg',14,1),(504,839,844,'OP_ReskinCharacterRequestMsg',15,1),(505,839,844,'OP_DeleteCharacterRequestMsg',16,1),(506,839,844,'OP_DeleteCharacterReplyMsg',17,1),(507,839,844,'OP_PlayCharacterRequestMsg',18,1),(508,839,844,'OP_PlayCharacterReplyMsg',19,1),(509,839,844,'OP_ExpectClientAsCharacterReplyMs',22,1),(510,839,844,'OP_ServerPlayCharacterRequestMsg',23,1),(511,839,844,'OP_ServerPlayCharacterReplyMsg',24,1),(512,839,844,'OP_ESInitMsg',25,1),(513,839,844,'OP_ESReadyForClientsMsg',26,1),(514,839,844,'OP_CreateZoneInstanceMsg',27,1),(515,839,844,'OP_ZoneInstanceCreateReplyMsg',28,1),(516,839,844,'OP_ZoneInstanceDestroyedMsg',29,1),(517,839,844,'OP_ExpectClientAsCharacterRequest',30,1),(518,839,844,'OP_ZoneInfoMsg',31,1),(519,839,844,'OP_DoneLoadingZoneResourcesMsg',32,1),(520,839,844,'OP_DoneSendingInitialEntitiesMsg',33,1),(521,839,844,'OP_DoneLoadingEntityResourcesMsg',34,1),(522,839,844,'OP_PredictionUpdateMsg',35,1),(523,839,844,'OP_UpdatePositionMsg',36,1),(524,839,844,'OP_SetRemoteCmdsMsg',37,1),(525,839,844,'OP_RemoteCmdMsg',38,1),(526,839,844,'OP_GameWorldTimeMsg',39,1),(527,839,844,'OP_MOTDMsg',40,1),(528,839,844,'OP_ZoneMOTDMsg',41,1),(529,839,844,'OP_AvatarCreatedMsg',42,1),(530,839,844,'OP_AvatarDestroyedMsg',43,1),(531,839,844,'OP_RequestCampMsg',45,1),(532,839,844,'OP_CampStartedMsg',46,1),(533,839,844,'OP_CampAbortedMsg',47,1),(534,839,844,'OP_WhoQueryRequestMsg',48,1),(535,839,844,'OP_WhoQueryReplyMsg',49,1),(536,839,844,'OP_MonitorReplyMsg',50,1),(537,839,844,'OP_MonitorCharacterListMsg',51,1),(538,839,844,'OP_MonitorCharacterListRequestMsg',52,1),(539,839,844,'OP_ClientCmdMsg',53,1),(540,839,844,'OP_DispatchESMsg',54,1),(541,839,844,'OP_DispatchClientCmdMsg',55,1),(542,839,844,'OP_UpdateTargetMsg',56,1),(543,839,844,'OP_UpdateTargetLocMsg',57,1),(544,839,844,'OP_UpdateCharacterSheetMsg',58,1),(545,839,844,'OP_UpdateSpellBookMsg',59,1),(546,839,844,'OP_UpdateInventoryMsg',61,1),(547,839,844,'OP_UpdateRecipeBookMsg',63,1),(548,839,844,'OP_RequestRecipeDetailsMsg',64,1),(549,839,844,'OP_RecipeDetailsMsg',65,1),(550,839,844,'OP_UpdateSkillBookMsg',66,1),(551,839,844,'OP_UpdateSkillsMsg',67,1),(552,839,844,'OP_UpdateOpportunityMsg',68,1),(553,839,844,'OP_ChangeZoneMsg',70,1),(554,839,844,'OP_ClientTeleportRequestMsg',71,1),(555,839,844,'OP_TeleportWithinZoneMsg',72,1),(556,839,844,'OP_TeleportWithinZoneNoReloadMsg',73,1),(557,839,844,'OP_MigrateClientToZoneRequestMsg',74,1),(558,839,844,'OP_MigrateClientToZoneReplyMsg',75,1),(559,839,844,'OP_ReadyToZoneMsg',76,1),(560,839,844,'OP_RemoveClientFromGroupMsg',77,1),(561,839,844,'OP_RemoveGroupFromGroupMsg',78,1),(562,839,844,'OP_MakeGroupLeaderMsg',79,1),(563,839,844,'OP_GroupCreatedMsg',80,1),(564,839,844,'OP_GroupDestroyedMsg',81,1),(565,839,844,'OP_GroupMemberAddedMsg',82,1),(566,839,844,'OP_GroupMemberRemovedMsg',83,1),(567,839,844,'OP_GroupRemovedFromGroupMsg',84,1),(568,839,844,'OP_GroupLeaderChangedMsg',85,1),(569,839,844,'OP_GroupResendOOZDataMsg',86,1),(570,839,844,'OP_GroupSettingsChangedMsg',87,1),(571,839,844,'OP_OutOfZoneMemberDataMsg',88,1),(572,839,844,'OP_SendLatestRequestMsg',89,1),(573,839,844,'OP_ClearDataMsg',90,1),(574,839,844,'OP_SetSocialMsg',91,1),(575,839,844,'OP_ESStatusMsg',92,1),(576,839,844,'OP_ESZoneInstanceStatusMsg',93,1),(577,839,844,'OP_ZonesStatusRequestMsg',94,1),(578,839,844,'OP_ZonesStatusMsg',95,1),(579,839,844,'OP_ESWeatherRequestMsg',96,1),(580,839,844,'OP_ESWeatherRequestEndMsg',97,1),(581,839,844,'OP_DialogSelectMsg',98,1),(582,839,844,'OP_DialogCloseMsg',99,1),(583,839,844,'OP_RemoveSpellEffectMsg',100,1),(584,839,844,'OP_RemoveConcentrationMsg',101,1),(585,839,844,'OP_QuestJournalOpenMsg',102,1),(586,839,844,'OP_QuestJournalInspectMsg',103,1),(587,839,844,'OP_QuestJournalSetVisibleMsg',104,1),(588,839,844,'OP_QuestJournalWaypointMsg',105,1),(589,839,844,'OP_CreateGuildRequestMsg',108,1),(590,839,844,'OP_CreateGuildReplyMsg',109,1),(591,839,844,'OP_GuildsayMsg',110,1),(592,839,844,'OP_GuildUpdateMsg',111,1),(593,839,844,'OP_DeleteGuildMsg',112,1),(594,839,844,'OP_FellowshipExpMsg',113,1),(595,839,844,'OP_ConsignmentCloseStoreMsg',114,1),(596,839,844,'OP_ConsignItemRequestMsg',115,1),(597,839,844,'OP_ConsignItemResponseMsg',116,1),(598,839,844,'OP_PurchaseConsignmentRequestMsg',117,1),(599,839,844,'OP_HouseDeletedRemotelyMsg',118,1),(600,839,844,'OP_UpdateHouseDataMsg',119,1),(601,839,844,'OP_UpdateHouseAccessDataMsg',120,1),(602,839,844,'OP_PlayerHouseBaseScreenMsg',121,1),(603,839,844,'OP_PlayerHousePurchaseScreenMsg',122,1),(604,839,844,'OP_PlayerHouseAccessUpdateMsg',123,1),(605,839,844,'OP_PlayerHouseDisplayStatusMsg',124,1),(606,839,844,'OP_PlayerHouseCloseUIMsg',125,1),(607,839,844,'OP_BuyPlayerHouseMsg',126,1),(608,839,844,'OP_BuyPlayerHouseTintMsg',127,1),(609,839,844,'OP_CollectAllHouseItemsMsg',128,1),(610,839,844,'OP_RelinquishHouseMsg',129,1),(611,839,844,'OP_EnterHouseMsg',130,1),(612,839,844,'OP_ExitHouseMsg',131,1),(613,839,844,'OP_HouseDefaultAccessSetMsg',132,1),(614,839,844,'OP_HouseAccessSetMsg',133,1),(615,839,844,'OP_HouseAccessRemoveMsg',134,1),(616,839,844,'OP_PayHouseUpkeepMsg',135,1),(617,839,844,'OP_MoveableObjectPlacementCriteri',136,1),(618,839,844,'OP_EnterMoveObjectModeMsg',137,1),(619,839,844,'OP_PositionMoveableObject',138,1),(620,839,844,'OP_CancelMoveObjectModeMsg',139,1),(621,839,844,'OP_ShaderCustomizationMsg',140,1),(622,839,844,'OP_ReplaceableSubMeshesMsg',141,1),(623,839,844,'OP_HouseCustomizationScreenMsg',142,1),(624,839,844,'OP_CustomizationPurchaseRequestMs',143,1),(625,839,844,'OP_CustomizationSetRequestMsg',144,1),(626,839,844,'OP_CustomizationReplyMsg',145,1),(627,839,844,'OP_TintWidgetsMsg',146,1),(628,839,844,'OP_ExamineConsignmentRequestMsg',147,1),(629,839,844,'OP_ExamineConsignmentResponseMsg',148,1),(630,839,844,'OP_UISettingsResponseMsg',149,1),(631,839,844,'OP_UIResetMsg',150,1),(632,839,844,'OP_KeymapLoadMsg',151,1),(633,839,844,'OP_KeymapNoneMsg',152,1),(634,839,844,'OP_KeymapDataMsg',153,1),(635,839,844,'OP_KeymapSaveMsg',154,1),(636,839,844,'OP_DispatchSpellCmdMsg',155,1),(637,839,844,'OP_EntityVerbsRequestMsg',157,1),(638,839,844,'OP_EntityVerbsReplyMsg',158,1),(639,839,844,'OP_EntityVerbsVerbMsg',159,1),(640,839,844,'OP_ChatRelationshipUpdateMsg',161,1),(641,839,844,'OP_LootItemsRequestMsg',162,1),(642,839,844,'OP_StoppedLootingMsg',163,1),(643,839,844,'OP_SitMsg',164,1),(644,839,844,'OP_StandMsg',165,1),(645,839,844,'OP_SatMsg',166,1),(646,839,844,'OP_StoodMsg',167,1),(647,839,844,'OP_ClearForTakeOffMsg',168,1),(648,839,844,'OP_ReadyForTakeOffMsg',169,1),(649,839,844,'OP_ShowIllusionsMsg',170,1),(650,839,844,'OP_HideIllusionsMsg',171,1),(651,839,844,'OP_ExamineItemRequestMsg',172,1),(652,839,844,'OP_ReadBookPageMsg',173,1),(653,839,844,'OP_DefaultGroupOptionsRequestMsg',174,1),(654,839,844,'OP_DefaultGroupOptionsMsg',175,1),(655,839,844,'OP_GroupOptionsMsg',176,1),(656,839,844,'OP_DisplayGroupOptionsScreenMsg',177,1),(657,839,844,'OP_DisplayInnVisitScreenMsg',178,1),(658,839,844,'OP_DumpSchedulerMsg',179,1),(659,839,844,'OP_LSRequestPlayerDescMsg',180,1),(660,839,844,'OP_LSCheckAcctLockMsg',181,1),(661,839,844,'OP_WSAcctLockStatusMsg',182,1),(662,839,844,'OP_RequestHelpRepathMsg',183,1),(663,839,844,'OP_RequestTargetLocMsg',184,1),(664,839,844,'OP_UpdateMotdMsg',185,1),(665,839,844,'OP_PerformPlayerKnockbackMsg',186,1),(666,839,844,'OP_PerformCameraShakeMsg',187,1),(667,839,844,'OP_PopulateSkillMapsMsg',188,1),(668,839,844,'OP_CancelledFeignMsg',190,1),(669,839,844,'OP_SignalMsg',191,1),(670,839,844,'OP_ShowCreateFromRecipeUIMsg',192,1),(671,839,844,'OP_CancelCreateFromRecipeMsg',193,1),(672,839,844,'OP_BeginItemCreationMsg',194,1),(673,839,844,'OP_StopItemCreationMsg',195,1),(674,839,844,'OP_ShowItemCreationProcessUIMsg',196,1),(675,839,844,'OP_UpdateItemCreationProcessUIMsg',197,1),(676,839,844,'OP_DisplayTSEventReactionMsg',198,1),(677,839,844,'OP_ShowRecipeBookMsg',199,1),(678,839,844,'OP_KnowledgebaseRequestMsg',200,1),(679,839,844,'OP_KnowledgebaseResponseMsg',201,1),(680,839,844,'OP_CSTicketHeaderRequestMsg',202,1),(681,839,844,'OP_CSTicketInfoMsg',203,1),(682,839,844,'OP_CSTicketCommentRequestMsg',204,1),(683,839,844,'OP_CSTicketCommentResponseMsg',205,1),(684,839,844,'OP_CSTicketCreateMsg',206,1),(685,839,844,'OP_CSTicketAddCommentMsg',207,1),(686,839,844,'OP_CSTicketDeleteMsg',208,1),(687,839,844,'OP_CSTicketChangeNotificationMsg',209,1),(688,839,844,'OP_WorldDataUpdateMsg',210,1),(689,839,844,'OP_KnownLanguagesMsg',211,1),(690,839,844,'OP_LsRequestClientCrashLogMsg',212,1),(691,839,844,'OP_LsClientBaselogReplyMsg',213,1),(692,839,844,'OP_LsClientCrashlogReplyMsg',214,1),(693,839,844,'OP_LsClientAlertlogReplyMsg',215,1),(694,839,844,'OP_LsClientVerifylogReplyMsg',216,1),(695,839,844,'OP_ClientTeleportToLocationMsg',217,1),(696,839,844,'OP_UpdateClientPredFlagsMsg',218,1),(697,839,844,'OP_ChangeServerControlFlagMsg',219,1),(698,839,844,'OP_CSToolsRequestMsg',220,1),(699,839,844,'OP_CSToolsResponseMsg',221,1),(700,839,844,'OP_AddSocialStructureStandingMsg',222,1),(701,839,844,'OP_CreateBoatTransportsMsg',223,1),(702,839,844,'OP_PositionBoatTransportMsg',224,1),(703,839,844,'OP_MigrateBoatTransportMsg',225,1),(704,839,844,'OP_MigrateBoatTransportReplyMsg',226,1),(705,839,844,'OP_DisplayDebugNLLPointsMsg',227,1),(706,839,844,'OP_ExamineInfoRequestMsg',228,1),(707,839,844,'OP_QuickbarInitMsg',229,1),(708,839,844,'OP_QuickbarUpdateMsg',230,1),(709,839,844,'OP_MacroInitMsg',231,1),(710,839,844,'OP_MacroUpdateMsg',232,1),(711,839,844,'OP_QuestionnaireMsg',233,1),(712,839,844,'OP_LevelChangedMsg',234,1),(713,839,844,'OP_SpellGainedMsg',235,1),(714,839,844,'OP_EncounterBrokenMsg',236,1),(715,839,844,'OP_OnscreenMsgMsg',237,1),(716,839,844,'OP_DisplayWarningMsg',238,1),(717,839,844,'OP_ModifyGuildMsg',239,1),(718,839,844,'OP_GuildEventMsg',240,1),(719,839,844,'OP_GuildEventAddMsg',241,1),(720,839,844,'OP_GuildEventActionMsg',242,1),(721,839,844,'OP_GuildEventListMsg',243,1),(722,839,844,'OP_RequestGuildEventDetailsMsg',244,1),(723,839,844,'OP_GuildEventDetailsMsg',245,1),(724,839,844,'OP_RequestGuildInfoMsg',246,1),(725,839,844,'OP_GuildBankActionMsg',247,1),(726,839,844,'OP_GuildBankActionResponseMsg',248,1),(727,839,844,'OP_GuildBankItemDetailsRequestMsg',249,1),(728,839,844,'OP_GuildBankItemDetailsResponseMs',250,1),(729,839,844,'OP_GuildBankUpdateMsg',251,1),(730,839,844,'OP_GuildBankEventListMsg',252,1),(731,839,844,'OP_RequestGuildBankEventDetailsMs',253,1),(732,839,844,'OP_RewardPackMsg',254,1),(733,839,844,'OP_RenameGuildMsg',255,1),(734,839,844,'OP_ZoneToFriendRequestMsg',257,1),(735,839,844,'OP_ZoneToFriendReplyMsg',258,1),(736,839,844,'OP_ChatCreateChannelMsg',259,1),(737,839,844,'OP_ChatJoinChannelMsg',260,1),(738,839,844,'OP_ChatWhoChannelMsg',261,1),(739,839,844,'OP_ChatLeaveChannelMsg',262,1),(740,839,844,'OP_ChatTellChannelMsg',263,1),(741,839,844,'OP_ChatTellUserMsg',264,1),(742,839,844,'OP_ChatToggleFriendMsg',265,1),(743,839,844,'OP_ChatToggleIgnoreMsg',266,1),(744,839,844,'OP_ChatSendFriendsMsg',267,1),(745,839,844,'OP_ChatSendIgnoresMsg',268,1),(746,839,844,'OP_QuestReward',294,1),(747,839,844,'OP_ChatFiltersMsg',309,1),(748,839,844,'OP_MailGetHeadersMsg',310,1),(749,839,844,'OP_MailGetMessageMsg',311,1),(750,839,844,'OP_MailSendMessageMsg',312,1),(751,839,844,'OP_MailDeleteMessageMsg',313,1),(752,839,844,'OP_MailGetHeadersReplyMsg',314,1),(753,839,844,'OP_MailGetMessageReplyMsg',315,1),(754,839,844,'OP_MailSendMessageReplyMsg',316,1),(755,839,844,'OP_MailCommitSendMessageMsg',317,1),(756,839,844,'OP_MailSendSystemMessageMsg',318,1),(757,839,844,'OP_MailRemoveAttachFromMailMsg',319,1),(758,839,844,'OP_WaypointRequestMsg',321,1),(759,839,844,'OP_WaypointReplyMsg',322,1),(760,839,844,'OP_WaypointSelectMsg',323,1),(761,839,844,'OP_WaypointUpdateMsg',324,1),(762,839,844,'OP_CharNameChangedMsg',325,1),(763,839,844,'OP_ShowZoneTeleporterDestinations',326,1),(764,839,844,'OP_SelectZoneTeleporterDestinatio',327,1),(765,839,844,'OP_ReloadLocalizedTxtMsg',328,1),(766,839,844,'OP_RequestGuildMembershipMsg',329,1),(767,839,844,'OP_GuildMembershipResponseMsg',330,1),(768,839,844,'OP_LeaveGuildNotifyMsg',331,1),(769,839,844,'OP_JoinGuildNotifyMsg',332,1),(770,839,844,'OP_AvatarUpdateMsg',334,1),(771,839,844,'OP_BioUpdateMsg',335,1),(772,839,844,'OP_InspectPlayerMsg',336,1),(773,839,844,'OP_WSServerLockMsg',337,1),(774,839,844,'OP_LSServerLockMsg',338,1),(775,839,844,'OP_WSServerHideMsg',339,1),(776,839,844,'OP_CsCategoryRequestMsg',340,1),(777,839,844,'OP_CsCategoryResponseMsg',341,1),(778,839,844,'OP_KnowledgeWindowSlotMappingMsg',342,1),(779,839,844,'OP_LFGUpdateMsg',343,1),(780,839,844,'OP_AFKUpdateMsg',344,1),(781,839,844,'OP_AnonUpdateMsg',345,1),(782,839,844,'OP_UpdateActivePublicZonesMsg',346,1),(783,839,844,'OP_UnknownNpcMsg',347,1),(784,839,844,'OP_PromoFlagsDetailsMsg',348,1),(785,839,844,'OP_ConsignViewCreateMsg',349,1),(786,839,844,'OP_ConsignViewGetPageMsg',350,1),(787,839,844,'OP_ConsignViewReleaseMsg',351,1),(788,839,844,'OP_ConsignRemoveItemsMsg',352,1),(789,839,844,'OP_UpdateDebugRadiiMsg',353,1),(790,839,844,'OP_SnoopMsg',354,1),(791,839,844,'OP_ReportMsg',355,1),(792,839,844,'OP_UpdateRaidMsg',356,1),(793,839,844,'OP_ConsignViewSortMsg',357,1),(794,839,844,'OP_TitleUpdateMsg',358,1),(795,839,844,'OP_ClientFellMsg',359,1),(796,839,844,'OP_ClientInDeathRegionMsg',360,1),(797,839,844,'OP_CampClientMsg',361,1),(798,839,844,'OP_CSToolAccessResponseMsg',362,1),(799,839,844,'OP_TrackingUpdateMsg',363,1),(800,839,844,'OP_BeginTrackingMsg',364,1),(801,839,844,'OP_StopTrackingMsg',365,1),(802,839,844,'OP_GetAvatarAccessRequestForCSToo',366,1),(803,839,844,'OP_AdvancementRequestMsg',367,1),(804,839,844,'OP_UpdateAvgFrameTimeMsg',368,1),(805,839,844,'OP_MapFogDataInitMsg',369,1),(806,839,844,'OP_MapFogDataUpdateMsg',370,1),(807,839,844,'OP_CloseGroupInviteWindowMsg',371,1),(808,839,844,'OP_UpdateGroupMemberDataMsg',372,1),(809,839,844,'OP_WorldPingMsg',373,1),(810,839,844,'OP_MoveLogUpdateMsg',374,1),(811,839,844,'OP_OfferQuestMsg',375,1),(812,839,844,'OP_WorldShutdownUpdateMsg',376,1),(813,839,844,'OP_DisplayMailScreenMsg',377,1),(814,839,844,'OP_ClientIdleBeginMsg',378,1),(815,839,844,'OP_ClientIdleEndMsg',379,1),(816,839,844,'OP_PurchaseConsignmentLoreCheckRe',380,1),(817,839,844,'OP_NotifyApprenticeStoppedMentori',381,1),(818,839,844,'OP_CorruptedClientMsg',382,1),(819,839,844,'OP_WorldDataChangeMsg',383,1),(820,839,844,'OP_MailEventNotificationMsg',384,1),(821,839,844,'OP_RestartZoneMsg',385,1),(822,839,844,'OP_FlightPathsMsg',386,1),(823,839,844,'OP_CharacterLinkdeadMsg',387,1),(824,839,844,'OP_CharTransferStartRequestMsg',388,1),(825,839,844,'OP_CharTransferStartReplyMsg',389,1),(826,839,844,'OP_CharTransferRequestMsg',390,1),(827,839,844,'OP_CharTransferReplyMsg',391,1),(828,839,844,'OP_CharTransferRollbackRequestMsg',392,1),(829,839,844,'OP_CharTransferCommitRequestMsg',393,1),(830,839,844,'OP_CharTransferRollbackReplyMsg',394,1),(831,839,844,'OP_CharTransferCommitReplyMsg',395,1),(832,839,844,'OP_GetCharacterSerializedRequestM',396,1),(833,839,844,'OP_GetCharacterSerializedReplyMsg',397,1),(834,839,844,'OP_CreateCharFromCBBRequestMsg',398,1),(835,839,844,'OP_CreateCharFromCBBReplyMsg',399,1),(836,839,844,'OP_HousingDataChangedMsg',400,1),(837,839,844,'OP_HousingRestoreMsg',401,1),(838,839,844,'OP_AuctionItem',402,1),(839,839,844,'OP_AuctionItemReply',403,1),(840,839,844,'OP_AuctionCoin',404,1),(841,839,844,'OP_AuctionCoinReply',405,1),(842,839,844,'OP_AuctionCharacter',406,1),(843,839,844,'OP_AuctionCharacterReply',407,1),(844,839,844,'OP_AuctionCommitMsg',408,1),(845,839,844,'OP_AuctionAbortMsg',409,1),(846,839,844,'OP_CharTransferValidateRequestMsg',410,1),(847,839,844,'OP_CharTransferValidateReplyMsg',411,1),(848,839,844,'OP_RaceRestrictionMsg',412,1),(849,839,844,'OP_SetInstanceDisplayNameMsg',413,1),(850,839,844,'OP_GetAuctionAssetIDMsg',414,1),(851,839,844,'OP_GetAuctionAssetIDReplyMsg',415,1),(852,839,844,'OP_ResendWorldChannelsMsg',416,1),(853,839,844,'OP_DisplayExchangeScreenMsg',417,1),(854,839,844,'OP_ArenaGameTypesMsg',418,1),(855,839,844,'OP_AuditAuctionEventMsg',420,1),(856,839,844,'OP_InviteRequestMsg',422,1),(857,839,844,'OP_InviteResponseMsg',423,1),(858,839,844,'OP_InviteTargetResponseMsg',424,1),(859,839,844,'OP_InspectPlayerRequestMsg',425,1),(860,839,844,'OP_DispatchMsg',426,1),(861,839,844,'OP_DisplayEventMsg',427,1),(862,839,844,'OP_PrePossessionMsg',428,1),(863,839,844,'OP_PostPossessionMsg',429,1),(864,839,844,'OP_AdventureList',454,1),(865,839,844,'OP_CancelSpellCast',455,1),(866,839,844,'OP_UpdateTitleCmd',461,1),(867,839,844,'OP_AttackAllowed',467,1),(868,839,844,'OP_AttackNotAllowed',468,1),(869,839,844,'OP_DressingRoom',474,1),(870,839,844,'OP_SkillInfoRequest',478,1),(871,839,844,'OP_SkillInfoResponse',479,1),(872,839,844,'OP_EqHearChatCmd',480,1),(873,839,844,'OP_EqDisplayTextCmd',481,1),(874,839,844,'OP_EqCreateGhostCmd',482,1),(875,839,844,'OP_EqCreateWidgetCmd',483,1),(876,839,844,'OP_EqCreateSignWidgetCmd',484,1),(877,839,844,'OP_EqDestroyGhostCmd',485,1),(878,839,844,'OP_EqUpdateGhostCmd',486,1),(879,839,844,'OP_EqSetControlGhostCmd',487,1),(880,839,844,'OP_EqSetPOVGhostCmd',488,1),(881,839,844,'OP_EqHearCombatCmd',489,1),(882,839,844,'OP_EqHearSpellCastCmd',490,1),(883,839,844,'OP_EqHearSpellInterruptCmd',493,1),(884,839,844,'OP_EqHearSpellFizzleCmd',494,1),(885,839,844,'OP_EqHearConsiderCmd',495,1),(886,839,844,'OP_EqUpdateSubClassesCmd',496,1),(887,839,844,'OP_EqCreateListBoxCmd',497,1),(888,839,844,'OP_EqSetDebugPathPointsCmd',498,1),(889,839,844,'OP_EqCannedEmoteCmd',500,1),(890,839,844,'OP_EqStateCmd',501,1),(891,839,844,'OP_EqPlaySoundCmd',502,1),(892,839,844,'OP_EqPlaySound3DCmd',503,1),(893,839,844,'OP_EqPlayVoiceCmd',504,1),(894,839,844,'OP_EqHearDrowningCmd',505,1),(895,839,844,'OP_EqHearDeathCmd',506,1),(896,839,844,'OP_EqGroupMemberRemovedCmd',507,1),(897,839,844,'OP_EqHearChainEffectCmd',508,1),(898,839,844,'OP_EqReceiveOfferCmd',509,1),(899,839,844,'OP_EqInspectPCResultsCmd',510,1),(900,839,844,'OP_EqDrawablePathGraphCmd',511,1),(901,839,844,'OP_EqDialogOpenCmd',512,1),(902,839,844,'OP_EqDialogCloseCmd',513,1),(903,839,844,'OP_EqFactionUpdateCmd',514,1),(904,839,844,'OP_EqCollectionUpdateCmd',515,1),(905,839,844,'OP_EqCollectionFilterCmd',516,1),(906,839,844,'OP_EqCollectionItemCmd',517,1),(907,839,844,'OP_EqQuestJournalUpdateCmd',518,1),(908,839,844,'OP_EqQuestJournalReplyCmd',520,1),(909,839,844,'OP_EqQuestGroupCmd',521,1),(910,839,844,'OP_EqUpdateMerchantCmd',522,1),(911,839,844,'OP_EqUpdateStoreCmd',523,1),(912,839,844,'OP_EqUpdatePlayerTradeCmd',524,1),(913,839,844,'OP_EqHelpPathCmd',525,1),(914,839,844,'OP_EqHelpPathClearCmd',526,1),(915,839,844,'OP_EqUpdateBankCmd',527,1),(916,839,844,'OP_EqExamineInfoCmd',528,1),(917,839,844,'OP_EqCloseWindowCmd',529,1),(918,839,844,'OP_EqUpdateLootCmd',530,1),(919,839,844,'OP_EqJunctionListCmd',531,1),(920,839,844,'OP_EqShowDeathWindowCmd',532,1),(921,839,844,'OP_EqDisplaySpellFailCmd',533,1),(922,839,844,'OP_EqSpellCastStartCmd',534,1),(923,839,844,'OP_EqSpellCastEndCmd',535,1),(924,839,844,'OP_EqResurrectedCmd',536,1),(925,839,844,'OP_EqChoiceWinCmd',537,1),(926,839,844,'OP_EqSetDefaultVerbCmd',538,1),(927,839,844,'OP_EqInstructionWindowCmd',540,1),(928,839,844,'OP_EqInstructionWindowCloseCmd',541,1),(929,839,844,'OP_EqInstructionWindowGoalCmd',542,1),(930,839,844,'OP_EqInstructionWindowTaskCmd',543,1),(931,839,844,'OP_EqEnableGameEventCmd',544,1),(932,839,844,'OP_EqShowWindowCmd',545,1),(933,839,844,'OP_EqEnableWindowCmd',546,1),(934,839,844,'OP_EqFlashWindowCmd',547,1),(935,839,844,'OP_EqHearPlayFlavorCmd',548,1),(936,839,844,'OP_EqUpdateSignWidgetCmd',550,1),(937,839,844,'OP_EqDebugPVDCmd',551,1),(938,839,844,'OP_EqShowBookCmd',552,1),(939,839,844,'OP_EqQuestionnaireCmd',553,1),(940,839,844,'OP_EqGetProbsCmd',554,1),(941,839,844,'OP_EqHearHealCmd',555,1),(942,839,844,'OP_EqChatChannelUpdateCmd',556,1),(943,839,844,'OP_EqWhoChannelQueryReplyCmd',557,1),(944,839,844,'OP_EqAvailWorldChannelsCmd',558,1),(945,839,844,'OP_EqUpdateTargetCmd',559,1),(946,839,844,'OP_EqConsignmentItemsCmd',561,1),(947,839,844,'OP_EqStartBrokerCmd',563,1),(948,839,844,'OP_EqMapExplorationCmd',564,1),(949,839,844,'OP_EqStoreLogCmd',565,1),(950,839,844,'OP_EqSpellMoveToRangeAndRetryCmd',566,1),(951,839,844,'OP_EqUpdatePlayerMailCmd',567,1),(952,839,844,'OP_EqArenaResultsCmd',568,1),(953,839,844,'OP_EqGuildBankEventActionCmd',569,1),(954,839,844,'OP_EqGuildBankExamineInfoCmd',570,1),(955,839,844,'OP_EqHearSpellNoLandCmd',571,1),(956,839,844,'OP_Lottery',572,1),(957,839,844,'OP_GuildRecruitingMemberInfo',573,1),(958,839,844,'OP_GuildRecruiting',574,1),(959,839,844,'OP_GuildRecruitingDetails',575,1),(960,839,844,'OP_GuildRecruitingImage',576,1),(961,839,844,'OP_PointOfInterest',597,1),(962,839,844,'OP_TraitsList',599,1),(963,839,844,'OP_RecipeList',608,1),(964,839,844,'OP_CharacterAchievements',655,1),(965,839,844,'OP_AddClientToGroupMsg',999,1),(966,839,844,'OP_AddGroupToGroupMsg',999,1),(967,839,844,'OP_GuildKickMsg',999,1),(968,839,844,'OP_PurchaseConsignmentResponseMsg',999,1),(969,839,844,'OP_ProcessScriptMsg',999,1),(970,839,844,'OP_ProcessWorkspaceMsg',999,1),(971,839,844,'OP_QuickbarAddMsg',999,1),(972,839,844,'OP_SkillSlotMapping',999,1),(973,839,844,'OP_MapRequest',999,1),(974,839,844,'OP_BadLanguageFilter',999,1),(975,839,844,'OP_Unknown',10000,1),(976,839,844,'OP_WSWeatherUpdateMsg',10012,1),(977,908,927,'OP_LoginRequestMsg',0,1),(978,908,927,'OP_LoginByNumRequestMsg',1,1),(979,908,927,'OP_WSLoginRequestMsg',2,1),(980,908,927,'OP_ESLoginRequestMsg',3,1),(981,908,927,'OP_LoginReplyMsg',4,1),(982,908,927,'OP_WSStatusReplyMsg',5,1),(983,908,927,'OP_WorldStatusChangeMsg',6,1),(984,908,927,'OP_AllWSDescRequestMsg',7,1),(985,908,927,'OP_WorldListMsg',8,1),(986,908,927,'OP_AllCharactersDescRequestMsg',9,1),(987,908,927,'OP_AllCharactersDescReplyMsg',10,1),(988,908,927,'OP_CreateCharacterRequestMsg',11,1),(989,908,927,'OP_CreateCharacterReplyMsg',12,1),(990,908,927,'OP_WSCreateCharacterRequestMsg',13,1),(991,908,927,'OP_WSCreateCharacterReplyMsg',14,1),(992,908,927,'OP_ReskinCharacterRequestMsg',15,1),(993,908,927,'OP_DeleteCharacterRequestMsg',16,1),(994,908,927,'OP_DeleteCharacterReplyMsg',17,1),(995,908,927,'OP_PlayCharacterRequestMsg',18,1),(996,908,927,'OP_PlayCharacterReplyMsg',19,1),(997,908,927,'OP_ExpectClientAsCharacterReplyMs',22,1),(998,908,927,'OP_ServerPlayCharacterRequestMsg',23,1),(999,908,927,'OP_ServerPlayCharacterReplyMsg',24,1),(1000,908,927,'OP_ESInitMsg',25,1),(1001,908,927,'OP_ESReadyForClientsMsg',26,1),(1002,908,927,'OP_CreateZoneInstanceMsg',27,1),(1003,908,927,'OP_ZoneInstanceCreateReplyMsg',28,1),(1004,908,927,'OP_ZoneInstanceDestroyedMsg',29,1),(1005,908,927,'OP_ExpectClientAsCharacterRequest',30,1),(1006,908,927,'OP_ZoneInfoMsg',31,1),(1007,908,927,'OP_DoneLoadingZoneResourcesMsg',32,1),(1008,908,927,'OP_DoneSendingInitialEntitiesMsg',33,1),(1009,908,927,'OP_DoneLoadingEntityResourcesMsg',34,1),(1010,908,927,'OP_PredictionUpdateMsg',35,1),(1011,908,927,'OP_UpdatePositionMsg',37,1),(1012,908,927,'OP_SetRemoteCmdsMsg',39,1),(1013,908,927,'OP_RemoteCmdMsg',40,1),(1014,908,927,'OP_GameWorldTimeMsg',41,1),(1015,908,927,'OP_MOTDMsg',42,1),(1016,908,927,'OP_ZoneMOTDMsg',43,1),(1017,908,927,'OP_AvatarCreatedMsg',44,1),(1018,908,927,'OP_AvatarDestroyedMsg',45,1),(1019,908,927,'OP_RequestCampMsg',47,1),(1020,908,927,'OP_CampStartedMsg',48,1),(1021,908,927,'OP_CampAbortedMsg',49,1),(1022,908,927,'OP_WhoQueryRequestMsg',50,1),(1023,908,927,'OP_WhoQueryReplyMsg',51,1),(1024,908,927,'OP_MonitorReplyMsg',52,1),(1025,908,927,'OP_MonitorCharacterListMsg',53,1),(1026,908,927,'OP_MonitorCharacterListRequestMsg',54,1),(1027,908,927,'OP_ClientCmdMsg',55,1),(1028,908,927,'OP_DispatchESMsg',56,1),(1029,908,927,'OP_DispatchClientCmdMsg',57,1),(1030,908,927,'OP_UpdateTargetMsg',58,1),(1031,908,927,'OP_UpdateTargetLocMsg',59,1),(1032,908,927,'OP_UpdateCharacterSheetMsg',60,1),(1033,908,927,'OP_UpdateSpellBookMsg',61,1),(1034,908,927,'OP_UpdateInventoryMsg',63,1),(1035,908,927,'OP_UpdateRecipeBookMsg',65,1),(1036,908,927,'OP_RequestRecipeDetailsMsg',66,1),(1037,908,927,'OP_RecipeDetailsMsg',67,1),(1038,908,927,'OP_UpdateSkillBookMsg',68,1),(1039,908,927,'OP_UpdateSkillsMsg',69,1),(1040,908,927,'OP_UpdateOpportunityMsg',70,1),(1041,908,927,'OP_ChangeZoneMsg',72,1),(1042,908,927,'OP_ClientTeleportRequestMsg',73,1),(1043,908,927,'OP_TeleportWithinZoneMsg',74,1),(1044,908,927,'OP_TeleportWithinZoneNoReloadMsg',75,1),(1045,908,927,'OP_MigrateClientToZoneRequestMsg',76,1),(1046,908,927,'OP_MigrateClientToZoneReplyMsg',77,1),(1047,908,927,'OP_ReadyToZoneMsg',78,1),(1048,908,927,'OP_RemoveClientFromGroupMsg',79,1),(1049,908,927,'OP_RemoveGroupFromGroupMsg',80,1),(1050,908,927,'OP_MakeGroupLeaderMsg',81,1),(1051,908,927,'OP_GroupCreatedMsg',82,1),(1052,908,927,'OP_GroupDestroyedMsg',83,1),(1053,908,927,'OP_GroupMemberAddedMsg',84,1),(1054,908,927,'OP_GroupMemberRemovedMsg',85,1),(1055,908,927,'OP_GroupRemovedFromGroupMsg',86,1),(1056,908,927,'OP_GroupLeaderChangedMsg',87,1),(1057,908,927,'OP_GroupResendOOZDataMsg',88,1),(1058,908,927,'OP_GroupSettingsChangedMsg',89,1),(1059,908,927,'OP_OutOfZoneMemberDataMsg',90,1),(1060,908,927,'OP_SendLatestRequestMsg',91,1),(1061,908,927,'OP_ClearDataMsg',92,1),(1062,908,927,'OP_SetSocialMsg',93,1),(1063,908,927,'OP_ESStatusMsg',94,1),(1064,908,927,'OP_ESZoneInstanceStatusMsg',95,1),(1065,908,927,'OP_ZonesStatusRequestMsg',96,1),(1066,908,927,'OP_ZonesStatusMsg',97,1),(1067,908,927,'OP_ESWeatherRequestMsg',98,1),(1068,908,927,'OP_ESWeatherRequestEndMsg',99,1),(1069,908,927,'OP_DialogSelectMsg',102,1),(1070,908,927,'OP_DialogCloseMsg',103,1),(1071,908,927,'OP_RemoveSpellEffectMsg',104,1),(1072,908,927,'OP_RemoveConcentrationMsg',105,1),(1073,908,927,'OP_QuestJournalOpenMsg',106,1),(1074,908,927,'OP_QuestJournalInspectMsg',107,1),(1075,908,927,'OP_QuestJournalSetVisibleMsg',108,1),(1076,908,927,'OP_QuestJournalWaypointMsg',109,1),(1077,908,927,'OP_CreateGuildRequestMsg',110,1),(1078,908,927,'OP_CreateGuildReplyMsg',111,1),(1079,908,927,'OP_GuildsayMsg',112,1),(1080,908,927,'OP_GuildUpdateMsg',115,1),(1081,908,927,'OP_DeleteGuildMsg',116,1),(1082,908,927,'OP_FellowshipExpMsg',117,1),(1083,908,927,'OP_ConsignmentCloseStoreMsg',118,1),(1084,908,927,'OP_ConsignItemRequestMsg',119,1),(1085,908,927,'OP_ConsignItemResponseMsg',120,1),(1086,908,927,'OP_PurchaseConsignmentRequestMsg',121,1),(1087,908,927,'OP_HouseDeletedRemotelyMsg',122,1),(1088,908,927,'OP_UpdateHouseDataMsg',123,1),(1089,908,927,'OP_UpdateHouseAccessDataMsg',124,1),(1090,908,927,'OP_PlayerHouseBaseScreenMsg',125,1),(1091,908,927,'OP_PlayerHousePurchaseScreenMsg',126,1),(1092,908,927,'OP_PlayerHouseAccessUpdateMsg',127,1),(1093,908,927,'OP_PlayerHouseDisplayStatusMsg',128,1),(1094,908,927,'OP_PlayerHouseCloseUIMsg',129,1),(1095,908,927,'OP_BuyPlayerHouseMsg',130,1),(1096,908,927,'OP_BuyPlayerHouseTintMsg',131,1),(1097,908,927,'OP_CollectAllHouseItemsMsg',132,1),(1098,908,927,'OP_RelinquishHouseMsg',133,1),(1099,908,927,'OP_EnterHouseMsg',134,1),(1100,908,927,'OP_ExitHouseMsg',135,1),(1101,908,927,'OP_HouseDefaultAccessSetMsg',136,1),(1102,908,927,'OP_HouseAccessSetMsg',137,1),(1103,908,927,'OP_HouseAccessRemoveMsg',138,1),(1104,908,927,'OP_PayHouseUpkeepMsg',139,1),(1105,908,927,'OP_MoveableObjectPlacementCriteri',141,1),(1106,908,927,'OP_EnterMoveObjectModeMsg',142,1),(1107,908,927,'OP_PositionMoveableObject',143,1),(1108,908,927,'OP_CancelMoveObjectModeMsg',144,1),(1109,908,927,'OP_ShaderCustomizationMsg',145,1),(1110,908,927,'OP_ReplaceableSubMeshesMsg',146,1),(1111,908,927,'OP_HouseCustomizationScreenMsg',147,1),(1112,908,927,'OP_CustomizationPurchaseRequestMs',148,1),(1113,908,927,'OP_CustomizationSetRequestMsg',149,1),(1114,908,927,'OP_CustomizationReplyMsg',150,1),(1115,908,927,'OP_TintWidgetsMsg',151,1),(1116,908,927,'OP_ExamineConsignmentRequestMsg',152,1),(1117,908,927,'OP_ExamineConsignmentResponseMsg',153,1),(1118,908,927,'OP_UISettingsResponseMsg',154,1),(1119,908,927,'OP_UIResetMsg',155,1),(1120,908,927,'OP_KeymapLoadMsg',156,1),(1121,908,927,'OP_KeymapNoneMsg',157,1),(1122,908,927,'OP_KeymapDataMsg',158,1),(1123,908,927,'OP_KeymapSaveMsg',159,1),(1124,908,927,'OP_DispatchSpellCmdMsg',160,1),(1125,908,927,'OP_EntityVerbsRequestMsg',162,1),(1126,908,927,'OP_EntityVerbsReplyMsg',163,1),(1127,908,927,'OP_EntityVerbsVerbMsg',164,1),(1128,908,927,'OP_ChatRelationshipUpdateMsg',166,1),(1129,908,927,'OP_LootItemsRequestMsg',167,1),(1130,908,927,'OP_StoppedLootingMsg',168,1),(1131,908,927,'OP_SitMsg',169,1),(1132,908,927,'OP_StandMsg',170,1),(1133,908,927,'OP_SatMsg',171,1),(1134,908,927,'OP_StoodMsg',172,1),(1135,908,927,'OP_ClearForTakeOffMsg',173,1),(1136,908,927,'OP_ReadyForTakeOffMsg',174,1),(1137,908,927,'OP_ShowIllusionsMsg',175,1),(1138,908,927,'OP_HideIllusionsMsg',176,1),(1139,908,927,'OP_ExamineItemRequestMsg',177,1),(1140,908,927,'OP_ReadBookPageMsg',178,1),(1141,908,927,'OP_DefaultGroupOptionsRequestMsg',179,1),(1142,908,927,'OP_DefaultGroupOptionsMsg',180,1),(1143,908,927,'OP_GroupOptionsMsg',181,1),(1144,908,927,'OP_DisplayGroupOptionsScreenMsg',182,1),(1145,908,927,'OP_DisplayInnVisitScreenMsg',183,1),(1146,908,927,'OP_DumpSchedulerMsg',184,1),(1147,908,927,'OP_LSRequestPlayerDescMsg',185,1),(1148,908,927,'OP_LSCheckAcctLockMsg',186,1),(1149,908,927,'OP_WSAcctLockStatusMsg',187,1),(1150,908,927,'OP_RequestHelpRepathMsg',188,1),(1151,908,927,'OP_RequestTargetLocMsg',189,1),(1152,908,927,'OP_UpdateMotdMsg',190,1),(1153,908,927,'OP_PerformPlayerKnockbackMsg',191,1),(1154,908,927,'OP_PerformCameraShakeMsg',192,1),(1155,908,927,'OP_PopulateSkillMapsMsg',195,1),(1156,908,927,'OP_CancelledFeignMsg',197,1),(1157,908,927,'OP_SignalMsg',198,1),(1158,908,927,'OP_ShowCreateFromRecipeUIMsg',199,1),(1159,908,927,'OP_CancelCreateFromRecipeMsg',200,1),(1160,908,927,'OP_BeginItemCreationMsg',201,1),(1161,908,927,'OP_StopItemCreationMsg',202,1),(1162,908,927,'OP_ShowItemCreationProcessUIMsg',203,1),(1163,908,927,'OP_UpdateItemCreationProcessUIMsg',204,1),(1164,908,927,'OP_DisplayTSEventReactionMsg',205,1),(1165,908,927,'OP_ShowRecipeBookMsg',206,1),(1166,908,927,'OP_KnowledgebaseRequestMsg',207,1),(1167,908,927,'OP_KnowledgebaseResponseMsg',208,1),(1168,908,927,'OP_CSTicketHeaderRequestMsg',209,1),(1169,908,927,'OP_CSTicketInfoMsg',210,1),(1170,908,927,'OP_CSTicketCommentRequestMsg',211,1),(1171,908,927,'OP_CSTicketCommentResponseMsg',212,1),(1172,908,927,'OP_CSTicketCreateMsg',213,1),(1173,908,927,'OP_CSTicketAddCommentMsg',214,1),(1174,908,927,'OP_CSTicketDeleteMsg',215,1),(1175,908,927,'OP_CSTicketChangeNotificationMsg',216,1),(1176,908,927,'OP_WorldDataUpdateMsg',217,1),(1177,908,927,'OP_KnownLanguagesMsg',218,1),(1178,908,927,'OP_LsRequestClientCrashLogMsg',219,1),(1179,908,927,'OP_LsClientBaselogReplyMsg',220,1),(1180,908,927,'OP_LsClientCrashlogReplyMsg',221,1),(1181,908,927,'OP_LsClientAlertlogReplyMsg',222,1),(1182,908,927,'OP_LsClientVerifylogReplyMsg',223,1),(1183,908,927,'OP_ClientTeleportToLocationMsg',224,1),(1184,908,927,'OP_UpdateClientPredFlagsMsg',225,1),(1185,908,927,'OP_ChangeServerControlFlagMsg',226,1),(1186,908,927,'OP_CSToolsRequestMsg',227,1),(1187,908,927,'OP_CSToolsResponseMsg',228,1),(1188,908,927,'OP_AddSocialStructureStandingMsg',229,1),(1189,908,927,'OP_CreateBoatTransportsMsg',230,1),(1190,908,927,'OP_PositionBoatTransportMsg',231,1),(1191,908,927,'OP_MigrateBoatTransportMsg',232,1),(1192,908,927,'OP_MigrateBoatTransportReplyMsg',233,1),(1193,908,927,'OP_DisplayDebugNLLPointsMsg',234,1),(1194,908,927,'OP_ExamineInfoRequestMsg',235,1),(1195,908,927,'OP_QuickbarInitMsg',236,1),(1196,908,927,'OP_QuickbarUpdateMsg',237,1),(1197,908,927,'OP_MacroInitMsg',238,1),(1198,908,927,'OP_MacroUpdateMsg',239,1),(1199,908,927,'OP_QuestionnaireMsg',240,1),(1200,908,927,'OP_LevelChangedMsg',241,1),(1201,908,927,'OP_SpellGainedMsg',242,1),(1202,908,927,'OP_EncounterBrokenMsg',243,1),(1203,908,927,'OP_OnscreenMsgMsg',244,1),(1204,908,927,'OP_DisplayWarningMsg',245,1),(1205,908,927,'OP_ModifyGuildMsg',246,1),(1206,908,927,'OP_GuildEventMsg',247,1),(1207,908,927,'OP_GuildEventAddMsg',248,1),(1208,908,927,'OP_GuildEventActionMsg',249,1),(1209,908,927,'OP_GuildEventListMsg',250,1),(1210,908,927,'OP_RequestGuildEventDetailsMsg',251,1),(1211,908,927,'OP_GuildEventDetailsMsg',252,1),(1212,908,927,'OP_RequestGuildInfoMsg',253,1),(1213,908,927,'OP_GuildBankActionMsg',254,1),(1214,908,927,'OP_GuildBankActionResponseMsg',255,1),(1215,908,927,'OP_GuildBankItemDetailsRequestMsg',256,1),(1216,908,927,'OP_GuildBankItemDetailsResponseMs',257,1),(1217,908,927,'OP_GuildBankUpdateMsg',258,1),(1218,908,927,'OP_GuildBankEventListMsg',259,1),(1219,908,927,'OP_RequestGuildBankEventDetailsMs',260,1),(1220,908,927,'OP_RewardPackMsg',261,1),(1221,908,927,'OP_RenameGuildMsg',262,1),(1222,908,927,'OP_ZoneToFriendRequestMsg',264,1),(1223,908,927,'OP_ZoneToFriendReplyMsg',265,1),(1224,908,927,'OP_ChatCreateChannelMsg',266,1),(1225,908,927,'OP_ChatJoinChannelMsg',267,1),(1226,908,927,'OP_ChatWhoChannelMsg',268,1),(1227,908,927,'OP_ChatLeaveChannelMsg',269,1),(1228,908,927,'OP_ChatTellChannelMsg',270,1),(1229,908,927,'OP_ChatTellUserMsg',271,1),(1230,908,927,'OP_ChatToggleFriendMsg',272,1),(1231,908,927,'OP_ChatToggleIgnoreMsg',273,1),(1232,908,927,'OP_ChatSendFriendsMsg',274,1),(1233,908,927,'OP_ChatSendIgnoresMsg',275,1),(1234,908,927,'OP_QuestReward',302,1),(1235,908,927,'OP_ChatFiltersMsg',317,1),(1236,908,927,'OP_MailGetHeadersMsg',318,1),(1237,908,927,'OP_MailGetMessageMsg',319,1),(1238,908,927,'OP_MailSendMessageMsg',320,1),(1239,908,927,'OP_MailDeleteMessageMsg',321,1),(1240,908,927,'OP_MailGetHeadersReplyMsg',322,1),(1241,908,927,'OP_MailGetMessageReplyMsg',323,1),(1242,908,927,'OP_MailSendMessageReplyMsg',324,1),(1243,908,927,'OP_MailCommitSendMessageMsg',325,1),(1244,908,927,'OP_MailSendSystemMessageMsg',326,1),(1245,908,927,'OP_MailRemoveAttachFromMailMsg',327,1),(1246,908,927,'OP_WaypointRequestMsg',329,1),(1247,908,927,'OP_WaypointReplyMsg',330,1),(1248,908,927,'OP_WaypointSelectMsg',331,1),(1249,908,927,'OP_WaypointUpdateMsg',332,1),(1250,908,927,'OP_CharNameChangedMsg',333,1),(1251,908,927,'OP_ShowZoneTeleporterDestinations',334,1),(1252,908,927,'OP_SelectZoneTeleporterDestinatio',335,1),(1253,908,927,'OP_ReloadLocalizedTxtMsg',336,1),(1254,908,927,'OP_RequestGuildMembershipMsg',337,1),(1255,908,927,'OP_GuildMembershipResponseMsg',338,1),(1256,908,927,'OP_LeaveGuildNotifyMsg',339,1),(1257,908,927,'OP_JoinGuildNotifyMsg',340,1),(1258,908,927,'OP_AvatarUpdateMsg',342,1),(1259,908,927,'OP_BioUpdateMsg',343,1),(1260,908,927,'OP_InspectPlayerMsg',344,1),(1261,908,927,'OP_WSServerLockMsg',345,1),(1262,908,927,'OP_LSServerLockMsg',346,1),(1263,908,927,'OP_WSServerHideMsg',347,1),(1264,908,927,'OP_CsCategoryRequestMsg',348,1),(1265,908,927,'OP_CsCategoryResponseMsg',349,1),(1266,908,927,'OP_KnowledgeWindowSlotMappingMsg',350,1),(1267,908,927,'OP_LFGUpdateMsg',351,1),(1268,908,927,'OP_AFKUpdateMsg',352,1),(1269,908,927,'OP_AnonUpdateMsg',353,1),(1270,908,927,'OP_UpdateActivePublicZonesMsg',354,1),(1271,908,927,'OP_UnknownNpcMsg',355,1),(1272,908,927,'OP_PromoFlagsDetailsMsg',356,1),(1273,908,927,'OP_ConsignViewCreateMsg',357,1),(1274,908,927,'OP_ConsignViewGetPageMsg',358,1),(1275,908,927,'OP_ConsignViewReleaseMsg',359,1),(1276,908,927,'OP_ConsignRemoveItemsMsg',360,1),(1277,908,927,'OP_UpdateDebugRadiiMsg',361,1),(1278,908,927,'OP_SnoopMsg',362,1),(1279,908,927,'OP_ReportMsg',363,1),(1280,908,927,'OP_UpdateRaidMsg',364,1),(1281,908,927,'OP_ConsignViewSortMsg',365,1),(1282,908,927,'OP_TitleUpdateMsg',366,1),(1283,908,927,'OP_ClientFellMsg',367,1),(1284,908,927,'OP_ClientInDeathRegionMsg',368,1),(1285,908,927,'OP_CampClientMsg',369,1),(1286,908,927,'OP_CSToolAccessResponseMsg',370,1),(1287,908,927,'OP_TrackingUpdateMsg',371,1),(1288,908,927,'OP_BeginTrackingMsg',372,1),(1289,908,927,'OP_StopTrackingMsg',373,1),(1290,908,927,'OP_GetAvatarAccessRequestForCSToo',374,1),(1291,908,927,'OP_AdvancementRequestMsg',375,1),(1292,908,927,'OP_UpdateAvgFrameTimeMsg',376,1),(1293,908,927,'OP_MapFogDataInitMsg',377,1),(1294,908,927,'OP_MapFogDataUpdateMsg',378,1),(1295,908,927,'OP_CloseGroupInviteWindowMsg',379,1),(1296,908,927,'OP_UpdateGroupMemberDataMsg',380,1),(1297,908,927,'OP_WorldPingMsg',381,1),(1298,908,927,'OP_MoveLogUpdateMsg',382,1),(1299,908,927,'OP_OfferQuestMsg',383,1),(1300,908,927,'OP_WorldShutdownUpdateMsg',384,1),(1301,908,927,'OP_DisplayMailScreenMsg',385,1),(1302,908,927,'OP_ClientIdleBeginMsg',386,1),(1303,908,927,'OP_ClientIdleEndMsg',387,1),(1304,908,927,'OP_PurchaseConsignmentLoreCheckRe',388,1),(1305,908,927,'OP_NotifyApprenticeStoppedMentori',389,1),(1306,908,927,'OP_CorruptedClientMsg',390,1),(1307,908,927,'OP_WorldDataChangeMsg',391,1),(1308,908,927,'OP_MailEventNotificationMsg',392,1),(1309,908,927,'OP_RestartZoneMsg',393,1),(1310,908,927,'OP_FlightPathsMsg',394,1),(1311,908,927,'OP_CharacterLinkdeadMsg',395,1),(1312,908,927,'OP_CharTransferStartRequestMsg',396,1),(1313,908,927,'OP_CharTransferStartReplyMsg',397,1),(1314,908,927,'OP_CharTransferRequestMsg',398,1),(1315,908,927,'OP_CharTransferReplyMsg',399,1),(1316,908,927,'OP_CharTransferRollbackRequestMsg',400,1),(1317,908,927,'OP_CharTransferCommitRequestMsg',401,1),(1318,908,927,'OP_CharTransferRollbackReplyMsg',402,1),(1319,908,927,'OP_CharTransferCommitReplyMsg',403,1),(1320,908,927,'OP_GetCharacterSerializedRequestM',404,1),(1321,908,927,'OP_GetCharacterSerializedReplyMsg',405,1),(1322,908,927,'OP_CreateCharFromCBBRequestMsg',406,1),(1323,908,927,'OP_CreateCharFromCBBReplyMsg',407,1),(1324,908,927,'OP_HousingDataChangedMsg',408,1),(1325,908,927,'OP_HousingRestoreMsg',409,1),(1326,908,927,'OP_AuctionItem',410,1),(1327,908,927,'OP_AuctionItemReply',411,1),(1328,908,927,'OP_AuctionCoin',412,1),(1329,908,927,'OP_AuctionCoinReply',413,1),(1330,908,927,'OP_AuctionCharacter',414,1),(1331,908,927,'OP_AuctionCharacterReply',415,1),(1332,908,927,'OP_AuctionCommitMsg',416,1),(1333,908,927,'OP_AuctionAbortMsg',417,1),(1334,908,927,'OP_CharTransferValidateRequestMsg',418,1),(1335,908,927,'OP_CharTransferValidateReplyMsg',419,1),(1336,908,927,'OP_RaceRestrictionMsg',420,1),(1337,908,927,'OP_SetInstanceDisplayNameMsg',421,1),(1338,908,927,'OP_GetAuctionAssetIDMsg',422,1),(1339,908,927,'OP_GetAuctionAssetIDReplyMsg',423,1),(1340,908,927,'OP_ResendWorldChannelsMsg',424,1),(1341,908,927,'OP_DisplayExchangeScreenMsg',425,1),(1342,908,927,'OP_ArenaGameTypesMsg',426,1),(1343,908,927,'OP_AuditAuctionEventMsg',428,1),(1344,908,927,'OP_InviteRequestMsg',430,1),(1345,908,927,'OP_InviteResponseMsg',431,1),(1346,908,927,'OP_InviteTargetResponseMsg',432,1),(1347,908,927,'OP_InspectPlayerRequestMsg',433,1),(1348,908,927,'OP_DispatchMsg',434,1),(1349,908,927,'OP_DisplayEventMsg',435,1),(1350,908,927,'OP_PrePossessionMsg',436,1),(1351,908,927,'OP_PostPossessionMsg',437,1),(1352,908,927,'OP_AdventureList',462,1),(1353,908,927,'OP_CancelSpellCast',463,1),(1354,908,927,'OP_UpdateTitleCmd',469,1),(1355,908,927,'OP_AttackAllowed',475,1),(1356,908,927,'OP_AttackNotAllowed',476,1),(1357,908,927,'OP_DressingRoom',482,1),(1358,908,927,'OP_SkillInfoRequest',486,1),(1359,908,927,'OP_SkillInfoResponse',487,1),(1360,908,927,'OP_BadLanguageFilter',490,1),(1361,908,927,'OP_MapRequest',492,1),(1362,908,927,'OP_EqUnknown',493,1),(1363,908,927,'OP_EqHearChatCmd',494,1),(1364,908,927,'OP_EqDisplayTextCmd',495,1),(1365,908,927,'OP_EqCreateGhostCmd',496,1),(1366,908,927,'OP_EqCreateWidgetCmd',497,1),(1367,908,927,'OP_EqCreateSignWidgetCmd',498,1),(1368,908,927,'OP_EqDestroyGhostCmd',499,1),(1369,908,927,'OP_EqUpdateGhostCmd',500,1),(1370,908,927,'OP_EqSetControlGhostCmd',501,1),(1371,908,927,'OP_EqSetPOVGhostCmd',502,1),(1372,908,927,'OP_EqHearCombatCmd',503,1),(1373,908,927,'OP_EqHearSpellCastCmd',504,1),(1374,908,927,'OP_EqHearSpellInterruptCmd',507,1),(1375,908,927,'OP_EqHearSpellFizzleCmd',508,1),(1376,908,927,'OP_EqHearConsiderCmd',509,1),(1377,908,927,'OP_EqUpdateSubClassesCmd',510,1),(1378,908,927,'OP_EqCreateListBoxCmd',511,1),(1379,908,927,'OP_EqSetDebugPathPointsCmd',512,1),(1380,908,927,'OP_EqCannedEmoteCmd',514,1),(1381,908,927,'OP_EqStateCmd',515,1),(1382,908,927,'OP_EqPlaySoundCmd',516,1),(1383,908,927,'OP_EqPlaySound3DCmd',517,1),(1384,908,927,'OP_EqPlayVoiceCmd',518,1),(1385,908,927,'OP_EqHearDrowningCmd',519,1),(1386,908,927,'OP_EqHearDeathCmd',520,1),(1387,908,927,'OP_EqGroupMemberRemovedCmd',521,1),(1388,908,927,'OP_EqHearChainEffectCmd',522,1),(1389,908,927,'OP_EqReceiveOfferCmd',523,1),(1390,908,927,'OP_EqInspectPCResultsCmd',524,1),(1391,908,927,'OP_EqDrawablePathGraphCmd',525,1),(1392,908,927,'OP_EqDialogOpenCmd',526,1),(1393,908,927,'OP_EqDialogCloseCmd',527,1),(1394,908,927,'OP_EqFactionUpdateCmd',528,1),(1395,908,927,'OP_EqCollectionUpdateCmd',529,1),(1396,908,927,'OP_EqCollectionFilterCmd',530,1),(1397,908,927,'OP_EqCollectionItemCmd',531,1),(1398,908,927,'OP_EqQuestJournalUpdateCmd',532,1),(1399,908,927,'OP_EqQuestJournalReplyCmd',534,1),(1400,908,927,'OP_EqQuestGroupCmd',535,1),(1401,908,927,'OP_EqUpdateMerchantCmd',536,1),(1402,908,927,'OP_EqUpdateStoreCmd',537,1),(1403,908,927,'OP_EqUpdatePlayerTradeCmd',538,1),(1404,908,927,'OP_EqHelpPathCmd',539,1),(1405,908,927,'OP_EqHelpPathClearCmd',540,1),(1406,908,927,'OP_EqUpdateBankCmd',541,1),(1407,908,927,'OP_EqExamineInfoCmd',542,1),(1408,908,927,'OP_EqCloseWindowCmd',543,1),(1409,908,927,'OP_EqUpdateLootCmd',544,1),(1410,908,927,'OP_EqJunctionListCmd',545,1),(1411,908,927,'OP_EqShowDeathWindowCmd',546,1),(1412,908,927,'OP_EqDisplaySpellFailCmd',547,1),(1413,908,927,'OP_EqSpellCastStartCmd',548,1),(1414,908,927,'OP_EqSpellCastEndCmd',549,1),(1415,908,927,'OP_EqResurrectedCmd',550,1),(1416,908,927,'OP_EqChoiceWinCmd',551,1),(1417,908,927,'OP_EqSetDefaultVerbCmd',552,1),(1418,908,927,'OP_EqInstructionWindowCmd',554,1),(1419,908,927,'OP_EqInstructionWindowCloseCmd',555,1),(1420,908,927,'OP_EqInstructionWindowGoalCmd',556,1),(1421,908,927,'OP_EqInstructionWindowTaskCmd',557,1),(1422,908,927,'OP_EqEnableGameEventCmd',558,1),(1423,908,927,'OP_EqShowWindowCmd',559,1),(1424,908,927,'OP_EqEnableWindowCmd',560,1),(1425,908,927,'OP_EqFlashWindowCmd',561,1),(1426,908,927,'OP_EqHearPlayFlavorCmd',562,1),(1427,908,927,'OP_EqUpdateSignWidgetCmd',564,1),(1428,908,927,'OP_EqDebugPVDCmd',565,1),(1429,908,927,'OP_EqShowBookCmd',566,1),(1430,908,927,'OP_EqQuestionnaireCmd',567,1),(1431,908,927,'OP_EqGetProbsCmd',568,1),(1432,908,927,'OP_EqHearHealCmd',569,1),(1433,908,927,'OP_EqChatChannelUpdateCmd',570,1),(1434,908,927,'OP_EqWhoChannelQueryReplyCmd',571,1),(1435,908,927,'OP_EqAvailWorldChannelsCmd',572,1),(1436,908,927,'OP_EqUpdateTargetCmd',573,1),(1437,908,927,'OP_EqConsignmentItemsCmd',575,1),(1438,908,927,'OP_EqStartBrokerCmd',577,1),(1439,908,927,'OP_EqMapExplorationCmd',578,1),(1440,908,927,'OP_EqStoreLogCmd',579,1),(1441,908,927,'OP_EqSpellMoveToRangeAndRetryCmd',580,1),(1442,908,927,'OP_EqUpdatePlayerMailCmd',581,1),(1443,908,927,'OP_EqArenaResultsCmd',582,1),(1444,908,927,'OP_EqGuildBankEventActionCmd',583,1),(1445,908,927,'OP_EqGuildBankExamineInfoCmd',584,1),(1446,908,927,'OP_EqHearSpellNoLandCmd',585,1),(1447,908,927,'OP_Lottery',589,1),(1448,908,927,'OP_GuildRecruitingMemberInfo',590,1),(1449,908,927,'OP_GuildRecruiting',591,1),(1450,908,927,'OP_GuildRecruitingDetails',592,1),(1451,908,927,'OP_GuildRecruitingImage',593,1),(1452,908,927,'OP_PointOfInterest',614,1),(1453,908,927,'OP_TraitsList',616,1),(1454,908,927,'OP_RecipeList',625,1),(1455,908,927,'OP_CharacterAchievements',655,1),(1456,908,927,'OP_AddClientToGroupMsg',1010,1),(1457,908,927,'OP_AddGroupToGroupMsg',1010,1),(1458,908,927,'OP_GuildKickMsg',1010,1),(1459,908,927,'OP_ProcessScriptMsg',1010,1),(1460,908,927,'OP_ProcessWorkspaceMsg',1010,1),(1461,908,927,'OP_PurchaseConsignmentResponseMsg',1010,1),(1462,908,927,'OP_QuickbarAddMsg',1010,1),(1463,908,927,'OP_SkillSlotMapping',1010,1),(1464,908,927,'OP_Unknown',10014,1),(1465,908,927,'OP_WSWeatherUpdateMsg',10015,1),(1466,1008,1011,'OP_LoginRequestMsg',0,1),(1467,1008,1011,'OP_LoginByNumRequestMsg',1,1),(1468,1008,1011,'OP_WSLoginRequestMsg',2,1),(1469,1008,1011,'OP_ESLoginRequestMsg',3,1),(1470,1008,1011,'OP_LoginReplyMsg',4,1),(1471,1008,1011,'OP_WSStatusReplyMsg',5,1),(1472,1008,1011,'OP_WorldStatusChangeMsg',6,1),(1473,1008,1011,'OP_AllWSDescRequestMsg',7,1),(1474,1008,1011,'OP_WorldListMsg',8,1),(1475,1008,1011,'OP_AllCharactersDescRequestMsg',9,1),(1476,1008,1011,'OP_AllCharactersDescReplyMsg',10,1),(1477,1008,1011,'OP_CreateCharacterRequestMsg',11,1),(1478,1008,1011,'OP_CreateCharacterReplyMsg',12,1),(1479,1008,1011,'OP_WSCreateCharacterRequestMsg',13,1),(1480,1008,1011,'OP_WSCreateCharacterReplyMsg',14,1),(1481,1008,1011,'OP_ReskinCharacterRequestMsg',15,1),(1482,1008,1011,'OP_DeleteCharacterRequestMsg',16,1),(1483,1008,1011,'OP_DeleteCharacterReplyMsg',17,1),(1484,1008,1011,'OP_PlayCharacterRequestMsg',18,1),(1485,1008,1011,'OP_PlayCharacterReplyMsg',19,1),(1486,1008,1011,'OP_ExpectClientAsCharacterReplyMs',22,1),(1487,1008,1011,'OP_ServerPlayCharacterRequestMsg',23,1),(1488,1008,1011,'OP_ServerPlayCharacterReplyMsg',24,1),(1489,1008,1011,'OP_ESInitMsg',25,1),(1490,1008,1011,'OP_ESReadyForClientsMsg',26,1),(1491,1008,1011,'OP_CreateZoneInstanceMsg',27,1),(1492,1008,1011,'OP_ZoneInstanceCreateReplyMsg',28,1),(1493,1008,1011,'OP_ZoneInstanceDestroyedMsg',29,1),(1494,1008,1011,'OP_ExpectClientAsCharacterRequest',30,1),(1495,1008,1011,'OP_ZoneInfoMsg',31,1),(1496,1008,1011,'OP_DoneLoadingZoneResourcesMsg',32,1),(1497,1008,1011,'OP_DoneSendingInitialEntitiesMsg',33,1),(1498,1008,1011,'OP_DoneLoadingEntityResourcesMsg',34,1),(1499,1008,1011,'OP_PredictionUpdateMsg',35,1),(1500,1008,1011,'OP_UpdatePositionMsg',37,1),(1501,1008,1011,'OP_SetRemoteCmdsMsg',39,1),(1502,1008,1011,'OP_RemoteCmdMsg',40,1),(1503,1008,1011,'OP_GameWorldTimeMsg',41,1),(1504,1008,1011,'OP_MOTDMsg',42,1),(1505,1008,1011,'OP_ZoneMOTDMsg',43,1),(1506,1008,1011,'OP_AvatarCreatedMsg',44,1),(1507,1008,1011,'OP_AvatarDestroyedMsg',45,1),(1508,1008,1011,'OP_RequestCampMsg',47,1),(1509,1008,1011,'OP_CampStartedMsg',48,1),(1510,1008,1011,'OP_CampAbortedMsg',49,1),(1511,1008,1011,'OP_WhoQueryRequestMsg',50,1),(1512,1008,1011,'OP_WhoQueryReplyMsg',51,1),(1513,1008,1011,'OP_MonitorReplyMsg',52,1),(1514,1008,1011,'OP_MonitorCharacterListMsg',53,1),(1515,1008,1011,'OP_MonitorCharacterListRequestMsg',54,1),(1516,1008,1011,'OP_ClientCmdMsg',55,1),(1517,1008,1011,'OP_DispatchESMsg',56,1),(1518,1008,1011,'OP_DispatchClientCmdMsg',57,1),(1519,1008,1011,'OP_UpdateTargetMsg',58,1),(1520,1008,1011,'OP_UpdateTargetLocMsg',59,1),(1521,1008,1011,'OP_UpdateCharacterSheetMsg',60,1),(1522,1008,1011,'OP_UpdateSpellBookMsg',61,1),(1523,1008,1011,'OP_UpdateInventoryMsg',63,1),(1524,1008,1011,'OP_UpdateRecipeBookMsg',65,1),(1525,1008,1011,'OP_RequestRecipeDetailsMsg',66,1),(1526,1008,1011,'OP_RecipeDetailsMsg',67,1),(1527,1008,1011,'OP_UpdateSkillBookMsg',68,1),(1528,1008,1011,'OP_UpdateSkillsMsg',69,1),(1529,1008,1011,'OP_UpdateOpportunityMsg',70,1),(1530,1008,1011,'OP_ChangeZoneMsg',72,1),(1531,1008,1011,'OP_ClientTeleportRequestMsg',73,1),(1532,1008,1011,'OP_TeleportWithinZoneMsg',74,1),(1533,1008,1011,'OP_TeleportWithinZoneNoReloadMsg',75,1),(1534,1008,1011,'OP_MigrateClientToZoneRequestMsg',76,1),(1535,1008,1011,'OP_MigrateClientToZoneReplyMsg',77,1),(1536,1008,1011,'OP_ReadyToZoneMsg',78,1),(1537,1008,1011,'OP_RemoveClientFromGroupMsg',79,1),(1538,1008,1011,'OP_RemoveGroupFromGroupMsg',80,1),(1539,1008,1011,'OP_MakeGroupLeaderMsg',81,1),(1540,1008,1011,'OP_GroupCreatedMsg',82,1),(1541,1008,1011,'OP_GroupDestroyedMsg',83,1),(1542,1008,1011,'OP_GroupMemberAddedMsg',84,1),(1543,1008,1011,'OP_GroupMemberRemovedMsg',85,1),(1544,1008,1011,'OP_GroupRemovedFromGroupMsg',86,1),(1545,1008,1011,'OP_GroupLeaderChangedMsg',87,1),(1546,1008,1011,'OP_GroupResendOOZDataMsg',88,1),(1547,1008,1011,'OP_GroupSettingsChangedMsg',89,1),(1548,1008,1011,'OP_OutOfZoneMemberDataMsg',90,1),(1549,1008,1011,'OP_SendLatestRequestMsg',91,1),(1550,1008,1011,'OP_ClearDataMsg',92,1),(1551,1008,1011,'OP_SetSocialMsg',93,1),(1552,1008,1011,'OP_ESStatusMsg',94,1),(1553,1008,1011,'OP_ESZoneInstanceStatusMsg',95,1),(1554,1008,1011,'OP_ZonesStatusRequestMsg',96,1),(1555,1008,1011,'OP_ZonesStatusMsg',97,1),(1556,1008,1011,'OP_ESWeatherRequestMsg',98,1),(1557,1008,1011,'OP_ESWeatherRequestEndMsg',99,1),(1558,1008,1011,'OP_DialogSelectMsg',102,1),(1559,1008,1011,'OP_DialogCloseMsg',103,1),(1560,1008,1011,'OP_RemoveSpellEffectMsg',104,1),(1561,1008,1011,'OP_RemoveConcentrationMsg',105,1),(1562,1008,1011,'OP_QuestJournalOpenMsg',106,1),(1563,1008,1011,'OP_QuestJournalInspectMsg',107,1),(1564,1008,1011,'OP_QuestJournalSetVisibleMsg',108,1),(1565,1008,1011,'OP_QuestJournalWaypointMsg',109,1),(1566,1008,1011,'OP_CreateGuildRequestMsg',110,1),(1567,1008,1011,'OP_CreateGuildReplyMsg',111,1),(1568,1008,1011,'OP_GuildsayMsg',112,1),(1569,1008,1011,'OP_GuildUpdateMsg',115,1),(1570,1008,1011,'OP_DeleteGuildMsg',116,1),(1571,1008,1011,'OP_FellowshipExpMsg',117,1),(1572,1008,1011,'OP_ConsignmentCloseStoreMsg',118,1),(1573,1008,1011,'OP_ConsignItemRequestMsg',119,1),(1574,1008,1011,'OP_ConsignItemResponseMsg',120,1),(1575,1008,1011,'OP_PurchaseConsignmentRequestMsg',121,1),(1576,1008,1011,'OP_HouseDeletedRemotelyMsg',122,1),(1577,1008,1011,'OP_UpdateHouseDataMsg',123,1),(1578,1008,1011,'OP_UpdateHouseAccessDataMsg',124,1),(1579,1008,1011,'OP_PlayerHouseBaseScreenMsg',125,1),(1580,1008,1011,'OP_PlayerHousePurchaseScreenMsg',126,1),(1581,1008,1011,'OP_PlayerHouseAccessUpdateMsg',127,1),(1582,1008,1011,'OP_PlayerHouseDisplayStatusMsg',128,1),(1583,1008,1011,'OP_PlayerHouseCloseUIMsg',129,1),(1584,1008,1011,'OP_BuyPlayerHouseMsg',130,1),(1585,1008,1011,'OP_BuyPlayerHouseTintMsg',131,1),(1586,1008,1011,'OP_CollectAllHouseItemsMsg',132,1),(1587,1008,1011,'OP_RelinquishHouseMsg',133,1),(1588,1008,1011,'OP_EnterHouseMsg',134,1),(1589,1008,1011,'OP_ExitHouseMsg',135,1),(1590,1008,1011,'OP_HouseDefaultAccessSetMsg',136,1),(1591,1008,1011,'OP_HouseAccessSetMsg',137,1),(1592,1008,1011,'OP_HouseAccessRemoveMsg',138,1),(1593,1008,1011,'OP_PayHouseUpkeepMsg',139,1),(1594,1008,1011,'OP_MoveableObjectPlacementCriteri',141,1),(1595,1008,1011,'OP_EnterMoveObjectModeMsg',142,1),(1596,1008,1011,'OP_PositionMoveableObject',143,1),(1597,1008,1011,'OP_CancelMoveObjectModeMsg',144,1),(1598,1008,1011,'OP_ShaderCustomizationMsg',145,1),(1599,1008,1011,'OP_ReplaceableSubMeshesMsg',146,1),(1600,1008,1011,'OP_HouseCustomizationScreenMsg',147,1),(1601,1008,1011,'OP_CustomizationPurchaseRequestMs',148,1),(1602,1008,1011,'OP_CustomizationSetRequestMsg',149,1),(1603,1008,1011,'OP_CustomizationReplyMsg',150,1),(1604,1008,1011,'OP_TintWidgetsMsg',151,1),(1605,1008,1011,'OP_ExamineConsignmentRequestMsg',152,1),(1606,1008,1011,'OP_ExamineConsignmentResponseMsg',153,1),(1607,1008,1011,'OP_UISettingsResponseMsg',154,1),(1608,1008,1011,'OP_UIResetMsg',156,1),(1609,1008,1011,'OP_KeymapLoadMsg',157,1),(1610,1008,1011,'OP_KeymapNoneMsg',158,1),(1611,1008,1011,'OP_KeymapDataMsg',159,1),(1612,1008,1011,'OP_KeymapSaveMsg',160,1),(1613,1008,1011,'OP_DispatchSpellCmdMsg',161,1),(1614,1008,1011,'OP_EntityVerbsRequestMsg',163,1),(1615,1008,1011,'OP_EntityVerbsReplyMsg',164,1),(1616,1008,1011,'OP_EntityVerbsVerbMsg',165,1),(1617,1008,1011,'OP_ChatRelationshipUpdateMsg',167,1),(1618,1008,1011,'OP_LootItemsRequestMsg',168,1),(1619,1008,1011,'OP_StoppedLootingMsg',169,1),(1620,1008,1011,'OP_SitMsg',170,1),(1621,1008,1011,'OP_StandMsg',171,1),(1622,1008,1011,'OP_SatMsg',172,1),(1623,1008,1011,'OP_StoodMsg',173,1),(1624,1008,1011,'OP_ClearForTakeOffMsg',174,1),(1625,1008,1011,'OP_ReadyForTakeOffMsg',175,1),(1626,1008,1011,'OP_ShowIllusionsMsg',176,1),(1627,1008,1011,'OP_HideIllusionsMsg',177,1),(1628,1008,1011,'OP_ExamineItemRequestMsg',178,1),(1629,1008,1011,'OP_ReadBookPageMsg',179,1),(1630,1008,1011,'OP_DefaultGroupOptionsRequestMsg',180,1),(1631,1008,1011,'OP_DefaultGroupOptionsMsg',181,1),(1632,1008,1011,'OP_GroupOptionsMsg',182,1),(1633,1008,1011,'OP_DisplayGroupOptionsScreenMsg',183,1),(1634,1008,1011,'OP_DisplayInnVisitScreenMsg',184,1),(1635,1008,1011,'OP_DumpSchedulerMsg',185,1),(1636,1008,1011,'OP_LSRequestPlayerDescMsg',186,1),(1637,1008,1011,'OP_LSCheckAcctLockMsg',187,1),(1638,1008,1011,'OP_WSAcctLockStatusMsg',188,1),(1639,1008,1011,'OP_RequestHelpRepathMsg',189,1),(1640,1008,1011,'OP_RequestTargetLocMsg',190,1),(1641,1008,1011,'OP_UpdateMotdMsg',191,1),(1642,1008,1011,'OP_PerformPlayerKnockbackMsg',192,1),(1643,1008,1011,'OP_PerformCameraShakeMsg',193,1),(1644,1008,1011,'OP_PopulateSkillMapsMsg',196,1),(1645,1008,1011,'OP_CancelledFeignMsg',198,1),(1646,1008,1011,'OP_SignalMsg',199,1),(1647,1008,1011,'OP_ShowCreateFromRecipeUIMsg',200,1),(1648,1008,1011,'OP_CancelCreateFromRecipeMsg',201,1),(1649,1008,1011,'OP_BeginItemCreationMsg',202,1),(1650,1008,1011,'OP_StopItemCreationMsg',203,1),(1651,1008,1011,'OP_ShowItemCreationProcessUIMsg',204,1),(1652,1008,1011,'OP_UpdateItemCreationProcessUIMsg',205,1),(1653,1008,1011,'OP_DisplayTSEventReactionMsg',206,1),(1654,1008,1011,'OP_ShowRecipeBookMsg',207,1),(1655,1008,1011,'OP_KnowledgebaseRequestMsg',208,1),(1656,1008,1011,'OP_KnowledgebaseResponseMsg',209,1),(1657,1008,1011,'OP_CSTicketHeaderRequestMsg',210,1),(1658,1008,1011,'OP_CSTicketInfoMsg',211,1),(1659,1008,1011,'OP_CSTicketCommentRequestMsg',212,1),(1660,1008,1011,'OP_CSTicketCommentResponseMsg',213,1),(1661,1008,1011,'OP_CSTicketCreateMsg',214,1),(1662,1008,1011,'OP_CSTicketAddCommentMsg',215,1),(1663,1008,1011,'OP_CSTicketDeleteMsg',216,1),(1664,1008,1011,'OP_CSTicketChangeNotificationMsg',217,1),(1665,1008,1011,'OP_WorldDataUpdateMsg',218,1),(1666,1008,1011,'OP_KnownLanguagesMsg',219,1),(1667,1008,1011,'OP_LsRequestClientCrashLogMsg',220,1),(1668,1008,1011,'OP_LsClientBaselogReplyMsg',221,1),(1669,1008,1011,'OP_LsClientCrashlogReplyMsg',222,1),(1670,1008,1011,'OP_LsClientAlertlogReplyMsg',223,1),(1671,1008,1011,'OP_LsClientVerifylogReplyMsg',224,1),(1672,1008,1011,'OP_ClientTeleportToLocationMsg',225,1),(1673,1008,1011,'OP_UpdateClientPredFlagsMsg',226,1),(1674,1008,1011,'OP_ChangeServerControlFlagMsg',227,1),(1675,1008,1011,'OP_CSToolsRequestMsg',228,1),(1676,1008,1011,'OP_CSToolsResponseMsg',229,1),(1677,1008,1011,'OP_AddSocialStructureStandingMsg',230,1),(1678,1008,1011,'OP_CreateBoatTransportsMsg',231,1),(1679,1008,1011,'OP_PositionBoatTransportMsg',232,1),(1680,1008,1011,'OP_MigrateBoatTransportMsg',233,1),(1681,1008,1011,'OP_MigrateBoatTransportReplyMsg',234,1),(1682,1008,1011,'OP_DisplayDebugNLLPointsMsg',235,1),(1683,1008,1011,'OP_ExamineInfoRequestMsg',236,1),(1684,1008,1011,'OP_QuickbarInitMsg',237,1),(1685,1008,1011,'OP_QuickbarUpdateMsg',238,1),(1686,1008,1011,'OP_MacroInitMsg',239,1),(1687,1008,1011,'OP_MacroUpdateMsg',240,1),(1688,1008,1011,'OP_QuestionnaireMsg',241,1),(1689,1008,1011,'OP_LevelChangedMsg',242,1),(1690,1008,1011,'OP_SpellGainedMsg',243,1),(1691,1008,1011,'OP_EncounterBrokenMsg',244,1),(1692,1008,1011,'OP_OnscreenMsgMsg',245,1),(1693,1008,1011,'OP_DisplayWarningMsg',246,1),(1694,1008,1011,'OP_ModifyGuildMsg',247,1),(1695,1008,1011,'OP_GuildEventMsg',248,1),(1696,1008,1011,'OP_GuildEventAddMsg',249,1),(1697,1008,1011,'OP_GuildEventActionMsg',250,1),(1698,1008,1011,'OP_GuildEventListMsg',251,1),(1699,1008,1011,'OP_RequestGuildEventDetailsMsg',252,1),(1700,1008,1011,'OP_GuildEventDetailsMsg',253,1),(1701,1008,1011,'OP_RequestGuildInfoMsg',254,1),(1702,1008,1011,'OP_GuildBankActionMsg',255,1),(1703,1008,1011,'OP_GuildBankActionResponseMsg',256,1),(1704,1008,1011,'OP_GuildBankItemDetailsRequestMsg',257,1),(1705,1008,1011,'OP_GuildBankItemDetailsResponseMs',258,1),(1706,1008,1011,'OP_GuildBankUpdateMsg',259,1),(1707,1008,1011,'OP_GuildBankEventListMsg',260,1),(1708,1008,1011,'OP_RequestGuildBankEventDetailsMs',261,1),(1709,1008,1011,'OP_RewardPackMsg',262,1),(1710,1008,1011,'OP_RenameGuildMsg',263,1),(1711,1008,1011,'OP_ZoneToFriendRequestMsg',265,1),(1712,1008,1011,'OP_ZoneToFriendReplyMsg',266,1),(1713,1008,1011,'OP_ChatCreateChannelMsg',267,1),(1714,1008,1011,'OP_ChatJoinChannelMsg',268,1),(1715,1008,1011,'OP_ChatWhoChannelMsg',269,1),(1716,1008,1011,'OP_ChatLeaveChannelMsg',270,1),(1717,1008,1011,'OP_ChatTellChannelMsg',271,1),(1718,1008,1011,'OP_ChatTellUserMsg',272,1),(1719,1008,1011,'OP_ChatToggleFriendMsg',273,1),(1720,1008,1011,'OP_ChatToggleIgnoreMsg',274,1),(1721,1008,1011,'OP_ChatSendFriendsMsg',275,1),(1722,1008,1011,'OP_ChatSendIgnoresMsg',276,1),(1723,1008,1011,'OP_QuestReward',303,1),(1724,1008,1011,'OP_ChatFiltersMsg',318,1),(1725,1008,1011,'OP_MailGetHeadersMsg',319,1),(1726,1008,1011,'OP_MailGetMessageMsg',320,1),(1727,1008,1011,'OP_MailSendMessageMsg',321,1),(1728,1008,1011,'OP_MailDeleteMessageMsg',322,1),(1729,1008,1011,'OP_MailGetHeadersReplyMsg',323,1),(1730,1008,1011,'OP_MailGetMessageReplyMsg',324,1),(1731,1008,1011,'OP_MailSendMessageReplyMsg',325,1),(1732,1008,1011,'OP_MailCommitSendMessageMsg',326,1),(1733,1008,1011,'OP_MailSendSystemMessageMsg',327,1),(1734,1008,1011,'OP_MailRemoveAttachFromMailMsg',328,1),(1735,1008,1011,'OP_WaypointRequestMsg',330,1),(1736,1008,1011,'OP_WaypointReplyMsg',331,1),(1737,1008,1011,'OP_WaypointSelectMsg',332,1),(1738,1008,1011,'OP_WaypointUpdateMsg',333,1),(1739,1008,1011,'OP_CharNameChangedMsg',334,1),(1740,1008,1011,'OP_ShowZoneTeleporterDestinations',335,1),(1741,1008,1011,'OP_SelectZoneTeleporterDestinatio',336,1),(1742,1008,1011,'OP_ReloadLocalizedTxtMsg',337,1),(1743,1008,1011,'OP_RequestGuildMembershipMsg',338,1),(1744,1008,1011,'OP_GuildMembershipResponseMsg',339,1),(1745,1008,1011,'OP_LeaveGuildNotifyMsg',340,1),(1746,1008,1011,'OP_JoinGuildNotifyMsg',341,1),(1747,1008,1011,'OP_AvatarUpdateMsg',343,1),(1748,1008,1011,'OP_BioUpdateMsg',344,1),(1749,1008,1011,'OP_InspectPlayerMsg',345,1),(1750,1008,1011,'OP_WSServerLockMsg',346,1),(1751,1008,1011,'OP_LSServerLockMsg',347,1),(1752,1008,1011,'OP_WSServerHideMsg',348,1),(1753,1008,1011,'OP_CsCategoryRequestMsg',349,1),(1754,1008,1011,'OP_CsCategoryResponseMsg',350,1),(1755,1008,1011,'OP_KnowledgeWindowSlotMappingMsg',351,1),(1756,1008,1011,'OP_LFGUpdateMsg',352,1),(1757,1008,1011,'OP_AFKUpdateMsg',353,1),(1758,1008,1011,'OP_AnonUpdateMsg',354,1),(1759,1008,1011,'OP_UpdateActivePublicZonesMsg',355,1),(1760,1008,1011,'OP_UnknownNpcMsg',356,1),(1761,1008,1011,'OP_PromoFlagsDetailsMsg',357,1),(1762,1008,1011,'OP_ConsignViewCreateMsg',358,1),(1763,1008,1011,'OP_ConsignViewGetPageMsg',359,1),(1764,1008,1011,'OP_ConsignViewReleaseMsg',360,1),(1765,1008,1011,'OP_ConsignRemoveItemsMsg',361,1),(1766,1008,1011,'OP_UpdateDebugRadiiMsg',362,1),(1767,1008,1011,'OP_SnoopMsg',363,1),(1768,1008,1011,'OP_ReportMsg',364,1),(1769,1008,1011,'OP_UpdateRaidMsg',365,1),(1770,1008,1011,'OP_ConsignViewSortMsg',366,1),(1771,1008,1011,'OP_TitleUpdateMsg',367,1),(1772,1008,1011,'OP_ClientFellMsg',368,1),(1773,1008,1011,'OP_ClientInDeathRegionMsg',369,1),(1774,1008,1011,'OP_CampClientMsg',370,1),(1775,1008,1011,'OP_CSToolAccessResponseMsg',371,1),(1776,1008,1011,'OP_TrackingUpdateMsg',372,1),(1777,1008,1011,'OP_BeginTrackingMsg',373,1),(1778,1008,1011,'OP_StopTrackingMsg',374,1),(1779,1008,1011,'OP_GetAvatarAccessRequestForCSToo',375,1),(1780,1008,1011,'OP_AdvancementRequestMsg',376,1),(1781,1008,1011,'OP_UpdateAvgFrameTimeMsg',377,1),(1782,1008,1011,'OP_MapFogDataInitMsg',378,1),(1783,1008,1011,'OP_MapFogDataUpdateMsg',379,1),(1784,1008,1011,'OP_CloseGroupInviteWindowMsg',380,1),(1785,1008,1011,'OP_UpdateGroupMemberDataMsg',381,1),(1786,1008,1011,'OP_WorldPingMsg',382,1),(1787,1008,1011,'OP_MoveLogUpdateMsg',383,1),(1788,1008,1011,'OP_OfferQuestMsg',384,1),(1789,1008,1011,'OP_WorldShutdownUpdateMsg',385,1),(1790,1008,1011,'OP_DisplayMailScreenMsg',386,1),(1791,1008,1011,'OP_ClientIdleBeginMsg',387,1),(1792,1008,1011,'OP_ClientIdleEndMsg',388,1),(1793,1008,1011,'OP_PurchaseConsignmentLoreCheckRe',389,1),(1794,1008,1011,'OP_NotifyApprenticeStoppedMentori',390,1),(1795,1008,1011,'OP_CorruptedClientMsg',391,1),(1796,1008,1011,'OP_WorldDataChangeMsg',392,1),(1797,1008,1011,'OP_MailEventNotificationMsg',393,1),(1798,1008,1011,'OP_RestartZoneMsg',394,1),(1799,1008,1011,'OP_FlightPathsMsg',395,1),(1800,1008,1011,'OP_CharacterLinkdeadMsg',396,1),(1801,1008,1011,'OP_CharTransferStartRequestMsg',397,1),(1802,1008,1011,'OP_CharTransferStartReplyMsg',398,1),(1803,1008,1011,'OP_CharTransferRequestMsg',399,1),(1804,1008,1011,'OP_CharTransferReplyMsg',400,1),(1805,1008,1011,'OP_CharTransferRollbackRequestMsg',401,1),(1806,1008,1011,'OP_CharTransferCommitRequestMsg',402,1),(1807,1008,1011,'OP_CharTransferRollbackReplyMsg',403,1),(1808,1008,1011,'OP_CharTransferCommitReplyMsg',404,1),(1809,1008,1011,'OP_GetCharacterSerializedRequestM',405,1),(1810,1008,1011,'OP_GetCharacterSerializedReplyMsg',406,1),(1811,1008,1011,'OP_CreateCharFromCBBRequestMsg',407,1),(1812,1008,1011,'OP_CreateCharFromCBBReplyMsg',408,1),(1813,1008,1011,'OP_HousingDataChangedMsg',409,1),(1814,1008,1011,'OP_HousingRestoreMsg',410,1),(1815,1008,1011,'OP_AuctionItem',411,1),(1816,1008,1011,'OP_AuctionItemReply',412,1),(1817,1008,1011,'OP_AuctionCoin',413,1),(1818,1008,1011,'OP_AuctionCoinReply',414,1),(1819,1008,1011,'OP_AuctionCharacter',415,1),(1820,1008,1011,'OP_AuctionCharacterReply',416,1),(1821,1008,1011,'OP_AuctionCommitMsg',417,1),(1822,1008,1011,'OP_AuctionAbortMsg',418,1),(1823,1008,1011,'OP_CharTransferValidateRequestMsg',419,1),(1824,1008,1011,'OP_CharTransferValidateReplyMsg',420,1),(1825,1008,1011,'OP_RaceRestrictionMsg',421,1),(1826,1008,1011,'OP_SetInstanceDisplayNameMsg',422,1),(1827,1008,1011,'OP_GetAuctionAssetIDMsg',423,1),(1828,1008,1011,'OP_GetAuctionAssetIDReplyMsg',424,1),(1829,1008,1011,'OP_ResendWorldChannelsMsg',425,1),(1830,1008,1011,'OP_DisplayExchangeScreenMsg',426,1),(1831,1008,1011,'OP_ArenaGameTypesMsg',427,1),(1832,1008,1011,'OP_AuditAuctionEventMsg',429,1),(1833,1008,1011,'OP_InviteRequestMsg',431,1),(1834,1008,1011,'OP_InviteResponseMsg',432,1),(1835,1008,1011,'OP_InviteTargetResponseMsg',433,1),(1836,1008,1011,'OP_InspectPlayerRequestMsg',434,1),(1837,1008,1011,'OP_DispatchMsg',435,1),(1838,1008,1011,'OP_DisplayEventMsg',436,1),(1839,1008,1011,'OP_PrePossessionMsg',437,1),(1840,1008,1011,'OP_PostPossessionMsg',438,1),(1841,1008,1011,'OP_AdventureList',464,1),(1842,1008,1011,'OP_CancelSpellCast',465,1),(1843,1008,1011,'OP_UpdateTitleCmd',471,1),(1844,1008,1011,'OP_AttackAllowed',477,1),(1845,1008,1011,'OP_AttackNotAllowed',478,1),(1846,1008,1011,'OP_DressingRoom',485,1),(1847,1008,1011,'OP_SkillInfoRequest',489,1),(1848,1008,1011,'OP_SkillInfoResponse',490,1),(1849,1008,1011,'OP_BadLanguageFilter',494,1),(1850,1008,1011,'OP_MapRequest',495,1),(1851,1008,1011,'OP_EqUnknown',520,1),(1852,1008,1011,'OP_EqHearChatCmd',522,1),(1853,1008,1011,'OP_EqDisplayTextCmd',523,1),(1854,1008,1011,'OP_EqCreateGhostCmd',524,1),(1855,1008,1011,'OP_EqCreateWidgetCmd',525,1),(1856,1008,1011,'OP_EqCreateSignWidgetCmd',526,1),(1857,1008,1011,'OP_EqDestroyGhostCmd',527,1),(1858,1008,1011,'OP_EqUpdateGhostCmd',528,1),(1859,1008,1011,'OP_EqSetControlGhostCmd',529,1),(1860,1008,1011,'OP_EqSetPOVGhostCmd',530,1),(1861,1008,1011,'OP_EqHearCombatCmd',531,1),(1862,1008,1011,'OP_EqHearSpellCastCmd',532,1),(1863,1008,1011,'OP_EqHearSpellInterruptCmd',535,1),(1864,1008,1011,'OP_EqHearSpellFizzleCmd',536,1),(1865,1008,1011,'OP_EqHearConsiderCmd',537,1),(1866,1008,1011,'OP_EqUpdateSubClassesCmd',538,1),(1867,1008,1011,'OP_EqCreateListBoxCmd',539,1),(1868,1008,1011,'OP_EqSetDebugPathPointsCmd',540,1),(1869,1008,1011,'OP_EqCannedEmoteCmd',542,1),(1870,1008,1011,'OP_EqStateCmd',543,1),(1871,1008,1011,'OP_EqPlaySoundCmd',544,1),(1872,1008,1011,'OP_EqPlaySound3DCmd',545,1),(1873,1008,1011,'OP_EqPlayVoiceCmd',546,1),(1874,1008,1011,'OP_EqHearDrowningCmd',547,1),(1875,1008,1011,'OP_EqHearDeathCmd',548,1),(1876,1008,1011,'OP_EqGroupMemberRemovedCmd',549,1),(1877,1008,1011,'OP_EqHearChainEffectCmd',550,1),(1878,1008,1011,'OP_EqReceiveOfferCmd',551,1),(1879,1008,1011,'OP_EqInspectPCResultsCmd',552,1),(1880,1008,1011,'OP_EqDrawablePathGraphCmd',553,1),(1881,1008,1011,'OP_EqDialogOpenCmd',554,1),(1882,1008,1011,'OP_EqDialogCloseCmd',555,1),(1883,1008,1011,'OP_EqFactionUpdateCmd',556,1),(1884,1008,1011,'OP_EqCollectionUpdateCmd',557,1),(1885,1008,1011,'OP_EqCollectionFilterCmd',558,1),(1886,1008,1011,'OP_EqCollectionItemCmd',559,1),(1887,1008,1011,'OP_EqQuestJournalUpdateCmd',560,1),(1888,1008,1011,'OP_EqQuestJournalReplyCmd',562,1),(1889,1008,1011,'OP_EqQuestGroupCmd',563,1),(1890,1008,1011,'OP_EqUpdateMerchantCmd',564,1),(1891,1008,1011,'OP_EqUpdateStoreCmd',565,1),(1892,1008,1011,'OP_EqUpdatePlayerTradeCmd',566,1),(1893,1008,1011,'OP_EqHelpPathCmd',567,1),(1894,1008,1011,'OP_EqHelpPathClearCmd',568,1),(1895,1008,1011,'OP_EqUpdateBankCmd',569,1),(1896,1008,1011,'OP_EqExamineInfoCmd',570,1),(1897,1008,1011,'OP_EqCloseWindowCmd',571,1),(1898,1008,1011,'OP_EqUpdateLootCmd',572,1),(1899,1008,1011,'OP_EqJunctionListCmd',573,1),(1900,1008,1011,'OP_EqShowDeathWindowCmd',574,1),(1901,1008,1011,'OP_EqDisplaySpellFailCmd',575,1),(1902,1008,1011,'OP_EqSpellCastStartCmd',576,1),(1903,1008,1011,'OP_EqSpellCastEndCmd',577,1),(1904,1008,1011,'OP_EqResurrectedCmd',578,1),(1905,1008,1011,'OP_EqChoiceWinCmd',579,1),(1906,1008,1011,'OP_EqSetDefaultVerbCmd',580,1),(1907,1008,1011,'OP_EqInstructionWindowCmd',582,1),(1908,1008,1011,'OP_EqInstructionWindowCloseCmd',583,1),(1909,1008,1011,'OP_EqInstructionWindowGoalCmd',584,1),(1910,1008,1011,'OP_EqInstructionWindowTaskCmd',585,1),(1911,1008,1011,'OP_EqEnableGameEventCmd',586,1),(1912,1008,1011,'OP_EqShowWindowCmd',587,1),(1913,1008,1011,'OP_EqEnableWindowCmd',588,1),(1914,1008,1011,'OP_EqFlashWindowCmd',589,1),(1915,1008,1011,'OP_EqHearPlayFlavorCmd',590,1),(1916,1008,1011,'OP_EqUpdateSignWidgetCmd',592,1),(1917,1008,1011,'OP_EqDebugPVDCmd',593,1),(1918,1008,1011,'OP_EqShowBookCmd',594,1),(1919,1008,1011,'OP_EqQuestionnaireCmd',595,1),(1920,1008,1011,'OP_EqGetProbsCmd',596,1),(1921,1008,1011,'OP_EqHearHealCmd',597,1),(1922,1008,1011,'OP_EqChatChannelUpdateCmd',598,1),(1923,1008,1011,'OP_EqWhoChannelQueryReplyCmd',599,1),(1924,1008,1011,'OP_EqAvailWorldChannelsCmd',600,1),(1925,1008,1011,'OP_EqUpdateTargetCmd',601,1),(1926,1008,1011,'OP_EqConsignmentItemsCmd',603,1),(1927,1008,1011,'OP_EqStartBrokerCmd',605,1),(1928,1008,1011,'OP_EqMapExplorationCmd',606,1),(1929,1008,1011,'OP_EqStoreLogCmd',607,1),(1930,1008,1011,'OP_EqSpellMoveToRangeAndRetryCmd',608,1),(1931,1008,1011,'OP_EqUpdatePlayerMailCmd',609,1),(1932,1008,1011,'OP_EqArenaResultsCmd',610,1),(1933,1008,1011,'OP_EqGuildBankEventActionCmd',611,1),(1934,1008,1011,'OP_EqGuildBankExamineInfoCmd',612,1),(1935,1008,1011,'OP_EqHearSpellNoLandCmd',613,1),(1936,1008,1011,'OP_Lottery',617,1),(1937,1008,1011,'OP_GuildRecruitingMemberInfo',618,1),(1938,1008,1011,'OP_GuildRecruiting',619,1),(1939,1008,1011,'OP_GuildRecruitingDetails',620,1),(1940,1008,1011,'OP_GuildRecruitingImage',621,1),(1941,1008,1011,'OP_PointOfInterest',642,1),(1942,1008,1011,'OP_TraitsList',644,1),(1943,1008,1011,'OP_RecipeList',653,1),(1944,1008,1011,'OP_CharacterAchievements',655,1),(1945,1008,1011,'OP_AddClientToGroupMsg',1041,1),(1946,1008,1011,'OP_AddGroupToGroupMsg',1041,1),(1947,1008,1011,'OP_GuildKickMsg',1041,1),(1948,1008,1011,'OP_ProcessScriptMsg',1041,1),(1949,1008,1011,'OP_ProcessWorkspaceMsg',1041,1),(1950,1008,1011,'OP_PurchaseConsignmentResponseMsg',1041,1),(1951,1008,1011,'OP_QuickbarAddMsg',1041,1),(1952,1008,1011,'OP_SkillSlotMapping',1041,1),(1953,1008,1011,'OP_Unknown',10045,1),(1954,1008,1011,'OP_WSWeatherUpdateMsg',10046,1),(1955,1045,1086,'OP_LoginRequestMsg',0,1),(1956,1045,1086,'OP_LoginByNumRequestMsg',1,1),(1957,1045,1086,'OP_WSLoginRequestMsg',2,1),(1958,1045,1086,'OP_ESLoginRequestMsg',3,1),(1959,1045,1086,'OP_LoginReplyMsg',4,1),(1960,1045,1086,'OP_WSStatusReplyMsg',5,1),(1961,1045,1086,'OP_WorldStatusChangeMsg',6,1),(1962,1045,1086,'OP_AllWSDescRequestMsg',7,1),(1963,1045,1086,'OP_WorldListMsg',8,1),(1964,1045,1086,'OP_AllCharactersDescRequestMsg',9,1),(1965,1045,1086,'OP_AllCharactersDescReplyMsg',10,1),(1966,1045,1086,'OP_CreateCharacterRequestMsg',11,1),(1967,1045,1086,'OP_CreateCharacterReplyMsg',12,1),(1968,1045,1086,'OP_WSCreateCharacterRequestMsg',13,1),(1969,1045,1086,'OP_WSCreateCharacterReplyMsg',14,1),(1970,1045,1086,'OP_ReskinCharacterRequestMsg',15,1),(1971,1045,1086,'OP_DeleteCharacterRequestMsg',16,1),(1972,1045,1086,'OP_DeleteCharacterReplyMsg',17,1),(1973,1045,1086,'OP_PlayCharacterRequestMsg',18,1),(1974,1045,1086,'OP_PlayCharacterReplyMsg',19,1),(1975,1045,1086,'OP_ExpectClientAsCharacterReplyMs',22,1),(1976,1045,1086,'OP_ServerPlayCharacterRequestMsg',23,1),(1977,1045,1086,'OP_ServerPlayCharacterReplyMsg',24,1),(1978,1045,1086,'OP_ESInitMsg',25,1),(1979,1045,1086,'OP_ESReadyForClientsMsg',26,1),(1980,1045,1086,'OP_CreateZoneInstanceMsg',27,1),(1981,1045,1086,'OP_ZoneInstanceCreateReplyMsg',28,1),(1982,1045,1086,'OP_ZoneInstanceDestroyedMsg',29,1),(1983,1045,1086,'OP_ExpectClientAsCharacterRequest',30,1),(1984,1045,1086,'OP_ZoneInfoMsg',31,1),(1985,1045,1086,'OP_DoneLoadingZoneResourcesMsg',32,1),(1986,1045,1086,'OP_DoneSendingInitialEntitiesMsg',33,1),(1987,1045,1086,'OP_DoneLoadingEntityResourcesMsg',34,1),(1988,1045,1086,'OP_PredictionUpdateMsg',35,1),(1989,1045,1086,'OP_UpdatePositionMsg',37,1),(1990,1045,1086,'OP_SetRemoteCmdsMsg',39,1),(1991,1045,1086,'OP_RemoteCmdMsg',40,1),(1992,1045,1086,'OP_GameWorldTimeMsg',41,1),(1993,1045,1086,'OP_MOTDMsg',42,1),(1994,1045,1086,'OP_ZoneMOTDMsg',43,1),(1995,1045,1086,'OP_AvatarCreatedMsg',44,1),(1996,1045,1086,'OP_AvatarDestroyedMsg',45,1),(1997,1045,1086,'OP_RequestCampMsg',47,1),(1998,1045,1086,'OP_CampStartedMsg',48,1),(1999,1045,1086,'OP_CampAbortedMsg',49,1),(2000,1045,1086,'OP_WhoQueryRequestMsg',50,1),(2001,1045,1086,'OP_WhoQueryReplyMsg',51,1),(2002,1045,1086,'OP_MonitorReplyMsg',52,1),(2003,1045,1086,'OP_MonitorCharacterListMsg',53,1),(2004,1045,1086,'OP_MonitorCharacterListRequestMsg',54,1),(2005,1045,1086,'OP_ClientCmdMsg',55,1),(2006,1045,1086,'OP_DispatchESMsg',56,1),(2007,1045,1086,'OP_DispatchClientCmdMsg',57,1),(2008,1045,1086,'OP_UpdateTargetMsg',58,1),(2009,1045,1086,'OP_UpdateTargetLocMsg',59,1),(2010,1045,1086,'OP_UpdateCharacterSheetMsg',60,1),(2011,1045,1086,'OP_UpdateSpellBookMsg',61,1),(2012,1045,1086,'OP_UpdateInventoryMsg',63,1),(2013,1045,1086,'OP_UpdateRecipeBookMsg',65,1),(2014,1045,1086,'OP_RequestRecipeDetailsMsg',66,1),(2015,1045,1086,'OP_RecipeDetailsMsg',67,1),(2016,1045,1086,'OP_UpdateSkillBookMsg',68,1),(2017,1045,1086,'OP_UpdateSkillsMsg',69,1),(2018,1045,1086,'OP_UpdateOpportunityMsg',70,1),(2019,1045,1086,'OP_ChangeZoneMsg',72,1),(2020,1045,1086,'OP_ClientTeleportRequestMsg',73,1),(2021,1045,1086,'OP_TeleportWithinZoneMsg',74,1),(2022,1045,1086,'OP_TeleportWithinZoneNoReloadMsg',75,1),(2023,1045,1086,'OP_MigrateClientToZoneRequestMsg',76,1),(2024,1045,1086,'OP_MigrateClientToZoneReplyMsg',77,1),(2025,1045,1086,'OP_ReadyToZoneMsg',78,1),(2026,1045,1086,'OP_RemoveClientFromGroupMsg',79,1),(2027,1045,1086,'OP_RemoveGroupFromGroupMsg',80,1),(2028,1045,1086,'OP_MakeGroupLeaderMsg',81,1),(2029,1045,1086,'OP_GroupCreatedMsg',82,1),(2030,1045,1086,'OP_GroupDestroyedMsg',83,1),(2031,1045,1086,'OP_GroupMemberAddedMsg',84,1),(2032,1045,1086,'OP_GroupMemberRemovedMsg',85,1),(2033,1045,1086,'OP_GroupRemovedFromGroupMsg',86,1),(2034,1045,1086,'OP_GroupLeaderChangedMsg',87,1),(2035,1045,1086,'OP_GroupResendOOZDataMsg',88,1),(2036,1045,1086,'OP_GroupSettingsChangedMsg',89,1),(2037,1045,1086,'OP_OutOfZoneMemberDataMsg',90,1),(2038,1045,1086,'OP_SendLatestRequestMsg',91,1),(2039,1045,1086,'OP_ClearDataMsg',92,1),(2040,1045,1086,'OP_SetSocialMsg',93,1),(2041,1045,1086,'OP_ESStatusMsg',94,1),(2042,1045,1086,'OP_ESZoneInstanceStatusMsg',95,1),(2043,1045,1086,'OP_ZonesStatusRequestMsg',96,1),(2044,1045,1086,'OP_ZonesStatusMsg',97,1),(2045,1045,1086,'OP_ESWeatherRequestMsg',98,1),(2046,1045,1086,'OP_ESWeatherRequestEndMsg',99,1),(2047,1045,1086,'OP_DialogSelectMsg',102,1),(2048,1045,1086,'OP_DialogCloseMsg',103,1),(2049,1045,1086,'OP_RemoveSpellEffectMsg',104,1),(2050,1045,1086,'OP_RemoveConcentrationMsg',105,1),(2051,1045,1086,'OP_QuestJournalOpenMsg',106,1),(2052,1045,1086,'OP_QuestJournalInspectMsg',107,1),(2053,1045,1086,'OP_QuestJournalSetVisibleMsg',108,1),(2054,1045,1086,'OP_QuestJournalWaypointMsg',109,1),(2055,1045,1086,'OP_CreateGuildRequestMsg',110,1),(2056,1045,1086,'OP_CreateGuildReplyMsg',111,1),(2057,1045,1086,'OP_GuildsayMsg',112,1),(2058,1045,1086,'OP_GuildUpdateMsg',119,1),(2059,1045,1086,'OP_DeleteGuildMsg',120,1),(2060,1045,1086,'OP_FellowshipExpMsg',121,1),(2061,1045,1086,'OP_ConsignmentCloseStoreMsg',122,1),(2062,1045,1086,'OP_ConsignItemRequestMsg',123,1),(2063,1045,1086,'OP_ConsignItemResponseMsg',124,1),(2064,1045,1086,'OP_PurchaseConsignmentRequestMsg',125,1),(2065,1045,1086,'OP_HouseDeletedRemotelyMsg',126,1),(2066,1045,1086,'OP_UpdateHouseDataMsg',127,1),(2067,1045,1086,'OP_UpdateHouseAccessDataMsg',128,1),(2068,1045,1086,'OP_PlayerHouseBaseScreenMsg',129,1),(2069,1045,1086,'OP_PlayerHousePurchaseScreenMsg',130,1),(2070,1045,1086,'OP_PlayerHouseAccessUpdateMsg',131,1),(2071,1045,1086,'OP_PlayerHouseDisplayStatusMsg',132,1),(2072,1045,1086,'OP_PlayerHouseCloseUIMsg',133,1),(2073,1045,1086,'OP_BuyPlayerHouseMsg',134,1),(2074,1045,1086,'OP_BuyPlayerHouseTintMsg',135,1),(2075,1045,1086,'OP_CollectAllHouseItemsMsg',136,1),(2076,1045,1086,'OP_RelinquishHouseMsg',137,1),(2077,1045,1086,'OP_EnterHouseMsg',138,1),(2078,1045,1086,'OP_ExitHouseMsg',139,1),(2079,1045,1086,'OP_HouseDefaultAccessSetMsg',140,1),(2080,1045,1086,'OP_HouseAccessSetMsg',141,1),(2081,1045,1086,'OP_HouseAccessRemoveMsg',142,1),(2082,1045,1086,'OP_PayHouseUpkeepMsg',143,1),(2083,1045,1086,'OP_MoveableObjectPlacementCriteri',145,1),(2084,1045,1086,'OP_EnterMoveObjectModeMsg',146,1),(2085,1045,1086,'OP_PositionMoveableObject',147,1),(2086,1045,1086,'OP_CancelMoveObjectModeMsg',148,1),(2087,1045,1086,'OP_ShaderCustomizationMsg',149,1),(2088,1045,1086,'OP_ReplaceableSubMeshesMsg',150,1),(2089,1045,1086,'OP_HouseCustomizationScreenMsg',151,1),(2090,1045,1086,'OP_CustomizationPurchaseRequestMs',152,1),(2091,1045,1086,'OP_CustomizationSetRequestMsg',153,1),(2092,1045,1086,'OP_CustomizationReplyMsg',154,1),(2093,1045,1086,'OP_TintWidgetsMsg',155,1),(2094,1045,1086,'OP_ExamineConsignmentRequestMsg',156,1),(2095,1045,1086,'OP_ExamineConsignmentResponseMsg',157,1),(2096,1045,1086,'OP_UISettingsResponseMsg',158,1),(2097,1045,1086,'OP_UIResetMsg',160,1),(2098,1045,1086,'OP_KeymapLoadMsg',161,1),(2099,1045,1086,'OP_KeymapNoneMsg',162,1),(2100,1045,1086,'OP_KeymapDataMsg',163,1),(2101,1045,1086,'OP_KeymapSaveMsg',164,1),(2102,1045,1086,'OP_DispatchSpellCmdMsg',165,1),(2103,1045,1086,'OP_EntityVerbsRequestMsg',167,1),(2104,1045,1086,'OP_EntityVerbsReplyMsg',168,1),(2105,1045,1086,'OP_EntityVerbsVerbMsg',169,1),(2106,1045,1086,'OP_ChatRelationshipUpdateMsg',171,1),(2107,1045,1086,'OP_LootItemsRequestMsg',172,1),(2108,1045,1086,'OP_StoppedLootingMsg',173,1),(2109,1045,1086,'OP_SitMsg',174,1),(2110,1045,1086,'OP_StandMsg',175,1),(2111,1045,1086,'OP_SatMsg',176,1),(2112,1045,1086,'OP_StoodMsg',177,1),(2113,1045,1086,'OP_ClearForTakeOffMsg',178,1),(2114,1045,1086,'OP_ReadyForTakeOffMsg',179,1),(2115,1045,1086,'OP_ShowIllusionsMsg',180,1),(2116,1045,1086,'OP_HideIllusionsMsg',181,1),(2117,1045,1086,'OP_ExamineItemRequestMsg',182,1),(2118,1045,1086,'OP_ReadBookPageMsg',183,1),(2119,1045,1086,'OP_DefaultGroupOptionsRequestMsg',184,1),(2120,1045,1086,'OP_DefaultGroupOptionsMsg',185,1),(2121,1045,1086,'OP_GroupOptionsMsg',186,1),(2122,1045,1086,'OP_DisplayGroupOptionsScreenMsg',187,1),(2123,1045,1086,'OP_DisplayInnVisitScreenMsg',188,1),(2124,1045,1086,'OP_DumpSchedulerMsg',189,1),(2125,1045,1086,'OP_LSRequestPlayerDescMsg',190,1),(2126,1045,1086,'OP_LSCheckAcctLockMsg',191,1),(2127,1045,1086,'OP_WSAcctLockStatusMsg',192,1),(2128,1045,1086,'OP_RequestHelpRepathMsg',193,1),(2129,1045,1086,'OP_RequestTargetLocMsg',194,1),(2130,1045,1086,'OP_UpdateMotdMsg',195,1),(2131,1045,1086,'OP_PerformPlayerKnockbackMsg',196,1),(2132,1045,1086,'OP_PerformCameraShakeMsg',197,1),(2133,1045,1086,'OP_PopulateSkillMapsMsg',200,1),(2134,1045,1086,'OP_CancelledFeignMsg',202,1),(2135,1045,1086,'OP_SignalMsg',203,1),(2136,1045,1086,'OP_ShowCreateFromRecipeUIMsg',204,1),(2137,1045,1086,'OP_CancelCreateFromRecipeMsg',205,1),(2138,1045,1086,'OP_BeginItemCreationMsg',206,1),(2139,1045,1086,'OP_StopItemCreationMsg',207,1),(2140,1045,1086,'OP_ShowItemCreationProcessUIMsg',208,1),(2141,1045,1086,'OP_UpdateItemCreationProcessUIMsg',209,1),(2142,1045,1086,'OP_DisplayTSEventReactionMsg',210,1),(2143,1045,1086,'OP_ShowRecipeBookMsg',211,1),(2144,1045,1086,'OP_KnowledgebaseRequestMsg',212,1),(2145,1045,1086,'OP_KnowledgebaseResponseMsg',213,1),(2146,1045,1086,'OP_CSTicketHeaderRequestMsg',214,1),(2147,1045,1086,'OP_CSTicketInfoMsg',215,1),(2148,1045,1086,'OP_CSTicketCommentRequestMsg',216,1),(2149,1045,1086,'OP_CSTicketCommentResponseMsg',217,1),(2150,1045,1086,'OP_CSTicketCreateMsg',218,1),(2151,1045,1086,'OP_CSTicketAddCommentMsg',219,1),(2152,1045,1086,'OP_CSTicketDeleteMsg',220,1),(2153,1045,1086,'OP_CSTicketChangeNotificationMsg',221,1),(2154,1045,1086,'OP_WorldDataUpdateMsg',222,1),(2155,1045,1086,'OP_KnownLanguagesMsg',223,1),(2156,1045,1086,'OP_LsRequestClientCrashLogMsg',224,1),(2157,1045,1086,'OP_LsClientBaselogReplyMsg',225,1),(2158,1045,1086,'OP_LsClientCrashlogReplyMsg',226,1),(2159,1045,1086,'OP_LsClientAlertlogReplyMsg',227,1),(2160,1045,1086,'OP_LsClientVerifylogReplyMsg',228,1),(2161,1045,1086,'OP_ClientTeleportToLocationMsg',229,1),(2162,1045,1086,'OP_UpdateClientPredFlagsMsg',230,1),(2163,1045,1086,'OP_ChangeServerControlFlagMsg',231,1),(2164,1045,1086,'OP_CSToolsRequestMsg',232,1),(2165,1045,1086,'OP_CSToolsResponseMsg',233,1),(2166,1045,1086,'OP_AddSocialStructureStandingMsg',234,1),(2167,1045,1086,'OP_CreateBoatTransportsMsg',235,1),(2168,1045,1086,'OP_PositionBoatTransportMsg',236,1),(2169,1045,1086,'OP_MigrateBoatTransportMsg',237,1),(2170,1045,1086,'OP_MigrateBoatTransportReplyMsg',238,1),(2171,1045,1086,'OP_DisplayDebugNLLPointsMsg',239,1),(2172,1045,1086,'OP_ExamineInfoRequestMsg',240,1),(2173,1045,1086,'OP_QuickbarInitMsg',241,1),(2174,1045,1086,'OP_QuickbarUpdateMsg',242,1),(2175,1045,1086,'OP_MacroInitMsg',243,1),(2176,1045,1086,'OP_MacroUpdateMsg',244,1),(2177,1045,1086,'OP_QuestionnaireMsg',245,1),(2178,1045,1086,'OP_LevelChangedMsg',246,1),(2179,1045,1086,'OP_SpellGainedMsg',247,1),(2180,1045,1086,'OP_EncounterBrokenMsg',248,1),(2181,1045,1086,'OP_OnscreenMsgMsg',249,1),(2182,1045,1086,'OP_DisplayWarningMsg',250,1),(2183,1045,1086,'OP_ModifyGuildMsg',251,1),(2184,1045,1086,'OP_GuildEventMsg',252,1),(2185,1045,1086,'OP_GuildEventAddMsg',253,1),(2186,1045,1086,'OP_GuildEventActionMsg',254,1),(2187,1045,1086,'OP_GuildEventListMsg',255,1),(2188,1045,1086,'OP_RequestGuildEventDetailsMsg',256,1),(2189,1045,1086,'OP_GuildEventDetailsMsg',257,1),(2190,1045,1086,'OP_RequestGuildInfoMsg',258,1),(2191,1045,1086,'OP_GuildBankActionMsg',259,1),(2192,1045,1086,'OP_GuildBankActionResponseMsg',260,1),(2193,1045,1086,'OP_GuildBankItemDetailsRequestMsg',261,1),(2194,1045,1086,'OP_GuildBankItemDetailsResponseMs',262,1),(2195,1045,1086,'OP_GuildBankUpdateMsg',263,1),(2196,1045,1086,'OP_GuildBankEventListMsg',264,1),(2197,1045,1086,'OP_RequestGuildBankEventDetailsMs',265,1),(2198,1045,1086,'OP_RewardPackMsg',266,1),(2199,1045,1086,'OP_RenameGuildMsg',267,1),(2200,1045,1086,'OP_ZoneToFriendRequestMsg',269,1),(2201,1045,1086,'OP_ZoneToFriendReplyMsg',270,1),(2202,1045,1086,'OP_ChatCreateChannelMsg',271,1),(2203,1045,1086,'OP_ChatJoinChannelMsg',272,1),(2204,1045,1086,'OP_ChatWhoChannelMsg',273,1),(2205,1045,1086,'OP_ChatLeaveChannelMsg',274,1),(2206,1045,1086,'OP_ChatTellChannelMsg',275,1),(2207,1045,1086,'OP_ChatTellUserMsg',276,1),(2208,1045,1086,'OP_ChatToggleFriendMsg',277,1),(2209,1045,1086,'OP_ChatToggleIgnoreMsg',278,1),(2210,1045,1086,'OP_ChatSendFriendsMsg',279,1),(2211,1045,1086,'OP_ChatSendIgnoresMsg',280,1),(2212,1045,1086,'OP_QuestReward',307,1),(2213,1045,1086,'OP_ChatFiltersMsg',322,1),(2214,1045,1086,'OP_MailGetHeadersMsg',323,1),(2215,1045,1086,'OP_MailGetMessageMsg',324,1),(2216,1045,1086,'OP_MailSendMessageMsg',325,1),(2217,1045,1086,'OP_MailDeleteMessageMsg',326,1),(2218,1045,1086,'OP_MailGetHeadersReplyMsg',327,1),(2219,1045,1086,'OP_MailGetMessageReplyMsg',328,1),(2220,1045,1086,'OP_MailSendMessageReplyMsg',329,1),(2221,1045,1086,'OP_MailCommitSendMessageMsg',330,1),(2222,1045,1086,'OP_MailSendSystemMessageMsg',331,1),(2223,1045,1086,'OP_MailRemoveAttachFromMailMsg',332,1),(2224,1045,1086,'OP_WaypointRequestMsg',334,1),(2225,1045,1086,'OP_WaypointReplyMsg',335,1),(2226,1045,1086,'OP_WaypointSelectMsg',336,1),(2227,1045,1086,'OP_WaypointUpdateMsg',337,1),(2228,1045,1086,'OP_CharNameChangedMsg',338,1),(2229,1045,1086,'OP_ShowZoneTeleporterDestinations',339,1),(2230,1045,1086,'OP_SelectZoneTeleporterDestinatio',340,1),(2231,1045,1086,'OP_ReloadLocalizedTxtMsg',341,1),(2232,1045,1086,'OP_RequestGuildMembershipMsg',342,1),(2233,1045,1086,'OP_GuildMembershipResponseMsg',343,1),(2234,1045,1086,'OP_LeaveGuildNotifyMsg',344,1),(2235,1045,1086,'OP_JoinGuildNotifyMsg',345,1),(2236,1045,1086,'OP_AvatarUpdateMsg',347,1),(2237,1045,1086,'OP_BioUpdateMsg',348,1),(2238,1045,1086,'OP_InspectPlayerMsg',349,1),(2239,1045,1086,'OP_WSServerLockMsg',350,1),(2240,1045,1086,'OP_LSServerLockMsg',351,1),(2241,1045,1086,'OP_WSServerHideMsg',352,1),(2242,1045,1086,'OP_CsCategoryRequestMsg',353,1),(2243,1045,1086,'OP_CsCategoryResponseMsg',354,1),(2244,1045,1086,'OP_KnowledgeWindowSlotMappingMsg',355,1),(2245,1045,1086,'OP_LFGUpdateMsg',356,1),(2246,1045,1086,'OP_AFKUpdateMsg',357,1),(2247,1045,1086,'OP_AnonUpdateMsg',358,1),(2248,1045,1086,'OP_UpdateActivePublicZonesMsg',359,1),(2249,1045,1086,'OP_UnknownNpcMsg',360,1),(2250,1045,1086,'OP_PromoFlagsDetailsMsg',361,1),(2251,1045,1086,'OP_ConsignViewCreateMsg',362,1),(2252,1045,1086,'OP_ConsignViewGetPageMsg',363,1),(2253,1045,1086,'OP_ConsignViewReleaseMsg',364,1),(2254,1045,1086,'OP_ConsignRemoveItemsMsg',365,1),(2255,1045,1086,'OP_UpdateDebugRadiiMsg',366,1),(2256,1045,1086,'OP_SnoopMsg',367,1),(2257,1045,1086,'OP_ReportMsg',368,1),(2258,1045,1086,'OP_UpdateRaidMsg',369,1),(2259,1045,1086,'OP_ConsignViewSortMsg',370,1),(2260,1045,1086,'OP_TitleUpdateMsg',371,1),(2261,1045,1086,'OP_ClientFellMsg',372,1),(2262,1045,1086,'OP_ClientInDeathRegionMsg',373,1),(2263,1045,1086,'OP_CampClientMsg',374,1),(2264,1045,1086,'OP_CSToolAccessResponseMsg',375,1),(2265,1045,1086,'OP_TrackingUpdateMsg',376,1),(2266,1045,1086,'OP_BeginTrackingMsg',377,1),(2267,1045,1086,'OP_StopTrackingMsg',378,1),(2268,1045,1086,'OP_GetAvatarAccessRequestForCSToo',379,1),(2269,1045,1086,'OP_AdvancementRequestMsg',380,1),(2270,1045,1086,'OP_UpdateAvgFrameTimeMsg',381,1),(2271,1045,1086,'OP_MapFogDataInitMsg',382,1),(2272,1045,1086,'OP_MapFogDataUpdateMsg',383,1),(2273,1045,1086,'OP_CloseGroupInviteWindowMsg',384,1),(2274,1045,1086,'OP_UpdateGroupMemberDataMsg',385,1),(2275,1045,1086,'OP_WorldPingMsg',386,1),(2276,1045,1086,'OP_MoveLogUpdateMsg',387,1),(2277,1045,1086,'OP_OfferQuestMsg',388,1),(2278,1045,1086,'OP_WorldShutdownUpdateMsg',389,1),(2279,1045,1086,'OP_DisplayMailScreenMsg',390,1),(2280,1045,1086,'OP_ClientIdleBeginMsg',391,1),(2281,1045,1086,'OP_ClientIdleEndMsg',392,1),(2282,1045,1086,'OP_PurchaseConsignmentLoreCheckRe',393,1),(2283,1045,1086,'OP_NotifyApprenticeStoppedMentori',394,1),(2284,1045,1086,'OP_CorruptedClientMsg',395,1),(2285,1045,1086,'OP_WorldDataChangeMsg',396,1),(2286,1045,1086,'OP_MailEventNotificationMsg',397,1),(2287,1045,1086,'OP_RestartZoneMsg',398,1),(2288,1045,1086,'OP_FlightPathsMsg',399,1),(2289,1045,1086,'OP_CharacterLinkdeadMsg',400,1),(2290,1045,1086,'OP_CharTransferStartRequestMsg',401,1),(2291,1045,1086,'OP_CharTransferStartReplyMsg',402,1),(2292,1045,1086,'OP_CharTransferRequestMsg',403,1),(2293,1045,1086,'OP_CharTransferReplyMsg',404,1),(2294,1045,1086,'OP_CharTransferRollbackRequestMsg',405,1),(2295,1045,1086,'OP_CharTransferCommitRequestMsg',406,1),(2296,1045,1086,'OP_CharTransferRollbackReplyMsg',407,1),(2297,1045,1086,'OP_CharTransferCommitReplyMsg',408,1),(2298,1045,1086,'OP_GetCharacterSerializedRequestM',409,1),(2299,1045,1086,'OP_GetCharacterSerializedReplyMsg',410,1),(2300,1045,1086,'OP_CreateCharFromCBBRequestMsg',411,1),(2301,1045,1086,'OP_CreateCharFromCBBReplyMsg',412,1),(2302,1045,1086,'OP_HousingDataChangedMsg',413,1),(2303,1045,1086,'OP_HousingRestoreMsg',414,1),(2304,1045,1086,'OP_AuctionItem',415,1),(2305,1045,1086,'OP_AuctionItemReply',416,1),(2306,1045,1086,'OP_AuctionCoin',417,1),(2307,1045,1086,'OP_AuctionCoinReply',418,1),(2308,1045,1086,'OP_AuctionCharacter',419,1),(2309,1045,1086,'OP_AuctionCharacterReply',420,1),(2310,1045,1086,'OP_AuctionCommitMsg',421,1),(2311,1045,1086,'OP_AuctionAbortMsg',422,1),(2312,1045,1086,'OP_CharTransferValidateRequestMsg',423,1),(2313,1045,1086,'OP_CharTransferValidateReplyMsg',424,1),(2314,1045,1086,'OP_RaceRestrictionMsg',425,1),(2315,1045,1086,'OP_SetInstanceDisplayNameMsg',426,1),(2316,1045,1086,'OP_GetAuctionAssetIDMsg',427,1),(2317,1045,1086,'OP_GetAuctionAssetIDReplyMsg',428,1),(2318,1045,1086,'OP_ResendWorldChannelsMsg',429,1),(2319,1045,1086,'OP_DisplayExchangeScreenMsg',430,1),(2320,1045,1086,'OP_ArenaGameTypesMsg',431,1),(2321,1045,1086,'OP_AuditAuctionEventMsg',433,1),(2322,1045,1086,'OP_InviteRequestMsg',435,1),(2323,1045,1086,'OP_InviteResponseMsg',436,1),(2324,1045,1086,'OP_InviteTargetResponseMsg',437,1),(2325,1045,1086,'OP_InspectPlayerRequestMsg',438,1),(2326,1045,1086,'OP_DispatchMsg',439,1),(2327,1045,1086,'OP_DisplayEventMsg',440,1),(2328,1045,1086,'OP_PrePossessionMsg',441,1),(2329,1045,1086,'OP_PostPossessionMsg',442,1),(2330,1045,1086,'OP_AdventureList',474,1),(2331,1045,1086,'OP_CancelSpellCast',475,1),(2332,1045,1086,'OP_UpdateTitleCmd',483,1),(2333,1045,1086,'OP_AttackAllowed',487,1),(2334,1045,1086,'OP_AttackNotAllowed',488,1),(2335,1045,1086,'OP_DressingRoom',494,1),(2336,1045,1086,'OP_SkillInfoRequest',498,1),(2337,1045,1086,'OP_SkillInfoResponse',499,1),(2338,1045,1086,'OP_BadLanguageFilter',503,1),(2339,1045,1086,'OP_MapRequest',504,1),(2340,1045,1086,'OP_EqUnknown',539,1),(2341,1045,1086,'OP_EqHearChatCmd',541,1),(2342,1045,1086,'OP_EqDisplayTextCmd',542,1),(2343,1045,1086,'OP_EqCreateGhostCmd',543,1),(2344,1045,1086,'OP_EqCreateWidgetCmd',544,1),(2345,1045,1086,'OP_EqCreateSignWidgetCmd',545,1),(2346,1045,1086,'OP_EqDestroyGhostCmd',546,1),(2347,1045,1086,'OP_EqUpdateGhostCmd',547,1),(2348,1045,1086,'OP_EqSetControlGhostCmd',548,1),(2349,1045,1086,'OP_EqSetPOVGhostCmd',549,1),(2350,1045,1086,'OP_EqHearCombatCmd',550,1),(2351,1045,1086,'OP_EqHearSpellCastCmd',551,1),(2352,1045,1086,'OP_EqHearSpellInterruptCmd',554,1),(2353,1045,1086,'OP_EqHearSpellFizzleCmd',555,1),(2354,1045,1086,'OP_EqHearConsiderCmd',556,1),(2355,1045,1086,'OP_EqUpdateSubClassesCmd',557,1),(2356,1045,1086,'OP_EqCreateListBoxCmd',558,1),(2357,1045,1086,'OP_EqSetDebugPathPointsCmd',559,1),(2358,1045,1086,'OP_EqCannedEmoteCmd',561,1),(2359,1045,1086,'OP_EqStateCmd',562,1),(2360,1045,1086,'OP_EqPlaySoundCmd',563,1),(2361,1045,1086,'OP_EqPlaySound3DCmd',564,1),(2362,1045,1086,'OP_EqPlayVoiceCmd',565,1),(2363,1045,1086,'OP_EqHearDrowningCmd',566,1),(2364,1045,1086,'OP_EqHearDeathCmd',567,1),(2365,1045,1086,'OP_EqGroupMemberRemovedCmd',568,1),(2366,1045,1086,'OP_EqHearChainEffectCmd',569,1),(2367,1045,1086,'OP_EqReceiveOfferCmd',570,1),(2368,1045,1086,'OP_EqInspectPCResultsCmd',571,1),(2369,1045,1086,'OP_EqDrawablePathGraphCmd',572,1),(2370,1045,1086,'OP_EqDialogOpenCmd',573,1),(2371,1045,1086,'OP_EqDialogCloseCmd',574,1),(2372,1045,1086,'OP_EqFactionUpdateCmd',575,1),(2373,1045,1086,'OP_EqCollectionUpdateCmd',576,1),(2374,1045,1086,'OP_EqCollectionFilterCmd',577,1),(2375,1045,1086,'OP_EqCollectionItemCmd',578,1),(2376,1045,1086,'OP_EqQuestJournalUpdateCmd',579,1),(2377,1045,1086,'OP_EqQuestJournalReplyCmd',581,1),(2378,1045,1086,'OP_EqQuestGroupCmd',582,1),(2379,1045,1086,'OP_EqUpdateMerchantCmd',583,1),(2380,1045,1086,'OP_EqUpdateStoreCmd',584,1),(2381,1045,1086,'OP_EqUpdatePlayerTradeCmd',585,1),(2382,1045,1086,'OP_EqHelpPathCmd',586,1),(2383,1045,1086,'OP_EqHelpPathClearCmd',587,1),(2384,1045,1086,'OP_EqUpdateBankCmd',588,1),(2385,1045,1086,'OP_EqExamineInfoCmd',589,1),(2386,1045,1086,'OP_EqCloseWindowCmd',590,1),(2387,1045,1086,'OP_EqUpdateLootCmd',591,1),(2388,1045,1086,'OP_EqJunctionListCmd',592,1),(2389,1045,1086,'OP_EqShowDeathWindowCmd',593,1),(2390,1045,1086,'OP_EqDisplaySpellFailCmd',594,1),(2391,1045,1086,'OP_EqSpellCastStartCmd',595,1),(2392,1045,1086,'OP_EqSpellCastEndCmd',596,1),(2393,1045,1086,'OP_EqResurrectedCmd',597,1),(2394,1045,1086,'OP_EqChoiceWinCmd',598,1),(2395,1045,1086,'OP_EqSetDefaultVerbCmd',599,1),(2396,1045,1086,'OP_EqInstructionWindowCmd',601,1),(2397,1045,1086,'OP_EqInstructionWindowCloseCmd',602,1),(2398,1045,1086,'OP_EqInstructionWindowGoalCmd',603,1),(2399,1045,1086,'OP_EqInstructionWindowTaskCmd',604,1),(2400,1045,1086,'OP_EqEnableGameEventCmd',605,1),(2401,1045,1086,'OP_EqShowWindowCmd',606,1),(2402,1045,1086,'OP_EqEnableWindowCmd',607,1),(2403,1045,1086,'OP_EqFlashWindowCmd',608,1),(2404,1045,1086,'OP_EqHearPlayFlavorCmd',609,1),(2405,1045,1086,'OP_EqUpdateSignWidgetCmd',611,1),(2406,1045,1086,'OP_EqDebugPVDCmd',612,1),(2407,1045,1086,'OP_EqShowBookCmd',613,1),(2408,1045,1086,'OP_EqQuestionnaireCmd',614,1),(2409,1045,1086,'OP_EqGetProbsCmd',615,1),(2410,1045,1086,'OP_EqHearHealCmd',616,1),(2411,1045,1086,'OP_EqChatChannelUpdateCmd',617,1),(2412,1045,1086,'OP_EqWhoChannelQueryReplyCmd',618,1),(2413,1045,1086,'OP_EqAvailWorldChannelsCmd',619,1),(2414,1045,1086,'OP_EqUpdateTargetCmd',620,1),(2415,1045,1086,'OP_EqConsignmentItemsCmd',622,1),(2416,1045,1086,'OP_EqStartBrokerCmd',624,1),(2417,1045,1086,'OP_EqMapExplorationCmd',625,1),(2418,1045,1086,'OP_EqStoreLogCmd',626,1),(2419,1045,1086,'OP_EqSpellMoveToRangeAndRetryCmd',627,1),(2420,1045,1086,'OP_EqUpdatePlayerMailCmd',628,1),(2421,1045,1086,'OP_EqArenaResultsCmd',629,1),(2422,1045,1086,'OP_EqGuildBankEventActionCmd',630,1),(2423,1045,1086,'OP_EqGuildBankExamineInfoCmd',631,1),(2424,1045,1086,'OP_EqHearSpellNoLandCmd',632,1),(2425,1045,1086,'OP_Lottery',636,1),(2426,1045,1086,'OP_GuildRecruitingMemberInfo',637,1),(2427,1045,1086,'OP_GuildRecruiting',638,1),(2428,1045,1086,'OP_GuildRecruitingDetails',639,1),(2429,1045,1086,'OP_GuildRecruitingImage',640,1),(2430,1045,1086,'OP_PointOfInterest',661,1),(2431,1045,1086,'OP_TraitsList',663,1),(2432,1045,1086,'OP_RecipeList',672,1),(2433,1045,1086,'OP_CharacterAchievements',674,1),(2434,1045,1086,'OP_AddClientToGroupMsg',1054,1),(2435,1045,1086,'OP_AddGroupToGroupMsg',1054,1),(2436,1045,1086,'OP_GuildKickMsg',1054,1),(2437,1045,1086,'OP_ProcessScriptMsg',1054,1),(2438,1045,1086,'OP_ProcessWorkspaceMsg',1054,1),(2439,1045,1086,'OP_PurchaseConsignmentResponseMsg',1054,1),(2440,1045,1086,'OP_QuickbarAddMsg',1054,1),(2441,1045,1086,'OP_SkillSlotMapping',1054,1),(2442,1045,1086,'OP_Unknown',10058,1),(2443,1045,1086,'OP_WSWeatherUpdateMsg',10059,1),(2444,1096,1096,'OP_LoginRequestMsg',0,1),(2445,1096,1096,'OP_LoginByNumRequestMsg',1,1),(2446,1096,1096,'OP_WSLoginRequestMsg',2,1),(2447,1096,1096,'OP_ESLoginRequestMsg',3,1),(2448,1096,1096,'OP_LoginReplyMsg',4,1),(2449,1096,1096,'OP_WSStatusReplyMsg',5,1),(2450,1096,1096,'OP_WorldStatusChangeMsg',6,1),(2451,1096,1096,'OP_AllWSDescRequestMsg',7,1),(2452,1096,1096,'OP_WorldListMsg',8,1),(2453,1096,1096,'OP_AllCharactersDescRequestMsg',9,1),(2454,1096,1096,'OP_AllCharactersDescReplyMsg',10,1),(2455,1096,1096,'OP_CreateCharacterRequestMsg',11,1),(2456,1096,1096,'OP_CreateCharacterReplyMsg',12,1),(2457,1096,1096,'OP_WSCreateCharacterRequestMsg',13,1),(2458,1096,1096,'OP_WSCreateCharacterReplyMsg',14,1),(2459,1096,1096,'OP_ReskinCharacterRequestMsg',15,1),(2460,1096,1096,'OP_DeleteCharacterRequestMsg',16,1),(2461,1096,1096,'OP_DeleteCharacterReplyMsg',17,1),(2462,1096,1096,'OP_PlayCharacterRequestMsg',18,1),(2463,1096,1096,'OP_PlayCharacterReplyMsg',19,1),(2464,1096,1096,'OP_ExpectClientAsCharacterReplyMs',22,1),(2465,1096,1096,'OP_ServerPlayCharacterRequestMsg',23,1),(2466,1096,1096,'OP_ServerPlayCharacterReplyMsg',24,1),(2467,1096,1096,'OP_ESInitMsg',25,1),(2468,1096,1096,'OP_ESReadyForClientsMsg',26,1),(2469,1096,1096,'OP_CreateZoneInstanceMsg',27,1),(2470,1096,1096,'OP_ZoneInstanceCreateReplyMsg',28,1),(2471,1096,1096,'OP_ZoneInstanceDestroyedMsg',29,1),(2472,1096,1096,'OP_ExpectClientAsCharacterRequest',30,1),(2473,1096,1096,'OP_ZoneInfoMsg',32,1),(2474,1096,1096,'OP_DoneLoadingZoneResourcesMsg',33,1),(2475,1096,1096,'OP_DoneSendingInitialEntitiesMsg',34,1),(2476,1096,1096,'OP_DoneLoadingEntityResourcesMsg',35,1),(2477,1096,1096,'OP_PredictionUpdateMsg',36,1),(2478,1096,1096,'OP_UpdatePositionMsg',38,1),(2479,1096,1096,'OP_SetRemoteCmdsMsg',40,1),(2480,1096,1096,'OP_RemoteCmdMsg',41,1),(2481,1096,1096,'OP_GameWorldTimeMsg',42,1),(2482,1096,1096,'OP_MOTDMsg',43,1),(2483,1096,1096,'OP_ZoneMOTDMsg',44,1),(2484,1096,1096,'OP_AvatarCreatedMsg',45,1),(2485,1096,1096,'OP_AvatarDestroyedMsg',46,1),(2486,1096,1096,'OP_RequestCampMsg',48,1),(2487,1096,1096,'OP_CampStartedMsg',49,1),(2488,1096,1096,'OP_CampAbortedMsg',50,1),(2489,1096,1096,'OP_WhoQueryRequestMsg',51,1),(2490,1096,1096,'OP_WhoQueryReplyMsg',52,1),(2491,1096,1096,'OP_MonitorReplyMsg',53,1),(2492,1096,1096,'OP_MonitorCharacterListMsg',54,1),(2493,1096,1096,'OP_MonitorCharacterListRequestMsg',55,1),(2494,1096,1096,'OP_ClientCmdMsg',56,1),(2495,1096,1096,'OP_DispatchESMsg',57,1),(2496,1096,1096,'OP_DispatchClientCmdMsg',58,1),(2497,1096,1096,'OP_UpdateTargetMsg',59,1),(2498,1096,1096,'OP_UpdateTargetLocMsg',60,1),(2499,1096,1096,'OP_UpdateCharacterSheetMsg',61,1),(2500,1096,1096,'OP_UpdateSpellBookMsg',62,1),(2501,1096,1096,'OP_UpdateInventoryMsg',64,1),(2502,1096,1096,'OP_UpdateRecipeBookMsg',66,1),(2503,1096,1096,'OP_RequestRecipeDetailsMsg',67,1),(2504,1096,1096,'OP_RecipeDetailsMsg',68,1),(2505,1096,1096,'OP_UpdateSkillBookMsg',69,1),(2506,1096,1096,'OP_UpdateSkillsMsg',70,1),(2507,1096,1096,'OP_UpdateOpportunityMsg',71,1),(2508,1096,1096,'OP_ChangeZoneMsg',73,1),(2509,1096,1096,'OP_ClientTeleportRequestMsg',74,1),(2510,1096,1096,'OP_TeleportWithinZoneMsg',75,1),(2511,1096,1096,'OP_TeleportWithinZoneNoReloadMsg',76,1),(2512,1096,1096,'OP_MigrateClientToZoneRequestMsg',77,1),(2513,1096,1096,'OP_MigrateClientToZoneReplyMsg',78,1),(2514,1096,1096,'OP_ReadyToZoneMsg',80,1),(2515,1096,1096,'OP_RemoveClientFromGroupMsg',81,1),(2516,1096,1096,'OP_RemoveGroupFromGroupMsg',82,1),(2517,1096,1096,'OP_MakeGroupLeaderMsg',83,1),(2518,1096,1096,'OP_GroupCreatedMsg',84,1),(2519,1096,1096,'OP_GroupDestroyedMsg',85,1),(2520,1096,1096,'OP_GroupMemberAddedMsg',86,1),(2521,1096,1096,'OP_GroupMemberRemovedMsg',87,1),(2522,1096,1096,'OP_GroupRemovedFromGroupMsg',88,1),(2523,1096,1096,'OP_GroupLeaderChangedMsg',89,1),(2524,1096,1096,'OP_GroupResendOOZDataMsg',90,1),(2525,1096,1096,'OP_GroupSettingsChangedMsg',91,1),(2526,1096,1096,'OP_OutOfZoneMemberDataMsg',92,1),(2527,1096,1096,'OP_SendLatestRequestMsg',93,1),(2528,1096,1096,'OP_ClearDataMsg',94,1),(2529,1096,1096,'OP_SetSocialMsg',95,1),(2530,1096,1096,'OP_ESStatusMsg',96,1),(2531,1096,1096,'OP_ESZoneInstanceStatusMsg',97,1),(2532,1096,1096,'OP_ZonesStatusRequestMsg',98,1),(2533,1096,1096,'OP_ZonesStatusMsg',99,1),(2534,1096,1096,'OP_ESWeatherRequestMsg',100,1),(2535,1096,1096,'OP_ESWeatherRequestEndMsg',101,1),(2536,1096,1096,'OP_DialogSelectMsg',105,1),(2537,1096,1096,'OP_DialogCloseMsg',106,1),(2538,1096,1096,'OP_RemoveSpellEffectMsg',107,1),(2539,1096,1096,'OP_RemoveConcentrationMsg',108,1),(2540,1096,1096,'OP_QuestJournalOpenMsg',109,1),(2541,1096,1096,'OP_QuestJournalInspectMsg',110,1),(2542,1096,1096,'OP_QuestJournalSetVisibleMsg',111,1),(2543,1096,1096,'OP_QuestJournalWaypointMsg',112,1),(2544,1096,1096,'OP_CreateGuildRequestMsg',113,1),(2545,1096,1096,'OP_CreateGuildReplyMsg',114,1),(2546,1096,1096,'OP_GuildsayMsg',115,1),(2547,1096,1096,'OP_FellowshipExpMsg',118,1),(2548,1096,1096,'OP_DeleteGuildMsg',119,1),(2549,1096,1096,'OP_GuildUpdateMsg',120,1),(2550,1096,1096,'OP_ConsignmentCloseStoreMsg',121,1),(2551,1096,1096,'OP_ConsignItemRequestMsg',122,1),(2552,1096,1096,'OP_ConsignItemResponseMsg',123,1),(2553,1096,1096,'OP_PurchaseConsignmentRequestMsg',124,1),(2554,1096,1096,'OP_HouseDeletedRemotelyMsg',125,1),(2555,1096,1096,'OP_UpdateHouseDataMsg',126,1),(2556,1096,1096,'OP_UpdateHouseAccessDataMsg',127,1),(2557,1096,1096,'OP_PlayerHouseBaseScreenMsg',128,1),(2558,1096,1096,'OP_PlayerHousePurchaseScreenMsg',129,1),(2559,1096,1096,'OP_PlayerHouseAccessUpdateMsg',130,1),(2560,1096,1096,'OP_PlayerHouseDisplayStatusMsg',131,1),(2561,1096,1096,'OP_PlayerHouseCloseUIMsg',132,1),(2562,1096,1096,'OP_BuyPlayerHouseMsg',133,1),(2563,1096,1096,'OP_BuyPlayerHouseTintMsg',134,1),(2564,1096,1096,'OP_CollectAllHouseItemsMsg',135,1),(2565,1096,1096,'OP_RelinquishHouseMsg',136,1),(2566,1096,1096,'OP_EnterHouseMsg',137,1),(2567,1096,1096,'OP_ExitHouseMsg',138,1),(2568,1096,1096,'OP_HouseDefaultAccessSetMsg',139,1),(2569,1096,1096,'OP_HouseAccessSetMsg',140,1),(2570,1096,1096,'OP_HouseAccessRemoveMsg',141,1),(2571,1096,1096,'OP_PayHouseUpkeepMsg',142,1),(2572,1096,1096,'OP_MoveableObjectPlacementCriteri',146,1),(2573,1096,1096,'OP_EnterMoveObjectModeMsg',147,1),(2574,1096,1096,'OP_PositionMoveableObject',148,1),(2575,1096,1096,'OP_CancelMoveObjectModeMsg',149,1),(2576,1096,1096,'OP_ShaderCustomizationMsg',150,1),(2577,1096,1096,'OP_ReplaceableSubMeshesMsg',151,1),(2578,1096,1096,'OP_HouseCustomizationScreenMsg',152,1),(2579,1096,1096,'OP_CustomizationPurchaseRequestMs',153,1),(2580,1096,1096,'OP_CustomizationSetRequestMsg',154,1),(2581,1096,1096,'OP_CustomizationReplyMsg',155,1),(2582,1096,1096,'OP_TintWidgetsMsg',156,1),(2583,1096,1096,'OP_ExamineConsignmentRequestMsg',157,1),(2584,1096,1096,'OP_ExamineConsignmentResponseMsg',158,1),(2585,1096,1096,'OP_UISettingsResponseMsg',159,1),(2586,1096,1096,'OP_UIResetMsg',160,1),(2587,1096,1096,'OP_KeymapLoadMsg',161,1),(2588,1096,1096,'OP_KeymapNoneMsg',162,1),(2589,1096,1096,'OP_KeymapDataMsg',163,1),(2590,1096,1096,'OP_KeymapSaveMsg',164,1),(2591,1096,1096,'OP_DispatchSpellCmdMsg',165,1),(2592,1096,1096,'OP_EntityVerbsRequestMsg',166,1),(2593,1096,1096,'OP_EntityVerbsReplyMsg',167,1),(2594,1096,1096,'OP_EntityVerbsVerbMsg',168,1),(2595,1096,1096,'OP_ChatRelationshipUpdateMsg',170,1),(2596,1096,1096,'OP_LootItemsRequestMsg',171,1),(2597,1096,1096,'OP_StoppedLootingMsg',172,1),(2598,1096,1096,'OP_SitMsg',173,1),(2599,1096,1096,'OP_StandMsg',174,1),(2600,1096,1096,'OP_SatMsg',175,1),(2601,1096,1096,'OP_StoodMsg',176,1),(2602,1096,1096,'OP_ClearForTakeOffMsg',177,1),(2603,1096,1096,'OP_ReadyForTakeOffMsg',178,1),(2604,1096,1096,'OP_ShowIllusionsMsg',179,1),(2605,1096,1096,'OP_HideIllusionsMsg',180,1),(2606,1096,1096,'OP_ExamineItemRequestMsg',181,1),(2607,1096,1096,'OP_ReadBookPageMsg',182,1),(2608,1096,1096,'OP_DefaultGroupOptionsRequestMsg',183,1),(2609,1096,1096,'OP_DefaultGroupOptionsMsg',184,1),(2610,1096,1096,'OP_GroupOptionsMsg',185,1),(2611,1096,1096,'OP_DisplayGroupOptionsScreenMsg',186,1),(2612,1096,1096,'OP_DisplayInnVisitScreenMsg',188,1),(2613,1096,1096,'OP_DumpSchedulerMsg',189,1),(2614,1096,1096,'OP_LSRequestPlayerDescMsg',190,1),(2615,1096,1096,'OP_LSCheckAcctLockMsg',191,1),(2616,1096,1096,'OP_WSAcctLockStatusMsg',192,1),(2617,1096,1096,'OP_RequestHelpRepathMsg',193,1),(2618,1096,1096,'OP_RequestTargetLocMsg',194,1),(2619,1096,1096,'OP_UpdateMotdMsg',195,1),(2620,1096,1096,'OP_PerformPlayerKnockbackMsg',197,1),(2621,1096,1096,'OP_PerformCameraShakeMsg',198,1),(2622,1096,1096,'OP_PopulateSkillMapsMsg',199,1),(2623,1096,1096,'OP_CancelledFeignMsg',201,1),(2624,1096,1096,'OP_SignalMsg',202,1),(2625,1096,1096,'OP_ShowCreateFromRecipeUIMsg',203,1),(2626,1096,1096,'OP_CancelCreateFromRecipeMsg',204,1),(2627,1096,1096,'OP_BeginItemCreationMsg',205,1),(2628,1096,1096,'OP_StopItemCreationMsg',206,1),(2629,1096,1096,'OP_ShowItemCreationProcessUIMsg',207,1),(2630,1096,1096,'OP_UpdateItemCreationProcessUIMsg',208,1),(2631,1096,1096,'OP_DisplayTSEventReactionMsg',209,1),(2632,1096,1096,'OP_ShowRecipeBookMsg',210,1),(2633,1096,1096,'OP_KnowledgebaseRequestMsg',211,1),(2634,1096,1096,'OP_KnowledgebaseResponseMsg',212,1),(2635,1096,1096,'OP_CSTicketHeaderRequestMsg',213,1),(2636,1096,1096,'OP_CSTicketInfoMsg',214,1),(2637,1096,1096,'OP_CSTicketCommentRequestMsg',215,1),(2638,1096,1096,'OP_CSTicketCommentResponseMsg',216,1),(2639,1096,1096,'OP_CSTicketCreateMsg',217,1),(2640,1096,1096,'OP_CSTicketAddCommentMsg',218,1),(2641,1096,1096,'OP_CSTicketDeleteMsg',219,1),(2642,1096,1096,'OP_CSTicketChangeNotificationMsg',220,1),(2643,1096,1096,'OP_WorldDataUpdateMsg',221,1),(2644,1096,1096,'OP_KnownLanguagesMsg',222,1),(2645,1096,1096,'OP_LsRequestClientCrashLogMsg',223,1),(2646,1096,1096,'OP_LsClientBaselogReplyMsg',224,1),(2647,1096,1096,'OP_LsClientCrashlogReplyMsg',225,1),(2648,1096,1096,'OP_LsClientAlertlogReplyMsg',226,1),(2649,1096,1096,'OP_LsClientVerifylogReplyMsg',227,1),(2650,1096,1096,'OP_ClientTeleportToLocationMsg',228,1),(2651,1096,1096,'OP_UpdateClientPredFlagsMsg',229,1),(2652,1096,1096,'OP_ChangeServerControlFlagMsg',230,1),(2653,1096,1096,'OP_CSToolsRequestMsg',231,1),(2654,1096,1096,'OP_CSToolsResponseMsg',232,1),(2655,1096,1096,'OP_AddSocialStructureStandingMsg',233,1),(2656,1096,1096,'OP_CreateBoatTransportsMsg',234,1),(2657,1096,1096,'OP_PositionBoatTransportMsg',235,1),(2658,1096,1096,'OP_MigrateBoatTransportMsg',236,1),(2659,1096,1096,'OP_MigrateBoatTransportReplyMsg',237,1),(2660,1096,1096,'OP_DisplayDebugNLLPointsMsg',238,1),(2661,1096,1096,'OP_ExamineInfoRequestMsg',239,1),(2662,1096,1096,'OP_QuickbarInitMsg',240,1),(2663,1096,1096,'OP_QuickbarUpdateMsg',241,1),(2664,1096,1096,'OP_MacroInitMsg',242,1),(2665,1096,1096,'OP_MacroUpdateMsg',243,1),(2666,1096,1096,'OP_QuestionnaireMsg',244,1),(2667,1096,1096,'OP_LevelChangedMsg',245,1),(2668,1096,1096,'OP_SpellGainedMsg',246,1),(2669,1096,1096,'OP_EncounterBrokenMsg',247,1),(2670,1096,1096,'OP_OnscreenMsgMsg',248,1),(2671,1096,1096,'OP_DisplayWarningMsg',249,1),(2672,1096,1096,'OP_ModifyGuildMsg',250,1),(2673,1096,1096,'OP_GuildEventMsg',251,1),(2674,1096,1096,'OP_GuildEventAddMsg',252,1),(2675,1096,1096,'OP_GuildEventActionMsg',253,1),(2676,1096,1096,'OP_GuildEventListMsg',254,1),(2677,1096,1096,'OP_RequestGuildEventDetailsMsg',255,1),(2678,1096,1096,'OP_GuildEventDetailsMsg',256,1),(2679,1096,1096,'OP_RequestGuildInfoMsg',257,1),(2680,1096,1096,'OP_GuildBankActionMsg',258,1),(2681,1096,1096,'OP_GuildBankActionResponseMsg',259,1),(2682,1096,1096,'OP_GuildBankItemDetailsRequestMsg',260,1),(2683,1096,1096,'OP_GuildBankItemDetailsResponseMs',261,1),(2684,1096,1096,'OP_GuildBankUpdateMsg',262,1),(2685,1096,1096,'OP_GuildBankEventListMsg',263,1),(2686,1096,1096,'OP_RequestGuildBankEventDetailsMs',264,1),(2687,1096,1096,'OP_RewardPackMsg',265,1),(2688,1096,1096,'OP_RenameGuildMsg',266,1),(2689,1096,1096,'OP_ZoneToFriendRequestMsg',268,1),(2690,1096,1096,'OP_ZoneToFriendReplyMsg',269,1),(2691,1096,1096,'OP_ChatCreateChannelMsg',270,1),(2692,1096,1096,'OP_ChatJoinChannelMsg',271,1),(2693,1096,1096,'OP_ChatWhoChannelMsg',272,1),(2694,1096,1096,'OP_ChatLeaveChannelMsg',273,1),(2695,1096,1096,'OP_ChatTellChannelMsg',274,1),(2696,1096,1096,'OP_ChatTellUserMsg',275,1),(2697,1096,1096,'OP_ChatToggleFriendMsg',276,1),(2698,1096,1096,'OP_ChatToggleIgnoreMsg',277,1),(2699,1096,1096,'OP_ChatSendFriendsMsg',278,1),(2700,1096,1096,'OP_ChatSendIgnoresMsg',279,1),(2701,1096,1096,'OP_QuestReward',304,1),(2702,1096,1096,'OP_ChatFiltersMsg',319,1),(2703,1096,1096,'OP_MailGetHeadersMsg',320,1),(2704,1096,1096,'OP_MailGetMessageMsg',321,1),(2705,1096,1096,'OP_MailSendMessageMsg',322,1),(2706,1096,1096,'OP_MailDeleteMessageMsg',323,1),(2707,1096,1096,'OP_MailGetHeadersReplyMsg',324,1),(2708,1096,1096,'OP_MailGetMessageReplyMsg',325,1),(2709,1096,1096,'OP_MailSendMessageReplyMsg',326,1),(2710,1096,1096,'OP_MailCommitSendMessageMsg',327,1),(2711,1096,1096,'OP_MailSendSystemMessageMsg',328,1),(2712,1096,1096,'OP_MailRemoveAttachFromMailMsg',329,1),(2713,1096,1096,'OP_WaypointRequestMsg',331,1),(2714,1096,1096,'OP_WaypointReplyMsg',332,1),(2715,1096,1096,'OP_WaypointSelectMsg',333,1),(2716,1096,1096,'OP_WaypointUpdateMsg',334,1),(2717,1096,1096,'OP_CharNameChangedMsg',335,1),(2718,1096,1096,'OP_ShowZoneTeleporterDestinations',336,1),(2719,1096,1096,'OP_SelectZoneTeleporterDestinatio',337,1),(2720,1096,1096,'OP_ReloadLocalizedTxtMsg',338,1),(2721,1096,1096,'OP_RequestGuildMembershipMsg',339,1),(2722,1096,1096,'OP_GuildMembershipResponseMsg',340,1),(2723,1096,1096,'OP_LeaveGuildNotifyMsg',341,1),(2724,1096,1096,'OP_JoinGuildNotifyMsg',342,1),(2725,1096,1096,'OP_AvatarUpdateMsg',343,1),(2726,1096,1096,'OP_BioUpdateMsg',345,1),(2727,1096,1096,'OP_InspectPlayerMsg',346,1),(2728,1096,1096,'OP_WSServerLockMsg',347,1),(2729,1096,1096,'OP_LSServerLockMsg',348,1),(2730,1096,1096,'OP_WSServerHideMsg',349,1),(2731,1096,1096,'OP_CsCategoryRequestMsg',350,1),(2732,1096,1096,'OP_CsCategoryResponseMsg',351,1),(2733,1096,1096,'OP_KnowledgeWindowSlotMappingMsg',352,1),(2734,1096,1096,'OP_LFGUpdateMsg',3533,1),(2735,1096,1096,'OP_AFKUpdateMsg',353,1),(2736,1096,1096,'OP_AnonUpdateMsg',354,1),(2737,1096,1096,'OP_UpdateActivePublicZonesMsg',355,1),(2738,1096,1096,'OP_UnknownNpcMsg',356,1),(2739,1096,1096,'OP_PromoFlagsDetailsMsg',357,1),(2740,1096,1096,'OP_ConsignViewCreateMsg',358,1),(2741,1096,1096,'OP_ConsignViewGetPageMsg',359,1),(2742,1096,1096,'OP_ConsignViewReleaseMsg',360,1),(2743,1096,1096,'OP_ConsignRemoveItemsMsg',361,1),(2744,1096,1096,'OP_UpdateDebugRadiiMsg',362,1),(2745,1096,1096,'OP_SnoopMsg',363,1),(2746,1096,1096,'OP_ReportMsg',364,1),(2747,1096,1096,'OP_UpdateRaidMsg',365,1),(2748,1096,1096,'OP_ConsignViewSortMsg',366,1),(2749,1096,1096,'OP_TitleUpdateMsg',367,1),(2750,1096,1096,'OP_ClientFellMsg',368,1),(2751,1096,1096,'OP_ClientInDeathRegionMsg',369,1),(2752,1096,1096,'OP_CampClientMsg',370,1),(2753,1096,1096,'OP_CSToolAccessResponseMsg',371,1),(2754,1096,1096,'OP_TrackingUpdateMsg',372,1),(2755,1096,1096,'OP_BeginTrackingMsg',373,1),(2756,1096,1096,'OP_StopTrackingMsg',374,1),(2757,1096,1096,'OP_GetAvatarAccessRequestForCSToo',375,1),(2758,1096,1096,'OP_AdvancementRequestMsg',376,1),(2759,1096,1096,'OP_UpdateAvgFrameTimeMsg',377,1),(2760,1096,1096,'OP_MapFogDataInitMsg',378,1),(2761,1096,1096,'OP_MapFogDataUpdateMsg',379,1),(2762,1096,1096,'OP_CloseGroupInviteWindowMsg',380,1),(2763,1096,1096,'OP_UpdateGroupMemberDataMsg',381,1),(2764,1096,1096,'OP_WorldPingMsg',382,1),(2765,1096,1096,'OP_MoveLogUpdateMsg',383,1),(2766,1096,1096,'OP_OfferQuestMsg',384,1),(2767,1096,1096,'OP_WorldShutdownUpdateMsg',385,1),(2768,1096,1096,'OP_DisplayMailScreenMsg',386,1),(2769,1096,1096,'OP_ClientIdleBeginMsg',387,1),(2770,1096,1096,'OP_ClientIdleEndMsg',388,1),(2771,1096,1096,'OP_PurchaseConsignmentLoreCheckRe',389,1),(2772,1096,1096,'OP_NotifyApprenticeStoppedMentori',390,1),(2773,1096,1096,'OP_CorruptedClientMsg',391,1),(2774,1096,1096,'OP_WorldDataChangeMsg',392,1),(2775,1096,1096,'OP_MailEventNotificationMsg',393,1),(2776,1096,1096,'OP_RestartZoneMsg',394,1),(2777,1096,1096,'OP_FlightPathsMsg',395,1),(2778,1096,1096,'OP_CharacterLinkdeadMsg',396,1),(2779,1096,1096,'OP_CharTransferStartRequestMsg',397,1),(2780,1096,1096,'OP_CharTransferStartReplyMsg',398,1),(2781,1096,1096,'OP_CharTransferRequestMsg',399,1),(2782,1096,1096,'OP_CharTransferReplyMsg',400,1),(2783,1096,1096,'OP_CharTransferRollbackRequestMsg',401,1),(2784,1096,1096,'OP_CharTransferCommitRequestMsg',402,1),(2785,1096,1096,'OP_CharTransferRollbackReplyMsg',403,1),(2786,1096,1096,'OP_CharTransferCommitReplyMsg',404,1),(2787,1096,1096,'OP_GetCharacterSerializedRequestM',405,1),(2788,1096,1096,'OP_GetCharacterSerializedReplyMsg',406,1),(2789,1096,1096,'OP_CreateCharFromCBBRequestMsg',407,1),(2790,1096,1096,'OP_CreateCharFromCBBReplyMsg',408,1),(2791,1096,1096,'OP_HousingDataChangedMsg',409,1),(2792,1096,1096,'OP_HousingRestoreMsg',410,1),(2793,1096,1096,'OP_AuctionItem',411,1),(2794,1096,1096,'OP_AuctionItemReply',412,1),(2795,1096,1096,'OP_AuctionCoin',413,1),(2796,1096,1096,'OP_AuctionCoinReply',414,1),(2797,1096,1096,'OP_AuctionCharacter',415,1),(2798,1096,1096,'OP_AuctionCharacterReply',416,1),(2799,1096,1096,'OP_AuctionCommitMsg',417,1),(2800,1096,1096,'OP_AuctionAbortMsg',418,1),(2801,1096,1096,'OP_CharTransferValidateRequestMsg',419,1),(2802,1096,1096,'OP_CharTransferValidateReplyMsg',420,1),(2803,1096,1096,'OP_RaceRestrictionMsg',421,1),(2804,1096,1096,'OP_SetInstanceDisplayNameMsg',422,1),(2805,1096,1096,'OP_GetAuctionAssetIDMsg',423,1),(2806,1096,1096,'OP_GetAuctionAssetIDReplyMsg',424,1),(2807,1096,1096,'OP_ResendWorldChannelsMsg',425,1),(2808,1096,1096,'OP_DisplayExchangeScreenMsg',426,1),(2809,1096,1096,'OP_ArenaGameTypesMsg',428,1),(2810,1096,1096,'OP_AuditAuctionEventMsg',429,1),(2811,1096,1096,'OP_InviteRequestMsg',431,1),(2812,1096,1096,'OP_InviteResponseMsg',432,1),(2813,1096,1096,'OP_InviteTargetResponseMsg',433,1),(2814,1096,1096,'OP_InspectPlayerRequestMsg',434,1),(2815,1096,1096,'OP_DispatchMsg',435,1),(2816,1096,1096,'OP_DisplayEventMsg',436,1),(2817,1096,1096,'OP_PrePossessionMsg',437,1),(2818,1096,1096,'OP_PostPossessionMsg',438,1),(2819,1096,1096,'OP_AdventureList',470,1),(2820,1096,1096,'OP_CancelSpellCast',471,1),(2821,1096,1096,'OP_UpdateTitleCmd',476,1),(2822,1096,1096,'OP_AttackAllowed',482,1),(2823,1096,1096,'OP_AttackNotAllowed',483,1),(2824,1096,1096,'OP_DressingRoom',492,1),(2825,1096,1096,'OP_SkillInfoRequest',496,1),(2826,1096,1096,'OP_SkillInfoResponse',497,1),(2827,1096,1096,'OP_BadLanguageFilter',501,1),(2828,1096,1096,'OP_MapRequest',503,1),(2829,1096,1096,'OP_Unknown',509,1),(2830,1096,1096,'OP_EqUnknown',541,1),(2831,1096,1096,'OP_EqHearChatCmd',543,1),(2832,1096,1096,'OP_EqDisplayTextCmd',544,1),(2833,1096,1096,'OP_EqCreateGhostCmd',545,1),(2834,1096,1096,'OP_EqCreateWidgetCmd',546,1),(2835,1096,1096,'OP_EqCreateSignWidgetCmd',547,1),(2836,1096,1096,'OP_EqDestroyGhostCmd',548,1),(2837,1096,1096,'OP_EqUpdateGhostCmd',549,1),(2838,1096,1096,'OP_EqSetControlGhostCmd',550,1),(2839,1096,1096,'OP_EqSetPOVGhostCmd',551,1),(2840,1096,1096,'OP_EqHearCombatCmd',552,1),(2841,1096,1096,'OP_EqHearSpellCastCmd',553,1),(2842,1096,1096,'OP_EqHearSpellInterruptCmd',556,1),(2843,1096,1096,'OP_EqHearSpellFizzleCmd',557,1),(2844,1096,1096,'OP_EqHearConsiderCmd',558,1),(2845,1096,1096,'OP_EqUpdateSubClassesCmd',559,1),(2846,1096,1096,'OP_EqCreateListBoxCmd',560,1),(2847,1096,1096,'OP_EqSetDebugPathPointsCmd',561,1),(2848,1096,1096,'OP_EqCannedEmoteCmd',563,1),(2849,1096,1096,'OP_EqStateCmd',564,1),(2850,1096,1096,'OP_EqPlaySoundCmd',565,1),(2851,1096,1096,'OP_EqPlaySound3DCmd',566,1),(2852,1096,1096,'OP_EqPlayVoiceCmd',567,1),(2853,1096,1096,'OP_EqHearDrowningCmd',568,1),(2854,1096,1096,'OP_EqHearDeathCmd',569,1),(2855,1096,1096,'OP_EqGroupMemberRemovedCmd',570,1),(2856,1096,1096,'OP_EqHearChainEffectCmd',571,1),(2857,1096,1096,'OP_EqReceiveOfferCmd',572,1),(2858,1096,1096,'OP_EqInspectPCResultsCmd',573,1),(2859,1096,1096,'OP_EqDrawablePathGraphCmd',574,1),(2860,1096,1096,'OP_EqDialogOpenCmd',575,1),(2861,1096,1096,'OP_EqDialogCloseCmd',576,1),(2862,1096,1096,'OP_EqFactionUpdateCmd',577,1),(2863,1096,1096,'OP_EqCollectionUpdateCmd',578,1),(2864,1096,1096,'OP_EqCollectionFilterCmd',579,1),(2865,1096,1096,'OP_EqCollectionItemCmd',580,1),(2866,1096,1096,'OP_EqQuestJournalUpdateCmd',581,1),(2867,1096,1096,'OP_EqQuestJournalReplyCmd',583,1),(2868,1096,1096,'OP_EqQuestGroupCmd',584,1),(2869,1096,1096,'OP_EqUpdateMerchantCmd',585,1),(2870,1096,1096,'OP_EqUpdateStoreCmd',586,1),(2871,1096,1096,'OP_EqUpdatePlayerTradeCmd',587,1),(2872,1096,1096,'OP_EqHelpPathCmd',588,1),(2873,1096,1096,'OP_EqHelpPathClearCmd',589,1),(2874,1096,1096,'OP_EqUpdateBankCmd',590,1),(2875,1096,1096,'OP_EqExamineInfoCmd',591,1),(2876,1096,1096,'OP_EqCloseWindowCmd',592,1),(2877,1096,1096,'OP_EqUpdateLootCmd',593,1),(2878,1096,1096,'OP_EqJunctionListCmd',594,1),(2879,1096,1096,'OP_EqShowDeathWindowCmd',595,1),(2880,1096,1096,'OP_EqDisplaySpellFailCmd',596,1),(2881,1096,1096,'OP_EqSpellCastStartCmd',597,1),(2882,1096,1096,'OP_EqSpellCastEndCmd',598,1),(2883,1096,1096,'OP_EqResurrectedCmd',599,1),(2884,1096,1096,'OP_EqChoiceWinCmd',600,1),(2885,1096,1096,'OP_EqSetDefaultVerbCmd',601,1),(2886,1096,1096,'OP_EqInstructionWindowCmd',603,1),(2887,1096,1096,'OP_EqInstructionWindowCloseCmd',604,1),(2888,1096,1096,'OP_EqInstructionWindowGoalCmd',605,1),(2889,1096,1096,'OP_EqInstructionWindowTaskCmd',606,1),(2890,1096,1096,'OP_EqEnableGameEventCmd',607,1),(2891,1096,1096,'OP_EqShowWindowCmd',608,1),(2892,1096,1096,'OP_EqEnableWindowCmd',609,1),(2893,1096,1096,'OP_EqFlashWindowCmd',610,1),(2894,1096,1096,'OP_EqHearPlayFlavorCmd',611,1),(2895,1096,1096,'OP_EqUpdateSignWidgetCmd',613,1),(2896,1096,1096,'OP_EqDebugPVDCmd',614,1),(2897,1096,1096,'OP_EqShowBookCmd',614,1),(2898,1096,1096,'OP_EqQuestionnaireCmd',616,1),(2899,1096,1096,'OP_EqGetProbsCmd',617,1),(2900,1096,1096,'OP_EqHearHealCmd',618,1),(2901,1096,1096,'OP_EqChatChannelUpdateCmd',619,1),(2902,1096,1096,'OP_EqWhoChannelQueryReplyCmd',620,1),(2903,1096,1096,'OP_EqAvailWorldChannelsCmd',621,1),(2904,1096,1096,'OP_EqUpdateTargetCmd',622,1),(2905,1096,1096,'OP_EqConsignmentItemsCmd',624,1),(2906,1096,1096,'OP_EqStartBrokerCmd',626,1),(2907,1096,1096,'OP_EqMapExplorationCmd',627,1),(2908,1096,1096,'OP_EqStoreLogCmd',628,1),(2909,1096,1096,'OP_EqSpellMoveToRangeAndRetryCmd',629,1),(2910,1096,1096,'OP_EqUpdatePlayerMailCmd',630,1),(2911,1096,1096,'OP_EqArenaResultsCmd',631,1),(2912,1096,1096,'OP_EqGuildBankEventActionCmd',632,1),(2913,1096,1096,'OP_EqGuildBankExamineInfoCmd',633,1),(2914,1096,1096,'OP_EqHearSpellNoLandCmd',634,1),(2915,1096,1096,'OP_GuildList',637,1),(2916,1096,1096,'OP_Lottery',638,1),(2917,1096,1096,'OP_GuildRecruitingMemberInfo',639,1),(2918,1096,1096,'OP_GuildRecruiting',640,1),(2919,1096,1096,'OP_GuildRecruitingDetails',641,1),(2920,1096,1096,'OP_GuildRecruitingImage',642,1),(2921,1096,1096,'OP_TradeskillList',659,1),(2922,1096,1096,'OP_PointOfInterest',663,1),(2923,1096,1096,'OP_TraitsList',665,1),(2924,1096,1096,'OP_RecipeList',674,1),(2925,1096,1096,'OP_CharacterAchievements',677,1),(2926,1096,1096,'OP_AddClientToGroupMsg',999,1),(2927,1096,1096,'OP_AddGroupToGroupMsg',1000,1),(2928,1096,1096,'OP_WSWeatherUpdateMsg',1001,1),(2929,1096,1096,'OP_SkillSlotMapping',1002,1),(2930,1096,1096,'OP_GuildKickMsg',1003,1),(2931,1096,1096,'OP_PurchaseConsignmentResponseMsg',1004,1),(2932,1096,1096,'OP_ProcessScriptMsg',1005,1),(2933,1096,1096,'OP_ProcessWorkspaceMsg',1006,1),(2934,1096,1096,'OP_QuickbarAddMsg',1007,1),(2935,0,0,'OP_BagOptions',999,1),(2936,839,844,'OP_BagOptions',999,1),(2937,908,927,'OP_BagOptions',999,1),(2938,1008,1011,'OP_BagOptions',999,1),(2939,1045,1086,'OP_BagOptions',999,1),(2940,1096,1096,'OP_BagOptions',999,1),(2941,0,0,'OP_AchievementUpdateMsg',999,1),(2942,839,844,'OP_AchievementUpdateMsg',999,1),(2943,908,927,'OP_AchievementUpdateMsg',999,1),(2944,1008,1011,'OP_AchievementUpdateMsg',999,1),(2945,1045,1086,'OP_AchievementUpdateMsg',999,1),(2946,1096,1096,'OP_AchievementUpdateMsg',678,1),(2947,1096,1096,'OP_PetOptions',187,1),(2948,1045,1086,'OP_PetOptions',999,1),(2949,1008,1011,'OP_PetOptions',999,1),(2950,908,927,'OP_PetOptions',999,1),(2951,839,844,'OP_PetOptions',999,1),(2952,0,0,'OP_PetOptions',999,1),(2953,1193,1195,'OP_LoginRequestMsg',0,1),(2954,1193,1195,'OP_LoginByNumRequestMsg',1,1),(2955,1193,1195,'OP_WSLoginRequestMsg',2,1),(2956,1193,1195,'OP_ESLoginRequestMsg',3,1),(2957,1193,1195,'OP_LoginReplyMsg',4,1),(2958,1193,1195,'OP_WSStatusReplyMsg',5,1),(2959,1193,1195,'OP_WorldStatusChangeMsg',6,1),(2960,1193,1195,'OP_AllWSDescRequestMsg',7,1),(2961,1193,1195,'OP_WorldListMsg',8,1),(2962,1193,1195,'OP_AllCharactersDescRequestMsg',9,1),(2963,1193,1195,'OP_AllCharactersDescReplyMsg',10,1),(2964,1193,1195,'OP_CreateCharacterRequestMsg',11,1),(2965,1193,1195,'OP_CreateCharacterReplyMsg',12,1),(2966,1193,1195,'OP_WSCreateCharacterRequestMsg',13,1),(2967,1193,1195,'OP_WSCreateCharacterReplyMsg',14,1),(2968,1193,1195,'OP_ReskinCharacterRequestMsg',15,1),(2969,1193,1195,'OP_DeleteCharacterRequestMsg',16,1),(2970,1193,1195,'OP_DeleteCharacterReplyMsg',17,1),(2971,1193,1195,'OP_PlayCharacterRequestMsg',18,1),(2972,1193,1195,'OP_PlayCharacterReplyMsg',19,1),(2973,1193,1195,'OP_ExpectClientAsCharacterReplyMs',22,1),(2974,1193,1195,'OP_ServerPlayCharacterRequestMsg',23,1),(2975,1193,1195,'OP_ServerPlayCharacterReplyMsg',24,1),(2976,1193,1195,'OP_ESInitMsg',25,1),(2977,1193,1195,'OP_ESReadyForClientsMsg',26,1),(2978,1193,1195,'OP_CreateZoneInstanceMsg',29,1),(2979,1193,1195,'OP_ZoneInstanceCreateReplyMsg',30,1),(2980,1193,1195,'OP_ZoneInstanceDestroyedMsg',31,1),(2981,1193,1195,'OP_ExpectClientAsCharacterRequest',32,1),(2982,1193,1195,'OP_ZoneInfoMsg',33,1),(2983,1193,1195,'OP_DoneLoadingZoneResourcesMsg',34,1),(2984,1193,1195,'OP_DoneSendingInitialEntitiesMsg',35,1),(2985,1193,1195,'OP_DoneLoadingEntityResourcesMsg',36,1),(2986,1193,1195,'OP_PredictionUpdateMsg',37,1),(2987,1193,1195,'OP_UpdatePositionMsg',39,1),(2988,1193,1195,'OP_SetRemoteCmdsMsg',41,1),(2989,1193,1195,'OP_RemoteCmdMsg',42,1),(2990,1193,1195,'OP_GameWorldTimeMsg',43,1),(2991,1193,1195,'OP_MOTDMsg',44,1),(2992,1193,1195,'OP_ZoneMOTDMsg',45,1),(2993,1193,1195,'OP_AvatarCreatedMsg',46,1),(2994,1193,1195,'OP_AvatarDestroyedMsg',47,1),(2995,1193,1195,'OP_RequestCampMsg',50,1),(2996,1193,1195,'OP_CampStartedMsg',51,1),(2997,1193,1195,'OP_CampAbortedMsg',52,1),(2998,1193,1195,'OP_WhoQueryRequestMsg',53,1),(2999,1193,1195,'OP_WhoQueryReplyMsg',54,1),(3000,1193,1195,'OP_MonitorReplyMsg',55,1),(3001,1193,1195,'OP_MonitorCharacterListMsg',56,1),(3002,1193,1195,'OP_MonitorCharacterListRequestMsg',57,1),(3003,1193,1195,'OP_ClientCmdMsg',58,1),(3004,1193,1195,'OP_DispatchESMsg',59,1),(3005,1193,1195,'OP_DispatchClientCmdMsg',60,1),(3006,1193,1195,'OP_UpdateTargetMsg',61,1),(3007,1193,1195,'OP_UpdateTargetLocMsg',62,1),(3008,1193,1195,'OP_UpdateCharacterSheetMsg',63,1),(3009,1193,1195,'OP_CharacterPet',64,1),(3010,1193,1195,'OP_CharacterMerc',65,1),(3011,1193,1195,'OP_UpdateSpellBookMsg',66,1),(3012,1193,1195,'OP_UpdateInventoryMsg',68,1),(3013,1193,1195,'OP_AfterInvSpellUpdate',69,1),(3014,1193,1195,'OP_UpdateRecipeBookMsg',70,1),(3015,1193,1195,'OP_RequestRecipeDetailsMsg',71,1),(3016,1193,1195,'OP_RecipeDetailsMsg',72,1),(3017,1193,1195,'OP_UpdateSkillBookMsg',73,1),(3018,1193,1195,'OP_UpdateSkillsMsg',74,1),(3019,1193,1195,'OP_UpdateOpportunityMsg',75,1),(3020,1193,1195,'OP_ChangeZoneMsg',77,1),(3021,1193,1195,'OP_ClientTeleportRequestMsg',78,1),(3022,1193,1195,'OP_TeleportWithinZoneMsg',79,1),(3023,1193,1195,'OP_TeleportWithinZoneNoReloadMsg',80,1),(3024,1193,1195,'OP_MigrateClientToZoneRequestMsg',81,1),(3025,1193,1195,'OP_MigrateClientToZoneReplyMsg',82,1),(3026,1193,1195,'OP_ReadyToZoneMsg',84,1),(3027,1193,1195,'OP_RemoveClientFromGroupMsg',85,1),(3028,1193,1195,'OP_RemoveGroupFromGroupMsg',86,1),(3029,1193,1195,'OP_MakeGroupLeaderMsg',87,1),(3030,1193,1195,'OP_GroupCreatedMsg',88,1),(3031,1193,1195,'OP_GroupDestroyedMsg',89,1),(3032,1193,1195,'OP_GroupMemberAddedMsg',90,1),(3033,1193,1195,'OP_GroupMemberRemovedMsg',91,1),(3034,1193,1195,'OP_GroupRemovedFromGroupMsg',92,1),(3035,1193,1195,'OP_GroupLeaderChangedMsg',93,1),(3036,1193,1195,'OP_GroupResendOOZDataMsg',94,1),(3037,1193,1195,'OP_GroupSettingsChangedMsg',95,1),(3038,1193,1195,'OP_OutOfZoneMemberDataMsg',96,1),(3039,1193,1195,'OP_SendLatestRequestMsg',97,1),(3040,1193,1195,'OP_ClearDataMsg',98,1),(3041,1193,1195,'OP_SetSocialMsg',99,1),(3042,1193,1195,'OP_ESStatusMsg',100,1),(3043,1193,1195,'OP_ESZoneInstanceStatusMsg',101,1),(3044,1193,1195,'OP_ZonesStatusRequestMsg',102,1),(3045,1193,1195,'OP_ZonesStatusMsg',103,1),(3046,1193,1195,'OP_ESWeatherRequestMsg',104,1),(3047,1193,1195,'OP_ESWeatherRequestEndMsg',105,1),(3048,1193,1195,'OP_DialogSelectMsg',109,1),(3049,1193,1195,'OP_DialogCloseMsg',110,1),(3050,1193,1195,'OP_RemoveSpellEffectMsg',111,1),(3051,1193,1195,'OP_RemoveConcentrationMsg',112,1),(3052,1193,1195,'OP_QuestJournalOpenMsg',113,1),(3053,1193,1195,'OP_QuestJournalInspectMsg',114,1),(3054,1193,1195,'OP_QuestJournalSetVisibleMsg',115,1),(3055,1193,1195,'OP_QuestJournalWaypointMsg',116,1),(3056,1193,1195,'OP_CreateGuildRequestMsg',119,1),(3057,1193,1195,'OP_CreateGuildReplyMsg',120,1),(3058,1193,1195,'OP_GuildsayMsg',121,1),(3059,1193,1195,'OP_FellowshipExpMsg',122,1),(3060,1193,1195,'OP_DeleteGuildMsg',123,1),(3061,1193,1195,'OP_GuildUpdateMsg',124,1),(3062,1193,1195,'OP_ConsignmentCloseStoreMsg',125,1),(3063,1193,1195,'OP_ConsignItemRequestMsg',126,1),(3064,1193,1195,'OP_ConsignItemResponseMsg',127,1),(3065,1193,1195,'OP_PurchaseConsignmentRequestMsg',128,1),(3066,1193,1195,'OP_LikeOption',135,1),(3067,1193,1195,'OP_PublishHouse',137,1),(3068,1193,1195,'OP_PlayerMadeInstacnesScreen',138,1),(3069,1193,1195,'OP_PlayerMadeInstances',139,1),(3070,1193,1195,'OP_HouseDeletedRemotelyMsg',140,1),(3071,1193,1195,'OP_UpdateHouseDataMsg',141,1),(3072,1193,1195,'OP_UpdateHouseAccessDataMsg',142,1),(3073,1193,1195,'OP_PlayerHouseBaseScreenMsg',143,1),(3074,1193,1195,'OP_PlayerHousePurchaseScreenMsg',144,1),(3075,1193,1195,'OP_PlayerHouseAccessUpdateMsg',145,1),(3076,1193,1195,'OP_PlayerHouseDisplayStatusMsg',146,1),(3077,1193,1195,'OP_PlayerHouseCloseUIMsg',147,1),(3078,1193,1195,'OP_BuyPlayerHouseMsg',148,1),(3079,1193,1195,'OP_BuyPlayerHouseTintMsg',149,1),(3080,1193,1195,'OP_CollectAllHouseItemsMsg',150,1),(3081,1193,1195,'OP_RelinquishHouseMsg',151,1),(3082,1193,1195,'OP_EnterHouseMsg',152,1),(3083,1193,1195,'OP_ExitHouseMsg',153,1),(3084,1193,1195,'OP_HouseDefaultAccessSetMsg',154,1),(3085,1193,1195,'OP_HouseAccessSetMsg',155,1),(3086,1193,1195,'OP_HouseAccessRemoveMsg',156,1),(3087,1193,1195,'OP_PayHouseUpkeepMsg',157,1),(3088,1193,1195,'OP_MoveableObjectPlacementCriteri',158,1),(3089,1193,1195,'OP_EnterMoveObjectModeMsg',159,1),(3090,1193,1195,'OP_PositionMoveableObject',160,1),(3091,1193,1195,'OP_CancelMoveObjectModeMsg',161,1),(3092,1193,1195,'OP_ShaderCustomizationMsg',162,1),(3093,1193,1195,'OP_ReplaceableSubMeshesMsg',163,1),(3094,1193,1195,'OP_HouseCustomizationScreenMsg',164,1),(3095,1193,1195,'OP_CustomizationPurchaseRequestMs',165,1),(3096,1193,1195,'OP_CustomizationSetRequestMsg',166,1),(3097,1193,1195,'OP_CustomizationReplyMsg',167,1),(3098,1193,1195,'OP_TintWidgetsMsg',168,1),(3099,1193,1195,'OP_ExamineConsignmentRequestMsg',169,1),(3100,1193,1195,'OP_ExamineConsignmentResponseMsg',170,1),(3101,1193,1195,'OP_UISettingsResponseMsg',171,1),(3102,1193,1195,'OP_UIResetMsg',172,1),(3103,1193,1195,'OP_KeymapLoadMsg',173,1),(3104,1193,1195,'OP_KeymapNoneMsg',174,1),(3105,1193,1195,'OP_KeymapDataMsg',175,1),(3106,1193,1195,'OP_KeymapSaveMsg',176,1),(3107,1193,1195,'OP_DispatchSpellCmdMsg',177,1),(3108,1193,1195,'OP_EntityVerbsRequestMsg',178,1),(3109,1193,1195,'OP_EntityVerbsReplyMsg',179,1),(3110,1193,1195,'OP_EntityVerbsVerbMsg',180,1),(3111,1193,1195,'OP_ChatRelationshipUpdateMsg',182,1),(3112,1193,1195,'OP_LootItemsRequestMsg',183,1),(3113,1193,1195,'OP_StoppedLootingMsg',184,1),(3114,1193,1195,'OP_SitMsg',185,1),(3115,1193,1195,'OP_StandMsg',186,1),(3116,1193,1195,'OP_SatMsg',187,1),(3117,1193,1195,'OP_StoodMsg',188,1),(3118,1193,1195,'OP_ClearForTakeOffMsg',189,1),(3119,1193,1195,'OP_ReadyForTakeOffMsg',190,1),(3120,1193,1195,'OP_ShowIllusionsMsg',191,1),(3121,1193,1195,'OP_HideIllusionsMsg',192,1),(3122,1193,1195,'OP_ExamineItemRequestMsg',193,1),(3123,1193,1195,'OP_ReadBookPageMsg',194,1),(3124,1193,1195,'OP_DefaultGroupOptionsRequestMsg',195,1),(3125,1193,1195,'OP_DefaultGroupOptionsMsg',196,1),(3126,1193,1195,'OP_GroupOptionsMsg',197,1),(3127,1193,1195,'OP_DisplayGroupOptionsScreenMsg',198,1),(3128,1193,1195,'OP_PetOptions',199,1),(3129,1193,1195,'OP_DisplayInnVisitScreenMsg',200,1),(3130,1193,1195,'OP_DumpSchedulerMsg',201,1),(3131,1193,1195,'OP_LSCheckAcctLockMsg',202,1),(3132,1193,1195,'OP_WSAcctLockStatusMsg',203,1),(3133,1193,1195,'OP_RequestHelpRepathMsg',204,1),(3134,1193,1195,'OP_RequestTargetLocMsg',205,1),(3135,1193,1195,'OP_UpdateMotdMsg',206,1),(3136,1193,1195,'OP_DestUpdateReq',208,1),(3137,1193,1195,'OP_PerformPlayerKnockbackMsg',211,1),(3138,1193,1195,'OP_PerformCameraShakeMsg',212,1),(3139,1193,1195,'OP_PopulateSkillMapsMsg',213,1),(3140,1193,1195,'OP_CancelledFeignMsg',214,1),(3141,1193,1195,'OP_SysClient',216,1),(3142,1193,1195,'OP_ShowCreateFromRecipeUIMsg',217,1),(3143,1193,1195,'OP_CancelCreateFromRecipeMsg',218,1),(3144,1193,1195,'OP_BeginItemCreationMsg',219,1),(3145,1193,1195,'OP_StopItemCreationMsg',220,1),(3146,1193,1195,'OP_ShowItemCreationProcessUIMsg',221,1),(3147,1193,1195,'OP_UpdateItemCreationProcessUIMsg',222,1),(3148,1193,1195,'OP_DisplayTSEventReactionMsg',223,1),(3149,1193,1195,'OP_ShowRecipeBookMsg',224,1),(3150,1193,1195,'OP_KnowledgebaseRequestMsg',225,1),(3151,1193,1195,'OP_KnowledgebaseResponseMsg',226,1),(3152,1193,1195,'OP_CSTicketHeaderRequestMsg',227,1),(3153,1193,1195,'OP_CSTicketInfoMsg',228,1),(3154,1193,1195,'OP_CSTicketCommentRequestMsg',229,1),(3155,1193,1195,'OP_CSTicketCommentResponseMsg',230,1),(3156,1193,1195,'OP_CSTicketCreateMsg',231,1),(3157,1193,1195,'OP_CSTicketAddCommentMsg',232,1),(3158,1193,1195,'OP_CSTicketDeleteMsg',233,1),(3159,1193,1195,'OP_CSTicketChangeNotificationMsg',234,1),(3160,1193,1195,'OP_WorldDataUpdateMsg',235,1),(3161,1193,1195,'OP_KnownLanguagesMsg',236,1),(3162,1193,1195,'OP_LsRequestClientCrashLogMsg',237,1),(3163,1193,1195,'OP_LsClientBaselogReplyMsg',238,1),(3164,1193,1195,'OP_LsClientCrashlogReplyMsg',239,1),(3165,1193,1195,'OP_LsClientAlertlogReplyMsg',240,1),(3166,1193,1195,'OP_LsClientVerifylogReplyMsg',241,1),(3167,1193,1195,'OP_ClientTeleportToLocationMsg',242,1),(3168,1193,1195,'OP_UpdateClientPredFlagsMsg',243,1),(3169,1193,1195,'OP_ChangeServerControlFlagMsg',244,1),(3170,1193,1195,'OP_CSToolsRequestMsg',245,1),(3171,1193,1195,'OP_CSToolsResponseMsg',246,1),(3172,1193,1195,'OP_AddSocialStructureStandingMsg',247,1),(3173,1193,1195,'OP_CreateBoatTransportsMsg',248,1),(3174,1193,1195,'OP_PositionBoatTransportMsg',249,1),(3175,1193,1195,'OP_MigrateBoatTransportMsg',250,1),(3176,1193,1195,'OP_MigrateBoatTransportReplyMsg',251,1),(3177,1193,1195,'OP_DisplayDebugNLLPointsMsg',252,1),(3178,1193,1195,'OP_ExamineInfoRequestMsg',253,1),(3179,1193,1195,'OP_QuickbarInitMsg',254,1),(3180,1193,1195,'OP_QuickbarUpdateMsg',255,1),(3181,1193,1195,'OP_MacroInitMsg',256,1),(3182,1193,1195,'OP_MacroUpdateMsg',257,1),(3183,1193,1195,'OP_QuestionnaireMsg',258,1),(3184,1193,1195,'OP_LevelChangedMsg',259,1),(3185,1193,1195,'OP_SpellGainedMsg',260,1),(3186,1193,1195,'OP_EncounterBrokenMsg',261,1),(3187,1193,1195,'OP_OnscreenMsgMsg',262,1),(3188,1193,1195,'OP_DisplayWarningMsg',263,1),(3189,1193,1195,'OP_ModifyGuildMsg',264,1),(3190,1193,1195,'OP_GuildEventMsg',265,1),(3191,1193,1195,'OP_GuildEventAddMsg',266,1),(3192,1193,1195,'OP_GuildEventActionMsg',267,1),(3193,1193,1195,'OP_GuildEventListMsg',268,1),(3194,1193,1195,'OP_RequestGuildEventDetailsMsg',269,1),(3195,1193,1195,'OP_GuildEventDetailsMsg',270,1),(3196,1193,1195,'OP_RequestGuildInfoMsg',271,1),(3197,1193,1195,'OP_GuildBankActionMsg',272,1),(3198,1193,1195,'OP_GuildBankActionResponseMsg',273,1),(3199,1193,1195,'OP_GuildBankItemDetailsRequestMsg',274,1),(3200,1193,1195,'OP_GuildBankItemDetailsResponseMs',275,1),(3201,1193,1195,'OP_GuildBankUpdateMsg',276,1),(3202,1193,1195,'OP_GuildBankEventListMsg',277,1),(3203,1193,1195,'OP_RequestGuildBankEventDetailsMs',278,1),(3204,1193,1195,'OP_RewardPackMsg',279,1),(3205,1193,1195,'OP_RenameGuildMsg',280,1),(3206,1193,1195,'OP_ZoneToFriendRequestMsg',281,1),(3207,1193,1195,'OP_ZoneToFriendReplyMsg',282,1),(3208,1193,1195,'OP_ChatCreateChannelMsg',283,1),(3209,1193,1195,'OP_ChatJoinChannelMsg',284,1),(3210,1193,1195,'OP_ChatWhoChannelMsg',285,1),(3211,1193,1195,'OP_ChatLeaveChannelMsg',286,1),(3212,1193,1195,'OP_ChatTellChannelMsg',287,1),(3213,1193,1195,'OP_ChatTellUserMsg',288,1),(3214,1193,1195,'OP_ChatToggleFriendMsg',289,1),(3215,1193,1195,'OP_BrokerAddBag',290,1),(3216,1193,1195,'OP_BrokerRemoveBag',291,1),(3217,1193,1195,'OP_ChatToggleIgnoreMsg',292,1),(3218,1193,1195,'OP_ChatSendFriendsMsg',293,1),(3219,1193,1195,'OP_ChatSendIgnoresMsg',294,1),(3220,1193,1195,'OP_QuestReward',318,1),(3221,1193,1195,'OP_ChatFiltersMsg',333,1),(3222,1193,1195,'OP_MailGetMessageMsg',336,1),(3223,1193,1195,'OP_MailSendMessageMsg',337,1),(3224,1193,1195,'OP_MailDeleteMessageMsg',338,1),(3225,1193,1195,'OP_MailGetHeadersReplyMsg',339,1),(3226,1193,1195,'OP_MailGetMessageReplyMsg',340,1),(3227,1193,1195,'OP_MailSendMessageReplyMsg',341,1),(3228,1193,1195,'OP_MailCommitSendMessageMsg',342,1),(3229,1193,1195,'OP_MailSendSystemMessageMsg',343,1),(3230,1193,1195,'OP_MailRemoveAttachFromMailMsg',344,1),(3231,1193,1195,'OP_WaypointRequestMsg',346,1),(3232,1193,1195,'OP_WaypointReplyMsg',347,1),(3233,1193,1195,'OP_WaypointSelectMsg',348,1),(3234,1193,1195,'OP_WaypointUpdateMsg',349,1),(3235,1193,1195,'OP_CharNameChangedMsg',350,1),(3236,1193,1195,'OP_ShowZoneTeleporterDestinations',351,1),(3237,1193,1195,'OP_SelectZoneTeleporterDestinatio',352,1),(3238,1193,1195,'OP_ReloadLocalizedTxtMsg',353,1),(3239,1193,1195,'OP_RequestGuildMembershipMsg',354,1),(3240,1193,1195,'OP_GuildMembershipResponseMsg',355,1),(3241,1193,1195,'OP_LeaveGuildNotifyMsg',356,1),(3242,1193,1195,'OP_JoinGuildNotifyMsg',357,1),(3243,1193,1195,'OP_AvatarUpdateMsg',358,1),(3244,1193,1195,'OP_BioUpdateMsg',360,1),(3245,1193,1195,'OP_InspectPlayerMsg',361,1),(3246,1193,1195,'OP_WSServerLockMsg',362,1),(3247,1193,1195,'OP_LSServerLockMsg',363,1),(3248,1193,1195,'OP_WSServerHideMsg',364,1),(3249,1193,1195,'OP_CsCategoryRequestMsg',365,1),(3250,1193,1195,'OP_CsCategoryResponseMsg',366,1),(3251,1193,1195,'OP_KnowledgeWindowSlotMappingMsg',367,1),(3252,1193,1195,'OP_AFKUpdateMsg',368,1),(3253,1193,1195,'OP_AnonUpdateMsg',369,1),(3254,1193,1195,'OP_UpdateActivePublicZonesMsg',370,1),(3255,1193,1195,'OP_UnknownNpcMsg',371,1),(3256,1193,1195,'OP_PromoFlagsDetailsMsg',372,1),(3257,1193,1195,'OP_ConsignViewCreateMsg',373,1),(3258,1193,1195,'OP_ConsignViewGetPageMsg',374,1),(3259,1193,1195,'OP_ConsignViewReleaseMsg',375,1),(3260,1193,1195,'OP_ConsignRemoveItemsMsg',376,1),(3261,1193,1195,'OP_UpdateDebugRadiiMsg',377,1),(3262,1193,1195,'OP_ReportMsg',378,1),(3263,1193,1195,'OP_UpdateRaidMsg',379,1),(3264,1193,1195,'OP_ConsignViewSortMsg',381,1),(3265,1193,1195,'OP_TitleUpdateMsg',382,1),(3266,1193,1195,'OP_ClientFellMsg',383,1),(3267,1193,1195,'OP_ClientInDeathRegionMsg',384,1),(3268,1193,1195,'OP_CampClientMsg',385,1),(3269,1193,1195,'OP_CSToolAccessResponseMsg',386,1),(3270,1193,1195,'OP_TrackingUpdateMsg',387,1),(3271,1193,1195,'OP_BeginTrackingMsg',388,1),(3272,1193,1195,'OP_StopTrackingMsg',389,1),(3273,1193,1195,'OP_GetAvatarAccessRequestForCSToo',391,1),(3274,1193,1195,'OP_AdvancementRequestMsg',392,1),(3275,1193,1195,'OP_MapFogDataInitMsg',393,1),(3276,1193,1195,'OP_MapFogDataUpdateMsg',394,1),(3277,1193,1195,'OP_CloseGroupInviteWindowMsg',395,1),(3278,1193,1195,'OP_UpdateGroupMemberDataMsg',396,1),(3279,1193,1195,'OP_WorldPingMsg',397,1),(3280,1193,1195,'OP_MoveLogUpdateMsg',388,1),(3281,1193,1195,'OP_OfferQuestMsg',399,1),(3282,1193,1195,'OP_WorldShutdownUpdateMsg',401,1),(3283,1193,1195,'OP_DisplayMailScreenMsg',402,1),(3284,1193,1195,'OP_ClientIdleBeginMsg',403,1),(3285,1193,1195,'OP_ClientIdleEndMsg',404,1),(3286,1193,1195,'OP_PurchaseConsignmentLoreCheckRe',405,1),(3287,1193,1195,'OP_NotifyApprenticeStoppedMentori',406,1),(3288,1193,1195,'OP_CorruptedClientMsg',407,1),(3289,1193,1195,'OP_WorldDataChangeMsg',408,1),(3290,1193,1195,'OP_MailEventNotificationMsg',409,1),(3291,1193,1195,'OP_RestartZoneMsg',410,1),(3292,1193,1195,'OP_FlightPathsMsg',411,1),(3293,1193,1195,'OP_CharacterLinkdeadMsg',412,1),(3294,1193,1195,'OP_CharTransferStartRequestMsg',413,1),(3295,1193,1195,'OP_CharTransferStartReplyMsg',414,1),(3296,1193,1195,'OP_CharTransferRequestMsg',415,1),(3297,1193,1195,'OP_CharTransferReplyMsg',416,1),(3298,1193,1195,'OP_CharTransferRollbackRequestMsg',417,1),(3299,1193,1195,'OP_CharTransferCommitRequestMsg',418,1),(3300,1193,1195,'OP_CharTransferRollbackReplyMsg',419,1),(3301,1193,1195,'OP_CharTransferCommitReplyMsg',420,1),(3302,1193,1195,'OP_GetCharacterSerializedRequestM',421,1),(3303,1193,1195,'OP_GetCharacterSerializedReplyMsg',422,1),(3304,1193,1195,'OP_CreateCharFromCBBRequestMsg',423,1),(3305,1193,1195,'OP_CreateCharFromCBBReplyMsg',424,1),(3306,1193,1195,'OP_HousingDataChangedMsg',425,1),(3307,1193,1195,'OP_HousingRestoreMsg',426,1),(3308,1193,1195,'OP_AuctionItem',427,1),(3309,1193,1195,'OP_AuctionItemReply',428,1),(3310,1193,1195,'OP_AuctionCoin',429,1),(3311,1193,1195,'OP_AuctionCoinReply',430,1),(3312,1193,1195,'OP_AuctionCharacter',431,1),(3313,1193,1195,'OP_AuctionCharacterReply',432,1),(3314,1193,1195,'OP_AuctionCommitMsg',433,1),(3315,1193,1195,'OP_AuctionAbortMsg',434,1),(3316,1193,1195,'OP_CharTransferValidateRequestMsg',435,1),(3317,1193,1195,'OP_CharTransferValidateReplyMsg',436,1),(3318,1193,1195,'OP_RaceRestrictionMsg',437,1),(3319,1193,1195,'OP_SetInstanceDisplayNameMsg',438,1),(3320,1193,1195,'OP_GetAuctionAssetIDMsg',439,1),(3321,1193,1195,'OP_GetAuctionAssetIDReplyMsg',440,1),(3322,1193,1195,'OP_ResendWorldChannelsMsg',441,1),(3323,1193,1195,'OP_DisplayExchangeScreenMsg',442,1),(3324,1193,1195,'OP_ArenaGameTypesMsg',443,1),(3325,1193,1195,'OP_AuditAuctionEventMsg',444,1),(3326,1193,1195,'OP_InviteRequestMsg',445,1),(3327,1193,1195,'OP_InviteResponseMsg',446,1),(3328,1193,1195,'OP_InviteTargetResponseMsg',447,1),(3329,1193,1195,'OP_InspectPlayerRequestMsg',448,1),(3330,1193,1195,'OP_DispatchMsg',449,1),(3331,1193,1195,'OP_DisplayEventMsg',450,1),(3332,1193,1195,'OP_PrePossessionMsg',451,1),(3333,1193,1195,'OP_PostPossessionMsg',452,1),(3334,1193,1195,'OP_ArenaCreate',454,1),(3335,1193,1195,'OP_ArenaList',455,1),(3336,1193,1195,'OP_ArenaWindow',463,1),(3337,1193,1195,'OP_HouseItemsList',481,1),(3338,1193,1195,'OP_CurrentPet',483,1),(3339,1193,1195,'OP_AdventureList',486,1),(3340,1193,1195,'OP_CancelSpellCast',487,1),(3341,1193,1195,'OP_UpdateTitleCmd',492,1),(3342,1193,1195,'OP_AttackAllowed',498,1),(3343,1193,1195,'OP_AttackNotAllowed',499,1),(3344,1193,1195,'OP_BagOptions',500,1),(3345,1193,1195,'OP_LFGGroupSearch',502,1),(3346,1193,1195,'OP_CharacterHousingList',505,1),(3347,1193,1195,'OP_DressingRoom',508,1),(3348,1193,1195,'OP_PlayLon',509,1),(3349,1193,1195,'OP_SkillInfoRequest',512,1),(3350,1193,1195,'OP_SkillInfoResponse',513,1),(3351,1193,1195,'OP_LFGUpdateMsg',516,1),(3352,1193,1195,'OP_BadLanguageFilter',517,1),(3353,1193,1195,'OP_VoiceChatChannel',518,1),(3354,1193,1195,'OP_MapRequest',519,1),(3355,1193,1195,'OP_MarketFundsUpdate',524,1),(3356,1193,1195,'OP_UIEvent',525,1),(3357,1193,1195,'OP_MarketAddFundsRequest',526,1),(3358,1193,1195,'OP_MarketAddFundsReply',527,1),(3359,1193,1195,'OP_MarketPurchase',529,1),(3360,1193,1195,'OP_MarketPlacePrices',530,1),(3361,1193,1195,'OP_MarketPlaceItems',533,1),(3362,1193,1195,'OP_RecipeBook',534,1),(3363,1193,1195,'OP_CreateCharacterDungeon',543,1),(3364,1193,1195,'OP_DungeonMakerEnter',544,1),(3365,1193,1195,'OP_DungeonMakerItemRequest',546,1),(3366,1193,1195,'OP_CharacterCreatedDungeons',547,1),(3367,1193,1195,'OP_DungeonMakerToolboxList',548,1),(3368,1193,1195,'OP_DungeonMakerUnknown',549,1),(3369,1193,1195,'OP_DungeonMakerUnknown1',550,1),(3370,1193,1195,'OP_PlayerPollPopup',552,1),(3371,1193,1195,'OP_PlayerPollAnswer',553,1),(3372,1193,1195,'OP_MentorPopup',554,1),(3373,1193,1195,'OP_LoadWelcomeWindow',556,1),(3374,1193,1195,'OP_OpenCharCust',557,1),(3375,1193,1195,'OP_SubmitCharCust',558,1),(3376,1193,1195,'OP_QueAllBgSolo',560,1),(3377,1193,1195,'OP_ZoneBgInstanceList',562,1),(3378,1193,1195,'OP_WorldTravelAvail',566,1),(3379,1193,1195,'OP_PaperdollImage',569,1),(3380,1193,1195,'OP_LoadCalendarEvents',570,1),(3381,1193,1195,'OP_VideoUploaded',571,1),(3382,1193,1195,'OP_SavageBarInitMsg',572,1),(3383,1193,1195,'OP_PetOptionsResponse',573,1),(3384,1193,1195,'OP_DungeonMakerItemResponse',574,1),(3385,1193,1195,'OP_CharacterMounts',576,1),(3386,1193,1195,'OP_EqBetaCopyRequest',585,1),(3387,1193,1195,'OP_EqHearChatCmd',586,1),(3388,1193,1195,'OP_EqDisplayTextCmd',587,1),(3389,1193,1195,'OP_EqCreateGhostCmd',588,1),(3390,1193,1195,'OP_EqCreateWidgetCmd',589,1),(3391,1193,1195,'OP_EqCreateSignWidgetCmd',590,1),(3392,1193,1195,'OP_EqDestroyGhostCmd',591,1),(3393,1193,1195,'OP_EqUpdateGhostCmd',592,1),(3394,1193,1195,'OP_EqSetControlGhostCmd',593,1),(3395,1193,1195,'OP_EqSetPOVGhostCmd',594,1),(3396,1193,1195,'OP_EqHearCombatCmd',595,1),(3397,1193,1195,'OP_EqHearSpellCastCmd',596,1),(3398,1193,1195,'OP_EQHearProcCmd',597,1),(3399,1193,1195,'OP_EQHearResEffectCmd',598,1),(3400,1193,1195,'OP_EqHearSpellInterruptCmd',599,1),(3401,1193,1195,'OP_EqHearSpellFizzleCmd',600,1),(3402,1193,1195,'OP_EqHearConsiderCmd',601,1),(3403,1193,1195,'OP_EqUpdateSubClassesCmd',602,1),(3404,1193,1195,'OP_EqCreateListBoxCmd',603,1),(3405,1193,1195,'OP_EqSetDebugPathPointsCmd',604,1),(3406,1193,1195,'OP_EqCannedEmoteCmd',606,1),(3407,1193,1195,'OP_EqStateCmd',607,1),(3408,1193,1195,'OP_EqPlaySoundCmd',608,1),(3409,1193,1195,'OP_EqPlaySound3DCmd',609,1),(3410,1193,1195,'OP_EqPlayVoiceCmd',610,1),(3411,1193,1195,'OP_EqHearDrowningCmd',611,1),(3412,1193,1195,'OP_EqHearDeathCmd',612,1),(3413,1193,1195,'OP_EqGroupMemberRemovedCmd',613,1),(3414,1193,1195,'OP_EqHearChainEffectCmd',614,1),(3415,1193,1195,'OP_EqReceiveOfferCmd',615,1),(3416,1193,1195,'OP_EqInspectPCResultsCmd',616,1),(3417,1193,1195,'OP_EqDrawablePathGraphCmd',617,1),(3418,1193,1195,'OP_EqDialogOpenCmd',618,1),(3419,1193,1195,'OP_EqDialogCloseCmd',619,1),(3420,1193,1195,'OP_EqFactionUpdateCmd',620,1),(3421,1193,1195,'OP_EqCollectionUpdateCmd',621,1),(3422,1193,1195,'OP_EqCollectionFilterCmd',622,1),(3423,1193,1195,'OP_EqCollectionItemCmd',623,1),(3424,1193,1195,'OP_EqQuestJournalUpdateCmd',624,1),(3425,1193,1195,'OP_EqMentoring',625,1),(3426,1193,1195,'OP_EqQuestJournalReplyCmd',626,1),(3427,1193,1195,'OP_EqQuestGroupCmd',627,1),(3428,1193,1195,'OP_EqUpdateMerchantCmd',628,1),(3429,1193,1195,'OP_EqUpdateStoreCmd',629,1),(3430,1193,1195,'OP_EqUpdatePlayerTradeCmd',630,1),(3431,1193,1195,'OP_EqHelpPathCmd',631,1),(3432,1193,1195,'OP_EqHelpPathClearCmd',632,1),(3433,1193,1195,'OP_EqUpdateBankCmd',633,1),(3434,1193,1195,'OP_EqExamineInfoCmd',634,1),(3435,1193,1195,'OP_EqCloseWindowCmd',635,1),(3436,1193,1195,'OP_EqUpdateLootCmd',636,1),(3437,1193,1195,'OP_EqJunctionListCmd',637,1),(3438,1193,1195,'OP_EqShowDeathWindowCmd',638,1),(3439,1193,1195,'OP_EqDisplaySpellFailCmd',639,1),(3440,1193,1195,'OP_EqSpellCastStartCmd',640,1),(3441,1193,1195,'OP_EqSpellCastEndCmd',641,1),(3442,1193,1195,'OP_EqResurrectedCmd',642,1),(3443,1193,1195,'OP_EqChoiceWinCmd',643,1),(3444,1193,1195,'OP_EqSetDefaultVerbCmd',644,1),(3445,1193,1195,'OP_EqInstructionWindowCmd',645,1),(3446,1193,1195,'OP_EqInstructionWindowCloseCmd',646,1),(3447,1193,1195,'OP_EqInstructionWindowGoalCmd',647,1),(3448,1193,1195,'OP_EqInstructionWindowTaskCmd',648,1),(3449,1193,1195,'OP_EqEnableGameEventCmd',649,1),(3450,1193,1195,'OP_EqShowWindowCmd',650,1),(3451,1193,1195,'OP_EqEnableWindowCmd',651,1),(3452,1193,1195,'OP_EqFlashWindowCmd',652,1),(3453,1193,1195,'OP_EqHearPlayFlavorCmd',654,1),(3454,1193,1195,'OP_EqUpdateSignWidgetCmd',655,1),(3455,1193,1195,'OP_EqDebugPVDCmd',656,1),(3456,1193,1195,'OP_EqShowBookCmd',657,1),(3457,1193,1195,'OP_EqQuestionnaireCmd',658,1),(3458,1193,1195,'OP_EqGetProbsCmd',660,1),(3459,1193,1195,'OP_EqHearHealCmd',661,1),(3460,1193,1195,'OP_EqChatChannelUpdateCmd',662,1),(3461,1193,1195,'OP_EqWhoChannelQueryReplyCmd',663,1),(3462,1193,1195,'OP_EqAvailWorldChannelsCmd',664,1),(3463,1193,1195,'OP_EqUpdateTargetCmd',665,1),(3464,1193,1195,'OP_BrokerSellList',666,1),(3465,1193,1195,'OP_EqConsignmentItemsCmd',667,1),(3466,1193,1195,'OP_EqStartBrokerCmd',669,1),(3467,1193,1195,'OP_EqMapExplorationCmd',670,1),(3468,1193,1195,'OP_EqStoreLogCmd',671,1),(3469,1193,1195,'OP_EqSpellMoveToRangeAndRetryCmd',672,1),(3470,1193,1195,'OP_EqUpdatePlayerMailCmd',673,1),(3471,1193,1195,'OP_GuildStatusUpdate',676,1),(3472,1193,1195,'OP_EqArenaResultsCmd',677,1),(3473,1193,1195,'OP_EqGuildBankEventActionCmd',678,1),(3474,1193,1195,'OP_EqGuildBankExamineInfoCmd',679,1),(3475,1193,1195,'OP_EqHearSpellNoLandCmd',680,1),(3476,1193,1195,'OP_Lottery',681,1),(3477,1193,1195,'OP_GuildRecruitingMemberInfo',682,1),(3478,1193,1195,'OP_GuildRecruiting',683,1),(3479,1193,1195,'OP_GuildRecruitingDetails',684,1),(3480,1193,1195,'OP_GuildRecruitingImage',685,1),(3481,1193,1195,'OP_TradeskillList',703,1),(3482,1193,1195,'OP_CharRenamed',687,1),(3483,1193,1195,'OP_UseAdornment',697,1),(3484,1193,1195,'OP_ExpPurchWindow',703,1),(3485,1193,1195,'OP_PointOfInterest',707,1),(3486,1193,1195,'OP_PointOfInterest2',708,1),(3487,1193,1195,'OP_TraitsList',709,1),(3488,1193,1195,'OP_CustomizeHouseDisplay',712,1),(3489,1193,1195,'OP_VoiceChatServer',713,1),(3490,1193,1195,'OP_SupplyDepot',717,1),(3491,1193,1195,'OP_EQHearThreatCmd',718,1),(3492,1193,1195,'OP_RecipeList',719,1),(3493,1193,1195,'OP_Research',720,1),(3494,1193,1195,'OP_CharacterCurrency',721,1),(3495,1193,1195,'OP_CharacterAchievements',722,1),(3496,1193,1195,'OP_AchievementUpdateMsg',723,1),(3497,1193,1195,'OP_EQHearDispellCmd',724,1),(3498,1193,1195,'OP_JournalQuestStoryline',725,1),(3499,1193,1195,'OP_DungeonPlayAsAvatarList',726,1),(3500,1193,1195,'OP_DungeonPlayAsAvatarSelected',727,1),(3501,1193,1195,'OP_MercHireWindow',728,1),(3502,1193,1195,'OP_MercUnknown',729,1),(3503,1193,1195,'OP_Unknown',746,1),(3504,1198,1199,'OP_LoginRequestMsg',0,1),(3505,1198,1199,'OP_LoginByNumRequestMsg',1,1),(3506,1198,1199,'OP_WSLoginRequestMsg',2,1),(3507,1198,1199,'OP_ESLoginRequestMsg',3,1),(3508,1198,1199,'OP_LoginReplyMsg',4,1),(3509,1198,1199,'OP_WSStatusReplyMsg',5,1),(3510,1198,1199,'OP_WorldStatusChangeMsg',6,1),(3511,1198,1199,'OP_AllWSDescRequestMsg',7,1),(3512,1198,1199,'OP_WorldListMsg',8,1),(3513,1198,1199,'OP_AllCharactersDescRequestMsg',9,1),(3514,1198,1199,'OP_AllCharactersDescReplyMsg',10,1),(3515,1198,1199,'OP_CreateCharacterRequestMsg',11,1),(3516,1198,1199,'OP_CreateCharacterReplyMsg',12,1),(3517,1198,1199,'OP_WSCreateCharacterRequestMsg',13,1),(3518,1198,1199,'OP_WSCreateCharacterReplyMsg',14,1),(3519,1198,1199,'OP_ReskinCharacterRequestMsg',15,1),(3520,1198,1199,'OP_DeleteCharacterRequestMsg',16,1),(3521,1198,1199,'OP_DeleteCharacterReplyMsg',17,1),(3522,1198,1199,'OP_PlayCharacterRequestMsg',18,1),(3523,1198,1199,'OP_PlayCharacterReplyMsg',19,1),(3524,1198,1199,'OP_ExpectClientAsCharacterReplyMs',22,1),(3525,1198,1199,'OP_ServerPlayCharacterRequestMsg',23,1),(3526,1198,1199,'OP_ServerPlayCharacterReplyMsg',24,1),(3527,1198,1199,'OP_ESInitMsg',25,1),(3528,1198,1199,'OP_ESReadyForClientsMsg',26,1),(3529,1198,1199,'OP_CreateZoneInstanceMsg',29,1),(3530,1198,1199,'OP_ZoneInstanceCreateReplyMsg',30,1),(3531,1198,1199,'OP_ZoneInstanceDestroyedMsg',31,1),(3532,1198,1199,'OP_ExpectClientAsCharacterRequest',32,1),(3533,1198,1199,'OP_ZoneInfoMsg',33,1),(3534,1198,1199,'OP_DoneLoadingZoneResourcesMsg',34,1),(3535,1198,1199,'OP_DoneSendingInitialEntitiesMsg',35,1),(3536,1198,1199,'OP_DoneLoadingEntityResourcesMsg',36,1),(3537,1198,1199,'OP_PredictionUpdateMsg',37,1),(3538,1198,1199,'OP_UpdatePositionMsg',39,1),(3539,1198,1199,'OP_SetRemoteCmdsMsg',41,1),(3540,1198,1199,'OP_RemoteCmdMsg',42,1),(3541,1198,1199,'OP_GameWorldTimeMsg',43,1),(3542,1198,1199,'OP_MOTDMsg',44,1),(3543,1198,1199,'OP_ZoneMOTDMsg',45,1),(3544,1198,1199,'OP_AvatarCreatedMsg',46,1),(3545,1198,1199,'OP_AvatarDestroyedMsg',47,1),(3546,1198,1199,'OP_RequestCampMsg',50,1),(3547,1198,1199,'OP_CampStartedMsg',51,1),(3548,1198,1199,'OP_CampAbortedMsg',52,1),(3549,1198,1199,'OP_WhoQueryRequestMsg',53,1),(3550,1198,1199,'OP_WhoQueryReplyMsg',54,1),(3551,1198,1199,'OP_MonitorReplyMsg',55,1),(3552,1198,1199,'OP_MonitorCharacterListMsg',56,1),(3553,1198,1199,'OP_MonitorCharacterListRequestMsg',57,1),(3554,1198,1199,'OP_ClientCmdMsg',58,1),(3555,1198,1199,'OP_DispatchESMsg',59,1),(3556,1198,1199,'OP_DispatchClientCmdMsg',60,1),(3557,1198,1199,'OP_UpdateTargetMsg',61,1),(3558,1198,1199,'OP_UpdateTargetLocMsg',62,1),(3559,1198,1199,'OP_UpdateCharacterSheetMsg',63,1),(3560,1198,1199,'OP_CharacterPet',64,1),(3561,1198,1199,'OP_CharacterMerc',65,1),(3562,1198,1199,'OP_UpdateSpellBookMsg',66,1),(3563,1198,1199,'OP_UpdateInventoryMsg',68,1),(3564,1198,1199,'OP_AfterInvSpellUpdate',69,1),(3565,1198,1199,'OP_UpdateRecipeBookMsg',70,1),(3566,1198,1199,'OP_RequestRecipeDetailsMsg',71,1),(3567,1198,1199,'OP_RecipeDetailsMsg',72,1),(3568,1198,1199,'OP_UpdateSkillBookMsg',73,1),(3569,1198,1199,'OP_UpdateSkillsMsg',74,1),(3570,1198,1199,'OP_UpdateOpportunityMsg',75,1),(3571,1198,1199,'OP_ChangeZoneMsg',77,1),(3572,1198,1199,'OP_ClientTeleportRequestMsg',78,1),(3573,1198,1199,'OP_TeleportWithinZoneMsg',79,1),(3574,1198,1199,'OP_TeleportWithinZoneNoReloadMsg',80,1),(3575,1198,1199,'OP_MigrateClientToZoneRequestMsg',81,1),(3576,1198,1199,'OP_MigrateClientToZoneReplyMsg',82,1),(3577,1198,1199,'OP_ReadyToZoneMsg',84,1),(3578,1198,1199,'OP_RemoveClientFromGroupMsg',85,1),(3579,1198,1199,'OP_RemoveGroupFromGroupMsg',86,1),(3580,1198,1199,'OP_MakeGroupLeaderMsg',87,1),(3581,1198,1199,'OP_GroupCreatedMsg',88,1),(3582,1198,1199,'OP_GroupDestroyedMsg',89,1),(3583,1198,1199,'OP_GroupMemberAddedMsg',90,1),(3584,1198,1199,'OP_GroupMemberRemovedMsg',91,1),(3585,1198,1199,'OP_GroupRemovedFromGroupMsg',92,1),(3586,1198,1199,'OP_GroupLeaderChangedMsg',93,1),(3587,1198,1199,'OP_GroupResendOOZDataMsg',94,1),(3588,1198,1199,'OP_GroupSettingsChangedMsg',95,1),(3589,1198,1199,'OP_OutOfZoneMemberDataMsg',96,1),(3590,1198,1199,'OP_SendLatestRequestMsg',97,1),(3591,1198,1199,'OP_ClearDataMsg',98,1),(3592,1198,1199,'OP_SetSocialMsg',99,1),(3593,1198,1199,'OP_ESStatusMsg',100,1),(3594,1198,1199,'OP_ESZoneInstanceStatusMsg',101,1),(3595,1198,1199,'OP_ZonesStatusRequestMsg',102,1),(3596,1198,1199,'OP_ZonesStatusMsg',103,1),(3597,1198,1199,'OP_ESWeatherRequestMsg',104,1),(3598,1198,1199,'OP_ESWeatherRequestEndMsg',105,1),(3599,1198,1199,'OP_DialogSelectMsg',109,1),(3600,1198,1199,'OP_DialogCloseMsg',110,1),(3601,1198,1199,'OP_RemoveSpellEffectMsg',111,1),(3602,1198,1199,'OP_RemoveConcentrationMsg',112,1),(3603,1198,1199,'OP_QuestJournalOpenMsg',113,1),(3604,1198,1199,'OP_QuestJournalInspectMsg',114,1),(3605,1198,1199,'OP_QuestJournalSetVisibleMsg',115,1),(3606,1198,1199,'OP_QuestJournalWaypointMsg',116,1),(3607,1198,1199,'OP_CreateGuildRequestMsg',119,1),(3608,1198,1199,'OP_CreateGuildReplyMsg',120,1),(3609,1198,1199,'OP_GuildsayMsg',121,1),(3610,1198,1199,'OP_FellowshipExpMsg',122,1),(3611,1198,1199,'OP_DeleteGuildMsg',123,1),(3612,1198,1199,'OP_GuildUpdateMsg',124,1),(3613,1198,1199,'OP_ConsignmentCloseStoreMsg',125,1),(3614,1198,1199,'OP_ConsignItemRequestMsg',126,1),(3615,1198,1199,'OP_ConsignItemResponseMsg',127,1),(3616,1198,1199,'OP_PurchaseConsignmentRequestMsg',128,1),(3617,1198,1199,'OP_LikeOption',135,1),(3618,1198,1199,'OP_PublishHouse',137,1),(3619,1198,1199,'OP_PlayerMadeInstacnesScreen',138,1),(3620,1198,1199,'OP_PlayerMadeInstances',139,1),(3621,1198,1199,'OP_HouseDeletedRemotelyMsg',140,1),(3622,1198,1199,'OP_UpdateHouseDataMsg',141,1),(3623,1198,1199,'OP_UpdateHouseAccessDataMsg',142,1),(3624,1198,1199,'OP_PlayerHouseBaseScreenMsg',143,1),(3625,1198,1199,'OP_PlayerHousePurchaseScreenMsg',144,1),(3626,1198,1199,'OP_PlayerHouseAccessUpdateMsg',145,1),(3627,1198,1199,'OP_PlayerHouseDisplayStatusMsg',146,1),(3628,1198,1199,'OP_PlayerHouseCloseUIMsg',147,1),(3629,1198,1199,'OP_BuyPlayerHouseMsg',148,1),(3630,1198,1199,'OP_BuyPlayerHouseTintMsg',149,1),(3631,1198,1199,'OP_CollectAllHouseItemsMsg',150,1),(3632,1198,1199,'OP_RelinquishHouseMsg',151,1),(3633,1198,1199,'OP_EnterHouseMsg',152,1),(3634,1198,1199,'OP_ExitHouseMsg',153,1),(3635,1198,1199,'OP_HouseDefaultAccessSetMsg',154,1),(3636,1198,1199,'OP_HouseAccessSetMsg',155,1),(3637,1198,1199,'OP_HouseAccessRemoveMsg',156,1),(3638,1198,1199,'OP_PayHouseUpkeepMsg',157,1),(3639,1198,1199,'OP_MoveableObjectPlacementCriteri',158,1),(3640,1198,1199,'OP_EnterMoveObjectModeMsg',159,1),(3641,1198,1199,'OP_PositionMoveableObject',160,1),(3642,1198,1199,'OP_CancelMoveObjectModeMsg',161,1),(3643,1198,1199,'OP_ShaderCustomizationMsg',162,1),(3644,1198,1199,'OP_ReplaceableSubMeshesMsg',163,1),(3645,1198,1199,'OP_HouseCustomizationScreenMsg',164,1),(3646,1198,1199,'OP_CustomizationPurchaseRequestMs',165,1),(3647,1198,1199,'OP_CustomizationSetRequestMsg',166,1),(3648,1198,1199,'OP_CustomizationReplyMsg',167,1),(3649,1198,1199,'OP_TintWidgetsMsg',168,1),(3650,1198,1199,'OP_ExamineConsignmentRequestMsg',169,1),(3651,1198,1199,'OP_ExamineConsignmentResponseMsg',170,1),(3652,1198,1199,'OP_UISettingsResponseMsg',171,1),(3653,1198,1199,'OP_UIResetMsg',172,1),(3654,1198,1199,'OP_KeymapLoadMsg',173,1),(3655,1198,1199,'OP_KeymapNoneMsg',174,1),(3656,1198,1199,'OP_KeymapDataMsg',175,1),(3657,1198,1199,'OP_KeymapSaveMsg',176,1),(3658,1198,1199,'OP_DispatchSpellCmdMsg',177,1),(3659,1198,1199,'OP_EntityVerbsRequestMsg',178,1),(3660,1198,1199,'OP_EntityVerbsReplyMsg',179,1),(3661,1198,1199,'OP_EntityVerbsVerbMsg',180,1),(3662,1198,1199,'OP_ChatRelationshipUpdateMsg',182,1),(3663,1198,1199,'OP_LootItemsRequestMsg',183,1),(3664,1198,1199,'OP_StoppedLootingMsg',184,1),(3665,1198,1199,'OP_SitMsg',185,1),(3666,1198,1199,'OP_StandMsg',186,1),(3667,1198,1199,'OP_SatMsg',187,1),(3668,1198,1199,'OP_StoodMsg',188,1),(3669,1198,1199,'OP_ClearForTakeOffMsg',189,1),(3670,1198,1199,'OP_ReadyForTakeOffMsg',190,1),(3671,1198,1199,'OP_ShowIllusionsMsg',191,1),(3672,1198,1199,'OP_HideIllusionsMsg',192,1),(3673,1198,1199,'OP_ExamineItemRequestMsg',193,1),(3674,1198,1199,'OP_ReadBookPageMsg',194,1),(3675,1198,1199,'OP_DefaultGroupOptionsRequestMsg',195,1),(3676,1198,1199,'OP_DefaultGroupOptionsMsg',196,1),(3677,1198,1199,'OP_GroupOptionsMsg',197,1),(3678,1198,1199,'OP_DisplayGroupOptionsScreenMsg',198,1),(3679,1198,1199,'OP_PetOptions',199,1),(3680,1198,1199,'OP_DisplayInnVisitScreenMsg',200,1),(3681,1198,1199,'OP_DumpSchedulerMsg',201,1),(3682,1198,1199,'OP_LSCheckAcctLockMsg',202,1),(3683,1198,1199,'OP_WSAcctLockStatusMsg',203,1),(3684,1198,1199,'OP_RequestHelpRepathMsg',204,1),(3685,1198,1199,'OP_RequestTargetLocMsg',205,1),(3686,1198,1199,'OP_UpdateMotdMsg',206,1),(3687,1198,1199,'OP_DestUpdateReq',208,1),(3688,1198,1199,'OP_PerformPlayerKnockbackMsg',211,1),(3689,1198,1199,'OP_PerformCameraShakeMsg',212,1),(3690,1198,1199,'OP_PopulateSkillMapsMsg',213,1),(3691,1198,1199,'OP_CancelledFeignMsg',214,1),(3692,1198,1199,'OP_SysClient',216,1),(3693,1198,1199,'OP_ShowCreateFromRecipeUIMsg',217,1),(3694,1198,1199,'OP_CancelCreateFromRecipeMsg',218,1),(3695,1198,1199,'OP_BeginItemCreationMsg',219,1),(3696,1198,1199,'OP_StopItemCreationMsg',220,1),(3697,1198,1199,'OP_ShowItemCreationProcessUIMsg',221,1),(3698,1198,1199,'OP_UpdateItemCreationProcessUIMsg',222,1),(3699,1198,1199,'OP_DisplayTSEventReactionMsg',223,1),(3700,1198,1199,'OP_ShowRecipeBookMsg',224,1),(3701,1198,1199,'OP_KnowledgebaseRequestMsg',225,1),(3702,1198,1199,'OP_KnowledgebaseResponseMsg',226,1),(3703,1198,1199,'OP_CSTicketHeaderRequestMsg',227,1),(3704,1198,1199,'OP_CSTicketInfoMsg',228,1),(3705,1198,1199,'OP_CSTicketCommentRequestMsg',229,1),(3706,1198,1199,'OP_CSTicketCommentResponseMsg',230,1),(3707,1198,1199,'OP_CSTicketCreateMsg',231,1),(3708,1198,1199,'OP_CSTicketAddCommentMsg',232,1),(3709,1198,1199,'OP_CSTicketDeleteMsg',233,1),(3710,1198,1199,'OP_CSTicketChangeNotificationMsg',234,1),(3711,1198,1199,'OP_WorldDataUpdateMsg',235,1),(3712,1198,1199,'OP_KnownLanguagesMsg',236,1),(3713,1198,1199,'OP_LsRequestClientCrashLogMsg',237,1),(3714,1198,1199,'OP_LsClientBaselogReplyMsg',238,1),(3715,1198,1199,'OP_LsClientCrashlogReplyMsg',239,1),(3716,1198,1199,'OP_LsClientAlertlogReplyMsg',240,1),(3717,1198,1199,'OP_LsClientVerifylogReplyMsg',241,1),(3718,1198,1199,'OP_ClientTeleportToLocationMsg',242,1),(3719,1198,1199,'OP_UpdateClientPredFlagsMsg',243,1),(3720,1198,1199,'OP_ChangeServerControlFlagMsg',244,1),(3721,1198,1199,'OP_CSToolsRequestMsg',245,1),(3722,1198,1199,'OP_CSToolsResponseMsg',246,1),(3723,1198,1199,'OP_AddSocialStructureStandingMsg',247,1),(3724,1198,1199,'OP_CreateBoatTransportsMsg',248,1),(3725,1198,1199,'OP_PositionBoatTransportMsg',249,1),(3726,1198,1199,'OP_MigrateBoatTransportMsg',250,1),(3727,1198,1199,'OP_MigrateBoatTransportReplyMsg',251,1),(3728,1198,1199,'OP_DisplayDebugNLLPointsMsg',252,1),(3729,1198,1199,'OP_ExamineInfoRequestMsg',253,1),(3730,1198,1199,'OP_QuickbarInitMsg',254,1),(3731,1198,1199,'OP_QuickbarUpdateMsg',255,1),(3732,1198,1199,'OP_MacroInitMsg',256,1),(3733,1198,1199,'OP_MacroUpdateMsg',257,1),(3734,1198,1199,'OP_QuestionnaireMsg',258,1),(3735,1198,1199,'OP_LevelChangedMsg',259,1),(3736,1198,1199,'OP_SpellGainedMsg',260,1),(3737,1198,1199,'OP_EncounterBrokenMsg',261,1),(3738,1198,1199,'OP_OnscreenMsgMsg',262,1),(3739,1198,1199,'OP_DisplayWarningMsg',263,1),(3740,1198,1199,'OP_ModifyGuildMsg',264,1),(3741,1198,1199,'OP_GuildEventMsg',265,1),(3742,1198,1199,'OP_GuildEventAddMsg',266,1),(3743,1198,1199,'OP_GuildEventActionMsg',267,1),(3744,1198,1199,'OP_GuildEventListMsg',268,1),(3745,1198,1199,'OP_RequestGuildEventDetailsMsg',269,1),(3746,1198,1199,'OP_GuildEventDetailsMsg',270,1),(3747,1198,1199,'OP_RequestGuildInfoMsg',271,1),(3748,1198,1199,'OP_GuildBankActionMsg',272,1),(3749,1198,1199,'OP_GuildBankActionResponseMsg',273,1),(3750,1198,1199,'OP_GuildBankItemDetailsRequestMsg',274,1),(3751,1198,1199,'OP_GuildBankItemDetailsResponseMs',275,1),(3752,1198,1199,'OP_GuildBankUpdateMsg',276,1),(3753,1198,1199,'OP_GuildBankEventListMsg',277,1),(3754,1198,1199,'OP_RequestGuildBankEventDetailsMs',278,1),(3755,1198,1199,'OP_RewardPackMsg',279,1),(3756,1198,1199,'OP_RenameGuildMsg',280,1),(3757,1198,1199,'OP_ZoneToFriendRequestMsg',281,1),(3758,1198,1199,'OP_ZoneToFriendReplyMsg',282,1),(3759,1198,1199,'OP_ChatCreateChannelMsg',283,1),(3760,1198,1199,'OP_ChatJoinChannelMsg',284,1),(3761,1198,1199,'OP_ChatWhoChannelMsg',285,1),(3762,1198,1199,'OP_ChatLeaveChannelMsg',286,1),(3763,1198,1199,'OP_ChatTellChannelMsg',287,1),(3764,1198,1199,'OP_ChatTellUserMsg',288,1),(3765,1198,1199,'OP_ChatToggleFriendMsg',289,1),(3766,1198,1199,'OP_BrokerAddBag',290,1),(3767,1198,1199,'OP_BrokerRemoveBag',291,1),(3768,1198,1199,'OP_ChatToggleIgnoreMsg',292,1),(3769,1198,1199,'OP_ChatSendFriendsMsg',293,1),(3770,1198,1199,'OP_ChatSendIgnoresMsg',294,1),(3771,1198,1199,'OP_QuestReward',318,1),(3772,1198,1199,'OP_ChatFiltersMsg',333,1),(3773,1198,1199,'OP_MailGetMessageMsg',336,1),(3774,1198,1199,'OP_MailSendMessageMsg',337,1),(3775,1198,1199,'OP_MailDeleteMessageMsg',338,1),(3776,1198,1199,'OP_MailGetHeadersReplyMsg',339,1),(3777,1198,1199,'OP_MailGetMessageReplyMsg',340,1),(3778,1198,1199,'OP_MailSendMessageReplyMsg',341,1),(3779,1198,1199,'OP_MailCommitSendMessageMsg',342,1),(3780,1198,1199,'OP_MailSendSystemMessageMsg',343,1),(3781,1198,1199,'OP_MailRemoveAttachFromMailMsg',344,1),(3782,1198,1199,'OP_WaypointRequestMsg',346,1),(3783,1198,1199,'OP_WaypointReplyMsg',347,1),(3784,1198,1199,'OP_WaypointSelectMsg',348,1),(3785,1198,1199,'OP_WaypointUpdateMsg',349,1),(3786,1198,1199,'OP_CharNameChangedMsg',350,1),(3787,1198,1199,'OP_ShowZoneTeleporterDestinations',351,1),(3788,1198,1199,'OP_SelectZoneTeleporterDestinatio',352,1),(3789,1198,1199,'OP_ReloadLocalizedTxtMsg',353,1),(3790,1198,1199,'OP_RequestGuildMembershipMsg',354,1),(3791,1198,1199,'OP_GuildMembershipResponseMsg',355,1),(3792,1198,1199,'OP_LeaveGuildNotifyMsg',356,1),(3793,1198,1199,'OP_JoinGuildNotifyMsg',357,1),(3794,1198,1199,'OP_AvatarUpdateMsg',358,1),(3795,1198,1199,'OP_BioUpdateMsg',360,1),(3796,1198,1199,'OP_InspectPlayerMsg',361,1),(3797,1198,1199,'OP_WSServerLockMsg',362,1),(3798,1198,1199,'OP_LSServerLockMsg',363,1),(3799,1198,1199,'OP_WSServerHideMsg',364,1),(3800,1198,1199,'OP_CsCategoryRequestMsg',365,1),(3801,1198,1199,'OP_CsCategoryResponseMsg',366,1),(3802,1198,1199,'OP_KnowledgeWindowSlotMappingMsg',367,1),(3803,1198,1199,'OP_AFKUpdateMsg',368,1),(3804,1198,1199,'OP_AnonUpdateMsg',369,1),(3805,1198,1199,'OP_UpdateActivePublicZonesMsg',370,1),(3806,1198,1199,'OP_UnknownNpcMsg',371,1),(3807,1198,1199,'OP_PromoFlagsDetailsMsg',372,1),(3808,1198,1199,'OP_ConsignViewCreateMsg',373,1),(3809,1198,1199,'OP_ConsignViewGetPageMsg',374,1),(3810,1198,1199,'OP_ConsignViewReleaseMsg',375,1),(3811,1198,1199,'OP_ConsignRemoveItemsMsg',376,1),(3812,1198,1199,'OP_UpdateDebugRadiiMsg',377,1),(3813,1198,1199,'OP_ReportMsg',378,1),(3814,1198,1199,'OP_UpdateRaidMsg',379,1),(3815,1198,1199,'OP_ConsignViewSortMsg',381,1),(3816,1198,1199,'OP_TitleUpdateMsg',382,1),(3817,1198,1199,'OP_ClientFellMsg',383,1),(3818,1198,1199,'OP_ClientInDeathRegionMsg',384,1),(3819,1198,1199,'OP_CampClientMsg',385,1),(3820,1198,1199,'OP_CSToolAccessResponseMsg',386,1),(3821,1198,1199,'OP_TrackingUpdateMsg',387,1),(3822,1198,1199,'OP_BeginTrackingMsg',388,1),(3823,1198,1199,'OP_StopTrackingMsg',389,1),(3824,1198,1199,'OP_GetAvatarAccessRequestForCSToo',391,1),(3825,1198,1199,'OP_AdvancementRequestMsg',392,1),(3826,1198,1199,'OP_MapFogDataInitMsg',393,1),(3827,1198,1199,'OP_MapFogDataUpdateMsg',394,1),(3828,1198,1199,'OP_CloseGroupInviteWindowMsg',395,1),(3829,1198,1199,'OP_UpdateGroupMemberDataMsg',396,1),(3830,1198,1199,'OP_WorldPingMsg',397,1),(3831,1198,1199,'OP_MoveLogUpdateMsg',388,1),(3832,1198,1199,'OP_OfferQuestMsg',399,1),(3833,1198,1199,'OP_WorldShutdownUpdateMsg',401,1),(3834,1198,1199,'OP_DisplayMailScreenMsg',402,1),(3835,1198,1199,'OP_ClientIdleBeginMsg',403,1),(3836,1198,1199,'OP_ClientIdleEndMsg',404,1),(3837,1198,1199,'OP_PurchaseConsignmentLoreCheckRe',405,1),(3838,1198,1199,'OP_NotifyApprenticeStoppedMentori',406,1),(3839,1198,1199,'OP_CorruptedClientMsg',407,1),(3840,1198,1199,'OP_WorldDataChangeMsg',408,1),(3841,1198,1199,'OP_MailEventNotificationMsg',409,1),(3842,1198,1199,'OP_RestartZoneMsg',410,1),(3843,1198,1199,'OP_FlightPathsMsg',411,1),(3844,1198,1199,'OP_CharacterLinkdeadMsg',412,1),(3845,1198,1199,'OP_CharTransferStartRequestMsg',413,1),(3846,1198,1199,'OP_CharTransferStartReplyMsg',414,1),(3847,1198,1199,'OP_CharTransferRequestMsg',415,1),(3848,1198,1199,'OP_CharTransferReplyMsg',416,1),(3849,1198,1199,'OP_CharTransferRollbackRequestMsg',417,1),(3850,1198,1199,'OP_CharTransferCommitRequestMsg',418,1),(3851,1198,1199,'OP_CharTransferRollbackReplyMsg',419,1),(3852,1198,1199,'OP_CharTransferCommitReplyMsg',420,1),(3853,1198,1199,'OP_GetCharacterSerializedRequestM',421,1),(3854,1198,1199,'OP_GetCharacterSerializedReplyMsg',422,1),(3855,1198,1199,'OP_CreateCharFromCBBRequestMsg',423,1),(3856,1198,1199,'OP_CreateCharFromCBBReplyMsg',424,1),(3857,1198,1199,'OP_HousingDataChangedMsg',425,1),(3858,1198,1199,'OP_HousingRestoreMsg',426,1),(3859,1198,1199,'OP_AuctionItem',427,1),(3860,1198,1199,'OP_AuctionItemReply',428,1),(3861,1198,1199,'OP_AuctionCoin',429,1),(3862,1198,1199,'OP_AuctionCoinReply',430,1),(3863,1198,1199,'OP_AuctionCharacter',431,1),(3864,1198,1199,'OP_AuctionCharacterReply',432,1),(3865,1198,1199,'OP_AuctionCommitMsg',433,1),(3866,1198,1199,'OP_AuctionAbortMsg',434,1),(3867,1198,1199,'OP_CharTransferValidateRequestMsg',435,1),(3868,1198,1199,'OP_CharTransferValidateReplyMsg',436,1),(3869,1198,1199,'OP_RaceRestrictionMsg',437,1),(3870,1198,1199,'OP_SetInstanceDisplayNameMsg',438,1),(3871,1198,1199,'OP_GetAuctionAssetIDMsg',439,1),(3872,1198,1199,'OP_GetAuctionAssetIDReplyMsg',440,1),(3873,1198,1199,'OP_ResendWorldChannelsMsg',441,1),(3874,1198,1199,'OP_DisplayExchangeScreenMsg',442,1),(3875,1198,1199,'OP_ArenaGameTypesMsg',443,1),(3876,1198,1199,'OP_AuditAuctionEventMsg',444,1),(3877,1198,1199,'OP_InviteRequestMsg',445,1),(3878,1198,1199,'OP_InviteResponseMsg',446,1),(3879,1198,1199,'OP_InviteTargetResponseMsg',447,1),(3880,1198,1199,'OP_InspectPlayerRequestMsg',448,1),(3881,1198,1199,'OP_DispatchMsg',449,1),(3882,1198,1199,'OP_DisplayEventMsg',450,1),(3883,1198,1199,'OP_PrePossessionMsg',451,1),(3884,1198,1199,'OP_PostPossessionMsg',452,1),(3885,1198,1199,'OP_ArenaCreate',454,1),(3886,1198,1199,'OP_ArenaList',455,1),(3887,1198,1199,'OP_ArenaWindow',463,1),(3888,1198,1199,'OP_HouseItemsList',481,1),(3889,1198,1199,'OP_CurrentPet',483,1),(3890,1198,1199,'OP_AdventureList',486,1),(3891,1198,1199,'OP_CancelSpellCast',487,1),(3892,1198,1199,'OP_UpdateTitleCmd',492,1),(3893,1198,1199,'OP_AttackAllowed',498,1),(3894,1198,1199,'OP_AttackNotAllowed',499,1),(3895,1198,1199,'OP_BagOptions',500,1),(3896,1198,1199,'OP_LFGGroupSearch',502,1),(3897,1198,1199,'OP_CharacterHousingList',505,1),(3898,1198,1199,'OP_DressingRoom',508,1),(3899,1198,1199,'OP_PlayLon',509,1),(3900,1198,1199,'OP_SkillInfoRequest',512,1),(3901,1198,1199,'OP_SkillInfoResponse',513,1),(3902,1198,1199,'OP_LFGUpdateMsg',516,1),(3903,1198,1199,'OP_BadLanguageFilter',517,1),(3904,1198,1199,'OP_VoiceChatChannel',518,1),(3905,1198,1199,'OP_MapRequest',519,1),(3906,1198,1199,'OP_MarketFundsUpdate',524,1),(3907,1198,1199,'OP_UIEvent',525,1),(3908,1198,1199,'OP_MarketAddFundsRequest',526,1),(3909,1198,1199,'OP_MarketAddFundsReply',527,1),(3910,1198,1199,'OP_MarketPurchase',529,1),(3911,1198,1199,'OP_MarketPlacePrices',530,1),(3912,1198,1199,'OP_MarketPlaceItems',533,1),(3913,1198,1199,'OP_RecipeBook',534,1),(3914,1198,1199,'OP_CreateCharacterDungeon',543,1),(3915,1198,1199,'OP_DungeonMakerEnter',544,1),(3916,1198,1199,'OP_DungeonMakerItemRequest',546,1),(3917,1198,1199,'OP_CharacterCreatedDungeons',547,1),(3918,1198,1199,'OP_DungeonMakerToolboxList',548,1),(3919,1198,1199,'OP_DungeonMakerUnknown',549,1),(3920,1198,1199,'OP_DungeonMakerUnknown1',550,1),(3921,1198,1199,'OP_PlayerPollPopup',552,1),(3922,1198,1199,'OP_PlayerPollAnswer',553,1),(3923,1198,1199,'OP_MentorPopup',554,1),(3924,1198,1199,'OP_LoadWelcomeWindow',556,1),(3925,1198,1199,'OP_OpenCharCust',557,1),(3926,1198,1199,'OP_SubmitCharCust',558,1),(3927,1198,1199,'OP_QueAllBgSolo',560,1),(3928,1198,1199,'OP_ZoneBgInstanceList',562,1),(3929,1198,1199,'OP_WorldTravelAvail',566,1),(3930,1198,1199,'OP_PaperdollImage',569,1),(3931,1198,1199,'OP_LoadCalendarEvents',570,1),(3932,1198,1199,'OP_VideoUploaded',571,1),(3933,1198,1199,'OP_SavageBarInitMsg',572,1),(3934,1198,1199,'OP_PetOptionsResponse',573,1),(3935,1198,1199,'OP_DungeonMakerItemResponse',574,1),(3936,1198,1199,'OP_CharacterMounts',576,1),(3937,1198,1199,'OP_EqBetaCopyRequest',586,1),(3938,1198,1199,'OP_EqHearChatCmd',587,1),(3939,1198,1199,'OP_EqDisplayTextCmd',588,1),(3940,1198,1199,'OP_EqCreateGhostCmd',589,1),(3941,1198,1199,'OP_EqCreateWidgetCmd',590,1),(3942,1198,1199,'OP_EqCreateSignWidgetCmd',591,1),(3943,1198,1199,'OP_EqDestroyGhostCmd',592,1),(3944,1198,1199,'OP_EqUpdateGhostCmd',593,1),(3945,1198,1199,'OP_EqSetControlGhostCmd',594,1),(3946,1198,1199,'OP_EqSetPOVGhostCmd',595,1),(3947,1198,1199,'OP_EqHearCombatCmd',596,1),(3948,1198,1199,'OP_EqHearSpellCastCmd',597,1),(3949,1198,1199,'OP_EQHearProcCmd',598,1),(3950,1198,1199,'OP_EQHearResEffectCmd',599,1),(3951,1198,1199,'OP_EqHearSpellInterruptCmd',600,1),(3952,1198,1199,'OP_EqHearSpellFizzleCmd',601,1),(3953,1198,1199,'OP_EqHearConsiderCmd',602,1),(3954,1198,1199,'OP_EqUpdateSubClassesCmd',603,1),(3955,1198,1199,'OP_EqCreateListBoxCmd',604,1),(3956,1198,1199,'OP_EqSetDebugPathPointsCmd',605,1),(3957,1198,1199,'OP_EqCannedEmoteCmd',607,1),(3958,1198,1199,'OP_EqStateCmd',608,1),(3959,1198,1199,'OP_EqPlaySoundCmd',609,1),(3960,1198,1199,'OP_EqPlaySound3DCmd',610,1),(3961,1198,1199,'OP_EqPlayVoiceCmd',611,1),(3962,1198,1199,'OP_EqHearDrowningCmd',612,1),(3963,1198,1199,'OP_EqHearDeathCmd',613,1),(3964,1198,1199,'OP_EqGroupMemberRemovedCmd',614,1),(3965,1198,1199,'OP_EqHearChainEffectCmd',615,1),(3966,1198,1199,'OP_EqReceiveOfferCmd',616,1),(3967,1198,1199,'OP_EqInspectPCResultsCmd',617,1),(3968,1198,1199,'OP_EqDrawablePathGraphCmd',618,1),(3969,1198,1199,'OP_EqDialogOpenCmd',619,1),(3970,1198,1199,'OP_EqDialogCloseCmd',620,1),(3971,1198,1199,'OP_EqFactionUpdateCmd',621,1),(3972,1198,1199,'OP_EqCollectionUpdateCmd',622,1),(3973,1198,1199,'OP_EqCollectionFilterCmd',623,1),(3974,1198,1199,'OP_EqCollectionItemCmd',624,1),(3975,1198,1199,'OP_EqQuestJournalUpdateCmd',625,1),(3976,1198,1199,'OP_EqMentoring',626,1),(3977,1198,1199,'OP_EqQuestJournalReplyCmd',627,1),(3978,1198,1199,'OP_EqQuestGroupCmd',628,1),(3979,1198,1199,'OP_EqUpdateMerchantCmd',629,1),(3980,1198,1199,'OP_EqUpdateStoreCmd',630,1),(3981,1198,1199,'OP_EqUpdatePlayerTradeCmd',631,1),(3982,1198,1199,'OP_EqHelpPathCmd',632,1),(3983,1198,1199,'OP_EqHelpPathClearCmd',633,1),(3984,1198,1199,'OP_EqUpdateBankCmd',634,1),(3985,1198,1199,'OP_EqExamineInfoCmd',635,1),(3986,1198,1199,'OP_EqCloseWindowCmd',636,1),(3987,1198,1199,'OP_EqUpdateLootCmd',637,1),(3988,1198,1199,'OP_EqJunctionListCmd',638,1),(3989,1198,1199,'OP_EqShowDeathWindowCmd',639,1),(3990,1198,1199,'OP_EqDisplaySpellFailCmd',640,1),(3991,1198,1199,'OP_EqSpellCastStartCmd',641,1),(3992,1198,1199,'OP_EqSpellCastEndCmd',642,1),(3993,1198,1199,'OP_EqResurrectedCmd',643,1),(3994,1198,1199,'OP_EqChoiceWinCmd',644,1),(3995,1198,1199,'OP_EqSetDefaultVerbCmd',645,1),(3996,1198,1199,'OP_EqInstructionWindowCmd',646,1),(3997,1198,1199,'OP_EqInstructionWindowCloseCmd',647,1),(3998,1198,1199,'OP_EqInstructionWindowGoalCmd',648,1),(3999,1198,1199,'OP_EqInstructionWindowTaskCmd',649,1),(4000,1198,1199,'OP_EqEnableGameEventCmd',650,1),(4001,1198,1199,'OP_EqShowWindowCmd',651,1),(4002,1198,1199,'OP_EqEnableWindowCmd',652,1),(4003,1198,1199,'OP_EqFlashWindowCmd',653,1),(4004,1198,1199,'OP_EqHearPlayFlavorCmd',655,1),(4005,1198,1199,'OP_EqUpdateSignWidgetCmd',656,1),(4006,1198,1199,'OP_EqDebugPVDCmd',657,1),(4007,1198,1199,'OP_EqShowBookCmd',658,1),(4008,1198,1199,'OP_EqQuestionnaireCmd',659,1),(4009,1198,1199,'OP_EqGetProbsCmd',661,1),(4010,1198,1199,'OP_EqHearHealCmd',662,1),(4011,1198,1199,'OP_EqChatChannelUpdateCmd',663,1),(4012,1198,1199,'OP_EqWhoChannelQueryReplyCmd',664,1),(4013,1198,1199,'OP_EqAvailWorldChannelsCmd',665,1),(4014,1198,1199,'OP_EqUpdateTargetCmd',666,1),(4015,1198,1199,'OP_BrokerSellList',667,1),(4016,1198,1199,'OP_EqConsignmentItemsCmd',668,1),(4017,1198,1199,'OP_EqStartBrokerCmd',670,1),(4018,1198,1199,'OP_EqMapExplorationCmd',671,1),(4019,1198,1199,'OP_EqStoreLogCmd',672,1),(4020,1198,1199,'OP_EqSpellMoveToRangeAndRetryCmd',673,1),(4021,1198,1199,'OP_EqUpdatePlayerMailCmd',674,1),(4022,1198,1199,'OP_GuildStatusUpdate',677,1),(4023,1198,1199,'OP_EqArenaResultsCmd',678,1),(4024,1198,1199,'OP_EqGuildBankEventActionCmd',679,1),(4025,1198,1199,'OP_EqGuildBankExamineInfoCmd',680,1),(4026,1198,1199,'OP_EqHearSpellNoLandCmd',681,1),(4027,1198,1199,'OP_Lottery',682,1),(4028,1198,1199,'OP_GuildRecruitingMemberInfo',683,1),(4029,1198,1199,'OP_GuildRecruiting',684,1),(4030,1198,1199,'OP_GuildRecruitingDetails',685,1),(4031,1198,1199,'OP_GuildRecruitingImage',686,1),(4032,1198,1199,'OP_TradeskillList',704,1),(4033,1198,1199,'OP_CharRenamed',688,1),(4034,1198,1199,'OP_UseAdornment',698,1),(4035,1198,1199,'OP_ExpPurchWindow',704,1),(4036,1198,1199,'OP_PointOfInterest',708,1),(4037,1198,1199,'OP_PointOfInterest2',709,1),(4038,1198,1199,'OP_TraitsList',710,1),(4039,1198,1199,'OP_CustomizeHouseDisplay',713,1),(4040,1198,1199,'OP_VoiceChatServer',714,1),(4041,1198,1199,'OP_SupplyDepot',718,1),(4042,1198,1199,'OP_EQHearThreatCmd',719,1),(4043,1198,1199,'OP_RecipeList',720,1),(4044,1198,1199,'OP_Research',721,1),(4045,1198,1199,'OP_CharacterCurrency',722,1),(4046,1198,1199,'OP_CharacterAchievements',723,1),(4047,1198,1199,'OP_AchievementUpdateMsg',724,1),(4048,1198,1199,'OP_EQHearDispellCmd',725,1),(4049,1198,1199,'OP_JournalQuestStoryline',726,1),(4050,1198,1199,'OP_DungeonPlayAsAvatarList',727,1),(4051,1198,1199,'OP_DungeonPlayAsAvatarSelected',728,1),(4052,1198,1199,'OP_MercHireWindow',729,1),(4053,1198,1199,'OP_MercUnknown',730,1),(4054,1198,1199,'OP_Unknown',747,1),(4055,0,0,'OP_BrokerAddBag',9999,1),(4056,839,844,'OP_BrokerAddBag',9999,1),(4057,908,927,'OP_BrokerAddBag',9999,1),(4058,1008,1011,'OP_BrokerAddBag',9999,1),(4059,1045,1086,'OP_BrokerAddBag',9999,1),(4060,1096,1096,'OP_BrokerAddBag',9999,1),(4062,0,0,'OP_CharacterCurrency',654,1),(4063,839,844,'OP_CharacterCurrency',654,1),(4064,908,927,'OP_CharacterCurrency',654,1),(4065,1008,1011,'OP_CharacterCurrency',654,1),(4066,1045,1086,'OP_CharacterCurrency',673,1),(4067,1096,1096,'OP_CharacterCurrency',676,1),(4068,0,0,'OP_CharacterPet',9999,1),(4069,839,844,'OP_CharacterPet',9999,1),(4070,908,927,'OP_CharacterPet',9999,1),(4071,1008,1011,'OP_CharacterPet',9999,1),(4072,1045,1086,'OP_CharacterPet',9999,1),(4073,1096,1096,'OP_CharacterPet',9999,1),(4075,0,0,'OP_TradeskillList',9999,1),(4076,839,844,'OP_TradeskillList',9999,1),(4077,908,927,'OP_TradeskillList',9999,1),(4078,1008,1011,'OP_TradeskillList',9999,1),(4079,1045,1086,'OP_TradeskillList',9999,1),(4083,1204,1205,'OP_LoginRequestMsg',0,1),(4084,1204,1205,'OP_LoginByNumRequestMsg',1,1),(4085,1204,1205,'OP_WSLoginRequestMsg',2,1),(4086,1204,1205,'OP_ESLoginRequestMsg',3,1),(4087,1204,1205,'OP_LoginReplyMsg',4,1),(4088,1204,1205,'OP_WSStatusReplyMsg',5,1),(4089,1204,1205,'OP_WorldStatusChangeMsg',6,1),(4090,1204,1205,'OP_AllWSDescRequestMsg',7,1),(4091,1204,1205,'OP_WorldListMsg',8,1),(4092,1204,1205,'OP_AllCharactersDescRequestMsg',9,1),(4093,1204,1205,'OP_AllCharactersDescReplyMsg',10,1),(4094,1204,1205,'OP_CreateCharacterRequestMsg',11,1),(4095,1204,1205,'OP_CreateCharacterReplyMsg',12,1),(4096,1204,1205,'OP_WSCreateCharacterRequestMsg',13,1),(4097,1204,1205,'OP_WSCreateCharacterReplyMsg',14,1),(4098,1204,1205,'OP_ReskinCharacterRequestMsg',15,1),(4099,1204,1205,'OP_DeleteCharacterRequestMsg',16,1),(4100,1204,1205,'OP_DeleteCharacterReplyMsg',17,1),(4101,1204,1205,'OP_PlayCharacterRequestMsg',18,1),(4102,1204,1205,'OP_PlayCharacterReplyMsg',19,1),(4103,1204,1205,'OP_ExpectClientAsCharacterReplyMs',22,1),(4104,1204,1205,'OP_ServerPlayCharacterRequestMsg',23,1),(4105,1204,1205,'OP_ServerPlayCharacterReplyMsg',24,1),(4106,1204,1205,'OP_ESInitMsg',25,1),(4107,1204,1205,'OP_ESReadyForClientsMsg',26,1),(4108,1204,1205,'OP_CreateZoneInstanceMsg',29,1),(4109,1204,1205,'OP_ZoneInstanceCreateReplyMsg',30,1),(4110,1204,1205,'OP_ZoneInstanceDestroyedMsg',31,1),(4111,1204,1205,'OP_ExpectClientAsCharacterRequest',32,1),(4112,1204,1205,'OP_ZoneInfoMsg',33,1),(4113,1204,1205,'OP_DoneLoadingZoneResourcesMsg',34,1),(4114,1204,1205,'OP_DoneSendingInitialEntitiesMsg',35,1),(4115,1204,1205,'OP_DoneLoadingEntityResourcesMsg',36,1),(4116,1204,1205,'OP_PredictionUpdateMsg',37,1),(4117,1204,1205,'OP_UpdatePositionMsg',39,1),(4118,1204,1205,'OP_SetRemoteCmdsMsg',41,1),(4119,1204,1205,'OP_RemoteCmdMsg',42,1),(4120,1204,1205,'OP_GameWorldTimeMsg',43,1),(4121,1204,1205,'OP_MOTDMsg',44,1),(4122,1204,1205,'OP_ZoneMOTDMsg',45,1),(4123,1204,1205,'OP_AvatarCreatedMsg',46,1),(4124,1204,1205,'OP_AvatarDestroyedMsg',47,1),(4125,1204,1205,'OP_RequestCampMsg',50,1),(4126,1204,1205,'OP_CampStartedMsg',51,1),(4127,1204,1205,'OP_CampAbortedMsg',52,1),(4128,1204,1205,'OP_WhoQueryRequestMsg',53,1),(4129,1204,1205,'OP_WhoQueryReplyMsg',54,1),(4130,1204,1205,'OP_MonitorReplyMsg',55,1),(4131,1204,1205,'OP_MonitorCharacterListMsg',56,1),(4132,1204,1205,'OP_MonitorCharacterListRequestMsg',57,1),(4133,1204,1205,'OP_ClientCmdMsg',58,1),(4134,1204,1205,'OP_DispatchESMsg',59,1),(4135,1204,1205,'OP_DispatchClientCmdMsg',60,1),(4136,1204,1205,'OP_UpdateTargetMsg',61,1),(4137,1204,1205,'OP_UpdateTargetLocMsg',62,1),(4138,1204,1205,'OP_UpdateCharacterSheetMsg',63,1),(4139,1204,1205,'OP_CharacterPet',64,1),(4140,1204,1205,'OP_CharacterMerc',65,1),(4141,1204,1205,'OP_UpdateSpellBookMsg',66,1),(4142,1204,1205,'OP_UpdateInventoryMsg',68,1),(4143,1204,1205,'OP_AfterInvSpellUpdate',69,1),(4144,1204,1205,'OP_UpdateRecipeBookMsg',70,1),(4145,1204,1205,'OP_RequestRecipeDetailsMsg',71,1),(4146,1204,1205,'OP_RecipeDetailsMsg',72,1),(4147,1204,1205,'OP_UpdateSkillBookMsg',73,1),(4148,1204,1205,'OP_UpdateSkillsMsg',74,1),(4149,1204,1205,'OP_UpdateOpportunityMsg',75,1),(4150,1204,1205,'OP_ChangeZoneMsg',77,1),(4151,1204,1205,'OP_ClientTeleportRequestMsg',78,1),(4152,1204,1205,'OP_TeleportWithinZoneMsg',79,1),(4153,1204,1205,'OP_TeleportWithinZoneNoReloadMsg',80,1),(4154,1204,1205,'OP_MigrateClientToZoneRequestMsg',81,1),(4155,1204,1205,'OP_MigrateClientToZoneReplyMsg',82,1),(4156,1204,1205,'OP_ReadyToZoneMsg',84,1),(4157,1204,1205,'OP_RemoveClientFromGroupMsg',85,1),(4158,1204,1205,'OP_RemoveGroupFromGroupMsg',86,1),(4159,1204,1205,'OP_MakeGroupLeaderMsg',87,1),(4160,1204,1205,'OP_GroupCreatedMsg',88,1),(4161,1204,1205,'OP_GroupDestroyedMsg',89,1),(4162,1204,1205,'OP_GroupMemberAddedMsg',90,1),(4163,1204,1205,'OP_GroupMemberRemovedMsg',91,1),(4164,1204,1205,'OP_GroupRemovedFromGroupMsg',92,1),(4165,1204,1205,'OP_GroupLeaderChangedMsg',93,1),(4166,1204,1205,'OP_GroupResendOOZDataMsg',94,1),(4167,1204,1205,'OP_GroupSettingsChangedMsg',95,1),(4168,1204,1205,'OP_OutOfZoneMemberDataMsg',96,1),(4169,1204,1205,'OP_SendLatestRequestMsg',97,1),(4170,1204,1205,'OP_ClearDataMsg',98,1),(4171,1204,1205,'OP_SetSocialMsg',99,1),(4172,1204,1205,'OP_ESStatusMsg',100,1),(4173,1204,1205,'OP_ESZoneInstanceStatusMsg',101,1),(4174,1204,1205,'OP_ZonesStatusRequestMsg',102,1),(4175,1204,1205,'OP_ZonesStatusMsg',103,1),(4176,1204,1205,'OP_ESWeatherRequestMsg',104,1),(4177,1204,1205,'OP_ESWeatherRequestEndMsg',105,1),(4178,1204,1205,'OP_DialogSelectMsg',109,1),(4179,1204,1205,'OP_DialogCloseMsg',110,1),(4180,1204,1205,'OP_RemoveSpellEffectMsg',111,1),(4181,1204,1205,'OP_RemoveConcentrationMsg',112,1),(4182,1204,1205,'OP_QuestJournalOpenMsg',113,1),(4183,1204,1205,'OP_QuestJournalInspectMsg',114,1),(4184,1204,1205,'OP_QuestJournalSetVisibleMsg',115,1),(4185,1204,1205,'OP_QuestJournalWaypointMsg',116,1),(4186,1204,1205,'OP_CreateGuildRequestMsg',119,1),(4187,1204,1205,'OP_CreateGuildReplyMsg',120,1),(4188,1204,1205,'OP_GuildsayMsg',121,1),(4189,1204,1205,'OP_FellowshipExpMsg',122,1),(4190,1204,1205,'OP_DeleteGuildMsg',123,1),(4191,1204,1205,'OP_GuildUpdateMsg',124,1),(4192,1204,1205,'OP_ConsignmentCloseStoreMsg',125,1),(4193,1204,1205,'OP_ConsignItemRequestMsg',126,1),(4194,1204,1205,'OP_ConsignItemResponseMsg',127,1),(4195,1204,1205,'OP_PurchaseConsignmentRequestMsg',128,1),(4196,1204,1205,'OP_LikeOption',135,1),(4197,1204,1205,'OP_PublishHouse',138,1),(4198,1204,1205,'OP_PlayerMadeInstacnesScreen',139,1),(4199,1204,1205,'OP_PlayerMadeInstances',140,1),(4200,1204,1205,'OP_HouseDeletedRemotelyMsg',141,1),(4201,1204,1205,'OP_UpdateHouseDataMsg',142,1),(4202,1204,1205,'OP_UpdateHouseAccessDataMsg',143,1),(4203,1204,1205,'OP_PlayerHouseBaseScreenMsg',144,1),(4204,1204,1205,'OP_PlayerHousePurchaseScreenMsg',145,1),(4205,1204,1205,'OP_PlayerHouseAccessUpdateMsg',146,1),(4206,1204,1205,'OP_PlayerHouseDisplayStatusMsg',147,1),(4207,1204,1205,'OP_PlayerHouseCloseUIMsg',148,1),(4208,1204,1205,'OP_BuyPlayerHouseMsg',149,1),(4209,1204,1205,'OP_BuyPlayerHouseTintMsg',150,1),(4210,1204,1205,'OP_CollectAllHouseItemsMsg',151,1),(4211,1204,1205,'OP_RelinquishHouseMsg',152,1),(4212,1204,1205,'OP_EnterHouseMsg',153,1),(4213,1204,1205,'OP_ExitHouseMsg',154,1),(4214,1204,1205,'OP_HouseDefaultAccessSetMsg',155,1),(4215,1204,1205,'OP_HouseAccessSetMsg',156,1),(4216,1204,1205,'OP_HouseAccessRemoveMsg',157,1),(4217,1204,1205,'OP_PayHouseUpkeepMsg',158,1),(4218,1204,1205,'OP_MoveableObjectPlacementCriteri',159,1),(4219,1204,1205,'OP_EnterMoveObjectModeMsg',160,1),(4220,1204,1205,'OP_PositionMoveableObject',161,1),(4221,1204,1205,'OP_CancelMoveObjectModeMsg',162,1),(4222,1204,1205,'OP_ShaderCustomizationMsg',163,1),(4223,1204,1205,'OP_ReplaceableSubMeshesMsg',164,1),(4224,1204,1205,'OP_HouseCustomizationScreenMsg',165,1),(4225,1204,1205,'OP_CustomizationPurchaseRequestMs',166,1),(4226,1204,1205,'OP_CustomizationSetRequestMsg',167,1),(4227,1204,1205,'OP_CustomizationReplyMsg',168,1),(4228,1204,1205,'OP_TintWidgetsMsg',169,1),(4229,1204,1205,'OP_ExamineConsignmentRequestMsg',170,1),(4230,1204,1205,'OP_ExamineConsignmentResponseMsg',171,1),(4231,1204,1205,'OP_UISettingsResponseMsg',172,1),(4232,1204,1205,'OP_UIResetMsg',173,1),(4233,1204,1205,'OP_KeymapLoadMsg',174,1),(4234,1204,1205,'OP_KeymapNoneMsg',175,1),(4235,1204,1205,'OP_KeymapDataMsg',176,1),(4236,1204,1205,'OP_KeymapSaveMsg',177,1),(4237,1204,1205,'OP_DispatchSpellCmdMsg',178,1),(4238,1204,1205,'OP_EntityVerbsRequestMsg',179,1),(4239,1204,1205,'OP_EntityVerbsReplyMsg',180,1),(4240,1204,1205,'OP_EntityVerbsVerbMsg',181,1),(4241,1204,1205,'OP_ChatRelationshipUpdateMsg',183,1),(4242,1204,1205,'OP_LootItemsRequestMsg',184,1),(4243,1204,1205,'OP_StoppedLootingMsg',185,1),(4244,1204,1205,'OP_SitMsg',186,1),(4245,1204,1205,'OP_StandMsg',187,1),(4246,1204,1205,'OP_SatMsg',188,1),(4247,1204,1205,'OP_StoodMsg',189,1),(4248,1204,1205,'OP_ClearForTakeOffMsg',190,1),(4249,1204,1205,'OP_ReadyForTakeOffMsg',191,1),(4250,1204,1205,'OP_ShowIllusionsMsg',192,1),(4251,1204,1205,'OP_HideIllusionsMsg',193,1),(4252,1204,1205,'OP_ExamineItemRequestMsg',194,1),(4253,1204,1205,'OP_ReadBookPageMsg',195,1),(4254,1204,1205,'OP_DefaultGroupOptionsRequestMsg',196,1),(4255,1204,1205,'OP_DefaultGroupOptionsMsg',197,1),(4256,1204,1205,'OP_GroupOptionsMsg',198,1),(4257,1204,1205,'OP_DisplayGroupOptionsScreenMsg',199,1),(4258,1204,1205,'OP_PetOptions',200,1),(4259,1204,1205,'OP_DisplayInnVisitScreenMsg',201,1),(4260,1204,1205,'OP_DumpSchedulerMsg',202,1),(4261,1204,1205,'OP_LSCheckAcctLockMsg',203,1),(4262,1204,1205,'OP_WSAcctLockStatusMsg',204,1),(4263,1204,1205,'OP_RequestHelpRepathMsg',205,1),(4264,1204,1205,'OP_RequestTargetLocMsg',206,1),(4265,1204,1205,'OP_UpdateMotdMsg',207,1),(4266,1204,1205,'OP_DestUpdateReq',209,1),(4267,1204,1205,'OP_PerformPlayerKnockbackMsg',212,1),(4268,1204,1205,'OP_PerformCameraShakeMsg',213,1),(4269,1204,1205,'OP_PopulateSkillMapsMsg',214,1),(4270,1204,1205,'OP_CancelledFeignMsg',215,1),(4271,1204,1205,'OP_SysClient',217,1),(4272,1204,1205,'OP_ShowCreateFromRecipeUIMsg',218,1),(4273,1204,1205,'OP_CancelCreateFromRecipeMsg',219,1),(4274,1204,1205,'OP_BeginItemCreationMsg',220,1),(4275,1204,1205,'OP_StopItemCreationMsg',221,1),(4276,1204,1205,'OP_ShowItemCreationProcessUIMsg',222,1),(4277,1204,1205,'OP_UpdateItemCreationProcessUIMsg',223,1),(4278,1204,1205,'OP_DisplayTSEventReactionMsg',224,1),(4279,1204,1205,'OP_ShowRecipeBookMsg',225,1),(4280,1204,1205,'OP_KnowledgebaseRequestMsg',226,1),(4281,1204,1205,'OP_KnowledgebaseResponseMsg',227,1),(4282,1204,1205,'OP_CSTicketHeaderRequestMsg',228,1),(4283,1204,1205,'OP_CSTicketInfoMsg',229,1),(4284,1204,1205,'OP_CSTicketCommentRequestMsg',230,1),(4285,1204,1205,'OP_CSTicketCommentResponseMsg',231,1),(4286,1204,1205,'OP_CSTicketCreateMsg',232,1),(4287,1204,1205,'OP_CSTicketAddCommentMsg',233,1),(4288,1204,1205,'OP_CSTicketDeleteMsg',234,1),(4289,1204,1205,'OP_CSTicketChangeNotificationMsg',235,1),(4290,1204,1205,'OP_WorldDataUpdateMsg',236,1),(4291,1204,1205,'OP_KnownLanguagesMsg',237,1),(4292,1204,1205,'OP_LsRequestClientCrashLogMsg',238,1),(4293,1204,1205,'OP_LsClientBaselogReplyMsg',239,1),(4294,1204,1205,'OP_LsClientCrashlogReplyMsg',240,1),(4295,1204,1205,'OP_LsClientAlertlogReplyMsg',241,1),(4296,1204,1205,'OP_LsClientVerifylogReplyMsg',242,1),(4297,1204,1205,'OP_ClientTeleportToLocationMsg',243,1),(4298,1204,1205,'OP_UpdateClientPredFlagsMsg',244,1),(4299,1204,1205,'OP_ChangeServerControlFlagMsg',245,1),(4300,1204,1205,'OP_CSToolsRequestMsg',246,1),(4301,1204,1205,'OP_CSToolsResponseMsg',247,1),(4302,1204,1205,'OP_AddSocialStructureStandingMsg',248,1),(4303,1204,1205,'OP_CreateBoatTransportsMsg',249,1),(4304,1204,1205,'OP_PositionBoatTransportMsg',250,1),(4305,1204,1205,'OP_MigrateBoatTransportMsg',251,1),(4306,1204,1205,'OP_MigrateBoatTransportReplyMsg',252,1),(4307,1204,1205,'OP_DisplayDebugNLLPointsMsg',253,1),(4308,1204,1205,'OP_ExamineInfoRequestMsg',254,1),(4309,1204,1205,'OP_QuickbarInitMsg',255,1),(4310,1204,1205,'OP_QuickbarUpdateMsg',256,1),(4311,1204,1205,'OP_MacroInitMsg',257,1),(4312,1204,1205,'OP_MacroUpdateMsg',258,1),(4313,1204,1205,'OP_QuestionnaireMsg',259,1),(4314,1204,1205,'OP_LevelChangedMsg',260,1),(4315,1204,1205,'OP_SpellGainedMsg',261,1),(4316,1204,1205,'OP_EncounterBrokenMsg',262,1),(4317,1204,1205,'OP_OnscreenMsgMsg',263,1),(4318,1204,1205,'OP_DisplayWarningMsg',264,1),(4319,1204,1205,'OP_ModifyGuildMsg',265,1),(4320,1204,1205,'OP_GuildEventMsg',266,1),(4321,1204,1205,'OP_GuildEventAddMsg',267,1),(4322,1204,1205,'OP_GuildEventActionMsg',268,1),(4323,1204,1205,'OP_GuildEventListMsg',269,1),(4324,1204,1205,'OP_RequestGuildEventDetailsMsg',270,1),(4325,1204,1205,'OP_GuildEventDetailsMsg',271,1),(4326,1204,1205,'OP_RequestGuildInfoMsg',272,1),(4327,1204,1205,'OP_GuildBankActionMsg',273,1),(4328,1204,1205,'OP_GuildBankActionResponseMsg',274,1),(4329,1204,1205,'OP_GuildBankItemDetailsRequestMsg',275,1),(4330,1204,1205,'OP_GuildBankItemDetailsResponseMs',276,1),(4331,1204,1205,'OP_GuildBankUpdateMsg',277,1),(4332,1204,1205,'OP_GuildBankEventListMsg',278,1),(4333,1204,1205,'OP_RequestGuildBankEventDetailsMs',279,1),(4334,1204,1205,'OP_RewardPackMsg',280,1),(4335,1204,1205,'OP_RenameGuildMsg',281,1),(4336,1204,1205,'OP_ZoneToFriendRequestMsg',282,1),(4337,1204,1205,'OP_ZoneToFriendReplyMsg',283,1),(4338,1204,1205,'OP_ChatCreateChannelMsg',284,1),(4339,1204,1205,'OP_ChatJoinChannelMsg',285,1),(4340,1204,1205,'OP_ChatWhoChannelMsg',286,1),(4341,1204,1205,'OP_ChatLeaveChannelMsg',287,1),(4342,1204,1205,'OP_ChatTellChannelMsg',288,1),(4343,1204,1205,'OP_ChatTellUserMsg',289,1),(4344,1204,1205,'OP_ChatToggleFriendMsg',290,1),(4345,1204,1205,'OP_BrokerAddBag',291,1),(4346,1204,1205,'OP_BrokerRemoveBag',292,1),(4347,1204,1205,'OP_ChatToggleIgnoreMsg',293,1),(4348,1204,1205,'OP_ChatSendFriendsMsg',294,1),(4349,1204,1205,'OP_ChatSendIgnoresMsg',295,1),(4350,1204,1205,'OP_QuestReward',319,1),(4351,1204,1205,'OP_ChatFiltersMsg',334,1),(4352,1204,1205,'OP_MailGetMessageMsg',337,1),(4353,1204,1205,'OP_MailSendMessageMsg',338,1),(4354,1204,1205,'OP_MailDeleteMessageMsg',339,1),(4355,1204,1205,'OP_MailGetHeadersReplyMsg',340,1),(4356,1204,1205,'OP_MailGetMessageReplyMsg',341,1),(4357,1204,1205,'OP_MailSendMessageReplyMsg',342,1),(4358,1204,1205,'OP_MailCommitSendMessageMsg',343,1),(4359,1204,1205,'OP_MailSendSystemMessageMsg',344,1),(4360,1204,1205,'OP_MailRemoveAttachFromMailMsg',345,1),(4361,1204,1205,'OP_WaypointRequestMsg',347,1),(4362,1204,1205,'OP_WaypointReplyMsg',348,1),(4363,1204,1205,'OP_WaypointSelectMsg',349,1),(4364,1204,1205,'OP_WaypointUpdateMsg',350,1),(4365,1204,1205,'OP_CharNameChangedMsg',351,1),(4366,1204,1205,'OP_ShowZoneTeleporterDestinations',352,1),(4367,1204,1205,'OP_SelectZoneTeleporterDestinatio',353,1),(4368,1204,1205,'OP_ReloadLocalizedTxtMsg',354,1),(4369,1204,1205,'OP_RequestGuildMembershipMsg',355,1),(4370,1204,1205,'OP_GuildMembershipResponseMsg',356,1),(4371,1204,1205,'OP_LeaveGuildNotifyMsg',357,1),(4372,1204,1205,'OP_JoinGuildNotifyMsg',358,1),(4373,1204,1205,'OP_AvatarUpdateMsg',359,1),(4374,1204,1205,'OP_BioUpdateMsg',361,1),(4375,1204,1205,'OP_InspectPlayerMsg',362,1),(4376,1204,1205,'OP_WSServerLockMsg',363,1),(4377,1204,1205,'OP_LSServerLockMsg',364,1),(4378,1204,1205,'OP_WSServerHideMsg',365,1),(4379,1204,1205,'OP_CsCategoryRequestMsg',366,1),(4380,1204,1205,'OP_CsCategoryResponseMsg',367,1),(4381,1204,1205,'OP_KnowledgeWindowSlotMappingMsg',368,1),(4382,1204,1205,'OP_AFKUpdateMsg',369,1),(4383,1204,1205,'OP_AnonUpdateMsg',370,1),(4384,1204,1205,'OP_UpdateActivePublicZonesMsg',371,1),(4385,1204,1205,'OP_UnknownNpcMsg',372,1),(4386,1204,1205,'OP_PromoFlagsDetailsMsg',373,1),(4387,1204,1205,'OP_ConsignViewCreateMsg',374,1),(4388,1204,1205,'OP_ConsignViewGetPageMsg',375,1),(4389,1204,1205,'OP_ConsignViewReleaseMsg',376,1),(4390,1204,1205,'OP_ConsignRemoveItemsMsg',377,1),(4391,1204,1205,'OP_UpdateDebugRadiiMsg',378,1),(4392,1204,1205,'OP_ReportMsg',379,1),(4393,1204,1205,'OP_UpdateRaidMsg',380,1),(4394,1204,1205,'OP_ConsignViewSortMsg',382,1),(4395,1204,1205,'OP_TitleUpdateMsg',383,1),(4396,1204,1205,'OP_ClientFellMsg',384,1),(4397,1204,1205,'OP_ClientInDeathRegionMsg',385,1),(4398,1204,1205,'OP_CampClientMsg',386,1),(4399,1204,1205,'OP_CSToolAccessResponseMsg',387,1),(4400,1204,1205,'OP_TrackingUpdateMsg',388,1),(4401,1204,1205,'OP_BeginTrackingMsg',389,1),(4402,1204,1205,'OP_StopTrackingMsg',390,1),(4403,1204,1205,'OP_GetAvatarAccessRequestForCSToo',392,1),(4404,1204,1205,'OP_AdvancementRequestMsg',393,1),(4405,1204,1205,'OP_MapFogDataInitMsg',394,1),(4406,1204,1205,'OP_MapFogDataUpdateMsg',395,1),(4407,1204,1205,'OP_CloseGroupInviteWindowMsg',396,1),(4408,1204,1205,'OP_UpdateGroupMemberDataMsg',397,1),(4409,1204,1205,'OP_WorldPingMsg',398,1),(4410,1204,1205,'OP_MoveLogUpdateMsg',389,1),(4411,1204,1205,'OP_OfferQuestMsg',400,1),(4412,1204,1205,'OP_WorldShutdownUpdateMsg',402,1),(4413,1204,1205,'OP_DisplayMailScreenMsg',403,1),(4414,1204,1205,'OP_ClientIdleBeginMsg',404,1),(4415,1204,1205,'OP_ClientIdleEndMsg',405,1),(4416,1204,1205,'OP_PurchaseConsignmentLoreCheckRe',406,1),(4417,1204,1205,'OP_NotifyApprenticeStoppedMentori',407,1),(4418,1204,1205,'OP_CorruptedClientMsg',408,1),(4419,1204,1205,'OP_WorldDataChangeMsg',409,1),(4420,1204,1205,'OP_MailEventNotificationMsg',410,1),(4421,1204,1205,'OP_RestartZoneMsg',411,1),(4422,1204,1205,'OP_FlightPathsMsg',412,1),(4423,1204,1205,'OP_CharacterLinkdeadMsg',413,1),(4424,1204,1205,'OP_CharTransferStartRequestMsg',414,1),(4425,1204,1205,'OP_CharTransferStartReplyMsg',415,1),(4426,1204,1205,'OP_CharTransferRequestMsg',416,1),(4427,1204,1205,'OP_CharTransferReplyMsg',417,1),(4428,1204,1205,'OP_CharTransferRollbackRequestMsg',418,1),(4429,1204,1205,'OP_CharTransferCommitRequestMsg',419,1),(4430,1204,1205,'OP_CharTransferRollbackReplyMsg',420,1),(4431,1204,1205,'OP_CharTransferCommitReplyMsg',421,1),(4432,1204,1205,'OP_GetCharacterSerializedRequestM',422,1),(4433,1204,1205,'OP_GetCharacterSerializedReplyMsg',423,1),(4434,1204,1205,'OP_CreateCharFromCBBRequestMsg',424,1),(4435,1204,1205,'OP_CreateCharFromCBBReplyMsg',425,1),(4436,1204,1205,'OP_HousingDataChangedMsg',426,1),(4437,1204,1205,'OP_HousingRestoreMsg',427,1),(4438,1204,1205,'OP_AuctionItem',428,1),(4439,1204,1205,'OP_AuctionItemReply',429,1),(4440,1204,1205,'OP_AuctionCoin',430,1),(4441,1204,1205,'OP_AuctionCoinReply',431,1),(4442,1204,1205,'OP_AuctionCharacter',432,1),(4443,1204,1205,'OP_AuctionCharacterReply',433,1),(4444,1204,1205,'OP_AuctionCommitMsg',434,1),(4445,1204,1205,'OP_AuctionAbortMsg',435,1),(4446,1204,1205,'OP_CharTransferValidateRequestMsg',436,1),(4447,1204,1205,'OP_CharTransferValidateReplyMsg',437,1),(4448,1204,1205,'OP_RaceRestrictionMsg',438,1),(4449,1204,1205,'OP_SetInstanceDisplayNameMsg',439,1),(4450,1204,1205,'OP_GetAuctionAssetIDMsg',440,1),(4451,1204,1205,'OP_GetAuctionAssetIDReplyMsg',441,1),(4452,1204,1205,'OP_ResendWorldChannelsMsg',442,1),(4453,1204,1205,'OP_DisplayExchangeScreenMsg',443,1),(4454,1204,1205,'OP_ArenaGameTypesMsg',444,1),(4455,1204,1205,'OP_AuditAuctionEventMsg',445,1),(4456,1204,1205,'OP_InviteRequestMsg',446,1),(4457,1204,1205,'OP_InviteResponseMsg',447,1),(4458,1204,1205,'OP_InviteTargetResponseMsg',448,1),(4459,1204,1205,'OP_InspectPlayerRequestMsg',449,1),(4460,1204,1205,'OP_DispatchMsg',450,1),(4461,1204,1205,'OP_DisplayEventMsg',451,1),(4462,1204,1205,'OP_PrePossessionMsg',452,1),(4463,1204,1205,'OP_PostPossessionMsg',453,1),(4464,1204,1205,'OP_ArenaCreate',455,1),(4465,1204,1205,'OP_ArenaList',456,1),(4466,1204,1205,'OP_ArenaWindow',464,1),(4467,1204,1205,'OP_HouseItemsList',482,1),(4468,1204,1205,'OP_CurrentPet',484,1),(4469,1204,1205,'OP_AdventureList',487,1),(4470,1204,1205,'OP_CancelSpellCast',488,1),(4471,1204,1205,'OP_UpdateTitleCmd',493,1),(4472,1204,1205,'OP_AttackAllowed',499,1),(4473,1204,1205,'OP_AttackNotAllowed',500,1),(4474,1204,1205,'OP_BagOptions',501,1),(4475,1204,1205,'OP_LFGGroupSearch',503,1),(4476,1204,1205,'OP_CharacterHousingList',506,1),(4477,1204,1205,'OP_DressingRoom',509,1),(4478,1204,1205,'OP_PlayLon',510,1),(4479,1204,1205,'OP_SkillInfoRequest',513,1),(4480,1204,1205,'OP_SkillInfoResponse',514,1),(4481,1204,1205,'OP_LFGUpdateMsg',517,1),(4482,1204,1205,'OP_BadLanguageFilter',518,1),(4483,1204,1205,'OP_VoiceChatChannel',519,1),(4484,1204,1205,'OP_MapRequest',520,1),(4485,1204,1205,'OP_MarketFundsUpdate',525,1),(4486,1204,1205,'OP_UIEvent',526,1),(4487,1204,1205,'OP_MarketAddFundsRequest',527,1),(4488,1204,1205,'OP_MarketAddFundsReply',528,1),(4489,1204,1205,'OP_MarketPurchase',530,1),(4490,1204,1205,'OP_MarketPlacePrices',531,1),(4491,1204,1205,'OP_MarketPlaceItems',534,1),(4492,1204,1205,'OP_RecipeBook',535,1),(4493,1204,1205,'OP_CreateCharacterDungeon',544,1),(4494,1204,1205,'OP_DungeonMakerEnter',545,1),(4495,1204,1205,'OP_DungeonMakerItemRequest',547,1),(4496,1204,1205,'OP_CharacterCreatedDungeons',548,1),(4497,1204,1205,'OP_DungeonMakerToolboxList',549,1),(4498,1204,1205,'OP_DungeonMakerUnknown',550,1),(4499,1204,1205,'OP_DungeonMakerUnknown1',551,1),(4500,1204,1205,'OP_PlayerPollPopup',553,1),(4501,1204,1205,'OP_PlayerPollAnswer',554,1),(4502,1204,1205,'OP_MentorPopup',555,1),(4503,1204,1205,'OP_LoadWelcomeWindow',557,1),(4504,1204,1205,'OP_OpenCharCust',558,1),(4505,1204,1205,'OP_SubmitCharCust',559,1),(4506,1204,1205,'OP_QueAllBgSolo',561,1),(4507,1204,1205,'OP_ZoneBgInstanceList',563,1),(4508,1204,1205,'OP_WorldTravelAvail',567,1),(4509,1204,1205,'OP_PaperdollImage',570,1),(4510,1204,1205,'OP_LoadCalendarEvents',571,1),(4511,1204,1205,'OP_VideoUploaded',572,1),(4512,1204,1205,'OP_SavageBarInitMsg',573,1),(4513,1204,1205,'OP_PetOptionsResponse',574,1),(4514,1204,1205,'OP_DungeonMakerItemResponse',575,1),(4515,1204,1205,'OP_CharacterMounts',577,1),(4516,1204,1205,'OP_EqBetaCopyRequest',587,1),(4517,1204,1205,'OP_EqHearChatCmd',588,1),(4518,1204,1205,'OP_EqDisplayTextCmd',589,1),(4519,1204,1205,'OP_EqCreateGhostCmd',590,1),(4520,1204,1205,'OP_EqCreateWidgetCmd',591,1),(4521,1204,1205,'OP_EqCreateSignWidgetCmd',592,1),(4522,1204,1205,'OP_EqDestroyGhostCmd',593,1),(4523,1204,1205,'OP_EqUpdateGhostCmd',594,1),(4524,1204,1205,'OP_EqSetControlGhostCmd',595,1),(4525,1204,1205,'OP_EqSetPOVGhostCmd',596,1),(4526,1204,1205,'OP_EqHearCombatCmd',597,1),(4527,1204,1205,'OP_EqHearSpellCastCmd',598,1),(4528,1204,1205,'OP_EQHearProcCmd',599,1),(4529,1204,1205,'OP_EQHearResEffectCmd',600,1),(4530,1204,1205,'OP_EqHearSpellInterruptCmd',601,1),(4531,1204,1205,'OP_EqHearSpellFizzleCmd',602,1),(4532,1204,1205,'OP_EqHearConsiderCmd',603,1),(4533,1204,1205,'OP_EqUpdateSubClassesCmd',604,1),(4534,1204,1205,'OP_EqCreateListBoxCmd',605,1),(4535,1204,1205,'OP_EqSetDebugPathPointsCmd',606,1),(4536,1204,1205,'OP_EqCannedEmoteCmd',608,1),(4537,1204,1205,'OP_EqStateCmd',609,1),(4538,1204,1205,'OP_EqPlaySoundCmd',610,1),(4539,1204,1205,'OP_EqPlaySound3DCmd',611,1),(4540,1204,1205,'OP_EqPlayVoiceCmd',612,1),(4541,1204,1205,'OP_EqHearDrowningCmd',613,1),(4542,1204,1205,'OP_EqHearDeathCmd',614,1),(4543,1204,1205,'OP_EqGroupMemberRemovedCmd',615,1),(4544,1204,1205,'OP_EqHearChainEffectCmd',616,1),(4545,1204,1205,'OP_EqReceiveOfferCmd',617,1),(4546,1204,1205,'OP_EqInspectPCResultsCmd',618,1),(4547,1204,1205,'OP_EqDrawablePathGraphCmd',619,1),(4548,1204,1205,'OP_EqDialogOpenCmd',620,1),(4549,1204,1205,'OP_EqDialogCloseCmd',621,1),(4550,1204,1205,'OP_EqFactionUpdateCmd',622,1),(4551,1204,1205,'OP_EqCollectionUpdateCmd',623,1),(4552,1204,1205,'OP_EqCollectionFilterCmd',624,1),(4553,1204,1205,'OP_EqCollectionItemCmd',625,1),(4554,1204,1205,'OP_EqQuestJournalUpdateCmd',626,1),(4555,1204,1205,'OP_EqMentoring',627,1),(4556,1204,1205,'OP_EqQuestJournalReplyCmd',628,1),(4557,1204,1205,'OP_EqQuestGroupCmd',629,1),(4558,1204,1205,'OP_EqUpdateMerchantCmd',630,1),(4559,1204,1205,'OP_EqUpdateStoreCmd',631,1),(4560,1204,1205,'OP_EqUpdatePlayerTradeCmd',632,1),(4561,1204,1205,'OP_EqHelpPathCmd',633,1),(4562,1204,1205,'OP_EqHelpPathClearCmd',634,1),(4563,1204,1205,'OP_EqUpdateBankCmd',635,1),(4564,1204,1205,'OP_EqExamineInfoCmd',636,1),(4565,1204,1205,'OP_EqCloseWindowCmd',637,1),(4566,1204,1205,'OP_EqUpdateLootCmd',638,1),(4567,1204,1205,'OP_EqJunctionListCmd',639,1),(4568,1204,1205,'OP_EqShowDeathWindowCmd',640,1),(4569,1204,1205,'OP_EqDisplaySpellFailCmd',641,1),(4570,1204,1205,'OP_EqSpellCastStartCmd',642,1),(4571,1204,1205,'OP_EqSpellCastEndCmd',643,1),(4572,1204,1205,'OP_EqResurrectedCmd',644,1),(4573,1204,1205,'OP_EqChoiceWinCmd',645,1),(4574,1204,1205,'OP_EqSetDefaultVerbCmd',646,1),(4575,1204,1205,'OP_EqInstructionWindowCmd',647,1),(4576,1204,1205,'OP_EqInstructionWindowCloseCmd',648,1),(4577,1204,1205,'OP_EqInstructionWindowGoalCmd',649,1),(4578,1204,1205,'OP_EqInstructionWindowTaskCmd',650,1),(4579,1204,1205,'OP_EqEnableGameEventCmd',651,1),(4580,1204,1205,'OP_EqShowWindowCmd',652,1),(4581,1204,1205,'OP_EqEnableWindowCmd',653,1),(4582,1204,1205,'OP_EqFlashWindowCmd',654,1),(4583,1204,1205,'OP_EqHearPlayFlavorCmd',656,1),(4584,1204,1205,'OP_EqUpdateSignWidgetCmd',657,1),(4585,1204,1205,'OP_EqDebugPVDCmd',658,1),(4586,1204,1205,'OP_EqShowBookCmd',659,1),(4587,1204,1205,'OP_EqQuestionnaireCmd',660,1),(4588,1204,1205,'OP_EqGetProbsCmd',662,1),(4589,1204,1205,'OP_EqHearHealCmd',663,1),(4590,1204,1205,'OP_EqChatChannelUpdateCmd',664,1),(4591,1204,1205,'OP_EqWhoChannelQueryReplyCmd',665,1),(4592,1204,1205,'OP_EqAvailWorldChannelsCmd',666,1),(4593,1204,1205,'OP_EqUpdateTargetCmd',667,1),(4594,1204,1205,'OP_BrokerSellList',668,1),(4595,1204,1205,'OP_EqConsignmentItemsCmd',669,1),(4596,1204,1205,'OP_EqStartBrokerCmd',671,1),(4597,1204,1205,'OP_EqMapExplorationCmd',672,1),(4598,1204,1205,'OP_EqStoreLogCmd',673,1),(4599,1204,1205,'OP_EqSpellMoveToRangeAndRetryCmd',674,1),(4600,1204,1205,'OP_EqUpdatePlayerMailCmd',675,1),(4601,1204,1205,'OP_GuildStatusUpdate',678,1),(4602,1204,1205,'OP_EqArenaResultsCmd',679,1),(4603,1204,1205,'OP_EqGuildBankEventActionCmd',680,1),(4604,1204,1205,'OP_EqGuildBankExamineInfoCmd',681,1),(4605,1204,1205,'OP_EqHearSpellNoLandCmd',682,1),(4606,1204,1205,'OP_Lottery',683,1),(4607,1204,1205,'OP_GuildRecruitingMemberInfo',684,1),(4608,1204,1205,'OP_GuildRecruiting',685,1),(4609,1204,1205,'OP_GuildRecruitingDetails',686,1),(4610,1204,1205,'OP_GuildRecruitingImage',687,1),(4611,1204,1205,'OP_TradeskillList',705,1),(4612,1204,1205,'OP_CharRenamed',689,1),(4613,1204,1205,'OP_UseAdornment',699,1),(4614,1204,1205,'OP_ExpPurchWindow',705,1),(4615,1204,1205,'OP_PointOfInterest',709,1),(4616,1204,1205,'OP_PointOfInterest2',710,1),(4617,1204,1205,'OP_TraitsList',711,1),(4618,1204,1205,'OP_CustomizeHouseDisplay',714,1),(4619,1204,1205,'OP_VoiceChatServer',715,1),(4620,1204,1205,'OP_SupplyDepot',719,1),(4621,1204,1205,'OP_EQHearThreatCmd',720,1),(4622,1204,1205,'OP_RecipeList',721,1),(4623,1204,1205,'OP_Research',722,1),(4624,1204,1205,'OP_CharacterCurrency',723,1),(4625,1204,1205,'OP_CharacterAchievements',724,1),(4626,1204,1205,'OP_AchievementUpdateMsg',725,1),(4627,1204,1205,'OP_EQHearDispellCmd',726,1),(4628,1204,1205,'OP_JournalQuestStoryline',727,1),(4629,1204,1205,'OP_DungeonPlayAsAvatarList',728,1),(4630,1204,1205,'OP_DungeonPlayAsAvatarSelected',729,1),(4631,1204,1205,'OP_MercHireWindow',730,1),(4632,1204,1205,'OP_MercUnknown',731,1),(4633,1204,1205,'OP_Unknown',748,1),(4634,1208,1208,'OP_LoginRequestMsg',0,1),(4635,1208,1208,'OP_LoginByNumRequestMsg',1,1),(4636,1208,1208,'OP_WSLoginRequestMsg',2,1),(4637,1208,1208,'OP_ESLoginRequestMsg',3,1),(4638,1208,1208,'OP_LoginReplyMsg',4,1),(4639,1208,1208,'OP_WSStatusReplyMsg',5,1),(4640,1208,1208,'OP_WorldStatusChangeMsg',6,1),(4641,1208,1208,'OP_AllWSDescRequestMsg',7,1),(4642,1208,1208,'OP_WorldListMsg',8,1),(4643,1208,1208,'OP_AllCharactersDescRequestMsg',9,1),(4644,1208,1208,'OP_AllCharactersDescReplyMsg',10,1),(4645,1208,1208,'OP_CreateCharacterRequestMsg',11,1),(4646,1208,1208,'OP_CreateCharacterReplyMsg',12,1),(4647,1208,1208,'OP_WSCreateCharacterRequestMsg',13,1),(4648,1208,1208,'OP_WSCreateCharacterReplyMsg',14,1),(4649,1208,1208,'OP_ReskinCharacterRequestMsg',15,1),(4650,1208,1208,'OP_DeleteCharacterRequestMsg',16,1),(4651,1208,1208,'OP_DeleteCharacterReplyMsg',17,1),(4652,1208,1208,'OP_PlayCharacterRequestMsg',18,1),(4653,1208,1208,'OP_PlayCharacterReplyMsg',19,1),(4654,1208,1208,'OP_ExpectClientAsCharacterReplyMs',22,1),(4655,1208,1208,'OP_ServerPlayCharacterRequestMsg',23,1),(4656,1208,1208,'OP_ServerPlayCharacterReplyMsg',24,1),(4657,1208,1208,'OP_ESInitMsg',25,1),(4658,1208,1208,'OP_ESReadyForClientsMsg',26,1),(4659,1208,1208,'OP_CreateZoneInstanceMsg',29,1),(4660,1208,1208,'OP_ZoneInstanceCreateReplyMsg',30,1),(4661,1208,1208,'OP_ZoneInstanceDestroyedMsg',31,1),(4662,1208,1208,'OP_ExpectClientAsCharacterRequest',32,1),(4663,1208,1208,'OP_ZoneInfoMsg',33,1),(4664,1208,1208,'OP_DoneLoadingZoneResourcesMsg',34,1),(4665,1208,1208,'OP_DoneSendingInitialEntitiesMsg',35,1),(4666,1208,1208,'OP_DoneLoadingEntityResourcesMsg',36,1),(4667,1208,1208,'OP_PredictionUpdateMsg',37,1),(4668,1208,1208,'OP_UpdatePositionMsg',39,1),(4669,1208,1208,'OP_SetRemoteCmdsMsg',41,1),(4670,1208,1208,'OP_RemoteCmdMsg',42,1),(4671,1208,1208,'OP_GameWorldTimeMsg',43,1),(4672,1208,1208,'OP_MOTDMsg',44,1),(4673,1208,1208,'OP_ZoneMOTDMsg',45,1),(4674,1208,1208,'OP_AvatarCreatedMsg',46,1),(4675,1208,1208,'OP_AvatarDestroyedMsg',47,1),(4676,1208,1208,'OP_RequestCampMsg',50,1),(4677,1208,1208,'OP_CampStartedMsg',51,1),(4678,1208,1208,'OP_CampAbortedMsg',52,1),(4679,1208,1208,'OP_WhoQueryRequestMsg',53,1),(4680,1208,1208,'OP_WhoQueryReplyMsg',54,1),(4681,1208,1208,'OP_MonitorReplyMsg',55,1),(4682,1208,1208,'OP_MonitorCharacterListMsg',56,1),(4683,1208,1208,'OP_MonitorCharacterListRequestMsg',57,1),(4684,1208,1208,'OP_ClientCmdMsg',58,1),(4685,1208,1208,'OP_DispatchESMsg',59,1),(4686,1208,1208,'OP_DispatchClientCmdMsg',60,1),(4687,1208,1208,'OP_UpdateTargetMsg',61,1),(4688,1208,1208,'OP_UpdateTargetLocMsg',62,1),(4689,1208,1208,'OP_UpdateCharacterSheetMsg',63,1),(4690,1208,1208,'OP_CharacterPet',64,1),(4691,1208,1208,'OP_CharacterMerc',65,1),(4692,1208,1208,'OP_UpdateSpellBookMsg',66,1),(4693,1208,1208,'OP_UpdateInventoryMsg',68,1),(4694,1208,1208,'OP_AfterInvSpellUpdate',69,1),(4695,1208,1208,'OP_UpdateRecipeBookMsg',70,1),(4696,1208,1208,'OP_RequestRecipeDetailsMsg',71,1),(4697,1208,1208,'OP_RecipeDetailsMsg',72,1),(4698,1208,1208,'OP_UpdateSkillBookMsg',73,1),(4699,1208,1208,'OP_UpdateSkillsMsg',74,1),(4700,1208,1208,'OP_UpdateOpportunityMsg',75,1),(4701,1208,1208,'OP_ChangeZoneMsg',77,1),(4702,1208,1208,'OP_ClientTeleportRequestMsg',78,1),(4703,1208,1208,'OP_TeleportWithinZoneMsg',79,1),(4704,1208,1208,'OP_TeleportWithinZoneNoReloadMsg',80,1),(4705,1208,1208,'OP_MigrateClientToZoneRequestMsg',81,1),(4706,1208,1208,'OP_MigrateClientToZoneReplyMsg',82,1),(4707,1208,1208,'OP_ReadyToZoneMsg',84,1),(4708,1208,1208,'OP_RemoveClientFromGroupMsg',85,1),(4709,1208,1208,'OP_RemoveGroupFromGroupMsg',86,1),(4710,1208,1208,'OP_MakeGroupLeaderMsg',87,1),(4711,1208,1208,'OP_GroupCreatedMsg',88,1),(4712,1208,1208,'OP_GroupDestroyedMsg',89,1),(4713,1208,1208,'OP_GroupMemberAddedMsg',90,1),(4714,1208,1208,'OP_GroupMemberRemovedMsg',91,1),(4715,1208,1208,'OP_GroupRemovedFromGroupMsg',92,1),(4716,1208,1208,'OP_GroupLeaderChangedMsg',93,1),(4717,1208,1208,'OP_GroupResendOOZDataMsg',94,1),(4718,1208,1208,'OP_GroupSettingsChangedMsg',95,1),(4719,1208,1208,'OP_OutOfZoneMemberDataMsg',96,1),(4720,1208,1208,'OP_SendLatestRequestMsg',97,1),(4721,1208,1208,'OP_ClearDataMsg',98,1),(4722,1208,1208,'OP_SetSocialMsg',99,1),(4723,1208,1208,'OP_ESStatusMsg',100,1),(4724,1208,1208,'OP_ESZoneInstanceStatusMsg',101,1),(4725,1208,1208,'OP_ZonesStatusRequestMsg',102,1),(4726,1208,1208,'OP_ZonesStatusMsg',103,1),(4727,1208,1208,'OP_ESWeatherRequestMsg',104,1),(4728,1208,1208,'OP_ESWeatherRequestEndMsg',105,1),(4729,1208,1208,'OP_DialogSelectMsg',109,1),(4730,1208,1208,'OP_DialogCloseMsg',110,1),(4731,1208,1208,'OP_RemoveSpellEffectMsg',111,1),(4732,1208,1208,'OP_RemoveConcentrationMsg',112,1),(4733,1208,1208,'OP_QuestJournalOpenMsg',113,1),(4734,1208,1208,'OP_QuestJournalInspectMsg',114,1),(4735,1208,1208,'OP_QuestJournalSetVisibleMsg',115,1),(4736,1208,1208,'OP_QuestJournalWaypointMsg',116,1),(4737,1208,1208,'OP_CreateGuildRequestMsg',119,1),(4738,1208,1208,'OP_CreateGuildReplyMsg',120,1),(4739,1208,1208,'OP_GuildsayMsg',121,1),(4740,1208,1208,'OP_FellowshipExpMsg',122,1),(4741,1208,1208,'OP_DeleteGuildMsg',123,1),(4742,1208,1208,'OP_GuildUpdateMsg',124,1),(4743,1208,1208,'OP_ConsignmentCloseStoreMsg',125,1),(4744,1208,1208,'OP_ConsignItemRequestMsg',126,1),(4745,1208,1208,'OP_ConsignItemResponseMsg',127,1),(4746,1208,1208,'OP_PurchaseConsignmentRequestMsg',128,1),(4747,1208,1208,'OP_LikeOption',135,1),(4748,1208,1208,'OP_PublishHouse',138,1),(4749,1208,1208,'OP_PlayerMadeInstacnesScreen',139,1),(4750,1208,1208,'OP_PlayerMadeInstances',140,1),(4751,1208,1208,'OP_HouseDeletedRemotelyMsg',141,1),(4752,1208,1208,'OP_UpdateHouseDataMsg',142,1),(4753,1208,1208,'OP_UpdateHouseAccessDataMsg',143,1),(4754,1208,1208,'OP_PlayerHouseBaseScreenMsg',144,1),(4755,1208,1208,'OP_PlayerHousePurchaseScreenMsg',145,1),(4756,1208,1208,'OP_PlayerHouseAccessUpdateMsg',146,1),(4757,1208,1208,'OP_PlayerHouseDisplayStatusMsg',147,1),(4758,1208,1208,'OP_PlayerHouseCloseUIMsg',148,1),(4759,1208,1208,'OP_BuyPlayerHouseMsg',149,1),(4760,1208,1208,'OP_BuyPlayerHouseTintMsg',150,1),(4761,1208,1208,'OP_CollectAllHouseItemsMsg',151,1),(4762,1208,1208,'OP_RelinquishHouseMsg',152,1),(4763,1208,1208,'OP_EnterHouseMsg',153,1),(4764,1208,1208,'OP_ExitHouseMsg',154,1),(4765,1208,1208,'OP_HouseDefaultAccessSetMsg',155,1),(4766,1208,1208,'OP_HouseAccessSetMsg',156,1),(4767,1208,1208,'OP_HouseAccessRemoveMsg',157,1),(4768,1208,1208,'OP_PayHouseUpkeepMsg',158,1),(4769,1208,1208,'OP_MoveableObjectPlacementCriteri',159,1),(4770,1208,1208,'OP_EnterMoveObjectModeMsg',160,1),(4771,1208,1208,'OP_PositionMoveableObject',161,1),(4772,1208,1208,'OP_CancelMoveObjectModeMsg',162,1),(4773,1208,1208,'OP_ShaderCustomizationMsg',163,1),(4774,1208,1208,'OP_ReplaceableSubMeshesMsg',164,1),(4775,1208,1208,'OP_HouseCustomizationScreenMsg',165,1),(4776,1208,1208,'OP_CustomizationPurchaseRequestMs',166,1),(4777,1208,1208,'OP_CustomizationSetRequestMsg',167,1),(4778,1208,1208,'OP_CustomizationReplyMsg',168,1),(4779,1208,1208,'OP_TintWidgetsMsg',169,1),(4780,1208,1208,'OP_ExamineConsignmentRequestMsg',170,1),(4781,1208,1208,'OP_ExamineConsignmentResponseMsg',171,1),(4782,1208,1208,'OP_UISettingsResponseMsg',172,1),(4783,1208,1208,'OP_UIResetMsg',173,1),(4784,1208,1208,'OP_KeymapLoadMsg',174,1),(4785,1208,1208,'OP_KeymapNoneMsg',175,1),(4786,1208,1208,'OP_KeymapDataMsg',176,1),(4787,1208,1208,'OP_KeymapSaveMsg',177,1),(4788,1208,1208,'OP_DispatchSpellCmdMsg',178,1),(4789,1208,1208,'OP_EntityVerbsRequestMsg',179,1),(4790,1208,1208,'OP_EntityVerbsReplyMsg',180,1),(4791,1208,1208,'OP_EntityVerbsVerbMsg',181,1),(4792,1208,1208,'OP_ChatRelationshipUpdateMsg',183,1),(4793,1208,1208,'OP_LootItemsRequestMsg',184,1),(4794,1208,1208,'OP_StoppedLootingMsg',185,1),(4795,1208,1208,'OP_SitMsg',186,1),(4796,1208,1208,'OP_StandMsg',187,1),(4797,1208,1208,'OP_SatMsg',188,1),(4798,1208,1208,'OP_StoodMsg',189,1),(4799,1208,1208,'OP_ClearForTakeOffMsg',190,1),(4800,1208,1208,'OP_ReadyForTakeOffMsg',191,1),(4801,1208,1208,'OP_ShowIllusionsMsg',192,1),(4802,1208,1208,'OP_HideIllusionsMsg',193,1),(4803,1208,1208,'OP_ExamineItemRequestMsg',194,1),(4804,1208,1208,'OP_ReadBookPageMsg',195,1),(4805,1208,1208,'OP_DefaultGroupOptionsRequestMsg',196,1),(4806,1208,1208,'OP_DefaultGroupOptionsMsg',197,1),(4807,1208,1208,'OP_GroupOptionsMsg',198,1),(4808,1208,1208,'OP_DisplayGroupOptionsScreenMsg',199,1),(4809,1208,1208,'OP_PetOptions',200,1),(4810,1208,1208,'OP_DisplayInnVisitScreenMsg',201,1),(4811,1208,1208,'OP_DumpSchedulerMsg',202,1),(4812,1208,1208,'OP_LSCheckAcctLockMsg',203,1),(4813,1208,1208,'OP_WSAcctLockStatusMsg',204,1),(4814,1208,1208,'OP_RequestHelpRepathMsg',205,1),(4815,1208,1208,'OP_RequestTargetLocMsg',206,1),(4816,1208,1208,'OP_UpdateMotdMsg',207,1),(4817,1208,1208,'OP_DestUpdateReq',209,1),(4818,1208,1208,'OP_PerformPlayerKnockbackMsg',212,1),(4819,1208,1208,'OP_PerformCameraShakeMsg',213,1),(4820,1208,1208,'OP_PopulateSkillMapsMsg',214,1),(4821,1208,1208,'OP_CancelledFeignMsg',215,1),(4822,1208,1208,'OP_SysClient',217,1),(4823,1208,1208,'OP_ShowCreateFromRecipeUIMsg',218,1),(4824,1208,1208,'OP_CancelCreateFromRecipeMsg',219,1),(4825,1208,1208,'OP_BeginItemCreationMsg',220,1),(4826,1208,1208,'OP_StopItemCreationMsg',221,1),(4827,1208,1208,'OP_ShowItemCreationProcessUIMsg',222,1),(4828,1208,1208,'OP_UpdateItemCreationProcessUIMsg',223,1),(4829,1208,1208,'OP_DisplayTSEventReactionMsg',224,1),(4830,1208,1208,'OP_ShowRecipeBookMsg',225,1),(4831,1208,1208,'OP_KnowledgebaseRequestMsg',226,1),(4832,1208,1208,'OP_KnowledgebaseResponseMsg',227,1),(4833,1208,1208,'OP_CSTicketHeaderRequestMsg',228,1),(4834,1208,1208,'OP_CSTicketInfoMsg',229,1),(4835,1208,1208,'OP_CSTicketCommentRequestMsg',230,1),(4836,1208,1208,'OP_CSTicketCommentResponseMsg',231,1),(4837,1208,1208,'OP_CSTicketCreateMsg',232,1),(4838,1208,1208,'OP_CSTicketAddCommentMsg',233,1),(4839,1208,1208,'OP_CSTicketDeleteMsg',234,1),(4840,1208,1208,'OP_CSTicketChangeNotificationMsg',235,1),(4841,1208,1208,'OP_WorldDataUpdateMsg',236,1),(4842,1208,1208,'OP_KnownLanguagesMsg',237,1),(4843,1208,1208,'OP_LsRequestClientCrashLogMsg',238,1),(4844,1208,1208,'OP_LsClientBaselogReplyMsg',239,1),(4845,1208,1208,'OP_LsClientCrashlogReplyMsg',240,1),(4846,1208,1208,'OP_LsClientAlertlogReplyMsg',241,1),(4847,1208,1208,'OP_LsClientVerifylogReplyMsg',242,1),(4848,1208,1208,'OP_ClientTeleportToLocationMsg',243,1),(4849,1208,1208,'OP_UpdateClientPredFlagsMsg',244,1),(4850,1208,1208,'OP_ChangeServerControlFlagMsg',245,1),(4851,1208,1208,'OP_CSToolsRequestMsg',246,1),(4852,1208,1208,'OP_CSToolsResponseMsg',247,1),(4853,1208,1208,'OP_AddSocialStructureStandingMsg',248,1),(4854,1208,1208,'OP_CreateBoatTransportsMsg',249,1),(4855,1208,1208,'OP_PositionBoatTransportMsg',250,1),(4856,1208,1208,'OP_MigrateBoatTransportMsg',251,1),(4857,1208,1208,'OP_MigrateBoatTransportReplyMsg',252,1),(4858,1208,1208,'OP_DisplayDebugNLLPointsMsg',253,1),(4859,1208,1208,'OP_ExamineInfoRequestMsg',254,1),(4860,1208,1208,'OP_QuickbarInitMsg',255,1),(4861,1208,1208,'OP_QuickbarUpdateMsg',256,1),(4862,1208,1208,'OP_MacroInitMsg',257,1),(4863,1208,1208,'OP_MacroUpdateMsg',258,1),(4864,1208,1208,'OP_QuestionnaireMsg',259,1),(4865,1208,1208,'OP_LevelChangedMsg',260,1),(4866,1208,1208,'OP_SpellGainedMsg',261,1),(4867,1208,1208,'OP_EncounterBrokenMsg',262,1),(4868,1208,1208,'OP_OnscreenMsgMsg',263,1),(4869,1208,1208,'OP_DisplayWarningMsg',264,1),(4870,1208,1208,'OP_ModifyGuildMsg',265,1),(4871,1208,1208,'OP_GuildEventMsg',266,1),(4872,1208,1208,'OP_GuildEventAddMsg',267,1),(4873,1208,1208,'OP_GuildEventActionMsg',268,1),(4874,1208,1208,'OP_GuildEventListMsg',269,1),(4875,1208,1208,'OP_RequestGuildEventDetailsMsg',270,1),(4876,1208,1208,'OP_GuildEventDetailsMsg',271,1),(4877,1208,1208,'OP_RequestGuildInfoMsg',272,1),(4878,1208,1208,'OP_GuildBankActionMsg',273,1),(4879,1208,1208,'OP_GuildBankActionResponseMsg',274,1),(4880,1208,1208,'OP_GuildBankItemDetailsRequestMsg',275,1),(4881,1208,1208,'OP_GuildBankItemDetailsResponseMs',276,1),(4882,1208,1208,'OP_GuildBankUpdateMsg',277,1),(4883,1208,1208,'OP_GuildBankEventListMsg',278,1),(4884,1208,1208,'OP_RequestGuildBankEventDetailsMs',279,1),(4885,1208,1208,'OP_RewardPackMsg',280,1),(4886,1208,1208,'OP_RenameGuildMsg',281,1),(4887,1208,1208,'OP_ZoneToFriendRequestMsg',282,1),(4888,1208,1208,'OP_ZoneToFriendReplyMsg',283,1),(4889,1208,1208,'OP_ChatCreateChannelMsg',284,1),(4890,1208,1208,'OP_ChatJoinChannelMsg',285,1),(4891,1208,1208,'OP_ChatWhoChannelMsg',286,1),(4892,1208,1208,'OP_ChatLeaveChannelMsg',287,1),(4893,1208,1208,'OP_ChatTellChannelMsg',288,1),(4894,1208,1208,'OP_ChatTellUserMsg',289,1),(4895,1208,1208,'OP_ChatToggleFriendMsg',290,1),(4896,1208,1208,'OP_BrokerAddBag',291,1),(4897,1208,1208,'OP_BrokerRemoveBag',292,1),(4898,1208,1208,'OP_ChatToggleIgnoreMsg',293,1),(4899,1208,1208,'OP_ChatSendFriendsMsg',294,1),(4900,1208,1208,'OP_ChatSendIgnoresMsg',295,1),(4901,1208,1208,'OP_QuestReward',319,1),(4902,1208,1208,'OP_ChatFiltersMsg',334,1),(4903,1208,1208,'OP_MailGetMessageMsg',337,1),(4904,1208,1208,'OP_MailSendMessageMsg',338,1),(4905,1208,1208,'OP_MailDeleteMessageMsg',339,1),(4906,1208,1208,'OP_MailGetHeadersReplyMsg',340,1),(4907,1208,1208,'OP_MailGetMessageReplyMsg',341,1),(4908,1208,1208,'OP_MailSendMessageReplyMsg',342,1),(4909,1208,1208,'OP_MailCommitSendMessageMsg',343,1),(4910,1208,1208,'OP_MailSendSystemMessageMsg',344,1),(4911,1208,1208,'OP_MailRemoveAttachFromMailMsg',345,1),(4912,1208,1208,'OP_WaypointRequestMsg',347,1),(4913,1208,1208,'OP_WaypointReplyMsg',348,1),(4914,1208,1208,'OP_WaypointSelectMsg',349,1),(4915,1208,1208,'OP_WaypointUpdateMsg',350,1),(4916,1208,1208,'OP_CharNameChangedMsg',351,1),(4917,1208,1208,'OP_ShowZoneTeleporterDestinations',352,1),(4918,1208,1208,'OP_SelectZoneTeleporterDestinatio',353,1),(4919,1208,1208,'OP_ReloadLocalizedTxtMsg',354,1),(4920,1208,1208,'OP_RequestGuildMembershipMsg',355,1),(4921,1208,1208,'OP_GuildMembershipResponseMsg',356,1),(4922,1208,1208,'OP_LeaveGuildNotifyMsg',357,1),(4923,1208,1208,'OP_JoinGuildNotifyMsg',358,1),(4924,1208,1208,'OP_AvatarUpdateMsg',359,1),(4925,1208,1208,'OP_BioUpdateMsg',361,1),(4926,1208,1208,'OP_InspectPlayerMsg',362,1),(4927,1208,1208,'OP_WSServerLockMsg',363,1),(4928,1208,1208,'OP_LSServerLockMsg',364,1),(4929,1208,1208,'OP_WSServerHideMsg',365,1),(4930,1208,1208,'OP_CsCategoryRequestMsg',366,1),(4931,1208,1208,'OP_CsCategoryResponseMsg',367,1),(4932,1208,1208,'OP_KnowledgeWindowSlotMappingMsg',368,1),(4933,1208,1208,'OP_AFKUpdateMsg',369,1),(4934,1208,1208,'OP_AnonUpdateMsg',370,1),(4935,1208,1208,'OP_UpdateActivePublicZonesMsg',371,1),(4936,1208,1208,'OP_UnknownNpcMsg',372,1),(4937,1208,1208,'OP_PromoFlagsDetailsMsg',373,1),(4938,1208,1208,'OP_ConsignViewCreateMsg',374,1),(4939,1208,1208,'OP_ConsignViewGetPageMsg',375,1),(4940,1208,1208,'OP_ConsignViewReleaseMsg',376,1),(4941,1208,1208,'OP_ConsignRemoveItemsMsg',377,1),(4942,1208,1208,'OP_UpdateDebugRadiiMsg',378,1),(4943,1208,1208,'OP_ReportMsg',379,1),(4944,1208,1208,'OP_UpdateRaidMsg',380,1),(4945,1208,1208,'OP_ConsignViewSortMsg',382,1),(4946,1208,1208,'OP_TitleUpdateMsg',383,1),(4947,1208,1208,'OP_ClientFellMsg',384,1),(4948,1208,1208,'OP_ClientInDeathRegionMsg',385,1),(4949,1208,1208,'OP_CampClientMsg',386,1),(4950,1208,1208,'OP_CSToolAccessResponseMsg',387,1),(4951,1208,1208,'OP_TrackingUpdateMsg',388,1),(4952,1208,1208,'OP_BeginTrackingMsg',389,1),(4953,1208,1208,'OP_StopTrackingMsg',390,1),(4954,1208,1208,'OP_GetAvatarAccessRequestForCSToo',392,1),(4955,1208,1208,'OP_AdvancementRequestMsg',393,1),(4956,1208,1208,'OP_MapFogDataInitMsg',394,1),(4957,1208,1208,'OP_MapFogDataUpdateMsg',395,1),(4958,1208,1208,'OP_CloseGroupInviteWindowMsg',396,1),(4959,1208,1208,'OP_UpdateGroupMemberDataMsg',397,1),(4960,1208,1208,'OP_WorldPingMsg',398,1),(4961,1208,1208,'OP_MoveLogUpdateMsg',389,1),(4962,1208,1208,'OP_OfferQuestMsg',400,1),(4963,1208,1208,'OP_WorldShutdownUpdateMsg',402,1),(4964,1208,1208,'OP_DisplayMailScreenMsg',403,1),(4965,1208,1208,'OP_ClientIdleBeginMsg',404,1),(4966,1208,1208,'OP_ClientIdleEndMsg',405,1),(4967,1208,1208,'OP_PurchaseConsignmentLoreCheckRe',406,1),(4968,1208,1208,'OP_NotifyApprenticeStoppedMentori',407,1),(4969,1208,1208,'OP_CorruptedClientMsg',408,1),(4970,1208,1208,'OP_WorldDataChangeMsg',409,1),(4971,1208,1208,'OP_MailEventNotificationMsg',410,1),(4972,1208,1208,'OP_RestartZoneMsg',411,1),(4973,1208,1208,'OP_FlightPathsMsg',412,1),(4974,1208,1208,'OP_CharacterLinkdeadMsg',413,1),(4975,1208,1208,'OP_CharTransferStartRequestMsg',414,1),(4976,1208,1208,'OP_CharTransferStartReplyMsg',415,1),(4977,1208,1208,'OP_CharTransferRequestMsg',416,1),(4978,1208,1208,'OP_CharTransferReplyMsg',417,1),(4979,1208,1208,'OP_CharTransferRollbackRequestMsg',418,1),(4980,1208,1208,'OP_CharTransferCommitRequestMsg',419,1),(4981,1208,1208,'OP_CharTransferRollbackReplyMsg',420,1),(4982,1208,1208,'OP_CharTransferCommitReplyMsg',421,1),(4983,1208,1208,'OP_GetCharacterSerializedRequestM',422,1),(4984,1208,1208,'OP_GetCharacterSerializedReplyMsg',423,1),(4985,1208,1208,'OP_CreateCharFromCBBRequestMsg',424,1),(4986,1208,1208,'OP_CreateCharFromCBBReplyMsg',425,1),(4987,1208,1208,'OP_HousingDataChangedMsg',426,1),(4988,1208,1208,'OP_HousingRestoreMsg',427,1),(4989,1208,1208,'OP_AuctionItem',428,1),(4990,1208,1208,'OP_AuctionItemReply',429,1),(4991,1208,1208,'OP_AuctionCoin',430,1),(4992,1208,1208,'OP_AuctionCoinReply',431,1),(4993,1208,1208,'OP_AuctionCharacter',432,1),(4994,1208,1208,'OP_AuctionCharacterReply',433,1),(4995,1208,1208,'OP_AuctionCommitMsg',434,1),(4996,1208,1208,'OP_AuctionAbortMsg',435,1),(4997,1208,1208,'OP_CharTransferValidateRequestMsg',436,1),(4998,1208,1208,'OP_CharTransferValidateReplyMsg',437,1),(4999,1208,1208,'OP_RaceRestrictionMsg',438,1),(5000,1208,1208,'OP_SetInstanceDisplayNameMsg',439,1),(5001,1208,1208,'OP_GetAuctionAssetIDMsg',440,1),(5002,1208,1208,'OP_GetAuctionAssetIDReplyMsg',441,1),(5003,1208,1208,'OP_ResendWorldChannelsMsg',442,1),(5004,1208,1208,'OP_DisplayExchangeScreenMsg',443,1),(5005,1208,1208,'OP_ArenaGameTypesMsg',444,1),(5006,1208,1208,'OP_AuditAuctionEventMsg',445,1),(5007,1208,1208,'OP_InviteRequestMsg',446,1),(5008,1208,1208,'OP_InviteResponseMsg',447,1),(5009,1208,1208,'OP_InviteTargetResponseMsg',448,1),(5010,1208,1208,'OP_InspectPlayerRequestMsg',449,1),(5011,1208,1208,'OP_DispatchMsg',450,1),(5012,1208,1208,'OP_DisplayEventMsg',451,1),(5013,1208,1208,'OP_PrePossessionMsg',452,1),(5014,1208,1208,'OP_PostPossessionMsg',453,1),(5015,1208,1208,'OP_ArenaCreate',455,1),(5016,1208,1208,'OP_ArenaList',456,1),(5017,1208,1208,'OP_ArenaWindow',464,1),(5018,1208,1208,'OP_HouseItemsList',482,1),(5019,1208,1208,'OP_CurrentPet',484,1),(5020,1208,1208,'OP_AdventureList',487,1),(5021,1208,1208,'OP_CancelSpellCast',488,1),(5022,1208,1208,'OP_UpdateTitleCmd',493,1),(5023,1208,1208,'OP_AttackAllowed',499,1),(5024,1208,1208,'OP_AttackNotAllowed',500,1),(5025,1208,1208,'OP_BagOptions',501,1),(5026,1208,1208,'OP_LFGGroupSearch',503,1),(5027,1208,1208,'OP_CharacterHousingList',506,1),(5028,1208,1208,'OP_DressingRoom',509,1),(5029,1208,1208,'OP_PlayLon',510,1),(5030,1208,1208,'OP_SkillInfoRequest',513,1),(5031,1208,1208,'OP_SkillInfoResponse',514,1),(5032,1208,1208,'OP_LFGUpdateMsg',517,1),(5033,1208,1208,'OP_BadLanguageFilter',518,1),(5034,1208,1208,'OP_VoiceChatChannel',519,1),(5035,1208,1208,'OP_MapRequest',520,1),(5036,1208,1208,'OP_MarketFundsUpdate',525,1),(5037,1208,1208,'OP_UIEvent',526,1),(5038,1208,1208,'OP_MarketAddFundsRequest',527,1),(5039,1208,1208,'OP_MarketAddFundsReply',528,1),(5040,1208,1208,'OP_MarketPurchase',530,1),(5041,1208,1208,'OP_MarketPlacePrices',531,1),(5042,1208,1208,'OP_MarketPlaceItems',534,1),(5043,1208,1208,'OP_RecipeBook',535,1),(5044,1208,1208,'OP_CreateCharacterDungeon',544,1),(5045,1208,1208,'OP_DungeonMakerEnter',545,1),(5046,1208,1208,'OP_DungeonMakerItemRequest',547,1),(5047,1208,1208,'OP_CharacterCreatedDungeons',548,1),(5048,1208,1208,'OP_DungeonMakerToolboxList',549,1),(5049,1208,1208,'OP_DungeonMakerUnknown',550,1),(5050,1208,1208,'OP_DungeonMakerUnknown1',551,1),(5051,1208,1208,'OP_PlayerPollPopup',553,1),(5052,1208,1208,'OP_PlayerPollAnswer',554,1),(5053,1208,1208,'OP_MentorPopup',555,1),(5054,1208,1208,'OP_LoadWelcomeWindow',557,1),(5055,1208,1208,'OP_OpenCharCust',558,1),(5056,1208,1208,'OP_SubmitCharCust',559,1),(5057,1208,1208,'OP_QueAllBgSolo',561,1),(5058,1208,1208,'OP_ZoneBgInstanceList',563,1),(5059,1208,1208,'OP_WorldTravelAvail',567,1),(5060,1208,1208,'OP_PaperdollImage',571,1),(5061,1208,1208,'OP_LoadCalendarEvents',572,1),(5062,1208,1208,'OP_VideoUploaded',573,1),(5063,1208,1208,'OP_SavageBarInitMsg',574,1),(5064,1208,1208,'OP_PetOptionsResponse',575,1),(5065,1208,1208,'OP_DungeonMakerItemResponse',576,1),(5066,1208,1208,'OP_CharacterMounts',578,1),(5067,1208,1208,'OP_EqBetaCopyRequest',588,1),(5068,1208,1208,'OP_EqHearChatCmd',589,1),(5069,1208,1208,'OP_EqDisplayTextCmd',590,1),(5070,1208,1208,'OP_EqCreateGhostCmd',591,1),(5071,1208,1208,'OP_EqCreateWidgetCmd',592,1),(5072,1208,1208,'OP_EqCreateSignWidgetCmd',593,1),(5073,1208,1208,'OP_EqDestroyGhostCmd',594,1),(5074,1208,1208,'OP_EqUpdateGhostCmd',595,1),(5075,1208,1208,'OP_EqSetControlGhostCmd',596,1),(5076,1208,1208,'OP_EqSetPOVGhostCmd',597,1),(5077,1208,1208,'OP_EqHearCombatCmd',598,1),(5078,1208,1208,'OP_EqHearSpellCastCmd',599,1),(5079,1208,1208,'OP_EQHearProcCmd',600,1),(5080,1208,1208,'OP_EQHearResEffectCmd',601,1),(5081,1208,1208,'OP_EqHearSpellInterruptCmd',602,1),(5082,1208,1208,'OP_EqHearSpellFizzleCmd',603,1),(5083,1208,1208,'OP_EqHearConsiderCmd',604,1),(5084,1208,1208,'OP_EqUpdateSubClassesCmd',605,1),(5085,1208,1208,'OP_EqCreateListBoxCmd',606,1),(5086,1208,1208,'OP_EqSetDebugPathPointsCmd',607,1),(5087,1208,1208,'OP_EqCannedEmoteCmd',609,1),(5088,1208,1208,'OP_EqStateCmd',610,1),(5089,1208,1208,'OP_EqPlaySoundCmd',611,1),(5090,1208,1208,'OP_EqPlaySound3DCmd',612,1),(5091,1208,1208,'OP_EqPlayVoiceCmd',613,1),(5092,1208,1208,'OP_EqHearDrowningCmd',614,1),(5093,1208,1208,'OP_EqHearDeathCmd',615,1),(5094,1208,1208,'OP_EqGroupMemberRemovedCmd',616,1),(5095,1208,1208,'OP_EqHearChainEffectCmd',617,1),(5096,1208,1208,'OP_EqReceiveOfferCmd',618,1),(5097,1208,1208,'OP_EqInspectPCResultsCmd',619,1),(5098,1208,1208,'OP_EqDrawablePathGraphCmd',620,1),(5099,1208,1208,'OP_EqDialogOpenCmd',621,1),(5100,1208,1208,'OP_EqDialogCloseCmd',622,1),(5101,1208,1208,'OP_EqFactionUpdateCmd',623,1),(5102,1208,1208,'OP_EqCollectionUpdateCmd',624,1),(5103,1208,1208,'OP_EqCollectionFilterCmd',625,1),(5104,1208,1208,'OP_EqCollectionItemCmd',626,1),(5105,1208,1208,'OP_EqQuestJournalUpdateCmd',627,1),(5106,1208,1208,'OP_EqMentoring',628,1),(5107,1208,1208,'OP_EqQuestJournalReplyCmd',629,1),(5108,1208,1208,'OP_EqQuestGroupCmd',630,1),(5109,1208,1208,'OP_EqUpdateMerchantCmd',631,1),(5110,1208,1208,'OP_EqUpdateStoreCmd',632,1),(5111,1208,1208,'OP_EqUpdatePlayerTradeCmd',633,1),(5112,1208,1208,'OP_EqHelpPathCmd',634,1),(5113,1208,1208,'OP_EqHelpPathClearCmd',635,1),(5114,1208,1208,'OP_EqUpdateBankCmd',636,1),(5115,1208,1208,'OP_EqExamineInfoCmd',637,1),(5116,1208,1208,'OP_EqCloseWindowCmd',638,1),(5117,1208,1208,'OP_EqUpdateLootCmd',639,1),(5118,1208,1208,'OP_EqJunctionListCmd',640,1),(5119,1208,1208,'OP_EqShowDeathWindowCmd',641,1),(5120,1208,1208,'OP_EqDisplaySpellFailCmd',642,1),(5121,1208,1208,'OP_EqSpellCastStartCmd',643,1),(5122,1208,1208,'OP_EqSpellCastEndCmd',644,1),(5123,1208,1208,'OP_EqResurrectedCmd',645,1),(5124,1208,1208,'OP_EqChoiceWinCmd',646,1),(5125,1208,1208,'OP_EqSetDefaultVerbCmd',647,1),(5126,1208,1208,'OP_EqInstructionWindowCmd',648,1),(5127,1208,1208,'OP_EqInstructionWindowCloseCmd',649,1),(5128,1208,1208,'OP_EqInstructionWindowGoalCmd',650,1),(5129,1208,1208,'OP_EqInstructionWindowTaskCmd',651,1),(5130,1208,1208,'OP_EqEnableGameEventCmd',652,1),(5131,1208,1208,'OP_EqShowWindowCmd',653,1),(5132,1208,1208,'OP_EqEnableWindowCmd',654,1),(5133,1208,1208,'OP_EqFlashWindowCmd',655,1),(5134,1208,1208,'OP_EqHearPlayFlavorCmd',657,1),(5135,1208,1208,'OP_EqUpdateSignWidgetCmd',658,1),(5136,1208,1208,'OP_EqDebugPVDCmd',659,1),(5137,1208,1208,'OP_EqShowBookCmd',660,1),(5138,1208,1208,'OP_EqQuestionnaireCmd',661,1),(5139,1208,1208,'OP_EqGetProbsCmd',663,1),(5140,1208,1208,'OP_EqHearHealCmd',664,1),(5141,1208,1208,'OP_EqChatChannelUpdateCmd',665,1),(5142,1208,1208,'OP_EqWhoChannelQueryReplyCmd',666,1),(5143,1208,1208,'OP_EqAvailWorldChannelsCmd',667,1),(5144,1208,1208,'OP_EqUpdateTargetCmd',668,1),(5145,1208,1208,'OP_BrokerSellList',669,1),(5146,1208,1208,'OP_EqConsignmentItemsCmd',670,1),(5147,1208,1208,'OP_EqStartBrokerCmd',672,1),(5148,1208,1208,'OP_EqMapExplorationCmd',673,1),(5149,1208,1208,'OP_EqStoreLogCmd',674,1),(5150,1208,1208,'OP_EqSpellMoveToRangeAndRetryCmd',675,1),(5151,1208,1208,'OP_EqUpdatePlayerMailCmd',676,1),(5152,1208,1208,'OP_GuildStatusUpdate',679,1),(5153,1208,1208,'OP_EqArenaResultsCmd',680,1),(5154,1208,1208,'OP_EqGuildBankEventActionCmd',681,1),(5155,1208,1208,'OP_EqGuildBankExamineInfoCmd',682,1),(5156,1208,1208,'OP_EqHearSpellNoLandCmd',683,1),(5157,1208,1208,'OP_Lottery',684,1),(5158,1208,1208,'OP_GuildRecruitingMemberInfo',685,1),(5159,1208,1208,'OP_GuildRecruiting',686,1),(5160,1208,1208,'OP_GuildRecruitingDetails',687,1),(5161,1208,1208,'OP_GuildRecruitingImage',688,1),(5162,1208,1208,'OP_TradeskillList',706,1),(5163,1208,1208,'OP_CharRenamed',690,1),(5164,1208,1208,'OP_UseAdornment',700,1),(5165,1208,1208,'OP_ExpPurchWindow',706,1),(5166,1208,1208,'OP_PointOfInterest',710,1),(5167,1208,1208,'OP_PointOfInterest2',711,1),(5168,1208,1208,'OP_TraitsList',712,1),(5169,1208,1208,'OP_CustomizeHouseDisplay',715,1),(5170,1208,1208,'OP_VoiceChatServer',716,1),(5171,1208,1208,'OP_SupplyDepot',720,1),(5172,1208,1208,'OP_EQHearThreatCmd',721,1),(5173,1208,1208,'OP_RecipeList',722,1),(5174,1208,1208,'OP_Research',723,1),(5175,1208,1208,'OP_CharacterCurrency',724,1),(5176,1208,1208,'OP_CharacterAchievements',725,1),(5177,1208,1208,'OP_AchievementUpdateMsg',726,1),(5178,1208,1208,'OP_EQHearDispellCmd',727,1),(5179,1208,1208,'OP_JournalQuestStoryline',728,1),(5180,1208,1208,'OP_DungeonPlayAsAvatarList',729,1),(5181,1208,1208,'OP_DungeonPlayAsAvatarSelected',730,1),(5182,1208,1208,'OP_MercHireWindow',731,1),(5183,1208,1208,'OP_MercUnknown',732,1),(5184,1208,1208,'OP_Unknown',748,1),(5657,1096,1096,'OP_RecipeBook',999,1),(5658,1045,1086,'OP_RecipeBook',999,1),(5659,1008,1011,'OP_RecipeBook',999,1),(5660,908,927,'OP_RecipeBook',999,1),(5661,839,844,'OP_RecipeBook',999,1),(5662,0,0,'OP_RecipeBook',999,1),(5663,57000,57002,'OP_LoginRequestMsg',0,1),(5664,57000,57002,'OP_LoginByNumRequestMsg',1,1),(5665,57000,57002,'OP_WSLoginRequestMsg',2,1),(5666,57000,57002,'OP_ESLoginRequestMsg',3,1),(5667,57000,57002,'OP_LoginReplyMsg',4,1),(5668,57000,57002,'OP_WSStatusReplyMsg',5,1),(5669,57000,57002,'OP_WorldStatusChangeMsg',6,1),(5670,57000,57002,'OP_AllWSDescRequestMsg',7,1),(5671,57000,57002,'OP_WorldListMsg',8,1),(5672,57000,57002,'OP_AllCharactersDescRequestMsg',9,1),(5673,57000,57002,'OP_AllCharactersDescReplyMsg',10,1),(5674,57000,57002,'OP_CreateCharacterRequestMsg',11,1),(5675,57000,57002,'OP_CreateCharacterReplyMsg',12,1),(5676,57000,57002,'OP_WSCreateCharacterRequestMsg',13,1),(5677,57000,57002,'OP_WSCreateCharacterReplyMsg',14,1),(5678,57000,57002,'OP_ReskinCharacterRequestMsg',15,1),(5679,57000,57002,'OP_DeleteCharacterRequestMsg',16,1),(5680,57000,57002,'OP_DeleteCharacterReplyMsg',17,1),(5681,57000,57002,'OP_PlayCharacterRequestMsg',18,1),(5682,57000,57002,'OP_PlayCharacterReplyMsg',19,1),(5683,57000,57002,'OP_ExpectClientAsCharacterReplyMs',22,1),(5684,57000,57002,'OP_ServerPlayCharacterRequestMsg',23,1),(5685,57000,57002,'OP_ServerPlayCharacterReplyMsg',24,1),(5686,57000,57002,'OP_ESInitMsg',25,1),(5687,57000,57002,'OP_ESReadyForClientsMsg',26,1),(5688,57000,57002,'OP_CreateZoneInstanceMsg',29,1),(5689,57000,57002,'OP_ZoneInstanceCreateReplyMsg',30,1),(5690,57000,57002,'OP_ZoneInstanceDestroyedMsg',31,1),(5691,57000,57002,'OP_ExpectClientAsCharacterRequest',32,1),(5692,57000,57002,'OP_ZoneInfoMsg',33,1),(5693,57000,57002,'OP_DoneLoadingZoneResourcesMsg',34,1),(5694,57000,57002,'OP_DoneSendingInitialEntitiesMsg',35,1),(5695,57000,57002,'OP_DoneLoadingEntityResourcesMsg',36,1),(5696,57000,57002,'OP_PredictionUpdateMsg',37,1),(5697,57000,57002,'OP_UpdatePositionMsg',39,1),(5698,57000,57002,'OP_SetRemoteCmdsMsg',41,1),(5699,57000,57002,'OP_RemoteCmdMsg',42,1),(5700,57000,57002,'OP_GameWorldTimeMsg',43,1),(5701,57000,57002,'OP_MOTDMsg',44,1),(5702,57000,57002,'OP_ZoneMOTDMsg',45,1),(5703,57000,57002,'OP_AvatarCreatedMsg',46,1),(5704,57000,57002,'OP_AvatarDestroyedMsg',47,1),(5705,57000,57002,'OP_RequestCampMsg',50,1),(5706,57000,57002,'OP_CampStartedMsg',51,1),(5707,57000,57002,'OP_CampAbortedMsg',52,1),(5708,57000,57002,'OP_WhoQueryRequestMsg',53,1),(5709,57000,57002,'OP_WhoQueryReplyMsg',54,1),(5710,57000,57002,'OP_MonitorReplyMsg',55,1),(5711,57000,57002,'OP_MonitorCharacterListMsg',56,1),(5712,57000,57002,'OP_MonitorCharacterListRequestMsg',57,1),(5713,57000,57002,'OP_ClientCmdMsg',58,1),(5714,57000,57002,'OP_DispatchESMsg',59,1),(5715,57000,57002,'OP_DispatchClientCmdMsg',60,1),(5716,57000,57002,'OP_UpdateTargetMsg',61,1),(5717,57000,57002,'OP_UpdateTargetLocMsg',62,1),(5718,57000,57002,'OP_UpdateCharacterSheetMsg',63,1),(5719,57000,57002,'OP_CharacterPet',64,1),(5720,57000,57002,'OP_CharacterMerc',65,1),(5721,57000,57002,'OP_UpdateSpellBookMsg',66,1),(5722,57000,57002,'OP_UpdateInventoryMsg',68,1),(5723,57000,57002,'OP_AfterInvSpellUpdate',69,1),(5724,57000,57002,'OP_UpdateRecipeBookMsg',70,1),(5725,57000,57002,'OP_RequestRecipeDetailsMsg',71,1),(5726,57000,57002,'OP_RecipeDetailsMsg',72,1),(5727,57000,57002,'OP_UpdateSkillBookMsg',73,1),(5728,57000,57002,'OP_UpdateSkillsMsg',74,1),(5729,57000,57002,'OP_UpdateOpportunityMsg',75,1),(5730,57000,57002,'OP_ChangeZoneMsg',77,1),(5731,57000,57002,'OP_ClientTeleportRequestMsg',78,1),(5732,57000,57002,'OP_TeleportWithinZoneMsg',79,1),(5733,57000,57002,'OP_TeleportWithinZoneNoReloadMsg',80,1),(5734,57000,57002,'OP_MigrateClientToZoneRequestMsg',81,1),(5735,57000,57002,'OP_MigrateClientToZoneReplyMsg',82,1),(5736,57000,57002,'OP_ReadyToZoneMsg',84,1),(5737,57000,57002,'OP_RemoveClientFromGroupMsg',85,1),(5738,57000,57002,'OP_RemoveGroupFromGroupMsg',86,1),(5739,57000,57002,'OP_MakeGroupLeaderMsg',87,1),(5740,57000,57002,'OP_GroupCreatedMsg',88,1),(5741,57000,57002,'OP_GroupDestroyedMsg',89,1),(5742,57000,57002,'OP_GroupMemberAddedMsg',90,1),(5743,57000,57002,'OP_GroupMemberRemovedMsg',91,1),(5744,57000,57002,'OP_GroupRemovedFromGroupMsg',92,1),(5745,57000,57002,'OP_GroupLeaderChangedMsg',93,1),(5746,57000,57002,'OP_GroupResendOOZDataMsg',94,1),(5747,57000,57002,'OP_GroupSettingsChangedMsg',95,1),(5748,57000,57002,'OP_OutOfZoneMemberDataMsg',96,1),(5749,57000,57002,'OP_SendLatestRequestMsg',97,1),(5750,57000,57002,'OP_ClearDataMsg',98,1),(5751,57000,57002,'OP_SetSocialMsg',99,1),(5752,57000,57002,'OP_ESStatusMsg',100,1),(5753,57000,57002,'OP_ESZoneInstanceStatusMsg',101,1),(5754,57000,57002,'OP_ZonesStatusRequestMsg',102,1),(5755,57000,57002,'OP_ZonesStatusMsg',103,1),(5756,57000,57002,'OP_ESWeatherRequestMsg',104,1),(5757,57000,57002,'OP_ESWeatherRequestEndMsg',105,1),(5758,57000,57002,'OP_DialogSelectMsg',109,1),(5759,57000,57002,'OP_DialogCloseMsg',110,1),(5760,57000,57002,'OP_RemoveSpellEffectMsg',111,1),(5761,57000,57002,'OP_RemoveConcentrationMsg',112,1),(5762,57000,57002,'OP_QuestJournalOpenMsg',113,1),(5763,57000,57002,'OP_QuestJournalInspectMsg',114,1),(5764,57000,57002,'OP_QuestJournalSetVisibleMsg',115,1),(5765,57000,57002,'OP_QuestJournalWaypointMsg',116,1),(5766,57000,57002,'OP_CreateGuildRequestMsg',119,1),(5767,57000,57002,'OP_CreateGuildReplyMsg',120,1),(5768,57000,57002,'OP_GuildsayMsg',121,1),(5769,57000,57002,'OP_FellowshipExpMsg',122,1),(5770,57000,57002,'OP_DeleteGuildMsg',123,1),(5771,57000,57002,'OP_GuildUpdateMsg',124,1),(5772,57000,57002,'OP_ConsignmentCloseStoreMsg',125,1),(5773,57000,57002,'OP_ConsignItemRequestMsg',126,1),(5774,57000,57002,'OP_ConsignItemResponseMsg',127,1),(5775,57000,57002,'OP_PurchaseConsignmentRequestMsg',128,1),(5776,57000,57002,'OP_LikeOption',135,1),(5777,57000,57002,'OP_PublishHouse',138,1),(5778,57000,57002,'OP_PlayerMadeInstacnesScreen',139,1),(5779,57000,57002,'OP_PlayerMadeInstances',140,1),(5780,57000,57002,'OP_HouseDeletedRemotelyMsg',141,1),(5781,57000,57002,'OP_UpdateHouseDataMsg',142,1),(5782,57000,57002,'OP_UpdateHouseAccessDataMsg',143,1),(5783,57000,57002,'OP_PlayerHouseBaseScreenMsg',144,1),(5784,57000,57002,'OP_PlayerHousePurchaseScreenMsg',145,1),(5785,57000,57002,'OP_PlayerHouseAccessUpdateMsg',146,1),(5786,57000,57002,'OP_PlayerHouseDisplayStatusMsg',147,1),(5787,57000,57002,'OP_PlayerHouseCloseUIMsg',148,1),(5788,57000,57002,'OP_BuyPlayerHouseMsg',149,1),(5789,57000,57002,'OP_BuyPlayerHouseTintMsg',150,1),(5790,57000,57002,'OP_CollectAllHouseItemsMsg',151,1),(5791,57000,57002,'OP_RelinquishHouseMsg',152,1),(5792,57000,57002,'OP_EnterHouseMsg',153,1),(5793,57000,57002,'OP_ExitHouseMsg',154,1),(5794,57000,57002,'OP_HouseDefaultAccessSetMsg',155,1),(5795,57000,57002,'OP_HouseAccessSetMsg',156,1),(5796,57000,57002,'OP_HouseAccessRemoveMsg',157,1),(5797,57000,57002,'OP_PayHouseUpkeepMsg',158,1),(5798,57000,57002,'OP_MoveableObjectPlacementCriteri',159,1),(5799,57000,57002,'OP_EnterMoveObjectModeMsg',160,1),(5800,57000,57002,'OP_PositionMoveableObject',161,1),(5801,57000,57002,'OP_CancelMoveObjectModeMsg',162,1),(5802,57000,57002,'OP_ShaderCustomizationMsg',163,1),(5803,57000,57002,'OP_ReplaceableSubMeshesMsg',164,1),(5804,57000,57002,'OP_HouseCustomizationScreenMsg',165,1),(5805,57000,57002,'OP_CustomizationPurchaseRequestMs',166,1),(5806,57000,57002,'OP_CustomizationSetRequestMsg',167,1),(5807,57000,57002,'OP_CustomizationReplyMsg',168,1),(5808,57000,57002,'OP_TintWidgetsMsg',169,1),(5809,57000,57002,'OP_ExamineConsignmentRequestMsg',170,1),(5810,57000,57002,'OP_ExamineConsignmentResponseMsg',171,1),(5811,57000,57002,'OP_UISettingsResponseMsg',172,1),(5812,57000,57002,'OP_UIResetMsg',173,1),(5813,57000,57002,'OP_KeymapLoadMsg',174,1),(5814,57000,57002,'OP_KeymapNoneMsg',175,1),(5815,57000,57002,'OP_KeymapDataMsg',176,1),(5816,57000,57002,'OP_KeymapSaveMsg',177,1),(5817,57000,57002,'OP_DispatchSpellCmdMsg',178,1),(5818,57000,57002,'OP_EntityVerbsRequestMsg',179,1),(5819,57000,57002,'OP_EntityVerbsReplyMsg',180,1),(5820,57000,57002,'OP_EntityVerbsVerbMsg',181,1),(5821,57000,57002,'OP_ChatRelationshipUpdateMsg',183,1),(5822,57000,57002,'OP_LootItemsRequestMsg',184,1),(5823,57000,57002,'OP_StoppedLootingMsg',185,1),(5824,57000,57002,'OP_SitMsg',186,1),(5825,57000,57002,'OP_StandMsg',187,1),(5826,57000,57002,'OP_SatMsg',188,1),(5827,57000,57002,'OP_StoodMsg',189,1),(5828,57000,57002,'OP_ClearForTakeOffMsg',190,1),(5829,57000,57002,'OP_ReadyForTakeOffMsg',191,1),(5830,57000,57002,'OP_ShowIllusionsMsg',192,1),(5831,57000,57002,'OP_HideIllusionsMsg',193,1),(5832,57000,57002,'OP_ExamineItemRequestMsg',194,1),(5833,57000,57002,'OP_ReadBookPageMsg',195,1),(5834,57000,57002,'OP_DefaultGroupOptionsRequestMsg',196,1),(5835,57000,57002,'OP_DefaultGroupOptionsMsg',197,1),(5836,57000,57002,'OP_GroupOptionsMsg',198,1),(5837,57000,57002,'OP_DisplayGroupOptionsScreenMsg',199,1),(5838,57000,57002,'OP_PetOptions',200,1),(5839,57000,57002,'OP_DisplayInnVisitScreenMsg',201,1),(5840,57000,57002,'OP_DumpSchedulerMsg',202,1),(5841,57000,57002,'OP_LSCheckAcctLockMsg',203,1),(5842,57000,57002,'OP_WSAcctLockStatusMsg',204,1),(5843,57000,57002,'OP_RequestHelpRepathMsg',205,1),(5844,57000,57002,'OP_RequestTargetLocMsg',206,1),(5845,57000,57002,'OP_UpdateMotdMsg',207,1),(5846,57000,57002,'OP_DestUpdateReq',209,1),(5847,57000,57002,'OP_PerformPlayerKnockbackMsg',212,1),(5848,57000,57002,'OP_PerformCameraShakeMsg',213,1),(5849,57000,57002,'OP_PopulateSkillMapsMsg',214,1),(5850,57000,57002,'OP_CancelledFeignMsg',215,1),(5851,57000,57002,'OP_SysClient',217,1),(5852,57000,57002,'OP_ShowCreateFromRecipeUIMsg',218,1),(5853,57000,57002,'OP_CancelCreateFromRecipeMsg',219,1),(5854,57000,57002,'OP_BeginItemCreationMsg',220,1),(5855,57000,57002,'OP_StopItemCreationMsg',221,1),(5856,57000,57002,'OP_ShowItemCreationProcessUIMsg',222,1),(5857,57000,57002,'OP_UpdateItemCreationProcessUIMsg',223,1),(5858,57000,57002,'OP_DisplayTSEventReactionMsg',224,1),(5859,57000,57002,'OP_ShowRecipeBookMsg',225,1),(5860,57000,57002,'OP_KnowledgebaseRequestMsg',226,1),(5861,57000,57002,'OP_KnowledgebaseResponseMsg',227,1),(5862,57000,57002,'OP_CSTicketHeaderRequestMsg',228,1),(5863,57000,57002,'OP_CSTicketInfoMsg',229,1),(5864,57000,57002,'OP_CSTicketCommentRequestMsg',230,1),(5865,57000,57002,'OP_CSTicketCommentResponseMsg',231,1),(5866,57000,57002,'OP_CSTicketCreateMsg',232,1),(5867,57000,57002,'OP_CSTicketAddCommentMsg',233,1),(5868,57000,57002,'OP_CSTicketDeleteMsg',234,1),(5869,57000,57002,'OP_CSTicketChangeNotificationMsg',235,1),(5870,57000,57002,'OP_WorldDataUpdateMsg',236,1),(5871,57000,57002,'OP_KnownLanguagesMsg',237,1),(5872,57000,57002,'OP_LsRequestClientCrashLogMsg',238,1),(5873,57000,57002,'OP_LsClientBaselogReplyMsg',239,1),(5874,57000,57002,'OP_LsClientCrashlogReplyMsg',240,1),(5875,57000,57002,'OP_LsClientAlertlogReplyMsg',241,1),(5876,57000,57002,'OP_LsClientVerifylogReplyMsg',242,1),(5877,57000,57002,'OP_ClientTeleportToLocationMsg',243,1),(5878,57000,57002,'OP_UpdateClientPredFlagsMsg',244,1),(5879,57000,57002,'OP_ChangeServerControlFlagMsg',245,1),(5880,57000,57002,'OP_CSToolsRequestMsg',246,1),(5881,57000,57002,'OP_CSToolsResponseMsg',247,1),(5882,57000,57002,'OP_AddSocialStructureStandingMsg',248,1),(5883,57000,57002,'OP_CreateBoatTransportsMsg',249,1),(5884,57000,57002,'OP_PositionBoatTransportMsg',250,1),(5885,57000,57002,'OP_MigrateBoatTransportMsg',251,1),(5886,57000,57002,'OP_MigrateBoatTransportReplyMsg',252,1),(5887,57000,57002,'OP_DisplayDebugNLLPointsMsg',253,1),(5888,57000,57002,'OP_ExamineInfoRequestMsg',254,1),(5889,57000,57002,'OP_QuickbarInitMsg',255,1),(5890,57000,57002,'OP_QuickbarUpdateMsg',256,1),(5891,57000,57002,'OP_MacroInitMsg',257,1),(5892,57000,57002,'OP_MacroUpdateMsg',258,1),(5893,57000,57002,'OP_QuestionnaireMsg',259,1),(5894,57000,57002,'OP_LevelChangedMsg',260,1),(5895,57000,57002,'OP_SpellGainedMsg',261,1),(5896,57000,57002,'OP_EncounterBrokenMsg',262,1),(5897,57000,57002,'OP_OnscreenMsgMsg',263,1),(5898,57000,57002,'OP_DisplayWarningMsg',264,1),(5899,57000,57002,'OP_ModifyGuildMsg',265,1),(5900,57000,57002,'OP_GuildEventMsg',266,1),(5901,57000,57002,'OP_GuildEventAddMsg',267,1),(5902,57000,57002,'OP_GuildEventActionMsg',268,1),(5903,57000,57002,'OP_GuildEventListMsg',269,1),(5904,57000,57002,'OP_RequestGuildEventDetailsMsg',270,1),(5905,57000,57002,'OP_GuildEventDetailsMsg',271,1),(5906,57000,57002,'OP_RequestGuildInfoMsg',272,1),(5907,57000,57002,'OP_GuildBankActionMsg',273,1),(5908,57000,57002,'OP_GuildBankActionResponseMsg',274,1),(5909,57000,57002,'OP_GuildBankItemDetailsRequestMsg',275,1),(5910,57000,57002,'OP_GuildBankItemDetailsResponseMs',276,1),(5911,57000,57002,'OP_GuildBankUpdateMsg',277,1),(5912,57000,57002,'OP_GuildBankEventListMsg',278,1),(5913,57000,57002,'OP_RequestGuildBankEventDetailsMs',279,1),(5914,57000,57002,'OP_RewardPackMsg',280,1),(5915,57000,57002,'OP_RenameGuildMsg',281,1),(5916,57000,57002,'OP_ZoneToFriendRequestMsg',282,1),(5917,57000,57002,'OP_ZoneToFriendReplyMsg',283,1),(5918,57000,57002,'OP_ChatCreateChannelMsg',284,1),(5919,57000,57002,'OP_ChatJoinChannelMsg',285,1),(5920,57000,57002,'OP_ChatWhoChannelMsg',286,1),(5921,57000,57002,'OP_ChatLeaveChannelMsg',287,1),(5922,57000,57002,'OP_ChatTellChannelMsg',288,1),(5923,57000,57002,'OP_ChatTellUserMsg',289,1),(5924,57000,57002,'OP_ChatToggleFriendMsg',290,1),(5925,57000,57002,'OP_BrokerAddBag',291,1),(5926,57000,57002,'OP_BrokerRemoveBag',292,1),(5927,57000,57002,'OP_ChatToggleIgnoreMsg',293,1),(5928,57000,57002,'OP_ChatSendFriendsMsg',294,1),(5929,57000,57002,'OP_ChatSendIgnoresMsg',295,1),(5930,57000,57002,'OP_QuestReward',319,1),(5931,57000,57002,'OP_ChatFiltersMsg',334,1),(5932,57000,57002,'OP_MailGetMessageMsg',337,1),(5933,57000,57002,'OP_MailSendMessageMsg',338,1),(5934,57000,57002,'OP_MailDeleteMessageMsg',339,1),(5935,57000,57002,'OP_MailGetHeadersReplyMsg',340,1),(5936,57000,57002,'OP_MailGetMessageReplyMsg',341,1),(5937,57000,57002,'OP_MailSendMessageReplyMsg',342,1),(5938,57000,57002,'OP_MailCommitSendMessageMsg',343,1),(5939,57000,57002,'OP_MailSendSystemMessageMsg',344,1),(5940,57000,57002,'OP_MailRemoveAttachFromMailMsg',345,1),(5941,57000,57002,'OP_WaypointRequestMsg',347,1),(5942,57000,57002,'OP_WaypointReplyMsg',348,1),(5943,57000,57002,'OP_WaypointSelectMsg',349,1),(5944,57000,57002,'OP_WaypointUpdateMsg',350,1),(5945,57000,57002,'OP_CharNameChangedMsg',351,1),(5946,57000,57002,'OP_ShowZoneTeleporterDestinations',352,1),(5947,57000,57002,'OP_SelectZoneTeleporterDestinatio',353,1),(5948,57000,57002,'OP_ReloadLocalizedTxtMsg',354,1),(5949,57000,57002,'OP_RequestGuildMembershipMsg',355,1),(5950,57000,57002,'OP_GuildMembershipResponseMsg',356,1),(5951,57000,57002,'OP_LeaveGuildNotifyMsg',357,1),(5952,57000,57002,'OP_JoinGuildNotifyMsg',358,1),(5953,57000,57002,'OP_AvatarUpdateMsg',359,1),(5954,57000,57002,'OP_BioUpdateMsg',361,1),(5955,57000,57002,'OP_InspectPlayerMsg',362,1),(5956,57000,57002,'OP_WSServerLockMsg',363,1),(5957,57000,57002,'OP_LSServerLockMsg',364,1),(5958,57000,57002,'OP_WSServerHideMsg',365,1),(5959,57000,57002,'OP_CsCategoryRequestMsg',366,1),(5960,57000,57002,'OP_CsCategoryResponseMsg',367,1),(5961,57000,57002,'OP_KnowledgeWindowSlotMappingMsg',368,1),(5962,57000,57002,'OP_AFKUpdateMsg',369,1),(5963,57000,57002,'OP_AnonUpdateMsg',370,1),(5964,57000,57002,'OP_UpdateActivePublicZonesMsg',371,1),(5965,57000,57002,'OP_UnknownNpcMsg',372,1),(5966,57000,57002,'OP_PromoFlagsDetailsMsg',373,1),(5967,57000,57002,'OP_ConsignViewCreateMsg',374,1),(5968,57000,57002,'OP_ConsignViewGetPageMsg',375,1),(5969,57000,57002,'OP_ConsignViewReleaseMsg',376,1),(5970,57000,57002,'OP_ConsignRemoveItemsMsg',377,1),(5971,57000,57002,'OP_UpdateDebugRadiiMsg',378,1),(5972,57000,57002,'OP_ReportMsg',379,1),(5973,57000,57002,'OP_UpdateRaidMsg',380,1),(5974,57000,57002,'OP_ConsignViewSortMsg',382,1),(5975,57000,57002,'OP_TitleUpdateMsg',383,1),(5976,57000,57002,'OP_ClientFellMsg',384,1),(5977,57000,57002,'OP_ClientInDeathRegionMsg',385,1),(5978,57000,57002,'OP_CampClientMsg',386,1),(5979,57000,57002,'OP_CSToolAccessResponseMsg',387,1),(5980,57000,57002,'OP_TrackingUpdateMsg',388,1),(5981,57000,57002,'OP_BeginTrackingMsg',389,1),(5982,57000,57002,'OP_StopTrackingMsg',390,1),(5983,57000,57002,'OP_GetAvatarAccessRequestForCSToo',392,1),(5984,57000,57002,'OP_AdvancementRequestMsg',393,1),(5985,57000,57002,'OP_MapFogDataInitMsg',394,1),(5986,57000,57002,'OP_MapFogDataUpdateMsg',395,1),(5987,57000,57002,'OP_CloseGroupInviteWindowMsg',396,1),(5988,57000,57002,'OP_UpdateGroupMemberDataMsg',397,1),(5989,57000,57002,'OP_WorldPingMsg',398,1),(5990,57000,57002,'OP_MoveLogUpdateMsg',389,1),(5991,57000,57002,'OP_OfferQuestMsg',400,1),(5992,57000,57002,'OP_WorldShutdownUpdateMsg',402,1),(5993,57000,57002,'OP_DisplayMailScreenMsg',403,1),(5994,57000,57002,'OP_ClientIdleBeginMsg',404,1),(5995,57000,57002,'OP_ClientIdleEndMsg',405,1),(5996,57000,57002,'OP_PurchaseConsignmentLoreCheckRe',406,1),(5997,57000,57002,'OP_NotifyApprenticeStoppedMentori',407,1),(5998,57000,57002,'OP_CorruptedClientMsg',408,1),(5999,57000,57002,'OP_WorldDataChangeMsg',409,1),(6000,57000,57002,'OP_MailEventNotificationMsg',410,1),(6001,57000,57002,'OP_RestartZoneMsg',411,1),(6002,57000,57002,'OP_FlightPathsMsg',412,1),(6003,57000,57002,'OP_CharacterLinkdeadMsg',413,1),(6004,57000,57002,'OP_CharTransferStartRequestMsg',414,1),(6005,57000,57002,'OP_CharTransferStartReplyMsg',415,1),(6006,57000,57002,'OP_CharTransferRequestMsg',416,1),(6007,57000,57002,'OP_CharTransferReplyMsg',417,1),(6008,57000,57002,'OP_CharTransferRollbackRequestMsg',418,1),(6009,57000,57002,'OP_CharTransferCommitRequestMsg',419,1),(6010,57000,57002,'OP_CharTransferRollbackReplyMsg',420,1),(6011,57000,57002,'OP_CharTransferCommitReplyMsg',421,1),(6012,57000,57002,'OP_GetCharacterSerializedRequestM',422,1),(6013,57000,57002,'OP_GetCharacterSerializedReplyMsg',423,1),(6014,57000,57002,'OP_CreateCharFromCBBRequestMsg',424,1),(6015,57000,57002,'OP_CreateCharFromCBBReplyMsg',425,1),(6016,57000,57002,'OP_HousingDataChangedMsg',426,1),(6017,57000,57002,'OP_HousingRestoreMsg',427,1),(6018,57000,57002,'OP_AuctionItem',428,1),(6019,57000,57002,'OP_AuctionItemReply',429,1),(6020,57000,57002,'OP_AuctionCoin',430,1),(6021,57000,57002,'OP_AuctionCoinReply',431,1),(6022,57000,57002,'OP_AuctionCharacter',432,1),(6023,57000,57002,'OP_AuctionCharacterReply',433,1),(6024,57000,57002,'OP_AuctionCommitMsg',434,1),(6025,57000,57002,'OP_AuctionAbortMsg',435,1),(6026,57000,57002,'OP_CharTransferValidateRequestMsg',436,1),(6027,57000,57002,'OP_CharTransferValidateReplyMsg',437,1),(6028,57000,57002,'OP_RaceRestrictionMsg',438,1),(6029,57000,57002,'OP_SetInstanceDisplayNameMsg',439,1),(6030,57000,57002,'OP_GetAuctionAssetIDMsg',440,1),(6031,57000,57002,'OP_GetAuctionAssetIDReplyMsg',441,1),(6032,57000,57002,'OP_ResendWorldChannelsMsg',442,1),(6033,57000,57002,'OP_DisplayExchangeScreenMsg',443,1),(6034,57000,57002,'OP_ArenaGameTypesMsg',444,1),(6035,57000,57002,'OP_AuditAuctionEventMsg',445,1),(6036,57000,57002,'OP_InviteRequestMsg',446,1),(6037,57000,57002,'OP_InviteResponseMsg',447,1),(6038,57000,57002,'OP_InviteTargetResponseMsg',448,1),(6039,57000,57002,'OP_InspectPlayerRequestMsg',449,1),(6040,57000,57002,'OP_DispatchMsg',450,1),(6041,57000,57002,'OP_DisplayEventMsg',451,1),(6042,57000,57002,'OP_PrePossessionMsg',452,1),(6043,57000,57002,'OP_PostPossessionMsg',453,1),(6044,57000,57002,'OP_ArenaCreate',455,1),(6045,57000,57002,'OP_ArenaList',456,1),(6046,57000,57002,'OP_ArenaWindow',464,1),(6047,57000,57002,'OP_HouseItemsList',482,1),(6048,57000,57002,'OP_CurrentPet',484,1),(6049,57000,57002,'OP_AdventureList',487,1),(6050,57000,57002,'OP_CancelSpellCast',488,1),(6051,57000,57002,'OP_UpdateTitleCmd',493,1),(6052,57000,57002,'OP_AttackAllowed',499,1),(6053,57000,57002,'OP_AttackNotAllowed',500,1),(6054,57000,57002,'OP_BagOptions',501,1),(6055,57000,57002,'OP_LFGGroupSearch',503,1),(6056,57000,57002,'OP_CharacterHousingList',506,1),(6057,57000,57002,'OP_DressingRoom',509,1),(6058,57000,57002,'OP_PlayLon',510,1),(6059,57000,57002,'OP_SkillInfoRequest',513,1),(6060,57000,57002,'OP_SkillInfoResponse',514,1),(6061,57000,57002,'OP_LFGUpdateMsg',517,1),(6062,57000,57002,'OP_BadLanguageFilter',518,1),(6063,57000,57002,'OP_VoiceChatChannel',519,1),(6064,57000,57002,'OP_MapRequest',520,1),(6065,57000,57002,'OP_MarketFundsUpdate',525,1),(6066,57000,57002,'OP_UIEvent',526,1),(6067,57000,57002,'OP_MarketAddFundsRequest',527,1),(6068,57000,57002,'OP_MarketAddFundsReply',528,1),(6069,57000,57002,'OP_MarketPurchase',530,1),(6070,57000,57002,'OP_MarketPlacePrices',531,1),(6071,57000,57002,'OP_MarketPlaceItems',534,1),(6072,57000,57002,'OP_RecipeBook',535,1),(6073,57000,57002,'OP_CreateCharacterDungeon',544,1),(6074,57000,57002,'OP_DungeonMakerEnter',545,1),(6075,57000,57002,'OP_DungeonMakerItemRequest',547,1),(6076,57000,57002,'OP_CharacterCreatedDungeons',548,1),(6077,57000,57002,'OP_DungeonMakerToolboxList',549,1),(6078,57000,57002,'OP_DungeonMakerUnknown',550,1),(6079,57000,57002,'OP_DungeonMakerUnknown1',551,1),(6080,57000,57002,'OP_PlayerPollPopup',553,1),(6081,57000,57002,'OP_PlayerPollAnswer',554,1),(6082,57000,57002,'OP_MentorPopup',555,1),(6083,57000,57002,'OP_LoadWelcomeWindow',557,1),(6084,57000,57002,'OP_OpenCharCust',558,1),(6085,57000,57002,'OP_SubmitCharCust',559,1),(6086,57000,57002,'OP_QueAllBgSolo',561,1),(6087,57000,57002,'OP_ZoneBgInstanceList',563,1),(6088,57000,57002,'OP_WorldTravelAvail',567,1),(6089,57000,57002,'OP_PaperdollImage',571,1),(6090,57000,57002,'OP_LoadCalendarEvents',572,1),(6091,57000,57002,'OP_VideoUploaded',573,1),(6092,57000,57002,'OP_SavageBarInitMsg',574,1),(6093,57000,57002,'OP_PetOptionsResponse',575,1),(6094,57000,57002,'OP_DungeonMakerItemResponse',576,1),(6095,57000,57002,'OP_CharacterMounts',578,1),(6096,57000,57002,'OP_EqBetaCopyRequest',588,1),(6097,57000,57002,'OP_EqHearChatCmd',589,1),(6098,57000,57002,'OP_EqDisplayTextCmd',590,1),(6099,57000,57002,'OP_EqCreateGhostCmd',591,1),(6100,57000,57002,'OP_EqCreateWidgetCmd',592,1),(6101,57000,57002,'OP_EqCreateSignWidgetCmd',593,1),(6102,57000,57002,'OP_EqDestroyGhostCmd',594,1),(6103,57000,57002,'OP_EqUpdateGhostCmd',595,1),(6104,57000,57002,'OP_EqSetControlGhostCmd',596,1),(6105,57000,57002,'OP_EqSetPOVGhostCmd',597,1),(6106,57000,57002,'OP_EqHearCombatCmd',598,1),(6107,57000,57002,'OP_EqHearSpellCastCmd',599,1),(6108,57000,57002,'OP_EQHearProcCmd',600,1),(6109,57000,57002,'OP_EQHearResEffectCmd',601,1),(6110,57000,57002,'OP_EqHearSpellInterruptCmd',602,1),(6111,57000,57002,'OP_EqHearSpellFizzleCmd',603,1),(6112,57000,57002,'OP_EqHearConsiderCmd',604,1),(6113,57000,57002,'OP_EqUpdateSubClassesCmd',605,1),(6114,57000,57002,'OP_EqCreateListBoxCmd',606,1),(6115,57000,57002,'OP_EqSetDebugPathPointsCmd',607,1),(6116,57000,57002,'OP_EqCannedEmoteCmd',609,1),(6117,57000,57002,'OP_EqStateCmd',610,1),(6118,57000,57002,'OP_EqPlaySoundCmd',611,1),(6119,57000,57002,'OP_EqPlaySound3DCmd',612,1),(6120,57000,57002,'OP_EqPlayVoiceCmd',613,1),(6121,57000,57002,'OP_EqHearDrowningCmd',614,1),(6122,57000,57002,'OP_EqHearDeathCmd',615,1),(6123,57000,57002,'OP_EqGroupMemberRemovedCmd',616,1),(6124,57000,57002,'OP_EqHearChainEffectCmd',617,1),(6125,57000,57002,'OP_EqReceiveOfferCmd',618,1),(6126,57000,57002,'OP_EqInspectPCResultsCmd',619,1),(6127,57000,57002,'OP_EqDrawablePathGraphCmd',620,1),(6128,57000,57002,'OP_EqDialogOpenCmd',621,1),(6129,57000,57002,'OP_EqDialogCloseCmd',622,1),(6130,57000,57002,'OP_EqFactionUpdateCmd',623,1),(6131,57000,57002,'OP_EqCollectionUpdateCmd',624,1),(6132,57000,57002,'OP_EqCollectionFilterCmd',625,1),(6133,57000,57002,'OP_EqCollectionItemCmd',626,1),(6134,57000,57002,'OP_EqQuestJournalUpdateCmd',627,1),(6135,57000,57002,'OP_EqMentoring',628,1),(6136,57000,57002,'OP_EqQuestJournalReplyCmd',629,1),(6137,57000,57002,'OP_EqQuestGroupCmd',630,1),(6138,57000,57002,'OP_EqUpdateMerchantCmd',631,1),(6139,57000,57002,'OP_EqUpdateStoreCmd',632,1),(6140,57000,57002,'OP_EqUpdatePlayerTradeCmd',633,1),(6141,57000,57002,'OP_EqHelpPathCmd',634,1),(6142,57000,57002,'OP_EqHelpPathClearCmd',635,1),(6143,57000,57002,'OP_EqUpdateBankCmd',636,1),(6144,57000,57002,'OP_EqExamineInfoCmd',637,1),(6145,57000,57002,'OP_EqCloseWindowCmd',638,1),(6146,57000,57002,'OP_EqUpdateLootCmd',639,1),(6147,57000,57002,'OP_EqJunctionListCmd',640,1),(6148,57000,57002,'OP_EqShowDeathWindowCmd',641,1),(6149,57000,57002,'OP_EqDisplaySpellFailCmd',642,1),(6150,57000,57002,'OP_EqSpellCastStartCmd',643,1),(6151,57000,57002,'OP_EqSpellCastEndCmd',644,1),(6152,57000,57002,'OP_EqResurrectedCmd',645,1),(6153,57000,57002,'OP_EqChoiceWinCmd',646,1),(6154,57000,57002,'OP_EqSetDefaultVerbCmd',647,1),(6155,57000,57002,'OP_EqInstructionWindowCmd',648,1),(6156,57000,57002,'OP_EqInstructionWindowCloseCmd',649,1),(6157,57000,57002,'OP_EqInstructionWindowGoalCmd',650,1),(6158,57000,57002,'OP_EqInstructionWindowTaskCmd',651,1),(6159,57000,57002,'OP_EqEnableGameEventCmd',652,1),(6160,57000,57002,'OP_EqShowWindowCmd',653,1),(6161,57000,57002,'OP_EqEnableWindowCmd',654,1),(6162,57000,57002,'OP_EqFlashWindowCmd',655,1),(6163,57000,57002,'OP_EqHearPlayFlavorCmd',657,1),(6164,57000,57002,'OP_EqUpdateSignWidgetCmd',658,1),(6165,57000,57002,'OP_EqDebugPVDCmd',659,1),(6166,57000,57002,'OP_EqShowBookCmd',660,1),(6167,57000,57002,'OP_EqQuestionnaireCmd',661,1),(6168,57000,57002,'OP_EqGetProbsCmd',663,1),(6169,57000,57002,'OP_EqHearHealCmd',664,1),(6170,57000,57002,'OP_EqChatChannelUpdateCmd',665,1),(6171,57000,57002,'OP_EqWhoChannelQueryReplyCmd',666,1),(6172,57000,57002,'OP_EqAvailWorldChannelsCmd',667,1),(6173,57000,57002,'OP_EqUpdateTargetCmd',668,1),(6174,57000,57002,'OP_BrokerSellList',669,1),(6175,57000,57002,'OP_EqConsignmentItemsCmd',670,1),(6176,57000,57002,'OP_EqStartBrokerCmd',672,1),(6177,57000,57002,'OP_EqMapExplorationCmd',673,1),(6178,57000,57002,'OP_EqStoreLogCmd',674,1),(6179,57000,57002,'OP_EqSpellMoveToRangeAndRetryCmd',675,1),(6180,57000,57002,'OP_EqUpdatePlayerMailCmd',676,1),(6181,57000,57002,'OP_GuildStatusUpdate',679,1),(6182,57000,57002,'OP_EqArenaResultsCmd',680,1),(6183,57000,57002,'OP_EqGuildBankEventActionCmd',681,1),(6184,57000,57002,'OP_EqGuildBankExamineInfoCmd',682,1),(6185,57000,57002,'OP_EqHearSpellNoLandCmd',683,1),(6186,57000,57002,'OP_Lottery',684,1),(6187,57000,57002,'OP_GuildRecruitingMemberInfo',685,1),(6188,57000,57002,'OP_GuildRecruiting',686,1),(6189,57000,57002,'OP_GuildRecruitingDetails',687,1),(6190,57000,57002,'OP_GuildRecruitingImage',688,1),(6191,57000,57002,'OP_TradeskillList',706,1),(6192,57000,57002,'OP_CharRenamed',690,1),(6193,57000,57002,'OP_UseAdornment',700,1),(6194,57000,57002,'OP_ExpPurchWindow',706,1),(6195,57000,57002,'OP_PointOfInterest',710,1),(6196,57000,57002,'OP_PointOfInterest2',711,1),(6197,57000,57002,'OP_TraitsList',712,1),(6198,57000,57002,'OP_CustomizeHouseDisplay',715,1),(6199,57000,57002,'OP_VoiceChatServer',716,1),(6200,57000,57002,'OP_SupplyDepot',720,1),(6201,57000,57002,'OP_EQHearThreatCmd',721,1),(6202,57000,57002,'OP_RecipeList',722,1),(6203,57000,57002,'OP_Research',723,1),(6204,57000,57002,'OP_CharacterCurrency',724,1),(6205,57000,57002,'OP_CharacterAchievements',725,1),(6206,57000,57002,'OP_AchievementUpdateMsg',726,1),(6207,57000,57002,'OP_EQHearDispellCmd',727,1),(6208,57000,57002,'OP_JournalQuestStoryline',728,1),(6209,57000,57002,'OP_DungeonPlayAsAvatarList',729,1),(6210,57000,57002,'OP_DungeonPlayAsAvatarSelected',730,1),(6211,57000,57002,'OP_MercHireWindow',731,1),(6212,57000,57002,'OP_MercUnknown',732,1),(6213,57000,57002,'OP_Unknown',748,1),(6686,57003,57014,'OP_LoginRequestMsg',0,1),(6687,57003,57014,'OP_LoginByNumRequestMsg',1,1),(6688,57003,57014,'OP_WSLoginRequestMsg',2,1),(6689,57003,57014,'OP_ESLoginRequestMsg',3,1),(6690,57003,57014,'OP_LoginReplyMsg',4,1),(6691,57003,57014,'OP_WSStatusReplyMsg',5,1),(6692,57003,57014,'OP_WorldStatusChangeMsg',6,1),(6693,57003,57014,'OP_AllWSDescRequestMsg',7,1),(6694,57003,57014,'OP_WorldListMsg',8,1),(6695,57003,57014,'OP_AllCharactersDescRequestMsg',9,1),(6696,57003,57014,'OP_AllCharactersDescReplyMsg',10,1),(6697,57003,57014,'OP_CreateCharacterRequestMsg',11,1),(6698,57003,57014,'OP_CreateCharacterReplyMsg',12,1),(6699,57003,57014,'OP_WSCreateCharacterRequestMsg',13,1),(6700,57003,57014,'OP_WSCreateCharacterReplyMsg',14,1),(6701,57003,57014,'OP_ReskinCharacterRequestMsg',15,1),(6702,57003,57014,'OP_DeleteCharacterRequestMsg',16,1),(6703,57003,57014,'OP_DeleteCharacterReplyMsg',17,1),(6704,57003,57014,'OP_PlayCharacterRequestMsg',18,1),(6705,57003,57014,'OP_PlayCharacterReplyMsg',19,1),(6706,57003,57014,'OP_ExpectClientAsCharacterReplyMs',22,1),(6707,57003,57014,'OP_ServerPlayCharacterRequestMsg',23,1),(6708,57003,57014,'OP_ServerPlayCharacterReplyMsg',24,1),(6709,57003,57014,'OP_ESInitMsg',25,1),(6710,57003,57014,'OP_ESReadyForClientsMsg',26,1),(6711,57003,57014,'OP_CreateZoneInstanceMsg',29,1),(6712,57003,57014,'OP_ZoneInstanceCreateReplyMsg',30,1),(6713,57003,57014,'OP_ZoneInstanceDestroyedMsg',31,1),(6714,57003,57014,'OP_ExpectClientAsCharacterRequest',32,1),(6715,57003,57014,'OP_ZoneInfoMsg',33,1),(6716,57003,57014,'OP_DoneLoadingZoneResourcesMsg',34,1),(6717,57003,57014,'OP_DoneSendingInitialEntitiesMsg',35,1),(6718,57003,57014,'OP_DoneLoadingEntityResourcesMsg',36,1),(6719,57003,57014,'OP_PredictionUpdateMsg',37,1),(6720,57003,57014,'OP_UpdatePositionMsg',39,1),(6721,57003,57014,'OP_SetRemoteCmdsMsg',41,1),(6722,57003,57014,'OP_RemoteCmdMsg',42,1),(6723,57003,57014,'OP_GameWorldTimeMsg',43,1),(6724,57003,57014,'OP_MOTDMsg',44,1),(6725,57003,57014,'OP_ZoneMOTDMsg',45,1),(6726,57003,57014,'OP_AvatarCreatedMsg',46,1),(6727,57003,57014,'OP_AvatarDestroyedMsg',47,1),(6728,57003,57014,'OP_RequestCampMsg',50,1),(6729,57003,57014,'OP_CampStartedMsg',51,1),(6730,57003,57014,'OP_CampAbortedMsg',52,1),(6731,57003,57014,'OP_WhoQueryRequestMsg',53,1),(6732,57003,57014,'OP_WhoQueryReplyMsg',54,1),(6733,57003,57014,'OP_MonitorReplyMsg',55,1),(6734,57003,57014,'OP_MonitorCharacterListMsg',56,1),(6735,57003,57014,'OP_MonitorCharacterListRequestMsg',57,1),(6736,57003,57014,'OP_ClientCmdMsg',58,1),(6737,57003,57014,'OP_DispatchESMsg',59,1),(6738,57003,57014,'OP_DispatchClientCmdMsg',60,1),(6739,57003,57014,'OP_UpdateTargetMsg',61,1),(6740,57003,57014,'OP_UpdateTargetLocMsg',62,1),(6741,57003,57014,'OP_UpdateCharacterSheetMsg',63,1),(6742,57003,57014,'OP_CharacterPet',64,1),(6743,57003,57014,'OP_CharacterMerc',65,1),(6744,57003,57014,'OP_UpdateSpellBookMsg',66,1),(6745,57003,57014,'OP_UpdateInventoryMsg',68,1),(6746,57003,57014,'OP_AfterInvSpellUpdate',69,1),(6747,57003,57014,'OP_UpdateRecipeBookMsg',70,1),(6748,57003,57014,'OP_RequestRecipeDetailsMsg',71,1),(6749,57003,57014,'OP_RecipeDetailsMsg',72,1),(6750,57003,57014,'OP_UpdateSkillBookMsg',73,1),(6751,57003,57014,'OP_UpdateSkillsMsg',74,1),(6752,57003,57014,'OP_UpdateOpportunityMsg',75,1),(6753,57003,57014,'OP_ChangeZoneMsg',77,1),(6754,57003,57014,'OP_ClientTeleportRequestMsg',78,1),(6755,57003,57014,'OP_TeleportWithinZoneMsg',79,1),(6756,57003,57014,'OP_TeleportWithinZoneNoReloadMsg',80,1),(6757,57003,57014,'OP_MigrateClientToZoneRequestMsg',81,1),(6758,57003,57014,'OP_MigrateClientToZoneReplyMsg',82,1),(6759,57003,57014,'OP_ReadyToZoneMsg',84,1),(6760,57003,57014,'OP_RemoveClientFromGroupMsg',85,1),(6761,57003,57014,'OP_RemoveGroupFromGroupMsg',86,1),(6762,57003,57014,'OP_MakeGroupLeaderMsg',87,1),(6763,57003,57014,'OP_GroupCreatedMsg',88,1),(6764,57003,57014,'OP_GroupDestroyedMsg',89,1),(6765,57003,57014,'OP_GroupMemberAddedMsg',90,1),(6766,57003,57014,'OP_GroupMemberRemovedMsg',91,1),(6767,57003,57014,'OP_GroupRemovedFromGroupMsg',92,1),(6768,57003,57014,'OP_GroupLeaderChangedMsg',93,1),(6769,57003,57014,'OP_GroupResendOOZDataMsg',94,1),(6770,57003,57014,'OP_GroupSettingsChangedMsg',95,1),(6771,57003,57014,'OP_OutOfZoneMemberDataMsg',96,1),(6772,57003,57014,'OP_SendLatestRequestMsg',97,1),(6773,57003,57014,'OP_ClearDataMsg',98,1),(6774,57003,57014,'OP_SetSocialMsg',99,1),(6775,57003,57014,'OP_ESStatusMsg',100,1),(6776,57003,57014,'OP_ESZoneInstanceStatusMsg',101,1),(6777,57003,57014,'OP_ZonesStatusRequestMsg',102,1),(6778,57003,57014,'OP_ZonesStatusMsg',103,1),(6779,57003,57014,'OP_ESWeatherRequestMsg',104,1),(6780,57003,57014,'OP_ESWeatherRequestEndMsg',105,1),(6781,57003,57014,'OP_DialogSelectMsg',109,1),(6782,57003,57014,'OP_DialogCloseMsg',110,1),(6783,57003,57014,'OP_RemoveSpellEffectMsg',111,1),(6784,57003,57014,'OP_RemoveConcentrationMsg',112,1),(6785,57003,57014,'OP_QuestJournalOpenMsg',113,1),(6786,57003,57014,'OP_QuestJournalInspectMsg',114,1),(6787,57003,57014,'OP_QuestJournalSetVisibleMsg',115,1),(6788,57003,57014,'OP_QuestJournalWaypointMsg',116,1),(6789,57003,57014,'OP_CreateGuildRequestMsg',119,1),(6790,57003,57014,'OP_CreateGuildReplyMsg',120,1),(6791,57003,57014,'OP_GuildsayMsg',121,1),(6792,57003,57014,'OP_FellowshipExpMsg',122,1),(6793,57003,57014,'OP_DeleteGuildMsg',123,1),(6794,57003,57014,'OP_GuildUpdateMsg',124,1),(6795,57003,57014,'OP_ConsignmentCloseStoreMsg',125,1),(6796,57003,57014,'OP_ConsignItemRequestMsg',126,1),(6797,57003,57014,'OP_ConsignItemResponseMsg',127,1),(6798,57003,57014,'OP_PurchaseConsignmentRequestMsg',128,1),(6799,57003,57014,'OP_LikeOption',135,1),(6800,57003,57014,'OP_PublishHouse',138,1),(6801,57003,57014,'OP_PlayerMadeInstacnesScreen',139,1),(6802,57003,57014,'OP_PlayerMadeInstances',140,1),(6803,57003,57014,'OP_HouseDeletedRemotelyMsg',142,1),(6804,57003,57014,'OP_UpdateHouseDataMsg',143,1),(6805,57003,57014,'OP_UpdateHouseAccessDataMsg',144,1),(6806,57003,57014,'OP_PlayerHouseBaseScreenMsg',145,1),(6807,57003,57014,'OP_PlayerHousePurchaseScreenMsg',146,1),(6808,57003,57014,'OP_PlayerHouseAccessUpdateMsg',147,1),(6809,57003,57014,'OP_PlayerHouseDisplayStatusMsg',148,1),(6810,57003,57014,'OP_PlayerHouseCloseUIMsg',149,1),(6811,57003,57014,'OP_BuyPlayerHouseMsg',150,1),(6812,57003,57014,'OP_BuyPlayerHouseTintMsg',151,1),(6813,57003,57014,'OP_CollectAllHouseItemsMsg',152,1),(6814,57003,57014,'OP_RelinquishHouseMsg',153,1),(6815,57003,57014,'OP_EnterHouseMsg',154,1),(6816,57003,57014,'OP_ExitHouseMsg',155,1),(6817,57003,57014,'OP_HouseDefaultAccessSetMsg',156,1),(6818,57003,57014,'OP_HouseAccessSetMsg',157,1),(6819,57003,57014,'OP_HouseAccessRemoveMsg',158,1),(6820,57003,57014,'OP_PayHouseUpkeepMsg',159,1),(6821,57003,57014,'OP_MoveableObjectPlacementCriteri',160,1),(6822,57003,57014,'OP_EnterMoveObjectModeMsg',161,1),(6823,57003,57014,'OP_PositionMoveableObject',162,1),(6824,57003,57014,'OP_CancelMoveObjectModeMsg',163,1),(6825,57003,57014,'OP_ShaderCustomizationMsg',164,1),(6826,57003,57014,'OP_ReplaceableSubMeshesMsg',165,1),(6827,57003,57014,'OP_HouseCustomizationScreenMsg',166,1),(6828,57003,57014,'OP_CustomizationPurchaseRequestMs',167,1),(6829,57003,57014,'OP_CustomizationSetRequestMsg',168,1),(6830,57003,57014,'OP_CustomizationReplyMsg',169,1),(6831,57003,57014,'OP_TintWidgetsMsg',170,1),(6832,57003,57014,'OP_ExamineConsignmentRequestMsg',171,1),(6833,57003,57014,'OP_ExamineConsignmentResponseMsg',172,1),(6834,57003,57014,'OP_UISettingsResponseMsg',173,1),(6835,57003,57014,'OP_UIResetMsg',174,1),(6836,57003,57014,'OP_KeymapLoadMsg',175,1),(6837,57003,57014,'OP_KeymapNoneMsg',176,1),(6838,57003,57014,'OP_KeymapDataMsg',177,1),(6839,57003,57014,'OP_KeymapSaveMsg',178,1),(6840,57003,57014,'OP_DispatchSpellCmdMsg',179,1),(6841,57003,57014,'OP_EntityVerbsRequestMsg',180,1),(6842,57003,57014,'OP_EntityVerbsReplyMsg',181,1),(6843,57003,57014,'OP_EntityVerbsVerbMsg',182,1),(6844,57003,57014,'OP_ChatRelationshipUpdateMsg',184,1),(6845,57003,57014,'OP_LootItemsRequestMsg',185,1),(6846,57003,57014,'OP_StoppedLootingMsg',186,1),(6847,57003,57014,'OP_SitMsg',187,1),(6848,57003,57014,'OP_StandMsg',188,1),(6849,57003,57014,'OP_SatMsg',189,1),(6850,57003,57014,'OP_StoodMsg',190,1),(6851,57003,57014,'OP_ClearForTakeOffMsg',191,1),(6852,57003,57014,'OP_ReadyForTakeOffMsg',192,1),(6853,57003,57014,'OP_ShowIllusionsMsg',193,1),(6854,57003,57014,'OP_HideIllusionsMsg',194,1),(6855,57003,57014,'OP_ExamineItemRequestMsg',195,1),(6856,57003,57014,'OP_ReadBookPageMsg',196,1),(6857,57003,57014,'OP_DefaultGroupOptionsRequestMsg',197,1),(6858,57003,57014,'OP_DefaultGroupOptionsMsg',198,1),(6859,57003,57014,'OP_GroupOptionsMsg',199,1),(6860,57003,57014,'OP_DisplayGroupOptionsScreenMsg',200,1),(6861,57003,57014,'OP_PetOptions',201,1),(6862,57003,57014,'OP_DisplayInnVisitScreenMsg',202,1),(6863,57003,57014,'OP_DumpSchedulerMsg',203,1),(6864,57003,57014,'OP_LSCheckAcctLockMsg',204,1),(6865,57003,57014,'OP_WSAcctLockStatusMsg',205,1),(6866,57003,57014,'OP_RequestHelpRepathMsg',206,1),(6867,57003,57014,'OP_RequestTargetLocMsg',207,1),(6868,57003,57014,'OP_UpdateMotdMsg',208,1),(6869,57003,57014,'OP_DestUpdateReq',210,1),(6870,57003,57014,'OP_PerformPlayerKnockbackMsg',213,1),(6871,57003,57014,'OP_PerformCameraShakeMsg',214,1),(6872,57003,57014,'OP_PopulateSkillMapsMsg',215,1),(6873,57003,57014,'OP_CancelledFeignMsg',216,1),(6874,57003,57014,'OP_SysClient',218,1),(6875,57003,57014,'OP_ShowCreateFromRecipeUIMsg',219,1),(6876,57003,57014,'OP_CancelCreateFromRecipeMsg',220,1),(6877,57003,57014,'OP_BeginItemCreationMsg',221,1),(6878,57003,57014,'OP_StopItemCreationMsg',222,1),(6879,57003,57014,'OP_ShowItemCreationProcessUIMsg',223,1),(6880,57003,57014,'OP_UpdateItemCreationProcessUIMsg',224,1),(6881,57003,57014,'OP_DisplayTSEventReactionMsg',225,1),(6882,57003,57014,'OP_ShowRecipeBookMsg',226,1),(6883,57003,57014,'OP_KnowledgebaseRequestMsg',227,1),(6884,57003,57014,'OP_KnowledgebaseResponseMsg',228,1),(6885,57003,57014,'OP_CSTicketHeaderRequestMsg',229,1),(6886,57003,57014,'OP_CSTicketInfoMsg',230,1),(6887,57003,57014,'OP_CSTicketCommentRequestMsg',231,1),(6888,57003,57014,'OP_CSTicketCommentResponseMsg',232,1),(6889,57003,57014,'OP_CSTicketCreateMsg',233,1),(6890,57003,57014,'OP_CSTicketAddCommentMsg',234,1),(6891,57003,57014,'OP_CSTicketDeleteMsg',235,1),(6892,57003,57014,'OP_CSTicketChangeNotificationMsg',236,1),(6893,57003,57014,'OP_WorldDataUpdateMsg',237,1),(6894,57003,57014,'OP_KnownLanguagesMsg',238,1),(6895,57003,57014,'OP_LsRequestClientCrashLogMsg',239,1),(6896,57003,57014,'OP_LsClientBaselogReplyMsg',240,1),(6897,57003,57014,'OP_LsClientCrashlogReplyMsg',241,1),(6898,57003,57014,'OP_LsClientAlertlogReplyMsg',242,1),(6899,57003,57014,'OP_LsClientVerifylogReplyMsg',243,1),(6900,57003,57014,'OP_ClientTeleportToLocationMsg',244,1),(6901,57003,57014,'OP_UpdateClientPredFlagsMsg',245,1),(6902,57003,57014,'OP_ChangeServerControlFlagMsg',246,1),(6903,57003,57014,'OP_CSToolsRequestMsg',247,1),(6904,57003,57014,'OP_CSToolsResponseMsg',248,1),(6905,57003,57014,'OP_AddSocialStructureStandingMsg',249,1),(6906,57003,57014,'OP_CreateBoatTransportsMsg',250,1),(6907,57003,57014,'OP_PositionBoatTransportMsg',251,1),(6908,57003,57014,'OP_MigrateBoatTransportMsg',252,1),(6909,57003,57014,'OP_MigrateBoatTransportReplyMsg',253,1),(6910,57003,57014,'OP_DisplayDebugNLLPointsMsg',254,1),(6911,57003,57014,'OP_ExamineInfoRequestMsg',255,1),(6912,57003,57014,'OP_QuickbarInitMsg',256,1),(6913,57003,57014,'OP_QuickbarUpdateMsg',257,1),(6914,57003,57014,'OP_MacroInitMsg',258,1),(6915,57003,57014,'OP_MacroUpdateMsg',259,1),(6916,57003,57014,'OP_QuestionnaireMsg',260,1),(6917,57003,57014,'OP_LevelChangedMsg',261,1),(6918,57003,57014,'OP_SpellGainedMsg',262,1),(6919,57003,57014,'OP_EncounterBrokenMsg',263,1),(6920,57003,57014,'OP_OnscreenMsgMsg',264,1),(6921,57003,57014,'OP_DisplayWarningMsg',265,1),(6922,57003,57014,'OP_ModifyGuildMsg',266,1),(6923,57003,57014,'OP_GuildEventMsg',267,1),(6924,57003,57014,'OP_GuildEventAddMsg',268,1),(6925,57003,57014,'OP_GuildEventActionMsg',269,1),(6926,57003,57014,'OP_GuildEventListMsg',270,1),(6927,57003,57014,'OP_RequestGuildEventDetailsMsg',271,1),(6928,57003,57014,'OP_GuildEventDetailsMsg',272,1),(6929,57003,57014,'OP_RequestGuildInfoMsg',273,1),(6930,57003,57014,'OP_GuildBankActionMsg',274,1),(6931,57003,57014,'OP_GuildBankActionResponseMsg',275,1),(6932,57003,57014,'OP_GuildBankItemDetailsRequestMsg',276,1),(6933,57003,57014,'OP_GuildBankItemDetailsResponseMs',277,1),(6934,57003,57014,'OP_GuildBankUpdateMsg',278,1),(6935,57003,57014,'OP_GuildBankEventListMsg',279,1),(6936,57003,57014,'OP_RequestGuildBankEventDetailsMs',280,1),(6937,57003,57014,'OP_RewardPackMsg',281,1),(6938,57003,57014,'OP_RenameGuildMsg',282,1),(6939,57003,57014,'OP_ZoneToFriendRequestMsg',283,1),(6940,57003,57014,'OP_ZoneToFriendReplyMsg',284,1),(6941,57003,57014,'OP_ChatCreateChannelMsg',285,1),(6942,57003,57014,'OP_ChatJoinChannelMsg',286,1),(6943,57003,57014,'OP_ChatWhoChannelMsg',287,1),(6944,57003,57014,'OP_ChatLeaveChannelMsg',288,1),(6945,57003,57014,'OP_ChatTellChannelMsg',289,1),(6946,57003,57014,'OP_ChatTellUserMsg',290,1),(6947,57003,57014,'OP_ChatToggleFriendMsg',291,1),(6948,57003,57014,'OP_BrokerAddBag',292,1),(6949,57003,57014,'OP_BrokerRemoveBag',293,1),(6950,57003,57014,'OP_ChatToggleIgnoreMsg',294,1),(6951,57003,57014,'OP_ChatSendFriendsMsg',295,1),(6952,57003,57014,'OP_ChatSendIgnoresMsg',296,1),(6953,57003,57014,'OP_QuestReward',320,1),(6954,57003,57014,'OP_ChatFiltersMsg',335,1),(6955,57003,57014,'OP_MailGetMessageMsg',338,1),(6956,57003,57014,'OP_MailSendMessageMsg',339,1),(6957,57003,57014,'OP_MailDeleteMessageMsg',340,1),(6958,57003,57014,'OP_MailGetHeadersReplyMsg',341,1),(6959,57003,57014,'OP_MailGetMessageReplyMsg',342,1),(6960,57003,57014,'OP_MailSendMessageReplyMsg',343,1),(6961,57003,57014,'OP_MailCommitSendMessageMsg',344,1),(6962,57003,57014,'OP_MailSendSystemMessageMsg',345,1),(6963,57003,57014,'OP_MailRemoveAttachFromMailMsg',346,1),(6964,57003,57014,'OP_WaypointRequestMsg',348,1),(6965,57003,57014,'OP_WaypointReplyMsg',349,1),(6966,57003,57014,'OP_WaypointSelectMsg',350,1),(6967,57003,57014,'OP_WaypointUpdateMsg',351,1),(6968,57003,57014,'OP_CharNameChangedMsg',352,1),(6969,57003,57014,'OP_ShowZoneTeleporterDestinations',353,1),(6970,57003,57014,'OP_SelectZoneTeleporterDestinatio',354,1),(6971,57003,57014,'OP_ReloadLocalizedTxtMsg',355,1),(6972,57003,57014,'OP_RequestGuildMembershipMsg',356,1),(6973,57003,57014,'OP_GuildMembershipResponseMsg',357,1),(6974,57003,57014,'OP_LeaveGuildNotifyMsg',358,1),(6975,57003,57014,'OP_JoinGuildNotifyMsg',359,1),(6976,57003,57014,'OP_AvatarUpdateMsg',360,1),(6977,57003,57014,'OP_BioUpdateMsg',362,1),(6978,57003,57014,'OP_InspectPlayerMsg',363,1),(6979,57003,57014,'OP_WSServerLockMsg',364,1),(6980,57003,57014,'OP_LSServerLockMsg',365,1),(6981,57003,57014,'OP_WSServerHideMsg',366,1),(6982,57003,57014,'OP_CsCategoryRequestMsg',367,1),(6983,57003,57014,'OP_CsCategoryResponseMsg',368,1),(6984,57003,57014,'OP_KnowledgeWindowSlotMappingMsg',369,1),(6985,57003,57014,'OP_AFKUpdateMsg',370,1),(6986,57003,57014,'OP_AnonUpdateMsg',371,1),(6987,57003,57014,'OP_UpdateActivePublicZonesMsg',372,1),(6988,57003,57014,'OP_UnknownNpcMsg',373,1),(6989,57003,57014,'OP_PromoFlagsDetailsMsg',374,1),(6990,57003,57014,'OP_ConsignViewCreateMsg',375,1),(6991,57003,57014,'OP_ConsignViewGetPageMsg',376,1),(6992,57003,57014,'OP_ConsignViewReleaseMsg',377,1),(6993,57003,57014,'OP_ConsignRemoveItemsMsg',378,1),(6994,57003,57014,'OP_UpdateDebugRadiiMsg',379,1),(6995,57003,57014,'OP_ReportMsg',380,1),(6996,57003,57014,'OP_UpdateRaidMsg',381,1),(6997,57003,57014,'OP_ConsignViewSortMsg',383,1),(6998,57003,57014,'OP_TitleUpdateMsg',384,1),(6999,57003,57014,'OP_ClientFellMsg',385,1),(7000,57003,57014,'OP_ClientInDeathRegionMsg',386,1),(7001,57003,57014,'OP_CampClientMsg',387,1),(7002,57003,57014,'OP_CSToolAccessResponseMsg',388,1),(7003,57003,57014,'OP_TrackingUpdateMsg',389,1),(7004,57003,57014,'OP_BeginTrackingMsg',390,1),(7005,57003,57014,'OP_StopTrackingMsg',391,1),(7006,57003,57014,'OP_GetAvatarAccessRequestForCSToo',393,1),(7007,57003,57014,'OP_AdvancementRequestMsg',394,1),(7008,57003,57014,'OP_MapFogDataInitMsg',395,1),(7009,57003,57014,'OP_MapFogDataUpdateMsg',396,1),(7010,57003,57014,'OP_CloseGroupInviteWindowMsg',397,1),(7011,57003,57014,'OP_UpdateGroupMemberDataMsg',398,1),(7012,57003,57014,'OP_WorldPingMsg',399,1),(7013,57003,57014,'OP_MoveLogUpdateMsg',390,1),(7014,57003,57014,'OP_OfferQuestMsg',401,1),(7015,57003,57014,'OP_WorldShutdownUpdateMsg',403,1),(7016,57003,57014,'OP_DisplayMailScreenMsg',404,1),(7017,57003,57014,'OP_ClientIdleBeginMsg',405,1),(7018,57003,57014,'OP_ClientIdleEndMsg',406,1),(7019,57003,57014,'OP_PurchaseConsignmentLoreCheckRe',407,1),(7020,57003,57014,'OP_NotifyApprenticeStoppedMentori',408,1),(7021,57003,57014,'OP_CorruptedClientMsg',409,1),(7022,57003,57014,'OP_WorldDataChangeMsg',410,1),(7023,57003,57014,'OP_MailEventNotificationMsg',411,1),(7024,57003,57014,'OP_RestartZoneMsg',412,1),(7025,57003,57014,'OP_FlightPathsMsg',413,1),(7026,57003,57014,'OP_CharacterLinkdeadMsg',414,1),(7027,57003,57014,'OP_CharTransferStartRequestMsg',415,1),(7028,57003,57014,'OP_CharTransferStartReplyMsg',416,1),(7029,57003,57014,'OP_CharTransferRequestMsg',417,1),(7030,57003,57014,'OP_CharTransferReplyMsg',418,1),(7031,57003,57014,'OP_CharTransferRollbackRequestMsg',419,1),(7032,57003,57014,'OP_CharTransferCommitRequestMsg',420,1),(7033,57003,57014,'OP_CharTransferRollbackReplyMsg',421,1),(7034,57003,57014,'OP_CharTransferCommitReplyMsg',422,1),(7035,57003,57014,'OP_GetCharacterSerializedRequestM',423,1),(7036,57003,57014,'OP_GetCharacterSerializedReplyMsg',424,1),(7037,57003,57014,'OP_CreateCharFromCBBRequestMsg',425,1),(7038,57003,57014,'OP_CreateCharFromCBBReplyMsg',426,1),(7039,57003,57014,'OP_HousingDataChangedMsg',427,1),(7040,57003,57014,'OP_HousingRestoreMsg',428,1),(7041,57003,57014,'OP_AuctionItem',429,1),(7042,57003,57014,'OP_AuctionItemReply',430,1),(7043,57003,57014,'OP_AuctionCoin',431,1),(7044,57003,57014,'OP_AuctionCoinReply',432,1),(7045,57003,57014,'OP_AuctionCharacter',433,1),(7046,57003,57014,'OP_AuctionCharacterReply',434,1),(7047,57003,57014,'OP_AuctionCommitMsg',435,1),(7048,57003,57014,'OP_AuctionAbortMsg',436,1),(7049,57003,57014,'OP_CharTransferValidateRequestMsg',437,1),(7050,57003,57014,'OP_CharTransferValidateReplyMsg',438,1),(7051,57003,57014,'OP_RaceRestrictionMsg',439,1),(7052,57003,57014,'OP_SetInstanceDisplayNameMsg',440,1),(7053,57003,57014,'OP_GetAuctionAssetIDMsg',441,1),(7054,57003,57014,'OP_GetAuctionAssetIDReplyMsg',442,1),(7055,57003,57014,'OP_ResendWorldChannelsMsg',443,1),(7056,57003,57014,'OP_DisplayExchangeScreenMsg',444,1),(7057,57003,57014,'OP_ArenaGameTypesMsg',445,1),(7058,57003,57014,'OP_AuditAuctionEventMsg',446,1),(7059,57003,57014,'OP_InviteRequestMsg',447,1),(7060,57003,57014,'OP_InviteResponseMsg',448,1),(7061,57003,57014,'OP_InviteTargetResponseMsg',449,1),(7062,57003,57014,'OP_InspectPlayerRequestMsg',450,1),(7063,57003,57014,'OP_DispatchMsg',451,1),(7064,57003,57014,'OP_DisplayEventMsg',452,1),(7065,57003,57014,'OP_PrePossessionMsg',453,1),(7066,57003,57014,'OP_PostPossessionMsg',454,1),(7067,57003,57014,'OP_ArenaCreate',456,1),(7068,57003,57014,'OP_ArenaList',457,1),(7069,57003,57014,'OP_ArenaWindow',465,1),(7070,57003,57014,'OP_HouseItemsList',483,1),(7071,57003,57014,'OP_CurrentPet',485,1),(7072,57003,57014,'OP_AdventureList',488,1),(7073,57003,57014,'OP_CancelSpellCast',489,1),(7074,57003,57014,'OP_UpdateTitleCmd',494,1),(7075,57003,57014,'OP_AttackAllowed',500,1),(7076,57003,57014,'OP_AttackNotAllowed',501,1),(7077,57003,57014,'OP_BagOptions',502,1),(7078,57003,57014,'OP_LFGGroupSearch',504,1),(7079,57003,57014,'OP_CharacterHousingList',507,1),(7080,57003,57014,'OP_DressingRoom',510,1),(7081,57003,57014,'OP_PlayLon',511,1),(7082,57003,57014,'OP_SkillInfoRequest',514,1),(7083,57003,57014,'OP_SkillInfoResponse',515,1),(7084,57003,57014,'OP_LFGUpdateMsg',518,1),(7085,57003,57014,'OP_BadLanguageFilter',519,1),(7086,57003,57014,'OP_VoiceChatChannel',520,1),(7087,57003,57014,'OP_MapRequest',521,1),(7088,57003,57014,'OP_MarketFundsUpdate',526,1),(7089,57003,57014,'OP_UIEvent',527,1),(7090,57003,57014,'OP_MarketAddFundsRequest',528,1),(7091,57003,57014,'OP_MarketAddFundsReply',529,1),(7092,57003,57014,'OP_MarketPurchase',531,1),(7093,57003,57014,'OP_MarketPlacePrices',532,1),(7094,57003,57014,'OP_MarketPlaceItems',535,1),(7095,57003,57014,'OP_RecipeBook',536,1),(7096,57003,57014,'OP_CreateCharacterDungeon',545,1),(7097,57003,57014,'OP_DungeonMakerEnter',546,1),(7098,57003,57014,'OP_DungeonMakerItemRequest',548,1),(7099,57003,57014,'OP_CharacterCreatedDungeons',549,1),(7100,57003,57014,'OP_DungeonMakerToolboxList',550,1),(7101,57003,57014,'OP_DungeonMakerUnknown',551,1),(7102,57003,57014,'OP_DungeonMakerUnknown1',552,1),(7103,57003,57014,'OP_PlayerPollPopup',554,1),(7104,57003,57014,'OP_PlayerPollAnswer',555,1),(7105,57003,57014,'OP_MentorPopup',556,1),(7106,57003,57014,'OP_LoadWelcomeWindow',558,1),(7107,57003,57014,'OP_OpenCharCust',559,1),(7108,57003,57014,'OP_SubmitCharCust',560,1),(7109,57003,57014,'OP_QueAllBgSolo',562,1),(7110,57003,57014,'OP_ZoneBgInstanceList',564,1),(7111,57003,57014,'OP_WorldTravelAvail',568,1),(7112,57003,57014,'OP_PaperdollImage',572,1),(7113,57003,57014,'OP_LoadCalendarEvents',573,1),(7114,57003,57014,'OP_VideoUploaded',574,1),(7115,57003,57014,'OP_SavageBarInitMsg',575,1),(7116,57003,57014,'OP_PetOptionsResponse',576,1),(7117,57003,57014,'OP_DungeonMakerItemResponse',577,1),(7118,57003,57014,'OP_CharacterMounts',579,1),(7119,57003,57014,'OP_EqBetaCopyRequest',589,1),(7120,57003,57014,'OP_EqHearChatCmd',590,1),(7121,57003,57014,'OP_EqDisplayTextCmd',591,1),(7122,57003,57014,'OP_EqCreateGhostCmd',592,1),(7123,57003,57014,'OP_EqCreateWidgetCmd',593,1),(7124,57003,57014,'OP_EqCreateSignWidgetCmd',594,1),(7125,57003,57014,'OP_EqDestroyGhostCmd',595,1),(7126,57003,57014,'OP_EqUpdateGhostCmd',596,1),(7127,57003,57014,'OP_EqSetControlGhostCmd',597,1),(7128,57003,57014,'OP_EqSetPOVGhostCmd',598,1),(7129,57003,57014,'OP_EqHearCombatCmd',599,1),(7130,57003,57014,'OP_EqHearSpellCastCmd',600,1),(7131,57003,57014,'OP_EQHearProcCmd',601,1),(7132,57003,57014,'OP_EQHearResEffectCmd',602,1),(7133,57003,57014,'OP_EqHearSpellInterruptCmd',603,1),(7134,57003,57014,'OP_EqHearSpellFizzleCmd',604,1),(7135,57003,57014,'OP_EqHearConsiderCmd',605,1),(7136,57003,57014,'OP_EqUpdateSubClassesCmd',606,1),(7137,57003,57014,'OP_EqCreateListBoxCmd',607,1),(7138,57003,57014,'OP_EqSetDebugPathPointsCmd',608,1),(7139,57003,57014,'OP_EqCannedEmoteCmd',610,1),(7140,57003,57014,'OP_EqStateCmd',611,1),(7141,57003,57014,'OP_EqPlaySoundCmd',612,1),(7142,57003,57014,'OP_EqPlaySound3DCmd',613,1),(7143,57003,57014,'OP_EqPlayVoiceCmd',614,1),(7144,57003,57014,'OP_EqHearDrowningCmd',615,1),(7145,57003,57014,'OP_EqHearDeathCmd',616,1),(7146,57003,57014,'OP_EqGroupMemberRemovedCmd',617,1),(7147,57003,57014,'OP_EqHearChainEffectCmd',618,1),(7148,57003,57014,'OP_EqReceiveOfferCmd',619,1),(7149,57003,57014,'OP_EqInspectPCResultsCmd',620,1),(7150,57003,57014,'OP_EqDrawablePathGraphCmd',621,1),(7151,57003,57014,'OP_EqDialogOpenCmd',622,1),(7152,57003,57014,'OP_EqDialogCloseCmd',623,1),(7153,57003,57014,'OP_EqFactionUpdateCmd',624,1),(7154,57003,57014,'OP_EqCollectionUpdateCmd',625,1),(7155,57003,57014,'OP_EqCollectionFilterCmd',626,1),(7156,57003,57014,'OP_EqCollectionItemCmd',627,1),(7157,57003,57014,'OP_EqQuestJournalUpdateCmd',628,1),(7158,57003,57014,'OP_EqMentoring',629,1),(7159,57003,57014,'OP_EqQuestJournalReplyCmd',630,1),(7160,57003,57014,'OP_EqQuestGroupCmd',631,1),(7161,57003,57014,'OP_EqUpdateMerchantCmd',632,1),(7162,57003,57014,'OP_EqUpdateStoreCmd',633,1),(7163,57003,57014,'OP_EqUpdatePlayerTradeCmd',634,1),(7164,57003,57014,'OP_EqHelpPathCmd',635,1),(7165,57003,57014,'OP_EqHelpPathClearCmd',636,1),(7166,57003,57014,'OP_EqUpdateBankCmd',637,1),(7167,57003,57014,'OP_EqExamineInfoCmd',638,1),(7168,57003,57014,'OP_EqCloseWindowCmd',639,1),(7169,57003,57014,'OP_EqUpdateLootCmd',640,1),(7170,57003,57014,'OP_EqJunctionListCmd',641,1),(7171,57003,57014,'OP_EqShowDeathWindowCmd',642,1),(7172,57003,57014,'OP_EqDisplaySpellFailCmd',643,1),(7173,57003,57014,'OP_EqSpellCastStartCmd',644,1),(7174,57003,57014,'OP_EqSpellCastEndCmd',645,1),(7175,57003,57014,'OP_EqResurrectedCmd',646,1),(7176,57003,57014,'OP_EqChoiceWinCmd',647,1),(7177,57003,57014,'OP_EqSetDefaultVerbCmd',648,1),(7178,57003,57014,'OP_EqInstructionWindowCmd',649,1),(7179,57003,57014,'OP_EqInstructionWindowCloseCmd',650,1),(7180,57003,57014,'OP_EqInstructionWindowGoalCmd',651,1),(7181,57003,57014,'OP_EqInstructionWindowTaskCmd',652,1),(7182,57003,57014,'OP_EqEnableGameEventCmd',653,1),(7183,57003,57014,'OP_EqShowWindowCmd',654,1),(7184,57003,57014,'OP_EqEnableWindowCmd',655,1),(7185,57003,57014,'OP_EqFlashWindowCmd',656,1),(7186,57003,57014,'OP_EqHearPlayFlavorCmd',658,1),(7187,57003,57014,'OP_EqUpdateSignWidgetCmd',659,1),(7188,57003,57014,'OP_EqDebugPVDCmd',660,1),(7189,57003,57014,'OP_EqShowBookCmd',661,1),(7190,57003,57014,'OP_EqQuestionnaireCmd',662,1),(7191,57003,57014,'OP_EqGetProbsCmd',664,1),(7192,57003,57014,'OP_EqHearHealCmd',665,1),(7193,57003,57014,'OP_EqChatChannelUpdateCmd',666,1),(7194,57003,57014,'OP_EqWhoChannelQueryReplyCmd',667,1),(7195,57003,57014,'OP_EqAvailWorldChannelsCmd',668,1),(7196,57003,57014,'OP_EqUpdateTargetCmd',669,1),(7197,57003,57014,'OP_BrokerSellList',670,1),(7198,57003,57014,'OP_EqConsignmentItemsCmd',671,1),(7199,57003,57014,'OP_EqStartBrokerCmd',673,1),(7200,57003,57014,'OP_EqMapExplorationCmd',674,1),(7201,57003,57014,'OP_EqStoreLogCmd',675,1),(7202,57003,57014,'OP_EqSpellMoveToRangeAndRetryCmd',676,1),(7203,57003,57014,'OP_EqUpdatePlayerMailCmd',677,1),(7204,57003,57014,'OP_GuildStatusUpdate',680,1),(7205,57003,57014,'OP_EqArenaResultsCmd',681,1),(7206,57003,57014,'OP_EqGuildBankEventActionCmd',682,1),(7207,57003,57014,'OP_EqGuildBankExamineInfoCmd',683,1),(7208,57003,57014,'OP_EqHearSpellNoLandCmd',684,1),(7209,57003,57014,'OP_Lottery',685,1),(7210,57003,57014,'OP_GuildRecruitingMemberInfo',686,1),(7211,57003,57014,'OP_GuildRecruiting',687,1),(7212,57003,57014,'OP_GuildRecruitingDetails',688,1),(7213,57003,57014,'OP_GuildRecruitingImage',689,1),(7214,57003,57014,'OP_TradeskillList',707,1),(7215,57003,57014,'OP_CharRenamed',691,1),(7216,57003,57014,'OP_UseAdornment',701,1),(7217,57003,57014,'OP_ExpPurchWindow',707,1),(7218,57003,57014,'OP_PointOfInterest',711,1),(7219,57003,57014,'OP_PointOfInterest2',712,1),(7220,57003,57014,'OP_TraitsList',713,1),(7221,57003,57014,'OP_CustomizeHouseDisplay',716,1),(7222,57003,57014,'OP_VoiceChatServer',717,1),(7223,57003,57014,'OP_SupplyDepot',721,1),(7224,57003,57014,'OP_EQHearThreatCmd',722,1),(7225,57003,57014,'OP_RecipeList',723,1),(7226,57003,57014,'OP_Research',724,1),(7227,57003,57014,'OP_CharacterCurrency',725,1),(7228,57003,57014,'OP_CharacterAchievements',726,1),(7229,57003,57014,'OP_AchievementUpdateMsg',727,1),(7230,57003,57014,'OP_EQHearDispellCmd',728,1),(7231,57003,57014,'OP_JournalQuestStoryline',729,1),(7232,57003,57014,'OP_DungeonPlayAsAvatarList',730,1),(7233,57003,57014,'OP_DungeonPlayAsAvatarSelected',731,1),(7234,57003,57014,'OP_MercHireWindow',732,1),(7235,57003,57014,'OP_MercUnknown',733,1),(7236,57003,57014,'OP_Unknown',749,1),(7709,57003,57014,'OP_ClearForLandingMsg',491,1),(7710,57003,57014,'OP_Launchpad',570,1),(7711,57003,57014,'OP_ReceipelistUnknown',588,1),(7712,57032,57047,'OP_LoginRequestMsg',0,1),(7713,57032,57047,'OP_LoginByNumRequestMsg',1,1),(7714,57032,57047,'OP_WSLoginRequestMsg',2,1),(7715,57032,57047,'OP_ESLoginRequestMsg',3,1),(7716,57032,57047,'OP_LoginReplyMsg',4,1),(7717,57032,57047,'OP_WSStatusReplyMsg',5,1),(7718,57032,57047,'OP_WorldStatusChangeMsg',6,1),(7719,57032,57047,'OP_AllWSDescRequestMsg',7,1),(7720,57032,57047,'OP_WorldListMsg',8,1),(7721,57032,57047,'OP_AllCharactersDescRequestMsg',9,1),(7722,57032,57047,'OP_AllCharactersDescReplyMsg',10,1),(7723,57032,57047,'OP_CreateCharacterRequestMsg',11,1),(7724,57032,57047,'OP_CreateCharacterReplyMsg',12,1),(7725,57032,57047,'OP_WSCreateCharacterRequestMsg',13,1),(7726,57032,57047,'OP_WSCreateCharacterReplyMsg',14,1),(7727,57032,57047,'OP_ReskinCharacterRequestMsg',15,1),(7728,57032,57047,'OP_DeleteCharacterRequestMsg',16,1),(7729,57032,57047,'OP_DeleteCharacterReplyMsg',17,1),(7730,57032,57047,'OP_PlayCharacterRequestMsg',18,1),(7731,57032,57047,'OP_PlayCharacterReplyMsg',19,1),(7732,57032,57047,'OP_ExpectClientAsCharacterReplyMs',22,1),(7733,57032,57047,'OP_ServerPlayCharacterRequestMsg',23,1),(7734,57032,57047,'OP_ServerPlayCharacterReplyMsg',24,1),(7735,57032,57047,'OP_ESInitMsg',25,1),(7736,57032,57047,'OP_ESReadyForClientsMsg',26,1),(7737,57032,57047,'OP_CreateZoneInstanceMsg',29,1),(7738,57032,57047,'OP_ZoneInstanceCreateReplyMsg',30,1),(7739,57032,57047,'OP_ZoneInstanceDestroyedMsg',31,1),(7740,57032,57047,'OP_ExpectClientAsCharacterRequest',32,1),(7741,57032,57047,'OP_ZoneInfoMsg',33,1),(7742,57032,57047,'OP_DoneLoadingZoneResourcesMsg',34,1),(7743,57032,57047,'OP_DoneSendingInitialEntitiesMsg',35,1),(7744,57032,57047,'OP_DoneLoadingEntityResourcesMsg',36,1),(7745,57032,57047,'OP_PredictionUpdateMsg',37,1),(7746,57032,57047,'OP_UpdatePositionMsg',39,1),(7747,57032,57047,'OP_SetRemoteCmdsMsg',41,1),(7748,57032,57047,'OP_RemoteCmdMsg',42,1),(7749,57032,57047,'OP_GameWorldTimeMsg',43,1),(7750,57032,57047,'OP_MOTDMsg',44,1),(7751,57032,57047,'OP_ZoneMOTDMsg',45,1),(7752,57032,57047,'OP_AvatarCreatedMsg',46,1),(7753,57032,57047,'OP_AvatarDestroyedMsg',47,1),(7754,57032,57047,'OP_RequestCampMsg',50,1),(7755,57032,57047,'OP_CampStartedMsg',51,1),(7756,57032,57047,'OP_CampAbortedMsg',52,1),(7757,57032,57047,'OP_WhoQueryRequestMsg',53,1),(7758,57032,57047,'OP_WhoQueryReplyMsg',54,1),(7759,57032,57047,'OP_MonitorReplyMsg',55,1),(7760,57032,57047,'OP_MonitorCharacterListMsg',56,1),(7761,57032,57047,'OP_MonitorCharacterListRequestMsg',57,1),(7762,57032,57047,'OP_ClientCmdMsg',58,1),(7763,57032,57047,'OP_DispatchESMsg',59,1),(7764,57032,57047,'OP_DispatchClientCmdMsg',60,1),(7765,57032,57047,'OP_UpdateTargetMsg',61,1),(7766,57032,57047,'OP_UpdateTargetLocMsg',62,1),(7767,57032,57047,'OP_UpdateCharacterSheetMsg',63,1),(7768,57032,57047,'OP_CharacterPet',64,1),(7769,57032,57047,'OP_CharacterMerc',65,1),(7770,57032,57047,'OP_UpdateSpellBookMsg',66,1),(7771,57032,57047,'OP_UpdateInventoryMsg',68,1),(7772,57032,57047,'OP_AfterInvSpellUpdate',69,1),(7773,57032,57047,'OP_UpdateRecipeBookMsg',70,1),(7774,57032,57047,'OP_RequestRecipeDetailsMsg',71,1),(7775,57032,57047,'OP_RecipeDetailsMsg',72,1),(7776,57032,57047,'OP_UpdateSkillBookMsg',73,1),(7777,57032,57047,'OP_UpdateSkillsMsg',74,1),(7778,57032,57047,'OP_UpdateOpportunityMsg',75,1),(7779,57032,57047,'OP_ChangeZoneMsg',77,1),(7780,57032,57047,'OP_ClientTeleportRequestMsg',78,1),(7781,57032,57047,'OP_TeleportWithinZoneMsg',79,1),(7782,57032,57047,'OP_TeleportWithinZoneNoReloadMsg',80,1),(7783,57032,57047,'OP_MigrateClientToZoneRequestMsg',81,1),(7784,57032,57047,'OP_MigrateClientToZoneReplyMsg',82,1),(7785,57032,57047,'OP_ReadyToZoneMsg',84,1),(7786,57032,57047,'OP_RemoveClientFromGroupMsg',85,1),(7787,57032,57047,'OP_RemoveGroupFromGroupMsg',86,1),(7788,57032,57047,'OP_MakeGroupLeaderMsg',87,1),(7789,57032,57047,'OP_GroupCreatedMsg',88,1),(7790,57032,57047,'OP_GroupDestroyedMsg',89,1),(7791,57032,57047,'OP_GroupMemberAddedMsg',90,1),(7792,57032,57047,'OP_GroupMemberRemovedMsg',91,1),(7793,57032,57047,'OP_GroupRemovedFromGroupMsg',92,1),(7794,57032,57047,'OP_GroupLeaderChangedMsg',93,1),(7795,57032,57047,'OP_GroupResendOOZDataMsg',94,1),(7796,57032,57047,'OP_GroupSettingsChangedMsg',95,1),(7797,57032,57047,'OP_OutOfZoneMemberDataMsg',96,1),(7798,57032,57047,'OP_SendLatestRequestMsg',97,1),(7799,57032,57047,'OP_ClearDataMsg',98,1),(7800,57032,57047,'OP_SetSocialMsg',99,1),(7801,57032,57047,'OP_ESStatusMsg',100,1),(7802,57032,57047,'OP_ESZoneInstanceStatusMsg',101,1),(7803,57032,57047,'OP_ZonesStatusRequestMsg',102,1),(7804,57032,57047,'OP_ZonesStatusMsg',103,1),(7805,57032,57047,'OP_ESWeatherRequestMsg',104,1),(7806,57032,57047,'OP_ESWeatherRequestEndMsg',105,1),(7807,57032,57047,'OP_DialogSelectMsg',109,1),(7808,57032,57047,'OP_DialogCloseMsg',110,1),(7809,57032,57047,'OP_RemoveSpellEffectMsg',111,1),(7810,57032,57047,'OP_RemoveConcentrationMsg',112,1),(7811,57032,57047,'OP_QuestJournalOpenMsg',113,1),(7812,57032,57047,'OP_QuestJournalInspectMsg',114,1),(7813,57032,57047,'OP_QuestJournalSetVisibleMsg',115,1),(7814,57032,57047,'OP_QuestJournalWaypointMsg',116,1),(7815,57032,57047,'OP_CreateGuildRequestMsg',119,1),(7816,57032,57047,'OP_CreateGuildReplyMsg',120,1),(7817,57032,57047,'OP_GuildsayMsg',121,1),(7818,57032,57047,'OP_FellowshipExpMsg',122,1),(7819,57032,57047,'OP_DeleteGuildMsg',123,1),(7820,57032,57047,'OP_GuildUpdateMsg',124,1),(7821,57032,57047,'OP_ConsignmentCloseStoreMsg',125,1),(7822,57032,57047,'OP_ConsignItemRequestMsg',126,1),(7823,57032,57047,'OP_ConsignItemResponseMsg',127,1),(7824,57032,57047,'OP_PurchaseConsignmentRequestMsg',128,1),(7825,57032,57047,'OP_LikeOption',136,1),(7826,57032,57047,'OP_PublishHouse',138,1),(7827,57032,57047,'OP_PlayerMadeInstancesScreen',139,1),(7828,57032,57047,'OP_PlayerMadeInstances',140,1),(7829,57032,57047,'OP_HouseDeletedRemotelyMsg',142,1),(7830,57032,57047,'OP_UpdateHouseDataMsg',143,1),(7831,57032,57047,'OP_UpdateHouseAccessDataMsg',144,1),(7832,57032,57047,'OP_PlayerHouseBaseScreenMsg',145,1),(7833,57032,57047,'OP_PlayerHousePurchaseScreenMsg',146,1),(7834,57032,57047,'OP_PlayerHouseAccessUpdateMsg',147,1),(7835,57032,57047,'OP_PlayerHouseDisplayStatusMsg',148,1),(7836,57032,57047,'OP_PlayerHouseCloseUIMsg',149,1),(7837,57032,57047,'OP_BuyPlayerHouseMsg',150,1),(7838,57032,57047,'OP_BuyPlayerHouseTintMsg',151,1),(7839,57032,57047,'OP_CollectAllHouseItemsMsg',152,1),(7840,57032,57047,'OP_RelinquishHouseMsg',153,1),(7841,57032,57047,'OP_EnterHouseMsg',154,1),(7842,57032,57047,'OP_ExitHouseMsg',155,1),(7843,57032,57047,'OP_HouseDefaultAccessSetMsg',156,1),(7844,57032,57047,'OP_HouseAccessSetMsg',157,1),(7845,57032,57047,'OP_HouseAccessRemoveMsg',158,1),(7846,57032,57047,'OP_PayHouseUpkeepMsg',159,1),(7847,57032,57047,'OP_MoveableObjectPlacementCriteri',160,1),(7848,57032,57047,'OP_EnterMoveObjectModeMsg',161,1),(7849,57032,57047,'OP_PositionMoveableObject',162,1),(7850,57032,57047,'OP_CancelMoveObjectModeMsg',163,1),(7851,57032,57047,'OP_ShaderCustomizationMsg',164,1),(7852,57032,57047,'OP_ReplaceableSubMeshesMsg',165,1),(7853,57032,57047,'OP_HouseCustomizationScreenMsg',166,1),(7854,57032,57047,'OP_CustomizationPurchaseRequestMs',167,1),(7855,57032,57047,'OP_CustomizationSetRequestMsg',168,1),(7856,57032,57047,'OP_CustomizationReplyMsg',169,1),(7857,57032,57047,'OP_TintWidgetsMsg',170,1),(7858,57032,57047,'OP_ExamineConsignmentRequestMsg',171,1),(7859,57032,57047,'OP_ExamineConsignmentResponseMsg',172,1),(7860,57032,57047,'OP_UISettingsResponseMsg',173,1),(7861,57032,57047,'OP_UIResetMsg',174,1),(7862,57032,57047,'OP_KeymapLoadMsg',175,1),(7863,57032,57047,'OP_KeymapNoneMsg',176,1),(7864,57032,57047,'OP_KeymapDataMsg',177,1),(7865,57032,57047,'OP_KeymapSaveMsg',178,1),(7866,57032,57047,'OP_DispatchSpellCmdMsg',179,1),(7867,57032,57047,'OP_EntityVerbsRequestMsg',180,1),(7868,57032,57047,'OP_EntityVerbsReplyMsg',181,1),(7869,57032,57047,'OP_EntityVerbsVerbMsg',182,1),(7870,57032,57047,'OP_ChatRelationshipUpdateMsg',184,1),(7871,57032,57047,'OP_LootItemsRequestMsg',185,1),(7872,57032,57047,'OP_StoppedLootingMsg',186,1),(7873,57032,57047,'OP_SitMsg',187,1),(7874,57032,57047,'OP_StandMsg',188,1),(7875,57032,57047,'OP_SatMsg',189,1),(7876,57032,57047,'OP_StoodMsg',190,1),(7877,57032,57047,'OP_ClearForTakeOffMsg',191,1),(7878,57032,57047,'OP_ReadyForTakeOffMsg',192,1),(7879,57032,57047,'OP_ShowIllusionsMsg',193,1),(7880,57032,57047,'OP_HideIllusionsMsg',194,1),(7881,57032,57047,'OP_ExamineItemRequestMsg',195,1),(7882,57032,57047,'OP_ReadBookPageMsg',196,1),(7883,57032,57047,'OP_DefaultGroupOptionsRequestMsg',197,1),(7884,57032,57047,'OP_DefaultGroupOptionsMsg',198,1),(7885,57032,57047,'OP_GroupOptionsMsg',199,1),(7886,57032,57047,'OP_DisplayGroupOptionsScreenMsg',200,1),(7887,57032,57047,'OP_PetOptions',201,1),(7888,57032,57047,'OP_DisplayInnVisitScreenMsg',202,1),(7889,57032,57047,'OP_DumpSchedulerMsg',203,1),(7890,57032,57047,'OP_LSCheckAcctLockMsg',204,1),(7891,57032,57047,'OP_WSAcctLockStatusMsg',205,1),(7892,57032,57047,'OP_RequestHelpRepathMsg',206,1),(7893,57032,57047,'OP_RequestTargetLocMsg',207,1),(7894,57032,57047,'OP_UpdateMotdMsg',208,1),(7895,57032,57047,'OP_DestUpdateReq',210,1),(7896,57032,57047,'OP_PerformPlayerKnockbackMsg',213,1),(7897,57032,57047,'OP_PerformCameraShakeMsg',214,1),(7898,57032,57047,'OP_PopulateSkillMapsMsg',215,1),(7899,57032,57047,'OP_CancelledFeignMsg',216,1),(7900,57032,57047,'OP_SysClient',218,1),(7901,57032,57047,'OP_ShowCreateFromRecipeUIMsg',219,1),(7902,57032,57047,'OP_CancelCreateFromRecipeMsg',220,1),(7903,57032,57047,'OP_BeginItemCreationMsg',221,1),(7904,57032,57047,'OP_StopItemCreationMsg',222,1),(7905,57032,57047,'OP_ShowItemCreationProcessUIMsg',223,1),(7906,57032,57047,'OP_UpdateItemCreationProcessUIMsg',224,1),(7907,57032,57047,'OP_DisplayTSEventReactionMsg',225,1),(7908,57032,57047,'OP_ShowRecipeBookMsg',226,1),(7909,57032,57047,'OP_KnowledgebaseRequestMsg',227,1),(7910,57032,57047,'OP_KnowledgebaseResponseMsg',228,1),(7911,57032,57047,'OP_CSTicketHeaderRequestMsg',229,1),(7912,57032,57047,'OP_CSTicketInfoMsg',230,1),(7913,57032,57047,'OP_CSTicketCommentRequestMsg',231,1),(7914,57032,57047,'OP_CSTicketCommentResponseMsg',232,1),(7915,57032,57047,'OP_CSTicketCreateMsg',233,1),(7916,57032,57047,'OP_CSTicketAddCommentMsg',234,1),(7917,57032,57047,'OP_CSTicketDeleteMsg',235,1),(7918,57032,57047,'OP_CSTicketChangeNotificationMsg',236,1),(7919,57032,57047,'OP_WorldDataUpdateMsg',237,1),(7920,57032,57047,'OP_KnownLanguagesMsg',238,1),(7921,57032,57047,'OP_LsRequestClientCrashLogMsg',239,1),(7922,57032,57047,'OP_LsClientBaselogReplyMsg',240,1),(7923,57032,57047,'OP_LsClientCrashlogReplyMsg',241,1),(7924,57032,57047,'OP_LsClientAlertlogReplyMsg',242,1),(7925,57032,57047,'OP_LsClientVerifylogReplyMsg',243,1),(7926,57032,57047,'OP_ClientTeleportToLocationMsg',244,1),(7927,57032,57047,'OP_UpdateClientPredFlagsMsg',245,1),(7928,57032,57047,'OP_ChangeServerControlFlagMsg',246,1),(7929,57032,57047,'OP_CSToolsRequestMsg',247,1),(7930,57032,57047,'OP_CSToolsResponseMsg',248,1),(7931,57032,57047,'OP_AddSocialStructureStandingMsg',249,1),(7932,57032,57047,'OP_CreateBoatTransportsMsg',250,1),(7933,57032,57047,'OP_PositionBoatTransportMsg',251,1),(7934,57032,57047,'OP_MigrateBoatTransportMsg',252,1),(7935,57032,57047,'OP_MigrateBoatTransportReplyMsg',253,1),(7936,57032,57047,'OP_DisplayDebugNLLPointsMsg',254,1),(7937,57032,57047,'OP_ExamineInfoRequestMsg',255,1),(7938,57032,57047,'OP_QuickbarInitMsg',256,1),(7939,57032,57047,'OP_QuickbarUpdateMsg',257,1),(7940,57032,57047,'OP_MacroInitMsg',258,1),(7941,57032,57047,'OP_MacroUpdateMsg',259,1),(7942,57032,57047,'OP_QuestionnaireMsg',260,1),(7943,57032,57047,'OP_LevelChangedMsg',261,1),(7944,57032,57047,'OP_SpellGainedMsg',262,1),(7945,57032,57047,'OP_EncounterBrokenMsg',263,1),(7946,57032,57047,'OP_OnscreenMsgMsg',264,1),(7947,57032,57047,'OP_DisplayWarningMsg',265,1),(7948,57032,57047,'OP_ModifyGuildMsg',266,1),(7949,57032,57047,'OP_GuildEventMsg',267,1),(7950,57032,57047,'OP_GuildEventAddMsg',268,1),(7951,57032,57047,'OP_GuildEventActionMsg',269,1),(7952,57032,57047,'OP_GuildEventListMsg',270,1),(7953,57032,57047,'OP_RequestGuildEventDetailsMsg',271,1),(7954,57032,57047,'OP_GuildEventDetailsMsg',272,1),(7955,57032,57047,'OP_RequestGuildInfoMsg',273,1),(7956,57032,57047,'OP_GuildBankActionMsg',274,1),(7957,57032,57047,'OP_GuildBankActionResponseMsg',275,1),(7958,57032,57047,'OP_GuildBankItemDetailsRequestMsg',276,1),(7959,57032,57047,'OP_GuildBankItemDetailsResponseMs',277,1),(7960,57032,57047,'OP_GuildBankUpdateMsg',278,1),(7961,57032,57047,'OP_GuildBankEventListMsg',279,1),(7962,57032,57047,'OP_RequestGuildBankEventDetailsMs',280,1),(7963,57032,57047,'OP_RewardPackMsg',281,1),(7964,57032,57047,'OP_RenameGuildMsg',282,1),(7965,57032,57047,'OP_ZoneToFriendRequestMsg',283,1),(7966,57032,57047,'OP_ZoneToFriendReplyMsg',284,1),(7967,57032,57047,'OP_ChatCreateChannelMsg',285,1),(7968,57032,57047,'OP_ChatJoinChannelMsg',286,1),(7969,57032,57047,'OP_ChatWhoChannelMsg',287,1),(7970,57032,57047,'OP_ChatLeaveChannelMsg',288,1),(7971,57032,57047,'OP_ChatTellChannelMsg',289,1),(7972,57032,57047,'OP_ChatTellUserMsg',290,1),(7973,57032,57047,'OP_ChatToggleFriendMsg',291,1),(7974,57032,57047,'OP_BrokerAddBag',292,1),(7975,57032,57047,'OP_BrokerRemoveBag',293,1),(7976,57032,57047,'OP_ChatToggleIgnoreMsg',294,1),(7977,57032,57047,'OP_ChatSendFriendsMsg',295,1),(7978,57032,57047,'OP_ChatSendIgnoresMsg',296,1),(7979,57032,57047,'OP_QuestReward',320,1),(7980,57032,57047,'OP_ChatFiltersMsg',335,1),(7981,57032,57047,'OP_MailGetMessageMsg',338,1),(7982,57032,57047,'OP_MailSendMessageMsg',339,1),(7983,57032,57047,'OP_MailDeleteMessageMsg',340,1),(7984,57032,57047,'OP_MailGetHeadersReplyMsg',341,1),(7985,57032,57047,'OP_MailGetMessageReplyMsg',342,1),(7986,57032,57047,'OP_MailSendMessageReplyMsg',343,1),(7987,57032,57047,'OP_MailCommitSendMessageMsg',344,1),(7988,57032,57047,'OP_MailSendSystemMessageMsg',345,1),(7989,57032,57047,'OP_MailRemoveAttachFromMailMsg',346,1),(7990,57032,57047,'OP_WaypointRequestMsg',348,1),(7991,57032,57047,'OP_WaypointReplyMsg',349,1),(7992,57032,57047,'OP_WaypointSelectMsg',350,1),(7993,57032,57047,'OP_WaypointUpdateMsg',351,1),(7994,57032,57047,'OP_CharNameChangedMsg',352,1),(7995,57032,57047,'OP_ShowZoneTeleporterDestinations',353,1),(7996,57032,57047,'OP_SelectZoneTeleporterDestinatio',354,1),(7997,57032,57047,'OP_ReloadLocalizedTxtMsg',355,1),(7998,57032,57047,'OP_RequestGuildMembershipMsg',356,1),(7999,57032,57047,'OP_GuildMembershipResponseMsg',357,1),(8000,57032,57047,'OP_LeaveGuildNotifyMsg',358,1),(8001,57032,57047,'OP_JoinGuildNotifyMsg',359,1),(8002,57032,57047,'OP_AvatarUpdateMsg',360,1),(8003,57032,57047,'OP_BioUpdateMsg',362,1),(8004,57032,57047,'OP_InspectPlayerMsg',363,1),(8005,57032,57047,'OP_WSServerLockMsg',364,1),(8006,57032,57047,'OP_LSServerLockMsg',365,1),(8007,57032,57047,'OP_WSServerHideMsg',366,1),(8008,57032,57047,'OP_CsCategoryRequestMsg',367,1),(8009,57032,57047,'OP_CsCategoryResponseMsg',368,1),(8010,57032,57047,'OP_KnowledgeWindowSlotMappingMsg',369,1),(8011,57032,57047,'OP_AFKUpdateMsg',370,1),(8012,57032,57047,'OP_AnonUpdateMsg',371,1),(8013,57032,57047,'OP_UpdateActivePublicZonesMsg',372,1),(8014,57032,57047,'OP_UnknownNpcMsg',373,1),(8015,57032,57047,'OP_PromoFlagsDetailsMsg',374,1),(8016,57032,57047,'OP_ConsignViewCreateMsg',375,1),(8017,57032,57047,'OP_ConsignViewGetPageMsg',376,1),(8018,57032,57047,'OP_ConsignViewReleaseMsg',377,1),(8019,57032,57047,'OP_ConsignRemoveItemsMsg',378,1),(8020,57032,57047,'OP_UpdateDebugRadiiMsg',379,1),(8021,57032,57047,'OP_ReportMsg',380,1),(8022,57032,57047,'OP_UpdateRaidMsg',381,1),(8023,57032,57047,'OP_ConsignViewSortMsg',383,1),(8024,57032,57047,'OP_TitleUpdateMsg',384,1),(8025,57032,57047,'OP_ClientFellMsg',385,1),(8026,57032,57047,'OP_ClientInDeathRegionMsg',386,1),(8027,57032,57047,'OP_CampClientMsg',387,1),(8028,57032,57047,'OP_CSToolAccessResponseMsg',388,1),(8029,57032,57047,'OP_UpdateGroupMemberDataMsg',388,1),(8030,57032,57047,'OP_TrackingUpdateMsg',389,1),(8031,57032,57047,'OP_BeginTrackingMsg',390,1),(8032,57032,57047,'OP_StopTrackingMsg',391,1),(8033,57032,57047,'OP_GetAvatarAccessRequestForCSToo',393,1),(8034,57032,57047,'OP_AdvancementRequestMsg',394,1),(8035,57032,57047,'OP_MapFogDataInitMsg',395,1),(8036,57032,57047,'OP_MapFogDataUpdateMsg',396,1),(8037,57032,57047,'OP_CloseGroupInviteWindowMsg',397,1),(8038,57032,57047,'OP_WorldPingMsg',399,1),(8039,57032,57047,'OP_MoveLogUpdateMsg',400,1),(8040,57032,57047,'OP_OfferQuestMsg',401,1),(8041,57032,57047,'OP_WorldShutdownUpdateMsg',403,1),(8042,57032,57047,'OP_DisplayMailScreenMsg',404,1),(8043,57032,57047,'OP_ClientIdleBeginMsg',405,1),(8044,57032,57047,'OP_ClientIdleEndMsg',406,1),(8045,57032,57047,'OP_PurchaseConsignmentLoreCheckRe',407,1),(8046,57032,57047,'OP_NotifyApprenticeStoppedMentori',408,1),(8047,57032,57047,'OP_CorruptedClientMsg',409,1),(8048,57032,57047,'OP_WorldDataChangeMsg',410,1),(8049,57032,57047,'OP_MailEventNotificationMsg',411,1),(8050,57032,57047,'OP_RestartZoneMsg',412,1),(8051,57032,57047,'OP_FlightPathsMsg',413,1),(8052,57032,57047,'OP_CharacterLinkdeadMsg',414,1),(8053,57032,57047,'OP_CharTransferStartRequestMsg',415,1),(8054,57032,57047,'OP_CharTransferStartReplyMsg',416,1),(8055,57032,57047,'OP_CharTransferRequestMsg',417,1),(8056,57032,57047,'OP_CharTransferReplyMsg',418,1),(8057,57032,57047,'OP_CharTransferRollbackRequestMsg',419,1),(8058,57032,57047,'OP_CharTransferCommitRequestMsg',420,1),(8059,57032,57047,'OP_CharTransferRollbackReplyMsg',421,1),(8060,57032,57047,'OP_CharTransferCommitReplyMsg',422,1),(8061,57032,57047,'OP_GetCharacterSerializedRequestM',423,1),(8062,57032,57047,'OP_GetCharacterSerializedReplyMsg',424,1),(8063,57032,57047,'OP_CreateCharFromCBBRequestMsg',425,1),(8064,57032,57047,'OP_CreateCharFromCBBReplyMsg',426,1),(8065,57032,57047,'OP_HousingDataChangedMsg',427,1),(8066,57032,57047,'OP_HousingRestoreMsg',428,1),(8067,57032,57047,'OP_AuctionItem',429,1),(8068,57032,57047,'OP_AuctionItemReply',430,1),(8069,57032,57047,'OP_AuctionCoin',431,1),(8070,57032,57047,'OP_AuctionCoinReply',432,1),(8071,57032,57047,'OP_AuctionCharacter',433,1),(8072,57032,57047,'OP_AuctionCharacterReply',434,1),(8073,57032,57047,'OP_AuctionCommitMsg',435,1),(8074,57032,57047,'OP_AuctionAbortMsg',436,1),(8075,57032,57047,'OP_CharTransferValidateRequestMsg',437,1),(8076,57032,57047,'OP_CharTransferValidateReplyMsg',438,1),(8077,57032,57047,'OP_RaceRestrictionMsg',439,1),(8078,57032,57047,'OP_SetInstanceDisplayNameMsg',440,1),(8079,57032,57047,'OP_GetAuctionAssetIDMsg',441,1),(8080,57032,57047,'OP_GetAuctionAssetIDReplyMsg',442,1),(8081,57032,57047,'OP_ResendWorldChannelsMsg',443,1),(8082,57032,57047,'OP_DisplayExchangeScreenMsg',444,1),(8083,57032,57047,'OP_ArenaGameTypesMsg',445,1),(8084,57032,57047,'OP_AuditAuctionEventMsg',446,1),(8085,57032,57047,'OP_InviteRequestMsg',447,1),(8086,57032,57047,'OP_InviteResponseMsg',448,1),(8087,57032,57047,'OP_InviteTargetResponseMsg',449,1),(8088,57032,57047,'OP_InspectPlayerRequestMsg',450,1),(8089,57032,57047,'OP_DispatchMsg',451,1),(8090,57032,57047,'OP_DisplayEventMsg',452,1),(8091,57032,57047,'OP_PrePossessionMsg',453,1),(8092,57032,57047,'OP_PostPossessionMsg',454,1),(8093,57032,57047,'OP_ArenaCreate',456,1),(8094,57032,57047,'OP_ArenaList',457,1),(8095,57032,57047,'OP_ArenaWindow',465,1),(8096,57032,57047,'OP_HouseItemsList',483,1),(8097,57032,57047,'OP_CurrentPet',485,1),(8098,57032,57047,'OP_AdventureList',488,1),(8099,57032,57047,'OP_CancelSpellCast',489,1),(8100,57032,57047,'OP_ClearForLandingMsg',491,1),(8101,57032,57047,'OP_UpdateTitleCmd',494,1),(8102,57032,57047,'OP_AttackAllowed',500,1),(8103,57032,57047,'OP_AttackNotAllowed',501,1),(8104,57032,57047,'OP_BagOptions',502,1),(8105,57032,57047,'OP_LFGGroupSearch',504,1),(8106,57032,57047,'OP_CharacterHousingList',507,1),(8107,57032,57047,'OP_DressingRoom',510,1),(8108,57032,57047,'OP_PlayLon',511,1),(8109,57032,57047,'OP_SkillInfoRequest',514,1),(8110,57032,57047,'OP_SkillInfoResponse',515,1),(8111,57032,57047,'OP_LFGUpdateMsg',518,1),(8112,57032,57047,'OP_BadLanguageFilter',519,1),(8113,57032,57047,'OP_VoiceChatChannel',520,1),(8114,57032,57047,'OP_MapRequest',521,1),(8115,57032,57047,'OP_MarketFundsUpdate',526,1),(8116,57032,57047,'OP_UIEvent',527,1),(8117,57032,57047,'OP_MarketAddFundsRequest',528,1),(8118,57032,57047,'OP_MarketAddFundsReply',529,1),(8119,57032,57047,'OP_MarketPurchase',531,1),(8120,57032,57047,'OP_MarketPlacePrices',532,1),(8121,57032,57047,'OP_MarketPlaceItems',535,1),(8122,57032,57047,'OP_RecipeBook',536,1),(8123,57032,57047,'OP_CreateCharacterDungeon',545,1),(8124,57032,57047,'OP_DungeonMakerEnter',546,1),(8125,57032,57047,'OP_DungeonMakerItemRequest',548,1),(8126,57032,57047,'OP_CharacterCreatedDungeons',549,1),(8127,57032,57047,'OP_DungeonMakerToolboxList',550,1),(8128,57032,57047,'OP_DungeonMakerUnknown',551,1),(8129,57032,57047,'OP_DungeonMakerUnknown1',552,1),(8130,57032,57047,'OP_PlayerPollPopup',554,1),(8131,57032,57047,'OP_PlayerPollAnswer',555,1),(8132,57032,57047,'OP_MentorPopup',556,1),(8133,57032,57047,'OP_LoadWelcomeWindow',558,1),(8134,57032,57047,'OP_OpenCharCust',559,1),(8135,57032,57047,'OP_SubmitCharCust',560,1),(8136,57032,57047,'OP_QueAllBgSolo',562,1),(8137,57032,57047,'OP_ZoneBgInstanceList',564,1),(8138,57032,57047,'OP_WorldTravelAvail',568,1),(8139,57032,57047,'OP_Launchpad',570,1),(8140,57032,57047,'OP_PaperdollImage',572,1),(8141,57032,57047,'OP_LoadCalendarEvents',573,1),(8142,57032,57047,'OP_VideoUploaded',574,1),(8143,57032,57047,'OP_SavageBarInitMsg',575,1),(8144,57032,57047,'OP_PetOptionsResponse',576,1),(8145,57032,57047,'OP_DungeonMakerItemResponse',577,1),(8146,57032,57047,'OP_CharacterMounts',579,1),(8147,57032,57047,'OP_RecipeListUnknown',588,1),(8148,57032,57047,'OP_EqBetaCopyRequest',593,1),(8149,57032,57047,'OP_EqHearChatCmd',594,1),(8150,57032,57047,'OP_EqDisplayTextCmd',595,1),(8151,57032,57047,'OP_EqCreateGhostCmd',596,1),(8152,57032,57047,'OP_EqCreateWidgetCmd',597,1),(8153,57032,57047,'OP_EqCreateSignWidgetCmd',598,1),(8154,57032,57047,'OP_EqDestroyGhostCmd',599,1),(8155,57032,57047,'OP_EqUpdateGhostCmd',600,1),(8156,57032,57047,'OP_EqSetControlGhostCmd',601,1),(8157,57032,57047,'OP_EqSetPOVGhostCmd',602,1),(8158,57032,57047,'OP_EqHearCombatCmd',603,1),(8159,57032,57047,'OP_EqHearSpellCastCmd',604,1),(8160,57032,57047,'OP_EQHearProcCmd',605,1),(8161,57032,57047,'OP_EQHearResEffectCmd',606,1),(8162,57032,57047,'OP_EqHearSpellInterruptCmd',607,1),(8163,57032,57047,'OP_EqHearSpellFizzleCmd',608,1),(8164,57032,57047,'OP_EqHearConsiderCmd',609,1),(8165,57032,57047,'OP_EqUpdateSubClassesCmd',610,1),(8166,57032,57047,'OP_EqCreateListBoxCmd',611,1),(8167,57032,57047,'OP_EqSetDebugPathPointsCmd',612,1),(8168,57032,57047,'OP_EqCannedEmoteCmd',614,1),(8169,57032,57047,'OP_EqStateCmd',615,1),(8170,57032,57047,'OP_EqPlaySoundCmd',616,1),(8171,57032,57047,'OP_EqPlaySound3DCmd',617,1),(8172,57032,57047,'OP_EqPlayVoiceCmd',618,1),(8173,57032,57047,'OP_EqHearDrowningCmd',619,1),(8174,57032,57047,'OP_EqHearDeathCmd',620,1),(8175,57032,57047,'OP_EqGroupMemberRemovedCmd',621,1),(8176,57032,57047,'OP_EqHearChainEffectCmd',622,1),(8177,57032,57047,'OP_EqReceiveOfferCmd',623,1),(8178,57032,57047,'OP_EqInspectPCResultsCmd',624,1),(8179,57032,57047,'OP_EqDrawablePathGraphCmd',625,1),(8180,57032,57047,'OP_EqDialogOpenCmd',626,1),(8181,57032,57047,'OP_EqDialogCloseCmd',627,1),(8182,57032,57047,'OP_EqFactionUpdateCmd',628,1),(8183,57032,57047,'OP_EqCollectionUpdateCmd',629,1),(8184,57032,57047,'OP_EqCollectionFilterCmd',630,1),(8185,57032,57047,'OP_EqCollectionItemCmd',631,1),(8186,57032,57047,'OP_EqQuestJournalUpdateCmd',632,1),(8187,57032,57047,'OP_EqMentoring',633,1),(8188,57032,57047,'OP_EqQuestJournalReplyCmd',634,1),(8189,57032,57047,'OP_EqQuestGroupCmd',635,1),(8190,57032,57047,'OP_EqUpdateMerchantCmd',636,1),(8191,57032,57047,'OP_EqUpdateStoreCmd',637,1),(8192,57032,57047,'OP_EqUpdatePlayerTradeCmd',638,1),(8193,57032,57047,'OP_EqHelpPathCmd',639,1),(8194,57032,57047,'OP_EqHelpPathClearCmd',640,1),(8195,57032,57047,'OP_EqUpdateBankCmd',641,1),(8196,57032,57047,'OP_EqExamineInfoCmd',642,1),(8197,57032,57047,'OP_EqCloseWindowCmd',643,1),(8198,57032,57047,'OP_EqUpdateLootCmd',644,1),(8199,57032,57047,'OP_EqJunctionListCmd',645,1),(8200,57032,57047,'OP_EqShowDeathWindowCmd',646,1),(8201,57032,57047,'OP_EqDisplaySpellFailCmd',647,1),(8202,57032,57047,'OP_EqSpellCastStartCmd',648,1),(8203,57032,57047,'OP_EqSpellCastEndCmd',649,1),(8204,57032,57047,'OP_EqResurrectedCmd',650,1),(8205,57032,57047,'OP_EqChoiceWinCmd',651,1),(8206,57032,57047,'OP_EqSetDefaultVerbCmd',652,1),(8207,57032,57047,'OP_EqInstructionWindowCmd',653,1),(8208,57032,57047,'OP_EqInstructionWindowCloseCmd',654,1),(8209,57032,57047,'OP_EqInstructionWindowGoalCmd',655,1),(8210,57032,57047,'OP_EqInstructionWindowTaskCmd',656,1),(8211,57032,57047,'OP_EqEnableGameEventCmd',657,1),(8212,57032,57047,'OP_EqShowWindowCmd',658,1),(8213,57032,57047,'OP_EqEnableWindowCmd',659,1),(8214,57032,57047,'OP_EqFlashWindowCmd',660,1),(8215,57032,57047,'OP_EqHearPlayFlavorCmd',662,1),(8216,57032,57047,'OP_EqUpdateSignWidgetCmd',663,1),(8217,57032,57047,'OP_EqDebugPVDCmd',664,1),(8218,57032,57047,'OP_EqShowBookCmd',665,1),(8219,57032,57047,'OP_EqQuestionnaireCmd',666,1),(8220,57032,57047,'OP_EqGetProbsCmd',668,1),(8221,57032,57047,'OP_EqHearHealCmd',669,1),(8222,57032,57047,'OP_EqChatChannelUpdateCmd',670,1),(8223,57032,57047,'OP_EqWhoChannelQueryReplyCmd',671,1),(8224,57032,57047,'OP_EqAvailWorldChannelsCmd',672,1),(8225,57032,57047,'OP_EqUpdateTargetCmd',673,1),(8226,57032,57047,'OP_BrokerSellList',674,1),(8227,57032,57047,'OP_EqConsignmentItemsCmd',675,1),(8228,57032,57047,'OP_EqStartBrokerCmd',677,1),(8229,57032,57047,'OP_EqMapExplorationCmd',678,1),(8230,57032,57047,'OP_EqStoreLogCmd',679,1),(8231,57032,57047,'OP_EqSpellMoveToRangeAndRetryCmd',680,1),(8232,57032,57047,'OP_EqUpdatePlayerMailCmd',681,1),(8233,57032,57047,'OP_GuildStatusUpdate',684,1),(8234,57032,57047,'OP_EqArenaResultsCmd',685,1),(8235,57032,57047,'OP_EqGuildBankEventActionCmd',686,1),(8236,57032,57047,'OP_EqGuildBankExamineInfoCmd',687,1),(8237,57032,57047,'OP_EqHearSpellNoLandCmd',688,1),(8238,57032,57047,'OP_Lottery',689,1),(8239,57032,57047,'OP_GuildRecruitingMemberInfo',690,1),(8240,57032,57047,'OP_GuildRecruiting',691,1),(8241,57032,57047,'OP_GuildRecruitingDetails',692,1),(8242,57032,57047,'OP_GuildRecruitingImage',693,1),(8243,57032,57047,'OP_TradeskillList',694,1),(8244,57032,57047,'OP_CharRenamed',695,1),(8245,57032,57047,'OP_UseAdornment',705,1),(8246,57032,57047,'OP_ExpPurchWindow',711,1),(8247,57032,57047,'OP_PointOfInterest',715,1),(8248,57032,57047,'OP_PointOfInterest2',716,1),(8249,57032,57047,'OP_TraitsList',717,1),(8250,57032,57047,'OP_CustomizeHouseDisplay',720,1),(8251,57032,57047,'OP_VoiceChatServer',721,1),(8252,57032,57047,'OP_SupplyDepot',725,1),(8253,57032,57047,'OP_EQHearThreatCmd',726,1),(8254,57032,57047,'OP_RecipeList',727,1),(8255,57032,57047,'OP_Research',728,1),(8256,57032,57047,'OP_CharacterCurrency',729,1),(8257,57032,57047,'OP_CharacterAchievements',730,1),(8258,57032,57047,'OP_AchievementUpdateMsg',731,1),(8259,57032,57047,'OP_EQHearDispellCmd',732,1),(8260,57032,57047,'OP_JournalQuestStoryline',733,1),(8261,57032,57047,'OP_DungeonPlayAsAvatarList',734,1),(8262,57032,57047,'OP_DungeonPlayAsAvatarSelected',735,1),(8263,57032,57047,'OP_MercHireWindow',736,1),(8264,57032,57047,'OP_MercUnknown',737,1),(8265,57032,57047,'OP_Unknown',750,1),(8266,57048,57079,'OP_LoginRequestMsg',0,1),(8267,57048,57079,'OP_LoginByNumRequestMsg',1,1),(8268,57048,57079,'OP_WSLoginRequestMsg',2,1),(8269,57048,57079,'OP_ESLoginRequestMsg',3,1),(8270,57048,57079,'OP_LoginReplyMsg',4,1),(8271,57048,57079,'OP_WSStatusReplyMsg',5,1),(8272,57048,57079,'OP_WorldStatusChangeMsg',6,1),(8273,57048,57079,'OP_AllWSDescRequestMsg',7,1),(8274,57048,57079,'OP_WorldListMsg',8,1),(8275,57048,57079,'OP_AllCharactersDescRequestMsg',9,1),(8276,57048,57079,'OP_AllCharactersDescReplyMsg',10,1),(8277,57048,57079,'OP_CreateCharacterRequestMsg',11,1),(8278,57048,57079,'OP_CreateCharacterReplyMsg',12,1),(8279,57048,57079,'OP_WSCreateCharacterRequestMsg',13,1),(8280,57048,57079,'OP_WSCreateCharacterReplyMsg',14,1),(8281,57048,57079,'OP_ReskinCharacterRequestMsg',15,1),(8282,57048,57079,'OP_DeleteCharacterRequestMsg',16,1),(8283,57048,57079,'OP_DeleteCharacterReplyMsg',17,1),(8284,57048,57079,'OP_PlayCharacterRequestMsg',18,1),(8285,57048,57079,'OP_PlayCharacterReplyMsg',19,1),(8286,57048,57079,'OP_ExpectClientAsCharacterReplyMs',22,1),(8287,57048,57079,'OP_ServerPlayCharacterRequestMsg',23,1),(8288,57048,57079,'OP_ServerPlayCharacterReplyMsg',24,1),(8289,57048,57079,'OP_ESInitMsg',25,1),(8290,57048,57079,'OP_ESReadyForClientsMsg',26,1),(8291,57048,57079,'OP_CreateZoneInstanceMsg',29,1),(8292,57048,57079,'OP_ZoneInstanceCreateReplyMsg',30,1),(8293,57048,57079,'OP_ZoneInstanceDestroyedMsg',31,1),(8294,57048,57079,'OP_ExpectClientAsCharacterRequest',32,1),(8295,57048,57079,'OP_ZoneInfoMsg',33,1),(8296,57048,57079,'OP_DoneLoadingZoneResourcesMsg',34,1),(8297,57048,57079,'OP_DoneSendingInitialEntitiesMsg',35,1),(8298,57048,57079,'OP_DoneLoadingEntityResourcesMsg',36,1),(8299,57048,57079,'OP_PredictionUpdateMsg',37,1),(8300,57048,57079,'OP_UpdatePositionMsg',39,1),(8301,57048,57079,'OP_SetRemoteCmdsMsg',41,1),(8302,57048,57079,'OP_RemoteCmdMsg',42,1),(8303,57048,57079,'OP_GameWorldTimeMsg',43,1),(8304,57048,57079,'OP_MOTDMsg',44,1),(8305,57048,57079,'OP_ZoneMOTDMsg',45,1),(8306,57048,57079,'OP_AvatarCreatedMsg',46,1),(8307,57048,57079,'OP_AvatarDestroyedMsg',47,1),(8308,57048,57079,'OP_RequestCampMsg',50,1),(8309,57048,57079,'OP_CampStartedMsg',51,1),(8310,57048,57079,'OP_CampAbortedMsg',52,1),(8311,57048,57079,'OP_WhoQueryRequestMsg',53,1),(8312,57048,57079,'OP_WhoQueryReplyMsg',54,1),(8313,57048,57079,'OP_MonitorReplyMsg',55,1),(8314,57048,57079,'OP_MonitorCharacterListMsg',56,1),(8315,57048,57079,'OP_MonitorCharacterListRequestMsg',57,1),(8316,57048,57079,'OP_ClientCmdMsg',58,1),(8317,57048,57079,'OP_DispatchESMsg',59,1),(8318,57048,57079,'OP_DispatchClientCmdMsg',60,1),(8319,57048,57079,'OP_UpdateTargetMsg',61,1),(8320,57048,57079,'OP_UpdateTargetLocMsg',62,1),(8321,57048,57079,'OP_UpdateCharacterSheetMsg',63,1),(8322,57048,57079,'OP_CharacterPet',64,1),(8323,57048,57079,'OP_CharacterMerc',65,1),(8324,57048,57079,'OP_UpdateSpellBookMsg',66,1),(8325,57048,57079,'OP_UpdateInventoryMsg',68,1),(8326,57048,57079,'OP_AfterInvSpellUpdate',69,1),(8327,57048,57079,'OP_UpdateRecipeBookMsg',70,1),(8328,57048,57079,'OP_RequestRecipeDetailsMsg',71,1),(8329,57048,57079,'OP_RecipeDetailsMsg',72,1),(8330,57048,57079,'OP_UpdateSkillBookMsg',73,1),(8331,57048,57079,'OP_UpdateSkillsMsg',74,1),(8332,57048,57079,'OP_UpdateOpportunityMsg',75,1),(8333,57048,57079,'OP_ChangeZoneMsg',77,1),(8334,57048,57079,'OP_ClientTeleportRequestMsg',78,1),(8335,57048,57079,'OP_TeleportWithinZoneMsg',79,1),(8336,57048,57079,'OP_TeleportWithinZoneNoReloadMsg',80,1),(8337,57048,57079,'OP_MigrateClientToZoneRequestMsg',81,1),(8338,57048,57079,'OP_MigrateClientToZoneReplyMsg',82,1),(8339,57048,57079,'OP_ReadyToZoneMsg',84,1),(8340,57048,57079,'OP_RemoveClientFromGroupMsg',85,1),(8341,57048,57079,'OP_RemoveGroupFromGroupMsg',86,1),(8342,57048,57079,'OP_MakeGroupLeaderMsg',87,1),(8343,57048,57079,'OP_GroupCreatedMsg',88,1),(8344,57048,57079,'OP_GroupDestroyedMsg',89,1),(8345,57048,57079,'OP_GroupMemberAddedMsg',90,1),(8346,57048,57079,'OP_GroupMemberRemovedMsg',91,1),(8347,57048,57079,'OP_GroupRemovedFromGroupMsg',92,1),(8348,57048,57079,'OP_GroupLeaderChangedMsg',93,1),(8349,57048,57079,'OP_GroupResendOOZDataMsg',94,1),(8350,57048,57079,'OP_GroupSettingsChangedMsg',95,1),(8351,57048,57079,'OP_OutOfZoneMemberDataMsg',96,1),(8352,57048,57079,'OP_SendLatestRequestMsg',97,1),(8353,57048,57079,'OP_ClearDataMsg',98,1),(8354,57048,57079,'OP_SetSocialMsg',99,1),(8355,57048,57079,'OP_ESStatusMsg',100,1),(8356,57048,57079,'OP_ESZoneInstanceStatusMsg',101,1),(8357,57048,57079,'OP_ZonesStatusRequestMsg',102,1),(8358,57048,57079,'OP_ZonesStatusMsg',103,1),(8359,57048,57079,'OP_ESWeatherRequestMsg',104,1),(8360,57048,57079,'OP_ESWeatherRequestEndMsg',105,1),(8361,57048,57079,'OP_DialogSelectMsg',109,1),(8362,57048,57079,'OP_DialogCloseMsg',110,1),(8363,57048,57079,'OP_RemoveSpellEffectMsg',111,1),(8364,57048,57079,'OP_RemoveConcentrationMsg',112,1),(8365,57048,57079,'OP_QuestJournalOpenMsg',113,1),(8366,57048,57079,'OP_QuestJournalInspectMsg',114,1),(8367,57048,57079,'OP_QuestJournalSetVisibleMsg',115,1),(8368,57048,57079,'OP_QuestJournalWaypointMsg',116,1),(8369,57048,57079,'OP_CreateGuildRequestMsg',119,1),(8370,57048,57079,'OP_CreateGuildReplyMsg',120,1),(8371,57048,57079,'OP_GuildsayMsg',121,1),(8372,57048,57079,'OP_FellowshipExpMsg',122,1),(8373,57048,57079,'OP_DeleteGuildMsg',123,1),(8374,57048,57079,'OP_GuildUpdateMsg',124,1),(8375,57048,57079,'OP_ConsignmentCloseStoreMsg',125,1),(8376,57048,57079,'OP_ConsignItemRequestMsg',126,1),(8377,57048,57079,'OP_ConsignItemResponseMsg',127,1),(8378,57048,57079,'OP_PurchaseConsignmentRequestMsg',128,1),(8379,57048,57079,'OP_LikeOption',136,1),(8380,57048,57079,'OP_PublishHouse',138,1),(8381,57048,57079,'OP_PlayerMadeInstancesScreen',139,1),(8382,57048,57079,'OP_PlayerMadeInstances',140,1),(8383,57048,57079,'OP_HouseDeletedRemotelyMsg',142,1),(8384,57048,57079,'OP_UpdateHouseDataMsg',143,1),(8385,57048,57079,'OP_UpdateHouseAccessDataMsg',144,1),(8386,57048,57079,'OP_PlayerHouseBaseScreenMsg',145,1),(8387,57048,57079,'OP_PlayerHousePurchaseScreenMsg',146,1),(8388,57048,57079,'OP_PlayerHouseAccessUpdateMsg',147,1),(8389,57048,57079,'OP_PlayerHouseDisplayStatusMsg',148,1),(8390,57048,57079,'OP_PlayerHouseCloseUIMsg',149,1),(8391,57048,57079,'OP_BuyPlayerHouseMsg',150,1),(8392,57048,57079,'OP_BuyPlayerHouseTintMsg',151,1),(8393,57048,57079,'OP_CollectAllHouseItemsMsg',152,1),(8394,57048,57079,'OP_RelinquishHouseMsg',153,1),(8395,57048,57079,'OP_EnterHouseMsg',154,1),(8396,57048,57079,'OP_ExitHouseMsg',155,1),(8397,57048,57079,'OP_HouseDefaultAccessSetMsg',156,1),(8398,57048,57079,'OP_HouseAccessSetMsg',157,1),(8399,57048,57079,'OP_HouseAccessRemoveMsg',158,1),(8400,57048,57079,'OP_PayHouseUpkeepMsg',159,1),(8401,57048,57079,'OP_MoveableObjectPlacementCriteri',160,1),(8402,57048,57079,'OP_EnterMoveObjectModeMsg',161,1),(8403,57048,57079,'OP_PositionMoveableObject',162,1),(8404,57048,57079,'OP_CancelMoveObjectModeMsg',163,1),(8405,57048,57079,'OP_ShaderCustomizationMsg',164,1),(8406,57048,57079,'OP_ReplaceableSubMeshesMsg',165,1),(8407,57048,57079,'OP_HouseCustomizationScreenMsg',166,1),(8408,57048,57079,'OP_CustomizationPurchaseRequestMs',167,1),(8409,57048,57079,'OP_CustomizationSetRequestMsg',168,1),(8410,57048,57079,'OP_CustomizationReplyMsg',169,1),(8411,57048,57079,'OP_TintWidgetsMsg',170,1),(8412,57048,57079,'OP_ExamineConsignmentRequestMsg',171,1),(8413,57048,57079,'OP_ExamineConsignmentResponseMsg',172,1),(8414,57048,57079,'OP_UISettingsResponseMsg',173,1),(8415,57048,57079,'OP_UIResetMsg',174,1),(8416,57048,57079,'OP_KeymapLoadMsg',175,1),(8417,57048,57079,'OP_KeymapNoneMsg',176,1),(8418,57048,57079,'OP_KeymapDataMsg',177,1),(8419,57048,57079,'OP_KeymapSaveMsg',178,1),(8420,57048,57079,'OP_DispatchSpellCmdMsg',179,1),(8421,57048,57079,'OP_EntityVerbsRequestMsg',180,1),(8422,57048,57079,'OP_EntityVerbsReplyMsg',181,1),(8423,57048,57079,'OP_EntityVerbsVerbMsg',182,1),(8424,57048,57079,'OP_ChatRelationshipUpdateMsg',184,1),(8425,57048,57079,'OP_LootItemsRequestMsg',185,1),(8426,57048,57079,'OP_StoppedLootingMsg',186,1),(8427,57048,57079,'OP_SitMsg',187,1),(8428,57048,57079,'OP_StandMsg',188,1),(8429,57048,57079,'OP_SatMsg',189,1),(8430,57048,57079,'OP_StoodMsg',190,1),(8431,57048,57079,'OP_ClearForTakeOffMsg',191,1),(8432,57048,57079,'OP_ReadyForTakeOffMsg',192,1),(8433,57048,57079,'OP_ShowIllusionsMsg',193,1),(8434,57048,57079,'OP_HideIllusionsMsg',194,1),(8435,57048,57079,'OP_ExamineItemRequestMsg',195,1),(8436,57048,57079,'OP_ReadBookPageMsg',196,1),(8437,57048,57079,'OP_DefaultGroupOptionsRequestMsg',197,1),(8438,57048,57079,'OP_DefaultGroupOptionsMsg',198,1),(8439,57048,57079,'OP_GroupOptionsMsg',199,1),(8440,57048,57079,'OP_DisplayGroupOptionsScreenMsg',200,1),(8441,57048,57079,'OP_PetOptions',201,1),(8442,57048,57079,'OP_DisplayInnVisitScreenMsg',202,1),(8443,57048,57079,'OP_DumpSchedulerMsg',203,1),(8444,57048,57079,'OP_LSCheckAcctLockMsg',204,1),(8445,57048,57079,'OP_WSAcctLockStatusMsg',205,1),(8446,57048,57079,'OP_RequestHelpRepathMsg',206,1),(8447,57048,57079,'OP_RequestTargetLocMsg',207,1),(8448,57048,57079,'OP_UpdateMotdMsg',208,1),(8449,57048,57079,'OP_DestUpdateReq',210,1),(8450,57048,57079,'OP_PerformPlayerKnockbackMsg',213,1),(8451,57048,57079,'OP_PerformCameraShakeMsg',214,1),(8452,57048,57079,'OP_PopulateSkillMapsMsg',215,1),(8453,57048,57079,'OP_CancelledFeignMsg',216,1),(8454,57048,57079,'OP_SysClient',218,1),(8455,57048,57079,'OP_ShowCreateFromRecipeUIMsg',219,1),(8456,57048,57079,'OP_CancelCreateFromRecipeMsg',220,1),(8457,57048,57079,'OP_BeginItemCreationMsg',221,1),(8458,57048,57079,'OP_StopItemCreationMsg',222,1),(8459,57048,57079,'OP_ShowItemCreationProcessUIMsg',223,1),(8460,57048,57079,'OP_UpdateItemCreationProcessUIMsg',224,1),(8461,57048,57079,'OP_DisplayTSEventReactionMsg',225,1),(8462,57048,57079,'OP_ShowRecipeBookMsg',226,1),(8463,57048,57079,'OP_KnowledgebaseRequestMsg',227,1),(8464,57048,57079,'OP_KnowledgebaseResponseMsg',228,1),(8465,57048,57079,'OP_CSTicketHeaderRequestMsg',229,1),(8466,57048,57079,'OP_CSTicketInfoMsg',230,1),(8467,57048,57079,'OP_CSTicketCommentRequestMsg',231,1),(8468,57048,57079,'OP_CSTicketCommentResponseMsg',232,1),(8469,57048,57079,'OP_CSTicketCreateMsg',233,1),(8470,57048,57079,'OP_CSTicketAddCommentMsg',234,1),(8471,57048,57079,'OP_CSTicketDeleteMsg',235,1),(8472,57048,57079,'OP_CSTicketChangeNotificationMsg',236,1),(8473,57048,57079,'OP_WorldDataUpdateMsg',237,1),(8474,57048,57079,'OP_KnownLanguagesMsg',238,1),(8475,57048,57079,'OP_LsRequestClientCrashLogMsg',239,1),(8476,57048,57079,'OP_LsClientBaselogReplyMsg',240,1),(8477,57048,57079,'OP_LsClientCrashlogReplyMsg',241,1),(8478,57048,57079,'OP_LsClientAlertlogReplyMsg',242,1),(8479,57048,57079,'OP_LsClientVerifylogReplyMsg',243,1),(8480,57048,57079,'OP_ClientTeleportToLocationMsg',244,1),(8481,57048,57079,'OP_UpdateClientPredFlagsMsg',245,1),(8482,57048,57079,'OP_ChangeServerControlFlagMsg',246,1),(8483,57048,57079,'OP_CSToolsRequestMsg',247,1),(8484,57048,57079,'OP_CSToolsResponseMsg',248,1),(8485,57048,57079,'OP_AddSocialStructureStandingMsg',249,1),(8486,57048,57079,'OP_CreateBoatTransportsMsg',250,1),(8487,57048,57079,'OP_PositionBoatTransportMsg',251,1),(8488,57048,57079,'OP_MigrateBoatTransportMsg',252,1),(8489,57048,57079,'OP_MigrateBoatTransportReplyMsg',253,1),(8490,57048,57079,'OP_DisplayDebugNLLPointsMsg',254,1),(8491,57048,57079,'OP_ExamineInfoRequestMsg',255,1),(8492,57048,57079,'OP_QuickbarInitMsg',256,1),(8493,57048,57079,'OP_QuickbarUpdateMsg',257,1),(8494,57048,57079,'OP_MacroInitMsg',258,1),(8495,57048,57079,'OP_MacroUpdateMsg',259,1),(8496,57048,57079,'OP_QuestionnaireMsg',260,1),(8497,57048,57079,'OP_LevelChangedMsg',261,1),(8498,57048,57079,'OP_SpellGainedMsg',262,1),(8499,57048,57079,'OP_EncounterBrokenMsg',263,1),(8500,57048,57079,'OP_OnscreenMsgMsg',264,1),(8501,57048,57079,'OP_DisplayWarningMsg',265,1),(8502,57048,57079,'OP_ModifyGuildMsg',266,1),(8503,57048,57079,'OP_GuildEventMsg',267,1),(8504,57048,57079,'OP_GuildEventAddMsg',268,1),(8505,57048,57079,'OP_GuildEventActionMsg',269,1),(8506,57048,57079,'OP_GuildEventListMsg',270,1),(8507,57048,57079,'OP_RequestGuildEventDetailsMsg',271,1),(8508,57048,57079,'OP_GuildEventDetailsMsg',272,1),(8509,57048,57079,'OP_RequestGuildInfoMsg',273,1),(8510,57048,57079,'OP_GuildBankActionMsg',274,1),(8511,57048,57079,'OP_GuildBankActionResponseMsg',275,1),(8512,57048,57079,'OP_GuildBankItemDetailsRequestMsg',276,1),(8513,57048,57079,'OP_GuildBankItemDetailsResponseMs',277,1),(8514,57048,57079,'OP_GuildBankUpdateMsg',278,1),(8515,57048,57079,'OP_GuildBankEventListMsg',279,1),(8516,57048,57079,'OP_RequestGuildBankEventDetailsMs',280,1),(8517,57048,57079,'OP_RewardPackMsg',281,1),(8518,57048,57079,'OP_RenameGuildMsg',282,1),(8519,57048,57079,'OP_ZoneToFriendRequestMsg',283,1),(8520,57048,57079,'OP_ZoneToFriendReplyMsg',284,1),(8521,57048,57079,'OP_ChatCreateChannelMsg',285,1),(8522,57048,57079,'OP_ChatJoinChannelMsg',286,1),(8523,57048,57079,'OP_ChatWhoChannelMsg',287,1),(8524,57048,57079,'OP_ChatLeaveChannelMsg',288,1),(8525,57048,57079,'OP_ChatTellChannelMsg',289,1),(8526,57048,57079,'OP_ChatTellUserMsg',290,1),(8527,57048,57079,'OP_ChatToggleFriendMsg',291,1),(8528,57048,57079,'OP_BrokerAddBag',292,1),(8529,57048,57079,'OP_BrokerRemoveBag',293,1),(8530,57048,57079,'OP_ChatToggleIgnoreMsg',294,1),(8531,57048,57079,'OP_ChatSendFriendsMsg',295,1),(8532,57048,57079,'OP_ChatSendIgnoresMsg',296,1),(8533,57048,57079,'OP_QuestReward',320,1),(8534,57048,57079,'OP_ChatFiltersMsg',335,1),(8535,57048,57079,'OP_MailGetMessageMsg',338,1),(8536,57048,57079,'OP_MailSendMessageMsg',339,1),(8537,57048,57079,'OP_MailDeleteMessageMsg',340,1),(8538,57048,57079,'OP_MailGetHeadersReplyMsg',341,1),(8539,57048,57079,'OP_MailGetMessageReplyMsg',342,1),(8540,57048,57079,'OP_MailSendMessageReplyMsg',343,1),(8541,57048,57079,'OP_MailCommitSendMessageMsg',344,1),(8542,57048,57079,'OP_MailSendSystemMessageMsg',345,1),(8543,57048,57079,'OP_MailRemoveAttachFromMailMsg',346,1),(8544,57048,57079,'OP_WaypointRequestMsg',348,1),(8545,57048,57079,'OP_WaypointReplyMsg',349,1),(8546,57048,57079,'OP_WaypointSelectMsg',350,1),(8547,57048,57079,'OP_WaypointUpdateMsg',351,1),(8548,57048,57079,'OP_CharNameChangedMsg',352,1),(8549,57048,57079,'OP_ShowZoneTeleporterDestinations',353,1),(8550,57048,57079,'OP_SelectZoneTeleporterDestinatio',354,1),(8551,57048,57079,'OP_ReloadLocalizedTxtMsg',355,1),(8552,57048,57079,'OP_RequestGuildMembershipMsg',356,1),(8553,57048,57079,'OP_GuildMembershipResponseMsg',357,1),(8554,57048,57079,'OP_LeaveGuildNotifyMsg',358,1),(8555,57048,57079,'OP_JoinGuildNotifyMsg',359,1),(8556,57048,57079,'OP_AvatarUpdateMsg',360,1),(8557,57048,57079,'OP_BioUpdateMsg',362,1),(8558,57048,57079,'OP_InspectPlayerMsg',363,1),(8559,57048,57079,'OP_WSServerLockMsg',364,1),(8560,57048,57079,'OP_LSServerLockMsg',365,1),(8561,57048,57079,'OP_WSServerHideMsg',366,1),(8562,57048,57079,'OP_CsCategoryRequestMsg',367,1),(8563,57048,57079,'OP_CsCategoryResponseMsg',368,1),(8564,57048,57079,'OP_KnowledgeWindowSlotMappingMsg',369,1),(8565,57048,57079,'OP_AFKUpdateMsg',370,1),(8566,57048,57079,'OP_AnonUpdateMsg',371,1),(8567,57048,57079,'OP_UpdateActivePublicZonesMsg',372,1),(8568,57048,57079,'OP_UnknownNpcMsg',373,1),(8569,57048,57079,'OP_PromoFlagsDetailsMsg',374,1),(8570,57048,57079,'OP_ConsignViewCreateMsg',375,1),(8571,57048,57079,'OP_ConsignViewGetPageMsg',376,1),(8572,57048,57079,'OP_ConsignViewReleaseMsg',377,1),(8573,57048,57079,'OP_ConsignRemoveItemsMsg',378,1),(8574,57048,57079,'OP_UpdateDebugRadiiMsg',379,1),(8575,57048,57079,'OP_ReportMsg',380,1),(8576,57048,57079,'OP_UpdateRaidMsg',381,1),(8577,57048,57079,'OP_ConsignViewSortMsg',383,1),(8578,57048,57079,'OP_TitleUpdateMsg',384,1),(8579,57048,57079,'OP_ClientFellMsg',385,1),(8580,57048,57079,'OP_ClientInDeathRegionMsg',386,1),(8581,57048,57079,'OP_CampClientMsg',387,1),(8582,57048,57079,'OP_CSToolAccessResponseMsg',388,1),(8583,57048,57079,'OP_UpdateGroupMemberDataMsg',388,1),(8584,57048,57079,'OP_TrackingUpdateMsg',389,1),(8585,57048,57079,'OP_BeginTrackingMsg',390,1),(8586,57048,57079,'OP_StopTrackingMsg',391,1),(8587,57048,57079,'OP_GetAvatarAccessRequestForCSToo',393,1),(8588,57048,57079,'OP_AdvancementRequestMsg',394,1),(8589,57048,57079,'OP_MapFogDataInitMsg',395,1),(8590,57048,57079,'OP_MapFogDataUpdateMsg',396,1),(8591,57048,57079,'OP_CloseGroupInviteWindowMsg',397,1),(8592,57048,57079,'OP_WorldPingMsg',399,1),(8593,57048,57079,'OP_MoveLogUpdateMsg',400,1),(8594,57048,57079,'OP_OfferQuestMsg',401,1),(8595,57048,57079,'OP_WorldShutdownUpdateMsg',403,1),(8596,57048,57079,'OP_DisplayMailScreenMsg',404,1),(8597,57048,57079,'OP_ClientIdleBeginMsg',405,1),(8598,57048,57079,'OP_ClientIdleEndMsg',406,1),(8599,57048,57079,'OP_PurchaseConsignmentLoreCheckRe',407,1),(8600,57048,57079,'OP_NotifyApprenticeStoppedMentori',408,1),(8601,57048,57079,'OP_CorruptedClientMsg',409,1),(8602,57048,57079,'OP_WorldDataChangeMsg',410,1),(8603,57048,57079,'OP_MailEventNotificationMsg',411,1),(8604,57048,57079,'OP_RestartZoneMsg',412,1),(8605,57048,57079,'OP_FlightPathsMsg',413,1),(8606,57048,57079,'OP_CharacterLinkdeadMsg',414,1),(8607,57048,57079,'OP_CharTransferStartRequestMsg',415,1),(8608,57048,57079,'OP_CharTransferStartReplyMsg',416,1),(8609,57048,57079,'OP_CharTransferRequestMsg',417,1),(8610,57048,57079,'OP_CharTransferReplyMsg',418,1),(8611,57048,57079,'OP_CharTransferRollbackRequestMsg',419,1),(8612,57048,57079,'OP_CharTransferCommitRequestMsg',420,1),(8613,57048,57079,'OP_CharTransferRollbackReplyMsg',421,1),(8614,57048,57079,'OP_CharTransferCommitReplyMsg',422,1),(8615,57048,57079,'OP_GetCharacterSerializedRequestM',423,1),(8616,57048,57079,'OP_GetCharacterSerializedReplyMsg',424,1),(8617,57048,57079,'OP_CreateCharFromCBBRequestMsg',425,1),(8618,57048,57079,'OP_CreateCharFromCBBReplyMsg',426,1),(8619,57048,57079,'OP_HousingDataChangedMsg',427,1),(8620,57048,57079,'OP_HousingRestoreMsg',428,1),(8621,57048,57079,'OP_AuctionItem',429,1),(8622,57048,57079,'OP_AuctionItemReply',430,1),(8623,57048,57079,'OP_AuctionCoin',431,1),(8624,57048,57079,'OP_AuctionCoinReply',432,1),(8625,57048,57079,'OP_AuctionCharacter',433,1),(8626,57048,57079,'OP_AuctionCharacterReply',434,1),(8627,57048,57079,'OP_AuctionCommitMsg',435,1),(8628,57048,57079,'OP_AuctionAbortMsg',436,1),(8629,57048,57079,'OP_CharTransferValidateRequestMsg',437,1),(8630,57048,57079,'OP_CharTransferValidateReplyMsg',438,1),(8631,57048,57079,'OP_RaceRestrictionMsg',439,1),(8632,57048,57079,'OP_SetInstanceDisplayNameMsg',440,1),(8633,57048,57079,'OP_GetAuctionAssetIDMsg',441,1),(8634,57048,57079,'OP_GetAuctionAssetIDReplyMsg',442,1),(8635,57048,57079,'OP_ResendWorldChannelsMsg',443,1),(8636,57048,57079,'OP_DisplayExchangeScreenMsg',444,1),(8637,57048,57079,'OP_ArenaGameTypesMsg',445,1),(8638,57048,57079,'OP_AuditAuctionEventMsg',446,1),(8639,57048,57079,'OP_InviteRequestMsg',447,1),(8640,57048,57079,'OP_InviteResponseMsg',448,1),(8641,57048,57079,'OP_InviteTargetResponseMsg',449,1),(8642,57048,57079,'OP_InspectPlayerRequestMsg',450,1),(8643,57048,57079,'OP_DispatchMsg',451,1),(8644,57048,57079,'OP_DisplayEventMsg',452,1),(8645,57048,57079,'OP_PrePossessionMsg',453,1),(8646,57048,57079,'OP_PostPossessionMsg',454,1),(8647,57048,57079,'OP_ArenaCreate',456,1),(8648,57048,57079,'OP_ArenaList',457,1),(8649,57048,57079,'OP_ArenaWindow',465,1),(8650,57048,57079,'OP_HouseItemsList',484,1),(8651,57048,57079,'OP_CurrentPet',485,1),(8652,57048,57079,'OP_AdventureList',488,1),(8653,57048,57079,'OP_CancelSpellCast',489,1),(8654,57048,57079,'OP_ClearForLandingMsg',491,1),(8655,57048,57079,'OP_UpdateTitleCmd',494,1),(8656,57048,57079,'OP_AttackAllowed',500,1),(8657,57048,57079,'OP_AttackNotAllowed',501,1),(8658,57048,57079,'OP_BagOptions',502,1),(8659,57048,57079,'OP_LFGGroupSearch',504,1),(8660,57048,57079,'OP_CharacterHousingList',507,1),(8661,57048,57079,'OP_DressingRoom',510,1),(8662,57048,57079,'OP_PlayLon',511,1),(8663,57048,57079,'OP_SkillInfoRequest',514,1),(8664,57048,57079,'OP_SkillInfoResponse',515,1),(8665,57048,57079,'OP_LFGUpdateMsg',518,1),(8666,57048,57079,'OP_BadLanguageFilter',519,1),(8667,57048,57079,'OP_VoiceChatChannel',520,1),(8668,57048,57079,'OP_MapRequest',521,1),(8669,57048,57079,'OP_MarketFundsUpdate',526,1),(8670,57048,57079,'OP_UIEvent',527,1),(8671,57048,57079,'OP_MarketAddFundsRequest',528,1),(8672,57048,57079,'OP_MarketAddFundsReply',529,1),(8673,57048,57079,'OP_MarketPurchase',531,1),(8674,57048,57079,'OP_MarketPlacePrices',532,1),(8675,57048,57079,'OP_MarketPlaceItems',537,1),(8676,57048,57079,'OP_RecipeBook',538,1),(8677,57048,57079,'OP_CreateCharacterDungeon',547,1),(8678,57048,57079,'OP_DungeonMakerEnter',548,1),(8679,57048,57079,'OP_DungeonMakerItemRequest',550,1),(8680,57048,57079,'OP_CharacterCreatedDungeons',551,1),(8681,57048,57079,'OP_DungeonMakerToolboxList',552,1),(8682,57048,57079,'OP_DungeonMakerUnknown',553,1),(8683,57048,57079,'OP_DungeonMakerUnknown1',554,1),(8684,57048,57079,'OP_PlayerPollPopup',556,1),(8685,57048,57079,'OP_PlayerPollAnswer',557,1),(8686,57048,57079,'OP_MentorPopup',558,1),(8687,57048,57079,'OP_LoadWelcomeWindow',560,1),(8688,57048,57079,'OP_OpenCharCust',561,1),(8689,57048,57079,'OP_SubmitCharCust',562,1),(8690,57048,57079,'OP_QueAllBgSolo',564,1),(8691,57048,57079,'OP_ZoneBgInstanceList',566,1),(8692,57048,57079,'OP_WorldTravelAvail',570,1),(8693,57048,57079,'OP_Launchpad',572,1),(8694,57048,57079,'OP_PaperdollImage',574,1),(8695,57048,57079,'OP_LoadCalendarEvents',575,1),(8696,57048,57079,'OP_VideoUploaded',576,1),(8697,57048,57079,'OP_SavageBarInitMsg',577,1),(8698,57048,57079,'OP_PetOptionsResponse',578,1),(8699,57048,57079,'OP_DungeonMakerItemResponse',579,1),(8700,57048,57079,'OP_CharacterMounts',581,1),(8701,57048,57079,'OP_RecipeListUnknown',590,1),(8702,57048,57079,'OP_EqBetaCopyRequest',596,1),(8703,57048,57079,'OP_EqHearChatCmd',597,1),(8704,57048,57079,'OP_EqDisplayTextCmd',598,1),(8705,57048,57079,'OP_EqCreateGhostCmd',599,1),(8706,57048,57079,'OP_EqCreateWidgetCmd',600,1),(8707,57048,57079,'OP_EqCreateSignWidgetCmd',601,1),(8708,57048,57079,'OP_EqDestroyGhostCmd',602,1),(8709,57048,57079,'OP_EqUpdateGhostCmd',603,1),(8710,57048,57079,'OP_EqSetControlGhostCmd',604,1),(8711,57048,57079,'OP_EqSetPOVGhostCmd',605,1),(8712,57048,57079,'OP_EqHearCombatCmd',606,1),(8713,57048,57079,'OP_EqHearSpellCastCmd',607,1),(8714,57048,57079,'OP_EQHearProcCmd',608,1),(8715,57048,57079,'OP_EQHearResEffectCmd',609,1),(8716,57048,57079,'OP_EqHearSpellInterruptCmd',610,1),(8717,57048,57079,'OP_EqHearSpellFizzleCmd',611,1),(8718,57048,57079,'OP_EqHearConsiderCmd',612,1),(8719,57048,57079,'OP_EqUpdateSubClassesCmd',613,1),(8720,57048,57079,'OP_EqCreateListBoxCmd',614,1),(8721,57048,57079,'OP_EqSetDebugPathPointsCmd',615,1),(8722,57048,57079,'OP_EqCannedEmoteCmd',617,1),(8723,57048,57079,'OP_EqStateCmd',618,1),(8724,57048,57079,'OP_EqPlaySoundCmd',619,1),(8725,57048,57079,'OP_EqPlaySound3DCmd',620,1),(8726,57048,57079,'OP_EqPlayVoiceCmd',621,1),(8727,57048,57079,'OP_EqHearDrowningCmd',622,1),(8728,57048,57079,'OP_EqHearDeathCmd',623,1),(8729,57048,57079,'OP_EqGroupMemberRemovedCmd',624,1),(8730,57048,57079,'OP_EqHearChainEffectCmd',625,1),(8731,57048,57079,'OP_EqReceiveOfferCmd',626,1),(8732,57048,57079,'OP_EqInspectPCResultsCmd',627,1),(8733,57048,57079,'OP_EqDrawablePathGraphCmd',628,1),(8734,57048,57079,'OP_EqDialogOpenCmd',629,1),(8735,57048,57079,'OP_EqDialogCloseCmd',630,1),(8736,57048,57079,'OP_EqFactionUpdateCmd',631,1),(8737,57048,57079,'OP_EqCollectionUpdateCmd',632,1),(8738,57048,57079,'OP_EqCollectionFilterCmd',633,1),(8739,57048,57079,'OP_EqCollectionItemCmd',634,1),(8740,57048,57079,'OP_EqQuestJournalUpdateCmd',635,1),(8741,57048,57079,'OP_EqMentoring',636,1),(8742,57048,57079,'OP_EqQuestJournalReplyCmd',637,1),(8743,57048,57079,'OP_EqQuestGroupCmd',638,1),(8744,57048,57079,'OP_EqUpdateMerchantCmd',639,1),(8745,57048,57079,'OP_EqUpdateStoreCmd',640,1),(8746,57048,57079,'OP_EqUpdatePlayerTradeCmd',641,1),(8747,57048,57079,'OP_EqHelpPathCmd',642,1),(8748,57048,57079,'OP_EqHelpPathClearCmd',643,1),(8749,57048,57079,'OP_EqUpdateBankCmd',644,1),(8750,57048,57079,'OP_EqExamineInfoCmd',645,1),(8751,57048,57079,'OP_EqCloseWindowCmd',646,1),(8752,57048,57079,'OP_EqUpdateLootCmd',647,1),(8753,57048,57079,'OP_EqJunctionListCmd',648,1),(8754,57048,57079,'OP_EqShowDeathWindowCmd',649,1),(8755,57048,57079,'OP_EqDisplaySpellFailCmd',650,1),(8756,57048,57079,'OP_EqSpellCastStartCmd',651,1),(8757,57048,57079,'OP_EqSpellCastEndCmd',652,1),(8758,57048,57079,'OP_EqResurrectedCmd',653,1),(8759,57048,57079,'OP_EqChoiceWinCmd',654,1),(8760,57048,57079,'OP_EqSetDefaultVerbCmd',655,1),(8761,57048,57079,'OP_EqInstructionWindowCmd',656,1),(8762,57048,57079,'OP_EqInstructionWindowCloseCmd',657,1),(8763,57048,57079,'OP_EqInstructionWindowGoalCmd',658,1),(8764,57048,57079,'OP_EqInstructionWindowTaskCmd',659,1),(8765,57048,57079,'OP_EqEnableGameEventCmd',660,1),(8766,57048,57079,'OP_EqShowWindowCmd',661,1),(8767,57048,57079,'OP_EqEnableWindowCmd',662,1),(8768,57048,57079,'OP_EqFlashWindowCmd',663,1),(8769,57048,57079,'OP_EqHearPlayFlavorCmd',665,1),(8770,57048,57079,'OP_EqUpdateSignWidgetCmd',666,1),(8771,57048,57079,'OP_EqDebugPVDCmd',667,1),(8772,57048,57079,'OP_EqShowBookCmd',668,1),(8773,57048,57079,'OP_EqQuestionnaireCmd',669,1),(8774,57048,57079,'OP_EqGetProbsCmd',671,1),(8775,57048,57079,'OP_EqHearHealCmd',672,1),(8776,57048,57079,'OP_EqChatChannelUpdateCmd',673,1),(8777,57048,57079,'OP_EqWhoChannelQueryReplyCmd',674,1),(8778,57048,57079,'OP_EqAvailWorldChannelsCmd',675,1),(8779,57048,57079,'OP_EqUpdateTargetCmd',676,1),(8780,57048,57079,'OP_BrokerSellList',677,1),(8781,57048,57079,'OP_EqConsignmentItemsCmd',678,1),(8782,57048,57079,'OP_EqStartBrokerCmd',680,1),(8783,57048,57079,'OP_EqMapExplorationCmd',681,1),(8784,57048,57079,'OP_EqStoreLogCmd',682,1),(8785,57048,57079,'OP_EqSpellMoveToRangeAndRetryCmd',683,1),(8786,57048,57079,'OP_EqUpdatePlayerMailCmd',684,1),(8787,57048,57079,'OP_GuildStatusUpdate',687,1),(8788,57048,57079,'OP_EqArenaResultsCmd',688,1),(8789,57048,57079,'OP_EqGuildBankEventActionCmd',689,1),(8790,57048,57079,'OP_EqGuildBankExamineInfoCmd',690,1),(8791,57048,57079,'OP_EqHearSpellNoLandCmd',691,1),(8792,57048,57079,'OP_Lottery',692,1),(8793,57048,57079,'OP_GuildRecruitingMemberInfo',693,1),(8794,57048,57079,'OP_GuildRecruiting',694,1),(8795,57048,57079,'OP_GuildRecruitingDetails',695,1),(8796,57048,57079,'OP_GuildRecruitingImage',696,1),(8797,57048,57079,'OP_TradeskillList',697,1),(8798,57048,57079,'OP_CharRenamed',698,1),(8799,57048,57079,'OP_UseAdornment',708,1),(8800,57048,57079,'OP_ExpPurchWindow',714,1),(8801,57048,57079,'OP_PointOfInterest',718,1),(8802,57048,57079,'OP_PointOfInterest2',719,1),(8803,57048,57079,'OP_TraitsList',720,1),(8804,57048,57079,'OP_CustomizeHouseDisplay',723,1),(8805,57048,57079,'OP_VoiceChatServer',724,1),(8806,57048,57079,'OP_SupplyDepot',728,1),(8807,57048,57079,'OP_EQHearThreatCmd',729,1),(8808,57048,57079,'OP_RecipeList',730,1),(8809,57048,57079,'OP_Research',731,1),(8810,57048,57079,'OP_CharacterCurrency',732,1),(8811,57048,57079,'OP_CharacterAchievements',733,1),(8812,57048,57079,'OP_AchievementUpdateMsg',734,1),(8813,57048,57079,'OP_EQHearDispellCmd',735,1),(8814,57048,57079,'OP_JournalQuestStoryline',736,1),(8815,57048,57079,'OP_DungeonPlayAsAvatarList',737,1),(8816,57048,57079,'OP_DungeonPlayAsAvatarSelected',738,1),(8817,57048,57079,'OP_MercHireWindow',739,1),(8818,57048,57079,'OP_MercUnknown',740,1),(8819,57048,57079,'OP_Unknown',753,1),(9289,57048,57079,'OP_DailyObjectives',594,1),(9290,1193,1195,'OP_Weakness',575,1),(9291,1198,1199,'OP_Weakness',575,1),(9292,1204,1205,'OP_Weakness',576,1),(9293,1208,1208,'OP_Weakness',577,1),(9294,57000,57002,'OP_Weakness',577,1),(9295,57003,57014,'OP_Weakness',578,1),(9296,57032,57047,'OP_Weakness',578,1),(9297,57048,57079,'OP_Weakness',580,1),(9298,57080,57095,'OP_LoginRequestMsg',0,1),(9299,57080,57095,'OP_LoginByNumRequestMsg',1,1),(9300,57080,57095,'OP_WSLoginRequestMsg',2,1),(9301,57080,57095,'OP_ESLoginRequestMsg',3,1),(9302,57080,57095,'OP_LoginReplyMsg',4,1),(9303,57080,57095,'OP_WSStatusReplyMsg',5,1),(9304,57080,57095,'OP_WorldStatusChangeMsg',6,1),(9305,57080,57095,'OP_AllWSDescRequestMsg',7,1),(9306,57080,57095,'OP_WorldListMsg',8,1),(9307,57080,57095,'OP_AllCharactersDescRequestMsg',9,1),(9308,57080,57095,'OP_AllCharactersDescReplyMsg',10,1),(9309,57080,57095,'OP_CreateCharacterRequestMsg',11,1),(9310,57080,57095,'OP_CreateCharacterReplyMsg',12,1),(9311,57080,57095,'OP_WSCreateCharacterRequestMsg',13,1),(9312,57080,57095,'OP_WSCreateCharacterReplyMsg',14,1),(9313,57080,57095,'OP_ReskinCharacterRequestMsg',15,1),(9314,57080,57095,'OP_DeleteCharacterRequestMsg',16,1),(9315,57080,57095,'OP_DeleteCharacterReplyMsg',17,1),(9316,57080,57095,'OP_PlayCharacterRequestMsg',18,1),(9317,57080,57095,'OP_PlayCharacterReplyMsg',19,1),(9318,57080,57095,'OP_ExpectClientAsCharacterReplyMs',22,1),(9319,57080,57095,'OP_ServerPlayCharacterRequestMsg',23,1),(9320,57080,57095,'OP_ServerPlayCharacterReplyMsg',24,1),(9321,57080,57095,'OP_ESInitMsg',25,1),(9322,57080,57095,'OP_ESReadyForClientsMsg',26,1),(9323,57080,57095,'OP_CreateZoneInstanceMsg',29,1),(9324,57080,57095,'OP_ZoneInstanceCreateReplyMsg',30,1),(9325,57080,57095,'OP_ZoneInstanceDestroyedMsg',31,1),(9326,57080,57095,'OP_ExpectClientAsCharacterRequest',32,1),(9327,57080,57095,'OP_ZoneInfoMsg',33,1),(9328,57080,57095,'OP_DoneLoadingZoneResourcesMsg',34,1),(9329,57080,57095,'OP_DoneSendingInitialEntitiesMsg',35,1),(9330,57080,57095,'OP_DoneLoadingEntityResourcesMsg',36,1),(9331,57080,57095,'OP_PredictionUpdateMsg',37,1),(9332,57080,57095,'OP_UpdatePositionMsg',39,1),(9333,57080,57095,'OP_SetRemoteCmdsMsg',41,1),(9334,57080,57095,'OP_RemoteCmdMsg',42,1),(9335,57080,57095,'OP_GameWorldTimeMsg',43,1),(9336,57080,57095,'OP_MOTDMsg',44,1),(9337,57080,57095,'OP_ZoneMOTDMsg',45,1),(9338,57080,57095,'OP_AvatarCreatedMsg',46,1),(9339,57080,57095,'OP_AvatarDestroyedMsg',47,1),(9340,57080,57095,'OP_RequestCampMsg',50,1),(9341,57080,57095,'OP_CampStartedMsg',51,1),(9342,57080,57095,'OP_CampAbortedMsg',52,1),(9343,57080,57095,'OP_WhoQueryRequestMsg',53,1),(9344,57080,57095,'OP_WhoQueryReplyMsg',54,1),(9345,57080,57095,'OP_MonitorReplyMsg',55,1),(9346,57080,57095,'OP_MonitorCharacterListMsg',56,1),(9347,57080,57095,'OP_MonitorCharacterListRequestMsg',57,1),(9348,57080,57095,'OP_ClientCmdMsg',58,1),(9349,57080,57095,'OP_DispatchESMsg',59,1),(9350,57080,57095,'OP_DispatchClientCmdMsg',60,1),(9351,57080,57095,'OP_UpdateTargetMsg',61,1),(9352,57080,57095,'OP_UpdateTargetLocMsg',62,1),(9353,57080,57095,'OP_UpdateCharacterSheetMsg',63,1),(9354,57080,57095,'OP_CharacterPet',64,1),(9355,57080,57095,'OP_CharacterMerc',65,1),(9356,57080,57095,'OP_UpdateSpellBookMsg',66,1),(9357,57080,57095,'OP_UpdateInventoryMsg',68,1),(9358,57080,57095,'OP_AfterInvSpellUpdate',69,1),(9359,57080,57095,'OP_UpdateRecipeBookMsg',70,1),(9360,57080,57095,'OP_RequestRecipeDetailsMsg',71,1),(9361,57080,57095,'OP_RecipeDetailsMsg',72,1),(9362,57080,57095,'OP_UpdateSkillBookMsg',73,1),(9363,57080,57095,'OP_UpdateSkillsMsg',74,1),(9364,57080,57095,'OP_UpdateOpportunityMsg',75,1),(9365,57080,57095,'OP_ChangeZoneMsg',77,1),(9366,57080,57095,'OP_ClientTeleportRequestMsg',78,1),(9367,57080,57095,'OP_TeleportWithinZoneMsg',79,1),(9368,57080,57095,'OP_TeleportWithinZoneNoReloadMsg',80,1),(9369,57080,57095,'OP_MigrateClientToZoneRequestMsg',81,1),(9370,57080,57095,'OP_MigrateClientToZoneReplyMsg',82,1),(9371,57080,57095,'OP_ReadyToZoneMsg',84,1),(9372,57080,57095,'OP_RemoveClientFromGroupMsg',85,1),(9373,57080,57095,'OP_RemoveGroupFromGroupMsg',86,1),(9374,57080,57095,'OP_MakeGroupLeaderMsg',87,1),(9375,57080,57095,'OP_GroupCreatedMsg',88,1),(9376,57080,57095,'OP_GroupDestroyedMsg',89,1),(9377,57080,57095,'OP_GroupMemberAddedMsg',90,1),(9378,57080,57095,'OP_GroupMemberRemovedMsg',91,1),(9379,57080,57095,'OP_GroupRemovedFromGroupMsg',92,1),(9380,57080,57095,'OP_GroupLeaderChangedMsg',93,1),(9381,57080,57095,'OP_GroupResendOOZDataMsg',94,1),(9382,57080,57095,'OP_GroupSettingsChangedMsg',95,1),(9383,57080,57095,'OP_OutOfZoneMemberDataMsg',96,1),(9384,57080,57095,'OP_SendLatestRequestMsg',97,1),(9385,57080,57095,'OP_ClearDataMsg',98,1),(9386,57080,57095,'OP_SetSocialMsg',99,1),(9387,57080,57095,'OP_ESStatusMsg',100,1),(9388,57080,57095,'OP_ESZoneInstanceStatusMsg',101,1),(9389,57080,57095,'OP_ZonesStatusRequestMsg',102,1),(9390,57080,57095,'OP_ZonesStatusMsg',103,1),(9391,57080,57095,'OP_ESWeatherRequestMsg',104,1),(9392,57080,57095,'OP_ESWeatherRequestEndMsg',105,1),(9393,57080,57095,'OP_DialogSelectMsg',109,1),(9394,57080,57095,'OP_DialogCloseMsg',110,1),(9395,57080,57095,'OP_RemoveSpellEffectMsg',111,1),(9396,57080,57095,'OP_RemoveConcentrationMsg',112,1),(9397,57080,57095,'OP_QuestJournalOpenMsg',113,1),(9398,57080,57095,'OP_QuestJournalInspectMsg',114,1),(9399,57080,57095,'OP_QuestJournalSetVisibleMsg',115,1),(9400,57080,57095,'OP_QuestJournalWaypointMsg',116,1),(9401,57080,57095,'OP_CreateGuildRequestMsg',119,1),(9402,57080,57095,'OP_CreateGuildReplyMsg',120,1),(9403,57080,57095,'OP_GuildsayMsg',121,1),(9404,57080,57095,'OP_FellowshipExpMsg',122,1),(9405,57080,57095,'OP_DeleteGuildMsg',123,1),(9406,57080,57095,'OP_GuildUpdateMsg',124,1),(9407,57080,57095,'OP_ConsignmentCloseStoreMsg',125,1),(9408,57080,57095,'OP_ConsignItemRequestMsg',126,1),(9409,57080,57095,'OP_ConsignItemResponseMsg',127,1),(9410,57080,57095,'OP_PurchaseConsignmentRequestMsg',128,1),(9411,57080,57095,'OP_LikeOption',136,1),(9412,57080,57095,'OP_PublishHouse',138,1),(9413,57080,57095,'OP_PlayerMadeInstancesScreen',139,1),(9414,57080,57095,'OP_PlayerMadeInstances',140,1),(9415,57080,57095,'OP_HouseDeletedRemotelyMsg',142,1),(9416,57080,57095,'OP_UpdateHouseDataMsg',143,1),(9417,57080,57095,'OP_UpdateHouseAccessDataMsg',144,1),(9418,57080,57095,'OP_PlayerHouseBaseScreenMsg',145,1),(9419,57080,57095,'OP_PlayerHousePurchaseScreenMsg',146,1),(9420,57080,57095,'OP_PlayerHouseAccessUpdateMsg',147,1),(9421,57080,57095,'OP_PlayerHouseDisplayStatusMsg',148,1),(9422,57080,57095,'OP_PlayerHouseCloseUIMsg',149,1),(9423,57080,57095,'OP_BuyPlayerHouseMsg',150,1),(9424,57080,57095,'OP_BuyPlayerHouseTintMsg',151,1),(9425,57080,57095,'OP_CollectAllHouseItemsMsg',152,1),(9426,57080,57095,'OP_RelinquishHouseMsg',153,1),(9427,57080,57095,'OP_EnterHouseMsg',154,1),(9428,57080,57095,'OP_ExitHouseMsg',155,1),(9429,57080,57095,'OP_HouseDefaultAccessSetMsg',156,1),(9430,57080,57095,'OP_HouseAccessSetMsg',157,1),(9431,57080,57095,'OP_HouseAccessRemoveMsg',158,1),(9432,57080,57095,'OP_PayHouseUpkeepMsg',159,1),(9433,57080,57095,'OP_MoveableObjectPlacementCriteri',160,1),(9434,57080,57095,'OP_EnterMoveObjectModeMsg',161,1),(9435,57080,57095,'OP_PositionMoveableObject',162,1),(9436,57080,57095,'OP_CancelMoveObjectModeMsg',163,1),(9437,57080,57095,'OP_ShaderCustomizationMsg',164,1),(9438,57080,57095,'OP_ReplaceableSubMeshesMsg',165,1),(9439,57080,57095,'OP_HouseCustomizationScreenMsg',166,1),(9440,57080,57095,'OP_CustomizationPurchaseRequestMs',167,1),(9441,57080,57095,'OP_CustomizationSetRequestMsg',168,1),(9442,57080,57095,'OP_CustomizationReplyMsg',169,1),(9443,57080,57095,'OP_TintWidgetsMsg',170,1),(9444,57080,57095,'OP_ExamineConsignmentRequestMsg',171,1),(9445,57080,57095,'OP_ExamineConsignmentResponseMsg',172,1),(9446,57080,57095,'OP_UISettingsResponseMsg',173,1),(9447,57080,57095,'OP_UIResetMsg',174,1),(9448,57080,57095,'OP_KeymapLoadMsg',175,1),(9449,57080,57095,'OP_KeymapNoneMsg',176,1),(9450,57080,57095,'OP_KeymapDataMsg',177,1),(9451,57080,57095,'OP_KeymapSaveMsg',178,1),(9452,57080,57095,'OP_DispatchSpellCmdMsg',179,1),(9453,57080,57095,'OP_EntityVerbsRequestMsg',180,1),(9454,57080,57095,'OP_EntityVerbsReplyMsg',181,1),(9455,57080,57095,'OP_EntityVerbsVerbMsg',182,1),(9456,57080,57095,'OP_ChatRelationshipUpdateMsg',184,1),(9457,57080,57095,'OP_LootItemsRequestMsg',185,1),(9458,57080,57095,'OP_StoppedLootingMsg',186,1),(9459,57080,57095,'OP_SitMsg',187,1),(9460,57080,57095,'OP_StandMsg',188,1),(9461,57080,57095,'OP_SatMsg',189,1),(9462,57080,57095,'OP_StoodMsg',190,1),(9463,57080,57095,'OP_ClearForTakeOffMsg',191,1),(9464,57080,57095,'OP_ReadyForTakeOffMsg',192,1),(9465,57080,57095,'OP_ShowIllusionsMsg',193,1),(9466,57080,57095,'OP_HideIllusionsMsg',194,1),(9467,57080,57095,'OP_ExamineItemRequestMsg',195,1),(9468,57080,57095,'OP_ReadBookPageMsg',196,1),(9469,57080,57095,'OP_DefaultGroupOptionsRequestMsg',197,1),(9470,57080,57095,'OP_DefaultGroupOptionsMsg',198,1),(9471,57080,57095,'OP_GroupOptionsMsg',199,1),(9472,57080,57095,'OP_DisplayGroupOptionsScreenMsg',200,1),(9473,57080,57095,'OP_PetOptions',201,1),(9474,57080,57095,'OP_DisplayInnVisitScreenMsg',202,1),(9475,57080,57095,'OP_DumpSchedulerMsg',203,1),(9476,57080,57095,'OP_LSCheckAcctLockMsg',204,1),(9477,57080,57095,'OP_WSAcctLockStatusMsg',205,1),(9478,57080,57095,'OP_RequestHelpRepathMsg',206,1),(9479,57080,57095,'OP_RequestTargetLocMsg',207,1),(9480,57080,57095,'OP_UpdateMotdMsg',208,1),(9481,57080,57095,'OP_DestUpdateReq',210,1),(9482,57080,57095,'OP_PerformPlayerKnockbackMsg',213,1),(9483,57080,57095,'OP_PerformCameraShakeMsg',214,1),(9484,57080,57095,'OP_PopulateSkillMapsMsg',215,1),(9485,57080,57095,'OP_CancelledFeignMsg',216,1),(9486,57080,57095,'OP_SysClient',218,1),(9487,57080,57095,'OP_ShowCreateFromRecipeUIMsg',219,1),(9488,57080,57095,'OP_CancelCreateFromRecipeMsg',220,1),(9489,57080,57095,'OP_BeginItemCreationMsg',221,1),(9490,57080,57095,'OP_StopItemCreationMsg',222,1),(9491,57080,57095,'OP_ShowItemCreationProcessUIMsg',223,1),(9492,57080,57095,'OP_UpdateItemCreationProcessUIMsg',224,1),(9493,57080,57095,'OP_DisplayTSEventReactionMsg',225,1),(9494,57080,57095,'OP_ShowRecipeBookMsg',226,1),(9495,57080,57095,'OP_KnowledgebaseRequestMsg',227,1),(9496,57080,57095,'OP_KnowledgebaseResponseMsg',228,1),(9497,57080,57095,'OP_CSTicketHeaderRequestMsg',229,1),(9498,57080,57095,'OP_CSTicketInfoMsg',230,1),(9499,57080,57095,'OP_CSTicketCommentRequestMsg',231,1),(9500,57080,57095,'OP_CSTicketCommentResponseMsg',232,1),(9501,57080,57095,'OP_CSTicketCreateMsg',233,1),(9502,57080,57095,'OP_CSTicketAddCommentMsg',234,1),(9503,57080,57095,'OP_CSTicketDeleteMsg',235,1),(9504,57080,57095,'OP_CSTicketChangeNotificationMsg',236,1),(9505,57080,57095,'OP_WorldDataUpdateMsg',237,1),(9506,57080,57095,'OP_KnownLanguagesMsg',238,1),(9507,57080,57095,'OP_LsRequestClientCrashLogMsg',239,1),(9508,57080,57095,'OP_LsClientBaselogReplyMsg',240,1),(9509,57080,57095,'OP_LsClientCrashlogReplyMsg',241,1),(9510,57080,57095,'OP_LsClientAlertlogReplyMsg',242,1),(9511,57080,57095,'OP_LsClientVerifylogReplyMsg',243,1),(9512,57080,57095,'OP_ClientTeleportToLocationMsg',244,1),(9513,57080,57095,'OP_UpdateClientPredFlagsMsg',245,1),(9514,57080,57095,'OP_ChangeServerControlFlagMsg',246,1),(9515,57080,57095,'OP_CSToolsRequestMsg',247,1),(9516,57080,57095,'OP_CSToolsResponseMsg',248,1),(9517,57080,57095,'OP_AddSocialStructureStandingMsg',249,1),(9518,57080,57095,'OP_CreateBoatTransportsMsg',250,1),(9519,57080,57095,'OP_PositionBoatTransportMsg',251,1),(9520,57080,57095,'OP_MigrateBoatTransportMsg',252,1),(9521,57080,57095,'OP_MigrateBoatTransportReplyMsg',253,1),(9522,57080,57095,'OP_DisplayDebugNLLPointsMsg',254,1),(9523,57080,57095,'OP_ExamineInfoRequestMsg',255,1),(9524,57080,57095,'OP_QuickbarInitMsg',256,1),(9525,57080,57095,'OP_QuickbarUpdateMsg',257,1),(9526,57080,57095,'OP_MacroInitMsg',258,1),(9527,57080,57095,'OP_MacroUpdateMsg',259,1),(9528,57080,57095,'OP_QuestionnaireMsg',260,1),(9529,57080,57095,'OP_LevelChangedMsg',261,1),(9530,57080,57095,'OP_SpellGainedMsg',262,1),(9531,57080,57095,'OP_EncounterBrokenMsg',263,1),(9532,57080,57095,'OP_OnscreenMsgMsg',264,1),(9533,57080,57095,'OP_DisplayWarningMsg',265,1),(9534,57080,57095,'OP_ModifyGuildMsg',266,1),(9535,57080,57095,'OP_GuildEventMsg',267,1),(9536,57080,57095,'OP_GuildEventAddMsg',268,1),(9537,57080,57095,'OP_GuildEventActionMsg',269,1),(9538,57080,57095,'OP_GuildEventListMsg',270,1),(9539,57080,57095,'OP_RequestGuildEventDetailsMsg',271,1),(9540,57080,57095,'OP_GuildEventDetailsMsg',272,1),(9541,57080,57095,'OP_RequestGuildInfoMsg',273,1),(9542,57080,57095,'OP_GuildBankActionMsg',274,1),(9543,57080,57095,'OP_GuildBankActionResponseMsg',275,1),(9544,57080,57095,'OP_GuildBankItemDetailsRequestMsg',276,1),(9545,57080,57095,'OP_GuildBankItemDetailsResponseMs',277,1),(9546,57080,57095,'OP_GuildBankUpdateMsg',278,1),(9547,57080,57095,'OP_GuildBankEventListMsg',279,1),(9548,57080,57095,'OP_RequestGuildBankEventDetailsMs',280,1),(9549,57080,57095,'OP_RewardPackMsg',281,1),(9550,57080,57095,'OP_RenameGuildMsg',282,1),(9551,57080,57095,'OP_ZoneToFriendRequestMsg',283,1),(9552,57080,57095,'OP_ZoneToFriendReplyMsg',284,1),(9553,57080,57095,'OP_ChatCreateChannelMsg',285,1),(9554,57080,57095,'OP_ChatJoinChannelMsg',286,1),(9555,57080,57095,'OP_ChatWhoChannelMsg',287,1),(9556,57080,57095,'OP_ChatLeaveChannelMsg',288,1),(9557,57080,57095,'OP_ChatTellChannelMsg',289,1),(9558,57080,57095,'OP_ChatTellUserMsg',290,1),(9559,57080,57095,'OP_ChatToggleFriendMsg',291,1),(9560,57080,57095,'OP_BrokerAddBag',292,1),(9561,57080,57095,'OP_BrokerRemoveBag',293,1),(9562,57080,57095,'OP_ChatToggleIgnoreMsg',294,1),(9563,57080,57095,'OP_ChatSendFriendsMsg',295,1),(9564,57080,57095,'OP_ChatSendIgnoresMsg',296,1),(9565,57080,57095,'OP_QuestReward',320,1),(9566,57080,57095,'OP_ChatFiltersMsg',335,1),(9567,57080,57095,'OP_MailGetMessageMsg',338,1),(9568,57080,57095,'OP_MailSendMessageMsg',339,1),(9569,57080,57095,'OP_MailDeleteMessageMsg',340,1),(9570,57080,57095,'OP_MailGetHeadersReplyMsg',341,1),(9571,57080,57095,'OP_MailGetMessageReplyMsg',342,1),(9572,57080,57095,'OP_MailSendMessageReplyMsg',343,1),(9573,57080,57095,'OP_MailCommitSendMessageMsg',344,1),(9574,57080,57095,'OP_MailSendSystemMessageMsg',345,1),(9575,57080,57095,'OP_MailRemoveAttachFromMailMsg',346,1),(9576,57080,57095,'OP_WaypointRequestMsg',348,1),(9577,57080,57095,'OP_WaypointReplyMsg',349,1),(9578,57080,57095,'OP_WaypointSelectMsg',350,1),(9579,57080,57095,'OP_WaypointUpdateMsg',351,1),(9580,57080,57095,'OP_CharNameChangedMsg',352,1),(9581,57080,57095,'OP_ShowZoneTeleporterDestinations',353,1),(9582,57080,57095,'OP_SelectZoneTeleporterDestinatio',354,1),(9583,57080,57095,'OP_ReloadLocalizedTxtMsg',355,1),(9584,57080,57095,'OP_RequestGuildMembershipMsg',356,1),(9585,57080,57095,'OP_GuildMembershipResponseMsg',357,1),(9586,57080,57095,'OP_LeaveGuildNotifyMsg',358,1),(9587,57080,57095,'OP_JoinGuildNotifyMsg',359,1),(9588,57080,57095,'OP_AvatarUpdateMsg',360,1),(9589,57080,57095,'OP_BioUpdateMsg',362,1),(9590,57080,57095,'OP_InspectPlayerMsg',363,1),(9591,57080,57095,'OP_WSServerLockMsg',364,1),(9592,57080,57095,'OP_LSServerLockMsg',365,1),(9593,57080,57095,'OP_WSServerHideMsg',366,1),(9594,57080,57095,'OP_CsCategoryRequestMsg',367,1),(9595,57080,57095,'OP_CsCategoryResponseMsg',368,1),(9596,57080,57095,'OP_KnowledgeWindowSlotMappingMsg',369,1),(9597,57080,57095,'OP_AFKUpdateMsg',370,1),(9598,57080,57095,'OP_AnonUpdateMsg',371,1),(9599,57080,57095,'OP_UpdateActivePublicZonesMsg',372,1),(9600,57080,57095,'OP_UnknownNpcMsg',373,1),(9601,57080,57095,'OP_PromoFlagsDetailsMsg',374,1),(9602,57080,57095,'OP_ConsignViewCreateMsg',375,1),(9603,57080,57095,'OP_ConsignViewGetPageMsg',376,1),(9604,57080,57095,'OP_ConsignViewReleaseMsg',377,1),(9605,57080,57095,'OP_ConsignRemoveItemsMsg',378,1),(9606,57080,57095,'OP_UpdateDebugRadiiMsg',379,1),(9607,57080,57095,'OP_ReportMsg',380,1),(9608,57080,57095,'OP_UpdateRaidMsg',381,1),(9609,57080,57095,'OP_ConsignViewSortMsg',383,1),(9610,57080,57095,'OP_TitleUpdateMsg',384,1),(9611,57080,57095,'OP_ClientFellMsg',385,1),(9612,57080,57095,'OP_ClientInDeathRegionMsg',386,1),(9613,57080,57095,'OP_CampClientMsg',387,1),(9614,57080,57095,'OP_CSToolAccessResponseMsg',388,1),(9615,57080,57095,'OP_UpdateGroupMemberDataMsg',388,1),(9616,57080,57095,'OP_TrackingUpdateMsg',389,1),(9617,57080,57095,'OP_BeginTrackingMsg',390,1),(9618,57080,57095,'OP_StopTrackingMsg',391,1),(9619,57080,57095,'OP_GetAvatarAccessRequestForCSToo',393,1),(9620,57080,57095,'OP_AdvancementRequestMsg',394,1),(9621,57080,57095,'OP_MapFogDataInitMsg',395,1),(9622,57080,57095,'OP_MapFogDataUpdateMsg',396,1),(9623,57080,57095,'OP_CloseGroupInviteWindowMsg',397,1),(9624,57080,57095,'OP_WorldPingMsg',399,1),(9625,57080,57095,'OP_MoveLogUpdateMsg',400,1),(9626,57080,57095,'OP_OfferQuestMsg',401,1),(9627,57080,57095,'OP_WorldShutdownUpdateMsg',403,1),(9628,57080,57095,'OP_DisplayMailScreenMsg',404,1),(9629,57080,57095,'OP_ClientIdleBeginMsg',405,1),(9630,57080,57095,'OP_ClientIdleEndMsg',406,1),(9631,57080,57095,'OP_PurchaseConsignmentLoreCheckRe',407,1),(9632,57080,57095,'OP_NotifyApprenticeStoppedMentori',408,1),(9633,57080,57095,'OP_CorruptedClientMsg',409,1),(9634,57080,57095,'OP_WorldDataChangeMsg',410,1),(9635,57080,57095,'OP_MailEventNotificationMsg',411,1),(9636,57080,57095,'OP_RestartZoneMsg',412,1),(9637,57080,57095,'OP_FlightPathsMsg',413,1),(9638,57080,57095,'OP_CharacterLinkdeadMsg',414,1),(9639,57080,57095,'OP_CharTransferStartRequestMsg',415,1),(9640,57080,57095,'OP_CharTransferStartReplyMsg',416,1),(9641,57080,57095,'OP_CharTransferRequestMsg',417,1),(9642,57080,57095,'OP_CharTransferReplyMsg',418,1),(9643,57080,57095,'OP_CharTransferRollbackRequestMsg',419,1),(9644,57080,57095,'OP_CharTransferCommitRequestMsg',420,1),(9645,57080,57095,'OP_CharTransferRollbackReplyMsg',421,1),(9646,57080,57095,'OP_CharTransferCommitReplyMsg',422,1),(9647,57080,57095,'OP_GetCharacterSerializedRequestM',423,1),(9648,57080,57095,'OP_GetCharacterSerializedReplyMsg',424,1),(9649,57080,57095,'OP_CreateCharFromCBBRequestMsg',425,1),(9650,57080,57095,'OP_CreateCharFromCBBReplyMsg',426,1),(9651,57080,57095,'OP_HousingDataChangedMsg',427,1),(9652,57080,57095,'OP_HousingRestoreMsg',428,1),(9653,57080,57095,'OP_AuctionItem',429,1),(9654,57080,57095,'OP_AuctionItemReply',430,1),(9655,57080,57095,'OP_AuctionCoin',431,1),(9656,57080,57095,'OP_AuctionCoinReply',432,1),(9657,57080,57095,'OP_AuctionCharacter',433,1),(9658,57080,57095,'OP_AuctionCharacterReply',434,1),(9659,57080,57095,'OP_AuctionCommitMsg',435,1),(9660,57080,57095,'OP_AuctionAbortMsg',436,1),(9661,57080,57095,'OP_CharTransferValidateRequestMsg',437,1),(9662,57080,57095,'OP_CharTransferValidateReplyMsg',438,1),(9663,57080,57095,'OP_RaceRestrictionMsg',439,1),(9664,57080,57095,'OP_SetInstanceDisplayNameMsg',440,1),(9665,57080,57095,'OP_GetAuctionAssetIDMsg',441,1),(9666,57080,57095,'OP_GetAuctionAssetIDReplyMsg',442,1),(9667,57080,57095,'OP_ResendWorldChannelsMsg',443,1),(9668,57080,57095,'OP_DisplayExchangeScreenMsg',444,1),(9669,57080,57095,'OP_ArenaGameTypesMsg',445,1),(9670,57080,57095,'OP_AuditAuctionEventMsg',446,1),(9671,57080,57095,'OP_InviteRequestMsg',447,1),(9672,57080,57095,'OP_InviteResponseMsg',448,1),(9673,57080,57095,'OP_InviteTargetResponseMsg',449,1),(9674,57080,57095,'OP_InspectPlayerRequestMsg',450,1),(9675,57080,57095,'OP_DispatchMsg',451,1),(9676,57080,57095,'OP_DisplayEventMsg',452,1),(9677,57080,57095,'OP_PrePossessionMsg',453,1),(9678,57080,57095,'OP_PostPossessionMsg',454,1),(9679,57080,57095,'OP_ArenaCreate',456,1),(9680,57080,57095,'OP_ArenaList',457,1),(9681,57080,57095,'OP_ArenaWindow',465,1),(9682,57080,57095,'OP_HouseItemsList',484,1),(9683,57080,57095,'OP_CurrentPet',485,1),(9684,57080,57095,'OP_AdventureList',488,1),(9685,57080,57095,'OP_CancelSpellCast',489,1),(9686,57080,57095,'OP_ClearForLandingMsg',491,1),(9687,57080,57095,'OP_UpdateTitleCmd',494,1),(9688,57080,57095,'OP_AttackAllowed',500,1),(9689,57080,57095,'OP_AttackNotAllowed',501,1),(9690,57080,57095,'OP_BagOptions',502,1),(9691,57080,57095,'OP_LFGGroupSearch',504,1),(9692,57080,57095,'OP_CharacterHousingList',507,1),(9693,57080,57095,'OP_DressingRoom',510,1),(9694,57080,57095,'OP_PlayLon',511,1),(9695,57080,57095,'OP_SkillInfoRequest',514,1),(9696,57080,57095,'OP_SkillInfoResponse',515,1),(9697,57080,57095,'OP_LFGUpdateMsg',518,1),(9698,57080,57095,'OP_BadLanguageFilter',519,1),(9699,57080,57095,'OP_VoiceChatChannel',520,1),(9700,57080,57095,'OP_MapRequest',521,1),(9701,57080,57095,'OP_MarketFundsUpdate',526,1),(9702,57080,57095,'OP_UIEvent',527,1),(9703,57080,57095,'OP_MarketAddFundsRequest',528,1),(9704,57080,57095,'OP_MarketAddFundsReply',529,1),(9705,57080,57095,'OP_MarketPurchase',531,1),(9706,57080,57095,'OP_MarketPlacePrices',532,1),(9707,57080,57095,'OP_MarketPlaceItems',537,1),(9708,57080,57095,'OP_RecipeBook',538,1),(9709,57080,57095,'OP_CreateCharacterDungeon',547,1),(9710,57080,57095,'OP_DungeonMakerEnter',548,1),(9711,57080,57095,'OP_DungeonMakerItemRequest',550,1),(9712,57080,57095,'OP_CharacterCreatedDungeons',551,1),(9713,57080,57095,'OP_DungeonMakerToolboxList',552,1),(9714,57080,57095,'OP_DungeonMakerUnknown',553,1),(9715,57080,57095,'OP_DungeonMakerUnknown1',554,1),(9716,57080,57095,'OP_PlayerPollPopup',556,1),(9717,57080,57095,'OP_PlayerPollAnswer',557,1),(9718,57080,57095,'OP_MentorPopup',558,1),(9719,57080,57095,'OP_LoadWelcomeWindow',560,1),(9720,57080,57095,'OP_OpenCharCust',561,1),(9721,57080,57095,'OP_SubmitCharCust',562,1),(9722,57080,57095,'OP_QueAllBgSolo',564,1),(9723,57080,57095,'OP_ZoneBgInstanceList',566,1),(9724,57080,57095,'OP_WorldTravelAvail',570,1),(9725,57080,57095,'OP_Launchpad',572,1),(9726,57080,57095,'OP_PaperdollImage',574,1),(9727,57080,57095,'OP_LoadCalendarEvents',575,1),(9728,57080,57095,'OP_VideoUploaded',576,1),(9729,57080,57095,'OP_SavageBarInitMsg',577,1),(9730,57080,57095,'OP_PetOptionsResponse',578,1),(9731,57080,57095,'OP_DungeonMakerItemResponse',579,1),(9732,57080,57095,'OP_CharacterMounts',581,1),(9733,57080,57095,'OP_RecipeListUnknown',590,1),(9734,57080,57095,'OP_EqBetaCopyRequest',599,1),(9735,57080,57095,'OP_EqHearChatCmd',600,1),(9736,57080,57095,'OP_EqDisplayTextCmd',601,1),(9737,57080,57095,'OP_EqCreateGhostCmd',602,1),(9738,57080,57095,'OP_EqCreateWidgetCmd',603,1),(9739,57080,57095,'OP_EqCreateSignWidgetCmd',604,1),(9740,57080,57095,'OP_EqDestroyGhostCmd',605,1),(9741,57080,57095,'OP_EqUpdateGhostCmd',606,1),(9742,57080,57095,'OP_EqSetControlGhostCmd',607,1),(9743,57080,57095,'OP_EqSetPOVGhostCmd',608,1),(9744,57080,57095,'OP_EqHearCombatCmd',609,1),(9745,57080,57095,'OP_EqHearSpellCastCmd',610,1),(9746,57080,57095,'OP_EQHearProcCmd',611,1),(9747,57080,57095,'OP_EQHearResEffectCmd',612,1),(9748,57080,57095,'OP_EqHearSpellInterruptCmd',613,1),(9749,57080,57095,'OP_EqHearSpellFizzleCmd',614,1),(9750,57080,57095,'OP_EqHearConsiderCmd',615,1),(9751,57080,57095,'OP_EqUpdateSubClassesCmd',616,1),(9752,57080,57095,'OP_EqCreateListBoxCmd',617,1),(9753,57080,57095,'OP_EqSetDebugPathPointsCmd',618,1),(9754,57080,57095,'OP_EqCannedEmoteCmd',620,1),(9755,57080,57095,'OP_EqStateCmd',621,1),(9756,57080,57095,'OP_EqPlaySoundCmd',622,1),(9757,57080,57095,'OP_EqPlaySound3DCmd',623,1),(9758,57080,57095,'OP_EqPlayVoiceCmd',624,1),(9759,57080,57095,'OP_EqHearDrowningCmd',625,1),(9760,57080,57095,'OP_EqHearDeathCmd',626,1),(9761,57080,57095,'OP_EqGroupMemberRemovedCmd',627,1),(9762,57080,57095,'OP_EqHearChainEffectCmd',628,1),(9763,57080,57095,'OP_EqReceiveOfferCmd',629,1),(9764,57080,57095,'OP_EqInspectPCResultsCmd',630,1),(9765,57080,57095,'OP_EqDrawablePathGraphCmd',631,1),(9766,57080,57095,'OP_EqDialogOpenCmd',632,1),(9767,57080,57095,'OP_EqDialogCloseCmd',633,1),(9768,57080,57095,'OP_EqFactionUpdateCmd',634,1),(9769,57080,57095,'OP_EqCollectionUpdateCmd',635,1),(9770,57080,57095,'OP_EqCollectionFilterCmd',636,1),(9771,57080,57095,'OP_EqCollectionItemCmd',637,1),(9772,57080,57095,'OP_EqQuestJournalUpdateCmd',638,1),(9773,57080,57095,'OP_EqMentoring',639,1),(9774,57080,57095,'OP_EqQuestJournalReplyCmd',640,1),(9775,57080,57095,'OP_EqQuestGroupCmd',641,1),(9776,57080,57095,'OP_EqUpdateMerchantCmd',642,1),(9777,57080,57095,'OP_EqUpdateStoreCmd',643,1),(9778,57080,57095,'OP_EqUpdatePlayerTradeCmd',644,1),(9779,57080,57095,'OP_EqHelpPathCmd',645,1),(9780,57080,57095,'OP_EqHelpPathClearCmd',646,1),(9781,57080,57095,'OP_EqUpdateBankCmd',647,1),(9782,57080,57095,'OP_EqExamineInfoCmd',648,1),(9783,57080,57095,'OP_EqCloseWindowCmd',649,1),(9784,57080,57095,'OP_EqUpdateLootCmd',650,1),(9785,57080,57095,'OP_EqJunctionListCmd',651,1),(9786,57080,57095,'OP_EqShowDeathWindowCmd',652,1),(9787,57080,57095,'OP_EqDisplaySpellFailCmd',653,1),(9788,57080,57095,'OP_EqSpellCastStartCmd',654,1),(9789,57080,57095,'OP_EqSpellCastEndCmd',655,1),(9790,57080,57095,'OP_EqResurrectedCmd',656,1),(9791,57080,57095,'OP_EqChoiceWinCmd',657,1),(9792,57080,57095,'OP_EqSetDefaultVerbCmd',658,1),(9793,57080,57095,'OP_EqInstructionWindowCmd',659,1),(9794,57080,57095,'OP_EqInstructionWindowCloseCmd',660,1),(9795,57080,57095,'OP_EqInstructionWindowGoalCmd',661,1),(9796,57080,57095,'OP_EqInstructionWindowTaskCmd',662,1),(9797,57080,57095,'OP_EqEnableGameEventCmd',663,1),(9798,57080,57095,'OP_EqShowWindowCmd',664,1),(9799,57080,57095,'OP_EqEnableWindowCmd',665,1),(9800,57080,57095,'OP_EqFlashWindowCmd',666,1),(9801,57080,57095,'OP_EqHearPlayFlavorCmd',668,1),(9802,57080,57095,'OP_EqUpdateSignWidgetCmd',669,1),(9803,57080,57095,'OP_EqDebugPVDCmd',670,1),(9804,57080,57095,'OP_EqShowBookCmd',671,1),(9805,57080,57095,'OP_EqQuestionnaireCmd',672,1),(9806,57080,57095,'OP_EqGetProbsCmd',674,1),(9807,57080,57095,'OP_EqHearHealCmd',675,1),(9808,57080,57095,'OP_EqChatChannelUpdateCmd',676,1),(9809,57080,57095,'OP_EqWhoChannelQueryReplyCmd',677,1),(9810,57080,57095,'OP_EqAvailWorldChannelsCmd',678,1),(9811,57080,57095,'OP_EqUpdateTargetCmd',679,1),(9812,57080,57095,'OP_BrokerSellList',680,1),(9813,57080,57095,'OP_EqConsignmentItemsCmd',681,1),(9814,57080,57095,'OP_EqStartBrokerCmd',683,1),(9815,57080,57095,'OP_EqMapExplorationCmd',684,1),(9816,57080,57095,'OP_EqStoreLogCmd',685,1),(9817,57080,57095,'OP_EqSpellMoveToRangeAndRetryCmd',686,1),(9818,57080,57095,'OP_EqUpdatePlayerMailCmd',687,1),(9819,57080,57095,'OP_GuildStatusUpdate',690,1),(9820,57080,57095,'OP_EqArenaResultsCmd',691,1),(9821,57080,57095,'OP_EqGuildBankEventActionCmd',692,1),(9822,57080,57095,'OP_EqGuildBankExamineInfoCmd',693,1),(9823,57080,57095,'OP_EqHearSpellNoLandCmd',694,1),(9824,57080,57095,'OP_Lottery',695,1),(9825,57080,57095,'OP_GuildRecruitingMemberInfo',696,1),(9826,57080,57095,'OP_GuildRecruiting',697,1),(9827,57080,57095,'OP_GuildRecruitingDetails',698,1),(9828,57080,57095,'OP_GuildRecruitingImage',699,1),(9829,57080,57095,'OP_TradeskillList',700,1),(9830,57080,57095,'OP_CharRenamed',701,1),(9831,57080,57095,'OP_UseAdornment',711,1),(9832,57080,57095,'OP_ExpPurchWindow',717,1),(9833,57080,57095,'OP_PointOfInterest',721,1),(9834,57080,57095,'OP_PointOfInterest2',722,1),(9835,57080,57095,'OP_TraitsList',723,1),(9836,57080,57095,'OP_CustomizeHouseDisplay',726,1),(9837,57080,57095,'OP_VoiceChatServer',727,1),(9838,57080,57095,'OP_SupplyDepot',731,1),(9839,57080,57095,'OP_EQHearThreatCmd',732,1),(9840,57080,57095,'OP_RecipeList',733,1),(9841,57080,57095,'OP_Research',734,1),(9842,57080,57095,'OP_CharacterCurrency',735,1),(9843,57080,57095,'OP_CharacterAchievements',736,1),(9844,57080,57095,'OP_AchievementUpdateMsg',737,1),(9845,57080,57095,'OP_EQHearDispellCmd',738,1),(9846,57080,57095,'OP_JournalQuestStoryline',739,1),(9847,57080,57095,'OP_DungeonPlayAsAvatarList',740,1),(9848,57080,57095,'OP_DungeonPlayAsAvatarSelected',741,1),(9849,57080,57095,'OP_MercHireWindow',742,1),(9850,57080,57095,'OP_MercUnknown',743,1),(9851,57080,57095,'OP_Unknown',756,1),(9852,57080,57095,'OP_DailyObjectives',594,1),(9853,57080,57095,'OP_Weakness',580,1),(9854,57015,57031,'OP_AchievementUpdateMsg',731,1),(9855,57015,57031,'OP_AddSocialStructureStandingMsg',249,1),(9856,57015,57031,'OP_AdvancementRequestMsg',394,1),(9857,57015,57031,'OP_AdventureList',488,1),(9858,57015,57031,'OP_AFKUpdateMsg',370,1),(9859,57015,57031,'OP_AfterInvSpellUpdate',69,1),(9860,57015,57031,'OP_AllCharactersDescReplyMsg',10,1),(9861,57015,57031,'OP_AllCharactersDescRequestMsg',9,1),(9862,57015,57031,'OP_AllWSDescRequestMsg',7,1),(9863,57015,57031,'OP_AnonUpdateMsg',371,1),(9864,57015,57031,'OP_ArenaCreate',456,1),(9865,57015,57031,'OP_ArenaGameTypesMsg',445,1),(9866,57015,57031,'OP_ArenaList',457,1),(9867,57015,57031,'OP_ArenaWindow',465,1),(9868,57015,57031,'OP_AttackAllowed',500,1),(9869,57015,57031,'OP_AttackNotAllowed',501,1),(9870,57015,57031,'OP_AuctionAbortMsg',436,1),(9871,57015,57031,'OP_AuctionCharacter',433,1),(9872,57015,57031,'OP_AuctionCharacterReply',434,1),(9873,57015,57031,'OP_AuctionCoin',431,1),(9874,57015,57031,'OP_AuctionCoinReply',432,1),(9875,57015,57031,'OP_AuctionCommitMsg',435,1),(9876,57015,57031,'OP_AuctionItem',429,1),(9877,57015,57031,'OP_AuctionItemReply',430,1),(9878,57015,57031,'OP_AuditAuctionEventMsg',446,1),(9879,57015,57031,'OP_AvatarCreatedMsg',46,1),(9880,57015,57031,'OP_AvatarDestroyedMsg',47,1),(9881,57015,57031,'OP_AvatarUpdateMsg',360,1),(9882,57015,57031,'OP_BadLanguageFilter',519,1),(9883,57015,57031,'OP_BagOptions',502,1),(9884,57015,57031,'OP_BeginItemCreationMsg',221,1),(9885,57015,57031,'OP_BeginTrackingMsg',390,1),(9886,57015,57031,'OP_BioUpdateMsg',362,1),(9887,57015,57031,'OP_BrokerAddBag',292,1),(9888,57015,57031,'OP_BrokerRemoveBag',293,1),(9889,57015,57031,'OP_BrokerSellList',674,1),(9890,57015,57031,'OP_BuyPlayerHouseMsg',150,1),(9891,57015,57031,'OP_BuyPlayerHouseTintMsg',151,1),(9892,57015,57031,'OP_CampAbortedMsg',52,1),(9893,57015,57031,'OP_CampClientMsg',387,1),(9894,57015,57031,'OP_CampStartedMsg',51,1),(9895,57015,57031,'OP_CancelCreateFromRecipeMsg',220,1),(9896,57015,57031,'OP_CancelledFeignMsg',216,1),(9897,57015,57031,'OP_CancelMoveObjectModeMsg',163,1),(9898,57015,57031,'OP_CancelSpellCast',489,1),(9899,57015,57031,'OP_ChangeServerControlFlagMsg',246,1),(9900,57015,57031,'OP_ChangeZoneMsg',77,1),(9901,57015,57031,'OP_CharacterAchievements',730,1),(9902,57015,57031,'OP_CharacterCreatedDungeons',549,1),(9903,57015,57031,'OP_CharacterCurrency',729,1),(9904,57015,57031,'OP_CharacterHousingList',507,1),(9905,57015,57031,'OP_CharacterLinkdeadMsg',414,1),(9906,57015,57031,'OP_CharacterMerc',65,1),(9907,57015,57031,'OP_CharacterMounts',579,1),(9908,57015,57031,'OP_CharacterPet',64,1),(9909,57015,57031,'OP_CharNameChangedMsg',352,1),(9910,57015,57031,'OP_CharRenamed',695,1),(9911,57015,57031,'OP_CharTransferCommitReplyMsg',422,1),(9912,57015,57031,'OP_CharTransferCommitRequestMsg',420,1),(9913,57015,57031,'OP_CharTransferReplyMsg',418,1),(9914,57015,57031,'OP_CharTransferRequestMsg',417,1),(9915,57015,57031,'OP_CharTransferRollbackReplyMsg',421,1),(9916,57015,57031,'OP_CharTransferRollbackRequestMsg',419,1),(9917,57015,57031,'OP_CharTransferStartReplyMsg',416,1),(9918,57015,57031,'OP_CharTransferStartRequestMsg',415,1),(9919,57015,57031,'OP_CharTransferValidateReplyMsg',438,1),(9920,57015,57031,'OP_CharTransferValidateRequestMsg',437,1),(9921,57015,57031,'OP_ChatCreateChannelMsg',285,1),(9922,57015,57031,'OP_ChatFiltersMsg',335,1),(9923,57015,57031,'OP_ChatJoinChannelMsg',286,1),(9924,57015,57031,'OP_ChatLeaveChannelMsg',288,1),(9925,57015,57031,'OP_ChatRelationshipUpdateMsg',184,1),(9926,57015,57031,'OP_ChatSendFriendsMsg',295,1),(9927,57015,57031,'OP_ChatSendIgnoresMsg',296,1),(9928,57015,57031,'OP_ChatTellChannelMsg',289,1),(9929,57015,57031,'OP_ChatTellUserMsg',290,1),(9930,57015,57031,'OP_ChatToggleFriendMsg',291,1),(9931,57015,57031,'OP_ChatToggleIgnoreMsg',294,1),(9932,57015,57031,'OP_ChatWhoChannelMsg',287,1),(9933,57015,57031,'OP_ClearDataMsg',98,1),(9934,57015,57031,'OP_ClearForLandingMsg',491,1),(9935,57015,57031,'OP_ClearForTakeOffMsg',191,1),(9936,57015,57031,'OP_ClientCmdMsg',58,1),(9937,57015,57031,'OP_ClientFellMsg',385,1),(9938,57015,57031,'OP_ClientIdleBeginMsg',405,1),(9939,57015,57031,'OP_ClientIdleEndMsg',406,1),(9940,57015,57031,'OP_ClientInDeathRegionMsg',386,1),(9941,57015,57031,'OP_ClientTeleportRequestMsg',78,1),(9942,57015,57031,'OP_ClientTeleportToLocationMsg',244,1),(9943,57015,57031,'OP_CloseGroupInviteWindowMsg',397,1),(9944,57015,57031,'OP_CollectAllHouseItemsMsg',152,1),(9945,57015,57031,'OP_ConsignItemRequestMsg',126,1),(9946,57015,57031,'OP_ConsignItemResponseMsg',127,1),(9947,57015,57031,'OP_ConsignmentCloseStoreMsg',125,1),(9948,57015,57031,'OP_ConsignRemoveItemsMsg',378,1),(9949,57015,57031,'OP_ConsignViewCreateMsg',375,1),(9950,57015,57031,'OP_ConsignViewGetPageMsg',376,1),(9951,57015,57031,'OP_ConsignViewReleaseMsg',377,1),(9952,57015,57031,'OP_ConsignViewSortMsg',383,1),(9953,57015,57031,'OP_CorruptedClientMsg',409,1),(9954,57015,57031,'OP_CreateBoatTransportsMsg',250,1),(9955,57015,57031,'OP_CreateCharacterDungeon',545,1),(9956,57015,57031,'OP_CreateCharacterReplyMsg',12,1),(9957,57015,57031,'OP_CreateCharacterRequestMsg',11,1),(9958,57015,57031,'OP_CreateCharFromCBBReplyMsg',426,1),(9959,57015,57031,'OP_CreateCharFromCBBRequestMsg',425,1),(9960,57015,57031,'OP_CreateGuildReplyMsg',120,1),(9961,57015,57031,'OP_CreateGuildRequestMsg',119,1),(9962,57015,57031,'OP_CreateZoneInstanceMsg',29,1),(9963,57015,57031,'OP_CsCategoryRequestMsg',367,1),(9964,57015,57031,'OP_CsCategoryResponseMsg',368,1),(9965,57015,57031,'OP_CSTicketAddCommentMsg',234,1),(9966,57015,57031,'OP_CSTicketChangeNotificationMsg',236,1),(9967,57015,57031,'OP_CSTicketCommentRequestMsg',231,1),(9968,57015,57031,'OP_CSTicketCommentResponseMsg',232,1),(9969,57015,57031,'OP_CSTicketCreateMsg',233,1),(9970,57015,57031,'OP_CSTicketDeleteMsg',235,1),(9971,57015,57031,'OP_CSTicketHeaderRequestMsg',229,1),(9972,57015,57031,'OP_CSTicketInfoMsg',230,1),(9973,57015,57031,'OP_CSToolAccessResponseMsg',388,1),(9974,57015,57031,'OP_CSToolsRequestMsg',247,1),(9975,57015,57031,'OP_CSToolsResponseMsg',248,1),(9976,57015,57031,'OP_CurrentPet',485,1),(9977,57015,57031,'OP_CustomizationPurchaseRequestMs',167,1),(9978,57015,57031,'OP_CustomizationReplyMsg',169,1),(9979,57015,57031,'OP_CustomizationSetRequestMsg',168,1),(9980,57015,57031,'OP_CustomizeHouseDisplay',720,1),(9981,57015,57031,'OP_DefaultGroupOptionsMsg',198,1),(9982,57015,57031,'OP_DefaultGroupOptionsRequestMsg',197,1),(9983,57015,57031,'OP_DeleteCharacterReplyMsg',17,1),(9984,57015,57031,'OP_DeleteCharacterRequestMsg',16,1),(9985,57015,57031,'OP_DeleteGuildMsg',123,1),(9986,57015,57031,'OP_DestUpdateReq',210,1),(9987,57015,57031,'OP_DialogCloseMsg',110,1),(9988,57015,57031,'OP_DialogSelectMsg',109,1),(9989,57015,57031,'OP_DispatchClientCmdMsg',60,1),(9990,57015,57031,'OP_DispatchESMsg',59,1),(9991,57015,57031,'OP_DispatchMsg',451,1),(9992,57015,57031,'OP_DispatchSpellCmdMsg',179,1),(9993,57015,57031,'OP_DisplayDebugNLLPointsMsg',254,1),(9994,57015,57031,'OP_DisplayEventMsg',452,1),(9995,57015,57031,'OP_DisplayExchangeScreenMsg',444,1),(9996,57015,57031,'OP_DisplayGroupOptionsScreenMsg',200,1),(9997,57015,57031,'OP_DisplayInnVisitScreenMsg',202,1),(9998,57015,57031,'OP_DisplayMailScreenMsg',404,1),(9999,57015,57031,'OP_DisplayTSEventReactionMsg',225,1),(10000,57015,57031,'OP_DisplayWarningMsg',265,1),(10001,57015,57031,'OP_DoneLoadingEntityResourcesMsg',36,1),(10002,57015,57031,'OP_DoneLoadingZoneResourcesMsg',34,1),(10003,57015,57031,'OP_DoneSendingInitialEntitiesMsg',35,1),(10004,57015,57031,'OP_DressingRoom',510,1),(10005,57015,57031,'OP_DumpSchedulerMsg',203,1),(10006,57015,57031,'OP_DungeonMakerEnter',546,1),(10007,57015,57031,'OP_DungeonMakerItemRequest',548,1),(10008,57015,57031,'OP_DungeonMakerItemResponse',577,1),(10009,57015,57031,'OP_DungeonMakerToolboxList',550,1),(10010,57015,57031,'OP_DungeonMakerUnknown',551,1),(10011,57015,57031,'OP_DungeonMakerUnknown1',552,1),(10012,57015,57031,'OP_DungeonPlayAsAvatarList',734,1),(10013,57015,57031,'OP_DungeonPlayAsAvatarSelected',735,1),(10014,57015,57031,'OP_EncounterBrokenMsg',263,1),(10015,57015,57031,'OP_EnterHouseMsg',154,1),(10016,57015,57031,'OP_EnterMoveObjectModeMsg',161,1),(10017,57015,57031,'OP_EntityVerbsReplyMsg',181,1),(10018,57015,57031,'OP_EntityVerbsRequestMsg',180,1),(10019,57015,57031,'OP_EntityVerbsVerbMsg',182,1),(10020,57015,57031,'OP_EqArenaResultsCmd',685,1),(10021,57015,57031,'OP_EqAvailWorldChannelsCmd',672,1),(10022,57015,57031,'OP_EqBetaCopyRequest',593,1),(10023,57015,57031,'OP_EqCannedEmoteCmd',614,1),(10024,57015,57031,'OP_EqChatChannelUpdateCmd',670,1),(10025,57015,57031,'OP_EqChoiceWinCmd',651,1),(10026,57015,57031,'OP_EqCloseWindowCmd',643,1),(10027,57015,57031,'OP_EqCollectionFilterCmd',630,1),(10028,57015,57031,'OP_EqCollectionItemCmd',631,1),(10029,57015,57031,'OP_EqCollectionUpdateCmd',629,1),(10030,57015,57031,'OP_EqConsignmentItemsCmd',675,1),(10031,57015,57031,'OP_EqCreateGhostCmd',596,1),(10032,57015,57031,'OP_EqCreateListBoxCmd',611,1),(10033,57015,57031,'OP_EqCreateSignWidgetCmd',598,1),(10034,57015,57031,'OP_EqCreateWidgetCmd',597,1),(10035,57015,57031,'OP_EqDebugPVDCmd',664,1),(10036,57015,57031,'OP_EqDestroyGhostCmd',599,1),(10037,57015,57031,'OP_EqDialogCloseCmd',627,1),(10038,57015,57031,'OP_EqDialogOpenCmd',626,1),(10039,57015,57031,'OP_EqDisplaySpellFailCmd',647,1),(10040,57015,57031,'OP_EqDisplayTextCmd',595,1),(10041,57015,57031,'OP_EqDrawablePathGraphCmd',625,1),(10042,57015,57031,'OP_EqEnableGameEventCmd',657,1),(10043,57015,57031,'OP_EqEnableWindowCmd',659,1),(10044,57015,57031,'OP_EqExamineInfoCmd',642,1),(10045,57015,57031,'OP_EqFactionUpdateCmd',628,1),(10046,57015,57031,'OP_EqFlashWindowCmd',660,1),(10047,57015,57031,'OP_EqGetProbsCmd',668,1),(10048,57015,57031,'OP_EqGroupMemberRemovedCmd',621,1),(10049,57015,57031,'OP_EqGuildBankEventActionCmd',686,1),(10050,57015,57031,'OP_EqGuildBankExamineInfoCmd',687,1),(10051,57015,57031,'OP_EqHearChainEffectCmd',622,1),(10052,57015,57031,'OP_EqHearChatCmd',594,1),(10053,57015,57031,'OP_EqHearCombatCmd',603,1),(10054,57015,57031,'OP_EqHearConsiderCmd',609,1),(10055,57015,57031,'OP_EqHearDeathCmd',620,1),(10056,57015,57031,'OP_EQHearDispellCmd',732,1),(10057,57015,57031,'OP_EqHearDrowningCmd',619,1),(10058,57015,57031,'OP_EqHearHealCmd',669,1),(10059,57015,57031,'OP_EqHearPlayFlavorCmd',662,1),(10060,57015,57031,'OP_EQHearProcCmd',605,1),(10061,57015,57031,'OP_EQHearResEffectCmd',606,1),(10062,57015,57031,'OP_EqHearSpellCastCmd',604,1),(10063,57015,57031,'OP_EqHearSpellFizzleCmd',608,1),(10064,57015,57031,'OP_EqHearSpellInterruptCmd',607,1),(10065,57015,57031,'OP_EqHearSpellNoLandCmd',688,1),(10066,57015,57031,'OP_EQHearThreatCmd',726,1),(10067,57015,57031,'OP_EqHelpPathClearCmd',640,1),(10068,57015,57031,'OP_EqHelpPathCmd',639,1),(10069,57015,57031,'OP_EqInspectPCResultsCmd',624,1),(10070,57015,57031,'OP_EqInstructionWindowCloseCmd',654,1),(10071,57015,57031,'OP_EqInstructionWindowCmd',653,1),(10072,57015,57031,'OP_EqInstructionWindowGoalCmd',655,1),(10073,57015,57031,'OP_EqInstructionWindowTaskCmd',656,1),(10074,57015,57031,'OP_EqJunctionListCmd',645,1),(10075,57015,57031,'OP_EqMapExplorationCmd',678,1),(10076,57015,57031,'OP_EqMentoring',633,1),(10077,57015,57031,'OP_EqPlaySound3DCmd',617,1),(10078,57015,57031,'OP_EqPlaySoundCmd',616,1),(10079,57015,57031,'OP_EqPlayVoiceCmd',618,1),(10080,57015,57031,'OP_EqQuestGroupCmd',635,1),(10081,57015,57031,'OP_EqQuestionnaireCmd',666,1),(10082,57015,57031,'OP_EqQuestJournalReplyCmd',634,1),(10083,57015,57031,'OP_EqQuestJournalUpdateCmd',632,1),(10084,57015,57031,'OP_EqReceiveOfferCmd',623,1),(10085,57015,57031,'OP_EqResurrectedCmd',650,1),(10086,57015,57031,'OP_EqSetControlGhostCmd',601,1),(10087,57015,57031,'OP_EqSetDebugPathPointsCmd',612,1),(10088,57015,57031,'OP_EqSetDefaultVerbCmd',652,1),(10089,57015,57031,'OP_EqSetPOVGhostCmd',602,1),(10090,57015,57031,'OP_EqShowBookCmd',665,1),(10091,57015,57031,'OP_EqShowDeathWindowCmd',646,1),(10092,57015,57031,'OP_EqShowWindowCmd',658,1),(10093,57015,57031,'OP_EqSpellCastEndCmd',649,1),(10094,57015,57031,'OP_EqSpellCastStartCmd',648,1),(10095,57015,57031,'OP_EqSpellMoveToRangeAndRetryCmd',680,1),(10096,57015,57031,'OP_EqStartBrokerCmd',677,1),(10097,57015,57031,'OP_EqStateCmd',615,1),(10098,57015,57031,'OP_EqStoreLogCmd',679,1),(10099,57015,57031,'OP_EqUpdateBankCmd',641,1),(10100,57015,57031,'OP_EqUpdateGhostCmd',600,1),(10101,57015,57031,'OP_EqUpdateLootCmd',644,1),(10102,57015,57031,'OP_EqUpdateMerchantCmd',636,1),(10103,57015,57031,'OP_EqUpdatePlayerMailCmd',681,1),(10104,57015,57031,'OP_EqUpdatePlayerTradeCmd',638,1),(10105,57015,57031,'OP_EqUpdateSignWidgetCmd',663,1),(10106,57015,57031,'OP_EqUpdateStoreCmd',637,1),(10107,57015,57031,'OP_EqUpdateSubClassesCmd',610,1),(10108,57015,57031,'OP_EqUpdateTargetCmd',673,1),(10109,57015,57031,'OP_EqWhoChannelQueryReplyCmd',671,1),(10110,57015,57031,'OP_ESInitMsg',25,1),(10111,57015,57031,'OP_ESLoginRequestMsg',3,1),(10112,57015,57031,'OP_ESReadyForClientsMsg',26,1),(10113,57015,57031,'OP_ESStatusMsg',100,1),(10114,57015,57031,'OP_ESWeatherRequestEndMsg',105,1),(10115,57015,57031,'OP_ESWeatherRequestMsg',104,1),(10116,57015,57031,'OP_ESZoneInstanceStatusMsg',101,1),(10117,57015,57031,'OP_ExamineConsignmentRequestMsg',171,1),(10118,57015,57031,'OP_ExamineConsignmentResponseMsg',172,1),(10119,57015,57031,'OP_ExamineInfoRequestMsg',255,1),(10120,57015,57031,'OP_ExamineItemRequestMsg',195,1),(10121,57015,57031,'OP_ExitHouseMsg',155,1),(10122,57015,57031,'OP_ExpectClientAsCharacterReplyMs',22,1),(10123,57015,57031,'OP_ExpectClientAsCharacterRequest',32,1),(10124,57015,57031,'OP_ExpPurchWindow',711,1),(10125,57015,57031,'OP_FellowshipExpMsg',122,1),(10126,57015,57031,'OP_FlightPathsMsg',413,1),(10127,57015,57031,'OP_GameWorldTimeMsg',43,1),(10128,57015,57031,'OP_PaperdollImage',572,1),(10129,57015,57031,'OP_GetAuctionAssetIDMsg',441,1),(10130,57015,57031,'OP_GetAuctionAssetIDReplyMsg',442,1),(10131,57015,57031,'OP_GetAvatarAccessRequestForCSToo',393,1),(10132,57015,57031,'OP_GetCharacterSerializedReplyMsg',424,1),(10133,57015,57031,'OP_GetCharacterSerializedRequestM',423,1),(10134,57015,57031,'OP_GroupCreatedMsg',88,1),(10135,57015,57031,'OP_GroupDestroyedMsg',89,1),(10136,57015,57031,'OP_GroupLeaderChangedMsg',93,1),(10137,57015,57031,'OP_GroupMemberAddedMsg',90,1),(10138,57015,57031,'OP_GroupMemberRemovedMsg',91,1),(10139,57015,57031,'OP_GroupOptionsMsg',199,1),(10140,57015,57031,'OP_GroupRemovedFromGroupMsg',92,1),(10141,57015,57031,'OP_GroupResendOOZDataMsg',94,1),(10142,57015,57031,'OP_GroupSettingsChangedMsg',95,1),(10143,57015,57031,'OP_GuildBankActionMsg',274,1),(10144,57015,57031,'OP_GuildBankActionResponseMsg',275,1),(10145,57015,57031,'OP_GuildBankEventListMsg',279,1),(10146,57015,57031,'OP_GuildBankItemDetailsRequestMsg',276,1),(10147,57015,57031,'OP_GuildBankItemDetailsResponseMs',277,1),(10148,57015,57031,'OP_GuildBankUpdateMsg',278,1),(10149,57015,57031,'OP_GuildEventActionMsg',269,1),(10150,57015,57031,'OP_GuildEventAddMsg',268,1),(10151,57015,57031,'OP_GuildEventDetailsMsg',272,1),(10152,57015,57031,'OP_GuildEventListMsg',270,1),(10153,57015,57031,'OP_GuildEventMsg',267,1),(10154,57015,57031,'OP_GuildMembershipResponseMsg',357,1),(10155,57015,57031,'OP_GuildRecruiting',691,1),(10156,57015,57031,'OP_GuildRecruitingDetails',692,1),(10157,57015,57031,'OP_GuildRecruitingImage',693,1),(10158,57015,57031,'OP_GuildRecruitingMemberInfo',690,1),(10159,57015,57031,'OP_GuildsayMsg',121,1),(10160,57015,57031,'OP_GuildStatusUpdate',684,1),(10161,57015,57031,'OP_GuildUpdateMsg',124,1),(10162,57015,57031,'OP_HideIllusionsMsg',194,1),(10163,57015,57031,'OP_HouseAccessRemoveMsg',158,1),(10164,57015,57031,'OP_HouseAccessSetMsg',157,1),(10165,57015,57031,'OP_HouseCustomizationScreenMsg',166,1),(10166,57015,57031,'OP_HouseDefaultAccessSetMsg',156,1),(10167,57015,57031,'OP_HouseDeletedRemotelyMsg',142,1),(10168,57015,57031,'OP_HouseItemsList',483,1),(10169,57015,57031,'OP_HousingDataChangedMsg',427,1),(10170,57015,57031,'OP_HousingRestoreMsg',428,1),(10171,57015,57031,'OP_InspectPlayerMsg',363,1),(10172,57015,57031,'OP_InspectPlayerRequestMsg',450,1),(10173,57015,57031,'OP_InviteRequestMsg',447,1),(10174,57015,57031,'OP_InviteResponseMsg',448,1),(10175,57015,57031,'OP_InviteTargetResponseMsg',449,1),(10176,57015,57031,'OP_JoinGuildNotifyMsg',359,1),(10177,57015,57031,'OP_JournalQuestStoryline',733,1),(10178,57015,57031,'OP_KeymapDataMsg',177,1),(10179,57015,57031,'OP_KeymapLoadMsg',175,1),(10180,57015,57031,'OP_KeymapNoneMsg',176,1),(10181,57015,57031,'OP_KeymapSaveMsg',178,1),(10182,57015,57031,'OP_KnowledgebaseRequestMsg',227,1),(10183,57015,57031,'OP_KnowledgebaseResponseMsg',228,1),(10184,57015,57031,'OP_KnowledgeWindowSlotMappingMsg',369,1),(10185,57015,57031,'OP_KnownLanguagesMsg',238,1),(10186,57015,57031,'OP_Launchpad',570,1),(10187,57015,57031,'OP_LeaveGuildNotifyMsg',358,1),(10188,57015,57031,'OP_LevelChangedMsg',261,1),(10189,57015,57031,'OP_LFGGroupSearch',504,1),(10190,57015,57031,'OP_LFGUpdateMsg',518,1),(10191,57015,57031,'OP_LikeOption',135,1),(10192,57015,57031,'OP_LoadCalendarEvents',573,1),(10193,57015,57031,'OP_LoadWelcomeWindow',558,1),(10194,57015,57031,'OP_LoginByNumRequestMsg',1,1),(10195,57015,57031,'OP_LoginReplyMsg',4,1),(10196,57015,57031,'OP_LoginRequestMsg',0,1),(10197,57015,57031,'OP_LootItemsRequestMsg',185,1),(10198,57015,57031,'OP_Lottery',689,1),(10199,57015,57031,'OP_LSCheckAcctLockMsg',204,1),(10200,57015,57031,'OP_LsClientAlertlogReplyMsg',242,1),(10201,57015,57031,'OP_LsClientBaselogReplyMsg',240,1),(10202,57015,57031,'OP_LsClientCrashlogReplyMsg',241,1),(10203,57015,57031,'OP_LsClientVerifylogReplyMsg',243,1),(10204,57015,57031,'OP_LsRequestClientCrashLogMsg',239,1),(10205,57015,57031,'OP_LSServerLockMsg',365,1),(10206,57015,57031,'OP_MacroInitMsg',258,1),(10207,57015,57031,'OP_MacroUpdateMsg',259,1),(10208,57015,57031,'OP_MailCommitSendMessageMsg',344,1),(10209,57015,57031,'OP_MailDeleteMessageMsg',340,1),(10210,57015,57031,'OP_MailEventNotificationMsg',411,1),(10211,57015,57031,'OP_MailGetHeadersReplyMsg',341,1),(10212,57015,57031,'OP_MailGetMessageMsg',338,1),(10213,57015,57031,'OP_MailGetMessageReplyMsg',342,1),(10214,57015,57031,'OP_MailRemoveAttachFromMailMsg',346,1),(10215,57015,57031,'OP_MailSendMessageMsg',339,1),(10216,57015,57031,'OP_MailSendMessageReplyMsg',343,1),(10217,57015,57031,'OP_MailSendSystemMessageMsg',345,1),(10218,57015,57031,'OP_MakeGroupLeaderMsg',87,1),(10219,57015,57031,'OP_MapFogDataInitMsg',395,1),(10220,57015,57031,'OP_MapFogDataUpdateMsg',396,1),(10221,57015,57031,'OP_MapRequest',521,1),(10222,57015,57031,'OP_MarketAddFundsReply',529,1),(10223,57015,57031,'OP_MarketAddFundsRequest',528,1),(10224,57015,57031,'OP_MarketFundsUpdate',526,1),(10225,57015,57031,'OP_MarketPlaceItems',535,1),(10226,57015,57031,'OP_MarketPlacePrices',532,1),(10227,57015,57031,'OP_MarketPurchase',531,1),(10228,57015,57031,'OP_MentorPopup',556,1),(10229,57015,57031,'OP_MercHireWindow',736,1),(10230,57015,57031,'OP_MercUnknown',737,1),(10231,57015,57031,'OP_MigrateBoatTransportMsg',252,1),(10232,57015,57031,'OP_MigrateBoatTransportReplyMsg',253,1),(10233,57015,57031,'OP_MigrateClientToZoneReplyMsg',82,1),(10234,57015,57031,'OP_MigrateClientToZoneRequestMsg',81,1),(10235,57015,57031,'OP_ModifyGuildMsg',266,1),(10236,57015,57031,'OP_MonitorCharacterListMsg',56,1),(10237,57015,57031,'OP_MonitorCharacterListRequestMsg',57,1),(10238,57015,57031,'OP_MonitorReplyMsg',55,1),(10239,57015,57031,'OP_MOTDMsg',44,1),(10240,57015,57031,'OP_MoveableObjectPlacementCriteri',160,1),(10241,57015,57031,'OP_MoveLogUpdateMsg',390,1),(10242,57015,57031,'OP_NotifyApprenticeStoppedMentori',408,1),(10243,57015,57031,'OP_OfferQuestMsg',401,1),(10244,57015,57031,'OP_OnscreenMsgMsg',264,1),(10245,57015,57031,'OP_OpenCharCust',559,1),(10246,57015,57031,'OP_OutOfZoneMemberDataMsg',96,1),(10247,57015,57031,'OP_PayHouseUpkeepMsg',159,1),(10248,57015,57031,'OP_PerformCameraShakeMsg',214,1),(10249,57015,57031,'OP_PerformPlayerKnockbackMsg',213,1),(10250,57015,57031,'OP_PetOptions',201,1),(10251,57015,57031,'OP_PetOptionsResponse',576,1),(10252,57015,57031,'OP_PlayCharacterReplyMsg',19,1),(10253,57015,57031,'OP_PlayCharacterRequestMsg',18,1),(10254,57015,57031,'OP_PlayerHouseAccessUpdateMsg',147,1),(10255,57015,57031,'OP_PlayerHouseBaseScreenMsg',145,1),(10256,57015,57031,'OP_PlayerHouseCloseUIMsg',149,1),(10257,57015,57031,'OP_PlayerHouseDisplayStatusMsg',148,1),(10258,57015,57031,'OP_PlayerHousePurchaseScreenMsg',146,1),(10259,57015,57031,'OP_PlayerMadeInstacnesScreen',139,1),(10260,57015,57031,'OP_PlayerMadeInstances',140,1),(10261,57015,57031,'OP_PlayerPollAnswer',555,1),(10262,57015,57031,'OP_PlayerPollPopup',554,1),(10263,57015,57031,'OP_PlayLon',511,1),(10264,57015,57031,'OP_PointOfInterest',715,1),(10265,57015,57031,'OP_PointOfInterest2',716,1),(10266,57015,57031,'OP_PopulateSkillMapsMsg',215,1),(10267,57015,57031,'OP_PositionBoatTransportMsg',251,1),(10268,57015,57031,'OP_PositionMoveableObject',162,1),(10269,57015,57031,'OP_PostPossessionMsg',454,1),(10270,57015,57031,'OP_PredictionUpdateMsg',37,1),(10271,57015,57031,'OP_PrePossessionMsg',453,1),(10272,57015,57031,'OP_PromoFlagsDetailsMsg',374,1),(10273,57015,57031,'OP_PublishHouse',138,1),(10274,57015,57031,'OP_PurchaseConsignmentLoreCheckRe',407,1),(10275,57015,57031,'OP_PurchaseConsignmentRequestMsg',128,1),(10276,57015,57031,'OP_QueAllBgSolo',562,1),(10277,57015,57031,'OP_QuestionnaireMsg',260,1),(10278,57015,57031,'OP_QuestJournalInspectMsg',114,1),(10279,57015,57031,'OP_QuestJournalOpenMsg',113,1),(10280,57015,57031,'OP_QuestJournalSetVisibleMsg',115,1),(10281,57015,57031,'OP_QuestJournalWaypointMsg',116,1),(10282,57015,57031,'OP_QuestReward',320,1),(10283,57015,57031,'OP_QuickbarInitMsg',256,1),(10284,57015,57031,'OP_QuickbarUpdateMsg',257,1),(10285,57015,57031,'OP_RaceRestrictionMsg',439,1),(10286,57015,57031,'OP_ReadBookPageMsg',196,1),(10287,57015,57031,'OP_ReadyForTakeOffMsg',192,1),(10288,57015,57031,'OP_ReadyToZoneMsg',84,1),(10289,57015,57031,'OP_ReceipelistUnknown',588,1),(10290,57015,57031,'OP_RecipeBook',536,1),(10291,57015,57031,'OP_RecipeDetailsMsg',72,1),(10292,57015,57031,'OP_RecipeList',727,1),(10293,57015,57031,'OP_RelinquishHouseMsg',153,1),(10294,57015,57031,'OP_ReloadLocalizedTxtMsg',355,1),(10295,57015,57031,'OP_RemoteCmdMsg',42,1),(10296,57015,57031,'OP_RemoveClientFromGroupMsg',85,1),(10297,57015,57031,'OP_RemoveConcentrationMsg',112,1),(10298,57015,57031,'OP_RemoveGroupFromGroupMsg',86,1),(10299,57015,57031,'OP_RemoveSpellEffectMsg',111,1),(10300,57015,57031,'OP_RenameGuildMsg',282,1),(10301,57015,57031,'OP_ReplaceableSubMeshesMsg',165,1),(10302,57015,57031,'OP_ReportMsg',380,1),(10303,57015,57031,'OP_RequestCampMsg',50,1),(10304,57015,57031,'OP_RequestGuildBankEventDetailsMs',280,1),(10305,57015,57031,'OP_RequestGuildEventDetailsMsg',271,1),(10306,57015,57031,'OP_RequestGuildInfoMsg',273,1),(10307,57015,57031,'OP_RequestGuildMembershipMsg',356,1),(10308,57015,57031,'OP_RequestHelpRepathMsg',206,1),(10309,57015,57031,'OP_RequestRecipeDetailsMsg',71,1),(10310,57015,57031,'OP_RequestTargetLocMsg',207,1),(10311,57015,57031,'OP_Research',728,1),(10312,57015,57031,'OP_ResendWorldChannelsMsg',443,1),(10313,57015,57031,'OP_ReskinCharacterRequestMsg',15,1),(10314,57015,57031,'OP_RestartZoneMsg',412,1),(10315,57015,57031,'OP_RewardPackMsg',281,1),(10316,57015,57031,'OP_SatMsg',189,1),(10317,57015,57031,'OP_SavageBarInitMsg',575,1),(10318,57015,57031,'OP_SelectZoneTeleporterDestinatio',354,1),(10319,57015,57031,'OP_SendLatestRequestMsg',97,1),(10320,57015,57031,'OP_ServerPlayCharacterReplyMsg',24,1),(10321,57015,57031,'OP_ServerPlayCharacterRequestMsg',23,1),(10322,57015,57031,'OP_SetInstanceDisplayNameMsg',440,1),(10323,57015,57031,'OP_SetRemoteCmdsMsg',41,1),(10324,57015,57031,'OP_SetSocialMsg',99,1),(10325,57015,57031,'OP_ShaderCustomizationMsg',164,1),(10326,57015,57031,'OP_ShowCreateFromRecipeUIMsg',219,1),(10327,57015,57031,'OP_ShowIllusionsMsg',193,1),(10328,57015,57031,'OP_ShowItemCreationProcessUIMsg',223,1),(10329,57015,57031,'OP_ShowRecipeBookMsg',226,1),(10330,57015,57031,'OP_ShowZoneTeleporterDestinations',353,1),(10331,57015,57031,'OP_SitMsg',187,1),(10332,57015,57031,'OP_SkillInfoRequest',514,1),(10333,57015,57031,'OP_SkillInfoResponse',515,1),(10334,57015,57031,'OP_SpellGainedMsg',262,1),(10335,57015,57031,'OP_StandMsg',188,1),(10336,57015,57031,'OP_StoodMsg',190,1),(10337,57015,57031,'OP_StopItemCreationMsg',222,1),(10338,57015,57031,'OP_StoppedLootingMsg',186,1),(10339,57015,57031,'OP_StopTrackingMsg',391,1),(10340,57015,57031,'OP_SubmitCharCust',560,1),(10341,57015,57031,'OP_SupplyDepot',725,1),(10342,57015,57031,'OP_SysClient',218,1),(10343,57015,57031,'OP_TeleportWithinZoneMsg',79,1),(10344,57015,57031,'OP_TeleportWithinZoneNoReloadMsg',80,1),(10345,57015,57031,'OP_TintWidgetsMsg',170,1),(10346,57015,57031,'OP_TitleUpdateMsg',384,1),(10347,57015,57031,'OP_TrackingUpdateMsg',389,1),(10348,57015,57031,'OP_TradeskillList',711,1),(10349,57015,57031,'OP_TraitsList',717,1),(10350,57015,57031,'OP_UIEvent',527,1),(10351,57015,57031,'OP_UIResetMsg',174,1),(10352,57015,57031,'OP_UISettingsResponseMsg',173,1),(10353,57015,57031,'OP_Unknown',753,1),(10354,57015,57031,'OP_UnknownNpcMsg',373,1),(10355,57015,57031,'OP_UpdateActivePublicZonesMsg',372,1),(10356,57015,57031,'OP_UpdateCharacterSheetMsg',63,1),(10357,57015,57031,'OP_UpdateClientPredFlagsMsg',245,1),(10358,57015,57031,'OP_UpdateDebugRadiiMsg',379,1),(10359,57015,57031,'OP_UpdateGroupMemberDataMsg',398,1),(10360,57015,57031,'OP_UpdateHouseAccessDataMsg',144,1),(10361,57015,57031,'OP_UpdateHouseDataMsg',143,1),(10362,57015,57031,'OP_UpdateInventoryMsg',68,1),(10363,57015,57031,'OP_UpdateItemCreationProcessUIMsg',224,1),(10364,57015,57031,'OP_UpdateMotdMsg',208,1),(10365,57015,57031,'OP_UpdateOpportunityMsg',75,1),(10366,57015,57031,'OP_UpdatePositionMsg',39,1),(10367,57015,57031,'OP_UpdateRaidMsg',381,1),(10368,57015,57031,'OP_UpdateRecipeBookMsg',70,1),(10369,57015,57031,'OP_UpdateSkillBookMsg',73,1),(10370,57015,57031,'OP_UpdateSkillsMsg',74,1),(10371,57015,57031,'OP_UpdateSpellBookMsg',66,1),(10372,57015,57031,'OP_UpdateTargetLocMsg',62,1),(10373,57015,57031,'OP_UpdateTargetMsg',61,1),(10374,57015,57031,'OP_UpdateTitleCmd',494,1),(10375,57015,57031,'OP_UseAdornment',705,1),(10376,57015,57031,'OP_VideoUploaded',574,1),(10377,57015,57031,'OP_VoiceChatChannel',520,1),(10378,57015,57031,'OP_VoiceChatServer',721,1),(10379,57015,57031,'OP_WaypointReplyMsg',349,1),(10380,57015,57031,'OP_WaypointRequestMsg',348,1),(10381,57015,57031,'OP_WaypointSelectMsg',350,1),(10382,57015,57031,'OP_WaypointUpdateMsg',351,1),(10383,57015,57031,'OP_Weakness',578,1),(10384,57015,57031,'OP_WhoQueryReplyMsg',54,1),(10385,57015,57031,'OP_WhoQueryRequestMsg',53,1),(10386,57015,57031,'OP_WorldDataChangeMsg',410,1),(10387,57015,57031,'OP_WorldDataUpdateMsg',237,1),(10388,57015,57031,'OP_WorldListMsg',8,1),(10389,57015,57031,'OP_WorldPingMsg',399,1),(10390,57015,57031,'OP_WorldShutdownUpdateMsg',403,1),(10391,57015,57031,'OP_WorldStatusChangeMsg',6,1),(10392,57015,57031,'OP_WorldTravelAvail',568,1),(10393,57015,57031,'OP_WSAcctLockStatusMsg',205,1),(10394,57015,57031,'OP_WSCreateCharacterReplyMsg',14,1),(10395,57015,57031,'OP_WSCreateCharacterRequestMsg',13,1),(10396,57015,57031,'OP_WSLoginRequestMsg',2,1),(10397,57015,57031,'OP_WSServerHideMsg',366,1),(10398,57015,57031,'OP_WSServerLockMsg',364,1),(10399,57015,57031,'OP_WSStatusReplyMsg',5,1),(10400,57015,57031,'OP_ZoneBgInstanceList',564,1),(10401,57015,57031,'OP_ZoneInfoMsg',33,1),(10402,57015,57031,'OP_ZoneInstanceCreateReplyMsg',30,1),(10403,57015,57031,'OP_ZoneInstanceDestroyedMsg',31,1),(10404,57015,57031,'OP_ZoneMOTDMsg',45,1),(10405,57015,57031,'OP_ZonesStatusMsg',103,1),(10406,57015,57031,'OP_ZonesStatusRequestMsg',102,1),(10407,57015,57031,'OP_ZoneToFriendReplyMsg',284,1),(10408,57015,57031,'OP_ZoneToFriendRequestMsg',283,1),(10409,57107,57109,'OP_LoginRequestMsg',0,1),(10410,57107,57109,'OP_LoginByNumRequestMsg',1,1),(10411,57107,57109,'OP_WSLoginRequestMsg',2,1),(10412,57107,57109,'OP_ESLoginRequestMsg',3,1),(10413,57107,57109,'OP_LoginReplyMsg',4,1),(10414,57107,57109,'OP_WSStatusReplyMsg',5,1),(10415,57107,57109,'OP_WorldStatusChangeMsg',6,1),(10416,57107,57109,'OP_AllWSDescRequestMsg',7,1),(10417,57107,57109,'OP_WorldListMsg',8,1),(10418,57107,57109,'OP_AllCharactersDescRequestMsg',9,1),(10419,57107,57109,'OP_AllCharactersDescReplyMsg',10,1),(10420,57107,57109,'OP_CreateCharacterRequestMsg',11,1),(10421,57107,57109,'OP_CreateCharacterReplyMsg',12,1),(10422,57107,57109,'OP_WSCreateCharacterRequestMsg',13,1),(10423,57107,57109,'OP_WSCreateCharacterReplyMsg',14,1),(10424,57107,57109,'OP_ReskinCharacterRequestMsg',15,1),(10425,57107,57109,'OP_DeleteCharacterRequestMsg',16,1),(10426,57107,57109,'OP_DeleteCharacterReplyMsg',17,1),(10427,57107,57109,'OP_PlayCharacterRequestMsg',18,1),(10428,57107,57109,'OP_PlayCharacterReplyMsg',19,1),(10429,57107,57109,'OP_ExpectClientAsCharacterReplyMs',22,1),(10430,57107,57109,'OP_ServerPlayCharacterRequestMsg',23,1),(10431,57107,57109,'OP_ServerPlayCharacterReplyMsg',24,1),(10432,57107,57109,'OP_ESInitMsg',25,1),(10433,57107,57109,'OP_ESReadyForClientsMsg',26,1),(10434,57107,57109,'OP_CreateZoneInstanceMsg',29,1),(10435,57107,57109,'OP_ZoneInstanceCreateReplyMsg',30,1),(10436,57107,57109,'OP_ZoneInstanceDestroyedMsg',31,1),(10437,57107,57109,'OP_ExpectClientAsCharacterRequest',32,1),(10438,57107,57109,'OP_ZoneInfoMsg',33,1),(10439,57107,57109,'OP_DoneLoadingZoneResourcesMsg',34,1),(10440,57107,57109,'OP_DoneSendingInitialEntitiesMsg',35,1),(10441,57107,57109,'OP_DoneLoadingEntityResourcesMsg',36,1),(10442,57107,57109,'OP_PredictionUpdateMsg',37,1),(10443,57107,57109,'OP_UpdatePositionMsg',39,1),(10444,57107,57109,'OP_SetRemoteCmdsMsg',41,1),(10445,57107,57109,'OP_RemoteCmdMsg',42,1),(10446,57107,57109,'OP_GameWorldTimeMsg',43,1),(10447,57107,57109,'OP_MOTDMsg',44,1),(10448,57107,57109,'OP_ZoneMOTDMsg',45,1),(10449,57107,57109,'OP_AvatarCreatedMsg',46,1),(10450,57107,57109,'OP_AvatarDestroyedMsg',47,1),(10451,57107,57109,'OP_RequestCampMsg',50,1),(10452,57107,57109,'OP_CampStartedMsg',51,1),(10453,57107,57109,'OP_CampAbortedMsg',52,1),(10454,57107,57109,'OP_WhoQueryRequestMsg',53,1),(10455,57107,57109,'OP_WhoQueryReplyMsg',54,1),(10456,57107,57109,'OP_MonitorReplyMsg',55,1),(10457,57107,57109,'OP_MonitorCharacterListMsg',56,1),(10458,57107,57109,'OP_MonitorCharacterListRequestMsg',57,1),(10459,57107,57109,'OP_ClientCmdMsg',58,1),(10460,57107,57109,'OP_DispatchESMsg',59,1),(10461,57107,57109,'OP_DispatchClientCmdMsg',60,1),(10462,57107,57109,'OP_UpdateTargetMsg',61,1),(10463,57107,57109,'OP_UpdateTargetLocMsg',62,1),(10464,57107,57109,'OP_UpdateCharacterSheetMsg',63,1),(10465,57107,57109,'OP_CharacterPet',64,1),(10466,57107,57109,'OP_CharacterMerc',65,1),(10467,57107,57109,'OP_UpdateSpellBookMsg',66,1),(10468,57107,57109,'OP_UpdateInventoryMsg',68,1),(10469,57107,57109,'OP_AfterInvSpellUpdate',69,1),(10470,57107,57109,'OP_UpdateRecipeBookMsg',70,1),(10471,57107,57109,'OP_RequestRecipeDetailsMsg',71,1),(10472,57107,57109,'OP_RecipeDetailsMsg',72,1),(10473,57107,57109,'OP_UpdateSkillBookMsg',73,1),(10474,57107,57109,'OP_UpdateSkillsMsg',74,1),(10475,57107,57109,'OP_UpdateOpportunityMsg',75,1),(10476,57107,57109,'OP_ChangeZoneMsg',77,1),(10477,57107,57109,'OP_ClientTeleportRequestMsg',78,1),(10478,57107,57109,'OP_TeleportWithinZoneMsg',79,1),(10479,57107,57109,'OP_TeleportWithinZoneNoReloadMsg',80,1),(10480,57107,57109,'OP_MigrateClientToZoneRequestMsg',81,1),(10481,57107,57109,'OP_MigrateClientToZoneReplyMsg',82,1),(10482,57107,57109,'OP_ReadyToZoneMsg',84,1),(10483,57107,57109,'OP_RemoveClientFromGroupMsg',85,1),(10484,57107,57109,'OP_RemoveGroupFromGroupMsg',86,1),(10485,57107,57109,'OP_MakeGroupLeaderMsg',87,1),(10486,57107,57109,'OP_GroupCreatedMsg',88,1),(10487,57107,57109,'OP_GroupDestroyedMsg',89,1),(10488,57107,57109,'OP_GroupMemberAddedMsg',90,1),(10489,57107,57109,'OP_GroupMemberRemovedMsg',91,1),(10490,57107,57109,'OP_GroupRemovedFromGroupMsg',92,1),(10491,57107,57109,'OP_GroupLeaderChangedMsg',93,1),(10492,57107,57109,'OP_GroupResendOOZDataMsg',94,1),(10493,57107,57109,'OP_GroupSettingsChangedMsg',95,1),(10494,57107,57109,'OP_OutOfZoneMemberDataMsg',96,1),(10495,57107,57109,'OP_SendLatestRequestMsg',97,1),(10496,57107,57109,'OP_ClearDataMsg',98,1),(10497,57107,57109,'OP_SetSocialMsg',99,1),(10498,57107,57109,'OP_ESStatusMsg',100,1),(10499,57107,57109,'OP_ESZoneInstanceStatusMsg',101,1),(10500,57107,57109,'OP_ZonesStatusRequestMsg',102,1),(10501,57107,57109,'OP_ZonesStatusMsg',103,1),(10502,57107,57109,'OP_ESWeatherRequestMsg',104,1),(10503,57107,57109,'OP_ESWeatherRequestEndMsg',105,1),(10504,57107,57109,'OP_DialogSelectMsg',109,1),(10505,57107,57109,'OP_DialogCloseMsg',110,1),(10506,57107,57109,'OP_RemoveSpellEffectMsg',111,1),(10507,57107,57109,'OP_RemoveConcentrationMsg',112,1),(10508,57107,57109,'OP_QuestJournalOpenMsg',113,1),(10509,57107,57109,'OP_QuestJournalInspectMsg',114,1),(10510,57107,57109,'OP_QuestJournalSetVisibleMsg',115,1),(10511,57107,57109,'OP_QuestJournalWaypointMsg',116,1),(10512,57107,57109,'OP_CreateGuildRequestMsg',119,1),(10513,57107,57109,'OP_CreateGuildReplyMsg',120,1),(10514,57107,57109,'OP_GuildsayMsg',121,1),(10515,57107,57109,'OP_FellowshipExpMsg',122,1),(10516,57107,57109,'OP_DeleteGuildMsg',123,1),(10517,57107,57109,'OP_GuildUpdateMsg',124,1),(10518,57107,57109,'OP_ConsignmentCloseStoreMsg',125,1),(10519,57107,57109,'OP_ConsignItemRequestMsg',126,1),(10520,57107,57109,'OP_ConsignItemResponseMsg',127,1),(10521,57107,57109,'OP_PurchaseConsignmentRequestMsg',128,1),(10522,57107,57109,'OP_LikeOption',136,1),(10523,57107,57109,'OP_PublishHouse',138,1),(10524,57107,57109,'OP_PlayerMadeInstancesScreen',139,1),(10525,57107,57109,'OP_PlayerMadeInstances',140,1),(10526,57107,57109,'OP_HouseDeletedRemotelyMsg',142,1),(10527,57107,57109,'OP_UpdateHouseDataMsg',143,1),(10528,57107,57109,'OP_UpdateHouseAccessDataMsg',144,1),(10529,57107,57109,'OP_PlayerHouseBaseScreenMsg',145,1),(10530,57107,57109,'OP_PlayerHousePurchaseScreenMsg',146,1),(10531,57107,57109,'OP_PlayerHouseAccessUpdateMsg',147,1),(10532,57107,57109,'OP_PlayerHouseDisplayStatusMsg',148,1),(10533,57107,57109,'OP_PlayerHouseCloseUIMsg',149,1),(10534,57107,57109,'OP_BuyPlayerHouseMsg',150,1),(10535,57107,57109,'OP_BuyPlayerHouseTintMsg',151,1),(10536,57107,57109,'OP_CollectAllHouseItemsMsg',152,1),(10537,57107,57109,'OP_RelinquishHouseMsg',153,1),(10538,57107,57109,'OP_EnterHouseMsg',154,1),(10539,57107,57109,'OP_ExitHouseMsg',155,1),(10540,57107,57109,'OP_HouseDefaultAccessSetMsg',156,1),(10541,57107,57109,'OP_HouseAccessSetMsg',157,1),(10542,57107,57109,'OP_HouseAccessRemoveMsg',158,1),(10543,57107,57109,'OP_PayHouseUpkeepMsg',159,1),(10544,57107,57109,'OP_MoveableObjectPlacementCriteri',160,1),(10545,57107,57109,'OP_EnterMoveObjectModeMsg',161,1),(10546,57107,57109,'OP_PositionMoveableObject',162,1),(10547,57107,57109,'OP_CancelMoveObjectModeMsg',163,1),(10548,57107,57109,'OP_ShaderCustomizationMsg',164,1),(10549,57107,57109,'OP_ReplaceableSubMeshesMsg',165,1),(10550,57107,57109,'OP_HouseCustomizationScreenMsg',166,1),(10551,57107,57109,'OP_CustomizationPurchaseRequestMs',167,1),(10552,57107,57109,'OP_CustomizationSetRequestMsg',168,1),(10553,57107,57109,'OP_CustomizationReplyMsg',169,1),(10554,57107,57109,'OP_TintWidgetsMsg',170,1),(10555,57107,57109,'OP_ExamineConsignmentRequestMsg',171,1),(10556,57107,57109,'OP_ExamineConsignmentResponseMsg',172,1),(10557,57107,57109,'OP_UISettingsResponseMsg',173,1),(10558,57107,57109,'OP_UIResetMsg',174,1),(10559,57107,57109,'OP_KeymapLoadMsg',175,1),(10560,57107,57109,'OP_KeymapNoneMsg',176,1),(10561,57107,57109,'OP_KeymapDataMsg',177,1),(10562,57107,57109,'OP_KeymapSaveMsg',178,1),(10563,57107,57109,'OP_DispatchSpellCmdMsg',179,1),(10564,57107,57109,'OP_EntityVerbsRequestMsg',180,1),(10565,57107,57109,'OP_EntityVerbsReplyMsg',181,1),(10566,57107,57109,'OP_EntityVerbsVerbMsg',182,1),(10567,57107,57109,'OP_ChatRelationshipUpdateMsg',184,1),(10568,57107,57109,'OP_LootItemsRequestMsg',185,1),(10569,57107,57109,'OP_StoppedLootingMsg',186,1),(10570,57107,57109,'OP_SitMsg',187,1),(10571,57107,57109,'OP_StandMsg',188,1),(10572,57107,57109,'OP_SatMsg',189,1),(10573,57107,57109,'OP_StoodMsg',190,1),(10574,57107,57109,'OP_ClearForTakeOffMsg',191,1),(10575,57107,57109,'OP_ReadyForTakeOffMsg',192,1),(10576,57107,57109,'OP_ShowIllusionsMsg',193,1),(10577,57107,57109,'OP_HideIllusionsMsg',194,1),(10578,57107,57109,'OP_ExamineItemRequestMsg',195,1),(10579,57107,57109,'OP_ReadBookPageMsg',196,1),(10580,57107,57109,'OP_DefaultGroupOptionsRequestMsg',197,1),(10581,57107,57109,'OP_DefaultGroupOptionsMsg',198,1),(10582,57107,57109,'OP_GroupOptionsMsg',199,1),(10583,57107,57109,'OP_DisplayGroupOptionsScreenMsg',200,1),(10584,57107,57109,'OP_PetOptions',201,1),(10585,57107,57109,'OP_DisplayInnVisitScreenMsg',202,1),(10586,57107,57109,'OP_DumpSchedulerMsg',203,1),(10587,57107,57109,'OP_LSCheckAcctLockMsg',204,1),(10588,57107,57109,'OP_WSAcctLockStatusMsg',205,1),(10589,57107,57109,'OP_RequestHelpRepathMsg',206,1),(10590,57107,57109,'OP_RequestTargetLocMsg',207,1),(10591,57107,57109,'OP_UpdateMotdMsg',208,1),(10592,57107,57109,'OP_DestUpdateReq',210,1),(10593,57107,57109,'OP_PerformPlayerKnockbackMsg',213,1),(10594,57107,57109,'OP_PerformCameraShakeMsg',214,1),(10595,57107,57109,'OP_PopulateSkillMapsMsg',215,1),(10596,57107,57109,'OP_CancelledFeignMsg',216,1),(10597,57107,57109,'OP_SysClient',218,1),(10598,57107,57109,'OP_ShowCreateFromRecipeUIMsg',219,1),(10599,57107,57109,'OP_CancelCreateFromRecipeMsg',220,1),(10600,57107,57109,'OP_BeginItemCreationMsg',221,1),(10601,57107,57109,'OP_StopItemCreationMsg',222,1),(10602,57107,57109,'OP_ShowItemCreationProcessUIMsg',223,1),(10603,57107,57109,'OP_UpdateItemCreationProcessUIMsg',224,1),(10604,57107,57109,'OP_DisplayTSEventReactionMsg',225,1),(10605,57107,57109,'OP_ShowRecipeBookMsg',226,1),(10606,57107,57109,'OP_KnowledgebaseRequestMsg',227,1),(10607,57107,57109,'OP_KnowledgebaseResponseMsg',228,1),(10608,57107,57109,'OP_CSTicketHeaderRequestMsg',229,1),(10609,57107,57109,'OP_CSTicketInfoMsg',230,1),(10610,57107,57109,'OP_CSTicketCommentRequestMsg',231,1),(10611,57107,57109,'OP_CSTicketCommentResponseMsg',232,1),(10612,57107,57109,'OP_CSTicketCreateMsg',233,1),(10613,57107,57109,'OP_CSTicketAddCommentMsg',234,1),(10614,57107,57109,'OP_CSTicketDeleteMsg',235,1),(10615,57107,57109,'OP_CSTicketChangeNotificationMsg',236,1),(10616,57107,57109,'OP_WorldDataUpdateMsg',237,1),(10617,57107,57109,'OP_KnownLanguagesMsg',238,1),(10618,57107,57109,'OP_LsRequestClientCrashLogMsg',239,1),(10619,57107,57109,'OP_LsClientBaselogReplyMsg',240,1),(10620,57107,57109,'OP_LsClientCrashlogReplyMsg',241,1),(10621,57107,57109,'OP_LsClientAlertlogReplyMsg',242,1),(10622,57107,57109,'OP_LsClientVerifylogReplyMsg',243,1),(10623,57107,57109,'OP_ClientTeleportToLocationMsg',244,1),(10624,57107,57109,'OP_UpdateClientPredFlagsMsg',245,1),(10625,57107,57109,'OP_ChangeServerControlFlagMsg',246,1),(10626,57107,57109,'OP_CSToolsRequestMsg',247,1),(10627,57107,57109,'OP_CSToolsResponseMsg',248,1),(10628,57107,57109,'OP_AddSocialStructureStandingMsg',249,1),(10629,57107,57109,'OP_CreateBoatTransportsMsg',250,1),(10630,57107,57109,'OP_PositionBoatTransportMsg',251,1),(10631,57107,57109,'OP_MigrateBoatTransportMsg',252,1),(10632,57107,57109,'OP_MigrateBoatTransportReplyMsg',253,1),(10633,57107,57109,'OP_DisplayDebugNLLPointsMsg',254,1),(10634,57107,57109,'OP_ExamineInfoRequestMsg',255,1),(10635,57107,57109,'OP_QuickbarInitMsg',256,1),(10636,57107,57109,'OP_QuickbarUpdateMsg',257,1),(10637,57107,57109,'OP_MacroInitMsg',258,1),(10638,57107,57109,'OP_MacroUpdateMsg',259,1),(10639,57107,57109,'OP_QuestionnaireMsg',260,1),(10640,57107,57109,'OP_LevelChangedMsg',261,1),(10641,57107,57109,'OP_SpellGainedMsg',262,1),(10642,57107,57109,'OP_EncounterBrokenMsg',263,1),(10643,57107,57109,'OP_OnscreenMsgMsg',264,1),(10644,57107,57109,'OP_DisplayWarningMsg',265,1),(10645,57107,57109,'OP_ModifyGuildMsg',266,1),(10646,57107,57109,'OP_GuildEventMsg',267,1),(10647,57107,57109,'OP_GuildEventAddMsg',268,1),(10648,57107,57109,'OP_GuildEventActionMsg',269,1),(10649,57107,57109,'OP_GuildEventListMsg',270,1),(10650,57107,57109,'OP_RequestGuildEventDetailsMsg',271,1),(10651,57107,57109,'OP_GuildEventDetailsMsg',272,1),(10652,57107,57109,'OP_RequestGuildInfoMsg',273,1),(10653,57107,57109,'OP_GuildBankActionMsg',274,1),(10654,57107,57109,'OP_GuildBankActionResponseMsg',275,1),(10655,57107,57109,'OP_GuildBankItemDetailsRequestMsg',276,1),(10656,57107,57109,'OP_GuildBankItemDetailsResponseMs',277,1),(10657,57107,57109,'OP_GuildBankUpdateMsg',278,1),(10658,57107,57109,'OP_GuildBankEventListMsg',279,1),(10659,57107,57109,'OP_RequestGuildBankEventDetailsMs',280,1),(10660,57107,57109,'OP_RewardPackMsg',281,1),(10661,57107,57109,'OP_RenameGuildMsg',282,1),(10662,57107,57109,'OP_ZoneToFriendRequestMsg',283,1),(10663,57107,57109,'OP_ZoneToFriendReplyMsg',284,1),(10664,57107,57109,'OP_ChatCreateChannelMsg',285,1),(10665,57107,57109,'OP_ChatJoinChannelMsg',286,1),(10666,57107,57109,'OP_ChatWhoChannelMsg',287,1),(10667,57107,57109,'OP_ChatLeaveChannelMsg',288,1),(10668,57107,57109,'OP_ChatTellChannelMsg',289,1),(10669,57107,57109,'OP_ChatTellUserMsg',290,1),(10670,57107,57109,'OP_ChatToggleFriendMsg',291,1),(10671,57107,57109,'OP_BrokerAddBag',292,1),(10672,57107,57109,'OP_BrokerRemoveBag',293,1),(10673,57107,57109,'OP_ChatToggleIgnoreMsg',294,1),(10674,57107,57109,'OP_ChatSendFriendsMsg',295,1),(10675,57107,57109,'OP_ChatSendIgnoresMsg',296,1),(10676,57107,57109,'OP_QuestReward',320,1),(10677,57107,57109,'OP_ChatFiltersMsg',335,1),(10678,57107,57109,'OP_MailGetMessageMsg',338,1),(10679,57107,57109,'OP_MailSendMessageMsg',339,1),(10680,57107,57109,'OP_MailDeleteMessageMsg',340,1),(10681,57107,57109,'OP_MailGetHeadersReplyMsg',341,1),(10682,57107,57109,'OP_MailGetMessageReplyMsg',342,1),(10683,57107,57109,'OP_MailSendMessageReplyMsg',343,1),(10684,57107,57109,'OP_MailCommitSendMessageMsg',344,1),(10685,57107,57109,'OP_MailSendSystemMessageMsg',345,1),(10686,57107,57109,'OP_MailRemoveAttachFromMailMsg',346,1),(10687,57107,57109,'OP_WaypointRequestMsg',348,1),(10688,57107,57109,'OP_WaypointReplyMsg',349,1),(10689,57107,57109,'OP_WaypointSelectMsg',350,1),(10690,57107,57109,'OP_WaypointUpdateMsg',351,1),(10691,57107,57109,'OP_CharNameChangedMsg',352,1),(10692,57107,57109,'OP_ShowZoneTeleporterDestinations',353,1),(10693,57107,57109,'OP_SelectZoneTeleporterDestinatio',354,1),(10694,57107,57109,'OP_ReloadLocalizedTxtMsg',355,1),(10695,57107,57109,'OP_RequestGuildMembershipMsg',356,1),(10696,57107,57109,'OP_GuildMembershipResponseMsg',357,1),(10697,57107,57109,'OP_LeaveGuildNotifyMsg',358,1),(10698,57107,57109,'OP_JoinGuildNotifyMsg',359,1),(10699,57107,57109,'OP_AvatarUpdateMsg',360,1),(10700,57107,57109,'OP_BioUpdateMsg',362,1),(10701,57107,57109,'OP_InspectPlayerMsg',363,1),(10702,57107,57109,'OP_WSServerLockMsg',364,1),(10703,57107,57109,'OP_LSServerLockMsg',365,1),(10704,57107,57109,'OP_WSServerHideMsg',366,1),(10705,57107,57109,'OP_CsCategoryRequestMsg',367,1),(10706,57107,57109,'OP_CsCategoryResponseMsg',368,1),(10707,57107,57109,'OP_KnowledgeWindowSlotMappingMsg',369,1),(10708,57107,57109,'OP_AFKUpdateMsg',370,1),(10709,57107,57109,'OP_AnonUpdateMsg',371,1),(10710,57107,57109,'OP_UpdateActivePublicZonesMsg',372,1),(10711,57107,57109,'OP_UnknownNpcMsg',373,1),(10712,57107,57109,'OP_PromoFlagsDetailsMsg',374,1),(10713,57107,57109,'OP_ConsignViewCreateMsg',375,1),(10714,57107,57109,'OP_ConsignViewGetPageMsg',376,1),(10715,57107,57109,'OP_ConsignViewReleaseMsg',377,1),(10716,57107,57109,'OP_ConsignRemoveItemsMsg',378,1),(10717,57107,57109,'OP_UpdateDebugRadiiMsg',379,1),(10718,57107,57109,'OP_ReportMsg',380,1),(10719,57107,57109,'OP_UpdateRaidMsg',381,1),(10720,57107,57109,'OP_ConsignViewSortMsg',383,1),(10721,57107,57109,'OP_TitleUpdateMsg',384,1),(10722,57107,57109,'OP_ClientFellMsg',385,1),(10723,57107,57109,'OP_ClientInDeathRegionMsg',386,1),(10724,57107,57109,'OP_CampClientMsg',387,1),(10725,57107,57109,'OP_CSToolAccessResponseMsg',388,1),(10726,57107,57109,'OP_UpdateGroupMemberDataMsg',388,1),(10727,57107,57109,'OP_TrackingUpdateMsg',389,1),(10728,57107,57109,'OP_BeginTrackingMsg',390,1),(10729,57107,57109,'OP_StopTrackingMsg',391,1),(10730,57107,57109,'OP_GetAvatarAccessRequestForCSToo',393,1),(10731,57107,57109,'OP_AdvancementRequestMsg',394,1),(10732,57107,57109,'OP_MapFogDataInitMsg',395,1),(10733,57107,57109,'OP_MapFogDataUpdateMsg',396,1),(10734,57107,57109,'OP_CloseGroupInviteWindowMsg',397,1),(10735,57107,57109,'OP_WorldPingMsg',399,1),(10736,57107,57109,'OP_MoveLogUpdateMsg',400,1),(10737,57107,57109,'OP_OfferQuestMsg',401,1),(10738,57107,57109,'OP_WorldShutdownUpdateMsg',403,1),(10739,57107,57109,'OP_DisplayMailScreenMsg',404,1),(10740,57107,57109,'OP_ClientIdleBeginMsg',405,1),(10741,57107,57109,'OP_ClientIdleEndMsg',406,1),(10742,57107,57109,'OP_PurchaseConsignmentLoreCheckRe',407,1),(10743,57107,57109,'OP_NotifyApprenticeStoppedMentori',408,1),(10744,57107,57109,'OP_CorruptedClientMsg',409,1),(10745,57107,57109,'OP_WorldDataChangeMsg',410,1),(10746,57107,57109,'OP_MailEventNotificationMsg',411,1),(10747,57107,57109,'OP_RestartZoneMsg',412,1),(10748,57107,57109,'OP_FlightPathsMsg',413,1),(10749,57107,57109,'OP_CharacterLinkdeadMsg',414,1),(10750,57107,57109,'OP_CharTransferStartRequestMsg',415,1),(10751,57107,57109,'OP_CharTransferStartReplyMsg',416,1),(10752,57107,57109,'OP_CharTransferRequestMsg',417,1),(10753,57107,57109,'OP_CharTransferReplyMsg',418,1),(10754,57107,57109,'OP_CharTransferRollbackRequestMsg',419,1),(10755,57107,57109,'OP_CharTransferCommitRequestMsg',420,1),(10756,57107,57109,'OP_CharTransferRollbackReplyMsg',421,1),(10757,57107,57109,'OP_CharTransferCommitReplyMsg',422,1),(10758,57107,57109,'OP_GetCharacterSerializedRequestM',423,1),(10759,57107,57109,'OP_GetCharacterSerializedReplyMsg',424,1),(10760,57107,57109,'OP_CreateCharFromCBBRequestMsg',425,1),(10761,57107,57109,'OP_CreateCharFromCBBReplyMsg',426,1),(10762,57107,57109,'OP_HousingDataChangedMsg',427,1),(10763,57107,57109,'OP_HousingRestoreMsg',428,1),(10764,57107,57109,'OP_AuctionItem',429,1),(10765,57107,57109,'OP_AuctionItemReply',430,1),(10766,57107,57109,'OP_AuctionCoin',431,1),(10767,57107,57109,'OP_AuctionCoinReply',432,1),(10768,57107,57109,'OP_AuctionCharacter',433,1),(10769,57107,57109,'OP_AuctionCharacterReply',434,1),(10770,57107,57109,'OP_AuctionCommitMsg',435,1),(10771,57107,57109,'OP_AuctionAbortMsg',436,1),(10772,57107,57109,'OP_CharTransferValidateRequestMsg',437,1),(10773,57107,57109,'OP_CharTransferValidateReplyMsg',438,1),(10774,57107,57109,'OP_RaceRestrictionMsg',439,1),(10775,57107,57109,'OP_SetInstanceDisplayNameMsg',440,1),(10776,57107,57109,'OP_GetAuctionAssetIDMsg',441,1),(10777,57107,57109,'OP_GetAuctionAssetIDReplyMsg',442,1),(10778,57107,57109,'OP_ResendWorldChannelsMsg',443,1),(10779,57107,57109,'OP_DisplayExchangeScreenMsg',444,1),(10780,57107,57109,'OP_ArenaGameTypesMsg',445,1),(10781,57107,57109,'OP_AuditAuctionEventMsg',446,1),(10782,57107,57109,'OP_InviteRequestMsg',447,1),(10783,57107,57109,'OP_InviteResponseMsg',448,1),(10784,57107,57109,'OP_InviteTargetResponseMsg',449,1),(10785,57107,57109,'OP_InspectPlayerRequestMsg',450,1),(10786,57107,57109,'OP_DispatchMsg',451,1),(10787,57107,57109,'OP_DisplayEventMsg',452,1),(10788,57107,57109,'OP_PrePossessionMsg',453,1),(10789,57107,57109,'OP_PostPossessionMsg',454,1),(10790,57107,57109,'OP_ArenaCreate',456,1),(10791,57107,57109,'OP_ArenaList',457,1),(10792,57107,57109,'OP_ArenaWindow',465,1),(10793,57107,57109,'OP_HouseItemsList',484,1),(10794,57107,57109,'OP_CurrentPet',485,1),(10795,57107,57109,'OP_AdventureList',488,1),(10796,57107,57109,'OP_CancelSpellCast',489,1),(10797,57107,57109,'OP_ClearForLandingMsg',491,1),(10798,57107,57109,'OP_UpdateTitleCmd',494,1),(10799,57107,57109,'OP_AttackAllowed',500,1),(10800,57107,57109,'OP_AttackNotAllowed',501,1),(10801,57107,57109,'OP_BagOptions',502,1),(10802,57107,57109,'OP_LFGGroupSearch',504,1),(10803,57107,57109,'OP_CharacterHousingList',507,1),(10804,57107,57109,'OP_DressingRoom',510,1),(10805,57107,57109,'OP_PlayLon',511,1),(10806,57107,57109,'OP_SkillInfoRequest',514,1),(10807,57107,57109,'OP_SkillInfoResponse',515,1),(10808,57107,57109,'OP_LFGUpdateMsg',518,1),(10809,57107,57109,'OP_BadLanguageFilter',519,1),(10810,57107,57109,'OP_VoiceChatChannel',520,1),(10811,57107,57109,'OP_MapRequest',521,1),(10812,57107,57109,'OP_MarketFundsUpdate',526,1),(10813,57107,57109,'OP_UIEvent',527,1),(10814,57107,57109,'OP_MarketAddFundsRequest',528,1),(10815,57107,57109,'OP_MarketAddFundsReply',529,1),(10816,57107,57109,'OP_MarketPurchase',531,1),(10817,57107,57109,'OP_MarketPlacePrices',532,1),(10818,57107,57109,'OP_MarketPlaceItems',537,1),(10819,57107,57109,'OP_RecipeBook',538,1),(10820,57107,57109,'OP_CreateCharacterDungeon',547,1),(10821,57107,57109,'OP_DungeonMakerEnter',548,1),(10822,57107,57109,'OP_DungeonMakerItemRequest',550,1),(10823,57107,57109,'OP_CharacterCreatedDungeons',551,1),(10824,57107,57109,'OP_DungeonMakerToolboxList',552,1),(10825,57107,57109,'OP_DungeonMakerUnknown',553,1),(10826,57107,57109,'OP_DungeonMakerUnknown1',554,1),(10827,57107,57109,'OP_PlayerPollPopup',556,1),(10828,57107,57109,'OP_PlayerPollAnswer',557,1),(10829,57107,57109,'OP_MentorPopup',558,1),(10830,57107,57109,'OP_LoadWelcomeWindow',560,1),(10831,57107,57109,'OP_OpenCharCust',561,1),(10832,57107,57109,'OP_SubmitCharCust',562,1),(10833,57107,57109,'OP_QueAllBgSolo',564,1),(10834,57107,57109,'OP_ZoneBgInstanceList',566,1),(10835,57107,57109,'OP_WorldTravelAvail',570,1),(10836,57107,57109,'OP_Launchpad',572,1),(10837,57107,57109,'OP_PaperdollImage',574,1),(10838,57107,57109,'OP_LoadCalendarEvents',575,1),(10839,57107,57109,'OP_VideoUploaded',576,1),(10840,57107,57109,'OP_SavageBarInitMsg',577,1),(10841,57107,57109,'OP_PetOptionsResponse',578,1),(10842,57107,57109,'OP_DungeonMakerItemResponse',579,1),(10843,57107,57109,'OP_CharacterMounts',581,1),(10844,57107,57109,'OP_RecipeListUnknown',590,1),(10845,57107,57109,'OP_EqBetaCopyRequest',601,1),(10846,57107,57109,'OP_EqHearChatCmd',602,1),(10847,57107,57109,'OP_EqDisplayTextCmd',603,1),(10848,57107,57109,'OP_EqCreateGhostCmd',604,1),(10849,57107,57109,'OP_EqCreateWidgetCmd',605,1),(10850,57107,57109,'OP_EqCreateSignWidgetCmd',606,1),(10851,57107,57109,'OP_EqDestroyGhostCmd',607,1),(10852,57107,57109,'OP_EqUpdateGhostCmd',608,1),(10853,57107,57109,'OP_EqSetControlGhostCmd',609,1),(10854,57107,57109,'OP_EqSetPOVGhostCmd',610,1),(10855,57107,57109,'OP_EqHearCombatCmd',611,1),(10856,57107,57109,'OP_EqHearSpellCastCmd',612,1),(10857,57107,57109,'OP_EQHearProcCmd',613,1),(10858,57107,57109,'OP_EQHearResEffectCmd',614,1),(10859,57107,57109,'OP_EqHearSpellInterruptCmd',615,1),(10860,57107,57109,'OP_EqHearSpellFizzleCmd',616,1),(10861,57107,57109,'OP_EqHearConsiderCmd',617,1),(10862,57107,57109,'OP_EqUpdateSubClassesCmd',618,1),(10863,57107,57109,'OP_EqCreateListBoxCmd',619,1),(10864,57107,57109,'OP_EqSetDebugPathPointsCmd',620,1),(10865,57107,57109,'OP_EqCannedEmoteCmd',622,1),(10866,57107,57109,'OP_EqStateCmd',623,1),(10867,57107,57109,'OP_EqPlaySoundCmd',624,1),(10868,57107,57109,'OP_EqPlaySound3DCmd',625,1),(10869,57107,57109,'OP_EqPlayVoiceCmd',626,1),(10870,57107,57109,'OP_EqHearDrowningCmd',627,1),(10871,57107,57109,'OP_EqHearDeathCmd',628,1),(10872,57107,57109,'OP_EqGroupMemberRemovedCmd',629,1),(10873,57107,57109,'OP_EqHearChainEffectCmd',630,1),(10874,57107,57109,'OP_EqReceiveOfferCmd',631,1),(10875,57107,57109,'OP_EqInspectPCResultsCmd',632,1),(10876,57107,57109,'OP_EqDrawablePathGraphCmd',633,1),(10877,57107,57109,'OP_EqDialogOpenCmd',634,1),(10878,57107,57109,'OP_EqDialogCloseCmd',635,1),(10879,57107,57109,'OP_EqFactionUpdateCmd',636,1),(10880,57107,57109,'OP_EqCollectionUpdateCmd',637,1),(10881,57107,57109,'OP_EqCollectionFilterCmd',638,1),(10882,57107,57109,'OP_EqCollectionItemCmd',639,1),(10883,57107,57109,'OP_EqQuestJournalUpdateCmd',640,1),(10884,57107,57109,'OP_EqMentoring',641,1),(10885,57107,57109,'OP_EqQuestJournalReplyCmd',642,1),(10886,57107,57109,'OP_EqQuestGroupCmd',643,1),(10887,57107,57109,'OP_EqUpdateMerchantCmd',644,1),(10888,57107,57109,'OP_EqUpdateStoreCmd',645,1),(10889,57107,57109,'OP_EqUpdatePlayerTradeCmd',646,1),(10890,57107,57109,'OP_EqHelpPathCmd',647,1),(10891,57107,57109,'OP_EqHelpPathClearCmd',648,1),(10892,57107,57109,'OP_EqUpdateBankCmd',649,1),(10893,57107,57109,'OP_EqExamineInfoCmd',650,1),(10894,57107,57109,'OP_EqCloseWindowCmd',651,1),(10895,57107,57109,'OP_EqUpdateLootCmd',652,1),(10896,57107,57109,'OP_EqJunctionListCmd',653,1),(10897,57107,57109,'OP_EqShowDeathWindowCmd',654,1),(10898,57107,57109,'OP_EqDisplaySpellFailCmd',655,1),(10899,57107,57109,'OP_EqSpellCastStartCmd',656,1),(10900,57107,57109,'OP_EqSpellCastEndCmd',657,1),(10901,57107,57109,'OP_EqResurrectedCmd',658,1),(10902,57107,57109,'OP_EqChoiceWinCmd',659,1),(10903,57107,57109,'OP_EqSetDefaultVerbCmd',660,1),(10904,57107,57109,'OP_EqInstructionWindowCmd',661,1),(10905,57107,57109,'OP_EqInstructionWindowCloseCmd',662,1),(10906,57107,57109,'OP_EqInstructionWindowGoalCmd',663,1),(10907,57107,57109,'OP_EqInstructionWindowTaskCmd',664,1),(10908,57107,57109,'OP_EqEnableGameEventCmd',665,1),(10909,57107,57109,'OP_EqShowWindowCmd',666,1),(10910,57107,57109,'OP_EqEnableWindowCmd',667,1),(10911,57107,57109,'OP_EqFlashWindowCmd',668,1),(10912,57107,57109,'OP_EqHearPlayFlavorCmd',670,1),(10913,57107,57109,'OP_EqUpdateSignWidgetCmd',671,1),(10914,57107,57109,'OP_EqDebugPVDCmd',672,1),(10915,57107,57109,'OP_EqShowBookCmd',673,1),(10916,57107,57109,'OP_EqQuestionnaireCmd',674,1),(10917,57107,57109,'OP_EqGetProbsCmd',676,1),(10918,57107,57109,'OP_EqHearHealCmd',677,1),(10919,57107,57109,'OP_EqChatChannelUpdateCmd',678,1),(10920,57107,57109,'OP_EqWhoChannelQueryReplyCmd',679,1),(10921,57107,57109,'OP_EqAvailWorldChannelsCmd',680,1),(10922,57107,57109,'OP_EqUpdateTargetCmd',681,1),(10923,57107,57109,'OP_BrokerSellList',682,1),(10924,57107,57109,'OP_EqConsignmentItemsCmd',683,1),(10925,57107,57109,'OP_EqStartBrokerCmd',685,1),(10926,57107,57109,'OP_EqMapExplorationCmd',686,1),(10927,57107,57109,'OP_EqStoreLogCmd',687,1),(10928,57107,57109,'OP_EqSpellMoveToRangeAndRetryCmd',688,1),(10929,57107,57109,'OP_EqUpdatePlayerMailCmd',689,1),(10930,57107,57109,'OP_GuildStatusUpdate',692,1),(10931,57107,57109,'OP_EqArenaResultsCmd',693,1),(10932,57107,57109,'OP_EqGuildBankEventActionCmd',694,1),(10933,57107,57109,'OP_EqGuildBankExamineInfoCmd',695,1),(10934,57107,57109,'OP_EqHearSpellNoLandCmd',696,1),(10935,57107,57109,'OP_Lottery',697,1),(10936,57107,57109,'OP_GuildRecruitingMemberInfo',698,1),(10937,57107,57109,'OP_GuildRecruiting',699,1),(10938,57107,57109,'OP_GuildRecruitingDetails',700,1),(10939,57107,57109,'OP_GuildRecruitingImage',701,1),(10940,57107,57109,'OP_TradeskillList',702,1),(10941,57107,57109,'OP_CharRenamed',703,1),(10942,57107,57109,'OP_UseAdornment',713,1),(10943,57107,57109,'OP_ExpPurchWindow',719,1),(10944,57107,57109,'OP_PointOfInterest',723,1),(10945,57107,57109,'OP_PointOfInterest2',724,1),(10946,57107,57109,'OP_TraitsList',725,1),(10947,57107,57109,'OP_CustomizeHouseDisplay',728,1),(10948,57107,57109,'OP_VoiceChatServer',729,1),(10949,57107,57109,'OP_SupplyDepot',733,1),(10950,57107,57109,'OP_EQHearThreatCmd',734,1),(10951,57107,57109,'OP_RecipeList',735,1),(10952,57107,57109,'OP_Research',736,1),(10953,57107,57109,'OP_CharacterCurrency',737,1),(10954,57107,57109,'OP_CharacterAchievements',738,1),(10955,57107,57109,'OP_AchievementUpdateMsg',739,1),(10956,57107,57109,'OP_EQHearDispellCmd',740,1),(10957,57107,57109,'OP_JournalQuestStoryline',741,1),(10958,57107,57109,'OP_DungeonPlayAsAvatarList',742,1),(10959,57107,57109,'OP_DungeonPlayAsAvatarSelected',743,1),(10960,57107,57109,'OP_MercHireWindow',744,1),(10961,57107,57109,'OP_MercUnknown',745,1),(10962,57107,57109,'OP_Unknown',758,1),(10963,57107,57109,'OP_DailyObjectives',595,1),(10964,57107,57109,'OP_Weakness',580,1),(10965,57121,58525,'OP_AchievementUpdateMsg',741,1),(10966,57121,58525,'OP_AddSocialStructureStandingMsg',249,1),(10967,57121,58525,'OP_AdvancementRequestMsg',394,1),(10968,57121,58525,'OP_AdventureList',488,1),(10969,57121,58525,'OP_AFKUpdateMsg',370,1),(10970,57121,58525,'OP_AfterInvSpellUpdate',69,1),(10971,57121,58525,'OP_AllCharactersDescReplyMsg',10,1),(10972,57121,58525,'OP_AllCharactersDescRequestMsg',9,1),(10973,57121,58525,'OP_AllWSDescRequestMsg',7,1),(10974,57121,58525,'OP_AnonUpdateMsg',371,1),(10975,57121,58525,'OP_ArenaCreate',456,1),(10976,57121,58525,'OP_ArenaGameTypesMsg',445,1),(10977,57121,58525,'OP_ArenaList',457,1),(10978,57121,58525,'OP_ArenaWindow',465,1),(10979,57121,58525,'OP_AttackAllowed',500,1),(10980,57121,58525,'OP_AttackNotAllowed',501,1),(10981,57121,58525,'OP_AuctionAbortMsg',436,1),(10982,57121,58525,'OP_AuctionCharacter',433,1),(10983,57121,58525,'OP_AuctionCharacterReply',434,1),(10984,57121,58525,'OP_AuctionCoin',431,1),(10985,57121,58525,'OP_AuctionCoinReply',432,1),(10986,57121,58525,'OP_AuctionCommitMsg',435,1),(10987,57121,58525,'OP_AuctionItem',429,1),(10988,57121,58525,'OP_AuctionItemReply',430,1),(10989,57121,58525,'OP_AuditAuctionEventMsg',446,1),(10990,57121,58525,'OP_AvatarCreatedMsg',46,1),(10991,57121,58525,'OP_AvatarDestroyedMsg',47,1),(10992,57121,58525,'OP_AvatarUpdateMsg',360,1),(10993,57121,58525,'OP_BadLanguageFilter',519,1),(10994,57121,58525,'OP_BagOptions',502,1),(10995,57121,58525,'OP_BeginItemCreationMsg',221,1),(10996,57121,58525,'OP_BeginTrackingMsg',390,1),(10997,57121,58525,'OP_BioUpdateMsg',362,1),(10998,57121,58525,'OP_BrokerAddBag',292,1),(10999,57121,58525,'OP_BrokerRemoveBag',293,1),(11000,57121,58525,'OP_BrokerSellList',684,1),(11001,57121,58525,'OP_BuyPlayerHouseMsg',150,1),(11002,57121,58525,'OP_BuyPlayerHouseTintMsg',151,1),(11003,57121,58525,'OP_CampAbortedMsg',52,1),(11004,57121,58525,'OP_CampClientMsg',387,1),(11005,57121,58525,'OP_CampStartedMsg',51,1),(11006,57121,58525,'OP_CancelCreateFromRecipeMsg',220,1),(11007,57121,58525,'OP_CancelledFeignMsg',216,1),(11008,57121,58525,'OP_CancelMoveObjectModeMsg',163,1),(11009,57121,58525,'OP_CancelSpellCast',489,1),(11010,57121,58525,'OP_ChangeServerControlFlagMsg',246,1),(11011,57121,58525,'OP_ChangeZoneMsg',77,1),(11012,57121,58525,'OP_CharacterAchievements',740,1),(11013,57121,58525,'OP_CharacterCreatedDungeons',551,1),(11014,57121,58525,'OP_CharacterCurrency',739,1),(11015,57121,58525,'OP_CharacterHousingList',507,1),(11016,57121,58525,'OP_CharacterLinkdeadMsg',414,1),(11017,57121,58525,'OP_CharacterMerc',65,1),(11018,57121,58525,'OP_CharacterMounts',582,1),(11019,57121,58525,'OP_CharacterPet',64,1),(11020,57121,58525,'OP_CharNameChangedMsg',352,1),(11021,57121,58525,'OP_CharRenamed',705,1),(11022,57121,58525,'OP_CharTransferCommitReplyMsg',422,1),(11023,57121,58525,'OP_CharTransferCommitRequestMsg',420,1),(11024,57121,58525,'OP_CharTransferReplyMsg',418,1),(11025,57121,58525,'OP_CharTransferRequestMsg',417,1),(11026,57121,58525,'OP_CharTransferRollbackReplyMsg',421,1),(11027,57121,58525,'OP_CharTransferRollbackRequestMsg',419,1),(11028,57121,58525,'OP_CharTransferStartReplyMsg',416,1),(11029,57121,58525,'OP_CharTransferStartRequestMsg',415,1),(11030,57121,58525,'OP_CharTransferValidateReplyMsg',438,1),(11031,57121,58525,'OP_CharTransferValidateRequestMsg',437,1),(11032,57121,58525,'OP_ChatCreateChannelMsg',285,1),(11033,57121,58525,'OP_ChatFiltersMsg',335,1),(11034,57121,58525,'OP_ChatJoinChannelMsg',286,1),(11035,57121,58525,'OP_ChatLeaveChannelMsg',288,1),(11036,57121,58525,'OP_ChatRelationshipUpdateMsg',184,1),(11037,57121,58525,'OP_ChatSendFriendsMsg',295,1),(11038,57121,58525,'OP_ChatSendIgnoresMsg',296,1),(11039,57121,58525,'OP_ChatTellChannelMsg',289,1),(11040,57121,58525,'OP_ChatTellUserMsg',290,1),(11041,57121,58525,'OP_ChatToggleFriendMsg',291,1),(11042,57121,58525,'OP_ChatToggleIgnoreMsg',294,1),(11043,57121,58525,'OP_ChatWhoChannelMsg',287,1),(11044,57121,58525,'OP_ClearDataMsg',98,1),(11045,57121,58525,'OP_ClearForLandingMsg',491,1),(11046,57121,58525,'OP_ClearForTakeOffMsg',191,1),(11047,57121,58525,'OP_ClientCmdMsg',58,1),(11048,57121,58525,'OP_ClientFellMsg',385,1),(11049,57121,58525,'OP_ClientIdleBeginMsg',405,1),(11050,57121,58525,'OP_ClientIdleEndMsg',406,1),(11051,57121,58525,'OP_ClientInDeathRegionMsg',386,1),(11052,57121,58525,'OP_ClientTeleportRequestMsg',78,1),(11053,57121,58525,'OP_ClientTeleportToLocationMsg',244,1),(11054,57121,58525,'OP_CloseGroupInviteWindowMsg',397,1),(11055,57121,58525,'OP_CollectAllHouseItemsMsg',152,1),(11056,57121,58525,'OP_ConsignItemRequestMsg',126,1),(11057,57121,58525,'OP_ConsignItemResponseMsg',127,1),(11058,57121,58525,'OP_ConsignmentCloseStoreMsg',125,1),(11059,57121,58525,'OP_ConsignRemoveItemsMsg',378,1),(11060,57121,58525,'OP_ConsignViewCreateMsg',375,1),(11061,57121,58525,'OP_ConsignViewGetPageMsg',376,1),(11062,57121,58525,'OP_ConsignViewReleaseMsg',377,1),(11063,57121,58525,'OP_ConsignViewSortMsg',383,1),(11064,57121,58525,'OP_CorruptedClientMsg',409,1),(11065,57121,58525,'OP_CreateBoatTransportsMsg',250,1),(11066,57121,58525,'OP_CreateCharacterDungeon',547,1),(11067,57121,58525,'OP_CreateCharacterReplyMsg',12,1),(11068,57121,58525,'OP_CreateCharacterRequestMsg',11,1),(11069,57121,58525,'OP_CreateCharFromCBBReplyMsg',426,1),(11070,57121,58525,'OP_CreateCharFromCBBRequestMsg',425,1),(11071,57121,58525,'OP_CreateGuildReplyMsg',120,1),(11072,57121,58525,'OP_CreateGuildRequestMsg',119,1),(11073,57121,58525,'OP_CreateZoneInstanceMsg',29,1),(11074,57121,58525,'OP_CsCategoryRequestMsg',367,1),(11075,57121,58525,'OP_CsCategoryResponseMsg',368,1),(11076,57121,58525,'OP_CSTicketAddCommentMsg',234,1),(11077,57121,58525,'OP_CSTicketChangeNotificationMsg',236,1),(11078,57121,58525,'OP_CSTicketCommentRequestMsg',231,1),(11079,57121,58525,'OP_CSTicketCommentResponseMsg',232,1),(11080,57121,58525,'OP_CSTicketCreateMsg',233,1),(11081,57121,58525,'OP_CSTicketDeleteMsg',235,1),(11082,57121,58525,'OP_CSTicketHeaderRequestMsg',229,1),(11083,57121,58525,'OP_CSTicketInfoMsg',230,1),(11084,57121,58525,'OP_CSToolAccessResponseMsg',388,1),(11085,57121,58525,'OP_CSToolsRequestMsg',247,1),(11086,57121,58525,'OP_CSToolsResponseMsg',248,1),(11087,57121,58525,'OP_CurrentPet',485,1),(11088,57121,58525,'OP_CustomizationPurchaseRequestMs',167,1),(11089,57121,58525,'OP_CustomizationReplyMsg',169,1),(11090,57121,58525,'OP_CustomizationSetRequestMsg',168,1),(11091,57121,58525,'OP_CustomizeHouseDisplay',730,1),(11092,57121,58525,'OP_DailyObjectives',595,1),(11093,57121,58525,'OP_DefaultGroupOptionsMsg',198,1),(11094,57121,58525,'OP_DefaultGroupOptionsRequestMsg',197,1),(11095,57121,58525,'OP_DeleteCharacterReplyMsg',17,1),(11096,57121,58525,'OP_DeleteCharacterRequestMsg',16,1),(11097,57121,58525,'OP_DeleteGuildMsg',123,1),(11098,57121,58525,'OP_DestUpdateReq',210,1),(11099,57121,58525,'OP_DialogCloseMsg',110,1),(11100,57121,58525,'OP_DialogSelectMsg',109,1),(11101,57121,58525,'OP_DispatchClientCmdMsg',60,1),(11102,57121,58525,'OP_DispatchESMsg',59,1),(11103,57121,58525,'OP_DispatchMsg',451,1),(11104,57121,58525,'OP_DispatchSpellCmdMsg',179,1),(11105,57121,58525,'OP_DisplayDebugNLLPointsMsg',254,1),(11106,57121,58525,'OP_DisplayEventMsg',452,1),(11107,57121,58525,'OP_DisplayExchangeScreenMsg',444,1),(11108,57121,58525,'OP_DisplayGroupOptionsScreenMsg',200,1),(11109,57121,58525,'OP_DisplayInnVisitScreenMsg',202,1),(11110,57121,58525,'OP_DisplayMailScreenMsg',404,1),(11111,57121,58525,'OP_DisplayTSEventReactionMsg',225,1),(11112,57121,58525,'OP_DisplayWarningMsg',265,1),(11113,57121,58525,'OP_DoneLoadingEntityResourcesMsg',36,1),(11114,57121,58525,'OP_DoneLoadingZoneResourcesMsg',34,1),(11115,57121,58525,'OP_DoneSendingInitialEntitiesMsg',35,1),(11116,57121,58525,'OP_DressingRoom',510,1),(11117,57121,58525,'OP_DumpSchedulerMsg',203,1),(11118,57121,58525,'OP_DungeonMakerEnter',548,1),(11119,57121,58525,'OP_DungeonMakerItemRequest',550,1),(11120,57121,58525,'OP_DungeonMakerItemResponse',580,1),(11121,57121,58525,'OP_DungeonMakerToolboxList',552,1),(11122,57121,58525,'OP_DungeonMakerUnknown',553,1),(11123,57121,58525,'OP_DungeonMakerUnknown1',554,1),(11124,57121,58525,'OP_DungeonPlayAsAvatarList',744,1),(11125,57121,58525,'OP_DungeonPlayAsAvatarSelected',745,1),(11126,57121,58525,'OP_EncounterBrokenMsg',263,1),(11127,57121,58525,'OP_EnterHouseMsg',154,1),(11128,57121,58525,'OP_EnterMoveObjectModeMsg',161,1),(11129,57121,58525,'OP_EntityVerbsReplyMsg',181,1),(11130,57121,58525,'OP_EntityVerbsRequestMsg',180,1),(11131,57121,58525,'OP_EntityVerbsVerbMsg',182,1),(11132,57121,58525,'OP_EqArenaResultsCmd',695,1),(11133,57121,58525,'OP_EqAvailWorldChannelsCmd',682,1),(11134,57121,58525,'OP_EqBetaCopyRequest',603,1),(11135,57121,58525,'OP_EqCannedEmoteCmd',624,1),(11136,57121,58525,'OP_EqChatChannelUpdateCmd',680,1),(11137,57121,58525,'OP_EqChoiceWinCmd',661,1),(11138,57121,58525,'OP_EqCloseWindowCmd',653,1),(11139,57121,58525,'OP_EqCollectionFilterCmd',640,1),(11140,57121,58525,'OP_EqCollectionItemCmd',641,1),(11141,57121,58525,'OP_EqCollectionUpdateCmd',639,1),(11142,57121,58525,'OP_EqConsignmentItemsCmd',685,1),(11143,57121,58525,'OP_EqCreateGhostCmd',606,1),(11144,57121,58525,'OP_EqCreateListBoxCmd',621,1),(11145,57121,58525,'OP_EqCreateSignWidgetCmd',608,1),(11146,57121,58525,'OP_EqCreateWidgetCmd',607,1),(11147,57121,58525,'OP_EqDebugPVDCmd',674,1),(11148,57121,58525,'OP_EqDestroyGhostCmd',609,1),(11149,57121,58525,'OP_EqDialogCloseCmd',637,1),(11150,57121,58525,'OP_EqDialogOpenCmd',636,1),(11151,57121,58525,'OP_EqDisplaySpellFailCmd',657,1),(11152,57121,58525,'OP_EqDisplayTextCmd',605,1),(11153,57121,58525,'OP_EqDrawablePathGraphCmd',635,1),(11154,57121,58525,'OP_EqEnableGameEventCmd',667,1),(11155,57121,58525,'OP_EqEnableWindowCmd',669,1),(11156,57121,58525,'OP_EqExamineInfoCmd',652,1),(11157,57121,58525,'OP_EqFactionUpdateCmd',638,1),(11158,57121,58525,'OP_EqFlashWindowCmd',670,1),(11159,57121,58525,'OP_EqGetProbsCmd',678,1),(11160,57121,58525,'OP_EqGroupMemberRemovedCmd',631,1),(11161,57121,58525,'OP_EqGuildBankEventActionCmd',696,1),(11162,57121,58525,'OP_EqGuildBankExamineInfoCmd',697,1),(11163,57121,58525,'OP_EqHearChainEffectCmd',632,1),(11164,57121,58525,'OP_EqHearChatCmd',604,1),(11165,57121,58525,'OP_EqHearCombatCmd',613,1),(11166,57121,58525,'OP_EqHearConsiderCmd',619,1),(11167,57121,58525,'OP_EqHearDeathCmd',630,1),(11168,57121,58525,'OP_EQHearDispellCmd',742,1),(11169,57121,58525,'OP_EqHearDrowningCmd',629,1),(11170,57121,58525,'OP_EqHearHealCmd',679,1),(11171,57121,58525,'OP_EqHearPlayFlavorCmd',672,1),(11172,57121,58525,'OP_EQHearProcCmd',615,1),(11173,57121,58525,'OP_EQHearResEffectCmd',616,1),(11174,57121,58525,'OP_EqHearSpellCastCmd',614,1),(11175,57121,58525,'OP_EqHearSpellFizzleCmd',618,1),(11176,57121,58525,'OP_EqHearSpellInterruptCmd',617,1),(11177,57121,58525,'OP_EqHearSpellNoLandCmd',698,1),(11178,57121,58525,'OP_EQHearThreatCmd',736,1),(11179,57121,58525,'OP_EqHelpPathClearCmd',650,1),(11180,57121,58525,'OP_EqHelpPathCmd',649,1),(11181,57121,58525,'OP_EqInspectPCResultsCmd',634,1),(11182,57121,58525,'OP_EqInstructionWindowCloseCmd',664,1),(11183,57121,58525,'OP_EqInstructionWindowCmd',663,1),(11184,57121,58525,'OP_EqInstructionWindowGoalCmd',665,1),(11185,57121,58525,'OP_EqInstructionWindowTaskCmd',666,1),(11186,57121,58525,'OP_EqJunctionListCmd',655,1),(11187,57121,58525,'OP_EqMapExplorationCmd',688,1),(11188,57121,58525,'OP_EqMentoring',643,1),(11189,57121,58525,'OP_EqPlaySound3DCmd',627,1),(11190,57121,58525,'OP_EqPlaySoundCmd',626,1),(11191,57121,58525,'OP_EqPlayVoiceCmd',628,1),(11192,57121,58525,'OP_EqQuestGroupCmd',645,1),(11193,57121,58525,'OP_EqQuestionnaireCmd',676,1),(11194,57121,58525,'OP_EqQuestJournalReplyCmd',644,1),(11195,57121,58525,'OP_EqQuestJournalUpdateCmd',642,1),(11196,57121,58525,'OP_EqReceiveOfferCmd',633,1),(11197,57121,58525,'OP_EqResurrectedCmd',660,1),(11198,57121,58525,'OP_EqSetControlGhostCmd',611,1),(11199,57121,58525,'OP_EqSetDebugPathPointsCmd',622,1),(11200,57121,58525,'OP_EqSetDefaultVerbCmd',662,1),(11201,57121,58525,'OP_EqSetPOVGhostCmd',612,1),(11202,57121,58525,'OP_EqShowBookCmd',675,1),(11203,57121,58525,'OP_EqShowDeathWindowCmd',656,1),(11204,57121,58525,'OP_EqShowWindowCmd',668,1),(11205,57121,58525,'OP_EqSpellCastEndCmd',659,1),(11206,57121,58525,'OP_EqSpellCastStartCmd',658,1),(11207,57121,58525,'OP_EqSpellMoveToRangeAndRetryCmd',690,1),(11208,57121,58525,'OP_EqStartBrokerCmd',687,1),(11209,57121,58525,'OP_EqStateCmd',625,1),(11210,57121,58525,'OP_EqStoreLogCmd',689,1),(11211,57121,58525,'OP_EqUpdateBankCmd',651,1),(11212,57121,58525,'OP_EqUpdateGhostCmd',610,1),(11213,57121,58525,'OP_EqUpdateLootCmd',654,1),(11214,57121,58525,'OP_EqUpdateMerchantCmd',646,1),(11215,57121,58525,'OP_EqUpdatePlayerMailCmd',691,1),(11216,57121,58525,'OP_EqUpdatePlayerTradeCmd',648,1),(11217,57121,58525,'OP_EqUpdateSignWidgetCmd',673,1),(11218,57121,58525,'OP_EqUpdateStoreCmd',647,1),(11219,57121,58525,'OP_EqUpdateSubClassesCmd',620,1),(11220,57121,58525,'OP_EqUpdateTargetCmd',683,1),(11221,57121,58525,'OP_EqWhoChannelQueryReplyCmd',681,1),(11222,57121,58525,'OP_ESInitMsg',25,1),(11223,57121,58525,'OP_ESLoginRequestMsg',3,1),(11224,57121,58525,'OP_ESReadyForClientsMsg',26,1),(11225,57121,58525,'OP_ESStatusMsg',100,1),(11226,57121,58525,'OP_ESWeatherRequestEndMsg',105,1),(11227,57121,58525,'OP_ESWeatherRequestMsg',104,1),(11228,57121,58525,'OP_ESZoneInstanceStatusMsg',101,1),(11229,57121,58525,'OP_ExamineConsignmentRequestMsg',171,1),(11230,57121,58525,'OP_ExamineConsignmentResponseMsg',172,1),(11231,57121,58525,'OP_ExamineInfoRequestMsg',255,1),(11232,57121,58525,'OP_ExamineItemRequestMsg',195,1),(11233,57121,58525,'OP_ExitHouseMsg',155,1),(11234,57121,58525,'OP_ExpectClientAsCharacterReplyMs',22,1),(11235,57121,58525,'OP_ExpectClientAsCharacterRequest',32,1),(11236,57121,58525,'OP_ExpPurchWindow',721,1),(11237,57121,58525,'OP_FellowshipExpMsg',122,1),(11238,57121,58525,'OP_FlightPathsMsg',413,1),(11239,57121,58525,'OP_GameWorldTimeMsg',43,1),(11240,57121,58525,'OP_PaperdollImage',575,1),(11241,57121,58525,'OP_GetAuctionAssetIDMsg',441,1),(11242,57121,58525,'OP_GetAuctionAssetIDReplyMsg',442,1),(11243,57121,58525,'OP_GetAvatarAccessRequestForCSToo',393,1),(11244,57121,58525,'OP_GetCharacterSerializedReplyMsg',424,1),(11245,57121,58525,'OP_GetCharacterSerializedRequestM',423,1),(11246,57121,58525,'OP_GroupCreatedMsg',88,1),(11247,57121,58525,'OP_GroupDestroyedMsg',89,1),(11248,57121,58525,'OP_GroupLeaderChangedMsg',93,1),(11249,57121,58525,'OP_GroupMemberAddedMsg',90,1),(11250,57121,58525,'OP_GroupMemberRemovedMsg',91,1),(11251,57121,58525,'OP_GroupOptionsMsg',199,1),(11252,57121,58525,'OP_GroupRemovedFromGroupMsg',92,1),(11253,57121,58525,'OP_GroupResendOOZDataMsg',94,1),(11254,57121,58525,'OP_GroupSettingsChangedMsg',95,1),(11255,57121,58525,'OP_GuildBankActionMsg',274,1),(11256,57121,58525,'OP_GuildBankActionResponseMsg',275,1),(11257,57121,58525,'OP_GuildBankEventListMsg',279,1),(11258,57121,58525,'OP_GuildBankItemDetailsRequestMsg',276,1),(11259,57121,58525,'OP_GuildBankItemDetailsResponseMs',277,1),(11260,57121,58525,'OP_GuildBankUpdateMsg',278,1),(11261,57121,58525,'OP_GuildEventActionMsg',269,1),(11262,57121,58525,'OP_GuildEventAddMsg',268,1),(11263,57121,58525,'OP_GuildEventDetailsMsg',272,1),(11264,57121,58525,'OP_GuildEventListMsg',270,1),(11265,57121,58525,'OP_GuildEventMsg',267,1),(11266,57121,58525,'OP_GuildMembershipResponseMsg',357,1),(11267,57121,58525,'OP_GuildRecruiting',701,1),(11268,57121,58525,'OP_GuildRecruitingDetails',702,1),(11269,57121,58525,'OP_GuildRecruitingImage',703,1),(11270,57121,58525,'OP_GuildRecruitingMemberInfo',700,1),(11271,57121,58525,'OP_GuildsayMsg',121,1),(11272,57121,58525,'OP_GuildStatusUpdate',694,1),(11273,57121,58525,'OP_GuildUpdateMsg',124,1),(11274,57121,58525,'OP_HideIllusionsMsg',194,1),(11275,57121,58525,'OP_HouseAccessRemoveMsg',158,1),(11276,57121,58525,'OP_HouseAccessSetMsg',157,1),(11277,57121,58525,'OP_HouseCustomizationScreenMsg',166,1),(11278,57121,58525,'OP_HouseDefaultAccessSetMsg',156,1),(11279,57121,58525,'OP_HouseDeletedRemotelyMsg',142,1),(11280,57121,58525,'OP_HouseItemsList',484,1),(11281,57121,58525,'OP_HousingDataChangedMsg',427,1),(11282,57121,58525,'OP_HousingRestoreMsg',428,1),(11283,57121,58525,'OP_InspectPlayerMsg',363,1),(11284,57121,58525,'OP_InspectPlayerRequestMsg',450,1),(11285,57121,58525,'OP_InviteRequestMsg',447,1),(11286,57121,58525,'OP_InviteResponseMsg',448,1),(11287,57121,58525,'OP_InviteTargetResponseMsg',449,1),(11288,57121,58525,'OP_JoinGuildNotifyMsg',359,1),(11289,57121,58525,'OP_JournalQuestStoryline',743,1),(11290,57121,58525,'OP_KeymapDataMsg',177,1),(11291,57121,58525,'OP_KeymapLoadMsg',175,1),(11292,57121,58525,'OP_KeymapNoneMsg',176,1),(11293,57121,58525,'OP_KeymapSaveMsg',178,1),(11294,57121,58525,'OP_KnowledgebaseRequestMsg',227,1),(11295,57121,58525,'OP_KnowledgebaseResponseMsg',228,1),(11296,57121,58525,'OP_KnowledgeWindowSlotMappingMsg',369,1),(11297,57121,58525,'OP_KnownLanguagesMsg',238,1),(11298,57121,58525,'OP_Launchpad',573,1),(11299,57121,58525,'OP_LeaveGuildNotifyMsg',358,1),(11300,57121,58525,'OP_LevelChangedMsg',261,1),(11301,57121,58525,'OP_LFGGroupSearch',504,1),(11302,57121,58525,'OP_LFGUpdateMsg',518,1),(11303,57121,58525,'OP_LikeOption',136,1),(11304,57121,58525,'OP_LoadCalendarEvents',576,1),(11305,57121,58525,'OP_LoadWelcomeWindow',560,1),(11306,57121,58525,'OP_LoginByNumRequestMsg',1,1),(11307,57121,58525,'OP_LoginReplyMsg',4,1),(11308,57121,58525,'OP_LoginRequestMsg',0,1),(11309,57121,58525,'OP_LootItemsRequestMsg',185,1),(11310,57121,58525,'OP_Lottery',699,1),(11311,57121,58525,'OP_LSCheckAcctLockMsg',204,1),(11312,57121,58525,'OP_LsClientAlertlogReplyMsg',242,1),(11313,57121,58525,'OP_LsClientBaselogReplyMsg',240,1),(11314,57121,58525,'OP_LsClientCrashlogReplyMsg',241,1),(11315,57121,58525,'OP_LsClientVerifylogReplyMsg',243,1),(11316,57121,58525,'OP_LsRequestClientCrashLogMsg',239,1),(11317,57121,58525,'OP_LSServerLockMsg',365,1),(11318,57121,58525,'OP_MacroInitMsg',258,1),(11319,57121,58525,'OP_MacroUpdateMsg',259,1),(11320,57121,58525,'OP_MailCommitSendMessageMsg',344,1),(11321,57121,58525,'OP_MailDeleteMessageMsg',340,1),(11322,57121,58525,'OP_MailEventNotificationMsg',411,1),(11323,57121,58525,'OP_MailGetHeadersReplyMsg',341,1),(11324,57121,58525,'OP_MailGetMessageMsg',338,1),(11325,57121,58525,'OP_MailGetMessageReplyMsg',342,1),(11326,57121,58525,'OP_MailRemoveAttachFromMailMsg',346,1),(11327,57121,58525,'OP_MailSendMessageMsg',339,1),(11328,57121,58525,'OP_MailSendMessageReplyMsg',343,1),(11329,57121,58525,'OP_MailSendSystemMessageMsg',345,1),(11330,57121,58525,'OP_MakeGroupLeaderMsg',87,1),(11331,57121,58525,'OP_MapFogDataInitMsg',395,1),(11332,57121,58525,'OP_MapFogDataUpdateMsg',396,1),(11333,57121,58525,'OP_MapRequest',521,1),(11334,57121,58525,'OP_MarketAddFundsReply',529,1),(11335,57121,58525,'OP_MarketAddFundsRequest',528,1),(11336,57121,58525,'OP_MarketFundsUpdate',526,1),(11337,57121,58525,'OP_MarketPlaceItems',537,1),(11338,57121,58525,'OP_MarketPlacePrices',532,1),(11339,57121,58525,'OP_MarketPurchase',531,1),(11340,57121,58525,'OP_MentorPopup',558,1),(11341,57121,58525,'OP_MercHireWindow',746,1),(11342,57121,58525,'OP_MercUnknown',747,1),(11343,57121,58525,'OP_MigrateBoatTransportMsg',252,1),(11344,57121,58525,'OP_MigrateBoatTransportReplyMsg',253,1),(11345,57121,58525,'OP_MigrateClientToZoneReplyMsg',82,1),(11346,57121,58525,'OP_MigrateClientToZoneRequestMsg',81,1),(11347,57121,58525,'OP_ModifyGuildMsg',266,1),(11348,57121,58525,'OP_MonitorCharacterListMsg',56,1),(11349,57121,58525,'OP_MonitorCharacterListRequestMsg',57,1),(11350,57121,58525,'OP_MonitorReplyMsg',55,1),(11351,57121,58525,'OP_MOTDMsg',44,1),(11352,57121,58525,'OP_MoveableObjectPlacementCriteri',160,1),(11353,57121,58525,'OP_MoveLogUpdateMsg',400,1),(11354,57121,58525,'OP_NotifyApprenticeStoppedMentori',408,1),(11355,57121,58525,'OP_OfferQuestMsg',401,1),(11356,57121,58525,'OP_OnscreenMsgMsg',264,1),(11357,57121,58525,'OP_OpenCharCust',561,1),(11358,57121,58525,'OP_OutOfZoneMemberDataMsg',96,1),(11359,57121,58525,'OP_PayHouseUpkeepMsg',159,1),(11360,57121,58525,'OP_PerformCameraShakeMsg',214,1),(11361,57121,58525,'OP_PerformPlayerKnockbackMsg',213,1),(11362,57121,58525,'OP_PetOptions',201,1),(11363,57121,58525,'OP_PetOptionsResponse',579,1),(11364,57121,58525,'OP_PlayCharacterReplyMsg',19,1),(11365,57121,58525,'OP_PlayCharacterRequestMsg',18,1),(11366,57121,58525,'OP_PlayerHouseAccessUpdateMsg',147,1),(11367,57121,58525,'OP_PlayerHouseBaseScreenMsg',145,1),(11368,57121,58525,'OP_PlayerHouseCloseUIMsg',149,1),(11369,57121,58525,'OP_PlayerHouseDisplayStatusMsg',148,1),(11370,57121,58525,'OP_PlayerHousePurchaseScreenMsg',146,1),(11371,57121,58525,'OP_PlayerMadeInstances',140,1),(11372,57121,58525,'OP_PlayerMadeInstancesScreen',139,1),(11373,57121,58525,'OP_PlayerPollAnswer',557,1),(11374,57121,58525,'OP_PlayerPollPopup',556,1),(11375,57121,58525,'OP_PlayLon',511,1),(11376,57121,58525,'OP_PointOfInterest',725,1),(11377,57121,58525,'OP_PointOfInterest2',726,1),(11378,57121,58525,'OP_PopulateSkillMapsMsg',215,1),(11379,57121,58525,'OP_PositionBoatTransportMsg',251,1),(11380,57121,58525,'OP_PositionMoveableObject',162,1),(11381,57121,58525,'OP_PostPossessionMsg',454,1),(11382,57121,58525,'OP_PredictionUpdateMsg',37,1),(11383,57121,58525,'OP_PrePossessionMsg',453,1),(11384,57121,58525,'OP_PromoFlagsDetailsMsg',374,1),(11385,57121,58525,'OP_PublishHouse',138,1),(11386,57121,58525,'OP_PurchaseConsignmentLoreCheckRe',407,1),(11387,57121,58525,'OP_PurchaseConsignmentRequestMsg',128,1),(11388,57121,58525,'OP_QueAllBgSolo',564,1),(11389,57121,58525,'OP_QuestionnaireMsg',260,1),(11390,57121,58525,'OP_QuestJournalInspectMsg',114,1),(11391,57121,58525,'OP_QuestJournalOpenMsg',113,1),(11392,57121,58525,'OP_QuestJournalSetVisibleMsg',115,1),(11393,57121,58525,'OP_QuestJournalWaypointMsg',116,1),(11394,57121,58525,'OP_QuestReward',320,1),(11395,57121,58525,'OP_QuickbarInitMsg',256,1),(11396,57121,58525,'OP_QuickbarUpdateMsg',257,1),(11397,57121,58525,'OP_RaceRestrictionMsg',439,1),(11398,57121,58525,'OP_ReadBookPageMsg',196,1),(11399,57121,58525,'OP_ReadyForTakeOffMsg',192,1),(11400,57121,58525,'OP_ReadyToZoneMsg',84,1),(11401,57121,58525,'OP_RecipeBook',538,1),(11402,57121,58525,'OP_RecipeDetailsMsg',72,1),(11403,57121,58525,'OP_RecipeList',737,1),(11404,57121,58525,'OP_RecipeListUnknown',591,1),(11405,57121,58525,'OP_RelinquishHouseMsg',153,1),(11406,57121,58525,'OP_ReloadLocalizedTxtMsg',355,1),(11407,57121,58525,'OP_RemoteCmdMsg',42,1),(11408,57121,58525,'OP_RemoveClientFromGroupMsg',85,1),(11409,57121,58525,'OP_RemoveConcentrationMsg',112,1),(11410,57121,58525,'OP_RemoveGroupFromGroupMsg',86,1),(11411,57121,58525,'OP_RemoveSpellEffectMsg',111,1),(11412,57121,58525,'OP_RenameGuildMsg',282,1),(11413,57121,58525,'OP_ReplaceableSubMeshesMsg',165,1),(11414,57121,58525,'OP_ReportMsg',380,1),(11415,57121,58525,'OP_RequestCampMsg',50,1),(11416,57121,58525,'OP_RequestGuildBankEventDetailsMs',280,1),(11417,57121,58525,'OP_RequestGuildEventDetailsMsg',271,1),(11418,57121,58525,'OP_RequestGuildInfoMsg',273,1),(11419,57121,58525,'OP_RequestGuildMembershipMsg',356,1),(11420,57121,58525,'OP_RequestHelpRepathMsg',206,1),(11421,57121,58525,'OP_RequestRecipeDetailsMsg',71,1),(11422,57121,58525,'OP_RequestTargetLocMsg',207,1),(11423,57121,58525,'OP_Research',738,1),(11424,57121,58525,'OP_ResendWorldChannelsMsg',443,1),(11425,57121,58525,'OP_ReskinCharacterRequestMsg',15,1),(11426,57121,58525,'OP_RestartZoneMsg',412,1),(11427,57121,58525,'OP_RewardPackMsg',281,1),(11428,57121,58525,'OP_SatMsg',189,1),(11429,57121,58525,'OP_SavageBarInitMsg',578,1),(11430,57121,58525,'OP_SelectZoneTeleporterDestinatio',354,1),(11431,57121,58525,'OP_SendLatestRequestMsg',97,1),(11432,57121,58525,'OP_ServerPlayCharacterReplyMsg',24,1),(11433,57121,58525,'OP_ServerPlayCharacterRequestMsg',23,1),(11434,57121,58525,'OP_SetInstanceDisplayNameMsg',440,1),(11435,57121,58525,'OP_SetRemoteCmdsMsg',41,1),(11436,57121,58525,'OP_SetSocialMsg',99,1),(11437,57121,58525,'OP_ShaderCustomizationMsg',164,1),(11438,57121,58525,'OP_ShowCreateFromRecipeUIMsg',219,1),(11439,57121,58525,'OP_ShowIllusionsMsg',193,1),(11440,57121,58525,'OP_ShowItemCreationProcessUIMsg',223,1),(11441,57121,58525,'OP_ShowRecipeBookMsg',226,1),(11442,57121,58525,'OP_ShowZoneTeleporterDestinations',353,1),(11443,57121,58525,'OP_SitMsg',187,1),(11444,57121,58525,'OP_SkillInfoRequest',514,1),(11445,57121,58525,'OP_SkillInfoResponse',515,1),(11446,57121,58525,'OP_SpellGainedMsg',262,1),(11447,57121,58525,'OP_StandMsg',188,1),(11448,57121,58525,'OP_StoodMsg',190,1),(11449,57121,58525,'OP_StopItemCreationMsg',222,1),(11450,57121,58525,'OP_StoppedLootingMsg',186,1),(11451,57121,58525,'OP_StopTrackingMsg',391,1),(11452,57121,58525,'OP_SubmitCharCust',562,1),(11453,57121,58525,'OP_SupplyDepot',735,1),(11454,57121,58525,'OP_SysClient',218,1),(11455,57121,58525,'OP_TeleportWithinZoneMsg',79,1),(11456,57121,58525,'OP_TeleportWithinZoneNoReloadMsg',80,1),(11457,57121,58525,'OP_TintWidgetsMsg',170,1),(11458,57121,58525,'OP_TitleUpdateMsg',384,1),(11459,57121,58525,'OP_TrackingUpdateMsg',389,1),(11460,57121,58525,'OP_TradeskillList',704,1),(11461,57121,58525,'OP_TraitsList',727,1),(11462,57121,58525,'OP_UIEvent',527,1),(11463,57121,58525,'OP_UIResetMsg',174,1),(11464,57121,58525,'OP_UISettingsResponseMsg',173,1),(11465,57121,58525,'OP_Unknown',760,1),(11466,57121,58525,'OP_UnknownNpcMsg',373,1),(11467,57121,58525,'OP_UpdateActivePublicZonesMsg',372,1),(11468,57121,58525,'OP_UpdateCharacterSheetMsg',63,1),(11469,57121,58525,'OP_UpdateClientPredFlagsMsg',245,1),(11470,57121,58525,'OP_UpdateDebugRadiiMsg',379,1),(11471,57121,58525,'OP_UpdateGroupMemberDataMsg',388,1),(11472,57121,58525,'OP_UpdateHouseAccessDataMsg',144,1),(11473,57121,58525,'OP_UpdateHouseDataMsg',143,1),(11474,57121,58525,'OP_UpdateInventoryMsg',68,1),(11475,57121,58525,'OP_UpdateItemCreationProcessUIMsg',224,1),(11476,57121,58525,'OP_UpdateMotdMsg',208,1),(11477,57121,58525,'OP_UpdateOpportunityMsg',75,1),(11478,57121,58525,'OP_UpdatePositionMsg',39,1),(11479,57121,58525,'OP_UpdateRaidMsg',381,1),(11480,57121,58525,'OP_UpdateRecipeBookMsg',70,1),(11481,57121,58525,'OP_UpdateSkillBookMsg',73,1),(11482,57121,58525,'OP_UpdateSkillsMsg',74,1),(11483,57121,58525,'OP_UpdateSpellBookMsg',66,1),(11484,57121,58525,'OP_UpdateTargetLocMsg',62,1),(11485,57121,58525,'OP_UpdateTargetMsg',61,1),(11486,57121,58525,'OP_UpdateTitleCmd',494,1),(11487,57121,58525,'OP_UseAdornment',715,1),(11488,57121,58525,'OP_VideoUploaded',577,1),(11489,57121,58525,'OP_VoiceChatChannel',520,1),(11490,57121,58525,'OP_VoiceChatServer',731,1),(11491,57121,58525,'OP_WaypointReplyMsg',349,1),(11492,57121,58525,'OP_WaypointRequestMsg',348,1),(11493,57121,58525,'OP_WaypointSelectMsg',350,1),(11494,57121,58525,'OP_WaypointUpdateMsg',351,1),(11495,57121,58525,'OP_Weakness',581,1),(11496,57121,58525,'OP_WhoQueryReplyMsg',54,1),(11497,57121,58525,'OP_WhoQueryRequestMsg',53,1),(11498,57121,58525,'OP_WorldDataChangeMsg',410,1),(11499,57121,58525,'OP_WorldDataUpdateMsg',237,1),(11500,57121,58525,'OP_WorldListMsg',8,1),(11501,57121,58525,'OP_WorldPingMsg',399,1),(11502,57121,58525,'OP_WorldShutdownUpdateMsg',403,1),(11503,57121,58525,'OP_WorldStatusChangeMsg',6,1),(11504,57121,58525,'OP_WorldTravelAvail',570,1),(11505,57121,58525,'OP_WSAcctLockStatusMsg',205,1),(11506,57121,58525,'OP_WSCreateCharacterReplyMsg',14,1),(11507,57121,58525,'OP_WSCreateCharacterRequestMsg',13,1),(11508,57121,58525,'OP_WSLoginRequestMsg',2,1),(11509,57121,58525,'OP_WSServerHideMsg',366,1),(11510,57121,58525,'OP_WSServerLockMsg',364,1),(11511,57121,58525,'OP_WSStatusReplyMsg',5,1),(11512,57121,58525,'OP_ZoneBgInstanceList',566,1),(11513,57121,58525,'OP_ZoneInfoMsg',33,1),(11514,57121,58525,'OP_ZoneInstanceCreateReplyMsg',30,1),(11515,57121,58525,'OP_ZoneInstanceDestroyedMsg',31,1),(11516,57121,58525,'OP_ZoneMOTDMsg',45,1),(11517,57121,58525,'OP_ZonesStatusMsg',103,1),(11518,57121,58525,'OP_ZonesStatusRequestMsg',102,1),(11519,57121,58525,'OP_ZoneToFriendReplyMsg',284,1),(11520,57121,58525,'OP_ZoneToFriendRequestMsg',283,1),(11521,0,0,'OP_OpenCharCust',9999,1),(11522,839,844,'OP_OpenCharCust',9999,1),(11523,908,927,'OP_OpenCharCust',9999,1),(11524,1008,1011,'OP_OpenCharCust',9999,1),(11525,1045,1086,'OP_OpenCharCust',9999,1),(11526,1096,1096,'OP_OpenCharCust',529,1),(11527,0,0,'OP_CharacterMerc',9999,1),(11528,839,844,'OP_CharacterMerc',9999,1),(11529,908,927,'OP_CharacterMerc',9999,1),(11530,1008,1011,'OP_CharacterMerc',9999,1),(11531,1045,1086,'OP_CharacterMerc',9999,1),(11532,1096,1096,'OP_CharacterMerc',9999,1),(11533,0,0,'OP_AfterInvSpellUpdate',9999,1),(11534,839,844,'OP_AfterInvSpellUpdate',9999,1),(11535,908,927,'OP_AfterInvSpellUpdate',9999,1),(11536,1008,1011,'OP_AfterInvSpellUpdate',9999,1),(11537,1045,1086,'OP_AfterInvSpellUpdate',9999,1),(11538,1096,1096,'OP_AfterInvSpellUpdate',65,1),(11539,0,0,'OP_CharacterCreatedDungeons',9999,1),(11540,839,844,'OP_CharacterCreatedDungeons',9999,1),(11541,908,927,'OP_CharacterCreatedDungeons',9999,1),(11542,1008,1011,'OP_CharacterCreatedDungeons',9999,1),(11543,1045,1086,'OP_CharacterCreatedDungeons',9999,1),(11544,1096,1096,'OP_CharacterCreatedDungeons',9999,1),(11545,0,0,'OP_CharacterHousingList',9999,1),(11546,839,844,'OP_CharacterHousingList',9999,1),(11547,908,927,'OP_CharacterHousingList',9999,1),(11548,1008,1011,'OP_CharacterHousingList',9999,1),(11549,1045,1086,'OP_CharacterHousingList',9999,1),(11550,1096,1096,'OP_CharacterHousingList',489,1),(11551,0,0,'OP_HouseItemsList',9999,1),(11552,839,844,'OP_HouseItemsList',9999,1),(11553,908,927,'OP_HouseItemsList',9999,1),(11554,1008,1011,'OP_HouseItemsList',9999,1),(11555,1045,1086,'OP_HouseItemsList',9999,1),(11556,1096,1096,'OP_HouseItemsList',9999,1),(11557,0,0,'OP_CharacterMounts',9999,1),(11558,839,844,'OP_CharacterMounts',9999,1),(11559,908,927,'OP_CharacterMounts',9999,1),(11560,1008,1011,'OP_CharacterMounts',9999,1),(11561,1045,1086,'OP_CharacterMounts',9999,1),(11562,1096,1096,'OP_CharacterMounts',9999,1),(11563,0,0,'OP_LoadCalendarEvents',9999,1),(11564,839,844,'OP_LoadCalendarEvents',9999,1),(11565,908,927,'OP_LoadCalendarEvents',9999,1),(11566,1008,1011,'OP_LoadCalendarEvents',9999,1),(11567,1045,1086,'OP_LoadCalendarEvents',9999,1),(11568,1096,1096,'OP_LoadCalendarEvents',542,1),(11569,0,0,'OP_LoadWelcomeWindow',9999,1),(11570,839,844,'OP_LoadWelcomeWindow',9999,1),(11571,908,927,'OP_LoadWelcomeWindow',9999,1),(11572,1008,1011,'OP_LoadWelcomeWindow',9999,1),(11573,1045,1086,'OP_LoadWelcomeWindow',9999,1),(11574,1096,1096,'OP_LoadWelcomeWindow',528,1),(11575,0,0,'OP_DungeonMakerItemRequest',9999,1),(11576,839,844,'OP_DungeonMakerItemRequest',9999,1),(11577,908,927,'OP_DungeonMakerItemRequest',9999,1),(11578,1008,1011,'OP_DungeonMakerItemRequest',9999,1),(11579,1045,1086,'OP_DungeonMakerItemRequest',9999,1),(11580,1096,1096,'OP_DungeonMakerItemRequest',9999,1),(11581,0,0,'OP_SysClient',191,1),(11582,839,844,'OP_SysClient',191,1),(11583,908,927,'OP_SysClient',198,1),(11584,1008,1011,'OP_SysClient',199,1),(11585,1045,1086,'OP_SysClient',203,1),(11586,1096,1096,'OP_SysClient',202,1),(11587,0,0,'OP_LFGGroupSearch',9999,1),(11588,839,844,'OP_LFGGroupSearch',9999,1),(11589,908,927,'OP_LFGGroupSearch',9999,1),(11590,1008,1011,'OP_LFGGroupSearch',9999,1),(11591,1045,1086,'OP_LFGGroupSearch',9999,1),(11592,1096,1096,'OP_LFGGroupSearch',9999,1),(11593,0,0,'OP_MarketPlacePrices',9999,1),(11594,839,844,'OP_MarketPlacePrices',9999,1),(11595,908,927,'OP_MarketPlacePrices',9999,1),(11596,1008,1011,'OP_MarketPlacePrices',9999,1),(11597,1045,1086,'OP_MarketPlacePrices',9999,1),(11598,1096,1096,'OP_MarketPlacePrices',9999,1),(11599,0,0,'OP_MarketFundsUpdate',9999,1),(11600,839,844,'OP_MarketFundsUpdate',9999,1),(11601,908,927,'OP_MarketFundsUpdate',9999,1),(11602,1008,1011,'OP_MarketFundsUpdate',9999,1),(11603,1045,1086,'OP_MarketFundsUpdate',9999,1),(11604,1096,1096,'OP_MarketFundsUpdate',9999,1),(11605,0,0,'OP_MarketAddFundsRequest',9999,1),(11606,839,844,'OP_MarketAddFundsRequest',9999,1),(11607,908,927,'OP_MarketAddFundsRequest',9999,1),(11608,1008,1011,'OP_MarketAddFundsRequest',9999,1),(11609,1045,1086,'OP_MarketAddFundsRequest',9999,1),(11610,1096,1096,'OP_MarketAddFundsRequest',9999,1),(11611,0,0,'OP_ZoneBgInstanceList',9999,1),(11612,839,844,'OP_ZoneBgInstanceList',9999,1),(11613,908,927,'OP_ZoneBgInstanceList',9999,1),(11614,1008,1011,'OP_ZoneBgInstanceList',9999,1),(11615,1045,1086,'OP_ZoneBgInstanceList',9999,1),(11616,1096,1096,'OP_ZoneBgInstanceList',534,1),(11617,0,0,'OP_UIEvent',9999,1),(11618,839,844,'OP_UIEvent',9999,1),(11619,908,927,'OP_UIEvent',9999,1),(11620,1008,1011,'OP_UIEvent',9999,1),(11621,1045,1086,'OP_UIEvent',9999,1),(11622,1096,1096,'OP_UIEvent',9999,1),(11623,0,0,'OP_EQHearThreatCmd',9999,1),(11624,839,844,'OP_EQHearThreatCmd',9999,1),(11625,908,927,'OP_EQHearThreatCmd',9999,1),(11626,1008,1011,'OP_EQHearThreatCmd',9999,1),(11627,1045,1086,'OP_EQHearThreatCmd',9999,1),(11628,1096,1096,'OP_EQHearThreatCmd',9999,1),(11629,0,0,'OP_Weakness',9999,1),(11630,839,844,'OP_Weakness',9999,1),(11631,908,927,'OP_Weakness',9999,1),(11632,1008,1011,'OP_Weakness',9999,1),(11633,1045,1086,'OP_Weakness',9999,1),(11634,1096,1096,'OP_Weakness',9999,1),(11635,0,0,'OP_SavageBarInitMsg',9999,1),(11636,839,844,'OP_SavageBarInitMsg',9999,1),(11637,908,927,'OP_SavageBarInitMsg',9999,1),(11638,1008,1011,'OP_SavageBarInitMsg',9999,1),(11639,1045,1086,'OP_SavageBarInitMsg',9999,1),(11640,1096,1096,'OP_SavageBarInitMsg',9999,1),(11641,0,0,'OP_PetOptionsResponse',9999,1),(11642,839,844,'OP_PetOptionsResponse',9999,1),(11643,908,927,'OP_PetOptionsResponse',9999,1),(11644,1008,1011,'OP_PetOptionsResponse',9999,1),(11645,1045,1086,'OP_PetOptionsResponse',9999,1),(11646,1096,1096,'OP_PetOptionsResponse',9999,1),(11647,0,0,'OP_CurrentPet',9999,1),(11648,839,844,'OP_CurrentPet',9999,1),(11649,908,927,'OP_CurrentPet',9999,1),(11650,1008,1011,'OP_CurrentPet',9999,1),(11651,1045,1086,'OP_CurrentPet',9999,1),(11652,1096,1096,'OP_CurrentPet',9999,1),(11653,0,0,'OP_JournalQuestStoryline',9999,1),(11654,839,844,'OP_JournalQuestStoryline',9999,1),(11655,908,927,'OP_JournalQuestStoryline',9999,1),(11656,1008,1011,'OP_JournalQuestStoryline',9999,1),(11657,1045,1086,'OP_JournalQuestStoryline',9999,1),(11658,1096,1096,'OP_JournalQuestStoryline',9999,1),(11659,0,0,'OP_EQHearDispellCmd',9999,1),(11660,839,844,'OP_EQHearDispellCmd',9999,1),(11661,908,927,'OP_EQHearDispellCmd',9999,1),(11662,1008,1011,'OP_EQHearDispellCmd',9999,1),(11663,1045,1086,'OP_EQHearDispellCmd',9999,1),(11664,1096,1096,'OP_EQHearDispellCmd',9999,1),(11665,0,0,'OP_LikeOption',9999,1),(11666,839,844,'OP_LikeOption',9999,1),(11667,908,927,'OP_LikeOption',9999,1),(11668,1008,1011,'OP_LikeOption',9999,1),(11669,1045,1086,'OP_LikeOption',9999,1),(11670,1096,1096,'OP_LikeOption',9999,1),(11671,0,0,'OP_Launchpad',9999,1),(11672,839,844,'OP_Launchpad',9999,1),(11673,908,927,'OP_Launchpad',9999,1),(11674,1008,1011,'OP_Launchpad',9999,1),(11675,1045,1086,'OP_Launchpad',9999,1),(11676,1096,1096,'OP_Launchpad',9999,1),(11677,1193,1195,'OP_Launchpad',9999,1),(11678,1198,1199,'OP_Launchpad',9999,1),(11679,1204,1205,'OP_Launchpad',9999,1),(11680,1208,1208,'OP_Launchpad',9999,1),(11681,57000,57002,'OP_Launchpad',9999,1),(11682,0,0,'OP_ClearForLandingMsg',9999,1),(11683,839,844,'OP_ClearForLandingMsg',9999,1),(11684,908,927,'OP_ClearForLandingMsg',9999,1),(11685,1008,1011,'OP_ClearForLandingMsg',9999,1),(11686,1045,1086,'OP_ClearForLandingMsg',9999,1),(11687,1096,1096,'OP_ClearForLandingMsg',473,1),(11688,1193,1195,'OP_ClearForLandingMsg',9999,1),(11689,1198,1199,'OP_ClearForLandingMsg',9999,1),(11690,1204,1205,'OP_ClearForLandingMsg',9999,1),(11691,1208,1208,'OP_ClearForLandingMsg',490,1),(11692,57000,57002,'OP_ClearForLandingMsg',9999,1),(11693,0,0,'OP_RecipeListUnknown',9999,1),(11694,839,844,'OP_RecipeListUnknown',9999,1),(11695,908,927,'OP_RecipeListUnknown',9999,1),(11696,1008,1011,'OP_RecipeListUnknown',9999,1),(11697,1045,1086,'OP_RecipeListUnknown',9999,1),(11698,1096,1096,'OP_RecipeListUnknown',9999,1),(11699,1193,1195,'OP_RecipeListUnknown',9999,1),(11700,1198,1199,'OP_RecipeListUnknown',9999,1),(11701,1204,1205,'OP_RecipeListUnknown',9999,1),(11702,1208,1208,'OP_RecipeListUnknown',9999,1),(11703,57000,57002,'OP_RecipeListUnknown',9999,1),(11704,57003,57014,'OP_RecipeListUnknown',9999,1),(11705,57015,57031,'OP_RecipeListUnknown',9999,1),(11706,0,0,'OP_DailyObjectives',9999,1),(11707,839,844,'OP_DailyObjectives',9999,1),(11708,908,927,'OP_DailyObjectives',9999,1),(11709,1008,1011,'OP_DailyObjectives',9999,1),(11710,1045,1086,'OP_DailyObjectives',9999,1),(11711,1096,1096,'OP_DailyObjectives',9999,1),(11712,1193,1195,'OP_DailyObjectives',9999,1),(11713,1198,1199,'OP_DailyObjectives',9999,1),(11714,1204,1205,'OP_DailyObjectives',9999,1),(11715,1208,1208,'OP_DailyObjectives',9999,1),(11716,57000,57002,'OP_DailyObjectives',9999,1),(11717,57003,57014,'OP_DailyObjectives',9999,1),(11718,57015,57031,'OP_DailyObjectives',9999,1),(11719,57032,57047,'OP_DailyObjectives',9999,1),(11720,0,0,'OP_HeritageMsg',9999,1),(11721,839,844,'OP_HeritageMsg',9999,1),(11722,908,927,'OP_HeritageMsg',9999,1),(11723,1008,1011,'OP_HeritageMsg',9999,1),(11724,1045,1086,'OP_HeritageMsg',9999,1),(11725,1096,1096,'OP_HeritageMsg',9999,1),(11726,1193,1195,'OP_HeritageMsg',9999,1),(11727,1198,1199,'OP_HeritageMsg',9999,1),(11728,1204,1205,'OP_HeritageMsg',9999,1),(11729,1208,1208,'OP_HeritageMsg',9999,1),(11730,57000,57002,'OP_HeritageMsg',9999,1),(11731,57003,57014,'OP_HeritageMsg',9999,1),(11732,57015,57031,'OP_HeritageMsg',9999,1),(11733,57032,57047,'OP_HeritageMsg',9999,1),(11734,57048,57079,'OP_HeritageMsg',9999,1),(11735,57080,57095,'OP_HeritageMsg',9999,1),(11736,57107,57109,'OP_HeritageMsg',9999,1),(11737,57121,58525,'OP_HeritageMsg',9999,1),(11738,58542,58588,'OP_AchievementUpdateMsg',742,1),(11739,58542,58588,'OP_AddSocialStructureStandingMsg',249,1),(11740,58542,58588,'OP_AdvancementRequestMsg',394,1),(11741,58542,58588,'OP_AdventureList',488,1),(11742,58542,58588,'OP_AFKUpdateMsg',370,1),(11743,58542,58588,'OP_AfterInvSpellUpdate',69,1),(11744,58542,58588,'OP_AllCharactersDescReplyMsg',10,1),(11745,58542,58588,'OP_AllCharactersDescRequestMsg',9,1),(11746,58542,58588,'OP_AllWSDescRequestMsg',7,1),(11747,58542,58588,'OP_AnonUpdateMsg',371,1),(11748,58542,58588,'OP_ArenaCreate',456,1),(11749,58542,58588,'OP_ArenaGameTypesMsg',445,1),(11750,58542,58588,'OP_ArenaList',457,1),(11751,58542,58588,'OP_ArenaWindow',465,1),(11752,58542,58588,'OP_AttackAllowed',500,1),(11753,58542,58588,'OP_AttackNotAllowed',501,1),(11754,58542,58588,'OP_AuctionAbortMsg',436,1),(11755,58542,58588,'OP_AuctionCharacter',433,1),(11756,58542,58588,'OP_AuctionCharacterReply',434,1),(11757,58542,58588,'OP_AuctionCoin',431,1),(11758,58542,58588,'OP_AuctionCoinReply',432,1),(11759,58542,58588,'OP_AuctionCommitMsg',435,1),(11760,58542,58588,'OP_AuctionItem',429,1),(11761,58542,58588,'OP_AuctionItemReply',430,1),(11762,58542,58588,'OP_AuditAuctionEventMsg',446,1),(11763,58542,58588,'OP_AvatarCreatedMsg',46,1),(11764,58542,58588,'OP_AvatarDestroyedMsg',47,1),(11765,58542,58588,'OP_AvatarUpdateMsg',360,1),(11766,58542,58588,'OP_BadLanguageFilter',519,1),(11767,58542,58588,'OP_BagOptions',502,1),(11768,58542,58588,'OP_BeginItemCreationMsg',221,1),(11769,58542,58588,'OP_BeginTrackingMsg',390,1),(11770,58542,58588,'OP_BioUpdateMsg',362,1),(11771,58542,58588,'OP_BrokerAddBag',292,1),(11772,58542,58588,'OP_BrokerRemoveBag',293,1),(11773,58542,58588,'OP_BrokerSellList',685,1),(11774,58542,58588,'OP_BuyPlayerHouseMsg',150,1),(11775,58542,58588,'OP_BuyPlayerHouseTintMsg',151,1),(11776,58542,58588,'OP_CampAbortedMsg',52,1),(11777,58542,58588,'OP_CampClientMsg',387,1),(11778,58542,58588,'OP_CampStartedMsg',51,1),(11779,58542,58588,'OP_CancelCreateFromRecipeMsg',220,1),(11780,58542,58588,'OP_CancelledFeignMsg',216,1),(11781,58542,58588,'OP_CancelMoveObjectModeMsg',163,1),(11782,58542,58588,'OP_CancelSpellCast',489,1),(11783,58542,58588,'OP_ChangeServerControlFlagMsg',246,1),(11784,58542,58588,'OP_ChangeZoneMsg',77,1),(11785,58542,58588,'OP_CharacterAchievements',741,1),(11786,58542,58588,'OP_CharacterCreatedDungeons',551,1),(11787,58542,58588,'OP_CharacterCurrency',740,1),(11788,58542,58588,'OP_CharacterHousingList',507,1),(11789,58542,58588,'OP_CharacterLinkdeadMsg',414,1),(11790,58542,58588,'OP_CharacterMerc',65,1),(11791,58542,58588,'OP_CharacterMounts',582,1),(11792,58542,58588,'OP_CharacterPet',64,1),(11793,58542,58588,'OP_CharNameChangedMsg',352,1),(11794,58542,58588,'OP_CharRenamed',706,1),(11795,58542,58588,'OP_CharTransferCommitReplyMsg',422,1),(11796,58542,58588,'OP_CharTransferCommitRequestMsg',420,1),(11797,58542,58588,'OP_CharTransferReplyMsg',418,1),(11798,58542,58588,'OP_CharTransferRequestMsg',417,1),(11799,58542,58588,'OP_CharTransferRollbackReplyMsg',421,1),(11800,58542,58588,'OP_CharTransferRollbackRequestMsg',419,1),(11801,58542,58588,'OP_CharTransferStartReplyMsg',416,1),(11802,58542,58588,'OP_CharTransferStartRequestMsg',415,1),(11803,58542,58588,'OP_CharTransferValidateReplyMsg',438,1),(11804,58542,58588,'OP_CharTransferValidateRequestMsg',437,1),(11805,58542,58588,'OP_ChatCreateChannelMsg',285,1),(11806,58542,58588,'OP_ChatFiltersMsg',335,1),(11807,58542,58588,'OP_ChatJoinChannelMsg',286,1),(11808,58542,58588,'OP_ChatLeaveChannelMsg',288,1),(11809,58542,58588,'OP_ChatRelationshipUpdateMsg',184,1),(11810,58542,58588,'OP_ChatSendFriendsMsg',295,1),(11811,58542,58588,'OP_ChatSendIgnoresMsg',296,1),(11812,58542,58588,'OP_ChatTellChannelMsg',289,1),(11813,58542,58588,'OP_ChatTellUserMsg',290,1),(11814,58542,58588,'OP_ChatToggleFriendMsg',291,1),(11815,58542,58588,'OP_ChatToggleIgnoreMsg',294,1),(11816,58542,58588,'OP_ChatWhoChannelMsg',287,1),(11817,58542,58588,'OP_ClearDataMsg',98,1),(11818,58542,58588,'OP_ClearForLandingMsg',491,1),(11819,58542,58588,'OP_ClearForTakeOffMsg',191,1),(11820,58542,58588,'OP_ClientCmdMsg',58,1),(11821,58542,58588,'OP_ClientFellMsg',385,1),(11822,58542,58588,'OP_ClientIdleBeginMsg',405,1),(11823,58542,58588,'OP_ClientIdleEndMsg',406,1),(11824,58542,58588,'OP_ClientInDeathRegionMsg',386,1),(11825,58542,58588,'OP_ClientTeleportRequestMsg',78,1),(11826,58542,58588,'OP_ClientTeleportToLocationMsg',244,1),(11827,58542,58588,'OP_CloseGroupInviteWindowMsg',397,1),(11828,58542,58588,'OP_CollectAllHouseItemsMsg',152,1),(11829,58542,58588,'OP_ConsignItemRequestMsg',126,1),(11830,58542,58588,'OP_ConsignItemResponseMsg',127,1),(11831,58542,58588,'OP_ConsignmentCloseStoreMsg',125,1),(11832,58542,58588,'OP_ConsignRemoveItemsMsg',378,1),(11833,58542,58588,'OP_ConsignViewCreateMsg',375,1),(11834,58542,58588,'OP_ConsignViewGetPageMsg',376,1),(11835,58542,58588,'OP_ConsignViewReleaseMsg',377,1),(11836,58542,58588,'OP_ConsignViewSortMsg',383,1),(11837,58542,58588,'OP_CorruptedClientMsg',409,1),(11838,58542,58588,'OP_CreateBoatTransportsMsg',250,1),(11839,58542,58588,'OP_CreateCharacterDungeon',547,1),(11840,58542,58588,'OP_CreateCharacterReplyMsg',12,1),(11841,58542,58588,'OP_CreateCharacterRequestMsg',11,1),(11842,58542,58588,'OP_CreateCharFromCBBReplyMsg',426,1),(11843,58542,58588,'OP_CreateCharFromCBBRequestMsg',425,1),(11844,58542,58588,'OP_CreateGuildReplyMsg',120,1),(11845,58542,58588,'OP_CreateGuildRequestMsg',119,1),(11846,58542,58588,'OP_CreateZoneInstanceMsg',29,1),(11847,58542,58588,'OP_CsCategoryRequestMsg',367,1),(11848,58542,58588,'OP_CsCategoryResponseMsg',368,1),(11849,58542,58588,'OP_CSTicketAddCommentMsg',234,1),(11850,58542,58588,'OP_CSTicketChangeNotificationMsg',236,1),(11851,58542,58588,'OP_CSTicketCommentRequestMsg',231,1),(11852,58542,58588,'OP_CSTicketCommentResponseMsg',232,1),(11853,58542,58588,'OP_CSTicketCreateMsg',233,1),(11854,58542,58588,'OP_CSTicketDeleteMsg',235,1),(11855,58542,58588,'OP_CSTicketHeaderRequestMsg',229,1),(11856,58542,58588,'OP_CSTicketInfoMsg',230,1),(11857,58542,58588,'OP_CSToolAccessResponseMsg',388,1),(11858,58542,58588,'OP_CSToolsRequestMsg',247,1),(11859,58542,58588,'OP_CSToolsResponseMsg',248,1),(11860,58542,58588,'OP_CurrentPet',485,1),(11861,58542,58588,'OP_CustomizationPurchaseRequestMs',167,1),(11862,58542,58588,'OP_CustomizationReplyMsg',169,1),(11863,58542,58588,'OP_CustomizationSetRequestMsg',168,1),(11864,58542,58588,'OP_CustomizeHouseDisplay',731,1),(11865,58542,58588,'OP_DailyObjectives',595,1),(11866,58542,58588,'OP_DefaultGroupOptionsMsg',198,1),(11867,58542,58588,'OP_DefaultGroupOptionsRequestMsg',197,1),(11868,58542,58588,'OP_DeleteCharacterReplyMsg',17,1),(11869,58542,58588,'OP_DeleteCharacterRequestMsg',16,1),(11870,58542,58588,'OP_DeleteGuildMsg',123,1),(11871,58542,58588,'OP_DestUpdateReq',210,1),(11872,58542,58588,'OP_DialogCloseMsg',110,1),(11873,58542,58588,'OP_DialogSelectMsg',109,1),(11874,58542,58588,'OP_DispatchClientCmdMsg',60,1),(11875,58542,58588,'OP_DispatchESMsg',59,1),(11876,58542,58588,'OP_DispatchMsg',451,1),(11877,58542,58588,'OP_DispatchSpellCmdMsg',179,1),(11878,58542,58588,'OP_DisplayDebugNLLPointsMsg',254,1),(11879,58542,58588,'OP_DisplayEventMsg',452,1),(11880,58542,58588,'OP_DisplayExchangeScreenMsg',444,1),(11881,58542,58588,'OP_DisplayGroupOptionsScreenMsg',200,1),(11882,58542,58588,'OP_DisplayInnVisitScreenMsg',202,1),(11883,58542,58588,'OP_DisplayMailScreenMsg',404,1),(11884,58542,58588,'OP_DisplayTSEventReactionMsg',225,1),(11885,58542,58588,'OP_DisplayWarningMsg',265,1),(11886,58542,58588,'OP_DoneLoadingEntityResourcesMsg',36,1),(11887,58542,58588,'OP_DoneLoadingZoneResourcesMsg',34,1),(11888,58542,58588,'OP_DoneSendingInitialEntitiesMsg',35,1),(11889,58542,58588,'OP_DressingRoom',510,1),(11890,58542,58588,'OP_DumpSchedulerMsg',203,1),(11891,58542,58588,'OP_DungeonMakerEnter',548,1),(11892,58542,58588,'OP_DungeonMakerItemRequest',550,1),(11893,58542,58588,'OP_DungeonMakerItemResponse',580,1),(11894,58542,58588,'OP_DungeonMakerToolboxList',552,1),(11895,58542,58588,'OP_DungeonMakerUnknown',553,1),(11896,58542,58588,'OP_DungeonMakerUnknown1',554,1),(11897,58542,58588,'OP_DungeonPlayAsAvatarList',745,1),(11898,58542,58588,'OP_DungeonPlayAsAvatarSelected',746,1),(11899,58542,58588,'OP_EncounterBrokenMsg',263,1),(11900,58542,58588,'OP_EnterHouseMsg',154,1),(11901,58542,58588,'OP_EnterMoveObjectModeMsg',161,1),(11902,58542,58588,'OP_EntityVerbsReplyMsg',181,1),(11903,58542,58588,'OP_EntityVerbsRequestMsg',180,1),(11904,58542,58588,'OP_EntityVerbsVerbMsg',182,1),(11905,58542,58588,'OP_EqArenaResultsCmd',696,1),(11906,58542,58588,'OP_EqAvailWorldChannelsCmd',683,1),(11907,58542,58588,'OP_EqBetaCopyRequest',603,1),(11908,58542,58588,'OP_EqCannedEmoteCmd',625,1),(11909,58542,58588,'OP_EqChatChannelUpdateCmd',681,1),(11910,58542,58588,'OP_EqChoiceWinCmd',662,1),(11911,58542,58588,'OP_EqCloseWindowCmd',654,1),(11912,58542,58588,'OP_EqCollectionFilterCmd',641,1),(11913,58542,58588,'OP_EqCollectionItemCmd',642,1),(11914,58542,58588,'OP_EqCollectionUpdateCmd',640,1),(11915,58542,58588,'OP_EqConsignmentItemsCmd',686,1),(11916,58542,58588,'OP_EqCreateGhostCmd',607,1),(11917,58542,58588,'OP_EqCreateListBoxCmd',622,1),(11918,58542,58588,'OP_EqCreateSignWidgetCmd',609,1),(11919,58542,58588,'OP_EqCreateWidgetCmd',608,1),(11920,58542,58588,'OP_EqDebugPVDCmd',675,1),(11921,58542,58588,'OP_EqDestroyGhostCmd',610,1),(11922,58542,58588,'OP_EqDialogCloseCmd',638,1),(11923,58542,58588,'OP_EqDialogOpenCmd',637,1),(11924,58542,58588,'OP_EqDisplaySpellFailCmd',658,1),(11925,58542,58588,'OP_EqDisplayTextCmd',606,1),(11926,58542,58588,'OP_EqDrawablePathGraphCmd',636,1),(11927,58542,58588,'OP_EqEnableGameEventCmd',668,1),(11928,58542,58588,'OP_EqEnableWindowCmd',670,1),(11929,58542,58588,'OP_EqExamineInfoCmd',653,1),(11930,58542,58588,'OP_EqFactionUpdateCmd',639,1),(11931,58542,58588,'OP_EqFlashWindowCmd',671,1),(11932,58542,58588,'OP_EqGetProbsCmd',679,1),(11933,58542,58588,'OP_EqGroupMemberRemovedCmd',632,1),(11934,58542,58588,'OP_EqGuildBankEventActionCmd',697,1),(11935,58542,58588,'OP_EqGuildBankExamineInfoCmd',698,1),(11936,58542,58588,'OP_EqHearChainEffectCmd',633,1),(11937,58542,58588,'OP_EqHearChatCmd',605,1),(11938,58542,58588,'OP_EqHearCombatCmd',614,1),(11939,58542,58588,'OP_EqHearConsiderCmd',620,1),(11940,58542,58588,'OP_EqHearDeathCmd',631,1),(11941,58542,58588,'OP_EQHearDispellCmd',743,1),(11942,58542,58588,'OP_EqHearDrowningCmd',630,1),(11943,58542,58588,'OP_EqHearHealCmd',680,1),(11944,58542,58588,'OP_EqHearPlayFlavorCmd',673,1),(11945,58542,58588,'OP_EQHearProcCmd',616,1),(11946,58542,58588,'OP_EQHearResEffectCmd',617,1),(11947,58542,58588,'OP_EqHearSpellCastCmd',615,1),(11948,58542,58588,'OP_EqHearSpellFizzleCmd',619,1),(11949,58542,58588,'OP_EqHearSpellInterruptCmd',618,1),(11950,58542,58588,'OP_EqHearSpellNoLandCmd',699,1),(11951,58542,58588,'OP_EQHearThreatCmd',737,1),(11952,58542,58588,'OP_EqHelpPathClearCmd',651,1),(11953,58542,58588,'OP_EqHelpPathCmd',650,1),(11954,58542,58588,'OP_EqInspectPCResultsCmd',635,1),(11955,58542,58588,'OP_EqInstructionWindowCloseCmd',665,1),(11956,58542,58588,'OP_EqInstructionWindowCmd',664,1),(11957,58542,58588,'OP_EqInstructionWindowGoalCmd',666,1),(11958,58542,58588,'OP_EqInstructionWindowTaskCmd',667,1),(11959,58542,58588,'OP_EqJunctionListCmd',656,1),(11960,58542,58588,'OP_EqMapExplorationCmd',689,1),(11961,58542,58588,'OP_EqMentoring',644,1),(11962,58542,58588,'OP_EqPlaySound3DCmd',628,1),(11963,58542,58588,'OP_EqPlaySoundCmd',627,1),(11964,58542,58588,'OP_EqPlayVoiceCmd',629,1),(11965,58542,58588,'OP_EqQuestGroupCmd',646,1),(11966,58542,58588,'OP_EqQuestionnaireCmd',677,1),(11967,58542,58588,'OP_EqQuestJournalReplyCmd',645,1),(11968,58542,58588,'OP_EqQuestJournalUpdateCmd',643,1),(11969,58542,58588,'OP_EqReceiveOfferCmd',634,1),(11970,58542,58588,'OP_EqResurrectedCmd',661,1),(11971,58542,58588,'OP_EqSetControlGhostCmd',612,1),(11972,58542,58588,'OP_EqSetDebugPathPointsCmd',623,1),(11973,58542,58588,'OP_EqSetDefaultVerbCmd',663,1),(11974,58542,58588,'OP_EqSetPOVGhostCmd',613,1),(11975,58542,58588,'OP_EqShowBookCmd',676,1),(11976,58542,58588,'OP_EqShowDeathWindowCmd',657,1),(11977,58542,58588,'OP_EqShowWindowCmd',669,1),(11978,58542,58588,'OP_EqSpellCastEndCmd',660,1),(11979,58542,58588,'OP_EqSpellCastStartCmd',659,1),(11980,58542,58588,'OP_EqSpellMoveToRangeAndRetryCmd',691,1),(11981,58542,58588,'OP_EqStartBrokerCmd',688,1),(11982,58542,58588,'OP_EqStateCmd',626,1),(11983,58542,58588,'OP_EqStoreLogCmd',690,1),(11984,58542,58588,'OP_EqUpdateBankCmd',652,1),(11985,58542,58588,'OP_EqUpdateGhostCmd',611,1),(11986,58542,58588,'OP_EqUpdateLootCmd',655,1),(11987,58542,58588,'OP_EqUpdateMerchantCmd',647,1),(11988,58542,58588,'OP_EqUpdatePlayerMailCmd',692,1),(11989,58542,58588,'OP_EqUpdatePlayerTradeCmd',649,1),(11990,58542,58588,'OP_EqUpdateSignWidgetCmd',674,1),(11991,58542,58588,'OP_EqUpdateStoreCmd',648,1),(11992,58542,58588,'OP_EqUpdateSubClassesCmd',621,1),(11993,58542,58588,'OP_EqUpdateTargetCmd',684,1),(11994,58542,58588,'OP_EqWhoChannelQueryReplyCmd',682,1),(11995,58542,58588,'OP_ESInitMsg',25,1),(11996,58542,58588,'OP_ESLoginRequestMsg',3,1),(11997,58542,58588,'OP_ESReadyForClientsMsg',26,1),(11998,58542,58588,'OP_ESStatusMsg',100,1),(11999,58542,58588,'OP_ESWeatherRequestEndMsg',105,1),(12000,58542,58588,'OP_ESWeatherRequestMsg',104,1),(12001,58542,58588,'OP_ESZoneInstanceStatusMsg',101,1),(12002,58542,58588,'OP_ExamineConsignmentRequestMsg',171,1),(12003,58542,58588,'OP_ExamineConsignmentResponseMsg',172,1),(12004,58542,58588,'OP_ExamineInfoRequestMsg',255,1),(12005,58542,58588,'OP_ExamineItemRequestMsg',195,1),(12006,58542,58588,'OP_ExitHouseMsg',155,1),(12007,58542,58588,'OP_ExpectClientAsCharacterReplyMs',22,1),(12008,58542,58588,'OP_ExpectClientAsCharacterRequest',32,1),(12009,58542,58588,'OP_ExpPurchWindow',722,1),(12010,58542,58588,'OP_FellowshipExpMsg',122,1),(12011,58542,58588,'OP_FlightPathsMsg',413,1),(12012,58542,58588,'OP_GameWorldTimeMsg',43,1),(12013,58542,58588,'OP_PaperdollImage',575,1),(12014,58542,58588,'OP_GetAuctionAssetIDMsg',441,1),(12015,58542,58588,'OP_GetAuctionAssetIDReplyMsg',442,1),(12016,58542,58588,'OP_GetAvatarAccessRequestForCSToo',393,1),(12017,58542,58588,'OP_GetCharacterSerializedReplyMsg',424,1),(12018,58542,58588,'OP_GetCharacterSerializedRequestM',423,1),(12019,58542,58588,'OP_GroupCreatedMsg',88,1),(12020,58542,58588,'OP_GroupDestroyedMsg',89,1),(12021,58542,58588,'OP_GroupLeaderChangedMsg',93,1),(12022,58542,58588,'OP_GroupMemberAddedMsg',90,1),(12023,58542,58588,'OP_GroupMemberRemovedMsg',91,1),(12024,58542,58588,'OP_GroupOptionsMsg',199,1),(12025,58542,58588,'OP_GroupRemovedFromGroupMsg',92,1),(12026,58542,58588,'OP_GroupResendOOZDataMsg',94,1),(12027,58542,58588,'OP_GroupSettingsChangedMsg',95,1),(12028,58542,58588,'OP_GuildBankActionMsg',274,1),(12029,58542,58588,'OP_GuildBankActionResponseMsg',275,1),(12030,58542,58588,'OP_GuildBankEventListMsg',279,1),(12031,58542,58588,'OP_GuildBankItemDetailsRequestMsg',276,1),(12032,58542,58588,'OP_GuildBankItemDetailsResponseMs',277,1),(12033,58542,58588,'OP_GuildBankUpdateMsg',278,1),(12034,58542,58588,'OP_GuildEventActionMsg',269,1),(12035,58542,58588,'OP_GuildEventAddMsg',268,1),(12036,58542,58588,'OP_GuildEventDetailsMsg',272,1),(12037,58542,58588,'OP_GuildEventListMsg',270,1),(12038,58542,58588,'OP_GuildEventMsg',267,1),(12039,58542,58588,'OP_GuildMembershipResponseMsg',357,1),(12040,58542,58588,'OP_GuildRecruiting',702,1),(12041,58542,58588,'OP_GuildRecruitingDetails',703,1),(12042,58542,58588,'OP_GuildRecruitingImage',704,1),(12043,58542,58588,'OP_GuildRecruitingMemberInfo',701,1),(12044,58542,58588,'OP_GuildsayMsg',121,1),(12045,58542,58588,'OP_GuildStatusUpdate',695,1),(12046,58542,58588,'OP_GuildUpdateMsg',124,1),(12047,58542,58588,'OP_HeritageMsg',10000,1),(12048,58542,58588,'OP_HideIllusionsMsg',194,1),(12049,58542,58588,'OP_HouseAccessRemoveMsg',158,1),(12050,58542,58588,'OP_HouseAccessSetMsg',157,1),(12051,58542,58588,'OP_HouseCustomizationScreenMsg',166,1),(12052,58542,58588,'OP_HouseDefaultAccessSetMsg',156,1),(12053,58542,58588,'OP_HouseDeletedRemotelyMsg',142,1),(12054,58542,58588,'OP_HouseItemsList',484,1),(12055,58542,58588,'OP_HousingDataChangedMsg',427,1),(12056,58542,58588,'OP_HousingRestoreMsg',428,1),(12057,58542,58588,'OP_InspectPlayerMsg',363,1),(12058,58542,58588,'OP_InspectPlayerRequestMsg',450,1),(12059,58542,58588,'OP_InviteRequestMsg',447,1),(12060,58542,58588,'OP_InviteResponseMsg',448,1),(12061,58542,58588,'OP_InviteTargetResponseMsg',449,1),(12062,58542,58588,'OP_JoinGuildNotifyMsg',359,1),(12063,58542,58588,'OP_JournalQuestStoryline',744,1),(12064,58542,58588,'OP_KeymapDataMsg',177,1),(12065,58542,58588,'OP_KeymapLoadMsg',175,1),(12066,58542,58588,'OP_KeymapNoneMsg',176,1),(12067,58542,58588,'OP_KeymapSaveMsg',178,1),(12068,58542,58588,'OP_KnowledgebaseRequestMsg',227,1),(12069,58542,58588,'OP_KnowledgebaseResponseMsg',228,1),(12070,58542,58588,'OP_KnowledgeWindowSlotMappingMsg',369,1),(12071,58542,58588,'OP_KnownLanguagesMsg',238,1),(12072,58542,58588,'OP_Launchpad',573,1),(12073,58542,58588,'OP_LeaveGuildNotifyMsg',358,1),(12074,58542,58588,'OP_LevelChangedMsg',261,1),(12075,58542,58588,'OP_LFGGroupSearch',504,1),(12076,58542,58588,'OP_LFGUpdateMsg',518,1),(12077,58542,58588,'OP_LikeOption',136,1),(12078,58542,58588,'OP_LoadCalendarEvents',576,1),(12079,58542,58588,'OP_LoadWelcomeWindow',560,1),(12080,58542,58588,'OP_LoginByNumRequestMsg',1,1),(12081,58542,58588,'OP_LoginReplyMsg',4,1),(12082,58542,58588,'OP_LoginRequestMsg',0,1),(12083,58542,58588,'OP_LootItemsRequestMsg',185,1),(12084,58542,58588,'OP_Lottery',700,1),(12085,58542,58588,'OP_LSCheckAcctLockMsg',204,1),(12086,58542,58588,'OP_LsClientAlertlogReplyMsg',242,1),(12087,58542,58588,'OP_LsClientBaselogReplyMsg',240,1),(12088,58542,58588,'OP_LsClientCrashlogReplyMsg',241,1),(12089,58542,58588,'OP_LsClientVerifylogReplyMsg',243,1),(12090,58542,58588,'OP_LsRequestClientCrashLogMsg',239,1),(12091,58542,58588,'OP_LSServerLockMsg',365,1),(12092,58542,58588,'OP_MacroInitMsg',258,1),(12093,58542,58588,'OP_MacroUpdateMsg',259,1),(12094,58542,58588,'OP_MailCommitSendMessageMsg',344,1),(12095,58542,58588,'OP_MailDeleteMessageMsg',340,1),(12096,58542,58588,'OP_MailEventNotificationMsg',411,1),(12097,58542,58588,'OP_MailGetHeadersReplyMsg',341,1),(12098,58542,58588,'OP_MailGetMessageMsg',338,1),(12099,58542,58588,'OP_MailGetMessageReplyMsg',342,1),(12100,58542,58588,'OP_MailRemoveAttachFromMailMsg',346,1),(12101,58542,58588,'OP_MailSendMessageMsg',339,1),(12102,58542,58588,'OP_MailSendMessageReplyMsg',343,1),(12103,58542,58588,'OP_MailSendSystemMessageMsg',345,1),(12104,58542,58588,'OP_MakeGroupLeaderMsg',87,1),(12105,58542,58588,'OP_MapFogDataInitMsg',395,1),(12106,58542,58588,'OP_MapFogDataUpdateMsg',396,1),(12107,58542,58588,'OP_MapRequest',521,1),(12108,58542,58588,'OP_MarketAddFundsReply',529,1),(12109,58542,58588,'OP_MarketAddFundsRequest',528,1),(12110,58542,58588,'OP_MarketFundsUpdate',526,1),(12111,58542,58588,'OP_MarketPlaceItems',537,1),(12112,58542,58588,'OP_MarketPlacePrices',532,1),(12113,58542,58588,'OP_MarketPurchase',531,1),(12114,58542,58588,'OP_MentorPopup',558,1),(12115,58542,58588,'OP_MercHireWindow',747,1),(12116,58542,58588,'OP_MercUnknown',748,1),(12117,58542,58588,'OP_MigrateBoatTransportMsg',252,1),(12118,58542,58588,'OP_MigrateBoatTransportReplyMsg',253,1),(12119,58542,58588,'OP_MigrateClientToZoneReplyMsg',82,1),(12120,58542,58588,'OP_MigrateClientToZoneRequestMsg',81,1),(12121,58542,58588,'OP_ModifyGuildMsg',266,1),(12122,58542,58588,'OP_MonitorCharacterListMsg',56,1),(12123,58542,58588,'OP_MonitorCharacterListRequestMsg',57,1),(12124,58542,58588,'OP_MonitorReplyMsg',55,1),(12125,58542,58588,'OP_MOTDMsg',44,1),(12126,58542,58588,'OP_MoveableObjectPlacementCriteri',160,1),(12127,58542,58588,'OP_MoveLogUpdateMsg',400,1),(12128,58542,58588,'OP_NotifyApprenticeStoppedMentori',408,1),(12129,58542,58588,'OP_OfferQuestMsg',401,1),(12130,58542,58588,'OP_OnscreenMsgMsg',264,1),(12131,58542,58588,'OP_OpenCharCust',561,1),(12132,58542,58588,'OP_OutOfZoneMemberDataMsg',96,1),(12133,58542,58588,'OP_PayHouseUpkeepMsg',159,1),(12134,58542,58588,'OP_PerformCameraShakeMsg',214,1),(12135,58542,58588,'OP_PerformPlayerKnockbackMsg',213,1),(12136,58542,58588,'OP_PetOptions',201,1),(12137,58542,58588,'OP_PetOptionsResponse',579,1),(12138,58542,58588,'OP_PlayCharacterReplyMsg',19,1),(12139,58542,58588,'OP_PlayCharacterRequestMsg',18,1),(12140,58542,58588,'OP_PlayerHouseAccessUpdateMsg',147,1),(12141,58542,58588,'OP_PlayerHouseBaseScreenMsg',145,1),(12142,58542,58588,'OP_PlayerHouseCloseUIMsg',149,1),(12143,58542,58588,'OP_PlayerHouseDisplayStatusMsg',148,1),(12144,58542,58588,'OP_PlayerHousePurchaseScreenMsg',146,1),(12145,58542,58588,'OP_PlayerMadeInstances',140,1),(12146,58542,58588,'OP_PlayerMadeInstancesScreen',139,1),(12147,58542,58588,'OP_PlayerPollAnswer',557,1),(12148,58542,58588,'OP_PlayerPollPopup',556,1),(12149,58542,58588,'OP_PlayLon',511,1),(12150,58542,58588,'OP_PointOfInterest',726,1),(12151,58542,58588,'OP_PointOfInterest2',727,1),(12152,58542,58588,'OP_PopulateSkillMapsMsg',215,1),(12153,58542,58588,'OP_PositionBoatTransportMsg',251,1),(12154,58542,58588,'OP_PositionMoveableObject',162,1),(12155,58542,58588,'OP_PostPossessionMsg',454,1),(12156,58542,58588,'OP_PredictionUpdateMsg',37,1),(12157,58542,58588,'OP_PrePossessionMsg',453,1),(12158,58542,58588,'OP_PromoFlagsDetailsMsg',374,1),(12159,58542,58588,'OP_PublishHouse',138,1),(12160,58542,58588,'OP_PurchaseConsignmentLoreCheckRe',407,1),(12161,58542,58588,'OP_PurchaseConsignmentRequestMsg',128,1),(12162,58542,58588,'OP_QueAllBgSolo',564,1),(12163,58542,58588,'OP_QuestionnaireMsg',260,1),(12164,58542,58588,'OP_QuestJournalInspectMsg',114,1),(12165,58542,58588,'OP_QuestJournalOpenMsg',113,1),(12166,58542,58588,'OP_QuestJournalSetVisibleMsg',115,1),(12167,58542,58588,'OP_QuestJournalWaypointMsg',116,1),(12168,58542,58588,'OP_QuestReward',320,1),(12169,58542,58588,'OP_QuickbarInitMsg',256,1),(12170,58542,58588,'OP_QuickbarUpdateMsg',257,1),(12171,58542,58588,'OP_RaceRestrictionMsg',439,1),(12172,58542,58588,'OP_ReadBookPageMsg',196,1),(12173,58542,58588,'OP_ReadyForTakeOffMsg',192,1),(12174,58542,58588,'OP_ReadyToZoneMsg',84,1),(12175,58542,58588,'OP_RecipeBook',538,1),(12176,58542,58588,'OP_RecipeDetailsMsg',72,1),(12177,58542,58588,'OP_RecipeList',738,1),(12178,58542,58588,'OP_RecipeListUnknown',591,1),(12179,58542,58588,'OP_RelinquishHouseMsg',153,1),(12180,58542,58588,'OP_ReloadLocalizedTxtMsg',355,1),(12181,58542,58588,'OP_RemoteCmdMsg',42,1),(12182,58542,58588,'OP_RemoveClientFromGroupMsg',85,1),(12183,58542,58588,'OP_RemoveConcentrationMsg',112,1),(12184,58542,58588,'OP_RemoveGroupFromGroupMsg',86,1),(12185,58542,58588,'OP_RemoveSpellEffectMsg',111,1),(12186,58542,58588,'OP_RenameGuildMsg',282,1),(12187,58542,58588,'OP_ReplaceableSubMeshesMsg',165,1),(12188,58542,58588,'OP_ReportMsg',380,1),(12189,58542,58588,'OP_RequestCampMsg',50,1),(12190,58542,58588,'OP_RequestGuildBankEventDetailsMs',280,1),(12191,58542,58588,'OP_RequestGuildEventDetailsMsg',271,1),(12192,58542,58588,'OP_RequestGuildInfoMsg',273,1),(12193,58542,58588,'OP_RequestGuildMembershipMsg',356,1),(12194,58542,58588,'OP_RequestHelpRepathMsg',206,1),(12195,58542,58588,'OP_RequestRecipeDetailsMsg',71,1),(12196,58542,58588,'OP_RequestTargetLocMsg',207,1),(12197,58542,58588,'OP_Research',739,1),(12198,58542,58588,'OP_ResendWorldChannelsMsg',443,1),(12199,58542,58588,'OP_ReskinCharacterRequestMsg',15,1),(12200,58542,58588,'OP_RestartZoneMsg',412,1),(12201,58542,58588,'OP_RewardPackMsg',281,1),(12202,58542,58588,'OP_SatMsg',189,1),(12203,58542,58588,'OP_SavageBarInitMsg',578,1),(12204,58542,58588,'OP_SelectZoneTeleporterDestinatio',354,1),(12205,58542,58588,'OP_SendLatestRequestMsg',97,1),(12206,58542,58588,'OP_ServerPlayCharacterReplyMsg',24,1),(12207,58542,58588,'OP_ServerPlayCharacterRequestMsg',23,1),(12208,58542,58588,'OP_SetInstanceDisplayNameMsg',440,1),(12209,58542,58588,'OP_SetRemoteCmdsMsg',41,1),(12210,58542,58588,'OP_SetSocialMsg',99,1),(12211,58542,58588,'OP_ShaderCustomizationMsg',164,1),(12212,58542,58588,'OP_ShowCreateFromRecipeUIMsg',219,1),(12213,58542,58588,'OP_ShowIllusionsMsg',193,1),(12214,58542,58588,'OP_ShowItemCreationProcessUIMsg',223,1),(12215,58542,58588,'OP_ShowRecipeBookMsg',226,1),(12216,58542,58588,'OP_ShowZoneTeleporterDestinations',353,1),(12217,58542,58588,'OP_SitMsg',187,1),(12218,58542,58588,'OP_SkillInfoRequest',514,1),(12219,58542,58588,'OP_SkillInfoResponse',515,1),(12220,58542,58588,'OP_SpellGainedMsg',262,1),(12221,58542,58588,'OP_StandMsg',188,1),(12222,58542,58588,'OP_StoodMsg',190,1),(12223,58542,58588,'OP_StopItemCreationMsg',222,1),(12224,58542,58588,'OP_StoppedLootingMsg',186,1),(12225,58542,58588,'OP_StopTrackingMsg',391,1),(12226,58542,58588,'OP_SubmitCharCust',562,1),(12227,58542,58588,'OP_SupplyDepot',736,1),(12228,58542,58588,'OP_SysClient',218,1),(12229,58542,58588,'OP_TeleportWithinZoneMsg',79,1),(12230,58542,58588,'OP_TeleportWithinZoneNoReloadMsg',80,1),(12231,58542,58588,'OP_TintWidgetsMsg',170,1),(12232,58542,58588,'OP_TitleUpdateMsg',384,1),(12233,58542,58588,'OP_TrackingUpdateMsg',389,1),(12234,58542,58588,'OP_TradeskillList',705,1),(12235,58542,58588,'OP_TraitsList',728,1),(12236,58542,58588,'OP_UIEvent',527,1),(12237,58542,58588,'OP_UIResetMsg',174,1),(12238,58542,58588,'OP_UISettingsResponseMsg',173,1),(12239,58542,58588,'OP_Unknown',761,1),(12240,58542,58588,'OP_UnknownNpcMsg',373,1),(12241,58542,58588,'OP_UpdateActivePublicZonesMsg',372,1),(12242,58542,58588,'OP_UpdateCharacterSheetMsg',63,1),(12243,58542,58588,'OP_UpdateClientPredFlagsMsg',245,1),(12244,58542,58588,'OP_UpdateDebugRadiiMsg',379,1),(12245,58542,58588,'OP_UpdateGroupMemberDataMsg',388,1),(12246,58542,58588,'OP_UpdateHouseAccessDataMsg',144,1),(12247,58542,58588,'OP_UpdateHouseDataMsg',143,1),(12248,58542,58588,'OP_UpdateInventoryMsg',68,1),(12249,58542,58588,'OP_UpdateItemCreationProcessUIMsg',224,1),(12250,58542,58588,'OP_UpdateMotdMsg',208,1),(12251,58542,58588,'OP_UpdateOpportunityMsg',75,1),(12252,58542,58588,'OP_UpdatePositionMsg',39,1),(12253,58542,58588,'OP_UpdateRaidMsg',381,1),(12254,58542,58588,'OP_UpdateRecipeBookMsg',70,1),(12255,58542,58588,'OP_UpdateSkillBookMsg',73,1),(12256,58542,58588,'OP_UpdateSkillsMsg',74,1),(12257,58542,58588,'OP_UpdateSpellBookMsg',66,1),(12258,58542,58588,'OP_UpdateTargetLocMsg',62,1),(12259,58542,58588,'OP_UpdateTargetMsg',61,1),(12260,58542,58588,'OP_UpdateTitleCmd',494,1),(12261,58542,58588,'OP_UseAdornment',716,1),(12262,58542,58588,'OP_VideoUploaded',577,1),(12263,58542,58588,'OP_VoiceChatChannel',520,1),(12264,58542,58588,'OP_VoiceChatServer',732,1),(12265,58542,58588,'OP_WaypointReplyMsg',349,1),(12266,58542,58588,'OP_WaypointRequestMsg',348,1),(12267,58542,58588,'OP_WaypointSelectMsg',350,1),(12268,58542,58588,'OP_WaypointUpdateMsg',351,1),(12269,58542,58588,'OP_Weakness',581,1),(12270,58542,58588,'OP_WhoQueryReplyMsg',54,1),(12271,58542,58588,'OP_WhoQueryRequestMsg',53,1),(12272,58542,58588,'OP_WorldDataChangeMsg',410,1),(12273,58542,58588,'OP_WorldDataUpdateMsg',237,1),(12274,58542,58588,'OP_WorldListMsg',8,1),(12275,58542,58588,'OP_WorldPingMsg',399,1),(12276,58542,58588,'OP_WorldShutdownUpdateMsg',403,1),(12277,58542,58588,'OP_WorldStatusChangeMsg',6,1),(12278,58542,58588,'OP_WorldTravelAvail',570,1),(12279,58542,58588,'OP_WSAcctLockStatusMsg',205,1),(12280,58542,58588,'OP_WSCreateCharacterReplyMsg',14,1),(12281,58542,58588,'OP_WSCreateCharacterRequestMsg',13,1),(12282,58542,58588,'OP_WSLoginRequestMsg',2,1),(12283,58542,58588,'OP_WSServerHideMsg',366,1),(12284,58542,58588,'OP_WSServerLockMsg',364,1),(12285,58542,58588,'OP_WSStatusReplyMsg',5,1),(12286,58542,58588,'OP_ZoneBgInstanceList',566,1),(12287,58542,58588,'OP_ZoneInfoMsg',33,1),(12288,58542,58588,'OP_ZoneInstanceCreateReplyMsg',30,1),(12289,58542,58588,'OP_ZoneInstanceDestroyedMsg',31,1),(12290,58542,58588,'OP_ZoneMOTDMsg',45,1),(12291,58542,58588,'OP_ZonesStatusMsg',103,1),(12292,58542,58588,'OP_ZonesStatusRequestMsg',102,1),(12293,58542,58588,'OP_ZoneToFriendReplyMsg',284,1),(12294,58542,58588,'OP_ZoneToFriendRequestMsg',283,1),(12761,58542,58588,'OP_SOEAllAccess',604,1),(13188,58604,58604,'OP_AchievementUpdateMsg',745,1),(13189,58604,58604,'OP_AddSocialStructureStandingMsg',249,1),(13190,58604,58604,'OP_AdvancementRequestMsg',394,1),(13191,58604,58604,'OP_AdventureList',488,1),(13192,58604,58604,'OP_AFKUpdateMsg',370,1),(13193,58604,58604,'OP_AfterInvSpellUpdate',69,1),(13194,58604,58604,'OP_AllCharactersDescReplyMsg',10,1),(13195,58604,58604,'OP_AllCharactersDescRequestMsg',9,1),(13196,58604,58604,'OP_AllWSDescRequestMsg',7,1),(13197,58604,58604,'OP_AnonUpdateMsg',371,1),(13198,58604,58604,'OP_ArenaCreate',456,1),(13199,58604,58604,'OP_ArenaGameTypesMsg',445,1),(13200,58604,58604,'OP_ArenaList',457,1),(13201,58604,58604,'OP_ArenaWindow',465,1),(13202,58604,58604,'OP_AttackAllowed',500,1),(13203,58604,58604,'OP_AttackNotAllowed',501,1),(13204,58604,58604,'OP_AuctionAbortMsg',436,1),(13205,58604,58604,'OP_AuctionCharacter',433,1),(13206,58604,58604,'OP_AuctionCharacterReply',434,1),(13207,58604,58604,'OP_AuctionCoin',431,1),(13208,58604,58604,'OP_AuctionCoinReply',432,1),(13209,58604,58604,'OP_AuctionCommitMsg',435,1),(13210,58604,58604,'OP_AuctionItem',429,1),(13211,58604,58604,'OP_AuctionItemReply',430,1),(13212,58604,58604,'OP_AuditAuctionEventMsg',446,1),(13213,58604,58604,'OP_AvatarCreatedMsg',46,1),(13214,58604,58604,'OP_AvatarDestroyedMsg',47,1),(13215,58604,58604,'OP_AvatarUpdateMsg',360,1),(13216,58604,58604,'OP_BadLanguageFilter',519,1),(13217,58604,58604,'OP_BagOptions',502,1),(13218,58604,58604,'OP_BeginItemCreationMsg',221,1),(13219,58604,58604,'OP_BeginTrackingMsg',390,1),(13220,58604,58604,'OP_BioUpdateMsg',362,1),(13221,58604,58604,'OP_BrokerAddBag',292,1),(13222,58604,58604,'OP_BrokerRemoveBag',293,1),(13223,58604,58604,'OP_BrokerSellList',688,1),(13224,58604,58604,'OP_BuyPlayerHouseMsg',150,1),(13225,58604,58604,'OP_BuyPlayerHouseTintMsg',151,1),(13226,58604,58604,'OP_CampAbortedMsg',52,1),(13227,58604,58604,'OP_CampClientMsg',387,1),(13228,58604,58604,'OP_CampStartedMsg',51,1),(13229,58604,58604,'OP_CancelCreateFromRecipeMsg',220,1),(13230,58604,58604,'OP_CancelledFeignMsg',216,1),(13231,58604,58604,'OP_CancelMoveObjectModeMsg',163,1),(13232,58604,58604,'OP_CancelSpellCast',489,1),(13233,58604,58604,'OP_ChangeServerControlFlagMsg',246,1),(13234,58604,58604,'OP_ChangeZoneMsg',77,1),(13235,58604,58604,'OP_CharacterAchievements',744,1),(13236,58604,58604,'OP_CharacterCreatedDungeons',551,1),(13237,58604,58604,'OP_CharacterCurrency',743,1),(13238,58604,58604,'OP_CharacterHousingList',507,1),(13239,58604,58604,'OP_CharacterLinkdeadMsg',414,1),(13240,58604,58604,'OP_CharacterMerc',65,1),(13241,58604,58604,'OP_CharacterMounts',584,1),(13242,58604,58604,'OP_CharacterPet',64,1),(13243,58604,58604,'OP_CharNameChangedMsg',352,1),(13244,58604,58604,'OP_CharRenamed',709,1),(13245,58604,58604,'OP_CharTransferCommitReplyMsg',422,1),(13246,58604,58604,'OP_CharTransferCommitRequestMsg',420,1),(13247,58604,58604,'OP_CharTransferReplyMsg',418,1),(13248,58604,58604,'OP_CharTransferRequestMsg',417,1),(13249,58604,58604,'OP_CharTransferRollbackReplyMsg',421,1),(13250,58604,58604,'OP_CharTransferRollbackRequestMsg',419,1),(13251,58604,58604,'OP_CharTransferStartReplyMsg',416,1),(13252,58604,58604,'OP_CharTransferStartRequestMsg',415,1),(13253,58604,58604,'OP_CharTransferValidateReplyMsg',438,1),(13254,58604,58604,'OP_CharTransferValidateRequestMsg',437,1),(13255,58604,58604,'OP_ChatCreateChannelMsg',285,1),(13256,58604,58604,'OP_ChatFiltersMsg',335,1),(13257,58604,58604,'OP_ChatJoinChannelMsg',286,1),(13258,58604,58604,'OP_ChatLeaveChannelMsg',288,1),(13259,58604,58604,'OP_ChatRelationshipUpdateMsg',184,1),(13260,58604,58604,'OP_ChatSendFriendsMsg',295,1),(13261,58604,58604,'OP_ChatSendIgnoresMsg',296,1),(13262,58604,58604,'OP_ChatTellChannelMsg',289,1),(13263,58604,58604,'OP_ChatTellUserMsg',290,1),(13264,58604,58604,'OP_ChatToggleFriendMsg',291,1),(13265,58604,58604,'OP_ChatToggleIgnoreMsg',294,1),(13266,58604,58604,'OP_ChatWhoChannelMsg',287,1),(13267,58604,58604,'OP_ClearDataMsg',98,1),(13268,58604,58604,'OP_ClearForLandingMsg',491,1),(13269,58604,58604,'OP_ClearForTakeOffMsg',191,1),(13270,58604,58604,'OP_ClientCmdMsg',58,1),(13271,58604,58604,'OP_ClientFellMsg',385,1),(13272,58604,58604,'OP_ClientIdleBeginMsg',405,1),(13273,58604,58604,'OP_ClientIdleEndMsg',406,1),(13274,58604,58604,'OP_ClientInDeathRegionMsg',386,1),(13275,58604,58604,'OP_ClientTeleportRequestMsg',78,1),(13276,58604,58604,'OP_ClientTeleportToLocationMsg',244,1),(13277,58604,58604,'OP_CloseGroupInviteWindowMsg',397,1),(13278,58604,58604,'OP_CollectAllHouseItemsMsg',152,1),(13279,58604,58604,'OP_ConsignItemRequestMsg',126,1),(13280,58604,58604,'OP_ConsignItemResponseMsg',127,1),(13281,58604,58604,'OP_ConsignmentCloseStoreMsg',125,1),(13282,58604,58604,'OP_ConsignRemoveItemsMsg',378,1),(13283,58604,58604,'OP_ConsignViewCreateMsg',375,1),(13284,58604,58604,'OP_ConsignViewGetPageMsg',376,1),(13285,58604,58604,'OP_ConsignViewReleaseMsg',377,1),(13286,58604,58604,'OP_ConsignViewSortMsg',383,1),(13287,58604,58604,'OP_CorruptedClientMsg',409,1),(13288,58604,58604,'OP_CreateBoatTransportsMsg',250,1),(13289,58604,58604,'OP_CreateCharacterDungeon',547,1),(13290,58604,58604,'OP_CreateCharacterReplyMsg',12,1),(13291,58604,58604,'OP_CreateCharacterRequestMsg',11,1),(13292,58604,58604,'OP_CreateCharFromCBBReplyMsg',426,1),(13293,58604,58604,'OP_CreateCharFromCBBRequestMsg',425,1),(13294,58604,58604,'OP_CreateGuildReplyMsg',120,1),(13295,58604,58604,'OP_CreateGuildRequestMsg',119,1),(13296,58604,58604,'OP_CreateZoneInstanceMsg',29,1),(13297,58604,58604,'OP_CsCategoryRequestMsg',367,1),(13298,58604,58604,'OP_CsCategoryResponseMsg',368,1),(13299,58604,58604,'OP_CSTicketAddCommentMsg',234,1),(13300,58604,58604,'OP_CSTicketChangeNotificationMsg',236,1),(13301,58604,58604,'OP_CSTicketCommentRequestMsg',231,1),(13302,58604,58604,'OP_CSTicketCommentResponseMsg',232,1),(13303,58604,58604,'OP_CSTicketCreateMsg',233,1),(13304,58604,58604,'OP_CSTicketDeleteMsg',235,1),(13305,58604,58604,'OP_CSTicketHeaderRequestMsg',229,1),(13306,58604,58604,'OP_CSTicketInfoMsg',230,1),(13307,58604,58604,'OP_CSToolAccessResponseMsg',388,1),(13308,58604,58604,'OP_CSToolsRequestMsg',247,1),(13309,58604,58604,'OP_CSToolsResponseMsg',248,1),(13310,58604,58604,'OP_CurrentPet',485,1),(13311,58604,58604,'OP_CustomizationPurchaseRequestMs',167,1),(13312,58604,58604,'OP_CustomizationReplyMsg',169,1),(13313,58604,58604,'OP_CustomizationSetRequestMsg',168,1),(13314,58604,58604,'OP_CustomizeHouseDisplay',734,1),(13315,58604,58604,'OP_DailyObjectives',597,1),(13316,58604,58604,'OP_DefaultGroupOptionsMsg',198,1),(13317,58604,58604,'OP_DefaultGroupOptionsRequestMsg',197,1),(13318,58604,58604,'OP_DeleteCharacterReplyMsg',17,1),(13319,58604,58604,'OP_DeleteCharacterRequestMsg',16,1),(13320,58604,58604,'OP_DeleteGuildMsg',123,1),(13321,58604,58604,'OP_DestUpdateReq',210,1),(13322,58604,58604,'OP_DialogCloseMsg',110,1),(13323,58604,58604,'OP_DialogSelectMsg',109,1),(13324,58604,58604,'OP_DispatchClientCmdMsg',60,1),(13325,58604,58604,'OP_DispatchESMsg',59,1),(13326,58604,58604,'OP_DispatchMsg',451,1),(13327,58604,58604,'OP_DispatchSpellCmdMsg',179,1),(13328,58604,58604,'OP_DisplayDebugNLLPointsMsg',254,1),(13329,58604,58604,'OP_DisplayEventMsg',452,1),(13330,58604,58604,'OP_DisplayExchangeScreenMsg',444,1),(13331,58604,58604,'OP_DisplayGroupOptionsScreenMsg',200,1),(13332,58604,58604,'OP_DisplayInnVisitScreenMsg',202,1),(13333,58604,58604,'OP_DisplayMailScreenMsg',404,1),(13334,58604,58604,'OP_DisplayTSEventReactionMsg',225,1),(13335,58604,58604,'OP_DisplayWarningMsg',265,1),(13336,58604,58604,'OP_DoneLoadingEntityResourcesMsg',36,1),(13337,58604,58604,'OP_DoneLoadingZoneResourcesMsg',34,1),(13338,58604,58604,'OP_DoneSendingInitialEntitiesMsg',35,1),(13339,58604,58604,'OP_DressingRoom',510,1),(13340,58604,58604,'OP_DumpSchedulerMsg',203,1),(13341,58604,58604,'OP_DungeonMakerEnter',548,1),(13342,58604,58604,'OP_DungeonMakerItemRequest',550,1),(13343,58604,58604,'OP_DungeonMakerItemResponse',582,1),(13344,58604,58604,'OP_DungeonMakerToolboxList',552,1),(13345,58604,58604,'OP_DungeonMakerUnknown',553,1),(13346,58604,58604,'OP_DungeonMakerUnknown1',554,1),(13347,58604,58604,'OP_DungeonPlayAsAvatarList',748,1),(13348,58604,58604,'OP_DungeonPlayAsAvatarSelected',749,1),(13349,58604,58604,'OP_EncounterBrokenMsg',263,1),(13350,58604,58604,'OP_EnterHouseMsg',154,1),(13351,58604,58604,'OP_EnterMoveObjectModeMsg',161,1),(13352,58604,58604,'OP_EntityVerbsReplyMsg',181,1),(13353,58604,58604,'OP_EntityVerbsRequestMsg',180,1),(13354,58604,58604,'OP_EntityVerbsVerbMsg',182,1),(13355,58604,58604,'OP_EqArenaResultsCmd',699,1),(13356,58604,58604,'OP_EqAvailWorldChannelsCmd',686,1),(13357,58604,58604,'OP_EqBetaCopyRequest',606,1),(13358,58604,58604,'OP_EqCannedEmoteCmd',628,1),(13359,58604,58604,'OP_EqChatChannelUpdateCmd',684,1),(13360,58604,58604,'OP_EqChoiceWinCmd',665,1),(13361,58604,58604,'OP_EqCloseWindowCmd',657,1),(13362,58604,58604,'OP_EqCollectionFilterCmd',644,1),(13363,58604,58604,'OP_EqCollectionItemCmd',645,1),(13364,58604,58604,'OP_EqCollectionUpdateCmd',643,1),(13365,58604,58604,'OP_EqConsignmentItemsCmd',689,1),(13366,58604,58604,'OP_EqCreateGhostCmd',610,1),(13367,58604,58604,'OP_EqCreateListBoxCmd',625,1),(13368,58604,58604,'OP_EqCreateSignWidgetCmd',612,1),(13369,58604,58604,'OP_EqCreateWidgetCmd',611,1),(13370,58604,58604,'OP_EqDebugPVDCmd',678,1),(13371,58604,58604,'OP_EqDestroyGhostCmd',613,1),(13372,58604,58604,'OP_EqDialogCloseCmd',641,1),(13373,58604,58604,'OP_EqDialogOpenCmd',640,1),(13374,58604,58604,'OP_EqDisplaySpellFailCmd',661,1),(13375,58604,58604,'OP_EqDisplayTextCmd',609,1),(13376,58604,58604,'OP_EqDrawablePathGraphCmd',639,1),(13377,58604,58604,'OP_EqEnableGameEventCmd',671,1),(13378,58604,58604,'OP_EqEnableWindowCmd',673,1),(13379,58604,58604,'OP_EqExamineInfoCmd',656,1),(13380,58604,58604,'OP_EqFactionUpdateCmd',642,1),(13381,58604,58604,'OP_EqFlashWindowCmd',674,1),(13382,58604,58604,'OP_EqGetProbsCmd',682,1),(13383,58604,58604,'OP_EqGroupMemberRemovedCmd',635,1),(13384,58604,58604,'OP_EqGuildBankEventActionCmd',700,1),(13385,58604,58604,'OP_EqGuildBankExamineInfoCmd',701,1),(13386,58604,58604,'OP_EqHearChainEffectCmd',636,1),(13387,58604,58604,'OP_EqHearChatCmd',608,1),(13388,58604,58604,'OP_EqHearCombatCmd',617,1),(13389,58604,58604,'OP_EqHearConsiderCmd',623,1),(13390,58604,58604,'OP_EqHearDeathCmd',634,1),(13391,58604,58604,'OP_EQHearDispellCmd',746,1),(13392,58604,58604,'OP_EqHearDrowningCmd',633,1),(13393,58604,58604,'OP_EqHearHealCmd',683,1),(13394,58604,58604,'OP_EqHearPlayFlavorCmd',676,1),(13395,58604,58604,'OP_EQHearProcCmd',619,1),(13396,58604,58604,'OP_EQHearResEffectCmd',620,1),(13397,58604,58604,'OP_EqHearSpellCastCmd',618,1),(13398,58604,58604,'OP_EqHearSpellFizzleCmd',622,1),(13399,58604,58604,'OP_EqHearSpellInterruptCmd',621,1),(13400,58604,58604,'OP_EqHearSpellNoLandCmd',702,1),(13401,58604,58604,'OP_EQHearThreatCmd',740,1),(13402,58604,58604,'OP_EqHelpPathClearCmd',654,1),(13403,58604,58604,'OP_EqHelpPathCmd',653,1),(13404,58604,58604,'OP_EqInspectPCResultsCmd',638,1),(13405,58604,58604,'OP_EqInstructionWindowCloseCmd',668,1),(13406,58604,58604,'OP_EqInstructionWindowCmd',667,1),(13407,58604,58604,'OP_EqInstructionWindowGoalCmd',669,1),(13408,58604,58604,'OP_EqInstructionWindowTaskCmd',670,1),(13409,58604,58604,'OP_EqJunctionListCmd',659,1),(13410,58604,58604,'OP_EqMapExplorationCmd',692,1),(13411,58604,58604,'OP_EqMentoring',647,1),(13412,58604,58604,'OP_EqPlaySound3DCmd',631,1),(13413,58604,58604,'OP_EqPlaySoundCmd',630,1),(13414,58604,58604,'OP_EqPlayVoiceCmd',632,1),(13415,58604,58604,'OP_EqQuestGroupCmd',649,1),(13416,58604,58604,'OP_EqQuestionnaireCmd',680,1),(13417,58604,58604,'OP_EqQuestJournalReplyCmd',648,1),(13418,58604,58604,'OP_EqQuestJournalUpdateCmd',646,1),(13419,58604,58604,'OP_EqReceiveOfferCmd',637,1),(13420,58604,58604,'OP_EqResurrectedCmd',664,1),(13421,58604,58604,'OP_EqSetControlGhostCmd',615,1),(13422,58604,58604,'OP_EqSetDebugPathPointsCmd',626,1),(13423,58604,58604,'OP_EqSetDefaultVerbCmd',666,1),(13424,58604,58604,'OP_EqSetPOVGhostCmd',616,1),(13425,58604,58604,'OP_EqShowBookCmd',679,1),(13426,58604,58604,'OP_EqShowDeathWindowCmd',660,1),(13427,58604,58604,'OP_EqShowWindowCmd',672,1),(13428,58604,58604,'OP_EqSpellCastEndCmd',663,1),(13429,58604,58604,'OP_EqSpellCastStartCmd',662,1),(13430,58604,58604,'OP_EqSpellMoveToRangeAndRetryCmd',694,1),(13431,58604,58604,'OP_EqStartBrokerCmd',691,1),(13432,58604,58604,'OP_EqStateCmd',629,1),(13433,58604,58604,'OP_EqStoreLogCmd',693,1),(13434,58604,58604,'OP_EqUpdateBankCmd',655,1),(13435,58604,58604,'OP_EqUpdateGhostCmd',614,1),(13436,58604,58604,'OP_EqUpdateLootCmd',658,1),(13437,58604,58604,'OP_EqUpdateMerchantCmd',650,1),(13438,58604,58604,'OP_EqUpdatePlayerMailCmd',695,1),(13439,58604,58604,'OP_EqUpdatePlayerTradeCmd',652,1),(13440,58604,58604,'OP_EqUpdateSignWidgetCmd',677,1),(13441,58604,58604,'OP_EqUpdateStoreCmd',651,1),(13442,58604,58604,'OP_EqUpdateSubClassesCmd',624,1),(13443,58604,58604,'OP_EqUpdateTargetCmd',687,1),(13444,58604,58604,'OP_EqWhoChannelQueryReplyCmd',685,1),(13445,58604,58604,'OP_ESInitMsg',25,1),(13446,58604,58604,'OP_ESLoginRequestMsg',3,1),(13447,58604,58604,'OP_ESReadyForClientsMsg',26,1),(13448,58604,58604,'OP_ESStatusMsg',100,1),(13449,58604,58604,'OP_ESWeatherRequestEndMsg',105,1),(13450,58604,58604,'OP_ESWeatherRequestMsg',104,1),(13451,58604,58604,'OP_ESZoneInstanceStatusMsg',101,1),(13452,58604,58604,'OP_ExamineConsignmentRequestMsg',171,1),(13453,58604,58604,'OP_ExamineConsignmentResponseMsg',172,1),(13454,58604,58604,'OP_ExamineInfoRequestMsg',255,1),(13455,58604,58604,'OP_ExamineItemRequestMsg',195,1),(13456,58604,58604,'OP_ExitHouseMsg',155,1),(13457,58604,58604,'OP_ExpectClientAsCharacterReplyMs',22,1),(13458,58604,58604,'OP_ExpectClientAsCharacterRequest',32,1),(13459,58604,58604,'OP_ExpPurchWindow',725,1),(13460,58604,58604,'OP_FellowshipExpMsg',122,1),(13461,58604,58604,'OP_FlightPathsMsg',413,1),(13462,58604,58604,'OP_GameWorldTimeMsg',43,1),(13463,58604,58604,'OP_PaperdollImage',577,1),(13464,58604,58604,'OP_GetAuctionAssetIDMsg',441,1),(13465,58604,58604,'OP_GetAuctionAssetIDReplyMsg',442,1),(13466,58604,58604,'OP_GetAvatarAccessRequestForCSToo',393,1),(13467,58604,58604,'OP_GetCharacterSerializedReplyMsg',424,1),(13468,58604,58604,'OP_GetCharacterSerializedRequestM',423,1),(13469,58604,58604,'OP_GroupCreatedMsg',88,1),(13470,58604,58604,'OP_GroupDestroyedMsg',89,1),(13471,58604,58604,'OP_GroupLeaderChangedMsg',93,1),(13472,58604,58604,'OP_GroupMemberAddedMsg',90,1),(13473,58604,58604,'OP_GroupMemberRemovedMsg',91,1),(13474,58604,58604,'OP_GroupOptionsMsg',199,1),(13475,58604,58604,'OP_GroupRemovedFromGroupMsg',92,1),(13476,58604,58604,'OP_GroupResendOOZDataMsg',94,1),(13477,58604,58604,'OP_GroupSettingsChangedMsg',95,1),(13478,58604,58604,'OP_GuildBankActionMsg',274,1),(13479,58604,58604,'OP_GuildBankActionResponseMsg',275,1),(13480,58604,58604,'OP_GuildBankEventListMsg',279,1),(13481,58604,58604,'OP_GuildBankItemDetailsRequestMsg',276,1),(13482,58604,58604,'OP_GuildBankItemDetailsResponseMs',277,1),(13483,58604,58604,'OP_GuildBankUpdateMsg',278,1),(13484,58604,58604,'OP_GuildEventActionMsg',269,1),(13485,58604,58604,'OP_GuildEventAddMsg',268,1),(13486,58604,58604,'OP_GuildEventDetailsMsg',272,1),(13487,58604,58604,'OP_GuildEventListMsg',270,1),(13488,58604,58604,'OP_GuildEventMsg',267,1),(13489,58604,58604,'OP_GuildMembershipResponseMsg',357,1),(13490,58604,58604,'OP_GuildRecruiting',705,1),(13491,58604,58604,'OP_GuildRecruitingDetails',706,1),(13492,58604,58604,'OP_GuildRecruitingImage',707,1),(13493,58604,58604,'OP_GuildRecruitingMemberInfo',704,1),(13494,58604,58604,'OP_GuildsayMsg',121,1),(13495,58604,58604,'OP_GuildStatusUpdate',698,1),(13496,58604,58604,'OP_GuildUpdateMsg',124,1),(13497,58604,58604,'OP_HeritageMsg',10000,1),(13498,58604,58604,'OP_HideIllusionsMsg',194,1),(13499,58604,58604,'OP_HouseAccessRemoveMsg',158,1),(13500,58604,58604,'OP_HouseAccessSetMsg',157,1),(13501,58604,58604,'OP_HouseCustomizationScreenMsg',166,1),(13502,58604,58604,'OP_HouseDefaultAccessSetMsg',156,1),(13503,58604,58604,'OP_HouseDeletedRemotelyMsg',142,1),(13504,58604,58604,'OP_HouseItemsList',484,1),(13505,58604,58604,'OP_HousingDataChangedMsg',427,1),(13506,58604,58604,'OP_HousingRestoreMsg',428,1),(13507,58604,58604,'OP_InspectPlayerMsg',363,1),(13508,58604,58604,'OP_InspectPlayerRequestMsg',450,1),(13509,58604,58604,'OP_InviteRequestMsg',447,1),(13510,58604,58604,'OP_InviteResponseMsg',448,1),(13511,58604,58604,'OP_InviteTargetResponseMsg',449,1),(13512,58604,58604,'OP_JoinGuildNotifyMsg',359,1),(13513,58604,58604,'OP_JournalQuestStoryline',747,1),(13514,58604,58604,'OP_KeymapDataMsg',177,1),(13515,58604,58604,'OP_KeymapLoadMsg',175,1),(13516,58604,58604,'OP_KeymapNoneMsg',176,1),(13517,58604,58604,'OP_KeymapSaveMsg',178,1),(13518,58604,58604,'OP_KnowledgebaseRequestMsg',227,1),(13519,58604,58604,'OP_KnowledgebaseResponseMsg',228,1),(13520,58604,58604,'OP_KnowledgeWindowSlotMappingMsg',369,1),(13521,58604,58604,'OP_KnownLanguagesMsg',238,1),(13522,58604,58604,'OP_Launchpad',575,1),(13523,58604,58604,'OP_LeaveGuildNotifyMsg',358,1),(13524,58604,58604,'OP_LevelChangedMsg',261,1),(13525,58604,58604,'OP_LFGGroupSearch',504,1),(13526,58604,58604,'OP_LFGUpdateMsg',518,1),(13527,58604,58604,'OP_LikeOption',136,1),(13528,58604,58604,'OP_LoadCalendarEvents',578,1),(13529,58604,58604,'OP_LoadWelcomeWindow',560,1),(13530,58604,58604,'OP_LoginByNumRequestMsg',1,1),(13531,58604,58604,'OP_LoginReplyMsg',4,1),(13532,58604,58604,'OP_LoginRequestMsg',0,1),(13533,58604,58604,'OP_LootItemsRequestMsg',185,1),(13534,58604,58604,'OP_Lottery',703,1),(13535,58604,58604,'OP_LSCheckAcctLockMsg',204,1),(13536,58604,58604,'OP_LsClientAlertlogReplyMsg',242,1),(13537,58604,58604,'OP_LsClientBaselogReplyMsg',240,1),(13538,58604,58604,'OP_LsClientCrashlogReplyMsg',241,1),(13539,58604,58604,'OP_LsClientVerifylogReplyMsg',243,1),(13540,58604,58604,'OP_LsRequestClientCrashLogMsg',239,1),(13541,58604,58604,'OP_LSServerLockMsg',365,1),(13542,58604,58604,'OP_MacroInitMsg',258,1),(13543,58604,58604,'OP_MacroUpdateMsg',259,1),(13544,58604,58604,'OP_MailCommitSendMessageMsg',344,1),(13545,58604,58604,'OP_MailDeleteMessageMsg',340,1),(13546,58604,58604,'OP_MailEventNotificationMsg',411,1),(13547,58604,58604,'OP_MailGetHeadersReplyMsg',341,1),(13548,58604,58604,'OP_MailGetMessageMsg',338,1),(13549,58604,58604,'OP_MailGetMessageReplyMsg',342,1),(13550,58604,58604,'OP_MailRemoveAttachFromMailMsg',346,1),(13551,58604,58604,'OP_MailSendMessageMsg',339,1),(13552,58604,58604,'OP_MailSendMessageReplyMsg',343,1),(13553,58604,58604,'OP_MailSendSystemMessageMsg',345,1),(13554,58604,58604,'OP_MakeGroupLeaderMsg',87,1),(13555,58604,58604,'OP_MapFogDataInitMsg',395,1),(13556,58604,58604,'OP_MapFogDataUpdateMsg',396,1),(13557,58604,58604,'OP_MapRequest',521,1),(13558,58604,58604,'OP_MarketAddFundsReply',529,1),(13559,58604,58604,'OP_MarketAddFundsRequest',528,1),(13560,58604,58604,'OP_MarketFundsUpdate',526,1),(13561,58604,58604,'OP_MarketPlaceItems',537,1),(13562,58604,58604,'OP_MarketPlacePrices',532,1),(13563,58604,58604,'OP_MarketPurchase',531,1),(13564,58604,58604,'OP_MentorPopup',558,1),(13565,58604,58604,'OP_MercHireWindow',750,1),(13566,58604,58604,'OP_MercUnknown',751,1),(13567,58604,58604,'OP_MigrateBoatTransportMsg',252,1),(13568,58604,58604,'OP_MigrateBoatTransportReplyMsg',253,1),(13569,58604,58604,'OP_MigrateClientToZoneReplyMsg',82,1),(13570,58604,58604,'OP_MigrateClientToZoneRequestMsg',81,1),(13571,58604,58604,'OP_ModifyGuildMsg',266,1),(13572,58604,58604,'OP_MonitorCharacterListMsg',56,1),(13573,58604,58604,'OP_MonitorCharacterListRequestMsg',57,1),(13574,58604,58604,'OP_MonitorReplyMsg',55,1),(13575,58604,58604,'OP_MOTDMsg',44,1),(13576,58604,58604,'OP_MoveableObjectPlacementCriteri',160,1),(13577,58604,58604,'OP_MoveLogUpdateMsg',400,1),(13578,58604,58604,'OP_NotifyApprenticeStoppedMentori',408,1),(13579,58604,58604,'OP_OfferQuestMsg',401,1),(13580,58604,58604,'OP_OnscreenMsgMsg',264,1),(13581,58604,58604,'OP_OpenCharCust',561,1),(13582,58604,58604,'OP_OutOfZoneMemberDataMsg',96,1),(13583,58604,58604,'OP_PayHouseUpkeepMsg',159,1),(13584,58604,58604,'OP_PerformCameraShakeMsg',214,1),(13585,58604,58604,'OP_PerformPlayerKnockbackMsg',213,1),(13586,58604,58604,'OP_PetOptions',201,1),(13587,58604,58604,'OP_PetOptionsResponse',581,1),(13588,58604,58604,'OP_PlayCharacterReplyMsg',19,1),(13589,58604,58604,'OP_PlayCharacterRequestMsg',18,1),(13590,58604,58604,'OP_PlayerHouseAccessUpdateMsg',147,1),(13591,58604,58604,'OP_PlayerHouseBaseScreenMsg',145,1),(13592,58604,58604,'OP_PlayerHouseCloseUIMsg',149,1),(13593,58604,58604,'OP_PlayerHouseDisplayStatusMsg',148,1),(13594,58604,58604,'OP_PlayerHousePurchaseScreenMsg',146,1),(13595,58604,58604,'OP_PlayerMadeInstances',140,1),(13596,58604,58604,'OP_PlayerMadeInstancesScreen',139,1),(13597,58604,58604,'OP_PlayerPollAnswer',557,1),(13598,58604,58604,'OP_PlayerPollPopup',556,1),(13599,58604,58604,'OP_PlayLon',511,1),(13600,58604,58604,'OP_PointOfInterest',729,1),(13601,58604,58604,'OP_PointOfInterest2',730,1),(13602,58604,58604,'OP_PopulateSkillMapsMsg',215,1),(13603,58604,58604,'OP_PositionBoatTransportMsg',251,1),(13604,58604,58604,'OP_PositionMoveableObject',162,1),(13605,58604,58604,'OP_PostPossessionMsg',454,1),(13606,58604,58604,'OP_PredictionUpdateMsg',37,1),(13607,58604,58604,'OP_PrePossessionMsg',453,1),(13608,58604,58604,'OP_PromoFlagsDetailsMsg',374,1),(13609,58604,58604,'OP_PublishHouse',138,1),(13610,58604,58604,'OP_PurchaseConsignmentLoreCheckRe',407,1),(13611,58604,58604,'OP_PurchaseConsignmentRequestMsg',128,1),(13612,58604,58604,'OP_QueAllBgSolo',564,1),(13613,58604,58604,'OP_QuestionnaireMsg',260,1),(13614,58604,58604,'OP_QuestJournalInspectMsg',114,1),(13615,58604,58604,'OP_QuestJournalOpenMsg',113,1),(13616,58604,58604,'OP_QuestJournalSetVisibleMsg',115,1),(13617,58604,58604,'OP_QuestJournalWaypointMsg',116,1),(13618,58604,58604,'OP_QuestReward',320,1),(13619,58604,58604,'OP_QuickbarInitMsg',256,1),(13620,58604,58604,'OP_QuickbarUpdateMsg',257,1),(13621,58604,58604,'OP_RaceRestrictionMsg',439,1),(13622,58604,58604,'OP_ReadBookPageMsg',196,1),(13623,58604,58604,'OP_ReadyForTakeOffMsg',192,1),(13624,58604,58604,'OP_ReadyToZoneMsg',84,1),(13625,58604,58604,'OP_RecipeBook',538,1),(13626,58604,58604,'OP_RecipeDetailsMsg',72,1),(13627,58604,58604,'OP_RecipeList',741,1),(13628,58604,58604,'OP_RecipeListUnknown',593,1),(13629,58604,58604,'OP_RelinquishHouseMsg',153,1),(13630,58604,58604,'OP_ReloadLocalizedTxtMsg',355,1),(13631,58604,58604,'OP_RemoteCmdMsg',42,1),(13632,58604,58604,'OP_RemoveClientFromGroupMsg',85,1),(13633,58604,58604,'OP_RemoveConcentrationMsg',112,1),(13634,58604,58604,'OP_RemoveGroupFromGroupMsg',86,1),(13635,58604,58604,'OP_RemoveSpellEffectMsg',111,1),(13636,58604,58604,'OP_RenameGuildMsg',282,1),(13637,58604,58604,'OP_ReplaceableSubMeshesMsg',165,1),(13638,58604,58604,'OP_ReportMsg',380,1),(13639,58604,58604,'OP_RequestCampMsg',50,1),(13640,58604,58604,'OP_RequestGuildBankEventDetailsMs',280,1),(13641,58604,58604,'OP_RequestGuildEventDetailsMsg',271,1),(13642,58604,58604,'OP_RequestGuildInfoMsg',273,1),(13643,58604,58604,'OP_RequestGuildMembershipMsg',356,1),(13644,58604,58604,'OP_RequestHelpRepathMsg',206,1),(13645,58604,58604,'OP_RequestRecipeDetailsMsg',71,1),(13646,58604,58604,'OP_RequestTargetLocMsg',207,1),(13647,58604,58604,'OP_Research',742,1),(13648,58604,58604,'OP_ResendWorldChannelsMsg',443,1),(13649,58604,58604,'OP_ReskinCharacterRequestMsg',15,1),(13650,58604,58604,'OP_RestartZoneMsg',412,1),(13651,58604,58604,'OP_RewardPackMsg',281,1),(13652,58604,58604,'OP_SatMsg',189,1),(13653,58604,58604,'OP_SavageBarInitMsg',580,1),(13654,58604,58604,'OP_SelectZoneTeleporterDestinatio',354,1),(13655,58604,58604,'OP_SendLatestRequestMsg',97,1),(13656,58604,58604,'OP_ServerPlayCharacterReplyMsg',24,1),(13657,58604,58604,'OP_ServerPlayCharacterRequestMsg',23,1),(13658,58604,58604,'OP_SetInstanceDisplayNameMsg',440,1),(13659,58604,58604,'OP_SetRemoteCmdsMsg',41,1),(13660,58604,58604,'OP_SetSocialMsg',99,1),(13661,58604,58604,'OP_ShaderCustomizationMsg',164,1),(13662,58604,58604,'OP_ShowCreateFromRecipeUIMsg',219,1),(13663,58604,58604,'OP_ShowIllusionsMsg',193,1),(13664,58604,58604,'OP_ShowItemCreationProcessUIMsg',223,1),(13665,58604,58604,'OP_ShowRecipeBookMsg',226,1),(13666,58604,58604,'OP_ShowZoneTeleporterDestinations',353,1),(13667,58604,58604,'OP_SitMsg',187,1),(13668,58604,58604,'OP_SkillInfoRequest',514,1),(13669,58604,58604,'OP_SkillInfoResponse',515,1),(13670,58604,58604,'OP_SOEAllAccess',607,1),(13671,58604,58604,'OP_SpellGainedMsg',262,1),(13672,58604,58604,'OP_StandMsg',188,1),(13673,58604,58604,'OP_StoodMsg',190,1),(13674,58604,58604,'OP_StopItemCreationMsg',222,1),(13675,58604,58604,'OP_StoppedLootingMsg',186,1),(13676,58604,58604,'OP_StopTrackingMsg',391,1),(13677,58604,58604,'OP_SubmitCharCust',562,1),(13678,58604,58604,'OP_SupplyDepot',739,1),(13679,58604,58604,'OP_SysClient',218,1),(13680,58604,58604,'OP_TeleportWithinZoneMsg',79,1),(13681,58604,58604,'OP_TeleportWithinZoneNoReloadMsg',80,1),(13682,58604,58604,'OP_TintWidgetsMsg',170,1),(13683,58604,58604,'OP_TitleUpdateMsg',384,1),(13684,58604,58604,'OP_TrackingUpdateMsg',389,1),(13685,58604,58604,'OP_TradeskillList',708,1),(13686,58604,58604,'OP_TraitsList',731,1),(13687,58604,58604,'OP_UIEvent',527,1),(13688,58604,58604,'OP_UIResetMsg',174,1),(13689,58604,58604,'OP_UISettingsResponseMsg',173,1),(13690,58604,58604,'OP_Unknown',764,1),(13691,58604,58604,'OP_UnknownNpcMsg',373,1),(13692,58604,58604,'OP_UpdateActivePublicZonesMsg',372,1),(13693,58604,58604,'OP_UpdateCharacterSheetMsg',63,1),(13694,58604,58604,'OP_UpdateClientPredFlagsMsg',245,1),(13695,58604,58604,'OP_UpdateDebugRadiiMsg',379,1),(13696,58604,58604,'OP_UpdateGroupMemberDataMsg',388,1),(13697,58604,58604,'OP_UpdateHouseAccessDataMsg',144,1),(13698,58604,58604,'OP_UpdateHouseDataMsg',143,1),(13699,58604,58604,'OP_UpdateInventoryMsg',68,1),(13700,58604,58604,'OP_UpdateItemCreationProcessUIMsg',224,1),(13701,58604,58604,'OP_UpdateMotdMsg',208,1),(13702,58604,58604,'OP_UpdateOpportunityMsg',75,1),(13703,58604,58604,'OP_UpdatePositionMsg',39,1),(13704,58604,58604,'OP_UpdateRaidMsg',381,1),(13705,58604,58604,'OP_UpdateRecipeBookMsg',70,1),(13706,58604,58604,'OP_UpdateSkillBookMsg',73,1),(13707,58604,58604,'OP_UpdateSkillsMsg',74,1),(13708,58604,58604,'OP_UpdateSpellBookMsg',66,1),(13709,58604,58604,'OP_UpdateTargetLocMsg',62,1),(13710,58604,58604,'OP_UpdateTargetMsg',61,1),(13711,58604,58604,'OP_UpdateTitleCmd',494,1),(13712,58604,58604,'OP_UseAdornment',719,1),(13713,58604,58604,'OP_VideoUploaded',579,1),(13714,58604,58604,'OP_VoiceChatChannel',520,1),(13715,58604,58604,'OP_VoiceChatServer',735,1),(13716,58604,58604,'OP_WaypointReplyMsg',349,1),(13717,58604,58604,'OP_WaypointRequestMsg',348,1),(13718,58604,58604,'OP_WaypointSelectMsg',350,1),(13719,58604,58604,'OP_WaypointUpdateMsg',351,1),(13720,58604,58604,'OP_Weakness',583,1),(13721,58604,58604,'OP_WhoQueryReplyMsg',54,1),(13722,58604,58604,'OP_WhoQueryRequestMsg',53,1),(13723,58604,58604,'OP_WorldDataChangeMsg',410,1),(13724,58604,58604,'OP_WorldDataUpdateMsg',237,1),(13725,58604,58604,'OP_WorldListMsg',8,1),(13726,58604,58604,'OP_WorldPingMsg',399,1),(13727,58604,58604,'OP_WorldShutdownUpdateMsg',403,1),(13728,58604,58604,'OP_WorldStatusChangeMsg',6,1),(13729,58604,58604,'OP_WorldTravelAvail',572,1),(13730,58604,58604,'OP_WSAcctLockStatusMsg',205,1),(13731,58604,58604,'OP_WSCreateCharacterReplyMsg',14,1),(13732,58604,58604,'OP_WSCreateCharacterRequestMsg',13,1),(13733,58604,58604,'OP_WSLoginRequestMsg',2,1),(13734,58604,58604,'OP_WSServerHideMsg',366,1),(13735,58604,58604,'OP_WSServerLockMsg',364,1),(13736,58604,58604,'OP_WSStatusReplyMsg',5,1),(13737,58604,58604,'OP_ZoneBgInstanceList',568,1),(13738,58604,58604,'OP_ZoneInfoMsg',33,1),(13739,58604,58604,'OP_ZoneInstanceCreateReplyMsg',30,1),(13740,58604,58604,'OP_ZoneInstanceDestroyedMsg',31,1),(13741,58604,58604,'OP_ZoneMOTDMsg',45,1),(13742,58604,58604,'OP_ZonesStatusMsg',103,1),(13743,58604,58604,'OP_ZonesStatusRequestMsg',102,1),(13744,58604,58604,'OP_ZoneToFriendReplyMsg',284,1),(13745,58604,58604,'OP_ZoneToFriendRequestMsg',283,1),(13746,58647,58647,'OP_AchievementUpdateMsg',746,1),(13747,58647,58647,'OP_AddSocialStructureStandingMsg',249,1),(13748,58647,58647,'OP_AdvancementRequestMsg',394,1),(13749,58647,58647,'OP_AdventureList',488,1),(13750,58647,58647,'OP_AFKUpdateMsg',370,1),(13751,58647,58647,'OP_AfterInvSpellUpdate',69,1),(13752,58647,58647,'OP_AllCharactersDescReplyMsg',10,1),(13753,58647,58647,'OP_AllCharactersDescRequestMsg',9,1),(13754,58647,58647,'OP_AllWSDescRequestMsg',7,1),(13755,58647,58647,'OP_AnonUpdateMsg',371,1),(13756,58647,58647,'OP_ArenaCreate',456,1),(13757,58647,58647,'OP_ArenaGameTypesMsg',445,1),(13758,58647,58647,'OP_ArenaList',457,1),(13759,58647,58647,'OP_ArenaWindow',465,1),(13760,58647,58647,'OP_AttackAllowed',500,1),(13761,58647,58647,'OP_AttackNotAllowed',501,1),(13762,58647,58647,'OP_AuctionAbortMsg',436,1),(13763,58647,58647,'OP_AuctionCharacter',433,1),(13764,58647,58647,'OP_AuctionCharacterReply',434,1),(13765,58647,58647,'OP_AuctionCoin',431,1),(13766,58647,58647,'OP_AuctionCoinReply',432,1),(13767,58647,58647,'OP_AuctionCommitMsg',435,1),(13768,58647,58647,'OP_AuctionItem',429,1),(13769,58647,58647,'OP_AuctionItemReply',430,1),(13770,58647,58647,'OP_AuditAuctionEventMsg',446,1),(13771,58647,58647,'OP_AvatarCreatedMsg',46,1),(13772,58647,58647,'OP_AvatarDestroyedMsg',47,1),(13773,58647,58647,'OP_AvatarUpdateMsg',360,1),(13774,58647,58647,'OP_BadLanguageFilter',519,1),(13775,58647,58647,'OP_BagOptions',502,1),(13776,58647,58647,'OP_BeginItemCreationMsg',221,1),(13777,58647,58647,'OP_BeginTrackingMsg',390,1),(13778,58647,58647,'OP_BioUpdateMsg',362,1),(13779,58647,58647,'OP_BrokerAddBag',292,1),(13780,58647,58647,'OP_BrokerRemoveBag',293,1),(13781,58647,58647,'OP_BrokerSellList',689,1),(13782,58647,58647,'OP_BuyPlayerHouseMsg',150,1),(13783,58647,58647,'OP_BuyPlayerHouseTintMsg',151,1),(13784,58647,58647,'OP_CampAbortedMsg',52,1),(13785,58647,58647,'OP_CampClientMsg',387,1),(13786,58647,58647,'OP_CampStartedMsg',51,1),(13787,58647,58647,'OP_CancelCreateFromRecipeMsg',220,1),(13788,58647,58647,'OP_CancelledFeignMsg',216,1),(13789,58647,58647,'OP_CancelMoveObjectModeMsg',163,1),(13790,58647,58647,'OP_CancelSpellCast',489,1),(13791,58647,58647,'OP_ChangeServerControlFlagMsg',246,1),(13792,58647,58647,'OP_ChangeZoneMsg',77,1),(13793,58647,58647,'OP_CharacterAchievements',745,1),(13794,58647,58647,'OP_CharacterCreatedDungeons',551,1),(13795,58647,58647,'OP_CharacterCurrency',744,1),(13796,58647,58647,'OP_CharacterHousingList',507,1),(13797,58647,58647,'OP_CharacterLinkdeadMsg',414,1),(13798,58647,58647,'OP_CharacterMerc',65,1),(13799,58647,58647,'OP_CharacterMounts',584,1),(13800,58647,58647,'OP_CharacterPet',64,1),(13801,58647,58647,'OP_CharNameChangedMsg',352,1),(13802,58647,58647,'OP_CharRenamed',710,1),(13803,58647,58647,'OP_CharTransferCommitReplyMsg',422,1),(13804,58647,58647,'OP_CharTransferCommitRequestMsg',420,1),(13805,58647,58647,'OP_CharTransferReplyMsg',418,1),(13806,58647,58647,'OP_CharTransferRequestMsg',417,1),(13807,58647,58647,'OP_CharTransferRollbackReplyMsg',421,1),(13808,58647,58647,'OP_CharTransferRollbackRequestMsg',419,1),(13809,58647,58647,'OP_CharTransferStartReplyMsg',416,1),(13810,58647,58647,'OP_CharTransferStartRequestMsg',415,1),(13811,58647,58647,'OP_CharTransferValidateReplyMsg',438,1),(13812,58647,58647,'OP_CharTransferValidateRequestMsg',437,1),(13813,58647,58647,'OP_ChatCreateChannelMsg',285,1),(13814,58647,58647,'OP_ChatFiltersMsg',335,1),(13815,58647,58647,'OP_ChatJoinChannelMsg',286,1),(13816,58647,58647,'OP_ChatLeaveChannelMsg',288,1),(13817,58647,58647,'OP_ChatRelationshipUpdateMsg',184,1),(13818,58647,58647,'OP_ChatSendFriendsMsg',295,1),(13819,58647,58647,'OP_ChatSendIgnoresMsg',296,1),(13820,58647,58647,'OP_ChatTellChannelMsg',289,1),(13821,58647,58647,'OP_ChatTellUserMsg',290,1),(13822,58647,58647,'OP_ChatToggleFriendMsg',291,1),(13823,58647,58647,'OP_ChatToggleIgnoreMsg',294,1),(13824,58647,58647,'OP_ChatWhoChannelMsg',287,1),(13825,58647,58647,'OP_ClearDataMsg',98,1),(13826,58647,58647,'OP_ClearForLandingMsg',491,1),(13827,58647,58647,'OP_ClearForTakeOffMsg',191,1),(13828,58647,58647,'OP_ClientCmdMsg',58,1),(13829,58647,58647,'OP_ClientFellMsg',385,1),(13830,58647,58647,'OP_ClientIdleBeginMsg',405,1),(13831,58647,58647,'OP_ClientIdleEndMsg',406,1),(13832,58647,58647,'OP_ClientInDeathRegionMsg',386,1),(13833,58647,58647,'OP_ClientTeleportRequestMsg',78,1),(13834,58647,58647,'OP_ClientTeleportToLocationMsg',244,1),(13835,58647,58647,'OP_CloseGroupInviteWindowMsg',397,1),(13836,58647,58647,'OP_CollectAllHouseItemsMsg',152,1),(13837,58647,58647,'OP_ConsignItemRequestMsg',126,1),(13838,58647,58647,'OP_ConsignItemResponseMsg',127,1),(13839,58647,58647,'OP_ConsignmentCloseStoreMsg',125,1),(13840,58647,58647,'OP_ConsignRemoveItemsMsg',378,1),(13841,58647,58647,'OP_ConsignViewCreateMsg',375,1),(13842,58647,58647,'OP_ConsignViewGetPageMsg',376,1),(13843,58647,58647,'OP_ConsignViewReleaseMsg',377,1),(13844,58647,58647,'OP_ConsignViewSortMsg',383,1),(13845,58647,58647,'OP_CorruptedClientMsg',409,1),(13846,58647,58647,'OP_CreateBoatTransportsMsg',250,1),(13847,58647,58647,'OP_CreateCharacterDungeon',547,1),(13848,58647,58647,'OP_CreateCharacterReplyMsg',12,1),(13849,58647,58647,'OP_CreateCharacterRequestMsg',11,1),(13850,58647,58647,'OP_CreateCharFromCBBReplyMsg',426,1),(13851,58647,58647,'OP_CreateCharFromCBBRequestMsg',425,1),(13852,58647,58647,'OP_CreateGuildReplyMsg',120,1),(13853,58647,58647,'OP_CreateGuildRequestMsg',119,1),(13854,58647,58647,'OP_CreateZoneInstanceMsg',29,1),(13855,58647,58647,'OP_CsCategoryRequestMsg',367,1),(13856,58647,58647,'OP_CsCategoryResponseMsg',368,1),(13857,58647,58647,'OP_CSTicketAddCommentMsg',234,1),(13858,58647,58647,'OP_CSTicketChangeNotificationMsg',236,1),(13859,58647,58647,'OP_CSTicketCommentRequestMsg',231,1),(13860,58647,58647,'OP_CSTicketCommentResponseMsg',232,1),(13861,58647,58647,'OP_CSTicketCreateMsg',233,1),(13862,58647,58647,'OP_CSTicketDeleteMsg',235,1),(13863,58647,58647,'OP_CSTicketHeaderRequestMsg',229,1),(13864,58647,58647,'OP_CSTicketInfoMsg',230,1),(13865,58647,58647,'OP_CSToolAccessResponseMsg',388,1),(13866,58647,58647,'OP_CSToolsRequestMsg',247,1),(13867,58647,58647,'OP_CSToolsResponseMsg',248,1),(13868,58647,58647,'OP_CurrentPet',485,1),(13869,58647,58647,'OP_CustomizationPurchaseRequestMs',167,1),(13870,58647,58647,'OP_CustomizationReplyMsg',169,1),(13871,58647,58647,'OP_CustomizationSetRequestMsg',168,1),(13872,58647,58647,'OP_CustomizeHouseDisplay',735,1),(13873,58647,58647,'OP_DailyObjectives',597,1),(13874,58647,58647,'OP_DefaultGroupOptionsMsg',198,1),(13875,58647,58647,'OP_DefaultGroupOptionsRequestMsg',197,1),(13876,58647,58647,'OP_DeleteCharacterReplyMsg',17,1),(13877,58647,58647,'OP_DeleteCharacterRequestMsg',16,1),(13878,58647,58647,'OP_DeleteGuildMsg',123,1),(13879,58647,58647,'OP_DestUpdateReq',210,1),(13880,58647,58647,'OP_DialogCloseMsg',110,1),(13881,58647,58647,'OP_DialogSelectMsg',109,1),(13882,58647,58647,'OP_DispatchClientCmdMsg',60,1),(13883,58647,58647,'OP_DispatchESMsg',59,1),(13884,58647,58647,'OP_DispatchMsg',451,1),(13885,58647,58647,'OP_DispatchSpellCmdMsg',179,1),(13886,58647,58647,'OP_DisplayDebugNLLPointsMsg',254,1),(13887,58647,58647,'OP_DisplayEventMsg',452,1),(13888,58647,58647,'OP_DisplayExchangeScreenMsg',444,1),(13889,58647,58647,'OP_DisplayGroupOptionsScreenMsg',200,1),(13890,58647,58647,'OP_DisplayInnVisitScreenMsg',202,1),(13891,58647,58647,'OP_DisplayMailScreenMsg',404,1),(13892,58647,58647,'OP_DisplayTSEventReactionMsg',225,1),(13893,58647,58647,'OP_DisplayWarningMsg',265,1),(13894,58647,58647,'OP_DoneLoadingEntityResourcesMsg',36,1),(13895,58647,58647,'OP_DoneLoadingZoneResourcesMsg',34,1),(13896,58647,58647,'OP_DoneSendingInitialEntitiesMsg',35,1),(13897,58647,58647,'OP_DressingRoom',510,1),(13898,58647,58647,'OP_DumpSchedulerMsg',203,1),(13899,58647,58647,'OP_DungeonMakerEnter',548,1),(13900,58647,58647,'OP_DungeonMakerItemRequest',550,1),(13901,58647,58647,'OP_DungeonMakerItemResponse',582,1),(13902,58647,58647,'OP_DungeonMakerToolboxList',552,1),(13903,58647,58647,'OP_DungeonMakerUnknown',553,1),(13904,58647,58647,'OP_DungeonMakerUnknown1',554,1),(13905,58647,58647,'OP_DungeonPlayAsAvatarList',749,1),(13906,58647,58647,'OP_DungeonPlayAsAvatarSelected',750,1),(13907,58647,58647,'OP_EncounterBrokenMsg',263,1),(13908,58647,58647,'OP_EnterHouseMsg',154,1),(13909,58647,58647,'OP_EnterMoveObjectModeMsg',161,1),(13910,58647,58647,'OP_EntityVerbsReplyMsg',181,1),(13911,58647,58647,'OP_EntityVerbsRequestMsg',180,1),(13912,58647,58647,'OP_EntityVerbsVerbMsg',182,1),(13913,58647,58647,'OP_EqArenaResultsCmd',700,1),(13914,58647,58647,'OP_EqAvailWorldChannelsCmd',687,1),(13915,58647,58647,'OP_EqBetaCopyRequest',606,1),(13916,58647,58647,'OP_EqCannedEmoteCmd',629,1),(13917,58647,58647,'OP_EqChatChannelUpdateCmd',685,1),(13918,58647,58647,'OP_EqChoiceWinCmd',666,1),(13919,58647,58647,'OP_EqCloseWindowCmd',658,1),(13920,58647,58647,'OP_EqCollectionFilterCmd',645,1),(13921,58647,58647,'OP_EqCollectionItemCmd',646,1),(13922,58647,58647,'OP_EqCollectionUpdateCmd',644,1),(13923,58647,58647,'OP_EqConsignmentItemsCmd',690,1),(13924,58647,58647,'OP_EqCreateGhostCmd',611,1),(13925,58647,58647,'OP_EqCreateListBoxCmd',626,1),(13926,58647,58647,'OP_EqCreateSignWidgetCmd',613,1),(13927,58647,58647,'OP_EqCreateWidgetCmd',612,1),(13928,58647,58647,'OP_EqDebugPVDCmd',679,1),(13929,58647,58647,'OP_EqDestroyGhostCmd',614,1),(13930,58647,58647,'OP_EqDialogCloseCmd',642,1),(13931,58647,58647,'OP_EqDialogOpenCmd',641,1),(13932,58647,58647,'OP_EqDisplaySpellFailCmd',662,1),(13933,58647,58647,'OP_EqDisplayTextCmd',610,1),(13934,58647,58647,'OP_EqDrawablePathGraphCmd',640,1),(13935,58647,58647,'OP_EqEnableGameEventCmd',672,1),(13936,58647,58647,'OP_EqEnableWindowCmd',674,1),(13937,58647,58647,'OP_EqExamineInfoCmd',657,1),(13938,58647,58647,'OP_EqFactionUpdateCmd',643,1),(13939,58647,58647,'OP_EqFlashWindowCmd',675,1),(13940,58647,58647,'OP_EqGetProbsCmd',683,1),(13941,58647,58647,'OP_EqGroupMemberRemovedCmd',636,1),(13942,58647,58647,'OP_EqGuildBankEventActionCmd',701,1),(13943,58647,58647,'OP_EqGuildBankExamineInfoCmd',702,1),(13944,58647,58647,'OP_EqHearChainEffectCmd',637,1),(13945,58647,58647,'OP_EqHearChatCmd',609,1),(13946,58647,58647,'OP_EqHearCombatCmd',618,1),(13947,58647,58647,'OP_EqHearConsiderCmd',624,1),(13948,58647,58647,'OP_EqHearDeathCmd',635,1),(13949,58647,58647,'OP_EQHearDispellCmd',747,1),(13950,58647,58647,'OP_EqHearDrowningCmd',634,1),(13951,58647,58647,'OP_EqHearHealCmd',684,1),(13952,58647,58647,'OP_EqHearPlayFlavorCmd',677,1),(13953,58647,58647,'OP_EQHearProcCmd',620,1),(13954,58647,58647,'OP_EQHearResEffectCmd',621,1),(13955,58647,58647,'OP_EqHearSpellCastCmd',619,1),(13956,58647,58647,'OP_EqHearSpellFizzleCmd',623,1),(13957,58647,58647,'OP_EqHearSpellInterruptCmd',622,1),(13958,58647,58647,'OP_EqHearSpellNoLandCmd',703,1),(13959,58647,58647,'OP_EQHearThreatCmd',741,1),(13960,58647,58647,'OP_EqHelpPathClearCmd',655,1),(13961,58647,58647,'OP_EqHelpPathCmd',654,1),(13962,58647,58647,'OP_EqInspectPCResultsCmd',639,1),(13963,58647,58647,'OP_EqInstructionWindowCloseCmd',669,1),(13964,58647,58647,'OP_EqInstructionWindowCmd',668,1),(13965,58647,58647,'OP_EqInstructionWindowGoalCmd',670,1),(13966,58647,58647,'OP_EqInstructionWindowTaskCmd',671,1),(13967,58647,58647,'OP_EqJunctionListCmd',660,1),(13968,58647,58647,'OP_EqMapExplorationCmd',693,1),(13969,58647,58647,'OP_EqMentoring',648,1),(13970,58647,58647,'OP_EqPlaySound3DCmd',632,1),(13971,58647,58647,'OP_EqPlaySoundCmd',631,1),(13972,58647,58647,'OP_EqPlayVoiceCmd',633,1),(13973,58647,58647,'OP_EqQuestGroupCmd',650,1),(13974,58647,58647,'OP_EqQuestionnaireCmd',681,1),(13975,58647,58647,'OP_EqQuestJournalReplyCmd',649,1),(13976,58647,58647,'OP_EqQuestJournalUpdateCmd',647,1),(13977,58647,58647,'OP_EqReceiveOfferCmd',638,1),(13978,58647,58647,'OP_EqResurrectedCmd',665,1),(13979,58647,58647,'OP_EqSetControlGhostCmd',616,1),(13980,58647,58647,'OP_EqSetDebugPathPointsCmd',627,1),(13981,58647,58647,'OP_EqSetDefaultVerbCmd',667,1),(13982,58647,58647,'OP_EqSetPOVGhostCmd',617,1),(13983,58647,58647,'OP_EqShowBookCmd',680,1),(13984,58647,58647,'OP_EqShowDeathWindowCmd',661,1),(13985,58647,58647,'OP_EqShowWindowCmd',673,1),(13986,58647,58647,'OP_EqSpellCastEndCmd',664,1),(13987,58647,58647,'OP_EqSpellCastStartCmd',663,1),(13988,58647,58647,'OP_EqSpellMoveToRangeAndRetryCmd',695,1),(13989,58647,58647,'OP_EqStartBrokerCmd',692,1),(13990,58647,58647,'OP_EqStateCmd',630,1),(13991,58647,58647,'OP_EqStoreLogCmd',694,1),(13992,58647,58647,'OP_EqUpdateBankCmd',656,1),(13993,58647,58647,'OP_EqUpdateGhostCmd',615,1),(13994,58647,58647,'OP_EqUpdateLootCmd',659,1),(13995,58647,58647,'OP_EqUpdateMerchantCmd',651,1),(13996,58647,58647,'OP_EqUpdatePlayerMailCmd',696,1),(13997,58647,58647,'OP_EqUpdatePlayerTradeCmd',653,1),(13998,58647,58647,'OP_EqUpdateSignWidgetCmd',678,1),(13999,58647,58647,'OP_EqUpdateStoreCmd',652,1),(14000,58647,58647,'OP_EqUpdateSubClassesCmd',625,1),(14001,58647,58647,'OP_EqUpdateTargetCmd',688,1),(14002,58647,58647,'OP_EqWhoChannelQueryReplyCmd',686,1),(14003,58647,58647,'OP_ESInitMsg',25,1),(14004,58647,58647,'OP_ESLoginRequestMsg',3,1),(14005,58647,58647,'OP_ESReadyForClientsMsg',26,1),(14006,58647,58647,'OP_ESStatusMsg',100,1),(14007,58647,58647,'OP_ESWeatherRequestEndMsg',105,1),(14008,58647,58647,'OP_ESWeatherRequestMsg',104,1),(14009,58647,58647,'OP_ESZoneInstanceStatusMsg',101,1),(14010,58647,58647,'OP_ExamineConsignmentRequestMsg',171,1),(14011,58647,58647,'OP_ExamineConsignmentResponseMsg',172,1),(14012,58647,58647,'OP_ExamineInfoRequestMsg',255,1),(14013,58647,58647,'OP_ExamineItemRequestMsg',195,1),(14014,58647,58647,'OP_ExitHouseMsg',155,1),(14015,58647,58647,'OP_ExpectClientAsCharacterReplyMs',22,1),(14016,58647,58647,'OP_ExpectClientAsCharacterRequest',32,1),(14017,58647,58647,'OP_ExpPurchWindow',726,1),(14018,58647,58647,'OP_FellowshipExpMsg',122,1),(14019,58647,58647,'OP_FlightPathsMsg',413,1),(14020,58647,58647,'OP_GameWorldTimeMsg',43,1),(14021,58647,58647,'OP_PaperdollImage',577,1),(14022,58647,58647,'OP_GetAuctionAssetIDMsg',441,1),(14023,58647,58647,'OP_GetAuctionAssetIDReplyMsg',442,1),(14024,58647,58647,'OP_GetAvatarAccessRequestForCSToo',393,1),(14025,58647,58647,'OP_GetCharacterSerializedReplyMsg',424,1),(14026,58647,58647,'OP_GetCharacterSerializedRequestM',423,1),(14027,58647,58647,'OP_GroupCreatedMsg',88,1),(14028,58647,58647,'OP_GroupDestroyedMsg',89,1),(14029,58647,58647,'OP_GroupLeaderChangedMsg',93,1),(14030,58647,58647,'OP_GroupMemberAddedMsg',90,1),(14031,58647,58647,'OP_GroupMemberRemovedMsg',91,1),(14032,58647,58647,'OP_GroupOptionsMsg',199,1),(14033,58647,58647,'OP_GroupRemovedFromGroupMsg',92,1),(14034,58647,58647,'OP_GroupResendOOZDataMsg',94,1),(14035,58647,58647,'OP_GroupSettingsChangedMsg',95,1),(14036,58647,58647,'OP_GuildBankActionMsg',274,1),(14037,58647,58647,'OP_GuildBankActionResponseMsg',275,1),(14038,58647,58647,'OP_GuildBankEventListMsg',279,1),(14039,58647,58647,'OP_GuildBankItemDetailsRequestMsg',276,1),(14040,58647,58647,'OP_GuildBankItemDetailsResponseMs',277,1),(14041,58647,58647,'OP_GuildBankUpdateMsg',278,1),(14042,58647,58647,'OP_GuildEventActionMsg',269,1),(14043,58647,58647,'OP_GuildEventAddMsg',268,1),(14044,58647,58647,'OP_GuildEventDetailsMsg',272,1),(14045,58647,58647,'OP_GuildEventListMsg',270,1),(14046,58647,58647,'OP_GuildEventMsg',267,1),(14047,58647,58647,'OP_GuildMembershipResponseMsg',357,1),(14048,58647,58647,'OP_GuildRecruiting',706,1),(14049,58647,58647,'OP_GuildRecruitingDetails',707,1),(14050,58647,58647,'OP_GuildRecruitingImage',708,1),(14051,58647,58647,'OP_GuildRecruitingMemberInfo',705,1),(14052,58647,58647,'OP_GuildsayMsg',121,1),(14053,58647,58647,'OP_GuildStatusUpdate',699,1),(14054,58647,58647,'OP_GuildUpdateMsg',124,1),(14055,58647,58647,'OP_HeritageMsg',10001,1),(14056,58647,58647,'OP_HideIllusionsMsg',194,1),(14057,58647,58647,'OP_HouseAccessRemoveMsg',158,1),(14058,58647,58647,'OP_HouseAccessSetMsg',157,1),(14059,58647,58647,'OP_HouseCustomizationScreenMsg',166,1),(14060,58647,58647,'OP_HouseDefaultAccessSetMsg',156,1),(14061,58647,58647,'OP_HouseDeletedRemotelyMsg',142,1),(14062,58647,58647,'OP_HouseItemsList',484,1),(14063,58647,58647,'OP_HousingDataChangedMsg',427,1),(14064,58647,58647,'OP_HousingRestoreMsg',428,1),(14065,58647,58647,'OP_InspectPlayerMsg',363,1),(14066,58647,58647,'OP_InspectPlayerRequestMsg',450,1),(14067,58647,58647,'OP_InviteRequestMsg',447,1),(14068,58647,58647,'OP_InviteResponseMsg',448,1),(14069,58647,58647,'OP_InviteTargetResponseMsg',449,1),(14070,58647,58647,'OP_JoinGuildNotifyMsg',359,1),(14071,58647,58647,'OP_JournalQuestStoryline',748,1),(14072,58647,58647,'OP_KeymapDataMsg',177,1),(14073,58647,58647,'OP_KeymapLoadMsg',175,1),(14074,58647,58647,'OP_KeymapNoneMsg',176,1),(14075,58647,58647,'OP_KeymapSaveMsg',178,1),(14076,58647,58647,'OP_KnowledgebaseRequestMsg',227,1),(14077,58647,58647,'OP_KnowledgebaseResponseMsg',228,1),(14078,58647,58647,'OP_KnowledgeWindowSlotMappingMsg',369,1),(14079,58647,58647,'OP_KnownLanguagesMsg',238,1),(14080,58647,58647,'OP_Launchpad',575,1),(14081,58647,58647,'OP_LeaveGuildNotifyMsg',358,1),(14082,58647,58647,'OP_LevelChangedMsg',261,1),(14083,58647,58647,'OP_LFGGroupSearch',504,1),(14084,58647,58647,'OP_LFGUpdateMsg',518,1),(14085,58647,58647,'OP_LikeOption',136,1),(14086,58647,58647,'OP_LoadCalendarEvents',578,1),(14087,58647,58647,'OP_LoadWelcomeWindow',560,1),(14088,58647,58647,'OP_LoginByNumRequestMsg',1,1),(14089,58647,58647,'OP_LoginReplyMsg',4,1),(14090,58647,58647,'OP_LoginRequestMsg',0,1),(14091,58647,58647,'OP_LootItemsRequestMsg',185,1),(14092,58647,58647,'OP_Lottery',704,1),(14093,58647,58647,'OP_LSCheckAcctLockMsg',204,1),(14094,58647,58647,'OP_LsClientAlertlogReplyMsg',242,1),(14095,58647,58647,'OP_LsClientBaselogReplyMsg',240,1),(14096,58647,58647,'OP_LsClientCrashlogReplyMsg',241,1),(14097,58647,58647,'OP_LsClientVerifylogReplyMsg',243,1),(14098,58647,58647,'OP_LsRequestClientCrashLogMsg',239,1),(14099,58647,58647,'OP_LSServerLockMsg',365,1),(14100,58647,58647,'OP_MacroInitMsg',258,1),(14101,58647,58647,'OP_MacroUpdateMsg',259,1),(14102,58647,58647,'OP_MailCommitSendMessageMsg',344,1),(14103,58647,58647,'OP_MailDeleteMessageMsg',340,1),(14104,58647,58647,'OP_MailEventNotificationMsg',411,1),(14105,58647,58647,'OP_MailGetHeadersReplyMsg',341,1),(14106,58647,58647,'OP_MailGetMessageMsg',338,1),(14107,58647,58647,'OP_MailGetMessageReplyMsg',342,1),(14108,58647,58647,'OP_MailRemoveAttachFromMailMsg',346,1),(14109,58647,58647,'OP_MailSendMessageMsg',339,1),(14110,58647,58647,'OP_MailSendMessageReplyMsg',343,1),(14111,58647,58647,'OP_MailSendSystemMessageMsg',345,1),(14112,58647,58647,'OP_MakeGroupLeaderMsg',87,1),(14113,58647,58647,'OP_MapFogDataInitMsg',395,1),(14114,58647,58647,'OP_MapFogDataUpdateMsg',396,1),(14115,58647,58647,'OP_MapRequest',521,1),(14116,58647,58647,'OP_MarketAddFundsReply',529,1),(14117,58647,58647,'OP_MarketAddFundsRequest',528,1),(14118,58647,58647,'OP_MarketFundsUpdate',526,1),(14119,58647,58647,'OP_MarketPlaceItems',537,1),(14120,58647,58647,'OP_MarketPlacePrices',532,1),(14121,58647,58647,'OP_MarketPurchase',531,1),(14122,58647,58647,'OP_MentorPopup',558,1),(14123,58647,58647,'OP_MercHireWindow',751,1),(14124,58647,58647,'OP_MercUnknown',752,1),(14125,58647,58647,'OP_MigrateBoatTransportMsg',252,1),(14126,58647,58647,'OP_MigrateBoatTransportReplyMsg',253,1),(14127,58647,58647,'OP_MigrateClientToZoneReplyMsg',82,1),(14128,58647,58647,'OP_MigrateClientToZoneRequestMsg',81,1),(14129,58647,58647,'OP_ModifyGuildMsg',266,1),(14130,58647,58647,'OP_MonitorCharacterListMsg',56,1),(14131,58647,58647,'OP_MonitorCharacterListRequestMsg',57,1),(14132,58647,58647,'OP_MonitorReplyMsg',55,1),(14133,58647,58647,'OP_MOTDMsg',44,1),(14134,58647,58647,'OP_MoveableObjectPlacementCriteri',160,1),(14135,58647,58647,'OP_MoveLogUpdateMsg',400,1),(14136,58647,58647,'OP_NotifyApprenticeStoppedMentori',408,1),(14137,58647,58647,'OP_OfferQuestMsg',401,1),(14138,58647,58647,'OP_OnscreenMsgMsg',264,1),(14139,58647,58647,'OP_OpenCharCust',561,1),(14140,58647,58647,'OP_OutOfZoneMemberDataMsg',96,1),(14141,58647,58647,'OP_PayHouseUpkeepMsg',159,1),(14142,58647,58647,'OP_PerformCameraShakeMsg',214,1),(14143,58647,58647,'OP_PerformPlayerKnockbackMsg',213,1),(14144,58647,58647,'OP_PetOptions',201,1),(14145,58647,58647,'OP_PetOptionsResponse',581,1),(14146,58647,58647,'OP_PlayCharacterReplyMsg',19,1),(14147,58647,58647,'OP_PlayCharacterRequestMsg',18,1),(14148,58647,58647,'OP_PlayerHouseAccessUpdateMsg',147,1),(14149,58647,58647,'OP_PlayerHouseBaseScreenMsg',145,1),(14150,58647,58647,'OP_PlayerHouseCloseUIMsg',149,1),(14151,58647,58647,'OP_PlayerHouseDisplayStatusMsg',148,1),(14152,58647,58647,'OP_PlayerHousePurchaseScreenMsg',146,1),(14153,58647,58647,'OP_PlayerMadeInstances',140,1),(14154,58647,58647,'OP_PlayerMadeInstancesScreen',139,1),(14155,58647,58647,'OP_PlayerPollAnswer',557,1),(14156,58647,58647,'OP_PlayerPollPopup',556,1),(14157,58647,58647,'OP_PlayLon',511,1),(14158,58647,58647,'OP_PointOfInterest',730,1),(14159,58647,58647,'OP_PointOfInterest2',731,1),(14160,58647,58647,'OP_PopulateSkillMapsMsg',215,1),(14161,58647,58647,'OP_PositionBoatTransportMsg',251,1),(14162,58647,58647,'OP_PositionMoveableObject',162,1),(14163,58647,58647,'OP_PostPossessionMsg',454,1),(14164,58647,58647,'OP_PredictionUpdateMsg',37,1),(14165,58647,58647,'OP_PrePossessionMsg',453,1),(14166,58647,58647,'OP_PromoFlagsDetailsMsg',374,1),(14167,58647,58647,'OP_PublishHouse',138,1),(14168,58647,58647,'OP_PurchaseConsignmentLoreCheckRe',407,1),(14169,58647,58647,'OP_PurchaseConsignmentRequestMsg',128,1),(14170,58647,58647,'OP_QueAllBgSolo',564,1),(14171,58647,58647,'OP_QuestionnaireMsg',260,1),(14172,58647,58647,'OP_QuestJournalInspectMsg',114,1),(14173,58647,58647,'OP_QuestJournalOpenMsg',113,1),(14174,58647,58647,'OP_QuestJournalSetVisibleMsg',115,1),(14175,58647,58647,'OP_QuestJournalWaypointMsg',116,1),(14176,58647,58647,'OP_QuestReward',320,1),(14177,58647,58647,'OP_QuickbarInitMsg',256,1),(14178,58647,58647,'OP_QuickbarUpdateMsg',257,1),(14179,58647,58647,'OP_RaceRestrictionMsg',439,1),(14180,58647,58647,'OP_ReadBookPageMsg',196,1),(14181,58647,58647,'OP_ReadyForTakeOffMsg',192,1),(14182,58647,58647,'OP_ReadyToZoneMsg',84,1),(14183,58647,58647,'OP_RecipeBook',538,1),(14184,58647,58647,'OP_RecipeDetailsMsg',72,1),(14185,58647,58647,'OP_RecipeList',742,1),(14186,58647,58647,'OP_RecipeListUnknown',593,1),(14187,58647,58647,'OP_RelinquishHouseMsg',153,1),(14188,58647,58647,'OP_ReloadLocalizedTxtMsg',355,1),(14189,58647,58647,'OP_RemoteCmdMsg',42,1),(14190,58647,58647,'OP_RemoveClientFromGroupMsg',85,1),(14191,58647,58647,'OP_RemoveConcentrationMsg',112,1),(14192,58647,58647,'OP_RemoveGroupFromGroupMsg',86,1),(14193,58647,58647,'OP_RemoveSpellEffectMsg',111,1),(14194,58647,58647,'OP_RenameGuildMsg',282,1),(14195,58647,58647,'OP_ReplaceableSubMeshesMsg',165,1),(14196,58647,58647,'OP_ReportMsg',380,1),(14197,58647,58647,'OP_RequestCampMsg',50,1),(14198,58647,58647,'OP_RequestGuildBankEventDetailsMs',280,1),(14199,58647,58647,'OP_RequestGuildEventDetailsMsg',271,1),(14200,58647,58647,'OP_RequestGuildInfoMsg',273,1),(14201,58647,58647,'OP_RequestGuildMembershipMsg',356,1),(14202,58647,58647,'OP_RequestHelpRepathMsg',206,1),(14203,58647,58647,'OP_RequestRecipeDetailsMsg',71,1),(14204,58647,58647,'OP_RequestTargetLocMsg',207,1),(14205,58647,58647,'OP_Research',743,1),(14206,58647,58647,'OP_ResendWorldChannelsMsg',443,1),(14207,58647,58647,'OP_ReskinCharacterRequestMsg',15,1),(14208,58647,58647,'OP_RestartZoneMsg',412,1),(14209,58647,58647,'OP_RewardPackMsg',281,1),(14210,58647,58647,'OP_SatMsg',189,1),(14211,58647,58647,'OP_SavageBarInitMsg',580,1),(14212,58647,58647,'OP_SelectZoneTeleporterDestinatio',354,1),(14213,58647,58647,'OP_SendLatestRequestMsg',97,1),(14214,58647,58647,'OP_ServerPlayCharacterReplyMsg',24,1),(14215,58647,58647,'OP_ServerPlayCharacterRequestMsg',23,1),(14216,58647,58647,'OP_SetInstanceDisplayNameMsg',440,1),(14217,58647,58647,'OP_SetRemoteCmdsMsg',41,1),(14218,58647,58647,'OP_SetSocialMsg',99,1),(14219,58647,58647,'OP_ShaderCustomizationMsg',164,1),(14220,58647,58647,'OP_ShowCreateFromRecipeUIMsg',219,1),(14221,58647,58647,'OP_ShowIllusionsMsg',193,1),(14222,58647,58647,'OP_ShowItemCreationProcessUIMsg',223,1),(14223,58647,58647,'OP_ShowRecipeBookMsg',226,1),(14224,58647,58647,'OP_ShowZoneTeleporterDestinations',353,1),(14225,58647,58647,'OP_SitMsg',187,1),(14226,58647,58647,'OP_SkillInfoRequest',514,1),(14227,58647,58647,'OP_SkillInfoResponse',515,1),(14228,58647,58647,'OP_SOEAllAccess',607,1),(14229,58647,58647,'OP_SpellGainedMsg',262,1),(14230,58647,58647,'OP_StandMsg',188,1),(14231,58647,58647,'OP_StoodMsg',190,1),(14232,58647,58647,'OP_StopItemCreationMsg',222,1),(14233,58647,58647,'OP_StoppedLootingMsg',186,1),(14234,58647,58647,'OP_StopTrackingMsg',391,1),(14235,58647,58647,'OP_SubmitCharCust',562,1),(14236,58647,58647,'OP_SupplyDepot',740,1),(14237,58647,58647,'OP_SysClient',218,1),(14238,58647,58647,'OP_TeleportWithinZoneMsg',79,1),(14239,58647,58647,'OP_TeleportWithinZoneNoReloadMsg',80,1),(14240,58647,58647,'OP_TintWidgetsMsg',170,1),(14241,58647,58647,'OP_TitleUpdateMsg',384,1),(14242,58647,58647,'OP_TrackingUpdateMsg',389,1),(14243,58647,58647,'OP_TradeskillList',709,1),(14244,58647,58647,'OP_TraitsList',732,1),(14245,58647,58647,'OP_UIEvent',527,1),(14246,58647,58647,'OP_UIResetMsg',174,1),(14247,58647,58647,'OP_UISettingsResponseMsg',173,1),(14248,58647,58647,'OP_Unknown',765,1),(14249,58647,58647,'OP_UnknownNpcMsg',373,1),(14250,58647,58647,'OP_UpdateActivePublicZonesMsg',372,1),(14251,58647,58647,'OP_UpdateCharacterSheetMsg',63,1),(14252,58647,58647,'OP_UpdateClientPredFlagsMsg',245,1),(14253,58647,58647,'OP_UpdateDebugRadiiMsg',379,1),(14254,58647,58647,'OP_UpdateGroupMemberDataMsg',388,1),(14255,58647,58647,'OP_UpdateHouseAccessDataMsg',144,1),(14256,58647,58647,'OP_UpdateHouseDataMsg',143,1),(14257,58647,58647,'OP_UpdateInventoryMsg',68,1),(14258,58647,58647,'OP_UpdateItemCreationProcessUIMsg',224,1),(14259,58647,58647,'OP_UpdateMotdMsg',208,1),(14260,58647,58647,'OP_UpdateOpportunityMsg',75,1),(14261,58647,58647,'OP_UpdatePositionMsg',39,1),(14262,58647,58647,'OP_UpdateRaidMsg',381,1),(14263,58647,58647,'OP_UpdateRecipeBookMsg',70,1),(14264,58647,58647,'OP_UpdateSkillBookMsg',73,1),(14265,58647,58647,'OP_UpdateSkillsMsg',74,1),(14266,58647,58647,'OP_UpdateSpellBookMsg',66,1),(14267,58647,58647,'OP_UpdateTargetLocMsg',62,1),(14268,58647,58647,'OP_UpdateTargetMsg',61,1),(14269,58647,58647,'OP_UpdateTitleCmd',494,1),(14270,58647,58647,'OP_UseAdornment',720,1),(14271,58647,58647,'OP_VideoUploaded',579,1),(14272,58647,58647,'OP_VoiceChatChannel',520,1),(14273,58647,58647,'OP_VoiceChatServer',736,1),(14274,58647,58647,'OP_WaypointReplyMsg',349,1),(14275,58647,58647,'OP_WaypointRequestMsg',348,1),(14276,58647,58647,'OP_WaypointSelectMsg',350,1),(14277,58647,58647,'OP_WaypointUpdateMsg',351,1),(14278,58647,58647,'OP_Weakness',583,1),(14279,58647,58647,'OP_WhoQueryReplyMsg',54,1),(14280,58647,58647,'OP_WhoQueryRequestMsg',53,1),(14281,58647,58647,'OP_WorldDataChangeMsg',410,1),(14282,58647,58647,'OP_WorldDataUpdateMsg',237,1),(14283,58647,58647,'OP_WorldListMsg',8,1),(14284,58647,58647,'OP_WorldPingMsg',399,1),(14285,58647,58647,'OP_WorldShutdownUpdateMsg',403,1),(14286,58647,58647,'OP_WorldStatusChangeMsg',6,1),(14287,58647,58647,'OP_WorldTravelAvail',572,1),(14288,58647,58647,'OP_WSAcctLockStatusMsg',205,1),(14289,58647,58647,'OP_WSCreateCharacterReplyMsg',14,1),(14290,58647,58647,'OP_WSCreateCharacterRequestMsg',13,1),(14291,58647,58647,'OP_WSLoginRequestMsg',2,1),(14292,58647,58647,'OP_WSServerHideMsg',366,1),(14293,58647,58647,'OP_WSServerLockMsg',364,1),(14294,58647,58647,'OP_WSStatusReplyMsg',5,1),(14295,58647,58647,'OP_ZoneBgInstanceList',568,1),(14296,58647,58647,'OP_ZoneInfoMsg',33,1),(14297,58647,58647,'OP_ZoneInstanceCreateReplyMsg',30,1),(14298,58647,58647,'OP_ZoneInstanceDestroyedMsg',31,1),(14299,58647,58647,'OP_ZoneMOTDMsg',45,1),(14300,58647,58647,'OP_ZonesStatusMsg',103,1),(14301,58647,58647,'OP_ZonesStatusRequestMsg',102,1),(14302,58647,58647,'OP_ZoneToFriendReplyMsg',284,1),(14303,58647,58647,'OP_ZoneToFriendRequestMsg',283,1),(14304,60024,60024,'OP_AchievementUpdateMsg',748,1),(14305,60024,60024,'OP_AddSocialStructureStandingMsg',249,1),(14306,60024,60024,'OP_AdvancementRequestMsg',394,1),(14307,60024,60024,'OP_AdventureList',488,1),(14308,60024,60024,'OP_AFKUpdateMsg',370,1),(14309,60024,60024,'OP_AfterInvSpellUpdate',69,1),(14310,60024,60024,'OP_AllCharactersDescReplyMsg',10,1),(14311,60024,60024,'OP_AllCharactersDescRequestMsg',9,1),(14312,60024,60024,'OP_AllWSDescRequestMsg',7,1),(14313,60024,60024,'OP_AnonUpdateMsg',371,1),(14314,60024,60024,'OP_ArenaCreate',456,1),(14315,60024,60024,'OP_ArenaGameTypesMsg',445,1),(14316,60024,60024,'OP_ArenaList',457,1),(14317,60024,60024,'OP_ArenaWindow',465,1),(14318,60024,60024,'OP_AttackAllowed',500,1),(14319,60024,60024,'OP_AttackNotAllowed',501,1),(14320,60024,60024,'OP_AuctionAbortMsg',436,1),(14321,60024,60024,'OP_AuctionCharacter',433,1),(14322,60024,60024,'OP_AuctionCharacterReply',434,1),(14323,60024,60024,'OP_AuctionCoin',431,1),(14324,60024,60024,'OP_AuctionCoinReply',432,1),(14325,60024,60024,'OP_AuctionCommitMsg',435,1),(14326,60024,60024,'OP_AuctionItem',429,1),(14327,60024,60024,'OP_AuctionItemReply',430,1),(14328,60024,60024,'OP_AuditAuctionEventMsg',446,1),(14329,60024,60024,'OP_AvatarCreatedMsg',46,1),(14330,60024,60024,'OP_AvatarDestroyedMsg',47,1),(14331,60024,60024,'OP_AvatarUpdateMsg',360,1),(14332,60024,60024,'OP_BadLanguageFilter',519,1),(14333,60024,60024,'OP_BagOptions',502,1),(14334,60024,60024,'OP_BeginItemCreationMsg',221,1),(14335,60024,60024,'OP_BeginTrackingMsg',390,1),(14336,60024,60024,'OP_BioUpdateMsg',362,1),(14337,60024,60024,'OP_BrokerAddBag',292,1),(14338,60024,60024,'OP_BrokerRemoveBag',293,1),(14339,60024,60024,'OP_BrokerSellList',691,1),(14340,60024,60024,'OP_BuyPlayerHouseMsg',150,1),(14341,60024,60024,'OP_BuyPlayerHouseTintMsg',151,1),(14342,60024,60024,'OP_CampAbortedMsg',52,1),(14343,60024,60024,'OP_CampClientMsg',387,1),(14344,60024,60024,'OP_CampStartedMsg',51,1),(14345,60024,60024,'OP_CancelCreateFromRecipeMsg',220,1),(14346,60024,60024,'OP_CancelledFeignMsg',216,1),(14347,60024,60024,'OP_CancelMoveObjectModeMsg',163,1),(14348,60024,60024,'OP_CancelSpellCast',489,1),(14349,60024,60024,'OP_ChangeServerControlFlagMsg',246,1),(14350,60024,60024,'OP_ChangeZoneMsg',77,1),(14351,60024,60024,'OP_CharacterAchievements',747,1),(14352,60024,60024,'OP_CharacterCreatedDungeons',551,1),(14353,60024,60024,'OP_CharacterCurrency',746,1),(14354,60024,60024,'OP_CharacterHousingList',507,1),(14355,60024,60024,'OP_CharacterLinkdeadMsg',414,1),(14356,60024,60024,'OP_CharacterMerc',65,1),(14357,60024,60024,'OP_CharacterMounts',584,1),(14358,60024,60024,'OP_CharacterPet',64,1),(14359,60024,60024,'OP_CharNameChangedMsg',352,1),(14360,60024,60024,'OP_CharRenamed',712,1),(14361,60024,60024,'OP_CharTransferCommitReplyMsg',422,1),(14362,60024,60024,'OP_CharTransferCommitRequestMsg',420,1),(14363,60024,60024,'OP_CharTransferReplyMsg',418,1),(14364,60024,60024,'OP_CharTransferRequestMsg',417,1),(14365,60024,60024,'OP_CharTransferRollbackReplyMsg',421,1),(14366,60024,60024,'OP_CharTransferRollbackRequestMsg',419,1),(14367,60024,60024,'OP_CharTransferStartReplyMsg',416,1),(14368,60024,60024,'OP_CharTransferStartRequestMsg',415,1),(14369,60024,60024,'OP_CharTransferValidateReplyMsg',438,1),(14370,60024,60024,'OP_CharTransferValidateRequestMsg',437,1),(14371,60024,60024,'OP_ChatCreateChannelMsg',285,1),(14372,60024,60024,'OP_ChatFiltersMsg',335,1),(14373,60024,60024,'OP_ChatJoinChannelMsg',286,1),(14374,60024,60024,'OP_ChatLeaveChannelMsg',288,1),(14375,60024,60024,'OP_ChatRelationshipUpdateMsg',184,1),(14376,60024,60024,'OP_ChatSendFriendsMsg',295,1),(14377,60024,60024,'OP_ChatSendIgnoresMsg',296,1),(14378,60024,60024,'OP_ChatTellChannelMsg',289,1),(14379,60024,60024,'OP_ChatTellUserMsg',290,1),(14380,60024,60024,'OP_ChatToggleFriendMsg',291,1),(14381,60024,60024,'OP_ChatToggleIgnoreMsg',294,1),(14382,60024,60024,'OP_ChatWhoChannelMsg',287,1),(14383,60024,60024,'OP_ClearDataMsg',98,1),(14384,60024,60024,'OP_ClearForLandingMsg',491,1),(14385,60024,60024,'OP_ClearForTakeOffMsg',191,1),(14386,60024,60024,'OP_ClientCmdMsg',58,1),(14387,60024,60024,'OP_ClientFellMsg',385,1),(14388,60024,60024,'OP_ClientIdleBeginMsg',405,1),(14389,60024,60024,'OP_ClientIdleEndMsg',406,1),(14390,60024,60024,'OP_ClientInDeathRegionMsg',386,1),(14391,60024,60024,'OP_ClientTeleportRequestMsg',78,1),(14392,60024,60024,'OP_ClientTeleportToLocationMsg',244,1),(14393,60024,60024,'OP_CloseGroupInviteWindowMsg',397,1),(14394,60024,60024,'OP_CollectAllHouseItemsMsg',152,1),(14395,60024,60024,'OP_ConsignItemRequestMsg',126,1),(14396,60024,60024,'OP_ConsignItemResponseMsg',127,1),(14397,60024,60024,'OP_ConsignmentCloseStoreMsg',125,1),(14398,60024,60024,'OP_ConsignRemoveItemsMsg',378,1),(14399,60024,60024,'OP_ConsignViewCreateMsg',375,1),(14400,60024,60024,'OP_ConsignViewGetPageMsg',376,1),(14401,60024,60024,'OP_ConsignViewReleaseMsg',377,1),(14402,60024,60024,'OP_ConsignViewSortMsg',383,1),(14403,60024,60024,'OP_CorruptedClientMsg',409,1),(14404,60024,60024,'OP_CreateBoatTransportsMsg',250,1),(14405,60024,60024,'OP_CreateCharacterDungeon',547,1),(14406,60024,60024,'OP_CreateCharacterReplyMsg',12,1),(14407,60024,60024,'OP_CreateCharacterRequestMsg',11,1),(14408,60024,60024,'OP_CreateCharFromCBBReplyMsg',426,1),(14409,60024,60024,'OP_CreateCharFromCBBRequestMsg',425,1),(14410,60024,60024,'OP_CreateGuildReplyMsg',120,1),(14411,60024,60024,'OP_CreateGuildRequestMsg',119,1),(14412,60024,60024,'OP_CreateZoneInstanceMsg',29,1),(14413,60024,60024,'OP_CsCategoryRequestMsg',367,1),(14414,60024,60024,'OP_CsCategoryResponseMsg',368,1),(14415,60024,60024,'OP_CSTicketAddCommentMsg',234,1),(14416,60024,60024,'OP_CSTicketChangeNotificationMsg',236,1),(14417,60024,60024,'OP_CSTicketCommentRequestMsg',231,1),(14418,60024,60024,'OP_CSTicketCommentResponseMsg',232,1),(14419,60024,60024,'OP_CSTicketCreateMsg',233,1),(14420,60024,60024,'OP_CSTicketDeleteMsg',235,1),(14421,60024,60024,'OP_CSTicketHeaderRequestMsg',229,1),(14422,60024,60024,'OP_CSTicketInfoMsg',230,1),(14423,60024,60024,'OP_CSToolAccessResponseMsg',388,1),(14424,60024,60024,'OP_CSToolsRequestMsg',247,1),(14425,60024,60024,'OP_CSToolsResponseMsg',248,1),(14426,60024,60024,'OP_CurrentPet',485,1),(14427,60024,60024,'OP_CustomizationPurchaseRequestMs',167,1),(14428,60024,60024,'OP_CustomizationReplyMsg',169,1),(14429,60024,60024,'OP_CustomizationSetRequestMsg',168,1),(14430,60024,60024,'OP_CustomizeHouseDisplay',737,1),(14431,60024,60024,'OP_DailyObjectives',597,1),(14432,60024,60024,'OP_DefaultGroupOptionsMsg',198,1),(14433,60024,60024,'OP_DefaultGroupOptionsRequestMsg',197,1),(14434,60024,60024,'OP_DeleteCharacterReplyMsg',17,1),(14435,60024,60024,'OP_DeleteCharacterRequestMsg',16,1),(14436,60024,60024,'OP_DeleteGuildMsg',123,1),(14437,60024,60024,'OP_DestUpdateReq',210,1),(14438,60024,60024,'OP_DialogCloseMsg',110,1),(14439,60024,60024,'OP_DialogSelectMsg',109,1),(14440,60024,60024,'OP_DispatchClientCmdMsg',60,1),(14441,60024,60024,'OP_DispatchESMsg',59,1),(14442,60024,60024,'OP_DispatchMsg',451,1),(14443,60024,60024,'OP_DispatchSpellCmdMsg',179,1),(14444,60024,60024,'OP_DisplayDebugNLLPointsMsg',254,1),(14445,60024,60024,'OP_DisplayEventMsg',452,1),(14446,60024,60024,'OP_DisplayExchangeScreenMsg',444,1),(14447,60024,60024,'OP_DisplayGroupOptionsScreenMsg',200,1),(14448,60024,60024,'OP_DisplayInnVisitScreenMsg',202,1),(14449,60024,60024,'OP_DisplayMailScreenMsg',404,1),(14450,60024,60024,'OP_DisplayTSEventReactionMsg',225,1),(14451,60024,60024,'OP_DisplayWarningMsg',265,1),(14452,60024,60024,'OP_DoneLoadingEntityResourcesMsg',36,1),(14453,60024,60024,'OP_DoneLoadingZoneResourcesMsg',34,1),(14454,60024,60024,'OP_DoneSendingInitialEntitiesMsg',35,1),(14455,60024,60024,'OP_DressingRoom',510,1),(14456,60024,60024,'OP_DumpSchedulerMsg',203,1),(14457,60024,60024,'OP_DungeonMakerEnter',548,1),(14458,60024,60024,'OP_DungeonMakerItemRequest',550,1),(14459,60024,60024,'OP_DungeonMakerItemResponse',582,1),(14460,60024,60024,'OP_DungeonMakerToolboxList',552,1),(14461,60024,60024,'OP_DungeonMakerUnknown',553,1),(14462,60024,60024,'OP_DungeonMakerUnknown1',554,1),(14463,60024,60024,'OP_DungeonPlayAsAvatarList',751,1),(14464,60024,60024,'OP_DungeonPlayAsAvatarSelected',752,1),(14465,60024,60024,'OP_EncounterBrokenMsg',263,1),(14466,60024,60024,'OP_EnterHouseMsg',154,1),(14467,60024,60024,'OP_EnterMoveObjectModeMsg',161,1),(14468,60024,60024,'OP_EntityVerbsReplyMsg',181,1),(14469,60024,60024,'OP_EntityVerbsRequestMsg',180,1),(14470,60024,60024,'OP_EntityVerbsVerbMsg',182,1),(14471,60024,60024,'OP_EqArenaResultsCmd',702,1),(14472,60024,60024,'OP_EqAvailWorldChannelsCmd',689,1),(14473,60024,60024,'OP_EqBetaCopyRequest',608,1),(14474,60024,60024,'OP_EqCannedEmoteCmd',631,1),(14475,60024,60024,'OP_EqChatChannelUpdateCmd',687,1),(14476,60024,60024,'OP_EqChoiceWinCmd',668,1),(14477,60024,60024,'OP_EqCloseWindowCmd',660,1),(14478,60024,60024,'OP_EqCollectionFilterCmd',647,1),(14479,60024,60024,'OP_EqCollectionItemCmd',648,1),(14480,60024,60024,'OP_EqCollectionUpdateCmd',646,1),(14481,60024,60024,'OP_EqConsignmentItemsCmd',692,1),(14482,60024,60024,'OP_EqCreateGhostCmd',613,1),(14483,60024,60024,'OP_EqCreateListBoxCmd',628,1),(14484,60024,60024,'OP_EqCreateSignWidgetCmd',615,1),(14485,60024,60024,'OP_EqCreateWidgetCmd',614,1),(14486,60024,60024,'OP_EqDebugPVDCmd',681,1),(14487,60024,60024,'OP_EqDestroyGhostCmd',616,1),(14488,60024,60024,'OP_EqDialogCloseCmd',644,1),(14489,60024,60024,'OP_EqDialogOpenCmd',643,1),(14490,60024,60024,'OP_EqDisplaySpellFailCmd',664,1),(14491,60024,60024,'OP_EqDisplayTextCmd',612,1),(14492,60024,60024,'OP_EqDrawablePathGraphCmd',642,1),(14493,60024,60024,'OP_EqEnableGameEventCmd',674,1),(14494,60024,60024,'OP_EqEnableWindowCmd',676,1),(14495,60024,60024,'OP_EqExamineInfoCmd',659,1),(14496,60024,60024,'OP_EqFactionUpdateCmd',645,1),(14497,60024,60024,'OP_EqFlashWindowCmd',677,1),(14498,60024,60024,'OP_EqGetProbsCmd',685,1),(14499,60024,60024,'OP_EqGroupMemberRemovedCmd',638,1),(14500,60024,60024,'OP_EqGuildBankEventActionCmd',703,1),(14501,60024,60024,'OP_EqGuildBankExamineInfoCmd',704,1),(14502,60024,60024,'OP_EqHearChainEffectCmd',639,1),(14503,60024,60024,'OP_EqHearChatCmd',611,1),(14504,60024,60024,'OP_EqHearCombatCmd',620,1),(14505,60024,60024,'OP_EqHearConsiderCmd',626,1),(14506,60024,60024,'OP_EqHearDeathCmd',637,1),(14507,60024,60024,'OP_EQHearDispellCmd',749,1),(14508,60024,60024,'OP_EqHearDrowningCmd',636,1),(14509,60024,60024,'OP_EqHearHealCmd',686,1),(14510,60024,60024,'OP_EqHearPlayFlavorCmd',679,1),(14511,60024,60024,'OP_EQHearProcCmd',622,1),(14512,60024,60024,'OP_EQHearResEffectCmd',623,1),(14513,60024,60024,'OP_EqHearSpellCastCmd',621,1),(14514,60024,60024,'OP_EqHearSpellFizzleCmd',625,1),(14515,60024,60024,'OP_EqHearSpellInterruptCmd',624,1),(14516,60024,60024,'OP_EqHearSpellNoLandCmd',705,1),(14517,60024,60024,'OP_EQHearThreatCmd',743,1),(14518,60024,60024,'OP_EqHelpPathClearCmd',657,1),(14519,60024,60024,'OP_EqHelpPathCmd',656,1),(14520,60024,60024,'OP_EqInspectPCResultsCmd',641,1),(14521,60024,60024,'OP_EqInstructionWindowCloseCmd',671,1),(14522,60024,60024,'OP_EqInstructionWindowCmd',670,1),(14523,60024,60024,'OP_EqInstructionWindowGoalCmd',672,1),(14524,60024,60024,'OP_EqInstructionWindowTaskCmd',673,1),(14525,60024,60024,'OP_EqJunctionListCmd',662,1),(14526,60024,60024,'OP_EqMapExplorationCmd',695,1),(14527,60024,60024,'OP_EqMentoring',650,1),(14528,60024,60024,'OP_EqPlaySound3DCmd',634,1),(14529,60024,60024,'OP_EqPlaySoundCmd',633,1),(14530,60024,60024,'OP_EqPlayVoiceCmd',635,1),(14531,60024,60024,'OP_EqQuestGroupCmd',652,1),(14532,60024,60024,'OP_EqQuestionnaireCmd',683,1),(14533,60024,60024,'OP_EqQuestJournalReplyCmd',651,1),(14534,60024,60024,'OP_EqQuestJournalUpdateCmd',649,1),(14535,60024,60024,'OP_EqReceiveOfferCmd',640,1),(14536,60024,60024,'OP_EqResurrectedCmd',667,1),(14537,60024,60024,'OP_EqSetControlGhostCmd',618,1),(14538,60024,60024,'OP_EqSetDebugPathPointsCmd',629,1),(14539,60024,60024,'OP_EqSetDefaultVerbCmd',669,1),(14540,60024,60024,'OP_EqSetPOVGhostCmd',619,1),(14541,60024,60024,'OP_EqShowBookCmd',682,1),(14542,60024,60024,'OP_EqShowDeathWindowCmd',663,1),(14543,60024,60024,'OP_EqShowWindowCmd',675,1),(14544,60024,60024,'OP_EqSpellCastEndCmd',666,1),(14545,60024,60024,'OP_EqSpellCastStartCmd',665,1),(14546,60024,60024,'OP_EqSpellMoveToRangeAndRetryCmd',697,1),(14547,60024,60024,'OP_EqStartBrokerCmd',694,1),(14548,60024,60024,'OP_EqStateCmd',632,1),(14549,60024,60024,'OP_EqStoreLogCmd',696,1),(14550,60024,60024,'OP_EqUpdateBankCmd',658,1),(14551,60024,60024,'OP_EqUpdateGhostCmd',617,1),(14552,60024,60024,'OP_EqUpdateLootCmd',661,1),(14553,60024,60024,'OP_EqUpdateMerchantCmd',653,1),(14554,60024,60024,'OP_EqUpdatePlayerMailCmd',698,1),(14555,60024,60024,'OP_EqUpdatePlayerTradeCmd',655,1),(14556,60024,60024,'OP_EqUpdateSignWidgetCmd',680,1),(14557,60024,60024,'OP_EqUpdateStoreCmd',654,1),(14558,60024,60024,'OP_EqUpdateSubClassesCmd',627,1),(14559,60024,60024,'OP_EqUpdateTargetCmd',690,1),(14560,60024,60024,'OP_EqWhoChannelQueryReplyCmd',688,1),(14561,60024,60024,'OP_ESInitMsg',25,1),(14562,60024,60024,'OP_ESLoginRequestMsg',3,1),(14563,60024,60024,'OP_ESReadyForClientsMsg',26,1),(14564,60024,60024,'OP_ESStatusMsg',100,1),(14565,60024,60024,'OP_ESWeatherRequestEndMsg',105,1),(14566,60024,60024,'OP_ESWeatherRequestMsg',104,1),(14567,60024,60024,'OP_ESZoneInstanceStatusMsg',101,1),(14568,60024,60024,'OP_ExamineConsignmentRequestMsg',171,1),(14569,60024,60024,'OP_ExamineConsignmentResponseMsg',172,1),(14570,60024,60024,'OP_ExamineInfoRequestMsg',255,1),(14571,60024,60024,'OP_ExamineItemRequestMsg',195,1),(14572,60024,60024,'OP_ExitHouseMsg',155,1),(14573,60024,60024,'OP_ExpectClientAsCharacterReplyMs',22,1),(14574,60024,60024,'OP_ExpectClientAsCharacterRequest',32,1),(14575,60024,60024,'OP_ExpPurchWindow',728,1),(14576,60024,60024,'OP_FellowshipExpMsg',122,1),(14577,60024,60024,'OP_FlightPathsMsg',413,1),(14578,60024,60024,'OP_GameWorldTimeMsg',43,1),(14579,60024,60024,'OP_PaperdollImage',577,1),(14580,60024,60024,'OP_GetAuctionAssetIDMsg',441,1),(14581,60024,60024,'OP_GetAuctionAssetIDReplyMsg',442,1),(14582,60024,60024,'OP_GetAvatarAccessRequestForCSToo',393,1),(14583,60024,60024,'OP_GetCharacterSerializedReplyMsg',424,1),(14584,60024,60024,'OP_GetCharacterSerializedRequestM',423,1),(14585,60024,60024,'OP_GroupCreatedMsg',88,1),(14586,60024,60024,'OP_GroupDestroyedMsg',89,1),(14587,60024,60024,'OP_GroupLeaderChangedMsg',93,1),(14588,60024,60024,'OP_GroupMemberAddedMsg',90,1),(14589,60024,60024,'OP_GroupMemberRemovedMsg',91,1),(14590,60024,60024,'OP_GroupOptionsMsg',199,1),(14591,60024,60024,'OP_GroupRemovedFromGroupMsg',92,1),(14592,60024,60024,'OP_GroupResendOOZDataMsg',94,1),(14593,60024,60024,'OP_GroupSettingsChangedMsg',95,1),(14594,60024,60024,'OP_GuildBankActionMsg',274,1),(14595,60024,60024,'OP_GuildBankActionResponseMsg',275,1),(14596,60024,60024,'OP_GuildBankEventListMsg',279,1),(14597,60024,60024,'OP_GuildBankItemDetailsRequestMsg',276,1),(14598,60024,60024,'OP_GuildBankItemDetailsResponseMs',277,1),(14599,60024,60024,'OP_GuildBankUpdateMsg',278,1),(14600,60024,60024,'OP_GuildEventActionMsg',269,1),(14601,60024,60024,'OP_GuildEventAddMsg',268,1),(14602,60024,60024,'OP_GuildEventDetailsMsg',272,1),(14603,60024,60024,'OP_GuildEventListMsg',270,1),(14604,60024,60024,'OP_GuildEventMsg',267,1),(14605,60024,60024,'OP_GuildMembershipResponseMsg',357,1),(14606,60024,60024,'OP_GuildRecruiting',708,1),(14607,60024,60024,'OP_GuildRecruitingDetails',709,1),(14608,60024,60024,'OP_GuildRecruitingImage',710,1),(14609,60024,60024,'OP_GuildRecruitingMemberInfo',707,1),(14610,60024,60024,'OP_GuildsayMsg',121,1),(14611,60024,60024,'OP_GuildStatusUpdate',701,1),(14612,60024,60024,'OP_GuildUpdateMsg',124,1),(14613,60024,60024,'OP_HeritageMsg',10001,1),(14614,60024,60024,'OP_HideIllusionsMsg',194,1),(14615,60024,60024,'OP_HouseAccessRemoveMsg',158,1),(14616,60024,60024,'OP_HouseAccessSetMsg',157,1),(14617,60024,60024,'OP_HouseCustomizationScreenMsg',166,1),(14618,60024,60024,'OP_HouseDefaultAccessSetMsg',156,1),(14619,60024,60024,'OP_HouseDeletedRemotelyMsg',142,1),(14620,60024,60024,'OP_HouseItemsList',484,1),(14621,60024,60024,'OP_HousingDataChangedMsg',427,1),(14622,60024,60024,'OP_HousingRestoreMsg',428,1),(14623,60024,60024,'OP_InspectPlayerMsg',363,1),(14624,60024,60024,'OP_InspectPlayerRequestMsg',450,1),(14625,60024,60024,'OP_InviteRequestMsg',447,1),(14626,60024,60024,'OP_InviteResponseMsg',448,1),(14627,60024,60024,'OP_InviteTargetResponseMsg',449,1),(14628,60024,60024,'OP_JoinGuildNotifyMsg',359,1),(14629,60024,60024,'OP_JournalQuestStoryline',750,1),(14630,60024,60024,'OP_KeymapDataMsg',177,1),(14631,60024,60024,'OP_KeymapLoadMsg',175,1),(14632,60024,60024,'OP_KeymapNoneMsg',176,1),(14633,60024,60024,'OP_KeymapSaveMsg',178,1),(14634,60024,60024,'OP_KnowledgebaseRequestMsg',227,1),(14635,60024,60024,'OP_KnowledgebaseResponseMsg',228,1),(14636,60024,60024,'OP_KnowledgeWindowSlotMappingMsg',369,1),(14637,60024,60024,'OP_KnownLanguagesMsg',238,1),(14638,60024,60024,'OP_Launchpad',575,1),(14639,60024,60024,'OP_LeaveGuildNotifyMsg',358,1),(14640,60024,60024,'OP_LevelChangedMsg',261,1),(14641,60024,60024,'OP_LFGGroupSearch',504,1),(14642,60024,60024,'OP_LFGUpdateMsg',518,1),(14643,60024,60024,'OP_LikeOption',136,1),(14644,60024,60024,'OP_LoadCalendarEvents',578,1),(14645,60024,60024,'OP_LoadWelcomeWindow',560,1),(14646,60024,60024,'OP_LoginByNumRequestMsg',1,1),(14647,60024,60024,'OP_LoginReplyMsg',4,1),(14648,60024,60024,'OP_LoginRequestMsg',0,1),(14649,60024,60024,'OP_LootItemsRequestMsg',185,1),(14650,60024,60024,'OP_Lottery',706,1),(14651,60024,60024,'OP_LSCheckAcctLockMsg',204,1),(14652,60024,60024,'OP_LsClientAlertlogReplyMsg',242,1),(14653,60024,60024,'OP_LsClientBaselogReplyMsg',240,1),(14654,60024,60024,'OP_LsClientCrashlogReplyMsg',241,1),(14655,60024,60024,'OP_LsClientVerifylogReplyMsg',243,1),(14656,60024,60024,'OP_LsRequestClientCrashLogMsg',239,1),(14657,60024,60024,'OP_LSServerLockMsg',365,1),(14658,60024,60024,'OP_MacroInitMsg',258,1),(14659,60024,60024,'OP_MacroUpdateMsg',259,1),(14660,60024,60024,'OP_MailCommitSendMessageMsg',344,1),(14661,60024,60024,'OP_MailDeleteMessageMsg',340,1),(14662,60024,60024,'OP_MailEventNotificationMsg',411,1),(14663,60024,60024,'OP_MailGetHeadersReplyMsg',341,1),(14664,60024,60024,'OP_MailGetMessageMsg',338,1),(14665,60024,60024,'OP_MailGetMessageReplyMsg',342,1),(14666,60024,60024,'OP_MailRemoveAttachFromMailMsg',346,1),(14667,60024,60024,'OP_MailSendMessageMsg',339,1),(14668,60024,60024,'OP_MailSendMessageReplyMsg',343,1),(14669,60024,60024,'OP_MailSendSystemMessageMsg',345,1),(14670,60024,60024,'OP_MakeGroupLeaderMsg',87,1),(14671,60024,60024,'OP_MapFogDataInitMsg',395,1),(14672,60024,60024,'OP_MapFogDataUpdateMsg',396,1),(14673,60024,60024,'OP_MapRequest',521,1),(14674,60024,60024,'OP_MarketAddFundsReply',529,1),(14675,60024,60024,'OP_MarketAddFundsRequest',528,1),(14676,60024,60024,'OP_MarketFundsUpdate',526,1),(14677,60024,60024,'OP_MarketPlaceItems',537,1),(14678,60024,60024,'OP_MarketPlacePrices',532,1),(14679,60024,60024,'OP_MarketPurchase',531,1),(14680,60024,60024,'OP_MentorPopup',558,1),(14681,60024,60024,'OP_MercHireWindow',753,1),(14682,60024,60024,'OP_MercUnknown',754,1),(14683,60024,60024,'OP_MigrateBoatTransportMsg',252,1),(14684,60024,60024,'OP_MigrateBoatTransportReplyMsg',253,1),(14685,60024,60024,'OP_MigrateClientToZoneReplyMsg',82,1),(14686,60024,60024,'OP_MigrateClientToZoneRequestMsg',81,1),(14687,60024,60024,'OP_ModifyGuildMsg',266,1),(14688,60024,60024,'OP_MonitorCharacterListMsg',56,1),(14689,60024,60024,'OP_MonitorCharacterListRequestMsg',57,1),(14690,60024,60024,'OP_MonitorReplyMsg',55,1),(14691,60024,60024,'OP_MOTDMsg',44,1),(14692,60024,60024,'OP_MoveableObjectPlacementCriteri',160,1),(14693,60024,60024,'OP_MoveLogUpdateMsg',400,1),(14694,60024,60024,'OP_NotifyApprenticeStoppedMentori',408,1),(14695,60024,60024,'OP_OfferQuestMsg',401,1),(14696,60024,60024,'OP_OnscreenMsgMsg',264,1),(14697,60024,60024,'OP_OpenCharCust',561,1),(14698,60024,60024,'OP_OutOfZoneMemberDataMsg',96,1),(14699,60024,60024,'OP_PayHouseUpkeepMsg',159,1),(14700,60024,60024,'OP_PerformCameraShakeMsg',214,1),(14701,60024,60024,'OP_PerformPlayerKnockbackMsg',213,1),(14702,60024,60024,'OP_PetOptions',201,1),(14703,60024,60024,'OP_PetOptionsResponse',581,1),(14704,60024,60024,'OP_PlayCharacterReplyMsg',19,1),(14705,60024,60024,'OP_PlayCharacterRequestMsg',18,1),(14706,60024,60024,'OP_PlayerHouseAccessUpdateMsg',147,1),(14707,60024,60024,'OP_PlayerHouseBaseScreenMsg',145,1),(14708,60024,60024,'OP_PlayerHouseCloseUIMsg',149,1),(14709,60024,60024,'OP_PlayerHouseDisplayStatusMsg',148,1),(14710,60024,60024,'OP_PlayerHousePurchaseScreenMsg',146,1),(14711,60024,60024,'OP_PlayerMadeInstances',140,1),(14712,60024,60024,'OP_PlayerMadeInstancesScreen',139,1),(14713,60024,60024,'OP_PlayerPollAnswer',557,1),(14714,60024,60024,'OP_PlayerPollPopup',556,1),(14715,60024,60024,'OP_PlayLon',511,1),(14716,60024,60024,'OP_PointOfInterest',732,1),(14717,60024,60024,'OP_PointOfInterest2',733,1),(14718,60024,60024,'OP_PopulateSkillMapsMsg',215,1),(14719,60024,60024,'OP_PositionBoatTransportMsg',251,1),(14720,60024,60024,'OP_PositionMoveableObject',162,1),(14721,60024,60024,'OP_PostPossessionMsg',454,1),(14722,60024,60024,'OP_PredictionUpdateMsg',37,1),(14723,60024,60024,'OP_PrePossessionMsg',453,1),(14724,60024,60024,'OP_PromoFlagsDetailsMsg',374,1),(14725,60024,60024,'OP_PublishHouse',138,1),(14726,60024,60024,'OP_PurchaseConsignmentLoreCheckRe',407,1),(14727,60024,60024,'OP_PurchaseConsignmentRequestMsg',128,1),(14728,60024,60024,'OP_QueAllBgSolo',564,1),(14729,60024,60024,'OP_QuestionnaireMsg',260,1),(14730,60024,60024,'OP_QuestJournalInspectMsg',114,1),(14731,60024,60024,'OP_QuestJournalOpenMsg',113,1),(14732,60024,60024,'OP_QuestJournalSetVisibleMsg',115,1),(14733,60024,60024,'OP_QuestJournalWaypointMsg',116,1),(14734,60024,60024,'OP_QuestReward',320,1),(14735,60024,60024,'OP_QuickbarInitMsg',256,1),(14736,60024,60024,'OP_QuickbarUpdateMsg',257,1),(14737,60024,60024,'OP_RaceRestrictionMsg',439,1),(14738,60024,60024,'OP_ReadBookPageMsg',196,1),(14739,60024,60024,'OP_ReadyForTakeOffMsg',192,1),(14740,60024,60024,'OP_ReadyToZoneMsg',84,1),(14741,60024,60024,'OP_RecipeBook',538,1),(14742,60024,60024,'OP_RecipeDetailsMsg',72,1),(14743,60024,60024,'OP_RecipeList',744,1),(14744,60024,60024,'OP_RecipeListUnknown',593,1),(14745,60024,60024,'OP_RelinquishHouseMsg',153,1),(14746,60024,60024,'OP_ReloadLocalizedTxtMsg',355,1),(14747,60024,60024,'OP_RemoteCmdMsg',42,1),(14748,60024,60024,'OP_RemoveClientFromGroupMsg',85,1),(14749,60024,60024,'OP_RemoveConcentrationMsg',112,1),(14750,60024,60024,'OP_RemoveGroupFromGroupMsg',86,1),(14751,60024,60024,'OP_RemoveSpellEffectMsg',111,1),(14752,60024,60024,'OP_RenameGuildMsg',282,1),(14753,60024,60024,'OP_ReplaceableSubMeshesMsg',165,1),(14754,60024,60024,'OP_ReportMsg',380,1),(14755,60024,60024,'OP_RequestCampMsg',50,1),(14756,60024,60024,'OP_RequestGuildBankEventDetailsMs',280,1),(14757,60024,60024,'OP_RequestGuildEventDetailsMsg',271,1),(14758,60024,60024,'OP_RequestGuildInfoMsg',273,1),(14759,60024,60024,'OP_RequestGuildMembershipMsg',356,1),(14760,60024,60024,'OP_RequestHelpRepathMsg',206,1),(14761,60024,60024,'OP_RequestRecipeDetailsMsg',71,1),(14762,60024,60024,'OP_RequestTargetLocMsg',207,1),(14763,60024,60024,'OP_Research',745,1),(14764,60024,60024,'OP_ResendWorldChannelsMsg',443,1),(14765,60024,60024,'OP_ReskinCharacterRequestMsg',15,1),(14766,60024,60024,'OP_RestartZoneMsg',412,1),(14767,60024,60024,'OP_RewardPackMsg',281,1),(14768,60024,60024,'OP_SatMsg',189,1),(14769,60024,60024,'OP_SavageBarInitMsg',580,1),(14770,60024,60024,'OP_SelectZoneTeleporterDestinatio',354,1),(14771,60024,60024,'OP_SendLatestRequestMsg',97,1),(14772,60024,60024,'OP_ServerPlayCharacterReplyMsg',24,1),(14773,60024,60024,'OP_ServerPlayCharacterRequestMsg',23,1),(14774,60024,60024,'OP_SetInstanceDisplayNameMsg',440,1),(14775,60024,60024,'OP_SetRemoteCmdsMsg',41,1),(14776,60024,60024,'OP_SetSocialMsg',99,1),(14777,60024,60024,'OP_ShaderCustomizationMsg',164,1),(14778,60024,60024,'OP_ShowCreateFromRecipeUIMsg',219,1),(14779,60024,60024,'OP_ShowIllusionsMsg',193,1),(14780,60024,60024,'OP_ShowItemCreationProcessUIMsg',223,1),(14781,60024,60024,'OP_ShowRecipeBookMsg',226,1),(14782,60024,60024,'OP_ShowZoneTeleporterDestinations',353,1),(14783,60024,60024,'OP_SitMsg',187,1),(14784,60024,60024,'OP_SkillInfoRequest',514,1),(14785,60024,60024,'OP_SkillInfoResponse',515,1),(14786,60024,60024,'OP_SOEAllAccess',609,1),(14787,60024,60024,'OP_SpellGainedMsg',262,1),(14788,60024,60024,'OP_StandMsg',188,1),(14789,60024,60024,'OP_StoodMsg',190,1),(14790,60024,60024,'OP_StopItemCreationMsg',222,1),(14791,60024,60024,'OP_StoppedLootingMsg',186,1),(14792,60024,60024,'OP_StopTrackingMsg',391,1),(14793,60024,60024,'OP_SubmitCharCust',562,1),(14794,60024,60024,'OP_SupplyDepot',742,1),(14795,60024,60024,'OP_SysClient',218,1),(14796,60024,60024,'OP_TeleportWithinZoneMsg',79,1),(14797,60024,60024,'OP_TeleportWithinZoneNoReloadMsg',80,1),(14798,60024,60024,'OP_TintWidgetsMsg',170,1),(14799,60024,60024,'OP_TitleUpdateMsg',384,1),(14800,60024,60024,'OP_TrackingUpdateMsg',389,1),(14801,60024,60024,'OP_TradeskillList',711,1),(14802,60024,60024,'OP_TraitsList',734,1),(14803,60024,60024,'OP_UIEvent',527,1),(14804,60024,60024,'OP_UIResetMsg',174,1),(14805,60024,60024,'OP_UISettingsResponseMsg',173,1),(14806,60024,60024,'OP_Unknown',767,1),(14807,60024,60024,'OP_UnknownNpcMsg',373,1),(14808,60024,60024,'OP_UpdateActivePublicZonesMsg',372,1),(14809,60024,60024,'OP_UpdateCharacterSheetMsg',63,1),(14810,60024,60024,'OP_UpdateClientPredFlagsMsg',245,1),(14811,60024,60024,'OP_UpdateDebugRadiiMsg',379,1),(14812,60024,60024,'OP_UpdateGroupMemberDataMsg',388,1),(14813,60024,60024,'OP_UpdateHouseAccessDataMsg',144,1),(14814,60024,60024,'OP_UpdateHouseDataMsg',143,1),(14815,60024,60024,'OP_UpdateInventoryMsg',68,1),(14816,60024,60024,'OP_UpdateItemCreationProcessUIMsg',224,1),(14817,60024,60024,'OP_UpdateMotdMsg',208,1),(14818,60024,60024,'OP_UpdateOpportunityMsg',75,1),(14819,60024,60024,'OP_UpdatePositionMsg',39,1),(14820,60024,60024,'OP_UpdateRaidMsg',381,1),(14821,60024,60024,'OP_UpdateRecipeBookMsg',70,1),(14822,60024,60024,'OP_UpdateSkillBookMsg',73,1),(14823,60024,60024,'OP_UpdateSkillsMsg',74,1),(14824,60024,60024,'OP_UpdateSpellBookMsg',66,1),(14825,60024,60024,'OP_UpdateTargetLocMsg',62,1),(14826,60024,60024,'OP_UpdateTargetMsg',61,1),(14827,60024,60024,'OP_UpdateTitleCmd',494,1),(14828,60024,60024,'OP_UseAdornment',722,1),(14829,60024,60024,'OP_VideoUploaded',579,1),(14830,60024,60024,'OP_VoiceChatChannel',520,1),(14831,60024,60024,'OP_VoiceChatServer',738,1),(14832,60024,60024,'OP_WaypointReplyMsg',349,1),(14833,60024,60024,'OP_WaypointRequestMsg',348,1),(14834,60024,60024,'OP_WaypointSelectMsg',350,1),(14835,60024,60024,'OP_WaypointUpdateMsg',351,1),(14836,60024,60024,'OP_Weakness',583,1),(14837,60024,60024,'OP_WhoQueryReplyMsg',54,1),(14838,60024,60024,'OP_WhoQueryRequestMsg',53,1),(14839,60024,60024,'OP_WorldDataChangeMsg',410,1),(14840,60024,60024,'OP_WorldDataUpdateMsg',237,1),(14841,60024,60024,'OP_WorldListMsg',8,1),(14842,60024,60024,'OP_WorldPingMsg',399,1),(14843,60024,60024,'OP_WorldShutdownUpdateMsg',403,1),(14844,60024,60024,'OP_WorldStatusChangeMsg',6,1),(14845,60024,60024,'OP_WorldTravelAvail',572,1),(14846,60024,60024,'OP_WSAcctLockStatusMsg',205,1),(14847,60024,60024,'OP_WSCreateCharacterReplyMsg',14,1),(14848,60024,60024,'OP_WSCreateCharacterRequestMsg',13,1),(14849,60024,60024,'OP_WSLoginRequestMsg',2,1),(14850,60024,60024,'OP_WSServerHideMsg',366,1),(14851,60024,60024,'OP_WSServerLockMsg',364,1),(14852,60024,60024,'OP_WSStatusReplyMsg',5,1),(14853,60024,60024,'OP_ZoneBgInstanceList',568,1),(14854,60024,60024,'OP_ZoneInfoMsg',33,1),(14855,60024,60024,'OP_ZoneInstanceCreateReplyMsg',30,1),(14856,60024,60024,'OP_ZoneInstanceDestroyedMsg',31,1),(14857,60024,60024,'OP_ZoneMOTDMsg',45,1),(14858,60024,60024,'OP_ZonesStatusMsg',103,1),(14859,60024,60024,'OP_ZonesStatusRequestMsg',102,1),(14860,60024,60024,'OP_ZoneToFriendReplyMsg',284,1),(14861,60024,60024,'OP_ZoneToFriendRequestMsg',283,1),(15327,60036,60069,'OP_AchievementUpdateMsg',749,1),(15328,60036,60069,'OP_AddSocialStructureStandingMsg',250,1),(15329,60036,60069,'OP_AdvancementRequestMsg',395,1),(15330,60036,60069,'OP_AdventureList',489,1),(15331,60036,60069,'OP_AFKUpdateMsg',371,1),(15332,60036,60069,'OP_AfterInvSpellUpdate',69,1),(15333,60036,60069,'OP_AllCharactersDescReplyMsg',10,1),(15334,60036,60069,'OP_AllCharactersDescRequestMsg',9,1),(15335,60036,60069,'OP_AllWSDescRequestMsg',7,1),(15336,60036,60069,'OP_AnonUpdateMsg',372,1),(15337,60036,60069,'OP_ArenaCreate',457,1),(15338,60036,60069,'OP_ArenaGameTypesMsg',446,1),(15339,60036,60069,'OP_ArenaList',458,1),(15340,60036,60069,'OP_ArenaWindow',466,1),(15341,60036,60069,'OP_AttackAllowed',501,1),(15342,60036,60069,'OP_AttackNotAllowed',502,1),(15343,60036,60069,'OP_AuctionAbortMsg',437,1),(15344,60036,60069,'OP_AuctionCharacter',434,1),(15345,60036,60069,'OP_AuctionCharacterReply',435,1),(15346,60036,60069,'OP_AuctionCoin',432,1),(15347,60036,60069,'OP_AuctionCoinReply',433,1),(15348,60036,60069,'OP_AuctionCommitMsg',436,1),(15349,60036,60069,'OP_AuctionItem',430,1),(15350,60036,60069,'OP_AuctionItemReply',431,1),(15351,60036,60069,'OP_AuditAuctionEventMsg',447,1),(15352,60036,60069,'OP_AvatarCreatedMsg',46,1),(15353,60036,60069,'OP_AvatarDestroyedMsg',47,1),(15354,60036,60069,'OP_AvatarUpdateMsg',361,1),(15355,60036,60069,'OP_BadLanguageFilter',520,1),(15356,60036,60069,'OP_BagOptions',503,1),(15357,60036,60069,'OP_BeginItemCreationMsg',221,1),(15358,60036,60069,'OP_BeginTrackingMsg',391,1),(15359,60036,60069,'OP_BioUpdateMsg',363,1),(15360,60036,60069,'OP_BrokerAddBag',293,1),(15361,60036,60069,'OP_BrokerRemoveBag',294,1),(15362,60036,60069,'OP_BrokerSellList',692,1),(15363,60036,60069,'OP_BuyPlayerHouseMsg',150,1),(15364,60036,60069,'OP_BuyPlayerHouseTintMsg',151,1),(15365,60036,60069,'OP_CampAbortedMsg',52,1),(15366,60036,60069,'OP_CampClientMsg',388,1),(15367,60036,60069,'OP_CampStartedMsg',51,1),(15368,60036,60069,'OP_CancelCreateFromRecipeMsg',220,1),(15369,60036,60069,'OP_CancelledFeignMsg',216,1),(15370,60036,60069,'OP_CancelMoveObjectModeMsg',163,1),(15371,60036,60069,'OP_CancelSpellCast',490,1),(15372,60036,60069,'OP_ChangeServerControlFlagMsg',247,1),(15373,60036,60069,'OP_ChangeZoneMsg',77,1),(15374,60036,60069,'OP_CharacterAchievements',748,1),(15375,60036,60069,'OP_CharacterCreatedDungeons',552,1),(15376,60036,60069,'OP_CharacterCurrency',747,1),(15377,60036,60069,'OP_CharacterHousingList',508,1),(15378,60036,60069,'OP_CharacterLinkdeadMsg',415,1),(15379,60036,60069,'OP_CharacterMerc',65,1),(15380,60036,60069,'OP_CharacterMounts',585,1),(15381,60036,60069,'OP_CharacterPet',64,1),(15382,60036,60069,'OP_CharNameChangedMsg',352,1),(15383,60036,60069,'OP_CharRenamed',713,1),(15384,60036,60069,'OP_CharTransferCommitReplyMsg',423,1),(15385,60036,60069,'OP_CharTransferCommitRequestMsg',421,1),(15386,60036,60069,'OP_CharTransferReplyMsg',419,1),(15387,60036,60069,'OP_CharTransferRequestMsg',418,1),(15388,60036,60069,'OP_CharTransferRollbackReplyMsg',422,1),(15389,60036,60069,'OP_CharTransferRollbackRequestMsg',420,1),(15390,60036,60069,'OP_CharTransferStartReplyMsg',417,1),(15391,60036,60069,'OP_CharTransferStartRequestMsg',416,1),(15392,60036,60069,'OP_CharTransferValidateReplyMsg',439,1),(15393,60036,60069,'OP_CharTransferValidateRequestMsg',438,1),(15394,60036,60069,'OP_ChatCreateChannelMsg',286,1),(15395,60036,60069,'OP_ChatFiltersMsg',335,1),(15396,60036,60069,'OP_ChatJoinChannelMsg',287,1),(15397,60036,60069,'OP_ChatLeaveChannelMsg',289,1),(15398,60036,60069,'OP_ChatRelationshipUpdateMsg',184,1),(15399,60036,60069,'OP_ChatSendFriendsMsg',296,1),(15400,60036,60069,'OP_ChatSendIgnoresMsg',297,1),(15401,60036,60069,'OP_ChatTellChannelMsg',290,1),(15402,60036,60069,'OP_ChatTellUserMsg',291,1),(15403,60036,60069,'OP_ChatToggleFriendMsg',292,1),(15404,60036,60069,'OP_ChatToggleIgnoreMsg',295,1),(15405,60036,60069,'OP_ChatWhoChannelMsg',288,1),(15406,60036,60069,'OP_ClearDataMsg',98,1),(15407,60036,60069,'OP_ClearForLandingMsg',492,1),(15408,60036,60069,'OP_ClearForTakeOffMsg',191,1),(15409,60036,60069,'OP_ClientCmdMsg',58,1),(15410,60036,60069,'OP_ClientFellMsg',386,1),(15411,60036,60069,'OP_ClientIdleBeginMsg',406,1),(15412,60036,60069,'OP_ClientIdleEndMsg',407,1),(15413,60036,60069,'OP_ClientInDeathRegionMsg',387,1),(15414,60036,60069,'OP_ClientTeleportRequestMsg',78,1),(15415,60036,60069,'OP_ClientTeleportToLocationMsg',245,1),(15416,60036,60069,'OP_CloseGroupInviteWindowMsg',398,1),(15417,60036,60069,'OP_CollectAllHouseItemsMsg',152,1),(15418,60036,60069,'OP_ConsignItemRequestMsg',126,1),(15419,60036,60069,'OP_ConsignItemResponseMsg',127,1),(15420,60036,60069,'OP_ConsignmentCloseStoreMsg',125,1),(15421,60036,60069,'OP_ConsignRemoveItemsMsg',379,1),(15422,60036,60069,'OP_ConsignViewCreateMsg',376,1),(15423,60036,60069,'OP_ConsignViewGetPageMsg',377,1),(15424,60036,60069,'OP_ConsignViewReleaseMsg',378,1),(15425,60036,60069,'OP_ConsignViewSortMsg',384,1),(15426,60036,60069,'OP_CorruptedClientMsg',410,1),(15427,60036,60069,'OP_CreateBoatTransportsMsg',251,1),(15428,60036,60069,'OP_CreateCharacterDungeon',548,1),(15429,60036,60069,'OP_CreateCharacterReplyMsg',12,1),(15430,60036,60069,'OP_CreateCharacterRequestMsg',11,1),(15431,60036,60069,'OP_CreateCharFromCBBReplyMsg',427,1),(15432,60036,60069,'OP_CreateCharFromCBBRequestMsg',426,1),(15433,60036,60069,'OP_CreateGuildReplyMsg',120,1),(15434,60036,60069,'OP_CreateGuildRequestMsg',119,1),(15435,60036,60069,'OP_CreateZoneInstanceMsg',29,1),(15436,60036,60069,'OP_CsCategoryRequestMsg',368,1),(15437,60036,60069,'OP_CsCategoryResponseMsg',369,1),(15438,60036,60069,'OP_CSTicketAddCommentMsg',234,1),(15439,60036,60069,'OP_CSTicketChangeNotificationMsg',236,1),(15440,60036,60069,'OP_CSTicketCommentRequestMsg',231,1),(15441,60036,60069,'OP_CSTicketCommentResponseMsg',232,1),(15442,60036,60069,'OP_CSTicketCreateMsg',233,1),(15443,60036,60069,'OP_CSTicketDeleteMsg',235,1),(15444,60036,60069,'OP_CSTicketHeaderRequestMsg',229,1),(15445,60036,60069,'OP_CSTicketInfoMsg',230,1),(15446,60036,60069,'OP_CSToolAccessResponseMsg',389,1),(15447,60036,60069,'OP_CSToolsRequestMsg',248,1),(15448,60036,60069,'OP_CSToolsResponseMsg',249,1),(15449,60036,60069,'OP_CurrentPet',486,1),(15450,60036,60069,'OP_CustomizationPurchaseRequestMs',167,1),(15451,60036,60069,'OP_CustomizationReplyMsg',169,1),(15452,60036,60069,'OP_CustomizationSetRequestMsg',168,1),(15453,60036,60069,'OP_CustomizeHouseDisplay',738,1),(15454,60036,60069,'OP_DailyObjectives',598,1),(15455,60036,60069,'OP_DefaultGroupOptionsMsg',198,1),(15456,60036,60069,'OP_DefaultGroupOptionsRequestMsg',197,1),(15457,60036,60069,'OP_DeleteCharacterReplyMsg',17,1),(15458,60036,60069,'OP_DeleteCharacterRequestMsg',16,1),(15459,60036,60069,'OP_DeleteGuildMsg',123,1),(15460,60036,60069,'OP_DestUpdateReq',210,1),(15461,60036,60069,'OP_DialogCloseMsg',110,1),(15462,60036,60069,'OP_DialogSelectMsg',109,1),(15463,60036,60069,'OP_DispatchClientCmdMsg',60,1),(15464,60036,60069,'OP_DispatchESMsg',59,1),(15465,60036,60069,'OP_DispatchMsg',452,1),(15466,60036,60069,'OP_DispatchSpellCmdMsg',179,1),(15467,60036,60069,'OP_DisplayDebugNLLPointsMsg',255,1),(15468,60036,60069,'OP_DisplayEventMsg',453,1),(15469,60036,60069,'OP_DisplayExchangeScreenMsg',445,1),(15470,60036,60069,'OP_DisplayGroupOptionsScreenMsg',200,1),(15471,60036,60069,'OP_DisplayInnVisitScreenMsg',202,1),(15472,60036,60069,'OP_DisplayMailScreenMsg',405,1),(15473,60036,60069,'OP_DisplayTSEventReactionMsg',225,1),(15474,60036,60069,'OP_DisplayWarningMsg',266,1),(15475,60036,60069,'OP_DoneLoadingEntityResourcesMsg',36,1),(15476,60036,60069,'OP_DoneLoadingZoneResourcesMsg',34,1),(15477,60036,60069,'OP_DoneSendingInitialEntitiesMsg',35,1),(15478,60036,60069,'OP_DressingRoom',511,1),(15479,60036,60069,'OP_DumpSchedulerMsg',203,1),(15480,60036,60069,'OP_DungeonMakerEnter',549,1),(15481,60036,60069,'OP_DungeonMakerItemRequest',551,1),(15482,60036,60069,'OP_DungeonMakerItemResponse',583,1),(15483,60036,60069,'OP_DungeonMakerToolboxList',553,1),(15484,60036,60069,'OP_DungeonMakerUnknown',554,1),(15485,60036,60069,'OP_DungeonMakerUnknown1',555,1),(15486,60036,60069,'OP_DungeonPlayAsAvatarList',752,1),(15487,60036,60069,'OP_DungeonPlayAsAvatarSelected',753,1),(15488,60036,60069,'OP_EncounterBrokenMsg',264,1),(15489,60036,60069,'OP_EnterHouseMsg',154,1),(15490,60036,60069,'OP_EnterMoveObjectModeMsg',161,1),(15491,60036,60069,'OP_EntityVerbsReplyMsg',181,1),(15492,60036,60069,'OP_EntityVerbsRequestMsg',180,1),(15493,60036,60069,'OP_EntityVerbsVerbMsg',182,1),(15494,60036,60069,'OP_EqArenaResultsCmd',703,1),(15495,60036,60069,'OP_EqAvailWorldChannelsCmd',690,1),(15496,60036,60069,'OP_EqBetaCopyRequest',609,1),(15497,60036,60069,'OP_EqCannedEmoteCmd',632,1),(15498,60036,60069,'OP_EqChatChannelUpdateCmd',688,1),(15499,60036,60069,'OP_EqChoiceWinCmd',669,1),(15500,60036,60069,'OP_EqCloseWindowCmd',661,1),(15501,60036,60069,'OP_EqCollectionFilterCmd',648,1),(15502,60036,60069,'OP_EqCollectionItemCmd',649,1),(15503,60036,60069,'OP_EqCollectionUpdateCmd',647,1),(15504,60036,60069,'OP_EqConsignmentItemsCmd',693,1),(15505,60036,60069,'OP_EqCreateGhostCmd',614,1),(15506,60036,60069,'OP_EqCreateListBoxCmd',629,1),(15507,60036,60069,'OP_EqCreateSignWidgetCmd',616,1),(15508,60036,60069,'OP_EqCreateWidgetCmd',615,1),(15509,60036,60069,'OP_EqDebugPVDCmd',682,1),(15510,60036,60069,'OP_EqDestroyGhostCmd',617,1),(15511,60036,60069,'OP_EqDialogCloseCmd',645,1),(15512,60036,60069,'OP_EqDialogOpenCmd',644,1),(15513,60036,60069,'OP_EqDisplaySpellFailCmd',665,1),(15514,60036,60069,'OP_EqDisplayTextCmd',613,1),(15515,60036,60069,'OP_EqDrawablePathGraphCmd',643,1),(15516,60036,60069,'OP_EqEnableGameEventCmd',675,1),(15517,60036,60069,'OP_EqEnableWindowCmd',677,1),(15518,60036,60069,'OP_EqExamineInfoCmd',660,1),(15519,60036,60069,'OP_EqFactionUpdateCmd',646,1),(15520,60036,60069,'OP_EqFlashWindowCmd',678,1),(15521,60036,60069,'OP_EqGetProbsCmd',686,1),(15522,60036,60069,'OP_EqGroupMemberRemovedCmd',639,1),(15523,60036,60069,'OP_EqGuildBankEventActionCmd',704,1),(15524,60036,60069,'OP_EqGuildBankExamineInfoCmd',705,1),(15525,60036,60069,'OP_EqHearChainEffectCmd',640,1),(15526,60036,60069,'OP_EqHearChatCmd',612,1),(15527,60036,60069,'OP_EqHearCombatCmd',621,1),(15528,60036,60069,'OP_EqHearConsiderCmd',627,1),(15529,60036,60069,'OP_EqHearDeathCmd',638,1),(15530,60036,60069,'OP_EQHearDispellCmd',750,1),(15531,60036,60069,'OP_EqHearDrowningCmd',637,1),(15532,60036,60069,'OP_EqHearHealCmd',687,1),(15533,60036,60069,'OP_EqHearPlayFlavorCmd',680,1),(15534,60036,60069,'OP_EQHearProcCmd',623,1),(15535,60036,60069,'OP_EQHearResEffectCmd',624,1),(15536,60036,60069,'OP_EqHearSpellCastCmd',622,1),(15537,60036,60069,'OP_EqHearSpellFizzleCmd',626,1),(15538,60036,60069,'OP_EqHearSpellInterruptCmd',625,1),(15539,60036,60069,'OP_EqHearSpellNoLandCmd',706,1),(15540,60036,60069,'OP_EQHearThreatCmd',744,1),(15541,60036,60069,'OP_EqHelpPathClearCmd',658,1),(15542,60036,60069,'OP_EqHelpPathCmd',657,1),(15543,60036,60069,'OP_EqInspectPCResultsCmd',642,1),(15544,60036,60069,'OP_EqInstructionWindowCloseCmd',672,1),(15545,60036,60069,'OP_EqInstructionWindowCmd',671,1),(15546,60036,60069,'OP_EqInstructionWindowGoalCmd',673,1),(15547,60036,60069,'OP_EqInstructionWindowTaskCmd',674,1),(15548,60036,60069,'OP_EqJunctionListCmd',663,1),(15549,60036,60069,'OP_EqMapExplorationCmd',696,1),(15550,60036,60069,'OP_EqMentoring',651,1),(15551,60036,60069,'OP_EqPlaySound3DCmd',635,1),(15552,60036,60069,'OP_EqPlaySoundCmd',634,1),(15553,60036,60069,'OP_EqPlayVoiceCmd',636,1),(15554,60036,60069,'OP_EqQuestGroupCmd',653,1),(15555,60036,60069,'OP_EqQuestionnaireCmd',684,1),(15556,60036,60069,'OP_EqQuestJournalReplyCmd',652,1),(15557,60036,60069,'OP_EqQuestJournalUpdateCmd',650,1),(15558,60036,60069,'OP_EqReceiveOfferCmd',641,1),(15559,60036,60069,'OP_EqResurrectedCmd',668,1),(15560,60036,60069,'OP_EqSetControlGhostCmd',619,1),(15561,60036,60069,'OP_EqSetDebugPathPointsCmd',630,1),(15562,60036,60069,'OP_EqSetDefaultVerbCmd',670,1),(15563,60036,60069,'OP_EqSetPOVGhostCmd',620,1),(15564,60036,60069,'OP_EqShowBookCmd',683,1),(15565,60036,60069,'OP_EqShowDeathWindowCmd',664,1),(15566,60036,60069,'OP_EqShowWindowCmd',676,1),(15567,60036,60069,'OP_EqSpellCastEndCmd',667,1),(15568,60036,60069,'OP_EqSpellCastStartCmd',666,1),(15569,60036,60069,'OP_EqSpellMoveToRangeAndRetryCmd',698,1),(15570,60036,60069,'OP_EqStartBrokerCmd',695,1),(15571,60036,60069,'OP_EqStateCmd',633,1),(15572,60036,60069,'OP_EqStoreLogCmd',697,1),(15573,60036,60069,'OP_EqUpdateBankCmd',659,1),(15574,60036,60069,'OP_EqUpdateGhostCmd',618,1),(15575,60036,60069,'OP_EqUpdateLootCmd',662,1),(15576,60036,60069,'OP_EqUpdateMerchantCmd',654,1),(15577,60036,60069,'OP_EqUpdatePlayerMailCmd',699,1),(15578,60036,60069,'OP_EqUpdatePlayerTradeCmd',656,1),(15579,60036,60069,'OP_EqUpdateSignWidgetCmd',681,1),(15580,60036,60069,'OP_EqUpdateStoreCmd',655,1),(15581,60036,60069,'OP_EqUpdateSubClassesCmd',628,1),(15582,60036,60069,'OP_EqUpdateTargetCmd',691,1),(15583,60036,60069,'OP_EqWhoChannelQueryReplyCmd',689,1),(15584,60036,60069,'OP_ESInitMsg',25,1),(15585,60036,60069,'OP_ESLoginRequestMsg',3,1),(15586,60036,60069,'OP_ESReadyForClientsMsg',26,1),(15587,60036,60069,'OP_ESStatusMsg',100,1),(15588,60036,60069,'OP_ESWeatherRequestEndMsg',105,1),(15589,60036,60069,'OP_ESWeatherRequestMsg',104,1),(15590,60036,60069,'OP_ESZoneInstanceStatusMsg',101,1),(15591,60036,60069,'OP_ExamineConsignmentRequestMsg',171,1),(15592,60036,60069,'OP_ExamineConsignmentResponseMsg',172,1),(15593,60036,60069,'OP_ExamineInfoRequestMsg',256,1),(15594,60036,60069,'OP_ExamineItemRequestMsg',195,1),(15595,60036,60069,'OP_ExitHouseMsg',155,1),(15596,60036,60069,'OP_ExpectClientAsCharacterReplyMs',22,1),(15597,60036,60069,'OP_ExpectClientAsCharacterRequest',32,1),(15598,60036,60069,'OP_ExpPurchWindow',729,1),(15599,60036,60069,'OP_FellowshipExpMsg',122,1),(15600,60036,60069,'OP_FlightPathsMsg',414,1),(15601,60036,60069,'OP_GameWorldTimeMsg',43,1),(15602,60036,60069,'OP_PaperdollImage',578,1),(15603,60036,60069,'OP_GetAuctionAssetIDMsg',442,1),(15604,60036,60069,'OP_GetAuctionAssetIDReplyMsg',443,1),(15605,60036,60069,'OP_GetAvatarAccessRequestForCSToo',394,1),(15606,60036,60069,'OP_GetCharacterSerializedReplyMsg',425,1),(15607,60036,60069,'OP_GetCharacterSerializedRequestM',424,1),(15608,60036,60069,'OP_GroupCreatedMsg',88,1),(15609,60036,60069,'OP_GroupDestroyedMsg',89,1),(15610,60036,60069,'OP_GroupLeaderChangedMsg',93,1),(15611,60036,60069,'OP_GroupMemberAddedMsg',90,1),(15612,60036,60069,'OP_GroupMemberRemovedMsg',91,1),(15613,60036,60069,'OP_GroupOptionsMsg',199,1),(15614,60036,60069,'OP_GroupRemovedFromGroupMsg',92,1),(15615,60036,60069,'OP_GroupResendOOZDataMsg',94,1),(15616,60036,60069,'OP_GroupSettingsChangedMsg',95,1),(15617,60036,60069,'OP_GuildBankActionMsg',275,1),(15618,60036,60069,'OP_GuildBankActionResponseMsg',276,1),(15619,60036,60069,'OP_GuildBankEventListMsg',280,1),(15620,60036,60069,'OP_GuildBankItemDetailsRequestMsg',277,1),(15621,60036,60069,'OP_GuildBankItemDetailsResponseMs',278,1),(15622,60036,60069,'OP_GuildBankUpdateMsg',279,1),(15623,60036,60069,'OP_GuildEventActionMsg',270,1),(15624,60036,60069,'OP_GuildEventAddMsg',269,1),(15625,60036,60069,'OP_GuildEventDetailsMsg',273,1),(15626,60036,60069,'OP_GuildEventListMsg',271,1),(15627,60036,60069,'OP_GuildEventMsg',268,1),(15628,60036,60069,'OP_GuildMembershipResponseMsg',358,1),(15629,60036,60069,'OP_GuildRecruiting',709,1),(15630,60036,60069,'OP_GuildRecruitingDetails',710,1),(15631,60036,60069,'OP_GuildRecruitingImage',711,1),(15632,60036,60069,'OP_GuildRecruitingMemberInfo',708,1),(15633,60036,60069,'OP_GuildsayMsg',121,1),(15634,60036,60069,'OP_GuildStatusUpdate',702,1),(15635,60036,60069,'OP_GuildUpdateMsg',124,1),(15636,60036,60069,'OP_HeritageMsg',10001,1),(15637,60036,60069,'OP_HideIllusionsMsg',194,1),(15638,60036,60069,'OP_HouseAccessRemoveMsg',158,1),(15639,60036,60069,'OP_HouseAccessSetMsg',157,1),(15640,60036,60069,'OP_HouseCustomizationScreenMsg',166,1),(15641,60036,60069,'OP_HouseDefaultAccessSetMsg',156,1),(15642,60036,60069,'OP_HouseDeletedRemotelyMsg',142,1),(15643,60036,60069,'OP_HouseItemsList',485,1),(15644,60036,60069,'OP_HousingDataChangedMsg',428,1),(15645,60036,60069,'OP_HousingRestoreMsg',429,1),(15646,60036,60069,'OP_InspectPlayerMsg',364,1),(15647,60036,60069,'OP_InspectPlayerRequestMsg',451,1),(15648,60036,60069,'OP_InviteRequestMsg',448,1),(15649,60036,60069,'OP_InviteResponseMsg',449,1),(15650,60036,60069,'OP_InviteTargetResponseMsg',450,1),(15651,60036,60069,'OP_JoinGuildNotifyMsg',360,1),(15652,60036,60069,'OP_JournalQuestStoryline',751,1),(15653,60036,60069,'OP_KeymapDataMsg',177,1),(15654,60036,60069,'OP_KeymapLoadMsg',175,1),(15655,60036,60069,'OP_KeymapNoneMsg',176,1),(15656,60036,60069,'OP_KeymapSaveMsg',178,1),(15657,60036,60069,'OP_KnowledgebaseRequestMsg',227,1),(15658,60036,60069,'OP_KnowledgebaseResponseMsg',228,1),(15659,60036,60069,'OP_KnowledgeWindowSlotMappingMsg',370,1),(15660,60036,60069,'OP_KnownLanguagesMsg',239,1),(15661,60036,60069,'OP_Launchpad',576,1),(15662,60036,60069,'OP_LeaveGuildNotifyMsg',359,1),(15663,60036,60069,'OP_LevelChangedMsg',262,1),(15664,60036,60069,'OP_LFGGroupSearch',505,1),(15665,60036,60069,'OP_LFGUpdateMsg',519,1),(15666,60036,60069,'OP_LikeOption',136,1),(15667,60036,60069,'OP_LoadCalendarEvents',579,1),(15668,60036,60069,'OP_LoadWelcomeWindow',561,1),(15669,60036,60069,'OP_LoginByNumRequestMsg',1,1),(15670,60036,60069,'OP_LoginReplyMsg',4,1),(15671,60036,60069,'OP_LoginRequestMsg',0,1),(15672,60036,60069,'OP_LootItemsRequestMsg',185,1),(15673,60036,60069,'OP_Lottery',707,1),(15674,60036,60069,'OP_LSCheckAcctLockMsg',204,1),(15675,60036,60069,'OP_LsClientAlertlogReplyMsg',243,1),(15676,60036,60069,'OP_LsClientBaselogReplyMsg',241,1),(15677,60036,60069,'OP_LsClientCrashlogReplyMsg',242,1),(15678,60036,60069,'OP_LsClientVerifylogReplyMsg',244,1),(15679,60036,60069,'OP_LsRequestClientCrashLogMsg',240,1),(15680,60036,60069,'OP_LSServerLockMsg',366,1),(15681,60036,60069,'OP_MacroInitMsg',259,1),(15682,60036,60069,'OP_MacroUpdateMsg',260,1),(15683,60036,60069,'OP_MailCommitSendMessageMsg',344,1),(15684,60036,60069,'OP_MailDeleteMessageMsg',340,1),(15685,60036,60069,'OP_MailEventNotificationMsg',412,1),(15686,60036,60069,'OP_MailGetHeadersReplyMsg',341,1),(15687,60036,60069,'OP_MailGetMessageMsg',338,1),(15688,60036,60069,'OP_MailGetMessageReplyMsg',342,1),(15689,60036,60069,'OP_MailRemoveAttachFromMailMsg',346,1),(15690,60036,60069,'OP_MailSendMessageMsg',339,1),(15691,60036,60069,'OP_MailSendMessageReplyMsg',343,1),(15692,60036,60069,'OP_MailSendSystemMessageMsg',345,1),(15693,60036,60069,'OP_MakeGroupLeaderMsg',87,1),(15694,60036,60069,'OP_MapFogDataInitMsg',396,1),(15695,60036,60069,'OP_MapFogDataUpdateMsg',397,1),(15696,60036,60069,'OP_MapRequest',522,1),(15697,60036,60069,'OP_MarketAddFundsReply',530,1),(15698,60036,60069,'OP_MarketAddFundsRequest',529,1),(15699,60036,60069,'OP_MarketFundsUpdate',527,1),(15700,60036,60069,'OP_MarketPlaceItems',538,1),(15701,60036,60069,'OP_MarketPlacePrices',533,1),(15702,60036,60069,'OP_MarketPurchase',532,1),(15703,60036,60069,'OP_MentorPopup',559,1),(15704,60036,60069,'OP_MercHireWindow',754,1),(15705,60036,60069,'OP_MercUnknown',755,1),(15706,60036,60069,'OP_MigrateBoatTransportMsg',253,1),(15707,60036,60069,'OP_MigrateBoatTransportReplyMsg',254,1),(15708,60036,60069,'OP_MigrateClientToZoneReplyMsg',82,1),(15709,60036,60069,'OP_MigrateClientToZoneRequestMsg',81,1),(15710,60036,60069,'OP_ModifyGuildMsg',267,1),(15711,60036,60069,'OP_MonitorCharacterListMsg',56,1),(15712,60036,60069,'OP_MonitorCharacterListRequestMsg',57,1),(15713,60036,60069,'OP_MonitorReplyMsg',55,1),(15714,60036,60069,'OP_MOTDMsg',44,1),(15715,60036,60069,'OP_MoveableObjectPlacementCriteri',160,1),(15716,60036,60069,'OP_MoveLogUpdateMsg',401,1),(15717,60036,60069,'OP_NotifyApprenticeStoppedMentori',409,1),(15718,60036,60069,'OP_OfferQuestMsg',402,1),(15719,60036,60069,'OP_OnscreenMsgMsg',265,1),(15720,60036,60069,'OP_OpenCharCust',562,1),(15721,60036,60069,'OP_OutOfZoneMemberDataMsg',96,1),(15722,60036,60069,'OP_PayHouseUpkeepMsg',159,1),(15723,60036,60069,'OP_PerformCameraShakeMsg',214,1),(15724,60036,60069,'OP_PerformPlayerKnockbackMsg',213,1),(15725,60036,60069,'OP_PetOptions',201,1),(15726,60036,60069,'OP_PetOptionsResponse',582,1),(15727,60036,60069,'OP_PlayCharacterReplyMsg',19,1),(15728,60036,60069,'OP_PlayCharacterRequestMsg',18,1),(15729,60036,60069,'OP_PlayerHouseAccessUpdateMsg',147,1),(15730,60036,60069,'OP_PlayerHouseBaseScreenMsg',145,1),(15731,60036,60069,'OP_PlayerHouseCloseUIMsg',149,1),(15732,60036,60069,'OP_PlayerHouseDisplayStatusMsg',148,1),(15733,60036,60069,'OP_PlayerHousePurchaseScreenMsg',146,1),(15734,60036,60069,'OP_PlayerMadeInstances',140,1),(15735,60036,60069,'OP_PlayerMadeInstancesScreen',139,1),(15736,60036,60069,'OP_PlayerPollAnswer',558,1),(15737,60036,60069,'OP_PlayerPollPopup',557,1),(15738,60036,60069,'OP_PlayLon',512,1),(15739,60036,60069,'OP_PointOfInterest',733,1),(15740,60036,60069,'OP_PointOfInterest2',734,1),(15741,60036,60069,'OP_PopulateSkillMapsMsg',215,1),(15742,60036,60069,'OP_PositionBoatTransportMsg',252,1),(15743,60036,60069,'OP_PositionMoveableObject',162,1),(15744,60036,60069,'OP_PostPossessionMsg',455,1),(15745,60036,60069,'OP_PredictionUpdateMsg',37,1),(15746,60036,60069,'OP_PrePossessionMsg',454,1),(15747,60036,60069,'OP_PromoFlagsDetailsMsg',375,1),(15748,60036,60069,'OP_PublishHouse',138,1),(15749,60036,60069,'OP_PurchaseConsignmentLoreCheckRe',408,1),(15750,60036,60069,'OP_PurchaseConsignmentRequestMsg',128,1),(15751,60036,60069,'OP_QueAllBgSolo',565,1),(15752,60036,60069,'OP_QuestionnaireMsg',261,1),(15753,60036,60069,'OP_QuestJournalInspectMsg',114,1),(15754,60036,60069,'OP_QuestJournalOpenMsg',113,1),(15755,60036,60069,'OP_QuestJournalSetVisibleMsg',115,1),(15756,60036,60069,'OP_QuestJournalWaypointMsg',116,1),(15757,60036,60069,'OP_QuestReward',321,1),(15758,60036,60069,'OP_QuickbarInitMsg',257,1),(15759,60036,60069,'OP_QuickbarUpdateMsg',258,1),(15760,60036,60069,'OP_RaceRestrictionMsg',440,1),(15761,60036,60069,'OP_ReadBookPageMsg',196,1),(15762,60036,60069,'OP_ReadyForTakeOffMsg',192,1),(15763,60036,60069,'OP_ReadyToZoneMsg',84,1),(15764,60036,60069,'OP_RecipeBook',539,1),(15765,60036,60069,'OP_RecipeDetailsMsg',72,1),(15766,60036,60069,'OP_RecipeList',745,1),(15767,60036,60069,'OP_RecipeListUnknown',594,1),(15768,60036,60069,'OP_RelinquishHouseMsg',153,1),(15769,60036,60069,'OP_ReloadLocalizedTxtMsg',355,1),(15770,60036,60069,'OP_RemoteCmdMsg',42,1),(15771,60036,60069,'OP_RemoveClientFromGroupMsg',85,1),(15772,60036,60069,'OP_RemoveConcentrationMsg',112,1),(15773,60036,60069,'OP_RemoveGroupFromGroupMsg',86,1),(15774,60036,60069,'OP_RemoveSpellEffectMsg',111,1),(15775,60036,60069,'OP_RenameGuildMsg',283,1),(15776,60036,60069,'OP_ReplaceableSubMeshesMsg',165,1),(15777,60036,60069,'OP_ReportMsg',381,1),(15778,60036,60069,'OP_RequestCampMsg',50,1),(15779,60036,60069,'OP_RequestGuildBankEventDetailsMs',281,1),(15780,60036,60069,'OP_RequestGuildEventDetailsMsg',272,1),(15781,60036,60069,'OP_RequestGuildInfoMsg',274,1),(15782,60036,60069,'OP_RequestGuildMembershipMsg',357,1),(15783,60036,60069,'OP_RequestHelpRepathMsg',206,1),(15784,60036,60069,'OP_RequestRecipeDetailsMsg',71,1),(15785,60036,60069,'OP_RequestTargetLocMsg',207,1),(15786,60036,60069,'OP_Research',746,1),(15787,60036,60069,'OP_ResendWorldChannelsMsg',444,1),(15788,60036,60069,'OP_ReskinCharacterRequestMsg',15,1),(15789,60036,60069,'OP_RestartZoneMsg',413,1),(15790,60036,60069,'OP_RewardPackMsg',282,1),(15791,60036,60069,'OP_SatMsg',189,1),(15792,60036,60069,'OP_SavageBarInitMsg',581,1),(15793,60036,60069,'OP_SelectZoneTeleporterDestinatio',354,1),(15794,60036,60069,'OP_SendLatestRequestMsg',97,1),(15795,60036,60069,'OP_ServerPlayCharacterReplyMsg',24,1),(15796,60036,60069,'OP_ServerPlayCharacterRequestMsg',23,1),(15797,60036,60069,'OP_SetInstanceDisplayNameMsg',441,1),(15798,60036,60069,'OP_SetRemoteCmdsMsg',41,1),(15799,60036,60069,'OP_SetSocialMsg',99,1),(15800,60036,60069,'OP_ShaderCustomizationMsg',164,1),(15801,60036,60069,'OP_ShowCreateFromRecipeUIMsg',219,1),(15802,60036,60069,'OP_ShowIllusionsMsg',193,1),(15803,60036,60069,'OP_ShowItemCreationProcessUIMsg',223,1),(15804,60036,60069,'OP_ShowRecipeBookMsg',226,1),(15805,60036,60069,'OP_ShowZoneTeleporterDestinations',353,1),(15806,60036,60069,'OP_SitMsg',187,1),(15807,60036,60069,'OP_SkillInfoRequest',515,1),(15808,60036,60069,'OP_SkillInfoResponse',516,1),(15809,60036,60069,'OP_SOEAllAccess',610,1),(15810,60036,60069,'OP_SpellGainedMsg',263,1),(15811,60036,60069,'OP_StandMsg',188,1),(15812,60036,60069,'OP_StoodMsg',190,1),(15813,60036,60069,'OP_StopItemCreationMsg',222,1),(15814,60036,60069,'OP_StoppedLootingMsg',186,1),(15815,60036,60069,'OP_StopTrackingMsg',392,1),(15816,60036,60069,'OP_SubmitCharCust',563,1),(15817,60036,60069,'OP_SupplyDepot',743,1),(15818,60036,60069,'OP_SysClient',218,1),(15819,60036,60069,'OP_TeleportWithinZoneMsg',79,1),(15820,60036,60069,'OP_TeleportWithinZoneNoReloadMsg',80,1),(15821,60036,60069,'OP_TintWidgetsMsg',170,1),(15822,60036,60069,'OP_TitleUpdateMsg',385,1),(15823,60036,60069,'OP_TrackingUpdateMsg',390,1),(15824,60036,60069,'OP_TradeskillList',712,1),(15825,60036,60069,'OP_TraitsList',735,1),(15826,60036,60069,'OP_UIEvent',528,1),(15827,60036,60069,'OP_UIResetMsg',174,1),(15828,60036,60069,'OP_UISettingsResponseMsg',173,1),(15829,60036,60069,'OP_Unknown',768,1),(15830,60036,60069,'OP_UnknownNpcMsg',374,1),(15831,60036,60069,'OP_UpdateActivePublicZonesMsg',373,1),(15832,60036,60069,'OP_UpdateCharacterSheetMsg',63,1),(15833,60036,60069,'OP_UpdateClientPredFlagsMsg',246,1),(15834,60036,60069,'OP_UpdateDebugRadiiMsg',380,1),(15835,60036,60069,'OP_UpdateGroupMemberDataMsg',389,1),(15836,60036,60069,'OP_UpdateHouseAccessDataMsg',144,1),(15837,60036,60069,'OP_UpdateHouseDataMsg',143,1),(15838,60036,60069,'OP_UpdateInventoryMsg',68,1),(15839,60036,60069,'OP_UpdateItemCreationProcessUIMsg',224,1),(15840,60036,60069,'OP_UpdateMotdMsg',208,1),(15841,60036,60069,'OP_UpdateOpportunityMsg',75,1),(15842,60036,60069,'OP_UpdatePositionMsg',39,1),(15843,60036,60069,'OP_UpdateRaidMsg',382,1),(15844,60036,60069,'OP_UpdateRecipeBookMsg',70,1),(15845,60036,60069,'OP_UpdateSkillBookMsg',73,1),(15846,60036,60069,'OP_UpdateSkillsMsg',74,1),(15847,60036,60069,'OP_UpdateSpellBookMsg',66,1),(15848,60036,60069,'OP_UpdateTargetLocMsg',62,1),(15849,60036,60069,'OP_UpdateTargetMsg',61,1),(15850,60036,60069,'OP_UpdateTitleCmd',495,1),(15851,60036,60069,'OP_UseAdornment',723,1),(15852,60036,60069,'OP_VideoUploaded',580,1),(15853,60036,60069,'OP_VoiceChatChannel',521,1),(15854,60036,60069,'OP_VoiceChatServer',739,1),(15855,60036,60069,'OP_WaypointReplyMsg',349,1),(15856,60036,60069,'OP_WaypointRequestMsg',348,1),(15857,60036,60069,'OP_WaypointSelectMsg',350,1),(15858,60036,60069,'OP_WaypointUpdateMsg',351,1),(15859,60036,60069,'OP_Weakness',584,1),(15860,60036,60069,'OP_WhoQueryReplyMsg',54,1),(15861,60036,60069,'OP_WhoQueryRequestMsg',53,1),(15862,60036,60069,'OP_WorldDataChangeMsg',411,1),(15863,60036,60069,'OP_WorldDataUpdateMsg',237,1),(15864,60036,60069,'OP_WorldListMsg',8,1),(15865,60036,60069,'OP_WorldPingMsg',400,1),(15866,60036,60069,'OP_WorldShutdownUpdateMsg',404,1),(15867,60036,60069,'OP_WorldStatusChangeMsg',6,1),(15868,60036,60069,'OP_WorldTravelAvail',573,1),(15869,60036,60069,'OP_WSAcctLockStatusMsg',205,1),(15870,60036,60069,'OP_WSCreateCharacterReplyMsg',14,1),(15871,60036,60069,'OP_WSCreateCharacterRequestMsg',13,1),(15872,60036,60069,'OP_WSLoginRequestMsg',2,1),(15873,60036,60069,'OP_WSServerHideMsg',367,1),(15874,60036,60069,'OP_WSServerLockMsg',365,1),(15875,60036,60069,'OP_WSStatusReplyMsg',5,1),(15876,60036,60069,'OP_ZoneBgInstanceList',569,1),(15877,60036,60069,'OP_ZoneInfoMsg',33,1),(15878,60036,60069,'OP_ZoneInstanceCreateReplyMsg',30,1),(15879,60036,60069,'OP_ZoneInstanceDestroyedMsg',31,1),(15880,60036,60069,'OP_ZoneMOTDMsg',45,1),(15881,60036,60069,'OP_ZonesStatusMsg',103,1),(15882,60036,60069,'OP_ZonesStatusRequestMsg',102,1),(15883,60036,60069,'OP_ZoneToFriendReplyMsg',285,1),(15884,60036,60069,'OP_ZoneToFriendRequestMsg',284,1),(15885,60085,60116,'OP_AchievementUpdateMsg',751,1),(15886,60085,60116,'OP_AddSocialStructureStandingMsg',252,1),(15887,60085,60116,'OP_AdvancementRequestMsg',397,1),(15888,60085,60116,'OP_AdventureList',491,1),(15889,60085,60116,'OP_AFKUpdateMsg',373,1),(15890,60085,60116,'OP_AfterInvSpellUpdate',71,1),(15891,60085,60116,'OP_AllCharactersDescReplyMsg',10,1),(15892,60085,60116,'OP_AllCharactersDescRequestMsg',9,1),(15893,60085,60116,'OP_AllWSDescRequestMsg',7,1),(15894,60085,60116,'OP_AnonUpdateMsg',374,1),(15895,60085,60116,'OP_ArenaCreate',459,1),(15896,60085,60116,'OP_ArenaGameTypesMsg',448,1),(15897,60085,60116,'OP_ArenaList',460,1),(15898,60085,60116,'OP_ArenaWindow',468,1),(15899,60085,60116,'OP_AttackAllowed',503,1),(15900,60085,60116,'OP_AttackNotAllowed',504,1),(15901,60085,60116,'OP_AuctionAbortMsg',439,1),(15902,60085,60116,'OP_AuctionCharacter',436,1),(15903,60085,60116,'OP_AuctionCharacterReply',437,1),(15904,60085,60116,'OP_AuctionCoin',434,1),(15905,60085,60116,'OP_AuctionCoinReply',435,1),(15906,60085,60116,'OP_AuctionCommitMsg',438,1),(15907,60085,60116,'OP_AuctionItem',432,1),(15908,60085,60116,'OP_AuctionItemReply',433,1),(15909,60085,60116,'OP_AuditAuctionEventMsg',449,1),(15910,60085,60116,'OP_AvatarCreatedMsg',48,1),(15911,60085,60116,'OP_AvatarDestroyedMsg',49,1),(15912,60085,60116,'OP_AvatarUpdateMsg',363,1),(15913,60085,60116,'OP_BadLanguageFilter',522,1),(15914,60085,60116,'OP_BagOptions',505,1),(15915,60085,60116,'OP_BeginItemCreationMsg',223,1),(15916,60085,60116,'OP_BeginTrackingMsg',393,1),(15917,60085,60116,'OP_BioUpdateMsg',365,1),(15918,60085,60116,'OP_BrokerAddBag',295,1),(15919,60085,60116,'OP_BrokerRemoveBag',296,1),(15920,60085,60116,'OP_BrokerSellList',694,1),(15921,60085,60116,'OP_BuyPlayerHouseMsg',152,1),(15922,60085,60116,'OP_BuyPlayerHouseTintMsg',153,1),(15923,60085,60116,'OP_CampAbortedMsg',54,1),(15924,60085,60116,'OP_CampClientMsg',390,1),(15925,60085,60116,'OP_CampStartedMsg',53,1),(15926,60085,60116,'OP_CancelCreateFromRecipeMsg',222,1),(15927,60085,60116,'OP_CancelledFeignMsg',218,1),(15928,60085,60116,'OP_CancelMoveObjectModeMsg',165,1),(15929,60085,60116,'OP_CancelSpellCast',492,1),(15930,60085,60116,'OP_ChangeServerControlFlagMsg',249,1),(15931,60085,60116,'OP_ChangeZoneMsg',79,1),(15932,60085,60116,'OP_CharacterAchievements',750,1),(15933,60085,60116,'OP_CharacterCreatedDungeons',554,1),(15934,60085,60116,'OP_CharacterCurrency',749,1),(15935,60085,60116,'OP_CharacterHousingList',510,1),(15936,60085,60116,'OP_CharacterLinkdeadMsg',417,1),(15937,60085,60116,'OP_CharacterMerc',67,1),(15938,60085,60116,'OP_CharacterMounts',587,1),(15939,60085,60116,'OP_CharacterPet',66,1),(15940,60085,60116,'OP_CharNameChangedMsg',355,1),(15941,60085,60116,'OP_CharRenamed',715,1),(15942,60085,60116,'OP_CharTransferCommitReplyMsg',425,1),(15943,60085,60116,'OP_CharTransferCommitRequestMsg',423,1),(15944,60085,60116,'OP_CharTransferReplyMsg',421,1),(15945,60085,60116,'OP_CharTransferRequestMsg',420,1),(15946,60085,60116,'OP_CharTransferRollbackReplyMsg',424,1),(15947,60085,60116,'OP_CharTransferRollbackRequestMsg',422,1),(15948,60085,60116,'OP_CharTransferStartReplyMsg',419,1),(15949,60085,60116,'OP_CharTransferStartRequestMsg',418,1),(15950,60085,60116,'OP_CharTransferValidateReplyMsg',441,1),(15951,60085,60116,'OP_CharTransferValidateRequestMsg',440,1),(15952,60085,60116,'OP_ChatCreateChannelMsg',288,1),(15953,60085,60116,'OP_ChatFiltersMsg',337,1),(15954,60085,60116,'OP_ChatJoinChannelMsg',289,1),(15955,60085,60116,'OP_ChatLeaveChannelMsg',291,1),(15956,60085,60116,'OP_ChatRelationshipUpdateMsg',186,1),(15957,60085,60116,'OP_ChatSendFriendsMsg',298,1),(15958,60085,60116,'OP_ChatSendIgnoresMsg',299,1),(15959,60085,60116,'OP_ChatTellChannelMsg',292,1),(15960,60085,60116,'OP_ChatTellUserMsg',293,1),(15961,60085,60116,'OP_ChatToggleFriendMsg',294,1),(15962,60085,60116,'OP_ChatToggleIgnoreMsg',297,1),(15963,60085,60116,'OP_ChatWhoChannelMsg',290,1),(15964,60085,60116,'OP_ClearDataMsg',100,1),(15965,60085,60116,'OP_ClearForLandingMsg',494,1),(15966,60085,60116,'OP_ClearForTakeOffMsg',193,1),(15967,60085,60116,'OP_ClientCmdMsg',60,1),(15968,60085,60116,'OP_ClientFellMsg',388,1),(15969,60085,60116,'OP_ClientIdleBeginMsg',408,1),(15970,60085,60116,'OP_ClientIdleEndMsg',409,1),(15971,60085,60116,'OP_ClientInDeathRegionMsg',389,1),(15972,60085,60116,'OP_ClientTeleportRequestMsg',80,1),(15973,60085,60116,'OP_ClientTeleportToLocationMsg',247,1),(15974,60085,60116,'OP_CloseGroupInviteWindowMsg',400,1),(15975,60085,60116,'OP_CollectAllHouseItemsMsg',154,1),(15976,60085,60116,'OP_ConsignItemRequestMsg',128,1),(15977,60085,60116,'OP_ConsignItemResponseMsg',129,1),(15978,60085,60116,'OP_ConsignmentCloseStoreMsg',127,1),(15979,60085,60116,'OP_ConsignRemoveItemsMsg',381,1),(15980,60085,60116,'OP_ConsignViewCreateMsg',378,1),(15981,60085,60116,'OP_ConsignViewGetPageMsg',379,1),(15982,60085,60116,'OP_ConsignViewReleaseMsg',380,1),(15983,60085,60116,'OP_ConsignViewSortMsg',386,1),(15984,60085,60116,'OP_CorruptedClientMsg',412,1),(15985,60085,60116,'OP_CreateBoatTransportsMsg',253,1),(15986,60085,60116,'OP_CreateCharacterDungeon',550,1),(15987,60085,60116,'OP_CreateCharacterReplyMsg',12,1),(15988,60085,60116,'OP_CreateCharacterRequestMsg',11,1),(15989,60085,60116,'OP_CreateCharFromCBBReplyMsg',429,1),(15990,60085,60116,'OP_CreateCharFromCBBRequestMsg',428,1),(15991,60085,60116,'OP_CreateGuildReplyMsg',122,1),(15992,60085,60116,'OP_CreateGuildRequestMsg',121,1),(15993,60085,60116,'OP_CreateZoneInstanceMsg',31,1),(15994,60085,60116,'OP_CsCategoryRequestMsg',370,1),(15995,60085,60116,'OP_CsCategoryResponseMsg',371,1),(15996,60085,60116,'OP_CSTicketAddCommentMsg',236,1),(15997,60085,60116,'OP_CSTicketChangeNotificationMsg',238,1),(15998,60085,60116,'OP_CSTicketCommentRequestMsg',233,1),(15999,60085,60116,'OP_CSTicketCommentResponseMsg',234,1),(16000,60085,60116,'OP_CSTicketCreateMsg',235,1),(16001,60085,60116,'OP_CSTicketDeleteMsg',237,1),(16002,60085,60116,'OP_CSTicketHeaderRequestMsg',231,1),(16003,60085,60116,'OP_CSTicketInfoMsg',232,1),(16004,60085,60116,'OP_CSToolAccessResponseMsg',391,1),(16005,60085,60116,'OP_CSToolsRequestMsg',250,1),(16006,60085,60116,'OP_CSToolsResponseMsg',251,1),(16007,60085,60116,'OP_CurrentPet',488,1),(16008,60085,60116,'OP_CustomizationPurchaseRequestMs',169,1),(16009,60085,60116,'OP_CustomizationReplyMsg',171,1),(16010,60085,60116,'OP_CustomizationSetRequestMsg',170,1),(16011,60085,60116,'OP_CustomizeHouseDisplay',740,1),(16012,60085,60116,'OP_DailyObjectives',600,1),(16013,60085,60116,'OP_DefaultGroupOptionsMsg',200,1),(16014,60085,60116,'OP_DefaultGroupOptionsRequestMsg',199,1),(16015,60085,60116,'OP_DeleteCharacterReplyMsg',19,1),(16016,60085,60116,'OP_DeleteCharacterRequestMsg',18,1),(16017,60085,60116,'OP_DeleteGuildMsg',125,1),(16018,60085,60116,'OP_DestUpdateReq',212,1),(16019,60085,60116,'OP_DialogCloseMsg',112,1),(16020,60085,60116,'OP_DialogSelectMsg',111,1),(16021,60085,60116,'OP_DispatchClientCmdMsg',62,1),(16022,60085,60116,'OP_DispatchESMsg',61,1),(16023,60085,60116,'OP_DispatchMsg',454,1),(16024,60085,60116,'OP_DispatchSpellCmdMsg',181,1),(16025,60085,60116,'OP_DisplayDebugNLLPointsMsg',257,1),(16026,60085,60116,'OP_DisplayEventMsg',455,1),(16027,60085,60116,'OP_DisplayExchangeScreenMsg',447,1),(16028,60085,60116,'OP_DisplayGroupOptionsScreenMsg',202,1),(16029,60085,60116,'OP_DisplayInnVisitScreenMsg',204,1),(16030,60085,60116,'OP_DisplayMailScreenMsg',407,1),(16031,60085,60116,'OP_DisplayTSEventReactionMsg',227,1),(16032,60085,60116,'OP_DisplayWarningMsg',268,1),(16033,60085,60116,'OP_DoneLoadingEntityResourcesMsg',38,1),(16034,60085,60116,'OP_DoneLoadingZoneResourcesMsg',36,1),(16035,60085,60116,'OP_DoneSendingInitialEntitiesMsg',37,1),(16036,60085,60116,'OP_DressingRoom',513,1),(16037,60085,60116,'OP_DumpSchedulerMsg',205,1),(16038,60085,60116,'OP_DungeonMakerEnter',551,1),(16039,60085,60116,'OP_DungeonMakerItemRequest',553,1),(16040,60085,60116,'OP_DungeonMakerItemResponse',585,1),(16041,60085,60116,'OP_DungeonMakerToolboxList',555,1),(16042,60085,60116,'OP_DungeonMakerUnknown',556,1),(16043,60085,60116,'OP_DungeonMakerUnknown1',557,1),(16044,60085,60116,'OP_DungeonPlayAsAvatarList',754,1),(16045,60085,60116,'OP_DungeonPlayAsAvatarSelected',755,1),(16046,60085,60116,'OP_EncounterBrokenMsg',266,1),(16047,60085,60116,'OP_EnterHouseMsg',156,1),(16048,60085,60116,'OP_EnterMoveObjectModeMsg',163,1),(16049,60085,60116,'OP_EntityVerbsReplyMsg',183,1),(16050,60085,60116,'OP_EntityVerbsRequestMsg',182,1),(16051,60085,60116,'OP_EntityVerbsVerbMsg',184,1),(16052,60085,60116,'OP_EqArenaResultsCmd',705,1),(16053,60085,60116,'OP_EqAvailWorldChannelsCmd',692,1),(16054,60085,60116,'OP_EqBetaCopyRequest',611,1),(16055,60085,60116,'OP_EqCannedEmoteCmd',634,1),(16056,60085,60116,'OP_EqChatChannelUpdateCmd',690,1),(16057,60085,60116,'OP_EqChoiceWinCmd',671,1),(16058,60085,60116,'OP_EqCloseWindowCmd',663,1),(16059,60085,60116,'OP_EqCollectionFilterCmd',650,1),(16060,60085,60116,'OP_EqCollectionItemCmd',651,1),(16061,60085,60116,'OP_EqCollectionUpdateCmd',649,1),(16062,60085,60116,'OP_EqConsignmentItemsCmd',695,1),(16063,60085,60116,'OP_EqCreateGhostCmd',616,1),(16064,60085,60116,'OP_EqCreateListBoxCmd',631,1),(16065,60085,60116,'OP_EqCreateSignWidgetCmd',618,1),(16066,60085,60116,'OP_EqCreateWidgetCmd',617,1),(16067,60085,60116,'OP_EqDebugPVDCmd',684,1),(16068,60085,60116,'OP_EqDestroyGhostCmd',619,1),(16069,60085,60116,'OP_EqDialogCloseCmd',647,1),(16070,60085,60116,'OP_EqDialogOpenCmd',646,1),(16071,60085,60116,'OP_EqDisplaySpellFailCmd',667,1),(16072,60085,60116,'OP_EqDisplayTextCmd',615,1),(16073,60085,60116,'OP_EqDrawablePathGraphCmd',645,1),(16074,60085,60116,'OP_EqEnableGameEventCmd',677,1),(16075,60085,60116,'OP_EqEnableWindowCmd',679,1),(16076,60085,60116,'OP_EqExamineInfoCmd',662,1),(16077,60085,60116,'OP_EqFactionUpdateCmd',648,1),(16078,60085,60116,'OP_EqFlashWindowCmd',680,1),(16079,60085,60116,'OP_EqGetProbsCmd',688,1),(16080,60085,60116,'OP_EqGroupMemberRemovedCmd',641,1),(16081,60085,60116,'OP_EqGuildBankEventActionCmd',706,1),(16082,60085,60116,'OP_EqGuildBankExamineInfoCmd',707,1),(16083,60085,60116,'OP_EqHearChainEffectCmd',642,1),(16084,60085,60116,'OP_EqHearChatCmd',614,1),(16085,60085,60116,'OP_EqHearCombatCmd',623,1),(16086,60085,60116,'OP_EqHearConsiderCmd',629,1),(16087,60085,60116,'OP_EqHearDeathCmd',640,1),(16088,60085,60116,'OP_EQHearDispellCmd',752,1),(16089,60085,60116,'OP_EqHearDrowningCmd',639,1),(16090,60085,60116,'OP_EqHearHealCmd',689,1),(16091,60085,60116,'OP_EqHearPlayFlavorCmd',682,1),(16092,60085,60116,'OP_EQHearProcCmd',625,1),(16093,60085,60116,'OP_EQHearResEffectCmd',626,1),(16094,60085,60116,'OP_EqHearSpellCastCmd',624,1),(16095,60085,60116,'OP_EqHearSpellFizzleCmd',628,1),(16096,60085,60116,'OP_EqHearSpellInterruptCmd',627,1),(16097,60085,60116,'OP_EqHearSpellNoLandCmd',708,1),(16098,60085,60116,'OP_EQHearThreatCmd',746,1),(16099,60085,60116,'OP_EqHelpPathClearCmd',660,1),(16100,60085,60116,'OP_EqHelpPathCmd',659,1),(16101,60085,60116,'OP_EqInspectPCResultsCmd',644,1),(16102,60085,60116,'OP_EqInstructionWindowCloseCmd',674,1),(16103,60085,60116,'OP_EqInstructionWindowCmd',673,1),(16104,60085,60116,'OP_EqInstructionWindowGoalCmd',675,1),(16105,60085,60116,'OP_EqInstructionWindowTaskCmd',676,1),(16106,60085,60116,'OP_EqJunctionListCmd',665,1),(16107,60085,60116,'OP_EqMapExplorationCmd',698,1),(16108,60085,60116,'OP_EqMentoring',653,1),(16109,60085,60116,'OP_EqPlaySound3DCmd',637,1),(16110,60085,60116,'OP_EqPlaySoundCmd',636,1),(16111,60085,60116,'OP_EqPlayVoiceCmd',638,1),(16112,60085,60116,'OP_EqQuestGroupCmd',655,1),(16113,60085,60116,'OP_EqQuestionnaireCmd',686,1),(16114,60085,60116,'OP_EqQuestJournalReplyCmd',654,1),(16115,60085,60116,'OP_EqQuestJournalUpdateCmd',652,1),(16116,60085,60116,'OP_EqReceiveOfferCmd',643,1),(16117,60085,60116,'OP_EqResurrectedCmd',670,1),(16118,60085,60116,'OP_EqSetControlGhostCmd',621,1),(16119,60085,60116,'OP_EqSetDebugPathPointsCmd',632,1),(16120,60085,60116,'OP_EqSetDefaultVerbCmd',672,1),(16121,60085,60116,'OP_EqSetPOVGhostCmd',622,1),(16122,60085,60116,'OP_EqShowBookCmd',685,1),(16123,60085,60116,'OP_EqShowDeathWindowCmd',666,1),(16124,60085,60116,'OP_EqShowWindowCmd',678,1),(16125,60085,60116,'OP_EqSpellCastEndCmd',669,1),(16126,60085,60116,'OP_EqSpellCastStartCmd',668,1),(16127,60085,60116,'OP_EqSpellMoveToRangeAndRetryCmd',700,1),(16128,60085,60116,'OP_EqStartBrokerCmd',697,1),(16129,60085,60116,'OP_EqStateCmd',635,1),(16130,60085,60116,'OP_EqStoreLogCmd',699,1),(16131,60085,60116,'OP_EqUpdateBankCmd',661,1),(16132,60085,60116,'OP_EqUpdateGhostCmd',620,1),(16133,60085,60116,'OP_EqUpdateLootCmd',664,1),(16134,60085,60116,'OP_EqUpdateMerchantCmd',656,1),(16135,60085,60116,'OP_EqUpdatePlayerMailCmd',701,1),(16136,60085,60116,'OP_EqUpdatePlayerTradeCmd',658,1),(16137,60085,60116,'OP_EqUpdateSignWidgetCmd',683,1),(16138,60085,60116,'OP_EqUpdateStoreCmd',657,1),(16139,60085,60116,'OP_EqUpdateSubClassesCmd',630,1),(16140,60085,60116,'OP_EqUpdateTargetCmd',693,1),(16141,60085,60116,'OP_EqWhoChannelQueryReplyCmd',691,1),(16142,60085,60116,'OP_ESInitMsg',27,1),(16143,60085,60116,'OP_ESLoginRequestMsg',3,1),(16144,60085,60116,'OP_ESReadyForClientsMsg',28,1),(16145,60085,60116,'OP_ESStatusMsg',102,1),(16146,60085,60116,'OP_ESWeatherRequestEndMsg',107,1),(16147,60085,60116,'OP_ESWeatherRequestMsg',106,1),(16148,60085,60116,'OP_ESZoneInstanceStatusMsg',103,1),(16149,60085,60116,'OP_ExamineConsignmentRequestMsg',173,1),(16150,60085,60116,'OP_ExamineConsignmentResponseMsg',174,1),(16151,60085,60116,'OP_ExamineInfoRequestMsg',258,1),(16152,60085,60116,'OP_ExamineItemRequestMsg',197,1),(16153,60085,60116,'OP_ExitHouseMsg',157,1),(16154,60085,60116,'OP_ExpectClientAsCharacterReplyMs',24,1),(16155,60085,60116,'OP_ExpectClientAsCharacterRequest',34,1),(16156,60085,60116,'OP_ExpPurchWindow',731,1),(16157,60085,60116,'OP_FellowshipExpMsg',124,1),(16158,60085,60116,'OP_FlightPathsMsg',416,1),(16159,60085,60116,'OP_GameWorldTimeMsg',45,1),(16160,60085,60116,'OP_PaperdollImage',580,1),(16161,60085,60116,'OP_GetAuctionAssetIDMsg',444,1),(16162,60085,60116,'OP_GetAuctionAssetIDReplyMsg',445,1),(16163,60085,60116,'OP_GetAvatarAccessRequestForCSToo',396,1),(16164,60085,60116,'OP_GetCharacterSerializedReplyMsg',427,1),(16165,60085,60116,'OP_GetCharacterSerializedRequestM',426,1),(16166,60085,60116,'OP_GroupCreatedMsg',90,1),(16167,60085,60116,'OP_GroupDestroyedMsg',91,1),(16168,60085,60116,'OP_GroupLeaderChangedMsg',95,1),(16169,60085,60116,'OP_GroupMemberAddedMsg',92,1),(16170,60085,60116,'OP_GroupMemberRemovedMsg',93,1),(16171,60085,60116,'OP_GroupOptionsMsg',201,1),(16172,60085,60116,'OP_GroupRemovedFromGroupMsg',94,1),(16173,60085,60116,'OP_GroupResendOOZDataMsg',96,1),(16174,60085,60116,'OP_GroupSettingsChangedMsg',97,1),(16175,60085,60116,'OP_GuildBankActionMsg',277,1),(16176,60085,60116,'OP_GuildBankActionResponseMsg',278,1),(16177,60085,60116,'OP_GuildBankEventListMsg',282,1),(16178,60085,60116,'OP_GuildBankItemDetailsRequestMsg',279,1),(16179,60085,60116,'OP_GuildBankItemDetailsResponseMs',280,1),(16180,60085,60116,'OP_GuildBankUpdateMsg',281,1),(16181,60085,60116,'OP_GuildEventActionMsg',272,1),(16182,60085,60116,'OP_GuildEventAddMsg',271,1),(16183,60085,60116,'OP_GuildEventDetailsMsg',275,1),(16184,60085,60116,'OP_GuildEventListMsg',273,1),(16185,60085,60116,'OP_GuildEventMsg',270,1),(16186,60085,60116,'OP_GuildMembershipResponseMsg',360,1),(16187,60085,60116,'OP_GuildRecruiting',711,1),(16188,60085,60116,'OP_GuildRecruitingDetails',712,1),(16189,60085,60116,'OP_GuildRecruitingImage',713,1),(16190,60085,60116,'OP_GuildRecruitingMemberInfo',710,1),(16191,60085,60116,'OP_GuildsayMsg',123,1),(16192,60085,60116,'OP_GuildStatusUpdate',704,1),(16193,60085,60116,'OP_GuildUpdateMsg',126,1),(16194,60085,60116,'OP_HeritageMsg',10003,1),(16195,60085,60116,'OP_HideIllusionsMsg',196,1),(16196,60085,60116,'OP_HouseAccessRemoveMsg',160,1),(16197,60085,60116,'OP_HouseAccessSetMsg',159,1),(16198,60085,60116,'OP_HouseCustomizationScreenMsg',168,1),(16199,60085,60116,'OP_HouseDefaultAccessSetMsg',158,1),(16200,60085,60116,'OP_HouseDeletedRemotelyMsg',144,1),(16201,60085,60116,'OP_HouseItemsList',487,1),(16202,60085,60116,'OP_HousingDataChangedMsg',430,1),(16203,60085,60116,'OP_HousingRestoreMsg',431,1),(16204,60085,60116,'OP_InspectPlayerMsg',366,1),(16205,60085,60116,'OP_InspectPlayerRequestMsg',453,1),(16206,60085,60116,'OP_InviteRequestMsg',450,1),(16207,60085,60116,'OP_InviteResponseMsg',451,1),(16208,60085,60116,'OP_InviteTargetResponseMsg',452,1),(16209,60085,60116,'OP_JoinGuildNotifyMsg',362,1),(16210,60085,60116,'OP_JournalQuestStoryline',753,1),(16211,60085,60116,'OP_KeymapDataMsg',179,1),(16212,60085,60116,'OP_KeymapLoadMsg',177,1),(16213,60085,60116,'OP_KeymapNoneMsg',178,1),(16214,60085,60116,'OP_KeymapSaveMsg',180,1),(16215,60085,60116,'OP_KnowledgebaseRequestMsg',229,1),(16216,60085,60116,'OP_KnowledgebaseResponseMsg',230,1),(16217,60085,60116,'OP_KnowledgeWindowSlotMappingMsg',372,1),(16218,60085,60116,'OP_KnownLanguagesMsg',241,1),(16219,60085,60116,'OP_Launchpad',578,1),(16220,60085,60116,'OP_LeaveGuildNotifyMsg',361,1),(16221,60085,60116,'OP_LevelChangedMsg',264,1),(16222,60085,60116,'OP_LFGGroupSearch',507,1),(16223,60085,60116,'OP_LFGUpdateMsg',521,1),(16224,60085,60116,'OP_LikeOption',138,1),(16225,60085,60116,'OP_LoadCalendarEvents',581,1),(16226,60085,60116,'OP_LoadWelcomeWindow',563,1),(16227,60085,60116,'OP_LoginByNumRequestMsg',1,1),(16228,60085,60116,'OP_LoginReplyMsg',4,1),(16229,60085,60116,'OP_LoginRequestMsg',0,1),(16230,60085,60116,'OP_LootItemsRequestMsg',187,1),(16231,60085,60116,'OP_Lottery',709,1),(16232,60085,60116,'OP_LSCheckAcctLockMsg',206,1),(16233,60085,60116,'OP_LsClientAlertlogReplyMsg',245,1),(16234,60085,60116,'OP_LsClientBaselogReplyMsg',243,1),(16235,60085,60116,'OP_LsClientCrashlogReplyMsg',244,1),(16236,60085,60116,'OP_LsClientVerifylogReplyMsg',246,1),(16237,60085,60116,'OP_LsRequestClientCrashLogMsg',242,1),(16238,60085,60116,'OP_LSServerLockMsg',368,1),(16239,60085,60116,'OP_MacroInitMsg',261,1),(16240,60085,60116,'OP_MacroUpdateMsg',262,1),(16241,60085,60116,'OP_MailCommitSendMessageMsg',347,1),(16242,60085,60116,'OP_MailDeleteMessageMsg',343,1),(16243,60085,60116,'OP_MailEventNotificationMsg',414,1),(16244,60085,60116,'OP_MailGetHeadersReplyMsg',344,1),(16245,60085,60116,'OP_MailGetMessageMsg',341,1),(16246,60085,60116,'OP_MailGetMessageReplyMsg',345,1),(16247,60085,60116,'OP_MailRemoveAttachFromMailMsg',349,1),(16248,60085,60116,'OP_MailSendMessageMsg',342,1),(16249,60085,60116,'OP_MailSendMessageReplyMsg',346,1),(16250,60085,60116,'OP_MailSendSystemMessageMsg',348,1),(16251,60085,60116,'OP_MakeGroupLeaderMsg',89,1),(16252,60085,60116,'OP_MapFogDataInitMsg',398,1),(16253,60085,60116,'OP_MapFogDataUpdateMsg',399,1),(16254,60085,60116,'OP_MapRequest',524,1),(16255,60085,60116,'OP_MarketAddFundsReply',532,1),(16256,60085,60116,'OP_MarketAddFundsRequest',531,1),(16257,60085,60116,'OP_MarketFundsUpdate',529,1),(16258,60085,60116,'OP_MarketPlaceItems',542,1),(16259,60085,60116,'OP_MarketPlacePrices',535,1),(16260,60085,60116,'OP_MarketPurchase',534,1),(16261,60085,60116,'OP_MentorPopup',561,1),(16262,60085,60116,'OP_MercHireWindow',756,1),(16263,60085,60116,'OP_MercUnknown',757,1),(16264,60085,60116,'OP_MigrateBoatTransportMsg',255,1),(16265,60085,60116,'OP_MigrateBoatTransportReplyMsg',256,1),(16266,60085,60116,'OP_MigrateClientToZoneReplyMsg',84,1),(16267,60085,60116,'OP_MigrateClientToZoneRequestMsg',83,1),(16268,60085,60116,'OP_ModifyGuildMsg',269,1),(16269,60085,60116,'OP_MonitorCharacterListMsg',58,1),(16270,60085,60116,'OP_MonitorCharacterListRequestMsg',59,1),(16271,60085,60116,'OP_MonitorReplyMsg',57,1),(16272,60085,60116,'OP_MOTDMsg',46,1),(16273,60085,60116,'OP_MoveableObjectPlacementCriteri',162,1),(16274,60085,60116,'OP_MoveLogUpdateMsg',403,1),(16275,60085,60116,'OP_NotifyApprenticeStoppedMentori',411,1),(16276,60085,60116,'OP_OfferQuestMsg',404,1),(16277,60085,60116,'OP_OnscreenMsgMsg',267,1),(16278,60085,60116,'OP_OpenCharCust',564,1),(16279,60085,60116,'OP_OutOfZoneMemberDataMsg',98,1),(16280,60085,60116,'OP_PayHouseUpkeepMsg',161,1),(16281,60085,60116,'OP_PerformCameraShakeMsg',216,1),(16282,60085,60116,'OP_PerformPlayerKnockbackMsg',215,1),(16283,60085,60116,'OP_PetOptions',203,1),(16284,60085,60116,'OP_PetOptionsResponse',584,1),(16285,60085,60116,'OP_PlayCharacterReplyMsg',21,1),(16286,60085,60116,'OP_PlayCharacterRequestMsg',20,1),(16287,60085,60116,'OP_PlayerHouseAccessUpdateMsg',149,1),(16288,60085,60116,'OP_PlayerHouseBaseScreenMsg',147,1),(16289,60085,60116,'OP_PlayerHouseCloseUIMsg',151,1),(16290,60085,60116,'OP_PlayerHouseDisplayStatusMsg',150,1),(16291,60085,60116,'OP_PlayerHousePurchaseScreenMsg',148,1),(16292,60085,60116,'OP_PlayerMadeInstances',142,1),(16293,60085,60116,'OP_PlayerMadeInstancesScreen',141,1),(16294,60085,60116,'OP_PlayerPollAnswer',560,1),(16295,60085,60116,'OP_PlayerPollPopup',559,1),(16296,60085,60116,'OP_PlayLon',514,1),(16297,60085,60116,'OP_PointOfInterest',735,1),(16298,60085,60116,'OP_PointOfInterest2',736,1),(16299,60085,60116,'OP_PopulateSkillMapsMsg',217,1),(16300,60085,60116,'OP_PositionBoatTransportMsg',254,1),(16301,60085,60116,'OP_PositionMoveableObject',164,1),(16302,60085,60116,'OP_PostPossessionMsg',457,1),(16303,60085,60116,'OP_PredictionUpdateMsg',39,1),(16304,60085,60116,'OP_PrePossessionMsg',456,1),(16305,60085,60116,'OP_PromoFlagsDetailsMsg',377,1),(16306,60085,60116,'OP_PublishHouse',140,1),(16307,60085,60116,'OP_PurchaseConsignmentLoreCheckRe',410,1),(16308,60085,60116,'OP_PurchaseConsignmentRequestMsg',130,1),(16309,60085,60116,'OP_QueAllBgSolo',567,1),(16310,60085,60116,'OP_QuestionnaireMsg',263,1),(16311,60085,60116,'OP_QuestJournalInspectMsg',116,1),(16312,60085,60116,'OP_QuestJournalOpenMsg',115,1),(16313,60085,60116,'OP_QuestJournalSetVisibleMsg',117,1),(16314,60085,60116,'OP_QuestJournalWaypointMsg',118,1),(16315,60085,60116,'OP_QuestReward',323,1),(16316,60085,60116,'OP_QuickbarInitMsg',259,1),(16317,60085,60116,'OP_QuickbarUpdateMsg',260,1),(16318,60085,60116,'OP_RaceRestrictionMsg',442,1),(16319,60085,60116,'OP_ReadBookPageMsg',198,1),(16320,60085,60116,'OP_ReadyForTakeOffMsg',194,1),(16321,60085,60116,'OP_ReadyToZoneMsg',86,1),(16322,60085,60116,'OP_RecipeBook',543,1),(16323,60085,60116,'OP_RecipeDetailsMsg',74,1),(16324,60085,60116,'OP_RecipeList',747,1),(16325,60085,60116,'OP_RecipeListUnknown',596,1),(16326,60085,60116,'OP_RelinquishHouseMsg',155,1),(16327,60085,60116,'OP_ReloadLocalizedTxtMsg',358,1),(16328,60085,60116,'OP_RemoteCmdMsg',44,1),(16329,60085,60116,'OP_RemoveClientFromGroupMsg',87,1),(16330,60085,60116,'OP_RemoveConcentrationMsg',114,1),(16331,60085,60116,'OP_RemoveGroupFromGroupMsg',88,1),(16332,60085,60116,'OP_RemoveSpellEffectMsg',113,1),(16333,60085,60116,'OP_RenameGuildMsg',285,1),(16334,60085,60116,'OP_ReplaceableSubMeshesMsg',167,1),(16335,60085,60116,'OP_ReportMsg',383,1),(16336,60085,60116,'OP_RequestCampMsg',52,1),(16337,60085,60116,'OP_RequestGuildBankEventDetailsMs',283,1),(16338,60085,60116,'OP_RequestGuildEventDetailsMsg',274,1),(16339,60085,60116,'OP_RequestGuildInfoMsg',276,1),(16340,60085,60116,'OP_RequestGuildMembershipMsg',359,1),(16341,60085,60116,'OP_RequestHelpRepathMsg',208,1),(16342,60085,60116,'OP_RequestRecipeDetailsMsg',73,1),(16343,60085,60116,'OP_RequestTargetLocMsg',209,1),(16344,60085,60116,'OP_Research',748,1),(16345,60085,60116,'OP_ResendWorldChannelsMsg',446,1),(16346,60085,60116,'OP_ReskinCharacterRequestMsg',15,1),(16347,60085,60116,'OP_RestartZoneMsg',415,1),(16348,60085,60116,'OP_RewardPackMsg',284,1),(16349,60085,60116,'OP_SatMsg',191,1),(16350,60085,60116,'OP_SavageBarInitMsg',583,1),(16351,60085,60116,'OP_SelectZoneTeleporterDestinatio',357,1),(16352,60085,60116,'OP_SendLatestRequestMsg',99,1),(16353,60085,60116,'OP_ServerPlayCharacterReplyMsg',26,1),(16354,60085,60116,'OP_ServerPlayCharacterRequestMsg',25,1),(16355,60085,60116,'OP_SetInstanceDisplayNameMsg',443,1),(16356,60085,60116,'OP_SetRemoteCmdsMsg',43,1),(16357,60085,60116,'OP_SetSocialMsg',101,1),(16358,60085,60116,'OP_ShaderCustomizationMsg',166,1),(16359,60085,60116,'OP_ShowCreateFromRecipeUIMsg',221,1),(16360,60085,60116,'OP_ShowIllusionsMsg',195,1),(16361,60085,60116,'OP_ShowItemCreationProcessUIMsg',225,1),(16362,60085,60116,'OP_ShowRecipeBookMsg',228,1),(16363,60085,60116,'OP_ShowZoneTeleporterDestinations',356,1),(16364,60085,60116,'OP_SitMsg',189,1),(16365,60085,60116,'OP_SkillInfoRequest',517,1),(16366,60085,60116,'OP_SkillInfoResponse',518,1),(16367,60085,60116,'OP_SOEAllAccess',612,1),(16368,60085,60116,'OP_SpellGainedMsg',265,1),(16369,60085,60116,'OP_StandMsg',190,1),(16370,60085,60116,'OP_StoodMsg',192,1),(16371,60085,60116,'OP_StopItemCreationMsg',224,1),(16372,60085,60116,'OP_StoppedLootingMsg',188,1),(16373,60085,60116,'OP_StopTrackingMsg',394,1),(16374,60085,60116,'OP_SubmitCharCust',565,1),(16375,60085,60116,'OP_SupplyDepot',745,1),(16376,60085,60116,'OP_SysClient',220,1),(16377,60085,60116,'OP_TeleportWithinZoneMsg',81,1),(16378,60085,60116,'OP_TeleportWithinZoneNoReloadMsg',82,1),(16379,60085,60116,'OP_TintWidgetsMsg',172,1),(16380,60085,60116,'OP_TitleUpdateMsg',387,1),(16381,60085,60116,'OP_TrackingUpdateMsg',392,1),(16382,60085,60116,'OP_TradeskillList',714,1),(16383,60085,60116,'OP_TraitsList',737,1),(16384,60085,60116,'OP_UIEvent',530,1),(16385,60085,60116,'OP_UIResetMsg',176,1),(16386,60085,60116,'OP_UISettingsResponseMsg',175,1),(16387,60085,60116,'OP_Unknown',770,1),(16388,60085,60116,'OP_UnknownNpcMsg',376,1),(16389,60085,60116,'OP_UpdateActivePublicZonesMsg',375,1),(16390,60085,60116,'OP_UpdateCharacterSheetMsg',65,1),(16391,60085,60116,'OP_UpdateClientPredFlagsMsg',248,1),(16392,60085,60116,'OP_UpdateDebugRadiiMsg',382,1),(16393,60085,60116,'OP_UpdateGroupMemberDataMsg',391,1),(16394,60085,60116,'OP_UpdateHouseAccessDataMsg',146,1),(16395,60085,60116,'OP_UpdateHouseDataMsg',145,1),(16396,60085,60116,'OP_UpdateInventoryMsg',70,1),(16397,60085,60116,'OP_UpdateItemCreationProcessUIMsg',226,1),(16398,60085,60116,'OP_UpdateMotdMsg',210,1),(16399,60085,60116,'OP_UpdateOpportunityMsg',77,1),(16400,60085,60116,'OP_UpdatePositionMsg',41,1),(16401,60085,60116,'OP_UpdateRaidMsg',384,1),(16402,60085,60116,'OP_UpdateRecipeBookMsg',72,1),(16403,60085,60116,'OP_UpdateSkillBookMsg',75,1),(16404,60085,60116,'OP_UpdateSkillsMsg',76,1),(16405,60085,60116,'OP_UpdateSpellBookMsg',68,1),(16406,60085,60116,'OP_UpdateTargetLocMsg',64,1),(16407,60085,60116,'OP_UpdateTargetMsg',63,1),(16408,60085,60116,'OP_UpdateTitleCmd',497,1),(16409,60085,60116,'OP_UseAdornment',725,1),(16410,60085,60116,'OP_VideoUploaded',582,1),(16411,60085,60116,'OP_VoiceChatChannel',523,1),(16412,60085,60116,'OP_VoiceChatServer',741,1),(16413,60085,60116,'OP_WaypointReplyMsg',352,1),(16414,60085,60116,'OP_WaypointRequestMsg',351,1),(16415,60085,60116,'OP_WaypointSelectMsg',353,1),(16416,60085,60116,'OP_WaypointUpdateMsg',354,1),(16417,60085,60116,'OP_Weakness',586,1),(16418,60085,60116,'OP_WhoQueryReplyMsg',56,1),(16419,60085,60116,'OP_WhoQueryRequestMsg',55,1),(16420,60085,60116,'OP_WorldDataChangeMsg',413,1),(16421,60085,60116,'OP_WorldDataUpdateMsg',239,1),(16422,60085,60116,'OP_WorldListMsg',8,1),(16423,60085,60116,'OP_WorldPingMsg',402,1),(16424,60085,60116,'OP_WorldShutdownUpdateMsg',406,1),(16425,60085,60116,'OP_WorldStatusChangeMsg',6,1),(16426,60085,60116,'OP_WorldTravelAvail',575,1),(16427,60085,60116,'OP_WSAcctLockStatusMsg',207,1),(16428,60085,60116,'OP_WSCreateCharacterReplyMsg',14,1),(16429,60085,60116,'OP_WSCreateCharacterRequestMsg',13,1),(16430,60085,60116,'OP_WSLoginRequestMsg',2,1),(16431,60085,60116,'OP_WSServerHideMsg',369,1),(16432,60085,60116,'OP_WSServerLockMsg',367,1),(16433,60085,60116,'OP_WSStatusReplyMsg',5,1),(16434,60085,60116,'OP_ZoneBgInstanceList',571,1),(16435,60085,60116,'OP_ZoneInfoMsg',35,1),(16436,60085,60116,'OP_ZoneInstanceCreateReplyMsg',32,1),(16437,60085,60116,'OP_ZoneInstanceDestroyedMsg',33,1),(16438,60085,60116,'OP_ZoneMOTDMsg',47,1),(16439,60085,60116,'OP_ZonesStatusMsg',105,1),(16440,60085,60116,'OP_ZonesStatusRequestMsg',104,1),(16441,60085,60116,'OP_ZoneToFriendReplyMsg',287,1),(16442,60085,60116,'OP_ZoneToFriendRequestMsg',286,1),(16443,60127,60158,'OP_AchievementUpdateMsg',752,1),(16444,60127,60158,'OP_AddSocialStructureStandingMsg',253,1),(16445,60127,60158,'OP_AdvancementRequestMsg',398,1),(16446,60127,60158,'OP_AdventureList',492,1),(16447,60127,60158,'OP_AFKUpdateMsg',374,1),(16448,60127,60158,'OP_AfterInvSpellUpdate',71,1),(16449,60127,60158,'OP_AllCharactersDescReplyMsg',10,1),(16450,60127,60158,'OP_AllCharactersDescRequestMsg',9,1),(16451,60127,60158,'OP_AllWSDescRequestMsg',7,1),(16452,60127,60158,'OP_AnonUpdateMsg',375,1),(16453,60127,60158,'OP_ArenaCreate',460,1),(16454,60127,60158,'OP_ArenaGameTypesMsg',449,1),(16455,60127,60158,'OP_ArenaList',461,1),(16456,60127,60158,'OP_ArenaWindow',469,1),(16457,60127,60158,'OP_AttackAllowed',504,1),(16458,60127,60158,'OP_AttackNotAllowed',505,1),(16459,60127,60158,'OP_AuctionAbortMsg',440,1),(16460,60127,60158,'OP_AuctionCharacter',437,1),(16461,60127,60158,'OP_AuctionCharacterReply',438,1),(16462,60127,60158,'OP_AuctionCoin',435,1),(16463,60127,60158,'OP_AuctionCoinReply',436,1),(16464,60127,60158,'OP_AuctionCommitMsg',439,1),(16465,60127,60158,'OP_AuctionItem',433,1),(16466,60127,60158,'OP_AuctionItemReply',434,1),(16467,60127,60158,'OP_AuditAuctionEventMsg',450,1),(16468,60127,60158,'OP_AvatarCreatedMsg',48,1),(16469,60127,60158,'OP_AvatarDestroyedMsg',49,1),(16470,60127,60158,'OP_AvatarUpdateMsg',364,1),(16471,60127,60158,'OP_BadLanguageFilter',523,1),(16472,60127,60158,'OP_BagOptions',506,1),(16473,60127,60158,'OP_BeginItemCreationMsg',224,1),(16474,60127,60158,'OP_BeginTrackingMsg',394,1),(16475,60127,60158,'OP_BioUpdateMsg',366,1),(16476,60127,60158,'OP_BrokerAddBag',296,1),(16477,60127,60158,'OP_BrokerRemoveBag',297,1),(16478,60127,60158,'OP_BrokerSellList',695,1),(16479,60127,60158,'OP_BuyPlayerHouseMsg',153,1),(16480,60127,60158,'OP_BuyPlayerHouseTintMsg',154,1),(16481,60127,60158,'OP_CampAbortedMsg',54,1),(16482,60127,60158,'OP_CampClientMsg',391,1),(16483,60127,60158,'OP_CampStartedMsg',53,1),(16484,60127,60158,'OP_CancelCreateFromRecipeMsg',223,1),(16485,60127,60158,'OP_CancelledFeignMsg',219,1),(16486,60127,60158,'OP_CancelMoveObjectModeMsg',166,1),(16487,60127,60158,'OP_CancelSpellCast',493,1),(16488,60127,60158,'OP_ChangeServerControlFlagMsg',250,1),(16489,60127,60158,'OP_ChangeZoneMsg',79,1),(16490,60127,60158,'OP_CharacterAchievements',751,1),(16491,60127,60158,'OP_CharacterCreatedDungeons',555,1),(16492,60127,60158,'OP_CharacterCurrency',750,1),(16493,60127,60158,'OP_CharacterHousingList',511,1),(16494,60127,60158,'OP_CharacterLinkdeadMsg',418,1),(16495,60127,60158,'OP_CharacterMerc',67,1),(16496,60127,60158,'OP_CharacterMounts',588,1),(16497,60127,60158,'OP_CharacterPet',66,1),(16498,60127,60158,'OP_CharNameChangedMsg',356,1),(16499,60127,60158,'OP_CharRenamed',716,1),(16500,60127,60158,'OP_CharTransferCommitReplyMsg',426,1),(16501,60127,60158,'OP_CharTransferCommitRequestMsg',424,1),(16502,60127,60158,'OP_CharTransferReplyMsg',422,1),(16503,60127,60158,'OP_CharTransferRequestMsg',421,1),(16504,60127,60158,'OP_CharTransferRollbackReplyMsg',425,1),(16505,60127,60158,'OP_CharTransferRollbackRequestMsg',423,1),(16506,60127,60158,'OP_CharTransferStartReplyMsg',420,1),(16507,60127,60158,'OP_CharTransferStartRequestMsg',419,1),(16508,60127,60158,'OP_CharTransferValidateReplyMsg',442,1),(16509,60127,60158,'OP_CharTransferValidateRequestMsg',441,1),(16510,60127,60158,'OP_ChatCreateChannelMsg',289,1),(16511,60127,60158,'OP_ChatFiltersMsg',338,1),(16512,60127,60158,'OP_ChatJoinChannelMsg',290,1),(16513,60127,60158,'OP_ChatLeaveChannelMsg',292,1),(16514,60127,60158,'OP_ChatRelationshipUpdateMsg',187,1),(16515,60127,60158,'OP_ChatSendFriendsMsg',299,1),(16516,60127,60158,'OP_ChatSendIgnoresMsg',300,1),(16517,60127,60158,'OP_ChatTellChannelMsg',293,1),(16518,60127,60158,'OP_ChatTellUserMsg',294,1),(16519,60127,60158,'OP_ChatToggleFriendMsg',295,1),(16520,60127,60158,'OP_ChatToggleIgnoreMsg',298,1),(16521,60127,60158,'OP_ChatWhoChannelMsg',291,1),(16522,60127,60158,'OP_ClearDataMsg',100,1),(16523,60127,60158,'OP_ClearForLandingMsg',495,1),(16524,60127,60158,'OP_ClearForTakeOffMsg',194,1),(16525,60127,60158,'OP_ClientCmdMsg',60,1),(16526,60127,60158,'OP_ClientFellMsg',389,1),(16527,60127,60158,'OP_ClientIdleBeginMsg',409,1),(16528,60127,60158,'OP_ClientIdleEndMsg',410,1),(16529,60127,60158,'OP_ClientInDeathRegionMsg',390,1),(16530,60127,60158,'OP_ClientTeleportRequestMsg',80,1),(16531,60127,60158,'OP_ClientTeleportToLocationMsg',248,1),(16532,60127,60158,'OP_CloseGroupInviteWindowMsg',401,1),(16533,60127,60158,'OP_CollectAllHouseItemsMsg',155,1),(16534,60127,60158,'OP_ConsignItemRequestMsg',129,1),(16535,60127,60158,'OP_ConsignItemResponseMsg',130,1),(16536,60127,60158,'OP_ConsignmentCloseStoreMsg',128,1),(16537,60127,60158,'OP_ConsignRemoveItemsMsg',382,1),(16538,60127,60158,'OP_ConsignViewCreateMsg',379,1),(16539,60127,60158,'OP_ConsignViewGetPageMsg',380,1),(16540,60127,60158,'OP_ConsignViewReleaseMsg',381,1),(16541,60127,60158,'OP_ConsignViewSortMsg',387,1),(16542,60127,60158,'OP_CorruptedClientMsg',413,1),(16543,60127,60158,'OP_CreateBoatTransportsMsg',254,1),(16544,60127,60158,'OP_CreateCharacterDungeon',551,1),(16545,60127,60158,'OP_CreateCharacterReplyMsg',12,1),(16546,60127,60158,'OP_CreateCharacterRequestMsg',11,1),(16547,60127,60158,'OP_CreateCharFromCBBReplyMsg',430,1),(16548,60127,60158,'OP_CreateCharFromCBBRequestMsg',429,1),(16549,60127,60158,'OP_CreateGuildReplyMsg',123,1),(16550,60127,60158,'OP_CreateGuildRequestMsg',121,1),(16551,60127,60158,'OP_CreateZoneInstanceMsg',31,1),(16552,60127,60158,'OP_CsCategoryRequestMsg',371,1),(16553,60127,60158,'OP_CsCategoryResponseMsg',372,1),(16554,60127,60158,'OP_CSTicketAddCommentMsg',237,1),(16555,60127,60158,'OP_CSTicketChangeNotificationMsg',239,1),(16556,60127,60158,'OP_CSTicketCommentRequestMsg',234,1),(16557,60127,60158,'OP_CSTicketCommentResponseMsg',235,1),(16558,60127,60158,'OP_CSTicketCreateMsg',236,1),(16559,60127,60158,'OP_CSTicketDeleteMsg',238,1),(16560,60127,60158,'OP_CSTicketHeaderRequestMsg',232,1),(16561,60127,60158,'OP_CSTicketInfoMsg',233,1),(16562,60127,60158,'OP_CSToolAccessResponseMsg',392,1),(16563,60127,60158,'OP_CSToolsRequestMsg',251,1),(16564,60127,60158,'OP_CSToolsResponseMsg',252,1),(16565,60127,60158,'OP_CurrentPet',489,1),(16566,60127,60158,'OP_CustomizationPurchaseRequestMs',170,1),(16567,60127,60158,'OP_CustomizationReplyMsg',172,1),(16568,60127,60158,'OP_CustomizationSetRequestMsg',171,1),(16569,60127,60158,'OP_CustomizeHouseDisplay',741,1),(16570,60127,60158,'OP_DailyObjectives',601,1),(16571,60127,60158,'OP_DefaultGroupOptionsMsg',201,1),(16572,60127,60158,'OP_DefaultGroupOptionsRequestMsg',200,1),(16573,60127,60158,'OP_DeleteCharacterReplyMsg',19,1),(16574,60127,60158,'OP_DeleteCharacterRequestMsg',18,1),(16575,60127,60158,'OP_DeleteGuildMsg',126,1),(16576,60127,60158,'OP_DestUpdateReq',213,1),(16577,60127,60158,'OP_DialogCloseMsg',112,1),(16578,60127,60158,'OP_DialogSelectMsg',111,1),(16579,60127,60158,'OP_DispatchClientCmdMsg',62,1),(16580,60127,60158,'OP_DispatchESMsg',61,1),(16581,60127,60158,'OP_DispatchMsg',455,1),(16582,60127,60158,'OP_DispatchSpellCmdMsg',182,1),(16583,60127,60158,'OP_DisplayDebugNLLPointsMsg',258,1),(16584,60127,60158,'OP_DisplayEventMsg',456,1),(16585,60127,60158,'OP_DisplayExchangeScreenMsg',448,1),(16586,60127,60158,'OP_DisplayGroupOptionsScreenMsg',203,1),(16587,60127,60158,'OP_DisplayInnVisitScreenMsg',205,1),(16588,60127,60158,'OP_DisplayMailScreenMsg',408,1),(16589,60127,60158,'OP_DisplayTSEventReactionMsg',228,1),(16590,60127,60158,'OP_DisplayWarningMsg',269,1),(16591,60127,60158,'OP_DoneLoadingEntityResourcesMsg',38,1),(16592,60127,60158,'OP_DoneLoadingZoneResourcesMsg',36,1),(16593,60127,60158,'OP_DoneSendingInitialEntitiesMsg',37,1),(16594,60127,60158,'OP_DressingRoom',514,1),(16595,60127,60158,'OP_DumpSchedulerMsg',206,1),(16596,60127,60158,'OP_DungeonMakerEnter',552,1),(16597,60127,60158,'OP_DungeonMakerItemRequest',554,1),(16598,60127,60158,'OP_DungeonMakerItemResponse',586,1),(16599,60127,60158,'OP_DungeonMakerToolboxList',556,1),(16600,60127,60158,'OP_DungeonMakerUnknown',557,1),(16601,60127,60158,'OP_DungeonMakerUnknown1',558,1),(16602,60127,60158,'OP_DungeonPlayAsAvatarList',755,1),(16603,60127,60158,'OP_DungeonPlayAsAvatarSelected',756,1),(16604,60127,60158,'OP_EncounterBrokenMsg',267,1),(16605,60127,60158,'OP_EnterHouseMsg',157,1),(16606,60127,60158,'OP_EnterMoveObjectModeMsg',164,1),(16607,60127,60158,'OP_EntityVerbsReplyMsg',184,1),(16608,60127,60158,'OP_EntityVerbsRequestMsg',183,1),(16609,60127,60158,'OP_EntityVerbsVerbMsg',185,1),(16610,60127,60158,'OP_EqArenaResultsCmd',706,1),(16611,60127,60158,'OP_EqAvailWorldChannelsCmd',693,1),(16612,60127,60158,'OP_EqBetaCopyRequest',612,1),(16613,60127,60158,'OP_EqCannedEmoteCmd',635,1),(16614,60127,60158,'OP_EqChatChannelUpdateCmd',691,1),(16615,60127,60158,'OP_EqChoiceWinCmd',672,1),(16616,60127,60158,'OP_EqCloseWindowCmd',664,1),(16617,60127,60158,'OP_EqCollectionFilterCmd',651,1),(16618,60127,60158,'OP_EqCollectionItemCmd',652,1),(16619,60127,60158,'OP_EqCollectionUpdateCmd',650,1),(16620,60127,60158,'OP_EqConsignmentItemsCmd',696,1),(16621,60127,60158,'OP_EqCreateGhostCmd',617,1),(16622,60127,60158,'OP_EqCreateListBoxCmd',632,1),(16623,60127,60158,'OP_EqCreateSignWidgetCmd',619,1),(16624,60127,60158,'OP_EqCreateWidgetCmd',618,1),(16625,60127,60158,'OP_EqDebugPVDCmd',685,1),(16626,60127,60158,'OP_EqDestroyGhostCmd',620,1),(16627,60127,60158,'OP_EqDialogCloseCmd',648,1),(16628,60127,60158,'OP_EqDialogOpenCmd',647,1),(16629,60127,60158,'OP_EqDisplaySpellFailCmd',668,1),(16630,60127,60158,'OP_EqDisplayTextCmd',616,1),(16631,60127,60158,'OP_EqDrawablePathGraphCmd',646,1),(16632,60127,60158,'OP_EqEnableGameEventCmd',678,1),(16633,60127,60158,'OP_EqEnableWindowCmd',680,1),(16634,60127,60158,'OP_EqExamineInfoCmd',663,1),(16635,60127,60158,'OP_EqFactionUpdateCmd',649,1),(16636,60127,60158,'OP_EqFlashWindowCmd',681,1),(16637,60127,60158,'OP_EqGetProbsCmd',689,1),(16638,60127,60158,'OP_EqGroupMemberRemovedCmd',642,1),(16639,60127,60158,'OP_EqGuildBankEventActionCmd',707,1),(16640,60127,60158,'OP_EqGuildBankExamineInfoCmd',708,1),(16641,60127,60158,'OP_EqHearChainEffectCmd',643,1),(16642,60127,60158,'OP_EqHearChatCmd',615,1),(16643,60127,60158,'OP_EqHearCombatCmd',624,1),(16644,60127,60158,'OP_EqHearConsiderCmd',630,1),(16645,60127,60158,'OP_EqHearDeathCmd',641,1),(16646,60127,60158,'OP_EQHearDispellCmd',753,1),(16647,60127,60158,'OP_EqHearDrowningCmd',640,1),(16648,60127,60158,'OP_EqHearHealCmd',690,1),(16649,60127,60158,'OP_EqHearPlayFlavorCmd',683,1),(16650,60127,60158,'OP_EQHearProcCmd',626,1),(16651,60127,60158,'OP_EQHearResEffectCmd',627,1),(16652,60127,60158,'OP_EqHearSpellCastCmd',625,1),(16653,60127,60158,'OP_EqHearSpellFizzleCmd',629,1),(16654,60127,60158,'OP_EqHearSpellInterruptCmd',628,1),(16655,60127,60158,'OP_EqHearSpellNoLandCmd',709,1),(16656,60127,60158,'OP_EQHearThreatCmd',747,1),(16657,60127,60158,'OP_EqHelpPathClearCmd',661,1),(16658,60127,60158,'OP_EqHelpPathCmd',660,1),(16659,60127,60158,'OP_EqInspectPCResultsCmd',645,1),(16660,60127,60158,'OP_EqInstructionWindowCloseCmd',675,1),(16661,60127,60158,'OP_EqInstructionWindowCmd',674,1),(16662,60127,60158,'OP_EqInstructionWindowGoalCmd',676,1),(16663,60127,60158,'OP_EqInstructionWindowTaskCmd',677,1),(16664,60127,60158,'OP_EqJunctionListCmd',666,1),(16665,60127,60158,'OP_EqMapExplorationCmd',699,1),(16666,60127,60158,'OP_EqMentoring',654,1),(16667,60127,60158,'OP_EqPlaySound3DCmd',638,1),(16668,60127,60158,'OP_EqPlaySoundCmd',637,1),(16669,60127,60158,'OP_EqPlayVoiceCmd',639,1),(16670,60127,60158,'OP_EqQuestGroupCmd',656,1),(16671,60127,60158,'OP_EqQuestionnaireCmd',687,1),(16672,60127,60158,'OP_EqQuestJournalReplyCmd',655,1),(16673,60127,60158,'OP_EqQuestJournalUpdateCmd',653,1),(16674,60127,60158,'OP_EqReceiveOfferCmd',644,1),(16675,60127,60158,'OP_EqResurrectedCmd',671,1),(16676,60127,60158,'OP_EqSetControlGhostCmd',622,1),(16677,60127,60158,'OP_EqSetDebugPathPointsCmd',633,1),(16678,60127,60158,'OP_EqSetDefaultVerbCmd',673,1),(16679,60127,60158,'OP_EqSetPOVGhostCmd',623,1),(16680,60127,60158,'OP_EqShowBookCmd',686,1),(16681,60127,60158,'OP_EqShowDeathWindowCmd',667,1),(16682,60127,60158,'OP_EqShowWindowCmd',679,1),(16683,60127,60158,'OP_EqSpellCastEndCmd',670,1),(16684,60127,60158,'OP_EqSpellCastStartCmd',669,1),(16685,60127,60158,'OP_EqSpellMoveToRangeAndRetryCmd',701,1),(16686,60127,60158,'OP_EqStartBrokerCmd',698,1),(16687,60127,60158,'OP_EqStateCmd',636,1),(16688,60127,60158,'OP_EqStoreLogCmd',700,1),(16689,60127,60158,'OP_EqUpdateBankCmd',662,1),(16690,60127,60158,'OP_EqUpdateGhostCmd',621,1),(16691,60127,60158,'OP_EqUpdateLootCmd',665,1),(16692,60127,60158,'OP_EqUpdateMerchantCmd',657,1),(16693,60127,60158,'OP_EqUpdatePlayerMailCmd',702,1),(16694,60127,60158,'OP_EqUpdatePlayerTradeCmd',659,1),(16695,60127,60158,'OP_EqUpdateSignWidgetCmd',684,1),(16696,60127,60158,'OP_EqUpdateStoreCmd',658,1),(16697,60127,60158,'OP_EqUpdateSubClassesCmd',631,1),(16698,60127,60158,'OP_EqUpdateTargetCmd',694,1),(16699,60127,60158,'OP_EqWhoChannelQueryReplyCmd',692,1),(16700,60127,60158,'OP_ESInitMsg',27,1),(16701,60127,60158,'OP_ESLoginRequestMsg',3,1),(16702,60127,60158,'OP_ESReadyForClientsMsg',28,1),(16703,60127,60158,'OP_ESStatusMsg',102,1),(16704,60127,60158,'OP_ESWeatherRequestEndMsg',107,1),(16705,60127,60158,'OP_ESWeatherRequestMsg',106,1),(16706,60127,60158,'OP_ESZoneInstanceStatusMsg',103,1),(16707,60127,60158,'OP_ExamineConsignmentRequestMsg',174,1),(16708,60127,60158,'OP_ExamineConsignmentResponseMsg',175,1),(16709,60127,60158,'OP_ExamineInfoRequestMsg',259,1),(16710,60127,60158,'OP_ExamineItemRequestMsg',198,1),(16711,60127,60158,'OP_ExitHouseMsg',158,1),(16712,60127,60158,'OP_ExpectClientAsCharacterReplyMs',24,1),(16713,60127,60158,'OP_ExpectClientAsCharacterRequest',34,1),(16714,60127,60158,'OP_ExpPurchWindow',732,1),(16715,60127,60158,'OP_FellowshipExpMsg',125,1),(16716,60127,60158,'OP_FlightPathsMsg',417,1),(16717,60127,60158,'OP_GameWorldTimeMsg',45,1),(16718,60127,60158,'OP_PaperdollImage',581,1),(16719,60127,60158,'OP_GetAuctionAssetIDMsg',445,1),(16720,60127,60158,'OP_GetAuctionAssetIDReplyMsg',446,1),(16721,60127,60158,'OP_GetAvatarAccessRequestForCSToo',397,1),(16722,60127,60158,'OP_GetCharacterSerializedReplyMsg',428,1),(16723,60127,60158,'OP_GetCharacterSerializedRequestM',427,1),(16724,60127,60158,'OP_GroupCreatedMsg',90,1),(16725,60127,60158,'OP_GroupDestroyedMsg',91,1),(16726,60127,60158,'OP_GroupLeaderChangedMsg',95,1),(16727,60127,60158,'OP_GroupMemberAddedMsg',92,1),(16728,60127,60158,'OP_GroupMemberRemovedMsg',93,1),(16729,60127,60158,'OP_GroupOptionsMsg',202,1),(16730,60127,60158,'OP_GroupRemovedFromGroupMsg',94,1),(16731,60127,60158,'OP_GroupResendOOZDataMsg',96,1),(16732,60127,60158,'OP_GroupSettingsChangedMsg',97,1),(16733,60127,60158,'OP_GuildBankActionMsg',278,1),(16734,60127,60158,'OP_GuildBankActionResponseMsg',279,1),(16735,60127,60158,'OP_GuildBankEventListMsg',283,1),(16736,60127,60158,'OP_GuildBankItemDetailsRequestMsg',280,1),(16737,60127,60158,'OP_GuildBankItemDetailsResponseMs',281,1),(16738,60127,60158,'OP_GuildBankUpdateMsg',282,1),(16739,60127,60158,'OP_GuildEventActionMsg',273,1),(16740,60127,60158,'OP_GuildEventAddMsg',272,1),(16741,60127,60158,'OP_GuildEventDetailsMsg',276,1),(16742,60127,60158,'OP_GuildEventListMsg',274,1),(16743,60127,60158,'OP_GuildEventMsg',271,1),(16744,60127,60158,'OP_GuildMembershipResponseMsg',361,1),(16745,60127,60158,'OP_GuildRecruiting',712,1),(16746,60127,60158,'OP_GuildRecruitingDetails',713,1),(16747,60127,60158,'OP_GuildRecruitingImage',714,1),(16748,60127,60158,'OP_GuildRecruitingMemberInfo',711,1),(16749,60127,60158,'OP_GuildsayMsg',124,1),(16750,60127,60158,'OP_GuildStatusUpdate',705,1),(16751,60127,60158,'OP_GuildUpdateMsg',127,1),(16752,60127,60158,'OP_HeritageMsg',10004,1),(16753,60127,60158,'OP_HideIllusionsMsg',197,1),(16754,60127,60158,'OP_HouseAccessRemoveMsg',161,1),(16755,60127,60158,'OP_HouseAccessSetMsg',160,1),(16756,60127,60158,'OP_HouseCustomizationScreenMsg',169,1),(16757,60127,60158,'OP_HouseDefaultAccessSetMsg',159,1),(16758,60127,60158,'OP_HouseDeletedRemotelyMsg',145,1),(16759,60127,60158,'OP_HouseItemsList',488,1),(16760,60127,60158,'OP_HousingDataChangedMsg',431,1),(16761,60127,60158,'OP_HousingRestoreMsg',432,1),(16762,60127,60158,'OP_InspectPlayerMsg',367,1),(16763,60127,60158,'OP_InspectPlayerRequestMsg',454,1),(16764,60127,60158,'OP_InviteRequestMsg',451,1),(16765,60127,60158,'OP_InviteResponseMsg',452,1),(16766,60127,60158,'OP_InviteTargetResponseMsg',453,1),(16767,60127,60158,'OP_JoinGuildNotifyMsg',363,1),(16768,60127,60158,'OP_JournalQuestStoryline',754,1),(16769,60127,60158,'OP_KeymapDataMsg',180,1),(16770,60127,60158,'OP_KeymapLoadMsg',178,1),(16771,60127,60158,'OP_KeymapNoneMsg',179,1),(16772,60127,60158,'OP_KeymapSaveMsg',181,1),(16773,60127,60158,'OP_KnowledgebaseRequestMsg',230,1),(16774,60127,60158,'OP_KnowledgebaseResponseMsg',231,1),(16775,60127,60158,'OP_KnowledgeWindowSlotMappingMsg',373,1),(16776,60127,60158,'OP_KnownLanguagesMsg',242,1),(16777,60127,60158,'OP_Launchpad',579,1),(16778,60127,60158,'OP_LeaveGuildNotifyMsg',362,1),(16779,60127,60158,'OP_LevelChangedMsg',265,1),(16780,60127,60158,'OP_LFGGroupSearch',508,1),(16781,60127,60158,'OP_LFGUpdateMsg',522,1),(16782,60127,60158,'OP_LikeOption',139,1),(16783,60127,60158,'OP_LoadCalendarEvents',582,1),(16784,60127,60158,'OP_LoadWelcomeWindow',564,1),(16785,60127,60158,'OP_LoginByNumRequestMsg',1,1),(16786,60127,60158,'OP_LoginReplyMsg',4,1),(16787,60127,60158,'OP_LoginRequestMsg',0,1),(16788,60127,60158,'OP_LootItemsRequestMsg',188,1),(16789,60127,60158,'OP_Lottery',710,1),(16790,60127,60158,'OP_LSCheckAcctLockMsg',207,1),(16791,60127,60158,'OP_LsClientAlertlogReplyMsg',246,1),(16792,60127,60158,'OP_LsClientBaselogReplyMsg',244,1),(16793,60127,60158,'OP_LsClientCrashlogReplyMsg',245,1),(16794,60127,60158,'OP_LsClientVerifylogReplyMsg',247,1),(16795,60127,60158,'OP_LsRequestClientCrashLogMsg',243,1),(16796,60127,60158,'OP_LSServerLockMsg',369,1),(16797,60127,60158,'OP_MacroInitMsg',262,1),(16798,60127,60158,'OP_MacroUpdateMsg',263,1),(16799,60127,60158,'OP_MailCommitSendMessageMsg',348,1),(16800,60127,60158,'OP_MailDeleteMessageMsg',344,1),(16801,60127,60158,'OP_MailEventNotificationMsg',415,1),(16802,60127,60158,'OP_MailGetHeadersReplyMsg',345,1),(16803,60127,60158,'OP_MailGetMessageMsg',342,1),(16804,60127,60158,'OP_MailGetMessageReplyMsg',346,1),(16805,60127,60158,'OP_MailRemoveAttachFromMailMsg',350,1),(16806,60127,60158,'OP_MailSendMessageMsg',343,1),(16807,60127,60158,'OP_MailSendMessageReplyMsg',347,1),(16808,60127,60158,'OP_MailSendSystemMessageMsg',349,1),(16809,60127,60158,'OP_MakeGroupLeaderMsg',89,1),(16810,60127,60158,'OP_MapFogDataInitMsg',399,1),(16811,60127,60158,'OP_MapFogDataUpdateMsg',400,1),(16812,60127,60158,'OP_MapRequest',525,1),(16813,60127,60158,'OP_MarketAddFundsReply',533,1),(16814,60127,60158,'OP_MarketAddFundsRequest',532,1),(16815,60127,60158,'OP_MarketFundsUpdate',530,1),(16816,60127,60158,'OP_MarketPlaceItems',543,1),(16817,60127,60158,'OP_MarketPlacePrices',536,1),(16818,60127,60158,'OP_MarketPurchase',535,1),(16819,60127,60158,'OP_MentorPopup',562,1),(16820,60127,60158,'OP_MercHireWindow',757,1),(16821,60127,60158,'OP_MercUnknown',758,1),(16822,60127,60158,'OP_MigrateBoatTransportMsg',256,1),(16823,60127,60158,'OP_MigrateBoatTransportReplyMsg',257,1),(16824,60127,60158,'OP_MigrateClientToZoneReplyMsg',84,1),(16825,60127,60158,'OP_MigrateClientToZoneRequestMsg',83,1),(16826,60127,60158,'OP_ModifyGuildMsg',270,1),(16827,60127,60158,'OP_MonitorCharacterListMsg',58,1),(16828,60127,60158,'OP_MonitorCharacterListRequestMsg',59,1),(16829,60127,60158,'OP_MonitorReplyMsg',57,1),(16830,60127,60158,'OP_MOTDMsg',46,1),(16831,60127,60158,'OP_MoveableObjectPlacementCriteri',163,1),(16832,60127,60158,'OP_MoveLogUpdateMsg',404,1),(16833,60127,60158,'OP_NotifyApprenticeStoppedMentori',412,1),(16834,60127,60158,'OP_OfferQuestMsg',405,1),(16835,60127,60158,'OP_OnscreenMsgMsg',268,1),(16836,60127,60158,'OP_OpenCharCust',565,1),(16837,60127,60158,'OP_OutOfZoneMemberDataMsg',98,1),(16838,60127,60158,'OP_PayHouseUpkeepMsg',162,1),(16839,60127,60158,'OP_PerformCameraShakeMsg',217,1),(16840,60127,60158,'OP_PerformPlayerKnockbackMsg',216,1),(16841,60127,60158,'OP_PetOptions',204,1),(16842,60127,60158,'OP_PetOptionsResponse',585,1),(16843,60127,60158,'OP_PlayCharacterReplyMsg',21,1),(16844,60127,60158,'OP_PlayCharacterRequestMsg',20,1),(16845,60127,60158,'OP_PlayerHouseAccessUpdateMsg',150,1),(16846,60127,60158,'OP_PlayerHouseBaseScreenMsg',148,1),(16847,60127,60158,'OP_PlayerHouseCloseUIMsg',152,1),(16848,60127,60158,'OP_PlayerHouseDisplayStatusMsg',151,1),(16849,60127,60158,'OP_PlayerHousePurchaseScreenMsg',149,1),(16850,60127,60158,'OP_PlayerMadeInstances',143,1),(16851,60127,60158,'OP_PlayerMadeInstancesScreen',142,1),(16852,60127,60158,'OP_PlayerPollAnswer',561,1),(16853,60127,60158,'OP_PlayerPollPopup',560,1),(16854,60127,60158,'OP_PlayLon',515,1),(16855,60127,60158,'OP_PointOfInterest',736,1),(16856,60127,60158,'OP_PointOfInterest2',737,1),(16857,60127,60158,'OP_PopulateSkillMapsMsg',218,1),(16858,60127,60158,'OP_PositionBoatTransportMsg',255,1),(16859,60127,60158,'OP_PositionMoveableObject',165,1),(16860,60127,60158,'OP_PostPossessionMsg',458,1),(16861,60127,60158,'OP_PredictionUpdateMsg',39,1),(16862,60127,60158,'OP_PrePossessionMsg',457,1),(16863,60127,60158,'OP_PromoFlagsDetailsMsg',378,1),(16864,60127,60158,'OP_PublishHouse',141,1),(16865,60127,60158,'OP_PurchaseConsignmentLoreCheckRe',411,1),(16866,60127,60158,'OP_PurchaseConsignmentRequestMsg',131,1),(16867,60127,60158,'OP_QueAllBgSolo',568,1),(16868,60127,60158,'OP_QuestionnaireMsg',264,1),(16869,60127,60158,'OP_QuestJournalInspectMsg',116,1),(16870,60127,60158,'OP_QuestJournalOpenMsg',115,1),(16871,60127,60158,'OP_QuestJournalSetVisibleMsg',117,1),(16872,60127,60158,'OP_QuestJournalWaypointMsg',118,1),(16873,60127,60158,'OP_QuestReward',324,1),(16874,60127,60158,'OP_QuickbarInitMsg',260,1),(16875,60127,60158,'OP_QuickbarUpdateMsg',261,1),(16876,60127,60158,'OP_RaceRestrictionMsg',443,1),(16877,60127,60158,'OP_ReadBookPageMsg',199,1),(16878,60127,60158,'OP_ReadyForTakeOffMsg',195,1),(16879,60127,60158,'OP_ReadyToZoneMsg',86,1),(16880,60127,60158,'OP_RecipeBook',544,1),(16881,60127,60158,'OP_RecipeDetailsMsg',74,1),(16882,60127,60158,'OP_RecipeList',748,1),(16883,60127,60158,'OP_RecipeListUnknown',597,1),(16884,60127,60158,'OP_RelinquishHouseMsg',156,1),(16885,60127,60158,'OP_ReloadLocalizedTxtMsg',359,1),(16886,60127,60158,'OP_RemoteCmdMsg',44,1),(16887,60127,60158,'OP_RemoveClientFromGroupMsg',87,1),(16888,60127,60158,'OP_RemoveConcentrationMsg',114,1),(16889,60127,60158,'OP_RemoveGroupFromGroupMsg',88,1),(16890,60127,60158,'OP_RemoveSpellEffectMsg',113,1),(16891,60127,60158,'OP_RenameGuildMsg',286,1),(16892,60127,60158,'OP_ReplaceableSubMeshesMsg',168,1),(16893,60127,60158,'OP_ReportMsg',384,1),(16894,60127,60158,'OP_RequestCampMsg',52,1),(16895,60127,60158,'OP_RequestGuildBankEventDetailsMs',284,1),(16896,60127,60158,'OP_RequestGuildEventDetailsMsg',275,1),(16897,60127,60158,'OP_RequestGuildInfoMsg',277,1),(16898,60127,60158,'OP_RequestGuildMembershipMsg',360,1),(16899,60127,60158,'OP_RequestHelpRepathMsg',209,1),(16900,60127,60158,'OP_RequestRecipeDetailsMsg',73,1),(16901,60127,60158,'OP_RequestTargetLocMsg',210,1),(16902,60127,60158,'OP_Research',749,1),(16903,60127,60158,'OP_ResendWorldChannelsMsg',447,1),(16904,60127,60158,'OP_ReskinCharacterRequestMsg',15,1),(16905,60127,60158,'OP_RestartZoneMsg',416,1),(16906,60127,60158,'OP_RewardPackMsg',285,1),(16907,60127,60158,'OP_SatMsg',192,1),(16908,60127,60158,'OP_SavageBarInitMsg',584,1),(16909,60127,60158,'OP_SelectZoneTeleporterDestinatio',358,1),(16910,60127,60158,'OP_SendLatestRequestMsg',99,1),(16911,60127,60158,'OP_ServerPlayCharacterReplyMsg',26,1),(16912,60127,60158,'OP_ServerPlayCharacterRequestMsg',25,1),(16913,60127,60158,'OP_SetInstanceDisplayNameMsg',444,1),(16914,60127,60158,'OP_SetRemoteCmdsMsg',43,1),(16915,60127,60158,'OP_SetSocialMsg',101,1),(16916,60127,60158,'OP_ShaderCustomizationMsg',167,1),(16917,60127,60158,'OP_ShowCreateFromRecipeUIMsg',222,1),(16918,60127,60158,'OP_ShowIllusionsMsg',196,1),(16919,60127,60158,'OP_ShowItemCreationProcessUIMsg',226,1),(16920,60127,60158,'OP_ShowRecipeBookMsg',229,1),(16921,60127,60158,'OP_ShowZoneTeleporterDestinations',357,1),(16922,60127,60158,'OP_SitMsg',190,1),(16923,60127,60158,'OP_SkillInfoRequest',518,1),(16924,60127,60158,'OP_SkillInfoResponse',519,1),(16925,60127,60158,'OP_SOEAllAccess',613,1),(16926,60127,60158,'OP_SpellGainedMsg',266,1),(16927,60127,60158,'OP_StandMsg',191,1),(16928,60127,60158,'OP_StoodMsg',193,1),(16929,60127,60158,'OP_StopItemCreationMsg',225,1),(16930,60127,60158,'OP_StoppedLootingMsg',189,1),(16931,60127,60158,'OP_StopTrackingMsg',395,1),(16932,60127,60158,'OP_SubmitCharCust',566,1),(16933,60127,60158,'OP_SupplyDepot',746,1),(16934,60127,60158,'OP_SysClient',221,1),(16935,60127,60158,'OP_TeleportWithinZoneMsg',81,1),(16936,60127,60158,'OP_TeleportWithinZoneNoReloadMsg',82,1),(16937,60127,60158,'OP_TintWidgetsMsg',173,1),(16938,60127,60158,'OP_TitleUpdateMsg',388,1),(16939,60127,60158,'OP_TrackingUpdateMsg',393,1),(16940,60127,60158,'OP_TradeskillList',715,1),(16941,60127,60158,'OP_TraitsList',738,1),(16942,60127,60158,'OP_UIEvent',531,1),(16943,60127,60158,'OP_UIResetMsg',177,1),(16944,60127,60158,'OP_UISettingsResponseMsg',176,1),(16945,60127,60158,'OP_Unknown',771,1),(16946,60127,60158,'OP_UnknownNpcMsg',377,1),(16947,60127,60158,'OP_UpdateActivePublicZonesMsg',376,1),(16948,60127,60158,'OP_UpdateCharacterSheetMsg',65,1),(16949,60127,60158,'OP_UpdateClientPredFlagsMsg',249,1),(16950,60127,60158,'OP_UpdateDebugRadiiMsg',383,1),(16951,60127,60158,'OP_UpdateGroupMemberDataMsg',392,1),(16952,60127,60158,'OP_UpdateHouseAccessDataMsg',147,1),(16953,60127,60158,'OP_UpdateHouseDataMsg',146,1),(16954,60127,60158,'OP_UpdateInventoryMsg',70,1),(16955,60127,60158,'OP_UpdateItemCreationProcessUIMsg',227,1),(16956,60127,60158,'OP_UpdateMotdMsg',211,1),(16957,60127,60158,'OP_UpdateOpportunityMsg',77,1),(16958,60127,60158,'OP_UpdatePositionMsg',41,1),(16959,60127,60158,'OP_UpdateRaidMsg',385,1),(16960,60127,60158,'OP_UpdateRecipeBookMsg',72,1),(16961,60127,60158,'OP_UpdateSkillBookMsg',75,1),(16962,60127,60158,'OP_UpdateSkillsMsg',76,1),(16963,60127,60158,'OP_UpdateSpellBookMsg',68,1),(16964,60127,60158,'OP_UpdateTargetLocMsg',64,1),(16965,60127,60158,'OP_UpdateTargetMsg',63,1),(16966,60127,60158,'OP_UpdateTitleCmd',498,1),(16967,60127,60158,'OP_UseAdornment',726,1),(16968,60127,60158,'OP_VideoUploaded',583,1),(16969,60127,60158,'OP_VoiceChatChannel',524,1),(16970,60127,60158,'OP_VoiceChatServer',742,1),(16971,60127,60158,'OP_WaypointReplyMsg',353,1),(16972,60127,60158,'OP_WaypointRequestMsg',352,1),(16973,60127,60158,'OP_WaypointSelectMsg',354,1),(16974,60127,60158,'OP_WaypointUpdateMsg',355,1),(16975,60127,60158,'OP_Weakness',587,1),(16976,60127,60158,'OP_WhoQueryReplyMsg',56,1),(16977,60127,60158,'OP_WhoQueryRequestMsg',55,1),(16978,60127,60158,'OP_WorldDataChangeMsg',414,1),(16979,60127,60158,'OP_WorldDataUpdateMsg',240,1),(16980,60127,60158,'OP_WorldListMsg',8,1),(16981,60127,60158,'OP_WorldPingMsg',403,1),(16982,60127,60158,'OP_WorldShutdownUpdateMsg',407,1),(16983,60127,60158,'OP_WorldStatusChangeMsg',6,1),(16984,60127,60158,'OP_WorldTravelAvail',576,1),(16985,60127,60158,'OP_WSAcctLockStatusMsg',208,1),(16986,60127,60158,'OP_WSCreateCharacterReplyMsg',14,1),(16987,60127,60158,'OP_WSCreateCharacterRequestMsg',13,1),(16988,60127,60158,'OP_WSLoginRequestMsg',2,1),(16989,60127,60158,'OP_WSServerHideMsg',370,1),(16990,60127,60158,'OP_WSServerLockMsg',368,1),(16991,60127,60158,'OP_WSStatusReplyMsg',5,1),(16992,60127,60158,'OP_ZoneBgInstanceList',572,1),(16993,60127,60158,'OP_ZoneInfoMsg',35,1),(16994,60127,60158,'OP_ZoneInstanceCreateReplyMsg',32,1),(16995,60127,60158,'OP_ZoneInstanceDestroyedMsg',33,1),(16996,60127,60158,'OP_ZoneMOTDMsg',47,1),(16997,60127,60158,'OP_ZonesStatusMsg',105,1),(16998,60127,60158,'OP_ZonesStatusRequestMsg',104,1),(16999,60127,60158,'OP_ZoneToFriendReplyMsg',288,1),(17000,60127,60158,'OP_ZoneToFriendRequestMsg',287,1),(17001,60160,61548,'OP_AchievementUpdateMsg',759,1),(17002,60160,61548,'OP_AddSocialStructureStandingMsg',253,1),(17003,60160,61548,'OP_AdvancementRequestMsg',398,1),(17004,60160,61548,'OP_AdventureList',492,1),(17005,60160,61548,'OP_AFKUpdateMsg',374,1),(17006,60160,61548,'OP_AfterInvSpellUpdate',71,1),(17007,60160,61548,'OP_AllCharactersDescReplyMsg',10,1),(17008,60160,61548,'OP_AllCharactersDescRequestMsg',9,1),(17009,60160,61548,'OP_AllWSDescRequestMsg',7,1),(17010,60160,61548,'OP_AnonUpdateMsg',375,1),(17011,60160,61548,'OP_ArenaCreate',460,1),(17012,60160,61548,'OP_ArenaGameTypesMsg',449,1),(17013,60160,61548,'OP_ArenaList',461,1),(17014,60160,61548,'OP_ArenaWindow',469,1),(17015,60160,61548,'OP_AttackAllowed',504,1),(17016,60160,61548,'OP_AttackNotAllowed',505,1),(17017,60160,61548,'OP_AuctionAbortMsg',440,1),(17018,60160,61548,'OP_AuctionCharacter',437,1),(17019,60160,61548,'OP_AuctionCharacterReply',438,1),(17020,60160,61548,'OP_AuctionCoin',435,1),(17021,60160,61548,'OP_AuctionCoinReply',436,1),(17022,60160,61548,'OP_AuctionCommitMsg',439,1),(17023,60160,61548,'OP_AuctionItem',433,1),(17024,60160,61548,'OP_AuctionItemReply',434,1),(17025,60160,61548,'OP_AuditAuctionEventMsg',450,1),(17026,60160,61548,'OP_AvatarCreatedMsg',48,1),(17027,60160,61548,'OP_AvatarDestroyedMsg',49,1),(17028,60160,61548,'OP_AvatarUpdateMsg',364,1),(17029,60160,61548,'OP_BadLanguageFilter',523,1),(17030,60160,61548,'OP_BagOptions',506,1),(17031,60160,61548,'OP_BeginItemCreationMsg',224,1),(17032,60160,61548,'OP_BeginTrackingMsg',394,1),(17033,60160,61548,'OP_BioUpdateMsg',366,1),(17034,60160,61548,'OP_BrokerAddBag',296,1),(17035,60160,61548,'OP_BrokerRemoveBag',297,1),(17036,60160,61548,'OP_BrokerSellList',702,1),(17037,60160,61548,'OP_BuyPlayerHouseMsg',153,1),(17038,60160,61548,'OP_BuyPlayerHouseTintMsg',154,1),(17039,60160,61548,'OP_CampAbortedMsg',54,1),(17040,60160,61548,'OP_CampClientMsg',391,1),(17041,60160,61548,'OP_CampStartedMsg',53,1),(17042,60160,61548,'OP_CancelCreateFromRecipeMsg',223,1),(17043,60160,61548,'OP_CancelledFeignMsg',219,1),(17044,60160,61548,'OP_CancelMoveObjectModeMsg',166,1),(17045,60160,61548,'OP_CancelSpellCast',493,1),(17046,60160,61548,'OP_ChangeServerControlFlagMsg',250,1),(17047,60160,61548,'OP_ChangeZoneMsg',79,1),(17048,60160,61548,'OP_CharacterAchievements',758,1),(17049,60160,61548,'OP_CharacterCreatedDungeons',555,1),(17050,60160,61548,'OP_CharacterCurrency',757,1),(17051,60160,61548,'OP_CharacterHousingList',511,1),(17052,60160,61548,'OP_CharacterLinkdeadMsg',418,1),(17053,60160,61548,'OP_CharacterMerc',67,1),(17054,60160,61548,'OP_CharacterMounts',588,1),(17055,60160,61548,'OP_CharacterPet',66,1),(17056,60160,61548,'OP_CharNameChangedMsg',356,1),(17057,60160,61548,'OP_CharRenamed',723,1),(17058,60160,61548,'OP_CharTransferCommitReplyMsg',426,1),(17059,60160,61548,'OP_CharTransferCommitRequestMsg',424,1),(17060,60160,61548,'OP_CharTransferReplyMsg',422,1),(17061,60160,61548,'OP_CharTransferRequestMsg',421,1),(17062,60160,61548,'OP_CharTransferRollbackReplyMsg',425,1),(17063,60160,61548,'OP_CharTransferRollbackRequestMsg',423,1),(17064,60160,61548,'OP_CharTransferStartReplyMsg',420,1),(17065,60160,61548,'OP_CharTransferStartRequestMsg',419,1),(17066,60160,61548,'OP_CharTransferValidateReplyMsg',442,1),(17067,60160,61548,'OP_CharTransferValidateRequestMsg',441,1),(17068,60160,61548,'OP_ChatCreateChannelMsg',289,1),(17069,60160,61548,'OP_ChatFiltersMsg',338,1),(17070,60160,61548,'OP_ChatJoinChannelMsg',290,1),(17071,60160,61548,'OP_ChatLeaveChannelMsg',292,1),(17072,60160,61548,'OP_ChatRelationshipUpdateMsg',187,1),(17073,60160,61548,'OP_ChatSendFriendsMsg',299,1),(17074,60160,61548,'OP_ChatSendIgnoresMsg',300,1),(17075,60160,61548,'OP_ChatTellChannelMsg',293,1),(17076,60160,61548,'OP_ChatTellUserMsg',294,1),(17077,60160,61548,'OP_ChatToggleFriendMsg',295,1),(17078,60160,61548,'OP_ChatToggleIgnoreMsg',298,1),(17079,60160,61548,'OP_ChatWhoChannelMsg',291,1),(17080,60160,61548,'OP_ClearDataMsg',100,1),(17081,60160,61548,'OP_ClearForLandingMsg',495,1),(17082,60160,61548,'OP_ClearForTakeOffMsg',194,1),(17083,60160,61548,'OP_ClientCmdMsg',60,1),(17084,60160,61548,'OP_ClientFellMsg',389,1),(17085,60160,61548,'OP_ClientIdleBeginMsg',409,1),(17086,60160,61548,'OP_ClientIdleEndMsg',410,1),(17087,60160,61548,'OP_ClientInDeathRegionMsg',390,1),(17088,60160,61548,'OP_ClientTeleportRequestMsg',80,1),(17089,60160,61548,'OP_ClientTeleportToLocationMsg',248,1),(17090,60160,61548,'OP_CloseGroupInviteWindowMsg',401,1),(17091,60160,61548,'OP_CollectAllHouseItemsMsg',155,1),(17092,60160,61548,'OP_ConsignItemRequestMsg',129,1),(17093,60160,61548,'OP_ConsignItemResponseMsg',130,1),(17094,60160,61548,'OP_ConsignmentCloseStoreMsg',128,1),(17095,60160,61548,'OP_ConsignRemoveItemsMsg',382,1),(17096,60160,61548,'OP_ConsignViewCreateMsg',379,1),(17097,60160,61548,'OP_ConsignViewGetPageMsg',380,1),(17098,60160,61548,'OP_ConsignViewReleaseMsg',381,1),(17099,60160,61548,'OP_ConsignViewSortMsg',387,1),(17100,60160,61548,'OP_CorruptedClientMsg',413,1),(17101,60160,61548,'OP_CreateBoatTransportsMsg',254,1),(17102,60160,61548,'OP_CreateCharacterDungeon',551,1),(17103,60160,61548,'OP_CreateCharacterReplyMsg',12,1),(17104,60160,61548,'OP_CreateCharacterRequestMsg',11,1),(17105,60160,61548,'OP_CreateCharFromCBBReplyMsg',430,1),(17106,60160,61548,'OP_CreateCharFromCBBRequestMsg',429,1),(17107,60160,61548,'OP_CreateGuildReplyMsg',123,1),(17108,60160,61548,'OP_CreateGuildRequestMsg',121,1),(17109,60160,61548,'OP_CreateZoneInstanceMsg',31,1),(17110,60160,61548,'OP_CsCategoryRequestMsg',371,1),(17111,60160,61548,'OP_CsCategoryResponseMsg',372,1),(17112,60160,61548,'OP_CSTicketAddCommentMsg',237,1),(17113,60160,61548,'OP_CSTicketChangeNotificationMsg',239,1),(17114,60160,61548,'OP_CSTicketCommentRequestMsg',234,1),(17115,60160,61548,'OP_CSTicketCommentResponseMsg',235,1),(17116,60160,61548,'OP_CSTicketCreateMsg',236,1),(17117,60160,61548,'OP_CSTicketDeleteMsg',238,1),(17118,60160,61548,'OP_CSTicketHeaderRequestMsg',232,1),(17119,60160,61548,'OP_CSTicketInfoMsg',233,1),(17120,60160,61548,'OP_CSToolAccessResponseMsg',392,1),(17121,60160,61548,'OP_CSToolsRequestMsg',251,1),(17122,60160,61548,'OP_CSToolsResponseMsg',252,1),(17123,60160,61548,'OP_CurrentPet',489,1),(17124,60160,61548,'OP_CustomizationPurchaseRequestMs',170,1),(17125,60160,61548,'OP_CustomizationReplyMsg',172,1),(17126,60160,61548,'OP_CustomizationSetRequestMsg',171,1),(17127,60160,61548,'OP_CustomizeHouseDisplay',748,1),(17128,60160,61548,'OP_DailyObjectives',601,1),(17129,60160,61548,'OP_DefaultGroupOptionsMsg',201,1),(17130,60160,61548,'OP_DefaultGroupOptionsRequestMsg',200,1),(17131,60160,61548,'OP_DeleteCharacterReplyMsg',19,1),(17132,60160,61548,'OP_DeleteCharacterRequestMsg',18,1),(17133,60160,61548,'OP_DeleteGuildMsg',126,1),(17134,60160,61548,'OP_DestUpdateReq',213,1),(17135,60160,61548,'OP_DialogCloseMsg',112,1),(17136,60160,61548,'OP_DialogSelectMsg',111,1),(17137,60160,61548,'OP_DispatchClientCmdMsg',62,1),(17138,60160,61548,'OP_DispatchESMsg',61,1),(17139,60160,61548,'OP_DispatchMsg',455,1),(17140,60160,61548,'OP_DispatchSpellCmdMsg',182,1),(17141,60160,61548,'OP_DisplayDebugNLLPointsMsg',258,1),(17142,60160,61548,'OP_DisplayEventMsg',456,1),(17143,60160,61548,'OP_DisplayExchangeScreenMsg',448,1),(17144,60160,61548,'OP_DisplayGroupOptionsScreenMsg',203,1),(17145,60160,61548,'OP_DisplayInnVisitScreenMsg',205,1),(17146,60160,61548,'OP_DisplayMailScreenMsg',408,1),(17147,60160,61548,'OP_DisplayTSEventReactionMsg',228,1),(17148,60160,61548,'OP_DisplayWarningMsg',269,1),(17149,60160,61548,'OP_DoneLoadingEntityResourcesMsg',38,1),(17150,60160,61548,'OP_DoneLoadingZoneResourcesMsg',36,1),(17151,60160,61548,'OP_DoneSendingInitialEntitiesMsg',37,1),(17152,60160,61548,'OP_DressingRoom',514,1),(17153,60160,61548,'OP_DumpSchedulerMsg',206,1),(17154,60160,61548,'OP_DungeonMakerEnter',552,1),(17155,60160,61548,'OP_DungeonMakerItemRequest',554,1),(17156,60160,61548,'OP_DungeonMakerItemResponse',586,1),(17157,60160,61548,'OP_DungeonMakerToolboxList',556,1),(17158,60160,61548,'OP_DungeonMakerUnknown',557,1),(17159,60160,61548,'OP_DungeonMakerUnknown1',558,1),(17160,60160,61548,'OP_DungeonPlayAsAvatarList',762,1),(17161,60160,61548,'OP_DungeonPlayAsAvatarSelected',763,1),(17162,60160,61548,'OP_EncounterBrokenMsg',267,1),(17163,60160,61548,'OP_EnterHouseMsg',157,1),(17164,60160,61548,'OP_EnterMoveObjectModeMsg',164,1),(17165,60160,61548,'OP_EntityVerbsReplyMsg',184,1),(17166,60160,61548,'OP_EntityVerbsRequestMsg',183,1),(17167,60160,61548,'OP_EntityVerbsVerbMsg',185,1),(17168,60160,61548,'OP_EqArenaResultsCmd',713,1),(17169,60160,61548,'OP_EqAvailWorldChannelsCmd',700,1),(17170,60160,61548,'OP_EqBetaCopyRequest',619,1),(17171,60160,61548,'OP_EqCannedEmoteCmd',642,1),(17172,60160,61548,'OP_EqChatChannelUpdateCmd',698,1),(17173,60160,61548,'OP_EqChoiceWinCmd',679,1),(17174,60160,61548,'OP_EqCloseWindowCmd',671,1),(17175,60160,61548,'OP_EqCollectionFilterCmd',658,1),(17176,60160,61548,'OP_EqCollectionItemCmd',659,1),(17177,60160,61548,'OP_EqCollectionUpdateCmd',657,1),(17178,60160,61548,'OP_EqConsignmentItemsCmd',703,1),(17179,60160,61548,'OP_EqCreateGhostCmd',624,1),(17180,60160,61548,'OP_EqCreateListBoxCmd',639,1),(17181,60160,61548,'OP_EqCreateSignWidgetCmd',626,1),(17182,60160,61548,'OP_EqCreateWidgetCmd',625,1),(17183,60160,61548,'OP_EqDebugPVDCmd',692,1),(17184,60160,61548,'OP_EqDestroyGhostCmd',627,1),(17185,60160,61548,'OP_EqDialogCloseCmd',655,1),(17186,60160,61548,'OP_EqDialogOpenCmd',654,1),(17187,60160,61548,'OP_EqDisplaySpellFailCmd',675,1),(17188,60160,61548,'OP_EqDisplayTextCmd',623,1),(17189,60160,61548,'OP_EqDrawablePathGraphCmd',653,1),(17190,60160,61548,'OP_EqEnableGameEventCmd',685,1),(17191,60160,61548,'OP_EqEnableWindowCmd',687,1),(17192,60160,61548,'OP_EqExamineInfoCmd',670,1),(17193,60160,61548,'OP_EqFactionUpdateCmd',656,1),(17194,60160,61548,'OP_EqFlashWindowCmd',688,1),(17195,60160,61548,'OP_EqGetProbsCmd',696,1),(17196,60160,61548,'OP_EqGroupMemberRemovedCmd',649,1),(17197,60160,61548,'OP_EqGuildBankEventActionCmd',714,1),(17198,60160,61548,'OP_EqGuildBankExamineInfoCmd',715,1),(17199,60160,61548,'OP_EqHearChainEffectCmd',650,1),(17200,60160,61548,'OP_EqHearChatCmd',622,1),(17201,60160,61548,'OP_EqHearCombatCmd',631,1),(17202,60160,61548,'OP_EqHearConsiderCmd',637,1),(17203,60160,61548,'OP_EqHearDeathCmd',648,1),(17204,60160,61548,'OP_EQHearDispellCmd',760,1),(17205,60160,61548,'OP_EqHearDrowningCmd',647,1),(17206,60160,61548,'OP_EqHearHealCmd',697,1),(17207,60160,61548,'OP_EqHearPlayFlavorCmd',690,1),(17208,60160,61548,'OP_EQHearProcCmd',633,1),(17209,60160,61548,'OP_EQHearResEffectCmd',634,1),(17210,60160,61548,'OP_EqHearSpellCastCmd',632,1),(17211,60160,61548,'OP_EqHearSpellFizzleCmd',636,1),(17212,60160,61548,'OP_EqHearSpellInterruptCmd',635,1),(17213,60160,61548,'OP_EqHearSpellNoLandCmd',716,1),(17214,60160,61548,'OP_EQHearThreatCmd',754,1),(17215,60160,61548,'OP_EqHelpPathClearCmd',668,1),(17216,60160,61548,'OP_EqHelpPathCmd',667,1),(17217,60160,61548,'OP_EqInspectPCResultsCmd',652,1),(17218,60160,61548,'OP_EqInstructionWindowCloseCmd',682,1),(17219,60160,61548,'OP_EqInstructionWindowCmd',681,1),(17220,60160,61548,'OP_EqInstructionWindowGoalCmd',683,1),(17221,60160,61548,'OP_EqInstructionWindowTaskCmd',684,1),(17222,60160,61548,'OP_EqJunctionListCmd',673,1),(17223,60160,61548,'OP_EqMapExplorationCmd',706,1),(17224,60160,61548,'OP_EqMentoring',661,1),(17225,60160,61548,'OP_EqPlaySound3DCmd',645,1),(17226,60160,61548,'OP_EqPlaySoundCmd',644,1),(17227,60160,61548,'OP_EqPlayVoiceCmd',646,1),(17228,60160,61548,'OP_EqQuestGroupCmd',663,1),(17229,60160,61548,'OP_EqQuestionnaireCmd',694,1),(17230,60160,61548,'OP_EqQuestJournalReplyCmd',662,1),(17231,60160,61548,'OP_EqQuestJournalUpdateCmd',660,1),(17232,60160,61548,'OP_EqReceiveOfferCmd',651,1),(17233,60160,61548,'OP_EqResurrectedCmd',678,1),(17234,60160,61548,'OP_EqSetControlGhostCmd',629,1),(17235,60160,61548,'OP_EqSetDebugPathPointsCmd',640,1),(17236,60160,61548,'OP_EqSetDefaultVerbCmd',680,1),(17237,60160,61548,'OP_EqSetPOVGhostCmd',630,1),(17238,60160,61548,'OP_EqShowBookCmd',693,1),(17239,60160,61548,'OP_EqShowDeathWindowCmd',674,1),(17240,60160,61548,'OP_EqShowWindowCmd',686,1),(17241,60160,61548,'OP_EqSpellCastEndCmd',677,1),(17242,60160,61548,'OP_EqSpellCastStartCmd',676,1),(17243,60160,61548,'OP_EqSpellMoveToRangeAndRetryCmd',708,1),(17244,60160,61548,'OP_EqStartBrokerCmd',705,1),(17245,60160,61548,'OP_EqStateCmd',643,1),(17246,60160,61548,'OP_EqStoreLogCmd',707,1),(17247,60160,61548,'OP_EqUpdateBankCmd',669,1),(17248,60160,61548,'OP_EqUpdateGhostCmd',628,1),(17249,60160,61548,'OP_EqUpdateLootCmd',672,1),(17250,60160,61548,'OP_EqUpdateMerchantCmd',664,1),(17251,60160,61548,'OP_EqUpdatePlayerMailCmd',709,1),(17252,60160,61548,'OP_EqUpdatePlayerTradeCmd',666,1),(17253,60160,61548,'OP_EqUpdateSignWidgetCmd',691,1),(17254,60160,61548,'OP_EqUpdateStoreCmd',665,1),(17255,60160,61548,'OP_EqUpdateSubClassesCmd',638,1),(17256,60160,61548,'OP_EqUpdateTargetCmd',701,1),(17257,60160,61548,'OP_EqWhoChannelQueryReplyCmd',699,1),(17258,60160,61548,'OP_ESInitMsg',27,1),(17259,60160,61548,'OP_ESLoginRequestMsg',3,1),(17260,60160,61548,'OP_ESReadyForClientsMsg',28,1),(17261,60160,61548,'OP_ESStatusMsg',102,1),(17262,60160,61548,'OP_ESWeatherRequestEndMsg',107,1),(17263,60160,61548,'OP_ESWeatherRequestMsg',106,1),(17264,60160,61548,'OP_ESZoneInstanceStatusMsg',103,1),(17265,60160,61548,'OP_ExamineConsignmentRequestMsg',174,1),(17266,60160,61548,'OP_ExamineConsignmentResponseMsg',175,1),(17267,60160,61548,'OP_ExamineInfoRequestMsg',259,1),(17268,60160,61548,'OP_ExamineItemRequestMsg',198,1),(17269,60160,61548,'OP_ExitHouseMsg',158,1),(17270,60160,61548,'OP_ExpectClientAsCharacterReplyMs',24,1),(17271,60160,61548,'OP_ExpectClientAsCharacterRequest',34,1),(17272,60160,61548,'OP_ExpPurchWindow',739,1),(17273,60160,61548,'OP_FellowshipExpMsg',125,1),(17274,60160,61548,'OP_FlightPathsMsg',417,1),(17275,60160,61548,'OP_GameWorldTimeMsg',45,1),(17276,60160,61548,'OP_PaperdollImage',581,1),(17277,60160,61548,'OP_GetAuctionAssetIDMsg',445,1),(17278,60160,61548,'OP_GetAuctionAssetIDReplyMsg',446,1),(17279,60160,61548,'OP_GetAvatarAccessRequestForCSToo',397,1),(17280,60160,61548,'OP_GetCharacterSerializedReplyMsg',428,1),(17281,60160,61548,'OP_GetCharacterSerializedRequestM',427,1),(17282,60160,61548,'OP_GroupCreatedMsg',90,1),(17283,60160,61548,'OP_GroupDestroyedMsg',91,1),(17284,60160,61548,'OP_GroupLeaderChangedMsg',95,1),(17285,60160,61548,'OP_GroupMemberAddedMsg',92,1),(17286,60160,61548,'OP_GroupMemberRemovedMsg',93,1),(17287,60160,61548,'OP_GroupOptionsMsg',202,1),(17288,60160,61548,'OP_GroupRemovedFromGroupMsg',94,1),(17289,60160,61548,'OP_GroupResendOOZDataMsg',96,1),(17290,60160,61548,'OP_GroupSettingsChangedMsg',97,1),(17291,60160,61548,'OP_GuildBankActionMsg',278,1),(17292,60160,61548,'OP_GuildBankActionResponseMsg',279,1),(17293,60160,61548,'OP_GuildBankEventListMsg',283,1),(17294,60160,61548,'OP_GuildBankItemDetailsRequestMsg',280,1),(17295,60160,61548,'OP_GuildBankItemDetailsResponseMs',281,1),(17296,60160,61548,'OP_GuildBankUpdateMsg',282,1),(17297,60160,61548,'OP_GuildEventActionMsg',273,1),(17298,60160,61548,'OP_GuildEventAddMsg',272,1),(17299,60160,61548,'OP_GuildEventDetailsMsg',276,1),(17300,60160,61548,'OP_GuildEventListMsg',274,1),(17301,60160,61548,'OP_GuildEventMsg',271,1),(17302,60160,61548,'OP_GuildMembershipResponseMsg',361,1),(17303,60160,61548,'OP_GuildRecruiting',719,1),(17304,60160,61548,'OP_GuildRecruitingDetails',720,1),(17305,60160,61548,'OP_GuildRecruitingImage',721,1),(17306,60160,61548,'OP_GuildRecruitingMemberInfo',718,1),(17307,60160,61548,'OP_GuildsayMsg',124,1),(17308,60160,61548,'OP_GuildStatusUpdate',712,1),(17309,60160,61548,'OP_GuildUpdateMsg',127,1),(17310,60160,61548,'OP_HeritageMsg',10004,1),(17311,60160,61548,'OP_HideIllusionsMsg',197,1),(17312,60160,61548,'OP_HouseAccessRemoveMsg',161,1),(17313,60160,61548,'OP_HouseAccessSetMsg',160,1),(17314,60160,61548,'OP_HouseCustomizationScreenMsg',169,1),(17315,60160,61548,'OP_HouseDefaultAccessSetMsg',159,1),(17316,60160,61548,'OP_HouseDeletedRemotelyMsg',145,1),(17317,60160,61548,'OP_HouseItemsList',488,1),(17318,60160,61548,'OP_HousingDataChangedMsg',431,1),(17319,60160,61548,'OP_HousingRestoreMsg',432,1),(17320,60160,61548,'OP_InspectPlayerMsg',367,1),(17321,60160,61548,'OP_InspectPlayerRequestMsg',454,1),(17322,60160,61548,'OP_InviteRequestMsg',451,1),(17323,60160,61548,'OP_InviteResponseMsg',452,1),(17324,60160,61548,'OP_InviteTargetResponseMsg',453,1),(17325,60160,61548,'OP_JoinGuildNotifyMsg',363,1),(17326,60160,61548,'OP_JournalQuestStoryline',761,1),(17327,60160,61548,'OP_KeymapDataMsg',180,1),(17328,60160,61548,'OP_KeymapLoadMsg',178,1),(17329,60160,61548,'OP_KeymapNoneMsg',179,1),(17330,60160,61548,'OP_KeymapSaveMsg',181,1),(17331,60160,61548,'OP_KnowledgebaseRequestMsg',230,1),(17332,60160,61548,'OP_KnowledgebaseResponseMsg',231,1),(17333,60160,61548,'OP_KnowledgeWindowSlotMappingMsg',373,1),(17334,60160,61548,'OP_KnownLanguagesMsg',242,1),(17335,60160,61548,'OP_Launchpad',579,1),(17336,60160,61548,'OP_LeaveGuildNotifyMsg',362,1),(17337,60160,61548,'OP_LevelChangedMsg',265,1),(17338,60160,61548,'OP_LFGGroupSearch',508,1),(17339,60160,61548,'OP_LFGUpdateMsg',522,1),(17340,60160,61548,'OP_LikeOption',139,1),(17341,60160,61548,'OP_LoadCalendarEvents',582,1),(17342,60160,61548,'OP_LoadWelcomeWindow',564,1),(17343,60160,61548,'OP_LoginByNumRequestMsg',1,1),(17344,60160,61548,'OP_LoginReplyMsg',4,1),(17345,60160,61548,'OP_LoginRequestMsg',0,1),(17346,60160,61548,'OP_LootItemsRequestMsg',188,1),(17347,60160,61548,'OP_Lottery',717,1),(17348,60160,61548,'OP_LSCheckAcctLockMsg',207,1),(17349,60160,61548,'OP_LsClientAlertlogReplyMsg',246,1),(17350,60160,61548,'OP_LsClientBaselogReplyMsg',244,1),(17351,60160,61548,'OP_LsClientCrashlogReplyMsg',245,1),(17352,60160,61548,'OP_LsClientVerifylogReplyMsg',247,1),(17353,60160,61548,'OP_LsRequestClientCrashLogMsg',243,1),(17354,60160,61548,'OP_LSServerLockMsg',369,1),(17355,60160,61548,'OP_MacroInitMsg',262,1),(17356,60160,61548,'OP_MacroUpdateMsg',263,1),(17357,60160,61548,'OP_MailCommitSendMessageMsg',348,1),(17358,60160,61548,'OP_MailDeleteMessageMsg',344,1),(17359,60160,61548,'OP_MailEventNotificationMsg',415,1),(17360,60160,61548,'OP_MailGetHeadersReplyMsg',345,1),(17361,60160,61548,'OP_MailGetMessageMsg',342,1),(17362,60160,61548,'OP_MailGetMessageReplyMsg',346,1),(17363,60160,61548,'OP_MailRemoveAttachFromMailMsg',350,1),(17364,60160,61548,'OP_MailSendMessageMsg',343,1),(17365,60160,61548,'OP_MailSendMessageReplyMsg',347,1),(17366,60160,61548,'OP_MailSendSystemMessageMsg',349,1),(17367,60160,61548,'OP_MakeGroupLeaderMsg',89,1),(17368,60160,61548,'OP_MapFogDataInitMsg',399,1),(17369,60160,61548,'OP_MapFogDataUpdateMsg',400,1),(17370,60160,61548,'OP_MapRequest',525,1),(17371,60160,61548,'OP_MarketAddFundsReply',533,1),(17372,60160,61548,'OP_MarketAddFundsRequest',532,1),(17373,60160,61548,'OP_MarketFundsUpdate',530,1),(17374,60160,61548,'OP_MarketPlaceItems',543,1),(17375,60160,61548,'OP_MarketPlacePrices',536,1),(17376,60160,61548,'OP_MarketPurchase',535,1),(17377,60160,61548,'OP_MentorPopup',562,1),(17378,60160,61548,'OP_MercHireWindow',764,1),(17379,60160,61548,'OP_MercUnknown',765,1),(17380,60160,61548,'OP_MigrateBoatTransportMsg',256,1),(17381,60160,61548,'OP_MigrateBoatTransportReplyMsg',257,1),(17382,60160,61548,'OP_MigrateClientToZoneReplyMsg',84,1),(17383,60160,61548,'OP_MigrateClientToZoneRequestMsg',83,1),(17384,60160,61548,'OP_ModifyGuildMsg',270,1),(17385,60160,61548,'OP_MonitorCharacterListMsg',58,1),(17386,60160,61548,'OP_MonitorCharacterListRequestMsg',59,1),(17387,60160,61548,'OP_MonitorReplyMsg',57,1),(17388,60160,61548,'OP_MOTDMsg',46,1),(17389,60160,61548,'OP_MoveableObjectPlacementCriteri',163,1),(17390,60160,61548,'OP_MoveLogUpdateMsg',404,1),(17391,60160,61548,'OP_NotifyApprenticeStoppedMentori',412,1),(17392,60160,61548,'OP_OfferQuestMsg',405,1),(17393,60160,61548,'OP_OnscreenMsgMsg',268,1),(17394,60160,61548,'OP_OpenCharCust',565,1),(17395,60160,61548,'OP_OutOfZoneMemberDataMsg',98,1),(17396,60160,61548,'OP_PayHouseUpkeepMsg',162,1),(17397,60160,61548,'OP_PerformCameraShakeMsg',217,1),(17398,60160,61548,'OP_PerformPlayerKnockbackMsg',216,1),(17399,60160,61548,'OP_PetOptions',204,1),(17400,60160,61548,'OP_PetOptionsResponse',585,1),(17401,60160,61548,'OP_PlayCharacterReplyMsg',21,1),(17402,60160,61548,'OP_PlayCharacterRequestMsg',20,1),(17403,60160,61548,'OP_PlayerHouseAccessUpdateMsg',150,1),(17404,60160,61548,'OP_PlayerHouseBaseScreenMsg',148,1),(17405,60160,61548,'OP_PlayerHouseCloseUIMsg',152,1),(17406,60160,61548,'OP_PlayerHouseDisplayStatusMsg',151,1),(17407,60160,61548,'OP_PlayerHousePurchaseScreenMsg',149,1),(17408,60160,61548,'OP_PlayerMadeInstances',143,1),(17409,60160,61548,'OP_PlayerMadeInstancesScreen',142,1),(17410,60160,61548,'OP_PlayerPollAnswer',561,1),(17411,60160,61548,'OP_PlayerPollPopup',560,1),(17412,60160,61548,'OP_PlayLon',515,1),(17413,60160,61548,'OP_PointOfInterest',743,1),(17414,60160,61548,'OP_PointOfInterest2',744,1),(17415,60160,61548,'OP_PopulateSkillMapsMsg',218,1),(17416,60160,61548,'OP_PositionBoatTransportMsg',255,1),(17417,60160,61548,'OP_PositionMoveableObject',165,1),(17418,60160,61548,'OP_PostPossessionMsg',458,1),(17419,60160,61548,'OP_PredictionUpdateMsg',39,1),(17420,60160,61548,'OP_PrePossessionMsg',457,1),(17421,60160,61548,'OP_PromoFlagsDetailsMsg',378,1),(17422,60160,61548,'OP_PublishHouse',141,1),(17423,60160,61548,'OP_PurchaseConsignmentLoreCheckRe',411,1),(17424,60160,61548,'OP_PurchaseConsignmentRequestMsg',131,1),(17425,60160,61548,'OP_QueAllBgSolo',568,1),(17426,60160,61548,'OP_QuestionnaireMsg',264,1),(17427,60160,61548,'OP_QuestJournalInspectMsg',116,1),(17428,60160,61548,'OP_QuestJournalOpenMsg',115,1),(17429,60160,61548,'OP_QuestJournalSetVisibleMsg',117,1),(17430,60160,61548,'OP_QuestJournalWaypointMsg',118,1),(17431,60160,61548,'OP_QuestReward',324,1),(17432,60160,61548,'OP_QuickbarInitMsg',260,1),(17433,60160,61548,'OP_QuickbarUpdateMsg',261,1),(17434,60160,61548,'OP_RaceRestrictionMsg',443,1),(17435,60160,61548,'OP_ReadBookPageMsg',199,1),(17436,60160,61548,'OP_ReadyForTakeOffMsg',195,1),(17437,60160,61548,'OP_ReadyToZoneMsg',86,1),(17438,60160,61548,'OP_RecipeBook',544,1),(17439,60160,61548,'OP_RecipeDetailsMsg',74,1),(17440,60160,61548,'OP_RecipeList',755,1),(17441,60160,61548,'OP_RecipeListUnknown',597,1),(17442,60160,61548,'OP_RelinquishHouseMsg',156,1),(17443,60160,61548,'OP_ReloadLocalizedTxtMsg',359,1),(17444,60160,61548,'OP_RemoteCmdMsg',44,1),(17445,60160,61548,'OP_RemoveClientFromGroupMsg',87,1),(17446,60160,61548,'OP_RemoveConcentrationMsg',114,1),(17447,60160,61548,'OP_RemoveGroupFromGroupMsg',88,1),(17448,60160,61548,'OP_RemoveSpellEffectMsg',113,1),(17449,60160,61548,'OP_RenameGuildMsg',286,1),(17450,60160,61548,'OP_ReplaceableSubMeshesMsg',168,1),(17451,60160,61548,'OP_ReportMsg',384,1),(17452,60160,61548,'OP_RequestCampMsg',52,1),(17453,60160,61548,'OP_RequestGuildBankEventDetailsMs',284,1),(17454,60160,61548,'OP_RequestGuildEventDetailsMsg',275,1),(17455,60160,61548,'OP_RequestGuildInfoMsg',277,1),(17456,60160,61548,'OP_RequestGuildMembershipMsg',360,1),(17457,60160,61548,'OP_RequestHelpRepathMsg',209,1),(17458,60160,61548,'OP_RequestRecipeDetailsMsg',73,1),(17459,60160,61548,'OP_RequestTargetLocMsg',210,1),(17460,60160,61548,'OP_Research',756,1),(17461,60160,61548,'OP_ResendWorldChannelsMsg',447,1),(17462,60160,61548,'OP_ReskinCharacterRequestMsg',15,1),(17463,60160,61548,'OP_RestartZoneMsg',416,1),(17464,60160,61548,'OP_RewardPackMsg',285,1),(17465,60160,61548,'OP_SatMsg',192,1),(17466,60160,61548,'OP_SavageBarInitMsg',584,1),(17467,60160,61548,'OP_SelectZoneTeleporterDestinatio',358,1),(17468,60160,61548,'OP_SendLatestRequestMsg',99,1),(17469,60160,61548,'OP_ServerPlayCharacterReplyMsg',26,1),(17470,60160,61548,'OP_ServerPlayCharacterRequestMsg',25,1),(17471,60160,61548,'OP_SetInstanceDisplayNameMsg',444,1),(17472,60160,61548,'OP_SetRemoteCmdsMsg',43,1),(17473,60160,61548,'OP_SetSocialMsg',101,1),(17474,60160,61548,'OP_ShaderCustomizationMsg',167,1),(17475,60160,61548,'OP_ShowCreateFromRecipeUIMsg',222,1),(17476,60160,61548,'OP_ShowIllusionsMsg',196,1),(17477,60160,61548,'OP_ShowItemCreationProcessUIMsg',226,1),(17478,60160,61548,'OP_ShowRecipeBookMsg',229,1),(17479,60160,61548,'OP_ShowZoneTeleporterDestinations',357,1),(17480,60160,61548,'OP_SitMsg',190,1),(17481,60160,61548,'OP_SkillInfoRequest',518,1),(17482,60160,61548,'OP_SkillInfoResponse',519,1),(17483,60160,61548,'OP_SOEAllAccess',620,1),(17484,60160,61548,'OP_SpellGainedMsg',266,1),(17485,60160,61548,'OP_StandMsg',191,1),(17486,60160,61548,'OP_StoodMsg',193,1),(17487,60160,61548,'OP_StopItemCreationMsg',225,1),(17488,60160,61548,'OP_StoppedLootingMsg',189,1),(17489,60160,61548,'OP_StopTrackingMsg',395,1),(17490,60160,61548,'OP_SubmitCharCust',566,1),(17491,60160,61548,'OP_SupplyDepot',753,1),(17492,60160,61548,'OP_SysClient',221,1),(17493,60160,61548,'OP_TeleportWithinZoneMsg',81,1),(17494,60160,61548,'OP_TeleportWithinZoneNoReloadMsg',82,1),(17495,60160,61548,'OP_TintWidgetsMsg',173,1),(17496,60160,61548,'OP_TitleUpdateMsg',388,1),(17497,60160,61548,'OP_TrackingUpdateMsg',393,1),(17498,60160,61548,'OP_TradeskillList',722,1),(17499,60160,61548,'OP_TraitsList',745,1),(17500,60160,61548,'OP_UIEvent',531,1),(17501,60160,61548,'OP_UIResetMsg',177,1),(17502,60160,61548,'OP_UISettingsResponseMsg',176,1),(17503,60160,61548,'OP_Unknown',778,1),(17504,60160,61548,'OP_UnknownNpcMsg',377,1),(17505,60160,61548,'OP_UpdateActivePublicZonesMsg',376,1),(17506,60160,61548,'OP_UpdateCharacterSheetMsg',65,1),(17507,60160,61548,'OP_UpdateClientPredFlagsMsg',249,1),(17508,60160,61548,'OP_UpdateDebugRadiiMsg',383,1),(17509,60160,61548,'OP_UpdateGroupMemberDataMsg',392,1),(17510,60160,61548,'OP_UpdateHouseAccessDataMsg',147,1),(17511,60160,61548,'OP_UpdateHouseDataMsg',146,1),(17512,60160,61548,'OP_UpdateInventoryMsg',70,1),(17513,60160,61548,'OP_UpdateItemCreationProcessUIMsg',227,1),(17514,60160,61548,'OP_UpdateMotdMsg',211,1),(17515,60160,61548,'OP_UpdateOpportunityMsg',77,1),(17516,60160,61548,'OP_UpdatePositionMsg',41,1),(17517,60160,61548,'OP_UpdateRaidMsg',385,1),(17518,60160,61548,'OP_UpdateRecipeBookMsg',72,1),(17519,60160,61548,'OP_UpdateSkillBookMsg',75,1),(17520,60160,61548,'OP_UpdateSkillsMsg',76,1),(17521,60160,61548,'OP_UpdateSpellBookMsg',68,1),(17522,60160,61548,'OP_UpdateTargetLocMsg',64,1),(17523,60160,61548,'OP_UpdateTargetMsg',63,1),(17524,60160,61548,'OP_UpdateTitleCmd',498,1),(17525,60160,61548,'OP_UseAdornment',733,1),(17526,60160,61548,'OP_VideoUploaded',583,1),(17527,60160,61548,'OP_VoiceChatChannel',524,1),(17528,60160,61548,'OP_VoiceChatServer',749,1),(17529,60160,61548,'OP_WaypointReplyMsg',353,1),(17530,60160,61548,'OP_WaypointRequestMsg',352,1),(17531,60160,61548,'OP_WaypointSelectMsg',354,1),(17532,60160,61548,'OP_WaypointUpdateMsg',355,1),(17533,60160,61548,'OP_Weakness',587,1),(17534,60160,61548,'OP_WhoQueryReplyMsg',56,1),(17535,60160,61548,'OP_WhoQueryRequestMsg',55,1),(17536,60160,61548,'OP_WorldDataChangeMsg',414,1),(17537,60160,61548,'OP_WorldDataUpdateMsg',240,1),(17538,60160,61548,'OP_WorldListMsg',8,1),(17539,60160,61548,'OP_WorldPingMsg',403,1),(17540,60160,61548,'OP_WorldShutdownUpdateMsg',407,1),(17541,60160,61548,'OP_WorldStatusChangeMsg',6,1),(17542,60160,61548,'OP_WorldTravelAvail',576,1),(17543,60160,61548,'OP_WSAcctLockStatusMsg',208,1),(17544,60160,61548,'OP_WSCreateCharacterReplyMsg',14,1),(17545,60160,61548,'OP_WSCreateCharacterRequestMsg',13,1),(17546,60160,61548,'OP_WSLoginRequestMsg',2,1),(17547,60160,61548,'OP_WSServerHideMsg',370,1),(17548,60160,61548,'OP_WSServerLockMsg',368,1),(17549,60160,61548,'OP_WSStatusReplyMsg',5,1),(17550,60160,61548,'OP_ZoneBgInstanceList',572,1),(17551,60160,61548,'OP_ZoneInfoMsg',35,1),(17552,60160,61548,'OP_ZoneInstanceCreateReplyMsg',32,1),(17553,60160,61548,'OP_ZoneInstanceDestroyedMsg',33,1),(17554,60160,61548,'OP_ZoneMOTDMsg',47,1),(17555,60160,61548,'OP_ZonesStatusMsg',105,1),(17556,60160,61548,'OP_ZonesStatusRequestMsg',104,1),(17557,60160,61548,'OP_ZoneToFriendReplyMsg',288,1),(17558,60160,61548,'OP_ZoneToFriendRequestMsg',287,1),(18024,60160,61548,'OP_EarlyLandingRequestMsg',490,1),(18025,60127,60158,'OP_EarlyLandingRequestMsg',490,1),(18026,60085,60116,'OP_EarlyLandingRequestMsg',489,1),(18027,60036,60069,'OP_EarlyLandingRequestMsg',487,1),(18028,60024,60024,'OP_EarlyLandingRequestMsg',486,1),(18029,58647,58647,'OP_EarlyLandingRequestMsg',486,1),(18030,58604,58604,'OP_EarlyLandingRequestMsg',486,1),(18031,58542,58588,'OP_EarlyLandingRequestMsg',486,1),(18032,57121,58525,'OP_EarlyLandingRequestMsg',486,1),(18033,57107,57109,'OP_EarlyLandingRequestMsg',486,1),(18034,57080,57095,'OP_EarlyLandingRequestMsg',486,1),(18035,57048,57079,'OP_EarlyLandingRequestMsg',486,1),(18036,57032,57047,'OP_EarlyLandingRequestMsg',486,1),(18037,57015,57031,'OP_EarlyLandingRequestMsg',486,1),(18038,57003,57014,'OP_EarlyLandingRequestMsg',486,1),(18039,57000,57002,'OP_EarlyLandingRequestMsg',9999,1),(18040,1208,1208,'OP_EarlyLandingRequestMsg',485,1),(18041,1204,1205,'OP_EarlyLandingRequestMsg',9999,1),(18042,1198,1199,'OP_EarlyLandingRequestMsg',9999,1),(18043,1193,1195,'OP_EarlyLandingRequestMsg',9999,1),(18044,1096,1096,'OP_EarlyLandingRequestMsg',468,1),(18045,1045,1086,'OP_EarlyLandingRequestMsg',9999,1),(18046,1008,1011,'OP_EarlyLandingRequestMsg',9999,1),(18047,908,927,'OP_EarlyLandingRequestMsg',9999,1),(18048,839,844,'OP_EarlyLandingRequestMsg',9999,1),(18049,0,0,'OP_EarlyLandingRequestMsg',9999,1),(18050,61581,61581,'OP_AchievementUpdateMsg',766,1),(18051,61581,61581,'OP_AddSocialStructureStandingMsg',253,1),(18052,61581,61581,'OP_AdvancementRequestMsg',399,1),(18053,61581,61581,'OP_AdventureList',493,1),(18054,61581,61581,'OP_AFKUpdateMsg',374,1),(18055,61581,61581,'OP_AfterInvSpellUpdate',71,1),(18056,61581,61581,'OP_AllCharactersDescReplyMsg',10,1),(18057,61581,61581,'OP_AllCharactersDescRequestMsg',9,1),(18058,61581,61581,'OP_AllWSDescRequestMsg',7,1),(18059,61581,61581,'OP_AnonUpdateMsg',375,1),(18060,61581,61581,'OP_ArenaCreate',461,1),(18061,61581,61581,'OP_ArenaGameTypesMsg',450,1),(18062,61581,61581,'OP_ArenaList',462,1),(18063,61581,61581,'OP_ArenaWindow',470,1),(18064,61581,61581,'OP_AttackAllowed',505,1),(18065,61581,61581,'OP_AttackNotAllowed',506,1),(18066,61581,61581,'OP_AuctionAbortMsg',441,1),(18067,61581,61581,'OP_AuctionCharacter',438,1),(18068,61581,61581,'OP_AuctionCharacterReply',439,1),(18069,61581,61581,'OP_AuctionCoin',436,1),(18070,61581,61581,'OP_AuctionCoinReply',437,1),(18071,61581,61581,'OP_AuctionCommitMsg',440,1),(18072,61581,61581,'OP_AuctionItem',434,1),(18073,61581,61581,'OP_AuctionItemReply',435,1),(18074,61581,61581,'OP_AuditAuctionEventMsg',451,1),(18075,61581,61581,'OP_AvatarCreatedMsg',48,1),(18076,61581,61581,'OP_AvatarDestroyedMsg',49,1),(18077,61581,61581,'OP_AvatarUpdateMsg',364,1),(18078,61581,61581,'OP_BadLanguageFilter',524,1),(18079,61581,61581,'OP_BagOptions',507,1),(18080,61581,61581,'OP_BeginItemCreationMsg',224,1),(18081,61581,61581,'OP_BeginTrackingMsg',395,1),(18082,61581,61581,'OP_BioUpdateMsg',366,1),(18083,61581,61581,'OP_BrokerAddBag',296,1),(18084,61581,61581,'OP_BrokerRemoveBag',297,1),(18085,61581,61581,'OP_BrokerSellList',709,1),(18086,61581,61581,'OP_BuyPlayerHouseMsg',153,1),(18087,61581,61581,'OP_BuyPlayerHouseTintMsg',154,1),(18088,61581,61581,'OP_CampAbortedMsg',54,1),(18089,61581,61581,'OP_CampClientMsg',392,1),(18090,61581,61581,'OP_CampStartedMsg',53,1),(18091,61581,61581,'OP_CancelCreateFromRecipeMsg',223,1),(18092,61581,61581,'OP_CancelledFeignMsg',219,1),(18093,61581,61581,'OP_CancelMoveObjectModeMsg',166,1),(18094,61581,61581,'OP_CancelSpellCast',494,1),(18095,61581,61581,'OP_ChangeServerControlFlagMsg',250,1),(18096,61581,61581,'OP_ChangeZoneMsg',79,1),(18097,61581,61581,'OP_CharacterAchievements',765,1),(18098,61581,61581,'OP_CharacterCreatedDungeons',558,1),(18099,61581,61581,'OP_CharacterCurrency',764,1),(18100,61581,61581,'OP_CharacterHousingList',512,1),(18101,61581,61581,'OP_CharacterLinkdeadMsg',419,1),(18102,61581,61581,'OP_CharacterMerc',67,1),(18103,61581,61581,'OP_CharacterMounts',591,1),(18104,61581,61581,'OP_CharacterPet',66,1),(18105,61581,61581,'OP_CharNameChangedMsg',356,1),(18106,61581,61581,'OP_CharRenamed',730,1),(18107,61581,61581,'OP_CharTransferCommitReplyMsg',427,1),(18108,61581,61581,'OP_CharTransferCommitRequestMsg',425,1),(18109,61581,61581,'OP_CharTransferReplyMsg',423,1),(18110,61581,61581,'OP_CharTransferRequestMsg',422,1),(18111,61581,61581,'OP_CharTransferRollbackReplyMsg',426,1),(18112,61581,61581,'OP_CharTransferRollbackRequestMsg',424,1),(18113,61581,61581,'OP_CharTransferStartReplyMsg',421,1),(18114,61581,61581,'OP_CharTransferStartRequestMsg',420,1),(18115,61581,61581,'OP_CharTransferValidateReplyMsg',443,1),(18116,61581,61581,'OP_CharTransferValidateRequestMsg',442,1),(18117,61581,61581,'OP_ChatCreateChannelMsg',289,1),(18118,61581,61581,'OP_ChatFiltersMsg',338,1),(18119,61581,61581,'OP_ChatJoinChannelMsg',290,1),(18120,61581,61581,'OP_ChatLeaveChannelMsg',292,1),(18121,61581,61581,'OP_ChatRelationshipUpdateMsg',187,1),(18122,61581,61581,'OP_ChatSendFriendsMsg',299,1),(18123,61581,61581,'OP_ChatSendIgnoresMsg',300,1),(18124,61581,61581,'OP_ChatTellChannelMsg',293,1),(18125,61581,61581,'OP_ChatTellUserMsg',294,1),(18126,61581,61581,'OP_ChatToggleFriendMsg',295,1),(18127,61581,61581,'OP_ChatToggleIgnoreMsg',298,1),(18128,61581,61581,'OP_ChatWhoChannelMsg',291,1),(18129,61581,61581,'OP_ClearDataMsg',100,1),(18130,61581,61581,'OP_ClearForLandingMsg',496,1),(18131,61581,61581,'OP_ClearForTakeOffMsg',194,1),(18132,61581,61581,'OP_ClientCmdMsg',60,1),(18133,61581,61581,'OP_ClientFellMsg',390,1),(18134,61581,61581,'OP_ClientIdleBeginMsg',410,1),(18135,61581,61581,'OP_ClientIdleEndMsg',411,1),(18136,61581,61581,'OP_ClientInDeathRegionMsg',391,1),(18137,61581,61581,'OP_ClientTeleportRequestMsg',80,1),(18138,61581,61581,'OP_ClientTeleportToLocationMsg',248,1),(18139,61581,61581,'OP_CloseGroupInviteWindowMsg',402,1),(18140,61581,61581,'OP_CollectAllHouseItemsMsg',155,1),(18141,61581,61581,'OP_ConsignItemRequestMsg',129,1),(18142,61581,61581,'OP_ConsignItemResponseMsg',130,1),(18143,61581,61581,'OP_ConsignmentCloseStoreMsg',128,1),(18144,61581,61581,'OP_ConsignRemoveItemsMsg',382,1),(18145,61581,61581,'OP_ConsignViewCreateMsg',379,1),(18146,61581,61581,'OP_ConsignViewGetPageMsg',380,1),(18147,61581,61581,'OP_ConsignViewReleaseMsg',381,1),(18148,61581,61581,'OP_ConsignViewSortMsg',388,1),(18149,61581,61581,'OP_CorruptedClientMsg',414,1),(18150,61581,61581,'OP_CreateBoatTransportsMsg',254,1),(18151,61581,61581,'OP_CreateCharacterDungeon',552,1),(18152,61581,61581,'OP_CreateCharacterReplyMsg',12,1),(18153,61581,61581,'OP_CreateCharacterRequestMsg',11,1),(18154,61581,61581,'OP_CreateCharFromCBBReplyMsg',431,1),(18155,61581,61581,'OP_CreateCharFromCBBRequestMsg',430,1),(18156,61581,61581,'OP_CreateGuildReplyMsg',123,1),(18157,61581,61581,'OP_CreateGuildRequestMsg',121,1),(18158,61581,61581,'OP_CreateZoneInstanceMsg',31,1),(18159,61581,61581,'OP_CsCategoryRequestMsg',371,1),(18160,61581,61581,'OP_CsCategoryResponseMsg',372,1),(18161,61581,61581,'OP_CSTicketAddCommentMsg',237,1),(18162,61581,61581,'OP_CSTicketChangeNotificationMsg',239,1),(18163,61581,61581,'OP_CSTicketCommentRequestMsg',234,1),(18164,61581,61581,'OP_CSTicketCommentResponseMsg',235,1),(18165,61581,61581,'OP_CSTicketCreateMsg',236,1),(18166,61581,61581,'OP_CSTicketDeleteMsg',238,1),(18167,61581,61581,'OP_CSTicketHeaderRequestMsg',232,1),(18168,61581,61581,'OP_CSTicketInfoMsg',233,1),(18169,61581,61581,'OP_CSToolAccessResponseMsg',393,1),(18170,61581,61581,'OP_CSToolsRequestMsg',251,1),(18171,61581,61581,'OP_CSToolsResponseMsg',252,1),(18172,61581,61581,'OP_CurrentPet',490,1),(18173,61581,61581,'OP_CustomizationPurchaseRequestMs',170,1),(18174,61581,61581,'OP_CustomizationReplyMsg',172,1),(18175,61581,61581,'OP_CustomizationSetRequestMsg',171,1),(18176,61581,61581,'OP_CustomizeHouseDisplay',755,1),(18177,61581,61581,'OP_DailyObjectives',604,1),(18178,61581,61581,'OP_DefaultGroupOptionsMsg',201,1),(18179,61581,61581,'OP_DefaultGroupOptionsRequestMsg',200,1),(18180,61581,61581,'OP_DeleteCharacterReplyMsg',19,1),(18181,61581,61581,'OP_DeleteCharacterRequestMsg',18,1),(18182,61581,61581,'OP_DeleteGuildMsg',126,1),(18183,61581,61581,'OP_DestUpdateReq',213,1),(18184,61581,61581,'OP_DialogCloseMsg',112,1),(18185,61581,61581,'OP_DialogSelectMsg',111,1),(18186,61581,61581,'OP_DispatchClientCmdMsg',62,1),(18187,61581,61581,'OP_DispatchESMsg',61,1),(18188,61581,61581,'OP_DispatchMsg',456,1),(18189,61581,61581,'OP_DispatchSpellCmdMsg',182,1),(18190,61581,61581,'OP_DisplayDebugNLLPointsMsg',258,1),(18191,61581,61581,'OP_DisplayEventMsg',457,1),(18192,61581,61581,'OP_DisplayExchangeScreenMsg',449,1),(18193,61581,61581,'OP_DisplayGroupOptionsScreenMsg',203,1),(18194,61581,61581,'OP_DisplayInnVisitScreenMsg',205,1),(18195,61581,61581,'OP_DisplayMailScreenMsg',409,1),(18196,61581,61581,'OP_DisplayTSEventReactionMsg',228,1),(18197,61581,61581,'OP_DisplayWarningMsg',269,1),(18198,61581,61581,'OP_DoneLoadingEntityResourcesMsg',38,1),(18199,61581,61581,'OP_DoneLoadingZoneResourcesMsg',36,1),(18200,61581,61581,'OP_DoneSendingInitialEntitiesMsg',37,1),(18201,61581,61581,'OP_DressingRoom',515,1),(18202,61581,61581,'OP_DumpSchedulerMsg',206,1),(18203,61581,61581,'OP_DungeonMakerEnter',553,1),(18204,61581,61581,'OP_DungeonMakerItemRequest',557,1),(18205,61581,61581,'OP_DungeonMakerItemResponse',589,1),(18206,61581,61581,'OP_DungeonMakerToolboxList',559,1),(18207,61581,61581,'OP_DungeonMakerUnknown',560,1),(18208,61581,61581,'OP_DungeonMakerUnknown1',561,1),(18209,61581,61581,'OP_DungeonPlayAsAvatarList',769,1),(18210,61581,61581,'OP_DungeonPlayAsAvatarSelected',770,1),(18211,61581,61581,'OP_EncounterBrokenMsg',267,1),(18212,61581,61581,'OP_EnterHouseMsg',157,1),(18213,61581,61581,'OP_EnterMoveObjectModeMsg',164,1),(18214,61581,61581,'OP_EntityVerbsReplyMsg',184,1),(18215,61581,61581,'OP_EntityVerbsRequestMsg',183,1),(18216,61581,61581,'OP_EntityVerbsVerbMsg',185,1),(18217,61581,61581,'OP_EqArenaResultsCmd',720,1),(18218,61581,61581,'OP_EqAvailWorldChannelsCmd',707,1),(18219,61581,61581,'OP_EqBetaCopyRequest',626,1),(18220,61581,61581,'OP_EqCannedEmoteCmd',649,1),(18221,61581,61581,'OP_EqChatChannelUpdateCmd',705,1),(18222,61581,61581,'OP_EqChoiceWinCmd',686,1),(18223,61581,61581,'OP_EqCloseWindowCmd',678,1),(18224,61581,61581,'OP_EqCollectionFilterCmd',665,1),(18225,61581,61581,'OP_EqCollectionItemCmd',666,1),(18226,61581,61581,'OP_EqCollectionUpdateCmd',664,1),(18227,61581,61581,'OP_EqConsignmentItemsCmd',710,1),(18228,61581,61581,'OP_EqCreateGhostCmd',631,1),(18229,61581,61581,'OP_EqCreateListBoxCmd',646,1),(18230,61581,61581,'OP_EqCreateSignWidgetCmd',633,1),(18231,61581,61581,'OP_EqCreateWidgetCmd',632,1),(18232,61581,61581,'OP_EqDebugPVDCmd',699,1),(18233,61581,61581,'OP_EqDestroyGhostCmd',634,1),(18234,61581,61581,'OP_EqDialogCloseCmd',662,1),(18235,61581,61581,'OP_EqDialogOpenCmd',661,1),(18236,61581,61581,'OP_EqDisplaySpellFailCmd',682,1),(18237,61581,61581,'OP_EqDisplayTextCmd',630,1),(18238,61581,61581,'OP_EqDrawablePathGraphCmd',660,1),(18239,61581,61581,'OP_EqEnableGameEventCmd',692,1),(18240,61581,61581,'OP_EqEnableWindowCmd',694,1),(18241,61581,61581,'OP_EqExamineInfoCmd',677,1),(18242,61581,61581,'OP_EqFactionUpdateCmd',663,1),(18243,61581,61581,'OP_EqFlashWindowCmd',695,1),(18244,61581,61581,'OP_EqGetProbsCmd',703,1),(18245,61581,61581,'OP_EqGroupMemberRemovedCmd',656,1),(18246,61581,61581,'OP_EqGuildBankEventActionCmd',721,1),(18247,61581,61581,'OP_EqGuildBankExamineInfoCmd',722,1),(18248,61581,61581,'OP_EqHearChainEffectCmd',657,1),(18249,61581,61581,'OP_EqHearChatCmd',629,1),(18250,61581,61581,'OP_EqHearCombatCmd',638,1),(18251,61581,61581,'OP_EqHearConsiderCmd',644,1),(18252,61581,61581,'OP_EqHearDeathCmd',655,1),(18253,61581,61581,'OP_EQHearDispellCmd',767,1),(18254,61581,61581,'OP_EqHearDrowningCmd',654,1),(18255,61581,61581,'OP_EqHearHealCmd',704,1),(18256,61581,61581,'OP_EqHearPlayFlavorCmd',697,1),(18257,61581,61581,'OP_EQHearProcCmd',640,1),(18258,61581,61581,'OP_EQHearResEffectCmd',641,1),(18259,61581,61581,'OP_EqHearSpellCastCmd',639,1),(18260,61581,61581,'OP_EqHearSpellFizzleCmd',643,1),(18261,61581,61581,'OP_EqHearSpellInterruptCmd',642,1),(18262,61581,61581,'OP_EqHearSpellNoLandCmd',723,1),(18263,61581,61581,'OP_EQHearThreatCmd',761,1),(18264,61581,61581,'OP_EqHelpPathClearCmd',675,1),(18265,61581,61581,'OP_EqHelpPathCmd',674,1),(18266,61581,61581,'OP_EqInspectPCResultsCmd',659,1),(18267,61581,61581,'OP_EqInstructionWindowCloseCmd',689,1),(18268,61581,61581,'OP_EqInstructionWindowCmd',688,1),(18269,61581,61581,'OP_EqInstructionWindowGoalCmd',690,1),(18270,61581,61581,'OP_EqInstructionWindowTaskCmd',691,1),(18271,61581,61581,'OP_EqJunctionListCmd',680,1),(18272,61581,61581,'OP_EqMapExplorationCmd',713,1),(18273,61581,61581,'OP_EqMentoring',668,1),(18274,61581,61581,'OP_EqPlaySound3DCmd',652,1),(18275,61581,61581,'OP_EqPlaySoundCmd',651,1),(18276,61581,61581,'OP_EqPlayVoiceCmd',653,1),(18277,61581,61581,'OP_EqQuestGroupCmd',670,1),(18278,61581,61581,'OP_EqQuestionnaireCmd',701,1),(18279,61581,61581,'OP_EqQuestJournalReplyCmd',669,1),(18280,61581,61581,'OP_EqQuestJournalUpdateCmd',667,1),(18281,61581,61581,'OP_EqReceiveOfferCmd',658,1),(18282,61581,61581,'OP_EqResurrectedCmd',685,1),(18283,61581,61581,'OP_EqSetControlGhostCmd',636,1),(18284,61581,61581,'OP_EqSetDebugPathPointsCmd',647,1),(18285,61581,61581,'OP_EqSetDefaultVerbCmd',687,1),(18286,61581,61581,'OP_EqSetPOVGhostCmd',637,1),(18287,61581,61581,'OP_EqShowBookCmd',700,1),(18288,61581,61581,'OP_EqShowDeathWindowCmd',681,1),(18289,61581,61581,'OP_EqShowWindowCmd',693,1),(18290,61581,61581,'OP_EqSpellCastEndCmd',684,1),(18291,61581,61581,'OP_EqSpellCastStartCmd',683,1),(18292,61581,61581,'OP_EqSpellMoveToRangeAndRetryCmd',715,1),(18293,61581,61581,'OP_EqStartBrokerCmd',712,1),(18294,61581,61581,'OP_EqStateCmd',650,1),(18295,61581,61581,'OP_EqStoreLogCmd',714,1),(18296,61581,61581,'OP_EqUpdateBankCmd',676,1),(18297,61581,61581,'OP_EqUpdateGhostCmd',635,1),(18298,61581,61581,'OP_EqUpdateLootCmd',679,1),(18299,61581,61581,'OP_EqUpdateMerchantCmd',671,1),(18300,61581,61581,'OP_EqUpdatePlayerMailCmd',716,1),(18301,61581,61581,'OP_EqUpdatePlayerTradeCmd',673,1),(18302,61581,61581,'OP_EqUpdateSignWidgetCmd',698,1),(18303,61581,61581,'OP_EqUpdateStoreCmd',672,1),(18304,61581,61581,'OP_EqUpdateSubClassesCmd',645,1),(18305,61581,61581,'OP_EqUpdateTargetCmd',708,1),(18306,61581,61581,'OP_EqWhoChannelQueryReplyCmd',706,1),(18307,61581,61581,'OP_ESInitMsg',27,1),(18308,61581,61581,'OP_ESLoginRequestMsg',3,1),(18309,61581,61581,'OP_ESReadyForClientsMsg',28,1),(18310,61581,61581,'OP_ESStatusMsg',102,1),(18311,61581,61581,'OP_ESWeatherRequestEndMsg',107,1),(18312,61581,61581,'OP_ESWeatherRequestMsg',106,1),(18313,61581,61581,'OP_ESZoneInstanceStatusMsg',103,1),(18314,61581,61581,'OP_ExamineConsignmentRequestMsg',174,1),(18315,61581,61581,'OP_ExamineConsignmentResponseMsg',175,1),(18316,61581,61581,'OP_ExamineInfoRequestMsg',259,1),(18317,61581,61581,'OP_ExamineItemRequestMsg',198,1),(18318,61581,61581,'OP_ExitHouseMsg',158,1),(18319,61581,61581,'OP_ExpectClientAsCharacterReplyMs',24,1),(18320,61581,61581,'OP_ExpectClientAsCharacterRequest',34,1),(18321,61581,61581,'OP_ExpPurchWindow',746,1),(18322,61581,61581,'OP_FellowshipExpMsg',125,1),(18323,61581,61581,'OP_FlightPathsMsg',418,1),(18324,61581,61581,'OP_GameWorldTimeMsg',45,1),(18325,61581,61581,'OP_PaperdollImage',584,1),(18326,61581,61581,'OP_GetAuctionAssetIDMsg',446,1),(18327,61581,61581,'OP_GetAuctionAssetIDReplyMsg',447,1),(18328,61581,61581,'OP_GetAvatarAccessRequestForCSToo',398,1),(18329,61581,61581,'OP_GetCharacterSerializedReplyMsg',429,1),(18330,61581,61581,'OP_GetCharacterSerializedRequestM',428,1),(18331,61581,61581,'OP_GroupCreatedMsg',90,1),(18332,61581,61581,'OP_GroupDestroyedMsg',91,1),(18333,61581,61581,'OP_GroupLeaderChangedMsg',95,1),(18334,61581,61581,'OP_GroupMemberAddedMsg',92,1),(18335,61581,61581,'OP_GroupMemberRemovedMsg',93,1),(18336,61581,61581,'OP_GroupOptionsMsg',202,1),(18337,61581,61581,'OP_GroupRemovedFromGroupMsg',94,1),(18338,61581,61581,'OP_GroupResendOOZDataMsg',96,1),(18339,61581,61581,'OP_GroupSettingsChangedMsg',97,1),(18340,61581,61581,'OP_GuildBankActionMsg',278,1),(18341,61581,61581,'OP_GuildBankActionResponseMsg',279,1),(18342,61581,61581,'OP_GuildBankEventListMsg',283,1),(18343,61581,61581,'OP_GuildBankItemDetailsRequestMsg',280,1),(18344,61581,61581,'OP_GuildBankItemDetailsResponseMs',281,1),(18345,61581,61581,'OP_GuildBankUpdateMsg',282,1),(18346,61581,61581,'OP_GuildEventActionMsg',273,1),(18347,61581,61581,'OP_GuildEventAddMsg',272,1),(18348,61581,61581,'OP_GuildEventDetailsMsg',276,1),(18349,61581,61581,'OP_GuildEventListMsg',274,1),(18350,61581,61581,'OP_GuildEventMsg',271,1),(18351,61581,61581,'OP_GuildMembershipResponseMsg',361,1),(18352,61581,61581,'OP_GuildRecruiting',726,1),(18353,61581,61581,'OP_GuildRecruitingDetails',727,1),(18354,61581,61581,'OP_GuildRecruitingImage',728,1),(18355,61581,61581,'OP_GuildRecruitingMemberInfo',725,1),(18356,61581,61581,'OP_GuildsayMsg',124,1),(18357,61581,61581,'OP_GuildStatusUpdate',719,1),(18358,61581,61581,'OP_GuildUpdateMsg',127,1),(18359,61581,61581,'OP_HeritageMsg',10011,1),(18360,61581,61581,'OP_HideIllusionsMsg',197,1),(18361,61581,61581,'OP_HouseAccessRemoveMsg',161,1),(18362,61581,61581,'OP_HouseAccessSetMsg',160,1),(18363,61581,61581,'OP_HouseCustomizationScreenMsg',169,1),(18364,61581,61581,'OP_HouseDefaultAccessSetMsg',159,1),(18365,61581,61581,'OP_HouseDeletedRemotelyMsg',145,1),(18366,61581,61581,'OP_HouseItemsList',489,1),(18367,61581,61581,'OP_HousingDataChangedMsg',432,1),(18368,61581,61581,'OP_HousingRestoreMsg',433,1),(18369,61581,61581,'OP_InspectPlayerMsg',367,1),(18370,61581,61581,'OP_InspectPlayerRequestMsg',455,1),(18371,61581,61581,'OP_InviteRequestMsg',452,1),(18372,61581,61581,'OP_InviteResponseMsg',453,1),(18373,61581,61581,'OP_InviteTargetResponseMsg',454,1),(18374,61581,61581,'OP_JoinGuildNotifyMsg',363,1),(18375,61581,61581,'OP_JournalQuestStoryline',768,1),(18376,61581,61581,'OP_KeymapDataMsg',180,1),(18377,61581,61581,'OP_KeymapLoadMsg',178,1),(18378,61581,61581,'OP_KeymapNoneMsg',179,1),(18379,61581,61581,'OP_KeymapSaveMsg',181,1),(18380,61581,61581,'OP_KnowledgebaseRequestMsg',230,1),(18381,61581,61581,'OP_KnowledgebaseResponseMsg',231,1),(18382,61581,61581,'OP_KnowledgeWindowSlotMappingMsg',373,1),(18383,61581,61581,'OP_KnownLanguagesMsg',242,1),(18384,61581,61581,'OP_Launchpad',582,1),(18385,61581,61581,'OP_LeaveGuildNotifyMsg',362,1),(18386,61581,61581,'OP_LevelChangedMsg',265,1),(18387,61581,61581,'OP_LFGGroupSearch',509,1),(18388,61581,61581,'OP_LFGUpdateMsg',523,1),(18389,61581,61581,'OP_LikeOption',139,1),(18390,61581,61581,'OP_LoadCalendarEvents',585,1),(18391,61581,61581,'OP_LoadWelcomeWindow',567,1),(18392,61581,61581,'OP_LoginByNumRequestMsg',1,1),(18393,61581,61581,'OP_LoginReplyMsg',4,1),(18394,61581,61581,'OP_LoginRequestMsg',0,1),(18395,61581,61581,'OP_LootItemsRequestMsg',188,1),(18396,61581,61581,'OP_Lottery',724,1),(18397,61581,61581,'OP_LSCheckAcctLockMsg',207,1),(18398,61581,61581,'OP_LsClientAlertlogReplyMsg',246,1),(18399,61581,61581,'OP_LsClientBaselogReplyMsg',244,1),(18400,61581,61581,'OP_LsClientCrashlogReplyMsg',245,1),(18401,61581,61581,'OP_LsClientVerifylogReplyMsg',247,1),(18402,61581,61581,'OP_LsRequestClientCrashLogMsg',243,1),(18403,61581,61581,'OP_LSServerLockMsg',369,1),(18404,61581,61581,'OP_MacroInitMsg',262,1),(18405,61581,61581,'OP_MacroUpdateMsg',263,1),(18406,61581,61581,'OP_MailCommitSendMessageMsg',348,1),(18407,61581,61581,'OP_MailDeleteMessageMsg',344,1),(18408,61581,61581,'OP_MailEventNotificationMsg',416,1),(18409,61581,61581,'OP_MailGetHeadersReplyMsg',345,1),(18410,61581,61581,'OP_MailGetMessageMsg',342,1),(18411,61581,61581,'OP_MailGetMessageReplyMsg',346,1),(18412,61581,61581,'OP_MailRemoveAttachFromMailMsg',350,1),(18413,61581,61581,'OP_MailSendMessageMsg',343,1),(18414,61581,61581,'OP_MailSendMessageReplyMsg',347,1),(18415,61581,61581,'OP_MailSendSystemMessageMsg',349,1),(18416,61581,61581,'OP_MakeGroupLeaderMsg',89,1),(18417,61581,61581,'OP_MapFogDataInitMsg',400,1),(18418,61581,61581,'OP_MapFogDataUpdateMsg',401,1),(18419,61581,61581,'OP_MapRequest',526,1),(18420,61581,61581,'OP_MarketAddFundsReply',534,1),(18421,61581,61581,'OP_MarketAddFundsRequest',533,1),(18422,61581,61581,'OP_MarketFundsUpdate',531,1),(18423,61581,61581,'OP_MarketPlaceItems',544,1),(18424,61581,61581,'OP_MarketPlacePrices',537,1),(18425,61581,61581,'OP_MarketPurchase',536,1),(18426,61581,61581,'OP_MentorPopup',565,1),(18427,61581,61581,'OP_MercHireWindow',771,1),(18428,61581,61581,'OP_MercUnknown',772,1),(18429,61581,61581,'OP_MigrateBoatTransportMsg',256,1),(18430,61581,61581,'OP_MigrateBoatTransportReplyMsg',257,1),(18431,61581,61581,'OP_MigrateClientToZoneReplyMsg',84,1),(18432,61581,61581,'OP_MigrateClientToZoneRequestMsg',83,1),(18433,61581,61581,'OP_ModifyGuildMsg',270,1),(18434,61581,61581,'OP_MonitorCharacterListMsg',58,1),(18435,61581,61581,'OP_MonitorCharacterListRequestMsg',59,1),(18436,61581,61581,'OP_MonitorReplyMsg',57,1),(18437,61581,61581,'OP_MOTDMsg',46,1),(18438,61581,61581,'OP_MoveableObjectPlacementCriteri',163,1),(18439,61581,61581,'OP_MoveLogUpdateMsg',405,1),(18440,61581,61581,'OP_NotifyApprenticeStoppedMentori',413,1),(18441,61581,61581,'OP_OfferQuestMsg',406,1),(18442,61581,61581,'OP_OnscreenMsgMsg',268,1),(18443,61581,61581,'OP_OpenCharCust',568,1),(18444,61581,61581,'OP_OutOfZoneMemberDataMsg',98,1),(18445,61581,61581,'OP_PayHouseUpkeepMsg',162,1),(18446,61581,61581,'OP_PerformCameraShakeMsg',217,1),(18447,61581,61581,'OP_PerformPlayerKnockbackMsg',216,1),(18448,61581,61581,'OP_PetOptions',204,1),(18449,61581,61581,'OP_PetOptionsResponse',588,1),(18450,61581,61581,'OP_PlayCharacterReplyMsg',21,1),(18451,61581,61581,'OP_PlayCharacterRequestMsg',20,1),(18452,61581,61581,'OP_PlayerHouseAccessUpdateMsg',150,1),(18453,61581,61581,'OP_PlayerHouseBaseScreenMsg',148,1),(18454,61581,61581,'OP_PlayerHouseCloseUIMsg',152,1),(18455,61581,61581,'OP_PlayerHouseDisplayStatusMsg',151,1),(18456,61581,61581,'OP_PlayerHousePurchaseScreenMsg',149,1),(18457,61581,61581,'OP_PlayerMadeInstances',143,1),(18458,61581,61581,'OP_PlayerMadeInstancesScreen',142,1),(18459,61581,61581,'OP_PlayerPollAnswer',564,1),(18460,61581,61581,'OP_PlayerPollPopup',563,1),(18461,61581,61581,'OP_PlayLon',516,1),(18462,61581,61581,'OP_PointOfInterest',750,1),(18463,61581,61581,'OP_PointOfInterest2',751,1),(18464,61581,61581,'OP_PopulateSkillMapsMsg',218,1),(18465,61581,61581,'OP_PositionBoatTransportMsg',255,1),(18466,61581,61581,'OP_PositionMoveableObject',165,1),(18467,61581,61581,'OP_PostPossessionMsg',459,1),(18468,61581,61581,'OP_PredictionUpdateMsg',39,1),(18469,61581,61581,'OP_PrePossessionMsg',458,1),(18470,61581,61581,'OP_PromoFlagsDetailsMsg',378,1),(18471,61581,61581,'OP_PublishHouse',141,1),(18472,61581,61581,'OP_PurchaseConsignmentLoreCheckRe',412,1),(18473,61581,61581,'OP_PurchaseConsignmentRequestMsg',131,1),(18474,61581,61581,'OP_QueAllBgSolo',571,1),(18475,61581,61581,'OP_QuestionnaireMsg',264,1),(18476,61581,61581,'OP_QuestJournalInspectMsg',116,1),(18477,61581,61581,'OP_QuestJournalOpenMsg',115,1),(18478,61581,61581,'OP_QuestJournalSetVisibleMsg',117,1),(18479,61581,61581,'OP_QuestJournalWaypointMsg',118,1),(18480,61581,61581,'OP_QuestReward',324,1),(18481,61581,61581,'OP_QuickbarInitMsg',260,1),(18482,61581,61581,'OP_QuickbarUpdateMsg',261,1),(18483,61581,61581,'OP_RaceRestrictionMsg',444,1),(18484,61581,61581,'OP_ReadBookPageMsg',199,1),(18485,61581,61581,'OP_ReadyForTakeOffMsg',195,1),(18486,61581,61581,'OP_ReadyToZoneMsg',86,1),(18487,61581,61581,'OP_RecipeBook',545,1),(18488,61581,61581,'OP_RecipeDetailsMsg',74,1),(18489,61581,61581,'OP_RecipeList',762,1),(18490,61581,61581,'OP_RecipeListUnknown',600,1),(18491,61581,61581,'OP_RelinquishHouseMsg',156,1),(18492,61581,61581,'OP_ReloadLocalizedTxtMsg',359,1),(18493,61581,61581,'OP_RemoteCmdMsg',44,1),(18494,61581,61581,'OP_RemoveClientFromGroupMsg',87,1),(18495,61581,61581,'OP_RemoveConcentrationMsg',114,1),(18496,61581,61581,'OP_RemoveGroupFromGroupMsg',88,1),(18497,61581,61581,'OP_RemoveSpellEffectMsg',113,1),(18498,61581,61581,'OP_RenameGuildMsg',286,1),(18499,61581,61581,'OP_ReplaceableSubMeshesMsg',168,1),(18500,61581,61581,'OP_ReportMsg',384,1),(18501,61581,61581,'OP_RequestCampMsg',52,1),(18502,61581,61581,'OP_RequestGuildBankEventDetailsMs',284,1),(18503,61581,61581,'OP_RequestGuildEventDetailsMsg',275,1),(18504,61581,61581,'OP_RequestGuildInfoMsg',277,1),(18505,61581,61581,'OP_RequestGuildMembershipMsg',360,1),(18506,61581,61581,'OP_RequestHelpRepathMsg',209,1),(18507,61581,61581,'OP_RequestRecipeDetailsMsg',73,1),(18508,61581,61581,'OP_RequestTargetLocMsg',210,1),(18509,61581,61581,'OP_Research',763,1),(18510,61581,61581,'OP_ResendWorldChannelsMsg',448,1),(18511,61581,61581,'OP_ReskinCharacterRequestMsg',15,1),(18512,61581,61581,'OP_RestartZoneMsg',417,1),(18513,61581,61581,'OP_RewardPackMsg',285,1),(18514,61581,61581,'OP_SatMsg',192,1),(18515,61581,61581,'OP_SavageBarInitMsg',587,1),(18516,61581,61581,'OP_SelectZoneTeleporterDestinatio',358,1),(18517,61581,61581,'OP_SendLatestRequestMsg',99,1),(18518,61581,61581,'OP_ServerPlayCharacterReplyMsg',26,1),(18519,61581,61581,'OP_ServerPlayCharacterRequestMsg',25,1),(18520,61581,61581,'OP_SetInstanceDisplayNameMsg',445,1),(18521,61581,61581,'OP_SetRemoteCmdsMsg',43,1),(18522,61581,61581,'OP_SetSocialMsg',101,1),(18523,61581,61581,'OP_ShaderCustomizationMsg',167,1),(18524,61581,61581,'OP_ShowCreateFromRecipeUIMsg',222,1),(18525,61581,61581,'OP_ShowIllusionsMsg',196,1),(18526,61581,61581,'OP_ShowItemCreationProcessUIMsg',226,1),(18527,61581,61581,'OP_ShowRecipeBookMsg',229,1),(18528,61581,61581,'OP_ShowZoneTeleporterDestinations',357,1),(18529,61581,61581,'OP_SitMsg',190,1),(18530,61581,61581,'OP_SkillInfoRequest',519,1),(18531,61581,61581,'OP_SkillInfoResponse',520,1),(18532,61581,61581,'OP_SOEAllAccess',627,1),(18533,61581,61581,'OP_SpellGainedMsg',266,1),(18534,61581,61581,'OP_StandMsg',191,1),(18535,61581,61581,'OP_StoodMsg',193,1),(18536,61581,61581,'OP_StopItemCreationMsg',225,1),(18537,61581,61581,'OP_StoppedLootingMsg',189,1),(18538,61581,61581,'OP_StopTrackingMsg',396,1),(18539,61581,61581,'OP_SubmitCharCust',569,1),(18540,61581,61581,'OP_SupplyDepot',760,1),(18541,61581,61581,'OP_SysClient',221,1),(18542,61581,61581,'OP_TeleportWithinZoneMsg',81,1),(18543,61581,61581,'OP_TeleportWithinZoneNoReloadMsg',82,1),(18544,61581,61581,'OP_TintWidgetsMsg',173,1),(18545,61581,61581,'OP_TitleUpdateMsg',389,1),(18546,61581,61581,'OP_TrackingUpdateMsg',394,1),(18547,61581,61581,'OP_TradeskillList',729,1),(18548,61581,61581,'OP_TraitsList',752,1),(18549,61581,61581,'OP_UIEvent',532,1),(18550,61581,61581,'OP_UIResetMsg',177,1),(18551,61581,61581,'OP_UISettingsResponseMsg',176,1),(18552,61581,61581,'OP_Unknown',785,1),(18553,61581,61581,'OP_UnknownNpcMsg',377,1),(18554,61581,61581,'OP_UpdateActivePublicZonesMsg',376,1),(18555,61581,61581,'OP_UpdateCharacterSheetMsg',65,1),(18556,61581,61581,'OP_UpdateClientPredFlagsMsg',249,1),(18557,61581,61581,'OP_UpdateDebugRadiiMsg',383,1),(18558,61581,61581,'OP_UpdateGroupMemberDataMsg',393,1),(18559,61581,61581,'OP_UpdateHouseAccessDataMsg',147,1),(18560,61581,61581,'OP_UpdateHouseDataMsg',146,1),(18561,61581,61581,'OP_UpdateInventoryMsg',70,1),(18562,61581,61581,'OP_UpdateItemCreationProcessUIMsg',227,1),(18563,61581,61581,'OP_UpdateMotdMsg',211,1),(18564,61581,61581,'OP_UpdateOpportunityMsg',77,1),(18565,61581,61581,'OP_UpdatePositionMsg',41,1),(18566,61581,61581,'OP_UpdateRaidMsg',385,1),(18567,61581,61581,'OP_UpdateRecipeBookMsg',72,1),(18568,61581,61581,'OP_UpdateSkillBookMsg',75,1),(18569,61581,61581,'OP_UpdateSkillsMsg',76,1),(18570,61581,61581,'OP_UpdateSpellBookMsg',68,1),(18571,61581,61581,'OP_UpdateTargetLocMsg',64,1),(18572,61581,61581,'OP_UpdateTargetMsg',63,1),(18573,61581,61581,'OP_UpdateTitleCmd',499,1),(18574,61581,61581,'OP_UseAdornment',740,1),(18575,61581,61581,'OP_VideoUploaded',586,1),(18576,61581,61581,'OP_VoiceChatChannel',525,1),(18577,61581,61581,'OP_VoiceChatServer',756,1),(18578,61581,61581,'OP_WaypointReplyMsg',353,1),(18579,61581,61581,'OP_WaypointRequestMsg',352,1),(18580,61581,61581,'OP_WaypointSelectMsg',354,1),(18581,61581,61581,'OP_WaypointUpdateMsg',355,1),(18582,61581,61581,'OP_Weakness',590,1),(18583,61581,61581,'OP_WhoQueryReplyMsg',56,1),(18584,61581,61581,'OP_WhoQueryRequestMsg',55,1),(18585,61581,61581,'OP_WorldDataChangeMsg',415,1),(18586,61581,61581,'OP_WorldDataUpdateMsg',240,1),(18587,61581,61581,'OP_WorldListMsg',8,1),(18588,61581,61581,'OP_WorldPingMsg',404,1),(18589,61581,61581,'OP_WorldShutdownUpdateMsg',408,1),(18590,61581,61581,'OP_WorldStatusChangeMsg',6,1),(18591,61581,61581,'OP_WorldTravelAvail',579,1),(18592,61581,61581,'OP_WSAcctLockStatusMsg',208,1),(18593,61581,61581,'OP_WSCreateCharacterReplyMsg',14,1),(18594,61581,61581,'OP_WSCreateCharacterRequestMsg',13,1),(18595,61581,61581,'OP_WSLoginRequestMsg',2,1),(18596,61581,61581,'OP_WSServerHideMsg',370,1),(18597,61581,61581,'OP_WSServerLockMsg',368,1),(18598,61581,61581,'OP_WSStatusReplyMsg',5,1),(18599,61581,61581,'OP_ZoneBgInstanceList',575,1),(18600,61581,61581,'OP_ZoneInfoMsg',35,1),(18601,61581,61581,'OP_ZoneInstanceCreateReplyMsg',32,1),(18602,61581,61581,'OP_ZoneInstanceDestroyedMsg',33,1),(18603,61581,61581,'OP_ZoneMOTDMsg',47,1),(18604,61581,61581,'OP_ZonesStatusMsg',105,1),(18605,61581,61581,'OP_ZonesStatusRequestMsg',104,1),(18606,61581,61581,'OP_ZoneToFriendReplyMsg',288,1),(18607,61581,61581,'OP_ZoneToFriendRequestMsg',287,1),(18608,61581,61581,'OP_EarlyLandingRequestMsg',491,1),(19073,61608,61608,'OP_AchievementUpdateMsg',764,1),(19074,61608,61608,'OP_AddSocialStructureStandingMsg',253,1),(19075,61608,61608,'OP_AdvancementRequestMsg',399,1),(19076,61608,61608,'OP_AdventureList',493,1),(19077,61608,61608,'OP_AFKUpdateMsg',374,1),(19078,61608,61608,'OP_AfterInvSpellUpdate',71,1),(19079,61608,61608,'OP_AllCharactersDescReplyMsg',10,1),(19080,61608,61608,'OP_AllCharactersDescRequestMsg',9,1),(19081,61608,61608,'OP_AllWSDescRequestMsg',7,1),(19082,61608,61608,'OP_AnonUpdateMsg',375,1),(19083,61608,61608,'OP_ArenaCreate',461,1),(19084,61608,61608,'OP_ArenaGameTypesMsg',450,1),(19085,61608,61608,'OP_ArenaList',462,1),(19086,61608,61608,'OP_ArenaWindow',470,1),(19087,61608,61608,'OP_AttackAllowed',505,1),(19088,61608,61608,'OP_AttackNotAllowed',506,1),(19089,61608,61608,'OP_AuctionAbortMsg',441,1),(19090,61608,61608,'OP_AuctionCharacter',438,1),(19091,61608,61608,'OP_AuctionCharacterReply',439,1),(19092,61608,61608,'OP_AuctionCoin',436,1),(19093,61608,61608,'OP_AuctionCoinReply',437,1),(19094,61608,61608,'OP_AuctionCommitMsg',440,1),(19095,61608,61608,'OP_AuctionItem',434,1),(19096,61608,61608,'OP_AuctionItemReply',435,1),(19097,61608,61608,'OP_AuditAuctionEventMsg',451,1),(19098,61608,61608,'OP_AvatarCreatedMsg',48,1),(19099,61608,61608,'OP_AvatarDestroyedMsg',49,1),(19100,61608,61608,'OP_AvatarUpdateMsg',364,1),(19101,61608,61608,'OP_BadLanguageFilter',524,1),(19102,61608,61608,'OP_BagOptions',507,1),(19103,61608,61608,'OP_BeginItemCreationMsg',224,1),(19104,61608,61608,'OP_BeginTrackingMsg',395,1),(19105,61608,61608,'OP_BioUpdateMsg',366,1),(19106,61608,61608,'OP_BrokerAddBag',296,1),(19107,61608,61608,'OP_BrokerRemoveBag',297,1),(19108,61608,61608,'OP_BrokerSellList',707,1),(19109,61608,61608,'OP_BuyPlayerHouseMsg',153,1),(19110,61608,61608,'OP_BuyPlayerHouseTintMsg',154,1),(19111,61608,61608,'OP_CampAbortedMsg',54,1),(19112,61608,61608,'OP_CampClientMsg',392,1),(19113,61608,61608,'OP_CampStartedMsg',53,1),(19114,61608,61608,'OP_CancelCreateFromRecipeMsg',223,1),(19115,61608,61608,'OP_CancelledFeignMsg',219,1),(19116,61608,61608,'OP_CancelMoveObjectModeMsg',166,1),(19117,61608,61608,'OP_CancelSpellCast',494,1),(19118,61608,61608,'OP_ChangeServerControlFlagMsg',250,1),(19119,61608,61608,'OP_ChangeZoneMsg',79,1),(19120,61608,61608,'OP_CharacterAchievements',763,1),(19121,61608,61608,'OP_CharacterCreatedDungeons',558,1),(19122,61608,61608,'OP_CharacterCurrency',762,1),(19123,61608,61608,'OP_CharacterHousingList',512,1),(19124,61608,61608,'OP_CharacterLinkdeadMsg',419,1),(19125,61608,61608,'OP_CharacterMerc',67,1),(19126,61608,61608,'OP_CharacterMounts',591,1),(19127,61608,61608,'OP_CharacterPet',66,1),(19128,61608,61608,'OP_CharNameChangedMsg',356,1),(19129,61608,61608,'OP_CharRenamed',728,1),(19130,61608,61608,'OP_CharTransferCommitReplyMsg',427,1),(19131,61608,61608,'OP_CharTransferCommitRequestMsg',425,1),(19132,61608,61608,'OP_CharTransferReplyMsg',423,1),(19133,61608,61608,'OP_CharTransferRequestMsg',422,1),(19134,61608,61608,'OP_CharTransferRollbackReplyMsg',426,1),(19135,61608,61608,'OP_CharTransferRollbackRequestMsg',424,1),(19136,61608,61608,'OP_CharTransferStartReplyMsg',421,1),(19137,61608,61608,'OP_CharTransferStartRequestMsg',420,1),(19138,61608,61608,'OP_CharTransferValidateReplyMsg',443,1),(19139,61608,61608,'OP_CharTransferValidateRequestMsg',442,1),(19140,61608,61608,'OP_ChatCreateChannelMsg',289,1),(19141,61608,61608,'OP_ChatFiltersMsg',338,1),(19142,61608,61608,'OP_ChatJoinChannelMsg',290,1),(19143,61608,61608,'OP_ChatLeaveChannelMsg',292,1),(19144,61608,61608,'OP_ChatRelationshipUpdateMsg',187,1),(19145,61608,61608,'OP_ChatSendFriendsMsg',299,1),(19146,61608,61608,'OP_ChatSendIgnoresMsg',300,1),(19147,61608,61608,'OP_ChatTellChannelMsg',293,1),(19148,61608,61608,'OP_ChatTellUserMsg',294,1),(19149,61608,61608,'OP_ChatToggleFriendMsg',295,1),(19150,61608,61608,'OP_ChatToggleIgnoreMsg',298,1),(19151,61608,61608,'OP_ChatWhoChannelMsg',291,1),(19152,61608,61608,'OP_ClearDataMsg',100,1),(19153,61608,61608,'OP_ClearForLandingMsg',496,1),(19154,61608,61608,'OP_ClearForTakeOffMsg',194,1),(19155,61608,61608,'OP_ClientCmdMsg',60,1),(19156,61608,61608,'OP_ClientFellMsg',390,1),(19157,61608,61608,'OP_ClientIdleBeginMsg',410,1),(19158,61608,61608,'OP_ClientIdleEndMsg',411,1),(19159,61608,61608,'OP_ClientInDeathRegionMsg',391,1),(19160,61608,61608,'OP_ClientTeleportRequestMsg',80,1),(19161,61608,61608,'OP_ClientTeleportToLocationMsg',248,1),(19162,61608,61608,'OP_CloseGroupInviteWindowMsg',402,1),(19163,61608,61608,'OP_CollectAllHouseItemsMsg',155,1),(19164,61608,61608,'OP_ConsignItemRequestMsg',129,1),(19165,61608,61608,'OP_ConsignItemResponseMsg',130,1),(19166,61608,61608,'OP_ConsignmentCloseStoreMsg',128,1),(19167,61608,61608,'OP_ConsignRemoveItemsMsg',382,1),(19168,61608,61608,'OP_ConsignViewCreateMsg',379,1),(19169,61608,61608,'OP_ConsignViewGetPageMsg',380,1),(19170,61608,61608,'OP_ConsignViewReleaseMsg',381,1),(19171,61608,61608,'OP_ConsignViewSortMsg',388,1),(19172,61608,61608,'OP_CorruptedClientMsg',414,1),(19173,61608,61608,'OP_CreateBoatTransportsMsg',254,1),(19174,61608,61608,'OP_CreateCharacterDungeon',552,1),(19175,61608,61608,'OP_CreateCharacterReplyMsg',12,1),(19176,61608,61608,'OP_CreateCharacterRequestMsg',11,1),(19177,61608,61608,'OP_CreateCharFromCBBReplyMsg',431,1),(19178,61608,61608,'OP_CreateCharFromCBBRequestMsg',430,1),(19179,61608,61608,'OP_CreateGuildReplyMsg',123,1),(19180,61608,61608,'OP_CreateGuildRequestMsg',121,1),(19181,61608,61608,'OP_CreateZoneInstanceMsg',31,1),(19182,61608,61608,'OP_CsCategoryRequestMsg',371,1),(19183,61608,61608,'OP_CsCategoryResponseMsg',372,1),(19184,61608,61608,'OP_CSTicketAddCommentMsg',237,1),(19185,61608,61608,'OP_CSTicketChangeNotificationMsg',239,1),(19186,61608,61608,'OP_CSTicketCommentRequestMsg',234,1),(19187,61608,61608,'OP_CSTicketCommentResponseMsg',235,1),(19188,61608,61608,'OP_CSTicketCreateMsg',236,1),(19189,61608,61608,'OP_CSTicketDeleteMsg',238,1),(19190,61608,61608,'OP_CSTicketHeaderRequestMsg',232,1),(19191,61608,61608,'OP_CSTicketInfoMsg',233,1),(19192,61608,61608,'OP_CSToolAccessResponseMsg',393,1),(19193,61608,61608,'OP_CSToolsRequestMsg',251,1),(19194,61608,61608,'OP_CSToolsResponseMsg',252,1),(19195,61608,61608,'OP_CurrentPet',490,1),(19196,61608,61608,'OP_CustomizationPurchaseRequestMs',170,1),(19197,61608,61608,'OP_CustomizationReplyMsg',172,1),(19198,61608,61608,'OP_CustomizationSetRequestMsg',171,1),(19199,61608,61608,'OP_CustomizeHouseDisplay',753,1),(19200,61608,61608,'OP_DailyObjectives',604,1),(19201,61608,61608,'OP_DefaultGroupOptionsMsg',201,1),(19202,61608,61608,'OP_DefaultGroupOptionsRequestMsg',200,1),(19203,61608,61608,'OP_DeleteCharacterReplyMsg',19,1),(19204,61608,61608,'OP_DeleteCharacterRequestMsg',18,1),(19205,61608,61608,'OP_DeleteGuildMsg',126,1),(19206,61608,61608,'OP_DestUpdateReq',213,1),(19207,61608,61608,'OP_DialogCloseMsg',112,1),(19208,61608,61608,'OP_DialogSelectMsg',111,1),(19209,61608,61608,'OP_DispatchClientCmdMsg',62,1),(19210,61608,61608,'OP_DispatchESMsg',61,1),(19211,61608,61608,'OP_DispatchMsg',456,1),(19212,61608,61608,'OP_DispatchSpellCmdMsg',182,1),(19213,61608,61608,'OP_DisplayDebugNLLPointsMsg',258,1),(19214,61608,61608,'OP_DisplayEventMsg',457,1),(19215,61608,61608,'OP_DisplayExchangeScreenMsg',449,1),(19216,61608,61608,'OP_DisplayGroupOptionsScreenMsg',203,1),(19217,61608,61608,'OP_DisplayInnVisitScreenMsg',205,1),(19218,61608,61608,'OP_DisplayMailScreenMsg',409,1),(19219,61608,61608,'OP_DisplayTSEventReactionMsg',228,1),(19220,61608,61608,'OP_DisplayWarningMsg',269,1),(19221,61608,61608,'OP_DoneLoadingEntityResourcesMsg',38,1),(19222,61608,61608,'OP_DoneLoadingZoneResourcesMsg',36,1),(19223,61608,61608,'OP_DoneSendingInitialEntitiesMsg',37,1),(19224,61608,61608,'OP_DressingRoom',515,1),(19225,61608,61608,'OP_DumpSchedulerMsg',206,1),(19226,61608,61608,'OP_DungeonMakerEnter',553,1),(19227,61608,61608,'OP_DungeonMakerItemRequest',557,1),(19228,61608,61608,'OP_DungeonMakerItemResponse',589,1),(19229,61608,61608,'OP_DungeonMakerToolboxList',559,1),(19230,61608,61608,'OP_DungeonMakerUnknown',560,1),(19231,61608,61608,'OP_DungeonMakerUnknown1',561,1),(19232,61608,61608,'OP_DungeonPlayAsAvatarList',767,1),(19233,61608,61608,'OP_DungeonPlayAsAvatarSelected',768,1),(19234,61608,61608,'OP_EncounterBrokenMsg',267,1),(19235,61608,61608,'OP_EnterHouseMsg',157,1),(19236,61608,61608,'OP_EnterMoveObjectModeMsg',164,1),(19237,61608,61608,'OP_EntityVerbsReplyMsg',184,1),(19238,61608,61608,'OP_EntityVerbsRequestMsg',183,1),(19239,61608,61608,'OP_EntityVerbsVerbMsg',185,1),(19240,61608,61608,'OP_EqArenaResultsCmd',718,1),(19241,61608,61608,'OP_EqAvailWorldChannelsCmd',705,1),(19242,61608,61608,'OP_EqBetaCopyRequest',624,1),(19243,61608,61608,'OP_EqCannedEmoteCmd',647,1),(19244,61608,61608,'OP_EqChatChannelUpdateCmd',703,1),(19245,61608,61608,'OP_EqChoiceWinCmd',684,1),(19246,61608,61608,'OP_EqCloseWindowCmd',676,1),(19247,61608,61608,'OP_EqCollectionFilterCmd',663,1),(19248,61608,61608,'OP_EqCollectionItemCmd',664,1),(19249,61608,61608,'OP_EqCollectionUpdateCmd',662,1),(19250,61608,61608,'OP_EqConsignmentItemsCmd',708,1),(19251,61608,61608,'OP_EqCreateGhostCmd',629,1),(19252,61608,61608,'OP_EqCreateListBoxCmd',644,1),(19253,61608,61608,'OP_EqCreateSignWidgetCmd',631,1),(19254,61608,61608,'OP_EqCreateWidgetCmd',630,1),(19255,61608,61608,'OP_EqDebugPVDCmd',697,1),(19256,61608,61608,'OP_EqDestroyGhostCmd',632,1),(19257,61608,61608,'OP_EqDialogCloseCmd',660,1),(19258,61608,61608,'OP_EqDialogOpenCmd',659,1),(19259,61608,61608,'OP_EqDisplaySpellFailCmd',680,1),(19260,61608,61608,'OP_EqDisplayTextCmd',628,1),(19261,61608,61608,'OP_EqDrawablePathGraphCmd',658,1),(19262,61608,61608,'OP_EqEnableGameEventCmd',690,1),(19263,61608,61608,'OP_EqEnableWindowCmd',692,1),(19264,61608,61608,'OP_EqExamineInfoCmd',675,1),(19265,61608,61608,'OP_EqFactionUpdateCmd',661,1),(19266,61608,61608,'OP_EqFlashWindowCmd',693,1),(19267,61608,61608,'OP_EqGetProbsCmd',701,1),(19268,61608,61608,'OP_EqGroupMemberRemovedCmd',654,1),(19269,61608,61608,'OP_EqGuildBankEventActionCmd',719,1),(19270,61608,61608,'OP_EqGuildBankExamineInfoCmd',720,1),(19271,61608,61608,'OP_EqHearChainEffectCmd',655,1),(19272,61608,61608,'OP_EqHearChatCmd',627,1),(19273,61608,61608,'OP_EqHearCombatCmd',636,1),(19274,61608,61608,'OP_EqHearConsiderCmd',642,1),(19275,61608,61608,'OP_EqHearDeathCmd',653,1),(19276,61608,61608,'OP_EQHearDispellCmd',765,1),(19277,61608,61608,'OP_EqHearDrowningCmd',652,1),(19278,61608,61608,'OP_EqHearHealCmd',702,1),(19279,61608,61608,'OP_EqHearPlayFlavorCmd',695,1),(19280,61608,61608,'OP_EQHearProcCmd',638,1),(19281,61608,61608,'OP_EQHearResEffectCmd',639,1),(19282,61608,61608,'OP_EqHearSpellCastCmd',637,1),(19283,61608,61608,'OP_EqHearSpellFizzleCmd',641,1),(19284,61608,61608,'OP_EqHearSpellInterruptCmd',640,1),(19285,61608,61608,'OP_EqHearSpellNoLandCmd',721,1),(19286,61608,61608,'OP_EQHearThreatCmd',759,1),(19287,61608,61608,'OP_EqHelpPathClearCmd',673,1),(19288,61608,61608,'OP_EqHelpPathCmd',672,1),(19289,61608,61608,'OP_EqInspectPCResultsCmd',657,1),(19290,61608,61608,'OP_EqInstructionWindowCloseCmd',687,1),(19291,61608,61608,'OP_EqInstructionWindowCmd',686,1),(19292,61608,61608,'OP_EqInstructionWindowGoalCmd',688,1),(19293,61608,61608,'OP_EqInstructionWindowTaskCmd',689,1),(19294,61608,61608,'OP_EqJunctionListCmd',678,1),(19295,61608,61608,'OP_EqMapExplorationCmd',711,1),(19296,61608,61608,'OP_EqMentoring',666,1),(19297,61608,61608,'OP_EqPlaySound3DCmd',650,1),(19298,61608,61608,'OP_EqPlaySoundCmd',649,1),(19299,61608,61608,'OP_EqPlayVoiceCmd',651,1),(19300,61608,61608,'OP_EqQuestGroupCmd',668,1),(19301,61608,61608,'OP_EqQuestionnaireCmd',699,1),(19302,61608,61608,'OP_EqQuestJournalReplyCmd',667,1),(19303,61608,61608,'OP_EqQuestJournalUpdateCmd',665,1),(19304,61608,61608,'OP_EqReceiveOfferCmd',656,1),(19305,61608,61608,'OP_EqResurrectedCmd',683,1),(19306,61608,61608,'OP_EqSetControlGhostCmd',634,1),(19307,61608,61608,'OP_EqSetDebugPathPointsCmd',645,1),(19308,61608,61608,'OP_EqSetDefaultVerbCmd',685,1),(19309,61608,61608,'OP_EqSetPOVGhostCmd',635,1),(19310,61608,61608,'OP_EqShowBookCmd',698,1),(19311,61608,61608,'OP_EqShowDeathWindowCmd',679,1),(19312,61608,61608,'OP_EqShowWindowCmd',691,1),(19313,61608,61608,'OP_EqSpellCastEndCmd',682,1),(19314,61608,61608,'OP_EqSpellCastStartCmd',681,1),(19315,61608,61608,'OP_EqSpellMoveToRangeAndRetryCmd',713,1),(19316,61608,61608,'OP_EqStartBrokerCmd',710,1),(19317,61608,61608,'OP_EqStateCmd',648,1),(19318,61608,61608,'OP_EqStoreLogCmd',712,1),(19319,61608,61608,'OP_EqUpdateBankCmd',674,1),(19320,61608,61608,'OP_EqUpdateGhostCmd',633,1),(19321,61608,61608,'OP_EqUpdateLootCmd',677,1),(19322,61608,61608,'OP_EqUpdateMerchantCmd',669,1),(19323,61608,61608,'OP_EqUpdatePlayerMailCmd',714,1),(19324,61608,61608,'OP_EqUpdatePlayerTradeCmd',671,1),(19325,61608,61608,'OP_EqUpdateSignWidgetCmd',696,1),(19326,61608,61608,'OP_EqUpdateStoreCmd',670,1),(19327,61608,61608,'OP_EqUpdateSubClassesCmd',643,1),(19328,61608,61608,'OP_EqUpdateTargetCmd',706,1),(19329,61608,61608,'OP_EqWhoChannelQueryReplyCmd',704,1),(19330,61608,61608,'OP_ESInitMsg',27,1),(19331,61608,61608,'OP_ESLoginRequestMsg',3,1),(19332,61608,61608,'OP_ESReadyForClientsMsg',28,1),(19333,61608,61608,'OP_ESStatusMsg',102,1),(19334,61608,61608,'OP_ESWeatherRequestEndMsg',107,1),(19335,61608,61608,'OP_ESWeatherRequestMsg',106,1),(19336,61608,61608,'OP_ESZoneInstanceStatusMsg',103,1),(19337,61608,61608,'OP_ExamineConsignmentRequestMsg',174,1),(19338,61608,61608,'OP_ExamineConsignmentResponseMsg',175,1),(19339,61608,61608,'OP_ExamineInfoRequestMsg',259,1),(19340,61608,61608,'OP_ExamineItemRequestMsg',198,1),(19341,61608,61608,'OP_ExitHouseMsg',158,1),(19342,61608,61608,'OP_ExpectClientAsCharacterReplyMs',24,1),(19343,61608,61608,'OP_ExpectClientAsCharacterRequest',34,1),(19344,61608,61608,'OP_ExpPurchWindow',744,1),(19345,61608,61608,'OP_FellowshipExpMsg',125,1),(19346,61608,61608,'OP_FlightPathsMsg',418,1),(19347,61608,61608,'OP_GameWorldTimeMsg',45,1),(19348,61608,61608,'OP_PaperdollImage',584,1),(19349,61608,61608,'OP_GetAuctionAssetIDMsg',446,1),(19350,61608,61608,'OP_GetAuctionAssetIDReplyMsg',447,1),(19351,61608,61608,'OP_GetAvatarAccessRequestForCSToo',398,1),(19352,61608,61608,'OP_GetCharacterSerializedReplyMsg',429,1),(19353,61608,61608,'OP_GetCharacterSerializedRequestM',428,1),(19354,61608,61608,'OP_GroupCreatedMsg',90,1),(19355,61608,61608,'OP_GroupDestroyedMsg',91,1),(19356,61608,61608,'OP_GroupLeaderChangedMsg',95,1),(19357,61608,61608,'OP_GroupMemberAddedMsg',92,1),(19358,61608,61608,'OP_GroupMemberRemovedMsg',93,1),(19359,61608,61608,'OP_GroupOptionsMsg',202,1),(19360,61608,61608,'OP_GroupRemovedFromGroupMsg',94,1),(19361,61608,61608,'OP_GroupResendOOZDataMsg',96,1),(19362,61608,61608,'OP_GroupSettingsChangedMsg',97,1),(19363,61608,61608,'OP_GuildBankActionMsg',278,1),(19364,61608,61608,'OP_GuildBankActionResponseMsg',279,1),(19365,61608,61608,'OP_GuildBankEventListMsg',283,1),(19366,61608,61608,'OP_GuildBankItemDetailsRequestMsg',280,1),(19367,61608,61608,'OP_GuildBankItemDetailsResponseMs',281,1),(19368,61608,61608,'OP_GuildBankUpdateMsg',282,1),(19369,61608,61608,'OP_GuildEventActionMsg',273,1),(19370,61608,61608,'OP_GuildEventAddMsg',272,1),(19371,61608,61608,'OP_GuildEventDetailsMsg',276,1),(19372,61608,61608,'OP_GuildEventListMsg',274,1),(19373,61608,61608,'OP_GuildEventMsg',271,1),(19374,61608,61608,'OP_GuildMembershipResponseMsg',361,1),(19375,61608,61608,'OP_GuildRecruiting',724,1),(19376,61608,61608,'OP_GuildRecruitingDetails',725,1),(19377,61608,61608,'OP_GuildRecruitingImage',726,1),(19378,61608,61608,'OP_GuildRecruitingMemberInfo',723,1),(19379,61608,61608,'OP_GuildsayMsg',124,1),(19380,61608,61608,'OP_GuildStatusUpdate',717,1),(19381,61608,61608,'OP_GuildUpdateMsg',127,1),(19382,61608,61608,'OP_HeritageMsg',10009,1),(19383,61608,61608,'OP_HideIllusionsMsg',197,1),(19384,61608,61608,'OP_HouseAccessRemoveMsg',161,1),(19385,61608,61608,'OP_HouseAccessSetMsg',160,1),(19386,61608,61608,'OP_HouseCustomizationScreenMsg',169,1),(19387,61608,61608,'OP_HouseDefaultAccessSetMsg',159,1),(19388,61608,61608,'OP_HouseDeletedRemotelyMsg',145,1),(19389,61608,61608,'OP_HouseItemsList',489,1),(19390,61608,61608,'OP_HousingDataChangedMsg',432,1),(19391,61608,61608,'OP_HousingRestoreMsg',433,1),(19392,61608,61608,'OP_InspectPlayerMsg',367,1),(19393,61608,61608,'OP_InspectPlayerRequestMsg',455,1),(19394,61608,61608,'OP_InviteRequestMsg',452,1),(19395,61608,61608,'OP_InviteResponseMsg',453,1),(19396,61608,61608,'OP_InviteTargetResponseMsg',454,1),(19397,61608,61608,'OP_JoinGuildNotifyMsg',363,1),(19398,61608,61608,'OP_JournalQuestStoryline',766,1),(19399,61608,61608,'OP_KeymapDataMsg',180,1),(19400,61608,61608,'OP_KeymapLoadMsg',178,1),(19401,61608,61608,'OP_KeymapNoneMsg',179,1),(19402,61608,61608,'OP_KeymapSaveMsg',181,1),(19403,61608,61608,'OP_KnowledgebaseRequestMsg',230,1),(19404,61608,61608,'OP_KnowledgebaseResponseMsg',231,1),(19405,61608,61608,'OP_KnowledgeWindowSlotMappingMsg',373,1),(19406,61608,61608,'OP_KnownLanguagesMsg',242,1),(19407,61608,61608,'OP_Launchpad',582,1),(19408,61608,61608,'OP_LeaveGuildNotifyMsg',362,1),(19409,61608,61608,'OP_LevelChangedMsg',265,1),(19410,61608,61608,'OP_LFGGroupSearch',509,1),(19411,61608,61608,'OP_LFGUpdateMsg',523,1),(19412,61608,61608,'OP_LikeOption',139,1),(19413,61608,61608,'OP_LoadCalendarEvents',585,1),(19414,61608,61608,'OP_LoadWelcomeWindow',567,1),(19415,61608,61608,'OP_LoginByNumRequestMsg',1,1),(19416,61608,61608,'OP_LoginReplyMsg',4,1),(19417,61608,61608,'OP_LoginRequestMsg',0,1),(19418,61608,61608,'OP_LootItemsRequestMsg',188,1),(19419,61608,61608,'OP_Lottery',722,1),(19420,61608,61608,'OP_LSCheckAcctLockMsg',207,1),(19421,61608,61608,'OP_LsClientAlertlogReplyMsg',246,1),(19422,61608,61608,'OP_LsClientBaselogReplyMsg',244,1),(19423,61608,61608,'OP_LsClientCrashlogReplyMsg',245,1),(19424,61608,61608,'OP_LsClientVerifylogReplyMsg',247,1),(19425,61608,61608,'OP_LsRequestClientCrashLogMsg',243,1),(19426,61608,61608,'OP_LSServerLockMsg',369,1),(19427,61608,61608,'OP_MacroInitMsg',262,1),(19428,61608,61608,'OP_MacroUpdateMsg',263,1),(19429,61608,61608,'OP_MailCommitSendMessageMsg',348,1),(19430,61608,61608,'OP_MailDeleteMessageMsg',344,1),(19431,61608,61608,'OP_MailEventNotificationMsg',416,1),(19432,61608,61608,'OP_MailGetHeadersReplyMsg',345,1),(19433,61608,61608,'OP_MailGetMessageMsg',342,1),(19434,61608,61608,'OP_MailGetMessageReplyMsg',346,1),(19435,61608,61608,'OP_MailRemoveAttachFromMailMsg',350,1),(19436,61608,61608,'OP_MailSendMessageMsg',343,1),(19437,61608,61608,'OP_MailSendMessageReplyMsg',347,1),(19438,61608,61608,'OP_MailSendSystemMessageMsg',349,1),(19439,61608,61608,'OP_MakeGroupLeaderMsg',89,1),(19440,61608,61608,'OP_MapFogDataInitMsg',400,1),(19441,61608,61608,'OP_MapFogDataUpdateMsg',401,1),(19442,61608,61608,'OP_MapRequest',526,1),(19443,61608,61608,'OP_MarketAddFundsReply',534,1),(19444,61608,61608,'OP_MarketAddFundsRequest',533,1),(19445,61608,61608,'OP_MarketFundsUpdate',531,1),(19446,61608,61608,'OP_MarketPlaceItems',544,1),(19447,61608,61608,'OP_MarketPlacePrices',537,1),(19448,61608,61608,'OP_MarketPurchase',536,1),(19449,61608,61608,'OP_MentorPopup',565,1),(19450,61608,61608,'OP_MercHireWindow',769,1),(19451,61608,61608,'OP_MercUnknown',770,1),(19452,61608,61608,'OP_MigrateBoatTransportMsg',256,1),(19453,61608,61608,'OP_MigrateBoatTransportReplyMsg',257,1),(19454,61608,61608,'OP_MigrateClientToZoneReplyMsg',84,1),(19455,61608,61608,'OP_MigrateClientToZoneRequestMsg',83,1),(19456,61608,61608,'OP_ModifyGuildMsg',270,1),(19457,61608,61608,'OP_MonitorCharacterListMsg',58,1),(19458,61608,61608,'OP_MonitorCharacterListRequestMsg',59,1),(19459,61608,61608,'OP_MonitorReplyMsg',57,1),(19460,61608,61608,'OP_MOTDMsg',46,1),(19461,61608,61608,'OP_MoveableObjectPlacementCriteri',163,1),(19462,61608,61608,'OP_MoveLogUpdateMsg',405,1),(19463,61608,61608,'OP_NotifyApprenticeStoppedMentori',413,1),(19464,61608,61608,'OP_OfferQuestMsg',406,1),(19465,61608,61608,'OP_OnscreenMsgMsg',268,1),(19466,61608,61608,'OP_OpenCharCust',568,1),(19467,61608,61608,'OP_OutOfZoneMemberDataMsg',98,1),(19468,61608,61608,'OP_PayHouseUpkeepMsg',162,1),(19469,61608,61608,'OP_PerformCameraShakeMsg',217,1),(19470,61608,61608,'OP_PerformPlayerKnockbackMsg',216,1),(19471,61608,61608,'OP_PetOptions',204,1),(19472,61608,61608,'OP_PetOptionsResponse',588,1),(19473,61608,61608,'OP_PlayCharacterReplyMsg',21,1),(19474,61608,61608,'OP_PlayCharacterRequestMsg',20,1),(19475,61608,61608,'OP_PlayerHouseAccessUpdateMsg',150,1),(19476,61608,61608,'OP_PlayerHouseBaseScreenMsg',148,1),(19477,61608,61608,'OP_PlayerHouseCloseUIMsg',152,1),(19478,61608,61608,'OP_PlayerHouseDisplayStatusMsg',151,1),(19479,61608,61608,'OP_PlayerHousePurchaseScreenMsg',149,1),(19480,61608,61608,'OP_PlayerMadeInstances',143,1),(19481,61608,61608,'OP_PlayerMadeInstancesScreen',142,1),(19482,61608,61608,'OP_PlayerPollAnswer',564,1),(19483,61608,61608,'OP_PlayerPollPopup',563,1),(19484,61608,61608,'OP_PlayLon',516,1),(19485,61608,61608,'OP_PointOfInterest',748,1),(19486,61608,61608,'OP_PointOfInterest2',749,1),(19487,61608,61608,'OP_PopulateSkillMapsMsg',218,1),(19488,61608,61608,'OP_PositionBoatTransportMsg',255,1),(19489,61608,61608,'OP_PositionMoveableObject',165,1),(19490,61608,61608,'OP_PostPossessionMsg',459,1),(19491,61608,61608,'OP_PredictionUpdateMsg',39,1),(19492,61608,61608,'OP_PrePossessionMsg',458,1),(19493,61608,61608,'OP_PromoFlagsDetailsMsg',378,1),(19494,61608,61608,'OP_PublishHouse',141,1),(19495,61608,61608,'OP_PurchaseConsignmentLoreCheckRe',412,1),(19496,61608,61608,'OP_PurchaseConsignmentRequestMsg',131,1),(19497,61608,61608,'OP_QueAllBgSolo',571,1),(19498,61608,61608,'OP_QuestionnaireMsg',264,1),(19499,61608,61608,'OP_QuestJournalInspectMsg',116,1),(19500,61608,61608,'OP_QuestJournalOpenMsg',115,1),(19501,61608,61608,'OP_QuestJournalSetVisibleMsg',117,1),(19502,61608,61608,'OP_QuestJournalWaypointMsg',118,1),(19503,61608,61608,'OP_QuestReward',324,1),(19504,61608,61608,'OP_QuickbarInitMsg',260,1),(19505,61608,61608,'OP_QuickbarUpdateMsg',261,1),(19506,61608,61608,'OP_RaceRestrictionMsg',444,1),(19507,61608,61608,'OP_ReadBookPageMsg',199,1),(19508,61608,61608,'OP_ReadyForTakeOffMsg',195,1),(19509,61608,61608,'OP_ReadyToZoneMsg',86,1),(19510,61608,61608,'OP_RecipeBook',545,1),(19511,61608,61608,'OP_RecipeDetailsMsg',74,1),(19512,61608,61608,'OP_RecipeList',760,1),(19513,61608,61608,'OP_RecipeListUnknown',600,1),(19514,61608,61608,'OP_RelinquishHouseMsg',156,1),(19515,61608,61608,'OP_ReloadLocalizedTxtMsg',359,1),(19516,61608,61608,'OP_RemoteCmdMsg',44,1),(19517,61608,61608,'OP_RemoveClientFromGroupMsg',87,1),(19518,61608,61608,'OP_RemoveConcentrationMsg',114,1),(19519,61608,61608,'OP_RemoveGroupFromGroupMsg',88,1),(19520,61608,61608,'OP_RemoveSpellEffectMsg',113,1),(19521,61608,61608,'OP_RenameGuildMsg',286,1),(19522,61608,61608,'OP_ReplaceableSubMeshesMsg',168,1),(19523,61608,61608,'OP_ReportMsg',384,1),(19524,61608,61608,'OP_RequestCampMsg',52,1),(19525,61608,61608,'OP_RequestGuildBankEventDetailsMs',284,1),(19526,61608,61608,'OP_RequestGuildEventDetailsMsg',275,1),(19527,61608,61608,'OP_RequestGuildInfoMsg',277,1),(19528,61608,61608,'OP_RequestGuildMembershipMsg',360,1),(19529,61608,61608,'OP_RequestHelpRepathMsg',209,1),(19530,61608,61608,'OP_RequestRecipeDetailsMsg',73,1),(19531,61608,61608,'OP_RequestTargetLocMsg',210,1),(19532,61608,61608,'OP_Research',761,1),(19533,61608,61608,'OP_ResendWorldChannelsMsg',448,1),(19534,61608,61608,'OP_ReskinCharacterRequestMsg',15,1),(19535,61608,61608,'OP_RestartZoneMsg',417,1),(19536,61608,61608,'OP_RewardPackMsg',285,1),(19537,61608,61608,'OP_SatMsg',192,1),(19538,61608,61608,'OP_SavageBarInitMsg',587,1),(19539,61608,61608,'OP_SelectZoneTeleporterDestinatio',358,1),(19540,61608,61608,'OP_SendLatestRequestMsg',99,1),(19541,61608,61608,'OP_ServerPlayCharacterReplyMsg',26,1),(19542,61608,61608,'OP_ServerPlayCharacterRequestMsg',25,1),(19543,61608,61608,'OP_SetInstanceDisplayNameMsg',445,1),(19544,61608,61608,'OP_SetRemoteCmdsMsg',43,1),(19545,61608,61608,'OP_SetSocialMsg',101,1),(19546,61608,61608,'OP_ShaderCustomizationMsg',167,1),(19547,61608,61608,'OP_ShowCreateFromRecipeUIMsg',222,1),(19548,61608,61608,'OP_ShowIllusionsMsg',196,1),(19549,61608,61608,'OP_ShowItemCreationProcessUIMsg',226,1),(19550,61608,61608,'OP_ShowRecipeBookMsg',229,1),(19551,61608,61608,'OP_ShowZoneTeleporterDestinations',357,1),(19552,61608,61608,'OP_SitMsg',190,1),(19553,61608,61608,'OP_SkillInfoRequest',519,1),(19554,61608,61608,'OP_SkillInfoResponse',520,1),(19555,61608,61608,'OP_SOEAllAccess',625,1),(19556,61608,61608,'OP_SpellGainedMsg',266,1),(19557,61608,61608,'OP_StandMsg',191,1),(19558,61608,61608,'OP_StoodMsg',193,1),(19559,61608,61608,'OP_StopItemCreationMsg',225,1),(19560,61608,61608,'OP_StoppedLootingMsg',189,1),(19561,61608,61608,'OP_StopTrackingMsg',396,1),(19562,61608,61608,'OP_SubmitCharCust',569,1),(19563,61608,61608,'OP_SupplyDepot',758,1),(19564,61608,61608,'OP_SysClient',221,1),(19565,61608,61608,'OP_TeleportWithinZoneMsg',81,1),(19566,61608,61608,'OP_TeleportWithinZoneNoReloadMsg',82,1),(19567,61608,61608,'OP_TintWidgetsMsg',173,1),(19568,61608,61608,'OP_TitleUpdateMsg',389,1),(19569,61608,61608,'OP_TrackingUpdateMsg',394,1),(19570,61608,61608,'OP_TradeskillList',727,1),(19571,61608,61608,'OP_TraitsList',750,1),(19572,61608,61608,'OP_UIEvent',532,1),(19573,61608,61608,'OP_UIResetMsg',177,1),(19574,61608,61608,'OP_UISettingsResponseMsg',176,1),(19575,61608,61608,'OP_Unknown',783,1),(19576,61608,61608,'OP_UnknownNpcMsg',377,1),(19577,61608,61608,'OP_UpdateActivePublicZonesMsg',376,1),(19578,61608,61608,'OP_UpdateCharacterSheetMsg',65,1),(19579,61608,61608,'OP_UpdateClientPredFlagsMsg',249,1),(19580,61608,61608,'OP_UpdateDebugRadiiMsg',383,1),(19581,61608,61608,'OP_UpdateGroupMemberDataMsg',393,1),(19582,61608,61608,'OP_UpdateHouseAccessDataMsg',147,1),(19583,61608,61608,'OP_UpdateHouseDataMsg',146,1),(19584,61608,61608,'OP_UpdateInventoryMsg',70,1),(19585,61608,61608,'OP_UpdateItemCreationProcessUIMsg',227,1),(19586,61608,61608,'OP_UpdateMotdMsg',211,1),(19587,61608,61608,'OP_UpdateOpportunityMsg',77,1),(19588,61608,61608,'OP_UpdatePositionMsg',41,1),(19589,61608,61608,'OP_UpdateRaidMsg',385,1),(19590,61608,61608,'OP_UpdateRecipeBookMsg',72,1),(19591,61608,61608,'OP_UpdateSkillBookMsg',75,1),(19592,61608,61608,'OP_UpdateSkillsMsg',76,1),(19593,61608,61608,'OP_UpdateSpellBookMsg',68,1),(19594,61608,61608,'OP_UpdateTargetLocMsg',64,1),(19595,61608,61608,'OP_UpdateTargetMsg',63,1),(19596,61608,61608,'OP_UpdateTitleCmd',499,1),(19597,61608,61608,'OP_UseAdornment',738,1),(19598,61608,61608,'OP_VideoUploaded',586,1),(19599,61608,61608,'OP_VoiceChatChannel',525,1),(19600,61608,61608,'OP_VoiceChatServer',754,1),(19601,61608,61608,'OP_WaypointReplyMsg',353,1),(19602,61608,61608,'OP_WaypointRequestMsg',352,1),(19603,61608,61608,'OP_WaypointSelectMsg',354,1),(19604,61608,61608,'OP_WaypointUpdateMsg',355,1),(19605,61608,61608,'OP_Weakness',590,1),(19606,61608,61608,'OP_WhoQueryReplyMsg',56,1),(19607,61608,61608,'OP_WhoQueryRequestMsg',55,1),(19608,61608,61608,'OP_WorldDataChangeMsg',415,1),(19609,61608,61608,'OP_WorldDataUpdateMsg',240,1),(19610,61608,61608,'OP_WorldListMsg',8,1),(19611,61608,61608,'OP_WorldPingMsg',404,1),(19612,61608,61608,'OP_WorldShutdownUpdateMsg',408,1),(19613,61608,61608,'OP_WorldStatusChangeMsg',6,1),(19614,61608,61608,'OP_WorldTravelAvail',579,1),(19615,61608,61608,'OP_WSAcctLockStatusMsg',208,1),(19616,61608,61608,'OP_WSCreateCharacterReplyMsg',14,1),(19617,61608,61608,'OP_WSCreateCharacterRequestMsg',13,1),(19618,61608,61608,'OP_WSLoginRequestMsg',2,1),(19619,61608,61608,'OP_WSServerHideMsg',370,1),(19620,61608,61608,'OP_WSServerLockMsg',368,1),(19621,61608,61608,'OP_WSStatusReplyMsg',5,1),(19622,61608,61608,'OP_ZoneBgInstanceList',575,1),(19623,61608,61608,'OP_ZoneInfoMsg',35,1),(19624,61608,61608,'OP_ZoneInstanceCreateReplyMsg',32,1),(19625,61608,61608,'OP_ZoneInstanceDestroyedMsg',33,1),(19626,61608,61608,'OP_ZoneMOTDMsg',47,1),(19627,61608,61608,'OP_ZonesStatusMsg',105,1),(19628,61608,61608,'OP_ZonesStatusRequestMsg',104,1),(19629,61608,61608,'OP_ZoneToFriendReplyMsg',288,1),(19630,61608,61608,'OP_ZoneToFriendRequestMsg',287,1),(19631,61608,61608,'OP_EarlyLandingRequestMsg',491,1),(19632,63119,63119,'OP_LoginRequestMsg',0,1),(19633,63119,63119,'OP_LoginByNumRequestMsg',1,1),(19634,63119,63119,'OP_WSLoginRequestMsg',2,1),(19635,63119,63119,'OP_ESLoginRequestMsg',3,1),(19636,63119,63119,'OP_LoginReplyMsg',4,1),(19637,63119,63119,'OP_WSStatusReplyMsg',5,1),(19638,63119,63119,'OP_WorldStatusChangeMsg',6,1),(19639,63119,63119,'OP_AllWSDescRequestMsg',7,1),(19640,63119,63119,'OP_WorldListMsg',8,1),(19641,63119,63119,'OP_AllCharactersDescRequestMsg',9,1),(19642,63119,63119,'OP_AllCharactersDescReplyMsg',10,1),(19643,63119,63119,'OP_CreateCharacterRequestMsg',11,1),(19644,63119,63119,'OP_CreateCharacterReplyMsg',12,1),(19645,63119,63119,'OP_WSCreateCharacterRequestMsg',13,1),(19646,63119,63119,'OP_WSCreateCharacterReplyMsg',14,1),(19647,63119,63119,'OP_ReskinCharacterRequestMsg',15,1),(19648,63119,63119,'OP_DeleteCharacterRequestMsg',18,1),(19649,63119,63119,'OP_DeleteCharacterReplyMsg',19,1),(19650,63119,63119,'OP_PlayCharacterRequestMsg',20,1),(19651,63119,63119,'OP_PlayCharacterReplyMsg',21,1),(19652,63119,63119,'OP_ExpectClientAsCharacterReplyMs',24,1),(19653,63119,63119,'OP_ServerPlayCharacterRequestMsg',25,1),(19654,63119,63119,'OP_ServerPlayCharacterReplyMsg',26,1),(19655,63119,63119,'OP_ESInitMsg',27,1),(19656,63119,63119,'OP_ESReadyForClientsMsg',28,1),(19657,63119,63119,'OP_CreateZoneInstanceMsg',31,1),(19658,63119,63119,'OP_ZoneInstanceCreateReplyMsg',32,1),(19659,63119,63119,'OP_ZoneInstanceDestroyedMsg',33,1),(19660,63119,63119,'OP_ExpectClientAsCharacterRequest',34,1),(19661,63119,63119,'OP_ZoneInfoMsg',35,1),(19662,63119,63119,'OP_DoneLoadingZoneResourcesMsg',36,1),(19663,63119,63119,'OP_DoneSendingInitialEntitiesMsg',37,1),(19664,63119,63119,'OP_DoneLoadingEntityResourcesMsg',38,1),(19665,63119,63119,'OP_PredictionUpdateMsg',39,1),(19666,63119,63119,'OP_UpdatePositionMsg',41,1),(19667,63119,63119,'OP_SetRemoteCmdsMsg',43,1),(19668,63119,63119,'OP_RemoteCmdMsg',44,1),(19669,63119,63119,'OP_GameWorldTimeMsg',45,1),(19670,63119,63119,'OP_MOTDMsg',46,1),(19671,63119,63119,'OP_ZoneMOTDMsg',47,1),(19672,63119,63119,'OP_AvatarCreatedMsg',48,1),(19673,63119,63119,'OP_AvatarDestroyedMsg',49,1),(19674,63119,63119,'OP_RequestCampMsg',52,1),(19675,63119,63119,'OP_CampStartedMsg',53,1),(19676,63119,63119,'OP_CampAbortedMsg',54,1),(19677,63119,63119,'OP_WhoQueryRequestMsg',55,1),(19678,63119,63119,'OP_WhoQueryReplyMsg',56,1),(19679,63119,63119,'OP_MonitorReplyMsg',57,1),(19680,63119,63119,'OP_MonitorCharacterListMsg',58,1),(19681,63119,63119,'OP_MonitorCharacterListRequestMsg',59,1),(19682,63119,63119,'OP_ClientCmdMsg',60,1),(19683,63119,63119,'OP_DispatchESMsg',61,1),(19684,63119,63119,'OP_DispatchClientCmdMsg',62,1),(19685,63119,63119,'OP_UpdateTargetMsg',63,1),(19686,63119,63119,'OP_UpdateTargetLocMsg',64,1),(19687,63119,63119,'OP_UpdateCharacterSheetMsg',65,1),(19688,63119,63119,'OP_CharacterPet',66,1),(19689,63119,63119,'OP_CharacterMerc',67,1),(19690,63119,63119,'OP_UpdateSpellBookMsg',68,1),(19691,63119,63119,'OP_UpdateInventoryMsg',70,1),(19692,63119,63119,'OP_AfterInvSpellUpdate',71,1),(19693,63119,63119,'OP_UpdateRecipeBookMsg',72,1),(19694,63119,63119,'OP_RequestRecipeDetailsMsg',73,1),(19695,63119,63119,'OP_RecipeDetailsMsg',74,1),(19696,63119,63119,'OP_UpdateSkillBookMsg',75,1),(19697,63119,63119,'OP_UpdateSkillsMsg',76,1),(19698,63119,63119,'OP_UpdateOpportunityMsg',77,1),(19699,63119,63119,'OP_ChangeZoneMsg',79,1),(19700,63119,63119,'OP_ClientTeleportRequestMsg',80,1),(19701,63119,63119,'OP_TeleportWithinZoneMsg',81,1),(19702,63119,63119,'OP_TeleportWithinZoneNoReloadMsg',82,1),(19703,63119,63119,'OP_MigrateClientToZoneRequestMsg',83,1),(19704,63119,63119,'OP_MigrateClientToZoneReplyMsg',84,1),(19705,63119,63119,'OP_ReadyToZoneMsg',86,1),(19706,63119,63119,'OP_RemoveClientFromGroupMsg',87,1),(19707,63119,63119,'OP_RemoveGroupFromGroupMsg',88,1),(19708,63119,63119,'OP_MakeGroupLeaderMsg',89,1),(19709,63119,63119,'OP_GroupCreatedMsg',90,1),(19710,63119,63119,'OP_GroupDestroyedMsg',91,1),(19711,63119,63119,'OP_GroupMemberAddedMsg',92,1),(19712,63119,63119,'OP_GroupMemberRemovedMsg',93,1),(19713,63119,63119,'OP_GroupRemovedFromGroupMsg',94,1),(19714,63119,63119,'OP_GroupLeaderChangedMsg',95,1),(19715,63119,63119,'OP_GroupResendOOZDataMsg',96,1),(19716,63119,63119,'OP_GroupSettingsChangedMsg',97,1),(19717,63119,63119,'OP_OutOfZoneMemberDataMsg',98,1),(19718,63119,63119,'OP_SendLatestRequestMsg',99,1),(19719,63119,63119,'OP_ClearDataMsg',100,1),(19720,63119,63119,'OP_SetSocialMsg',101,1),(19721,63119,63119,'OP_ESStatusMsg',102,1),(19722,63119,63119,'OP_ESZoneInstanceStatusMsg',103,1),(19723,63119,63119,'OP_ZonesStatusRequestMsg',104,1),(19724,63119,63119,'OP_ZonesStatusMsg',105,1),(19725,63119,63119,'OP_ESWeatherRequestMsg',106,1),(19726,63119,63119,'OP_ESWeatherRequestEndMsg',107,1),(19727,63119,63119,'OP_DialogSelectMsg',111,1),(19728,63119,63119,'OP_DialogCloseMsg',112,1),(19729,63119,63119,'OP_RemoveSpellEffectMsg',113,1),(19730,63119,63119,'OP_RemoveConcentrationMsg',114,1),(19731,63119,63119,'OP_QuestJournalOpenMsg',115,1),(19732,63119,63119,'OP_QuestJournalInspectMsg',116,1),(19733,63119,63119,'OP_QuestJournalSetVisibleMsg',117,1),(19734,63119,63119,'OP_QuestJournalWaypointMsg',118,1),(19735,63119,63119,'OP_CreateGuildRequestMsg',121,1),(19736,63119,63119,'OP_CreateGuildReplyMsg',123,1),(19737,63119,63119,'OP_GuildsayMsg',124,1),(19738,63119,63119,'OP_FellowshipExpMsg',125,1),(19739,63119,63119,'OP_DeleteGuildMsg',126,1),(19740,63119,63119,'OP_GuildUpdateMsg',127,1),(19741,63119,63119,'OP_ConsignmentCloseStoreMsg',128,1),(19742,63119,63119,'OP_ConsignItemRequestMsg',129,1),(19743,63119,63119,'OP_ConsignItemResponseMsg',130,1),(19744,63119,63119,'OP_PurchaseConsignmentRequestMsg',131,1),(19745,63119,63119,'OP_LikeOption',139,1),(19746,63119,63119,'OP_PublishHouse',141,1),(19747,63119,63119,'OP_PlayerMadeInstancesScreen',142,1),(19748,63119,63119,'OP_PlayerMadeInstances',143,1),(19749,63119,63119,'OP_HouseDeletedRemotelyMsg',145,1),(19750,63119,63119,'OP_UpdateHouseDataMsg',146,1),(19751,63119,63119,'OP_UpdateHouseAccessDataMsg',147,1),(19752,63119,63119,'OP_PlayerHouseBaseScreenMsg',148,1),(19753,63119,63119,'OP_PlayerHousePurchaseScreenMsg',149,1),(19754,63119,63119,'OP_PlayerHouseAccessUpdateMsg',150,1),(19755,63119,63119,'OP_PlayerHouseDisplayStatusMsg',151,1),(19756,63119,63119,'OP_PlayerHouseCloseUIMsg',152,1),(19757,63119,63119,'OP_BuyPlayerHouseMsg',153,1),(19758,63119,63119,'OP_BuyPlayerHouseTintMsg',154,1),(19759,63119,63119,'OP_CollectAllHouseItemsMsg',155,1),(19760,63119,63119,'OP_RelinquishHouseMsg',156,1),(19761,63119,63119,'OP_EnterHouseMsg',157,1),(19762,63119,63119,'OP_ExitHouseMsg',158,1),(19763,63119,63119,'OP_HouseDefaultAccessSetMsg',159,1),(19764,63119,63119,'OP_HouseAccessSetMsg',160,1),(19765,63119,63119,'OP_HouseAccessRemoveMsg',161,1),(19766,63119,63119,'OP_PayHouseUpkeepMsg',162,1),(19767,63119,63119,'OP_MoveableObjectPlacementCriteri',163,1),(19768,63119,63119,'OP_EnterMoveObjectModeMsg',164,1),(19769,63119,63119,'OP_PositionMoveableObject',165,1),(19770,63119,63119,'OP_CancelMoveObjectModeMsg',166,1),(19771,63119,63119,'OP_ShaderCustomizationMsg',167,1),(19772,63119,63119,'OP_ReplaceableSubMeshesMsg',168,1),(19773,63119,63119,'OP_HouseCustomizationScreenMsg',169,1),(19774,63119,63119,'OP_CustomizationPurchaseRequestMs',170,1),(19775,63119,63119,'OP_CustomizationSetRequestMsg',171,1),(19776,63119,63119,'OP_CustomizationReplyMsg',172,1),(19777,63119,63119,'OP_TintWidgetsMsg',173,1),(19778,63119,63119,'OP_ExamineConsignmentRequestMsg',174,1),(19779,63119,63119,'OP_ExamineConsignmentResponseMsg',175,1),(19780,63119,63119,'OP_UISettingsResponseMsg',176,1),(19781,63119,63119,'OP_UIResetMsg',177,1),(19782,63119,63119,'OP_KeymapLoadMsg',178,1),(19783,63119,63119,'OP_KeymapNoneMsg',179,1),(19784,63119,63119,'OP_KeymapDataMsg',180,1),(19785,63119,63119,'OP_KeymapSaveMsg',181,1),(19786,63119,63119,'OP_DispatchSpellCmdMsg',182,1),(19787,63119,63119,'OP_EntityVerbsRequestMsg',183,1),(19788,63119,63119,'OP_EntityVerbsReplyMsg',184,1),(19789,63119,63119,'OP_EntityVerbsVerbMsg',185,1),(19790,63119,63119,'OP_ChatRelationshipUpdateMsg',187,1),(19791,63119,63119,'OP_LootItemsRequestMsg',188,1),(19792,63119,63119,'OP_StoppedLootingMsg',189,1),(19793,63119,63119,'OP_SitMsg',190,1),(19794,63119,63119,'OP_StandMsg',191,1),(19795,63119,63119,'OP_SatMsg',192,1),(19796,63119,63119,'OP_StoodMsg',193,1),(19797,63119,63119,'OP_ClearForTakeOffMsg',194,1),(19798,63119,63119,'OP_ReadyForTakeOffMsg',195,1),(19799,63119,63119,'OP_ShowIllusionsMsg',196,1),(19800,63119,63119,'OP_HideIllusionsMsg',197,1),(19801,63119,63119,'OP_ExamineItemRequestMsg',198,1),(19802,63119,63119,'OP_ReadBookPageMsg',199,1),(19803,63119,63119,'OP_DefaultGroupOptionsRequestMsg',200,1),(19804,63119,63119,'OP_DefaultGroupOptionsMsg',201,1),(19805,63119,63119,'OP_GroupOptionsMsg',202,1),(19806,63119,63119,'OP_DisplayGroupOptionsScreenMsg',203,1),(19807,63119,63119,'OP_PetOptions',204,1),(19808,63119,63119,'OP_DisplayInnVisitScreenMsg',205,1),(19809,63119,63119,'OP_DumpSchedulerMsg',206,1),(19810,63119,63119,'OP_LSCheckAcctLockMsg',207,1),(19811,63119,63119,'OP_WSAcctLockStatusMsg',208,1),(19812,63119,63119,'OP_RequestHelpRepathMsg',209,1),(19813,63119,63119,'OP_RequestTargetLocMsg',210,1),(19814,63119,63119,'OP_UpdateMotdMsg',211,1),(19815,63119,63119,'OP_DestUpdateReq',213,1),(19816,63119,63119,'OP_PerformPlayerKnockbackMsg',216,1),(19817,63119,63119,'OP_PerformCameraShakeMsg',217,1),(19818,63119,63119,'OP_PopulateSkillMapsMsg',218,1),(19819,63119,63119,'OP_CancelledFeignMsg',219,1),(19820,63119,63119,'OP_SysClient',221,1),(19821,63119,63119,'OP_ShowCreateFromRecipeUIMsg',222,1),(19822,63119,63119,'OP_CancelCreateFromRecipeMsg',223,1),(19823,63119,63119,'OP_BeginItemCreationMsg',224,1),(19824,63119,63119,'OP_StopItemCreationMsg',225,1),(19825,63119,63119,'OP_ShowItemCreationProcessUIMsg',226,1),(19826,63119,63119,'OP_UpdateItemCreationProcessUIMsg',227,1),(19827,63119,63119,'OP_DisplayTSEventReactionMsg',228,1),(19828,63119,63119,'OP_ShowRecipeBookMsg',229,1),(19829,63119,63119,'OP_KnowledgebaseRequestMsg',230,1),(19830,63119,63119,'OP_KnowledgebaseResponseMsg',231,1),(19831,63119,63119,'OP_CSTicketHeaderRequestMsg',232,1),(19832,63119,63119,'OP_CSTicketInfoMsg',233,1),(19833,63119,63119,'OP_CSTicketCommentRequestMsg',234,1),(19834,63119,63119,'OP_CSTicketCommentResponseMsg',235,1),(19835,63119,63119,'OP_CSTicketCreateMsg',236,1),(19836,63119,63119,'OP_CSTicketAddCommentMsg',237,1),(19837,63119,63119,'OP_CSTicketDeleteMsg',238,1),(19838,63119,63119,'OP_CSTicketChangeNotificationMsg',239,1),(19839,63119,63119,'OP_WorldDataUpdateMsg',240,1),(19840,63119,63119,'OP_KnownLanguagesMsg',242,1),(19841,63119,63119,'OP_LsRequestClientCrashLogMsg',243,1),(19842,63119,63119,'OP_LsClientBaselogReplyMsg',244,1),(19843,63119,63119,'OP_LsClientCrashlogReplyMsg',245,1),(19844,63119,63119,'OP_LsClientAlertlogReplyMsg',246,1),(19845,63119,63119,'OP_LsClientVerifylogReplyMsg',247,1),(19846,63119,63119,'OP_ClientTeleportToLocationMsg',248,1),(19847,63119,63119,'OP_UpdateClientPredFlagsMsg',249,1),(19848,63119,63119,'OP_ChangeServerControlFlagMsg',250,1),(19849,63119,63119,'OP_CSToolsRequestMsg',251,1),(19850,63119,63119,'OP_CSToolsResponseMsg',252,1),(19851,63119,63119,'OP_AddSocialStructureStandingMsg',253,1),(19852,63119,63119,'OP_CreateBoatTransportsMsg',254,1),(19853,63119,63119,'OP_PositionBoatTransportMsg',255,1),(19854,63119,63119,'OP_MigrateBoatTransportMsg',256,1),(19855,63119,63119,'OP_MigrateBoatTransportReplyMsg',257,1),(19856,63119,63119,'OP_DisplayDebugNLLPointsMsg',258,1),(19857,63119,63119,'OP_ExamineInfoRequestMsg',259,1),(19858,63119,63119,'OP_QuickbarInitMsg',260,1),(19859,63119,63119,'OP_QuickbarUpdateMsg',261,1),(19860,63119,63119,'OP_MacroInitMsg',262,1),(19861,63119,63119,'OP_MacroUpdateMsg',263,1),(19862,63119,63119,'OP_QuestionnaireMsg',264,1),(19863,63119,63119,'OP_LevelChangedMsg',265,1),(19864,63119,63119,'OP_SpellGainedMsg',266,1),(19865,63119,63119,'OP_EncounterBrokenMsg',267,1),(19866,63119,63119,'OP_OnscreenMsgMsg',268,1),(19867,63119,63119,'OP_DisplayWarningMsg',269,1),(19868,63119,63119,'OP_ModifyGuildMsg',270,1),(19869,63119,63119,'OP_GuildEventMsg',271,1),(19870,63119,63119,'OP_GuildEventAddMsg',272,1),(19871,63119,63119,'OP_GuildEventActionMsg',273,1),(19872,63119,63119,'OP_GuildEventListMsg',274,1),(19873,63119,63119,'OP_RequestGuildEventDetailsMsg',275,1),(19874,63119,63119,'OP_GuildEventDetailsMsg',276,1),(19875,63119,63119,'OP_RequestGuildInfoMsg',277,1),(19876,63119,63119,'OP_GuildBankActionMsg',278,1),(19877,63119,63119,'OP_GuildBankActionResponseMsg',279,1),(19878,63119,63119,'OP_GuildBankItemDetailsRequestMsg',280,1),(19879,63119,63119,'OP_GuildBankItemDetailsResponseMs',281,1),(19880,63119,63119,'OP_GuildBankUpdateMsg',282,1),(19881,63119,63119,'OP_GuildBankEventListMsg',283,1),(19882,63119,63119,'OP_RequestGuildBankEventDetailsMs',284,1),(19883,63119,63119,'OP_RewardPackMsg',285,1),(19884,63119,63119,'OP_RenameGuildMsg',286,1),(19885,63119,63119,'OP_ZoneToFriendRequestMsg',287,1),(19886,63119,63119,'OP_ZoneToFriendReplyMsg',288,1),(19887,63119,63119,'OP_ChatCreateChannelMsg',289,1),(19888,63119,63119,'OP_ChatJoinChannelMsg',290,1),(19889,63119,63119,'OP_ChatWhoChannelMsg',291,1),(19890,63119,63119,'OP_ChatLeaveChannelMsg',292,1),(19891,63119,63119,'OP_ChatTellChannelMsg',293,1),(19892,63119,63119,'OP_ChatTellUserMsg',294,1),(19893,63119,63119,'OP_ChatToggleFriendMsg',295,1),(19894,63119,63119,'OP_BrokerAddBag',296,1),(19895,63119,63119,'OP_BrokerRemoveBag',297,1),(19896,63119,63119,'OP_ChatToggleIgnoreMsg',298,1),(19897,63119,63119,'OP_ChatSendFriendsMsg',299,1),(19898,63119,63119,'OP_ChatSendIgnoresMsg',300,1),(19899,63119,63119,'OP_QuestReward',324,1),(19900,63119,63119,'OP_ChatFiltersMsg',338,1),(19901,63119,63119,'OP_MailGetMessageMsg',342,1),(19902,63119,63119,'OP_MailSendMessageMsg',343,1),(19903,63119,63119,'OP_MailDeleteMessageMsg',344,1),(19904,63119,63119,'OP_MailGetHeadersReplyMsg',345,1),(19905,63119,63119,'OP_MailGetMessageReplyMsg',346,1),(19906,63119,63119,'OP_MailSendMessageReplyMsg',347,1),(19907,63119,63119,'OP_MailCommitSendMessageMsg',348,1),(19908,63119,63119,'OP_MailSendSystemMessageMsg',349,1),(19909,63119,63119,'OP_MailRemoveAttachFromMailMsg',350,1),(19910,63119,63119,'OP_WaypointRequestMsg',352,1),(19911,63119,63119,'OP_WaypointReplyMsg',353,1),(19912,63119,63119,'OP_WaypointSelectMsg',354,1),(19913,63119,63119,'OP_WaypointUpdateMsg',355,1),(19914,63119,63119,'OP_CharNameChangedMsg',356,1),(19915,63119,63119,'OP_ShowZoneTeleporterDestinations',357,1),(19916,63119,63119,'OP_SelectZoneTeleporterDestinatio',358,1),(19917,63119,63119,'OP_ReloadLocalizedTxtMsg',359,1),(19918,63119,63119,'OP_RequestGuildMembershipMsg',360,1),(19919,63119,63119,'OP_GuildMembershipResponseMsg',361,1),(19920,63119,63119,'OP_LeaveGuildNotifyMsg',362,1),(19921,63119,63119,'OP_JoinGuildNotifyMsg',363,1),(19922,63119,63119,'OP_AvatarUpdateMsg',364,1),(19923,63119,63119,'OP_BioUpdateMsg',366,1),(19924,63119,63119,'OP_InspectPlayerMsg',367,1),(19925,63119,63119,'OP_WSServerLockMsg',368,1),(19926,63119,63119,'OP_LSServerLockMsg',369,1),(19927,63119,63119,'OP_WSServerHideMsg',370,1),(19928,63119,63119,'OP_CsCategoryRequestMsg',371,1),(19929,63119,63119,'OP_CsCategoryResponseMsg',372,1),(19930,63119,63119,'OP_KnowledgeWindowSlotMappingMsg',373,1),(19931,63119,63119,'OP_AFKUpdateMsg',374,1),(19932,63119,63119,'OP_AnonUpdateMsg',375,1),(19933,63119,63119,'OP_UpdateActivePublicZonesMsg',376,1),(19934,63119,63119,'OP_UnknownNpcMsg',377,1),(19935,63119,63119,'OP_PromoFlagsDetailsMsg',378,1),(19936,63119,63119,'OP_ConsignViewCreateMsg',379,1),(19937,63119,63119,'OP_ConsignViewGetPageMsg',380,1),(19938,63119,63119,'OP_ConsignViewReleaseMsg',381,1),(19939,63119,63119,'OP_ConsignRemoveItemsMsg',382,1),(19940,63119,63119,'OP_UpdateDebugRadiiMsg',383,1),(19941,63119,63119,'OP_ReportMsg',384,1),(19942,63119,63119,'OP_UpdateRaidMsg',385,1),(19943,63119,63119,'OP_ConsignViewSortMsg',387,1),(19944,63119,63119,'OP_TitleUpdateMsg',388,1),(19945,63119,63119,'OP_ClientFellMsg',389,1),(19946,63119,63119,'OP_ClientInDeathRegionMsg',390,1),(19947,63119,63119,'OP_CampClientMsg',391,1),(19948,63119,63119,'OP_CSToolAccessResponseMsg',392,1),(19949,63119,63119,'OP_UpdateGroupMemberDataMsg',392,1),(19950,63119,63119,'OP_TrackingUpdateMsg',393,1),(19951,63119,63119,'OP_BeginTrackingMsg',394,1),(19952,63119,63119,'OP_StopTrackingMsg',395,1),(19953,63119,63119,'OP_GetAvatarAccessRequestForCSToo',397,1),(19954,63119,63119,'OP_AdvancementRequestMsg',398,1),(19955,63119,63119,'OP_MapFogDataInitMsg',399,1),(19956,63119,63119,'OP_MapFogDataUpdateMsg',400,1),(19957,63119,63119,'OP_CloseGroupInviteWindowMsg',401,1),(19958,63119,63119,'OP_WorldPingMsg',404,1),(19959,63119,63119,'OP_MoveLogUpdateMsg',405,1),(19960,63119,63119,'OP_OfferQuestMsg',406,1),(19961,63119,63119,'OP_WorldShutdownUpdateMsg',408,1),(19962,63119,63119,'OP_DisplayMailScreenMsg',409,1),(19963,63119,63119,'OP_ClientIdleBeginMsg',410,1),(19964,63119,63119,'OP_ClientIdleEndMsg',411,1),(19965,63119,63119,'OP_PurchaseConsignmentLoreCheckRe',412,1),(19966,63119,63119,'OP_NotifyApprenticeStoppedMentori',413,1),(19967,63119,63119,'OP_CorruptedClientMsg',414,1),(19968,63119,63119,'OP_WorldDataChangeMsg',415,1),(19969,63119,63119,'OP_MailEventNotificationMsg',416,1),(19970,63119,63119,'OP_RestartZoneMsg',417,1),(19971,63119,63119,'OP_FlightPathsMsg',418,1),(19972,63119,63119,'OP_CharacterLinkdeadMsg',419,1),(19973,63119,63119,'OP_CharTransferStartRequestMsg',420,1),(19974,63119,63119,'OP_CharTransferStartReplyMsg',421,1),(19975,63119,63119,'OP_CharTransferRequestMsg',422,1),(19976,63119,63119,'OP_CharTransferReplyMsg',423,1),(19977,63119,63119,'OP_CharTransferRollbackRequestMsg',424,1),(19978,63119,63119,'OP_CharTransferCommitRequestMsg',425,1),(19979,63119,63119,'OP_CharTransferRollbackReplyMsg',426,1),(19980,63119,63119,'OP_CharTransferCommitReplyMsg',427,1),(19981,63119,63119,'OP_GetCharacterSerializedRequestM',428,1),(19982,63119,63119,'OP_GetCharacterSerializedReplyMsg',429,1),(19983,63119,63119,'OP_CreateCharFromCBBRequestMsg',430,1),(19984,63119,63119,'OP_CreateCharFromCBBReplyMsg',431,1),(19985,63119,63119,'OP_HousingDataChangedMsg',432,1),(19986,63119,63119,'OP_HousingRestoreMsg',433,1),(19987,63119,63119,'OP_AuctionItem',434,1),(19988,63119,63119,'OP_AuctionItemReply',435,1),(19989,63119,63119,'OP_AuctionCoin',436,1),(19990,63119,63119,'OP_AuctionCoinReply',437,1),(19991,63119,63119,'OP_AuctionCharacter',438,1),(19992,63119,63119,'OP_AuctionCharacterReply',439,1),(19993,63119,63119,'OP_AuctionCommitMsg',440,1),(19994,63119,63119,'OP_AuctionAbortMsg',441,1),(19995,63119,63119,'OP_CharTransferValidateRequestMsg',442,1),(19996,63119,63119,'OP_CharTransferValidateReplyMsg',443,1),(19997,63119,63119,'OP_RaceRestrictionMsg',444,1),(19998,63119,63119,'OP_SetInstanceDisplayNameMsg',445,1),(19999,63119,63119,'OP_GetAuctionAssetIDMsg',446,1),(20000,63119,63119,'OP_GetAuctionAssetIDReplyMsg',447,1),(20001,63119,63119,'OP_ResendWorldChannelsMsg',448,1),(20002,63119,63119,'OP_DisplayExchangeScreenMsg',449,1),(20003,63119,63119,'OP_ArenaGameTypesMsg',450,1),(20004,63119,63119,'OP_AuditAuctionEventMsg',451,1),(20005,63119,63119,'OP_InviteRequestMsg',452,1),(20006,63119,63119,'OP_InviteResponseMsg',453,1),(20007,63119,63119,'OP_InviteTargetResponseMsg',454,1),(20008,63119,63119,'OP_InspectPlayerRequestMsg',455,1),(20009,63119,63119,'OP_DispatchMsg',456,1),(20010,63119,63119,'OP_DisplayEventMsg',457,1),(20011,63119,63119,'OP_PrePossessionMsg',458,1),(20012,63119,63119,'OP_PostPossessionMsg',459,1),(20013,63119,63119,'OP_ArenaCreate',461,1),(20014,63119,63119,'OP_ArenaList',462,1),(20015,63119,63119,'OP_ArenaWindow',470,1),(20016,63119,63119,'OP_HouseItemsList',489,1),(20017,63119,63119,'OP_CurrentPet',490,1),(20018,63119,63119,'OP_EarlyLandingRequestMsg',491,1),(20019,63119,63119,'OP_AdventureList',493,1),(20020,63119,63119,'OP_CancelSpellCast',494,1),(20021,63119,63119,'OP_ClearForLandingMsg',496,1),(20022,63119,63119,'OP_UpdateTitleCmd',499,1),(20023,63119,63119,'OP_AttackAllowed',505,1),(20024,63119,63119,'OP_AttackNotAllowed',506,1),(20025,63119,63119,'OP_BagOptions',507,1),(20026,63119,63119,'OP_LFGGroupSearch',509,1),(20027,63119,63119,'OP_CharacterHousingList',512,1),(20028,63119,63119,'OP_DressingRoom',515,1),(20029,63119,63119,'OP_PlayLon',516,1),(20030,63119,63119,'OP_SkillInfoRequest',518,1),(20031,63119,63119,'OP_SkillInfoResponse',519,1),(20032,63119,63119,'OP_LFGUpdateMsg',522,1),(20033,63119,63119,'OP_BadLanguageFilter',523,1),(20034,63119,63119,'OP_VoiceChatChannel',524,1),(20035,63119,63119,'OP_MapRequest',525,1),(20036,63119,63119,'OP_MarketFundsUpdate',530,1),(20037,63119,63119,'OP_UIEvent',531,1),(20038,63119,63119,'OP_MarketAddFundsRequest',532,1),(20039,63119,63119,'OP_MarketAddFundsReply',533,1),(20040,63119,63119,'OP_MarketPurchase',535,1),(20041,63119,63119,'OP_MarketPlacePrices',536,1),(20042,63119,63119,'OP_MarketPlaceItems',543,1),(20043,63119,63119,'OP_RecipeBook',544,1),(20044,63119,63119,'OP_CreateCharacterDungeon',551,1),(20045,63119,63119,'OP_DungeonMakerEnter',552,1),(20046,63119,63119,'OP_DungeonMakerItemRequest',556,1),(20047,63119,63119,'OP_CharacterCreatedDungeons',557,1),(20048,63119,63119,'OP_DungeonMakerToolboxList',558,1),(20049,63119,63119,'OP_DungeonMakerUnknown',559,1),(20050,63119,63119,'OP_DungeonMakerUnknown1',560,1),(20051,63119,63119,'OP_PlayerPollPopup',562,1),(20052,63119,63119,'OP_PlayerPollAnswer',563,1),(20053,63119,63119,'OP_MentorPopup',564,1),(20054,63119,63119,'OP_LoadWelcomeWindow',566,1),(20055,63119,63119,'OP_OpenCharCust',568,1),(20056,63119,63119,'OP_SubmitCharCust',569,1),(20057,63119,63119,'OP_QueAllBgSolo',571,1),(20058,63119,63119,'OP_ZoneBgInstanceList',572,1),(20059,63119,63119,'OP_WorldTravelAvail',576,1),(20060,63119,63119,'OP_Launchpad',579,1),(20061,63119,63119,'OP_PaperdollImage',581,1),(20062,63119,63119,'OP_LoadCalendarEvents',582,1),(20063,63119,63119,'OP_VideoUploaded',583,1),(20064,63119,63119,'OP_SavageBarInitMsg',584,1),(20065,63119,63119,'OP_PetOptionsResponse',585,1),(20066,63119,63119,'OP_DungeonMakerItemResponse',586,1),(20067,63119,63119,'OP_Weakness',587,1),(20068,63119,63119,'OP_CharacterMounts',588,1),(20069,63119,63119,'OP_RecipeListUnknown',597,1),(20070,63119,63119,'OP_DailyObjectives',601,1),(20071,63119,63119,'OP_DeityAbilityWindow',621,1),(20072,63119,63119,'OP_EqBetaCopyRequest',637,1),(20073,63119,63119,'OP_SOEAllAccess',638,1),(20074,63119,63119,'OP_EqHearChatCmd',641,1),(20075,63119,63119,'OP_EqDisplayTextCmd',642,1),(20076,63119,63119,'OP_EqCreateGhostCmd',643,1),(20077,63119,63119,'OP_EqCreateWidgetCmd',644,1),(20078,63119,63119,'OP_EqCreateSignWidgetCmd',645,1),(20079,63119,63119,'OP_EqDestroyGhostCmd',646,1),(20080,63119,63119,'OP_EqUpdateGhostCmd',647,1),(20081,63119,63119,'OP_EqSetControlGhostCmd',648,1),(20082,63119,63119,'OP_EqSetPOVGhostCmd',649,1),(20083,63119,63119,'OP_EqHearCombatCmd',650,1),(20084,63119,63119,'OP_EqHearSpellCastCmd',651,1),(20085,63119,63119,'OP_EQHearProcCmd',652,1),(20086,63119,63119,'OP_EQHearResEffectCmd',653,1),(20087,63119,63119,'OP_EqHearSpellInterruptCmd',654,1),(20088,63119,63119,'OP_EqHearSpellFizzleCmd',655,1),(20089,63119,63119,'OP_EqHearConsiderCmd',656,1),(20090,63119,63119,'OP_EqUpdateSubClassesCmd',657,1),(20091,63119,63119,'OP_EqCreateListBoxCmd',658,1),(20092,63119,63119,'OP_EqSetDebugPathPointsCmd',659,1),(20093,63119,63119,'OP_EqCannedEmoteCmd',661,1),(20094,63119,63119,'OP_EqStateCmd',662,1),(20095,63119,63119,'OP_EqPlaySoundCmd',663,1),(20096,63119,63119,'OP_EqPlaySound3DCmd',664,1),(20097,63119,63119,'OP_EqPlayVoiceCmd',665,1),(20098,63119,63119,'OP_EqHearDrowningCmd',666,1),(20099,63119,63119,'OP_EqHearDeathCmd',667,1),(20100,63119,63119,'OP_EqGroupMemberRemovedCmd',668,1),(20101,63119,63119,'OP_EqHearChainEffectCmd',669,1),(20102,63119,63119,'OP_EqReceiveOfferCmd',670,1),(20103,63119,63119,'OP_EqInspectPCResultsCmd',671,1),(20104,63119,63119,'OP_EqDrawablePathGraphCmd',672,1),(20105,63119,63119,'OP_EqDialogOpenCmd',673,1),(20106,63119,63119,'OP_EqDialogCloseCmd',674,1),(20107,63119,63119,'OP_EqFactionUpdateCmd',675,1),(20108,63119,63119,'OP_EqCollectionUpdateCmd',676,1),(20109,63119,63119,'OP_EqCollectionFilterCmd',677,1),(20110,63119,63119,'OP_EqCollectionItemCmd',678,1),(20111,63119,63119,'OP_EqQuestJournalUpdateCmd',679,1),(20112,63119,63119,'OP_EqMentoring',680,1),(20113,63119,63119,'OP_EqQuestJournalReplyCmd',681,1),(20114,63119,63119,'OP_EqQuestGroupCmd',682,1),(20115,63119,63119,'OP_EqUpdateMerchantCmd',683,1),(20116,63119,63119,'OP_EqUpdateStoreCmd',684,1),(20117,63119,63119,'OP_EqUpdatePlayerTradeCmd',685,1),(20118,63119,63119,'OP_EqHelpPathCmd',686,1),(20119,63119,63119,'OP_EqHelpPathClearCmd',687,1),(20120,63119,63119,'OP_EqUpdateBankCmd',688,1),(20121,63119,63119,'OP_EqExamineInfoCmd',689,1),(20122,63119,63119,'OP_EqCloseWindowCmd',690,1),(20123,63119,63119,'OP_EqUpdateLootCmd',691,1),(20124,63119,63119,'OP_EqJunctionListCmd',692,1),(20125,63119,63119,'OP_EqShowDeathWindowCmd',693,1),(20126,63119,63119,'OP_EqDisplaySpellFailCmd',694,1),(20127,63119,63119,'OP_EqSpellCastStartCmd',695,1),(20128,63119,63119,'OP_EqSpellCastEndCmd',696,1),(20129,63119,63119,'OP_EqResurrectedCmd',697,1),(20130,63119,63119,'OP_EqChoiceWinCmd',698,1),(20131,63119,63119,'OP_EqSetDefaultVerbCmd',699,1),(20132,63119,63119,'OP_EqInstructionWindowCmd',700,1),(20133,63119,63119,'OP_EqInstructionWindowCloseCmd',701,1),(20134,63119,63119,'OP_EqInstructionWindowGoalCmd',702,1),(20135,63119,63119,'OP_EqInstructionWindowTaskCmd',703,1),(20136,63119,63119,'OP_EqEnableGameEventCmd',704,1),(20137,63119,63119,'OP_EqShowWindowCmd',705,1),(20138,63119,63119,'OP_EqEnableWindowCmd',706,1),(20139,63119,63119,'OP_EqFlashWindowCmd',707,1),(20140,63119,63119,'OP_EqHearPlayFlavorCmd',709,1),(20141,63119,63119,'OP_EqUpdateSignWidgetCmd',710,1),(20142,63119,63119,'OP_EqDebugPVDCmd',711,1),(20143,63119,63119,'OP_EqShowBookCmd',712,1),(20144,63119,63119,'OP_EqQuestionnaireCmd',713,1),(20145,63119,63119,'OP_EqGetProbsCmd',715,1),(20146,63119,63119,'OP_EqHearHealCmd',716,1),(20147,63119,63119,'OP_EqChatChannelUpdateCmd',717,1),(20148,63119,63119,'OP_EqWhoChannelQueryReplyCmd',718,1),(20149,63119,63119,'OP_EqAvailWorldChannelsCmd',719,1),(20150,63119,63119,'OP_EqUpdateTargetCmd',720,1),(20151,63119,63119,'OP_BrokerSellList',721,1),(20152,63119,63119,'OP_EqConsignmentItemsCmd',722,1),(20153,63119,63119,'OP_EqStartBrokerCmd',724,1),(20154,63119,63119,'OP_EqMapExplorationCmd',725,1),(20155,63119,63119,'OP_EqStoreLogCmd',726,1),(20156,63119,63119,'OP_EqSpellMoveToRangeAndRetryCmd',727,1),(20157,63119,63119,'OP_EqUpdatePlayerMailCmd',728,1),(20158,63119,63119,'OP_GuildStatusUpdate',731,1),(20159,63119,63119,'OP_EqArenaResultsCmd',732,1),(20160,63119,63119,'OP_EqGuildBankEventActionCmd',733,1),(20161,63119,63119,'OP_EqGuildBankExamineInfoCmd',734,1),(20162,63119,63119,'OP_EqHearSpellNoLandCmd',735,1),(20163,63119,63119,'OP_Lottery',736,1),(20164,63119,63119,'OP_GuildRecruitingMemberInfo',737,1),(20165,63119,63119,'OP_GuildRecruiting',738,1),(20166,63119,63119,'OP_GuildRecruitingDetails',739,1),(20167,63119,63119,'OP_GuildRecruitingImage',740,1),(20168,63119,63119,'OP_TradeskillList',741,1),(20169,63119,63119,'OP_CharRenamed',742,1),(20170,63119,63119,'OP_UseAdornment',752,1),(20171,63119,63119,'OP_ExpPurchWindow',758,1),(20172,63119,63119,'OP_PointOfInterest',762,1),(20173,63119,63119,'OP_PointOfInterest2',763,1),(20174,63119,63119,'OP_TraitsList',764,1),(20175,63119,63119,'OP_CustomizeHouseDisplay',767,1),(20176,63119,63119,'OP_VoiceChatServer',768,1),(20177,63119,63119,'OP_SupplyDepot',772,1),(20178,63119,63119,'OP_EQHearThreatCmd',773,1),(20179,63119,63119,'OP_RecipeList',774,1),(20180,63119,63119,'OP_Research',775,1),(20181,63119,63119,'OP_CharacterCurrency',776,1),(20182,63119,63119,'OP_CharacterAchievements',777,1),(20183,63119,63119,'OP_AchievementUpdateMsg',778,1),(20184,63119,63119,'OP_EQHearDispellCmd',779,1),(20185,63119,63119,'OP_JournalQuestStoryline',780,1),(20186,63119,63119,'OP_DungeonPlayAsAvatarList',781,1),(20187,63119,63119,'OP_DungeonPlayAsAvatarSelected',782,1),(20188,63119,63119,'OP_MercHireWindow',783,1),(20189,63119,63119,'OP_MercUnknown',784,1),(20190,63119,63119,'OP_Unknown',797,1),(20191,63119,63119,'OP_HeritageMsg',10023,1),(20192,63120,63135,'OP_AchievementUpdateMsg',780,1),(20193,63120,63135,'OP_AddSocialStructureStandingMsg',253,1),(20194,63120,63135,'OP_AdvancementRequestMsg',398,1),(20195,63120,63135,'OP_AdventureList',493,1),(20196,63120,63135,'OP_AFKUpdateMsg',374,1),(20197,63120,63135,'OP_AfterInvSpellUpdate',71,1),(20198,63120,63135,'OP_AllCharactersDescReplyMsg',10,1),(20199,63120,63135,'OP_AllCharactersDescRequestMsg',9,1),(20200,63120,63135,'OP_AllWSDescRequestMsg',7,1),(20201,63120,63135,'OP_AnonUpdateMsg',375,1),(20202,63120,63135,'OP_ArenaCreate',461,1),(20203,63120,63135,'OP_ArenaGameTypesMsg',450,1),(20204,63120,63135,'OP_ArenaList',462,1),(20205,63120,63135,'OP_ArenaWindow',470,1),(20206,63120,63135,'OP_AttackAllowed',505,1),(20207,63120,63135,'OP_AttackNotAllowed',506,1),(20208,63120,63135,'OP_AuctionAbortMsg',441,1),(20209,63120,63135,'OP_AuctionCharacter',438,1),(20210,63120,63135,'OP_AuctionCharacterReply',439,1),(20211,63120,63135,'OP_AuctionCoin',436,1),(20212,63120,63135,'OP_AuctionCoinReply',437,1),(20213,63120,63135,'OP_AuctionCommitMsg',440,1),(20214,63120,63135,'OP_AuctionItem',434,1),(20215,63120,63135,'OP_AuctionItemReply',435,1),(20216,63120,63135,'OP_AuditAuctionEventMsg',451,1),(20217,63120,63135,'OP_AvatarCreatedMsg',48,1),(20218,63120,63135,'OP_AvatarDestroyedMsg',49,1),(20219,63120,63135,'OP_AvatarUpdateMsg',364,1),(20220,63120,63135,'OP_BadLanguageFilter',523,1),(20221,63120,63135,'OP_BagOptions',507,1),(20222,63120,63135,'OP_BeginItemCreationMsg',224,1),(20223,63120,63135,'OP_BeginTrackingMsg',394,1),(20224,63120,63135,'OP_BioUpdateMsg',366,1),(20225,63120,63135,'OP_BrokerAddBag',296,1),(20226,63120,63135,'OP_BrokerRemoveBag',297,1),(20227,63120,63135,'OP_BrokerSellList',723,1),(20228,63120,63135,'OP_BuyPlayerHouseMsg',153,1),(20229,63120,63135,'OP_BuyPlayerHouseTintMsg',154,1),(20230,63120,63135,'OP_CampAbortedMsg',54,1),(20231,63120,63135,'OP_CampClientMsg',391,1),(20232,63120,63135,'OP_CampStartedMsg',53,1),(20233,63120,63135,'OP_CancelCreateFromRecipeMsg',223,1),(20234,63120,63135,'OP_CancelledFeignMsg',219,1),(20235,63120,63135,'OP_CancelMoveObjectModeMsg',166,1),(20236,63120,63135,'OP_CancelSpellCast',494,1),(20237,63120,63135,'OP_ChangeServerControlFlagMsg',250,1),(20238,63120,63135,'OP_ChangeZoneMsg',79,1),(20239,63120,63135,'OP_CharacterAchievements',779,1),(20240,63120,63135,'OP_CharacterCreatedDungeons',557,1),(20241,63120,63135,'OP_CharacterCurrency',778,1),(20242,63120,63135,'OP_CharacterHousingList',512,1),(20243,63120,63135,'OP_CharacterLinkdeadMsg',419,1),(20244,63120,63135,'OP_CharacterMerc',67,1),(20245,63120,63135,'OP_CharacterMounts',588,1),(20246,63120,63135,'OP_CharacterPet',66,1),(20247,63120,63135,'OP_CharNameChangedMsg',356,1),(20248,63120,63135,'OP_CharRenamed',744,1),(20249,63120,63135,'OP_CharTransferCommitReplyMsg',427,1),(20250,63120,63135,'OP_CharTransferCommitRequestMsg',425,1),(20251,63120,63135,'OP_CharTransferReplyMsg',423,1),(20252,63120,63135,'OP_CharTransferRequestMsg',422,1),(20253,63120,63135,'OP_CharTransferRollbackReplyMsg',426,1),(20254,63120,63135,'OP_CharTransferRollbackRequestMsg',424,1),(20255,63120,63135,'OP_CharTransferStartReplyMsg',421,1),(20256,63120,63135,'OP_CharTransferStartRequestMsg',420,1),(20257,63120,63135,'OP_CharTransferValidateReplyMsg',443,1),(20258,63120,63135,'OP_CharTransferValidateRequestMsg',442,1),(20259,63120,63135,'OP_ChatCreateChannelMsg',289,1),(20260,63120,63135,'OP_ChatFiltersMsg',338,1),(20261,63120,63135,'OP_ChatJoinChannelMsg',290,1),(20262,63120,63135,'OP_ChatLeaveChannelMsg',292,1),(20263,63120,63135,'OP_ChatRelationshipUpdateMsg',187,1),(20264,63120,63135,'OP_ChatSendFriendsMsg',299,1),(20265,63120,63135,'OP_ChatSendIgnoresMsg',300,1),(20266,63120,63135,'OP_ChatTellChannelMsg',293,1),(20267,63120,63135,'OP_ChatTellUserMsg',294,1),(20268,63120,63135,'OP_ChatToggleFriendMsg',295,1),(20269,63120,63135,'OP_ChatToggleIgnoreMsg',298,1),(20270,63120,63135,'OP_ChatWhoChannelMsg',291,1),(20271,63120,63135,'OP_ClearDataMsg',100,1),(20272,63120,63135,'OP_ClearForLandingMsg',496,1),(20273,63120,63135,'OP_ClearForTakeOffMsg',194,1),(20274,63120,63135,'OP_ClientCmdMsg',60,1),(20275,63120,63135,'OP_ClientFellMsg',389,1),(20276,63120,63135,'OP_ClientIdleBeginMsg',410,1),(20277,63120,63135,'OP_ClientIdleEndMsg',411,1),(20278,63120,63135,'OP_ClientInDeathRegionMsg',390,1),(20279,63120,63135,'OP_ClientTeleportRequestMsg',80,1),(20280,63120,63135,'OP_ClientTeleportToLocationMsg',248,1),(20281,63120,63135,'OP_CloseGroupInviteWindowMsg',401,1),(20282,63120,63135,'OP_CollectAllHouseItemsMsg',155,1),(20283,63120,63135,'OP_ConsignItemRequestMsg',129,1),(20284,63120,63135,'OP_ConsignItemResponseMsg',130,1),(20285,63120,63135,'OP_ConsignmentCloseStoreMsg',128,1),(20286,63120,63135,'OP_ConsignRemoveItemsMsg',382,1),(20287,63120,63135,'OP_ConsignViewCreateMsg',379,1),(20288,63120,63135,'OP_ConsignViewGetPageMsg',380,1),(20289,63120,63135,'OP_ConsignViewReleaseMsg',381,1),(20290,63120,63135,'OP_ConsignViewSortMsg',387,1),(20291,63120,63135,'OP_CorruptedClientMsg',414,1),(20292,63120,63135,'OP_CreateBoatTransportsMsg',254,1),(20293,63120,63135,'OP_CreateCharacterDungeon',551,1),(20294,63120,63135,'OP_CreateCharacterReplyMsg',12,1),(20295,63120,63135,'OP_CreateCharacterRequestMsg',11,1),(20296,63120,63135,'OP_CreateCharFromCBBReplyMsg',431,1),(20297,63120,63135,'OP_CreateCharFromCBBRequestMsg',430,1),(20298,63120,63135,'OP_CreateGuildReplyMsg',123,1),(20299,63120,63135,'OP_CreateGuildRequestMsg',121,1),(20300,63120,63135,'OP_CreateZoneInstanceMsg',31,1),(20301,63120,63135,'OP_CsCategoryRequestMsg',371,1),(20302,63120,63135,'OP_CsCategoryResponseMsg',372,1),(20303,63120,63135,'OP_CSTicketAddCommentMsg',237,1),(20304,63120,63135,'OP_CSTicketChangeNotificationMsg',239,1),(20305,63120,63135,'OP_CSTicketCommentRequestMsg',234,1),(20306,63120,63135,'OP_CSTicketCommentResponseMsg',235,1),(20307,63120,63135,'OP_CSTicketCreateMsg',236,1),(20308,63120,63135,'OP_CSTicketDeleteMsg',238,1),(20309,63120,63135,'OP_CSTicketHeaderRequestMsg',232,1),(20310,63120,63135,'OP_CSTicketInfoMsg',233,1),(20311,63120,63135,'OP_CSToolAccessResponseMsg',392,1),(20312,63120,63135,'OP_CSToolsRequestMsg',251,1),(20313,63120,63135,'OP_CSToolsResponseMsg',252,1),(20314,63120,63135,'OP_CurrentPet',490,1),(20315,63120,63135,'OP_CustomizationPurchaseRequestMs',170,1),(20316,63120,63135,'OP_CustomizationReplyMsg',172,1),(20317,63120,63135,'OP_CustomizationSetRequestMsg',171,1),(20318,63120,63135,'OP_CustomizeHouseDisplay',769,1),(20319,63120,63135,'OP_DailyObjectives',601,1),(20320,63120,63135,'OP_DefaultGroupOptionsMsg',201,1),(20321,63120,63135,'OP_DefaultGroupOptionsRequestMsg',200,1),(20322,63120,63135,'OP_DeityAbilityWindow',621,1),(20323,63120,63135,'OP_DeleteCharacterReplyMsg',19,1),(20324,63120,63135,'OP_DeleteCharacterRequestMsg',18,1),(20325,63120,63135,'OP_DeleteGuildMsg',126,1),(20326,63120,63135,'OP_DestUpdateReq',213,1),(20327,63120,63135,'OP_DialogCloseMsg',112,1),(20328,63120,63135,'OP_DialogSelectMsg',111,1),(20329,63120,63135,'OP_DispatchClientCmdMsg',62,1),(20330,63120,63135,'OP_DispatchESMsg',61,1),(20331,63120,63135,'OP_DispatchMsg',456,1),(20332,63120,63135,'OP_DispatchSpellCmdMsg',182,1),(20333,63120,63135,'OP_DisplayDebugNLLPointsMsg',258,1),(20334,63120,63135,'OP_DisplayEventMsg',457,1),(20335,63120,63135,'OP_DisplayExchangeScreenMsg',449,1),(20336,63120,63135,'OP_DisplayGroupOptionsScreenMsg',203,1),(20337,63120,63135,'OP_DisplayInnVisitScreenMsg',205,1),(20338,63120,63135,'OP_DisplayMailScreenMsg',409,1),(20339,63120,63135,'OP_DisplayTSEventReactionMsg',228,1),(20340,63120,63135,'OP_DisplayWarningMsg',269,1),(20341,63120,63135,'OP_DoneLoadingEntityResourcesMsg',38,1),(20342,63120,63135,'OP_DoneLoadingZoneResourcesMsg',36,1),(20343,63120,63135,'OP_DoneSendingInitialEntitiesMsg',37,1),(20344,63120,63135,'OP_DressingRoom',515,1),(20345,63120,63135,'OP_DumpSchedulerMsg',206,1),(20346,63120,63135,'OP_DungeonMakerEnter',552,1),(20347,63120,63135,'OP_DungeonMakerItemRequest',556,1),(20348,63120,63135,'OP_DungeonMakerItemResponse',586,1),(20349,63120,63135,'OP_DungeonMakerToolboxList',558,1),(20350,63120,63135,'OP_DungeonMakerUnknown',559,1),(20351,63120,63135,'OP_DungeonMakerUnknown1',560,1),(20352,63120,63135,'OP_DungeonPlayAsAvatarList',783,1),(20353,63120,63135,'OP_DungeonPlayAsAvatarSelected',784,1),(20354,63120,63135,'OP_EarlyLandingRequestMsg',491,1),(20355,63120,63135,'OP_EncounterBrokenMsg',267,1),(20356,63120,63135,'OP_EnterHouseMsg',157,1),(20357,63120,63135,'OP_EnterMoveObjectModeMsg',164,1),(20358,63120,63135,'OP_EntityVerbsReplyMsg',184,1),(20359,63120,63135,'OP_EntityVerbsRequestMsg',183,1),(20360,63120,63135,'OP_EntityVerbsVerbMsg',185,1),(20361,63120,63135,'OP_EqArenaResultsCmd',734,1),(20362,63120,63135,'OP_EqAvailWorldChannelsCmd',721,1),(20363,63120,63135,'OP_EqBetaCopyRequest',639,1),(20364,63120,63135,'OP_EqCannedEmoteCmd',663,1),(20365,63120,63135,'OP_EqChatChannelUpdateCmd',719,1),(20366,63120,63135,'OP_EqChoiceWinCmd',700,1),(20367,63120,63135,'OP_EqCloseWindowCmd',692,1),(20368,63120,63135,'OP_EqCollectionFilterCmd',679,1),(20369,63120,63135,'OP_EqCollectionItemCmd',680,1),(20370,63120,63135,'OP_EqCollectionUpdateCmd',678,1),(20371,63120,63135,'OP_EqConsignmentItemsCmd',724,1),(20372,63120,63135,'OP_EqCreateGhostCmd',645,1),(20373,63120,63135,'OP_EqCreateListBoxCmd',660,1),(20374,63120,63135,'OP_EqCreateSignWidgetCmd',647,1),(20375,63120,63135,'OP_EqCreateWidgetCmd',646,1),(20376,63120,63135,'OP_EqDebugPVDCmd',713,1),(20377,63120,63135,'OP_EqDestroyGhostCmd',648,1),(20378,63120,63135,'OP_EqDialogCloseCmd',676,1),(20379,63120,63135,'OP_EqDialogOpenCmd',675,1),(20380,63120,63135,'OP_EqDisplaySpellFailCmd',696,1),(20381,63120,63135,'OP_EqDisplayTextCmd',644,1),(20382,63120,63135,'OP_EqDrawablePathGraphCmd',674,1),(20383,63120,63135,'OP_EqEnableGameEventCmd',706,1),(20384,63120,63135,'OP_EqEnableWindowCmd',708,1),(20385,63120,63135,'OP_EqExamineInfoCmd',691,1),(20386,63120,63135,'OP_EqFactionUpdateCmd',677,1),(20387,63120,63135,'OP_EqFlashWindowCmd',709,1),(20388,63120,63135,'OP_EqGetProbsCmd',717,1),(20389,63120,63135,'OP_EqGroupMemberRemovedCmd',670,1),(20390,63120,63135,'OP_EqGuildBankEventActionCmd',735,1),(20391,63120,63135,'OP_EqGuildBankExamineInfoCmd',736,1),(20392,63120,63135,'OP_EqHearChainEffectCmd',671,1),(20393,63120,63135,'OP_EqHearChatCmd',643,1),(20394,63120,63135,'OP_EqHearCombatCmd',652,1),(20395,63120,63135,'OP_EqHearConsiderCmd',658,1),(20396,63120,63135,'OP_EqHearDeathCmd',669,1),(20397,63120,63135,'OP_EQHearDispellCmd',781,1),(20398,63120,63135,'OP_EqHearDrowningCmd',668,1),(20399,63120,63135,'OP_EqHearHealCmd',718,1),(20400,63120,63135,'OP_EqHearPlayFlavorCmd',711,1),(20401,63120,63135,'OP_EQHearProcCmd',654,1),(20402,63120,63135,'OP_EQHearResEffectCmd',655,1),(20403,63120,63135,'OP_EqHearSpellCastCmd',653,1),(20404,63120,63135,'OP_EqHearSpellFizzleCmd',657,1),(20405,63120,63135,'OP_EqHearSpellInterruptCmd',656,1),(20406,63120,63135,'OP_EqHearSpellNoLandCmd',737,1),(20407,63120,63135,'OP_EQHearThreatCmd',775,1),(20408,63120,63135,'OP_EqHelpPathClearCmd',689,1),(20409,63120,63135,'OP_EqHelpPathCmd',688,1),(20410,63120,63135,'OP_EqInspectPCResultsCmd',673,1),(20411,63120,63135,'OP_EqInstructionWindowCloseCmd',703,1),(20412,63120,63135,'OP_EqInstructionWindowCmd',702,1),(20413,63120,63135,'OP_EqInstructionWindowGoalCmd',704,1),(20414,63120,63135,'OP_EqInstructionWindowTaskCmd',705,1),(20415,63120,63135,'OP_EqJunctionListCmd',694,1),(20416,63120,63135,'OP_EqMapExplorationCmd',727,1),(20417,63120,63135,'OP_EqMentoring',682,1),(20418,63120,63135,'OP_EqPlaySound3DCmd',666,1),(20419,63120,63135,'OP_EqPlaySoundCmd',665,1),(20420,63120,63135,'OP_EqPlayVoiceCmd',667,1),(20421,63120,63135,'OP_EqQuestGroupCmd',684,1),(20422,63120,63135,'OP_EqQuestionnaireCmd',715,1),(20423,63120,63135,'OP_EqQuestJournalReplyCmd',683,1),(20424,63120,63135,'OP_EqQuestJournalUpdateCmd',681,1),(20425,63120,63135,'OP_EqReceiveOfferCmd',672,1),(20426,63120,63135,'OP_EqResurrectedCmd',699,1),(20427,63120,63135,'OP_EqSetControlGhostCmd',650,1),(20428,63120,63135,'OP_EqSetDebugPathPointsCmd',661,1),(20429,63120,63135,'OP_EqSetDefaultVerbCmd',701,1),(20430,63120,63135,'OP_EqSetPOVGhostCmd',651,1),(20431,63120,63135,'OP_EqShowBookCmd',714,1),(20432,63120,63135,'OP_EqShowDeathWindowCmd',695,1),(20433,63120,63135,'OP_EqShowWindowCmd',707,1),(20434,63120,63135,'OP_EqSpellCastEndCmd',698,1),(20435,63120,63135,'OP_EqSpellCastStartCmd',697,1),(20436,63120,63135,'OP_EqSpellMoveToRangeAndRetryCmd',729,1),(20437,63120,63135,'OP_EqStartBrokerCmd',726,1),(20438,63120,63135,'OP_EqStateCmd',664,1),(20439,63120,63135,'OP_EqStoreLogCmd',728,1),(20440,63120,63135,'OP_EqUpdateBankCmd',690,1),(20441,63120,63135,'OP_EqUpdateGhostCmd',649,1),(20442,63120,63135,'OP_EqUpdateLootCmd',693,1),(20443,63120,63135,'OP_EqUpdateMerchantCmd',685,1),(20444,63120,63135,'OP_EqUpdatePlayerMailCmd',730,1),(20445,63120,63135,'OP_EqUpdatePlayerTradeCmd',687,1),(20446,63120,63135,'OP_EqUpdateSignWidgetCmd',712,1),(20447,63120,63135,'OP_EqUpdateStoreCmd',686,1),(20448,63120,63135,'OP_EqUpdateSubClassesCmd',659,1),(20449,63120,63135,'OP_EqUpdateTargetCmd',722,1),(20450,63120,63135,'OP_EqWhoChannelQueryReplyCmd',720,1),(20451,63120,63135,'OP_ESInitMsg',27,1),(20452,63120,63135,'OP_ESLoginRequestMsg',3,1),(20453,63120,63135,'OP_ESReadyForClientsMsg',28,1),(20454,63120,63135,'OP_ESStatusMsg',102,1),(20455,63120,63135,'OP_ESWeatherRequestEndMsg',107,1),(20456,63120,63135,'OP_ESWeatherRequestMsg',106,1),(20457,63120,63135,'OP_ESZoneInstanceStatusMsg',103,1),(20458,63120,63135,'OP_ExamineConsignmentRequestMsg',174,1),(20459,63120,63135,'OP_ExamineConsignmentResponseMsg',175,1),(20460,63120,63135,'OP_ExamineInfoRequestMsg',259,1),(20461,63120,63135,'OP_ExamineItemRequestMsg',198,1),(20462,63120,63135,'OP_ExitHouseMsg',158,1),(20463,63120,63135,'OP_ExpectClientAsCharacterReplyMs',24,1),(20464,63120,63135,'OP_ExpectClientAsCharacterRequest',34,1),(20465,63120,63135,'OP_ExpPurchWindow',760,1),(20466,63120,63135,'OP_FellowshipExpMsg',125,1),(20467,63120,63135,'OP_FlightPathsMsg',418,1),(20468,63120,63135,'OP_GameWorldTimeMsg',45,1),(20469,63120,63135,'OP_GetAuctionAssetIDMsg',446,1),(20470,63120,63135,'OP_GetAuctionAssetIDReplyMsg',447,1),(20471,63120,63135,'OP_GetAvatarAccessRequestForCSToo',397,1),(20472,63120,63135,'OP_GetCharacterSerializedReplyMsg',429,1),(20473,63120,63135,'OP_GetCharacterSerializedRequestM',428,1),(20474,63120,63135,'OP_GroupCreatedMsg',90,1),(20475,63120,63135,'OP_GroupDestroyedMsg',91,1),(20476,63120,63135,'OP_GroupLeaderChangedMsg',95,1),(20477,63120,63135,'OP_GroupMemberAddedMsg',92,1),(20478,63120,63135,'OP_GroupMemberRemovedMsg',93,1),(20479,63120,63135,'OP_GroupOptionsMsg',202,1),(20480,63120,63135,'OP_GroupRemovedFromGroupMsg',94,1),(20481,63120,63135,'OP_GroupResendOOZDataMsg',96,1),(20482,63120,63135,'OP_GroupSettingsChangedMsg',97,1),(20483,63120,63135,'OP_GuildBankActionMsg',278,1),(20484,63120,63135,'OP_GuildBankActionResponseMsg',279,1),(20485,63120,63135,'OP_GuildBankEventListMsg',283,1),(20486,63120,63135,'OP_GuildBankItemDetailsRequestMsg',280,1),(20487,63120,63135,'OP_GuildBankItemDetailsResponseMs',281,1),(20488,63120,63135,'OP_GuildBankUpdateMsg',282,1),(20489,63120,63135,'OP_GuildEventActionMsg',273,1),(20490,63120,63135,'OP_GuildEventAddMsg',272,1),(20491,63120,63135,'OP_GuildEventDetailsMsg',276,1),(20492,63120,63135,'OP_GuildEventListMsg',274,1),(20493,63120,63135,'OP_GuildEventMsg',271,1),(20494,63120,63135,'OP_GuildMembershipResponseMsg',361,1),(20495,63120,63135,'OP_GuildRecruiting',740,1),(20496,63120,63135,'OP_GuildRecruitingDetails',741,1),(20497,63120,63135,'OP_GuildRecruitingImage',742,1),(20498,63120,63135,'OP_GuildRecruitingMemberInfo',739,1),(20499,63120,63135,'OP_GuildsayMsg',124,1),(20500,63120,63135,'OP_GuildStatusUpdate',733,1),(20501,63120,63135,'OP_GuildUpdateMsg',127,1),(20502,63120,63135,'OP_HeritageMsg',10025,1),(20503,63120,63135,'OP_HideIllusionsMsg',197,1),(20504,63120,63135,'OP_HouseAccessRemoveMsg',161,1),(20505,63120,63135,'OP_HouseAccessSetMsg',160,1),(20506,63120,63135,'OP_HouseCustomizationScreenMsg',169,1),(20507,63120,63135,'OP_HouseDefaultAccessSetMsg',159,1),(20508,63120,63135,'OP_HouseDeletedRemotelyMsg',145,1),(20509,63120,63135,'OP_HouseItemsList',489,1),(20510,63120,63135,'OP_HousingDataChangedMsg',432,1),(20511,63120,63135,'OP_HousingRestoreMsg',433,1),(20512,63120,63135,'OP_InspectPlayerMsg',367,1),(20513,63120,63135,'OP_InspectPlayerRequestMsg',455,1),(20514,63120,63135,'OP_InviteRequestMsg',452,1),(20515,63120,63135,'OP_InviteResponseMsg',453,1),(20516,63120,63135,'OP_InviteTargetResponseMsg',454,1),(20517,63120,63135,'OP_JoinGuildNotifyMsg',363,1),(20518,63120,63135,'OP_JournalQuestStoryline',782,1),(20519,63120,63135,'OP_KeymapDataMsg',180,1),(20520,63120,63135,'OP_KeymapLoadMsg',178,1),(20521,63120,63135,'OP_KeymapNoneMsg',179,1),(20522,63120,63135,'OP_KeymapSaveMsg',181,1),(20523,63120,63135,'OP_KnowledgebaseRequestMsg',230,1),(20524,63120,63135,'OP_KnowledgebaseResponseMsg',231,1),(20525,63120,63135,'OP_KnowledgeWindowSlotMappingMsg',373,1),(20526,63120,63135,'OP_KnownLanguagesMsg',242,1),(20527,63120,63135,'OP_Launchpad',579,1),(20528,63120,63135,'OP_LeaveGuildNotifyMsg',362,1),(20529,63120,63135,'OP_LevelChangedMsg',265,1),(20530,63120,63135,'OP_LFGGroupSearch',509,1),(20531,63120,63135,'OP_LFGUpdateMsg',522,1),(20532,63120,63135,'OP_LikeOption',139,1),(20533,63120,63135,'OP_LoadCalendarEvents',582,1),(20534,63120,63135,'OP_LoadWelcomeWindow',566,1),(20535,63120,63135,'OP_LoginByNumRequestMsg',1,1),(20536,63120,63135,'OP_LoginReplyMsg',4,1),(20537,63120,63135,'OP_LoginRequestMsg',0,1),(20538,63120,63135,'OP_LootItemsRequestMsg',188,1),(20539,63120,63135,'OP_Lottery',738,1),(20540,63120,63135,'OP_LSCheckAcctLockMsg',207,1),(20541,63120,63135,'OP_LsClientAlertlogReplyMsg',246,1),(20542,63120,63135,'OP_LsClientBaselogReplyMsg',244,1),(20543,63120,63135,'OP_LsClientCrashlogReplyMsg',245,1),(20544,63120,63135,'OP_LsClientVerifylogReplyMsg',247,1),(20545,63120,63135,'OP_LsRequestClientCrashLogMsg',243,1),(20546,63120,63135,'OP_LSServerLockMsg',369,1),(20547,63120,63135,'OP_MacroInitMsg',262,1),(20548,63120,63135,'OP_MacroUpdateMsg',263,1),(20549,63120,63135,'OP_MailCommitSendMessageMsg',348,1),(20550,63120,63135,'OP_MailDeleteMessageMsg',344,1),(20551,63120,63135,'OP_MailEventNotificationMsg',416,1),(20552,63120,63135,'OP_MailGetHeadersReplyMsg',345,1),(20553,63120,63135,'OP_MailGetMessageMsg',342,1),(20554,63120,63135,'OP_MailGetMessageReplyMsg',346,1),(20555,63120,63135,'OP_MailRemoveAttachFromMailMsg',350,1),(20556,63120,63135,'OP_MailSendMessageMsg',343,1),(20557,63120,63135,'OP_MailSendMessageReplyMsg',347,1),(20558,63120,63135,'OP_MailSendSystemMessageMsg',349,1),(20559,63120,63135,'OP_MakeGroupLeaderMsg',89,1),(20560,63120,63135,'OP_MapFogDataInitMsg',399,1),(20561,63120,63135,'OP_MapFogDataUpdateMsg',400,1),(20562,63120,63135,'OP_MapRequest',525,1),(20563,63120,63135,'OP_MarketAddFundsReply',533,1),(20564,63120,63135,'OP_MarketAddFundsRequest',532,1),(20565,63120,63135,'OP_MarketFundsUpdate',530,1),(20566,63120,63135,'OP_MarketPlaceItems',543,1),(20567,63120,63135,'OP_MarketPlacePrices',536,1),(20568,63120,63135,'OP_MarketPurchase',535,1),(20569,63120,63135,'OP_MentorPopup',564,1),(20570,63120,63135,'OP_MercHireWindow',785,1),(20571,63120,63135,'OP_MercUnknown',786,1),(20572,63120,63135,'OP_MigrateBoatTransportMsg',256,1),(20573,63120,63135,'OP_MigrateBoatTransportReplyMsg',257,1),(20574,63120,63135,'OP_MigrateClientToZoneReplyMsg',84,1),(20575,63120,63135,'OP_MigrateClientToZoneRequestMsg',83,1),(20576,63120,63135,'OP_ModifyGuildMsg',270,1),(20577,63120,63135,'OP_MonitorCharacterListMsg',58,1),(20578,63120,63135,'OP_MonitorCharacterListRequestMsg',59,1),(20579,63120,63135,'OP_MonitorReplyMsg',57,1),(20580,63120,63135,'OP_MOTDMsg',46,1),(20581,63120,63135,'OP_MoveableObjectPlacementCriteri',163,1),(20582,63120,63135,'OP_MoveLogUpdateMsg',405,1),(20583,63120,63135,'OP_NotifyApprenticeStoppedMentori',413,1),(20584,63120,63135,'OP_OfferQuestMsg',406,1),(20585,63120,63135,'OP_OnscreenMsgMsg',268,1),(20586,63120,63135,'OP_OpenCharCust',568,1),(20587,63120,63135,'OP_OutOfZoneMemberDataMsg',98,1),(20588,63120,63135,'OP_PaperdollImage',581,1),(20589,63120,63135,'OP_PayHouseUpkeepMsg',162,1),(20590,63120,63135,'OP_PerformCameraShakeMsg',217,1),(20591,63120,63135,'OP_PerformPlayerKnockbackMsg',216,1),(20592,63120,63135,'OP_PetOptions',204,1),(20593,63120,63135,'OP_PetOptionsResponse',585,1),(20594,63120,63135,'OP_PlayCharacterReplyMsg',21,1),(20595,63120,63135,'OP_PlayCharacterRequestMsg',20,1),(20596,63120,63135,'OP_PlayerHouseAccessUpdateMsg',150,1),(20597,63120,63135,'OP_PlayerHouseBaseScreenMsg',148,1),(20598,63120,63135,'OP_PlayerHouseCloseUIMsg',152,1),(20599,63120,63135,'OP_PlayerHouseDisplayStatusMsg',151,1),(20600,63120,63135,'OP_PlayerHousePurchaseScreenMsg',149,1),(20601,63120,63135,'OP_PlayerMadeInstances',143,1),(20602,63120,63135,'OP_PlayerMadeInstancesScreen',142,1),(20603,63120,63135,'OP_PlayerPollAnswer',563,1),(20604,63120,63135,'OP_PlayerPollPopup',562,1),(20605,63120,63135,'OP_PlayLon',516,1),(20606,63120,63135,'OP_PointOfInterest',764,1),(20607,63120,63135,'OP_PointOfInterest2',765,1),(20608,63120,63135,'OP_PopulateSkillMapsMsg',218,1),(20609,63120,63135,'OP_PositionBoatTransportMsg',255,1),(20610,63120,63135,'OP_PositionMoveableObject',165,1),(20611,63120,63135,'OP_PostPossessionMsg',459,1),(20612,63120,63135,'OP_PredictionUpdateMsg',39,1),(20613,63120,63135,'OP_PrePossessionMsg',458,1),(20614,63120,63135,'OP_PromoFlagsDetailsMsg',378,1),(20615,63120,63135,'OP_PublishHouse',141,1),(20616,63120,63135,'OP_PurchaseConsignmentLoreCheckRe',412,1),(20617,63120,63135,'OP_PurchaseConsignmentRequestMsg',131,1),(20618,63120,63135,'OP_QueAllBgSolo',571,1),(20619,63120,63135,'OP_QuestionnaireMsg',264,1),(20620,63120,63135,'OP_QuestJournalInspectMsg',116,1),(20621,63120,63135,'OP_QuestJournalOpenMsg',115,1),(20622,63120,63135,'OP_QuestJournalSetVisibleMsg',117,1),(20623,63120,63135,'OP_QuestJournalWaypointMsg',118,1),(20624,63120,63135,'OP_QuestReward',324,1),(20625,63120,63135,'OP_QuickbarInitMsg',260,1),(20626,63120,63135,'OP_QuickbarUpdateMsg',261,1),(20627,63120,63135,'OP_RaceRestrictionMsg',444,1),(20628,63120,63135,'OP_ReadBookPageMsg',199,1),(20629,63120,63135,'OP_ReadyForTakeOffMsg',195,1),(20630,63120,63135,'OP_ReadyToZoneMsg',86,1),(20631,63120,63135,'OP_RecipeBook',544,1),(20632,63120,63135,'OP_RecipeDetailsMsg',74,1),(20633,63120,63135,'OP_RecipeList',776,1),(20634,63120,63135,'OP_RecipeListUnknown',597,1),(20635,63120,63135,'OP_RelinquishHouseMsg',156,1),(20636,63120,63135,'OP_ReloadLocalizedTxtMsg',359,1),(20637,63120,63135,'OP_RemoteCmdMsg',44,1),(20638,63120,63135,'OP_RemoveClientFromGroupMsg',87,1),(20639,63120,63135,'OP_RemoveConcentrationMsg',114,1),(20640,63120,63135,'OP_RemoveGroupFromGroupMsg',88,1),(20641,63120,63135,'OP_RemoveSpellEffectMsg',113,1),(20642,63120,63135,'OP_RenameGuildMsg',286,1),(20643,63120,63135,'OP_ReplaceableSubMeshesMsg',168,1),(20644,63120,63135,'OP_ReportMsg',384,1),(20645,63120,63135,'OP_RequestCampMsg',52,1),(20646,63120,63135,'OP_RequestGuildBankEventDetailsMs',284,1),(20647,63120,63135,'OP_RequestGuildEventDetailsMsg',275,1),(20648,63120,63135,'OP_RequestGuildInfoMsg',277,1),(20649,63120,63135,'OP_RequestGuildMembershipMsg',360,1),(20650,63120,63135,'OP_RequestHelpRepathMsg',209,1),(20651,63120,63135,'OP_RequestRecipeDetailsMsg',73,1),(20652,63120,63135,'OP_RequestTargetLocMsg',210,1),(20653,63120,63135,'OP_Research',777,1),(20654,63120,63135,'OP_ResendWorldChannelsMsg',448,1),(20655,63120,63135,'OP_ReskinCharacterRequestMsg',15,1),(20656,63120,63135,'OP_RestartZoneMsg',417,1),(20657,63120,63135,'OP_RewardPackMsg',285,1),(20658,63120,63135,'OP_SatMsg',192,1),(20659,63120,63135,'OP_SavageBarInitMsg',584,1),(20660,63120,63135,'OP_SelectZoneTeleporterDestinatio',358,1),(20661,63120,63135,'OP_SendLatestRequestMsg',99,1),(20662,63120,63135,'OP_ServerPlayCharacterReplyMsg',26,1),(20663,63120,63135,'OP_ServerPlayCharacterRequestMsg',25,1),(20664,63120,63135,'OP_SetInstanceDisplayNameMsg',445,1),(20665,63120,63135,'OP_SetRemoteCmdsMsg',43,1),(20666,63120,63135,'OP_SetSocialMsg',101,1),(20667,63120,63135,'OP_ShaderCustomizationMsg',167,1),(20668,63120,63135,'OP_ShowCreateFromRecipeUIMsg',222,1),(20669,63120,63135,'OP_ShowIllusionsMsg',196,1),(20670,63120,63135,'OP_ShowItemCreationProcessUIMsg',226,1),(20671,63120,63135,'OP_ShowRecipeBookMsg',229,1),(20672,63120,63135,'OP_ShowZoneTeleporterDestinations',357,1),(20673,63120,63135,'OP_SitMsg',190,1),(20674,63120,63135,'OP_SkillInfoRequest',518,1),(20675,63120,63135,'OP_SkillInfoResponse',519,1),(20676,63120,63135,'OP_SOEAllAccess',640,1),(20677,63120,63135,'OP_SpellGainedMsg',266,1),(20678,63120,63135,'OP_StandMsg',191,1),(20679,63120,63135,'OP_StoodMsg',193,1),(20680,63120,63135,'OP_StopItemCreationMsg',225,1),(20681,63120,63135,'OP_StoppedLootingMsg',189,1),(20682,63120,63135,'OP_StopTrackingMsg',395,1),(20683,63120,63135,'OP_SubmitCharCust',569,1),(20684,63120,63135,'OP_SupplyDepot',774,1),(20685,63120,63135,'OP_SysClient',221,1),(20686,63120,63135,'OP_TeleportWithinZoneMsg',81,1),(20687,63120,63135,'OP_TeleportWithinZoneNoReloadMsg',82,1),(20688,63120,63135,'OP_TintWidgetsMsg',173,1),(20689,63120,63135,'OP_TitleUpdateMsg',388,1),(20690,63120,63135,'OP_TrackingUpdateMsg',393,1),(20691,63120,63135,'OP_TradeskillList',743,1),(20692,63120,63135,'OP_TraitsList',766,1),(20693,63120,63135,'OP_UIEvent',531,1),(20694,63120,63135,'OP_UIResetMsg',177,1),(20695,63120,63135,'OP_UISettingsResponseMsg',176,1),(20696,63120,63135,'OP_Unknown',799,1),(20697,63120,63135,'OP_UnknownNpcMsg',377,1),(20698,63120,63135,'OP_UpdateActivePublicZonesMsg',376,1),(20699,63120,63135,'OP_UpdateCharacterSheetMsg',65,1),(20700,63120,63135,'OP_UpdateClientPredFlagsMsg',249,1),(20701,63120,63135,'OP_UpdateDebugRadiiMsg',383,1),(20702,63120,63135,'OP_UpdateGroupMemberDataMsg',392,1),(20703,63120,63135,'OP_UpdateHouseAccessDataMsg',147,1),(20704,63120,63135,'OP_UpdateHouseDataMsg',146,1),(20705,63120,63135,'OP_UpdateInventoryMsg',70,1),(20706,63120,63135,'OP_UpdateItemCreationProcessUIMsg',227,1),(20707,63120,63135,'OP_UpdateMotdMsg',211,1),(20708,63120,63135,'OP_UpdateOpportunityMsg',77,1),(20709,63120,63135,'OP_UpdatePositionMsg',41,1),(20710,63120,63135,'OP_UpdateRaidMsg',385,1),(20711,63120,63135,'OP_UpdateRecipeBookMsg',72,1),(20712,63120,63135,'OP_UpdateSkillBookMsg',75,1),(20713,63120,63135,'OP_UpdateSkillsMsg',76,1),(20714,63120,63135,'OP_UpdateSpellBookMsg',68,1),(20715,63120,63135,'OP_UpdateTargetLocMsg',64,1),(20716,63120,63135,'OP_UpdateTargetMsg',63,1),(20717,63120,63135,'OP_UpdateTitleCmd',499,1),(20718,63120,63135,'OP_UseAdornment',754,1),(20719,63120,63135,'OP_VideoUploaded',583,1),(20720,63120,63135,'OP_VoiceChatChannel',524,1),(20721,63120,63135,'OP_VoiceChatServer',770,1),(20722,63120,63135,'OP_WaypointReplyMsg',353,1),(20723,63120,63135,'OP_WaypointRequestMsg',352,1),(20724,63120,63135,'OP_WaypointSelectMsg',354,1),(20725,63120,63135,'OP_WaypointUpdateMsg',355,1),(20726,63120,63135,'OP_Weakness',587,1),(20727,63120,63135,'OP_WhoQueryReplyMsg',56,1),(20728,63120,63135,'OP_WhoQueryRequestMsg',55,1),(20729,63120,63135,'OP_WorldDataChangeMsg',415,1),(20730,63120,63135,'OP_WorldDataUpdateMsg',240,1),(20731,63120,63135,'OP_WorldListMsg',8,1),(20732,63120,63135,'OP_WorldPingMsg',404,1),(20733,63120,63135,'OP_WorldShutdownUpdateMsg',408,1),(20734,63120,63135,'OP_WorldStatusChangeMsg',6,1),(20735,63120,63135,'OP_WorldTravelAvail',576,1),(20736,63120,63135,'OP_WSAcctLockStatusMsg',208,1),(20737,63120,63135,'OP_WSCreateCharacterReplyMsg',14,1),(20738,63120,63135,'OP_WSCreateCharacterRequestMsg',13,1),(20739,63120,63135,'OP_WSLoginRequestMsg',2,1),(20740,63120,63135,'OP_WSServerHideMsg',370,1),(20741,63120,63135,'OP_WSServerLockMsg',368,1),(20742,63120,63135,'OP_WSStatusReplyMsg',5,1),(20743,63120,63135,'OP_ZoneBgInstanceList',572,1),(20744,63120,63135,'OP_ZoneInfoMsg',35,1),(20745,63120,63135,'OP_ZoneInstanceCreateReplyMsg',32,1),(20746,63120,63135,'OP_ZoneInstanceDestroyedMsg',33,1),(20747,63120,63135,'OP_ZoneMOTDMsg',47,1),(20748,63120,63135,'OP_ZonesStatusMsg',105,1),(20749,63120,63135,'OP_ZonesStatusRequestMsg',104,1),(20750,63120,63135,'OP_ZoneToFriendReplyMsg',288,1),(20751,63120,63135,'OP_ZoneToFriendRequestMsg',287,1),(21215,63136,63136,'OP_AchievementUpdateMsg',780,1),(21216,63136,63136,'OP_AddSocialStructureStandingMsg',253,1),(21217,63136,63136,'OP_AdvancementRequestMsg',398,1),(21218,63136,63136,'OP_AdventureList',493,1),(21219,63136,63136,'OP_AFKUpdateMsg',374,1),(21220,63136,63136,'OP_AfterInvSpellUpdate',71,1),(21221,63136,63136,'OP_AllCharactersDescReplyMsg',10,1),(21222,63136,63136,'OP_AllCharactersDescRequestMsg',9,1),(21223,63136,63136,'OP_AllWSDescRequestMsg',7,1),(21224,63136,63136,'OP_AnonUpdateMsg',375,1),(21225,63136,63136,'OP_ArenaCreate',461,1),(21226,63136,63136,'OP_ArenaGameTypesMsg',450,1),(21227,63136,63136,'OP_ArenaList',462,1),(21228,63136,63136,'OP_ArenaWindow',470,1),(21229,63136,63136,'OP_AttackAllowed',505,1),(21230,63136,63136,'OP_AttackNotAllowed',506,1),(21231,63136,63136,'OP_AuctionAbortMsg',441,1),(21232,63136,63136,'OP_AuctionCharacter',438,1),(21233,63136,63136,'OP_AuctionCharacterReply',439,1),(21234,63136,63136,'OP_AuctionCoin',436,1),(21235,63136,63136,'OP_AuctionCoinReply',437,1),(21236,63136,63136,'OP_AuctionCommitMsg',440,1),(21237,63136,63136,'OP_AuctionItem',434,1),(21238,63136,63136,'OP_AuctionItemReply',435,1),(21239,63136,63136,'OP_AuditAuctionEventMsg',451,1),(21240,63136,63136,'OP_AvatarCreatedMsg',48,1),(21241,63136,63136,'OP_AvatarDestroyedMsg',49,1),(21242,63136,63136,'OP_AvatarUpdateMsg',364,1),(21243,63136,63136,'OP_BadLanguageFilter',523,1),(21244,63136,63136,'OP_BagOptions',507,1),(21245,63136,63136,'OP_BeginItemCreationMsg',224,1),(21246,63136,63136,'OP_BeginTrackingMsg',394,1),(21247,63136,63136,'OP_BioUpdateMsg',366,1),(21248,63136,63136,'OP_BrokerAddBag',296,1),(21249,63136,63136,'OP_BrokerRemoveBag',297,1),(21250,63136,63136,'OP_BrokerSellList',723,1),(21251,63136,63136,'OP_BuyPlayerHouseMsg',153,1),(21252,63136,63136,'OP_BuyPlayerHouseTintMsg',154,1),(21253,63136,63136,'OP_CampAbortedMsg',54,1),(21254,63136,63136,'OP_CampClientMsg',391,1),(21255,63136,63136,'OP_CampStartedMsg',53,1),(21256,63136,63136,'OP_CancelCreateFromRecipeMsg',223,1),(21257,63136,63136,'OP_CancelledFeignMsg',219,1),(21258,63136,63136,'OP_CancelMoveObjectModeMsg',166,1),(21259,63136,63136,'OP_CancelSpellCast',494,1),(21260,63136,63136,'OP_ChangeServerControlFlagMsg',250,1),(21261,63136,63136,'OP_ChangeZoneMsg',79,1),(21262,63136,63136,'OP_CharacterAchievements',779,1),(21263,63136,63136,'OP_CharacterCreatedDungeons',557,1),(21264,63136,63136,'OP_CharacterCurrency',778,1),(21265,63136,63136,'OP_CharacterHousingList',512,1),(21266,63136,63136,'OP_CharacterLinkdeadMsg',419,1),(21267,63136,63136,'OP_CharacterMerc',67,1),(21268,63136,63136,'OP_CharacterMounts',588,1),(21269,63136,63136,'OP_CharacterPet',66,1),(21270,63136,63136,'OP_CharNameChangedMsg',356,1),(21271,63136,63136,'OP_CharRenamed',744,1),(21272,63136,63136,'OP_CharTransferCommitReplyMsg',427,1),(21273,63136,63136,'OP_CharTransferCommitRequestMsg',425,1),(21274,63136,63136,'OP_CharTransferReplyMsg',423,1),(21275,63136,63136,'OP_CharTransferRequestMsg',422,1),(21276,63136,63136,'OP_CharTransferRollbackReplyMsg',426,1),(21277,63136,63136,'OP_CharTransferRollbackRequestMsg',424,1),(21278,63136,63136,'OP_CharTransferStartReplyMsg',421,1),(21279,63136,63136,'OP_CharTransferStartRequestMsg',420,1),(21280,63136,63136,'OP_CharTransferValidateReplyMsg',443,1),(21281,63136,63136,'OP_CharTransferValidateRequestMsg',442,1),(21282,63136,63136,'OP_ChatCreateChannelMsg',289,1),(21283,63136,63136,'OP_ChatFiltersMsg',338,1),(21284,63136,63136,'OP_ChatJoinChannelMsg',290,1),(21285,63136,63136,'OP_ChatLeaveChannelMsg',292,1),(21286,63136,63136,'OP_ChatRelationshipUpdateMsg',187,1),(21287,63136,63136,'OP_ChatSendFriendsMsg',299,1),(21288,63136,63136,'OP_ChatSendIgnoresMsg',300,1),(21289,63136,63136,'OP_ChatTellChannelMsg',293,1),(21290,63136,63136,'OP_ChatTellUserMsg',294,1),(21291,63136,63136,'OP_ChatToggleFriendMsg',295,1),(21292,63136,63136,'OP_ChatToggleIgnoreMsg',298,1),(21293,63136,63136,'OP_ChatWhoChannelMsg',291,1),(21294,63136,63136,'OP_ClearDataMsg',100,1),(21295,63136,63136,'OP_ClearForLandingMsg',496,1),(21296,63136,63136,'OP_ClearForTakeOffMsg',194,1),(21297,63136,63136,'OP_ClientCmdMsg',60,1),(21298,63136,63136,'OP_ClientFellMsg',389,1),(21299,63136,63136,'OP_ClientIdleBeginMsg',410,1),(21300,63136,63136,'OP_ClientIdleEndMsg',411,1),(21301,63136,63136,'OP_ClientInDeathRegionMsg',390,1),(21302,63136,63136,'OP_ClientTeleportRequestMsg',80,1),(21303,63136,63136,'OP_ClientTeleportToLocationMsg',248,1),(21304,63136,63136,'OP_CloseGroupInviteWindowMsg',401,1),(21305,63136,63136,'OP_CollectAllHouseItemsMsg',155,1),(21306,63136,63136,'OP_ConsignItemRequestMsg',129,1),(21307,63136,63136,'OP_ConsignItemResponseMsg',130,1),(21308,63136,63136,'OP_ConsignmentCloseStoreMsg',128,1),(21309,63136,63136,'OP_ConsignRemoveItemsMsg',382,1),(21310,63136,63136,'OP_ConsignViewCreateMsg',379,1),(21311,63136,63136,'OP_ConsignViewGetPageMsg',380,1),(21312,63136,63136,'OP_ConsignViewReleaseMsg',381,1),(21313,63136,63136,'OP_ConsignViewSortMsg',387,1),(21314,63136,63136,'OP_CorruptedClientMsg',414,1),(21315,63136,63136,'OP_CreateBoatTransportsMsg',254,1),(21316,63136,63136,'OP_CreateCharacterDungeon',551,1),(21317,63136,63136,'OP_CreateCharacterReplyMsg',12,1),(21318,63136,63136,'OP_CreateCharacterRequestMsg',11,1),(21319,63136,63136,'OP_CreateCharFromCBBReplyMsg',431,1),(21320,63136,63136,'OP_CreateCharFromCBBRequestMsg',430,1),(21321,63136,63136,'OP_CreateGuildReplyMsg',123,1),(21322,63136,63136,'OP_CreateGuildRequestMsg',121,1),(21323,63136,63136,'OP_CreateZoneInstanceMsg',31,1),(21324,63136,63136,'OP_CsCategoryRequestMsg',371,1),(21325,63136,63136,'OP_CsCategoryResponseMsg',372,1),(21326,63136,63136,'OP_CSTicketAddCommentMsg',237,1),(21327,63136,63136,'OP_CSTicketChangeNotificationMsg',239,1),(21328,63136,63136,'OP_CSTicketCommentRequestMsg',234,1),(21329,63136,63136,'OP_CSTicketCommentResponseMsg',235,1),(21330,63136,63136,'OP_CSTicketCreateMsg',236,1),(21331,63136,63136,'OP_CSTicketDeleteMsg',238,1),(21332,63136,63136,'OP_CSTicketHeaderRequestMsg',232,1),(21333,63136,63136,'OP_CSTicketInfoMsg',233,1),(21334,63136,63136,'OP_CSToolAccessResponseMsg',392,1),(21335,63136,63136,'OP_CSToolsRequestMsg',251,1),(21336,63136,63136,'OP_CSToolsResponseMsg',252,1),(21337,63136,63136,'OP_CurrentPet',490,1),(21338,63136,63136,'OP_CustomizationPurchaseRequestMs',170,1),(21339,63136,63136,'OP_CustomizationReplyMsg',172,1),(21340,63136,63136,'OP_CustomizationSetRequestMsg',171,1),(21341,63136,63136,'OP_CustomizeHouseDisplay',769,1),(21342,63136,63136,'OP_DailyObjectives',601,1),(21343,63136,63136,'OP_DefaultGroupOptionsMsg',201,1),(21344,63136,63136,'OP_DefaultGroupOptionsRequestMsg',200,1),(21345,63136,63136,'OP_DeityAbilityWindow',621,1),(21346,63136,63136,'OP_DeleteCharacterReplyMsg',19,1),(21347,63136,63136,'OP_DeleteCharacterRequestMsg',18,1),(21348,63136,63136,'OP_DeleteGuildMsg',126,1),(21349,63136,63136,'OP_DestUpdateReq',213,1),(21350,63136,63136,'OP_DialogCloseMsg',112,1),(21351,63136,63136,'OP_DialogSelectMsg',111,1),(21352,63136,63136,'OP_DispatchClientCmdMsg',62,1),(21353,63136,63136,'OP_DispatchESMsg',61,1),(21354,63136,63136,'OP_DispatchMsg',456,1),(21355,63136,63136,'OP_DispatchSpellCmdMsg',182,1),(21356,63136,63136,'OP_DisplayDebugNLLPointsMsg',258,1),(21357,63136,63136,'OP_DisplayEventMsg',457,1),(21358,63136,63136,'OP_DisplayExchangeScreenMsg',449,1),(21359,63136,63136,'OP_DisplayGroupOptionsScreenMsg',203,1),(21360,63136,63136,'OP_DisplayInnVisitScreenMsg',205,1),(21361,63136,63136,'OP_DisplayMailScreenMsg',409,1),(21362,63136,63136,'OP_DisplayTSEventReactionMsg',228,1),(21363,63136,63136,'OP_DisplayWarningMsg',269,1),(21364,63136,63136,'OP_DoneLoadingEntityResourcesMsg',38,1),(21365,63136,63136,'OP_DoneLoadingZoneResourcesMsg',36,1),(21366,63136,63136,'OP_DoneSendingInitialEntitiesMsg',37,1),(21367,63136,63136,'OP_DressingRoom',515,1),(21368,63136,63136,'OP_DumpSchedulerMsg',206,1),(21369,63136,63136,'OP_DungeonMakerEnter',552,1),(21370,63136,63136,'OP_DungeonMakerItemRequest',556,1),(21371,63136,63136,'OP_DungeonMakerItemResponse',586,1),(21372,63136,63136,'OP_DungeonMakerToolboxList',558,1),(21373,63136,63136,'OP_DungeonMakerUnknown',559,1),(21374,63136,63136,'OP_DungeonMakerUnknown1',560,1),(21375,63136,63136,'OP_DungeonPlayAsAvatarList',783,1),(21376,63136,63136,'OP_DungeonPlayAsAvatarSelected',784,1),(21377,63136,63136,'OP_EarlyLandingRequestMsg',491,1),(21378,63136,63136,'OP_EncounterBrokenMsg',267,1),(21379,63136,63136,'OP_EnterHouseMsg',157,1),(21380,63136,63136,'OP_EnterMoveObjectModeMsg',164,1),(21381,63136,63136,'OP_EntityVerbsReplyMsg',184,1),(21382,63136,63136,'OP_EntityVerbsRequestMsg',183,1),(21383,63136,63136,'OP_EntityVerbsVerbMsg',185,1),(21384,63136,63136,'OP_EqArenaResultsCmd',734,1),(21385,63136,63136,'OP_EqAvailWorldChannelsCmd',721,1),(21386,63136,63136,'OP_EqBetaCopyRequest',639,1),(21387,63136,63136,'OP_EqCannedEmoteCmd',663,1),(21388,63136,63136,'OP_EqChatChannelUpdateCmd',719,1),(21389,63136,63136,'OP_EqChoiceWinCmd',700,1),(21390,63136,63136,'OP_EqCloseWindowCmd',692,1),(21391,63136,63136,'OP_EqCollectionFilterCmd',679,1),(21392,63136,63136,'OP_EqCollectionItemCmd',680,1),(21393,63136,63136,'OP_EqCollectionUpdateCmd',678,1),(21394,63136,63136,'OP_EqConsignmentItemsCmd',724,1),(21395,63136,63136,'OP_EqCreateGhostCmd',645,1),(21396,63136,63136,'OP_EqCreateListBoxCmd',660,1),(21397,63136,63136,'OP_EqCreateSignWidgetCmd',647,1),(21398,63136,63136,'OP_EqCreateWidgetCmd',646,1),(21399,63136,63136,'OP_EqDebugPVDCmd',713,1),(21400,63136,63136,'OP_EqDestroyGhostCmd',648,1),(21401,63136,63136,'OP_EqDialogCloseCmd',676,1),(21402,63136,63136,'OP_EqDialogOpenCmd',675,1),(21403,63136,63136,'OP_EqDisplaySpellFailCmd',696,1),(21404,63136,63136,'OP_EqDisplayTextCmd',644,1),(21405,63136,63136,'OP_EqDrawablePathGraphCmd',674,1),(21406,63136,63136,'OP_EqEnableGameEventCmd',706,1),(21407,63136,63136,'OP_EqEnableWindowCmd',708,1),(21408,63136,63136,'OP_EqExamineInfoCmd',691,1),(21409,63136,63136,'OP_EqFactionUpdateCmd',677,1),(21410,63136,63136,'OP_EqFlashWindowCmd',709,1),(21411,63136,63136,'OP_EqGetProbsCmd',717,1),(21412,63136,63136,'OP_EqGroupMemberRemovedCmd',670,1),(21413,63136,63136,'OP_EqGuildBankEventActionCmd',735,1),(21414,63136,63136,'OP_EqGuildBankExamineInfoCmd',736,1),(21415,63136,63136,'OP_EqHearChainEffectCmd',671,1),(21416,63136,63136,'OP_EqHearChatCmd',643,1),(21417,63136,63136,'OP_EqHearCombatCmd',652,1),(21418,63136,63136,'OP_EqHearConsiderCmd',658,1),(21419,63136,63136,'OP_EqHearDeathCmd',669,1),(21420,63136,63136,'OP_EQHearDispellCmd',781,1),(21421,63136,63136,'OP_EqHearDrowningCmd',668,1),(21422,63136,63136,'OP_EqHearHealCmd',718,1),(21423,63136,63136,'OP_EqHearPlayFlavorCmd',711,1),(21424,63136,63136,'OP_EQHearProcCmd',654,1),(21425,63136,63136,'OP_EQHearResEffectCmd',655,1),(21426,63136,63136,'OP_EqHearSpellCastCmd',653,1),(21427,63136,63136,'OP_EqHearSpellFizzleCmd',657,1),(21428,63136,63136,'OP_EqHearSpellInterruptCmd',656,1),(21429,63136,63136,'OP_EqHearSpellNoLandCmd',737,1),(21430,63136,63136,'OP_EQHearThreatCmd',775,1),(21431,63136,63136,'OP_EqHelpPathClearCmd',689,1),(21432,63136,63136,'OP_EqHelpPathCmd',688,1),(21433,63136,63136,'OP_EqInspectPCResultsCmd',673,1),(21434,63136,63136,'OP_EqInstructionWindowCloseCmd',703,1),(21435,63136,63136,'OP_EqInstructionWindowCmd',702,1),(21436,63136,63136,'OP_EqInstructionWindowGoalCmd',704,1),(21437,63136,63136,'OP_EqInstructionWindowTaskCmd',705,1),(21438,63136,63136,'OP_EqJunctionListCmd',694,1),(21439,63136,63136,'OP_EqMapExplorationCmd',727,1),(21440,63136,63136,'OP_EqMentoring',682,1),(21441,63136,63136,'OP_EqPlaySound3DCmd',666,1),(21442,63136,63136,'OP_EqPlaySoundCmd',665,1),(21443,63136,63136,'OP_EqPlayVoiceCmd',667,1),(21444,63136,63136,'OP_EqQuestGroupCmd',684,1),(21445,63136,63136,'OP_EqQuestionnaireCmd',715,1),(21446,63136,63136,'OP_EqQuestJournalReplyCmd',683,1),(21447,63136,63136,'OP_EqQuestJournalUpdateCmd',681,1),(21448,63136,63136,'OP_EqReceiveOfferCmd',672,1),(21449,63136,63136,'OP_EqResurrectedCmd',699,1),(21450,63136,63136,'OP_EqSetControlGhostCmd',650,1),(21451,63136,63136,'OP_EqSetDebugPathPointsCmd',661,1),(21452,63136,63136,'OP_EqSetDefaultVerbCmd',701,1),(21453,63136,63136,'OP_EqSetPOVGhostCmd',651,1),(21454,63136,63136,'OP_EqShowBookCmd',714,1),(21455,63136,63136,'OP_EqShowDeathWindowCmd',695,1),(21456,63136,63136,'OP_EqShowWindowCmd',707,1),(21457,63136,63136,'OP_EqSpellCastEndCmd',698,1),(21458,63136,63136,'OP_EqSpellCastStartCmd',697,1),(21459,63136,63136,'OP_EqSpellMoveToRangeAndRetryCmd',729,1),(21460,63136,63136,'OP_EqStartBrokerCmd',726,1),(21461,63136,63136,'OP_EqStateCmd',664,1),(21462,63136,63136,'OP_EqStoreLogCmd',728,1),(21463,63136,63136,'OP_EqUpdateBankCmd',690,1),(21464,63136,63136,'OP_EqUpdateGhostCmd',649,1),(21465,63136,63136,'OP_EqUpdateLootCmd',693,1),(21466,63136,63136,'OP_EqUpdateMerchantCmd',685,1),(21467,63136,63136,'OP_EqUpdatePlayerMailCmd',730,1),(21468,63136,63136,'OP_EqUpdatePlayerTradeCmd',687,1),(21469,63136,63136,'OP_EqUpdateSignWidgetCmd',712,1),(21470,63136,63136,'OP_EqUpdateStoreCmd',686,1),(21471,63136,63136,'OP_EqUpdateSubClassesCmd',659,1),(21472,63136,63136,'OP_EqUpdateTargetCmd',722,1),(21473,63136,63136,'OP_EqWhoChannelQueryReplyCmd',720,1),(21474,63136,63136,'OP_ESInitMsg',27,1),(21475,63136,63136,'OP_ESLoginRequestMsg',3,1),(21476,63136,63136,'OP_ESReadyForClientsMsg',28,1),(21477,63136,63136,'OP_ESStatusMsg',102,1),(21478,63136,63136,'OP_ESWeatherRequestEndMsg',107,1),(21479,63136,63136,'OP_ESWeatherRequestMsg',106,1),(21480,63136,63136,'OP_ESZoneInstanceStatusMsg',103,1),(21481,63136,63136,'OP_ExamineConsignmentRequestMsg',174,1),(21482,63136,63136,'OP_ExamineConsignmentResponseMsg',175,1),(21483,63136,63136,'OP_ExamineInfoRequestMsg',259,1),(21484,63136,63136,'OP_ExamineItemRequestMsg',198,1),(21485,63136,63136,'OP_ExitHouseMsg',158,1),(21486,63136,63136,'OP_ExpectClientAsCharacterReplyMs',24,1),(21487,63136,63136,'OP_ExpectClientAsCharacterRequest',34,1),(21488,63136,63136,'OP_ExpPurchWindow',760,1),(21489,63136,63136,'OP_FellowshipExpMsg',125,1),(21490,63136,63136,'OP_FlightPathsMsg',418,1),(21491,63136,63136,'OP_GameWorldTimeMsg',45,1),(21492,63136,63136,'OP_GetAuctionAssetIDMsg',446,1),(21493,63136,63136,'OP_GetAuctionAssetIDReplyMsg',447,1),(21494,63136,63136,'OP_GetAvatarAccessRequestForCSToo',397,1),(21495,63136,63136,'OP_GetCharacterSerializedReplyMsg',429,1),(21496,63136,63136,'OP_GetCharacterSerializedRequestM',428,1),(21497,63136,63136,'OP_GroupCreatedMsg',90,1),(21498,63136,63136,'OP_GroupDestroyedMsg',91,1),(21499,63136,63136,'OP_GroupLeaderChangedMsg',95,1),(21500,63136,63136,'OP_GroupMemberAddedMsg',92,1),(21501,63136,63136,'OP_GroupMemberRemovedMsg',93,1),(21502,63136,63136,'OP_GroupOptionsMsg',202,1),(21503,63136,63136,'OP_GroupRemovedFromGroupMsg',94,1),(21504,63136,63136,'OP_GroupResendOOZDataMsg',96,1),(21505,63136,63136,'OP_GroupSettingsChangedMsg',97,1),(21506,63136,63136,'OP_GuildBankActionMsg',278,1),(21507,63136,63136,'OP_GuildBankActionResponseMsg',279,1),(21508,63136,63136,'OP_GuildBankEventListMsg',283,1),(21509,63136,63136,'OP_GuildBankItemDetailsRequestMsg',280,1),(21510,63136,63136,'OP_GuildBankItemDetailsResponseMs',281,1),(21511,63136,63136,'OP_GuildBankUpdateMsg',282,1),(21512,63136,63136,'OP_GuildEventActionMsg',273,1),(21513,63136,63136,'OP_GuildEventAddMsg',272,1),(21514,63136,63136,'OP_GuildEventDetailsMsg',276,1),(21515,63136,63136,'OP_GuildEventListMsg',274,1),(21516,63136,63136,'OP_GuildEventMsg',271,1),(21517,63136,63136,'OP_GuildMembershipResponseMsg',361,1),(21518,63136,63136,'OP_GuildRecruiting',740,1),(21519,63136,63136,'OP_GuildRecruitingDetails',741,1),(21520,63136,63136,'OP_GuildRecruitingImage',742,1),(21521,63136,63136,'OP_GuildRecruitingMemberInfo',739,1),(21522,63136,63136,'OP_GuildsayMsg',124,1),(21523,63136,63136,'OP_GuildStatusUpdate',733,1),(21524,63136,63136,'OP_GuildUpdateMsg',127,1),(21525,63136,63136,'OP_HeritageMsg',10026,1),(21526,63136,63136,'OP_HideIllusionsMsg',197,1),(21527,63136,63136,'OP_HouseAccessRemoveMsg',161,1),(21528,63136,63136,'OP_HouseAccessSetMsg',160,1),(21529,63136,63136,'OP_HouseCustomizationScreenMsg',169,1),(21530,63136,63136,'OP_HouseDefaultAccessSetMsg',159,1),(21531,63136,63136,'OP_HouseDeletedRemotelyMsg',145,1),(21532,63136,63136,'OP_HouseItemsList',489,1),(21533,63136,63136,'OP_HousingDataChangedMsg',432,1),(21534,63136,63136,'OP_HousingRestoreMsg',433,1),(21535,63136,63136,'OP_InspectPlayerMsg',367,1),(21536,63136,63136,'OP_InspectPlayerRequestMsg',455,1),(21537,63136,63136,'OP_InviteRequestMsg',452,1),(21538,63136,63136,'OP_InviteResponseMsg',453,1),(21539,63136,63136,'OP_InviteTargetResponseMsg',454,1),(21540,63136,63136,'OP_JoinGuildNotifyMsg',363,1),(21541,63136,63136,'OP_JournalQuestStoryline',782,1),(21542,63136,63136,'OP_KeymapDataMsg',180,1),(21543,63136,63136,'OP_KeymapLoadMsg',178,1),(21544,63136,63136,'OP_KeymapNoneMsg',179,1),(21545,63136,63136,'OP_KeymapSaveMsg',181,1),(21546,63136,63136,'OP_KnowledgebaseRequestMsg',230,1),(21547,63136,63136,'OP_KnowledgebaseResponseMsg',231,1),(21548,63136,63136,'OP_KnowledgeWindowSlotMappingMsg',373,1),(21549,63136,63136,'OP_KnownLanguagesMsg',242,1),(21550,63136,63136,'OP_Launchpad',579,1),(21551,63136,63136,'OP_LeaveGuildNotifyMsg',362,1),(21552,63136,63136,'OP_LevelChangedMsg',265,1),(21553,63136,63136,'OP_LFGGroupSearch',509,1),(21554,63136,63136,'OP_LFGUpdateMsg',522,1),(21555,63136,63136,'OP_LikeOption',139,1),(21556,63136,63136,'OP_LoadCalendarEvents',582,1),(21557,63136,63136,'OP_LoadWelcomeWindow',566,1),(21558,63136,63136,'OP_LoginByNumRequestMsg',1,1),(21559,63136,63136,'OP_LoginReplyMsg',4,1),(21560,63136,63136,'OP_LoginRequestMsg',0,1),(21561,63136,63136,'OP_LootItemsRequestMsg',188,1),(21562,63136,63136,'OP_Lottery',738,1),(21563,63136,63136,'OP_LSCheckAcctLockMsg',207,1),(21564,63136,63136,'OP_LsClientAlertlogReplyMsg',246,1),(21565,63136,63136,'OP_LsClientBaselogReplyMsg',244,1),(21566,63136,63136,'OP_LsClientCrashlogReplyMsg',245,1),(21567,63136,63136,'OP_LsClientVerifylogReplyMsg',247,1),(21568,63136,63136,'OP_LsRequestClientCrashLogMsg',243,1),(21569,63136,63136,'OP_LSServerLockMsg',369,1),(21570,63136,63136,'OP_MacroInitMsg',262,1),(21571,63136,63136,'OP_MacroUpdateMsg',263,1),(21572,63136,63136,'OP_MailCommitSendMessageMsg',348,1),(21573,63136,63136,'OP_MailDeleteMessageMsg',344,1),(21574,63136,63136,'OP_MailEventNotificationMsg',416,1),(21575,63136,63136,'OP_MailGetHeadersReplyMsg',345,1),(21576,63136,63136,'OP_MailGetMessageMsg',342,1),(21577,63136,63136,'OP_MailGetMessageReplyMsg',346,1),(21578,63136,63136,'OP_MailRemoveAttachFromMailMsg',350,1),(21579,63136,63136,'OP_MailSendMessageMsg',343,1),(21580,63136,63136,'OP_MailSendMessageReplyMsg',347,1),(21581,63136,63136,'OP_MailSendSystemMessageMsg',349,1),(21582,63136,63136,'OP_MakeGroupLeaderMsg',89,1),(21583,63136,63136,'OP_MapFogDataInitMsg',399,1),(21584,63136,63136,'OP_MapFogDataUpdateMsg',400,1),(21585,63136,63136,'OP_MapRequest',525,1),(21586,63136,63136,'OP_MarketAddFundsReply',533,1),(21587,63136,63136,'OP_MarketAddFundsRequest',532,1),(21588,63136,63136,'OP_MarketFundsUpdate',530,1),(21589,63136,63136,'OP_MarketPlaceItems',543,1),(21590,63136,63136,'OP_MarketPlacePrices',536,1),(21591,63136,63136,'OP_MarketPurchase',535,1),(21592,63136,63136,'OP_MentorPopup',564,1),(21593,63136,63136,'OP_MercHireWindow',786,1),(21594,63136,63136,'OP_MercUnknown',787,1),(21595,63136,63136,'OP_MigrateBoatTransportMsg',256,1),(21596,63136,63136,'OP_MigrateBoatTransportReplyMsg',257,1),(21597,63136,63136,'OP_MigrateClientToZoneReplyMsg',84,1),(21598,63136,63136,'OP_MigrateClientToZoneRequestMsg',83,1),(21599,63136,63136,'OP_ModifyGuildMsg',270,1),(21600,63136,63136,'OP_MonitorCharacterListMsg',58,1),(21601,63136,63136,'OP_MonitorCharacterListRequestMsg',59,1),(21602,63136,63136,'OP_MonitorReplyMsg',57,1),(21603,63136,63136,'OP_MOTDMsg',46,1),(21604,63136,63136,'OP_MoveableObjectPlacementCriteri',163,1),(21605,63136,63136,'OP_MoveLogUpdateMsg',405,1),(21606,63136,63136,'OP_NotifyApprenticeStoppedMentori',413,1),(21607,63136,63136,'OP_OfferQuestMsg',406,1),(21608,63136,63136,'OP_OnscreenMsgMsg',268,1),(21609,63136,63136,'OP_OpenCharCust',568,1),(21610,63136,63136,'OP_OutOfZoneMemberDataMsg',98,1),(21611,63136,63136,'OP_PaperdollImage',581,1),(21612,63136,63136,'OP_PayHouseUpkeepMsg',162,1),(21613,63136,63136,'OP_PerformCameraShakeMsg',217,1),(21614,63136,63136,'OP_PerformPlayerKnockbackMsg',216,1),(21615,63136,63136,'OP_PetOptions',204,1),(21616,63136,63136,'OP_PetOptionsResponse',585,1),(21617,63136,63136,'OP_PlayCharacterReplyMsg',21,1),(21618,63136,63136,'OP_PlayCharacterRequestMsg',20,1),(21619,63136,63136,'OP_PlayerHouseAccessUpdateMsg',150,1),(21620,63136,63136,'OP_PlayerHouseBaseScreenMsg',148,1),(21621,63136,63136,'OP_PlayerHouseCloseUIMsg',152,1),(21622,63136,63136,'OP_PlayerHouseDisplayStatusMsg',151,1),(21623,63136,63136,'OP_PlayerHousePurchaseScreenMsg',149,1),(21624,63136,63136,'OP_PlayerMadeInstances',143,1),(21625,63136,63136,'OP_PlayerMadeInstancesScreen',142,1),(21626,63136,63136,'OP_PlayerPollAnswer',563,1),(21627,63136,63136,'OP_PlayerPollPopup',562,1),(21628,63136,63136,'OP_PlayLon',516,1),(21629,63136,63136,'OP_PointOfInterest',764,1),(21630,63136,63136,'OP_PointOfInterest2',765,1),(21631,63136,63136,'OP_PopulateSkillMapsMsg',218,1),(21632,63136,63136,'OP_PositionBoatTransportMsg',255,1),(21633,63136,63136,'OP_PositionMoveableObject',165,1),(21634,63136,63136,'OP_PostPossessionMsg',459,1),(21635,63136,63136,'OP_PredictionUpdateMsg',39,1),(21636,63136,63136,'OP_PrePossessionMsg',458,1),(21637,63136,63136,'OP_PromoFlagsDetailsMsg',378,1),(21638,63136,63136,'OP_PublishHouse',141,1),(21639,63136,63136,'OP_PurchaseConsignmentLoreCheckRe',412,1),(21640,63136,63136,'OP_PurchaseConsignmentRequestMsg',131,1),(21641,63136,63136,'OP_QueAllBgSolo',571,1),(21642,63136,63136,'OP_QuestionnaireMsg',264,1),(21643,63136,63136,'OP_QuestJournalInspectMsg',116,1),(21644,63136,63136,'OP_QuestJournalOpenMsg',115,1),(21645,63136,63136,'OP_QuestJournalSetVisibleMsg',117,1),(21646,63136,63136,'OP_QuestJournalWaypointMsg',118,1),(21647,63136,63136,'OP_QuestReward',324,1),(21648,63136,63136,'OP_QuickbarInitMsg',260,1),(21649,63136,63136,'OP_QuickbarUpdateMsg',261,1),(21650,63136,63136,'OP_RaceRestrictionMsg',444,1),(21651,63136,63136,'OP_ReadBookPageMsg',199,1),(21652,63136,63136,'OP_ReadyForTakeOffMsg',195,1),(21653,63136,63136,'OP_ReadyToZoneMsg',86,1),(21654,63136,63136,'OP_RecipeBook',544,1),(21655,63136,63136,'OP_RecipeDetailsMsg',74,1),(21656,63136,63136,'OP_RecipeList',776,1),(21657,63136,63136,'OP_RecipeListUnknown',597,1),(21658,63136,63136,'OP_RelinquishHouseMsg',156,1),(21659,63136,63136,'OP_ReloadLocalizedTxtMsg',359,1),(21660,63136,63136,'OP_RemoteCmdMsg',44,1),(21661,63136,63136,'OP_RemoveClientFromGroupMsg',87,1),(21662,63136,63136,'OP_RemoveConcentrationMsg',114,1),(21663,63136,63136,'OP_RemoveGroupFromGroupMsg',88,1),(21664,63136,63136,'OP_RemoveSpellEffectMsg',113,1),(21665,63136,63136,'OP_RenameGuildMsg',286,1),(21666,63136,63136,'OP_ReplaceableSubMeshesMsg',168,1),(21667,63136,63136,'OP_ReportMsg',384,1),(21668,63136,63136,'OP_RequestCampMsg',52,1),(21669,63136,63136,'OP_RequestGuildBankEventDetailsMs',284,1),(21670,63136,63136,'OP_RequestGuildEventDetailsMsg',275,1),(21671,63136,63136,'OP_RequestGuildInfoMsg',277,1),(21672,63136,63136,'OP_RequestGuildMembershipMsg',360,1),(21673,63136,63136,'OP_RequestHelpRepathMsg',209,1),(21674,63136,63136,'OP_RequestRecipeDetailsMsg',73,1),(21675,63136,63136,'OP_RequestTargetLocMsg',210,1),(21676,63136,63136,'OP_Research',777,1),(21677,63136,63136,'OP_ResendWorldChannelsMsg',448,1),(21678,63136,63136,'OP_ReskinCharacterRequestMsg',15,1),(21679,63136,63136,'OP_RestartZoneMsg',417,1),(21680,63136,63136,'OP_RewardPackMsg',285,1),(21681,63136,63136,'OP_SatMsg',192,1),(21682,63136,63136,'OP_SavageBarInitMsg',584,1),(21683,63136,63136,'OP_SelectZoneTeleporterDestinatio',358,1),(21684,63136,63136,'OP_SendLatestRequestMsg',99,1),(21685,63136,63136,'OP_ServerPlayCharacterReplyMsg',26,1),(21686,63136,63136,'OP_ServerPlayCharacterRequestMsg',25,1),(21687,63136,63136,'OP_SetInstanceDisplayNameMsg',445,1),(21688,63136,63136,'OP_SetRemoteCmdsMsg',43,1),(21689,63136,63136,'OP_SetSocialMsg',101,1),(21690,63136,63136,'OP_ShaderCustomizationMsg',167,1),(21691,63136,63136,'OP_ShowCreateFromRecipeUIMsg',222,1),(21692,63136,63136,'OP_ShowIllusionsMsg',196,1),(21693,63136,63136,'OP_ShowItemCreationProcessUIMsg',226,1),(21694,63136,63136,'OP_ShowRecipeBookMsg',229,1),(21695,63136,63136,'OP_ShowZoneTeleporterDestinations',357,1),(21696,63136,63136,'OP_SitMsg',190,1),(21697,63136,63136,'OP_SkillInfoRequest',518,1),(21698,63136,63136,'OP_SkillInfoResponse',519,1),(21699,63136,63136,'OP_SOEAllAccess',640,1),(21700,63136,63136,'OP_SpellGainedMsg',266,1),(21701,63136,63136,'OP_StandMsg',191,1),(21702,63136,63136,'OP_StoodMsg',193,1),(21703,63136,63136,'OP_StopItemCreationMsg',225,1),(21704,63136,63136,'OP_StoppedLootingMsg',189,1),(21705,63136,63136,'OP_StopTrackingMsg',395,1),(21706,63136,63136,'OP_SubmitCharCust',569,1),(21707,63136,63136,'OP_SupplyDepot',774,1),(21708,63136,63136,'OP_SysClient',221,1),(21709,63136,63136,'OP_TeleportWithinZoneMsg',81,1),(21710,63136,63136,'OP_TeleportWithinZoneNoReloadMsg',82,1),(21711,63136,63136,'OP_TintWidgetsMsg',173,1),(21712,63136,63136,'OP_TitleUpdateMsg',388,1),(21713,63136,63136,'OP_TrackingUpdateMsg',393,1),(21714,63136,63136,'OP_TradeskillList',743,1),(21715,63136,63136,'OP_TraitsList',766,1),(21716,63136,63136,'OP_UIEvent',531,1),(21717,63136,63136,'OP_UIResetMsg',177,1),(21718,63136,63136,'OP_UISettingsResponseMsg',176,1),(21719,63136,63136,'OP_Unknown',800,1),(21720,63136,63136,'OP_UnknownNpcMsg',377,1),(21721,63136,63136,'OP_UpdateActivePublicZonesMsg',376,1),(21722,63136,63136,'OP_UpdateCharacterSheetMsg',65,1),(21723,63136,63136,'OP_UpdateClientPredFlagsMsg',249,1),(21724,63136,63136,'OP_UpdateDebugRadiiMsg',383,1),(21725,63136,63136,'OP_UpdateGroupMemberDataMsg',392,1),(21726,63136,63136,'OP_UpdateHouseAccessDataMsg',147,1),(21727,63136,63136,'OP_UpdateHouseDataMsg',146,1),(21728,63136,63136,'OP_UpdateInventoryMsg',70,1),(21729,63136,63136,'OP_UpdateItemCreationProcessUIMsg',227,1),(21730,63136,63136,'OP_UpdateMotdMsg',211,1),(21731,63136,63136,'OP_UpdateOpportunityMsg',77,1),(21732,63136,63136,'OP_UpdatePositionMsg',41,1),(21733,63136,63136,'OP_UpdateRaidMsg',385,1),(21734,63136,63136,'OP_UpdateRecipeBookMsg',72,1),(21735,63136,63136,'OP_UpdateSkillBookMsg',75,1),(21736,63136,63136,'OP_UpdateSkillsMsg',76,1),(21737,63136,63136,'OP_UpdateSpellBookMsg',68,1),(21738,63136,63136,'OP_UpdateTargetLocMsg',64,1),(21739,63136,63136,'OP_UpdateTargetMsg',63,1),(21740,63136,63136,'OP_UpdateTitleCmd',499,1),(21741,63136,63136,'OP_UseAdornment',754,1),(21742,63136,63136,'OP_VideoUploaded',583,1),(21743,63136,63136,'OP_VoiceChatChannel',524,1),(21744,63136,63136,'OP_VoiceChatServer',770,1),(21745,63136,63136,'OP_WaypointReplyMsg',353,1),(21746,63136,63136,'OP_WaypointRequestMsg',352,1),(21747,63136,63136,'OP_WaypointSelectMsg',354,1),(21748,63136,63136,'OP_WaypointUpdateMsg',355,1),(21749,63136,63136,'OP_Weakness',587,1),(21750,63136,63136,'OP_WhoQueryReplyMsg',56,1),(21751,63136,63136,'OP_WhoQueryRequestMsg',55,1),(21752,63136,63136,'OP_WorldDataChangeMsg',415,1),(21753,63136,63136,'OP_WorldDataUpdateMsg',240,1),(21754,63136,63136,'OP_WorldListMsg',8,1),(21755,63136,63136,'OP_WorldPingMsg',404,1),(21756,63136,63136,'OP_WorldShutdownUpdateMsg',408,1),(21757,63136,63136,'OP_WorldStatusChangeMsg',6,1),(21758,63136,63136,'OP_WorldTravelAvail',576,1),(21759,63136,63136,'OP_WSAcctLockStatusMsg',208,1),(21760,63136,63136,'OP_WSCreateCharacterReplyMsg',14,1),(21761,63136,63136,'OP_WSCreateCharacterRequestMsg',13,1),(21762,63136,63136,'OP_WSLoginRequestMsg',2,1),(21763,63136,63136,'OP_WSServerHideMsg',370,1),(21764,63136,63136,'OP_WSServerLockMsg',368,1),(21765,63136,63136,'OP_WSStatusReplyMsg',5,1),(21766,63136,63136,'OP_ZoneBgInstanceList',572,1),(21767,63136,63136,'OP_ZoneInfoMsg',35,1),(21768,63136,63136,'OP_ZoneInstanceCreateReplyMsg',32,1),(21769,63136,63136,'OP_ZoneInstanceDestroyedMsg',33,1),(21770,63136,63136,'OP_ZoneMOTDMsg',47,1),(21771,63136,63136,'OP_ZonesStatusMsg',105,1),(21772,63136,63136,'OP_ZonesStatusRequestMsg',104,1),(21773,63136,63136,'OP_ZoneToFriendReplyMsg',288,1),(21774,63136,63136,'OP_ZoneToFriendRequestMsg',287,1),(22238,63137,63166,'OP_AchievementUpdateMsg',781,1),(22239,63137,63166,'OP_AddSocialStructureStandingMsg',253,1),(22240,63137,63166,'OP_AdvancementRequestMsg',398,1),(22241,63137,63166,'OP_AdventureList',493,1),(22242,63137,63166,'OP_AFKUpdateMsg',374,1),(22243,63137,63166,'OP_AfterInvSpellUpdate',71,1),(22244,63137,63166,'OP_AllCharactersDescReplyMsg',10,1),(22245,63137,63166,'OP_AllCharactersDescRequestMsg',9,1),(22246,63137,63166,'OP_AllWSDescRequestMsg',7,1),(22247,63137,63166,'OP_AnonUpdateMsg',375,1),(22248,63137,63166,'OP_ArenaCreate',461,1),(22249,63137,63166,'OP_ArenaGameTypesMsg',450,1),(22250,63137,63166,'OP_ArenaList',462,1),(22251,63137,63166,'OP_ArenaWindow',470,1),(22252,63137,63166,'OP_AttackAllowed',505,1),(22253,63137,63166,'OP_AttackNotAllowed',506,1),(22254,63137,63166,'OP_AuctionAbortMsg',441,1),(22255,63137,63166,'OP_AuctionCharacter',438,1),(22256,63137,63166,'OP_AuctionCharacterReply',439,1),(22257,63137,63166,'OP_AuctionCoin',436,1),(22258,63137,63166,'OP_AuctionCoinReply',437,1),(22259,63137,63166,'OP_AuctionCommitMsg',440,1),(22260,63137,63166,'OP_AuctionItem',434,1),(22261,63137,63166,'OP_AuctionItemReply',435,1),(22262,63137,63166,'OP_AuditAuctionEventMsg',451,1),(22263,63137,63166,'OP_AvatarCreatedMsg',48,1),(22264,63137,63166,'OP_AvatarDestroyedMsg',49,1),(22265,63137,63166,'OP_AvatarUpdateMsg',364,1),(22266,63137,63166,'OP_BadLanguageFilter',523,1),(22267,63137,63166,'OP_BagOptions',507,1),(22268,63137,63166,'OP_BeginItemCreationMsg',224,1),(22269,63137,63166,'OP_BeginTrackingMsg',394,1),(22270,63137,63166,'OP_BioUpdateMsg',366,1),(22271,63137,63166,'OP_BrokerAddBag',296,1),(22272,63137,63166,'OP_BrokerRemoveBag',297,1),(22273,63137,63166,'OP_BrokerSellList',724,1),(22274,63137,63166,'OP_BuyPlayerHouseMsg',153,1),(22275,63137,63166,'OP_BuyPlayerHouseTintMsg',154,1),(22276,63137,63166,'OP_CampAbortedMsg',54,1),(22277,63137,63166,'OP_CampClientMsg',391,1),(22278,63137,63166,'OP_CampStartedMsg',53,1),(22279,63137,63166,'OP_CancelCreateFromRecipeMsg',223,1),(22280,63137,63166,'OP_CancelledFeignMsg',219,1),(22281,63137,63166,'OP_CancelMoveObjectModeMsg',166,1),(22282,63137,63166,'OP_CancelSpellCast',494,1),(22283,63137,63166,'OP_ChangeServerControlFlagMsg',250,1),(22284,63137,63166,'OP_ChangeZoneMsg',79,1),(22285,63137,63166,'OP_CharacterAchievements',780,1),(22286,63137,63166,'OP_CharacterCreatedDungeons',557,1),(22287,63137,63166,'OP_CharacterCurrency',779,1),(22288,63137,63166,'OP_CharacterHousingList',512,1),(22289,63137,63166,'OP_CharacterLinkdeadMsg',419,1),(22290,63137,63166,'OP_CharacterMerc',67,1),(22291,63137,63166,'OP_CharacterMounts',588,1),(22292,63137,63166,'OP_CharacterPet',66,1),(22293,63137,63166,'OP_CharNameChangedMsg',356,1),(22294,63137,63166,'OP_CharRenamed',745,1),(22295,63137,63166,'OP_CharTransferCommitReplyMsg',427,1),(22296,63137,63166,'OP_CharTransferCommitRequestMsg',425,1),(22297,63137,63166,'OP_CharTransferReplyMsg',423,1),(22298,63137,63166,'OP_CharTransferRequestMsg',422,1),(22299,63137,63166,'OP_CharTransferRollbackReplyMsg',426,1),(22300,63137,63166,'OP_CharTransferRollbackRequestMsg',424,1),(22301,63137,63166,'OP_CharTransferStartReplyMsg',421,1),(22302,63137,63166,'OP_CharTransferStartRequestMsg',420,1),(22303,63137,63166,'OP_CharTransferValidateReplyMsg',443,1),(22304,63137,63166,'OP_CharTransferValidateRequestMsg',442,1),(22305,63137,63166,'OP_ChatCreateChannelMsg',289,1),(22306,63137,63166,'OP_ChatFiltersMsg',338,1),(22307,63137,63166,'OP_ChatJoinChannelMsg',290,1),(22308,63137,63166,'OP_ChatLeaveChannelMsg',292,1),(22309,63137,63166,'OP_ChatRelationshipUpdateMsg',187,1),(22310,63137,63166,'OP_ChatSendFriendsMsg',299,1),(22311,63137,63166,'OP_ChatSendIgnoresMsg',300,1),(22312,63137,63166,'OP_ChatTellChannelMsg',293,1),(22313,63137,63166,'OP_ChatTellUserMsg',294,1),(22314,63137,63166,'OP_ChatToggleFriendMsg',295,1),(22315,63137,63166,'OP_ChatToggleIgnoreMsg',298,1),(22316,63137,63166,'OP_ChatWhoChannelMsg',291,1),(22317,63137,63166,'OP_ClearDataMsg',100,1),(22318,63137,63166,'OP_ClearForLandingMsg',496,1),(22319,63137,63166,'OP_ClearForTakeOffMsg',194,1),(22320,63137,63166,'OP_ClientCmdMsg',60,1),(22321,63137,63166,'OP_ClientFellMsg',389,1),(22322,63137,63166,'OP_ClientIdleBeginMsg',410,1),(22323,63137,63166,'OP_ClientIdleEndMsg',411,1),(22324,63137,63166,'OP_ClientInDeathRegionMsg',390,1),(22325,63137,63166,'OP_ClientTeleportRequestMsg',80,1),(22326,63137,63166,'OP_ClientTeleportToLocationMsg',248,1),(22327,63137,63166,'OP_CloseGroupInviteWindowMsg',401,1),(22328,63137,63166,'OP_CollectAllHouseItemsMsg',155,1),(22329,63137,63166,'OP_ConsignItemRequestMsg',129,1),(22330,63137,63166,'OP_ConsignItemResponseMsg',130,1),(22331,63137,63166,'OP_ConsignmentCloseStoreMsg',128,1),(22332,63137,63166,'OP_ConsignRemoveItemsMsg',382,1),(22333,63137,63166,'OP_ConsignViewCreateMsg',379,1),(22334,63137,63166,'OP_ConsignViewGetPageMsg',380,1),(22335,63137,63166,'OP_ConsignViewReleaseMsg',381,1),(22336,63137,63166,'OP_ConsignViewSortMsg',387,1),(22337,63137,63166,'OP_CorruptedClientMsg',414,1),(22338,63137,63166,'OP_CreateBoatTransportsMsg',254,1),(22339,63137,63166,'OP_CreateCharacterDungeon',551,1),(22340,63137,63166,'OP_CreateCharacterReplyMsg',12,1),(22341,63137,63166,'OP_CreateCharacterRequestMsg',11,1),(22342,63137,63166,'OP_CreateCharFromCBBReplyMsg',431,1),(22343,63137,63166,'OP_CreateCharFromCBBRequestMsg',430,1),(22344,63137,63166,'OP_CreateGuildReplyMsg',123,1),(22345,63137,63166,'OP_CreateGuildRequestMsg',121,1),(22346,63137,63166,'OP_CreateZoneInstanceMsg',31,1),(22347,63137,63166,'OP_CsCategoryRequestMsg',371,1),(22348,63137,63166,'OP_CsCategoryResponseMsg',372,1),(22349,63137,63166,'OP_CSTicketAddCommentMsg',237,1),(22350,63137,63166,'OP_CSTicketChangeNotificationMsg',239,1),(22351,63137,63166,'OP_CSTicketCommentRequestMsg',234,1),(22352,63137,63166,'OP_CSTicketCommentResponseMsg',235,1),(22353,63137,63166,'OP_CSTicketCreateMsg',236,1),(22354,63137,63166,'OP_CSTicketDeleteMsg',238,1),(22355,63137,63166,'OP_CSTicketHeaderRequestMsg',232,1),(22356,63137,63166,'OP_CSTicketInfoMsg',233,1),(22357,63137,63166,'OP_CSToolAccessResponseMsg',392,1),(22358,63137,63166,'OP_CSToolsRequestMsg',251,1),(22359,63137,63166,'OP_CSToolsResponseMsg',252,1),(22360,63137,63166,'OP_CurrentPet',490,1),(22361,63137,63166,'OP_CustomizationPurchaseRequestMs',170,1),(22362,63137,63166,'OP_CustomizationReplyMsg',172,1),(22363,63137,63166,'OP_CustomizationSetRequestMsg',171,1),(22364,63137,63166,'OP_CustomizeHouseDisplay',770,1),(22365,63137,63166,'OP_DailyObjectives',601,1),(22366,63137,63166,'OP_DefaultGroupOptionsMsg',201,1),(22367,63137,63166,'OP_DefaultGroupOptionsRequestMsg',200,1),(22368,63137,63166,'OP_DeityAbilityWindow',621,1),(22369,63137,63166,'OP_DeleteCharacterReplyMsg',19,1),(22370,63137,63166,'OP_DeleteCharacterRequestMsg',18,1),(22371,63137,63166,'OP_DeleteGuildMsg',126,1),(22372,63137,63166,'OP_DestUpdateReq',213,1),(22373,63137,63166,'OP_DialogCloseMsg',112,1),(22374,63137,63166,'OP_DialogSelectMsg',111,1),(22375,63137,63166,'OP_DispatchClientCmdMsg',62,1),(22376,63137,63166,'OP_DispatchESMsg',61,1),(22377,63137,63166,'OP_DispatchMsg',456,1),(22378,63137,63166,'OP_DispatchSpellCmdMsg',182,1),(22379,63137,63166,'OP_DisplayDebugNLLPointsMsg',258,1),(22380,63137,63166,'OP_DisplayEventMsg',457,1),(22381,63137,63166,'OP_DisplayExchangeScreenMsg',449,1),(22382,63137,63166,'OP_DisplayGroupOptionsScreenMsg',203,1),(22383,63137,63166,'OP_DisplayInnVisitScreenMsg',205,1),(22384,63137,63166,'OP_DisplayMailScreenMsg',409,1),(22385,63137,63166,'OP_DisplayTSEventReactionMsg',228,1),(22386,63137,63166,'OP_DisplayWarningMsg',269,1),(22387,63137,63166,'OP_DoneLoadingEntityResourcesMsg',38,1),(22388,63137,63166,'OP_DoneLoadingZoneResourcesMsg',36,1),(22389,63137,63166,'OP_DoneSendingInitialEntitiesMsg',37,1),(22390,63137,63166,'OP_DressingRoom',515,1),(22391,63137,63166,'OP_DumpSchedulerMsg',206,1),(22392,63137,63166,'OP_DungeonMakerEnter',552,1),(22393,63137,63166,'OP_DungeonMakerItemRequest',556,1),(22394,63137,63166,'OP_DungeonMakerItemResponse',586,1),(22395,63137,63166,'OP_DungeonMakerToolboxList',558,1),(22396,63137,63166,'OP_DungeonMakerUnknown',559,1),(22397,63137,63166,'OP_DungeonMakerUnknown1',560,1),(22398,63137,63166,'OP_DungeonPlayAsAvatarList',784,1),(22399,63137,63166,'OP_DungeonPlayAsAvatarSelected',785,1),(22400,63137,63166,'OP_EarlyLandingRequestMsg',491,1),(22401,63137,63166,'OP_EncounterBrokenMsg',267,1),(22402,63137,63166,'OP_EnterHouseMsg',157,1),(22403,63137,63166,'OP_EnterMoveObjectModeMsg',164,1),(22404,63137,63166,'OP_EntityVerbsReplyMsg',184,1),(22405,63137,63166,'OP_EntityVerbsRequestMsg',183,1),(22406,63137,63166,'OP_EntityVerbsVerbMsg',185,1),(22407,63137,63166,'OP_EqArenaResultsCmd',735,1),(22408,63137,63166,'OP_EqAvailWorldChannelsCmd',722,1),(22409,63137,63166,'OP_EqBetaCopyRequest',639,1),(22410,63137,63166,'OP_EqCannedEmoteCmd',664,1),(22411,63137,63166,'OP_EqChatChannelUpdateCmd',720,1),(22412,63137,63166,'OP_EqChoiceWinCmd',701,1),(22413,63137,63166,'OP_EqCloseWindowCmd',693,1),(22414,63137,63166,'OP_EqCollectionFilterCmd',680,1),(22415,63137,63166,'OP_EqCollectionItemCmd',681,1),(22416,63137,63166,'OP_EqCollectionUpdateCmd',679,1),(22417,63137,63166,'OP_EqConsignmentItemsCmd',725,1),(22418,63137,63166,'OP_EqCreateGhostCmd',646,1),(22419,63137,63166,'OP_EqCreateListBoxCmd',661,1),(22420,63137,63166,'OP_EqCreateSignWidgetCmd',648,1),(22421,63137,63166,'OP_EqCreateWidgetCmd',647,1),(22422,63137,63166,'OP_EqDebugPVDCmd',714,1),(22423,63137,63166,'OP_EqDestroyGhostCmd',649,1),(22424,63137,63166,'OP_EqDialogCloseCmd',677,1),(22425,63137,63166,'OP_EqDialogOpenCmd',676,1),(22426,63137,63166,'OP_EqDisplaySpellFailCmd',697,1),(22427,63137,63166,'OP_EqDisplayTextCmd',645,1),(22428,63137,63166,'OP_EqDrawablePathGraphCmd',675,1),(22429,63137,63166,'OP_EqEnableGameEventCmd',707,1),(22430,63137,63166,'OP_EqEnableWindowCmd',709,1),(22431,63137,63166,'OP_EqExamineInfoCmd',692,1),(22432,63137,63166,'OP_EqFactionUpdateCmd',678,1),(22433,63137,63166,'OP_EqFlashWindowCmd',710,1),(22434,63137,63166,'OP_EqGetProbsCmd',718,1),(22435,63137,63166,'OP_EqGroupMemberRemovedCmd',671,1),(22436,63137,63166,'OP_EqGuildBankEventActionCmd',736,1),(22437,63137,63166,'OP_EqGuildBankExamineInfoCmd',737,1),(22438,63137,63166,'OP_EqHearChainEffectCmd',672,1),(22439,63137,63166,'OP_EqHearChatCmd',644,1),(22440,63137,63166,'OP_EqHearCombatCmd',653,1),(22441,63137,63166,'OP_EqHearConsiderCmd',659,1),(22442,63137,63166,'OP_EqHearDeathCmd',670,1),(22443,63137,63166,'OP_EQHearDispellCmd',782,1),(22444,63137,63166,'OP_EqHearDrowningCmd',669,1),(22445,63137,63166,'OP_EqHearHealCmd',719,1),(22446,63137,63166,'OP_EqHearPlayFlavorCmd',712,1),(22447,63137,63166,'OP_EQHearProcCmd',655,1),(22448,63137,63166,'OP_EQHearResEffectCmd',656,1),(22449,63137,63166,'OP_EqHearSpellCastCmd',654,1),(22450,63137,63166,'OP_EqHearSpellFizzleCmd',658,1),(22451,63137,63166,'OP_EqHearSpellInterruptCmd',657,1),(22452,63137,63166,'OP_EqHearSpellNoLandCmd',738,1),(22453,63137,63166,'OP_EQHearThreatCmd',776,1),(22454,63137,63166,'OP_EqHelpPathClearCmd',690,1),(22455,63137,63166,'OP_EqHelpPathCmd',689,1),(22456,63137,63166,'OP_EqInspectPCResultsCmd',674,1),(22457,63137,63166,'OP_EqInstructionWindowCloseCmd',704,1),(22458,63137,63166,'OP_EqInstructionWindowCmd',703,1),(22459,63137,63166,'OP_EqInstructionWindowGoalCmd',705,1),(22460,63137,63166,'OP_EqInstructionWindowTaskCmd',706,1),(22461,63137,63166,'OP_EqJunctionListCmd',695,1),(22462,63137,63166,'OP_EqMapExplorationCmd',728,1),(22463,63137,63166,'OP_EqMentoring',683,1),(22464,63137,63166,'OP_EqPlaySound3DCmd',667,1),(22465,63137,63166,'OP_EqPlaySoundCmd',666,1),(22466,63137,63166,'OP_EqPlayVoiceCmd',668,1),(22467,63137,63166,'OP_EqQuestGroupCmd',685,1),(22468,63137,63166,'OP_EqQuestionnaireCmd',716,1),(22469,63137,63166,'OP_EqQuestJournalReplyCmd',684,1),(22470,63137,63166,'OP_EqQuestJournalUpdateCmd',682,1),(22471,63137,63166,'OP_EqReceiveOfferCmd',673,1),(22472,63137,63166,'OP_EqResurrectedCmd',700,1),(22473,63137,63166,'OP_EqSetControlGhostCmd',651,1),(22474,63137,63166,'OP_EqSetDebugPathPointsCmd',662,1),(22475,63137,63166,'OP_EqSetDefaultVerbCmd',702,1),(22476,63137,63166,'OP_EqSetPOVGhostCmd',652,1),(22477,63137,63166,'OP_EqShowBookCmd',715,1),(22478,63137,63166,'OP_EqShowDeathWindowCmd',696,1),(22479,63137,63166,'OP_EqShowWindowCmd',708,1),(22480,63137,63166,'OP_EqSpellCastEndCmd',699,1),(22481,63137,63166,'OP_EqSpellCastStartCmd',698,1),(22482,63137,63166,'OP_EqSpellMoveToRangeAndRetryCmd',730,1),(22483,63137,63166,'OP_EqStartBrokerCmd',727,1),(22484,63137,63166,'OP_EqStateCmd',665,1),(22485,63137,63166,'OP_EqStoreLogCmd',729,1),(22486,63137,63166,'OP_EqUpdateBankCmd',691,1),(22487,63137,63166,'OP_EqUpdateGhostCmd',650,1),(22488,63137,63166,'OP_EqUpdateLootCmd',694,1),(22489,63137,63166,'OP_EqUpdateMerchantCmd',686,1),(22490,63137,63166,'OP_EqUpdatePlayerMailCmd',731,1),(22491,63137,63166,'OP_EqUpdatePlayerTradeCmd',688,1),(22492,63137,63166,'OP_EqUpdateSignWidgetCmd',713,1),(22493,63137,63166,'OP_EqUpdateStoreCmd',687,1),(22494,63137,63166,'OP_EqUpdateSubClassesCmd',660,1),(22495,63137,63166,'OP_EqUpdateTargetCmd',723,1),(22496,63137,63166,'OP_EqWhoChannelQueryReplyCmd',721,1),(22497,63137,63166,'OP_ESInitMsg',27,1),(22498,63137,63166,'OP_ESLoginRequestMsg',3,1),(22499,63137,63166,'OP_ESReadyForClientsMsg',28,1),(22500,63137,63166,'OP_ESStatusMsg',102,1),(22501,63137,63166,'OP_ESWeatherRequestEndMsg',107,1),(22502,63137,63166,'OP_ESWeatherRequestMsg',106,1),(22503,63137,63166,'OP_ESZoneInstanceStatusMsg',103,1),(22504,63137,63166,'OP_ExamineConsignmentRequestMsg',174,1),(22505,63137,63166,'OP_ExamineConsignmentResponseMsg',175,1),(22506,63137,63166,'OP_ExamineInfoRequestMsg',259,1),(22507,63137,63166,'OP_ExamineItemRequestMsg',198,1),(22508,63137,63166,'OP_ExitHouseMsg',158,1),(22509,63137,63166,'OP_ExpectClientAsCharacterReplyMs',24,1),(22510,63137,63166,'OP_ExpectClientAsCharacterRequest',34,1),(22511,63137,63166,'OP_ExpPurchWindow',761,1),(22512,63137,63166,'OP_FellowshipExpMsg',125,1),(22513,63137,63166,'OP_FlightPathsMsg',418,1),(22514,63137,63166,'OP_GameWorldTimeMsg',45,1),(22515,63137,63166,'OP_GetAuctionAssetIDMsg',446,1),(22516,63137,63166,'OP_GetAuctionAssetIDReplyMsg',447,1),(22517,63137,63166,'OP_GetAvatarAccessRequestForCSToo',397,1),(22518,63137,63166,'OP_GetCharacterSerializedReplyMsg',429,1),(22519,63137,63166,'OP_GetCharacterSerializedRequestM',428,1),(22520,63137,63166,'OP_GroupCreatedMsg',90,1),(22521,63137,63166,'OP_GroupDestroyedMsg',91,1),(22522,63137,63166,'OP_GroupLeaderChangedMsg',95,1),(22523,63137,63166,'OP_GroupMemberAddedMsg',92,1),(22524,63137,63166,'OP_GroupMemberRemovedMsg',93,1),(22525,63137,63166,'OP_GroupOptionsMsg',202,1),(22526,63137,63166,'OP_GroupRemovedFromGroupMsg',94,1),(22527,63137,63166,'OP_GroupResendOOZDataMsg',96,1),(22528,63137,63166,'OP_GroupSettingsChangedMsg',97,1),(22529,63137,63166,'OP_GuildBankActionMsg',278,1),(22530,63137,63166,'OP_GuildBankActionResponseMsg',279,1),(22531,63137,63166,'OP_GuildBankEventListMsg',283,1),(22532,63137,63166,'OP_GuildBankItemDetailsRequestMsg',280,1),(22533,63137,63166,'OP_GuildBankItemDetailsResponseMs',281,1),(22534,63137,63166,'OP_GuildBankUpdateMsg',282,1),(22535,63137,63166,'OP_GuildEventActionMsg',273,1),(22536,63137,63166,'OP_GuildEventAddMsg',272,1),(22537,63137,63166,'OP_GuildEventDetailsMsg',276,1),(22538,63137,63166,'OP_GuildEventListMsg',274,1),(22539,63137,63166,'OP_GuildEventMsg',271,1),(22540,63137,63166,'OP_GuildMembershipResponseMsg',361,1),(22541,63137,63166,'OP_GuildRecruiting',741,1),(22542,63137,63166,'OP_GuildRecruitingDetails',742,1),(22543,63137,63166,'OP_GuildRecruitingImage',743,1),(22544,63137,63166,'OP_GuildRecruitingMemberInfo',740,1),(22545,63137,63166,'OP_GuildsayMsg',124,1),(22546,63137,63166,'OP_GuildStatusUpdate',734,1),(22547,63137,63166,'OP_GuildUpdateMsg',127,1),(22548,63137,63166,'OP_HeritageMsg',10027,1),(22549,63137,63166,'OP_HideIllusionsMsg',197,1),(22550,63137,63166,'OP_HouseAccessRemoveMsg',161,1),(22551,63137,63166,'OP_HouseAccessSetMsg',160,1),(22552,63137,63166,'OP_HouseCustomizationScreenMsg',169,1),(22553,63137,63166,'OP_HouseDefaultAccessSetMsg',159,1),(22554,63137,63166,'OP_HouseDeletedRemotelyMsg',145,1),(22555,63137,63166,'OP_HouseItemsList',489,1),(22556,63137,63166,'OP_HousingDataChangedMsg',432,1),(22557,63137,63166,'OP_HousingRestoreMsg',433,1),(22558,63137,63166,'OP_InspectPlayerMsg',367,1),(22559,63137,63166,'OP_InspectPlayerRequestMsg',455,1),(22560,63137,63166,'OP_InviteRequestMsg',452,1),(22561,63137,63166,'OP_InviteResponseMsg',453,1),(22562,63137,63166,'OP_InviteTargetResponseMsg',454,1),(22563,63137,63166,'OP_JoinGuildNotifyMsg',363,1),(22564,63137,63166,'OP_JournalQuestStoryline',783,1),(22565,63137,63166,'OP_KeymapDataMsg',180,1),(22566,63137,63166,'OP_KeymapLoadMsg',178,1),(22567,63137,63166,'OP_KeymapNoneMsg',179,1),(22568,63137,63166,'OP_KeymapSaveMsg',181,1),(22569,63137,63166,'OP_KnowledgebaseRequestMsg',230,1),(22570,63137,63166,'OP_KnowledgebaseResponseMsg',231,1),(22571,63137,63166,'OP_KnowledgeWindowSlotMappingMsg',373,1),(22572,63137,63166,'OP_KnownLanguagesMsg',242,1),(22573,63137,63166,'OP_Launchpad',579,1),(22574,63137,63166,'OP_LeaveGuildNotifyMsg',362,1),(22575,63137,63166,'OP_LevelChangedMsg',265,1),(22576,63137,63166,'OP_LFGGroupSearch',509,1),(22577,63137,63166,'OP_LFGUpdateMsg',522,1),(22578,63137,63166,'OP_LikeOption',139,1),(22579,63137,63166,'OP_LoadCalendarEvents',582,1),(22580,63137,63166,'OP_LoadWelcomeWindow',566,1),(22581,63137,63166,'OP_LoginByNumRequestMsg',1,1),(22582,63137,63166,'OP_LoginReplyMsg',4,1),(22583,63137,63166,'OP_LoginRequestMsg',0,1),(22584,63137,63166,'OP_LootItemsRequestMsg',188,1),(22585,63137,63166,'OP_Lottery',739,1),(22586,63137,63166,'OP_LSCheckAcctLockMsg',207,1),(22587,63137,63166,'OP_LsClientAlertlogReplyMsg',246,1),(22588,63137,63166,'OP_LsClientBaselogReplyMsg',244,1),(22589,63137,63166,'OP_LsClientCrashlogReplyMsg',245,1),(22590,63137,63166,'OP_LsClientVerifylogReplyMsg',247,1),(22591,63137,63166,'OP_LsRequestClientCrashLogMsg',243,1),(22592,63137,63166,'OP_LSServerLockMsg',369,1),(22593,63137,63166,'OP_MacroInitMsg',262,1),(22594,63137,63166,'OP_MacroUpdateMsg',263,1),(22595,63137,63166,'OP_MailCommitSendMessageMsg',348,1),(22596,63137,63166,'OP_MailDeleteMessageMsg',344,1),(22597,63137,63166,'OP_MailEventNotificationMsg',416,1),(22598,63137,63166,'OP_MailGetHeadersReplyMsg',345,1),(22599,63137,63166,'OP_MailGetMessageMsg',342,1),(22600,63137,63166,'OP_MailGetMessageReplyMsg',346,1),(22601,63137,63166,'OP_MailRemoveAttachFromMailMsg',350,1),(22602,63137,63166,'OP_MailSendMessageMsg',343,1),(22603,63137,63166,'OP_MailSendMessageReplyMsg',347,1),(22604,63137,63166,'OP_MailSendSystemMessageMsg',349,1),(22605,63137,63166,'OP_MakeGroupLeaderMsg',89,1),(22606,63137,63166,'OP_MapFogDataInitMsg',399,1),(22607,63137,63166,'OP_MapFogDataUpdateMsg',400,1),(22608,63137,63166,'OP_MapRequest',525,1),(22609,63137,63166,'OP_MarketAddFundsReply',533,1),(22610,63137,63166,'OP_MarketAddFundsRequest',532,1),(22611,63137,63166,'OP_MarketFundsUpdate',530,1),(22612,63137,63166,'OP_MarketPlaceItems',543,1),(22613,63137,63166,'OP_MarketPlacePrices',536,1),(22614,63137,63166,'OP_MarketPurchase',535,1),(22615,63137,63166,'OP_MentorPopup',564,1),(22616,63137,63166,'OP_MercHireWindow',787,1),(22617,63137,63166,'OP_MercUnknown',788,1),(22618,63137,63166,'OP_MigrateBoatTransportMsg',256,1),(22619,63137,63166,'OP_MigrateBoatTransportReplyMsg',257,1),(22620,63137,63166,'OP_MigrateClientToZoneReplyMsg',84,1),(22621,63137,63166,'OP_MigrateClientToZoneRequestMsg',83,1),(22622,63137,63166,'OP_ModifyGuildMsg',270,1),(22623,63137,63166,'OP_MonitorCharacterListMsg',58,1),(22624,63137,63166,'OP_MonitorCharacterListRequestMsg',59,1),(22625,63137,63166,'OP_MonitorReplyMsg',57,1),(22626,63137,63166,'OP_MOTDMsg',46,1),(22627,63137,63166,'OP_MoveableObjectPlacementCriteri',163,1),(22628,63137,63166,'OP_MoveLogUpdateMsg',405,1),(22629,63137,63166,'OP_NotifyApprenticeStoppedMentori',413,1),(22630,63137,63166,'OP_OfferQuestMsg',406,1),(22631,63137,63166,'OP_OnscreenMsgMsg',268,1),(22632,63137,63166,'OP_OpenCharCust',568,1),(22633,63137,63166,'OP_OutOfZoneMemberDataMsg',98,1),(22634,63137,63166,'OP_PaperdollImage',581,1),(22635,63137,63166,'OP_PayHouseUpkeepMsg',162,1),(22636,63137,63166,'OP_PerformCameraShakeMsg',217,1),(22637,63137,63166,'OP_PerformPlayerKnockbackMsg',216,1),(22638,63137,63166,'OP_PetOptions',204,1),(22639,63137,63166,'OP_PetOptionsResponse',585,1),(22640,63137,63166,'OP_PlayCharacterReplyMsg',21,1),(22641,63137,63166,'OP_PlayCharacterRequestMsg',20,1),(22642,63137,63166,'OP_PlayerHouseAccessUpdateMsg',150,1),(22643,63137,63166,'OP_PlayerHouseBaseScreenMsg',148,1),(22644,63137,63166,'OP_PlayerHouseCloseUIMsg',152,1),(22645,63137,63166,'OP_PlayerHouseDisplayStatusMsg',151,1),(22646,63137,63166,'OP_PlayerHousePurchaseScreenMsg',149,1),(22647,63137,63166,'OP_PlayerMadeInstances',143,1),(22648,63137,63166,'OP_PlayerMadeInstancesScreen',142,1),(22649,63137,63166,'OP_PlayerPollAnswer',563,1),(22650,63137,63166,'OP_PlayerPollPopup',562,1),(22651,63137,63166,'OP_PlayLon',516,1),(22652,63137,63166,'OP_PointOfInterest',765,1),(22653,63137,63166,'OP_PointOfInterest2',766,1),(22654,63137,63166,'OP_PopulateSkillMapsMsg',218,1),(22655,63137,63166,'OP_PositionBoatTransportMsg',255,1),(22656,63137,63166,'OP_PositionMoveableObject',165,1),(22657,63137,63166,'OP_PostPossessionMsg',459,1),(22658,63137,63166,'OP_PredictionUpdateMsg',39,1),(22659,63137,63166,'OP_PrePossessionMsg',458,1),(22660,63137,63166,'OP_PromoFlagsDetailsMsg',378,1),(22661,63137,63166,'OP_PublishHouse',141,1),(22662,63137,63166,'OP_PurchaseConsignmentLoreCheckRe',412,1),(22663,63137,63166,'OP_PurchaseConsignmentRequestMsg',131,1),(22664,63137,63166,'OP_QueAllBgSolo',571,1),(22665,63137,63166,'OP_QuestionnaireMsg',264,1),(22666,63137,63166,'OP_QuestJournalInspectMsg',116,1),(22667,63137,63166,'OP_QuestJournalOpenMsg',115,1),(22668,63137,63166,'OP_QuestJournalSetVisibleMsg',117,1),(22669,63137,63166,'OP_QuestJournalWaypointMsg',118,1),(22670,63137,63166,'OP_QuestReward',324,1),(22671,63137,63166,'OP_QuickbarInitMsg',260,1),(22672,63137,63166,'OP_QuickbarUpdateMsg',261,1),(22673,63137,63166,'OP_RaceRestrictionMsg',444,1),(22674,63137,63166,'OP_ReadBookPageMsg',199,1),(22675,63137,63166,'OP_ReadyForTakeOffMsg',195,1),(22676,63137,63166,'OP_ReadyToZoneMsg',86,1),(22677,63137,63166,'OP_RecipeBook',544,1),(22678,63137,63166,'OP_RecipeDetailsMsg',74,1),(22679,63137,63166,'OP_RecipeList',777,1),(22680,63137,63166,'OP_RecipeListUnknown',597,1),(22681,63137,63166,'OP_RelinquishHouseMsg',156,1),(22682,63137,63166,'OP_ReloadLocalizedTxtMsg',359,1),(22683,63137,63166,'OP_RemoteCmdMsg',44,1),(22684,63137,63166,'OP_RemoveClientFromGroupMsg',87,1),(22685,63137,63166,'OP_RemoveConcentrationMsg',114,1),(22686,63137,63166,'OP_RemoveGroupFromGroupMsg',88,1),(22687,63137,63166,'OP_RemoveSpellEffectMsg',113,1),(22688,63137,63166,'OP_RenameGuildMsg',286,1),(22689,63137,63166,'OP_ReplaceableSubMeshesMsg',168,1),(22690,63137,63166,'OP_ReportMsg',384,1),(22691,63137,63166,'OP_RequestCampMsg',52,1),(22692,63137,63166,'OP_RequestGuildBankEventDetailsMs',284,1),(22693,63137,63166,'OP_RequestGuildEventDetailsMsg',275,1),(22694,63137,63166,'OP_RequestGuildInfoMsg',277,1),(22695,63137,63166,'OP_RequestGuildMembershipMsg',360,1),(22696,63137,63166,'OP_RequestHelpRepathMsg',209,1),(22697,63137,63166,'OP_RequestRecipeDetailsMsg',73,1),(22698,63137,63166,'OP_RequestTargetLocMsg',210,1),(22699,63137,63166,'OP_Research',778,1),(22700,63137,63166,'OP_ResendWorldChannelsMsg',448,1),(22701,63137,63166,'OP_ReskinCharacterRequestMsg',15,1),(22702,63137,63166,'OP_RestartZoneMsg',417,1),(22703,63137,63166,'OP_RewardPackMsg',285,1),(22704,63137,63166,'OP_SatMsg',192,1),(22705,63137,63166,'OP_SavageBarInitMsg',584,1),(22706,63137,63166,'OP_SelectZoneTeleporterDestinatio',358,1),(22707,63137,63166,'OP_SendLatestRequestMsg',99,1),(22708,63137,63166,'OP_ServerPlayCharacterReplyMsg',26,1),(22709,63137,63166,'OP_ServerPlayCharacterRequestMsg',25,1),(22710,63137,63166,'OP_SetInstanceDisplayNameMsg',445,1),(22711,63137,63166,'OP_SetRemoteCmdsMsg',43,1),(22712,63137,63166,'OP_SetSocialMsg',101,1),(22713,63137,63166,'OP_ShaderCustomizationMsg',167,1),(22714,63137,63166,'OP_ShowCreateFromRecipeUIMsg',222,1),(22715,63137,63166,'OP_ShowIllusionsMsg',196,1),(22716,63137,63166,'OP_ShowItemCreationProcessUIMsg',226,1),(22717,63137,63166,'OP_ShowRecipeBookMsg',229,1),(22718,63137,63166,'OP_ShowZoneTeleporterDestinations',357,1),(22719,63137,63166,'OP_SitMsg',190,1),(22720,63137,63166,'OP_SkillInfoRequest',518,1),(22721,63137,63166,'OP_SkillInfoResponse',519,1),(22722,63137,63166,'OP_SOEAllAccess',640,1),(22723,63137,63166,'OP_SpellGainedMsg',266,1),(22724,63137,63166,'OP_StandMsg',191,1),(22725,63137,63166,'OP_StoodMsg',193,1),(22726,63137,63166,'OP_StopItemCreationMsg',225,1),(22727,63137,63166,'OP_StoppedLootingMsg',189,1),(22728,63137,63166,'OP_StopTrackingMsg',395,1),(22729,63137,63166,'OP_SubmitCharCust',569,1),(22730,63137,63166,'OP_SupplyDepot',775,1),(22731,63137,63166,'OP_SysClient',221,1),(22732,63137,63166,'OP_TeleportWithinZoneMsg',81,1),(22733,63137,63166,'OP_TeleportWithinZoneNoReloadMsg',82,1),(22734,63137,63166,'OP_TintWidgetsMsg',173,1),(22735,63137,63166,'OP_TitleUpdateMsg',388,1),(22736,63137,63166,'OP_TrackingUpdateMsg',393,1),(22737,63137,63166,'OP_TradeskillList',744,1),(22738,63137,63166,'OP_TraitsList',767,1),(22739,63137,63166,'OP_UIEvent',531,1),(22740,63137,63166,'OP_UIResetMsg',177,1),(22741,63137,63166,'OP_UISettingsResponseMsg',176,1),(22742,63137,63166,'OP_Unknown',801,1),(22743,63137,63166,'OP_UnknownNpcMsg',377,1),(22744,63137,63166,'OP_UpdateActivePublicZonesMsg',376,1),(22745,63137,63166,'OP_UpdateCharacterSheetMsg',65,1),(22746,63137,63166,'OP_UpdateClientPredFlagsMsg',249,1),(22747,63137,63166,'OP_UpdateDebugRadiiMsg',383,1),(22748,63137,63166,'OP_UpdateGroupMemberDataMsg',392,1),(22749,63137,63166,'OP_UpdateHouseAccessDataMsg',147,1),(22750,63137,63166,'OP_UpdateHouseDataMsg',146,1),(22751,63137,63166,'OP_UpdateInventoryMsg',70,1),(22752,63137,63166,'OP_UpdateItemCreationProcessUIMsg',227,1),(22753,63137,63166,'OP_UpdateMotdMsg',211,1),(22754,63137,63166,'OP_UpdateOpportunityMsg',77,1),(22755,63137,63166,'OP_UpdatePositionMsg',41,1),(22756,63137,63166,'OP_UpdateRaidMsg',385,1),(22757,63137,63166,'OP_UpdateRecipeBookMsg',72,1),(22758,63137,63166,'OP_UpdateSkillBookMsg',75,1),(22759,63137,63166,'OP_UpdateSkillsMsg',76,1),(22760,63137,63166,'OP_UpdateSpellBookMsg',68,1),(22761,63137,63166,'OP_UpdateTargetLocMsg',64,1),(22762,63137,63166,'OP_UpdateTargetMsg',63,1),(22763,63137,63166,'OP_UpdateTitleCmd',499,1),(22764,63137,63166,'OP_UseAdornment',755,1),(22765,63137,63166,'OP_VideoUploaded',583,1),(22766,63137,63166,'OP_VoiceChatChannel',524,1),(22767,63137,63166,'OP_VoiceChatServer',771,1),(22768,63137,63166,'OP_WaypointReplyMsg',353,1),(22769,63137,63166,'OP_WaypointRequestMsg',352,1),(22770,63137,63166,'OP_WaypointSelectMsg',354,1),(22771,63137,63166,'OP_WaypointUpdateMsg',355,1),(22772,63137,63166,'OP_Weakness',587,1),(22773,63137,63166,'OP_WhoQueryReplyMsg',56,1),(22774,63137,63166,'OP_WhoQueryRequestMsg',55,1),(22775,63137,63166,'OP_WorldDataChangeMsg',415,1),(22776,63137,63166,'OP_WorldDataUpdateMsg',240,1),(22777,63137,63166,'OP_WorldListMsg',8,1),(22778,63137,63166,'OP_WorldPingMsg',404,1),(22779,63137,63166,'OP_WorldShutdownUpdateMsg',408,1),(22780,63137,63166,'OP_WorldStatusChangeMsg',6,1),(22781,63137,63166,'OP_WorldTravelAvail',576,1),(22782,63137,63166,'OP_WSAcctLockStatusMsg',208,1),(22783,63137,63166,'OP_WSCreateCharacterReplyMsg',14,1),(22784,63137,63166,'OP_WSCreateCharacterRequestMsg',13,1),(22785,63137,63166,'OP_WSLoginRequestMsg',2,1),(22786,63137,63166,'OP_WSServerHideMsg',370,1),(22787,63137,63166,'OP_WSServerLockMsg',368,1),(22788,63137,63166,'OP_WSStatusReplyMsg',5,1),(22789,63137,63166,'OP_ZoneBgInstanceList',572,1),(22790,63137,63166,'OP_ZoneInfoMsg',35,1),(22791,63137,63166,'OP_ZoneInstanceCreateReplyMsg',32,1),(22792,63137,63166,'OP_ZoneInstanceDestroyedMsg',33,1),(22793,63137,63166,'OP_ZoneMOTDMsg',47,1),(22794,63137,63166,'OP_ZonesStatusMsg',105,1),(22795,63137,63166,'OP_ZonesStatusRequestMsg',104,1),(22796,63137,63166,'OP_ZoneToFriendReplyMsg',288,1),(22797,63137,63166,'OP_ZoneToFriendRequestMsg',287,1),(23261,63167,63212,'OP_AchievementUpdateMsg',777,1),(23262,63167,63212,'OP_AddSocialStructureStandingMsg',253,1),(23263,63167,63212,'OP_AdvancementRequestMsg',398,1),(23264,63167,63212,'OP_AdventureList',493,1),(23265,63167,63212,'OP_AFKUpdateMsg',374,1),(23266,63167,63212,'OP_AfterInvSpellUpdate',71,1),(23267,63167,63212,'OP_AllCharactersDescReplyMsg',10,1),(23268,63167,63212,'OP_AllCharactersDescRequestMsg',9,1),(23269,63167,63212,'OP_AllWSDescRequestMsg',7,1),(23270,63167,63212,'OP_AnonUpdateMsg',375,1),(23271,63167,63212,'OP_ArenaCreate',461,1),(23272,63167,63212,'OP_ArenaGameTypesMsg',450,1),(23273,63167,63212,'OP_ArenaList',462,1),(23274,63167,63212,'OP_ArenaWindow',470,1),(23275,63167,63212,'OP_AttackAllowed',505,1),(23276,63167,63212,'OP_AttackNotAllowed',506,1),(23277,63167,63212,'OP_AuctionAbortMsg',441,1),(23278,63167,63212,'OP_AuctionCharacter',438,1),(23279,63167,63212,'OP_AuctionCharacterReply',439,1),(23280,63167,63212,'OP_AuctionCoin',436,1),(23281,63167,63212,'OP_AuctionCoinReply',437,1),(23282,63167,63212,'OP_AuctionCommitMsg',440,1),(23283,63167,63212,'OP_AuctionItem',434,1),(23284,63167,63212,'OP_AuctionItemReply',435,1),(23285,63167,63212,'OP_AuditAuctionEventMsg',451,1),(23286,63167,63212,'OP_AvatarCreatedMsg',48,1),(23287,63167,63212,'OP_AvatarDestroyedMsg',49,1),(23288,63167,63212,'OP_AvatarUpdateMsg',364,1),(23289,63167,63212,'OP_BadLanguageFilter',523,1),(23290,63167,63212,'OP_BagOptions',507,1),(23291,63167,63212,'OP_BeginItemCreationMsg',224,1),(23292,63167,63212,'OP_BeginTrackingMsg',394,1),(23293,63167,63212,'OP_BioUpdateMsg',366,1),(23294,63167,63212,'OP_BrokerAddBag',296,1),(23295,63167,63212,'OP_BrokerRemoveBag',297,1),(23296,63167,63212,'OP_BrokerSellList',720,1),(23297,63167,63212,'OP_BuyPlayerHouseMsg',153,1),(23298,63167,63212,'OP_BuyPlayerHouseTintMsg',154,1),(23299,63167,63212,'OP_CampAbortedMsg',54,1),(23300,63167,63212,'OP_CampClientMsg',391,1),(23301,63167,63212,'OP_CampStartedMsg',53,1),(23302,63167,63212,'OP_CancelCreateFromRecipeMsg',223,1),(23303,63167,63212,'OP_CancelledFeignMsg',219,1),(23304,63167,63212,'OP_CancelMoveObjectModeMsg',166,1),(23305,63167,63212,'OP_CancelSpellCast',494,1),(23306,63167,63212,'OP_ChangeServerControlFlagMsg',250,1),(23307,63167,63212,'OP_ChangeZoneMsg',79,1),(23308,63167,63212,'OP_CharacterAchievements',776,1),(23309,63167,63212,'OP_CharacterCreatedDungeons',557,1),(23310,63167,63212,'OP_CharacterCurrency',775,1),(23311,63167,63212,'OP_CharacterHousingList',512,1),(23312,63167,63212,'OP_CharacterLinkdeadMsg',419,1),(23313,63167,63212,'OP_CharacterMerc',67,1),(23314,63167,63212,'OP_CharacterMounts',588,1),(23315,63167,63212,'OP_CharacterPet',66,1),(23316,63167,63212,'OP_CharNameChangedMsg',356,1),(23317,63167,63212,'OP_CharRenamed',741,1),(23318,63167,63212,'OP_CharTransferCommitReplyMsg',427,1),(23319,63167,63212,'OP_CharTransferCommitRequestMsg',425,1),(23320,63167,63212,'OP_CharTransferReplyMsg',423,1),(23321,63167,63212,'OP_CharTransferRequestMsg',422,1),(23322,63167,63212,'OP_CharTransferRollbackReplyMsg',426,1),(23323,63167,63212,'OP_CharTransferRollbackRequestMsg',424,1),(23324,63167,63212,'OP_CharTransferStartReplyMsg',421,1),(23325,63167,63212,'OP_CharTransferStartRequestMsg',420,1),(23326,63167,63212,'OP_CharTransferValidateReplyMsg',443,1),(23327,63167,63212,'OP_CharTransferValidateRequestMsg',442,1),(23328,63167,63212,'OP_ChatCreateChannelMsg',289,1),(23329,63167,63212,'OP_ChatFiltersMsg',338,1),(23330,63167,63212,'OP_ChatJoinChannelMsg',290,1),(23331,63167,63212,'OP_ChatLeaveChannelMsg',292,1),(23332,63167,63212,'OP_ChatRelationshipUpdateMsg',187,1),(23333,63167,63212,'OP_ChatSendFriendsMsg',299,1),(23334,63167,63212,'OP_ChatSendIgnoresMsg',300,1),(23335,63167,63212,'OP_ChatTellChannelMsg',293,1),(23336,63167,63212,'OP_ChatTellUserMsg',294,1),(23337,63167,63212,'OP_ChatToggleFriendMsg',295,1),(23338,63167,63212,'OP_ChatToggleIgnoreMsg',298,1),(23339,63167,63212,'OP_ChatWhoChannelMsg',291,1),(23340,63167,63212,'OP_ClearDataMsg',100,1),(23341,63167,63212,'OP_ClearForLandingMsg',496,1),(23342,63167,63212,'OP_ClearForTakeOffMsg',194,1),(23343,63167,63212,'OP_ClientCmdMsg',60,1),(23344,63167,63212,'OP_ClientFellMsg',389,1),(23345,63167,63212,'OP_ClientIdleBeginMsg',410,1),(23346,63167,63212,'OP_ClientIdleEndMsg',411,1),(23347,63167,63212,'OP_ClientInDeathRegionMsg',390,1),(23348,63167,63212,'OP_ClientTeleportRequestMsg',80,1),(23349,63167,63212,'OP_ClientTeleportToLocationMsg',248,1),(23350,63167,63212,'OP_CloseGroupInviteWindowMsg',401,1),(23351,63167,63212,'OP_CollectAllHouseItemsMsg',155,1),(23352,63167,63212,'OP_ConsignItemRequestMsg',129,1),(23353,63167,63212,'OP_ConsignItemResponseMsg',130,1),(23354,63167,63212,'OP_ConsignmentCloseStoreMsg',128,1),(23355,63167,63212,'OP_ConsignRemoveItemsMsg',382,1),(23356,63167,63212,'OP_ConsignViewCreateMsg',379,1),(23357,63167,63212,'OP_ConsignViewGetPageMsg',380,1),(23358,63167,63212,'OP_ConsignViewReleaseMsg',381,1),(23359,63167,63212,'OP_ConsignViewSortMsg',387,1),(23360,63167,63212,'OP_CorruptedClientMsg',414,1),(23361,63167,63212,'OP_CreateBoatTransportsMsg',254,1),(23362,63167,63212,'OP_CreateCharacterDungeon',551,1),(23363,63167,63212,'OP_CreateCharacterReplyMsg',12,1),(23364,63167,63212,'OP_CreateCharacterRequestMsg',11,1),(23365,63167,63212,'OP_CreateCharFromCBBReplyMsg',431,1),(23366,63167,63212,'OP_CreateCharFromCBBRequestMsg',430,1),(23367,63167,63212,'OP_CreateGuildReplyMsg',123,1),(23368,63167,63212,'OP_CreateGuildRequestMsg',121,1),(23369,63167,63212,'OP_CreateZoneInstanceMsg',31,1),(23370,63167,63212,'OP_CsCategoryRequestMsg',371,1),(23371,63167,63212,'OP_CsCategoryResponseMsg',372,1),(23372,63167,63212,'OP_CSTicketAddCommentMsg',237,1),(23373,63167,63212,'OP_CSTicketChangeNotificationMsg',239,1),(23374,63167,63212,'OP_CSTicketCommentRequestMsg',234,1),(23375,63167,63212,'OP_CSTicketCommentResponseMsg',235,1),(23376,63167,63212,'OP_CSTicketCreateMsg',236,1),(23377,63167,63212,'OP_CSTicketDeleteMsg',238,1),(23378,63167,63212,'OP_CSTicketHeaderRequestMsg',232,1),(23379,63167,63212,'OP_CSTicketInfoMsg',233,1),(23380,63167,63212,'OP_CSToolAccessResponseMsg',392,1),(23381,63167,63212,'OP_CSToolsRequestMsg',251,1),(23382,63167,63212,'OP_CSToolsResponseMsg',252,1),(23383,63167,63212,'OP_CurrentPet',490,1),(23384,63167,63212,'OP_CustomizationPurchaseRequestMs',170,1),(23385,63167,63212,'OP_CustomizationReplyMsg',172,1),(23386,63167,63212,'OP_CustomizationSetRequestMsg',171,1),(23387,63167,63212,'OP_CustomizeHouseDisplay',766,1),(23388,63167,63212,'OP_DailyObjectives',601,1),(23389,63167,63212,'OP_DefaultGroupOptionsMsg',201,1),(23390,63167,63212,'OP_DefaultGroupOptionsRequestMsg',200,1),(23391,63167,63212,'OP_DeityAbilityWindow',621,1),(23392,63167,63212,'OP_DeleteCharacterReplyMsg',19,1),(23393,63167,63212,'OP_DeleteCharacterRequestMsg',18,1),(23394,63167,63212,'OP_DeleteGuildMsg',126,1),(23395,63167,63212,'OP_DestUpdateReq',213,1),(23396,63167,63212,'OP_DialogCloseMsg',112,1),(23397,63167,63212,'OP_DialogSelectMsg',111,1),(23398,63167,63212,'OP_DispatchClientCmdMsg',62,1),(23399,63167,63212,'OP_DispatchESMsg',61,1),(23400,63167,63212,'OP_DispatchMsg',456,1),(23401,63167,63212,'OP_DispatchSpellCmdMsg',182,1),(23402,63167,63212,'OP_DisplayDebugNLLPointsMsg',258,1),(23403,63167,63212,'OP_DisplayEventMsg',457,1),(23404,63167,63212,'OP_DisplayExchangeScreenMsg',449,1),(23405,63167,63212,'OP_DisplayGroupOptionsScreenMsg',203,1),(23406,63167,63212,'OP_DisplayInnVisitScreenMsg',205,1),(23407,63167,63212,'OP_DisplayMailScreenMsg',409,1),(23408,63167,63212,'OP_DisplayTSEventReactionMsg',228,1),(23409,63167,63212,'OP_DisplayWarningMsg',269,1),(23410,63167,63212,'OP_DoneLoadingEntityResourcesMsg',38,1),(23411,63167,63212,'OP_DoneLoadingZoneResourcesMsg',36,1),(23412,63167,63212,'OP_DoneSendingInitialEntitiesMsg',37,1),(23413,63167,63212,'OP_DressingRoom',515,1),(23414,63167,63212,'OP_DumpSchedulerMsg',206,1),(23415,63167,63212,'OP_DungeonMakerEnter',552,1),(23416,63167,63212,'OP_DungeonMakerItemRequest',556,1),(23417,63167,63212,'OP_DungeonMakerItemResponse',586,1),(23418,63167,63212,'OP_DungeonMakerToolboxList',558,1),(23419,63167,63212,'OP_DungeonMakerUnknown',559,1),(23420,63167,63212,'OP_DungeonMakerUnknown1',560,1),(23421,63167,63212,'OP_DungeonPlayAsAvatarList',780,1),(23422,63167,63212,'OP_DungeonPlayAsAvatarSelected',781,1),(23423,63167,63212,'OP_EarlyLandingRequestMsg',491,1),(23424,63167,63212,'OP_EncounterBrokenMsg',267,1),(23425,63167,63212,'OP_EnterHouseMsg',157,1),(23426,63167,63212,'OP_EnterMoveObjectModeMsg',164,1),(23427,63167,63212,'OP_EntityVerbsReplyMsg',184,1),(23428,63167,63212,'OP_EntityVerbsRequestMsg',183,1),(23429,63167,63212,'OP_EntityVerbsVerbMsg',185,1),(23430,63167,63212,'OP_EqArenaResultsCmd',731,1),(23431,63167,63212,'OP_EqAvailWorldChannelsCmd',718,1),(23432,63167,63212,'OP_EqBetaCopyRequest',639,1),(23433,63167,63212,'OP_EqCannedEmoteCmd',660,1),(23434,63167,63212,'OP_EqChatChannelUpdateCmd',716,1),(23435,63167,63212,'OP_EqChoiceWinCmd',697,1),(23436,63167,63212,'OP_EqCloseWindowCmd',689,1),(23437,63167,63212,'OP_EqCollectionFilterCmd',676,1),(23438,63167,63212,'OP_EqCollectionItemCmd',677,1),(23439,63167,63212,'OP_EqCollectionUpdateCmd',675,1),(23440,63167,63212,'OP_EqConsignmentItemsCmd',721,1),(23441,63167,63212,'OP_EqCreateGhostCmd',642,1),(23442,63167,63212,'OP_EqCreateListBoxCmd',657,1),(23443,63167,63212,'OP_EqCreateSignWidgetCmd',644,1),(23444,63167,63212,'OP_EqCreateWidgetCmd',643,1),(23445,63167,63212,'OP_EqDebugPVDCmd',710,1),(23446,63167,63212,'OP_EqDestroyGhostCmd',645,1),(23447,63167,63212,'OP_EqDialogCloseCmd',673,1),(23448,63167,63212,'OP_EqDialogOpenCmd',672,1),(23449,63167,63212,'OP_EqDisplaySpellFailCmd',693,1),(23450,63167,63212,'OP_EqDisplayTextCmd',641,1),(23451,63167,63212,'OP_EqDrawablePathGraphCmd',671,1),(23452,63167,63212,'OP_EqEnableGameEventCmd',703,1),(23453,63167,63212,'OP_EqEnableWindowCmd',705,1),(23454,63167,63212,'OP_EqExamineInfoCmd',688,1),(23455,63167,63212,'OP_EqFactionUpdateCmd',674,1),(23456,63167,63212,'OP_EqFlashWindowCmd',706,1),(23457,63167,63212,'OP_EqGetProbsCmd',714,1),(23458,63167,63212,'OP_EqGroupMemberRemovedCmd',667,1),(23459,63167,63212,'OP_EqGuildBankEventActionCmd',732,1),(23460,63167,63212,'OP_EqGuildBankExamineInfoCmd',733,1),(23461,63167,63212,'OP_EqHearChainEffectCmd',668,1),(23462,63167,63212,'OP_EqHearChatCmd',640,1),(23463,63167,63212,'OP_EqHearCombatCmd',649,1),(23464,63167,63212,'OP_EqHearConsiderCmd',655,1),(23465,63167,63212,'OP_EqHearDeathCmd',666,1),(23466,63167,63212,'OP_EQHearDispellCmd',778,1),(23467,63167,63212,'OP_EqHearDrowningCmd',665,1),(23468,63167,63212,'OP_EqHearHealCmd',715,1),(23469,63167,63212,'OP_EqHearPlayFlavorCmd',708,1),(23470,63167,63212,'OP_EQHearProcCmd',651,1),(23471,63167,63212,'OP_EQHearResEffectCmd',652,1),(23472,63167,63212,'OP_EqHearSpellCastCmd',650,1),(23473,63167,63212,'OP_EqHearSpellFizzleCmd',654,1),(23474,63167,63212,'OP_EqHearSpellInterruptCmd',653,1),(23475,63167,63212,'OP_EqHearSpellNoLandCmd',734,1),(23476,63167,63212,'OP_EQHearThreatCmd',772,1),(23477,63167,63212,'OP_EqHelpPathClearCmd',686,1),(23478,63167,63212,'OP_EqHelpPathCmd',685,1),(23479,63167,63212,'OP_EqInspectPCResultsCmd',670,1),(23480,63167,63212,'OP_EqInstructionWindowCloseCmd',700,1),(23481,63167,63212,'OP_EqInstructionWindowCmd',699,1),(23482,63167,63212,'OP_EqInstructionWindowGoalCmd',701,1),(23483,63167,63212,'OP_EqInstructionWindowTaskCmd',702,1),(23484,63167,63212,'OP_EqJunctionListCmd',691,1),(23485,63167,63212,'OP_EqMapExplorationCmd',724,1),(23486,63167,63212,'OP_EqMentoring',679,1),(23487,63167,63212,'OP_EqPlaySound3DCmd',663,1),(23488,63167,63212,'OP_EqPlaySoundCmd',662,1),(23489,63167,63212,'OP_EqPlayVoiceCmd',664,1),(23490,63167,63212,'OP_EqQuestGroupCmd',681,1),(23491,63167,63212,'OP_EqQuestionnaireCmd',712,1),(23492,63167,63212,'OP_EqQuestJournalReplyCmd',680,1),(23493,63167,63212,'OP_EqQuestJournalUpdateCmd',678,1),(23494,63167,63212,'OP_EqReceiveOfferCmd',669,1),(23495,63167,63212,'OP_EqResurrectedCmd',696,1),(23496,63167,63212,'OP_EqSetControlGhostCmd',647,1),(23497,63167,63212,'OP_EqSetDebugPathPointsCmd',658,1),(23498,63167,63212,'OP_EqSetDefaultVerbCmd',698,1),(23499,63167,63212,'OP_EqSetPOVGhostCmd',648,1),(23500,63167,63212,'OP_EqShowBookCmd',711,1),(23501,63167,63212,'OP_EqShowDeathWindowCmd',692,1),(23502,63167,63212,'OP_EqShowWindowCmd',704,1),(23503,63167,63212,'OP_EqSpellCastEndCmd',695,1),(23504,63167,63212,'OP_EqSpellCastStartCmd',694,1),(23505,63167,63212,'OP_EqSpellMoveToRangeAndRetryCmd',726,1),(23506,63167,63212,'OP_EqStartBrokerCmd',723,1),(23507,63167,63212,'OP_EqStateCmd',661,1),(23508,63167,63212,'OP_EqStoreLogCmd',725,1),(23509,63167,63212,'OP_EqUpdateBankCmd',687,1),(23510,63167,63212,'OP_EqUpdateGhostCmd',646,1),(23511,63167,63212,'OP_EqUpdateLootCmd',690,1),(23512,63167,63212,'OP_EqUpdateMerchantCmd',682,1),(23513,63167,63212,'OP_EqUpdatePlayerMailCmd',727,1),(23514,63167,63212,'OP_EqUpdatePlayerTradeCmd',684,1),(23515,63167,63212,'OP_EqUpdateSignWidgetCmd',709,1),(23516,63167,63212,'OP_EqUpdateStoreCmd',683,1),(23517,63167,63212,'OP_EqUpdateSubClassesCmd',656,1),(23518,63167,63212,'OP_EqUpdateTargetCmd',719,1),(23519,63167,63212,'OP_EqWhoChannelQueryReplyCmd',717,1),(23520,63167,63212,'OP_ESInitMsg',27,1),(23521,63167,63212,'OP_ESLoginRequestMsg',3,1),(23522,63167,63212,'OP_ESReadyForClientsMsg',28,1),(23523,63167,63212,'OP_ESStatusMsg',102,1),(23524,63167,63212,'OP_ESWeatherRequestEndMsg',107,1),(23525,63167,63212,'OP_ESWeatherRequestMsg',106,1),(23526,63167,63212,'OP_ESZoneInstanceStatusMsg',103,1),(23527,63167,63212,'OP_ExamineConsignmentRequestMsg',174,1),(23528,63167,63212,'OP_ExamineConsignmentResponseMsg',175,1),(23529,63167,63212,'OP_ExamineInfoRequestMsg',259,1),(23530,63167,63212,'OP_ExamineItemRequestMsg',198,1),(23531,63167,63212,'OP_ExitHouseMsg',158,1),(23532,63167,63212,'OP_ExpectClientAsCharacterReplyMs',24,1),(23533,63167,63212,'OP_ExpectClientAsCharacterRequest',34,1),(23534,63167,63212,'OP_ExpPurchWindow',757,1),(23535,63167,63212,'OP_FellowshipExpMsg',125,1),(23536,63167,63212,'OP_FlightPathsMsg',418,1),(23537,63167,63212,'OP_GameWorldTimeMsg',45,1),(23538,63167,63212,'OP_GetAuctionAssetIDMsg',446,1),(23539,63167,63212,'OP_GetAuctionAssetIDReplyMsg',447,1),(23540,63167,63212,'OP_GetAvatarAccessRequestForCSToo',397,1),(23541,63167,63212,'OP_GetCharacterSerializedReplyMsg',429,1),(23542,63167,63212,'OP_GetCharacterSerializedRequestM',428,1),(23543,63167,63212,'OP_GroupCreatedMsg',90,1),(23544,63167,63212,'OP_GroupDestroyedMsg',91,1),(23545,63167,63212,'OP_GroupLeaderChangedMsg',95,1),(23546,63167,63212,'OP_GroupMemberAddedMsg',92,1),(23547,63167,63212,'OP_GroupMemberRemovedMsg',93,1),(23548,63167,63212,'OP_GroupOptionsMsg',202,1),(23549,63167,63212,'OP_GroupRemovedFromGroupMsg',94,1),(23550,63167,63212,'OP_GroupResendOOZDataMsg',96,1),(23551,63167,63212,'OP_GroupSettingsChangedMsg',97,1),(23552,63167,63212,'OP_GuildBankActionMsg',278,1),(23553,63167,63212,'OP_GuildBankActionResponseMsg',279,1),(23554,63167,63212,'OP_GuildBankEventListMsg',283,1),(23555,63167,63212,'OP_GuildBankItemDetailsRequestMsg',280,1),(23556,63167,63212,'OP_GuildBankItemDetailsResponseMs',281,1),(23557,63167,63212,'OP_GuildBankUpdateMsg',282,1),(23558,63167,63212,'OP_GuildEventActionMsg',273,1),(23559,63167,63212,'OP_GuildEventAddMsg',272,1),(23560,63167,63212,'OP_GuildEventDetailsMsg',276,1),(23561,63167,63212,'OP_GuildEventListMsg',274,1),(23562,63167,63212,'OP_GuildEventMsg',271,1),(23563,63167,63212,'OP_GuildMembershipResponseMsg',361,1),(23564,63167,63212,'OP_GuildRecruiting',737,1),(23565,63167,63212,'OP_GuildRecruitingDetails',738,1),(23566,63167,63212,'OP_GuildRecruitingImage',739,1),(23567,63167,63212,'OP_GuildRecruitingMemberInfo',736,1),(23568,63167,63212,'OP_GuildsayMsg',124,1),(23569,63167,63212,'OP_GuildStatusUpdate',730,1),(23570,63167,63212,'OP_GuildUpdateMsg',127,1),(23571,63167,63212,'OP_HeritageMsg',10023,1),(23572,63167,63212,'OP_HideIllusionsMsg',197,1),(23573,63167,63212,'OP_HouseAccessRemoveMsg',161,1),(23574,63167,63212,'OP_HouseAccessSetMsg',160,1),(23575,63167,63212,'OP_HouseCustomizationScreenMsg',169,1),(23576,63167,63212,'OP_HouseDefaultAccessSetMsg',159,1),(23577,63167,63212,'OP_HouseDeletedRemotelyMsg',145,1),(23578,63167,63212,'OP_HouseItemsList',489,1),(23579,63167,63212,'OP_HousingDataChangedMsg',432,1),(23580,63167,63212,'OP_HousingRestoreMsg',433,1),(23581,63167,63212,'OP_InspectPlayerMsg',367,1),(23582,63167,63212,'OP_InspectPlayerRequestMsg',455,1),(23583,63167,63212,'OP_InviteRequestMsg',452,1),(23584,63167,63212,'OP_InviteResponseMsg',453,1),(23585,63167,63212,'OP_InviteTargetResponseMsg',454,1),(23586,63167,63212,'OP_JoinGuildNotifyMsg',363,1),(23587,63167,63212,'OP_JournalQuestStoryline',779,1),(23588,63167,63212,'OP_KeymapDataMsg',180,1),(23589,63167,63212,'OP_KeymapLoadMsg',178,1),(23590,63167,63212,'OP_KeymapNoneMsg',179,1),(23591,63167,63212,'OP_KeymapSaveMsg',181,1),(23592,63167,63212,'OP_KnowledgebaseRequestMsg',230,1),(23593,63167,63212,'OP_KnowledgebaseResponseMsg',231,1),(23594,63167,63212,'OP_KnowledgeWindowSlotMappingMsg',373,1),(23595,63167,63212,'OP_KnownLanguagesMsg',242,1),(23596,63167,63212,'OP_Launchpad',579,1),(23597,63167,63212,'OP_LeaveGuildNotifyMsg',362,1),(23598,63167,63212,'OP_LevelChangedMsg',265,1),(23599,63167,63212,'OP_LFGGroupSearch',509,1),(23600,63167,63212,'OP_LFGUpdateMsg',522,1),(23601,63167,63212,'OP_LikeOption',139,1),(23602,63167,63212,'OP_LoadCalendarEvents',582,1),(23603,63167,63212,'OP_LoadWelcomeWindow',566,1),(23604,63167,63212,'OP_LoginByNumRequestMsg',1,1),(23605,63167,63212,'OP_LoginReplyMsg',4,1),(23606,63167,63212,'OP_LoginRequestMsg',0,1),(23607,63167,63212,'OP_LootItemsRequestMsg',188,1),(23608,63167,63212,'OP_Lottery',735,1),(23609,63167,63212,'OP_LSCheckAcctLockMsg',207,1),(23610,63167,63212,'OP_LsClientAlertlogReplyMsg',246,1),(23611,63167,63212,'OP_LsClientBaselogReplyMsg',244,1),(23612,63167,63212,'OP_LsClientCrashlogReplyMsg',245,1),(23613,63167,63212,'OP_LsClientVerifylogReplyMsg',247,1),(23614,63167,63212,'OP_LsRequestClientCrashLogMsg',243,1),(23615,63167,63212,'OP_LSServerLockMsg',369,1),(23616,63167,63212,'OP_MacroInitMsg',262,1),(23617,63167,63212,'OP_MacroUpdateMsg',263,1),(23618,63167,63212,'OP_MailCommitSendMessageMsg',348,1),(23619,63167,63212,'OP_MailDeleteMessageMsg',344,1),(23620,63167,63212,'OP_MailEventNotificationMsg',416,1),(23621,63167,63212,'OP_MailGetHeadersReplyMsg',345,1),(23622,63167,63212,'OP_MailGetMessageMsg',342,1),(23623,63167,63212,'OP_MailGetMessageReplyMsg',346,1),(23624,63167,63212,'OP_MailRemoveAttachFromMailMsg',350,1),(23625,63167,63212,'OP_MailSendMessageMsg',343,1),(23626,63167,63212,'OP_MailSendMessageReplyMsg',347,1),(23627,63167,63212,'OP_MailSendSystemMessageMsg',349,1),(23628,63167,63212,'OP_MakeGroupLeaderMsg',89,1),(23629,63167,63212,'OP_MapFogDataInitMsg',399,1),(23630,63167,63212,'OP_MapFogDataUpdateMsg',400,1),(23631,63167,63212,'OP_MapRequest',525,1),(23632,63167,63212,'OP_MarketAddFundsReply',533,1),(23633,63167,63212,'OP_MarketAddFundsRequest',532,1),(23634,63167,63212,'OP_MarketFundsUpdate',530,1),(23635,63167,63212,'OP_MarketPlaceItems',543,1),(23636,63167,63212,'OP_MarketPlacePrices',536,1),(23637,63167,63212,'OP_MarketPurchase',535,1),(23638,63167,63212,'OP_MentorPopup',564,1),(23639,63167,63212,'OP_MercHireWindow',783,1),(23640,63167,63212,'OP_MercUnknown',784,1),(23641,63167,63212,'OP_MigrateBoatTransportMsg',256,1),(23642,63167,63212,'OP_MigrateBoatTransportReplyMsg',257,1),(23643,63167,63212,'OP_MigrateClientToZoneReplyMsg',84,1),(23644,63167,63212,'OP_MigrateClientToZoneRequestMsg',83,1),(23645,63167,63212,'OP_ModifyGuildMsg',270,1),(23646,63167,63212,'OP_MonitorCharacterListMsg',58,1),(23647,63167,63212,'OP_MonitorCharacterListRequestMsg',59,1),(23648,63167,63212,'OP_MonitorReplyMsg',57,1),(23649,63167,63212,'OP_MOTDMsg',46,1),(23650,63167,63212,'OP_MoveableObjectPlacementCriteri',163,1),(23651,63167,63212,'OP_MoveLogUpdateMsg',405,1),(23652,63167,63212,'OP_NotifyApprenticeStoppedMentori',413,1),(23653,63167,63212,'OP_OfferQuestMsg',406,1),(23654,63167,63212,'OP_OnscreenMsgMsg',268,1),(23655,63167,63212,'OP_OpenCharCust',568,1),(23656,63167,63212,'OP_OutOfZoneMemberDataMsg',98,1),(23657,63167,63212,'OP_PaperdollImage',581,1),(23658,63167,63212,'OP_PayHouseUpkeepMsg',162,1),(23659,63167,63212,'OP_PerformCameraShakeMsg',217,1),(23660,63167,63212,'OP_PerformPlayerKnockbackMsg',216,1),(23661,63167,63212,'OP_PetOptions',204,1),(23662,63167,63212,'OP_PetOptionsResponse',585,1),(23663,63167,63212,'OP_PlayCharacterReplyMsg',21,1),(23664,63167,63212,'OP_PlayCharacterRequestMsg',20,1),(23665,63167,63212,'OP_PlayerHouseAccessUpdateMsg',150,1),(23666,63167,63212,'OP_PlayerHouseBaseScreenMsg',148,1),(23667,63167,63212,'OP_PlayerHouseCloseUIMsg',152,1),(23668,63167,63212,'OP_PlayerHouseDisplayStatusMsg',151,1),(23669,63167,63212,'OP_PlayerHousePurchaseScreenMsg',149,1),(23670,63167,63212,'OP_PlayerMadeInstances',143,1),(23671,63167,63212,'OP_PlayerMadeInstancesScreen',142,1),(23672,63167,63212,'OP_PlayerPollAnswer',563,1),(23673,63167,63212,'OP_PlayerPollPopup',562,1),(23674,63167,63212,'OP_PlayLon',516,1),(23675,63167,63212,'OP_PointOfInterest',761,1),(23676,63167,63212,'OP_PointOfInterest2',762,1),(23677,63167,63212,'OP_PopulateSkillMapsMsg',218,1),(23678,63167,63212,'OP_PositionBoatTransportMsg',255,1),(23679,63167,63212,'OP_PositionMoveableObject',165,1),(23680,63167,63212,'OP_PostPossessionMsg',459,1),(23681,63167,63212,'OP_PredictionUpdateMsg',39,1),(23682,63167,63212,'OP_PrePossessionMsg',458,1),(23683,63167,63212,'OP_PromoFlagsDetailsMsg',378,1),(23684,63167,63212,'OP_PublishHouse',141,1),(23685,63167,63212,'OP_PurchaseConsignmentLoreCheckRe',412,1),(23686,63167,63212,'OP_PurchaseConsignmentRequestMsg',131,1),(23687,63167,63212,'OP_QueAllBgSolo',571,1),(23688,63167,63212,'OP_QuestionnaireMsg',264,1),(23689,63167,63212,'OP_QuestJournalInspectMsg',116,1),(23690,63167,63212,'OP_QuestJournalOpenMsg',115,1),(23691,63167,63212,'OP_QuestJournalSetVisibleMsg',117,1),(23692,63167,63212,'OP_QuestJournalWaypointMsg',118,1),(23693,63167,63212,'OP_QuestReward',324,1),(23694,63167,63212,'OP_QuickbarInitMsg',260,1),(23695,63167,63212,'OP_QuickbarUpdateMsg',261,1),(23696,63167,63212,'OP_RaceRestrictionMsg',444,1),(23697,63167,63212,'OP_ReadBookPageMsg',199,1),(23698,63167,63212,'OP_ReadyForTakeOffMsg',195,1),(23699,63167,63212,'OP_ReadyToZoneMsg',86,1),(23700,63167,63212,'OP_RecipeBook',544,1),(23701,63167,63212,'OP_RecipeDetailsMsg',74,1),(23702,63167,63212,'OP_RecipeList',773,1),(23703,63167,63212,'OP_RecipeListUnknown',597,1),(23704,63167,63212,'OP_RelinquishHouseMsg',156,1),(23705,63167,63212,'OP_ReloadLocalizedTxtMsg',359,1),(23706,63167,63212,'OP_RemoteCmdMsg',44,1),(23707,63167,63212,'OP_RemoveClientFromGroupMsg',87,1),(23708,63167,63212,'OP_RemoveConcentrationMsg',114,1),(23709,63167,63212,'OP_RemoveGroupFromGroupMsg',88,1),(23710,63167,63212,'OP_RemoveSpellEffectMsg',113,1),(23711,63167,63212,'OP_RenameGuildMsg',286,1),(23712,63167,63212,'OP_ReplaceableSubMeshesMsg',168,1),(23713,63167,63212,'OP_ReportMsg',384,1),(23714,63167,63212,'OP_RequestCampMsg',52,1),(23715,63167,63212,'OP_RequestGuildBankEventDetailsMs',284,1),(23716,63167,63212,'OP_RequestGuildEventDetailsMsg',275,1),(23717,63167,63212,'OP_RequestGuildInfoMsg',277,1),(23718,63167,63212,'OP_RequestGuildMembershipMsg',360,1),(23719,63167,63212,'OP_RequestHelpRepathMsg',209,1),(23720,63167,63212,'OP_RequestRecipeDetailsMsg',73,1),(23721,63167,63212,'OP_RequestTargetLocMsg',210,1),(23722,63167,63212,'OP_Research',774,1),(23723,63167,63212,'OP_ResendWorldChannelsMsg',448,1),(23724,63167,63212,'OP_ReskinCharacterRequestMsg',15,1),(23725,63167,63212,'OP_RestartZoneMsg',417,1),(23726,63167,63212,'OP_RewardPackMsg',285,1),(23727,63167,63212,'OP_SatMsg',192,1),(23728,63167,63212,'OP_SavageBarInitMsg',584,1),(23729,63167,63212,'OP_SelectZoneTeleporterDestinatio',358,1),(23730,63167,63212,'OP_SendLatestRequestMsg',99,1),(23731,63167,63212,'OP_ServerPlayCharacterReplyMsg',26,1),(23732,63167,63212,'OP_ServerPlayCharacterRequestMsg',25,1),(23733,63167,63212,'OP_SetInstanceDisplayNameMsg',445,1),(23734,63167,63212,'OP_SetRemoteCmdsMsg',43,1),(23735,63167,63212,'OP_SetSocialMsg',101,1),(23736,63167,63212,'OP_ShaderCustomizationMsg',167,1),(23737,63167,63212,'OP_ShowCreateFromRecipeUIMsg',222,1),(23738,63167,63212,'OP_ShowIllusionsMsg',196,1),(23739,63167,63212,'OP_ShowItemCreationProcessUIMsg',226,1),(23740,63167,63212,'OP_ShowRecipeBookMsg',229,1),(23741,63167,63212,'OP_ShowZoneTeleporterDestinations',357,1),(23742,63167,63212,'OP_SitMsg',190,1),(23743,63167,63212,'OP_SkillInfoRequest',518,1),(23744,63167,63212,'OP_SkillInfoResponse',519,1),(23745,63167,63212,'OP_SOEAllAccess',640,1),(23746,63167,63212,'OP_SpellGainedMsg',266,1),(23747,63167,63212,'OP_StandMsg',191,1),(23748,63167,63212,'OP_StoodMsg',193,1),(23749,63167,63212,'OP_StopItemCreationMsg',225,1),(23750,63167,63212,'OP_StoppedLootingMsg',189,1),(23751,63167,63212,'OP_StopTrackingMsg',395,1),(23752,63167,63212,'OP_SubmitCharCust',569,1),(23753,63167,63212,'OP_SupplyDepot',771,1),(23754,63167,63212,'OP_SysClient',221,1),(23755,63167,63212,'OP_TeleportWithinZoneMsg',81,1),(23756,63167,63212,'OP_TeleportWithinZoneNoReloadMsg',82,1),(23757,63167,63212,'OP_TintWidgetsMsg',173,1),(23758,63167,63212,'OP_TitleUpdateMsg',388,1),(23759,63167,63212,'OP_TrackingUpdateMsg',393,1),(23760,63167,63212,'OP_TradeskillList',740,1),(23761,63167,63212,'OP_TraitsList',763,1),(23762,63167,63212,'OP_UIEvent',531,1),(23763,63167,63212,'OP_UIResetMsg',177,1),(23764,63167,63212,'OP_UISettingsResponseMsg',176,1),(23765,63167,63212,'OP_Unknown',797,1),(23766,63167,63212,'OP_UnknownNpcMsg',377,1),(23767,63167,63212,'OP_UpdateActivePublicZonesMsg',376,1),(23768,63167,63212,'OP_UpdateCharacterSheetMsg',65,1),(23769,63167,63212,'OP_UpdateClientPredFlagsMsg',249,1),(23770,63167,63212,'OP_UpdateDebugRadiiMsg',383,1),(23771,63167,63212,'OP_UpdateGroupMemberDataMsg',392,1),(23772,63167,63212,'OP_UpdateHouseAccessDataMsg',147,1),(23773,63167,63212,'OP_UpdateHouseDataMsg',146,1),(23774,63167,63212,'OP_UpdateInventoryMsg',70,1),(23775,63167,63212,'OP_UpdateItemCreationProcessUIMsg',227,1),(23776,63167,63212,'OP_UpdateMotdMsg',211,1),(23777,63167,63212,'OP_UpdateOpportunityMsg',77,1),(23778,63167,63212,'OP_UpdatePositionMsg',41,1),(23779,63167,63212,'OP_UpdateRaidMsg',385,1),(23780,63167,63212,'OP_UpdateRecipeBookMsg',72,1),(23781,63167,63212,'OP_UpdateSkillBookMsg',75,1),(23782,63167,63212,'OP_UpdateSkillsMsg',76,1),(23783,63167,63212,'OP_UpdateSpellBookMsg',68,1),(23784,63167,63212,'OP_UpdateTargetLocMsg',64,1),(23785,63167,63212,'OP_UpdateTargetMsg',63,1),(23786,63167,63212,'OP_UpdateTitleCmd',499,1),(23787,63167,63212,'OP_UseAdornment',751,1),(23788,63167,63212,'OP_VideoUploaded',583,1),(23789,63167,63212,'OP_VoiceChatChannel',524,1),(23790,63167,63212,'OP_VoiceChatServer',767,1),(23791,63167,63212,'OP_WaypointReplyMsg',353,1),(23792,63167,63212,'OP_WaypointRequestMsg',352,1),(23793,63167,63212,'OP_WaypointSelectMsg',354,1),(23794,63167,63212,'OP_WaypointUpdateMsg',355,1),(23795,63167,63212,'OP_Weakness',587,1),(23796,63167,63212,'OP_WhoQueryReplyMsg',56,1),(23797,63167,63212,'OP_WhoQueryRequestMsg',55,1),(23798,63167,63212,'OP_WorldDataChangeMsg',415,1),(23799,63167,63212,'OP_WorldDataUpdateMsg',240,1),(23800,63167,63212,'OP_WorldListMsg',8,1),(23801,63167,63212,'OP_WorldPingMsg',404,1),(23802,63167,63212,'OP_WorldShutdownUpdateMsg',408,1),(23803,63167,63212,'OP_WorldStatusChangeMsg',6,1),(23804,63167,63212,'OP_WorldTravelAvail',576,1),(23805,63167,63212,'OP_WSAcctLockStatusMsg',208,1),(23806,63167,63212,'OP_WSCreateCharacterReplyMsg',14,1),(23807,63167,63212,'OP_WSCreateCharacterRequestMsg',13,1),(23808,63167,63212,'OP_WSLoginRequestMsg',2,1),(23809,63167,63212,'OP_WSServerHideMsg',370,1),(23810,63167,63212,'OP_WSServerLockMsg',368,1),(23811,63167,63212,'OP_WSStatusReplyMsg',5,1),(23812,63167,63212,'OP_ZoneBgInstanceList',572,1),(23813,63167,63212,'OP_ZoneInfoMsg',35,1),(23814,63167,63212,'OP_ZoneInstanceCreateReplyMsg',32,1),(23815,63167,63212,'OP_ZoneInstanceDestroyedMsg',33,1),(23816,63167,63212,'OP_ZoneMOTDMsg',47,1),(23817,63167,63212,'OP_ZonesStatusMsg',105,1),(23818,63167,63212,'OP_ZonesStatusRequestMsg',104,1),(23819,63167,63212,'OP_ZoneToFriendReplyMsg',288,1),(23820,63167,63212,'OP_ZoneToFriendRequestMsg',287,1),(24284,1096,1096,'OP_SubmitCharCust',530,1),(24285,1096,1096,'OP_MentorPopup',526,1),(24286,63213,64644,'OP_AchievementUpdateMsg',778,1),(24287,63213,64644,'OP_AddSocialStructureStandingMsg',253,1),(24288,63213,64644,'OP_AdvancementRequestMsg',398,1),(24289,63213,64644,'OP_AdventureList',494,1),(24290,63213,64644,'OP_AFKUpdateMsg',374,1),(24291,63213,64644,'OP_AfterInvSpellUpdate',71,1),(24292,63213,64644,'OP_AllCharactersDescReplyMsg',10,1),(24293,63213,64644,'OP_AllCharactersDescRequestMsg',9,1),(24294,63213,64644,'OP_AllWSDescRequestMsg',7,1),(24295,63213,64644,'OP_AnonUpdateMsg',375,1),(24296,63213,64644,'OP_ArenaCreate',461,1),(24297,63213,64644,'OP_ArenaGameTypesMsg',450,1),(24298,63213,64644,'OP_ArenaList',462,1),(24299,63213,64644,'OP_ArenaWindow',470,1),(24300,63213,64644,'OP_AttackAllowed',506,1),(24301,63213,64644,'OP_AttackNotAllowed',507,1),(24302,63213,64644,'OP_AuctionAbortMsg',441,1),(24303,63213,64644,'OP_AuctionCharacter',438,1),(24304,63213,64644,'OP_AuctionCharacterReply',439,1),(24305,63213,64644,'OP_AuctionCoin',436,1),(24306,63213,64644,'OP_AuctionCoinReply',437,1),(24307,63213,64644,'OP_AuctionCommitMsg',440,1),(24308,63213,64644,'OP_AuctionItem',434,1),(24309,63213,64644,'OP_AuctionItemReply',435,1),(24310,63213,64644,'OP_AuditAuctionEventMsg',451,1),(24311,63213,64644,'OP_AvatarCreatedMsg',48,1),(24312,63213,64644,'OP_AvatarDestroyedMsg',49,1),(24313,63213,64644,'OP_AvatarUpdateMsg',364,1),(24314,63213,64644,'OP_BadLanguageFilter',524,1),(24315,63213,64644,'OP_BagOptions',508,1),(24316,63213,64644,'OP_BeginItemCreationMsg',224,1),(24317,63213,64644,'OP_BeginTrackingMsg',394,1),(24318,63213,64644,'OP_BioUpdateMsg',366,1),(24319,63213,64644,'OP_BrokerAddBag',296,1),(24320,63213,64644,'OP_BrokerRemoveBag',297,1),(24321,63213,64644,'OP_BrokerSellList',721,1),(24322,63213,64644,'OP_BuyPlayerHouseMsg',153,1),(24323,63213,64644,'OP_BuyPlayerHouseTintMsg',154,1),(24324,63213,64644,'OP_CampAbortedMsg',54,1),(24325,63213,64644,'OP_CampClientMsg',391,1),(24326,63213,64644,'OP_CampStartedMsg',53,1),(24327,63213,64644,'OP_CancelCreateFromRecipeMsg',223,1),(24328,63213,64644,'OP_CancelledFeignMsg',219,1),(24329,63213,64644,'OP_CancelMoveObjectModeMsg',166,1),(24330,63213,64644,'OP_CancelSpellCast',495,1),(24331,63213,64644,'OP_ChangeServerControlFlagMsg',250,1),(24332,63213,64644,'OP_ChangeZoneMsg',79,1),(24333,63213,64644,'OP_CharacterAchievements',777,1),(24334,63213,64644,'OP_CharacterCreatedDungeons',558,1),(24335,63213,64644,'OP_CharacterCurrency',776,1),(24336,63213,64644,'OP_CharacterHousingList',513,1),(24337,63213,64644,'OP_CharacterLinkdeadMsg',419,1),(24338,63213,64644,'OP_CharacterMerc',67,1),(24339,63213,64644,'OP_CharacterMounts',589,1),(24340,63213,64644,'OP_CharacterPet',66,1),(24341,63213,64644,'OP_CharNameChangedMsg',356,1),(24342,63213,64644,'OP_CharRenamed',742,1),(24343,63213,64644,'OP_CharTransferCommitReplyMsg',427,1),(24344,63213,64644,'OP_CharTransferCommitRequestMsg',425,1),(24345,63213,64644,'OP_CharTransferReplyMsg',423,1),(24346,63213,64644,'OP_CharTransferRequestMsg',422,1),(24347,63213,64644,'OP_CharTransferRollbackReplyMsg',426,1),(24348,63213,64644,'OP_CharTransferRollbackRequestMsg',424,1),(24349,63213,64644,'OP_CharTransferStartReplyMsg',421,1),(24350,63213,64644,'OP_CharTransferStartRequestMsg',420,1),(24351,63213,64644,'OP_CharTransferValidateReplyMsg',443,1),(24352,63213,64644,'OP_CharTransferValidateRequestMsg',442,1),(24353,63213,64644,'OP_ChatCreateChannelMsg',289,1),(24354,63213,64644,'OP_ChatFiltersMsg',338,1),(24355,63213,64644,'OP_ChatJoinChannelMsg',290,1),(24356,63213,64644,'OP_ChatLeaveChannelMsg',292,1),(24357,63213,64644,'OP_ChatRelationshipUpdateMsg',187,1),(24358,63213,64644,'OP_ChatSendFriendsMsg',299,1),(24359,63213,64644,'OP_ChatSendIgnoresMsg',300,1),(24360,63213,64644,'OP_ChatTellChannelMsg',293,1),(24361,63213,64644,'OP_ChatTellUserMsg',294,1),(24362,63213,64644,'OP_ChatToggleFriendMsg',295,1),(24363,63213,64644,'OP_ChatToggleIgnoreMsg',298,1),(24364,63213,64644,'OP_ChatWhoChannelMsg',291,1),(24365,63213,64644,'OP_ClearDataMsg',100,1),(24366,63213,64644,'OP_ClearForLandingMsg',497,1),(24367,63213,64644,'OP_ClearForTakeOffMsg',194,1),(24368,63213,64644,'OP_ClientCmdMsg',60,1),(24369,63213,64644,'OP_ClientFellMsg',389,1),(24370,63213,64644,'OP_ClientIdleBeginMsg',410,1),(24371,63213,64644,'OP_ClientIdleEndMsg',411,1),(24372,63213,64644,'OP_ClientInDeathRegionMsg',390,1),(24373,63213,64644,'OP_ClientTeleportRequestMsg',80,1),(24374,63213,64644,'OP_ClientTeleportToLocationMsg',248,1),(24375,63213,64644,'OP_CloseGroupInviteWindowMsg',401,1),(24376,63213,64644,'OP_CollectAllHouseItemsMsg',155,1),(24377,63213,64644,'OP_ConsignItemRequestMsg',129,1),(24378,63213,64644,'OP_ConsignItemResponseMsg',130,1),(24379,63213,64644,'OP_ConsignmentCloseStoreMsg',128,1),(24380,63213,64644,'OP_ConsignRemoveItemsMsg',382,1),(24381,63213,64644,'OP_ConsignViewCreateMsg',379,1),(24382,63213,64644,'OP_ConsignViewGetPageMsg',380,1),(24383,63213,64644,'OP_ConsignViewReleaseMsg',381,1),(24384,63213,64644,'OP_ConsignViewSortMsg',387,1),(24385,63213,64644,'OP_CorruptedClientMsg',414,1),(24386,63213,64644,'OP_CreateBoatTransportsMsg',254,1),(24387,63213,64644,'OP_CreateCharacterDungeon',552,1),(24388,63213,64644,'OP_CreateCharacterReplyMsg',12,1),(24389,63213,64644,'OP_CreateCharacterRequestMsg',11,1),(24390,63213,64644,'OP_CreateCharFromCBBReplyMsg',431,1),(24391,63213,64644,'OP_CreateCharFromCBBRequestMsg',430,1),(24392,63213,64644,'OP_CreateGuildReplyMsg',123,1),(24393,63213,64644,'OP_CreateGuildRequestMsg',121,1),(24394,63213,64644,'OP_CreateZoneInstanceMsg',31,1),(24395,63213,64644,'OP_CsCategoryRequestMsg',371,1),(24396,63213,64644,'OP_CsCategoryResponseMsg',372,1),(24397,63213,64644,'OP_CSTicketAddCommentMsg',237,1),(24398,63213,64644,'OP_CSTicketChangeNotificationMsg',239,1),(24399,63213,64644,'OP_CSTicketCommentRequestMsg',234,1),(24400,63213,64644,'OP_CSTicketCommentResponseMsg',235,1),(24401,63213,64644,'OP_CSTicketCreateMsg',236,1),(24402,63213,64644,'OP_CSTicketDeleteMsg',238,1),(24403,63213,64644,'OP_CSTicketHeaderRequestMsg',232,1),(24404,63213,64644,'OP_CSTicketInfoMsg',233,1),(24405,63213,64644,'OP_CSToolAccessResponseMsg',392,1),(24406,63213,64644,'OP_CSToolsRequestMsg',251,1),(24407,63213,64644,'OP_CSToolsResponseMsg',252,1),(24408,63213,64644,'OP_CurrentPet',490,1),(24409,63213,64644,'OP_CustomizationPurchaseRequestMs',170,1),(24410,63213,64644,'OP_CustomizationReplyMsg',172,1),(24411,63213,64644,'OP_CustomizationSetRequestMsg',171,1),(24412,63213,64644,'OP_CustomizeHouseDisplay',767,1),(24413,63213,64644,'OP_DailyObjectives',602,1),(24414,63213,64644,'OP_DefaultGroupOptionsMsg',201,1),(24415,63213,64644,'OP_DefaultGroupOptionsRequestMsg',200,1),(24416,63213,64644,'OP_DeityAbilityWindow',622,1),(24417,63213,64644,'OP_DeleteCharacterReplyMsg',19,1),(24418,63213,64644,'OP_DeleteCharacterRequestMsg',18,1),(24419,63213,64644,'OP_DeleteGuildMsg',126,1),(24420,63213,64644,'OP_DestUpdateReq',213,1),(24421,63213,64644,'OP_DialogCloseMsg',112,1),(24422,63213,64644,'OP_DialogSelectMsg',111,1),(24423,63213,64644,'OP_DispatchClientCmdMsg',62,1),(24424,63213,64644,'OP_DispatchESMsg',61,1),(24425,63213,64644,'OP_DispatchMsg',456,1),(24426,63213,64644,'OP_DispatchSpellCmdMsg',182,1),(24427,63213,64644,'OP_DisplayDebugNLLPointsMsg',258,1),(24428,63213,64644,'OP_DisplayEventMsg',457,1),(24429,63213,64644,'OP_DisplayExchangeScreenMsg',449,1),(24430,63213,64644,'OP_DisplayGroupOptionsScreenMsg',203,1),(24431,63213,64644,'OP_DisplayInnVisitScreenMsg',205,1),(24432,63213,64644,'OP_DisplayMailScreenMsg',409,1),(24433,63213,64644,'OP_DisplayTSEventReactionMsg',228,1),(24434,63213,64644,'OP_DisplayWarningMsg',269,1),(24435,63213,64644,'OP_DoneLoadingEntityResourcesMsg',38,1),(24436,63213,64644,'OP_DoneLoadingZoneResourcesMsg',36,1),(24437,63213,64644,'OP_DoneSendingInitialEntitiesMsg',37,1),(24438,63213,64644,'OP_DressingRoom',516,1),(24439,63213,64644,'OP_DumpSchedulerMsg',206,1),(24440,63213,64644,'OP_DungeonMakerEnter',553,1),(24441,63213,64644,'OP_DungeonMakerItemRequest',557,1),(24442,63213,64644,'OP_DungeonMakerItemResponse',587,1),(24443,63213,64644,'OP_DungeonMakerToolboxList',559,1),(24444,63213,64644,'OP_DungeonMakerUnknown',560,1),(24445,63213,64644,'OP_DungeonMakerUnknown1',561,1),(24446,63213,64644,'OP_DungeonPlayAsAvatarList',781,1),(24447,63213,64644,'OP_DungeonPlayAsAvatarSelected',782,1),(24448,63213,64644,'OP_EarlyLandingRequestMsg',491,1),(24449,63213,64644,'OP_EncounterBrokenMsg',267,1),(24450,63213,64644,'OP_EnterHouseMsg',157,1),(24451,63213,64644,'OP_EnterMoveObjectModeMsg',164,1),(24452,63213,64644,'OP_EntityVerbsReplyMsg',184,1),(24453,63213,64644,'OP_EntityVerbsRequestMsg',183,1),(24454,63213,64644,'OP_EntityVerbsVerbMsg',185,1),(24455,63213,64644,'OP_EqArenaResultsCmd',732,1),(24456,63213,64644,'OP_EqAvailWorldChannelsCmd',719,1),(24457,63213,64644,'OP_EqBetaCopyRequest',640,1),(24458,63213,64644,'OP_EqCannedEmoteCmd',661,1),(24459,63213,64644,'OP_EqChatChannelUpdateCmd',717,1),(24460,63213,64644,'OP_EqChoiceWinCmd',698,1),(24461,63213,64644,'OP_EqCloseWindowCmd',690,1),(24462,63213,64644,'OP_EqCollectionFilterCmd',677,1),(24463,63213,64644,'OP_EqCollectionItemCmd',678,1),(24464,63213,64644,'OP_EqCollectionUpdateCmd',676,1),(24465,63213,64644,'OP_EqConsignmentItemsCmd',722,1),(24466,63213,64644,'OP_EqCreateGhostCmd',643,1),(24467,63213,64644,'OP_EqCreateListBoxCmd',658,1),(24468,63213,64644,'OP_EqCreateSignWidgetCmd',645,1),(24469,63213,64644,'OP_EqCreateWidgetCmd',644,1),(24470,63213,64644,'OP_EqDebugPVDCmd',711,1),(24471,63213,64644,'OP_EqDestroyGhostCmd',646,1),(24472,63213,64644,'OP_EqDialogCloseCmd',674,1),(24473,63213,64644,'OP_EqDialogOpenCmd',673,1),(24474,63213,64644,'OP_EqDisplaySpellFailCmd',694,1),(24475,63213,64644,'OP_EqDisplayTextCmd',642,1),(24476,63213,64644,'OP_EqDrawablePathGraphCmd',672,1),(24477,63213,64644,'OP_EqEnableGameEventCmd',704,1),(24478,63213,64644,'OP_EqEnableWindowCmd',706,1),(24479,63213,64644,'OP_EqExamineInfoCmd',689,1),(24480,63213,64644,'OP_EqFactionUpdateCmd',675,1),(24481,63213,64644,'OP_EqFlashWindowCmd',707,1),(24482,63213,64644,'OP_EqGetProbsCmd',715,1),(24483,63213,64644,'OP_EqGroupMemberRemovedCmd',668,1),(24484,63213,64644,'OP_EqGuildBankEventActionCmd',733,1),(24485,63213,64644,'OP_EqGuildBankExamineInfoCmd',734,1),(24486,63213,64644,'OP_EqHearChainEffectCmd',669,1),(24487,63213,64644,'OP_EqHearChatCmd',641,1),(24488,63213,64644,'OP_EqHearCombatCmd',650,1),(24489,63213,64644,'OP_EqHearConsiderCmd',656,1),(24490,63213,64644,'OP_EqHearDeathCmd',667,1),(24491,63213,64644,'OP_EQHearDispellCmd',779,1),(24492,63213,64644,'OP_EqHearDrowningCmd',666,1),(24493,63213,64644,'OP_EqHearHealCmd',716,1),(24494,63213,64644,'OP_EqHearPlayFlavorCmd',709,1),(24495,63213,64644,'OP_EQHearProcCmd',652,1),(24496,63213,64644,'OP_EQHearResEffectCmd',653,1),(24497,63213,64644,'OP_EqHearSpellCastCmd',651,1),(24498,63213,64644,'OP_EqHearSpellFizzleCmd',655,1),(24499,63213,64644,'OP_EqHearSpellInterruptCmd',654,1),(24500,63213,64644,'OP_EqHearSpellNoLandCmd',735,1),(24501,63213,64644,'OP_EQHearThreatCmd',773,1),(24502,63213,64644,'OP_EqHelpPathClearCmd',687,1),(24503,63213,64644,'OP_EqHelpPathCmd',686,1),(24504,63213,64644,'OP_EqInspectPCResultsCmd',671,1),(24505,63213,64644,'OP_EqInstructionWindowCloseCmd',701,1),(24506,63213,64644,'OP_EqInstructionWindowCmd',700,1),(24507,63213,64644,'OP_EqInstructionWindowGoalCmd',702,1),(24508,63213,64644,'OP_EqInstructionWindowTaskCmd',703,1),(24509,63213,64644,'OP_EqJunctionListCmd',692,1),(24510,63213,64644,'OP_EqMapExplorationCmd',725,1),(24511,63213,64644,'OP_EqMentoring',680,1),(24512,63213,64644,'OP_EqPlaySound3DCmd',664,1),(24513,63213,64644,'OP_EqPlaySoundCmd',663,1),(24514,63213,64644,'OP_EqPlayVoiceCmd',665,1),(24515,63213,64644,'OP_EqQuestGroupCmd',682,1),(24516,63213,64644,'OP_EqQuestionnaireCmd',713,1),(24517,63213,64644,'OP_EqQuestJournalReplyCmd',681,1),(24518,63213,64644,'OP_EqQuestJournalUpdateCmd',679,1),(24519,63213,64644,'OP_EqReceiveOfferCmd',670,1),(24520,63213,64644,'OP_EqResurrectedCmd',697,1),(24521,63213,64644,'OP_EqSetControlGhostCmd',648,1),(24522,63213,64644,'OP_EqSetDebugPathPointsCmd',659,1),(24523,63213,64644,'OP_EqSetDefaultVerbCmd',699,1),(24524,63213,64644,'OP_EqSetPOVGhostCmd',649,1),(24525,63213,64644,'OP_EqShowBookCmd',712,1),(24526,63213,64644,'OP_EqShowDeathWindowCmd',693,1),(24527,63213,64644,'OP_EqShowWindowCmd',705,1),(24528,63213,64644,'OP_EqSpellCastEndCmd',696,1),(24529,63213,64644,'OP_EqSpellCastStartCmd',695,1),(24530,63213,64644,'OP_EqSpellMoveToRangeAndRetryCmd',727,1),(24531,63213,64644,'OP_EqStartBrokerCmd',724,1),(24532,63213,64644,'OP_EqStateCmd',662,1),(24533,63213,64644,'OP_EqStoreLogCmd',726,1),(24534,63213,64644,'OP_EqUpdateBankCmd',688,1),(24535,63213,64644,'OP_EqUpdateGhostCmd',647,1),(24536,63213,64644,'OP_EqUpdateLootCmd',691,1),(24537,63213,64644,'OP_EqUpdateMerchantCmd',683,1),(24538,63213,64644,'OP_EqUpdatePlayerMailCmd',728,1),(24539,63213,64644,'OP_EqUpdatePlayerTradeCmd',685,1),(24540,63213,64644,'OP_EqUpdateSignWidgetCmd',710,1),(24541,63213,64644,'OP_EqUpdateStoreCmd',684,1),(24542,63213,64644,'OP_EqUpdateSubClassesCmd',657,1),(24543,63213,64644,'OP_EqUpdateTargetCmd',720,1),(24544,63213,64644,'OP_EqWhoChannelQueryReplyCmd',718,1),(24545,63213,64644,'OP_ESInitMsg',27,1),(24546,63213,64644,'OP_ESLoginRequestMsg',3,1),(24547,63213,64644,'OP_ESReadyForClientsMsg',28,1),(24548,63213,64644,'OP_ESStatusMsg',102,1),(24549,63213,64644,'OP_ESWeatherRequestEndMsg',107,1),(24550,63213,64644,'OP_ESWeatherRequestMsg',106,1),(24551,63213,64644,'OP_ESZoneInstanceStatusMsg',103,1),(24552,63213,64644,'OP_ExamineConsignmentRequestMsg',174,1),(24553,63213,64644,'OP_ExamineConsignmentResponseMsg',175,1),(24554,63213,64644,'OP_ExamineInfoRequestMsg',259,1),(24555,63213,64644,'OP_ExamineItemRequestMsg',198,1),(24556,63213,64644,'OP_ExitHouseMsg',158,1),(24557,63213,64644,'OP_ExpectClientAsCharacterReplyMs',24,1),(24558,63213,64644,'OP_ExpectClientAsCharacterRequest',34,1),(24559,63213,64644,'OP_ExpPurchWindow',758,1),(24560,63213,64644,'OP_FellowshipExpMsg',125,1),(24561,63213,64644,'OP_FlightPathsMsg',418,1),(24562,63213,64644,'OP_GameWorldTimeMsg',45,1),(24563,63213,64644,'OP_GetAuctionAssetIDMsg',446,1),(24564,63213,64644,'OP_GetAuctionAssetIDReplyMsg',447,1),(24565,63213,64644,'OP_GetAvatarAccessRequestForCSToo',397,1),(24566,63213,64644,'OP_GetCharacterSerializedReplyMsg',429,1),(24567,63213,64644,'OP_GetCharacterSerializedRequestM',428,1),(24568,63213,64644,'OP_GroupCreatedMsg',90,1),(24569,63213,64644,'OP_GroupDestroyedMsg',91,1),(24570,63213,64644,'OP_GroupLeaderChangedMsg',95,1),(24571,63213,64644,'OP_GroupMemberAddedMsg',92,1),(24572,63213,64644,'OP_GroupMemberRemovedMsg',93,1),(24573,63213,64644,'OP_GroupOptionsMsg',202,1),(24574,63213,64644,'OP_GroupRemovedFromGroupMsg',94,1),(24575,63213,64644,'OP_GroupResendOOZDataMsg',96,1),(24576,63213,64644,'OP_GroupSettingsChangedMsg',97,1),(24577,63213,64644,'OP_GuildBankActionMsg',278,1),(24578,63213,64644,'OP_GuildBankActionResponseMsg',279,1),(24579,63213,64644,'OP_GuildBankEventListMsg',283,1),(24580,63213,64644,'OP_GuildBankItemDetailsRequestMsg',280,1),(24581,63213,64644,'OP_GuildBankItemDetailsResponseMs',281,1),(24582,63213,64644,'OP_GuildBankUpdateMsg',282,1),(24583,63213,64644,'OP_GuildEventActionMsg',273,1),(24584,63213,64644,'OP_GuildEventAddMsg',272,1),(24585,63213,64644,'OP_GuildEventDetailsMsg',276,1),(24586,63213,64644,'OP_GuildEventListMsg',274,1),(24587,63213,64644,'OP_GuildEventMsg',271,1),(24588,63213,64644,'OP_GuildMembershipResponseMsg',361,1),(24589,63213,64644,'OP_GuildRecruiting',738,1),(24590,63213,64644,'OP_GuildRecruitingDetails',739,1),(24591,63213,64644,'OP_GuildRecruitingImage',740,1),(24592,63213,64644,'OP_GuildRecruitingMemberInfo',737,1),(24593,63213,64644,'OP_GuildsayMsg',124,1),(24594,63213,64644,'OP_GuildStatusUpdate',731,1),(24595,63213,64644,'OP_GuildUpdateMsg',127,1),(24596,63213,64644,'OP_HeritageMsg',10024,1),(24597,63213,64644,'OP_HideIllusionsMsg',197,1),(24598,63213,64644,'OP_HouseAccessRemoveMsg',161,1),(24599,63213,64644,'OP_HouseAccessSetMsg',160,1),(24600,63213,64644,'OP_HouseCustomizationScreenMsg',169,1),(24601,63213,64644,'OP_HouseDefaultAccessSetMsg',159,1),(24602,63213,64644,'OP_HouseDeletedRemotelyMsg',145,1),(24603,63213,64644,'OP_HouseItemsList',489,1),(24604,63213,64644,'OP_HousingDataChangedMsg',432,1),(24605,63213,64644,'OP_HousingRestoreMsg',433,1),(24606,63213,64644,'OP_InspectPlayerMsg',367,1),(24607,63213,64644,'OP_InspectPlayerRequestMsg',455,1),(24608,63213,64644,'OP_InviteRequestMsg',452,1),(24609,63213,64644,'OP_InviteResponseMsg',453,1),(24610,63213,64644,'OP_InviteTargetResponseMsg',454,1),(24611,63213,64644,'OP_JoinGuildNotifyMsg',363,1),(24612,63213,64644,'OP_JournalQuestStoryline',780,1),(24613,63213,64644,'OP_KeymapDataMsg',180,1),(24614,63213,64644,'OP_KeymapLoadMsg',178,1),(24615,63213,64644,'OP_KeymapNoneMsg',179,1),(24616,63213,64644,'OP_KeymapSaveMsg',181,1),(24617,63213,64644,'OP_KnowledgebaseRequestMsg',230,1),(24618,63213,64644,'OP_KnowledgebaseResponseMsg',231,1),(24619,63213,64644,'OP_KnowledgeWindowSlotMappingMsg',373,1),(24620,63213,64644,'OP_KnownLanguagesMsg',242,1),(24621,63213,64644,'OP_Launchpad',580,1),(24622,63213,64644,'OP_LeaveGuildNotifyMsg',362,1),(24623,63213,64644,'OP_LevelChangedMsg',265,1),(24624,63213,64644,'OP_LFGGroupSearch',510,1),(24625,63213,64644,'OP_LFGUpdateMsg',523,1),(24626,63213,64644,'OP_LikeOption',139,1),(24627,63213,64644,'OP_LoadCalendarEvents',583,1),(24628,63213,64644,'OP_LoadWelcomeWindow',567,1),(24629,63213,64644,'OP_LoginByNumRequestMsg',1,1),(24630,63213,64644,'OP_LoginReplyMsg',4,1),(24631,63213,64644,'OP_LoginRequestMsg',0,1),(24632,63213,64644,'OP_LootItemsRequestMsg',188,1),(24633,63213,64644,'OP_Lottery',736,1),(24634,63213,64644,'OP_LSCheckAcctLockMsg',207,1),(24635,63213,64644,'OP_LsClientAlertlogReplyMsg',246,1),(24636,63213,64644,'OP_LsClientBaselogReplyMsg',244,1),(24637,63213,64644,'OP_LsClientCrashlogReplyMsg',245,1),(24638,63213,64644,'OP_LsClientVerifylogReplyMsg',247,1),(24639,63213,64644,'OP_LsRequestClientCrashLogMsg',243,1),(24640,63213,64644,'OP_LSServerLockMsg',369,1),(24641,63213,64644,'OP_MacroInitMsg',262,1),(24642,63213,64644,'OP_MacroUpdateMsg',263,1),(24643,63213,64644,'OP_MailCommitSendMessageMsg',348,1),(24644,63213,64644,'OP_MailDeleteMessageMsg',344,1),(24645,63213,64644,'OP_MailEventNotificationMsg',416,1),(24646,63213,64644,'OP_MailGetHeadersReplyMsg',345,1),(24647,63213,64644,'OP_MailGetMessageMsg',342,1),(24648,63213,64644,'OP_MailGetMessageReplyMsg',346,1),(24649,63213,64644,'OP_MailRemoveAttachFromMailMsg',350,1),(24650,63213,64644,'OP_MailSendMessageMsg',343,1),(24651,63213,64644,'OP_MailSendMessageReplyMsg',347,1),(24652,63213,64644,'OP_MailSendSystemMessageMsg',349,1),(24653,63213,64644,'OP_MakeGroupLeaderMsg',89,1),(24654,63213,64644,'OP_MapFogDataInitMsg',399,1),(24655,63213,64644,'OP_MapFogDataUpdateMsg',400,1),(24656,63213,64644,'OP_MapRequest',526,1),(24657,63213,64644,'OP_MarketAddFundsReply',534,1),(24658,63213,64644,'OP_MarketAddFundsRequest',533,1),(24659,63213,64644,'OP_MarketFundsUpdate',531,1),(24660,63213,64644,'OP_MarketPlaceItems',544,1),(24661,63213,64644,'OP_MarketPlacePrices',537,1),(24662,63213,64644,'OP_MarketPurchase',536,1),(24663,63213,64644,'OP_MentorPopup',565,1),(24664,63213,64644,'OP_MercHireWindow',784,1),(24665,63213,64644,'OP_MercUnknown',785,1),(24666,63213,64644,'OP_MigrateBoatTransportMsg',256,1),(24667,63213,64644,'OP_MigrateBoatTransportReplyMsg',257,1),(24668,63213,64644,'OP_MigrateClientToZoneReplyMsg',84,1),(24669,63213,64644,'OP_MigrateClientToZoneRequestMsg',83,1),(24670,63213,64644,'OP_ModifyGuildMsg',270,1),(24671,63213,64644,'OP_MonitorCharacterListMsg',58,1),(24672,63213,64644,'OP_MonitorCharacterListRequestMsg',59,1),(24673,63213,64644,'OP_MonitorReplyMsg',57,1),(24674,63213,64644,'OP_MOTDMsg',46,1),(24675,63213,64644,'OP_MoveableObjectPlacementCriteri',163,1),(24676,63213,64644,'OP_MoveLogUpdateMsg',405,1),(24677,63213,64644,'OP_NotifyApprenticeStoppedMentori',413,1),(24678,63213,64644,'OP_OfferQuestMsg',406,1),(24679,63213,64644,'OP_OnscreenMsgMsg',268,1),(24680,63213,64644,'OP_OpenCharCust',569,1),(24681,63213,64644,'OP_OutOfZoneMemberDataMsg',98,1),(24682,63213,64644,'OP_PaperdollImage',582,1),(24683,63213,64644,'OP_PayHouseUpkeepMsg',162,1),(24684,63213,64644,'OP_PerformCameraShakeMsg',217,1),(24685,63213,64644,'OP_PerformPlayerKnockbackMsg',216,1),(24686,63213,64644,'OP_PetOptions',204,1),(24687,63213,64644,'OP_PetOptionsResponse',586,1),(24688,63213,64644,'OP_PlayCharacterReplyMsg',21,1),(24689,63213,64644,'OP_PlayCharacterRequestMsg',20,1),(24690,63213,64644,'OP_PlayerHouseAccessUpdateMsg',150,1),(24691,63213,64644,'OP_PlayerHouseBaseScreenMsg',148,1),(24692,63213,64644,'OP_PlayerHouseCloseUIMsg',152,1),(24693,63213,64644,'OP_PlayerHouseDisplayStatusMsg',151,1),(24694,63213,64644,'OP_PlayerHousePurchaseScreenMsg',149,1),(24695,63213,64644,'OP_PlayerMadeInstances',143,1),(24696,63213,64644,'OP_PlayerMadeInstancesScreen',142,1),(24697,63213,64644,'OP_PlayerPollAnswer',564,1),(24698,63213,64644,'OP_PlayerPollPopup',563,1),(24699,63213,64644,'OP_PlayLon',517,1),(24700,63213,64644,'OP_PointOfInterest',762,1),(24701,63213,64644,'OP_PointOfInterest2',763,1),(24702,63213,64644,'OP_PopulateSkillMapsMsg',218,1),(24703,63213,64644,'OP_PositionBoatTransportMsg',255,1),(24704,63213,64644,'OP_PositionMoveableObject',165,1),(24705,63213,64644,'OP_PostPossessionMsg',459,1),(24706,63213,64644,'OP_PredictionUpdateMsg',39,1),(24707,63213,64644,'OP_PrePossessionMsg',458,1),(24708,63213,64644,'OP_PromoFlagsDetailsMsg',378,1),(24709,63213,64644,'OP_PublishHouse',141,1),(24710,63213,64644,'OP_PurchaseConsignmentLoreCheckRe',412,1),(24711,63213,64644,'OP_PurchaseConsignmentRequestMsg',131,1),(24712,63213,64644,'OP_QueAllBgSolo',572,1),(24713,63213,64644,'OP_QuestionnaireMsg',264,1),(24714,63213,64644,'OP_QuestJournalInspectMsg',116,1),(24715,63213,64644,'OP_QuestJournalOpenMsg',115,1),(24716,63213,64644,'OP_QuestJournalSetVisibleMsg',117,1),(24717,63213,64644,'OP_QuestJournalWaypointMsg',118,1),(24718,63213,64644,'OP_QuestReward',324,1),(24719,63213,64644,'OP_QuickbarInitMsg',260,1),(24720,63213,64644,'OP_QuickbarUpdateMsg',261,1),(24721,63213,64644,'OP_RaceRestrictionMsg',444,1),(24722,63213,64644,'OP_ReadBookPageMsg',199,1),(24723,63213,64644,'OP_ReadyForTakeOffMsg',195,1),(24724,63213,64644,'OP_ReadyToZoneMsg',86,1),(24725,63213,64644,'OP_RecipeBook',545,1),(24726,63213,64644,'OP_RecipeDetailsMsg',74,1),(24727,63213,64644,'OP_RecipeList',774,1),(24728,63213,64644,'OP_RecipeListUnknown',598,1),(24729,63213,64644,'OP_RelinquishHouseMsg',156,1),(24730,63213,64644,'OP_ReloadLocalizedTxtMsg',359,1),(24731,63213,64644,'OP_RemoteCmdMsg',44,1),(24732,63213,64644,'OP_RemoveClientFromGroupMsg',87,1),(24733,63213,64644,'OP_RemoveConcentrationMsg',114,1),(24734,63213,64644,'OP_RemoveGroupFromGroupMsg',88,1),(24735,63213,64644,'OP_RemoveSpellEffectMsg',113,1),(24736,63213,64644,'OP_RenameGuildMsg',286,1),(24737,63213,64644,'OP_ReplaceableSubMeshesMsg',168,1),(24738,63213,64644,'OP_ReportMsg',384,1),(24739,63213,64644,'OP_RequestCampMsg',52,1),(24740,63213,64644,'OP_RequestGuildBankEventDetailsMs',284,1),(24741,63213,64644,'OP_RequestGuildEventDetailsMsg',275,1),(24742,63213,64644,'OP_RequestGuildInfoMsg',277,1),(24743,63213,64644,'OP_RequestGuildMembershipMsg',360,1),(24744,63213,64644,'OP_RequestHelpRepathMsg',209,1),(24745,63213,64644,'OP_RequestRecipeDetailsMsg',73,1),(24746,63213,64644,'OP_RequestTargetLocMsg',210,1),(24747,63213,64644,'OP_Research',775,1),(24748,63213,64644,'OP_ResendWorldChannelsMsg',448,1),(24749,63213,64644,'OP_ReskinCharacterRequestMsg',15,1),(24750,63213,64644,'OP_RestartZoneMsg',417,1),(24751,63213,64644,'OP_RewardPackMsg',285,1),(24752,63213,64644,'OP_SatMsg',192,1),(24753,63213,64644,'OP_SavageBarInitMsg',585,1),(24754,63213,64644,'OP_SelectZoneTeleporterDestinatio',358,1),(24755,63213,64644,'OP_SendLatestRequestMsg',99,1),(24756,63213,64644,'OP_ServerPlayCharacterReplyMsg',26,1),(24757,63213,64644,'OP_ServerPlayCharacterRequestMsg',25,1),(24758,63213,64644,'OP_SetInstanceDisplayNameMsg',445,1),(24759,63213,64644,'OP_SetRemoteCmdsMsg',43,1),(24760,63213,64644,'OP_SetSocialMsg',101,1),(24761,63213,64644,'OP_ShaderCustomizationMsg',167,1),(24762,63213,64644,'OP_ShowCreateFromRecipeUIMsg',222,1),(24763,63213,64644,'OP_ShowIllusionsMsg',196,1),(24764,63213,64644,'OP_ShowItemCreationProcessUIMsg',226,1),(24765,63213,64644,'OP_ShowRecipeBookMsg',229,1),(24766,63213,64644,'OP_ShowZoneTeleporterDestinations',357,1),(24767,63213,64644,'OP_SitMsg',190,1),(24768,63213,64644,'OP_SkillInfoRequest',519,1),(24769,63213,64644,'OP_SkillInfoResponse',520,1),(24770,63213,64644,'OP_SOEAllAccess',641,1),(24771,63213,64644,'OP_SpellGainedMsg',266,1),(24772,63213,64644,'OP_StandMsg',191,1),(24773,63213,64644,'OP_StoodMsg',193,1),(24774,63213,64644,'OP_StopItemCreationMsg',225,1),(24775,63213,64644,'OP_StoppedLootingMsg',189,1),(24776,63213,64644,'OP_StopTrackingMsg',395,1),(24777,63213,64644,'OP_SubmitCharCust',570,1),(24778,63213,64644,'OP_SupplyDepot',772,1),(24779,63213,64644,'OP_SysClient',221,1),(24780,63213,64644,'OP_TeleportWithinZoneMsg',81,1),(24781,63213,64644,'OP_TeleportWithinZoneNoReloadMsg',82,1),(24782,63213,64644,'OP_TintWidgetsMsg',173,1),(24783,63213,64644,'OP_TitleUpdateMsg',388,1),(24784,63213,64644,'OP_TrackingUpdateMsg',393,1),(24785,63213,64644,'OP_TradeskillList',741,1),(24786,63213,64644,'OP_TraitsList',764,1),(24787,63213,64644,'OP_UIEvent',532,1),(24788,63213,64644,'OP_UIResetMsg',177,1),(24789,63213,64644,'OP_UISettingsResponseMsg',176,1),(24790,63213,64644,'OP_Unknown',798,1),(24791,63213,64644,'OP_UnknownNpcMsg',377,1),(24792,63213,64644,'OP_UpdateActivePublicZonesMsg',376,1),(24793,63213,64644,'OP_UpdateCharacterSheetMsg',65,1),(24794,63213,64644,'OP_UpdateClientPredFlagsMsg',249,1),(24795,63213,64644,'OP_UpdateDebugRadiiMsg',383,1),(24796,63213,64644,'OP_UpdateGroupMemberDataMsg',392,1),(24797,63213,64644,'OP_UpdateHouseAccessDataMsg',147,1),(24798,63213,64644,'OP_UpdateHouseDataMsg',146,1),(24799,63213,64644,'OP_UpdateInventoryMsg',70,1),(24800,63213,64644,'OP_UpdateItemCreationProcessUIMsg',227,1),(24801,63213,64644,'OP_UpdateMotdMsg',211,1),(24802,63213,64644,'OP_UpdateOpportunityMsg',77,1),(24803,63213,64644,'OP_UpdatePositionMsg',41,1),(24804,63213,64644,'OP_UpdateRaidMsg',385,1),(24805,63213,64644,'OP_UpdateRecipeBookMsg',72,1),(24806,63213,64644,'OP_UpdateSkillBookMsg',75,1),(24807,63213,64644,'OP_UpdateSkillsMsg',76,1),(24808,63213,64644,'OP_UpdateSpellBookMsg',68,1),(24809,63213,64644,'OP_UpdateTargetLocMsg',64,1),(24810,63213,64644,'OP_UpdateTargetMsg',63,1),(24811,63213,64644,'OP_UpdateTitleCmd',500,1),(24812,63213,64644,'OP_UseAdornment',752,1),(24813,63213,64644,'OP_VideoUploaded',584,1),(24814,63213,64644,'OP_VoiceChatChannel',525,1),(24815,63213,64644,'OP_VoiceChatServer',768,1),(24816,63213,64644,'OP_WaypointReplyMsg',353,1),(24817,63213,64644,'OP_WaypointRequestMsg',352,1),(24818,63213,64644,'OP_WaypointSelectMsg',354,1),(24819,63213,64644,'OP_WaypointUpdateMsg',355,1),(24820,63213,64644,'OP_Weakness',588,1),(24821,63213,64644,'OP_WhoQueryReplyMsg',56,1),(24822,63213,64644,'OP_WhoQueryRequestMsg',55,1),(24823,63213,64644,'OP_WorldDataChangeMsg',415,1),(24824,63213,64644,'OP_WorldDataUpdateMsg',240,1),(24825,63213,64644,'OP_WorldListMsg',8,1),(24826,63213,64644,'OP_WorldPingMsg',404,1),(24827,63213,64644,'OP_WorldShutdownUpdateMsg',408,1),(24828,63213,64644,'OP_WorldStatusChangeMsg',6,1),(24829,63213,64644,'OP_WorldTravelAvail',577,1),(24830,63213,64644,'OP_WSAcctLockStatusMsg',208,1),(24831,63213,64644,'OP_WSCreateCharacterReplyMsg',14,1),(24832,63213,64644,'OP_WSCreateCharacterRequestMsg',13,1),(24833,63213,64644,'OP_WSLoginRequestMsg',2,1),(24834,63213,64644,'OP_WSServerHideMsg',370,1),(24835,63213,64644,'OP_WSServerLockMsg',368,1),(24836,63213,64644,'OP_WSStatusReplyMsg',5,1),(24837,63213,64644,'OP_ZoneBgInstanceList',573,1),(24838,63213,64644,'OP_ZoneInfoMsg',35,1),(24839,63213,64644,'OP_ZoneInstanceCreateReplyMsg',32,1),(24840,63213,64644,'OP_ZoneInstanceDestroyedMsg',33,1),(24841,63213,64644,'OP_ZoneMOTDMsg',47,1),(24842,63213,64644,'OP_ZonesStatusMsg',105,1),(24843,63213,64644,'OP_ZonesStatusRequestMsg',104,1),(24844,63213,64644,'OP_ZoneToFriendReplyMsg',288,1),(24845,63213,64644,'OP_ZoneToFriendRequestMsg',287,1),(25309,64647,64661,'OP_AchievementUpdateMsg',780,1),(25310,64647,64661,'OP_AddSocialStructureStandingMsg',253,1),(25311,64647,64661,'OP_AdvancementRequestMsg',398,1),(25312,64647,64661,'OP_AdventureList',494,1),(25313,64647,64661,'OP_AFKUpdateMsg',374,1),(25314,64647,64661,'OP_AfterInvSpellUpdate',71,1),(25315,64647,64661,'OP_AllCharactersDescReplyMsg',10,1),(25316,64647,64661,'OP_AllCharactersDescRequestMsg',9,1),(25317,64647,64661,'OP_AllWSDescRequestMsg',7,1),(25318,64647,64661,'OP_AnonUpdateMsg',375,1),(25319,64647,64661,'OP_ArenaCreate',461,1),(25320,64647,64661,'OP_ArenaGameTypesMsg',450,1),(25321,64647,64661,'OP_ArenaList',462,1),(25322,64647,64661,'OP_ArenaWindow',470,1),(25323,64647,64661,'OP_AttackAllowed',506,1),(25324,64647,64661,'OP_AttackNotAllowed',507,1),(25325,64647,64661,'OP_AuctionAbortMsg',441,1),(25326,64647,64661,'OP_AuctionCharacter',438,1),(25327,64647,64661,'OP_AuctionCharacterReply',439,1),(25328,64647,64661,'OP_AuctionCoin',436,1),(25329,64647,64661,'OP_AuctionCoinReply',437,1),(25330,64647,64661,'OP_AuctionCommitMsg',440,1),(25331,64647,64661,'OP_AuctionItem',434,1),(25332,64647,64661,'OP_AuctionItemReply',435,1),(25333,64647,64661,'OP_AuditAuctionEventMsg',451,1),(25334,64647,64661,'OP_AvatarCreatedMsg',48,1),(25335,64647,64661,'OP_AvatarDestroyedMsg',49,1),(25336,64647,64661,'OP_AvatarUpdateMsg',364,1),(25337,64647,64661,'OP_BadLanguageFilter',524,1),(25338,64647,64661,'OP_BagOptions',508,1),(25339,64647,64661,'OP_BeginItemCreationMsg',224,1),(25340,64647,64661,'OP_BeginTrackingMsg',394,1),(25341,64647,64661,'OP_BioUpdateMsg',366,1),(25342,64647,64661,'OP_BrokerAddBag',296,1),(25343,64647,64661,'OP_BrokerRemoveBag',297,1),(25344,64647,64661,'OP_BrokerSellList',723,1),(25345,64647,64661,'OP_BuyPlayerHouseMsg',153,1),(25346,64647,64661,'OP_BuyPlayerHouseTintMsg',154,1),(25347,64647,64661,'OP_CampAbortedMsg',54,1),(25348,64647,64661,'OP_CampClientMsg',391,1),(25349,64647,64661,'OP_CampStartedMsg',53,1),(25350,64647,64661,'OP_CancelCreateFromRecipeMsg',223,1),(25351,64647,64661,'OP_CancelledFeignMsg',219,1),(25352,64647,64661,'OP_CancelMoveObjectModeMsg',166,1),(25353,64647,64661,'OP_CancelSpellCast',495,1),(25354,64647,64661,'OP_ChangeServerControlFlagMsg',250,1),(25355,64647,64661,'OP_ChangeZoneMsg',79,1),(25356,64647,64661,'OP_CharacterAchievements',779,1),(25357,64647,64661,'OP_CharacterCreatedDungeons',558,1),(25358,64647,64661,'OP_CharacterCurrency',778,1),(25359,64647,64661,'OP_CharacterHousingList',513,1),(25360,64647,64661,'OP_CharacterLinkdeadMsg',419,1),(25361,64647,64661,'OP_CharacterMerc',67,1),(25362,64647,64661,'OP_CharacterMounts',589,1),(25363,64647,64661,'OP_CharacterPet',66,1),(25364,64647,64661,'OP_CharNameChangedMsg',356,1),(25365,64647,64661,'OP_CharRenamed',744,1),(25366,64647,64661,'OP_CharTransferCommitReplyMsg',427,1),(25367,64647,64661,'OP_CharTransferCommitRequestMsg',425,1),(25368,64647,64661,'OP_CharTransferReplyMsg',423,1),(25369,64647,64661,'OP_CharTransferRequestMsg',422,1),(25370,64647,64661,'OP_CharTransferRollbackReplyMsg',426,1),(25371,64647,64661,'OP_CharTransferRollbackRequestMsg',424,1),(25372,64647,64661,'OP_CharTransferStartReplyMsg',421,1),(25373,64647,64661,'OP_CharTransferStartRequestMsg',420,1),(25374,64647,64661,'OP_CharTransferValidateReplyMsg',443,1),(25375,64647,64661,'OP_CharTransferValidateRequestMsg',442,1),(25376,64647,64661,'OP_ChatCreateChannelMsg',289,1),(25377,64647,64661,'OP_ChatFiltersMsg',338,1),(25378,64647,64661,'OP_ChatJoinChannelMsg',290,1),(25379,64647,64661,'OP_ChatLeaveChannelMsg',292,1),(25380,64647,64661,'OP_ChatRelationshipUpdateMsg',187,1),(25381,64647,64661,'OP_ChatSendFriendsMsg',299,1),(25382,64647,64661,'OP_ChatSendIgnoresMsg',300,1),(25383,64647,64661,'OP_ChatTellChannelMsg',293,1),(25384,64647,64661,'OP_ChatTellUserMsg',294,1),(25385,64647,64661,'OP_ChatToggleFriendMsg',295,1),(25386,64647,64661,'OP_ChatToggleIgnoreMsg',298,1),(25387,64647,64661,'OP_ChatWhoChannelMsg',291,1),(25388,64647,64661,'OP_ClearDataMsg',100,1),(25389,64647,64661,'OP_ClearForLandingMsg',497,1),(25390,64647,64661,'OP_ClearForTakeOffMsg',194,1),(25391,64647,64661,'OP_ClientCmdMsg',60,1),(25392,64647,64661,'OP_ClientFellMsg',389,1),(25393,64647,64661,'OP_ClientIdleBeginMsg',410,1),(25394,64647,64661,'OP_ClientIdleEndMsg',411,1),(25395,64647,64661,'OP_ClientInDeathRegionMsg',390,1),(25396,64647,64661,'OP_ClientTeleportRequestMsg',80,1),(25397,64647,64661,'OP_ClientTeleportToLocationMsg',248,1),(25398,64647,64661,'OP_CloseGroupInviteWindowMsg',401,1),(25399,64647,64661,'OP_CollectAllHouseItemsMsg',155,1),(25400,64647,64661,'OP_ConsignItemRequestMsg',129,1),(25401,64647,64661,'OP_ConsignItemResponseMsg',130,1),(25402,64647,64661,'OP_ConsignmentCloseStoreMsg',128,1),(25403,64647,64661,'OP_ConsignRemoveItemsMsg',382,1),(25404,64647,64661,'OP_ConsignViewCreateMsg',379,1),(25405,64647,64661,'OP_ConsignViewGetPageMsg',380,1),(25406,64647,64661,'OP_ConsignViewReleaseMsg',381,1),(25407,64647,64661,'OP_ConsignViewSortMsg',387,1),(25408,64647,64661,'OP_CorruptedClientMsg',414,1),(25409,64647,64661,'OP_CreateBoatTransportsMsg',254,1),(25410,64647,64661,'OP_CreateCharacterDungeon',552,1),(25411,64647,64661,'OP_CreateCharacterReplyMsg',12,1),(25412,64647,64661,'OP_CreateCharacterRequestMsg',11,1),(25413,64647,64661,'OP_CreateCharFromCBBReplyMsg',431,1),(25414,64647,64661,'OP_CreateCharFromCBBRequestMsg',430,1),(25415,64647,64661,'OP_CreateGuildReplyMsg',123,1),(25416,64647,64661,'OP_CreateGuildRequestMsg',121,1),(25417,64647,64661,'OP_CreateZoneInstanceMsg',31,1),(25418,64647,64661,'OP_CsCategoryRequestMsg',371,1),(25419,64647,64661,'OP_CsCategoryResponseMsg',372,1),(25420,64647,64661,'OP_CSTicketAddCommentMsg',237,1),(25421,64647,64661,'OP_CSTicketChangeNotificationMsg',239,1),(25422,64647,64661,'OP_CSTicketCommentRequestMsg',234,1),(25423,64647,64661,'OP_CSTicketCommentResponseMsg',235,1),(25424,64647,64661,'OP_CSTicketCreateMsg',236,1),(25425,64647,64661,'OP_CSTicketDeleteMsg',238,1),(25426,64647,64661,'OP_CSTicketHeaderRequestMsg',232,1),(25427,64647,64661,'OP_CSTicketInfoMsg',233,1),(25428,64647,64661,'OP_CSToolAccessResponseMsg',392,1),(25429,64647,64661,'OP_CSToolsRequestMsg',251,1),(25430,64647,64661,'OP_CSToolsResponseMsg',252,1),(25431,64647,64661,'OP_CurrentPet',490,1),(25432,64647,64661,'OP_CustomizationPurchaseRequestMs',170,1),(25433,64647,64661,'OP_CustomizationReplyMsg',172,1),(25434,64647,64661,'OP_CustomizationSetRequestMsg',171,1),(25435,64647,64661,'OP_CustomizeHouseDisplay',769,1),(25436,64647,64661,'OP_DailyObjectives',602,1),(25437,64647,64661,'OP_DefaultGroupOptionsMsg',201,1),(25438,64647,64661,'OP_DefaultGroupOptionsRequestMsg',200,1),(25439,64647,64661,'OP_DeityAbilityWindow',622,1),(25440,64647,64661,'OP_DeleteCharacterReplyMsg',19,1),(25441,64647,64661,'OP_DeleteCharacterRequestMsg',18,1),(25442,64647,64661,'OP_DeleteGuildMsg',126,1),(25443,64647,64661,'OP_DestUpdateReq',213,1),(25444,64647,64661,'OP_DialogCloseMsg',112,1),(25445,64647,64661,'OP_DialogSelectMsg',111,1),(25446,64647,64661,'OP_DispatchClientCmdMsg',62,1),(25447,64647,64661,'OP_DispatchESMsg',61,1),(25448,64647,64661,'OP_DispatchMsg',456,1),(25449,64647,64661,'OP_DispatchSpellCmdMsg',182,1),(25450,64647,64661,'OP_DisplayDebugNLLPointsMsg',258,1),(25451,64647,64661,'OP_DisplayEventMsg',457,1),(25452,64647,64661,'OP_DisplayExchangeScreenMsg',449,1),(25453,64647,64661,'OP_DisplayGroupOptionsScreenMsg',203,1),(25454,64647,64661,'OP_DisplayInnVisitScreenMsg',205,1),(25455,64647,64661,'OP_DisplayMailScreenMsg',409,1),(25456,64647,64661,'OP_DisplayTSEventReactionMsg',228,1),(25457,64647,64661,'OP_DisplayWarningMsg',269,1),(25458,64647,64661,'OP_DoneLoadingEntityResourcesMsg',38,1),(25459,64647,64661,'OP_DoneLoadingZoneResourcesMsg',36,1),(25460,64647,64661,'OP_DoneSendingInitialEntitiesMsg',37,1),(25461,64647,64661,'OP_DressingRoom',516,1),(25462,64647,64661,'OP_DumpSchedulerMsg',206,1),(25463,64647,64661,'OP_DungeonMakerEnter',553,1),(25464,64647,64661,'OP_DungeonMakerItemRequest',557,1),(25465,64647,64661,'OP_DungeonMakerItemResponse',587,1),(25466,64647,64661,'OP_DungeonMakerToolboxList',559,1),(25467,64647,64661,'OP_DungeonMakerUnknown',560,1),(25468,64647,64661,'OP_DungeonMakerUnknown1',561,1),(25469,64647,64661,'OP_DungeonPlayAsAvatarList',783,1),(25470,64647,64661,'OP_DungeonPlayAsAvatarSelected',784,1),(25471,64647,64661,'OP_EarlyLandingRequestMsg',491,1),(25472,64647,64661,'OP_EncounterBrokenMsg',267,1),(25473,64647,64661,'OP_EnterHouseMsg',157,1),(25474,64647,64661,'OP_EnterMoveObjectModeMsg',164,1),(25475,64647,64661,'OP_EntityVerbsReplyMsg',184,1),(25476,64647,64661,'OP_EntityVerbsRequestMsg',183,1),(25477,64647,64661,'OP_EntityVerbsVerbMsg',185,1),(25478,64647,64661,'OP_EqArenaResultsCmd',734,1),(25479,64647,64661,'OP_EqAvailWorldChannelsCmd',721,1),(25480,64647,64661,'OP_EqBetaCopyRequest',640,1),(25481,64647,64661,'OP_EqCannedEmoteCmd',663,1),(25482,64647,64661,'OP_EqChatChannelUpdateCmd',719,1),(25483,64647,64661,'OP_EqChoiceWinCmd',700,1),(25484,64647,64661,'OP_EqCloseWindowCmd',692,1),(25485,64647,64661,'OP_EqCollectionFilterCmd',679,1),(25486,64647,64661,'OP_EqCollectionItemCmd',680,1),(25487,64647,64661,'OP_EqCollectionUpdateCmd',678,1),(25488,64647,64661,'OP_EqConsignmentItemsCmd',724,1),(25489,64647,64661,'OP_EqCreateGhostCmd',645,1),(25490,64647,64661,'OP_EqCreateListBoxCmd',660,1),(25491,64647,64661,'OP_EqCreateSignWidgetCmd',647,1),(25492,64647,64661,'OP_EqCreateWidgetCmd',646,1),(25493,64647,64661,'OP_EqDebugPVDCmd',713,1),(25494,64647,64661,'OP_EqDestroyGhostCmd',648,1),(25495,64647,64661,'OP_EqDialogCloseCmd',676,1),(25496,64647,64661,'OP_EqDialogOpenCmd',675,1),(25497,64647,64661,'OP_EqDisplaySpellFailCmd',696,1),(25498,64647,64661,'OP_EqDisplayTextCmd',644,1),(25499,64647,64661,'OP_EqDrawablePathGraphCmd',674,1),(25500,64647,64661,'OP_EqEnableGameEventCmd',706,1),(25501,64647,64661,'OP_EqEnableWindowCmd',708,1),(25502,64647,64661,'OP_EqExamineInfoCmd',691,1),(25503,64647,64661,'OP_EqFactionUpdateCmd',677,1),(25504,64647,64661,'OP_EqFlashWindowCmd',709,1),(25505,64647,64661,'OP_EqGetProbsCmd',717,1),(25506,64647,64661,'OP_EqGroupMemberRemovedCmd',670,1),(25507,64647,64661,'OP_EqGuildBankEventActionCmd',735,1),(25508,64647,64661,'OP_EqGuildBankExamineInfoCmd',736,1),(25509,64647,64661,'OP_EqHearChainEffectCmd',671,1),(25510,64647,64661,'OP_EqHearChatCmd',643,1),(25511,64647,64661,'OP_EqHearCombatCmd',652,1),(25512,64647,64661,'OP_EqHearConsiderCmd',658,1),(25513,64647,64661,'OP_EqHearDeathCmd',669,1),(25514,64647,64661,'OP_EQHearDispellCmd',781,1),(25515,64647,64661,'OP_EqHearDrowningCmd',668,1),(25516,64647,64661,'OP_EqHearHealCmd',718,1),(25517,64647,64661,'OP_EqHearPlayFlavorCmd',711,1),(25518,64647,64661,'OP_EQHearProcCmd',654,1),(25519,64647,64661,'OP_EQHearResEffectCmd',655,1),(25520,64647,64661,'OP_EqHearSpellCastCmd',653,1),(25521,64647,64661,'OP_EqHearSpellFizzleCmd',657,1),(25522,64647,64661,'OP_EqHearSpellInterruptCmd',656,1),(25523,64647,64661,'OP_EqHearSpellNoLandCmd',737,1),(25524,64647,64661,'OP_EQHearThreatCmd',775,1),(25525,64647,64661,'OP_EqHelpPathClearCmd',689,1),(25526,64647,64661,'OP_EqHelpPathCmd',688,1),(25527,64647,64661,'OP_EqInspectPCResultsCmd',673,1),(25528,64647,64661,'OP_EqInstructionWindowCloseCmd',703,1),(25529,64647,64661,'OP_EqInstructionWindowCmd',702,1),(25530,64647,64661,'OP_EqInstructionWindowGoalCmd',704,1),(25531,64647,64661,'OP_EqInstructionWindowTaskCmd',705,1),(25532,64647,64661,'OP_EqJunctionListCmd',694,1),(25533,64647,64661,'OP_EqMapExplorationCmd',727,1),(25534,64647,64661,'OP_EqMentoring',682,1),(25535,64647,64661,'OP_EqPlaySound3DCmd',666,1),(25536,64647,64661,'OP_EqPlaySoundCmd',665,1),(25537,64647,64661,'OP_EqPlayVoiceCmd',667,1),(25538,64647,64661,'OP_EqQuestGroupCmd',684,1),(25539,64647,64661,'OP_EqQuestionnaireCmd',715,1),(25540,64647,64661,'OP_EqQuestJournalReplyCmd',683,1),(25541,64647,64661,'OP_EqQuestJournalUpdateCmd',681,1),(25542,64647,64661,'OP_EqReceiveOfferCmd',672,1),(25543,64647,64661,'OP_EqResurrectedCmd',699,1),(25544,64647,64661,'OP_EqSetControlGhostCmd',650,1),(25545,64647,64661,'OP_EqSetDebugPathPointsCmd',661,1),(25546,64647,64661,'OP_EqSetDefaultVerbCmd',701,1),(25547,64647,64661,'OP_EqSetPOVGhostCmd',651,1),(25548,64647,64661,'OP_EqShowBookCmd',714,1),(25549,64647,64661,'OP_EqShowDeathWindowCmd',695,1),(25550,64647,64661,'OP_EqShowWindowCmd',707,1),(25551,64647,64661,'OP_EqSpellCastEndCmd',698,1),(25552,64647,64661,'OP_EqSpellCastStartCmd',697,1),(25553,64647,64661,'OP_EqSpellMoveToRangeAndRetryCmd',729,1),(25554,64647,64661,'OP_EqStartBrokerCmd',726,1),(25555,64647,64661,'OP_EqStateCmd',664,1),(25556,64647,64661,'OP_EqStoreLogCmd',728,1),(25557,64647,64661,'OP_EqUpdateBankCmd',690,1),(25558,64647,64661,'OP_EqUpdateGhostCmd',649,1),(25559,64647,64661,'OP_EqUpdateLootCmd',693,1),(25560,64647,64661,'OP_EqUpdateMerchantCmd',685,1),(25561,64647,64661,'OP_EqUpdatePlayerMailCmd',730,1),(25562,64647,64661,'OP_EqUpdatePlayerTradeCmd',687,1),(25563,64647,64661,'OP_EqUpdateSignWidgetCmd',712,1),(25564,64647,64661,'OP_EqUpdateStoreCmd',686,1),(25565,64647,64661,'OP_EqUpdateSubClassesCmd',659,1),(25566,64647,64661,'OP_EqUpdateTargetCmd',722,1),(25567,64647,64661,'OP_EqWhoChannelQueryReplyCmd',720,1),(25568,64647,64661,'OP_ESInitMsg',27,1),(25569,64647,64661,'OP_ESLoginRequestMsg',3,1),(25570,64647,64661,'OP_ESReadyForClientsMsg',28,1),(25571,64647,64661,'OP_ESStatusMsg',102,1),(25572,64647,64661,'OP_ESWeatherRequestEndMsg',107,1),(25573,64647,64661,'OP_ESWeatherRequestMsg',106,1),(25574,64647,64661,'OP_ESZoneInstanceStatusMsg',103,1),(25575,64647,64661,'OP_ExamineConsignmentRequestMsg',174,1),(25576,64647,64661,'OP_ExamineConsignmentResponseMsg',175,1),(25577,64647,64661,'OP_ExamineInfoRequestMsg',259,1),(25578,64647,64661,'OP_ExamineItemRequestMsg',198,1),(25579,64647,64661,'OP_ExitHouseMsg',158,1),(25580,64647,64661,'OP_ExpectClientAsCharacterReplyMs',24,1),(25581,64647,64661,'OP_ExpectClientAsCharacterRequest',34,1),(25582,64647,64661,'OP_ExpPurchWindow',760,1),(25583,64647,64661,'OP_FellowshipExpMsg',125,1),(25584,64647,64661,'OP_FlightPathsMsg',418,1),(25585,64647,64661,'OP_GameWorldTimeMsg',45,1),(25586,64647,64661,'OP_GetAuctionAssetIDMsg',446,1),(25587,64647,64661,'OP_GetAuctionAssetIDReplyMsg',447,1),(25588,64647,64661,'OP_GetAvatarAccessRequestForCSToo',397,1),(25589,64647,64661,'OP_GetCharacterSerializedReplyMsg',429,1),(25590,64647,64661,'OP_GetCharacterSerializedRequestM',428,1),(25591,64647,64661,'OP_GroupCreatedMsg',90,1),(25592,64647,64661,'OP_GroupDestroyedMsg',91,1),(25593,64647,64661,'OP_GroupLeaderChangedMsg',95,1),(25594,64647,64661,'OP_GroupMemberAddedMsg',92,1),(25595,64647,64661,'OP_GroupMemberRemovedMsg',93,1),(25596,64647,64661,'OP_GroupOptionsMsg',202,1),(25597,64647,64661,'OP_GroupRemovedFromGroupMsg',94,1),(25598,64647,64661,'OP_GroupResendOOZDataMsg',96,1),(25599,64647,64661,'OP_GroupSettingsChangedMsg',97,1),(25600,64647,64661,'OP_GuildBankActionMsg',278,1),(25601,64647,64661,'OP_GuildBankActionResponseMsg',279,1),(25602,64647,64661,'OP_GuildBankEventListMsg',283,1),(25603,64647,64661,'OP_GuildBankItemDetailsRequestMsg',280,1),(25604,64647,64661,'OP_GuildBankItemDetailsResponseMs',281,1),(25605,64647,64661,'OP_GuildBankUpdateMsg',282,1),(25606,64647,64661,'OP_GuildEventActionMsg',273,1),(25607,64647,64661,'OP_GuildEventAddMsg',272,1),(25608,64647,64661,'OP_GuildEventDetailsMsg',276,1),(25609,64647,64661,'OP_GuildEventListMsg',274,1),(25610,64647,64661,'OP_GuildEventMsg',271,1),(25611,64647,64661,'OP_GuildMembershipResponseMsg',361,1),(25612,64647,64661,'OP_GuildRecruiting',740,1),(25613,64647,64661,'OP_GuildRecruitingDetails',741,1),(25614,64647,64661,'OP_GuildRecruitingImage',742,1),(25615,64647,64661,'OP_GuildRecruitingMemberInfo',739,1),(25616,64647,64661,'OP_GuildsayMsg',124,1),(25617,64647,64661,'OP_GuildStatusUpdate',733,1),(25618,64647,64661,'OP_GuildUpdateMsg',127,1),(25619,64647,64661,'OP_HeritageMsg',10026,1),(25620,64647,64661,'OP_HideIllusionsMsg',197,1),(25621,64647,64661,'OP_HouseAccessRemoveMsg',161,1),(25622,64647,64661,'OP_HouseAccessSetMsg',160,1),(25623,64647,64661,'OP_HouseCustomizationScreenMsg',169,1),(25624,64647,64661,'OP_HouseDefaultAccessSetMsg',159,1),(25625,64647,64661,'OP_HouseDeletedRemotelyMsg',145,1),(25626,64647,64661,'OP_HouseItemsList',489,1),(25627,64647,64661,'OP_HousingDataChangedMsg',432,1),(25628,64647,64661,'OP_HousingRestoreMsg',433,1),(25629,64647,64661,'OP_InspectPlayerMsg',367,1),(25630,64647,64661,'OP_InspectPlayerRequestMsg',455,1),(25631,64647,64661,'OP_InviteRequestMsg',452,1),(25632,64647,64661,'OP_InviteResponseMsg',453,1),(25633,64647,64661,'OP_InviteTargetResponseMsg',454,1),(25634,64647,64661,'OP_JoinGuildNotifyMsg',363,1),(25635,64647,64661,'OP_JournalQuestStoryline',782,1),(25636,64647,64661,'OP_KeymapDataMsg',180,1),(25637,64647,64661,'OP_KeymapLoadMsg',178,1),(25638,64647,64661,'OP_KeymapNoneMsg',179,1),(25639,64647,64661,'OP_KeymapSaveMsg',181,1),(25640,64647,64661,'OP_KnowledgebaseRequestMsg',230,1),(25641,64647,64661,'OP_KnowledgebaseResponseMsg',231,1),(25642,64647,64661,'OP_KnowledgeWindowSlotMappingMsg',373,1),(25643,64647,64661,'OP_KnownLanguagesMsg',242,1),(25644,64647,64661,'OP_Launchpad',580,1),(25645,64647,64661,'OP_LeaveGuildNotifyMsg',362,1),(25646,64647,64661,'OP_LevelChangedMsg',265,1),(25647,64647,64661,'OP_LFGGroupSearch',510,1),(25648,64647,64661,'OP_LFGUpdateMsg',523,1),(25649,64647,64661,'OP_LikeOption',139,1),(25650,64647,64661,'OP_LoadCalendarEvents',583,1),(25651,64647,64661,'OP_LoadWelcomeWindow',567,1),(25652,64647,64661,'OP_LoginByNumRequestMsg',1,1),(25653,64647,64661,'OP_LoginReplyMsg',4,1),(25654,64647,64661,'OP_LoginRequestMsg',0,1),(25655,64647,64661,'OP_LootItemsRequestMsg',188,1),(25656,64647,64661,'OP_Lottery',738,1),(25657,64647,64661,'OP_LSCheckAcctLockMsg',207,1),(25658,64647,64661,'OP_LsClientAlertlogReplyMsg',246,1),(25659,64647,64661,'OP_LsClientBaselogReplyMsg',244,1),(25660,64647,64661,'OP_LsClientCrashlogReplyMsg',245,1),(25661,64647,64661,'OP_LsClientVerifylogReplyMsg',247,1),(25662,64647,64661,'OP_LsRequestClientCrashLogMsg',243,1),(25663,64647,64661,'OP_LSServerLockMsg',369,1),(25664,64647,64661,'OP_MacroInitMsg',262,1),(25665,64647,64661,'OP_MacroUpdateMsg',263,1),(25666,64647,64661,'OP_MailCommitSendMessageMsg',348,1),(25667,64647,64661,'OP_MailDeleteMessageMsg',344,1),(25668,64647,64661,'OP_MailEventNotificationMsg',416,1),(25669,64647,64661,'OP_MailGetHeadersReplyMsg',345,1),(25670,64647,64661,'OP_MailGetMessageMsg',342,1),(25671,64647,64661,'OP_MailGetMessageReplyMsg',346,1),(25672,64647,64661,'OP_MailRemoveAttachFromMailMsg',350,1),(25673,64647,64661,'OP_MailSendMessageMsg',343,1),(25674,64647,64661,'OP_MailSendMessageReplyMsg',347,1),(25675,64647,64661,'OP_MailSendSystemMessageMsg',349,1),(25676,64647,64661,'OP_MakeGroupLeaderMsg',89,1),(25677,64647,64661,'OP_MapFogDataInitMsg',399,1),(25678,64647,64661,'OP_MapFogDataUpdateMsg',400,1),(25679,64647,64661,'OP_MapRequest',526,1),(25680,64647,64661,'OP_MarketAddFundsReply',534,1),(25681,64647,64661,'OP_MarketAddFundsRequest',533,1),(25682,64647,64661,'OP_MarketFundsUpdate',531,1),(25683,64647,64661,'OP_MarketPlaceItems',544,1),(25684,64647,64661,'OP_MarketPlacePrices',537,1),(25685,64647,64661,'OP_MarketPurchase',536,1),(25686,64647,64661,'OP_MentorPopup',565,1),(25687,64647,64661,'OP_MercHireWindow',786,1),(25688,64647,64661,'OP_MercUnknown',787,1),(25689,64647,64661,'OP_MigrateBoatTransportMsg',256,1),(25690,64647,64661,'OP_MigrateBoatTransportReplyMsg',257,1),(25691,64647,64661,'OP_MigrateClientToZoneReplyMsg',84,1),(25692,64647,64661,'OP_MigrateClientToZoneRequestMsg',83,1),(25693,64647,64661,'OP_ModifyGuildMsg',270,1),(25694,64647,64661,'OP_MonitorCharacterListMsg',58,1),(25695,64647,64661,'OP_MonitorCharacterListRequestMsg',59,1),(25696,64647,64661,'OP_MonitorReplyMsg',57,1),(25697,64647,64661,'OP_MOTDMsg',46,1),(25698,64647,64661,'OP_MoveableObjectPlacementCriteri',163,1),(25699,64647,64661,'OP_MoveLogUpdateMsg',405,1),(25700,64647,64661,'OP_NotifyApprenticeStoppedMentori',413,1),(25701,64647,64661,'OP_OfferQuestMsg',406,1),(25702,64647,64661,'OP_OnscreenMsgMsg',268,1),(25703,64647,64661,'OP_OpenCharCust',569,1),(25704,64647,64661,'OP_OutOfZoneMemberDataMsg',98,1),(25705,64647,64661,'OP_PaperdollImage',582,1),(25706,64647,64661,'OP_PayHouseUpkeepMsg',162,1),(25707,64647,64661,'OP_PerformCameraShakeMsg',217,1),(25708,64647,64661,'OP_PerformPlayerKnockbackMsg',216,1),(25709,64647,64661,'OP_PetOptions',204,1),(25710,64647,64661,'OP_PetOptionsResponse',586,1),(25711,64647,64661,'OP_PlayCharacterReplyMsg',21,1),(25712,64647,64661,'OP_PlayCharacterRequestMsg',20,1),(25713,64647,64661,'OP_PlayerHouseAccessUpdateMsg',150,1),(25714,64647,64661,'OP_PlayerHouseBaseScreenMsg',148,1),(25715,64647,64661,'OP_PlayerHouseCloseUIMsg',152,1),(25716,64647,64661,'OP_PlayerHouseDisplayStatusMsg',151,1),(25717,64647,64661,'OP_PlayerHousePurchaseScreenMsg',149,1),(25718,64647,64661,'OP_PlayerMadeInstances',143,1),(25719,64647,64661,'OP_PlayerMadeInstancesScreen',142,1),(25720,64647,64661,'OP_PlayerPollAnswer',564,1),(25721,64647,64661,'OP_PlayerPollPopup',563,1),(25722,64647,64661,'OP_PlayLon',517,1),(25723,64647,64661,'OP_PointOfInterest',764,1),(25724,64647,64661,'OP_PointOfInterest2',765,1),(25725,64647,64661,'OP_PopulateSkillMapsMsg',218,1),(25726,64647,64661,'OP_PositionBoatTransportMsg',255,1),(25727,64647,64661,'OP_PositionMoveableObject',165,1),(25728,64647,64661,'OP_PostPossessionMsg',459,1),(25729,64647,64661,'OP_PredictionUpdateMsg',39,1),(25730,64647,64661,'OP_PrePossessionMsg',458,1),(25731,64647,64661,'OP_PromoFlagsDetailsMsg',378,1),(25732,64647,64661,'OP_PublishHouse',141,1),(25733,64647,64661,'OP_PurchaseConsignmentLoreCheckRe',412,1),(25734,64647,64661,'OP_PurchaseConsignmentRequestMsg',131,1),(25735,64647,64661,'OP_QueAllBgSolo',572,1),(25736,64647,64661,'OP_QuestionnaireMsg',264,1),(25737,64647,64661,'OP_QuestJournalInspectMsg',116,1),(25738,64647,64661,'OP_QuestJournalOpenMsg',115,1),(25739,64647,64661,'OP_QuestJournalSetVisibleMsg',117,1),(25740,64647,64661,'OP_QuestJournalWaypointMsg',118,1),(25741,64647,64661,'OP_QuestReward',324,1),(25742,64647,64661,'OP_QuickbarInitMsg',260,1),(25743,64647,64661,'OP_QuickbarUpdateMsg',261,1),(25744,64647,64661,'OP_RaceRestrictionMsg',444,1),(25745,64647,64661,'OP_ReadBookPageMsg',199,1),(25746,64647,64661,'OP_ReadyForTakeOffMsg',195,1),(25747,64647,64661,'OP_ReadyToZoneMsg',86,1),(25748,64647,64661,'OP_RecipeBook',545,1),(25749,64647,64661,'OP_RecipeDetailsMsg',74,1),(25750,64647,64661,'OP_RecipeList',776,1),(25751,64647,64661,'OP_RecipeListUnknown',598,1),(25752,64647,64661,'OP_RelinquishHouseMsg',156,1),(25753,64647,64661,'OP_ReloadLocalizedTxtMsg',359,1),(25754,64647,64661,'OP_RemoteCmdMsg',44,1),(25755,64647,64661,'OP_RemoveClientFromGroupMsg',87,1),(25756,64647,64661,'OP_RemoveConcentrationMsg',114,1),(25757,64647,64661,'OP_RemoveGroupFromGroupMsg',88,1),(25758,64647,64661,'OP_RemoveSpellEffectMsg',113,1),(25759,64647,64661,'OP_RenameGuildMsg',286,1),(25760,64647,64661,'OP_ReplaceableSubMeshesMsg',168,1),(25761,64647,64661,'OP_ReportMsg',384,1),(25762,64647,64661,'OP_RequestCampMsg',52,1),(25763,64647,64661,'OP_RequestGuildBankEventDetailsMs',284,1),(25764,64647,64661,'OP_RequestGuildEventDetailsMsg',275,1),(25765,64647,64661,'OP_RequestGuildInfoMsg',277,1),(25766,64647,64661,'OP_RequestGuildMembershipMsg',360,1),(25767,64647,64661,'OP_RequestHelpRepathMsg',209,1),(25768,64647,64661,'OP_RequestRecipeDetailsMsg',73,1),(25769,64647,64661,'OP_RequestTargetLocMsg',210,1),(25770,64647,64661,'OP_Research',777,1),(25771,64647,64661,'OP_ResendWorldChannelsMsg',448,1),(25772,64647,64661,'OP_ReskinCharacterRequestMsg',15,1),(25773,64647,64661,'OP_RestartZoneMsg',417,1),(25774,64647,64661,'OP_RewardPackMsg',285,1),(25775,64647,64661,'OP_SatMsg',192,1),(25776,64647,64661,'OP_SavageBarInitMsg',585,1),(25777,64647,64661,'OP_SelectZoneTeleporterDestinatio',358,1),(25778,64647,64661,'OP_SendLatestRequestMsg',99,1),(25779,64647,64661,'OP_ServerPlayCharacterReplyMsg',26,1),(25780,64647,64661,'OP_ServerPlayCharacterRequestMsg',25,1),(25781,64647,64661,'OP_SetInstanceDisplayNameMsg',445,1),(25782,64647,64661,'OP_SetRemoteCmdsMsg',43,1),(25783,64647,64661,'OP_SetSocialMsg',101,1),(25784,64647,64661,'OP_ShaderCustomizationMsg',167,1),(25785,64647,64661,'OP_ShowCreateFromRecipeUIMsg',222,1),(25786,64647,64661,'OP_ShowIllusionsMsg',196,1),(25787,64647,64661,'OP_ShowItemCreationProcessUIMsg',226,1),(25788,64647,64661,'OP_ShowRecipeBookMsg',229,1),(25789,64647,64661,'OP_ShowZoneTeleporterDestinations',357,1),(25790,64647,64661,'OP_SitMsg',190,1),(25791,64647,64661,'OP_SkillInfoRequest',519,1),(25792,64647,64661,'OP_SkillInfoResponse',520,1),(25793,64647,64661,'OP_SOEAllAccess',643,1),(25794,64647,64661,'OP_SpellGainedMsg',266,1),(25795,64647,64661,'OP_StandMsg',191,1),(25796,64647,64661,'OP_StoodMsg',193,1),(25797,64647,64661,'OP_StopItemCreationMsg',225,1),(25798,64647,64661,'OP_StoppedLootingMsg',189,1),(25799,64647,64661,'OP_StopTrackingMsg',395,1),(25800,64647,64661,'OP_SubmitCharCust',570,1),(25801,64647,64661,'OP_SupplyDepot',774,1),(25802,64647,64661,'OP_SysClient',221,1),(25803,64647,64661,'OP_TeleportWithinZoneMsg',81,1),(25804,64647,64661,'OP_TeleportWithinZoneNoReloadMsg',82,1),(25805,64647,64661,'OP_TintWidgetsMsg',173,1),(25806,64647,64661,'OP_TitleUpdateMsg',388,1),(25807,64647,64661,'OP_TrackingUpdateMsg',393,1),(25808,64647,64661,'OP_TradeskillList',743,1),(25809,64647,64661,'OP_TraitsList',766,1),(25810,64647,64661,'OP_UIEvent',532,1),(25811,64647,64661,'OP_UIResetMsg',177,1),(25812,64647,64661,'OP_UISettingsResponseMsg',176,1),(25813,64647,64661,'OP_Unknown',800,1),(25814,64647,64661,'OP_UnknownNpcMsg',377,1),(25815,64647,64661,'OP_UpdateActivePublicZonesMsg',376,1),(25816,64647,64661,'OP_UpdateCharacterSheetMsg',65,1),(25817,64647,64661,'OP_UpdateClientPredFlagsMsg',249,1),(25818,64647,64661,'OP_UpdateDebugRadiiMsg',383,1),(25819,64647,64661,'OP_UpdateGroupMemberDataMsg',392,1),(25820,64647,64661,'OP_UpdateHouseAccessDataMsg',147,1),(25821,64647,64661,'OP_UpdateHouseDataMsg',146,1),(25822,64647,64661,'OP_UpdateInventoryMsg',70,1),(25823,64647,64661,'OP_UpdateItemCreationProcessUIMsg',227,1),(25824,64647,64661,'OP_UpdateMotdMsg',211,1),(25825,64647,64661,'OP_UpdateOpportunityMsg',77,1),(25826,64647,64661,'OP_UpdatePositionMsg',41,1),(25827,64647,64661,'OP_UpdateRaidMsg',385,1),(25828,64647,64661,'OP_UpdateRecipeBookMsg',72,1),(25829,64647,64661,'OP_UpdateSkillBookMsg',75,1),(25830,64647,64661,'OP_UpdateSkillsMsg',76,1),(25831,64647,64661,'OP_UpdateSpellBookMsg',68,1),(25832,64647,64661,'OP_UpdateTargetLocMsg',64,1),(25833,64647,64661,'OP_UpdateTargetMsg',63,1),(25834,64647,64661,'OP_UpdateTitleCmd',500,1),(25835,64647,64661,'OP_UseAdornment',754,1),(25836,64647,64661,'OP_VideoUploaded',584,1),(25837,64647,64661,'OP_VoiceChatChannel',525,1),(25838,64647,64661,'OP_VoiceChatServer',770,1),(25839,64647,64661,'OP_WaypointReplyMsg',353,1),(25840,64647,64661,'OP_WaypointRequestMsg',352,1),(25841,64647,64661,'OP_WaypointSelectMsg',354,1),(25842,64647,64661,'OP_WaypointUpdateMsg',355,1),(25843,64647,64661,'OP_Weakness',588,1),(25844,64647,64661,'OP_WhoQueryReplyMsg',56,1),(25845,64647,64661,'OP_WhoQueryRequestMsg',55,1),(25846,64647,64661,'OP_WorldDataChangeMsg',415,1),(25847,64647,64661,'OP_WorldDataUpdateMsg',240,1),(25848,64647,64661,'OP_WorldListMsg',8,1),(25849,64647,64661,'OP_WorldPingMsg',404,1),(25850,64647,64661,'OP_WorldShutdownUpdateMsg',408,1),(25851,64647,64661,'OP_WorldStatusChangeMsg',6,1),(25852,64647,64661,'OP_WorldTravelAvail',577,1),(25853,64647,64661,'OP_WSAcctLockStatusMsg',208,1),(25854,64647,64661,'OP_WSCreateCharacterReplyMsg',14,1),(25855,64647,64661,'OP_WSCreateCharacterRequestMsg',13,1),(25856,64647,64661,'OP_WSLoginRequestMsg',2,1),(25857,64647,64661,'OP_WSServerHideMsg',370,1),(25858,64647,64661,'OP_WSServerLockMsg',368,1),(25859,64647,64661,'OP_WSStatusReplyMsg',5,1),(25860,64647,64661,'OP_ZoneBgInstanceList',573,1),(25861,64647,64661,'OP_ZoneInfoMsg',35,1),(25862,64647,64661,'OP_ZoneInstanceCreateReplyMsg',32,1),(25863,64647,64661,'OP_ZoneInstanceDestroyedMsg',33,1),(25864,64647,64661,'OP_ZoneMOTDMsg',47,1),(25865,64647,64661,'OP_ZonesStatusMsg',105,1),(25866,64647,64661,'OP_ZonesStatusRequestMsg',104,1),(25867,64647,64661,'OP_ZoneToFriendReplyMsg',288,1),(25868,64647,64661,'OP_ZoneToFriendRequestMsg',287,1),(26332,64662,64677,'OP_LoginRequestMsg',0,1),(26333,64662,64677,'OP_LoginByNumRequestMsg',1,1),(26334,64662,64677,'OP_WSLoginRequestMsg',2,1),(26335,64662,64677,'OP_ESLoginRequestMsg',3,1),(26336,64662,64677,'OP_LoginReplyMsg',4,1),(26337,64662,64677,'OP_WSStatusReplyMsg',5,1),(26338,64662,64677,'OP_WorldStatusChangeMsg',6,1),(26339,64662,64677,'OP_AllWSDescRequestMsg',7,1),(26340,64662,64677,'OP_WorldListMsg',8,1),(26341,64662,64677,'OP_AllCharactersDescRequestMsg',9,1),(26342,64662,64677,'OP_AllCharactersDescReplyMsg',10,1),(26343,64662,64677,'OP_CreateCharacterRequestMsg',11,1),(26344,64662,64677,'OP_CreateCharacterReplyMsg',12,1),(26345,64662,64677,'OP_WSCreateCharacterRequestMsg',13,1),(26346,64662,64677,'OP_WSCreateCharacterReplyMsg',14,1),(26347,64662,64677,'OP_ReskinCharacterRequestMsg',15,1),(26348,64662,64677,'OP_DeleteCharacterRequestMsg',18,1),(26349,64662,64677,'OP_DeleteCharacterReplyMsg',19,1),(26350,64662,64677,'OP_PlayCharacterRequestMsg',20,1),(26351,64662,64677,'OP_PlayCharacterReplyMsg',21,1),(26352,64662,64677,'OP_ExpectClientAsCharacterReplyMs',24,1),(26353,64662,64677,'OP_ServerPlayCharacterRequestMsg',25,1),(26354,64662,64677,'OP_ServerPlayCharacterReplyMsg',26,1),(26355,64662,64677,'OP_ESInitMsg',27,1),(26356,64662,64677,'OP_ESReadyForClientsMsg',28,1),(26357,64662,64677,'OP_CreateZoneInstanceMsg',31,1),(26358,64662,64677,'OP_ZoneInstanceCreateReplyMsg',32,1),(26359,64662,64677,'OP_ZoneInstanceDestroyedMsg',33,1),(26360,64662,64677,'OP_ExpectClientAsCharacterRequest',34,1),(26361,64662,64677,'OP_ZoneInfoMsg',35,1),(26362,64662,64677,'OP_DoneLoadingZoneResourcesMsg',36,1),(26363,64662,64677,'OP_DoneSendingInitialEntitiesMsg',37,1),(26364,64662,64677,'OP_DoneLoadingEntityResourcesMsg',38,1),(26365,64662,64677,'OP_PredictionUpdateMsg',39,1),(26366,64662,64677,'OP_UpdatePositionMsg',41,1),(26367,64662,64677,'OP_SetRemoteCmdsMsg',43,1),(26368,64662,64677,'OP_RemoteCmdMsg',44,1),(26369,64662,64677,'OP_GameWorldTimeMsg',45,1),(26370,64662,64677,'OP_MOTDMsg',46,1),(26371,64662,64677,'OP_ZoneMOTDMsg',47,1),(26372,64662,64677,'OP_AvatarCreatedMsg',48,1),(26373,64662,64677,'OP_AvatarDestroyedMsg',49,1),(26374,64662,64677,'OP_RequestCampMsg',52,1),(26375,64662,64677,'OP_CampStartedMsg',53,1),(26376,64662,64677,'OP_CampAbortedMsg',54,1),(26377,64662,64677,'OP_WhoQueryRequestMsg',55,1),(26378,64662,64677,'OP_WhoQueryReplyMsg',56,1),(26379,64662,64677,'OP_MonitorReplyMsg',57,1),(26380,64662,64677,'OP_MonitorCharacterListMsg',58,1),(26381,64662,64677,'OP_MonitorCharacterListRequestMsg',59,1),(26382,64662,64677,'OP_ClientCmdMsg',60,1),(26383,64662,64677,'OP_DispatchESMsg',61,1),(26384,64662,64677,'OP_DispatchClientCmdMsg',62,1),(26385,64662,64677,'OP_UpdateTargetMsg',63,1),(26386,64662,64677,'OP_UpdateTargetLocMsg',64,1),(26387,64662,64677,'OP_UpdateCharacterSheetMsg',65,1),(26388,64662,64677,'OP_CharacterPet',66,1),(26389,64662,64677,'OP_CharacterMerc',67,1),(26390,64662,64677,'OP_UpdateSpellBookMsg',68,1),(26391,64662,64677,'OP_UpdateInventoryMsg',70,1),(26392,64662,64677,'OP_AfterInvSpellUpdate',71,1),(26393,64662,64677,'OP_UpdateRecipeBookMsg',72,1),(26394,64662,64677,'OP_RequestRecipeDetailsMsg',73,1),(26395,64662,64677,'OP_RecipeDetailsMsg',74,1),(26396,64662,64677,'OP_UpdateSkillBookMsg',75,1),(26397,64662,64677,'OP_UpdateSkillsMsg',76,1),(26398,64662,64677,'OP_UpdateOpportunityMsg',77,1),(26399,64662,64677,'OP_ChangeZoneMsg',79,1),(26400,64662,64677,'OP_ClientTeleportRequestMsg',80,1),(26401,64662,64677,'OP_TeleportWithinZoneMsg',81,1),(26402,64662,64677,'OP_TeleportWithinZoneNoReloadMsg',82,1),(26403,64662,64677,'OP_MigrateClientToZoneRequestMsg',83,1),(26404,64662,64677,'OP_MigrateClientToZoneReplyMsg',84,1),(26405,64662,64677,'OP_ReadyToZoneMsg',86,1),(26406,64662,64677,'OP_RemoveClientFromGroupMsg',87,1),(26407,64662,64677,'OP_RemoveGroupFromGroupMsg',88,1),(26408,64662,64677,'OP_MakeGroupLeaderMsg',89,1),(26409,64662,64677,'OP_GroupCreatedMsg',90,1),(26410,64662,64677,'OP_GroupDestroyedMsg',91,1),(26411,64662,64677,'OP_GroupMemberAddedMsg',92,1),(26412,64662,64677,'OP_GroupMemberRemovedMsg',93,1),(26413,64662,64677,'OP_GroupRemovedFromGroupMsg',94,1),(26414,64662,64677,'OP_GroupLeaderChangedMsg',95,1),(26415,64662,64677,'OP_GroupResendOOZDataMsg',96,1),(26416,64662,64677,'OP_GroupSettingsChangedMsg',97,1),(26417,64662,64677,'OP_OutOfZoneMemberDataMsg',98,1),(26418,64662,64677,'OP_SendLatestRequestMsg',99,1),(26419,64662,64677,'OP_ClearDataMsg',100,1),(26420,64662,64677,'OP_SetSocialMsg',101,1),(26421,64662,64677,'OP_ESStatusMsg',102,1),(26422,64662,64677,'OP_ESZoneInstanceStatusMsg',103,1),(26423,64662,64677,'OP_ZonesStatusRequestMsg',104,1),(26424,64662,64677,'OP_ZonesStatusMsg',105,1),(26425,64662,64677,'OP_ESWeatherRequestMsg',106,1),(26426,64662,64677,'OP_ESWeatherRequestEndMsg',107,1),(26427,64662,64677,'OP_DialogSelectMsg',111,1),(26428,64662,64677,'OP_DialogCloseMsg',112,1),(26429,64662,64677,'OP_RemoveSpellEffectMsg',113,1),(26430,64662,64677,'OP_RemoveConcentrationMsg',114,1),(26431,64662,64677,'OP_QuestJournalOpenMsg',115,1),(26432,64662,64677,'OP_QuestJournalInspectMsg',116,1),(26433,64662,64677,'OP_QuestJournalSetVisibleMsg',117,1),(26434,64662,64677,'OP_QuestJournalWaypointMsg',118,1),(26435,64662,64677,'OP_CreateGuildRequestMsg',121,1),(26436,64662,64677,'OP_CreateGuildReplyMsg',123,1),(26437,64662,64677,'OP_GuildsayMsg',124,1),(26438,64662,64677,'OP_FellowshipExpMsg',125,1),(26439,64662,64677,'OP_DeleteGuildMsg',126,1),(26440,64662,64677,'OP_GuildUpdateMsg',127,1),(26441,64662,64677,'OP_ConsignmentCloseStoreMsg',128,1),(26442,64662,64677,'OP_ConsignItemRequestMsg',129,1),(26443,64662,64677,'OP_ConsignItemResponseMsg',130,1),(26444,64662,64677,'OP_PurchaseConsignmentRequestMsg',131,1),(26445,64662,64677,'OP_LikeOption',139,1),(26446,64662,64677,'OP_PublishHouse',141,1),(26447,64662,64677,'OP_PlayerMadeInstancesScreen',142,1),(26448,64662,64677,'OP_PlayerMadeInstances',143,1),(26449,64662,64677,'OP_HouseDeletedRemotelyMsg',145,1),(26450,64662,64677,'OP_UpdateHouseDataMsg',146,1),(26451,64662,64677,'OP_UpdateHouseAccessDataMsg',147,1),(26452,64662,64677,'OP_PlayerHouseBaseScreenMsg',148,1),(26453,64662,64677,'OP_PlayerHousePurchaseScreenMsg',149,1),(26454,64662,64677,'OP_PlayerHouseAccessUpdateMsg',150,1),(26455,64662,64677,'OP_PlayerHouseDisplayStatusMsg',151,1),(26456,64662,64677,'OP_PlayerHouseCloseUIMsg',152,1),(26457,64662,64677,'OP_BuyPlayerHouseMsg',153,1),(26458,64662,64677,'OP_BuyPlayerHouseTintMsg',154,1),(26459,64662,64677,'OP_CollectAllHouseItemsMsg',155,1),(26460,64662,64677,'OP_RelinquishHouseMsg',156,1),(26461,64662,64677,'OP_EnterHouseMsg',157,1),(26462,64662,64677,'OP_ExitHouseMsg',158,1),(26463,64662,64677,'OP_HouseDefaultAccessSetMsg',159,1),(26464,64662,64677,'OP_HouseAccessSetMsg',160,1),(26465,64662,64677,'OP_HouseAccessRemoveMsg',161,1),(26466,64662,64677,'OP_PayHouseUpkeepMsg',162,1),(26467,64662,64677,'OP_MoveableObjectPlacementCriteri',163,1),(26468,64662,64677,'OP_EnterMoveObjectModeMsg',164,1),(26469,64662,64677,'OP_PositionMoveableObject',165,1),(26470,64662,64677,'OP_CancelMoveObjectModeMsg',166,1),(26471,64662,64677,'OP_ShaderCustomizationMsg',167,1),(26472,64662,64677,'OP_ReplaceableSubMeshesMsg',168,1),(26473,64662,64677,'OP_HouseCustomizationScreenMsg',169,1),(26474,64662,64677,'OP_CustomizationPurchaseRequestMs',170,1),(26475,64662,64677,'OP_CustomizationSetRequestMsg',171,1),(26476,64662,64677,'OP_CustomizationReplyMsg',172,1),(26477,64662,64677,'OP_TintWidgetsMsg',173,1),(26478,64662,64677,'OP_ExamineConsignmentRequestMsg',174,1),(26479,64662,64677,'OP_ExamineConsignmentResponseMsg',175,1),(26480,64662,64677,'OP_UISettingsResponseMsg',176,1),(26481,64662,64677,'OP_UIResetMsg',177,1),(26482,64662,64677,'OP_KeymapLoadMsg',178,1),(26483,64662,64677,'OP_KeymapNoneMsg',179,1),(26484,64662,64677,'OP_KeymapDataMsg',180,1),(26485,64662,64677,'OP_KeymapSaveMsg',181,1),(26486,64662,64677,'OP_DispatchSpellCmdMsg',182,1),(26487,64662,64677,'OP_EntityVerbsRequestMsg',183,1),(26488,64662,64677,'OP_EntityVerbsReplyMsg',184,1),(26489,64662,64677,'OP_EntityVerbsVerbMsg',185,1),(26490,64662,64677,'OP_ChatRelationshipUpdateMsg',187,1),(26491,64662,64677,'OP_LootItemsRequestMsg',188,1),(26492,64662,64677,'OP_StoppedLootingMsg',189,1),(26493,64662,64677,'OP_SitMsg',190,1),(26494,64662,64677,'OP_StandMsg',191,1),(26495,64662,64677,'OP_SatMsg',192,1),(26496,64662,64677,'OP_StoodMsg',193,1),(26497,64662,64677,'OP_ClearForTakeOffMsg',194,1),(26498,64662,64677,'OP_ReadyForTakeOffMsg',195,1),(26499,64662,64677,'OP_ShowIllusionsMsg',196,1),(26500,64662,64677,'OP_HideIllusionsMsg',197,1),(26501,64662,64677,'OP_ExamineItemRequestMsg',198,1),(26502,64662,64677,'OP_ReadBookPageMsg',199,1),(26503,64662,64677,'OP_DefaultGroupOptionsRequestMsg',200,1),(26504,64662,64677,'OP_DefaultGroupOptionsMsg',201,1),(26505,64662,64677,'OP_GroupOptionsMsg',202,1),(26506,64662,64677,'OP_DisplayGroupOptionsScreenMsg',203,1),(26507,64662,64677,'OP_PetOptions',204,1),(26508,64662,64677,'OP_DisplayInnVisitScreenMsg',205,1),(26509,64662,64677,'OP_DumpSchedulerMsg',206,1),(26510,64662,64677,'OP_LSCheckAcctLockMsg',207,1),(26511,64662,64677,'OP_WSAcctLockStatusMsg',208,1),(26512,64662,64677,'OP_RequestHelpRepathMsg',209,1),(26513,64662,64677,'OP_RequestTargetLocMsg',210,1),(26514,64662,64677,'OP_UpdateMotdMsg',211,1),(26515,64662,64677,'OP_DestUpdateReq',213,1),(26516,64662,64677,'OP_PerformPlayerKnockbackMsg',216,1),(26517,64662,64677,'OP_PerformCameraShakeMsg',217,1),(26518,64662,64677,'OP_PopulateSkillMapsMsg',218,1),(26519,64662,64677,'OP_CancelledFeignMsg',219,1),(26520,64662,64677,'OP_SysClient',221,1),(26521,64662,64677,'OP_ShowCreateFromRecipeUIMsg',222,1),(26522,64662,64677,'OP_CancelCreateFromRecipeMsg',223,1),(26523,64662,64677,'OP_BeginItemCreationMsg',224,1),(26524,64662,64677,'OP_StopItemCreationMsg',225,1),(26525,64662,64677,'OP_ShowItemCreationProcessUIMsg',226,1),(26526,64662,64677,'OP_UpdateItemCreationProcessUIMsg',227,1),(26527,64662,64677,'OP_DisplayTSEventReactionMsg',228,1),(26528,64662,64677,'OP_ShowRecipeBookMsg',229,1),(26529,64662,64677,'OP_KnowledgebaseRequestMsg',230,1),(26530,64662,64677,'OP_KnowledgebaseResponseMsg',231,1),(26531,64662,64677,'OP_CSTicketHeaderRequestMsg',232,1),(26532,64662,64677,'OP_CSTicketInfoMsg',233,1),(26533,64662,64677,'OP_CSTicketCommentRequestMsg',234,1),(26534,64662,64677,'OP_CSTicketCommentResponseMsg',235,1),(26535,64662,64677,'OP_CSTicketCreateMsg',236,1),(26536,64662,64677,'OP_CSTicketAddCommentMsg',237,1),(26537,64662,64677,'OP_CSTicketDeleteMsg',238,1),(26538,64662,64677,'OP_CSTicketChangeNotificationMsg',239,1),(26539,64662,64677,'OP_WorldDataUpdateMsg',240,1),(26540,64662,64677,'OP_KnownLanguagesMsg',242,1),(26541,64662,64677,'OP_LsRequestClientCrashLogMsg',243,1),(26542,64662,64677,'OP_LsClientBaselogReplyMsg',244,1),(26543,64662,64677,'OP_LsClientCrashlogReplyMsg',245,1),(26544,64662,64677,'OP_LsClientAlertlogReplyMsg',246,1),(26545,64662,64677,'OP_LsClientVerifylogReplyMsg',247,1),(26546,64662,64677,'OP_ClientTeleportToLocationMsg',248,1),(26547,64662,64677,'OP_UpdateClientPredFlagsMsg',249,1),(26548,64662,64677,'OP_ChangeServerControlFlagMsg',250,1),(26549,64662,64677,'OP_CSToolsRequestMsg',251,1),(26550,64662,64677,'OP_CSToolsResponseMsg',252,1),(26551,64662,64677,'OP_AddSocialStructureStandingMsg',253,1),(26552,64662,64677,'OP_CreateBoatTransportsMsg',254,1),(26553,64662,64677,'OP_PositionBoatTransportMsg',255,1),(26554,64662,64677,'OP_MigrateBoatTransportMsg',256,1),(26555,64662,64677,'OP_MigrateBoatTransportReplyMsg',257,1),(26556,64662,64677,'OP_DisplayDebugNLLPointsMsg',258,1),(26557,64662,64677,'OP_ExamineInfoRequestMsg',259,1),(26558,64662,64677,'OP_QuickbarInitMsg',260,1),(26559,64662,64677,'OP_QuickbarUpdateMsg',261,1),(26560,64662,64677,'OP_MacroInitMsg',262,1),(26561,64662,64677,'OP_MacroUpdateMsg',263,1),(26562,64662,64677,'OP_QuestionnaireMsg',264,1),(26563,64662,64677,'OP_LevelChangedMsg',265,1),(26564,64662,64677,'OP_SpellGainedMsg',266,1),(26565,64662,64677,'OP_EncounterBrokenMsg',267,1),(26566,64662,64677,'OP_OnscreenMsgMsg',268,1),(26567,64662,64677,'OP_DisplayWarningMsg',269,1),(26568,64662,64677,'OP_ModifyGuildMsg',270,1),(26569,64662,64677,'OP_GuildEventMsg',271,1),(26570,64662,64677,'OP_GuildEventAddMsg',272,1),(26571,64662,64677,'OP_GuildEventActionMsg',273,1),(26572,64662,64677,'OP_GuildEventListMsg',274,1),(26573,64662,64677,'OP_RequestGuildEventDetailsMsg',275,1),(26574,64662,64677,'OP_GuildEventDetailsMsg',276,1),(26575,64662,64677,'OP_RequestGuildInfoMsg',277,1),(26576,64662,64677,'OP_GuildBankActionMsg',278,1),(26577,64662,64677,'OP_GuildBankActionResponseMsg',279,1),(26578,64662,64677,'OP_GuildBankItemDetailsRequestMsg',280,1),(26579,64662,64677,'OP_GuildBankItemDetailsResponseMs',281,1),(26580,64662,64677,'OP_GuildBankUpdateMsg',282,1),(26581,64662,64677,'OP_GuildBankEventListMsg',283,1),(26582,64662,64677,'OP_RequestGuildBankEventDetailsMs',284,1),(26583,64662,64677,'OP_RewardPackMsg',285,1),(26584,64662,64677,'OP_RenameGuildMsg',286,1),(26585,64662,64677,'OP_ZoneToFriendRequestMsg',287,1),(26586,64662,64677,'OP_ZoneToFriendReplyMsg',288,1),(26587,64662,64677,'OP_ChatCreateChannelMsg',289,1),(26588,64662,64677,'OP_ChatJoinChannelMsg',290,1),(26589,64662,64677,'OP_ChatWhoChannelMsg',291,1),(26590,64662,64677,'OP_ChatLeaveChannelMsg',292,1),(26591,64662,64677,'OP_ChatTellChannelMsg',293,1),(26592,64662,64677,'OP_ChatTellUserMsg',294,1),(26593,64662,64677,'OP_ChatToggleFriendMsg',295,1),(26594,64662,64677,'OP_BrokerAddBag',296,1),(26595,64662,64677,'OP_BrokerRemoveBag',297,1),(26596,64662,64677,'OP_ChatToggleIgnoreMsg',298,1),(26597,64662,64677,'OP_ChatSendFriendsMsg',299,1),(26598,64662,64677,'OP_ChatSendIgnoresMsg',300,1),(26599,64662,64677,'OP_QuestReward',324,1),(26600,64662,64677,'OP_ChatFiltersMsg',338,1),(26601,64662,64677,'OP_MailGetMessageMsg',342,1),(26602,64662,64677,'OP_MailSendMessageMsg',343,1),(26603,64662,64677,'OP_MailDeleteMessageMsg',344,1),(26604,64662,64677,'OP_MailGetHeadersReplyMsg',345,1),(26605,64662,64677,'OP_MailGetMessageReplyMsg',346,1),(26606,64662,64677,'OP_MailSendMessageReplyMsg',347,1),(26607,64662,64677,'OP_MailCommitSendMessageMsg',348,1),(26608,64662,64677,'OP_MailSendSystemMessageMsg',349,1),(26609,64662,64677,'OP_MailRemoveAttachFromMailMsg',350,1),(26610,64662,64677,'OP_WaypointRequestMsg',352,1),(26611,64662,64677,'OP_WaypointReplyMsg',353,1),(26612,64662,64677,'OP_WaypointSelectMsg',354,1),(26613,64662,64677,'OP_WaypointUpdateMsg',355,1),(26614,64662,64677,'OP_CharNameChangedMsg',356,1),(26615,64662,64677,'OP_ShowZoneTeleporterDestinations',357,1),(26616,64662,64677,'OP_SelectZoneTeleporterDestinatio',358,1),(26617,64662,64677,'OP_ReloadLocalizedTxtMsg',359,1),(26618,64662,64677,'OP_RequestGuildMembershipMsg',360,1),(26619,64662,64677,'OP_GuildMembershipResponseMsg',361,1),(26620,64662,64677,'OP_LeaveGuildNotifyMsg',362,1),(26621,64662,64677,'OP_JoinGuildNotifyMsg',363,1),(26622,64662,64677,'OP_AvatarUpdateMsg',364,1),(26623,64662,64677,'OP_BioUpdateMsg',366,1),(26624,64662,64677,'OP_InspectPlayerMsg',367,1),(26625,64662,64677,'OP_WSServerLockMsg',368,1),(26626,64662,64677,'OP_LSServerLockMsg',369,1),(26627,64662,64677,'OP_WSServerHideMsg',370,1),(26628,64662,64677,'OP_CsCategoryRequestMsg',371,1),(26629,64662,64677,'OP_CsCategoryResponseMsg',372,1),(26630,64662,64677,'OP_KnowledgeWindowSlotMappingMsg',373,1),(26631,64662,64677,'OP_AFKUpdateMsg',374,1),(26632,64662,64677,'OP_AnonUpdateMsg',375,1),(26633,64662,64677,'OP_UpdateActivePublicZonesMsg',376,1),(26634,64662,64677,'OP_UnknownNpcMsg',377,1),(26635,64662,64677,'OP_PromoFlagsDetailsMsg',378,1),(26636,64662,64677,'OP_ConsignViewCreateMsg',379,1),(26637,64662,64677,'OP_ConsignViewGetPageMsg',380,1),(26638,64662,64677,'OP_ConsignViewReleaseMsg',381,1),(26639,64662,64677,'OP_ConsignRemoveItemsMsg',382,1),(26640,64662,64677,'OP_UpdateDebugRadiiMsg',383,1),(26641,64662,64677,'OP_ReportMsg',384,1),(26642,64662,64677,'OP_UpdateRaidMsg',385,1),(26643,64662,64677,'OP_ConsignViewSortMsg',387,1),(26644,64662,64677,'OP_TitleUpdateMsg',388,1),(26645,64662,64677,'OP_ClientFellMsg',389,1),(26646,64662,64677,'OP_ClientInDeathRegionMsg',390,1),(26647,64662,64677,'OP_CampClientMsg',391,1),(26648,64662,64677,'OP_UpdateGroupMemberDataMsg',392,1),(26649,64662,64677,'OP_CSToolAccessResponseMsg',392,1),(26650,64662,64677,'OP_TrackingUpdateMsg',393,1),(26651,64662,64677,'OP_BeginTrackingMsg',394,1),(26652,64662,64677,'OP_StopTrackingMsg',395,1),(26653,64662,64677,'OP_GetAvatarAccessRequestForCSToo',397,1),(26654,64662,64677,'OP_AdvancementRequestMsg',398,1),(26655,64662,64677,'OP_MapFogDataInitMsg',399,1),(26656,64662,64677,'OP_MapFogDataUpdateMsg',400,1),(26657,64662,64677,'OP_CloseGroupInviteWindowMsg',401,1),(26658,64662,64677,'OP_WorldPingMsg',404,1),(26659,64662,64677,'OP_MoveLogUpdateMsg',405,1),(26660,64662,64677,'OP_OfferQuestMsg',406,1),(26661,64662,64677,'OP_WorldShutdownUpdateMsg',408,1),(26662,64662,64677,'OP_DisplayMailScreenMsg',409,1),(26663,64662,64677,'OP_ClientIdleBeginMsg',410,1),(26664,64662,64677,'OP_ClientIdleEndMsg',411,1),(26665,64662,64677,'OP_PurchaseConsignmentLoreCheckRe',412,1),(26666,64662,64677,'OP_NotifyApprenticeStoppedMentori',413,1),(26667,64662,64677,'OP_CorruptedClientMsg',414,1),(26668,64662,64677,'OP_WorldDataChangeMsg',415,1),(26669,64662,64677,'OP_MailEventNotificationMsg',416,1),(26670,64662,64677,'OP_RestartZoneMsg',417,1),(26671,64662,64677,'OP_FlightPathsMsg',418,1),(26672,64662,64677,'OP_CharacterLinkdeadMsg',419,1),(26673,64662,64677,'OP_CharTransferStartRequestMsg',420,1),(26674,64662,64677,'OP_CharTransferStartReplyMsg',421,1),(26675,64662,64677,'OP_CharTransferRequestMsg',422,1),(26676,64662,64677,'OP_CharTransferReplyMsg',423,1),(26677,64662,64677,'OP_CharTransferRollbackRequestMsg',424,1),(26678,64662,64677,'OP_CharTransferCommitRequestMsg',425,1),(26679,64662,64677,'OP_CharTransferRollbackReplyMsg',426,1),(26680,64662,64677,'OP_CharTransferCommitReplyMsg',427,1),(26681,64662,64677,'OP_GetCharacterSerializedRequestM',428,1),(26682,64662,64677,'OP_GetCharacterSerializedReplyMsg',429,1),(26683,64662,64677,'OP_CreateCharFromCBBRequestMsg',430,1),(26684,64662,64677,'OP_CreateCharFromCBBReplyMsg',431,1),(26685,64662,64677,'OP_HousingDataChangedMsg',432,1),(26686,64662,64677,'OP_HousingRestoreMsg',433,1),(26687,64662,64677,'OP_AuctionItem',434,1),(26688,64662,64677,'OP_AuctionItemReply',435,1),(26689,64662,64677,'OP_AuctionCoin',436,1),(26690,64662,64677,'OP_AuctionCoinReply',437,1),(26691,64662,64677,'OP_AuctionCharacter',438,1),(26692,64662,64677,'OP_AuctionCharacterReply',439,1),(26693,64662,64677,'OP_AuctionCommitMsg',440,1),(26694,64662,64677,'OP_AuctionAbortMsg',441,1),(26695,64662,64677,'OP_CharTransferValidateRequestMsg',442,1),(26696,64662,64677,'OP_CharTransferValidateReplyMsg',443,1),(26697,64662,64677,'OP_RaceRestrictionMsg',444,1),(26698,64662,64677,'OP_SetInstanceDisplayNameMsg',445,1),(26699,64662,64677,'OP_GetAuctionAssetIDMsg',446,1),(26700,64662,64677,'OP_GetAuctionAssetIDReplyMsg',447,1),(26701,64662,64677,'OP_ResendWorldChannelsMsg',448,1),(26702,64662,64677,'OP_DisplayExchangeScreenMsg',449,1),(26703,64662,64677,'OP_ArenaGameTypesMsg',450,1),(26704,64662,64677,'OP_AuditAuctionEventMsg',451,1),(26705,64662,64677,'OP_InviteRequestMsg',452,1),(26706,64662,64677,'OP_InviteResponseMsg',453,1),(26707,64662,64677,'OP_InviteTargetResponseMsg',454,1),(26708,64662,64677,'OP_InspectPlayerRequestMsg',455,1),(26709,64662,64677,'OP_DispatchMsg',456,1),(26710,64662,64677,'OP_DisplayEventMsg',457,1),(26711,64662,64677,'OP_PrePossessionMsg',458,1),(26712,64662,64677,'OP_PostPossessionMsg',459,1),(26713,64662,64677,'OP_ArenaCreate',461,1),(26714,64662,64677,'OP_ArenaList',462,1),(26715,64662,64677,'OP_ArenaWindow',470,1),(26716,64662,64677,'OP_HouseItemsList',489,1),(26717,64662,64677,'OP_CurrentPet',490,1),(26718,64662,64677,'OP_EarlyLandingRequestMsg',491,1),(26719,64662,64677,'OP_AdventureList',494,1),(26720,64662,64677,'OP_CancelSpellCast',495,1),(26721,64662,64677,'OP_ClearForLandingMsg',497,1),(26722,64662,64677,'OP_UpdateTitleCmd',500,1),(26723,64662,64677,'OP_AttackAllowed',506,1),(26724,64662,64677,'OP_AttackNotAllowed',507,1),(26725,64662,64677,'OP_BagOptions',508,1),(26726,64662,64677,'OP_LFGGroupSearch',510,1),(26727,64662,64677,'OP_CharacterHousingList',513,1),(26728,64662,64677,'OP_DressingRoom',516,1),(26729,64662,64677,'OP_PlayLon',517,1),(26730,64662,64677,'OP_SkillInfoRequest',519,1),(26731,64662,64677,'OP_SkillInfoResponse',520,1),(26732,64662,64677,'OP_LFGUpdateMsg',523,1),(26733,64662,64677,'OP_BadLanguageFilter',524,1),(26734,64662,64677,'OP_VoiceChatChannel',525,1),(26735,64662,64677,'OP_MapRequest',526,1),(26736,64662,64677,'OP_MarketFundsUpdate',531,1),(26737,64662,64677,'OP_UIEvent',532,1),(26738,64662,64677,'OP_MarketAddFundsRequest',533,1),(26739,64662,64677,'OP_MarketAddFundsReply',534,1),(26740,64662,64677,'OP_MarketPurchase',536,1),(26741,64662,64677,'OP_MarketPlacePrices',537,1),(26742,64662,64677,'OP_MarketPlaceItems',544,1),(26743,64662,64677,'OP_RecipeBook',545,1),(26744,64662,64677,'OP_CreateCharacterDungeon',552,1),(26745,64662,64677,'OP_DungeonMakerEnter',553,1),(26746,64662,64677,'OP_DungeonMakerItemRequest',557,1),(26747,64662,64677,'OP_CharacterCreatedDungeons',558,1),(26748,64662,64677,'OP_DungeonMakerToolboxList',559,1),(26749,64662,64677,'OP_DungeonMakerUnknown',560,1),(26750,64662,64677,'OP_DungeonMakerUnknown1',561,1),(26751,64662,64677,'OP_PlayerPollPopup',563,1),(26752,64662,64677,'OP_PlayerPollAnswer',564,1),(26753,64662,64677,'OP_MentorPopup',565,1),(26754,64662,64677,'OP_LoadWelcomeWindow',567,1),(26755,64662,64677,'OP_OpenCharCust',569,1),(26756,64662,64677,'OP_SubmitCharCust',570,1),(26757,64662,64677,'OP_QueAllBgSolo',572,1),(26758,64662,64677,'OP_ZoneBgInstanceList',573,1),(26759,64662,64677,'OP_WorldTravelAvail',577,1),(26760,64662,64677,'OP_Launchpad',580,1),(26761,64662,64677,'OP_PaperdollImage',582,1),(26762,64662,64677,'OP_LoadCalendarEvents',583,1),(26763,64662,64677,'OP_VideoUploaded',584,1),(26764,64662,64677,'OP_SavageBarInitMsg',585,1),(26765,64662,64677,'OP_PetOptionsResponse',586,1),(26766,64662,64677,'OP_DungeonMakerItemResponse',587,1),(26767,64662,64677,'OP_Weakness',588,1),(26768,64662,64677,'OP_CharacterMounts',589,1),(26769,64662,64677,'OP_RecipeListUnknown',598,1),(26770,64662,64677,'OP_DailyObjectives',602,1),(26771,64662,64677,'OP_DeityAbilityWindow',622,1),(26772,64662,64677,'OP_EqBetaCopyRequest',640,1),(26773,64662,64677,'OP_SOEAllAccess',644,1),(26774,64662,64677,'OP_EqHearChatCmd',644,1),(26775,64662,64677,'OP_EqDisplayTextCmd',645,1),(26776,64662,64677,'OP_EqCreateGhostCmd',646,1),(26777,64662,64677,'OP_EqCreateWidgetCmd',647,1),(26778,64662,64677,'OP_EqCreateSignWidgetCmd',648,1),(26779,64662,64677,'OP_EqDestroyGhostCmd',649,1),(26780,64662,64677,'OP_EqUpdateGhostCmd',650,1),(26781,64662,64677,'OP_EqSetControlGhostCmd',651,1),(26782,64662,64677,'OP_EqSetPOVGhostCmd',652,1),(26783,64662,64677,'OP_EqHearCombatCmd',653,1),(26784,64662,64677,'OP_EqHearSpellCastCmd',654,1),(26785,64662,64677,'OP_EQHearProcCmd',655,1),(26786,64662,64677,'OP_EQHearResEffectCmd',656,1),(26787,64662,64677,'OP_EqHearSpellInterruptCmd',657,1),(26788,64662,64677,'OP_EqHearSpellFizzleCmd',658,1),(26789,64662,64677,'OP_EqHearConsiderCmd',659,1),(26790,64662,64677,'OP_EqUpdateSubClassesCmd',660,1),(26791,64662,64677,'OP_EqCreateListBoxCmd',661,1),(26792,64662,64677,'OP_EqSetDebugPathPointsCmd',662,1),(26793,64662,64677,'OP_EqCannedEmoteCmd',664,1),(26794,64662,64677,'OP_EqStateCmd',665,1),(26795,64662,64677,'OP_EqPlaySoundCmd',666,1),(26796,64662,64677,'OP_EqPlaySound3DCmd',667,1),(26797,64662,64677,'OP_EqPlayVoiceCmd',668,1),(26798,64662,64677,'OP_EqHearDrowningCmd',669,1),(26799,64662,64677,'OP_EqHearDeathCmd',670,1),(26800,64662,64677,'OP_EqGroupMemberRemovedCmd',671,1),(26801,64662,64677,'OP_EqHearChainEffectCmd',672,1),(26802,64662,64677,'OP_EqReceiveOfferCmd',673,1),(26803,64662,64677,'OP_EqInspectPCResultsCmd',674,1),(26804,64662,64677,'OP_EqDrawablePathGraphCmd',675,1),(26805,64662,64677,'OP_EqDialogOpenCmd',676,1),(26806,64662,64677,'OP_EqDialogCloseCmd',677,1),(26807,64662,64677,'OP_EqFactionUpdateCmd',678,1),(26808,64662,64677,'OP_EqCollectionUpdateCmd',679,1),(26809,64662,64677,'OP_EqCollectionFilterCmd',680,1),(26810,64662,64677,'OP_EqCollectionItemCmd',681,1),(26811,64662,64677,'OP_EqQuestJournalUpdateCmd',682,1),(26812,64662,64677,'OP_EqMentoring',683,1),(26813,64662,64677,'OP_EqQuestJournalReplyCmd',684,1),(26814,64662,64677,'OP_EqQuestGroupCmd',685,1),(26815,64662,64677,'OP_EqUpdateMerchantCmd',686,1),(26816,64662,64677,'OP_EqUpdateStoreCmd',687,1),(26817,64662,64677,'OP_EqUpdatePlayerTradeCmd',688,1),(26818,64662,64677,'OP_EqHelpPathCmd',689,1),(26819,64662,64677,'OP_EqHelpPathClearCmd',690,1),(26820,64662,64677,'OP_EqUpdateBankCmd',691,1),(26821,64662,64677,'OP_EqExamineInfoCmd',692,1),(26822,64662,64677,'OP_EqCloseWindowCmd',693,1),(26823,64662,64677,'OP_EqUpdateLootCmd',694,1),(26824,64662,64677,'OP_EqJunctionListCmd',695,1),(26825,64662,64677,'OP_EqShowDeathWindowCmd',696,1),(26826,64662,64677,'OP_EqDisplaySpellFailCmd',697,1),(26827,64662,64677,'OP_EqSpellCastStartCmd',698,1),(26828,64662,64677,'OP_EqSpellCastEndCmd',699,1),(26829,64662,64677,'OP_EqResurrectedCmd',700,1),(26830,64662,64677,'OP_EqChoiceWinCmd',701,1),(26831,64662,64677,'OP_EqSetDefaultVerbCmd',702,1),(26832,64662,64677,'OP_EqInstructionWindowCmd',703,1),(26833,64662,64677,'OP_EqInstructionWindowCloseCmd',704,1),(26834,64662,64677,'OP_EqInstructionWindowGoalCmd',705,1),(26835,64662,64677,'OP_EqInstructionWindowTaskCmd',706,1),(26836,64662,64677,'OP_EqEnableGameEventCmd',707,1),(26837,64662,64677,'OP_EqShowWindowCmd',708,1),(26838,64662,64677,'OP_EqEnableWindowCmd',709,1),(26839,64662,64677,'OP_EqFlashWindowCmd',710,1),(26840,64662,64677,'OP_EqHearPlayFlavorCmd',712,1),(26841,64662,64677,'OP_EqUpdateSignWidgetCmd',713,1),(26842,64662,64677,'OP_EqDebugPVDCmd',714,1),(26843,64662,64677,'OP_EqShowBookCmd',715,1),(26844,64662,64677,'OP_EqQuestionnaireCmd',716,1),(26845,64662,64677,'OP_EqGetProbsCmd',718,1),(26846,64662,64677,'OP_EqHearHealCmd',719,1),(26847,64662,64677,'OP_EqChatChannelUpdateCmd',720,1),(26848,64662,64677,'OP_EqWhoChannelQueryReplyCmd',721,1),(26849,64662,64677,'OP_EqAvailWorldChannelsCmd',722,1),(26850,64662,64677,'OP_EqUpdateTargetCmd',723,1),(26851,64662,64677,'OP_BrokerSellList',724,1),(26852,64662,64677,'OP_EqConsignmentItemsCmd',725,1),(26853,64662,64677,'OP_EqStartBrokerCmd',727,1),(26854,64662,64677,'OP_EqMapExplorationCmd',728,1),(26855,64662,64677,'OP_EqStoreLogCmd',729,1),(26856,64662,64677,'OP_EqSpellMoveToRangeAndRetryCmd',730,1),(26857,64662,64677,'OP_EqUpdatePlayerMailCmd',731,1),(26858,64662,64677,'OP_GuildStatusUpdate',734,1),(26859,64662,64677,'OP_EqArenaResultsCmd',735,1),(26860,64662,64677,'OP_EqGuildBankEventActionCmd',736,1),(26861,64662,64677,'OP_EqGuildBankExamineInfoCmd',737,1),(26862,64662,64677,'OP_EqHearSpellNoLandCmd',738,1),(26863,64662,64677,'OP_Lottery',739,1),(26864,64662,64677,'OP_GuildRecruitingMemberInfo',740,1),(26865,64662,64677,'OP_GuildRecruiting',741,1),(26866,64662,64677,'OP_GuildRecruitingDetails',742,1),(26867,64662,64677,'OP_GuildRecruitingImage',743,1),(26868,64662,64677,'OP_TradeskillList',744,1),(26869,64662,64677,'OP_CharRenamed',745,1),(26870,64662,64677,'OP_UseAdornment',755,1),(26871,64662,64677,'OP_ExpPurchWindow',761,1),(26872,64662,64677,'OP_PointOfInterest',765,1),(26873,64662,64677,'OP_PointOfInterest2',766,1),(26874,64662,64677,'OP_TraitsList',767,1),(26875,64662,64677,'OP_CustomizeHouseDisplay',770,1),(26876,64662,64677,'OP_VoiceChatServer',771,1),(26877,64662,64677,'OP_SupplyDepot',775,1),(26878,64662,64677,'OP_EQHearThreatCmd',776,1),(26879,64662,64677,'OP_RecipeList',777,1),(26880,64662,64677,'OP_Research',778,1),(26881,64662,64677,'OP_CharacterCurrency',779,1),(26882,64662,64677,'OP_CharacterAchievements',780,1),(26883,64662,64677,'OP_AchievementUpdateMsg',781,1),(26884,64662,64677,'OP_EQHearDispellCmd',782,1),(26885,64662,64677,'OP_JournalQuestStoryline',783,1),(26886,64662,64677,'OP_DungeonPlayAsAvatarList',784,1),(26887,64662,64677,'OP_DungeonPlayAsAvatarSelected',785,1),(26888,64662,64677,'OP_MercHireWindow',787,1),(26889,64662,64677,'OP_MercUnknown',788,1),(26890,64662,64677,'OP_Unknown',801,1),(26891,64662,64677,'OP_HeritageMsg',10027,1),(27355,64678,64724,'OP_LoginRequestMsg',0,1),(27356,64678,64724,'OP_LoginByNumRequestMsg',1,1),(27357,64678,64724,'OP_WSLoginRequestMsg',2,1),(27358,64678,64724,'OP_ESLoginRequestMsg',3,1),(27359,64678,64724,'OP_LoginReplyMsg',4,1),(27360,64678,64724,'OP_WSStatusReplyMsg',5,1),(27361,64678,64724,'OP_WorldStatusChangeMsg',6,1),(27362,64678,64724,'OP_AllWSDescRequestMsg',7,1),(27363,64678,64724,'OP_WorldListMsg',8,1),(27364,64678,64724,'OP_AllCharactersDescRequestMsg',9,1),(27365,64678,64724,'OP_AllCharactersDescReplyMsg',10,1),(27366,64678,64724,'OP_CreateCharacterRequestMsg',11,1),(27367,64678,64724,'OP_CreateCharacterReplyMsg',12,1),(27368,64678,64724,'OP_WSCreateCharacterRequestMsg',13,1),(27369,64678,64724,'OP_WSCreateCharacterReplyMsg',14,1),(27370,64678,64724,'OP_ReskinCharacterRequestMsg',15,1),(27371,64678,64724,'OP_DeleteCharacterRequestMsg',18,1),(27372,64678,64724,'OP_DeleteCharacterReplyMsg',19,1),(27373,64678,64724,'OP_PlayCharacterRequestMsg',20,1),(27374,64678,64724,'OP_PlayCharacterReplyMsg',21,1),(27375,64678,64724,'OP_ExpectClientAsCharacterReplyMs',24,1),(27376,64678,64724,'OP_ServerPlayCharacterRequestMsg',25,1),(27377,64678,64724,'OP_ServerPlayCharacterReplyMsg',26,1),(27378,64678,64724,'OP_ESInitMsg',27,1),(27379,64678,64724,'OP_ESReadyForClientsMsg',28,1),(27380,64678,64724,'OP_CreateZoneInstanceMsg',31,1),(27381,64678,64724,'OP_ZoneInstanceCreateReplyMsg',32,1),(27382,64678,64724,'OP_ZoneInstanceDestroyedMsg',33,1),(27383,64678,64724,'OP_ExpectClientAsCharacterRequest',34,1),(27384,64678,64724,'OP_ZoneInfoMsg',35,1),(27385,64678,64724,'OP_DoneLoadingZoneResourcesMsg',36,1),(27386,64678,64724,'OP_DoneSendingInitialEntitiesMsg',37,1),(27387,64678,64724,'OP_DoneLoadingEntityResourcesMsg',38,1),(27388,64678,64724,'OP_PredictionUpdateMsg',39,1),(27389,64678,64724,'OP_UpdatePositionMsg',41,1),(27390,64678,64724,'OP_SetRemoteCmdsMsg',43,1),(27391,64678,64724,'OP_RemoteCmdMsg',44,1),(27392,64678,64724,'OP_GameWorldTimeMsg',45,1),(27393,64678,64724,'OP_MOTDMsg',46,1),(27394,64678,64724,'OP_ZoneMOTDMsg',47,1),(27395,64678,64724,'OP_AvatarCreatedMsg',48,1),(27396,64678,64724,'OP_AvatarDestroyedMsg',49,1),(27397,64678,64724,'OP_RequestCampMsg',52,1),(27398,64678,64724,'OP_CampStartedMsg',53,1),(27399,64678,64724,'OP_CampAbortedMsg',54,1),(27400,64678,64724,'OP_WhoQueryRequestMsg',55,1),(27401,64678,64724,'OP_WhoQueryReplyMsg',56,1),(27402,64678,64724,'OP_MonitorReplyMsg',57,1),(27403,64678,64724,'OP_MonitorCharacterListMsg',58,1),(27404,64678,64724,'OP_MonitorCharacterListRequestMsg',59,1),(27405,64678,64724,'OP_ClientCmdMsg',60,1),(27406,64678,64724,'OP_DispatchESMsg',61,1),(27407,64678,64724,'OP_DispatchClientCmdMsg',62,1),(27408,64678,64724,'OP_UpdateTargetMsg',63,1),(27409,64678,64724,'OP_UpdateTargetLocMsg',64,1),(27410,64678,64724,'OP_UpdateCharacterSheetMsg',65,1),(27411,64678,64724,'OP_CharacterPet',66,1),(27412,64678,64724,'OP_CharacterMerc',67,1),(27413,64678,64724,'OP_UpdateSpellBookMsg',68,1),(27414,64678,64724,'OP_UpdateInventoryMsg',70,1),(27415,64678,64724,'OP_AfterInvSpellUpdate',71,1),(27416,64678,64724,'OP_UpdateRecipeBookMsg',72,1),(27417,64678,64724,'OP_RequestRecipeDetailsMsg',73,1),(27418,64678,64724,'OP_RecipeDetailsMsg',74,1),(27419,64678,64724,'OP_UpdateSkillBookMsg',75,1),(27420,64678,64724,'OP_UpdateSkillsMsg',76,1),(27421,64678,64724,'OP_UpdateOpportunityMsg',77,1),(27422,64678,64724,'OP_ChangeZoneMsg',79,1),(27423,64678,64724,'OP_ClientTeleportRequestMsg',80,1),(27424,64678,64724,'OP_TeleportWithinZoneMsg',81,1),(27425,64678,64724,'OP_TeleportWithinZoneNoReloadMsg',82,1),(27426,64678,64724,'OP_MigrateClientToZoneRequestMsg',83,1),(27427,64678,64724,'OP_MigrateClientToZoneReplyMsg',84,1),(27428,64678,64724,'OP_ReadyToZoneMsg',86,1),(27429,64678,64724,'OP_RemoveClientFromGroupMsg',87,1),(27430,64678,64724,'OP_RemoveGroupFromGroupMsg',88,1),(27431,64678,64724,'OP_MakeGroupLeaderMsg',89,1),(27432,64678,64724,'OP_GroupCreatedMsg',90,1),(27433,64678,64724,'OP_GroupDestroyedMsg',91,1),(27434,64678,64724,'OP_GroupMemberAddedMsg',92,1),(27435,64678,64724,'OP_GroupMemberRemovedMsg',93,1),(27436,64678,64724,'OP_GroupRemovedFromGroupMsg',94,1),(27437,64678,64724,'OP_GroupLeaderChangedMsg',95,1),(27438,64678,64724,'OP_GroupResendOOZDataMsg',96,1),(27439,64678,64724,'OP_GroupSettingsChangedMsg',97,1),(27440,64678,64724,'OP_OutOfZoneMemberDataMsg',98,1),(27441,64678,64724,'OP_SendLatestRequestMsg',99,1),(27442,64678,64724,'OP_ClearDataMsg',100,1),(27443,64678,64724,'OP_SetSocialMsg',101,1),(27444,64678,64724,'OP_ESStatusMsg',102,1),(27445,64678,64724,'OP_ESZoneInstanceStatusMsg',103,1),(27446,64678,64724,'OP_ZonesStatusRequestMsg',104,1),(27447,64678,64724,'OP_ZonesStatusMsg',105,1),(27448,64678,64724,'OP_ESWeatherRequestMsg',106,1),(27449,64678,64724,'OP_ESWeatherRequestEndMsg',107,1),(27450,64678,64724,'OP_DialogSelectMsg',111,1),(27451,64678,64724,'OP_DialogCloseMsg',112,1),(27452,64678,64724,'OP_RemoveSpellEffectMsg',113,1),(27453,64678,64724,'OP_RemoveConcentrationMsg',114,1),(27454,64678,64724,'OP_QuestJournalOpenMsg',115,1),(27455,64678,64724,'OP_QuestJournalInspectMsg',116,1),(27456,64678,64724,'OP_QuestJournalSetVisibleMsg',117,1),(27457,64678,64724,'OP_QuestJournalWaypointMsg',118,1),(27458,64678,64724,'OP_CreateGuildRequestMsg',121,1),(27459,64678,64724,'OP_CreateGuildReplyMsg',123,1),(27460,64678,64724,'OP_GuildsayMsg',124,1),(27461,64678,64724,'OP_FellowshipExpMsg',125,1),(27462,64678,64724,'OP_DeleteGuildMsg',126,1),(27463,64678,64724,'OP_GuildUpdateMsg',127,1),(27464,64678,64724,'OP_ConsignmentCloseStoreMsg',128,1),(27465,64678,64724,'OP_ConsignItemRequestMsg',129,1),(27466,64678,64724,'OP_ConsignItemResponseMsg',130,1),(27467,64678,64724,'OP_PurchaseConsignmentRequestMsg',131,1),(27468,64678,64724,'OP_LikeOption',139,1),(27469,64678,64724,'OP_PublishHouse',141,1),(27470,64678,64724,'OP_PlayerMadeInstancesScreen',142,1),(27471,64678,64724,'OP_PlayerMadeInstances',143,1),(27472,64678,64724,'OP_HouseDeletedRemotelyMsg',145,1),(27473,64678,64724,'OP_UpdateHouseDataMsg',146,1),(27474,64678,64724,'OP_UpdateHouseAccessDataMsg',147,1),(27475,64678,64724,'OP_PlayerHouseBaseScreenMsg',148,1),(27476,64678,64724,'OP_PlayerHousePurchaseScreenMsg',149,1),(27477,64678,64724,'OP_PlayerHouseAccessUpdateMsg',150,1),(27478,64678,64724,'OP_PlayerHouseDisplayStatusMsg',151,1),(27479,64678,64724,'OP_PlayerHouseCloseUIMsg',152,1),(27480,64678,64724,'OP_BuyPlayerHouseMsg',153,1),(27481,64678,64724,'OP_BuyPlayerHouseTintMsg',154,1),(27482,64678,64724,'OP_CollectAllHouseItemsMsg',155,1),(27483,64678,64724,'OP_RelinquishHouseMsg',156,1),(27484,64678,64724,'OP_EnterHouseMsg',157,1),(27485,64678,64724,'OP_ExitHouseMsg',158,1),(27486,64678,64724,'OP_HouseDefaultAccessSetMsg',159,1),(27487,64678,64724,'OP_HouseAccessSetMsg',160,1),(27488,64678,64724,'OP_HouseAccessRemoveMsg',161,1),(27489,64678,64724,'OP_PayHouseUpkeepMsg',162,1),(27490,64678,64724,'OP_MoveableObjectPlacementCriteri',163,1),(27491,64678,64724,'OP_EnterMoveObjectModeMsg',164,1),(27492,64678,64724,'OP_PositionMoveableObject',165,1),(27493,64678,64724,'OP_CancelMoveObjectModeMsg',166,1),(27494,64678,64724,'OP_ShaderCustomizationMsg',167,1),(27495,64678,64724,'OP_ReplaceableSubMeshesMsg',168,1),(27496,64678,64724,'OP_HouseCustomizationScreenMsg',169,1),(27497,64678,64724,'OP_CustomizationPurchaseRequestMs',170,1),(27498,64678,64724,'OP_CustomizationSetRequestMsg',171,1),(27499,64678,64724,'OP_CustomizationReplyMsg',172,1),(27500,64678,64724,'OP_TintWidgetsMsg',173,1),(27501,64678,64724,'OP_ExamineConsignmentRequestMsg',174,1),(27502,64678,64724,'OP_ExamineConsignmentResponseMsg',175,1),(27503,64678,64724,'OP_UISettingsResponseMsg',176,1),(27504,64678,64724,'OP_UIResetMsg',177,1),(27505,64678,64724,'OP_KeymapLoadMsg',178,1),(27506,64678,64724,'OP_KeymapNoneMsg',179,1),(27507,64678,64724,'OP_KeymapDataMsg',180,1),(27508,64678,64724,'OP_KeymapSaveMsg',181,1),(27509,64678,64724,'OP_DispatchSpellCmdMsg',182,1),(27510,64678,64724,'OP_EntityVerbsRequestMsg',183,1),(27511,64678,64724,'OP_EntityVerbsReplyMsg',184,1),(27512,64678,64724,'OP_EntityVerbsVerbMsg',185,1),(27513,64678,64724,'OP_ChatRelationshipUpdateMsg',187,1),(27514,64678,64724,'OP_LootItemsRequestMsg',188,1),(27515,64678,64724,'OP_StoppedLootingMsg',189,1),(27516,64678,64724,'OP_SitMsg',190,1),(27517,64678,64724,'OP_StandMsg',191,1),(27518,64678,64724,'OP_SatMsg',192,1),(27519,64678,64724,'OP_StoodMsg',193,1),(27520,64678,64724,'OP_ClearForTakeOffMsg',194,1),(27521,64678,64724,'OP_ReadyForTakeOffMsg',195,1),(27522,64678,64724,'OP_ShowIllusionsMsg',196,1),(27523,64678,64724,'OP_HideIllusionsMsg',197,1),(27524,64678,64724,'OP_ExamineItemRequestMsg',198,1),(27525,64678,64724,'OP_ReadBookPageMsg',199,1),(27526,64678,64724,'OP_DefaultGroupOptionsRequestMsg',200,1),(27527,64678,64724,'OP_DefaultGroupOptionsMsg',201,1),(27528,64678,64724,'OP_GroupOptionsMsg',202,1),(27529,64678,64724,'OP_DisplayGroupOptionsScreenMsg',203,1),(27530,64678,64724,'OP_PetOptions',204,1),(27531,64678,64724,'OP_DisplayInnVisitScreenMsg',205,1),(27532,64678,64724,'OP_DumpSchedulerMsg',206,1),(27533,64678,64724,'OP_LSCheckAcctLockMsg',207,1),(27534,64678,64724,'OP_WSAcctLockStatusMsg',208,1),(27535,64678,64724,'OP_RequestHelpRepathMsg',209,1),(27536,64678,64724,'OP_RequestTargetLocMsg',210,1),(27537,64678,64724,'OP_UpdateMotdMsg',211,1),(27538,64678,64724,'OP_DestUpdateReq',213,1),(27539,64678,64724,'OP_PerformPlayerKnockbackMsg',216,1),(27540,64678,64724,'OP_PerformCameraShakeMsg',217,1),(27541,64678,64724,'OP_PopulateSkillMapsMsg',218,1),(27542,64678,64724,'OP_CancelledFeignMsg',219,1),(27543,64678,64724,'OP_SysClient',221,1),(27544,64678,64724,'OP_ShowCreateFromRecipeUIMsg',222,1),(27545,64678,64724,'OP_CancelCreateFromRecipeMsg',223,1),(27546,64678,64724,'OP_BeginItemCreationMsg',224,1),(27547,64678,64724,'OP_StopItemCreationMsg',225,1),(27548,64678,64724,'OP_ShowItemCreationProcessUIMsg',226,1),(27549,64678,64724,'OP_UpdateItemCreationProcessUIMsg',227,1),(27550,64678,64724,'OP_DisplayTSEventReactionMsg',228,1),(27551,64678,64724,'OP_ShowRecipeBookMsg',229,1),(27552,64678,64724,'OP_KnowledgebaseRequestMsg',230,1),(27553,64678,64724,'OP_KnowledgebaseResponseMsg',231,1),(27554,64678,64724,'OP_CSTicketHeaderRequestMsg',232,1),(27555,64678,64724,'OP_CSTicketInfoMsg',233,1),(27556,64678,64724,'OP_CSTicketCommentRequestMsg',234,1),(27557,64678,64724,'OP_CSTicketCommentResponseMsg',235,1),(27558,64678,64724,'OP_CSTicketCreateMsg',236,1),(27559,64678,64724,'OP_CSTicketAddCommentMsg',237,1),(27560,64678,64724,'OP_CSTicketDeleteMsg',238,1),(27561,64678,64724,'OP_CSTicketChangeNotificationMsg',239,1),(27562,64678,64724,'OP_WorldDataUpdateMsg',240,1),(27563,64678,64724,'OP_KnownLanguagesMsg',242,1),(27564,64678,64724,'OP_LsRequestClientCrashLogMsg',243,1),(27565,64678,64724,'OP_LsClientBaselogReplyMsg',244,1),(27566,64678,64724,'OP_LsClientCrashlogReplyMsg',245,1),(27567,64678,64724,'OP_LsClientAlertlogReplyMsg',246,1),(27568,64678,64724,'OP_LsClientVerifylogReplyMsg',247,1),(27569,64678,64724,'OP_ClientTeleportToLocationMsg',248,1),(27570,64678,64724,'OP_UpdateClientPredFlagsMsg',249,1),(27571,64678,64724,'OP_ChangeServerControlFlagMsg',250,1),(27572,64678,64724,'OP_CSToolsRequestMsg',251,1),(27573,64678,64724,'OP_CSToolsResponseMsg',252,1),(27574,64678,64724,'OP_AddSocialStructureStandingMsg',253,1),(27575,64678,64724,'OP_CreateBoatTransportsMsg',254,1),(27576,64678,64724,'OP_PositionBoatTransportMsg',255,1),(27577,64678,64724,'OP_MigrateBoatTransportMsg',256,1),(27578,64678,64724,'OP_MigrateBoatTransportReplyMsg',257,1),(27579,64678,64724,'OP_DisplayDebugNLLPointsMsg',258,1),(27580,64678,64724,'OP_ExamineInfoRequestMsg',259,1),(27581,64678,64724,'OP_QuickbarInitMsg',260,1),(27582,64678,64724,'OP_QuickbarUpdateMsg',261,1),(27583,64678,64724,'OP_MacroInitMsg',262,1),(27584,64678,64724,'OP_MacroUpdateMsg',263,1),(27585,64678,64724,'OP_QuestionnaireMsg',264,1),(27586,64678,64724,'OP_LevelChangedMsg',265,1),(27587,64678,64724,'OP_SpellGainedMsg',266,1),(27588,64678,64724,'OP_EncounterBrokenMsg',267,1),(27589,64678,64724,'OP_OnscreenMsgMsg',268,1),(27590,64678,64724,'OP_DisplayWarningMsg',269,1),(27591,64678,64724,'OP_ModifyGuildMsg',270,1),(27592,64678,64724,'OP_GuildEventMsg',271,1),(27593,64678,64724,'OP_GuildEventAddMsg',272,1),(27594,64678,64724,'OP_GuildEventActionMsg',273,1),(27595,64678,64724,'OP_GuildEventListMsg',274,1),(27596,64678,64724,'OP_RequestGuildEventDetailsMsg',275,1),(27597,64678,64724,'OP_GuildEventDetailsMsg',276,1),(27598,64678,64724,'OP_RequestGuildInfoMsg',277,1),(27599,64678,64724,'OP_GuildBankActionMsg',278,1),(27600,64678,64724,'OP_GuildBankActionResponseMsg',279,1),(27601,64678,64724,'OP_GuildBankItemDetailsRequestMsg',280,1),(27602,64678,64724,'OP_GuildBankItemDetailsResponseMs',281,1),(27603,64678,64724,'OP_GuildBankUpdateMsg',282,1),(27604,64678,64724,'OP_GuildBankEventListMsg',283,1),(27605,64678,64724,'OP_RequestGuildBankEventDetailsMs',284,1),(27606,64678,64724,'OP_RewardPackMsg',285,1),(27607,64678,64724,'OP_RenameGuildMsg',286,1),(27608,64678,64724,'OP_ZoneToFriendRequestMsg',287,1),(27609,64678,64724,'OP_ZoneToFriendReplyMsg',288,1),(27610,64678,64724,'OP_ChatCreateChannelMsg',289,1),(27611,64678,64724,'OP_ChatJoinChannelMsg',290,1),(27612,64678,64724,'OP_ChatWhoChannelMsg',291,1),(27613,64678,64724,'OP_ChatLeaveChannelMsg',292,1),(27614,64678,64724,'OP_ChatTellChannelMsg',293,1),(27615,64678,64724,'OP_ChatTellUserMsg',294,1),(27616,64678,64724,'OP_ChatToggleFriendMsg',295,1),(27617,64678,64724,'OP_BrokerAddBag',296,1),(27618,64678,64724,'OP_BrokerRemoveBag',297,1),(27619,64678,64724,'OP_ChatToggleIgnoreMsg',298,1),(27620,64678,64724,'OP_ChatSendFriendsMsg',299,1),(27621,64678,64724,'OP_ChatSendIgnoresMsg',300,1),(27622,64678,64724,'OP_QuestReward',324,1),(27623,64678,64724,'OP_ChatFiltersMsg',338,1),(27624,64678,64724,'OP_MailGetMessageMsg',342,1),(27625,64678,64724,'OP_MailSendMessageMsg',343,1),(27626,64678,64724,'OP_MailDeleteMessageMsg',344,1),(27627,64678,64724,'OP_MailGetHeadersReplyMsg',345,1),(27628,64678,64724,'OP_MailGetMessageReplyMsg',346,1),(27629,64678,64724,'OP_MailSendMessageReplyMsg',347,1),(27630,64678,64724,'OP_MailCommitSendMessageMsg',348,1),(27631,64678,64724,'OP_MailSendSystemMessageMsg',349,1),(27632,64678,64724,'OP_MailRemoveAttachFromMailMsg',350,1),(27633,64678,64724,'OP_WaypointRequestMsg',352,1),(27634,64678,64724,'OP_WaypointReplyMsg',353,1),(27635,64678,64724,'OP_WaypointSelectMsg',354,1),(27636,64678,64724,'OP_WaypointUpdateMsg',355,1),(27637,64678,64724,'OP_CharNameChangedMsg',356,1),(27638,64678,64724,'OP_ShowZoneTeleporterDestinations',357,1),(27639,64678,64724,'OP_SelectZoneTeleporterDestinatio',358,1),(27640,64678,64724,'OP_ReloadLocalizedTxtMsg',359,1),(27641,64678,64724,'OP_RequestGuildMembershipMsg',360,1),(27642,64678,64724,'OP_GuildMembershipResponseMsg',361,1),(27643,64678,64724,'OP_LeaveGuildNotifyMsg',362,1),(27644,64678,64724,'OP_JoinGuildNotifyMsg',363,1),(27645,64678,64724,'OP_AvatarUpdateMsg',364,1),(27646,64678,64724,'OP_BioUpdateMsg',366,1),(27647,64678,64724,'OP_InspectPlayerMsg',367,1),(27648,64678,64724,'OP_WSServerLockMsg',368,1),(27649,64678,64724,'OP_LSServerLockMsg',369,1),(27650,64678,64724,'OP_WSServerHideMsg',370,1),(27651,64678,64724,'OP_CsCategoryRequestMsg',371,1),(27652,64678,64724,'OP_CsCategoryResponseMsg',372,1),(27653,64678,64724,'OP_KnowledgeWindowSlotMappingMsg',373,1),(27654,64678,64724,'OP_AFKUpdateMsg',374,1),(27655,64678,64724,'OP_AnonUpdateMsg',375,1),(27656,64678,64724,'OP_UpdateActivePublicZonesMsg',376,1),(27657,64678,64724,'OP_UnknownNpcMsg',377,1),(27658,64678,64724,'OP_PromoFlagsDetailsMsg',378,1),(27659,64678,64724,'OP_ConsignViewCreateMsg',379,1),(27660,64678,64724,'OP_ConsignViewGetPageMsg',380,1),(27661,64678,64724,'OP_ConsignViewReleaseMsg',381,1),(27662,64678,64724,'OP_ConsignRemoveItemsMsg',382,1),(27663,64678,64724,'OP_UpdateDebugRadiiMsg',383,1),(27664,64678,64724,'OP_ReportMsg',384,1),(27665,64678,64724,'OP_UpdateRaidMsg',385,1),(27666,64678,64724,'OP_ConsignViewSortMsg',387,1),(27667,64678,64724,'OP_TitleUpdateMsg',388,1),(27668,64678,64724,'OP_ClientFellMsg',389,1),(27669,64678,64724,'OP_ClientInDeathRegionMsg',390,1),(27670,64678,64724,'OP_CampClientMsg',391,1),(27671,64678,64724,'OP_UpdateGroupMemberDataMsg',392,1),(27672,64678,64724,'OP_CSToolAccessResponseMsg',392,1),(27673,64678,64724,'OP_TrackingUpdateMsg',393,1),(27674,64678,64724,'OP_BeginTrackingMsg',394,1),(27675,64678,64724,'OP_StopTrackingMsg',395,1),(27676,64678,64724,'OP_GetAvatarAccessRequestForCSToo',397,1),(27677,64678,64724,'OP_AdvancementRequestMsg',398,1),(27678,64678,64724,'OP_MapFogDataInitMsg',399,1),(27679,64678,64724,'OP_MapFogDataUpdateMsg',400,1),(27680,64678,64724,'OP_CloseGroupInviteWindowMsg',401,1),(27681,64678,64724,'OP_WorldPingMsg',404,1),(27682,64678,64724,'OP_MoveLogUpdateMsg',405,1),(27683,64678,64724,'OP_OfferQuestMsg',406,1),(27684,64678,64724,'OP_WorldShutdownUpdateMsg',408,1),(27685,64678,64724,'OP_DisplayMailScreenMsg',409,1),(27686,64678,64724,'OP_ClientIdleBeginMsg',410,1),(27687,64678,64724,'OP_ClientIdleEndMsg',411,1),(27688,64678,64724,'OP_PurchaseConsignmentLoreCheckRe',412,1),(27689,64678,64724,'OP_NotifyApprenticeStoppedMentori',413,1),(27690,64678,64724,'OP_CorruptedClientMsg',414,1),(27691,64678,64724,'OP_WorldDataChangeMsg',415,1),(27692,64678,64724,'OP_MailEventNotificationMsg',416,1),(27693,64678,64724,'OP_RestartZoneMsg',417,1),(27694,64678,64724,'OP_FlightPathsMsg',418,1),(27695,64678,64724,'OP_CharacterLinkdeadMsg',419,1),(27696,64678,64724,'OP_CharTransferStartRequestMsg',420,1),(27697,64678,64724,'OP_CharTransferStartReplyMsg',421,1),(27698,64678,64724,'OP_CharTransferRequestMsg',422,1),(27699,64678,64724,'OP_CharTransferReplyMsg',423,1),(27700,64678,64724,'OP_CharTransferRollbackRequestMsg',424,1),(27701,64678,64724,'OP_CharTransferCommitRequestMsg',425,1),(27702,64678,64724,'OP_CharTransferRollbackReplyMsg',426,1),(27703,64678,64724,'OP_CharTransferCommitReplyMsg',427,1),(27704,64678,64724,'OP_GetCharacterSerializedRequestM',428,1),(27705,64678,64724,'OP_GetCharacterSerializedReplyMsg',429,1),(27706,64678,64724,'OP_CreateCharFromCBBRequestMsg',430,1),(27707,64678,64724,'OP_CreateCharFromCBBReplyMsg',431,1),(27708,64678,64724,'OP_HousingDataChangedMsg',432,1),(27709,64678,64724,'OP_HousingRestoreMsg',433,1),(27710,64678,64724,'OP_AuctionItem',434,1),(27711,64678,64724,'OP_AuctionItemReply',435,1),(27712,64678,64724,'OP_AuctionCoin',436,1),(27713,64678,64724,'OP_AuctionCoinReply',437,1),(27714,64678,64724,'OP_AuctionCharacter',438,1),(27715,64678,64724,'OP_AuctionCharacterReply',439,1),(27716,64678,64724,'OP_AuctionCommitMsg',440,1),(27717,64678,64724,'OP_AuctionAbortMsg',441,1),(27718,64678,64724,'OP_CharTransferValidateRequestMsg',442,1),(27719,64678,64724,'OP_CharTransferValidateReplyMsg',443,1),(27720,64678,64724,'OP_RaceRestrictionMsg',444,1),(27721,64678,64724,'OP_SetInstanceDisplayNameMsg',445,1),(27722,64678,64724,'OP_GetAuctionAssetIDMsg',446,1),(27723,64678,64724,'OP_GetAuctionAssetIDReplyMsg',447,1),(27724,64678,64724,'OP_ResendWorldChannelsMsg',448,1),(27725,64678,64724,'OP_DisplayExchangeScreenMsg',449,1),(27726,64678,64724,'OP_ArenaGameTypesMsg',450,1),(27727,64678,64724,'OP_AuditAuctionEventMsg',451,1),(27728,64678,64724,'OP_InviteRequestMsg',452,1),(27729,64678,64724,'OP_InviteResponseMsg',453,1),(27730,64678,64724,'OP_InviteTargetResponseMsg',454,1),(27731,64678,64724,'OP_InspectPlayerRequestMsg',455,1),(27732,64678,64724,'OP_DispatchMsg',456,1),(27733,64678,64724,'OP_DisplayEventMsg',457,1),(27734,64678,64724,'OP_PrePossessionMsg',458,1),(27735,64678,64724,'OP_PostPossessionMsg',459,1),(27736,64678,64724,'OP_ArenaCreate',461,1),(27737,64678,64724,'OP_ArenaList',462,1),(27738,64678,64724,'OP_ArenaWindow',470,1),(27739,64678,64724,'OP_HouseItemsList',489,1),(27740,64678,64724,'OP_CurrentPet',490,1),(27741,64678,64724,'OP_EarlyLandingRequestMsg',491,1),(27742,64678,64724,'OP_AdventureList',494,1),(27743,64678,64724,'OP_CancelSpellCast',495,1),(27744,64678,64724,'OP_ClearForLandingMsg',497,1),(27745,64678,64724,'OP_UpdateTitleCmd',500,1),(27746,64678,64724,'OP_AttackAllowed',506,1),(27747,64678,64724,'OP_AttackNotAllowed',507,1),(27748,64678,64724,'OP_BagOptions',508,1),(27749,64678,64724,'OP_LFGGroupSearch',510,1),(27750,64678,64724,'OP_CharacterHousingList',513,1),(27751,64678,64724,'OP_DressingRoom',516,1),(27752,64678,64724,'OP_PlayLon',517,1),(27753,64678,64724,'OP_SkillInfoRequest',519,1),(27754,64678,64724,'OP_SkillInfoResponse',520,1),(27755,64678,64724,'OP_LFGUpdateMsg',523,1),(27756,64678,64724,'OP_BadLanguageFilter',524,1),(27757,64678,64724,'OP_VoiceChatChannel',525,1),(27758,64678,64724,'OP_MapRequest',526,1),(27759,64678,64724,'OP_MarketFundsUpdate',531,1),(27760,64678,64724,'OP_UIEvent',532,1),(27761,64678,64724,'OP_MarketAddFundsRequest',533,1),(27762,64678,64724,'OP_MarketAddFundsReply',534,1),(27763,64678,64724,'OP_MarketPurchase',536,1),(27764,64678,64724,'OP_MarketPlacePrices',537,1),(27765,64678,64724,'OP_MarketPlaceItems',544,1),(27766,64678,64724,'OP_RecipeBook',545,1),(27767,64678,64724,'OP_CreateCharacterDungeon',552,1),(27768,64678,64724,'OP_DungeonMakerEnter',553,1),(27769,64678,64724,'OP_DungeonMakerItemRequest',557,1),(27770,64678,64724,'OP_CharacterCreatedDungeons',558,1),(27771,64678,64724,'OP_DungeonMakerToolboxList',559,1),(27772,64678,64724,'OP_DungeonMakerUnknown',560,1),(27773,64678,64724,'OP_DungeonMakerUnknown1',561,1),(27774,64678,64724,'OP_PlayerPollPopup',563,1),(27775,64678,64724,'OP_PlayerPollAnswer',564,1),(27776,64678,64724,'OP_MentorPopup',565,1),(27777,64678,64724,'OP_LoadWelcomeWindow',567,1),(27778,64678,64724,'OP_OpenCharCust',569,1),(27779,64678,64724,'OP_SubmitCharCust',570,1),(27780,64678,64724,'OP_QueAllBgSolo',572,1),(27781,64678,64724,'OP_ZoneBgInstanceList',573,1),(27782,64678,64724,'OP_WorldTravelAvail',577,1),(27783,64678,64724,'OP_Launchpad',580,1),(27784,64678,64724,'OP_PaperdollImage',582,1),(27785,64678,64724,'OP_LoadCalendarEvents',583,1),(27786,64678,64724,'OP_VideoUploaded',584,1),(27787,64678,64724,'OP_SavageBarInitMsg',585,1),(27788,64678,64724,'OP_PetOptionsResponse',586,1),(27789,64678,64724,'OP_DungeonMakerItemResponse',587,1),(27790,64678,64724,'OP_Weakness',588,1),(27791,64678,64724,'OP_CharacterMounts',589,1),(27792,64678,64724,'OP_RecipeListUnknown',598,1),(27793,64678,64724,'OP_DailyObjectives',602,1),(27794,64678,64724,'OP_DeityAbilityWindow',622,1),(27795,64678,64724,'OP_EqBetaCopyRequest',640,1),(27796,64678,64724,'OP_SOEAllAccess',647,1),(27797,64678,64724,'OP_EqHearChatCmd',647,1),(27798,64678,64724,'OP_EqDisplayTextCmd',648,1),(27799,64678,64724,'OP_EqCreateGhostCmd',649,1),(27800,64678,64724,'OP_EqCreateWidgetCmd',650,1),(27801,64678,64724,'OP_EqCreateSignWidgetCmd',651,1),(27802,64678,64724,'OP_EqDestroyGhostCmd',652,1),(27803,64678,64724,'OP_EqUpdateGhostCmd',653,1),(27804,64678,64724,'OP_EqSetControlGhostCmd',654,1),(27805,64678,64724,'OP_EqSetPOVGhostCmd',655,1),(27806,64678,64724,'OP_EqHearCombatCmd',656,1),(27807,64678,64724,'OP_EqHearSpellCastCmd',657,1),(27808,64678,64724,'OP_EQHearProcCmd',658,1),(27809,64678,64724,'OP_EQHearResEffectCmd',659,1),(27810,64678,64724,'OP_EqHearSpellInterruptCmd',660,1),(27811,64678,64724,'OP_EqHearSpellFizzleCmd',661,1),(27812,64678,64724,'OP_EqHearConsiderCmd',662,1),(27813,64678,64724,'OP_EqUpdateSubClassesCmd',663,1),(27814,64678,64724,'OP_EqCreateListBoxCmd',664,1),(27815,64678,64724,'OP_EqSetDebugPathPointsCmd',665,1),(27816,64678,64724,'OP_EqCannedEmoteCmd',667,1),(27817,64678,64724,'OP_EqStateCmd',668,1),(27818,64678,64724,'OP_EqPlaySoundCmd',669,1),(27819,64678,64724,'OP_EqPlaySound3DCmd',670,1),(27820,64678,64724,'OP_EqPlayVoiceCmd',671,1),(27821,64678,64724,'OP_EqHearDrowningCmd',672,1),(27822,64678,64724,'OP_EqHearDeathCmd',673,1),(27823,64678,64724,'OP_EqGroupMemberRemovedCmd',674,1),(27824,64678,64724,'OP_EqHearChainEffectCmd',675,1),(27825,64678,64724,'OP_EqReceiveOfferCmd',676,1),(27826,64678,64724,'OP_EqInspectPCResultsCmd',677,1),(27827,64678,64724,'OP_EqDrawablePathGraphCmd',678,1),(27828,64678,64724,'OP_EqDialogOpenCmd',679,1),(27829,64678,64724,'OP_EqDialogCloseCmd',680,1),(27830,64678,64724,'OP_EqFactionUpdateCmd',681,1),(27831,64678,64724,'OP_EqCollectionUpdateCmd',682,1),(27832,64678,64724,'OP_EqCollectionFilterCmd',683,1),(27833,64678,64724,'OP_EqCollectionItemCmd',684,1),(27834,64678,64724,'OP_EqQuestJournalUpdateCmd',685,1),(27835,64678,64724,'OP_EqMentoring',686,1),(27836,64678,64724,'OP_EqQuestJournalReplyCmd',687,1),(27837,64678,64724,'OP_EqQuestGroupCmd',688,1),(27838,64678,64724,'OP_EqUpdateMerchantCmd',689,1),(27839,64678,64724,'OP_EqUpdateStoreCmd',690,1),(27840,64678,64724,'OP_EqUpdatePlayerTradeCmd',691,1),(27841,64678,64724,'OP_EqHelpPathCmd',692,1),(27842,64678,64724,'OP_EqHelpPathClearCmd',693,1),(27843,64678,64724,'OP_EqUpdateBankCmd',694,1),(27844,64678,64724,'OP_EqExamineInfoCmd',695,1),(27845,64678,64724,'OP_EqCloseWindowCmd',696,1),(27846,64678,64724,'OP_EqUpdateLootCmd',697,1),(27847,64678,64724,'OP_EqJunctionListCmd',698,1),(27848,64678,64724,'OP_EqShowDeathWindowCmd',699,1),(27849,64678,64724,'OP_EqDisplaySpellFailCmd',700,1),(27850,64678,64724,'OP_EqSpellCastStartCmd',701,1),(27851,64678,64724,'OP_EqSpellCastEndCmd',702,1),(27852,64678,64724,'OP_EqResurrectedCmd',703,1),(27853,64678,64724,'OP_EqChoiceWinCmd',704,1),(27854,64678,64724,'OP_EqSetDefaultVerbCmd',705,1),(27855,64678,64724,'OP_EqInstructionWindowCmd',706,1),(27856,64678,64724,'OP_EqInstructionWindowCloseCmd',707,1),(27857,64678,64724,'OP_EqInstructionWindowGoalCmd',708,1),(27858,64678,64724,'OP_EqInstructionWindowTaskCmd',709,1),(27859,64678,64724,'OP_EqEnableGameEventCmd',710,1),(27860,64678,64724,'OP_EqShowWindowCmd',711,1),(27861,64678,64724,'OP_EqEnableWindowCmd',712,1),(27862,64678,64724,'OP_EqFlashWindowCmd',713,1),(27863,64678,64724,'OP_EqHearPlayFlavorCmd',715,1),(27864,64678,64724,'OP_EqUpdateSignWidgetCmd',716,1),(27865,64678,64724,'OP_EqDebugPVDCmd',717,1),(27866,64678,64724,'OP_EqShowBookCmd',718,1),(27867,64678,64724,'OP_EqQuestionnaireCmd',719,1),(27868,64678,64724,'OP_EqGetProbsCmd',721,1),(27869,64678,64724,'OP_EqHearHealCmd',722,1),(27870,64678,64724,'OP_EqChatChannelUpdateCmd',723,1),(27871,64678,64724,'OP_EqWhoChannelQueryReplyCmd',724,1),(27872,64678,64724,'OP_EqAvailWorldChannelsCmd',725,1),(27873,64678,64724,'OP_EqUpdateTargetCmd',726,1),(27874,64678,64724,'OP_BrokerSellList',727,1),(27875,64678,64724,'OP_EqConsignmentItemsCmd',728,1),(27876,64678,64724,'OP_EqStartBrokerCmd',730,1),(27877,64678,64724,'OP_EqMapExplorationCmd',731,1),(27878,64678,64724,'OP_EqStoreLogCmd',732,1),(27879,64678,64724,'OP_EqSpellMoveToRangeAndRetryCmd',733,1),(27880,64678,64724,'OP_EqUpdatePlayerMailCmd',734,1),(27881,64678,64724,'OP_GuildStatusUpdate',737,1),(27882,64678,64724,'OP_EqArenaResultsCmd',738,1),(27883,64678,64724,'OP_EqGuildBankEventActionCmd',739,1),(27884,64678,64724,'OP_EqGuildBankExamineInfoCmd',740,1),(27885,64678,64724,'OP_EqHearSpellNoLandCmd',741,1),(27886,64678,64724,'OP_Lottery',742,1),(27887,64678,64724,'OP_GuildRecruitingMemberInfo',743,1),(27888,64678,64724,'OP_GuildRecruiting',744,1),(27889,64678,64724,'OP_GuildRecruitingDetails',745,1),(27890,64678,64724,'OP_GuildRecruitingImage',746,1),(27891,64678,64724,'OP_TradeskillList',747,1),(27892,64678,64724,'OP_CharRenamed',748,1),(27893,64678,64724,'OP_UseAdornment',758,1),(27894,64678,64724,'OP_ExpPurchWindow',764,1),(27895,64678,64724,'OP_PointOfInterest',768,1),(27896,64678,64724,'OP_PointOfInterest2',769,1),(27897,64678,64724,'OP_TraitsList',770,1),(27898,64678,64724,'OP_CustomizeHouseDisplay',773,1),(27899,64678,64724,'OP_VoiceChatServer',774,1),(27900,64678,64724,'OP_SupplyDepot',778,1),(27901,64678,64724,'OP_EQHearThreatCmd',779,1),(27902,64678,64724,'OP_RecipeList',780,1),(27903,64678,64724,'OP_Research',781,1),(27904,64678,64724,'OP_CharacterCurrency',782,1),(27905,64678,64724,'OP_CharacterAchievements',783,1),(27906,64678,64724,'OP_AchievementUpdateMsg',784,1),(27907,64678,64724,'OP_EQHearDispellCmd',785,1),(27908,64678,64724,'OP_JournalQuestStoryline',786,1),(27909,64678,64724,'OP_DungeonPlayAsAvatarList',787,1),(27910,64678,64724,'OP_DungeonPlayAsAvatarSelected',788,1),(27911,64678,64724,'OP_MercHireWindow',790,1),(27912,64678,64724,'OP_MercUnknown',791,1),(27913,64678,64724,'OP_Unknown',804,1),(27914,64678,64724,'OP_HeritageMsg',10030,1),(28938,64736,64753,'OP_LoginRequestMsg',0,1),(28939,64736,64753,'OP_LoginByNumRequestMsg',1,1),(28940,64736,64753,'OP_WSLoginRequestMsg',2,1),(28941,64736,64753,'OP_ESLoginRequestMsg',3,1),(28942,64736,64753,'OP_LoginReplyMsg',4,1),(28943,64736,64753,'OP_WSStatusReplyMsg',5,1),(28944,64736,64753,'OP_WorldStatusChangeMsg',6,1),(28945,64736,64753,'OP_AllWSDescRequestMsg',7,1),(28946,64736,64753,'OP_WorldListMsg',8,1),(28947,64736,64753,'OP_AllCharactersDescRequestMsg',9,1),(28948,64736,64753,'OP_AllCharactersDescReplyMsg',10,1),(28949,64736,64753,'OP_CreateCharacterRequestMsg',11,1),(28950,64736,64753,'OP_CreateCharacterReplyMsg',12,1),(28951,64736,64753,'OP_WSCreateCharacterRequestMsg',13,1),(28952,64736,64753,'OP_WSCreateCharacterReplyMsg',14,1),(28953,64736,64753,'OP_ReskinCharacterRequestMsg',15,1),(28954,64736,64753,'OP_DeleteCharacterRequestMsg',18,1),(28955,64736,64753,'OP_DeleteCharacterReplyMsg',19,1),(28956,64736,64753,'OP_PlayCharacterRequestMsg',20,1),(28957,64736,64753,'OP_PlayCharacterReplyMsg',21,1),(28958,64736,64753,'OP_ExpectClientAsCharacterReplyMs',24,1),(28959,64736,64753,'OP_ServerPlayCharacterRequestMsg',25,1),(28960,64736,64753,'OP_ServerPlayCharacterReplyMsg',26,1),(28961,64736,64753,'OP_ESInitMsg',27,1),(28962,64736,64753,'OP_ESReadyForClientsMsg',28,1),(28963,64736,64753,'OP_CreateZoneInstanceMsg',31,1),(28964,64736,64753,'OP_ZoneInstanceCreateReplyMsg',32,1),(28965,64736,64753,'OP_ZoneInstanceDestroyedMsg',33,1),(28966,64736,64753,'OP_ExpectClientAsCharacterRequest',34,1),(28967,64736,64753,'OP_ZoneInfoMsg',35,1),(28968,64736,64753,'OP_DoneLoadingZoneResourcesMsg',36,1),(28969,64736,64753,'OP_DoneSendingInitialEntitiesMsg',37,1),(28970,64736,64753,'OP_DoneLoadingEntityResourcesMsg',38,1),(28971,64736,64753,'OP_PredictionUpdateMsg',39,1),(28972,64736,64753,'OP_UpdatePositionMsg',41,1),(28973,64736,64753,'OP_SetRemoteCmdsMsg',43,1),(28974,64736,64753,'OP_RemoteCmdMsg',44,1),(28975,64736,64753,'OP_GameWorldTimeMsg',45,1),(28976,64736,64753,'OP_MOTDMsg',46,1),(28977,64736,64753,'OP_ZoneMOTDMsg',47,1),(28978,64736,64753,'OP_AvatarCreatedMsg',48,1),(28979,64736,64753,'OP_AvatarDestroyedMsg',49,1),(28980,64736,64753,'OP_RequestCampMsg',52,1),(28981,64736,64753,'OP_CampStartedMsg',53,1),(28982,64736,64753,'OP_CampAbortedMsg',54,1),(28983,64736,64753,'OP_WhoQueryRequestMsg',55,1),(28984,64736,64753,'OP_WhoQueryReplyMsg',56,1),(28985,64736,64753,'OP_MonitorReplyMsg',57,1),(28986,64736,64753,'OP_MonitorCharacterListMsg',58,1),(28987,64736,64753,'OP_MonitorCharacterListRequestMsg',59,1),(28988,64736,64753,'OP_ClientCmdMsg',60,1),(28989,64736,64753,'OP_DispatchESMsg',61,1),(28990,64736,64753,'OP_DispatchClientCmdMsg',62,1),(28991,64736,64753,'OP_UpdateTargetMsg',63,1),(28992,64736,64753,'OP_UpdateTargetLocMsg',64,1),(28993,64736,64753,'OP_UpdateCharacterSheetMsg',65,1),(28994,64736,64753,'OP_CharacterPet',66,1),(28995,64736,64753,'OP_CharacterMerc',67,1),(28996,64736,64753,'OP_UpdateSpellBookMsg',68,1),(28997,64736,64753,'OP_UpdateInventoryMsg',70,1),(28998,64736,64753,'OP_AfterInvSpellUpdate',71,1),(28999,64736,64753,'OP_UpdateRecipeBookMsg',72,1),(29000,64736,64753,'OP_RequestRecipeDetailsMsg',73,1),(29001,64736,64753,'OP_RecipeDetailsMsg',74,1),(29002,64736,64753,'OP_UpdateSkillBookMsg',75,1),(29003,64736,64753,'OP_UpdateSkillsMsg',76,1),(29004,64736,64753,'OP_UpdateOpportunityMsg',77,1),(29005,64736,64753,'OP_ChangeZoneMsg',79,1),(29006,64736,64753,'OP_ClientTeleportRequestMsg',80,1),(29007,64736,64753,'OP_TeleportWithinZoneMsg',81,1),(29008,64736,64753,'OP_TeleportWithinZoneNoReloadMsg',82,1),(29009,64736,64753,'OP_MigrateClientToZoneRequestMsg',83,1),(29010,64736,64753,'OP_MigrateClientToZoneReplyMsg',84,1),(29011,64736,64753,'OP_ReadyToZoneMsg',86,1),(29012,64736,64753,'OP_RemoveClientFromGroupMsg',87,1),(29013,64736,64753,'OP_RemoveGroupFromGroupMsg',88,1),(29014,64736,64753,'OP_MakeGroupLeaderMsg',89,1),(29015,64736,64753,'OP_GroupCreatedMsg',90,1),(29016,64736,64753,'OP_GroupDestroyedMsg',91,1),(29017,64736,64753,'OP_GroupMemberAddedMsg',92,1),(29018,64736,64753,'OP_GroupMemberRemovedMsg',93,1),(29019,64736,64753,'OP_GroupRemovedFromGroupMsg',94,1),(29020,64736,64753,'OP_GroupLeaderChangedMsg',95,1),(29021,64736,64753,'OP_GroupResendOOZDataMsg',96,1),(29022,64736,64753,'OP_GroupSettingsChangedMsg',97,1),(29023,64736,64753,'OP_OutOfZoneMemberDataMsg',98,1),(29024,64736,64753,'OP_SendLatestRequestMsg',99,1),(29025,64736,64753,'OP_ClearDataMsg',100,1),(29026,64736,64753,'OP_SetSocialMsg',101,1),(29027,64736,64753,'OP_ESStatusMsg',102,1),(29028,64736,64753,'OP_ESZoneInstanceStatusMsg',103,1),(29029,64736,64753,'OP_ZonesStatusRequestMsg',104,1),(29030,64736,64753,'OP_ZonesStatusMsg',105,1),(29031,64736,64753,'OP_ESWeatherRequestMsg',106,1),(29032,64736,64753,'OP_ESWeatherRequestEndMsg',107,1),(29033,64736,64753,'OP_DialogSelectMsg',111,1),(29034,64736,64753,'OP_DialogCloseMsg',112,1),(29035,64736,64753,'OP_RemoveSpellEffectMsg',113,1),(29036,64736,64753,'OP_RemoveConcentrationMsg',114,1),(29037,64736,64753,'OP_QuestJournalOpenMsg',115,1),(29038,64736,64753,'OP_QuestJournalInspectMsg',116,1),(29039,64736,64753,'OP_QuestJournalSetVisibleMsg',117,1),(29040,64736,64753,'OP_QuestJournalWaypointMsg',118,1),(29041,64736,64753,'OP_CreateGuildRequestMsg',121,1),(29042,64736,64753,'OP_CreateGuildReplyMsg',123,1),(29043,64736,64753,'OP_GuildsayMsg',124,1),(29044,64736,64753,'OP_FellowshipExpMsg',125,1),(29045,64736,64753,'OP_DeleteGuildMsg',126,1),(29046,64736,64753,'OP_GuildUpdateMsg',127,1),(29047,64736,64753,'OP_ConsignmentCloseStoreMsg',128,1),(29048,64736,64753,'OP_ConsignItemRequestMsg',129,1),(29049,64736,64753,'OP_ConsignItemResponseMsg',130,1),(29050,64736,64753,'OP_PurchaseConsignmentRequestMsg',131,1),(29051,64736,64753,'OP_LikeOption',139,1),(29052,64736,64753,'OP_PublishHouse',141,1),(29053,64736,64753,'OP_PlayerMadeInstancesScreen',142,1),(29054,64736,64753,'OP_PlayerMadeInstances',143,1),(29055,64736,64753,'OP_HouseDeletedRemotelyMsg',145,1),(29056,64736,64753,'OP_UpdateHouseDataMsg',146,1),(29057,64736,64753,'OP_UpdateHouseAccessDataMsg',147,1),(29058,64736,64753,'OP_PlayerHouseBaseScreenMsg',148,1),(29059,64736,64753,'OP_PlayerHousePurchaseScreenMsg',149,1),(29060,64736,64753,'OP_PlayerHouseAccessUpdateMsg',150,1),(29061,64736,64753,'OP_PlayerHouseDisplayStatusMsg',151,1),(29062,64736,64753,'OP_PlayerHouseCloseUIMsg',152,1),(29063,64736,64753,'OP_BuyPlayerHouseMsg',153,1),(29064,64736,64753,'OP_BuyPlayerHouseTintMsg',154,1),(29065,64736,64753,'OP_CollectAllHouseItemsMsg',155,1),(29066,64736,64753,'OP_RelinquishHouseMsg',156,1),(29067,64736,64753,'OP_EnterHouseMsg',157,1),(29068,64736,64753,'OP_ExitHouseMsg',158,1),(29069,64736,64753,'OP_HouseDefaultAccessSetMsg',159,1),(29070,64736,64753,'OP_HouseAccessSetMsg',160,1),(29071,64736,64753,'OP_HouseAccessRemoveMsg',161,1),(29072,64736,64753,'OP_PayHouseUpkeepMsg',162,1),(29073,64736,64753,'OP_MoveableObjectPlacementCriteri',163,1),(29074,64736,64753,'OP_EnterMoveObjectModeMsg',164,1),(29075,64736,64753,'OP_PositionMoveableObject',165,1),(29076,64736,64753,'OP_CancelMoveObjectModeMsg',166,1),(29077,64736,64753,'OP_ShaderCustomizationMsg',167,1),(29078,64736,64753,'OP_ReplaceableSubMeshesMsg',168,1),(29079,64736,64753,'OP_HouseCustomizationScreenMsg',169,1),(29080,64736,64753,'OP_CustomizationPurchaseRequestMs',170,1),(29081,64736,64753,'OP_CustomizationSetRequestMsg',171,1),(29082,64736,64753,'OP_CustomizationReplyMsg',172,1),(29083,64736,64753,'OP_TintWidgetsMsg',173,1),(29084,64736,64753,'OP_ExamineConsignmentRequestMsg',174,1),(29085,64736,64753,'OP_ExamineConsignmentResponseMsg',175,1),(29086,64736,64753,'OP_UISettingsResponseMsg',176,1),(29087,64736,64753,'OP_UIResetMsg',177,1),(29088,64736,64753,'OP_KeymapLoadMsg',178,1),(29089,64736,64753,'OP_KeymapNoneMsg',179,1),(29090,64736,64753,'OP_KeymapDataMsg',180,1),(29091,64736,64753,'OP_KeymapSaveMsg',181,1),(29092,64736,64753,'OP_DispatchSpellCmdMsg',182,1),(29093,64736,64753,'OP_EntityVerbsRequestMsg',183,1),(29094,64736,64753,'OP_EntityVerbsReplyMsg',184,1),(29095,64736,64753,'OP_EntityVerbsVerbMsg',185,1),(29096,64736,64753,'OP_ChatRelationshipUpdateMsg',187,1),(29097,64736,64753,'OP_LootItemsRequestMsg',188,1),(29098,64736,64753,'OP_StoppedLootingMsg',189,1),(29099,64736,64753,'OP_SitMsg',190,1),(29100,64736,64753,'OP_StandMsg',191,1),(29101,64736,64753,'OP_SatMsg',192,1),(29102,64736,64753,'OP_StoodMsg',193,1),(29103,64736,64753,'OP_ClearForTakeOffMsg',194,1),(29104,64736,64753,'OP_ReadyForTakeOffMsg',195,1),(29105,64736,64753,'OP_ShowIllusionsMsg',196,1),(29106,64736,64753,'OP_HideIllusionsMsg',197,1),(29107,64736,64753,'OP_ExamineItemRequestMsg',198,1),(29108,64736,64753,'OP_ReadBookPageMsg',199,1),(29109,64736,64753,'OP_DefaultGroupOptionsRequestMsg',200,1),(29110,64736,64753,'OP_DefaultGroupOptionsMsg',201,1),(29111,64736,64753,'OP_GroupOptionsMsg',202,1),(29112,64736,64753,'OP_DisplayGroupOptionsScreenMsg',203,1),(29113,64736,64753,'OP_PetOptions',204,1),(29114,64736,64753,'OP_DisplayInnVisitScreenMsg',205,1),(29115,64736,64753,'OP_DumpSchedulerMsg',206,1),(29116,64736,64753,'OP_LSCheckAcctLockMsg',207,1),(29117,64736,64753,'OP_WSAcctLockStatusMsg',208,1),(29118,64736,64753,'OP_RequestHelpRepathMsg',209,1),(29119,64736,64753,'OP_RequestTargetLocMsg',210,1),(29120,64736,64753,'OP_UpdateMotdMsg',211,1),(29121,64736,64753,'OP_DestUpdateReq',213,1),(29122,64736,64753,'OP_PerformPlayerKnockbackMsg',216,1),(29123,64736,64753,'OP_PerformCameraShakeMsg',217,1),(29124,64736,64753,'OP_PopulateSkillMapsMsg',218,1),(29125,64736,64753,'OP_CancelledFeignMsg',219,1),(29126,64736,64753,'OP_SysClient',221,1),(29127,64736,64753,'OP_ShowCreateFromRecipeUIMsg',222,1),(29128,64736,64753,'OP_CancelCreateFromRecipeMsg',223,1),(29129,64736,64753,'OP_BeginItemCreationMsg',224,1),(29130,64736,64753,'OP_StopItemCreationMsg',225,1),(29131,64736,64753,'OP_ShowItemCreationProcessUIMsg',226,1),(29132,64736,64753,'OP_UpdateItemCreationProcessUIMsg',227,1),(29133,64736,64753,'OP_DisplayTSEventReactionMsg',228,1),(29134,64736,64753,'OP_ShowRecipeBookMsg',229,1),(29135,64736,64753,'OP_KnowledgebaseRequestMsg',230,1),(29136,64736,64753,'OP_KnowledgebaseResponseMsg',231,1),(29137,64736,64753,'OP_CSTicketHeaderRequestMsg',232,1),(29138,64736,64753,'OP_CSTicketInfoMsg',233,1),(29139,64736,64753,'OP_CSTicketCommentRequestMsg',234,1),(29140,64736,64753,'OP_CSTicketCommentResponseMsg',235,1),(29141,64736,64753,'OP_CSTicketCreateMsg',236,1),(29142,64736,64753,'OP_CSTicketAddCommentMsg',237,1),(29143,64736,64753,'OP_CSTicketDeleteMsg',238,1),(29144,64736,64753,'OP_CSTicketChangeNotificationMsg',239,1),(29145,64736,64753,'OP_WorldDataUpdateMsg',240,1),(29146,64736,64753,'OP_KnownLanguagesMsg',242,1),(29147,64736,64753,'OP_LsRequestClientCrashLogMsg',243,1),(29148,64736,64753,'OP_LsClientBaselogReplyMsg',244,1),(29149,64736,64753,'OP_LsClientCrashlogReplyMsg',245,1),(29150,64736,64753,'OP_LsClientAlertlogReplyMsg',246,1),(29151,64736,64753,'OP_LsClientVerifylogReplyMsg',247,1),(29152,64736,64753,'OP_ClientTeleportToLocationMsg',248,1),(29153,64736,64753,'OP_UpdateClientPredFlagsMsg',249,1),(29154,64736,64753,'OP_ChangeServerControlFlagMsg',250,1),(29155,64736,64753,'OP_CSToolsRequestMsg',251,1),(29156,64736,64753,'OP_CSToolsResponseMsg',252,1),(29157,64736,64753,'OP_AddSocialStructureStandingMsg',253,1),(29158,64736,64753,'OP_CreateBoatTransportsMsg',254,1),(29159,64736,64753,'OP_PositionBoatTransportMsg',255,1),(29160,64736,64753,'OP_MigrateBoatTransportMsg',256,1),(29161,64736,64753,'OP_MigrateBoatTransportReplyMsg',257,1),(29162,64736,64753,'OP_DisplayDebugNLLPointsMsg',258,1),(29163,64736,64753,'OP_ExamineInfoRequestMsg',259,1),(29164,64736,64753,'OP_QuickbarInitMsg',260,1),(29165,64736,64753,'OP_QuickbarUpdateMsg',261,1),(29166,64736,64753,'OP_MacroInitMsg',262,1),(29167,64736,64753,'OP_MacroUpdateMsg',263,1),(29168,64736,64753,'OP_QuestionnaireMsg',264,1),(29169,64736,64753,'OP_LevelChangedMsg',265,1),(29170,64736,64753,'OP_SpellGainedMsg',266,1),(29171,64736,64753,'OP_EncounterBrokenMsg',267,1),(29172,64736,64753,'OP_OnscreenMsgMsg',268,1),(29173,64736,64753,'OP_DisplayWarningMsg',269,1),(29174,64736,64753,'OP_ModifyGuildMsg',270,1),(29175,64736,64753,'OP_GuildEventMsg',271,1),(29176,64736,64753,'OP_GuildEventAddMsg',272,1),(29177,64736,64753,'OP_GuildEventActionMsg',273,1),(29178,64736,64753,'OP_GuildEventListMsg',274,1),(29179,64736,64753,'OP_RequestGuildEventDetailsMsg',275,1),(29180,64736,64753,'OP_GuildEventDetailsMsg',276,1),(29181,64736,64753,'OP_RequestGuildInfoMsg',277,1),(29182,64736,64753,'OP_GuildBankActionMsg',278,1),(29183,64736,64753,'OP_GuildBankActionResponseMsg',279,1),(29184,64736,64753,'OP_GuildBankItemDetailsRequestMsg',280,1),(29185,64736,64753,'OP_GuildBankItemDetailsResponseMs',281,1),(29186,64736,64753,'OP_GuildBankUpdateMsg',282,1),(29187,64736,64753,'OP_GuildBankEventListMsg',283,1); +INSERT INTO `opcodes` VALUES (29188,64736,64753,'OP_RequestGuildBankEventDetailsMs',284,1),(29189,64736,64753,'OP_RewardPackMsg',285,1),(29190,64736,64753,'OP_RenameGuildMsg',286,1),(29191,64736,64753,'OP_ZoneToFriendRequestMsg',287,1),(29192,64736,64753,'OP_ZoneToFriendReplyMsg',288,1),(29193,64736,64753,'OP_ChatCreateChannelMsg',289,1),(29194,64736,64753,'OP_ChatJoinChannelMsg',290,1),(29195,64736,64753,'OP_ChatWhoChannelMsg',291,1),(29196,64736,64753,'OP_ChatLeaveChannelMsg',292,1),(29197,64736,64753,'OP_ChatTellChannelMsg',293,1),(29198,64736,64753,'OP_ChatTellUserMsg',294,1),(29199,64736,64753,'OP_ChatToggleFriendMsg',295,1),(29200,64736,64753,'OP_BrokerAddBag',296,1),(29201,64736,64753,'OP_BrokerRemoveBag',297,1),(29202,64736,64753,'OP_ChatToggleIgnoreMsg',298,1),(29203,64736,64753,'OP_ChatSendFriendsMsg',299,1),(29204,64736,64753,'OP_ChatSendIgnoresMsg',300,1),(29205,64736,64753,'OP_QuestReward',324,1),(29206,64736,64753,'OP_ChatFiltersMsg',338,1),(29207,64736,64753,'OP_MailGetMessageMsg',342,1),(29208,64736,64753,'OP_MailSendMessageMsg',343,1),(29209,64736,64753,'OP_MailDeleteMessageMsg',344,1),(29210,64736,64753,'OP_MailGetHeadersReplyMsg',345,1),(29211,64736,64753,'OP_MailGetMessageReplyMsg',346,1),(29212,64736,64753,'OP_MailSendMessageReplyMsg',347,1),(29213,64736,64753,'OP_MailCommitSendMessageMsg',348,1),(29214,64736,64753,'OP_MailSendSystemMessageMsg',349,1),(29215,64736,64753,'OP_MailRemoveAttachFromMailMsg',350,1),(29216,64736,64753,'OP_WaypointRequestMsg',352,1),(29217,64736,64753,'OP_WaypointReplyMsg',353,1),(29218,64736,64753,'OP_WaypointSelectMsg',354,1),(29219,64736,64753,'OP_WaypointUpdateMsg',355,1),(29220,64736,64753,'OP_CharNameChangedMsg',356,1),(29221,64736,64753,'OP_ShowZoneTeleporterDestinations',357,1),(29222,64736,64753,'OP_SelectZoneTeleporterDestinatio',358,1),(29223,64736,64753,'OP_ReloadLocalizedTxtMsg',359,1),(29224,64736,64753,'OP_RequestGuildMembershipMsg',360,1),(29225,64736,64753,'OP_GuildMembershipResponseMsg',361,1),(29226,64736,64753,'OP_LeaveGuildNotifyMsg',362,1),(29227,64736,64753,'OP_JoinGuildNotifyMsg',363,1),(29228,64736,64753,'OP_AvatarUpdateMsg',364,1),(29229,64736,64753,'OP_BioUpdateMsg',366,1),(29230,64736,64753,'OP_InspectPlayerMsg',367,1),(29231,64736,64753,'OP_WSServerLockMsg',368,1),(29232,64736,64753,'OP_LSServerLockMsg',369,1),(29233,64736,64753,'OP_WSServerHideMsg',370,1),(29234,64736,64753,'OP_CsCategoryRequestMsg',371,1),(29235,64736,64753,'OP_CsCategoryResponseMsg',372,1),(29236,64736,64753,'OP_KnowledgeWindowSlotMappingMsg',373,1),(29237,64736,64753,'OP_AFKUpdateMsg',374,1),(29238,64736,64753,'OP_AnonUpdateMsg',375,1),(29239,64736,64753,'OP_UpdateActivePublicZonesMsg',376,1),(29240,64736,64753,'OP_UnknownNpcMsg',377,1),(29241,64736,64753,'OP_PromoFlagsDetailsMsg',378,1),(29242,64736,64753,'OP_ConsignViewCreateMsg',379,1),(29243,64736,64753,'OP_ConsignViewGetPageMsg',380,1),(29244,64736,64753,'OP_ConsignViewReleaseMsg',381,1),(29245,64736,64753,'OP_ConsignRemoveItemsMsg',382,1),(29246,64736,64753,'OP_UpdateDebugRadiiMsg',383,1),(29247,64736,64753,'OP_ReportMsg',384,1),(29248,64736,64753,'OP_UpdateRaidMsg',385,1),(29249,64736,64753,'OP_ConsignViewSortMsg',387,1),(29250,64736,64753,'OP_TitleUpdateMsg',388,1),(29251,64736,64753,'OP_ClientFellMsg',389,1),(29252,64736,64753,'OP_ClientInDeathRegionMsg',390,1),(29253,64736,64753,'OP_CampClientMsg',391,1),(29254,64736,64753,'OP_UpdateGroupMemberDataMsg',392,1),(29255,64736,64753,'OP_CSToolAccessResponseMsg',392,1),(29256,64736,64753,'OP_TrackingUpdateMsg',393,1),(29257,64736,64753,'OP_BeginTrackingMsg',394,1),(29258,64736,64753,'OP_StopTrackingMsg',395,1),(29259,64736,64753,'OP_GetAvatarAccessRequestForCSToo',397,1),(29260,64736,64753,'OP_AdvancementRequestMsg',398,1),(29261,64736,64753,'OP_MapFogDataInitMsg',399,1),(29262,64736,64753,'OP_MapFogDataUpdateMsg',400,1),(29263,64736,64753,'OP_CloseGroupInviteWindowMsg',401,1),(29264,64736,64753,'OP_WorldPingMsg',404,1),(29265,64736,64753,'OP_MoveLogUpdateMsg',405,1),(29266,64736,64753,'OP_OfferQuestMsg',406,1),(29267,64736,64753,'OP_WorldShutdownUpdateMsg',408,1),(29268,64736,64753,'OP_DisplayMailScreenMsg',409,1),(29269,64736,64753,'OP_ClientIdleBeginMsg',410,1),(29270,64736,64753,'OP_ClientIdleEndMsg',411,1),(29271,64736,64753,'OP_PurchaseConsignmentLoreCheckRe',412,1),(29272,64736,64753,'OP_NotifyApprenticeStoppedMentori',413,1),(29273,64736,64753,'OP_CorruptedClientMsg',414,1),(29274,64736,64753,'OP_WorldDataChangeMsg',415,1),(29275,64736,64753,'OP_MailEventNotificationMsg',416,1),(29276,64736,64753,'OP_RestartZoneMsg',417,1),(29277,64736,64753,'OP_FlightPathsMsg',418,1),(29278,64736,64753,'OP_CharacterLinkdeadMsg',419,1),(29279,64736,64753,'OP_CharTransferStartRequestMsg',420,1),(29280,64736,64753,'OP_CharTransferStartReplyMsg',421,1),(29281,64736,64753,'OP_CharTransferRequestMsg',422,1),(29282,64736,64753,'OP_CharTransferReplyMsg',423,1),(29283,64736,64753,'OP_CharTransferRollbackRequestMsg',424,1),(29284,64736,64753,'OP_CharTransferCommitRequestMsg',425,1),(29285,64736,64753,'OP_CharTransferRollbackReplyMsg',426,1),(29286,64736,64753,'OP_CharTransferCommitReplyMsg',427,1),(29287,64736,64753,'OP_GetCharacterSerializedRequestM',428,1),(29288,64736,64753,'OP_GetCharacterSerializedReplyMsg',429,1),(29289,64736,64753,'OP_CreateCharFromCBBRequestMsg',430,1),(29290,64736,64753,'OP_CreateCharFromCBBReplyMsg',431,1),(29291,64736,64753,'OP_HousingDataChangedMsg',432,1),(29292,64736,64753,'OP_HousingRestoreMsg',433,1),(29293,64736,64753,'OP_AuctionItem',434,1),(29294,64736,64753,'OP_AuctionItemReply',435,1),(29295,64736,64753,'OP_AuctionCoin',436,1),(29296,64736,64753,'OP_AuctionCoinReply',437,1),(29297,64736,64753,'OP_AuctionCharacter',438,1),(29298,64736,64753,'OP_AuctionCharacterReply',439,1),(29299,64736,64753,'OP_AuctionCommitMsg',440,1),(29300,64736,64753,'OP_AuctionAbortMsg',441,1),(29301,64736,64753,'OP_CharTransferValidateRequestMsg',442,1),(29302,64736,64753,'OP_CharTransferValidateReplyMsg',443,1),(29303,64736,64753,'OP_RaceRestrictionMsg',444,1),(29304,64736,64753,'OP_SetInstanceDisplayNameMsg',445,1),(29305,64736,64753,'OP_GetAuctionAssetIDMsg',446,1),(29306,64736,64753,'OP_GetAuctionAssetIDReplyMsg',447,1),(29307,64736,64753,'OP_ResendWorldChannelsMsg',448,1),(29308,64736,64753,'OP_DisplayExchangeScreenMsg',449,1),(29309,64736,64753,'OP_ArenaGameTypesMsg',450,1),(29310,64736,64753,'OP_AuditAuctionEventMsg',451,1),(29311,64736,64753,'OP_InviteRequestMsg',452,1),(29312,64736,64753,'OP_InviteResponseMsg',453,1),(29313,64736,64753,'OP_InviteTargetResponseMsg',454,1),(29314,64736,64753,'OP_InspectPlayerRequestMsg',455,1),(29315,64736,64753,'OP_DispatchMsg',456,1),(29316,64736,64753,'OP_DisplayEventMsg',457,1),(29317,64736,64753,'OP_PrePossessionMsg',458,1),(29318,64736,64753,'OP_PostPossessionMsg',459,1),(29319,64736,64753,'OP_ArenaCreate',461,1),(29320,64736,64753,'OP_ArenaList',462,1),(29321,64736,64753,'OP_ArenaWindow',470,1),(29322,64736,64753,'OP_HouseItemsList',489,1),(29323,64736,64753,'OP_CurrentPet',490,1),(29324,64736,64753,'OP_EarlyLandingRequestMsg',491,1),(29325,64736,64753,'OP_AdventureList',494,1),(29326,64736,64753,'OP_CancelSpellCast',495,1),(29327,64736,64753,'OP_ClearForLandingMsg',497,1),(29328,64736,64753,'OP_UpdateTitleCmd',500,1),(29329,64736,64753,'OP_AttackAllowed',506,1),(29330,64736,64753,'OP_AttackNotAllowed',507,1),(29331,64736,64753,'OP_BagOptions',508,1),(29332,64736,64753,'OP_LFGGroupSearch',510,1),(29333,64736,64753,'OP_CharacterHousingList',513,1),(29334,64736,64753,'OP_DressingRoom',516,1),(29335,64736,64753,'OP_PlayLon',517,1),(29336,64736,64753,'OP_SkillInfoRequest',519,1),(29337,64736,64753,'OP_SkillInfoResponse',520,1),(29338,64736,64753,'OP_LFGUpdateMsg',523,1),(29339,64736,64753,'OP_BadLanguageFilter',524,1),(29340,64736,64753,'OP_VoiceChatChannel',525,1),(29341,64736,64753,'OP_MapRequest',526,1),(29342,64736,64753,'OP_MarketFundsUpdate',531,1),(29343,64736,64753,'OP_UIEvent',532,1),(29344,64736,64753,'OP_MarketAddFundsRequest',533,1),(29345,64736,64753,'OP_MarketAddFundsReply',534,1),(29346,64736,64753,'OP_MarketPurchase',536,1),(29347,64736,64753,'OP_MarketPlacePrices',537,1),(29348,64736,64753,'OP_MarketPlaceItems',544,1),(29349,64736,64753,'OP_RecipeBook',545,1),(29350,64736,64753,'OP_CreateCharacterDungeon',552,1),(29351,64736,64753,'OP_DungeonMakerEnter',553,1),(29352,64736,64753,'OP_DungeonMakerItemRequest',557,1),(29353,64736,64753,'OP_CharacterCreatedDungeons',558,1),(29354,64736,64753,'OP_DungeonMakerToolboxList',559,1),(29355,64736,64753,'OP_DungeonMakerUnknown',560,1),(29356,64736,64753,'OP_DungeonMakerUnknown1',561,1),(29357,64736,64753,'OP_PlayerPollPopup',563,1),(29358,64736,64753,'OP_PlayerPollAnswer',564,1),(29359,64736,64753,'OP_MentorPopup',565,1),(29360,64736,64753,'OP_LoadWelcomeWindow',567,1),(29361,64736,64753,'OP_OpenCharCust',569,1),(29362,64736,64753,'OP_SubmitCharCust',570,1),(29363,64736,64753,'OP_QueAllBgSolo',572,1),(29364,64736,64753,'OP_ZoneBgInstanceList',573,1),(29365,64736,64753,'OP_WorldTravelAvail',577,1),(29366,64736,64753,'OP_Launchpad',580,1),(29367,64736,64753,'OP_PaperdollImage',582,1),(29368,64736,64753,'OP_LoadCalendarEvents',583,1),(29369,64736,64753,'OP_VideoUploaded',584,1),(29370,64736,64753,'OP_SavageBarInitMsg',585,1),(29371,64736,64753,'OP_PetOptionsResponse',586,1),(29372,64736,64753,'OP_DungeonMakerItemResponse',587,1),(29373,64736,64753,'OP_Weakness',588,1),(29374,64736,64753,'OP_CharacterMounts',589,1),(29375,64736,64753,'OP_RecipeListUnknown',598,1),(29376,64736,64753,'OP_DailyObjectives',602,1),(29377,64736,64753,'OP_DeityAbilityWindow',622,1),(29378,64736,64753,'OP_EqBetaCopyRequest',640,1),(29379,64736,64753,'OP_SOEAllAccess',649,1),(29380,64736,64753,'OP_EqHearChatCmd',649,1),(29381,64736,64753,'OP_EqDisplayTextCmd',650,1),(29382,64736,64753,'OP_EqCreateGhostCmd',651,1),(29383,64736,64753,'OP_EqCreateWidgetCmd',652,1),(29384,64736,64753,'OP_EqCreateSignWidgetCmd',653,1),(29385,64736,64753,'OP_EqDestroyGhostCmd',654,1),(29386,64736,64753,'OP_EqUpdateGhostCmd',655,1),(29387,64736,64753,'OP_EqSetControlGhostCmd',656,1),(29388,64736,64753,'OP_EqSetPOVGhostCmd',657,1),(29389,64736,64753,'OP_EqHearCombatCmd',658,1),(29390,64736,64753,'OP_EqHearSpellCastCmd',659,1),(29391,64736,64753,'OP_EQHearProcCmd',660,1),(29392,64736,64753,'OP_EQHearResEffectCmd',661,1),(29393,64736,64753,'OP_EqHearSpellInterruptCmd',662,1),(29394,64736,64753,'OP_EqHearSpellFizzleCmd',663,1),(29395,64736,64753,'OP_EqHearConsiderCmd',664,1),(29396,64736,64753,'OP_EqUpdateSubClassesCmd',665,1),(29397,64736,64753,'OP_EqCreateListBoxCmd',666,1),(29398,64736,64753,'OP_EqSetDebugPathPointsCmd',667,1),(29399,64736,64753,'OP_EqCannedEmoteCmd',669,1),(29400,64736,64753,'OP_EqStateCmd',670,1),(29401,64736,64753,'OP_EqPlaySoundCmd',671,1),(29402,64736,64753,'OP_EqPlaySound3DCmd',672,1),(29403,64736,64753,'OP_EqPlayVoiceCmd',673,1),(29404,64736,64753,'OP_EqHearDrowningCmd',674,1),(29405,64736,64753,'OP_EqHearDeathCmd',675,1),(29406,64736,64753,'OP_EqGroupMemberRemovedCmd',676,1),(29407,64736,64753,'OP_EqHearChainEffectCmd',677,1),(29408,64736,64753,'OP_EqReceiveOfferCmd',678,1),(29409,64736,64753,'OP_EqInspectPCResultsCmd',679,1),(29410,64736,64753,'OP_EqDrawablePathGraphCmd',680,1),(29411,64736,64753,'OP_EqDialogOpenCmd',681,1),(29412,64736,64753,'OP_EqDialogCloseCmd',682,1),(29413,64736,64753,'OP_EqFactionUpdateCmd',683,1),(29414,64736,64753,'OP_EqCollectionUpdateCmd',684,1),(29415,64736,64753,'OP_EqCollectionFilterCmd',685,1),(29416,64736,64753,'OP_EqCollectionItemCmd',686,1),(29417,64736,64753,'OP_EqQuestJournalUpdateCmd',687,1),(29418,64736,64753,'OP_EqMentoring',688,1),(29419,64736,64753,'OP_EqQuestJournalReplyCmd',689,1),(29420,64736,64753,'OP_EqQuestGroupCmd',690,1),(29421,64736,64753,'OP_EqUpdateMerchantCmd',691,1),(29422,64736,64753,'OP_EqUpdateStoreCmd',692,1),(29423,64736,64753,'OP_EqUpdatePlayerTradeCmd',693,1),(29424,64736,64753,'OP_EqHelpPathCmd',694,1),(29425,64736,64753,'OP_EqHelpPathClearCmd',695,1),(29426,64736,64753,'OP_EqUpdateBankCmd',696,1),(29427,64736,64753,'OP_EqExamineInfoCmd',697,1),(29428,64736,64753,'OP_EqCloseWindowCmd',698,1),(29429,64736,64753,'OP_EqUpdateLootCmd',699,1),(29430,64736,64753,'OP_EqJunctionListCmd',700,1),(29431,64736,64753,'OP_EqShowDeathWindowCmd',701,1),(29432,64736,64753,'OP_EqDisplaySpellFailCmd',702,1),(29433,64736,64753,'OP_EqSpellCastStartCmd',703,1),(29434,64736,64753,'OP_EqSpellCastEndCmd',704,1),(29435,64736,64753,'OP_EqResurrectedCmd',705,1),(29436,64736,64753,'OP_EqChoiceWinCmd',706,1),(29437,64736,64753,'OP_EqSetDefaultVerbCmd',707,1),(29438,64736,64753,'OP_EqInstructionWindowCmd',708,1),(29439,64736,64753,'OP_EqInstructionWindowCloseCmd',709,1),(29440,64736,64753,'OP_EqInstructionWindowGoalCmd',710,1),(29441,64736,64753,'OP_EqInstructionWindowTaskCmd',711,1),(29442,64736,64753,'OP_EqEnableGameEventCmd',712,1),(29443,64736,64753,'OP_EqShowWindowCmd',713,1),(29444,64736,64753,'OP_EqEnableWindowCmd',714,1),(29445,64736,64753,'OP_EqFlashWindowCmd',715,1),(29446,64736,64753,'OP_EqHearPlayFlavorCmd',717,1),(29447,64736,64753,'OP_EqUpdateSignWidgetCmd',718,1),(29448,64736,64753,'OP_EqDebugPVDCmd',719,1),(29449,64736,64753,'OP_EqShowBookCmd',720,1),(29450,64736,64753,'OP_EqQuestionnaireCmd',721,1),(29451,64736,64753,'OP_EqGetProbsCmd',723,1),(29452,64736,64753,'OP_EqHearHealCmd',724,1),(29453,64736,64753,'OP_EqChatChannelUpdateCmd',725,1),(29454,64736,64753,'OP_EqWhoChannelQueryReplyCmd',726,1),(29455,64736,64753,'OP_EqAvailWorldChannelsCmd',727,1),(29456,64736,64753,'OP_EqUpdateTargetCmd',728,1),(29457,64736,64753,'OP_BrokerSellList',729,1),(29458,64736,64753,'OP_EqConsignmentItemsCmd',730,1),(29459,64736,64753,'OP_EqStartBrokerCmd',732,1),(29460,64736,64753,'OP_EqMapExplorationCmd',733,1),(29461,64736,64753,'OP_EqStoreLogCmd',734,1),(29462,64736,64753,'OP_EqSpellMoveToRangeAndRetryCmd',735,1),(29463,64736,64753,'OP_EqUpdatePlayerMailCmd',736,1),(29464,64736,64753,'OP_GuildStatusUpdate',739,1),(29465,64736,64753,'OP_EqArenaResultsCmd',740,1),(29466,64736,64753,'OP_EqGuildBankEventActionCmd',741,1),(29467,64736,64753,'OP_EqGuildBankExamineInfoCmd',742,1),(29468,64736,64753,'OP_EqHearSpellNoLandCmd',743,1),(29469,64736,64753,'OP_Lottery',744,1),(29470,64736,64753,'OP_GuildRecruitingMemberInfo',745,1),(29471,64736,64753,'OP_GuildRecruiting',746,1),(29472,64736,64753,'OP_GuildRecruitingDetails',747,1),(29473,64736,64753,'OP_GuildRecruitingImage',748,1),(29474,64736,64753,'OP_TradeskillList',749,1),(29475,64736,64753,'OP_CharRenamed',750,1),(29476,64736,64753,'OP_UseAdornment',760,1),(29477,64736,64753,'OP_ExpPurchWindow',766,1),(29478,64736,64753,'OP_PointOfInterest',770,1),(29479,64736,64753,'OP_PointOfInterest2',771,1),(29480,64736,64753,'OP_TraitsList',772,1),(29481,64736,64753,'OP_CustomizeHouseDisplay',775,1),(29482,64736,64753,'OP_VoiceChatServer',776,1),(29483,64736,64753,'OP_SupplyDepot',780,1),(29484,64736,64753,'OP_EQHearThreatCmd',781,1),(29485,64736,64753,'OP_RecipeList',782,1),(29486,64736,64753,'OP_Research',783,1),(29487,64736,64753,'OP_CharacterCurrency',784,1),(29488,64736,64753,'OP_CharacterAchievements',785,1),(29489,64736,64753,'OP_AchievementUpdateMsg',786,1),(29490,64736,64753,'OP_EQHearDispellCmd',787,1),(29491,64736,64753,'OP_JournalQuestStoryline',788,1),(29492,64736,64753,'OP_DungeonPlayAsAvatarList',789,1),(29493,64736,64753,'OP_DungeonPlayAsAvatarSelected',790,1),(29494,64736,64753,'OP_MercHireWindow',792,1),(29495,64736,64753,'OP_MercUnknown',793,1),(29496,64736,64753,'OP_Unknown',806,1),(29497,64736,64753,'OP_HeritageMsg',10032,1); +/*!40000 ALTER TABLE `opcodes` ENABLE KEYS */; +UNLOCK TABLES; + +-- +-- Table structure for table `visual_states` +-- + +DROP TABLE IF EXISTS `visual_states`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `visual_states` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `visual_state_id` int(10) unsigned NOT NULL DEFAULT 0, + `name` varchar(250) COLLATE latin1_general_ci NOT NULL DEFAULT 'None', + `min_client_version` smallint(5) unsigned NOT NULL DEFAULT 0, + PRIMARY KEY (`id`), + UNIQUE KEY `VisIDX` (`visual_state_id`) +) ENGINE=InnoDB AUTO_INCREMENT=20123 DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Dumping data for table `visual_states` +-- + +LOCK TABLES `visual_states` WRITE; +/*!40000 ALTER TABLE `visual_states` DISABLE KEYS */; +INSERT INTO `visual_states` VALUES (1,16,'1h_sword_idle',0),(2,50,'2h_sword_enter',0),(3,52,'2h_sword_idle',0),(4,101,'bostaff_idle',0),(5,121,'bow',0),(6,125,'cackle',0),(7,126,'cast',0),(8,138,'cast_arch_circle',0),(9,139,'cast_ball',0),(10,140,'cast_bright_ring',0),(11,141,'cast_columns',0),(12,142,'cast_dark_ring',0),(13,143,'cast_dbl_bright_ring',0),(14,144,'cast_druid',0),(15,145,'cast_dustpuff',0),(16,146,'cast_heal',0),(17,147,'cast_heal_blur',0),(18,148,'cast_lightning',0),(19,149,'cast_mage',0),(20,150,'cast_mandala',0),(21,151,'cast_mesmerize',0),(22,152,'cast_necromancer',0),(23,153,'cast_nuke_mental',0),(24,154,'cast_pfx_dust_leaves_l',0),(25,155,'cast_pfx_dust_leaves_r',0),(26,158,'cast_pfx_glow_firepuff_l',0),(27,159,'cast_pfx_glow_firepuff_r',0),(28,160,'cast_pfx_glow_galv_l',0),(29,161,'cast_pfx_glow_galv_r',0),(30,162,'cast_pfx_glow_prism_l',0),(31,163,'cast_pfx_glow_prism_r',0),(32,166,'cast_pfx_l',0),(33,167,'cast_pfx_magenuke_l',0),(34,168,'cast_pfx_magenuke_r',0),(35,169,'cast_pfx_r',0),(36,172,'cast_placeholder_l',0),(37,173,'cast_placeholder_r',0),(38,174,'cast_priest',0),(39,175,'cast_rays',0),(40,176,'cast_rays_l',0),(41,177,'cast_rays_mental',0),(42,178,'cast_rays_r',0),(43,180,'cast_rings_crescent',0),(44,181,'cast_rune_ring',0),(45,182,'cast_runedraw',0),(46,183,'cast_runes_randomorbits',0),(47,184,'cast_spark_circle',0),(48,185,'cast_sparktrail_spiral',0),(49,186,'cast_spotsparks_ring',0),(50,187,'cast_swirlie',0),(51,188,'cast_vault',0),(52,189,'cast_ward',0),(53,219,'crouch_enter',0),(54,220,'crouch_exit',0),(55,221,'crouch_idle',0),(56,228,'dead',0),(57,229,'dead_enter',0),(58,267,'dual_wield_idle',0),(59,290,'fall',0),(60,298,'flourish',0),(61,308,'gag',0),(62,323,'idle',0),(63,324,'idle01',0),(64,325,'idle02',0),(65,372,'monk_idle',0),(66,396,'notworthy',0),(67,419,'pike_idle',0),(68,434,'procedural_hit',0),(69,450,'pugilist_idle',0),(70,489,'result_bash',0),(71,490,'result_buff_limbs',0),(72,491,'result_fire',0),(73,492,'result_firetrail',0),(74,493,'result_firews',0),(75,495,'result_gather_mana1',0),(76,496,'result_ghost',0),(77,497,'result_heal',0),(78,498,'result_heal11',0),(79,499,'result_heal9',0),(80,500,'result_kick',0),(81,501,'result_lightning',0),(82,502,'result_loot',0),(83,503,'result_loot_ash',0),(84,504,'result_mesmerize',0),(85,505,'result_placeholder',0),(86,506,'result_spawn',0),(87,507,'result_strike',0),(88,508,'result_stun',0),(89,509,'result_test',0),(90,510,'result_ward',0),(91,511,'result_ward1',0),(92,517,'run',0),(93,518,'rune_fire_orbiting',0),(94,538,'sit_enter',0),(95,539,'sit_exit',0),(96,540,'sit_idle',0),(97,626,'spell_placeholder',0),(98,627,'spell_root',0),(99,722,'trail',0),(100,746,'untrained_idle',0),(101,891,'yawn',0),(102,893,'cast_cloudring',0),(103,894,'cast_dblring_blend',0),(104,895,'cast_lhand_sparkle_trail',0),(105,902,'cast_mistring',0),(106,909,'cast_rhand_sparkle_trail',0),(107,968,'cast_cloudsphere',0),(108,1004,'horse_idle',0),(109,1026,'1h_sword_attack',0),(110,1027,'1h_sword_attack01',0),(111,1028,'1h_sword_attack02',0),(112,1029,'1h_sword_attack03',0),(113,1044,'cast_rays_cloud',0),(114,1045,'cast_winkers',0),(115,1053,'procedural_ouch',0),(116,1054,'result_bear',0),(117,1114,'1h_sword_death_blow',0),(118,1162,'procedural_parry',0),(119,1163,'ignite_weapon',0),(120,1181,'monk_attack',0),(121,1201,'monk_attack01',0),(122,1206,'pike_attack',0),(123,1211,'cast_orbiting_rings',0),(124,1212,'cast_spiral_trace',0),(125,1218,'cast_elec_hands',0),(126,1226,'cast_pfx_glow_trail_l',0),(127,1227,'cast_pfx_glow_trail_r',0),(128,1228,'cast_hammer_toss',0),(129,1229,'result_hammer_approaching',0),(130,1230,'result_hammer_explode',0),(131,1237,'2h_sword_attack',0),(132,1243,'dual_wield_attack',0),(133,1244,'dual_wield_attack01',0),(134,1245,'dual_wield_attack02',0),(135,1258,'cast_scimitar_toss',0),(136,1259,'cast_spark_sphere',0),(137,1261,'result_scimitar_approaching',0),(138,1262,'result_scimitar_explode',0),(139,1271,'1h_sword_dodge_backhand',0),(140,1272,'1h_sword_dodge_down',0),(141,1273,'1h_sword_dodge_forehand',0),(142,1274,'1h_sword_ouch_backhand',0),(143,1275,'1h_sword_ouch_down',0),(144,1276,'1h_sword_ouch_forehand',0),(145,1277,'1h_sword_parry_backhand',0),(146,1278,'1h_sword_parry_down',0),(147,1279,'1h_sword_parry_forehand',0),(148,1280,'cast_distort',0),(149,1281,'cast_distort_rect',0),(150,1282,'cast_trail_leftarm',0),(151,1283,'cast_trail_rightarm',0),(152,1284,'monk_attack02',0),(153,1286,'monk_dodge_backhand',0),(154,1287,'monk_dodge_down',0),(155,1295,'result_blast_cone',0),(156,1296,'result_camera_shake',0),(157,1297,'result_ground_blast',0),(158,1298,'result_lightning_bolt1',0),(159,1299,'result_lion_spirit',0),(160,1300,'result_phoenix_rising',0),(161,1302,'result_flash1',0),(162,1303,'result_lightning_bolt2',0),(163,1304,'result_lightning_bolt3',0),(164,1305,'result_spirit_of_the_wolf',0),(165,1307,'cast_runedraw_blue',0),(166,1314,'result_phoenix_descending',0),(167,1316,'cast_dustpuff_rfoot',0),(168,1317,'cast_trail_rightfoot',0),(169,1318,'cast_trail_rightshin',0),(170,1323,'1h_crush_attack',0),(171,1324,'1h_crush_attack01',0),(172,1325,'1h_crush_attack02',0),(173,1326,'1h_crush_attack03',0),(174,1332,'1h_crush_dodge_backhand',0),(175,1333,'1h_crush_dodge_down',0),(176,1334,'1h_crush_dodge_forehand',0),(177,1335,'1h_crush_dodge_thrust',0),(178,1338,'1h_crush_idle',0),(179,1339,'1h_crush_ouch_backhand',0),(180,1340,'1h_crush_ouch_down',0),(181,1341,'1h_crush_ouch_forehand',0),(182,1342,'1h_crush_ouch_thrust',0),(183,1343,'1h_crush_parry_backhand',0),(184,1344,'1h_crush_parry_down',0),(185,1345,'1h_crush_parry_forehand',0),(186,1346,'1h_crush_parry_thrust',0),(187,1350,'1h_pierce_attack',0),(188,1351,'1h_pierce_attack01',0),(189,1355,'1h_pierce_dodge_backhand',0),(190,1356,'1h_pierce_dodge_down',0),(191,1357,'1h_pierce_dodge_forehand',0),(192,1358,'1h_pierce_dodge_thrust',0),(193,1361,'1h_pierce_idle',0),(194,1362,'1h_pierce_ouch_backhand',0),(195,1363,'1h_pierce_ouch_down',0),(196,1364,'1h_pierce_ouch_forehand',0),(197,1365,'1h_pierce_ouch_thrust',0),(198,1366,'1h_pierce_parry_backhand',0),(199,1367,'1h_pierce_parry_down',0),(200,1368,'1h_pierce_parry_forehand',0),(201,1369,'1h_pierce_parry_thrust',0),(202,1373,'1h_sword_death_blow01',0),(203,1374,'1h_sword_dodge_thrust',0),(204,1375,'1h_sword_ouch_thrust',0),(205,1376,'1h_sword_parry_thrust',0),(206,1384,'cast_dustpuff_ws',0),(207,1386,'cast_glow_ring_wavyrays',0),(208,1387,'cast_glow_ring_wavyrays_l',0),(209,1388,'cast_glow_ring_wavyrays_r',0),(210,1412,'cast_sphere_lightning',0),(211,1413,'cast_sphere_lightning2',0),(212,1414,'cast_sphere_lightning_r',0),(213,1423,'result_charge',0),(214,1424,'result_ghost_shield',0),(215,1425,'result_heal_heart',0),(216,1426,'result_sparkly_swirl_flare',0),(217,1432,'cast_fighter',0),(218,1433,'cast_ghost_shield_summoned',0),(219,1439,'cast_scout',0),(220,1441,'cast_ghost_shield_summoned_sparkles',0),(221,1444,'result_glint2',0),(222,1445,'result_trail',0),(223,1453,'2h_sword_attack01',0),(224,1454,'2h_sword_attack02',0),(225,1457,'2h_sword_dodge_backhand',0),(226,1458,'2h_sword_dodge_down',0),(227,1459,'2h_sword_dodge_forehand',0),(228,1460,'2h_sword_ouch_backhand',0),(229,1461,'2h_sword_ouch_down',0),(230,1462,'2h_sword_ouch_forehand',0),(231,1472,'result_crystal_shield',0),(232,1481,'cast_snake_idling',0),(233,1482,'result_horse_running',0),(234,1483,'result_lion_attacking',0),(235,1484,'result_lion_roaring',0),(236,1485,'result_snake_striking',0),(237,1490,'result_cat_leaping',0),(238,1491,'result_cold_blast',0),(239,1492,'result_cold_breath',0),(240,1493,'state_breath_cold',0),(241,1494,'result_cold_forced_shader',0),(242,1495,'result_cold_ice_crystals',0),(243,1496,'result_poison_breath',0),(244,1497,'result_poison_cysts_growing',0),(245,1498,'result_poison_forced_shader',0),(246,1503,'cast_ball_fire',0),(247,1505,'cast_spotsparks_ring2',0),(248,1506,'cast_spotsparks_ring3',0),(249,1521,'result_poison_cysts_blast',0),(250,1523,'cast_lhand_sparkle_trail_t',0),(251,1524,'cast_poison_dragon_breath',0),(252,1525,'cast_rhand_sparkle_trail_t',0),(253,1528,'result_poison_whirlwind',0),(254,1544,'cast_distort_leftfoot',0),(255,1546,'cast_distort_weaponrootleft',0),(256,1547,'cast_distort_weaponrootright',0),(257,1548,'cast_dustpuff_lfoot',0),(258,1549,'cast_dustpuff_weaponrootleft',0),(259,1550,'cast_dustpuff_weaponrootright',0),(260,1556,'result_fire_ring_green_medium',0),(261,1557,'result_poison_cyst_vomit',0),(262,1558,'result_runes_rising',0),(263,1559,'result_teleporter_coalesce',0),(264,1563,'cast_cleric',0),(265,1564,'cast_coercer',0),(266,1566,'cast_defiler',0),(267,1567,'cast_enchanter',0),(268,1568,'cast_fury',0),(269,1569,'cast_illusionist',0),(270,1570,'cast_inquisitor',0),(271,1571,'cast_mystic',0),(272,1572,'cast_shaman',0),(273,1573,'cast_sorcerer',0),(274,1574,'cast_summoner',0),(275,1575,'cast_templar',0),(276,1576,'cast_warden',0),(277,1577,'cast_warlock',0),(278,1578,'cast_wizard',0),(279,1580,'result_bull_stomping',0),(280,1581,'cast_hammer_sparkling_floating',0),(281,1582,'cast_mist_sphere_add',0),(282,1583,'cast_mist_sphere_blend',0),(283,1584,'cast_swirlies_smoke',0),(284,1585,'cast_swirlies_smoke_blend',0),(285,1592,'result_fire_green',0),(286,1593,'result_poison_cysts_growing_giant',0),(287,1594,'cast_forced_flasher_diff_noise',0),(288,1595,'cast_forced_flasher_oceanseamless',0),(289,1596,'cast_forced_flasher_streaks',0),(290,1597,'cast_forced_flasher_tiledfoam',0),(291,1598,'cast_forced_flasher_tiledfoam2',0),(292,1599,'cast_forced_flasher_tiledfoam3',0),(293,1600,'cast_forced_flasher_tiledfoam4',0),(294,1625,'result_fire_engulf',0),(295,1630,'cast_expanding_rings',0),(296,1631,'cast_forced_flasher_fadein_diff_noise',0),(297,1644,'pugilist_attack',0),(298,1646,'pugilist_attack02',0),(299,1659,'result_fire_slam',0),(300,1660,'cast_distort_flat',0),(301,1661,'cast_mandala_blobs',0),(302,1662,'result_ground_blast_lava',0),(303,1665,'spell_root_colored',0),(304,1667,'cast_dragon_wing_dust',0),(305,1683,'result_camera_shake_wider',0),(306,1684,'result_stunned',0),(307,1686,'cast_snake_shrinking',0),(308,1727,'horse_enter',0),(309,1753,'levelup',0),(310,1756,'result_trail_lightning',0),(311,1764,'result_trail_motion',0),(312,1765,'result_tree_morph',0),(313,1766,'result_wood_forced_shader',0),(314,1767,'result_wood_spikes_growing',0),(315,1773,'cast_fire_trail',0),(316,1793,'result_cactus_spikes_growing',0),(317,1794,'result_cold_fog',0),(318,1795,'result_colored_forced_shader',0),(319,1796,'result_ghost_forced_shader',0),(320,1797,'result_snowflakes_growing',0),(321,1798,'result_snowstorm',0),(322,1799,'result_sparkles_clinging',0),(323,1800,'result_teleport_sparkle',0),(324,1801,'result_teleport_vanish',0),(325,1802,'result_wood_roots_growing',0),(326,1803,'result_teleport_appear',0),(327,1806,'cast_flasher',0),(328,1807,'cast_pfx_trace_puffs_l',0),(329,1808,'cast_pfx_trace_puffs_r',0),(330,1823,'cast_fire_whip_circling',0),(331,1832,'result_spark_burst',0),(332,1849,'cast_enthralling_fetters_circling',0),(333,1850,'cast_enthralling_fetters_circling_ghostly',0),(334,1851,'cast_testbones',0),(335,1853,'result_clay_red_forced_shader',0),(336,1854,'result_enthralling_fetters',0),(337,1855,'result_metal_rusty_forced_shader',0),(338,1859,'result_clay_chunks_dropping',0),(339,1860,'result_flash',0),(340,1861,'result_water_dripping',0),(341,1862,'result_water_forced_shader',0),(342,1863,'result_bubble_stream',0),(343,1864,'result_ghost_fish_circling',0),(344,1865,'cast_testbones_vgraph',0),(345,1866,'result_ice_blast',0),(346,1867,'result_ice_crystals_dropping',0),(347,1868,'result_icy_cage',0),(348,1869,'cast_mandala_electricity',0),(349,1870,'cast_mandala_streaks',0),(350,1871,'result_icy_cage_blast_ring',0),(351,1872,'cast_rune_ring_good',0),(352,1873,'cast_rune_ring_rotate',0),(353,1874,'result_icicles_breaking',0),(354,1875,'result_icy_comet',0),(355,1876,'result_icy_comet_exploding',0),(356,1879,'result_glacial_wall',0),(357,1880,'result_glacial_wall_sparkles',0),(358,1881,'result_ice_shields_burning',0),(359,1882,'pike_attack01',0),(360,1883,'pike_attack02',0),(361,1901,'result_clay_shields',0),(362,1902,'result_scale_skin_forced_shader',0),(363,1904,'result_color_shower',0),(364,1905,'result_dispell1_out',0),(365,1906,'result_verdant_genesis',0),(366,1907,'result_attract_bubbles',0),(367,1909,'result_offering_of_vitae',0),(368,1910,'result_sparkles_clinging_soft',0),(369,1911,'result_bestowal_of_vitae',0),(370,1912,'result_ethereal_ward',0),(371,1913,'result_dps_decrease',0),(372,1914,'result_smite',0),(373,1938,'result_ember_kite_shields_burning',0),(374,1939,'result_ice_sword_breaking',0),(375,1942,'result_charm',0),(376,1943,'result_rainbow_forced_shader',0),(377,1945,'result_ember_swords_burning',0),(378,1946,'result_ghost_sword_breaking',0),(379,1947,'result_offering_of_vitae_2',0),(380,1953,'result_smite_2',0),(381,1954,'result_tellurian_recruit',0),(382,1962,'result_expand_ring_screech',0),(383,1963,'result_grim_champion',0),(384,1964,'result_shockwave_sparkles',0),(385,1965,'result_tremor',0),(386,1966,'bostaff_attack',0),(387,1967,'bostaff_attack01',0),(388,1968,'bostaff_attack02',0),(389,1969,'bostaff_attack03',0),(390,1986,'result_bloodlust',0),(391,1987,'result_haste',0),(392,1994,'cast_forced_flasher_tiledfoam3_scroll',0),(393,1995,'cast_mage_old',0),(394,2000,'result_backdraft',0),(395,2001,'result_sanction_of_merit',0),(396,2002,'result_toxin_out',0),(397,2003,'result_white_radiance',0),(398,2017,'result_explosion_fireworks',0),(399,2018,'result_explosion_fireworks_ground',0),(400,2031,'result_distort_dot',0),(401,2032,'result_distort_hit',0),(402,2036,'result_bone_cage_1',0),(403,2037,'result_fiery_comet_descending',0),(404,2038,'result_spiral_smite',0),(405,2049,'result_weakness',0),(406,2065,'result_bloodlust_2',0),(407,2066,'result_colored_radiance',0),(408,2073,'result_poison_cloud',0),(409,2074,'result_smoke_sphere',0),(410,2082,'result_decree_of_faith',0),(411,2083,'result_dust_fall',0),(412,2084,'result_fascinate',0),(413,2085,'result_sparkle_blast',0),(414,2103,'aura_mage',0),(415,2104,'aura_priest',0),(416,2111,'result_statue',0),(417,2114,'bow_dodge_backhand',0),(418,2115,'bow_dodge_down',0),(419,2116,'bow_dodge_forehand',0),(420,2117,'bow_dodge_thrust',0),(421,2120,'bow_idle',0),(422,2121,'bow_ouch_backhand',0),(423,2122,'bow_ouch_down',0),(424,2123,'bow_ouch_forehand',0),(425,2124,'bow_ouch_thrust',0),(426,2139,'cast_pfx_glow_galv_ws_l',0),(427,2140,'cast_pfx_glow_galv_ws_r',0),(428,2141,'result_bubble_ring',0),(429,2142,'result_sparkles_out',0),(430,2145,'cast_orbiting_rings2',0),(431,2178,'cast_fuliginous',0),(432,2188,'result_enthralling_fetters_ghostly',0),(433,2198,'cast_sparkles_in',0),(434,2208,'result_swirly_column',0),(435,2228,'result_instant_lifetap',0),(436,2229,'result_ot_lifetap',0),(437,2248,'result_mouth_in',0),(438,2249,'result_sparkle_scan_up',0),(439,2250,'result_spiral_up',0),(440,2258,'cast_bard',0),(441,2259,'cast_crusader',0),(442,2260,'cast_dirge',0),(443,2261,'cast_paladin',0),(444,2263,'cast_shadowknight',0),(445,2264,'cast_troubador',0),(446,2270,'cast_sawdust',0),(447,2507,'result_lightning_shimmer',0),(448,2525,'persist_pet_air_fragment',0),(449,2526,'persist_pet_chaos_fragment',0),(450,2527,'persist_pet_earth_fragment',0),(451,2528,'persist_pet_fire_fragment',0),(452,2529,'persist_pet_fire_servant',0),(453,2530,'persist_pet_ice_servant',0),(454,2531,'persist_pet_lightning_servant',0),(455,2532,'persist_pet_water_fragment',0),(456,2536,'cast_distort_p3',0),(457,2538,'cast_explosion_p5',0),(458,2544,'result_flash_weapon_red',0),(459,2545,'result_shield',0),(460,2558,'cast_angry_burst',0),(461,2559,'cast_cold_dragon_breath',0),(462,2560,'cast_distortion_hit_minimal',0),(463,2561,'cast_glow_distort',0),(464,2563,'cast_void_dragon_breath',0),(465,2564,'result_sparks_360_p5',0),(466,2565,'result_void_whirlwind',0),(467,2588,'cast_distort_rightfoot_ws',0),(468,2589,'cast_dragon_pbae_cold',0),(469,2590,'cast_dragon_pbae_heat',0),(470,2591,'cast_dragon_pbae_mental',0),(471,2592,'cast_dragon_pbae_poison',0),(472,2593,'cast_dragon_pbae_void',0),(473,2594,'cast_dragon_tae_mental',0),(474,2595,'cast_fire_foot',0),(475,2597,'cast_spark_sphere_ws_p5',0),(476,2599,'result_circle_blast_p5',0),(477,2600,'result_cold_ice_crystals_rightfoot',0),(478,2601,'result_flash_weapon_red_min',0),(479,2602,'result_golden_glow',0),(480,2603,'result_ice_blast_rightfoot',0),(481,2604,'result_silver_glow',0),(482,2623,'cast_dark_forced_shader',0),(483,2624,'cast_expand_ring_ws',0),(484,2626,'cast_stun_stars',0),(485,2627,'cast_taunt',0),(486,2636,'cast_dragon_pbae_lightning',0),(487,2637,'cast_dragon_tae_lightning',0),(488,2642,'result_dust_black',0),(489,2643,'result_spark_burst_p3',0),(490,2644,'result_sparkle_trail_fire_shin',0),(491,2645,'result_sparkle_trail_ice_shin',0),(492,2647,'trails_lightning_rightshin',0),(493,2652,'cast_fire_weapon',0),(494,2656,'result_sparkle_trail_fire_weapon',0),(495,2659,'result_trail_lightning_red',0),(496,2668,'2h_sword_defensive_buff',0),(497,2670,'2h_sword_kick',0),(498,2674,'2h_sword_whirling_attack',0),(499,2675,'2h_sword_wild_swing',0),(500,2684,'cast_elec_feet',0),(501,2686,'cast_soothe_burst',0),(502,2687,'cast_spark_sphere_ws_red_p5',0),(503,2688,'cast_sparkle_trail_fire_head',0),(504,2702,'pike_kick',0),(505,2706,'pike_whirling_attack',0),(506,2707,'result_flash_weapon_sat_blue',0),(507,2708,'result_flash_weapon_sat_red',0),(508,2709,'result_ice_blast_weapon',0),(509,2710,'result_spark_burst_p3_gold',0),(510,2711,'result_spark_burst_p3_red',0),(511,2712,'result_spark_burst_rightfoot',0),(512,2714,'result_sparkle_trail_fire_leftshin',0),(513,2716,'result_sparkle_trail_ice_lefthand',0),(514,2717,'result_sparkle_trail_ice_leftshin',0),(515,2718,'result_sparkle_trail_ice_weapon',0),(516,2719,'result_sparkle_trail_weapon_right_glow_blue',0),(517,2720,'result_sparkle_trail_weapon_right_glow_gold',0),(518,2721,'result_sparkle_trail_weapon_right_glow_red',0),(519,2722,'result_sparks_360_blue_p5',0),(520,2723,'result_white_radiance_weapon',0),(521,2724,'result_wind_smoke_head',0),(522,2753,'cast_spark_cage',0),(523,2754,'cast_spark_shield',0),(524,2755,'cast_sparkle_trail_fire_lefthand',0),(525,2756,'cast_sparkle_trail_fire_righthand',0),(526,2757,'cast_sparkle_trail_fire_righttolefthand',0),(527,2758,'cast_statue',0),(528,2759,'cast_super_buff',0),(529,2767,'persist_divine',0),(530,2768,'persist_eidolon',0),(531,2769,'persist_energy',0),(532,2770,'persist_fire',0),(533,2771,'persist_ice',0),(534,2772,'persist_mental',0),(535,2773,'persist_mesmerize',0),(536,2774,'persist_poison',0),(537,2775,'persist_stunned',0),(538,2776,'result_spark_burst_head',0),(539,2777,'result_weapon_trail_fire',0),(540,2778,'result_wind_smoke_p3',0),(541,2782,'cast_instrument_drum',0),(542,2783,'cast_instrument_stringed',0),(543,2785,'cast_tune_guitar',0),(544,2790,'persist_damage',0),(545,2791,'persist_stone',0),(546,2792,'result_heal_heart_blue',0),(547,2793,'result_motion_lines',0),(548,2794,'result_note_circle',0),(549,2797,'cast_debuff',0),(550,2799,'cast_stun_stars_sub',0),(551,2800,'pike_wild_swing',0),(552,2801,'result_motion_lines_flasher',0),(553,2802,'result_motion_lines_sub',0),(554,2803,'result_spark_burst_p3_blue',0),(555,2808,'forestry_success',0),(556,2809,'gathering_search',0),(557,2810,'gathering_success',0),(558,2811,'mining_digging',0),(559,2812,'mining_success',0),(560,2813,'result_bard_zap',0),(561,2814,'result_motion_circles',0),(562,2815,'result_note_blast',0),(563,2837,'result_ghost_spider',0),(564,2852,'cast_anim_mesh_dragon_ps',0),(565,2871,'cast_druid_ws',0),(566,2872,'cast_frosty_hand_l',0),(567,2873,'cast_frosty_hand_r',0),(568,2900,'cast_tune_drum',0),(569,2924,'cast_priest_ws',0),(570,2925,'cast_trail_rightfoot_gold',0),(571,2926,'levelup_50',0),(572,2927,'levelup_hallmark',0),(573,2928,'result_sparkle_scan_down',0),(574,2930,'result_trail_lightning_gold',0),(575,2933,'1h_thrown_attack',0),(576,2935,'1h_thrown_dodge_backhand',0),(577,2936,'1h_thrown_dodge_down',0),(578,2937,'1h_thrown_dodge_forehand',0),(579,2938,'1h_thrown_dodge_thrust',0),(580,2939,'1h_thrown_idle',0),(581,2940,'1h_thrown_ouch_backhand',0),(582,2941,'1h_thrown_ouch_down',0),(583,2942,'1h_thrown_ouch_forehand',0),(584,2943,'1h_thrown_ouch_thrust',0),(585,2953,'bostaff_kick',0),(586,2960,'bostaff_whirling_attack',0),(587,2961,'bostaff_wild_swing',0),(588,2966,'cast_spark_burst_weaponrootright',0),(589,2983,'converse_male04',0),(590,2991,'converse_male12',0),(591,2995,'dual_wield_kick',0),(592,3002,'dual_wield_whirling_attack',0),(593,3003,'dual_wield_wild_swing',0),(594,3021,'monk_wild_swing',0),(595,3029,'pugilist_kick',0),(596,3036,'pugilist_whirling_attack',0),(597,3037,'pugilist_wild_swing',0),(598,3038,'result_spark_burst_p1',0),(599,3112,'cast_sparkle_trail_fire_lhand_neg',0),(600,3113,'cast_sparkle_trail_fire_rhand_neg',0),(601,3118,'persist_debuff',0),(602,3119,'result_fire_negative',0),(603,3120,'result_fire_objects',0),(604,3142,'result_embers_p2p',0),(605,3143,'result_fraxflame_p2p',0),(606,3144,'result_prism_hex_p2p',0),(607,3181,'result_glow_weapon_red',0),(608,3183,'trails_fire_rightshin',0),(609,3192,'cast_darkness_skull_buff_summoned',0),(610,3194,'persist_distortion_hit_minimal',0),(611,3195,'result_color_rain_damage',0),(612,3196,'result_darkness_skull_buff',0),(613,3197,'result_noxious_oozing_shield_buff',0),(614,3198,'result_swirly_column_evil',0),(615,3202,'result_icicle_rain_damage',0),(616,3203,'result_rain_damage',0),(617,3210,'cast_vines_root_control_circling',0),(618,3224,'persist_electrified',0),(619,3225,'result_bloodlust_3',0),(620,3226,'result_nature_res',0),(621,3227,'result_poison_rain_damage',0),(622,3228,'result_skull_breath_poison_damage',0),(623,3229,'result_spirit_res',0),(624,3230,'result_sword_rain_damage',0),(625,3231,'result_vines_root_control',0),(626,3236,'cast_super_lightning',0),(627,3237,'result_petrify_stun_control',0),(628,3238,'result_shadow_summon',0),(629,3243,'result_agility',0),(630,3244,'result_air_elemental_summon',0),(631,3245,'result_arch_heal',0),(632,3246,'result_electrified',0),(633,3247,'result_lifetap',0),(634,3248,'result_vitae_buff_heal',0),(635,3254,'cast_darkness_whip_circling',0),(636,3256,'cast_spark_cage_neg',0),(637,3257,'cast_spark_shield2',0),(638,3258,'cast_spark_shield_neg',0),(639,3259,'result_ice_blast_weapon_center',0),(640,3260,'result_water_elemental_summon',0),(641,3335,'cast_mandala_sub',0),(642,3337,'cast_p2p_lightning_01',0),(643,3338,'cast_p2p_lightning_02',0),(644,3340,'result_arcane_fury',0),(645,3341,'result_archaic_shackles',0),(646,3342,'result_archaic_shackles_b',0),(647,3343,'result_ice_slam',0),(648,3344,'result_skull_blast',0),(649,3345,'result_skull_buff_limbs',0),(650,3346,'result_storm_of_ancients',0),(651,3347,'result_stun_sub',0),(652,3348,'result_tricksters_grasp',0),(653,3351,'cast_p2p_fire_01',0),(654,3352,'cast_p2p_fire_02',0),(655,3354,'result_ethereal_p2p',0),(656,3358,'cast_gold_sparkletrace_l',0),(657,3359,'cast_gold_sparkletrace_r',0),(658,3360,'cast_gold_trace_l',0),(659,3361,'cast_gold_trace_r',0),(660,3363,'cast_rune_ring_rotate_persist',0),(661,3364,'cast_trace_firespikes_l',0),(662,3365,'cast_trace_firespikes_r',0),(663,3366,'cast_trace_wine_l',0),(664,3367,'cast_trace_wine_r',0),(665,3376,'cast_rainbow_rays_cloud',0),(666,3377,'cast_spark_sphere_blend',0),(667,3379,'result_crystal_ring',0),(668,3380,'result_dispell1_out_blend',0),(669,3381,'result_helmet_silver_floating',0),(670,3392,'result_ho_sphere',0),(671,3393,'result_shield_silver_floating',0),(672,3397,'ignite_weapon_big',0),(673,3398,'ignite_weapon_small',0),(674,3404,'result_dragon_flight_fetters',0),(675,3405,'result_drakota_fetters',0),(676,3406,'result_drakota_flight_fetters',0),(677,3421,'ignite_weapon_prism',0),(678,3422,'result_ancient_crucible',0),(679,3423,'result_natures_growth',0),(680,3427,'result_dripping_rain',0),(681,3428,'result_rock_chunks_dropping',0),(682,3432,'result_arcane_chalice',0),(683,3433,'result_blessing_of_faith',0),(684,3434,'result_stag_running',0),(685,3437,'cast_columns_slow',0),(686,3439,'result_cat_running',0),(687,3440,'result_chalice_of_life',0),(688,3441,'result_creature_fire_ls',0),(689,3442,'result_runes_gathering',0),(690,3443,'result_sparkle_fill',0),(691,3444,'result_weapon_trail_prism',0),(692,3448,'cast_sparkle2',0),(693,3449,'result_breaking_faith',0),(694,3450,'result_runes_falling',0),(695,3451,'result_sparkles_gathering',0),(696,3460,'cast_glow_distort2',0),(697,3464,'result_blue_whirlwind',0),(698,3465,'result_stag_running2',0),(699,3466,'result_turtle_walking',0),(700,3573,'result_breakable_wall',0),(701,3605,'result_lucks_bite',0),(702,3630,'result_bat_swarm_appear',0),(703,3631,'result_bat_swarm_attack',0),(704,3632,'result_forced_shader_electric',0),(705,3640,'result_bat_swarm_p2p',0),(706,3671,'result_rainbow_blast_p2p',0),(707,3672,'result_vampire_lifetap_p2p',0),(708,3679,'result_fire_blue_white',0),(709,3680,'result_vampire_daggers_p2p',0),(710,3681,'result_vampire_ice_daggers_p2p',0),(711,3682,'result_vampire_lifetap_heart_p2p',0),(712,3683,'result_vampire_snow_throw',0),(713,3693,'cast_instrument_flute',0),(714,3705,'persist_power_gathering',0),(715,3706,'result_bat_swarm_persist',0),(716,3707,'result_brain_leech_p2p',0),(717,3708,'result_power_fount',0),(718,3727,'result_lioness_running',0),(719,3728,'result_mana_cloak',0),(720,3729,'result_scorpion_attacking',0),(721,3730,'result_skeleton_dancing',0),(722,3734,'cast_tune_song',0),(723,3741,'result_bat_flying',0),(724,3742,'result_stance_of_the_bat',0),(725,3749,'persist_sparkles_clinging_soft_blue',0),(726,3750,'persist_sparkles_clinging_soft_gold',0),(727,3751,'persist_sparkles_clinging_soft_green',0),(728,3752,'persist_sparkles_clinging_soft_purple',0),(729,3753,'persist_sparkles_clinging_soft_red',0),(730,3754,'result_skeleton_bowing',0),(731,3755,'result_unerring_shot',0),(732,3756,'result_unerring_shot_flaming',0),(733,3757,'result_unyielding_will',0),(734,3766,'result_smoke_p2p',0),(735,3777,'cast_piercing_note',0),(736,3779,'cast_tune_flute',0),(737,3785,'persist_notes_gathering',0),(738,3786,'persist_notes_spiral_off',0),(739,3787,'result_note_swarm',0),(740,3788,'result_notes_gathering',0),(741,3789,'result_notes_spiral_off',0),(742,3790,'result_rings_rising',0),(743,3807,'result_devastation_fist_1',0),(744,3808,'result_devastation_fist_2',0),(745,3809,'result_devastation_fist_3',0),(746,3820,'persist_fear',0),(747,3821,'persist_notes_spiral_off_blue',0),(748,3822,'persist_notes_spiral_off_green',0),(749,3823,'persist_notes_spiral_off_red',0),(750,3826,'result_corruptive_symbol_p2p',0),(751,3827,'result_skeleton_attacking',0),(752,3845,'cast_tune_multichain',0),(753,3849,'result_fire_dark',0),(754,3850,'result_sparkles_explode',0),(755,3851,'result_vampire_rainbow_circle_throw',0),(756,3852,'result_vampire_whip_dark',0),(757,3859,'result_notes_spiral_chains',0),(758,3860,'result_rings_rising_noshrink',0),(759,3861,'result_umbral_trap',0),(760,3864,'cast_notes_out_song',0),(761,3869,'result_kirby_energy_p2p',0),(762,3870,'result_notes_tube_wavey',0),(763,3910,'result_mist_clingy',0),(764,3938,'design_result_lightning_bolt1',0),(765,3949,'cast_spark_cage_aoe',0),(766,3950,'cast_spark_cage_neg_aoe',0),(767,4000,'design_result_bat_swarm_attack',0),(768,4001,'design_result_tremor',0),(769,4008,'design_artifact_ap1_breath',0),(770,4009,'design_cast_inquisitor',0),(771,4010,'design_cast_vision_nek',0),(772,4011,'design_result_dispell1_out',0),(773,4012,'design_result_zombie_summon',0),(774,4030,'result_bloodlust_aoe',0),(775,4031,'result_clay_shields_aoe',0),(776,4032,'result_poison_cloud_aoe',0),(777,4065,'result_toxin_out_aoe',0),(778,4073,'result_shockwave_sparkles_aoe',0),(779,4092,'climbing_strafe_right',0),(780,4093,'climbing_walk',0),(781,4123,'cast_angry_burst_aoe',0),(782,4124,'cast_debuff_aoe',0),(783,4129,'result_fire_engulf_aoe',0),(784,4130,'result_flash_aoe',0),(785,4131,'result_motion_lines_flasher_aoe',0),(786,4132,'result_motion_lines_sub_aoe',0),(787,4140,'result_coins_falling',0),(788,4141,'result_forced_shader_rock',0),(789,4142,'result_terra_armor',0),(790,4150,'result_coalescing_vapor',0),(791,4161,'result_bone_blast',0),(792,4162,'result_bone_glow',0),(793,4163,'result_coalescing_notes',0),(794,4164,'result_dust_blast',0),(795,4172,'result_ice_blast_from_mesh',0),(796,4194,'result_rock_toss_p2p',0),(797,4195,'result_rocks_flying_from_mesh',0),(798,4203,'result_ring_of_blades',0),(799,4204,'result_ring_of_blades_scimitars',0),(800,4205,'result_ring_of_blades_swords',0),(801,4341,'result_devastation_fist_3a',0),(802,4357,'result_skeleton_hand',0),(803,4368,'cast_pfx_orbiting_rings_l',0),(804,4369,'cast_pfx_orbiting_rings_r',0),(805,4449,'cast_ring_expanding',0),(806,4493,'cast_call_of_power',0),(807,4495,'climbing_backup',0),(808,4496,'climbing_idle',0),(809,4497,'climbing_strafe_left',0),(810,4506,'monk_attack03',0),(811,4518,'result_call_of_power',0),(812,4519,'result_firespitter',0),(813,4520,'result_pet_victory',0),(814,4545,'result_morph_to_pet',0),(815,4546,'result_sparkles_radiating',0),(816,4556,'result_searing_sun',0),(817,4557,'result_smoking_mesh',0),(818,4561,'cast_bone_blast_1',0),(819,4562,'cast_bone_blast_2',0),(820,4563,'cast_bone_blast_3',0),(821,4564,'cast_morph_to_dragon',0),(822,4569,'result_cyclone_fire',0),(823,4570,'result_cyclone_snow',0),(824,4571,'result_morph_to_dragon',0),(825,4580,'result_cyclone_rocks',0),(826,4581,'result_cyclone_sand',0),(827,4582,'result_gnoll_buff',0),(828,4599,'dual_wield_attack03',0),(829,4601,'result_word_of_doom',0),(830,4602,'result_word_of_flame',0),(831,4603,'result_word_of_obedience',0),(832,4604,'result_word_of_silence',0),(833,4608,'2h_sword_ouch_thrust',0),(834,4625,'result_froglok_buff',0),(835,4626,'result_stone_hand_terraporter',0),(836,4670,'result_candlelight_vigil',0),(837,4702,'result_rock_shock_wave',0),(838,4718,'result_fire_blast',0),(839,4719,'result_rock_shock_wave_lava',0),(840,4720,'result_tears_of_druzil',0),(841,4730,'climbing_exit_up_root',0),(842,4735,'result_rock_shock_wave_ice',0),(843,4736,'result_snowflakes_radiating',0),(844,4742,'cast_bright_ring_blue',0),(845,4743,'cast_bright_ring_red',0),(846,4783,'cast_morph_to_elf',0),(847,4788,'result_morph_to_elf',0),(848,4798,'climbing_enter_down_root',0),(849,4810,'result_scintillating_tapestry',0),(850,4825,'design_cast_vision_living_tombs',0),(851,4850,'result_runes_blast',0),(852,4868,'carry_blue_flag',0),(853,4869,'carry_red_flag',0),(854,4911,'result_coalescing_sparkles',0),(855,4912,'result_coalescing_vapor_sub',0),(856,4913,'result_serpents_intent',0),(857,4914,'result_singing_sword',0),(858,4923,'result_desert_call_p2p',0),(859,4924,'result_flash_flood_wave_cross_line',0),(860,4925,'result_flash_flood_wave_spray',0),(861,4926,'result_flash_flood_wave_tube',0),(862,4995,'design_cast_vision_ap2',0),(863,4997,'result_protection_of_faith_p2p',0),(864,4998,'result_protection_of_faith_tapestry',0),(865,5020,'result_anim_mesh_genie_ps',0),(866,5069,'result_fungusman_breath_attack_p2p',0),(867,5070,'result_mushrooms_growing',0),(868,5135,'result_shadow_summon_2',0),(869,5149,'result_shadow_summon_2_aoe',0),(870,5352,'debris_flying',0),(871,5353,'debris_swimming',0),(872,5513,'result_arena_water_whirlpool',0),(873,5514,'result_arena_water_whirlpool_aoe',0),(874,5565,'horse_backup',0),(875,5566,'horse_turn_left',0),(876,5567,'horse_turn_right',0),(877,5571,'result_arena_stone_gaze',0),(878,5572,'result_arena_water_rain',0),(879,5573,'result_fogger',0),(880,5603,'result_arena_water_rain_bubbles',0),(881,5604,'result_terrorantula_attack',0),(882,5605,'result_terrorantula_attack_cocoon',0),(883,5640,'result_arena_stone_gaze_flash',0),(884,5971,'result_arena_voidbeast_attack',0),(885,5972,'result_arena_voidbeast_smoke',0),(886,5973,'result_arena_voidbeast_smoke_threads',0),(887,5983,'result_ghost_fadeout',0),(888,6012,'result_spirit_of_the_elephant',0),(889,6037,'cast_trace_prism_left',0),(890,6038,'cast_trace_prism_right',0),(891,6044,'result_prisms_hex_clinging',0),(892,6045,'result_prisms_sparkle_soul',0),(893,6046,'result_prisms_sphere',0),(894,6068,'result_ice_dagger_breath_p2p',0),(895,6090,'result_cone_lightning_p2p',0),(896,6091,'result_dragon_cone_roar',0),(897,6183,'design_result_zombie_scare',0),(898,6185,'result_zombie_scare',0),(899,6193,'result_ghost_forced_shader_4',0),(900,6269,'result_bone_glow_2',0),(901,6270,'result_fireworks_burst',0),(902,6271,'result_fireworks_ring',0),(903,6329,'result_lion_paw_trails',0),(904,6330,'result_prism_tube_trail_1',0),(905,6331,'result_prism_tube_trail_2',0),(906,6332,'result_sparkle_soul',0),(907,6410,'result_pestilence',0),(908,6435,'result_dragonbreath',0),(909,6453,'cast_dragonbreath',0),(910,6458,'persist_dragonbreath',0),(911,6459,'result_hypnosis',0),(912,6470,'cast_celtic_circle',0),(913,6473,'cast_hypnosis',0),(914,6497,'persist_juggernaut',0),(915,6498,'result_juggernaut',0),(916,6523,'result_firestrips',0),(917,6544,'result_castigate',0),(918,6605,'cast_jesters_gamble',0),(919,6674,'status_quest_completes',0),(920,6675,'status_quest_gives',0),(921,6676,'status_quest_updates',0),(922,6701,'result_crazy_tube',0),(923,6702,'result_crazy_tube_iron',0),(924,6752,'cast_call_of_storms',0),(925,6757,'result_call_of_storms',0),(926,6766,'cast_mysticism',0),(927,6771,'result_mysticism',0),(928,6776,'cast_fusion',0),(929,6786,'cast_crescent_hands_l',0),(930,6787,'cast_crescent_hands_r',0),(931,6801,'result_rift',0),(932,6802,'result_verdict',0),(933,6803,'result_verdict_explosion',0),(934,6844,'cast_plane_shift',0),(935,6849,'result_plane_shift',0),(936,6850,'result_vortex_p2p',0),(937,6862,'cast_undead_tide',0),(938,6866,'result_bonfire',0),(939,6867,'result_steam',0),(940,6880,'result_cone_lightning_wave_p2p',0),(941,6881,'result_ice_dagger_breath_small_p2p',0),(942,6890,'result_rock_breath_p2p',0),(943,6891,'result_rocks_sticky',0),(944,6967,'result_aa_shaman_ghost_wolf',0),(945,6975,'cast_pickpocket',0),(946,6980,'result_mana_channeling',0),(947,7001,'levelup_achievement',0),(948,7011,'result_pickpocket',0),(949,7059,'result_snoring_zzz',0),(950,7064,'cast_vyemm_slam',0),(951,7072,'result_steam_blast',0),(952,7104,'result_poison_cysts',0),(953,7442,'result_aa_pyramid',0),(954,7682,'result_webby_canister',0),(955,7747,'result_ghost_undo',0),(956,7815,'cast_trace_sparkcrescent_l',0),(957,7816,'cast_trace_sparkcrescent_r',0),(958,7821,'design_keg_filling_mug',0),(959,7966,'result_charge_fast',0),(960,7967,'result_smoke_small_p5',0),(961,8179,'result_fire_purple',0),(962,8482,'cast_dryad_teleport',0),(963,8489,'result_dryad_teleport',0),(964,8502,'cast_dryad_attack_aoe',0),(965,8509,'result_dryad_attack_aoe',0),(966,8536,'cast_rain_of_thistles',0),(967,8542,'result_rain_of_thistles',0),(968,8785,'result_chrome_forced_shader',0),(969,8991,'result_copter_welder_lightning_p2p',0),(970,9078,'run_03',0),(971,9079,'run_down_idle',0),(972,9080,'run_up_idle',0),(973,9082,'sway_l',0),(974,9083,'sway_r',0),(975,9232,'result_soulless',0),(976,9443,'result_soap_mouth',0),(977,9516,'cast_vision_plane_druid_ring',0),(978,9526,'cast_wizard_spires',0),(979,9587,'result_choking_vines_aoe',0),(980,9608,'result_wuoshi_tree_morph',0),(981,9654,'result_lightning_bolt_sub1',0),(982,9655,'result_lightning_bolt_sub2',0),(983,9676,'female_dead',0),(984,9677,'female_dead_enter',0),(985,9733,'aura_red',0),(986,9739,'female_run',0),(987,9754,'cast_blanket_of_eternal_night',0),(988,9755,'cast_mayongs_touch',0),(989,9757,'cast_soul_paralysis',0),(990,9763,'result_blanket_of_eternal_night',0),(991,9773,'cast_gaze_of_obedience',0),(992,9788,'froglok_idle',0),(993,9821,'cast_laser_p2p',0),(994,9832,'result_laser_p2p',0),(995,9836,'cast_firebreath_p2p',0),(996,9844,'froglok_bow',0),(997,9845,'froglok_crouch',0),(998,9846,'froglok_curtsey',0),(999,9847,'froglok_dead',0),(1000,9848,'froglok_death',0),(1001,9849,'froglok_run',0),(1002,9850,'froglok_sit_enter',0),(1003,9851,'froglok_sit_exit',0),(1004,9852,'froglok_sit_idle',0),(1005,9857,'cast_mana_burn',0),(1006,9881,'fae_light_idle',0),(1007,9884,'result_mana_burn',0),(1008,9930,'result_poison_forced_shader_weapon',0),(1009,9950,'cast_glass_shattering',0),(1010,9960,'result_glass_shattering',0),(1011,9971,'result_brigand_slide',0),(1012,9972,'result_golden_flash',0),(1013,9985,'result_dirge_confront_fear',0),(1014,9986,'result_illusionist_illuminate',0),(1015,10012,'attack_earthshake',0),(1016,10019,'fae_light_1h_sword_attack',0),(1017,10020,'fae_light_1h_sword_attack01',0),(1018,10021,'fae_light_1h_sword_attack02',0),(1019,10022,'fae_light_1h_sword_attack03',0),(1020,10023,'fae_light_1h_sword_death_blow',0),(1021,10024,'fae_light_1h_sword_death_blow01',0),(1022,10025,'fae_light_1h_sword_dodge_backhand',0),(1023,10026,'fae_light_1h_sword_dodge_down',0),(1024,10027,'fae_light_1h_sword_dodge_forehand',0),(1025,10028,'fae_light_1h_sword_dodge_thrust',0),(1026,10029,'fae_light_1h_sword_ouch_backhand',0),(1027,10030,'fae_light_1h_sword_ouch_down',0),(1028,10031,'fae_light_1h_sword_ouch_forehand',0),(1029,10032,'fae_light_1h_sword_ouch_thrust',0),(1030,10033,'fae_light_1h_sword_parry_backhand',0),(1031,10034,'fae_light_1h_sword_parry_down',0),(1032,10035,'fae_light_1h_sword_parry_forehand',0),(1033,10036,'fae_light_1h_sword_parry_thrust',0),(1034,10037,'fae_light_2h_sword_attack',0),(1035,10038,'fae_light_2h_sword_attack01',0),(1036,10039,'fae_light_2h_sword_attack02',0),(1037,10040,'fae_light_2h_sword_defensive_buff',0),(1038,10041,'fae_light_2h_sword_dodge_backhand',0),(1039,10042,'fae_light_2h_sword_dodge_down',0),(1040,10043,'fae_light_2h_sword_dodge_forehand',0),(1041,10044,'fae_light_2h_sword_enter',0),(1042,10045,'fae_light_2h_sword_kick',0),(1043,10046,'fae_light_2h_sword_ouch_backhand',0),(1044,10047,'fae_light_2h_sword_ouch_down',0),(1045,10048,'fae_light_2h_sword_ouch_forehand',0),(1046,10049,'fae_light_2h_sword_ouch_thrust',0),(1047,10052,'fae_light_bostaff_attack01',0),(1048,10053,'fae_light_bostaff_attack02',0),(1049,10054,'fae_light_bostaff_attack03',0),(1050,10081,'fae_light_dual_wield_attack',0),(1051,10082,'fae_light_dual_wield_attack01',0),(1052,10083,'fae_light_dual_wield_attack02',0),(1053,10084,'fae_light_dual_wield_attack03',0),(1054,10085,'fae_light_dual_wield_kick',0),(1055,10086,'fae_light_dual_wield_whirling_attack',0),(1056,10087,'fae_light_dual_wield_wild_swing',0),(1057,10088,'fae_light_monk_attack',0),(1058,10089,'fae_light_monk_attack01',0),(1059,10090,'fae_light_monk_attack02',0),(1060,10091,'fae_light_monk_attack03',0),(1061,10092,'fae_light_monk_wild_swing',0),(1062,10093,'fae_light_pike_attack',0),(1063,10094,'fae_light_pike_attack01',0),(1064,10095,'fae_light_pike_attack02',0),(1065,10096,'fae_light_pike_kick',0),(1066,10097,'fae_light_pike_whirling_attack',0),(1067,10098,'fae_light_pike_wild_swing',0),(1068,10099,'fae_light_pugilist_attack',0),(1069,10100,'fae_light_pugilist_attack02',0),(1070,10101,'fae_light_pugilist_kick',0),(1071,10102,'fae_light_pugilist_whirling_attack',0),(1072,10103,'fae_light_pugilist_wild_swing',0),(1073,10122,'froglok_1h_sword_attack',0),(1074,10123,'froglok_1h_sword_idle',0),(1075,10128,'cast_forced_flasher_stream_scroll',0),(1076,10129,'cast_forced_flasher_stream_scroll_blend',0),(1077,10137,'result_berserker_red_eyes',0),(1078,10138,'result_god_spell_brell_serilis',0),(1079,10139,'result_god_spell_cazic_thule',0),(1080,10140,'result_god_spell_innoruuk',0),(1081,10141,'result_god_spell_mithaniel_marr',0),(1082,10142,'result_god_spell_quellious',0),(1083,10143,'result_god_spell_rallos_zek',0),(1084,10144,'result_god_spell_solusek_ro',0),(1085,10145,'result_god_spell_tunare',0),(1086,10146,'result_sun_spell',0),(1087,10157,'froglok_1h_crush_attack',0),(1088,10158,'froglok_1h_crush_attack01',0),(1089,10159,'froglok_1h_crush_attack02',0),(1090,10160,'froglok_1h_crush_attack03',0),(1091,10161,'froglok_1h_crush_dodge_backhand',0),(1092,10162,'froglok_1h_crush_dodge_down',0),(1093,10163,'froglok_1h_crush_dodge_forehand',0),(1094,10164,'froglok_1h_crush_dodge_thrust',0),(1095,10165,'froglok_1h_crush_ouch_backhand',0),(1096,10166,'froglok_1h_crush_ouch_down',0),(1097,10167,'froglok_1h_crush_ouch_forehand',0),(1098,10168,'froglok_1h_crush_ouch_thrust',0),(1099,10169,'froglok_1h_crush_parry_backhand',0),(1100,10170,'froglok_1h_crush_parry_down',0),(1101,10171,'froglok_1h_crush_parry_forehand',0),(1102,10172,'froglok_1h_crush_parry_thrust',0),(1103,10173,'froglok_1h_pierce_attack',0),(1104,10174,'froglok_1h_pierce_attack01',0),(1105,10175,'froglok_1h_pierce_dodge_backhand',0),(1106,10176,'froglok_1h_pierce_dodge_down',0),(1107,10177,'froglok_1h_pierce_dodge_forehand',0),(1108,10178,'froglok_1h_pierce_dodge_thrust',0),(1109,10179,'froglok_1h_pierce_ouch_backhand',0),(1110,10180,'froglok_1h_pierce_ouch_down',0),(1111,10181,'froglok_1h_pierce_ouch_forehand',0),(1112,10182,'froglok_1h_pierce_ouch_thrust',0),(1113,10183,'froglok_1h_pierce_parry_backhand',0),(1114,10184,'froglok_1h_pierce_parry_down',0),(1115,10185,'froglok_1h_pierce_parry_forehand',0),(1116,10186,'froglok_1h_pierce_parry_thrust',0),(1117,10187,'froglok_1h_sword_attack01',0),(1118,10188,'froglok_1h_sword_attack02',0),(1119,10189,'froglok_1h_sword_attack03',0),(1120,10190,'froglok_1h_sword_death_blow',0),(1121,10191,'froglok_1h_sword_death_blow01',0),(1122,10192,'froglok_1h_sword_dodge_backhand',0),(1123,10193,'froglok_1h_sword_dodge_down',0),(1124,10194,'froglok_1h_sword_dodge_forehand',0),(1125,10195,'froglok_1h_sword_dodge_thrust',0),(1126,10196,'froglok_1h_sword_ouch_backhand',0),(1127,10197,'froglok_1h_sword_ouch_down',0),(1128,10198,'froglok_1h_sword_ouch_forehand',0),(1129,10199,'froglok_1h_sword_ouch_thrust',0),(1130,10200,'froglok_1h_sword_parry_backhand',0),(1131,10201,'froglok_1h_sword_parry_down',0),(1132,10202,'froglok_1h_sword_parry_forehand',0),(1133,10203,'froglok_1h_sword_parry_thrust',0),(1134,10204,'froglok_1h_thrown_dodge_backhand',0),(1135,10205,'froglok_1h_thrown_dodge_down',0),(1136,10206,'froglok_1h_thrown_dodge_forehand',0),(1137,10207,'froglok_1h_thrown_dodge_thrust',0),(1138,10208,'froglok_1h_thrown_ouch_backhand',0),(1139,10209,'froglok_1h_thrown_ouch_down',0),(1140,10210,'froglok_1h_thrown_ouch_forehand',0),(1141,10211,'froglok_1h_thrown_ouch_thrust',0),(1142,10212,'froglok_bow_dodge_backhand',0),(1143,10213,'froglok_bow_dodge_down',0),(1144,10214,'froglok_bow_dodge_forehand',0),(1145,10215,'froglok_bow_dodge_thrust',0),(1146,10216,'froglok_bow_ouch_backhand',0),(1147,10217,'froglok_bow_ouch_down',0),(1148,10218,'froglok_bow_ouch_forehand',0),(1149,10219,'froglok_bow_ouch_thrust',0),(1150,10220,'froglok_dual_wield_attack',0),(1151,10221,'froglok_dual_wield_attack01',0),(1152,10222,'froglok_dual_wield_attack02',0),(1153,10223,'froglok_dual_wield_attack03',0),(1154,10224,'froglok_dual_wield_dodge_backhand',0),(1155,10225,'froglok_dual_wield_dodge_down',0),(1156,10226,'froglok_dual_wield_dodge_forehand',0),(1157,10227,'froglok_dual_wield_dodge_thrust',0),(1158,10228,'froglok_dual_wield_idle',0),(1159,10229,'froglok_dual_wield_ouch_backhand',0),(1160,10230,'froglok_dual_wield_ouch_down',0),(1161,10231,'froglok_dual_wield_ouch_forehand',0),(1162,10232,'froglok_dual_wield_ouch_thrust',0),(1163,10243,'froglok_1h_crush_idle',0),(1164,10244,'froglok_1h_pierce_idle',0),(1165,10245,'froglok_1h_thrown_idle',0),(1166,10246,'froglok_2h_sword_attack',0),(1167,10247,'froglok_2h_sword_attack01',0),(1168,10248,'froglok_2h_sword_attack02',0),(1169,10249,'froglok_2h_sword_attack03',0),(1170,10250,'froglok_2h_sword_idle',0),(1171,10251,'froglok_bow_idle',0),(1172,10252,'froglok_dual_wield_kick',0),(1173,10253,'froglok_dual_wield_whirling_attack',0),(1174,10254,'froglok_dual_wield_wild_swing',0),(1175,10290,'froglok_2h_sword_dodge_backhand',0),(1176,10291,'froglok_2h_sword_dodge_down',0),(1177,10292,'froglok_2h_sword_dodge_forehand',0),(1178,10293,'froglok_2h_sword_dodge_thrust',0),(1179,10294,'froglok_2h_sword_kick',0),(1180,10295,'froglok_2h_sword_whirling_attack',0),(1181,10296,'froglok_2h_sword_wild_swing',0),(1182,10297,'froglok_bostaff_attack',0),(1183,10298,'froglok_bostaff_attack01',0),(1184,10299,'froglok_bostaff_attack02',0),(1185,10300,'froglok_bostaff_attack03',0),(1186,10301,'froglok_bostaff_idle',0),(1187,10302,'froglok_bostaff_kick',0),(1188,10303,'froglok_bostaff_whirling_attack',0),(1189,10304,'froglok_bostaff_wild_swing',0),(1190,10305,'froglok_monk_idle',0),(1191,10307,'result_beserker_red_eyes',0),(1192,10308,'result_guardian_aura',0),(1193,10318,'froglok_monk_attack',0),(1194,10319,'froglok_monk_attack01',0),(1195,10320,'froglok_monk_attack02',0),(1196,10321,'froglok_monk_attack03',0),(1197,10322,'froglok_monk_kick',0),(1198,10323,'froglok_monk_kick_spin',0),(1199,10324,'froglok_monk_wild_swing',0),(1200,10356,'froglok_monk_whirling_attack',0),(1201,10357,'froglok_pike_attack',0),(1202,10358,'froglok_pike_attack01',0),(1203,10359,'froglok_pike_attack02',0),(1204,10360,'froglok_pike_idle',0),(1205,10361,'froglok_pike_kick',0),(1206,10362,'froglok_pike_whirling_attack',0),(1207,10363,'froglok_pike_wild_swing',0),(1208,10364,'froglok_pugilist_attack',0),(1209,10365,'froglok_pugilist_attack02',0),(1210,10366,'froglok_pugilist_attack03',0),(1211,10367,'froglok_pugilist_idle',0),(1212,10368,'froglok_pugilist_kick',0),(1213,10369,'froglok_pugilist_whirling_attack',0),(1214,10370,'froglok_pugilist_wild_swing',0),(1215,10371,'froglok_untrained_attack',0),(1216,10372,'froglok_untrained_idle',0),(1217,10374,'result_coercer_sun_aura',0),(1218,10375,'result_illusionist_head_aura',0),(1219,10376,'result_paladin_shoulder_streamers',0),(1220,10377,'result_templar_halo',0),(1221,10387,'fae_light_run',0),(1222,10389,'result_assassin_star_cloud_hands',0),(1223,10390,'result_brigand_hand_trails',0),(1224,10391,'result_bruiser_fist_shining',0),(1225,10392,'result_dirge_sparkles',0),(1226,10393,'result_monk_fist_rings',0),(1227,10394,'result_swashbuckler_hand_trails',0),(1228,10395,'result_warlock_subtle_aura',0),(1229,10415,'fae_light_climbing_backup',0),(1230,10416,'fae_light_climbing_enter_down_root',0),(1231,10417,'fae_light_climbing_exit_up_root',0),(1232,10418,'fae_light_climbing_idle',0),(1233,10419,'fae_light_climbing_strafe_left',0),(1234,10420,'fae_light_climbing_strafe_right',0),(1235,10421,'fae_light_climbing_walk',0),(1236,10422,'fae_light_dead',0),(1237,10423,'fae_light_dead_enter',0),(1238,10469,'fae_light_bostaff_dodge_backhand',0),(1239,10470,'fae_light_bostaff_dodge_forehand',0),(1240,10471,'fae_light_dual_wield_dodge_backhand',0),(1241,10472,'fae_light_dual_wield_dodge_forehand',0),(1242,10473,'fae_light_dual_wield_ouch_backhand',0),(1243,10474,'fae_light_dual_wield_ouch_forehand',0),(1244,10475,'fae_light_dual_wield_parry_down',0),(1245,10508,'fae_light_monk_dodge_backhand',0),(1246,10509,'fae_light_monk_dodge_down',0),(1247,10512,'horse_jump_substitute',0),(1248,10516,'result_conjuror_shoulder_blue_flames',0),(1249,10529,'fae_light_sit_enter',0),(1250,10530,'fae_light_sit_exit',0),(1251,10531,'fae_light_sit_idle',0),(1252,10533,'froglok_horse_idle',0),(1253,10542,'result_necromancer_hand_skulls',0),(1254,10553,'froglok_gathering_search',0),(1255,10554,'froglok_gathering_success',0),(1256,10555,'froglok_mining_digging',0),(1257,10559,'result_ranger_green_aura',0),(1258,10560,'result_shadowknight_flame_horns',0),(1259,10561,'result_wizard_elemental_hands',0),(1260,10574,'froglok_converse_male04',0),(1261,10575,'froglok_converse_male12',0),(1262,10576,'froglok_forestry_success',0),(1263,10577,'froglok_horse_jump_substitute',0),(1264,10578,'froglok_kick',0),(1265,10579,'froglok_knockedtoback',0),(1266,10580,'froglok_mining_success',0),(1267,10581,'froglok_run_03',0),(1268,10582,'froglok_wild_swing',0),(1269,10584,'result_defiler_poison_cloud',0),(1270,10585,'result_mystic_cloudy_feet',0),(1271,10586,'result_troubador_clouds',0),(1272,10596,'froglok_bostaff_knockedtoback',0),(1273,10597,'froglok_bostaff_knockedtoback_getup',0),(1274,10598,'froglok_bow_knockedtoback',0),(1275,10599,'froglok_bow_knockedtoback_getup',0),(1276,10600,'froglok_dual_wield_knockedtoback',0),(1277,10601,'froglok_dual_wield_knockedtoback_getup',0),(1278,10602,'froglok_knockedtoback_getup',0),(1279,10603,'froglok_knockedtoback_onbackidle',0),(1280,10604,'froglok_monk_knockedtoback',0),(1281,10605,'froglok_monk_knockedtoback_getup',0),(1282,10606,'froglok_pike_knockedtoback',0),(1283,10607,'froglok_pike_knockedtoback_getup',0),(1284,10608,'froglok_pugilist_knockedtoback',0),(1285,10609,'froglok_pugilist_knockedtoback_getup',0),(1286,10680,'1h_crush_attack_recoil',0),(1287,10681,'1h_crush_attack_recoil01',0),(1288,10682,'1h_crush_attack_recoil02',0),(1289,10683,'1h_crush_attack_recoil03',0),(1290,10684,'1h_crush_backup',0),(1291,10685,'1h_crush_enter',0),(1292,10686,'1h_crush_exit',0),(1293,10687,'1h_crush_strafe_left',0),(1294,10688,'1h_crush_strafe_right',0),(1295,10689,'1h_crush_walk',0),(1296,10690,'1h_pierce_attack02',0),(1297,10691,'1h_pierce_attack03',0),(1298,10692,'1h_pierce_attack_recoil',0),(1299,10693,'1h_pierce_attack_recoil01',0),(1300,10694,'1h_pierce_attack_recoil02',0),(1301,10695,'1h_pierce_attack_recoil03',0),(1302,10696,'1h_pierce_backup',0),(1303,10697,'1h_pierce_death_blow',0),(1304,10698,'1h_pierce_death_blow01',0),(1305,10699,'1h_pierce_enter',0),(1306,10700,'1h_pierce_exit',0),(1307,10701,'1h_pierce_strafe_left',0),(1308,10702,'1h_pierce_strafe_right',0),(1309,10703,'1h_pierce_walk',0),(1310,10704,'1h_sword_attack_recoil',0),(1311,10705,'1h_sword_attack_recoil01',0),(1312,10706,'1h_sword_attack_recoil02',0),(1313,10707,'1h_sword_attack_recoil03',0),(1314,10708,'1h_sword_backup',0),(1315,10709,'1h_sword_enter',0),(1316,10710,'1h_sword_exit',0),(1317,10711,'1h_sword_parry_thurst',0),(1318,10712,'1h_sword_strafe_left',0),(1319,10713,'1h_sword_strafe_right',0),(1320,10714,'1h_sword_walk',0),(1321,10715,'1h_throw_attack',0),(1322,10716,'1h_thrown_backup',0),(1323,10717,'1h_thrown_strafe_left',0),(1324,10718,'1h_thrown_strafe_right',0),(1325,10719,'1h_thrown_walk',0),(1326,10720,'2h_sword_attack03',0),(1327,10721,'2h_sword_attack_recoil',0),(1328,10722,'2h_sword_attack_recoil01',0),(1329,10723,'2h_sword_attack_recoil02',0),(1330,10724,'2h_sword_attack_recoil03',0),(1331,10725,'2h_sword_backup',0),(1332,10726,'2h_sword_charge_up',0),(1333,10727,'2h_sword_dodge_thrust',0),(1334,10728,'2h_sword_exit',0),(1335,10729,'2h_sword_feint',0),(1336,10730,'2h_sword_offensive_buff',0),(1337,10731,'2h_sword_parry_backhand',0),(1338,10732,'2h_sword_parry_down',0),(1339,10733,'2h_sword_parry_forehand',0),(1340,10734,'2h_sword_parry_thrust',0),(1341,10735,'2h_sword_strafe_left',0),(1342,10736,'2h_sword_strafe_right',0),(1343,10737,'2h_sword_super_buff',0),(1344,10738,'2h_sword_taunt',0),(1345,10739,'2h_sword_taunt_combat_art',0),(1346,10740,'2h_sword_walk',0),(1347,10741,'2hsword_idle01',0),(1348,10744,'a',0),(1349,10745,'agree',0),(1350,10747,'alchemy_failure',0),(1351,10748,'alchemy_idle',0),(1352,10749,'alchemy_success',0),(1353,10750,'angry',0),(1354,10751,'antenna_01',0),(1355,10752,'antenna_02',0),(1356,10753,'antenna_03',0),(1357,10754,'antenna_04',0),(1358,10755,'antenna_05',0),(1359,10756,'antonia_wisp',0),(1360,10757,'anvil',0),(1361,10758,'anvil_small',0),(1362,10759,'appear',0),(1363,10760,'applaude',0),(1364,10761,'arm04_fail',0),(1365,10762,'arm04_success',0),(1366,10763,'armpour01',0),(1367,10764,'artifact',0),(1368,10765,'artificing_failure',0),(1369,10766,'artificing_idle',0),(1370,10767,'artificing_success',0),(1371,10768,'artsn_chem_sound',0),(1372,10769,'artsn_chimepad_sound',0),(1373,10770,'artsn_forge_helmet_sound',0),(1374,10771,'artsn_forge_sound',0),(1375,10772,'artsn_glow_sound',0),(1376,10773,'artsn_knives_sound',0),(1377,10774,'artsn_knot_sound',0),(1378,10775,'artsn_logcut_sound',0),(1379,10776,'artsn_metal_bar_end_snd',0),(1380,10777,'artsn_metal_bar_snd',0),(1381,10778,'artsn_molecule_sound',0),(1382,10779,'artsn_planer_sound',0),(1383,10780,'artsn_saw_sound',0),(1384,10781,'artsn_stove_sound',0),(1385,10782,'asg_stonegaze_snd',0),(1386,10783,'attack',0),(1387,10784,'attack01',0),(1388,10785,'attack02',0),(1389,10786,'attack03',0),(1390,10787,'attack04',0),(1391,10788,'attack_backhand_trigger',0),(1392,10789,'attack_bite',0),(1393,10790,'attack_breath',0),(1394,10791,'attack_breath01',0),(1395,10792,'attack_breath02',0),(1396,10793,'attack_forehand_trigger',0),(1397,10794,'attack_headram',0),(1398,10795,'attack_rear',0),(1399,10796,'attack_roar01',0),(1400,10797,'attack_scream',0),(1401,10798,'attack_slam',0),(1402,10799,'attack_snap',0),(1403,10800,'attack_sound',0),(1404,10801,'attack_special',0),(1405,10802,'attack_special01',0),(1406,10803,'attack_special02',0),(1407,10804,'attack_special03',0),(1408,10805,'attack_special_spring',0),(1409,10806,'attack_stomp',0),(1410,10807,'attack_tail',0),(1411,10808,'attack_whirling',0),(1412,10809,'attack_wildswing',0),(1413,10810,'attack_wing',0),(1414,10811,'attack_wings',0),(1415,10812,'attack_woosh01',0),(1416,10813,'attacktiming',0),(1417,10814,'attacktiming_a',0),(1418,10815,'attention',0),(1419,10816,'aval_cast_snd',0),(1420,10817,'awrh_cast_snd',0),(1421,10818,'awrh_heal2_snd',0),(1422,10819,'awrh_heal_snd',0),(1423,10820,'awrh_rainfall_snd',0),(1424,10821,'aww_whirlcast_snd',0),(1425,10822,'aww_whirlparticles_snd',0),(1426,10823,'backup',0),(1427,10824,'backup_run',0),(1428,10825,'bad_outcome01',0),(1429,10826,'bad_outcome01_shuttle',0),(1430,10827,'bad_outcome02',0),(1431,10828,'bad_outcome02_shuttle',0),(1432,10829,'ball_bk',0),(1433,10830,'ball_bk_sm',0),(1434,10831,'ball_glow',0),(1435,10832,'ball_wht',0),(1436,10833,'ball_wht_sm',0),(1437,10834,'barrel_fire',0),(1438,10835,'barrel_pieces',0),(1439,10836,'base',0),(1440,10837,'bat_swarm',0),(1441,10838,'battlecry',0),(1442,10839,'bc_caged_snd',0),(1443,10840,'bd_cast_lp_snd',0),(1444,10841,'bd_fireburst_snd',0),(1445,10842,'beaker01',0),(1446,10843,'beckon',0),(1447,10844,'beg',0),(1448,10845,'bene',0),(1449,10846,'big_saw_success',0),(1450,10847,'big_saw_success2',0),(1451,10848,'big_smoke',0),(1452,10849,'bl_castswirls_snd',0),(1453,10850,'bl_start_particles_snd',0),(1454,10851,'blammo',0),(1455,10852,'blink',0),(1456,10853,'boe_endspinner_sound',0),(1457,10854,'boe_open_burst_sound',0),(1458,10855,'boe_shield_tone_sound',0),(1459,10856,'boggle',0),(1460,10857,'boilover01',0),(1461,10858,'book_white',0),(1462,10859,'bostaff_attack_recoil',0),(1463,10860,'bostaff_attack_recoil01',0),(1464,10861,'bostaff_attack_recoil02',0),(1465,10862,'bostaff_attack_recoil03',0),(1466,10863,'bostaff_backup',0),(1467,10864,'bostaff_charge_up',0),(1468,10865,'bostaff_defensive_buff',0),(1469,10866,'bostaff_dodge_backhand',0),(1470,10867,'bostaff_dodge_down',0),(1471,10868,'bostaff_dodge_forehand',0),(1472,10869,'bostaff_dodge_thrust',0),(1473,10870,'bostaff_enter',0),(1474,10871,'bostaff_exit',0),(1475,10872,'bostaff_feint',0),(1476,10873,'bostaff_idle01',0),(1477,10874,'bostaff_knockdowntoknees',0),(1478,10875,'bostaff_knockedtoback',0),(1479,10876,'bostaff_knockedtoback_getup',0),(1480,10877,'bostaff_offensive_buff',0),(1481,10878,'bostaff_ouch_backhand',0),(1482,10879,'bostaff_ouch_down',0),(1483,10880,'bostaff_ouch_forehand',0),(1484,10881,'bostaff_ouch_thrust',0),(1485,10882,'bostaff_parry_backhand',0),(1486,10883,'bostaff_parry_down',0),(1487,10884,'bostaff_parry_forehand',0),(1488,10885,'bostaff_parry_thrust',0),(1489,10886,'bostaff_strafe_left',0),(1490,10887,'bostaff_strafe_right',0),(1491,10888,'bostaff_super_buff',0),(1492,10889,'bostaff_taunt_combat_art',0),(1493,10890,'bostaff_walk',0),(1494,10891,'bow_aim_down',0),(1495,10892,'bow_aim_up',0),(1496,10893,'bow_attack',0),(1497,10894,'bow_attack_2x',0),(1498,10895,'bow_backup',0),(1499,10896,'bow_enter',0),(1500,10897,'bow_exit',0),(1501,10898,'bow_getarrow',0),(1502,10899,'bow_knockdowntoknees',0),(1503,10900,'bow_knockedtoback',0),(1504,10901,'bow_knockedtoback_getup',0),(1505,10902,'bow_pullback',0),(1506,10903,'bow_release',0),(1507,10904,'bow_sheathe',0),(1508,10905,'bow_strafe_left',0),(1509,10906,'bow_strafe_right',0),(1510,10907,'bow_unsheathe',0),(1511,10908,'bow_walk',0),(1512,10909,'bowstring',0),(1513,10910,'bowstring_electricity',0),(1514,10911,'bowstring_electricity_red',0),(1515,10912,'brandish',0),(1516,10913,'breath',0),(1517,10914,'breath_attack',0),(1518,10915,'breath_attack_blue',0),(1519,10916,'breath_attack_purple',0),(1520,10917,'breath_nostop',0),(1521,10918,'breathweapon',0),(1522,10919,'bs_bull_form_01_snd',0),(1523,10920,'bs_cast_armpush_snd',0),(1524,10921,'bs_hooves_snd',0),(1525,10922,'bs_makebull_tone_snd',0),(1526,10923,'bubbles01',0),(1527,10924,'burn',0),(1528,10925,'burst_sound_01',0),(1529,10926,'bye',0),(1530,10927,'c',0),(1531,10928,'cache_state0',0),(1532,10929,'cache_state1',0),(1533,10930,'cache_state2',0),(1534,10931,'cached_state0',0),(1535,10932,'cached_state1',0),(1536,10933,'cactus_spiney_sound',0),(1537,10934,'candle01',0),(1538,10935,'candle02',0),(1539,10936,'candle03',0),(1540,10937,'candle04',0),(1541,10938,'candle_flair01',0),(1542,10939,'candle_flair02',0),(1543,10940,'candle_flair03',0),(1544,10941,'candle_smoke01',0),(1545,10942,'candle_smoke02',0),(1546,10943,'candle_smoke03',0),(1547,10944,'carpet_enter',0),(1548,10945,'carpet_exit',0),(1549,10946,'carpet_fall',0),(1550,10947,'carpet_idle',0),(1551,10948,'carpet_jump',0),(1552,10949,'carpet_land',0),(1553,10950,'carpet_run',0),(1554,10951,'carpet_walk',0),(1555,10952,'cast01',0),(1556,10953,'cast4',0),(1557,10954,'cast_01lp_snd',0),(1558,10955,'cast_1',0),(1559,10956,'cast_10',0),(1560,10957,'cast_11',0),(1561,10958,'cast_12',0),(1562,10959,'cast_2',0),(1563,10960,'cast_3',0),(1564,10961,'cast_4',0),(1565,10962,'cast_6',0),(1566,10963,'cast_7',0),(1567,10964,'cast_8',0),(1568,10965,'cast_9',0),(1569,10966,'cast_aoe_beneficial_end',0),(1570,10967,'cast_aoe_beneficial_loop',0),(1571,10968,'cast_aoe_beneficial_start',0),(1572,10969,'cast_aoe_detrimental_end',0),(1573,10970,'cast_aoe_detrimental_loop',0),(1574,10971,'cast_aoe_detrimental_start',0),(1575,10973,'cast_aoe_invocation_end',0),(1576,10974,'cast_aoe_invocation_loop',0),(1577,10975,'cast_aoe_invocation_start',0),(1578,10976,'cast_aoe_wand_end',0),(1579,10977,'cast_aoe_wand_loop',0),(1580,10978,'cast_aoe_wand_start',0),(1581,10979,'cast_armor_01_snd',0),(1582,10980,'cast_attack02',0),(1583,10981,'cast_backgroundsparkle_snd',0),(1584,10982,'cast_bard_drum_end',0),(1585,10983,'cast_bard_drum_loop',0),(1586,10985,'cast_bard_flute_end',0),(1587,10986,'cast_bard_flute_loop',0),(1588,10988,'cast_bard_stringed_end',0),(1589,10989,'cast_bard_stringed_loop',0),(1590,10990,'cast_bard_stringed_start',0),(1591,10991,'cast_bard_vocal_end',0),(1592,10992,'cast_bard_vocal_loop',0),(1593,10994,'cast_charge_wind_01_sound',0),(1594,10995,'cast_chargeswordglint_sound',0),(1595,10996,'cast_clowhand_sound_01',0),(1596,10997,'cast_clowhand_sound_02',0),(1597,10998,'cast_clowhand_sound_03',0),(1598,10999,'cast_deepbreath',0),(1599,11000,'cast_distort_lefthand',0),(1600,11001,'cast_distort_right_foot_ws',0),(1601,11002,'cast_distort_righthand',0),(1602,11003,'cast_drake_fire_breath',0),(1603,11004,'cast_drone_01_snd',0),(1604,11005,'cast_drone_02_snd',0),(1605,11006,'cast_drone_snd',0),(1606,11007,'cast_drone_sound',0),(1607,11008,'cast_dustpuff_lefthand',0),(1608,11009,'cast_dustpuff_righthand',0),(1609,11010,'cast_elec_feet_green',0),(1610,11011,'cast_elec_hands_four',0),(1611,11012,'cast_elec_hands_four_up',0),(1612,11013,'cast_elec_hands_up',0),(1613,11014,'cast_end_sound',0),(1614,11015,'cast_endbang2_snd',0),(1615,11016,'cast_endbang_snd',0),(1616,11017,'cast_endsparkle_snd',0),(1617,11018,'cast_endthunder_snd',0),(1618,11019,'cast_es_arches_01_snd',0),(1619,11020,'cast_fast',0),(1620,11021,'cast_force_snd',0),(1621,11022,'cast_glowhand__sound_02',0),(1622,11023,'cast_glowhand_sound_01',0),(1623,11024,'cast_glowhand_sound_03',0),(1624,11025,'cast_glowhand_sound_04',0),(1625,11026,'cast_glowhand_sound_05',0),(1626,11027,'cast_glowhand_sound_06',0),(1627,11028,'cast_gsswipe_01_snd',0),(1628,11029,'cast_gsswipe_02_snd',0),(1629,11030,'cast_gsswipe_03_snd',0),(1630,11031,'cast_hands_elec_nightblood',0),(1631,11032,'cast_handswipe_snd',0),(1632,11033,'cast_howlverb_sound',0),(1633,11034,'cast_hrb_choral_snd',0),(1634,11035,'cast_hrb_rune_snd',0),(1635,11036,'cast_ice_laser_breath',0),(1636,11037,'cast_kickcharge_sound',0),(1637,11038,'cast_laser_aoe',0),(1638,11039,'cast_lava_rocks',0),(1639,11040,'cast_lense01',0),(1640,11041,'cast_lense02',0),(1641,11042,'cast_light_sound',0),(1642,11043,'cast_mage_aggro_01',0),(1643,11044,'cast_mage_aggro_02',0),(1644,11045,'cast_mage_buff_01',0),(1645,11046,'cast_mage_buff_02',0),(1646,11047,'cast_mage_ddam_01',0),(1647,11048,'cast_mage_ddam_02',0),(1648,11049,'cast_mage_qa_01',0),(1649,11050,'cast_mage_qa_02',0),(1650,11051,'cast_mage_qa_03',0),(1651,11052,'cast_mage_quickzap_01',0),(1652,11053,'cast_mage_quickzap_02',0),(1653,11054,'cast_mage_ready',0),(1654,11055,'cast_mendhands_01',0),(1655,11056,'cast_mendsparkleball_01',0),(1656,11057,'cast_mendsparkleball_02',0),(1657,11058,'cast_mendtrail_01',0),(1658,11059,'cast_mendtrails_01',0),(1659,11060,'cast_mendtwinkles_01',0),(1660,11061,'cast_new_qa_part1',0),(1661,11062,'cast_new_qa_part2',0),(1662,11063,'cast_new_qa_part3',0),(1663,11064,'cast_pdswipe_01_snd',0),(1664,11065,'cast_pfx_magenuke_head',0),(1665,11066,'cast_pillar_sound_01',0),(1666,11067,'cast_pillar_sound_02',0),(1667,11068,'cast_pillar_sound_03',0),(1668,11069,'cast_pillar_sound_04',0),(1669,11070,'cast_pillar_sound_05',0),(1670,11071,'cast_pillars',0),(1671,11074,'cast_priest_aggro_01',0),(1672,11075,'cast_priest_aggro_02',0),(1673,11076,'cast_priest_buff_01',0),(1674,11077,'cast_priest_buff_02',0),(1675,11078,'cast_priest_ddam_01',0),(1676,11079,'cast_priest_ddam_02',0),(1677,11080,'cast_priest_floating',0),(1678,11081,'cast_quickhit_snd',0),(1679,11082,'cast_ready',0),(1680,11083,'cast_rune_sound_01',0),(1681,11084,'cast_rune_sound_02',0),(1682,11085,'cast_rune_sound_03',0),(1683,11086,'cast_rune_sound_04',0),(1684,11087,'cast_shield_grow',0),(1685,11088,'cast_shortbreath',0),(1686,11089,'cast_sneak_sound',0),(1687,11090,'cast_spark_burst_righthand',0),(1688,11091,'cast_sparklewave_01_snd',0),(1689,11092,'cast_sparklewave_02_snd',0),(1690,11093,'cast_sparklewave_03_snd',0),(1691,11094,'cast_sparklewave_04_snd',0),(1692,11095,'cast_sparklewave_05_snd',0),(1693,11096,'cast_startlow_snd',0),(1694,11097,'cast_startthunder_snd',0),(1695,11098,'cast_steam_breath',0),(1696,11099,'cast_summon_end',0),(1697,11100,'cast_summon_loop',0),(1698,11101,'cast_summon_start',0),(1699,11102,'cast_swipe01_snd',0),(1700,11103,'cast_swipe02_snd',0),(1701,11104,'cast_target_det_01',0),(1702,11105,'cast_target_det_02',0),(1703,11106,'cast_target_det_03',0),(1704,11107,'cast_target_detrimental_01',0),(1705,11108,'cast_target_detrimental_02',0),(1706,11109,'cast_targeted_benefical_end',0),(1707,11110,'cast_targeted_benefical_loop',0),(1708,11111,'cast_targeted_benefical_start',0),(1709,11112,'cast_targeted_beneficial_end',0),(1710,11113,'cast_targeted_beneficial_loop',0),(1711,11114,'cast_targeted_beneficial_start',0),(1712,11115,'cast_targeted_detrimental_end',0),(1713,11116,'cast_targeted_detrimental_loop',0),(1714,11117,'cast_targeted_detrimental_start',0),(1715,11118,'cast_targeted_detrimental_start2',0),(1716,11119,'cast_targeted_wand_end',0),(1717,11120,'cast_targeted_wand_loop',0),(1718,11121,'cast_targeted_wand_start',0),(1719,11122,'cast_tarranax_breath',0),(1720,11123,'cast_tarranax_breath_path',0),(1721,11124,'cast_tarranax_breath_start',0),(1722,11125,'cast_thunder_snd',0),(1723,11126,'cast_trail_leftarm_bright',0),(1724,11127,'cast_trail_rightarm_bright',0),(1725,11128,'cast_undertone_snd',0),(1726,11129,'cast_venekors_fire_breath',0),(1727,11130,'cast_wildcharge_sound',0),(1728,11131,'cast_wildswingwindsword_sound',0),(1729,11132,'cast_wuoshi_choking_vines_aoe',0),(1730,11133,'cast_wuoshi_fire_and_ice_aoe',0),(1731,11134,'cast_wuoshi_tree_morph',0),(1732,11135,'cast_zombie_scare',0),(1733,11136,'cchains_resultchains_snd',0),(1734,11137,'cchains_sing_snd',0),(1735,11138,'cf_coins_bounce_background_snd',0),(1736,11139,'cf_coins_bounce_bkgrnd_short_snd',0),(1737,11140,'cf_coins_lots_snd',0),(1738,11141,'cf_coins_many_snd',0),(1739,11142,'cf_coinsfall_snd',0),(1740,11143,'charge',0),(1741,11144,'charge_burst_snd',0),(1742,11145,'charge_rumble_snd',0),(1743,11146,'charge_up',0),(1744,11147,'charge_whoosh_snd',0),(1745,11148,'charm_cast_snd',0),(1746,11149,'charm_flutes_snd',0),(1747,11150,'cheer',0),(1748,11151,'chimney01',0),(1749,11152,'chuckle',0),(1750,11153,'ciseme_m',0),(1751,11154,'cl_catglow_snd',0),(1752,11155,'clear_target_tigger',0),(1753,11156,'clear_target_trigger',0),(1754,11157,'climbing',0),(1755,11158,'climbing_chainmail_stone',0),(1756,11159,'climbing_chainmail_wood',0),(1757,11160,'climbing_enter_down',0),(1758,11161,'climbing_exit_up',0),(1759,11162,'climbing_idle01',0),(1760,11163,'climbing_leather_stone',0),(1761,11164,'climbing_leather_wood',0),(1762,11165,'climbing_metal_stone',0),(1763,11166,'climbing_metal_wood',0),(1764,11167,'climbing_ouch',0),(1765,11168,'closed',0),(1766,11169,'cloud_group_sound',0),(1767,11170,'cloud_sound',0),(1768,11171,'cloud_sound_02',0),(1769,11172,'cloud_widget',0),(1770,11173,'cn_ringout_snd',0),(1771,11174,'cn_strums_snd',0),(1772,11175,'coals01',0),(1773,11176,'coals_failure',0),(1774,11177,'coals_fire_large',0),(1775,11178,'coals_fire_small',0),(1776,11179,'coins_and_jewels_pile',0),(1777,11180,'coins_pile_copper',0),(1778,11181,'coins_pile_gold',0),(1779,11182,'coins_pile_silver',0),(1780,11183,'cold_breath',0),(1781,11184,'comabt_exit',0),(1782,11185,'combat',0),(1783,11186,'combat_backup',0),(1784,11187,'combat_backup_run',0),(1785,11188,'combat_enter',0),(1786,11189,'combat_exit',0),(1787,11190,'combat_fx',0),(1788,11191,'combat_idle',0),(1789,11192,'combat_idle01',0),(1790,11193,'combat_idle1',0),(1791,11194,'combat_idle_bark',0),(1792,11195,'combat_idle_enter',0),(1793,11196,'combat_idle_jump',0),(1794,11197,'combat_idle_rhand',0),(1795,11198,'combat_idle_snap',0),(1796,11199,'combat_idle_sound01',0),(1797,11200,'combat_idle_sound02',0),(1798,11201,'combat_idleflap',0),(1799,11202,'combat_ouch',0),(1800,11203,'combat_ouch_sound',0),(1801,11204,'combat_peace',0),(1802,11205,'combat_run',0),(1803,11206,'combat_strafe_left_run',0),(1804,11207,'combat_strafe_right_run',0),(1805,11208,'combat_tail',0),(1806,11209,'combat_tail_cloak',0),(1807,11210,'combat_turn_left',0),(1808,11211,'combat_turn_right',0),(1809,11212,'combat_walk',0),(1810,11213,'complete',0),(1811,11214,'confused',0),(1812,11220,'converse',0),(1813,11221,'converse_female01',0),(1814,11222,'converse_female02',0),(1815,11223,'converse_female03',0),(1816,11224,'converse_female04',0),(1817,11225,'converse_female05',0),(1818,11226,'converse_female06',0),(1819,11227,'converse_female07',0),(1820,11228,'converse_female08',0),(1821,11229,'converse_female09',0),(1822,11230,'converse_female10',0),(1823,11231,'converse_female11',0),(1824,11232,'converse_female12',0),(1825,11233,'converse_male01',0),(1826,11234,'converse_male02',0),(1827,11235,'converse_male03',0),(1828,11236,'converse_male05',0),(1829,11237,'converse_male06',0),(1830,11238,'converse_male07',0),(1831,11239,'converse_male08',0),(1832,11240,'converse_male09',0),(1833,11241,'converse_male10',0),(1834,11242,'converse_male11',0),(1835,11243,'cooking_failure',0),(1836,11244,'cooking_idle',0),(1837,11245,'cooking_success',0),(1838,11246,'corpse',0),(1839,11247,'cos_call_storm_snd',0),(1840,11248,'cos_storm_space_snd',0),(1841,11249,'cp_charge_snd',0),(1842,11250,'cr_choral01_sound',0),(1843,11251,'cr_choral02_sound',0),(1844,11252,'cracks',0),(1845,11253,'crash_enter',0),(1846,11254,'crash_exit',0),(1847,11255,'crazy',0),(1848,11256,'cringe',0),(1849,11257,'croak_01',0),(1850,11258,'croak_02',0),(1851,11259,'croak_03',0),(1852,11260,'croak_04',0),(1853,11261,'croak_05',0),(1854,11262,'croak_06',0),(1855,11263,'croak_07',0),(1856,11264,'croak_08',0),(1857,11265,'croak_09',0),(1858,11266,'crouch_backup',0),(1859,11267,'crouch_run',0),(1860,11268,'crouch_strafe_left',0),(1861,11269,'crouch_strafe_right',0),(1862,11270,'crouch_tail',0),(1863,11271,'crouch_tail_cloak',0),(1864,11272,'crouch_turn_left',0),(1865,11273,'crouch_turn_right',0),(1866,11274,'crouch_walk',0),(1867,11275,'cry',0),(1868,11276,'cs_begin_snd',0),(1869,11277,'cs_cast_lp_snd',0),(1870,11278,'cs_disco_lp01_snd',0),(1871,11279,'cs_end_snd',0),(1872,11280,'cs_ice_crackle_01',0),(1873,11281,'cs_iceburst_sound',0),(1874,11282,'cs_icetones_01',0),(1875,11283,'cs_icewind_sound',0),(1876,11284,'cs_result_sound',0),(1877,11285,'curse',0),(1878,11286,'curtsey',0),(1879,11287,'cutthroat',0),(1880,11288,'cv_candle01_snd',0),(1881,11289,'cv_candle02_snd',0),(1882,11290,'cv_darkcandle_snd',0),(1883,11291,'cv_drone_snd',0),(1884,11292,'cv_handwave01_snd',0),(1885,11293,'cv_handwave02_snd',0),(1886,11294,'damage01',0),(1887,11295,'damage02',0),(1888,11296,'damage03',0),(1889,11297,'damage_small',0),(1890,11298,'dance',0),(1891,11299,'dance01',0),(1892,11300,'dark_smoke',0),(1893,11301,'dark_smoke_up',0),(1894,11302,'db_drone_sound',0),(1895,11303,'db_electricend_sound',0),(1896,11304,'db_swordstickdirt_sound',0),(1897,11305,'dbb_dragonbreath_snd',0),(1898,11306,'dbb_dragonbreathhiwav_snd',0),(1899,11307,'dcs_scarab_lp_snd',0),(1900,11308,'dcspid_spider_snd',0),(1901,11309,'dead_dark_smoke',0),(1902,11310,'dead_dark_smoke_head',0),(1903,11311,'dead_enter_death02',0),(1904,11312,'dead_enter_death03',0),(1905,11313,'dead_enter_fall',0),(1906,11314,'dead_enter_scream',0),(1907,11315,'dead_enter_sound',0),(1908,11316,'dead_entertiming_a',0),(1909,11317,'dead_entertiming_b',0),(1910,11318,'dead_entertiming_c',0),(1911,11319,'dead_entertiming_c2',0),(1912,11320,'dead_entertiming_c3',0),(1913,11321,'dead_entertiming_d',0),(1914,11322,'dead_entertiming_e',0),(1915,11323,'dead_exit',0),(1916,11324,'dead_fall',0),(1917,11325,'dead_scream01',0),(1918,11326,'dead_scream02',0),(1919,11327,'dead_tail',0),(1920,11328,'death_fall01',0),(1921,11329,'death_fall02',0),(1922,11330,'default',0),(1923,11331,'defensive_buff',0),(1924,11332,'definsive_buff',0),(1925,11333,'descend_sound_01',0),(1926,11334,'design_fear_gate_flash',0),(1927,11335,'design_fireflies',0),(1928,11336,'design_fireflies_evil',0),(1929,11337,'design_hearts_all',0),(1930,11338,'design_hearts_big_all',0),(1931,11339,'design_hearts_big_blue',0),(1932,11340,'design_hearts_big_purple',0),(1933,11341,'design_hearts_big_red',0),(1934,11342,'design_hearts_blue',0),(1935,11343,'design_hearts_purple',0),(1936,11344,'design_hearts_red',0),(1937,11345,'design_hummingbirds',0),(1938,11346,'design_portal_to_hell',0),(1939,11347,'design_result_backdraft',0),(1940,11348,'design_result_cyclone_sand',0),(1941,11349,'design_result_cyclone_sand_ccw',0),(1942,11350,'design_result_freeport_pit_fire_spurt',0),(1943,11351,'design_result_fungusman_poked',0),(1944,11352,'design_result_halloween_fog',0),(1945,11353,'design_result_light_shafts',0),(1946,11354,'design_result_sparkle_scan_up',0),(1947,11355,'design_result_teleporter',0),(1948,11356,'design_smoke_jet_brown',0),(1949,11357,'design_smoke_jet_brown_int',0),(1950,11358,'design_smoke_jet_gray',0),(1951,11359,'design_smoke_jet_gray_int',0),(1952,11360,'design_smoke_jet_white',0),(1953,11361,'design_smoke_jet_white_int',0),(1954,11362,'design_sound_blow',0),(1955,11363,'design_sound_bubble',0),(1956,11364,'design_sound_steam',0),(1957,11365,'design_steamfont_bubbles_ripples',0),(1958,11366,'design_steamfont_rainbow',0),(1959,11367,'design_steamfont_slow_steam',0),(1960,11368,'design_steamfont_steam_column',0),(1961,11369,'design_steamfont_steam_tube_a',0),(1962,11370,'design_steamfont_steam_tube_b',0),(1963,11371,'design_steamfont_water_column',0),(1964,11372,'design_teleport_spires',0),(1965,11373,'design_trap_spear',0),(1966,11374,'design_trap_weight',0),(1967,11375,'design_vision_plane_druid_ring',0),(1968,11376,'design_vortex_portal_blue',0),(1969,11377,'design_vortex_portal_green',0),(1970,11378,'design_vortex_portal_oval_blue',0),(1971,11379,'destination',0),(1972,11380,'destroy',0),(1973,11381,'destroyed',0),(1974,11382,'df_charge_sound',0),(1975,11383,'df_hit_sound',0),(1976,11384,'df_impact_sound',0),(1977,11385,'df_vortex_sound',0),(1978,11386,'dieyell',0),(1979,11387,'dig',0),(1980,11388,'dig_enter',0),(1981,11389,'dig_exit',0),(1982,11390,'dig_loop',0),(1983,11391,'ding',0),(1984,11392,'disarm_both',0),(1985,11393,'disarm_left',0),(1986,11394,'disarm_right',0),(1987,11395,'disease',0),(1988,11396,'dm_backgroundexplosions_snd',0),(1989,11397,'dm_dragonform_snd',0),(1990,11398,'dm_energyforce_snd',0),(1991,11399,'dodge',0),(1992,11400,'dodge01',0),(1993,11401,'dodge02',0),(1994,11402,'dodge03',0),(1995,11403,'dodge1',0),(1996,11404,'dodge2',0),(1997,11405,'dodge3',0),(1998,11406,'dodge_backhand',0),(1999,11407,'dodge_down',0),(2000,11408,'dodge_forehand',0),(2001,11409,'dodge_thrust',0),(2002,11410,'doh',0),(2003,11411,'door_move',0),(2004,11412,'door_slam',0),(2005,11413,'doorcorner01',0),(2006,11414,'doorcorner02',0),(2007,11415,'doubletake',0),(2008,11416,'dpsd_swordshatter.wav_snd',0),(2009,11417,'dragon_e3demo',0),(2010,11418,'draw_metal_weapon_snd',0),(2011,11419,'draw_weapon_snd',0),(2012,11420,'draw_weapon_trigger',0),(2013,11421,'drinking_failure',0),(2014,11422,'drinking_idle',0),(2015,11423,'drinking_success',0),(2016,11424,'drip01',0),(2017,11425,'drip02',0),(2018,11426,'dronewolf_sound',0),(2019,11427,'drum_drone_snd',0),(2020,11428,'drum_drum_snd',0),(2021,11429,'ds_dragonspawn_sound',0),(2022,11430,'ds_gashiss_snd',0),(2023,11433,'dual_wield_attack_recoil',0),(2024,11434,'dual_wield_attack_recoil01',0),(2025,11435,'dual_wield_attack_recoil02',0),(2026,11436,'dual_wield_attack_recoil03',0),(2027,11437,'dual_wield_backup',0),(2028,11438,'dual_wield_defensive_buff',0),(2029,11439,'dual_wield_dodge_backhand',0),(2030,11440,'dual_wield_dodge_down',0),(2031,11441,'dual_wield_dodge_forehand',0),(2032,11442,'dual_wield_dodge_thrust',0),(2033,11443,'dual_wield_enter',0),(2034,11444,'dual_wield_exit',0),(2035,11445,'dual_wield_feint',0),(2036,11446,'dual_wield_knockdowntoknees',0),(2037,11447,'dual_wield_knockedtoback',0),(2038,11448,'dual_wield_knockedtoback_getup',0),(2039,11449,'dual_wield_offensive_buff',0),(2040,11450,'dual_wield_ouch_backhand',0),(2041,11451,'dual_wield_ouch_down',0),(2042,11452,'dual_wield_ouch_forehand',0),(2043,11453,'dual_wield_ouch_thrust',0),(2044,11454,'dual_wield_parry_backhand',0),(2045,11455,'dual_wield_parry_down',0),(2046,11456,'dual_wield_parry_forehand',0),(2047,11457,'dual_wield_parry_thrust',0),(2048,11458,'dual_wield_strafe_left',0),(2049,11459,'dual_wield_strafe_right',0),(2050,11460,'dual_wield_super_buff',0),(2051,11461,'dual_wield_taunt_combat_art',0),(2052,11462,'dual_wield_walk',0),(2053,11463,'duck',0),(2054,11464,'duck_short',0),(2055,11465,'dust_base',0),(2056,11466,'dust_holster_center',0),(2057,11467,'dust_holster_left',0),(2058,11468,'dust_holster_right',0),(2059,11469,'dust_leftfoot',0),(2060,11470,'dust_lefttfoot',0),(2061,11471,'dust_puff',0),(2062,11472,'dust_rightfoot',0),(2063,11473,'dust_righttfoot',0),(2064,11474,'dw_snap_snd',0),(2065,11475,'e',0),(2066,11476,'eat',0),(2067,11477,'ef_cast_chains_lp_snd',0),(2068,11478,'ef_chains_snd',0),(2069,11479,'elbow',0),(2070,11480,'electric_shackles_softer_sound',0),(2071,11481,'electric_shackles_sound',0),(2072,11482,'end_snarl_sound',0),(2073,11483,'endsplat',0),(2074,11484,'enter',0),(2075,11485,'es_flutecast_sound',0),(2076,11486,'es_fluteresult_sound',0),(2077,11487,'ew_castlp_snd',0),(2078,11488,'explode01',0),(2079,11489,'explode02',0),(2080,11490,'explode03',0),(2081,11491,'explode_big',0),(2082,11492,'explosion',0),(2083,11493,'eye_beam',0),(2084,11494,'eye_beam_red_blue',0),(2085,11495,'eyes',0),(2086,11496,'f',0),(2087,11497,'face_combat',0),(2088,11498,'face_idle',0),(2089,11499,'facial_frown',0),(2090,11500,'facial_smile',0),(2091,11501,'fae_dance_spark_sphere',0),(2092,11502,'fae_silvani_transformation',0),(2093,11503,'failure01',0),(2094,11504,'failure02',0),(2095,11505,'fall_enter',0),(2096,11506,'fall_idle',0),(2097,11507,'fall_moving',0),(2098,11508,'fall_sequence',0),(2099,11509,'fb_froggy01_snd',0),(2100,11510,'fb_froggyform_snd',0),(2101,11511,'fb_ice_explode_sound',0),(2102,11512,'fbb_charge_snd',0),(2103,11513,'fbb_crunches_snd',0),(2104,11514,'fbb_explode_snd',0),(2105,11515,'fbd_charge01_snd',0),(2106,11516,'fbd_impact_snd',0),(2107,11517,'fbd_precharge_snd',0),(2108,11518,'fd_distort02_snd',0),(2109,11519,'fd_distort_end_snd',0),(2110,11520,'fd_distort_low_snd',0),(2111,11521,'fd_distort_snd',0),(2112,11522,'feint',0),(2113,11523,'ff_explode_lp_snd',0),(2114,11524,'ff_lasercloud_lp_snd',0),(2115,11525,'fgdt_dust_snd',0),(2116,11526,'fh_cast_sparkles_snd',0),(2117,11527,'fh_end_body_fall_snd',0),(2118,11528,'fh_flames_snd',0),(2119,11529,'fh_hammer_appear_02_snd',0),(2120,11530,'fh_hammer_appear_snd',0),(2121,11531,'fh_hammer_impact_snd',0),(2122,11532,'fh_hammer_whoosh_snd',0),(2123,11533,'fire',0),(2124,11534,'fire01',0),(2125,11535,'fire02',0),(2126,11536,'fire_breath',0),(2127,11537,'fire_loop',0),(2128,11538,'fireblast',0),(2129,11539,'fishing_cast',0),(2130,11540,'fishing_fight',0),(2131,11541,'fishing_reel_in',0),(2132,11542,'fizzle',0),(2133,11543,'fkd_impact_sound',0),(2134,11544,'fkd_kneebreak_sound',0),(2135,11545,'fl_bckgrnd_snd',0),(2136,11546,'fl_lash_snd',0),(2137,11547,'fl_whiphit_snd',0),(2138,11548,'flames_sound',0),(2139,11549,'flash_blue',0),(2140,11550,'flash_green',0),(2141,11551,'flash_red',0),(2142,11552,'flash_yellow',0),(2143,11553,'flee',0),(2144,11554,'flex',0),(2145,11555,'flight_path',0),(2146,11556,'flingpoo',0),(2147,11557,'flirt',0),(2148,11558,'flustered',0),(2149,11559,'fly',0),(2150,11560,'fly_attack',0),(2151,11561,'fly_attack_bite',0),(2152,11562,'fly_attack_breath',0),(2153,11563,'fly_attack_breath_arc',0),(2154,11564,'fly_dive',0),(2155,11565,'fly_glide',0),(2156,11566,'fly_glide2',0),(2157,11567,'fly_idle',0),(2158,11568,'fly_in',0),(2159,11569,'fly_ouch',0),(2160,11570,'fly_run',0),(2161,11571,'fmba_breathattack_snd',0),(2162,11572,'foostep_trigger',0),(2163,11573,'foot_dust_left',0),(2164,11574,'foot_dust_right',0),(2165,11575,'foot_shake',0),(2166,11576,'footste_trigger',0),(2167,11577,'footstep',0),(2168,11578,'footstep_chainmail_carpet',0),(2169,11579,'footstep_chainmail_dirt',0),(2170,11580,'footstep_chainmail_grass',0),(2171,11581,'footstep_chainmail_gravel',0),(2172,11582,'footstep_chainmail_ice',0),(2173,11583,'footstep_chainmail_metal',0),(2174,11584,'footstep_chainmail_mud',0),(2175,11585,'footstep_chainmail_sand',0),(2176,11586,'footstep_chainmail_snow',0),(2177,11587,'footstep_chainmail_stone',0),(2178,11588,'footstep_chainmail_water',0),(2179,11589,'footstep_chainmail_wood',0),(2180,11590,'footstep_leather_carpet',0),(2181,11591,'footstep_leather_dirt',0),(2182,11592,'footstep_leather_grass',0),(2183,11593,'footstep_leather_gravel',0),(2184,11594,'footstep_leather_ice',0),(2185,11595,'footstep_leather_metal',0),(2186,11596,'footstep_leather_mud',0),(2187,11597,'footstep_leather_sand',0),(2188,11598,'footstep_leather_snow',0),(2189,11599,'footstep_leather_stone',0),(2190,11600,'footstep_leather_water',0),(2191,11601,'footstep_leather_wood',0),(2192,11602,'footstep_metal_carpet',0),(2193,11603,'footstep_metal_dirt',0),(2194,11604,'footstep_metal_grass',0),(2195,11605,'footstep_metal_gravel',0),(2196,11606,'footstep_metal_ice',0),(2197,11607,'footstep_metal_metal',0),(2198,11608,'footstep_metal_mud',0),(2199,11609,'footstep_metal_sand',0),(2200,11610,'footstep_metal_snow',0),(2201,11611,'footstep_metal_stone',0),(2202,11612,'footstep_metal_water',0),(2203,11613,'footstep_metal_wood',0),(2204,11614,'footstep_trigger',0),(2205,11615,'forest_flare',0),(2206,11616,'forestry_chopping',0),(2207,11617,'four_rings',0),(2208,11618,'four_rings_fail',0),(2209,11619,'frog_attack_01',0),(2210,11620,'frog_hit',0),(2211,11621,'frog_ouch',0),(2212,11622,'frog_squish_01',0),(2213,11623,'frog_squish_02',0),(2214,11624,'frog_squish_03',0),(2215,11625,'frog_tongue_01',0),(2216,11626,'frog_tongueslime_01',0),(2217,11627,'frog_whoosh_01',0),(2218,11628,'frustrated',0),(2219,11629,'fs_cast_flame_snd',0),(2220,11630,'fs_endfire_snd',0),(2221,11631,'fs_firefall_snd',0),(2222,11632,'fs_whoosh_snd',0),(2223,11633,'fullcurtsey',0),(2224,11634,'fusion_bubbly_snd',0),(2225,11635,'fusion_cast_snd',0),(2226,11636,'gc_boneburs_snd',0),(2227,11637,'gc_castcharge_snd',0),(2228,11638,'gc_result_snd',0),(2229,11639,'gc_screams_snd',0),(2230,11640,'gem_glow',0),(2231,11641,'gemsparkle',0),(2232,11642,'gemsparkle_fail1',0),(2233,11643,'gemsparkle_fail2',0),(2234,11644,'gemsparkle_go',0),(2235,11645,'ghost_carpet',0),(2236,11646,'ghost_die',0),(2237,11647,'ghost_loop',0),(2238,11648,'giggle',0),(2239,11649,'glare',0),(2240,11650,'glide',0),(2241,11651,'glow',0),(2242,11652,'glow_top',0),(2243,11653,'go',0),(2244,11654,'go_down',0),(2245,11655,'green_fire',0),(2246,11656,'green_smoke',0),(2247,11657,'griffin_idle',0),(2248,11658,'griffin_run',0),(2249,11659,'griffin_walk',0),(2250,11660,'group_chargeswordglint_sound',0),(2251,11661,'group_cloud_sound',0),(2252,11662,'group_electricend_sound',0),(2253,11663,'grumble',0),(2254,11664,'gutcramp',0),(2255,11665,'gw_chargeup_snd',0),(2256,11666,'gw_grantwish_snd',0),(2257,11667,'gw_impact_sound',0),(2258,11668,'happy',0),(2259,11669,'harpy_fire_snd',0),(2260,11670,'harpy_spin_snd',0),(2261,11671,'haste_sparkles_snd',0),(2262,11672,'haste_swirl_snd',0),(2263,11673,'haste_swords_snd',0),(2264,11674,'head_tracking_off_trigger',0),(2265,11675,'hearnoevil',0),(2266,11676,'heartattack',0),(2267,11677,'heat_shimmer',0),(2268,11678,'heavydamage_enter',0),(2269,11679,'heavydamage_idle',0),(2270,11680,'heckno',0),(2271,11681,'heelclick',0),(2272,11682,'hello',0),(2273,11683,'heroic_sound',0),(2274,11684,'hide',0),(2275,11685,'hide_melee_projectile_trigger',0),(2276,11686,'hit_02',0),(2277,11687,'hit_chainmail_snd',0),(2278,11688,'hit_cloth_snd',0),(2279,11689,'hit_leather_snd',0),(2280,11690,'hit_metal_chainmail_snd',0),(2281,11691,'hit_metal_cloth_snd',0),(2282,11692,'hit_metal_leather_snd',0),(2283,11693,'hit_metal_metal_snd',0),(2284,11694,'hit_metal_skin_snd',0),(2285,11695,'hit_metal_snd',0),(2286,11696,'hit_shake',0),(2287,11697,'hit_skin_chainmail_snd',0),(2288,11698,'hit_skin_cloth_snd',0),(2289,11699,'hit_skin_leather_snd',0),(2290,11700,'hit_skin_metal_snd',0),(2291,11701,'hit_skin_skin_snd',0),(2292,11702,'hit_skin_snd',0),(2293,11703,'hit_snd',0),(2294,11704,'hit_target_tigger',0),(2295,11705,'hit_target_trigger',0),(2296,11706,'hit_wood_chainmail_snd',0),(2297,11707,'hit_wood_cloth_snd',0),(2298,11708,'hit_wood_leather_snd',0),(2299,11709,'hit_wood_metal_snd',0),(2300,11710,'hit_wood_skin_snd',0),(2301,11711,'hitonhead_sound',0),(2302,11712,'horse_fall',0),(2303,11713,'horse_jump',0),(2304,11714,'horse_land',0),(2305,11715,'horse_run',0),(2306,11716,'horse_tail',0),(2307,11717,'horse_walk',0),(2308,11718,'howl',0),(2309,11719,'hr_ghost_gallop_snd',0),(2310,11720,'hr_whiney_snd',0),(2311,11721,'hrb_endruneblur_sound',0),(2312,11722,'hro_heal_snd',0),(2313,11723,'hro_runeorbit_snd',0),(2314,11724,'hungry',0),(2315,11725,'ic_fragments_snd',0),(2316,11726,'ic_ice_bkgrnd_sound',0),(2317,11727,'ic_ice_spike_sound',0),(2318,11728,'idle03',0),(2319,11729,'idle04',0),(2320,11730,'idle_01',0),(2321,11731,'idle_bark',0),(2322,11732,'idle_break',0),(2323,11733,'idle_e3',0),(2324,11734,'idle_pant',0),(2325,11735,'idle_sniff',0),(2326,11736,'idle_snort',0),(2327,11737,'idle_static',0),(2328,11738,'idle_step',0),(2329,11739,'idle_vocal',0),(2330,11740,'idletiming_a',0),(2331,11741,'idletiming_b',0),(2332,11742,'idletiming_c',0),(2333,11743,'idletiming_d',0),(2334,11744,'idletiming_e',0),(2335,11745,'idletiming_g',0),(2336,11746,'idletiming_h',0),(2337,11747,'idletiming_i',0),(2338,11748,'ignite_weapon_sh',0),(2339,11749,'ilt_tap_snd',0),(2340,11750,'inhale',0),(2341,11752,'int_cast_lp_snd',0),(2342,11753,'int_cast_sparkles_lp',0),(2343,11754,'int_float_sound',0),(2344,11755,'int_intglow_sound',0),(2345,11756,'itch',0),(2346,11757,'jump',0),(2347,11758,'jump_moving',0),(2348,11759,'jump_substitute',0),(2349,11760,'kettle01',0),(2350,11761,'kick',0),(2351,11762,'kiss',0),(2352,11763,'knockdown_attack',0),(2353,11764,'knockdowntoknees',0),(2354,11765,'knockdowntokness',0),(2355,11766,'knockdwontoknees',0),(2356,11767,'knockedtoback',0),(2357,11768,'knockedtoback_getup',0),(2358,11769,'knockedtoback_onbackidle',0),(2359,11770,'knockedtoknees',0),(2360,11771,'knockedtokness',0),(2361,11772,'knocktoknees',0),(2362,11773,'l',0),(2363,11774,'la_lion_roar_02_snd',0),(2364,11775,'la_lion_roar_snd',0),(2365,11776,'land',0),(2366,11777,'land_thud',0),(2367,11778,'landing',0),(2368,11779,'launch_melee_projectile_trigger',0),(2369,11780,'lb2_zap_snd',0),(2370,11781,'lb_cloud_sound',0),(2371,11782,'lb_volts_sound',0),(2372,11783,'leatherworking_failure',0),(2373,11784,'leatherworking_idle',0),(2374,11785,'leatherworking_success',0),(2375,11786,'left_hand_fist',0),(2376,11787,'left_hand_relaxed',0),(2377,11788,'level_up3d_sound',0),(2378,11789,'light_torch',0),(2379,11790,'lightdamage_enter',0),(2380,11791,'lightdamage_idle',0),(2381,11792,'lightning_spheres',0),(2382,11793,'listen',0),(2383,11794,'long_fall',0),(2384,11795,'long_fall_moving',0),(2385,11796,'lookaway',0),(2386,11797,'lr_castlion_snd',0),(2387,11798,'lr_growl_snd',0),(2388,11799,'lt_suck2_snd',0),(2389,11800,'lt_suck_snd',0),(2390,11801,'lucan_lightning_bolt',0),(2391,11802,'lvlup_achievment_snd',0),(2392,11803,'m',0),(2393,11804,'mc_castend_snd',0),(2394,11805,'mc_castopen_snd',0),(2395,11806,'mc_manna_channel_snd',0),(2396,11807,'mc_resultwhip_snd',0),(2397,11808,'mcp_shield',0),(2398,11809,'mediumdamage_enter',0),(2399,11810,'mediumdamage_idle',0),(2400,11811,'metalworking_failure',0),(2401,11812,'metalworking_idle',0),(2402,11813,'metalworking_success',0),(2403,11814,'miss_target_tigger',0),(2404,11815,'miss_target_trigger',0),(2405,11816,'molten_metal',0),(2406,11817,'monk_attack_recoil',0),(2407,11818,'monk_attack_recoil01',0),(2408,11819,'monk_attack_recoil02',0),(2409,11820,'monk_attack_recoil03',0),(2410,11821,'monk_backup',0),(2411,11822,'monk_charge_up',0),(2412,11823,'monk_defensive_buff',0),(2413,11824,'monk_dodge_forehand',0),(2414,11825,'monk_dodge_thrust',0),(2415,11826,'monk_enter',0),(2416,11827,'monk_exit',0),(2417,11828,'monk_feint',0),(2418,11829,'monk_idle01',0),(2419,11830,'monk_kick',0),(2420,11831,'monk_kick_flying',0),(2421,11832,'monk_kick_spin',0),(2422,11833,'monk_knockdowntoknees',0),(2423,11834,'monk_knockedtoback',0),(2424,11835,'monk_knockedtoback_getup',0),(2425,11836,'monk_offensive_buff',0),(2426,11837,'monk_ouch_backhand',0),(2427,11838,'monk_ouch_down',0),(2428,11839,'monk_ouch_forehand',0),(2429,11840,'monk_ouch_thrust',0),(2430,11841,'monk_parry_backhand',0),(2431,11842,'monk_parry_down',0),(2432,11843,'monk_parry_forehand',0),(2433,11844,'monk_parry_thrust',0),(2434,11845,'monk_strafe_left',0),(2435,11846,'monk_strafe_right',0),(2436,11847,'monk_super_buff',0),(2437,11848,'monk_taunt_combat_art',0),(2438,11849,'monk_walk',0),(2439,11850,'monk_whirling_attack',0),(2440,11851,'mood_afraid',0),(2441,11852,'mood_angry',0),(2442,11853,'mood_combat',0),(2443,11854,'mood_happy',0),(2444,11855,'mood_idle',0),(2445,11856,'mood_sad',0),(2446,11857,'mood_tired',0),(2447,11858,'moon',0),(2448,11859,'mount',0),(2449,11860,'mr_chomp',0),(2450,11861,'mr_curl',0),(2451,11862,'mr_death_yell',0),(2452,11863,'mr_fall',0),(2453,11864,'mr_growl',0),(2454,11865,'mr_land',0),(2455,11866,'mr_ouch_01',0),(2456,11867,'mr_run_01',0),(2457,11868,'myst_caststars_snd',0),(2458,11869,'myst_caststarsresult_snd',0),(2459,11870,'myst_stars_snd',0),(2460,11871,'nb_burn_01_snd',0),(2461,11872,'nb_burst_02_snd',0),(2462,11873,'nb_burst_snd',0),(2463,11874,'nb_castmagic_snd',0),(2464,11875,'nb_handsparks_long_snd',0),(2465,11876,'nb_handsparks_louder_snd',0),(2466,11877,'nb_handsparks_snd',0),(2467,11878,'nbgroup_castmagic_snd',0),(2468,11879,'needle01',0),(2469,11880,'neener',0),(2470,11881,'no',0),(2471,11882,'nod',0),(2472,11883,'o',0),(2473,11884,'off_combat',0),(2474,11885,'off_enter',0),(2475,11886,'off_exit',0),(2476,11887,'off_idle',0),(2477,11888,'off_peace',0),(2478,11889,'off_sit',0),(2479,11890,'offensive_buff',0),(2480,11891,'one_ring',0),(2481,11892,'one_ring_fail',0),(2482,11893,'oov_bubbles_snd',0),(2483,11894,'oov_effect_short_snd',0),(2484,11895,'oov_effect_snd',0),(2485,11896,'oov_heal_snd',0),(2486,11897,'open',0),(2487,11898,'open_coins_and_jewels',0),(2488,11899,'open_coins_copper',0),(2489,11900,'open_coins_gold',0),(2490,11901,'open_coins_silver',0),(2491,11902,'open_glow',0),(2492,11903,'opened',0),(2493,11904,'opened_coins_and_jewels',0),(2494,11905,'opened_coins_copper',0),(2495,11906,'opened_coins_gold',0),(2496,11907,'opened_coins_silver',0),(2497,11908,'opened_glow',0),(2498,11909,'orate',0),(2499,11910,'other_idle',0),(2500,11911,'ouch',0),(2501,11912,'ouch+forehand',0),(2502,11913,'ouch01',0),(2503,11914,'ouch01_01',0),(2504,11915,'ouch02',0),(2505,11916,'ouch02_01',0),(2506,11917,'ouch03',0),(2507,11918,'ouch03_01',0),(2508,11919,'ouch04',0),(2509,11920,'ouch_01',0),(2510,11921,'ouch_backhand',0),(2511,11922,'ouch_backhand_01',0),(2512,11923,'ouch_bakchand',0),(2513,11924,'ouch_big',0),(2514,11925,'ouch_chips',0),(2515,11926,'ouch_down',0),(2516,11927,'ouch_down_01',0),(2517,11928,'ouch_forehand',0),(2518,11929,'ouch_forehand_01',0),(2519,11930,'ouch_fx',0),(2520,11931,'ouch_fx2',0),(2521,11932,'ouch_headshake01',0),(2522,11933,'ouch_medium',0),(2523,11934,'ouch_medium_big',0),(2524,11935,'ouch_oil_drip',0),(2525,11936,'ouch_parts',0),(2526,11937,'ouch_roar01',0),(2527,11938,'ouch_scream',0),(2528,11939,'ouch_small',0),(2529,11940,'ouch_sound',0),(2530,11941,'ouch_spurt_chest',0),(2531,11942,'ouch_spurt_pelvis',0),(2532,11943,'ouch_tail',0),(2533,11944,'ouch_tail02',0),(2534,11945,'ouch_thrust',0),(2535,11946,'ouch_thrust_01',0),(2536,11947,'ouchdown',0),(2537,11948,'ouchtiming_a',0),(2538,11949,'ouchtiming_b',0),(2539,11950,'ouchtiming_c',0),(2540,11951,'oven_door',0),(2541,11952,'overhere',0),(2542,11953,'parry',0),(2543,11954,'parry01',0),(2544,11955,'parry02',0),(2545,11956,'parry03',0),(2546,11957,'parry_metal_metal_snd',0),(2547,11958,'parry_metal_skin_snd',0),(2548,11959,'parry_metal_wood_snd',0),(2549,11960,'parry_skin_metal_snd',0),(2550,11961,'parry_skin_skin_snd',0),(2551,11962,'parry_skin_wood_snd',0),(2552,11963,'parry_snd',0),(2553,11964,'parry_target_tigger',0),(2554,11965,'parry_target_trigger',0),(2555,11966,'parry_wood_metal_snd',0),(2556,11967,'parry_wood_skin_snd',0),(2557,11968,'parry_wood_wood_snd',0),(2558,11969,'particle_mood_combat',0),(2559,11970,'particle_mood_dead',0),(2560,11971,'particle_mood_peace',0),(2561,11972,'pbae_divine_snd',0),(2562,11973,'peace_combat',0),(2563,11974,'peace_fx',0),(2564,11975,'peace_off',0),(2565,11976,'peer',0),(2566,11977,'pen01',0),(2567,11978,'pf_endsplash_snd',0),(2568,11979,'pf_pwrcast_snd',0),(2569,11980,'pf_pwrrslt_snd',0),(2570,11981,'pike_attack03',0),(2571,11982,'pike_attack04',0),(2572,11983,'pike_attack_recoil',0),(2573,11984,'pike_attack_recoil01',0),(2574,11985,'pike_attack_recoil02',0),(2575,11986,'pike_attack_recoil03',0),(2576,11987,'pike_backup',0),(2577,11988,'pike_charge_up',0),(2578,11989,'pike_death_blow',0),(2579,11990,'pike_defensive_buff',0),(2580,11991,'pike_dodge_backhand',0),(2581,11992,'pike_dodge_down',0),(2582,11993,'pike_dodge_forehand',0),(2583,11994,'pike_dodge_thrust',0),(2584,11995,'pike_enter',0),(2585,11996,'pike_exit',0),(2586,11997,'pike_feint',0),(2587,11998,'pike_idle01',0),(2588,11999,'pike_knockdowntoknees',0),(2589,12000,'pike_knockedtoback',0),(2590,12001,'pike_knockedtoback_getup',0),(2591,12002,'pike_offensive_buff',0),(2592,12003,'pike_ouch01_backhand',0),(2593,12004,'pike_ouch02_down',0),(2594,12005,'pike_ouch_backhand',0),(2595,12006,'pike_ouch_down',0),(2596,12007,'pike_ouch_forehand',0),(2597,12008,'pike_ouch_thrust',0),(2598,12009,'pike_parry_backhand',0),(2599,12010,'pike_parry_down',0),(2600,12011,'pike_parry_forehand',0),(2601,12012,'pike_parry_thrust',0),(2602,12013,'pike_strafe_left',0),(2603,12014,'pike_strafe_right',0),(2604,12015,'pike_super_buff',0),(2605,12016,'pike_taunt',0),(2606,12017,'pike_walk',0),(2607,12018,'pl_lightning_01_snd',0),(2608,12019,'pl_lightning_02_snd',0),(2609,12020,'pl_lightning_03_snd',0),(2610,12021,'pl_warp_01_snd',0),(2611,12022,'planer',0),(2612,12023,'plummet',0),(2613,12024,'pn_castflute_sound',0),(2614,12025,'pn_resultflute_sound',0),(2615,12026,'pof_batdrone_snd',0),(2616,12027,'pof_casttone_snd',0),(2617,12028,'point',0),(2618,12029,'point_right',0),(2619,12030,'ponder',0),(2620,12031,'pout',0),(2621,12032,'pp_casthi_snd',0),(2622,12033,'pp_stab_snd',0),(2623,12034,'ps_caststream_snd',0),(2624,12035,'ps_resultfx_snd',0),(2625,12036,'pugilist_attack01',0),(2626,12037,'pugilist_attack03',0),(2627,12038,'pugilist_attack_recoil',0),(2628,12039,'pugilist_attack_recoil01',0),(2629,12040,'pugilist_attack_recoil02',0),(2630,12041,'pugilist_attack_recoil03',0),(2631,12042,'pugilist_backup',0),(2632,12043,'pugilist_charge_up',0),(2633,12044,'pugilist_defensive_buff',0),(2634,12045,'pugilist_dodge',0),(2635,12046,'pugilist_dodge01',0),(2636,12047,'pugilist_dodge02',0),(2637,12048,'pugilist_dodge_backhand',0),(2638,12049,'pugilist_dodge_down',0),(2639,12050,'pugilist_dodge_forehand',0),(2640,12051,'pugilist_dodge_thrust',0),(2641,12052,'pugilist_enter',0),(2642,12053,'pugilist_exit',0),(2643,12054,'pugilist_feint',0),(2644,12055,'pugilist_knockdowntoknees',0),(2645,12056,'pugilist_knockedtoback',0),(2646,12057,'pugilist_knockedtoback_getup',0),(2647,12058,'pugilist_offensive_buff',0),(2648,12059,'pugilist_ouch',0),(2649,12060,'pugilist_ouch01',0),(2650,12061,'pugilist_ouch_backhand',0),(2651,12062,'pugilist_ouch_down',0),(2652,12063,'pugilist_ouch_forehand',0),(2653,12064,'pugilist_ouch_thrust',0),(2654,12065,'pugilist_parry',0),(2655,12066,'pugilist_parry_backhand',0),(2656,12067,'pugilist_parry_down',0),(2657,12068,'pugilist_parry_forehand',0),(2658,12069,'pugilist_parry_thrust',0),(2659,12070,'pugilist_recoil',0),(2660,12071,'pugilist_strafe_left',0),(2661,12072,'pugilist_strafe_right',0),(2662,12073,'pugilist_super_buff',0),(2663,12074,'pugilist_taunt',0),(2664,12075,'pugilist_walk',0),(2665,12076,'pv_pet_victory_snd',0),(2666,12077,'quality_down',0),(2667,12078,'quality_up',0),(2668,12079,'quest_complete',0),(2669,12080,'rain',0),(2670,12081,'raisehand',0),(2671,12082,'rays',0),(2672,12083,'rb_p2pcast_snd',0),(2673,12084,'rb_p2pstream_snd',0),(2674,12085,'rc_leaves_01_snd',0),(2675,12086,'rc_roots_grow_01_snd',0),(2676,12087,'rct_endblast_sound',0),(2677,12088,'rct_endtones_sound',0),(2678,12089,'rebirth_sound_01',0),(2679,12090,'red_nose',0),(2680,12091,'resilt_end_sound',0),(2681,12092,'rest',0),(2682,12093,'result_bladebarrier',0),(2683,12094,'result_camera_shake2_snd',0),(2684,12095,'result_camera_shake_snd',0),(2685,12096,'result_chain_lightning_p2p',0),(2686,12097,'result_charge1_sh',0),(2687,12098,'result_charge_sh',0),(2688,12099,'result_copter_flamethrower',0),(2689,12100,'result_dawn_rising',0),(2690,12101,'result_dragon_fire_spiral',0),(2691,12102,'result_dragon_shield_fire',0),(2692,12103,'result_dragon_shield_lightning',0),(2693,12104,'result_dragon_shield_lightning_02a',0),(2694,12105,'result_dragon_shield_lightning_02b',0),(2695,12106,'result_dragon_shield_lightning_02c',0),(2696,12107,'result_dust_blast_heavy',0),(2697,12108,'result_feather_explosion',0),(2698,12109,'result_flash_dragon',0),(2699,12110,'result_fog',0),(2700,12111,'result_fog_low',0),(2701,12112,'result_fog_low_small',0),(2702,12113,'result_fog_poison',0),(2703,12114,'result_fog_poison_4x10',0),(2704,12115,'result_fog_poison_low',0),(2705,12116,'result_fog_poison_low_small',0),(2706,12117,'result_fog_poison_small',0),(2707,12118,'result_fog_small',0),(2708,12119,'result_forced_shader_dark_dragon',0),(2709,12120,'result_forced_shader_electric_dragon',0),(2710,12121,'result_forced_shader_fire_dragon',0),(2711,12122,'result_forced_shader_ice_dragon',0),(2712,12123,'result_froglok_bauble',0),(2713,12124,'result_glint2_sh',0),(2714,12125,'result_knighthood_bauble',0),(2715,12126,'result_lightning_bolt1_snd',0),(2716,12127,'result_mend_synth_sound',0),(2717,12128,'result_protection_of_twilight',0),(2718,12129,'result_recharging_station_effect',0),(2719,12130,'result_rune_awakened',0),(2720,12131,'result_sparkles_clinging_dragon',0),(2721,12132,'result_sparkles_clinging_soft_dragon',0),(2722,12133,'result_sun_sphere',0),(2723,12134,'result_twinkle_01',0),(2724,12135,'result_weakness_disk_blue',0),(2725,12136,'result_weakness_disk_green',0),(2726,12137,'result_weakness_disk_purple',0),(2727,12138,'result_weakness_disk_red',0),(2728,12139,'result_weakness_disk_yellow',0),(2729,12140,'result_windrazor',0),(2730,12141,'result_wood_chips',0),(2731,12142,'resurrect',0),(2732,12143,'right_hand_fist',0),(2733,12144,'right_hand_relaxed',0),(2734,12145,'righthand_impact',0),(2735,12146,'ring_glints',0),(2736,12147,'ring_glints2',0),(2737,12148,'ring_glints_idle',0),(2738,12149,'rofl',0),(2739,12150,'royalwave',0),(2740,12151,'rt_drone_snd',0),(2741,12152,'rt_tune_snd',0),(2742,12153,'rude',0),(2743,12155,'runes',0),(2744,12156,'sa_bones_sound',0),(2745,12157,'sa_flash01_snd',0),(2746,12158,'sa_flash02_snd',0),(2747,12159,'sa_flash03_snd',0),(2748,12160,'sa_rattle_01_snd',0),(2749,12161,'sa_skelattack_snd',0),(2750,12162,'sa_skeldance_snd',0),(2751,12163,'sa_snakespawn_snd',0),(2752,12164,'sa_spiritappear_snd',0),(2753,12165,'sa_strike_snd',0),(2754,12166,'sad',0),(2755,12167,'salute',0),(2756,12168,'salute_freeport',0),(2757,12169,'sanc_castlp_snd',0),(2758,12170,'sanc_pulse_01_sound',0),(2759,12171,'sanc_pulse_02_sound',0),(2760,12172,'sarcasm',0),(2761,12173,'saw01',0),(2762,12174,'saw02',0),(2763,12175,'saw_sparks_front',0),(2764,12176,'saw_sparks_inside',0),(2765,12177,'saw_sparks_outside',0),(2766,12178,'sb_skelcast_sound',0),(2767,12179,'sb_skeleton_sound',0),(2768,12180,'sc_impact_snd',0),(2769,12181,'sc_swipe_snd',0),(2770,12182,'scheme',0),(2771,12183,'scims_scimitar_snd',0),(2772,12184,'scims_swordswipe_snd',0),(2773,12185,'scims_whoosh_snd',0),(2774,12186,'scissors01',0),(2775,12187,'scold',0),(2776,12188,'scorp_crunches_snd',0),(2777,12189,'scorpa_scorpform_snd',0),(2778,12190,'scorpa_scream01_snd',0),(2779,12191,'scratch',0),(2780,12192,'scream',0),(2781,12193,'scribing_idle',0),(2782,12194,'scruntch',0),(2783,12195,'sd_drumming_lp_snd',0),(2784,12196,'sd_soulcast_sound',0),(2785,12197,'sd_soulsuck_sound',0),(2786,12199,'sd_spiritflash_snd',0),(2787,12200,'sd_spiritflashsoft_snd',0),(2788,12201,'section01',0),(2789,12202,'section02',0),(2790,12203,'section03',0),(2791,12204,'seenoevil',0),(2792,12205,'sf_bladering_snd',0),(2793,12206,'sf_flute_lp_snd',0),(2794,12207,'sgwp_bark_snd',0),(2795,12208,'shaft01',0),(2796,12209,'shaft02',0),(2797,12210,'shake',0),(2798,12211,'shake1',0),(2799,12212,'shake2',0),(2800,12213,'shake3',0),(2801,12214,'shakefist',0),(2802,12215,'shakeit',0),(2803,12216,'shame',0),(2804,12217,'shark_attack01',0),(2805,12218,'shark_bite01',0),(2806,12219,'shark_bite02',0),(2807,12220,'shark_cry',0),(2808,12221,'shark_die',0),(2809,12222,'shark_ouch',0),(2810,12223,'shark_runtail',0),(2811,12224,'shark_runtail02',0),(2812,12225,'shark_tail',0),(2813,12226,'sheathe_metal_weapon_snd',0),(2814,12227,'sheathe_weapon_snd',0),(2815,12228,'sheathe_weapon_trigger',0),(2816,12229,'shield_block_backhand',0),(2817,12230,'shield_block_down',0),(2818,12231,'shield_block_forehand',0),(2819,12232,'shield_block_thrust',0),(2820,12233,'shield_shove',0),(2821,12234,'shield_sound',0),(2822,12235,'shimmy',0),(2823,12236,'shiver',0),(2824,12237,'show_bridge',0),(2825,12238,'show_melee_projectile_trigger',0),(2826,12239,'shrink_sound',0),(2827,12240,'shrug',0),(2828,12241,'shuttle01',0),(2829,12242,'sick',0),(2830,12243,'side_smoke01',0),(2831,12244,'sig_bursting_snd',0),(2832,12245,'sig_rattler_snd',0),(2833,12246,'sigh',0),(2834,12247,'sit_combat',0),(2835,12248,'sit_idle01',0),(2836,12249,'sit_idle02',0),(2837,12250,'sit_off',0),(2838,12251,'sit_peace',0),(2839,12252,'sit_tail',0),(2840,12253,'sit_tail_cloak',0),(2841,12254,'sl_lute_lp_snd',0),(2842,12255,'slt_castfire_snd',0),(2843,12256,'slt_resultvortex_snd',0),(2844,12257,'slt_splode_snd',0),(2845,12258,'slugattack_01',0),(2846,12259,'slugdie_hit_01',0),(2847,12260,'slugdie_hit_02',0),(2848,12261,'slugdie_hit_03',0),(2849,12262,'slugpulse_01',0),(2850,12263,'slugpulse_02',0),(2851,12264,'slugpulse_03',0),(2852,12265,'slugpulse_04',0),(2853,12266,'slugpulser_01',0),(2854,12267,'slugrun_01',0),(2855,12268,'slugrun_02',0),(2856,12269,'slugrunpulse_01',0),(2857,12270,'slugrunpulse_02',0),(2858,12271,'slugsplat_01',0),(2859,12272,'slugsplat_02',0),(2860,12273,'slugsway_01',0),(2861,12274,'slugsway_02',0),(2862,12275,'slugtongue',0),(2863,12276,'slugtongueimpact_01',0),(2864,12277,'slugwalk_01',0),(2865,12278,'slugwalk_02',0),(2866,12279,'slugwalkpulse_01',0),(2867,12280,'slugwalkpulse_02',0),(2868,12281,'slugyell_01',0),(2869,12282,'small_saw',0),(2870,12283,'smash',0),(2871,12284,'smashed',0),(2872,12285,'smile',0),(2873,12286,'smirk',0),(2874,12287,'smite_cast_lp_snd',0),(2875,12288,'smoke',0),(2876,12289,'smoke_breath',0),(2877,12290,'smoke_dark_chimney',0),(2878,12291,'smoke_dark_coals',0),(2879,12292,'smoke_dark_ground',0),(2880,12293,'smoke_dark_up',0),(2881,12294,'smoke_flash',0),(2882,12295,'smoke_ring',0),(2883,12296,'smoke_sparks',0),(2884,12297,'snd_boom',0),(2885,12298,'snd_confrontfear_fade',0),(2886,12299,'snd_confrontfear_skull',0),(2887,12300,'snd_fall_damage',0),(2888,12301,'snd_fire_whoosh',0),(2889,12302,'snd_fireworks_boom',0),(2890,12303,'snd_frontload_acid',0),(2891,12304,'snd_keg_appear',0),(2892,12305,'snd_keg_gulp',0),(2893,12306,'snd_keg_pour',0),(2894,12307,'snd_keg_whoosh',0),(2895,12308,'snd_keg_yum',0),(2896,12309,'snd_lifeburn_castabsorb',0),(2897,12310,'snd_lifeburn_castbase',0),(2898,12311,'snd_lifeburn_resultblast',0),(2899,12312,'snd_mayong_boen_blanket',0),(2900,12313,'snd_mayong_boen_result',0),(2901,12314,'snd_pumpkin_flaming',0),(2902,12315,'snd_slide_cast',0),(2903,12316,'snd_slide_result',0),(2904,12317,'snd_snowball_impact',0),(2905,12318,'snd_spirit_elephant_vocal',0),(2906,12319,'snd_teleport_druidring_flash',0),(2907,12320,'snd_teleport_druidring_loop',0),(2908,12321,'snd_wuoshi_choking_vines',0),(2909,12322,'snd_wuoshi_tree_enter',0),(2910,12323,'snd_wuoshi_tree_exit',0),(2911,12324,'snd_wuoshi_tree_loop',0),(2912,12325,'sneer',0),(2913,12326,'sneeze',0),(2914,12327,'sneeze_smoke',0),(2915,12328,'snicker',0),(2916,12329,'sniff',0),(2917,12330,'snort',0),(2918,12331,'soaf_burn_sound',0),(2919,12332,'soaf_castcharge02_sound',0),(2920,12333,'soaf_castcharge_sound',0),(2921,12334,'soaf_flamearrow_sound',0),(2922,12335,'soc_clayskinfall_lp_sound',0),(2923,12336,'soc_clayskinform_sound',0),(2924,12337,'sod_flameup_sound',0),(2925,12338,'sod_whoosh01_sound',0),(2926,12339,'som_cast_lp_snd',0),(2927,12340,'sotb_batsqueak2_sound',0),(2928,12341,'sotb_batsqueak_sound',0),(2929,12342,'sound_angry',0),(2930,12343,'sound_angry01',0),(2931,12344,'sound_angry02',0),(2932,12345,'sound_anvilhit',0),(2933,12346,'sound_aoeflame',0),(2934,12347,'sound_artifact_bury',0),(2935,12348,'sound_artifact_emerge',0),(2936,12349,'sound_atkhit',0),(2937,12350,'sound_atkland',0),(2938,12351,'sound_atkslide',0),(2939,12352,'sound_atkvocal',0),(2940,12353,'sound_attachwhirl',0),(2941,12354,'sound_attack',0),(2942,12355,'sound_attack01',0),(2943,12356,'sound_attack02',0),(2944,12357,'sound_attack1_vocal',0),(2945,12358,'sound_attack2_vocal',0),(2946,12359,'sound_attack2rock',0),(2947,12360,'sound_attack2slam',0),(2948,12361,'sound_attack_hit',0),(2949,12362,'sound_attacka',0),(2950,12363,'sound_attackarm',0),(2951,12364,'sound_attackb',0),(2952,12365,'sound_attackback',0),(2953,12366,'sound_attackbase',0),(2954,12367,'sound_attackbend',0),(2955,12368,'sound_attackbite',0),(2956,12369,'sound_attackbitein',0),(2957,12370,'sound_attackbiterip',0),(2958,12371,'sound_attackblade',0),(2959,12372,'sound_attackbreath',0),(2960,12373,'sound_attackbreath01',0),(2961,12374,'sound_attackbreath02',0),(2962,12375,'sound_attackbreath02_inhale',0),(2963,12376,'sound_attackbreath1',0),(2964,12377,'sound_attackbreath2',0),(2965,12378,'sound_attackbreath_long',0),(2966,12379,'sound_attackbreath_short',0),(2967,12380,'sound_attackbreathe',0),(2968,12381,'sound_attackbreathefire',0),(2969,12382,'sound_attackbreathfire',0),(2970,12383,'sound_attackbreathfire_long',0),(2971,12384,'sound_attackbreathfire_short',0),(2972,12385,'sound_attackcast',0),(2973,12386,'sound_attackchain',0),(2974,12387,'sound_attackchime',0),(2975,12388,'sound_attackchomp',0),(2976,12389,'sound_attackclaw',0),(2977,12390,'sound_attackclaw_vocal',0),(2978,12391,'sound_attackcreak',0),(2979,12392,'sound_attackcrunch01',0),(2980,12393,'sound_attackcrunch02',0),(2981,12394,'sound_attacke3_vocal',0),(2982,12395,'sound_attackfire',0),(2983,12396,'sound_attackfistwater',0),(2984,12397,'sound_attackflame',0),(2985,12398,'sound_attackflap',0),(2986,12399,'sound_attackflutter',0),(2987,12400,'sound_attackfoot',0),(2988,12401,'sound_attackgear',0),(2989,12402,'sound_attackgrowl',0),(2990,12403,'sound_attackheadram_swoosh',0),(2991,12404,'sound_attackhit',0),(2992,12405,'sound_attackinhale',0),(2993,12406,'sound_attackjaw',0),(2994,12407,'sound_attackkick',0),(2995,12408,'sound_attackleaves',0),(2996,12409,'sound_attackliddown',0),(2997,12410,'sound_attacklidup',0),(2998,12411,'sound_attacklong',0),(2999,12412,'sound_attackmetal',0),(3000,12413,'sound_attackpage',0),(3001,12414,'sound_attackram',0),(3002,12415,'sound_attackrock',0),(3003,12416,'sound_attackrockinhale',0),(3004,12417,'sound_attackrun',0),(3005,12418,'sound_attacksaw',0),(3006,12419,'sound_attacksbreathin',0),(3007,12420,'sound_attackscream',0),(3008,12421,'sound_attackshort',0),(3009,12422,'sound_attackslam',0),(3010,12423,'sound_attacksnap',0),(3011,12424,'sound_attacksnort',0),(3012,12425,'sound_attackspecial',0),(3013,12426,'sound_attacksquish',0),(3014,12427,'sound_attackstab',0),(3015,12428,'sound_attacksting',0),(3016,12429,'sound_attackstomp',0),(3017,12430,'sound_attackswing',0),(3018,12431,'sound_attackswoosh',0),(3019,12432,'sound_attackswordwater01',0),(3020,12433,'sound_attackswordwater02',0),(3021,12434,'sound_attacktail',0),(3022,12435,'sound_attacktailvocal',0),(3023,12436,'sound_attacktailwhip',0),(3024,12437,'sound_attacktongue',0),(3025,12438,'sound_attackvocal',0),(3026,12439,'sound_attackvocal01',0),(3027,12440,'sound_attackvocal02',0),(3028,12441,'sound_attackvocal2',0),(3029,12442,'sound_attackvocal_long',0),(3030,12443,'sound_attackwater',0),(3031,12444,'sound_attackwhip',0),(3032,12445,'sound_attackwhirl',0),(3033,12446,'sound_attackwhirlblade',0),(3034,12447,'sound_attackwhoosh',0),(3035,12448,'sound_attackwild',0),(3036,12449,'sound_attackwind',0),(3037,12450,'sound_attackwindflap',0),(3038,12451,'sound_attackwindup',0),(3039,12452,'sound_attackwing',0),(3040,12453,'sound_attackwing_land',0),(3041,12454,'sound_attackwingbreath',0),(3042,12455,'sound_attackwingflap',0),(3043,12456,'sound_attackyell',0),(3044,12457,'sound_battlecry',0),(3045,12458,'sound_battlecry01',0),(3046,12459,'sound_beg',0),(3047,12460,'sound_bell',0),(3048,12461,'sound_bite',0),(3049,12462,'sound_bite_rip',0),(3050,12463,'sound_bitetear',0),(3051,12464,'sound_bitevocal',0),(3052,12465,'sound_blech',0),(3053,12466,'sound_blink',0),(3054,12467,'sound_boggle',0),(3055,12468,'sound_boltdamage',0),(3056,12469,'sound_bonehit',0),(3057,12470,'sound_boom',0),(3058,12471,'sound_bowpull',0),(3059,12472,'sound_bowrelease',0),(3060,12473,'sound_breath',0),(3061,12474,'sound_breath_a',0),(3062,12475,'sound_breath_b',0),(3063,12476,'sound_breathfire',0),(3064,12477,'sound_breathinhale',0),(3065,12478,'sound_breathvocal',0),(3066,12479,'sound_bridge',0),(3067,12480,'sound_buff',0),(3068,12481,'sound_buffdefensive',0),(3069,12482,'sound_buffinhale',0),(3070,12483,'sound_buffoffensive',0),(3071,12484,'sound_buffspin001',0),(3072,12485,'sound_burp',0),(3073,12486,'sound_casgrowl',0),(3074,12487,'sound_cast',0),(3075,12488,'sound_cast_shortbreath_open',0),(3076,12489,'sound_castend',0),(3077,12490,'sound_castgears',0),(3078,12491,'sound_castgrowl',0),(3079,12492,'sound_casthowl',0),(3080,12493,'sound_castinhalegears',0),(3081,12494,'sound_castlong_breath',0),(3082,12495,'sound_castlong_inhale',0),(3083,12496,'sound_castlong_open',0),(3084,12497,'sound_castroar',0),(3085,12498,'sound_castshort_breath',0),(3086,12499,'sound_caststart',0),(3087,12500,'sound_castvocal',0),(3088,12501,'sound_chesthit',0),(3089,12502,'sound_chesthitdouble',0),(3090,12503,'sound_chew',0),(3091,12504,'sound_clap',0),(3092,12505,'sound_claw',0),(3093,12506,'sound_clawhit',0),(3094,12507,'sound_clawwalk',0),(3095,12508,'sound_clop',0),(3096,12509,'sound_clop_left',0),(3097,12510,'sound_clop_right',0),(3098,12511,'sound_combatart',0),(3099,12512,'sound_combatbreath',0),(3100,12513,'sound_combatbreathe',0),(3101,12514,'sound_combatchew',0),(3102,12515,'sound_combatcrunch',0),(3103,12516,'sound_combatenter',0),(3104,12517,'sound_combatenter001',0),(3105,12518,'sound_combatenter002',0),(3106,12519,'sound_combatentergrowl',0),(3107,12520,'sound_combatenterrock01',0),(3108,12521,'sound_combatenterrock02',0),(3109,12522,'sound_combatenterrock03',0),(3110,12523,'sound_combatentervocal01',0),(3111,12524,'sound_combatentervocal02',0),(3112,12525,'sound_combatenterwing',0),(3113,12526,'sound_combatenterwingfire',0),(3114,12527,'sound_combatexit',0),(3115,12528,'sound_combatflap',0),(3116,12529,'sound_combatflapup',0),(3117,12530,'sound_combatgrowl',0),(3118,12531,'sound_combatidle',0),(3119,12532,'sound_combatpage',0),(3120,12533,'sound_combatpaw',0),(3121,12534,'sound_combatsnort',0),(3122,12535,'sound_combatwing',0),(3123,12536,'sound_creak',0),(3124,12537,'sound_crunch',0),(3125,12538,'sound_curl',0),(3126,12539,'sound_cutthroat',0),(3127,12540,'sound_damage',0),(3128,12541,'sound_damage02',0),(3129,12542,'sound_damage03',0),(3130,12543,'sound_damageblade',0),(3131,12544,'sound_damagebolts',0),(3132,12545,'sound_damagebone',0),(3133,12546,'sound_damagecrunch',0),(3134,12547,'sound_damageflutter',0),(3135,12548,'sound_damagehit',0),(3136,12549,'sound_damagerock',0),(3137,12550,'sound_damageshell',0),(3138,12551,'sound_damagetwang',0),(3139,12552,'sound_damagevocal',0),(3140,12553,'sound_dead',0),(3141,12554,'sound_dead01',0),(3142,12555,'sound_dead02',0),(3143,12556,'sound_dead03',0),(3144,12557,'sound_dead_enter',0),(3145,12558,'sound_deadball',0),(3146,12559,'sound_deadballfall',0),(3147,12560,'sound_deadbell',0),(3148,12561,'sound_deadblade',0),(3149,12562,'sound_deadboom',0),(3150,12563,'sound_deadbreathe',0),(3151,12564,'sound_deadbubble',0),(3152,12565,'sound_deadbuzz01',0),(3153,12566,'sound_deadbuzz02',0),(3154,12567,'sound_deadbuzz03',0),(3155,12568,'sound_deadbuzz04',0),(3156,12569,'sound_deadclose',0),(3157,12570,'sound_deadcreak',0),(3158,12571,'sound_deadcrunch',0),(3159,12572,'sound_deadcrunch01',0),(3160,12573,'sound_deadcrunch02',0),(3161,12574,'sound_deadcrunch1',0),(3162,12575,'sound_deadcrunch2',0),(3163,12576,'sound_deadcry',0),(3164,12577,'sound_deadcurl',0),(3165,12578,'sound_deadfall',0),(3166,12579,'sound_deadfall001',0),(3167,12580,'sound_deadfall002',0),(3168,12581,'sound_deadfall01',0),(3169,12582,'sound_deadfall02',0),(3170,12583,'sound_deadfall03',0),(3171,12584,'sound_deadfall1',0),(3172,12585,'sound_deadfall2',0),(3173,12586,'sound_deadfire',0),(3174,12587,'sound_deadflame',0),(3175,12588,'sound_deadflap',0),(3176,12589,'sound_deadgear',0),(3177,12590,'sound_deadglob',0),(3178,12591,'sound_deadglub',0),(3179,12592,'sound_deadgroan',0),(3180,12593,'sound_deadgrowl',0),(3181,12594,'sound_deadhead',0),(3182,12595,'sound_deadhit',0),(3183,12596,'sound_deadhit1',0),(3184,12597,'sound_deadhit2',0),(3185,12598,'sound_deadhit3',0),(3186,12599,'sound_deadknee',0),(3187,12600,'sound_deadliddown',0),(3188,12601,'sound_deadlidup',0),(3189,12602,'sound_deadmist',0),(3190,12603,'sound_deadmotor',0),(3191,12604,'sound_deadpage',0),(3192,12605,'sound_deadprevocal',0),(3193,12606,'sound_deadrock',0),(3194,12607,'sound_deadrockfall',0),(3195,12608,'sound_deadscratch',0),(3196,12609,'sound_deadscream',0),(3197,12610,'sound_deadscream01',0),(3198,12611,'sound_deadscream02',0),(3199,12612,'sound_deadslam',0),(3200,12613,'sound_deadslither',0),(3201,12614,'sound_deadsquish',0),(3202,12615,'sound_deadsway',0),(3203,12616,'sound_deadtail',0),(3204,12617,'sound_deadthrash01',0),(3205,12618,'sound_deadthrash02',0),(3206,12619,'sound_deadtongue',0),(3207,12620,'sound_deadvanish',0),(3208,12621,'sound_deadvocal',0),(3209,12622,'sound_deadvocal01',0),(3210,12623,'sound_deadvocal02',0),(3211,12624,'sound_deadvocal03',0),(3212,12625,'sound_deadwarble01',0),(3213,12626,'sound_deadwarble02',0),(3214,12627,'sound_deadwater',0),(3215,12628,'sound_deadwater01',0),(3216,12629,'sound_deadwater02',0),(3217,12630,'sound_deadwater03',0),(3218,12631,'sound_deadwhimper',0),(3219,12632,'sound_deadwhoosh',0),(3220,12633,'sound_deadwing',0),(3221,12634,'sound_deadwingfold',0),(3222,12635,'sound_deadwoosh',0),(3223,12636,'sound_death',0),(3224,12637,'sound_death001',0),(3225,12638,'sound_death002',0),(3226,12639,'sound_deathbone',0),(3227,12640,'sound_deathbreak',0),(3228,12641,'sound_deathclaw',0),(3229,12642,'sound_deathcrash',0),(3230,12643,'sound_deathengine',0),(3231,12644,'sound_deathfall',0),(3232,12645,'sound_deathmotor',0),(3233,12646,'sound_deathshake',0),(3234,12647,'sound_deathsigh',0),(3235,12648,'sound_deathtail',0),(3236,12649,'sound_deathvocal',0),(3237,12650,'sound_deathwhoosh',0),(3238,12651,'sound_design_lavabridge',0),(3239,12652,'sound_die',0),(3240,12653,'sound_dig001',0),(3241,12654,'sound_dig002',0),(3242,12655,'sound_duck',0),(3243,12656,'sound_eat',0),(3244,12657,'sound_eating',0),(3245,12658,'sound_eatslime',0),(3246,12659,'sound_entercreak',0),(3247,12660,'sound_enterglide',0),(3248,12661,'sound_enterleaves',0),(3249,12662,'sound_entermoan',0),(3250,12663,'sound_enteropen',0),(3251,12664,'sound_enterscrape',0),(3252,12665,'sound_entervocal',0),(3253,12666,'sound_exhale',0),(3254,12667,'sound_exitflap',0),(3255,12668,'sound_exitidle',0),(3256,12669,'sound_exitjump',0),(3257,12670,'sound_exitscream',0),(3258,12671,'sound_explode',0),(3259,12672,'sound_extinguish',0),(3260,12673,'sound_fall',0),(3261,12674,'sound_fall01',0),(3262,12675,'sound_fall02',0),(3263,12676,'sound_fallmetal',0),(3264,12677,'sound_filler',0),(3265,12678,'sound_fire',0),(3266,12679,'sound_fireswoosh',0),(3267,12680,'sound_fishing_cast01',0),(3268,12681,'sound_fishing_cast02',0),(3269,12682,'sound_fishing_cast03',0),(3270,12683,'sound_flame',0),(3271,12684,'sound_flamethrower',0),(3272,12685,'sound_flap',0),(3273,12686,'sound_flapup',0),(3274,12687,'sound_fleeflutter',0),(3275,12688,'sound_fluter',0),(3276,12689,'sound_fly_bite_rip',0),(3277,12690,'sound_foot',0),(3278,12691,'sound_footlayerleft',0),(3279,12692,'sound_footlayerright',0),(3280,12693,'sound_footstep',0),(3281,12694,'sound_footstomp',0),(3282,12695,'sound_foresting',0),(3283,12696,'sound_fuse',0),(3284,12697,'sound_gathering',0),(3285,12698,'sound_getup',0),(3286,12699,'sound_glide',0),(3287,12700,'sound_glide02',0),(3288,12701,'sound_growl',0),(3289,12702,'sound_gulp01',0),(3290,12703,'sound_gulp02',0),(3291,12704,'sound_hammerhit',0),(3292,12705,'sound_happy',0),(3293,12706,'sound_head',0),(3294,12707,'sound_headram_inhale',0),(3295,12708,'sound_headram_land',0),(3296,12709,'sound_headram_snort',0),(3297,12710,'sound_headram_swoosh',0),(3298,12711,'sound_headspark',0),(3299,12712,'sound_headturn',0),(3300,12713,'sound_heartattack',0),(3301,12714,'sound_hiss',0),(3302,12715,'sound_hit',0),(3303,12716,'sound_hoofleft',0),(3304,12717,'sound_hoofright',0),(3305,12718,'sound_hungry',0),(3306,12719,'sound_hungrycreak',0),(3307,12720,'sound_idle',0),(3308,12721,'sound_idle01',0),(3309,12722,'sound_idle02',0),(3310,12723,'sound_idle03_walk001',0),(3311,12724,'sound_idle03_walk002',0),(3312,12725,'sound_idle04',0),(3313,12726,'sound_idlebreath',0),(3314,12727,'sound_idlebubble',0),(3315,12728,'sound_idlechew',0),(3316,12729,'sound_idlecreak',0),(3317,12730,'sound_idleflap',0),(3318,12731,'sound_idleflapup',0),(3319,12732,'sound_idleglass',0),(3320,12733,'sound_idlegrowl',0),(3321,12734,'sound_idlehiss',0),(3322,12735,'sound_idlelaugh',0),(3323,12736,'sound_idlemoo',0),(3324,12737,'sound_idlepant',0),(3325,12738,'sound_idleroar01',0),(3326,12739,'sound_idleroar02',0),(3327,12740,'sound_idlerock',0),(3328,12741,'sound_idlescuff',0),(3329,12742,'sound_idleshort',0),(3330,12743,'sound_idlesniff',0),(3331,12744,'sound_idlesnort',0),(3332,12745,'sound_idletail',0),(3333,12746,'sound_idlevocal',0),(3334,12747,'sound_idlevocal01',0),(3335,12748,'sound_idlevocal02',0),(3336,12749,'sound_idlewater',0),(3337,12750,'sound_inahle',0),(3338,12751,'sound_inhale',0),(3339,12752,'sound_inhale001',0),(3340,12753,'sound_inhale002',0),(3341,12754,'sound_jawsnap',0),(3342,12755,'sound_jump',0),(3343,12756,'sound_knockback',0),(3344,12757,'sound_knockdown',0),(3345,12758,'sound_land',0),(3346,12759,'sound_land01',0),(3347,12760,'sound_land02',0),(3348,12761,'sound_laughlong',0),(3349,12762,'sound_lense',0),(3350,12763,'sound_lense3s',0),(3351,12764,'sound_lickpur01',0),(3352,12765,'sound_liddown',0),(3353,12766,'sound_lidup',0),(3354,12767,'sound_lipsmack',0),(3355,12768,'sound_mining',0),(3356,12769,'sound_moon',0),(3357,12770,'sound_mounthorse_foot',0),(3358,12771,'sound_mounthorse_land',0),(3359,12772,'sound_mounthorse_squeak',0),(3360,12773,'sound_neener',0),(3361,12774,'sound_offensive',0),(3362,12775,'sound_offensive001',0),(3363,12776,'sound_offensiveelec001',0),(3364,12777,'sound_open',0),(3365,12778,'sound_ouch',0),(3366,12779,'sound_ouchbase',0),(3367,12780,'sound_ouchbell',0),(3368,12781,'sound_ouchbend',0),(3369,12782,'sound_ouchbone',0),(3370,12783,'sound_ouchbubble',0),(3371,12784,'sound_ouchbuzz',0),(3372,12785,'sound_ouchchain',0),(3373,12786,'sound_ouchcreak',0),(3374,12787,'sound_ouchcrunch',0),(3375,12788,'sound_ouchfire',0),(3376,12789,'sound_ouchflame',0),(3377,12790,'sound_ouchflap',0),(3378,12791,'sound_ouchflutter',0),(3379,12792,'sound_ouchhit',0),(3380,12793,'sound_ouchliddown',0),(3381,12794,'sound_ouchlidopen',0),(3382,12795,'sound_ouchlidup',0),(3383,12796,'sound_ouchlow',0),(3384,12797,'sound_ouchpage',0),(3385,12798,'sound_ouchrock',0),(3386,12799,'sound_ouchrun',0),(3387,12800,'sound_ouchscream',0),(3388,12801,'sound_ouchshell',0),(3389,12802,'sound_ouchslam',0),(3390,12803,'sound_ouchsnort',0),(3391,12804,'sound_ouchsquawk',0),(3392,12805,'sound_ouchtail',0),(3393,12806,'sound_ouchvocal',0),(3394,12807,'sound_ouchwarble',0),(3395,12808,'sound_ouchwater',0),(3396,12809,'sound_ouchwhoosh',0),(3397,12810,'sound_ouchwing',0),(3398,12811,'sound_pain001',0),(3399,12812,'sound_pain002',0),(3400,12813,'sound_paw',0),(3401,12814,'sound_pen01',0),(3402,12815,'sound_pen02',0),(3403,12816,'sound_piercer',0),(3404,12817,'sound_purr',0),(3405,12818,'sound_purr02',0),(3406,12819,'sound_purr03',0),(3407,12820,'sound_raisehand',0),(3408,12821,'sound_rechargeresult',0),(3409,12822,'sound_recharging',0),(3410,12823,'sound_roar',0),(3411,12824,'sound_rockroll',0),(3412,12825,'sound_rofl',0),(3413,12826,'sound_rude',0),(3414,12827,'sound_run',0),(3415,12828,'sound_runcreak',0),(3416,12829,'sound_runflap',0),(3417,12830,'sound_runflap01',0),(3418,12831,'sound_runflap02',0),(3419,12832,'sound_runflapsmall',0),(3420,12833,'sound_runhit',0),(3421,12834,'sound_runland',0),(3422,12835,'sound_runleft',0),(3423,12836,'sound_runright',0),(3424,12837,'sound_runwing',0),(3425,12838,'sound_sad01',0),(3426,12839,'sound_sad02',0),(3427,12840,'sound_saw001',0),(3428,12841,'sound_saw002',0),(3429,12842,'sound_scratch',0),(3430,12843,'sound_scream',0),(3431,12844,'sound_scream01',0),(3432,12845,'sound_scream02',0),(3433,12846,'sound_shake',0),(3434,12847,'sound_sheathe',0),(3435,12848,'sound_sit',0),(3436,12849,'sound_sitenter',0),(3437,12850,'sound_sitexit',0),(3438,12851,'sound_sitidle',0),(3439,12852,'sound_sleep',0),(3440,12853,'sound_sleep001',0),(3441,12854,'sound_sleep002',0),(3442,12855,'sound_slither',0),(3443,12856,'sound_snap',0),(3444,12857,'sound_snarl',0),(3445,12858,'sound_sneer',0),(3446,12859,'sound_sneeze',0),(3447,12860,'sound_sneezeinhale',0),(3448,12861,'sound_snort',0),(3449,12862,'sound_spellvocal',0),(3450,12863,'sound_splash',0),(3451,12864,'sound_stand',0),(3452,12865,'sound_step',0),(3453,12866,'sound_stomp',0),(3454,12867,'sound_stompgrowl',0),(3455,12868,'sound_stompvocal',0),(3456,12869,'sound_stunfall',0),(3457,12870,'sound_stunned',0),(3458,12871,'sound_stunnedfall',0),(3459,12872,'sound_stunnedreturn',0),(3460,12873,'sound_stunnedwhirl',0),(3461,12874,'sound_stunshake',0),(3462,12875,'sound_stunsnort',0),(3463,12876,'sound_stunspin',0),(3464,12877,'sound_summon',0),(3465,12878,'sound_summonhit',0),(3466,12879,'sound_summonrock',0),(3467,12880,'sound_summonrock01',0),(3468,12881,'sound_summonrock02',0),(3469,12882,'sound_summonrockback',0),(3470,12883,'sound_summonslide',0),(3471,12884,'sound_summonstart',0),(3472,12885,'sound_summonvocal',0),(3473,12886,'sound_superbuff',0),(3474,12887,'sound_swim',0),(3475,12888,'sound_swimfast',0),(3476,12889,'sound_swoosh',0),(3477,12890,'sound_swooshkick',0),(3478,12891,'sound_swooshleft',0),(3479,12892,'sound_swooshright',0),(3480,12893,'sound_swooshtail',0),(3481,12894,'sound_taillash001',0),(3482,12895,'sound_taillash002',0),(3483,12896,'sound_tailswoosh',0),(3484,12897,'sound_tailvocal',0),(3485,12898,'sound_tailwhip',0),(3486,12899,'sound_taunt01',0),(3487,12900,'sound_taunt02',0),(3488,12901,'sound_taunt03',0),(3489,12902,'sound_thunder',0),(3490,12903,'sound_trick',0),(3491,12904,'sound_uncoil',0),(3492,12905,'sound_unsheathe',0),(3493,12906,'sound_vocalattack',0),(3494,12907,'sound_vocalbite',0),(3495,12908,'sound_vocalbuffet',0),(3496,12909,'sound_vocaldamage',0),(3497,12910,'sound_vocaldead',0),(3498,12911,'sound_vocaldeath',0),(3499,12912,'sound_vocalouch',0),(3500,12913,'sound_walk',0),(3501,12914,'sound_walk001',0),(3502,12915,'sound_walk002',0),(3503,12916,'sound_walk01',0),(3504,12917,'sound_walk02',0),(3505,12918,'sound_walk1',0),(3506,12919,'sound_walkbubble',0),(3507,12920,'sound_walkclaw',0),(3508,12921,'sound_walkflap',0),(3509,12922,'sound_walkflap01',0),(3510,12923,'sound_walkleft',0),(3511,12924,'sound_walkpiercer',0),(3512,12925,'sound_walkright',0),(3513,12926,'sound_walkrock',0),(3514,12927,'sound_walkservo',0),(3515,12928,'sound_walkservoleft',0),(3516,12929,'sound_walkservoright',0),(3517,12930,'sound_water',0),(3518,12931,'sound_waterstep',0),(3519,12932,'sound_whirl',0),(3520,12933,'sound_whirlmotor',0),(3521,12934,'sound_whirlwhoosh',0),(3522,12935,'sound_wildspring',0),(3523,12936,'sound_wildswing',0),(3524,12937,'sound_wildswinghit001',0),(3525,12938,'sound_wildswinghit002',0),(3526,12939,'sound_wing',0),(3527,12940,'sound_wingbuffet',0),(3528,12941,'sound_wingflap',0),(3529,12942,'sound_wingfold',0),(3530,12943,'sound_wingmove',0),(3531,12944,'sound_wingopen',0),(3532,12945,'sound_wings',0),(3533,12946,'sound_wingwind',0),(3534,12947,'sound_yawn001',0),(3535,12948,'sound_zap',0),(3536,12949,'spark_circle01',0),(3537,12950,'spark_circle02',0),(3538,12951,'spark_circle03',0),(3539,12952,'spark_circle04',0),(3540,12953,'spark_circle05',0),(3541,12954,'spark_sphere01',0),(3542,12955,'spark_sphere_ws',0),(3543,12956,'spark_sphere_ws_lefthand',0),(3544,12957,'sparkle01',0),(3545,12958,'sparkle02',0),(3546,12959,'sparkle03',0),(3547,12960,'sparkle_trail',0),(3548,12961,'sparks',0),(3549,12962,'sparks_lf',0),(3550,12963,'sparks_lr',0),(3551,12964,'sparks_rf',0),(3552,12965,'sparks_rr',0),(3553,12966,'speaknoevil',0),(3554,12967,'spellcast01',0),(3555,12968,'spellcast02',0),(3556,12969,'spider_webbshoot_snd',0),(3557,12970,'spider_webcover_snd',0),(3558,12971,'spinningwheel01',0),(3559,12972,'spinningwheel02',0),(3560,12973,'spinningwheel04',0),(3561,12974,'spinningwheel_success',0),(3562,12975,'spinningwheel_success02',0),(3563,12976,'spinningwheel_success03',0),(3564,12977,'spiritascend_snd',0),(3565,12978,'square',0),(3566,12979,'squeal',0),(3567,12980,'ss_singing_lp_snd',0),(3568,12981,'st_casttap_snd',0),(3569,12982,'st_tappestry_snd',0),(3570,12983,'stare',0),(3571,12984,'start',0),(3572,12985,'start_drone_sound',0),(3573,12986,'startburst_sound_01',0),(3574,12987,'steam01',0),(3575,12988,'steam_forearm_l',0),(3576,12989,'steam_forearm_r',0),(3577,12990,'steam_hip_l',0),(3578,12991,'steam_hip_l_death',0),(3579,12992,'steam_hip_r',0),(3580,12993,'steam_hip_r_death',0),(3581,12994,'steam_upperarm_l',0),(3582,12995,'steam_upperarm_r',0),(3583,12996,'stifle_cast_arm_snd',0),(3584,12997,'stifle_cast_lp_snd',0),(3585,12998,'stifle_result_snd',0),(3586,12999,'still',0),(3587,13000,'stinky',0),(3588,13001,'stove_boilover01',0),(3589,13002,'stove_boilover02',0),(3590,13003,'stove_boilover03',0),(3591,13004,'strafe_left',0),(3592,13005,'strafe_left_run',0),(3593,13006,'strafe_right',0),(3594,13007,'strafe_right_run',0),(3595,13008,'stretch',0),(3596,13009,'string_knotted',0),(3597,13010,'success01',0),(3598,13011,'success02',0),(3599,13012,'success_flash01',0),(3600,13013,'success_flash02',0),(3601,13014,'success_flash03',0),(3602,13015,'sulk',0),(3603,13016,'summon',0),(3604,13017,'summon_idle',0),(3605,13018,'super_buff',0),(3606,13019,'swear',0),(3607,13020,'sweep01',0),(3608,13021,'swim_attack',0),(3609,13022,'swim_backup',0),(3610,13023,'swim_foward',0),(3611,13024,'swim_idle',0),(3612,13025,'swim_ouch',0),(3613,13026,'swim_run',0),(3614,13027,'swim_tail',0),(3615,13028,'swim_tail_cloak',0),(3616,13029,'swim_walk',0),(3617,13030,'swoosh',0),(3618,13031,'swoosh_light_low',0),(3619,13032,'swoosh_medium',0),(3620,13033,'swwosh',0),(3621,13034,'ta_cast_snd',0),(3622,13035,'tail',0),(3623,13036,'tail_cloak',0),(3624,13037,'tail_dust',0),(3625,13038,'tailoring_failure',0),(3626,13039,'tailoring_idle',0),(3627,13040,'tailoring_success',0),(3628,13041,'talk_idle',0),(3629,13042,'talk_idle01',0),(3630,13043,'talk_idle02',0),(3631,13044,'talk_idle03',0),(3632,13045,'talk_idle04',0),(3633,13046,'talk_idle05',0),(3634,13047,'talk_idle06',0),(3635,13048,'talk_idle07',0),(3636,13049,'talk_idle08',0),(3637,13050,'talk_idle09',0),(3638,13051,'talk_idle10',0),(3639,13052,'talk_idle11',0),(3640,13053,'talk_idle12',0),(3641,13054,'tantrum',0),(3642,13055,'tantrum_short',0),(3643,13056,'tapfoot',0),(3644,13057,'taunt',0),(3645,13058,'taunt_combat_art',0),(3646,13059,'tc_teleport_snd',0),(3647,13060,'thaiko_sound',0),(3648,13061,'thanks',0),(3649,13062,'thirsty',0),(3650,13063,'threaten',0),(3651,13064,'thumbsup',0),(3652,13065,'thunder_clap',0),(3653,13066,'tiger_idle',0),(3654,13067,'tiger_run',0),(3655,13068,'tiger_walk',0),(3656,13069,'tod_explode_snd',0),(3657,13070,'tod_voltz_snd',0),(3658,13071,'tr_spawn_snd',0),(3659,13072,'tradeart_beaker01',0),(3660,13073,'tradeart_butcherknife01',0),(3661,13074,'tradeart_celticknot01',0),(3662,13075,'tradeart_flask01',0),(3663,13076,'tradeart_forge_hammer01',0),(3664,13077,'tradeart_forge_hammer02',0),(3665,13078,'tradeart_forge_helmet01',0),(3666,13079,'tradeart_fork01',0),(3667,13080,'tradeart_kitchenknife01',0),(3668,13081,'tradeart_log_cut',0),(3669,13082,'tradeart_metal_bar',0),(3670,13083,'tradeart_metal_rod01',0),(3671,13084,'tradeart_metal_sparkling2',0),(3672,13085,'tradeart_molecule01',0),(3673,13086,'tradeart_needle_left01',0),(3674,13087,'tradeart_needle_right01',0),(3675,13088,'tradeart_planer',0),(3676,13089,'tradeart_rune_01',0),(3677,13090,'tradeart_rune_02',0),(3678,13091,'tradeart_rune_03',0),(3679,13092,'tradeart_rune_04',0),(3680,13093,'tradeart_rune_05',0),(3681,13094,'tradeart_rune_06',0),(3682,13095,'tradeart_rune_07',0),(3683,13096,'tradeart_rune_08',0),(3684,13097,'tradeart_saw',0),(3685,13098,'tradeart_spoon01',0),(3686,13099,'trail_pike',0),(3687,13100,'transit',0),(3688,13101,'trdskl_beaker',0),(3689,13102,'trdskl_cloth',0),(3690,13103,'trdskl_feather',0),(3691,13104,'trdskl_fishingpole',0),(3692,13105,'trdskl_gem',0),(3693,13106,'trdskl_hammer',0),(3694,13107,'trdskl_hatchet',0),(3695,13108,'trdskl_hatchet_l',0),(3696,13109,'trdskl_leather',0),(3697,13110,'trdskl_magnifying',0),(3698,13111,'trdskl_mug',0),(3699,13112,'trdskl_needle',0),(3700,13113,'trdskl_pick',0),(3701,13114,'trdskl_pot',0),(3702,13115,'trdskl_saw',0),(3703,13116,'trdskl_scroll',0),(3704,13117,'trdskl_spoon',0),(3705,13118,'trdskl_testtube',0),(3706,13119,'trdskl_tongs',0),(3707,13120,'trdskl_vial',0),(3708,13121,'trdskl_wood',0),(3709,13122,'trem_boulder_snd',0),(3710,13123,'trem_cast_lp_snd',0),(3711,13124,'trem_open_snd',0),(3712,13125,'trem_rings_snd',0),(3713,13126,'trem_ringsh_snd',0),(3714,13127,'trem_rocks_lp_01_snd',0),(3715,13128,'trick',0),(3716,13129,'trt_treat_toxin_sound',0),(3717,13130,'turn_left',0),(3718,13131,'turn_right',0),(3719,13132,'turn_to_wood',0),(3720,13133,'u',0),(3721,13134,'unsummon',0),(3722,13135,'untrained_attack',0),(3723,13136,'untrained_backup',0),(3724,13137,'untrained_dodge',0),(3725,13138,'untrained_dodge01',0),(3726,13139,'untrained_dodge02',0),(3727,13140,'untrained_ouch',0),(3728,13141,'untrained_ouch01',0),(3729,13142,'untrained_parry',0),(3730,13143,'untrained_recoil',0),(3731,13144,'untrained_strafe_left',0),(3732,13145,'untrained_strafe_right',0),(3733,13146,'untrained_walk',0),(3734,13147,'util_rings_snd',0),(3735,13148,'vamp_batattack_sound',0),(3736,13149,'vamp_batflaps_sound',0),(3737,13150,'vamp_batsqueak_sound',0),(3738,13151,'ven_bkgrnd_slime_sound',0),(3739,13152,'ven_breath_01',0),(3740,13153,'ven_breath_02',0),(3741,13154,'ven_explode_sound',0),(3742,13155,'ven_fire_01',0),(3743,13156,'ven_fire_02',0),(3744,13157,'ven_pulse_sound',0),(3745,13158,'ven_rumble_01',0),(3746,13159,'ven_rumble_02',0),(3747,13160,'ven_slime_01',0),(3748,13161,'ven_slime_02',0),(3749,13162,'verdict_cast_snd',0),(3750,13163,'verdict_gavel_snd',0),(3751,13164,'vg_healing_snd',0),(3752,13165,'vg_leaves_snd',0),(3753,13166,'vg_leaveslp_snd',0),(3754,13167,'violin',0),(3755,13168,'viseme_a',0),(3756,13169,'viseme_aa',0),(3757,13170,'viseme_ae',0),(3758,13171,'viseme_ah',0),(3759,13172,'viseme_ao',0),(3760,13173,'viseme_aw',0),(3761,13174,'viseme_ay',0),(3762,13175,'viseme_b',0),(3763,13176,'viseme_c',0),(3764,13177,'viseme_ch',0),(3765,13178,'viseme_d',0),(3766,13179,'viseme_dh',0),(3767,13180,'viseme_e',0),(3768,13181,'viseme_eh',0),(3769,13182,'viseme_er',0),(3770,13183,'viseme_ey',0),(3771,13184,'viseme_f',0),(3772,13185,'viseme_g',0),(3773,13186,'viseme_h',0),(3774,13187,'viseme_ih',0),(3775,13188,'viseme_iy',0),(3776,13189,'viseme_j',0),(3777,13190,'viseme_k',0),(3778,13191,'viseme_l',0),(3779,13192,'viseme_m',0),(3780,13193,'viseme_n',0),(3781,13194,'viseme_ng',0),(3782,13195,'viseme_o',0),(3783,13196,'viseme_ow',0),(3784,13197,'viseme_oy',0),(3785,13198,'viseme_p',0),(3786,13199,'viseme_r',0),(3787,13200,'viseme_reast',0),(3788,13201,'viseme_rest',0),(3789,13202,'viseme_s',0),(3790,13203,'viseme_sh',0),(3791,13204,'viseme_t',0),(3792,13205,'viseme_th',0),(3793,13206,'viseme_u',0),(3794,13207,'viseme_uh',0),(3795,13208,'viseme_uw',0),(3796,13209,'viseme_v',0),(3797,13210,'viseme_w',0),(3798,13211,'viseme_x',0),(3799,13212,'viseme_y',0),(3800,13213,'viseme_z',0),(3801,13214,'viseme_zh',0),(3802,13215,'visemes_a',0),(3803,13216,'visemes_c',0),(3804,13217,'visemes_e',0),(3805,13218,'visemes_f',0),(3806,13219,'visemes_l',0),(3807,13220,'visemes_m',0),(3808,13221,'visemes_o',0),(3809,13222,'visemes_rest',0),(3810,13223,'visemes_u',0),(3811,13224,'visemes_w',0),(3812,13225,'vision_1',0),(3813,13226,'vision_2',0),(3814,13227,'vision_3',0),(3815,13228,'vision_4',0),(3816,13229,'vo_callout_afk',0),(3817,13230,'vo_callout_agree',0),(3818,13231,'vo_callout_apologies',0),(3819,13232,'vo_callout_assist',0),(3820,13233,'vo_callout_battle',0),(3821,13234,'vo_callout_cheer',0),(3822,13235,'vo_callout_confused',0),(3823,13236,'vo_callout_disagree',0),(3824,13237,'vo_callout_doh',0),(3825,13238,'vo_callout_flirt',0),(3826,13239,'vo_callout_follow',0),(3827,13240,'vo_callout_goodbye',0),(3828,13241,'vo_callout_got',0),(3829,13242,'vo_callout_greetings',0),(3830,13243,'vo_callout_growl',0),(3831,13244,'vo_callout_heal',0),(3832,13245,'vo_callout_help',0),(3833,13246,'vo_callout_helping',0),(3834,13247,'vo_callout_hungry',0),(3835,13248,'vo_callout_incoming',0),(3836,13249,'vo_callout_laugh',0),(3837,13250,'vo_callout_look',0),(3838,13251,'vo_callout_looking',0),(3839,13252,'vo_callout_out',0),(3840,13253,'vo_callout_run',0),(3841,13254,'vo_callout_starting',0),(3842,13255,'vo_callout_stay',0),(3843,13256,'vo_callout_taunting',0),(3844,13257,'vo_callout_thank',0),(3845,13258,'vo_callout_thirsty',0),(3846,13259,'vo_callout_threaten',0),(3847,13260,'vo_callout_train',0),(3848,13261,'vo_callout_under',0),(3849,13262,'vo_callout_vocal_attack',0),(3850,13263,'vo_callout_vocal_death',0),(3851,13264,'vo_callout_vocal_drown',0),(3852,13265,'vo_callout_vocal_jump',0),(3853,13266,'vo_callout_vocal_land',0),(3854,13267,'vo_callout_vocal_ouch',0),(3855,13268,'vo_callout_watch',0),(3856,13269,'vo_callout_yawn',0),(3857,13270,'vo_callout_yell',0),(3858,13271,'vocal_attack',0),(3859,13272,'vocal_attacklong',0),(3860,13273,'vocal_death',0),(3861,13274,'vocal_drown',0),(3862,13275,'vocal_jump',0),(3863,13276,'vocal_ouch',0),(3864,13277,'voidbeast_attack_snd',0),(3865,13278,'voidbeast_result_snd',0),(3866,13279,'vr2_burst_snd',0),(3867,13280,'vr2_flames_snd',0),(3868,13281,'w',0),(3869,13282,'wa_voltsword_sound',0),(3870,13283,'wa_voltswordstart_sound',0),(3871,13284,'walk',0),(3872,13286,'walk_shake',0),(3873,13287,'wave',0),(3874,13288,'welder_lefthand',0),(3875,13289,'welder_righthand',0),(3876,13290,'wheel',0),(3877,13291,'wheel1',0),(3878,13292,'wheel_smoke',0),(3879,13293,'whirling_attack',0),(3880,13294,'whistle',0),(3881,13295,'whome',0),(3882,13296,'wild_swing',0),(3883,13297,'wild_swing_recoilmax',0),(3884,13298,'wildswing',0),(3885,13299,'wince',0),(3886,13300,'wing_glide',0),(3887,13301,'wingflap',0),(3888,13302,'wings_01',0),(3889,13303,'wings_sound_01',0),(3890,13304,'wink',0),(3891,13305,'wkn_glowsplash_snd',0),(3892,13306,'wod_timer_tone_snd',0),(3893,13307,'woodworking_failure',0),(3894,13308,'woodworking_idle',0),(3895,13309,'woodworking_success',0),(3896,13310,'woowoo',0),(3897,13311,'wr_energy_glow_sound',0),(3898,13312,'wr_energy_glowout_sound',0),(3899,13313,'wr_glimmer_sound',0),(3900,13314,'wr_watershield_sound',0),(3901,13315,'ws_resounding_snd',0),(3902,13316,'ws_singout_snd',0),(3903,13317,'yeah',0),(3904,13318,'yell',0),(3905,13319,'zap',0),(3906,13322,'airborne',0),(3907,13329,'froglok_forestry_chopping',0),(3908,13331,'ogre_forestry_success',0),(3909,13332,'ogre_gathering_search',0),(3910,13333,'ogre_gathering_success',0),(3911,13334,'ogre_mining_success',0),(3912,13458,'attack_boss01',0),(3913,13459,'attack_boss02',0),(3914,13460,'buff_boss01',0),(3915,13467,'heal_boss01',0),(3916,13469,'result_fruitcake_explosion',0),(3917,13470,'result_snowball_big_explosion',0),(3918,13542,'sound_groundhit',0),(3919,13601,'froglok_1h_sword_attack_recoil',0),(3920,13602,'froglok_1h_sword_attack_recoil01',0),(3921,13603,'froglok_1h_sword_attack_recoil02',0),(3922,13604,'froglok_1h_sword_attack_recoil03',0),(3923,13605,'froglok_1h_thrown_attack',0),(3924,13606,'froglok_2h_sword_attack_recoil',0),(3925,13607,'froglok_2h_sword_attack_recoil01',0),(3926,13608,'froglok_2h_sword_attack_recoil02',0),(3927,13609,'froglok_2h_sword_backup',0),(3928,13610,'froglok_2h_sword_defensive_buff',0),(3929,13611,'froglok_2h_sword_enter',0),(3930,13612,'froglok_2h_sword_offensive_buff',0),(3931,13613,'froglok_2h_sword_ouch_backhand',0),(3932,13614,'froglok_2h_sword_ouch_down',0),(3933,13615,'froglok_2h_sword_ouch_forehand',0),(3934,13616,'froglok_2h_sword_ouch_thrust',0),(3935,13617,'froglok_2h_sword_parry_backhand',0),(3936,13618,'froglok_2h_sword_parry_down',0),(3937,13619,'froglok_2h_sword_parry_forehand',0),(3938,13620,'froglok_2h_sword_super_buff',0),(3939,13621,'froglok_2h_sword_walk',0),(3940,13622,'froglok_bostaff_attack_recoil',0),(3941,13623,'froglok_bostaff_attack_recoil01',0),(3942,13624,'froglok_bostaff_attack_recoil02',0),(3943,13625,'froglok_bostaff_attack_recoil03',0),(3944,13626,'froglok_bostaff_defensive_buff',0),(3945,13627,'froglok_bostaff_dodge_backhand',0),(3946,13628,'froglok_bostaff_dodge_down',0),(3947,13629,'froglok_bostaff_dodge_forehand',0),(3948,13630,'froglok_bostaff_dodge_thrust',0),(3949,13631,'froglok_bostaff_offensive_buff',0),(3950,13632,'froglok_bostaff_ouch_backhand',0),(3951,13633,'froglok_bostaff_ouch_down',0),(3952,13634,'froglok_bostaff_ouch_forehand',0),(3953,13635,'froglok_bostaff_ouch_thrust',0),(3954,13636,'froglok_bostaff_parry_backhand',0),(3955,13637,'froglok_bostaff_parry_down',0),(3956,13638,'froglok_bostaff_parry_forehand',0),(3957,13639,'froglok_bostaff_parry_thrust',0),(3958,13640,'froglok_bostaff_super_buff',0),(3959,13641,'froglok_dual_wield_attack_recoil',0),(3960,13642,'froglok_dual_wield_attack_recoil01',0),(3961,13643,'froglok_dual_wield_attack_recoil02',0),(3962,13644,'froglok_dual_wield_attack_recoil03',0),(3963,13645,'froglok_dual_wield_parry_backhand',0),(3964,13646,'froglok_dual_wield_parry_down',0),(3965,13647,'froglok_dual_wield_parry_forehand',0),(3966,13648,'froglok_dual_wield_parry_thrust',0),(3967,13649,'froglok_monk_attack_recoil',0),(3968,13650,'froglok_monk_attack_recoil02',0),(3969,13651,'froglok_monk_charge_up',0),(3970,13652,'froglok_monk_defensive_buff',0),(3971,13653,'froglok_monk_dodge_backhand',0),(3972,13654,'froglok_monk_dodge_down',0),(3973,13655,'froglok_monk_dodge_forehand',0),(3974,13656,'froglok_monk_dodge_thrust',0),(3975,13657,'froglok_monk_kick_flying',0),(3976,13658,'froglok_monk_offensive_buff',0),(3977,13659,'froglok_monk_ouch_down',0),(3978,13660,'froglok_monk_ouch_thrust',0),(3979,13661,'froglok_monk_parry_backhand',0),(3980,13662,'froglok_monk_parry_down',0),(3981,13663,'froglok_monk_parry_forehand',0),(3982,13664,'froglok_monk_parry_thrust',0),(3983,13665,'froglok_monk_super_buff',0),(3984,13666,'froglok_monk_taunt_combat_art',0),(3985,13667,'froglok_pike_attack_recoil',0),(3986,13668,'froglok_pike_attack_recoil01',0),(3987,13669,'froglok_pike_attack_recoil02',0),(3988,13670,'froglok_pike_charge_up',0),(3989,13671,'froglok_pike_dodge_backhand',0),(3990,13672,'froglok_pike_dodge_down',0),(3991,13673,'froglok_pike_dodge_forehand',0),(3992,13674,'froglok_pike_dodge_thrust',0),(3993,13675,'froglok_pike_offensive_buff',0),(3994,13676,'froglok_pike_ouch_backhand',0),(3995,13677,'froglok_pike_ouch_down',0),(3996,13678,'froglok_pike_ouch_forehand',0),(3997,13679,'froglok_pike_ouch_thrust',0),(3998,13680,'froglok_pike_parry_backhand',0),(3999,13681,'froglok_pike_parry_down',0),(4000,13682,'froglok_pike_parry_forehand',0),(4001,13683,'froglok_pike_parry_thrust',0),(4002,13684,'froglok_pugilist_attack_recoil02',0),(4003,13685,'froglok_pugilist_defensive_buff',0),(4004,13686,'froglok_pugilist_dodge_backhand',0),(4005,13687,'froglok_pugilist_dodge_down',0),(4006,13688,'froglok_pugilist_dodge_forehand',0),(4007,13689,'froglok_pugilist_dodge_thrust',0),(4008,13690,'froglok_pugilist_offensive_buff',0),(4009,13691,'froglok_pugilist_ouch_backhand',0),(4010,13692,'froglok_pugilist_ouch_down',0),(4011,13693,'froglok_pugilist_ouch_forehand',0),(4012,13694,'froglok_pugilist_super_buff',0),(4013,13705,'froglok_bostaff_charge_up',0),(4014,13706,'froglok_dual_wield_knockdowntoknees',0),(4015,13707,'froglok_dual_wield_offensive_buff',0),(4016,13708,'froglok_dual_wield_super_buff',0),(4017,13709,'froglok_knockdown_attack',0),(4018,13710,'froglok_knockdowntoknees',0),(4019,13711,'froglok_offensive_buff',0),(4020,13712,'froglok_pike_backup',0),(4021,13713,'froglok_pike_knockdowntoknees',0),(4022,13714,'froglok_pike_walk',0),(4023,13715,'froglok_pugilist_attack01',0),(4024,13716,'froglok_pugilist_attack_recoil01',0),(4025,13717,'froglok_pugilist_knockdowntoknees',0),(4026,13718,'froglok_super_buff',0),(4027,13720,'lights',0),(4028,13721,'lights_spiral',0),(4029,13731,'fae_light_dance',0),(4030,13732,'horse_long_fall',0),(4031,13735,'trdskl_fruitcake',0),(4032,13744,'fire01_big',0),(4033,13745,'fire01_small',0),(4034,13747,'lights_blue',0),(4035,13748,'lights_blue_slow',0),(4036,13749,'lights_flocked',0),(4037,13750,'lights_gold',0),(4038,13751,'lights_gold_slow',0),(4039,13752,'lights_red',0),(4040,13753,'lights_red_slow',0),(4041,13754,'lights_white',0),(4042,13755,'lights_white_slow',0),(4043,13785,'dwarf_forestry_success',0),(4044,13786,'gnome_forestry_success',0),(4045,13787,'halfling_forestry_success',0),(4046,13789,'ogre_1h_crush_ouch_forehand',0),(4047,13790,'ogre_1h_pierce_ouch_forehand',0),(4048,13791,'ogre_1h_sword_ouch_forehand',0),(4049,13792,'ogre_1h_thrown_ouch_forehand',0),(4050,13793,'ogre_2h_sword_dodge_backhand',0),(4051,13794,'ogre_2h_sword_dodge_forehand',0),(4052,13795,'ogre_2h_sword_ouch_down',0),(4053,13796,'ogre_2h_sword_ouch_thrust',0),(4054,13797,'ogre_dual_wield_dodge_backhand',0),(4055,13798,'ogre_dual_wield_dodge_forehand',0),(4056,13799,'ogre_dual_wield_ouch_forehand',0),(4057,13800,'ogre_pike_dodge_backhand',0),(4058,13801,'ogre_pike_dodge_forehand',0),(4059,13802,'ogre_pike_kick',0),(4060,13803,'ogre_pike_ouch_backhand',0),(4061,13804,'ogre_pike_ouch_down',0),(4062,13805,'ogre_pike_ouch_forehand',0),(4063,13806,'ogre_pike_ouch_thrust',0),(4064,13816,'darkelf_female_2h_sword_wild_swing',0),(4065,13817,'erudite_female_2h_sword_wild_swing',0),(4066,13818,'fae_light_2h_sword_whirling_attack',0),(4067,13819,'fae_light_2h_sword_wild_swing',0),(4068,13820,'fae_light_female_2h_sword_wild_swing',0),(4069,13821,'gnome_female_2h_sword_wild_swing',0),(4070,13822,'halfelf_female_2h_sword_wild_swing',0),(4071,13823,'highelf_female_2h_sword_wild_swing',0),(4072,13824,'human_female_2h_sword_wild_swing',0),(4073,13825,'iksar_female_2h_sword_wild_swing',0),(4074,13827,'kerra_female_2h_sword_wild_swing',0),(4075,13828,'ratonga_female_2h_sword_wild_swing',0),(4076,13830,'troll_female_2h_sword_wild_swing',0),(4077,13831,'woodelf_female_2h_sword_wild_swing',0),(4078,13850,'darkelf_female_pike_charge_up',0),(4079,13851,'darkelf_female_pike_defensive_buff',0),(4080,13852,'darkelf_female_pike_offensive_buff',0),(4081,13853,'erudite_female_pike_charge_up',0),(4082,13854,'erudite_female_pike_defensive_buff',0),(4083,13855,'erudite_female_pike_offensive_buff',0),(4084,13856,'fae_light_female_pike_charge_up',0),(4085,13857,'fae_light_female_pike_defensive_buff',0),(4086,13858,'fae_light_female_pike_offensive_buff',0),(4087,13859,'fae_light_untrained_ouch01',0),(4088,13860,'gnome_female_pike_charge_up',0),(4089,13861,'gnome_female_pike_defensive_buff',0),(4090,13862,'gnome_female_pike_offensive_buff',0),(4091,13863,'halfelf_female_pike_charge_up',0),(4092,13864,'halfelf_female_pike_defensive_buff',0),(4093,13865,'halfelf_female_pike_offensive_buff',0),(4094,13866,'highelf_female_pike_charge_up',0),(4095,13867,'highelf_female_pike_defensive_buff',0),(4096,13868,'highelf_female_pike_offensive_buff',0),(4097,13869,'human_female_pike_charge_up',0),(4098,13870,'human_female_pike_defensive_buff',0),(4099,13871,'human_female_pike_offensive_buff',0),(4100,13872,'iksar_female_pike_charge_up',0),(4101,13873,'iksar_female_pike_defensive_buff',0),(4102,13874,'iksar_female_pike_offensive_buff',0),(4103,13876,'kerra_female_pike_charge_up',0),(4104,13877,'kerra_female_pike_defensive_buff',0),(4105,13878,'kerra_female_pike_offensive_buff',0),(4106,13879,'ratonga_female_pike_charge_up',0),(4107,13880,'ratonga_female_pike_defensive_buff',0),(4108,13881,'ratonga_female_pike_offensive_buff',0),(4109,13883,'troll_female_pike_charge_up',0),(4110,13884,'troll_female_pike_defensive_buff',0),(4111,13885,'troll_female_pike_offensive_buff',0),(4112,13886,'woodelf_female_pike_charge_up',0),(4113,13887,'woodelf_female_pike_defensive_buff',0),(4114,13888,'woodelf_female_pike_offensive_buff',0),(4115,13937,'design_frostfell_candy_canes',0),(4116,13958,'fire_hearts',0),(4117,14010,'result_heart_vision',0),(4118,14011,'result_heartbreak',0),(4119,14023,'result_flies',0),(4120,14024,'result_weapon_trail_poison',0),(4121,14175,'result_dagger_vision_p2p',0),(4122,14176,'result_heart_vision_p2p',0),(4123,14186,'flirt_short_butt',0),(4124,14187,'flirt_short_leg',0),(4125,14188,'flirt_short_shake',0),(4126,14189,'flirt_short_wave',0),(4127,14190,'flirt_short_wave2',0),(4128,14191,'flirt_short_wave3',0),(4129,14193,'result_heart_success',0),(4130,14223,'design_result_static_scare',0),(4131,14225,'result_fog_poison_billboards',0),(4132,14226,'result_fog_poison_billboards_small',0),(4133,14227,'result_fog_poison_billboards_thinner',0),(4134,14228,'roxbury',0),(4135,14242,'cast_pfx_notes_l',0),(4136,14243,'cast_pfx_notes_r',0),(4137,14312,'sound_unrest_quel_piano',0),(4138,14323,'water',0),(4139,14364,'1h_wand_attack',0),(4140,14365,'1h_wand_attack01',0),(4141,14366,'1h_wand_attack02',0),(4142,14367,'1h_wand_attack03',0),(4143,14368,'1h_wand_attack_recoil',0),(4144,14369,'1h_wand_attack_recoil01',0),(4145,14370,'1h_wand_attack_recoil02',0),(4146,14371,'1h_wand_attack_recoil03',0),(4147,14372,'1h_wand_backup',0),(4148,14373,'1h_wand_dodge_backhand',0),(4149,14374,'1h_wand_dodge_down',0),(4150,14375,'1h_wand_dodge_forehand',0),(4151,14376,'1h_wand_dodge_thrust',0),(4152,14377,'1h_wand_enter',0),(4153,14378,'1h_wand_exit',0),(4154,14379,'1h_wand_idle',0),(4155,14380,'1h_wand_ouch_backhand',0),(4156,14381,'1h_wand_ouch_down',0),(4157,14382,'1h_wand_ouch_forehand',0),(4158,14383,'1h_wand_ouch_thrust',0),(4159,14384,'1h_wand_parry_backhand',0),(4160,14385,'1h_wand_parry_down',0),(4161,14386,'1h_wand_parry_forehand',0),(4162,14387,'1h_wand_parry_thrust',0),(4163,14388,'1h_wand_strafe_left',0),(4164,14389,'1h_wand_strafe_right',0),(4165,14390,'1h_wand_walk',0),(4166,14401,'snd_design_unrest_zombie_scare',0),(4167,14407,'constant2_fx',0),(4168,14420,'result_sparkles_explode_noise',0),(4169,14422,'sound_howl',0),(4170,14460,'attack_recoil',0),(4171,14461,'attack_recoil01',0),(4172,14462,'attack_recoil02',0),(4173,14463,'attack_recoil03',0),(4174,14469,'parry_backhand',0),(4175,14470,'parry_down',0),(4176,14471,'parry_forehand',0),(4177,14472,'parry_thrust',0),(4178,14497,'monk_offensive_buff_short',0),(4179,14506,'result_sparkle_trail_weapon_right_glow_blend_brown',0),(4180,14507,'result_sparkle_trail_weapon_right_glow_blend_purple',0),(4181,14508,'result_sparkle_trail_weapon_right_glow_silver',0),(4182,14509,'result_sparkle_trail_weapon_right_glow_tan',0),(4183,14519,'1h_pierce_attack_03',0),(4184,14535,'result_sparkle_trail_rightfoot_glow',0),(4185,14555,'cast_mist_sphere_sub',0),(4186,14561,'result_ghost_shield_p2p',0),(4187,14576,'design_flying_barrel',0),(4188,14585,'result_breaking_faith_wall',0),(4189,14589,'cached_state2',0),(4190,14623,'result_flash_weapon_brown',0),(4191,14624,'result_flash_weapon_purple',0),(4192,14625,'result_flash_weapon_silver',0),(4193,14626,'result_glow_weapon_tan',0),(4194,14627,'result_mist_clingy_sub',0),(4195,14628,'result_shout',0),(4196,14681,'cast_debuff_blend',0),(4197,14684,'cast_shield_grow_blend',0),(4198,14721,'design_result_bubble_ring',0),(4199,14736,'fel_epic_symbol',0),(4200,14739,'warg_backup',0),(4201,14740,'warg_fall',0),(4202,14741,'warg_idle',0),(4203,14742,'warg_jump',0),(4204,14743,'warg_jump_substitute',0),(4205,14744,'warg_land',0),(4206,14745,'warg_long_fall',0),(4207,14746,'warg_run',0),(4208,14747,'warg_turn_left',0),(4209,14748,'warg_turn_right',0),(4210,14749,'warg_walk',0),(4211,14797,'electric_hands_l',0),(4212,14798,'electric_hands_r',0),(4213,14802,'trdskl_horn',0),(4214,14810,'warg_idle01',0),(4215,14811,'warg_idle02',0),(4216,14839,'pawstep_trigger',0),(4217,14869,'result_deathward_heal',0),(4218,14870,'result_doppleganger_p2p',0),(4219,14871,'result_eyehand_buff',0),(4220,14889,'cast_acid_storm_damage',0),(4221,14895,'result_acid_rain_damage',0),(4222,14896,'result_acid_storm_damage',0),(4223,14904,'pawstep',0),(4224,14913,'pawstep_snow',0),(4225,14918,'snd_horn_centaur',0),(4226,14919,'snd_horn_conch',0),(4227,14920,'snd_horn_gnoll',0),(4228,14921,'snd_horn_goblin',0),(4229,14924,'cast_ball_lightning_damage',0),(4230,14925,'cast_conjuror',0),(4231,14937,'result_countersong_p2p',0),(4232,14938,'result_rays_of_disintigration',0),(4233,14939,'result_rays_of_disintigration_p2p',0),(4234,14945,'cast_vampirism_p2p',0),(4235,14947,'froglok_warg_idle',0),(4236,14948,'froglok_warg_jump_substitute',0),(4237,14978,'particle_mood_combat_enter',0),(4238,14979,'result_fatal_followup',0),(4239,14980,'result_puppetmaster',0),(4240,14989,'special',0),(4241,14996,'result_barrier',0),(4242,14997,'result_softkill',0),(4243,15001,'cast_leaf_blower_p2p',0),(4244,15004,'cast_waterflush_p2p',0),(4245,15007,'result_firewhimsy_p2p',0),(4246,15008,'result_leaves_sticky',0),(4247,15009,'result_p2p_lightning_bolts',0),(4248,15051,'design_spotlight',0),(4249,15053,'pawstep_leather_carpet',0),(4250,15054,'pawstep_leather_dirt',0),(4251,15055,'pawstep_leather_grass',0),(4252,15056,'pawstep_leather_gravel',0),(4253,15057,'pawstep_leather_ice',0),(4254,15058,'pawstep_leather_metal',0),(4255,15059,'pawstep_leather_mud',0),(4256,15060,'pawstep_leather_sand',0),(4257,15061,'pawstep_leather_snow',0),(4258,15062,'pawstep_leather_stone',0),(4259,15063,'pawstep_leather_water',0),(4260,15064,'pawstep_leather_wood',0),(4261,15094,'snd_fire_large_loop',0),(4262,15109,'sound_peck',0),(4263,15117,'sound_damagefeather',0),(4264,15120,'cast_dirge_stringed_loop',0),(4265,15122,'cast_horn_blowing_end',0),(4266,15123,'cast_horn_blowing_loop',0),(4267,15128,'fae_dark_1h_sword_attack',0),(4268,15129,'fae_dark_1h_sword_attack01',0),(4269,15130,'fae_dark_1h_sword_attack02',0),(4270,15131,'fae_dark_1h_sword_attack03',0),(4271,15132,'fae_dark_1h_sword_death_blow',0),(4272,15133,'fae_dark_1h_sword_death_blow01',0),(4273,15134,'fae_dark_1h_sword_dodge_backhand',0),(4274,15135,'fae_dark_1h_sword_dodge_down',0),(4275,15136,'fae_dark_1h_sword_dodge_forehand',0),(4276,15137,'fae_dark_1h_sword_dodge_thrust',0),(4277,15138,'fae_dark_1h_sword_ouch_backhand',0),(4278,15139,'fae_dark_1h_sword_ouch_down',0),(4279,15140,'fae_dark_1h_sword_ouch_forehand',0),(4280,15141,'fae_dark_1h_sword_ouch_thrust',0),(4281,15142,'fae_dark_1h_sword_parry_backhand',0),(4282,15143,'fae_dark_1h_sword_parry_down',0),(4283,15144,'fae_dark_1h_sword_parry_forehand',0),(4284,15145,'fae_dark_1h_sword_parry_thrust',0),(4285,15146,'fae_dark_2h_sword_attack',0),(4286,15147,'fae_dark_2h_sword_attack01',0),(4287,15148,'fae_dark_2h_sword_attack02',0),(4288,15149,'fae_dark_2h_sword_defensive_buff',0),(4289,15150,'fae_dark_2h_sword_dodge_backhand',0),(4290,15151,'fae_dark_2h_sword_dodge_down',0),(4291,15152,'fae_dark_2h_sword_dodge_forehand',0),(4292,15153,'fae_dark_2h_sword_enter',0),(4293,15154,'fae_dark_2h_sword_kick',0),(4294,15155,'fae_dark_2h_sword_ouch_backhand',0),(4295,15156,'fae_dark_2h_sword_ouch_down',0),(4296,15157,'fae_dark_2h_sword_ouch_forehand',0),(4297,15158,'fae_dark_2h_sword_ouch_thrust',0),(4298,15159,'fae_dark_2h_sword_whirling_attack',0),(4299,15160,'fae_dark_2h_sword_wild_swing',0),(4300,15161,'fae_dark_bostaff_attack01',0),(4301,15162,'fae_dark_bostaff_attack02',0),(4302,15163,'fae_dark_bostaff_attack03',0),(4303,15164,'fae_dark_bostaff_dodge_backhand',0),(4304,15165,'fae_dark_bostaff_dodge_forehand',0),(4305,15166,'fae_dark_climbing_backup',0),(4306,15167,'fae_dark_climbing_enter_down_root',0),(4307,15168,'fae_dark_climbing_exit_up_root',0),(4308,15169,'fae_dark_climbing_idle',0),(4309,15170,'fae_dark_climbing_strafe_left',0),(4310,15171,'fae_dark_climbing_strafe_right',0),(4311,15172,'fae_dark_climbing_walk',0),(4312,15173,'fae_dark_dance',0),(4313,15174,'fae_dark_dead',0),(4314,15175,'fae_dark_dead_enter',0),(4315,15176,'fae_dark_dual_wield_attack',0),(4316,15177,'fae_dark_dual_wield_attack01',0),(4317,15178,'fae_dark_dual_wield_attack02',0),(4318,15179,'fae_dark_dual_wield_attack03',0),(4319,15180,'fae_dark_dual_wield_dodge_backhand',0),(4320,15181,'fae_dark_dual_wield_dodge_forehand',0),(4321,15182,'fae_dark_dual_wield_kick',0),(4322,15183,'fae_dark_dual_wield_ouch_backhand',0),(4323,15184,'fae_dark_dual_wield_ouch_forehand',0),(4324,15185,'fae_dark_dual_wield_parry_down',0),(4325,15186,'fae_dark_dual_wield_whirling_attack',0),(4326,15187,'fae_dark_dual_wield_wild_swing',0),(4327,15188,'fae_dark_idle',0),(4328,15189,'fae_dark_monk_attack',0),(4329,15190,'fae_dark_monk_attack01',0),(4330,15191,'fae_dark_monk_attack02',0),(4331,15192,'fae_dark_monk_attack03',0),(4332,15193,'fae_dark_monk_dodge_backhand',0),(4333,15194,'fae_dark_monk_dodge_down',0),(4334,15195,'fae_dark_monk_wild_swing',0),(4335,15196,'fae_dark_pike_attack',0),(4336,15197,'fae_dark_pike_attack01',0),(4337,15198,'fae_dark_pike_attack02',0),(4338,15199,'fae_dark_pike_kick',0),(4339,15200,'fae_dark_pike_whirling_attack',0),(4340,15201,'fae_dark_pike_wild_swing',0),(4341,15202,'fae_dark_pugilist_attack',0),(4342,15203,'fae_dark_pugilist_attack02',0),(4343,15204,'fae_dark_pugilist_kick',0),(4344,15205,'fae_dark_pugilist_whirling_attack',0),(4345,15206,'fae_dark_pugilist_wild_swing',0),(4346,15207,'fae_dark_run',0),(4347,15208,'fae_dark_sit_enter',0),(4348,15209,'fae_dark_sit_exit',0),(4349,15210,'fae_dark_sit_idle',0),(4350,15211,'fae_dark_untrained_ouch01',0),(4351,15232,'cast_summon_undead_assemble',0),(4352,15233,'cast_summon_undead_cyclone',0),(4353,15234,'cast_summon_undead_flame_spurt',0),(4354,15235,'cast_summon_undead_yawn',0),(4355,15245,'result_clouds_head',0),(4356,15246,'run01',0),(4357,15247,'run02',0),(4358,15258,'cast_bard_drum_persist',0),(4359,15259,'cast_bard_flute_persist',0),(4360,15260,'cast_bard_stringed_persist',0),(4361,15265,'result_soulsuck_p2p',0),(4362,15301,'design_fireworks_show_10',0),(4363,15302,'design_fireworks_show_2',0),(4364,15303,'design_fireworks_show_4',0),(4365,15304,'design_fireworks_show_6',0),(4366,15307,'sound_bud',0),(4367,15308,'sound_idle_legs',0),(4368,15321,'design_neriak_opera_backdrop_moon',0),(4369,15322,'design_neriak_opera_backdrop_palace',0),(4370,15323,'design_neriak_opera_backdrop_sky',0),(4371,15324,'design_neriak_opera_backdrop_trees',0),(4372,15334,'trdskl_metal_sparks',0),(4373,15363,'sound_deathwing',0),(4374,15364,'sound_idlebreathe',0),(4375,15365,'sound_idlewing',0),(4376,15366,'sound_stinger',0),(4377,15367,'sound_swooshstinger',0),(4378,15409,'result_anvil_drop',0),(4379,15418,'walk01',0),(4380,15419,'walk02',0),(4381,15475,'result_star_burst',0),(4382,15476,'result_stunned_star',0),(4383,15529,'attack_02',0),(4384,15533,'green_smoke-ouch',0),(4385,15534,'green_smoke_ouch',0),(4386,15536,'royal_wave_short',0),(4387,15538,'spike_ball01',0),(4388,15539,'spike_ball02',0),(4389,15540,'spike_ball03',0),(4390,15588,'draw_weapon',0),(4391,15589,'fel_epic_symbol_outer',0),(4392,15611,'draw_weapon_idle',0),(4393,15614,'sheathe_weapon_idle',0),(4394,15615,'fade_cast_sound',0),(4395,15616,'fade_reverse_sound',0),(4396,15617,'cast_poison_dragon_breath_test',0),(4397,15618,'cast_pricecheck',0),(4398,15619,'constant_fx',0),(4399,15620,'instant_fx',0),(4400,15621,'sd_spiritdescend_snd',0),(4401,15622,'1h_sword_idle01',0),(4402,15629,'paperdoll',0),(4403,15637,'tail_combat',0),(4404,15640,'aura_yellow',0),(4405,15641,'cast_lhand_sparkle_trail_blend',0),(4406,15644,'cast_rhand_sparkle_trail_blend',0),(4407,15652,'tail_run',0),(4408,15657,'climbing_chainmail_rope',0),(4409,15658,'climbing_leather_rope',0),(4410,15659,'climbing_metal_rope',0),(4411,15662,'run_tail',0),(4412,15669,'result_cold_ice_crystals_hands',0),(4413,15670,'result_cold_ice_crystals_lefthand',0),(4414,15671,'result_cold_ice_crystals_righthand',0),(4415,15672,'result_hand_rings_fire',0),(4416,15673,'result_hand_rings_ice',0),(4417,15674,'result_hand_rings_lightning',0),(4418,15675,'result_rock_hands',0),(4419,15678,'attack_fx',0),(4420,15685,'result_plant_filaments',0),(4421,15693,'sound_damagestone',0),(4422,15694,'sound_deadloud',0),(4423,15699,'cast_skull_grow',0),(4424,15700,'cast_sonic_ring',0),(4425,15701,'cast_sonic_ring_vertical',0),(4426,15704,'result_poison_cysts_popping',0),(4427,15705,'result_silence',0),(4428,15712,'result_gangrene',0),(4429,15720,'snd_aof_anvilfall',0),(4430,15721,'snd_aof_anvilhit',0),(4431,15729,'snd_acidrain_cast',0),(4432,15730,'snd_acidrain_result',0),(4433,15736,'death',0),(4434,15739,'sheathe_weapon',0),(4435,15740,'snd_design_terror001',0),(4436,15741,'snd_design_terror002',0),(4437,15742,'snd_design_terror003',0),(4438,15743,'snd_design_terror004',0),(4439,15744,'snd_design_terror005',0),(4440,15745,'snd_design_terror006',0),(4441,15746,'snd_design_terror007',0),(4442,15747,'snd_design_terror008',0),(4443,15748,'snd_design_terror009',0),(4444,15749,'snd_design_terror010',0),(4445,15750,'snd_design_terror011',0),(4446,15751,'snd_design_terror012',0),(4447,15752,'snd_design_terror020',0),(4448,15753,'sound_blow',0),(4449,15754,'sound_deathfall1',0),(4450,15755,'sound_deathfall2',0),(4451,15763,'sound_idlehit',0),(4452,15764,'sound_idleyell',0),(4453,15771,'kick_fx',0),(4454,15772,'result_bucket',0),(4455,15779,'result_lava_burst',0),(4456,15780,'rhino_backup',0),(4457,15781,'rhino_idle',0),(4458,15782,'rhino_jump_substitute',0),(4459,15783,'rhino_run',0),(4460,15784,'rhino_turn_left',0),(4461,15785,'rhino_turn_right',0),(4462,15786,'rhino_walk',0),(4463,15793,'result_blast_cone_aoe',0),(4464,15794,'result_pants_off',0),(4465,15801,'result_god_spell_bristlebane',0),(4466,15807,'design_plant_attack',0),(4467,15809,'rhino_fall',0),(4468,15810,'rhino_jump',0),(4469,15811,'rhino_land',0),(4470,15818,'result_cocoon_blue',0),(4471,15819,'result_cocoon_green',0),(4472,15820,'result_cocoon_red',0),(4473,15821,'result_cocoon_yellow',0),(4474,15822,'result_web_shooting_p2p',0),(4475,15828,'fly_combat',0),(4476,15829,'fly_combat01',0),(4477,15830,'fly_enter',0),(4478,15831,'fly_exit',0),(4479,15834,'snd_cow_moo',0),(4480,15835,'trdskl_beehive',0),(4481,15842,'result_bee_breath',0),(4482,15843,'result_beehive_hit',0),(4483,15845,'sound_ribbit',0),(4484,15846,'sound_tonguesplat',0),(4485,15851,'cast_wild_heart_buff',0),(4486,15854,'persist_fear_skulls',0),(4487,15855,'persist_wild_heart_beating',0),(4488,15861,'drag_sparks',0),(4489,15862,'ground_blast',0),(4490,15864,'pawbuster_attack_enter',0),(4491,15865,'pawbuster_attack_exit',0),(4492,15866,'pawbuster_attack_idle',0),(4493,15867,'result_webby_root',0),(4494,15875,'sparkle_trail_weapon',0),(4495,15876,'sparkle_trail_weapon_spiral',0),(4496,15881,'cast_webshoot',0),(4497,15882,'cast_webshoot_p2p',0),(4498,15886,'walk_tail',0),(4499,15891,'cast_trace_firespikes_sub_l',0),(4500,15892,'cast_trace_firespikes_sub_r',0),(4501,15899,'pugilist_charge_up_long',0),(4502,15907,'spike_fist',0),(4503,15913,'fx_on',0),(4504,15915,'result_ground_blast_ring',0),(4505,15921,'griffin_glide',0),(4506,15927,'idle_to_combat',0),(4507,15934,'result_fire_object',0),(4508,15941,'rhino_long_fall',0),(4509,15942,'rhino_strafe_left',0),(4510,15943,'rhino_strafe_right',0),(4511,15944,'run_tail_cloak',0),(4512,15946,'walk_tail_cloak',0),(4513,15949,'beam0_blue',0),(4514,15950,'beam0_red',0),(4515,15951,'beam0_yellow',0),(4516,15952,'beam1_blue',0),(4517,15953,'beam1_red',0),(4518,15954,'beam1_yellow',0),(4519,15955,'beam2_blue',0),(4520,15956,'beam2_red',0),(4521,15957,'beam2_yellow',0),(4522,15958,'beam3_blue',0),(4523,15959,'beam3_red',0),(4524,15960,'beam3_yellow',0),(4525,15961,'beam_door',0),(4526,15966,'cast_shards',0),(4527,15967,'cast_shards_blast',0),(4528,15970,'mood_dance',0),(4529,15973,'beam_miss_orange',0),(4530,15974,'beam_miss_purple',0),(4531,15975,'cast_dragon_pbae_lightning_red',0),(4532,15976,'cast_dual_shards',0),(4533,15979,'cast_shard_cloud_blast',0),(4534,15980,'cast_shard_lightning',0),(4535,15981,'cast_shard_pulse',0),(4536,15982,'cast_shards_fusion',0),(4537,15983,'cast_shards_merging',0),(4538,15989,'ghost_idle',0),(4539,15994,'cha_beam_blast0',0),(4540,15995,'cha_beam_blast1',0),(4541,15996,'cha_beam_blast2',0),(4542,15997,'cha_beam_blast_up',0),(4543,16003,'design_charasis_beams_purple',0),(4544,16004,'design_charasis_beams_turquoise',0),(4545,16011,'result_ghost_forced_shader_4_green',0),(4546,16012,'result_ghost_forced_shader_4_red',0),(4547,16019,'result_barrier_blue',0),(4548,16020,'result_barrier_red',0),(4549,16021,'result_barrier_yellow',0),(4550,16027,'design_blood_puddle',0),(4551,16029,'result_berserker_black_eyes',0),(4552,16030,'result_berserker_blue_eyes',0),(4553,16031,'result_berserker_purple_eyes',0),(4554,16032,'result_berserker_white_eyes',0),(4555,16037,'combat_idle2',0),(4556,16039,'design_charasis_windfan_fx',0),(4557,16042,'cast_no_target_blue_star',0),(4558,16046,'design_charasis_theater_fx',0),(4559,16047,'design_charasis_vision_fens',0),(4560,16048,'design_charasis_vision_jarsath',0),(4561,16049,'design_charasis_vision_kunzar',0),(4562,16050,'design_charasis_vision_kylong',0),(4563,16056,'dance_enter',0),(4564,16057,'dance_exit',0),(4565,16059,'result_ghost_shadow',0),(4566,16065,'design_lava_projectile',0),(4567,16066,'design_vision_teleport_veeshans',0),(4568,16074,'sound_fall001',0),(4569,16080,'design_veeshans_barrier',0),(4570,16086,'design_veeshans_rock_drop',0),(4571,16089,'sound_belly001',0),(4572,16090,'sound_belly002',0),(4573,16095,'cast_summon_undead_cyclone_green',0),(4574,16097,'goo_arm_buff',0),(4575,16099,'result_pus_bolt_p2p',0),(4576,16100,'result_pus_splat',0),(4577,16101,'result_sickly_aura_aoe',0),(4578,16102,'ring',0),(4579,16108,'design_vision_teleport_traks_lair',0),(4580,16109,'draw_weapon_primary_trigger',0),(4581,16110,'draw_weapon_secondary_trigger',0),(4582,16112,'result_barrier_orange',0),(4583,16113,'result_gavel_pound',0),(4584,16114,'result_stinky_aura',0),(4585,16115,'screen_shake',0),(4586,16117,'sheathe_weapon_primary_trigger',0),(4587,16118,'sheathe_weapon_secondary_trigger',0),(4588,16119,'stomp_sound',0),(4589,16127,'sound_bone',0),(4590,16128,'sound_bonedeath',0),(4591,16135,'result_glade',0),(4592,16136,'result_ice_storm',0),(4593,16137,'result_shroud_of_clouds',0),(4594,16143,'design_karnors_beam_center',0),(4595,16144,'design_karnors_beam_left',0),(4596,16145,'design_karnors_beam_right',0),(4597,16147,'result_timed_heart_tap',0),(4598,16149,'sound_yawn',0),(4599,16154,'combat_attack',0),(4600,16157,'mount_attack01',0),(4601,16158,'mount_combat_idle',0),(4602,16159,'mount_ouch',0),(4603,16160,'mount_ouch01',0),(4604,16161,'result_soul_attack_p2p',0),(4605,16162,'rhino_sprint',0),(4606,16163,'sarnak_1h_crush_idle',0),(4607,16164,'sarnak_1h_pierce_idle',0),(4608,16165,'sarnak_1h_sword_idle',0),(4609,16166,'sarnak_1h_thrown_idle',0),(4610,16167,'sarnak_2h_sword_idle',0),(4611,16168,'sarnak_backup',0),(4612,16169,'sarnak_backup_run',0),(4613,16170,'sarnak_bostaff_idle',0),(4614,16171,'sarnak_combat_idle',0),(4615,16172,'sarnak_dual_wield_idle',0),(4616,16173,'sarnak_fall',0),(4617,16174,'sarnak_idle',0),(4618,16175,'sarnak_idle01',0),(4619,16176,'sarnak_monk_idle',0),(4620,16177,'sarnak_pike_idle',0),(4621,16178,'sarnak_pugilist_idle',0),(4622,16179,'sarnak_rhino_backup',0),(4623,16180,'sarnak_rhino_idle',0),(4624,16181,'sarnak_rhino_jump_substitute',0),(4625,16182,'sarnak_rhino_run',0),(4626,16183,'sarnak_rhino_strafe_left',0),(4627,16184,'sarnak_rhino_strafe_right',0),(4628,16185,'sarnak_rhino_turn_left',0),(4629,16186,'sarnak_rhino_turn_right',0),(4630,16187,'sarnak_run',0),(4631,16188,'sarnak_run_03',0),(4632,16189,'sarnak_run_down_idle',0),(4633,16190,'sarnak_run_long',0),(4634,16191,'sarnak_run_up_idle',0),(4635,16192,'sarnak_sit_enter',0),(4636,16193,'sarnak_sit_exit',0),(4637,16194,'sarnak_sit_idle',0),(4638,16195,'sarnak_strafe_left_run',0),(4639,16196,'sarnak_strafe_right_run',0),(4640,16197,'sarnak_sway_l',0),(4641,16198,'sarnak_sway_r',0),(4642,16199,'sarnak_untrained_idle',0),(4643,16200,'sarnak_walk',0),(4644,16203,'carpet_backup',0),(4645,16209,'sokokar_idle',0),(4646,16210,'sokokar_run',0),(4647,16211,'sokokar_walk',0),(4648,16218,'pus_splat',0),(4649,16220,'sound_cast001',0),(4650,16221,'sound_cast002',0),(4651,16222,'sound_slam',0),(4652,16225,'aura_green',0),(4653,16228,'cast_venril_beam_buff',0),(4654,16229,'cast_venril_crystal',0),(4655,16230,'cast_venril_ring',0),(4656,16231,'cast_venril_ring_buff',0),(4657,16234,'result_ghosts',0),(4658,16240,'death_enter',0),(4659,16241,'death_tail',0),(4660,16242,'hand_fx_left',0),(4661,16243,'hand_fx_right',0),(4662,16246,'sokokar_glide',0),(4663,16247,'sound_deadeye001',0),(4664,16248,'sound_deadeye002',0),(4665,16249,'sound_deathdeflate',0),(4666,16250,'sound_smoke',0),(4667,16255,'cast_trail_head',0),(4668,16262,'manipulate',0),(4669,16270,'sound_bones',0),(4670,16271,'sound_deathghost',0),(4671,16277,'eye_beams',0),(4672,16279,'result_pus_rain_aoe',0),(4673,16280,'sarnak_1h_crush_enter',0),(4674,16281,'sarnak_1h_pierce_enter',0),(4675,16282,'sarnak_1h_sword_attack',0),(4676,16283,'sarnak_1h_sword_attack02',0),(4677,16284,'sarnak_1h_sword_attack03',0),(4678,16285,'sarnak_1h_sword_death_blow',0),(4679,16286,'sarnak_1h_sword_death_blow01',0),(4680,16287,'sarnak_1h_sword_enter',0),(4681,16288,'sarnak_1h_sword_exit',0),(4682,16289,'sarnak_1h_thrown_enter',0),(4683,16290,'sarnak_1h_wand_enter',0),(4684,16291,'sarnak_1h_wand_idle',0),(4685,16292,'sarnak_2h_sword_enter',0),(4686,16293,'sarnak_dead',0),(4687,16294,'sarnak_dead_enter',0),(4688,16301,'result_fireworks_confetti',0),(4689,16304,'cast_breath_divine',0),(4690,16305,'cast_breath_magic',0),(4691,16312,'result_breath_magic',0),(4692,16318,'design_green_mist',0),(4693,16320,'power_up',0),(4694,16321,'sarnak_2h_sword_attack',0),(4695,16322,'sarnak_2h_sword_attack01',0),(4696,16323,'sarnak_2h_sword_attack02',0),(4697,16324,'sarnak_2h_sword_kick',0),(4698,16325,'sarnak_monk_enter',0),(4699,16328,'cast_dragon_tail_trail',0),(4700,16329,'cast_dragon_tail_trail_long',0),(4701,16330,'cast_dragon_wing_buffet',0),(4702,16334,'horse_combat_idle',0),(4703,16336,'result_fleas',0),(4704,16337,'sarnak_bow_enter',0),(4705,16338,'sarnak_bow_idle',0),(4706,16340,'sound_attack_main',0),(4707,16341,'sound_attack_medusa',0),(4708,16342,'sound_attack_mouth',0),(4709,16343,'sound_damage_medusa',0),(4710,16344,'sound_damage_mouth',0),(4711,16345,'sound_death_medusa',0),(4712,16346,'sound_death_mouth',0),(4713,16347,'sound_enter',0),(4714,16348,'sound_enter_vocal',0),(4715,16349,'sound_swing',0),(4716,16356,'result_god_cackle_tribunal',0),(4717,16357,'result_god_spell_bertoxxulous',0),(4718,16358,'result_god_spell_karana',0),(4719,16359,'result_god_spell_tribunal',0),(4720,16361,'snd_rain_9s',0),(4721,16362,'trdskl_barracuda',0),(4722,16365,'cast_dragon_breath_cold',0),(4723,16366,'cast_dragon_breath_heat',0),(4724,16367,'cast_dragon_breath_lightning',0),(4725,16368,'cast_dragon_breath_poison',0),(4726,16369,'cast_drake_breath_cold',0),(4727,16370,'cast_drake_breath_lightning',0),(4728,16371,'cast_drake_breath_magic_divine',0),(4729,16372,'cast_drake_breath_poison',0),(4730,16376,'design_ball_summon',0),(4731,16377,'design_leash',0),(4732,16378,'design_lightning_ground',0),(4733,16379,'design_pillar_summon',0),(4734,16381,'ouch_back',0),(4735,16382,'sarnak_dual_wield_attack01',0),(4736,16384,'sit_idle_tail',0),(4737,16391,'runes_shissar1',0),(4738,16392,'runes_shissar2',0),(4739,16393,'runes_shissar3',0),(4740,16394,'runes_shissar4',0),(4741,16395,'runes_shissar5',0),(4742,16396,'runes_shissar6',0),(4743,16397,'runes_shissar7',0),(4744,16398,'runes_shissar8',0),(4745,16405,'pike_advance',0),(4746,16412,'result_trakanon_static_repulsion',0),(4747,16418,'design_poison_splashes',0),(4748,16420,'particle_teleport',0),(4749,16422,'wizard_rune_blast',0),(4750,16429,'result_hand_rings_smoke',0),(4751,16430,'result_pie_splat',0),(4752,16431,'sarnak_1h_crush_attack',0),(4753,16432,'sarnak_1h_crush_attack02',0),(4754,16433,'sarnak_1h_crush_attack03',0),(4755,16434,'sarnak_1h_pierce_attack',0),(4756,16435,'sarnak_bostaff_attack',0),(4757,16436,'sarnak_bostaff_attack01',0),(4758,16437,'sarnak_bostaff_attack02',0),(4759,16438,'sarnak_bostaff_attack03',0),(4760,16439,'sarnak_dual_wield_attack',0),(4761,16440,'sarnak_dual_wield_attack02',0),(4762,16441,'sarnak_fishing_cast',0),(4763,16442,'sarnak_fishing_fight',0),(4764,16443,'sarnak_fishing_reel_in',0),(4765,16444,'sarnak_forestry_chopping',0),(4766,16445,'sarnak_forestry_success',0),(4767,16446,'sarnak_gathering_search',0),(4768,16447,'sarnak_gathering_success',0),(4769,16448,'sarnak_mining_digging',0),(4770,16449,'sarnak_monk_attack',0),(4771,16450,'sarnak_monk_attack01',0),(4772,16451,'sarnak_monk_attack02',0),(4773,16452,'sarnak_monk_attack03',0),(4774,16453,'sarnak_monk_kick',0),(4775,16454,'sarnak_pike_attack',0),(4776,16455,'sarnak_pike_attack01',0),(4777,16456,'sarnak_pike_attack02',0),(4778,16457,'sarnak_pike_attack03',0),(4779,16458,'sarnak_pike_kick',0),(4780,16460,'trdskl_pie',0),(4781,16467,'result_hand_rings_poison',0),(4782,16468,'sarnak_1h_sword_attack01',0),(4783,16469,'sarnak_mining_success',0),(4784,16472,'cast_mirror',0),(4785,16476,'design_parrot_shoulder',0),(4786,16478,'result_splat',0),(4787,16480,'trdskl_glob',0),(4788,16487,'result_bread_hit',0),(4789,16489,'trdskl_bread',0),(4790,16495,'froglok_dead_enter',0),(4791,16496,'froglok_run_up_idle',0),(4792,16497,'froglok_swim_attack',0),(4793,16498,'froglok_swim_go',0),(4794,16499,'froglok_swim_idle',0),(4795,16500,'froglok_swim_ouch',0),(4796,16501,'iksar_swim_backup',0),(4797,16502,'iksar_swim_go',0),(4798,16504,'sarnak_rhino_sprint',0),(4799,16505,'sarnak_swim_backup',0),(4800,16506,'sarnak_swim_go',0),(4801,16508,'swim_go',0),(4802,16513,'close',0),(4803,16514,'2h_sword',0),(4804,16517,'cast_armor_assemble',0),(4805,16520,'cast_chalice_descending',0),(4806,16527,'result_blast_double_cone_aoe',0),(4807,16530,'carpet_tail',0),(4808,16531,'carpet_tail_cloak',0),(4809,16536,'result_book_hit',0),(4810,16538,'trdskl_book',0),(4811,16539,'trdskl_rose',0),(4812,16545,'flash',0),(4813,16546,'glint',0),(4814,16549,'cast_light_beam_grow',0),(4815,16554,'result_gavel_drop',0),(4816,16555,'result_hearts_red',0),(4817,16556,'result_light_slam_aoe',0),(4818,16557,'result_vertical_blast',0),(4819,16560,'cast_lightning_aoe_blast_out',0),(4820,16565,'result_cyclone_storm',0),(4821,16568,'cast_cyclone_storm_blast',0),(4822,16575,'ouch_forhand',0),(4823,16580,'community_robe_red',0),(4824,16582,'fire_foolish',0),(4825,16583,'guide_robe_green',0),(4826,16589,'dance_synced',0),(4827,16591,'result_frisbee_p2p',0),(4828,16593,'trdskl_frisbee',0),(4829,16596,'brew_day_mugs',0),(4830,16601,'result_feather_smack',0),(4831,16602,'sarnak_1h_sword_dodge_backhand',0),(4832,16603,'sarnak_1h_sword_dodge_down',0),(4833,16604,'sarnak_1h_sword_dodge_forehand',0),(4834,16605,'sarnak_1h_sword_dodge_thrust',0),(4835,16606,'sarnak_1h_sword_ouch_backhand',0),(4836,16607,'sarnak_1h_sword_ouch_down',0),(4837,16608,'sarnak_1h_sword_ouch_forehand',0),(4838,16609,'sarnak_1h_sword_ouch_thrust',0),(4839,16610,'sarnak_1h_sword_parry_backhand',0),(4840,16611,'sarnak_1h_sword_parry_down',0),(4841,16612,'sarnak_1h_sword_parry_forehand',0),(4842,16613,'sarnak_1h_sword_parry_thrust',0),(4843,16614,'sarnak_2h_sword_dodge_down',0),(4844,16615,'sarnak_2h_sword_dodge_forehand',0),(4845,16616,'sarnak_2h_sword_ouch_backhand',0),(4846,16617,'sarnak_2h_sword_ouch_down',0),(4847,16618,'sarnak_2h_sword_ouch_forehand',0),(4848,16619,'sarnak_2h_sword_ouch_thrust',0),(4849,16620,'sarnak_2h_sword_ouch_thust',0),(4850,16621,'sarnak_2h_sword_parry_backhand',0),(4851,16622,'sarnak_2h_sword_parry_down',0),(4852,16623,'sarnak_2h_sword_parry_forehand',0),(4853,16624,'sarnak_agree',0),(4854,16625,'sarnak_applaude',0),(4855,16626,'sarnak_attention',0),(4856,16627,'sarnak_beckon',0),(4857,16628,'sarnak_beg',0),(4858,16629,'sarnak_boggle',0),(4859,16630,'sarnak_bostaff_dodge_backhand',0),(4860,16631,'sarnak_bostaff_dodge_down',0),(4861,16632,'sarnak_bostaff_dodge_forehand',0),(4862,16633,'sarnak_bostaff_ouch_backhand',0),(4863,16634,'sarnak_bostaff_ouch_down',0),(4864,16635,'sarnak_bostaff_ouch_forehand',0),(4865,16636,'sarnak_bostaff_ouch_thrust',0),(4866,16637,'sarnak_bostaff_parry_backhand',0),(4867,16638,'sarnak_bostaff_parry_down',0),(4868,16639,'sarnak_bostaff_parry_forehand',0),(4869,16640,'sarnak_bostaff_parry_thrust',0),(4870,16641,'sarnak_bow',0),(4871,16642,'sarnak_brandish',0),(4872,16643,'sarnak_bye',0),(4873,16644,'sarnak_cackle',0),(4874,16645,'sarnak_cheer',0),(4875,16646,'sarnak_chuckle',0),(4876,16647,'sarnak_confused',0),(4877,16648,'sarnak_crazy',0),(4878,16649,'sarnak_cringe',0),(4879,16650,'sarnak_cry',0),(4880,16651,'sarnak_curse',0),(4881,16652,'sarnak_curtsey',0),(4882,16653,'sarnak_curtsey2',0),(4883,16654,'sarnak_cutthroat',0),(4884,16655,'sarnak_doubletake',0),(4885,16656,'sarnak_dual_wield_attack03',0),(4886,16657,'sarnak_dual_wield_dodge_backhand',0),(4887,16658,'sarnak_dual_wield_dodge_down',0),(4888,16659,'sarnak_dual_wield_dodge_forehand',0),(4889,16660,'sarnak_dual_wield_kick',0),(4890,16661,'sarnak_dual_wield_ouch_backhand',0),(4891,16662,'sarnak_dual_wield_ouch_down',0),(4892,16663,'sarnak_dual_wield_ouch_forehand',0),(4893,16664,'sarnak_dual_wield_parry_down',0),(4894,16665,'sarnak_duck',0),(4895,16666,'sarnak_fflirt',0),(4896,16667,'sarnak_fistclapping',0),(4897,16668,'sarnak_flex',0),(4898,16669,'sarnak_flirt',0),(4899,16670,'sarnak_flustered',0),(4900,16671,'sarnak_frustration',0),(4901,16672,'sarnak_gag',0),(4902,16673,'sarnak_giggle',0),(4903,16674,'sarnak_glare',0),(4904,16675,'sarnak_grumble',0),(4905,16676,'sarnak_happy',0),(4906,16677,'sarnak_headslap',0),(4907,16678,'sarnak_hearnoevil',0),(4908,16679,'sarnak_heartattack',0),(4909,16680,'sarnak_heelclick',0),(4910,16681,'sarnak_hellno',0),(4911,16682,'sarnak_hello',0),(4912,16683,'sarnak_hourglass',0),(4913,16684,'sarnak_howl',0),(4914,16685,'sarnak_indigestion',0),(4915,16686,'sarnak_itch',0),(4916,16687,'sarnak_listen',0),(4917,16688,'sarnak_lookaway',0),(4918,16689,'sarnak_monk_dodge_backhand',0),(4919,16690,'sarnak_monk_dodge_forehand',0),(4920,16691,'sarnak_monk_ouch_backhand',0),(4921,16692,'sarnak_monk_ouch_down',0),(4922,16693,'sarnak_monk_ouch_forehand',0),(4923,16694,'sarnak_monk_parry_backhand',0),(4924,16695,'sarnak_monk_parry_down',0),(4925,16696,'sarnak_monk_parry_forehand',0),(4926,16697,'sarnak_moon',0),(4927,16698,'sarnak_neener',0),(4928,16699,'sarnak_no',0),(4929,16700,'sarnak_nod',0),(4930,16701,'sarnak_notworthy',0),(4931,16702,'sarnak_orate',0),(4932,16703,'sarnak_peer',0),(4933,16704,'sarnak_pike_dodge_backhand',0),(4934,16705,'sarnak_pike_dodge_down',0),(4935,16706,'sarnak_pike_dodge_forehand',0),(4936,16707,'sarnak_pike_dodge_thrust',0),(4937,16708,'sarnak_pike_ouch_backhand',0),(4938,16709,'sarnak_pike_ouch_down',0),(4939,16710,'sarnak_pike_ouch_thrust',0),(4940,16711,'sarnak_pike_parry_backhand',0),(4941,16712,'sarnak_pike_parry_down',0),(4942,16713,'sarnak_pike_parry_forehand',0),(4943,16714,'sarnak_point',0),(4944,16715,'sarnak_ponder',0),(4945,16716,'sarnak_pout',0),(4946,16717,'sarnak_pugilist_attack',0),(4947,16718,'sarnak_pugilist_attack01',0),(4948,16719,'sarnak_pugilist_attack02',0),(4949,16720,'sarnak_pugilist_attack03',0),(4950,16721,'sarnak_pugilist_dodge_backhand',0),(4951,16722,'sarnak_pugilist_dodge_down',0),(4952,16723,'sarnak_pugilist_kick',0),(4953,16724,'sarnak_raisehand',0),(4954,16725,'sarnak_royalwave',0),(4955,16726,'sarnak_rubhands',0),(4956,16727,'sarnak_rude',0),(4957,16728,'sarnak_sad',0),(4958,16729,'sarnak_salute',0),(4959,16730,'sarnak_sarcasticclap',0),(4960,16731,'sarnak_scold',0),(4961,16732,'sarnak_scratch',0),(4962,16733,'sarnak_scream',0),(4963,16734,'sarnak_seenoevil',0),(4964,16735,'sarnak_shakefist',0),(4965,16736,'sarnak_shame',0),(4966,16737,'sarnak_shimmy',0),(4967,16738,'sarnak_shiver',0),(4968,16739,'sarnak_shrug',0),(4969,16740,'sarnak_sigh',0),(4970,16741,'sarnak_smile',0),(4971,16742,'sarnak_smirk',0),(4972,16743,'sarnak_sneer',0),(4973,16744,'sarnak_sneeze',0),(4974,16745,'sarnak_snicker',0),(4975,16746,'sarnak_sniff',0),(4976,16747,'sarnak_speaknoevil',0),(4977,16748,'sarnak_square',0),(4978,16749,'sarnak_squeal',0),(4979,16750,'sarnak_stare',0),(4980,16751,'sarnak_stinky',0),(4981,16752,'sarnak_stretch',0),(4982,16753,'sarnak_sulk',0),(4983,16754,'sarnak_swear',0),(4984,16755,'sarnak_tantrum',0),(4985,16756,'sarnak_tapfoot',0),(4986,16757,'sarnak_taunt',0),(4987,16758,'sarnak_thank',0),(4988,16759,'sarnak_thumbs',0),(4989,16760,'sarnak_violin',0),(4990,16761,'sarnak_wave',0),(4991,16762,'sarnak_whistle',0),(4992,16763,'sarnak_whome',0),(4993,16764,'sarnak_wince',0),(4994,16765,'sarnak_wink',0),(4995,16766,'sarnak_yawn',0),(4996,16767,'sarnak_yeah',0),(4997,16769,'trdskl_pillow',0),(4998,16772,'cast_boomerang',0),(4999,16778,'trdskl_boomerang',0),(5000,16786,'snd_pillow_impact',0),(5001,16789,'brick_throw',0),(5002,16793,'horn_blow',0),(5003,16801,'sound_horn',0),(5004,16807,'design_cast_vision_shardofhate',0),(5005,16814,'result_waterwall',0),(5006,16821,'result_netted',0),(5007,16823,'trdskl_net',0),(5008,16831,'vek_beam01_blue',0),(5009,16832,'vek_beam01_green',0),(5010,16833,'vek_beam01_red',0),(5011,16834,'vek_beam01_yellow',0),(5012,16835,'vek_beam02_blue',0),(5013,16836,'vek_beam02_green',0),(5014,16837,'vek_beam02_red',0),(5015,16838,'vek_beam02_yellow',0),(5016,16839,'vek_beam03_blue',0),(5017,16840,'vek_beam03_green',0),(5018,16841,'vek_beam03_red',0),(5019,16842,'vek_beam03_yellow',0),(5020,16843,'vek_beam04_blue',0),(5021,16844,'vek_beam04_green',0),(5022,16845,'vek_beam04_red',0),(5023,16846,'vek_beam04_yellow',0),(5024,16847,'vek_map',0),(5025,16848,'vek_mapshine',0),(5026,16849,'vek_runes',0),(5027,16850,'vek_sunlight',0),(5028,16856,'fx_off',0),(5029,16858,'knocktoback_enter',0),(5030,16859,'knocktoback_exit',0),(5031,16860,'knocktoback_idle',0),(5032,16861,'result_brick_hit',0),(5033,16863,'status_quest_guide_gives',0),(5034,16864,'trdskl_brick',0),(5035,16871,'result_hand_rings_shimmer',0),(5036,16873,'snd_design_murderer',0),(5037,16879,'design_horse_carrot',0),(5038,16880,'design_rhino_carrot',0),(5039,16881,'design_warg_carrot',0),(5040,16882,'dn_goblin_beam_blue',0),(5041,16883,'dn_goblin_beam_green',0),(5042,16884,'dn_goblin_beam_red',0),(5043,16885,'dn_goblin_beam_yellow',0),(5044,16893,'void_storm',0),(5045,16894,'void_summon_portal',0),(5046,16900,'design_altar_chained',0),(5047,16902,'result_blue_glow',0),(5048,16903,'result_green_glow',0),(5049,16904,'result_orange_glow',0),(5050,16905,'result_purple_glow',0),(5051,16912,'result_drake_breath',0),(5052,16913,'result_napalm',0),(5053,16914,'result_void_fx',0),(5054,16917,'bear_backup',0),(5055,16918,'bear_fall',0),(5056,16919,'bear_idle',0),(5057,16920,'bear_jump',0),(5058,16921,'bear_jump_substitute',0),(5059,16922,'bear_land',0),(5060,16923,'bear_long_fall',0),(5061,16924,'bear_run',0),(5062,16925,'bear_turn_left',0),(5063,16926,'bear_turn_right',0),(5064,16927,'bear_walk',0),(5065,16934,'result_blood_boil',0),(5066,16935,'result_golem_rain',0),(5067,16936,'result_water_ball',0),(5068,16937,'result_water_burst',0),(5069,16938,'result_waterspout_p2p',0),(5070,16941,'cast_aoe_water_blast',0),(5071,16942,'cast_barnicle_blast',0),(5072,16948,'snd_claygolem_attack',0),(5073,16956,'sound_attackspin',0),(5074,16957,'sound_damagelow',0),(5075,16958,'sound_swimwalk',0),(5076,16959,'sound_walkbounce',0),(5077,16960,'sound_wildswingenter',0),(5078,16967,'persist_enrage',0),(5079,16973,'golem_charm',0),(5080,16974,'golem_shutdown',0),(5081,16982,'status_quest_gives_gray',0),(5082,16990,'trdskl_censer',0),(5083,16996,'dusting_off',0),(5084,17004,'snd_net_toss',0),(5085,17011,'result_barrel_break',0),(5086,17012,'result_brain_leaving',0),(5087,17020,'snd_barrel_cannon',0),(5088,17028,'sound_bookdeath',0),(5089,17029,'sound_thunder0',0),(5090,17035,'flock_of_seagulls',0),(5091,17042,'mistmoore_runes_fx',0),(5092,17043,'mistmoore_sun_fx',0),(5093,17045,'swim_backward',0),(5094,17046,'swim_forward',0),(5095,17049,'cast_energy_blob',0),(5096,17050,'cast_energy_blob_p2p',0),(5097,17057,'result_napalm_aoe',0),(5098,17064,'result_blood_puddle',0),(5099,17065,'result_cold_ice_crystals_head',0),(5100,17066,'result_ice_shackles',0),(5101,17067,'result_icicle_impale',0),(5102,17068,'result_snow_dust',0),(5103,17069,'result_void_splat',0),(5104,17072,'attack_bolts',0),(5105,17075,'cast_sword_head',0),(5106,17078,'result_sword_head',0),(5107,17085,'result_steam_column',0),(5108,17093,'sound_footsrape',0),(5109,17094,'sound_runbreathe',0),(5110,17101,'result_mesh_attack',0),(5111,17106,'cast_spin_buff',0),(5112,17109,'result_power_life_drain_p2p',0),(5113,17115,'design_ice_door_blast',0),(5114,17121,'design_rising_stairs_finish_fx',0),(5115,17122,'design_rising_stairs_fx',0),(5116,17129,'result_chomping_skulls',0),(5117,17136,'result_pulsing_note',0),(5118,17142,'design_ice_wall_breaking',0),(5119,17145,'sound_ice_shatter',0),(5120,17148,'cast_lost_souls',0),(5121,17155,'knockeddowntoknees',0),(5122,17156,'meditate',0),(5123,17158,'worship',0),(5124,17161,'cast_lasso',0),(5125,17166,'result_cobwebs',0),(5126,17173,'miragul_puzzle_blue_flasher',0),(5127,17174,'miragul_puzzle_blue_runes',0),(5128,17175,'miragul_puzzle_green_flasher',0),(5129,17176,'miragul_puzzle_green_runes',0),(5130,17177,'miragul_puzzle_lightning_orb',0),(5131,17178,'miragul_puzzle_red_flasher',0),(5132,17179,'miragul_puzzle_red_runes',0),(5133,17180,'miragul_puzzle_spire_beams',0),(5134,17181,'miragul_puzzle_splash_column',0),(5135,17182,'miragul_puzzle_yellow_flasher',0),(5136,17183,'miragul_puzzle_yellow_runes',0),(5137,17186,'cast_barnacle_blast',0),(5138,17193,'najena_face_lava',0),(5139,17200,'najena_dark_rune01',0),(5140,17201,'najena_dark_rune02',0),(5141,17202,'najena_dark_rune03',0),(5142,17203,'najena_dark_rune04',0),(5143,17204,'najena_dark_rune05',0),(5144,17205,'najena_light_rune01',0),(5145,17206,'najena_light_rune02',0),(5146,17207,'najena_light_rune03',0),(5147,17208,'najena_light_rune04',0),(5148,17209,'najena_light_rune05',0),(5149,17210,'najena_puzzle_complete',0),(5150,17211,'1h_dual_wield_enter',0),(5151,17212,'1h_dual_wield_exit',0),(5152,17219,'najena_lava_god_hands',0),(5153,17220,'najena_lava_god_skull',0),(5154,17221,'result_lava_column',0),(5155,17228,'najena_lava_curtain',0),(5156,17229,'najena_rune_key',0),(5157,17232,'cast_heat_sphere',0),(5158,17239,'result_dagger_back',0),(5159,17240,'result_melee_lifetap_p2p',0),(5160,17242,'vocal_idle',0),(5161,17245,'cast_bone_blast_blend',0),(5162,17248,'cast_wavy_bubble_shield',0),(5163,17253,'cast_shield_buff',0),(5164,17260,'result_hammer_buff',0),(5165,17267,'result_forced_shader_hologram',0),(5166,17274,'result_clanging_note',0),(5167,17275,'result_forced_shader_glass',0),(5168,17276,'result_swirling_note',0),(5169,17279,'cast_bone_blast_notes',0),(5170,17284,'result_notes_spiral_frenzy',0),(5171,17286,'vek_door_beam_blue',0),(5172,17287,'vek_door_beam_red',0),(5173,17290,'cast_bubble_ward',0),(5174,17291,'cast_dodge_buff',0),(5175,17294,'cast_shout_aoe',0),(5176,17297,'result_crush_blast',0),(5177,17304,'result_break_chains',0),(5178,17309,'cast_quick_shield',0),(5179,17312,'result_spike_blast',0),(5180,17315,'cast_bubble_ward_out',0),(5181,17318,'cast_shield_deflect',0),(5182,17325,'paper_scatter',0),(5183,17333,'skull_candles_head',0),(5184,17338,'cast_rings_aoe',0),(5185,17344,'design_void_eyes',0),(5186,17345,'design_void_portal',0),(5187,17348,'vocal_combat_idle',0),(5188,17351,'cast_melee_buff',0),(5189,17354,'cast_speed_buff',0),(5190,17355,'cast_wings',0),(5191,17358,'buff_fx',0),(5192,17361,'cast_rune_buff',0),(5193,17362,'cast_rune_spiral_buff',0),(5194,17365,'cast_ice_block',0),(5195,17366,'cast_leaf_buff',0),(5196,17367,'cast_leaf_spiral_buff',0),(5197,17372,'result_nature_storm',0),(5198,17375,'cast_fire_buff',0),(5199,17376,'cast_mental_buff',0),(5200,17381,'result_hail_storm',0),(5201,17382,'result_poison_skulls',0),(5202,17385,'cast_flash_rune_buff',0),(5203,17393,'serve',0),(5204,17399,'guk_barracks_poison',0),(5205,17400,'guk_crystal_cleanse',0),(5206,17401,'guk_temple_splashes_clean',0),(5207,17402,'guk_temple_splashes_poison',0),(5208,17403,'guk_waterfalls_poison',0),(5209,17405,'result_slime_wall',0),(5210,17412,'result_fly_breath',0),(5211,17413,'result_fly_swarm',0),(5212,17420,'result_poison_cloud_explosion',0),(5213,17421,'result_poison_splat',0),(5214,17422,'result_skull_attack_p2p',0),(5215,17423,'result_troll_curse',0),(5216,17430,'korsha_lift_blast',0),(5217,17431,'result_object_sparkles_blue',0),(5218,17432,'result_object_sparkles_green',0),(5219,17433,'result_object_sparkles_red',0),(5220,17434,'result_object_sparkles_white',0),(5221,17441,'result_head_flames',0),(5222,17447,'design_lamp_ignite',0),(5223,17449,'mr_lamp_fx_01',0),(5224,17450,'mr_lamp_fx_02',0),(5225,17451,'mr_lamp_fx_03',0),(5226,17452,'mr_lamp_fx_04',0),(5227,17453,'mr_lamp_fx_05',0),(5228,17454,'mr_lamp_fx_06',0),(5229,17455,'mr_lamp_ignite_sound',0),(5230,17456,'mr_lamp_sounds_finish',0),(5231,17457,'mr_lamp_sounds_start',0),(5232,17463,'design_result_black_out',0),(5233,17465,'result_bat_scare',0),(5234,17467,'whistle_toot_01',0),(5235,17468,'whistle_toot_02',0),(5236,17469,'whistle_toot_03',0),(5237,17470,'whistle_toot_04',0),(5238,17471,'whistle_toot_05',0),(5239,17472,'whistle_toot_06',0),(5240,17473,'whistle_toot_07',0),(5241,17474,'whistle_toot_08',0),(5242,17475,'whistle_toot_09',0),(5243,17476,'whistle_toot_10',0),(5244,17477,'whistle_toot_11',0),(5245,17478,'whistle_toot_12',0),(5246,17479,'whistle_toot_13',0),(5247,17480,'whistle_toot_14',0),(5248,17486,'eq2_music1',0),(5249,17487,'eq2_music2',0),(5250,17488,'frost_blast',0),(5251,17489,'fudge_drip',0),(5252,17490,'ice_blast_sound',0),(5253,17491,'icecream_drip',0),(5254,17494,'server_idle',0),(5255,17495,'server_shutdown',0),(5256,17496,'server_start',0),(5257,17502,'hourglass_active',0),(5258,17503,'hourglass_idle',0),(5259,17509,'frosty_crown',0),(5260,17512,'bf_lightning_gate_rm5',0),(5261,17513,'bf_lightning_gate_rm9',0),(5262,17516,'cast_void_portal',0),(5263,17519,'result_crystal_trap',0),(5264,17526,'lights_eyes',0),(5265,17527,'lights_pumpkin',0),(5266,17528,'result_pumpkin_smash',0),(5267,17534,'design_fairy_pet',0),(5268,17539,'cast_void_energy_cloud',0),(5269,17540,'cast_void_rune_barrier',0),(5270,17541,'cast_void_rune_circle',0),(5271,17543,'design_fist_fireworks',0),(5272,17545,'result_void_energy_barrier',0),(5273,17546,'result_void_energy_blast',0),(5274,17547,'result_void_energy_wave',0),(5275,17550,'cast_lightning_beam_converge',0),(5276,17551,'cast_lightning_beam_point',0),(5277,17552,'cast_lightning_blastdown',0),(5278,17559,'result_flesh_peel',0),(5279,17560,'result_god_spell_anashti_sul',0),(5280,17561,'result_god_spell_rodcet_nife',0),(5281,17569,'vp_shissar_new',0),(5282,17570,'vp_shissar_old',0),(5283,17577,'result_greenmist_attack_p2p',0),(5284,17583,'design_cannon_blast',0),(5285,17584,'design_cannon_chargeup',0),(5286,17585,'design_inno_cannon_fire1',0),(5287,17586,'design_inno_cannon_fire2',0),(5288,17589,'cast_energy_charge_up',0),(5289,17594,'mr_chargeup_sound',0),(5290,17595,'mr_lightning_chargeup',0),(5291,17597,'zepplin_enter',0),(5292,17598,'zepplin_exit',0),(5293,17599,'zepplin_fall',0),(5294,17600,'zepplin_idle',0),(5295,17601,'zepplin_jump',0),(5296,17602,'zepplin_land',0),(5297,17603,'zepplin_run',0),(5298,17604,'zepplin_walk',0),(5299,17610,'idle_sound',0),(5300,17613,'zeppelin_enter',0),(5301,17614,'zeppelin_exit',0),(5302,17615,'zeppelin_fall',0),(5303,17616,'zeppelin_glide',0),(5304,17617,'zeppelin_idle',0),(5305,17618,'zeppelin_jump',0),(5306,17619,'zeppelin_land',0),(5307,17620,'zeppelin_run',0),(5308,17621,'zeppelin_walk',0),(5309,17622,'zepplin_glide',0),(5310,17625,'cast_energy_blast_aoe',0),(5311,17630,'result_energy_wave_p2p',0),(5312,17637,'result_void_implode',0),(5313,17639,'void_beam_sound',0),(5314,17640,'void_door_beam',0),(5315,17647,'persist_evil_stun',0),(5316,17648,'result_spear_hit',0),(5317,17650,'trdskl_spear',0),(5318,17656,'energy_flow_sound',0),(5319,17658,'mistmoore_energy_flow01',0),(5320,17659,'mistmoore_energy_flow02',0),(5321,17660,'mistmoore_energy_flow03',0),(5322,17661,'mistmoore_energy_flow04',0),(5323,17662,'mistmoore_energy_flow05',0),(5324,17663,'result_lightning_cage',0),(5325,17664,'result_rune_ethernaughts',0),(5326,17667,'burrow',0),(5327,17668,'burrow_sound',0),(5328,17672,'design_chain_release',0),(5329,17673,'design_chained',0),(5330,17675,'mistmoore_coffin_glow',0),(5331,17683,'void_blast_wave',0),(5332,17686,'blast_bolt',0),(5333,17689,'cast_speed_trail',0),(5334,17692,'result_cyclone_bones',0),(5335,17695,'cast_hand_slash',0),(5336,17700,'result_hand_choke',0),(5337,17701,'result_spike_trap',0),(5338,17702,'result_string_trap',0),(5339,17703,'run_sound',0),(5340,17705,'wood_sound',0),(5341,17713,'void_portal_sound',0),(5342,17714,'void_summon_sound',0),(5343,17715,'void_teleporter',0),(5344,17723,'varsoon_portal_collapse',0),(5345,17724,'varsoon_void_portal',0),(5346,17731,'result_void_tether_p2p',0),(5347,17733,'varsoon_crystal_1',0),(5348,17734,'varsoon_crystal_2',0),(5349,17735,'varsoon_crystal_3',0),(5350,17741,'design_blue_sun',0),(5351,17742,'design_red_sun',0),(5352,17743,'design_red_sun_sound',0),(5353,17744,'design_sun_sound',0),(5354,17746,'result_void_crystal_p2p',0),(5355,17748,'void_beam_blue',0),(5356,17749,'void_beam_red',0),(5357,17752,'cast_5',0),(5358,17756,'design_lattice_activate',0),(5359,17757,'design_void_energy_activate',0),(5360,17760,'void_energy_activate_sound',0),(5361,17761,'void_energy_sound',0),(5362,17768,'result_blast_ring',0),(5363,17770,'void_energy_barrier',0),(5364,17771,'void_energy_barrier_blast',0),(5365,17779,'void_energy_channeling_p2p',0),(5366,17785,'design_result_cloudy_head',0),(5367,17787,'result_dark_mist',0),(5368,17788,'result_sparkle_mist',0),(5369,17791,'cast_meteor_storm',0),(5370,17796,'result_meteor_storm',0),(5371,17797,'result_neg_flux',0),(5372,17798,'result_neg_flux_storm',0),(5373,17799,'result_void_explode',0),(5374,17800,'result_void_ragestorm',0),(5375,17801,'result_void_storm',0),(5376,17804,'cast_manta_bolt_p2p',0),(5377,17805,'cast_manta_tail_beam',0),(5378,17806,'cast_manta_tail_flare',0),(5379,17807,'cast_nether_blast',0),(5380,17808,'cast_nether_storm',0),(5381,17811,'cast_sucking_charge_up',0),(5382,17814,'result_anashti_curse',0),(5383,17815,'result_anashti_tempest',0),(5384,17818,'anashti_summon',0),(5385,17819,'anashti_transform',0),(5386,17820,'anashti_vortex',0),(5387,17823,'attack_breath_inhale',0),(5388,17824,'attack_burst',0),(5389,17825,'attack_dark_breath',0),(5390,17826,'attack_wing_bolts',0),(5391,17833,'result_misty_snare',0),(5392,17836,'cast_arcane_blast_aoe',0),(5393,17841,'result_melee_swipe',0),(5394,17842,'result_melee_wild_swipe',0),(5395,17847,'cast_sparkling_dust_aoe',0),(5396,17854,'result_gnollslayer',0),(5397,17855,'result_gnollslayer_burst',0),(5398,17856,'result_skull_debuff',0),(5399,17863,'result_quick_heal',0),(5400,17866,'bear_tail',0),(5401,17869,'bear_sprint',0),(5402,17872,'bear_attack_sound',0),(5403,17873,'bear_battlecry_sound',0),(5404,17874,'bear_dead_sound',0),(5405,17875,'bear_deadfall_sound',0),(5406,17876,'bear_headshake_sound',0),(5407,17877,'bear_idle_sound',0),(5408,17878,'bear_idle_sound_omit',0),(5409,17879,'bear_ouch_sound',0),(5410,17880,'bear_sniff_sound',0),(5411,17886,'fae_dark_bear_backup',0),(5412,17887,'fae_dark_bear_idle',0),(5413,17888,'fae_dark_bear_jump',0),(5414,17889,'fae_dark_bear_jump_substitute',0),(5415,17890,'fae_dark_bear_run',0),(5416,17891,'fae_dark_bear_sprint',0),(5417,17892,'fae_dark_bear_turn_left',0),(5418,17893,'fae_dark_bear_turn_right',0),(5419,17894,'fae_dark_bear_walk',0),(5420,17895,'fae_light_bear_backup',0),(5421,17896,'fae_light_bear_idle',0),(5422,17897,'fae_light_bear_jump',0),(5423,17898,'fae_light_bear_jump_substitute',0),(5424,17899,'fae_light_bear_run',0),(5425,17900,'fae_light_bear_sprint',0),(5426,17901,'fae_light_bear_turn_left',0),(5427,17902,'fae_light_bear_turn_right',0),(5428,17903,'fae_light_bear_walk',0),(5429,17904,'froglok_bear_backup',0),(5430,17905,'froglok_bear_idle',0),(5431,17906,'froglok_bear_jump',0),(5432,17907,'froglok_bear_jump_substitute',0),(5433,17908,'froglok_bear_run',0),(5434,17909,'froglok_bear_sprint',0),(5435,17910,'froglok_bear_turn_left',0),(5436,17911,'froglok_bear_turn_right',0),(5437,17912,'froglok_bear_walk',0),(5438,17918,'footstep_sound',0),(5439,17925,'result_fireworks_flower',0),(5440,17926,'result_fireworks_foamy_burst',0),(5441,17927,'result_fireworks_rainbow',0),(5442,17929,'tiered_blast_cone',0),(5443,17930,'tiered_blood_lust',0),(5444,17931,'tiered_crush_blast',0),(5445,17932,'tiered_cyclone',0),(5446,17933,'tiered_defensive_buff',0),(5447,17934,'tiered_dustpuff_rfoot',0),(5448,17935,'tiered_flash_weapon',0),(5449,17936,'tiered_glow_distort',0),(5450,17937,'tiered_motion_lines',0),(5451,17938,'tiered_motion_lines_sub',0),(5452,17939,'tiered_offensive_buff',0),(5453,17940,'tiered_shout',0),(5454,17941,'tiered_sparkle_trail_weapon',0),(5455,17942,'tiered_sparks_hit',0),(5456,17943,'tiered_taunt',0),(5457,17944,'tiered_weapon_trail_fire',0),(5458,17950,'gathering_end',0),(5459,17951,'gathering_loop',0),(5460,17952,'gathering_start',0),(5461,17953,'idle_afraid',0),(5462,17954,'idle_angry',0),(5463,17957,'bearwalk',0),(5464,17963,'tiered_blast_hit',0),(5465,17964,'tiered_flash',0),(5466,17965,'tiered_melee_swipe',0),(5467,17966,'tiered_shield',0),(5468,17967,'tiered_slash_hit',0),(5469,17975,'tiered_shield_blast',0),(5470,17976,'tiered_slow',0),(5471,17982,'design_powerarray_electric',0),(5472,17983,'design_powerarray_void',0),(5473,17984,'gathering_enter',0),(5474,17985,'gathering_exit',0),(5475,17988,'attack_disarm',0),(5476,17992,'design_ice_fan_side',0),(5477,17993,'design_ice_fan_up',0),(5478,17994,'design_najena_barrier',0),(5479,17997,'sound_attack_disarm',0),(5480,17998,'sound_fan_start',0),(5481,17999,'sound_wind_blast',0),(5482,18000,'tiered_rune_buff',0),(5483,18006,'electric_fx',0),(5484,18008,'particle_mood_idle',0),(5485,18010,'sound_buff_electric',0),(5486,18011,'sound_buff_void',0),(5487,18012,'void_fx',0),(5488,18018,'design_najena_electric_water',0),(5489,18020,'result_dragon_breath_p2p',0),(5490,18021,'result_electric_beam_p2p',0),(5491,18022,'result_void_beam_p2p',0),(5492,18028,'design_najena_fire',0),(5493,18029,'design_najena_lightning',0),(5494,18030,'design_najena_poison',0),(5495,18031,'design_najena_portals',0),(5496,18032,'design_najena_snow',0),(5497,18033,'design_najena_water',0),(5498,18039,'elemental_fire_hands',0),(5499,18040,'fire_summon_portal',0),(5500,18043,'sound_fire_vortex',0),(5501,18046,'badger_buff',0),(5502,18051,'mushroom_buff',0),(5503,18053,'snake_buff',0),(5504,18056,'cast_lava_shield',0),(5505,18061,'result_rock_blast_wave',0),(5506,18063,'summon_fx',0),(5507,18064,'transform_fx',0),(5508,18072,'tiered_anger_buff',0),(5509,18073,'tiered_hand_buff',0),(5510,18079,'design_fire_wall',0),(5511,18080,'design_fire_wall_opening',0),(5512,18081,'design_rock_wall',0),(5513,18082,'design_rock_wall_breaking',0),(5514,18085,'aoe_ice_blast',0),(5515,18086,'aoe_rock_blast',0),(5516,18087,'cast_air_charge',0),(5517,18088,'cast_earth_charge',0),(5518,18089,'cast_fire_charge',0),(5519,18090,'cast_ice_blast_out',0),(5520,18091,'cast_ice_column',0),(5521,18094,'cast_water_charge',0),(5522,18101,'persist_book_dervish',0),(5523,18107,'design_elemental_wall',0),(5524,18108,'design_elemental_wall_breaking',0),(5525,18111,'sound_electric',0),(5526,18112,'sound_rock_breaking',0),(5527,18113,'tiered_bubble_pop',0),(5528,18114,'tiered_power_gather',0),(5529,18115,'tiered_quick_heal',0),(5530,18116,'tiered_rune_in_buff',0),(5531,18117,'tiered_rune_out_buff',0),(5532,18118,'tiered_speed',0),(5533,18119,'tiered_spikes_hit',0),(5534,18120,'tiered_stifle',0),(5535,18128,'tiered_defense_buff',0),(5536,18136,'tiered_bubble_shield',0),(5537,18137,'tiered_offense_buff',0),(5538,18138,'tiered_root',0),(5539,18146,'tiered_charge_up',0),(5540,18154,'tiered_bubble_shield_in',0),(5541,18155,'tiered_evil_rune_base',0),(5542,18156,'tiered_good_rune_base',0),(5543,18157,'tiered_skull_lifetap',0),(5544,18165,'tiered_boiling_circle',0),(5545,18173,'tiered_cloud_blast',0),(5546,18174,'tiered_diseased',0),(5547,18175,'tiered_grip_blast',0),(5548,18183,'tiered_flash_vanish',0),(5549,18184,'tiered_rune_base',0),(5550,18185,'tiered_sparkle_cling',0),(5551,18193,'tiered_dark_mist',0),(5552,18194,'tiered_mana_drain_p2p',0),(5553,18200,'design_electric_barrier_round',0),(5554,18201,'design_fire_barrier_round',0),(5555,18202,'design_poison_barrier_round',0),(5556,18203,'design_snow_barrier_round',0),(5557,18204,'design_water_barrier_round',0),(5558,18207,'tiered_lost_souls',0),(5559,18215,'tiered_rock_shield',0),(5560,18216,'tiered_stance_base',0),(5561,18217,'waist_tracking_off_trigger',0),(5562,18224,'result_forced_shader_soot',0),(5563,18226,'tiered_energy_blob_p2p',0),(5564,18227,'tiered_heal_hands_blast',0),(5565,18228,'tiered_healing_rays',0),(5566,18236,'tiered_blessed_hand',0),(5567,18237,'tiered_castigate',0),(5568,18238,'tiered_sparkle_swirl',0),(5569,18244,'design_void_barrier',0),(5570,18252,'tiered_defense_buff_brawler',0),(5571,18260,'tiered_feet_buff',0),(5572,18261,'tiered_feet_sparks',0),(5573,18262,'tiered_flame_burst',0),(5574,18263,'tiered_frenzy',0),(5575,18264,'tiered_hand_sparks',0),(5576,18265,'tiered_offense_buff_brawler',0),(5577,18266,'tiered_rune_buff_brawler',0),(5578,18267,'tiered_sparkle_scan_up',0),(5579,18275,'tiered_balance_buff_brawler',0),(5580,18276,'tiered_focus_spark',0),(5581,18277,'tiered_second_skin',0),(5582,18278,'tiered_sonic_punch',0),(5583,18279,'tiered_wavy_shield_out',0),(5584,18287,'snd_ape',0),(5585,18288,'snd_bear_roar',0),(5586,18289,'snd_hawk_scream',0),(5587,18290,'snd_monkey',0),(5588,18291,'snd_owl_hoot',0),(5589,18297,'design_fae_drake_pet',0),(5590,18300,'snd_wave_crash',0),(5591,18301,'tiered_mountain',0),(5592,18302,'tiered_phoenix_blast',0),(5593,18303,'tiered_plasma_burst',0),(5594,18304,'tiered_water_burst',0),(5595,18312,'tiered_dragon_breath',0),(5596,18313,'tiered_fear_skulls',0),(5597,18314,'tiered_hand_flare',0),(5598,18315,'tiered_heart_beat',0),(5599,18321,'design_dark_rez',0),(5600,18322,'design_void_dome',0),(5601,18323,'heal_lifetap_p2p',0),(5602,18324,'iksar_ghost_rez_p2p',0),(5603,18327,'tiered_skull',0),(5604,18333,'design_gas_fire_blast',0),(5605,18334,'design_gas_fire_warning',0),(5606,18336,'result_void_fx_alt',0),(5607,18342,'design_boiling_energy_blast',0),(5608,18343,'design_boiling_energy_warning',0),(5609,18346,'sound_electric_burst',0),(5610,18349,'cast_boiling_energy',0),(5611,18353,'design_gas_fire_blast_up',0),(5612,18354,'design_gas_fire_warning_up',0),(5613,18355,'design_void_dome_blue',0),(5614,18356,'design_void_dome_red',0),(5615,18363,'result_arc_tether_p2p',0),(5616,18364,'result_rose_petals',0),(5617,18372,'tiered_plasma_hit',0),(5618,18375,'cast_back_rune_wheel',0),(5619,18376,'cast_base_rune_wheel',0),(5620,18377,'cast_forward_rune_wheel',0),(5621,18383,'tiered_agility_buff',0),(5622,18384,'tiered_charge_weapon',0),(5623,18385,'tiered_energy_beam_p2p',0),(5624,18386,'tiered_fire_slam',0),(5625,18387,'tiered_fire_tube',0),(5626,18388,'tiered_hand_rings',0),(5627,18389,'tiered_head_ring',0),(5628,18390,'tiered_intellect_buff',0),(5629,18391,'tiered_rays_out',0),(5630,18392,'tiered_rune_drop_base',0),(5631,18393,'tiered_rune_forward',0),(5632,18394,'tiered_rune_rise_base',0),(5633,18395,'tiered_rune_rise_buff',0),(5634,18396,'tiered_rune_root',0),(5635,18397,'tiered_rune_swirl',0),(5636,18398,'tiered_self_lifetap',0),(5637,18399,'tiered_stamina_buff',0),(5638,18400,'tiered_strength_buff',0),(5639,18401,'tiered_weapon_buff_charge',0),(5640,18402,'tiered_wisdom_buff',0),(5641,18410,'tiered_blast_circle',0),(5642,18411,'tiered_chain_root',0),(5643,18412,'tiered_cold_blast',0),(5644,18413,'tiered_column_blast_circle',0),(5645,18414,'tiered_fire_column',0),(5646,18415,'tiered_fireball_p2p',0),(5647,18416,'tiered_frostball_p2p',0),(5648,18417,'tiered_glacial_wall',0),(5649,18418,'tiered_hand_runes',0),(5650,18419,'tiered_ice_root',0),(5651,18420,'tiered_icicle_blast_p2p',0),(5652,18421,'tiered_particle_transfer_p2p',0),(5653,18422,'tiered_rune_chain_swirl',0),(5654,18423,'tiered_windy_tube_p2p',0),(5655,18431,'tiered_blast_cone_forward',0),(5656,18432,'tiered_cold_fusion',0),(5657,18433,'tiered_dots_explode',0),(5658,18434,'tiered_forced_shader_burst',0),(5659,18435,'tiered_frosty_swirls',0),(5660,18436,'tiered_magic_waves',0),(5661,18437,'tiered_ring_blast_p2p',0),(5662,18440,'cast_enchanter_wheel_back',0),(5663,18441,'cast_enchanter_wheel_base',0),(5664,18442,'cast_enchanter_wheel_forward',0),(5665,18445,'cast_summoner_wheel_back',0),(5666,18446,'cast_summoner_wheel_base',0),(5667,18447,'cast_summoner_wheel_forward',0),(5668,18451,'tiered_poisonball_p2p',0),(5669,18452,'tiered_poisoned',0),(5670,18453,'tiered_rune_spikes_swirl',0),(5671,18454,'tiered_spikes_root',0),(5672,18462,'tiered_column_poison_blast',0),(5673,18463,'tiered_hand_evil_runes',0),(5674,18464,'tiered_poison_breath',0),(5675,18467,'cast_hand_energy_artifact',0),(5676,18471,'design_hand_energy_artifact',0),(5677,18473,'result_sparkles_crackle_out',0),(5678,18474,'result_wings_grow',0),(5679,18476,'tiered_power_drain_p2p',0),(5680,18479,'cast_flash_jump_attack',0),(5681,18484,'result_forced_shader_rock_blue',0),(5682,18485,'result_forced_shader_rock_green',0),(5683,18486,'result_forced_shader_rock_purple',0),(5684,18487,'result_forced_shader_rock_yellow',0),(5685,18488,'result_iksar_statue_beam_p2p',0),(5686,18489,'result_root_magic',0),(5687,18490,'result_stifle_magic',0),(5688,18497,'result_shackles_void',0),(5689,18503,'design_bixie_pet',0),(5690,18504,'design_bones_shockwave',0),(5691,18505,'design_void_shield',0),(5692,18508,'cast_column_blast_circle',0),(5693,18509,'cast_goo_bubble_bursting',0),(5694,18512,'cast_raise_dead_column',0),(5695,18515,'result_bone_cyclone',0),(5696,18516,'result_cold_blast_snow',0),(5697,18517,'result_flame_burst',0),(5698,18518,'result_gloop_root',0),(5699,18525,'result_boot_kick',0),(5700,18526,'result_sonic_trail',0),(5701,18532,'design_barrier_void',0),(5702,18533,'design_er_light_beam_p2p',0),(5703,18534,'design_er_target_cube',0),(5704,18540,'design_erudin_column_fx',0),(5705,18541,'design_shield_drop',0),(5706,18544,'sound_electrified',0),(5707,18545,'sound_shield_drop',0),(5708,18548,'attack_eye_beams',0),(5709,18551,'charge_mouth_fx',0),(5710,18553,'design_gazer_eye_beam_p2p',0),(5711,18554,'fx_eye_beam1',0),(5712,18555,'fx_eye_beam2',0),(5713,18556,'fx_eye_beam3',0),(5714,18557,'fx_eye_beam4',0),(5715,18558,'fx_eye_beam5',0),(5716,18559,'fx_eye_charge',0),(5717,18561,'result_disintegrate',0),(5718,18563,'sound_charge',0),(5719,18564,'sound_charge_blast',0),(5720,18570,'design_erudin_wind_boost',0),(5721,18571,'design_rocket_pack',0),(5722,18574,'wind_blast_sound',0),(5723,18577,'attack_eye_ring',0),(5724,18581,'design_erudin_column_charge',0),(5725,18582,'design_gazer_main_eye_beam_p2p',0),(5726,18584,'result_melt',0),(5727,18586,'sit',0),(5728,18587,'sit_to_idle',0),(5729,18593,'design_erudin_gazer_barrier',0),(5730,18595,'power_on',0),(5731,18601,'design_erudin_gun_plugged',0),(5732,18602,'design_erudin_gun_unplugged',0),(5733,18603,'habitat01',0),(5734,18604,'habitat02',0),(5735,18605,'habitat03',0),(5736,18606,'idle01_stone',0),(5737,18607,'idle_stone',0),(5738,18609,'scarecrow_post_idle',0),(5739,18611,'shield_bash',0),(5740,18617,'design_bat_pet',0),(5741,18619,'result_bubble_glow',0),(5742,18620,'result_leaf_blow_glow',0),(5743,18627,'result_splat_add',0),(5744,18632,'cast_summon',0),(5745,18634,'design_guardian_wisp_summon_p2p',0),(5746,18636,'result_buble_leaf_blast',0),(5747,18642,'design_eru_book_cyclone',0),(5748,18643,'design_eru_book_ramp',0),(5749,18649,'design_erudin_teleport_good',0),(5750,18650,'design_erudin_teleport_trap',0),(5751,18652,'result_teleport_ring_vanish',0),(5752,18654,'tiered_unyielding_will',0),(5753,18662,'tiered_black_hole',0),(5754,18670,'sound_bark',0),(5755,18671,'sound_combat_idle',0),(5756,18672,'sound_dead_fall',0),(5757,18673,'sound_death_whimper',0),(5758,18674,'sound_pant',0),(5759,18675,'sound_sniff',0),(5760,18681,'design_icy_barrier',0),(5761,18683,'result_teleport_icy_vanish',0),(5762,18691,'tiered_acid_storm',0),(5763,18692,'tiered_bone_cage',0),(5764,18693,'tiered_dark_cyclone',0),(5765,18694,'tiered_rift',0),(5766,18695,'tiered_skull_summon',0),(5767,18696,'tiered_skull_swirls',0),(5768,18703,'rain_of_shinies',0),(5769,18706,'cast_gathering_charge_up',0),(5770,18711,'result_charge_tag',0),(5771,18712,'result_nuke_blast',0),(5772,18713,'result_pillar_blast',0),(5773,18714,'result_pillar_slam',0),(5774,18715,'result_precharge_blast',0),(5775,18721,'design_book_shield1',0),(5776,18722,'design_book_shield2',0),(5777,18723,'design_book_shield3',0),(5778,18724,'design_book_summon1',0),(5779,18725,'design_book_summon2',0),(5780,18726,'design_book_summon3',0),(5781,18729,'badge_acquired',0),(5782,18733,'cooked/characters/ec/core/mounts/pegasus/pegasus_glide.anim',0),(5783,18734,'design_claw_face',0),(5784,18736,'pegasus_glide',0),(5785,18737,'pegasus_idle',0),(5786,18738,'pegasus_run',0),(5787,18739,'pegasus_walk',0),(5788,18741,'sound_vortex',0),(5789,18746,'coin_drop_snd',0),(5790,18748,'design_coin_drop',0),(5791,18754,'design_air_portal',0),(5792,18755,'design_fear_portal',0),(5793,18756,'design_growth_portal',0),(5794,18757,'design_water_portal',0),(5795,18763,'design_clouds_parting',0),(5796,18764,'design_summon',0),(5797,18765,'design_unsummon',0),(5798,18771,'design_death_beam_p2p',0),(5799,18772,'design_statue_death_beam_p2p',0),(5800,18773,'design_statue_power',0),(5801,18774,'design_zapper_bolt_p2p',0),(5802,18781,'result_forced_shader_shadow',0),(5803,18782,'result_ghost_trap',0),(5804,18788,'cooked/characters/ec/core/mounts/pegasus/pegasus_run.anim',0),(5805,18789,'design_coffin_explode',0),(5806,18790,'design_coffin_lid',0),(5807,18791,'design_erollisi_essence',0),(5808,18792,'design_erollisi_evil_essence',0),(5809,18793,'design_light_rays',0),(5810,18795,'pegasus_fly',0),(5811,18798,'cast_enter',0),(5812,18799,'cast_exit',0),(5813,18800,'cast_idle',0),(5814,18806,'design_marr_godly_light',0),(5815,18807,'design_marr_godly_teleport',0),(5816,18809,'result_sparkles_cling_drop_bounce',0),(5817,18815,'design_flaming_pumpkin_p2p',0),(5818,18818,'snd_splat',0),(5819,18819,'trdskl_flaming_pumpkin',0),(5820,18826,'result_cold_summon_portal',0),(5821,18827,'result_teleport_blast_up',0),(5822,18828,'result_teleport_fold',0),(5823,18830,'sound_attack_grunt',0),(5824,18831,'sound_attack_stab',0),(5825,18832,'sound_attack_vo',0),(5826,18833,'sound_attack_vo_01',0),(5827,18834,'sound_attack_whip_high',0),(5828,18835,'sound_attack_whip_low',0),(5829,18836,'sound_attack_whip_low_01',0),(5830,18837,'sound_attack_whirl',0),(5831,18838,'sound_cast_enter_bodynoise_01',0),(5832,18839,'sound_cast_enter_bodynoise_02',0),(5833,18840,'sound_cast_enter_roar',0),(5834,18841,'sound_cast_exit_roar',0),(5835,18842,'sound_cast_exit_spring',0),(5836,18843,'sound_cast_idle',0),(5837,18844,'sound_combat_art_buff_bodynoise_01',0),(5838,18845,'sound_combat_art_buff_bodynoise_02',0),(5839,18846,'sound_combat_art_buff_roar',0),(5840,18847,'sound_footstep_deep',0),(5841,18848,'sound_footstep_small',0),(5842,18849,'sound_idle_bodynoise',0),(5843,18850,'sound_idle_breath',0),(5844,18851,'sound_idle_breath_01',0),(5845,18852,'sound_rockbody',0),(5846,18853,'sound_roperbodynoise_quick',0),(5847,18854,'sound_roperbodynoise_slow',0),(5848,18857,'cast_ice_pulse',0),(5849,18858,'cast_icicle_spin_blast',0),(5850,18863,'result_icicle_hit',0),(5851,18866,'attack_head_butt',0),(5852,18867,'attack_trample',0),(5853,18874,'result_lightning_bolt_blast',0),(5854,18875,'result_mana_drain_p2p',0),(5855,18876,'result_rainy_black_cloud',0),(5856,18877,'result_spikes_hit',0),(5857,18882,'cast_stomp_blast_aoe',0),(5858,18885,'result_banish',0),(5859,18886,'result_banish_wisps_p2p',0),(5860,18887,'result_icicle_storm',0),(5861,18893,'design_ice_chains',0),(5862,18895,'screech_attack',0),(5863,18897,'sound_head_butt',0),(5864,18903,'design_bone_barrier',0),(5865,18905,'result_fireworks_shinies',0),(5866,18908,'cannon_blast',0),(5867,18913,'kneel_enter',0),(5868,18914,'kneel_exit',0),(5869,18915,'kneel_idle',0),(5870,18916,'result_octopus_cannon_p2p',0),(5871,18917,'result_octopus_splat_grab',0),(5872,18923,'design_vd_bone_swirls',0),(5873,18924,'design_vd_portal',0),(5874,18925,'design_void_tainted',0),(5875,18926,'flight_path_dawn',0),(5876,18933,'result_plasma_bolt_p2p',0),(5877,18938,'cast_sea_dragon_breath',0),(5878,18939,'cast_sea_dragon_inhale',0),(5879,18940,'cast_sea_dragon_powerup',0),(5880,18942,'converse01',0),(5881,18943,'converse02',0),(5882,18945,'panda_chi',0),(5883,18947,'sit_eat',0),(5884,18948,'yells_charge',0),(5885,18954,'hover_idle',0),(5886,18960,'design_hedge_marker',0),(5887,18961,'design_sol_lock_symbol',0),(5888,18962,'h_sword_attack',0),(5889,18964,'panda_dance01',0),(5890,18965,'panda_dance02',0),(5891,18966,'result_sea_dragon_buff_aoe',0),(5892,18972,'design_marr_sword_blast',0),(5893,18973,'design_vision_plane_spires',0),(5894,18979,'design_sol_chapel_debris',0),(5895,18985,'design_hole_pillar_corruption',0),(5896,18991,'design_sol_coffin_body_fx',0),(5897,18997,'design_spider_face',0),(5898,19003,'design_vd_shrine_blast',0),(5899,19009,'design_hole_summon_circle1',0),(5900,19010,'design_hole_summon_circle2',0),(5901,19011,'design_hole_summon_circle3',0),(5902,19012,'design_hole_summon_circle4',0),(5903,19013,'design_hole_summon_circles',0),(5904,19020,'result_fireworks_rose_petals',0),(5905,19028,'sound_glass_break',0),(5906,19034,'design_fire_lit',0),(5907,19035,'design_rhand_sparkles_out',0),(5908,19036,'design_rhand_stars_out',0),(5909,19037,'design_rune_fire_lit',0),(5910,19040,'sit_fish',0),(5911,19043,'cast_god_blast',0),(5912,19047,'eat_bread',0),(5913,19048,'eat_fish',0),(5914,19051,'cast_magic_portal',0),(5915,19056,'result_fireworks_snowflakes',0),(5916,19057,'result_snowflakes_falling',0),(5917,19063,'design_furnace_fire_blast',0),(5918,19064,'design_golden_fire_lit',0),(5919,19070,'design_personal_void_vortex',0),(5920,19073,'cast_icy_division',0),(5921,19079,'design_fire_elemental_smoke_blast',0),(5922,19080,'design_hole_furnace_charge',0),(5923,19081,'design_hole_furnace_essence',0),(5924,19087,'design_crossed_swords',0),(5925,19088,'design_feet_trail_clockwork',0),(5926,19089,'design_feet_trail_confusion',0),(5927,19090,'design_feet_trail_rose_petals',0),(5928,19091,'design_feet_trail_shamrocks',0),(5929,19092,'design_feet_trail_skulls',0),(5930,19093,'design_feet_trail_snow',0),(5931,19098,'cast_water_shield',0),(5932,19101,'result_diseased',0),(5933,19102,'result_stew_pot_dump',0),(5934,19108,'converse03',0),(5935,19114,'design_vd_shrine_bridge',0),(5936,19115,'design_vd_shrine_dome',0),(5937,19121,'dust_fx',0),(5938,19124,'cast_medusa_snake_attack_aoe',0),(5939,19125,'cast_medusa_snake_attack_p2p',0),(5940,19126,'cast_medusa_snake_buff',0),(5941,19130,'fly_from_roost',0),(5942,19132,'result_medusa_snake_strike',0),(5943,19134,'untrained_enter',0),(5944,19137,'cast_lost_souls_rising',0),(5945,19138,'cast_poison_column_blast',0),(5946,19141,'cast_stone_gaze',0),(5947,19144,'result_eel_spit_p2p',0),(5948,19145,'result_medusa_snake_attack_p2p',0),(5949,19146,'result_poisoned',0),(5950,19152,'design_eru_light_bridge',0),(5951,19153,'design_vd_shrine_bridge1',0),(5952,19154,'design_vd_shrine_bridge2',0),(5953,19157,'cast_poison_daggers',0),(5954,19162,'result_amputation',0),(5955,19163,'result_amputation_blast',0),(5956,19165,'trdskl_bow',0),(5957,19172,'result_dark_wings',0),(5958,19178,'dw_attack_enter',0),(5959,19179,'dw_attack_exit',0),(5960,19180,'dw_attack_hold',0),(5961,19181,'fly_away',0),(5962,19183,'result_fist_rain',0),(5963,19191,'smoke_fx',0),(5964,19199,'trdskl_firefly_escape',0),(5965,19200,'trdskl_firefly_jar',0),(5966,19205,'cast_watching',0),(5967,19208,'result_bullseye',0),(5968,19213,'cast_weapon_chargeup',0),(5969,19214,'cast_weapon_glint_point',0),(5970,19215,'cast_weapon_shudder',0),(5971,19221,'dual_wield_idle01',0),(5972,19222,'habitat04',0),(5973,19228,'design_boulder_roll',0),(5974,19229,'design_boulder_shatter',0),(5975,19230,'design_vd_teleport_fx',0),(5976,19237,'quick_summon_fx',0),(5977,19245,'smoke_fx_short',0),(5978,19248,'cast_ghostly_vanish',0),(5979,19253,'result_ghostly_possession_p2p',0),(5980,19255,'sound_big_footstep',0),(5981,19256,'sound_roehn_theer_cast_roar',0),(5982,19257,'sound_roehn_theer_cast_roar_1',0),(5983,19258,'sound_roehn_theer_combat_art_buff_roar',0),(5984,19259,'sound_roehn_theer_combat_idle_wings',0),(5985,19260,'sound_roehn_theer_death_roar',0),(5986,19261,'sound_roehn_theer_dodge_grunt',0),(5987,19262,'sound_roehn_theer_footstep_deep',0),(5988,19263,'sound_roehn_theer_footstep_light',0),(5989,19264,'sound_roehn_theer_grunt_quick',0),(5990,19265,'sound_roehn_theer_hit',0),(5991,19266,'sound_roehn_theer_idle_04_knuckles',0),(5992,19267,'sound_roehn_theer_idle_hiss',0),(5993,19268,'sound_roehn_theer_idle_hiss_light',0),(5994,19269,'sound_roehn_theer_ouch',0),(5995,19270,'sound_roehn_theer_sheath',0),(5996,19271,'sound_roehn_theer_shield_shove_grunt',0),(5997,19272,'sound_roehn_theer_sit_wings_short',0),(5998,19273,'sound_roehn_theer_stomp',0),(5999,19274,'sound_roehn_theer_swim_idle',0),(6000,19275,'sound_roehn_theer_sword_attack_grunt',0),(6001,19276,'sound_roehn_theer_sword_attack_grunt_quick',0),(6002,19277,'sound_roehn_theer_sword_swoosh',0),(6003,19278,'sound_roehn_theer_tail_whoosh',0),(6004,19279,'sound_roehn_theer_tail_whoosh_deep',0),(6005,19280,'sound_roehn_theer_unsheath',0),(6006,19281,'sound_roehn_theer_wings',0),(6007,19282,'sound_roehn_theer_wings_1',0),(6008,19289,'mage_combo_trigger',0),(6009,19290,'result_blast_hit',0),(6010,19291,'result_mesh_blast',0),(6011,19292,'result_skull_lifetap',0),(6012,19295,'cast_crackling_rift_summon',0),(6013,19300,'scout_combo_trigger',0),(6014,19302,'sound_attack_grunt_small',0),(6015,19303,'sound_combat_enter_pop',0),(6016,19304,'sound_combat_enter_vox',0),(6017,19305,'sound_combat_enter_woodbreak',0),(6018,19306,'sound_dodge_down',0),(6019,19307,'sound_reverberant_bang',0),(6020,19308,'sound_whip_hit',0),(6021,19309,'swim',0),(6022,19315,'design_eru_lightning_barrier',0),(6023,19316,'design_eru_water_barrier',0),(6024,19322,'design_eru_ring_boundary',0),(6025,19324,'result_eru_tether_p2p',0),(6026,19330,'design_eru_alcove_broken',0),(6027,19331,'design_eru_alcove_working',0),(6028,19332,'design_eru_platform_discharge',0),(6029,19333,'design_eru_platform_summon',0),(6030,19338,'cast_wand_fizzle',0),(6031,19341,'result_lightning_cage_blast',0),(6032,19342,'result_wand_lightning_bolts_p2p',0),(6033,19350,'sound_big_wings',0),(6034,19351,'sound_toxxulia_attack_roar',0),(6035,19352,'sound_toxxulia_bark',0),(6036,19353,'sound_toxxulia_big_footsteps',0),(6037,19354,'sound_toxxulia_cast_roar',0),(6038,19355,'sound_toxxulia_feet_nails',0),(6039,19356,'sound_toxxulia_growl',0),(6040,19357,'sound_toxxulia_grunt',0),(6041,19358,'sound_toxxulia_hiss',0),(6042,19359,'sound_toxxulia_hiss_quiet',0),(6043,19360,'sound_toxxulia_idle_wing_movement_short',0),(6044,19361,'sound_toxxulia_ouch_hit',0),(6045,19362,'sound_toxxulia_scrape',0),(6046,19363,'sound_toxxulia_swallow_crunch_close',0),(6047,19364,'sound_toxxulia_swallow_crunch_open',0),(6048,19365,'sound_toxxulia_swallow_roar',0),(6049,19366,'sound_toxxulia_swallow_slop',0),(6050,19367,'sound_toxxulia_swim',0),(6051,19368,'sound_toxxulia_tail_drop',0),(6052,19369,'sound_toxxulia_walk',0),(6053,19370,'sound_toxxulia_whip',0),(6054,19371,'sound_toxxulia_whip_light',0),(6055,19372,'sound_toxxulia_wing_movement',0),(6056,19373,'sound_toxxulia_wings_flapping',0),(6057,19381,'tiered_confused',0),(6058,19382,'tiered_doppleganger_p2p',0),(6059,19383,'tiered_entranced',0),(6060,19384,'tiered_forced_shader_prism',0),(6061,19385,'tiered_glow_eyes',0),(6062,19386,'tiered_hand_crescent',0),(6063,19387,'tiered_hand_prism',0),(6064,19388,'tiered_mage_cure',0),(6065,19389,'tiered_mage_ring_cure',0),(6066,19390,'tiered_mental_blast',0),(6067,19391,'tiered_mental_damage',0),(6068,19392,'tiered_prism_eyes',0),(6069,19393,'tiered_prism_rain',0),(6070,19394,'tiered_prism_rays',0),(6071,19395,'tiered_prismatic_summon',0),(6072,19396,'tiered_runed_shield',0),(6073,19397,'tiered_spin_stat_buff',0),(6074,19398,'tiered_vanish_reappear',0),(6075,19406,'tiered_mind_rings',0),(6076,19407,'tiered_stunned',0),(6077,19415,'tiered_mind_blast',0),(6078,19416,'tiered_prism_cling',0),(6079,19424,'tiered_crystal_summon',0),(6080,19425,'tiered_magic_summon',0),(6081,19426,'tiered_power_transfer_p2p',0),(6082,19427,'tiered_sucking_tube_p2p',0),(6083,19435,'tiered_bat_attack_p2p',0),(6084,19436,'tiered_crystal_blast',0),(6085,19437,'tiered_crystal_p2p',0),(6086,19438,'tiered_earth_summon',0),(6087,19439,'tiered_quicksand',0),(6088,19440,'tiered_shrink',0),(6089,19448,'tiered_air_summon',0),(6090,19449,'tiered_earthquake',0),(6091,19450,'tiered_elemental_portal',0),(6092,19451,'tiered_fire_summon',0),(6093,19452,'tiered_life_summon',0),(6094,19453,'tiered_plane_shift',0),(6095,19459,'gazer_pained_roar',0),(6096,19462,'sound_gazer_attack02_roar',0),(6097,19463,'sound_gazer_attack03_roar',0),(6098,19464,'sound_gazer_attack_roar',0),(6099,19465,'sound_gazer_attack_woosh',0),(6100,19466,'sound_gazer_attack_woosh_quiet',0),(6101,19467,'sound_gazer_bite_roar',0),(6102,19468,'sound_gazer_bodynoise',0),(6103,19469,'sound_gazer_bodynoise_fall',0),(6104,19470,'sound_gazer_bodynoise_fall_deep',0),(6105,19471,'sound_gazer_bodynoise_fall_dirt',0),(6106,19472,'sound_gazer_bodynoise_long',0),(6107,19473,'sound_gazer_breath',0),(6108,19474,'sound_gazer_breath_grunt',0),(6109,19475,'sound_gazer_combat_art_buff_roar',0),(6110,19476,'sound_gazer_crunch',0),(6111,19477,'sound_gazer_deadfall',0),(6112,19478,'sound_gazer_eyeball_gross',0),(6113,19479,'sound_gazer_eyeball_pop',0),(6114,19480,'sound_gazer_eyeball_pop_quiet',0),(6115,19481,'sound_gazer_eyeball_twirl',0),(6116,19482,'sound_gazer_growl_low',0),(6117,19483,'sound_gazer_grunt_short',0),(6118,19484,'sound_gazer_liddown',0),(6119,19485,'sound_gazer_swim',0),(6120,19486,'sound_gazer_swim_idle',0),(6121,19487,'sound_gazer_whip',0),(6122,19488,'sound_gazer_whip_impact',0),(6123,19489,'sound_gazer_whip_low',0),(6124,19490,'tiered_clouds_head',0),(6125,19491,'tiered_hand_dark_rings',0),(6126,19492,'tiered_heart_summon',0),(6127,19493,'tiered_undead_tide',0),(6128,19494,'tiered_vampirism_p2p',0),(6129,19497,'attack_eat',0),(6130,19502,'perch_idle',0),(6131,19509,'result_steam_cup',0),(6132,19515,'design_glow_full',0),(6133,19516,'design_glow_low',0),(6134,19517,'design_glow_med',0),(6135,19519,'result_energy_drain_p2p',0),(6136,19520,'result_meditate_rings',0),(6137,19526,'design_hole_mines',0),(6138,19527,'design_hole_mines_blast',0),(6139,19530,'sound_mine_blast',0),(6140,19531,'sound_mine_splash',0),(6141,19537,'design_th_platform',0),(6142,19538,'design_th_platform_collapse',0),(6143,19539,'design_th_platform_rift',0),(6144,19547,'sound_displacer_beast_attack_1',0),(6145,19548,'sound_displacer_beast_footstep',0),(6146,19549,'sound_displacer_beast_footstep_dirt',0),(6147,19550,'sound_displacer_beast_hiss',0),(6148,19551,'sound_displacer_beast_idle',0),(6149,19552,'sound_displacer_beast_idle_long',0),(6150,19553,'sound_displacer_beast_whip',0),(6151,19554,'sound_displacer_beast_whip_deep',0),(6152,19555,'sound_displacer_beast_whip_high',0),(6153,19558,'cast_air_sample',0),(6154,19563,'cast_tallonite_lash_cone',0),(6155,19564,'cast_tallonite_lash_summon',0),(6156,19567,'lynx_backup',0),(6157,19568,'lynx_fall',0),(6158,19569,'lynx_idle',0),(6159,19570,'lynx_jump',0),(6160,19571,'lynx_jump_substitute',0),(6161,19572,'lynx_land',0),(6162,19573,'lynx_long_fall',0),(6163,19574,'lynx_run',0),(6164,19575,'lynx_turn_left',0),(6165,19576,'lynx_turn_right',0),(6166,19577,'lynx_walk',0),(6167,19578,'result_tallonite_barb_p2p',0),(6168,19579,'result_trail_tallonite',0),(6169,19582,'attack_throw_boulder',0),(6170,19585,'cast_tallonite_balance',0),(6171,19588,'result_cloud_dot_blast',0),(6172,19589,'result_tallonite_lash_p2p',0),(6173,19596,'result_tallonite_lash_skulls_p2p',0),(6174,19597,'result_tallonite_skull_control',0),(6175,19598,'result_tallonite_sphere',0),(6176,19600,'sound_displacer_beast_attack_2',0),(6177,19601,'sound_displacer_beast_attack_3',0),(6178,19602,'sound_displacer_beast_bark',0),(6179,19603,'sound_displacer_beast_big_purr',0),(6180,19604,'sound_displacer_beast_blade_fall',0),(6181,19605,'sound_displacer_beast_blade_swoosh',0),(6182,19606,'sound_displacer_beast_charge_up_roar',0),(6183,19607,'sound_displacer_beast_dead_1',0),(6184,19608,'sound_displacer_beast_dead_2',0),(6185,19609,'sound_displacer_beast_dodge_thrust_roar',0),(6186,19610,'sound_displacer_beast_fall_small',0),(6187,19611,'sound_displacer_beast_footstep_deep',0),(6188,19612,'sound_displacer_beast_idle_breath',0),(6189,19613,'sound_displacer_beast_ouch',0),(6190,19614,'sound_displacer_beast_ouch_hit',0),(6191,19615,'sound_displacer_beast_pulse',0),(6192,19616,'sound_displacer_beast_pulse_crunch',0),(6193,19617,'sound_displacer_beast_small_purr',0),(6194,19618,'sound_displacer_beast_swim',0),(6195,19626,'sound_pandaman_footstep',0),(6196,19627,'sound_pandaman_idle_breathing',0),(6197,19628,'sound_pegasus_attack',0),(6198,19629,'sound_pegasus_attack_1',0),(6199,19630,'sound_pegasus_attack_4',0),(6200,19631,'sound_pegasus_death_fall',0),(6201,19632,'sound_pegasus_death_niegh',0),(6202,19633,'sound_pegasus_grunt',0),(6203,19634,'sound_pegasus_hooves',0),(6204,19635,'sound_pegasus_hooves_scrapex',0),(6205,19636,'sound_pegasus_idle_1',0),(6206,19637,'sound_pegasus_idle_2',0),(6207,19638,'sound_pegasus_idle_slow',0),(6208,19639,'sound_pegasus_idleloop',0),(6209,19640,'sound_pegasus_limb_whip',0),(6210,19641,'sound_pegasus_ouch_1',0),(6211,19642,'sound_pegasus_ouch_hit',0),(6212,19643,'sound_pegasus_snort_quick',0),(6213,19644,'sound_pegasus_wings_soft',0),(6214,19651,'lynx_idle01',0),(6215,19656,'cast_spin_flash_buff',0),(6216,19657,'cast_tallonite_dagger_blast',0),(6217,19659,'energy_blobs_kick_blast',0),(6218,19661,'result_slow',0),(6219,19666,'cast_tallonite_axe_throw',0),(6220,19667,'cast_tallonite_glow_eyes',0),(6221,19669,'design_sen_lava_falls',0),(6222,19670,'design_sen_lightning_rune_orb',0),(6223,19676,'design_eru_column_protection',0),(6224,19682,'design_theer_fire_forrest',0),(6225,19683,'design_theer_fire_passion',0),(6226,19684,'design_theer_fire_water',0),(6227,19685,'design_theer_fire_wrath',0),(6228,19686,'design_theer_obj_forrest',0),(6229,19687,'design_theer_obj_passion',0),(6230,19688,'design_theer_obj_water',0),(6231,19689,'design_theer_obj_wrath',0),(6232,19690,'design_theer_symbol_blast',0),(6233,19691,'design_theer_symbol_evil',0),(6234,19692,'design_theer_symbol_forrest',0),(6235,19693,'design_theer_symbol_good',0),(6236,19694,'design_theer_symbol_none',0),(6237,19695,'design_theer_symbol_passion',0),(6238,19696,'design_theer_symbol_water',0),(6239,19697,'design_theer_symbol_wrath',0),(6240,19698,'design_theer_wrath_blast',0),(6241,19701,'cast_massive_ring_blast',0),(6242,19706,'result_billowing_energy',0),(6243,19707,'result_seeping_energy',0),(6244,19713,'design_odus_dome_barrier',0),(6245,19715,'result_fiery_sun',0),(6246,19716,'result_healing_flora',0),(6247,19717,'result_singing_wind',0),(6248,19719,'sound_catoplebus_attack_roar_1',0),(6249,19720,'sound_catoplebus_attack_roar_2',0),(6250,19721,'sound_catoplebus_attack_roar_3',0),(6251,19722,'sound_catoplebus_body_movement',0),(6252,19723,'sound_catoplebus_cast_roar',0),(6253,19724,'sound_catoplebus_combat_art_buff_roar',0),(6254,19725,'sound_catoplebus_crunch',0),(6255,19726,'sound_catoplebus_death_roar',0),(6256,19727,'sound_catoplebus_dodge_grunt',0),(6257,19728,'sound_catoplebus_dodge_roar',0),(6258,19729,'sound_catoplebus_footstep',0),(6259,19730,'sound_catoplebus_footstep_deep',0),(6260,19731,'sound_catoplebus_footstep_deep_soft',0),(6261,19732,'sound_catoplebus_idle_grunt',0),(6262,19733,'sound_catoplebus_idle_roar',0),(6263,19734,'sound_catoplebus_idle_sniff',0),(6264,19735,'sound_catoplebus_idle_snort',0),(6265,19736,'sound_catoplebus_slide',0),(6266,19737,'sound_catoplebus_swim',0),(6267,19738,'sound_catoplebus_swim_idle',0),(6268,19739,'sound_catoplebus_tail_whoosh',0),(6269,19740,'sound_cerberus_attack_roar',0),(6270,19741,'sound_cerberus_cast_roar',0),(6271,19742,'sound_cerberus_combat_art_buff_roar',0),(6272,19743,'sound_cerberus_death_fall',0),(6273,19744,'sound_cerberus_death_roar',0),(6274,19745,'sound_cerberus_dodge_bark',0),(6275,19746,'sound_cerberus_dodge_growl',0),(6276,19747,'sound_cerberus_growl',0),(6277,19748,'sound_cerberus_idle_howl_1',0),(6278,19749,'sound_cerberus_idle_howl_2',0),(6279,19750,'sound_cerberus_idle_howl_long',0),(6280,19751,'sound_cerberus_scrape',0),(6281,19752,'sound_cerberus_snarl',0),(6282,19753,'sound_cerberus_swim',0),(6283,19754,'trdskl_transmute_complete',0),(6284,19755,'trdskl_transmute_rings',0),(6285,19763,'sound_goatmen_lf_stomp',0),(6286,19764,'sound_goatmen_armor_long',0),(6287,19765,'sound_goatmen_armor_short_loud',0),(6288,19766,'sound_goatmen_armor_short_quiet',0),(6289,19767,'sound_goatmen_attack_roar',0),(6290,19768,'sound_goatmen_blade_swoosh_1',0),(6291,19769,'sound_goatmen_blade_swoosh_2',0),(6292,19770,'sound_goatmen_body_fall',0),(6293,19771,'sound_goatmen_body_movement_short',0),(6294,19772,'sound_goatmen_bow_enter',0),(6295,19773,'sound_goatmen_bow_exit',0),(6296,19774,'sound_goatmen_bow_getarrow',0),(6297,19775,'sound_goatmen_bow_pullback',0),(6298,19776,'sound_goatmen_bow_release',0),(6299,19777,'sound_goatmen_breath_out',0),(6300,19778,'sound_goatmen_cast_yell',0),(6301,19779,'sound_goatmen_combat_art_buff',0),(6302,19780,'sound_goatmen_death_roar',0),(6303,19781,'sound_goatmen_death_roar_2',0),(6304,19782,'sound_goatmen_footstep',0),(6305,19783,'sound_goatmen_grunt',0),(6306,19784,'sound_goatmen_ouch',0),(6307,19785,'sound_goatmen_scrape',0),(6308,19786,'sound_goatmen_snort',0),(6309,19787,'sound_goatmen_swim',0),(6310,19788,'sound_goatmen_weapon_twirl',0),(6311,19794,'design_pulse_beacon',0),(6312,19795,'design_shard_blast',0),(6313,19797,'pandamen_wildswing_attack',0),(6314,19798,'pulse_sound',0),(6315,19801,'sound_pandamen_bark',0),(6316,19802,'sound_pandamen_bleat',0),(6317,19803,'sound_pandamen_bow_getarrow',0),(6318,19804,'sound_pandamen_bow_pullback',0),(6319,19805,'sound_pandamen_bow_release',0),(6320,19806,'sound_pandamen_bow_sheath',0),(6321,19807,'sound_pandamen_bow_unsheath',0),(6322,19808,'sound_pandamen_charge_roar',0),(6323,19809,'sound_pandamen_dead',0),(6324,19810,'sound_pandamen_eat',0),(6325,19811,'sound_pandamen_footslide',0),(6326,19812,'sound_pandamen_footstep_soft',0),(6327,19813,'sound_pandamen_growl',0),(6328,19814,'sound_pandamen_grunt',0),(6329,19815,'sound_pandamen_idle_grunt',0),(6330,19816,'sound_pandamen_idle_grunt_short',0),(6331,19817,'sound_pandamen_movement_cloth_long',0),(6332,19818,'sound_pandamen_movement_cloth_short',0),(6333,19819,'sound_pandamen_scratch',0),(6334,19820,'sound_pandamen_scratch_pant',0),(6335,19821,'sound_pandamen_sit',0),(6336,19822,'sound_pandamen_swim',0),(6337,19823,'sound_pandamen_whoosh',0),(6338,19829,'evil_theer_energy_buff',0),(6339,19830,'good_theer_energy_buff',0),(6340,19832,'result_balanced_judgement',0),(6341,19833,'result_fiery_flames',0),(6342,19834,'result_theer_debuff_down',0),(6343,19835,'result_theer_debuff_up',0),(6344,19836,'result_theer_mana_drain_p2p',0),(6345,19839,'theer_charge_up',0),(6346,19840,'theer_mana_blast',0),(6347,19845,'cast_wyvern_breath',0),(6348,19846,'cast_wyvern_inhale',0),(6349,19848,'design_erudite_switch_evil',0),(6350,19849,'design_erudite_switch_good',0),(6351,19850,'design_murderball_debuff',0),(6352,19853,'sound_chimera_attack_roar_1',0),(6353,19854,'sound_chimera_attack_roar_2',0),(6354,19855,'sound_chimera_attack_roar_3',0),(6355,19856,'sound_chimera_cast_roar',0),(6356,19857,'sound_chimera_cast_roar_short',0),(6357,19858,'sound_chimera_combat_art_buff_roar',0),(6358,19859,'sound_chimera_dead_fall',0),(6359,19860,'sound_chimera_death_roar',0),(6360,19861,'sound_chimera_dodge_down_roar',0),(6361,19862,'sound_chimera_dodge_grunt',0),(6362,19863,'sound_chimera_footslide',0),(6363,19864,'sound_chimera_footstep',0),(6364,19865,'sound_chimera_footstep_big',0),(6365,19866,'sound_chimera_idle_bird_1',0),(6366,19867,'sound_chimera_idle_bird_2',0),(6367,19868,'sound_chimera_idle_bird_3',0),(6368,19869,'sound_chimera_idle_goat_1',0),(6369,19870,'sound_chimera_idle_goat_2',0),(6370,19871,'sound_chimera_idle_goat_3',0),(6371,19872,'sound_chimera_idle_lion_1',0),(6372,19873,'sound_chimera_idle_lion_2',0),(6373,19874,'sound_chimera_idle_lion_3',0),(6374,19875,'sound_chimera_idle_lion_4',0),(6375,19876,'sound_chimera_idle_wings',0),(6376,19877,'sound_chimera_sit_wings_short',0),(6377,19878,'sound_chimera_snake_stab',0),(6378,19879,'sound_chimera_swim',0),(6379,19880,'sound_chimera_wings_big',0),(6380,19882,'sound_lynx_mount_bare_idle',0),(6381,19883,'sound_lynx_mount_bare_roar_1',0),(6382,19884,'sound_lynx_mount_bare_roar_2',0),(6383,19885,'sound_lynx_mount_footstep_quiet',0),(6384,19886,'sound_lynx_mount_land',0),(6385,19887,'sound_odus_kitten_attack_1',0),(6386,19888,'sound_odus_kitten_attack_2',0),(6387,19889,'sound_odus_kitten_attack_3',0),(6388,19890,'sound_odus_kitten_attack_4',0),(6389,19891,'sound_odus_kitten_combat_exit',0),(6390,19892,'sound_odus_kitten_eat_1',0),(6391,19893,'sound_odus_kitten_fall',0),(6392,19894,'sound_odus_kitten_footstep',0),(6393,19895,'sound_odus_kitten_hiss',0),(6394,19896,'sound_odus_kitten_idle_purr_1',0),(6395,19897,'sound_odus_kitten_lick',0),(6396,19898,'sound_odus_kitten_meow_1',0),(6397,19899,'sound_odus_kitten_meow_2',0),(6398,19900,'sound_odus_kitten_ouch_short',0),(6399,19901,'sound_odus_kitten_scratch',0),(6400,19902,'sound_odus_kitten_sneeze',0),(6401,19903,'sound_odus_kitten_swim',0),(6402,19906,'cast_draconian_breath',0),(6403,19909,'cast_wurm_breath',0),(6404,19910,'cast_wurm_crush_blast',0),(6405,19911,'cast_wurm_inhale',0),(6406,19913,'design_active_eggs',0),(6407,19914,'design_hatched_eggs',0),(6408,19915,'design_inactive_eggs',0),(6409,19917,'result_blinded',0),(6410,19918,'result_crush_rings',0),(6411,19924,'design_summon_fx',1045),(6412,19926,'result_summoning_crystal',1045),(6413,19929,'sound_lynx_armor_1',1045),(6414,19930,'sound_lynx_armor_short',1045),(6415,19939,'toxx_breath_attack',1045),(6416,19940,'toxx_breath_inhale',1045),(6417,19947,'result_floor_pie',1045),(6418,19954,'result_lich_evil_drain_p2p',1045),(6419,19955,'result_lich_good_drain_p2p',1045),(6420,19956,'result_theer_evil_drain',1045),(6421,19957,'result_theer_good_drain',1045),(6422,19964,'result_toxic_debuff',1045),(6423,19967,'toxx_breath_attack01',1045),(6424,19968,'toxx_breath_attack02',1045),(6425,19974,'design_kobold_claw',1045),(6426,19975,'design_toxic_sphere0',1045),(6427,19976,'design_toxic_sphere01',1045),(6428,19977,'design_toxic_sphere02',1045),(6429,19978,'design_toxic_sphere03',1045),(6430,19979,'design_toxic_sphere04',1045),(6431,19980,'design_toxic_sphere05',1045),(6432,19982,'result_toxx_essence_trap_p2p',1045),(6433,19984,'sound_catoplebus_ouch',1045),(6434,19985,'sound_catoplebus_ouch_1',1045),(6435,19986,'sound_catoplebus_ouch_2',1045),(6436,19988,'sound_skeletal_1',1045),(6437,19989,'sound_skeletal_10',1045),(6438,19990,'sound_skeletal_11',1045),(6439,19991,'sound_skeletal_12',1045),(6440,19992,'sound_skeletal_13',1045),(6441,19993,'sound_skeletal_14',1045),(6442,19994,'sound_skeletal_15',1045),(6443,19995,'sound_skeletal_16',1045),(6444,19996,'sound_skeletal_17',1045),(6445,19997,'sound_skeletal_18',1045),(6446,19998,'sound_skeletal_19',1045),(6447,19999,'sound_skeletal_2',1045),(6448,20000,'sound_skeletal_20',1045),(6449,20001,'sound_skeletal_21',1045),(6450,20002,'sound_skeletal_22',1045),(6451,20003,'sound_skeletal_3',1045),(6452,20004,'sound_skeletal_4',1045),(6453,20005,'sound_skeletal_5',1045),(6454,20006,'sound_skeletal_6',1045),(6455,20007,'sound_skeletal_7',1045),(6456,20008,'sound_skeletal_8',1045),(6457,20009,'sound_skeletal_9',1045),(6458,20010,'toxx_chained',1045),(6459,20011,'toxx_vanish',1045),(6460,20017,'design_active_head_001',1045),(6461,20018,'design_active_head_010',1045),(6462,20019,'design_active_head_011',1045),(6463,20020,'design_active_head_100',1045),(6464,20021,'design_active_head_101',1045),(6465,20022,'design_active_head_110',1045),(6466,20023,'design_active_head_111',1045),(6467,20024,'design_tallonite_portal',1045),(6468,20025,'design_teleport_druid_ring',1045),(6469,20028,'cast_arcane_blast',1045),(6470,20029,'cast_crush_blast',1045),(6471,20030,'cast_poison_blast',1045),(6472,20034,'design_mystic_barrier',1045),(6473,20040,'design_blue_flag_pickup',1045),(6474,20041,'design_red_flag_pickup',1045),(6475,20047,'death_impact',1045),(6476,20048,'gorgon_attack_roar_01',1045),(6477,20049,'gorgon_attack_roar_02',1045),(6478,20050,'gorgon_breath_in',1045),(6479,20051,'gorgon_breath_out_long',1045),(6480,20052,'gorgon_breath_out_short',1045),(6481,20053,'gorgon_cast_roar_01',1045),(6482,20054,'gorgon_chewing_close',1045),(6483,20055,'gorgon_chewing_open',1045),(6484,20056,'gorgon_death_impact',1045),(6485,20057,'gorgon_death_roar',1045),(6486,20058,'gorgon_footscrape',1045),(6487,20059,'gorgon_footstep_deep',1045),(6488,20060,'gorgon_footstep_metal',1045),(6489,20061,'gorgon_hooves',1045),(6490,20062,'gorgon_kick_swish',1045),(6491,20063,'gorgon_metal_movement',1045),(6492,20064,'gorgon_metal_movement_deep',1045),(6493,20065,'gorgon_metal_movement_long',1045),(6494,20066,'gorgon_metal_movement_quiet',1045),(6495,20067,'gorgon_metal_scrape',1045),(6496,20068,'gorgon_ouch_headshake',1045),(6497,20069,'gorgon_ouch_impact',1045),(6498,20070,'gorgon_snort',1045),(6499,20071,'gorgon_snort_big',1045),(6500,20072,'gorgon_swim',1045),(6501,20076,'stone_ouch_impact',1045),(6502,20082,'design_blue_flag_trail',1045),(6503,20083,'design_red_flag_trail',1045),(6504,20089,'design_battleground_tower_blue',1045),(6505,20090,'design_battleground_tower_red',1045),(6506,20096,'crystaline_folk_lf',1045),(6507,20097,'crystaline_folk_footstep_big',1045),(6508,20098,'crystaline_folk_footstep_crunch',1045),(6509,20099,'crystaline_folk_stone_debris',1045),(6510,20100,'crystaline_folk_tantrum_1',1045),(6511,20101,'crystaline_folk_tantrum_2',1045),(6512,20102,'crystaline_folk_tantrum_3',1045),(6513,20103,'crystaline_folk_tantrum_body_1',1045),(6514,20104,'crystaline_folk_tantrum_body_2',1045),(6515,20105,'crystaline_folk_tantrum_body_3',1045),(6516,20106,'design_sen_lava_floor',1045),(6517,20109,'cast_mental_blast',1045),(6518,20114,'design_reform_fx',1045),(6519,20117,'attack_breath_crush',1045),(6520,20118,'attack_breath_poison',1045),(6521,20123,'design_drain_theer_fx',1045),(6522,20124,'design_power_aura',1045),(6523,20126,'result_forced_shader_white',1045),(6524,20127,'result_stunned_rings',1045),(6525,20134,'froglock_gathering_search',1045),(6526,20138,'status_quest_completes_storyline',1045),(6527,20139,'status_quest_gives_storyline',1045),(6528,20140,'status_quest_updates_storyline',1045),(6529,20150,'sound_lynx_armor_short_1',1045),(6530,20151,'sound_lynx_mount_bare_roar_3',1045),(6531,20159,'result_forced_shader_rock_red',1045),(6532,20162,'tiered_cleric_wheel_back',1045),(6533,20163,'tiered_cleric_wheel_base',1045),(6534,20164,'tiered_cleric_wheel_forward',1045),(6535,20165,'tiered_hand_cross',1045),(6536,20166,'tiered_hand_leaves',1045),(6537,20167,'tiered_hand_leaves_glowing',1045),(6538,20168,'tiered_hand_pattern',1045),(6539,20169,'tiered_refreshment_summon',1045),(6540,20170,'tiered_smite_p2p',1045),(6541,20178,'jump_falling',1045),(6542,20188,'tiered_angel_wings',1045),(6543,20189,'tiered_bar_heal',1045),(6544,20190,'tiered_divine_burst',1045),(6545,20191,'tiered_divine_essence_summon',1045),(6546,20192,'tiered_head_halo',1045),(6547,20193,'tiered_priest_ring_cure',1045),(6548,20194,'tiered_radiant_glow',1045),(6549,20195,'tiered_resurrect_swirls',1045),(6550,20196,'tiered_small_heal',1045),(6551,20197,'tiered_smite_hit',1045),(6552,20198,'tiered_soothe',1045),(6553,20199,'tiered_toxin_out',1045),(6554,20200,'tiered_water_bubble',1045),(6555,20210,'sound_roehn_theer_stomp_rocks_1',1045),(6556,20211,'sound_roehn_theer_stomp_rocks_2',1045),(6557,20212,'sound_roehn_theer_stomp_rocks_3',1045),(6558,20213,'tiered_flash_heal',1045),(6559,20214,'tiered_ring_shield',1045),(6560,20215,'tiered_scimitar_exploding',1045),(6561,20216,'tiered_scimitar_smite',1045),(6562,20217,'tiered_timer',1045),(6563,20227,'tiered_divine_hit',1045),(6564,20228,'tiered_double_smite_p2p',1045),(6565,20229,'tiered_hand_sparkles',1045),(6566,20230,'tiered_heal_tube_p2p',1045),(6567,20240,'tiered_heal_barrier',1045),(6568,20241,'tiered_smite_blobs_p2p',1045),(6569,20251,'tiered_hammer_smite',1045),(6570,20252,'tiered_hand_cross_dark',1045),(6571,20253,'tiered_hand_sparkles_dark',1045),(6572,20263,'tiered_mental_smite',1045),(6573,20273,'tiered_engulf_flames',1045),(6574,20274,'tiered_gavel_pound',1045),(6575,20275,'tiered_light_cage',1045),(6576,20276,'tiered_swirly_heal',1045),(6577,20277,'tiered_swirly_power_heal',1045),(6578,20287,'trdskl_tinker_fail',1045),(6579,20294,'fire_build_up',1045),(6580,20304,'tiered_feather_summon',1045),(6581,20305,'tiered_phoenix_summon',1045),(6582,20306,'tiered_run_speed_buff',1045),(6583,20307,'tiered_spirit_wolf',1045),(6584,20308,'tiered_wood_root',1045),(6585,20318,'tiered_bat_summon',1045),(6586,20319,'tiered_nature_heal',1045),(6587,20329,'tiered_druid_wheel_base',1045),(6588,20330,'tiered_fire_slam2',1045),(6589,20331,'tiered_hand_leaf',1045),(6590,20332,'tiered_icicle_stab',1045),(6591,20333,'tiered_leaf_burst',1045),(6592,20334,'tiered_leaf_gather',1045),(6593,20335,'tiered_leaf_spin',1045),(6594,20336,'tiered_rings_shrinking',1045),(6595,20337,'tiered_swirly_wisps',1045),(6596,20338,'tiered_wood_spikes',1045),(6597,20346,'panting_wolf_sound',1045),(6598,20349,'tiered_hand_leaf_glowing',1045),(6599,20350,'tiered_leaf_spot_burst',1045),(6600,20351,'tiered_spin_runed_shield',1045),(6601,20352,'tiered_spirit_bear',1045),(6602,20353,'tiered_spirit_lion',1045),(6603,20354,'wolfbackground_sound',1045),(6604,20364,'tiered_growing_spores',1045),(6605,20365,'tiered_healing_grove',1045),(6606,20366,'tiered_ice_spikes',1045),(6607,20367,'tiered_sandstorm',1045),(6608,20368,'tiered_spirit_wolf_summon',1045),(6609,20369,'tiered_tranquility',1045),(6610,20370,'tiered_wood_root_grow',1045),(6611,20373,'belch_fx',1045),(6612,20378,'design_theer_symbol_blue',1045),(6613,20379,'design_theer_symbol_green',1045),(6614,20380,'icicle_stomp',1045),(6615,20382,'result_hand_drips_blood',1045),(6616,20383,'result_hand_drips_poison',1045),(6617,20385,'slime_trail_fx',1045),(6618,20386,'sound_giant_hill_attack',1045),(6619,20387,'sound_giant_hill_buff',1045),(6620,20388,'sound_giant_hill_cast',1045),(6621,20389,'sound_giant_hill_death',1045),(6622,20390,'sound_giant_hill_fall',1045),(6623,20391,'sound_giant_hill_footstep',1045),(6624,20392,'sound_giant_hill_grunt',1045),(6625,20393,'sound_giant_hill_idle_cloth',1045),(6626,20394,'sound_giant_hill_idle_grunt',1045),(6627,20395,'sound_giant_hill_idle_yawn',1045),(6628,20396,'sound_giant_hill_movement_cloth',1045),(6629,20397,'sound_giant_hill_ouch',1045),(6630,20398,'sound_giant_hill_rising_groan',1045),(6631,20399,'sound_giant_hill_sit_groan',1045),(6632,20400,'sound_giant_hill_swim',1045),(6633,20401,'sound_giant_hill_swim_idle',1045),(6634,20402,'sound_giant_hill_turn',1045),(6635,20412,'tiered_brambles',1045),(6636,20413,'tiered_hand_leaf_dark',1045),(6637,20414,'tiered_hand_leaves_dark',1045),(6638,20415,'tiered_leaf_flourish',1045),(6639,20416,'tiered_lightning_bolt',1045),(6640,20417,'tiered_snow_tempest',1045),(6641,20418,'tiered_swarm_p2p',1045),(6642,20428,'tiered_spirit_cat',1045),(6643,20429,'tiered_spirit_eel',1045),(6644,20430,'tiered_starfire',1045),(6645,20431,'tiered_sun_nova',1045),(6646,20441,'tiered_fae_swirling',1045),(6647,20442,'tiered_lightning_fusion',1045),(6648,20443,'tiered_spirit_cheetah',1045),(6649,20444,'tiered_spirit_lion_summon',1045),(6650,20445,'tiered_spirit_tree',1045),(6651,20446,'tiered_thunder_cloud',1045),(6652,20453,'design_goblin_launch',1045),(6653,20457,'transforma',1045),(6654,20458,'transformb',1045),(6655,20461,'cast_ice_blastwave',1045),(6656,20464,'cast_wing_buffet_snow',1045),(6657,20465,'cast_wing_buffet_wind',1045),(6658,20469,'result_icy_trap_shatter',1045),(6659,20476,'design_starburst_blue',1045),(6660,20477,'design_starburst_green',1045),(6661,20478,'design_starburst_purple',1045),(6662,20479,'design_starburst_red',1045),(6663,20480,'design_starburst_white',1045),(6664,20482,'kneel',1045),(6665,20483,'result_shadow_curse',1045),(6666,20493,'sound_lynx_mount_bare_idle_1',1045),(6667,20494,'sound_lynx_mount_bare_pant',1045),(6668,20504,'sound_lynx_purr',1045),(6669,20505,'sound_vrewwx_attack_roar_3',1045),(6670,20506,'sound_vrewwx_cast_roar',1045),(6671,20513,'design_arm_prelaunch',1045),(6672,20515,'result_repellent_spray',1045),(6673,20516,'result_repellent_spray_p2p',1045),(6674,20519,'activate',1045),(6675,20520,'cast_ice_blast',1045),(6676,20521,'cast_ice_blast_ring',1045),(6677,20529,'sound_vrewwx_attack_roar_1',1045),(6678,20530,'sound_vrewwx_attack_roar_2',1045),(6679,20531,'sound_vrewwx_idle02_roar',1045),(6680,20541,'sound_vrewwx_idle1_breathing_2',1045),(6681,20548,'design_void_energy_pool',1045),(6682,20550,'result_flower_trail',1045),(6683,20551,'result_leash_p2p',1045),(6684,20552,'result_rope_root',1045),(6685,20555,'cast_pick_axe_throw',1045),(6686,20560,'design_crystal_drop_impact',1045),(6687,20561,'design_orc_footprints',1045),(6688,20563,'result_leash_p2p_static',1045),(6689,20565,'sitchair',1045),(6690,20567,'sound_vrewwx_body_fall',1045),(6691,20568,'trdskl_halas_pick',1045),(6692,20575,'design_chessboard_collapse_fx',1045),(6693,20576,'design_chessboard_static_fx',1045),(6694,20577,'design_druidring_burst_fx',1045),(6695,20578,'design_druidring_fx',1045),(6696,20579,'design_harpoon_fire',1045),(6697,20580,'design_harpoon_load',1045),(6698,20590,'sound_vrewwx_death',1045),(6699,20591,'sound_vrewwx_ouch',1045),(6700,20594,'bellyslide',1045),(6701,20599,'float_on_back',1045),(6702,20601,'laugh',1045),(6703,20604,'sound_vrewwx_buff',1045),(6704,20605,'sound_vrewwx_chomp',1045),(6705,20615,'sound_vrewwx_death_fall',1045),(6706,20622,'design_theer_symbol_blast_circle',1045),(6707,20629,'fly_ouch_backhand',1045),(6708,20639,'tiered_heal_ward',1045),(6709,20640,'tiered_shaman_wheel_base',1045),(6710,20641,'tiered_spirit_summon',1045),(6711,20642,'tiered_spirit_swirl_hit',1045),(6712,20650,'proc_sword_head',1045),(6713,20653,'tiered_hand_stars',1045),(6714,20654,'tiered_haze',1045),(6715,20655,'tiered_head_spirits',1045),(6716,20656,'tiered_spirit_heal',1045),(6717,20666,'tiered_heal_flourish',1045),(6718,20667,'tiered_resurrect_spirits',1045),(6719,20668,'tiered_spirit_elephant',1045),(6720,20669,'tiered_spirit_swirl_shield',1045),(6721,20679,'tiered_echo_rings',1045),(6722,20680,'tiered_fire',1045),(6723,20681,'tiered_iceball_p2p',1045),(6724,20682,'tiered_spirit_tube',1045),(6725,20683,'tiered_spirits_p2p',1045),(6726,20693,'tiered_ancestral_summon',1045),(6727,20694,'tiered_lunar_summon',1045),(6728,20695,'tiered_spirit_circle_summon',1045),(6729,20696,'tiered_spirit_growing',1045),(6730,20703,'fly_jumpsubstitute',1045),(6731,20704,'fly_turn_left',1045),(6732,20705,'fly_turn_right',1045),(6733,20706,'fly_walk',1045),(6734,20708,'lizard_backup',1045),(6735,20709,'lizard_fall',1045),(6736,20710,'lizard_fly_backup',1045),(6737,20711,'lizard_fly_fall',1045),(6738,20712,'lizard_fly_idle',1045),(6739,20713,'lizard_fly_idle01',1045),(6740,20714,'lizard_fly_jump',1045),(6741,20715,'lizard_fly_jump_substitute',1045),(6742,20716,'lizard_fly_run',1045),(6743,20717,'lizard_fly_turn_left',1045),(6744,20718,'lizard_fly_turn_right',1045),(6745,20719,'lizard_fly_walk',1045),(6746,20720,'lizard_glide',1045),(6747,20721,'lizard_idle',1045),(6748,20722,'lizard_idle01',1045),(6749,20723,'lizard_jump',1045),(6750,20724,'lizard_jump_substitute',1045),(6751,20725,'lizard_land',1045),(6752,20726,'lizard_long_fall',1045),(6753,20727,'lizard_run',1045),(6754,20728,'lizard_turn_left',1045),(6755,20729,'lizard_turn_right',1045),(6756,20730,'lizard_walk',1045),(6757,20738,'lizard_fly_dive',1045),(6758,20739,'lizard_fly_glide',1045),(6759,20740,'lizard_fly_jumpsubstitute',1045),(6760,20743,'tiered_bone_tendrils',1045),(6761,20744,'tiered_crystal_soultap',1045),(6762,20745,'tiered_dark_swirly_wisps',1045),(6763,20746,'tiered_deathward',1045),(6764,20747,'tiered_forced_shader_burst_blend',1045),(6765,20748,'tiered_hand_stars_dark',1045),(6766,20749,'tiered_heal_shroud',1045),(6767,20750,'tiered_poison_spirits_p2p',1045),(6768,20751,'tiered_rune_debuff_all',1045),(6769,20752,'tiered_shadow_curse',1045),(6770,20753,'tiered_shroud',1045),(6771,20761,'lizard_fly_enter',1045),(6772,20771,'spark_trail_lf',1045),(6773,20772,'spark_trail_lr',1045),(6774,20773,'spark_trail_rf',1045),(6775,20774,'spark_trail_rr',1045),(6776,20781,'griffin_backup',1045),(6777,20782,'griffin_fall',1045),(6778,20783,'griffin_fly_backup',1045),(6779,20784,'griffin_fly_dive',1045),(6780,20785,'griffin_fly_enter',1045),(6781,20786,'griffin_fly_fall',1045),(6782,20787,'griffin_fly_glide',1045),(6783,20788,'griffin_fly_idle',1045),(6784,20789,'griffin_fly_idle01',1045),(6785,20790,'griffin_fly_jump',1045),(6786,20791,'griffin_fly_jumpsubstitute',1045),(6787,20792,'griffin_fly_run',1045),(6788,20793,'griffin_fly_turn_left',1045),(6789,20794,'griffin_fly_turn_right',1045),(6790,20795,'griffin_fly_walk',1045),(6791,20796,'griffin_idle01',1045),(6792,20797,'griffin_jump',1045),(6793,20798,'griffin_jump_substitute',1045),(6794,20799,'griffin_land',1045),(6795,20800,'griffin_long_fall',1045),(6796,20801,'griffin_turn_left',1045),(6797,20802,'griffin_turn_right',1045),(6798,20804,'pegasus_backup',1045),(6799,20805,'pegasus_fall',1045),(6800,20806,'pegasus_fly_backup',1045),(6801,20807,'pegasus_fly_dive',1045),(6802,20808,'pegasus_fly_enter',1045),(6803,20809,'pegasus_fly_fall',1045),(6804,20810,'pegasus_fly_glide',1045),(6805,20811,'pegasus_fly_idle',1045),(6806,20812,'pegasus_fly_idle01',1045),(6807,20813,'pegasus_fly_jump',1045),(6808,20814,'pegasus_fly_jumpsubstitute',1045),(6809,20815,'pegasus_fly_run',1045),(6810,20816,'pegasus_fly_turn_left',1045),(6811,20817,'pegasus_fly_turn_right',1045),(6812,20818,'pegasus_fly_walk',1045),(6813,20819,'pegasus_idle01',1045),(6814,20820,'pegasus_jump',1045),(6815,20821,'pegasus_jump_substitute',1045),(6816,20822,'pegasus_land',1045),(6817,20823,'pegasus_long_fall',1045),(6818,20824,'pegasus_turn_left',1045),(6819,20825,'pegasus_turn_right',1045),(6820,20833,'result_weapon_trail_music',1096),(6821,20836,'tiered_bard_baton',1096),(6822,20837,'tiered_bard_drum',1096),(6823,20838,'tiered_bard_flute',1096),(6824,20839,'tiered_bard_guitar',1096),(6825,20840,'tiered_bard_horn',1096),(6826,20841,'tiered_bard_shroud',1096),(6827,20842,'tiered_bard_wheel_base',1096),(6828,20843,'tiered_clanging_notes',1096),(6829,20844,'tiered_coin_toss',1096),(6830,20845,'tiered_dancing_blades',1096),(6831,20846,'tiered_hand_notes',1096),(6832,20847,'tiered_hand_spin_notes',1096),(6833,20848,'tiered_jester_cap_toss_p2p',1096),(6834,20849,'tiered_music_ball_p2p',1096),(6835,20850,'tiered_music_band',1096),(6836,20851,'tiered_music_beam_p2p',1096),(6837,20852,'tiered_music_blast_ball',1096),(6838,20853,'tiered_music_bubble',1096),(6839,20854,'tiered_music_swirls',1096),(6840,20855,'tiered_music_wave_p2p',1096),(6841,20856,'tiered_notes_blast',1096),(6842,20857,'tiered_notes_burst',1096),(6843,20858,'tiered_notes_confetti',1096),(6844,20859,'tiered_notes_head',1096),(6845,20860,'tiered_notes_out_blast',1096),(6846,20861,'tiered_notes_out_song',1096),(6847,20862,'tiered_notes_shield',1096),(6848,20863,'tiered_notes_spiral_frenzy',1096),(6849,20864,'tiered_notes_up_song',1096),(6850,20865,'tiered_slashing_blade',1096),(6851,20866,'tiered_sound_rings_head',1096),(6852,20867,'tiered_spark_burst',1096),(6853,20868,'tiered_stabbing_blades',1096),(6854,20878,'tiered_notes_swirling_p2p',1096),(6855,20888,'tiered_bellow',1096),(6856,20889,'tiered_eyehand_buff',1096),(6857,20890,'tiered_note_crescent_p2p',1096),(6858,20891,'tiered_notes_out_song_bellow',1096),(6859,20892,'tiered_notes_transfer_p2p',1096),(6860,20893,'tiered_rock_skin_grow',1096),(6861,20894,'tiered_shaky_notes',1096),(6862,20901,'griffin_mount_backup',1096),(6863,20902,'griffin_mount_fall',1096),(6864,20903,'griffin_mount_fly_backup',1096),(6865,20904,'griffin_mount_fly_dive',1096),(6866,20905,'griffin_mount_fly_enter',1096),(6867,20906,'griffin_mount_fly_fall',1096),(6868,20907,'griffin_mount_fly_glide',1096),(6869,20908,'griffin_mount_fly_idle',1096),(6870,20909,'griffin_mount_fly_idle01',1096),(6871,20910,'griffin_mount_fly_jump',1096),(6872,20911,'griffin_mount_fly_jumpsubstitute',1096),(6873,20912,'griffin_mount_fly_run',1096),(6874,20913,'griffin_mount_fly_turn_left',1096),(6875,20914,'griffin_mount_fly_turn_right',1096),(6876,20915,'griffin_mount_fly_walk',1096),(6877,20916,'griffin_mount_idle',1096),(6878,20917,'griffin_mount_idle01',1096),(6879,20918,'griffin_mount_jump',1096),(6880,20919,'griffin_mount_jump_substitute',1096),(6881,20920,'griffin_mount_land',1096),(6882,20921,'griffin_mount_long_fall',1096),(6883,20922,'griffin_mount_run',1096),(6884,20923,'griffin_mount_turn_left',1096),(6885,20924,'griffin_mount_turn_right',1096),(6886,20925,'griffin_mount_walk',1096),(6887,20929,'tiered_arrow_blast',1096),(6888,20930,'tiered_blood_burst',1096),(6889,20931,'tiered_fire_arrow_p2p',1096),(6890,20932,'tiered_harvest_arrows',1096),(6891,20933,'tiered_lightning_blast_hit',1096),(6892,20934,'tiered_lightning_spark_burst',1096),(6893,20935,'tiered_massive_hit',1096),(6894,20936,'tiered_ranged_buff',1096),(6895,20937,'tiered_shimmer_arrow_p2p',1096),(6896,20938,'tiered_slow_arrow_p2p',1096),(6897,20939,'tiered_sparkle_trail_weapon_blend',1096),(6898,20940,'tiered_weapon_blood_lust',1096),(6899,20950,'tiered_arrow',1096),(6900,20951,'tiered_arrow_storm',1096),(6901,20952,'tiered_briar_trap',1096),(6902,20953,'tiered_bullseye',1096),(6903,20954,'tiered_hawk_summon',1096),(6904,20955,'tiered_head_arrow_p2p',1096),(6905,20956,'tiered_redirect_arrow_p2p',1096),(6906,20957,'tiered_redirection',1096),(6907,20958,'tiered_shoot_arrow_rain',1096),(6908,20959,'tiered_triple_arrow_p2p',1096),(6909,20969,'tiered_ice_comet',1096),(6910,20976,'griffin_mount_fly_climb',1096),(6911,20977,'griffin_mount_fly_down',1096),(6912,20978,'griffin_mount_fly_up',1096),(6913,20982,'tiered_blades_buff',1096),(6914,20983,'tiered_damage_persist',1096),(6915,20984,'tiered_dark_arrow_p2p',1096),(6916,20985,'tiered_dark_cloud',1096),(6917,20986,'tiered_death_mark',1096),(6918,20987,'tiered_deflect_buff',1096),(6919,20988,'tiered_shoot_daggers',1096),(6920,20989,'tiered_slashing_daggers',1096),(6921,20999,'tiered_apply_poison_p2p',1096),(6922,21000,'tiered_dagger_head',1096),(6923,21001,'tiered_dark_ring_vanish',1096),(6924,21002,'tiered_fatal_followup',1096),(6925,21003,'tiered_hand_plasma',1096),(6926,21004,'tiered_spin_dagger_blast',1096),(6927,21011,'griffin_mount_fly_jump_substitute',1096),(6928,21021,'tiered_blast_tube',1096),(6929,21022,'tiered_flurry_daggers',1096),(6930,21023,'tiered_mesmerized',1096),(6931,21024,'tiered_slash_trail',1096),(6932,21025,'tiered_snow_dagger_p2p',1096),(6933,21026,'tiered_spin_shield_buff',1096),(6934,21027,'tiered_storm_waves',1096),(6935,21028,'tiered_stream_throw_attack_p2p',1096),(6936,21029,'tiered_swords_buff',1096),(6937,21030,'tiered_teeth_glint',1096),(6938,21038,'result_bind_wound',1096),(6939,21041,'tiered_blast_trail',1096),(6940,21042,'tiered_dagger_p2p',1096),(6941,21043,'tiered_dark_melee_swipe',1096),(6942,21044,'tiered_poison_forced_shader_weapon',1096),(6943,21045,'tiered_slash_trail_dark',1096),(6944,21052,'design_wellspring_bones_toss',1096),(6945,21054,'result_wellspring_ghosts_attack_p2p',1096),(6946,21064,'tiered_cone_defensive_buff',1096),(6947,21065,'tiered_cone_offensive_buff',1096),(6948,21072,'design_crater_blast',1096),(6949,21073,'design_fire_area',1096),(6950,21075,'result_spore_toss_p2p',1096),(6951,21082,'design_electro_disease_portal',1096),(6952,21083,'design_lightning_shield',1096),(6953,21084,'design_summon_disease_portal',1096),(6954,21091,'design_meteor_impact',1096),(6955,21092,'design_meteor_target',1096),(6956,21095,'ball_lightning_bolt_p2p',1096),(6957,21097,'cast_potion_hand_pattern_heal',1096),(6958,21098,'cast_potion_hand_sparks',1096),(6959,21099,'cast_potion_ring_cure',1096),(6960,21101,'cast_resurrect_swirls',1096),(6961,21105,'result_fire_engulfed',1096),(6962,21106,'result_flash_heal',1096),(6963,21109,'trdskl_vial_left',1096),(6964,21116,'design_gf_tree_fire',1096),(6965,21117,'design_gf_tree_fire_big',1096),(6966,21119,'result_head_flash_sparks',1096),(6967,21122,'cast_plague_spikes',1096),(6968,21127,'design_feet_trail_leaves',1096),(6969,21129,'pbae_cast_blast',1096),(6970,21134,'cast_summon_elemental_cyclone',1096),(6971,21137,'design_gf_cleansed_flowers',1096),(6972,21138,'design_gf_poisoned_vines',1096),(6973,21139,'design_guk_portal',1096),(6974,21140,'design_power_blast',1096),(6975,21141,'design_summon_power',1096),(6976,21142,'griffin_fly_up',1096),(6977,21145,'boom_sound',1096),(6978,21151,'result_guk_axe_attack_p2p',1096),(6979,21152,'result_guk_axe_stuck',1096),(6980,21153,'result_snotball_p2p',1096),(6981,21163,'turkey_cannon_blast',1096),(6982,21164,'turkey_shoot',1096),(6983,21172,'lights_baubles',1096),(6984,21173,'lights_bows',1096),(6985,21181,'result_book_hover',1096),(6986,21183,'sound_feeding',1096),(6987,21185,'zombie_feeding_fx',1096),(6988,21192,'design_boiling_pool_fx',1096),(6989,21193,'design_book_blast',1096),(6990,21194,'design_book_summon',1096),(6991,21195,'design_icy_shadow_portal',1096),(6992,21197,'knocktoknees_enter',1096),(6993,21198,'knocktoknees_idle',1096),(6994,21201,'cast_mirror_emerge',1096),(6995,21206,'design_light_column_grow',1096),(6996,21209,'bite',1096),(6997,21219,'tiered_bloodlust_swords',1096),(6998,21220,'tiered_cloud_buff_out',1096),(6999,21221,'tiered_divine_wave_p2p',1096),(7000,21222,'tiered_electrified',1096),(7001,21223,'tiered_rock_blast',1096),(7002,21224,'tiered_weakness',1096),(7003,21225,'tiered_whip_dark',1096),(7004,21235,'tiered_brain_leech_p2p',1096),(7005,21236,'tiered_dark_vanish',1096),(7006,21237,'tiered_dark_ward',1096),(7007,21238,'tiered_icy_cage',1096),(7008,21248,'tiered_cold_ice_crystals',1096),(7009,21249,'tiered_icicle_rain',1096),(7010,21250,'tiered_skull_p2p',1096),(7011,21251,'tiered_starnova_p2p',1096),(7012,21261,'tiered_dark_fire',1096),(7013,21262,'tiered_poison_spore_p2p',1096),(7014,21263,'tiered_spirit_dragon',1096),(7015,21273,'tiered_cast_mysticism',1096),(7016,21274,'tiered_light_ward',1096),(7017,21275,'tiered_mental_comet',1096),(7018,21276,'tiered_result_mysticism',1096),(7019,21277,'tiered_whip_circling',1096),(7020,21287,'tiered_ice_comet_shower',1096),(7021,21288,'tiered_sanction_of_merit',1096),(7022,21293,'combat_art_buff',1096),(7023,21296,'design_crow_shoulder',1096),(7024,21297,'design_ghost_wurm_shoulder',1096),(7025,21299,'result_dark_bubbles_rising',1096),(7026,21307,'result_candy_stars_rising',1096),(7027,21317,'wolf_mount_backup',1096),(7028,21318,'wolf_mount_fall',1096),(7029,21319,'wolf_mount_idle',1096),(7030,21320,'wolf_mount_idle01',1096),(7031,21321,'wolf_mount_jump',1096),(7032,21322,'wolf_mount_jump_substitute',1096),(7033,21323,'wolf_mount_land',1096),(7034,21324,'wolf_mount_long_fall',1096),(7035,21325,'wolf_mount_run',1096),(7036,21326,'wolf_mount_turn_left',1096),(7037,21327,'wolf_mount_turn_right',1096),(7038,21328,'wolf_mount_walk',1096),(7039,21338,'tiered_cloud_ring_burst',1096),(7040,21339,'tiered_ember_sword',1096),(7041,21340,'tiered_fire_rain',1096),(7042,21341,'tiered_lightning_bolt_p2p',1096),(7043,21342,'wolfmount_backup',1096),(7044,21343,'wolfmount_fall',1096),(7045,21344,'wolfmount_idle',1096),(7046,21345,'wolfmount_idle01',1096),(7047,21346,'wolfmount_jump',1096),(7048,21347,'wolfmount_jump_substitute',1096),(7049,21348,'wolfmount_land',1096),(7050,21349,'wolfmount_long_fall',1096),(7051,21350,'wolfmount_run',1096),(7052,21351,'wolfmount_turn_left',1096),(7053,21352,'wolfmount_turn_right',1096),(7054,21353,'wolfmount_walk',1096),(7055,21363,'tiered_hammer_head',1096),(7056,21364,'tiered_power_fount',1096),(7057,21365,'tiered_smashing_hammers',1096),(7058,21372,'ettin_drink',1096),(7059,21376,'tiered_color_shower',1096),(7060,21377,'tiered_haste',1096),(7061,21387,'tiered_bat_swarm_appear',1096),(7062,21388,'tiered_ember_shield',1096),(7063,21396,'result_paper_toss_p2p',1096),(7064,21406,'tiered_jesters_cap',1096),(7065,21414,'persist_notes_dirge',1096),(7066,21415,'persist_notes_troub',1096),(7067,21418,'sound_wolfmount_bare_pant',1096),(7068,21419,'sound_wolfmount_bare_roar_3',1096),(7069,21420,'sound_wolfmount_footstep_quiet',1096),(7070,21421,'sound_wolfmount_idle',1096),(7071,21422,'sound_wolfmount_jump_substitute',1096),(7072,21423,'sound_wolfmount_land',1096),(7073,21424,'tiered_notes_entranced',1096),(7074,21425,'tiered_poison_notes_wave_p2p',1096),(7075,21432,'design_vision_plane_map_bell',1096),(7076,21442,'tiered_rift_crack',1096),(7077,21449,'design_djinn_pod_cloud',1096),(7078,21451,'result_water_douse',1096),(7079,21454,'tiered_lava_column',1096),(7080,21462,'result_arrow_ridden',1096),(7081,21470,'result_body_fire',1096),(7082,21471,'result_body_lightning_purple',1096),(7083,21472,'result_body_snow',1096),(7084,21474,'sound_ettin_1h_sword_attack',1096),(7085,21475,'sound_ettin_1h_sword_attack01',1096),(7086,21476,'sound_ettin_1h_sword_attack03',1096),(7087,21477,'sound_ettin_fs',1096),(7088,21478,'sound_ettin_attack',1096),(7089,21479,'sound_ettin_attack01',1096),(7090,21480,'sound_ettin_attack02',1096),(7091,21481,'sound_ettin_attack03',1096),(7092,21482,'sound_ettin_attack_throw_boulder',1096),(7093,21483,'sound_ettin_cast_aoe_beneficial_end',1096),(7094,21484,'sound_ettin_cast_aoe_beneficial_loop',1096),(7095,21485,'sound_ettin_cast_aoe_beneficial_start',1096),(7096,21486,'sound_ettin_cast_aoe_detrimental_end',1096),(7097,21487,'sound_ettin_cast_aoe_detrimental_loop',1096),(7098,21488,'sound_ettin_cast_aoe_detrimental_start',1096),(7099,21489,'sound_ettin_cast_aoe_invocation_end',1096),(7100,21490,'sound_ettin_cast_aoe_invocation_loop',1096),(7101,21491,'sound_ettin_cast_aoe_invocation_start',1096),(7102,21492,'sound_ettin_cast_aoe_wand_end',1096),(7103,21493,'sound_ettin_cast_aoe_wand_loop',1096),(7104,21494,'sound_ettin_cast_aoe_wand_start',1096),(7105,21495,'sound_ettin_cast_summon_end',1096),(7106,21496,'sound_ettin_cast_summon_loop',1096),(7107,21497,'sound_ettin_cast_summon_start',1096),(7108,21498,'sound_ettin_cast_targeted_beneficial_end',1096),(7109,21499,'sound_ettin_cast_targeted_beneficial_start',1096),(7110,21500,'sound_ettin_cast_targeted_detrimental_end',1096),(7111,21501,'sound_ettin_cast_targeted_detrimental_start',1096),(7112,21502,'sound_ettin_cast_targeted_wand_end',1096),(7113,21503,'sound_ettin_cast_targeted_wand_loop',1096),(7114,21504,'sound_ettin_cast_targeted_wand_start',1096),(7115,21505,'sound_ettin_charge_up',1096),(7116,21506,'sound_ettin_dodge_backhand',1096),(7117,21507,'sound_ettin_dodge_forehand',1096),(7118,21508,'sound_ettin_drink',1096),(7119,21509,'sound_ettin_dual_wield_attack',1096),(7120,21510,'sound_ettin_dual_wield_attack01',1096),(7121,21511,'sound_ettin_dual_wield_attack02',1096),(7122,21512,'sound_ettin_dual_wield_attack03',1096),(7123,21513,'sound_ettin_habitat01',1096),(7124,21514,'sound_ettin_habitat03',1096),(7125,21515,'sound_ettin_idle01',1096),(7126,21516,'sound_ettin_idle02',1096),(7127,21517,'sound_ettin_knockeddowntoknees',1096),(7128,21518,'sound_ettin_ouch_backhand',1096),(7129,21519,'sound_ettin_ouch_forehand',1096),(7130,21520,'sound_ettin_run',1096),(7131,21521,'sound_ettin_shield_shove',1096),(7132,21522,'sound_ettin_swim_idle',1096),(7133,21523,'sound_ettin_walk',1096),(7134,21524,'sound_ettin_whirling_attack',1096),(7135,21525,'sound_ettin_wild_swing',1096),(7136,21527,'sound_idle03',1096),(7137,21528,'sound_wolfmount_idle01',1096),(7138,21529,'sound_wolfmount_turn_left',1096),(7139,21530,'sound_wolfmount_turn_right',1096),(7140,21537,'fly_attack01',1096),(7141,21538,'fly_attack02',1096),(7142,21539,'fly_attack03',1096),(7143,21540,'fly_death',1096),(7144,21541,'fly_dodge',1096),(7145,21542,'fly_ouchbackhand',1096),(7146,21543,'fly_ouchforehand',1096),(7147,21544,'fly_ouchthrust',1096),(7148,21545,'fly_turnleft',1096),(7149,21546,'fly_turnright',1096),(7150,21548,'perch',1096),(7151,21555,'design_book_summon_blue',1096),(7152,21556,'design_book_summon_red',1096),(7153,21564,'result_light_flare_p2p',1096),(7154,21569,'cast_shadow_gather',1096),(7155,21570,'cast_speed_trail_shadow',1096),(7156,21574,'removemask_enter',1096),(7157,21575,'removemask_exit',1096),(7158,21576,'removemask_idle',1096),(7159,21579,'attack_cage',1096),(7160,21585,'result_cage_beam_p2p',1096),(7161,21586,'result_spell_cage',1096),(7162,21590,'spell_cage_hit',1096),(7163,21593,'badger_dig',1096),(7164,21598,'design_vekascent_lifebringer',1096),(7165,21605,'design_vekascent_ice_bridge',1096),(7166,21613,'result_ice_trap_swirls',1096),(7167,21616,'cast_hot_water_douse',1096),(7168,21625,'trdskl_pot_large',1096),(7169,21632,'design_tofs_jail_barrier',1096),(7170,21639,'design_tofs_water_orb',1096),(7171,21644,'cast_scream',1096),(7172,21645,'cast_wing_buffet',1096),(7173,21649,'result_vines_trap',1096),(7174,21656,'design_vekfortress_water_blast',1096),(7175,21657,'design_vekfortress_water_warning',1096),(7176,21658,'design_vekpools_water_gush',1096),(7177,21659,'design_vekpools_water_warning',1096),(7178,21666,'design_velks_breakable_wall',1096),(7179,21667,'design_velks_breakable_wall_blue',1096),(7180,21669,'result_ice_spikes_growing',1096),(7181,21670,'result_zombie_slash',1096),(7182,21674,'trdskl_meat',1096),(7183,21677,'bow_attack01',1096),(7184,21678,'bow_attack02',1096),(7185,21679,'bow_attack03',1096),(7186,21684,'exit',1096),(7187,21689,'untrained_attack01',1096),(7188,21690,'untrained_attack02',1096),(7189,21691,'untrained_attack03',1096),(7190,21699,'persist_cold_book_swarm',1096),(7191,21700,'result_forced_shader_web',1096),(7192,21701,'result_halas_runes_spiral',1096),(7193,21702,'result_healthdrain_p2p',1096),(7194,21709,'design_vekpools_flower_fx',1096),(7195,21714,'sound_tse_attack',1096),(7196,21715,'sound_tse_attack01',1096),(7197,21716,'sound_tse_attack02',1096),(7198,21717,'sound_tse_attack03',1096),(7199,21718,'sound_tse_cast_aoe_beneficial_end',1096),(7200,21719,'sound_tse_cast_aoe_invocation_end',1096),(7201,21720,'sound_tse_cast_summon_end',1096),(7202,21721,'sound_tse_cast_targeted_beneficial_end',1096),(7203,21722,'sound_tse_cast_targeted_beneficial_loop',1096),(7204,21723,'sound_tse_cast_targeted_beneficial_start',1096),(7205,21724,'sound_tse_cast_targeted_detrimental_end',1096),(7206,21725,'sound_tse_combat_enter',1096),(7207,21726,'sound_tse_dead_enter',1096),(7208,21727,'sound_tse_dodge_down',1096),(7209,21728,'sound_tse_dodge_thrust',1096),(7210,21729,'sound_tse_fly_attack',1096),(7211,21730,'sound_tse_fly_attack01',1096),(7212,21731,'sound_tse_fly_attack02',1096),(7213,21732,'sound_tse_fly_attack03',1096),(7214,21733,'sound_tse_fly_cast_targeted_beneficial_end',1096),(7215,21734,'sound_tse_fly_cast_targeted_beneficial_loop',1096),(7216,21735,'sound_tse_fly_cast_targeted_beneficial_start',1096),(7217,21736,'sound_tse_fly_cast_targeted_detrimental_end',1096),(7218,21737,'sound_tse_fly_idle',1096),(7219,21738,'sound_tse_fly_offensive_buff',1096),(7220,21739,'sound_tse_knockeddowntoknees',1096),(7221,21740,'sound_tse_offensive_buff',1096),(7222,21741,'sound_tse_ouch',1096),(7223,21742,'sound_tse_ouch_forehand',1096),(7224,21743,'sound_tse_ouch_thrust',1096),(7225,21744,'sound_tse_whirling_attack',1096),(7226,21745,'sound_tse_wild_swing',1096),(7227,21752,'design_sullon_zek_containment',1096),(7228,21754,'result_ice_melt',1096),(7229,21758,'sound_hland_griffin_attack01',1096),(7230,21759,'sound_hland_griffin_attack02',1096),(7231,21760,'sound_hland_griffin_attack03',1096),(7232,21761,'sound_hland_griffin_combat_enter',1096),(7233,21762,'sound_hland_griffin_dead_enter',1096),(7234,21763,'sound_hland_griffin_dodge_backhand',1096),(7235,21764,'sound_hland_griffin_dodge_down',1096),(7236,21765,'sound_hland_griffin_dodge_forehand',1096),(7237,21766,'sound_hland_griffin_dodge_thrust',1096),(7238,21767,'sound_hland_griffin_idle01',1096),(7239,21768,'sound_hland_griffin_ouch',1096),(7240,21769,'sound_hland_griffin_ouch_thrust',1096),(7241,21770,'sound_hland_griffin_swim_walk',1096),(7242,21771,'sound_hland_griffin_whirling_attack',1096),(7243,21772,'sound_hland_griffin_wildswing',1096),(7244,21773,'sound_othmir_m_1h_sword_attack',1096),(7245,21774,'sound_othmir_m_1h_sword_attack01',1096),(7246,21775,'sound_othmir_m_1h_sword_attack02',1096),(7247,21776,'sound_othmir_m_1h_sword_attack03',1096),(7248,21777,'sound_othmir_m_attack',1096),(7249,21778,'sound_othmir_m_attack01',1096),(7250,21779,'sound_othmir_m_attack02',1096),(7251,21780,'sound_othmir_m_attack03',1096),(7252,21781,'sound_othmir_m_bow_attack',1096),(7253,21782,'sound_othmir_m_cast_targeted_beneficial_end',1096),(7254,21783,'sound_othmir_m_cast_targeted_beneficial_loop',1096),(7255,21784,'sound_othmir_m_cast_targeted_beneficial_start',1096),(7256,21785,'sound_othmir_m_charge_up',1096),(7257,21786,'sound_othmir_m_combat_idle',1096),(7258,21787,'sound_othmir_m_dance',1096),(7259,21788,'sound_othmir_m_dead_enter',1096),(7260,21789,'sound_othmir_m_dual_wield_attack',1096),(7261,21790,'sound_othmir_m_dual_wield_attack01',1096),(7262,21791,'sound_othmir_m_dual_wield_attack02',1096),(7263,21792,'sound_othmir_m_dual_wield_attack03',1096),(7264,21793,'sound_othmir_m_idle02',1096),(7265,21794,'sound_othmir_m_offensive_buff',1096),(7266,21795,'sound_othmir_m_shield_shove',1096),(7267,21796,'sound_othmir_m_swim_idle',1096),(7268,21797,'sound_othmir_m_swim_run',1096),(7269,21798,'sound_othmir_m_swim_walk',1096),(7270,21799,'sound_othmir_m_whirling_attack',1096),(7271,21800,'sound_othmir_m_wild_swing',1096),(7272,21801,'writhe_idle',1096),(7273,21809,'result_ice_shatter',1096),(7274,21810,'result_seafoam_dissolve',1096),(7275,21813,'cast_enraged_flames',1096),(7276,21819,'result_hammer_shower',1096),(7277,21823,'sound_othmir_f_1h_sword_attack',1096),(7278,21824,'sound_othmir_f_1h_sword_attack01',1096),(7279,21825,'sound_othmir_f_1h_sword_attack02',1096),(7280,21826,'sound_othmir_f_1h_sword_attack03',1096),(7281,21827,'sound_othmir_f_attack',1096),(7282,21828,'sound_othmir_f_attack01',1096),(7283,21829,'sound_othmir_f_attack02',1096),(7284,21830,'sound_othmir_f_attack03',1096),(7285,21831,'sound_othmir_f_bow_attack',1096),(7286,21832,'sound_othmir_f_cast_targeted_beneficial_end',1096),(7287,21833,'sound_othmir_f_cast_targeted_beneficial_start',1096),(7288,21834,'sound_othmir_f_charge_up',1096),(7289,21835,'sound_othmir_f_combat_idle',1096),(7290,21836,'sound_othmir_f_dead_enter',1096),(7291,21837,'sound_othmir_f_dual_wield_attack',1096),(7292,21838,'sound_othmir_f_dual_wield_attack01',1096),(7293,21839,'sound_othmir_f_dual_wield_attack02',1096),(7294,21840,'sound_othmir_f_dual_wield_attack03',1096),(7295,21841,'sound_othmir_f_idle02',1096),(7296,21842,'sound_othmir_f_shield_shove',1096),(7297,21843,'sound_othmir_f_swim_idle',1096),(7298,21844,'sound_othmir_f_swim_walk',1096),(7299,21845,'sound_othmir_f_whirling_attack',1096),(7300,21846,'sound_othmir_f_wild_swing',1096),(7301,21855,'sleep_idle',1096),(7302,21858,'sound_othmir_fs',1096),(7303,21859,'sound_tse_fs',1096),(7304,21864,'cast_split_beam_flash',1096),(7305,21865,'cast_split_copy',1096),(7306,21868,'cast_elemental_converge',1096),(7307,21873,'design_elemental_coalescing',1096),(7308,21875,'result_elemental_drain_p2p',1096),(7309,21878,'aura_purple',1096),(7310,21879,'cast_death_beam',1096),(7311,21880,'cast_heal_ball',1096),(7312,21887,'sleep_enter',1096),(7313,21888,'sleep_exit',1096),(7314,21893,'sound_wolfpup_bf',1096),(7315,21894,'sound_wolfpup_angry',1096),(7316,21895,'sound_wolfpup_attack',1096),(7317,21896,'sound_wolfpup_confused',1096),(7318,21897,'sound_wolfpup_eat',1096),(7319,21898,'sound_wolfpup_footstep',1096),(7320,21899,'sound_wolfpup_hungry',1096),(7321,21900,'sound_wolfpup_idle01',1096),(7322,21901,'sound_wolfpup_idle02',1096),(7323,21902,'sound_wolfpup_ouch',1096),(7324,21903,'sound_wolfpup_sick',1096),(7325,21904,'sound_wolfpup_trick',1096),(7326,21910,'converse01_sit',1096),(7327,21911,'converse02_sit',1096),(7328,21912,'converse_sit',1096),(7329,21914,'design_coldain_prayer_shawl',1096),(7330,21916,'leap_enter',1096),(7331,21917,'leap_exit',1096),(7332,21918,'leap_idle',1096),(7333,21922,'sound_hland_griffin_fs',1096),(7334,21923,'sound_hland_griffin_cast_enter',1096),(7335,21924,'sound_hland_griffin_cast_exit',1096),(7336,21925,'sound_hland_griffin_charge_up',1096),(7337,21932,'design_coldain_ring_adamantium',1096),(7338,21933,'design_coldain_ring_copper',1096),(7339,21934,'design_coldain_ring_frostreaver',1096),(7340,21935,'design_coldain_ring_gold',1096),(7341,21936,'design_coldain_ring_hero',1096),(7342,21937,'design_coldain_ring_mithril',1096),(7343,21938,'design_coldain_ring_obsidian',1096),(7344,21939,'design_coldain_ring_platinum',1096),(7345,21940,'design_coldain_ring_silver',1096),(7346,21941,'design_coldain_ring_velium',1096),(7347,21942,'design_spider_shoulder',1096),(7348,21948,'sound_hland_griffin_wing_flap_01',1096),(7349,21949,'sound_hland_griffin_wing_flap_02',1096),(7350,21956,'dive',1096),(7351,21958,'result_talon_strike',1096),(7352,21963,'sound_hland_griffin_wild_swing',1096),(7353,21967,'whirlingattack',1096),(7354,21970,'cast_head_souls',1096),(7355,21971,'cast_head_spikes',1096),(7356,21974,'cast_tallonite_attacking',1096),(7357,21975,'cast_tallonite_lash_spin',1096),(7358,21979,'result_head_spikes',1096),(7359,21987,'untrained_exit',1096),(7360,21995,'result_ember_strike',1096),(7361,21996,'result_ice_vine_trap',1096),(7362,22004,'untrained_idle01',1096),(7363,22007,'cast_nipik_spirits',1096),(7364,22010,'cast_shadow_vortex',1096),(7365,22014,'result_forced_shader_lichen',1096),(7366,22015,'result_gnoll_drool',1096),(7367,22029,'sound_vamp_fs',1096),(7368,22030,'sound_vamp_f_idle',1096),(7369,22031,'sound_vamp_f_untrained_attack',1096),(7370,22032,'sound_vamp_f_untrained_attack01',1096),(7371,22033,'sound_vamp_f_untrained_attack02',1096),(7372,22034,'sound_vamp_f_untrained_attack03',1096),(7373,22035,'sound_vamp_f_untrained_enter',1096),(7374,22036,'sound_vamp_f_untrained_idle',1096),(7375,22037,'sound_vamp_f_untrained_idle01',1096),(7376,22038,'sound_vamp_f_whirling_attack',1096),(7377,22044,'converse_sit01',1096),(7378,22045,'converse_sit02',1096),(7379,22047,'design_velkslab_flame_arch',1096),(7380,22049,'result_red_glow',1096),(7381,22057,'sound_vamp_m_untrained_attack',1096),(7382,22058,'sound_vamp_m_untrained_attack01',1096),(7383,22059,'sound_vamp_m_untrained_attack02',1096),(7384,22060,'sound_vamp_m_untrained_attack03',1096),(7385,22061,'sound_vamp_m_untrained_enter',1096),(7386,22062,'sound_vamp_m_untrained_idle01',1096),(7387,22063,'sound_vamp_m_whirling_attack',1096),(7388,22065,'talking_idle',1096),(7389,22072,'griffin_mount_fly_glide_left',1096),(7390,22073,'griffin_mount_fly_glide_right',1096),(7391,22076,'cast_foot_crush_stomp',1096),(7392,22077,'cast_kromzek_strike',1096),(7393,22080,'cast_targeted_beneficial_idle',1096),(7394,22081,'cast_thunder_clap',1096),(7395,22089,'pugilist_idle01',1096),(7396,22092,'cast_aa_column_heal_blast',1096),(7397,22093,'cast_aa_heal_bars',1096),(7398,22098,'design_bat_appear',1096),(7399,22099,'design_bat_vanish',1096),(7400,22100,'hover_exit',1096),(7401,22110,'untrained_slash',1096),(7402,22111,'untrained_slash1',1096),(7403,22112,'untrained_slash2',1096),(7404,22113,'untrained_slash3',1096),(7405,22120,'griffin_mount_fly_strafe_left',1096),(7406,22121,'griffin_mount_fly_strafe_right',1096),(7407,22123,'pugilist_idle02',1096),(7408,22124,'result_aa_lightning_debuff',1096),(7409,22125,'result_aa_ward_column_blast',1096),(7410,22133,'kd_barrel_idle',1096),(7411,22134,'kd_barrel_roll_enter',1096),(7412,22135,'kd_barrel_roll_idle',1096),(7413,22143,'sound_vamp_f_pugilist_idle02',1096),(7414,22144,'sound_vamp_m_pugilist_idle02',1096),(7415,22149,'cast_spirit_hands',1096),(7416,22150,'cast_spirit_sands',1096),(7417,22151,'cast_spirit_shell_buff',1096),(7418,22154,'eat_idle',1096),(7419,22156,'result_ice_trap_dark',1096),(7420,22157,'result_small_net',1096),(7421,22159,'sniff_idle',1096),(7422,22167,'trdskl_vel_hammer',1096),(7423,22168,'walk_sniff',1096),(7424,22175,'design_bat_smoke_attack',1096),(7425,22176,'design_seaweed_cluster',1096),(7426,22186,'vamp_smoke_trail',1096),(7427,22187,'vampire_attack',1096),(7428,22188,'vampire_attack01',1096),(7429,22189,'vampire_attack02',1096),(7430,22190,'vampire_attack03',1096),(7431,22191,'vampire_dodge',1096),(7432,22192,'vampire_dodge01',1096),(7433,22193,'vampire_dodge02',1096),(7434,22194,'vampire_enter',1096),(7435,22195,'vampire_exit',1096),(7436,22196,'vampire_idle',1096),(7437,22197,'vampire_idle01',1096),(7438,22198,'vampire_idle02',1096),(7439,22199,'vampire_ouch',1096),(7440,22200,'vampire_ouch01',1096),(7441,22201,'vampire_parry',1096),(7442,22202,'vampire_recoil',1096),(7443,22203,'vampire_whirling_attack',1096),(7444,22211,'result_rock_crystal_cyclone',1096),(7445,22220,'vamp_grab_slash',1096),(7446,22223,'cast_cold_breath',1096),(7447,22224,'cast_inhale_breath',1096),(7448,22225,'cast_lightning_burst',1096),(7449,22226,'cast_lightning_wings',1096),(7450,22240,'vampire_nofx_attack',1096),(7451,22241,'vampire_nofx_attack01',1096),(7452,22242,'vampire_nofx_attack02',1096),(7453,22243,'vampire_nofx_attack03',1096),(7454,22244,'vampire_nofx_dodge',1096),(7455,22245,'vampire_nofx_dodge01',1096),(7456,22246,'vampire_nofx_dodge02',1096),(7457,22247,'vampire_nofx_enter',1096),(7458,22248,'vampire_nofx_exit',1096),(7459,22249,'vampire_nofx_idle',1096),(7460,22250,'vampire_nofx_idle01',1096),(7461,22251,'vampire_nofx_idle02',1096),(7462,22252,'vampire_nofx_ouch',1096),(7463,22253,'vampire_nofx_ouch01',1096),(7464,22254,'vampire_nofx_parry',1096),(7465,22255,'vampire_nofx_recoil',1096),(7466,22256,'vampire_nofx_whirling_attack',1096),(7467,22257,'vampire_whirling_nofx_attack',1096),(7468,22264,'design_seaweed_cluster_down',1096),(7469,22266,'result_object_sparkles_white_down',1096),(7470,22269,'barrel_blast_snd',1096),(7471,22273,'crate_break_snd',1096),(7472,22275,'design_rock_door_collapse',1096),(7473,22276,'design_vine_door_grow',1096),(7474,22277,'impact_snd',1096),(7475,22279,'result_barrel_explode',1096),(7476,22280,'result_crate_explode',1096),(7477,22281,'result_heat_shimmer_dots',1096),(7478,22282,'result_musk_spray_p2p',1096),(7479,22283,'result_musky_object',1096),(7480,22292,'vamp_smoke_burst',1096),(7481,22300,'run_temp',1096),(7482,22309,'walk_temp',1096),(7483,22316,'design_hawk_release',1096),(7484,22317,'fx_splash_out',1096),(7485,22318,'fx_splash_up',1096),(7486,22320,'result_hawk_circling',1096),(7487,22327,'design_lava',1096),(7488,22341,'sound_tse_rx_attack',1096),(7489,22342,'sound_tse_rx_buff',1096),(7490,22343,'sound_tse_rx_hit',1096),(7491,22344,'sound_tse_fly_rx_attack',1096),(7492,22352,'knockedtoback_idle',1096),(7493,22361,'sound_carac_crying',1096),(7494,22364,'admire',1096),(7495,22369,'griffin_mount_idle02',1096),(7496,22377,'measure',1096),(7497,22379,'snd_lich_attack',1096),(7498,22380,'snd_lich_attack01',1096),(7499,22381,'snd_lich_attack02',1096),(7500,22382,'snd_lich_attack03',1096),(7501,22383,'snd_lich_bride_idle_lp',1096),(7502,22384,'snd_lich_combat_enter',1096),(7503,22385,'snd_lich_ouch',1096),(7504,22386,'snd_lich_whirling_attack',1096),(7505,22387,'snd_lich_wild_swing',1096),(7506,22390,'sound_griffin_mount_idle01',1096),(7507,22400,'worship_idle',1096),(7508,22403,'cast_bone_toss',1096),(7509,22407,'count',1096),(7510,22409,'design_vel_cannon_fire',1096),(7511,22424,'trdskl_bone',1096),(7512,22431,'design_light_beam_fx',1096),(7513,22432,'design_tofs_portal_base_fx',1096),(7514,22437,'cast_sacrifice_blast',1096),(7515,22440,'design_fire_big',1096),(7516,22441,'design_fire_green',1096),(7517,22442,'design_fire_small',1096),(7518,22444,'result_mark_of_doom',1096),(7519,22449,'cast_rallos_zek_superbuff',1096),(7520,22452,'design_blue_fire_wall',1096),(7521,22453,'design_red_fire_wall',1096),(7522,22456,'sit_throne_idle',1096),(7523,22464,'result_giant_icicle_drop',1096),(7524,22465,'result_giant_spear_p2p',1096),(7525,22468,'cast_hammer_hands',1096),(7526,22487,'trdskl_ice_wand',1096),(7527,22494,'design_massive_rock_impact',1096),(7528,22496,'persist_blue_tagged',1096),(7529,22497,'persist_red_tagged',1096),(7530,22498,'result_indestructible',1096),(7531,22499,'result_invincible',1096),(7532,22500,'result_statue_beam_p2p',1096),(7533,22503,'amaze',1096),(7534,22508,'design_zek_helm_fire',1096),(7535,22509,'grin',1096),(7536,22510,'growl',1096),(7537,22512,'mourn',1096),(7538,22513,'puzzle',1096),(7539,22514,'roar',1096),(7540,22521,'design_distort_face',1096),(7541,22522,'design_kd_rage_portal',1096),(7542,22525,'cast_aa_ancestor_swirls',1096),(7543,22526,'cast_aa_spiritfire_blast',1096),(7544,22527,'cast_aa_spiritfire_swirls',1096),(7545,22533,'result_aa_pulsing_ward',1096),(7546,22534,'result_aa_totem_blast',1096),(7547,22541,'gathering_find',1096),(7548,22542,'griffin_mount_launch',1096),(7549,22544,'result_aa_cold_mesh_grow',1096),(7550,22545,'result_aa_crush_blast',1096),(7551,22546,'result_aa_focus_spark',1096),(7552,22547,'result_aa_manawall',1096),(7553,22548,'result_aa_mesh_grow',1096),(7554,22549,'result_aa_shadow_blob_p2p',1096),(7555,22550,'result_aa_swap_hate',1096),(7556,22553,'applaud',1096),(7557,22556,'clap',1096),(7558,22559,'cast_aa_lightning_cleave_blast',1096),(7559,22560,'cast_aa_riposte',1096),(7560,22561,'cast_aa_shield_bars',1096),(7561,22564,'cast_aa_deflecting_daggers',1096),(7562,22570,'result_aa_slash_hit',1096),(7563,22571,'result_aa_watchful_eyes',1096),(7564,22574,'cast_aa_music_ring_blast',1096),(7565,22575,'cast_aa_notes_spiral',1096),(7566,22581,'result_aa_note_dagger_p2p',1096),(7567,22584,'carpet_fly_backup',1096),(7568,22585,'carpet_fly_climb',1096),(7569,22586,'carpet_fly_dive',1096),(7570,22587,'carpet_fly_glide',1096),(7571,22588,'carpet_fly_glide_left',1096),(7572,22589,'carpet_fly_glide_right',1096),(7573,22590,'carpet_fly_idle',1096),(7574,22591,'carpet_fly_run',1096),(7575,22592,'carpet_fly_strafe_left',1096),(7576,22593,'carpet_fly_strafe_right',1096),(7577,22594,'carpet_fly_turn_left',1096),(7578,22595,'carpet_fly_turn_right',1096),(7579,22596,'carpet_fly_up',1096),(7580,22597,'carpet_fly_walk',1096),(7581,22600,'carpet_fly_down',1096),(7582,22603,'conjure',1096),(7583,22604,'conjure_enter',1096),(7584,22605,'conjure_exit',1096),(7585,22609,'pray',1096),(7586,22614,'climb',1096),(7587,22617,'design_prexus_water_pillar',1096),(7588,22621,'snd_twolf_attack',1096),(7589,22622,'snd_twolf_attack_01',1096),(7590,22623,'snd_twolf_attack_02',1096),(7591,22624,'snd_twolf_attack_03',1096),(7592,22625,'snd_twolf_attk',1096),(7593,22626,'snd_twolf_attk_01',1096),(7594,22627,'snd_twolf_attk_02',1096),(7595,22628,'snd_twolf_cast_loop',1096),(7596,22629,'snd_twolf_charge_up',1096),(7597,22630,'snd_twolf_death',1096),(7598,22631,'snd_twolf_dodge_back',1096),(7599,22632,'snd_twolf_dodge_down',1096),(7600,22633,'snd_twolf_dodge_fore',1096),(7601,22634,'snd_twolf_dodge_thrust',1096),(7602,22635,'snd_twolf_eat_idle',1096),(7603,22636,'snd_twolf_habitat01',1096),(7604,22637,'snd_twolf_habitat02',1096),(7605,22638,'snd_twolf_idle_01',1096),(7606,22639,'snd_twolf_idle_02',1096),(7607,22640,'snd_twolf_ouch',1096),(7608,22641,'snd_twolf_ouch_knockknees',1096),(7609,22642,'snd_twolf_ouch_thrust',1096),(7610,22643,'snd_twolf_sniff_idle',1096),(7611,22644,'snd_twolf_walk_sniff',1096),(7612,22645,'snd_twolf_whirl',1096),(7613,22646,'snd_twolf_wildswing',1096),(7614,22649,'cast_aa_magic_overflow',1096),(7615,22650,'cast_aa_manasoul',1096),(7616,22651,'cast_aa_mystic_field',1096),(7617,22652,'cast_aa_self_lifetap',1096),(7618,22658,'look',1096),(7619,22659,'result_aa_lightning_clash',1096),(7620,22660,'result_aa_power_convert',1096),(7621,22661,'result_aa_protection_ward',1096),(7622,22662,'result_aa_soul_burn',1096),(7623,22669,'design_fortress_docks_bluefire',1096),(7624,22670,'design_table_explode',1096),(7625,22685,'trdskl_cane',1096),(7626,22686,'trdskl_cane_sit',1096),(7627,22693,'design_blood_dervish',1096),(7628,22694,'design_blood_fountain_blast',1096),(7629,22695,'design_blood_fountain_fx',1096),(7630,22696,'design_electric_barrier',1096),(7631,22697,'design_lightning_floor',1096),(7632,22699,'result_retaliation',1096),(7633,22700,'result_zek_divine',1096),(7634,22701,'result_zek_elemental',1096),(7635,22702,'result_zek_noxious',1096),(7636,22711,'snd_gnm_racemnt_idle_01',1096),(7637,22712,'snd_gnm_racemnt_run_01',1096),(7638,22713,'snd_gnm_racemnt_walk_01',1096),(7639,22734,'temp_idle01',1096),(7640,22735,'temp_idle02',1096),(7641,22736,'temp_idle03',1096),(7642,22749,'sound_hland_griffin_mount_fly_dive',1096),(7643,22756,'design_mount_explode',1096),(7644,22757,'design_speed_boost_buff',1096),(7645,22758,'design_speed_drop_twister_debuff',1096),(7646,22759,'design_timestop_buff',1096),(7647,22760,'design_twister_blaster_buff',1096),(7648,22763,'snd_gnomerace_ringwhoosh',1096),(7649,22766,'cast_aa_blast_tube',1096),(7650,22772,'result_aa_fire_comet',1096),(7651,22773,'result_aa_taunt',1096),(7652,22778,'cast_yelinak_ice_breath',1096),(7653,22783,'sit_chair',1096),(7654,22796,'spin_it',1096),(7655,22799,'cast_aa_whip_circling',1096),(7656,22806,'design_dark_ice_wall',1096),(7657,22808,'knockedtoback_enter',1096),(7658,22809,'knockedtoback_exit',1096),(7659,22816,'design_aqua_crystals_fall',1096),(7660,22817,'design_crysal_wall',1096),(7661,22818,'design_crystal_wall',1096),(7662,22819,'design_green_crystals_fall',1096),(7663,22820,'design_purple_crystals_fall',1096),(7664,22835,'wall_destroy',1096),(7665,22843,'result_mug_hit',1096),(7666,22857,'trdskl_mug_r',1096),(7667,22864,'horse_fly_backup',1096),(7668,22865,'horse_fly_climb',1096),(7669,22866,'horse_fly_dive',1096),(7670,22867,'horse_fly_glide',1096),(7671,22868,'horse_fly_glide_left',1096),(7672,22869,'horse_fly_glide_right',1096),(7673,22870,'horse_fly_idle',1096),(7674,22871,'horse_fly_run',1096),(7675,22872,'horse_fly_strafe_left',1096),(7676,22873,'horse_fly_strafe_right',1096),(7677,22874,'horse_fly_turn_left',1096),(7678,22875,'horse_fly_turn_right',1096),(7679,22876,'horse_fly_up',1096),(7680,22877,'horse_fly_walk',1096),(7681,22879,'result_ice_strike',1096),(7682,22887,'lose_spin',1096),(7683,22888,'pegasus_mount_backup',1096),(7684,22889,'pegasus_mount_fall',1096),(7685,22890,'pegasus_mount_fly_backup',1096),(7686,22891,'pegasus_mount_fly_climb',1096),(7687,22892,'pegasus_mount_fly_dive',1096),(7688,22893,'pegasus_mount_fly_down',1096),(7689,22894,'pegasus_mount_fly_glide',1096),(7690,22895,'pegasus_mount_fly_glide_left',1096),(7691,22896,'pegasus_mount_fly_glide_right',1096),(7692,22897,'pegasus_mount_fly_idle',1096),(7693,22898,'pegasus_mount_fly_run',1096),(7694,22899,'pegasus_mount_fly_strafe_left',1096),(7695,22900,'pegasus_mount_fly_strafe_right',1096),(7696,22901,'pegasus_mount_fly_turn_left',1096),(7697,22902,'pegasus_mount_fly_turn_right',1096),(7698,22903,'pegasus_mount_fly_up',1096),(7699,22904,'pegasus_mount_fly_walk',1096),(7700,22905,'pegasus_mount_idle',1096),(7701,22906,'pegasus_mount_jump',1096),(7702,22907,'pegasus_mount_jump_substitute',1096),(7703,22908,'pegasus_mount_land',1096),(7704,22909,'pegasus_mount_long_fall',1096),(7705,22910,'pegasus_mount_run',1096),(7706,22911,'pegasus_mount_turn_left',1096),(7707,22912,'pegasus_mount_turn_right',1096),(7708,22913,'pegasus_mount_walk',1096),(7709,22916,'sound_coins',1096),(7710,22927,'sound_win',1096),(7711,22929,'win_fx',1096),(7712,22930,'win_spin',1096),(7713,22938,'roll_it',1096),(7714,22945,'design_chronoportal_rift',1096),(7715,22955,'sound_bite_trex',1096),(7716,22956,'sound_breathe_trex',1096),(7717,22960,'sound_idle01_trex',1096),(7718,22961,'sound_idle02_trex',1096),(7719,22962,'sound_idle_trex',1096),(7720,22963,'sound_kick_trex',1096),(7721,22965,'sound_ouch_trex',1096),(7722,22973,'result_ice_strike_targeted',1096),(7723,22980,'flame_burst_lh',1096),(7724,22981,'flame_burst_rh',1096),(7725,22989,'pegasus_mount_fly_fall',1096),(7726,22999,'snd_warboar_fs',1096),(7727,23000,'snd_warboar_attack',1096),(7728,23001,'snd_warboar_attack01',1096),(7729,23002,'snd_warboar_attack02',1096),(7730,23003,'snd_warboar_attack03',1096),(7731,23004,'snd_warboar_cast_targeted_beneficial_end',1096),(7732,23005,'snd_warboar_cast_targeted_beneficial_start',1096),(7733,23006,'snd_warboar_charge_up',1096),(7734,23007,'snd_warboar_combat_enter',1096),(7735,23008,'snd_warboar_dead_enter',1096),(7736,23009,'snd_warboar_dodge_backhand',1096),(7737,23010,'snd_warboar_dodge_forehand',1096),(7738,23011,'snd_warboar_dodge_thrust',1096),(7739,23012,'snd_warboar_idle',1096),(7740,23013,'snd_warboar_idle01',1096),(7741,23014,'snd_warboar_idle02',1096),(7742,23015,'snd_warboar_kick',1096),(7743,23016,'snd_warboar_knockeddowntoknees_01',1096),(7744,23017,'snd_warboar_knockeddowntoknees_02',1096),(7745,23018,'snd_warboar_knockedtoback',1096),(7746,23019,'snd_warboar_knockedtoback_getup',1096),(7747,23020,'snd_warboar_ouch',1096),(7748,23021,'snd_warboar_ouch_backhand',1096),(7749,23022,'snd_warboar_ouch_forehand',1096),(7750,23023,'snd_warboar_shield_shove',1096),(7751,23024,'snd_warboar_swim_walk',1096),(7752,23025,'snd_warboar_whirling_attack',1096),(7753,23026,'snd_warboar_wild_swing',1096),(7754,23027,'snd_warboar_wildswing',1096),(7755,23037,'snd_tallon_zek_arrow_get',1096),(7756,23038,'snd_tallon_zek_bow_pull',1096),(7757,23039,'snd_tallon_zek_bowshot_01',1096),(7758,23040,'snd_tallon_zek_bowshot_02',1096),(7759,23041,'snd_tallon_zek_bowshot_03',1096),(7760,23049,'result_chain_root_simple',1096),(7761,23050,'result_chain_root_simple_sparkle',1096),(7762,23057,'design_eastern_wastes_spire_portal',1096),(7763,23058,'design_gnomish_wormhole',1096),(7764,23059,'design_gnomish_wormhole_exit',1096),(7765,23066,'design_spear_drop',1096),(7766,23067,'design_spear_idle',1096),(7767,23071,'cast_poison_sands',1096),(7768,23078,'snd_sullon_attack_rx',1096),(7769,23079,'snd_sullon_buff_rx',1096),(7770,23080,'snd_sullon_death_rx',1096),(7771,23081,'snd_sullon_ouch_rx',1096),(7772,23089,'persist_notes_green',1096),(7773,23090,'persist_notes_purple',1096),(7774,23092,'snd_bodyfall',1096),(7775,23094,'snd_pegasus_dive_vox',1096),(7776,23095,'snd_pegasus_wingflap_01',1096),(7777,23096,'snd_pegasus_wingflap_02',1096),(7778,23101,'snd_tallon_buff_rx',1096),(7779,23102,'snd_tallon_death_rx',1096),(7780,23103,'snd_tallon_ouch_rx',1096),(7781,23104,'snd_vallon_attack_rx',1096),(7782,23105,'snd_vallon_buff_rx',1096),(7783,23106,'snd_vallon_dead_rx',1096),(7784,23107,'snd_vallon_ouch_rx',1096),(7785,23114,'fire_trail_fx',1144),(7786,23116,'listening',1144),(7787,23143,'talking',1144),(7788,23170,'sound_terrorbird_mount_bare_pant',1144),(7789,23171,'sound_terrorbird_mount_footstep_quiet',1144),(7790,23172,'sound_terrorbird_mount_idle',1144),(7791,23173,'sound_terrorbird_mount_idle01',1144),(7792,23174,'sound_terrorbird_mount_jump_substitute',1144),(7793,23175,'sound_terrorbird_mount_land',1144),(7794,23176,'sound_terrorbird_mount_turn_left',1144),(7795,23177,'sound_terrorbird_mount_turn_right',1144),(7796,23185,'terrorbird_mount',1144),(7797,23186,'terrorbird_mount_backup',1144),(7798,23187,'terrorbird_mount_fall',1144),(7799,23188,'terrorbird_mount_idle',1144),(7800,23189,'terrorbird_mount_idle01',1144),(7801,23190,'terrorbird_mount_jump',1144),(7802,23191,'terrorbird_mount_jump_substitute',1144),(7803,23192,'terrorbird_mount_land',1144),(7804,23193,'terrorbird_mount_long_fall',1144),(7805,23194,'terrorbird_mount_run',1144),(7806,23195,'terrorbird_mount_turn_left',1144),(7807,23196,'terrorbird_mount_turn_right',1144),(7808,23197,'terrorbird_mount_walk',1144),(7809,23204,'feather_fx',1144),(7810,23207,'small_feather_fx',1144),(7811,23215,'komodo_mount_backup',1144),(7812,23216,'komodo_mount_fall',1144),(7813,23217,'komodo_mount_idle',1144),(7814,23218,'komodo_mount_jump',1144),(7815,23219,'komodo_mount_jump_substitute',1144),(7816,23220,'komodo_mount_land',1144),(7817,23221,'komodo_mount_long_fall',1144),(7818,23222,'komodo_mount_run',1144),(7819,23223,'komodo_mount_turn_left',1144),(7820,23224,'komodo_mount_turn_right',1144),(7821,23225,'komodo_mount_walk',1144),(7822,23226,'raptor_mount_backup',1144),(7823,23227,'raptor_mount_fall',1144),(7824,23228,'raptor_mount_idle',1144),(7825,23229,'raptor_mount_jump',1144),(7826,23230,'raptor_mount_jump_substitute',1144),(7827,23231,'raptor_mount_land',1144),(7828,23232,'raptor_mount_long_fall',1144),(7829,23233,'raptor_mount_run',1144),(7830,23234,'raptor_mount_turn_left',1144),(7831,23235,'raptor_mount_turn_right',1144),(7832,23236,'raptor_mount_walk',1144),(7833,23247,'snd_terrorbird_mount_idle_01',1144),(7834,23248,'snd_terrorbird_mount_idle_02',1144),(7835,23249,'snd_terrorbird_mount_idle_03',1144),(7836,23250,'snd_terrorbird_mount_idle_04',1144),(7837,23251,'snd_terrorbird_mount_jump_substitute',1144),(7838,23259,'result_spiritual_vanish',1144),(7839,23270,'snd_terrorbird_mount_wingflap_01',1144),(7840,23281,'snd_raptor_mount_idle_01',1144),(7841,23282,'snd_raptor_mount_idle_02',1144),(7842,23283,'snd_raptor_mount_idle_03',1144),(7843,23284,'snd_raptor_mount_idle_04',1144),(7844,23285,'snd_raptor_mount_jump_substitute',1144),(7845,23286,'snd_raptor_mount_wingflap_01',1144),(7846,23293,'design_pow_rocky_uprising',1144),(7847,23301,'komodo_mount_fly_glide_left',1144),(7848,23302,'komodo_mount_fly_glide_right',1144),(7849,23303,'komodo_mount_glide',1144),(7850,23304,'raptor_mount_fly_glide_left',1144),(7851,23305,'raptor_mount_fly_glide_right',1144),(7852,23306,'raptor_mount_glide',1144),(7853,23307,'raptor_mount_glide_left',1144),(7854,23308,'raptor_mount_glide_right',1144),(7855,23342,'terrorbird_mount_glide',1144),(7856,23343,'walk_kilt',1144),(7857,23351,'komodo_mount_glide_left',1144),(7858,23352,'komodo_mount_glide_right',1144),(7859,23359,'hover_enter',1144),(7860,23360,'hover_walk',1144),(7861,23362,'result_cold_fog_ground',1144),(7862,23363,'result_fire_frostfell_candy',1144),(7863,23364,'result_fire_frosty_swirls',1144),(7864,23387,'snd_wolfmount_jump',1144),(7865,23394,'design_launch_fireworks',1144),(7866,23398,'snd_komodo_mount_idle_01',1144),(7867,23399,'snd_komodo_mount_idle_02',1144),(7868,23400,'snd_komodo_mount_jump_substitute',1144),(7869,23410,'snd_komodo_mount_glide',1144),(7870,23417,'design_hologram01',1144),(7871,23418,'design_hologram02',1144),(7872,23419,'design_hologram03',1144),(7873,23420,'design_hologram04',1144),(7874,23430,'snd_evil_komodo_mount_idle_01',1144),(7875,23431,'snd_evil_komodo_mount_idle_02',1144),(7876,23438,'design_parachute',1144),(7877,23440,'mount_summon_komodo_snd',1144),(7878,23441,'mount_summon_raptor_snd',1144),(7879,23442,'mount_summon_terrorbird_snd',1144),(7880,23445,'snd_komodo_mount_jump',1144),(7881,23447,'snd_raptor_mount_jump',1144),(7882,23455,'snd_terrorbird_mount_jump',1144),(7883,23472,'takeoff_trail',1144),(7884,23479,'design_pow_blur_essence',1144),(7885,23486,'design_ballista_fire',1144),(7886,23487,'design_ballista_load',1144),(7887,23488,'design_drake_pet',1144),(7888,23489,'design_pow_battle_scene',1144),(7889,23496,'design_bixie_face_splat',1144),(7890,23504,'result_dusty_black',1144),(7891,23512,'raptor_idle01',1144),(7892,23513,'raptor_mount_idle02',1144),(7893,23520,'fae_mount_backup',1144),(7894,23521,'fae_mount_fall',1144),(7895,23522,'fae_mount_fly_backup',1144),(7896,23523,'fae_mount_fly_climb',1144),(7897,23524,'fae_mount_fly_dive',1144),(7898,23525,'fae_mount_fly_down',1144),(7899,23526,'fae_mount_fly_glide',1144),(7900,23527,'fae_mount_fly_glide_left',1144),(7901,23528,'fae_mount_fly_glide_right',1144),(7902,23529,'fae_mount_fly_idle',1144),(7903,23530,'fae_mount_fly_run',1144),(7904,23531,'fae_mount_fly_strafe_left',1144),(7905,23532,'fae_mount_fly_strafe_right',1144),(7906,23533,'fae_mount_fly_turn_left',1144),(7907,23534,'fae_mount_fly_turn_right',1144),(7908,23535,'fae_mount_fly_up',1144),(7909,23536,'fae_mount_fly_walk',1144),(7910,23537,'fae_mount_idle',1144),(7911,23538,'fae_mount_jump',1144),(7912,23539,'fae_mount_land',1144),(7913,23540,'fae_mount_long_fall',1144),(7914,23541,'fae_mount_run',1144),(7915,23542,'fae_mount_turn_left',1144),(7916,23543,'fae_mount_turn_right',1144),(7917,23544,'fae_mount_walk',1144),(7918,23572,'trail_fx',1144),(7919,23579,'design_hands_trail_clockwork',1144),(7920,23580,'design_octopus_pet',1144),(7921,23581,'fae_mount_fly_fall',1144),(7922,23582,'fae_mount_jump_substitute',1144),(7923,23604,'snd_war_general_1h_attack',1144),(7924,23605,'snd_war_general_1h_attack01',1144),(7925,23606,'snd_war_general_1h_attack02',1144),(7926,23607,'snd_war_general_1h_attack03',1144),(7927,23608,'snd_war_general_attack',1144),(7928,23609,'snd_war_general_attack01',1144),(7929,23610,'snd_war_general_attack02',1144),(7930,23611,'snd_war_general_attack03',1144),(7931,23612,'snd_war_general_offensive_buff',1144),(7932,23613,'snd_war_general_wing_flap',1144),(7933,23626,'spin_con1',1144),(7934,23627,'spin_con10',1144),(7935,23628,'spin_con11',1144),(7936,23629,'spin_con12',1144),(7937,23630,'spin_con13',1144),(7938,23631,'spin_con14',1144),(7939,23632,'spin_con15',1144),(7940,23633,'spin_con16',1144),(7941,23634,'spin_con2',1144),(7942,23635,'spin_con3',1144),(7943,23636,'spin_con4',1144),(7944,23637,'spin_con5',1144),(7945,23638,'spin_con6',1144),(7946,23639,'spin_con7',1144),(7947,23640,'spin_con8',1144),(7948,23641,'spin_con9',1144),(7949,23642,'squirrel_mount_backup',1144),(7950,23643,'squirrel_mount_fall',1144),(7951,23644,'squirrel_mount_glide',1144),(7952,23645,'squirrel_mount_glide_left',1144),(7953,23646,'squirrel_mount_glide_right',1144),(7954,23647,'squirrel_mount_idle',1144),(7955,23648,'squirrel_mount_idle01',1144),(7956,23649,'squirrel_mount_jump',1144),(7957,23650,'squirrel_mount_jump_substitute',1144),(7958,23651,'squirrel_mount_land',1144),(7959,23652,'squirrel_mount_long_fall',1144),(7960,23653,'squirrel_mount_run',1144),(7961,23654,'squirrel_mount_turn_left',1144),(7962,23655,'squirrel_mount_turn_right',1144),(7963,23656,'squirrel_mount_walk',1144),(7964,23657,'wand_attack',1144),(7965,23658,'wand_idle',1144),(7966,23666,'result_blue_aura',1144),(7967,23667,'result_golden_aura',1144),(7968,23668,'result_poppy_trail',1144),(7969,23669,'result_red_aura',1144),(7970,23684,'snd_war_general_dead_enter',1144),(7971,23685,'snd_war_general_knockeddowntoknees',1144),(7972,23686,'snd_war_general_whirling_attack',1144),(7973,23687,'snd_war_general_wild_swing',1144),(7974,23690,'cast_fae_flight_grant_fx',1144),(7975,23695,'design_rock_launch',1144),(7976,23697,'result_cyclops_eye_debuff',1144),(7977,23698,'result_fae_dark_mount_fx',1144),(7978,23699,'result_fae_light_mount_fx',1144),(7979,23700,'result_falcon_god_egg_spit_p2p',1144),(7980,23701,'screech_fx',1144),(7981,23703,'shield_bash_enter',1144),(7982,23704,'shield_bash_exit',1144),(7983,23706,'snd_falcon_god_fs',1144),(7984,23707,'snd_falcon_god_wing_flap_01',1144),(7985,23720,'snd_war_general_1h_sword_enter',1144),(7986,23721,'snd_war_general_fs',1144),(7987,23722,'snd_war_general_combat_enter',1144),(7988,23723,'snd_war_general_idle01',1144),(7989,23724,'snd_war_general_idle02',1144),(7990,23725,'snd_war_general_ouch_forehand',1144),(7991,23738,'writhe_enter',1144),(7992,23745,'fire_magic',1144),(7993,23750,'snd_falcon_god_attack02_vox',1144),(7994,23751,'snd_falcon_god_attack03_vox',1144),(7995,23752,'snd_falcon_god_attack_vox',1144),(7996,23753,'snd_falcon_god_cast_vox',1144),(7997,23754,'snd_falcon_god_combat_enter_vox',1144),(7998,23755,'snd_falcon_god_idle01',1144),(7999,23756,'snd_falcon_god_idle02_vox',1144),(8000,23757,'snd_falcon_god_offensive_buff',1144),(8001,23759,'snd_squirrel_mount_glide',1144),(8002,23760,'snd_squirrel_mount_idle',1144),(8003,23761,'snd_squirrel_mount_idle_01',1144),(8004,23762,'snd_squirrel_mount_jump',1144),(8005,23763,'snd_squirrel_mount_jump_substitute',1144),(8006,23788,'squirrel_mount_run01',1144),(8007,23789,'trdskl_acorn',1144),(8008,23790,'trdskl_skull',1144),(8009,23797,'fire_magic_blue',1144),(8010,23798,'fire_magic_green',1144),(8011,23799,'fire_magic_purple',1144),(8012,23800,'fire_magic_red',1144),(8013,23801,'gas_torch_flame',1144),(8014,23812,'snd_falcon_god_bodyfall',1144),(8015,23817,'cast_shoot_fire_arrows',1144),(8016,23818,'cast_slash_trail',1144),(8017,23819,'cast_soul_attack_blast',1144),(8018,23823,'result_fire_arrow_storm',1144),(8019,23828,'snd_rallos_zek_1h_sword_attack',1144),(8020,23829,'snd_rallos_zek_1h_sword_attack01',1144),(8021,23830,'snd_rallos_zek_1h_sword_attack02',1144),(8022,23831,'snd_rallos_zek_1h_sword_attack03',1144),(8023,23832,'snd_rallos_zek_fs',1144),(8024,23833,'snd_rallos_zek_shield_bash',1144),(8025,23834,'snd_rallos_zek_shield_bash_exit',1144),(8026,23835,'snd_rallos_zek_shield_shove',1144),(8027,23836,'snd_rallos_zek_whirling_attack01',1144),(8028,23837,'snd_rallos_zek_whirling_attack02',1144),(8029,23838,'snd_rallos_zek_whirling_attack03',1144),(8030,23839,'snd_rallos_zek_whoosh',1144),(8031,23840,'snd_rallos_zek_wild_swing',1144),(8032,23843,'cast_axe_fire_attack',1144),(8033,23844,'cast_axe_flurry',1144),(8034,23847,'cast_shooting_axes',1144),(8035,23848,'cast_slashing_axes',1144),(8036,23853,'cast_shield_slam_blast',1144),(8037,23856,'cast_fire_teleport',1144),(8038,23857,'cast_godly_port',1144),(8039,23862,'design_embedded_swords',1144),(8040,23863,'design_swords_exit',1144),(8041,23866,'angler_mount_backup',1144),(8042,23867,'angler_mount_fall',1144),(8043,23868,'angler_mount_glide',1144),(8044,23869,'angler_mount_glide_left',1144),(8045,23870,'angler_mount_glide_right',1144),(8046,23871,'angler_mount_idle',1144),(8047,23872,'angler_mount_idle01',1144),(8048,23873,'angler_mount_idle02',1144),(8049,23874,'angler_mount_jump',1144),(8050,23875,'angler_mount_jump_substitute',1144),(8051,23876,'angler_mount_land',1144),(8052,23877,'angler_mount_long_fall',1144),(8053,23878,'angler_mount_run',1144),(8054,23879,'angler_mount_run01',1144),(8055,23880,'angler_mount_turn_left',1144),(8056,23881,'angler_mount_turn_right',1144),(8057,23882,'angler_mount_walk',1144),(8058,23887,'design_swords_enter',1144),(8059,23888,'design_swords_strike',1144),(8060,23889,'design_zek_death_fx',1144),(8061,23891,'result_power_infused',1144),(8062,23892,'result_rallos_lightning_p2p',1144),(8063,23895,'snd_angler_mount_glide',1144),(8064,23896,'snd_angler_mount_idle',1144),(8065,23897,'snd_angler_mount_idle_01',1144),(8066,23898,'snd_angler_mount_jump',1144),(8067,23899,'snd_angler_mount_jump_substitute',1144),(8068,23926,'squirrel_mount_idle02',1144),(8069,23929,'cast_godly_port_exit',1144),(8070,23934,'design_result_white_out',1144),(8071,23936,'result_death_charge_blast',1144),(8072,23943,'design_pow_rock_blast',1144),(8073,23946,'cast_gather_fx',1144),(8074,23952,'result_erollisi_bow_attack_p2p',1144),(8075,23955,'breath_fx',1144),(8076,23960,'eye_fx',1144),(8077,23962,'port_down_fx',1144),(8078,23963,'result_shadow_shatter',1144),(8079,23964,'result_shadow_sphere_p2p',1144),(8080,23971,'design_sol_statue_breaking',1144),(8081,23972,'design_sol_statue_essence',1144),(8082,23973,'design_sol_statue_evil_essence',1144),(8083,23975,'result_fire_engulfed_dark',1144),(8084,23976,'result_shadow_streaks',1144),(8085,23983,'design_frostfell_portal_new',1144),(8086,23987,'snd_angler_mount_idle02',1144),(8087,23988,'snd_angler_mount_scratch',1144),(8088,23989,'snd_angler_mount_vox_01',1144),(8089,23990,'snd_angler_mount_vox_02',1144),(8090,23991,'snd_angler_mount_vox_03',1144),(8091,23992,'snd_angler_mount_vox_short',1144),(8092,24000,'result_object_sparkles_black',1144),(8093,24001,'result_object_sparkles_gold',1144),(8094,24002,'result_object_sparkles_pink',1144),(8095,24003,'result_object_sparkles_purple',1144),(8096,24010,'dance_female',1144),(8097,24046,'trdskl_tinker_hands',1144),(8098,24054,'result_exorcise_evil',1144),(8099,24061,'death01_enter',1144),(8100,24062,'death01_exit',1144),(8101,24063,'death01_idle',1144),(8102,24064,'1h_sword_run',1144),(8103,24067,'cast1',1144),(8104,24075,'result_flash_bomb_vanish',1144),(8105,24076,'result_lifetap_heart_p2p',1144),(8106,24084,'player_wing_mount_backup',1144),(8107,24085,'player_wing_mount_fall',1144),(8108,24086,'player_wing_mount_fly_backup',1144),(8109,24087,'player_wing_mount_fly_climb',1144),(8110,24088,'player_wing_mount_fly_dive',1144),(8111,24089,'player_wing_mount_fly_down',1144),(8112,24090,'player_wing_mount_fly_glide',1144),(8113,24091,'player_wing_mount_fly_glide_left',1144),(8114,24092,'player_wing_mount_fly_glide_right',1144),(8115,24093,'player_wing_mount_fly_idle',1144),(8116,24094,'player_wing_mount_fly_run',1144),(8117,24095,'player_wing_mount_fly_strafe_left',1144),(8118,24096,'player_wing_mount_fly_strafe_right',1144),(8119,24097,'player_wing_mount_fly_turn_left',1144),(8120,24098,'player_wing_mount_fly_turn_right',1144),(8121,24099,'player_wing_mount_fly_up',1144),(8122,24100,'player_wing_mount_fly_walk',1144),(8123,24101,'player_wing_mount_idle',1144),(8124,24102,'player_wing_mount_jump',1144),(8125,24103,'player_wing_mount_land',1144),(8126,24104,'player_wing_mount_long_fall',1144),(8127,24105,'player_wing_mount_run',1144),(8128,24106,'player_wing_mount_turn_left',1144),(8129,24107,'player_wing_mount_turn_right',1144),(8130,24108,'player_wing_mount_walk',1144),(8131,24113,'chop_ground_digging',1144),(8132,24114,'chop_ground_success',1144),(8133,24121,'design_glow_eyes_green',1190),(8134,24124,'sit_drink',1190),(8135,24132,'result_flash_bomb_appear',1190),(8136,24140,'reforge_nature_tier01',1190),(8137,24141,'reforge_nature_tier02',1190),(8138,24142,'reforge_nature_tier03',1190),(8139,24143,'reforge_nature_tier04',1190),(8140,24144,'reforge_nature_tier05',1190),(8141,24152,'reforge_fire_tier01',1190),(8142,24153,'reforge_fire_tier02',1190),(8143,24154,'reforge_fire_tier03',1190),(8144,24155,'reforge_fire_tier04',1190),(8145,24156,'reforge_fire_tier05',1190),(8146,24164,'reforge_ice_tier01',1190),(8147,24165,'reforge_ice_tier02',1190),(8148,24166,'reforge_ice_tier03',1190),(8149,24167,'reforge_ice_tier04',1190),(8150,24168,'reforge_ice_tier05',1190),(8151,24176,'reforge_blood_tier01',1190),(8152,24177,'reforge_blood_tier02',1190),(8153,24178,'reforge_blood_tier03',1190),(8154,24179,'reforge_blood_tier04',1190),(8155,24180,'reforge_blood_tier05',1190),(8156,24187,'hassan_chop',1190),(8157,24195,'reforge_acid_tier01',1190),(8158,24196,'reforge_acid_tier02',1190),(8159,24197,'reforge_acid_tier03',1190),(8160,24198,'reforge_acid_tier04',1190),(8161,24199,'reforge_acid_tier05',1190),(8162,24200,'reforge_runic_tier01',1190),(8163,24201,'reforge_runic_tier02',1190),(8164,24202,'reforge_runic_tier03',1190),(8165,24203,'reforge_runic_tier04',1190),(8166,24204,'reforge_runic_tier05',1190),(8167,24212,'reforge_electricity_tier01',1190),(8168,24213,'reforge_electricity_tier02',1190),(8169,24214,'reforge_electricity_tier03',1190),(8170,24215,'reforge_electricity_tier04',1190),(8171,24216,'reforge_electricity_tier05',1190),(8172,24223,'dead_enter01',1190),(8173,24224,'death01',1190),(8174,24225,'horse_attack',1190),(8175,24226,'horse_attack01',1190),(8176,24227,'horse_attack02',1190),(8177,24228,'horse_attack03',1190),(8178,24229,'horse_cast',1190),(8179,24230,'horse_combat_cast',1190),(8180,24231,'horse_combat_enter',1190),(8181,24232,'horse_combat_exit',1190),(8182,24233,'horse_death',1190),(8183,24234,'horse_death01',1190),(8184,24235,'horse_ouch',1190),(8185,24236,'horse_ouch01',1190),(8186,24237,'horse_wild_swing',1190),(8187,24239,'reforge_pestilence_tier01',1190),(8188,24240,'reforge_pestilence_tier02',1190),(8189,24241,'reforge_pestilence_tier03',1190),(8190,24242,'reforge_pestilence_tier04',1190),(8191,24243,'reforge_pestilence_tier05',1190),(8192,24244,'2pike_attack03',1190),(8193,24252,'reforge_illusion_tier01',1190),(8194,24253,'reforge_illusion_tier02',1190),(8195,24254,'reforge_illusion_tier03',1190),(8196,24255,'reforge_illusion_tier04',1190),(8197,24256,'reforge_illusion_tier05',1190),(8198,24257,'reforge_radiance_tier01',1190),(8199,24258,'reforge_radiance_tier02',1190),(8200,24259,'reforge_radiance_tier03',1190),(8201,24260,'reforge_radiance_tier04',1190),(8202,24261,'reforge_radiance_tier05',1190),(8203,24268,'horse_dead',1190),(8204,24269,'horse_dead_enter',1190),(8205,24270,'horse_dead_enter01',1190),(8206,24272,'pegasus_mount_attack',1190),(8207,24273,'pegasus_mount_attack01',1190),(8208,24274,'pegasus_mount_attack02',1190),(8209,24275,'pegasus_mount_attack03',1190),(8210,24276,'pegasus_mount_cast',1190),(8211,24277,'pegasus_mount_combat_enter',1190),(8212,24278,'pegasus_mount_combat_exit',1190),(8213,24279,'pegasus_mount_combat_idle',1190),(8214,24280,'pegasus_mount_dead',1190),(8215,24281,'pegasus_mount_dead_enter',1190),(8216,24282,'pegasus_mount_dead_enter01',1190),(8217,24283,'pegasus_mount_death',1190),(8218,24284,'pegasus_mount_death01',1190),(8219,24285,'pegasus_mount_ouch',1190),(8220,24286,'pegasus_mount_ouch01',1190),(8221,24287,'pegasus_mount_wild_swing',1190),(8222,24288,'result_fprt_ghosts_attack_p2p',1190),(8223,24299,'snd_freeport_knight_1h_sword_attack',1190),(8224,24300,'snd_freeport_knight_1h_sword_attack01',1190),(8225,24301,'snd_freeport_knight_1h_sword_attack02',1190),(8226,24302,'snd_freeport_knight_1h_sword_attack03',1190),(8227,24303,'snd_freeport_knight_fs',1190),(8228,24304,'snd_freeport_knight_charge_up',1190),(8229,24305,'snd_freeport_knight_whirling_attack',1190),(8230,24306,'snd_freeport_knight_wild_swing',1190),(8231,24332,'tiered_chill_claw_buff',1190),(8232,24333,'tiered_chilling_claws',1190),(8233,24334,'tiered_claws_buff',1190),(8234,24335,'tiered_shield_barrier_buff',1190),(8235,24336,'2h_ouch',1190),(8236,24337,'2h_ouch_backhand',1190),(8237,24338,'2h_ouch_down',1190),(8238,24339,'2h_ouch_forehand',1190),(8239,24340,'2h_ouch_thrust',1190),(8240,24341,'2h_sword_dodge',1190),(8241,24344,'backhand',1190),(8242,24349,'horse_ouch_backhand',1190),(8243,24350,'horse_ouch_down',1190),(8244,24351,'horse_ouch_forehand',1190),(8245,24352,'horse_ouch_thrust',1190),(8246,24354,'pike_dodge',1190),(8247,24355,'pike_ouch',1190),(8248,24385,'tiered_spirit_pets_summon',1190),(8249,24393,'mount_attack',1190),(8250,24398,'snd_freeport_knight_cast_death',1190),(8251,24399,'snd_freeport_knight_cast_end',1190),(8252,24400,'snd_freeport_knight_cast_start',1190),(8253,24426,'tiered_claw_marks',1190),(8254,24427,'tiered_feather_shroud',1190),(8255,24428,'tiered_fire_claw_buff',1190),(8256,24429,'tiered_flaming_claws',1190),(8257,24430,'tiered_hand_claws',1190),(8258,24431,'tiered_ice_dagger_p2p',1190),(8259,24434,'attack_swipe',1190),(8260,24435,'cast_aa_frosty_swirls',1190),(8261,24436,'cast_aa_spirit_blast',1190),(8262,24439,'cast_slashing_claws',1190),(8263,24443,'result_aa_wispy_ward',1190),(8264,24444,'result_summon_spirit_swirls',1190),(8265,24445,'result_tame_shroud',1190),(8266,24475,'tiered_vine_net',1190),(8267,24478,'cast_flurry_claws',1190),(8268,24484,'result_lucan_soul_suck_p2p',1190),(8269,24492,'lucan_cast_enter',1190),(8270,24493,'lucan_cast_exit',1190),(8271,24494,'lucan_cast_idle',1190),(8272,24499,'snd_freeport_knight_death',1190),(8273,24500,'snd_freeport_knight_knockeddowntoknees',1190),(8274,24501,'snd_freeport_knight_rx_attack_long',1190),(8275,24502,'snd_freeport_knight_rx_attack_short',1190),(8276,24503,'snd_freeport_knight_rx_buff',1190),(8277,24504,'snd_freeport_knight_rx_death',1190),(8278,24505,'snd_freeport_knight_rx_ouch',1190),(8279,24517,'snd_freeport_knight_attack',1190),(8280,24518,'snd_freeport_knight_attack01',1190),(8281,24519,'snd_freeport_knight_attack02',1190),(8282,24520,'snd_freeport_knight_attack03',1190),(8283,24521,'snd_freeport_knight_rx_cast_end',1190),(8284,24528,'drink_chug',1190),(8285,24529,'horse_combat_attack',1190),(8286,24530,'horse_combat_attack01',1190),(8287,24531,'horse_combat_attack02',1190),(8288,24532,'horse_combat_attack03',1190),(8289,24535,'cast_aa_spirit_bear',1190),(8290,24536,'cast_ghost_rats',1190),(8291,24542,'result_aa_claw_marks',1190),(8292,24543,'result_proc_crit_bonus',1190),(8293,24544,'result_spirit_claws_spinning',1190),(8294,24546,'sfx_bodyfall',1190),(8295,24550,'snd_horse_fs_left',1190),(8296,24551,'snd_horse_fs_right',1190),(8297,24552,'snd_horse_rx_attack',1190),(8298,24553,'snd_horse_rx_death',1190),(8299,24554,'snd_horse_rx_ouch',1190),(8300,24557,'cast_aa_frosty_cone_forward',1190),(8301,24558,'cast_cloud_spin',1190),(8302,24559,'cast_feral_fangs',1190),(8303,24560,'cast_flurry_claws_attack',1190),(8304,24566,'result_ice_attack_p2p',1190),(8305,24569,'cast_aa_flash_bomb_appear',1190),(8306,24570,'cast_aa_melee_swipe',1190),(8307,24571,'cast_crit_hawk_summon',1190),(8308,24576,'icon_merc_heal',1190),(8309,24577,'icon_merc_melee',1190),(8310,24578,'icon_merc_ranged',1190),(8311,24579,'icon_merc_spell',1190),(8312,24580,'icon_merc_support',1190),(8313,24581,'icon_merc_tank',1190),(8314,24584,'cast_aa_spirit_blast_big',1190),(8315,24585,'cast_feral_fangs_bite',1190),(8316,24588,'cast_aa_spirit_ape',1190),(8317,24589,'cast_aa_spirit_boar',1190),(8318,24590,'cast_aa_spirit_crab',1190),(8319,24591,'cast_aa_spirit_rats',1190),(8320,24592,'cast_aa_spirit_stag',1190),(8321,24593,'cast_claws_strike_targeted',1190),(8322,24596,'cast_aa_spirit_bat',1190),(8323,24597,'cast_aa_spirit_cobra',1190),(8324,24598,'cast_aa_spirit_drake',1190),(8325,24599,'cast_aa_spirit_frogs',1190),(8326,24600,'cast_aa_spirit_hawk',1190),(8327,24601,'cast_aa_spirit_tiger',1190),(8328,24602,'cast_aa_spirit_wolf',1190),(8329,24607,'frog_croaking_snd',1190),(8330,24609,'result_luclin_chunk_slam',1190),(8331,24639,'tiger_attack_snd',1190),(8332,24647,'result_aa_tameable_fx',1190),(8333,24650,'cast_aa_spirit_wolf_howling',1190),(8334,24656,'result_feral_fangs_vert_bite',1190),(8335,24659,'cast_aa_frost_wall',1190),(8336,24665,'result_aa_icicle_spikes',1190),(8337,24666,'result_aa_quick_heal',1190),(8338,24667,'result_aa_windy_ward',1190),(8339,24674,'design_frostfell_candyfx01',1190),(8340,24675,'design_frostfell_candyfx02',1190),(8341,24676,'design_frostfell_candyfx03',1190),(8342,24677,'design_frostfell_candyfx04',1190),(8343,24688,'snd_footstep',1190),(8344,24691,'attack_bites',1190),(8345,24692,'attack_shuffle',1190),(8346,24693,'attack_tail_swipe',1190),(8347,24699,'roll',1190),(8348,24729,'spawn',1190),(8349,24732,'cast02',1190),(8350,24735,'combat_idle02',1190),(8351,24738,'dead_alt',1190),(8352,24739,'death_alt',1190),(8353,24740,'fae_mount_combat_idle',1190),(8354,24748,'result_sparkles_object_swirl',1190),(8355,24749,'result_star_spirits',1190),(8356,24750,'run_ground',1190),(8357,24780,'spawn_idle',1190),(8358,24783,'backpack_fly_backup',1190),(8359,24784,'backpack_fly_combat_idle',1190),(8360,24785,'backpack_fly_fall',1190),(8361,24786,'backpack_fly_fly_backup',1190),(8362,24787,'backpack_fly_fly_climb',1190),(8363,24788,'backpack_fly_fly_dive',1190),(8364,24789,'backpack_fly_fly_down',1190),(8365,24790,'backpack_fly_fly_glide',1190),(8366,24791,'backpack_fly_fly_glide_left',1190),(8367,24792,'backpack_fly_fly_glide_right',1190),(8368,24793,'backpack_fly_fly_idle',1190),(8369,24794,'backpack_fly_fly_run',1190),(8370,24795,'backpack_fly_fly_strafe_left',1190),(8371,24796,'backpack_fly_fly_strafe_right',1190),(8372,24797,'backpack_fly_fly_turn_left',1190),(8373,24798,'backpack_fly_fly_turn_right',1190),(8374,24799,'backpack_fly_fly_up',1190),(8375,24800,'backpack_fly_fly_walk',1190),(8376,24801,'backpack_fly_idle',1190),(8377,24802,'backpack_fly_jump',1190),(8378,24803,'backpack_fly_land',1190),(8379,24804,'backpack_fly_long_fall',1190),(8380,24805,'backpack_fly_run',1190),(8381,24806,'backpack_fly_turn_left',1190),(8382,24807,'backpack_fly_turn_right',1190),(8383,24808,'backpack_fly_walk',1190),(8384,24811,'backpack_backup',1190),(8385,24812,'backpack_combat_idle',1190),(8386,24813,'backpack_fall',1190),(8387,24814,'backpack_fly__walk',1190),(8388,24815,'backpack_fly_climb',1190),(8389,24816,'backpack_fly_dive',1190),(8390,24817,'backpack_fly_down',1190),(8391,24818,'backpack_fly_glide',1190),(8392,24819,'backpack_fly_glide_left',1190),(8393,24820,'backpack_fly_glide_right',1190),(8394,24821,'backpack_fly_strafe_left',1190),(8395,24822,'backpack_fly_strafe_right',1190),(8396,24823,'backpack_fly_up',1190),(8397,24824,'backpack_idle',1190),(8398,24825,'backpack_jump',1190),(8399,24826,'backpack_land',1190),(8400,24827,'backpack_long_fall',1190),(8401,24828,'backpack_run',1190),(8402,24829,'backpack_strafe_left',1190),(8403,24830,'backpack_strafe_left_run',1190),(8404,24831,'backpack_strafe_right',1190),(8405,24832,'backpack_strafe_right_run',1190),(8406,24833,'backpack_turn_left',1190),(8407,24834,'backpack_turn_right',1190),(8408,24835,'backpack_walk',1190),(8409,24840,'dual_wield_dead_enter',1190),(8410,24843,'backpack_backup_run',1190),(8411,24851,'persist_bug_swarm',1190),(8412,24861,'snd_fae_wing_flaps',1190),(8413,24868,'drakota_mount_backup',1190),(8414,24869,'drakota_mount_fall',1190),(8415,24870,'drakota_mount_fly_backup',1190),(8416,24871,'drakota_mount_fly_climb',1190),(8417,24872,'drakota_mount_fly_dive',1190),(8418,24873,'drakota_mount_fly_down',1190),(8419,24874,'drakota_mount_fly_glide',1190),(8420,24875,'drakota_mount_fly_glide_left',1190),(8421,24876,'drakota_mount_fly_glide_right',1190),(8422,24877,'drakota_mount_fly_idle',1190),(8423,24878,'drakota_mount_fly_run',1190),(8424,24879,'drakota_mount_fly_strafe_left',1190),(8425,24880,'drakota_mount_fly_strafe_right',1190),(8426,24881,'drakota_mount_fly_turn_left',1190),(8427,24882,'drakota_mount_fly_turn_right',1190),(8428,24883,'drakota_mount_fly_up',1190),(8429,24884,'drakota_mount_fly_walk',1190),(8430,24885,'drakota_mount_idle',1190),(8431,24886,'drakota_mount_idle01',1190),(8432,24887,'drakota_mount_jump',1190),(8433,24888,'drakota_mount_jump_substitute',1190),(8434,24889,'drakota_mount_land',1190),(8435,24890,'drakota_mount_long_fall',1190),(8436,24891,'drakota_mount_run',1190),(8437,24892,'drakota_mount_turn_left',1190),(8438,24893,'drakota_mount_turn_right',1190),(8439,24894,'drakota_mount_walk',1190),(8440,24899,'cast_summon_draconian_cyclone',1190),(8441,24900,'cast_summon_draconian_necro',1190),(8442,24903,'design_sky_necro_beams',1190),(8443,24904,'design_sky_necro_dragon_summon',1190),(8444,24913,'skyshrine_drake_run',1190),(8445,24914,'skyshrine_drake_run01',1190),(8446,24921,'idle_rake',1190),(8447,24958,'tcg_head_aura',1190),(8448,24959,'1h_sword_attack04',1190),(8449,24966,'dance02',1190),(8450,24967,'dance03',1190),(8451,24968,'design_speed_boost_buff_no_sound',1190),(8452,24969,'design_speed_drop_debuff_no_sound',1190),(8453,24970,'drakota_mount_idle_01',1190),(8454,24971,'idle_gardening',1190),(8455,24972,'idle_gathering',1190),(8456,24974,'result_forced_shader_bugs',1190),(8457,24981,'design_glow_eyes_blue',1190),(8458,25012,'wing_wisps_fx',1190),(8459,25019,'dontuse_idle01',1190),(8460,25020,'dontuse_idle02',1190),(8461,25021,'golem_kick',1190),(8462,25024,'cast_corruption_gather',1190),(8463,25026,'cast_pollen_spew',1190),(8464,25028,'cast_seed_spew',1190),(8465,25029,'cast_spore_spew',1190),(8466,25032,'idle_gardening_exit',1190),(8467,25033,'idle_gathering_exit',1190),(8468,25035,'result_icicle_blast_up',1190),(8469,25037,'sit_enter_open',1190),(8470,25038,'sit_exit_open',1190),(8471,25039,'sit_idle_open',1190),(8472,25042,'cast_gather_corruption',1190),(8473,25048,'lounge_enter',1190),(8474,25049,'lounge_exit',1190),(8475,25050,'lounge_idle',1190),(8476,25051,'result_corruption_spew',1190),(8477,25081,'stalk',1190),(8478,25084,'backpack_1h_crush_attack',1190),(8479,25085,'backpack_1h_crush_attack01',1190),(8480,25086,'backpack_1h_crush_attack02',1190),(8481,25087,'backpack_1h_crush_attack03',1190),(8482,25088,'backpack_1h_crush_attack_recoil',1190),(8483,25089,'backpack_1h_crush_attack_recoil01',1190),(8484,25090,'backpack_1h_crush_attack_recoil02',1190),(8485,25091,'backpack_1h_crush_attack_recoil03',1190),(8486,25092,'backpack_1h_crush_backup',1190),(8487,25093,'backpack_1h_crush_dodge_backhand',1190),(8488,25094,'backpack_1h_crush_dodge_down',1190),(8489,25095,'backpack_1h_crush_dodge_forehand',1190),(8490,25096,'backpack_1h_crush_dodge_thrust',1190),(8491,25097,'backpack_1h_crush_enter',1190),(8492,25098,'backpack_1h_crush_exit',1190),(8493,25099,'backpack_1h_crush_idle',1190),(8494,25100,'backpack_1h_crush_ouch_backhand',1190),(8495,25101,'backpack_1h_crush_ouch_down',1190),(8496,25102,'backpack_1h_crush_ouch_forehand',1190),(8497,25103,'backpack_1h_crush_ouch_thrust',1190),(8498,25104,'backpack_1h_crush_parry_backhand',1190),(8499,25105,'backpack_1h_crush_parry_down',1190),(8500,25106,'backpack_1h_crush_parry_forehand',1190),(8501,25107,'backpack_1h_crush_parry_thrust',1190),(8502,25108,'backpack_1h_crush_strafe_left',1190),(8503,25109,'backpack_1h_crush_strafe_right',1190),(8504,25110,'backpack_1h_crush_walk',1190),(8505,25111,'backpack_1h_pierce_attack',1190),(8506,25112,'backpack_1h_pierce_attack01',1190),(8507,25113,'backpack_1h_pierce_attack02',1190),(8508,25114,'backpack_1h_pierce_attack03',1190),(8509,25115,'backpack_1h_pierce_attack_recoil',1190),(8510,25116,'backpack_1h_pierce_attack_recoil01',1190),(8511,25117,'backpack_1h_pierce_attack_recoil02',1190),(8512,25118,'backpack_1h_pierce_attack_recoil03',1190),(8513,25119,'backpack_1h_pierce_backup',1190),(8514,25120,'backpack_1h_pierce_dodge_backhand',1190),(8515,25121,'backpack_1h_pierce_dodge_down',1190),(8516,25122,'backpack_1h_pierce_dodge_forehand',1190),(8517,25123,'backpack_1h_pierce_dodge_thrust',1190),(8518,25124,'backpack_1h_pierce_enter',1190),(8519,25125,'backpack_1h_pierce_exit',1190),(8520,25126,'backpack_1h_pierce_idle',1190),(8521,25127,'backpack_1h_pierce_ouch_backhand',1190),(8522,25128,'backpack_1h_pierce_ouch_down',1190),(8523,25129,'backpack_1h_pierce_ouch_forehand',1190),(8524,25130,'backpack_1h_pierce_ouch_thrust',1190),(8525,25131,'backpack_1h_pierce_parry_backhand',1190),(8526,25132,'backpack_1h_pierce_parry_down',1190),(8527,25133,'backpack_1h_pierce_parry_forehand',1190),(8528,25134,'backpack_1h_pierce_parry_thrust',1190),(8529,25135,'backpack_1h_pierce_strafe_left',1190),(8530,25136,'backpack_1h_pierce_strafe_right',1190),(8531,25137,'backpack_1h_pierce_walk',1190),(8532,25138,'backpack_1h_sword_attack',1190),(8533,25139,'backpack_1h_sword_attack01',1190),(8534,25140,'backpack_1h_sword_attack02',1190),(8535,25141,'backpack_1h_sword_attack03',1190),(8536,25142,'backpack_1h_sword_attack_recoil',1190),(8537,25143,'backpack_1h_sword_attack_recoil01',1190),(8538,25144,'backpack_1h_sword_attack_recoil02',1190),(8539,25145,'backpack_1h_sword_attack_recoil03',1190),(8540,25146,'backpack_1h_sword_backup',1190),(8541,25147,'backpack_1h_sword_death_blow',1190),(8542,25148,'backpack_1h_sword_death_blow01',1190),(8543,25149,'backpack_1h_sword_dodge_backhand',1190),(8544,25150,'backpack_1h_sword_dodge_down',1190),(8545,25151,'backpack_1h_sword_dodge_forehand',1190),(8546,25152,'backpack_1h_sword_dodge_thrust',1190),(8547,25153,'backpack_1h_sword_enter',1190),(8548,25154,'backpack_1h_sword_exit',1190),(8549,25155,'backpack_1h_sword_idle',1190),(8550,25156,'backpack_1h_sword_ouch_backhand',1190),(8551,25157,'backpack_1h_sword_ouch_down',1190),(8552,25158,'backpack_1h_sword_ouch_forehand',1190),(8553,25159,'backpack_1h_sword_ouch_thrust',1190),(8554,25160,'backpack_1h_sword_parry_backhand',1190),(8555,25161,'backpack_1h_sword_parry_down',1190),(8556,25162,'backpack_1h_sword_parry_forehand',1190),(8557,25163,'backpack_1h_sword_parry_thrust',1190),(8558,25164,'backpack_1h_sword_strafe_left',1190),(8559,25165,'backpack_1h_sword_strafe_right',1190),(8560,25166,'backpack_1h_sword_walk',1190),(8561,25167,'backpack_1h_throw_attack',1190),(8562,25168,'backpack_1h_thrown_attack',1190),(8563,25169,'backpack_1h_thrown_backup',1190),(8564,25170,'backpack_1h_thrown_dodge_backhand',1190),(8565,25171,'backpack_1h_thrown_dodge_down',1190),(8566,25172,'backpack_1h_thrown_dodge_forehand',1190),(8567,25173,'backpack_1h_thrown_dodge_thrust',1190),(8568,25174,'backpack_1h_thrown_idle',1190),(8569,25175,'backpack_1h_thrown_ouch_backhand',1190),(8570,25176,'backpack_1h_thrown_ouch_down',1190),(8571,25177,'backpack_1h_thrown_ouch_forehand',1190),(8572,25178,'backpack_1h_thrown_ouch_thrust',1190),(8573,25179,'backpack_1h_thrown_strafe_left',1190),(8574,25180,'backpack_1h_thrown_strafe_right',1190),(8575,25181,'backpack_1h_thrown_walk',1190),(8576,25182,'backpack_1h_wand_attack',1190),(8577,25183,'backpack_1h_wand_attack01',1190),(8578,25184,'backpack_1h_wand_attack02',1190),(8579,25185,'backpack_1h_wand_attack03',1190),(8580,25186,'backpack_1h_wand_attack_recoil',1190),(8581,25187,'backpack_1h_wand_attack_recoil01',1190),(8582,25188,'backpack_1h_wand_attack_recoil02',1190),(8583,25189,'backpack_1h_wand_attack_recoil03',1190),(8584,25190,'backpack_1h_wand_backup',1190),(8585,25191,'backpack_1h_wand_dodge_backhand',1190),(8586,25192,'backpack_1h_wand_dodge_down',1190),(8587,25193,'backpack_1h_wand_dodge_forehand',1190),(8588,25194,'backpack_1h_wand_dodge_thrust',1190),(8589,25195,'backpack_1h_wand_enter',1190),(8590,25196,'backpack_1h_wand_exit',1190),(8591,25197,'backpack_1h_wand_idle',1190),(8592,25198,'backpack_1h_wand_ouch_backhand',1190),(8593,25199,'backpack_1h_wand_ouch_down',1190),(8594,25200,'backpack_1h_wand_ouch_forehand',1190),(8595,25201,'backpack_1h_wand_ouch_thrust',1190),(8596,25202,'backpack_1h_wand_parry_backhand',1190),(8597,25203,'backpack_1h_wand_parry_down',1190),(8598,25204,'backpack_1h_wand_parry_forehand',1190),(8599,25205,'backpack_1h_wand_parry_thrust',1190),(8600,25206,'backpack_1h_wand_strafe_left',1190),(8601,25207,'backpack_1h_wand_strafe_right',1190),(8602,25208,'backpack_1h_wand_walk',1190),(8603,25209,'backpack_2h_sword_attack',1190),(8604,25210,'backpack_2h_sword_attack01',1190),(8605,25211,'backpack_2h_sword_attack02',1190),(8606,25212,'backpack_2h_sword_attack03',1190),(8607,25213,'backpack_2h_sword_attack_recoil',1190),(8608,25214,'backpack_2h_sword_attack_recoil01',1190),(8609,25215,'backpack_2h_sword_attack_recoil02',1190),(8610,25216,'backpack_2h_sword_attack_recoil03',1190),(8611,25217,'backpack_2h_sword_backup',1190),(8612,25218,'backpack_2h_sword_charge_up',1190),(8613,25219,'backpack_2h_sword_defensive_buff',1190),(8614,25220,'backpack_2h_sword_dodge_backhand',1190),(8615,25221,'backpack_2h_sword_dodge_down',1190),(8616,25222,'backpack_2h_sword_dodge_forehand',1190),(8617,25223,'backpack_2h_sword_dodge_thrust',1190),(8618,25224,'backpack_2h_sword_enter',1190),(8619,25225,'backpack_2h_sword_exit',1190),(8620,25226,'backpack_2h_sword_feint',1190),(8621,25227,'backpack_2h_sword_idle',1190),(8622,25228,'backpack_2h_sword_kick',1190),(8623,25229,'backpack_2h_sword_offensive_buff',1190),(8624,25230,'backpack_2h_sword_ouch_backhand',1190),(8625,25231,'backpack_2h_sword_ouch_down',1190),(8626,25232,'backpack_2h_sword_ouch_forehand',1190),(8627,25233,'backpack_2h_sword_ouch_thrust',1190),(8628,25234,'backpack_2h_sword_parry_backhand',1190),(8629,25235,'backpack_2h_sword_parry_down',1190),(8630,25236,'backpack_2h_sword_parry_forehand',1190),(8631,25237,'backpack_2h_sword_parry_thrust',1190),(8632,25238,'backpack_2h_sword_strafe_left',1190),(8633,25239,'backpack_2h_sword_strafe_right',1190),(8634,25240,'backpack_2h_sword_super_buff',1190),(8635,25241,'backpack_2h_sword_taunt',1190),(8636,25242,'backpack_2h_sword_taunt_combat_art',1190),(8637,25243,'backpack_2h_sword_walk',1190),(8638,25244,'backpack_2h_sword_whirling_attack',1190),(8639,25245,'backpack_2h_sword_wild_swing',1190),(8640,25246,'backpack_alchemy_failure',1190),(8641,25247,'backpack_alchemy_idle',1190),(8642,25248,'backpack_alchemy_success',1190),(8643,25249,'backpack_applaude',1190),(8644,25250,'backpack_artificing_failure',1190),(8645,25251,'backpack_artificing_idle',1190),(8646,25252,'backpack_artificing_success',1190),(8647,25253,'backpack_attack',1190),(8648,25254,'backpack_bostaff_attack',1190),(8649,25255,'backpack_bostaff_attack01',1190),(8650,25256,'backpack_bostaff_attack02',1190),(8651,25257,'backpack_bostaff_attack03',1190),(8652,25258,'backpack_bostaff_attack_recoil',1190),(8653,25259,'backpack_bostaff_attack_recoil01',1190),(8654,25260,'backpack_bostaff_attack_recoil02',1190),(8655,25261,'backpack_bostaff_attack_recoil03',1190),(8656,25262,'backpack_bostaff_backup',1190),(8657,25263,'backpack_bostaff_charge_up',1190),(8658,25264,'backpack_bostaff_defensive_buff',1190),(8659,25265,'backpack_bostaff_dodge_backhand',1190),(8660,25266,'backpack_bostaff_dodge_down',1190),(8661,25267,'backpack_bostaff_dodge_forehand',1190),(8662,25268,'backpack_bostaff_dodge_thrust',1190),(8663,25269,'backpack_bostaff_enter',1190),(8664,25270,'backpack_bostaff_exit',1190),(8665,25271,'backpack_bostaff_feint',1190),(8666,25272,'backpack_bostaff_idle',1190),(8667,25273,'backpack_bostaff_kick',1190),(8668,25274,'backpack_bostaff_knockdowntoknees',1190),(8669,25275,'backpack_bostaff_knockedtoback',1190),(8670,25276,'backpack_bostaff_knockedtoback_getup',1190),(8671,25277,'backpack_bostaff_offensive_buff',1190),(8672,25278,'backpack_bostaff_ouch_backhand',1190),(8673,25279,'backpack_bostaff_ouch_down',1190),(8674,25280,'backpack_bostaff_ouch_forehand',1190),(8675,25281,'backpack_bostaff_ouch_thrust',1190),(8676,25282,'backpack_bostaff_parry_backhand',1190),(8677,25283,'backpack_bostaff_parry_down',1190),(8678,25284,'backpack_bostaff_parry_forehand',1190),(8679,25285,'backpack_bostaff_parry_thrust',1190),(8680,25286,'backpack_bostaff_strafe_left',1190),(8681,25287,'backpack_bostaff_strafe_right',1190),(8682,25288,'backpack_bostaff_super_buff',1190),(8683,25289,'backpack_bostaff_taunt_combat_art',1190),(8684,25290,'backpack_bostaff_walk',1190),(8685,25291,'backpack_bostaff_whirling_attack',1190),(8686,25292,'backpack_bostaff_wild_swing',1190),(8687,25293,'backpack_bow_aim_down',1190),(8688,25294,'backpack_bow_aim_up',1190),(8689,25295,'backpack_bow_attack',1190),(8690,25296,'backpack_bow_attack_2x',1190),(8691,25297,'backpack_bow_backup',1190),(8692,25298,'backpack_bow_dodge_backhand',1190),(8693,25299,'backpack_bow_dodge_down',1190),(8694,25300,'backpack_bow_dodge_forehand',1190),(8695,25301,'backpack_bow_dodge_thrust',1190),(8696,25302,'backpack_bow_enter',1190),(8697,25303,'backpack_bow_exit',1190),(8698,25304,'backpack_bow_idle',1190),(8699,25305,'backpack_bow_knockdowntoknees',1190),(8700,25306,'backpack_bow_knockedtoback',1190),(8701,25307,'backpack_bow_knockedtoback_getup',1190),(8702,25308,'backpack_bow_ouch_backhand',1190),(8703,25309,'backpack_bow_ouch_down',1190),(8704,25310,'backpack_bow_ouch_forehand',1190),(8705,25311,'backpack_bow_ouch_thrust',1190),(8706,25312,'backpack_bow_strafe_left',1190),(8707,25313,'backpack_bow_strafe_right',1190),(8708,25314,'backpack_bow_walk',1190),(8709,25315,'backpack_cast_aoe_beneficial_end',1190),(8710,25316,'backpack_cast_aoe_beneficial_loop',1190),(8711,25317,'backpack_cast_aoe_beneficial_start',1190),(8712,25318,'backpack_charge',1190),(8713,25319,'backpack_charge_up',1190),(8714,25320,'backpack_chop_ground_digging',1190),(8715,25321,'backpack_chop_ground_success',1190),(8716,25322,'backpack_climbing_backup',1190),(8717,25323,'backpack_climbing_enter_down',1190),(8718,25324,'backpack_climbing_enter_down_root',1190),(8719,25325,'backpack_climbing_exit_up',1190),(8720,25326,'backpack_climbing_exit_up_root',1190),(8721,25327,'backpack_climbing_idle',1190),(8722,25328,'backpack_climbing_idle01',1190),(8723,25329,'backpack_climbing_ouch',1190),(8724,25330,'backpack_climbing_strafe_left',1190),(8725,25331,'backpack_climbing_strafe_right',1190),(8726,25332,'backpack_climbing_walk',1190),(8727,25333,'backpack_combat_backup_run',1190),(8728,25334,'backpack_combat_run',1190),(8729,25335,'backpack_combat_strafe_left_run',1190),(8730,25336,'backpack_combat_strafe_right_run',1190),(8731,25337,'backpack_cooking_failure',1190),(8732,25338,'backpack_cooking_idle',1190),(8733,25339,'backpack_cooking_success',1190),(8734,25340,'backpack_crouch_backup',1190),(8735,25341,'backpack_crouch_enter',1190),(8736,25342,'backpack_crouch_exit',1190),(8737,25343,'backpack_crouch_idle',1190),(8738,25344,'backpack_crouch_strafe_left',1190),(8739,25345,'backpack_crouch_strafe_right',1190),(8740,25346,'backpack_crouch_turn_left',1190),(8741,25347,'backpack_crouch_turn_right',1190),(8742,25348,'backpack_crouch_walk',1190),(8743,25349,'backpack_cry',1190),(8744,25350,'backpack_dance',1190),(8745,25351,'backpack_dead',1190),(8746,25352,'backpack_dead_enter',1190),(8747,25353,'backpack_defensive_buff',1190),(8748,25354,'backpack_drink_chug',1190),(8749,25355,'backpack_drinking_failure',1190),(8750,25356,'backpack_drinking_idle',1190),(8751,25357,'backpack_drinking_success',1190),(8752,25358,'backpack_dual_wield_attack',1190),(8753,25359,'backpack_dual_wield_attack01',1190),(8754,25360,'backpack_dual_wield_attack02',1190),(8755,25361,'backpack_dual_wield_attack03',1190),(8756,25362,'backpack_dual_wield_attack_recoil',1190),(8757,25363,'backpack_dual_wield_attack_recoil01',1190),(8758,25364,'backpack_dual_wield_attack_recoil02',1190),(8759,25365,'backpack_dual_wield_attack_recoil03',1190),(8760,25366,'backpack_dual_wield_backup',1190),(8761,25367,'backpack_dual_wield_defensive_buff',1190),(8762,25368,'backpack_dual_wield_dodge_backhand',1190),(8763,25369,'backpack_dual_wield_dodge_down',1190),(8764,25370,'backpack_dual_wield_dodge_forehand',1190),(8765,25371,'backpack_dual_wield_dodge_thrust',1190),(8766,25372,'backpack_dual_wield_enter',1190),(8767,25373,'backpack_dual_wield_exit',1190),(8768,25374,'backpack_dual_wield_feint',1190),(8769,25375,'backpack_dual_wield_idle',1190),(8770,25376,'backpack_dual_wield_kick',1190),(8771,25377,'backpack_dual_wield_knockdowntoknees',1190),(8772,25378,'backpack_dual_wield_knockedtoback',1190),(8773,25379,'backpack_dual_wield_knockedtoback_getup',1190),(8774,25380,'backpack_dual_wield_offensive_buff',1190),(8775,25381,'backpack_dual_wield_ouch_backhand',1190),(8776,25382,'backpack_dual_wield_ouch_down',1190),(8777,25383,'backpack_dual_wield_ouch_forehand',1190),(8778,25384,'backpack_dual_wield_ouch_thrust',1190),(8779,25385,'backpack_dual_wield_parry_backhand',1190),(8780,25386,'backpack_dual_wield_parry_down',1190),(8781,25387,'backpack_dual_wield_parry_forehand',1190),(8782,25388,'backpack_dual_wield_parry_thrust',1190),(8783,25389,'backpack_dual_wield_strafe_left',1190),(8784,25390,'backpack_dual_wield_strafe_right',1190),(8785,25391,'backpack_dual_wield_super_buff',1190),(8786,25392,'backpack_dual_wield_taunt_combat_art',1190),(8787,25393,'backpack_dual_wield_walk',1190),(8788,25394,'backpack_dual_wield_whirling_attack',1190),(8789,25395,'backpack_dual_wield_wild_swing',1190),(8790,25396,'backpack_fall_moving',1190),(8791,25397,'backpack_feint',1190),(8792,25398,'backpack_fishing_cast',1190),(8793,25399,'backpack_fishing_fight',1190),(8794,25400,'backpack_fishing_reel_in',1190),(8795,25401,'backpack_flirt',1190),(8796,25402,'backpack_forestry_chopping',1190),(8797,25403,'backpack_forestry_success',1190),(8798,25404,'backpack_gag',1190),(8799,25405,'backpack_gathering_end',1190),(8800,25406,'backpack_gathering_loop',1190),(8801,25407,'backpack_gathering_search',1190),(8802,25408,'backpack_gathering_start',1190),(8803,25409,'backpack_gathering_success',1190),(8804,25410,'backpack_ghost_idle',1190),(8805,25411,'backpack_giggle',1190),(8806,25412,'backpack_glare',1190),(8807,25413,'backpack_hearnoevil',1190),(8808,25414,'backpack_heartattack',1190),(8809,25415,'backpack_hover_idle',1190),(8810,25416,'backpack_jump_moving',1190),(8811,25417,'backpack_kick',1190),(8812,25418,'backpack_knockdown_attack',1190),(8813,25419,'backpack_knockdowntoknees',1190),(8814,25420,'backpack_knockedtoback',1190),(8815,25421,'backpack_knockedtoback_getup',1190),(8816,25422,'backpack_knockedtoback_onbackidle',1190),(8817,25423,'backpack_leatherworking_failure',1190),(8818,25424,'backpack_leatherworking_idle',1190),(8819,25425,'backpack_leatherworking_success',1190),(8820,25426,'backpack_left_hand_fist',1190),(8821,25427,'backpack_left_hand_relaxed',1190),(8822,25428,'backpack_listen',1190),(8823,25429,'backpack_long_fall_moving',1190),(8824,25430,'backpack_metalworking_failure',1190),(8825,25431,'backpack_metalworking_idle',1190),(8826,25432,'backpack_metalworking_success',1190),(8827,25433,'backpack_mining_digging',1190),(8828,25434,'backpack_mining_success',1190),(8829,25435,'backpack_monk_attack',1190),(8830,25436,'backpack_monk_attack01',1190),(8831,25437,'backpack_monk_attack02',1190),(8832,25438,'backpack_monk_attack03',1190),(8833,25439,'backpack_monk_attack_recoil',1190),(8834,25440,'backpack_monk_attack_recoil01',1190),(8835,25441,'backpack_monk_attack_recoil02',1190),(8836,25442,'backpack_monk_attack_recoil03',1190),(8837,25443,'backpack_monk_backup',1190),(8838,25444,'backpack_monk_charge_up',1190),(8839,25445,'backpack_monk_defensive_buff',1190),(8840,25446,'backpack_monk_dodge_backhand',1190),(8841,25447,'backpack_monk_dodge_down',1190),(8842,25448,'backpack_monk_dodge_forehand',1190),(8843,25449,'backpack_monk_dodge_thrust',1190),(8844,25450,'backpack_monk_enter',1190),(8845,25451,'backpack_monk_exit',1190),(8846,25452,'backpack_monk_feint',1190),(8847,25453,'backpack_monk_idle',1190),(8848,25454,'backpack_monk_kick',1190),(8849,25455,'backpack_monk_kick_flying',1190),(8850,25456,'backpack_monk_kick_spin',1190),(8851,25457,'backpack_monk_knockdowntoknees',1190),(8852,25458,'backpack_monk_knockedtoback',1190),(8853,25459,'backpack_monk_knockedtoback_getup',1190),(8854,25460,'backpack_monk_offensive_buff',1190),(8855,25461,'backpack_monk_offensive_buff_short',1190),(8856,25462,'backpack_monk_ouch_backhand',1190),(8857,25463,'backpack_monk_ouch_down',1190),(8858,25464,'backpack_monk_ouch_forehand',1190),(8859,25465,'backpack_monk_ouch_thrust',1190),(8860,25466,'backpack_monk_parry_backhand',1190),(8861,25467,'backpack_monk_parry_down',1190),(8862,25468,'backpack_monk_parry_forehand',1190),(8863,25469,'backpack_monk_parry_thrust',1190),(8864,25470,'backpack_monk_strafe_left',1190),(8865,25471,'backpack_monk_strafe_right',1190),(8866,25472,'backpack_monk_super_buff',1190),(8867,25473,'backpack_monk_taunt_combat_art',1190),(8868,25474,'backpack_monk_walk',1190),(8869,25475,'backpack_monk_whirling_attack',1190),(8870,25476,'backpack_monk_wild_swing',1190),(8871,25477,'backpack_offensive_buff',1190),(8872,25478,'backpack_ouch',1190),(8873,25479,'backpack_pike_attack',1190),(8874,25480,'backpack_pike_attack01',1190),(8875,25481,'backpack_pike_attack02',1190),(8876,25482,'backpack_pike_attack03',1190),(8877,25483,'backpack_pike_attack_recoil',1190),(8878,25484,'backpack_pike_attack_recoil01',1190),(8879,25485,'backpack_pike_attack_recoil02',1190),(8880,25486,'backpack_pike_attack_recoil03',1190),(8881,25487,'backpack_pike_backup',1190),(8882,25488,'backpack_pike_charge_up',1190),(8883,25489,'backpack_pike_death_blow',1190),(8884,25490,'backpack_pike_defensive_buff',1190),(8885,25491,'backpack_pike_dodge_backhand',1190),(8886,25492,'backpack_pike_dodge_down',1190),(8887,25493,'backpack_pike_dodge_forehand',1190),(8888,25494,'backpack_pike_dodge_thrust',1190),(8889,25495,'backpack_pike_enter',1190),(8890,25496,'backpack_pike_exit',1190),(8891,25497,'backpack_pike_feint',1190),(8892,25498,'backpack_pike_idle',1190),(8893,25499,'backpack_pike_kick',1190),(8894,25500,'backpack_pike_knockdowntoknees',1190),(8895,25501,'backpack_pike_knockedtoback',1190),(8896,25502,'backpack_pike_knockedtoback_getup',1190),(8897,25503,'backpack_pike_offensive_buff',1190),(8898,25504,'backpack_pike_ouch_backhand',1190),(8899,25505,'backpack_pike_ouch_down',1190),(8900,25506,'backpack_pike_ouch_forehand',1190),(8901,25507,'backpack_pike_ouch_thrust',1190),(8902,25508,'backpack_pike_parry_backhand',1190),(8903,25509,'backpack_pike_parry_down',1190),(8904,25510,'backpack_pike_parry_forehand',1190),(8905,25511,'backpack_pike_parry_thrust',1190),(8906,25512,'backpack_pike_strafe_left',1190),(8907,25513,'backpack_pike_strafe_right',1190),(8908,25514,'backpack_pike_super_buff',1190),(8909,25515,'backpack_pike_taunt',1190),(8910,25516,'backpack_pike_walk',1190),(8911,25517,'backpack_pike_whirling_attack',1190),(8912,25518,'backpack_pike_wild_swing',1190),(8913,25519,'backpack_ponder',1190),(8914,25520,'backpack_pugilist_attack',1190),(8915,25521,'backpack_pugilist_attack01',1190),(8916,25522,'backpack_pugilist_attack02',1190),(8917,25523,'backpack_pugilist_attack03',1190),(8918,25524,'backpack_pugilist_attack_recoil',1190),(8919,25525,'backpack_pugilist_attack_recoil01',1190),(8920,25526,'backpack_pugilist_attack_recoil02',1190),(8921,25527,'backpack_pugilist_attack_recoil03',1190),(8922,25528,'backpack_pugilist_backup',1190),(8923,25529,'backpack_pugilist_charge_up',1190),(8924,25530,'backpack_pugilist_defensive_buff',1190),(8925,25531,'backpack_pugilist_dodge_backhand',1190),(8926,25532,'backpack_pugilist_dodge_down',1190),(8927,25533,'backpack_pugilist_dodge_forehand',1190),(8928,25534,'backpack_pugilist_dodge_thrust',1190),(8929,25535,'backpack_pugilist_enter',1190),(8930,25536,'backpack_pugilist_exit',1190),(8931,25537,'backpack_pugilist_feint',1190),(8932,25538,'backpack_pugilist_idle',1190),(8933,25539,'backpack_pugilist_kick',1190),(8934,25540,'backpack_pugilist_knockdowntoknees',1190),(8935,25541,'backpack_pugilist_knockedtoback',1190),(8936,25542,'backpack_pugilist_knockedtoback_getup',1190),(8937,25543,'backpack_pugilist_offensive_buff',1190),(8938,25544,'backpack_pugilist_ouch_backhand',1190),(8939,25545,'backpack_pugilist_ouch_down',1190),(8940,25546,'backpack_pugilist_ouch_forehand',1190),(8941,25547,'backpack_pugilist_ouch_thrust',1190),(8942,25548,'backpack_pugilist_parry_backhand',1190),(8943,25549,'backpack_pugilist_parry_down',1190),(8944,25550,'backpack_pugilist_parry_forehand',1190),(8945,25551,'backpack_pugilist_parry_thrust',1190),(8946,25552,'backpack_pugilist_strafe_left',1190),(8947,25553,'backpack_pugilist_strafe_right',1190),(8948,25554,'backpack_pugilist_super_buff',1190),(8949,25555,'backpack_pugilist_taunt',1190),(8950,25556,'backpack_pugilist_walk',1190),(8951,25557,'backpack_pugilist_whirling_attack',1190),(8952,25558,'backpack_pugilist_wild_swing',1190),(8953,25559,'backpack_resurrect',1190),(8954,25560,'backpack_right_hand_fist',1190),(8955,25561,'backpack_right_hand_relaxed',1190),(8956,25562,'backpack_rude',1190),(8957,25563,'backpack_sad',1190),(8958,25564,'backpack_salute_freeport',1190),(8959,25565,'backpack_scheme',1190),(8960,25566,'backpack_scratch',1190),(8961,25567,'backpack_scribing_idle',1190),(8962,25568,'backpack_seenoevil',1190),(8963,25569,'backpack_shame',1190),(8964,25570,'backpack_shield_block_backhand',1190),(8965,25571,'backpack_shield_block_down',1190),(8966,25572,'backpack_shield_block_forehand',1190),(8967,25573,'backpack_shield_block_thrust',1190),(8968,25574,'backpack_shield_shove',1190),(8969,25575,'backpack_shiver',1190),(8970,25576,'backpack_sit_drink',1190),(8971,25577,'backpack_sit_enter',1190),(8972,25578,'backpack_sit_exit',1190),(8973,25579,'backpack_sit_idle',1190),(8974,25580,'backpack_sneeze',1190),(8975,25581,'backpack_sniff',1190),(8976,25582,'backpack_speaknoevil',1190),(8977,25583,'backpack_square',1190),(8978,25584,'backpack_stinky',1190),(8979,25585,'backpack_sulk',1190),(8980,25586,'backpack_super_buff',1190),(8981,25587,'backpack_swim_attack',1190),(8982,25588,'backpack_swim_backup',1190),(8983,25589,'backpack_swim_idle',1190),(8984,25590,'backpack_swim_ouch',1190),(8985,25591,'backpack_swim_walk',1190),(8986,25592,'backpack_tail',1190),(8987,25593,'backpack_tailoring_failure',1190),(8988,25594,'backpack_tailoring_idle',1190),(8989,25595,'backpack_tailoring_success',1190),(8990,25596,'backpack_tapfoot',1190),(8991,25597,'backpack_taunt_combat_art',1190),(8992,25598,'backpack_threaten',1190),(8993,25599,'backpack_untrained_attack',1190),(8994,25600,'backpack_untrained_backup',1190),(8995,25601,'backpack_untrained_dodge',1190),(8996,25602,'backpack_untrained_dodge01',1190),(8997,25603,'backpack_untrained_dodge02',1190),(8998,25604,'backpack_untrained_idle',1190),(8999,25605,'backpack_untrained_ouch',1190),(9000,25606,'backpack_untrained_ouch01',1190),(9001,25607,'backpack_untrained_parry',1190),(9002,25608,'backpack_untrained_recoil',1190),(9003,25609,'backpack_untrained_strafe_left',1190),(9004,25610,'backpack_untrained_strafe_right',1190),(9005,25611,'backpack_untrained_walk',1190),(9006,25612,'backpack_whirling_attack',1190),(9007,25613,'backpack_whistle',1190),(9008,25614,'backpack_wild_swing',1190),(9009,25615,'backpack_wild_swing_recoilmax',1190),(9010,25616,'backpack_woodworking_failure',1190),(9011,25617,'backpack_woodworking_idle',1190),(9012,25618,'backpack_woodworking_success',1190),(9013,25619,'backpack_worship_idle',1190),(9014,25620,'backpack_yeah',1190),(9015,25623,'attachment',1190),(9016,25624,'cast_gather_flowers',1190),(9017,25630,'jump_punch',1190),(9018,25631,'result_flowers_spew',1190),(9019,25634,'attack_spit',1190),(9020,25637,'cast_rocky_uprising',1190),(9021,25640,'flurry_kick',1190),(9022,25645,'cast_raptor_claws',1190),(9023,25649,'result_raptor_spit_p2p',1190),(9024,25650,'2h_twirl',1190),(9025,25653,'_idle01',1190),(9026,25654,'_idle02',1190),(9027,25655,'cast01_enter',1190),(9028,25656,'cast01_exit',1190),(9029,25657,'cast01_idle',1190),(9030,25658,'cast02_enter',1190),(9031,25659,'cast02_exit',1190),(9032,25660,'cast02_idle',1190),(9033,25666,'pike_twirl',1190),(9034,25685,'sound_buff_02',1190),(9035,25688,'attack_flame',1190),(9036,25693,'injured_idle',1190),(9037,25713,'snd_wing_flap',1190),(9038,25714,'2h_cast_enter',1190),(9039,25715,'2h_cast_exit',1190),(9040,25716,'2h_cast_idle',1190),(9041,25728,'snd_fs',1190),(9042,25729,'snd_jump_whoosh',1190),(9043,25732,'cast_belly_flop',1190),(9044,25735,'cast_rocky_blast',1190),(9045,25738,'draconian_injured_idle',1190),(9046,25739,'draconian_search_enter',1190),(9047,25740,'draconian_search_exit',1190),(9048,25741,'draconian_search_idle',1190),(9049,25743,'result_lumpy_spit_p2p',1190),(9050,25750,'design_illusion_fail',1190),(9051,25752,'knocktoknees_exit',1190),(9052,25759,'golem_fx_tubes',1190),(9053,25760,'golem_summon_fx',1190),(9054,25764,'snd_dbg_spawn',1190),(9055,25765,'snd_death',1190),(9056,25768,'snd_fs_l',1190),(9057,25769,'snd_fs_r',1190),(9058,25770,'snd_jump',1190),(9059,25772,'snd_offensive_buff',1190),(9060,25786,'snd_whirl_attk',1190),(9061,25787,'sound_cast',1190),(9062,25794,'drakota_run_glide',1190),(9063,25797,'ice_cube_trail_lf',1190),(9064,25798,'ice_cube_trail_lr',1190),(9065,25799,'ice_cube_trail_rf',1190),(9066,25800,'ice_cube_trail_rr',1190),(9067,25805,'ice_cube_scratch',1190),(9068,25808,'snd_charge_up',1190),(9069,25809,'snd_1h_sword_attack',1190),(9070,25810,'snd_1h_sword_attack01',1190),(9071,25811,'snd_1h_sword_attack02',1190),(9072,25812,'snd_1h_sword_attack03',1190),(9073,25813,'snd_1h_sword_enter',1190),(9074,25814,'snd_1h_sword_exit',1190),(9075,25816,'snd_cast02_yell',1190),(9076,25817,'snd_converse02',1190),(9077,25818,'snd_dual_wield_attack',1190),(9078,25819,'snd_dual_wield_attack01',1190),(9079,25820,'snd_dual_wield_attack02',1190),(9080,25821,'snd_dual_wield_attack03',1190),(9081,25826,'snd_idle_02',1190),(9082,25833,'cast_foot_vine_stomp',1190),(9083,25836,'cast_thorn_circle',1190),(9084,25837,'cast_thorn_clap',1190),(9085,25841,'land_enter',1190),(9086,25842,'land_exit',1190),(9087,25843,'result_wl_root_grow_trap',1190),(9088,25846,'snd_bf',1190),(9089,25865,'snd_whirling_attack',1190),(9090,25866,'snd_wild_swing',1190),(9091,25873,'cast_eat_snowball',1190),(9092,25874,'cast_frog_eat',1190),(9093,25879,'eaten_angler',1190),(9094,25881,'intro',1190),(9095,25889,'snd_ouch',1190),(9096,25914,'splash_fx',1190),(9097,25921,'angler_mount_idle03',1190),(9098,25926,'design_obelisk_broken',1190),(9099,25927,'design_obelisk_repair1',1190),(9100,25938,'design_obelisk_complete',1190),(9101,25939,'design_obelisk_fixed',1190),(9102,25940,'design_obelisk_repair2',1190),(9103,25941,'float',1190),(9104,25943,'sacrifice',1190),(9105,25950,'attack_dive',1190),(9106,25955,'design_obelisk_repair3',1190),(9107,25956,'design_obelisk_repair4',1190),(9108,25963,'attack_hug',1190),(9109,25964,'attack_roar',1190),(9110,25965,'cast_obelisk_rock_summon',1190),(9111,25966,'cast_obelisk_wisps_summon',1190),(9112,26003,'wing_bolts_fx',1190),(9113,26012,'cast_sacrifice_disperse',1190),(9114,26013,'cast_sacrifice_stab',1190),(9115,26016,'design_sky_chokidai_summon',1190),(9116,26017,'design_sky_drake_summon',1190),(9117,26018,'design_sky_plant_summon',1190),(9118,26019,'design_sky_raptor_summon',1190),(9119,26026,'cast_eye_blast',1190),(9120,26031,'design_skyward_comm_beam',1190),(9121,26032,'fly_hover',1190),(9122,26033,'ground_blast_fx',1190),(9123,26059,'sound_teleport_in',1190),(9124,26067,'wing_buffet_fx',1190),(9125,26074,'breath_attack_ice',1190),(9126,26075,'breath_attack_necro',1190),(9127,26082,'attack05',1190),(9128,26085,'cast_shadow_appear',1190),(9129,26086,'cast_teleport_down_fx',1190),(9130,26089,'fly_enter_idle',1190),(9131,26091,'result_banish_fx',1190),(9132,26092,'result_cage_cube',1190),(9133,26103,'dontuse_fly_enter_idle',1190),(9134,26110,'attack_arm',1190),(9135,26111,'cast_druid_light_beams',1190),(9136,26114,'cast_storm_light_parting',1190),(9137,26115,'cast_storm_rain_lightning',1190),(9138,26121,'snd_attack',1190),(9139,26122,'snd_attack01',1190),(9140,26123,'snd_attack02',1190),(9141,26124,'snd_attack03',1190),(9142,26125,'snd_attack_dive',1190),(9143,26126,'snd_attack_hug',1190),(9144,26127,'snd_cast',1190),(9145,26128,'snd_cast_1',1190),(9146,26129,'snd_combat_enter',1190),(9147,26130,'snd_combat_idle01',1190),(9148,26131,'snd_dead_enter',1190),(9149,26132,'snd_defensive_buff',1190),(9150,26137,'snd_fs_mud_01',1190),(9151,26138,'snd_fs_mud_02',1190),(9152,26140,'snd_run',1190),(9153,26151,'design_target_aoe_green',1190),(9154,26152,'design_target_aoe_purple',1190),(9155,26159,'aa_bar_heal',1190),(9156,26160,'aa_blood_burst',1190),(9157,26161,'aa_blood_lust',1190),(9158,26162,'aa_bubble_shield',1190),(9159,26163,'aa_bubble_shield_in',1190),(9160,26164,'aa_cloud_blast',1190),(9161,26165,'aa_cloud_buff_out',1190),(9162,26166,'aa_cloud_ring_burst',1190),(9163,26167,'aa_cold_blast',1190),(9164,26168,'aa_cyclone',1190),(9165,26169,'aa_dark_cyclone',1190),(9166,26170,'aa_dark_ring_vanish',1190),(9167,26171,'aa_divine_hit',1190),(9168,26172,'aa_fire_column',1190),(9169,26173,'aa_flurry_daggers',1190),(9170,26174,'aa_forced_shader_burst',1190),(9171,26175,'aa_glow_eyes',1190),(9172,26176,'aa_hand_buff',1190),(9173,26177,'aa_hand_cross_dark',1190),(9174,26178,'aa_hand_dark_rings',1190),(9175,26179,'aa_hand_flare',1190),(9176,26180,'aa_hand_leaf',1190),(9177,26181,'aa_hand_pattern',1190),(9178,26182,'aa_hand_runes',1190),(9179,26183,'aa_hand_sparkles',1190),(9180,26184,'aa_hand_sparkles_dark',1190),(9181,26185,'aa_hand_sparks',1190),(9182,26186,'aa_hand_stars',1190),(9183,26187,'aa_hand_stars_dark',1190),(9184,26188,'aa_head_halo',1190),(9185,26189,'aa_heal_hands_blast',1190),(9186,26190,'aa_ice_comet',1190),(9187,26191,'aa_ice_comet_shower',1190),(9188,26192,'aa_light_ward',1190),(9189,26193,'aa_lightning_bolt',1190),(9190,26194,'aa_massive_hit',1190),(9191,26195,'aa_music_beam_p2p',1190),(9192,26196,'aa_plasma_hit',1190),(9193,26197,'aa_poison_spore_p2p',1190),(9194,26198,'aa_radiant_glow',1190),(9195,26199,'aa_rune_buff_brawler',1190),(9196,26200,'aa_rune_drop_base',1190),(9197,26201,'aa_rune_forward',1190),(9198,26202,'aa_rune_in_buff',1190),(9199,26203,'aa_rune_rise_base',1190),(9200,26204,'aa_rune_rise_buff',1190),(9201,26205,'aa_shimmer_arrow_p2p',1190),(9202,26206,'aa_snow_tempest',1190),(9203,26207,'aa_sound_rings_head',1190),(9204,26208,'aa_sparkle_trail_weapon_blend',1190),(9205,26209,'aa_spirit_growing',1190),(9206,26210,'aa_spirit_swirl_shield',1190),(9207,26211,'aa_swirly_heal',1190),(9208,26216,'gather_enter',1190),(9209,26217,'gather_exit',1190),(9210,26218,'gather_idle',1190),(9211,26251,'tough_idle',1190),(9212,26252,'tough_idle_enter',1190),(9213,26253,'tough_idle_exit',1190),(9214,26260,'cast_armament_buff',1190),(9215,26261,'cast_ember_breath',1190),(9216,26268,'cast_burrow_dust_fx',1190),(9217,26273,'design_target_aoe_yellow',1190),(9218,26275,'result_ember_fire_engulfed',1190),(9219,26276,'result_explode',1190),(9220,26277,'result_queen_bug_spit_p2p',1190),(9221,26280,'snd_doz_attack',1190),(9222,26281,'snd_doz_attack_01',1190),(9223,26282,'snd_doz_attack_02',1190),(9224,26283,'snd_doz_attack_03',1190),(9225,26284,'snd_doz_cast',1190),(9226,26285,'snd_doz_combat_enter',1190),(9227,26286,'snd_doz_death',1190),(9228,26287,'snd_doz_dodge',1190),(9229,26288,'snd_doz_flyin_01',1190),(9230,26289,'snd_doz_flyin_land',1190),(9231,26290,'snd_doz_kick',1190),(9232,26291,'snd_doz_knocktoknees',1190),(9233,26292,'snd_doz_ouch',1190),(9234,26293,'snd_doz_roar_01',1190),(9235,26294,'snd_doz_shieldshove',1190),(9236,26295,'snd_doz_whirl_attack',1190),(9237,26296,'snd_doz_wildswing',1190),(9238,26303,'cast_hand_fire_trails',1190),(9239,26306,'cast_wing_blast',1190),(9240,26313,'cast_pillar_spin',1190),(9241,26325,'prestige_point_acquired',1190),(9242,26326,'result_vaporize',1190),(9243,26335,'cast_tail_fx',1190),(9244,26342,'_dodge_backhand',1190),(9245,26343,'_dodge_down',1190),(9246,26344,'_dodge_forehand',1190),(9247,26345,'_dodge_thrust',1190),(9248,26346,'_knockeddowntoknees',1190),(9249,26347,'_knockedtoback',1190),(9250,26348,'_knockedtoback_getup',1190),(9251,26349,'_knockedtoback_onbackidle',1190),(9252,26350,'_ouch',1190),(9253,26351,'_ouch_backhand',1190),(9254,26352,'_ouch_down',1190),(9255,26353,'_ouch_forehand',1190),(9256,26354,'_ouch_thrust',1190),(9257,26355,'cast_magic_breath',1190),(9258,26356,'cast_noxious_breath',1190),(9259,26358,'cast_prestige_fx',1190),(9260,26365,'cast_fire_blast',1190),(9261,26371,'result_dark_vaporize',1190),(9262,26372,'result_time_warp',1190),(9263,26383,'gathering_tail_cloak',1190),(9264,26390,'cast_belly_blast',1190),(9265,26391,'cast_dark_shout',1190),(9266,26392,'cast_debris',1190),(9267,26393,'cast_fire_breath',1190),(9268,26396,'cast_sonic_blast',1190),(9269,26397,'ch',1190),(9270,26400,'eyes rotate down',1190),(9271,26401,'eyes rotate left',1190),(9272,26402,'eyes rotate right',1190),(9273,26403,'eyes rotate up',1190),(9274,26405,'jaw rotate y max',1190),(9275,26406,'jaw rotate y min',1190),(9276,26407,'jaw rotate z max',1190),(9277,26408,'jaw rotate z min',1190),(9278,26409,'left blink',1190),(9279,26410,'left brow down',1190),(9280,26411,'left brow up',1190),(9281,26412,'left eye wide',1190),(9282,26413,'left frown',1190),(9283,26414,'lower lip roll in',1190),(9284,26415,'lower lip roll out',1190),(9285,26416,'mbp',1190),(9286,26417,'mid brows down',1190),(9287,26418,'mid brows up',1190),(9288,26419,'mouth down',1190),(9289,26420,'mouth open',1190),(9290,26421,'mouth up',1190),(9291,26422,'normal fv',1190),(9292,26423,'oo tight',1190),(9293,26424,'right blink',1190),(9294,26425,'right brow down',1190),(9295,26426,'right brow up',1190),(9296,26427,'right eye wide',1190),(9297,26428,'right frown',1190),(9298,26429,'scrunch left',1190),(9299,26430,'scrunch right',1190),(9300,26432,'smile left',1190),(9301,26433,'smile right',1190),(9302,26464,'upper lip left up',1190),(9303,26465,'upper lip right up',1190),(9304,26466,'upper lip roll in',1190),(9305,26467,'upper lip roll out',1190),(9306,26474,'base_rest',1190),(9307,26475,'cast_flaming_wings',1190),(9308,26480,'eyes_rotate_down',1190),(9309,26481,'eyes_rotate_left',1190),(9310,26482,'eyes_rotate_right',1190),(9311,26483,'eyes_rotate_up',1190),(9312,26485,'jaw_rotate_y_max',1190),(9313,26486,'jaw_rotate_y_min',1190),(9314,26487,'jaw_rotate_z_max',1190),(9315,26488,'jaw_rotate_z_min',1190),(9316,26489,'left_blink',1190),(9317,26490,'left_brow_down',1190),(9318,26491,'left_brow_up',1190),(9319,26492,'left_eye_wide',1190),(9320,26493,'left_frown',1190),(9321,26494,'mid_brows_down',1190),(9322,26495,'mid_brows_up',1190),(9323,26496,'mouth_down',1190),(9324,26497,'mouth_open',1190),(9325,26498,'mouth_up',1190),(9326,26499,'normalfv',1190),(9327,26500,'oo_tight',1190),(9328,26501,'right_blink',1190),(9329,26502,'right_brow_down',1190),(9330,26503,'right_brow_up',1190),(9331,26504,'right_eye_wide',1190),(9332,26505,'right_frown',1190),(9333,26506,'scrunch_left',1190),(9334,26507,'scrunch_right',1190),(9335,26509,'smile_big_left',1190),(9336,26510,'smile_big_right',1190),(9337,26541,'upper_lip_left_up',1190),(9338,26542,'upper_lip_right_up',1190),(9339,26557,'snd_doz_big_whoosh',1190),(9340,26558,'snd_doz_big_whoosh_02',1190),(9341,26565,'aa_notes_blast',1190),(9342,26566,'aa_stabbing_blades',1190),(9343,26580,'snd_lumpy_1h_sword_attack01',1190),(9344,26581,'snd_lumpy_attack',1190),(9345,26582,'snd_lumpy_attack_01',1190),(9346,26583,'snd_lumpy_attack_02',1190),(9347,26584,'snd_lumpy_attack_03',1190),(9348,26585,'snd_lumpy_attack_bite',1190),(9349,26586,'snd_lumpy_attack_bites',1190),(9350,26587,'snd_lumpy_attack_breath',1190),(9351,26588,'snd_lumpy_attack_shuffle',1190),(9352,26589,'snd_lumpy_attack_slam',1190),(9353,26590,'snd_lumpy_attack_tail',1190),(9354,26591,'snd_lumpy_cast_1',1190),(9355,26592,'snd_lumpy_combat_enter',1190),(9356,26593,'snd_lumpy_dead_enter',1190),(9357,26594,'snd_lumpy_roll',1190),(9358,26627,'sound_attack_flame',1190),(9359,26628,'sound_attack_tail',1190),(9360,26629,'sound_bites',1190),(9361,26630,'sound_defensive_buff',1190),(9362,26634,'sound_idle_01',1190),(9363,26649,'snd_attack04',1190),(9364,26654,'snd_fs_mud',1190),(9365,26656,'snd_mud_elem_attack',1190),(9366,26657,'snd_mud_elem_attack01',1190),(9367,26658,'snd_mud_elem_attack02',1190),(9368,26659,'snd_mud_elem_chargeup',1190),(9369,26660,'snd_mud_elem_dead_enter',1190),(9370,26661,'snd_mud_elem_dodge_fore',1190),(9371,26662,'snd_mud_elem_knocktoback',1190),(9372,26663,'snd_mud_elem_knocktoknees',1190),(9373,26664,'snd_mud_elem_ouch_thrust',1190),(9374,26665,'snd_mud_elem_shield_shove',1190),(9375,26666,'snd_mud_elem_whirl_attack',1190),(9376,26667,'snd_mud_elem_wildswing',1190),(9377,26668,'snd_mud_vox_attck_01',1190),(9378,26669,'snd_mud_vox_attck_02',1190),(9379,26670,'snd_mud_vox_attck_roar',1190),(9380,26671,'snd_mud_vox_cast_1',1190),(9381,26672,'snd_mud_vox_dead_enter',1190),(9382,26673,'snd_mud_vox_def_buff',1190),(9383,26684,'drakota_mount_fly_fall',1190),(9384,26687,'prestige_point_sound',1190),(9385,26690,'snd_cast4',1190),(9386,26691,'snd_doz_spawn',1190),(9387,26710,'snd_xygoz1_attack',1190),(9388,26711,'snd_xygoz1_attack01',1190),(9389,26712,'snd_xygoz1_attack02',1190),(9390,26713,'snd_xygoz1_attack03',1190),(9391,26714,'snd_xygoz1_attack_flame',1190),(9392,26715,'snd_xygoz1_attack_tail',1190),(9393,26716,'snd_xygoz1_dead_enter',1190),(9394,26717,'snd_xygoz1_idle01',1190),(9395,26718,'snd_xygoz1_knockedtoback',1190),(9396,26719,'snd_xygoz1_superbuff',1190),(9397,26734,'snd_drakota_vox_01',1190),(9398,26735,'snd_drakota_vox_02',1190),(9399,26736,'snd_drakota_vox_03',1190),(9400,26748,'lower_lip_left_down',1190),(9401,26749,'lower_lip_right_down',1190),(9402,26760,'design_skyshrine_time_rift',1190),(9403,26767,'_left_eye_wide',1190),(9404,26768,'_right_eye_wide',1190),(9405,26812,'yes',1190),(9406,26843,'snd_vox_short',1190),(9407,26856,'result_beetle_fireball_p2p',1190),(9408,26888,'summon_01',1190),(9409,26889,'1h_sword_cast',1190),(9410,26890,'1h_sword_cast_enter',1190),(9411,26891,'1h_sword_cast_exit',1190),(9412,26892,'1h_sword_cast_idle',1190),(9413,26893,'1h_sword_combat_art_buff',1190),(9414,26894,'1h_sword_combat_enter',1190),(9415,26901,'aa_lightning_blast_hit',1190),(9416,26907,'knocked_to_back',1190),(9417,26908,'knocked_to_back_getup',1190),(9418,26909,'knocked_to_back_idle',1190),(9419,26920,'design_groundportal_rift',1190),(9420,26931,'design_corrupted',1190),(9421,26934,'result_light_explode',1190),(9422,26945,'design_qey_mage_tower_fire',1190),(9423,26946,'design_qey_portal_from_hell',1190),(9424,26953,'aa_time_warp',1190),(9425,26959,'knockedtoknees_dead',1190),(9426,26961,'persist_magic_damage',1190),(9427,26972,'design_qey_fire_room',1190),(9428,26973,'design_qey_wall_crack',1190),(9429,26976,'read_book',1190),(9430,27020,'summon_fx_long',1190),(9431,27021,'summon_fx_short',1190),(9432,27022,'time_stop_sound',1190),(9433,27029,'aa_mental_damage',1190),(9434,27030,'aa_mental_smite',1190),(9435,27031,'aa_soothe',1190),(9436,27036,'idlea',1190),(9437,27037,'idlleb',1190),(9438,27071,'winged_lion_backup',1190),(9439,27072,'winged_lion_fall',1190),(9440,27073,'winged_lion_fly_backup',1190),(9441,27074,'winged_lion_fly_climb',1190),(9442,27075,'winged_lion_fly_dive',1190),(9443,27076,'winged_lion_fly_down',1190),(9444,27077,'winged_lion_fly_glide',1190),(9445,27078,'winged_lion_fly_glide_left',1190),(9446,27079,'winged_lion_fly_glide_right',1190),(9447,27080,'winged_lion_fly_idle',1190),(9448,27081,'winged_lion_fly_run',1190),(9449,27082,'winged_lion_fly_strafe_left',1190),(9450,27083,'winged_lion_fly_strafe_right',1190),(9451,27084,'winged_lion_fly_turn_left',1190),(9452,27085,'winged_lion_fly_turn_right',1190),(9453,27086,'winged_lion_fly_up',1190),(9454,27087,'winged_lion_fly_walk',1190),(9455,27088,'winged_lion_idle',1190),(9456,27089,'winged_lion_idle01',1190),(9457,27090,'winged_lion_jump',1190),(9458,27091,'winged_lion_jump_substitute',1190),(9459,27092,'winged_lion_land',1190),(9460,27093,'winged_lion_long_fall',1190),(9461,27094,'winged_lion_run',1190),(9462,27095,'winged_lion_turn_left',1190),(9463,27096,'winged_lion_turn_right',1190),(9464,27097,'winged_lion_walk',1190),(9465,27108,'idle_a',1190),(9466,27109,'idle_b',1190),(9467,27110,'idle_c',1190),(9468,27121,'evil_bird_backup',1190),(9469,27122,'evil_bird_fall',1190),(9470,27123,'evil_bird_fly_backup',1190),(9471,27124,'evil_bird_fly_climb',1190),(9472,27125,'evil_bird_fly_dive',1190),(9473,27126,'evil_bird_fly_down',1190),(9474,27127,'evil_bird_fly_glide',1190),(9475,27128,'evil_bird_fly_glide_left',1190),(9476,27129,'evil_bird_fly_glide_right',1190),(9477,27130,'evil_bird_fly_idle',1190),(9478,27131,'evil_bird_fly_run',1190),(9479,27132,'evil_bird_fly_strafe_left',1190),(9480,27133,'evil_bird_fly_strafe_right',1190),(9481,27134,'evil_bird_fly_turn_left',1190),(9482,27135,'evil_bird_fly_turn_right',1190),(9483,27136,'evil_bird_fly_up',1190),(9484,27137,'evil_bird_fly_walk',1190),(9485,27138,'evil_bird_idle',1190),(9486,27139,'evil_bird_idle01',1190),(9487,27140,'evil_bird_idle02',1190),(9488,27141,'evil_bird_idle03',1190),(9489,27142,'evil_bird_idle04',1190),(9490,27143,'evil_bird_jump',1190),(9491,27144,'evil_bird_jump_substitute',1190),(9492,27145,'evil_bird_land',1190),(9493,27146,'evil_bird_long_fall',1190),(9494,27147,'evil_bird_run',1190),(9495,27148,'evil_bird_turn_left',1190),(9496,27149,'evil_bird_turn_right',1190),(9497,27150,'evil_bird_walk',1190),(9498,27152,'lion_winged_backup',1190),(9499,27153,'lion_winged_fly_backup',1190),(9500,27154,'lion_winged_fly_idle',1190),(9501,27155,'lion_winged_fly_run',1190),(9502,27156,'lion_winged_fly_strafe_left',1190),(9503,27157,'lion_winged_fly_strafe_right',1190),(9504,27158,'lion_winged_fly_turn_left',1190),(9505,27159,'lion_winged_fly_turn_right',1190),(9506,27160,'lion_winged_fly_walk',1190),(9507,27161,'lion_winged_idle01',1190),(9508,27162,'lion_winged_jump',1190),(9509,27163,'lion_winged_jump_substitute',1190),(9510,27164,'lion_winged_run',1190),(9511,27165,'lion_winged_turn_left',1190),(9512,27166,'lion_winged_turn_right',1190),(9513,27167,'lion_winged_walk',1190),(9514,27178,'dance_a',1190),(9515,27179,'dance_base',1190),(9516,27186,'aa_rune_blur_circular',1190),(9517,27192,'knockdowntoknees_enter',1190),(9518,27193,'knockdowntoknees_exit',1190),(9519,27194,'knockdowntoknees_idle',1190),(9520,27201,'aa_earth_summon',1190),(9521,27202,'aa_summon_minion',1190),(9522,27209,'aa_rune_chain_swirl',1190),(9523,27210,'aa_spirit_heal',1190),(9524,27223,'scream01',1190),(9525,27244,'soul_idle',1190),(9526,27245,'soul_suck_fx',1190),(9527,27246,'soulsuck_enter',1190),(9528,27247,'soulsuck_idle',1190),(9529,27254,'bg_achievement_acquired',1190),(9530,27259,'design_cloudy_dream',1190),(9531,27260,'design_kerafyrm_barrier',1190),(9532,27263,'result_cloudy_dream',1190),(9533,27295,'winged_lion_fly_fall',1190),(9534,27302,'aa_result_leash',1190),(9535,27315,'result_sullon_shadow_curse',1190),(9536,27326,'evil_bird_idle_egg',1190),(9537,27339,'result_blood_craze',1190),(9538,27340,'result_blood_craze_p2p',1190),(9539,27341,'result_blood_wash',1190),(9540,27342,'result_extract_will_p2p',1190),(9541,27355,'result_idol_corruption_p2p',1190),(9542,27366,'design_damage_level1',1190),(9543,27367,'design_damage_level2',1190),(9544,27368,'design_damage_level3',1190),(9545,27369,'design_damage_level4',1190),(9546,27370,'design_damage_level5',1190),(9547,27373,'result_forced_shader_burnt',1190),(9548,27384,'fly_dead',1190),(9549,27391,'attack06',1190),(9550,27395,'crying',1190),(9551,27397,'giggling',1190),(9552,27404,'attack_breath_snd',1190),(9553,27405,'breath_blast_barrier',1190),(9554,27410,'design_kerafyrm_barrier_big',1190),(9555,27411,'design_kerafyrm_barrier_fight',1190),(9556,27412,'design_kerafyrm_barrier_small',1190),(9557,27413,'flames_backlash_snd',1190),(9558,27416,'ouch01_snd',1190),(9559,27417,'ouch02_snd',1190),(9560,27447,'sound_ulthork_awake',1190),(9561,27448,'sound_ulthork_combat_enter',1190),(9562,27449,'sound_ulthork_exhale',1190),(9563,27450,'sound_ulthork_grunt',1190),(9564,27451,'sound_ulthork_idle',1190),(9565,27452,'sound_ulthork_run',1190),(9566,27453,'sound_ulthork_run01',1190),(9567,27454,'sound_ulthork_scratch01',1190),(9568,27455,'sound_ulthork_scratch02',1190),(9569,27456,'sound_ulthork_snore',1190),(9570,27457,'sound_ulthork_walk',1190),(9571,27458,'sound_ulthork_walk01',1190),(9572,27469,'frogdance',1190),(9573,27472,'rock_fx',1190),(9574,27485,'result_compass_hover',1190),(9575,27492,'arasai_evil_skull_swirls',1190),(9576,27497,'dark_elf_splash_mist',1190),(9577,27498,'erudite_book_hover_runes',1190),(9578,27499,'freeblood_skull_swirls_mesh',1190),(9579,27500,'gnome_hands_trail_clockwork_blast',1190),(9580,27501,'halfelf_compass_hover',1190),(9581,27502,'human_water_dripping_wake',1190),(9582,27503,'iksar_water_forced_shader_splash',1190),(9583,27505,'kerra_flea_infestation_trail',1190),(9584,27507,'ogre_fly_swarm_trail',1190),(9585,27508,'ratonga_forced_shader_bertox',1190),(9586,27509,'sarnak_firestrips_trail',1190),(9587,27541,'troll_poison_spirits_gather',1190),(9588,27552,'dwarf_rift_crack_dig',1190),(9589,27553,'fae_fireflies_trail',1190),(9590,27554,'froglok_godly_light_sparkles',1190),(9591,27561,'attack_fistslam',1190),(9592,27562,'attack_groundroar',1190),(9593,27563,'attack_rage',1190),(9594,27566,'combat_idle03',1190),(9595,27569,'halfling_hands_cards_coins_trail',1190),(9596,27570,'highelf_radiant_sparkles',1190),(9597,27573,'powerroar',1190),(9598,27574,'powerslam',1190),(9599,27606,'targeted_left',1190),(9600,27607,'targeted_right',1190),(9601,27608,'transition_left',1190),(9602,27609,'woodelf_leafy_glow_shader',1190),(9603,27616,'barbarian_snow_ice_trail',1190),(9604,27621,'erudite_asteroid_belt',1190),(9605,27622,'freeblood_bat_swirls_mesh',1190),(9606,27623,'gnome_clockwork_gears_blast',1190),(9607,27624,'human_claymore_orbit_trail',1190),(9608,27626,'kerra_spirit_guide_mesh',1190),(9609,27628,'portal_jump',1190),(9610,27629,'portal_stomp',1190),(9611,27630,'ratonga_brain_storm_text',1190),(9612,27662,'transition_back',1190),(9613,27663,'transition_right',1190),(9614,27672,'cast_skull_head_blast',1190),(9615,27675,'design_dark_portal',1190),(9616,27676,'design_light_portal',1190),(9617,27679,'result_blood_dark',1190),(9618,27686,'snd_land',1190),(9619,27701,'snd_winged_lion_idle_01',1190),(9620,27702,'snd_winged_lion_jump_sub',1190),(9621,27704,'sound_evil_bird_jump_sub',1190),(9622,27705,'sound_evil_bird_peck',1190),(9623,27706,'sound_evil_bird_scratch',1190),(9624,27707,'sound_evil_bird_vox_idle03',1190),(9625,27714,'attack_arms',1190),(9626,27715,'attack_jumpslam',1190),(9627,27716,'cast_illusionary_charge_up',1190),(9628,27717,'cast_illusionary_emanation',1190),(9629,27723,'lose_weapon',1190),(9630,27725,'result_floating_chain_root',1190),(9631,27726,'result_illusionary_lights',1190),(9632,27758,'transition_back_extract',1190),(9633,27759,'transition_left_extract',1190),(9634,27760,'transition_right_extract',1190),(9635,27771,'dance_short',1190),(9636,27803,'sound_ulthork_charge_up',1190),(9637,27804,'sound_ulthork_fs',1190),(9638,27805,'sound_ulthork_idle_01',1190),(9639,27806,'sound_ulthork_idle_02',1190),(9640,27807,'sound_ulthork_shield_shove',1190),(9641,27808,'sound_ulthork_whirl_attack_whsh',1190),(9642,27820,'mace_blast',1190),(9643,27822,'rocky_trail',1190),(9644,27823,'rumble_shake',1190),(9645,27831,'snd_peck',1190),(9646,27856,'transition_back01_extract',1190),(9647,27857,'victory',1190),(9648,27868,'fear_wave',1190),(9649,27885,'snd_tbird_pet_angry',1190),(9650,27886,'snd_tbird_pet_attack01',1190),(9651,27887,'snd_tbird_pet_happy',1190),(9652,27888,'snd_tbird_pet_idle01',1190),(9653,27889,'snd_tbird_pet_idle02',1190),(9654,27890,'snd_tbird_pet_idle03',1190),(9655,27891,'snd_tbird_pet_trick',1190),(9656,27900,'cast_toxic_gathering',1190),(9657,27901,'cast_toxic_rain',1190),(9658,27904,'hand_blast',1190),(9659,27911,'cast_acid_rain',1190),(9660,27922,'design_circle_warning_zone',1190),(9661,27923,'design_half_circle_warning_zone',1190),(9662,27924,'design_oval_warning_zone',1190),(9663,27925,'design_third_circle_warning_zone',1190),(9664,27932,'beckon_enter',1190),(9665,27933,'beckon_exit',1190),(9666,27940,'aa_double_pyramid',1190),(9667,27947,'aa_water_summon',1190),(9668,27954,'aa_ooze_summon',1190),(9669,27955,'aa_skull_summon',1190),(9670,27960,'idle01temp',1190),(9671,27962,'jaw_rotate_max',1190),(9672,27965,'smile_left',1190),(9673,27966,'smile_right',1190),(9674,27977,'design_fire_doorway',1190),(9675,27978,'design_icy_doorway',1190),(9676,27989,'dead02',1190),(9677,27990,'design_fire_pillar',1190),(9678,27991,'design_green_light_beam',1190),(9679,27992,'design_ice_pillar',1190),(9680,27993,'design_purple_light_beam',1190),(9681,27994,'design_red_light_beam',1190),(9682,27995,'design_yellow_light_beam',1190),(9683,27998,'sc_win_chest_fx',1190),(9684,28011,'result_fire_beam_p2p',1190),(9685,28012,'result_ice_beam_p2p',1190),(9686,28025,'piledriver',1190),(9687,28034,'chargeup',1190),(9688,28035,'chargeup_enter',1190),(9689,28036,'chargeup_exit',1190),(9690,28037,'chargeup_idle',1190),(9691,28040,'design_lightning_pillar_blue',1190),(9692,28041,'design_lightning_pillar_red',1190),(9693,28042,'design_st_boss_lightning_blue',1190),(9694,28043,'design_st_boss_lightning_red',1190),(9695,28050,'cast03',1190),(9696,28051,'cast04',1190),(9697,28054,'cast_squid_loop',1190),(9698,28057,'design_orange_light_beam',1190),(9699,28058,'design_st_boss_platform_charged_blue',1190),(9700,28059,'design_st_boss_platform_charged_red',1190),(9701,28066,'blue_crystal_dead',1190),(9702,28067,'blue_crystal_on',1190),(9703,28072,'design_urn_shatter',1190),(9704,28075,'red_crystal_dead',1190),(9705,28076,'red_crystal_on',1190),(9706,28077,'result_lightning_floor_blast_blue',1190),(9707,28078,'result_lightning_floor_blast_red',1190),(9708,28089,'dead01',1190),(9709,28090,'design_lightning_pillar_purple',1190),(9710,28091,'design_st_boss_lightning_purple',1190),(9711,28092,'design_st_boss_platform_charged_purple',1190),(9712,28095,'result_damaged',1190),(9713,28096,'result_glass_blast',1190),(9714,28097,'result_lightning_floor_blast_purple',1190),(9715,28098,'result_radiant_glow_no_mesh',1190),(9716,28099,'result_tether_buff_p2p',1190),(9717,28106,'cast_blue_buff',1190),(9718,28109,'cast_red_buff',1190),(9719,28110,'cast_white_buff',1190),(9720,28136,'sound_evil_bird_egg_vox',1190),(9721,28147,'design_ice_column_shatter',1190),(9722,28148,'drinal_summon',1190),(9723,28159,'design_circle_warning_zone_blue',1190),(9724,28160,'design_circle_warning_zone_gold',1190),(9725,28161,'design_half_circle_warning_zone_blue',1190),(9726,28162,'design_half_circle_warning_zone_gold',1190),(9727,28163,'design_oval_warning_zone_blue',1190),(9728,28164,'design_oval_warning_zone_gold',1190),(9729,28165,'design_third_circle_warning_zone_blue',1190),(9730,28166,'design_third_circle_warning_zone_gold',1190),(9731,28178,'lay_egg_hatch',1190),(9732,28189,'design_vd_portal_red',1190),(9733,28223,'status_quest_completes_repeatable',1190),(9734,28224,'status_quest_completes_tradeskill',1190),(9735,28225,'status_quest_gives_repeatable',1190),(9736,28226,'status_quest_gives_tradeskill',1190),(9737,28227,'status_quest_updates_repeatable',1190),(9738,28228,'status_quest_updates_tradeskill',1190),(9739,28239,'drinal_trail_weapon_flames',1190),(9740,28240,'drinal_trail_weapon_poison',1190),(9741,28243,'result_flash_weapon_green',1190),(9742,28254,'drinal_absorb_back_exit',1190),(9743,28255,'drinal_absorb_back_idle',1190),(9744,28256,'drinal_absorb_forward_exit',1190),(9745,28257,'drinal_absorb_forward_idle',1190),(9746,28258,'drinal_absorb_left_exit',1190),(9747,28259,'drinal_absorb_left_idle',1190),(9748,28260,'drinal_absorb_right_exit',1190),(9749,28261,'drinal_absorb_right_idle',1190),(9750,28262,'drinal_fireball_gather',1190),(9751,28263,'drinal_skull_gather',1190),(9752,28264,'drinal_spirt_gather',1190),(9753,28265,'drinal_staff_blast',1190),(9754,28268,'result_drinal_spirits_p2p',1190),(9755,28269,'result_spirits_blast_out',1190),(9756,28278,'close_enter',1190),(9757,28279,'closed_idle',1190),(9758,28282,'dragon_attack',1190),(9759,28283,'dragon_idle',1190),(9760,28286,'open_enter',1190),(9761,28287,'open_idle',1190),(9762,28298,'evil_bird_idle05',1190),(9763,28301,'orbiting_buff_all',1190),(9764,28302,'orbiting_buff_blue',1190),(9765,28303,'orbiting_buff_blue_white',1190),(9766,28304,'orbiting_buff_red',1190),(9767,28305,'orbiting_buff_red_blue',1190),(9768,28306,'orbiting_buff_red_white',1190),(9769,28307,'orbiting_buff_white',1190),(9770,28320,'result_spike_cage',1190),(9771,28331,'design_drinals_portal',1190),(9772,28338,'attack_cannibal',1190),(9773,28345,'oldidle',1190),(9774,28354,'cast_shadow_breath',1190),(9775,28357,'drinal_frontal_blast',1190),(9776,28358,'drinal_warning_zone',1190),(9777,28365,'asleep',1190),(9778,28366,'attack_breath_old',1190),(9779,28371,'design_groundportal_rift_gehein',1190),(9780,28372,'dual_wield_knockeddowntoknees',1190),(9781,28373,'dual_wield_knockedtoback_onbackidle',1190),(9782,28375,'komodo_npc_glide',1190),(9783,28409,'tradeart_forge_hammers_anvil',1190),(9784,28420,'design_agitated',1190),(9785,28421,'design_distorted',1190),(9786,28422,'design_fear',1190),(9787,28440,'snd_tirun_enf_attack',1190),(9788,28441,'snd_tirun_enf_attack01',1190),(9789,28442,'snd_tirun_enf_attack02',1190),(9790,28443,'snd_tirun_enf_attack03',1190),(9791,28444,'snd_tirun_enf_cast1',1190),(9792,28445,'snd_tirun_enf_chargeup',1190),(9793,28446,'snd_tirun_enf_combat_enter',1190),(9794,28447,'snd_tirun_enf_combat_idle01',1190),(9795,28448,'snd_tirun_enf_dead enter',1190),(9796,28449,'snd_tirun_enf_dodge',1190),(9797,28450,'snd_tirun_enf_knocktoknees',1190),(9798,28451,'snd_tirun_enf_ouch',1190),(9799,28452,'snd_tirun_enf_shield_shove',1190),(9800,28453,'snd_tirun_enf_whirling_attack',1190),(9801,28454,'snd_tirun_enf_wild_swing',1190),(9802,28472,'tradeart_flask_beaker_pour',1190),(9803,28473,'tradeart_forge_hammer_metal',1190),(9804,28474,'tradeart_saw_log',1190),(9805,28485,'design_drinals_floor_panel_blue',1190),(9806,28486,'design_drinals_floor_panel_challege_blue',1190),(9807,28487,'design_drinals_floor_panel_challege_red',1190),(9808,28488,'design_drinals_floor_panel_red',1190),(9809,28489,'design_drinals_vessel_arc_blue',1190),(9810,28490,'design_drinals_vessel_arc_red',1190),(9811,28494,'result_bastion_beam_p2p',1190),(9812,28509,'shaman_summon_fx',1190),(9813,28520,'design_tof_rock_collapse01',1190),(9814,28521,'design_tof_rock_collapse02',1190),(9815,28522,'design_tof_rock_collapse03',1190),(9816,28523,'design_tof_rock_collapse04',1190),(9817,28558,'spit',1190),(9818,28569,'design_arcane_barrier',1190),(9819,28570,'design_divine_barrier',1190),(9820,28574,'result_magic_barrier_beam_p2p',1190),(9821,28583,'cast_werewolf_appear',1190),(9822,28584,'cast_werewolf_hair',1190),(9823,28587,'csat_werewolf_vanish',1190),(9824,28594,'attack_eye_cone',1190),(9825,28599,'gazer_charge_up',1190),(9826,28603,'result_essence_suck_p2p',1190),(9827,28604,'result_gazer_flame_eye_beam_p2p',1190),(9828,28619,'sky_float_idle',1190),(9829,28650,'zap_attack',1190),(9830,28661,'fs',1190),(9831,28666,'shaman_crouch_idle',1190),(9832,28673,'snd_skirth_attack',1190),(9833,28674,'snd_skirth_attack01',1190),(9834,28675,'snd_skirth_attack02',1190),(9835,28676,'snd_skirth_attack03',1190),(9836,28677,'snd_skirth_aura',1190),(9837,28678,'snd_skirth_cast_1',1190),(9838,28679,'snd_skirth_chargeup',1190),(9839,28680,'snd_skirth_combat_enter',1190),(9840,28681,'snd_skirth_combat_enter1',1190),(9841,28682,'snd_skirth_dead_enter',1190),(9842,28683,'snd_skirth_knocktobackgetup',1190),(9843,28684,'snd_skirth_ouch',1190),(9844,28685,'snd_skirth_shiield_shove',1190),(9845,28686,'snd_skirth_spit',1190),(9846,28687,'snd_skirth_whirling_attack',1190),(9847,28688,'snd_skirth_wildswing',1190),(9848,28713,'zap_enter',1190),(9849,28714,'zap_exit',1190),(9850,28715,'zap_idle',1190),(9851,28760,'were_cast_idle',1190),(9852,28774,'result_ethernere_fx',1190),(9853,28782,'snd_skirth_idle03',1190),(9854,28796,'result_aggression_removal',1190),(9855,28797,'result_aggression_removal_p2p',1190),(9856,28798,'result_healing_trail_p2p',1190),(9857,28799,'result_lifebringer_glade',1190),(9858,28831,'trdskl_aggro_life_wand',1190),(9859,28847,'snd_baelon_attack',1190),(9860,28848,'snd_baelon_attack01',1190),(9861,28849,'snd_baelon_attack_arms',1190),(9862,28850,'snd_baelon_fs',1190),(9863,28851,'snd_baelon_idle02',1190),(9864,28852,'snd_baelon_idle03',1190),(9865,28853,'snd_baelon_lose_weapon',1190),(9866,28854,'snd_baelon_ouch',1190),(9867,28855,'snd_baelon_powerslam',1190),(9868,28856,'snd_baelon_summon',1190),(9869,28857,'snd_baelon_targeted_right',1190),(9870,28858,'snd_baelon_transition_back',1190),(9871,28859,'snd_baelon_transition_back01_extract',1190),(9872,28860,'snd_baelon_transition_back_extract',1190),(9873,28861,'snd_baelon_transition_left_extract',1190),(9874,28862,'snd_baelon_transition_right',1190),(9875,28863,'snd_baelon_transition_right_extract',1190),(9876,28864,'snd_baelon_unarmed_attack',1190),(9877,28865,'snd_baelon_unarmed_attack01',1190),(9878,28866,'snd_baelon_unarmed_attack02',1190),(9879,28867,'snd_baelon_unarmed_attack_fistslam',1190),(9880,28868,'snd_baelon_unarmed_attack_jumpslam',1190),(9881,28869,'snd_baelon_unarmed_attack_stomp',1190),(9882,28870,'snd_baelon_unarmed_dead_enter',1190),(9883,28871,'snd_baelon_unarmed_fs',1190),(9884,28872,'snd_baelon_unarmed_idle01',1190),(9885,28873,'snd_baelon_unarmed_idle02',1190),(9886,28874,'snd_baelon_unarmed_ouch',1190),(9887,28875,'snd_baelon_unarmed_portal_jump',1190),(9888,28876,'snd_baelon_unarmed_portal_stomp',1190),(9889,28877,'snd_baelon_unarmed_victory',1190),(9890,28878,'snd_baelon_whirling_attack',1190),(9891,28879,'snd_baelon_wild_swing',1190),(9892,28890,'fx_foot_trail_lf',1190),(9893,28891,'fx_foot_trail_lh',1190),(9894,28892,'fx_foot_trail_rf',1190),(9895,28893,'fx_foot_trail_rh',1190),(9896,28917,'sound_bodyfall',1190),(9897,28928,'sound_whoosh',1190),(9898,28930,'untrainted_wildswing',1190),(9899,28941,'gehein_aura_lp',1190),(9900,28946,'sfx_attack_vox',1190),(9901,28947,'sfx_death_vox',1190),(9902,28948,'sfx_gehein_death_vox',1190),(9903,28949,'sfx_gehein_vox_attack',1190),(9904,28950,'sfx_gehein_vox_ouch',1190),(9905,28951,'sfx_whoosh',1190),(9906,28952,'sfx_whoosh_high',1190),(9907,28973,'snd_screecher_attack',1190),(9908,28974,'snd_screecher_attack01',1190),(9909,28975,'snd_screecher_attack02',1190),(9910,28976,'snd_screecher_attack03',1190),(9911,28977,'snd_screecher_aura_lp',1190),(9912,28978,'snd_screecher_cast',1190),(9913,28979,'snd_screecher_cast01',1190),(9914,28980,'snd_screecher_combat_enter',1190),(9915,28981,'snd_screecher_dead_enter',1190),(9916,28982,'snd_screecher_idel01',1190),(9917,28983,'snd_screecher_idle02',1190),(9918,28984,'snd_screecher_jump',1190),(9919,28985,'snd_screecher_ouch',1190),(9920,28986,'snd_screecher_scream',1190),(9921,28987,'snd_screecher_scream01',1190),(9922,28988,'snd_screecher_whirling_attack',1190),(9923,29002,'result_life_statue_fx',1190),(9924,29013,'dont_use_ouch',1190),(9925,29024,'fly_in_old',1190),(9926,29025,'ilde01',1190),(9927,29045,'snd_komodo_attack',1190),(9928,29046,'snd_komodo_attack01',1190),(9929,29047,'snd_komodo_cast01',1190),(9930,29048,'snd_komodo_dead_enter',1190),(9931,29049,'snd_komodo_knocktoback',1190),(9932,29050,'snd_komodo_ouch',1190),(9933,29051,'snd_komodo_whirling_attack',1190),(9934,29052,'snd_komodo_wild_swing',1190),(9935,29063,'design_etherene_fire',1190),(9936,29064,'design_ethernere_vines',1190),(9937,29075,'idle05',1190),(9938,29090,'sfx_vox_gehein_laugh',1190),(9939,29092,'snd_chitari_1h_sword_attack',1190),(9940,29093,'snd_chitari_1h_sword_attack01',1190),(9941,29094,'snd_chitari_1h_sword_attack02',1190),(9942,29095,'snd_chitari_1h_sword_enter',1190),(9943,29096,'snd_chitari_attack',1190),(9944,29097,'snd_chitari_attack01',1190),(9945,29098,'snd_chitari_attack02',1190),(9946,29099,'snd_chitari_attack03',1190),(9947,29100,'snd_chitari_attack_cannibal',1190),(9948,29101,'snd_chitari_charge_up',1190),(9949,29102,'snd_chitari_dead_enter',1190),(9950,29103,'snd_chitari_idle01',1190),(9951,29104,'snd_chitari_knockedtoback_getup',1190),(9952,29105,'snd_chitari_ouch',1190),(9953,29106,'snd_chitari_ouch_forehand',1190),(9954,29107,'snd_chitari_shield_shove',1190),(9955,29108,'snd_chitari_whirling_attack',1190),(9956,29109,'snd_chitari_wild_swing',1190),(9957,29116,'aa_smoke_teleport',1190),(9958,29117,'aa_wave_splash',1190),(9959,29118,'aa_whirlwind_teleport',1190),(9960,29123,'idle04_',1190),(9961,29130,'aa_scythe_slash',1190),(9962,29137,'aa_frozen_rain',1190),(9963,29138,'aa_toxic_mist',1190),(9964,29146,'result_bone_glow_3',1190),(9965,29147,'result_fire_attack_p2p',1190),(9966,29158,'dontuse_knockedtoback',1190),(9967,29159,'dontuse_knockedtoback_getup',1190),(9968,29160,'dontuse_knockedtoback_onbackidle',1190),(9969,29167,'aa_fire_swirl_shield',1190),(9970,29168,'aa_head_skeleton_hands_blast',1190),(9971,29169,'aa_heal_skeleton_hands_blast',1190),(9972,29170,'aa_planar_fire_blast',1190),(9973,29171,'aa_second_skin',1190),(9974,29178,'aa_cast_wind_spin',1190),(9975,29179,'aa_dark_swirly_wisps',1190),(9976,29180,'aa_heal_splash',1190),(9977,29181,'aa_lightning_siphon',1190),(9978,29182,'aa_nature_heal',1190),(9979,29183,'aa_scimitar_cyclone',1190),(9980,29184,'aa_spirit_swirl_buff_ward',1190),(9981,29212,'snd_were_1h_sword_attack01_vox',1190),(9982,29213,'snd_were_1h_sword_attack02_vox',1190),(9983,29214,'snd_were_1h_sword_attack03_vox',1190),(9984,29215,'snd_were_1h_sword_attack_vox',1190),(9985,29216,'snd_were_attack01_vox',1190),(9986,29217,'snd_were_attack02_vox',1190),(9987,29218,'snd_were_attack_vox',1190),(9988,29219,'snd_were_cast_vox',1190),(9989,29220,'snd_were_combat_idle01_vox',1190),(9990,29221,'snd_were_dead_enter_vox',1190),(9991,29222,'snd_were_dual_wield_attack01_vox',1190),(9992,29223,'snd_were_dual_wield_attack02_vox',1190),(9993,29224,'snd_were_dual_wield_attack03_vox',1190),(9994,29225,'snd_were_dual_wield_attack_vox',1190),(9995,29226,'snd_were_kick_vox',1190),(9996,29227,'snd_were_ouch_vox',1190),(9997,29228,'snd_were_shield_shove_vox',1190),(9998,29229,'snd_were_super_buff_vox',1190),(9999,29230,'snd_were_wild_swing_vox',1190),(10000,29242,'swoosh_huge',1190),(10001,29249,'aa_arrow_rapid_salvo',1190),(10002,29250,'aa_fire_arrow_p2p',1190),(10003,29251,'aa_music_dagger_buff',1190),(10004,29252,'aa_sound_wave_blast',1190),(10005,29253,'bird_squawk_sound',1190),(10006,29254,'cast_bagpipe_sound',1190),(10007,29255,'cast_bard_bagpipes',1190),(10008,29262,'scaled_hands_attack03',1190),(10009,29269,'cast_dome_barrier_fx',1190),(10010,29274,'design_comm_on',1190),(10011,29275,'design_tourbillion_flux_fx',1190),(10012,29276,'design_tourbillion_persist_fx',1190),(10013,29279,'result_tourbillion_essence_suck_p2p',1190),(10014,29292,'result_forced_shader_ethernere',1190),(10015,29299,'bodyfall',1190),(10016,29337,'whoosh_large',1190),(10017,29338,'whoosh_lrg',1190),(10018,29353,'snd_attack_long',1190),(10019,29354,'snd_attack_short',1190),(10020,29359,'snd_gargoyle_attack',1190),(10021,29360,'snd_gargoyle_attack03',1190),(10022,29361,'snd_gargoyle_cast_1',1190),(10023,29362,'snd_gargoyle_charge_up',1190),(10024,29363,'snd_gargoyle_combat_enter',1190),(10025,29364,'snd_gargoyle_dead_enter',1190),(10026,29365,'snd_gargoyle_kick',1190),(10027,29366,'snd_gargoyle_knocktoback_getup',1190),(10028,29367,'snd_gargoyle_ouch_forehand',1190),(10029,29368,'snd_gargoyle_shield_shove',1190),(10030,29369,'snd_jump_fx',1190),(10031,29371,'snd_rx_cast1',1190),(10032,29372,'snd_rx_chargeup',1190),(10033,29373,'snd_rx_combat_enter',1190),(10034,29374,'snd_rx_dead_enter',1190),(10035,29384,'cookie_ouch_fx',1190),(10036,29389,'skyshrine_drake_backup',1190),(10037,29390,'skyshrine_drake_fall',1190),(10038,29391,'skyshrine_drake_fly_backup',1190),(10039,29392,'skyshrine_drake_fly_climb',1190),(10040,29393,'skyshrine_drake_fly_dive',1190),(10041,29394,'skyshrine_drake_fly_down',1190),(10042,29395,'skyshrine_drake_fly_glide',1190),(10043,29396,'skyshrine_drake_fly_glide_left',1190),(10044,29397,'skyshrine_drake_fly_glide_right',1190),(10045,29398,'skyshrine_drake_fly_idle',1190),(10046,29399,'skyshrine_drake_fly_run',1190),(10047,29400,'skyshrine_drake_fly_strafe_left',1190),(10048,29401,'skyshrine_drake_fly_strafe_right',1190),(10049,29402,'skyshrine_drake_fly_turn_left',1190),(10050,29403,'skyshrine_drake_fly_turn_right',1190),(10051,29404,'skyshrine_drake_fly_up',1190),(10052,29405,'skyshrine_drake_fly_walk',1190),(10053,29406,'skyshrine_drake_idle',1190),(10054,29407,'skyshrine_drake_idle01',1190),(10055,29408,'skyshrine_drake_jump',1190),(10056,29409,'skyshrine_drake_jump_substitute',1190),(10057,29410,'skyshrine_drake_land',1190),(10058,29411,'skyshrine_drake_long_fall',1190),(10059,29412,'skyshrine_drake_turn_left',1190),(10060,29413,'skyshrine_drake_turn_right',1190),(10061,29414,'skyshrine_drake_walk',1190),(10062,32784,'kill_1h_sword_idle',0),(10063,32818,'kill_2h_sword_enter',0),(10064,32820,'kill_2h_sword_idle',0),(10065,32869,'kill_bostaff_idle',0),(10066,32889,'kill_bow',0),(10067,32893,'kill_cackle',0),(10068,32894,'kill_cast',0),(10069,32906,'kill_cast_arch_circle',0),(10070,32907,'kill_cast_ball',0),(10071,32908,'kill_cast_bright_ring',0),(10072,32909,'kill_cast_columns',0),(10073,32910,'kill_cast_dark_ring',0),(10074,32911,'kill_cast_dbl_bright_ring',0),(10075,32912,'kill_cast_druid',0),(10076,32913,'kill_cast_dustpuff',0),(10077,32914,'kill_cast_heal',0),(10078,32915,'kill_cast_heal_blur',0),(10079,32916,'kill_cast_lightning',0),(10080,32917,'kill_cast_mage',0),(10081,32918,'kill_cast_mandala',0),(10082,32919,'kill_cast_mesmerize',0),(10083,32920,'kill_cast_necromancer',0),(10084,32921,'kill_cast_nuke_mental',0),(10085,32922,'kill_cast_pfx_dust_leaves_l',0),(10086,32923,'kill_cast_pfx_dust_leaves_r',0),(10087,32926,'kill_cast_pfx_glow_firepuff_l',0),(10088,32927,'kill_cast_pfx_glow_firepuff_r',0),(10089,32928,'kill_cast_pfx_glow_galv_l',0),(10090,32929,'kill_cast_pfx_glow_galv_r',0),(10091,32930,'kill_cast_pfx_glow_prism_l',0),(10092,32931,'kill_cast_pfx_glow_prism_r',0),(10093,32934,'kill_cast_pfx_l',0),(10094,32935,'kill_cast_pfx_magenuke_l',0),(10095,32936,'kill_cast_pfx_magenuke_r',0),(10096,32937,'kill_cast_pfx_r',0),(10097,32940,'kill_cast_placeholder_l',0),(10098,32941,'kill_cast_placeholder_r',0),(10099,32942,'kill_cast_priest',0),(10100,32943,'kill_cast_rays',0),(10101,32944,'kill_cast_rays_l',0),(10102,32945,'kill_cast_rays_mental',0),(10103,32946,'kill_cast_rays_r',0),(10104,32948,'kill_cast_rings_crescent',0),(10105,32949,'kill_cast_rune_ring',0),(10106,32950,'kill_cast_runedraw',0),(10107,32951,'kill_cast_runes_randomorbits',0),(10108,32952,'kill_cast_spark_circle',0),(10109,32953,'kill_cast_sparktrail_spiral',0),(10110,32954,'kill_cast_spotsparks_ring',0),(10111,32955,'kill_cast_swirlie',0),(10112,32956,'kill_cast_vault',0),(10113,32957,'kill_cast_ward',0),(10114,32987,'kill_crouch_enter',0),(10115,32988,'kill_crouch_exit',0),(10116,32989,'kill_crouch_idle',0),(10117,32996,'kill_dead',0),(10118,32997,'kill_dead_enter',0),(10119,33035,'kill_dual_wield_idle',0),(10120,33058,'kill_fall',0),(10121,33066,'kill_flourish',0),(10122,33076,'kill_gag',0),(10123,33091,'kill_idle',0),(10124,33092,'kill_idle01',0),(10125,33093,'kill_idle02',0),(10126,33140,'kill_monk_idle',0),(10127,33164,'kill_notworthy',0),(10128,33187,'kill_pike_idle',0),(10129,33202,'kill_procedural_hit',0),(10130,33218,'kill_pugilist_idle',0),(10131,33257,'kill_result_bash',0),(10132,33258,'kill_result_buff_limbs',0),(10133,33259,'kill_result_fire',0),(10134,33260,'kill_result_firetrail',0),(10135,33261,'kill_result_firews',0),(10136,33263,'kill_result_gather_mana1',0),(10137,33264,'kill_result_ghost',0),(10138,33265,'kill_result_heal',0),(10139,33266,'kill_result_heal11',0),(10140,33267,'kill_result_heal9',0),(10141,33268,'kill_result_kick',0),(10142,33269,'kill_result_lightning',0),(10143,33270,'kill_result_loot',0),(10144,33271,'kill_result_loot_ash',0),(10145,33272,'kill_result_mesmerize',0),(10146,33273,'kill_result_placeholder',0),(10147,33274,'kill_result_spawn',0),(10148,33275,'kill_result_strike',0),(10149,33276,'kill_result_stun',0),(10150,33277,'kill_result_test',0),(10151,33278,'kill_result_ward',0),(10152,33279,'kill_result_ward1',0),(10153,33285,'kill_run',0),(10154,33286,'kill_rune_fire_orbiting',0),(10155,33306,'kill_sit_enter',0),(10156,33307,'kill_sit_exit',0),(10157,33308,'kill_sit_idle',0),(10158,33394,'kill_spell_placeholder',0),(10159,33395,'kill_spell_root',0),(10160,33490,'kill_trail',0),(10161,33514,'kill_untrained_idle',0),(10162,33659,'kill_yawn',0),(10163,33661,'kill_cast_cloudring',0),(10164,33662,'kill_cast_dblring_blend',0),(10165,33663,'kill_cast_lhand_sparkle_trail',0),(10166,33670,'kill_cast_mistring',0),(10167,33677,'kill_cast_rhand_sparkle_trail',0),(10168,33736,'kill_cast_cloudsphere',0),(10169,33772,'kill_horse_idle',0),(10170,33794,'kill_1h_sword_attack',0),(10171,33795,'kill_1h_sword_attack01',0),(10172,33796,'kill_1h_sword_attack02',0),(10173,33797,'kill_1h_sword_attack03',0),(10174,33812,'kill_cast_rays_cloud',0),(10175,33813,'kill_cast_winkers',0),(10176,33821,'kill_procedural_ouch',0),(10177,33822,'kill_result_bear',0),(10178,33882,'kill_1h_sword_death_blow',0),(10179,33930,'kill_procedural_parry',0),(10180,33931,'kill_ignite_weapon',0),(10181,33949,'kill_monk_attack',0),(10182,33969,'kill_monk_attack01',0),(10183,33974,'kill_pike_attack',0),(10184,33979,'kill_cast_orbiting_rings',0),(10185,33980,'kill_cast_spiral_trace',0),(10186,33986,'kill_cast_elec_hands',0),(10187,33994,'kill_cast_pfx_glow_trail_l',0),(10188,33995,'kill_cast_pfx_glow_trail_r',0),(10189,33996,'kill_cast_hammer_toss',0),(10190,33997,'kill_result_hammer_approaching',0),(10191,33998,'kill_result_hammer_explode',0),(10192,34005,'kill_2h_sword_attack',0),(10193,34011,'kill_dual_wield_attack',0),(10194,34012,'kill_dual_wield_attack01',0),(10195,34013,'kill_dual_wield_attack02',0),(10196,34026,'kill_cast_scimitar_toss',0),(10197,34027,'kill_cast_spark_sphere',0),(10198,34029,'kill_result_scimitar_approaching',0),(10199,34030,'kill_result_scimitar_explode',0),(10200,34039,'kill_1h_sword_dodge_backhand',0),(10201,34040,'kill_1h_sword_dodge_down',0),(10202,34041,'kill_1h_sword_dodge_forehand',0),(10203,34042,'kill_1h_sword_ouch_backhand',0),(10204,34043,'kill_1h_sword_ouch_down',0),(10205,34044,'kill_1h_sword_ouch_forehand',0),(10206,34045,'kill_1h_sword_parry_backhand',0),(10207,34046,'kill_1h_sword_parry_down',0),(10208,34047,'kill_1h_sword_parry_forehand',0),(10209,34048,'kill_cast_distort',0),(10210,34049,'kill_cast_distort_rect',0),(10211,34050,'kill_cast_trail_leftarm',0),(10212,34051,'kill_cast_trail_rightarm',0),(10213,34052,'kill_monk_attack02',0),(10214,34054,'kill_monk_dodge_backhand',0),(10215,34055,'kill_monk_dodge_down',0),(10216,34063,'kill_result_blast_cone',0),(10217,34064,'kill_result_camera_shake',0),(10218,34065,'kill_result_ground_blast',0),(10219,34066,'kill_result_lightning_bolt1',0),(10220,34067,'kill_result_lion_spirit',0),(10221,34068,'kill_result_phoenix_rising',0),(10222,34070,'kill_result_flash1',0),(10223,34071,'kill_result_lightning_bolt2',0),(10224,34072,'kill_result_lightning_bolt3',0),(10225,34073,'kill_result_spirit_of_the_wolf',0),(10226,34075,'kill_cast_runedraw_blue',0),(10227,34082,'kill_result_phoenix_descending',0),(10228,34084,'kill_cast_dustpuff_rfoot',0),(10229,34085,'kill_cast_trail_rightfoot',0),(10230,34086,'kill_cast_trail_rightshin',0),(10231,34091,'kill_1h_crush_attack',0),(10232,34092,'kill_1h_crush_attack01',0),(10233,34093,'kill_1h_crush_attack02',0),(10234,34094,'kill_1h_crush_attack03',0),(10235,34100,'kill_1h_crush_dodge_backhand',0),(10236,34101,'kill_1h_crush_dodge_down',0),(10237,34102,'kill_1h_crush_dodge_forehand',0),(10238,34103,'kill_1h_crush_dodge_thrust',0),(10239,34106,'kill_1h_crush_idle',0),(10240,34107,'kill_1h_crush_ouch_backhand',0),(10241,34108,'kill_1h_crush_ouch_down',0),(10242,34109,'kill_1h_crush_ouch_forehand',0),(10243,34110,'kill_1h_crush_ouch_thrust',0),(10244,34111,'kill_1h_crush_parry_backhand',0),(10245,34112,'kill_1h_crush_parry_down',0),(10246,34113,'kill_1h_crush_parry_forehand',0),(10247,34114,'kill_1h_crush_parry_thrust',0),(10248,34118,'kill_1h_pierce_attack',0),(10249,34119,'kill_1h_pierce_attack01',0),(10250,34123,'kill_1h_pierce_dodge_backhand',0),(10251,34124,'kill_1h_pierce_dodge_down',0),(10252,34125,'kill_1h_pierce_dodge_forehand',0),(10253,34126,'kill_1h_pierce_dodge_thrust',0),(10254,34129,'kill_1h_pierce_idle',0),(10255,34130,'kill_1h_pierce_ouch_backhand',0),(10256,34131,'kill_1h_pierce_ouch_down',0),(10257,34132,'kill_1h_pierce_ouch_forehand',0),(10258,34133,'kill_1h_pierce_ouch_thrust',0),(10259,34134,'kill_1h_pierce_parry_backhand',0),(10260,34135,'kill_1h_pierce_parry_down',0),(10261,34136,'kill_1h_pierce_parry_forehand',0),(10262,34137,'kill_1h_pierce_parry_thrust',0),(10263,34141,'kill_1h_sword_death_blow01',0),(10264,34142,'kill_1h_sword_dodge_thrust',0),(10265,34143,'kill_1h_sword_ouch_thrust',0),(10266,34144,'kill_1h_sword_parry_thrust',0),(10267,34152,'kill_cast_dustpuff_ws',0),(10268,34154,'kill_cast_glow_ring_wavyrays',0),(10269,34155,'kill_cast_glow_ring_wavyrays_l',0),(10270,34156,'kill_cast_glow_ring_wavyrays_r',0),(10271,34180,'kill_cast_sphere_lightning',0),(10272,34181,'kill_cast_sphere_lightning2',0),(10273,34182,'kill_cast_sphere_lightning_r',0),(10274,34191,'kill_result_charge',0),(10275,34192,'kill_result_ghost_shield',0),(10276,34193,'kill_result_heal_heart',0),(10277,34194,'kill_result_sparkly_swirl_flare',0),(10278,34200,'kill_cast_fighter',0),(10279,34201,'kill_cast_ghost_shield_summoned',0),(10280,34207,'kill_cast_scout',0),(10281,34209,'kill_cast_ghost_shield_summoned_sparkles',0),(10282,34212,'kill_result_glint2',0),(10283,34213,'kill_result_trail',0),(10284,34221,'kill_2h_sword_attack01',0),(10285,34222,'kill_2h_sword_attack02',0),(10286,34225,'kill_2h_sword_dodge_backhand',0),(10287,34226,'kill_2h_sword_dodge_down',0),(10288,34227,'kill_2h_sword_dodge_forehand',0),(10289,34228,'kill_2h_sword_ouch_backhand',0),(10290,34229,'kill_2h_sword_ouch_down',0),(10291,34230,'kill_2h_sword_ouch_forehand',0),(10292,34240,'kill_result_crystal_shield',0),(10293,34249,'kill_cast_snake_idling',0),(10294,34250,'kill_result_horse_running',0),(10295,34251,'kill_result_lion_attacking',0),(10296,34252,'kill_result_lion_roaring',0),(10297,34253,'kill_result_snake_striking',0),(10298,34258,'kill_result_cat_leaping',0),(10299,34259,'kill_result_cold_blast',0),(10300,34260,'kill_result_cold_breath',0),(10301,34261,'kill_state_breath_cold',0),(10302,34262,'kill_result_cold_forced_shader',0),(10303,34263,'kill_result_cold_ice_crystals',0),(10304,34264,'kill_result_poison_breath',0),(10305,34265,'kill_result_poison_cysts_growing',0),(10306,34266,'kill_result_poison_forced_shader',0),(10307,34271,'kill_cast_ball_fire',0),(10308,34273,'kill_cast_spotsparks_ring2',0),(10309,34274,'kill_cast_spotsparks_ring3',0),(10310,34289,'kill_result_poison_cysts_blast',0),(10311,34291,'kill_cast_lhand_sparkle_trail_t',0),(10312,34292,'kill_cast_poison_dragon_breath',0),(10313,34293,'kill_cast_rhand_sparkle_trail_t',0),(10314,34296,'kill_result_poison_whirlwind',0),(10315,34312,'kill_cast_distort_leftfoot',0),(10316,34314,'kill_cast_distort_weaponrootleft',0),(10317,34315,'kill_cast_distort_weaponrootright',0),(10318,34316,'kill_cast_dustpuff_lfoot',0),(10319,34317,'kill_cast_dustpuff_weaponrootleft',0),(10320,34318,'kill_cast_dustpuff_weaponrootright',0),(10321,34324,'kill_result_fire_ring_green_medium',0),(10322,34325,'kill_result_poison_cyst_vomit',0),(10323,34326,'kill_result_runes_rising',0),(10324,34327,'kill_result_teleporter_coalesce',0),(10325,34331,'kill_cast_cleric',0),(10326,34332,'kill_cast_coercer',0),(10327,34334,'kill_cast_defiler',0),(10328,34335,'kill_cast_enchanter',0),(10329,34336,'kill_cast_fury',0),(10330,34337,'kill_cast_illusionist',0),(10331,34338,'kill_cast_inquisitor',0),(10332,34339,'kill_cast_mystic',0),(10333,34340,'kill_cast_shaman',0),(10334,34341,'kill_cast_sorcerer',0),(10335,34342,'kill_cast_summoner',0),(10336,34343,'kill_cast_templar',0),(10337,34344,'kill_cast_warden',0),(10338,34345,'kill_cast_warlock',0),(10339,34346,'kill_cast_wizard',0),(10340,34348,'kill_result_bull_stomping',0),(10341,34349,'kill_cast_hammer_sparkling_floating',0),(10342,34350,'kill_cast_mist_sphere_add',0),(10343,34351,'kill_cast_mist_sphere_blend',0),(10344,34352,'kill_cast_swirlies_smoke',0),(10345,34353,'kill_cast_swirlies_smoke_blend',0),(10346,34360,'kill_result_fire_green',0),(10347,34361,'kill_result_poison_cysts_growing_giant',0),(10348,34362,'kill_cast_forced_flasher_diff_noise',0),(10349,34363,'kill_cast_forced_flasher_oceanseamless',0),(10350,34364,'kill_cast_forced_flasher_streaks',0),(10351,34365,'kill_cast_forced_flasher_tiledfoam',0),(10352,34366,'kill_cast_forced_flasher_tiledfoam2',0),(10353,34367,'kill_cast_forced_flasher_tiledfoam3',0),(10354,34368,'kill_cast_forced_flasher_tiledfoam4',0),(10355,34393,'kill_result_fire_engulf',0),(10356,34398,'kill_cast_expanding_rings',0),(10357,34399,'kill_cast_forced_flasher_fadein_diff_noise',0),(10358,34412,'kill_pugilist_attack',0),(10359,34414,'kill_pugilist_attack02',0),(10360,34427,'kill_result_fire_slam',0),(10361,34428,'kill_cast_distort_flat',0),(10362,34429,'kill_cast_mandala_blobs',0),(10363,34430,'kill_result_ground_blast_lava',0),(10364,34433,'kill_spell_root_colored',0),(10365,34435,'kill_cast_dragon_wing_dust',0),(10366,34451,'kill_result_camera_shake_wider',0),(10367,34452,'kill_result_stunned',0),(10368,34454,'kill_cast_snake_shrinking',0),(10369,34495,'kill_horse_enter',0),(10370,34521,'kill_levelup',0),(10371,34524,'kill_result_trail_lightning',0),(10372,34532,'kill_result_trail_motion',0),(10373,34533,'kill_result_tree_morph',0),(10374,34534,'kill_result_wood_forced_shader',0),(10375,34535,'kill_result_wood_spikes_growing',0),(10376,34541,'kill_cast_fire_trail',0),(10377,34561,'kill_result_cactus_spikes_growing',0),(10378,34562,'kill_result_cold_fog',0),(10379,34563,'kill_result_colored_forced_shader',0),(10380,34564,'kill_result_ghost_forced_shader',0),(10381,34565,'kill_result_snowflakes_growing',0),(10382,34566,'kill_result_snowstorm',0),(10383,34567,'kill_result_sparkles_clinging',0),(10384,34568,'kill_result_teleport_sparkle',0),(10385,34569,'kill_result_teleport_vanish',0),(10386,34570,'kill_result_wood_roots_growing',0),(10387,34571,'kill_result_teleport_appear',0),(10388,34574,'kill_cast_flasher',0),(10389,34575,'kill_cast_pfx_trace_puffs_l',0),(10390,34576,'kill_cast_pfx_trace_puffs_r',0),(10391,34591,'kill_cast_fire_whip_circling',0),(10392,34600,'kill_result_spark_burst',0),(10393,34617,'kill_cast_enthralling_fetters_circling',0),(10394,34618,'kill_cast_enthralling_fetters_circling_ghostly',0),(10395,34619,'kill_cast_testbones',0),(10396,34621,'kill_result_clay_red_forced_shader',0),(10397,34622,'kill_result_enthralling_fetters',0),(10398,34623,'kill_result_metal_rusty_forced_shader',0),(10399,34627,'kill_result_clay_chunks_dropping',0),(10400,34628,'kill_result_flash',0),(10401,34629,'kill_result_water_dripping',0),(10402,34630,'kill_result_water_forced_shader',0),(10403,34631,'kill_result_bubble_stream',0),(10404,34632,'kill_result_ghost_fish_circling',0),(10405,34633,'kill_cast_testbones_vgraph',0),(10406,34634,'kill_result_ice_blast',0),(10407,34635,'kill_result_ice_crystals_dropping',0),(10408,34636,'kill_result_icy_cage',0),(10409,34637,'kill_cast_mandala_electricity',0),(10410,34638,'kill_cast_mandala_streaks',0),(10411,34639,'kill_result_icy_cage_blast_ring',0),(10412,34640,'kill_cast_rune_ring_good',0),(10413,34641,'kill_cast_rune_ring_rotate',0),(10414,34642,'kill_result_icicles_breaking',0),(10415,34643,'kill_result_icy_comet',0),(10416,34644,'kill_result_icy_comet_exploding',0),(10417,34647,'kill_result_glacial_wall',0),(10418,34648,'kill_result_glacial_wall_sparkles',0),(10419,34649,'kill_result_ice_shields_burning',0),(10420,34650,'kill_pike_attack01',0),(10421,34651,'kill_pike_attack02',0),(10422,34669,'kill_result_clay_shields',0),(10423,34670,'kill_result_scale_skin_forced_shader',0),(10424,34672,'kill_result_color_shower',0),(10425,34673,'kill_result_dispell1_out',0),(10426,34674,'kill_result_verdant_genesis',0),(10427,34675,'kill_result_attract_bubbles',0),(10428,34677,'kill_result_offering_of_vitae',0),(10429,34678,'kill_result_sparkles_clinging_soft',0),(10430,34679,'kill_result_bestowal_of_vitae',0),(10431,34680,'kill_result_ethereal_ward',0),(10432,34681,'kill_result_dps_decrease',0),(10433,34682,'kill_result_smite',0),(10434,34706,'kill_result_ember_kite_shields_burning',0),(10435,34707,'kill_result_ice_sword_breaking',0),(10436,34710,'kill_result_charm',0),(10437,34711,'kill_result_rainbow_forced_shader',0),(10438,34713,'kill_result_ember_swords_burning',0),(10439,34714,'kill_result_ghost_sword_breaking',0),(10440,34715,'kill_result_offering_of_vitae_2',0),(10441,34721,'kill_result_smite_2',0),(10442,34722,'kill_result_tellurian_recruit',0),(10443,34730,'kill_result_expand_ring_screech',0),(10444,34731,'kill_result_grim_champion',0),(10445,34732,'kill_result_shockwave_sparkles',0),(10446,34733,'kill_result_tremor',0),(10447,34734,'kill_bostaff_attack',0),(10448,34735,'kill_bostaff_attack01',0),(10449,34736,'kill_bostaff_attack02',0),(10450,34737,'kill_bostaff_attack03',0),(10451,34754,'kill_result_bloodlust',0),(10452,34755,'kill_result_haste',0),(10453,34762,'kill_cast_forced_flasher_tiledfoam3_scroll',0),(10454,34763,'kill_cast_mage_old',0),(10455,34768,'kill_result_backdraft',0),(10456,34769,'kill_result_sanction_of_merit',0),(10457,34770,'kill_result_toxin_out',0),(10458,34771,'kill_result_white_radiance',0),(10459,34785,'kill_result_explosion_fireworks',0),(10460,34786,'kill_result_explosion_fireworks_ground',0),(10461,34799,'kill_result_distort_dot',0),(10462,34800,'kill_result_distort_hit',0),(10463,34804,'kill_result_bone_cage_1',0),(10464,34805,'kill_result_fiery_comet_descending',0),(10465,34806,'kill_result_spiral_smite',0),(10466,34817,'kill_result_weakness',0),(10467,34833,'kill_result_bloodlust_2',0),(10468,34834,'kill_result_colored_radiance',0),(10469,34841,'kill_result_poison_cloud',0),(10470,34842,'kill_result_smoke_sphere',0),(10471,34850,'kill_result_decree_of_faith',0),(10472,34851,'kill_result_dust_fall',0),(10473,34852,'kill_result_fascinate',0),(10474,34853,'kill_result_sparkle_blast',0),(10475,34871,'kill_aura_mage',0),(10476,34872,'kill_aura_priest',0),(10477,34879,'kill_result_statue',0),(10478,34882,'kill_bow_dodge_backhand',0),(10479,34883,'kill_bow_dodge_down',0),(10480,34884,'kill_bow_dodge_forehand',0),(10481,34885,'kill_bow_dodge_thrust',0),(10482,34888,'kill_bow_idle',0),(10483,34889,'kill_bow_ouch_backhand',0),(10484,34890,'kill_bow_ouch_down',0),(10485,34891,'kill_bow_ouch_forehand',0),(10486,34892,'kill_bow_ouch_thrust',0),(10487,34907,'kill_cast_pfx_glow_galv_ws_l',0),(10488,34908,'kill_cast_pfx_glow_galv_ws_r',0),(10489,34909,'kill_result_bubble_ring',0),(10490,34910,'kill_result_sparkles_out',0),(10491,34913,'kill_cast_orbiting_rings2',0),(10492,34946,'kill_cast_fuliginous',0),(10493,34956,'kill_result_enthralling_fetters_ghostly',0),(10494,34966,'kill_cast_sparkles_in',0),(10495,34976,'kill_result_swirly_column',0),(10496,34996,'kill_result_instant_lifetap',0),(10497,34997,'kill_result_ot_lifetap',0),(10498,35016,'kill_result_mouth_in',0),(10499,35017,'kill_result_sparkle_scan_up',0),(10500,35018,'kill_result_spiral_up',0),(10501,35026,'kill_cast_bard',0),(10502,35027,'kill_cast_crusader',0),(10503,35028,'kill_cast_dirge',0),(10504,35029,'kill_cast_paladin',0),(10505,35031,'kill_cast_shadowknight',0),(10506,35032,'kill_cast_troubador',0),(10507,35038,'kill_cast_sawdust',0),(10508,35275,'kill_result_lightning_shimmer',0),(10509,35293,'kill_persist_pet_air_fragment',0),(10510,35294,'kill_persist_pet_chaos_fragment',0),(10511,35295,'kill_persist_pet_earth_fragment',0),(10512,35296,'kill_persist_pet_fire_fragment',0),(10513,35297,'kill_persist_pet_fire_servant',0),(10514,35298,'kill_persist_pet_ice_servant',0),(10515,35299,'kill_persist_pet_lightning_servant',0),(10516,35300,'kill_persist_pet_water_fragment',0),(10517,35304,'kill_cast_distort_p3',0),(10518,35306,'kill_cast_explosion_p5',0),(10519,35312,'kill_result_flash_weapon_red',0),(10520,35313,'kill_result_shield',0),(10521,35326,'kill_cast_angry_burst',0),(10522,35327,'kill_cast_cold_dragon_breath',0),(10523,35328,'kill_cast_distortion_hit_minimal',0),(10524,35329,'kill_cast_glow_distort',0),(10525,35331,'kill_cast_void_dragon_breath',0),(10526,35332,'kill_result_sparks_360_p5',0),(10527,35333,'kill_result_void_whirlwind',0),(10528,35356,'kill_cast_distort_rightfoot_ws',0),(10529,35357,'kill_cast_dragon_pbae_cold',0),(10530,35358,'kill_cast_dragon_pbae_heat',0),(10531,35359,'kill_cast_dragon_pbae_mental',0),(10532,35360,'kill_cast_dragon_pbae_poison',0),(10533,35361,'kill_cast_dragon_pbae_void',0),(10534,35362,'kill_cast_dragon_tae_mental',0),(10535,35363,'kill_cast_fire_foot',0),(10536,35365,'kill_cast_spark_sphere_ws_p5',0),(10537,35367,'kill_result_circle_blast_p5',0),(10538,35368,'kill_result_cold_ice_crystals_rightfoot',0),(10539,35369,'kill_result_flash_weapon_red_min',0),(10540,35370,'kill_result_golden_glow',0),(10541,35371,'kill_result_ice_blast_rightfoot',0),(10542,35372,'kill_result_silver_glow',0),(10543,35391,'kill_cast_dark_forced_shader',0),(10544,35392,'kill_cast_expand_ring_ws',0),(10545,35394,'kill_cast_stun_stars',0),(10546,35395,'kill_cast_taunt',0),(10547,35404,'kill_cast_dragon_pbae_lightning',0),(10548,35405,'kill_cast_dragon_tae_lightning',0),(10549,35410,'kill_result_dust_black',0),(10550,35411,'kill_result_spark_burst_p3',0),(10551,35412,'kill_result_sparkle_trail_fire_shin',0),(10552,35413,'kill_result_sparkle_trail_ice_shin',0),(10553,35415,'kill_trails_lightning_rightshin',0),(10554,35420,'kill_cast_fire_weapon',0),(10555,35424,'kill_result_sparkle_trail_fire_weapon',0),(10556,35427,'kill_result_trail_lightning_red',0),(10557,35436,'kill_2h_sword_defensive_buff',0),(10558,35438,'kill_2h_sword_kick',0),(10559,35442,'kill_2h_sword_whirling_attack',0),(10560,35443,'kill_2h_sword_wild_swing',0),(10561,35452,'kill_cast_elec_feet',0),(10562,35454,'kill_cast_soothe_burst',0),(10563,35455,'kill_cast_spark_sphere_ws_red_p5',0),(10564,35456,'kill_cast_sparkle_trail_fire_head',0),(10565,35470,'kill_pike_kick',0),(10566,35474,'kill_pike_whirling_attack',0),(10567,35475,'kill_result_flash_weapon_sat_blue',0),(10568,35476,'kill_result_flash_weapon_sat_red',0),(10569,35477,'kill_result_ice_blast_weapon',0),(10570,35478,'kill_result_spark_burst_p3_gold',0),(10571,35479,'kill_result_spark_burst_p3_red',0),(10572,35480,'kill_result_spark_burst_rightfoot',0),(10573,35482,'kill_result_sparkle_trail_fire_leftshin',0),(10574,35484,'kill_result_sparkle_trail_ice_lefthand',0),(10575,35485,'kill_result_sparkle_trail_ice_leftshin',0),(10576,35486,'kill_result_sparkle_trail_ice_weapon',0),(10577,35487,'kill_result_sparkle_trail_weapon_right_glow_blue',0),(10578,35488,'kill_result_sparkle_trail_weapon_right_glow_gold',0),(10579,35489,'kill_result_sparkle_trail_weapon_right_glow_red',0),(10580,35490,'kill_result_sparks_360_blue_p5',0),(10581,35491,'kill_result_white_radiance_weapon',0),(10582,35492,'kill_result_wind_smoke_head',0),(10583,35521,'kill_cast_spark_cage',0),(10584,35522,'kill_cast_spark_shield',0),(10585,35523,'kill_cast_sparkle_trail_fire_lefthand',0),(10586,35524,'kill_cast_sparkle_trail_fire_righthand',0),(10587,35525,'kill_cast_sparkle_trail_fire_righttolefthand',0),(10588,35526,'kill_cast_statue',0),(10589,35527,'kill_cast_super_buff',0),(10590,35535,'kill_persist_divine',0),(10591,35536,'kill_persist_eidolon',0),(10592,35537,'kill_persist_energy',0),(10593,35538,'kill_persist_fire',0),(10594,35539,'kill_persist_ice',0),(10595,35540,'kill_persist_mental',0),(10596,35541,'kill_persist_mesmerize',0),(10597,35542,'kill_persist_poison',0),(10598,35543,'kill_persist_stunned',0),(10599,35544,'kill_result_spark_burst_head',0),(10600,35545,'kill_result_weapon_trail_fire',0),(10601,35546,'kill_result_wind_smoke_p3',0),(10602,35550,'kill_cast_instrument_drum',0),(10603,35551,'kill_cast_instrument_stringed',0),(10604,35553,'kill_cast_tune_guitar',0),(10605,35558,'kill_persist_damage',0),(10606,35559,'kill_persist_stone',0),(10607,35560,'kill_result_heal_heart_blue',0),(10608,35561,'kill_result_motion_lines',0),(10609,35562,'kill_result_note_circle',0),(10610,35565,'kill_cast_debuff',0),(10611,35567,'kill_cast_stun_stars_sub',0),(10612,35568,'kill_pike_wild_swing',0),(10613,35569,'kill_result_motion_lines_flasher',0),(10614,35570,'kill_result_motion_lines_sub',0),(10615,35571,'kill_result_spark_burst_p3_blue',0),(10616,35576,'kill_forestry_success',0),(10617,35577,'kill_gathering_search',0),(10618,35578,'kill_gathering_success',0),(10619,35579,'kill_mining_digging',0),(10620,35580,'kill_mining_success',0),(10621,35581,'kill_result_bard_zap',0),(10622,35582,'kill_result_motion_circles',0),(10623,35583,'kill_result_note_blast',0),(10624,35605,'kill_result_ghost_spider',0),(10625,35620,'kill_cast_anim_mesh_dragon_ps',0),(10626,35639,'kill_cast_druid_ws',0),(10627,35640,'kill_cast_frosty_hand_l',0),(10628,35641,'kill_cast_frosty_hand_r',0),(10629,35668,'kill_cast_tune_drum',0),(10630,35692,'kill_cast_priest_ws',0),(10631,35693,'kill_cast_trail_rightfoot_gold',0),(10632,35694,'kill_levelup_50',0),(10633,35695,'kill_levelup_hallmark',0),(10634,35696,'kill_result_sparkle_scan_down',0),(10635,35698,'kill_result_trail_lightning_gold',0),(10636,35701,'kill_1h_thrown_attack',0),(10637,35703,'kill_1h_thrown_dodge_backhand',0),(10638,35704,'kill_1h_thrown_dodge_down',0),(10639,35705,'kill_1h_thrown_dodge_forehand',0),(10640,35706,'kill_1h_thrown_dodge_thrust',0),(10641,35707,'kill_1h_thrown_idle',0),(10642,35708,'kill_1h_thrown_ouch_backhand',0),(10643,35709,'kill_1h_thrown_ouch_down',0),(10644,35710,'kill_1h_thrown_ouch_forehand',0),(10645,35711,'kill_1h_thrown_ouch_thrust',0),(10646,35721,'kill_bostaff_kick',0),(10647,35728,'kill_bostaff_whirling_attack',0),(10648,35729,'kill_bostaff_wild_swing',0),(10649,35734,'kill_cast_spark_burst_weaponrootright',0),(10650,35751,'kill_converse_male04',0),(10651,35759,'kill_converse_male12',0),(10652,35763,'kill_dual_wield_kick',0),(10653,35770,'kill_dual_wield_whirling_attack',0),(10654,35771,'kill_dual_wield_wild_swing',0),(10655,35789,'kill_monk_wild_swing',0),(10656,35797,'kill_pugilist_kick',0),(10657,35804,'kill_pugilist_whirling_attack',0),(10658,35805,'kill_pugilist_wild_swing',0),(10659,35806,'kill_result_spark_burst_p1',0),(10660,35880,'kill_cast_sparkle_trail_fire_lhand_neg',0),(10661,35881,'kill_cast_sparkle_trail_fire_rhand_neg',0),(10662,35886,'kill_persist_debuff',0),(10663,35887,'kill_result_fire_negative',0),(10664,35888,'kill_result_fire_objects',0),(10665,35910,'kill_result_embers_p2p',0),(10666,35911,'kill_result_fraxflame_p2p',0),(10667,35912,'kill_result_prism_hex_p2p',0),(10668,35949,'kill_result_glow_weapon_red',0),(10669,35951,'kill_trails_fire_rightshin',0),(10670,35960,'kill_cast_darkness_skull_buff_summoned',0),(10671,35962,'kill_persist_distortion_hit_minimal',0),(10672,35963,'kill_result_color_rain_damage',0),(10673,35964,'kill_result_darkness_skull_buff',0),(10674,35965,'kill_result_noxious_oozing_shield_buff',0),(10675,35966,'kill_result_swirly_column_evil',0),(10676,35970,'kill_result_icicle_rain_damage',0),(10677,35971,'kill_result_rain_damage',0),(10678,35978,'kill_cast_vines_root_control_circling',0),(10679,35992,'kill_persist_electrified',0),(10680,35993,'kill_result_bloodlust_3',0),(10681,35994,'kill_result_nature_res',0),(10682,35995,'kill_result_poison_rain_damage',0),(10683,35996,'kill_result_skull_breath_poison_damage',0),(10684,35997,'kill_result_spirit_res',0),(10685,35998,'kill_result_sword_rain_damage',0),(10686,35999,'kill_result_vines_root_control',0),(10687,36004,'kill_cast_super_lightning',0),(10688,36005,'kill_result_petrify_stun_control',0),(10689,36006,'kill_result_shadow_summon',0),(10690,36011,'kill_result_agility',0),(10691,36012,'kill_result_air_elemental_summon',0),(10692,36013,'kill_result_arch_heal',0),(10693,36014,'kill_result_electrified',0),(10694,36015,'kill_result_lifetap',0),(10695,36016,'kill_result_vitae_buff_heal',0),(10696,36022,'kill_cast_darkness_whip_circling',0),(10697,36024,'kill_cast_spark_cage_neg',0),(10698,36025,'kill_cast_spark_shield2',0),(10699,36026,'kill_cast_spark_shield_neg',0),(10700,36027,'kill_result_ice_blast_weapon_center',0),(10701,36028,'kill_result_water_elemental_summon',0),(10702,36103,'kill_cast_mandala_sub',0),(10703,36105,'kill_cast_p2p_lightning_01',0),(10704,36106,'kill_cast_p2p_lightning_02',0),(10705,36108,'kill_result_arcane_fury',0),(10706,36109,'kill_result_archaic_shackles',0),(10707,36110,'kill_result_archaic_shackles_b',0),(10708,36111,'kill_result_ice_slam',0),(10709,36112,'kill_result_skull_blast',0),(10710,36113,'kill_result_skull_buff_limbs',0),(10711,36114,'kill_result_storm_of_ancients',0),(10712,36115,'kill_result_stun_sub',0),(10713,36116,'kill_result_tricksters_grasp',0),(10714,36119,'kill_cast_p2p_fire_01',0),(10715,36120,'kill_cast_p2p_fire_02',0),(10716,36122,'kill_result_ethereal_p2p',0),(10717,36126,'kill_cast_gold_sparkletrace_l',0),(10718,36127,'kill_cast_gold_sparkletrace_r',0),(10719,36128,'kill_cast_gold_trace_l',0),(10720,36129,'kill_cast_gold_trace_r',0),(10721,36131,'kill_cast_rune_ring_rotate_persist',0),(10722,36132,'kill_cast_trace_firespikes_l',0),(10723,36133,'kill_cast_trace_firespikes_r',0),(10724,36134,'kill_cast_trace_wine_l',0),(10725,36135,'kill_cast_trace_wine_r',0),(10726,36144,'kill_cast_rainbow_rays_cloud',0),(10727,36145,'kill_cast_spark_sphere_blend',0),(10728,36147,'kill_result_crystal_ring',0),(10729,36148,'kill_result_dispell1_out_blend',0),(10730,36149,'kill_result_helmet_silver_floating',0),(10731,36160,'kill_result_ho_sphere',0),(10732,36161,'kill_result_shield_silver_floating',0),(10733,36165,'kill_ignite_weapon_big',0),(10734,36166,'kill_ignite_weapon_small',0),(10735,36172,'kill_result_dragon_flight_fetters',0),(10736,36173,'kill_result_drakota_fetters',0),(10737,36174,'kill_result_drakota_flight_fetters',0),(10738,36189,'kill_ignite_weapon_prism',0),(10739,36190,'kill_result_ancient_crucible',0),(10740,36191,'kill_result_natures_growth',0),(10741,36195,'kill_result_dripping_rain',0),(10742,36196,'kill_result_rock_chunks_dropping',0),(10743,36200,'kill_result_arcane_chalice',0),(10744,36201,'kill_result_blessing_of_faith',0),(10745,36202,'kill_result_stag_running',0),(10746,36205,'kill_cast_columns_slow',0),(10747,36207,'kill_result_cat_running',0),(10748,36208,'kill_result_chalice_of_life',0),(10749,36209,'kill_result_creature_fire_ls',0),(10750,36210,'kill_result_runes_gathering',0),(10751,36211,'kill_result_sparkle_fill',0),(10752,36212,'kill_result_weapon_trail_prism',0),(10753,36216,'kill_cast_sparkle2',0),(10754,36217,'kill_result_breaking_faith',0),(10755,36218,'kill_result_runes_falling',0),(10756,36219,'kill_result_sparkles_gathering',0),(10757,36228,'kill_cast_glow_distort2',0),(10758,36232,'kill_result_blue_whirlwind',0),(10759,36233,'kill_result_stag_running2',0),(10760,36234,'kill_result_turtle_walking',0),(10761,36341,'kill_result_breakable_wall',0),(10762,36373,'kill_result_lucks_bite',0),(10763,36398,'kill_result_bat_swarm_appear',0),(10764,36399,'kill_result_bat_swarm_attack',0),(10765,36400,'kill_result_forced_shader_electric',0),(10766,36408,'kill_result_bat_swarm_p2p',0),(10767,36439,'kill_result_rainbow_blast_p2p',0),(10768,36440,'kill_result_vampire_lifetap_p2p',0),(10769,36447,'kill_result_fire_blue_white',0),(10770,36448,'kill_result_vampire_daggers_p2p',0),(10771,36449,'kill_result_vampire_ice_daggers_p2p',0),(10772,36450,'kill_result_vampire_lifetap_heart_p2p',0),(10773,36451,'kill_result_vampire_snow_throw',0),(10774,36461,'kill_cast_instrument_flute',0),(10775,36473,'kill_persist_power_gathering',0),(10776,36474,'kill_result_bat_swarm_persist',0),(10777,36475,'kill_result_brain_leech_p2p',0),(10778,36476,'kill_result_power_fount',0),(10779,36495,'kill_result_lioness_running',0),(10780,36496,'kill_result_mana_cloak',0),(10781,36497,'kill_result_scorpion_attacking',0),(10782,36498,'kill_result_skeleton_dancing',0),(10783,36502,'kill_cast_tune_song',0),(10784,36509,'kill_result_bat_flying',0),(10785,36510,'kill_result_stance_of_the_bat',0),(10786,36517,'kill_persist_sparkles_clinging_soft_blue',0),(10787,36518,'kill_persist_sparkles_clinging_soft_gold',0),(10788,36519,'kill_persist_sparkles_clinging_soft_green',0),(10789,36520,'kill_persist_sparkles_clinging_soft_purple',0),(10790,36521,'kill_persist_sparkles_clinging_soft_red',0),(10791,36522,'kill_result_skeleton_bowing',0),(10792,36523,'kill_result_unerring_shot',0),(10793,36524,'kill_result_unerring_shot_flaming',0),(10794,36525,'kill_result_unyielding_will',0),(10795,36534,'kill_result_smoke_p2p',0),(10796,36545,'kill_cast_piercing_note',0),(10797,36547,'kill_cast_tune_flute',0),(10798,36553,'kill_persist_notes_gathering',0),(10799,36554,'kill_persist_notes_spiral_off',0),(10800,36555,'kill_result_note_swarm',0),(10801,36556,'kill_result_notes_gathering',0),(10802,36557,'kill_result_notes_spiral_off',0),(10803,36558,'kill_result_rings_rising',0),(10804,36575,'kill_result_devastation_fist_1',0),(10805,36576,'kill_result_devastation_fist_2',0),(10806,36577,'kill_result_devastation_fist_3',0),(10807,36588,'kill_persist_fear',0),(10808,36589,'kill_persist_notes_spiral_off_blue',0),(10809,36590,'kill_persist_notes_spiral_off_green',0),(10810,36591,'kill_persist_notes_spiral_off_red',0),(10811,36594,'kill_result_corruptive_symbol_p2p',0),(10812,36595,'kill_result_skeleton_attacking',0),(10813,36613,'kill_cast_tune_multichain',0),(10814,36617,'kill_result_fire_dark',0),(10815,36618,'kill_result_sparkles_explode',0),(10816,36619,'kill_result_vampire_rainbow_circle_throw',0),(10817,36620,'kill_result_vampire_whip_dark',0),(10818,36627,'kill_result_notes_spiral_chains',0),(10819,36628,'kill_result_rings_rising_noshrink',0),(10820,36629,'kill_result_umbral_trap',0),(10821,36632,'kill_cast_notes_out_song',0),(10822,36637,'kill_result_kirby_energy_p2p',0),(10823,36638,'kill_result_notes_tube_wavey',0),(10824,36678,'kill_result_mist_clingy',0),(10825,36706,'kill_design_result_lightning_bolt1',0),(10826,36717,'kill_cast_spark_cage_aoe',0),(10827,36718,'kill_cast_spark_cage_neg_aoe',0),(10828,36768,'kill_design_result_bat_swarm_attack',0),(10829,36769,'kill_design_result_tremor',0),(10830,36776,'kill_design_artifact_ap1_breath',0),(10831,36777,'kill_design_cast_inquisitor',0),(10832,36778,'kill_design_cast_vision_nek',0),(10833,36779,'kill_design_result_dispell1_out',0),(10834,36780,'kill_design_result_zombie_summon',0),(10835,36798,'kill_result_bloodlust_aoe',0),(10836,36799,'kill_result_clay_shields_aoe',0),(10837,36800,'kill_result_poison_cloud_aoe',0),(10838,36833,'kill_result_toxin_out_aoe',0),(10839,36841,'kill_result_shockwave_sparkles_aoe',0),(10840,36860,'kill_climbing_strafe_right',0),(10841,36861,'kill_climbing_walk',0),(10842,36891,'kill_cast_angry_burst_aoe',0),(10843,36892,'kill_cast_debuff_aoe',0),(10844,36897,'kill_result_fire_engulf_aoe',0),(10845,36898,'kill_result_flash_aoe',0),(10846,36899,'kill_result_motion_lines_flasher_aoe',0),(10847,36900,'kill_result_motion_lines_sub_aoe',0),(10848,36908,'kill_result_coins_falling',0),(10849,36909,'kill_result_forced_shader_rock',0),(10850,36910,'kill_result_terra_armor',0),(10851,36918,'kill_result_coalescing_vapor',0),(10852,36929,'kill_result_bone_blast',0),(10853,36930,'kill_result_bone_glow',0),(10854,36931,'kill_result_coalescing_notes',0),(10855,36932,'kill_result_dust_blast',0),(10856,36940,'kill_result_ice_blast_from_mesh',0),(10857,36962,'kill_result_rock_toss_p2p',0),(10858,36963,'kill_result_rocks_flying_from_mesh',0),(10859,36971,'kill_result_ring_of_blades',0),(10860,36972,'kill_result_ring_of_blades_scimitars',0),(10861,36973,'kill_result_ring_of_blades_swords',0),(10862,37109,'kill_result_devastation_fist_3a',0),(10863,37125,'kill_result_skeleton_hand',0),(10864,37136,'kill_cast_pfx_orbiting_rings_l',0),(10865,37137,'kill_cast_pfx_orbiting_rings_r',0),(10866,37217,'kill_cast_ring_expanding',0),(10867,37261,'kill_cast_call_of_power',0),(10868,37263,'kill_climbing_backup',0),(10869,37264,'kill_climbing_idle',0),(10870,37265,'kill_climbing_strafe_left',0),(10871,37274,'kill_monk_attack03',0),(10872,37286,'kill_result_call_of_power',0),(10873,37287,'kill_result_firespitter',0),(10874,37288,'kill_result_pet_victory',0),(10875,37313,'kill_result_morph_to_pet',0),(10876,37314,'kill_result_sparkles_radiating',0),(10877,37324,'kill_result_searing_sun',0),(10878,37325,'kill_result_smoking_mesh',0),(10879,37329,'kill_cast_bone_blast_1',0),(10880,37330,'kill_cast_bone_blast_2',0),(10881,37331,'kill_cast_bone_blast_3',0),(10882,37332,'kill_cast_morph_to_dragon',0),(10883,37337,'kill_result_cyclone_fire',0),(10884,37338,'kill_result_cyclone_snow',0),(10885,37339,'kill_result_morph_to_dragon',0),(10886,37348,'kill_result_cyclone_rocks',0),(10887,37349,'kill_result_cyclone_sand',0),(10888,37350,'kill_result_gnoll_buff',0),(10889,37367,'kill_dual_wield_attack03',0),(10890,37369,'kill_result_word_of_doom',0),(10891,37370,'kill_result_word_of_flame',0),(10892,37371,'kill_result_word_of_obedience',0),(10893,37372,'kill_result_word_of_silence',0),(10894,37376,'kill_2h_sword_ouch_thrust',0),(10895,37393,'kill_result_froglok_buff',0),(10896,37394,'kill_result_stone_hand_terraporter',0),(10897,37438,'kill_result_candlelight_vigil',0),(10898,37470,'kill_result_rock_shock_wave',0),(10899,37486,'kill_result_fire_blast',0),(10900,37487,'kill_result_rock_shock_wave_lava',0),(10901,37488,'kill_result_tears_of_druzil',0),(10902,37498,'kill_climbing_exit_up_root',0),(10903,37503,'kill_result_rock_shock_wave_ice',0),(10904,37504,'kill_result_snowflakes_radiating',0),(10905,37510,'kill_cast_bright_ring_blue',0),(10906,37511,'kill_cast_bright_ring_red',0),(10907,37551,'kill_cast_morph_to_elf',0),(10908,37556,'kill_result_morph_to_elf',0),(10909,37566,'kill_climbing_enter_down_root',0),(10910,37578,'kill_result_scintillating_tapestry',0),(10911,37593,'kill_design_cast_vision_living_tombs',0),(10912,37618,'kill_result_runes_blast',0),(10913,37636,'kill_carry_blue_flag',0),(10914,37637,'kill_carry_red_flag',0),(10915,37679,'kill_result_coalescing_sparkles',0),(10916,37680,'kill_result_coalescing_vapor_sub',0),(10917,37681,'kill_result_serpents_intent',0),(10918,37682,'kill_result_singing_sword',0),(10919,37691,'kill_result_desert_call_p2p',0),(10920,37692,'kill_result_flash_flood_wave_cross_line',0),(10921,37693,'kill_result_flash_flood_wave_spray',0),(10922,37694,'kill_result_flash_flood_wave_tube',0),(10923,37763,'kill_design_cast_vision_ap2',0),(10924,37765,'kill_result_protection_of_faith_p2p',0),(10925,37766,'kill_result_protection_of_faith_tapestry',0),(10926,37788,'kill_result_anim_mesh_genie_ps',0),(10927,37837,'kill_result_fungusman_breath_attack_p2p',0),(10928,37838,'kill_result_mushrooms_growing',0),(10929,37903,'kill_result_shadow_summon_2',0),(10930,37917,'kill_result_shadow_summon_2_aoe',0),(10931,38120,'kill_debris_flying',0),(10932,38121,'kill_debris_swimming',0),(10933,38281,'kill_result_arena_water_whirlpool',0),(10934,38282,'kill_result_arena_water_whirlpool_aoe',0),(10935,38333,'kill_horse_backup',0),(10936,38334,'kill_horse_turn_left',0),(10937,38335,'kill_horse_turn_right',0),(10938,38339,'kill_result_arena_stone_gaze',0),(10939,38340,'kill_result_arena_water_rain',0),(10940,38341,'kill_result_fogger',0),(10941,38371,'kill_result_arena_water_rain_bubbles',0),(10942,38372,'kill_result_terrorantula_attack',0),(10943,38373,'kill_result_terrorantula_attack_cocoon',0),(10944,38408,'kill_result_arena_stone_gaze_flash',0),(10945,38739,'kill_result_arena_voidbeast_attack',0),(10946,38740,'kill_result_arena_voidbeast_smoke',0),(10947,38741,'kill_result_arena_voidbeast_smoke_threads',0),(10948,38751,'kill_result_ghost_fadeout',0),(10949,38780,'kill_result_spirit_of_the_elephant',0),(10950,38805,'kill_cast_trace_prism_left',0),(10951,38806,'kill_cast_trace_prism_right',0),(10952,38812,'kill_result_prisms_hex_clinging',0),(10953,38813,'kill_result_prisms_sparkle_soul',0),(10954,38814,'kill_result_prisms_sphere',0),(10955,38836,'kill_result_ice_dagger_breath_p2p',0),(10956,38858,'kill_result_cone_lightning_p2p',0),(10957,38859,'kill_result_dragon_cone_roar',0),(10958,38951,'kill_design_result_zombie_scare',0),(10959,38953,'kill_result_zombie_scare',0),(10960,38961,'kill_result_ghost_forced_shader_4',0),(10961,39037,'kill_result_bone_glow_2',0),(10962,39038,'kill_result_fireworks_burst',0),(10963,39039,'kill_result_fireworks_ring',0),(10964,39097,'kill_result_lion_paw_trails',0),(10965,39098,'kill_result_prism_tube_trail_1',0),(10966,39099,'kill_result_prism_tube_trail_2',0),(10967,39100,'kill_result_sparkle_soul',0),(10968,39178,'kill_result_pestilence',0),(10969,39203,'kill_result_dragonbreath',0),(10970,39221,'kill_cast_dragonbreath',0),(10971,39226,'kill_persist_dragonbreath',0),(10972,39227,'kill_result_hypnosis',0),(10973,39238,'kill_cast_celtic_circle',0),(10974,39241,'kill_cast_hypnosis',0),(10975,39265,'kill_persist_juggernaut',0),(10976,39266,'kill_result_juggernaut',0),(10977,39291,'kill_result_firestrips',0),(10978,39312,'kill_result_castigate',0),(10979,39373,'kill_cast_jesters_gamble',0),(10980,39442,'kill_status_quest_completes',0),(10981,39443,'kill_status_quest_gives',0),(10982,39444,'kill_status_quest_updates',0),(10983,39469,'kill_result_crazy_tube',0),(10984,39470,'kill_result_crazy_tube_iron',0),(10985,39520,'kill_cast_call_of_storms',0),(10986,39525,'kill_result_call_of_storms',0),(10987,39534,'kill_cast_mysticism',0),(10988,39539,'kill_result_mysticism',0),(10989,39544,'kill_cast_fusion',0),(10990,39554,'kill_cast_crescent_hands_l',0),(10991,39555,'kill_cast_crescent_hands_r',0),(10992,39569,'kill_result_rift',0),(10993,39570,'kill_result_verdict',0),(10994,39571,'kill_result_verdict_explosion',0),(10995,39612,'kill_cast_plane_shift',0),(10996,39617,'kill_result_plane_shift',0),(10997,39618,'kill_result_vortex_p2p',0),(10998,39630,'kill_cast_undead_tide',0),(10999,39634,'kill_result_bonfire',0),(11000,39635,'kill_result_steam',0),(11001,39648,'kill_result_cone_lightning_wave_p2p',0),(11002,39649,'kill_result_ice_dagger_breath_small_p2p',0),(11003,39658,'kill_result_rock_breath_p2p',0),(11004,39659,'kill_result_rocks_sticky',0),(11005,39735,'kill_result_aa_shaman_ghost_wolf',0),(11006,39743,'kill_cast_pickpocket',0),(11007,39748,'kill_result_mana_channeling',0),(11008,39769,'kill_levelup_achievement',0),(11009,39779,'kill_result_pickpocket',0),(11010,39827,'kill_result_snoring_zzz',0),(11011,39832,'kill_cast_vyemm_slam',0),(11012,39840,'kill_result_steam_blast',0),(11013,39872,'kill_result_poison_cysts',0),(11014,40210,'kill_result_aa_pyramid',0),(11015,40450,'kill_result_webby_canister',0),(11016,40515,'kill_result_ghost_undo',0),(11017,40583,'kill_cast_trace_sparkcrescent_l',0),(11018,40584,'kill_cast_trace_sparkcrescent_r',0),(11019,40589,'kill_design_keg_filling_mug',0),(11020,40734,'kill_result_charge_fast',0),(11021,40735,'kill_result_smoke_small_p5',0),(11022,40947,'kill_result_fire_purple',0),(11023,41250,'kill_cast_dryad_teleport',0),(11024,41257,'kill_result_dryad_teleport',0),(11025,41270,'kill_cast_dryad_attack_aoe',0),(11026,41277,'kill_result_dryad_attack_aoe',0),(11027,41304,'kill_cast_rain_of_thistles',0),(11028,41310,'kill_result_rain_of_thistles',0),(11029,41553,'kill_result_chrome_forced_shader',0),(11030,41759,'kill_result_copter_welder_lightning_p2p',0),(11031,41846,'kill_run_03',0),(11032,41847,'kill_run_down_idle',0),(11033,41848,'kill_run_up_idle',0),(11034,41850,'kill_sway_l',0),(11035,41851,'kill_sway_r',0),(11036,42000,'kill_result_soulless',0),(11037,42211,'kill_result_soap_mouth',0),(11038,42284,'kill_cast_vision_plane_druid_ring',0),(11039,42294,'kill_cast_wizard_spires',0),(11040,42355,'kill_result_choking_vines_aoe',0),(11041,42376,'kill_result_wuoshi_tree_morph',0),(11042,42422,'kill_result_lightning_bolt_sub1',0),(11043,42423,'kill_result_lightning_bolt_sub2',0),(11044,42444,'kill_female_dead',0),(11045,42445,'kill_female_dead_enter',0),(11046,42501,'kill_aura_red',0),(11047,42507,'kill_female_run',0),(11048,42522,'kill_cast_blanket_of_eternal_night',0),(11049,42523,'kill_cast_mayongs_touch',0),(11050,42525,'kill_cast_soul_paralysis',0),(11051,42531,'kill_result_blanket_of_eternal_night',0),(11052,42541,'kill_cast_gaze_of_obedience',0),(11053,42556,'kill_froglok_idle',0),(11054,42589,'kill_cast_laser_p2p',0),(11055,42600,'kill_result_laser_p2p',0),(11056,42604,'kill_cast_firebreath_p2p',0),(11057,42612,'kill_froglok_bow',0),(11058,42613,'kill_froglok_crouch',0),(11059,42614,'kill_froglok_curtsey',0),(11060,42615,'kill_froglok_dead',0),(11061,42616,'kill_froglok_death',0),(11062,42617,'kill_froglok_run',0),(11063,42618,'kill_froglok_sit_enter',0),(11064,42619,'kill_froglok_sit_exit',0),(11065,42620,'kill_froglok_sit_idle',0),(11066,42625,'kill_cast_mana_burn',0),(11067,42649,'kill_fae_light_idle',0),(11068,42652,'kill_result_mana_burn',0),(11069,42698,'kill_result_poison_forced_shader_weapon',0),(11070,42718,'kill_cast_glass_shattering',0),(11071,42728,'kill_result_glass_shattering',0),(11072,42739,'kill_result_brigand_slide',0),(11073,42740,'kill_result_golden_flash',0),(11074,42753,'kill_result_dirge_confront_fear',0),(11075,42754,'kill_result_illusionist_illuminate',0),(11076,42780,'kill_attack_earthshake',0),(11077,42787,'kill_fae_light_1h_sword_attack',0),(11078,42788,'kill_fae_light_1h_sword_attack01',0),(11079,42789,'kill_fae_light_1h_sword_attack02',0),(11080,42790,'kill_fae_light_1h_sword_attack03',0),(11081,42791,'kill_fae_light_1h_sword_death_blow',0),(11082,42792,'kill_fae_light_1h_sword_death_blow01',0),(11083,42793,'kill_fae_light_1h_sword_dodge_backhand',0),(11084,42794,'kill_fae_light_1h_sword_dodge_down',0),(11085,42795,'kill_fae_light_1h_sword_dodge_forehand',0),(11086,42796,'kill_fae_light_1h_sword_dodge_thrust',0),(11087,42797,'kill_fae_light_1h_sword_ouch_backhand',0),(11088,42798,'kill_fae_light_1h_sword_ouch_down',0),(11089,42799,'kill_fae_light_1h_sword_ouch_forehand',0),(11090,42800,'kill_fae_light_1h_sword_ouch_thrust',0),(11091,42801,'kill_fae_light_1h_sword_parry_backhand',0),(11092,42802,'kill_fae_light_1h_sword_parry_down',0),(11093,42803,'kill_fae_light_1h_sword_parry_forehand',0),(11094,42804,'kill_fae_light_1h_sword_parry_thrust',0),(11095,42805,'kill_fae_light_2h_sword_attack',0),(11096,42806,'kill_fae_light_2h_sword_attack01',0),(11097,42807,'kill_fae_light_2h_sword_attack02',0),(11098,42808,'kill_fae_light_2h_sword_defensive_buff',0),(11099,42809,'kill_fae_light_2h_sword_dodge_backhand',0),(11100,42810,'kill_fae_light_2h_sword_dodge_down',0),(11101,42811,'kill_fae_light_2h_sword_dodge_forehand',0),(11102,42812,'kill_fae_light_2h_sword_enter',0),(11103,42813,'kill_fae_light_2h_sword_kick',0),(11104,42814,'kill_fae_light_2h_sword_ouch_backhand',0),(11105,42815,'kill_fae_light_2h_sword_ouch_down',0),(11106,42816,'kill_fae_light_2h_sword_ouch_forehand',0),(11107,42817,'kill_fae_light_2h_sword_ouch_thrust',0),(11108,42820,'kill_fae_light_bostaff_attack01',0),(11109,42821,'kill_fae_light_bostaff_attack02',0),(11110,42822,'kill_fae_light_bostaff_attack03',0),(11111,42849,'kill_fae_light_dual_wield_attack',0),(11112,42850,'kill_fae_light_dual_wield_attack01',0),(11113,42851,'kill_fae_light_dual_wield_attack02',0),(11114,42852,'kill_fae_light_dual_wield_attack03',0),(11115,42853,'kill_fae_light_dual_wield_kick',0),(11116,42854,'kill_fae_light_dual_wield_whirling_attack',0),(11117,42855,'kill_fae_light_dual_wield_wild_swing',0),(11118,42856,'kill_fae_light_monk_attack',0),(11119,42857,'kill_fae_light_monk_attack01',0),(11120,42858,'kill_fae_light_monk_attack02',0),(11121,42859,'kill_fae_light_monk_attack03',0),(11122,42860,'kill_fae_light_monk_wild_swing',0),(11123,42861,'kill_fae_light_pike_attack',0),(11124,42862,'kill_fae_light_pike_attack01',0),(11125,42863,'kill_fae_light_pike_attack02',0),(11126,42864,'kill_fae_light_pike_kick',0),(11127,42865,'kill_fae_light_pike_whirling_attack',0),(11128,42866,'kill_fae_light_pike_wild_swing',0),(11129,42867,'kill_fae_light_pugilist_attack',0),(11130,42868,'kill_fae_light_pugilist_attack02',0),(11131,42869,'kill_fae_light_pugilist_kick',0),(11132,42870,'kill_fae_light_pugilist_whirling_attack',0),(11133,42871,'kill_fae_light_pugilist_wild_swing',0),(11134,42890,'kill_froglok_1h_sword_attack',0),(11135,42891,'kill_froglok_1h_sword_idle',0),(11136,42896,'kill_cast_forced_flasher_stream_scroll',0),(11137,42897,'kill_cast_forced_flasher_stream_scroll_blend',0),(11138,42905,'kill_result_berserker_red_eyes',0),(11139,42906,'kill_result_god_spell_brell_serilis',0),(11140,42907,'kill_result_god_spell_cazic_thule',0),(11141,42908,'kill_result_god_spell_innoruuk',0),(11142,42909,'kill_result_god_spell_mithaniel_marr',0),(11143,42910,'kill_result_god_spell_quellious',0),(11144,42911,'kill_result_god_spell_rallos_zek',0),(11145,42912,'kill_result_god_spell_solusek_ro',0),(11146,42913,'kill_result_god_spell_tunare',0),(11147,42914,'kill_result_sun_spell',0),(11148,42925,'kill_froglok_1h_crush_attack',0),(11149,42926,'kill_froglok_1h_crush_attack01',0),(11150,42927,'kill_froglok_1h_crush_attack02',0),(11151,42928,'kill_froglok_1h_crush_attack03',0),(11152,42929,'kill_froglok_1h_crush_dodge_backhand',0),(11153,42930,'kill_froglok_1h_crush_dodge_down',0),(11154,42931,'kill_froglok_1h_crush_dodge_forehand',0),(11155,42932,'kill_froglok_1h_crush_dodge_thrust',0),(11156,42933,'kill_froglok_1h_crush_ouch_backhand',0),(11157,42934,'kill_froglok_1h_crush_ouch_down',0),(11158,42935,'kill_froglok_1h_crush_ouch_forehand',0),(11159,42936,'kill_froglok_1h_crush_ouch_thrust',0),(11160,42937,'kill_froglok_1h_crush_parry_backhand',0),(11161,42938,'kill_froglok_1h_crush_parry_down',0),(11162,42939,'kill_froglok_1h_crush_parry_forehand',0),(11163,42940,'kill_froglok_1h_crush_parry_thrust',0),(11164,42941,'kill_froglok_1h_pierce_attack',0),(11165,42942,'kill_froglok_1h_pierce_attack01',0),(11166,42943,'kill_froglok_1h_pierce_dodge_backhand',0),(11167,42944,'kill_froglok_1h_pierce_dodge_down',0),(11168,42945,'kill_froglok_1h_pierce_dodge_forehand',0),(11169,42946,'kill_froglok_1h_pierce_dodge_thrust',0),(11170,42947,'kill_froglok_1h_pierce_ouch_backhand',0),(11171,42948,'kill_froglok_1h_pierce_ouch_down',0),(11172,42949,'kill_froglok_1h_pierce_ouch_forehand',0),(11173,42950,'kill_froglok_1h_pierce_ouch_thrust',0),(11174,42951,'kill_froglok_1h_pierce_parry_backhand',0),(11175,42952,'kill_froglok_1h_pierce_parry_down',0),(11176,42953,'kill_froglok_1h_pierce_parry_forehand',0),(11177,42954,'kill_froglok_1h_pierce_parry_thrust',0),(11178,42955,'kill_froglok_1h_sword_attack01',0),(11179,42956,'kill_froglok_1h_sword_attack02',0),(11180,42957,'kill_froglok_1h_sword_attack03',0),(11181,42958,'kill_froglok_1h_sword_death_blow',0),(11182,42959,'kill_froglok_1h_sword_death_blow01',0),(11183,42960,'kill_froglok_1h_sword_dodge_backhand',0),(11184,42961,'kill_froglok_1h_sword_dodge_down',0),(11185,42962,'kill_froglok_1h_sword_dodge_forehand',0),(11186,42963,'kill_froglok_1h_sword_dodge_thrust',0),(11187,42964,'kill_froglok_1h_sword_ouch_backhand',0),(11188,42965,'kill_froglok_1h_sword_ouch_down',0),(11189,42966,'kill_froglok_1h_sword_ouch_forehand',0),(11190,42967,'kill_froglok_1h_sword_ouch_thrust',0),(11191,42968,'kill_froglok_1h_sword_parry_backhand',0),(11192,42969,'kill_froglok_1h_sword_parry_down',0),(11193,42970,'kill_froglok_1h_sword_parry_forehand',0),(11194,42971,'kill_froglok_1h_sword_parry_thrust',0),(11195,42972,'kill_froglok_1h_thrown_dodge_backhand',0),(11196,42973,'kill_froglok_1h_thrown_dodge_down',0),(11197,42974,'kill_froglok_1h_thrown_dodge_forehand',0),(11198,42975,'kill_froglok_1h_thrown_dodge_thrust',0),(11199,42976,'kill_froglok_1h_thrown_ouch_backhand',0),(11200,42977,'kill_froglok_1h_thrown_ouch_down',0),(11201,42978,'kill_froglok_1h_thrown_ouch_forehand',0),(11202,42979,'kill_froglok_1h_thrown_ouch_thrust',0),(11203,42980,'kill_froglok_bow_dodge_backhand',0),(11204,42981,'kill_froglok_bow_dodge_down',0),(11205,42982,'kill_froglok_bow_dodge_forehand',0),(11206,42983,'kill_froglok_bow_dodge_thrust',0),(11207,42984,'kill_froglok_bow_ouch_backhand',0),(11208,42985,'kill_froglok_bow_ouch_down',0),(11209,42986,'kill_froglok_bow_ouch_forehand',0),(11210,42987,'kill_froglok_bow_ouch_thrust',0),(11211,42988,'kill_froglok_dual_wield_attack',0),(11212,42989,'kill_froglok_dual_wield_attack01',0),(11213,42990,'kill_froglok_dual_wield_attack02',0),(11214,42991,'kill_froglok_dual_wield_attack03',0),(11215,42992,'kill_froglok_dual_wield_dodge_backhand',0),(11216,42993,'kill_froglok_dual_wield_dodge_down',0),(11217,42994,'kill_froglok_dual_wield_dodge_forehand',0),(11218,42995,'kill_froglok_dual_wield_dodge_thrust',0),(11219,42996,'kill_froglok_dual_wield_idle',0),(11220,42997,'kill_froglok_dual_wield_ouch_backhand',0),(11221,42998,'kill_froglok_dual_wield_ouch_down',0),(11222,42999,'kill_froglok_dual_wield_ouch_forehand',0),(11223,43000,'kill_froglok_dual_wield_ouch_thrust',0),(11224,43011,'kill_froglok_1h_crush_idle',0),(11225,43012,'kill_froglok_1h_pierce_idle',0),(11226,43013,'kill_froglok_1h_thrown_idle',0),(11227,43014,'kill_froglok_2h_sword_attack',0),(11228,43015,'kill_froglok_2h_sword_attack01',0),(11229,43016,'kill_froglok_2h_sword_attack02',0),(11230,43017,'kill_froglok_2h_sword_attack03',0),(11231,43018,'kill_froglok_2h_sword_idle',0),(11232,43019,'kill_froglok_bow_idle',0),(11233,43020,'kill_froglok_dual_wield_kick',0),(11234,43021,'kill_froglok_dual_wield_whirling_attack',0),(11235,43022,'kill_froglok_dual_wield_wild_swing',0),(11236,43058,'kill_froglok_2h_sword_dodge_backhand',0),(11237,43059,'kill_froglok_2h_sword_dodge_down',0),(11238,43060,'kill_froglok_2h_sword_dodge_forehand',0),(11239,43061,'kill_froglok_2h_sword_dodge_thrust',0),(11240,43062,'kill_froglok_2h_sword_kick',0),(11241,43063,'kill_froglok_2h_sword_whirling_attack',0),(11242,43064,'kill_froglok_2h_sword_wild_swing',0),(11243,43065,'kill_froglok_bostaff_attack',0),(11244,43066,'kill_froglok_bostaff_attack01',0),(11245,43067,'kill_froglok_bostaff_attack02',0),(11246,43068,'kill_froglok_bostaff_attack03',0),(11247,43069,'kill_froglok_bostaff_idle',0),(11248,43070,'kill_froglok_bostaff_kick',0),(11249,43071,'kill_froglok_bostaff_whirling_attack',0),(11250,43072,'kill_froglok_bostaff_wild_swing',0),(11251,43073,'kill_froglok_monk_idle',0),(11252,43075,'kill_result_beserker_red_eyes',0),(11253,43076,'kill_result_guardian_aura',0),(11254,43086,'kill_froglok_monk_attack',0),(11255,43087,'kill_froglok_monk_attack01',0),(11256,43088,'kill_froglok_monk_attack02',0),(11257,43089,'kill_froglok_monk_attack03',0),(11258,43090,'kill_froglok_monk_kick',0),(11259,43091,'kill_froglok_monk_kick_spin',0),(11260,43092,'kill_froglok_monk_wild_swing',0),(11261,43124,'kill_froglok_monk_whirling_attack',0),(11262,43125,'kill_froglok_pike_attack',0),(11263,43126,'kill_froglok_pike_attack01',0),(11264,43127,'kill_froglok_pike_attack02',0),(11265,43128,'kill_froglok_pike_idle',0),(11266,43129,'kill_froglok_pike_kick',0),(11267,43130,'kill_froglok_pike_whirling_attack',0),(11268,43131,'kill_froglok_pike_wild_swing',0),(11269,43132,'kill_froglok_pugilist_attack',0),(11270,43133,'kill_froglok_pugilist_attack02',0),(11271,43134,'kill_froglok_pugilist_attack03',0),(11272,43135,'kill_froglok_pugilist_idle',0),(11273,43136,'kill_froglok_pugilist_kick',0),(11274,43137,'kill_froglok_pugilist_whirling_attack',0),(11275,43138,'kill_froglok_pugilist_wild_swing',0),(11276,43139,'kill_froglok_untrained_attack',0),(11277,43140,'kill_froglok_untrained_idle',0),(11278,43142,'kill_result_coercer_sun_aura',0),(11279,43143,'kill_result_illusionist_head_aura',0),(11280,43144,'kill_result_paladin_shoulder_streamers',0),(11281,43145,'kill_result_templar_halo',0),(11282,43155,'kill_fae_light_run',0),(11283,43157,'kill_result_assassin_star_cloud_hands',0),(11284,43158,'kill_result_brigand_hand_trails',0),(11285,43159,'kill_result_bruiser_fist_shining',0),(11286,43160,'kill_result_dirge_sparkles',0),(11287,43161,'kill_result_monk_fist_rings',0),(11288,43162,'kill_result_swashbuckler_hand_trails',0),(11289,43163,'kill_result_warlock_subtle_aura',0),(11290,43183,'kill_fae_light_climbing_backup',0),(11291,43184,'kill_fae_light_climbing_enter_down_root',0),(11292,43185,'kill_fae_light_climbing_exit_up_root',0),(11293,43186,'kill_fae_light_climbing_idle',0),(11294,43187,'kill_fae_light_climbing_strafe_left',0),(11295,43188,'kill_fae_light_climbing_strafe_right',0),(11296,43189,'kill_fae_light_climbing_walk',0),(11297,43190,'kill_fae_light_dead',0),(11298,43191,'kill_fae_light_dead_enter',0),(11299,43237,'kill_fae_light_bostaff_dodge_backhand',0),(11300,43238,'kill_fae_light_bostaff_dodge_forehand',0),(11301,43239,'kill_fae_light_dual_wield_dodge_backhand',0),(11302,43240,'kill_fae_light_dual_wield_dodge_forehand',0),(11303,43241,'kill_fae_light_dual_wield_ouch_backhand',0),(11304,43242,'kill_fae_light_dual_wield_ouch_forehand',0),(11305,43243,'kill_fae_light_dual_wield_parry_down',0),(11306,43276,'kill_fae_light_monk_dodge_backhand',0),(11307,43277,'kill_fae_light_monk_dodge_down',0),(11308,43280,'kill_horse_jump_substitute',0),(11309,43284,'kill_result_conjuror_shoulder_blue_flames',0),(11310,43297,'kill_fae_light_sit_enter',0),(11311,43298,'kill_fae_light_sit_exit',0),(11312,43299,'kill_fae_light_sit_idle',0),(11313,43301,'kill_froglok_horse_idle',0),(11314,43310,'kill_result_necromancer_hand_skulls',0),(11315,43321,'kill_froglok_gathering_search',0),(11316,43322,'kill_froglok_gathering_success',0),(11317,43323,'kill_froglok_mining_digging',0),(11318,43327,'kill_result_ranger_green_aura',0),(11319,43328,'kill_result_shadowknight_flame_horns',0),(11320,43329,'kill_result_wizard_elemental_hands',0),(11321,43342,'kill_froglok_converse_male04',0),(11322,43343,'kill_froglok_converse_male12',0),(11323,43344,'kill_froglok_forestry_success',0),(11324,43345,'kill_froglok_horse_jump_substitute',0),(11325,43346,'kill_froglok_kick',0),(11326,43347,'kill_froglok_knockedtoback',0),(11327,43348,'kill_froglok_mining_success',0),(11328,43349,'kill_froglok_run_03',0),(11329,43350,'kill_froglok_wild_swing',0),(11330,43352,'kill_result_defiler_poison_cloud',0),(11331,43353,'kill_result_mystic_cloudy_feet',0),(11332,43354,'kill_result_troubador_clouds',0),(11333,43364,'kill_froglok_bostaff_knockedtoback',0),(11334,43365,'kill_froglok_bostaff_knockedtoback_getup',0),(11335,43366,'kill_froglok_bow_knockedtoback',0),(11336,43367,'kill_froglok_bow_knockedtoback_getup',0),(11337,43368,'kill_froglok_dual_wield_knockedtoback',0),(11338,43369,'kill_froglok_dual_wield_knockedtoback_getup',0),(11339,43370,'kill_froglok_knockedtoback_getup',0),(11340,43371,'kill_froglok_knockedtoback_onbackidle',0),(11341,43372,'kill_froglok_monk_knockedtoback',0),(11342,43373,'kill_froglok_monk_knockedtoback_getup',0),(11343,43374,'kill_froglok_pike_knockedtoback',0),(11344,43375,'kill_froglok_pike_knockedtoback_getup',0),(11345,43376,'kill_froglok_pugilist_knockedtoback',0),(11346,43377,'kill_froglok_pugilist_knockedtoback_getup',0),(11347,43448,'kill_1h_crush_attack_recoil',0),(11348,43449,'kill_1h_crush_attack_recoil01',0),(11349,43450,'kill_1h_crush_attack_recoil02',0),(11350,43451,'kill_1h_crush_attack_recoil03',0),(11351,43452,'kill_1h_crush_backup',0),(11352,43453,'kill_1h_crush_enter',0),(11353,43454,'kill_1h_crush_exit',0),(11354,43455,'kill_1h_crush_strafe_left',0),(11355,43456,'kill_1h_crush_strafe_right',0),(11356,43457,'kill_1h_crush_walk',0),(11357,43458,'kill_1h_pierce_attack02',0),(11358,43459,'kill_1h_pierce_attack03',0),(11359,43460,'kill_1h_pierce_attack_recoil',0),(11360,43461,'kill_1h_pierce_attack_recoil01',0),(11361,43462,'kill_1h_pierce_attack_recoil02',0),(11362,43463,'kill_1h_pierce_attack_recoil03',0),(11363,43464,'kill_1h_pierce_backup',0),(11364,43465,'kill_1h_pierce_death_blow',0),(11365,43466,'kill_1h_pierce_death_blow01',0),(11366,43467,'kill_1h_pierce_enter',0),(11367,43468,'kill_1h_pierce_exit',0),(11368,43469,'kill_1h_pierce_strafe_left',0),(11369,43470,'kill_1h_pierce_strafe_right',0),(11370,43471,'kill_1h_pierce_walk',0),(11371,43472,'kill_1h_sword_attack_recoil',0),(11372,43473,'kill_1h_sword_attack_recoil01',0),(11373,43474,'kill_1h_sword_attack_recoil02',0),(11374,43475,'kill_1h_sword_attack_recoil03',0),(11375,43476,'kill_1h_sword_backup',0),(11376,43477,'kill_1h_sword_enter',0),(11377,43478,'kill_1h_sword_exit',0),(11378,43479,'kill_1h_sword_parry_thurst',0),(11379,43480,'kill_1h_sword_strafe_left',0),(11380,43481,'kill_1h_sword_strafe_right',0),(11381,43482,'kill_1h_sword_walk',0),(11382,43483,'kill_1h_throw_attack',0),(11383,43484,'kill_1h_thrown_backup',0),(11384,43485,'kill_1h_thrown_strafe_left',0),(11385,43486,'kill_1h_thrown_strafe_right',0),(11386,43487,'kill_1h_thrown_walk',0),(11387,43488,'kill_2h_sword_attack03',0),(11388,43489,'kill_2h_sword_attack_recoil',0),(11389,43490,'kill_2h_sword_attack_recoil01',0),(11390,43491,'kill_2h_sword_attack_recoil02',0),(11391,43492,'kill_2h_sword_attack_recoil03',0),(11392,43493,'kill_2h_sword_backup',0),(11393,43494,'kill_2h_sword_charge_up',0),(11394,43495,'kill_2h_sword_dodge_thrust',0),(11395,43496,'kill_2h_sword_exit',0),(11396,43497,'kill_2h_sword_feint',0),(11397,43498,'kill_2h_sword_offensive_buff',0),(11398,43499,'kill_2h_sword_parry_backhand',0),(11399,43500,'kill_2h_sword_parry_down',0),(11400,43501,'kill_2h_sword_parry_forehand',0),(11401,43502,'kill_2h_sword_parry_thrust',0),(11402,43503,'kill_2h_sword_strafe_left',0),(11403,43504,'kill_2h_sword_strafe_right',0),(11404,43505,'kill_2h_sword_super_buff',0),(11405,43506,'kill_2h_sword_taunt',0),(11406,43507,'kill_2h_sword_taunt_combat_art',0),(11407,43508,'kill_2h_sword_walk',0),(11408,43509,'kill_2hsword_idle01',0),(11409,43512,'kill_a',0),(11410,43513,'kill_agree',0),(11411,43515,'kill_alchemy_failure',0),(11412,43516,'kill_alchemy_idle',0),(11413,43517,'kill_alchemy_success',0),(11414,43518,'kill_angry',0),(11415,43519,'kill_antenna_01',0),(11416,43520,'kill_antenna_02',0),(11417,43521,'kill_antenna_03',0),(11418,43522,'kill_antenna_04',0),(11419,43523,'kill_antenna_05',0),(11420,43524,'kill_antonia_wisp',0),(11421,43525,'kill_anvil',0),(11422,43526,'kill_anvil_small',0),(11423,43527,'kill_appear',0),(11424,43528,'kill_applaude',0),(11425,43529,'kill_arm04_fail',0),(11426,43530,'kill_arm04_success',0),(11427,43531,'kill_armpour01',0),(11428,43532,'kill_artifact',0),(11429,43533,'kill_artificing_failure',0),(11430,43534,'kill_artificing_idle',0),(11431,43535,'kill_artificing_success',0),(11432,43536,'kill_artsn_chem_sound',0),(11433,43537,'kill_artsn_chimepad_sound',0),(11434,43538,'kill_artsn_forge_helmet_sound',0),(11435,43539,'kill_artsn_forge_sound',0),(11436,43540,'kill_artsn_glow_sound',0),(11437,43541,'kill_artsn_knives_sound',0),(11438,43542,'kill_artsn_knot_sound',0),(11439,43543,'kill_artsn_logcut_sound',0),(11440,43544,'kill_artsn_metal_bar_end_snd',0),(11441,43545,'kill_artsn_metal_bar_snd',0),(11442,43546,'kill_artsn_molecule_sound',0),(11443,43547,'kill_artsn_planer_sound',0),(11444,43548,'kill_artsn_saw_sound',0),(11445,43549,'kill_artsn_stove_sound',0),(11446,43550,'kill_asg_stonegaze_snd',0),(11447,43551,'kill_attack',0),(11448,43552,'kill_attack01',0),(11449,43553,'kill_attack02',0),(11450,43554,'kill_attack03',0),(11451,43555,'kill_attack04',0),(11452,43556,'kill_attack_backhand_trigger',0),(11453,43557,'kill_attack_bite',0),(11454,43558,'kill_attack_breath',0),(11455,43559,'kill_attack_breath01',0),(11456,43560,'kill_attack_breath02',0),(11457,43561,'kill_attack_forehand_trigger',0),(11458,43562,'kill_attack_headram',0),(11459,43563,'kill_attack_rear',0),(11460,43564,'kill_attack_roar01',0),(11461,43565,'kill_attack_scream',0),(11462,43566,'kill_attack_slam',0),(11463,43567,'kill_attack_snap',0),(11464,43568,'kill_attack_sound',0),(11465,43569,'kill_attack_special',0),(11466,43570,'kill_attack_special01',0),(11467,43571,'kill_attack_special02',0),(11468,43572,'kill_attack_special03',0),(11469,43573,'kill_attack_special_spring',0),(11470,43574,'kill_attack_stomp',0),(11471,43575,'kill_attack_tail',0),(11472,43576,'kill_attack_whirling',0),(11473,43577,'kill_attack_wildswing',0),(11474,43578,'kill_attack_wing',0),(11475,43579,'kill_attack_wings',0),(11476,43580,'kill_attack_woosh01',0),(11477,43581,'kill_attacktiming',0),(11478,43582,'kill_attacktiming_a',0),(11479,43583,'kill_attention',0),(11480,43584,'kill_aval_cast_snd',0),(11481,43585,'kill_awrh_cast_snd',0),(11482,43586,'kill_awrh_heal2_snd',0),(11483,43587,'kill_awrh_heal_snd',0),(11484,43588,'kill_awrh_rainfall_snd',0),(11485,43589,'kill_aww_whirlcast_snd',0),(11486,43590,'kill_aww_whirlparticles_snd',0),(11487,43591,'kill_backup',0),(11488,43592,'kill_backup_run',0),(11489,43593,'kill_bad_outcome01',0),(11490,43594,'kill_bad_outcome01_shuttle',0),(11491,43595,'kill_bad_outcome02',0),(11492,43596,'kill_bad_outcome02_shuttle',0),(11493,43597,'kill_ball_bk',0),(11494,43598,'kill_ball_bk_sm',0),(11495,43599,'kill_ball_glow',0),(11496,43600,'kill_ball_wht',0),(11497,43601,'kill_ball_wht_sm',0),(11498,43602,'kill_barrel_fire',0),(11499,43603,'kill_barrel_pieces',0),(11500,43604,'kill_base',0),(11501,43605,'kill_bat_swarm',0),(11502,43606,'kill_battlecry',0),(11503,43607,'kill_bc_caged_snd',0),(11504,43608,'kill_bd_cast_lp_snd',0),(11505,43609,'kill_bd_fireburst_snd',0),(11506,43610,'kill_beaker01',0),(11507,43611,'kill_beckon',0),(11508,43612,'kill_beg',0),(11509,43613,'kill_bene',0),(11510,43614,'kill_big_saw_success',0),(11511,43615,'kill_big_saw_success2',0),(11512,43616,'kill_big_smoke',0),(11513,43617,'kill_bl_castswirls_snd',0),(11514,43618,'kill_bl_start_particles_snd',0),(11515,43619,'kill_blammo',0),(11516,43620,'kill_blink',0),(11517,43621,'kill_boe_endspinner_sound',0),(11518,43622,'kill_boe_open_burst_sound',0),(11519,43623,'kill_boe_shield_tone_sound',0),(11520,43624,'kill_boggle',0),(11521,43625,'kill_boilover01',0),(11522,43626,'kill_book_white',0),(11523,43627,'kill_bostaff_attack_recoil',0),(11524,43628,'kill_bostaff_attack_recoil01',0),(11525,43629,'kill_bostaff_attack_recoil02',0),(11526,43630,'kill_bostaff_attack_recoil03',0),(11527,43631,'kill_bostaff_backup',0),(11528,43632,'kill_bostaff_charge_up',0),(11529,43633,'kill_bostaff_defensive_buff',0),(11530,43634,'kill_bostaff_dodge_backhand',0),(11531,43635,'kill_bostaff_dodge_down',0),(11532,43636,'kill_bostaff_dodge_forehand',0),(11533,43637,'kill_bostaff_dodge_thrust',0),(11534,43638,'kill_bostaff_enter',0),(11535,43639,'kill_bostaff_exit',0),(11536,43640,'kill_bostaff_feint',0),(11537,43641,'kill_bostaff_idle01',0),(11538,43642,'kill_bostaff_knockdowntoknees',0),(11539,43643,'kill_bostaff_knockedtoback',0),(11540,43644,'kill_bostaff_knockedtoback_getup',0),(11541,43645,'kill_bostaff_offensive_buff',0),(11542,43646,'kill_bostaff_ouch_backhand',0),(11543,43647,'kill_bostaff_ouch_down',0),(11544,43648,'kill_bostaff_ouch_forehand',0),(11545,43649,'kill_bostaff_ouch_thrust',0),(11546,43650,'kill_bostaff_parry_backhand',0),(11547,43651,'kill_bostaff_parry_down',0),(11548,43652,'kill_bostaff_parry_forehand',0),(11549,43653,'kill_bostaff_parry_thrust',0),(11550,43654,'kill_bostaff_strafe_left',0),(11551,43655,'kill_bostaff_strafe_right',0),(11552,43656,'kill_bostaff_super_buff',0),(11553,43657,'kill_bostaff_taunt_combat_art',0),(11554,43658,'kill_bostaff_walk',0),(11555,43659,'kill_bow_aim_down',0),(11556,43660,'kill_bow_aim_up',0),(11557,43661,'kill_bow_attack',0),(11558,43662,'kill_bow_attack_2x',0),(11559,43663,'kill_bow_backup',0),(11560,43664,'kill_bow_enter',0),(11561,43665,'kill_bow_exit',0),(11562,43666,'kill_bow_getarrow',0),(11563,43667,'kill_bow_knockdowntoknees',0),(11564,43668,'kill_bow_knockedtoback',0),(11565,43669,'kill_bow_knockedtoback_getup',0),(11566,43670,'kill_bow_pullback',0),(11567,43671,'kill_bow_release',0),(11568,43672,'kill_bow_sheathe',0),(11569,43673,'kill_bow_strafe_left',0),(11570,43674,'kill_bow_strafe_right',0),(11571,43675,'kill_bow_unsheathe',0),(11572,43676,'kill_bow_walk',0),(11573,43677,'kill_bowstring',0),(11574,43678,'kill_bowstring_electricity',0),(11575,43679,'kill_bowstring_electricity_red',0),(11576,43680,'kill_brandish',0),(11577,43681,'kill_breath',0),(11578,43682,'kill_breath_attack',0),(11579,43683,'kill_breath_attack_blue',0),(11580,43684,'kill_breath_attack_purple',0),(11581,43685,'kill_breath_nostop',0),(11582,43686,'kill_breathweapon',0),(11583,43687,'kill_bs_bull_form_01_snd',0),(11584,43688,'kill_bs_cast_armpush_snd',0),(11585,43689,'kill_bs_hooves_snd',0),(11586,43690,'kill_bs_makebull_tone_snd',0),(11587,43691,'kill_bubbles01',0),(11588,43692,'kill_burn',0),(11589,43693,'kill_burst_sound_01',0),(11590,43694,'kill_bye',0),(11591,43695,'kill_c',0),(11592,43696,'kill_cache_state0',0),(11593,43697,'kill_cache_state1',0),(11594,43698,'kill_cache_state2',0),(11595,43699,'kill_cached_state0',0),(11596,43700,'kill_cached_state1',0),(11597,43701,'kill_cactus_spiney_sound',0),(11598,43702,'kill_candle01',0),(11599,43703,'kill_candle02',0),(11600,43704,'kill_candle03',0),(11601,43705,'kill_candle04',0),(11602,43706,'kill_candle_flair01',0),(11603,43707,'kill_candle_flair02',0),(11604,43708,'kill_candle_flair03',0),(11605,43709,'kill_candle_smoke01',0),(11606,43710,'kill_candle_smoke02',0),(11607,43711,'kill_candle_smoke03',0),(11608,43712,'kill_carpet_enter',0),(11609,43713,'kill_carpet_exit',0),(11610,43714,'kill_carpet_fall',0),(11611,43715,'kill_carpet_idle',0),(11612,43716,'kill_carpet_jump',0),(11613,43717,'kill_carpet_land',0),(11614,43718,'kill_carpet_run',0),(11615,43719,'kill_carpet_walk',0),(11616,43720,'kill_cast01',0),(11617,43721,'kill_cast4',0),(11618,43722,'kill_cast_01lp_snd',0),(11619,43723,'kill_cast_1',0),(11620,43724,'kill_cast_10',0),(11621,43725,'kill_cast_11',0),(11622,43726,'kill_cast_12',0),(11623,43727,'kill_cast_2',0),(11624,43728,'kill_cast_3',0),(11625,43729,'kill_cast_4',0),(11626,43730,'kill_cast_6',0),(11627,43731,'kill_cast_7',0),(11628,43732,'kill_cast_8',0),(11629,43733,'kill_cast_9',0),(11630,43734,'kill_cast_aoe_beneficial_end',0),(11631,43735,'kill_cast_aoe_beneficial_loop',0),(11632,43736,'kill_cast_aoe_beneficial_start',0),(11633,43737,'kill_cast_aoe_detrimental_end',0),(11634,43738,'kill_cast_aoe_detrimental_loop',0),(11635,43739,'kill_cast_aoe_detrimental_start',0),(11636,43741,'kill_cast_aoe_invocation_end',0),(11637,43742,'kill_cast_aoe_invocation_loop',0),(11638,43743,'kill_cast_aoe_invocation_start',0),(11639,43744,'kill_cast_aoe_wand_end',0),(11640,43745,'kill_cast_aoe_wand_loop',0),(11641,43746,'kill_cast_aoe_wand_start',0),(11642,43747,'kill_cast_armor_01_snd',0),(11643,43748,'kill_cast_attack02',0),(11644,43749,'kill_cast_backgroundsparkle_snd',0),(11645,43750,'kill_cast_bard_drum_end',0),(11646,43751,'kill_cast_bard_drum_loop',0),(11647,43753,'kill_cast_bard_flute_end',0),(11648,43754,'kill_cast_bard_flute_loop',0),(11649,43756,'kill_cast_bard_stringed_end',0),(11650,43757,'kill_cast_bard_stringed_loop',0),(11651,43758,'kill_cast_bard_stringed_start',0),(11652,43759,'kill_cast_bard_vocal_end',0),(11653,43760,'kill_cast_bard_vocal_loop',0),(11654,43762,'kill_cast_charge_wind_01_sound',0),(11655,43763,'kill_cast_chargeswordglint_sound',0),(11656,43764,'kill_cast_clowhand_sound_01',0),(11657,43765,'kill_cast_clowhand_sound_02',0),(11658,43766,'kill_cast_clowhand_sound_03',0),(11659,43767,'kill_cast_deepbreath',0),(11660,43768,'kill_cast_distort_lefthand',0),(11661,43769,'kill_cast_distort_right_foot_ws',0),(11662,43770,'kill_cast_distort_righthand',0),(11663,43771,'kill_cast_drake_fire_breath',0),(11664,43772,'kill_cast_drone_01_snd',0),(11665,43773,'kill_cast_drone_02_snd',0),(11666,43774,'kill_cast_drone_snd',0),(11667,43775,'kill_cast_drone_sound',0),(11668,43776,'kill_cast_dustpuff_lefthand',0),(11669,43777,'kill_cast_dustpuff_righthand',0),(11670,43778,'kill_cast_elec_feet_green',0),(11671,43779,'kill_cast_elec_hands_four',0),(11672,43780,'kill_cast_elec_hands_four_up',0),(11673,43781,'kill_cast_elec_hands_up',0),(11674,43782,'kill_cast_end_sound',0),(11675,43783,'kill_cast_endbang2_snd',0),(11676,43784,'kill_cast_endbang_snd',0),(11677,43785,'kill_cast_endsparkle_snd',0),(11678,43786,'kill_cast_endthunder_snd',0),(11679,43787,'kill_cast_es_arches_01_snd',0),(11680,43788,'kill_cast_fast',0),(11681,43789,'kill_cast_force_snd',0),(11682,43790,'kill_cast_glowhand__sound_02',0),(11683,43791,'kill_cast_glowhand_sound_01',0),(11684,43792,'kill_cast_glowhand_sound_03',0),(11685,43793,'kill_cast_glowhand_sound_04',0),(11686,43794,'kill_cast_glowhand_sound_05',0),(11687,43795,'kill_cast_glowhand_sound_06',0),(11688,43796,'kill_cast_gsswipe_01_snd',0),(11689,43797,'kill_cast_gsswipe_02_snd',0),(11690,43798,'kill_cast_gsswipe_03_snd',0),(11691,43799,'kill_cast_hands_elec_nightblood',0),(11692,43800,'kill_cast_handswipe_snd',0),(11693,43801,'kill_cast_howlverb_sound',0),(11694,43802,'kill_cast_hrb_choral_snd',0),(11695,43803,'kill_cast_hrb_rune_snd',0),(11696,43804,'kill_cast_ice_laser_breath',0),(11697,43805,'kill_cast_kickcharge_sound',0),(11698,43806,'kill_cast_laser_aoe',0),(11699,43807,'kill_cast_lava_rocks',0),(11700,43808,'kill_cast_lense01',0),(11701,43809,'kill_cast_lense02',0),(11702,43810,'kill_cast_light_sound',0),(11703,43811,'kill_cast_mage_aggro_01',0),(11704,43812,'kill_cast_mage_aggro_02',0),(11705,43813,'kill_cast_mage_buff_01',0),(11706,43814,'kill_cast_mage_buff_02',0),(11707,43815,'kill_cast_mage_ddam_01',0),(11708,43816,'kill_cast_mage_ddam_02',0),(11709,43817,'kill_cast_mage_qa_01',0),(11710,43818,'kill_cast_mage_qa_02',0),(11711,43819,'kill_cast_mage_qa_03',0),(11712,43820,'kill_cast_mage_quickzap_01',0),(11713,43821,'kill_cast_mage_quickzap_02',0),(11714,43822,'kill_cast_mage_ready',0),(11715,43823,'kill_cast_mendhands_01',0),(11716,43824,'kill_cast_mendsparkleball_01',0),(11717,43825,'kill_cast_mendsparkleball_02',0),(11718,43826,'kill_cast_mendtrail_01',0),(11719,43827,'kill_cast_mendtrails_01',0),(11720,43828,'kill_cast_mendtwinkles_01',0),(11721,43829,'kill_cast_new_qa_part1',0),(11722,43830,'kill_cast_new_qa_part2',0),(11723,43831,'kill_cast_new_qa_part3',0),(11724,43832,'kill_cast_pdswipe_01_snd',0),(11725,43833,'kill_cast_pfx_magenuke_head',0),(11726,43834,'kill_cast_pillar_sound_01',0),(11727,43835,'kill_cast_pillar_sound_02',0),(11728,43836,'kill_cast_pillar_sound_03',0),(11729,43837,'kill_cast_pillar_sound_04',0),(11730,43838,'kill_cast_pillar_sound_05',0),(11731,43839,'kill_cast_pillars',0),(11732,43842,'kill_cast_priest_aggro_01',0),(11733,43843,'kill_cast_priest_aggro_02',0),(11734,43844,'kill_cast_priest_buff_01',0),(11735,43845,'kill_cast_priest_buff_02',0),(11736,43846,'kill_cast_priest_ddam_01',0),(11737,43847,'kill_cast_priest_ddam_02',0),(11738,43848,'kill_cast_priest_floating',0),(11739,43849,'kill_cast_quickhit_snd',0),(11740,43850,'kill_cast_ready',0),(11741,43851,'kill_cast_rune_sound_01',0),(11742,43852,'kill_cast_rune_sound_02',0),(11743,43853,'kill_cast_rune_sound_03',0),(11744,43854,'kill_cast_rune_sound_04',0),(11745,43855,'kill_cast_shield_grow',0),(11746,43856,'kill_cast_shortbreath',0),(11747,43857,'kill_cast_sneak_sound',0),(11748,43858,'kill_cast_spark_burst_righthand',0),(11749,43859,'kill_cast_sparklewave_01_snd',0),(11750,43860,'kill_cast_sparklewave_02_snd',0),(11751,43861,'kill_cast_sparklewave_03_snd',0),(11752,43862,'kill_cast_sparklewave_04_snd',0),(11753,43863,'kill_cast_sparklewave_05_snd',0),(11754,43864,'kill_cast_startlow_snd',0),(11755,43865,'kill_cast_startthunder_snd',0),(11756,43866,'kill_cast_steam_breath',0),(11757,43867,'kill_cast_summon_end',0),(11758,43868,'kill_cast_summon_loop',0),(11759,43869,'kill_cast_summon_start',0),(11760,43870,'kill_cast_swipe01_snd',0),(11761,43871,'kill_cast_swipe02_snd',0),(11762,43872,'kill_cast_target_det_01',0),(11763,43873,'kill_cast_target_det_02',0),(11764,43874,'kill_cast_target_det_03',0),(11765,43875,'kill_cast_target_detrimental_01',0),(11766,43876,'kill_cast_target_detrimental_02',0),(11767,43877,'kill_cast_targeted_benefical_end',0),(11768,43878,'kill_cast_targeted_benefical_loop',0),(11769,43879,'kill_cast_targeted_benefical_start',0),(11770,43880,'kill_cast_targeted_beneficial_end',0),(11771,43881,'kill_cast_targeted_beneficial_loop',0),(11772,43882,'kill_cast_targeted_beneficial_start',0),(11773,43883,'kill_cast_targeted_detrimental_end',0),(11774,43884,'kill_cast_targeted_detrimental_loop',0),(11775,43885,'kill_cast_targeted_detrimental_start',0),(11776,43886,'kill_cast_targeted_detrimental_start2',0),(11777,43887,'kill_cast_targeted_wand_end',0),(11778,43888,'kill_cast_targeted_wand_loop',0),(11779,43889,'kill_cast_targeted_wand_start',0),(11780,43890,'kill_cast_tarranax_breath',0),(11781,43891,'kill_cast_tarranax_breath_path',0),(11782,43892,'kill_cast_tarranax_breath_start',0),(11783,43893,'kill_cast_thunder_snd',0),(11784,43894,'kill_cast_trail_leftarm_bright',0),(11785,43895,'kill_cast_trail_rightarm_bright',0),(11786,43896,'kill_cast_undertone_snd',0),(11787,43897,'kill_cast_venekors_fire_breath',0),(11788,43898,'kill_cast_wildcharge_sound',0),(11789,43899,'kill_cast_wildswingwindsword_sound',0),(11790,43900,'kill_cast_wuoshi_choking_vines_aoe',0),(11791,43901,'kill_cast_wuoshi_fire_and_ice_aoe',0),(11792,43902,'kill_cast_wuoshi_tree_morph',0),(11793,43903,'kill_cast_zombie_scare',0),(11794,43904,'kill_cchains_resultchains_snd',0),(11795,43905,'kill_cchains_sing_snd',0),(11796,43906,'kill_cf_coins_bounce_background_snd',0),(11797,43907,'kill_cf_coins_bounce_bkgrnd_short_snd',0),(11798,43908,'kill_cf_coins_lots_snd',0),(11799,43909,'kill_cf_coins_many_snd',0),(11800,43910,'kill_cf_coinsfall_snd',0),(11801,43911,'kill_charge',0),(11802,43912,'kill_charge_burst_snd',0),(11803,43913,'kill_charge_rumble_snd',0),(11804,43914,'kill_charge_up',0),(11805,43915,'kill_charge_whoosh_snd',0),(11806,43916,'kill_charm_cast_snd',0),(11807,43917,'kill_charm_flutes_snd',0),(11808,43918,'kill_cheer',0),(11809,43919,'kill_chimney01',0),(11810,43920,'kill_chuckle',0),(11811,43921,'kill_ciseme_m',0),(11812,43922,'kill_cl_catglow_snd',0),(11813,43923,'kill_clear_target_tigger',0),(11814,43924,'kill_clear_target_trigger',0),(11815,43925,'kill_climbing',0),(11816,43926,'kill_climbing_chainmail_stone',0),(11817,43927,'kill_climbing_chainmail_wood',0),(11818,43928,'kill_climbing_enter_down',0),(11819,43929,'kill_climbing_exit_up',0),(11820,43930,'kill_climbing_idle01',0),(11821,43931,'kill_climbing_leather_stone',0),(11822,43932,'kill_climbing_leather_wood',0),(11823,43933,'kill_climbing_metal_stone',0),(11824,43934,'kill_climbing_metal_wood',0),(11825,43935,'kill_climbing_ouch',0),(11826,43936,'kill_closed',0),(11827,43937,'kill_cloud_group_sound',0),(11828,43938,'kill_cloud_sound',0),(11829,43939,'kill_cloud_sound_02',0),(11830,43940,'kill_cloud_widget',0),(11831,43941,'kill_cn_ringout_snd',0),(11832,43942,'kill_cn_strums_snd',0),(11833,43943,'kill_coals01',0),(11834,43944,'kill_coals_failure',0),(11835,43945,'kill_coals_fire_large',0),(11836,43946,'kill_coals_fire_small',0),(11837,43947,'kill_coins_and_jewels_pile',0),(11838,43948,'kill_coins_pile_copper',0),(11839,43949,'kill_coins_pile_gold',0),(11840,43950,'kill_coins_pile_silver',0),(11841,43951,'kill_cold_breath',0),(11842,43952,'kill_comabt_exit',0),(11843,43953,'kill_combat',0),(11844,43954,'kill_combat_backup',0),(11845,43955,'kill_combat_backup_run',0),(11846,43956,'kill_combat_enter',0),(11847,43957,'kill_combat_exit',0),(11848,43958,'kill_combat_fx',0),(11849,43959,'kill_combat_idle',0),(11850,43960,'kill_combat_idle01',0),(11851,43961,'kill_combat_idle1',0),(11852,43962,'kill_combat_idle_bark',0),(11853,43963,'kill_combat_idle_enter',0),(11854,43964,'kill_combat_idle_jump',0),(11855,43965,'kill_combat_idle_rhand',0),(11856,43966,'kill_combat_idle_snap',0),(11857,43967,'kill_combat_idle_sound01',0),(11858,43968,'kill_combat_idle_sound02',0),(11859,43969,'kill_combat_idleflap',0),(11860,43970,'kill_combat_ouch',0),(11861,43971,'kill_combat_ouch_sound',0),(11862,43972,'kill_combat_peace',0),(11863,43973,'kill_combat_run',0),(11864,43974,'kill_combat_strafe_left_run',0),(11865,43975,'kill_combat_strafe_right_run',0),(11866,43976,'kill_combat_tail',0),(11867,43977,'kill_combat_tail_cloak',0),(11868,43978,'kill_combat_turn_left',0),(11869,43979,'kill_combat_turn_right',0),(11870,43980,'kill_combat_walk',0),(11871,43981,'kill_complete',0),(11872,43982,'kill_confused',0),(11873,43988,'kill_converse',0),(11874,43989,'kill_converse_female01',0),(11875,43990,'kill_converse_female02',0),(11876,43991,'kill_converse_female03',0),(11877,43992,'kill_converse_female04',0),(11878,43993,'kill_converse_female05',0),(11879,43994,'kill_converse_female06',0),(11880,43995,'kill_converse_female07',0),(11881,43996,'kill_converse_female08',0),(11882,43997,'kill_converse_female09',0),(11883,43998,'kill_converse_female10',0),(11884,43999,'kill_converse_female11',0),(11885,44000,'kill_converse_female12',0),(11886,44001,'kill_converse_male01',0),(11887,44002,'kill_converse_male02',0),(11888,44003,'kill_converse_male03',0),(11889,44004,'kill_converse_male05',0),(11890,44005,'kill_converse_male06',0),(11891,44006,'kill_converse_male07',0),(11892,44007,'kill_converse_male08',0),(11893,44008,'kill_converse_male09',0),(11894,44009,'kill_converse_male10',0),(11895,44010,'kill_converse_male11',0),(11896,44011,'kill_cooking_failure',0),(11897,44012,'kill_cooking_idle',0),(11898,44013,'kill_cooking_success',0),(11899,44014,'kill_corpse',0),(11900,44015,'kill_cos_call_storm_snd',0),(11901,44016,'kill_cos_storm_space_snd',0),(11902,44017,'kill_cp_charge_snd',0),(11903,44018,'kill_cr_choral01_sound',0),(11904,44019,'kill_cr_choral02_sound',0),(11905,44020,'kill_cracks',0),(11906,44021,'kill_crash_enter',0),(11907,44022,'kill_crash_exit',0),(11908,44023,'kill_crazy',0),(11909,44024,'kill_cringe',0),(11910,44025,'kill_croak_01',0),(11911,44026,'kill_croak_02',0),(11912,44027,'kill_croak_03',0),(11913,44028,'kill_croak_04',0),(11914,44029,'kill_croak_05',0),(11915,44030,'kill_croak_06',0),(11916,44031,'kill_croak_07',0),(11917,44032,'kill_croak_08',0),(11918,44033,'kill_croak_09',0),(11919,44034,'kill_crouch_backup',0),(11920,44035,'kill_crouch_run',0),(11921,44036,'kill_crouch_strafe_left',0),(11922,44037,'kill_crouch_strafe_right',0),(11923,44038,'kill_crouch_tail',0),(11924,44039,'kill_crouch_tail_cloak',0),(11925,44040,'kill_crouch_turn_left',0),(11926,44041,'kill_crouch_turn_right',0),(11927,44042,'kill_crouch_walk',0),(11928,44043,'kill_cry',0),(11929,44044,'kill_cs_begin_snd',0),(11930,44045,'kill_cs_cast_lp_snd',0),(11931,44046,'kill_cs_disco_lp01_snd',0),(11932,44047,'kill_cs_end_snd',0),(11933,44048,'kill_cs_ice_crackle_01',0),(11934,44049,'kill_cs_iceburst_sound',0),(11935,44050,'kill_cs_icetones_01',0),(11936,44051,'kill_cs_icewind_sound',0),(11937,44052,'kill_cs_result_sound',0),(11938,44053,'kill_curse',0),(11939,44054,'kill_curtsey',0),(11940,44055,'kill_cutthroat',0),(11941,44056,'kill_cv_candle01_snd',0),(11942,44057,'kill_cv_candle02_snd',0),(11943,44058,'kill_cv_darkcandle_snd',0),(11944,44059,'kill_cv_drone_snd',0),(11945,44060,'kill_cv_handwave01_snd',0),(11946,44061,'kill_cv_handwave02_snd',0),(11947,44062,'kill_damage01',0),(11948,44063,'kill_damage02',0),(11949,44064,'kill_damage03',0),(11950,44065,'kill_damage_small',0),(11951,44066,'kill_dance',0),(11952,44067,'kill_dance01',0),(11953,44068,'kill_dark_smoke',0),(11954,44069,'kill_dark_smoke_up',0),(11955,44070,'kill_db_drone_sound',0),(11956,44071,'kill_db_electricend_sound',0),(11957,44072,'kill_db_swordstickdirt_sound',0),(11958,44073,'kill_dbb_dragonbreath_snd',0),(11959,44074,'kill_dbb_dragonbreathhiwav_snd',0),(11960,44075,'kill_dcs_scarab_lp_snd',0),(11961,44076,'kill_dcspid_spider_snd',0),(11962,44077,'kill_dead_dark_smoke',0),(11963,44078,'kill_dead_dark_smoke_head',0),(11964,44079,'kill_dead_enter_death02',0),(11965,44080,'kill_dead_enter_death03',0),(11966,44081,'kill_dead_enter_fall',0),(11967,44082,'kill_dead_enter_scream',0),(11968,44083,'kill_dead_enter_sound',0),(11969,44084,'kill_dead_entertiming_a',0),(11970,44085,'kill_dead_entertiming_b',0),(11971,44086,'kill_dead_entertiming_c',0),(11972,44087,'kill_dead_entertiming_c2',0),(11973,44088,'kill_dead_entertiming_c3',0),(11974,44089,'kill_dead_entertiming_d',0),(11975,44090,'kill_dead_entertiming_e',0),(11976,44091,'kill_dead_exit',0),(11977,44092,'kill_dead_fall',0),(11978,44093,'kill_dead_scream01',0),(11979,44094,'kill_dead_scream02',0),(11980,44095,'kill_dead_tail',0),(11981,44096,'kill_death_fall01',0),(11982,44097,'kill_death_fall02',0),(11983,44098,'kill_default',0),(11984,44099,'kill_defensive_buff',0),(11985,44100,'kill_definsive_buff',0),(11986,44101,'kill_descend_sound_01',0),(11987,44102,'kill_design_fear_gate_flash',0),(11988,44103,'kill_design_fireflies',0),(11989,44104,'kill_design_fireflies_evil',0),(11990,44105,'kill_design_hearts_all',0),(11991,44106,'kill_design_hearts_big_all',0),(11992,44107,'kill_design_hearts_big_blue',0),(11993,44108,'kill_design_hearts_big_purple',0),(11994,44109,'kill_design_hearts_big_red',0),(11995,44110,'kill_design_hearts_blue',0),(11996,44111,'kill_design_hearts_purple',0),(11997,44112,'kill_design_hearts_red',0),(11998,44113,'kill_design_hummingbirds',0),(11999,44114,'kill_design_portal_to_hell',0),(12000,44115,'kill_design_result_backdraft',0),(12001,44116,'kill_design_result_cyclone_sand',0),(12002,44117,'kill_design_result_cyclone_sand_ccw',0),(12003,44118,'kill_design_result_freeport_pit_fire_spurt',0),(12004,44119,'kill_design_result_fungusman_poked',0),(12005,44120,'kill_design_result_halloween_fog',0),(12006,44121,'kill_design_result_light_shafts',0),(12007,44122,'kill_design_result_sparkle_scan_up',0),(12008,44123,'kill_design_result_teleporter',0),(12009,44124,'kill_design_smoke_jet_brown',0),(12010,44125,'kill_design_smoke_jet_brown_int',0),(12011,44126,'kill_design_smoke_jet_gray',0),(12012,44127,'kill_design_smoke_jet_gray_int',0),(12013,44128,'kill_design_smoke_jet_white',0),(12014,44129,'kill_design_smoke_jet_white_int',0),(12015,44130,'kill_design_sound_blow',0),(12016,44131,'kill_design_sound_bubble',0),(12017,44132,'kill_design_sound_steam',0),(12018,44133,'kill_design_steamfont_bubbles_ripples',0),(12019,44134,'kill_design_steamfont_rainbow',0),(12020,44135,'kill_design_steamfont_slow_steam',0),(12021,44136,'kill_design_steamfont_steam_column',0),(12022,44137,'kill_design_steamfont_steam_tube_a',0),(12023,44138,'kill_design_steamfont_steam_tube_b',0),(12024,44139,'kill_design_steamfont_water_column',0),(12025,44140,'kill_design_teleport_spires',0),(12026,44141,'kill_design_trap_spear',0),(12027,44142,'kill_design_trap_weight',0),(12028,44143,'kill_design_vision_plane_druid_ring',0),(12029,44144,'kill_design_vortex_portal_blue',0),(12030,44145,'kill_design_vortex_portal_green',0),(12031,44146,'kill_design_vortex_portal_oval_blue',0),(12032,44147,'kill_destination',0),(12033,44148,'kill_destroy',0),(12034,44149,'kill_destroyed',0),(12035,44150,'kill_df_charge_sound',0),(12036,44151,'kill_df_hit_sound',0),(12037,44152,'kill_df_impact_sound',0),(12038,44153,'kill_df_vortex_sound',0),(12039,44154,'kill_dieyell',0),(12040,44155,'kill_dig',0),(12041,44156,'kill_dig_enter',0),(12042,44157,'kill_dig_exit',0),(12043,44158,'kill_dig_loop',0),(12044,44159,'kill_ding',0),(12045,44160,'kill_disarm_both',0),(12046,44161,'kill_disarm_left',0),(12047,44162,'kill_disarm_right',0),(12048,44163,'kill_disease',0),(12049,44164,'kill_dm_backgroundexplosions_snd',0),(12050,44165,'kill_dm_dragonform_snd',0),(12051,44166,'kill_dm_energyforce_snd',0),(12052,44167,'kill_dodge',0),(12053,44168,'kill_dodge01',0),(12054,44169,'kill_dodge02',0),(12055,44170,'kill_dodge03',0),(12056,44171,'kill_dodge1',0),(12057,44172,'kill_dodge2',0),(12058,44173,'kill_dodge3',0),(12059,44174,'kill_dodge_backhand',0),(12060,44175,'kill_dodge_down',0),(12061,44176,'kill_dodge_forehand',0),(12062,44177,'kill_dodge_thrust',0),(12063,44178,'kill_doh',0),(12064,44179,'kill_door_move',0),(12065,44180,'kill_door_slam',0),(12066,44181,'kill_doorcorner01',0),(12067,44182,'kill_doorcorner02',0),(12068,44183,'kill_doubletake',0),(12069,44184,'kill_dpsd_swordshatter.wav_snd',0),(12070,44185,'kill_dragon_e3demo',0),(12071,44186,'kill_draw_metal_weapon_snd',0),(12072,44187,'kill_draw_weapon_snd',0),(12073,44188,'kill_draw_weapon_trigger',0),(12074,44189,'kill_drinking_failure',0),(12075,44190,'kill_drinking_idle',0),(12076,44191,'kill_drinking_success',0),(12077,44192,'kill_drip01',0),(12078,44193,'kill_drip02',0),(12079,44194,'kill_dronewolf_sound',0),(12080,44195,'kill_drum_drone_snd',0),(12081,44196,'kill_drum_drum_snd',0),(12082,44197,'kill_ds_dragonspawn_sound',0),(12083,44198,'kill_ds_gashiss_snd',0),(12084,44201,'kill_dual_wield_attack_recoil',0),(12085,44202,'kill_dual_wield_attack_recoil01',0),(12086,44203,'kill_dual_wield_attack_recoil02',0),(12087,44204,'kill_dual_wield_attack_recoil03',0),(12088,44205,'kill_dual_wield_backup',0),(12089,44206,'kill_dual_wield_defensive_buff',0),(12090,44207,'kill_dual_wield_dodge_backhand',0),(12091,44208,'kill_dual_wield_dodge_down',0),(12092,44209,'kill_dual_wield_dodge_forehand',0),(12093,44210,'kill_dual_wield_dodge_thrust',0),(12094,44211,'kill_dual_wield_enter',0),(12095,44212,'kill_dual_wield_exit',0),(12096,44213,'kill_dual_wield_feint',0),(12097,44214,'kill_dual_wield_knockdowntoknees',0),(12098,44215,'kill_dual_wield_knockedtoback',0),(12099,44216,'kill_dual_wield_knockedtoback_getup',0),(12100,44217,'kill_dual_wield_offensive_buff',0),(12101,44218,'kill_dual_wield_ouch_backhand',0),(12102,44219,'kill_dual_wield_ouch_down',0),(12103,44220,'kill_dual_wield_ouch_forehand',0),(12104,44221,'kill_dual_wield_ouch_thrust',0),(12105,44222,'kill_dual_wield_parry_backhand',0),(12106,44223,'kill_dual_wield_parry_down',0),(12107,44224,'kill_dual_wield_parry_forehand',0),(12108,44225,'kill_dual_wield_parry_thrust',0),(12109,44226,'kill_dual_wield_strafe_left',0),(12110,44227,'kill_dual_wield_strafe_right',0),(12111,44228,'kill_dual_wield_super_buff',0),(12112,44229,'kill_dual_wield_taunt_combat_art',0),(12113,44230,'kill_dual_wield_walk',0),(12114,44231,'kill_duck',0),(12115,44232,'kill_duck_short',0),(12116,44233,'kill_dust_base',0),(12117,44234,'kill_dust_holster_center',0),(12118,44235,'kill_dust_holster_left',0),(12119,44236,'kill_dust_holster_right',0),(12120,44237,'kill_dust_leftfoot',0),(12121,44238,'kill_dust_lefttfoot',0),(12122,44239,'kill_dust_puff',0),(12123,44240,'kill_dust_rightfoot',0),(12124,44241,'kill_dust_righttfoot',0),(12125,44242,'kill_dw_snap_snd',0),(12126,44243,'kill_e',0),(12127,44244,'kill_eat',0),(12128,44245,'kill_ef_cast_chains_lp_snd',0),(12129,44246,'kill_ef_chains_snd',0),(12130,44247,'kill_elbow',0),(12131,44248,'kill_electric_shackles_softer_sound',0),(12132,44249,'kill_electric_shackles_sound',0),(12133,44250,'kill_end_snarl_sound',0),(12134,44251,'kill_endsplat',0),(12135,44252,'kill_enter',0),(12136,44253,'kill_es_flutecast_sound',0),(12137,44254,'kill_es_fluteresult_sound',0),(12138,44255,'kill_ew_castlp_snd',0),(12139,44256,'kill_explode01',0),(12140,44257,'kill_explode02',0),(12141,44258,'kill_explode03',0),(12142,44259,'kill_explode_big',0),(12143,44260,'kill_explosion',0),(12144,44261,'kill_eye_beam',0),(12145,44262,'kill_eye_beam_red_blue',0),(12146,44263,'kill_eyes',0),(12147,44264,'kill_f',0),(12148,44265,'kill_face_combat',0),(12149,44266,'kill_face_idle',0),(12150,44267,'kill_facial_frown',0),(12151,44268,'kill_facial_smile',0),(12152,44269,'kill_fae_dance_spark_sphere',0),(12153,44270,'kill_fae_silvani_transformation',0),(12154,44271,'kill_failure01',0),(12155,44272,'kill_failure02',0),(12156,44273,'kill_fall_enter',0),(12157,44274,'kill_fall_idle',0),(12158,44275,'kill_fall_moving',0),(12159,44276,'kill_fall_sequence',0),(12160,44277,'kill_fb_froggy01_snd',0),(12161,44278,'kill_fb_froggyform_snd',0),(12162,44279,'kill_fb_ice_explode_sound',0),(12163,44280,'kill_fbb_charge_snd',0),(12164,44281,'kill_fbb_crunches_snd',0),(12165,44282,'kill_fbb_explode_snd',0),(12166,44283,'kill_fbd_charge01_snd',0),(12167,44284,'kill_fbd_impact_snd',0),(12168,44285,'kill_fbd_precharge_snd',0),(12169,44286,'kill_fd_distort02_snd',0),(12170,44287,'kill_fd_distort_end_snd',0),(12171,44288,'kill_fd_distort_low_snd',0),(12172,44289,'kill_fd_distort_snd',0),(12173,44290,'kill_feint',0),(12174,44291,'kill_ff_explode_lp_snd',0),(12175,44292,'kill_ff_lasercloud_lp_snd',0),(12176,44293,'kill_fgdt_dust_snd',0),(12177,44294,'kill_fh_cast_sparkles_snd',0),(12178,44295,'kill_fh_end_body_fall_snd',0),(12179,44296,'kill_fh_flames_snd',0),(12180,44297,'kill_fh_hammer_appear_02_snd',0),(12181,44298,'kill_fh_hammer_appear_snd',0),(12182,44299,'kill_fh_hammer_impact_snd',0),(12183,44300,'kill_fh_hammer_whoosh_snd',0),(12184,44301,'kill_fire',0),(12185,44302,'kill_fire01',0),(12186,44303,'kill_fire02',0),(12187,44304,'kill_fire_breath',0),(12188,44305,'kill_fire_loop',0),(12189,44306,'kill_fireblast',0),(12190,44307,'kill_fishing_cast',0),(12191,44308,'kill_fishing_fight',0),(12192,44309,'kill_fishing_reel_in',0),(12193,44310,'kill_fizzle',0),(12194,44311,'kill_fkd_impact_sound',0),(12195,44312,'kill_fkd_kneebreak_sound',0),(12196,44313,'kill_fl_bckgrnd_snd',0),(12197,44314,'kill_fl_lash_snd',0),(12198,44315,'kill_fl_whiphit_snd',0),(12199,44316,'kill_flames_sound',0),(12200,44317,'kill_flash_blue',0),(12201,44318,'kill_flash_green',0),(12202,44319,'kill_flash_red',0),(12203,44320,'kill_flash_yellow',0),(12204,44321,'kill_flee',0),(12205,44322,'kill_flex',0),(12206,44323,'kill_flight_path',0),(12207,44324,'kill_flingpoo',0),(12208,44325,'kill_flirt',0),(12209,44326,'kill_flustered',0),(12210,44327,'kill_fly',0),(12211,44328,'kill_fly_attack',0),(12212,44329,'kill_fly_attack_bite',0),(12213,44330,'kill_fly_attack_breath',0),(12214,44331,'kill_fly_attack_breath_arc',0),(12215,44332,'kill_fly_dive',0),(12216,44333,'kill_fly_glide',0),(12217,44334,'kill_fly_glide2',0),(12218,44335,'kill_fly_idle',0),(12219,44336,'kill_fly_in',0),(12220,44337,'kill_fly_ouch',0),(12221,44338,'kill_fly_run',0),(12222,44339,'kill_fmba_breathattack_snd',0),(12223,44340,'kill_foostep_trigger',0),(12224,44341,'kill_foot_dust_left',0),(12225,44342,'kill_foot_dust_right',0),(12226,44343,'kill_foot_shake',0),(12227,44344,'kill_footste_trigger',0),(12228,44345,'kill_footstep',0),(12229,44346,'kill_footstep_chainmail_carpet',0),(12230,44347,'kill_footstep_chainmail_dirt',0),(12231,44348,'kill_footstep_chainmail_grass',0),(12232,44349,'kill_footstep_chainmail_gravel',0),(12233,44350,'kill_footstep_chainmail_ice',0),(12234,44351,'kill_footstep_chainmail_metal',0),(12235,44352,'kill_footstep_chainmail_mud',0),(12236,44353,'kill_footstep_chainmail_sand',0),(12237,44354,'kill_footstep_chainmail_snow',0),(12238,44355,'kill_footstep_chainmail_stone',0),(12239,44356,'kill_footstep_chainmail_water',0),(12240,44357,'kill_footstep_chainmail_wood',0),(12241,44358,'kill_footstep_leather_carpet',0),(12242,44359,'kill_footstep_leather_dirt',0),(12243,44360,'kill_footstep_leather_grass',0),(12244,44361,'kill_footstep_leather_gravel',0),(12245,44362,'kill_footstep_leather_ice',0),(12246,44363,'kill_footstep_leather_metal',0),(12247,44364,'kill_footstep_leather_mud',0),(12248,44365,'kill_footstep_leather_sand',0),(12249,44366,'kill_footstep_leather_snow',0),(12250,44367,'kill_footstep_leather_stone',0),(12251,44368,'kill_footstep_leather_water',0),(12252,44369,'kill_footstep_leather_wood',0),(12253,44370,'kill_footstep_metal_carpet',0),(12254,44371,'kill_footstep_metal_dirt',0),(12255,44372,'kill_footstep_metal_grass',0),(12256,44373,'kill_footstep_metal_gravel',0),(12257,44374,'kill_footstep_metal_ice',0),(12258,44375,'kill_footstep_metal_metal',0),(12259,44376,'kill_footstep_metal_mud',0),(12260,44377,'kill_footstep_metal_sand',0),(12261,44378,'kill_footstep_metal_snow',0),(12262,44379,'kill_footstep_metal_stone',0),(12263,44380,'kill_footstep_metal_water',0),(12264,44381,'kill_footstep_metal_wood',0),(12265,44382,'kill_footstep_trigger',0),(12266,44383,'kill_forest_flare',0),(12267,44384,'kill_forestry_chopping',0),(12268,44385,'kill_four_rings',0),(12269,44386,'kill_four_rings_fail',0),(12270,44387,'kill_frog_attack_01',0),(12271,44388,'kill_frog_hit',0),(12272,44389,'kill_frog_ouch',0),(12273,44390,'kill_frog_squish_01',0),(12274,44391,'kill_frog_squish_02',0),(12275,44392,'kill_frog_squish_03',0),(12276,44393,'kill_frog_tongue_01',0),(12277,44394,'kill_frog_tongueslime_01',0),(12278,44395,'kill_frog_whoosh_01',0),(12279,44396,'kill_frustrated',0),(12280,44397,'kill_fs_cast_flame_snd',0),(12281,44398,'kill_fs_endfire_snd',0),(12282,44399,'kill_fs_firefall_snd',0),(12283,44400,'kill_fs_whoosh_snd',0),(12284,44401,'kill_fullcurtsey',0),(12285,44402,'kill_fusion_bubbly_snd',0),(12286,44403,'kill_fusion_cast_snd',0),(12287,44404,'kill_gc_boneburs_snd',0),(12288,44405,'kill_gc_castcharge_snd',0),(12289,44406,'kill_gc_result_snd',0),(12290,44407,'kill_gc_screams_snd',0),(12291,44408,'kill_gem_glow',0),(12292,44409,'kill_gemsparkle',0),(12293,44410,'kill_gemsparkle_fail1',0),(12294,44411,'kill_gemsparkle_fail2',0),(12295,44412,'kill_gemsparkle_go',0),(12296,44413,'kill_ghost_carpet',0),(12297,44414,'kill_ghost_die',0),(12298,44415,'kill_ghost_loop',0),(12299,44416,'kill_giggle',0),(12300,44417,'kill_glare',0),(12301,44418,'kill_glide',0),(12302,44419,'kill_glow',0),(12303,44420,'kill_glow_top',0),(12304,44421,'kill_go',0),(12305,44422,'kill_go_down',0),(12306,44423,'kill_green_fire',0),(12307,44424,'kill_green_smoke',0),(12308,44425,'kill_griffin_idle',0),(12309,44426,'kill_griffin_run',0),(12310,44427,'kill_griffin_walk',0),(12311,44428,'kill_group_chargeswordglint_sound',0),(12312,44429,'kill_group_cloud_sound',0),(12313,44430,'kill_group_electricend_sound',0),(12314,44431,'kill_grumble',0),(12315,44432,'kill_gutcramp',0),(12316,44433,'kill_gw_chargeup_snd',0),(12317,44434,'kill_gw_grantwish_snd',0),(12318,44435,'kill_gw_impact_sound',0),(12319,44436,'kill_happy',0),(12320,44437,'kill_harpy_fire_snd',0),(12321,44438,'kill_harpy_spin_snd',0),(12322,44439,'kill_haste_sparkles_snd',0),(12323,44440,'kill_haste_swirl_snd',0),(12324,44441,'kill_haste_swords_snd',0),(12325,44442,'kill_head_tracking_off_trigger',0),(12326,44443,'kill_hearnoevil',0),(12327,44444,'kill_heartattack',0),(12328,44445,'kill_heat_shimmer',0),(12329,44446,'kill_heavydamage_enter',0),(12330,44447,'kill_heavydamage_idle',0),(12331,44448,'kill_heckno',0),(12332,44449,'kill_heelclick',0),(12333,44450,'kill_hello',0),(12334,44451,'kill_heroic_sound',0),(12335,44452,'kill_hide',0),(12336,44453,'kill_hide_melee_projectile_trigger',0),(12337,44454,'kill_hit_02',0),(12338,44455,'kill_hit_chainmail_snd',0),(12339,44456,'kill_hit_cloth_snd',0),(12340,44457,'kill_hit_leather_snd',0),(12341,44458,'kill_hit_metal_chainmail_snd',0),(12342,44459,'kill_hit_metal_cloth_snd',0),(12343,44460,'kill_hit_metal_leather_snd',0),(12344,44461,'kill_hit_metal_metal_snd',0),(12345,44462,'kill_hit_metal_skin_snd',0),(12346,44463,'kill_hit_metal_snd',0),(12347,44464,'kill_hit_shake',0),(12348,44465,'kill_hit_skin_chainmail_snd',0),(12349,44466,'kill_hit_skin_cloth_snd',0),(12350,44467,'kill_hit_skin_leather_snd',0),(12351,44468,'kill_hit_skin_metal_snd',0),(12352,44469,'kill_hit_skin_skin_snd',0),(12353,44470,'kill_hit_skin_snd',0),(12354,44471,'kill_hit_snd',0),(12355,44472,'kill_hit_target_tigger',0),(12356,44473,'kill_hit_target_trigger',0),(12357,44474,'kill_hit_wood_chainmail_snd',0),(12358,44475,'kill_hit_wood_cloth_snd',0),(12359,44476,'kill_hit_wood_leather_snd',0),(12360,44477,'kill_hit_wood_metal_snd',0),(12361,44478,'kill_hit_wood_skin_snd',0),(12362,44479,'kill_hitonhead_sound',0),(12363,44480,'kill_horse_fall',0),(12364,44481,'kill_horse_jump',0),(12365,44482,'kill_horse_land',0),(12366,44483,'kill_horse_run',0),(12367,44484,'kill_horse_tail',0),(12368,44485,'kill_horse_walk',0),(12369,44486,'kill_howl',0),(12370,44487,'kill_hr_ghost_gallop_snd',0),(12371,44488,'kill_hr_whiney_snd',0),(12372,44489,'kill_hrb_endruneblur_sound',0),(12373,44490,'kill_hro_heal_snd',0),(12374,44491,'kill_hro_runeorbit_snd',0),(12375,44492,'kill_hungry',0),(12376,44493,'kill_ic_fragments_snd',0),(12377,44494,'kill_ic_ice_bkgrnd_sound',0),(12378,44495,'kill_ic_ice_spike_sound',0),(12379,44496,'kill_idle03',0),(12380,44497,'kill_idle04',0),(12381,44498,'kill_idle_01',0),(12382,44499,'kill_idle_bark',0),(12383,44500,'kill_idle_break',0),(12384,44501,'kill_idle_e3',0),(12385,44502,'kill_idle_pant',0),(12386,44503,'kill_idle_sniff',0),(12387,44504,'kill_idle_snort',0),(12388,44505,'kill_idle_static',0),(12389,44506,'kill_idle_step',0),(12390,44507,'kill_idle_vocal',0),(12391,44508,'kill_idletiming_a',0),(12392,44509,'kill_idletiming_b',0),(12393,44510,'kill_idletiming_c',0),(12394,44511,'kill_idletiming_d',0),(12395,44512,'kill_idletiming_e',0),(12396,44513,'kill_idletiming_g',0),(12397,44514,'kill_idletiming_h',0),(12398,44515,'kill_idletiming_i',0),(12399,44516,'kill_ignite_weapon_sh',0),(12400,44517,'kill_ilt_tap_snd',0),(12401,44518,'kill_inhale',0),(12402,44520,'kill_int_cast_lp_snd',0),(12403,44521,'kill_int_cast_sparkles_lp',0),(12404,44522,'kill_int_float_sound',0),(12405,44523,'kill_int_intglow_sound',0),(12406,44524,'kill_itch',0),(12407,44525,'kill_jump',0),(12408,44526,'kill_jump_moving',0),(12409,44527,'kill_jump_substitute',0),(12410,44528,'kill_kettle01',0),(12411,44529,'kill_kick',0),(12412,44530,'kill_kiss',0),(12413,44531,'kill_knockdown_attack',0),(12414,44532,'kill_knockdowntoknees',0),(12415,44533,'kill_knockdowntokness',0),(12416,44534,'kill_knockdwontoknees',0),(12417,44535,'kill_knockedtoback',0),(12418,44536,'kill_knockedtoback_getup',0),(12419,44537,'kill_knockedtoback_onbackidle',0),(12420,44538,'kill_knockedtoknees',0),(12421,44539,'kill_knockedtokness',0),(12422,44540,'kill_knocktoknees',0),(12423,44541,'kill_l',0),(12424,44542,'kill_la_lion_roar_02_snd',0),(12425,44543,'kill_la_lion_roar_snd',0),(12426,44544,'kill_land',0),(12427,44545,'kill_land_thud',0),(12428,44546,'kill_landing',0),(12429,44547,'kill_launch_melee_projectile_trigger',0),(12430,44548,'kill_lb2_zap_snd',0),(12431,44549,'kill_lb_cloud_sound',0),(12432,44550,'kill_lb_volts_sound',0),(12433,44551,'kill_leatherworking_failure',0),(12434,44552,'kill_leatherworking_idle',0),(12435,44553,'kill_leatherworking_success',0),(12436,44554,'kill_left_hand_fist',0),(12437,44555,'kill_left_hand_relaxed',0),(12438,44556,'kill_level_up3d_sound',0),(12439,44557,'kill_light_torch',0),(12440,44558,'kill_lightdamage_enter',0),(12441,44559,'kill_lightdamage_idle',0),(12442,44560,'kill_lightning_spheres',0),(12443,44561,'kill_listen',0),(12444,44562,'kill_long_fall',0),(12445,44563,'kill_long_fall_moving',0),(12446,44564,'kill_lookaway',0),(12447,44565,'kill_lr_castlion_snd',0),(12448,44566,'kill_lr_growl_snd',0),(12449,44567,'kill_lt_suck2_snd',0),(12450,44568,'kill_lt_suck_snd',0),(12451,44569,'kill_lucan_lightning_bolt',0),(12452,44570,'kill_lvlup_achievment_snd',0),(12453,44571,'kill_m',0),(12454,44572,'kill_mc_castend_snd',0),(12455,44573,'kill_mc_castopen_snd',0),(12456,44574,'kill_mc_manna_channel_snd',0),(12457,44575,'kill_mc_resultwhip_snd',0),(12458,44576,'kill_mcp_shield',0),(12459,44577,'kill_mediumdamage_enter',0),(12460,44578,'kill_mediumdamage_idle',0),(12461,44579,'kill_metalworking_failure',0),(12462,44580,'kill_metalworking_idle',0),(12463,44581,'kill_metalworking_success',0),(12464,44582,'kill_miss_target_tigger',0),(12465,44583,'kill_miss_target_trigger',0),(12466,44584,'kill_molten_metal',0),(12467,44585,'kill_monk_attack_recoil',0),(12468,44586,'kill_monk_attack_recoil01',0),(12469,44587,'kill_monk_attack_recoil02',0),(12470,44588,'kill_monk_attack_recoil03',0),(12471,44589,'kill_monk_backup',0),(12472,44590,'kill_monk_charge_up',0),(12473,44591,'kill_monk_defensive_buff',0),(12474,44592,'kill_monk_dodge_forehand',0),(12475,44593,'kill_monk_dodge_thrust',0),(12476,44594,'kill_monk_enter',0),(12477,44595,'kill_monk_exit',0),(12478,44596,'kill_monk_feint',0),(12479,44597,'kill_monk_idle01',0),(12480,44598,'kill_monk_kick',0),(12481,44599,'kill_monk_kick_flying',0),(12482,44600,'kill_monk_kick_spin',0),(12483,44601,'kill_monk_knockdowntoknees',0),(12484,44602,'kill_monk_knockedtoback',0),(12485,44603,'kill_monk_knockedtoback_getup',0),(12486,44604,'kill_monk_offensive_buff',0),(12487,44605,'kill_monk_ouch_backhand',0),(12488,44606,'kill_monk_ouch_down',0),(12489,44607,'kill_monk_ouch_forehand',0),(12490,44608,'kill_monk_ouch_thrust',0),(12491,44609,'kill_monk_parry_backhand',0),(12492,44610,'kill_monk_parry_down',0),(12493,44611,'kill_monk_parry_forehand',0),(12494,44612,'kill_monk_parry_thrust',0),(12495,44613,'kill_monk_strafe_left',0),(12496,44614,'kill_monk_strafe_right',0),(12497,44615,'kill_monk_super_buff',0),(12498,44616,'kill_monk_taunt_combat_art',0),(12499,44617,'kill_monk_walk',0),(12500,44618,'kill_monk_whirling_attack',0),(12501,44619,'kill_mood_afraid',0),(12502,44620,'kill_mood_angry',0),(12503,44621,'kill_mood_combat',0),(12504,44622,'kill_mood_happy',0),(12505,44623,'kill_mood_idle',0),(12506,44624,'kill_mood_sad',0),(12507,44625,'kill_mood_tired',0),(12508,44626,'kill_moon',0),(12509,44627,'kill_mount',0),(12510,44628,'kill_mr_chomp',0),(12511,44629,'kill_mr_curl',0),(12512,44630,'kill_mr_death_yell',0),(12513,44631,'kill_mr_fall',0),(12514,44632,'kill_mr_growl',0),(12515,44633,'kill_mr_land',0),(12516,44634,'kill_mr_ouch_01',0),(12517,44635,'kill_mr_run_01',0),(12518,44636,'kill_myst_caststars_snd',0),(12519,44637,'kill_myst_caststarsresult_snd',0),(12520,44638,'kill_myst_stars_snd',0),(12521,44639,'kill_nb_burn_01_snd',0),(12522,44640,'kill_nb_burst_02_snd',0),(12523,44641,'kill_nb_burst_snd',0),(12524,44642,'kill_nb_castmagic_snd',0),(12525,44643,'kill_nb_handsparks_long_snd',0),(12526,44644,'kill_nb_handsparks_louder_snd',0),(12527,44645,'kill_nb_handsparks_snd',0),(12528,44646,'kill_nbgroup_castmagic_snd',0),(12529,44647,'kill_needle01',0),(12530,44648,'kill_neener',0),(12531,44649,'kill_no',0),(12532,44650,'kill_nod',0),(12533,44651,'kill_o',0),(12534,44652,'kill_off_combat',0),(12535,44653,'kill_off_enter',0),(12536,44654,'kill_off_exit',0),(12537,44655,'kill_off_idle',0),(12538,44656,'kill_off_peace',0),(12539,44657,'kill_off_sit',0),(12540,44658,'kill_offensive_buff',0),(12541,44659,'kill_one_ring',0),(12542,44660,'kill_one_ring_fail',0),(12543,44661,'kill_oov_bubbles_snd',0),(12544,44662,'kill_oov_effect_short_snd',0),(12545,44663,'kill_oov_effect_snd',0),(12546,44664,'kill_oov_heal_snd',0),(12547,44665,'kill_open',0),(12548,44666,'kill_open_coins_and_jewels',0),(12549,44667,'kill_open_coins_copper',0),(12550,44668,'kill_open_coins_gold',0),(12551,44669,'kill_open_coins_silver',0),(12552,44670,'kill_open_glow',0),(12553,44671,'kill_opened',0),(12554,44672,'kill_opened_coins_and_jewels',0),(12555,44673,'kill_opened_coins_copper',0),(12556,44674,'kill_opened_coins_gold',0),(12557,44675,'kill_opened_coins_silver',0),(12558,44676,'kill_opened_glow',0),(12559,44677,'kill_orate',0),(12560,44678,'kill_other_idle',0),(12561,44679,'kill_ouch',0),(12562,44680,'kill_ouch+forehand',0),(12563,44681,'kill_ouch01',0),(12564,44682,'kill_ouch01_01',0),(12565,44683,'kill_ouch02',0),(12566,44684,'kill_ouch02_01',0),(12567,44685,'kill_ouch03',0),(12568,44686,'kill_ouch03_01',0),(12569,44687,'kill_ouch04',0),(12570,44688,'kill_ouch_01',0),(12571,44689,'kill_ouch_backhand',0),(12572,44690,'kill_ouch_backhand_01',0),(12573,44691,'kill_ouch_bakchand',0),(12574,44692,'kill_ouch_big',0),(12575,44693,'kill_ouch_chips',0),(12576,44694,'kill_ouch_down',0),(12577,44695,'kill_ouch_down_01',0),(12578,44696,'kill_ouch_forehand',0),(12579,44697,'kill_ouch_forehand_01',0),(12580,44698,'kill_ouch_fx',0),(12581,44699,'kill_ouch_fx2',0),(12582,44700,'kill_ouch_headshake01',0),(12583,44701,'kill_ouch_medium',0),(12584,44702,'kill_ouch_medium_big',0),(12585,44703,'kill_ouch_oil_drip',0),(12586,44704,'kill_ouch_parts',0),(12587,44705,'kill_ouch_roar01',0),(12588,44706,'kill_ouch_scream',0),(12589,44707,'kill_ouch_small',0),(12590,44708,'kill_ouch_sound',0),(12591,44709,'kill_ouch_spurt_chest',0),(12592,44710,'kill_ouch_spurt_pelvis',0),(12593,44711,'kill_ouch_tail',0),(12594,44712,'kill_ouch_tail02',0),(12595,44713,'kill_ouch_thrust',0),(12596,44714,'kill_ouch_thrust_01',0),(12597,44715,'kill_ouchdown',0),(12598,44716,'kill_ouchtiming_a',0),(12599,44717,'kill_ouchtiming_b',0),(12600,44718,'kill_ouchtiming_c',0),(12601,44719,'kill_oven_door',0),(12602,44720,'kill_overhere',0),(12603,44721,'kill_parry',0),(12604,44722,'kill_parry01',0),(12605,44723,'kill_parry02',0),(12606,44724,'kill_parry03',0),(12607,44725,'kill_parry_metal_metal_snd',0),(12608,44726,'kill_parry_metal_skin_snd',0),(12609,44727,'kill_parry_metal_wood_snd',0),(12610,44728,'kill_parry_skin_metal_snd',0),(12611,44729,'kill_parry_skin_skin_snd',0),(12612,44730,'kill_parry_skin_wood_snd',0),(12613,44731,'kill_parry_snd',0),(12614,44732,'kill_parry_target_tigger',0),(12615,44733,'kill_parry_target_trigger',0),(12616,44734,'kill_parry_wood_metal_snd',0),(12617,44735,'kill_parry_wood_skin_snd',0),(12618,44736,'kill_parry_wood_wood_snd',0),(12619,44737,'kill_particle_mood_combat',0),(12620,44738,'kill_particle_mood_dead',0),(12621,44739,'kill_particle_mood_peace',0),(12622,44740,'kill_pbae_divine_snd',0),(12623,44741,'kill_peace_combat',0),(12624,44742,'kill_peace_fx',0),(12625,44743,'kill_peace_off',0),(12626,44744,'kill_peer',0),(12627,44745,'kill_pen01',0),(12628,44746,'kill_pf_endsplash_snd',0),(12629,44747,'kill_pf_pwrcast_snd',0),(12630,44748,'kill_pf_pwrrslt_snd',0),(12631,44749,'kill_pike_attack03',0),(12632,44750,'kill_pike_attack04',0),(12633,44751,'kill_pike_attack_recoil',0),(12634,44752,'kill_pike_attack_recoil01',0),(12635,44753,'kill_pike_attack_recoil02',0),(12636,44754,'kill_pike_attack_recoil03',0),(12637,44755,'kill_pike_backup',0),(12638,44756,'kill_pike_charge_up',0),(12639,44757,'kill_pike_death_blow',0),(12640,44758,'kill_pike_defensive_buff',0),(12641,44759,'kill_pike_dodge_backhand',0),(12642,44760,'kill_pike_dodge_down',0),(12643,44761,'kill_pike_dodge_forehand',0),(12644,44762,'kill_pike_dodge_thrust',0),(12645,44763,'kill_pike_enter',0),(12646,44764,'kill_pike_exit',0),(12647,44765,'kill_pike_feint',0),(12648,44766,'kill_pike_idle01',0),(12649,44767,'kill_pike_knockdowntoknees',0),(12650,44768,'kill_pike_knockedtoback',0),(12651,44769,'kill_pike_knockedtoback_getup',0),(12652,44770,'kill_pike_offensive_buff',0),(12653,44771,'kill_pike_ouch01_backhand',0),(12654,44772,'kill_pike_ouch02_down',0),(12655,44773,'kill_pike_ouch_backhand',0),(12656,44774,'kill_pike_ouch_down',0),(12657,44775,'kill_pike_ouch_forehand',0),(12658,44776,'kill_pike_ouch_thrust',0),(12659,44777,'kill_pike_parry_backhand',0),(12660,44778,'kill_pike_parry_down',0),(12661,44779,'kill_pike_parry_forehand',0),(12662,44780,'kill_pike_parry_thrust',0),(12663,44781,'kill_pike_strafe_left',0),(12664,44782,'kill_pike_strafe_right',0),(12665,44783,'kill_pike_super_buff',0),(12666,44784,'kill_pike_taunt',0),(12667,44785,'kill_pike_walk',0),(12668,44786,'kill_pl_lightning_01_snd',0),(12669,44787,'kill_pl_lightning_02_snd',0),(12670,44788,'kill_pl_lightning_03_snd',0),(12671,44789,'kill_pl_warp_01_snd',0),(12672,44790,'kill_planer',0),(12673,44791,'kill_plummet',0),(12674,44792,'kill_pn_castflute_sound',0),(12675,44793,'kill_pn_resultflute_sound',0),(12676,44794,'kill_pof_batdrone_snd',0),(12677,44795,'kill_pof_casttone_snd',0),(12678,44796,'kill_point',0),(12679,44797,'kill_point_right',0),(12680,44798,'kill_ponder',0),(12681,44799,'kill_pout',0),(12682,44800,'kill_pp_casthi_snd',0),(12683,44801,'kill_pp_stab_snd',0),(12684,44802,'kill_ps_caststream_snd',0),(12685,44803,'kill_ps_resultfx_snd',0),(12686,44804,'kill_pugilist_attack01',0),(12687,44805,'kill_pugilist_attack03',0),(12688,44806,'kill_pugilist_attack_recoil',0),(12689,44807,'kill_pugilist_attack_recoil01',0),(12690,44808,'kill_pugilist_attack_recoil02',0),(12691,44809,'kill_pugilist_attack_recoil03',0),(12692,44810,'kill_pugilist_backup',0),(12693,44811,'kill_pugilist_charge_up',0),(12694,44812,'kill_pugilist_defensive_buff',0),(12695,44813,'kill_pugilist_dodge',0),(12696,44814,'kill_pugilist_dodge01',0),(12697,44815,'kill_pugilist_dodge02',0),(12698,44816,'kill_pugilist_dodge_backhand',0),(12699,44817,'kill_pugilist_dodge_down',0),(12700,44818,'kill_pugilist_dodge_forehand',0),(12701,44819,'kill_pugilist_dodge_thrust',0),(12702,44820,'kill_pugilist_enter',0),(12703,44821,'kill_pugilist_exit',0),(12704,44822,'kill_pugilist_feint',0),(12705,44823,'kill_pugilist_knockdowntoknees',0),(12706,44824,'kill_pugilist_knockedtoback',0),(12707,44825,'kill_pugilist_knockedtoback_getup',0),(12708,44826,'kill_pugilist_offensive_buff',0),(12709,44827,'kill_pugilist_ouch',0),(12710,44828,'kill_pugilist_ouch01',0),(12711,44829,'kill_pugilist_ouch_backhand',0),(12712,44830,'kill_pugilist_ouch_down',0),(12713,44831,'kill_pugilist_ouch_forehand',0),(12714,44832,'kill_pugilist_ouch_thrust',0),(12715,44833,'kill_pugilist_parry',0),(12716,44834,'kill_pugilist_parry_backhand',0),(12717,44835,'kill_pugilist_parry_down',0),(12718,44836,'kill_pugilist_parry_forehand',0),(12719,44837,'kill_pugilist_parry_thrust',0),(12720,44838,'kill_pugilist_recoil',0),(12721,44839,'kill_pugilist_strafe_left',0),(12722,44840,'kill_pugilist_strafe_right',0),(12723,44841,'kill_pugilist_super_buff',0),(12724,44842,'kill_pugilist_taunt',0),(12725,44843,'kill_pugilist_walk',0),(12726,44844,'kill_pv_pet_victory_snd',0),(12727,44845,'kill_quality_down',0),(12728,44846,'kill_quality_up',0),(12729,44847,'kill_quest_complete',0),(12730,44848,'kill_rain',0),(12731,44849,'kill_raisehand',0),(12732,44850,'kill_rays',0),(12733,44851,'kill_rb_p2pcast_snd',0),(12734,44852,'kill_rb_p2pstream_snd',0),(12735,44853,'kill_rc_leaves_01_snd',0),(12736,44854,'kill_rc_roots_grow_01_snd',0),(12737,44855,'kill_rct_endblast_sound',0),(12738,44856,'kill_rct_endtones_sound',0),(12739,44857,'kill_rebirth_sound_01',0),(12740,44858,'kill_red_nose',0),(12741,44859,'kill_resilt_end_sound',0),(12742,44860,'kill_rest',0),(12743,44861,'kill_result_bladebarrier',0),(12744,44862,'kill_result_camera_shake2_snd',0),(12745,44863,'kill_result_camera_shake_snd',0),(12746,44864,'kill_result_chain_lightning_p2p',0),(12747,44865,'kill_result_charge1_sh',0),(12748,44866,'kill_result_charge_sh',0),(12749,44867,'kill_result_copter_flamethrower',0),(12750,44868,'kill_result_dawn_rising',0),(12751,44869,'kill_result_dragon_fire_spiral',0),(12752,44870,'kill_result_dragon_shield_fire',0),(12753,44871,'kill_result_dragon_shield_lightning',0),(12754,44872,'kill_result_dragon_shield_lightning_02a',0),(12755,44873,'kill_result_dragon_shield_lightning_02b',0),(12756,44874,'kill_result_dragon_shield_lightning_02c',0),(12757,44875,'kill_result_dust_blast_heavy',0),(12758,44876,'kill_result_feather_explosion',0),(12759,44877,'kill_result_flash_dragon',0),(12760,44878,'kill_result_fog',0),(12761,44879,'kill_result_fog_low',0),(12762,44880,'kill_result_fog_low_small',0),(12763,44881,'kill_result_fog_poison',0),(12764,44882,'kill_result_fog_poison_4x10',0),(12765,44883,'kill_result_fog_poison_low',0),(12766,44884,'kill_result_fog_poison_low_small',0),(12767,44885,'kill_result_fog_poison_small',0),(12768,44886,'kill_result_fog_small',0),(12769,44887,'kill_result_forced_shader_dark_dragon',0),(12770,44888,'kill_result_forced_shader_electric_dragon',0),(12771,44889,'kill_result_forced_shader_fire_dragon',0),(12772,44890,'kill_result_forced_shader_ice_dragon',0),(12773,44891,'kill_result_froglok_bauble',0),(12774,44892,'kill_result_glint2_sh',0),(12775,44893,'kill_result_knighthood_bauble',0),(12776,44894,'kill_result_lightning_bolt1_snd',0),(12777,44895,'kill_result_mend_synth_sound',0),(12778,44896,'kill_result_protection_of_twilight',0),(12779,44897,'kill_result_recharging_station_effect',0),(12780,44898,'kill_result_rune_awakened',0),(12781,44899,'kill_result_sparkles_clinging_dragon',0),(12782,44900,'kill_result_sparkles_clinging_soft_dragon',0),(12783,44901,'kill_result_sun_sphere',0),(12784,44902,'kill_result_twinkle_01',0),(12785,44903,'kill_result_weakness_disk_blue',0),(12786,44904,'kill_result_weakness_disk_green',0),(12787,44905,'kill_result_weakness_disk_purple',0),(12788,44906,'kill_result_weakness_disk_red',0),(12789,44907,'kill_result_weakness_disk_yellow',0),(12790,44908,'kill_result_windrazor',0),(12791,44909,'kill_result_wood_chips',0),(12792,44910,'kill_resurrect',0),(12793,44911,'kill_right_hand_fist',0),(12794,44912,'kill_right_hand_relaxed',0),(12795,44913,'kill_righthand_impact',0),(12796,44914,'kill_ring_glints',0),(12797,44915,'kill_ring_glints2',0),(12798,44916,'kill_ring_glints_idle',0),(12799,44917,'kill_rofl',0),(12800,44918,'kill_royalwave',0),(12801,44919,'kill_rt_drone_snd',0),(12802,44920,'kill_rt_tune_snd',0),(12803,44921,'kill_rude',0),(12804,44923,'kill_runes',0),(12805,44924,'kill_sa_bones_sound',0),(12806,44925,'kill_sa_flash01_snd',0),(12807,44926,'kill_sa_flash02_snd',0),(12808,44927,'kill_sa_flash03_snd',0),(12809,44928,'kill_sa_rattle_01_snd',0),(12810,44929,'kill_sa_skelattack_snd',0),(12811,44930,'kill_sa_skeldance_snd',0),(12812,44931,'kill_sa_snakespawn_snd',0),(12813,44932,'kill_sa_spiritappear_snd',0),(12814,44933,'kill_sa_strike_snd',0),(12815,44934,'kill_sad',0),(12816,44935,'kill_salute',0),(12817,44936,'kill_salute_freeport',0),(12818,44937,'kill_sanc_castlp_snd',0),(12819,44938,'kill_sanc_pulse_01_sound',0),(12820,44939,'kill_sanc_pulse_02_sound',0),(12821,44940,'kill_sarcasm',0),(12822,44941,'kill_saw01',0),(12823,44942,'kill_saw02',0),(12824,44943,'kill_saw_sparks_front',0),(12825,44944,'kill_saw_sparks_inside',0),(12826,44945,'kill_saw_sparks_outside',0),(12827,44946,'kill_sb_skelcast_sound',0),(12828,44947,'kill_sb_skeleton_sound',0),(12829,44948,'kill_sc_impact_snd',0),(12830,44949,'kill_sc_swipe_snd',0),(12831,44950,'kill_scheme',0),(12832,44951,'kill_scims_scimitar_snd',0),(12833,44952,'kill_scims_swordswipe_snd',0),(12834,44953,'kill_scims_whoosh_snd',0),(12835,44954,'kill_scissors01',0),(12836,44955,'kill_scold',0),(12837,44956,'kill_scorp_crunches_snd',0),(12838,44957,'kill_scorpa_scorpform_snd',0),(12839,44958,'kill_scorpa_scream01_snd',0),(12840,44959,'kill_scratch',0),(12841,44960,'kill_scream',0),(12842,44961,'kill_scribing_idle',0),(12843,44962,'kill_scruntch',0),(12844,44963,'kill_sd_drumming_lp_snd',0),(12845,44964,'kill_sd_soulcast_sound',0),(12846,44965,'kill_sd_soulsuck_sound',0),(12847,44967,'kill_sd_spiritflash_snd',0),(12848,44968,'kill_sd_spiritflashsoft_snd',0),(12849,44969,'kill_section01',0),(12850,44970,'kill_section02',0),(12851,44971,'kill_section03',0),(12852,44972,'kill_seenoevil',0),(12853,44973,'kill_sf_bladering_snd',0),(12854,44974,'kill_sf_flute_lp_snd',0),(12855,44975,'kill_sgwp_bark_snd',0),(12856,44976,'kill_shaft01',0),(12857,44977,'kill_shaft02',0),(12858,44978,'kill_shake',0),(12859,44979,'kill_shake1',0),(12860,44980,'kill_shake2',0),(12861,44981,'kill_shake3',0),(12862,44982,'kill_shakefist',0),(12863,44983,'kill_shakeit',0),(12864,44984,'kill_shame',0),(12865,44985,'kill_shark_attack01',0),(12866,44986,'kill_shark_bite01',0),(12867,44987,'kill_shark_bite02',0),(12868,44988,'kill_shark_cry',0),(12869,44989,'kill_shark_die',0),(12870,44990,'kill_shark_ouch',0),(12871,44991,'kill_shark_runtail',0),(12872,44992,'kill_shark_runtail02',0),(12873,44993,'kill_shark_tail',0),(12874,44994,'kill_sheathe_metal_weapon_snd',0),(12875,44995,'kill_sheathe_weapon_snd',0),(12876,44996,'kill_sheathe_weapon_trigger',0),(12877,44997,'kill_shield_block_backhand',0),(12878,44998,'kill_shield_block_down',0),(12879,44999,'kill_shield_block_forehand',0),(12880,45000,'kill_shield_block_thrust',0),(12881,45001,'kill_shield_shove',0),(12882,45002,'kill_shield_sound',0),(12883,45003,'kill_shimmy',0),(12884,45004,'kill_shiver',0),(12885,45005,'kill_show_bridge',0),(12886,45006,'kill_show_melee_projectile_trigger',0),(12887,45007,'kill_shrink_sound',0),(12888,45008,'kill_shrug',0),(12889,45009,'kill_shuttle01',0),(12890,45010,'kill_sick',0),(12891,45011,'kill_side_smoke01',0),(12892,45012,'kill_sig_bursting_snd',0),(12893,45013,'kill_sig_rattler_snd',0),(12894,45014,'kill_sigh',0),(12895,45015,'kill_sit_combat',0),(12896,45016,'kill_sit_idle01',0),(12897,45017,'kill_sit_idle02',0),(12898,45018,'kill_sit_off',0),(12899,45019,'kill_sit_peace',0),(12900,45020,'kill_sit_tail',0),(12901,45021,'kill_sit_tail_cloak',0),(12902,45022,'kill_sl_lute_lp_snd',0),(12903,45023,'kill_slt_castfire_snd',0),(12904,45024,'kill_slt_resultvortex_snd',0),(12905,45025,'kill_slt_splode_snd',0),(12906,45026,'kill_slugattack_01',0),(12907,45027,'kill_slugdie_hit_01',0),(12908,45028,'kill_slugdie_hit_02',0),(12909,45029,'kill_slugdie_hit_03',0),(12910,45030,'kill_slugpulse_01',0),(12911,45031,'kill_slugpulse_02',0),(12912,45032,'kill_slugpulse_03',0),(12913,45033,'kill_slugpulse_04',0),(12914,45034,'kill_slugpulser_01',0),(12915,45035,'kill_slugrun_01',0),(12916,45036,'kill_slugrun_02',0),(12917,45037,'kill_slugrunpulse_01',0),(12918,45038,'kill_slugrunpulse_02',0),(12919,45039,'kill_slugsplat_01',0),(12920,45040,'kill_slugsplat_02',0),(12921,45041,'kill_slugsway_01',0),(12922,45042,'kill_slugsway_02',0),(12923,45043,'kill_slugtongue',0),(12924,45044,'kill_slugtongueimpact_01',0),(12925,45045,'kill_slugwalk_01',0),(12926,45046,'kill_slugwalk_02',0),(12927,45047,'kill_slugwalkpulse_01',0),(12928,45048,'kill_slugwalkpulse_02',0),(12929,45049,'kill_slugyell_01',0),(12930,45050,'kill_small_saw',0),(12931,45051,'kill_smash',0),(12932,45052,'kill_smashed',0),(12933,45053,'kill_smile',0),(12934,45054,'kill_smirk',0),(12935,45055,'kill_smite_cast_lp_snd',0),(12936,45056,'kill_smoke',0),(12937,45057,'kill_smoke_breath',0),(12938,45058,'kill_smoke_dark_chimney',0),(12939,45059,'kill_smoke_dark_coals',0),(12940,45060,'kill_smoke_dark_ground',0),(12941,45061,'kill_smoke_dark_up',0),(12942,45062,'kill_smoke_flash',0),(12943,45063,'kill_smoke_ring',0),(12944,45064,'kill_smoke_sparks',0),(12945,45065,'kill_snd_boom',0),(12946,45066,'kill_snd_confrontfear_fade',0),(12947,45067,'kill_snd_confrontfear_skull',0),(12948,45068,'kill_snd_fall_damage',0),(12949,45069,'kill_snd_fire_whoosh',0),(12950,45070,'kill_snd_fireworks_boom',0),(12951,45071,'kill_snd_frontload_acid',0),(12952,45072,'kill_snd_keg_appear',0),(12953,45073,'kill_snd_keg_gulp',0),(12954,45074,'kill_snd_keg_pour',0),(12955,45075,'kill_snd_keg_whoosh',0),(12956,45076,'kill_snd_keg_yum',0),(12957,45077,'kill_snd_lifeburn_castabsorb',0),(12958,45078,'kill_snd_lifeburn_castbase',0),(12959,45079,'kill_snd_lifeburn_resultblast',0),(12960,45080,'kill_snd_mayong_boen_blanket',0),(12961,45081,'kill_snd_mayong_boen_result',0),(12962,45082,'kill_snd_pumpkin_flaming',0),(12963,45083,'kill_snd_slide_cast',0),(12964,45084,'kill_snd_slide_result',0),(12965,45085,'kill_snd_snowball_impact',0),(12966,45086,'kill_snd_spirit_elephant_vocal',0),(12967,45087,'kill_snd_teleport_druidring_flash',0),(12968,45088,'kill_snd_teleport_druidring_loop',0),(12969,45089,'kill_snd_wuoshi_choking_vines',0),(12970,45090,'kill_snd_wuoshi_tree_enter',0),(12971,45091,'kill_snd_wuoshi_tree_exit',0),(12972,45092,'kill_snd_wuoshi_tree_loop',0),(12973,45093,'kill_sneer',0),(12974,45094,'kill_sneeze',0),(12975,45095,'kill_sneeze_smoke',0),(12976,45096,'kill_snicker',0),(12977,45097,'kill_sniff',0),(12978,45098,'kill_snort',0),(12979,45099,'kill_soaf_burn_sound',0),(12980,45100,'kill_soaf_castcharge02_sound',0),(12981,45101,'kill_soaf_castcharge_sound',0),(12982,45102,'kill_soaf_flamearrow_sound',0),(12983,45103,'kill_soc_clayskinfall_lp_sound',0),(12984,45104,'kill_soc_clayskinform_sound',0),(12985,45105,'kill_sod_flameup_sound',0),(12986,45106,'kill_sod_whoosh01_sound',0),(12987,45107,'kill_som_cast_lp_snd',0),(12988,45108,'kill_sotb_batsqueak2_sound',0),(12989,45109,'kill_sotb_batsqueak_sound',0),(12990,45110,'kill_sound_angry',0),(12991,45111,'kill_sound_angry01',0),(12992,45112,'kill_sound_angry02',0),(12993,45113,'kill_sound_anvilhit',0),(12994,45114,'kill_sound_aoeflame',0),(12995,45115,'kill_sound_artifact_bury',0),(12996,45116,'kill_sound_artifact_emerge',0),(12997,45117,'kill_sound_atkhit',0),(12998,45118,'kill_sound_atkland',0),(12999,45119,'kill_sound_atkslide',0),(13000,45120,'kill_sound_atkvocal',0),(13001,45121,'kill_sound_attachwhirl',0),(13002,45122,'kill_sound_attack',0),(13003,45123,'kill_sound_attack01',0),(13004,45124,'kill_sound_attack02',0),(13005,45125,'kill_sound_attack1_vocal',0),(13006,45126,'kill_sound_attack2_vocal',0),(13007,45127,'kill_sound_attack2rock',0),(13008,45128,'kill_sound_attack2slam',0),(13009,45129,'kill_sound_attack_hit',0),(13010,45130,'kill_sound_attacka',0),(13011,45131,'kill_sound_attackarm',0),(13012,45132,'kill_sound_attackb',0),(13013,45133,'kill_sound_attackback',0),(13014,45134,'kill_sound_attackbase',0),(13015,45135,'kill_sound_attackbend',0),(13016,45136,'kill_sound_attackbite',0),(13017,45137,'kill_sound_attackbitein',0),(13018,45138,'kill_sound_attackbiterip',0),(13019,45139,'kill_sound_attackblade',0),(13020,45140,'kill_sound_attackbreath',0),(13021,45141,'kill_sound_attackbreath01',0),(13022,45142,'kill_sound_attackbreath02',0),(13023,45143,'kill_sound_attackbreath02_inhale',0),(13024,45144,'kill_sound_attackbreath1',0),(13025,45145,'kill_sound_attackbreath2',0),(13026,45146,'kill_sound_attackbreath_long',0),(13027,45147,'kill_sound_attackbreath_short',0),(13028,45148,'kill_sound_attackbreathe',0),(13029,45149,'kill_sound_attackbreathefire',0),(13030,45150,'kill_sound_attackbreathfire',0),(13031,45151,'kill_sound_attackbreathfire_long',0),(13032,45152,'kill_sound_attackbreathfire_short',0),(13033,45153,'kill_sound_attackcast',0),(13034,45154,'kill_sound_attackchain',0),(13035,45155,'kill_sound_attackchime',0),(13036,45156,'kill_sound_attackchomp',0),(13037,45157,'kill_sound_attackclaw',0),(13038,45158,'kill_sound_attackclaw_vocal',0),(13039,45159,'kill_sound_attackcreak',0),(13040,45160,'kill_sound_attackcrunch01',0),(13041,45161,'kill_sound_attackcrunch02',0),(13042,45162,'kill_sound_attacke3_vocal',0),(13043,45163,'kill_sound_attackfire',0),(13044,45164,'kill_sound_attackfistwater',0),(13045,45165,'kill_sound_attackflame',0),(13046,45166,'kill_sound_attackflap',0),(13047,45167,'kill_sound_attackflutter',0),(13048,45168,'kill_sound_attackfoot',0),(13049,45169,'kill_sound_attackgear',0),(13050,45170,'kill_sound_attackgrowl',0),(13051,45171,'kill_sound_attackheadram_swoosh',0),(13052,45172,'kill_sound_attackhit',0),(13053,45173,'kill_sound_attackinhale',0),(13054,45174,'kill_sound_attackjaw',0),(13055,45175,'kill_sound_attackkick',0),(13056,45176,'kill_sound_attackleaves',0),(13057,45177,'kill_sound_attackliddown',0),(13058,45178,'kill_sound_attacklidup',0),(13059,45179,'kill_sound_attacklong',0),(13060,45180,'kill_sound_attackmetal',0),(13061,45181,'kill_sound_attackpage',0),(13062,45182,'kill_sound_attackram',0),(13063,45183,'kill_sound_attackrock',0),(13064,45184,'kill_sound_attackrockinhale',0),(13065,45185,'kill_sound_attackrun',0),(13066,45186,'kill_sound_attacksaw',0),(13067,45187,'kill_sound_attacksbreathin',0),(13068,45188,'kill_sound_attackscream',0),(13069,45189,'kill_sound_attackshort',0),(13070,45190,'kill_sound_attackslam',0),(13071,45191,'kill_sound_attacksnap',0),(13072,45192,'kill_sound_attacksnort',0),(13073,45193,'kill_sound_attackspecial',0),(13074,45194,'kill_sound_attacksquish',0),(13075,45195,'kill_sound_attackstab',0),(13076,45196,'kill_sound_attacksting',0),(13077,45197,'kill_sound_attackstomp',0),(13078,45198,'kill_sound_attackswing',0),(13079,45199,'kill_sound_attackswoosh',0),(13080,45200,'kill_sound_attackswordwater01',0),(13081,45201,'kill_sound_attackswordwater02',0),(13082,45202,'kill_sound_attacktail',0),(13083,45203,'kill_sound_attacktailvocal',0),(13084,45204,'kill_sound_attacktailwhip',0),(13085,45205,'kill_sound_attacktongue',0),(13086,45206,'kill_sound_attackvocal',0),(13087,45207,'kill_sound_attackvocal01',0),(13088,45208,'kill_sound_attackvocal02',0),(13089,45209,'kill_sound_attackvocal2',0),(13090,45210,'kill_sound_attackvocal_long',0),(13091,45211,'kill_sound_attackwater',0),(13092,45212,'kill_sound_attackwhip',0),(13093,45213,'kill_sound_attackwhirl',0),(13094,45214,'kill_sound_attackwhirlblade',0),(13095,45215,'kill_sound_attackwhoosh',0),(13096,45216,'kill_sound_attackwild',0),(13097,45217,'kill_sound_attackwind',0),(13098,45218,'kill_sound_attackwindflap',0),(13099,45219,'kill_sound_attackwindup',0),(13100,45220,'kill_sound_attackwing',0),(13101,45221,'kill_sound_attackwing_land',0),(13102,45222,'kill_sound_attackwingbreath',0),(13103,45223,'kill_sound_attackwingflap',0),(13104,45224,'kill_sound_attackyell',0),(13105,45225,'kill_sound_battlecry',0),(13106,45226,'kill_sound_battlecry01',0),(13107,45227,'kill_sound_beg',0),(13108,45228,'kill_sound_bell',0),(13109,45229,'kill_sound_bite',0),(13110,45230,'kill_sound_bite_rip',0),(13111,45231,'kill_sound_bitetear',0),(13112,45232,'kill_sound_bitevocal',0),(13113,45233,'kill_sound_blech',0),(13114,45234,'kill_sound_blink',0),(13115,45235,'kill_sound_boggle',0),(13116,45236,'kill_sound_boltdamage',0),(13117,45237,'kill_sound_bonehit',0),(13118,45238,'kill_sound_boom',0),(13119,45239,'kill_sound_bowpull',0),(13120,45240,'kill_sound_bowrelease',0),(13121,45241,'kill_sound_breath',0),(13122,45242,'kill_sound_breath_a',0),(13123,45243,'kill_sound_breath_b',0),(13124,45244,'kill_sound_breathfire',0),(13125,45245,'kill_sound_breathinhale',0),(13126,45246,'kill_sound_breathvocal',0),(13127,45247,'kill_sound_bridge',0),(13128,45248,'kill_sound_buff',0),(13129,45249,'kill_sound_buffdefensive',0),(13130,45250,'kill_sound_buffinhale',0),(13131,45251,'kill_sound_buffoffensive',0),(13132,45252,'kill_sound_buffspin001',0),(13133,45253,'kill_sound_burp',0),(13134,45254,'kill_sound_casgrowl',0),(13135,45255,'kill_sound_cast',0),(13136,45256,'kill_sound_cast_shortbreath_open',0),(13137,45257,'kill_sound_castend',0),(13138,45258,'kill_sound_castgears',0),(13139,45259,'kill_sound_castgrowl',0),(13140,45260,'kill_sound_casthowl',0),(13141,45261,'kill_sound_castinhalegears',0),(13142,45262,'kill_sound_castlong_breath',0),(13143,45263,'kill_sound_castlong_inhale',0),(13144,45264,'kill_sound_castlong_open',0),(13145,45265,'kill_sound_castroar',0),(13146,45266,'kill_sound_castshort_breath',0),(13147,45267,'kill_sound_caststart',0),(13148,45268,'kill_sound_castvocal',0),(13149,45269,'kill_sound_chesthit',0),(13150,45270,'kill_sound_chesthitdouble',0),(13151,45271,'kill_sound_chew',0),(13152,45272,'kill_sound_clap',0),(13153,45273,'kill_sound_claw',0),(13154,45274,'kill_sound_clawhit',0),(13155,45275,'kill_sound_clawwalk',0),(13156,45276,'kill_sound_clop',0),(13157,45277,'kill_sound_clop_left',0),(13158,45278,'kill_sound_clop_right',0),(13159,45279,'kill_sound_combatart',0),(13160,45280,'kill_sound_combatbreath',0),(13161,45281,'kill_sound_combatbreathe',0),(13162,45282,'kill_sound_combatchew',0),(13163,45283,'kill_sound_combatcrunch',0),(13164,45284,'kill_sound_combatenter',0),(13165,45285,'kill_sound_combatenter001',0),(13166,45286,'kill_sound_combatenter002',0),(13167,45287,'kill_sound_combatentergrowl',0),(13168,45288,'kill_sound_combatenterrock01',0),(13169,45289,'kill_sound_combatenterrock02',0),(13170,45290,'kill_sound_combatenterrock03',0),(13171,45291,'kill_sound_combatentervocal01',0),(13172,45292,'kill_sound_combatentervocal02',0),(13173,45293,'kill_sound_combatenterwing',0),(13174,45294,'kill_sound_combatenterwingfire',0),(13175,45295,'kill_sound_combatexit',0),(13176,45296,'kill_sound_combatflap',0),(13177,45297,'kill_sound_combatflapup',0),(13178,45298,'kill_sound_combatgrowl',0),(13179,45299,'kill_sound_combatidle',0),(13180,45300,'kill_sound_combatpage',0),(13181,45301,'kill_sound_combatpaw',0),(13182,45302,'kill_sound_combatsnort',0),(13183,45303,'kill_sound_combatwing',0),(13184,45304,'kill_sound_creak',0),(13185,45305,'kill_sound_crunch',0),(13186,45306,'kill_sound_curl',0),(13187,45307,'kill_sound_cutthroat',0),(13188,45308,'kill_sound_damage',0),(13189,45309,'kill_sound_damage02',0),(13190,45310,'kill_sound_damage03',0),(13191,45311,'kill_sound_damageblade',0),(13192,45312,'kill_sound_damagebolts',0),(13193,45313,'kill_sound_damagebone',0),(13194,45314,'kill_sound_damagecrunch',0),(13195,45315,'kill_sound_damageflutter',0),(13196,45316,'kill_sound_damagehit',0),(13197,45317,'kill_sound_damagerock',0),(13198,45318,'kill_sound_damageshell',0),(13199,45319,'kill_sound_damagetwang',0),(13200,45320,'kill_sound_damagevocal',0),(13201,45321,'kill_sound_dead',0),(13202,45322,'kill_sound_dead01',0),(13203,45323,'kill_sound_dead02',0),(13204,45324,'kill_sound_dead03',0),(13205,45325,'kill_sound_dead_enter',0),(13206,45326,'kill_sound_deadball',0),(13207,45327,'kill_sound_deadballfall',0),(13208,45328,'kill_sound_deadbell',0),(13209,45329,'kill_sound_deadblade',0),(13210,45330,'kill_sound_deadboom',0),(13211,45331,'kill_sound_deadbreathe',0),(13212,45332,'kill_sound_deadbubble',0),(13213,45333,'kill_sound_deadbuzz01',0),(13214,45334,'kill_sound_deadbuzz02',0),(13215,45335,'kill_sound_deadbuzz03',0),(13216,45336,'kill_sound_deadbuzz04',0),(13217,45337,'kill_sound_deadclose',0),(13218,45338,'kill_sound_deadcreak',0),(13219,45339,'kill_sound_deadcrunch',0),(13220,45340,'kill_sound_deadcrunch01',0),(13221,45341,'kill_sound_deadcrunch02',0),(13222,45342,'kill_sound_deadcrunch1',0),(13223,45343,'kill_sound_deadcrunch2',0),(13224,45344,'kill_sound_deadcry',0),(13225,45345,'kill_sound_deadcurl',0),(13226,45346,'kill_sound_deadfall',0),(13227,45347,'kill_sound_deadfall001',0),(13228,45348,'kill_sound_deadfall002',0),(13229,45349,'kill_sound_deadfall01',0),(13230,45350,'kill_sound_deadfall02',0),(13231,45351,'kill_sound_deadfall03',0),(13232,45352,'kill_sound_deadfall1',0),(13233,45353,'kill_sound_deadfall2',0),(13234,45354,'kill_sound_deadfire',0),(13235,45355,'kill_sound_deadflame',0),(13236,45356,'kill_sound_deadflap',0),(13237,45357,'kill_sound_deadgear',0),(13238,45358,'kill_sound_deadglob',0),(13239,45359,'kill_sound_deadglub',0),(13240,45360,'kill_sound_deadgroan',0),(13241,45361,'kill_sound_deadgrowl',0),(13242,45362,'kill_sound_deadhead',0),(13243,45363,'kill_sound_deadhit',0),(13244,45364,'kill_sound_deadhit1',0),(13245,45365,'kill_sound_deadhit2',0),(13246,45366,'kill_sound_deadhit3',0),(13247,45367,'kill_sound_deadknee',0),(13248,45368,'kill_sound_deadliddown',0),(13249,45369,'kill_sound_deadlidup',0),(13250,45370,'kill_sound_deadmist',0),(13251,45371,'kill_sound_deadmotor',0),(13252,45372,'kill_sound_deadpage',0),(13253,45373,'kill_sound_deadprevocal',0),(13254,45374,'kill_sound_deadrock',0),(13255,45375,'kill_sound_deadrockfall',0),(13256,45376,'kill_sound_deadscratch',0),(13257,45377,'kill_sound_deadscream',0),(13258,45378,'kill_sound_deadscream01',0),(13259,45379,'kill_sound_deadscream02',0),(13260,45380,'kill_sound_deadslam',0),(13261,45381,'kill_sound_deadslither',0),(13262,45382,'kill_sound_deadsquish',0),(13263,45383,'kill_sound_deadsway',0),(13264,45384,'kill_sound_deadtail',0),(13265,45385,'kill_sound_deadthrash01',0),(13266,45386,'kill_sound_deadthrash02',0),(13267,45387,'kill_sound_deadtongue',0),(13268,45388,'kill_sound_deadvanish',0),(13269,45389,'kill_sound_deadvocal',0),(13270,45390,'kill_sound_deadvocal01',0),(13271,45391,'kill_sound_deadvocal02',0),(13272,45392,'kill_sound_deadvocal03',0),(13273,45393,'kill_sound_deadwarble01',0),(13274,45394,'kill_sound_deadwarble02',0),(13275,45395,'kill_sound_deadwater',0),(13276,45396,'kill_sound_deadwater01',0),(13277,45397,'kill_sound_deadwater02',0),(13278,45398,'kill_sound_deadwater03',0),(13279,45399,'kill_sound_deadwhimper',0),(13280,45400,'kill_sound_deadwhoosh',0),(13281,45401,'kill_sound_deadwing',0),(13282,45402,'kill_sound_deadwingfold',0),(13283,45403,'kill_sound_deadwoosh',0),(13284,45404,'kill_sound_death',0),(13285,45405,'kill_sound_death001',0),(13286,45406,'kill_sound_death002',0),(13287,45407,'kill_sound_deathbone',0),(13288,45408,'kill_sound_deathbreak',0),(13289,45409,'kill_sound_deathclaw',0),(13290,45410,'kill_sound_deathcrash',0),(13291,45411,'kill_sound_deathengine',0),(13292,45412,'kill_sound_deathfall',0),(13293,45413,'kill_sound_deathmotor',0),(13294,45414,'kill_sound_deathshake',0),(13295,45415,'kill_sound_deathsigh',0),(13296,45416,'kill_sound_deathtail',0),(13297,45417,'kill_sound_deathvocal',0),(13298,45418,'kill_sound_deathwhoosh',0),(13299,45419,'kill_sound_design_lavabridge',0),(13300,45420,'kill_sound_die',0),(13301,45421,'kill_sound_dig001',0),(13302,45422,'kill_sound_dig002',0),(13303,45423,'kill_sound_duck',0),(13304,45424,'kill_sound_eat',0),(13305,45425,'kill_sound_eating',0),(13306,45426,'kill_sound_eatslime',0),(13307,45427,'kill_sound_entercreak',0),(13308,45428,'kill_sound_enterglide',0),(13309,45429,'kill_sound_enterleaves',0),(13310,45430,'kill_sound_entermoan',0),(13311,45431,'kill_sound_enteropen',0),(13312,45432,'kill_sound_enterscrape',0),(13313,45433,'kill_sound_entervocal',0),(13314,45434,'kill_sound_exhale',0),(13315,45435,'kill_sound_exitflap',0),(13316,45436,'kill_sound_exitidle',0),(13317,45437,'kill_sound_exitjump',0),(13318,45438,'kill_sound_exitscream',0),(13319,45439,'kill_sound_explode',0),(13320,45440,'kill_sound_extinguish',0),(13321,45441,'kill_sound_fall',0),(13322,45442,'kill_sound_fall01',0),(13323,45443,'kill_sound_fall02',0),(13324,45444,'kill_sound_fallmetal',0),(13325,45445,'kill_sound_filler',0),(13326,45446,'kill_sound_fire',0),(13327,45447,'kill_sound_fireswoosh',0),(13328,45448,'kill_sound_fishing_cast01',0),(13329,45449,'kill_sound_fishing_cast02',0),(13330,45450,'kill_sound_fishing_cast03',0),(13331,45451,'kill_sound_flame',0),(13332,45452,'kill_sound_flamethrower',0),(13333,45453,'kill_sound_flap',0),(13334,45454,'kill_sound_flapup',0),(13335,45455,'kill_sound_fleeflutter',0),(13336,45456,'kill_sound_fluter',0),(13337,45457,'kill_sound_fly_bite_rip',0),(13338,45458,'kill_sound_foot',0),(13339,45459,'kill_sound_footlayerleft',0),(13340,45460,'kill_sound_footlayerright',0),(13341,45461,'kill_sound_footstep',0),(13342,45462,'kill_sound_footstomp',0),(13343,45463,'kill_sound_foresting',0),(13344,45464,'kill_sound_fuse',0),(13345,45465,'kill_sound_gathering',0),(13346,45466,'kill_sound_getup',0),(13347,45467,'kill_sound_glide',0),(13348,45468,'kill_sound_glide02',0),(13349,45469,'kill_sound_growl',0),(13350,45470,'kill_sound_gulp01',0),(13351,45471,'kill_sound_gulp02',0),(13352,45472,'kill_sound_hammerhit',0),(13353,45473,'kill_sound_happy',0),(13354,45474,'kill_sound_head',0),(13355,45475,'kill_sound_headram_inhale',0),(13356,45476,'kill_sound_headram_land',0),(13357,45477,'kill_sound_headram_snort',0),(13358,45478,'kill_sound_headram_swoosh',0),(13359,45479,'kill_sound_headspark',0),(13360,45480,'kill_sound_headturn',0),(13361,45481,'kill_sound_heartattack',0),(13362,45482,'kill_sound_hiss',0),(13363,45483,'kill_sound_hit',0),(13364,45484,'kill_sound_hoofleft',0),(13365,45485,'kill_sound_hoofright',0),(13366,45486,'kill_sound_hungry',0),(13367,45487,'kill_sound_hungrycreak',0),(13368,45488,'kill_sound_idle',0),(13369,45489,'kill_sound_idle01',0),(13370,45490,'kill_sound_idle02',0),(13371,45491,'kill_sound_idle03_walk001',0),(13372,45492,'kill_sound_idle03_walk002',0),(13373,45493,'kill_sound_idle04',0),(13374,45494,'kill_sound_idlebreath',0),(13375,45495,'kill_sound_idlebubble',0),(13376,45496,'kill_sound_idlechew',0),(13377,45497,'kill_sound_idlecreak',0),(13378,45498,'kill_sound_idleflap',0),(13379,45499,'kill_sound_idleflapup',0),(13380,45500,'kill_sound_idleglass',0),(13381,45501,'kill_sound_idlegrowl',0),(13382,45502,'kill_sound_idlehiss',0),(13383,45503,'kill_sound_idlelaugh',0),(13384,45504,'kill_sound_idlemoo',0),(13385,45505,'kill_sound_idlepant',0),(13386,45506,'kill_sound_idleroar01',0),(13387,45507,'kill_sound_idleroar02',0),(13388,45508,'kill_sound_idlerock',0),(13389,45509,'kill_sound_idlescuff',0),(13390,45510,'kill_sound_idleshort',0),(13391,45511,'kill_sound_idlesniff',0),(13392,45512,'kill_sound_idlesnort',0),(13393,45513,'kill_sound_idletail',0),(13394,45514,'kill_sound_idlevocal',0),(13395,45515,'kill_sound_idlevocal01',0),(13396,45516,'kill_sound_idlevocal02',0),(13397,45517,'kill_sound_idlewater',0),(13398,45518,'kill_sound_inahle',0),(13399,45519,'kill_sound_inhale',0),(13400,45520,'kill_sound_inhale001',0),(13401,45521,'kill_sound_inhale002',0),(13402,45522,'kill_sound_jawsnap',0),(13403,45523,'kill_sound_jump',0),(13404,45524,'kill_sound_knockback',0),(13405,45525,'kill_sound_knockdown',0),(13406,45526,'kill_sound_land',0),(13407,45527,'kill_sound_land01',0),(13408,45528,'kill_sound_land02',0),(13409,45529,'kill_sound_laughlong',0),(13410,45530,'kill_sound_lense',0),(13411,45531,'kill_sound_lense3s',0),(13412,45532,'kill_sound_lickpur01',0),(13413,45533,'kill_sound_liddown',0),(13414,45534,'kill_sound_lidup',0),(13415,45535,'kill_sound_lipsmack',0),(13416,45536,'kill_sound_mining',0),(13417,45537,'kill_sound_moon',0),(13418,45538,'kill_sound_mounthorse_foot',0),(13419,45539,'kill_sound_mounthorse_land',0),(13420,45540,'kill_sound_mounthorse_squeak',0),(13421,45541,'kill_sound_neener',0),(13422,45542,'kill_sound_offensive',0),(13423,45543,'kill_sound_offensive001',0),(13424,45544,'kill_sound_offensiveelec001',0),(13425,45545,'kill_sound_open',0),(13426,45546,'kill_sound_ouch',0),(13427,45547,'kill_sound_ouchbase',0),(13428,45548,'kill_sound_ouchbell',0),(13429,45549,'kill_sound_ouchbend',0),(13430,45550,'kill_sound_ouchbone',0),(13431,45551,'kill_sound_ouchbubble',0),(13432,45552,'kill_sound_ouchbuzz',0),(13433,45553,'kill_sound_ouchchain',0),(13434,45554,'kill_sound_ouchcreak',0),(13435,45555,'kill_sound_ouchcrunch',0),(13436,45556,'kill_sound_ouchfire',0),(13437,45557,'kill_sound_ouchflame',0),(13438,45558,'kill_sound_ouchflap',0),(13439,45559,'kill_sound_ouchflutter',0),(13440,45560,'kill_sound_ouchhit',0),(13441,45561,'kill_sound_ouchliddown',0),(13442,45562,'kill_sound_ouchlidopen',0),(13443,45563,'kill_sound_ouchlidup',0),(13444,45564,'kill_sound_ouchlow',0),(13445,45565,'kill_sound_ouchpage',0),(13446,45566,'kill_sound_ouchrock',0),(13447,45567,'kill_sound_ouchrun',0),(13448,45568,'kill_sound_ouchscream',0),(13449,45569,'kill_sound_ouchshell',0),(13450,45570,'kill_sound_ouchslam',0),(13451,45571,'kill_sound_ouchsnort',0),(13452,45572,'kill_sound_ouchsquawk',0),(13453,45573,'kill_sound_ouchtail',0),(13454,45574,'kill_sound_ouchvocal',0),(13455,45575,'kill_sound_ouchwarble',0),(13456,45576,'kill_sound_ouchwater',0),(13457,45577,'kill_sound_ouchwhoosh',0),(13458,45578,'kill_sound_ouchwing',0),(13459,45579,'kill_sound_pain001',0),(13460,45580,'kill_sound_pain002',0),(13461,45581,'kill_sound_paw',0),(13462,45582,'kill_sound_pen01',0),(13463,45583,'kill_sound_pen02',0),(13464,45584,'kill_sound_piercer',0),(13465,45585,'kill_sound_purr',0),(13466,45586,'kill_sound_purr02',0),(13467,45587,'kill_sound_purr03',0),(13468,45588,'kill_sound_raisehand',0),(13469,45589,'kill_sound_rechargeresult',0),(13470,45590,'kill_sound_recharging',0),(13471,45591,'kill_sound_roar',0),(13472,45592,'kill_sound_rockroll',0),(13473,45593,'kill_sound_rofl',0),(13474,45594,'kill_sound_rude',0),(13475,45595,'kill_sound_run',0),(13476,45596,'kill_sound_runcreak',0),(13477,45597,'kill_sound_runflap',0),(13478,45598,'kill_sound_runflap01',0),(13479,45599,'kill_sound_runflap02',0),(13480,45600,'kill_sound_runflapsmall',0),(13481,45601,'kill_sound_runhit',0),(13482,45602,'kill_sound_runland',0),(13483,45603,'kill_sound_runleft',0),(13484,45604,'kill_sound_runright',0),(13485,45605,'kill_sound_runwing',0),(13486,45606,'kill_sound_sad01',0),(13487,45607,'kill_sound_sad02',0),(13488,45608,'kill_sound_saw001',0),(13489,45609,'kill_sound_saw002',0),(13490,45610,'kill_sound_scratch',0),(13491,45611,'kill_sound_scream',0),(13492,45612,'kill_sound_scream01',0),(13493,45613,'kill_sound_scream02',0),(13494,45614,'kill_sound_shake',0),(13495,45615,'kill_sound_sheathe',0),(13496,45616,'kill_sound_sit',0),(13497,45617,'kill_sound_sitenter',0),(13498,45618,'kill_sound_sitexit',0),(13499,45619,'kill_sound_sitidle',0),(13500,45620,'kill_sound_sleep',0),(13501,45621,'kill_sound_sleep001',0),(13502,45622,'kill_sound_sleep002',0),(13503,45623,'kill_sound_slither',0),(13504,45624,'kill_sound_snap',0),(13505,45625,'kill_sound_snarl',0),(13506,45626,'kill_sound_sneer',0),(13507,45627,'kill_sound_sneeze',0),(13508,45628,'kill_sound_sneezeinhale',0),(13509,45629,'kill_sound_snort',0),(13510,45630,'kill_sound_spellvocal',0),(13511,45631,'kill_sound_splash',0),(13512,45632,'kill_sound_stand',0),(13513,45633,'kill_sound_step',0),(13514,45634,'kill_sound_stomp',0),(13515,45635,'kill_sound_stompgrowl',0),(13516,45636,'kill_sound_stompvocal',0),(13517,45637,'kill_sound_stunfall',0),(13518,45638,'kill_sound_stunned',0),(13519,45639,'kill_sound_stunnedfall',0),(13520,45640,'kill_sound_stunnedreturn',0),(13521,45641,'kill_sound_stunnedwhirl',0),(13522,45642,'kill_sound_stunshake',0),(13523,45643,'kill_sound_stunsnort',0),(13524,45644,'kill_sound_stunspin',0),(13525,45645,'kill_sound_summon',0),(13526,45646,'kill_sound_summonhit',0),(13527,45647,'kill_sound_summonrock',0),(13528,45648,'kill_sound_summonrock01',0),(13529,45649,'kill_sound_summonrock02',0),(13530,45650,'kill_sound_summonrockback',0),(13531,45651,'kill_sound_summonslide',0),(13532,45652,'kill_sound_summonstart',0),(13533,45653,'kill_sound_summonvocal',0),(13534,45654,'kill_sound_superbuff',0),(13535,45655,'kill_sound_swim',0),(13536,45656,'kill_sound_swimfast',0),(13537,45657,'kill_sound_swoosh',0),(13538,45658,'kill_sound_swooshkick',0),(13539,45659,'kill_sound_swooshleft',0),(13540,45660,'kill_sound_swooshright',0),(13541,45661,'kill_sound_swooshtail',0),(13542,45662,'kill_sound_taillash001',0),(13543,45663,'kill_sound_taillash002',0),(13544,45664,'kill_sound_tailswoosh',0),(13545,45665,'kill_sound_tailvocal',0),(13546,45666,'kill_sound_tailwhip',0),(13547,45667,'kill_sound_taunt01',0),(13548,45668,'kill_sound_taunt02',0),(13549,45669,'kill_sound_taunt03',0),(13550,45670,'kill_sound_thunder',0),(13551,45671,'kill_sound_trick',0),(13552,45672,'kill_sound_uncoil',0),(13553,45673,'kill_sound_unsheathe',0),(13554,45674,'kill_sound_vocalattack',0),(13555,45675,'kill_sound_vocalbite',0),(13556,45676,'kill_sound_vocalbuffet',0),(13557,45677,'kill_sound_vocaldamage',0),(13558,45678,'kill_sound_vocaldead',0),(13559,45679,'kill_sound_vocaldeath',0),(13560,45680,'kill_sound_vocalouch',0),(13561,45681,'kill_sound_walk',0),(13562,45682,'kill_sound_walk001',0),(13563,45683,'kill_sound_walk002',0),(13564,45684,'kill_sound_walk01',0),(13565,45685,'kill_sound_walk02',0),(13566,45686,'kill_sound_walk1',0),(13567,45687,'kill_sound_walkbubble',0),(13568,45688,'kill_sound_walkclaw',0),(13569,45689,'kill_sound_walkflap',0),(13570,45690,'kill_sound_walkflap01',0),(13571,45691,'kill_sound_walkleft',0),(13572,45692,'kill_sound_walkpiercer',0),(13573,45693,'kill_sound_walkright',0),(13574,45694,'kill_sound_walkrock',0),(13575,45695,'kill_sound_walkservo',0),(13576,45696,'kill_sound_walkservoleft',0),(13577,45697,'kill_sound_walkservoright',0),(13578,45698,'kill_sound_water',0),(13579,45699,'kill_sound_waterstep',0),(13580,45700,'kill_sound_whirl',0),(13581,45701,'kill_sound_whirlmotor',0),(13582,45702,'kill_sound_whirlwhoosh',0),(13583,45703,'kill_sound_wildspring',0),(13584,45704,'kill_sound_wildswing',0),(13585,45705,'kill_sound_wildswinghit001',0),(13586,45706,'kill_sound_wildswinghit002',0),(13587,45707,'kill_sound_wing',0),(13588,45708,'kill_sound_wingbuffet',0),(13589,45709,'kill_sound_wingflap',0),(13590,45710,'kill_sound_wingfold',0),(13591,45711,'kill_sound_wingmove',0),(13592,45712,'kill_sound_wingopen',0),(13593,45713,'kill_sound_wings',0),(13594,45714,'kill_sound_wingwind',0),(13595,45715,'kill_sound_yawn001',0),(13596,45716,'kill_sound_zap',0),(13597,45717,'kill_spark_circle01',0),(13598,45718,'kill_spark_circle02',0),(13599,45719,'kill_spark_circle03',0),(13600,45720,'kill_spark_circle04',0),(13601,45721,'kill_spark_circle05',0),(13602,45722,'kill_spark_sphere01',0),(13603,45723,'kill_spark_sphere_ws',0),(13604,45724,'kill_spark_sphere_ws_lefthand',0),(13605,45725,'kill_sparkle01',0),(13606,45726,'kill_sparkle02',0),(13607,45727,'kill_sparkle03',0),(13608,45728,'kill_sparkle_trail',0),(13609,45729,'kill_sparks',0),(13610,45730,'kill_sparks_lf',0),(13611,45731,'kill_sparks_lr',0),(13612,45732,'kill_sparks_rf',0),(13613,45733,'kill_sparks_rr',0),(13614,45734,'kill_speaknoevil',0),(13615,45735,'kill_spellcast01',0),(13616,45736,'kill_spellcast02',0),(13617,45737,'kill_spider_webbshoot_snd',0),(13618,45738,'kill_spider_webcover_snd',0),(13619,45739,'kill_spinningwheel01',0),(13620,45740,'kill_spinningwheel02',0),(13621,45741,'kill_spinningwheel04',0),(13622,45742,'kill_spinningwheel_success',0),(13623,45743,'kill_spinningwheel_success02',0),(13624,45744,'kill_spinningwheel_success03',0),(13625,45745,'kill_spiritascend_snd',0),(13626,45746,'kill_square',0),(13627,45747,'kill_squeal',0),(13628,45748,'kill_ss_singing_lp_snd',0),(13629,45749,'kill_st_casttap_snd',0),(13630,45750,'kill_st_tappestry_snd',0),(13631,45751,'kill_stare',0),(13632,45752,'kill_start',0),(13633,45753,'kill_start_drone_sound',0),(13634,45754,'kill_startburst_sound_01',0),(13635,45755,'kill_steam01',0),(13636,45756,'kill_steam_forearm_l',0),(13637,45757,'kill_steam_forearm_r',0),(13638,45758,'kill_steam_hip_l',0),(13639,45759,'kill_steam_hip_l_death',0),(13640,45760,'kill_steam_hip_r',0),(13641,45761,'kill_steam_hip_r_death',0),(13642,45762,'kill_steam_upperarm_l',0),(13643,45763,'kill_steam_upperarm_r',0),(13644,45764,'kill_stifle_cast_arm_snd',0),(13645,45765,'kill_stifle_cast_lp_snd',0),(13646,45766,'kill_stifle_result_snd',0),(13647,45767,'kill_still',0),(13648,45768,'kill_stinky',0),(13649,45769,'kill_stove_boilover01',0),(13650,45770,'kill_stove_boilover02',0),(13651,45771,'kill_stove_boilover03',0),(13652,45772,'kill_strafe_left',0),(13653,45773,'kill_strafe_left_run',0),(13654,45774,'kill_strafe_right',0),(13655,45775,'kill_strafe_right_run',0),(13656,45776,'kill_stretch',0),(13657,45777,'kill_string_knotted',0),(13658,45778,'kill_success01',0),(13659,45779,'kill_success02',0),(13660,45780,'kill_success_flash01',0),(13661,45781,'kill_success_flash02',0),(13662,45782,'kill_success_flash03',0),(13663,45783,'kill_sulk',0),(13664,45784,'kill_summon',0),(13665,45785,'kill_summon_idle',0),(13666,45786,'kill_super_buff',0),(13667,45787,'kill_swear',0),(13668,45788,'kill_sweep01',0),(13669,45789,'kill_swim_attack',0),(13670,45790,'kill_swim_backup',0),(13671,45791,'kill_swim_foward',0),(13672,45792,'kill_swim_idle',0),(13673,45793,'kill_swim_ouch',0),(13674,45794,'kill_swim_run',0),(13675,45795,'kill_swim_tail',0),(13676,45796,'kill_swim_tail_cloak',0),(13677,45797,'kill_swim_walk',0),(13678,45798,'kill_swoosh',0),(13679,45799,'kill_swoosh_light_low',0),(13680,45800,'kill_swoosh_medium',0),(13681,45801,'kill_swwosh',0),(13682,45802,'kill_ta_cast_snd',0),(13683,45803,'kill_tail',0),(13684,45804,'kill_tail_cloak',0),(13685,45805,'kill_tail_dust',0),(13686,45806,'kill_tailoring_failure',0),(13687,45807,'kill_tailoring_idle',0),(13688,45808,'kill_tailoring_success',0),(13689,45809,'kill_talk_idle',0),(13690,45810,'kill_talk_idle01',0),(13691,45811,'kill_talk_idle02',0),(13692,45812,'kill_talk_idle03',0),(13693,45813,'kill_talk_idle04',0),(13694,45814,'kill_talk_idle05',0),(13695,45815,'kill_talk_idle06',0),(13696,45816,'kill_talk_idle07',0),(13697,45817,'kill_talk_idle08',0),(13698,45818,'kill_talk_idle09',0),(13699,45819,'kill_talk_idle10',0),(13700,45820,'kill_talk_idle11',0),(13701,45821,'kill_talk_idle12',0),(13702,45822,'kill_tantrum',0),(13703,45823,'kill_tantrum_short',0),(13704,45824,'kill_tapfoot',0),(13705,45825,'kill_taunt',0),(13706,45826,'kill_taunt_combat_art',0),(13707,45827,'kill_tc_teleport_snd',0),(13708,45828,'kill_thaiko_sound',0),(13709,45829,'kill_thanks',0),(13710,45830,'kill_thirsty',0),(13711,45831,'kill_threaten',0),(13712,45832,'kill_thumbsup',0),(13713,45833,'kill_thunder_clap',0),(13714,45834,'kill_tiger_idle',0),(13715,45835,'kill_tiger_run',0),(13716,45836,'kill_tiger_walk',0),(13717,45837,'kill_tod_explode_snd',0),(13718,45838,'kill_tod_voltz_snd',0),(13719,45839,'kill_tr_spawn_snd',0),(13720,45840,'kill_tradeart_beaker01',0),(13721,45841,'kill_tradeart_butcherknife01',0),(13722,45842,'kill_tradeart_celticknot01',0),(13723,45843,'kill_tradeart_flask01',0),(13724,45844,'kill_tradeart_forge_hammer01',0),(13725,45845,'kill_tradeart_forge_hammer02',0),(13726,45846,'kill_tradeart_forge_helmet01',0),(13727,45847,'kill_tradeart_fork01',0),(13728,45848,'kill_tradeart_kitchenknife01',0),(13729,45849,'kill_tradeart_log_cut',0),(13730,45850,'kill_tradeart_metal_bar',0),(13731,45851,'kill_tradeart_metal_rod01',0),(13732,45852,'kill_tradeart_metal_sparkling2',0),(13733,45853,'kill_tradeart_molecule01',0),(13734,45854,'kill_tradeart_needle_left01',0),(13735,45855,'kill_tradeart_needle_right01',0),(13736,45856,'kill_tradeart_planer',0),(13737,45857,'kill_tradeart_rune_01',0),(13738,45858,'kill_tradeart_rune_02',0),(13739,45859,'kill_tradeart_rune_03',0),(13740,45860,'kill_tradeart_rune_04',0),(13741,45861,'kill_tradeart_rune_05',0),(13742,45862,'kill_tradeart_rune_06',0),(13743,45863,'kill_tradeart_rune_07',0),(13744,45864,'kill_tradeart_rune_08',0),(13745,45865,'kill_tradeart_saw',0),(13746,45866,'kill_tradeart_spoon01',0),(13747,45867,'kill_trail_pike',0),(13748,45868,'kill_transit',0),(13749,45869,'kill_trdskl_beaker',0),(13750,45870,'kill_trdskl_cloth',0),(13751,45871,'kill_trdskl_feather',0),(13752,45872,'kill_trdskl_fishingpole',0),(13753,45873,'kill_trdskl_gem',0),(13754,45874,'kill_trdskl_hammer',0),(13755,45875,'kill_trdskl_hatchet',0),(13756,45876,'kill_trdskl_hatchet_l',0),(13757,45877,'kill_trdskl_leather',0),(13758,45878,'kill_trdskl_magnifying',0),(13759,45879,'kill_trdskl_mug',0),(13760,45880,'kill_trdskl_needle',0),(13761,45881,'kill_trdskl_pick',0),(13762,45882,'kill_trdskl_pot',0),(13763,45883,'kill_trdskl_saw',0),(13764,45884,'kill_trdskl_scroll',0),(13765,45885,'kill_trdskl_spoon',0),(13766,45886,'kill_trdskl_testtube',0),(13767,45887,'kill_trdskl_tongs',0),(13768,45888,'kill_trdskl_vial',0),(13769,45889,'kill_trdskl_wood',0),(13770,45890,'kill_trem_boulder_snd',0),(13771,45891,'kill_trem_cast_lp_snd',0),(13772,45892,'kill_trem_open_snd',0),(13773,45893,'kill_trem_rings_snd',0),(13774,45894,'kill_trem_ringsh_snd',0),(13775,45895,'kill_trem_rocks_lp_01_snd',0),(13776,45896,'kill_trick',0),(13777,45897,'kill_trt_treat_toxin_sound',0),(13778,45898,'kill_turn_left',0),(13779,45899,'kill_turn_right',0),(13780,45900,'kill_turn_to_wood',0),(13781,45901,'kill_u',0),(13782,45902,'kill_unsummon',0),(13783,45903,'kill_untrained_attack',0),(13784,45904,'kill_untrained_backup',0),(13785,45905,'kill_untrained_dodge',0),(13786,45906,'kill_untrained_dodge01',0),(13787,45907,'kill_untrained_dodge02',0),(13788,45908,'kill_untrained_ouch',0),(13789,45909,'kill_untrained_ouch01',0),(13790,45910,'kill_untrained_parry',0),(13791,45911,'kill_untrained_recoil',0),(13792,45912,'kill_untrained_strafe_left',0),(13793,45913,'kill_untrained_strafe_right',0),(13794,45914,'kill_untrained_walk',0),(13795,45915,'kill_util_rings_snd',0),(13796,45916,'kill_vamp_batattack_sound',0),(13797,45917,'kill_vamp_batflaps_sound',0),(13798,45918,'kill_vamp_batsqueak_sound',0),(13799,45919,'kill_ven_bkgrnd_slime_sound',0),(13800,45920,'kill_ven_breath_01',0),(13801,45921,'kill_ven_breath_02',0),(13802,45922,'kill_ven_explode_sound',0),(13803,45923,'kill_ven_fire_01',0),(13804,45924,'kill_ven_fire_02',0),(13805,45925,'kill_ven_pulse_sound',0),(13806,45926,'kill_ven_rumble_01',0),(13807,45927,'kill_ven_rumble_02',0),(13808,45928,'kill_ven_slime_01',0),(13809,45929,'kill_ven_slime_02',0),(13810,45930,'kill_verdict_cast_snd',0),(13811,45931,'kill_verdict_gavel_snd',0),(13812,45932,'kill_vg_healing_snd',0),(13813,45933,'kill_vg_leaves_snd',0),(13814,45934,'kill_vg_leaveslp_snd',0),(13815,45935,'kill_violin',0),(13816,45936,'kill_viseme_a',0),(13817,45937,'kill_viseme_aa',0),(13818,45938,'kill_viseme_ae',0),(13819,45939,'kill_viseme_ah',0),(13820,45940,'kill_viseme_ao',0),(13821,45941,'kill_viseme_aw',0),(13822,45942,'kill_viseme_ay',0),(13823,45943,'kill_viseme_b',0),(13824,45944,'kill_viseme_c',0),(13825,45945,'kill_viseme_ch',0),(13826,45946,'kill_viseme_d',0),(13827,45947,'kill_viseme_dh',0),(13828,45948,'kill_viseme_e',0),(13829,45949,'kill_viseme_eh',0),(13830,45950,'kill_viseme_er',0),(13831,45951,'kill_viseme_ey',0),(13832,45952,'kill_viseme_f',0),(13833,45953,'kill_viseme_g',0),(13834,45954,'kill_viseme_h',0),(13835,45955,'kill_viseme_ih',0),(13836,45956,'kill_viseme_iy',0),(13837,45957,'kill_viseme_j',0),(13838,45958,'kill_viseme_k',0),(13839,45959,'kill_viseme_l',0),(13840,45960,'kill_viseme_m',0),(13841,45961,'kill_viseme_n',0),(13842,45962,'kill_viseme_ng',0),(13843,45963,'kill_viseme_o',0),(13844,45964,'kill_viseme_ow',0),(13845,45965,'kill_viseme_oy',0),(13846,45966,'kill_viseme_p',0),(13847,45967,'kill_viseme_r',0),(13848,45968,'kill_viseme_reast',0),(13849,45969,'kill_viseme_rest',0),(13850,45970,'kill_viseme_s',0),(13851,45971,'kill_viseme_sh',0),(13852,45972,'kill_viseme_t',0),(13853,45973,'kill_viseme_th',0),(13854,45974,'kill_viseme_u',0),(13855,45975,'kill_viseme_uh',0),(13856,45976,'kill_viseme_uw',0),(13857,45977,'kill_viseme_v',0),(13858,45978,'kill_viseme_w',0),(13859,45979,'kill_viseme_x',0),(13860,45980,'kill_viseme_y',0),(13861,45981,'kill_viseme_z',0),(13862,45982,'kill_viseme_zh',0),(13863,45983,'kill_visemes_a',0),(13864,45984,'kill_visemes_c',0),(13865,45985,'kill_visemes_e',0),(13866,45986,'kill_visemes_f',0),(13867,45987,'kill_visemes_l',0),(13868,45988,'kill_visemes_m',0),(13869,45989,'kill_visemes_o',0),(13870,45990,'kill_visemes_rest',0),(13871,45991,'kill_visemes_u',0),(13872,45992,'kill_visemes_w',0),(13873,45993,'kill_vision_1',0),(13874,45994,'kill_vision_2',0),(13875,45995,'kill_vision_3',0),(13876,45996,'kill_vision_4',0),(13877,45997,'kill_vo_callout_afk',0),(13878,45998,'kill_vo_callout_agree',0),(13879,45999,'kill_vo_callout_apologies',0),(13880,46000,'kill_vo_callout_assist',0),(13881,46001,'kill_vo_callout_battle',0),(13882,46002,'kill_vo_callout_cheer',0),(13883,46003,'kill_vo_callout_confused',0),(13884,46004,'kill_vo_callout_disagree',0),(13885,46005,'kill_vo_callout_doh',0),(13886,46006,'kill_vo_callout_flirt',0),(13887,46007,'kill_vo_callout_follow',0),(13888,46008,'kill_vo_callout_goodbye',0),(13889,46009,'kill_vo_callout_got',0),(13890,46010,'kill_vo_callout_greetings',0),(13891,46011,'kill_vo_callout_growl',0),(13892,46012,'kill_vo_callout_heal',0),(13893,46013,'kill_vo_callout_help',0),(13894,46014,'kill_vo_callout_helping',0),(13895,46015,'kill_vo_callout_hungry',0),(13896,46016,'kill_vo_callout_incoming',0),(13897,46017,'kill_vo_callout_laugh',0),(13898,46018,'kill_vo_callout_look',0),(13899,46019,'kill_vo_callout_looking',0),(13900,46020,'kill_vo_callout_out',0),(13901,46021,'kill_vo_callout_run',0),(13902,46022,'kill_vo_callout_starting',0),(13903,46023,'kill_vo_callout_stay',0),(13904,46024,'kill_vo_callout_taunting',0),(13905,46025,'kill_vo_callout_thank',0),(13906,46026,'kill_vo_callout_thirsty',0),(13907,46027,'kill_vo_callout_threaten',0),(13908,46028,'kill_vo_callout_train',0),(13909,46029,'kill_vo_callout_under',0),(13910,46030,'kill_vo_callout_vocal_attack',0),(13911,46031,'kill_vo_callout_vocal_death',0),(13912,46032,'kill_vo_callout_vocal_drown',0),(13913,46033,'kill_vo_callout_vocal_jump',0),(13914,46034,'kill_vo_callout_vocal_land',0),(13915,46035,'kill_vo_callout_vocal_ouch',0),(13916,46036,'kill_vo_callout_watch',0),(13917,46037,'kill_vo_callout_yawn',0),(13918,46038,'kill_vo_callout_yell',0),(13919,46039,'kill_vocal_attack',0),(13920,46040,'kill_vocal_attacklong',0),(13921,46041,'kill_vocal_death',0),(13922,46042,'kill_vocal_drown',0),(13923,46043,'kill_vocal_jump',0),(13924,46044,'kill_vocal_ouch',0),(13925,46045,'kill_voidbeast_attack_snd',0),(13926,46046,'kill_voidbeast_result_snd',0),(13927,46047,'kill_vr2_burst_snd',0),(13928,46048,'kill_vr2_flames_snd',0),(13929,46049,'kill_w',0),(13930,46050,'kill_wa_voltsword_sound',0),(13931,46051,'kill_wa_voltswordstart_sound',0),(13932,46052,'kill_walk',0),(13933,46054,'kill_walk_shake',0),(13934,46055,'kill_wave',0),(13935,46056,'kill_welder_lefthand',0),(13936,46057,'kill_welder_righthand',0),(13937,46058,'kill_wheel',0),(13938,46059,'kill_wheel1',0),(13939,46060,'kill_wheel_smoke',0),(13940,46061,'kill_whirling_attack',0),(13941,46062,'kill_whistle',0),(13942,46063,'kill_whome',0),(13943,46064,'kill_wild_swing',0),(13944,46065,'kill_wild_swing_recoilmax',0),(13945,46066,'kill_wildswing',0),(13946,46067,'kill_wince',0),(13947,46068,'kill_wing_glide',0),(13948,46069,'kill_wingflap',0),(13949,46070,'kill_wings_01',0),(13950,46071,'kill_wings_sound_01',0),(13951,46072,'kill_wink',0),(13952,46073,'kill_wkn_glowsplash_snd',0),(13953,46074,'kill_wod_timer_tone_snd',0),(13954,46075,'kill_woodworking_failure',0),(13955,46076,'kill_woodworking_idle',0),(13956,46077,'kill_woodworking_success',0),(13957,46078,'kill_woowoo',0),(13958,46079,'kill_wr_energy_glow_sound',0),(13959,46080,'kill_wr_energy_glowout_sound',0),(13960,46081,'kill_wr_glimmer_sound',0),(13961,46082,'kill_wr_watershield_sound',0),(13962,46083,'kill_ws_resounding_snd',0),(13963,46084,'kill_ws_singout_snd',0),(13964,46085,'kill_yeah',0),(13965,46086,'kill_yell',0),(13966,46087,'kill_zap',0),(13967,46090,'kill_airborne',0),(13968,46097,'kill_froglok_forestry_chopping',0),(13969,46099,'kill_ogre_forestry_success',0),(13970,46100,'kill_ogre_gathering_search',0),(13971,46101,'kill_ogre_gathering_success',0),(13972,46102,'kill_ogre_mining_success',0),(13973,46226,'kill_attack_boss01',0),(13974,46227,'kill_attack_boss02',0),(13975,46228,'kill_buff_boss01',0),(13976,46235,'kill_heal_boss01',0),(13977,46237,'kill_result_fruitcake_explosion',0),(13978,46238,'kill_result_snowball_big_explosion',0),(13979,46310,'kill_sound_groundhit',0),(13980,46369,'kill_froglok_1h_sword_attack_recoil',0),(13981,46370,'kill_froglok_1h_sword_attack_recoil01',0),(13982,46371,'kill_froglok_1h_sword_attack_recoil02',0),(13983,46372,'kill_froglok_1h_sword_attack_recoil03',0),(13984,46373,'kill_froglok_1h_thrown_attack',0),(13985,46374,'kill_froglok_2h_sword_attack_recoil',0),(13986,46375,'kill_froglok_2h_sword_attack_recoil01',0),(13987,46376,'kill_froglok_2h_sword_attack_recoil02',0),(13988,46377,'kill_froglok_2h_sword_backup',0),(13989,46378,'kill_froglok_2h_sword_defensive_buff',0),(13990,46379,'kill_froglok_2h_sword_enter',0),(13991,46380,'kill_froglok_2h_sword_offensive_buff',0),(13992,46381,'kill_froglok_2h_sword_ouch_backhand',0),(13993,46382,'kill_froglok_2h_sword_ouch_down',0),(13994,46383,'kill_froglok_2h_sword_ouch_forehand',0),(13995,46384,'kill_froglok_2h_sword_ouch_thrust',0),(13996,46385,'kill_froglok_2h_sword_parry_backhand',0),(13997,46386,'kill_froglok_2h_sword_parry_down',0),(13998,46387,'kill_froglok_2h_sword_parry_forehand',0),(13999,46388,'kill_froglok_2h_sword_super_buff',0),(14000,46389,'kill_froglok_2h_sword_walk',0),(14001,46390,'kill_froglok_bostaff_attack_recoil',0),(14002,46391,'kill_froglok_bostaff_attack_recoil01',0),(14003,46392,'kill_froglok_bostaff_attack_recoil02',0),(14004,46393,'kill_froglok_bostaff_attack_recoil03',0),(14005,46394,'kill_froglok_bostaff_defensive_buff',0),(14006,46395,'kill_froglok_bostaff_dodge_backhand',0),(14007,46396,'kill_froglok_bostaff_dodge_down',0),(14008,46397,'kill_froglok_bostaff_dodge_forehand',0),(14009,46398,'kill_froglok_bostaff_dodge_thrust',0),(14010,46399,'kill_froglok_bostaff_offensive_buff',0),(14011,46400,'kill_froglok_bostaff_ouch_backhand',0),(14012,46401,'kill_froglok_bostaff_ouch_down',0),(14013,46402,'kill_froglok_bostaff_ouch_forehand',0),(14014,46403,'kill_froglok_bostaff_ouch_thrust',0),(14015,46404,'kill_froglok_bostaff_parry_backhand',0),(14016,46405,'kill_froglok_bostaff_parry_down',0),(14017,46406,'kill_froglok_bostaff_parry_forehand',0),(14018,46407,'kill_froglok_bostaff_parry_thrust',0),(14019,46408,'kill_froglok_bostaff_super_buff',0),(14020,46409,'kill_froglok_dual_wield_attack_recoil',0),(14021,46410,'kill_froglok_dual_wield_attack_recoil01',0),(14022,46411,'kill_froglok_dual_wield_attack_recoil02',0),(14023,46412,'kill_froglok_dual_wield_attack_recoil03',0),(14024,46413,'kill_froglok_dual_wield_parry_backhand',0),(14025,46414,'kill_froglok_dual_wield_parry_down',0),(14026,46415,'kill_froglok_dual_wield_parry_forehand',0),(14027,46416,'kill_froglok_dual_wield_parry_thrust',0),(14028,46417,'kill_froglok_monk_attack_recoil',0),(14029,46418,'kill_froglok_monk_attack_recoil02',0),(14030,46419,'kill_froglok_monk_charge_up',0),(14031,46420,'kill_froglok_monk_defensive_buff',0),(14032,46421,'kill_froglok_monk_dodge_backhand',0),(14033,46422,'kill_froglok_monk_dodge_down',0),(14034,46423,'kill_froglok_monk_dodge_forehand',0),(14035,46424,'kill_froglok_monk_dodge_thrust',0),(14036,46425,'kill_froglok_monk_kick_flying',0),(14037,46426,'kill_froglok_monk_offensive_buff',0),(14038,46427,'kill_froglok_monk_ouch_down',0),(14039,46428,'kill_froglok_monk_ouch_thrust',0),(14040,46429,'kill_froglok_monk_parry_backhand',0),(14041,46430,'kill_froglok_monk_parry_down',0),(14042,46431,'kill_froglok_monk_parry_forehand',0),(14043,46432,'kill_froglok_monk_parry_thrust',0),(14044,46433,'kill_froglok_monk_super_buff',0),(14045,46434,'kill_froglok_monk_taunt_combat_art',0),(14046,46435,'kill_froglok_pike_attack_recoil',0),(14047,46436,'kill_froglok_pike_attack_recoil01',0),(14048,46437,'kill_froglok_pike_attack_recoil02',0),(14049,46438,'kill_froglok_pike_charge_up',0),(14050,46439,'kill_froglok_pike_dodge_backhand',0),(14051,46440,'kill_froglok_pike_dodge_down',0),(14052,46441,'kill_froglok_pike_dodge_forehand',0),(14053,46442,'kill_froglok_pike_dodge_thrust',0),(14054,46443,'kill_froglok_pike_offensive_buff',0),(14055,46444,'kill_froglok_pike_ouch_backhand',0),(14056,46445,'kill_froglok_pike_ouch_down',0),(14057,46446,'kill_froglok_pike_ouch_forehand',0),(14058,46447,'kill_froglok_pike_ouch_thrust',0),(14059,46448,'kill_froglok_pike_parry_backhand',0),(14060,46449,'kill_froglok_pike_parry_down',0),(14061,46450,'kill_froglok_pike_parry_forehand',0),(14062,46451,'kill_froglok_pike_parry_thrust',0),(14063,46452,'kill_froglok_pugilist_attack_recoil02',0),(14064,46453,'kill_froglok_pugilist_defensive_buff',0),(14065,46454,'kill_froglok_pugilist_dodge_backhand',0),(14066,46455,'kill_froglok_pugilist_dodge_down',0),(14067,46456,'kill_froglok_pugilist_dodge_forehand',0),(14068,46457,'kill_froglok_pugilist_dodge_thrust',0),(14069,46458,'kill_froglok_pugilist_offensive_buff',0),(14070,46459,'kill_froglok_pugilist_ouch_backhand',0),(14071,46460,'kill_froglok_pugilist_ouch_down',0),(14072,46461,'kill_froglok_pugilist_ouch_forehand',0),(14073,46462,'kill_froglok_pugilist_super_buff',0),(14074,46473,'kill_froglok_bostaff_charge_up',0),(14075,46474,'kill_froglok_dual_wield_knockdowntoknees',0),(14076,46475,'kill_froglok_dual_wield_offensive_buff',0),(14077,46476,'kill_froglok_dual_wield_super_buff',0),(14078,46477,'kill_froglok_knockdown_attack',0),(14079,46478,'kill_froglok_knockdowntoknees',0),(14080,46479,'kill_froglok_offensive_buff',0),(14081,46480,'kill_froglok_pike_backup',0),(14082,46481,'kill_froglok_pike_knockdowntoknees',0),(14083,46482,'kill_froglok_pike_walk',0),(14084,46483,'kill_froglok_pugilist_attack01',0),(14085,46484,'kill_froglok_pugilist_attack_recoil01',0),(14086,46485,'kill_froglok_pugilist_knockdowntoknees',0),(14087,46486,'kill_froglok_super_buff',0),(14088,46488,'kill_lights',0),(14089,46489,'kill_lights_spiral',0),(14090,46499,'kill_fae_light_dance',0),(14091,46500,'kill_horse_long_fall',0),(14092,46503,'kill_trdskl_fruitcake',0),(14093,46512,'kill_fire01_big',0),(14094,46513,'kill_fire01_small',0),(14095,46515,'kill_lights_blue',0),(14096,46516,'kill_lights_blue_slow',0),(14097,46517,'kill_lights_flocked',0),(14098,46518,'kill_lights_gold',0),(14099,46519,'kill_lights_gold_slow',0),(14100,46520,'kill_lights_red',0),(14101,46521,'kill_lights_red_slow',0),(14102,46522,'kill_lights_white',0),(14103,46523,'kill_lights_white_slow',0),(14104,46553,'kill_dwarf_forestry_success',0),(14105,46554,'kill_gnome_forestry_success',0),(14106,46555,'kill_halfling_forestry_success',0),(14107,46557,'kill_ogre_1h_crush_ouch_forehand',0),(14108,46558,'kill_ogre_1h_pierce_ouch_forehand',0),(14109,46559,'kill_ogre_1h_sword_ouch_forehand',0),(14110,46560,'kill_ogre_1h_thrown_ouch_forehand',0),(14111,46561,'kill_ogre_2h_sword_dodge_backhand',0),(14112,46562,'kill_ogre_2h_sword_dodge_forehand',0),(14113,46563,'kill_ogre_2h_sword_ouch_down',0),(14114,46564,'kill_ogre_2h_sword_ouch_thrust',0),(14115,46565,'kill_ogre_dual_wield_dodge_backhand',0),(14116,46566,'kill_ogre_dual_wield_dodge_forehand',0),(14117,46567,'kill_ogre_dual_wield_ouch_forehand',0),(14118,46568,'kill_ogre_pike_dodge_backhand',0),(14119,46569,'kill_ogre_pike_dodge_forehand',0),(14120,46570,'kill_ogre_pike_kick',0),(14121,46571,'kill_ogre_pike_ouch_backhand',0),(14122,46572,'kill_ogre_pike_ouch_down',0),(14123,46573,'kill_ogre_pike_ouch_forehand',0),(14124,46574,'kill_ogre_pike_ouch_thrust',0),(14125,46584,'kill_darkelf_female_2h_sword_wild_swing',0),(14126,46585,'kill_erudite_female_2h_sword_wild_swing',0),(14127,46586,'kill_fae_light_2h_sword_whirling_attack',0),(14128,46587,'kill_fae_light_2h_sword_wild_swing',0),(14129,46588,'kill_fae_light_female_2h_sword_wild_swing',0),(14130,46589,'kill_gnome_female_2h_sword_wild_swing',0),(14131,46590,'kill_halfelf_female_2h_sword_wild_swing',0),(14132,46591,'kill_highelf_female_2h_sword_wild_swing',0),(14133,46592,'kill_human_female_2h_sword_wild_swing',0),(14134,46593,'kill_iksar_female_2h_sword_wild_swing',0),(14135,46595,'kill_kerra_female_2h_sword_wild_swing',0),(14136,46596,'kill_ratonga_female_2h_sword_wild_swing',0),(14137,46598,'kill_troll_female_2h_sword_wild_swing',0),(14138,46599,'kill_woodelf_female_2h_sword_wild_swing',0),(14139,46618,'kill_darkelf_female_pike_charge_up',0),(14140,46619,'kill_darkelf_female_pike_defensive_buff',0),(14141,46620,'kill_darkelf_female_pike_offensive_buff',0),(14142,46621,'kill_erudite_female_pike_charge_up',0),(14143,46622,'kill_erudite_female_pike_defensive_buff',0),(14144,46623,'kill_erudite_female_pike_offensive_buff',0),(14145,46624,'kill_fae_light_female_pike_charge_up',0),(14146,46625,'kill_fae_light_female_pike_defensive_buff',0),(14147,46626,'kill_fae_light_female_pike_offensive_buff',0),(14148,46627,'kill_fae_light_untrained_ouch01',0),(14149,46628,'kill_gnome_female_pike_charge_up',0),(14150,46629,'kill_gnome_female_pike_defensive_buff',0),(14151,46630,'kill_gnome_female_pike_offensive_buff',0),(14152,46631,'kill_halfelf_female_pike_charge_up',0),(14153,46632,'kill_halfelf_female_pike_defensive_buff',0),(14154,46633,'kill_halfelf_female_pike_offensive_buff',0),(14155,46634,'kill_highelf_female_pike_charge_up',0),(14156,46635,'kill_highelf_female_pike_defensive_buff',0),(14157,46636,'kill_highelf_female_pike_offensive_buff',0),(14158,46637,'kill_human_female_pike_charge_up',0),(14159,46638,'kill_human_female_pike_defensive_buff',0),(14160,46639,'kill_human_female_pike_offensive_buff',0),(14161,46640,'kill_iksar_female_pike_charge_up',0),(14162,46641,'kill_iksar_female_pike_defensive_buff',0),(14163,46642,'kill_iksar_female_pike_offensive_buff',0),(14164,46644,'kill_kerra_female_pike_charge_up',0),(14165,46645,'kill_kerra_female_pike_defensive_buff',0),(14166,46646,'kill_kerra_female_pike_offensive_buff',0),(14167,46647,'kill_ratonga_female_pike_charge_up',0),(14168,46648,'kill_ratonga_female_pike_defensive_buff',0),(14169,46649,'kill_ratonga_female_pike_offensive_buff',0),(14170,46651,'kill_troll_female_pike_charge_up',0),(14171,46652,'kill_troll_female_pike_defensive_buff',0),(14172,46653,'kill_troll_female_pike_offensive_buff',0),(14173,46654,'kill_woodelf_female_pike_charge_up',0),(14174,46655,'kill_woodelf_female_pike_defensive_buff',0),(14175,46656,'kill_woodelf_female_pike_offensive_buff',0),(14176,46705,'kill_design_frostfell_candy_canes',0),(14177,46726,'kill_fire_hearts',0),(14178,46778,'kill_result_heart_vision',0),(14179,46779,'kill_result_heartbreak',0),(14180,46791,'kill_result_flies',0),(14181,46792,'kill_result_weapon_trail_poison',0),(14182,46943,'kill_result_dagger_vision_p2p',0),(14183,46944,'kill_result_heart_vision_p2p',0),(14184,46954,'kill_flirt_short_butt',0),(14185,46955,'kill_flirt_short_leg',0),(14186,46956,'kill_flirt_short_shake',0),(14187,46957,'kill_flirt_short_wave',0),(14188,46958,'kill_flirt_short_wave2',0),(14189,46959,'kill_flirt_short_wave3',0),(14190,46961,'kill_result_heart_success',0),(14191,46991,'kill_design_result_static_scare',0),(14192,46993,'kill_result_fog_poison_billboards',0),(14193,46994,'kill_result_fog_poison_billboards_small',0),(14194,46995,'kill_result_fog_poison_billboards_thinner',0),(14195,46996,'kill_roxbury',0),(14196,47010,'kill_cast_pfx_notes_l',0),(14197,47011,'kill_cast_pfx_notes_r',0),(14198,47080,'kill_sound_unrest_quel_piano',0),(14199,47091,'kill_water',0),(14200,47132,'kill_1h_wand_attack',0),(14201,47133,'kill_1h_wand_attack01',0),(14202,47134,'kill_1h_wand_attack02',0),(14203,47135,'kill_1h_wand_attack03',0),(14204,47136,'kill_1h_wand_attack_recoil',0),(14205,47137,'kill_1h_wand_attack_recoil01',0),(14206,47138,'kill_1h_wand_attack_recoil02',0),(14207,47139,'kill_1h_wand_attack_recoil03',0),(14208,47140,'kill_1h_wand_backup',0),(14209,47141,'kill_1h_wand_dodge_backhand',0),(14210,47142,'kill_1h_wand_dodge_down',0),(14211,47143,'kill_1h_wand_dodge_forehand',0),(14212,47144,'kill_1h_wand_dodge_thrust',0),(14213,47145,'kill_1h_wand_enter',0),(14214,47146,'kill_1h_wand_exit',0),(14215,47147,'kill_1h_wand_idle',0),(14216,47148,'kill_1h_wand_ouch_backhand',0),(14217,47149,'kill_1h_wand_ouch_down',0),(14218,47150,'kill_1h_wand_ouch_forehand',0),(14219,47151,'kill_1h_wand_ouch_thrust',0),(14220,47152,'kill_1h_wand_parry_backhand',0),(14221,47153,'kill_1h_wand_parry_down',0),(14222,47154,'kill_1h_wand_parry_forehand',0),(14223,47155,'kill_1h_wand_parry_thrust',0),(14224,47156,'kill_1h_wand_strafe_left',0),(14225,47157,'kill_1h_wand_strafe_right',0),(14226,47158,'kill_1h_wand_walk',0),(14227,47169,'kill_snd_design_unrest_zombie_scare',0),(14228,47175,'kill_constant2_fx',0),(14229,47188,'kill_result_sparkles_explode_noise',0),(14230,47190,'kill_sound_howl',0),(14231,47228,'kill_attack_recoil',0),(14232,47229,'kill_attack_recoil01',0),(14233,47230,'kill_attack_recoil02',0),(14234,47231,'kill_attack_recoil03',0),(14235,47237,'kill_parry_backhand',0),(14236,47238,'kill_parry_down',0),(14237,47239,'kill_parry_forehand',0),(14238,47240,'kill_parry_thrust',0),(14239,47265,'kill_monk_offensive_buff_short',0),(14240,47274,'kill_result_sparkle_trail_weapon_right_glow_blend_brown',0),(14241,47275,'kill_result_sparkle_trail_weapon_right_glow_blend_purple',0),(14242,47276,'kill_result_sparkle_trail_weapon_right_glow_silver',0),(14243,47277,'kill_result_sparkle_trail_weapon_right_glow_tan',0),(14244,47287,'kill_1h_pierce_attack_03',0),(14245,47303,'kill_result_sparkle_trail_rightfoot_glow',0),(14246,47323,'kill_cast_mist_sphere_sub',0),(14247,47329,'kill_result_ghost_shield_p2p',0),(14248,47344,'kill_design_flying_barrel',0),(14249,47353,'kill_result_breaking_faith_wall',0),(14250,47357,'kill_cached_state2',0),(14251,47391,'kill_result_flash_weapon_brown',0),(14252,47392,'kill_result_flash_weapon_purple',0),(14253,47393,'kill_result_flash_weapon_silver',0),(14254,47394,'kill_result_glow_weapon_tan',0),(14255,47395,'kill_result_mist_clingy_sub',0),(14256,47396,'kill_result_shout',0),(14257,47449,'kill_cast_debuff_blend',0),(14258,47452,'kill_cast_shield_grow_blend',0),(14259,47489,'kill_design_result_bubble_ring',0),(14260,47504,'kill_fel_epic_symbol',0),(14261,47507,'kill_warg_backup',0),(14262,47508,'kill_warg_fall',0),(14263,47509,'kill_warg_idle',0),(14264,47510,'kill_warg_jump',0),(14265,47511,'kill_warg_jump_substitute',0),(14266,47512,'kill_warg_land',0),(14267,47513,'kill_warg_long_fall',0),(14268,47514,'kill_warg_run',0),(14269,47515,'kill_warg_turn_left',0),(14270,47516,'kill_warg_turn_right',0),(14271,47517,'kill_warg_walk',0),(14272,47565,'kill_electric_hands_l',0),(14273,47566,'kill_electric_hands_r',0),(14274,47570,'kill_trdskl_horn',0),(14275,47578,'kill_warg_idle01',0),(14276,47579,'kill_warg_idle02',0),(14277,47607,'kill_pawstep_trigger',0),(14278,47637,'kill_result_deathward_heal',0),(14279,47638,'kill_result_doppleganger_p2p',0),(14280,47639,'kill_result_eyehand_buff',0),(14281,47657,'kill_cast_acid_storm_damage',0),(14282,47663,'kill_result_acid_rain_damage',0),(14283,47664,'kill_result_acid_storm_damage',0),(14284,47672,'kill_pawstep',0),(14285,47681,'kill_pawstep_snow',0),(14286,47686,'kill_snd_horn_centaur',0),(14287,47687,'kill_snd_horn_conch',0),(14288,47688,'kill_snd_horn_gnoll',0),(14289,47689,'kill_snd_horn_goblin',0),(14290,47692,'kill_cast_ball_lightning_damage',0),(14291,47693,'kill_cast_conjuror',0),(14292,47705,'kill_result_countersong_p2p',0),(14293,47706,'kill_result_rays_of_disintigration',0),(14294,47707,'kill_result_rays_of_disintigration_p2p',0),(14295,47713,'kill_cast_vampirism_p2p',0),(14296,47715,'kill_froglok_warg_idle',0),(14297,47716,'kill_froglok_warg_jump_substitute',0),(14298,47746,'kill_particle_mood_combat_enter',0),(14299,47747,'kill_result_fatal_followup',0),(14300,47748,'kill_result_puppetmaster',0),(14301,47757,'kill_special',0),(14302,47764,'kill_result_barrier',0),(14303,47765,'kill_result_softkill',0),(14304,47769,'kill_cast_leaf_blower_p2p',0),(14305,47772,'kill_cast_waterflush_p2p',0),(14306,47775,'kill_result_firewhimsy_p2p',0),(14307,47776,'kill_result_leaves_sticky',0),(14308,47777,'kill_result_p2p_lightning_bolts',0),(14309,47819,'kill_design_spotlight',0),(14310,47821,'kill_pawstep_leather_carpet',0),(14311,47822,'kill_pawstep_leather_dirt',0),(14312,47823,'kill_pawstep_leather_grass',0),(14313,47824,'kill_pawstep_leather_gravel',0),(14314,47825,'kill_pawstep_leather_ice',0),(14315,47826,'kill_pawstep_leather_metal',0),(14316,47827,'kill_pawstep_leather_mud',0),(14317,47828,'kill_pawstep_leather_sand',0),(14318,47829,'kill_pawstep_leather_snow',0),(14319,47830,'kill_pawstep_leather_stone',0),(14320,47831,'kill_pawstep_leather_water',0),(14321,47832,'kill_pawstep_leather_wood',0),(14322,47862,'kill_snd_fire_large_loop',0),(14323,47877,'kill_sound_peck',0),(14324,47885,'kill_sound_damagefeather',0),(14325,47888,'kill_cast_dirge_stringed_loop',0),(14326,47890,'kill_cast_horn_blowing_end',0),(14327,47891,'kill_cast_horn_blowing_loop',0),(14328,47896,'kill_fae_dark_1h_sword_attack',0),(14329,47897,'kill_fae_dark_1h_sword_attack01',0),(14330,47898,'kill_fae_dark_1h_sword_attack02',0),(14331,47899,'kill_fae_dark_1h_sword_attack03',0),(14332,47900,'kill_fae_dark_1h_sword_death_blow',0),(14333,47901,'kill_fae_dark_1h_sword_death_blow01',0),(14334,47902,'kill_fae_dark_1h_sword_dodge_backhand',0),(14335,47903,'kill_fae_dark_1h_sword_dodge_down',0),(14336,47904,'kill_fae_dark_1h_sword_dodge_forehand',0),(14337,47905,'kill_fae_dark_1h_sword_dodge_thrust',0),(14338,47906,'kill_fae_dark_1h_sword_ouch_backhand',0),(14339,47907,'kill_fae_dark_1h_sword_ouch_down',0),(14340,47908,'kill_fae_dark_1h_sword_ouch_forehand',0),(14341,47909,'kill_fae_dark_1h_sword_ouch_thrust',0),(14342,47910,'kill_fae_dark_1h_sword_parry_backhand',0),(14343,47911,'kill_fae_dark_1h_sword_parry_down',0),(14344,47912,'kill_fae_dark_1h_sword_parry_forehand',0),(14345,47913,'kill_fae_dark_1h_sword_parry_thrust',0),(14346,47914,'kill_fae_dark_2h_sword_attack',0),(14347,47915,'kill_fae_dark_2h_sword_attack01',0),(14348,47916,'kill_fae_dark_2h_sword_attack02',0),(14349,47917,'kill_fae_dark_2h_sword_defensive_buff',0),(14350,47918,'kill_fae_dark_2h_sword_dodge_backhand',0),(14351,47919,'kill_fae_dark_2h_sword_dodge_down',0),(14352,47920,'kill_fae_dark_2h_sword_dodge_forehand',0),(14353,47921,'kill_fae_dark_2h_sword_enter',0),(14354,47922,'kill_fae_dark_2h_sword_kick',0),(14355,47923,'kill_fae_dark_2h_sword_ouch_backhand',0),(14356,47924,'kill_fae_dark_2h_sword_ouch_down',0),(14357,47925,'kill_fae_dark_2h_sword_ouch_forehand',0),(14358,47926,'kill_fae_dark_2h_sword_ouch_thrust',0),(14359,47927,'kill_fae_dark_2h_sword_whirling_attack',0),(14360,47928,'kill_fae_dark_2h_sword_wild_swing',0),(14361,47929,'kill_fae_dark_bostaff_attack01',0),(14362,47930,'kill_fae_dark_bostaff_attack02',0),(14363,47931,'kill_fae_dark_bostaff_attack03',0),(14364,47932,'kill_fae_dark_bostaff_dodge_backhand',0),(14365,47933,'kill_fae_dark_bostaff_dodge_forehand',0),(14366,47934,'kill_fae_dark_climbing_backup',0),(14367,47935,'kill_fae_dark_climbing_enter_down_root',0),(14368,47936,'kill_fae_dark_climbing_exit_up_root',0),(14369,47937,'kill_fae_dark_climbing_idle',0),(14370,47938,'kill_fae_dark_climbing_strafe_left',0),(14371,47939,'kill_fae_dark_climbing_strafe_right',0),(14372,47940,'kill_fae_dark_climbing_walk',0),(14373,47941,'kill_fae_dark_dance',0),(14374,47942,'kill_fae_dark_dead',0),(14375,47943,'kill_fae_dark_dead_enter',0),(14376,47944,'kill_fae_dark_dual_wield_attack',0),(14377,47945,'kill_fae_dark_dual_wield_attack01',0),(14378,47946,'kill_fae_dark_dual_wield_attack02',0),(14379,47947,'kill_fae_dark_dual_wield_attack03',0),(14380,47948,'kill_fae_dark_dual_wield_dodge_backhand',0),(14381,47949,'kill_fae_dark_dual_wield_dodge_forehand',0),(14382,47950,'kill_fae_dark_dual_wield_kick',0),(14383,47951,'kill_fae_dark_dual_wield_ouch_backhand',0),(14384,47952,'kill_fae_dark_dual_wield_ouch_forehand',0),(14385,47953,'kill_fae_dark_dual_wield_parry_down',0),(14386,47954,'kill_fae_dark_dual_wield_whirling_attack',0),(14387,47955,'kill_fae_dark_dual_wield_wild_swing',0),(14388,47956,'kill_fae_dark_idle',0),(14389,47957,'kill_fae_dark_monk_attack',0),(14390,47958,'kill_fae_dark_monk_attack01',0),(14391,47959,'kill_fae_dark_monk_attack02',0),(14392,47960,'kill_fae_dark_monk_attack03',0),(14393,47961,'kill_fae_dark_monk_dodge_backhand',0),(14394,47962,'kill_fae_dark_monk_dodge_down',0),(14395,47963,'kill_fae_dark_monk_wild_swing',0),(14396,47964,'kill_fae_dark_pike_attack',0),(14397,47965,'kill_fae_dark_pike_attack01',0),(14398,47966,'kill_fae_dark_pike_attack02',0),(14399,47967,'kill_fae_dark_pike_kick',0),(14400,47968,'kill_fae_dark_pike_whirling_attack',0),(14401,47969,'kill_fae_dark_pike_wild_swing',0),(14402,47970,'kill_fae_dark_pugilist_attack',0),(14403,47971,'kill_fae_dark_pugilist_attack02',0),(14404,47972,'kill_fae_dark_pugilist_kick',0),(14405,47973,'kill_fae_dark_pugilist_whirling_attack',0),(14406,47974,'kill_fae_dark_pugilist_wild_swing',0),(14407,47975,'kill_fae_dark_run',0),(14408,47976,'kill_fae_dark_sit_enter',0),(14409,47977,'kill_fae_dark_sit_exit',0),(14410,47978,'kill_fae_dark_sit_idle',0),(14411,47979,'kill_fae_dark_untrained_ouch01',0),(14412,48000,'kill_cast_summon_undead_assemble',0),(14413,48001,'kill_cast_summon_undead_cyclone',0),(14414,48002,'kill_cast_summon_undead_flame_spurt',0),(14415,48003,'kill_cast_summon_undead_yawn',0),(14416,48013,'kill_result_clouds_head',0),(14417,48014,'kill_run01',0),(14418,48015,'kill_run02',0),(14419,48026,'kill_cast_bard_drum_persist',0),(14420,48027,'kill_cast_bard_flute_persist',0),(14421,48028,'kill_cast_bard_stringed_persist',0),(14422,48033,'kill_result_soulsuck_p2p',0),(14423,48069,'kill_design_fireworks_show_10',0),(14424,48070,'kill_design_fireworks_show_2',0),(14425,48071,'kill_design_fireworks_show_4',0),(14426,48072,'kill_design_fireworks_show_6',0),(14427,48075,'kill_sound_bud',0),(14428,48076,'kill_sound_idle_legs',0),(14429,48089,'kill_design_neriak_opera_backdrop_moon',0),(14430,48090,'kill_design_neriak_opera_backdrop_palace',0),(14431,48091,'kill_design_neriak_opera_backdrop_sky',0),(14432,48092,'kill_design_neriak_opera_backdrop_trees',0),(14433,48102,'kill_trdskl_metal_sparks',0),(14434,48131,'kill_sound_deathwing',0),(14435,48132,'kill_sound_idlebreathe',0),(14436,48133,'kill_sound_idlewing',0),(14437,48134,'kill_sound_stinger',0),(14438,48135,'kill_sound_swooshstinger',0),(14439,48177,'kill_result_anvil_drop',0),(14440,48186,'kill_walk01',0),(14441,48187,'kill_walk02',0),(14442,48243,'kill_result_star_burst',0),(14443,48244,'kill_result_stunned_star',0),(14444,48297,'kill_attack_02',0),(14445,48301,'kill_green_smoke-ouch',0),(14446,48302,'kill_green_smoke_ouch',0),(14447,48304,'kill_royal_wave_short',0),(14448,48306,'kill_spike_ball01',0),(14449,48307,'kill_spike_ball02',0),(14450,48308,'kill_spike_ball03',0),(14451,48356,'kill_draw_weapon',0),(14452,48357,'kill_fel_epic_symbol_outer',0),(14453,48379,'kill_draw_weapon_idle',0),(14454,48382,'kill_sheathe_weapon_idle',0),(14455,48383,'kill_fade_cast_sound',0),(14456,48384,'kill_fade_reverse_sound',0),(14457,48385,'kill_cast_poison_dragon_breath_test',0),(14458,48386,'kill_cast_pricecheck',0),(14459,48387,'kill_constant_fx',0),(14460,48388,'kill_instant_fx',0),(14461,48389,'kill_sd_spiritdescend_snd',0),(14462,48390,'kill_1h_sword_idle01',0),(14463,48397,'kill_paperdoll',0),(14464,48405,'kill_tail_combat',0),(14465,48408,'kill_aura_yellow',0),(14466,48409,'kill_cast_lhand_sparkle_trail_blend',0),(14467,48412,'kill_cast_rhand_sparkle_trail_blend',0),(14468,48420,'kill_tail_run',0),(14469,48425,'kill_climbing_chainmail_rope',0),(14470,48426,'kill_climbing_leather_rope',0),(14471,48427,'kill_climbing_metal_rope',0),(14472,48430,'kill_run_tail',0),(14473,48437,'kill_result_cold_ice_crystals_hands',0),(14474,48438,'kill_result_cold_ice_crystals_lefthand',0),(14475,48439,'kill_result_cold_ice_crystals_righthand',0),(14476,48440,'kill_result_hand_rings_fire',0),(14477,48441,'kill_result_hand_rings_ice',0),(14478,48442,'kill_result_hand_rings_lightning',0),(14479,48443,'kill_result_rock_hands',0),(14480,48446,'kill_attack_fx',0),(14481,48453,'kill_result_plant_filaments',0),(14482,48461,'kill_sound_damagestone',0),(14483,48462,'kill_sound_deadloud',0),(14484,48467,'kill_cast_skull_grow',0),(14485,48468,'kill_cast_sonic_ring',0),(14486,48469,'kill_cast_sonic_ring_vertical',0),(14487,48472,'kill_result_poison_cysts_popping',0),(14488,48473,'kill_result_silence',0),(14489,48480,'kill_result_gangrene',0),(14490,48488,'kill_snd_aof_anvilfall',0),(14491,48489,'kill_snd_aof_anvilhit',0),(14492,48497,'kill_snd_acidrain_cast',0),(14493,48498,'kill_snd_acidrain_result',0),(14494,48504,'kill_death',0),(14495,48507,'kill_sheathe_weapon',0),(14496,48508,'kill_snd_design_terror001',0),(14497,48509,'kill_snd_design_terror002',0),(14498,48510,'kill_snd_design_terror003',0),(14499,48511,'kill_snd_design_terror004',0),(14500,48512,'kill_snd_design_terror005',0),(14501,48513,'kill_snd_design_terror006',0),(14502,48514,'kill_snd_design_terror007',0),(14503,48515,'kill_snd_design_terror008',0),(14504,48516,'kill_snd_design_terror009',0),(14505,48517,'kill_snd_design_terror010',0),(14506,48518,'kill_snd_design_terror011',0),(14507,48519,'kill_snd_design_terror012',0),(14508,48520,'kill_snd_design_terror020',0),(14509,48521,'kill_sound_blow',0),(14510,48522,'kill_sound_deathfall1',0),(14511,48523,'kill_sound_deathfall2',0),(14512,48531,'kill_sound_idlehit',0),(14513,48532,'kill_sound_idleyell',0),(14514,48539,'kill_kick_fx',0),(14515,48540,'kill_result_bucket',0),(14516,48547,'kill_result_lava_burst',0),(14517,48548,'kill_rhino_backup',0),(14518,48549,'kill_rhino_idle',0),(14519,48550,'kill_rhino_jump_substitute',0),(14520,48551,'kill_rhino_run',0),(14521,48552,'kill_rhino_turn_left',0),(14522,48553,'kill_rhino_turn_right',0),(14523,48554,'kill_rhino_walk',0),(14524,48561,'kill_result_blast_cone_aoe',0),(14525,48562,'kill_result_pants_off',0),(14526,48569,'kill_result_god_spell_bristlebane',0),(14527,48575,'kill_design_plant_attack',0),(14528,48577,'kill_rhino_fall',0),(14529,48578,'kill_rhino_jump',0),(14530,48579,'kill_rhino_land',0),(14531,48586,'kill_result_cocoon_blue',0),(14532,48587,'kill_result_cocoon_green',0),(14533,48588,'kill_result_cocoon_red',0),(14534,48589,'kill_result_cocoon_yellow',0),(14535,48590,'kill_result_web_shooting_p2p',0),(14536,48596,'kill_fly_combat',0),(14537,48597,'kill_fly_combat01',0),(14538,48598,'kill_fly_enter',0),(14539,48599,'kill_fly_exit',0),(14540,48602,'kill_snd_cow_moo',0),(14541,48603,'kill_trdskl_beehive',0),(14542,48610,'kill_result_bee_breath',0),(14543,48611,'kill_result_beehive_hit',0),(14544,48613,'kill_sound_ribbit',0),(14545,48614,'kill_sound_tonguesplat',0),(14546,48619,'kill_cast_wild_heart_buff',0),(14547,48622,'kill_persist_fear_skulls',0),(14548,48623,'kill_persist_wild_heart_beating',0),(14549,48629,'kill_drag_sparks',0),(14550,48630,'kill_ground_blast',0),(14551,48632,'kill_pawbuster_attack_enter',0),(14552,48633,'kill_pawbuster_attack_exit',0),(14553,48634,'kill_pawbuster_attack_idle',0),(14554,48635,'kill_result_webby_root',0),(14555,48643,'kill_sparkle_trail_weapon',0),(14556,48644,'kill_sparkle_trail_weapon_spiral',0),(14557,48649,'kill_cast_webshoot',0),(14558,48650,'kill_cast_webshoot_p2p',0),(14559,48654,'kill_walk_tail',0),(14560,48659,'kill_cast_trace_firespikes_sub_l',0),(14561,48660,'kill_cast_trace_firespikes_sub_r',0),(14562,48667,'kill_pugilist_charge_up_long',0),(14563,48675,'kill_spike_fist',0),(14564,48681,'kill_fx_on',0),(14565,48683,'kill_result_ground_blast_ring',0),(14566,48689,'kill_griffin_glide',0),(14567,48695,'kill_idle_to_combat',0),(14568,48702,'kill_result_fire_object',0),(14569,48709,'kill_rhino_long_fall',0),(14570,48710,'kill_rhino_strafe_left',0),(14571,48711,'kill_rhino_strafe_right',0),(14572,48712,'kill_run_tail_cloak',0),(14573,48714,'kill_walk_tail_cloak',0),(14574,48717,'kill_beam0_blue',0),(14575,48718,'kill_beam0_red',0),(14576,48719,'kill_beam0_yellow',0),(14577,48720,'kill_beam1_blue',0),(14578,48721,'kill_beam1_red',0),(14579,48722,'kill_beam1_yellow',0),(14580,48723,'kill_beam2_blue',0),(14581,48724,'kill_beam2_red',0),(14582,48725,'kill_beam2_yellow',0),(14583,48726,'kill_beam3_blue',0),(14584,48727,'kill_beam3_red',0),(14585,48728,'kill_beam3_yellow',0),(14586,48729,'kill_beam_door',0),(14587,48734,'kill_cast_shards',0),(14588,48735,'kill_cast_shards_blast',0),(14589,48738,'kill_mood_dance',0),(14590,48741,'kill_beam_miss_orange',0),(14591,48742,'kill_beam_miss_purple',0),(14592,48743,'kill_cast_dragon_pbae_lightning_red',0),(14593,48744,'kill_cast_dual_shards',0),(14594,48747,'kill_cast_shard_cloud_blast',0),(14595,48748,'kill_cast_shard_lightning',0),(14596,48749,'kill_cast_shard_pulse',0),(14597,48750,'kill_cast_shards_fusion',0),(14598,48751,'kill_cast_shards_merging',0),(14599,48757,'kill_ghost_idle',0),(14600,48762,'kill_cha_beam_blast0',0),(14601,48763,'kill_cha_beam_blast1',0),(14602,48764,'kill_cha_beam_blast2',0),(14603,48765,'kill_cha_beam_blast_up',0),(14604,48771,'kill_design_charasis_beams_purple',0),(14605,48772,'kill_design_charasis_beams_turquoise',0),(14606,48779,'kill_result_ghost_forced_shader_4_green',0),(14607,48780,'kill_result_ghost_forced_shader_4_red',0),(14608,48787,'kill_result_barrier_blue',0),(14609,48788,'kill_result_barrier_red',0),(14610,48789,'kill_result_barrier_yellow',0),(14611,48795,'kill_design_blood_puddle',0),(14612,48797,'kill_result_berserker_black_eyes',0),(14613,48798,'kill_result_berserker_blue_eyes',0),(14614,48799,'kill_result_berserker_purple_eyes',0),(14615,48800,'kill_result_berserker_white_eyes',0),(14616,48805,'kill_combat_idle2',0),(14617,48807,'kill_design_charasis_windfan_fx',0),(14618,48810,'kill_cast_no_target_blue_star',0),(14619,48814,'kill_design_charasis_theater_fx',0),(14620,48815,'kill_design_charasis_vision_fens',0),(14621,48816,'kill_design_charasis_vision_jarsath',0),(14622,48817,'kill_design_charasis_vision_kunzar',0),(14623,48818,'kill_design_charasis_vision_kylong',0),(14624,48824,'kill_dance_enter',0),(14625,48825,'kill_dance_exit',0),(14626,48827,'kill_result_ghost_shadow',0),(14627,48833,'kill_design_lava_projectile',0),(14628,48834,'kill_design_vision_teleport_veeshans',0),(14629,48842,'kill_sound_fall001',0),(14630,48848,'kill_design_veeshans_barrier',0),(14631,48854,'kill_design_veeshans_rock_drop',0),(14632,48857,'kill_sound_belly001',0),(14633,48858,'kill_sound_belly002',0),(14634,48863,'kill_cast_summon_undead_cyclone_green',0),(14635,48865,'kill_goo_arm_buff',0),(14636,48867,'kill_result_pus_bolt_p2p',0),(14637,48868,'kill_result_pus_splat',0),(14638,48869,'kill_result_sickly_aura_aoe',0),(14639,48870,'kill_ring',0),(14640,48876,'kill_design_vision_teleport_traks_lair',0),(14641,48877,'kill_draw_weapon_primary_trigger',0),(14642,48878,'kill_draw_weapon_secondary_trigger',0),(14643,48880,'kill_result_barrier_orange',0),(14644,48881,'kill_result_gavel_pound',0),(14645,48882,'kill_result_stinky_aura',0),(14646,48883,'kill_screen_shake',0),(14647,48885,'kill_sheathe_weapon_primary_trigger',0),(14648,48886,'kill_sheathe_weapon_secondary_trigger',0),(14649,48887,'kill_stomp_sound',0),(14650,48895,'kill_sound_bone',0),(14651,48896,'kill_sound_bonedeath',0),(14652,48903,'kill_result_glade',0),(14653,48904,'kill_result_ice_storm',0),(14654,48905,'kill_result_shroud_of_clouds',0),(14655,48911,'kill_design_karnors_beam_center',0),(14656,48912,'kill_design_karnors_beam_left',0),(14657,48913,'kill_design_karnors_beam_right',0),(14658,48915,'kill_result_timed_heart_tap',0),(14659,48917,'kill_sound_yawn',0),(14660,48922,'kill_combat_attack',0),(14661,48925,'kill_mount_attack01',0),(14662,48926,'kill_mount_combat_idle',0),(14663,48927,'kill_mount_ouch',0),(14664,48928,'kill_mount_ouch01',0),(14665,48929,'kill_result_soul_attack_p2p',0),(14666,48930,'kill_rhino_sprint',0),(14667,48931,'kill_sarnak_1h_crush_idle',0),(14668,48932,'kill_sarnak_1h_pierce_idle',0),(14669,48933,'kill_sarnak_1h_sword_idle',0),(14670,48934,'kill_sarnak_1h_thrown_idle',0),(14671,48935,'kill_sarnak_2h_sword_idle',0),(14672,48936,'kill_sarnak_backup',0),(14673,48937,'kill_sarnak_backup_run',0),(14674,48938,'kill_sarnak_bostaff_idle',0),(14675,48939,'kill_sarnak_combat_idle',0),(14676,48940,'kill_sarnak_dual_wield_idle',0),(14677,48941,'kill_sarnak_fall',0),(14678,48942,'kill_sarnak_idle',0),(14679,48943,'kill_sarnak_idle01',0),(14680,48944,'kill_sarnak_monk_idle',0),(14681,48945,'kill_sarnak_pike_idle',0),(14682,48946,'kill_sarnak_pugilist_idle',0),(14683,48947,'kill_sarnak_rhino_backup',0),(14684,48948,'kill_sarnak_rhino_idle',0),(14685,48949,'kill_sarnak_rhino_jump_substitute',0),(14686,48950,'kill_sarnak_rhino_run',0),(14687,48951,'kill_sarnak_rhino_strafe_left',0),(14688,48952,'kill_sarnak_rhino_strafe_right',0),(14689,48953,'kill_sarnak_rhino_turn_left',0),(14690,48954,'kill_sarnak_rhino_turn_right',0),(14691,48955,'kill_sarnak_run',0),(14692,48956,'kill_sarnak_run_03',0),(14693,48957,'kill_sarnak_run_down_idle',0),(14694,48958,'kill_sarnak_run_long',0),(14695,48959,'kill_sarnak_run_up_idle',0),(14696,48960,'kill_sarnak_sit_enter',0),(14697,48961,'kill_sarnak_sit_exit',0),(14698,48962,'kill_sarnak_sit_idle',0),(14699,48963,'kill_sarnak_strafe_left_run',0),(14700,48964,'kill_sarnak_strafe_right_run',0),(14701,48965,'kill_sarnak_sway_l',0),(14702,48966,'kill_sarnak_sway_r',0),(14703,48967,'kill_sarnak_untrained_idle',0),(14704,48968,'kill_sarnak_walk',0),(14705,48971,'kill_carpet_backup',0),(14706,48977,'kill_sokokar_idle',0),(14707,48978,'kill_sokokar_run',0),(14708,48979,'kill_sokokar_walk',0),(14709,48986,'kill_pus_splat',0),(14710,48988,'kill_sound_cast001',0),(14711,48989,'kill_sound_cast002',0),(14712,48990,'kill_sound_slam',0),(14713,48993,'kill_aura_green',0),(14714,48996,'kill_cast_venril_beam_buff',0),(14715,48997,'kill_cast_venril_crystal',0),(14716,48998,'kill_cast_venril_ring',0),(14717,48999,'kill_cast_venril_ring_buff',0),(14718,49002,'kill_result_ghosts',0),(14719,49008,'kill_death_enter',0),(14720,49009,'kill_death_tail',0),(14721,49010,'kill_hand_fx_left',0),(14722,49011,'kill_hand_fx_right',0),(14723,49014,'kill_sokokar_glide',0),(14724,49015,'kill_sound_deadeye001',0),(14725,49016,'kill_sound_deadeye002',0),(14726,49017,'kill_sound_deathdeflate',0),(14727,49018,'kill_sound_smoke',0),(14728,49023,'kill_cast_trail_head',0),(14729,49030,'kill_manipulate',0),(14730,49038,'kill_sound_bones',0),(14731,49039,'kill_sound_deathghost',0),(14732,49045,'kill_eye_beams',0),(14733,49047,'kill_result_pus_rain_aoe',0),(14734,49048,'kill_sarnak_1h_crush_enter',0),(14735,49049,'kill_sarnak_1h_pierce_enter',0),(14736,49050,'kill_sarnak_1h_sword_attack',0),(14737,49051,'kill_sarnak_1h_sword_attack02',0),(14738,49052,'kill_sarnak_1h_sword_attack03',0),(14739,49053,'kill_sarnak_1h_sword_death_blow',0),(14740,49054,'kill_sarnak_1h_sword_death_blow01',0),(14741,49055,'kill_sarnak_1h_sword_enter',0),(14742,49056,'kill_sarnak_1h_sword_exit',0),(14743,49057,'kill_sarnak_1h_thrown_enter',0),(14744,49058,'kill_sarnak_1h_wand_enter',0),(14745,49059,'kill_sarnak_1h_wand_idle',0),(14746,49060,'kill_sarnak_2h_sword_enter',0),(14747,49061,'kill_sarnak_dead',0),(14748,49062,'kill_sarnak_dead_enter',0),(14749,49069,'kill_result_fireworks_confetti',0),(14750,49072,'kill_cast_breath_divine',0),(14751,49073,'kill_cast_breath_magic',0),(14752,49080,'kill_result_breath_magic',0),(14753,49086,'kill_design_green_mist',0),(14754,49088,'kill_power_up',0),(14755,49089,'kill_sarnak_2h_sword_attack',0),(14756,49090,'kill_sarnak_2h_sword_attack01',0),(14757,49091,'kill_sarnak_2h_sword_attack02',0),(14758,49092,'kill_sarnak_2h_sword_kick',0),(14759,49093,'kill_sarnak_monk_enter',0),(14760,49096,'kill_cast_dragon_tail_trail',0),(14761,49097,'kill_cast_dragon_tail_trail_long',0),(14762,49098,'kill_cast_dragon_wing_buffet',0),(14763,49102,'kill_horse_combat_idle',0),(14764,49104,'kill_result_fleas',0),(14765,49105,'kill_sarnak_bow_enter',0),(14766,49106,'kill_sarnak_bow_idle',0),(14767,49108,'kill_sound_attack_main',0),(14768,49109,'kill_sound_attack_medusa',0),(14769,49110,'kill_sound_attack_mouth',0),(14770,49111,'kill_sound_damage_medusa',0),(14771,49112,'kill_sound_damage_mouth',0),(14772,49113,'kill_sound_death_medusa',0),(14773,49114,'kill_sound_death_mouth',0),(14774,49115,'kill_sound_enter',0),(14775,49116,'kill_sound_enter_vocal',0),(14776,49117,'kill_sound_swing',0),(14777,49124,'kill_result_god_cackle_tribunal',0),(14778,49125,'kill_result_god_spell_bertoxxulous',0),(14779,49126,'kill_result_god_spell_karana',0),(14780,49127,'kill_result_god_spell_tribunal',0),(14781,49129,'kill_snd_rain_9s',0),(14782,49130,'kill_trdskl_barracuda',0),(14783,49133,'kill_cast_dragon_breath_cold',0),(14784,49134,'kill_cast_dragon_breath_heat',0),(14785,49135,'kill_cast_dragon_breath_lightning',0),(14786,49136,'kill_cast_dragon_breath_poison',0),(14787,49137,'kill_cast_drake_breath_cold',0),(14788,49138,'kill_cast_drake_breath_lightning',0),(14789,49139,'kill_cast_drake_breath_magic_divine',0),(14790,49140,'kill_cast_drake_breath_poison',0),(14791,49144,'kill_design_ball_summon',0),(14792,49145,'kill_design_leash',0),(14793,49146,'kill_design_lightning_ground',0),(14794,49147,'kill_design_pillar_summon',0),(14795,49149,'kill_ouch_back',0),(14796,49150,'kill_sarnak_dual_wield_attack01',0),(14797,49152,'kill_sit_idle_tail',0),(14798,49159,'kill_runes_shissar1',0),(14799,49160,'kill_runes_shissar2',0),(14800,49161,'kill_runes_shissar3',0),(14801,49162,'kill_runes_shissar4',0),(14802,49163,'kill_runes_shissar5',0),(14803,49164,'kill_runes_shissar6',0),(14804,49165,'kill_runes_shissar7',0),(14805,49166,'kill_runes_shissar8',0),(14806,49173,'kill_pike_advance',0),(14807,49180,'kill_result_trakanon_static_repulsion',0),(14808,49186,'kill_design_poison_splashes',0),(14809,49188,'kill_particle_teleport',0),(14810,49190,'kill_wizard_rune_blast',0),(14811,49197,'kill_result_hand_rings_smoke',0),(14812,49198,'kill_result_pie_splat',0),(14813,49199,'kill_sarnak_1h_crush_attack',0),(14814,49200,'kill_sarnak_1h_crush_attack02',0),(14815,49201,'kill_sarnak_1h_crush_attack03',0),(14816,49202,'kill_sarnak_1h_pierce_attack',0),(14817,49203,'kill_sarnak_bostaff_attack',0),(14818,49204,'kill_sarnak_bostaff_attack01',0),(14819,49205,'kill_sarnak_bostaff_attack02',0),(14820,49206,'kill_sarnak_bostaff_attack03',0),(14821,49207,'kill_sarnak_dual_wield_attack',0),(14822,49208,'kill_sarnak_dual_wield_attack02',0),(14823,49209,'kill_sarnak_fishing_cast',0),(14824,49210,'kill_sarnak_fishing_fight',0),(14825,49211,'kill_sarnak_fishing_reel_in',0),(14826,49212,'kill_sarnak_forestry_chopping',0),(14827,49213,'kill_sarnak_forestry_success',0),(14828,49214,'kill_sarnak_gathering_search',0),(14829,49215,'kill_sarnak_gathering_success',0),(14830,49216,'kill_sarnak_mining_digging',0),(14831,49217,'kill_sarnak_monk_attack',0),(14832,49218,'kill_sarnak_monk_attack01',0),(14833,49219,'kill_sarnak_monk_attack02',0),(14834,49220,'kill_sarnak_monk_attack03',0),(14835,49221,'kill_sarnak_monk_kick',0),(14836,49222,'kill_sarnak_pike_attack',0),(14837,49223,'kill_sarnak_pike_attack01',0),(14838,49224,'kill_sarnak_pike_attack02',0),(14839,49225,'kill_sarnak_pike_attack03',0),(14840,49226,'kill_sarnak_pike_kick',0),(14841,49228,'kill_trdskl_pie',0),(14842,49235,'kill_result_hand_rings_poison',0),(14843,49236,'kill_sarnak_1h_sword_attack01',0),(14844,49237,'kill_sarnak_mining_success',0),(14845,49240,'kill_cast_mirror',0),(14846,49244,'kill_design_parrot_shoulder',0),(14847,49246,'kill_result_splat',0),(14848,49248,'kill_trdskl_glob',0),(14849,49255,'kill_result_bread_hit',0),(14850,49257,'kill_trdskl_bread',0),(14851,49263,'kill_froglok_dead_enter',0),(14852,49264,'kill_froglok_run_up_idle',0),(14853,49265,'kill_froglok_swim_attack',0),(14854,49266,'kill_froglok_swim_go',0),(14855,49267,'kill_froglok_swim_idle',0),(14856,49268,'kill_froglok_swim_ouch',0),(14857,49269,'kill_iksar_swim_backup',0),(14858,49270,'kill_iksar_swim_go',0),(14859,49272,'kill_sarnak_rhino_sprint',0),(14860,49273,'kill_sarnak_swim_backup',0),(14861,49274,'kill_sarnak_swim_go',0),(14862,49276,'kill_swim_go',0),(14863,49281,'kill_close',0),(14864,49282,'kill_2h_sword',0),(14865,49285,'kill_cast_armor_assemble',0),(14866,49288,'kill_cast_chalice_descending',0),(14867,49295,'kill_result_blast_double_cone_aoe',0),(14868,49298,'kill_carpet_tail',0),(14869,49299,'kill_carpet_tail_cloak',0),(14870,49304,'kill_result_book_hit',0),(14871,49306,'kill_trdskl_book',0),(14872,49307,'kill_trdskl_rose',0),(14873,49313,'kill_flash',0),(14874,49314,'kill_glint',0),(14875,49317,'kill_cast_light_beam_grow',0),(14876,49322,'kill_result_gavel_drop',0),(14877,49323,'kill_result_hearts_red',0),(14878,49324,'kill_result_light_slam_aoe',0),(14879,49325,'kill_result_vertical_blast',0),(14880,49328,'kill_cast_lightning_aoe_blast_out',0),(14881,49333,'kill_result_cyclone_storm',0),(14882,49336,'kill_cast_cyclone_storm_blast',0),(14883,49343,'kill_ouch_forhand',0),(14884,49348,'kill_community_robe_red',0),(14885,49350,'kill_fire_foolish',0),(14886,49351,'kill_guide_robe_green',0),(14887,49357,'kill_dance_synced',0),(14888,49359,'kill_result_frisbee_p2p',0),(14889,49361,'kill_trdskl_frisbee',0),(14890,49364,'kill_brew_day_mugs',0),(14891,49369,'kill_result_feather_smack',0),(14892,49370,'kill_sarnak_1h_sword_dodge_backhand',0),(14893,49371,'kill_sarnak_1h_sword_dodge_down',0),(14894,49372,'kill_sarnak_1h_sword_dodge_forehand',0),(14895,49373,'kill_sarnak_1h_sword_dodge_thrust',0),(14896,49374,'kill_sarnak_1h_sword_ouch_backhand',0),(14897,49375,'kill_sarnak_1h_sword_ouch_down',0),(14898,49376,'kill_sarnak_1h_sword_ouch_forehand',0),(14899,49377,'kill_sarnak_1h_sword_ouch_thrust',0),(14900,49378,'kill_sarnak_1h_sword_parry_backhand',0),(14901,49379,'kill_sarnak_1h_sword_parry_down',0),(14902,49380,'kill_sarnak_1h_sword_parry_forehand',0),(14903,49381,'kill_sarnak_1h_sword_parry_thrust',0),(14904,49382,'kill_sarnak_2h_sword_dodge_down',0),(14905,49383,'kill_sarnak_2h_sword_dodge_forehand',0),(14906,49384,'kill_sarnak_2h_sword_ouch_backhand',0),(14907,49385,'kill_sarnak_2h_sword_ouch_down',0),(14908,49386,'kill_sarnak_2h_sword_ouch_forehand',0),(14909,49387,'kill_sarnak_2h_sword_ouch_thrust',0),(14910,49388,'kill_sarnak_2h_sword_ouch_thust',0),(14911,49389,'kill_sarnak_2h_sword_parry_backhand',0),(14912,49390,'kill_sarnak_2h_sword_parry_down',0),(14913,49391,'kill_sarnak_2h_sword_parry_forehand',0),(14914,49392,'kill_sarnak_agree',0),(14915,49393,'kill_sarnak_applaude',0),(14916,49394,'kill_sarnak_attention',0),(14917,49395,'kill_sarnak_beckon',0),(14918,49396,'kill_sarnak_beg',0),(14919,49397,'kill_sarnak_boggle',0),(14920,49398,'kill_sarnak_bostaff_dodge_backhand',0),(14921,49399,'kill_sarnak_bostaff_dodge_down',0),(14922,49400,'kill_sarnak_bostaff_dodge_forehand',0),(14923,49401,'kill_sarnak_bostaff_ouch_backhand',0),(14924,49402,'kill_sarnak_bostaff_ouch_down',0),(14925,49403,'kill_sarnak_bostaff_ouch_forehand',0),(14926,49404,'kill_sarnak_bostaff_ouch_thrust',0),(14927,49405,'kill_sarnak_bostaff_parry_backhand',0),(14928,49406,'kill_sarnak_bostaff_parry_down',0),(14929,49407,'kill_sarnak_bostaff_parry_forehand',0),(14930,49408,'kill_sarnak_bostaff_parry_thrust',0),(14931,49409,'kill_sarnak_bow',0),(14932,49410,'kill_sarnak_brandish',0),(14933,49411,'kill_sarnak_bye',0),(14934,49412,'kill_sarnak_cackle',0),(14935,49413,'kill_sarnak_cheer',0),(14936,49414,'kill_sarnak_chuckle',0),(14937,49415,'kill_sarnak_confused',0),(14938,49416,'kill_sarnak_crazy',0),(14939,49417,'kill_sarnak_cringe',0),(14940,49418,'kill_sarnak_cry',0),(14941,49419,'kill_sarnak_curse',0),(14942,49420,'kill_sarnak_curtsey',0),(14943,49421,'kill_sarnak_curtsey2',0),(14944,49422,'kill_sarnak_cutthroat',0),(14945,49423,'kill_sarnak_doubletake',0),(14946,49424,'kill_sarnak_dual_wield_attack03',0),(14947,49425,'kill_sarnak_dual_wield_dodge_backhand',0),(14948,49426,'kill_sarnak_dual_wield_dodge_down',0),(14949,49427,'kill_sarnak_dual_wield_dodge_forehand',0),(14950,49428,'kill_sarnak_dual_wield_kick',0),(14951,49429,'kill_sarnak_dual_wield_ouch_backhand',0),(14952,49430,'kill_sarnak_dual_wield_ouch_down',0),(14953,49431,'kill_sarnak_dual_wield_ouch_forehand',0),(14954,49432,'kill_sarnak_dual_wield_parry_down',0),(14955,49433,'kill_sarnak_duck',0),(14956,49434,'kill_sarnak_fflirt',0),(14957,49435,'kill_sarnak_fistclapping',0),(14958,49436,'kill_sarnak_flex',0),(14959,49437,'kill_sarnak_flirt',0),(14960,49438,'kill_sarnak_flustered',0),(14961,49439,'kill_sarnak_frustration',0),(14962,49440,'kill_sarnak_gag',0),(14963,49441,'kill_sarnak_giggle',0),(14964,49442,'kill_sarnak_glare',0),(14965,49443,'kill_sarnak_grumble',0),(14966,49444,'kill_sarnak_happy',0),(14967,49445,'kill_sarnak_headslap',0),(14968,49446,'kill_sarnak_hearnoevil',0),(14969,49447,'kill_sarnak_heartattack',0),(14970,49448,'kill_sarnak_heelclick',0),(14971,49449,'kill_sarnak_hellno',0),(14972,49450,'kill_sarnak_hello',0),(14973,49451,'kill_sarnak_hourglass',0),(14974,49452,'kill_sarnak_howl',0),(14975,49453,'kill_sarnak_indigestion',0),(14976,49454,'kill_sarnak_itch',0),(14977,49455,'kill_sarnak_listen',0),(14978,49456,'kill_sarnak_lookaway',0),(14979,49457,'kill_sarnak_monk_dodge_backhand',0),(14980,49458,'kill_sarnak_monk_dodge_forehand',0),(14981,49459,'kill_sarnak_monk_ouch_backhand',0),(14982,49460,'kill_sarnak_monk_ouch_down',0),(14983,49461,'kill_sarnak_monk_ouch_forehand',0),(14984,49462,'kill_sarnak_monk_parry_backhand',0),(14985,49463,'kill_sarnak_monk_parry_down',0),(14986,49464,'kill_sarnak_monk_parry_forehand',0),(14987,49465,'kill_sarnak_moon',0),(14988,49466,'kill_sarnak_neener',0),(14989,49467,'kill_sarnak_no',0),(14990,49468,'kill_sarnak_nod',0),(14991,49469,'kill_sarnak_notworthy',0),(14992,49470,'kill_sarnak_orate',0),(14993,49471,'kill_sarnak_peer',0),(14994,49472,'kill_sarnak_pike_dodge_backhand',0),(14995,49473,'kill_sarnak_pike_dodge_down',0),(14996,49474,'kill_sarnak_pike_dodge_forehand',0),(14997,49475,'kill_sarnak_pike_dodge_thrust',0),(14998,49476,'kill_sarnak_pike_ouch_backhand',0),(14999,49477,'kill_sarnak_pike_ouch_down',0),(15000,49478,'kill_sarnak_pike_ouch_thrust',0),(15001,49479,'kill_sarnak_pike_parry_backhand',0),(15002,49480,'kill_sarnak_pike_parry_down',0),(15003,49481,'kill_sarnak_pike_parry_forehand',0),(15004,49482,'kill_sarnak_point',0),(15005,49483,'kill_sarnak_ponder',0),(15006,49484,'kill_sarnak_pout',0),(15007,49485,'kill_sarnak_pugilist_attack',0),(15008,49486,'kill_sarnak_pugilist_attack01',0),(15009,49487,'kill_sarnak_pugilist_attack02',0),(15010,49488,'kill_sarnak_pugilist_attack03',0),(15011,49489,'kill_sarnak_pugilist_dodge_backhand',0),(15012,49490,'kill_sarnak_pugilist_dodge_down',0),(15013,49491,'kill_sarnak_pugilist_kick',0),(15014,49492,'kill_sarnak_raisehand',0),(15015,49493,'kill_sarnak_royalwave',0),(15016,49494,'kill_sarnak_rubhands',0),(15017,49495,'kill_sarnak_rude',0),(15018,49496,'kill_sarnak_sad',0),(15019,49497,'kill_sarnak_salute',0),(15020,49498,'kill_sarnak_sarcasticclap',0),(15021,49499,'kill_sarnak_scold',0),(15022,49500,'kill_sarnak_scratch',0),(15023,49501,'kill_sarnak_scream',0),(15024,49502,'kill_sarnak_seenoevil',0),(15025,49503,'kill_sarnak_shakefist',0),(15026,49504,'kill_sarnak_shame',0),(15027,49505,'kill_sarnak_shimmy',0),(15028,49506,'kill_sarnak_shiver',0),(15029,49507,'kill_sarnak_shrug',0),(15030,49508,'kill_sarnak_sigh',0),(15031,49509,'kill_sarnak_smile',0),(15032,49510,'kill_sarnak_smirk',0),(15033,49511,'kill_sarnak_sneer',0),(15034,49512,'kill_sarnak_sneeze',0),(15035,49513,'kill_sarnak_snicker',0),(15036,49514,'kill_sarnak_sniff',0),(15037,49515,'kill_sarnak_speaknoevil',0),(15038,49516,'kill_sarnak_square',0),(15039,49517,'kill_sarnak_squeal',0),(15040,49518,'kill_sarnak_stare',0),(15041,49519,'kill_sarnak_stinky',0),(15042,49520,'kill_sarnak_stretch',0),(15043,49521,'kill_sarnak_sulk',0),(15044,49522,'kill_sarnak_swear',0),(15045,49523,'kill_sarnak_tantrum',0),(15046,49524,'kill_sarnak_tapfoot',0),(15047,49525,'kill_sarnak_taunt',0),(15048,49526,'kill_sarnak_thank',0),(15049,49527,'kill_sarnak_thumbs',0),(15050,49528,'kill_sarnak_violin',0),(15051,49529,'kill_sarnak_wave',0),(15052,49530,'kill_sarnak_whistle',0),(15053,49531,'kill_sarnak_whome',0),(15054,49532,'kill_sarnak_wince',0),(15055,49533,'kill_sarnak_wink',0),(15056,49534,'kill_sarnak_yawn',0),(15057,49535,'kill_sarnak_yeah',0),(15058,49537,'kill_trdskl_pillow',0),(15059,49540,'kill_cast_boomerang',0),(15060,49546,'kill_trdskl_boomerang',0),(15061,49554,'kill_snd_pillow_impact',0),(15062,49557,'kill_brick_throw',0),(15063,49561,'kill_horn_blow',0),(15064,49569,'kill_sound_horn',0),(15065,49575,'kill_design_cast_vision_shardofhate',0),(15066,49582,'kill_result_waterwall',0),(15067,49589,'kill_result_netted',0),(15068,49591,'kill_trdskl_net',0),(15069,49599,'kill_vek_beam01_blue',0),(15070,49600,'kill_vek_beam01_green',0),(15071,49601,'kill_vek_beam01_red',0),(15072,49602,'kill_vek_beam01_yellow',0),(15073,49603,'kill_vek_beam02_blue',0),(15074,49604,'kill_vek_beam02_green',0),(15075,49605,'kill_vek_beam02_red',0),(15076,49606,'kill_vek_beam02_yellow',0),(15077,49607,'kill_vek_beam03_blue',0),(15078,49608,'kill_vek_beam03_green',0),(15079,49609,'kill_vek_beam03_red',0),(15080,49610,'kill_vek_beam03_yellow',0),(15081,49611,'kill_vek_beam04_blue',0),(15082,49612,'kill_vek_beam04_green',0),(15083,49613,'kill_vek_beam04_red',0),(15084,49614,'kill_vek_beam04_yellow',0),(15085,49615,'kill_vek_map',0),(15086,49616,'kill_vek_mapshine',0),(15087,49617,'kill_vek_runes',0),(15088,49618,'kill_vek_sunlight',0),(15089,49624,'kill_fx_off',0),(15090,49626,'kill_knocktoback_enter',0),(15091,49627,'kill_knocktoback_exit',0),(15092,49628,'kill_knocktoback_idle',0),(15093,49629,'kill_result_brick_hit',0),(15094,49631,'kill_status_quest_guide_gives',0),(15095,49632,'kill_trdskl_brick',0),(15096,49639,'kill_result_hand_rings_shimmer',0),(15097,49641,'kill_snd_design_murderer',0),(15098,49647,'kill_design_horse_carrot',0),(15099,49648,'kill_design_rhino_carrot',0),(15100,49649,'kill_design_warg_carrot',0),(15101,49650,'kill_dn_goblin_beam_blue',0),(15102,49651,'kill_dn_goblin_beam_green',0),(15103,49652,'kill_dn_goblin_beam_red',0),(15104,49653,'kill_dn_goblin_beam_yellow',0),(15105,49661,'kill_void_storm',0),(15106,49662,'kill_void_summon_portal',0),(15107,49668,'kill_design_altar_chained',0),(15108,49670,'kill_result_blue_glow',0),(15109,49671,'kill_result_green_glow',0),(15110,49672,'kill_result_orange_glow',0),(15111,49673,'kill_result_purple_glow',0),(15112,49680,'kill_result_drake_breath',0),(15113,49681,'kill_result_napalm',0),(15114,49682,'kill_result_void_fx',0),(15115,49685,'kill_bear_backup',0),(15116,49686,'kill_bear_fall',0),(15117,49687,'kill_bear_idle',0),(15118,49688,'kill_bear_jump',0),(15119,49689,'kill_bear_jump_substitute',0),(15120,49690,'kill_bear_land',0),(15121,49691,'kill_bear_long_fall',0),(15122,49692,'kill_bear_run',0),(15123,49693,'kill_bear_turn_left',0),(15124,49694,'kill_bear_turn_right',0),(15125,49695,'kill_bear_walk',0),(15126,49702,'kill_result_blood_boil',0),(15127,49703,'kill_result_golem_rain',0),(15128,49704,'kill_result_water_ball',0),(15129,49705,'kill_result_water_burst',0),(15130,49706,'kill_result_waterspout_p2p',0),(15131,49709,'kill_cast_aoe_water_blast',0),(15132,49710,'kill_cast_barnicle_blast',0),(15133,49716,'kill_snd_claygolem_attack',0),(15134,49724,'kill_sound_attackspin',0),(15135,49725,'kill_sound_damagelow',0),(15136,49726,'kill_sound_swimwalk',0),(15137,49727,'kill_sound_walkbounce',0),(15138,49728,'kill_sound_wildswingenter',0),(15139,49735,'kill_persist_enrage',0),(15140,49741,'kill_golem_charm',0),(15141,49742,'kill_golem_shutdown',0),(15142,49750,'kill_status_quest_gives_gray',0),(15143,49758,'kill_trdskl_censer',0),(15144,49764,'kill_dusting_off',0),(15145,49772,'kill_snd_net_toss',0),(15146,49779,'kill_result_barrel_break',0),(15147,49780,'kill_result_brain_leaving',0),(15148,49788,'kill_snd_barrel_cannon',0),(15149,49796,'kill_sound_bookdeath',0),(15150,49797,'kill_sound_thunder0',0),(15151,49803,'kill_flock_of_seagulls',0),(15152,49810,'kill_mistmoore_runes_fx',0),(15153,49811,'kill_mistmoore_sun_fx',0),(15154,49813,'kill_swim_backward',0),(15155,49814,'kill_swim_forward',0),(15156,49817,'kill_cast_energy_blob',0),(15157,49818,'kill_cast_energy_blob_p2p',0),(15158,49825,'kill_result_napalm_aoe',0),(15159,49832,'kill_result_blood_puddle',0),(15160,49833,'kill_result_cold_ice_crystals_head',0),(15161,49834,'kill_result_ice_shackles',0),(15162,49835,'kill_result_icicle_impale',0),(15163,49836,'kill_result_snow_dust',0),(15164,49837,'kill_result_void_splat',0),(15165,49840,'kill_attack_bolts',0),(15166,49843,'kill_cast_sword_head',0),(15167,49846,'kill_result_sword_head',0),(15168,49853,'kill_result_steam_column',0),(15169,49861,'kill_sound_footsrape',0),(15170,49862,'kill_sound_runbreathe',0),(15171,49869,'kill_result_mesh_attack',0),(15172,49874,'kill_cast_spin_buff',0),(15173,49877,'kill_result_power_life_drain_p2p',0),(15174,49883,'kill_design_ice_door_blast',0),(15175,49889,'kill_design_rising_stairs_finish_fx',0),(15176,49890,'kill_design_rising_stairs_fx',0),(15177,49897,'kill_result_chomping_skulls',0),(15178,49904,'kill_result_pulsing_note',0),(15179,49910,'kill_design_ice_wall_breaking',0),(15180,49913,'kill_sound_ice_shatter',0),(15181,49916,'kill_cast_lost_souls',0),(15182,49923,'kill_knockeddowntoknees',0),(15183,49924,'kill_meditate',0),(15184,49926,'kill_worship',0),(15185,49929,'kill_cast_lasso',0),(15186,49934,'kill_result_cobwebs',0),(15187,49941,'kill_miragul_puzzle_blue_flasher',0),(15188,49942,'kill_miragul_puzzle_blue_runes',0),(15189,49943,'kill_miragul_puzzle_green_flasher',0),(15190,49944,'kill_miragul_puzzle_green_runes',0),(15191,49945,'kill_miragul_puzzle_lightning_orb',0),(15192,49946,'kill_miragul_puzzle_red_flasher',0),(15193,49947,'kill_miragul_puzzle_red_runes',0),(15194,49948,'kill_miragul_puzzle_spire_beams',0),(15195,49949,'kill_miragul_puzzle_splash_column',0),(15196,49950,'kill_miragul_puzzle_yellow_flasher',0),(15197,49951,'kill_miragul_puzzle_yellow_runes',0),(15198,49954,'kill_cast_barnacle_blast',0),(15199,49961,'kill_najena_face_lava',0),(15200,49968,'kill_najena_dark_rune01',0),(15201,49969,'kill_najena_dark_rune02',0),(15202,49970,'kill_najena_dark_rune03',0),(15203,49971,'kill_najena_dark_rune04',0),(15204,49972,'kill_najena_dark_rune05',0),(15205,49973,'kill_najena_light_rune01',0),(15206,49974,'kill_najena_light_rune02',0),(15207,49975,'kill_najena_light_rune03',0),(15208,49976,'kill_najena_light_rune04',0),(15209,49977,'kill_najena_light_rune05',0),(15210,49978,'kill_najena_puzzle_complete',0),(15211,49979,'kill_1h_dual_wield_enter',0),(15212,49980,'kill_1h_dual_wield_exit',0),(15213,49987,'kill_najena_lava_god_hands',0),(15214,49988,'kill_najena_lava_god_skull',0),(15215,49989,'kill_result_lava_column',0),(15216,49996,'kill_najena_lava_curtain',0),(15217,49997,'kill_najena_rune_key',0),(15218,50000,'kill_cast_heat_sphere',0),(15219,50007,'kill_result_dagger_back',0),(15220,50008,'kill_result_melee_lifetap_p2p',0),(15221,50010,'kill_vocal_idle',0),(15222,50013,'kill_cast_bone_blast_blend',0),(15223,50016,'kill_cast_wavy_bubble_shield',0),(15224,50021,'kill_cast_shield_buff',0),(15225,50028,'kill_result_hammer_buff',0),(15226,50035,'kill_result_forced_shader_hologram',0),(15227,50042,'kill_result_clanging_note',0),(15228,50043,'kill_result_forced_shader_glass',0),(15229,50044,'kill_result_swirling_note',0),(15230,50047,'kill_cast_bone_blast_notes',0),(15231,50052,'kill_result_notes_spiral_frenzy',0),(15232,50054,'kill_vek_door_beam_blue',0),(15233,50055,'kill_vek_door_beam_red',0),(15234,50058,'kill_cast_bubble_ward',0),(15235,50059,'kill_cast_dodge_buff',0),(15236,50062,'kill_cast_shout_aoe',0),(15237,50065,'kill_result_crush_blast',0),(15238,50072,'kill_result_break_chains',0),(15239,50077,'kill_cast_quick_shield',0),(15240,50080,'kill_result_spike_blast',0),(15241,50083,'kill_cast_bubble_ward_out',0),(15242,50086,'kill_cast_shield_deflect',0),(15243,50093,'kill_paper_scatter',0),(15244,50101,'kill_skull_candles_head',0),(15245,50106,'kill_cast_rings_aoe',0),(15246,50112,'kill_design_void_eyes',0),(15247,50113,'kill_design_void_portal',0),(15248,50116,'kill_vocal_combat_idle',0),(15249,50119,'kill_cast_melee_buff',0),(15250,50122,'kill_cast_speed_buff',0),(15251,50123,'kill_cast_wings',0),(15252,50126,'kill_buff_fx',0),(15253,50129,'kill_cast_rune_buff',0),(15254,50130,'kill_cast_rune_spiral_buff',0),(15255,50133,'kill_cast_ice_block',0),(15256,50134,'kill_cast_leaf_buff',0),(15257,50135,'kill_cast_leaf_spiral_buff',0),(15258,50140,'kill_result_nature_storm',0),(15259,50143,'kill_cast_fire_buff',0),(15260,50144,'kill_cast_mental_buff',0),(15261,50149,'kill_result_hail_storm',0),(15262,50150,'kill_result_poison_skulls',0),(15263,50153,'kill_cast_flash_rune_buff',0),(15264,50161,'kill_serve',0),(15265,50167,'kill_guk_barracks_poison',0),(15266,50168,'kill_guk_crystal_cleanse',0),(15267,50169,'kill_guk_temple_splashes_clean',0),(15268,50170,'kill_guk_temple_splashes_poison',0),(15269,50171,'kill_guk_waterfalls_poison',0),(15270,50173,'kill_result_slime_wall',0),(15271,50180,'kill_result_fly_breath',0),(15272,50181,'kill_result_fly_swarm',0),(15273,50188,'kill_result_poison_cloud_explosion',0),(15274,50189,'kill_result_poison_splat',0),(15275,50190,'kill_result_skull_attack_p2p',0),(15276,50191,'kill_result_troll_curse',0),(15277,50198,'kill_korsha_lift_blast',0),(15278,50199,'kill_result_object_sparkles_blue',0),(15279,50200,'kill_result_object_sparkles_green',0),(15280,50201,'kill_result_object_sparkles_red',0),(15281,50202,'kill_result_object_sparkles_white',0),(15282,50209,'kill_result_head_flames',0),(15283,50215,'kill_design_lamp_ignite',0),(15284,50217,'kill_mr_lamp_fx_01',0),(15285,50218,'kill_mr_lamp_fx_02',0),(15286,50219,'kill_mr_lamp_fx_03',0),(15287,50220,'kill_mr_lamp_fx_04',0),(15288,50221,'kill_mr_lamp_fx_05',0),(15289,50222,'kill_mr_lamp_fx_06',0),(15290,50223,'kill_mr_lamp_ignite_sound',0),(15291,50224,'kill_mr_lamp_sounds_finish',0),(15292,50225,'kill_mr_lamp_sounds_start',0),(15293,50231,'kill_design_result_black_out',0),(15294,50233,'kill_result_bat_scare',0),(15295,50235,'kill_whistle_toot_01',0),(15296,50236,'kill_whistle_toot_02',0),(15297,50237,'kill_whistle_toot_03',0),(15298,50238,'kill_whistle_toot_04',0),(15299,50239,'kill_whistle_toot_05',0),(15300,50240,'kill_whistle_toot_06',0),(15301,50241,'kill_whistle_toot_07',0),(15302,50242,'kill_whistle_toot_08',0),(15303,50243,'kill_whistle_toot_09',0),(15304,50244,'kill_whistle_toot_10',0),(15305,50245,'kill_whistle_toot_11',0),(15306,50246,'kill_whistle_toot_12',0),(15307,50247,'kill_whistle_toot_13',0),(15308,50248,'kill_whistle_toot_14',0),(15309,50254,'kill_eq2_music1',0),(15310,50255,'kill_eq2_music2',0),(15311,50256,'kill_frost_blast',0),(15312,50257,'kill_fudge_drip',0),(15313,50258,'kill_ice_blast_sound',0),(15314,50259,'kill_icecream_drip',0),(15315,50262,'kill_server_idle',0),(15316,50263,'kill_server_shutdown',0),(15317,50264,'kill_server_start',0),(15318,50270,'kill_hourglass_active',0),(15319,50271,'kill_hourglass_idle',0),(15320,50277,'kill_frosty_crown',0),(15321,50280,'kill_bf_lightning_gate_rm5',0),(15322,50281,'kill_bf_lightning_gate_rm9',0),(15323,50284,'kill_cast_void_portal',0),(15324,50287,'kill_result_crystal_trap',0),(15325,50294,'kill_lights_eyes',0),(15326,50295,'kill_lights_pumpkin',0),(15327,50296,'kill_result_pumpkin_smash',0),(15328,50302,'kill_design_fairy_pet',0),(15329,50307,'kill_cast_void_energy_cloud',0),(15330,50308,'kill_cast_void_rune_barrier',0),(15331,50309,'kill_cast_void_rune_circle',0),(15332,50311,'kill_design_fist_fireworks',0),(15333,50313,'kill_result_void_energy_barrier',0),(15334,50314,'kill_result_void_energy_blast',0),(15335,50315,'kill_result_void_energy_wave',0),(15336,50318,'kill_cast_lightning_beam_converge',0),(15337,50319,'kill_cast_lightning_beam_point',0),(15338,50320,'kill_cast_lightning_blastdown',0),(15339,50327,'kill_result_flesh_peel',0),(15340,50328,'kill_result_god_spell_anashti_sul',0),(15341,50329,'kill_result_god_spell_rodcet_nife',0),(15342,50337,'kill_vp_shissar_new',0),(15343,50338,'kill_vp_shissar_old',0),(15344,50345,'kill_result_greenmist_attack_p2p',0),(15345,50351,'kill_design_cannon_blast',0),(15346,50352,'kill_design_cannon_chargeup',0),(15347,50353,'kill_design_inno_cannon_fire1',0),(15348,50354,'kill_design_inno_cannon_fire2',0),(15349,50357,'kill_cast_energy_charge_up',0),(15350,50362,'kill_mr_chargeup_sound',0),(15351,50363,'kill_mr_lightning_chargeup',0),(15352,50365,'kill_zepplin_enter',0),(15353,50366,'kill_zepplin_exit',0),(15354,50367,'kill_zepplin_fall',0),(15355,50368,'kill_zepplin_idle',0),(15356,50369,'kill_zepplin_jump',0),(15357,50370,'kill_zepplin_land',0),(15358,50371,'kill_zepplin_run',0),(15359,50372,'kill_zepplin_walk',0),(15360,50378,'kill_idle_sound',0),(15361,50381,'kill_zeppelin_enter',0),(15362,50382,'kill_zeppelin_exit',0),(15363,50383,'kill_zeppelin_fall',0),(15364,50384,'kill_zeppelin_glide',0),(15365,50385,'kill_zeppelin_idle',0),(15366,50386,'kill_zeppelin_jump',0),(15367,50387,'kill_zeppelin_land',0),(15368,50388,'kill_zeppelin_run',0),(15369,50389,'kill_zeppelin_walk',0),(15370,50390,'kill_zepplin_glide',0),(15371,50393,'kill_cast_energy_blast_aoe',0),(15372,50398,'kill_result_energy_wave_p2p',0),(15373,50405,'kill_result_void_implode',0),(15374,50407,'kill_void_beam_sound',0),(15375,50408,'kill_void_door_beam',0),(15376,50415,'kill_persist_evil_stun',0),(15377,50416,'kill_result_spear_hit',0),(15378,50418,'kill_trdskl_spear',0),(15379,50424,'kill_energy_flow_sound',0),(15380,50426,'kill_mistmoore_energy_flow01',0),(15381,50427,'kill_mistmoore_energy_flow02',0),(15382,50428,'kill_mistmoore_energy_flow03',0),(15383,50429,'kill_mistmoore_energy_flow04',0),(15384,50430,'kill_mistmoore_energy_flow05',0),(15385,50431,'kill_result_lightning_cage',0),(15386,50432,'kill_result_rune_ethernaughts',0),(15387,50435,'kill_burrow',0),(15388,50436,'kill_burrow_sound',0),(15389,50440,'kill_design_chain_release',0),(15390,50441,'kill_design_chained',0),(15391,50443,'kill_mistmoore_coffin_glow',0),(15392,50451,'kill_void_blast_wave',0),(15393,50454,'kill_blast_bolt',0),(15394,50457,'kill_cast_speed_trail',0),(15395,50460,'kill_result_cyclone_bones',0),(15396,50463,'kill_cast_hand_slash',0),(15397,50468,'kill_result_hand_choke',0),(15398,50469,'kill_result_spike_trap',0),(15399,50470,'kill_result_string_trap',0),(15400,50471,'kill_run_sound',0),(15401,50473,'kill_wood_sound',0),(15402,50481,'kill_void_portal_sound',0),(15403,50482,'kill_void_summon_sound',0),(15404,50483,'kill_void_teleporter',0),(15405,50491,'kill_varsoon_portal_collapse',0),(15406,50492,'kill_varsoon_void_portal',0),(15407,50499,'kill_result_void_tether_p2p',0),(15408,50501,'kill_varsoon_crystal_1',0),(15409,50502,'kill_varsoon_crystal_2',0),(15410,50503,'kill_varsoon_crystal_3',0),(15411,50509,'kill_design_blue_sun',0),(15412,50510,'kill_design_red_sun',0),(15413,50511,'kill_design_red_sun_sound',0),(15414,50512,'kill_design_sun_sound',0),(15415,50514,'kill_result_void_crystal_p2p',0),(15416,50516,'kill_void_beam_blue',0),(15417,50517,'kill_void_beam_red',0),(15418,50520,'kill_cast_5',0),(15419,50524,'kill_design_lattice_activate',0),(15420,50525,'kill_design_void_energy_activate',0),(15421,50528,'kill_void_energy_activate_sound',0),(15422,50529,'kill_void_energy_sound',0),(15423,50536,'kill_result_blast_ring',0),(15424,50538,'kill_void_energy_barrier',0),(15425,50539,'kill_void_energy_barrier_blast',0),(15426,50547,'kill_void_energy_channeling_p2p',0),(15427,50553,'kill_design_result_cloudy_head',0),(15428,50555,'kill_result_dark_mist',0),(15429,50556,'kill_result_sparkle_mist',0),(15430,50559,'kill_cast_meteor_storm',0),(15431,50564,'kill_result_meteor_storm',0),(15432,50565,'kill_result_neg_flux',0),(15433,50566,'kill_result_neg_flux_storm',0),(15434,50567,'kill_result_void_explode',0),(15435,50568,'kill_result_void_ragestorm',0),(15436,50569,'kill_result_void_storm',0),(15437,50572,'kill_cast_manta_bolt_p2p',0),(15438,50573,'kill_cast_manta_tail_beam',0),(15439,50574,'kill_cast_manta_tail_flare',0),(15440,50575,'kill_cast_nether_blast',0),(15441,50576,'kill_cast_nether_storm',0),(15442,50579,'kill_cast_sucking_charge_up',0),(15443,50582,'kill_result_anashti_curse',0),(15444,50583,'kill_result_anashti_tempest',0),(15445,50586,'kill_anashti_summon',0),(15446,50587,'kill_anashti_transform',0),(15447,50588,'kill_anashti_vortex',0),(15448,50591,'kill_attack_breath_inhale',0),(15449,50592,'kill_attack_burst',0),(15450,50593,'kill_attack_dark_breath',0),(15451,50594,'kill_attack_wing_bolts',0),(15452,50601,'kill_result_misty_snare',0),(15453,50604,'kill_cast_arcane_blast_aoe',0),(15454,50609,'kill_result_melee_swipe',0),(15455,50610,'kill_result_melee_wild_swipe',0),(15456,50615,'kill_cast_sparkling_dust_aoe',0),(15457,50622,'kill_result_gnollslayer',0),(15458,50623,'kill_result_gnollslayer_burst',0),(15459,50624,'kill_result_skull_debuff',0),(15460,50631,'kill_result_quick_heal',0),(15461,50634,'kill_bear_tail',0),(15462,50637,'kill_bear_sprint',0),(15463,50640,'kill_bear_attack_sound',0),(15464,50641,'kill_bear_battlecry_sound',0),(15465,50642,'kill_bear_dead_sound',0),(15466,50643,'kill_bear_deadfall_sound',0),(15467,50644,'kill_bear_headshake_sound',0),(15468,50645,'kill_bear_idle_sound',0),(15469,50646,'kill_bear_idle_sound_omit',0),(15470,50647,'kill_bear_ouch_sound',0),(15471,50648,'kill_bear_sniff_sound',0),(15472,50654,'kill_fae_dark_bear_backup',0),(15473,50655,'kill_fae_dark_bear_idle',0),(15474,50656,'kill_fae_dark_bear_jump',0),(15475,50657,'kill_fae_dark_bear_jump_substitute',0),(15476,50658,'kill_fae_dark_bear_run',0),(15477,50659,'kill_fae_dark_bear_sprint',0),(15478,50660,'kill_fae_dark_bear_turn_left',0),(15479,50661,'kill_fae_dark_bear_turn_right',0),(15480,50662,'kill_fae_dark_bear_walk',0),(15481,50663,'kill_fae_light_bear_backup',0),(15482,50664,'kill_fae_light_bear_idle',0),(15483,50665,'kill_fae_light_bear_jump',0),(15484,50666,'kill_fae_light_bear_jump_substitute',0),(15485,50667,'kill_fae_light_bear_run',0),(15486,50668,'kill_fae_light_bear_sprint',0),(15487,50669,'kill_fae_light_bear_turn_left',0),(15488,50670,'kill_fae_light_bear_turn_right',0),(15489,50671,'kill_fae_light_bear_walk',0),(15490,50672,'kill_froglok_bear_backup',0),(15491,50673,'kill_froglok_bear_idle',0),(15492,50674,'kill_froglok_bear_jump',0),(15493,50675,'kill_froglok_bear_jump_substitute',0),(15494,50676,'kill_froglok_bear_run',0),(15495,50677,'kill_froglok_bear_sprint',0),(15496,50678,'kill_froglok_bear_turn_left',0),(15497,50679,'kill_froglok_bear_turn_right',0),(15498,50680,'kill_froglok_bear_walk',0),(15499,50686,'kill_footstep_sound',0),(15500,50693,'kill_result_fireworks_flower',0),(15501,50694,'kill_result_fireworks_foamy_burst',0),(15502,50695,'kill_result_fireworks_rainbow',0),(15503,50697,'kill_tiered_blast_cone',0),(15504,50698,'kill_tiered_blood_lust',0),(15505,50699,'kill_tiered_crush_blast',0),(15506,50700,'kill_tiered_cyclone',0),(15507,50701,'kill_tiered_defensive_buff',0),(15508,50702,'kill_tiered_dustpuff_rfoot',0),(15509,50703,'kill_tiered_flash_weapon',0),(15510,50704,'kill_tiered_glow_distort',0),(15511,50705,'kill_tiered_motion_lines',0),(15512,50706,'kill_tiered_motion_lines_sub',0),(15513,50707,'kill_tiered_offensive_buff',0),(15514,50708,'kill_tiered_shout',0),(15515,50709,'kill_tiered_sparkle_trail_weapon',0),(15516,50710,'kill_tiered_sparks_hit',0),(15517,50711,'kill_tiered_taunt',0),(15518,50712,'kill_tiered_weapon_trail_fire',0),(15519,50718,'kill_gathering_end',0),(15520,50719,'kill_gathering_loop',0),(15521,50720,'kill_gathering_start',0),(15522,50721,'kill_idle_afraid',0),(15523,50722,'kill_idle_angry',0),(15524,50725,'kill_bearwalk',0),(15525,50731,'kill_tiered_blast_hit',0),(15526,50732,'kill_tiered_flash',0),(15527,50733,'kill_tiered_melee_swipe',0),(15528,50734,'kill_tiered_shield',0),(15529,50735,'kill_tiered_slash_hit',0),(15530,50743,'kill_tiered_shield_blast',0),(15531,50744,'kill_tiered_slow',0),(15532,50750,'kill_design_powerarray_electric',0),(15533,50751,'kill_design_powerarray_void',0),(15534,50752,'kill_gathering_enter',0),(15535,50753,'kill_gathering_exit',0),(15536,50756,'kill_attack_disarm',0),(15537,50760,'kill_design_ice_fan_side',0),(15538,50761,'kill_design_ice_fan_up',0),(15539,50762,'kill_design_najena_barrier',0),(15540,50765,'kill_sound_attack_disarm',0),(15541,50766,'kill_sound_fan_start',0),(15542,50767,'kill_sound_wind_blast',0),(15543,50768,'kill_tiered_rune_buff',0),(15544,50774,'kill_electric_fx',0),(15545,50776,'kill_particle_mood_idle',0),(15546,50778,'kill_sound_buff_electric',0),(15547,50779,'kill_sound_buff_void',0),(15548,50780,'kill_void_fx',0),(15549,50786,'kill_design_najena_electric_water',0),(15550,50788,'kill_result_dragon_breath_p2p',0),(15551,50789,'kill_result_electric_beam_p2p',0),(15552,50790,'kill_result_void_beam_p2p',0),(15553,50796,'kill_design_najena_fire',0),(15554,50797,'kill_design_najena_lightning',0),(15555,50798,'kill_design_najena_poison',0),(15556,50799,'kill_design_najena_portals',0),(15557,50800,'kill_design_najena_snow',0),(15558,50801,'kill_design_najena_water',0),(15559,50807,'kill_elemental_fire_hands',0),(15560,50808,'kill_fire_summon_portal',0),(15561,50811,'kill_sound_fire_vortex',0),(15562,50814,'kill_badger_buff',0),(15563,50819,'kill_mushroom_buff',0),(15564,50821,'kill_snake_buff',0),(15565,50824,'kill_cast_lava_shield',0),(15566,50829,'kill_result_rock_blast_wave',0),(15567,50831,'kill_summon_fx',0),(15568,50832,'kill_transform_fx',0),(15569,50840,'kill_tiered_anger_buff',0),(15570,50841,'kill_tiered_hand_buff',0),(15571,50847,'kill_design_fire_wall',0),(15572,50848,'kill_design_fire_wall_opening',0),(15573,50849,'kill_design_rock_wall',0),(15574,50850,'kill_design_rock_wall_breaking',0),(15575,50853,'kill_aoe_ice_blast',0),(15576,50854,'kill_aoe_rock_blast',0),(15577,50855,'kill_cast_air_charge',0),(15578,50856,'kill_cast_earth_charge',0),(15579,50857,'kill_cast_fire_charge',0),(15580,50858,'kill_cast_ice_blast_out',0),(15581,50859,'kill_cast_ice_column',0),(15582,50862,'kill_cast_water_charge',0),(15583,50869,'kill_persist_book_dervish',0),(15584,50875,'kill_design_elemental_wall',0),(15585,50876,'kill_design_elemental_wall_breaking',0),(15586,50879,'kill_sound_electric',0),(15587,50880,'kill_sound_rock_breaking',0),(15588,50881,'kill_tiered_bubble_pop',0),(15589,50882,'kill_tiered_power_gather',0),(15590,50883,'kill_tiered_quick_heal',0),(15591,50884,'kill_tiered_rune_in_buff',0),(15592,50885,'kill_tiered_rune_out_buff',0),(15593,50886,'kill_tiered_speed',0),(15594,50887,'kill_tiered_spikes_hit',0),(15595,50888,'kill_tiered_stifle',0),(15596,50896,'kill_tiered_defense_buff',0),(15597,50904,'kill_tiered_bubble_shield',0),(15598,50905,'kill_tiered_offense_buff',0),(15599,50906,'kill_tiered_root',0),(15600,50914,'kill_tiered_charge_up',0),(15601,50922,'kill_tiered_bubble_shield_in',0),(15602,50923,'kill_tiered_evil_rune_base',0),(15603,50924,'kill_tiered_good_rune_base',0),(15604,50925,'kill_tiered_skull_lifetap',0),(15605,50933,'kill_tiered_boiling_circle',0),(15606,50941,'kill_tiered_cloud_blast',0),(15607,50942,'kill_tiered_diseased',0),(15608,50943,'kill_tiered_grip_blast',0),(15609,50951,'kill_tiered_flash_vanish',0),(15610,50952,'kill_tiered_rune_base',0),(15611,50953,'kill_tiered_sparkle_cling',0),(15612,50961,'kill_tiered_dark_mist',0),(15613,50962,'kill_tiered_mana_drain_p2p',0),(15614,50968,'kill_design_electric_barrier_round',0),(15615,50969,'kill_design_fire_barrier_round',0),(15616,50970,'kill_design_poison_barrier_round',0),(15617,50971,'kill_design_snow_barrier_round',0),(15618,50972,'kill_design_water_barrier_round',0),(15619,50975,'kill_tiered_lost_souls',0),(15620,50983,'kill_tiered_rock_shield',0),(15621,50984,'kill_tiered_stance_base',0),(15622,50985,'kill_waist_tracking_off_trigger',0),(15623,50992,'kill_result_forced_shader_soot',0),(15624,50994,'kill_tiered_energy_blob_p2p',0),(15625,50995,'kill_tiered_heal_hands_blast',0),(15626,50996,'kill_tiered_healing_rays',0),(15627,51004,'kill_tiered_blessed_hand',0),(15628,51005,'kill_tiered_castigate',0),(15629,51006,'kill_tiered_sparkle_swirl',0),(15630,51012,'kill_design_void_barrier',0),(15631,51020,'kill_tiered_defense_buff_brawler',0),(15632,51028,'kill_tiered_feet_buff',0),(15633,51029,'kill_tiered_feet_sparks',0),(15634,51030,'kill_tiered_flame_burst',0),(15635,51031,'kill_tiered_frenzy',0),(15636,51032,'kill_tiered_hand_sparks',0),(15637,51033,'kill_tiered_offense_buff_brawler',0),(15638,51034,'kill_tiered_rune_buff_brawler',0),(15639,51035,'kill_tiered_sparkle_scan_up',0),(15640,51043,'kill_tiered_balance_buff_brawler',0),(15641,51044,'kill_tiered_focus_spark',0),(15642,51045,'kill_tiered_second_skin',0),(15643,51046,'kill_tiered_sonic_punch',0),(15644,51047,'kill_tiered_wavy_shield_out',0),(15645,51055,'kill_snd_ape',0),(15646,51056,'kill_snd_bear_roar',0),(15647,51057,'kill_snd_hawk_scream',0),(15648,51058,'kill_snd_monkey',0),(15649,51059,'kill_snd_owl_hoot',0),(15650,51065,'kill_design_fae_drake_pet',0),(15651,51068,'kill_snd_wave_crash',0),(15652,51069,'kill_tiered_mountain',0),(15653,51070,'kill_tiered_phoenix_blast',0),(15654,51071,'kill_tiered_plasma_burst',0),(15655,51072,'kill_tiered_water_burst',0),(15656,51080,'kill_tiered_dragon_breath',0),(15657,51081,'kill_tiered_fear_skulls',0),(15658,51082,'kill_tiered_hand_flare',0),(15659,51083,'kill_tiered_heart_beat',0),(15660,51089,'kill_design_dark_rez',0),(15661,51090,'kill_design_void_dome',0),(15662,51091,'kill_heal_lifetap_p2p',0),(15663,51092,'kill_iksar_ghost_rez_p2p',0),(15664,51095,'kill_tiered_skull',0),(15665,51101,'kill_design_gas_fire_blast',0),(15666,51102,'kill_design_gas_fire_warning',0),(15667,51104,'kill_result_void_fx_alt',0),(15668,51110,'kill_design_boiling_energy_blast',0),(15669,51111,'kill_design_boiling_energy_warning',0),(15670,51114,'kill_sound_electric_burst',0),(15671,51117,'kill_cast_boiling_energy',0),(15672,51121,'kill_design_gas_fire_blast_up',0),(15673,51122,'kill_design_gas_fire_warning_up',0),(15674,51123,'kill_design_void_dome_blue',0),(15675,51124,'kill_design_void_dome_red',0),(15676,51131,'kill_result_arc_tether_p2p',0),(15677,51132,'kill_result_rose_petals',0),(15678,51140,'kill_tiered_plasma_hit',0),(15679,51143,'kill_cast_back_rune_wheel',0),(15680,51144,'kill_cast_base_rune_wheel',0),(15681,51145,'kill_cast_forward_rune_wheel',0),(15682,51151,'kill_tiered_agility_buff',0),(15683,51152,'kill_tiered_charge_weapon',0),(15684,51153,'kill_tiered_energy_beam_p2p',0),(15685,51154,'kill_tiered_fire_slam',0),(15686,51155,'kill_tiered_fire_tube',0),(15687,51156,'kill_tiered_hand_rings',0),(15688,51157,'kill_tiered_head_ring',0),(15689,51158,'kill_tiered_intellect_buff',0),(15690,51159,'kill_tiered_rays_out',0),(15691,51160,'kill_tiered_rune_drop_base',0),(15692,51161,'kill_tiered_rune_forward',0),(15693,51162,'kill_tiered_rune_rise_base',0),(15694,51163,'kill_tiered_rune_rise_buff',0),(15695,51164,'kill_tiered_rune_root',0),(15696,51165,'kill_tiered_rune_swirl',0),(15697,51166,'kill_tiered_self_lifetap',0),(15698,51167,'kill_tiered_stamina_buff',0),(15699,51168,'kill_tiered_strength_buff',0),(15700,51169,'kill_tiered_weapon_buff_charge',0),(15701,51170,'kill_tiered_wisdom_buff',0),(15702,51178,'kill_tiered_blast_circle',0),(15703,51179,'kill_tiered_chain_root',0),(15704,51180,'kill_tiered_cold_blast',0),(15705,51181,'kill_tiered_column_blast_circle',0),(15706,51182,'kill_tiered_fire_column',0),(15707,51183,'kill_tiered_fireball_p2p',0),(15708,51184,'kill_tiered_frostball_p2p',0),(15709,51185,'kill_tiered_glacial_wall',0),(15710,51186,'kill_tiered_hand_runes',0),(15711,51187,'kill_tiered_ice_root',0),(15712,51188,'kill_tiered_icicle_blast_p2p',0),(15713,51189,'kill_tiered_particle_transfer_p2p',0),(15714,51190,'kill_tiered_rune_chain_swirl',0),(15715,51191,'kill_tiered_windy_tube_p2p',0),(15716,51199,'kill_tiered_blast_cone_forward',0),(15717,51200,'kill_tiered_cold_fusion',0),(15718,51201,'kill_tiered_dots_explode',0),(15719,51202,'kill_tiered_forced_shader_burst',0),(15720,51203,'kill_tiered_frosty_swirls',0),(15721,51204,'kill_tiered_magic_waves',0),(15722,51205,'kill_tiered_ring_blast_p2p',0),(15723,51208,'kill_cast_enchanter_wheel_back',0),(15724,51209,'kill_cast_enchanter_wheel_base',0),(15725,51210,'kill_cast_enchanter_wheel_forward',0),(15726,51213,'kill_cast_summoner_wheel_back',0),(15727,51214,'kill_cast_summoner_wheel_base',0),(15728,51215,'kill_cast_summoner_wheel_forward',0),(15729,51219,'kill_tiered_poisonball_p2p',0),(15730,51220,'kill_tiered_poisoned',0),(15731,51221,'kill_tiered_rune_spikes_swirl',0),(15732,51222,'kill_tiered_spikes_root',0),(15733,51230,'kill_tiered_column_poison_blast',0),(15734,51231,'kill_tiered_hand_evil_runes',0),(15735,51232,'kill_tiered_poison_breath',0),(15736,51235,'kill_cast_hand_energy_artifact',0),(15737,51239,'kill_design_hand_energy_artifact',0),(15738,51241,'kill_result_sparkles_crackle_out',0),(15739,51242,'kill_result_wings_grow',0),(15740,51244,'kill_tiered_power_drain_p2p',0),(15741,51247,'kill_cast_flash_jump_attack',0),(15742,51252,'kill_result_forced_shader_rock_blue',0),(15743,51253,'kill_result_forced_shader_rock_green',0),(15744,51254,'kill_result_forced_shader_rock_purple',0),(15745,51255,'kill_result_forced_shader_rock_yellow',0),(15746,51256,'kill_result_iksar_statue_beam_p2p',0),(15747,51257,'kill_result_root_magic',0),(15748,51258,'kill_result_stifle_magic',0),(15749,51265,'kill_result_shackles_void',0),(15750,51271,'kill_design_bixie_pet',0),(15751,51272,'kill_design_bones_shockwave',0),(15752,51273,'kill_design_void_shield',0),(15753,51276,'kill_cast_column_blast_circle',0),(15754,51277,'kill_cast_goo_bubble_bursting',0),(15755,51280,'kill_cast_raise_dead_column',0),(15756,51283,'kill_result_bone_cyclone',0),(15757,51284,'kill_result_cold_blast_snow',0),(15758,51285,'kill_result_flame_burst',0),(15759,51286,'kill_result_gloop_root',0),(15760,51293,'kill_result_boot_kick',0),(15761,51294,'kill_result_sonic_trail',0),(15762,51300,'kill_design_barrier_void',0),(15763,51301,'kill_design_er_light_beam_p2p',0),(15764,51302,'kill_design_er_target_cube',0),(15765,51308,'kill_design_erudin_column_fx',0),(15766,51309,'kill_design_shield_drop',0),(15767,51312,'kill_sound_electrified',0),(15768,51313,'kill_sound_shield_drop',0),(15769,51316,'kill_attack_eye_beams',0),(15770,51319,'kill_charge_mouth_fx',0),(15771,51321,'kill_design_gazer_eye_beam_p2p',0),(15772,51322,'kill_fx_eye_beam1',0),(15773,51323,'kill_fx_eye_beam2',0),(15774,51324,'kill_fx_eye_beam3',0),(15775,51325,'kill_fx_eye_beam4',0),(15776,51326,'kill_fx_eye_beam5',0),(15777,51327,'kill_fx_eye_charge',0),(15778,51329,'kill_result_disintegrate',0),(15779,51331,'kill_sound_charge',0),(15780,51332,'kill_sound_charge_blast',0),(15781,51338,'kill_design_erudin_wind_boost',0),(15782,51339,'kill_design_rocket_pack',0),(15783,51342,'kill_wind_blast_sound',0),(15784,51345,'kill_attack_eye_ring',0),(15785,51349,'kill_design_erudin_column_charge',0),(15786,51350,'kill_design_gazer_main_eye_beam_p2p',0),(15787,51352,'kill_result_melt',0),(15788,51354,'kill_sit',0),(15789,51355,'kill_sit_to_idle',0),(15790,51361,'kill_design_erudin_gazer_barrier',0),(15791,51363,'kill_power_on',0),(15792,51369,'kill_design_erudin_gun_plugged',0),(15793,51370,'kill_design_erudin_gun_unplugged',0),(15794,51371,'kill_habitat01',0),(15795,51372,'kill_habitat02',0),(15796,51373,'kill_habitat03',0),(15797,51374,'kill_idle01_stone',0),(15798,51375,'kill_idle_stone',0),(15799,51377,'kill_scarecrow_post_idle',0),(15800,51379,'kill_shield_bash',0),(15801,51385,'kill_design_bat_pet',0),(15802,51387,'kill_result_bubble_glow',0),(15803,51388,'kill_result_leaf_blow_glow',0),(15804,51395,'kill_result_splat_add',0),(15805,51400,'kill_cast_summon',0),(15806,51402,'kill_design_guardian_wisp_summon_p2p',0),(15807,51404,'kill_result_buble_leaf_blast',0),(15808,51410,'kill_design_eru_book_cyclone',0),(15809,51411,'kill_design_eru_book_ramp',0),(15810,51417,'kill_design_erudin_teleport_good',0),(15811,51418,'kill_design_erudin_teleport_trap',0),(15812,51420,'kill_result_teleport_ring_vanish',0),(15813,51422,'kill_tiered_unyielding_will',0),(15814,51430,'kill_tiered_black_hole',0),(15815,51438,'kill_sound_bark',0),(15816,51439,'kill_sound_combat_idle',0),(15817,51440,'kill_sound_dead_fall',0),(15818,51441,'kill_sound_death_whimper',0),(15819,51442,'kill_sound_pant',0),(15820,51443,'kill_sound_sniff',0),(15821,51449,'kill_design_icy_barrier',0),(15822,51451,'kill_result_teleport_icy_vanish',0),(15823,51459,'kill_tiered_acid_storm',0),(15824,51460,'kill_tiered_bone_cage',0),(15825,51461,'kill_tiered_dark_cyclone',0),(15826,51462,'kill_tiered_rift',0),(15827,51463,'kill_tiered_skull_summon',0),(15828,51464,'kill_tiered_skull_swirls',0),(15829,51471,'kill_rain_of_shinies',0),(15830,51474,'kill_cast_gathering_charge_up',0),(15831,51479,'kill_result_charge_tag',0),(15832,51480,'kill_result_nuke_blast',0),(15833,51481,'kill_result_pillar_blast',0),(15834,51482,'kill_result_pillar_slam',0),(15835,51483,'kill_result_precharge_blast',0),(15836,51489,'kill_design_book_shield1',0),(15837,51490,'kill_design_book_shield2',0),(15838,51491,'kill_design_book_shield3',0),(15839,51492,'kill_design_book_summon1',0),(15840,51493,'kill_design_book_summon2',0),(15841,51494,'kill_design_book_summon3',0),(15842,51497,'kill_badge_acquired',0),(15843,51501,'kill_cooked/characters/ec/core/mounts/pegasus/pegasus_glide.anim',0),(15844,51502,'kill_design_claw_face',0),(15845,51504,'kill_pegasus_glide',0),(15846,51505,'kill_pegasus_idle',0),(15847,51506,'kill_pegasus_run',0),(15848,51507,'kill_pegasus_walk',0),(15849,51509,'kill_sound_vortex',0),(15850,51514,'kill_coin_drop_snd',0),(15851,51516,'kill_design_coin_drop',0),(15852,51522,'kill_design_air_portal',0),(15853,51523,'kill_design_fear_portal',0),(15854,51524,'kill_design_growth_portal',0),(15855,51525,'kill_design_water_portal',0),(15856,51531,'kill_design_clouds_parting',0),(15857,51532,'kill_design_summon',0),(15858,51533,'kill_design_unsummon',0),(15859,51539,'kill_design_death_beam_p2p',0),(15860,51540,'kill_design_statue_death_beam_p2p',0),(15861,51541,'kill_design_statue_power',0),(15862,51542,'kill_design_zapper_bolt_p2p',0),(15863,51549,'kill_result_forced_shader_shadow',0),(15864,51550,'kill_result_ghost_trap',0),(15865,51556,'kill_cooked/characters/ec/core/mounts/pegasus/pegasus_run.anim',0),(15866,51557,'kill_design_coffin_explode',0),(15867,51558,'kill_design_coffin_lid',0),(15868,51559,'kill_design_erollisi_essence',0),(15869,51560,'kill_design_erollisi_evil_essence',0),(15870,51561,'kill_design_light_rays',0),(15871,51563,'kill_pegasus_fly',0),(15872,51566,'kill_cast_enter',0),(15873,51567,'kill_cast_exit',0),(15874,51568,'kill_cast_idle',0),(15875,51574,'kill_design_marr_godly_light',0),(15876,51575,'kill_design_marr_godly_teleport',0),(15877,51577,'kill_result_sparkles_cling_drop_bounce',0),(15878,51583,'kill_design_flaming_pumpkin_p2p',0),(15879,51586,'kill_snd_splat',0),(15880,51587,'kill_trdskl_flaming_pumpkin',0),(15881,51594,'kill_result_cold_summon_portal',0),(15882,51595,'kill_result_teleport_blast_up',0),(15883,51596,'kill_result_teleport_fold',0),(15884,51598,'kill_sound_attack_grunt',0),(15885,51599,'kill_sound_attack_stab',0),(15886,51600,'kill_sound_attack_vo',0),(15887,51601,'kill_sound_attack_vo_01',0),(15888,51602,'kill_sound_attack_whip_high',0),(15889,51603,'kill_sound_attack_whip_low',0),(15890,51604,'kill_sound_attack_whip_low_01',0),(15891,51605,'kill_sound_attack_whirl',0),(15892,51606,'kill_sound_cast_enter_bodynoise_01',0),(15893,51607,'kill_sound_cast_enter_bodynoise_02',0),(15894,51608,'kill_sound_cast_enter_roar',0),(15895,51609,'kill_sound_cast_exit_roar',0),(15896,51610,'kill_sound_cast_exit_spring',0),(15897,51611,'kill_sound_cast_idle',0),(15898,51612,'kill_sound_combat_art_buff_bodynoise_01',0),(15899,51613,'kill_sound_combat_art_buff_bodynoise_02',0),(15900,51614,'kill_sound_combat_art_buff_roar',0),(15901,51615,'kill_sound_footstep_deep',0),(15902,51616,'kill_sound_footstep_small',0),(15903,51617,'kill_sound_idle_bodynoise',0),(15904,51618,'kill_sound_idle_breath',0),(15905,51619,'kill_sound_idle_breath_01',0),(15906,51620,'kill_sound_rockbody',0),(15907,51621,'kill_sound_roperbodynoise_quick',0),(15908,51622,'kill_sound_roperbodynoise_slow',0),(15909,51625,'kill_cast_ice_pulse',0),(15910,51626,'kill_cast_icicle_spin_blast',0),(15911,51631,'kill_result_icicle_hit',0),(15912,51634,'kill_attack_head_butt',0),(15913,51635,'kill_attack_trample',0),(15914,51642,'kill_result_lightning_bolt_blast',0),(15915,51643,'kill_result_mana_drain_p2p',0),(15916,51644,'kill_result_rainy_black_cloud',0),(15917,51645,'kill_result_spikes_hit',0),(15918,51650,'kill_cast_stomp_blast_aoe',0),(15919,51653,'kill_result_banish',0),(15920,51654,'kill_result_banish_wisps_p2p',0),(15921,51655,'kill_result_icicle_storm',0),(15922,51661,'kill_design_ice_chains',0),(15923,51663,'kill_screech_attack',0),(15924,51665,'kill_sound_head_butt',0),(15925,51671,'kill_design_bone_barrier',0),(15926,51673,'kill_result_fireworks_shinies',0),(15927,51676,'kill_cannon_blast',0),(15928,51681,'kill_kneel_enter',0),(15929,51682,'kill_kneel_exit',0),(15930,51683,'kill_kneel_idle',0),(15931,51684,'kill_result_octopus_cannon_p2p',0),(15932,51685,'kill_result_octopus_splat_grab',0),(15933,51691,'kill_design_vd_bone_swirls',0),(15934,51692,'kill_design_vd_portal',0),(15935,51693,'kill_design_void_tainted',0),(15936,51694,'kill_flight_path_dawn',0),(15937,51701,'kill_result_plasma_bolt_p2p',0),(15938,51706,'kill_cast_sea_dragon_breath',0),(15939,51707,'kill_cast_sea_dragon_inhale',0),(15940,51708,'kill_cast_sea_dragon_powerup',0),(15941,51710,'kill_converse01',0),(15942,51711,'kill_converse02',0),(15943,51713,'kill_panda_chi',0),(15944,51715,'kill_sit_eat',0),(15945,51716,'kill_yells_charge',0),(15946,51722,'kill_hover_idle',0),(15947,51728,'kill_design_hedge_marker',0),(15948,51729,'kill_design_sol_lock_symbol',0),(15949,51730,'kill_h_sword_attack',0),(15950,51732,'kill_panda_dance01',0),(15951,51733,'kill_panda_dance02',0),(15952,51734,'kill_result_sea_dragon_buff_aoe',0),(15953,51740,'kill_design_marr_sword_blast',0),(15954,51741,'kill_design_vision_plane_spires',0),(15955,51747,'kill_design_sol_chapel_debris',0),(15956,51753,'kill_design_hole_pillar_corruption',0),(15957,51759,'kill_design_sol_coffin_body_fx',0),(15958,51765,'kill_design_spider_face',0),(15959,51771,'kill_design_vd_shrine_blast',0),(15960,51777,'kill_design_hole_summon_circle1',0),(15961,51778,'kill_design_hole_summon_circle2',0),(15962,51779,'kill_design_hole_summon_circle3',0),(15963,51780,'kill_design_hole_summon_circle4',0),(15964,51781,'kill_design_hole_summon_circles',0),(15965,51788,'kill_result_fireworks_rose_petals',0),(15966,51796,'kill_sound_glass_break',0),(15967,51802,'kill_design_fire_lit',0),(15968,51803,'kill_design_rhand_sparkles_out',0),(15969,51804,'kill_design_rhand_stars_out',0),(15970,51805,'kill_design_rune_fire_lit',0),(15971,51808,'kill_sit_fish',0),(15972,51811,'kill_cast_god_blast',0),(15973,51815,'kill_eat_bread',0),(15974,51816,'kill_eat_fish',0),(15975,51819,'kill_cast_magic_portal',0),(15976,51824,'kill_result_fireworks_snowflakes',0),(15977,51825,'kill_result_snowflakes_falling',0),(15978,51831,'kill_design_furnace_fire_blast',0),(15979,51832,'kill_design_golden_fire_lit',0),(15980,51838,'kill_design_personal_void_vortex',0),(15981,51841,'kill_cast_icy_division',0),(15982,51847,'kill_design_fire_elemental_smoke_blast',0),(15983,51848,'kill_design_hole_furnace_charge',0),(15984,51849,'kill_design_hole_furnace_essence',0),(15985,51855,'kill_design_crossed_swords',0),(15986,51856,'kill_design_feet_trail_clockwork',0),(15987,51857,'kill_design_feet_trail_confusion',0),(15988,51858,'kill_design_feet_trail_rose_petals',0),(15989,51859,'kill_design_feet_trail_shamrocks',0),(15990,51860,'kill_design_feet_trail_skulls',0),(15991,51861,'kill_design_feet_trail_snow',0),(15992,51866,'kill_cast_water_shield',0),(15993,51869,'kill_result_diseased',0),(15994,51870,'kill_result_stew_pot_dump',0),(15995,51876,'kill_converse03',0),(15996,51882,'kill_design_vd_shrine_bridge',0),(15997,51883,'kill_design_vd_shrine_dome',0),(15998,51889,'kill_dust_fx',0),(15999,51892,'kill_cast_medusa_snake_attack_aoe',0),(16000,51893,'kill_cast_medusa_snake_attack_p2p',0),(16001,51894,'kill_cast_medusa_snake_buff',0),(16002,51898,'kill_fly_from_roost',0),(16003,51900,'kill_result_medusa_snake_strike',0),(16004,51902,'kill_untrained_enter',0),(16005,51905,'kill_cast_lost_souls_rising',0),(16006,51906,'kill_cast_poison_column_blast',0),(16007,51909,'kill_cast_stone_gaze',0),(16008,51912,'kill_result_eel_spit_p2p',0),(16009,51913,'kill_result_medusa_snake_attack_p2p',0),(16010,51914,'kill_result_poisoned',0),(16011,51920,'kill_design_eru_light_bridge',0),(16012,51921,'kill_design_vd_shrine_bridge1',0),(16013,51922,'kill_design_vd_shrine_bridge2',0),(16014,51925,'kill_cast_poison_daggers',0),(16015,51930,'kill_result_amputation',0),(16016,51931,'kill_result_amputation_blast',0),(16017,51933,'kill_trdskl_bow',0),(16018,51940,'kill_result_dark_wings',0),(16019,51946,'kill_dw_attack_enter',0),(16020,51947,'kill_dw_attack_exit',0),(16021,51948,'kill_dw_attack_hold',0),(16022,51949,'kill_fly_away',0),(16023,51951,'kill_result_fist_rain',0),(16024,51959,'kill_smoke_fx',0),(16025,51967,'kill_trdskl_firefly_escape',0),(16026,51968,'kill_trdskl_firefly_jar',0),(16027,51973,'kill_cast_watching',0),(16028,51976,'kill_result_bullseye',0),(16029,51981,'kill_cast_weapon_chargeup',0),(16030,51982,'kill_cast_weapon_glint_point',0),(16031,51983,'kill_cast_weapon_shudder',0),(16032,51989,'kill_dual_wield_idle01',0),(16033,51990,'kill_habitat04',0),(16034,51996,'kill_design_boulder_roll',0),(16035,51997,'kill_design_boulder_shatter',0),(16036,51998,'kill_design_vd_teleport_fx',0),(16037,52005,'kill_quick_summon_fx',0),(16038,52013,'kill_smoke_fx_short',0),(16039,52016,'kill_cast_ghostly_vanish',0),(16040,52021,'kill_result_ghostly_possession_p2p',0),(16041,52023,'kill_sound_big_footstep',0),(16042,52024,'kill_sound_roehn_theer_cast_roar',0),(16043,52025,'kill_sound_roehn_theer_cast_roar_1',0),(16044,52026,'kill_sound_roehn_theer_combat_art_buff_roar',0),(16045,52027,'kill_sound_roehn_theer_combat_idle_wings',0),(16046,52028,'kill_sound_roehn_theer_death_roar',0),(16047,52029,'kill_sound_roehn_theer_dodge_grunt',0),(16048,52030,'kill_sound_roehn_theer_footstep_deep',0),(16049,52031,'kill_sound_roehn_theer_footstep_light',0),(16050,52032,'kill_sound_roehn_theer_grunt_quick',0),(16051,52033,'kill_sound_roehn_theer_hit',0),(16052,52034,'kill_sound_roehn_theer_idle_04_knuckles',0),(16053,52035,'kill_sound_roehn_theer_idle_hiss',0),(16054,52036,'kill_sound_roehn_theer_idle_hiss_light',0),(16055,52037,'kill_sound_roehn_theer_ouch',0),(16056,52038,'kill_sound_roehn_theer_sheath',0),(16057,52039,'kill_sound_roehn_theer_shield_shove_grunt',0),(16058,52040,'kill_sound_roehn_theer_sit_wings_short',0),(16059,52041,'kill_sound_roehn_theer_stomp',0),(16060,52042,'kill_sound_roehn_theer_swim_idle',0),(16061,52043,'kill_sound_roehn_theer_sword_attack_grunt',0),(16062,52044,'kill_sound_roehn_theer_sword_attack_grunt_quick',0),(16063,52045,'kill_sound_roehn_theer_sword_swoosh',0),(16064,52046,'kill_sound_roehn_theer_tail_whoosh',0),(16065,52047,'kill_sound_roehn_theer_tail_whoosh_deep',0),(16066,52048,'kill_sound_roehn_theer_unsheath',0),(16067,52049,'kill_sound_roehn_theer_wings',0),(16068,52050,'kill_sound_roehn_theer_wings_1',0),(16069,52057,'kill_mage_combo_trigger',0),(16070,52058,'kill_result_blast_hit',0),(16071,52059,'kill_result_mesh_blast',0),(16072,52060,'kill_result_skull_lifetap',0),(16073,52063,'kill_cast_crackling_rift_summon',0),(16074,52068,'kill_scout_combo_trigger',0),(16075,52070,'kill_sound_attack_grunt_small',0),(16076,52071,'kill_sound_combat_enter_pop',0),(16077,52072,'kill_sound_combat_enter_vox',0),(16078,52073,'kill_sound_combat_enter_woodbreak',0),(16079,52074,'kill_sound_dodge_down',0),(16080,52075,'kill_sound_reverberant_bang',0),(16081,52076,'kill_sound_whip_hit',0),(16082,52077,'kill_swim',0),(16083,52083,'kill_design_eru_lightning_barrier',0),(16084,52084,'kill_design_eru_water_barrier',0),(16085,52090,'kill_design_eru_ring_boundary',0),(16086,52092,'kill_result_eru_tether_p2p',0),(16087,52098,'kill_design_eru_alcove_broken',0),(16088,52099,'kill_design_eru_alcove_working',0),(16089,52100,'kill_design_eru_platform_discharge',0),(16090,52101,'kill_design_eru_platform_summon',0),(16091,52106,'kill_cast_wand_fizzle',0),(16092,52109,'kill_result_lightning_cage_blast',0),(16093,52110,'kill_result_wand_lightning_bolts_p2p',0),(16094,52118,'kill_sound_big_wings',0),(16095,52119,'kill_sound_toxxulia_attack_roar',0),(16096,52120,'kill_sound_toxxulia_bark',0),(16097,52121,'kill_sound_toxxulia_big_footsteps',0),(16098,52122,'kill_sound_toxxulia_cast_roar',0),(16099,52123,'kill_sound_toxxulia_feet_nails',0),(16100,52124,'kill_sound_toxxulia_growl',0),(16101,52125,'kill_sound_toxxulia_grunt',0),(16102,52126,'kill_sound_toxxulia_hiss',0),(16103,52127,'kill_sound_toxxulia_hiss_quiet',0),(16104,52128,'kill_sound_toxxulia_idle_wing_movement_short',0),(16105,52129,'kill_sound_toxxulia_ouch_hit',0),(16106,52130,'kill_sound_toxxulia_scrape',0),(16107,52131,'kill_sound_toxxulia_swallow_crunch_close',0),(16108,52132,'kill_sound_toxxulia_swallow_crunch_open',0),(16109,52133,'kill_sound_toxxulia_swallow_roar',0),(16110,52134,'kill_sound_toxxulia_swallow_slop',0),(16111,52135,'kill_sound_toxxulia_swim',0),(16112,52136,'kill_sound_toxxulia_tail_drop',0),(16113,52137,'kill_sound_toxxulia_walk',0),(16114,52138,'kill_sound_toxxulia_whip',0),(16115,52139,'kill_sound_toxxulia_whip_light',0),(16116,52140,'kill_sound_toxxulia_wing_movement',0),(16117,52141,'kill_sound_toxxulia_wings_flapping',0),(16118,52149,'kill_tiered_confused',0),(16119,52150,'kill_tiered_doppleganger_p2p',0),(16120,52151,'kill_tiered_entranced',0),(16121,52152,'kill_tiered_forced_shader_prism',0),(16122,52153,'kill_tiered_glow_eyes',0),(16123,52154,'kill_tiered_hand_crescent',0),(16124,52155,'kill_tiered_hand_prism',0),(16125,52156,'kill_tiered_mage_cure',0),(16126,52157,'kill_tiered_mage_ring_cure',0),(16127,52158,'kill_tiered_mental_blast',0),(16128,52159,'kill_tiered_mental_damage',0),(16129,52160,'kill_tiered_prism_eyes',0),(16130,52161,'kill_tiered_prism_rain',0),(16131,52162,'kill_tiered_prism_rays',0),(16132,52163,'kill_tiered_prismatic_summon',0),(16133,52164,'kill_tiered_runed_shield',0),(16134,52165,'kill_tiered_spin_stat_buff',0),(16135,52166,'kill_tiered_vanish_reappear',0),(16136,52174,'kill_tiered_mind_rings',0),(16137,52175,'kill_tiered_stunned',0),(16138,52183,'kill_tiered_mind_blast',0),(16139,52184,'kill_tiered_prism_cling',0),(16140,52192,'kill_tiered_crystal_summon',0),(16141,52193,'kill_tiered_magic_summon',0),(16142,52194,'kill_tiered_power_transfer_p2p',0),(16143,52195,'kill_tiered_sucking_tube_p2p',0),(16144,52203,'kill_tiered_bat_attack_p2p',0),(16145,52204,'kill_tiered_crystal_blast',0),(16146,52205,'kill_tiered_crystal_p2p',0),(16147,52206,'kill_tiered_earth_summon',0),(16148,52207,'kill_tiered_quicksand',0),(16149,52208,'kill_tiered_shrink',0),(16150,52216,'kill_tiered_air_summon',0),(16151,52217,'kill_tiered_earthquake',0),(16152,52218,'kill_tiered_elemental_portal',0),(16153,52219,'kill_tiered_fire_summon',0),(16154,52220,'kill_tiered_life_summon',0),(16155,52221,'kill_tiered_plane_shift',0),(16156,52227,'kill_gazer_pained_roar',0),(16157,52230,'kill_sound_gazer_attack02_roar',0),(16158,52231,'kill_sound_gazer_attack03_roar',0),(16159,52232,'kill_sound_gazer_attack_roar',0),(16160,52233,'kill_sound_gazer_attack_woosh',0),(16161,52234,'kill_sound_gazer_attack_woosh_quiet',0),(16162,52235,'kill_sound_gazer_bite_roar',0),(16163,52236,'kill_sound_gazer_bodynoise',0),(16164,52237,'kill_sound_gazer_bodynoise_fall',0),(16165,52238,'kill_sound_gazer_bodynoise_fall_deep',0),(16166,52239,'kill_sound_gazer_bodynoise_fall_dirt',0),(16167,52240,'kill_sound_gazer_bodynoise_long',0),(16168,52241,'kill_sound_gazer_breath',0),(16169,52242,'kill_sound_gazer_breath_grunt',0),(16170,52243,'kill_sound_gazer_combat_art_buff_roar',0),(16171,52244,'kill_sound_gazer_crunch',0),(16172,52245,'kill_sound_gazer_deadfall',0),(16173,52246,'kill_sound_gazer_eyeball_gross',0),(16174,52247,'kill_sound_gazer_eyeball_pop',0),(16175,52248,'kill_sound_gazer_eyeball_pop_quiet',0),(16176,52249,'kill_sound_gazer_eyeball_twirl',0),(16177,52250,'kill_sound_gazer_growl_low',0),(16178,52251,'kill_sound_gazer_grunt_short',0),(16179,52252,'kill_sound_gazer_liddown',0),(16180,52253,'kill_sound_gazer_swim',0),(16181,52254,'kill_sound_gazer_swim_idle',0),(16182,52255,'kill_sound_gazer_whip',0),(16183,52256,'kill_sound_gazer_whip_impact',0),(16184,52257,'kill_sound_gazer_whip_low',0),(16185,52258,'kill_tiered_clouds_head',0),(16186,52259,'kill_tiered_hand_dark_rings',0),(16187,52260,'kill_tiered_heart_summon',0),(16188,52261,'kill_tiered_undead_tide',0),(16189,52262,'kill_tiered_vampirism_p2p',0),(16190,52265,'kill_attack_eat',0),(16191,52270,'kill_perch_idle',0),(16192,52277,'kill_result_steam_cup',0),(16193,52283,'kill_design_glow_full',0),(16194,52284,'kill_design_glow_low',0),(16195,52285,'kill_design_glow_med',0),(16196,52287,'kill_result_energy_drain_p2p',0),(16197,52288,'kill_result_meditate_rings',0),(16198,52294,'kill_design_hole_mines',0),(16199,52295,'kill_design_hole_mines_blast',0),(16200,52298,'kill_sound_mine_blast',0),(16201,52299,'kill_sound_mine_splash',0),(16202,52305,'kill_design_th_platform',0),(16203,52306,'kill_design_th_platform_collapse',0),(16204,52307,'kill_design_th_platform_rift',0),(16205,52315,'kill_sound_displacer_beast_attack_1',0),(16206,52316,'kill_sound_displacer_beast_footstep',0),(16207,52317,'kill_sound_displacer_beast_footstep_dirt',0),(16208,52318,'kill_sound_displacer_beast_hiss',0),(16209,52319,'kill_sound_displacer_beast_idle',0),(16210,52320,'kill_sound_displacer_beast_idle_long',0),(16211,52321,'kill_sound_displacer_beast_whip',0),(16212,52322,'kill_sound_displacer_beast_whip_deep',0),(16213,52323,'kill_sound_displacer_beast_whip_high',0),(16214,52326,'kill_cast_air_sample',0),(16215,52331,'kill_cast_tallonite_lash_cone',0),(16216,52332,'kill_cast_tallonite_lash_summon',0),(16217,52335,'kill_lynx_backup',0),(16218,52336,'kill_lynx_fall',0),(16219,52337,'kill_lynx_idle',0),(16220,52338,'kill_lynx_jump',0),(16221,52339,'kill_lynx_jump_substitute',0),(16222,52340,'kill_lynx_land',0),(16223,52341,'kill_lynx_long_fall',0),(16224,52342,'kill_lynx_run',0),(16225,52343,'kill_lynx_turn_left',0),(16226,52344,'kill_lynx_turn_right',0),(16227,52345,'kill_lynx_walk',0),(16228,52346,'kill_result_tallonite_barb_p2p',0),(16229,52347,'kill_result_trail_tallonite',0),(16230,52350,'kill_attack_throw_boulder',0),(16231,52353,'kill_cast_tallonite_balance',0),(16232,52356,'kill_result_cloud_dot_blast',0),(16233,52357,'kill_result_tallonite_lash_p2p',0),(16234,52364,'kill_result_tallonite_lash_skulls_p2p',0),(16235,52365,'kill_result_tallonite_skull_control',0),(16236,52366,'kill_result_tallonite_sphere',0),(16237,52368,'kill_sound_displacer_beast_attack_2',0),(16238,52369,'kill_sound_displacer_beast_attack_3',0),(16239,52370,'kill_sound_displacer_beast_bark',0),(16240,52371,'kill_sound_displacer_beast_big_purr',0),(16241,52372,'kill_sound_displacer_beast_blade_fall',0),(16242,52373,'kill_sound_displacer_beast_blade_swoosh',0),(16243,52374,'kill_sound_displacer_beast_charge_up_roar',0),(16244,52375,'kill_sound_displacer_beast_dead_1',0),(16245,52376,'kill_sound_displacer_beast_dead_2',0),(16246,52377,'kill_sound_displacer_beast_dodge_thrust_roar',0),(16247,52378,'kill_sound_displacer_beast_fall_small',0),(16248,52379,'kill_sound_displacer_beast_footstep_deep',0),(16249,52380,'kill_sound_displacer_beast_idle_breath',0),(16250,52381,'kill_sound_displacer_beast_ouch',0),(16251,52382,'kill_sound_displacer_beast_ouch_hit',0),(16252,52383,'kill_sound_displacer_beast_pulse',0),(16253,52384,'kill_sound_displacer_beast_pulse_crunch',0),(16254,52385,'kill_sound_displacer_beast_small_purr',0),(16255,52386,'kill_sound_displacer_beast_swim',0),(16256,52394,'kill_sound_pandaman_footstep',0),(16257,52395,'kill_sound_pandaman_idle_breathing',0),(16258,52396,'kill_sound_pegasus_attack',0),(16259,52397,'kill_sound_pegasus_attack_1',0),(16260,52398,'kill_sound_pegasus_attack_4',0),(16261,52399,'kill_sound_pegasus_death_fall',0),(16262,52400,'kill_sound_pegasus_death_niegh',0),(16263,52401,'kill_sound_pegasus_grunt',0),(16264,52402,'kill_sound_pegasus_hooves',0),(16265,52403,'kill_sound_pegasus_hooves_scrape',0),(16266,52404,'kill_sound_pegasus_idle_1',0),(16267,52405,'kill_sound_pegasus_idle_2',0),(16268,52406,'kill_sound_pegasus_idle_slow',0),(16269,52407,'kill_sound_pegasus_idleloop',0),(16270,52408,'kill_sound_pegasus_limb_whip',0),(16271,52409,'kill_sound_pegasus_ouch_1',0),(16272,52410,'kill_sound_pegasus_ouch_hit',0),(16273,52411,'kill_sound_pegasus_snort_quick',0),(16274,52412,'kill_sound_pegasus_wings_soft',0),(16275,52419,'kill_lynx_idle01',0),(16276,52424,'kill_cast_spin_flash_buff',0),(16277,52425,'kill_cast_tallonite_dagger_blast',0),(16278,52427,'kill_energy_blobs_kick_blast',0),(16279,52429,'kill_result_slow',0),(16280,52434,'kill_cast_tallonite_axe_throw',0),(16281,52435,'kill_cast_tallonite_glow_eyes',0),(16282,52437,'kill_design_sen_lava_falls',0),(16283,52438,'kill_design_sen_lightning_rune_orb',0),(16284,52444,'kill_design_eru_column_protection',0),(16285,52450,'kill_design_theer_fire_forrest',0),(16286,52451,'kill_design_theer_fire_passion',0),(16287,52452,'kill_design_theer_fire_water',0),(16288,52453,'kill_design_theer_fire_wrath',0),(16289,52454,'kill_design_theer_obj_forrest',0),(16290,52455,'kill_design_theer_obj_passion',0),(16291,52456,'kill_design_theer_obj_water',0),(16292,52457,'kill_design_theer_obj_wrath',0),(16293,52458,'kill_design_theer_symbol_blast',0),(16294,52459,'kill_design_theer_symbol_evil',0),(16295,52460,'kill_design_theer_symbol_forrest',0),(16296,52461,'kill_design_theer_symbol_good',0),(16297,52462,'kill_design_theer_symbol_none',0),(16298,52463,'kill_design_theer_symbol_passion',0),(16299,52464,'kill_design_theer_symbol_water',0),(16300,52465,'kill_design_theer_symbol_wrath',0),(16301,52466,'kill_design_theer_wrath_blast',0),(16302,52469,'kill_cast_massive_ring_blast',0),(16303,52474,'kill_result_billowing_energy',0),(16304,52475,'kill_result_seeping_energy',0),(16305,52481,'kill_design_odus_dome_barrier',0),(16306,52483,'kill_result_fiery_sun',0),(16307,52484,'kill_result_healing_flora',0),(16308,52485,'kill_result_singing_wind',0),(16309,52487,'kill_sound_catoplebus_attack_roar_1',0),(16310,52488,'kill_sound_catoplebus_attack_roar_2',0),(16311,52489,'kill_sound_catoplebus_attack_roar_3',0),(16312,52490,'kill_sound_catoplebus_body_movement',0),(16313,52491,'kill_sound_catoplebus_cast_roar',0),(16314,52492,'kill_sound_catoplebus_combat_art_buff_roar',0),(16315,52493,'kill_sound_catoplebus_crunch',0),(16316,52494,'kill_sound_catoplebus_death_roar',0),(16317,52495,'kill_sound_catoplebus_dodge_grunt',0),(16318,52496,'kill_sound_catoplebus_dodge_roar',0),(16319,52497,'kill_sound_catoplebus_footstep',0),(16320,52498,'kill_sound_catoplebus_footstep_deep',0),(16321,52499,'kill_sound_catoplebus_footstep_deep_soft',0),(16322,52500,'kill_sound_catoplebus_idle_grunt',0),(16323,52501,'kill_sound_catoplebus_idle_roar',0),(16324,52502,'kill_sound_catoplebus_idle_sniff',0),(16325,52503,'kill_sound_catoplebus_idle_snort',0),(16326,52504,'kill_sound_catoplebus_slide',0),(16327,52505,'kill_sound_catoplebus_swim',0),(16328,52506,'kill_sound_catoplebus_swim_idle',0),(16329,52507,'kill_sound_catoplebus_tail_whoosh',0),(16330,52508,'kill_sound_cerberus_attack_roar',0),(16331,52509,'kill_sound_cerberus_cast_roar',0),(16332,52510,'kill_sound_cerberus_combat_art_buff_roar',0),(16333,52511,'kill_sound_cerberus_death_fall',0),(16334,52512,'kill_sound_cerberus_death_roar',0),(16335,52513,'kill_sound_cerberus_dodge_bark',0),(16336,52514,'kill_sound_cerberus_dodge_growl',0),(16337,52515,'kill_sound_cerberus_growl',0),(16338,52516,'kill_sound_cerberus_idle_howl_1',0),(16339,52517,'kill_sound_cerberus_idle_howl_2',0),(16340,52518,'kill_sound_cerberus_idle_howl_long',0),(16341,52519,'kill_sound_cerberus_scrape',0),(16342,52520,'kill_sound_cerberus_snarl',0),(16343,52521,'kill_sound_cerberus_swim',0),(16344,52522,'kill_trdskl_transmute_complete',0),(16345,52523,'kill_trdskl_transmute_rings',0),(16346,52531,'kill_sound_goatmen_lf_stomp',0),(16347,52532,'kill_sound_goatmen_armor_long',0),(16348,52533,'kill_sound_goatmen_armor_short_loud',0),(16349,52534,'kill_sound_goatmen_armor_short_quiet',0),(16350,52535,'kill_sound_goatmen_attack_roar',0),(16351,52536,'kill_sound_goatmen_blade_swoosh_1',0),(16352,52537,'kill_sound_goatmen_blade_swoosh_2',0),(16353,52538,'kill_sound_goatmen_body_fall',0),(16354,52539,'kill_sound_goatmen_body_movement_short',0),(16355,52540,'kill_sound_goatmen_bow_enter',0),(16356,52541,'kill_sound_goatmen_bow_exit',0),(16357,52542,'kill_sound_goatmen_bow_getarrow',0),(16358,52543,'kill_sound_goatmen_bow_pullback',0),(16359,52544,'kill_sound_goatmen_bow_release',0),(16360,52545,'kill_sound_goatmen_breath_out',0),(16361,52546,'kill_sound_goatmen_cast_yell',0),(16362,52547,'kill_sound_goatmen_combat_art_buff',0),(16363,52548,'kill_sound_goatmen_death_roar',0),(16364,52549,'kill_sound_goatmen_death_roar_2',0),(16365,52550,'kill_sound_goatmen_footstep',0),(16366,52551,'kill_sound_goatmen_grunt',0),(16367,52552,'kill_sound_goatmen_ouch',0),(16368,52553,'kill_sound_goatmen_scrape',0),(16369,52554,'kill_sound_goatmen_snort',0),(16370,52555,'kill_sound_goatmen_swim',0),(16371,52556,'kill_sound_goatmen_weapon_twirl',0),(16372,52562,'kill_design_pulse_beacon',0),(16373,52563,'kill_design_shard_blast',0),(16374,52565,'kill_pandamen_wildswing_attack',0),(16375,52566,'kill_pulse_sound',0),(16376,52569,'kill_sound_pandamen_bark',0),(16377,52570,'kill_sound_pandamen_bleat',0),(16378,52571,'kill_sound_pandamen_bow_getarrow',0),(16379,52572,'kill_sound_pandamen_bow_pullback',0),(16380,52573,'kill_sound_pandamen_bow_release',0),(16381,52574,'kill_sound_pandamen_bow_sheath',0),(16382,52575,'kill_sound_pandamen_bow_unsheath',0),(16383,52576,'kill_sound_pandamen_charge_roar',0),(16384,52577,'kill_sound_pandamen_dead',0),(16385,52578,'kill_sound_pandamen_eat',0),(16386,52579,'kill_sound_pandamen_footslide',0),(16387,52580,'kill_sound_pandamen_footstep_soft',0),(16388,52581,'kill_sound_pandamen_growl',0),(16389,52582,'kill_sound_pandamen_grunt',0),(16390,52583,'kill_sound_pandamen_idle_grunt',0),(16391,52584,'kill_sound_pandamen_idle_grunt_short',0),(16392,52585,'kill_sound_pandamen_movement_cloth_long',0),(16393,52586,'kill_sound_pandamen_movement_cloth_short',0),(16394,52587,'kill_sound_pandamen_scratch',0),(16395,52588,'kill_sound_pandamen_scratch_pant',0),(16396,52589,'kill_sound_pandamen_sit',0),(16397,52590,'kill_sound_pandamen_swim',0),(16398,52591,'kill_sound_pandamen_whoosh',0),(16399,52597,'kill_evil_theer_energy_buff',0),(16400,52598,'kill_good_theer_energy_buff',0),(16401,52600,'kill_result_balanced_judgement',0),(16402,52601,'kill_result_fiery_flames',0),(16403,52602,'kill_result_theer_debuff_down',0),(16404,52603,'kill_result_theer_debuff_up',0),(16405,52604,'kill_result_theer_mana_drain_p2p',0),(16406,52607,'kill_theer_charge_up',0),(16407,52608,'kill_theer_mana_blast',0),(16408,52613,'kill_cast_wyvern_breath',0),(16409,52614,'kill_cast_wyvern_inhale',0),(16410,52616,'kill_design_erudite_switch_evil',0),(16411,52617,'kill_design_erudite_switch_good',0),(16412,52618,'kill_design_murderball_debuff',0),(16413,52621,'kill_sound_chimera_attack_roar_1',0),(16414,52622,'kill_sound_chimera_attack_roar_2',0),(16415,52623,'kill_sound_chimera_attack_roar_3',0),(16416,52624,'kill_sound_chimera_cast_roar',0),(16417,52625,'kill_sound_chimera_cast_roar_short',0),(16418,52626,'kill_sound_chimera_combat_art_buff_roar',0),(16419,52627,'kill_sound_chimera_dead_fall',0),(16420,52628,'kill_sound_chimera_death_roar',0),(16421,52629,'kill_sound_chimera_dodge_down_roar',0),(16422,52630,'kill_sound_chimera_dodge_grunt',0),(16423,52631,'kill_sound_chimera_footslide',0),(16424,52632,'kill_sound_chimera_footstep',0),(16425,52633,'kill_sound_chimera_footstep_big',0),(16426,52634,'kill_sound_chimera_idle_bird_1',0),(16427,52635,'kill_sound_chimera_idle_bird_2',0),(16428,52636,'kill_sound_chimera_idle_bird_3',0),(16429,52637,'kill_sound_chimera_idle_goat_1',0),(16430,52638,'kill_sound_chimera_idle_goat_2',0),(16431,52639,'kill_sound_chimera_idle_goat_3',0),(16432,52640,'kill_sound_chimera_idle_lion_1',0),(16433,52641,'kill_sound_chimera_idle_lion_2',0),(16434,52642,'kill_sound_chimera_idle_lion_3',0),(16435,52643,'kill_sound_chimera_idle_lion_4',0),(16436,52644,'kill_sound_chimera_idle_wings',0),(16437,52645,'kill_sound_chimera_sit_wings_short',0),(16438,52646,'kill_sound_chimera_snake_stab',0),(16439,52647,'kill_sound_chimera_swim',0),(16440,52648,'kill_sound_chimera_wings_big',0),(16441,52650,'kill_sound_lynx_mount_bare_idle',0),(16442,52651,'kill_sound_lynx_mount_bare_roar_1',0),(16443,52652,'kill_sound_lynx_mount_bare_roar_2',0),(16444,52653,'kill_sound_lynx_mount_footstep_quiet',0),(16445,52654,'kill_sound_lynx_mount_land',0),(16446,52655,'kill_sound_odus_kitten_attack_1',0),(16447,52656,'kill_sound_odus_kitten_attack_2',0),(16448,52657,'kill_sound_odus_kitten_attack_3',0),(16449,52658,'kill_sound_odus_kitten_attack_4',0),(16450,52659,'kill_sound_odus_kitten_combat_exit',0),(16451,52660,'kill_sound_odus_kitten_eat_1',0),(16452,52661,'kill_sound_odus_kitten_fall',0),(16453,52662,'kill_sound_odus_kitten_footstep',0),(16454,52663,'kill_sound_odus_kitten_hiss',0),(16455,52664,'kill_sound_odus_kitten_idle_purr_1',0),(16456,52665,'kill_sound_odus_kitten_lick',0),(16457,52666,'kill_sound_odus_kitten_meow_1',0),(16458,52667,'kill_sound_odus_kitten_meow_2',0),(16459,52668,'kill_sound_odus_kitten_ouch_short',0),(16460,52669,'kill_sound_odus_kitten_scratch',0),(16461,52670,'kill_sound_odus_kitten_sneeze',0),(16462,52671,'kill_sound_odus_kitten_swim',0),(16463,52674,'kill_cast_draconian_breath',0),(16464,52677,'kill_cast_wurm_breath',0),(16465,52678,'kill_cast_wurm_crush_blast',0),(16466,52679,'kill_cast_wurm_inhale',0),(16467,52681,'kill_design_active_eggs',0),(16468,52682,'kill_design_hatched_eggs',0),(16469,52683,'kill_design_inactive_eggs',0),(16470,52685,'kill_result_blinded',0),(16471,52686,'kill_result_crush_rings',0),(16472,52692,'kill_design_summon_fx',1045),(16473,52694,'kill_result_summoning_crystal',1045),(16474,52697,'kill_sound_lynx_armor_1',1045),(16475,52698,'kill_sound_lynx_armor_short',1045),(16476,52707,'kill_toxx_breath_attack',1045),(16477,52708,'kill_toxx_breath_inhale',1045),(16478,52715,'kill_result_floor_pie',1045),(16479,52722,'kill_result_lich_evil_drain_p2p',1045),(16480,52723,'kill_result_lich_good_drain_p2p',1045),(16481,52724,'kill_result_theer_evil_drain',1045),(16482,52725,'kill_result_theer_good_drain',1045),(16483,52732,'kill_result_toxic_debuff',1045),(16484,52735,'kill_toxx_breath_attack01',1045),(16485,52736,'kill_toxx_breath_attack02',1045),(16486,52742,'kill_design_kobold_claw',1045),(16487,52743,'kill_design_toxic_sphere0',1045),(16488,52744,'kill_design_toxic_sphere01',1045),(16489,52745,'kill_design_toxic_sphere02',1045),(16490,52746,'kill_design_toxic_sphere03',1045),(16491,52747,'kill_design_toxic_sphere04',1045),(16492,52748,'kill_design_toxic_sphere05',1045),(16493,52750,'kill_result_toxx_essence_trap_p2p',1045),(16494,52752,'kill_sound_catoplebus_ouch',1045),(16495,52753,'kill_sound_catoplebus_ouch_1',1045),(16496,52754,'kill_sound_catoplebus_ouch_2',1045),(16497,52756,'kill_sound_skeletal_1',1045),(16498,52757,'kill_sound_skeletal_10',1045),(16499,52758,'kill_sound_skeletal_11',1045),(16500,52759,'kill_sound_skeletal_12',1045),(16501,52760,'kill_sound_skeletal_13',1045),(16502,52761,'kill_sound_skeletal_14',1045),(16503,52762,'kill_sound_skeletal_15',1045),(16504,52763,'kill_sound_skeletal_16',1045),(16505,52764,'kill_sound_skeletal_17',1045),(16506,52765,'kill_sound_skeletal_18',1045),(16507,52766,'kill_sound_skeletal_19',1045),(16508,52767,'kill_sound_skeletal_2',1045),(16509,52768,'kill_sound_skeletal_20',1045),(16510,52769,'kill_sound_skeletal_21',1045),(16511,52770,'kill_sound_skeletal_22',1045),(16512,52771,'kill_sound_skeletal_3',1045),(16513,52772,'kill_sound_skeletal_4',1045),(16514,52773,'kill_sound_skeletal_5',1045),(16515,52774,'kill_sound_skeletal_6',1045),(16516,52775,'kill_sound_skeletal_7',1045),(16517,52776,'kill_sound_skeletal_8',1045),(16518,52777,'kill_sound_skeletal_9',1045),(16519,52778,'kill_toxx_chained',1045),(16520,52779,'kill_toxx_vanish',1045),(16521,52785,'kill_design_active_head_001',1045),(16522,52786,'kill_design_active_head_010',1045),(16523,52787,'kill_design_active_head_011',1045),(16524,52788,'kill_design_active_head_100',1045),(16525,52789,'kill_design_active_head_101',1045),(16526,52790,'kill_design_active_head_110',1045),(16527,52791,'kill_design_active_head_111',1045),(16528,52792,'kill_design_tallonite_portal',1045),(16529,52793,'kill_design_teleport_druid_ring',1045),(16530,52796,'kill_cast_arcane_blast',1045),(16531,52797,'kill_cast_crush_blast',1045),(16532,52798,'kill_cast_poison_blast',1045),(16533,52802,'kill_design_mystic_barrier',1045),(16534,52808,'kill_design_blue_flag_pickup',1045),(16535,52809,'kill_design_red_flag_pickup',1045),(16536,52815,'kill_death_impact',1045),(16537,52816,'kill_gorgon_attack_roar_01',1045),(16538,52817,'kill_gorgon_attack_roar_02',1045),(16539,52818,'kill_gorgon_breath_in',1045),(16540,52819,'kill_gorgon_breath_out_long',1045),(16541,52820,'kill_gorgon_breath_out_short',1045),(16542,52821,'kill_gorgon_cast_roar_01',1045),(16543,52822,'kill_gorgon_chewing_close',1045),(16544,52823,'kill_gorgon_chewing_open',1045),(16545,52824,'kill_gorgon_death_impact',1045),(16546,52825,'kill_gorgon_death_roar',1045),(16547,52826,'kill_gorgon_footscrape',1045),(16548,52827,'kill_gorgon_footstep_deep',1045),(16549,52828,'kill_gorgon_footstep_metal',1045),(16550,52829,'kill_gorgon_hooves',1045),(16551,52830,'kill_gorgon_kick_swish',1045),(16552,52831,'kill_gorgon_metal_movement',1045),(16553,52832,'kill_gorgon_metal_movement_deep',1045),(16554,52833,'kill_gorgon_metal_movement_long',1045),(16555,52834,'kill_gorgon_metal_movement_quiet',1045),(16556,52835,'kill_gorgon_metal_scrape',1045),(16557,52836,'kill_gorgon_ouch_headshake',1045),(16558,52837,'kill_gorgon_ouch_impact',1045),(16559,52838,'kill_gorgon_snort',1045),(16560,52839,'kill_gorgon_snort_big',1045),(16561,52840,'kill_gorgon_swim',1045),(16562,52844,'kill_stone_ouch_impact',1045),(16563,52850,'kill_design_blue_flag_trail',1045),(16564,52851,'kill_design_red_flag_trail',1045),(16565,52857,'kill_design_battleground_tower_blue',1045),(16566,52858,'kill_design_battleground_tower_red',1045),(16567,52864,'kill_crystaline_folk_lf',1045),(16568,52865,'kill_crystaline_folk_footstep_big',1045),(16569,52866,'kill_crystaline_folk_footstep_crunch',1045),(16570,52867,'kill_crystaline_folk_stone_debris',1045),(16571,52868,'kill_crystaline_folk_tantrum_1',1045),(16572,52869,'kill_crystaline_folk_tantrum_2',1045),(16573,52870,'kill_crystaline_folk_tantrum_3',1045),(16574,52871,'kill_crystaline_folk_tantrum_body_1',1045),(16575,52872,'kill_crystaline_folk_tantrum_body_2',1045),(16576,52873,'kill_crystaline_folk_tantrum_body_3',1045),(16577,52874,'kill_design_sen_lava_floor',1045),(16578,52877,'kill_cast_mental_blast',1045),(16579,52882,'kill_design_reform_fx',1045),(16580,52885,'kill_attack_breath_crush',1045),(16581,52886,'kill_attack_breath_poison',1045),(16582,52891,'kill_design_drain_theer_fx',1045),(16583,52892,'kill_design_power_aura',1045),(16584,52894,'kill_result_forced_shader_white',1045),(16585,52895,'kill_result_stunned_rings',1045),(16586,52902,'kill_froglock_gathering_search',1045),(16587,52906,'kill_status_quest_completes_storyline',1045),(16588,52907,'kill_status_quest_gives_storyline',1045),(16589,52908,'kill_status_quest_updates_storyline',1045),(16590,52918,'kill_sound_lynx_armor_short_1',1045),(16591,52919,'kill_sound_lynx_mount_bare_roar_3',1045),(16592,52927,'kill_result_forced_shader_rock_red',1045),(16593,52930,'kill_tiered_cleric_wheel_back',1045),(16594,52931,'kill_tiered_cleric_wheel_base',1045),(16595,52932,'kill_tiered_cleric_wheel_forward',1045),(16596,52933,'kill_tiered_hand_cross',1045),(16597,52934,'kill_tiered_hand_leaves',1045),(16598,52935,'kill_tiered_hand_leaves_glowing',1045),(16599,52936,'kill_tiered_hand_pattern',1045),(16600,52937,'kill_tiered_refreshment_summon',1045),(16601,52938,'kill_tiered_smite_p2p',1045),(16602,52946,'kill_jump_falling',1045),(16603,52956,'kill_tiered_angel_wings',1045),(16604,52957,'kill_tiered_bar_heal',1045),(16605,52958,'kill_tiered_divine_burst',1045),(16606,52959,'kill_tiered_divine_essence_summon',1045),(16607,52960,'kill_tiered_head_halo',1045),(16608,52961,'kill_tiered_priest_ring_cure',1045),(16609,52962,'kill_tiered_radiant_glow',1045),(16610,52963,'kill_tiered_resurrect_swirls',1045),(16611,52964,'kill_tiered_small_heal',1045),(16612,52965,'kill_tiered_smite_hit',1045),(16613,52966,'kill_tiered_soothe',1045),(16614,52967,'kill_tiered_toxin_out',1045),(16615,52968,'kill_tiered_water_bubble',1045),(16616,52978,'kill_sound_roehn_theer_stomp_rocks_1',1045),(16617,52979,'kill_sound_roehn_theer_stomp_rocks_2',1045),(16618,52980,'kill_sound_roehn_theer_stomp_rocks_3',1045),(16619,52981,'kill_tiered_flash_heal',1045),(16620,52982,'kill_tiered_ring_shield',1045),(16621,52983,'kill_tiered_scimitar_exploding',1045),(16622,52984,'kill_tiered_scimitar_smite',1045),(16623,52985,'kill_tiered_timer',1045),(16624,52995,'kill_tiered_divine_hit',1045),(16625,52996,'kill_tiered_double_smite_p2p',1045),(16626,52997,'kill_tiered_hand_sparkles',1045),(16627,52998,'kill_tiered_heal_tube_p2p',1045),(16628,53008,'kill_tiered_heal_barrier',1045),(16629,53009,'kill_tiered_smite_blobs_p2p',1045),(16630,53019,'kill_tiered_hammer_smite',1045),(16631,53020,'kill_tiered_hand_cross_dark',1045),(16632,53021,'kill_tiered_hand_sparkles_dark',1045),(16633,53031,'kill_tiered_mental_smite',1045),(16634,53041,'kill_tiered_engulf_flames',1045),(16635,53042,'kill_tiered_gavel_pound',1045),(16636,53043,'kill_tiered_light_cage',1045),(16637,53044,'kill_tiered_swirly_heal',1045),(16638,53045,'kill_tiered_swirly_power_heal',1045),(16639,53055,'kill_trdskl_tinker_fail',1045),(16640,53062,'kill_fire_build_up',1045),(16641,53072,'kill_tiered_feather_summon',1045),(16642,53073,'kill_tiered_phoenix_summon',1045),(16643,53074,'kill_tiered_run_speed_buff',1045),(16644,53075,'kill_tiered_spirit_wolf',1045),(16645,53076,'kill_tiered_wood_root',1045),(16646,53086,'kill_tiered_bat_summon',1045),(16647,53087,'kill_tiered_nature_heal',1045),(16648,53097,'kill_tiered_druid_wheel_base',1045),(16649,53098,'kill_tiered_fire_slam2',1045),(16650,53099,'kill_tiered_hand_leaf',1045),(16651,53100,'kill_tiered_icicle_stab',1045),(16652,53101,'kill_tiered_leaf_burst',1045),(16653,53102,'kill_tiered_leaf_gather',1045),(16654,53103,'kill_tiered_leaf_spin',1045),(16655,53104,'kill_tiered_rings_shrinking',1045),(16656,53105,'kill_tiered_swirly_wisps',1045),(16657,53106,'kill_tiered_wood_spikes',1045),(16658,53114,'kill_panting_wolf_sound',1045),(16659,53117,'kill_tiered_hand_leaf_glowing',1045),(16660,53118,'kill_tiered_leaf_spot_burst',1045),(16661,53119,'kill_tiered_spin_runed_shield',1045),(16662,53120,'kill_tiered_spirit_bear',1045),(16663,53121,'kill_tiered_spirit_lion',1045),(16664,53122,'kill_wolfbackground_sound',1045),(16665,53132,'kill_tiered_growing_spores',1045),(16666,53133,'kill_tiered_healing_grove',1045),(16667,53134,'kill_tiered_ice_spikes',1045),(16668,53135,'kill_tiered_sandstorm',1045),(16669,53136,'kill_tiered_spirit_wolf_summon',1045),(16670,53137,'kill_tiered_tranquility',1045),(16671,53138,'kill_tiered_wood_root_grow',1045),(16672,53141,'kill_belch_fx',1045),(16673,53146,'kill_design_theer_symbol_blue',1045),(16674,53147,'kill_design_theer_symbol_green',1045),(16675,53148,'kill_icicle_stomp',1045),(16676,53150,'kill_result_hand_drips_blood',1045),(16677,53151,'kill_result_hand_drips_poison',1045),(16678,53153,'kill_slime_trail_fx',1045),(16679,53154,'kill_sound_giant_hill_attack',1045),(16680,53155,'kill_sound_giant_hill_buff',1045),(16681,53156,'kill_sound_giant_hill_cast',1045),(16682,53157,'kill_sound_giant_hill_death',1045),(16683,53158,'kill_sound_giant_hill_fall',1045),(16684,53159,'kill_sound_giant_hill_footstep',1045),(16685,53160,'kill_sound_giant_hill_grunt',1045),(16686,53161,'kill_sound_giant_hill_idle_cloth',1045),(16687,53162,'kill_sound_giant_hill_idle_grunt',1045),(16688,53163,'kill_sound_giant_hill_idle_yawn',1045),(16689,53164,'kill_sound_giant_hill_movement_cloth',1045),(16690,53165,'kill_sound_giant_hill_ouch',1045),(16691,53166,'kill_sound_giant_hill_rising_groan',1045),(16692,53167,'kill_sound_giant_hill_sit_groan',1045),(16693,53168,'kill_sound_giant_hill_swim',1045),(16694,53169,'kill_sound_giant_hill_swim_idle',1045),(16695,53170,'kill_sound_giant_hill_turn',1045),(16696,53180,'kill_tiered_brambles',1045),(16697,53181,'kill_tiered_hand_leaf_dark',1045),(16698,53182,'kill_tiered_hand_leaves_dark',1045),(16699,53183,'kill_tiered_leaf_flourish',1045),(16700,53184,'kill_tiered_lightning_bolt',1045),(16701,53185,'kill_tiered_snow_tempest',1045),(16702,53186,'kill_tiered_swarm_p2p',1045),(16703,53196,'kill_tiered_spirit_cat',1045),(16704,53197,'kill_tiered_spirit_eel',1045),(16705,53198,'kill_tiered_starfire',1045),(16706,53199,'kill_tiered_sun_nova',1045),(16707,53209,'kill_tiered_fae_swirling',1045),(16708,53210,'kill_tiered_lightning_fusion',1045),(16709,53211,'kill_tiered_spirit_cheetah',1045),(16710,53212,'kill_tiered_spirit_lion_summon',1045),(16711,53213,'kill_tiered_spirit_tree',1045),(16712,53214,'kill_tiered_thunder_cloud',1045),(16713,53221,'kill_design_goblin_launch',1045),(16714,53225,'kill_transforma',1045),(16715,53226,'kill_transformb',1045),(16716,53229,'kill_cast_ice_blastwave',1045),(16717,53232,'kill_cast_wing_buffet_snow',1045),(16718,53233,'kill_cast_wing_buffet_wind',1045),(16719,53237,'kill_result_icy_trap_shatter',1045),(16720,53244,'kill_design_starburst_blue',1045),(16721,53245,'kill_design_starburst_green',1045),(16722,53246,'kill_design_starburst_purple',1045),(16723,53247,'kill_design_starburst_red',1045),(16724,53248,'kill_design_starburst_white',1045),(16725,53250,'kill_kneel',1045),(16726,53251,'kill_result_shadow_curse',1045),(16727,53261,'kill_sound_lynx_mount_bare_idle_1',1045),(16728,53262,'kill_sound_lynx_mount_bare_pant',1045),(16729,53272,'kill_sound_lynx_purr',1045),(16730,53273,'kill_sound_vrewwx_attack_roar_3',1045),(16731,53274,'kill_sound_vrewwx_cast_roar',1045),(16732,53281,'kill_design_arm_prelaunch',1045),(16733,53283,'kill_result_repellent_spray',1045),(16734,53284,'kill_result_repellent_spray_p2p',1045),(16735,53287,'kill_activate',1045),(16736,53288,'kill_cast_ice_blast',1045),(16737,53289,'kill_cast_ice_blast_ring',1045),(16738,53297,'kill_sound_vrewwx_attack_roar_1',1045),(16739,53298,'kill_sound_vrewwx_attack_roar_2',1045),(16740,53299,'kill_sound_vrewwx_idle02_roar',1045),(16741,53309,'kill_sound_vrewwx_idle1_breathing_2',1045),(16742,53316,'kill_design_void_energy_pool',1045),(16743,53318,'kill_result_flower_trail',1045),(16744,53319,'kill_result_leash_p2p',1045),(16745,53320,'kill_result_rope_root',1045),(16746,53323,'kill_cast_pick_axe_throw',1045),(16747,53328,'kill_design_crystal_drop_impact',1045),(16748,53329,'kill_design_orc_footprints',1045),(16749,53331,'kill_result_leash_p2p_static',1045),(16750,53333,'kill_sitchair',1045),(16751,53335,'kill_sound_vrewwx_body_fall',1045),(16752,53336,'kill_trdskl_halas_pick',1045),(16753,53343,'kill_design_chessboard_collapse_fx',1045),(16754,53344,'kill_design_chessboard_static_fx',1045),(16755,53345,'kill_design_druidring_burst_fx',1045),(16756,53346,'kill_design_druidring_fx',1045),(16757,53347,'kill_design_harpoon_fire',1045),(16758,53348,'kill_design_harpoon_load',1045),(16759,53358,'kill_sound_vrewwx_death',1045),(16760,53359,'kill_sound_vrewwx_ouch',1045),(16761,53362,'kill_bellyslide',1045),(16762,53367,'kill_float_on_back',1045),(16763,53369,'kill_laugh',1045),(16764,53372,'kill_sound_vrewwx_buff',1045),(16765,53373,'kill_sound_vrewwx_chomp',1045),(16766,53383,'kill_sound_vrewwx_death_fall',1045),(16767,53390,'kill_design_theer_symbol_blast_circle',1045),(16768,53397,'kill_fly_ouch_backhand',1045),(16769,53407,'kill_tiered_heal_ward',1045),(16770,53408,'kill_tiered_shaman_wheel_base',1045),(16771,53409,'kill_tiered_spirit_summon',1045),(16772,53410,'kill_tiered_spirit_swirl_hit',1045),(16773,53418,'kill_proc_sword_head',1045),(16774,53421,'kill_tiered_hand_stars',1045),(16775,53422,'kill_tiered_haze',1045),(16776,53423,'kill_tiered_head_spirits',1045),(16777,53424,'kill_tiered_spirit_heal',1045),(16778,53434,'kill_tiered_heal_flourish',1045),(16779,53435,'kill_tiered_resurrect_spirits',1045),(16780,53436,'kill_tiered_spirit_elephant',1045),(16781,53437,'kill_tiered_spirit_swirl_shield',1045),(16782,53447,'kill_tiered_echo_rings',1045),(16783,53448,'kill_tiered_fire',1045),(16784,53449,'kill_tiered_iceball_p2p',1045),(16785,53450,'kill_tiered_spirit_tube',1045),(16786,53451,'kill_tiered_spirits_p2p',1045),(16787,53461,'kill_tiered_ancestral_summon',1045),(16788,53462,'kill_tiered_lunar_summon',1045),(16789,53463,'kill_tiered_spirit_circle_summon',1045),(16790,53464,'kill_tiered_spirit_growing',1045),(16791,53471,'kill_fly_jumpsubstitute',1045),(16792,53472,'kill_fly_turn_left',1045),(16793,53473,'kill_fly_turn_right',1045),(16794,53474,'kill_fly_walk',1045),(16795,53476,'kill_lizard_backup',1045),(16796,53477,'kill_lizard_fall',1045),(16797,53478,'kill_lizard_fly_backup',1045),(16798,53479,'kill_lizard_fly_fall',1045),(16799,53480,'kill_lizard_fly_idle',1045),(16800,53481,'kill_lizard_fly_idle01',1045),(16801,53482,'kill_lizard_fly_jump',1045),(16802,53483,'kill_lizard_fly_jump_substitute',1045),(16803,53484,'kill_lizard_fly_run',1045),(16804,53485,'kill_lizard_fly_turn_left',1045),(16805,53486,'kill_lizard_fly_turn_right',1045),(16806,53487,'kill_lizard_fly_walk',1045),(16807,53488,'kill_lizard_glide',1045),(16808,53489,'kill_lizard_idle',1045),(16809,53490,'kill_lizard_idle01',1045),(16810,53491,'kill_lizard_jump',1045),(16811,53492,'kill_lizard_jump_substitute',1045),(16812,53493,'kill_lizard_land',1045),(16813,53494,'kill_lizard_long_fall',1045),(16814,53495,'kill_lizard_run',1045),(16815,53496,'kill_lizard_turn_left',1045),(16816,53497,'kill_lizard_turn_right',1045),(16817,53498,'kill_lizard_walk',1045),(16818,53506,'kill_lizard_fly_dive',1045),(16819,53507,'kill_lizard_fly_glide',1045),(16820,53508,'kill_lizard_fly_jumpsubstitute',1045),(16821,53511,'kill_tiered_bone_tendrils',1045),(16822,53512,'kill_tiered_crystal_soultap',1045),(16823,53513,'kill_tiered_dark_swirly_wisps',1045),(16824,53514,'kill_tiered_deathward',1045),(16825,53515,'kill_tiered_forced_shader_burst_blend',1045),(16826,53516,'kill_tiered_hand_stars_dark',1045),(16827,53517,'kill_tiered_heal_shroud',1045),(16828,53518,'kill_tiered_poison_spirits_p2p',1045),(16829,53519,'kill_tiered_rune_debuff_all',1045),(16830,53520,'kill_tiered_shadow_curse',1045),(16831,53521,'kill_tiered_shroud',1045),(16832,53529,'kill_lizard_fly_enter',1045),(16833,53539,'kill_spark_trail_lf',1045),(16834,53540,'kill_spark_trail_lr',1045),(16835,53541,'kill_spark_trail_rf',1045),(16836,53542,'kill_spark_trail_rr',1045),(16837,53549,'kill_griffin_backup',1045),(16838,53550,'kill_griffin_fall',1045),(16839,53551,'kill_griffin_fly_backup',1045),(16840,53552,'kill_griffin_fly_dive',1045),(16841,53553,'kill_griffin_fly_enter',1045),(16842,53554,'kill_griffin_fly_fall',1045),(16843,53555,'kill_griffin_fly_glide',1045),(16844,53556,'kill_griffin_fly_idle',1045),(16845,53557,'kill_griffin_fly_idle01',1045),(16846,53558,'kill_griffin_fly_jump',1045),(16847,53559,'kill_griffin_fly_jumpsubstitute',1045),(16848,53560,'kill_griffin_fly_run',1045),(16849,53561,'kill_griffin_fly_turn_left',1045),(16850,53562,'kill_griffin_fly_turn_right',1045),(16851,53563,'kill_griffin_fly_walk',1045),(16852,53564,'kill_griffin_idle01',1045),(16853,53565,'kill_griffin_jump',1045),(16854,53566,'kill_griffin_jump_substitute',1045),(16855,53567,'kill_griffin_land',1045),(16856,53568,'kill_griffin_long_fall',1045),(16857,53569,'kill_griffin_turn_left',1045),(16858,53570,'kill_griffin_turn_right',1045),(16859,53572,'kill_pegasus_backup',1045),(16860,53573,'kill_pegasus_fall',1045),(16861,53574,'kill_pegasus_fly_backup',1045),(16862,53575,'kill_pegasus_fly_dive',1045),(16863,53576,'kill_pegasus_fly_enter',1045),(16864,53577,'kill_pegasus_fly_fall',1045),(16865,53578,'kill_pegasus_fly_glide',1045),(16866,53579,'kill_pegasus_fly_idle',1045),(16867,53580,'kill_pegasus_fly_idle01',1045),(16868,53581,'kill_pegasus_fly_jump',1045),(16869,53582,'kill_pegasus_fly_jumpsubstitute',1045),(16870,53583,'kill_pegasus_fly_run',1045),(16871,53584,'kill_pegasus_fly_turn_left',1045),(16872,53585,'kill_pegasus_fly_turn_right',1045),(16873,53586,'kill_pegasus_fly_walk',1045),(16874,53587,'kill_pegasus_idle01',1045),(16875,53588,'kill_pegasus_jump',1045),(16876,53589,'kill_pegasus_jump_substitute',1045),(16877,53590,'kill_pegasus_land',1045),(16878,53591,'kill_pegasus_long_fall',1045),(16879,53592,'kill_pegasus_turn_left',1045),(16880,53593,'kill_pegasus_turn_right',1045),(16881,53601,'kill_result_weapon_trail_music',1096),(16882,53604,'kill_tiered_bard_baton',1096),(16883,53605,'kill_tiered_bard_drum',1096),(16884,53606,'kill_tiered_bard_flute',1096),(16885,53607,'kill_tiered_bard_guitar',1096),(16886,53608,'kill_tiered_bard_horn',1096),(16887,53609,'kill_tiered_bard_shroud',1096),(16888,53610,'kill_tiered_bard_wheel_base',1096),(16889,53611,'kill_tiered_clanging_notes',1096),(16890,53612,'kill_tiered_coin_toss',1096),(16891,53613,'kill_tiered_dancing_blades',1096),(16892,53614,'kill_tiered_hand_notes',1096),(16893,53615,'kill_tiered_hand_spin_notes',1096),(16894,53616,'kill_tiered_jester_cap_toss_p2p',1096),(16895,53617,'kill_tiered_music_ball_p2p',1096),(16896,53618,'kill_tiered_music_band',1096),(16897,53619,'kill_tiered_music_beam_p2p',1096),(16898,53620,'kill_tiered_music_blast_ball',1096),(16899,53621,'kill_tiered_music_bubble',1096),(16900,53622,'kill_tiered_music_swirls',1096),(16901,53623,'kill_tiered_music_wave_p2p',1096),(16902,53624,'kill_tiered_notes_blast',1096),(16903,53625,'kill_tiered_notes_burst',1096),(16904,53626,'kill_tiered_notes_confetti',1096),(16905,53627,'kill_tiered_notes_head',1096),(16906,53628,'kill_tiered_notes_out_blast',1096),(16907,53629,'kill_tiered_notes_out_song',1096),(16908,53630,'kill_tiered_notes_shield',1096),(16909,53631,'kill_tiered_notes_spiral_frenzy',1096),(16910,53632,'kill_tiered_notes_up_song',1096),(16911,53633,'kill_tiered_slashing_blade',1096),(16912,53634,'kill_tiered_sound_rings_head',1096),(16913,53635,'kill_tiered_spark_burst',1096),(16914,53636,'kill_tiered_stabbing_blades',1096),(16915,53646,'kill_tiered_notes_swirling_p2p',1096),(16916,53656,'kill_tiered_bellow',1096),(16917,53657,'kill_tiered_eyehand_buff',1096),(16918,53658,'kill_tiered_note_crescent_p2p',1096),(16919,53659,'kill_tiered_notes_out_song_bellow',1096),(16920,53660,'kill_tiered_notes_transfer_p2p',1096),(16921,53661,'kill_tiered_rock_skin_grow',1096),(16922,53662,'kill_tiered_shaky_notes',1096),(16923,53669,'kill_griffin_mount_backup',1096),(16924,53670,'kill_griffin_mount_fall',1096),(16925,53671,'kill_griffin_mount_fly_backup',1096),(16926,53672,'kill_griffin_mount_fly_dive',1096),(16927,53673,'kill_griffin_mount_fly_enter',1096),(16928,53674,'kill_griffin_mount_fly_fall',1096),(16929,53675,'kill_griffin_mount_fly_glide',1096),(16930,53676,'kill_griffin_mount_fly_idle',1096),(16931,53677,'kill_griffin_mount_fly_idle01',1096),(16932,53678,'kill_griffin_mount_fly_jump',1096),(16933,53679,'kill_griffin_mount_fly_jumpsubstitute',1096),(16934,53680,'kill_griffin_mount_fly_run',1096),(16935,53681,'kill_griffin_mount_fly_turn_left',1096),(16936,53682,'kill_griffin_mount_fly_turn_right',1096),(16937,53683,'kill_griffin_mount_fly_walk',1096),(16938,53684,'kill_griffin_mount_idle',1096),(16939,53685,'kill_griffin_mount_idle01',1096),(16940,53686,'kill_griffin_mount_jump',1096),(16941,53687,'kill_griffin_mount_jump_substitute',1096),(16942,53688,'kill_griffin_mount_land',1096),(16943,53689,'kill_griffin_mount_long_fall',1096),(16944,53690,'kill_griffin_mount_run',1096),(16945,53691,'kill_griffin_mount_turn_left',1096),(16946,53692,'kill_griffin_mount_turn_right',1096),(16947,53693,'kill_griffin_mount_walk',1096),(16948,53697,'kill_tiered_arrow_blast',1096),(16949,53698,'kill_tiered_blood_burst',1096),(16950,53699,'kill_tiered_fire_arrow_p2p',1096),(16951,53700,'kill_tiered_harvest_arrows',1096),(16952,53701,'kill_tiered_lightning_blast_hit',1096),(16953,53702,'kill_tiered_lightning_spark_burst',1096),(16954,53703,'kill_tiered_massive_hit',1096),(16955,53704,'kill_tiered_ranged_buff',1096),(16956,53705,'kill_tiered_shimmer_arrow_p2p',1096),(16957,53706,'kill_tiered_slow_arrow_p2p',1096),(16958,53707,'kill_tiered_sparkle_trail_weapon_blend',1096),(16959,53708,'kill_tiered_weapon_blood_lust',1096),(16960,53718,'kill_tiered_arrow',1096),(16961,53719,'kill_tiered_arrow_storm',1096),(16962,53720,'kill_tiered_briar_trap',1096),(16963,53721,'kill_tiered_bullseye',1096),(16964,53722,'kill_tiered_hawk_summon',1096),(16965,53723,'kill_tiered_head_arrow_p2p',1096),(16966,53724,'kill_tiered_redirect_arrow_p2p',1096),(16967,53725,'kill_tiered_redirection',1096),(16968,53726,'kill_tiered_shoot_arrow_rain',1096),(16969,53727,'kill_tiered_triple_arrow_p2p',1096),(16970,53737,'kill_tiered_ice_comet',1096),(16971,53744,'kill_griffin_mount_fly_climb',1096),(16972,53745,'kill_griffin_mount_fly_down',1096),(16973,53746,'kill_griffin_mount_fly_up',1096),(16974,53750,'kill_tiered_blades_buff',1096),(16975,53751,'kill_tiered_damage_persist',1096),(16976,53752,'kill_tiered_dark_arrow_p2p',1096),(16977,53753,'kill_tiered_dark_cloud',1096),(16978,53754,'kill_tiered_death_mark',1096),(16979,53755,'kill_tiered_deflect_buff',1096),(16980,53756,'kill_tiered_shoot_daggers',1096),(16981,53757,'kill_tiered_slashing_daggers',1096),(16982,53767,'kill_tiered_apply_poison_p2p',1096),(16983,53768,'kill_tiered_dagger_head',1096),(16984,53769,'kill_tiered_dark_ring_vanish',1096),(16985,53770,'kill_tiered_fatal_followup',1096),(16986,53771,'kill_tiered_hand_plasma',1096),(16987,53772,'kill_tiered_spin_dagger_blast',1096),(16988,53779,'kill_griffin_mount_fly_jump_substitute',1096),(16989,53789,'kill_tiered_blast_tube',1096),(16990,53790,'kill_tiered_flurry_daggers',1096),(16991,53791,'kill_tiered_mesmerized',1096),(16992,53792,'kill_tiered_slash_trail',1096),(16993,53793,'kill_tiered_snow_dagger_p2p',1096),(16994,53794,'kill_tiered_spin_shield_buff',1096),(16995,53795,'kill_tiered_storm_waves',1096),(16996,53796,'kill_tiered_stream_throw_attack_p2p',1096),(16997,53797,'kill_tiered_swords_buff',1096),(16998,53798,'kill_tiered_teeth_glint',1096),(16999,53806,'kill_result_bind_wound',1096),(17000,53809,'kill_tiered_blast_trail',1096),(17001,53810,'kill_tiered_dagger_p2p',1096),(17002,53811,'kill_tiered_dark_melee_swipe',1096),(17003,53812,'kill_tiered_poison_forced_shader_weapon',1096),(17004,53813,'kill_tiered_slash_trail_dark',1096),(17005,53820,'kill_design_wellspring_bones_toss',1096),(17006,53822,'kill_result_wellspring_ghosts_attack_p2p',1096),(17007,53832,'kill_tiered_cone_defensive_buff',1096),(17008,53833,'kill_tiered_cone_offensive_buff',1096),(17009,53840,'kill_design_crater_blast',1096),(17010,53841,'kill_design_fire_area',1096),(17011,53843,'kill_result_spore_toss_p2p',1096),(17012,53850,'kill_design_electro_disease_portal',1096),(17013,53851,'kill_design_lightning_shield',1096),(17014,53852,'kill_design_summon_disease_portal',1096),(17015,53859,'kill_design_meteor_impact',1096),(17016,53860,'kill_design_meteor_target',1096),(17017,53863,'kill_ball_lightning_bolt_p2p',1096),(17018,53865,'kill_cast_potion_hand_pattern_heal',1096),(17019,53866,'kill_cast_potion_hand_sparks',1096),(17020,53867,'kill_cast_potion_ring_cure',1096),(17021,53869,'kill_cast_resurrect_swirls',1096),(17022,53873,'kill_result_fire_engulfed',1096),(17023,53874,'kill_result_flash_heal',1096),(17024,53877,'kill_trdskl_vial_left',1096),(17025,53884,'kill_design_gf_tree_fire',1096),(17026,53885,'kill_design_gf_tree_fire_big',1096),(17027,53887,'kill_result_head_flash_sparks',1096),(17028,53890,'kill_cast_plague_spikes',1096),(17029,53895,'kill_design_feet_trail_leaves',1096),(17030,53897,'kill_pbae_cast_blast',1096),(17031,53902,'kill_cast_summon_elemental_cyclone',1096),(17032,53905,'kill_design_gf_cleansed_flowers',1096),(17033,53906,'kill_design_gf_poisoned_vines',1096),(17034,53907,'kill_design_guk_portal',1096),(17035,53908,'kill_design_power_blast',1096),(17036,53909,'kill_design_summon_power',1096),(17037,53910,'kill_griffin_fly_up',1096),(17038,53913,'kill_boom_sound',1096),(17039,53919,'kill_result_guk_axe_attack_p2p',1096),(17040,53920,'kill_result_guk_axe_stuck',1096),(17041,53921,'kill_result_snotball_p2p',1096),(17042,53931,'kill_turkey_cannon_blast',1096),(17043,53932,'kill_turkey_shoot',1096),(17044,53940,'kill_lights_baubles',1096),(17045,53941,'kill_lights_bows',1096),(17046,53949,'kill_result_book_hover',1096),(17047,53951,'kill_sound_feeding',1096),(17048,53953,'kill_zombie_feeding_fx',1096),(17049,53960,'kill_design_boiling_pool_fx',1096),(17050,53961,'kill_design_book_blast',1096),(17051,53962,'kill_design_book_summon',1096),(17052,53963,'kill_design_icy_shadow_portal',1096),(17053,53965,'kill_knocktoknees_enter',1096),(17054,53966,'kill_knocktoknees_idle',1096),(17055,53969,'kill_cast_mirror_emerge',1096),(17056,53974,'kill_design_light_column_grow',1096),(17057,53977,'kill_bite',1096),(17058,53987,'kill_tiered_bloodlust_swords',1096),(17059,53988,'kill_tiered_cloud_buff_out',1096),(17060,53989,'kill_tiered_divine_wave_p2p',1096),(17061,53990,'kill_tiered_electrified',1096),(17062,53991,'kill_tiered_rock_blast',1096),(17063,53992,'kill_tiered_weakness',1096),(17064,53993,'kill_tiered_whip_dark',1096),(17065,54003,'kill_tiered_brain_leech_p2p',1096),(17066,54004,'kill_tiered_dark_vanish',1096),(17067,54005,'kill_tiered_dark_ward',1096),(17068,54006,'kill_tiered_icy_cage',1096),(17069,54016,'kill_tiered_cold_ice_crystals',1096),(17070,54017,'kill_tiered_icicle_rain',1096),(17071,54018,'kill_tiered_skull_p2p',1096),(17072,54019,'kill_tiered_starnova_p2p',1096),(17073,54029,'kill_tiered_dark_fire',1096),(17074,54030,'kill_tiered_poison_spore_p2p',1096),(17075,54031,'kill_tiered_spirit_dragon',1096),(17076,54041,'kill_tiered_cast_mysticism',1096),(17077,54042,'kill_tiered_light_ward',1096),(17078,54043,'kill_tiered_mental_comet',1096),(17079,54044,'kill_tiered_result_mysticism',1096),(17080,54045,'kill_tiered_whip_circling',1096),(17081,54055,'kill_tiered_ice_comet_shower',1096),(17082,54056,'kill_tiered_sanction_of_merit',1096),(17083,54061,'kill_combat_art_buff',1096),(17084,54064,'kill_design_crow_shoulder',1096),(17085,54065,'kill_design_ghost_wurm_shoulder',1096),(17086,54067,'kill_result_dark_bubbles_rising',1096),(17087,54075,'kill_result_candy_stars_rising',1096),(17088,54085,'kill_wolf_mount_backup',1096),(17089,54086,'kill_wolf_mount_fall',1096),(17090,54087,'kill_wolf_mount_idle',1096),(17091,54088,'kill_wolf_mount_idle01',1096),(17092,54089,'kill_wolf_mount_jump',1096),(17093,54090,'kill_wolf_mount_jump_substitute',1096),(17094,54091,'kill_wolf_mount_land',1096),(17095,54092,'kill_wolf_mount_long_fall',1096),(17096,54093,'kill_wolf_mount_run',1096),(17097,54094,'kill_wolf_mount_turn_left',1096),(17098,54095,'kill_wolf_mount_turn_right',1096),(17099,54096,'kill_wolf_mount_walk',1096),(17100,54106,'kill_tiered_cloud_ring_burst',1096),(17101,54107,'kill_tiered_ember_sword',1096),(17102,54108,'kill_tiered_fire_rain',1096),(17103,54109,'kill_tiered_lightning_bolt_p2p',1096),(17104,54110,'kill_wolfmount_backup',1096),(17105,54111,'kill_wolfmount_fall',1096),(17106,54112,'kill_wolfmount_idle',1096),(17107,54113,'kill_wolfmount_idle01',1096),(17108,54114,'kill_wolfmount_jump',1096),(17109,54115,'kill_wolfmount_jump_substitute',1096),(17110,54116,'kill_wolfmount_land',1096),(17111,54117,'kill_wolfmount_long_fall',1096),(17112,54118,'kill_wolfmount_run',1096),(17113,54119,'kill_wolfmount_turn_left',1096),(17114,54120,'kill_wolfmount_turn_right',1096),(17115,54121,'kill_wolfmount_walk',1096),(17116,54131,'kill_tiered_hammer_head',1096),(17117,54132,'kill_tiered_power_fount',1096),(17118,54133,'kill_tiered_smashing_hammers',1096),(17119,54140,'kill_ettin_drink',1096),(17120,54144,'kill_tiered_color_shower',1096),(17121,54145,'kill_tiered_haste',1096),(17122,54155,'kill_tiered_bat_swarm_appear',1096),(17123,54156,'kill_tiered_ember_shield',1096),(17124,54164,'kill_result_paper_toss_p2p',1096),(17125,54174,'kill_tiered_jesters_cap',1096),(17126,54182,'kill_persist_notes_dirge',1096),(17127,54183,'kill_persist_notes_troub',1096),(17128,54186,'kill_sound_wolfmount_bare_pant',1096),(17129,54187,'kill_sound_wolfmount_bare_roar_3',1096),(17130,54188,'kill_sound_wolfmount_footstep_quiet',1096),(17131,54189,'kill_sound_wolfmount_idle',1096),(17132,54190,'kill_sound_wolfmount_jump_substitute',1096),(17133,54191,'kill_sound_wolfmount_land',1096),(17134,54192,'kill_tiered_notes_entranced',1096),(17135,54193,'kill_tiered_poison_notes_wave_p2p',1096),(17136,54200,'kill_design_vision_plane_map_bell',1096),(17137,54210,'kill_tiered_rift_crack',1096),(17138,54217,'kill_design_djinn_pod_cloud',1096),(17139,54219,'kill_result_water_douse',1096),(17140,54222,'kill_tiered_lava_column',1096),(17141,54230,'kill_result_arrow_ridden',1096),(17142,54238,'kill_result_body_fire',1096),(17143,54239,'kill_result_body_lightning_purple',1096),(17144,54240,'kill_result_body_snow',1096),(17145,54242,'kill_sound_ettin_1h_sword_attack',1096),(17146,54243,'kill_sound_ettin_1h_sword_attack01',1096),(17147,54244,'kill_sound_ettin_1h_sword_attack03',1096),(17148,54245,'kill_sound_ettin_fs',1096),(17149,54246,'kill_sound_ettin_attack',1096),(17150,54247,'kill_sound_ettin_attack01',1096),(17151,54248,'kill_sound_ettin_attack02',1096),(17152,54249,'kill_sound_ettin_attack03',1096),(17153,54250,'kill_sound_ettin_attack_throw_boulder',1096),(17154,54251,'kill_sound_ettin_cast_aoe_beneficial_end',1096),(17155,54252,'kill_sound_ettin_cast_aoe_beneficial_loop',1096),(17156,54253,'kill_sound_ettin_cast_aoe_beneficial_start',1096),(17157,54254,'kill_sound_ettin_cast_aoe_detrimental_end',1096),(17158,54255,'kill_sound_ettin_cast_aoe_detrimental_loop',1096),(17159,54256,'kill_sound_ettin_cast_aoe_detrimental_start',1096),(17160,54257,'kill_sound_ettin_cast_aoe_invocation_end',1096),(17161,54258,'kill_sound_ettin_cast_aoe_invocation_loop',1096),(17162,54259,'kill_sound_ettin_cast_aoe_invocation_start',1096),(17163,54260,'kill_sound_ettin_cast_aoe_wand_end',1096),(17164,54261,'kill_sound_ettin_cast_aoe_wand_loop',1096),(17165,54262,'kill_sound_ettin_cast_aoe_wand_start',1096),(17166,54263,'kill_sound_ettin_cast_summon_end',1096),(17167,54264,'kill_sound_ettin_cast_summon_loop',1096),(17168,54265,'kill_sound_ettin_cast_summon_start',1096),(17169,54266,'kill_sound_ettin_cast_targeted_beneficial_end',1096),(17170,54267,'kill_sound_ettin_cast_targeted_beneficial_start',1096),(17171,54268,'kill_sound_ettin_cast_targeted_detrimental_end',1096),(17172,54269,'kill_sound_ettin_cast_targeted_detrimental_start',1096),(17173,54270,'kill_sound_ettin_cast_targeted_wand_end',1096),(17174,54271,'kill_sound_ettin_cast_targeted_wand_loop',1096),(17175,54272,'kill_sound_ettin_cast_targeted_wand_start',1096),(17176,54273,'kill_sound_ettin_charge_up',1096),(17177,54274,'kill_sound_ettin_dodge_backhand',1096),(17178,54275,'kill_sound_ettin_dodge_forehand',1096),(17179,54276,'kill_sound_ettin_drink',1096),(17180,54277,'kill_sound_ettin_dual_wield_attack',1096),(17181,54278,'kill_sound_ettin_dual_wield_attack01',1096),(17182,54279,'kill_sound_ettin_dual_wield_attack02',1096),(17183,54280,'kill_sound_ettin_dual_wield_attack03',1096),(17184,54281,'kill_sound_ettin_habitat01',1096),(17185,54282,'kill_sound_ettin_habitat03',1096),(17186,54283,'kill_sound_ettin_idle01',1096),(17187,54284,'kill_sound_ettin_idle02',1096),(17188,54285,'kill_sound_ettin_knockeddowntoknees',1096),(17189,54286,'kill_sound_ettin_ouch_backhand',1096),(17190,54287,'kill_sound_ettin_ouch_forehand',1096),(17191,54288,'kill_sound_ettin_run',1096),(17192,54289,'kill_sound_ettin_shield_shove',1096),(17193,54290,'kill_sound_ettin_swim_idle',1096),(17194,54291,'kill_sound_ettin_walk',1096),(17195,54292,'kill_sound_ettin_whirling_attack',1096),(17196,54293,'kill_sound_ettin_wild_swing',1096),(17197,54295,'kill_sound_idle03',1096),(17198,54296,'kill_sound_wolfmount_idle01',1096),(17199,54297,'kill_sound_wolfmount_turn_left',1096),(17200,54298,'kill_sound_wolfmount_turn_right',1096),(17201,54305,'kill_fly_attack01',1096),(17202,54306,'kill_fly_attack02',1096),(17203,54307,'kill_fly_attack03',1096),(17204,54308,'kill_fly_death',1096),(17205,54309,'kill_fly_dodge',1096),(17206,54310,'kill_fly_ouchbackhand',1096),(17207,54311,'kill_fly_ouchforehand',1096),(17208,54312,'kill_fly_ouchthrust',1096),(17209,54313,'kill_fly_turnleft',1096),(17210,54314,'kill_fly_turnright',1096),(17211,54316,'kill_perch',1096),(17212,54323,'kill_design_book_summon_blue',1096),(17213,54324,'kill_design_book_summon_red',1096),(17214,54332,'kill_result_light_flare_p2p',1096),(17215,54337,'kill_cast_shadow_gather',1096),(17216,54338,'kill_cast_speed_trail_shadow',1096),(17217,54342,'kill_removemask_enter',1096),(17218,54343,'kill_removemask_exit',1096),(17219,54344,'kill_removemask_idle',1096),(17220,54347,'kill_attack_cage',1096),(17221,54353,'kill_result_cage_beam_p2p',1096),(17222,54354,'kill_result_spell_cage',1096),(17223,54358,'kill_spell_cage_hit',1096),(17224,54361,'kill_badger_dig',1096),(17225,54366,'kill_design_vekascent_lifebringer',1096),(17226,54373,'kill_design_vekascent_ice_bridge',1096),(17227,54381,'kill_result_ice_trap_swirls',1096),(17228,54384,'kill_cast_hot_water_douse',1096),(17229,54393,'kill_trdskl_pot_large',1096),(17230,54400,'kill_design_tofs_jail_barrier',1096),(17231,54407,'kill_design_tofs_water_orb',1096),(17232,54412,'kill_cast_scream',1096),(17233,54413,'kill_cast_wing_buffet',1096),(17234,54417,'kill_result_vines_trap',1096),(17235,54424,'kill_design_vekfortress_water_blast',1096),(17236,54425,'kill_design_vekfortress_water_warning',1096),(17237,54426,'kill_design_vekpools_water_gush',1096),(17238,54427,'kill_design_vekpools_water_warning',1096),(17239,54434,'kill_design_velks_breakable_wall',1096),(17240,54435,'kill_design_velks_breakable_wall_blue',1096),(17241,54437,'kill_result_ice_spikes_growing',1096),(17242,54438,'kill_result_zombie_slash',1096),(17243,54442,'kill_trdskl_meat',1096),(17244,54445,'kill_bow_attack01',1096),(17245,54446,'kill_bow_attack02',1096),(17246,54447,'kill_bow_attack03',1096),(17247,54452,'kill_exit',1096),(17248,54457,'kill_untrained_attack01',1096),(17249,54458,'kill_untrained_attack02',1096),(17250,54459,'kill_untrained_attack03',1096),(17251,54467,'kill_persist_cold_book_swarm',1096),(17252,54468,'kill_result_forced_shader_web',1096),(17253,54469,'kill_result_halas_runes_spiral',1096),(17254,54470,'kill_result_healthdrain_p2p',1096),(17255,54477,'kill_design_vekpools_flower_fx',1096),(17256,54482,'kill_sound_tse_attack',1096),(17257,54483,'kill_sound_tse_attack01',1096),(17258,54484,'kill_sound_tse_attack02',1096),(17259,54485,'kill_sound_tse_attack03',1096),(17260,54486,'kill_sound_tse_cast_aoe_beneficial_end',1096),(17261,54487,'kill_sound_tse_cast_aoe_invocation_end',1096),(17262,54488,'kill_sound_tse_cast_summon_end',1096),(17263,54489,'kill_sound_tse_cast_targeted_beneficial_end',1096),(17264,54490,'kill_sound_tse_cast_targeted_beneficial_loop',1096),(17265,54491,'kill_sound_tse_cast_targeted_beneficial_start',1096),(17266,54492,'kill_sound_tse_cast_targeted_detrimental_end',1096),(17267,54493,'kill_sound_tse_combat_enter',1096),(17268,54494,'kill_sound_tse_dead_enter',1096),(17269,54495,'kill_sound_tse_dodge_down',1096),(17270,54496,'kill_sound_tse_dodge_thrust',1096),(17271,54497,'kill_sound_tse_fly_attack',1096),(17272,54498,'kill_sound_tse_fly_attack01',1096),(17273,54499,'kill_sound_tse_fly_attack02',1096),(17274,54500,'kill_sound_tse_fly_attack03',1096),(17275,54501,'kill_sound_tse_fly_cast_targeted_beneficial_end',1096),(17276,54502,'kill_sound_tse_fly_cast_targeted_beneficial_loop',1096),(17277,54503,'kill_sound_tse_fly_cast_targeted_beneficial_start',1096),(17278,54504,'kill_sound_tse_fly_cast_targeted_detrimental_end',1096),(17279,54505,'kill_sound_tse_fly_idle',1096),(17280,54506,'kill_sound_tse_fly_offensive_buff',1096),(17281,54507,'kill_sound_tse_knockeddowntoknees',1096),(17282,54508,'kill_sound_tse_offensive_buff',1096),(17283,54509,'kill_sound_tse_ouch',1096),(17284,54510,'kill_sound_tse_ouch_forehand',1096),(17285,54511,'kill_sound_tse_ouch_thrust',1096),(17286,54512,'kill_sound_tse_whirling_attack',1096),(17287,54513,'kill_sound_tse_wild_swing',1096),(17288,54520,'kill_design_sullon_zek_containment',1096),(17289,54522,'kill_result_ice_melt',1096),(17290,54526,'kill_sound_hland_griffin_attack01',1096),(17291,54527,'kill_sound_hland_griffin_attack02',1096),(17292,54528,'kill_sound_hland_griffin_attack03',1096),(17293,54529,'kill_sound_hland_griffin_combat_enter',1096),(17294,54530,'kill_sound_hland_griffin_dead_enter',1096),(17295,54531,'kill_sound_hland_griffin_dodge_backhand',1096),(17296,54532,'kill_sound_hland_griffin_dodge_down',1096),(17297,54533,'kill_sound_hland_griffin_dodge_forehand',1096),(17298,54534,'kill_sound_hland_griffin_dodge_thrust',1096),(17299,54535,'kill_sound_hland_griffin_idle01',1096),(17300,54536,'kill_sound_hland_griffin_ouch',1096),(17301,54537,'kill_sound_hland_griffin_ouch_thrust',1096),(17302,54538,'kill_sound_hland_griffin_swim_walk',1096),(17303,54539,'kill_sound_hland_griffin_whirling_attack',1096),(17304,54540,'kill_sound_hland_griffin_wildswing',1096),(17305,54541,'kill_sound_othmir_m_1h_sword_attack',1096),(17306,54542,'kill_sound_othmir_m_1h_sword_attack01',1096),(17307,54543,'kill_sound_othmir_m_1h_sword_attack02',1096),(17308,54544,'kill_sound_othmir_m_1h_sword_attack03',1096),(17309,54545,'kill_sound_othmir_m_attack',1096),(17310,54546,'kill_sound_othmir_m_attack01',1096),(17311,54547,'kill_sound_othmir_m_attack02',1096),(17312,54548,'kill_sound_othmir_m_attack03',1096),(17313,54549,'kill_sound_othmir_m_bow_attack',1096),(17314,54550,'kill_sound_othmir_m_cast_targeted_beneficial_end',1096),(17315,54551,'kill_sound_othmir_m_cast_targeted_beneficial_loop',1096),(17316,54552,'kill_sound_othmir_m_cast_targeted_beneficial_start',1096),(17317,54553,'kill_sound_othmir_m_charge_up',1096),(17318,54554,'kill_sound_othmir_m_combat_idle',1096),(17319,54555,'kill_sound_othmir_m_dance',1096),(17320,54556,'kill_sound_othmir_m_dead_enter',1096),(17321,54557,'kill_sound_othmir_m_dual_wield_attack',1096),(17322,54558,'kill_sound_othmir_m_dual_wield_attack01',1096),(17323,54559,'kill_sound_othmir_m_dual_wield_attack02',1096),(17324,54560,'kill_sound_othmir_m_dual_wield_attack03',1096),(17325,54561,'kill_sound_othmir_m_idle02',1096),(17326,54562,'kill_sound_othmir_m_offensive_buff',1096),(17327,54563,'kill_sound_othmir_m_shield_shove',1096),(17328,54564,'kill_sound_othmir_m_swim_idle',1096),(17329,54565,'kill_sound_othmir_m_swim_run',1096),(17330,54566,'kill_sound_othmir_m_swim_walk',1096),(17331,54567,'kill_sound_othmir_m_whirling_attack',1096),(17332,54568,'kill_sound_othmir_m_wild_swing',1096),(17333,54569,'kill_writhe_idle',1096),(17334,54577,'kill_result_ice_shatter',1096),(17335,54578,'kill_result_seafoam_dissolve',1096),(17336,54581,'kill_cast_enraged_flames',1096),(17337,54587,'kill_result_hammer_shower',1096),(17338,54591,'kill_sound_othmir_f_1h_sword_attack',1096),(17339,54592,'kill_sound_othmir_f_1h_sword_attack01',1096),(17340,54593,'kill_sound_othmir_f_1h_sword_attack02',1096),(17341,54594,'kill_sound_othmir_f_1h_sword_attack03',1096),(17342,54595,'kill_sound_othmir_f_attack',1096),(17343,54596,'kill_sound_othmir_f_attack01',1096),(17344,54597,'kill_sound_othmir_f_attack02',1096),(17345,54598,'kill_sound_othmir_f_attack03',1096),(17346,54599,'kill_sound_othmir_f_bow_attack',1096),(17347,54600,'kill_sound_othmir_f_cast_targeted_beneficial_end',1096),(17348,54601,'kill_sound_othmir_f_cast_targeted_beneficial_start',1096),(17349,54602,'kill_sound_othmir_f_charge_up',1096),(17350,54603,'kill_sound_othmir_f_combat_idle',1096),(17351,54604,'kill_sound_othmir_f_dead_enter',1096),(17352,54605,'kill_sound_othmir_f_dual_wield_attack',1096),(17353,54606,'kill_sound_othmir_f_dual_wield_attack01',1096),(17354,54607,'kill_sound_othmir_f_dual_wield_attack02',1096),(17355,54608,'kill_sound_othmir_f_dual_wield_attack03',1096),(17356,54609,'kill_sound_othmir_f_idle02',1096),(17357,54610,'kill_sound_othmir_f_shield_shove',1096),(17358,54611,'kill_sound_othmir_f_swim_idle',1096),(17359,54612,'kill_sound_othmir_f_swim_walk',1096),(17360,54613,'kill_sound_othmir_f_whirling_attack',1096),(17361,54614,'kill_sound_othmir_f_wild_swing',1096),(17362,54623,'kill_sleep_idle',1096),(17363,54626,'kill_sound_othmir_fs',1096),(17364,54627,'kill_sound_tse_fs',1096),(17365,54632,'kill_cast_split_beam_flash',1096),(17366,54633,'kill_cast_split_copy',1096),(17367,54636,'kill_cast_elemental_converge',1096),(17368,54641,'kill_design_elemental_coalescing',1096),(17369,54643,'kill_result_elemental_drain_p2p',1096),(17370,54646,'kill_aura_purple',1096),(17371,54647,'kill_cast_death_beam',1096),(17372,54648,'kill_cast_heal_ball',1096),(17373,54655,'kill_sleep_enter',1096),(17374,54656,'kill_sleep_exit',1096),(17375,54661,'kill_sound_wolfpup_bf',1096),(17376,54662,'kill_sound_wolfpup_angry',1096),(17377,54663,'kill_sound_wolfpup_attack',1096),(17378,54664,'kill_sound_wolfpup_confused',1096),(17379,54665,'kill_sound_wolfpup_eat',1096),(17380,54666,'kill_sound_wolfpup_footstep',1096),(17381,54667,'kill_sound_wolfpup_hungry',1096),(17382,54668,'kill_sound_wolfpup_idle01',1096),(17383,54669,'kill_sound_wolfpup_idle02',1096),(17384,54670,'kill_sound_wolfpup_ouch',1096),(17385,54671,'kill_sound_wolfpup_sick',1096),(17386,54672,'kill_sound_wolfpup_trick',1096),(17387,54678,'kill_converse01_sit',1096),(17388,54679,'kill_converse02_sit',1096),(17389,54680,'kill_converse_sit',1096),(17390,54682,'kill_design_coldain_prayer_shawl',1096),(17391,54684,'kill_leap_enter',1096),(17392,54685,'kill_leap_exit',1096),(17393,54686,'kill_leap_idle',1096),(17394,54690,'kill_sound_hland_griffin_fs',1096),(17395,54691,'kill_sound_hland_griffin_cast_enter',1096),(17396,54692,'kill_sound_hland_griffin_cast_exit',1096),(17397,54693,'kill_sound_hland_griffin_charge_up',1096),(17398,54700,'kill_design_coldain_ring_adamantium',1096),(17399,54701,'kill_design_coldain_ring_copper',1096),(17400,54702,'kill_design_coldain_ring_frostreaver',1096),(17401,54703,'kill_design_coldain_ring_gold',1096),(17402,54704,'kill_design_coldain_ring_hero',1096),(17403,54705,'kill_design_coldain_ring_mithril',1096),(17404,54706,'kill_design_coldain_ring_obsidian',1096),(17405,54707,'kill_design_coldain_ring_platinum',1096),(17406,54708,'kill_design_coldain_ring_silver',1096),(17407,54709,'kill_design_coldain_ring_velium',1096),(17408,54710,'kill_design_spider_shoulder',1096),(17409,54716,'kill_sound_hland_griffin_wing_flap_01',1096),(17410,54717,'kill_sound_hland_griffin_wing_flap_02',1096),(17411,54724,'kill_dive',1096),(17412,54726,'kill_result_talon_strike',1096),(17413,54731,'kill_sound_hland_griffin_wild_swing',1096),(17414,54735,'kill_whirlingattack',1096),(17415,54738,'kill_cast_head_souls',1096),(17416,54739,'kill_cast_head_spikes',1096),(17417,54742,'kill_cast_tallonite_attacking',1096),(17418,54743,'kill_cast_tallonite_lash_spin',1096),(17419,54747,'kill_result_head_spikes',1096),(17420,54755,'kill_untrained_exit',1096),(17421,54763,'kill_result_ember_strike',1096),(17422,54764,'kill_result_ice_vine_trap',1096),(17423,54772,'kill_untrained_idle01',1096),(17424,54775,'kill_cast_nipik_spirits',1096),(17425,54778,'kill_cast_shadow_vortex',1096),(17426,54782,'kill_result_forced_shader_lichen',1096),(17427,54783,'kill_result_gnoll_drool',1096),(17428,54797,'kill_sound_vamp_fs',1096),(17429,54798,'kill_sound_vamp_f_idle',1096),(17430,54799,'kill_sound_vamp_f_untrained_attack',1096),(17431,54800,'kill_sound_vamp_f_untrained_attack01',1096),(17432,54801,'kill_sound_vamp_f_untrained_attack02',1096),(17433,54802,'kill_sound_vamp_f_untrained_attack03',1096),(17434,54803,'kill_sound_vamp_f_untrained_enter',1096),(17435,54804,'kill_sound_vamp_f_untrained_idle',1096),(17436,54805,'kill_sound_vamp_f_untrained_idle01',1096),(17437,54806,'kill_sound_vamp_f_whirling_attack',1096),(17438,54812,'kill_converse_sit01',1096),(17439,54813,'kill_converse_sit02',1096),(17440,54815,'kill_design_velkslab_flame_arch',1096),(17441,54817,'kill_result_red_glow',1096),(17442,54825,'kill_sound_vamp_m_untrained_attack',1096),(17443,54826,'kill_sound_vamp_m_untrained_attack01',1096),(17444,54827,'kill_sound_vamp_m_untrained_attack02',1096),(17445,54828,'kill_sound_vamp_m_untrained_attack03',1096),(17446,54829,'kill_sound_vamp_m_untrained_enter',1096),(17447,54830,'kill_sound_vamp_m_untrained_idle01',1096),(17448,54831,'kill_sound_vamp_m_whirling_attack',1096),(17449,54833,'kill_talking_idle',1096),(17450,54840,'kill_griffin_mount_fly_glide_left',1096),(17451,54841,'kill_griffin_mount_fly_glide_right',1096),(17452,54844,'kill_cast_foot_crush_stomp',1096),(17453,54845,'kill_cast_kromzek_strike',1096),(17454,54848,'kill_cast_targeted_beneficial_idle',1096),(17455,54849,'kill_cast_thunder_clap',1096),(17456,54857,'kill_pugilist_idle01',1096),(17457,54860,'kill_cast_aa_column_heal_blast',1096),(17458,54861,'kill_cast_aa_heal_bars',1096),(17459,54866,'kill_design_bat_appear',1096),(17460,54867,'kill_design_bat_vanish',1096),(17461,54868,'kill_hover_exit',1096),(17462,54878,'kill_untrained_slash',1096),(17463,54879,'kill_untrained_slash1',1096),(17464,54880,'kill_untrained_slash2',1096),(17465,54881,'kill_untrained_slash3',1096),(17466,54888,'kill_griffin_mount_fly_strafe_left',1096),(17467,54889,'kill_griffin_mount_fly_strafe_right',1096),(17468,54891,'kill_pugilist_idle02',1096),(17469,54892,'kill_result_aa_lightning_debuff',1096),(17470,54893,'kill_result_aa_ward_column_blast',1096),(17471,54901,'kill_kd_barrel_idle',1096),(17472,54902,'kill_kd_barrel_roll_enter',1096),(17473,54903,'kill_kd_barrel_roll_idle',1096),(17474,54911,'kill_sound_vamp_f_pugilist_idle02',1096),(17475,54912,'kill_sound_vamp_m_pugilist_idle02',1096),(17476,54917,'kill_cast_spirit_hands',1096),(17477,54918,'kill_cast_spirit_sands',1096),(17478,54919,'kill_cast_spirit_shell_buff',1096),(17479,54922,'kill_eat_idle',1096),(17480,54924,'kill_result_ice_trap_dark',1096),(17481,54925,'kill_result_small_net',1096),(17482,54927,'kill_sniff_idle',1096),(17483,54935,'kill_trdskl_vel_hammer',1096),(17484,54936,'kill_walk_sniff',1096),(17485,54943,'kill_design_bat_smoke_attack',1096),(17486,54944,'kill_design_seaweed_cluster',1096),(17487,54954,'kill_vamp_smoke_trail',1096),(17488,54955,'kill_vampire_attack',1096),(17489,54956,'kill_vampire_attack01',1096),(17490,54957,'kill_vampire_attack02',1096),(17491,54958,'kill_vampire_attack03',1096),(17492,54959,'kill_vampire_dodge',1096),(17493,54960,'kill_vampire_dodge01',1096),(17494,54961,'kill_vampire_dodge02',1096),(17495,54962,'kill_vampire_enter',1096),(17496,54963,'kill_vampire_exit',1096),(17497,54964,'kill_vampire_idle',1096),(17498,54965,'kill_vampire_idle01',1096),(17499,54966,'kill_vampire_idle02',1096),(17500,54967,'kill_vampire_ouch',1096),(17501,54968,'kill_vampire_ouch01',1096),(17502,54969,'kill_vampire_parry',1096),(17503,54970,'kill_vampire_recoil',1096),(17504,54971,'kill_vampire_whirling_attack',1096),(17505,54979,'kill_result_rock_crystal_cyclone',1096),(17506,54988,'kill_vamp_grab_slash',1096),(17507,54991,'kill_cast_cold_breath',1096),(17508,54992,'kill_cast_inhale_breath',1096),(17509,54993,'kill_cast_lightning_burst',1096),(17510,54994,'kill_cast_lightning_wings',1096),(17511,55008,'kill_vampire_nofx_attack',1096),(17512,55009,'kill_vampire_nofx_attack01',1096),(17513,55010,'kill_vampire_nofx_attack02',1096),(17514,55011,'kill_vampire_nofx_attack03',1096),(17515,55012,'kill_vampire_nofx_dodge',1096),(17516,55013,'kill_vampire_nofx_dodge01',1096),(17517,55014,'kill_vampire_nofx_dodge02',1096),(17518,55015,'kill_vampire_nofx_enter',1096),(17519,55016,'kill_vampire_nofx_exit',1096),(17520,55017,'kill_vampire_nofx_idle',1096),(17521,55018,'kill_vampire_nofx_idle01',1096),(17522,55019,'kill_vampire_nofx_idle02',1096),(17523,55020,'kill_vampire_nofx_ouch',1096),(17524,55021,'kill_vampire_nofx_ouch01',1096),(17525,55022,'kill_vampire_nofx_parry',1096),(17526,55023,'kill_vampire_nofx_recoil',1096),(17527,55024,'kill_vampire_nofx_whirling_attack',1096),(17528,55025,'kill_vampire_whirling_nofx_attack',1096),(17529,55032,'kill_design_seaweed_cluster_down',1096),(17530,55034,'kill_result_object_sparkles_white_down',1096),(17531,55037,'kill_barrel_blast_snd',1096),(17532,55041,'kill_crate_break_snd',1096),(17533,55043,'kill_design_rock_door_collapse',1096),(17534,55044,'kill_design_vine_door_grow',1096),(17535,55045,'kill_impact_snd',1096),(17536,55047,'kill_result_barrel_explode',1096),(17537,55048,'kill_result_crate_explode',1096),(17538,55049,'kill_result_heat_shimmer_dots',1096),(17539,55050,'kill_result_musk_spray_p2p',1096),(17540,55051,'kill_result_musky_object',1096),(17541,55060,'kill_vamp_smoke_burst',1096),(17542,55068,'kill_run_temp',1096),(17543,55077,'kill_walk_temp',1096),(17544,55084,'kill_design_hawk_release',1096),(17545,55085,'kill_fx_splash_out',1096),(17546,55086,'kill_fx_splash_up',1096),(17547,55088,'kill_result_hawk_circling',1096),(17548,55095,'kill_design_lava',1096),(17549,55109,'kill_sound_tse_rx_attack',1096),(17550,55110,'kill_sound_tse_rx_buff',1096),(17551,55111,'kill_sound_tse_rx_hit',1096),(17552,55112,'kill_sound_tse_fly_rx_attack',1096),(17553,55120,'kill_knockedtoback_idle',1096),(17554,55129,'kill_sound_carac_crying',1096),(17555,55132,'kill_admire',1096),(17556,55137,'kill_griffin_mount_idle02',1096),(17557,55145,'kill_measure',1096),(17558,55147,'kill_snd_lich_attack',1096),(17559,55148,'kill_snd_lich_attack01',1096),(17560,55149,'kill_snd_lich_attack02',1096),(17561,55150,'kill_snd_lich_attack03',1096),(17562,55151,'kill_snd_lich_bride_idle_lp',1096),(17563,55152,'kill_snd_lich_combat_enter',1096),(17564,55153,'kill_snd_lich_ouch',1096),(17565,55154,'kill_snd_lich_whirling_attack',1096),(17566,55155,'kill_snd_lich_wild_swing',1096),(17567,55158,'kill_sound_griffin_mount_idle01',1096),(17568,55168,'kill_worship_idle',1096),(17569,55171,'kill_cast_bone_toss',1096),(17570,55175,'kill_count',1096),(17571,55177,'kill_design_vel_cannon_fire',1096),(17572,55192,'kill_trdskl_bone',1096),(17573,55199,'kill_design_light_beam_fx',1096),(17574,55200,'kill_design_tofs_portal_base_fx',1096),(17575,55205,'kill_cast_sacrifice_blast',1096),(17576,55208,'kill_design_fire_big',1096),(17577,55209,'kill_design_fire_green',1096),(17578,55210,'kill_design_fire_small',1096),(17579,55212,'kill_result_mark_of_doom',1096),(17580,55217,'kill_cast_rallos_zek_superbuff',1096),(17581,55220,'kill_design_blue_fire_wall',1096),(17582,55221,'kill_design_red_fire_wall',1096),(17583,55224,'kill_sit_throne_idle',1096),(17584,55232,'kill_result_giant_icicle_drop',1096),(17585,55233,'kill_result_giant_spear_p2p',1096),(17586,55236,'kill_cast_hammer_hands',1096),(17587,55255,'kill_trdskl_ice_wand',1096),(17588,55262,'kill_design_massive_rock_impact',1096),(17589,55264,'kill_persist_blue_tagged',1096),(17590,55265,'kill_persist_red_tagged',1096),(17591,55266,'kill_result_indestructible',1096),(17592,55267,'kill_result_invincible',1096),(17593,55268,'kill_result_statue_beam_p2p',1096),(17594,55271,'kill_amaze',1096),(17595,55276,'kill_design_zek_helm_fire',1096),(17596,55277,'kill_grin',1096),(17597,55278,'kill_growl',1096),(17598,55280,'kill_mourn',1096),(17599,55281,'kill_puzzle',1096),(17600,55282,'kill_roar',1096),(17601,55289,'kill_design_distort_face',1096),(17602,55290,'kill_design_kd_rage_portal',1096),(17603,55293,'kill_cast_aa_ancestor_swirls',1096),(17604,55294,'kill_cast_aa_spiritfire_blast',1096),(17605,55295,'kill_cast_aa_spiritfire_swirls',1096),(17606,55301,'kill_result_aa_pulsing_ward',1096),(17607,55302,'kill_result_aa_totem_blast',1096),(17608,55309,'kill_gathering_find',1096),(17609,55310,'kill_griffin_mount_launch',1096),(17610,55312,'kill_result_aa_cold_mesh_grow',1096),(17611,55313,'kill_result_aa_crush_blast',1096),(17612,55314,'kill_result_aa_focus_spark',1096),(17613,55315,'kill_result_aa_manawall',1096),(17614,55316,'kill_result_aa_mesh_grow',1096),(17615,55317,'kill_result_aa_shadow_blob_p2p',1096),(17616,55318,'kill_result_aa_swap_hate',1096),(17617,55321,'kill_applaud',1096),(17618,55324,'kill_clap',1096),(17619,55327,'kill_cast_aa_lightning_cleave_blast',1096),(17620,55328,'kill_cast_aa_riposte',1096),(17621,55329,'kill_cast_aa_shield_bars',1096),(17622,55332,'kill_cast_aa_deflecting_daggers',1096),(17623,55338,'kill_result_aa_slash_hit',1096),(17624,55339,'kill_result_aa_watchful_eyes',1096),(17625,55342,'kill_cast_aa_music_ring_blast',1096),(17626,55343,'kill_cast_aa_notes_spiral',1096),(17627,55349,'kill_result_aa_note_dagger_p2p',1096),(17628,55352,'kill_carpet_fly_backup',1096),(17629,55353,'kill_carpet_fly_climb',1096),(17630,55354,'kill_carpet_fly_dive',1096),(17631,55355,'kill_carpet_fly_glide',1096),(17632,55356,'kill_carpet_fly_glide_left',1096),(17633,55357,'kill_carpet_fly_glide_right',1096),(17634,55358,'kill_carpet_fly_idle',1096),(17635,55359,'kill_carpet_fly_run',1096),(17636,55360,'kill_carpet_fly_strafe_left',1096),(17637,55361,'kill_carpet_fly_strafe_right',1096),(17638,55362,'kill_carpet_fly_turn_left',1096),(17639,55363,'kill_carpet_fly_turn_right',1096),(17640,55364,'kill_carpet_fly_up',1096),(17641,55365,'kill_carpet_fly_walk',1096),(17642,55368,'kill_carpet_fly_down',1096),(17643,55371,'kill_conjure',1096),(17644,55372,'kill_conjure_enter',1096),(17645,55373,'kill_conjure_exit',1096),(17646,55377,'kill_pray',1096),(17647,55382,'kill_climb',1096),(17648,55385,'kill_design_prexus_water_pillar',1096),(17649,55389,'kill_snd_twolf_attack',1096),(17650,55390,'kill_snd_twolf_attack_01',1096),(17651,55391,'kill_snd_twolf_attack_02',1096),(17652,55392,'kill_snd_twolf_attack_03',1096),(17653,55393,'kill_snd_twolf_attk',1096),(17654,55394,'kill_snd_twolf_attk_01',1096),(17655,55395,'kill_snd_twolf_attk_02',1096),(17656,55396,'kill_snd_twolf_cast_loop',1096),(17657,55397,'kill_snd_twolf_charge_up',1096),(17658,55398,'kill_snd_twolf_death',1096),(17659,55399,'kill_snd_twolf_dodge_back',1096),(17660,55400,'kill_snd_twolf_dodge_down',1096),(17661,55401,'kill_snd_twolf_dodge_fore',1096),(17662,55402,'kill_snd_twolf_dodge_thrust',1096),(17663,55403,'kill_snd_twolf_eat_idle',1096),(17664,55404,'kill_snd_twolf_habitat01',1096),(17665,55405,'kill_snd_twolf_habitat02',1096),(17666,55406,'kill_snd_twolf_idle_01',1096),(17667,55407,'kill_snd_twolf_idle_02',1096),(17668,55408,'kill_snd_twolf_ouch',1096),(17669,55409,'kill_snd_twolf_ouch_knockknees',1096),(17670,55410,'kill_snd_twolf_ouch_thrust',1096),(17671,55411,'kill_snd_twolf_sniff_idle',1096),(17672,55412,'kill_snd_twolf_walk_sniff',1096),(17673,55413,'kill_snd_twolf_whirl',1096),(17674,55414,'kill_snd_twolf_wildswing',1096),(17675,55417,'kill_cast_aa_magic_overflow',1096),(17676,55418,'kill_cast_aa_manasoul',1096),(17677,55419,'kill_cast_aa_mystic_field',1096),(17678,55420,'kill_cast_aa_self_lifetap',1096),(17679,55426,'kill_look',1096),(17680,55427,'kill_result_aa_lightning_clash',1096),(17681,55428,'kill_result_aa_power_convert',1096),(17682,55429,'kill_result_aa_protection_ward',1096),(17683,55430,'kill_result_aa_soul_burn',1096),(17684,55437,'kill_design_fortress_docks_bluefire',1096),(17685,55438,'kill_design_table_explode',1096),(17686,55453,'kill_trdskl_cane',1096),(17687,55454,'kill_trdskl_cane_sit',1096),(17688,55461,'kill_design_blood_dervish',1096),(17689,55462,'kill_design_blood_fountain_blast',1096),(17690,55463,'kill_design_blood_fountain_fx',1096),(17691,55464,'kill_design_electric_barrier',1096),(17692,55465,'kill_design_lightning_floor',1096),(17693,55467,'kill_result_retaliation',1096),(17694,55468,'kill_result_zek_divine',1096),(17695,55469,'kill_result_zek_elemental',1096),(17696,55470,'kill_result_zek_noxious',1096),(17697,55479,'kill_snd_gnm_racemnt_idle_01',1096),(17698,55480,'kill_snd_gnm_racemnt_run_01',1096),(17699,55481,'kill_snd_gnm_racemnt_walk_01',1096),(17700,55502,'kill_temp_idle01',1096),(17701,55503,'kill_temp_idle02',1096),(17702,55504,'kill_temp_idle03',1096),(17703,55517,'kill_sound_hland_griffin_mount_fly_dive',1096),(17704,55524,'kill_design_mount_explode',1096),(17705,55525,'kill_design_speed_boost_buff',1096),(17706,55526,'kill_design_speed_drop_twister_debuff',1096),(17707,55527,'kill_design_timestop_buff',1096),(17708,55528,'kill_design_twister_blaster_buff',1096),(17709,55531,'kill_snd_gnomerace_ringwhoosh',1096),(17710,55534,'kill_cast_aa_blast_tube',1096),(17711,55540,'kill_result_aa_fire_comet',1096),(17712,55541,'kill_result_aa_taunt',1096),(17713,55546,'kill_cast_yelinak_ice_breath',1096),(17714,55551,'kill_sit_chair',1096),(17715,55564,'kill_spin_it',1096),(17716,55567,'kill_cast_aa_whip_circling',1096),(17717,55574,'kill_design_dark_ice_wall',1096),(17718,55576,'kill_knockedtoback_enter',1096),(17719,55577,'kill_knockedtoback_exit',1096),(17720,55584,'kill_design_aqua_crystals_fall',1096),(17721,55585,'kill_design_crysal_wall',1096),(17722,55586,'kill_design_crystal_wall',1096),(17723,55587,'kill_design_green_crystals_fall',1096),(17724,55588,'kill_design_purple_crystals_fall',1096),(17725,55603,'kill_wall_destroy',1096),(17726,55611,'kill_result_mug_hit',1096),(17727,55625,'kill_trdskl_mug_r',1096),(17728,55632,'kill_horse_fly_backup',1096),(17729,55633,'kill_horse_fly_climb',1096),(17730,55634,'kill_horse_fly_dive',1096),(17731,55635,'kill_horse_fly_glide',1096),(17732,55636,'kill_horse_fly_glide_left',1096),(17733,55637,'kill_horse_fly_glide_right',1096),(17734,55638,'kill_horse_fly_idle',1096),(17735,55639,'kill_horse_fly_run',1096),(17736,55640,'kill_horse_fly_strafe_left',1096),(17737,55641,'kill_horse_fly_strafe_right',1096),(17738,55642,'kill_horse_fly_turn_left',1096),(17739,55643,'kill_horse_fly_turn_right',1096),(17740,55644,'kill_horse_fly_up',1096),(17741,55645,'kill_horse_fly_walk',1096),(17742,55647,'kill_result_ice_strike',1096),(17743,55655,'kill_lose_spin',1096),(17744,55656,'kill_pegasus_mount_backup',1096),(17745,55657,'kill_pegasus_mount_fall',1096),(17746,55658,'kill_pegasus_mount_fly_backup',1096),(17747,55659,'kill_pegasus_mount_fly_climb',1096),(17748,55660,'kill_pegasus_mount_fly_dive',1096),(17749,55661,'kill_pegasus_mount_fly_down',1096),(17750,55662,'kill_pegasus_mount_fly_glide',1096),(17751,55663,'kill_pegasus_mount_fly_glide_left',1096),(17752,55664,'kill_pegasus_mount_fly_glide_right',1096),(17753,55665,'kill_pegasus_mount_fly_idle',1096),(17754,55666,'kill_pegasus_mount_fly_run',1096),(17755,55667,'kill_pegasus_mount_fly_strafe_left',1096),(17756,55668,'kill_pegasus_mount_fly_strafe_right',1096),(17757,55669,'kill_pegasus_mount_fly_turn_left',1096),(17758,55670,'kill_pegasus_mount_fly_turn_right',1096),(17759,55671,'kill_pegasus_mount_fly_up',1096),(17760,55672,'kill_pegasus_mount_fly_walk',1096),(17761,55673,'kill_pegasus_mount_idle',1096),(17762,55674,'kill_pegasus_mount_jump',1096),(17763,55675,'kill_pegasus_mount_jump_substitute',1096),(17764,55676,'kill_pegasus_mount_land',1096),(17765,55677,'kill_pegasus_mount_long_fall',1096),(17766,55678,'kill_pegasus_mount_run',1096),(17767,55679,'kill_pegasus_mount_turn_left',1096),(17768,55680,'kill_pegasus_mount_turn_right',1096),(17769,55681,'kill_pegasus_mount_walk',1096),(17770,55684,'kill_sound_coins',1096),(17771,55695,'kill_sound_win',1096),(17772,55697,'kill_win_fx',1096),(17773,55698,'kill_win_spin',1096),(17774,55706,'kill_roll_it',1096),(17775,55713,'kill_design_chronoportal_rift',1096),(17776,55723,'kill_sound_bite_trex',1096),(17777,55724,'kill_sound_breathe_trex',1096),(17778,55728,'kill_sound_idle01_trex',1096),(17779,55729,'kill_sound_idle02_trex',1096),(17780,55730,'kill_sound_idle_trex',1096),(17781,55731,'kill_sound_kick_trex',1096),(17782,55733,'kill_sound_ouch_trex',1096),(17783,55741,'kill_result_ice_strike_targeted',1096),(17784,55748,'kill_flame_burst_lh',1096),(17785,55749,'kill_flame_burst_rh',1096),(17786,55757,'kill_pegasus_mount_fly_fall',1096),(17787,55767,'kill_snd_warboar_fs',1096),(17788,55768,'kill_snd_warboar_attack',1096),(17789,55769,'kill_snd_warboar_attack01',1096),(17790,55770,'kill_snd_warboar_attack02',1096),(17791,55771,'kill_snd_warboar_attack03',1096),(17792,55772,'kill_snd_warboar_cast_targeted_beneficial_end',1096),(17793,55773,'kill_snd_warboar_cast_targeted_beneficial_start',1096),(17794,55774,'kill_snd_warboar_charge_up',1096),(17795,55775,'kill_snd_warboar_combat_enter',1096),(17796,55776,'kill_snd_warboar_dead_enter',1096),(17797,55777,'kill_snd_warboar_dodge_backhand',1096),(17798,55778,'kill_snd_warboar_dodge_forehand',1096),(17799,55779,'kill_snd_warboar_dodge_thrust',1096),(17800,55780,'kill_snd_warboar_idle',1096),(17801,55781,'kill_snd_warboar_idle01',1096),(17802,55782,'kill_snd_warboar_idle02',1096),(17803,55783,'kill_snd_warboar_kick',1096),(17804,55784,'kill_snd_warboar_knockeddowntoknees_01',1096),(17805,55785,'kill_snd_warboar_knockeddowntoknees_02',1096),(17806,55786,'kill_snd_warboar_knockedtoback',1096),(17807,55787,'kill_snd_warboar_knockedtoback_getup',1096),(17808,55788,'kill_snd_warboar_ouch',1096),(17809,55789,'kill_snd_warboar_ouch_backhand',1096),(17810,55790,'kill_snd_warboar_ouch_forehand',1096),(17811,55791,'kill_snd_warboar_shield_shove',1096),(17812,55792,'kill_snd_warboar_swim_walk',1096),(17813,55793,'kill_snd_warboar_whirling_attack',1096),(17814,55794,'kill_snd_warboar_wild_swing',1096),(17815,55795,'kill_snd_warboar_wildswing',1096),(17816,55805,'kill_snd_tallon_zek_arrow_get',1096),(17817,55806,'kill_snd_tallon_zek_bow_pull',1096),(17818,55807,'kill_snd_tallon_zek_bowshot_01',1096),(17819,55808,'kill_snd_tallon_zek_bowshot_02',1096),(17820,55809,'kill_snd_tallon_zek_bowshot_03',1096),(17821,55817,'kill_result_chain_root_simple',1096),(17822,55818,'kill_result_chain_root_simple_sparkle',1096),(17823,55825,'kill_design_eastern_wastes_spire_portal',1096),(17824,55826,'kill_design_gnomish_wormhole',1096),(17825,55827,'kill_design_gnomish_wormhole_exit',1096),(17826,55834,'kill_design_spear_drop',1096),(17827,55835,'kill_design_spear_idle',1096),(17828,55839,'kill_cast_poison_sands',1096),(17829,55846,'kill_snd_sullon_attack_rx',1096),(17830,55847,'kill_snd_sullon_buff_rx',1096),(17831,55848,'kill_snd_sullon_death_rx',1096),(17832,55849,'kill_snd_sullon_ouch_rx',1096),(17833,55857,'kill_persist_notes_green',1096),(17834,55858,'kill_persist_notes_purple',1096),(17835,55860,'kill_snd_bodyfall',1096),(17836,55862,'kill_snd_pegasus_dive_vox',1096),(17837,55863,'kill_snd_pegasus_wingflap_01',1096),(17838,55864,'kill_snd_pegasus_wingflap_02',1096),(17839,55869,'kill_snd_tallon_buff_rx',1096),(17840,55870,'kill_snd_tallon_death_rx',1096),(17841,55871,'kill_snd_tallon_ouch_rx',1096),(17842,55872,'kill_snd_vallon_attack_rx',1096),(17843,55873,'kill_snd_vallon_buff_rx',1096),(17844,55874,'kill_snd_vallon_dead_rx',1096),(17845,55875,'kill_snd_vallon_ouch_rx',1096),(17846,55882,'kill_fire_trail_fx',1144),(17847,55884,'kill_listening',1144),(17848,55911,'kill_talking',1144),(17849,55938,'kill_sound_terrorbird_mount_bare_pant',1144),(17850,55939,'kill_sound_terrorbird_mount_footstep_quiet',1144),(17851,55940,'kill_sound_terrorbird_mount_idle',1144),(17852,55941,'kill_sound_terrorbird_mount_idle01',1144),(17853,55942,'kill_sound_terrorbird_mount_jump_substitute',1144),(17854,55943,'kill_sound_terrorbird_mount_land',1144),(17855,55944,'kill_sound_terrorbird_mount_turn_left',1144),(17856,55945,'kill_sound_terrorbird_mount_turn_right',1144),(17857,55953,'kill_terrorbird_mount',1144),(17858,55954,'kill_terrorbird_mount_backup',1144),(17859,55955,'kill_terrorbird_mount_fall',1144),(17860,55956,'kill_terrorbird_mount_idle',1144),(17861,55957,'kill_terrorbird_mount_idle01',1144),(17862,55958,'kill_terrorbird_mount_jump',1144),(17863,55959,'kill_terrorbird_mount_jump_substitute',1144),(17864,55960,'kill_terrorbird_mount_land',1144),(17865,55961,'kill_terrorbird_mount_long_fall',1144),(17866,55962,'kill_terrorbird_mount_run',1144),(17867,55963,'kill_terrorbird_mount_turn_left',1144),(17868,55964,'kill_terrorbird_mount_turn_right',1144),(17869,55965,'kill_terrorbird_mount_walk',1144),(17870,55972,'kill_feather_fx',1144),(17871,55975,'kill_small_feather_fx',1144),(17872,55983,'kill_komodo_mount_backup',1144),(17873,55984,'kill_komodo_mount_fall',1144),(17874,55985,'kill_komodo_mount_idle',1144),(17875,55986,'kill_komodo_mount_jump',1144),(17876,55987,'kill_komodo_mount_jump_substitute',1144),(17877,55988,'kill_komodo_mount_land',1144),(17878,55989,'kill_komodo_mount_long_fall',1144),(17879,55990,'kill_komodo_mount_run',1144),(17880,55991,'kill_komodo_mount_turn_left',1144),(17881,55992,'kill_komodo_mount_turn_right',1144),(17882,55993,'kill_komodo_mount_walk',1144),(17883,55994,'kill_raptor_mount_backup',1144),(17884,55995,'kill_raptor_mount_fall',1144),(17885,55996,'kill_raptor_mount_idle',1144),(17886,55997,'kill_raptor_mount_jump',1144),(17887,55998,'kill_raptor_mount_jump_substitute',1144),(17888,55999,'kill_raptor_mount_land',1144),(17889,56000,'kill_raptor_mount_long_fall',1144),(17890,56001,'kill_raptor_mount_run',1144),(17891,56002,'kill_raptor_mount_turn_left',1144),(17892,56003,'kill_raptor_mount_turn_right',1144),(17893,56004,'kill_raptor_mount_walk',1144),(17894,56015,'kill_snd_terrorbird_mount_idle_01',1144),(17895,56016,'kill_snd_terrorbird_mount_idle_02',1144),(17896,56017,'kill_snd_terrorbird_mount_idle_03',1144),(17897,56018,'kill_snd_terrorbird_mount_idle_04',1144),(17898,56019,'kill_snd_terrorbird_mount_jump_substitute',1144),(17899,56027,'kill_result_spiritual_vanish',1144),(17900,56038,'kill_snd_terrorbird_mount_wingflap_01',1144),(17901,56049,'kill_snd_raptor_mount_idle_01',1144),(17902,56050,'kill_snd_raptor_mount_idle_02',1144),(17903,56051,'kill_snd_raptor_mount_idle_03',1144),(17904,56052,'kill_snd_raptor_mount_idle_04',1144),(17905,56053,'kill_snd_raptor_mount_jump_substitute',1144),(17906,56054,'kill_snd_raptor_mount_wingflap_01',1144),(17907,56061,'kill_design_pow_rocky_uprising',1144),(17908,56069,'kill_komodo_mount_fly_glide_left',1144),(17909,56070,'kill_komodo_mount_fly_glide_right',1144),(17910,56071,'kill_komodo_mount_glide',1144),(17911,56072,'kill_raptor_mount_fly_glide_left',1144),(17912,56073,'kill_raptor_mount_fly_glide_right',1144),(17913,56074,'kill_raptor_mount_glide',1144),(17914,56075,'kill_raptor_mount_glide_left',1144),(17915,56076,'kill_raptor_mount_glide_right',1144),(17916,56110,'kill_terrorbird_mount_glide',1144),(17917,56111,'kill_walk_kilt',1144),(17918,56119,'kill_komodo_mount_glide_left',1144),(17919,56120,'kill_komodo_mount_glide_right',1144),(17920,56127,'kill_hover_enter',1144),(17921,56128,'kill_hover_walk',1144),(17922,56130,'kill_result_cold_fog_ground',1144),(17923,56131,'kill_result_fire_frostfell_candy',1144),(17924,56132,'kill_result_fire_frosty_swirls',1144),(17925,56155,'kill_snd_wolfmount_jump',1144),(17926,56162,'kill_design_launch_fireworks',1144),(17927,56166,'kill_snd_komodo_mount_idle_01',1144),(17928,56167,'kill_snd_komodo_mount_idle_02',1144),(17929,56168,'kill_snd_komodo_mount_jump_substitute',1144),(17930,56178,'kill_snd_komodo_mount_glide',1144),(17931,56185,'kill_design_hologram01',1144),(17932,56186,'kill_design_hologram02',1144),(17933,56187,'kill_design_hologram03',1144),(17934,56188,'kill_design_hologram04',1144),(17935,56198,'kill_snd_evil_komodo_mount_idle_01',1144),(17936,56199,'kill_snd_evil_komodo_mount_idle_02',1144),(17937,56206,'kill_design_parachute',1144),(17938,56208,'kill_mount_summon_komodo_snd',1144),(17939,56209,'kill_mount_summon_raptor_snd',1144),(17940,56210,'kill_mount_summon_terrorbird_snd',1144),(17941,56213,'kill_snd_komodo_mount_jump',1144),(17942,56215,'kill_snd_raptor_mount_jump',1144),(17943,56223,'kill_snd_terrorbird_mount_jump',1144),(17944,56240,'kill_takeoff_trail',1144),(17945,56247,'kill_design_pow_blur_essence',1144),(17946,56254,'kill_design_ballista_fire',1144),(17947,56255,'kill_design_ballista_load',1144),(17948,56256,'kill_design_drake_pet',1144),(17949,56257,'kill_design_pow_battle_scene',1144),(17950,56264,'kill_design_bixie_face_splat',1144),(17951,56272,'kill_result_dusty_black',1144),(17952,56280,'kill_raptor_idle01',1144),(17953,56281,'kill_raptor_mount_idle02',1144),(17954,56288,'kill_fae_mount_backup',1144),(17955,56289,'kill_fae_mount_fall',1144),(17956,56290,'kill_fae_mount_fly_backup',1144),(17957,56291,'kill_fae_mount_fly_climb',1144),(17958,56292,'kill_fae_mount_fly_dive',1144),(17959,56293,'kill_fae_mount_fly_down',1144),(17960,56294,'kill_fae_mount_fly_glide',1144),(17961,56295,'kill_fae_mount_fly_glide_left',1144),(17962,56296,'kill_fae_mount_fly_glide_right',1144),(17963,56297,'kill_fae_mount_fly_idle',1144),(17964,56298,'kill_fae_mount_fly_run',1144),(17965,56299,'kill_fae_mount_fly_strafe_left',1144),(17966,56300,'kill_fae_mount_fly_strafe_right',1144),(17967,56301,'kill_fae_mount_fly_turn_left',1144),(17968,56302,'kill_fae_mount_fly_turn_right',1144),(17969,56303,'kill_fae_mount_fly_up',1144),(17970,56304,'kill_fae_mount_fly_walk',1144),(17971,56305,'kill_fae_mount_idle',1144),(17972,56306,'kill_fae_mount_jump',1144),(17973,56307,'kill_fae_mount_land',1144),(17974,56308,'kill_fae_mount_long_fall',1144),(17975,56309,'kill_fae_mount_run',1144),(17976,56310,'kill_fae_mount_turn_left',1144),(17977,56311,'kill_fae_mount_turn_right',1144),(17978,56312,'kill_fae_mount_walk',1144),(17979,56340,'kill_trail_fx',1144),(17980,56347,'kill_design_hands_trail_clockwork',1144),(17981,56348,'kill_design_octopus_pet',1144),(17982,56349,'kill_fae_mount_fly_fall',1144),(17983,56350,'kill_fae_mount_jump_substitute',1144),(17984,56372,'kill_snd_war_general_1h_attack',1144),(17985,56373,'kill_snd_war_general_1h_attack01',1144),(17986,56374,'kill_snd_war_general_1h_attack02',1144),(17987,56375,'kill_snd_war_general_1h_attack03',1144),(17988,56376,'kill_snd_war_general_attack',1144),(17989,56377,'kill_snd_war_general_attack01',1144),(17990,56378,'kill_snd_war_general_attack02',1144),(17991,56379,'kill_snd_war_general_attack03',1144),(17992,56380,'kill_snd_war_general_offensive_buff',1144),(17993,56381,'kill_snd_war_general_wing_flap',1144),(17994,56394,'kill_spin_con1',1144),(17995,56395,'kill_spin_con10',1144),(17996,56396,'kill_spin_con11',1144),(17997,56397,'kill_spin_con12',1144),(17998,56398,'kill_spin_con13',1144),(17999,56399,'kill_spin_con14',1144),(18000,56400,'kill_spin_con15',1144),(18001,56401,'kill_spin_con16',1144),(18002,56402,'kill_spin_con2',1144),(18003,56403,'kill_spin_con3',1144),(18004,56404,'kill_spin_con4',1144),(18005,56405,'kill_spin_con5',1144),(18006,56406,'kill_spin_con6',1144),(18007,56407,'kill_spin_con7',1144),(18008,56408,'kill_spin_con8',1144),(18009,56409,'kill_spin_con9',1144),(18010,56410,'kill_squirrel_mount_backup',1144),(18011,56411,'kill_squirrel_mount_fall',1144),(18012,56412,'kill_squirrel_mount_glide',1144),(18013,56413,'kill_squirrel_mount_glide_left',1144),(18014,56414,'kill_squirrel_mount_glide_right',1144),(18015,56415,'kill_squirrel_mount_idle',1144),(18016,56416,'kill_squirrel_mount_idle01',1144),(18017,56417,'kill_squirrel_mount_jump',1144),(18018,56418,'kill_squirrel_mount_jump_substitute',1144),(18019,56419,'kill_squirrel_mount_land',1144),(18020,56420,'kill_squirrel_mount_long_fall',1144),(18021,56421,'kill_squirrel_mount_run',1144),(18022,56422,'kill_squirrel_mount_turn_left',1144),(18023,56423,'kill_squirrel_mount_turn_right',1144),(18024,56424,'kill_squirrel_mount_walk',1144),(18025,56425,'kill_wand_attack',1144),(18026,56426,'kill_wand_idle',1144),(18027,56434,'kill_result_blue_aura',1144),(18028,56435,'kill_result_golden_aura',1144),(18029,56436,'kill_result_poppy_trail',1144),(18030,56437,'kill_result_red_aura',1144),(18031,56452,'kill_snd_war_general_dead_enter',1144),(18032,56453,'kill_snd_war_general_knockeddowntoknees',1144),(18033,56454,'kill_snd_war_general_whirling_attack',1144),(18034,56455,'kill_snd_war_general_wild_swing',1144),(18035,56458,'kill_cast_fae_flight_grant_fx',1144),(18036,56463,'kill_design_rock_launch',1144),(18037,56465,'kill_result_cyclops_eye_debuff',1144),(18038,56466,'kill_result_fae_dark_mount_fx',1144),(18039,56467,'kill_result_fae_light_mount_fx',1144),(18040,56468,'kill_result_falcon_god_egg_spit_p2p',1144),(18041,56469,'kill_screech_fx',1144),(18042,56471,'kill_shield_bash_enter',1144),(18043,56472,'kill_shield_bash_exit',1144),(18044,56474,'kill_snd_falcon_god_fs',1144),(18045,56475,'kill_snd_falcon_god_wing_flap_01',1144),(18046,56488,'kill_snd_war_general_1h_sword_enter',1144),(18047,56489,'kill_snd_war_general_fs',1144),(18048,56490,'kill_snd_war_general_combat_enter',1144),(18049,56491,'kill_snd_war_general_idle01',1144),(18050,56492,'kill_snd_war_general_idle02',1144),(18051,56493,'kill_snd_war_general_ouch_forehand',1144),(18052,56506,'kill_writhe_enter',1144),(18053,56513,'kill_fire_magic',1144),(18054,56518,'kill_snd_falcon_god_attack02_vox',1144),(18055,56519,'kill_snd_falcon_god_attack03_vox',1144),(18056,56520,'kill_snd_falcon_god_attack_vox',1144),(18057,56521,'kill_snd_falcon_god_cast_vox',1144),(18058,56522,'kill_snd_falcon_god_combat_enter_vox',1144),(18059,56523,'kill_snd_falcon_god_idle01',1144),(18060,56524,'kill_snd_falcon_god_idle02_vox',1144),(18061,56525,'kill_snd_falcon_god_offensive_buff',1144),(18062,56527,'kill_snd_squirrel_mount_glide',1144),(18063,56528,'kill_snd_squirrel_mount_idle',1144),(18064,56529,'kill_snd_squirrel_mount_idle_01',1144),(18065,56530,'kill_snd_squirrel_mount_jump',1144),(18066,56531,'kill_snd_squirrel_mount_jump_substitute',1144),(18067,56556,'kill_squirrel_mount_run01',1144),(18068,56557,'kill_trdskl_acorn',1144),(18069,56558,'kill_trdskl_skull',1144),(18070,56565,'kill_fire_magic_blue',1144),(18071,56566,'kill_fire_magic_green',1144),(18072,56567,'kill_fire_magic_purple',1144),(18073,56568,'kill_fire_magic_red',1144),(18074,56569,'kill_gas_torch_flame',1144),(18075,56580,'kill_snd_falcon_god_bodyfall',1144),(18076,56585,'kill_cast_shoot_fire_arrows',1144),(18077,56586,'kill_cast_slash_trail',1144),(18078,56587,'kill_cast_soul_attack_blast',1144),(18079,56591,'kill_result_fire_arrow_storm',1144),(18080,56596,'kill_snd_rallos_zek_1h_sword_attack',1144),(18081,56597,'kill_snd_rallos_zek_1h_sword_attack01',1144),(18082,56598,'kill_snd_rallos_zek_1h_sword_attack02',1144),(18083,56599,'kill_snd_rallos_zek_1h_sword_attack03',1144),(18084,56600,'kill_snd_rallos_zek_fs',1144),(18085,56601,'kill_snd_rallos_zek_shield_bash',1144),(18086,56602,'kill_snd_rallos_zek_shield_bash_exit',1144),(18087,56603,'kill_snd_rallos_zek_shield_shove',1144),(18088,56604,'kill_snd_rallos_zek_whirling_attack01',1144),(18089,56605,'kill_snd_rallos_zek_whirling_attack02',1144),(18090,56606,'kill_snd_rallos_zek_whirling_attack03',1144),(18091,56607,'kill_snd_rallos_zek_whoosh',1144),(18092,56608,'kill_snd_rallos_zek_wild_swing',1144),(18093,56611,'kill_cast_axe_fire_attack',1144),(18094,56612,'kill_cast_axe_flurry',1144),(18095,56615,'kill_cast_shooting_axes',1144),(18096,56616,'kill_cast_slashing_axes',1144),(18097,56621,'kill_cast_shield_slam_blast',1144),(18098,56624,'kill_cast_fire_teleport',1144),(18099,56625,'kill_cast_godly_port',1144),(18100,56630,'kill_design_embedded_swords',1144),(18101,56631,'kill_design_swords_exit',1144),(18102,56634,'kill_angler_mount_backup',1144),(18103,56635,'kill_angler_mount_fall',1144),(18104,56636,'kill_angler_mount_glide',1144),(18105,56637,'kill_angler_mount_glide_left',1144),(18106,56638,'kill_angler_mount_glide_right',1144),(18107,56639,'kill_angler_mount_idle',1144),(18108,56640,'kill_angler_mount_idle01',1144),(18109,56641,'kill_angler_mount_idle02',1144),(18110,56642,'kill_angler_mount_jump',1144),(18111,56643,'kill_angler_mount_jump_substitute',1144),(18112,56644,'kill_angler_mount_land',1144),(18113,56645,'kill_angler_mount_long_fall',1144),(18114,56646,'kill_angler_mount_run',1144),(18115,56647,'kill_angler_mount_run01',1144),(18116,56648,'kill_angler_mount_turn_left',1144),(18117,56649,'kill_angler_mount_turn_right',1144),(18118,56650,'kill_angler_mount_walk',1144),(18119,56655,'kill_design_swords_enter',1144),(18120,56656,'kill_design_swords_strike',1144),(18121,56657,'kill_design_zek_death_fx',1144),(18122,56659,'kill_result_power_infused',1144),(18123,56660,'kill_result_rallos_lightning_p2p',1144),(18124,56663,'kill_snd_angler_mount_glide',1144),(18125,56664,'kill_snd_angler_mount_idle',1144),(18126,56665,'kill_snd_angler_mount_idle_01',1144),(18127,56666,'kill_snd_angler_mount_jump',1144),(18128,56667,'kill_snd_angler_mount_jump_substitute',1144),(18129,56694,'kill_squirrel_mount_idle02',1144),(18130,56697,'kill_cast_godly_port_exit',1144),(18131,56702,'kill_design_result_white_out',1144),(18132,56704,'kill_result_death_charge_blast',1144),(18133,56711,'kill_design_pow_rock_blast',1144),(18134,56714,'kill_cast_gather_fx',1144),(18135,56720,'kill_result_erollisi_bow_attack_p2p',1144),(18136,56723,'kill_breath_fx',1144),(18137,56728,'kill_eye_fx',1144),(18138,56730,'kill_port_down_fx',1144),(18139,56731,'kill_result_shadow_shatter',1144),(18140,56732,'kill_result_shadow_sphere_p2p',1144),(18141,56739,'kill_design_sol_statue_breaking',1144),(18142,56740,'kill_design_sol_statue_essence',1144),(18143,56741,'kill_design_sol_statue_evil_essence',1144),(18144,56743,'kill_result_fire_engulfed_dark',1144),(18145,56744,'kill_result_shadow_streaks',1144),(18146,56751,'kill_design_frostfell_portal_new',1144),(18147,56755,'kill_snd_angler_mount_idle02',1144),(18148,56756,'kill_snd_angler_mount_scratch',1144),(18149,56757,'kill_snd_angler_mount_vox_01',1144),(18150,56758,'kill_snd_angler_mount_vox_02',1144),(18151,56759,'kill_snd_angler_mount_vox_03',1144),(18152,56760,'kill_snd_angler_mount_vox_short',1144),(18153,56768,'kill_result_object_sparkles_black',1144),(18154,56769,'kill_result_object_sparkles_gold',1144),(18155,56770,'kill_result_object_sparkles_pink',1144),(18156,56771,'kill_result_object_sparkles_purple',1144),(18157,56778,'kill_dance_female',1144),(18158,56814,'kill_trdskl_tinker_hands',1144),(18159,56822,'kill_result_exorcise_evil',1144),(18160,56829,'kill_death01_enter',1144),(18161,56830,'kill_death01_exit',1144),(18162,56831,'kill_death01_idle',1144),(18163,56832,'kill_1h_sword_run',1144),(18164,56835,'kill_cast1',1144),(18165,56843,'kill_result_flash_bomb_vanish',1144),(18166,56844,'kill_result_lifetap_heart_p2p',1144),(18167,56852,'kill_player_wing_mount_backup',1144),(18168,56853,'kill_player_wing_mount_fall',1144),(18169,56854,'kill_player_wing_mount_fly_backup',1144),(18170,56855,'kill_player_wing_mount_fly_climb',1144),(18171,56856,'kill_player_wing_mount_fly_dive',1144),(18172,56857,'kill_player_wing_mount_fly_down',1144),(18173,56858,'kill_player_wing_mount_fly_glide',1144),(18174,56859,'kill_player_wing_mount_fly_glide_left',1144),(18175,56860,'kill_player_wing_mount_fly_glide_right',1144),(18176,56861,'kill_player_wing_mount_fly_idle',1144),(18177,56862,'kill_player_wing_mount_fly_run',1144),(18178,56863,'kill_player_wing_mount_fly_strafe_left',1144),(18179,56864,'kill_player_wing_mount_fly_strafe_right',1144),(18180,56865,'kill_player_wing_mount_fly_turn_left',1144),(18181,56866,'kill_player_wing_mount_fly_turn_right',1144),(18182,56867,'kill_player_wing_mount_fly_up',1144),(18183,56868,'kill_player_wing_mount_fly_walk',1144),(18184,56869,'kill_player_wing_mount_idle',1144),(18185,56870,'kill_player_wing_mount_jump',1144),(18186,56871,'kill_player_wing_mount_land',1144),(18187,56872,'kill_player_wing_mount_long_fall',1144),(18188,56873,'kill_player_wing_mount_run',1144),(18189,56874,'kill_player_wing_mount_turn_left',1144),(18190,56875,'kill_player_wing_mount_turn_right',1144),(18191,56876,'kill_player_wing_mount_walk',1144),(18192,56881,'kill_chop_ground_digging',1144),(18193,56882,'kill_chop_ground_success',1144),(18194,56889,'kill_design_glow_eyes_green',1190),(18195,56892,'kill_sit_drink',1190),(18196,56900,'kill_result_flash_bomb_appear',1190),(18197,56908,'kill_reforge_nature_tier01',1190),(18198,56909,'kill_reforge_nature_tier02',1190),(18199,56910,'kill_reforge_nature_tier03',1190),(18200,56911,'kill_reforge_nature_tier04',1190),(18201,56912,'kill_reforge_nature_tier05',1190),(18202,56920,'kill_reforge_fire_tier01',1190),(18203,56921,'kill_reforge_fire_tier02',1190),(18204,56922,'kill_reforge_fire_tier03',1190),(18205,56923,'kill_reforge_fire_tier04',1190),(18206,56924,'kill_reforge_fire_tier05',1190),(18207,56932,'kill_reforge_ice_tier01',1190),(18208,56933,'kill_reforge_ice_tier02',1190),(18209,56934,'kill_reforge_ice_tier03',1190),(18210,56935,'kill_reforge_ice_tier04',1190),(18211,56936,'kill_reforge_ice_tier05',1190),(18212,56944,'kill_reforge_blood_tier01',1190),(18213,56945,'kill_reforge_blood_tier02',1190),(18214,56946,'kill_reforge_blood_tier03',1190),(18215,56947,'kill_reforge_blood_tier04',1190),(18216,56948,'kill_reforge_blood_tier05',1190),(18217,56955,'kill_hassan_chop',1190),(18218,56963,'kill_reforge_acid_tier01',1190),(18219,56964,'kill_reforge_acid_tier02',1190),(18220,56965,'kill_reforge_acid_tier03',1190),(18221,56966,'kill_reforge_acid_tier04',1190),(18222,56967,'kill_reforge_acid_tier05',1190),(18223,56968,'kill_reforge_runic_tier01',1190),(18224,56969,'kill_reforge_runic_tier02',1190),(18225,56970,'kill_reforge_runic_tier03',1190),(18226,56971,'kill_reforge_runic_tier04',1190),(18227,56972,'kill_reforge_runic_tier05',1190),(18228,56980,'kill_reforge_electricity_tier01',1190),(18229,56981,'kill_reforge_electricity_tier02',1190),(18230,56982,'kill_reforge_electricity_tier03',1190),(18231,56983,'kill_reforge_electricity_tier04',1190),(18232,56984,'kill_reforge_electricity_tier05',1190),(18233,56991,'kill_dead_enter01',1190),(18234,56992,'kill_death01',1190),(18235,56993,'kill_horse_attack',1190),(18236,56994,'kill_horse_attack01',1190),(18237,56995,'kill_horse_attack02',1190),(18238,56996,'kill_horse_attack03',1190),(18239,56997,'kill_horse_cast',1190),(18240,56998,'kill_horse_combat_cast',1190),(18241,56999,'kill_horse_combat_enter',1190),(18242,57000,'kill_horse_combat_exit',1190),(18243,57001,'kill_horse_death',1190),(18244,57002,'kill_horse_death01',1190),(18245,57003,'kill_horse_ouch',1190),(18246,57004,'kill_horse_ouch01',1190),(18247,57005,'kill_horse_wild_swing',1190),(18248,57007,'kill_reforge_pestilence_tier01',1190),(18249,57008,'kill_reforge_pestilence_tier02',1190),(18250,57009,'kill_reforge_pestilence_tier03',1190),(18251,57010,'kill_reforge_pestilence_tier04',1190),(18252,57011,'kill_reforge_pestilence_tier05',1190),(18253,57012,'kill_2pike_attack03',1190),(18254,57020,'kill_reforge_illusion_tier01',1190),(18255,57021,'kill_reforge_illusion_tier02',1190),(18256,57022,'kill_reforge_illusion_tier03',1190),(18257,57023,'kill_reforge_illusion_tier04',1190),(18258,57024,'kill_reforge_illusion_tier05',1190),(18259,57025,'kill_reforge_radiance_tier01',1190),(18260,57026,'kill_reforge_radiance_tier02',1190),(18261,57027,'kill_reforge_radiance_tier03',1190),(18262,57028,'kill_reforge_radiance_tier04',1190),(18263,57029,'kill_reforge_radiance_tier05',1190),(18264,57036,'kill_horse_dead',1190),(18265,57037,'kill_horse_dead_enter',1190),(18266,57038,'kill_horse_dead_enter01',1190),(18267,57040,'kill_pegasus_mount_attack',1190),(18268,57041,'kill_pegasus_mount_attack01',1190),(18269,57042,'kill_pegasus_mount_attack02',1190),(18270,57043,'kill_pegasus_mount_attack03',1190),(18271,57044,'kill_pegasus_mount_cast',1190),(18272,57045,'kill_pegasus_mount_combat_enter',1190),(18273,57046,'kill_pegasus_mount_combat_exit',1190),(18274,57047,'kill_pegasus_mount_combat_idle',1190),(18275,57048,'kill_pegasus_mount_dead',1190),(18276,57049,'kill_pegasus_mount_dead_enter',1190),(18277,57050,'kill_pegasus_mount_dead_enter01',1190),(18278,57051,'kill_pegasus_mount_death',1190),(18279,57052,'kill_pegasus_mount_death01',1190),(18280,57053,'kill_pegasus_mount_ouch',1190),(18281,57054,'kill_pegasus_mount_ouch01',1190),(18282,57055,'kill_pegasus_mount_wild_swing',1190),(18283,57056,'kill_result_fprt_ghosts_attack_p2p',1190),(18284,57067,'kill_snd_freeport_knight_1h_sword_attack',1190),(18285,57068,'kill_snd_freeport_knight_1h_sword_attack01',1190),(18286,57069,'kill_snd_freeport_knight_1h_sword_attack02',1190),(18287,57070,'kill_snd_freeport_knight_1h_sword_attack03',1190),(18288,57071,'kill_snd_freeport_knight_fs',1190),(18289,57072,'kill_snd_freeport_knight_charge_up',1190),(18290,57073,'kill_snd_freeport_knight_whirling_attack',1190),(18291,57074,'kill_snd_freeport_knight_wild_swing',1190),(18292,57100,'kill_tiered_chill_claw_buff',1190),(18293,57101,'kill_tiered_chilling_claws',1190),(18294,57102,'kill_tiered_claws_buff',1190),(18295,57103,'kill_tiered_shield_barrier_buff',1190),(18296,57104,'kill_2h_ouch',1190),(18297,57105,'kill_2h_ouch_backhand',1190),(18298,57106,'kill_2h_ouch_down',1190),(18299,57107,'kill_2h_ouch_forehand',1190),(18300,57108,'kill_2h_ouch_thrust',1190),(18301,57109,'kill_2h_sword_dodge',1190),(18302,57112,'kill_backhand',1190),(18303,57117,'kill_horse_ouch_backhand',1190),(18304,57118,'kill_horse_ouch_down',1190),(18305,57119,'kill_horse_ouch_forehand',1190),(18306,57120,'kill_horse_ouch_thrust',1190),(18307,57122,'kill_pike_dodge',1190),(18308,57123,'kill_pike_ouch',1190),(18309,57153,'kill_tiered_spirit_pets_summon',1190),(18310,57161,'kill_mount_attack',1190),(18311,57166,'kill_snd_freeport_knight_cast_death',1190),(18312,57167,'kill_snd_freeport_knight_cast_end',1190),(18313,57168,'kill_snd_freeport_knight_cast_start',1190),(18314,57194,'kill_tiered_claw_marks',1190),(18315,57195,'kill_tiered_feather_shroud',1190),(18316,57196,'kill_tiered_fire_claw_buff',1190),(18317,57197,'kill_tiered_flaming_claws',1190),(18318,57198,'kill_tiered_hand_claws',1190),(18319,57199,'kill_tiered_ice_dagger_p2p',1190),(18320,57202,'kill_attack_swipe',1190),(18321,57203,'kill_cast_aa_frosty_swirls',1190),(18322,57204,'kill_cast_aa_spirit_blast',1190),(18323,57207,'kill_cast_slashing_claws',1190),(18324,57211,'kill_result_aa_wispy_ward',1190),(18325,57212,'kill_result_summon_spirit_swirls',1190),(18326,57213,'kill_result_tame_shroud',1190),(18327,57243,'kill_tiered_vine_net',1190),(18328,57246,'kill_cast_flurry_claws',1190),(18329,57252,'kill_result_lucan_soul_suck_p2p',1190),(18330,57260,'kill_lucan_cast_enter',1190),(18331,57261,'kill_lucan_cast_exit',1190),(18332,57262,'kill_lucan_cast_idle',1190),(18333,57267,'kill_snd_freeport_knight_death',1190),(18334,57268,'kill_snd_freeport_knight_knockeddowntoknees',1190),(18335,57269,'kill_snd_freeport_knight_rx_attack_long',1190),(18336,57270,'kill_snd_freeport_knight_rx_attack_short',1190),(18337,57271,'kill_snd_freeport_knight_rx_buff',1190),(18338,57272,'kill_snd_freeport_knight_rx_death',1190),(18339,57273,'kill_snd_freeport_knight_rx_ouch',1190),(18340,57285,'kill_snd_freeport_knight_attack',1190),(18341,57286,'kill_snd_freeport_knight_attack01',1190),(18342,57287,'kill_snd_freeport_knight_attack02',1190),(18343,57288,'kill_snd_freeport_knight_attack03',1190),(18344,57289,'kill_snd_freeport_knight_rx_cast_end',1190),(18345,57296,'kill_drink_chug',1190),(18346,57297,'kill_horse_combat_attack',1190),(18347,57298,'kill_horse_combat_attack01',1190),(18348,57299,'kill_horse_combat_attack02',1190),(18349,57300,'kill_horse_combat_attack03',1190),(18350,57303,'kill_cast_aa_spirit_bear',1190),(18351,57304,'kill_cast_ghost_rats',1190),(18352,57310,'kill_result_aa_claw_marks',1190),(18353,57311,'kill_result_proc_crit_bonus',1190),(18354,57312,'kill_result_spirit_claws_spinning',1190),(18355,57314,'kill_sfx_bodyfall',1190),(18356,57318,'kill_snd_horse_fs_left',1190),(18357,57319,'kill_snd_horse_fs_right',1190),(18358,57320,'kill_snd_horse_rx_attack',1190),(18359,57321,'kill_snd_horse_rx_death',1190),(18360,57322,'kill_snd_horse_rx_ouch',1190),(18361,57325,'kill_cast_aa_frosty_cone_forward',1190),(18362,57326,'kill_cast_cloud_spin',1190),(18363,57327,'kill_cast_feral_fangs',1190),(18364,57328,'kill_cast_flurry_claws_attack',1190),(18365,57334,'kill_result_ice_attack_p2p',1190),(18366,57337,'kill_cast_aa_flash_bomb_appear',1190),(18367,57338,'kill_cast_aa_melee_swipe',1190),(18368,57339,'kill_cast_crit_hawk_summon',1190),(18369,57344,'kill_icon_merc_heal',1190),(18370,57345,'kill_icon_merc_melee',1190),(18371,57346,'kill_icon_merc_ranged',1190),(18372,57347,'kill_icon_merc_spell',1190),(18373,57348,'kill_icon_merc_support',1190),(18374,57349,'kill_icon_merc_tank',1190),(18375,57352,'kill_cast_aa_spirit_blast_big',1190),(18376,57353,'kill_cast_feral_fangs_bite',1190),(18377,57356,'kill_cast_aa_spirit_ape',1190),(18378,57357,'kill_cast_aa_spirit_boar',1190),(18379,57358,'kill_cast_aa_spirit_crab',1190),(18380,57359,'kill_cast_aa_spirit_rats',1190),(18381,57360,'kill_cast_aa_spirit_stag',1190),(18382,57361,'kill_cast_claws_strike_targeted',1190),(18383,57364,'kill_cast_aa_spirit_bat',1190),(18384,57365,'kill_cast_aa_spirit_cobra',1190),(18385,57366,'kill_cast_aa_spirit_drake',1190),(18386,57367,'kill_cast_aa_spirit_frogs',1190),(18387,57368,'kill_cast_aa_spirit_hawk',1190),(18388,57369,'kill_cast_aa_spirit_tiger',1190),(18389,57370,'kill_cast_aa_spirit_wolf',1190),(18390,57375,'kill_frog_croaking_snd',1190),(18391,57377,'kill_result_luclin_chunk_slam',1190),(18392,57407,'kill_tiger_attack_snd',1190),(18393,57415,'kill_result_aa_tameable_fx',1190),(18394,57418,'kill_cast_aa_spirit_wolf_howling',1190),(18395,57424,'kill_result_feral_fangs_vert_bite',1190),(18396,57427,'kill_cast_aa_frost_wall',1190),(18397,57433,'kill_result_aa_icicle_spikes',1190),(18398,57434,'kill_result_aa_quick_heal',1190),(18399,57435,'kill_result_aa_windy_ward',1190),(18400,57442,'kill_design_frostfell_candyfx01',1190),(18401,57443,'kill_design_frostfell_candyfx02',1190),(18402,57444,'kill_design_frostfell_candyfx03',1190),(18403,57445,'kill_design_frostfell_candyfx04',1190),(18404,57456,'kill_snd_footstep',1190),(18405,57459,'kill_attack_bites',1190),(18406,57460,'kill_attack_shuffle',1190),(18407,57461,'kill_attack_tail_swipe',1190),(18408,57467,'kill_roll',1190),(18409,57497,'kill_spawn',1190),(18410,57500,'kill_cast02',1190),(18411,57503,'kill_combat_idle02',1190),(18412,57506,'kill_dead_alt',1190),(18413,57507,'kill_death_alt',1190),(18414,57508,'kill_fae_mount_combat_idle',1190),(18415,57516,'kill_result_sparkles_object_swirl',1190),(18416,57517,'kill_result_star_spirits',1190),(18417,57518,'kill_run_ground',1190),(18418,57548,'kill_spawn_idle',1190),(18419,57551,'kill_backpack_fly_backup',1190),(18420,57552,'kill_backpack_fly_combat_idle',1190),(18421,57553,'kill_backpack_fly_fall',1190),(18422,57554,'kill_backpack_fly_fly_backup',1190),(18423,57555,'kill_backpack_fly_fly_climb',1190),(18424,57556,'kill_backpack_fly_fly_dive',1190),(18425,57557,'kill_backpack_fly_fly_down',1190),(18426,57558,'kill_backpack_fly_fly_glide',1190),(18427,57559,'kill_backpack_fly_fly_glide_left',1190),(18428,57560,'kill_backpack_fly_fly_glide_right',1190),(18429,57561,'kill_backpack_fly_fly_idle',1190),(18430,57562,'kill_backpack_fly_fly_run',1190),(18431,57563,'kill_backpack_fly_fly_strafe_left',1190),(18432,57564,'kill_backpack_fly_fly_strafe_right',1190),(18433,57565,'kill_backpack_fly_fly_turn_left',1190),(18434,57566,'kill_backpack_fly_fly_turn_right',1190),(18435,57567,'kill_backpack_fly_fly_up',1190),(18436,57568,'kill_backpack_fly_fly_walk',1190),(18437,57569,'kill_backpack_fly_idle',1190),(18438,57570,'kill_backpack_fly_jump',1190),(18439,57571,'kill_backpack_fly_land',1190),(18440,57572,'kill_backpack_fly_long_fall',1190),(18441,57573,'kill_backpack_fly_run',1190),(18442,57574,'kill_backpack_fly_turn_left',1190),(18443,57575,'kill_backpack_fly_turn_right',1190),(18444,57576,'kill_backpack_fly_walk',1190),(18445,57579,'kill_backpack_backup',1190),(18446,57580,'kill_backpack_combat_idle',1190),(18447,57581,'kill_backpack_fall',1190),(18448,57582,'kill_backpack_fly__walk',1190),(18449,57583,'kill_backpack_fly_climb',1190),(18450,57584,'kill_backpack_fly_dive',1190),(18451,57585,'kill_backpack_fly_down',1190),(18452,57586,'kill_backpack_fly_glide',1190),(18453,57587,'kill_backpack_fly_glide_left',1190),(18454,57588,'kill_backpack_fly_glide_right',1190),(18455,57589,'kill_backpack_fly_strafe_left',1190),(18456,57590,'kill_backpack_fly_strafe_right',1190),(18457,57591,'kill_backpack_fly_up',1190),(18458,57592,'kill_backpack_idle',1190),(18459,57593,'kill_backpack_jump',1190),(18460,57594,'kill_backpack_land',1190),(18461,57595,'kill_backpack_long_fall',1190),(18462,57596,'kill_backpack_run',1190),(18463,57597,'kill_backpack_strafe_left',1190),(18464,57598,'kill_backpack_strafe_left_run',1190),(18465,57599,'kill_backpack_strafe_right',1190),(18466,57600,'kill_backpack_strafe_right_run',1190),(18467,57601,'kill_backpack_turn_left',1190),(18468,57602,'kill_backpack_turn_right',1190),(18469,57603,'kill_backpack_walk',1190),(18470,57608,'kill_dual_wield_dead_enter',1190),(18471,57611,'kill_backpack_backup_run',1190),(18472,57619,'kill_persist_bug_swarm',1190),(18473,57629,'kill_snd_fae_wing_flaps',1190),(18474,57636,'kill_drakota_mount_backup',1190),(18475,57637,'kill_drakota_mount_fall',1190),(18476,57638,'kill_drakota_mount_fly_backup',1190),(18477,57639,'kill_drakota_mount_fly_climb',1190),(18478,57640,'kill_drakota_mount_fly_dive',1190),(18479,57641,'kill_drakota_mount_fly_down',1190),(18480,57642,'kill_drakota_mount_fly_glide',1190),(18481,57643,'kill_drakota_mount_fly_glide_left',1190),(18482,57644,'kill_drakota_mount_fly_glide_right',1190),(18483,57645,'kill_drakota_mount_fly_idle',1190),(18484,57646,'kill_drakota_mount_fly_run',1190),(18485,57647,'kill_drakota_mount_fly_strafe_left',1190),(18486,57648,'kill_drakota_mount_fly_strafe_right',1190),(18487,57649,'kill_drakota_mount_fly_turn_left',1190),(18488,57650,'kill_drakota_mount_fly_turn_right',1190),(18489,57651,'kill_drakota_mount_fly_up',1190),(18490,57652,'kill_drakota_mount_fly_walk',1190),(18491,57653,'kill_drakota_mount_idle',1190),(18492,57654,'kill_drakota_mount_idle01',1190),(18493,57655,'kill_drakota_mount_jump',1190),(18494,57656,'kill_drakota_mount_jump_substitute',1190),(18495,57657,'kill_drakota_mount_land',1190),(18496,57658,'kill_drakota_mount_long_fall',1190),(18497,57659,'kill_drakota_mount_run',1190),(18498,57660,'kill_drakota_mount_turn_left',1190),(18499,57661,'kill_drakota_mount_turn_right',1190),(18500,57662,'kill_drakota_mount_walk',1190),(18501,57667,'kill_cast_summon_draconian_cyclone',1190),(18502,57668,'kill_cast_summon_draconian_necro',1190),(18503,57671,'kill_design_sky_necro_beams',1190),(18504,57672,'kill_design_sky_necro_dragon_summon',1190),(18505,57681,'kill_skyshrine_drake_run',1190),(18506,57682,'kill_skyshrine_drake_run01',1190),(18507,57689,'kill_idle_rake',1190),(18508,57726,'kill_tcg_head_aura',1190),(18509,57727,'kill_1h_sword_attack04',1190),(18510,57734,'kill_dance02',1190),(18511,57735,'kill_dance03',1190),(18512,57736,'kill_design_speed_boost_buff_no_sound',1190),(18513,57737,'kill_design_speed_drop_debuff_no_sound',1190),(18514,57738,'kill_drakota_mount_idle_01',1190),(18515,57739,'kill_idle_gardening',1190),(18516,57740,'kill_idle_gathering',1190),(18517,57742,'kill_result_forced_shader_bugs',1190),(18518,57749,'kill_design_glow_eyes_blue',1190),(18519,57780,'kill_wing_wisps_fx',1190),(18520,57787,'kill_dontuse_idle01',1190),(18521,57788,'kill_dontuse_idle02',1190),(18522,57789,'kill_golem_kick',1190),(18523,57792,'kill_cast_corruption_gather',1190),(18524,57794,'kill_cast_pollen_spew',1190),(18525,57796,'kill_cast_seed_spew',1190),(18526,57797,'kill_cast_spore_spew',1190),(18527,57800,'kill_idle_gardening_exit',1190),(18528,57801,'kill_idle_gathering_exit',1190),(18529,57803,'kill_result_icicle_blast_up',1190),(18530,57805,'kill_sit_enter_open',1190),(18531,57806,'kill_sit_exit_open',1190),(18532,57807,'kill_sit_idle_open',1190),(18533,57810,'kill_cast_gather_corruption',1190),(18534,57816,'kill_lounge_enter',1190),(18535,57817,'kill_lounge_exit',1190),(18536,57818,'kill_lounge_idle',1190),(18537,57819,'kill_result_corruption_spew',1190),(18538,57849,'kill_stalk',1190),(18539,57852,'kill_backpack_1h_crush_attack',1190),(18540,57853,'kill_backpack_1h_crush_attack01',1190),(18541,57854,'kill_backpack_1h_crush_attack02',1190),(18542,57855,'kill_backpack_1h_crush_attack03',1190),(18543,57856,'kill_backpack_1h_crush_attack_recoil',1190),(18544,57857,'kill_backpack_1h_crush_attack_recoil01',1190),(18545,57858,'kill_backpack_1h_crush_attack_recoil02',1190),(18546,57859,'kill_backpack_1h_crush_attack_recoil03',1190),(18547,57860,'kill_backpack_1h_crush_backup',1190),(18548,57861,'kill_backpack_1h_crush_dodge_backhand',1190),(18549,57862,'kill_backpack_1h_crush_dodge_down',1190),(18550,57863,'kill_backpack_1h_crush_dodge_forehand',1190),(18551,57864,'kill_backpack_1h_crush_dodge_thrust',1190),(18552,57865,'kill_backpack_1h_crush_enter',1190),(18553,57866,'kill_backpack_1h_crush_exit',1190),(18554,57867,'kill_backpack_1h_crush_idle',1190),(18555,57868,'kill_backpack_1h_crush_ouch_backhand',1190),(18556,57869,'kill_backpack_1h_crush_ouch_down',1190),(18557,57870,'kill_backpack_1h_crush_ouch_forehand',1190),(18558,57871,'kill_backpack_1h_crush_ouch_thrust',1190),(18559,57872,'kill_backpack_1h_crush_parry_backhand',1190),(18560,57873,'kill_backpack_1h_crush_parry_down',1190),(18561,57874,'kill_backpack_1h_crush_parry_forehand',1190),(18562,57875,'kill_backpack_1h_crush_parry_thrust',1190),(18563,57876,'kill_backpack_1h_crush_strafe_left',1190),(18564,57877,'kill_backpack_1h_crush_strafe_right',1190),(18565,57878,'kill_backpack_1h_crush_walk',1190),(18566,57879,'kill_backpack_1h_pierce_attack',1190),(18567,57880,'kill_backpack_1h_pierce_attack01',1190),(18568,57881,'kill_backpack_1h_pierce_attack02',1190),(18569,57882,'kill_backpack_1h_pierce_attack03',1190),(18570,57883,'kill_backpack_1h_pierce_attack_recoil',1190),(18571,57884,'kill_backpack_1h_pierce_attack_recoil01',1190),(18572,57885,'kill_backpack_1h_pierce_attack_recoil02',1190),(18573,57886,'kill_backpack_1h_pierce_attack_recoil03',1190),(18574,57887,'kill_backpack_1h_pierce_backup',1190),(18575,57888,'kill_backpack_1h_pierce_dodge_backhand',1190),(18576,57889,'kill_backpack_1h_pierce_dodge_down',1190),(18577,57890,'kill_backpack_1h_pierce_dodge_forehand',1190),(18578,57891,'kill_backpack_1h_pierce_dodge_thrust',1190),(18579,57892,'kill_backpack_1h_pierce_enter',1190),(18580,57893,'kill_backpack_1h_pierce_exit',1190),(18581,57894,'kill_backpack_1h_pierce_idle',1190),(18582,57895,'kill_backpack_1h_pierce_ouch_backhand',1190),(18583,57896,'kill_backpack_1h_pierce_ouch_down',1190),(18584,57897,'kill_backpack_1h_pierce_ouch_forehand',1190),(18585,57898,'kill_backpack_1h_pierce_ouch_thrust',1190),(18586,57899,'kill_backpack_1h_pierce_parry_backhand',1190),(18587,57900,'kill_backpack_1h_pierce_parry_down',1190),(18588,57901,'kill_backpack_1h_pierce_parry_forehand',1190),(18589,57902,'kill_backpack_1h_pierce_parry_thrust',1190),(18590,57903,'kill_backpack_1h_pierce_strafe_left',1190),(18591,57904,'kill_backpack_1h_pierce_strafe_right',1190),(18592,57905,'kill_backpack_1h_pierce_walk',1190),(18593,57906,'kill_backpack_1h_sword_attack',1190),(18594,57907,'kill_backpack_1h_sword_attack01',1190),(18595,57908,'kill_backpack_1h_sword_attack02',1190),(18596,57909,'kill_backpack_1h_sword_attack03',1190),(18597,57910,'kill_backpack_1h_sword_attack_recoil',1190),(18598,57911,'kill_backpack_1h_sword_attack_recoil01',1190),(18599,57912,'kill_backpack_1h_sword_attack_recoil02',1190),(18600,57913,'kill_backpack_1h_sword_attack_recoil03',1190),(18601,57914,'kill_backpack_1h_sword_backup',1190),(18602,57915,'kill_backpack_1h_sword_death_blow',1190),(18603,57916,'kill_backpack_1h_sword_death_blow01',1190),(18604,57917,'kill_backpack_1h_sword_dodge_backhand',1190),(18605,57918,'kill_backpack_1h_sword_dodge_down',1190),(18606,57919,'kill_backpack_1h_sword_dodge_forehand',1190),(18607,57920,'kill_backpack_1h_sword_dodge_thrust',1190),(18608,57921,'kill_backpack_1h_sword_enter',1190),(18609,57922,'kill_backpack_1h_sword_exit',1190),(18610,57923,'kill_backpack_1h_sword_idle',1190),(18611,57924,'kill_backpack_1h_sword_ouch_backhand',1190),(18612,57925,'kill_backpack_1h_sword_ouch_down',1190),(18613,57926,'kill_backpack_1h_sword_ouch_forehand',1190),(18614,57927,'kill_backpack_1h_sword_ouch_thrust',1190),(18615,57928,'kill_backpack_1h_sword_parry_backhand',1190),(18616,57929,'kill_backpack_1h_sword_parry_down',1190),(18617,57930,'kill_backpack_1h_sword_parry_forehand',1190),(18618,57931,'kill_backpack_1h_sword_parry_thrust',1190),(18619,57932,'kill_backpack_1h_sword_strafe_left',1190),(18620,57933,'kill_backpack_1h_sword_strafe_right',1190),(18621,57934,'kill_backpack_1h_sword_walk',1190),(18622,57935,'kill_backpack_1h_throw_attack',1190),(18623,57936,'kill_backpack_1h_thrown_attack',1190),(18624,57937,'kill_backpack_1h_thrown_backup',1190),(18625,57938,'kill_backpack_1h_thrown_dodge_backhand',1190),(18626,57939,'kill_backpack_1h_thrown_dodge_down',1190),(18627,57940,'kill_backpack_1h_thrown_dodge_forehand',1190),(18628,57941,'kill_backpack_1h_thrown_dodge_thrust',1190),(18629,57942,'kill_backpack_1h_thrown_idle',1190),(18630,57943,'kill_backpack_1h_thrown_ouch_backhand',1190),(18631,57944,'kill_backpack_1h_thrown_ouch_down',1190),(18632,57945,'kill_backpack_1h_thrown_ouch_forehand',1190),(18633,57946,'kill_backpack_1h_thrown_ouch_thrust',1190),(18634,57947,'kill_backpack_1h_thrown_strafe_left',1190),(18635,57948,'kill_backpack_1h_thrown_strafe_right',1190),(18636,57949,'kill_backpack_1h_thrown_walk',1190),(18637,57950,'kill_backpack_1h_wand_attack',1190),(18638,57951,'kill_backpack_1h_wand_attack01',1190),(18639,57952,'kill_backpack_1h_wand_attack02',1190),(18640,57953,'kill_backpack_1h_wand_attack03',1190),(18641,57954,'kill_backpack_1h_wand_attack_recoil',1190),(18642,57955,'kill_backpack_1h_wand_attack_recoil01',1190),(18643,57956,'kill_backpack_1h_wand_attack_recoil02',1190),(18644,57957,'kill_backpack_1h_wand_attack_recoil03',1190),(18645,57958,'kill_backpack_1h_wand_backup',1190),(18646,57959,'kill_backpack_1h_wand_dodge_backhand',1190),(18647,57960,'kill_backpack_1h_wand_dodge_down',1190),(18648,57961,'kill_backpack_1h_wand_dodge_forehand',1190),(18649,57962,'kill_backpack_1h_wand_dodge_thrust',1190),(18650,57963,'kill_backpack_1h_wand_enter',1190),(18651,57964,'kill_backpack_1h_wand_exit',1190),(18652,57965,'kill_backpack_1h_wand_idle',1190),(18653,57966,'kill_backpack_1h_wand_ouch_backhand',1190),(18654,57967,'kill_backpack_1h_wand_ouch_down',1190),(18655,57968,'kill_backpack_1h_wand_ouch_forehand',1190),(18656,57969,'kill_backpack_1h_wand_ouch_thrust',1190),(18657,57970,'kill_backpack_1h_wand_parry_backhand',1190),(18658,57971,'kill_backpack_1h_wand_parry_down',1190),(18659,57972,'kill_backpack_1h_wand_parry_forehand',1190),(18660,57973,'kill_backpack_1h_wand_parry_thrust',1190),(18661,57974,'kill_backpack_1h_wand_strafe_left',1190),(18662,57975,'kill_backpack_1h_wand_strafe_right',1190),(18663,57976,'kill_backpack_1h_wand_walk',1190),(18664,57977,'kill_backpack_2h_sword_attack',1190),(18665,57978,'kill_backpack_2h_sword_attack01',1190),(18666,57979,'kill_backpack_2h_sword_attack02',1190),(18667,57980,'kill_backpack_2h_sword_attack03',1190),(18668,57981,'kill_backpack_2h_sword_attack_recoil',1190),(18669,57982,'kill_backpack_2h_sword_attack_recoil01',1190),(18670,57983,'kill_backpack_2h_sword_attack_recoil02',1190),(18671,57984,'kill_backpack_2h_sword_attack_recoil03',1190),(18672,57985,'kill_backpack_2h_sword_backup',1190),(18673,57986,'kill_backpack_2h_sword_charge_up',1190),(18674,57987,'kill_backpack_2h_sword_defensive_buff',1190),(18675,57988,'kill_backpack_2h_sword_dodge_backhand',1190),(18676,57989,'kill_backpack_2h_sword_dodge_down',1190),(18677,57990,'kill_backpack_2h_sword_dodge_forehand',1190),(18678,57991,'kill_backpack_2h_sword_dodge_thrust',1190),(18679,57992,'kill_backpack_2h_sword_enter',1190),(18680,57993,'kill_backpack_2h_sword_exit',1190),(18681,57994,'kill_backpack_2h_sword_feint',1190),(18682,57995,'kill_backpack_2h_sword_idle',1190),(18683,57996,'kill_backpack_2h_sword_kick',1190),(18684,57997,'kill_backpack_2h_sword_offensive_buff',1190),(18685,57998,'kill_backpack_2h_sword_ouch_backhand',1190),(18686,57999,'kill_backpack_2h_sword_ouch_down',1190),(18687,58000,'kill_backpack_2h_sword_ouch_forehand',1190),(18688,58001,'kill_backpack_2h_sword_ouch_thrust',1190),(18689,58002,'kill_backpack_2h_sword_parry_backhand',1190),(18690,58003,'kill_backpack_2h_sword_parry_down',1190),(18691,58004,'kill_backpack_2h_sword_parry_forehand',1190),(18692,58005,'kill_backpack_2h_sword_parry_thrust',1190),(18693,58006,'kill_backpack_2h_sword_strafe_left',1190),(18694,58007,'kill_backpack_2h_sword_strafe_right',1190),(18695,58008,'kill_backpack_2h_sword_super_buff',1190),(18696,58009,'kill_backpack_2h_sword_taunt',1190),(18697,58010,'kill_backpack_2h_sword_taunt_combat_art',1190),(18698,58011,'kill_backpack_2h_sword_walk',1190),(18699,58012,'kill_backpack_2h_sword_whirling_attack',1190),(18700,58013,'kill_backpack_2h_sword_wild_swing',1190),(18701,58014,'kill_backpack_alchemy_failure',1190),(18702,58015,'kill_backpack_alchemy_idle',1190),(18703,58016,'kill_backpack_alchemy_success',1190),(18704,58017,'kill_backpack_applaude',1190),(18705,58018,'kill_backpack_artificing_failure',1190),(18706,58019,'kill_backpack_artificing_idle',1190),(18707,58020,'kill_backpack_artificing_success',1190),(18708,58021,'kill_backpack_attack',1190),(18709,58022,'kill_backpack_bostaff_attack',1190),(18710,58023,'kill_backpack_bostaff_attack01',1190),(18711,58024,'kill_backpack_bostaff_attack02',1190),(18712,58025,'kill_backpack_bostaff_attack03',1190),(18713,58026,'kill_backpack_bostaff_attack_recoil',1190),(18714,58027,'kill_backpack_bostaff_attack_recoil01',1190),(18715,58028,'kill_backpack_bostaff_attack_recoil02',1190),(18716,58029,'kill_backpack_bostaff_attack_recoil03',1190),(18717,58030,'kill_backpack_bostaff_backup',1190),(18718,58031,'kill_backpack_bostaff_charge_up',1190),(18719,58032,'kill_backpack_bostaff_defensive_buff',1190),(18720,58033,'kill_backpack_bostaff_dodge_backhand',1190),(18721,58034,'kill_backpack_bostaff_dodge_down',1190),(18722,58035,'kill_backpack_bostaff_dodge_forehand',1190),(18723,58036,'kill_backpack_bostaff_dodge_thrust',1190),(18724,58037,'kill_backpack_bostaff_enter',1190),(18725,58038,'kill_backpack_bostaff_exit',1190),(18726,58039,'kill_backpack_bostaff_feint',1190),(18727,58040,'kill_backpack_bostaff_idle',1190),(18728,58041,'kill_backpack_bostaff_kick',1190),(18729,58042,'kill_backpack_bostaff_knockdowntoknees',1190),(18730,58043,'kill_backpack_bostaff_knockedtoback',1190),(18731,58044,'kill_backpack_bostaff_knockedtoback_getup',1190),(18732,58045,'kill_backpack_bostaff_offensive_buff',1190),(18733,58046,'kill_backpack_bostaff_ouch_backhand',1190),(18734,58047,'kill_backpack_bostaff_ouch_down',1190),(18735,58048,'kill_backpack_bostaff_ouch_forehand',1190),(18736,58049,'kill_backpack_bostaff_ouch_thrust',1190),(18737,58050,'kill_backpack_bostaff_parry_backhand',1190),(18738,58051,'kill_backpack_bostaff_parry_down',1190),(18739,58052,'kill_backpack_bostaff_parry_forehand',1190),(18740,58053,'kill_backpack_bostaff_parry_thrust',1190),(18741,58054,'kill_backpack_bostaff_strafe_left',1190),(18742,58055,'kill_backpack_bostaff_strafe_right',1190),(18743,58056,'kill_backpack_bostaff_super_buff',1190),(18744,58057,'kill_backpack_bostaff_taunt_combat_art',1190),(18745,58058,'kill_backpack_bostaff_walk',1190),(18746,58059,'kill_backpack_bostaff_whirling_attack',1190),(18747,58060,'kill_backpack_bostaff_wild_swing',1190),(18748,58061,'kill_backpack_bow_aim_down',1190),(18749,58062,'kill_backpack_bow_aim_up',1190),(18750,58063,'kill_backpack_bow_attack',1190),(18751,58064,'kill_backpack_bow_attack_2x',1190),(18752,58065,'kill_backpack_bow_backup',1190),(18753,58066,'kill_backpack_bow_dodge_backhand',1190),(18754,58067,'kill_backpack_bow_dodge_down',1190),(18755,58068,'kill_backpack_bow_dodge_forehand',1190),(18756,58069,'kill_backpack_bow_dodge_thrust',1190),(18757,58070,'kill_backpack_bow_enter',1190),(18758,58071,'kill_backpack_bow_exit',1190),(18759,58072,'kill_backpack_bow_idle',1190),(18760,58073,'kill_backpack_bow_knockdowntoknees',1190),(18761,58074,'kill_backpack_bow_knockedtoback',1190),(18762,58075,'kill_backpack_bow_knockedtoback_getup',1190),(18763,58076,'kill_backpack_bow_ouch_backhand',1190),(18764,58077,'kill_backpack_bow_ouch_down',1190),(18765,58078,'kill_backpack_bow_ouch_forehand',1190),(18766,58079,'kill_backpack_bow_ouch_thrust',1190),(18767,58080,'kill_backpack_bow_strafe_left',1190),(18768,58081,'kill_backpack_bow_strafe_right',1190),(18769,58082,'kill_backpack_bow_walk',1190),(18770,58083,'kill_backpack_cast_aoe_beneficial_end',1190),(18771,58084,'kill_backpack_cast_aoe_beneficial_loop',1190),(18772,58085,'kill_backpack_cast_aoe_beneficial_start',1190),(18773,58086,'kill_backpack_charge',1190),(18774,58087,'kill_backpack_charge_up',1190),(18775,58088,'kill_backpack_chop_ground_digging',1190),(18776,58089,'kill_backpack_chop_ground_success',1190),(18777,58090,'kill_backpack_climbing_backup',1190),(18778,58091,'kill_backpack_climbing_enter_down',1190),(18779,58092,'kill_backpack_climbing_enter_down_root',1190),(18780,58093,'kill_backpack_climbing_exit_up',1190),(18781,58094,'kill_backpack_climbing_exit_up_root',1190),(18782,58095,'kill_backpack_climbing_idle',1190),(18783,58096,'kill_backpack_climbing_idle01',1190),(18784,58097,'kill_backpack_climbing_ouch',1190),(18785,58098,'kill_backpack_climbing_strafe_left',1190),(18786,58099,'kill_backpack_climbing_strafe_right',1190),(18787,58100,'kill_backpack_climbing_walk',1190),(18788,58101,'kill_backpack_combat_backup_run',1190),(18789,58102,'kill_backpack_combat_run',1190),(18790,58103,'kill_backpack_combat_strafe_left_run',1190),(18791,58104,'kill_backpack_combat_strafe_right_run',1190),(18792,58105,'kill_backpack_cooking_failure',1190),(18793,58106,'kill_backpack_cooking_idle',1190),(18794,58107,'kill_backpack_cooking_success',1190),(18795,58108,'kill_backpack_crouch_backup',1190),(18796,58109,'kill_backpack_crouch_enter',1190),(18797,58110,'kill_backpack_crouch_exit',1190),(18798,58111,'kill_backpack_crouch_idle',1190),(18799,58112,'kill_backpack_crouch_strafe_left',1190),(18800,58113,'kill_backpack_crouch_strafe_right',1190),(18801,58114,'kill_backpack_crouch_turn_left',1190),(18802,58115,'kill_backpack_crouch_turn_right',1190),(18803,58116,'kill_backpack_crouch_walk',1190),(18804,58117,'kill_backpack_cry',1190),(18805,58118,'kill_backpack_dance',1190),(18806,58119,'kill_backpack_dead',1190),(18807,58120,'kill_backpack_dead_enter',1190),(18808,58121,'kill_backpack_defensive_buff',1190),(18809,58122,'kill_backpack_drink_chug',1190),(18810,58123,'kill_backpack_drinking_failure',1190),(18811,58124,'kill_backpack_drinking_idle',1190),(18812,58125,'kill_backpack_drinking_success',1190),(18813,58126,'kill_backpack_dual_wield_attack',1190),(18814,58127,'kill_backpack_dual_wield_attack01',1190),(18815,58128,'kill_backpack_dual_wield_attack02',1190),(18816,58129,'kill_backpack_dual_wield_attack03',1190),(18817,58130,'kill_backpack_dual_wield_attack_recoil',1190),(18818,58131,'kill_backpack_dual_wield_attack_recoil01',1190),(18819,58132,'kill_backpack_dual_wield_attack_recoil02',1190),(18820,58133,'kill_backpack_dual_wield_attack_recoil03',1190),(18821,58134,'kill_backpack_dual_wield_backup',1190),(18822,58135,'kill_backpack_dual_wield_defensive_buff',1190),(18823,58136,'kill_backpack_dual_wield_dodge_backhand',1190),(18824,58137,'kill_backpack_dual_wield_dodge_down',1190),(18825,58138,'kill_backpack_dual_wield_dodge_forehand',1190),(18826,58139,'kill_backpack_dual_wield_dodge_thrust',1190),(18827,58140,'kill_backpack_dual_wield_enter',1190),(18828,58141,'kill_backpack_dual_wield_exit',1190),(18829,58142,'kill_backpack_dual_wield_feint',1190),(18830,58143,'kill_backpack_dual_wield_idle',1190),(18831,58144,'kill_backpack_dual_wield_kick',1190),(18832,58145,'kill_backpack_dual_wield_knockdowntoknees',1190),(18833,58146,'kill_backpack_dual_wield_knockedtoback',1190),(18834,58147,'kill_backpack_dual_wield_knockedtoback_getup',1190),(18835,58148,'kill_backpack_dual_wield_offensive_buff',1190),(18836,58149,'kill_backpack_dual_wield_ouch_backhand',1190),(18837,58150,'kill_backpack_dual_wield_ouch_down',1190),(18838,58151,'kill_backpack_dual_wield_ouch_forehand',1190),(18839,58152,'kill_backpack_dual_wield_ouch_thrust',1190),(18840,58153,'kill_backpack_dual_wield_parry_backhand',1190),(18841,58154,'kill_backpack_dual_wield_parry_down',1190),(18842,58155,'kill_backpack_dual_wield_parry_forehand',1190),(18843,58156,'kill_backpack_dual_wield_parry_thrust',1190),(18844,58157,'kill_backpack_dual_wield_strafe_left',1190),(18845,58158,'kill_backpack_dual_wield_strafe_right',1190),(18846,58159,'kill_backpack_dual_wield_super_buff',1190),(18847,58160,'kill_backpack_dual_wield_taunt_combat_art',1190),(18848,58161,'kill_backpack_dual_wield_walk',1190),(18849,58162,'kill_backpack_dual_wield_whirling_attack',1190),(18850,58163,'kill_backpack_dual_wield_wild_swing',1190),(18851,58164,'kill_backpack_fall_moving',1190),(18852,58165,'kill_backpack_feint',1190),(18853,58166,'kill_backpack_fishing_cast',1190),(18854,58167,'kill_backpack_fishing_fight',1190),(18855,58168,'kill_backpack_fishing_reel_in',1190),(18856,58169,'kill_backpack_flirt',1190),(18857,58170,'kill_backpack_forestry_chopping',1190),(18858,58171,'kill_backpack_forestry_success',1190),(18859,58172,'kill_backpack_gag',1190),(18860,58173,'kill_backpack_gathering_end',1190),(18861,58174,'kill_backpack_gathering_loop',1190),(18862,58175,'kill_backpack_gathering_search',1190),(18863,58176,'kill_backpack_gathering_start',1190),(18864,58177,'kill_backpack_gathering_success',1190),(18865,58178,'kill_backpack_ghost_idle',1190),(18866,58179,'kill_backpack_giggle',1190),(18867,58180,'kill_backpack_glare',1190),(18868,58181,'kill_backpack_hearnoevil',1190),(18869,58182,'kill_backpack_heartattack',1190),(18870,58183,'kill_backpack_hover_idle',1190),(18871,58184,'kill_backpack_jump_moving',1190),(18872,58185,'kill_backpack_kick',1190),(18873,58186,'kill_backpack_knockdown_attack',1190),(18874,58187,'kill_backpack_knockdowntoknees',1190),(18875,58188,'kill_backpack_knockedtoback',1190),(18876,58189,'kill_backpack_knockedtoback_getup',1190),(18877,58190,'kill_backpack_knockedtoback_onbackidle',1190),(18878,58191,'kill_backpack_leatherworking_failure',1190),(18879,58192,'kill_backpack_leatherworking_idle',1190),(18880,58193,'kill_backpack_leatherworking_success',1190),(18881,58194,'kill_backpack_left_hand_fist',1190),(18882,58195,'kill_backpack_left_hand_relaxed',1190),(18883,58196,'kill_backpack_listen',1190),(18884,58197,'kill_backpack_long_fall_moving',1190),(18885,58198,'kill_backpack_metalworking_failure',1190),(18886,58199,'kill_backpack_metalworking_idle',1190),(18887,58200,'kill_backpack_metalworking_success',1190),(18888,58201,'kill_backpack_mining_digging',1190),(18889,58202,'kill_backpack_mining_success',1190),(18890,58203,'kill_backpack_monk_attack',1190),(18891,58204,'kill_backpack_monk_attack01',1190),(18892,58205,'kill_backpack_monk_attack02',1190),(18893,58206,'kill_backpack_monk_attack03',1190),(18894,58207,'kill_backpack_monk_attack_recoil',1190),(18895,58208,'kill_backpack_monk_attack_recoil01',1190),(18896,58209,'kill_backpack_monk_attack_recoil02',1190),(18897,58210,'kill_backpack_monk_attack_recoil03',1190),(18898,58211,'kill_backpack_monk_backup',1190),(18899,58212,'kill_backpack_monk_charge_up',1190),(18900,58213,'kill_backpack_monk_defensive_buff',1190),(18901,58214,'kill_backpack_monk_dodge_backhand',1190),(18902,58215,'kill_backpack_monk_dodge_down',1190),(18903,58216,'kill_backpack_monk_dodge_forehand',1190),(18904,58217,'kill_backpack_monk_dodge_thrust',1190),(18905,58218,'kill_backpack_monk_enter',1190),(18906,58219,'kill_backpack_monk_exit',1190),(18907,58220,'kill_backpack_monk_feint',1190),(18908,58221,'kill_backpack_monk_idle',1190),(18909,58222,'kill_backpack_monk_kick',1190),(18910,58223,'kill_backpack_monk_kick_flying',1190),(18911,58224,'kill_backpack_monk_kick_spin',1190),(18912,58225,'kill_backpack_monk_knockdowntoknees',1190),(18913,58226,'kill_backpack_monk_knockedtoback',1190),(18914,58227,'kill_backpack_monk_knockedtoback_getup',1190),(18915,58228,'kill_backpack_monk_offensive_buff',1190),(18916,58229,'kill_backpack_monk_offensive_buff_short',1190),(18917,58230,'kill_backpack_monk_ouch_backhand',1190),(18918,58231,'kill_backpack_monk_ouch_down',1190),(18919,58232,'kill_backpack_monk_ouch_forehand',1190),(18920,58233,'kill_backpack_monk_ouch_thrust',1190),(18921,58234,'kill_backpack_monk_parry_backhand',1190),(18922,58235,'kill_backpack_monk_parry_down',1190),(18923,58236,'kill_backpack_monk_parry_forehand',1190),(18924,58237,'kill_backpack_monk_parry_thrust',1190),(18925,58238,'kill_backpack_monk_strafe_left',1190),(18926,58239,'kill_backpack_monk_strafe_right',1190),(18927,58240,'kill_backpack_monk_super_buff',1190),(18928,58241,'kill_backpack_monk_taunt_combat_art',1190),(18929,58242,'kill_backpack_monk_walk',1190),(18930,58243,'kill_backpack_monk_whirling_attack',1190),(18931,58244,'kill_backpack_monk_wild_swing',1190),(18932,58245,'kill_backpack_offensive_buff',1190),(18933,58246,'kill_backpack_ouch',1190),(18934,58247,'kill_backpack_pike_attack',1190),(18935,58248,'kill_backpack_pike_attack01',1190),(18936,58249,'kill_backpack_pike_attack02',1190),(18937,58250,'kill_backpack_pike_attack03',1190),(18938,58251,'kill_backpack_pike_attack_recoil',1190),(18939,58252,'kill_backpack_pike_attack_recoil01',1190),(18940,58253,'kill_backpack_pike_attack_recoil02',1190),(18941,58254,'kill_backpack_pike_attack_recoil03',1190),(18942,58255,'kill_backpack_pike_backup',1190),(18943,58256,'kill_backpack_pike_charge_up',1190),(18944,58257,'kill_backpack_pike_death_blow',1190),(18945,58258,'kill_backpack_pike_defensive_buff',1190),(18946,58259,'kill_backpack_pike_dodge_backhand',1190),(18947,58260,'kill_backpack_pike_dodge_down',1190),(18948,58261,'kill_backpack_pike_dodge_forehand',1190),(18949,58262,'kill_backpack_pike_dodge_thrust',1190),(18950,58263,'kill_backpack_pike_enter',1190),(18951,58264,'kill_backpack_pike_exit',1190),(18952,58265,'kill_backpack_pike_feint',1190),(18953,58266,'kill_backpack_pike_idle',1190),(18954,58267,'kill_backpack_pike_kick',1190),(18955,58268,'kill_backpack_pike_knockdowntoknees',1190),(18956,58269,'kill_backpack_pike_knockedtoback',1190),(18957,58270,'kill_backpack_pike_knockedtoback_getup',1190),(18958,58271,'kill_backpack_pike_offensive_buff',1190),(18959,58272,'kill_backpack_pike_ouch_backhand',1190),(18960,58273,'kill_backpack_pike_ouch_down',1190),(18961,58274,'kill_backpack_pike_ouch_forehand',1190),(18962,58275,'kill_backpack_pike_ouch_thrust',1190),(18963,58276,'kill_backpack_pike_parry_backhand',1190),(18964,58277,'kill_backpack_pike_parry_down',1190),(18965,58278,'kill_backpack_pike_parry_forehand',1190),(18966,58279,'kill_backpack_pike_parry_thrust',1190),(18967,58280,'kill_backpack_pike_strafe_left',1190),(18968,58281,'kill_backpack_pike_strafe_right',1190),(18969,58282,'kill_backpack_pike_super_buff',1190),(18970,58283,'kill_backpack_pike_taunt',1190),(18971,58284,'kill_backpack_pike_walk',1190),(18972,58285,'kill_backpack_pike_whirling_attack',1190),(18973,58286,'kill_backpack_pike_wild_swing',1190),(18974,58287,'kill_backpack_ponder',1190),(18975,58288,'kill_backpack_pugilist_attack',1190),(18976,58289,'kill_backpack_pugilist_attack01',1190),(18977,58290,'kill_backpack_pugilist_attack02',1190),(18978,58291,'kill_backpack_pugilist_attack03',1190),(18979,58292,'kill_backpack_pugilist_attack_recoil',1190),(18980,58293,'kill_backpack_pugilist_attack_recoil01',1190),(18981,58294,'kill_backpack_pugilist_attack_recoil02',1190),(18982,58295,'kill_backpack_pugilist_attack_recoil03',1190),(18983,58296,'kill_backpack_pugilist_backup',1190),(18984,58297,'kill_backpack_pugilist_charge_up',1190),(18985,58298,'kill_backpack_pugilist_defensive_buff',1190),(18986,58299,'kill_backpack_pugilist_dodge_backhand',1190),(18987,58300,'kill_backpack_pugilist_dodge_down',1190),(18988,58301,'kill_backpack_pugilist_dodge_forehand',1190),(18989,58302,'kill_backpack_pugilist_dodge_thrust',1190),(18990,58303,'kill_backpack_pugilist_enter',1190),(18991,58304,'kill_backpack_pugilist_exit',1190),(18992,58305,'kill_backpack_pugilist_feint',1190),(18993,58306,'kill_backpack_pugilist_idle',1190),(18994,58307,'kill_backpack_pugilist_kick',1190),(18995,58308,'kill_backpack_pugilist_knockdowntoknees',1190),(18996,58309,'kill_backpack_pugilist_knockedtoback',1190),(18997,58310,'kill_backpack_pugilist_knockedtoback_getup',1190),(18998,58311,'kill_backpack_pugilist_offensive_buff',1190),(18999,58312,'kill_backpack_pugilist_ouch_backhand',1190),(19000,58313,'kill_backpack_pugilist_ouch_down',1190),(19001,58314,'kill_backpack_pugilist_ouch_forehand',1190),(19002,58315,'kill_backpack_pugilist_ouch_thrust',1190),(19003,58316,'kill_backpack_pugilist_parry_backhand',1190),(19004,58317,'kill_backpack_pugilist_parry_down',1190),(19005,58318,'kill_backpack_pugilist_parry_forehand',1190),(19006,58319,'kill_backpack_pugilist_parry_thrust',1190),(19007,58320,'kill_backpack_pugilist_strafe_left',1190),(19008,58321,'kill_backpack_pugilist_strafe_right',1190),(19009,58322,'kill_backpack_pugilist_super_buff',1190),(19010,58323,'kill_backpack_pugilist_taunt',1190),(19011,58324,'kill_backpack_pugilist_walk',1190),(19012,58325,'kill_backpack_pugilist_whirling_attack',1190),(19013,58326,'kill_backpack_pugilist_wild_swing',1190),(19014,58327,'kill_backpack_resurrect',1190),(19015,58328,'kill_backpack_right_hand_fist',1190),(19016,58329,'kill_backpack_right_hand_relaxed',1190),(19017,58330,'kill_backpack_rude',1190),(19018,58331,'kill_backpack_sad',1190),(19019,58332,'kill_backpack_salute_freeport',1190),(19020,58333,'kill_backpack_scheme',1190),(19021,58334,'kill_backpack_scratch',1190),(19022,58335,'kill_backpack_scribing_idle',1190),(19023,58336,'kill_backpack_seenoevil',1190),(19024,58337,'kill_backpack_shame',1190),(19025,58338,'kill_backpack_shield_block_backhand',1190),(19026,58339,'kill_backpack_shield_block_down',1190),(19027,58340,'kill_backpack_shield_block_forehand',1190),(19028,58341,'kill_backpack_shield_block_thrust',1190),(19029,58342,'kill_backpack_shield_shove',1190),(19030,58343,'kill_backpack_shiver',1190),(19031,58344,'kill_backpack_sit_drink',1190),(19032,58345,'kill_backpack_sit_enter',1190),(19033,58346,'kill_backpack_sit_exit',1190),(19034,58347,'kill_backpack_sit_idle',1190),(19035,58348,'kill_backpack_sneeze',1190),(19036,58349,'kill_backpack_sniff',1190),(19037,58350,'kill_backpack_speaknoevil',1190),(19038,58351,'kill_backpack_square',1190),(19039,58352,'kill_backpack_stinky',1190),(19040,58353,'kill_backpack_sulk',1190),(19041,58354,'kill_backpack_super_buff',1190),(19042,58355,'kill_backpack_swim_attack',1190),(19043,58356,'kill_backpack_swim_backup',1190),(19044,58357,'kill_backpack_swim_idle',1190),(19045,58358,'kill_backpack_swim_ouch',1190),(19046,58359,'kill_backpack_swim_walk',1190),(19047,58360,'kill_backpack_tail',1190),(19048,58361,'kill_backpack_tailoring_failure',1190),(19049,58362,'kill_backpack_tailoring_idle',1190),(19050,58363,'kill_backpack_tailoring_success',1190),(19051,58364,'kill_backpack_tapfoot',1190),(19052,58365,'kill_backpack_taunt_combat_art',1190),(19053,58366,'kill_backpack_threaten',1190),(19054,58367,'kill_backpack_untrained_attack',1190),(19055,58368,'kill_backpack_untrained_backup',1190),(19056,58369,'kill_backpack_untrained_dodge',1190),(19057,58370,'kill_backpack_untrained_dodge01',1190),(19058,58371,'kill_backpack_untrained_dodge02',1190),(19059,58372,'kill_backpack_untrained_idle',1190),(19060,58373,'kill_backpack_untrained_ouch',1190),(19061,58374,'kill_backpack_untrained_ouch01',1190),(19062,58375,'kill_backpack_untrained_parry',1190),(19063,58376,'kill_backpack_untrained_recoil',1190),(19064,58377,'kill_backpack_untrained_strafe_left',1190),(19065,58378,'kill_backpack_untrained_strafe_right',1190),(19066,58379,'kill_backpack_untrained_walk',1190),(19067,58380,'kill_backpack_whirling_attack',1190),(19068,58381,'kill_backpack_whistle',1190),(19069,58382,'kill_backpack_wild_swing',1190),(19070,58383,'kill_backpack_wild_swing_recoilmax',1190),(19071,58384,'kill_backpack_woodworking_failure',1190),(19072,58385,'kill_backpack_woodworking_idle',1190),(19073,58386,'kill_backpack_woodworking_success',1190),(19074,58387,'kill_backpack_worship_idle',1190),(19075,58388,'kill_backpack_yeah',1190),(19076,58391,'kill_attachment',1190),(19077,58392,'kill_cast_gather_flowers',1190),(19078,58398,'kill_jump_punch',1190),(19079,58399,'kill_result_flowers_spew',1190),(19080,58402,'kill_attack_spit',1190),(19081,58405,'kill_cast_rocky_uprising',1190),(19082,58408,'kill_flurry_kick',1190),(19083,58413,'kill_cast_raptor_claws',1190),(19084,58417,'kill_result_raptor_spit_p2p',1190),(19085,58418,'kill_2h_twirl',1190),(19086,58421,'kill__idle01',1190),(19087,58422,'kill__idle02',1190),(19088,58423,'kill_cast01_enter',1190),(19089,58424,'kill_cast01_exit',1190),(19090,58425,'kill_cast01_idle',1190),(19091,58426,'kill_cast02_enter',1190),(19092,58427,'kill_cast02_exit',1190),(19093,58428,'kill_cast02_idle',1190),(19094,58434,'kill_pike_twirl',1190),(19095,58453,'kill_sound_buff_02',1190),(19096,58456,'kill_attack_flame',1190),(19097,58461,'kill_injured_idle',1190),(19098,58481,'kill_snd_wing_flap',1190),(19099,58482,'kill_2h_cast_enter',1190),(19100,58483,'kill_2h_cast_exit',1190),(19101,58484,'kill_2h_cast_idle',1190),(19102,58496,'kill_snd_fs',1190),(19103,58497,'kill_snd_jump_whoosh',1190),(19104,58500,'kill_cast_belly_flop',1190),(19105,58503,'kill_cast_rocky_blast',1190),(19106,58506,'kill_draconian_injured_idle',1190),(19107,58507,'kill_draconian_search_enter',1190),(19108,58508,'kill_draconian_search_exit',1190),(19109,58509,'kill_draconian_search_idle',1190),(19110,58511,'kill_result_lumpy_spit_p2p',1190),(19111,58518,'kill_design_illusion_fail',1190),(19112,58520,'kill_knocktoknees_exit',1190),(19113,58527,'kill_golem_fx_tubes',1190),(19114,58528,'kill_golem_summon_fx',1190),(19115,58532,'kill_snd_dbg_spawn',1190),(19116,58533,'kill_snd_death',1190),(19117,58536,'kill_snd_fs_l',1190),(19118,58537,'kill_snd_fs_r',1190),(19119,58538,'kill_snd_jump',1190),(19120,58540,'kill_snd_offensive_buff',1190),(19121,58554,'kill_snd_whirl_attk',1190),(19122,58555,'kill_sound_cast',1190),(19123,58562,'kill_drakota_run_glide',1190),(19124,58565,'kill_ice_cube_trail_lf',1190),(19125,58566,'kill_ice_cube_trail_lr',1190),(19126,58567,'kill_ice_cube_trail_rf',1190),(19127,58568,'kill_ice_cube_trail_rr',1190),(19128,58573,'kill_ice_cube_scratch',1190),(19129,58576,'kill_snd_charge_up',1190),(19130,58577,'kill_snd_1h_sword_attack',1190),(19131,58578,'kill_snd_1h_sword_attack01',1190),(19132,58579,'kill_snd_1h_sword_attack02',1190),(19133,58580,'kill_snd_1h_sword_attack03',1190),(19134,58581,'kill_snd_1h_sword_enter',1190),(19135,58582,'kill_snd_1h_sword_exit',1190),(19136,58584,'kill_snd_cast02_yell',1190),(19137,58585,'kill_snd_converse02',1190),(19138,58586,'kill_snd_dual_wield_attack',1190),(19139,58587,'kill_snd_dual_wield_attack01',1190),(19140,58588,'kill_snd_dual_wield_attack02',1190),(19141,58589,'kill_snd_dual_wield_attack03',1190),(19142,58594,'kill_snd_idle_02',1190),(19143,58601,'kill_cast_foot_vine_stomp',1190),(19144,58604,'kill_cast_thorn_circle',1190),(19145,58605,'kill_cast_thorn_clap',1190),(19146,58609,'kill_land_enter',1190),(19147,58610,'kill_land_exit',1190),(19148,58611,'kill_result_wl_root_grow_trap',1190),(19149,58614,'kill_snd_bf',1190),(19150,58633,'kill_snd_whirling_attack',1190),(19151,58634,'kill_snd_wild_swing',1190),(19152,58641,'kill_cast_eat_snowball',1190),(19153,58642,'kill_cast_frog_eat',1190),(19154,58647,'kill_eaten_angler',1190),(19155,58649,'kill_intro',1190),(19156,58657,'kill_snd_ouch',1190),(19157,58682,'kill_splash_fx',1190),(19158,58689,'kill_angler_mount_idle03',1190),(19159,58694,'kill_design_obelisk_broken',1190),(19160,58695,'kill_design_obelisk_repair1',1190),(19161,58706,'kill_design_obelisk_complete',1190),(19162,58707,'kill_design_obelisk_fixed',1190),(19163,58708,'kill_design_obelisk_repair2',1190),(19164,58709,'kill_float',1190),(19165,58711,'kill_sacrifice',1190),(19166,58718,'kill_attack_dive',1190),(19167,58723,'kill_design_obelisk_repair3',1190),(19168,58724,'kill_design_obelisk_repair4',1190),(19169,58731,'kill_attack_hug',1190),(19170,58732,'kill_attack_roar',1190),(19171,58733,'kill_cast_obelisk_rock_summon',1190),(19172,58734,'kill_cast_obelisk_wisps_summon',1190),(19173,58771,'kill_wing_bolts_fx',1190),(19174,58780,'kill_cast_sacrifice_disperse',1190),(19175,58781,'kill_cast_sacrifice_stab',1190),(19176,58784,'kill_design_sky_chokidai_summon',1190),(19177,58785,'kill_design_sky_drake_summon',1190),(19178,58786,'kill_design_sky_plant_summon',1190),(19179,58787,'kill_design_sky_raptor_summon',1190),(19180,58794,'kill_cast_eye_blast',1190),(19181,58799,'kill_design_skyward_comm_beam',1190),(19182,58800,'kill_fly_hover',1190),(19183,58801,'kill_ground_blast_fx',1190),(19184,58827,'kill_sound_teleport_in',1190),(19185,58835,'kill_wing_buffet_fx',1190),(19186,58842,'kill_breath_attack_ice',1190),(19187,58843,'kill_breath_attack_necro',1190),(19188,58850,'kill_attack05',1190),(19189,58853,'kill_cast_shadow_appear',1190),(19190,58854,'kill_cast_teleport_down_fx',1190),(19191,58857,'kill_fly_enter_idle',1190),(19192,58859,'kill_result_banish_fx',1190),(19193,58860,'kill_result_cage_cube',1190),(19194,58871,'kill_dontuse_fly_enter_idle',1190),(19195,58878,'kill_attack_arm',1190),(19196,58879,'kill_cast_druid_light_beams',1190),(19197,58882,'kill_cast_storm_light_parting',1190),(19198,58883,'kill_cast_storm_rain_lightning',1190),(19199,58889,'kill_snd_attack',1190),(19200,58890,'kill_snd_attack01',1190),(19201,58891,'kill_snd_attack02',1190),(19202,58892,'kill_snd_attack03',1190),(19203,58893,'kill_snd_attack_dive',1190),(19204,58894,'kill_snd_attack_hug',1190),(19205,58895,'kill_snd_cast',1190),(19206,58896,'kill_snd_cast_1',1190),(19207,58897,'kill_snd_combat_enter',1190),(19208,58898,'kill_snd_combat_idle01',1190),(19209,58899,'kill_snd_dead_enter',1190),(19210,58900,'kill_snd_defensive_buff',1190),(19211,58905,'kill_snd_fs_mud_01',1190),(19212,58906,'kill_snd_fs_mud_02',1190),(19213,58908,'kill_snd_run',1190),(19214,58919,'kill_design_target_aoe_green',1190),(19215,58920,'kill_design_target_aoe_purple',1190),(19216,58927,'kill_aa_bar_heal',1190),(19217,58928,'kill_aa_blood_burst',1190),(19218,58929,'kill_aa_blood_lust',1190),(19219,58930,'kill_aa_bubble_shield',1190),(19220,58931,'kill_aa_bubble_shield_in',1190),(19221,58932,'kill_aa_cloud_blast',1190),(19222,58933,'kill_aa_cloud_buff_out',1190),(19223,58934,'kill_aa_cloud_ring_burst',1190),(19224,58935,'kill_aa_cold_blast',1190),(19225,58936,'kill_aa_cyclone',1190),(19226,58937,'kill_aa_dark_cyclone',1190),(19227,58938,'kill_aa_dark_ring_vanish',1190),(19228,58939,'kill_aa_divine_hit',1190),(19229,58940,'kill_aa_fire_column',1190),(19230,58941,'kill_aa_flurry_daggers',1190),(19231,58942,'kill_aa_forced_shader_burst',1190),(19232,58943,'kill_aa_glow_eyes',1190),(19233,58944,'kill_aa_hand_buff',1190),(19234,58945,'kill_aa_hand_cross_dark',1190),(19235,58946,'kill_aa_hand_dark_rings',1190),(19236,58947,'kill_aa_hand_flare',1190),(19237,58948,'kill_aa_hand_leaf',1190),(19238,58949,'kill_aa_hand_pattern',1190),(19239,58950,'kill_aa_hand_runes',1190),(19240,58951,'kill_aa_hand_sparkles',1190),(19241,58952,'kill_aa_hand_sparkles_dark',1190),(19242,58953,'kill_aa_hand_sparks',1190),(19243,58954,'kill_aa_hand_stars',1190),(19244,58955,'kill_aa_hand_stars_dark',1190),(19245,58956,'kill_aa_head_halo',1190),(19246,58957,'kill_aa_heal_hands_blast',1190),(19247,58958,'kill_aa_ice_comet',1190),(19248,58959,'kill_aa_ice_comet_shower',1190),(19249,58960,'kill_aa_light_ward',1190),(19250,58961,'kill_aa_lightning_bolt',1190),(19251,58962,'kill_aa_massive_hit',1190),(19252,58963,'kill_aa_music_beam_p2p',1190),(19253,58964,'kill_aa_plasma_hit',1190),(19254,58965,'kill_aa_poison_spore_p2p',1190),(19255,58966,'kill_aa_radiant_glow',1190),(19256,58967,'kill_aa_rune_buff_brawler',1190),(19257,58968,'kill_aa_rune_drop_base',1190),(19258,58969,'kill_aa_rune_forward',1190),(19259,58970,'kill_aa_rune_in_buff',1190),(19260,58971,'kill_aa_rune_rise_base',1190),(19261,58972,'kill_aa_rune_rise_buff',1190),(19262,58973,'kill_aa_shimmer_arrow_p2p',1190),(19263,58974,'kill_aa_snow_tempest',1190),(19264,58975,'kill_aa_sound_rings_head',1190),(19265,58976,'kill_aa_sparkle_trail_weapon_blend',1190),(19266,58977,'kill_aa_spirit_growing',1190),(19267,58978,'kill_aa_spirit_swirl_shield',1190),(19268,58979,'kill_aa_swirly_heal',1190),(19269,58984,'kill_gather_enter',1190),(19270,58985,'kill_gather_exit',1190),(19271,58986,'kill_gather_idle',1190),(19272,59019,'kill_tough_idle',1190),(19273,59020,'kill_tough_idle_enter',1190),(19274,59021,'kill_tough_idle_exit',1190),(19275,59028,'kill_cast_armament_buff',1190),(19276,59029,'kill_cast_ember_breath',1190),(19277,59036,'kill_cast_burrow_dust_fx',1190),(19278,59041,'kill_design_target_aoe_yellow',1190),(19279,59043,'kill_result_ember_fire_engulfed',1190),(19280,59044,'kill_result_explode',1190),(19281,59045,'kill_result_queen_bug_spit_p2p',1190),(19282,59048,'kill_snd_doz_attack',1190),(19283,59049,'kill_snd_doz_attack_01',1190),(19284,59050,'kill_snd_doz_attack_02',1190),(19285,59051,'kill_snd_doz_attack_03',1190),(19286,59052,'kill_snd_doz_cast',1190),(19287,59053,'kill_snd_doz_combat_enter',1190),(19288,59054,'kill_snd_doz_death',1190),(19289,59055,'kill_snd_doz_dodge',1190),(19290,59056,'kill_snd_doz_flyin_01',1190),(19291,59057,'kill_snd_doz_flyin_land',1190),(19292,59058,'kill_snd_doz_kick',1190),(19293,59059,'kill_snd_doz_knocktoknees',1190),(19294,59060,'kill_snd_doz_ouch',1190),(19295,59061,'kill_snd_doz_roar_01',1190),(19296,59062,'kill_snd_doz_shieldshove',1190),(19297,59063,'kill_snd_doz_whirl_attack',1190),(19298,59064,'kill_snd_doz_wildswing',1190),(19299,59071,'kill_cast_hand_fire_trails',1190),(19300,59074,'kill_cast_wing_blast',1190),(19301,59081,'kill_cast_pillar_spin',1190),(19302,59093,'kill_prestige_point_acquired',1190),(19303,59094,'kill_result_vaporize',1190),(19304,59103,'kill_cast_tail_fx',1190),(19305,59110,'kill__dodge_backhand',1190),(19306,59111,'kill__dodge_down',1190),(19307,59112,'kill__dodge_forehand',1190),(19308,59113,'kill__dodge_thrust',1190),(19309,59114,'kill__knockeddowntoknees',1190),(19310,59115,'kill__knockedtoback',1190),(19311,59116,'kill__knockedtoback_getup',1190),(19312,59117,'kill__knockedtoback_onbackidle',1190),(19313,59118,'kill__ouch',1190),(19314,59119,'kill__ouch_backhand',1190),(19315,59120,'kill__ouch_down',1190),(19316,59121,'kill__ouch_forehand',1190),(19317,59122,'kill__ouch_thrust',1190),(19318,59123,'kill_cast_magic_breath',1190),(19319,59124,'kill_cast_noxious_breath',1190),(19320,59126,'kill_cast_prestige_fx',1190),(19321,59133,'kill_cast_fire_blast',1190),(19322,59139,'kill_result_dark_vaporize',1190),(19323,59140,'kill_result_time_warp',1190),(19324,59151,'kill_gathering_tail_cloak',1190),(19325,59158,'kill_cast_belly_blast',1190),(19326,59159,'kill_cast_dark_shout',1190),(19327,59160,'kill_cast_debris',1190),(19328,59161,'kill_cast_fire_breath',1190),(19329,59164,'kill_cast_sonic_blast',1190),(19330,59165,'kill_ch',1190),(19331,59168,'kill_eyes rotate down',1190),(19332,59169,'kill_eyes rotate left',1190),(19333,59170,'kill_eyes rotate right',1190),(19334,59171,'kill_eyes rotate up',1190),(19335,59173,'kill_jaw rotate y max',1190),(19336,59174,'kill_jaw rotate y min',1190),(19337,59175,'kill_jaw rotate z max',1190),(19338,59176,'kill_jaw rotate z min',1190),(19339,59177,'kill_left blink',1190),(19340,59178,'kill_left brow down',1190),(19341,59179,'kill_left brow up',1190),(19342,59180,'kill_left eye wide',1190),(19343,59181,'kill_left frown',1190),(19344,59182,'kill_lower lip roll in',1190),(19345,59183,'kill_lower lip roll out',1190),(19346,59184,'kill_mbp',1190),(19347,59185,'kill_mid brows down',1190),(19348,59186,'kill_mid brows up',1190),(19349,59187,'kill_mouth down',1190),(19350,59188,'kill_mouth open',1190),(19351,59189,'kill_mouth up',1190),(19352,59190,'kill_normal fv',1190),(19353,59191,'kill_oo tight',1190),(19354,59192,'kill_right blink',1190),(19355,59193,'kill_right brow down',1190),(19356,59194,'kill_right brow up',1190),(19357,59195,'kill_right eye wide',1190),(19358,59196,'kill_right frown',1190),(19359,59197,'kill_scrunch left',1190),(19360,59198,'kill_scrunch right',1190),(19361,59200,'kill_smile left',1190),(19362,59201,'kill_smile right',1190),(19363,59232,'kill_upper lip left up',1190),(19364,59233,'kill_upper lip right up',1190),(19365,59234,'kill_upper lip roll in',1190),(19366,59235,'kill_upper lip roll out',1190),(19367,59242,'kill_base_rest',1190),(19368,59243,'kill_cast_flaming_wings',1190),(19369,59248,'kill_eyes_rotate_down',1190),(19370,59249,'kill_eyes_rotate_left',1190),(19371,59250,'kill_eyes_rotate_right',1190),(19372,59251,'kill_eyes_rotate_up',1190),(19373,59253,'kill_jaw_rotate_y_max',1190),(19374,59254,'kill_jaw_rotate_y_min',1190),(19375,59255,'kill_jaw_rotate_z_max',1190),(19376,59256,'kill_jaw_rotate_z_min',1190),(19377,59257,'kill_left_blink',1190),(19378,59258,'kill_left_brow_down',1190),(19379,59259,'kill_left_brow_up',1190),(19380,59260,'kill_left_eye_wide',1190),(19381,59261,'kill_left_frown',1190),(19382,59262,'kill_mid_brows_down',1190),(19383,59263,'kill_mid_brows_up',1190),(19384,59264,'kill_mouth_down',1190),(19385,59265,'kill_mouth_open',1190),(19386,59266,'kill_mouth_up',1190),(19387,59267,'kill_normalfv',1190),(19388,59268,'kill_oo_tight',1190),(19389,59269,'kill_right_blink',1190),(19390,59270,'kill_right_brow_down',1190),(19391,59271,'kill_right_brow_up',1190),(19392,59272,'kill_right_eye_wide',1190),(19393,59273,'kill_right_frown',1190),(19394,59274,'kill_scrunch_left',1190),(19395,59275,'kill_scrunch_right',1190),(19396,59277,'kill_smile_big_left',1190),(19397,59278,'kill_smile_big_right',1190),(19398,59309,'kill_upper_lip_left_up',1190),(19399,59310,'kill_upper_lip_right_up',1190),(19400,59325,'kill_snd_doz_big_whoosh',1190),(19401,59326,'kill_snd_doz_big_whoosh_02',1190),(19402,59333,'kill_aa_notes_blast',1190),(19403,59334,'kill_aa_stabbing_blades',1190),(19404,59348,'kill_snd_lumpy_1h_sword_attack01',1190),(19405,59349,'kill_snd_lumpy_attack',1190),(19406,59350,'kill_snd_lumpy_attack_01',1190),(19407,59351,'kill_snd_lumpy_attack_02',1190),(19408,59352,'kill_snd_lumpy_attack_03',1190),(19409,59353,'kill_snd_lumpy_attack_bite',1190),(19410,59354,'kill_snd_lumpy_attack_bites',1190),(19411,59355,'kill_snd_lumpy_attack_breath',1190),(19412,59356,'kill_snd_lumpy_attack_shuffle',1190),(19413,59357,'kill_snd_lumpy_attack_slam',1190),(19414,59358,'kill_snd_lumpy_attack_tail',1190),(19415,59359,'kill_snd_lumpy_cast_1',1190),(19416,59360,'kill_snd_lumpy_combat_enter',1190),(19417,59361,'kill_snd_lumpy_dead_enter',1190),(19418,59362,'kill_snd_lumpy_roll',1190),(19419,59395,'kill_sound_attack_flame',1190),(19420,59396,'kill_sound_attack_tail',1190),(19421,59397,'kill_sound_bites',1190),(19422,59398,'kill_sound_defensive_buff',1190),(19423,59402,'kill_sound_idle_01',1190),(19424,59417,'kill_snd_attack04',1190),(19425,59422,'kill_snd_fs_mud',1190),(19426,59424,'kill_snd_mud_elem_attack',1190),(19427,59425,'kill_snd_mud_elem_attack01',1190),(19428,59426,'kill_snd_mud_elem_attack02',1190),(19429,59427,'kill_snd_mud_elem_chargeup',1190),(19430,59428,'kill_snd_mud_elem_dead_enter',1190),(19431,59429,'kill_snd_mud_elem_dodge_fore',1190),(19432,59430,'kill_snd_mud_elem_knocktoback',1190),(19433,59431,'kill_snd_mud_elem_knocktoknees',1190),(19434,59432,'kill_snd_mud_elem_ouch_thrust',1190),(19435,59433,'kill_snd_mud_elem_shield_shove',1190),(19436,59434,'kill_snd_mud_elem_whirl_attack',1190),(19437,59435,'kill_snd_mud_elem_wildswing',1190),(19438,59436,'kill_snd_mud_vox_attck_01',1190),(19439,59437,'kill_snd_mud_vox_attck_02',1190),(19440,59438,'kill_snd_mud_vox_attck_roar',1190),(19441,59439,'kill_snd_mud_vox_cast_1',1190),(19442,59440,'kill_snd_mud_vox_dead_enter',1190),(19443,59441,'kill_snd_mud_vox_def_buff',1190),(19444,59452,'kill_drakota_mount_fly_fall',1190),(19445,59455,'kill_prestige_point_sound',1190),(19446,59458,'kill_snd_cast4',1190),(19447,59459,'kill_snd_doz_spawn',1190),(19448,59478,'kill_snd_xygoz1_attack',1190),(19449,59479,'kill_snd_xygoz1_attack01',1190),(19450,59480,'kill_snd_xygoz1_attack02',1190),(19451,59481,'kill_snd_xygoz1_attack03',1190),(19452,59482,'kill_snd_xygoz1_attack_flame',1190),(19453,59483,'kill_snd_xygoz1_attack_tail',1190),(19454,59484,'kill_snd_xygoz1_dead_enter',1190),(19455,59485,'kill_snd_xygoz1_idle01',1190),(19456,59486,'kill_snd_xygoz1_knockedtoback',1190),(19457,59487,'kill_snd_xygoz1_superbuff',1190),(19458,59502,'kill_snd_drakota_vox_01',1190),(19459,59503,'kill_snd_drakota_vox_02',1190),(19460,59504,'kill_snd_drakota_vox_03',1190),(19461,59516,'kill_lower_lip_left_down',1190),(19462,59517,'kill_lower_lip_right_down',1190),(19463,59528,'kill_design_skyshrine_time_rift',1190),(19464,59535,'kill__left_eye_wide',1190),(19465,59536,'kill__right_eye_wide',1190),(19466,59580,'kill_yes',1190),(19467,59611,'kill_snd_vox_short',1190),(19468,59624,'kill_result_beetle_fireball_p2p',1190),(19469,59656,'kill_summon_01',1190),(19470,59657,'kill_1h_sword_cast',1190),(19471,59658,'kill_1h_sword_cast_enter',1190),(19472,59659,'kill_1h_sword_cast_exit',1190),(19473,59660,'kill_1h_sword_cast_idle',1190),(19474,59661,'kill_1h_sword_combat_art_buff',1190),(19475,59662,'kill_1h_sword_combat_enter',1190),(19476,59669,'kill_aa_lightning_blast_hit',1190),(19477,59675,'kill_knocked_to_back',1190),(19478,59676,'kill_knocked_to_back_getup',1190),(19479,59677,'kill_knocked_to_back_idle',1190),(19480,59688,'kill_design_groundportal_rift',1190),(19481,59699,'kill_design_corrupted',1190),(19482,59702,'kill_result_light_explode',1190),(19483,59713,'kill_design_qey_mage_tower_fire',1190),(19484,59714,'kill_design_qey_portal_from_hell',1190),(19485,59721,'kill_aa_time_warp',1190),(19486,59727,'kill_knockedtoknees_dead',1190),(19487,59729,'kill_persist_magic_damage',1190),(19488,59740,'kill_design_qey_fire_room',1190),(19489,59741,'kill_design_qey_wall_crack',1190),(19490,59744,'kill_read_book',1190),(19491,59788,'kill_summon_fx_long',1190),(19492,59789,'kill_summon_fx_short',1190),(19493,59790,'kill_time_stop_sound',1190),(19494,59797,'kill_aa_mental_damage',1190),(19495,59798,'kill_aa_mental_smite',1190),(19496,59799,'kill_aa_soothe',1190),(19497,59804,'kill_idlea',1190),(19498,59805,'kill_idlleb',1190),(19499,59839,'kill_winged_lion_backup',1190),(19500,59840,'kill_winged_lion_fall',1190),(19501,59841,'kill_winged_lion_fly_backup',1190),(19502,59842,'kill_winged_lion_fly_climb',1190),(19503,59843,'kill_winged_lion_fly_dive',1190),(19504,59844,'kill_winged_lion_fly_down',1190),(19505,59845,'kill_winged_lion_fly_glide',1190),(19506,59846,'kill_winged_lion_fly_glide_left',1190),(19507,59847,'kill_winged_lion_fly_glide_right',1190),(19508,59848,'kill_winged_lion_fly_idle',1190),(19509,59849,'kill_winged_lion_fly_run',1190),(19510,59850,'kill_winged_lion_fly_strafe_left',1190),(19511,59851,'kill_winged_lion_fly_strafe_right',1190),(19512,59852,'kill_winged_lion_fly_turn_left',1190),(19513,59853,'kill_winged_lion_fly_turn_right',1190),(19514,59854,'kill_winged_lion_fly_up',1190),(19515,59855,'kill_winged_lion_fly_walk',1190),(19516,59856,'kill_winged_lion_idle',1190),(19517,59857,'kill_winged_lion_idle01',1190),(19518,59858,'kill_winged_lion_jump',1190),(19519,59859,'kill_winged_lion_jump_substitute',1190),(19520,59860,'kill_winged_lion_land',1190),(19521,59861,'kill_winged_lion_long_fall',1190),(19522,59862,'kill_winged_lion_run',1190),(19523,59863,'kill_winged_lion_turn_left',1190),(19524,59864,'kill_winged_lion_turn_right',1190),(19525,59865,'kill_winged_lion_walk',1190),(19526,59876,'kill_idle_a',1190),(19527,59877,'kill_idle_b',1190),(19528,59878,'kill_idle_c',1190),(19529,59889,'kill_evil_bird_backup',1190),(19530,59890,'kill_evil_bird_fall',1190),(19531,59891,'kill_evil_bird_fly_backup',1190),(19532,59892,'kill_evil_bird_fly_climb',1190),(19533,59893,'kill_evil_bird_fly_dive',1190),(19534,59894,'kill_evil_bird_fly_down',1190),(19535,59895,'kill_evil_bird_fly_glide',1190),(19536,59896,'kill_evil_bird_fly_glide_left',1190),(19537,59897,'kill_evil_bird_fly_glide_right',1190),(19538,59898,'kill_evil_bird_fly_idle',1190),(19539,59899,'kill_evil_bird_fly_run',1190),(19540,59900,'kill_evil_bird_fly_strafe_left',1190),(19541,59901,'kill_evil_bird_fly_strafe_right',1190),(19542,59902,'kill_evil_bird_fly_turn_left',1190),(19543,59903,'kill_evil_bird_fly_turn_right',1190),(19544,59904,'kill_evil_bird_fly_up',1190),(19545,59905,'kill_evil_bird_fly_walk',1190),(19546,59906,'kill_evil_bird_idle',1190),(19547,59907,'kill_evil_bird_idle01',1190),(19548,59908,'kill_evil_bird_idle02',1190),(19549,59909,'kill_evil_bird_idle03',1190),(19550,59910,'kill_evil_bird_idle04',1190),(19551,59911,'kill_evil_bird_jump',1190),(19552,59912,'kill_evil_bird_jump_substitute',1190),(19553,59913,'kill_evil_bird_land',1190),(19554,59914,'kill_evil_bird_long_fall',1190),(19555,59915,'kill_evil_bird_run',1190),(19556,59916,'kill_evil_bird_turn_left',1190),(19557,59917,'kill_evil_bird_turn_right',1190),(19558,59918,'kill_evil_bird_walk',1190),(19559,59920,'kill_lion_winged_backup',1190),(19560,59921,'kill_lion_winged_fly_backup',1190),(19561,59922,'kill_lion_winged_fly_idle',1190),(19562,59923,'kill_lion_winged_fly_run',1190),(19563,59924,'kill_lion_winged_fly_strafe_left',1190),(19564,59925,'kill_lion_winged_fly_strafe_right',1190),(19565,59926,'kill_lion_winged_fly_turn_left',1190),(19566,59927,'kill_lion_winged_fly_turn_right',1190),(19567,59928,'kill_lion_winged_fly_walk',1190),(19568,59929,'kill_lion_winged_idle01',1190),(19569,59930,'kill_lion_winged_jump',1190),(19570,59931,'kill_lion_winged_jump_substitute',1190),(19571,59932,'kill_lion_winged_run',1190),(19572,59933,'kill_lion_winged_turn_left',1190),(19573,59934,'kill_lion_winged_turn_right',1190),(19574,59935,'kill_lion_winged_walk',1190),(19575,59946,'kill_dance_a',1190),(19576,59947,'kill_dance_base',1190),(19577,59954,'kill_aa_rune_blur_circular',1190),(19578,59960,'kill_knockdowntoknees_enter',1190),(19579,59961,'kill_knockdowntoknees_exit',1190),(19580,59962,'kill_knockdowntoknees_idle',1190),(19581,59969,'kill_aa_earth_summon',1190),(19582,59970,'kill_aa_summon_minion',1190),(19583,59977,'kill_aa_rune_chain_swirl',1190),(19584,59978,'kill_aa_spirit_heal',1190),(19585,59991,'kill_scream01',1190),(19586,60012,'kill_soul_idle',1190),(19587,60013,'kill_soul_suck_fx',1190),(19588,60014,'kill_soulsuck_enter',1190),(19589,60015,'kill_soulsuck_idle',1190),(19590,60022,'kill_bg_achievement_acquired',1190),(19591,60027,'kill_design_cloudy_dream',1190),(19592,60028,'kill_design_kerafyrm_barrier',1190),(19593,60031,'kill_result_cloudy_dream',1190),(19594,60063,'kill_winged_lion_fly_fall',1190),(19595,60070,'kill_aa_result_leash',1190),(19596,60083,'kill_result_sullon_shadow_curse',1190),(19597,60094,'kill_evil_bird_idle_egg',1190),(19598,60107,'kill_result_blood_craze',1190),(19599,60108,'kill_result_blood_craze_p2p',1190),(19600,60109,'kill_result_blood_wash',1190),(19601,60110,'kill_result_extract_will_p2p',1190),(19602,60123,'kill_result_idol_corruption_p2p',1190),(19603,60134,'kill_design_damage_level1',1190),(19604,60135,'kill_design_damage_level2',1190),(19605,60136,'kill_design_damage_level3',1190),(19606,60137,'kill_design_damage_level4',1190),(19607,60138,'kill_design_damage_level5',1190),(19608,60141,'kill_result_forced_shader_burnt',1190),(19609,60152,'kill_fly_dead',1190),(19610,60159,'kill_attack06',1190),(19611,60163,'kill_crying',1190),(19612,60165,'kill_giggling',1190),(19613,60172,'kill_attack_breath_snd',1190),(19614,60173,'kill_breath_blast_barrier',1190),(19615,60178,'kill_design_kerafyrm_barrier_big',1190),(19616,60179,'kill_design_kerafyrm_barrier_fight',1190),(19617,60180,'kill_design_kerafyrm_barrier_small',1190),(19618,60181,'kill_flames_backlash_snd',1190),(19619,60184,'kill_ouch01_snd',1190),(19620,60185,'kill_ouch02_snd',1190),(19621,60215,'kill_sound_ulthork_awake',1190),(19622,60216,'kill_sound_ulthork_combat_enter',1190),(19623,60217,'kill_sound_ulthork_exhale',1190),(19624,60218,'kill_sound_ulthork_grunt',1190),(19625,60219,'kill_sound_ulthork_idle',1190),(19626,60220,'kill_sound_ulthork_run',1190),(19627,60221,'kill_sound_ulthork_run01',1190),(19628,60222,'kill_sound_ulthork_scratch01',1190),(19629,60223,'kill_sound_ulthork_scratch02',1190),(19630,60224,'kill_sound_ulthork_snore',1190),(19631,60225,'kill_sound_ulthork_walk',1190),(19632,60226,'kill_sound_ulthork_walk01',1190),(19633,60237,'kill_frogdance',1190),(19634,60240,'kill_rock_fx',1190),(19635,60253,'kill_result_compass_hover',1190),(19636,60260,'kill_arasai_evil_skull_swirls',1190),(19637,60265,'kill_dark_elf_splash_mist',1190),(19638,60266,'kill_erudite_book_hover_runes',1190),(19639,60267,'kill_freeblood_skull_swirls_mesh',1190),(19640,60268,'kill_gnome_hands_trail_clockwork_blast',1190),(19641,60269,'kill_halfelf_compass_hover',1190),(19642,60270,'kill_human_water_dripping_wake',1190),(19643,60271,'kill_iksar_water_forced_shader_splash',1190),(19644,60273,'kill_kerra_flea_infestation_trail',1190),(19645,60275,'kill_ogre_fly_swarm_trail',1190),(19646,60276,'kill_ratonga_forced_shader_bertox',1190),(19647,60277,'kill_sarnak_firestrips_trail',1190),(19648,60309,'kill_troll_poison_spirits_gather',1190),(19649,60320,'kill_dwarf_rift_crack_dig',1190),(19650,60321,'kill_fae_fireflies_trail',1190),(19651,60322,'kill_froglok_godly_light_sparkles',1190),(19652,60329,'kill_attack_fistslam',1190),(19653,60330,'kill_attack_groundroar',1190),(19654,60331,'kill_attack_rage',1190),(19655,60334,'kill_combat_idle03',1190),(19656,60337,'kill_halfling_hands_cards_coins_trail',1190),(19657,60338,'kill_highelf_radiant_sparkles',1190),(19658,60341,'kill_powerroar',1190),(19659,60342,'kill_powerslam',1190),(19660,60374,'kill_targeted_left',1190),(19661,60375,'kill_targeted_right',1190),(19662,60376,'kill_transition_left',1190),(19663,60377,'kill_woodelf_leafy_glow_shader',1190),(19664,60384,'kill_barbarian_snow_ice_trail',1190),(19665,60389,'kill_erudite_asteroid_belt',1190),(19666,60390,'kill_freeblood_bat_swirls_mesh',1190),(19667,60391,'kill_gnome_clockwork_gears_blast',1190),(19668,60392,'kill_human_claymore_orbit_trail',1190),(19669,60394,'kill_kerra_spirit_guide_mesh',1190),(19670,60396,'kill_portal_jump',1190),(19671,60397,'kill_portal_stomp',1190),(19672,60398,'kill_ratonga_brain_storm_text',1190),(19673,60430,'kill_transition_back',1190),(19674,60431,'kill_transition_right',1190),(19675,60440,'kill_cast_skull_head_blast',1190),(19676,60443,'kill_design_dark_portal',1190),(19677,60444,'kill_design_light_portal',1190),(19678,60447,'kill_result_blood_dark',1190),(19679,60454,'kill_snd_land',1190),(19680,60469,'kill_snd_winged_lion_idle_01',1190),(19681,60470,'kill_snd_winged_lion_jump_sub',1190),(19682,60472,'kill_sound_evil_bird_jump_sub',1190),(19683,60473,'kill_sound_evil_bird_peck',1190),(19684,60474,'kill_sound_evil_bird_scratch',1190),(19685,60475,'kill_sound_evil_bird_vox_idle03',1190),(19686,60482,'kill_attack_arms',1190),(19687,60483,'kill_attack_jumpslam',1190),(19688,60484,'kill_cast_illusionary_charge_up',1190),(19689,60485,'kill_cast_illusionary_emanation',1190),(19690,60491,'kill_lose_weapon',1190),(19691,60493,'kill_result_floating_chain_root',1190),(19692,60494,'kill_result_illusionary_lights',1190),(19693,60526,'kill_transition_back_extract',1190),(19694,60527,'kill_transition_left_extract',1190),(19695,60528,'kill_transition_right_extract',1190),(19696,60539,'kill_dance_short',1190),(19697,60571,'kill_sound_ulthork_charge_up',1190),(19698,60572,'kill_sound_ulthork_fs',1190),(19699,60573,'kill_sound_ulthork_idle_01',1190),(19700,60574,'kill_sound_ulthork_idle_02',1190),(19701,60575,'kill_sound_ulthork_shield_shove',1190),(19702,60576,'kill_sound_ulthork_whirl_attack_whsh',1190),(19703,60588,'kill_mace_blast',1190),(19704,60590,'kill_rocky_trail',1190),(19705,60591,'kill_rumble_shake',1190),(19706,60599,'kill_snd_peck',1190),(19707,60624,'kill_transition_back01_extract',1190),(19708,60625,'kill_victory',1190),(19709,60636,'kill_fear_wave',1190),(19710,60653,'kill_snd_tbird_pet_angry',1190),(19711,60654,'kill_snd_tbird_pet_attack01',1190),(19712,60655,'kill_snd_tbird_pet_happy',1190),(19713,60656,'kill_snd_tbird_pet_idle01',1190),(19714,60657,'kill_snd_tbird_pet_idle02',1190),(19715,60658,'kill_snd_tbird_pet_idle03',1190),(19716,60659,'kill_snd_tbird_pet_trick',1190),(19717,60668,'kill_cast_toxic_gathering',1190),(19718,60669,'kill_cast_toxic_rain',1190),(19719,60672,'kill_hand_blast',1190),(19720,60679,'kill_cast_acid_rain',1190),(19721,60690,'kill_design_circle_warning_zone',1190),(19722,60691,'kill_design_half_circle_warning_zone',1190),(19723,60692,'kill_design_oval_warning_zone',1190),(19724,60693,'kill_design_third_circle_warning_zone',1190),(19725,60700,'kill_beckon_enter',1190),(19726,60701,'kill_beckon_exit',1190),(19727,60708,'kill_aa_double_pyramid',1190),(19728,60715,'kill_aa_water_summon',1190),(19729,60722,'kill_aa_ooze_summon',1190),(19730,60723,'kill_aa_skull_summon',1190),(19731,60728,'kill_idle01temp',1190),(19732,60730,'kill_jaw_rotate_max',1190),(19733,60733,'kill_smile_left',1190),(19734,60734,'kill_smile_right',1190),(19735,60745,'kill_design_fire_doorway',1190),(19736,60746,'kill_design_icy_doorway',1190),(19737,60757,'kill_dead02',1190),(19738,60758,'kill_design_fire_pillar',1190),(19739,60759,'kill_design_green_light_beam',1190),(19740,60760,'kill_design_ice_pillar',1190),(19741,60761,'kill_design_purple_light_beam',1190),(19742,60762,'kill_design_red_light_beam',1190),(19743,60763,'kill_design_yellow_light_beam',1190),(19744,60766,'kill_sc_win_chest_fx',1190),(19745,60779,'kill_result_fire_beam_p2p',1190),(19746,60780,'kill_result_ice_beam_p2p',1190),(19747,60793,'kill_piledriver',1190),(19748,60802,'kill_chargeup',1190),(19749,60803,'kill_chargeup_enter',1190),(19750,60804,'kill_chargeup_exit',1190),(19751,60805,'kill_chargeup_idle',1190),(19752,60808,'kill_design_lightning_pillar_blue',1190),(19753,60809,'kill_design_lightning_pillar_red',1190),(19754,60810,'kill_design_st_boss_lightning_blue',1190),(19755,60811,'kill_design_st_boss_lightning_red',1190),(19756,60818,'kill_cast03',1190),(19757,60819,'kill_cast04',1190),(19758,60822,'kill_cast_squid_loop',1190),(19759,60825,'kill_design_orange_light_beam',1190),(19760,60826,'kill_design_st_boss_platform_charged_blue',1190),(19761,60827,'kill_design_st_boss_platform_charged_red',1190),(19762,60834,'kill_blue_crystal_dead',1190),(19763,60835,'kill_blue_crystal_on',1190),(19764,60840,'kill_design_urn_shatter',1190),(19765,60843,'kill_red_crystal_dead',1190),(19766,60844,'kill_red_crystal_on',1190),(19767,60845,'kill_result_lightning_floor_blast_blue',1190),(19768,60846,'kill_result_lightning_floor_blast_red',1190),(19769,60857,'kill_dead01',1190),(19770,60858,'kill_design_lightning_pillar_purple',1190),(19771,60859,'kill_design_st_boss_lightning_purple',1190),(19772,60860,'kill_design_st_boss_platform_charged_purple',1190),(19773,60863,'kill_result_damaged',1190),(19774,60864,'kill_result_glass_blast',1190),(19775,60865,'kill_result_lightning_floor_blast_purple',1190),(19776,60866,'kill_result_radiant_glow_no_mesh',1190),(19777,60867,'kill_result_tether_buff_p2p',1190),(19778,60874,'kill_cast_blue_buff',1190),(19779,60877,'kill_cast_red_buff',1190),(19780,60878,'kill_cast_white_buff',1190),(19781,60904,'kill_sound_evil_bird_egg_vox',1190),(19782,60915,'kill_design_ice_column_shatter',1190),(19783,60916,'kill_drinal_summon',1190),(19784,60927,'kill_design_circle_warning_zone_blue',1190),(19785,60928,'kill_design_circle_warning_zone_gold',1190),(19786,60929,'kill_design_half_circle_warning_zone_blue',1190),(19787,60930,'kill_design_half_circle_warning_zone_gold',1190),(19788,60931,'kill_design_oval_warning_zone_blue',1190),(19789,60932,'kill_design_oval_warning_zone_gold',1190),(19790,60933,'kill_design_third_circle_warning_zone_blue',1190),(19791,60934,'kill_design_third_circle_warning_zone_gold',1190),(19792,60946,'kill_lay_egg_hatch',1190),(19793,60957,'kill_design_vd_portal_red',1190),(19794,60991,'kill_status_quest_completes_repeatable',1190),(19795,60992,'kill_status_quest_completes_tradeskill',1190),(19796,60993,'kill_status_quest_gives_repeatable',1190),(19797,60994,'kill_status_quest_gives_tradeskill',1190),(19798,60995,'kill_status_quest_updates_repeatable',1190),(19799,60996,'kill_status_quest_updates_tradeskill',1190),(19800,61007,'kill_drinal_trail_weapon_flames',1190),(19801,61008,'kill_drinal_trail_weapon_poison',1190),(19802,61011,'kill_result_flash_weapon_green',1190),(19803,61022,'kill_drinal_absorb_back_exit',1190),(19804,61023,'kill_drinal_absorb_back_idle',1190),(19805,61024,'kill_drinal_absorb_forward_exit',1190),(19806,61025,'kill_drinal_absorb_forward_idle',1190),(19807,61026,'kill_drinal_absorb_left_exit',1190),(19808,61027,'kill_drinal_absorb_left_idle',1190),(19809,61028,'kill_drinal_absorb_right_exit',1190),(19810,61029,'kill_drinal_absorb_right_idle',1190),(19811,61030,'kill_drinal_fireball_gather',1190),(19812,61031,'kill_drinal_skull_gather',1190),(19813,61032,'kill_drinal_spirt_gather',1190),(19814,61033,'kill_drinal_staff_blast',1190),(19815,61036,'kill_result_drinal_spirits_p2p',1190),(19816,61037,'kill_result_spirits_blast_out',1190),(19817,61046,'kill_close_enter',1190),(19818,61047,'kill_closed_idle',1190),(19819,61050,'kill_dragon_attack',1190),(19820,61051,'kill_dragon_idle',1190),(19821,61054,'kill_open_enter',1190),(19822,61055,'kill_open_idle',1190),(19823,61066,'kill_evil_bird_idle05',1190),(19824,61069,'kill_orbiting_buff_all',1190),(19825,61070,'kill_orbiting_buff_blue',1190),(19826,61071,'kill_orbiting_buff_blue_white',1190),(19827,61072,'kill_orbiting_buff_red',1190),(19828,61073,'kill_orbiting_buff_red_blue',1190),(19829,61074,'kill_orbiting_buff_red_white',1190),(19830,61075,'kill_orbiting_buff_white',1190),(19831,61088,'kill_result_spike_cage',1190),(19832,61099,'kill_design_drinals_portal',1190),(19833,61106,'kill_attack_cannibal',1190),(19834,61113,'kill_oldidle',1190),(19835,61122,'kill_cast_shadow_breath',1190),(19836,61125,'kill_drinal_frontal_blast',1190),(19837,61126,'kill_drinal_warning_zone',1190),(19838,61133,'kill_asleep',1190),(19839,61134,'kill_attack_breath_old',1190),(19840,61139,'kill_design_groundportal_rift_gehein',1190),(19841,61140,'kill_dual_wield_knockeddowntoknees',1190),(19842,61141,'kill_dual_wield_knockedtoback_onbackidle',1190),(19843,61143,'kill_komodo_npc_glide',1190),(19844,61177,'kill_tradeart_forge_hammers_anvil',1190),(19845,61188,'kill_design_agitated',1190),(19846,61189,'kill_design_distorted',1190),(19847,61190,'kill_design_fear',1190),(19848,61208,'kill_snd_tirun_enf_attack',1190),(19849,61209,'kill_snd_tirun_enf_attack01',1190),(19850,61210,'kill_snd_tirun_enf_attack02',1190),(19851,61211,'kill_snd_tirun_enf_attack03',1190),(19852,61212,'kill_snd_tirun_enf_cast1',1190),(19853,61213,'kill_snd_tirun_enf_chargeup',1190),(19854,61214,'kill_snd_tirun_enf_combat_enter',1190),(19855,61215,'kill_snd_tirun_enf_combat_idle01',1190),(19856,61216,'kill_snd_tirun_enf_dead',1190),(19857,61217,'kill_snd_tirun_enf_dodge',1190),(19858,61218,'kill_snd_tirun_enf_knocktoknees',1190),(19859,61219,'kill_snd_tirun_enf_ouch',1190),(19860,61220,'kill_snd_tirun_enf_shield_shove',1190),(19861,61221,'kill_snd_tirun_enf_whirling_attack',1190),(19862,61222,'kill_snd_tirun_enf_wild_swing',1190),(19863,61240,'kill_tradeart_flask_beaker_pour',1190),(19864,61241,'kill_tradeart_forge_hammer_metal',1190),(19865,61242,'kill_tradeart_saw_log',1190),(19866,61253,'kill_design_drinals_floor_panel_blue',1190),(19867,61254,'kill_design_drinals_floor_panel_challege_blue',1190),(19868,61255,'kill_design_drinals_floor_panel_challege_red',1190),(19869,61256,'kill_design_drinals_floor_panel_red',1190),(19870,61257,'kill_design_drinals_vessel_arc_blue',1190),(19871,61258,'kill_design_drinals_vessel_arc_red',1190),(19872,61262,'kill_result_bastion_beam_p2p',1190),(19873,61277,'kill_shaman_summon_fx',1190),(19874,61288,'kill_design_tof_rock_collapse01',1190),(19875,61289,'kill_design_tof_rock_collapse02',1190),(19876,61290,'kill_design_tof_rock_collapse03',1190),(19877,61291,'kill_design_tof_rock_collapse04',1190),(19878,61326,'kill_spit',1190),(19879,61337,'kill_design_arcane_barrier',1190),(19880,61338,'kill_design_divine_barrier',1190),(19881,61342,'kill_result_magic_barrier_beam_p2p',1190),(19882,61351,'kill_cast_werewolf_appear',1190),(19883,61352,'kill_cast_werewolf_hair',1190),(19884,61355,'kill_csat_werewolf_vanish',1190),(19885,61362,'kill_attack_eye_cone',1190),(19886,61367,'kill_gazer_charge_up',1190),(19887,61371,'kill_result_essence_suck_p2p',1190),(19888,61372,'kill_result_gazer_flame_eye_beam_p2p',1190),(19889,61387,'kill_sky_float_idle',1190),(19890,61418,'kill_zap_attack',1190),(19891,61429,'kill_fs',1190),(19892,61434,'kill_shaman_crouch_idle',1190),(19893,61441,'kill_snd_skirth_attack',1190),(19894,61442,'kill_snd_skirth_attack01',1190),(19895,61443,'kill_snd_skirth_attack02',1190),(19896,61444,'kill_snd_skirth_attack03',1190),(19897,61445,'kill_snd_skirth_aura',1190),(19898,61446,'kill_snd_skirth_cast_1',1190),(19899,61447,'kill_snd_skirth_chargeup',1190),(19900,61448,'kill_snd_skirth_combat_enter',1190),(19901,61449,'kill_snd_skirth_combat_enter1',1190),(19902,61450,'kill_snd_skirth_dead_enter',1190),(19903,61451,'kill_snd_skirth_knocktobackgetup',1190),(19904,61452,'kill_snd_skirth_ouch',1190),(19905,61453,'kill_snd_skirth_shiield_shove',1190),(19906,61454,'kill_snd_skirth_spit',1190),(19907,61455,'kill_snd_skirth_whirling_attack',1190),(19908,61456,'kill_snd_skirth_wildswing',1190),(19909,61481,'kill_zap_enter',1190),(19910,61482,'kill_zap_exit',1190),(19911,61483,'kill_zap_idle',1190),(19912,61528,'kill_were_cast_idle',1190),(19913,61542,'kill_result_ethernere_fx',1190),(19914,61550,'kill_snd_skirth_idle03',1190),(19915,61564,'kill_result_aggression_removal',1190),(19916,61565,'kill_result_aggression_removal_p2p',1190),(19917,61566,'kill_result_healing_trail_p2p',1190),(19918,61567,'kill_result_lifebringer_glade',1190),(19919,61599,'kill_trdskl_aggro_life_wand',1190),(19920,61615,'kill_snd_baelon_attack',1190),(19921,61616,'kill_snd_baelon_attack01',1190),(19922,61617,'kill_snd_baelon_attack_arms',1190),(19923,61618,'kill_snd_baelon_fs',1190),(19924,61619,'kill_snd_baelon_idle02',1190),(19925,61620,'kill_snd_baelon_idle03',1190),(19926,61621,'kill_snd_baelon_lose_weapon',1190),(19927,61622,'kill_snd_baelon_ouch',1190),(19928,61623,'kill_snd_baelon_powerslam',1190),(19929,61624,'kill_snd_baelon_summon',1190),(19930,61625,'kill_snd_baelon_targeted_right',1190),(19931,61626,'kill_snd_baelon_transition_back',1190),(19932,61627,'kill_snd_baelon_transition_back01_extract',1190),(19933,61628,'kill_snd_baelon_transition_back_extract',1190),(19934,61629,'kill_snd_baelon_transition_left_extract',1190),(19935,61630,'kill_snd_baelon_transition_right',1190),(19936,61631,'kill_snd_baelon_transition_right_extract',1190),(19937,61632,'kill_snd_baelon_unarmed_attack',1190),(19938,61633,'kill_snd_baelon_unarmed_attack01',1190),(19939,61634,'kill_snd_baelon_unarmed_attack02',1190),(19940,61635,'kill_snd_baelon_unarmed_attack_fistslam',1190),(19941,61636,'kill_snd_baelon_unarmed_attack_jumpslam',1190),(19942,61637,'kill_snd_baelon_unarmed_attack_stomp',1190),(19943,61638,'kill_snd_baelon_unarmed_dead_enter',1190),(19944,61639,'kill_snd_baelon_unarmed_fs',1190),(19945,61640,'kill_snd_baelon_unarmed_idle01',1190),(19946,61641,'kill_snd_baelon_unarmed_idle02',1190),(19947,61642,'kill_snd_baelon_unarmed_ouch',1190),(19948,61643,'kill_snd_baelon_unarmed_portal_jump',1190),(19949,61644,'kill_snd_baelon_unarmed_portal_stomp',1190),(19950,61645,'kill_snd_baelon_unarmed_victory',1190),(19951,61646,'kill_snd_baelon_whirling_attack',1190),(19952,61647,'kill_snd_baelon_wild_swing',1190),(19953,61658,'kill_fx_foot_trail_lf',1190),(19954,61659,'kill_fx_foot_trail_lh',1190),(19955,61660,'kill_fx_foot_trail_rf',1190),(19956,61661,'kill_fx_foot_trail_rh',1190),(19957,61685,'kill_sound_bodyfall',1190),(19958,61696,'kill_sound_whoosh',1190),(19959,61698,'kill_untrainted_wildswing',1190),(19960,61709,'kill_gehein_aura_lp',1190),(19961,61714,'kill_sfx_attack_vox',1190),(19962,61715,'kill_sfx_death_vox',1190),(19963,61716,'kill_sfx_gehein_death_vox',1190),(19964,61717,'kill_sfx_gehein_vox_attack',1190),(19965,61718,'kill_sfx_gehein_vox_ouch',1190),(19966,61719,'kill_sfx_whoosh',1190),(19967,61720,'kill_sfx_whoosh_high',1190),(19968,61741,'kill_snd_screecher_attack',1190),(19969,61742,'kill_snd_screecher_attack01',1190),(19970,61743,'kill_snd_screecher_attack02',1190),(19971,61744,'kill_snd_screecher_attack03',1190),(19972,61745,'kill_snd_screecher_aura_lp',1190),(19973,61746,'kill_snd_screecher_cast',1190),(19974,61747,'kill_snd_screecher_cast01',1190),(19975,61748,'kill_snd_screecher_combat_enter',1190),(19976,61749,'kill_snd_screecher_dead_enter',1190),(19977,61750,'kill_snd_screecher_idel01',1190),(19978,61751,'kill_snd_screecher_idle02',1190),(19979,61752,'kill_snd_screecher_jump',1190),(19980,61753,'kill_snd_screecher_ouch',1190),(19981,61754,'kill_snd_screecher_scream',1190),(19982,61755,'kill_snd_screecher_scream01',1190),(19983,61756,'kill_snd_screecher_whirling_attack',1190),(19984,61770,'kill_result_life_statue_fx',1190),(19985,61781,'kill_dont_use_ouch',1190),(19986,61792,'kill_fly_in_old',1190),(19987,61793,'kill_ilde01',1190),(19988,61813,'kill_snd_komodo_attack',1190),(19989,61814,'kill_snd_komodo_attack01',1190),(19990,61815,'kill_snd_komodo_cast01',1190),(19991,61816,'kill_snd_komodo_dead_enter',1190),(19992,61817,'kill_snd_komodo_knocktoback',1190),(19993,61818,'kill_snd_komodo_ouch',1190),(19994,61819,'kill_snd_komodo_whirling_attack',1190),(19995,61820,'kill_snd_komodo_wild_swing',1190),(19996,61831,'kill_design_etherene_fire',1190),(19997,61832,'kill_design_ethernere_vines',1190),(19998,61843,'kill_idle05',1190),(19999,61858,'kill_sfx_vox_gehein_laugh',1190),(20000,61860,'kill_snd_chitari_1h_sword_attack',1190),(20001,61861,'kill_snd_chitari_1h_sword_attack01',1190),(20002,61862,'kill_snd_chitari_1h_sword_attack02',1190),(20003,61863,'kill_snd_chitari_1h_sword_enter',1190),(20004,61864,'kill_snd_chitari_attack',1190),(20005,61865,'kill_snd_chitari_attack01',1190),(20006,61866,'kill_snd_chitari_attack02',1190),(20007,61867,'kill_snd_chitari_attack03',1190),(20008,61868,'kill_snd_chitari_attack_cannibal',1190),(20009,61869,'kill_snd_chitari_charge_up',1190),(20010,61870,'kill_snd_chitari_dead_enter',1190),(20011,61871,'kill_snd_chitari_idle01',1190),(20012,61872,'kill_snd_chitari_knockedtoback_getup',1190),(20013,61873,'kill_snd_chitari_ouch',1190),(20014,61874,'kill_snd_chitari_ouch_forehand',1190),(20015,61875,'kill_snd_chitari_shield_shove',1190),(20016,61876,'kill_snd_chitari_whirling_attack',1190),(20017,61877,'kill_snd_chitari_wild_swing',1190),(20018,61884,'kill_aa_smoke_teleport',1190),(20019,61885,'kill_aa_wave_splash',1190),(20020,61886,'kill_aa_whirlwind_teleport',1190),(20021,61891,'kill_idle04_',1190),(20022,61898,'kill_aa_scythe_slash',1190),(20023,61905,'kill_aa_frozen_rain',1190),(20024,61906,'kill_aa_toxic_mist',1190),(20025,61914,'kill_result_bone_glow_3',1190),(20026,61915,'kill_result_fire_attack_p2p',1190),(20027,61926,'kill_dontuse_knockedtoback',1190),(20028,61927,'kill_dontuse_knockedtoback_getup',1190),(20029,61928,'kill_dontuse_knockedtoback_onbackidle',1190),(20030,61935,'kill_aa_fire_swirl_shield',1190),(20031,61936,'kill_aa_head_skeleton_hands_blast',1190),(20032,61937,'kill_aa_heal_skeleton_hands_blast',1190),(20033,61938,'kill_aa_planar_fire_blast',1190),(20034,61939,'kill_aa_second_skin',1190),(20035,61946,'kill_aa_cast_wind_spin',1190),(20036,61947,'kill_aa_dark_swirly_wisps',1190),(20037,61948,'kill_aa_heal_splash',1190),(20038,61949,'kill_aa_lightning_siphon',1190),(20039,61950,'kill_aa_nature_heal',1190),(20040,61951,'kill_aa_scimitar_cyclone',1190),(20041,61952,'kill_aa_spirit_swirl_buff_ward',1190),(20042,61980,'kill_snd_were_1h_sword_attack01_vox',1190),(20043,61981,'kill_snd_were_1h_sword_attack02_vox',1190),(20044,61982,'kill_snd_were_1h_sword_attack03_vox',1190),(20045,61983,'kill_snd_were_1h_sword_attack_vox',1190),(20046,61984,'kill_snd_were_attack01_vox',1190),(20047,61985,'kill_snd_were_attack02_vox',1190),(20048,61986,'kill_snd_were_attack_vox',1190),(20049,61987,'kill_snd_were_cast_vox',1190),(20050,61988,'kill_snd_were_combat_idle01_vox',1190),(20051,61989,'kill_snd_were_dead_enter_vox',1190),(20052,61990,'kill_snd_were_dual_wield_attack01_vox',1190),(20053,61991,'kill_snd_were_dual_wield_attack02_vox',1190),(20054,61992,'kill_snd_were_dual_wield_attack03_vox',1190),(20055,61993,'kill_snd_were_dual_wield_attack_vox',1190),(20056,61994,'kill_snd_were_kick_vox',1190),(20057,61995,'kill_snd_were_ouch_vox',1190),(20058,61996,'kill_snd_were_shield_shove_vox',1190),(20059,61997,'kill_snd_were_super_buff_vox',1190),(20060,61998,'kill_snd_were_wild_swing_vox',1190),(20061,62010,'kill_swoosh_huge',1190),(20062,62017,'kill_aa_arrow_rapid_salvo',1190),(20063,62018,'kill_aa_fire_arrow_p2p',1190),(20064,62019,'kill_aa_music_dagger_buff',1190),(20065,62020,'kill_aa_sound_wave_blast',1190),(20066,62021,'kill_bird_squawk_sound',1190),(20067,62022,'kill_cast_bagpipe_sound',1190),(20068,62023,'kill_cast_bard_bagpipes',1190),(20069,62030,'kill_scaled_hands_attack03',1190),(20070,62037,'kill_cast_dome_barrier_fx',1190),(20071,62042,'kill_design_comm_on',1190),(20072,62043,'kill_design_tourbillion_flux_fx',1190),(20073,62044,'kill_design_tourbillion_persist_fx',1190),(20074,62047,'kill_result_tourbillion_essence_suck_p2p',1190),(20075,62060,'kill_result_forced_shader_ethernere',1190),(20076,62067,'kill_bodyfall',1190),(20077,62105,'kill_whoosh_large',1190),(20078,62106,'kill_whoosh_lrg',1190),(20079,62121,'kill_snd_attack_long',1190),(20080,62122,'kill_snd_attack_short',1190),(20081,62127,'kill_snd_gargoyle_attack',1190),(20082,62128,'kill_snd_gargoyle_attack03',1190),(20083,62129,'kill_snd_gargoyle_cast_1',1190),(20084,62130,'kill_snd_gargoyle_charge_up',1190),(20085,62131,'kill_snd_gargoyle_combat_enter',1190),(20086,62132,'kill_snd_gargoyle_dead_enter',1190),(20087,62133,'kill_snd_gargoyle_kick',1190),(20088,62134,'kill_snd_gargoyle_knocktoback_getup',1190),(20089,62135,'kill_snd_gargoyle_ouch_forehand',1190),(20090,62136,'kill_snd_gargoyle_shield_shove',1190),(20091,62137,'kill_snd_jump_fx',1190),(20092,62139,'kill_snd_rx_cast1',1190),(20093,62140,'kill_snd_rx_chargeup',1190),(20094,62141,'kill_snd_rx_combat_enter',1190),(20095,62142,'kill_snd_rx_dead_enter',1190),(20096,62152,'kill_cookie_ouch_fx',1190),(20097,62157,'kill_skyshrine_drake_backup',1190),(20098,62158,'kill_skyshrine_drake_fall',1190),(20099,62159,'kill_skyshrine_drake_fly_backup',1190),(20100,62160,'kill_skyshrine_drake_fly_climb',1190),(20101,62161,'kill_skyshrine_drake_fly_dive',1190),(20102,62162,'kill_skyshrine_drake_fly_down',1190),(20103,62163,'kill_skyshrine_drake_fly_glide',1190),(20104,62164,'kill_skyshrine_drake_fly_glide_left',1190),(20105,62165,'kill_skyshrine_drake_fly_glide_right',1190),(20106,62166,'kill_skyshrine_drake_fly_idle',1190),(20107,62167,'kill_skyshrine_drake_fly_run',1190),(20108,62168,'kill_skyshrine_drake_fly_strafe_left',1190),(20109,62169,'kill_skyshrine_drake_fly_strafe_right',1190),(20110,62170,'kill_skyshrine_drake_fly_turn_left',1190),(20111,62171,'kill_skyshrine_drake_fly_turn_right',1190),(20112,62172,'kill_skyshrine_drake_fly_up',1190),(20113,62173,'kill_skyshrine_drake_fly_walk',1190),(20114,62174,'kill_skyshrine_drake_idle',1190),(20115,62175,'kill_skyshrine_drake_idle01',1190),(20116,62176,'kill_skyshrine_drake_jump',1190),(20117,62177,'kill_skyshrine_drake_jump_substitute',1190),(20118,62178,'kill_skyshrine_drake_land',1190),(20119,62179,'kill_skyshrine_drake_long_fall',1190),(20120,62180,'kill_skyshrine_drake_turn_left',1190),(20121,62181,'kill_skyshrine_drake_turn_right',1190),(20122,62182,'kill_skyshrine_drake_walk',1190); +/*!40000 ALTER TABLE `visual_states` ENABLE KEYS */; +UNLOCK TABLES; + +-- +-- Table structure for table `zones` +-- + +DROP TABLE IF EXISTS `zones`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `zones` ( + `id` int(11) unsigned NOT NULL AUTO_INCREMENT, + `expansion_id` tinyint(3) unsigned NOT NULL DEFAULT 0, + `name` varchar(64) COLLATE latin1_general_ci NOT NULL DEFAULT '', + `file` varchar(64) COLLATE latin1_general_ci NOT NULL DEFAULT '', + `description` varchar(255) COLLATE latin1_general_ci NOT NULL DEFAULT 'Describe me in the zones table! :)', + `safe_x` float NOT NULL DEFAULT 0, + `safe_y` float NOT NULL DEFAULT 0, + `safe_z` float NOT NULL DEFAULT 0, + `safe_heading` float NOT NULL DEFAULT 0, + `underworld` float NOT NULL DEFAULT -1000000, + `xp_modifier` float NOT NULL DEFAULT 0, + `min_recommended` tinyint(3) unsigned NOT NULL DEFAULT 0, + `max_recommended` tinyint(3) unsigned NOT NULL DEFAULT 0, + `zone_type` varchar(64) COLLATE latin1_general_ci DEFAULT '', + `always_loaded` tinyint(3) unsigned NOT NULL DEFAULT 0, + `city_zone` tinyint(3) unsigned NOT NULL DEFAULT 0, + `weather_allowed` tinyint(3) unsigned NOT NULL DEFAULT 0, + `min_status` int(10) NOT NULL DEFAULT 0, + `min_level` int(10) NOT NULL DEFAULT 0, + `max_level` int(10) NOT NULL DEFAULT 0, + `start_zone` tinyint(3) NOT NULL DEFAULT 0, + `instance_type` enum('NONE','GROUP_LOCKOUT_INSTANCE','GROUP_PERSIST_INSTANCE','RAID_LOCKOUT_INSTANCE','RAID_PERSIST_INSTANCE','SOLO_LOCKOUT_INSTANCE','SOLO_PERSIST_INSTANCE','TRADESKILL_INSTANCE','PUBLIC_INSTANCE','PERSONAL_HOUSE_INSTANCE','GUILD_HOUSE_INSTANCE') COLLATE latin1_general_ci NOT NULL DEFAULT 'NONE', + `default_reenter_time` int(10) unsigned NOT NULL DEFAULT 0, + `default_reset_time` int(10) unsigned NOT NULL DEFAULT 0, + `default_lockout_time` int(10) unsigned NOT NULL DEFAULT 0, + `force_group_to_zone` smallint(5) unsigned NOT NULL DEFAULT 0, + `lua_script` varchar(255) COLLATE latin1_general_ci DEFAULT '', + `shutdown_timer` int(10) unsigned NOT NULL DEFAULT 300 COMMENT 'In seconds', + `zone_motd` varchar(250) COLLATE latin1_general_ci DEFAULT '', + `ruleset_id` int(10) unsigned NOT NULL DEFAULT 0, + `login_checksum` int(10) unsigned NOT NULL DEFAULT 0, + PRIMARY KEY (`id`), + UNIQUE KEY `NewIndex` (`name`), + KEY `ZoneDescIDX` (`description`) +) ENGINE=InnoDB AUTO_INCREMENT=668 DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci CHECKSUM=1 DELAY_KEY_WRITE=1 ROW_FORMAT=DYNAMIC; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Dumping data for table `zones` +-- + +LOCK TABLES `zones` WRITE; +/*!40000 ALTER TABLE `zones` DISABLE KEYS */; +INSERT INTO `zones` VALUES (1,50,'GMHall','qey_guildhall_tier3','GM Hall',665.435,-35.8975,1485.44,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,2968162667),(2,0,'Splitpaw1','adv02_dun_sundered_splitpaw','Sundered Splitpaw: Alone in the Dark',0,-2.5,0,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,2642218879),(3,0,'SplitpawDen','adv02_dun_sundered_splitpaw_hub','Sundered Splitpaw: Splitpaw Den ',7.13,-69.56,-311.04,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,2078270933),(4,0,'CrustaceanCave','adv04_crab_cave','Cavern of the Crustaceans',0,-0.01,0,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,1437304064),(5,0,'XuxlaiosRoost','adv04_dun_bird_cage','Xux\'laio\'s Roost',0,-1.28,-20.77,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,1679741196),(6,0,'Antechamber','adv04_dun_drgn_temple','Antechamber of Fate',-11.35,0.4,-34,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,3992515775),(7,0,'ForsakenCity','adv04_dun_endless','The Forsaken City',-33.7,-89.42,24.8,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,587354683),(8,0,'SepulcherZanFi','adv04_dun_temple','The Sepulcher of Zan Fi',-1,0.7,5,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,3635271022),(9,0,'MysticLake','adv04_rgn_mystic_lake','The Mystic Lake ',151.74,-32.94,34.7,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,3461788758),(10,0,'VillageShin','adv04_rgn_village','The Village of Shin ',-17.6,-2.38,129.6,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,2336498437),(11,0,'TrialBoFen','adv04_tower_cave','Trial of Bo Fen',-13.4,0,-2.11,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,4038375427),(12,0,'antonica','antonica','Antonica',436.2,-37.5,819.56,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,2242566679),(13,0,'ShatteredVale1','antonica_epic01_vale','The Shattered Vale ',-2526.79,15.67,-50.07,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,3880090772),(14,0,'Firemyst1','antonica_epic02_firemyst','Firemyst Gully: A Foul Wind',-1093.72,-25.04,686.59,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,1313197908),(15,0,'Stormhold','befallen','Stormhold',-30,23,43,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,3163675467),(16,0,'TombValor1','befallen_epic01','The Tomb of Valor',-4.74,-45.79,-47.64,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,330791385),(17,0,'Blackburrow','blackburrow','Blackburrow',76.2,-2.28,20.77,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,418741681),(18,0,'MaidMist','boat_06p_enchanted','The Maid for the Mist',2.14,1.21,-15.81,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,3294470509),(19,0,'FangedSea','boat_06p_everfrost','The Fanged Sea',2.14,1.21,-15.81,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,3400822130),(20,0,'LMSIntruder','boat_06p_feerrott','The LMS Intruder',2.14,1.21,-15.81,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,2766328670),(21,0,'JourneyFreeport','boat_06p_freeport','Journey to Freeport',2.14,1.21,-15.81,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,1691559112),(22,0,'SmarmySprocket','boat_06p_hold_of_prexus','Aboard the Smarmy Sprocket',2.14,1.21,-15.81,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,3493494422),(23,0,'BurningCauldron','boat_06p_lavastorm','The Burning Cauldron',2.14,1.21,-15.81,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,85224425),(24,0,'PrizePrexus','boat_06p_orcishwastes','The Prize of Prexus',2.14,1.21,-15.81,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,687197178),(25,0,'JourneyQeynos','boat_06p_qeynos','Journey to Qeynos',2.14,1.21,-15.81,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,1629504455),(26,0,'FarJourneyQeynos','boat_06p_tutorial01','The Far Journey',2.14,1.21,-15.81,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,2933294842),(27,0,'FarJourneyFreeport','boat_06p_tutorial02','The Far Journey',2.14,1.21,-15.81,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,3521329369),(28,0,'CazicThule1','cazicthule','The Temple of Cazic-Thule',-0.05,7.89,154.43,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,953361327),(29,0,'SanctumFear1','cazicthule_epic01_sanctum','The Sanctum of Fear',-1.02,-10,-178.26,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,2868411969),(30,0,'CharCreation','character_create','Character Creation Screen',-127,58.2,-893.6,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,389319796),(31,0,'Bloodskull2','cmmn_epic01_orc','The Bloodskull Valley: A Noble Confrontation',-9.18,-48.2,732.4,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,802190119),(32,0,'EternalGorge1','cmmn_epic02_mage','The Eternal Gorge ',863.77,-18.31,581.92,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,3119513962),(33,0,'Commonlands','commonlands','The Commonlands',-1052.73,-144.95,-682.93,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,3471412372),(34,0,'Darklight','darklight_wood','Darklight Wood ',-414.24,-63.14,258.43,0,-1000000,0,0,0,'',0,0,0,0,0,0,8,'NONE',0,0,0,0,NULL,300,NULL,0,1978857252),(35,0,'Deathfist1','deathfist','Deathfist Citadel',-0.03,0.5,55.18,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,2143427729),(36,0,'DrownedCaverns1','adv02_dun_drowned_caverns','The Drowned Caverns: Arena of Heroes',95.83,22.83,4,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,2606878460),(37,1,'ModelDemo','commonlands','GM Model Demos',-614.67,-47.53,-239.79,220,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,1045650867),(38,0,'DraflingTower','drafling_tower','The Tower of the Drafling',-2.81,0,-8.2,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,3363951083),(39,0,'EnchantedLands','enchanted','Enchanted Lands',242.55,12.21,-978.47,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,692296008),(40,0,'TangledWeeds','enchanted_mini01','Cavern of Tangled Weeds',-79.8,-2.63,-1120.98,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,2125525214),(41,0,'Everfrost','everfrost','Everfrost ',-40.27,-1.5,-1183.8,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,2971640549),(42,0,'Miraguls','everfrost_epic01_menagerie','Miragul\'s Menagerie',-52.73,-23.55,-319.22,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,2633911975),(45,0,'Haven','exile_city','Haven ',-50,-82.8,-145.91,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,3194957246),(46,10,'Majdul','exp01_cty_majdul','Maj\'Dul ',-283.67,160.6,-147.61,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,247471241),(47,10,'Majdul1Room1','exp01_cty_majdul_1r01','Maj\'Dul: 1 Room Apartment',0,0,5,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,1297812899),(48,10,'Majdul1Room2','exp01_cty_majdul_1r02','Maj\'Dul: 1 Room Apartment',10,0,0,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,2829996334),(49,10,'Majdul2Room1','exp01_cty_majdul_2r01','Maj\'Dul: 2 Rooms Apartment',-10,0,0,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,3134471404),(50,10,'Majdul2Room2','exp01_cty_majdul_2r02','Maj\'Dul: 2 Rooms Apartment',-10,0,0,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,4034869404),(51,10,'Majdul3Room1','exp01_cty_majdul_3r01','Maj\'Dul: 3 Room Residence',-10,0,0,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,3517135728),(52,10,'Majdul3Room2','exp01_cty_majdul_3r02','Maj\'Dul: 3 Room Residence',10,0,0,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,3142330392),(53,10,'Arena','exp01_cty_majdul_arena01','Maj\'Dul Arena',0,10,70,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,1193689160),(54,10,'Arena2','exp01_cty_majdul_arena02','The Arena v2',0,-0.5,0,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,913624109),(55,10,'CourtBlades','exp01_cty_majdul_blades','The Court of the Blades',0,-0.15,0,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,2914789014),(56,10,'CourtCoin','exp01_cty_majdul_coin','The Court of the Coin',0,-0.15,0,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,4244223063),(57,10,'LibraryLight','exp01_cty_majdul_library','The Library of Light',0,-0.2,0,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,520408650),(58,10,'TowerMoon','exp01_cty_majdul_moon','The Tower of the Moon',0,-0.15,0,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,1392070889),(59,10,'CourtTears','exp01_cty_majdul_tears','The Court of Tears',0,-0.22,0,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,2026106351),(60,10,'CourtTruth','exp01_cty_majdul_truth','Maj\'Dul: The Court of Truth',0,-0.15,0,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,3952194529),(61,10,'CleftsRujark','exp01_dun_clefts_of_rujark','The Clefts of Rujark',147.16,-7.76,-90.58,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,4246189845),(62,10,'LivingTombs','exp01_dun_living_tombs','The Living Tombs',-293.72,15.23,291.21,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,1490971066),(63,10,'PedestalSky','exp01_dun_pedestal_of_sky','Pedestal of Sky',0,-0.55,0,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,2258780775),(64,10,'PoetPalace','exp01_dun_poets_palace','The Poets Palace',-94,147,39,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,1460452816),(65,10,'ShimmeringCitadel','exp01_dun_shimmering_citadel','The Shimmering Citadel',58.94,98.3,-129.04,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,3499314672),(66,10,'UnusualBottle','exp01_dun_shimmering_citadel_epic01_bottle','An Unusual Bottle',0,-0.01,0,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,2238196469),(67,10,'DjinnPrism','exp01_dun_shimmering_citadel_epic02_prism','The Djinn Master\'s Prism',-22,-5,-35,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,3131802491),(68,10,'SilentCity','exp01_dun_silent_city','The Silent City',143,31,160,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,3364154278),(69,10,'FountainLife','exp01_dun_silent_city_epic01_temple','The Fountain of Life',0,-6.71,22,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,1250120736),(70,10,'PillarsFlame','exp01_rgn_pillars_of_flame','The Pillars of Flame',1382,-147,-854,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,464322516),(71,10,'CazelMesa','exp01_rgn_pillars_of_flame_epic01_cazel','Cazel\'s Mesa',1.34,-0.12,5.17,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,2346526326),(72,10,'HallsDiscipline','exp01_rgn_pillars_of_flame_epic02_discipline','Halls of Discipline',-11,-5.6,-4.5,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,2657155766),(73,10,'SinkingSands','exp01_rgn_sinking_sands','The Sinking Sands',-1508.64,-214.09,-395.22,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,1641630735),(74,10,'LockjawsLair','exp01_rgn_sinking_sands_epic01_lockjaw','The Vault of Dust',-10,8,0,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,1879067363),(75,20,'Deathtoll','exp02_dun_dragon_necropolis','Deathtoll',-189.17,126.19,66.25,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,3628258851),(76,20,'HallsFate','exp02_dun_halls_of_fate','The Halls of Fate',-0.43,39.2,-93.4,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,2785872257),(77,20,'Blackscale','exp02_dun_halls_of_fate_epic01_sepulcher','The Blackscale Sepulcher ',-2.91,12.54,0.33,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,3865441725),(78,20,'DenDevourer','exp02_dun_halls_of_fate_epic02_devourer','The Den of the Devourer ',1.6,-0.15,0.03,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,2030006797),(79,20,'SanctumScaleborn','exp02_dun_lair_of_scale','Sanctum of the Scaleborn',12,135,-233,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,695028551),(80,20,'HallsSeeing','exp02_dun_lair_of_scale_epic01_seeing','Halls of the Seeing',-628.06,159.68,-234.91,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,2782224465),(81,20,'LyceumAbhorrence','exp02_dun_lair_of_scale_epic02_hallowed','The Lyceum of Abhorrence',26.73,157.56,-571.54,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,984615617),(82,20,'PalaceAwakened','exp02_dun_shrines_of_sky','Palace of the Awakened',44,0,-101,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,2129470810),(83,20,'VaultElArad','exp02_dun_shrines_of_sky_epic01_vaults','The Vaults of El\'Arad',-30.7,-0.61,30.62,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,1968164420),(84,20,'NestGreatEgg','exp02_dun_shrines_of_sky_epic02_nest','The Nest of the Great Egg',38.48,112.78,0.03,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,3466289623),(85,20,'BarrenSky','exp02_rgn_realm_of_dawn','The Barren Sky',506.75,-114.37,10.66,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,4122226678),(86,20,'exp02_rgn_realm_of_dawn_arena','exp02_rgn_realm_of_dawn_arena','Describe me in the zones table! :)',0,-2.85,0,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,1445881603),(87,20,'Bonemire','exp02_rgn_realm_of_night','The Bonemire',963.37,-108.17,469.1,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,2461862690),(88,20,'TenebrousTangle','exp02_rgn_realm_of_twilight','Tenebrous Tangle',-496.78,-60.1,-853.5,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,3365769829),(89,30,'CastleMistmoore','exp03_dun_castle_mistmoore','Castle Mistmoore',81,43,-4,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,715932856),(90,30,'MistmooreSanctum','exp03_dun_castle_mistmoore_epic01_coffinchamber','Mistmoore\'s Inner Sanctum',31.44,-4,15.69,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,54440071),(91,30,'Crushbone','exp03_dun_crushbone_keep','Crushbone Keep',7,-16,-78,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,3963117417),(92,30,'DvinnianThrone','exp03_dun_crushbone_keep_epic01_throne','The D\'Vinnian Throne',0.19,-4.31,-26.6,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,480928156),(93,30,'Acadechism','exp03_dun_crushbone_keep_epic02_boss','The Acadechism ',-0.52,-0.16,-12.01,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,1318370063),(94,30,'Estate of Unrest','exp03_dun_estate_of_unrest','The Estate of Unrest',7.91,0.3,-88.33,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,3225497653),(95,30,'NewTunaria','exp03_dun_felwithe','New Tunaria',-1038,55,-1379,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,2465751372),(96,30,'ThroneNewTunaria','exp03_dun_felwithe_epic01_throne','Throne of New Tunaria',57,67,-699,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,2494575554),(97,30,'GrendersLair','exp03_dun_hollow_stump','The Grender\'s Lair',0,-0.58,0,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,3140052190),(98,30,'ChamberTruthbringer','exp03_dun_hollow_stump2','The Chamber of the Truthbringer',0,-0.58,0,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,2495251601),(99,30,'Kaladim','exp03_dun_kaladim','Kaladim ',5,-1,-27,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,2172437289),(100,30,'Stormguard','exp03_dun_kaladim_stormguard_hall','Stormguard Hall',157,17.5,-65,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,1517940891),(101,30,'Klakanon','exp03_dun_klakanon','Klak\'Anon',-347.32,8.71,-19.23,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,738715765),(102,30,'ClockworkMenace','exp03_dun_klakanon_epic01_menace','The Clockwork Menace Factory',132.31,22.75,-65.73,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,274925249),(103,30,'CourtInnovation','exp03_dun_klakanon_epic02_court','Court of Innovation',-15.13,6.83,81.81,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,2766743326),(104,30,'MistmooreCatacombs','exp03_dun_mistmoore_catacombs','Mistmoore Catacombs',12.99,-159.06,-109.25,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,263748089),(105,30,'Freethinkers','exp03_dun_mistmoore_catacombs_epic01_freethinker','Freethinker Hideout',-17.15,6.16,-0.51,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,3669200752),(106,30,'CryptValdoon','exp03_dun_mistmoore_catacombs_epic02_oldcatacombs','Crypt of Valdoon ',168,0,40,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,28333672),(107,30,'ObeliskBlight','exp03_dun_obelisk_epic01_blight','The Obelisk of Blight ',129.85,-14.29,5.85,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,3174147112),(108,30,'Butcherblock','exp03_rgn_butcherblock','Butcherblock Mountains ',-1065,90,-389,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,697098529),(109,30,'EmeraldHalls','exp03_rgn_emerald_halls','The Emerald Halls',-156.06,4.67,-239.77,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,3392298569),(110,30,'Kelethin1Room','exp03_rgn_gf_ph_1room','Greater Faydark: 1 Room Apartment',0,-0.2,0,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,1645828791),(111,30,'Kelethin2Room','exp03_rgn_gf_ph_2room','Greater Faydark: 2 Rooms Apartment',0,-0.1,0,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,2776941267),(112,30,'Kelethin3Room','exp03_rgn_gf_ph_3room','Greater Faydark: 3 Rooms Residence',0,-0.5,0,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,75565844),(113,30,'Kelethin4Room','exp03_rgn_gf_ph_4room','Greater Faydark: 4 Rooms Residence',0,-0.3,0,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,669090026),(114,30,'GreaterFaydark','exp03_rgn_greater_faydark','Greater Faydark',-116.83,-43.94,-785.47,0,-1000000,0,0,0,'',0,0,0,0,0,0,4,'NONE',0,0,0,0,NULL,300,NULL,0,1796453226),(115,30,'LesserFaydark','exp03_rgn_lesser_faydark','The Lesser Faydark ',-717,-55.3,112.7,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,3327990583),(116,30,'LopingPlains','exp03_rgn_loping_plains','Loping Plains ',-537,-5,-401,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,1576609597),(117,30,'Steamfont','exp03_rgn_steamfont','Steamfont Mountains ',-492,125,596,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,3355489122),(118,30,'MinesMeldrath','exp03_rgn_steamfont_epic01_mines','The Mines of Meldrath ',12.53,-0.6,-4.63,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,3273265723),(119,0,'FallenGate','fallengate','Fallen Gate ',-19.57,20,149.02,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,380935007),(120,0,'VaultFallen2','fallengate_epic01_boss','The Vault of the Fallen: Lair of Trenda\'loz',37,-26,-189,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,1848001339),(121,0,'Feerrott','feerrott','The Feerrott',-118.63,7.41,-74.82,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,1328033086),(122,0,'TremblingLagoon1','feerrott_epic01_temple','The Trembling Lagoon',-904.3,-9.78,302.64,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,2246576723),(123,0,'Kugup','feerrott_epic02_froglok','The Lost Village of Kugup',-113.46,15.97,147.36,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,1262464412),(124,0,'SunkenCity','fprt_adv01_sunken','Sunken City',-61,-0.15,60.35,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,4288698253),(125,0,'Graveyard','fprt_adv02_graveyard','The Graveyard',-98.43,-15.73,-92.53,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,3531349867),(126,0,'Sprawl','fprt_adv03_sprawl','The Sprawl',-139.62,-4.42,97.21,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,621563996),(127,0,'Ruins','fprt_adv04_ruins','The Ruins',-178.54,-1,79.41,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,82557590),(128,0,'EastFreeport','fprt_east','East Freeport',-305.04,-56.07,73.57,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,3673921062),(129,0,'JadeTigersDenCellar','fprt_epic01_storeroom01','Jade Tiger\'s Den Cellar',0.187354,0.328323,-4.61251,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,3155501257),(130,0,'fprt_epic02_a01_dungeon01','fprt_epic02_a01_dungeon01','Describe me in the zones table! :)',0,0,0,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,3386855379),(131,0,'fprt_epic03_a01_dungeon02','fprt_epic03_a01_dungeon02','Describe me in the zones table! :)',0,0,0,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,3101595178),(132,0,'FreeportAcademy','fprt_epic04_a04_academy01','Freeport: Academy of Arcane Sciences',0,-0.66,0.5,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,3767002235),(133,0,'FreeportTemple','fprt_epic05_a02_temple01','Freeport: The Temple of Dismal Rage',0,0,0,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,1831281545),(134,0,'BigBend','fprt_hood01','Big Bend',-26.67,-4.64,102.43,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,578827427),(135,0,'Stonestair','fprt_hood02','Stonestair Byway',-101.2,-4.65,-26.78,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,202759038),(136,0,'TempleSt','fprt_hood03','Temple Street',-60.93,2.86,128.21,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,2595880091),(137,0,'BeggarsCourt','fprt_hood04','Beggar\'s Court',-30,4.17,-87.14,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,3536645693),(138,0,'Longshadow','fprt_hood05','Longshadow Alley',-50.84,-4.67,-85.43,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,449901455),(139,0,'ScaleYard','fprt_hood06','Scale Yard',0.1,-4.5,105,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,3728081010),(140,0,'fprt_hood_epic01','fprt_hood_epic01','Describe me in the zones table! :)',0,0,0,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,1624467568),(141,0,'ArchiveValeein','fprt_hood_epic02','Archive of Valeein',-1.71924,-1.51351,6.55359,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,2439079626),(142,0,'fprt_hood_epic03','fprt_hood_epic03','Describe me in the zones table! :)',0,0,0,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,3925693770),(143,0,'fprt_hood_epic04','fprt_hood_epic04','Describe me in the zones table! :)',0,0,0,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,122419003),(144,0,'NorthFreeport','fprt_north','North Freeport',-88,-9,-117,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,1554806586),(145,0,'Freeport2Room1','fprt_ph_1r01','a two room apartment, version 1',-6.5,0.75,-13.5,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,1296677832),(146,0,'Freeport2Room2','fprt_ph_1r02','a two room apartment, version 2',10,0.5,-10,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,1633763916),(147,0,'Freeport3Room1','fprt_ph_2r01','a three room house, version 1',-8.5,1.18,-7.66,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,2107461564),(148,0,'Freeport3Room2','fprt_ph_2r02','a three room house, version 2',-6.5,1.5,-12.15,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,2517432944),(149,0,'Freeport4Room1','fprt_ph_3r01','a four room house, version 1',8.5,1,8.3,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,3059503183),(150,0,'Freeport4Room2','fprt_ph_3r02','a four room house, version 2',-7.5,0.4,8.5,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,2332833260),(151,0,'Freeport4Room3','fprt_ph_3r03','a four room house, version 3',-9.5,1,8.5,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,4069184774),(152,0,'Freeport6Room1','fprt_ph_5r01','a six room house, version 1',-3.62,-0.5,-2.3,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,2279293680),(153,0,'Freeport6Room2','fprt_ph_5r02','a six room house, version 2',28.75,-0.5,5.62,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,4249795054),(154,0,'ThievesWay','fprt_sewer01','The Thieves\' Way',-123,0,0,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,2245891121),(155,0,'SerpentSewer','fprt_sewer02','The Serpent Sewer ',-182,0,-185,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,2853519654),(156,0,'Edgewater','fprt_sewer03','Edgewater Drains',29,32,73,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,938776093),(157,0,'fprt_sewer_epic01','fprt_sewer_epic01','Describe me in the zones table! :)',0,0,0,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,4065867901),(158,0,'fprt_sewer_epic02','fprt_sewer_epic02','Describe me in the zones table! :)',0,0,0,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,3904734492),(159,0,'SerpentsLair','fprt_sewer_epic03','The Serpent\'s Lair',0,0,0,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,2729254407),(160,0,'DarkbladeDen','fprt_sewer_epic04','The Darkblade Den of Assassins',-8.53,-0.62,12.68,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,2374182736),(161,0,'fprt_sewer_epic05','fprt_sewer_epic05','Describe me in the zones table! :)',0,0,0,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,867121339),(162,0,'fprt_sewer_epic06','fprt_sewer_epic06','Describe me in the zones table! :)',0,0,0,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,1116256801),(163,0,'fprt_sewer_epic07','fprt_sewer_epic07','Describe me in the zones table! :)',0,0,0,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,1321185),(164,0,'fprt_sewer_epic08','fprt_sewer_epic08','Describe me in the zones table! :)',0,0,0,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,125341182),(165,0,'fprt_sewer_epic09','fprt_sewer_epic09','Describe me in the zones table! :)',0,0,0,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,2664820379),(166,0,'SouthFreeport','fprt_south','South Freeport',-175,-57,148,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,190556331),(167,0,'BroodLostTongue','fprt_tradeskill01','The Brood of the Lost Tongue',8.4,-0.4,-11.6,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,4020093839),(168,0,'WestFreeport','fprt_west','West Freeport',90.43,-21.98,42.84,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,2219792691),(169,0,'FreeportMilitia','fprt_west_militia','Freeport Militia',135,-16,129,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,3758488065),(170,0,'PrisonGrimgadget','holdofprexus','The Prison of Admiral Grimgadget ',0,0,0,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,1598578194),(171,0,'Lavastorm','lavastorm','Lavastorm ',84.73,-33.09,138.55,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,4134789718),(172,0,'SanctumFire','lavastorm_epic01_sanctum','The Sanctum of Fire',-332,-80,-675,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,2816820645),(173,0,'MaidensGulch1','lavastorm_epic02_gulch','Maiden\'s Gulch',-193.04,-0.92,-344.69,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,1227024913),(174,0,'HauntedHouse','live_haunted_mansion','The Haunted House',-2.75,0,9.5,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,3627449501),(175,0,'BarBrell','live_irontoes','Bar of Brell',352,-20,143,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,1695982209),(176,0,'CryptTHaen','mod01_dun_crypt_of_thaen','Crypt of T\'Haen',76.88,0.5,43.19,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,3291665793),(177,0,'TombNight','mod01_dun_tombs_of_night','The Tombs of Night',116.64,-1.26,128.41,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,1645287631),(178,0,'Nektropos1','nektropos_castle','Nektropos Castle',0,0,58,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,401694680),(179,0,'Nektulos','nektulos','Nektulos Forest',-344.65,0.66,-1264.09,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,1475203678),(180,0,'BattleCauldronHollow','nektulos_epic01_cauldroncove','The Battle of Cauldron Hollow',946,10,-621.5,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,2897066563),(181,0,'Unearthing','nektulos_mini01','Unearthing ',2.53,2.46,-3.88,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,3670867982),(182,0,'DireHollow1','nektulos_mini02','Dire Hollow: Barrow Ruins',-0.05,-0.64,-0.55,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,3285202266),(183,0,'UnderrotCavern','nektulos_mini03','The Underrot Caverns: Moldy Crypt',-0.26,-0.48,0.86,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,3454396251),(184,0,'Neriak','neriak','Neriak, City of Hate',175.54,29.87,199.88,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,2399093912),(185,0,'Neriak1Room','neriak_ph_1room','a Nerian residence 1',0,-0.01,0,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,1866624788),(186,0,'Neriak3Room','neriak_ph_3room','a Nerian residence 3',0,-0.01,0,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,1590125928),(187,0,'Neriak5Room','neriak_ph_5room','a Nerian residence 5',0,-0.01,0,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,2417746180),(188,0,'Vestibule','obelisk_epic01_vestibule','The Vestibule',-484,407,380,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,2893098560),(189,0,'ObeliskLostSouls','obelisk_of_lostsouls','The Obelisk of Lost Souls',-13.78,624.84,134.08,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,2537411576),(190,0,'Zek','orcishwastes','Zek, the Orcish Wastes',509.44,-41.31,289.66,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,3094052578),(191,0,'SullonMines','orcishwastes_mini01','Sullon Mines',353,-121.77,-57.34,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,2610132812),(192,0,'Permafrost','permafrost','Permafrost',-5,0,-83,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,3961969058),(193,0,'DrayeksChamber1','permafrost_epic01_icebound','Drayek\'s Chamber',1.02,59.81,-406.31,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,809955926),(194,0,'CryptVox','permafrost_epic02_crypt','The Crypt of Vox',-2.49,10.63,-404.66,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,1626179814),(195,0,'Oakmyst','qey_adv01_oakmyst','Oakmyst Forest',1093.17,-10.15,-382.08,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,1587861986),(196,0,'ForestRuins','qey_adv02_ruins','The Forest Ruins',897,-14.5,-575,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,2672310568),(197,0,'Caves','qey_adv03_caves','The Caves',1.5,3.62,-23.42,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,3132916059),(198,0,'PeatBog','qey_adv04_bog','The Peat Bog ',561.65,-27.41,417.99,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,870105190),(199,0,'DownBelow','qey_catacomb01','The Down Below ',-195.98,-0.1,-200.16,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,184500816),(200,0,'VerminSnye','qey_catacomb02','Vermin\'s Snye',131.21,-6.92,-105.21,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,2945046990),(201,0,'CryptBetrayal','qey_catacomb03','The Crypt of Betrayal ',120.88,7.02,-49.61,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,964742035),(202,0,'CrowsTomb','qey_catacomb_epic01','Crow\'s Resting Place',3.41,1.92,8.77,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,2271733143),(203,0,'CryptDecrepit','qey_catacomb_epic02','A Decrepit Crypt',-31,-1,9,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,1435904733),(204,0,'ScarabHive','qey_catacomb_epic03','The Deathly Scarab Hive ',-20,3.37,0,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,1044089428),(205,0,'qey_catacomb_epic04','qey_catacomb_epic04','Describe me in the zones table! :)',0,0,0,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,3211469419),(206,0,'qey_catacomb_epic05','qey_catacomb_epic05','Describe me in the zones table! :)',0,0,0,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,1908807800),(207,0,'ElddarGrove','qey_elddar','The Elddar Grove',666.15,-10.14,-392.25,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,843773804),(208,0,'Cache','qey_epic01_p19_cache','The Cache',-25,0,-20,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,1930595139),(209,0,'StarcrestBank','qey_epic02_village02_bank','Starcrest: The Qeynos Exchange',0,0,0,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,1552498994),(211,0,'WillowWoodBank','qey_epic04_village05_bank','Willow Wood: The Qeynos Exchange',0,0,0,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,2824516912),(212,0,'qey_epic05_village06_scribe','qey_epic05_village06_scribe','Describe me in the zones table! :)',0,0,0,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,730617311),(213,0,'IrontoeInn','qey_epic06_p12_irontoes','Qeynos: Irontoe East Inn',0,0,0,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,3530459728),(214,0,'SneedsTradingPost','qey_epic07_p08_sneeds','Qeynos: Sneed Galliway\'s Trading Post',0,0,0,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,866837445),(215,0,'VoleensBakery','qey_epic08_p06_voleens','Qeynos: Voleen\'s Bakery',0,0,0,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,2546749187),(216,0,'qey_epic09_l02_steel','qey_epic09_l02_steel','Describe me in the zones table! :)',0,0,0,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,3864565992),(217,0,'qey_epic10_p01_bank','qey_epic10_p01_bank','Describe me in the zones table! :)',0,0,0,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,427344810),(218,0,'qey_epic11_l10_arbor','qey_epic11_l10_arbor','Describe me in the zones table! :)',0,0,0,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,3376886942),(219,0,'qey_epic12_l08_sanctum','qey_epic12_l08_sanctum','Describe me in the zones table! :)',0,0,0,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,2078500680),(220,0,'QeynosMageTower','qey_epic13_l04_towers','Qeynos: Mage Tower',719,48,114,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,374794994),(221,0,'QeynosHarbor','qey_harbor','Qeynos Harbor',999.14,-25.79,27.04,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,1739788496),(222,0,'NorthQeynos','qey_north','North Qeynos',267.77,-21.55,-19.88,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,1841518510),(223,0,'Qeynos2Room1','qey_ph_1r01','a two room apartment, version 1',0,0,0,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,3500249586),(224,0,'Qeynos2Room2','qey_ph_1r02','a two room apartment, version 2',0,0,0,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,3956101406),(225,0,'Qeynos3Room1','qey_ph_2r01','a three room house, version 1',0,0,4.95,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,1050379564),(226,0,'Qeynos3Room2','qey_ph_2r02','a three room house, version 2',0,0,0,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,2058287807),(227,0,'Qeynos4Room1','qey_ph_3r01','a four room house, version 1',0.07,-2,7.98,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,2993828484),(228,0,'Qeynos4Room2','qey_ph_3r02','a four room house, version 2',0.05,-2,8.16,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,867876040),(229,0,'Qeynos4Room3','qey_ph_3r03','a four room house, version 3',0.05,-2,8,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,1771836431),(230,0,'Qeynos6Room1','qey_ph_5r01','a six room house, version 1',-2.59,0,9.48,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,1374238603),(231,0,'SouthQeynos','qey_south','South Qeynos',477.37,-11.52,137.83,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,1504263346),(232,0,'Commonwealth','qey_tradeskill01','The Elusive Commonwealth',8.4,-0.4,-11.6,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,1504802193),(233,0,'Nettleville','qey_village01','Nettleville',684.31,-35.4,339.18,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,1309271643),(234,0,'Starcrest','qey_village02','Starcrest Commune',724.88,-35.2,325.29,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,914866192),(235,0,'Graystone','qey_village03','Graystone Yard',950.74,-25.22,-156.65,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,35815252),(236,0,'Castleview','qey_village04','Castleview Hamlet',780.79,-35.94,-94.43,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,1042690246),(237,0,'WillowWood','qey_village05','The Willow Wood',829.24,-20.36,-780.82,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,1899528945),(238,0,'Baubbleshire','qey_village06','The Baubbleshire',966.52,-18.2,-436.97,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,1133934497),(239,0,'Rivervale','rivervale','Rivervale',79.77,-11.61,33.21,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,805193270),(240,0,'rivervale_epic01_ph01','rivervale_epic01_ph01','Describe me in the zones table! :)',0,0,0,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,3504623534),(241,0,'rivervale_epic02_ph02','rivervale_epic02_ph02','Describe me in the zones table! :)',0,0,0,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,897144292),(242,0,'Runnyeye','runnyeye','Runnyeye',-58,0.11,57,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,2485707951),(243,0,'ChamberRulgax','runnyeye_epic01_eye','The Chamber of Rulgax',65.43,-34.31,192.47,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,2024822938),(244,0,'OverlordsThroneRoom','runnyeye_epic02_goblin','The Overlord\'s Throne Room',205,1,-318,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,2562976307),(245,0,'SolEye','solusekseye','Solusek\'s Eye',130.08,28.58,-125.76,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,1322389444),(246,0,'NagafensLair','solusekseye_epic01_nagafen','Nagafen\'s Lair',0.12,-0.39,54.45,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,3381789812),(247,0,'BastionFlames','solusekseye_epic02_bastion','The Bastion of Flames',-147.93,-414.98,-290.9,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,220397575),(248,0,'OratoriumThyr1','solusekseye_epic03_thyr','The Oratorium of Thyr',-204.3,-617.46,-193.09,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,2646304963),(249,0,'ThunderingSteppes','steppes','The Thundering Steppes',1000,-1,250,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,1442587250),(250,0,'CoveDecay1','steppes_epic01_cove','The Cove of Decay',-110.5,-12.28,1020.8,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,1675261020),(251,0,'PirateStash','steppes_mini01','A Pirate\'s Hidden Stash ',827.3,-13.3,1028.16,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,2597747579),(252,0,'thunderdome','thunderdome','Describe me in the zones table! :)',0,0,0,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,3492108284),(253,0,'QueensColony','tutorial_island02','Queen\'s Colony',-17.24,-5.4,223,0,-1000000,0,0,0,'',0,0,0,0,0,0,1,'NONE',0,0,0,0,NULL,300,NULL,0,235639746),(254,0,'SourceEvil','tutorial_island02_epic01','The Source of Evil',-14.5,0,-2.75,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,1139089258),(255,0,'MizansCellar','tutorial_island02_epic02','Mizan\'s Cellar',-9,-9,158,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,853356513),(256,0,'RuinsVarsoon','varsoon','The Ruins of Varsoon',95,17.9,-96.33,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,783825492),(257,0,'ChamberImmortality','vrsn_epic01_boss','Chamber of Immortality ',203.16,-12.14,138.85,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,1531502647),(258,0,'WailingCaves','wailingcaves','The Wailing Caves',-103,-33,-138,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,3367326908),(259,0,'ShardFear','shard_of_fear','Shard of Fear',-4.66,11.56,479.91,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,2913550259),(260,40,'Gorowyn1Room','exp04_rgn_gorowyn_ph_1room','Gorowyn 1 Room Apartment',0,0,0,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,3339258185),(261,40,'KunzarJungle','exp04_rgn_kunzar_jungle','Kunzar Jungle',-450,150,-870,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,135989668),(262,40,'KylongPlains','exp04_rgn_kylong_plains','Kylong Plains',742,11,203,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,3387257629),(263,40,'TimorousDeep','exp04_rgn_timorous_deep','Timorous Deep',-257.5,2.7,181.6,0,-1000000,0,0,0,'',0,0,0,0,0,0,16,'NONE',0,0,0,0,NULL,300,NULL,0,3292189791),(264,40,'FensNathsar','exp04_rgn_fens_of_nathsar','Fens of Nathsar',489.5,12.6,1509.77,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,189371831),(265,40,'JarsathWastes','exp04_rgn_jarsath_wastes','Jarsath Wastes',-1057,-83,-560,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,1721963361),(267,40,'Chelsith','exp04_dun_chelsith','Chelsith',-75,30.3,510,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,1080201912),(269,40,'KarnorsCastle','exp04_dun_karnors_castle','Karnor\'s Castle',267,-58.22,136,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,1170290470),(270,40,'Sebilis','exp04_dun_sebilis','Sebilis',18,0,4,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,1873729493),(271,40,'VeeshansPeak','exp04_dun_veeshans_peak','Veeshan\'s Peak',388,-342,1131,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,2773136085),(272,40,'TombThuuga','exp04_dun_charasis_epic01_queens','The Tomb of Thuuga',0,0,0,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,2482499672),(273,40,'Chardok','exp04_dun_chardok','Chardok',27.44,-29.78,-340.25,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,758372554),(274,40,'Gorowyn3Room','exp04_rgn_gorowyn_ph_3room','Gorowyn 3 Rooms Apartment',0,0,0,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,207940048),(275,40,'Gorowyn5Room','exp04_rgn_gorowyn_ph_5room','Gorowyn 5 Rooms Apartment',0,0,0,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,3852789577),(276,40,'Pawbuster','exp04_dun_karnors_castle_epic01_pawbuster','The Execution Throne Room',-12.86,1.95,29.54,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,4050761660),(277,40,'ProtectorsRealm','exp04_dun_sebilis_epic01_crypt','The Protector\'s Realm',-12,-13,344,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,1896505173),(278,0,'OutpostOverlord','tutorial_island02','Outpost of the Overlord',-12.43,-4.94,222.26,0,-1000000,0,0,0,'',0,0,0,0,0,0,2,'NONE',0,0,0,0,NULL,300,NULL,0,2331579180),(279,0,'Truthbringer','qey_tradeskill01','The Charter of the Truthbringer',8.4,-0.4,-11.6,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,2254477089),(280,0,'Deductive','qey_tradeskill01','The Deductive Directory',8.4,-0.4,-11.6,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,2963804548),(281,0,'Ironforge','qey_tradeskill01','The Ironforge Exchange',8.4,-0.4,-11.6,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,3822793044),(282,0,'Wayfarers','qey_tradeskill01','Wayfarer\'s Stockpilers',8.4,-0.4,-11.6,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,3109275695),(283,0,'WorkshopGood','qey_tradeskill01','Tradeskiller\'s Workshop',8.4,-0.4,-11.6,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,2442508618),(284,0,'CoveDecay6','steppes_epic01_cove','The Cove of Decay: A Treaty for Treasure',-110.5,-12.28,1020.8,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,3368285039),(285,0,'CircleVaniki','fprt_tradeskill01','The Circle of Vaniki',2.1,-0.19,-4.07,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,1207827539),(286,0,'Wanderlust','fprt_tradeskill01','The Ring of Wanderlust',2.1,-0.19,-4.07,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,1815400861),(287,0,'Ransackers','fprt_tradeskill01','The Ransackers Annex',2.1,-0.19,-4.07,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,2343039238),(288,0,'DarkBargainers','fprt_tradeskill01','The Dark Bargainers',2.1,-0.19,-4.07,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,2653325751),(289,0,'WarHagglers','fprt_tradeskill01','The War Hagglers',2.1,-0.19,-4.07,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,87161584),(290,0,'NepetaCataria','fprt_tradeskill01','Nepeta Cataria',2.1,-0.19,-4.07,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,1918315345),(291,0,'Coalition','fprt_tradeskill01','The Coalition Crafter\'s Association',2.1,-0.19,-4.07,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,760423874),(292,0,'Luminary','qey_tradeskill01','The Luminary Cache',8.39294,0,-10.6062,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,3429099711),(293,0,'Runnyeye2','runnyeye_advanced','Runnyeye: The Gathering',-93.4526,-27.4416,58.496,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,655533918),(294,50,'Veksar1','exp05_dun_veksar','Veksar: The Invasion',0,0,0,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,1027562245),(295,40,'VoES','exp04_dun_charasis_north','Charasis: Vault of Eternal Sleep',0,0,23,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,760135195),(296,40,'MaidensChamber','exp04_dun_charasis_south','Charasis: Maiden\'s Chamber',0,0,-23,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,1193908363),(297,40,'TempleKorsha','exp04_dun_chardok_epic01_throne','The Temple of Kor-Sha',816,-27,206,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,2801650478),(298,40,'CourtKorucust','exp04_dun_chardok_epic02_prison','Court of Korucust',-650,-66,204,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,541835034),(299,40,'ChamberDestiny','exp04_dun_chelsith_epic01_behemoth','The Chamber of Destiny',192,-10,29,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,2844302977),(300,40,'VenrilsLair','exp04_dun_sebilis_epic02_venril','Venril Sathir\'s Lair',0,-10,144,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,2553967894),(301,40,'TrakanonsLair','exp04_dun_veeshans_peak_epic01_trakanon','Trakanon\'s Lair',0,0,0,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,913159877),(302,0,'ShardHate','shard_of_hate','Shard of Hate',45,0.2,290,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,4135995094),(303,40,'CryptAgony','exp04_dun_sebilis_epic01_crypt','The Crypt of Agony',-12,-13,344,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,266969978),(305,0,'ArticaesLair','everfrost_epic01_menagerie','Ar\'ticae\'s Lair',-52.73,-23.55,-319.22,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,3796545588),(306,0,'Bloodskull1','cmmn_epic01_orc','Bloodskull Valley: Maulic\'s Stronghold',-9.18,-48.2,732.4,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,1447116011),(307,0,'Bloodskull3','cmmn_epic01_orc','Bloodskull Valley: Righting the Scales',-9.18,-48.2,732.4,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,1939902408),(308,0,'Bloodskull4','cmmn_epic01_orc','Bloodskull Valley: The Excavation Site',-9.18,-48.2,732.4,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,2140909834),(309,0,'Bloodskull5','cmmn_epic01_orc','Bloodskull Valley: The Training Grounds',-9.18,-48.2,732.4,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,3502321105),(310,0,'TremblingLagoon2','feerrott_epic01_temple','Trembling Lagoon: Cleansing of the Cove',-904.3,-9.78,302.64,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,577145340),(311,0,'CoveDecay2','steppes_epic01_cove','The Cove of Decay: Epic Angler',-110.5,-12.28,1020.8,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,3356317793),(312,0,'CoveDecay3','steppes_epic01_cove','Cove of Decay: Horror Beneath the Waves',-110.5,-12.28,1020.8,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,1282445722),(313,0,'CoveDecay5','steppes_epic01_cove','Cove of Decay: Mjolni\'s Lair',-110.5,-12.28,1020.8,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,295656652),(314,0,'IsleRefuge2','tutorial_island02','Darathar\'s Flight',-17.24,-5.4,223,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,3299576964),(315,0,'Deathfist2','deathfist','Deathfist Citadel: Assault',0,0,55.18,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,1875388458),(316,0,'Deathfist3','deathfist','Deathfist Citadel: Onslaught',0,0,55.18,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,1654839403),(317,0,'Deathfist4','deathfist','Deathfist Citadel: The Arena of Zek',0,0,55.18,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,2388724028),(318,0,'DrayeksChamber2','permafrost_epic01_icebound','Drayek\'s Chamber: Throne of the Kromise King',1.02,59.81,-406.31,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,1179826618),(319,0,'TremblingLagoon3','feerrott_epic01_temple','Trembling Lagoon: Dythra\'s Lair',-904.3,-9.78,302.64,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,1536753323),(320,0,'EchoesTime1','cmmn_epic02_mage','Echoes of Time',863.77,-18.31,581.92,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,710155441),(321,0,'Firemyst2','antonica_epic02_firemyst','The Firemyst Gully: A Gallant Confrontation',-1093.72,-25.04,686.59,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,3335465554),(322,0,'Firemyst3','antonica_epic02_firemyst','The Firemyst Gully: In Pursuit',-1093.72,-25.04,686.59,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,1877036992),(323,0,'Firemyst4','antonica_epic02_firemyst','The Firemyst Gully: Vanudozalon\'s Lair',-1093.72,-25.04,686.59,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,2192926045),(324,0,'GrimgashsLair','tutorial_island02_epic01','Grimgash\'s Lair',-14.5,0,-2.75,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,2942727750),(325,0,'IsleRefuge1','tutorial_island02','Isle of Refuge',-17.24,-5.4,223,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,2252985298),(326,0,'Icespire','everfrost_epic02_icespire','Icespire Summit',-63.16,58.9,-885.42,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,4066447367),(327,0,'DruidRing','antonica_epic01_vale','Imperiled Druid Ring',-2526.79,15.67,-50.07,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,4155975111),(328,0,'ShatteredVale3','antonica_epic01_vale','Invasion of the Vale',-2526.79,15.67,-50.07,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,3338713433),(329,0,'MaidensGulch3','lavastorm_epic02_gulch','Maiden\'s Gulch: Rescue of the Sage',-193.04,-0.92,-344.69,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,1526471034),(330,0,'Nektropos2','nektropos_castle','Nektropos Castle: Craftsman Errands',0,0,58,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,1334746619),(331,0,'Nektropos3','nektropos_castle','Nektropos Castle: The Return',0,0,58,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,3051981584),(332,0,'Nektropos4','nektropos_castle','Nektropos Castle: Tribulation',0,0,58,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,3927417108),(333,0,'SanctumFear3','cazicthule_epic01_sanctum ','The Sanctum of Fear: Niscanith\'s Lair',-1.02,-10,-178.26,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,4089148686),(334,0,'ShatteredStillness','antonica_epic02_firemyst','Shattered Stillness',-1093.72,-25.04,686.59,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,3520240139),(335,0,'ShatteredVale2','antonica_epic01_vale','The Shattered Vale: A Bold Confrontation',-2526.79,15.67,-50.07,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,1609089866),(336,0,'ShatteredVale4','antonica_epic01_vale','The Shattered Vale: Lordly Confrontation',-2526.79,15.67,-50.07,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,2695716024),(337,0,'ShatteredVale5','antonica_epic01_vale','The Shattered Vale: Stones of the Avatars',-2526.79,15.67,-50.07,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,3330380441),(338,0,'SpiritsLost','cazicthule','Spirits of the Lost',-0.05,7.89,154.43,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,3324942373),(339,0,'CauldronHollow','nektulos_epic01_cauldroncove','The Cauldron Hollow',946,10,-621.5,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,3723528959),(340,0,'CaveWonder1','enchanted_mini01 ','The Caves of Wonder',-79.8,-2.63,-1120.98,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,3327956550),(341,0,'CaveWonder2','enchanted_mini01','Heroic: The Caves of Wonder',-79.8,-2.63,-1120.98,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,3221976462),(342,0,'SanctumFear2','cazicthule_epic01_sanctum ','Sanctum of Fear: Chamber of the Keeper',-1.02,-10,-178.26,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,507325671),(343,0,'MaidensGulch2','lavastorm_epic02_gulch','Maiden\'s Gulch: Commune of K\'Dal',-193.04,-0.92,-344.69,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,1048492947),(344,0,'CoveDecay4','steppes_epic01_cove','The Cove of Decay: A Heroic Confrontation',-110.5,-12.28,1020.8,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,4248896629),(345,0,'TombValor2','befallen_epic01','Tomb of Valor: Defiled',-4.74,-45.79,-47.64,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,1782317725),(346,0,'EternalGorge2','cmmn_epic02_mage','The Eternal Gorge: A Daring Confrontation',863.77,-18.31,581.92,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,1806482132),(347,0,'EternalGorge3','cmmn_epic02_mage','The Eternal Gorge: Tears of the Daughters',863.77,-18.31,581.92,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,1153144978),(348,0,'CircleElders','tutorial_island02_epic01','The Circle of Elders',-14.5,0,-2.75,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,3366202526),(349,0,'Gobblerock','fprt_sewer02','Gobblerock\'s Hideout',-126,0,59.6,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,1041909749),(350,0,'WorkshopEvil','fprt_tradeskill01','Tradeskiller\'s Workshop',3,1,-3,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,3046659043),(351,0,'HeraldsKLorn','fprt_tradeskill01','The Heralds of K\'Lorn',8.4,-0.4,-11.6,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,2136244020),(352,0,'LairNecromancer','fallengate_epic01_boss','The Lair of the Necromancer',37,-26,-189,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,2347698360),(353,10,'LibraryLight2','exp01_cty_majdul_library','The Library of Light: Scholar Errands',0,-0.2,0,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,2219248866),(354,20,'NestGreatEgg2','exp02_dun_shrines_of_sky_epic02_nest','The Nest of the Great Egg: Outfitter Errands',38.48,112.78,0.03,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,2124039412),(355,0,'OratoriumThyr2','solusekseye_epic03_thyr','The Oratorium of Thyr: Allim\'s Fate',-204.3,-617.46,-193.09,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,402095699),(356,0,'QSSBootstrutter','boat_06p_feerrott','The QSS Bootstrutter',2.14,1.21,-15.81,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,3305484660),(357,0,'RumblerCaves','steppes_mini01','The Rumbler Caves',827.3,-13.3,1028.16,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,4050420393),(358,0,'SeaBiscuit1','boat_06p_enchanted','The Sea Biscuit: Enchanted Journey',2.14,1.21,-15.81,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,1980603774),(359,0,'SeaBiscuit2','boat_06p_enchanted','The Sea Biscuit: Heroic Enchanted Journey',2.14,1.21,-15.81,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,2333013113),(360,0,'SeaBiscuit3','boat_06p_feerrott','The Sea Biscuit: Heroic Jungle Cruise',2.14,1.21,-15.81,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,2365341412),(361,0,'SeaBiscuit4','boat_06p_orcishwastes','The Sea Biscuit: Heroic Orc Excursion',2.14,1.21,-15.81,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,1690191457),(362,0,'SeaBiscuit5','boat_06p_feerrott','The Sea Biscuit: Jungle Cruise',2.14,1.21,-15.81,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,3949813243),(363,0,'SeaBiscuit6','boat_06p_orcishwastes','The Sea Biscuit: Orc Excursion',2.14,1.21,-15.81,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,1083287642),(364,0,'Stalwart','qey_tradeskill01','The Stalwart Township',6,-0.48,-10.2,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,1246738728),(365,0,'DrownedCaverns2','adv02_dun_drowned_caverns','The Drowned Caverns: Brutal Acts of War',96,23,4,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,2128757352),(366,0,'DrownedCaverns3','adv02_dun_drowned_caverns','The Drowned Caverns: Flammable Fur',96,23,4,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,2366967768),(367,0,'DrownedCaverns4','adv02_dun_drowned_caverns','The Drowned Caverns: Hot Water',96,23,4,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,817852260),(368,0,'DrownedCaverns5','adv02_dun_drowned_caverns','The Drowned Caverns: Outer Grotto',96,23,4,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,1358293133),(369,0,'Splitpaw2','adv02_dun_sundered_splitpaw','Sundered Splitpaw: Anvilpaw\'s Grotto',0,-2.5,0,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,246626574),(370,0,'Splitpaw3','adv02_dun_sundered_splitpaw','Sundered Splitpaw: Captive Audience',0,-2.5,0,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,1406658297),(371,0,'Splitpaw4','adv02_dun_sundered_splitpaw','Sundered Splitpaw: Crawler Nest',0,-2.5,0,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,2072242411),(372,0,'Splitpaw5','adv02_dun_sundered_splitpaw','Sundered Splitpaw: Delving into the Darkness',0,-2.5,0,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,1568159668),(373,0,'Splitpaw6','adv02_dun_sundered_splitpaw','Sundered Splitpaw: Gladiator\'s Triumph',0,-2.5,0,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,1108437045),(374,0,'Splitpaw7','adv02_dun_sundered_splitpaw','Sundered Splitpaw: Hideout',0,-2.5,0,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,4160317729),(375,0,'Splitpaw8','adv02_dun_sundered_splitpaw','Sundered Splitpaw: Trial of Harclave',0,-2.5,0,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,640136091),(376,0,'Splitpaw9','adv02_dun_sundered_splitpaw','Sundered Splitpaw: Upper Tunnels',0,-2.5,0,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,1849807013),(377,50,'QeynosGuild1','qey_guildhall_tier1','Guild Hall',-0.188056,0.005529,-4.87351,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,3530974985),(378,50,'QeynosGuild2','qey_guildhall_tier2','Large Qeynos Guild Hall',-0.188056,0.005529,-4.87351,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,2736504342),(379,50,'AntonicaGuild','qey_guildhall_tier3','Antonica Guild Hall',665.435,-35.8975,1485.44,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,3464306773),(380,50,'qey_guildhall_tier4','qey_guildhall_tier4','Qeynos: Tier 4 Guild Hall',0,0,0,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,1113185173),(381,50,'FreeportGuild1','fprt_guildhall_tier1','Guild Hall',0.059904,0.153986,15.6427,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,2493701805),(382,50,'FreeportGuild2','fprt_guildhall_tier2','Large Freeport Guild Hall',0.003907,0.153989,16.3804,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,1615399354),(383,50,'CommonlandsGuild','fprt_guildhall_tier3','Commonlands Guild Hall',-1468.19,-136.974,-1307.95,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,1257767219),(384,50,'fprt_guildhall_tier4','fprt_guildhall_tier4','Freeport: Tier 4 Guild Hall',0,0,0,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,3537265728),(385,50,'MoorsYkesha','exp05_rgn_innothule','Moors of Ykesha',1911,454,1013,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,2788275878),(386,50,'BefallenAsylum','exp05_dun_befallen_asylum','Befallen: Necrotic Asylum',23.25,0.25,-0.1,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,1633749115),(387,50,'BefallenCavern','exp05_dun_befallen_cavern','Befallen: Cavern of the Afflicted',-2.25,-0.1,4,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,752000273),(388,50,'BefallenForsaken','exp05_dun_befallen_forsaken','Befallen: Halls of the Forsaken',7.25,0.25,0.1,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,1084983315),(389,50,'GukUpper','exp05_dun_guk_upper','The Ruins of Guk: Halls of the Fallen',-33.5,0.2,12.5,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,107619541),(390,50,'GukLower','exp05_dun_guk_lower','The Ruins of Guk: The Lower Corridors',3.33,-2,-2.5,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,413842749),(391,50,'GukStronghold','exp05_dun_guk_stronghold','The Ruins of Guk: Ykesha\'s Outer Stronghold',0.5,-0.5,3.5,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,1474385698),(392,50,'GukStrongholdRaid','exp05_dun_guk_stronghold_raid','Ykesha\'s Inner Stronghold',0,0,0,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,1898012092),(393,50,'Korsha','exp05_dun_korsha','Emperor Atrebe\'s Laboratory: The Fabled City of Kor-sha',0.25,0.1,30.5,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,2386622022),(394,50,'Veksar2','exp05_dun_veksar','Veksar: The Sunken Theater',0,0,0,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,371997069),(395,50,'MiragulEpic','exp05_dun_miragul_epic01','Describe me in the zones table! :)',0,0,0,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,9398401),(396,50,'MiragulAnathema','exp05_dun_miragul_lower','Miragul\'s Phylactery: The Anathema',10.25,-0.2,9.3,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,1724480869),(397,50,'MiragulCrucible','exp05_dun_miragul_shard','Miragul\'s Phylactery: The Crucible',-31,0,-56,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,2882183615),(398,50,'MiragulScion','exp05_dun_miragul_upper','Miragul\'s Phylactery: Scion of Ice',-1.5,0,13.5,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,3233187539),(399,50,'MistmooreAbbey','exp05_dun_mistmoore_abbey','Evernight Abbey',0,-0.25,0,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,3136916931),(400,50,'MistmooreDragon','exp05_dun_mistmoore_dragon','Zarrakon\'s Abyssal Chamber',0,-16,0,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,3669361454),(401,50,'MistmooreManor','exp05_dun_mistmoore_manor','Mistmyr Manor',0,-0.3,0,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,238657033),(402,50,'MistmooreRepository','exp05_dun_mistmoore_repository','Ravenscale Repository',0,-0.22,0,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,1099149777),(403,50,'WardElements','exp05_dun_najena_atheneum','Ward of Elements',-67,-354,106,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,1246840166),(404,50,'NajenaForge','exp05_dun_najena_forge','The Deep Forge',-0.25,0.15,24,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,1435795796),(405,50,'NajenaHollow','exp05_dun_najena_hollow','Najena\'s Hollow Tower',0.4,-11.6,88.8,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,1985747884),(406,50,'Bazzul','exp05_dun_void_anchor','Anchor of Bazzul',-515.3,-0.6,657.8,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,297392421),(407,50,'Ferzhul','exp05_dun_void_palace','Palace of Ferzhul',-135.08,6.66,-10.44,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,274203338),(408,50,'PalaceAncientOne','exp05_dun_void_palace','Palace of the Ancient One',-135.08,6.66,-10.44,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,375924650),(409,50,'Ankzul','exp05_dun_void_pit','Obelisk of Ahkzul',546.15,6.1,-318.3,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,524307527),(410,40,'NuRoga','exp04_dun_droga_nurga','Nu\'Roga',-4.25,0,41.6,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,2653575693),(411,0,'IcyKeep1','permafrost','The Icy Keep (Easy)',-49.07,16,208,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,2057982584),(412,0,'Frostfell','everfrost_frostfell','Frostfell Wonderland Village',65,-3,-1200,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,3311558711),(413,0,'TheFuture','everfrost_frostfell','The Future',-502.92,-6,-355.49,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,4130976405),(414,0,'KritchatsHouse','fprt_ph_1r01','Bobby Kritchat\'s House',-6.37,0.7,-13.3,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,2297313179),(415,0,'McScrooglesPast','qey_epic03_village03_ph','McScroogle\'s Past',15.57,-0.5,-9.18,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,2876833616),(416,0,'McScrooglesBoudoir','qey_ph_1r01','Mr. McScroogle\'s Boudoir',-6.21,0,-0.2,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,4197602164),(417,30,'McScroogleHQ','exp03_dun_klakanon_epic01_menace','McScroogle Corp. HQ',129,24,-66.5,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,1634382156),(418,0,'IcyKeep2','permafrost','The Icy Keep (Hard)',-49.07,16,208,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,431849093),(419,50,'AntoniasChambers','qey_guildhall_tier1','Antonia Bayle\'s Chambers',0,0,-5,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,3301442772),(420,0,'Firemyst5','antonica_epic02_firemyst','The Firemyst Gully: Supply Stocking',-1093.72,-25.04,686.59,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,138580763),(421,30,'RilgorsChambers','exp03_dun_klakanon_epic01_menace','Rilgor Plegnog\'s Chambers',129,24,-66.5,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,1821662383),(422,30,'ClockworkWorkshop','exp03_dun_klakanon ','The Clockwork Workshop',130,9,52,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,1180254437),(423,0,'EndlessCatacombs','adv04_dun_endless','The Endless Catacombs',-33.7,-89.42,24.8,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,2483512159),(424,50,'OverlordsOffice','fprt_guildhall_tier2','The Overlord\'s Office',0,0,16.3,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,3243271695),(425,50,'TombMadCrusader','exp05_dun_befallen_cavern','Tomb of the Mad Crusader',-2.25,-0.1,4,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,675527825),(426,0,'WitchesCove','nektulos_epic01_cauldroncove','The Witches\' Cove',894.775,10,-481.346,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,3151346832),(427,0,'Firemyst','antonica_epic02_firemyst','The Firemyst Gully',-1093.72,-25.04,686.59,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,1001393294),(428,50,'DryadGrotto','exp05_dun_guk_upper_epic01_cave','Enchanted Dryad Grotto',13.8052,-32.8927,-322.195,0,-1000000,0,1,80,'0',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,4187233331),(429,10,'PoetsPalace2','exp01_dun_poets_palace_community','Describe me in the zones table! :)',0,0,0,0,-1000000,0,1,80,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,3656598577),(431,40,'CharasisWest','exp04_dun_charasis_west','Emperor\'s Athenaeum',0,0,0,0,-1000000,0,1,80,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,241278901),(432,40,'KurnsTower','exp04_dun_kurns_tower','Describe me in the zones table! :)',0,0,0,0,-1000000,0,1,80,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,4282593199),(433,40,'MoppetShoppe','exp04_dun_sebilis_quarters','The Moppet Shoppe',-17.4,31,479.8,0,-1000000,0,1,80,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,1525821771),(434,50,'LowerGuk1','exp05_dun_guk_lower_epic01_cave','Describe me in the zones table! :)',0,0,0,0,-1000000,0,1,80,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,2474119725),(435,0,'Mystic','live_epic_mystic','Describe me in the zones table! :)',0,0,0,0,-1000000,0,1,80,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,1533911469),(436,0,'HauntedUnrest','live_haunted_unrest','Describe me in the zones table! :)',0,0,0,0,-1000000,0,1,80,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,1547071487),(437,0,'RodcetDiety','live_rodcet_diety','Describe me in the zones table! :)',0,0,0,0,-1000000,0,1,80,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,1148846749),(438,0,'Buccaneers','befallen_epic01','The Buccaneer\'s Rest',3.03794,-45,-44.6673,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,622152942),(439,0,'TombNight2','mod01_dun_tombs_of_night','The Tombs of Night: A Search For Answers',120.016,-0.5,120.964,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,2581166184),(440,50,'LegendsMuseum','qey_guildhall_tier1','Legends of Norrath Museum',1.13356,1,-0.742676,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,4025127940),(441,10,'ZygomydGrotto','exp01_rgn_sinking_sands_epic01_lockjaw','Enchanted Zygomyd Grotto',213.457,-4.79144,-46.9508,0,-1000000,0,1,80,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,422052312),(442,30,'BrownieGrotto','exp03_dun_hollow_stump2','Enchanted Brownie Grotto',-216.12,-38.9957,29.9802,0,-1000000,0,1,80,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,1114913268),(443,30,'FayGrotto','exp03_rgn_emerald_halls_event','Enchanted Fay Grotto',389.893,94.241,-800.458,0,-1000000,0,1,80,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,3424608148),(444,50,'NaiadGrotto','exp05_dun_guk_lower_epic01_cave','Enchanted Naiad Grotto',-4.4465,-2.40918,2.62357,0,-1000000,0,1,80,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,2260864416),(445,0,'HoldFallen','fprt_epic05_a02_temple01','Hold of the Fallen',10.7279,1,-0.867747,0,-1000000,0,1,80,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,3192830649),(446,0,'RitePassage','fprt_epic05_a02_temple01','Rite of Passage',9.72787,1,1.13225,0,-1000000,0,1,80,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,3789732280),(447,0,'CondemnedCatacomb','qey_catacomb01','The Condemned Catacomb',-217.584,0.5,-56.58,0,-1000000,0,1,80,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,1996344389),(448,0,'PrivateLounge','qey_ph_1r01','Bar of Brell: Private Lounge',-6.21334,0.0025,-0.20449,0,-1000000,0,1,80,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,2145600684),(449,0,'Blumbles','steppes_mini01','Blumble\'s Halfling Hole',820.961,-12,1023.16,0,-1000000,0,1,80,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,2556324114),(450,0,'SmallHideout','tutorial_island02_epic02','a small hideout',-4.89851,-8,161.891,0,-1000000,0,1,80,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,1266491077),(451,60,'LibraryErudin','exp06_dun_erudin_erudin01','Library of Erudin',0,0,0,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,2187208939),(452,60,'ResearchHalls','exp06_dun_erudin_erudin02','Erudin Research Halls',0,0,0,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,1883324183),(453,60,'PalaceErudin','exp06_dun_erudin_erudin03','Royal Palace of Erudin',0,0,0,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,2369621886),(454,60,'Vigilant1','exp06_dun_sentinal','The Vigilant: Final Destruction',0,0,0,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,2212927518),(455,60,'TheHole','exp06_dun_thehole','The Hole',19.74,101.43,-66.3,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,4112900241),(456,60,'DemitriksBastion','exp06_dun_thehole_wing1','Demitrik\'s Bastion',19.74,101.43,-66.3,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,1578585151),(457,60,'TheOuterVault','exp06_dun_thehole_wing2','The Outer Vault',0,0,0,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,295985198),(458,60,'SpiritsResonance','exp06_dun_thehole_wing3','Spirit\'s Resonance',336.91,114.34,-254.43,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,356553526),(459,60,'ToxxuliasMound','exp06_dun_toxxulia_mound01','Lair of the Dragon Queen',12.9,148.77,2427.59,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,3838745552),(460,60,'Conservatory','exp06_dun_vastydeep01','Vasty Deep: The Conservatory',-9.24,-7,-30.71,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,954080035),(461,60,'AbandonedLabs','exp06_dun_vastydeep02','Vasty Deep: The Abandoned Labs',-0.89,-1.57,-1.28,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,2073480066),(462,60,'VestigialCella','exp06_dun_vastydeep03','Vasty Deep: The Vestigial Cella',-12.9,-10,-3.06,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,1092966222),(463,60,'AbominableLaboratory','exp06_dun_vastydeep02','Perah\'Celsis\' Abominable Laboratory',14.47,-34.05,66.94,280,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,2962342588),(464,60,'StonebruntHighlands','exp06_rgn_odus_north','The Stonebrunt Highlands',-481.65,370.17,1513.09,45,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,2369118810),(465,60,'SunderedFrontier','exp06_rgn_odus_south','The Sundered Frontier',2213.66,-210.17,2469.19,90,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,168443344),(466,60,'exp06_rgn_odus_south_epic01_panda','exp06_rgn_odus_south_epic01_panda','Describe me in the zones table! :)',0,0,0,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,1822966042),(467,0,'BG_Ganak','battleground_ctf','Battlefield of Ganak',0,0,0,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,2342906850),(468,0,'BG_Smugglers','battleground_nodes','Smugglers Den',0,0,0,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,2939036782),(469,0,'BG_Gears','battleground_relic01','Gears of Klak\'Anon',0,0,0,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,1385404002),(470,61,'FrostfangSea','halas','FrostFang Sea',-229.542,34.6202,-725.879,0,-1000000,0,1,80,'',0,0,0,0,0,0,32,'NONE',0,0,0,0,NULL,300,NULL,0,3132425949),(472,0,'cmmn_epic01_orc','cmmn_epic01_orc','Bloodskull Valley: Kaljanar\'s Lair',-8.26939,-46,733.468,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,4207969976),(473,0,'fprt_ph_5r01','fprt_ph_5r01','the Thexian Meeting',-3.87325,-0.497519,-2.07887,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,1293060228),(474,0,'solusekseye_epic03_thyr','solusekseye_epic03_thyr','The Oratorium of Thyr: Deserted',-205.749,-617,-189.786,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,1724471149),(475,0,'MurkwaterNook','fprt_sewer_epic03','The Murkwater Nook',3.80113,0.5,-17.8084,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,2224401447),(476,0,'ShatteredStillnessEpic','antonica_epic02_firemyst','Shattered Stillness: Epic',-1187.3,-1187.3,-1187.3,0,-1000000,0,1,80,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,19001049),(477,0,'PiratesStashHeroic','steppes_mini01','Heroic: A Pirate\'s Hidden Stash',820.961,-12,1025.16,0,-1000000,0,1,80,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,2609903017),(478,0,'RumblerCavesHeroic','steppes_mini01','Heroic: Rumbler Caves',955.493,-22,1192.34,0,-1000000,0,1,80,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,2259272861),(479,0,'HollowHedge','live_haunted_cauldroncove','The Hollow Hedge',884.89,7.44304,-476.69,0,-1000000,0,1,80,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,697470619),(480,70,'GreatDivide','exp07_rgn_great_divide','Great Divide',-1422.07,-510.27,-2275.1,35.46,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,2941246892),(481,70,'EasternWastes','exp07_rgn_eastern_wastes','Eastern Wastes',-946.3,-336.29,2365.81,220,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,627308595),(482,70,'CrystalCaverns','exp07_dun_crystalcavern','Crystal Caverns: Collapse',23,-34.32,91.35,260,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,4189128104),(483,70,'KaelDrakkel','exp07_dun_kael_drakkel','Kael Drakkel',0,0,0,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,2072927759),(484,70,'IceshardKeep','exp07_dun_kael_iceshard_keep','Iceshard Keep',-563.9,73.3,-25.17,180,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,1856150992),(485,70,'TempleZek','exp07_dun_kael_temple_zek','The Temple of Rallos Zek',-618.54,76.9,-1110.49,20,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,2060249267),(486,70,'ThroneStorms','exp07_dun_kael_throne','Throne of Storms',153.28,20.17,1614.75,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,3674709028),(487,70,'KraytocsFortress','exp07_dun_kraytocs_fortress','Kraytoc\'s Fortress Of Rime',0,0,0,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,3842703654),(488,70,'TowerFrozenShadow','exp07_dun_toweroffrozenshadow','Tower of Frozen Shadow: Shadowed Corridors',2,-2,18.5,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,2305975907),(489,70,'ForgottenPools','exp07_dun_velks_forgotten_pools','Forgotten Pools',0,0,0,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,2351575362),(490,70,'TheAscent','exp07_dun_velks_the_ascent','The Ascent',-448,115,-285,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,737340354),(491,0,'ShatteredVale6','antonica_epic01_vale_gu54','Describe me in the zones table! :)',-2526.79,15.67,-50.07,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,1733527721),(492,50,'GukSpire','exp05_dun_guk_spire','Zraxth\'s Unseen Arcanum',0,0,0,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,4258451007),(493,50,'PalaceAncient','exp05_dun_void_palace_crafter','Palace of the Ancient One',0,0,0,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,417408192),(494,60,'UnderfootDepths','exp06_dun_thehole_raid','Underfoot Depths',0,32,-63,180,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,3918641367),(495,70,'SullonsSpire','exp07_dun_drunder_sullon_spire','Sullon\'s Spire',0,0,0,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,2509995897),(496,70,'TallonsStronghold','exp07_dun_drunder_tallon_stronghold','Tallon\'s Stronghold',0,0,0,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,4211773782),(497,70,'VallonsTower','exp07_dun_drunder_vallon_tower','Vallon\'s Tower',0,0,0,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,682362450),(498,70,'OuterKael','exp07_dun_kael_drakkel_hub','Outer Kael',-2135,57.36,-1200,220,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,2607747591),(499,70,'Thurgadin','exp_07_thurgadin_velious','Thurgadin, City of the Coldain',985,-308,367,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,3581557641),(501,61,'Halas1Room','halas_ph_1room','Halas One Room Housing',51.16,49.48,138.12,179,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,802201839),(502,61,'Halas3Room','halas_ph_3room','New Halas Three Room Housing',34.38,49.48,-3.1,270,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,2463865530),(503,61,'Halas5Room','halas_ph_5room','New Halas Five Room Housing',33.78,49.48,-154.57,270,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,3741636536),(504,0,'SummerHome','home_everfrost_menagerie','Everfrost Summer Home',0,0,0,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,1539707629),(505,10,'VacationSuite','home_majdul_bottle','Maj\'Dul Vacation Suite',0,0,0,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,1540644614),(506,10,'PersonalLibrary','home_majdul_library','Personal Library',0,0,0,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,3298151362),(507,0,'OperaHouse','home_neriak_opera','Private Opera House',0,0,0,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,834698580),(508,0,'Dojo','home_qeynos_dojo','Personal Dojo',0,0,0,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,3841277655),(509,0,'live_epic_mystic_odus','live_epic_mystic_odus','Describe me in the zones table! :)',0,0,0,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,486657895),(510,61,'SkybladeSkiff','live_ph_skyblade01','Skyblade Skiff',-0.3,9.86,76.62,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,3371790322),(511,0,'MistmooreCragsEstate','mistmoore_ph_5r01','Mistmoore Crags Estate',6.89,0.3,-11.2,112.46,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,1718101213),(512,0,'IcyKeep','permafrost_frostfell','The Icy Keep (Easy)',0,0,0,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,1450981306),(513,0,'LoveShard','shard_of_love','Shard of Love: A Moment of Valor',33.32,-7.56,105.31,11,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,599278352),(514,0,'veteran_ph_mistmoore','veteran_ph_mistmoore','Describe me in the zones table! :)',0,0,0,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,2561929907),(515,50,'HalasGuild1','qey_guildhall_tier1','Halas Guild Hall',0,0,0,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,285232141),(516,61,'IllbodingDark','halas_epic01_necro','Cave of Illboding Dark',738.774,41.9821,133.181,0,-1000000,0,12,15,'Instanced Indoor',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,3635449592),(517,61,'IllbodingDark1','halas_epic01_necro','Cave of Illboding Dark: The Source',738.774,41.9821,133.181,0,-1000000,0,12,15,'Instanced Indoor',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,3649530009),(522,60,'VastyDeep','exp06_dun_vastydeep04','The Vasty Deep',14,-34,66,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,874710987),(523,60,'RoehnTheer','exp06_dun_erudin_erudin03','The Palace of Roehn Theer',-4,3,3,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,2576445076),(524,10,'DelvingDead','exp01_dun_silent_city','Silent City: The Delving Dead',143,31,160,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,710129786),(525,0,'TangledWeeds2','enchanted_mini01','Heroic: Cavern of Tangled Weeds',-79.8,-2.63,-1120.98,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,1850595577),(526,0,'DarkenedDen','orcishwastes_mini01','The Darkened Den',353,-121.77,-57.34,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,1976475018),(527,0,'DarkenedDen2','orcishwastes_mini01','Heroic: The Darkened Den',353,-121.77,-57.34,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,3511599308),(528,0,'TallonHalls2','orcishwastes_mini01','Heroic: The Tallon Hording Halls',353,-121.77,-57.34,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,3177504651),(529,0,'SullonMines2','orcishwastes_mini01','Heroic: The Sullon Mines',353,-121.77,-57.34,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,2808492783),(530,0,'TombNight3','mod01_dun_tombs_of_night','The Tombs of Night: Retribution',120.016,-0.5,120.964,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,3382395703),(531,0,'EchoesTime2','cmmn_epic02_mage','Echoes of Time: Epic',863.77,-18.31,581.92,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,1417748158),(532,0,'IcyKeep3','permafrost_frostfell','Icy Keep: Retribution',0,0,0,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,3963619840),(533,0,'Acquisition','nektulos_mini01','Acquisition',2.53,2.46,-3.88,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,233219426),(534,0,'QinLo1','adv04_dun_endless','Trial of Qin Lo: Solo',-33.7,-89.42,24.8,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,NULL,300,NULL,0,3975257256),(535,80,'ChampionsRespite','battleground_lobby','Champion\'s Respite',22.4925,1,-28.5045,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,'',300,'',0,581603936),(536,80,'TenebrousRefuge','home_floating_island','Tenebrous Island Refuge',-41.4936,-1.48073,96.1204,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,'',300,'',0,912708921),(537,80,'SleepersTomb','exp08_dun_sleepers_tomb','Sleeper\'s Tomb: the Awakening',-17.01,-9,24.93,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,'',300,'',0,1048562755),(538,80,'SleepersTomb1','exp08_dun_sleepers_tomb_destroyed','Sleeper\'s Tomb: Unearthed [Raid]',-23,-10,3.5,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,'',300,'',0,257992003),(539,80,'SleepersTomb2','exp08_dun_sleepers_tomb_destroyed','Sleeper\'s Tomb [Contested]',-7,-10,-2.5,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,'',300,'',0,207236618),(540,80,'SleepersTomb3','exp08_dun_sleepers_tomb','Sleeper\'s Tomb: The Forgotten Catacombs [Advanced Solo]',413.5,-118,-84.2,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,'',300,'',0,2674969966),(541,80,'SleepersTomb4','exp08_dun_sleepers_tomb','Sleeper\'s Tomb: The Forgotten Catacombs [Heroic]',412.5,-118,-97.2,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,'',300,'',0,3137546384),(542,80,'SleepersTomb5','exp08_dun_sleepers_tomb','Sleeper\'s Tomb: a Temporal Leap [Raid]',-15.7883,-9.71442,25.6396,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,'',300,'',0,3100543520),(543,70,'TempleZek1','exp07_dun_kael_temple_zek','Temple of Rallos Zek: Foundations of Stone',-603.509,78,-1108.79,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,'',300,'',0,763380135),(544,70,'TempleZek2','exp07_dun_kael_temple_zek','Temple of Rallos Zek: Foundations of Stone [Challenge]',-621.509,78,-1108.79,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,'',300,'',0,3933678329),(545,70,'ThroneStorms1','exp07_dun_kael_throne','Throne of Storms: Hall of Legends',-128.696,-11,789.267,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,'',300,'',0,1777546843),(546,70,'ThrownStorms2','exp07_dun_kael_throne','Throne of Storms: Hall of Legends [Challenge]',-128.696,-11,789.267,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,'',300,'',0,2257287777),(547,0,'BuriedHideout','qey_catacomb_epic03','A Buried Hideout',-22,3.5,20.8,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,'',300,'',0,1939516724),(548,0,'DireHollow2','nektulos_mini02','Dire Hollow: Grim Tidings',0.8,-1,3.3,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,'',300,'',0,378944620),(549,70,'FortressDrunder','exp07_dun_drunder_fortress','The Fortress of Drunder',-2.1,-0.21,23.25,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,'',300,'',0,611439565),(550,0,'desertedmine','orcishwastes_mini01','The Deserted Mine',382.376,8,-95.08,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,'',300,'',0,4206523056),(551,70,'TowerFrozenShadow1','exp07_dun_toweroffrozenshadow','Tower of Frozen Shadow: Umbral Halls',-68.33,293.5,-7.82,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,'',300,'',0,3725736583),(552,70,'TowerFrozenShadow2','exp07_dun_toweroffrozenshadow','Tower of Frozen Shadow: Haunt of Syl\'Tor',-40.03,635.5,111.46,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,'',300,'',0,776524994),(553,0,'HiddenVillage','feerrott_epic02_froglok','The Hidden Village of Kugup',-140.131,14,142.309,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,'',300,'',0,3407712702),(554,0,'CourtAlAfaz','exp01_dun_shimmering_citadel','The Court of Al\'Afaz',56.26,97.454,-124.98,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,'',300,'',0,4256496104),(555,0,'GatesAhket','exp01_dun_living_tombs','The Gates of Ahket Aken',-633.189,5,371.191,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,'',300,'',0,1715039045),(556,0,'MeetingMinds','feerrott_epic01_temple','A Meeting of the Minds',-905.273,-8,220.462,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,'',300,'',0,3583391343),(557,0,'LockjawLair','exp01_rgn_sinking_sands_epic01_lockjaw','Lockjaw\'s Lair',-3.38824,8,15.4198,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,'',300,'',0,3143832939),(558,0,'Meditation','adv04_tower_cave','The Mediation Chamber',-13.8528,0.0025,-2.60848,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,'',300,'',0,3350653370),(559,0,'Freeport','freeport_combined','The City of Freeport',-232.028,-56.065,172.565,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,'',300,'',0,716469914),(560,0,'Nizara','adv04_dun_endless','Nizara, City of the Nayad',-48.9533,-89,-8.30118,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,'',300,'',0,729645890),(561,0,'ZanFi','adv04_dun_drgn_temple','Sepulcher of Zan Fi',22.0348,2,35.0558,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,'',300,'',0,2763425328),(562,0,'Jiang1','adv04_dun_endless','Trial of Jiang Anlan: Solo',50.0781,-89,-7.80834,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,'',300,'',0,2616412967),(563,0,'Jiang2','adv04_dun_endless','Trial of Jiang Anlan: Heroic',51.0781,-89,-8.80834,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,'',300,'',0,2591092899),(564,0,'TempleScale1','exp02_dun_lair_of_scale','The Temple of Scale',11.1522,135.658,-214.027,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,'',300,'',0,994882643),(565,0,'TempleScale2','exp02_dun_lair_of_scale','The Temple of Scale: Pedestal of the Priestess',-12.8215,57.6019,263.487,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,'',300,'',0,4267147135),(566,0,'SunKai1','adv04_dun_endless','Trial of Sun Kai: Solo',5.21633,-44,22.6322,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,'',300,'',0,1106002034),(567,0,'SunKai2','adv04_dun_endless','Trial of Sun Kai: Heroic',-0.783668,-44,23.6322,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,'',300,'',0,2446330851),(568,0,'LiZhong2','adv04_dun_endless','Trial of Li Zhong: Heroic',1.21633,-44,23.6322,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,'',300,'',0,3502512801),(569,0,'Sagacious1','adv04_dun_endless','Trial of Sagacious Ting: Solo',5.21633,-44,22.6322,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,'',300,'',0,1462123052),(570,0,'Sagacious2','adv04_dun_endless','Trial of Sagacious Ting: Heroic',-0.783668,-44,23.6322,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,'',300,'',0,1227304061),(571,0,'BoFen1','adv04_dun_endless','Trial of Bo Fen: Solo',50.0781,-89,-7.80834,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,'',300,'',0,1065240210),(572,0,'BoFen2','adv04_dun_endless','Trial of Bo Fen: Heroic',51.0781,-89,-8.80834,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,'',300,'',0,4031776815),(573,0,'LinVo1','adv04_dun_endless','Trial of Lin Vo: Solo',5.21633,-44,22.6322,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,'',300,'',0,3776901092),(574,0,'LinVo2','adv04_dun_endless','Trial of Lin Vo: Heroic',-0.783668,-44,23.6322,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,'',300,'',0,3124172364),(575,0,'QinLo2','adv04_dun_endless','Trial of Qin Lo: Heroic',50.0781,-89,-7.80834,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,'',300,'',0,3728328101),(576,0,'Munzoks','exp05_dun_void_anchor','Munzok\'s Material Bastion',-515.313,0,657.814,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,'',300,'',0,1140436936),(577,0,'CommuneKDal','lavastorm_epic02_gulch','Commune of K`Dal',-189.774,4,-338.747,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,'',300,'',0,603402304),(578,0,'ForgeOfAges','lavastorm_epic01_sanctum','The Infernal Forge of Ages',-313.356,-48,-744.563,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,'',300,'',0,1977557393),(584,70,'ThurgadinGrandHall','thurgadin_prestige_home','Thurgadin Grand Hall',-347.295,-279.667,-387.081,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,'',300,'',0,1249872435),(585,70,'CrystallineBreaks','exp07_dun_crystalcavern','Crystalline Breaks',23.9496,-33,92.1147,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,'',300,'',0,1540772621),(586,70,'HoldOfRime1','exp07_dun_velks_the_ascent','Hold of Rime: The Ascent',1.28,-5,-2.78,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,'',300,'',0,685883790),(587,70,'HoldOfRime2','exp07_dun_kraytocs_fortress','Hold of Rime: The Fortress Spire',-53.72,1,-25.84,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,'',300,'',0,2268102256),(588,70,'KraytocsFortress2','exp07_dun_kraytocs_fortress','Kraytoc\'s Fortress of Rime [Challenge]',0.292056,0,2.30359,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,'',300,'',0,707353607),(589,80,'Qeynos','qeynos_combined01','Qeynos Capitol District',396.938,-20.9182,-175.205,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,'',300,'',0,740104698),(590,0,'UnkemptVale','antonica_epic01_vale','The Unkempt Vale: A Lordly Confrontation',-2358.17,11,-53.2353,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,'',300,'',0,938907661),(591,0,'FarPelican','boat_06p_feerrott','The Far Pelican',0.912209,2,-18.9637,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,'',300,'',0,1683841340),(592,0,'AzhubsShip','boat_06p_lavastorm','Azhub\'s Ship',3.12657,-1.5,-7.73107,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,'',300,'',0,1286725707),(593,0,'ChamberKeeper','cazicthule_epic01_sanctum','The Chamber of the Keeper',0.464886,-9.9975,-179.077,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,'',300,'',0,868877514),(594,0,'GnollCave','enchanted_mini01','A Gnoll Cave',-340.291,3.79318,-628.419,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,'',300,'',0,3769515479),(595,0,'ForbiddenSepulcher','everfrost_epic02_icespire','The Forbidden Sepulcher',-75.0322,60,-893.966,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,'',300,'',0,1896185871),(596,10,'MajDul3Residence2','exp01_cty_majdul_3r02','A Maj\'Dul Residence',9.43738,0.5,1.00831,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,'',300,'',0,1613383542),(597,10,'AzharsPenitence','exp01_dun_shimmering_citadel_epic01_bottle','Azhar\'s Penitence',0.61955,1,52.6354,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,'',300,'',0,1796401397),(598,10,'PalaceSabaron','exp01_dun_shimmering_citadel_epic02_prism','The Palace of Sabaron',-19.5178,-6.1451,-26.9855,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,'',300,'',0,39282643),(599,10,'AncientsTable','exp01_rgn_pillars_of_flame_epic01_cazel','Ancient\'s Table',1.47885,-0.100438,7.03403,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,'',300,'',0,694743090),(600,10,'ScornfeatherRoost','exp01_rgn_pillars_of_flame_epic01_cazel','Scornfeather Roost',2.83403,1,5.48852,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,'',300,'',0,98362481),(601,10,'HiddenCache','exp01_rgn_sinking_sands_epic01_lockjaw','The Hidden Cache',111.747,-10,-109.677,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,'',300,'',0,1637906398),(602,10,'Sanctorium','exp01_rgn_sinking_sands_epic01_lockjaw','The Sanctorium',-8.69045,8,7.14274,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,'',300,'',0,2362130991),(603,20,'LaboratoryLordVyemm','exp02_dun_halls_of_fate','The Laboratory of Lord Vyemm',-124.634,-68,451.577,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,'',300,'',0,598407856),(604,20,'AscentAwakened','exp02_dun_shrines_of_sky','Ascent of the Awakened',-66.3987,0.5,1.96815,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,'',300,'',0,931857537),(605,30,'HauntedVaults','exp03_dun_kaladim_stormguard_hall','The Haunted Vaults',157.515,18,-61.1178,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,'',300,'',0,759321130),(606,40,'EmperorsAthenaeum','exp04_dun_charasis_west','Emperor\'s Athenaeum',3.15,0,2.12,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,'',300,'',0,4005035570),(607,40,'TempleCabilis','exp04_dun_sebilis_quarters','Lost Temple of Cabilis',109.789,-10.4975,219.764,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,'',300,'',0,2450210553),(608,50,'UnseenArcanum','exp05_dun_guk_spire','Zraxth\'s Unseen Arcanum',6.53,9,-21.41,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,'',300,'',0,1536294196),(609,50,'PlanarShard','exp05_dun_miragul_shard','Miragul\'s Planar Shard',-19.08,1,-61.93,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,'',300,'',0,3746534304),(610,60,'Vigilant2','exp06_dun_sentinal','The Vigilant: Incursion',0.86,3,126.88,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,'',300,'',0,1989186960),(611,60,'Vigilant3','exp06_dun_sentinal','The Vigilant: Infiltration',4.27,85,-23.32,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,'',300,'',0,1121019415),(612,60,'Vigilant4','exp06_dun_sentinal','The Vigilant: Rescue',0.06,62,-116.18,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,'',300,'',0,120899782),(613,60,'DarkCave','exp06_rgn_odus_north','A Dark Cave',191.68,239,255.42,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,'',300,'',0,70815476),(614,70,'SpireRage','exp07_dun_drunder_sullon_spire','Spire of Rage',2.12005,0,-6.13393,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,'',300,'',0,2851100105),(615,70,'SullonsSpire2','exp07_dun_drunder_sullon_spire','Sullon\'s Spire [Challenge]',1.09203,0,-2.46779,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,'',300,'',0,2650249652),(616,70,'CitadelVuul','exp07_dun_drunder_tallon_stronghold','Citadel of V\'uul',3.09203,0,-1.46779,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,'',300,'',0,1196441431),(617,70,'TallonsStronghold2','exp07_dun_drunder_tallon_stronghold','Tallon\'s Stronghold [Challenge]',5.09203,0,-7.46779,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,'',300,'',0,1525292467),(618,70,'VallonsTower2','exp07_dun_drunder_vallon_tower','Vallon\'s Tower [Challenge]',-4.90797,0,-6.46779,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,'',300,'',0,3334958337),(619,70,'ElementsWar','exp07_dun_plane_of_war','Elements of War',-61.5,102,-104.63,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,'',300,'',0,2667052143),(620,70,'ElementsWar2','exp07_dun_plane_of_war','Elements of War [Challenge]',-60.5,102,-101.63,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,'',300,'',0,702515518),(621,70,'PlaneWar','exp07_dun_plane_of_war','Plane of War',-60.7,56,818.66,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,'',300,'',0,4064403794),(622,80,'Skyshrine','exp08_dun_skyshrine_courtyard01_scorched','Skyshrine: The City of Dracur',-1.03,0,-24.95,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,'',300,'',0,3070042545),(623,80,'WitheredLands','exp08_rgn_withered_lands','The Withered Lands',-555.08,-685.734,367.063,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,'',300,'',0,1535573742),(624,90,'Chelsith2','exp09_dun_deepchelsith','Chelsith: The Ancient Vault',-44.18,10.77,6.55,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,'',300,'',0,3466679736),(625,90,'Chelsith1','exp09_dun_deepchelsith','Chelsith: The Ancient Vault [Advanced Solo]',-44.18,10.77,6.55,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,'',300,'',0,2241866888),(626,90,'HarrowsEnd24','exp09_dun_drinals_castle','Harrow\'s End (Raid)',8.8,-7,147.6,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,'',300,'',0,1203059563),(627,90,'HarrowsEnd6','exp09_dun_drinals_castle','Harrow\'s End: Baleful Dominion (Heroic)',8.8,-7,147.6,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,'',300,'',0,4194809031),(628,90,'Dreadcutter','exp09_dun_drinals_ferry','The Dreadcutter',-6.17,24,74.69,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,'',300,'',0,302382115),(629,90,'Dreadcutter1','exp09_dun_drinals_ferry','The Dreadcutter [Advanced Solo]',-6.29,24,74.91,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,'',300,'',0,2542978235),(630,90,'AltarAbhorrence24','exp09_dun_temple_of_faceless','Altar of Abhorrence (Raid)',-405.79,2,464.82,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,'',300,'',0,324758579),(631,90,'TempleFaceless6','exp09_dun_temple_of_faceless','Temple of the Faceless (Heroic)',-404.79,2,463.82,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,'',300,'',0,1777943443),(632,90,'TempleFaceless1','exp09_dun_temple_of_faceless','Temple of the Faceless: Imprisonment (Advanced Solo)',-405.79,2,462.82,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,'',300,'',0,2969993788),(633,90,'ThroneFear6','exp09_dun_throne_of_fear','Throne of Fear (Heroic)',-317.01,1,-2.59,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,'',300,'',0,981143259),(634,90,'ThroneFear1','exp09_dun_throne_of_fear','Throne of Fear: Ascension (Advanced Solo)',-317.01,1,-2.59,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,'',300,'',0,2159319178),(635,90,'ThroneFear2','exp09_dun_throne_of_fear','Throne of Fear: The Fear Gate',210.733,72.34,44.4457,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,'',300,'',0,3648292296),(636,90,'WurmbonesEnd','exp09_dun_wurmbones_end','Wurmbone\'s End',-16.89,-128,335.57,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,'',300,'',0,2090669585),(637,90,'WurmbonesEnd1','exp09_dun_wurmbones_end','Wurmbone\'s End [Advanced Solo]',-16.3104,-129.714,334.796,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,'',300,'',0,418475608),(638,90,'WurmboneCrag','exp09_dun_wurmbone_gulch','Wurmbone Crag',89.99,14,267.1,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,'',300,'',0,4070843496),(639,90,'WurmboneCrag1','exp09_dun_wurmbone_gulch','Wurmbone Crag [Advanced Solo]',89.99,14,267.1,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,'',300,'',0,1585901758),(640,90,'EidolonJungle','exp09_rgn_eidolon_jungle','The Eidolon Jungle',-2159.75,222.393,768.29,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,'',300,'',0,545027572),(641,90,'ObolPlains','exp09_rgn_plains_of_obol','Obol Plains',64.8961,13.5217,965.592,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,'',300,'',0,126142372),(642,0,'VaultFallen','fallengate_epic01_boss','The Vault of the Fallen',35.3134,-26.21,-189.683,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,'',300,'',0,932928636),(643,0,'DenCellar','fprt_epic01_storeroom01','Jade Tiger\'s Den Cellar',0.187354,0.328323,-4.61251,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,'',300,'',0,2451593186),(644,0,'BigBend2','fprt_hood01','Big Bend: Sanctum of Spirits',-4.04,3,-69.27,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,'',300,'',0,2366221557),(645,0,'StonestairByway2','fprt_hood02','Stonestair Byway: The Animus Corridors',9.07333,-4,-101.943,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,'',300,'',0,4205698383),(646,0,'TempleStreet2','fprt_hood03','Temple Street: Vault of Necromechanica',17.7,3.5,23.14,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,'',300,'',0,1757098077),(647,0,'BeggarsCourt2','fprt_hood04','Beggar\'s Court: Sweat-Stained Cobbles',67.1062,-6.5,112.909,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,'',300,'',0,2708424193),(648,0,'LongshadowAlley2','fprt_hood05','Longshadow Alley: Daeneth Cloister',13.8144,3.5,74.3103,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,'',300,'',0,2777048224),(649,0,'ScaleYard2','fprt_hood06','Scale Yard: Traitors\' End',-7.95922,-5,-9.88693,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,'',300,'',0,3411094155),(650,0,'Court','home_citadel','Court',98.3708,146.589,-58.8835,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,'',300,'',0,3864808754),(651,0,'FelwitheMansion','home_felwithe_throne','Felwithe Mansion',-76.8586,69.2698,-888.608,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,'',300,'',0,2163020640),(652,0,'ArcaneAcademy','home_freeport','Arcane Academy',-5.84555,-6.23708,-123.799,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,'',300,'',0,2085328324),(653,0,'TowerofKnowledge','home_magetower','Tower of Knowledge',-19.8019,-1.08077,-0.287789,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,'',300,'',0,979361544),(654,10,'AstronomersTower','home_majdul_moon','Maj\'Dul Astronomer\'s Tower',-0.011612,-0.158504,1.65973,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,'',300,'',0,2077481292),(655,0,'PersonalPlanetarium','home_poets_pedestal','Personal Planetarium',-48.9755,-0.570557,-0.313724,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,'',300,'',0,2895880348),(656,0,'StormTowerIsle','home_stormy_isle','Storm Tower Isle',35.6977,44.7829,-101.576,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,'',300,'',0,457594060),(657,0,'SecludedSanctum','home_sullon_spire','Secluded Sanctum',117.699,356.786,-54.65,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,'',300,'',0,2665644280),(658,0,'UncannyEstate','home_unrest','Uncanny Estate',-0.011612,-0.064752,1.65973,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,'',300,'',0,2261834051),(659,0,'ResearchSanctum','home_vasty_library','Research Sanctum',21.2437,-14.9975,-383.902,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,'',300,'',0,2580496839),(660,90,'QeynosProvince','qeynos_combined02','Qeynos Province District',819.286,-23.3299,65.9943,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,'',300,'',0,1888326245),(661,0,'BuccaneersHideout','qey_epic06_p12_irontoes','Buccaneers\' Hideout',1.62288,-0.276476,-2.56662,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,'',300,'',0,1813992810),(662,0,'SeedTunarbos','qey_ph_3r01','The Seed of Tunarbos',0.066109,-2,7.9765,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,'',300,'',0,597408693),(663,0,'FightClub','qey_ph_3r03','Fight Club',1.60767,-1.99737,7.14355,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,'',300,'',0,902117370),(664,80,'GrandHall','thurgadin_prestige_home','Grand Hall',-347.295,-279.667,-387.081,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,'',300,'',0,1066222316),(665,0,'DaratharsFlight','tutorial_island02','The Isle of Refuge: Darathar\'s Flight',-10.2996,-2.91619,167.785,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,'',300,'',0,712866647),(666,0,'PermafrostCrypt','permafrost_frostfell','Permafrost Crypt: Decorating Retribution',-35.4254,2.72433,-575.952,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,'',300,'',0,3906013280),(667,0,'IcyKeep4','permafrost_frostfell','The Icy Keep (Hard)',0.995131,1,3.07628,0,-1000000,0,0,0,'',0,0,0,0,0,0,0,'NONE',0,0,0,0,'',300,'',0,3727147705); +/*!40000 ALTER TABLE `zones` 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 */; +/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */; + +-- Dump completed on 2020-02-28 0:12:32 diff --git a/DB/world_db.zip b/DB/world_db.zip new file mode 100644 index 000000000..3824f0506 Binary files /dev/null and b/DB/world_db.zip differ diff --git a/EQ2/configs/LoginServer.ini b/EQ2/configs/LoginServer.ini new file mode 100644 index 000000000..953afd8eb --- /dev/null +++ b/EQ2/configs/LoginServer.ini @@ -0,0 +1,36 @@ +### --- This file tells world.exe what loginserver to connect to. +### --- Change the account and password fields to the information you used when you created your SERVER account. + +### --- NOTE: the word "Server" is added to each server automaticly. + +# READ README.MD + +[LoginServer] +loginserver=eq2emulator.net +loginport=9100 +worldname=WORLD_NAME_HERE +worldaddress=EXTERNAL_IP_HERE +#internalworldaddress=INTERNAL_IP_HERE (If used, otherwise blank) +worldport=9000 +locked=false +account= +password= +#autotableupdates retrieves the latest table updates and applies them to your database +#autotableupdates valid options=always, ask, and never +autotableupdates=always +#autotableverbose displays detailed information about the updates; options=true or false +autotableverbose=false +#autotabledata retrieves the latest data for tables like the opcodes table; options=true or false +autotabledata=true + +[WorldServer] +Defaultstatus= +Unavailzone= + +[UpdateServer] +updateserveraddress=updates.eq2emulator.net +updateserverport=9104 + +[LoginConfig] +ServerMode=StandAlone +ServerPort=9100 \ No newline at end of file diff --git a/EQ2/configs/log_config.xml b/EQ2/configs/log_config.xml new file mode 100644 index 000000000..b45950450 --- /dev/null +++ b/EQ2/configs/log_config.xml @@ -0,0 +1,347 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/EQ2/configs/world_db.ini b/EQ2/configs/world_db.ini new file mode 100644 index 000000000..067dd6d3a --- /dev/null +++ b/EQ2/configs/world_db.ini @@ -0,0 +1,11 @@ +# READ README.MD! + +[Database] +host=127.0.0.1 +user=root +password=pass +database=eq2emu + + +### --- This file tells world.exe what computer mySQL is on. Host should +### --- be left "localhost" unless mysql is on a differant computer than world.exe. \ No newline at end of file diff --git a/EQ2/devtools/PacketParser/Parser DB.sql b/EQ2/devtools/PacketParser/Parser DB.sql new file mode 100644 index 000000000..b7f747eed --- /dev/null +++ b/EQ2/devtools/PacketParser/Parser DB.sql @@ -0,0 +1,3106 @@ +CREATE DATABASE IF NOT EXISTS `raw_db` /*!40100 DEFAULT CHARACTER SET utf8 */; +USE `raw_db`; +-- MySQL dump 10.13 Distrib 5.6.13, for Win32 (x86) +-- +-- Host: localhost Database: raw_db +-- ------------------------------------------------------ +-- Server version 5.6.12-log + +/*!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 utf8 */; +/*!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' */; +/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */; + +-- +-- Table structure for table `opcodes` +-- + +DROP TABLE IF EXISTS `opcodes`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `opcodes` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `version_range1` smallint(5) unsigned NOT NULL DEFAULT '0', + `version_range2` smallint(5) unsigned NOT NULL DEFAULT '0', + `name` varchar(255) COLLATE latin1_general_ci NOT NULL DEFAULT '', + `opcode` smallint(5) unsigned NOT NULL DEFAULT '0', + PRIMARY KEY (`id`), + UNIQUE KEY `newindex` (`version_range1`,`name`,`version_range2`) +) ENGINE=InnoDB AUTO_INCREMENT=9298 DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Dumping data for table `opcodes` +-- + +LOCK TABLES `opcodes` WRITE; +/*!40000 ALTER TABLE `opcodes` DISABLE KEYS */; +INSERT INTO `opcodes` VALUES (1,0,0,'OP_LoginRequestMsg',0),(2,0,0,'OP_LoginByNumRequestMsg',1),(3,0,0,'OP_WSLoginRequestMsg',2),(4,0,0,'OP_ESLoginRequestMsg',3),(5,0,0,'OP_LoginReplyMsg',4),(6,0,0,'OP_WSStatusReplyMsg',5),(7,0,0,'OP_WorldStatusChangeMsg',6),(8,0,0,'OP_AllWSDescRequestMsg',7),(9,0,0,'OP_WorldListMsg',8),(10,0,0,'OP_AllCharactersDescRequestMsg',9),(11,0,0,'OP_AllCharactersDescReplyMsg',10),(12,0,0,'OP_CreateCharacterRequestMsg',11),(13,0,0,'OP_CreateCharacterReplyMsg',12),(14,0,0,'OP_WSCreateCharacterRequestMsg',13),(15,0,0,'OP_WSCreateCharacterReplyMsg',14),(16,0,0,'OP_ReskinCharacterRequestMsg',15),(17,0,0,'OP_DeleteCharacterRequestMsg',16),(18,0,0,'OP_DeleteCharacterReplyMsg',17),(19,0,0,'OP_PlayCharacterRequestMsg',18),(20,0,0,'OP_PlayCharacterReplyMsg',19),(21,0,0,'OP_ExpectClientAsCharacterReplyMs',22),(22,0,0,'OP_ServerPlayCharacterRequestMsg',23),(23,0,0,'OP_ServerPlayCharacterReplyMsg',24),(24,0,0,'OP_ESInitMsg',25),(25,0,0,'OP_ESReadyForClientsMsg',26),(26,0,0,'OP_CreateZoneInstanceMsg',27),(27,0,0,'OP_ZoneInstanceCreateReplyMsg',28),(28,0,0,'OP_ZoneInstanceDestroyedMsg',29),(29,0,0,'OP_ExpectClientAsCharacterRequest',30),(30,0,0,'OP_ZoneInfoMsg',31),(31,0,0,'OP_DoneLoadingZoneResourcesMsg',32),(32,0,0,'OP_DoneSendingInitialEntitiesMsg',33),(33,0,0,'OP_DoneLoadingEntityResourcesMsg',34),(34,0,0,'OP_PredictionUpdateMsg',35),(35,0,0,'OP_UpdatePositionMsg',36),(36,0,0,'OP_SetRemoteCmdsMsg',37),(37,0,0,'OP_RemoteCmdMsg',38),(38,0,0,'OP_GameWorldTimeMsg',39),(39,0,0,'OP_MOTDMsg',40),(40,0,0,'OP_ZoneMOTDMsg',41),(41,0,0,'OP_AvatarCreatedMsg',42),(42,0,0,'OP_AvatarDestroyedMsg',43),(43,0,0,'OP_RequestCampMsg',45),(44,0,0,'OP_CampStartedMsg',46),(45,0,0,'OP_CampAbortedMsg',47),(46,0,0,'OP_WhoQueryRequestMsg',48),(47,0,0,'OP_WhoQueryReplyMsg',49),(48,0,0,'OP_MonitorReplyMsg',50),(49,0,0,'OP_MonitorCharacterListMsg',51),(50,0,0,'OP_MonitorCharacterListRequestMsg',52),(51,0,0,'OP_ClientCmdMsg',53),(52,0,0,'OP_DispatchESMsg',54),(53,0,0,'OP_DispatchClientCmdMsg',55),(54,0,0,'OP_UpdateTargetMsg',56),(55,0,0,'OP_UpdateTargetLocMsg',57),(56,0,0,'OP_UpdateCharacterSheetMsg',58),(57,0,0,'OP_UpdateSpellBookMsg',59),(58,0,0,'OP_UpdateInventoryMsg',61),(59,0,0,'OP_UpdateRecipeBookMsg',63),(60,0,0,'OP_RequestRecipeDetailsMsg',64),(61,0,0,'OP_RecipeDetailsMsg',65),(62,0,0,'OP_UpdateSkillBookMsg',66),(63,0,0,'OP_UpdateSkillsMsg',67),(64,0,0,'OP_UpdateOpportunityMsg',68),(65,0,0,'OP_ChangeZoneMsg',70),(66,0,0,'OP_ClientTeleportRequestMsg',71),(67,0,0,'OP_TeleportWithinZoneMsg',72),(68,0,0,'OP_TeleportWithinZoneNoReloadMsg',73),(69,0,0,'OP_MigrateClientToZoneRequestMsg',74),(70,0,0,'OP_MigrateClientToZoneReplyMsg',75),(71,0,0,'OP_ReadyToZoneMsg',76),(72,0,0,'OP_RemoveClientFromGroupMsg',77),(73,0,0,'OP_RemoveGroupFromGroupMsg',78),(74,0,0,'OP_MakeGroupLeaderMsg',79),(75,0,0,'OP_GroupCreatedMsg',80),(76,0,0,'OP_GroupDestroyedMsg',81),(77,0,0,'OP_GroupMemberAddedMsg',82),(78,0,0,'OP_GroupMemberRemovedMsg',83),(79,0,0,'OP_GroupRemovedFromGroupMsg',84),(80,0,0,'OP_GroupLeaderChangedMsg',85),(81,0,0,'OP_GroupResendOOZDataMsg',86),(82,0,0,'OP_GroupSettingsChangedMsg',87),(83,0,0,'OP_OutOfZoneMemberDataMsg',88),(84,0,0,'OP_SendLatestRequestMsg',89),(85,0,0,'OP_ClearDataMsg',90),(86,0,0,'OP_SetSocialMsg',91),(87,0,0,'OP_ESStatusMsg',92),(88,0,0,'OP_ESZoneInstanceStatusMsg',93),(89,0,0,'OP_ZonesStatusRequestMsg',94),(90,0,0,'OP_ZonesStatusMsg',95),(91,0,0,'OP_ESWeatherRequestMsg',96),(92,0,0,'OP_ESWeatherRequestEndMsg',97),(93,0,0,'OP_DialogSelectMsg',98),(94,0,0,'OP_DialogCloseMsg',99),(95,0,0,'OP_RemoveSpellEffectMsg',100),(96,0,0,'OP_RemoveConcentrationMsg',101),(97,0,0,'OP_QuestJournalOpenMsg',104),(98,0,0,'OP_QuestJournalInspectMsg',105),(99,0,0,'OP_QuestJournalSetVisibleMsg',106),(100,0,0,'OP_QuestJournalWaypointMsg',107),(101,0,0,'OP_CreateGuildRequestMsg',108),(102,0,0,'OP_CreateGuildReplyMsg',109),(103,0,0,'OP_GuildsayMsg',110),(104,0,0,'OP_GuildUpdateMsg',111),(105,0,0,'OP_DeleteGuildMsg',112),(106,0,0,'OP_FellowshipExpMsg',113),(107,0,0,'OP_ConsignmentCloseStoreMsg',114),(108,0,0,'OP_ConsignItemRequestMsg',115),(109,0,0,'OP_ConsignItemResponseMsg',116),(110,0,0,'OP_PurchaseConsignmentRequestMsg',117),(111,0,0,'OP_HouseDeletedRemotelyMsg',118),(112,0,0,'OP_UpdateHouseDataMsg',119),(113,0,0,'OP_UpdateHouseAccessDataMsg',120),(114,0,0,'OP_PlayerHouseBaseScreenMsg',121),(115,0,0,'OP_PlayerHousePurchaseScreenMsg',122),(116,0,0,'OP_PlayerHouseAccessUpdateMsg',123),(117,0,0,'OP_PlayerHouseDisplayStatusMsg',124),(118,0,0,'OP_PlayerHouseCloseUIMsg',125),(119,0,0,'OP_BuyPlayerHouseMsg',126),(120,0,0,'OP_BuyPlayerHouseTintMsg',127),(121,0,0,'OP_CollectAllHouseItemsMsg',128),(122,0,0,'OP_RelinquishHouseMsg',129),(123,0,0,'OP_EnterHouseMsg',130),(124,0,0,'OP_ExitHouseMsg',131),(125,0,0,'OP_HouseDefaultAccessSetMsg',132),(126,0,0,'OP_HouseAccessSetMsg',133),(127,0,0,'OP_HouseAccessRemoveMsg',134),(128,0,0,'OP_PayHouseUpkeepMsg',135),(129,0,0,'OP_MoveableObjectPlacementCriteri',136),(130,0,0,'OP_EnterMoveObjectModeMsg',137),(131,0,0,'OP_PositionMoveableObject',138),(132,0,0,'OP_CancelMoveObjectModeMsg',139),(133,0,0,'OP_ShaderCustomizationMsg',140),(134,0,0,'OP_ReplaceableSubMeshesMsg',141),(135,0,0,'OP_HouseCustomizationScreenMsg',142),(136,0,0,'OP_CustomizationPurchaseRequestMs',143),(137,0,0,'OP_CustomizationSetRequestMsg',144),(138,0,0,'OP_CustomizationReplyMsg',145),(139,0,0,'OP_TintWidgetsMsg',146),(140,0,0,'OP_ExamineConsignmentRequestMsg',147),(141,0,0,'OP_ExamineConsignmentResponseMsg',148),(142,0,0,'OP_UISettingsResponseMsg',149),(143,0,0,'OP_UIResetMsg',150),(144,0,0,'OP_KeymapLoadMsg',151),(145,0,0,'OP_KeymapNoneMsg',152),(146,0,0,'OP_KeymapDataMsg',153),(147,0,0,'OP_KeymapSaveMsg',154),(148,0,0,'OP_DispatchSpellCmdMsg',155),(149,0,0,'OP_EntityVerbsRequestMsg',157),(150,0,0,'OP_EntityVerbsReplyMsg',158),(151,0,0,'OP_EntityVerbsVerbMsg',159),(152,0,0,'OP_ChatRelationshipUpdateMsg',161),(153,0,0,'OP_LootItemsRequestMsg',162),(154,0,0,'OP_StoppedLootingMsg',163),(155,0,0,'OP_SitMsg',164),(156,0,0,'OP_StandMsg',165),(157,0,0,'OP_SatMsg',166),(158,0,0,'OP_StoodMsg',167),(159,0,0,'OP_ClearForTakeOffMsg',168),(160,0,0,'OP_ReadyForTakeOffMsg',169),(161,0,0,'OP_ShowIllusionsMsg',170),(162,0,0,'OP_HideIllusionsMsg',171),(163,0,0,'OP_ExamineItemRequestMsg',172),(164,0,0,'OP_ReadBookPageMsg',173),(165,0,0,'OP_DefaultGroupOptionsRequestMsg',174),(166,0,0,'OP_DefaultGroupOptionsMsg',175),(167,0,0,'OP_GroupOptionsMsg',176),(168,0,0,'OP_DisplayGroupOptionsScreenMsg',177),(169,0,0,'OP_DisplayInnVisitScreenMsg',178),(170,0,0,'OP_DumpSchedulerMsg',179),(171,0,0,'OP_LSRequestPlayerDescMsg',180),(172,0,0,'OP_LSCheckAcctLockMsg',181),(173,0,0,'OP_WSAcctLockStatusMsg',182),(174,0,0,'OP_RequestHelpRepathMsg',183),(175,0,0,'OP_RequestTargetLocMsg',184),(176,0,0,'OP_UpdateMotdMsg',185),(177,0,0,'OP_PerformPlayerKnockbackMsg',186),(178,0,0,'OP_PerformCameraShakeMsg',187),(179,0,0,'OP_PopulateSkillMapsMsg',188),(180,0,0,'OP_CancelledFeignMsg',190),(181,0,0,'OP_SignalMsg',191),(182,0,0,'OP_ShowCreateFromRecipeUIMsg',192),(183,0,0,'OP_CancelCreateFromRecipeMsg',193),(184,0,0,'OP_BeginItemCreationMsg',194),(185,0,0,'OP_StopItemCreationMsg',195),(186,0,0,'OP_ShowItemCreationProcessUIMsg',196),(187,0,0,'OP_UpdateItemCreationProcessUIMsg',197),(188,0,0,'OP_DisplayTSEventReactionMsg',198),(189,0,0,'OP_ShowRecipeBookMsg',199),(190,0,0,'OP_KnowledgebaseRequestMsg',200),(191,0,0,'OP_KnowledgebaseResponseMsg',201),(192,0,0,'OP_CSTicketHeaderRequestMsg',202),(193,0,0,'OP_CSTicketInfoMsg',203),(194,0,0,'OP_CSTicketCommentRequestMsg',204),(195,0,0,'OP_CSTicketCommentResponseMsg',205),(196,0,0,'OP_CSTicketCreateMsg',206),(197,0,0,'OP_CSTicketAddCommentMsg',207),(198,0,0,'OP_CSTicketDeleteMsg',208),(199,0,0,'OP_CSTicketChangeNotificationMsg',209),(200,0,0,'OP_WorldDataUpdateMsg',210),(201,0,0,'OP_KnownLanguagesMsg',211),(202,0,0,'OP_LsRequestClientCrashLogMsg',212),(203,0,0,'OP_LsClientBaselogReplyMsg',213),(204,0,0,'OP_LsClientCrashlogReplyMsg',214),(205,0,0,'OP_LsClientAlertlogReplyMsg',215),(206,0,0,'OP_LsClientVerifylogReplyMsg',216),(207,0,0,'OP_ClientTeleportToLocationMsg',217),(208,0,0,'OP_UpdateClientPredFlagsMsg',218),(209,0,0,'OP_ChangeServerControlFlagMsg',219),(210,0,0,'OP_CSToolsRequestMsg',220),(211,0,0,'OP_CSToolsResponseMsg',221),(212,0,0,'OP_AddSocialStructureStandingMsg',222),(213,0,0,'OP_CreateBoatTransportsMsg',223),(214,0,0,'OP_PositionBoatTransportMsg',224),(215,0,0,'OP_MigrateBoatTransportMsg',225),(216,0,0,'OP_MigrateBoatTransportReplyMsg',226),(217,0,0,'OP_DisplayDebugNLLPointsMsg',227),(218,0,0,'OP_ExamineInfoRequestMsg',228),(219,0,0,'OP_QuickbarInitMsg',229),(220,0,0,'OP_QuickbarUpdateMsg',230),(221,0,0,'OP_MacroInitMsg',231),(222,0,0,'OP_MacroUpdateMsg',232),(223,0,0,'OP_QuestionnaireMsg',233),(224,0,0,'OP_LevelChangedMsg',234),(225,0,0,'OP_SpellGainedMsg',235),(226,0,0,'OP_EncounterBrokenMsg',236),(227,0,0,'OP_OnscreenMsgMsg',237),(228,0,0,'OP_DisplayWarningMsg',238),(229,0,0,'OP_ModifyGuildMsg',239),(230,0,0,'OP_GuildEventMsg',240),(231,0,0,'OP_GuildEventAddMsg',241),(232,0,0,'OP_GuildEventActionMsg',242),(233,0,0,'OP_GuildEventListMsg',243),(234,0,0,'OP_RequestGuildEventDetailsMsg',244),(235,0,0,'OP_GuildEventDetailsMsg',245),(236,0,0,'OP_RequestGuildInfoMsg',246),(237,0,0,'OP_GuildBankActionMsg',247),(238,0,0,'OP_GuildBankActionResponseMsg',248),(239,0,0,'OP_GuildBankItemDetailsRequestMsg',249),(240,0,0,'OP_GuildBankItemDetailsResponseMs',250),(241,0,0,'OP_GuildBankUpdateMsg',251),(242,0,0,'OP_GuildBankEventListMsg',252),(243,0,0,'OP_RequestGuildBankEventDetailsMs',253),(244,0,0,'OP_RewardPackMsg',254),(245,0,0,'OP_RenameGuildMsg',255),(246,0,0,'OP_ZoneToFriendRequestMsg',257),(247,0,0,'OP_ZoneToFriendReplyMsg',258),(248,0,0,'OP_ChatCreateChannelMsg',259),(249,0,0,'OP_ChatJoinChannelMsg',260),(250,0,0,'OP_ChatWhoChannelMsg',261),(251,0,0,'OP_ChatLeaveChannelMsg',262),(252,0,0,'OP_ChatTellChannelMsg',263),(253,0,0,'OP_ChatTellUserMsg',264),(254,0,0,'OP_ChatToggleFriendMsg',265),(255,0,0,'OP_ChatToggleIgnoreMsg',266),(256,0,0,'OP_ChatSendFriendsMsg',267),(257,0,0,'OP_ChatSendIgnoresMsg',268),(258,0,0,'OP_QuestReward',294),(259,0,0,'OP_ChatFiltersMsg',309),(260,0,0,'OP_MailGetHeadersMsg',310),(261,0,0,'OP_MailGetMessageMsg',311),(262,0,0,'OP_MailSendMessageMsg',312),(263,0,0,'OP_MailDeleteMessageMsg',313),(264,0,0,'OP_MailGetHeadersReplyMsg',314),(265,0,0,'OP_MailGetMessageReplyMsg',315),(266,0,0,'OP_MailSendMessageReplyMsg',316),(267,0,0,'OP_MailCommitSendMessageMsg',317),(268,0,0,'OP_MailSendSystemMessageMsg',318),(269,0,0,'OP_MailRemoveAttachFromMailMsg',319),(270,0,0,'OP_WaypointRequestMsg',321),(271,0,0,'OP_WaypointReplyMsg',322),(272,0,0,'OP_WaypointSelectMsg',323),(273,0,0,'OP_WaypointUpdateMsg',324),(274,0,0,'OP_CharNameChangedMsg',325),(275,0,0,'OP_ShowZoneTeleporterDestinations',326),(276,0,0,'OP_SelectZoneTeleporterDestinatio',327),(277,0,0,'OP_ReloadLocalizedTxtMsg',328),(278,0,0,'OP_RequestGuildMembershipMsg',329),(279,0,0,'OP_GuildMembershipResponseMsg',330),(280,0,0,'OP_LeaveGuildNotifyMsg',331),(281,0,0,'OP_JoinGuildNotifyMsg',332),(282,0,0,'OP_AvatarUpdateMsg',334),(283,0,0,'OP_BioUpdateMsg',335),(284,0,0,'OP_InspectPlayerMsg',336),(285,0,0,'OP_WSServerLockMsg',337),(286,0,0,'OP_LSServerLockMsg',338),(287,0,0,'OP_WSServerHideMsg',339),(288,0,0,'OP_CsCategoryRequestMsg',340),(289,0,0,'OP_CsCategoryResponseMsg',341),(290,0,0,'OP_KnowledgeWindowSlotMappingMsg',342),(291,0,0,'OP_LFGUpdateMsg',343),(292,0,0,'OP_AFKUpdateMsg',344),(293,0,0,'OP_AnonUpdateMsg',345),(294,0,0,'OP_UpdateActivePublicZonesMsg',346),(295,0,0,'OP_UnknownNpcMsg',347),(296,0,0,'OP_PromoFlagsDetailsMsg',348),(297,0,0,'OP_ConsignViewCreateMsg',349),(298,0,0,'OP_ConsignViewGetPageMsg',350),(299,0,0,'OP_ConsignViewReleaseMsg',351),(300,0,0,'OP_ConsignRemoveItemsMsg',352),(301,0,0,'OP_UpdateDebugRadiiMsg',353),(302,0,0,'OP_SnoopMsg',354),(303,0,0,'OP_ReportMsg',355),(304,0,0,'OP_UpdateRaidMsg',356),(305,0,0,'OP_ConsignViewSortMsg',357),(306,0,0,'OP_TitleUpdateMsg',358),(307,0,0,'OP_ClientFellMsg',359),(308,0,0,'OP_ClientInDeathRegionMsg',360),(309,0,0,'OP_CampClientMsg',361),(310,0,0,'OP_CSToolAccessResponseMsg',362),(311,0,0,'OP_TrackingUpdateMsg',363),(312,0,0,'OP_BeginTrackingMsg',364),(313,0,0,'OP_StopTrackingMsg',365),(314,0,0,'OP_GetAvatarAccessRequestForCSToo',366),(315,0,0,'OP_AdvancementRequestMsg',367),(316,0,0,'OP_UpdateAvgFrameTimeMsg',368),(317,0,0,'OP_MapFogDataInitMsg',369),(318,0,0,'OP_MapFogDataUpdateMsg',370),(319,0,0,'OP_CloseGroupInviteWindowMsg',371),(320,0,0,'OP_UpdateGroupMemberDataMsg',372),(321,0,0,'OP_WorldPingMsg',373),(322,0,0,'OP_MoveLogUpdateMsg',374),(323,0,0,'OP_OfferQuestMsg',375),(324,0,0,'OP_WorldShutdownUpdateMsg',376),(325,0,0,'OP_DisplayMailScreenMsg',377),(326,0,0,'OP_ClientIdleBeginMsg',378),(327,0,0,'OP_ClientIdleEndMsg',379),(328,0,0,'OP_PurchaseConsignmentLoreCheckRe',380),(329,0,0,'OP_NotifyApprenticeStoppedMentori',381),(330,0,0,'OP_CorruptedClientMsg',382),(331,0,0,'OP_WorldDataChangeMsg',383),(332,0,0,'OP_MailEventNotificationMsg',384),(333,0,0,'OP_RestartZoneMsg',385),(334,0,0,'OP_FlightPathsMsg',386),(335,0,0,'OP_CharacterLinkdeadMsg',387),(336,0,0,'OP_CharTransferStartRequestMsg',388),(337,0,0,'OP_CharTransferStartReplyMsg',389),(338,0,0,'OP_CharTransferRequestMsg',390),(339,0,0,'OP_CharTransferReplyMsg',391),(340,0,0,'OP_CharTransferRollbackRequestMsg',392),(341,0,0,'OP_CharTransferCommitRequestMsg',393),(342,0,0,'OP_CharTransferRollbackReplyMsg',394),(343,0,0,'OP_CharTransferCommitReplyMsg',395),(344,0,0,'OP_GetCharacterSerializedRequestM',396),(345,0,0,'OP_GetCharacterSerializedReplyMsg',397),(346,0,0,'OP_CreateCharFromCBBRequestMsg',398),(347,0,0,'OP_CreateCharFromCBBReplyMsg',399),(348,0,0,'OP_HousingDataChangedMsg',400),(349,0,0,'OP_HousingRestoreMsg',401),(350,0,0,'OP_AuctionItem',402),(351,0,0,'OP_AuctionItemReply',403),(352,0,0,'OP_AuctionCoin',404),(353,0,0,'OP_AuctionCoinReply',405),(354,0,0,'OP_AuctionCharacter',406),(355,0,0,'OP_AuctionCharacterReply',407),(356,0,0,'OP_AuctionCommitMsg',408),(357,0,0,'OP_AuctionAbortMsg',409),(358,0,0,'OP_CharTransferValidateRequestMsg',410),(359,0,0,'OP_CharTransferValidateReplyMsg',411),(360,0,0,'OP_RaceRestrictionMsg',412),(361,0,0,'OP_SetInstanceDisplayNameMsg',413),(362,0,0,'OP_GetAuctionAssetIDMsg',414),(363,0,0,'OP_GetAuctionAssetIDReplyMsg',415),(364,0,0,'OP_ResendWorldChannelsMsg',416),(365,0,0,'OP_DisplayExchangeScreenMsg',417),(366,0,0,'OP_ArenaGameTypesMsg',418),(367,0,0,'OP_AuditAuctionEventMsg',420),(368,0,0,'OP_InviteRequestMsg',422),(369,0,0,'OP_InviteResponseMsg',423),(370,0,0,'OP_InviteTargetResponseMsg',424),(371,0,0,'OP_InspectPlayerRequestMsg',425),(372,0,0,'OP_DispatchMsg',426),(373,0,0,'OP_DisplayEventMsg',427),(374,0,0,'OP_PrePossessionMsg',428),(375,0,0,'OP_PostPossessionMsg',429),(376,0,0,'OP_AdventureList',454),(377,0,0,'OP_CancelSpellCast',455),(378,0,0,'OP_UpdateTitleCmd',461),(379,0,0,'OP_AttackAllowed',467),(380,0,0,'OP_AttackNotAllowed',468),(381,0,0,'OP_DressingRoom',474),(382,0,0,'OP_SkillInfoRequest',478),(383,0,0,'OP_SkillInfoResponse',479),(384,0,0,'OP_EqHearChatCmd',480),(385,0,0,'OP_EqDisplayTextCmd',481),(386,0,0,'OP_EqCreateGhostCmd',482),(387,0,0,'OP_EqCreateWidgetCmd',483),(388,0,0,'OP_EqCreateSignWidgetCmd',484),(389,0,0,'OP_EqDestroyGhostCmd',485),(390,0,0,'OP_EqUpdateGhostCmd',486),(391,0,0,'OP_EqSetControlGhostCmd',487),(392,0,0,'OP_EqSetPOVGhostCmd',488),(393,0,0,'OP_EqHearCombatCmd',489),(394,0,0,'OP_EqHearSpellCastCmd',490),(395,0,0,'OP_EqHearSpellInterruptCmd',493),(396,0,0,'OP_EqHearSpellFizzleCmd',494),(397,0,0,'OP_EqHearConsiderCmd',495),(398,0,0,'OP_EqUpdateSubClassesCmd',496),(399,0,0,'OP_EqCreateListBoxCmd',497),(400,0,0,'OP_EqSetDebugPathPointsCmd',498),(401,0,0,'OP_EqCannedEmoteCmd',500),(402,0,0,'OP_EqStateCmd',501),(403,0,0,'OP_EqPlaySoundCmd',502),(404,0,0,'OP_EqPlaySound3DCmd',503),(405,0,0,'OP_EqPlayVoiceCmd',504),(406,0,0,'OP_EqHearDrowningCmd',505),(407,0,0,'OP_EqHearDeathCmd',506),(408,0,0,'OP_EqGroupMemberRemovedCmd',507),(409,0,0,'OP_EqHearChainEffectCmd',508),(410,0,0,'OP_EqReceiveOfferCmd',509),(411,0,0,'OP_EqInspectPCResultsCmd',510),(412,0,0,'OP_EqDrawablePathGraphCmd',511),(413,0,0,'OP_EqDialogOpenCmd',512),(414,0,0,'OP_EqDialogCloseCmd',513),(415,0,0,'OP_EqFactionUpdateCmd',514),(416,0,0,'OP_EqCollectionUpdateCmd',515),(417,0,0,'OP_EqCollectionFilterCmd',516),(418,0,0,'OP_EqCollectionItemCmd',517),(419,0,0,'OP_EqQuestJournalUpdateCmd',518),(420,0,0,'OP_EqQuestJournalReplyCmd',520),(421,0,0,'OP_EqQuestGroupCmd',521),(422,0,0,'OP_EqUpdateMerchantCmd',522),(423,0,0,'OP_EqUpdateStoreCmd',523),(424,0,0,'OP_EqUpdatePlayerTradeCmd',524),(425,0,0,'OP_EqHelpPathCmd',525),(426,0,0,'OP_EqHelpPathClearCmd',526),(427,0,0,'OP_EqUpdateBankCmd',527),(428,0,0,'OP_EqExamineInfoCmd',528),(429,0,0,'OP_EqCloseWindowCmd',529),(430,0,0,'OP_EqUpdateLootCmd',530),(431,0,0,'OP_EqJunctionListCmd',531),(432,0,0,'OP_EqShowDeathWindowCmd',532),(433,0,0,'OP_EqDisplaySpellFailCmd',533),(434,0,0,'OP_EqSpellCastStartCmd',534),(435,0,0,'OP_EqSpellCastEndCmd',535),(436,0,0,'OP_EqResurrectedCmd',536),(437,0,0,'OP_EqChoiceWinCmd',537),(438,0,0,'OP_EqSetDefaultVerbCmd',538),(439,0,0,'OP_EqInstructionWindowCmd',540),(440,0,0,'OP_EqInstructionWindowCloseCmd',541),(441,0,0,'OP_EqInstructionWindowGoalCmd',542),(442,0,0,'OP_EqInstructionWindowTaskCmd',543),(443,0,0,'OP_EqEnableGameEventCmd',544),(444,0,0,'OP_EqShowWindowCmd',545),(445,0,0,'OP_EqEnableWindowCmd',546),(446,0,0,'OP_EqFlashWindowCmd',547),(447,0,0,'OP_EqHearPlayFlavorCmd',548),(448,0,0,'OP_EqUpdateSignWidgetCmd',550),(449,0,0,'OP_EqDebugPVDCmd',551),(450,0,0,'OP_EqShowBookCmd',552),(451,0,0,'OP_EqQuestionnaireCmd',553),(452,0,0,'OP_EqGetProbsCmd',554),(453,0,0,'OP_EqHearHealCmd',555),(454,0,0,'OP_EqChatChannelUpdateCmd',556),(455,0,0,'OP_EqWhoChannelQueryReplyCmd',557),(456,0,0,'OP_EqAvailWorldChannelsCmd',558),(457,0,0,'OP_EqUpdateTargetCmd',559),(458,0,0,'OP_EqConsignmentItemsCmd',561),(459,0,0,'OP_EqStartBrokerCmd',563),(460,0,0,'OP_EqMapExplorationCmd',564),(461,0,0,'OP_EqStoreLogCmd',565),(462,0,0,'OP_EqSpellMoveToRangeAndRetryCmd',566),(463,0,0,'OP_EqUpdatePlayerMailCmd',567),(464,0,0,'OP_EqArenaResultsCmd',568),(465,0,0,'OP_EqGuildBankEventActionCmd',569),(466,0,0,'OP_EqGuildBankExamineInfoCmd',570),(467,0,0,'OP_EqHearSpellNoLandCmd',571),(468,0,0,'OP_Lottery',572),(469,0,0,'OP_GuildRecruitingMemberInfo',573),(470,0,0,'OP_GuildRecruiting',574),(471,0,0,'OP_GuildRecruitingDetails',575),(472,0,0,'OP_GuildRecruitingImage',576),(473,0,0,'OP_PointOfInterest',597),(474,0,0,'OP_TraitsList',599),(475,0,0,'OP_RecipeList',608),(476,0,0,'OP_CharacterAchievements',655),(477,0,0,'OP_AddClientToGroupMsg',999),(478,0,0,'OP_AddGroupToGroupMsg',999),(479,0,0,'OP_GuildKickMsg',999),(480,0,0,'OP_PurchaseConsignmentResponseMsg',999),(481,0,0,'OP_ProcessScriptMsg',999),(482,0,0,'OP_ProcessWorkspaceMsg',999),(483,0,0,'OP_QuickbarAddMsg',999),(484,0,0,'OP_SkillSlotMapping',999),(485,0,0,'OP_MapRequest',999),(486,0,0,'OP_BadLanguageFilter',999),(487,0,0,'OP_Unknown',10000),(488,0,0,'OP_WSWeatherUpdateMsg',10012),(489,839,844,'OP_LoginRequestMsg',0),(490,839,844,'OP_LoginByNumRequestMsg',1),(491,839,844,'OP_WSLoginRequestMsg',2),(492,839,844,'OP_ESLoginRequestMsg',3),(493,839,844,'OP_LoginReplyMsg',4),(494,839,844,'OP_WSStatusReplyMsg',5),(495,839,844,'OP_WorldStatusChangeMsg',6),(496,839,844,'OP_AllWSDescRequestMsg',7),(497,839,844,'OP_WorldListMsg',8),(498,839,844,'OP_AllCharactersDescRequestMsg',9),(499,839,844,'OP_AllCharactersDescReplyMsg',10),(500,839,844,'OP_CreateCharacterRequestMsg',11),(501,839,844,'OP_CreateCharacterReplyMsg',12),(502,839,844,'OP_WSCreateCharacterRequestMsg',13),(503,839,844,'OP_WSCreateCharacterReplyMsg',14),(504,839,844,'OP_ReskinCharacterRequestMsg',15),(505,839,844,'OP_DeleteCharacterRequestMsg',16),(506,839,844,'OP_DeleteCharacterReplyMsg',17),(507,839,844,'OP_PlayCharacterRequestMsg',18),(508,839,844,'OP_PlayCharacterReplyMsg',19),(509,839,844,'OP_ExpectClientAsCharacterReplyMs',22),(510,839,844,'OP_ServerPlayCharacterRequestMsg',23),(511,839,844,'OP_ServerPlayCharacterReplyMsg',24),(512,839,844,'OP_ESInitMsg',25),(513,839,844,'OP_ESReadyForClientsMsg',26),(514,839,844,'OP_CreateZoneInstanceMsg',27),(515,839,844,'OP_ZoneInstanceCreateReplyMsg',28),(516,839,844,'OP_ZoneInstanceDestroyedMsg',29),(517,839,844,'OP_ExpectClientAsCharacterRequest',30),(518,839,844,'OP_ZoneInfoMsg',31),(519,839,844,'OP_DoneLoadingZoneResourcesMsg',32),(520,839,844,'OP_DoneSendingInitialEntitiesMsg',33),(521,839,844,'OP_DoneLoadingEntityResourcesMsg',34),(522,839,844,'OP_PredictionUpdateMsg',35),(523,839,844,'OP_UpdatePositionMsg',36),(524,839,844,'OP_SetRemoteCmdsMsg',37),(525,839,844,'OP_RemoteCmdMsg',38),(526,839,844,'OP_GameWorldTimeMsg',39),(527,839,844,'OP_MOTDMsg',40),(528,839,844,'OP_ZoneMOTDMsg',41),(529,839,844,'OP_AvatarCreatedMsg',42),(530,839,844,'OP_AvatarDestroyedMsg',43),(531,839,844,'OP_RequestCampMsg',45),(532,839,844,'OP_CampStartedMsg',46),(533,839,844,'OP_CampAbortedMsg',47),(534,839,844,'OP_WhoQueryRequestMsg',48),(535,839,844,'OP_WhoQueryReplyMsg',49),(536,839,844,'OP_MonitorReplyMsg',50),(537,839,844,'OP_MonitorCharacterListMsg',51),(538,839,844,'OP_MonitorCharacterListRequestMsg',52),(539,839,844,'OP_ClientCmdMsg',53),(540,839,844,'OP_DispatchESMsg',54),(541,839,844,'OP_DispatchClientCmdMsg',55),(542,839,844,'OP_UpdateTargetMsg',56),(543,839,844,'OP_UpdateTargetLocMsg',57),(544,839,844,'OP_UpdateCharacterSheetMsg',58),(545,839,844,'OP_UpdateSpellBookMsg',59),(546,839,844,'OP_UpdateInventoryMsg',61),(547,839,844,'OP_UpdateRecipeBookMsg',63),(548,839,844,'OP_RequestRecipeDetailsMsg',64),(549,839,844,'OP_RecipeDetailsMsg',65),(550,839,844,'OP_UpdateSkillBookMsg',66),(551,839,844,'OP_UpdateSkillsMsg',67),(552,839,844,'OP_UpdateOpportunityMsg',68),(553,839,844,'OP_ChangeZoneMsg',70),(554,839,844,'OP_ClientTeleportRequestMsg',71),(555,839,844,'OP_TeleportWithinZoneMsg',72),(556,839,844,'OP_TeleportWithinZoneNoReloadMsg',73),(557,839,844,'OP_MigrateClientToZoneRequestMsg',74),(558,839,844,'OP_MigrateClientToZoneReplyMsg',75),(559,839,844,'OP_ReadyToZoneMsg',76),(560,839,844,'OP_RemoveClientFromGroupMsg',77),(561,839,844,'OP_RemoveGroupFromGroupMsg',78),(562,839,844,'OP_MakeGroupLeaderMsg',79),(563,839,844,'OP_GroupCreatedMsg',80),(564,839,844,'OP_GroupDestroyedMsg',81),(565,839,844,'OP_GroupMemberAddedMsg',82),(566,839,844,'OP_GroupMemberRemovedMsg',83),(567,839,844,'OP_GroupRemovedFromGroupMsg',84),(568,839,844,'OP_GroupLeaderChangedMsg',85),(569,839,844,'OP_GroupResendOOZDataMsg',86),(570,839,844,'OP_GroupSettingsChangedMsg',87),(571,839,844,'OP_OutOfZoneMemberDataMsg',88),(572,839,844,'OP_SendLatestRequestMsg',89),(573,839,844,'OP_ClearDataMsg',90),(574,839,844,'OP_SetSocialMsg',91),(575,839,844,'OP_ESStatusMsg',92),(576,839,844,'OP_ESZoneInstanceStatusMsg',93),(577,839,844,'OP_ZonesStatusRequestMsg',94),(578,839,844,'OP_ZonesStatusMsg',95),(579,839,844,'OP_ESWeatherRequestMsg',96),(580,839,844,'OP_ESWeatherRequestEndMsg',97),(581,839,844,'OP_DialogSelectMsg',98),(582,839,844,'OP_DialogCloseMsg',99),(583,839,844,'OP_RemoveSpellEffectMsg',100),(584,839,844,'OP_RemoveConcentrationMsg',101),(585,839,844,'OP_QuestJournalOpenMsg',102),(586,839,844,'OP_QuestJournalInspectMsg',103),(587,839,844,'OP_QuestJournalSetVisibleMsg',104),(588,839,844,'OP_QuestJournalWaypointMsg',105),(589,839,844,'OP_CreateGuildRequestMsg',108),(590,839,844,'OP_CreateGuildReplyMsg',109),(591,839,844,'OP_GuildsayMsg',110),(592,839,844,'OP_GuildUpdateMsg',111),(593,839,844,'OP_DeleteGuildMsg',112),(594,839,844,'OP_FellowshipExpMsg',113),(595,839,844,'OP_ConsignmentCloseStoreMsg',114),(596,839,844,'OP_ConsignItemRequestMsg',115),(597,839,844,'OP_ConsignItemResponseMsg',116),(598,839,844,'OP_PurchaseConsignmentRequestMsg',117),(599,839,844,'OP_HouseDeletedRemotelyMsg',118),(600,839,844,'OP_UpdateHouseDataMsg',119),(601,839,844,'OP_UpdateHouseAccessDataMsg',120),(602,839,844,'OP_PlayerHouseBaseScreenMsg',121),(603,839,844,'OP_PlayerHousePurchaseScreenMsg',122),(604,839,844,'OP_PlayerHouseAccessUpdateMsg',123),(605,839,844,'OP_PlayerHouseDisplayStatusMsg',124),(606,839,844,'OP_PlayerHouseCloseUIMsg',125),(607,839,844,'OP_BuyPlayerHouseMsg',126),(608,839,844,'OP_BuyPlayerHouseTintMsg',127),(609,839,844,'OP_CollectAllHouseItemsMsg',128),(610,839,844,'OP_RelinquishHouseMsg',129),(611,839,844,'OP_EnterHouseMsg',130),(612,839,844,'OP_ExitHouseMsg',131),(613,839,844,'OP_HouseDefaultAccessSetMsg',132),(614,839,844,'OP_HouseAccessSetMsg',133),(615,839,844,'OP_HouseAccessRemoveMsg',134),(616,839,844,'OP_PayHouseUpkeepMsg',135),(617,839,844,'OP_MoveableObjectPlacementCriteri',136),(618,839,844,'OP_EnterMoveObjectModeMsg',137),(619,839,844,'OP_PositionMoveableObject',138),(620,839,844,'OP_CancelMoveObjectModeMsg',139),(621,839,844,'OP_ShaderCustomizationMsg',140),(622,839,844,'OP_ReplaceableSubMeshesMsg',141),(623,839,844,'OP_HouseCustomizationScreenMsg',142),(624,839,844,'OP_CustomizationPurchaseRequestMs',143),(625,839,844,'OP_CustomizationSetRequestMsg',144),(626,839,844,'OP_CustomizationReplyMsg',145),(627,839,844,'OP_TintWidgetsMsg',146),(628,839,844,'OP_ExamineConsignmentRequestMsg',147),(629,839,844,'OP_ExamineConsignmentResponseMsg',148),(630,839,844,'OP_UISettingsResponseMsg',149),(631,839,844,'OP_UIResetMsg',150),(632,839,844,'OP_KeymapLoadMsg',151),(633,839,844,'OP_KeymapNoneMsg',152),(634,839,844,'OP_KeymapDataMsg',153),(635,839,844,'OP_KeymapSaveMsg',154),(636,839,844,'OP_DispatchSpellCmdMsg',155),(637,839,844,'OP_EntityVerbsRequestMsg',157),(638,839,844,'OP_EntityVerbsReplyMsg',158),(639,839,844,'OP_EntityVerbsVerbMsg',159),(640,839,844,'OP_ChatRelationshipUpdateMsg',161),(641,839,844,'OP_LootItemsRequestMsg',162),(642,839,844,'OP_StoppedLootingMsg',163),(643,839,844,'OP_SitMsg',164),(644,839,844,'OP_StandMsg',165),(645,839,844,'OP_SatMsg',166),(646,839,844,'OP_StoodMsg',167),(647,839,844,'OP_ClearForTakeOffMsg',168),(648,839,844,'OP_ReadyForTakeOffMsg',169),(649,839,844,'OP_ShowIllusionsMsg',170),(650,839,844,'OP_HideIllusionsMsg',171),(651,839,844,'OP_ExamineItemRequestMsg',172),(652,839,844,'OP_ReadBookPageMsg',173),(653,839,844,'OP_DefaultGroupOptionsRequestMsg',174),(654,839,844,'OP_DefaultGroupOptionsMsg',175),(655,839,844,'OP_GroupOptionsMsg',176),(656,839,844,'OP_DisplayGroupOptionsScreenMsg',177),(657,839,844,'OP_DisplayInnVisitScreenMsg',178),(658,839,844,'OP_DumpSchedulerMsg',179),(659,839,844,'OP_LSRequestPlayerDescMsg',180),(660,839,844,'OP_LSCheckAcctLockMsg',181),(661,839,844,'OP_WSAcctLockStatusMsg',182),(662,839,844,'OP_RequestHelpRepathMsg',183),(663,839,844,'OP_RequestTargetLocMsg',184),(664,839,844,'OP_UpdateMotdMsg',185),(665,839,844,'OP_PerformPlayerKnockbackMsg',186),(666,839,844,'OP_PerformCameraShakeMsg',187),(667,839,844,'OP_PopulateSkillMapsMsg',188),(668,839,844,'OP_CancelledFeignMsg',190),(669,839,844,'OP_SignalMsg',191),(670,839,844,'OP_ShowCreateFromRecipeUIMsg',192),(671,839,844,'OP_CancelCreateFromRecipeMsg',193),(672,839,844,'OP_BeginItemCreationMsg',194),(673,839,844,'OP_StopItemCreationMsg',195),(674,839,844,'OP_ShowItemCreationProcessUIMsg',196),(675,839,844,'OP_UpdateItemCreationProcessUIMsg',197),(676,839,844,'OP_DisplayTSEventReactionMsg',198),(677,839,844,'OP_ShowRecipeBookMsg',199),(678,839,844,'OP_KnowledgebaseRequestMsg',200),(679,839,844,'OP_KnowledgebaseResponseMsg',201),(680,839,844,'OP_CSTicketHeaderRequestMsg',202),(681,839,844,'OP_CSTicketInfoMsg',203),(682,839,844,'OP_CSTicketCommentRequestMsg',204),(683,839,844,'OP_CSTicketCommentResponseMsg',205),(684,839,844,'OP_CSTicketCreateMsg',206),(685,839,844,'OP_CSTicketAddCommentMsg',207),(686,839,844,'OP_CSTicketDeleteMsg',208),(687,839,844,'OP_CSTicketChangeNotificationMsg',209),(688,839,844,'OP_WorldDataUpdateMsg',210),(689,839,844,'OP_KnownLanguagesMsg',211),(690,839,844,'OP_LsRequestClientCrashLogMsg',212),(691,839,844,'OP_LsClientBaselogReplyMsg',213),(692,839,844,'OP_LsClientCrashlogReplyMsg',214),(693,839,844,'OP_LsClientAlertlogReplyMsg',215),(694,839,844,'OP_LsClientVerifylogReplyMsg',216),(695,839,844,'OP_ClientTeleportToLocationMsg',217),(696,839,844,'OP_UpdateClientPredFlagsMsg',218),(697,839,844,'OP_ChangeServerControlFlagMsg',219),(698,839,844,'OP_CSToolsRequestMsg',220),(699,839,844,'OP_CSToolsResponseMsg',221),(700,839,844,'OP_AddSocialStructureStandingMsg',222),(701,839,844,'OP_CreateBoatTransportsMsg',223),(702,839,844,'OP_PositionBoatTransportMsg',224),(703,839,844,'OP_MigrateBoatTransportMsg',225),(704,839,844,'OP_MigrateBoatTransportReplyMsg',226),(705,839,844,'OP_DisplayDebugNLLPointsMsg',227),(706,839,844,'OP_ExamineInfoRequestMsg',228),(707,839,844,'OP_QuickbarInitMsg',229),(708,839,844,'OP_QuickbarUpdateMsg',230),(709,839,844,'OP_MacroInitMsg',231),(710,839,844,'OP_MacroUpdateMsg',232),(711,839,844,'OP_QuestionnaireMsg',233),(712,839,844,'OP_LevelChangedMsg',234),(713,839,844,'OP_SpellGainedMsg',235),(714,839,844,'OP_EncounterBrokenMsg',236),(715,839,844,'OP_OnscreenMsgMsg',237),(716,839,844,'OP_DisplayWarningMsg',238),(717,839,844,'OP_ModifyGuildMsg',239),(718,839,844,'OP_GuildEventMsg',240),(719,839,844,'OP_GuildEventAddMsg',241),(720,839,844,'OP_GuildEventActionMsg',242),(721,839,844,'OP_GuildEventListMsg',243),(722,839,844,'OP_RequestGuildEventDetailsMsg',244),(723,839,844,'OP_GuildEventDetailsMsg',245),(724,839,844,'OP_RequestGuildInfoMsg',246),(725,839,844,'OP_GuildBankActionMsg',247),(726,839,844,'OP_GuildBankActionResponseMsg',248),(727,839,844,'OP_GuildBankItemDetailsRequestMsg',249),(728,839,844,'OP_GuildBankItemDetailsResponseMs',250),(729,839,844,'OP_GuildBankUpdateMsg',251),(730,839,844,'OP_GuildBankEventListMsg',252),(731,839,844,'OP_RequestGuildBankEventDetailsMs',253),(732,839,844,'OP_RewardPackMsg',254),(733,839,844,'OP_RenameGuildMsg',255),(734,839,844,'OP_ZoneToFriendRequestMsg',257),(735,839,844,'OP_ZoneToFriendReplyMsg',258),(736,839,844,'OP_ChatCreateChannelMsg',259),(737,839,844,'OP_ChatJoinChannelMsg',260),(738,839,844,'OP_ChatWhoChannelMsg',261),(739,839,844,'OP_ChatLeaveChannelMsg',262),(740,839,844,'OP_ChatTellChannelMsg',263),(741,839,844,'OP_ChatTellUserMsg',264),(742,839,844,'OP_ChatToggleFriendMsg',265),(743,839,844,'OP_ChatToggleIgnoreMsg',266),(744,839,844,'OP_ChatSendFriendsMsg',267),(745,839,844,'OP_ChatSendIgnoresMsg',268),(746,839,844,'OP_QuestReward',294),(747,839,844,'OP_ChatFiltersMsg',309),(748,839,844,'OP_MailGetHeadersMsg',310),(749,839,844,'OP_MailGetMessageMsg',311),(750,839,844,'OP_MailSendMessageMsg',312),(751,839,844,'OP_MailDeleteMessageMsg',313),(752,839,844,'OP_MailGetHeadersReplyMsg',314),(753,839,844,'OP_MailGetMessageReplyMsg',315),(754,839,844,'OP_MailSendMessageReplyMsg',316),(755,839,844,'OP_MailCommitSendMessageMsg',317),(756,839,844,'OP_MailSendSystemMessageMsg',318),(757,839,844,'OP_MailRemoveAttachFromMailMsg',319),(758,839,844,'OP_WaypointRequestMsg',321),(759,839,844,'OP_WaypointReplyMsg',322),(760,839,844,'OP_WaypointSelectMsg',323),(761,839,844,'OP_WaypointUpdateMsg',324),(762,839,844,'OP_CharNameChangedMsg',325),(763,839,844,'OP_ShowZoneTeleporterDestinations',326),(764,839,844,'OP_SelectZoneTeleporterDestinatio',327),(765,839,844,'OP_ReloadLocalizedTxtMsg',328),(766,839,844,'OP_RequestGuildMembershipMsg',329),(767,839,844,'OP_GuildMembershipResponseMsg',330),(768,839,844,'OP_LeaveGuildNotifyMsg',331),(769,839,844,'OP_JoinGuildNotifyMsg',332),(770,839,844,'OP_AvatarUpdateMsg',334),(771,839,844,'OP_BioUpdateMsg',335),(772,839,844,'OP_InspectPlayerMsg',336),(773,839,844,'OP_WSServerLockMsg',337),(774,839,844,'OP_LSServerLockMsg',338),(775,839,844,'OP_WSServerHideMsg',339),(776,839,844,'OP_CsCategoryRequestMsg',340),(777,839,844,'OP_CsCategoryResponseMsg',341),(778,839,844,'OP_KnowledgeWindowSlotMappingMsg',342),(779,839,844,'OP_LFGUpdateMsg',343),(780,839,844,'OP_AFKUpdateMsg',344),(781,839,844,'OP_AnonUpdateMsg',345),(782,839,844,'OP_UpdateActivePublicZonesMsg',346),(783,839,844,'OP_UnknownNpcMsg',347),(784,839,844,'OP_PromoFlagsDetailsMsg',348),(785,839,844,'OP_ConsignViewCreateMsg',349),(786,839,844,'OP_ConsignViewGetPageMsg',350),(787,839,844,'OP_ConsignViewReleaseMsg',351),(788,839,844,'OP_ConsignRemoveItemsMsg',352),(789,839,844,'OP_UpdateDebugRadiiMsg',353),(790,839,844,'OP_SnoopMsg',354),(791,839,844,'OP_ReportMsg',355),(792,839,844,'OP_UpdateRaidMsg',356),(793,839,844,'OP_ConsignViewSortMsg',357),(794,839,844,'OP_TitleUpdateMsg',358),(795,839,844,'OP_ClientFellMsg',359),(796,839,844,'OP_ClientInDeathRegionMsg',360),(797,839,844,'OP_CampClientMsg',361),(798,839,844,'OP_CSToolAccessResponseMsg',362),(799,839,844,'OP_TrackingUpdateMsg',363),(800,839,844,'OP_BeginTrackingMsg',364),(801,839,844,'OP_StopTrackingMsg',365),(802,839,844,'OP_GetAvatarAccessRequestForCSToo',366),(803,839,844,'OP_AdvancementRequestMsg',367),(804,839,844,'OP_UpdateAvgFrameTimeMsg',368),(805,839,844,'OP_MapFogDataInitMsg',369),(806,839,844,'OP_MapFogDataUpdateMsg',370),(807,839,844,'OP_CloseGroupInviteWindowMsg',371),(808,839,844,'OP_UpdateGroupMemberDataMsg',372),(809,839,844,'OP_WorldPingMsg',373),(810,839,844,'OP_MoveLogUpdateMsg',374),(811,839,844,'OP_OfferQuestMsg',375),(812,839,844,'OP_WorldShutdownUpdateMsg',376),(813,839,844,'OP_DisplayMailScreenMsg',377),(814,839,844,'OP_ClientIdleBeginMsg',378),(815,839,844,'OP_ClientIdleEndMsg',379),(816,839,844,'OP_PurchaseConsignmentLoreCheckRe',380),(817,839,844,'OP_NotifyApprenticeStoppedMentori',381),(818,839,844,'OP_CorruptedClientMsg',382),(819,839,844,'OP_WorldDataChangeMsg',383),(820,839,844,'OP_MailEventNotificationMsg',384),(821,839,844,'OP_RestartZoneMsg',385),(822,839,844,'OP_FlightPathsMsg',386),(823,839,844,'OP_CharacterLinkdeadMsg',387),(824,839,844,'OP_CharTransferStartRequestMsg',388),(825,839,844,'OP_CharTransferStartReplyMsg',389),(826,839,844,'OP_CharTransferRequestMsg',390),(827,839,844,'OP_CharTransferReplyMsg',391),(828,839,844,'OP_CharTransferRollbackRequestMsg',392),(829,839,844,'OP_CharTransferCommitRequestMsg',393),(830,839,844,'OP_CharTransferRollbackReplyMsg',394),(831,839,844,'OP_CharTransferCommitReplyMsg',395),(832,839,844,'OP_GetCharacterSerializedRequestM',396),(833,839,844,'OP_GetCharacterSerializedReplyMsg',397),(834,839,844,'OP_CreateCharFromCBBRequestMsg',398),(835,839,844,'OP_CreateCharFromCBBReplyMsg',399),(836,839,844,'OP_HousingDataChangedMsg',400),(837,839,844,'OP_HousingRestoreMsg',401),(838,839,844,'OP_AuctionItem',402),(839,839,844,'OP_AuctionItemReply',403),(840,839,844,'OP_AuctionCoin',404),(841,839,844,'OP_AuctionCoinReply',405),(842,839,844,'OP_AuctionCharacter',406),(843,839,844,'OP_AuctionCharacterReply',407),(844,839,844,'OP_AuctionCommitMsg',408),(845,839,844,'OP_AuctionAbortMsg',409),(846,839,844,'OP_CharTransferValidateRequestMsg',410),(847,839,844,'OP_CharTransferValidateReplyMsg',411),(848,839,844,'OP_RaceRestrictionMsg',412),(849,839,844,'OP_SetInstanceDisplayNameMsg',413),(850,839,844,'OP_GetAuctionAssetIDMsg',414),(851,839,844,'OP_GetAuctionAssetIDReplyMsg',415),(852,839,844,'OP_ResendWorldChannelsMsg',416),(853,839,844,'OP_DisplayExchangeScreenMsg',417),(854,839,844,'OP_ArenaGameTypesMsg',418),(855,839,844,'OP_AuditAuctionEventMsg',420),(856,839,844,'OP_InviteRequestMsg',422),(857,839,844,'OP_InviteResponseMsg',423),(858,839,844,'OP_InviteTargetResponseMsg',424),(859,839,844,'OP_InspectPlayerRequestMsg',425),(860,839,844,'OP_DispatchMsg',426),(861,839,844,'OP_DisplayEventMsg',427),(862,839,844,'OP_PrePossessionMsg',428),(863,839,844,'OP_PostPossessionMsg',429),(864,839,844,'OP_AdventureList',454),(865,839,844,'OP_CancelSpellCast',455),(866,839,844,'OP_UpdateTitleCmd',461),(867,839,844,'OP_AttackAllowed',467),(868,839,844,'OP_AttackNotAllowed',468),(869,839,844,'OP_DressingRoom',474),(870,839,844,'OP_SkillInfoRequest',478),(871,839,844,'OP_SkillInfoResponse',479),(872,839,844,'OP_EqHearChatCmd',480),(873,839,844,'OP_EqDisplayTextCmd',481),(874,839,844,'OP_EqCreateGhostCmd',482),(875,839,844,'OP_EqCreateWidgetCmd',483),(876,839,844,'OP_EqCreateSignWidgetCmd',484),(877,839,844,'OP_EqDestroyGhostCmd',485),(878,839,844,'OP_EqUpdateGhostCmd',486),(879,839,844,'OP_EqSetControlGhostCmd',487),(880,839,844,'OP_EqSetPOVGhostCmd',488),(881,839,844,'OP_EqHearCombatCmd',489),(882,839,844,'OP_EqHearSpellCastCmd',490),(883,839,844,'OP_EqHearSpellInterruptCmd',493),(884,839,844,'OP_EqHearSpellFizzleCmd',494),(885,839,844,'OP_EqHearConsiderCmd',495),(886,839,844,'OP_EqUpdateSubClassesCmd',496),(887,839,844,'OP_EqCreateListBoxCmd',497),(888,839,844,'OP_EqSetDebugPathPointsCmd',498),(889,839,844,'OP_EqCannedEmoteCmd',500),(890,839,844,'OP_EqStateCmd',501),(891,839,844,'OP_EqPlaySoundCmd',502),(892,839,844,'OP_EqPlaySound3DCmd',503),(893,839,844,'OP_EqPlayVoiceCmd',504),(894,839,844,'OP_EqHearDrowningCmd',505),(895,839,844,'OP_EqHearDeathCmd',506),(896,839,844,'OP_EqGroupMemberRemovedCmd',507),(897,839,844,'OP_EqHearChainEffectCmd',508),(898,839,844,'OP_EqReceiveOfferCmd',509),(899,839,844,'OP_EqInspectPCResultsCmd',510),(900,839,844,'OP_EqDrawablePathGraphCmd',511),(901,839,844,'OP_EqDialogOpenCmd',512),(902,839,844,'OP_EqDialogCloseCmd',513),(903,839,844,'OP_EqFactionUpdateCmd',514),(904,839,844,'OP_EqCollectionUpdateCmd',515),(905,839,844,'OP_EqCollectionFilterCmd',516),(906,839,844,'OP_EqCollectionItemCmd',517),(907,839,844,'OP_EqQuestJournalUpdateCmd',518),(908,839,844,'OP_EqQuestJournalReplyCmd',520),(909,839,844,'OP_EqQuestGroupCmd',521),(910,839,844,'OP_EqUpdateMerchantCmd',522),(911,839,844,'OP_EqUpdateStoreCmd',523),(912,839,844,'OP_EqUpdatePlayerTradeCmd',524),(913,839,844,'OP_EqHelpPathCmd',525),(914,839,844,'OP_EqHelpPathClearCmd',526),(915,839,844,'OP_EqUpdateBankCmd',527),(916,839,844,'OP_EqExamineInfoCmd',528),(917,839,844,'OP_EqCloseWindowCmd',529),(918,839,844,'OP_EqUpdateLootCmd',530),(919,839,844,'OP_EqJunctionListCmd',531),(920,839,844,'OP_EqShowDeathWindowCmd',532),(921,839,844,'OP_EqDisplaySpellFailCmd',533),(922,839,844,'OP_EqSpellCastStartCmd',534),(923,839,844,'OP_EqSpellCastEndCmd',535),(924,839,844,'OP_EqResurrectedCmd',536),(925,839,844,'OP_EqChoiceWinCmd',537),(926,839,844,'OP_EqSetDefaultVerbCmd',538),(927,839,844,'OP_EqInstructionWindowCmd',540),(928,839,844,'OP_EqInstructionWindowCloseCmd',541),(929,839,844,'OP_EqInstructionWindowGoalCmd',542),(930,839,844,'OP_EqInstructionWindowTaskCmd',543),(931,839,844,'OP_EqEnableGameEventCmd',544),(932,839,844,'OP_EqShowWindowCmd',545),(933,839,844,'OP_EqEnableWindowCmd',546),(934,839,844,'OP_EqFlashWindowCmd',547),(935,839,844,'OP_EqHearPlayFlavorCmd',548),(936,839,844,'OP_EqUpdateSignWidgetCmd',550),(937,839,844,'OP_EqDebugPVDCmd',551),(938,839,844,'OP_EqShowBookCmd',552),(939,839,844,'OP_EqQuestionnaireCmd',553),(940,839,844,'OP_EqGetProbsCmd',554),(941,839,844,'OP_EqHearHealCmd',555),(942,839,844,'OP_EqChatChannelUpdateCmd',556),(943,839,844,'OP_EqWhoChannelQueryReplyCmd',557),(944,839,844,'OP_EqAvailWorldChannelsCmd',558),(945,839,844,'OP_EqUpdateTargetCmd',559),(946,839,844,'OP_EqConsignmentItemsCmd',561),(947,839,844,'OP_EqStartBrokerCmd',563),(948,839,844,'OP_EqMapExplorationCmd',564),(949,839,844,'OP_EqStoreLogCmd',565),(950,839,844,'OP_EqSpellMoveToRangeAndRetryCmd',566),(951,839,844,'OP_EqUpdatePlayerMailCmd',567),(952,839,844,'OP_EqArenaResultsCmd',568),(953,839,844,'OP_EqGuildBankEventActionCmd',569),(954,839,844,'OP_EqGuildBankExamineInfoCmd',570),(955,839,844,'OP_EqHearSpellNoLandCmd',571),(956,839,844,'OP_Lottery',572),(957,839,844,'OP_GuildRecruitingMemberInfo',573),(958,839,844,'OP_GuildRecruiting',574),(959,839,844,'OP_GuildRecruitingDetails',575),(960,839,844,'OP_GuildRecruitingImage',576),(961,839,844,'OP_PointOfInterest',597),(962,839,844,'OP_TraitsList',599),(963,839,844,'OP_RecipeList',608),(964,839,844,'OP_CharacterAchievements',655),(965,839,844,'OP_AddClientToGroupMsg',999),(966,839,844,'OP_AddGroupToGroupMsg',999),(967,839,844,'OP_GuildKickMsg',999),(968,839,844,'OP_PurchaseConsignmentResponseMsg',999),(969,839,844,'OP_ProcessScriptMsg',999),(970,839,844,'OP_ProcessWorkspaceMsg',999),(971,839,844,'OP_QuickbarAddMsg',999),(972,839,844,'OP_SkillSlotMapping',999),(973,839,844,'OP_MapRequest',999),(974,839,844,'OP_BadLanguageFilter',999),(975,839,844,'OP_Unknown',10000),(976,839,844,'OP_WSWeatherUpdateMsg',10012),(977,908,927,'OP_LoginRequestMsg',0),(978,908,927,'OP_LoginByNumRequestMsg',1),(979,908,927,'OP_WSLoginRequestMsg',2),(980,908,927,'OP_ESLoginRequestMsg',3),(981,908,927,'OP_LoginReplyMsg',4),(982,908,927,'OP_WSStatusReplyMsg',5),(983,908,927,'OP_WorldStatusChangeMsg',6),(984,908,927,'OP_AllWSDescRequestMsg',7),(985,908,927,'OP_WorldListMsg',8),(986,908,927,'OP_AllCharactersDescRequestMsg',9),(987,908,927,'OP_AllCharactersDescReplyMsg',10),(988,908,927,'OP_CreateCharacterRequestMsg',11),(989,908,927,'OP_CreateCharacterReplyMsg',12),(990,908,927,'OP_WSCreateCharacterRequestMsg',13),(991,908,927,'OP_WSCreateCharacterReplyMsg',14),(992,908,927,'OP_ReskinCharacterRequestMsg',15),(993,908,927,'OP_DeleteCharacterRequestMsg',16),(994,908,927,'OP_DeleteCharacterReplyMsg',17),(995,908,927,'OP_PlayCharacterRequestMsg',18),(996,908,927,'OP_PlayCharacterReplyMsg',19),(997,908,927,'OP_ExpectClientAsCharacterReplyMs',22),(998,908,927,'OP_ServerPlayCharacterRequestMsg',23),(999,908,927,'OP_ServerPlayCharacterReplyMsg',24),(1000,908,927,'OP_ESInitMsg',25),(1001,908,927,'OP_ESReadyForClientsMsg',26),(1002,908,927,'OP_CreateZoneInstanceMsg',27),(1003,908,927,'OP_ZoneInstanceCreateReplyMsg',28),(1004,908,927,'OP_ZoneInstanceDestroyedMsg',29),(1005,908,927,'OP_ExpectClientAsCharacterRequest',30),(1006,908,927,'OP_ZoneInfoMsg',31),(1007,908,927,'OP_DoneLoadingZoneResourcesMsg',32),(1008,908,927,'OP_DoneSendingInitialEntitiesMsg',33),(1009,908,927,'OP_DoneLoadingEntityResourcesMsg',34),(1010,908,927,'OP_PredictionUpdateMsg',35),(1011,908,927,'OP_UpdatePositionMsg',37),(1012,908,927,'OP_SetRemoteCmdsMsg',39),(1013,908,927,'OP_RemoteCmdMsg',40),(1014,908,927,'OP_GameWorldTimeMsg',41),(1015,908,927,'OP_MOTDMsg',42),(1016,908,927,'OP_ZoneMOTDMsg',43),(1017,908,927,'OP_AvatarCreatedMsg',44),(1018,908,927,'OP_AvatarDestroyedMsg',45),(1019,908,927,'OP_RequestCampMsg',47),(1020,908,927,'OP_CampStartedMsg',48),(1021,908,927,'OP_CampAbortedMsg',49),(1022,908,927,'OP_WhoQueryRequestMsg',50),(1023,908,927,'OP_WhoQueryReplyMsg',51),(1024,908,927,'OP_MonitorReplyMsg',52),(1025,908,927,'OP_MonitorCharacterListMsg',53),(1026,908,927,'OP_MonitorCharacterListRequestMsg',54),(1027,908,927,'OP_ClientCmdMsg',55),(1028,908,927,'OP_DispatchESMsg',56),(1029,908,927,'OP_DispatchClientCmdMsg',57),(1030,908,927,'OP_UpdateTargetMsg',58),(1031,908,927,'OP_UpdateTargetLocMsg',59),(1032,908,927,'OP_UpdateCharacterSheetMsg',60),(1033,908,927,'OP_UpdateSpellBookMsg',61),(1034,908,927,'OP_UpdateInventoryMsg',63),(1035,908,927,'OP_UpdateRecipeBookMsg',65),(1036,908,927,'OP_RequestRecipeDetailsMsg',66),(1037,908,927,'OP_RecipeDetailsMsg',67),(1038,908,927,'OP_UpdateSkillBookMsg',68),(1039,908,927,'OP_UpdateSkillsMsg',69),(1040,908,927,'OP_UpdateOpportunityMsg',70),(1041,908,927,'OP_ChangeZoneMsg',72),(1042,908,927,'OP_ClientTeleportRequestMsg',73),(1043,908,927,'OP_TeleportWithinZoneMsg',74),(1044,908,927,'OP_TeleportWithinZoneNoReloadMsg',75),(1045,908,927,'OP_MigrateClientToZoneRequestMsg',76),(1046,908,927,'OP_MigrateClientToZoneReplyMsg',77),(1047,908,927,'OP_ReadyToZoneMsg',78),(1048,908,927,'OP_RemoveClientFromGroupMsg',79),(1049,908,927,'OP_RemoveGroupFromGroupMsg',80),(1050,908,927,'OP_MakeGroupLeaderMsg',81),(1051,908,927,'OP_GroupCreatedMsg',82),(1052,908,927,'OP_GroupDestroyedMsg',83),(1053,908,927,'OP_GroupMemberAddedMsg',84),(1054,908,927,'OP_GroupMemberRemovedMsg',85),(1055,908,927,'OP_GroupRemovedFromGroupMsg',86),(1056,908,927,'OP_GroupLeaderChangedMsg',87),(1057,908,927,'OP_GroupResendOOZDataMsg',88),(1058,908,927,'OP_GroupSettingsChangedMsg',89),(1059,908,927,'OP_OutOfZoneMemberDataMsg',90),(1060,908,927,'OP_SendLatestRequestMsg',91),(1061,908,927,'OP_ClearDataMsg',92),(1062,908,927,'OP_SetSocialMsg',93),(1063,908,927,'OP_ESStatusMsg',94),(1064,908,927,'OP_ESZoneInstanceStatusMsg',95),(1065,908,927,'OP_ZonesStatusRequestMsg',96),(1066,908,927,'OP_ZonesStatusMsg',97),(1067,908,927,'OP_ESWeatherRequestMsg',98),(1068,908,927,'OP_ESWeatherRequestEndMsg',99),(1069,908,927,'OP_DialogSelectMsg',102),(1070,908,927,'OP_DialogCloseMsg',103),(1071,908,927,'OP_RemoveSpellEffectMsg',104),(1072,908,927,'OP_RemoveConcentrationMsg',105),(1073,908,927,'OP_QuestJournalOpenMsg',106),(1074,908,927,'OP_QuestJournalInspectMsg',107),(1075,908,927,'OP_QuestJournalSetVisibleMsg',108),(1076,908,927,'OP_QuestJournalWaypointMsg',109),(1077,908,927,'OP_CreateGuildRequestMsg',110),(1078,908,927,'OP_CreateGuildReplyMsg',111),(1079,908,927,'OP_GuildsayMsg',112),(1080,908,927,'OP_GuildUpdateMsg',115),(1081,908,927,'OP_DeleteGuildMsg',116),(1082,908,927,'OP_FellowshipExpMsg',117),(1083,908,927,'OP_ConsignmentCloseStoreMsg',118),(1084,908,927,'OP_ConsignItemRequestMsg',119),(1085,908,927,'OP_ConsignItemResponseMsg',120),(1086,908,927,'OP_PurchaseConsignmentRequestMsg',121),(1087,908,927,'OP_HouseDeletedRemotelyMsg',122),(1088,908,927,'OP_UpdateHouseDataMsg',123),(1089,908,927,'OP_UpdateHouseAccessDataMsg',124),(1090,908,927,'OP_PlayerHouseBaseScreenMsg',125),(1091,908,927,'OP_PlayerHousePurchaseScreenMsg',126),(1092,908,927,'OP_PlayerHouseAccessUpdateMsg',127),(1093,908,927,'OP_PlayerHouseDisplayStatusMsg',128),(1094,908,927,'OP_PlayerHouseCloseUIMsg',129),(1095,908,927,'OP_BuyPlayerHouseMsg',130),(1096,908,927,'OP_BuyPlayerHouseTintMsg',131),(1097,908,927,'OP_CollectAllHouseItemsMsg',132),(1098,908,927,'OP_RelinquishHouseMsg',133),(1099,908,927,'OP_EnterHouseMsg',134),(1100,908,927,'OP_ExitHouseMsg',135),(1101,908,927,'OP_HouseDefaultAccessSetMsg',136),(1102,908,927,'OP_HouseAccessSetMsg',137),(1103,908,927,'OP_HouseAccessRemoveMsg',138),(1104,908,927,'OP_PayHouseUpkeepMsg',139),(1105,908,927,'OP_MoveableObjectPlacementCriteri',141),(1106,908,927,'OP_EnterMoveObjectModeMsg',142),(1107,908,927,'OP_PositionMoveableObject',143),(1108,908,927,'OP_CancelMoveObjectModeMsg',144),(1109,908,927,'OP_ShaderCustomizationMsg',145),(1110,908,927,'OP_ReplaceableSubMeshesMsg',146),(1111,908,927,'OP_HouseCustomizationScreenMsg',147),(1112,908,927,'OP_CustomizationPurchaseRequestMs',148),(1113,908,927,'OP_CustomizationSetRequestMsg',149),(1114,908,927,'OP_CustomizationReplyMsg',150),(1115,908,927,'OP_TintWidgetsMsg',151),(1116,908,927,'OP_ExamineConsignmentRequestMsg',152),(1117,908,927,'OP_ExamineConsignmentResponseMsg',153),(1118,908,927,'OP_UISettingsResponseMsg',154),(1119,908,927,'OP_UIResetMsg',155),(1120,908,927,'OP_KeymapLoadMsg',156),(1121,908,927,'OP_KeymapNoneMsg',157),(1122,908,927,'OP_KeymapDataMsg',158),(1123,908,927,'OP_KeymapSaveMsg',159),(1124,908,927,'OP_DispatchSpellCmdMsg',160),(1125,908,927,'OP_EntityVerbsRequestMsg',162),(1126,908,927,'OP_EntityVerbsReplyMsg',163),(1127,908,927,'OP_EntityVerbsVerbMsg',164),(1128,908,927,'OP_ChatRelationshipUpdateMsg',166),(1129,908,927,'OP_LootItemsRequestMsg',167),(1130,908,927,'OP_StoppedLootingMsg',168),(1131,908,927,'OP_SitMsg',169),(1132,908,927,'OP_StandMsg',170),(1133,908,927,'OP_SatMsg',171),(1134,908,927,'OP_StoodMsg',172),(1135,908,927,'OP_ClearForTakeOffMsg',173),(1136,908,927,'OP_ReadyForTakeOffMsg',174),(1137,908,927,'OP_ShowIllusionsMsg',175),(1138,908,927,'OP_HideIllusionsMsg',176),(1139,908,927,'OP_ExamineItemRequestMsg',177),(1140,908,927,'OP_ReadBookPageMsg',178),(1141,908,927,'OP_DefaultGroupOptionsRequestMsg',179),(1142,908,927,'OP_DefaultGroupOptionsMsg',180),(1143,908,927,'OP_GroupOptionsMsg',181),(1144,908,927,'OP_DisplayGroupOptionsScreenMsg',182),(1145,908,927,'OP_DisplayInnVisitScreenMsg',183),(1146,908,927,'OP_DumpSchedulerMsg',184),(1147,908,927,'OP_LSRequestPlayerDescMsg',185),(1148,908,927,'OP_LSCheckAcctLockMsg',186),(1149,908,927,'OP_WSAcctLockStatusMsg',187),(1150,908,927,'OP_RequestHelpRepathMsg',188),(1151,908,927,'OP_RequestTargetLocMsg',189),(1152,908,927,'OP_UpdateMotdMsg',190),(1153,908,927,'OP_PerformPlayerKnockbackMsg',191),(1154,908,927,'OP_PerformCameraShakeMsg',192),(1155,908,927,'OP_PopulateSkillMapsMsg',195),(1156,908,927,'OP_CancelledFeignMsg',197),(1157,908,927,'OP_SignalMsg',198),(1158,908,927,'OP_ShowCreateFromRecipeUIMsg',199),(1159,908,927,'OP_CancelCreateFromRecipeMsg',200),(1160,908,927,'OP_BeginItemCreationMsg',201),(1161,908,927,'OP_StopItemCreationMsg',202),(1162,908,927,'OP_ShowItemCreationProcessUIMsg',203),(1163,908,927,'OP_UpdateItemCreationProcessUIMsg',204),(1164,908,927,'OP_DisplayTSEventReactionMsg',205),(1165,908,927,'OP_ShowRecipeBookMsg',206),(1166,908,927,'OP_KnowledgebaseRequestMsg',207),(1167,908,927,'OP_KnowledgebaseResponseMsg',208),(1168,908,927,'OP_CSTicketHeaderRequestMsg',209),(1169,908,927,'OP_CSTicketInfoMsg',210),(1170,908,927,'OP_CSTicketCommentRequestMsg',211),(1171,908,927,'OP_CSTicketCommentResponseMsg',212),(1172,908,927,'OP_CSTicketCreateMsg',213),(1173,908,927,'OP_CSTicketAddCommentMsg',214),(1174,908,927,'OP_CSTicketDeleteMsg',215),(1175,908,927,'OP_CSTicketChangeNotificationMsg',216),(1176,908,927,'OP_WorldDataUpdateMsg',217),(1177,908,927,'OP_KnownLanguagesMsg',218),(1178,908,927,'OP_LsRequestClientCrashLogMsg',219),(1179,908,927,'OP_LsClientBaselogReplyMsg',220),(1180,908,927,'OP_LsClientCrashlogReplyMsg',221),(1181,908,927,'OP_LsClientAlertlogReplyMsg',222),(1182,908,927,'OP_LsClientVerifylogReplyMsg',223),(1183,908,927,'OP_ClientTeleportToLocationMsg',224),(1184,908,927,'OP_UpdateClientPredFlagsMsg',225),(1185,908,927,'OP_ChangeServerControlFlagMsg',226),(1186,908,927,'OP_CSToolsRequestMsg',227),(1187,908,927,'OP_CSToolsResponseMsg',228),(1188,908,927,'OP_AddSocialStructureStandingMsg',229),(1189,908,927,'OP_CreateBoatTransportsMsg',230),(1190,908,927,'OP_PositionBoatTransportMsg',231),(1191,908,927,'OP_MigrateBoatTransportMsg',232),(1192,908,927,'OP_MigrateBoatTransportReplyMsg',233),(1193,908,927,'OP_DisplayDebugNLLPointsMsg',234),(1194,908,927,'OP_ExamineInfoRequestMsg',235),(1195,908,927,'OP_QuickbarInitMsg',236),(1196,908,927,'OP_QuickbarUpdateMsg',237),(1197,908,927,'OP_MacroInitMsg',238),(1198,908,927,'OP_MacroUpdateMsg',239),(1199,908,927,'OP_QuestionnaireMsg',240),(1200,908,927,'OP_LevelChangedMsg',241),(1201,908,927,'OP_SpellGainedMsg',242),(1202,908,927,'OP_EncounterBrokenMsg',243),(1203,908,927,'OP_OnscreenMsgMsg',244),(1204,908,927,'OP_DisplayWarningMsg',245),(1205,908,927,'OP_ModifyGuildMsg',246),(1206,908,927,'OP_GuildEventMsg',247),(1207,908,927,'OP_GuildEventAddMsg',248),(1208,908,927,'OP_GuildEventActionMsg',249),(1209,908,927,'OP_GuildEventListMsg',250),(1210,908,927,'OP_RequestGuildEventDetailsMsg',251),(1211,908,927,'OP_GuildEventDetailsMsg',252),(1212,908,927,'OP_RequestGuildInfoMsg',253),(1213,908,927,'OP_GuildBankActionMsg',254),(1214,908,927,'OP_GuildBankActionResponseMsg',255),(1215,908,927,'OP_GuildBankItemDetailsRequestMsg',256),(1216,908,927,'OP_GuildBankItemDetailsResponseMs',257),(1217,908,927,'OP_GuildBankUpdateMsg',258),(1218,908,927,'OP_GuildBankEventListMsg',259),(1219,908,927,'OP_RequestGuildBankEventDetailsMs',260),(1220,908,927,'OP_RewardPackMsg',261),(1221,908,927,'OP_RenameGuildMsg',262),(1222,908,927,'OP_ZoneToFriendRequestMsg',264),(1223,908,927,'OP_ZoneToFriendReplyMsg',265),(1224,908,927,'OP_ChatCreateChannelMsg',266),(1225,908,927,'OP_ChatJoinChannelMsg',267),(1226,908,927,'OP_ChatWhoChannelMsg',268),(1227,908,927,'OP_ChatLeaveChannelMsg',269),(1228,908,927,'OP_ChatTellChannelMsg',270),(1229,908,927,'OP_ChatTellUserMsg',271),(1230,908,927,'OP_ChatToggleFriendMsg',272),(1231,908,927,'OP_ChatToggleIgnoreMsg',273),(1232,908,927,'OP_ChatSendFriendsMsg',274),(1233,908,927,'OP_ChatSendIgnoresMsg',275),(1234,908,927,'OP_QuestReward',302),(1235,908,927,'OP_ChatFiltersMsg',317),(1236,908,927,'OP_MailGetHeadersMsg',318),(1237,908,927,'OP_MailGetMessageMsg',319),(1238,908,927,'OP_MailSendMessageMsg',320),(1239,908,927,'OP_MailDeleteMessageMsg',321),(1240,908,927,'OP_MailGetHeadersReplyMsg',322),(1241,908,927,'OP_MailGetMessageReplyMsg',323),(1242,908,927,'OP_MailSendMessageReplyMsg',324),(1243,908,927,'OP_MailCommitSendMessageMsg',325),(1244,908,927,'OP_MailSendSystemMessageMsg',326),(1245,908,927,'OP_MailRemoveAttachFromMailMsg',327),(1246,908,927,'OP_WaypointRequestMsg',329),(1247,908,927,'OP_WaypointReplyMsg',330),(1248,908,927,'OP_WaypointSelectMsg',331),(1249,908,927,'OP_WaypointUpdateMsg',332),(1250,908,927,'OP_CharNameChangedMsg',333),(1251,908,927,'OP_ShowZoneTeleporterDestinations',334),(1252,908,927,'OP_SelectZoneTeleporterDestinatio',335),(1253,908,927,'OP_ReloadLocalizedTxtMsg',336),(1254,908,927,'OP_RequestGuildMembershipMsg',337),(1255,908,927,'OP_GuildMembershipResponseMsg',338),(1256,908,927,'OP_LeaveGuildNotifyMsg',339),(1257,908,927,'OP_JoinGuildNotifyMsg',340),(1258,908,927,'OP_AvatarUpdateMsg',342),(1259,908,927,'OP_BioUpdateMsg',343),(1260,908,927,'OP_InspectPlayerMsg',344),(1261,908,927,'OP_WSServerLockMsg',345),(1262,908,927,'OP_LSServerLockMsg',346),(1263,908,927,'OP_WSServerHideMsg',347),(1264,908,927,'OP_CsCategoryRequestMsg',348),(1265,908,927,'OP_CsCategoryResponseMsg',349),(1266,908,927,'OP_KnowledgeWindowSlotMappingMsg',350),(1267,908,927,'OP_LFGUpdateMsg',351),(1268,908,927,'OP_AFKUpdateMsg',352),(1269,908,927,'OP_AnonUpdateMsg',353),(1270,908,927,'OP_UpdateActivePublicZonesMsg',354),(1271,908,927,'OP_UnknownNpcMsg',355),(1272,908,927,'OP_PromoFlagsDetailsMsg',356),(1273,908,927,'OP_ConsignViewCreateMsg',357),(1274,908,927,'OP_ConsignViewGetPageMsg',358),(1275,908,927,'OP_ConsignViewReleaseMsg',359),(1276,908,927,'OP_ConsignRemoveItemsMsg',360),(1277,908,927,'OP_UpdateDebugRadiiMsg',361),(1278,908,927,'OP_SnoopMsg',362),(1279,908,927,'OP_ReportMsg',363),(1280,908,927,'OP_UpdateRaidMsg',364),(1281,908,927,'OP_ConsignViewSortMsg',365),(1282,908,927,'OP_TitleUpdateMsg',366),(1283,908,927,'OP_ClientFellMsg',367),(1284,908,927,'OP_ClientInDeathRegionMsg',368),(1285,908,927,'OP_CampClientMsg',369),(1286,908,927,'OP_CSToolAccessResponseMsg',370),(1287,908,927,'OP_TrackingUpdateMsg',371),(1288,908,927,'OP_BeginTrackingMsg',372),(1289,908,927,'OP_StopTrackingMsg',373),(1290,908,927,'OP_GetAvatarAccessRequestForCSToo',374),(1291,908,927,'OP_AdvancementRequestMsg',375),(1292,908,927,'OP_UpdateAvgFrameTimeMsg',376),(1293,908,927,'OP_MapFogDataInitMsg',377),(1294,908,927,'OP_MapFogDataUpdateMsg',378),(1295,908,927,'OP_CloseGroupInviteWindowMsg',379),(1296,908,927,'OP_UpdateGroupMemberDataMsg',380),(1297,908,927,'OP_WorldPingMsg',381),(1298,908,927,'OP_MoveLogUpdateMsg',382),(1299,908,927,'OP_OfferQuestMsg',383),(1300,908,927,'OP_WorldShutdownUpdateMsg',384),(1301,908,927,'OP_DisplayMailScreenMsg',385),(1302,908,927,'OP_ClientIdleBeginMsg',386),(1303,908,927,'OP_ClientIdleEndMsg',387),(1304,908,927,'OP_PurchaseConsignmentLoreCheckRe',388),(1305,908,927,'OP_NotifyApprenticeStoppedMentori',389),(1306,908,927,'OP_CorruptedClientMsg',390),(1307,908,927,'OP_WorldDataChangeMsg',391),(1308,908,927,'OP_MailEventNotificationMsg',392),(1309,908,927,'OP_RestartZoneMsg',393),(1310,908,927,'OP_FlightPathsMsg',394),(1311,908,927,'OP_CharacterLinkdeadMsg',395),(1312,908,927,'OP_CharTransferStartRequestMsg',396),(1313,908,927,'OP_CharTransferStartReplyMsg',397),(1314,908,927,'OP_CharTransferRequestMsg',398),(1315,908,927,'OP_CharTransferReplyMsg',399),(1316,908,927,'OP_CharTransferRollbackRequestMsg',400),(1317,908,927,'OP_CharTransferCommitRequestMsg',401),(1318,908,927,'OP_CharTransferRollbackReplyMsg',402),(1319,908,927,'OP_CharTransferCommitReplyMsg',403),(1320,908,927,'OP_GetCharacterSerializedRequestM',404),(1321,908,927,'OP_GetCharacterSerializedReplyMsg',405),(1322,908,927,'OP_CreateCharFromCBBRequestMsg',406),(1323,908,927,'OP_CreateCharFromCBBReplyMsg',407),(1324,908,927,'OP_HousingDataChangedMsg',408),(1325,908,927,'OP_HousingRestoreMsg',409),(1326,908,927,'OP_AuctionItem',410),(1327,908,927,'OP_AuctionItemReply',411),(1328,908,927,'OP_AuctionCoin',412),(1329,908,927,'OP_AuctionCoinReply',413),(1330,908,927,'OP_AuctionCharacter',414),(1331,908,927,'OP_AuctionCharacterReply',415),(1332,908,927,'OP_AuctionCommitMsg',416),(1333,908,927,'OP_AuctionAbortMsg',417),(1334,908,927,'OP_CharTransferValidateRequestMsg',418),(1335,908,927,'OP_CharTransferValidateReplyMsg',419),(1336,908,927,'OP_RaceRestrictionMsg',420),(1337,908,927,'OP_SetInstanceDisplayNameMsg',421),(1338,908,927,'OP_GetAuctionAssetIDMsg',422),(1339,908,927,'OP_GetAuctionAssetIDReplyMsg',423),(1340,908,927,'OP_ResendWorldChannelsMsg',424),(1341,908,927,'OP_DisplayExchangeScreenMsg',425),(1342,908,927,'OP_ArenaGameTypesMsg',426),(1343,908,927,'OP_AuditAuctionEventMsg',428),(1344,908,927,'OP_InviteRequestMsg',430),(1345,908,927,'OP_InviteResponseMsg',431),(1346,908,927,'OP_InviteTargetResponseMsg',432),(1347,908,927,'OP_InspectPlayerRequestMsg',433),(1348,908,927,'OP_DispatchMsg',434),(1349,908,927,'OP_DisplayEventMsg',435),(1350,908,927,'OP_PrePossessionMsg',436),(1351,908,927,'OP_PostPossessionMsg',437),(1352,908,927,'OP_AdventureList',462),(1353,908,927,'OP_CancelSpellCast',463),(1354,908,927,'OP_UpdateTitleCmd',469),(1355,908,927,'OP_AttackAllowed',475),(1356,908,927,'OP_AttackNotAllowed',476),(1357,908,927,'OP_DressingRoom',482),(1358,908,927,'OP_SkillInfoRequest',486),(1359,908,927,'OP_SkillInfoResponse',487),(1360,908,927,'OP_BadLanguageFilter',490),(1361,908,927,'OP_MapRequest',492),(1362,908,927,'OP_EqUnknown',493),(1363,908,927,'OP_EqHearChatCmd',494),(1364,908,927,'OP_EqDisplayTextCmd',495),(1365,908,927,'OP_EqCreateGhostCmd',496),(1366,908,927,'OP_EqCreateWidgetCmd',497),(1367,908,927,'OP_EqCreateSignWidgetCmd',498),(1368,908,927,'OP_EqDestroyGhostCmd',499),(1369,908,927,'OP_EqUpdateGhostCmd',500),(1370,908,927,'OP_EqSetControlGhostCmd',501),(1371,908,927,'OP_EqSetPOVGhostCmd',502),(1372,908,927,'OP_EqHearCombatCmd',503),(1373,908,927,'OP_EqHearSpellCastCmd',504),(1374,908,927,'OP_EqHearSpellInterruptCmd',507),(1375,908,927,'OP_EqHearSpellFizzleCmd',508),(1376,908,927,'OP_EqHearConsiderCmd',509),(1377,908,927,'OP_EqUpdateSubClassesCmd',510),(1378,908,927,'OP_EqCreateListBoxCmd',511),(1379,908,927,'OP_EqSetDebugPathPointsCmd',512),(1380,908,927,'OP_EqCannedEmoteCmd',514),(1381,908,927,'OP_EqStateCmd',515),(1382,908,927,'OP_EqPlaySoundCmd',516),(1383,908,927,'OP_EqPlaySound3DCmd',517),(1384,908,927,'OP_EqPlayVoiceCmd',518),(1385,908,927,'OP_EqHearDrowningCmd',519),(1386,908,927,'OP_EqHearDeathCmd',520),(1387,908,927,'OP_EqGroupMemberRemovedCmd',521),(1388,908,927,'OP_EqHearChainEffectCmd',522),(1389,908,927,'OP_EqReceiveOfferCmd',523),(1390,908,927,'OP_EqInspectPCResultsCmd',524),(1391,908,927,'OP_EqDrawablePathGraphCmd',525),(1392,908,927,'OP_EqDialogOpenCmd',526),(1393,908,927,'OP_EqDialogCloseCmd',527),(1394,908,927,'OP_EqFactionUpdateCmd',528),(1395,908,927,'OP_EqCollectionUpdateCmd',529),(1396,908,927,'OP_EqCollectionFilterCmd',530),(1397,908,927,'OP_EqCollectionItemCmd',531),(1398,908,927,'OP_EqQuestJournalUpdateCmd',532),(1399,908,927,'OP_EqQuestJournalReplyCmd',534),(1400,908,927,'OP_EqQuestGroupCmd',535),(1401,908,927,'OP_EqUpdateMerchantCmd',536),(1402,908,927,'OP_EqUpdateStoreCmd',537),(1403,908,927,'OP_EqUpdatePlayerTradeCmd',538),(1404,908,927,'OP_EqHelpPathCmd',539),(1405,908,927,'OP_EqHelpPathClearCmd',540),(1406,908,927,'OP_EqUpdateBankCmd',541),(1407,908,927,'OP_EqExamineInfoCmd',542),(1408,908,927,'OP_EqCloseWindowCmd',543),(1409,908,927,'OP_EqUpdateLootCmd',544),(1410,908,927,'OP_EqJunctionListCmd',545),(1411,908,927,'OP_EqShowDeathWindowCmd',546),(1412,908,927,'OP_EqDisplaySpellFailCmd',547),(1413,908,927,'OP_EqSpellCastStartCmd',548),(1414,908,927,'OP_EqSpellCastEndCmd',549),(1415,908,927,'OP_EqResurrectedCmd',550),(1416,908,927,'OP_EqChoiceWinCmd',551),(1417,908,927,'OP_EqSetDefaultVerbCmd',552),(1418,908,927,'OP_EqInstructionWindowCmd',554),(1419,908,927,'OP_EqInstructionWindowCloseCmd',555),(1420,908,927,'OP_EqInstructionWindowGoalCmd',556),(1421,908,927,'OP_EqInstructionWindowTaskCmd',557),(1422,908,927,'OP_EqEnableGameEventCmd',558),(1423,908,927,'OP_EqShowWindowCmd',559),(1424,908,927,'OP_EqEnableWindowCmd',560),(1425,908,927,'OP_EqFlashWindowCmd',561),(1426,908,927,'OP_EqHearPlayFlavorCmd',562),(1427,908,927,'OP_EqUpdateSignWidgetCmd',564),(1428,908,927,'OP_EqDebugPVDCmd',565),(1429,908,927,'OP_EqShowBookCmd',566),(1430,908,927,'OP_EqQuestionnaireCmd',567),(1431,908,927,'OP_EqGetProbsCmd',568),(1432,908,927,'OP_EqHearHealCmd',569),(1433,908,927,'OP_EqChatChannelUpdateCmd',570),(1434,908,927,'OP_EqWhoChannelQueryReplyCmd',571),(1435,908,927,'OP_EqAvailWorldChannelsCmd',572),(1436,908,927,'OP_EqUpdateTargetCmd',573),(1437,908,927,'OP_EqConsignmentItemsCmd',575),(1438,908,927,'OP_EqStartBrokerCmd',577),(1439,908,927,'OP_EqMapExplorationCmd',578),(1440,908,927,'OP_EqStoreLogCmd',579),(1441,908,927,'OP_EqSpellMoveToRangeAndRetryCmd',580),(1442,908,927,'OP_EqUpdatePlayerMailCmd',581),(1443,908,927,'OP_EqArenaResultsCmd',582),(1444,908,927,'OP_EqGuildBankEventActionCmd',583),(1445,908,927,'OP_EqGuildBankExamineInfoCmd',584),(1446,908,927,'OP_EqHearSpellNoLandCmd',585),(1447,908,927,'OP_Lottery',589),(1448,908,927,'OP_GuildRecruitingMemberInfo',590),(1449,908,927,'OP_GuildRecruiting',591),(1450,908,927,'OP_GuildRecruitingDetails',592),(1451,908,927,'OP_GuildRecruitingImage',593),(1452,908,927,'OP_PointOfInterest',614),(1453,908,927,'OP_TraitsList',616),(1454,908,927,'OP_RecipeList',625),(1455,908,927,'OP_CharacterAchievements',655),(1456,908,927,'OP_AddClientToGroupMsg',1010),(1457,908,927,'OP_AddGroupToGroupMsg',1010),(1458,908,927,'OP_GuildKickMsg',1010),(1459,908,927,'OP_ProcessScriptMsg',1010),(1460,908,927,'OP_ProcessWorkspaceMsg',1010),(1461,908,927,'OP_PurchaseConsignmentResponseMsg',1010),(1462,908,927,'OP_QuickbarAddMsg',1010),(1463,908,927,'OP_SkillSlotMapping',1010),(1464,908,927,'OP_Unknown',10014),(1465,908,927,'OP_WSWeatherUpdateMsg',10015),(1466,1008,1011,'OP_LoginRequestMsg',0),(1467,1008,1011,'OP_LoginByNumRequestMsg',1),(1468,1008,1011,'OP_WSLoginRequestMsg',2),(1469,1008,1011,'OP_ESLoginRequestMsg',3),(1470,1008,1011,'OP_LoginReplyMsg',4),(1471,1008,1011,'OP_WSStatusReplyMsg',5),(1472,1008,1011,'OP_WorldStatusChangeMsg',6),(1473,1008,1011,'OP_AllWSDescRequestMsg',7),(1474,1008,1011,'OP_WorldListMsg',8),(1475,1008,1011,'OP_AllCharactersDescRequestMsg',9),(1476,1008,1011,'OP_AllCharactersDescReplyMsg',10),(1477,1008,1011,'OP_CreateCharacterRequestMsg',11),(1478,1008,1011,'OP_CreateCharacterReplyMsg',12),(1479,1008,1011,'OP_WSCreateCharacterRequestMsg',13),(1480,1008,1011,'OP_WSCreateCharacterReplyMsg',14),(1481,1008,1011,'OP_ReskinCharacterRequestMsg',15),(1482,1008,1011,'OP_DeleteCharacterRequestMsg',16),(1483,1008,1011,'OP_DeleteCharacterReplyMsg',17),(1484,1008,1011,'OP_PlayCharacterRequestMsg',18),(1485,1008,1011,'OP_PlayCharacterReplyMsg',19),(1486,1008,1011,'OP_ExpectClientAsCharacterReplyMs',22),(1487,1008,1011,'OP_ServerPlayCharacterRequestMsg',23),(1488,1008,1011,'OP_ServerPlayCharacterReplyMsg',24),(1489,1008,1011,'OP_ESInitMsg',25),(1490,1008,1011,'OP_ESReadyForClientsMsg',26),(1491,1008,1011,'OP_CreateZoneInstanceMsg',27),(1492,1008,1011,'OP_ZoneInstanceCreateReplyMsg',28),(1493,1008,1011,'OP_ZoneInstanceDestroyedMsg',29),(1494,1008,1011,'OP_ExpectClientAsCharacterRequest',30),(1495,1008,1011,'OP_ZoneInfoMsg',31),(1496,1008,1011,'OP_DoneLoadingZoneResourcesMsg',32),(1497,1008,1011,'OP_DoneSendingInitialEntitiesMsg',33),(1498,1008,1011,'OP_DoneLoadingEntityResourcesMsg',34),(1499,1008,1011,'OP_PredictionUpdateMsg',35),(1500,1008,1011,'OP_UpdatePositionMsg',37),(1501,1008,1011,'OP_SetRemoteCmdsMsg',39),(1502,1008,1011,'OP_RemoteCmdMsg',40),(1503,1008,1011,'OP_GameWorldTimeMsg',41),(1504,1008,1011,'OP_MOTDMsg',42),(1505,1008,1011,'OP_ZoneMOTDMsg',43),(1506,1008,1011,'OP_AvatarCreatedMsg',44),(1507,1008,1011,'OP_AvatarDestroyedMsg',45),(1508,1008,1011,'OP_RequestCampMsg',47),(1509,1008,1011,'OP_CampStartedMsg',48),(1510,1008,1011,'OP_CampAbortedMsg',49),(1511,1008,1011,'OP_WhoQueryRequestMsg',50),(1512,1008,1011,'OP_WhoQueryReplyMsg',51),(1513,1008,1011,'OP_MonitorReplyMsg',52),(1514,1008,1011,'OP_MonitorCharacterListMsg',53),(1515,1008,1011,'OP_MonitorCharacterListRequestMsg',54),(1516,1008,1011,'OP_ClientCmdMsg',55),(1517,1008,1011,'OP_DispatchESMsg',56),(1518,1008,1011,'OP_DispatchClientCmdMsg',57),(1519,1008,1011,'OP_UpdateTargetMsg',58),(1520,1008,1011,'OP_UpdateTargetLocMsg',59),(1521,1008,1011,'OP_UpdateCharacterSheetMsg',60),(1522,1008,1011,'OP_UpdateSpellBookMsg',61),(1523,1008,1011,'OP_UpdateInventoryMsg',63),(1524,1008,1011,'OP_UpdateRecipeBookMsg',65),(1525,1008,1011,'OP_RequestRecipeDetailsMsg',66),(1526,1008,1011,'OP_RecipeDetailsMsg',67),(1527,1008,1011,'OP_UpdateSkillBookMsg',68),(1528,1008,1011,'OP_UpdateSkillsMsg',69),(1529,1008,1011,'OP_UpdateOpportunityMsg',70),(1530,1008,1011,'OP_ChangeZoneMsg',72),(1531,1008,1011,'OP_ClientTeleportRequestMsg',73),(1532,1008,1011,'OP_TeleportWithinZoneMsg',74),(1533,1008,1011,'OP_TeleportWithinZoneNoReloadMsg',75),(1534,1008,1011,'OP_MigrateClientToZoneRequestMsg',76),(1535,1008,1011,'OP_MigrateClientToZoneReplyMsg',77),(1536,1008,1011,'OP_ReadyToZoneMsg',78),(1537,1008,1011,'OP_RemoveClientFromGroupMsg',79),(1538,1008,1011,'OP_RemoveGroupFromGroupMsg',80),(1539,1008,1011,'OP_MakeGroupLeaderMsg',81),(1540,1008,1011,'OP_GroupCreatedMsg',82),(1541,1008,1011,'OP_GroupDestroyedMsg',83),(1542,1008,1011,'OP_GroupMemberAddedMsg',84),(1543,1008,1011,'OP_GroupMemberRemovedMsg',85),(1544,1008,1011,'OP_GroupRemovedFromGroupMsg',86),(1545,1008,1011,'OP_GroupLeaderChangedMsg',87),(1546,1008,1011,'OP_GroupResendOOZDataMsg',88),(1547,1008,1011,'OP_GroupSettingsChangedMsg',89),(1548,1008,1011,'OP_OutOfZoneMemberDataMsg',90),(1549,1008,1011,'OP_SendLatestRequestMsg',91),(1550,1008,1011,'OP_ClearDataMsg',92),(1551,1008,1011,'OP_SetSocialMsg',93),(1552,1008,1011,'OP_ESStatusMsg',94),(1553,1008,1011,'OP_ESZoneInstanceStatusMsg',95),(1554,1008,1011,'OP_ZonesStatusRequestMsg',96),(1555,1008,1011,'OP_ZonesStatusMsg',97),(1556,1008,1011,'OP_ESWeatherRequestMsg',98),(1557,1008,1011,'OP_ESWeatherRequestEndMsg',99),(1558,1008,1011,'OP_DialogSelectMsg',102),(1559,1008,1011,'OP_DialogCloseMsg',103),(1560,1008,1011,'OP_RemoveSpellEffectMsg',104),(1561,1008,1011,'OP_RemoveConcentrationMsg',105),(1562,1008,1011,'OP_QuestJournalOpenMsg',106),(1563,1008,1011,'OP_QuestJournalInspectMsg',107),(1564,1008,1011,'OP_QuestJournalSetVisibleMsg',108),(1565,1008,1011,'OP_QuestJournalWaypointMsg',109),(1566,1008,1011,'OP_CreateGuildRequestMsg',110),(1567,1008,1011,'OP_CreateGuildReplyMsg',111),(1568,1008,1011,'OP_GuildsayMsg',112),(1569,1008,1011,'OP_GuildUpdateMsg',115),(1570,1008,1011,'OP_DeleteGuildMsg',116),(1571,1008,1011,'OP_FellowshipExpMsg',117),(1572,1008,1011,'OP_ConsignmentCloseStoreMsg',118),(1573,1008,1011,'OP_ConsignItemRequestMsg',119),(1574,1008,1011,'OP_ConsignItemResponseMsg',120),(1575,1008,1011,'OP_PurchaseConsignmentRequestMsg',121),(1576,1008,1011,'OP_HouseDeletedRemotelyMsg',122),(1577,1008,1011,'OP_UpdateHouseDataMsg',123),(1578,1008,1011,'OP_UpdateHouseAccessDataMsg',124),(1579,1008,1011,'OP_PlayerHouseBaseScreenMsg',125),(1580,1008,1011,'OP_PlayerHousePurchaseScreenMsg',126),(1581,1008,1011,'OP_PlayerHouseAccessUpdateMsg',127),(1582,1008,1011,'OP_PlayerHouseDisplayStatusMsg',128),(1583,1008,1011,'OP_PlayerHouseCloseUIMsg',129),(1584,1008,1011,'OP_BuyPlayerHouseMsg',130),(1585,1008,1011,'OP_BuyPlayerHouseTintMsg',131),(1586,1008,1011,'OP_CollectAllHouseItemsMsg',132),(1587,1008,1011,'OP_RelinquishHouseMsg',133),(1588,1008,1011,'OP_EnterHouseMsg',134),(1589,1008,1011,'OP_ExitHouseMsg',135),(1590,1008,1011,'OP_HouseDefaultAccessSetMsg',136),(1591,1008,1011,'OP_HouseAccessSetMsg',137),(1592,1008,1011,'OP_HouseAccessRemoveMsg',138),(1593,1008,1011,'OP_PayHouseUpkeepMsg',139),(1594,1008,1011,'OP_MoveableObjectPlacementCriteri',141),(1595,1008,1011,'OP_EnterMoveObjectModeMsg',142),(1596,1008,1011,'OP_PositionMoveableObject',143),(1597,1008,1011,'OP_CancelMoveObjectModeMsg',144),(1598,1008,1011,'OP_ShaderCustomizationMsg',145),(1599,1008,1011,'OP_ReplaceableSubMeshesMsg',146),(1600,1008,1011,'OP_HouseCustomizationScreenMsg',147),(1601,1008,1011,'OP_CustomizationPurchaseRequestMs',148),(1602,1008,1011,'OP_CustomizationSetRequestMsg',149),(1603,1008,1011,'OP_CustomizationReplyMsg',150),(1604,1008,1011,'OP_TintWidgetsMsg',151),(1605,1008,1011,'OP_ExamineConsignmentRequestMsg',152),(1606,1008,1011,'OP_ExamineConsignmentResponseMsg',153),(1607,1008,1011,'OP_UISettingsResponseMsg',154),(1608,1008,1011,'OP_UIResetMsg',156),(1609,1008,1011,'OP_KeymapLoadMsg',157),(1610,1008,1011,'OP_KeymapNoneMsg',158),(1611,1008,1011,'OP_KeymapDataMsg',159),(1612,1008,1011,'OP_KeymapSaveMsg',160),(1613,1008,1011,'OP_DispatchSpellCmdMsg',161),(1614,1008,1011,'OP_EntityVerbsRequestMsg',163),(1615,1008,1011,'OP_EntityVerbsReplyMsg',164),(1616,1008,1011,'OP_EntityVerbsVerbMsg',165),(1617,1008,1011,'OP_ChatRelationshipUpdateMsg',167),(1618,1008,1011,'OP_LootItemsRequestMsg',168),(1619,1008,1011,'OP_StoppedLootingMsg',169),(1620,1008,1011,'OP_SitMsg',170),(1621,1008,1011,'OP_StandMsg',171),(1622,1008,1011,'OP_SatMsg',172),(1623,1008,1011,'OP_StoodMsg',173),(1624,1008,1011,'OP_ClearForTakeOffMsg',174),(1625,1008,1011,'OP_ReadyForTakeOffMsg',175),(1626,1008,1011,'OP_ShowIllusionsMsg',176),(1627,1008,1011,'OP_HideIllusionsMsg',177),(1628,1008,1011,'OP_ExamineItemRequestMsg',178),(1629,1008,1011,'OP_ReadBookPageMsg',179),(1630,1008,1011,'OP_DefaultGroupOptionsRequestMsg',180),(1631,1008,1011,'OP_DefaultGroupOptionsMsg',181),(1632,1008,1011,'OP_GroupOptionsMsg',182),(1633,1008,1011,'OP_DisplayGroupOptionsScreenMsg',183),(1634,1008,1011,'OP_DisplayInnVisitScreenMsg',184),(1635,1008,1011,'OP_DumpSchedulerMsg',185),(1636,1008,1011,'OP_LSRequestPlayerDescMsg',186),(1637,1008,1011,'OP_LSCheckAcctLockMsg',187),(1638,1008,1011,'OP_WSAcctLockStatusMsg',188),(1639,1008,1011,'OP_RequestHelpRepathMsg',189),(1640,1008,1011,'OP_RequestTargetLocMsg',190),(1641,1008,1011,'OP_UpdateMotdMsg',191),(1642,1008,1011,'OP_PerformPlayerKnockbackMsg',192),(1643,1008,1011,'OP_PerformCameraShakeMsg',193),(1644,1008,1011,'OP_PopulateSkillMapsMsg',196),(1645,1008,1011,'OP_CancelledFeignMsg',198),(1646,1008,1011,'OP_SignalMsg',199),(1647,1008,1011,'OP_ShowCreateFromRecipeUIMsg',200),(1648,1008,1011,'OP_CancelCreateFromRecipeMsg',201),(1649,1008,1011,'OP_BeginItemCreationMsg',202),(1650,1008,1011,'OP_StopItemCreationMsg',203),(1651,1008,1011,'OP_ShowItemCreationProcessUIMsg',204),(1652,1008,1011,'OP_UpdateItemCreationProcessUIMsg',205),(1653,1008,1011,'OP_DisplayTSEventReactionMsg',206),(1654,1008,1011,'OP_ShowRecipeBookMsg',207),(1655,1008,1011,'OP_KnowledgebaseRequestMsg',208),(1656,1008,1011,'OP_KnowledgebaseResponseMsg',209),(1657,1008,1011,'OP_CSTicketHeaderRequestMsg',210),(1658,1008,1011,'OP_CSTicketInfoMsg',211),(1659,1008,1011,'OP_CSTicketCommentRequestMsg',212),(1660,1008,1011,'OP_CSTicketCommentResponseMsg',213),(1661,1008,1011,'OP_CSTicketCreateMsg',214),(1662,1008,1011,'OP_CSTicketAddCommentMsg',215),(1663,1008,1011,'OP_CSTicketDeleteMsg',216),(1664,1008,1011,'OP_CSTicketChangeNotificationMsg',217),(1665,1008,1011,'OP_WorldDataUpdateMsg',218),(1666,1008,1011,'OP_KnownLanguagesMsg',219),(1667,1008,1011,'OP_LsRequestClientCrashLogMsg',220),(1668,1008,1011,'OP_LsClientBaselogReplyMsg',221),(1669,1008,1011,'OP_LsClientCrashlogReplyMsg',222),(1670,1008,1011,'OP_LsClientAlertlogReplyMsg',223),(1671,1008,1011,'OP_LsClientVerifylogReplyMsg',224),(1672,1008,1011,'OP_ClientTeleportToLocationMsg',225),(1673,1008,1011,'OP_UpdateClientPredFlagsMsg',226),(1674,1008,1011,'OP_ChangeServerControlFlagMsg',227),(1675,1008,1011,'OP_CSToolsRequestMsg',228),(1676,1008,1011,'OP_CSToolsResponseMsg',229),(1677,1008,1011,'OP_AddSocialStructureStandingMsg',230),(1678,1008,1011,'OP_CreateBoatTransportsMsg',231),(1679,1008,1011,'OP_PositionBoatTransportMsg',232),(1680,1008,1011,'OP_MigrateBoatTransportMsg',233),(1681,1008,1011,'OP_MigrateBoatTransportReplyMsg',234),(1682,1008,1011,'OP_DisplayDebugNLLPointsMsg',235),(1683,1008,1011,'OP_ExamineInfoRequestMsg',236),(1684,1008,1011,'OP_QuickbarInitMsg',237),(1685,1008,1011,'OP_QuickbarUpdateMsg',238),(1686,1008,1011,'OP_MacroInitMsg',239),(1687,1008,1011,'OP_MacroUpdateMsg',240),(1688,1008,1011,'OP_QuestionnaireMsg',241),(1689,1008,1011,'OP_LevelChangedMsg',242),(1690,1008,1011,'OP_SpellGainedMsg',243),(1691,1008,1011,'OP_EncounterBrokenMsg',244),(1692,1008,1011,'OP_OnscreenMsgMsg',245),(1693,1008,1011,'OP_DisplayWarningMsg',246),(1694,1008,1011,'OP_ModifyGuildMsg',247),(1695,1008,1011,'OP_GuildEventMsg',248),(1696,1008,1011,'OP_GuildEventAddMsg',249),(1697,1008,1011,'OP_GuildEventActionMsg',250),(1698,1008,1011,'OP_GuildEventListMsg',251),(1699,1008,1011,'OP_RequestGuildEventDetailsMsg',252),(1700,1008,1011,'OP_GuildEventDetailsMsg',253),(1701,1008,1011,'OP_RequestGuildInfoMsg',254),(1702,1008,1011,'OP_GuildBankActionMsg',255),(1703,1008,1011,'OP_GuildBankActionResponseMsg',256),(1704,1008,1011,'OP_GuildBankItemDetailsRequestMsg',257),(1705,1008,1011,'OP_GuildBankItemDetailsResponseMs',258),(1706,1008,1011,'OP_GuildBankUpdateMsg',259),(1707,1008,1011,'OP_GuildBankEventListMsg',260),(1708,1008,1011,'OP_RequestGuildBankEventDetailsMs',261),(1709,1008,1011,'OP_RewardPackMsg',262),(1710,1008,1011,'OP_RenameGuildMsg',263),(1711,1008,1011,'OP_ZoneToFriendRequestMsg',265),(1712,1008,1011,'OP_ZoneToFriendReplyMsg',266),(1713,1008,1011,'OP_ChatCreateChannelMsg',267),(1714,1008,1011,'OP_ChatJoinChannelMsg',268),(1715,1008,1011,'OP_ChatWhoChannelMsg',269),(1716,1008,1011,'OP_ChatLeaveChannelMsg',270),(1717,1008,1011,'OP_ChatTellChannelMsg',271),(1718,1008,1011,'OP_ChatTellUserMsg',272),(1719,1008,1011,'OP_ChatToggleFriendMsg',273),(1720,1008,1011,'OP_ChatToggleIgnoreMsg',274),(1721,1008,1011,'OP_ChatSendFriendsMsg',275),(1722,1008,1011,'OP_ChatSendIgnoresMsg',276),(1723,1008,1011,'OP_QuestReward',303),(1724,1008,1011,'OP_ChatFiltersMsg',318),(1725,1008,1011,'OP_MailGetHeadersMsg',319),(1726,1008,1011,'OP_MailGetMessageMsg',320),(1727,1008,1011,'OP_MailSendMessageMsg',321),(1728,1008,1011,'OP_MailDeleteMessageMsg',322),(1729,1008,1011,'OP_MailGetHeadersReplyMsg',323),(1730,1008,1011,'OP_MailGetMessageReplyMsg',324),(1731,1008,1011,'OP_MailSendMessageReplyMsg',325),(1732,1008,1011,'OP_MailCommitSendMessageMsg',326),(1733,1008,1011,'OP_MailSendSystemMessageMsg',327),(1734,1008,1011,'OP_MailRemoveAttachFromMailMsg',328),(1735,1008,1011,'OP_WaypointRequestMsg',330),(1736,1008,1011,'OP_WaypointReplyMsg',331),(1737,1008,1011,'OP_WaypointSelectMsg',332),(1738,1008,1011,'OP_WaypointUpdateMsg',333),(1739,1008,1011,'OP_CharNameChangedMsg',334),(1740,1008,1011,'OP_ShowZoneTeleporterDestinations',335),(1741,1008,1011,'OP_SelectZoneTeleporterDestinatio',336),(1742,1008,1011,'OP_ReloadLocalizedTxtMsg',337),(1743,1008,1011,'OP_RequestGuildMembershipMsg',338),(1744,1008,1011,'OP_GuildMembershipResponseMsg',339),(1745,1008,1011,'OP_LeaveGuildNotifyMsg',340),(1746,1008,1011,'OP_JoinGuildNotifyMsg',341),(1747,1008,1011,'OP_AvatarUpdateMsg',343),(1748,1008,1011,'OP_BioUpdateMsg',344),(1749,1008,1011,'OP_InspectPlayerMsg',345),(1750,1008,1011,'OP_WSServerLockMsg',346),(1751,1008,1011,'OP_LSServerLockMsg',347),(1752,1008,1011,'OP_WSServerHideMsg',348),(1753,1008,1011,'OP_CsCategoryRequestMsg',349),(1754,1008,1011,'OP_CsCategoryResponseMsg',350),(1755,1008,1011,'OP_KnowledgeWindowSlotMappingMsg',351),(1756,1008,1011,'OP_LFGUpdateMsg',352),(1757,1008,1011,'OP_AFKUpdateMsg',353),(1758,1008,1011,'OP_AnonUpdateMsg',354),(1759,1008,1011,'OP_UpdateActivePublicZonesMsg',355),(1760,1008,1011,'OP_UnknownNpcMsg',356),(1761,1008,1011,'OP_PromoFlagsDetailsMsg',357),(1762,1008,1011,'OP_ConsignViewCreateMsg',358),(1763,1008,1011,'OP_ConsignViewGetPageMsg',359),(1764,1008,1011,'OP_ConsignViewReleaseMsg',360),(1765,1008,1011,'OP_ConsignRemoveItemsMsg',361),(1766,1008,1011,'OP_UpdateDebugRadiiMsg',362),(1767,1008,1011,'OP_SnoopMsg',363),(1768,1008,1011,'OP_ReportMsg',364),(1769,1008,1011,'OP_UpdateRaidMsg',365),(1770,1008,1011,'OP_ConsignViewSortMsg',366),(1771,1008,1011,'OP_TitleUpdateMsg',367),(1772,1008,1011,'OP_ClientFellMsg',368),(1773,1008,1011,'OP_ClientInDeathRegionMsg',369),(1774,1008,1011,'OP_CampClientMsg',370),(1775,1008,1011,'OP_CSToolAccessResponseMsg',371),(1776,1008,1011,'OP_TrackingUpdateMsg',372),(1777,1008,1011,'OP_BeginTrackingMsg',373),(1778,1008,1011,'OP_StopTrackingMsg',374),(1779,1008,1011,'OP_GetAvatarAccessRequestForCSToo',375),(1780,1008,1011,'OP_AdvancementRequestMsg',376),(1781,1008,1011,'OP_UpdateAvgFrameTimeMsg',377),(1782,1008,1011,'OP_MapFogDataInitMsg',378),(1783,1008,1011,'OP_MapFogDataUpdateMsg',379),(1784,1008,1011,'OP_CloseGroupInviteWindowMsg',380),(1785,1008,1011,'OP_UpdateGroupMemberDataMsg',381),(1786,1008,1011,'OP_WorldPingMsg',382),(1787,1008,1011,'OP_MoveLogUpdateMsg',383),(1788,1008,1011,'OP_OfferQuestMsg',384),(1789,1008,1011,'OP_WorldShutdownUpdateMsg',385),(1790,1008,1011,'OP_DisplayMailScreenMsg',386),(1791,1008,1011,'OP_ClientIdleBeginMsg',387),(1792,1008,1011,'OP_ClientIdleEndMsg',388),(1793,1008,1011,'OP_PurchaseConsignmentLoreCheckRe',389),(1794,1008,1011,'OP_NotifyApprenticeStoppedMentori',390),(1795,1008,1011,'OP_CorruptedClientMsg',391),(1796,1008,1011,'OP_WorldDataChangeMsg',392),(1797,1008,1011,'OP_MailEventNotificationMsg',393),(1798,1008,1011,'OP_RestartZoneMsg',394),(1799,1008,1011,'OP_FlightPathsMsg',395),(1800,1008,1011,'OP_CharacterLinkdeadMsg',396),(1801,1008,1011,'OP_CharTransferStartRequestMsg',397),(1802,1008,1011,'OP_CharTransferStartReplyMsg',398),(1803,1008,1011,'OP_CharTransferRequestMsg',399),(1804,1008,1011,'OP_CharTransferReplyMsg',400),(1805,1008,1011,'OP_CharTransferRollbackRequestMsg',401),(1806,1008,1011,'OP_CharTransferCommitRequestMsg',402),(1807,1008,1011,'OP_CharTransferRollbackReplyMsg',403),(1808,1008,1011,'OP_CharTransferCommitReplyMsg',404),(1809,1008,1011,'OP_GetCharacterSerializedRequestM',405),(1810,1008,1011,'OP_GetCharacterSerializedReplyMsg',406),(1811,1008,1011,'OP_CreateCharFromCBBRequestMsg',407),(1812,1008,1011,'OP_CreateCharFromCBBReplyMsg',408),(1813,1008,1011,'OP_HousingDataChangedMsg',409),(1814,1008,1011,'OP_HousingRestoreMsg',410),(1815,1008,1011,'OP_AuctionItem',411),(1816,1008,1011,'OP_AuctionItemReply',412),(1817,1008,1011,'OP_AuctionCoin',413),(1818,1008,1011,'OP_AuctionCoinReply',414),(1819,1008,1011,'OP_AuctionCharacter',415),(1820,1008,1011,'OP_AuctionCharacterReply',416),(1821,1008,1011,'OP_AuctionCommitMsg',417),(1822,1008,1011,'OP_AuctionAbortMsg',418),(1823,1008,1011,'OP_CharTransferValidateRequestMsg',419),(1824,1008,1011,'OP_CharTransferValidateReplyMsg',420),(1825,1008,1011,'OP_RaceRestrictionMsg',421),(1826,1008,1011,'OP_SetInstanceDisplayNameMsg',422),(1827,1008,1011,'OP_GetAuctionAssetIDMsg',423),(1828,1008,1011,'OP_GetAuctionAssetIDReplyMsg',424),(1829,1008,1011,'OP_ResendWorldChannelsMsg',425),(1830,1008,1011,'OP_DisplayExchangeScreenMsg',426),(1831,1008,1011,'OP_ArenaGameTypesMsg',427),(1832,1008,1011,'OP_AuditAuctionEventMsg',429),(1833,1008,1011,'OP_InviteRequestMsg',431),(1834,1008,1011,'OP_InviteResponseMsg',432),(1835,1008,1011,'OP_InviteTargetResponseMsg',433),(1836,1008,1011,'OP_InspectPlayerRequestMsg',434),(1837,1008,1011,'OP_DispatchMsg',435),(1838,1008,1011,'OP_DisplayEventMsg',436),(1839,1008,1011,'OP_PrePossessionMsg',437),(1840,1008,1011,'OP_PostPossessionMsg',438),(1841,1008,1011,'OP_AdventureList',464),(1842,1008,1011,'OP_CancelSpellCast',465),(1843,1008,1011,'OP_UpdateTitleCmd',471),(1844,1008,1011,'OP_AttackAllowed',477),(1845,1008,1011,'OP_AttackNotAllowed',478),(1846,1008,1011,'OP_DressingRoom',485),(1847,1008,1011,'OP_SkillInfoRequest',489),(1848,1008,1011,'OP_SkillInfoResponse',490),(1849,1008,1011,'OP_BadLanguageFilter',494),(1850,1008,1011,'OP_MapRequest',495),(1851,1008,1011,'OP_EqUnknown',520),(1852,1008,1011,'OP_EqHearChatCmd',522),(1853,1008,1011,'OP_EqDisplayTextCmd',523),(1854,1008,1011,'OP_EqCreateGhostCmd',524),(1855,1008,1011,'OP_EqCreateWidgetCmd',525),(1856,1008,1011,'OP_EqCreateSignWidgetCmd',526),(1857,1008,1011,'OP_EqDestroyGhostCmd',527),(1858,1008,1011,'OP_EqUpdateGhostCmd',528),(1859,1008,1011,'OP_EqSetControlGhostCmd',529),(1860,1008,1011,'OP_EqSetPOVGhostCmd',530),(1861,1008,1011,'OP_EqHearCombatCmd',531),(1862,1008,1011,'OP_EqHearSpellCastCmd',532),(1863,1008,1011,'OP_EqHearSpellInterruptCmd',535),(1864,1008,1011,'OP_EqHearSpellFizzleCmd',536),(1865,1008,1011,'OP_EqHearConsiderCmd',537),(1866,1008,1011,'OP_EqUpdateSubClassesCmd',538),(1867,1008,1011,'OP_EqCreateListBoxCmd',539),(1868,1008,1011,'OP_EqSetDebugPathPointsCmd',540),(1869,1008,1011,'OP_EqCannedEmoteCmd',542),(1870,1008,1011,'OP_EqStateCmd',543),(1871,1008,1011,'OP_EqPlaySoundCmd',544),(1872,1008,1011,'OP_EqPlaySound3DCmd',545),(1873,1008,1011,'OP_EqPlayVoiceCmd',546),(1874,1008,1011,'OP_EqHearDrowningCmd',547),(1875,1008,1011,'OP_EqHearDeathCmd',548),(1876,1008,1011,'OP_EqGroupMemberRemovedCmd',549),(1877,1008,1011,'OP_EqHearChainEffectCmd',550),(1878,1008,1011,'OP_EqReceiveOfferCmd',551),(1879,1008,1011,'OP_EqInspectPCResultsCmd',552),(1880,1008,1011,'OP_EqDrawablePathGraphCmd',553),(1881,1008,1011,'OP_EqDialogOpenCmd',554),(1882,1008,1011,'OP_EqDialogCloseCmd',555),(1883,1008,1011,'OP_EqFactionUpdateCmd',556),(1884,1008,1011,'OP_EqCollectionUpdateCmd',557),(1885,1008,1011,'OP_EqCollectionFilterCmd',558),(1886,1008,1011,'OP_EqCollectionItemCmd',559),(1887,1008,1011,'OP_EqQuestJournalUpdateCmd',560),(1888,1008,1011,'OP_EqQuestJournalReplyCmd',562),(1889,1008,1011,'OP_EqQuestGroupCmd',563),(1890,1008,1011,'OP_EqUpdateMerchantCmd',564),(1891,1008,1011,'OP_EqUpdateStoreCmd',565),(1892,1008,1011,'OP_EqUpdatePlayerTradeCmd',566),(1893,1008,1011,'OP_EqHelpPathCmd',567),(1894,1008,1011,'OP_EqHelpPathClearCmd',568),(1895,1008,1011,'OP_EqUpdateBankCmd',569),(1896,1008,1011,'OP_EqExamineInfoCmd',570),(1897,1008,1011,'OP_EqCloseWindowCmd',571),(1898,1008,1011,'OP_EqUpdateLootCmd',572),(1899,1008,1011,'OP_EqJunctionListCmd',573),(1900,1008,1011,'OP_EqShowDeathWindowCmd',574),(1901,1008,1011,'OP_EqDisplaySpellFailCmd',575),(1902,1008,1011,'OP_EqSpellCastStartCmd',576),(1903,1008,1011,'OP_EqSpellCastEndCmd',577),(1904,1008,1011,'OP_EqResurrectedCmd',578),(1905,1008,1011,'OP_EqChoiceWinCmd',579),(1906,1008,1011,'OP_EqSetDefaultVerbCmd',580),(1907,1008,1011,'OP_EqInstructionWindowCmd',582),(1908,1008,1011,'OP_EqInstructionWindowCloseCmd',583),(1909,1008,1011,'OP_EqInstructionWindowGoalCmd',584),(1910,1008,1011,'OP_EqInstructionWindowTaskCmd',585),(1911,1008,1011,'OP_EqEnableGameEventCmd',586),(1912,1008,1011,'OP_EqShowWindowCmd',587),(1913,1008,1011,'OP_EqEnableWindowCmd',588),(1914,1008,1011,'OP_EqFlashWindowCmd',589),(1915,1008,1011,'OP_EqHearPlayFlavorCmd',590),(1916,1008,1011,'OP_EqUpdateSignWidgetCmd',592),(1917,1008,1011,'OP_EqDebugPVDCmd',593),(1918,1008,1011,'OP_EqShowBookCmd',594),(1919,1008,1011,'OP_EqQuestionnaireCmd',595),(1920,1008,1011,'OP_EqGetProbsCmd',596),(1921,1008,1011,'OP_EqHearHealCmd',597),(1922,1008,1011,'OP_EqChatChannelUpdateCmd',598),(1923,1008,1011,'OP_EqWhoChannelQueryReplyCmd',599),(1924,1008,1011,'OP_EqAvailWorldChannelsCmd',600),(1925,1008,1011,'OP_EqUpdateTargetCmd',601),(1926,1008,1011,'OP_EqConsignmentItemsCmd',603),(1927,1008,1011,'OP_EqStartBrokerCmd',605),(1928,1008,1011,'OP_EqMapExplorationCmd',606),(1929,1008,1011,'OP_EqStoreLogCmd',607),(1930,1008,1011,'OP_EqSpellMoveToRangeAndRetryCmd',608),(1931,1008,1011,'OP_EqUpdatePlayerMailCmd',609),(1932,1008,1011,'OP_EqArenaResultsCmd',610),(1933,1008,1011,'OP_EqGuildBankEventActionCmd',611),(1934,1008,1011,'OP_EqGuildBankExamineInfoCmd',612),(1935,1008,1011,'OP_EqHearSpellNoLandCmd',613),(1936,1008,1011,'OP_Lottery',617),(1937,1008,1011,'OP_GuildRecruitingMemberInfo',618),(1938,1008,1011,'OP_GuildRecruiting',619),(1939,1008,1011,'OP_GuildRecruitingDetails',620),(1940,1008,1011,'OP_GuildRecruitingImage',621),(1941,1008,1011,'OP_PointOfInterest',642),(1942,1008,1011,'OP_TraitsList',644),(1943,1008,1011,'OP_RecipeList',653),(1944,1008,1011,'OP_CharacterAchievements',655),(1945,1008,1011,'OP_AddClientToGroupMsg',1041),(1946,1008,1011,'OP_AddGroupToGroupMsg',1041),(1947,1008,1011,'OP_GuildKickMsg',1041),(1948,1008,1011,'OP_ProcessScriptMsg',1041),(1949,1008,1011,'OP_ProcessWorkspaceMsg',1041),(1950,1008,1011,'OP_PurchaseConsignmentResponseMsg',1041),(1951,1008,1011,'OP_QuickbarAddMsg',1041),(1952,1008,1011,'OP_SkillSlotMapping',1041),(1953,1008,1011,'OP_Unknown',10045),(1954,1008,1011,'OP_WSWeatherUpdateMsg',10046),(1955,1045,1046,'OP_LoginRequestMsg',0),(1956,1045,1046,'OP_LoginByNumRequestMsg',1),(1957,1045,1046,'OP_WSLoginRequestMsg',2),(1958,1045,1046,'OP_ESLoginRequestMsg',3),(1959,1045,1046,'OP_LoginReplyMsg',4),(1960,1045,1046,'OP_WSStatusReplyMsg',5),(1961,1045,1046,'OP_WorldStatusChangeMsg',6),(1962,1045,1046,'OP_AllWSDescRequestMsg',7),(1963,1045,1046,'OP_WorldListMsg',8),(1964,1045,1046,'OP_AllCharactersDescRequestMsg',9),(1965,1045,1046,'OP_AllCharactersDescReplyMsg',10),(1966,1045,1046,'OP_CreateCharacterRequestMsg',11),(1967,1045,1046,'OP_CreateCharacterReplyMsg',12),(1968,1045,1046,'OP_WSCreateCharacterRequestMsg',13),(1969,1045,1046,'OP_WSCreateCharacterReplyMsg',14),(1970,1045,1046,'OP_ReskinCharacterRequestMsg',15),(1971,1045,1046,'OP_DeleteCharacterRequestMsg',16),(1972,1045,1046,'OP_DeleteCharacterReplyMsg',17),(1973,1045,1046,'OP_PlayCharacterRequestMsg',18),(1974,1045,1046,'OP_PlayCharacterReplyMsg',19),(1975,1045,1046,'OP_ExpectClientAsCharacterReplyMs',22),(1976,1045,1046,'OP_ServerPlayCharacterRequestMsg',23),(1977,1045,1046,'OP_ServerPlayCharacterReplyMsg',24),(1978,1045,1046,'OP_ESInitMsg',25),(1979,1045,1046,'OP_ESReadyForClientsMsg',26),(1980,1045,1046,'OP_CreateZoneInstanceMsg',27),(1981,1045,1046,'OP_ZoneInstanceCreateReplyMsg',28),(1982,1045,1046,'OP_ZoneInstanceDestroyedMsg',29),(1983,1045,1046,'OP_ExpectClientAsCharacterRequest',30),(1984,1045,1046,'OP_ZoneInfoMsg',31),(1985,1045,1046,'OP_DoneLoadingZoneResourcesMsg',32),(1986,1045,1046,'OP_DoneSendingInitialEntitiesMsg',33),(1987,1045,1046,'OP_DoneLoadingEntityResourcesMsg',34),(1988,1045,1046,'OP_PredictionUpdateMsg',35),(1989,1045,1046,'OP_UpdatePositionMsg',37),(1990,1045,1046,'OP_SetRemoteCmdsMsg',39),(1991,1045,1046,'OP_RemoteCmdMsg',40),(1992,1045,1046,'OP_GameWorldTimeMsg',41),(1993,1045,1046,'OP_MOTDMsg',42),(1994,1045,1046,'OP_ZoneMOTDMsg',43),(1995,1045,1046,'OP_AvatarCreatedMsg',44),(1996,1045,1046,'OP_AvatarDestroyedMsg',45),(1997,1045,1046,'OP_RequestCampMsg',47),(1998,1045,1046,'OP_CampStartedMsg',48),(1999,1045,1046,'OP_CampAbortedMsg',49),(2000,1045,1046,'OP_WhoQueryRequestMsg',50),(2001,1045,1046,'OP_WhoQueryReplyMsg',51),(2002,1045,1046,'OP_MonitorReplyMsg',52),(2003,1045,1046,'OP_MonitorCharacterListMsg',53),(2004,1045,1046,'OP_MonitorCharacterListRequestMsg',54),(2005,1045,1046,'OP_ClientCmdMsg',55),(2006,1045,1046,'OP_DispatchESMsg',56),(2007,1045,1046,'OP_DispatchClientCmdMsg',57),(2008,1045,1046,'OP_UpdateTargetMsg',58),(2009,1045,1046,'OP_UpdateTargetLocMsg',59),(2010,1045,1046,'OP_UpdateCharacterSheetMsg',60),(2011,1045,1046,'OP_UpdateSpellBookMsg',61),(2012,1045,1046,'OP_UpdateInventoryMsg',63),(2013,1045,1046,'OP_UpdateRecipeBookMsg',65),(2014,1045,1046,'OP_RequestRecipeDetailsMsg',66),(2015,1045,1046,'OP_RecipeDetailsMsg',67),(2016,1045,1046,'OP_UpdateSkillBookMsg',68),(2017,1045,1046,'OP_UpdateSkillsMsg',69),(2018,1045,1046,'OP_UpdateOpportunityMsg',70),(2019,1045,1046,'OP_ChangeZoneMsg',72),(2020,1045,1046,'OP_ClientTeleportRequestMsg',73),(2021,1045,1046,'OP_TeleportWithinZoneMsg',74),(2022,1045,1046,'OP_TeleportWithinZoneNoReloadMsg',75),(2023,1045,1046,'OP_MigrateClientToZoneRequestMsg',76),(2024,1045,1046,'OP_MigrateClientToZoneReplyMsg',77),(2025,1045,1046,'OP_ReadyToZoneMsg',78),(2026,1045,1046,'OP_RemoveClientFromGroupMsg',79),(2027,1045,1046,'OP_RemoveGroupFromGroupMsg',80),(2028,1045,1046,'OP_MakeGroupLeaderMsg',81),(2029,1045,1046,'OP_GroupCreatedMsg',82),(2030,1045,1046,'OP_GroupDestroyedMsg',83),(2031,1045,1046,'OP_GroupMemberAddedMsg',84),(2032,1045,1046,'OP_GroupMemberRemovedMsg',85),(2033,1045,1046,'OP_GroupRemovedFromGroupMsg',86),(2034,1045,1046,'OP_GroupLeaderChangedMsg',87),(2035,1045,1046,'OP_GroupResendOOZDataMsg',88),(2036,1045,1046,'OP_GroupSettingsChangedMsg',89),(2037,1045,1046,'OP_OutOfZoneMemberDataMsg',90),(2038,1045,1046,'OP_SendLatestRequestMsg',91),(2039,1045,1046,'OP_ClearDataMsg',92),(2040,1045,1046,'OP_SetSocialMsg',93),(2041,1045,1046,'OP_ESStatusMsg',94),(2042,1045,1046,'OP_ESZoneInstanceStatusMsg',95),(2043,1045,1046,'OP_ZonesStatusRequestMsg',96),(2044,1045,1046,'OP_ZonesStatusMsg',97),(2045,1045,1046,'OP_ESWeatherRequestMsg',98),(2046,1045,1046,'OP_ESWeatherRequestEndMsg',99),(2047,1045,1046,'OP_DialogSelectMsg',102),(2048,1045,1046,'OP_DialogCloseMsg',103),(2049,1045,1046,'OP_RemoveSpellEffectMsg',104),(2050,1045,1046,'OP_RemoveConcentrationMsg',105),(2051,1045,1046,'OP_QuestJournalOpenMsg',106),(2052,1045,1046,'OP_QuestJournalInspectMsg',107),(2053,1045,1046,'OP_QuestJournalSetVisibleMsg',108),(2054,1045,1046,'OP_QuestJournalWaypointMsg',109),(2055,1045,1046,'OP_CreateGuildRequestMsg',110),(2056,1045,1046,'OP_CreateGuildReplyMsg',111),(2057,1045,1046,'OP_GuildsayMsg',112),(2058,1045,1046,'OP_GuildUpdateMsg',119),(2059,1045,1046,'OP_DeleteGuildMsg',120),(2060,1045,1046,'OP_FellowshipExpMsg',121),(2061,1045,1046,'OP_ConsignmentCloseStoreMsg',122),(2062,1045,1046,'OP_ConsignItemRequestMsg',123),(2063,1045,1046,'OP_ConsignItemResponseMsg',124),(2064,1045,1046,'OP_PurchaseConsignmentRequestMsg',125),(2065,1045,1046,'OP_HouseDeletedRemotelyMsg',126),(2066,1045,1046,'OP_UpdateHouseDataMsg',127),(2067,1045,1046,'OP_UpdateHouseAccessDataMsg',128),(2068,1045,1046,'OP_PlayerHouseBaseScreenMsg',129),(2069,1045,1046,'OP_PlayerHousePurchaseScreenMsg',130),(2070,1045,1046,'OP_PlayerHouseAccessUpdateMsg',131),(2071,1045,1046,'OP_PlayerHouseDisplayStatusMsg',132),(2072,1045,1046,'OP_PlayerHouseCloseUIMsg',133),(2073,1045,1046,'OP_BuyPlayerHouseMsg',134),(2074,1045,1046,'OP_BuyPlayerHouseTintMsg',135),(2075,1045,1046,'OP_CollectAllHouseItemsMsg',136),(2076,1045,1046,'OP_RelinquishHouseMsg',137),(2077,1045,1046,'OP_EnterHouseMsg',138),(2078,1045,1046,'OP_ExitHouseMsg',139),(2079,1045,1046,'OP_HouseDefaultAccessSetMsg',140),(2080,1045,1046,'OP_HouseAccessSetMsg',141),(2081,1045,1046,'OP_HouseAccessRemoveMsg',142),(2082,1045,1046,'OP_PayHouseUpkeepMsg',143),(2083,1045,1046,'OP_MoveableObjectPlacementCriteri',145),(2084,1045,1046,'OP_EnterMoveObjectModeMsg',146),(2085,1045,1046,'OP_PositionMoveableObject',147),(2086,1045,1046,'OP_CancelMoveObjectModeMsg',148),(2087,1045,1046,'OP_ShaderCustomizationMsg',149),(2088,1045,1046,'OP_ReplaceableSubMeshesMsg',150),(2089,1045,1046,'OP_HouseCustomizationScreenMsg',151),(2090,1045,1046,'OP_CustomizationPurchaseRequestMs',152),(2091,1045,1046,'OP_CustomizationSetRequestMsg',153),(2092,1045,1046,'OP_CustomizationReplyMsg',154),(2093,1045,1046,'OP_TintWidgetsMsg',155),(2094,1045,1046,'OP_ExamineConsignmentRequestMsg',156),(2095,1045,1046,'OP_ExamineConsignmentResponseMsg',157),(2096,1045,1046,'OP_UISettingsResponseMsg',158),(2097,1045,1046,'OP_UIResetMsg',160),(2098,1045,1046,'OP_KeymapLoadMsg',161),(2099,1045,1046,'OP_KeymapNoneMsg',162),(2100,1045,1046,'OP_KeymapDataMsg',163),(2101,1045,1046,'OP_KeymapSaveMsg',164),(2102,1045,1046,'OP_DispatchSpellCmdMsg',165),(2103,1045,1046,'OP_EntityVerbsRequestMsg',167),(2104,1045,1046,'OP_EntityVerbsReplyMsg',168),(2105,1045,1046,'OP_EntityVerbsVerbMsg',169),(2106,1045,1046,'OP_ChatRelationshipUpdateMsg',171),(2107,1045,1046,'OP_LootItemsRequestMsg',172),(2108,1045,1046,'OP_StoppedLootingMsg',173),(2109,1045,1046,'OP_SitMsg',174),(2110,1045,1046,'OP_StandMsg',175),(2111,1045,1046,'OP_SatMsg',176),(2112,1045,1046,'OP_StoodMsg',177),(2113,1045,1046,'OP_ClearForTakeOffMsg',178),(2114,1045,1046,'OP_ReadyForTakeOffMsg',179),(2115,1045,1046,'OP_ShowIllusionsMsg',180),(2116,1045,1046,'OP_HideIllusionsMsg',181),(2117,1045,1046,'OP_ExamineItemRequestMsg',182),(2118,1045,1046,'OP_ReadBookPageMsg',183),(2119,1045,1046,'OP_DefaultGroupOptionsRequestMsg',184),(2120,1045,1046,'OP_DefaultGroupOptionsMsg',185),(2121,1045,1046,'OP_GroupOptionsMsg',186),(2122,1045,1046,'OP_DisplayGroupOptionsScreenMsg',187),(2123,1045,1046,'OP_DisplayInnVisitScreenMsg',188),(2124,1045,1046,'OP_DumpSchedulerMsg',189),(2125,1045,1046,'OP_LSRequestPlayerDescMsg',190),(2126,1045,1046,'OP_LSCheckAcctLockMsg',191),(2127,1045,1046,'OP_WSAcctLockStatusMsg',192),(2128,1045,1046,'OP_RequestHelpRepathMsg',193),(2129,1045,1046,'OP_RequestTargetLocMsg',194),(2130,1045,1046,'OP_UpdateMotdMsg',195),(2131,1045,1046,'OP_PerformPlayerKnockbackMsg',196),(2132,1045,1046,'OP_PerformCameraShakeMsg',197),(2133,1045,1046,'OP_PopulateSkillMapsMsg',200),(2134,1045,1046,'OP_CancelledFeignMsg',202),(2135,1045,1046,'OP_SignalMsg',203),(2136,1045,1046,'OP_ShowCreateFromRecipeUIMsg',204),(2137,1045,1046,'OP_CancelCreateFromRecipeMsg',205),(2138,1045,1046,'OP_BeginItemCreationMsg',206),(2139,1045,1046,'OP_StopItemCreationMsg',207),(2140,1045,1046,'OP_ShowItemCreationProcessUIMsg',208),(2141,1045,1046,'OP_UpdateItemCreationProcessUIMsg',209),(2142,1045,1046,'OP_DisplayTSEventReactionMsg',210),(2143,1045,1046,'OP_ShowRecipeBookMsg',211),(2144,1045,1046,'OP_KnowledgebaseRequestMsg',212),(2145,1045,1046,'OP_KnowledgebaseResponseMsg',213),(2146,1045,1046,'OP_CSTicketHeaderRequestMsg',214),(2147,1045,1046,'OP_CSTicketInfoMsg',215),(2148,1045,1046,'OP_CSTicketCommentRequestMsg',216),(2149,1045,1046,'OP_CSTicketCommentResponseMsg',217),(2150,1045,1046,'OP_CSTicketCreateMsg',218),(2151,1045,1046,'OP_CSTicketAddCommentMsg',219),(2152,1045,1046,'OP_CSTicketDeleteMsg',220),(2153,1045,1046,'OP_CSTicketChangeNotificationMsg',221),(2154,1045,1046,'OP_WorldDataUpdateMsg',222),(2155,1045,1046,'OP_KnownLanguagesMsg',223),(2156,1045,1046,'OP_LsRequestClientCrashLogMsg',224),(2157,1045,1046,'OP_LsClientBaselogReplyMsg',225),(2158,1045,1046,'OP_LsClientCrashlogReplyMsg',226),(2159,1045,1046,'OP_LsClientAlertlogReplyMsg',227),(2160,1045,1046,'OP_LsClientVerifylogReplyMsg',228),(2161,1045,1046,'OP_ClientTeleportToLocationMsg',229),(2162,1045,1046,'OP_UpdateClientPredFlagsMsg',230),(2163,1045,1046,'OP_ChangeServerControlFlagMsg',231),(2164,1045,1046,'OP_CSToolsRequestMsg',232),(2165,1045,1046,'OP_CSToolsResponseMsg',233),(2166,1045,1046,'OP_AddSocialStructureStandingMsg',234),(2167,1045,1046,'OP_CreateBoatTransportsMsg',235),(2168,1045,1046,'OP_PositionBoatTransportMsg',236),(2169,1045,1046,'OP_MigrateBoatTransportMsg',237),(2170,1045,1046,'OP_MigrateBoatTransportReplyMsg',238),(2171,1045,1046,'OP_DisplayDebugNLLPointsMsg',239),(2172,1045,1046,'OP_ExamineInfoRequestMsg',240),(2173,1045,1046,'OP_QuickbarInitMsg',241),(2174,1045,1046,'OP_QuickbarUpdateMsg',242),(2175,1045,1046,'OP_MacroInitMsg',243),(2176,1045,1046,'OP_MacroUpdateMsg',244),(2177,1045,1046,'OP_QuestionnaireMsg',245),(2178,1045,1046,'OP_LevelChangedMsg',246),(2179,1045,1046,'OP_SpellGainedMsg',247),(2180,1045,1046,'OP_EncounterBrokenMsg',248),(2181,1045,1046,'OP_OnscreenMsgMsg',249),(2182,1045,1046,'OP_DisplayWarningMsg',250),(2183,1045,1046,'OP_ModifyGuildMsg',251),(2184,1045,1046,'OP_GuildEventMsg',252),(2185,1045,1046,'OP_GuildEventAddMsg',253),(2186,1045,1046,'OP_GuildEventActionMsg',254),(2187,1045,1046,'OP_GuildEventListMsg',255),(2188,1045,1046,'OP_RequestGuildEventDetailsMsg',256),(2189,1045,1046,'OP_GuildEventDetailsMsg',257),(2190,1045,1046,'OP_RequestGuildInfoMsg',258),(2191,1045,1046,'OP_GuildBankActionMsg',259),(2192,1045,1046,'OP_GuildBankActionResponseMsg',260),(2193,1045,1046,'OP_GuildBankItemDetailsRequestMsg',261),(2194,1045,1046,'OP_GuildBankItemDetailsResponseMs',262),(2195,1045,1046,'OP_GuildBankUpdateMsg',263),(2196,1045,1046,'OP_GuildBankEventListMsg',264),(2197,1045,1046,'OP_RequestGuildBankEventDetailsMs',265),(2198,1045,1046,'OP_RewardPackMsg',266),(2199,1045,1046,'OP_RenameGuildMsg',267),(2200,1045,1046,'OP_ZoneToFriendRequestMsg',269),(2201,1045,1046,'OP_ZoneToFriendReplyMsg',270),(2202,1045,1046,'OP_ChatCreateChannelMsg',271),(2203,1045,1046,'OP_ChatJoinChannelMsg',272),(2204,1045,1046,'OP_ChatWhoChannelMsg',273),(2205,1045,1046,'OP_ChatLeaveChannelMsg',274),(2206,1045,1046,'OP_ChatTellChannelMsg',275),(2207,1045,1046,'OP_ChatTellUserMsg',276),(2208,1045,1046,'OP_ChatToggleFriendMsg',277),(2209,1045,1046,'OP_ChatToggleIgnoreMsg',278),(2210,1045,1046,'OP_ChatSendFriendsMsg',279),(2211,1045,1046,'OP_ChatSendIgnoresMsg',280),(2212,1045,1046,'OP_QuestReward',307),(2213,1045,1046,'OP_ChatFiltersMsg',322),(2214,1045,1046,'OP_MailGetHeadersMsg',323),(2215,1045,1046,'OP_MailGetMessageMsg',324),(2216,1045,1046,'OP_MailSendMessageMsg',325),(2217,1045,1046,'OP_MailDeleteMessageMsg',326),(2218,1045,1046,'OP_MailGetHeadersReplyMsg',327),(2219,1045,1046,'OP_MailGetMessageReplyMsg',328),(2220,1045,1046,'OP_MailSendMessageReplyMsg',329),(2221,1045,1046,'OP_MailCommitSendMessageMsg',330),(2222,1045,1046,'OP_MailSendSystemMessageMsg',331),(2223,1045,1046,'OP_MailRemoveAttachFromMailMsg',332),(2224,1045,1046,'OP_WaypointRequestMsg',334),(2225,1045,1046,'OP_WaypointReplyMsg',335),(2226,1045,1046,'OP_WaypointSelectMsg',336),(2227,1045,1046,'OP_WaypointUpdateMsg',337),(2228,1045,1046,'OP_CharNameChangedMsg',338),(2229,1045,1046,'OP_ShowZoneTeleporterDestinations',339),(2230,1045,1046,'OP_SelectZoneTeleporterDestinatio',340),(2231,1045,1046,'OP_ReloadLocalizedTxtMsg',341),(2232,1045,1046,'OP_RequestGuildMembershipMsg',342),(2233,1045,1046,'OP_GuildMembershipResponseMsg',343),(2234,1045,1046,'OP_LeaveGuildNotifyMsg',344),(2235,1045,1046,'OP_JoinGuildNotifyMsg',345),(2236,1045,1046,'OP_AvatarUpdateMsg',347),(2237,1045,1046,'OP_BioUpdateMsg',348),(2238,1045,1046,'OP_InspectPlayerMsg',349),(2239,1045,1046,'OP_WSServerLockMsg',350),(2240,1045,1046,'OP_LSServerLockMsg',351),(2241,1045,1046,'OP_WSServerHideMsg',352),(2242,1045,1046,'OP_CsCategoryRequestMsg',353),(2243,1045,1046,'OP_CsCategoryResponseMsg',354),(2244,1045,1046,'OP_KnowledgeWindowSlotMappingMsg',355),(2245,1045,1046,'OP_LFGUpdateMsg',356),(2246,1045,1046,'OP_AFKUpdateMsg',357),(2247,1045,1046,'OP_AnonUpdateMsg',358),(2248,1045,1046,'OP_UpdateActivePublicZonesMsg',359),(2249,1045,1046,'OP_UnknownNpcMsg',360),(2250,1045,1046,'OP_PromoFlagsDetailsMsg',361),(2251,1045,1046,'OP_ConsignViewCreateMsg',362),(2252,1045,1046,'OP_ConsignViewGetPageMsg',363),(2253,1045,1046,'OP_ConsignViewReleaseMsg',364),(2254,1045,1046,'OP_ConsignRemoveItemsMsg',365),(2255,1045,1046,'OP_UpdateDebugRadiiMsg',366),(2256,1045,1046,'OP_SnoopMsg',367),(2257,1045,1046,'OP_ReportMsg',368),(2258,1045,1046,'OP_UpdateRaidMsg',369),(2259,1045,1046,'OP_ConsignViewSortMsg',370),(2260,1045,1046,'OP_TitleUpdateMsg',371),(2261,1045,1046,'OP_ClientFellMsg',372),(2262,1045,1046,'OP_ClientInDeathRegionMsg',373),(2263,1045,1046,'OP_CampClientMsg',374),(2264,1045,1046,'OP_CSToolAccessResponseMsg',375),(2265,1045,1046,'OP_TrackingUpdateMsg',376),(2266,1045,1046,'OP_BeginTrackingMsg',377),(2267,1045,1046,'OP_StopTrackingMsg',378),(2268,1045,1046,'OP_GetAvatarAccessRequestForCSToo',379),(2269,1045,1046,'OP_AdvancementRequestMsg',380),(2270,1045,1046,'OP_UpdateAvgFrameTimeMsg',381),(2271,1045,1046,'OP_MapFogDataInitMsg',382),(2272,1045,1046,'OP_MapFogDataUpdateMsg',383),(2273,1045,1046,'OP_CloseGroupInviteWindowMsg',384),(2274,1045,1046,'OP_UpdateGroupMemberDataMsg',385),(2275,1045,1046,'OP_WorldPingMsg',386),(2276,1045,1046,'OP_MoveLogUpdateMsg',387),(2277,1045,1046,'OP_OfferQuestMsg',388),(2278,1045,1046,'OP_WorldShutdownUpdateMsg',389),(2279,1045,1046,'OP_DisplayMailScreenMsg',390),(2280,1045,1046,'OP_ClientIdleBeginMsg',391),(2281,1045,1046,'OP_ClientIdleEndMsg',392),(2282,1045,1046,'OP_PurchaseConsignmentLoreCheckRe',393),(2283,1045,1046,'OP_NotifyApprenticeStoppedMentori',394),(2284,1045,1046,'OP_CorruptedClientMsg',395),(2285,1045,1046,'OP_WorldDataChangeMsg',396),(2286,1045,1046,'OP_MailEventNotificationMsg',397),(2287,1045,1046,'OP_RestartZoneMsg',398),(2288,1045,1046,'OP_FlightPathsMsg',399),(2289,1045,1046,'OP_CharacterLinkdeadMsg',400),(2290,1045,1046,'OP_CharTransferStartRequestMsg',401),(2291,1045,1046,'OP_CharTransferStartReplyMsg',402),(2292,1045,1046,'OP_CharTransferRequestMsg',403),(2293,1045,1046,'OP_CharTransferReplyMsg',404),(2294,1045,1046,'OP_CharTransferRollbackRequestMsg',405),(2295,1045,1046,'OP_CharTransferCommitRequestMsg',406),(2296,1045,1046,'OP_CharTransferRollbackReplyMsg',407),(2297,1045,1046,'OP_CharTransferCommitReplyMsg',408),(2298,1045,1046,'OP_GetCharacterSerializedRequestM',409),(2299,1045,1046,'OP_GetCharacterSerializedReplyMsg',410),(2300,1045,1046,'OP_CreateCharFromCBBRequestMsg',411),(2301,1045,1046,'OP_CreateCharFromCBBReplyMsg',412),(2302,1045,1046,'OP_HousingDataChangedMsg',413),(2303,1045,1046,'OP_HousingRestoreMsg',414),(2304,1045,1046,'OP_AuctionItem',415),(2305,1045,1046,'OP_AuctionItemReply',416),(2306,1045,1046,'OP_AuctionCoin',417),(2307,1045,1046,'OP_AuctionCoinReply',418),(2308,1045,1046,'OP_AuctionCharacter',419),(2309,1045,1046,'OP_AuctionCharacterReply',420),(2310,1045,1046,'OP_AuctionCommitMsg',421),(2311,1045,1046,'OP_AuctionAbortMsg',422),(2312,1045,1046,'OP_CharTransferValidateRequestMsg',423),(2313,1045,1046,'OP_CharTransferValidateReplyMsg',424),(2314,1045,1046,'OP_RaceRestrictionMsg',425),(2315,1045,1046,'OP_SetInstanceDisplayNameMsg',426),(2316,1045,1046,'OP_GetAuctionAssetIDMsg',427),(2317,1045,1046,'OP_GetAuctionAssetIDReplyMsg',428),(2318,1045,1046,'OP_ResendWorldChannelsMsg',429),(2319,1045,1046,'OP_DisplayExchangeScreenMsg',430),(2320,1045,1046,'OP_ArenaGameTypesMsg',431),(2321,1045,1046,'OP_AuditAuctionEventMsg',433),(2322,1045,1046,'OP_InviteRequestMsg',435),(2323,1045,1046,'OP_InviteResponseMsg',436),(2324,1045,1046,'OP_InviteTargetResponseMsg',437),(2325,1045,1046,'OP_InspectPlayerRequestMsg',438),(2326,1045,1046,'OP_DispatchMsg',439),(2327,1045,1046,'OP_DisplayEventMsg',440),(2328,1045,1046,'OP_PrePossessionMsg',441),(2329,1045,1046,'OP_PostPossessionMsg',442),(2330,1045,1046,'OP_AdventureList',474),(2331,1045,1046,'OP_CancelSpellCast',475),(2332,1045,1046,'OP_UpdateTitleCmd',483),(2333,1045,1046,'OP_AttackAllowed',487),(2334,1045,1046,'OP_AttackNotAllowed',488),(2335,1045,1046,'OP_DressingRoom',494),(2336,1045,1046,'OP_SkillInfoRequest',498),(2337,1045,1046,'OP_SkillInfoResponse',499),(2338,1045,1046,'OP_BadLanguageFilter',503),(2339,1045,1046,'OP_MapRequest',504),(2340,1045,1046,'OP_EqUnknown',539),(2341,1045,1046,'OP_EqHearChatCmd',541),(2342,1045,1046,'OP_EqDisplayTextCmd',542),(2343,1045,1046,'OP_EqCreateGhostCmd',543),(2344,1045,1046,'OP_EqCreateWidgetCmd',544),(2345,1045,1046,'OP_EqCreateSignWidgetCmd',545),(2346,1045,1046,'OP_EqDestroyGhostCmd',546),(2347,1045,1046,'OP_EqUpdateGhostCmd',547),(2348,1045,1046,'OP_EqSetControlGhostCmd',548),(2349,1045,1046,'OP_EqSetPOVGhostCmd',549),(2350,1045,1046,'OP_EqHearCombatCmd',550),(2351,1045,1046,'OP_EqHearSpellCastCmd',551),(2352,1045,1046,'OP_EqHearSpellInterruptCmd',554),(2353,1045,1046,'OP_EqHearSpellFizzleCmd',555),(2354,1045,1046,'OP_EqHearConsiderCmd',556),(2355,1045,1046,'OP_EqUpdateSubClassesCmd',557),(2356,1045,1046,'OP_EqCreateListBoxCmd',558),(2357,1045,1046,'OP_EqSetDebugPathPointsCmd',559),(2358,1045,1046,'OP_EqCannedEmoteCmd',561),(2359,1045,1046,'OP_EqStateCmd',562),(2360,1045,1046,'OP_EqPlaySoundCmd',563),(2361,1045,1046,'OP_EqPlaySound3DCmd',564),(2362,1045,1046,'OP_EqPlayVoiceCmd',565),(2363,1045,1046,'OP_EqHearDrowningCmd',566),(2364,1045,1046,'OP_EqHearDeathCmd',567),(2365,1045,1046,'OP_EqGroupMemberRemovedCmd',568),(2366,1045,1046,'OP_EqHearChainEffectCmd',569),(2367,1045,1046,'OP_EqReceiveOfferCmd',570),(2368,1045,1046,'OP_EqInspectPCResultsCmd',571),(2369,1045,1046,'OP_EqDrawablePathGraphCmd',572),(2370,1045,1046,'OP_EqDialogOpenCmd',573),(2371,1045,1046,'OP_EqDialogCloseCmd',574),(2372,1045,1046,'OP_EqFactionUpdateCmd',575),(2373,1045,1046,'OP_EqCollectionUpdateCmd',576),(2374,1045,1046,'OP_EqCollectionFilterCmd',577),(2375,1045,1046,'OP_EqCollectionItemCmd',578),(2376,1045,1046,'OP_EqQuestJournalUpdateCmd',579),(2377,1045,1046,'OP_EqQuestJournalReplyCmd',581),(2378,1045,1046,'OP_EqQuestGroupCmd',582),(2379,1045,1046,'OP_EqUpdateMerchantCmd',583),(2380,1045,1046,'OP_EqUpdateStoreCmd',584),(2381,1045,1046,'OP_EqUpdatePlayerTradeCmd',585),(2382,1045,1046,'OP_EqHelpPathCmd',586),(2383,1045,1046,'OP_EqHelpPathClearCmd',587),(2384,1045,1046,'OP_EqUpdateBankCmd',588),(2385,1045,1046,'OP_EqExamineInfoCmd',589),(2386,1045,1046,'OP_EqCloseWindowCmd',590),(2387,1045,1046,'OP_EqUpdateLootCmd',591),(2388,1045,1046,'OP_EqJunctionListCmd',592),(2389,1045,1046,'OP_EqShowDeathWindowCmd',593),(2390,1045,1046,'OP_EqDisplaySpellFailCmd',594),(2391,1045,1046,'OP_EqSpellCastStartCmd',595),(2392,1045,1046,'OP_EqSpellCastEndCmd',596),(2393,1045,1046,'OP_EqResurrectedCmd',597),(2394,1045,1046,'OP_EqChoiceWinCmd',598),(2395,1045,1046,'OP_EqSetDefaultVerbCmd',599),(2396,1045,1046,'OP_EqInstructionWindowCmd',601),(2397,1045,1046,'OP_EqInstructionWindowCloseCmd',602),(2398,1045,1046,'OP_EqInstructionWindowGoalCmd',603),(2399,1045,1046,'OP_EqInstructionWindowTaskCmd',604),(2400,1045,1046,'OP_EqEnableGameEventCmd',605),(2401,1045,1046,'OP_EqShowWindowCmd',606),(2402,1045,1046,'OP_EqEnableWindowCmd',607),(2403,1045,1046,'OP_EqFlashWindowCmd',608),(2404,1045,1046,'OP_EqHearPlayFlavorCmd',609),(2405,1045,1046,'OP_EqUpdateSignWidgetCmd',611),(2406,1045,1046,'OP_EqDebugPVDCmd',612),(2407,1045,1046,'OP_EqShowBookCmd',613),(2408,1045,1046,'OP_EqQuestionnaireCmd',614),(2409,1045,1046,'OP_EqGetProbsCmd',615),(2410,1045,1046,'OP_EqHearHealCmd',616),(2411,1045,1046,'OP_EqChatChannelUpdateCmd',617),(2412,1045,1046,'OP_EqWhoChannelQueryReplyCmd',618),(2413,1045,1046,'OP_EqAvailWorldChannelsCmd',619),(2414,1045,1046,'OP_EqUpdateTargetCmd',620),(2415,1045,1046,'OP_EqConsignmentItemsCmd',622),(2416,1045,1046,'OP_EqStartBrokerCmd',624),(2417,1045,1046,'OP_EqMapExplorationCmd',625),(2418,1045,1046,'OP_EqStoreLogCmd',626),(2419,1045,1046,'OP_EqSpellMoveToRangeAndRetryCmd',627),(2420,1045,1046,'OP_EqUpdatePlayerMailCmd',628),(2421,1045,1046,'OP_EqArenaResultsCmd',629),(2422,1045,1046,'OP_EqGuildBankEventActionCmd',630),(2423,1045,1046,'OP_EqGuildBankExamineInfoCmd',631),(2424,1045,1046,'OP_EqHearSpellNoLandCmd',632),(2425,1045,1046,'OP_Lottery',636),(2426,1045,1046,'OP_GuildRecruitingMemberInfo',637),(2427,1045,1046,'OP_GuildRecruiting',638),(2428,1045,1046,'OP_GuildRecruitingDetails',639),(2429,1045,1046,'OP_GuildRecruitingImage',640),(2430,1045,1046,'OP_PointOfInterest',661),(2431,1045,1046,'OP_TraitsList',663),(2432,1045,1046,'OP_RecipeList',672),(2433,1045,1046,'OP_CharacterAchievements',674),(2434,1045,1046,'OP_AddClientToGroupMsg',1054),(2435,1045,1046,'OP_AddGroupToGroupMsg',1054),(2436,1045,1046,'OP_GuildKickMsg',1054),(2437,1045,1046,'OP_ProcessScriptMsg',1054),(2438,1045,1046,'OP_ProcessWorkspaceMsg',1054),(2439,1045,1046,'OP_PurchaseConsignmentResponseMsg',1054),(2440,1045,1046,'OP_QuickbarAddMsg',1054),(2441,1045,1046,'OP_SkillSlotMapping',1054),(2442,1045,1046,'OP_Unknown',10058),(2443,1045,1046,'OP_WSWeatherUpdateMsg',10059),(2444,1096,1096,'OP_LoginRequestMsg',0),(2445,1096,1096,'OP_LoginByNumRequestMsg',1),(2446,1096,1096,'OP_WSLoginRequestMsg',2),(2447,1096,1096,'OP_ESLoginRequestMsg',3),(2448,1096,1096,'OP_LoginReplyMsg',4),(2449,1096,1096,'OP_WSStatusReplyMsg',5),(2450,1096,1096,'OP_WorldStatusChangeMsg',6),(2451,1096,1096,'OP_AllWSDescRequestMsg',7),(2452,1096,1096,'OP_WorldListMsg',8),(2453,1096,1096,'OP_AllCharactersDescRequestMsg',9),(2454,1096,1096,'OP_AllCharactersDescReplyMsg',10),(2455,1096,1096,'OP_CreateCharacterRequestMsg',11),(2456,1096,1096,'OP_CreateCharacterReplyMsg',12),(2457,1096,1096,'OP_WSCreateCharacterRequestMsg',13),(2458,1096,1096,'OP_WSCreateCharacterReplyMsg',14),(2459,1096,1096,'OP_ReskinCharacterRequestMsg',15),(2460,1096,1096,'OP_DeleteCharacterRequestMsg',16),(2461,1096,1096,'OP_DeleteCharacterReplyMsg',17),(2462,1096,1096,'OP_PlayCharacterRequestMsg',18),(2463,1096,1096,'OP_PlayCharacterReplyMsg',19),(2464,1096,1096,'OP_ExpectClientAsCharacterReplyMs',22),(2465,1096,1096,'OP_ServerPlayCharacterRequestMsg',23),(2466,1096,1096,'OP_ServerPlayCharacterReplyMsg',24),(2467,1096,1096,'OP_ESInitMsg',25),(2468,1096,1096,'OP_ESReadyForClientsMsg',26),(2469,1096,1096,'OP_CreateZoneInstanceMsg',27),(2470,1096,1096,'OP_ZoneInstanceCreateReplyMsg',28),(2471,1096,1096,'OP_ZoneInstanceDestroyedMsg',29),(2472,1096,1096,'OP_ExpectClientAsCharacterRequest',30),(2473,1096,1096,'OP_ZoneInfoMsg',32),(2474,1096,1096,'OP_DoneLoadingZoneResourcesMsg',33),(2475,1096,1096,'OP_DoneSendingInitialEntitiesMsg',34),(2476,1096,1096,'OP_DoneLoadingEntityResourcesMsg',35),(2477,1096,1096,'OP_PredictionUpdateMsg',36),(2478,1096,1096,'OP_UpdatePositionMsg',38),(2479,1096,1096,'OP_SetRemoteCmdsMsg',40),(2480,1096,1096,'OP_RemoteCmdMsg',41),(2481,1096,1096,'OP_GameWorldTimeMsg',42),(2482,1096,1096,'OP_MOTDMsg',43),(2483,1096,1096,'OP_ZoneMOTDMsg',44),(2484,1096,1096,'OP_AvatarCreatedMsg',45),(2485,1096,1096,'OP_AvatarDestroyedMsg',46),(2486,1096,1096,'OP_RequestCampMsg',48),(2487,1096,1096,'OP_CampStartedMsg',49),(2488,1096,1096,'OP_CampAbortedMsg',50),(2489,1096,1096,'OP_WhoQueryRequestMsg',51),(2490,1096,1096,'OP_WhoQueryReplyMsg',52),(2491,1096,1096,'OP_MonitorReplyMsg',53),(2492,1096,1096,'OP_MonitorCharacterListMsg',54),(2493,1096,1096,'OP_MonitorCharacterListRequestMsg',55),(2494,1096,1096,'OP_ClientCmdMsg',56),(2495,1096,1096,'OP_DispatchESMsg',57),(2496,1096,1096,'OP_DispatchClientCmdMsg',58),(2497,1096,1096,'OP_UpdateTargetMsg',59),(2498,1096,1096,'OP_UpdateTargetLocMsg',60),(2499,1096,1096,'OP_UpdateCharacterSheetMsg',61),(2500,1096,1096,'OP_UpdateSpellBookMsg',62),(2501,1096,1096,'OP_UpdateInventoryMsg',64),(2502,1096,1096,'OP_UpdateRecipeBookMsg',66),(2503,1096,1096,'OP_RequestRecipeDetailsMsg',67),(2504,1096,1096,'OP_RecipeDetailsMsg',68),(2505,1096,1096,'OP_UpdateSkillBookMsg',69),(2506,1096,1096,'OP_UpdateSkillsMsg',70),(2507,1096,1096,'OP_UpdateOpportunityMsg',71),(2508,1096,1096,'OP_ChangeZoneMsg',73),(2509,1096,1096,'OP_ClientTeleportRequestMsg',74),(2510,1096,1096,'OP_TeleportWithinZoneMsg',75),(2511,1096,1096,'OP_TeleportWithinZoneNoReloadMsg',76),(2512,1096,1096,'OP_MigrateClientToZoneRequestMsg',77),(2513,1096,1096,'OP_MigrateClientToZoneReplyMsg',78),(2514,1096,1096,'OP_ReadyToZoneMsg',80),(2515,1096,1096,'OP_RemoveClientFromGroupMsg',81),(2516,1096,1096,'OP_RemoveGroupFromGroupMsg',82),(2517,1096,1096,'OP_MakeGroupLeaderMsg',83),(2518,1096,1096,'OP_GroupCreatedMsg',84),(2519,1096,1096,'OP_GroupDestroyedMsg',85),(2520,1096,1096,'OP_GroupMemberAddedMsg',86),(2521,1096,1096,'OP_GroupMemberRemovedMsg',87),(2522,1096,1096,'OP_GroupRemovedFromGroupMsg',88),(2523,1096,1096,'OP_GroupLeaderChangedMsg',89),(2524,1096,1096,'OP_GroupResendOOZDataMsg',90),(2525,1096,1096,'OP_GroupSettingsChangedMsg',91),(2526,1096,1096,'OP_OutOfZoneMemberDataMsg',92),(2527,1096,1096,'OP_SendLatestRequestMsg',93),(2528,1096,1096,'OP_ClearDataMsg',94),(2529,1096,1096,'OP_SetSocialMsg',95),(2530,1096,1096,'OP_ESStatusMsg',96),(2531,1096,1096,'OP_ESZoneInstanceStatusMsg',97),(2532,1096,1096,'OP_ZonesStatusRequestMsg',98),(2533,1096,1096,'OP_ZonesStatusMsg',99),(2534,1096,1096,'OP_ESWeatherRequestMsg',100),(2535,1096,1096,'OP_ESWeatherRequestEndMsg',101),(2536,1096,1096,'OP_DialogSelectMsg',105),(2537,1096,1096,'OP_DialogCloseMsg',106),(2538,1096,1096,'OP_RemoveSpellEffectMsg',107),(2539,1096,1096,'OP_RemoveConcentrationMsg',108),(2540,1096,1096,'OP_QuestJournalOpenMsg',109),(2541,1096,1096,'OP_QuestJournalInspectMsg',110),(2542,1096,1096,'OP_QuestJournalSetVisibleMsg',111),(2543,1096,1096,'OP_QuestJournalWaypointMsg',112),(2544,1096,1096,'OP_CreateGuildRequestMsg',113),(2545,1096,1096,'OP_CreateGuildReplyMsg',114),(2546,1096,1096,'OP_GuildsayMsg',115),(2547,1096,1096,'OP_FellowshipExpMsg',118),(2548,1096,1096,'OP_DeleteGuildMsg',119),(2549,1096,1096,'OP_GuildUpdateMsg',120),(2550,1096,1096,'OP_ConsignmentCloseStoreMsg',121),(2551,1096,1096,'OP_ConsignItemRequestMsg',122),(2552,1096,1096,'OP_ConsignItemResponseMsg',123),(2553,1096,1096,'OP_PurchaseConsignmentRequestMsg',124),(2554,1096,1096,'OP_HouseDeletedRemotelyMsg',125),(2555,1096,1096,'OP_UpdateHouseDataMsg',126),(2556,1096,1096,'OP_UpdateHouseAccessDataMsg',127),(2557,1096,1096,'OP_PlayerHouseBaseScreenMsg',128),(2558,1096,1096,'OP_PlayerHousePurchaseScreenMsg',129),(2559,1096,1096,'OP_PlayerHouseAccessUpdateMsg',130),(2560,1096,1096,'OP_PlayerHouseDisplayStatusMsg',131),(2561,1096,1096,'OP_PlayerHouseCloseUIMsg',132),(2562,1096,1096,'OP_BuyPlayerHouseMsg',133),(2563,1096,1096,'OP_BuyPlayerHouseTintMsg',134),(2564,1096,1096,'OP_CollectAllHouseItemsMsg',135),(2565,1096,1096,'OP_RelinquishHouseMsg',136),(2566,1096,1096,'OP_EnterHouseMsg',137),(2567,1096,1096,'OP_ExitHouseMsg',138),(2568,1096,1096,'OP_HouseDefaultAccessSetMsg',139),(2569,1096,1096,'OP_HouseAccessSetMsg',140),(2570,1096,1096,'OP_HouseAccessRemoveMsg',141),(2571,1096,1096,'OP_PayHouseUpkeepMsg',142),(2572,1096,1096,'OP_MoveableObjectPlacementCriteri',146),(2573,1096,1096,'OP_EnterMoveObjectModeMsg',147),(2574,1096,1096,'OP_PositionMoveableObject',148),(2575,1096,1096,'OP_CancelMoveObjectModeMsg',149),(2576,1096,1096,'OP_ShaderCustomizationMsg',150),(2577,1096,1096,'OP_ReplaceableSubMeshesMsg',151),(2578,1096,1096,'OP_HouseCustomizationScreenMsg',152),(2579,1096,1096,'OP_CustomizationPurchaseRequestMs',153),(2580,1096,1096,'OP_CustomizationSetRequestMsg',154),(2581,1096,1096,'OP_CustomizationReplyMsg',155),(2582,1096,1096,'OP_TintWidgetsMsg',156),(2583,1096,1096,'OP_ExamineConsignmentRequestMsg',157),(2584,1096,1096,'OP_ExamineConsignmentResponseMsg',158),(2585,1096,1096,'OP_UISettingsResponseMsg',159),(2586,1096,1096,'OP_UIResetMsg',160),(2587,1096,1096,'OP_KeymapLoadMsg',161),(2588,1096,1096,'OP_KeymapNoneMsg',162),(2589,1096,1096,'OP_KeymapDataMsg',163),(2590,1096,1096,'OP_KeymapSaveMsg',164),(2591,1096,1096,'OP_DispatchSpellCmdMsg',165),(2592,1096,1096,'OP_EntityVerbsRequestMsg',166),(2593,1096,1096,'OP_EntityVerbsReplyMsg',167),(2594,1096,1096,'OP_EntityVerbsVerbMsg',168),(2595,1096,1096,'OP_ChatRelationshipUpdateMsg',170),(2596,1096,1096,'OP_LootItemsRequestMsg',171),(2597,1096,1096,'OP_StoppedLootingMsg',172),(2598,1096,1096,'OP_SitMsg',173),(2599,1096,1096,'OP_StandMsg',174),(2600,1096,1096,'OP_SatMsg',175),(2601,1096,1096,'OP_StoodMsg',176),(2602,1096,1096,'OP_ClearForTakeOffMsg',177),(2603,1096,1096,'OP_ReadyForTakeOffMsg',178),(2604,1096,1096,'OP_ShowIllusionsMsg',179),(2605,1096,1096,'OP_HideIllusionsMsg',180),(2606,1096,1096,'OP_ExamineItemRequestMsg',181),(2607,1096,1096,'OP_ReadBookPageMsg',182),(2608,1096,1096,'OP_DefaultGroupOptionsRequestMsg',183),(2609,1096,1096,'OP_DefaultGroupOptionsMsg',184),(2610,1096,1096,'OP_GroupOptionsMsg',185),(2611,1096,1096,'OP_DisplayGroupOptionsScreenMsg',186),(2612,1096,1096,'OP_DisplayInnVisitScreenMsg',188),(2613,1096,1096,'OP_DumpSchedulerMsg',189),(2614,1096,1096,'OP_LSRequestPlayerDescMsg',190),(2615,1096,1096,'OP_LSCheckAcctLockMsg',191),(2616,1096,1096,'OP_WSAcctLockStatusMsg',192),(2617,1096,1096,'OP_RequestHelpRepathMsg',193),(2618,1096,1096,'OP_RequestTargetLocMsg',194),(2619,1096,1096,'OP_UpdateMotdMsg',195),(2620,1096,1096,'OP_PerformPlayerKnockbackMsg',197),(2621,1096,1096,'OP_PerformCameraShakeMsg',198),(2622,1096,1096,'OP_PopulateSkillMapsMsg',199),(2623,1096,1096,'OP_CancelledFeignMsg',201),(2624,1096,1096,'OP_SignalMsg',202),(2625,1096,1096,'OP_ShowCreateFromRecipeUIMsg',203),(2626,1096,1096,'OP_CancelCreateFromRecipeMsg',204),(2627,1096,1096,'OP_BeginItemCreationMsg',205),(2628,1096,1096,'OP_StopItemCreationMsg',206),(2629,1096,1096,'OP_ShowItemCreationProcessUIMsg',207),(2630,1096,1096,'OP_UpdateItemCreationProcessUIMsg',208),(2631,1096,1096,'OP_DisplayTSEventReactionMsg',209),(2632,1096,1096,'OP_ShowRecipeBookMsg',210),(2633,1096,1096,'OP_KnowledgebaseRequestMsg',211),(2634,1096,1096,'OP_KnowledgebaseResponseMsg',212),(2635,1096,1096,'OP_CSTicketHeaderRequestMsg',213),(2636,1096,1096,'OP_CSTicketInfoMsg',214),(2637,1096,1096,'OP_CSTicketCommentRequestMsg',215),(2638,1096,1096,'OP_CSTicketCommentResponseMsg',216),(2639,1096,1096,'OP_CSTicketCreateMsg',217),(2640,1096,1096,'OP_CSTicketAddCommentMsg',218),(2641,1096,1096,'OP_CSTicketDeleteMsg',219),(2642,1096,1096,'OP_CSTicketChangeNotificationMsg',220),(2643,1096,1096,'OP_WorldDataUpdateMsg',221),(2644,1096,1096,'OP_KnownLanguagesMsg',222),(2645,1096,1096,'OP_LsRequestClientCrashLogMsg',223),(2646,1096,1096,'OP_LsClientBaselogReplyMsg',224),(2647,1096,1096,'OP_LsClientCrashlogReplyMsg',225),(2648,1096,1096,'OP_LsClientAlertlogReplyMsg',226),(2649,1096,1096,'OP_LsClientVerifylogReplyMsg',227),(2650,1096,1096,'OP_ClientTeleportToLocationMsg',228),(2651,1096,1096,'OP_UpdateClientPredFlagsMsg',229),(2652,1096,1096,'OP_ChangeServerControlFlagMsg',230),(2653,1096,1096,'OP_CSToolsRequestMsg',231),(2654,1096,1096,'OP_CSToolsResponseMsg',232),(2655,1096,1096,'OP_AddSocialStructureStandingMsg',233),(2656,1096,1096,'OP_CreateBoatTransportsMsg',234),(2657,1096,1096,'OP_PositionBoatTransportMsg',235),(2658,1096,1096,'OP_MigrateBoatTransportMsg',236),(2659,1096,1096,'OP_MigrateBoatTransportReplyMsg',237),(2660,1096,1096,'OP_DisplayDebugNLLPointsMsg',238),(2661,1096,1096,'OP_ExamineInfoRequestMsg',239),(2662,1096,1096,'OP_QuickbarInitMsg',240),(2663,1096,1096,'OP_QuickbarUpdateMsg',241),(2664,1096,1096,'OP_MacroInitMsg',242),(2665,1096,1096,'OP_MacroUpdateMsg',243),(2666,1096,1096,'OP_QuestionnaireMsg',244),(2667,1096,1096,'OP_LevelChangedMsg',245),(2668,1096,1096,'OP_SpellGainedMsg',246),(2669,1096,1096,'OP_EncounterBrokenMsg',247),(2670,1096,1096,'OP_OnscreenMsgMsg',248),(2671,1096,1096,'OP_DisplayWarningMsg',249),(2672,1096,1096,'OP_ModifyGuildMsg',250),(2673,1096,1096,'OP_GuildEventMsg',251),(2674,1096,1096,'OP_GuildEventAddMsg',252),(2675,1096,1096,'OP_GuildEventActionMsg',253),(2676,1096,1096,'OP_GuildEventListMsg',254),(2677,1096,1096,'OP_RequestGuildEventDetailsMsg',255),(2678,1096,1096,'OP_GuildEventDetailsMsg',256),(2679,1096,1096,'OP_RequestGuildInfoMsg',257),(2680,1096,1096,'OP_GuildBankActionMsg',258),(2681,1096,1096,'OP_GuildBankActionResponseMsg',259),(2682,1096,1096,'OP_GuildBankItemDetailsRequestMsg',260),(2683,1096,1096,'OP_GuildBankItemDetailsResponseMs',261),(2684,1096,1096,'OP_GuildBankUpdateMsg',262),(2685,1096,1096,'OP_GuildBankEventListMsg',263),(2686,1096,1096,'OP_RequestGuildBankEventDetailsMs',264),(2687,1096,1096,'OP_RewardPackMsg',265),(2688,1096,1096,'OP_RenameGuildMsg',266),(2689,1096,1096,'OP_ZoneToFriendRequestMsg',268),(2690,1096,1096,'OP_ZoneToFriendReplyMsg',269),(2691,1096,1096,'OP_ChatCreateChannelMsg',270),(2692,1096,1096,'OP_ChatJoinChannelMsg',271),(2693,1096,1096,'OP_ChatWhoChannelMsg',272),(2694,1096,1096,'OP_ChatLeaveChannelMsg',273),(2695,1096,1096,'OP_ChatTellChannelMsg',274),(2696,1096,1096,'OP_ChatTellUserMsg',275),(2697,1096,1096,'OP_ChatToggleFriendMsg',276),(2698,1096,1096,'OP_ChatToggleIgnoreMsg',277),(2699,1096,1096,'OP_ChatSendFriendsMsg',278),(2700,1096,1096,'OP_ChatSendIgnoresMsg',279),(2701,1096,1096,'OP_QuestReward',304),(2702,1096,1096,'OP_ChatFiltersMsg',319),(2703,1096,1096,'OP_MailGetHeadersMsg',320),(2704,1096,1096,'OP_MailGetMessageMsg',321),(2705,1096,1096,'OP_MailSendMessageMsg',322),(2706,1096,1096,'OP_MailDeleteMessageMsg',323),(2707,1096,1096,'OP_MailGetHeadersReplyMsg',324),(2708,1096,1096,'OP_MailGetMessageReplyMsg',325),(2709,1096,1096,'OP_MailSendMessageReplyMsg',326),(2710,1096,1096,'OP_MailCommitSendMessageMsg',327),(2711,1096,1096,'OP_MailSendSystemMessageMsg',328),(2712,1096,1096,'OP_MailRemoveAttachFromMailMsg',329),(2713,1096,1096,'OP_WaypointRequestMsg',331),(2714,1096,1096,'OP_WaypointReplyMsg',332),(2715,1096,1096,'OP_WaypointSelectMsg',333),(2716,1096,1096,'OP_WaypointUpdateMsg',334),(2717,1096,1096,'OP_CharNameChangedMsg',335),(2718,1096,1096,'OP_ShowZoneTeleporterDestinations',336),(2719,1096,1096,'OP_SelectZoneTeleporterDestinatio',337),(2720,1096,1096,'OP_ReloadLocalizedTxtMsg',338),(2721,1096,1096,'OP_RequestGuildMembershipMsg',339),(2722,1096,1096,'OP_GuildMembershipResponseMsg',340),(2723,1096,1096,'OP_LeaveGuildNotifyMsg',341),(2724,1096,1096,'OP_JoinGuildNotifyMsg',342),(2725,1096,1096,'OP_AvatarUpdateMsg',343),(2726,1096,1096,'OP_BioUpdateMsg',345),(2727,1096,1096,'OP_InspectPlayerMsg',346),(2728,1096,1096,'OP_WSServerLockMsg',347),(2729,1096,1096,'OP_LSServerLockMsg',348),(2730,1096,1096,'OP_WSServerHideMsg',349),(2731,1096,1096,'OP_CsCategoryRequestMsg',350),(2732,1096,1096,'OP_CsCategoryResponseMsg',351),(2733,1096,1096,'OP_KnowledgeWindowSlotMappingMsg',352),(2734,1096,1096,'OP_LFGUpdateMsg',3533),(2735,1096,1096,'OP_AFKUpdateMsg',353),(2736,1096,1096,'OP_AnonUpdateMsg',354),(2737,1096,1096,'OP_UpdateActivePublicZonesMsg',355),(2738,1096,1096,'OP_UnknownNpcMsg',356),(2739,1096,1096,'OP_PromoFlagsDetailsMsg',357),(2740,1096,1096,'OP_ConsignViewCreateMsg',358),(2741,1096,1096,'OP_ConsignViewGetPageMsg',359),(2742,1096,1096,'OP_ConsignViewReleaseMsg',360),(2743,1096,1096,'OP_ConsignRemoveItemsMsg',361),(2744,1096,1096,'OP_UpdateDebugRadiiMsg',362),(2745,1096,1096,'OP_SnoopMsg',363),(2746,1096,1096,'OP_ReportMsg',364),(2747,1096,1096,'OP_UpdateRaidMsg',365),(2748,1096,1096,'OP_ConsignViewSortMsg',366),(2749,1096,1096,'OP_TitleUpdateMsg',367),(2750,1096,1096,'OP_ClientFellMsg',368),(2751,1096,1096,'OP_ClientInDeathRegionMsg',369),(2752,1096,1096,'OP_CampClientMsg',370),(2753,1096,1096,'OP_CSToolAccessResponseMsg',371),(2754,1096,1096,'OP_TrackingUpdateMsg',372),(2755,1096,1096,'OP_BeginTrackingMsg',373),(2756,1096,1096,'OP_StopTrackingMsg',374),(2757,1096,1096,'OP_GetAvatarAccessRequestForCSToo',375),(2758,1096,1096,'OP_AdvancementRequestMsg',376),(2759,1096,1096,'OP_UpdateAvgFrameTimeMsg',377),(2760,1096,1096,'OP_MapFogDataInitMsg',378),(2761,1096,1096,'OP_MapFogDataUpdateMsg',379),(2762,1096,1096,'OP_CloseGroupInviteWindowMsg',380),(2763,1096,1096,'OP_UpdateGroupMemberDataMsg',381),(2764,1096,1096,'OP_WorldPingMsg',382),(2765,1096,1096,'OP_MoveLogUpdateMsg',383),(2766,1096,1096,'OP_OfferQuestMsg',384),(2767,1096,1096,'OP_WorldShutdownUpdateMsg',385),(2768,1096,1096,'OP_DisplayMailScreenMsg',386),(2769,1096,1096,'OP_ClientIdleBeginMsg',387),(2770,1096,1096,'OP_ClientIdleEndMsg',388),(2771,1096,1096,'OP_PurchaseConsignmentLoreCheckRe',389),(2772,1096,1096,'OP_NotifyApprenticeStoppedMentori',390),(2773,1096,1096,'OP_CorruptedClientMsg',391),(2774,1096,1096,'OP_WorldDataChangeMsg',392),(2775,1096,1096,'OP_MailEventNotificationMsg',393),(2776,1096,1096,'OP_RestartZoneMsg',394),(2777,1096,1096,'OP_FlightPathsMsg',395),(2778,1096,1096,'OP_CharacterLinkdeadMsg',396),(2779,1096,1096,'OP_CharTransferStartRequestMsg',397),(2780,1096,1096,'OP_CharTransferStartReplyMsg',398),(2781,1096,1096,'OP_CharTransferRequestMsg',399),(2782,1096,1096,'OP_CharTransferReplyMsg',400),(2783,1096,1096,'OP_CharTransferRollbackRequestMsg',401),(2784,1096,1096,'OP_CharTransferCommitRequestMsg',402),(2785,1096,1096,'OP_CharTransferRollbackReplyMsg',403),(2786,1096,1096,'OP_CharTransferCommitReplyMsg',404),(2787,1096,1096,'OP_GetCharacterSerializedRequestM',405),(2788,1096,1096,'OP_GetCharacterSerializedReplyMsg',406),(2789,1096,1096,'OP_CreateCharFromCBBRequestMsg',407),(2790,1096,1096,'OP_CreateCharFromCBBReplyMsg',408),(2791,1096,1096,'OP_HousingDataChangedMsg',409),(2792,1096,1096,'OP_HousingRestoreMsg',410),(2793,1096,1096,'OP_AuctionItem',411),(2794,1096,1096,'OP_AuctionItemReply',412),(2795,1096,1096,'OP_AuctionCoin',413),(2796,1096,1096,'OP_AuctionCoinReply',414),(2797,1096,1096,'OP_AuctionCharacter',415),(2798,1096,1096,'OP_AuctionCharacterReply',416),(2799,1096,1096,'OP_AuctionCommitMsg',417),(2800,1096,1096,'OP_AuctionAbortMsg',418),(2801,1096,1096,'OP_CharTransferValidateRequestMsg',419),(2802,1096,1096,'OP_CharTransferValidateReplyMsg',420),(2803,1096,1096,'OP_RaceRestrictionMsg',421),(2804,1096,1096,'OP_SetInstanceDisplayNameMsg',422),(2805,1096,1096,'OP_GetAuctionAssetIDMsg',423),(2806,1096,1096,'OP_GetAuctionAssetIDReplyMsg',424),(2807,1096,1096,'OP_ResendWorldChannelsMsg',425),(2808,1096,1096,'OP_DisplayExchangeScreenMsg',426),(2809,1096,1096,'OP_ArenaGameTypesMsg',428),(2810,1096,1096,'OP_AuditAuctionEventMsg',429),(2811,1096,1096,'OP_InviteRequestMsg',431),(2812,1096,1096,'OP_InviteResponseMsg',432),(2813,1096,1096,'OP_InviteTargetResponseMsg',433),(2814,1096,1096,'OP_InspectPlayerRequestMsg',434),(2815,1096,1096,'OP_DispatchMsg',435),(2816,1096,1096,'OP_DisplayEventMsg',436),(2817,1096,1096,'OP_PrePossessionMsg',437),(2818,1096,1096,'OP_PostPossessionMsg',438),(2819,1096,1096,'OP_AdventureList',470),(2820,1096,1096,'OP_CancelSpellCast',471),(2821,1096,1096,'OP_UpdateTitleCmd',476),(2822,1096,1096,'OP_AttackAllowed',482),(2823,1096,1096,'OP_AttackNotAllowed',483),(2824,1096,1096,'OP_DressingRoom',492),(2825,1096,1096,'OP_SkillInfoRequest',496),(2826,1096,1096,'OP_SkillInfoResponse',497),(2827,1096,1096,'OP_BadLanguageFilter',501),(2828,1096,1096,'OP_MapRequest',503),(2829,1096,1096,'OP_Unknown',509),(2830,1096,1096,'OP_EqUnknown',541),(2831,1096,1096,'OP_EqHearChatCmd',543),(2832,1096,1096,'OP_EqDisplayTextCmd',544),(2833,1096,1096,'OP_EqCreateGhostCmd',545),(2834,1096,1096,'OP_EqCreateWidgetCmd',546),(2835,1096,1096,'OP_EqCreateSignWidgetCmd',547),(2836,1096,1096,'OP_EqDestroyGhostCmd',548),(2837,1096,1096,'OP_EqUpdateGhostCmd',549),(2838,1096,1096,'OP_EqSetControlGhostCmd',550),(2839,1096,1096,'OP_EqSetPOVGhostCmd',551),(2840,1096,1096,'OP_EqHearCombatCmd',552),(2841,1096,1096,'OP_EqHearSpellCastCmd',553),(2842,1096,1096,'OP_EqHearSpellInterruptCmd',556),(2843,1096,1096,'OP_EqHearSpellFizzleCmd',557),(2844,1096,1096,'OP_EqHearConsiderCmd',558),(2845,1096,1096,'OP_EqUpdateSubClassesCmd',559),(2846,1096,1096,'OP_EqCreateListBoxCmd',560),(2847,1096,1096,'OP_EqSetDebugPathPointsCmd',561),(2848,1096,1096,'OP_EqCannedEmoteCmd',563),(2849,1096,1096,'OP_EqStateCmd',564),(2850,1096,1096,'OP_EqPlaySoundCmd',565),(2851,1096,1096,'OP_EqPlaySound3DCmd',566),(2852,1096,1096,'OP_EqPlayVoiceCmd',567),(2853,1096,1096,'OP_EqHearDrowningCmd',568),(2854,1096,1096,'OP_EqHearDeathCmd',569),(2855,1096,1096,'OP_EqGroupMemberRemovedCmd',570),(2856,1096,1096,'OP_EqHearChainEffectCmd',571),(2857,1096,1096,'OP_EqReceiveOfferCmd',572),(2858,1096,1096,'OP_EqInspectPCResultsCmd',573),(2859,1096,1096,'OP_EqDrawablePathGraphCmd',574),(2860,1096,1096,'OP_EqDialogOpenCmd',575),(2861,1096,1096,'OP_EqDialogCloseCmd',576),(2862,1096,1096,'OP_EqFactionUpdateCmd',577),(2863,1096,1096,'OP_EqCollectionUpdateCmd',578),(2864,1096,1096,'OP_EqCollectionFilterCmd',579),(2865,1096,1096,'OP_EqCollectionItemCmd',580),(2866,1096,1096,'OP_EqQuestJournalUpdateCmd',581),(2867,1096,1096,'OP_EqQuestJournalReplyCmd',583),(2868,1096,1096,'OP_EqQuestGroupCmd',584),(2869,1096,1096,'OP_EqUpdateMerchantCmd',585),(2870,1096,1096,'OP_EqUpdateStoreCmd',586),(2871,1096,1096,'OP_EqUpdatePlayerTradeCmd',587),(2872,1096,1096,'OP_EqHelpPathCmd',588),(2873,1096,1096,'OP_EqHelpPathClearCmd',589),(2874,1096,1096,'OP_EqUpdateBankCmd',590),(2875,1096,1096,'OP_EqExamineInfoCmd',591),(2876,1096,1096,'OP_EqCloseWindowCmd',592),(2877,1096,1096,'OP_EqUpdateLootCmd',593),(2878,1096,1096,'OP_EqJunctionListCmd',594),(2879,1096,1096,'OP_EqShowDeathWindowCmd',595),(2880,1096,1096,'OP_EqDisplaySpellFailCmd',596),(2881,1096,1096,'OP_EqSpellCastStartCmd',597),(2882,1096,1096,'OP_EqSpellCastEndCmd',598),(2883,1096,1096,'OP_EqResurrectedCmd',599),(2884,1096,1096,'OP_EqChoiceWinCmd',600),(2885,1096,1096,'OP_EqSetDefaultVerbCmd',601),(2886,1096,1096,'OP_EqInstructionWindowCmd',603),(2887,1096,1096,'OP_EqInstructionWindowCloseCmd',604),(2888,1096,1096,'OP_EqInstructionWindowGoalCmd',605),(2889,1096,1096,'OP_EqInstructionWindowTaskCmd',606),(2890,1096,1096,'OP_EqEnableGameEventCmd',607),(2891,1096,1096,'OP_EqShowWindowCmd',608),(2892,1096,1096,'OP_EqEnableWindowCmd',609),(2893,1096,1096,'OP_EqFlashWindowCmd',610),(2894,1096,1096,'OP_EqHearPlayFlavorCmd',611),(2895,1096,1096,'OP_EqUpdateSignWidgetCmd',613),(2896,1096,1096,'OP_EqDebugPVDCmd',614),(2897,1096,1096,'OP_EqShowBookCmd',615),(2898,1096,1096,'OP_EqQuestionnaireCmd',616),(2899,1096,1096,'OP_EqGetProbsCmd',617),(2900,1096,1096,'OP_EqHearHealCmd',618),(2901,1096,1096,'OP_EqChatChannelUpdateCmd',619),(2902,1096,1096,'OP_EqWhoChannelQueryReplyCmd',620),(2903,1096,1096,'OP_EqAvailWorldChannelsCmd',621),(2904,1096,1096,'OP_EqUpdateTargetCmd',622),(2905,1096,1096,'OP_EqConsignmentItemsCmd',624),(2906,1096,1096,'OP_EqStartBrokerCmd',626),(2907,1096,1096,'OP_EqMapExplorationCmd',627),(2908,1096,1096,'OP_EqStoreLogCmd',628),(2909,1096,1096,'OP_EqSpellMoveToRangeAndRetryCmd',629),(2910,1096,1096,'OP_EqUpdatePlayerMailCmd',630),(2911,1096,1096,'OP_EqArenaResultsCmd',631),(2912,1096,1096,'OP_EqGuildBankEventActionCmd',632),(2913,1096,1096,'OP_EqGuildBankExamineInfoCmd',633),(2914,1096,1096,'OP_EqHearSpellNoLandCmd',634),(2915,1096,1096,'OP_GuildList',637),(2916,1096,1096,'OP_Lottery',638),(2917,1096,1096,'OP_GuildRecruitingMemberInfo',639),(2918,1096,1096,'OP_GuildRecruiting',640),(2919,1096,1096,'OP_GuildRecruitingDetails',641),(2920,1096,1096,'OP_GuildRecruitingImage',642),(2921,1096,1096,'OP_TradeskillList',659),(2922,1096,1096,'OP_PointOfInterest',663),(2923,1096,1096,'OP_TraitsList',665),(2924,1096,1096,'OP_RecipeList',674),(2925,1096,1096,'OP_CharacterAchievements',677),(2926,1096,1096,'OP_AddClientToGroupMsg',999),(2927,1096,1096,'OP_AddGroupToGroupMsg',1000),(2928,1096,1096,'OP_WSWeatherUpdateMsg',1001),(2929,1096,1096,'OP_SkillSlotMapping',1002),(2930,1096,1096,'OP_GuildKickMsg',1003),(2931,1096,1096,'OP_PurchaseConsignmentResponseMsg',1004),(2932,1096,1096,'OP_ProcessScriptMsg',1005),(2933,1096,1096,'OP_ProcessWorkspaceMsg',1006),(2934,1096,1096,'OP_QuickbarAddMsg',1007),(2935,0,0,'OP_BagOptions',999),(2936,839,844,'OP_BagOptions',999),(2937,908,927,'OP_BagOptions',999),(2938,1008,1011,'OP_BagOptions',999),(2939,1045,1046,'OP_BagOptions',999),(2940,1096,1096,'OP_BagOptions',999),(2941,0,0,'OP_AchievementUpdateMsg',999),(2942,839,844,'OP_AchievementUpdateMsg',999),(2943,908,927,'OP_AchievementUpdateMsg',999),(2944,1008,1011,'OP_AchievementUpdateMsg',999),(2945,1045,1046,'OP_AchievementUpdateMsg',999),(2946,1096,1096,'OP_AchievementUpdateMsg',678),(2947,1096,1096,'OP_PetOptions',187),(2948,1045,1046,'OP_PetOptions',999),(2949,1008,1011,'OP_PetOptions',999),(2950,908,927,'OP_PetOptions',999),(2951,839,844,'OP_PetOptions',999),(2952,0,0,'OP_PetOptions',999),(2953,1193,1195,'OP_LoginRequestMsg',0),(2954,1193,1195,'OP_LoginByNumRequestMsg',1),(2955,1193,1195,'OP_WSLoginRequestMsg',2),(2956,1193,1195,'OP_ESLoginRequestMsg',3),(2957,1193,1195,'OP_LoginReplyMsg',4),(2958,1193,1195,'OP_WSStatusReplyMsg',5),(2959,1193,1195,'OP_WorldStatusChangeMsg',6),(2960,1193,1195,'OP_AllWSDescRequestMsg',7),(2961,1193,1195,'OP_WorldListMsg',8),(2962,1193,1195,'OP_AllCharactersDescRequestMsg',9),(2963,1193,1195,'OP_AllCharactersDescReplyMsg',10),(2964,1193,1195,'OP_CreateCharacterRequestMsg',11),(2965,1193,1195,'OP_CreateCharacterReplyMsg',12),(2966,1193,1195,'OP_WSCreateCharacterRequestMsg',13),(2967,1193,1195,'OP_WSCreateCharacterReplyMsg',14),(2968,1193,1195,'OP_ReskinCharacterRequestMsg',15),(2969,1193,1195,'OP_DeleteCharacterRequestMsg',16),(2970,1193,1195,'OP_DeleteCharacterReplyMsg',17),(2971,1193,1195,'OP_PlayCharacterRequestMsg',18),(2972,1193,1195,'OP_PlayCharacterReplyMsg',19),(2973,1193,1195,'OP_ExpectClientAsCharacterReplyMs',22),(2974,1193,1195,'OP_ServerPlayCharacterRequestMsg',23),(2975,1193,1195,'OP_ServerPlayCharacterReplyMsg',24),(2976,1193,1195,'OP_ESInitMsg',25),(2977,1193,1195,'OP_ESReadyForClientsMsg',26),(2978,1193,1195,'OP_CreateZoneInstanceMsg',29),(2979,1193,1195,'OP_ZoneInstanceCreateReplyMsg',30),(2980,1193,1195,'OP_ZoneInstanceDestroyedMsg',31),(2981,1193,1195,'OP_ExpectClientAsCharacterRequest',32),(2982,1193,1195,'OP_ZoneInfoMsg',33),(2983,1193,1195,'OP_DoneLoadingZoneResourcesMsg',34),(2984,1193,1195,'OP_DoneSendingInitialEntitiesMsg',35),(2985,1193,1195,'OP_DoneLoadingEntityResourcesMsg',36),(2986,1193,1195,'OP_PredictionUpdateMsg',37),(2987,1193,1195,'OP_UpdatePositionMsg',39),(2988,1193,1195,'OP_SetRemoteCmdsMsg',41),(2989,1193,1195,'OP_RemoteCmdMsg',42),(2990,1193,1195,'OP_GameWorldTimeMsg',43),(2991,1193,1195,'OP_MOTDMsg',44),(2992,1193,1195,'OP_ZoneMOTDMsg',45),(2993,1193,1195,'OP_AvatarCreatedMsg',46),(2994,1193,1195,'OP_AvatarDestroyedMsg',47),(2995,1193,1195,'OP_RequestCampMsg',50),(2996,1193,1195,'OP_CampStartedMsg',51),(2997,1193,1195,'OP_CampAbortedMsg',52),(2998,1193,1195,'OP_WhoQueryRequestMsg',53),(2999,1193,1195,'OP_WhoQueryReplyMsg',54),(3000,1193,1195,'OP_MonitorReplyMsg',55),(3001,1193,1195,'OP_MonitorCharacterListMsg',56),(3002,1193,1195,'OP_MonitorCharacterListRequestMsg',57),(3003,1193,1195,'OP_ClientCmdMsg',58),(3004,1193,1195,'OP_DispatchESMsg',59),(3005,1193,1195,'OP_DispatchClientCmdMsg',60),(3006,1193,1195,'OP_UpdateTargetMsg',61),(3007,1193,1195,'OP_UpdateTargetLocMsg',62),(3008,1193,1195,'OP_UpdateCharacterSheetMsg',63),(3009,1193,1195,'OP_CharacterPet',64),(3010,1193,1195,'OP_CharacterMerc',65),(3011,1193,1195,'OP_UpdateSpellBookMsg',66),(3012,1193,1195,'OP_UpdateInventoryMsg',68),(3013,1193,1195,'OP_AfterInvSpellUpdate',69),(3014,1193,1195,'OP_UpdateRecipeBookMsg',70),(3015,1193,1195,'OP_RequestRecipeDetailsMsg',71),(3016,1193,1195,'OP_RecipeDetailsMsg',72),(3017,1193,1195,'OP_UpdateSkillBookMsg',73),(3018,1193,1195,'OP_UpdateSkillsMsg',74),(3019,1193,1195,'OP_UpdateOpportunityMsg',75),(3020,1193,1195,'OP_ChangeZoneMsg',77),(3021,1193,1195,'OP_ClientTeleportRequestMsg',78),(3022,1193,1195,'OP_TeleportWithinZoneMsg',79),(3023,1193,1195,'OP_TeleportWithinZoneNoReloadMsg',80),(3024,1193,1195,'OP_MigrateClientToZoneRequestMsg',81),(3025,1193,1195,'OP_MigrateClientToZoneReplyMsg',82),(3026,1193,1195,'OP_ReadyToZoneMsg',84),(3027,1193,1195,'OP_RemoveClientFromGroupMsg',85),(3028,1193,1195,'OP_RemoveGroupFromGroupMsg',86),(3029,1193,1195,'OP_MakeGroupLeaderMsg',87),(3030,1193,1195,'OP_GroupCreatedMsg',88),(3031,1193,1195,'OP_GroupDestroyedMsg',89),(3032,1193,1195,'OP_GroupMemberAddedMsg',90),(3033,1193,1195,'OP_GroupMemberRemovedMsg',91),(3034,1193,1195,'OP_GroupRemovedFromGroupMsg',92),(3035,1193,1195,'OP_GroupLeaderChangedMsg',93),(3036,1193,1195,'OP_GroupResendOOZDataMsg',94),(3037,1193,1195,'OP_GroupSettingsChangedMsg',95),(3038,1193,1195,'OP_OutOfZoneMemberDataMsg',96),(3039,1193,1195,'OP_SendLatestRequestMsg',97),(3040,1193,1195,'OP_ClearDataMsg',98),(3041,1193,1195,'OP_SetSocialMsg',99),(3042,1193,1195,'OP_ESStatusMsg',100),(3043,1193,1195,'OP_ESZoneInstanceStatusMsg',101),(3044,1193,1195,'OP_ZonesStatusRequestMsg',102),(3045,1193,1195,'OP_ZonesStatusMsg',103),(3046,1193,1195,'OP_ESWeatherRequestMsg',104),(3047,1193,1195,'OP_ESWeatherRequestEndMsg',105),(3048,1193,1195,'OP_DialogSelectMsg',109),(3049,1193,1195,'OP_DialogCloseMsg',110),(3050,1193,1195,'OP_RemoveSpellEffectMsg',111),(3051,1193,1195,'OP_RemoveConcentrationMsg',112),(3052,1193,1195,'OP_QuestJournalOpenMsg',113),(3053,1193,1195,'OP_QuestJournalInspectMsg',114),(3054,1193,1195,'OP_QuestJournalSetVisibleMsg',115),(3055,1193,1195,'OP_QuestJournalWaypointMsg',116),(3056,1193,1195,'OP_CreateGuildRequestMsg',119),(3057,1193,1195,'OP_CreateGuildReplyMsg',120),(3058,1193,1195,'OP_GuildsayMsg',121),(3059,1193,1195,'OP_FellowshipExpMsg',122),(3060,1193,1195,'OP_DeleteGuildMsg',123),(3061,1193,1195,'OP_GuildUpdateMsg',124),(3062,1193,1195,'OP_ConsignmentCloseStoreMsg',125),(3063,1193,1195,'OP_ConsignItemRequestMsg',126),(3064,1193,1195,'OP_ConsignItemResponseMsg',127),(3065,1193,1195,'OP_PurchaseConsignmentRequestMsg',128),(3066,1193,1195,'OP_LikeOption',135),(3067,1193,1195,'OP_PublishHouse',137),(3068,1193,1195,'OP_PlayerMadeInstacnesScreen',138),(3069,1193,1195,'OP_PlayerMadeInstances',139),(3070,1193,1195,'OP_HouseDeletedRemotelyMsg',140),(3071,1193,1195,'OP_UpdateHouseDataMsg',141),(3072,1193,1195,'OP_UpdateHouseAccessDataMsg',142),(3073,1193,1195,'OP_PlayerHouseBaseScreenMsg',143),(3074,1193,1195,'OP_PlayerHousePurchaseScreenMsg',144),(3075,1193,1195,'OP_PlayerHouseAccessUpdateMsg',145),(3076,1193,1195,'OP_PlayerHouseDisplayStatusMsg',146),(3077,1193,1195,'OP_PlayerHouseCloseUIMsg',147),(3078,1193,1195,'OP_BuyPlayerHouseMsg',148),(3079,1193,1195,'OP_BuyPlayerHouseTintMsg',149),(3080,1193,1195,'OP_CollectAllHouseItemsMsg',150),(3081,1193,1195,'OP_RelinquishHouseMsg',151),(3082,1193,1195,'OP_EnterHouseMsg',152),(3083,1193,1195,'OP_ExitHouseMsg',153),(3084,1193,1195,'OP_HouseDefaultAccessSetMsg',154),(3085,1193,1195,'OP_HouseAccessSetMsg',155),(3086,1193,1195,'OP_HouseAccessRemoveMsg',156),(3087,1193,1195,'OP_PayHouseUpkeepMsg',157),(3088,1193,1195,'OP_MoveableObjectPlacementCriteri',158),(3089,1193,1195,'OP_EnterMoveObjectModeMsg',159),(3090,1193,1195,'OP_PositionMoveableObject',160),(3091,1193,1195,'OP_CancelMoveObjectModeMsg',161),(3092,1193,1195,'OP_ShaderCustomizationMsg',162),(3093,1193,1195,'OP_ReplaceableSubMeshesMsg',163),(3094,1193,1195,'OP_HouseCustomizationScreenMsg',164),(3095,1193,1195,'OP_CustomizationPurchaseRequestMs',165),(3096,1193,1195,'OP_CustomizationSetRequestMsg',166),(3097,1193,1195,'OP_CustomizationReplyMsg',167),(3098,1193,1195,'OP_TintWidgetsMsg',168),(3099,1193,1195,'OP_ExamineConsignmentRequestMsg',169),(3100,1193,1195,'OP_ExamineConsignmentResponseMsg',170),(3101,1193,1195,'OP_UISettingsResponseMsg',171),(3102,1193,1195,'OP_UIResetMsg',172),(3103,1193,1195,'OP_KeymapLoadMsg',173),(3104,1193,1195,'OP_KeymapNoneMsg',174),(3105,1193,1195,'OP_KeymapDataMsg',175),(3106,1193,1195,'OP_KeymapSaveMsg',176),(3107,1193,1195,'OP_DispatchSpellCmdMsg',177),(3108,1193,1195,'OP_EntityVerbsRequestMsg',178),(3109,1193,1195,'OP_EntityVerbsReplyMsg',179),(3110,1193,1195,'OP_EntityVerbsVerbMsg',180),(3111,1193,1195,'OP_ChatRelationshipUpdateMsg',182),(3112,1193,1195,'OP_LootItemsRequestMsg',183),(3113,1193,1195,'OP_StoppedLootingMsg',184),(3114,1193,1195,'OP_SitMsg',185),(3115,1193,1195,'OP_StandMsg',186),(3116,1193,1195,'OP_SatMsg',187),(3117,1193,1195,'OP_StoodMsg',188),(3118,1193,1195,'OP_ClearForTakeOffMsg',189),(3119,1193,1195,'OP_ReadyForTakeOffMsg',190),(3120,1193,1195,'OP_ShowIllusionsMsg',191),(3121,1193,1195,'OP_HideIllusionsMsg',192),(3122,1193,1195,'OP_ExamineItemRequestMsg',193),(3123,1193,1195,'OP_ReadBookPageMsg',194),(3124,1193,1195,'OP_DefaultGroupOptionsRequestMsg',195),(3125,1193,1195,'OP_DefaultGroupOptionsMsg',196),(3126,1193,1195,'OP_GroupOptionsMsg',197),(3127,1193,1195,'OP_DisplayGroupOptionsScreenMsg',198),(3128,1193,1195,'OP_PetOptions',199),(3129,1193,1195,'OP_DisplayInnVisitScreenMsg',200),(3130,1193,1195,'OP_DumpSchedulerMsg',201),(3131,1193,1195,'OP_LSCheckAcctLockMsg',202),(3132,1193,1195,'OP_WSAcctLockStatusMsg',203),(3133,1193,1195,'OP_RequestHelpRepathMsg',204),(3134,1193,1195,'OP_RequestTargetLocMsg',205),(3135,1193,1195,'OP_UpdateMotdMsg',206),(3136,1193,1195,'OP_DestUpdateReq',208),(3137,1193,1195,'OP_PerformPlayerKnockbackMsg',211),(3138,1193,1195,'OP_PerformCameraShakeMsg',212),(3139,1193,1195,'OP_PopulateSkillMapsMsg',213),(3140,1193,1195,'OP_CancelledFeignMsg',214),(3141,1193,1195,'OP_SysClient',216),(3142,1193,1195,'OP_ShowCreateFromRecipeUIMsg',217),(3143,1193,1195,'OP_CancelCreateFromRecipeMsg',218),(3144,1193,1195,'OP_BeginItemCreationMsg',219),(3145,1193,1195,'OP_StopItemCreationMsg',220),(3146,1193,1195,'OP_ShowItemCreationProcessUIMsg',221),(3147,1193,1195,'OP_UpdateItemCreationProcessUIMsg',222),(3148,1193,1195,'OP_DisplayTSEventReactionMsg',223),(3149,1193,1195,'OP_ShowRecipeBookMsg',224),(3150,1193,1195,'OP_KnowledgebaseRequestMsg',225),(3151,1193,1195,'OP_KnowledgebaseResponseMsg',226),(3152,1193,1195,'OP_CSTicketHeaderRequestMsg',227),(3153,1193,1195,'OP_CSTicketInfoMsg',228),(3154,1193,1195,'OP_CSTicketCommentRequestMsg',229),(3155,1193,1195,'OP_CSTicketCommentResponseMsg',230),(3156,1193,1195,'OP_CSTicketCreateMsg',231),(3157,1193,1195,'OP_CSTicketAddCommentMsg',232),(3158,1193,1195,'OP_CSTicketDeleteMsg',233),(3159,1193,1195,'OP_CSTicketChangeNotificationMsg',234),(3160,1193,1195,'OP_WorldDataUpdateMsg',235),(3161,1193,1195,'OP_KnownLanguagesMsg',236),(3162,1193,1195,'OP_LsRequestClientCrashLogMsg',237),(3163,1193,1195,'OP_LsClientBaselogReplyMsg',238),(3164,1193,1195,'OP_LsClientCrashlogReplyMsg',239),(3165,1193,1195,'OP_LsClientAlertlogReplyMsg',240),(3166,1193,1195,'OP_LsClientVerifylogReplyMsg',241),(3167,1193,1195,'OP_ClientTeleportToLocationMsg',242),(3168,1193,1195,'OP_UpdateClientPredFlagsMsg',243),(3169,1193,1195,'OP_ChangeServerControlFlagMsg',244),(3170,1193,1195,'OP_CSToolsRequestMsg',245),(3171,1193,1195,'OP_CSToolsResponseMsg',246),(3172,1193,1195,'OP_AddSocialStructureStandingMsg',247),(3173,1193,1195,'OP_CreateBoatTransportsMsg',248),(3174,1193,1195,'OP_PositionBoatTransportMsg',249),(3175,1193,1195,'OP_MigrateBoatTransportMsg',250),(3176,1193,1195,'OP_MigrateBoatTransportReplyMsg',251),(3177,1193,1195,'OP_DisplayDebugNLLPointsMsg',252),(3178,1193,1195,'OP_ExamineInfoRequestMsg',253),(3179,1193,1195,'OP_QuickbarInitMsg',254),(3180,1193,1195,'OP_QuickbarUpdateMsg',255),(3181,1193,1195,'OP_MacroInitMsg',256),(3182,1193,1195,'OP_MacroUpdateMsg',257),(3183,1193,1195,'OP_QuestionnaireMsg',258),(3184,1193,1195,'OP_LevelChangedMsg',259),(3185,1193,1195,'OP_SpellGainedMsg',260),(3186,1193,1195,'OP_EncounterBrokenMsg',261),(3187,1193,1195,'OP_OnscreenMsgMsg',262),(3188,1193,1195,'OP_DisplayWarningMsg',263),(3189,1193,1195,'OP_ModifyGuildMsg',264),(3190,1193,1195,'OP_GuildEventMsg',265),(3191,1193,1195,'OP_GuildEventAddMsg',266),(3192,1193,1195,'OP_GuildEventActionMsg',267),(3193,1193,1195,'OP_GuildEventListMsg',268),(3194,1193,1195,'OP_RequestGuildEventDetailsMsg',269),(3195,1193,1195,'OP_GuildEventDetailsMsg',270),(3196,1193,1195,'OP_RequestGuildInfoMsg',271),(3197,1193,1195,'OP_GuildBankActionMsg',272),(3198,1193,1195,'OP_GuildBankActionResponseMsg',273),(3199,1193,1195,'OP_GuildBankItemDetailsRequestMsg',274),(3200,1193,1195,'OP_GuildBankItemDetailsResponseMs',275),(3201,1193,1195,'OP_GuildBankUpdateMsg',276),(3202,1193,1195,'OP_GuildBankEventListMsg',277),(3203,1193,1195,'OP_RequestGuildBankEventDetailsMs',278),(3204,1193,1195,'OP_RewardPackMsg',279),(3205,1193,1195,'OP_RenameGuildMsg',280),(3206,1193,1195,'OP_ZoneToFriendRequestMsg',281),(3207,1193,1195,'OP_ZoneToFriendReplyMsg',282),(3208,1193,1195,'OP_ChatCreateChannelMsg',283),(3209,1193,1195,'OP_ChatJoinChannelMsg',284),(3210,1193,1195,'OP_ChatWhoChannelMsg',285),(3211,1193,1195,'OP_ChatLeaveChannelMsg',286),(3212,1193,1195,'OP_ChatTellChannelMsg',287),(3213,1193,1195,'OP_ChatTellUserMsg',288),(3214,1193,1195,'OP_ChatToggleFriendMsg',289),(3215,1193,1195,'OP_BrokerAddBag',290),(3216,1193,1195,'OP_BrokerRemoveBag',291),(3217,1193,1195,'OP_ChatToggleIgnoreMsg',292),(3218,1193,1195,'OP_ChatSendFriendsMsg',293),(3219,1193,1195,'OP_ChatSendIgnoresMsg',294),(3220,1193,1195,'OP_QuestReward',318),(3221,1193,1195,'OP_ChatFiltersMsg',333),(3222,1193,1195,'OP_MailGetMessageMsg',336),(3223,1193,1195,'OP_MailSendMessageMsg',337),(3224,1193,1195,'OP_MailDeleteMessageMsg',338),(3225,1193,1195,'OP_MailGetHeadersReplyMsg',339),(3226,1193,1195,'OP_MailGetMessageReplyMsg',340),(3227,1193,1195,'OP_MailSendMessageReplyMsg',341),(3228,1193,1195,'OP_MailCommitSendMessageMsg',342),(3229,1193,1195,'OP_MailSendSystemMessageMsg',343),(3230,1193,1195,'OP_MailRemoveAttachFromMailMsg',344),(3231,1193,1195,'OP_WaypointRequestMsg',346),(3232,1193,1195,'OP_WaypointReplyMsg',347),(3233,1193,1195,'OP_WaypointSelectMsg',348),(3234,1193,1195,'OP_WaypointUpdateMsg',349),(3235,1193,1195,'OP_CharNameChangedMsg',350),(3236,1193,1195,'OP_ShowZoneTeleporterDestinations',351),(3237,1193,1195,'OP_SelectZoneTeleporterDestinatio',352),(3238,1193,1195,'OP_ReloadLocalizedTxtMsg',353),(3239,1193,1195,'OP_RequestGuildMembershipMsg',354),(3240,1193,1195,'OP_GuildMembershipResponseMsg',355),(3241,1193,1195,'OP_LeaveGuildNotifyMsg',356),(3242,1193,1195,'OP_JoinGuildNotifyMsg',357),(3243,1193,1195,'OP_AvatarUpdateMsg',358),(3244,1193,1195,'OP_BioUpdateMsg',360),(3245,1193,1195,'OP_InspectPlayerMsg',361),(3246,1193,1195,'OP_WSServerLockMsg',362),(3247,1193,1195,'OP_LSServerLockMsg',363),(3248,1193,1195,'OP_WSServerHideMsg',364),(3249,1193,1195,'OP_CsCategoryRequestMsg',365),(3250,1193,1195,'OP_CsCategoryResponseMsg',366),(3251,1193,1195,'OP_KnowledgeWindowSlotMappingMsg',367),(3252,1193,1195,'OP_AFKUpdateMsg',368),(3253,1193,1195,'OP_AnonUpdateMsg',369),(3254,1193,1195,'OP_UpdateActivePublicZonesMsg',370),(3255,1193,1195,'OP_UnknownNpcMsg',371),(3256,1193,1195,'OP_PromoFlagsDetailsMsg',372),(3257,1193,1195,'OP_ConsignViewCreateMsg',373),(3258,1193,1195,'OP_ConsignViewGetPageMsg',374),(3259,1193,1195,'OP_ConsignViewReleaseMsg',375),(3260,1193,1195,'OP_ConsignRemoveItemsMsg',376),(3261,1193,1195,'OP_UpdateDebugRadiiMsg',377),(3262,1193,1195,'OP_ReportMsg',378),(3263,1193,1195,'OP_UpdateRaidMsg',379),(3264,1193,1195,'OP_ConsignViewSortMsg',381),(3265,1193,1195,'OP_TitleUpdateMsg',382),(3266,1193,1195,'OP_ClientFellMsg',383),(3267,1193,1195,'OP_ClientInDeathRegionMsg',384),(3268,1193,1195,'OP_CampClientMsg',385),(3269,1193,1195,'OP_CSToolAccessResponseMsg',386),(3270,1193,1195,'OP_TrackingUpdateMsg',387),(3271,1193,1195,'OP_BeginTrackingMsg',388),(3272,1193,1195,'OP_StopTrackingMsg',389),(3273,1193,1195,'OP_GetAvatarAccessRequestForCSToo',391),(3274,1193,1195,'OP_AdvancementRequestMsg',392),(3275,1193,1195,'OP_MapFogDataInitMsg',393),(3276,1193,1195,'OP_MapFogDataUpdateMsg',394),(3277,1193,1195,'OP_CloseGroupInviteWindowMsg',395),(3278,1193,1195,'OP_UpdateGroupMemberDataMsg',396),(3279,1193,1195,'OP_WorldPingMsg',397),(3280,1193,1195,'OP_MoveLogUpdateMsg',388),(3281,1193,1195,'OP_OfferQuestMsg',399),(3282,1193,1195,'OP_WorldShutdownUpdateMsg',401),(3283,1193,1195,'OP_DisplayMailScreenMsg',402),(3284,1193,1195,'OP_ClientIdleBeginMsg',403),(3285,1193,1195,'OP_ClientIdleEndMsg',404),(3286,1193,1195,'OP_PurchaseConsignmentLoreCheckRe',405),(3287,1193,1195,'OP_NotifyApprenticeStoppedMentori',406),(3288,1193,1195,'OP_CorruptedClientMsg',407),(3289,1193,1195,'OP_WorldDataChangeMsg',408),(3290,1193,1195,'OP_MailEventNotificationMsg',409),(3291,1193,1195,'OP_RestartZoneMsg',410),(3292,1193,1195,'OP_FlightPathsMsg',411),(3293,1193,1195,'OP_CharacterLinkdeadMsg',412),(3294,1193,1195,'OP_CharTransferStartRequestMsg',413),(3295,1193,1195,'OP_CharTransferStartReplyMsg',414),(3296,1193,1195,'OP_CharTransferRequestMsg',415),(3297,1193,1195,'OP_CharTransferReplyMsg',416),(3298,1193,1195,'OP_CharTransferRollbackRequestMsg',417),(3299,1193,1195,'OP_CharTransferCommitRequestMsg',418),(3300,1193,1195,'OP_CharTransferRollbackReplyMsg',419),(3301,1193,1195,'OP_CharTransferCommitReplyMsg',420),(3302,1193,1195,'OP_GetCharacterSerializedRequestM',421),(3303,1193,1195,'OP_GetCharacterSerializedReplyMsg',422),(3304,1193,1195,'OP_CreateCharFromCBBRequestMsg',423),(3305,1193,1195,'OP_CreateCharFromCBBReplyMsg',424),(3306,1193,1195,'OP_HousingDataChangedMsg',425),(3307,1193,1195,'OP_HousingRestoreMsg',426),(3308,1193,1195,'OP_AuctionItem',427),(3309,1193,1195,'OP_AuctionItemReply',428),(3310,1193,1195,'OP_AuctionCoin',429),(3311,1193,1195,'OP_AuctionCoinReply',430),(3312,1193,1195,'OP_AuctionCharacter',431),(3313,1193,1195,'OP_AuctionCharacterReply',432),(3314,1193,1195,'OP_AuctionCommitMsg',433),(3315,1193,1195,'OP_AuctionAbortMsg',434),(3316,1193,1195,'OP_CharTransferValidateRequestMsg',435),(3317,1193,1195,'OP_CharTransferValidateReplyMsg',436),(3318,1193,1195,'OP_RaceRestrictionMsg',437),(3319,1193,1195,'OP_SetInstanceDisplayNameMsg',438),(3320,1193,1195,'OP_GetAuctionAssetIDMsg',439),(3321,1193,1195,'OP_GetAuctionAssetIDReplyMsg',440),(3322,1193,1195,'OP_ResendWorldChannelsMsg',441),(3323,1193,1195,'OP_DisplayExchangeScreenMsg',442),(3324,1193,1195,'OP_ArenaGameTypesMsg',443),(3325,1193,1195,'OP_AuditAuctionEventMsg',444),(3326,1193,1195,'OP_InviteRequestMsg',445),(3327,1193,1195,'OP_InviteResponseMsg',446),(3328,1193,1195,'OP_InviteTargetResponseMsg',447),(3329,1193,1195,'OP_InspectPlayerRequestMsg',448),(3330,1193,1195,'OP_DispatchMsg',449),(3331,1193,1195,'OP_DisplayEventMsg',450),(3332,1193,1195,'OP_PrePossessionMsg',451),(3333,1193,1195,'OP_PostPossessionMsg',452),(3334,1193,1195,'OP_ArenaCreate',454),(3335,1193,1195,'OP_ArenaList',455),(3336,1193,1195,'OP_ArenaWindow',463),(3337,1193,1195,'OP_HouseItemsList',481),(3338,1193,1195,'OP_CurrentPet',483),(3339,1193,1195,'OP_AdventureList',486),(3340,1193,1195,'OP_CancelSpellCast',487),(3341,1193,1195,'OP_UpdateTitleCmd',492),(3342,1193,1195,'OP_AttackAllowed',498),(3343,1193,1195,'OP_AttackNotAllowed',499),(3344,1193,1195,'OP_BagOptions',500),(3345,1193,1195,'OP_LFGGroupSearch',502),(3346,1193,1195,'OP_CharacterHousingList',505),(3347,1193,1195,'OP_DressingRoom',508),(3348,1193,1195,'OP_PlayLon',509),(3349,1193,1195,'OP_SkillInfoRequest',512),(3350,1193,1195,'OP_SkillInfoResponse',513),(3351,1193,1195,'OP_LFGUpdateMsg',516),(3352,1193,1195,'OP_BadLanguageFilter',517),(3353,1193,1195,'OP_VoiceChatChannel',518),(3354,1193,1195,'OP_MapRequest',519),(3355,1193,1195,'OP_MarketFundsUpdate',524),(3356,1193,1195,'OP_UIEvent',525),(3357,1193,1195,'OP_MarketAddFundsRequest',526),(3358,1193,1195,'OP_MarketAddFundsReply',527),(3359,1193,1195,'OP_MarketPurchase',529),(3360,1193,1195,'OP_MarketPlacePrices',530),(3361,1193,1195,'OP_MarketPlaceItems',533),(3362,1193,1195,'OP_RecipeBook',534),(3363,1193,1195,'OP_CreateCharacterDungeon',543),(3364,1193,1195,'OP_DungeonMakerEnter',544),(3365,1193,1195,'OP_DungeonMakerItemRequest',546),(3366,1193,1195,'OP_CharacterCreatedDungeons',547),(3367,1193,1195,'OP_DungeonMakerToolboxList',548),(3368,1193,1195,'OP_DungeonMakerUnknown',549),(3369,1193,1195,'OP_DungeonMakerUnknown1',550),(3370,1193,1195,'OP_PlayerPollPopup',552),(3371,1193,1195,'OP_PlayerPollAnswer',553),(3372,1193,1195,'OP_MentorPopup',554),(3373,1193,1195,'OP_LoadWelcomeWindow',556),(3374,1193,1195,'OP_OpenCharCust',557),(3375,1193,1195,'OP_SubmitCharCust',558),(3376,1193,1195,'OP_QueAllBgSolo',560),(3377,1193,1195,'OP_ZoneBgInstanceList',562),(3378,1193,1195,'OP_WorldTravelAvail',566),(3379,1193,1195,'OP_GarbagePacket',569),(3380,1193,1195,'OP_LoadCalendarEvents',570),(3381,1193,1195,'OP_VideoUploaded',571),(3382,1193,1195,'OP_SavageBarInitMsg',572),(3383,1193,1195,'OP_PetOptionsResponse',573),(3384,1193,1195,'OP_DungeonMakerItemResponse',574),(3385,1193,1195,'OP_CharacterMounts',576),(3386,1193,1195,'OP_EqBetaCopyRequest',585),(3387,1193,1195,'OP_EqHearChatCmd',586),(3388,1193,1195,'OP_EqDisplayTextCmd',587),(3389,1193,1195,'OP_EqCreateGhostCmd',588),(3390,1193,1195,'OP_EqCreateWidgetCmd',589),(3391,1193,1195,'OP_EqCreateSignWidgetCmd',590),(3392,1193,1195,'OP_EqDestroyGhostCmd',591),(3393,1193,1195,'OP_EqUpdateGhostCmd',592),(3394,1193,1195,'OP_EqSetControlGhostCmd',593),(3395,1193,1195,'OP_EqSetPOVGhostCmd',594),(3396,1193,1195,'OP_EqHearCombatCmd',595),(3397,1193,1195,'OP_EqHearSpellCastCmd',596),(3398,1193,1195,'OP_EQHearProcCmd',597),(3399,1193,1195,'OP_EQHearResEffectCmd',598),(3400,1193,1195,'OP_EqHearSpellInterruptCmd',599),(3401,1193,1195,'OP_EqHearSpellFizzleCmd',600),(3402,1193,1195,'OP_EqHearConsiderCmd',601),(3403,1193,1195,'OP_EqUpdateSubClassesCmd',602),(3404,1193,1195,'OP_EqCreateListBoxCmd',603),(3405,1193,1195,'OP_EqSetDebugPathPointsCmd',604),(3406,1193,1195,'OP_EqCannedEmoteCmd',606),(3407,1193,1195,'OP_EqStateCmd',607),(3408,1193,1195,'OP_EqPlaySoundCmd',608),(3409,1193,1195,'OP_EqPlaySound3DCmd',609),(3410,1193,1195,'OP_EqPlayVoiceCmd',610),(3411,1193,1195,'OP_EqHearDrowningCmd',611),(3412,1193,1195,'OP_EqHearDeathCmd',612),(3413,1193,1195,'OP_EqGroupMemberRemovedCmd',613),(3414,1193,1195,'OP_EqHearChainEffectCmd',614),(3415,1193,1195,'OP_EqReceiveOfferCmd',615),(3416,1193,1195,'OP_EqInspectPCResultsCmd',616),(3417,1193,1195,'OP_EqDrawablePathGraphCmd',617),(3418,1193,1195,'OP_EqDialogOpenCmd',618),(3419,1193,1195,'OP_EqDialogCloseCmd',619),(3420,1193,1195,'OP_EqFactionUpdateCmd',620),(3421,1193,1195,'OP_EqCollectionUpdateCmd',621),(3422,1193,1195,'OP_EqCollectionFilterCmd',622),(3423,1193,1195,'OP_EqCollectionItemCmd',623),(3424,1193,1195,'OP_EqQuestJournalUpdateCmd',624),(3425,1193,1195,'OP_EqMentoring',625),(3426,1193,1195,'OP_EqQuestJournalReplyCmd',626),(3427,1193,1195,'OP_EqQuestGroupCmd',627),(3428,1193,1195,'OP_EqUpdateMerchantCmd',628),(3429,1193,1195,'OP_EqUpdateStoreCmd',629),(3430,1193,1195,'OP_EqUpdatePlayerTradeCmd',630),(3431,1193,1195,'OP_EqHelpPathCmd',631),(3432,1193,1195,'OP_EqHelpPathClearCmd',632),(3433,1193,1195,'OP_EqUpdateBankCmd',633),(3434,1193,1195,'OP_EqExamineInfoCmd',634),(3435,1193,1195,'OP_EqCloseWindowCmd',635),(3436,1193,1195,'OP_EqUpdateLootCmd',636),(3437,1193,1195,'OP_EqJunctionListCmd',637),(3438,1193,1195,'OP_EqShowDeathWindowCmd',638),(3439,1193,1195,'OP_EqDisplaySpellFailCmd',639),(3440,1193,1195,'OP_EqSpellCastStartCmd',640),(3441,1193,1195,'OP_EqSpellCastEndCmd',641),(3442,1193,1195,'OP_EqResurrectedCmd',642),(3443,1193,1195,'OP_EqChoiceWinCmd',643),(3444,1193,1195,'OP_EqSetDefaultVerbCmd',644),(3445,1193,1195,'OP_EqInstructionWindowCmd',645),(3446,1193,1195,'OP_EqInstructionWindowCloseCmd',646),(3447,1193,1195,'OP_EqInstructionWindowGoalCmd',647),(3448,1193,1195,'OP_EqInstructionWindowTaskCmd',648),(3449,1193,1195,'OP_EqEnableGameEventCmd',649),(3450,1193,1195,'OP_EqShowWindowCmd',650),(3451,1193,1195,'OP_EqEnableWindowCmd',651),(3452,1193,1195,'OP_EqFlashWindowCmd',652),(3453,1193,1195,'OP_EqHearPlayFlavorCmd',654),(3454,1193,1195,'OP_EqUpdateSignWidgetCmd',655),(3455,1193,1195,'OP_EqDebugPVDCmd',656),(3456,1193,1195,'OP_EqShowBookCmd',657),(3457,1193,1195,'OP_EqQuestionnaireCmd',658),(3458,1193,1195,'OP_EqGetProbsCmd',660),(3459,1193,1195,'OP_EqHearHealCmd',661),(3460,1193,1195,'OP_EqChatChannelUpdateCmd',662),(3461,1193,1195,'OP_EqWhoChannelQueryReplyCmd',663),(3462,1193,1195,'OP_EqAvailWorldChannelsCmd',664),(3463,1193,1195,'OP_EqUpdateTargetCmd',665),(3464,1193,1195,'OP_BrokerSellList',666),(3465,1193,1195,'OP_EqConsignmentItemsCmd',667),(3466,1193,1195,'OP_EqStartBrokerCmd',669),(3467,1193,1195,'OP_EqMapExplorationCmd',670),(3468,1193,1195,'OP_EqStoreLogCmd',671),(3469,1193,1195,'OP_EqSpellMoveToRangeAndRetryCmd',672),(3470,1193,1195,'OP_EqUpdatePlayerMailCmd',673),(3471,1193,1195,'OP_GuildStatusUpdate',676),(3472,1193,1195,'OP_EqArenaResultsCmd',677),(3473,1193,1195,'OP_EqGuildBankEventActionCmd',678),(3474,1193,1195,'OP_EqGuildBankExamineInfoCmd',679),(3475,1193,1195,'OP_EqHearSpellNoLandCmd',680),(3476,1193,1195,'OP_Lottery',681),(3477,1193,1195,'OP_GuildRecruitingMemberInfo',682),(3478,1193,1195,'OP_GuildRecruiting',683),(3479,1193,1195,'OP_GuildRecruitingDetails',684),(3480,1193,1195,'OP_GuildRecruitingImage',685),(3481,1193,1195,'OP_TradeskillList',703),(3482,1193,1195,'OP_CharRenamed',687),(3483,1193,1195,'OP_UseAdornment',697),(3484,1193,1195,'OP_ExpPurchWindow',703),(3485,1193,1195,'OP_PointOfInterest',707),(3486,1193,1195,'OP_PointOfInterest2',708),(3487,1193,1195,'OP_TraitsList',709),(3488,1193,1195,'OP_CustomizeHouseDisplay',712),(3489,1193,1195,'OP_VoiceChatServer',713),(3490,1193,1195,'OP_SupplyDepot',717),(3491,1193,1195,'OP_EQHearThreatCmd',718),(3492,1193,1195,'OP_RecipeList',719),(3493,1193,1195,'OP_Research',720),(3494,1193,1195,'OP_CharacterCurrency',721),(3495,1193,1195,'OP_CharacterAchievements',722),(3496,1193,1195,'OP_AchievementUpdateMsg',723),(3497,1193,1195,'OP_EQHearDispellCmd',724),(3498,1193,1195,'OP_JournalQuestStoryline',725),(3499,1193,1195,'OP_DungeonPlayAsAvatarList',726),(3500,1193,1195,'OP_DungeonPlayAsAvatarSelected',727),(3501,1193,1195,'OP_MercHireWindow',728),(3502,1193,1195,'OP_MercUnknown',729),(3503,1193,1195,'OP_Unknown',746),(3504,1198,1199,'OP_LoginRequestMsg',0),(3505,1198,1199,'OP_LoginByNumRequestMsg',1),(3506,1198,1199,'OP_WSLoginRequestMsg',2),(3507,1198,1199,'OP_ESLoginRequestMsg',3),(3508,1198,1199,'OP_LoginReplyMsg',4),(3509,1198,1199,'OP_WSStatusReplyMsg',5),(3510,1198,1199,'OP_WorldStatusChangeMsg',6),(3511,1198,1199,'OP_AllWSDescRequestMsg',7),(3512,1198,1199,'OP_WorldListMsg',8),(3513,1198,1199,'OP_AllCharactersDescRequestMsg',9),(3514,1198,1199,'OP_AllCharactersDescReplyMsg',10),(3515,1198,1199,'OP_CreateCharacterRequestMsg',11),(3516,1198,1199,'OP_CreateCharacterReplyMsg',12),(3517,1198,1199,'OP_WSCreateCharacterRequestMsg',13),(3518,1198,1199,'OP_WSCreateCharacterReplyMsg',14),(3519,1198,1199,'OP_ReskinCharacterRequestMsg',15),(3520,1198,1199,'OP_DeleteCharacterRequestMsg',16),(3521,1198,1199,'OP_DeleteCharacterReplyMsg',17),(3522,1198,1199,'OP_PlayCharacterRequestMsg',18),(3523,1198,1199,'OP_PlayCharacterReplyMsg',19),(3524,1198,1199,'OP_ExpectClientAsCharacterReplyMs',22),(3525,1198,1199,'OP_ServerPlayCharacterRequestMsg',23),(3526,1198,1199,'OP_ServerPlayCharacterReplyMsg',24),(3527,1198,1199,'OP_ESInitMsg',25),(3528,1198,1199,'OP_ESReadyForClientsMsg',26),(3529,1198,1199,'OP_CreateZoneInstanceMsg',29),(3530,1198,1199,'OP_ZoneInstanceCreateReplyMsg',30),(3531,1198,1199,'OP_ZoneInstanceDestroyedMsg',31),(3532,1198,1199,'OP_ExpectClientAsCharacterRequest',32),(3533,1198,1199,'OP_ZoneInfoMsg',33),(3534,1198,1199,'OP_DoneLoadingZoneResourcesMsg',34),(3535,1198,1199,'OP_DoneSendingInitialEntitiesMsg',35),(3536,1198,1199,'OP_DoneLoadingEntityResourcesMsg',36),(3537,1198,1199,'OP_PredictionUpdateMsg',37),(3538,1198,1199,'OP_UpdatePositionMsg',39),(3539,1198,1199,'OP_SetRemoteCmdsMsg',41),(3540,1198,1199,'OP_RemoteCmdMsg',42),(3541,1198,1199,'OP_GameWorldTimeMsg',43),(3542,1198,1199,'OP_MOTDMsg',44),(3543,1198,1199,'OP_ZoneMOTDMsg',45),(3544,1198,1199,'OP_AvatarCreatedMsg',46),(3545,1198,1199,'OP_AvatarDestroyedMsg',47),(3546,1198,1199,'OP_RequestCampMsg',50),(3547,1198,1199,'OP_CampStartedMsg',51),(3548,1198,1199,'OP_CampAbortedMsg',52),(3549,1198,1199,'OP_WhoQueryRequestMsg',53),(3550,1198,1199,'OP_WhoQueryReplyMsg',54),(3551,1198,1199,'OP_MonitorReplyMsg',55),(3552,1198,1199,'OP_MonitorCharacterListMsg',56),(3553,1198,1199,'OP_MonitorCharacterListRequestMsg',57),(3554,1198,1199,'OP_ClientCmdMsg',58),(3555,1198,1199,'OP_DispatchESMsg',59),(3556,1198,1199,'OP_DispatchClientCmdMsg',60),(3557,1198,1199,'OP_UpdateTargetMsg',61),(3558,1198,1199,'OP_UpdateTargetLocMsg',62),(3559,1198,1199,'OP_UpdateCharacterSheetMsg',63),(3560,1198,1199,'OP_CharacterPet',64),(3561,1198,1199,'OP_CharacterMerc',65),(3562,1198,1199,'OP_UpdateSpellBookMsg',66),(3563,1198,1199,'OP_UpdateInventoryMsg',68),(3564,1198,1199,'OP_AfterInvSpellUpdate',69),(3565,1198,1199,'OP_UpdateRecipeBookMsg',70),(3566,1198,1199,'OP_RequestRecipeDetailsMsg',71),(3567,1198,1199,'OP_RecipeDetailsMsg',72),(3568,1198,1199,'OP_UpdateSkillBookMsg',73),(3569,1198,1199,'OP_UpdateSkillsMsg',74),(3570,1198,1199,'OP_UpdateOpportunityMsg',75),(3571,1198,1199,'OP_ChangeZoneMsg',77),(3572,1198,1199,'OP_ClientTeleportRequestMsg',78),(3573,1198,1199,'OP_TeleportWithinZoneMsg',79),(3574,1198,1199,'OP_TeleportWithinZoneNoReloadMsg',80),(3575,1198,1199,'OP_MigrateClientToZoneRequestMsg',81),(3576,1198,1199,'OP_MigrateClientToZoneReplyMsg',82),(3577,1198,1199,'OP_ReadyToZoneMsg',84),(3578,1198,1199,'OP_RemoveClientFromGroupMsg',85),(3579,1198,1199,'OP_RemoveGroupFromGroupMsg',86),(3580,1198,1199,'OP_MakeGroupLeaderMsg',87),(3581,1198,1199,'OP_GroupCreatedMsg',88),(3582,1198,1199,'OP_GroupDestroyedMsg',89),(3583,1198,1199,'OP_GroupMemberAddedMsg',90),(3584,1198,1199,'OP_GroupMemberRemovedMsg',91),(3585,1198,1199,'OP_GroupRemovedFromGroupMsg',92),(3586,1198,1199,'OP_GroupLeaderChangedMsg',93),(3587,1198,1199,'OP_GroupResendOOZDataMsg',94),(3588,1198,1199,'OP_GroupSettingsChangedMsg',95),(3589,1198,1199,'OP_OutOfZoneMemberDataMsg',96),(3590,1198,1199,'OP_SendLatestRequestMsg',97),(3591,1198,1199,'OP_ClearDataMsg',98),(3592,1198,1199,'OP_SetSocialMsg',99),(3593,1198,1199,'OP_ESStatusMsg',100),(3594,1198,1199,'OP_ESZoneInstanceStatusMsg',101),(3595,1198,1199,'OP_ZonesStatusRequestMsg',102),(3596,1198,1199,'OP_ZonesStatusMsg',103),(3597,1198,1199,'OP_ESWeatherRequestMsg',104),(3598,1198,1199,'OP_ESWeatherRequestEndMsg',105),(3599,1198,1199,'OP_DialogSelectMsg',109),(3600,1198,1199,'OP_DialogCloseMsg',110),(3601,1198,1199,'OP_RemoveSpellEffectMsg',111),(3602,1198,1199,'OP_RemoveConcentrationMsg',112),(3603,1198,1199,'OP_QuestJournalOpenMsg',113),(3604,1198,1199,'OP_QuestJournalInspectMsg',114),(3605,1198,1199,'OP_QuestJournalSetVisibleMsg',115),(3606,1198,1199,'OP_QuestJournalWaypointMsg',116),(3607,1198,1199,'OP_CreateGuildRequestMsg',119),(3608,1198,1199,'OP_CreateGuildReplyMsg',120),(3609,1198,1199,'OP_GuildsayMsg',121),(3610,1198,1199,'OP_FellowshipExpMsg',122),(3611,1198,1199,'OP_DeleteGuildMsg',123),(3612,1198,1199,'OP_GuildUpdateMsg',124),(3613,1198,1199,'OP_ConsignmentCloseStoreMsg',125),(3614,1198,1199,'OP_ConsignItemRequestMsg',126),(3615,1198,1199,'OP_ConsignItemResponseMsg',127),(3616,1198,1199,'OP_PurchaseConsignmentRequestMsg',128),(3617,1198,1199,'OP_LikeOption',135),(3618,1198,1199,'OP_PublishHouse',137),(3619,1198,1199,'OP_PlayerMadeInstacnesScreen',138),(3620,1198,1199,'OP_PlayerMadeInstances',139),(3621,1198,1199,'OP_HouseDeletedRemotelyMsg',140),(3622,1198,1199,'OP_UpdateHouseDataMsg',141),(3623,1198,1199,'OP_UpdateHouseAccessDataMsg',142),(3624,1198,1199,'OP_PlayerHouseBaseScreenMsg',143),(3625,1198,1199,'OP_PlayerHousePurchaseScreenMsg',144),(3626,1198,1199,'OP_PlayerHouseAccessUpdateMsg',145),(3627,1198,1199,'OP_PlayerHouseDisplayStatusMsg',146),(3628,1198,1199,'OP_PlayerHouseCloseUIMsg',147),(3629,1198,1199,'OP_BuyPlayerHouseMsg',148),(3630,1198,1199,'OP_BuyPlayerHouseTintMsg',149),(3631,1198,1199,'OP_CollectAllHouseItemsMsg',150),(3632,1198,1199,'OP_RelinquishHouseMsg',151),(3633,1198,1199,'OP_EnterHouseMsg',152),(3634,1198,1199,'OP_ExitHouseMsg',153),(3635,1198,1199,'OP_HouseDefaultAccessSetMsg',154),(3636,1198,1199,'OP_HouseAccessSetMsg',155),(3637,1198,1199,'OP_HouseAccessRemoveMsg',156),(3638,1198,1199,'OP_PayHouseUpkeepMsg',157),(3639,1198,1199,'OP_MoveableObjectPlacementCriteri',158),(3640,1198,1199,'OP_EnterMoveObjectModeMsg',159),(3641,1198,1199,'OP_PositionMoveableObject',160),(3642,1198,1199,'OP_CancelMoveObjectModeMsg',161),(3643,1198,1199,'OP_ShaderCustomizationMsg',162),(3644,1198,1199,'OP_ReplaceableSubMeshesMsg',163),(3645,1198,1199,'OP_HouseCustomizationScreenMsg',164),(3646,1198,1199,'OP_CustomizationPurchaseRequestMs',165),(3647,1198,1199,'OP_CustomizationSetRequestMsg',166),(3648,1198,1199,'OP_CustomizationReplyMsg',167),(3649,1198,1199,'OP_TintWidgetsMsg',168),(3650,1198,1199,'OP_ExamineConsignmentRequestMsg',169),(3651,1198,1199,'OP_ExamineConsignmentResponseMsg',170),(3652,1198,1199,'OP_UISettingsResponseMsg',171),(3653,1198,1199,'OP_UIResetMsg',172),(3654,1198,1199,'OP_KeymapLoadMsg',173),(3655,1198,1199,'OP_KeymapNoneMsg',174),(3656,1198,1199,'OP_KeymapDataMsg',175),(3657,1198,1199,'OP_KeymapSaveMsg',176),(3658,1198,1199,'OP_DispatchSpellCmdMsg',177),(3659,1198,1199,'OP_EntityVerbsRequestMsg',178),(3660,1198,1199,'OP_EntityVerbsReplyMsg',179),(3661,1198,1199,'OP_EntityVerbsVerbMsg',180),(3662,1198,1199,'OP_ChatRelationshipUpdateMsg',182),(3663,1198,1199,'OP_LootItemsRequestMsg',183),(3664,1198,1199,'OP_StoppedLootingMsg',184),(3665,1198,1199,'OP_SitMsg',185),(3666,1198,1199,'OP_StandMsg',186),(3667,1198,1199,'OP_SatMsg',187),(3668,1198,1199,'OP_StoodMsg',188),(3669,1198,1199,'OP_ClearForTakeOffMsg',189),(3670,1198,1199,'OP_ReadyForTakeOffMsg',190),(3671,1198,1199,'OP_ShowIllusionsMsg',191),(3672,1198,1199,'OP_HideIllusionsMsg',192),(3673,1198,1199,'OP_ExamineItemRequestMsg',193),(3674,1198,1199,'OP_ReadBookPageMsg',194),(3675,1198,1199,'OP_DefaultGroupOptionsRequestMsg',195),(3676,1198,1199,'OP_DefaultGroupOptionsMsg',196),(3677,1198,1199,'OP_GroupOptionsMsg',197),(3678,1198,1199,'OP_DisplayGroupOptionsScreenMsg',198),(3679,1198,1199,'OP_PetOptions',199),(3680,1198,1199,'OP_DisplayInnVisitScreenMsg',200),(3681,1198,1199,'OP_DumpSchedulerMsg',201),(3682,1198,1199,'OP_LSCheckAcctLockMsg',202),(3683,1198,1199,'OP_WSAcctLockStatusMsg',203),(3684,1198,1199,'OP_RequestHelpRepathMsg',204),(3685,1198,1199,'OP_RequestTargetLocMsg',205),(3686,1198,1199,'OP_UpdateMotdMsg',206),(3687,1198,1199,'OP_DestUpdateReq',208),(3688,1198,1199,'OP_PerformPlayerKnockbackMsg',211),(3689,1198,1199,'OP_PerformCameraShakeMsg',212),(3690,1198,1199,'OP_PopulateSkillMapsMsg',213),(3691,1198,1199,'OP_CancelledFeignMsg',214),(3692,1198,1199,'OP_SysClient',216),(3693,1198,1199,'OP_ShowCreateFromRecipeUIMsg',217),(3694,1198,1199,'OP_CancelCreateFromRecipeMsg',218),(3695,1198,1199,'OP_BeginItemCreationMsg',219),(3696,1198,1199,'OP_StopItemCreationMsg',220),(3697,1198,1199,'OP_ShowItemCreationProcessUIMsg',221),(3698,1198,1199,'OP_UpdateItemCreationProcessUIMsg',222),(3699,1198,1199,'OP_DisplayTSEventReactionMsg',223),(3700,1198,1199,'OP_ShowRecipeBookMsg',224),(3701,1198,1199,'OP_KnowledgebaseRequestMsg',225),(3702,1198,1199,'OP_KnowledgebaseResponseMsg',226),(3703,1198,1199,'OP_CSTicketHeaderRequestMsg',227),(3704,1198,1199,'OP_CSTicketInfoMsg',228),(3705,1198,1199,'OP_CSTicketCommentRequestMsg',229),(3706,1198,1199,'OP_CSTicketCommentResponseMsg',230),(3707,1198,1199,'OP_CSTicketCreateMsg',231),(3708,1198,1199,'OP_CSTicketAddCommentMsg',232),(3709,1198,1199,'OP_CSTicketDeleteMsg',233),(3710,1198,1199,'OP_CSTicketChangeNotificationMsg',234),(3711,1198,1199,'OP_WorldDataUpdateMsg',235),(3712,1198,1199,'OP_KnownLanguagesMsg',236),(3713,1198,1199,'OP_LsRequestClientCrashLogMsg',237),(3714,1198,1199,'OP_LsClientBaselogReplyMsg',238),(3715,1198,1199,'OP_LsClientCrashlogReplyMsg',239),(3716,1198,1199,'OP_LsClientAlertlogReplyMsg',240),(3717,1198,1199,'OP_LsClientVerifylogReplyMsg',241),(3718,1198,1199,'OP_ClientTeleportToLocationMsg',242),(3719,1198,1199,'OP_UpdateClientPredFlagsMsg',243),(3720,1198,1199,'OP_ChangeServerControlFlagMsg',244),(3721,1198,1199,'OP_CSToolsRequestMsg',245),(3722,1198,1199,'OP_CSToolsResponseMsg',246),(3723,1198,1199,'OP_AddSocialStructureStandingMsg',247),(3724,1198,1199,'OP_CreateBoatTransportsMsg',248),(3725,1198,1199,'OP_PositionBoatTransportMsg',249),(3726,1198,1199,'OP_MigrateBoatTransportMsg',250),(3727,1198,1199,'OP_MigrateBoatTransportReplyMsg',251),(3728,1198,1199,'OP_DisplayDebugNLLPointsMsg',252),(3729,1198,1199,'OP_ExamineInfoRequestMsg',253),(3730,1198,1199,'OP_QuickbarInitMsg',254),(3731,1198,1199,'OP_QuickbarUpdateMsg',255),(3732,1198,1199,'OP_MacroInitMsg',256),(3733,1198,1199,'OP_MacroUpdateMsg',257),(3734,1198,1199,'OP_QuestionnaireMsg',258),(3735,1198,1199,'OP_LevelChangedMsg',259),(3736,1198,1199,'OP_SpellGainedMsg',260),(3737,1198,1199,'OP_EncounterBrokenMsg',261),(3738,1198,1199,'OP_OnscreenMsgMsg',262),(3739,1198,1199,'OP_DisplayWarningMsg',263),(3740,1198,1199,'OP_ModifyGuildMsg',264),(3741,1198,1199,'OP_GuildEventMsg',265),(3742,1198,1199,'OP_GuildEventAddMsg',266),(3743,1198,1199,'OP_GuildEventActionMsg',267),(3744,1198,1199,'OP_GuildEventListMsg',268),(3745,1198,1199,'OP_RequestGuildEventDetailsMsg',269),(3746,1198,1199,'OP_GuildEventDetailsMsg',270),(3747,1198,1199,'OP_RequestGuildInfoMsg',271),(3748,1198,1199,'OP_GuildBankActionMsg',272),(3749,1198,1199,'OP_GuildBankActionResponseMsg',273),(3750,1198,1199,'OP_GuildBankItemDetailsRequestMsg',274),(3751,1198,1199,'OP_GuildBankItemDetailsResponseMs',275),(3752,1198,1199,'OP_GuildBankUpdateMsg',276),(3753,1198,1199,'OP_GuildBankEventListMsg',277),(3754,1198,1199,'OP_RequestGuildBankEventDetailsMs',278),(3755,1198,1199,'OP_RewardPackMsg',279),(3756,1198,1199,'OP_RenameGuildMsg',280),(3757,1198,1199,'OP_ZoneToFriendRequestMsg',281),(3758,1198,1199,'OP_ZoneToFriendReplyMsg',282),(3759,1198,1199,'OP_ChatCreateChannelMsg',283),(3760,1198,1199,'OP_ChatJoinChannelMsg',284),(3761,1198,1199,'OP_ChatWhoChannelMsg',285),(3762,1198,1199,'OP_ChatLeaveChannelMsg',286),(3763,1198,1199,'OP_ChatTellChannelMsg',287),(3764,1198,1199,'OP_ChatTellUserMsg',288),(3765,1198,1199,'OP_ChatToggleFriendMsg',289),(3766,1198,1199,'OP_BrokerAddBag',290),(3767,1198,1199,'OP_BrokerRemoveBag',291),(3768,1198,1199,'OP_ChatToggleIgnoreMsg',292),(3769,1198,1199,'OP_ChatSendFriendsMsg',293),(3770,1198,1199,'OP_ChatSendIgnoresMsg',294),(3771,1198,1199,'OP_QuestReward',318),(3772,1198,1199,'OP_ChatFiltersMsg',333),(3773,1198,1199,'OP_MailGetMessageMsg',336),(3774,1198,1199,'OP_MailSendMessageMsg',337),(3775,1198,1199,'OP_MailDeleteMessageMsg',338),(3776,1198,1199,'OP_MailGetHeadersReplyMsg',339),(3777,1198,1199,'OP_MailGetMessageReplyMsg',340),(3778,1198,1199,'OP_MailSendMessageReplyMsg',341),(3779,1198,1199,'OP_MailCommitSendMessageMsg',342),(3780,1198,1199,'OP_MailSendSystemMessageMsg',343),(3781,1198,1199,'OP_MailRemoveAttachFromMailMsg',344),(3782,1198,1199,'OP_WaypointRequestMsg',346),(3783,1198,1199,'OP_WaypointReplyMsg',347),(3784,1198,1199,'OP_WaypointSelectMsg',348),(3785,1198,1199,'OP_WaypointUpdateMsg',349),(3786,1198,1199,'OP_CharNameChangedMsg',350),(3787,1198,1199,'OP_ShowZoneTeleporterDestinations',351),(3788,1198,1199,'OP_SelectZoneTeleporterDestinatio',352),(3789,1198,1199,'OP_ReloadLocalizedTxtMsg',353),(3790,1198,1199,'OP_RequestGuildMembershipMsg',354),(3791,1198,1199,'OP_GuildMembershipResponseMsg',355),(3792,1198,1199,'OP_LeaveGuildNotifyMsg',356),(3793,1198,1199,'OP_JoinGuildNotifyMsg',357),(3794,1198,1199,'OP_AvatarUpdateMsg',358),(3795,1198,1199,'OP_BioUpdateMsg',360),(3796,1198,1199,'OP_InspectPlayerMsg',361),(3797,1198,1199,'OP_WSServerLockMsg',362),(3798,1198,1199,'OP_LSServerLockMsg',363),(3799,1198,1199,'OP_WSServerHideMsg',364),(3800,1198,1199,'OP_CsCategoryRequestMsg',365),(3801,1198,1199,'OP_CsCategoryResponseMsg',366),(3802,1198,1199,'OP_KnowledgeWindowSlotMappingMsg',367),(3803,1198,1199,'OP_AFKUpdateMsg',368),(3804,1198,1199,'OP_AnonUpdateMsg',369),(3805,1198,1199,'OP_UpdateActivePublicZonesMsg',370),(3806,1198,1199,'OP_UnknownNpcMsg',371),(3807,1198,1199,'OP_PromoFlagsDetailsMsg',372),(3808,1198,1199,'OP_ConsignViewCreateMsg',373),(3809,1198,1199,'OP_ConsignViewGetPageMsg',374),(3810,1198,1199,'OP_ConsignViewReleaseMsg',375),(3811,1198,1199,'OP_ConsignRemoveItemsMsg',376),(3812,1198,1199,'OP_UpdateDebugRadiiMsg',377),(3813,1198,1199,'OP_ReportMsg',378),(3814,1198,1199,'OP_UpdateRaidMsg',379),(3815,1198,1199,'OP_ConsignViewSortMsg',381),(3816,1198,1199,'OP_TitleUpdateMsg',382),(3817,1198,1199,'OP_ClientFellMsg',383),(3818,1198,1199,'OP_ClientInDeathRegionMsg',384),(3819,1198,1199,'OP_CampClientMsg',385),(3820,1198,1199,'OP_CSToolAccessResponseMsg',386),(3821,1198,1199,'OP_TrackingUpdateMsg',387),(3822,1198,1199,'OP_BeginTrackingMsg',388),(3823,1198,1199,'OP_StopTrackingMsg',389),(3824,1198,1199,'OP_GetAvatarAccessRequestForCSToo',391),(3825,1198,1199,'OP_AdvancementRequestMsg',392),(3826,1198,1199,'OP_MapFogDataInitMsg',393),(3827,1198,1199,'OP_MapFogDataUpdateMsg',394),(3828,1198,1199,'OP_CloseGroupInviteWindowMsg',395),(3829,1198,1199,'OP_UpdateGroupMemberDataMsg',396),(3830,1198,1199,'OP_WorldPingMsg',397),(3831,1198,1199,'OP_MoveLogUpdateMsg',388),(3832,1198,1199,'OP_OfferQuestMsg',399),(3833,1198,1199,'OP_WorldShutdownUpdateMsg',401),(3834,1198,1199,'OP_DisplayMailScreenMsg',402),(3835,1198,1199,'OP_ClientIdleBeginMsg',403),(3836,1198,1199,'OP_ClientIdleEndMsg',404),(3837,1198,1199,'OP_PurchaseConsignmentLoreCheckRe',405),(3838,1198,1199,'OP_NotifyApprenticeStoppedMentori',406),(3839,1198,1199,'OP_CorruptedClientMsg',407),(3840,1198,1199,'OP_WorldDataChangeMsg',408),(3841,1198,1199,'OP_MailEventNotificationMsg',409),(3842,1198,1199,'OP_RestartZoneMsg',410),(3843,1198,1199,'OP_FlightPathsMsg',411),(3844,1198,1199,'OP_CharacterLinkdeadMsg',412),(3845,1198,1199,'OP_CharTransferStartRequestMsg',413),(3846,1198,1199,'OP_CharTransferStartReplyMsg',414),(3847,1198,1199,'OP_CharTransferRequestMsg',415),(3848,1198,1199,'OP_CharTransferReplyMsg',416),(3849,1198,1199,'OP_CharTransferRollbackRequestMsg',417),(3850,1198,1199,'OP_CharTransferCommitRequestMsg',418),(3851,1198,1199,'OP_CharTransferRollbackReplyMsg',419),(3852,1198,1199,'OP_CharTransferCommitReplyMsg',420),(3853,1198,1199,'OP_GetCharacterSerializedRequestM',421),(3854,1198,1199,'OP_GetCharacterSerializedReplyMsg',422),(3855,1198,1199,'OP_CreateCharFromCBBRequestMsg',423),(3856,1198,1199,'OP_CreateCharFromCBBReplyMsg',424),(3857,1198,1199,'OP_HousingDataChangedMsg',425),(3858,1198,1199,'OP_HousingRestoreMsg',426),(3859,1198,1199,'OP_AuctionItem',427),(3860,1198,1199,'OP_AuctionItemReply',428),(3861,1198,1199,'OP_AuctionCoin',429),(3862,1198,1199,'OP_AuctionCoinReply',430),(3863,1198,1199,'OP_AuctionCharacter',431),(3864,1198,1199,'OP_AuctionCharacterReply',432),(3865,1198,1199,'OP_AuctionCommitMsg',433),(3866,1198,1199,'OP_AuctionAbortMsg',434),(3867,1198,1199,'OP_CharTransferValidateRequestMsg',435),(3868,1198,1199,'OP_CharTransferValidateReplyMsg',436),(3869,1198,1199,'OP_RaceRestrictionMsg',437),(3870,1198,1199,'OP_SetInstanceDisplayNameMsg',438),(3871,1198,1199,'OP_GetAuctionAssetIDMsg',439),(3872,1198,1199,'OP_GetAuctionAssetIDReplyMsg',440),(3873,1198,1199,'OP_ResendWorldChannelsMsg',441),(3874,1198,1199,'OP_DisplayExchangeScreenMsg',442),(3875,1198,1199,'OP_ArenaGameTypesMsg',443),(3876,1198,1199,'OP_AuditAuctionEventMsg',444),(3877,1198,1199,'OP_InviteRequestMsg',445),(3878,1198,1199,'OP_InviteResponseMsg',446),(3879,1198,1199,'OP_InviteTargetResponseMsg',447),(3880,1198,1199,'OP_InspectPlayerRequestMsg',448),(3881,1198,1199,'OP_DispatchMsg',449),(3882,1198,1199,'OP_DisplayEventMsg',450),(3883,1198,1199,'OP_PrePossessionMsg',451),(3884,1198,1199,'OP_PostPossessionMsg',452),(3885,1198,1199,'OP_ArenaCreate',454),(3886,1198,1199,'OP_ArenaList',455),(3887,1198,1199,'OP_ArenaWindow',463),(3888,1198,1199,'OP_HouseItemsList',481),(3889,1198,1199,'OP_CurrentPet',483),(3890,1198,1199,'OP_AdventureList',486),(3891,1198,1199,'OP_CancelSpellCast',487),(3892,1198,1199,'OP_UpdateTitleCmd',492),(3893,1198,1199,'OP_AttackAllowed',498),(3894,1198,1199,'OP_AttackNotAllowed',499),(3895,1198,1199,'OP_BagOptions',500),(3896,1198,1199,'OP_LFGGroupSearch',502),(3897,1198,1199,'OP_CharacterHousingList',505),(3898,1198,1199,'OP_DressingRoom',508),(3899,1198,1199,'OP_PlayLon',509),(3900,1198,1199,'OP_SkillInfoRequest',512),(3901,1198,1199,'OP_SkillInfoResponse',513),(3902,1198,1199,'OP_LFGUpdateMsg',516),(3903,1198,1199,'OP_BadLanguageFilter',517),(3904,1198,1199,'OP_VoiceChatChannel',518),(3905,1198,1199,'OP_MapRequest',519),(3906,1198,1199,'OP_MarketFundsUpdate',524),(3907,1198,1199,'OP_UIEvent',525),(3908,1198,1199,'OP_MarketAddFundsRequest',526),(3909,1198,1199,'OP_MarketAddFundsReply',527),(3910,1198,1199,'OP_MarketPurchase',529),(3911,1198,1199,'OP_MarketPlacePrices',530),(3912,1198,1199,'OP_MarketPlaceItems',533),(3913,1198,1199,'OP_RecipeBook',534),(3914,1198,1199,'OP_CreateCharacterDungeon',543),(3915,1198,1199,'OP_DungeonMakerEnter',544),(3916,1198,1199,'OP_DungeonMakerItemRequest',546),(3917,1198,1199,'OP_CharacterCreatedDungeons',547),(3918,1198,1199,'OP_DungeonMakerToolboxList',548),(3919,1198,1199,'OP_DungeonMakerUnknown',549),(3920,1198,1199,'OP_DungeonMakerUnknown1',550),(3921,1198,1199,'OP_PlayerPollPopup',552),(3922,1198,1199,'OP_PlayerPollAnswer',553),(3923,1198,1199,'OP_MentorPopup',554),(3924,1198,1199,'OP_LoadWelcomeWindow',556),(3925,1198,1199,'OP_OpenCharCust',557),(3926,1198,1199,'OP_SubmitCharCust',558),(3927,1198,1199,'OP_QueAllBgSolo',560),(3928,1198,1199,'OP_ZoneBgInstanceList',562),(3929,1198,1199,'OP_WorldTravelAvail',566),(3930,1198,1199,'OP_GarbagePacket',569),(3931,1198,1199,'OP_LoadCalendarEvents',570),(3932,1198,1199,'OP_VideoUploaded',571),(3933,1198,1199,'OP_SavageBarInitMsg',572),(3934,1198,1199,'OP_PetOptionsResponse',573),(3935,1198,1199,'OP_DungeonMakerItemResponse',574),(3936,1198,1199,'OP_CharacterMounts',576),(3937,1198,1199,'OP_EqBetaCopyRequest',586),(3938,1198,1199,'OP_EqHearChatCmd',587),(3939,1198,1199,'OP_EqDisplayTextCmd',588),(3940,1198,1199,'OP_EqCreateGhostCmd',589),(3941,1198,1199,'OP_EqCreateWidgetCmd',590),(3942,1198,1199,'OP_EqCreateSignWidgetCmd',591),(3943,1198,1199,'OP_EqDestroyGhostCmd',592),(3944,1198,1199,'OP_EqUpdateGhostCmd',593),(3945,1198,1199,'OP_EqSetControlGhostCmd',594),(3946,1198,1199,'OP_EqSetPOVGhostCmd',595),(3947,1198,1199,'OP_EqHearCombatCmd',596),(3948,1198,1199,'OP_EqHearSpellCastCmd',597),(3949,1198,1199,'OP_EQHearProcCmd',598),(3950,1198,1199,'OP_EQHearResEffectCmd',599),(3951,1198,1199,'OP_EqHearSpellInterruptCmd',600),(3952,1198,1199,'OP_EqHearSpellFizzleCmd',601),(3953,1198,1199,'OP_EqHearConsiderCmd',602),(3954,1198,1199,'OP_EqUpdateSubClassesCmd',603),(3955,1198,1199,'OP_EqCreateListBoxCmd',604),(3956,1198,1199,'OP_EqSetDebugPathPointsCmd',605),(3957,1198,1199,'OP_EqCannedEmoteCmd',607),(3958,1198,1199,'OP_EqStateCmd',608),(3959,1198,1199,'OP_EqPlaySoundCmd',609),(3960,1198,1199,'OP_EqPlaySound3DCmd',610),(3961,1198,1199,'OP_EqPlayVoiceCmd',611),(3962,1198,1199,'OP_EqHearDrowningCmd',612),(3963,1198,1199,'OP_EqHearDeathCmd',613),(3964,1198,1199,'OP_EqGroupMemberRemovedCmd',614),(3965,1198,1199,'OP_EqHearChainEffectCmd',615),(3966,1198,1199,'OP_EqReceiveOfferCmd',616),(3967,1198,1199,'OP_EqInspectPCResultsCmd',617),(3968,1198,1199,'OP_EqDrawablePathGraphCmd',618),(3969,1198,1199,'OP_EqDialogOpenCmd',619),(3970,1198,1199,'OP_EqDialogCloseCmd',620),(3971,1198,1199,'OP_EqFactionUpdateCmd',621),(3972,1198,1199,'OP_EqCollectionUpdateCmd',622),(3973,1198,1199,'OP_EqCollectionFilterCmd',623),(3974,1198,1199,'OP_EqCollectionItemCmd',624),(3975,1198,1199,'OP_EqQuestJournalUpdateCmd',625),(3976,1198,1199,'OP_EqMentoring',626),(3977,1198,1199,'OP_EqQuestJournalReplyCmd',627),(3978,1198,1199,'OP_EqQuestGroupCmd',628),(3979,1198,1199,'OP_EqUpdateMerchantCmd',629),(3980,1198,1199,'OP_EqUpdateStoreCmd',630),(3981,1198,1199,'OP_EqUpdatePlayerTradeCmd',631),(3982,1198,1199,'OP_EqHelpPathCmd',632),(3983,1198,1199,'OP_EqHelpPathClearCmd',633),(3984,1198,1199,'OP_EqUpdateBankCmd',634),(3985,1198,1199,'OP_EqExamineInfoCmd',635),(3986,1198,1199,'OP_EqCloseWindowCmd',636),(3987,1198,1199,'OP_EqUpdateLootCmd',637),(3988,1198,1199,'OP_EqJunctionListCmd',638),(3989,1198,1199,'OP_EqShowDeathWindowCmd',639),(3990,1198,1199,'OP_EqDisplaySpellFailCmd',640),(3991,1198,1199,'OP_EqSpellCastStartCmd',641),(3992,1198,1199,'OP_EqSpellCastEndCmd',642),(3993,1198,1199,'OP_EqResurrectedCmd',643),(3994,1198,1199,'OP_EqChoiceWinCmd',644),(3995,1198,1199,'OP_EqSetDefaultVerbCmd',645),(3996,1198,1199,'OP_EqInstructionWindowCmd',646),(3997,1198,1199,'OP_EqInstructionWindowCloseCmd',647),(3998,1198,1199,'OP_EqInstructionWindowGoalCmd',648),(3999,1198,1199,'OP_EqInstructionWindowTaskCmd',649),(4000,1198,1199,'OP_EqEnableGameEventCmd',650),(4001,1198,1199,'OP_EqShowWindowCmd',651),(4002,1198,1199,'OP_EqEnableWindowCmd',652),(4003,1198,1199,'OP_EqFlashWindowCmd',653),(4004,1198,1199,'OP_EqHearPlayFlavorCmd',655),(4005,1198,1199,'OP_EqUpdateSignWidgetCmd',656),(4006,1198,1199,'OP_EqDebugPVDCmd',657),(4007,1198,1199,'OP_EqShowBookCmd',658),(4008,1198,1199,'OP_EqQuestionnaireCmd',659),(4009,1198,1199,'OP_EqGetProbsCmd',661),(4010,1198,1199,'OP_EqHearHealCmd',662),(4011,1198,1199,'OP_EqChatChannelUpdateCmd',663),(4012,1198,1199,'OP_EqWhoChannelQueryReplyCmd',664),(4013,1198,1199,'OP_EqAvailWorldChannelsCmd',665),(4014,1198,1199,'OP_EqUpdateTargetCmd',666),(4015,1198,1199,'OP_BrokerSellList',667),(4016,1198,1199,'OP_EqConsignmentItemsCmd',668),(4017,1198,1199,'OP_EqStartBrokerCmd',670),(4018,1198,1199,'OP_EqMapExplorationCmd',671),(4019,1198,1199,'OP_EqStoreLogCmd',672),(4020,1198,1199,'OP_EqSpellMoveToRangeAndRetryCmd',673),(4021,1198,1199,'OP_EqUpdatePlayerMailCmd',674),(4022,1198,1199,'OP_GuildStatusUpdate',677),(4023,1198,1199,'OP_EqArenaResultsCmd',678),(4024,1198,1199,'OP_EqGuildBankEventActionCmd',679),(4025,1198,1199,'OP_EqGuildBankExamineInfoCmd',680),(4026,1198,1199,'OP_EqHearSpellNoLandCmd',681),(4027,1198,1199,'OP_Lottery',682),(4028,1198,1199,'OP_GuildRecruitingMemberInfo',683),(4029,1198,1199,'OP_GuildRecruiting',684),(4030,1198,1199,'OP_GuildRecruitingDetails',685),(4031,1198,1199,'OP_GuildRecruitingImage',686),(4032,1198,1199,'OP_TradeskillList',704),(4033,1198,1199,'OP_CharRenamed',688),(4034,1198,1199,'OP_UseAdornment',698),(4035,1198,1199,'OP_ExpPurchWindow',704),(4036,1198,1199,'OP_PointOfInterest',708),(4037,1198,1199,'OP_PointOfInterest2',709),(4038,1198,1199,'OP_TraitsList',710),(4039,1198,1199,'OP_CustomizeHouseDisplay',713),(4040,1198,1199,'OP_VoiceChatServer',714),(4041,1198,1199,'OP_SupplyDepot',718),(4042,1198,1199,'OP_EQHearThreatCmd',719),(4043,1198,1199,'OP_RecipeList',720),(4044,1198,1199,'OP_Research',721),(4045,1198,1199,'OP_CharacterCurrency',722),(4046,1198,1199,'OP_CharacterAchievements',723),(4047,1198,1199,'OP_AchievementUpdateMsg',724),(4048,1198,1199,'OP_EQHearDispellCmd',725),(4049,1198,1199,'OP_JournalQuestStoryline',726),(4050,1198,1199,'OP_DungeonPlayAsAvatarList',727),(4051,1198,1199,'OP_DungeonPlayAsAvatarSelected',728),(4052,1198,1199,'OP_MercHireWindow',729),(4053,1198,1199,'OP_MercUnknown',730),(4054,1198,1199,'OP_Unknown',747),(4055,0,0,'OP_BrokerAddBag',9999),(4056,839,844,'OP_BrokerAddBag',9999),(4057,908,927,'OP_BrokerAddBag',9999),(4058,1008,1011,'OP_BrokerAddBag',9999),(4059,1045,1046,'OP_BrokerAddBag',9999),(4060,1096,1096,'OP_BrokerAddBag',9999),(4062,0,0,'OP_CharacterCurrency',654),(4063,839,844,'OP_CharacterCurrency',654),(4064,908,927,'OP_CharacterCurrency',654),(4065,1008,1011,'OP_CharacterCurrency',654),(4066,1045,1046,'OP_CharacterCurrency',673),(4067,1096,1096,'OP_CharacterCurrency',676),(4068,0,0,'OP_CharacterPet',9999),(4069,839,844,'OP_CharacterPet',9999),(4070,908,927,'OP_CharacterPet',9999),(4071,1008,1011,'OP_CharacterPet',9999),(4072,1045,1046,'OP_CharacterPet',9999),(4073,1096,1096,'OP_CharacterPet',9999),(4075,0,0,'OP_TradeskillList',9999),(4076,839,844,'OP_TradeskillList',9999),(4077,908,927,'OP_TradeskillList',9999),(4078,1008,1011,'OP_TradeskillList',9999),(4079,1045,1046,'OP_TradeskillList',9999),(4083,1204,1205,'OP_LoginRequestMsg',0),(4084,1204,1205,'OP_LoginByNumRequestMsg',1),(4085,1204,1205,'OP_WSLoginRequestMsg',2),(4086,1204,1205,'OP_ESLoginRequestMsg',3),(4087,1204,1205,'OP_LoginReplyMsg',4),(4088,1204,1205,'OP_WSStatusReplyMsg',5),(4089,1204,1205,'OP_WorldStatusChangeMsg',6),(4090,1204,1205,'OP_AllWSDescRequestMsg',7),(4091,1204,1205,'OP_WorldListMsg',8),(4092,1204,1205,'OP_AllCharactersDescRequestMsg',9),(4093,1204,1205,'OP_AllCharactersDescReplyMsg',10),(4094,1204,1205,'OP_CreateCharacterRequestMsg',11),(4095,1204,1205,'OP_CreateCharacterReplyMsg',12),(4096,1204,1205,'OP_WSCreateCharacterRequestMsg',13),(4097,1204,1205,'OP_WSCreateCharacterReplyMsg',14),(4098,1204,1205,'OP_ReskinCharacterRequestMsg',15),(4099,1204,1205,'OP_DeleteCharacterRequestMsg',16),(4100,1204,1205,'OP_DeleteCharacterReplyMsg',17),(4101,1204,1205,'OP_PlayCharacterRequestMsg',18),(4102,1204,1205,'OP_PlayCharacterReplyMsg',19),(4103,1204,1205,'OP_ExpectClientAsCharacterReplyMs',22),(4104,1204,1205,'OP_ServerPlayCharacterRequestMsg',23),(4105,1204,1205,'OP_ServerPlayCharacterReplyMsg',24),(4106,1204,1205,'OP_ESInitMsg',25),(4107,1204,1205,'OP_ESReadyForClientsMsg',26),(4108,1204,1205,'OP_CreateZoneInstanceMsg',29),(4109,1204,1205,'OP_ZoneInstanceCreateReplyMsg',30),(4110,1204,1205,'OP_ZoneInstanceDestroyedMsg',31),(4111,1204,1205,'OP_ExpectClientAsCharacterRequest',32),(4112,1204,1205,'OP_ZoneInfoMsg',33),(4113,1204,1205,'OP_DoneLoadingZoneResourcesMsg',34),(4114,1204,1205,'OP_DoneSendingInitialEntitiesMsg',35),(4115,1204,1205,'OP_DoneLoadingEntityResourcesMsg',36),(4116,1204,1205,'OP_PredictionUpdateMsg',37),(4117,1204,1205,'OP_UpdatePositionMsg',39),(4118,1204,1205,'OP_SetRemoteCmdsMsg',41),(4119,1204,1205,'OP_RemoteCmdMsg',42),(4120,1204,1205,'OP_GameWorldTimeMsg',43),(4121,1204,1205,'OP_MOTDMsg',44),(4122,1204,1205,'OP_ZoneMOTDMsg',45),(4123,1204,1205,'OP_AvatarCreatedMsg',46),(4124,1204,1205,'OP_AvatarDestroyedMsg',47),(4125,1204,1205,'OP_RequestCampMsg',50),(4126,1204,1205,'OP_CampStartedMsg',51),(4127,1204,1205,'OP_CampAbortedMsg',52),(4128,1204,1205,'OP_WhoQueryRequestMsg',53),(4129,1204,1205,'OP_WhoQueryReplyMsg',54),(4130,1204,1205,'OP_MonitorReplyMsg',55),(4131,1204,1205,'OP_MonitorCharacterListMsg',56),(4132,1204,1205,'OP_MonitorCharacterListRequestMsg',57),(4133,1204,1205,'OP_ClientCmdMsg',58),(4134,1204,1205,'OP_DispatchESMsg',59),(4135,1204,1205,'OP_DispatchClientCmdMsg',60),(4136,1204,1205,'OP_UpdateTargetMsg',61),(4137,1204,1205,'OP_UpdateTargetLocMsg',62),(4138,1204,1205,'OP_UpdateCharacterSheetMsg',63),(4139,1204,1205,'OP_CharacterPet',64),(4140,1204,1205,'OP_CharacterMerc',65),(4141,1204,1205,'OP_UpdateSpellBookMsg',66),(4142,1204,1205,'OP_UpdateInventoryMsg',68),(4143,1204,1205,'OP_AfterInvSpellUpdate',69),(4144,1204,1205,'OP_UpdateRecipeBookMsg',70),(4145,1204,1205,'OP_RequestRecipeDetailsMsg',71),(4146,1204,1205,'OP_RecipeDetailsMsg',72),(4147,1204,1205,'OP_UpdateSkillBookMsg',73),(4148,1204,1205,'OP_UpdateSkillsMsg',74),(4149,1204,1205,'OP_UpdateOpportunityMsg',75),(4150,1204,1205,'OP_ChangeZoneMsg',77),(4151,1204,1205,'OP_ClientTeleportRequestMsg',78),(4152,1204,1205,'OP_TeleportWithinZoneMsg',79),(4153,1204,1205,'OP_TeleportWithinZoneNoReloadMsg',80),(4154,1204,1205,'OP_MigrateClientToZoneRequestMsg',81),(4155,1204,1205,'OP_MigrateClientToZoneReplyMsg',82),(4156,1204,1205,'OP_ReadyToZoneMsg',84),(4157,1204,1205,'OP_RemoveClientFromGroupMsg',85),(4158,1204,1205,'OP_RemoveGroupFromGroupMsg',86),(4159,1204,1205,'OP_MakeGroupLeaderMsg',87),(4160,1204,1205,'OP_GroupCreatedMsg',88),(4161,1204,1205,'OP_GroupDestroyedMsg',89),(4162,1204,1205,'OP_GroupMemberAddedMsg',90),(4163,1204,1205,'OP_GroupMemberRemovedMsg',91),(4164,1204,1205,'OP_GroupRemovedFromGroupMsg',92),(4165,1204,1205,'OP_GroupLeaderChangedMsg',93),(4166,1204,1205,'OP_GroupResendOOZDataMsg',94),(4167,1204,1205,'OP_GroupSettingsChangedMsg',95),(4168,1204,1205,'OP_OutOfZoneMemberDataMsg',96),(4169,1204,1205,'OP_SendLatestRequestMsg',97),(4170,1204,1205,'OP_ClearDataMsg',98),(4171,1204,1205,'OP_SetSocialMsg',99),(4172,1204,1205,'OP_ESStatusMsg',100),(4173,1204,1205,'OP_ESZoneInstanceStatusMsg',101),(4174,1204,1205,'OP_ZonesStatusRequestMsg',102),(4175,1204,1205,'OP_ZonesStatusMsg',103),(4176,1204,1205,'OP_ESWeatherRequestMsg',104),(4177,1204,1205,'OP_ESWeatherRequestEndMsg',105),(4178,1204,1205,'OP_DialogSelectMsg',109),(4179,1204,1205,'OP_DialogCloseMsg',110),(4180,1204,1205,'OP_RemoveSpellEffectMsg',111),(4181,1204,1205,'OP_RemoveConcentrationMsg',112),(4182,1204,1205,'OP_QuestJournalOpenMsg',113),(4183,1204,1205,'OP_QuestJournalInspectMsg',114),(4184,1204,1205,'OP_QuestJournalSetVisibleMsg',115),(4185,1204,1205,'OP_QuestJournalWaypointMsg',116),(4186,1204,1205,'OP_CreateGuildRequestMsg',119),(4187,1204,1205,'OP_CreateGuildReplyMsg',120),(4188,1204,1205,'OP_GuildsayMsg',121),(4189,1204,1205,'OP_FellowshipExpMsg',122),(4190,1204,1205,'OP_DeleteGuildMsg',123),(4191,1204,1205,'OP_GuildUpdateMsg',124),(4192,1204,1205,'OP_ConsignmentCloseStoreMsg',125),(4193,1204,1205,'OP_ConsignItemRequestMsg',126),(4194,1204,1205,'OP_ConsignItemResponseMsg',127),(4195,1204,1205,'OP_PurchaseConsignmentRequestMsg',128),(4196,1204,1205,'OP_LikeOption',135),(4197,1204,1205,'OP_PublishHouse',138),(4198,1204,1205,'OP_PlayerMadeInstacnesScreen',139),(4199,1204,1205,'OP_PlayerMadeInstances',140),(4200,1204,1205,'OP_HouseDeletedRemotelyMsg',141),(4201,1204,1205,'OP_UpdateHouseDataMsg',142),(4202,1204,1205,'OP_UpdateHouseAccessDataMsg',143),(4203,1204,1205,'OP_PlayerHouseBaseScreenMsg',144),(4204,1204,1205,'OP_PlayerHousePurchaseScreenMsg',145),(4205,1204,1205,'OP_PlayerHouseAccessUpdateMsg',146),(4206,1204,1205,'OP_PlayerHouseDisplayStatusMsg',147),(4207,1204,1205,'OP_PlayerHouseCloseUIMsg',148),(4208,1204,1205,'OP_BuyPlayerHouseMsg',149),(4209,1204,1205,'OP_BuyPlayerHouseTintMsg',150),(4210,1204,1205,'OP_CollectAllHouseItemsMsg',151),(4211,1204,1205,'OP_RelinquishHouseMsg',152),(4212,1204,1205,'OP_EnterHouseMsg',153),(4213,1204,1205,'OP_ExitHouseMsg',154),(4214,1204,1205,'OP_HouseDefaultAccessSetMsg',155),(4215,1204,1205,'OP_HouseAccessSetMsg',156),(4216,1204,1205,'OP_HouseAccessRemoveMsg',157),(4217,1204,1205,'OP_PayHouseUpkeepMsg',158),(4218,1204,1205,'OP_MoveableObjectPlacementCriteri',159),(4219,1204,1205,'OP_EnterMoveObjectModeMsg',160),(4220,1204,1205,'OP_PositionMoveableObject',161),(4221,1204,1205,'OP_CancelMoveObjectModeMsg',162),(4222,1204,1205,'OP_ShaderCustomizationMsg',163),(4223,1204,1205,'OP_ReplaceableSubMeshesMsg',164),(4224,1204,1205,'OP_HouseCustomizationScreenMsg',165),(4225,1204,1205,'OP_CustomizationPurchaseRequestMs',166),(4226,1204,1205,'OP_CustomizationSetRequestMsg',167),(4227,1204,1205,'OP_CustomizationReplyMsg',168),(4228,1204,1205,'OP_TintWidgetsMsg',169),(4229,1204,1205,'OP_ExamineConsignmentRequestMsg',170),(4230,1204,1205,'OP_ExamineConsignmentResponseMsg',171),(4231,1204,1205,'OP_UISettingsResponseMsg',172),(4232,1204,1205,'OP_UIResetMsg',173),(4233,1204,1205,'OP_KeymapLoadMsg',174),(4234,1204,1205,'OP_KeymapNoneMsg',175),(4235,1204,1205,'OP_KeymapDataMsg',176),(4236,1204,1205,'OP_KeymapSaveMsg',177),(4237,1204,1205,'OP_DispatchSpellCmdMsg',178),(4238,1204,1205,'OP_EntityVerbsRequestMsg',179),(4239,1204,1205,'OP_EntityVerbsReplyMsg',180),(4240,1204,1205,'OP_EntityVerbsVerbMsg',181),(4241,1204,1205,'OP_ChatRelationshipUpdateMsg',183),(4242,1204,1205,'OP_LootItemsRequestMsg',184),(4243,1204,1205,'OP_StoppedLootingMsg',185),(4244,1204,1205,'OP_SitMsg',186),(4245,1204,1205,'OP_StandMsg',187),(4246,1204,1205,'OP_SatMsg',188),(4247,1204,1205,'OP_StoodMsg',189),(4248,1204,1205,'OP_ClearForTakeOffMsg',190),(4249,1204,1205,'OP_ReadyForTakeOffMsg',191),(4250,1204,1205,'OP_ShowIllusionsMsg',192),(4251,1204,1205,'OP_HideIllusionsMsg',193),(4252,1204,1205,'OP_ExamineItemRequestMsg',194),(4253,1204,1205,'OP_ReadBookPageMsg',195),(4254,1204,1205,'OP_DefaultGroupOptionsRequestMsg',196),(4255,1204,1205,'OP_DefaultGroupOptionsMsg',197),(4256,1204,1205,'OP_GroupOptionsMsg',198),(4257,1204,1205,'OP_DisplayGroupOptionsScreenMsg',199),(4258,1204,1205,'OP_PetOptions',200),(4259,1204,1205,'OP_DisplayInnVisitScreenMsg',201),(4260,1204,1205,'OP_DumpSchedulerMsg',202),(4261,1204,1205,'OP_LSCheckAcctLockMsg',203),(4262,1204,1205,'OP_WSAcctLockStatusMsg',204),(4263,1204,1205,'OP_RequestHelpRepathMsg',205),(4264,1204,1205,'OP_RequestTargetLocMsg',206),(4265,1204,1205,'OP_UpdateMotdMsg',207),(4266,1204,1205,'OP_DestUpdateReq',209),(4267,1204,1205,'OP_PerformPlayerKnockbackMsg',212),(4268,1204,1205,'OP_PerformCameraShakeMsg',213),(4269,1204,1205,'OP_PopulateSkillMapsMsg',214),(4270,1204,1205,'OP_CancelledFeignMsg',215),(4271,1204,1205,'OP_SysClient',217),(4272,1204,1205,'OP_ShowCreateFromRecipeUIMsg',218),(4273,1204,1205,'OP_CancelCreateFromRecipeMsg',219),(4274,1204,1205,'OP_BeginItemCreationMsg',220),(4275,1204,1205,'OP_StopItemCreationMsg',221),(4276,1204,1205,'OP_ShowItemCreationProcessUIMsg',222),(4277,1204,1205,'OP_UpdateItemCreationProcessUIMsg',223),(4278,1204,1205,'OP_DisplayTSEventReactionMsg',224),(4279,1204,1205,'OP_ShowRecipeBookMsg',225),(4280,1204,1205,'OP_KnowledgebaseRequestMsg',226),(4281,1204,1205,'OP_KnowledgebaseResponseMsg',227),(4282,1204,1205,'OP_CSTicketHeaderRequestMsg',228),(4283,1204,1205,'OP_CSTicketInfoMsg',229),(4284,1204,1205,'OP_CSTicketCommentRequestMsg',230),(4285,1204,1205,'OP_CSTicketCommentResponseMsg',231),(4286,1204,1205,'OP_CSTicketCreateMsg',232),(4287,1204,1205,'OP_CSTicketAddCommentMsg',233),(4288,1204,1205,'OP_CSTicketDeleteMsg',234),(4289,1204,1205,'OP_CSTicketChangeNotificationMsg',235),(4290,1204,1205,'OP_WorldDataUpdateMsg',236),(4291,1204,1205,'OP_KnownLanguagesMsg',237),(4292,1204,1205,'OP_LsRequestClientCrashLogMsg',238),(4293,1204,1205,'OP_LsClientBaselogReplyMsg',239),(4294,1204,1205,'OP_LsClientCrashlogReplyMsg',240),(4295,1204,1205,'OP_LsClientAlertlogReplyMsg',241),(4296,1204,1205,'OP_LsClientVerifylogReplyMsg',242),(4297,1204,1205,'OP_ClientTeleportToLocationMsg',243),(4298,1204,1205,'OP_UpdateClientPredFlagsMsg',244),(4299,1204,1205,'OP_ChangeServerControlFlagMsg',245),(4300,1204,1205,'OP_CSToolsRequestMsg',246),(4301,1204,1205,'OP_CSToolsResponseMsg',247),(4302,1204,1205,'OP_AddSocialStructureStandingMsg',248),(4303,1204,1205,'OP_CreateBoatTransportsMsg',249),(4304,1204,1205,'OP_PositionBoatTransportMsg',250),(4305,1204,1205,'OP_MigrateBoatTransportMsg',251),(4306,1204,1205,'OP_MigrateBoatTransportReplyMsg',252),(4307,1204,1205,'OP_DisplayDebugNLLPointsMsg',253),(4308,1204,1205,'OP_ExamineInfoRequestMsg',254),(4309,1204,1205,'OP_QuickbarInitMsg',255),(4310,1204,1205,'OP_QuickbarUpdateMsg',256),(4311,1204,1205,'OP_MacroInitMsg',257),(4312,1204,1205,'OP_MacroUpdateMsg',258),(4313,1204,1205,'OP_QuestionnaireMsg',259),(4314,1204,1205,'OP_LevelChangedMsg',260),(4315,1204,1205,'OP_SpellGainedMsg',261),(4316,1204,1205,'OP_EncounterBrokenMsg',262),(4317,1204,1205,'OP_OnscreenMsgMsg',263),(4318,1204,1205,'OP_DisplayWarningMsg',264),(4319,1204,1205,'OP_ModifyGuildMsg',265),(4320,1204,1205,'OP_GuildEventMsg',266),(4321,1204,1205,'OP_GuildEventAddMsg',267),(4322,1204,1205,'OP_GuildEventActionMsg',268),(4323,1204,1205,'OP_GuildEventListMsg',269),(4324,1204,1205,'OP_RequestGuildEventDetailsMsg',270),(4325,1204,1205,'OP_GuildEventDetailsMsg',271),(4326,1204,1205,'OP_RequestGuildInfoMsg',272),(4327,1204,1205,'OP_GuildBankActionMsg',273),(4328,1204,1205,'OP_GuildBankActionResponseMsg',274),(4329,1204,1205,'OP_GuildBankItemDetailsRequestMsg',275),(4330,1204,1205,'OP_GuildBankItemDetailsResponseMs',276),(4331,1204,1205,'OP_GuildBankUpdateMsg',277),(4332,1204,1205,'OP_GuildBankEventListMsg',278),(4333,1204,1205,'OP_RequestGuildBankEventDetailsMs',279),(4334,1204,1205,'OP_RewardPackMsg',280),(4335,1204,1205,'OP_RenameGuildMsg',281),(4336,1204,1205,'OP_ZoneToFriendRequestMsg',282),(4337,1204,1205,'OP_ZoneToFriendReplyMsg',283),(4338,1204,1205,'OP_ChatCreateChannelMsg',284),(4339,1204,1205,'OP_ChatJoinChannelMsg',285),(4340,1204,1205,'OP_ChatWhoChannelMsg',286),(4341,1204,1205,'OP_ChatLeaveChannelMsg',287),(4342,1204,1205,'OP_ChatTellChannelMsg',288),(4343,1204,1205,'OP_ChatTellUserMsg',289),(4344,1204,1205,'OP_ChatToggleFriendMsg',290),(4345,1204,1205,'OP_BrokerAddBag',291),(4346,1204,1205,'OP_BrokerRemoveBag',292),(4347,1204,1205,'OP_ChatToggleIgnoreMsg',293),(4348,1204,1205,'OP_ChatSendFriendsMsg',294),(4349,1204,1205,'OP_ChatSendIgnoresMsg',295),(4350,1204,1205,'OP_QuestReward',319),(4351,1204,1205,'OP_ChatFiltersMsg',334),(4352,1204,1205,'OP_MailGetMessageMsg',337),(4353,1204,1205,'OP_MailSendMessageMsg',338),(4354,1204,1205,'OP_MailDeleteMessageMsg',339),(4355,1204,1205,'OP_MailGetHeadersReplyMsg',340),(4356,1204,1205,'OP_MailGetMessageReplyMsg',341),(4357,1204,1205,'OP_MailSendMessageReplyMsg',342),(4358,1204,1205,'OP_MailCommitSendMessageMsg',343),(4359,1204,1205,'OP_MailSendSystemMessageMsg',344),(4360,1204,1205,'OP_MailRemoveAttachFromMailMsg',345),(4361,1204,1205,'OP_WaypointRequestMsg',347),(4362,1204,1205,'OP_WaypointReplyMsg',348),(4363,1204,1205,'OP_WaypointSelectMsg',349),(4364,1204,1205,'OP_WaypointUpdateMsg',350),(4365,1204,1205,'OP_CharNameChangedMsg',351),(4366,1204,1205,'OP_ShowZoneTeleporterDestinations',352),(4367,1204,1205,'OP_SelectZoneTeleporterDestinatio',353),(4368,1204,1205,'OP_ReloadLocalizedTxtMsg',354),(4369,1204,1205,'OP_RequestGuildMembershipMsg',355),(4370,1204,1205,'OP_GuildMembershipResponseMsg',356),(4371,1204,1205,'OP_LeaveGuildNotifyMsg',357),(4372,1204,1205,'OP_JoinGuildNotifyMsg',358),(4373,1204,1205,'OP_AvatarUpdateMsg',359),(4374,1204,1205,'OP_BioUpdateMsg',361),(4375,1204,1205,'OP_InspectPlayerMsg',362),(4376,1204,1205,'OP_WSServerLockMsg',363),(4377,1204,1205,'OP_LSServerLockMsg',364),(4378,1204,1205,'OP_WSServerHideMsg',365),(4379,1204,1205,'OP_CsCategoryRequestMsg',366),(4380,1204,1205,'OP_CsCategoryResponseMsg',367),(4381,1204,1205,'OP_KnowledgeWindowSlotMappingMsg',368),(4382,1204,1205,'OP_AFKUpdateMsg',369),(4383,1204,1205,'OP_AnonUpdateMsg',370),(4384,1204,1205,'OP_UpdateActivePublicZonesMsg',371),(4385,1204,1205,'OP_UnknownNpcMsg',372),(4386,1204,1205,'OP_PromoFlagsDetailsMsg',373),(4387,1204,1205,'OP_ConsignViewCreateMsg',374),(4388,1204,1205,'OP_ConsignViewGetPageMsg',375),(4389,1204,1205,'OP_ConsignViewReleaseMsg',376),(4390,1204,1205,'OP_ConsignRemoveItemsMsg',377),(4391,1204,1205,'OP_UpdateDebugRadiiMsg',378),(4392,1204,1205,'OP_ReportMsg',379),(4393,1204,1205,'OP_UpdateRaidMsg',380),(4394,1204,1205,'OP_ConsignViewSortMsg',382),(4395,1204,1205,'OP_TitleUpdateMsg',383),(4396,1204,1205,'OP_ClientFellMsg',384),(4397,1204,1205,'OP_ClientInDeathRegionMsg',385),(4398,1204,1205,'OP_CampClientMsg',386),(4399,1204,1205,'OP_CSToolAccessResponseMsg',387),(4400,1204,1205,'OP_TrackingUpdateMsg',388),(4401,1204,1205,'OP_BeginTrackingMsg',389),(4402,1204,1205,'OP_StopTrackingMsg',390),(4403,1204,1205,'OP_GetAvatarAccessRequestForCSToo',392),(4404,1204,1205,'OP_AdvancementRequestMsg',393),(4405,1204,1205,'OP_MapFogDataInitMsg',394),(4406,1204,1205,'OP_MapFogDataUpdateMsg',395),(4407,1204,1205,'OP_CloseGroupInviteWindowMsg',396),(4408,1204,1205,'OP_UpdateGroupMemberDataMsg',397),(4409,1204,1205,'OP_WorldPingMsg',398),(4410,1204,1205,'OP_MoveLogUpdateMsg',389),(4411,1204,1205,'OP_OfferQuestMsg',400),(4412,1204,1205,'OP_WorldShutdownUpdateMsg',402),(4413,1204,1205,'OP_DisplayMailScreenMsg',403),(4414,1204,1205,'OP_ClientIdleBeginMsg',404),(4415,1204,1205,'OP_ClientIdleEndMsg',405),(4416,1204,1205,'OP_PurchaseConsignmentLoreCheckRe',406),(4417,1204,1205,'OP_NotifyApprenticeStoppedMentori',407),(4418,1204,1205,'OP_CorruptedClientMsg',408),(4419,1204,1205,'OP_WorldDataChangeMsg',409),(4420,1204,1205,'OP_MailEventNotificationMsg',410),(4421,1204,1205,'OP_RestartZoneMsg',411),(4422,1204,1205,'OP_FlightPathsMsg',412),(4423,1204,1205,'OP_CharacterLinkdeadMsg',413),(4424,1204,1205,'OP_CharTransferStartRequestMsg',414),(4425,1204,1205,'OP_CharTransferStartReplyMsg',415),(4426,1204,1205,'OP_CharTransferRequestMsg',416),(4427,1204,1205,'OP_CharTransferReplyMsg',417),(4428,1204,1205,'OP_CharTransferRollbackRequestMsg',418),(4429,1204,1205,'OP_CharTransferCommitRequestMsg',419),(4430,1204,1205,'OP_CharTransferRollbackReplyMsg',420),(4431,1204,1205,'OP_CharTransferCommitReplyMsg',421),(4432,1204,1205,'OP_GetCharacterSerializedRequestM',422),(4433,1204,1205,'OP_GetCharacterSerializedReplyMsg',423),(4434,1204,1205,'OP_CreateCharFromCBBRequestMsg',424),(4435,1204,1205,'OP_CreateCharFromCBBReplyMsg',425),(4436,1204,1205,'OP_HousingDataChangedMsg',426),(4437,1204,1205,'OP_HousingRestoreMsg',427),(4438,1204,1205,'OP_AuctionItem',428),(4439,1204,1205,'OP_AuctionItemReply',429),(4440,1204,1205,'OP_AuctionCoin',430),(4441,1204,1205,'OP_AuctionCoinReply',431),(4442,1204,1205,'OP_AuctionCharacter',432),(4443,1204,1205,'OP_AuctionCharacterReply',433),(4444,1204,1205,'OP_AuctionCommitMsg',434),(4445,1204,1205,'OP_AuctionAbortMsg',435),(4446,1204,1205,'OP_CharTransferValidateRequestMsg',436),(4447,1204,1205,'OP_CharTransferValidateReplyMsg',437),(4448,1204,1205,'OP_RaceRestrictionMsg',438),(4449,1204,1205,'OP_SetInstanceDisplayNameMsg',439),(4450,1204,1205,'OP_GetAuctionAssetIDMsg',440),(4451,1204,1205,'OP_GetAuctionAssetIDReplyMsg',441),(4452,1204,1205,'OP_ResendWorldChannelsMsg',442),(4453,1204,1205,'OP_DisplayExchangeScreenMsg',443),(4454,1204,1205,'OP_ArenaGameTypesMsg',444),(4455,1204,1205,'OP_AuditAuctionEventMsg',445),(4456,1204,1205,'OP_InviteRequestMsg',446),(4457,1204,1205,'OP_InviteResponseMsg',447),(4458,1204,1205,'OP_InviteTargetResponseMsg',448),(4459,1204,1205,'OP_InspectPlayerRequestMsg',449),(4460,1204,1205,'OP_DispatchMsg',450),(4461,1204,1205,'OP_DisplayEventMsg',451),(4462,1204,1205,'OP_PrePossessionMsg',452),(4463,1204,1205,'OP_PostPossessionMsg',453),(4464,1204,1205,'OP_ArenaCreate',455),(4465,1204,1205,'OP_ArenaList',456),(4466,1204,1205,'OP_ArenaWindow',464),(4467,1204,1205,'OP_HouseItemsList',482),(4468,1204,1205,'OP_CurrentPet',484),(4469,1204,1205,'OP_AdventureList',487),(4470,1204,1205,'OP_CancelSpellCast',488),(4471,1204,1205,'OP_UpdateTitleCmd',493),(4472,1204,1205,'OP_AttackAllowed',499),(4473,1204,1205,'OP_AttackNotAllowed',500),(4474,1204,1205,'OP_BagOptions',501),(4475,1204,1205,'OP_LFGGroupSearch',503),(4476,1204,1205,'OP_CharacterHousingList',506),(4477,1204,1205,'OP_DressingRoom',509),(4478,1204,1205,'OP_PlayLon',510),(4479,1204,1205,'OP_SkillInfoRequest',513),(4480,1204,1205,'OP_SkillInfoResponse',514),(4481,1204,1205,'OP_LFGUpdateMsg',517),(4482,1204,1205,'OP_BadLanguageFilter',518),(4483,1204,1205,'OP_VoiceChatChannel',519),(4484,1204,1205,'OP_MapRequest',520),(4485,1204,1205,'OP_MarketFundsUpdate',525),(4486,1204,1205,'OP_UIEvent',526),(4487,1204,1205,'OP_MarketAddFundsRequest',527),(4488,1204,1205,'OP_MarketAddFundsReply',528),(4489,1204,1205,'OP_MarketPurchase',530),(4490,1204,1205,'OP_MarketPlacePrices',531),(4491,1204,1205,'OP_MarketPlaceItems',534),(4492,1204,1205,'OP_RecipeBook',535),(4493,1204,1205,'OP_CreateCharacterDungeon',544),(4494,1204,1205,'OP_DungeonMakerEnter',545),(4495,1204,1205,'OP_DungeonMakerItemRequest',547),(4496,1204,1205,'OP_CharacterCreatedDungeons',548),(4497,1204,1205,'OP_DungeonMakerToolboxList',549),(4498,1204,1205,'OP_DungeonMakerUnknown',550),(4499,1204,1205,'OP_DungeonMakerUnknown1',551),(4500,1204,1205,'OP_PlayerPollPopup',553),(4501,1204,1205,'OP_PlayerPollAnswer',554),(4502,1204,1205,'OP_MentorPopup',555),(4503,1204,1205,'OP_LoadWelcomeWindow',557),(4504,1204,1205,'OP_OpenCharCust',558),(4505,1204,1205,'OP_SubmitCharCust',559),(4506,1204,1205,'OP_QueAllBgSolo',561),(4507,1204,1205,'OP_ZoneBgInstanceList',563),(4508,1204,1205,'OP_WorldTravelAvail',567),(4509,1204,1205,'OP_GarbagePacket',570),(4510,1204,1205,'OP_LoadCalendarEvents',571),(4511,1204,1205,'OP_VideoUploaded',572),(4512,1204,1205,'OP_SavageBarInitMsg',573),(4513,1204,1205,'OP_PetOptionsResponse',574),(4514,1204,1205,'OP_DungeonMakerItemResponse',575),(4515,1204,1205,'OP_CharacterMounts',577),(4516,1204,1205,'OP_EqBetaCopyRequest',587),(4517,1204,1205,'OP_EqHearChatCmd',588),(4518,1204,1205,'OP_EqDisplayTextCmd',589),(4519,1204,1205,'OP_EqCreateGhostCmd',590),(4520,1204,1205,'OP_EqCreateWidgetCmd',591),(4521,1204,1205,'OP_EqCreateSignWidgetCmd',592),(4522,1204,1205,'OP_EqDestroyGhostCmd',593),(4523,1204,1205,'OP_EqUpdateGhostCmd',594),(4524,1204,1205,'OP_EqSetControlGhostCmd',595),(4525,1204,1205,'OP_EqSetPOVGhostCmd',596),(4526,1204,1205,'OP_EqHearCombatCmd',597),(4527,1204,1205,'OP_EqHearSpellCastCmd',598),(4528,1204,1205,'OP_EQHearProcCmd',599),(4529,1204,1205,'OP_EQHearResEffectCmd',600),(4530,1204,1205,'OP_EqHearSpellInterruptCmd',601),(4531,1204,1205,'OP_EqHearSpellFizzleCmd',602),(4532,1204,1205,'OP_EqHearConsiderCmd',603),(4533,1204,1205,'OP_EqUpdateSubClassesCmd',604),(4534,1204,1205,'OP_EqCreateListBoxCmd',605),(4535,1204,1205,'OP_EqSetDebugPathPointsCmd',606),(4536,1204,1205,'OP_EqCannedEmoteCmd',608),(4537,1204,1205,'OP_EqStateCmd',609),(4538,1204,1205,'OP_EqPlaySoundCmd',610),(4539,1204,1205,'OP_EqPlaySound3DCmd',611),(4540,1204,1205,'OP_EqPlayVoiceCmd',612),(4541,1204,1205,'OP_EqHearDrowningCmd',613),(4542,1204,1205,'OP_EqHearDeathCmd',614),(4543,1204,1205,'OP_EqGroupMemberRemovedCmd',615),(4544,1204,1205,'OP_EqHearChainEffectCmd',616),(4545,1204,1205,'OP_EqReceiveOfferCmd',617),(4546,1204,1205,'OP_EqInspectPCResultsCmd',618),(4547,1204,1205,'OP_EqDrawablePathGraphCmd',619),(4548,1204,1205,'OP_EqDialogOpenCmd',620),(4549,1204,1205,'OP_EqDialogCloseCmd',621),(4550,1204,1205,'OP_EqFactionUpdateCmd',622),(4551,1204,1205,'OP_EqCollectionUpdateCmd',623),(4552,1204,1205,'OP_EqCollectionFilterCmd',624),(4553,1204,1205,'OP_EqCollectionItemCmd',625),(4554,1204,1205,'OP_EqQuestJournalUpdateCmd',626),(4555,1204,1205,'OP_EqMentoring',627),(4556,1204,1205,'OP_EqQuestJournalReplyCmd',628),(4557,1204,1205,'OP_EqQuestGroupCmd',629),(4558,1204,1205,'OP_EqUpdateMerchantCmd',630),(4559,1204,1205,'OP_EqUpdateStoreCmd',631),(4560,1204,1205,'OP_EqUpdatePlayerTradeCmd',632),(4561,1204,1205,'OP_EqHelpPathCmd',633),(4562,1204,1205,'OP_EqHelpPathClearCmd',634),(4563,1204,1205,'OP_EqUpdateBankCmd',635),(4564,1204,1205,'OP_EqExamineInfoCmd',636),(4565,1204,1205,'OP_EqCloseWindowCmd',637),(4566,1204,1205,'OP_EqUpdateLootCmd',638),(4567,1204,1205,'OP_EqJunctionListCmd',639),(4568,1204,1205,'OP_EqShowDeathWindowCmd',640),(4569,1204,1205,'OP_EqDisplaySpellFailCmd',641),(4570,1204,1205,'OP_EqSpellCastStartCmd',642),(4571,1204,1205,'OP_EqSpellCastEndCmd',643),(4572,1204,1205,'OP_EqResurrectedCmd',644),(4573,1204,1205,'OP_EqChoiceWinCmd',645),(4574,1204,1205,'OP_EqSetDefaultVerbCmd',646),(4575,1204,1205,'OP_EqInstructionWindowCmd',647),(4576,1204,1205,'OP_EqInstructionWindowCloseCmd',648),(4577,1204,1205,'OP_EqInstructionWindowGoalCmd',649),(4578,1204,1205,'OP_EqInstructionWindowTaskCmd',650),(4579,1204,1205,'OP_EqEnableGameEventCmd',651),(4580,1204,1205,'OP_EqShowWindowCmd',652),(4581,1204,1205,'OP_EqEnableWindowCmd',653),(4582,1204,1205,'OP_EqFlashWindowCmd',654),(4583,1204,1205,'OP_EqHearPlayFlavorCmd',656),(4584,1204,1205,'OP_EqUpdateSignWidgetCmd',657),(4585,1204,1205,'OP_EqDebugPVDCmd',658),(4586,1204,1205,'OP_EqShowBookCmd',659),(4587,1204,1205,'OP_EqQuestionnaireCmd',660),(4588,1204,1205,'OP_EqGetProbsCmd',662),(4589,1204,1205,'OP_EqHearHealCmd',663),(4590,1204,1205,'OP_EqChatChannelUpdateCmd',664),(4591,1204,1205,'OP_EqWhoChannelQueryReplyCmd',665),(4592,1204,1205,'OP_EqAvailWorldChannelsCmd',666),(4593,1204,1205,'OP_EqUpdateTargetCmd',667),(4594,1204,1205,'OP_BrokerSellList',668),(4595,1204,1205,'OP_EqConsignmentItemsCmd',669),(4596,1204,1205,'OP_EqStartBrokerCmd',671),(4597,1204,1205,'OP_EqMapExplorationCmd',672),(4598,1204,1205,'OP_EqStoreLogCmd',673),(4599,1204,1205,'OP_EqSpellMoveToRangeAndRetryCmd',674),(4600,1204,1205,'OP_EqUpdatePlayerMailCmd',675),(4601,1204,1205,'OP_GuildStatusUpdate',678),(4602,1204,1205,'OP_EqArenaResultsCmd',679),(4603,1204,1205,'OP_EqGuildBankEventActionCmd',680),(4604,1204,1205,'OP_EqGuildBankExamineInfoCmd',681),(4605,1204,1205,'OP_EqHearSpellNoLandCmd',682),(4606,1204,1205,'OP_Lottery',683),(4607,1204,1205,'OP_GuildRecruitingMemberInfo',684),(4608,1204,1205,'OP_GuildRecruiting',685),(4609,1204,1205,'OP_GuildRecruitingDetails',686),(4610,1204,1205,'OP_GuildRecruitingImage',687),(4611,1204,1205,'OP_TradeskillList',705),(4612,1204,1205,'OP_CharRenamed',689),(4613,1204,1205,'OP_UseAdornment',699),(4614,1204,1205,'OP_ExpPurchWindow',705),(4615,1204,1205,'OP_PointOfInterest',709),(4616,1204,1205,'OP_PointOfInterest2',710),(4617,1204,1205,'OP_TraitsList',711),(4618,1204,1205,'OP_CustomizeHouseDisplay',714),(4619,1204,1205,'OP_VoiceChatServer',715),(4620,1204,1205,'OP_SupplyDepot',719),(4621,1204,1205,'OP_EQHearThreatCmd',720),(4622,1204,1205,'OP_RecipeList',721),(4623,1204,1205,'OP_Research',722),(4624,1204,1205,'OP_CharacterCurrency',723),(4625,1204,1205,'OP_CharacterAchievements',724),(4626,1204,1205,'OP_AchievementUpdateMsg',725),(4627,1204,1205,'OP_EQHearDispellCmd',726),(4628,1204,1205,'OP_JournalQuestStoryline',727),(4629,1204,1205,'OP_DungeonPlayAsAvatarList',728),(4630,1204,1205,'OP_DungeonPlayAsAvatarSelected',729),(4631,1204,1205,'OP_MercHireWindow',730),(4632,1204,1205,'OP_MercUnknown',731),(4633,1204,1205,'OP_Unknown',748),(4634,1208,1208,'OP_LoginRequestMsg',0),(4635,1208,1208,'OP_LoginByNumRequestMsg',1),(4636,1208,1208,'OP_WSLoginRequestMsg',2),(4637,1208,1208,'OP_ESLoginRequestMsg',3),(4638,1208,1208,'OP_LoginReplyMsg',4),(4639,1208,1208,'OP_WSStatusReplyMsg',5),(4640,1208,1208,'OP_WorldStatusChangeMsg',6),(4641,1208,1208,'OP_AllWSDescRequestMsg',7),(4642,1208,1208,'OP_WorldListMsg',8),(4643,1208,1208,'OP_AllCharactersDescRequestMsg',9),(4644,1208,1208,'OP_AllCharactersDescReplyMsg',10),(4645,1208,1208,'OP_CreateCharacterRequestMsg',11),(4646,1208,1208,'OP_CreateCharacterReplyMsg',12),(4647,1208,1208,'OP_WSCreateCharacterRequestMsg',13),(4648,1208,1208,'OP_WSCreateCharacterReplyMsg',14),(4649,1208,1208,'OP_ReskinCharacterRequestMsg',15),(4650,1208,1208,'OP_DeleteCharacterRequestMsg',16),(4651,1208,1208,'OP_DeleteCharacterReplyMsg',17),(4652,1208,1208,'OP_PlayCharacterRequestMsg',18),(4653,1208,1208,'OP_PlayCharacterReplyMsg',19),(4654,1208,1208,'OP_ExpectClientAsCharacterReplyMs',22),(4655,1208,1208,'OP_ServerPlayCharacterRequestMsg',23),(4656,1208,1208,'OP_ServerPlayCharacterReplyMsg',24),(4657,1208,1208,'OP_ESInitMsg',25),(4658,1208,1208,'OP_ESReadyForClientsMsg',26),(4659,1208,1208,'OP_CreateZoneInstanceMsg',29),(4660,1208,1208,'OP_ZoneInstanceCreateReplyMsg',30),(4661,1208,1208,'OP_ZoneInstanceDestroyedMsg',31),(4662,1208,1208,'OP_ExpectClientAsCharacterRequest',32),(4663,1208,1208,'OP_ZoneInfoMsg',33),(4664,1208,1208,'OP_DoneLoadingZoneResourcesMsg',34),(4665,1208,1208,'OP_DoneSendingInitialEntitiesMsg',35),(4666,1208,1208,'OP_DoneLoadingEntityResourcesMsg',36),(4667,1208,1208,'OP_PredictionUpdateMsg',37),(4668,1208,1208,'OP_UpdatePositionMsg',39),(4669,1208,1208,'OP_SetRemoteCmdsMsg',41),(4670,1208,1208,'OP_RemoteCmdMsg',42),(4671,1208,1208,'OP_GameWorldTimeMsg',43),(4672,1208,1208,'OP_MOTDMsg',44),(4673,1208,1208,'OP_ZoneMOTDMsg',45),(4674,1208,1208,'OP_AvatarCreatedMsg',46),(4675,1208,1208,'OP_AvatarDestroyedMsg',47),(4676,1208,1208,'OP_RequestCampMsg',50),(4677,1208,1208,'OP_CampStartedMsg',51),(4678,1208,1208,'OP_CampAbortedMsg',52),(4679,1208,1208,'OP_WhoQueryRequestMsg',53),(4680,1208,1208,'OP_WhoQueryReplyMsg',54),(4681,1208,1208,'OP_MonitorReplyMsg',55),(4682,1208,1208,'OP_MonitorCharacterListMsg',56),(4683,1208,1208,'OP_MonitorCharacterListRequestMsg',57),(4684,1208,1208,'OP_ClientCmdMsg',58),(4685,1208,1208,'OP_DispatchESMsg',59),(4686,1208,1208,'OP_DispatchClientCmdMsg',60),(4687,1208,1208,'OP_UpdateTargetMsg',61),(4688,1208,1208,'OP_UpdateTargetLocMsg',62),(4689,1208,1208,'OP_UpdateCharacterSheetMsg',63),(4690,1208,1208,'OP_CharacterPet',64),(4691,1208,1208,'OP_CharacterMerc',65),(4692,1208,1208,'OP_UpdateSpellBookMsg',66),(4693,1208,1208,'OP_UpdateInventoryMsg',68),(4694,1208,1208,'OP_AfterInvSpellUpdate',69),(4695,1208,1208,'OP_UpdateRecipeBookMsg',70),(4696,1208,1208,'OP_RequestRecipeDetailsMsg',71),(4697,1208,1208,'OP_RecipeDetailsMsg',72),(4698,1208,1208,'OP_UpdateSkillBookMsg',73),(4699,1208,1208,'OP_UpdateSkillsMsg',74),(4700,1208,1208,'OP_UpdateOpportunityMsg',75),(4701,1208,1208,'OP_ChangeZoneMsg',77),(4702,1208,1208,'OP_ClientTeleportRequestMsg',78),(4703,1208,1208,'OP_TeleportWithinZoneMsg',79),(4704,1208,1208,'OP_TeleportWithinZoneNoReloadMsg',80),(4705,1208,1208,'OP_MigrateClientToZoneRequestMsg',81),(4706,1208,1208,'OP_MigrateClientToZoneReplyMsg',82),(4707,1208,1208,'OP_ReadyToZoneMsg',84),(4708,1208,1208,'OP_RemoveClientFromGroupMsg',85),(4709,1208,1208,'OP_RemoveGroupFromGroupMsg',86),(4710,1208,1208,'OP_MakeGroupLeaderMsg',87),(4711,1208,1208,'OP_GroupCreatedMsg',88),(4712,1208,1208,'OP_GroupDestroyedMsg',89),(4713,1208,1208,'OP_GroupMemberAddedMsg',90),(4714,1208,1208,'OP_GroupMemberRemovedMsg',91),(4715,1208,1208,'OP_GroupRemovedFromGroupMsg',92),(4716,1208,1208,'OP_GroupLeaderChangedMsg',93),(4717,1208,1208,'OP_GroupResendOOZDataMsg',94),(4718,1208,1208,'OP_GroupSettingsChangedMsg',95),(4719,1208,1208,'OP_OutOfZoneMemberDataMsg',96),(4720,1208,1208,'OP_SendLatestRequestMsg',97),(4721,1208,1208,'OP_ClearDataMsg',98),(4722,1208,1208,'OP_SetSocialMsg',99),(4723,1208,1208,'OP_ESStatusMsg',100),(4724,1208,1208,'OP_ESZoneInstanceStatusMsg',101),(4725,1208,1208,'OP_ZonesStatusRequestMsg',102),(4726,1208,1208,'OP_ZonesStatusMsg',103),(4727,1208,1208,'OP_ESWeatherRequestMsg',104),(4728,1208,1208,'OP_ESWeatherRequestEndMsg',105),(4729,1208,1208,'OP_DialogSelectMsg',109),(4730,1208,1208,'OP_DialogCloseMsg',110),(4731,1208,1208,'OP_RemoveSpellEffectMsg',111),(4732,1208,1208,'OP_RemoveConcentrationMsg',112),(4733,1208,1208,'OP_QuestJournalOpenMsg',113),(4734,1208,1208,'OP_QuestJournalInspectMsg',114),(4735,1208,1208,'OP_QuestJournalSetVisibleMsg',115),(4736,1208,1208,'OP_QuestJournalWaypointMsg',116),(4737,1208,1208,'OP_CreateGuildRequestMsg',119),(4738,1208,1208,'OP_CreateGuildReplyMsg',120),(4739,1208,1208,'OP_GuildsayMsg',121),(4740,1208,1208,'OP_FellowshipExpMsg',122),(4741,1208,1208,'OP_DeleteGuildMsg',123),(4742,1208,1208,'OP_GuildUpdateMsg',124),(4743,1208,1208,'OP_ConsignmentCloseStoreMsg',125),(4744,1208,1208,'OP_ConsignItemRequestMsg',126),(4745,1208,1208,'OP_ConsignItemResponseMsg',127),(4746,1208,1208,'OP_PurchaseConsignmentRequestMsg',128),(4747,1208,1208,'OP_LikeOption',135),(4748,1208,1208,'OP_PublishHouse',138),(4749,1208,1208,'OP_PlayerMadeInstacnesScreen',139),(4750,1208,1208,'OP_PlayerMadeInstances',140),(4751,1208,1208,'OP_HouseDeletedRemotelyMsg',141),(4752,1208,1208,'OP_UpdateHouseDataMsg',142),(4753,1208,1208,'OP_UpdateHouseAccessDataMsg',143),(4754,1208,1208,'OP_PlayerHouseBaseScreenMsg',144),(4755,1208,1208,'OP_PlayerHousePurchaseScreenMsg',145),(4756,1208,1208,'OP_PlayerHouseAccessUpdateMsg',146),(4757,1208,1208,'OP_PlayerHouseDisplayStatusMsg',147),(4758,1208,1208,'OP_PlayerHouseCloseUIMsg',148),(4759,1208,1208,'OP_BuyPlayerHouseMsg',149),(4760,1208,1208,'OP_BuyPlayerHouseTintMsg',150),(4761,1208,1208,'OP_CollectAllHouseItemsMsg',151),(4762,1208,1208,'OP_RelinquishHouseMsg',152),(4763,1208,1208,'OP_EnterHouseMsg',153),(4764,1208,1208,'OP_ExitHouseMsg',154),(4765,1208,1208,'OP_HouseDefaultAccessSetMsg',155),(4766,1208,1208,'OP_HouseAccessSetMsg',156),(4767,1208,1208,'OP_HouseAccessRemoveMsg',157),(4768,1208,1208,'OP_PayHouseUpkeepMsg',158),(4769,1208,1208,'OP_MoveableObjectPlacementCriteri',159),(4770,1208,1208,'OP_EnterMoveObjectModeMsg',160),(4771,1208,1208,'OP_PositionMoveableObject',161),(4772,1208,1208,'OP_CancelMoveObjectModeMsg',162),(4773,1208,1208,'OP_ShaderCustomizationMsg',163),(4774,1208,1208,'OP_ReplaceableSubMeshesMsg',164),(4775,1208,1208,'OP_HouseCustomizationScreenMsg',165),(4776,1208,1208,'OP_CustomizationPurchaseRequestMs',166),(4777,1208,1208,'OP_CustomizationSetRequestMsg',167),(4778,1208,1208,'OP_CustomizationReplyMsg',168),(4779,1208,1208,'OP_TintWidgetsMsg',169),(4780,1208,1208,'OP_ExamineConsignmentRequestMsg',170),(4781,1208,1208,'OP_ExamineConsignmentResponseMsg',171),(4782,1208,1208,'OP_UISettingsResponseMsg',172),(4783,1208,1208,'OP_UIResetMsg',173),(4784,1208,1208,'OP_KeymapLoadMsg',174),(4785,1208,1208,'OP_KeymapNoneMsg',175),(4786,1208,1208,'OP_KeymapDataMsg',176),(4787,1208,1208,'OP_KeymapSaveMsg',177),(4788,1208,1208,'OP_DispatchSpellCmdMsg',178),(4789,1208,1208,'OP_EntityVerbsRequestMsg',179),(4790,1208,1208,'OP_EntityVerbsReplyMsg',180),(4791,1208,1208,'OP_EntityVerbsVerbMsg',181),(4792,1208,1208,'OP_ChatRelationshipUpdateMsg',183),(4793,1208,1208,'OP_LootItemsRequestMsg',184),(4794,1208,1208,'OP_StoppedLootingMsg',185),(4795,1208,1208,'OP_SitMsg',186),(4796,1208,1208,'OP_StandMsg',187),(4797,1208,1208,'OP_SatMsg',188),(4798,1208,1208,'OP_StoodMsg',189),(4799,1208,1208,'OP_ClearForTakeOffMsg',190),(4800,1208,1208,'OP_ReadyForTakeOffMsg',191),(4801,1208,1208,'OP_ShowIllusionsMsg',192),(4802,1208,1208,'OP_HideIllusionsMsg',193),(4803,1208,1208,'OP_ExamineItemRequestMsg',194),(4804,1208,1208,'OP_ReadBookPageMsg',195),(4805,1208,1208,'OP_DefaultGroupOptionsRequestMsg',196),(4806,1208,1208,'OP_DefaultGroupOptionsMsg',197),(4807,1208,1208,'OP_GroupOptionsMsg',198),(4808,1208,1208,'OP_DisplayGroupOptionsScreenMsg',199),(4809,1208,1208,'OP_PetOptions',200),(4810,1208,1208,'OP_DisplayInnVisitScreenMsg',201),(4811,1208,1208,'OP_DumpSchedulerMsg',202),(4812,1208,1208,'OP_LSCheckAcctLockMsg',203),(4813,1208,1208,'OP_WSAcctLockStatusMsg',204),(4814,1208,1208,'OP_RequestHelpRepathMsg',205),(4815,1208,1208,'OP_RequestTargetLocMsg',206),(4816,1208,1208,'OP_UpdateMotdMsg',207),(4817,1208,1208,'OP_DestUpdateReq',209),(4818,1208,1208,'OP_PerformPlayerKnockbackMsg',212),(4819,1208,1208,'OP_PerformCameraShakeMsg',213),(4820,1208,1208,'OP_PopulateSkillMapsMsg',214),(4821,1208,1208,'OP_CancelledFeignMsg',215),(4822,1208,1208,'OP_SysClient',217),(4823,1208,1208,'OP_ShowCreateFromRecipeUIMsg',218),(4824,1208,1208,'OP_CancelCreateFromRecipeMsg',219),(4825,1208,1208,'OP_BeginItemCreationMsg',220),(4826,1208,1208,'OP_StopItemCreationMsg',221),(4827,1208,1208,'OP_ShowItemCreationProcessUIMsg',222),(4828,1208,1208,'OP_UpdateItemCreationProcessUIMsg',223),(4829,1208,1208,'OP_DisplayTSEventReactionMsg',224),(4830,1208,1208,'OP_ShowRecipeBookMsg',225),(4831,1208,1208,'OP_KnowledgebaseRequestMsg',226),(4832,1208,1208,'OP_KnowledgebaseResponseMsg',227),(4833,1208,1208,'OP_CSTicketHeaderRequestMsg',228),(4834,1208,1208,'OP_CSTicketInfoMsg',229),(4835,1208,1208,'OP_CSTicketCommentRequestMsg',230),(4836,1208,1208,'OP_CSTicketCommentResponseMsg',231),(4837,1208,1208,'OP_CSTicketCreateMsg',232),(4838,1208,1208,'OP_CSTicketAddCommentMsg',233),(4839,1208,1208,'OP_CSTicketDeleteMsg',234),(4840,1208,1208,'OP_CSTicketChangeNotificationMsg',235),(4841,1208,1208,'OP_WorldDataUpdateMsg',236),(4842,1208,1208,'OP_KnownLanguagesMsg',237),(4843,1208,1208,'OP_LsRequestClientCrashLogMsg',238),(4844,1208,1208,'OP_LsClientBaselogReplyMsg',239),(4845,1208,1208,'OP_LsClientCrashlogReplyMsg',240),(4846,1208,1208,'OP_LsClientAlertlogReplyMsg',241),(4847,1208,1208,'OP_LsClientVerifylogReplyMsg',242),(4848,1208,1208,'OP_ClientTeleportToLocationMsg',243),(4849,1208,1208,'OP_UpdateClientPredFlagsMsg',244),(4850,1208,1208,'OP_ChangeServerControlFlagMsg',245),(4851,1208,1208,'OP_CSToolsRequestMsg',246),(4852,1208,1208,'OP_CSToolsResponseMsg',247),(4853,1208,1208,'OP_AddSocialStructureStandingMsg',248),(4854,1208,1208,'OP_CreateBoatTransportsMsg',249),(4855,1208,1208,'OP_PositionBoatTransportMsg',250),(4856,1208,1208,'OP_MigrateBoatTransportMsg',251),(4857,1208,1208,'OP_MigrateBoatTransportReplyMsg',252),(4858,1208,1208,'OP_DisplayDebugNLLPointsMsg',253),(4859,1208,1208,'OP_ExamineInfoRequestMsg',254),(4860,1208,1208,'OP_QuickbarInitMsg',255),(4861,1208,1208,'OP_QuickbarUpdateMsg',256),(4862,1208,1208,'OP_MacroInitMsg',257),(4863,1208,1208,'OP_MacroUpdateMsg',258),(4864,1208,1208,'OP_QuestionnaireMsg',259),(4865,1208,1208,'OP_LevelChangedMsg',260),(4866,1208,1208,'OP_SpellGainedMsg',261),(4867,1208,1208,'OP_EncounterBrokenMsg',262),(4868,1208,1208,'OP_OnscreenMsgMsg',263),(4869,1208,1208,'OP_DisplayWarningMsg',264),(4870,1208,1208,'OP_ModifyGuildMsg',265),(4871,1208,1208,'OP_GuildEventMsg',266),(4872,1208,1208,'OP_GuildEventAddMsg',267),(4873,1208,1208,'OP_GuildEventActionMsg',268),(4874,1208,1208,'OP_GuildEventListMsg',269),(4875,1208,1208,'OP_RequestGuildEventDetailsMsg',270),(4876,1208,1208,'OP_GuildEventDetailsMsg',271),(4877,1208,1208,'OP_RequestGuildInfoMsg',272),(4878,1208,1208,'OP_GuildBankActionMsg',273),(4879,1208,1208,'OP_GuildBankActionResponseMsg',274),(4880,1208,1208,'OP_GuildBankItemDetailsRequestMsg',275),(4881,1208,1208,'OP_GuildBankItemDetailsResponseMs',276),(4882,1208,1208,'OP_GuildBankUpdateMsg',277),(4883,1208,1208,'OP_GuildBankEventListMsg',278),(4884,1208,1208,'OP_RequestGuildBankEventDetailsMs',279),(4885,1208,1208,'OP_RewardPackMsg',280),(4886,1208,1208,'OP_RenameGuildMsg',281),(4887,1208,1208,'OP_ZoneToFriendRequestMsg',282),(4888,1208,1208,'OP_ZoneToFriendReplyMsg',283),(4889,1208,1208,'OP_ChatCreateChannelMsg',284),(4890,1208,1208,'OP_ChatJoinChannelMsg',285),(4891,1208,1208,'OP_ChatWhoChannelMsg',286),(4892,1208,1208,'OP_ChatLeaveChannelMsg',287),(4893,1208,1208,'OP_ChatTellChannelMsg',288),(4894,1208,1208,'OP_ChatTellUserMsg',289),(4895,1208,1208,'OP_ChatToggleFriendMsg',290),(4896,1208,1208,'OP_BrokerAddBag',291),(4897,1208,1208,'OP_BrokerRemoveBag',292),(4898,1208,1208,'OP_ChatToggleIgnoreMsg',293),(4899,1208,1208,'OP_ChatSendFriendsMsg',294),(4900,1208,1208,'OP_ChatSendIgnoresMsg',295),(4901,1208,1208,'OP_QuestReward',319),(4902,1208,1208,'OP_ChatFiltersMsg',334),(4903,1208,1208,'OP_MailGetMessageMsg',337),(4904,1208,1208,'OP_MailSendMessageMsg',338),(4905,1208,1208,'OP_MailDeleteMessageMsg',339),(4906,1208,1208,'OP_MailGetHeadersReplyMsg',340),(4907,1208,1208,'OP_MailGetMessageReplyMsg',341),(4908,1208,1208,'OP_MailSendMessageReplyMsg',342),(4909,1208,1208,'OP_MailCommitSendMessageMsg',343),(4910,1208,1208,'OP_MailSendSystemMessageMsg',344),(4911,1208,1208,'OP_MailRemoveAttachFromMailMsg',345),(4912,1208,1208,'OP_WaypointRequestMsg',347),(4913,1208,1208,'OP_WaypointReplyMsg',348),(4914,1208,1208,'OP_WaypointSelectMsg',349),(4915,1208,1208,'OP_WaypointUpdateMsg',350),(4916,1208,1208,'OP_CharNameChangedMsg',351),(4917,1208,1208,'OP_ShowZoneTeleporterDestinations',352),(4918,1208,1208,'OP_SelectZoneTeleporterDestinatio',353),(4919,1208,1208,'OP_ReloadLocalizedTxtMsg',354),(4920,1208,1208,'OP_RequestGuildMembershipMsg',355),(4921,1208,1208,'OP_GuildMembershipResponseMsg',356),(4922,1208,1208,'OP_LeaveGuildNotifyMsg',357),(4923,1208,1208,'OP_JoinGuildNotifyMsg',358),(4924,1208,1208,'OP_AvatarUpdateMsg',359),(4925,1208,1208,'OP_BioUpdateMsg',361),(4926,1208,1208,'OP_InspectPlayerMsg',362),(4927,1208,1208,'OP_WSServerLockMsg',363),(4928,1208,1208,'OP_LSServerLockMsg',364),(4929,1208,1208,'OP_WSServerHideMsg',365),(4930,1208,1208,'OP_CsCategoryRequestMsg',366),(4931,1208,1208,'OP_CsCategoryResponseMsg',367),(4932,1208,1208,'OP_KnowledgeWindowSlotMappingMsg',368),(4933,1208,1208,'OP_AFKUpdateMsg',369),(4934,1208,1208,'OP_AnonUpdateMsg',370),(4935,1208,1208,'OP_UpdateActivePublicZonesMsg',371),(4936,1208,1208,'OP_UnknownNpcMsg',372),(4937,1208,1208,'OP_PromoFlagsDetailsMsg',373),(4938,1208,1208,'OP_ConsignViewCreateMsg',374),(4939,1208,1208,'OP_ConsignViewGetPageMsg',375),(4940,1208,1208,'OP_ConsignViewReleaseMsg',376),(4941,1208,1208,'OP_ConsignRemoveItemsMsg',377),(4942,1208,1208,'OP_UpdateDebugRadiiMsg',378),(4943,1208,1208,'OP_ReportMsg',379),(4944,1208,1208,'OP_UpdateRaidMsg',380),(4945,1208,1208,'OP_ConsignViewSortMsg',382),(4946,1208,1208,'OP_TitleUpdateMsg',383),(4947,1208,1208,'OP_ClientFellMsg',384),(4948,1208,1208,'OP_ClientInDeathRegionMsg',385),(4949,1208,1208,'OP_CampClientMsg',386),(4950,1208,1208,'OP_CSToolAccessResponseMsg',387),(4951,1208,1208,'OP_TrackingUpdateMsg',388),(4952,1208,1208,'OP_BeginTrackingMsg',389),(4953,1208,1208,'OP_StopTrackingMsg',390),(4954,1208,1208,'OP_GetAvatarAccessRequestForCSToo',392),(4955,1208,1208,'OP_AdvancementRequestMsg',393),(4956,1208,1208,'OP_MapFogDataInitMsg',394),(4957,1208,1208,'OP_MapFogDataUpdateMsg',395),(4958,1208,1208,'OP_CloseGroupInviteWindowMsg',396),(4959,1208,1208,'OP_UpdateGroupMemberDataMsg',397),(4960,1208,1208,'OP_WorldPingMsg',398),(4961,1208,1208,'OP_MoveLogUpdateMsg',389),(4962,1208,1208,'OP_OfferQuestMsg',400),(4963,1208,1208,'OP_WorldShutdownUpdateMsg',402),(4964,1208,1208,'OP_DisplayMailScreenMsg',403),(4965,1208,1208,'OP_ClientIdleBeginMsg',404),(4966,1208,1208,'OP_ClientIdleEndMsg',405),(4967,1208,1208,'OP_PurchaseConsignmentLoreCheckRe',406),(4968,1208,1208,'OP_NotifyApprenticeStoppedMentori',407),(4969,1208,1208,'OP_CorruptedClientMsg',408),(4970,1208,1208,'OP_WorldDataChangeMsg',409),(4971,1208,1208,'OP_MailEventNotificationMsg',410),(4972,1208,1208,'OP_RestartZoneMsg',411),(4973,1208,1208,'OP_FlightPathsMsg',412),(4974,1208,1208,'OP_CharacterLinkdeadMsg',413),(4975,1208,1208,'OP_CharTransferStartRequestMsg',414),(4976,1208,1208,'OP_CharTransferStartReplyMsg',415),(4977,1208,1208,'OP_CharTransferRequestMsg',416),(4978,1208,1208,'OP_CharTransferReplyMsg',417),(4979,1208,1208,'OP_CharTransferRollbackRequestMsg',418),(4980,1208,1208,'OP_CharTransferCommitRequestMsg',419),(4981,1208,1208,'OP_CharTransferRollbackReplyMsg',420),(4982,1208,1208,'OP_CharTransferCommitReplyMsg',421),(4983,1208,1208,'OP_GetCharacterSerializedRequestM',422),(4984,1208,1208,'OP_GetCharacterSerializedReplyMsg',423),(4985,1208,1208,'OP_CreateCharFromCBBRequestMsg',424),(4986,1208,1208,'OP_CreateCharFromCBBReplyMsg',425),(4987,1208,1208,'OP_HousingDataChangedMsg',426),(4988,1208,1208,'OP_HousingRestoreMsg',427),(4989,1208,1208,'OP_AuctionItem',428),(4990,1208,1208,'OP_AuctionItemReply',429),(4991,1208,1208,'OP_AuctionCoin',430),(4992,1208,1208,'OP_AuctionCoinReply',431),(4993,1208,1208,'OP_AuctionCharacter',432),(4994,1208,1208,'OP_AuctionCharacterReply',433),(4995,1208,1208,'OP_AuctionCommitMsg',434),(4996,1208,1208,'OP_AuctionAbortMsg',435),(4997,1208,1208,'OP_CharTransferValidateRequestMsg',436),(4998,1208,1208,'OP_CharTransferValidateReplyMsg',437),(4999,1208,1208,'OP_RaceRestrictionMsg',438),(5000,1208,1208,'OP_SetInstanceDisplayNameMsg',439),(5001,1208,1208,'OP_GetAuctionAssetIDMsg',440),(5002,1208,1208,'OP_GetAuctionAssetIDReplyMsg',441),(5003,1208,1208,'OP_ResendWorldChannelsMsg',442),(5004,1208,1208,'OP_DisplayExchangeScreenMsg',443),(5005,1208,1208,'OP_ArenaGameTypesMsg',444),(5006,1208,1208,'OP_AuditAuctionEventMsg',445),(5007,1208,1208,'OP_InviteRequestMsg',446),(5008,1208,1208,'OP_InviteResponseMsg',447),(5009,1208,1208,'OP_InviteTargetResponseMsg',448),(5010,1208,1208,'OP_InspectPlayerRequestMsg',449),(5011,1208,1208,'OP_DispatchMsg',450),(5012,1208,1208,'OP_DisplayEventMsg',451),(5013,1208,1208,'OP_PrePossessionMsg',452),(5014,1208,1208,'OP_PostPossessionMsg',453),(5015,1208,1208,'OP_ArenaCreate',455),(5016,1208,1208,'OP_ArenaList',456),(5017,1208,1208,'OP_ArenaWindow',464),(5018,1208,1208,'OP_HouseItemsList',482),(5019,1208,1208,'OP_CurrentPet',484),(5020,1208,1208,'OP_AdventureList',487),(5021,1208,1208,'OP_CancelSpellCast',488),(5022,1208,1208,'OP_UpdateTitleCmd',493),(5023,1208,1208,'OP_AttackAllowed',499),(5024,1208,1208,'OP_AttackNotAllowed',500),(5025,1208,1208,'OP_BagOptions',501),(5026,1208,1208,'OP_LFGGroupSearch',503),(5027,1208,1208,'OP_CharacterHousingList',506),(5028,1208,1208,'OP_DressingRoom',509),(5029,1208,1208,'OP_PlayLon',510),(5030,1208,1208,'OP_SkillInfoRequest',513),(5031,1208,1208,'OP_SkillInfoResponse',514),(5032,1208,1208,'OP_LFGUpdateMsg',517),(5033,1208,1208,'OP_BadLanguageFilter',518),(5034,1208,1208,'OP_VoiceChatChannel',519),(5035,1208,1208,'OP_MapRequest',520),(5036,1208,1208,'OP_MarketFundsUpdate',525),(5037,1208,1208,'OP_UIEvent',526),(5038,1208,1208,'OP_MarketAddFundsRequest',527),(5039,1208,1208,'OP_MarketAddFundsReply',528),(5040,1208,1208,'OP_MarketPurchase',530),(5041,1208,1208,'OP_MarketPlacePrices',531),(5042,1208,1208,'OP_MarketPlaceItems',534),(5043,1208,1208,'OP_RecipeBook',535),(5044,1208,1208,'OP_CreateCharacterDungeon',544),(5045,1208,1208,'OP_DungeonMakerEnter',545),(5046,1208,1208,'OP_DungeonMakerItemRequest',547),(5047,1208,1208,'OP_CharacterCreatedDungeons',548),(5048,1208,1208,'OP_DungeonMakerToolboxList',549),(5049,1208,1208,'OP_DungeonMakerUnknown',550),(5050,1208,1208,'OP_DungeonMakerUnknown1',551),(5051,1208,1208,'OP_PlayerPollPopup',553),(5052,1208,1208,'OP_PlayerPollAnswer',554),(5053,1208,1208,'OP_MentorPopup',555),(5054,1208,1208,'OP_LoadWelcomeWindow',557),(5055,1208,1208,'OP_OpenCharCust',558),(5056,1208,1208,'OP_SubmitCharCust',559),(5057,1208,1208,'OP_QueAllBgSolo',561),(5058,1208,1208,'OP_ZoneBgInstanceList',563),(5059,1208,1208,'OP_WorldTravelAvail',567),(5060,1208,1208,'OP_GarbagePacket',571),(5061,1208,1208,'OP_LoadCalendarEvents',572),(5062,1208,1208,'OP_VideoUploaded',573),(5063,1208,1208,'OP_SavageBarInitMsg',574),(5064,1208,1208,'OP_PetOptionsResponse',575),(5065,1208,1208,'OP_DungeonMakerItemResponse',576),(5066,1208,1208,'OP_CharacterMounts',578),(5067,1208,1208,'OP_EqBetaCopyRequest',588),(5068,1208,1208,'OP_EqHearChatCmd',589),(5069,1208,1208,'OP_EqDisplayTextCmd',590),(5070,1208,1208,'OP_EqCreateGhostCmd',591),(5071,1208,1208,'OP_EqCreateWidgetCmd',592),(5072,1208,1208,'OP_EqCreateSignWidgetCmd',593),(5073,1208,1208,'OP_EqDestroyGhostCmd',594),(5074,1208,1208,'OP_EqUpdateGhostCmd',595),(5075,1208,1208,'OP_EqSetControlGhostCmd',596),(5076,1208,1208,'OP_EqSetPOVGhostCmd',597),(5077,1208,1208,'OP_EqHearCombatCmd',598),(5078,1208,1208,'OP_EqHearSpellCastCmd',599),(5079,1208,1208,'OP_EQHearProcCmd',600),(5080,1208,1208,'OP_EQHearResEffectCmd',601),(5081,1208,1208,'OP_EqHearSpellInterruptCmd',602),(5082,1208,1208,'OP_EqHearSpellFizzleCmd',603),(5083,1208,1208,'OP_EqHearConsiderCmd',604),(5084,1208,1208,'OP_EqUpdateSubClassesCmd',605),(5085,1208,1208,'OP_EqCreateListBoxCmd',606),(5086,1208,1208,'OP_EqSetDebugPathPointsCmd',607),(5087,1208,1208,'OP_EqCannedEmoteCmd',609),(5088,1208,1208,'OP_EqStateCmd',610),(5089,1208,1208,'OP_EqPlaySoundCmd',611),(5090,1208,1208,'OP_EqPlaySound3DCmd',612),(5091,1208,1208,'OP_EqPlayVoiceCmd',613),(5092,1208,1208,'OP_EqHearDrowningCmd',614),(5093,1208,1208,'OP_EqHearDeathCmd',615),(5094,1208,1208,'OP_EqGroupMemberRemovedCmd',616),(5095,1208,1208,'OP_EqHearChainEffectCmd',617),(5096,1208,1208,'OP_EqReceiveOfferCmd',618),(5097,1208,1208,'OP_EqInspectPCResultsCmd',619),(5098,1208,1208,'OP_EqDrawablePathGraphCmd',620),(5099,1208,1208,'OP_EqDialogOpenCmd',621),(5100,1208,1208,'OP_EqDialogCloseCmd',622),(5101,1208,1208,'OP_EqFactionUpdateCmd',623),(5102,1208,1208,'OP_EqCollectionUpdateCmd',624),(5103,1208,1208,'OP_EqCollectionFilterCmd',625),(5104,1208,1208,'OP_EqCollectionItemCmd',626),(5105,1208,1208,'OP_EqQuestJournalUpdateCmd',627),(5106,1208,1208,'OP_EqMentoring',628),(5107,1208,1208,'OP_EqQuestJournalReplyCmd',629),(5108,1208,1208,'OP_EqQuestGroupCmd',630),(5109,1208,1208,'OP_EqUpdateMerchantCmd',631),(5110,1208,1208,'OP_EqUpdateStoreCmd',632),(5111,1208,1208,'OP_EqUpdatePlayerTradeCmd',633),(5112,1208,1208,'OP_EqHelpPathCmd',634),(5113,1208,1208,'OP_EqHelpPathClearCmd',635),(5114,1208,1208,'OP_EqUpdateBankCmd',636),(5115,1208,1208,'OP_EqExamineInfoCmd',637),(5116,1208,1208,'OP_EqCloseWindowCmd',638),(5117,1208,1208,'OP_EqUpdateLootCmd',639),(5118,1208,1208,'OP_EqJunctionListCmd',640),(5119,1208,1208,'OP_EqShowDeathWindowCmd',641),(5120,1208,1208,'OP_EqDisplaySpellFailCmd',642),(5121,1208,1208,'OP_EqSpellCastStartCmd',643),(5122,1208,1208,'OP_EqSpellCastEndCmd',644),(5123,1208,1208,'OP_EqResurrectedCmd',645),(5124,1208,1208,'OP_EqChoiceWinCmd',646),(5125,1208,1208,'OP_EqSetDefaultVerbCmd',647),(5126,1208,1208,'OP_EqInstructionWindowCmd',648),(5127,1208,1208,'OP_EqInstructionWindowCloseCmd',649),(5128,1208,1208,'OP_EqInstructionWindowGoalCmd',650),(5129,1208,1208,'OP_EqInstructionWindowTaskCmd',651),(5130,1208,1208,'OP_EqEnableGameEventCmd',652),(5131,1208,1208,'OP_EqShowWindowCmd',653),(5132,1208,1208,'OP_EqEnableWindowCmd',654),(5133,1208,1208,'OP_EqFlashWindowCmd',655),(5134,1208,1208,'OP_EqHearPlayFlavorCmd',657),(5135,1208,1208,'OP_EqUpdateSignWidgetCmd',658),(5136,1208,1208,'OP_EqDebugPVDCmd',659),(5137,1208,1208,'OP_EqShowBookCmd',660),(5138,1208,1208,'OP_EqQuestionnaireCmd',661),(5139,1208,1208,'OP_EqGetProbsCmd',663),(5140,1208,1208,'OP_EqHearHealCmd',664),(5141,1208,1208,'OP_EqChatChannelUpdateCmd',665),(5142,1208,1208,'OP_EqWhoChannelQueryReplyCmd',666),(5143,1208,1208,'OP_EqAvailWorldChannelsCmd',667),(5144,1208,1208,'OP_EqUpdateTargetCmd',668),(5145,1208,1208,'OP_BrokerSellList',669),(5146,1208,1208,'OP_EqConsignmentItemsCmd',670),(5147,1208,1208,'OP_EqStartBrokerCmd',672),(5148,1208,1208,'OP_EqMapExplorationCmd',673),(5149,1208,1208,'OP_EqStoreLogCmd',674),(5150,1208,1208,'OP_EqSpellMoveToRangeAndRetryCmd',675),(5151,1208,1208,'OP_EqUpdatePlayerMailCmd',676),(5152,1208,1208,'OP_GuildStatusUpdate',679),(5153,1208,1208,'OP_EqArenaResultsCmd',680),(5154,1208,1208,'OP_EqGuildBankEventActionCmd',681),(5155,1208,1208,'OP_EqGuildBankExamineInfoCmd',682),(5156,1208,1208,'OP_EqHearSpellNoLandCmd',683),(5157,1208,1208,'OP_Lottery',684),(5158,1208,1208,'OP_GuildRecruitingMemberInfo',685),(5159,1208,1208,'OP_GuildRecruiting',686),(5160,1208,1208,'OP_GuildRecruitingDetails',687),(5161,1208,1208,'OP_GuildRecruitingImage',688),(5162,1208,1208,'OP_TradeskillList',706),(5163,1208,1208,'OP_CharRenamed',690),(5164,1208,1208,'OP_UseAdornment',700),(5165,1208,1208,'OP_ExpPurchWindow',706),(5166,1208,1208,'OP_PointOfInterest',710),(5167,1208,1208,'OP_PointOfInterest2',711),(5168,1208,1208,'OP_TraitsList',712),(5169,1208,1208,'OP_CustomizeHouseDisplay',715),(5170,1208,1208,'OP_VoiceChatServer',716),(5171,1208,1208,'OP_SupplyDepot',720),(5172,1208,1208,'OP_EQHearThreatCmd',721),(5173,1208,1208,'OP_RecipeList',722),(5174,1208,1208,'OP_Research',723),(5175,1208,1208,'OP_CharacterCurrency',724),(5176,1208,1208,'OP_CharacterAchievements',725),(5177,1208,1208,'OP_AchievementUpdateMsg',726),(5178,1208,1208,'OP_EQHearDispellCmd',727),(5179,1208,1208,'OP_JournalQuestStoryline',728),(5180,1208,1208,'OP_DungeonPlayAsAvatarList',729),(5181,1208,1208,'OP_DungeonPlayAsAvatarSelected',730),(5182,1208,1208,'OP_MercHireWindow',731),(5183,1208,1208,'OP_MercUnknown',732),(5184,1208,1208,'OP_Unknown',748),(5657,1096,1096,'OP_RecipeBook',999),(5658,1045,1046,'OP_RecipeBook',999),(5659,1008,1011,'OP_RecipeBook',999),(5660,908,927,'OP_RecipeBook',999),(5661,839,844,'OP_RecipeBook',999),(5662,0,0,'OP_RecipeBook',999),(5663,57000,57002,'OP_LoginRequestMsg',0),(5664,57000,57002,'OP_LoginByNumRequestMsg',1),(5665,57000,57002,'OP_WSLoginRequestMsg',2),(5666,57000,57002,'OP_ESLoginRequestMsg',3),(5667,57000,57002,'OP_LoginReplyMsg',4),(5668,57000,57002,'OP_WSStatusReplyMsg',5),(5669,57000,57002,'OP_WorldStatusChangeMsg',6),(5670,57000,57002,'OP_AllWSDescRequestMsg',7),(5671,57000,57002,'OP_WorldListMsg',8),(5672,57000,57002,'OP_AllCharactersDescRequestMsg',9),(5673,57000,57002,'OP_AllCharactersDescReplyMsg',10),(5674,57000,57002,'OP_CreateCharacterRequestMsg',11),(5675,57000,57002,'OP_CreateCharacterReplyMsg',12),(5676,57000,57002,'OP_WSCreateCharacterRequestMsg',13),(5677,57000,57002,'OP_WSCreateCharacterReplyMsg',14),(5678,57000,57002,'OP_ReskinCharacterRequestMsg',15),(5679,57000,57002,'OP_DeleteCharacterRequestMsg',16),(5680,57000,57002,'OP_DeleteCharacterReplyMsg',17),(5681,57000,57002,'OP_PlayCharacterRequestMsg',18),(5682,57000,57002,'OP_PlayCharacterReplyMsg',19),(5683,57000,57002,'OP_ExpectClientAsCharacterReplyMs',22),(5684,57000,57002,'OP_ServerPlayCharacterRequestMsg',23),(5685,57000,57002,'OP_ServerPlayCharacterReplyMsg',24),(5686,57000,57002,'OP_ESInitMsg',25),(5687,57000,57002,'OP_ESReadyForClientsMsg',26),(5688,57000,57002,'OP_CreateZoneInstanceMsg',29),(5689,57000,57002,'OP_ZoneInstanceCreateReplyMsg',30),(5690,57000,57002,'OP_ZoneInstanceDestroyedMsg',31),(5691,57000,57002,'OP_ExpectClientAsCharacterRequest',32),(5692,57000,57002,'OP_ZoneInfoMsg',33),(5693,57000,57002,'OP_DoneLoadingZoneResourcesMsg',34),(5694,57000,57002,'OP_DoneSendingInitialEntitiesMsg',35),(5695,57000,57002,'OP_DoneLoadingEntityResourcesMsg',36),(5696,57000,57002,'OP_PredictionUpdateMsg',37),(5697,57000,57002,'OP_UpdatePositionMsg',39),(5698,57000,57002,'OP_SetRemoteCmdsMsg',41),(5699,57000,57002,'OP_RemoteCmdMsg',42),(5700,57000,57002,'OP_GameWorldTimeMsg',43),(5701,57000,57002,'OP_MOTDMsg',44),(5702,57000,57002,'OP_ZoneMOTDMsg',45),(5703,57000,57002,'OP_AvatarCreatedMsg',46),(5704,57000,57002,'OP_AvatarDestroyedMsg',47),(5705,57000,57002,'OP_RequestCampMsg',50),(5706,57000,57002,'OP_CampStartedMsg',51),(5707,57000,57002,'OP_CampAbortedMsg',52),(5708,57000,57002,'OP_WhoQueryRequestMsg',53),(5709,57000,57002,'OP_WhoQueryReplyMsg',54),(5710,57000,57002,'OP_MonitorReplyMsg',55),(5711,57000,57002,'OP_MonitorCharacterListMsg',56),(5712,57000,57002,'OP_MonitorCharacterListRequestMsg',57),(5713,57000,57002,'OP_ClientCmdMsg',58),(5714,57000,57002,'OP_DispatchESMsg',59),(5715,57000,57002,'OP_DispatchClientCmdMsg',60),(5716,57000,57002,'OP_UpdateTargetMsg',61),(5717,57000,57002,'OP_UpdateTargetLocMsg',62),(5718,57000,57002,'OP_UpdateCharacterSheetMsg',63),(5719,57000,57002,'OP_CharacterPet',64),(5720,57000,57002,'OP_CharacterMerc',65),(5721,57000,57002,'OP_UpdateSpellBookMsg',66),(5722,57000,57002,'OP_UpdateInventoryMsg',68),(5723,57000,57002,'OP_AfterInvSpellUpdate',69),(5724,57000,57002,'OP_UpdateRecipeBookMsg',70),(5725,57000,57002,'OP_RequestRecipeDetailsMsg',71),(5726,57000,57002,'OP_RecipeDetailsMsg',72),(5727,57000,57002,'OP_UpdateSkillBookMsg',73),(5728,57000,57002,'OP_UpdateSkillsMsg',74),(5729,57000,57002,'OP_UpdateOpportunityMsg',75),(5730,57000,57002,'OP_ChangeZoneMsg',77),(5731,57000,57002,'OP_ClientTeleportRequestMsg',78),(5732,57000,57002,'OP_TeleportWithinZoneMsg',79),(5733,57000,57002,'OP_TeleportWithinZoneNoReloadMsg',80),(5734,57000,57002,'OP_MigrateClientToZoneRequestMsg',81),(5735,57000,57002,'OP_MigrateClientToZoneReplyMsg',82),(5736,57000,57002,'OP_ReadyToZoneMsg',84),(5737,57000,57002,'OP_RemoveClientFromGroupMsg',85),(5738,57000,57002,'OP_RemoveGroupFromGroupMsg',86),(5739,57000,57002,'OP_MakeGroupLeaderMsg',87),(5740,57000,57002,'OP_GroupCreatedMsg',88),(5741,57000,57002,'OP_GroupDestroyedMsg',89),(5742,57000,57002,'OP_GroupMemberAddedMsg',90),(5743,57000,57002,'OP_GroupMemberRemovedMsg',91),(5744,57000,57002,'OP_GroupRemovedFromGroupMsg',92),(5745,57000,57002,'OP_GroupLeaderChangedMsg',93),(5746,57000,57002,'OP_GroupResendOOZDataMsg',94),(5747,57000,57002,'OP_GroupSettingsChangedMsg',95),(5748,57000,57002,'OP_OutOfZoneMemberDataMsg',96),(5749,57000,57002,'OP_SendLatestRequestMsg',97),(5750,57000,57002,'OP_ClearDataMsg',98),(5751,57000,57002,'OP_SetSocialMsg',99),(5752,57000,57002,'OP_ESStatusMsg',100),(5753,57000,57002,'OP_ESZoneInstanceStatusMsg',101),(5754,57000,57002,'OP_ZonesStatusRequestMsg',102),(5755,57000,57002,'OP_ZonesStatusMsg',103),(5756,57000,57002,'OP_ESWeatherRequestMsg',104),(5757,57000,57002,'OP_ESWeatherRequestEndMsg',105),(5758,57000,57002,'OP_DialogSelectMsg',109),(5759,57000,57002,'OP_DialogCloseMsg',110),(5760,57000,57002,'OP_RemoveSpellEffectMsg',111),(5761,57000,57002,'OP_RemoveConcentrationMsg',112),(5762,57000,57002,'OP_QuestJournalOpenMsg',113),(5763,57000,57002,'OP_QuestJournalInspectMsg',114),(5764,57000,57002,'OP_QuestJournalSetVisibleMsg',115),(5765,57000,57002,'OP_QuestJournalWaypointMsg',116),(5766,57000,57002,'OP_CreateGuildRequestMsg',119),(5767,57000,57002,'OP_CreateGuildReplyMsg',120),(5768,57000,57002,'OP_GuildsayMsg',121),(5769,57000,57002,'OP_FellowshipExpMsg',122),(5770,57000,57002,'OP_DeleteGuildMsg',123),(5771,57000,57002,'OP_GuildUpdateMsg',124),(5772,57000,57002,'OP_ConsignmentCloseStoreMsg',125),(5773,57000,57002,'OP_ConsignItemRequestMsg',126),(5774,57000,57002,'OP_ConsignItemResponseMsg',127),(5775,57000,57002,'OP_PurchaseConsignmentRequestMsg',128),(5776,57000,57002,'OP_LikeOption',135),(5777,57000,57002,'OP_PublishHouse',138),(5778,57000,57002,'OP_PlayerMadeInstacnesScreen',139),(5779,57000,57002,'OP_PlayerMadeInstances',140),(5780,57000,57002,'OP_HouseDeletedRemotelyMsg',141),(5781,57000,57002,'OP_UpdateHouseDataMsg',142),(5782,57000,57002,'OP_UpdateHouseAccessDataMsg',143),(5783,57000,57002,'OP_PlayerHouseBaseScreenMsg',144),(5784,57000,57002,'OP_PlayerHousePurchaseScreenMsg',145),(5785,57000,57002,'OP_PlayerHouseAccessUpdateMsg',146),(5786,57000,57002,'OP_PlayerHouseDisplayStatusMsg',147),(5787,57000,57002,'OP_PlayerHouseCloseUIMsg',148),(5788,57000,57002,'OP_BuyPlayerHouseMsg',149),(5789,57000,57002,'OP_BuyPlayerHouseTintMsg',150),(5790,57000,57002,'OP_CollectAllHouseItemsMsg',151),(5791,57000,57002,'OP_RelinquishHouseMsg',152),(5792,57000,57002,'OP_EnterHouseMsg',153),(5793,57000,57002,'OP_ExitHouseMsg',154),(5794,57000,57002,'OP_HouseDefaultAccessSetMsg',155),(5795,57000,57002,'OP_HouseAccessSetMsg',156),(5796,57000,57002,'OP_HouseAccessRemoveMsg',157),(5797,57000,57002,'OP_PayHouseUpkeepMsg',158),(5798,57000,57002,'OP_MoveableObjectPlacementCriteri',159),(5799,57000,57002,'OP_EnterMoveObjectModeMsg',160),(5800,57000,57002,'OP_PositionMoveableObject',161),(5801,57000,57002,'OP_CancelMoveObjectModeMsg',162),(5802,57000,57002,'OP_ShaderCustomizationMsg',163),(5803,57000,57002,'OP_ReplaceableSubMeshesMsg',164),(5804,57000,57002,'OP_HouseCustomizationScreenMsg',165),(5805,57000,57002,'OP_CustomizationPurchaseRequestMs',166),(5806,57000,57002,'OP_CustomizationSetRequestMsg',167),(5807,57000,57002,'OP_CustomizationReplyMsg',168),(5808,57000,57002,'OP_TintWidgetsMsg',169),(5809,57000,57002,'OP_ExamineConsignmentRequestMsg',170),(5810,57000,57002,'OP_ExamineConsignmentResponseMsg',171),(5811,57000,57002,'OP_UISettingsResponseMsg',172),(5812,57000,57002,'OP_UIResetMsg',173),(5813,57000,57002,'OP_KeymapLoadMsg',174),(5814,57000,57002,'OP_KeymapNoneMsg',175),(5815,57000,57002,'OP_KeymapDataMsg',176),(5816,57000,57002,'OP_KeymapSaveMsg',177),(5817,57000,57002,'OP_DispatchSpellCmdMsg',178),(5818,57000,57002,'OP_EntityVerbsRequestMsg',179),(5819,57000,57002,'OP_EntityVerbsReplyMsg',180),(5820,57000,57002,'OP_EntityVerbsVerbMsg',181),(5821,57000,57002,'OP_ChatRelationshipUpdateMsg',183),(5822,57000,57002,'OP_LootItemsRequestMsg',184),(5823,57000,57002,'OP_StoppedLootingMsg',185),(5824,57000,57002,'OP_SitMsg',186),(5825,57000,57002,'OP_StandMsg',187),(5826,57000,57002,'OP_SatMsg',188),(5827,57000,57002,'OP_StoodMsg',189),(5828,57000,57002,'OP_ClearForTakeOffMsg',190),(5829,57000,57002,'OP_ReadyForTakeOffMsg',191),(5830,57000,57002,'OP_ShowIllusionsMsg',192),(5831,57000,57002,'OP_HideIllusionsMsg',193),(5832,57000,57002,'OP_ExamineItemRequestMsg',194),(5833,57000,57002,'OP_ReadBookPageMsg',195),(5834,57000,57002,'OP_DefaultGroupOptionsRequestMsg',196),(5835,57000,57002,'OP_DefaultGroupOptionsMsg',197),(5836,57000,57002,'OP_GroupOptionsMsg',198),(5837,57000,57002,'OP_DisplayGroupOptionsScreenMsg',199),(5838,57000,57002,'OP_PetOptions',200),(5839,57000,57002,'OP_DisplayInnVisitScreenMsg',201),(5840,57000,57002,'OP_DumpSchedulerMsg',202),(5841,57000,57002,'OP_LSCheckAcctLockMsg',203),(5842,57000,57002,'OP_WSAcctLockStatusMsg',204),(5843,57000,57002,'OP_RequestHelpRepathMsg',205),(5844,57000,57002,'OP_RequestTargetLocMsg',206),(5845,57000,57002,'OP_UpdateMotdMsg',207),(5846,57000,57002,'OP_DestUpdateReq',209),(5847,57000,57002,'OP_PerformPlayerKnockbackMsg',212),(5848,57000,57002,'OP_PerformCameraShakeMsg',213),(5849,57000,57002,'OP_PopulateSkillMapsMsg',214),(5850,57000,57002,'OP_CancelledFeignMsg',215),(5851,57000,57002,'OP_SysClient',217),(5852,57000,57002,'OP_ShowCreateFromRecipeUIMsg',218),(5853,57000,57002,'OP_CancelCreateFromRecipeMsg',219),(5854,57000,57002,'OP_BeginItemCreationMsg',220),(5855,57000,57002,'OP_StopItemCreationMsg',221),(5856,57000,57002,'OP_ShowItemCreationProcessUIMsg',222),(5857,57000,57002,'OP_UpdateItemCreationProcessUIMsg',223),(5858,57000,57002,'OP_DisplayTSEventReactionMsg',224),(5859,57000,57002,'OP_ShowRecipeBookMsg',225),(5860,57000,57002,'OP_KnowledgebaseRequestMsg',226),(5861,57000,57002,'OP_KnowledgebaseResponseMsg',227),(5862,57000,57002,'OP_CSTicketHeaderRequestMsg',228),(5863,57000,57002,'OP_CSTicketInfoMsg',229),(5864,57000,57002,'OP_CSTicketCommentRequestMsg',230),(5865,57000,57002,'OP_CSTicketCommentResponseMsg',231),(5866,57000,57002,'OP_CSTicketCreateMsg',232),(5867,57000,57002,'OP_CSTicketAddCommentMsg',233),(5868,57000,57002,'OP_CSTicketDeleteMsg',234),(5869,57000,57002,'OP_CSTicketChangeNotificationMsg',235),(5870,57000,57002,'OP_WorldDataUpdateMsg',236),(5871,57000,57002,'OP_KnownLanguagesMsg',237),(5872,57000,57002,'OP_LsRequestClientCrashLogMsg',238),(5873,57000,57002,'OP_LsClientBaselogReplyMsg',239),(5874,57000,57002,'OP_LsClientCrashlogReplyMsg',240),(5875,57000,57002,'OP_LsClientAlertlogReplyMsg',241),(5876,57000,57002,'OP_LsClientVerifylogReplyMsg',242),(5877,57000,57002,'OP_ClientTeleportToLocationMsg',243),(5878,57000,57002,'OP_UpdateClientPredFlagsMsg',244),(5879,57000,57002,'OP_ChangeServerControlFlagMsg',245),(5880,57000,57002,'OP_CSToolsRequestMsg',246),(5881,57000,57002,'OP_CSToolsResponseMsg',247),(5882,57000,57002,'OP_AddSocialStructureStandingMsg',248),(5883,57000,57002,'OP_CreateBoatTransportsMsg',249),(5884,57000,57002,'OP_PositionBoatTransportMsg',250),(5885,57000,57002,'OP_MigrateBoatTransportMsg',251),(5886,57000,57002,'OP_MigrateBoatTransportReplyMsg',252),(5887,57000,57002,'OP_DisplayDebugNLLPointsMsg',253),(5888,57000,57002,'OP_ExamineInfoRequestMsg',254),(5889,57000,57002,'OP_QuickbarInitMsg',255),(5890,57000,57002,'OP_QuickbarUpdateMsg',256),(5891,57000,57002,'OP_MacroInitMsg',257),(5892,57000,57002,'OP_MacroUpdateMsg',258),(5893,57000,57002,'OP_QuestionnaireMsg',259),(5894,57000,57002,'OP_LevelChangedMsg',260),(5895,57000,57002,'OP_SpellGainedMsg',261),(5896,57000,57002,'OP_EncounterBrokenMsg',262),(5897,57000,57002,'OP_OnscreenMsgMsg',263),(5898,57000,57002,'OP_DisplayWarningMsg',264),(5899,57000,57002,'OP_ModifyGuildMsg',265),(5900,57000,57002,'OP_GuildEventMsg',266),(5901,57000,57002,'OP_GuildEventAddMsg',267),(5902,57000,57002,'OP_GuildEventActionMsg',268),(5903,57000,57002,'OP_GuildEventListMsg',269),(5904,57000,57002,'OP_RequestGuildEventDetailsMsg',270),(5905,57000,57002,'OP_GuildEventDetailsMsg',271),(5906,57000,57002,'OP_RequestGuildInfoMsg',272),(5907,57000,57002,'OP_GuildBankActionMsg',273),(5908,57000,57002,'OP_GuildBankActionResponseMsg',274),(5909,57000,57002,'OP_GuildBankItemDetailsRequestMsg',275),(5910,57000,57002,'OP_GuildBankItemDetailsResponseMs',276),(5911,57000,57002,'OP_GuildBankUpdateMsg',277),(5912,57000,57002,'OP_GuildBankEventListMsg',278),(5913,57000,57002,'OP_RequestGuildBankEventDetailsMs',279),(5914,57000,57002,'OP_RewardPackMsg',280),(5915,57000,57002,'OP_RenameGuildMsg',281),(5916,57000,57002,'OP_ZoneToFriendRequestMsg',282),(5917,57000,57002,'OP_ZoneToFriendReplyMsg',283),(5918,57000,57002,'OP_ChatCreateChannelMsg',284),(5919,57000,57002,'OP_ChatJoinChannelMsg',285),(5920,57000,57002,'OP_ChatWhoChannelMsg',286),(5921,57000,57002,'OP_ChatLeaveChannelMsg',287),(5922,57000,57002,'OP_ChatTellChannelMsg',288),(5923,57000,57002,'OP_ChatTellUserMsg',289),(5924,57000,57002,'OP_ChatToggleFriendMsg',290),(5925,57000,57002,'OP_BrokerAddBag',291),(5926,57000,57002,'OP_BrokerRemoveBag',292),(5927,57000,57002,'OP_ChatToggleIgnoreMsg',293),(5928,57000,57002,'OP_ChatSendFriendsMsg',294),(5929,57000,57002,'OP_ChatSendIgnoresMsg',295),(5930,57000,57002,'OP_QuestReward',319),(5931,57000,57002,'OP_ChatFiltersMsg',334),(5932,57000,57002,'OP_MailGetMessageMsg',337),(5933,57000,57002,'OP_MailSendMessageMsg',338),(5934,57000,57002,'OP_MailDeleteMessageMsg',339),(5935,57000,57002,'OP_MailGetHeadersReplyMsg',340),(5936,57000,57002,'OP_MailGetMessageReplyMsg',341),(5937,57000,57002,'OP_MailSendMessageReplyMsg',342),(5938,57000,57002,'OP_MailCommitSendMessageMsg',343),(5939,57000,57002,'OP_MailSendSystemMessageMsg',344),(5940,57000,57002,'OP_MailRemoveAttachFromMailMsg',345),(5941,57000,57002,'OP_WaypointRequestMsg',347),(5942,57000,57002,'OP_WaypointReplyMsg',348),(5943,57000,57002,'OP_WaypointSelectMsg',349),(5944,57000,57002,'OP_WaypointUpdateMsg',350),(5945,57000,57002,'OP_CharNameChangedMsg',351),(5946,57000,57002,'OP_ShowZoneTeleporterDestinations',352),(5947,57000,57002,'OP_SelectZoneTeleporterDestinatio',353),(5948,57000,57002,'OP_ReloadLocalizedTxtMsg',354),(5949,57000,57002,'OP_RequestGuildMembershipMsg',355),(5950,57000,57002,'OP_GuildMembershipResponseMsg',356),(5951,57000,57002,'OP_LeaveGuildNotifyMsg',357),(5952,57000,57002,'OP_JoinGuildNotifyMsg',358),(5953,57000,57002,'OP_AvatarUpdateMsg',359),(5954,57000,57002,'OP_BioUpdateMsg',361),(5955,57000,57002,'OP_InspectPlayerMsg',362),(5956,57000,57002,'OP_WSServerLockMsg',363),(5957,57000,57002,'OP_LSServerLockMsg',364),(5958,57000,57002,'OP_WSServerHideMsg',365),(5959,57000,57002,'OP_CsCategoryRequestMsg',366),(5960,57000,57002,'OP_CsCategoryResponseMsg',367),(5961,57000,57002,'OP_KnowledgeWindowSlotMappingMsg',368),(5962,57000,57002,'OP_AFKUpdateMsg',369),(5963,57000,57002,'OP_AnonUpdateMsg',370),(5964,57000,57002,'OP_UpdateActivePublicZonesMsg',371),(5965,57000,57002,'OP_UnknownNpcMsg',372),(5966,57000,57002,'OP_PromoFlagsDetailsMsg',373),(5967,57000,57002,'OP_ConsignViewCreateMsg',374),(5968,57000,57002,'OP_ConsignViewGetPageMsg',375),(5969,57000,57002,'OP_ConsignViewReleaseMsg',376),(5970,57000,57002,'OP_ConsignRemoveItemsMsg',377),(5971,57000,57002,'OP_UpdateDebugRadiiMsg',378),(5972,57000,57002,'OP_ReportMsg',379),(5973,57000,57002,'OP_UpdateRaidMsg',380),(5974,57000,57002,'OP_ConsignViewSortMsg',382),(5975,57000,57002,'OP_TitleUpdateMsg',383),(5976,57000,57002,'OP_ClientFellMsg',384),(5977,57000,57002,'OP_ClientInDeathRegionMsg',385),(5978,57000,57002,'OP_CampClientMsg',386),(5979,57000,57002,'OP_CSToolAccessResponseMsg',387),(5980,57000,57002,'OP_TrackingUpdateMsg',388),(5981,57000,57002,'OP_BeginTrackingMsg',389),(5982,57000,57002,'OP_StopTrackingMsg',390),(5983,57000,57002,'OP_GetAvatarAccessRequestForCSToo',392),(5984,57000,57002,'OP_AdvancementRequestMsg',393),(5985,57000,57002,'OP_MapFogDataInitMsg',394),(5986,57000,57002,'OP_MapFogDataUpdateMsg',395),(5987,57000,57002,'OP_CloseGroupInviteWindowMsg',396),(5988,57000,57002,'OP_UpdateGroupMemberDataMsg',397),(5989,57000,57002,'OP_WorldPingMsg',398),(5990,57000,57002,'OP_MoveLogUpdateMsg',389),(5991,57000,57002,'OP_OfferQuestMsg',400),(5992,57000,57002,'OP_WorldShutdownUpdateMsg',402),(5993,57000,57002,'OP_DisplayMailScreenMsg',403),(5994,57000,57002,'OP_ClientIdleBeginMsg',404),(5995,57000,57002,'OP_ClientIdleEndMsg',405),(5996,57000,57002,'OP_PurchaseConsignmentLoreCheckRe',406),(5997,57000,57002,'OP_NotifyApprenticeStoppedMentori',407),(5998,57000,57002,'OP_CorruptedClientMsg',408),(5999,57000,57002,'OP_WorldDataChangeMsg',409),(6000,57000,57002,'OP_MailEventNotificationMsg',410),(6001,57000,57002,'OP_RestartZoneMsg',411),(6002,57000,57002,'OP_FlightPathsMsg',412),(6003,57000,57002,'OP_CharacterLinkdeadMsg',413),(6004,57000,57002,'OP_CharTransferStartRequestMsg',414),(6005,57000,57002,'OP_CharTransferStartReplyMsg',415),(6006,57000,57002,'OP_CharTransferRequestMsg',416),(6007,57000,57002,'OP_CharTransferReplyMsg',417),(6008,57000,57002,'OP_CharTransferRollbackRequestMsg',418),(6009,57000,57002,'OP_CharTransferCommitRequestMsg',419),(6010,57000,57002,'OP_CharTransferRollbackReplyMsg',420),(6011,57000,57002,'OP_CharTransferCommitReplyMsg',421),(6012,57000,57002,'OP_GetCharacterSerializedRequestM',422),(6013,57000,57002,'OP_GetCharacterSerializedReplyMsg',423),(6014,57000,57002,'OP_CreateCharFromCBBRequestMsg',424),(6015,57000,57002,'OP_CreateCharFromCBBReplyMsg',425),(6016,57000,57002,'OP_HousingDataChangedMsg',426),(6017,57000,57002,'OP_HousingRestoreMsg',427),(6018,57000,57002,'OP_AuctionItem',428),(6019,57000,57002,'OP_AuctionItemReply',429),(6020,57000,57002,'OP_AuctionCoin',430),(6021,57000,57002,'OP_AuctionCoinReply',431),(6022,57000,57002,'OP_AuctionCharacter',432),(6023,57000,57002,'OP_AuctionCharacterReply',433),(6024,57000,57002,'OP_AuctionCommitMsg',434),(6025,57000,57002,'OP_AuctionAbortMsg',435),(6026,57000,57002,'OP_CharTransferValidateRequestMsg',436),(6027,57000,57002,'OP_CharTransferValidateReplyMsg',437),(6028,57000,57002,'OP_RaceRestrictionMsg',438),(6029,57000,57002,'OP_SetInstanceDisplayNameMsg',439),(6030,57000,57002,'OP_GetAuctionAssetIDMsg',440),(6031,57000,57002,'OP_GetAuctionAssetIDReplyMsg',441),(6032,57000,57002,'OP_ResendWorldChannelsMsg',442),(6033,57000,57002,'OP_DisplayExchangeScreenMsg',443),(6034,57000,57002,'OP_ArenaGameTypesMsg',444),(6035,57000,57002,'OP_AuditAuctionEventMsg',445),(6036,57000,57002,'OP_InviteRequestMsg',446),(6037,57000,57002,'OP_InviteResponseMsg',447),(6038,57000,57002,'OP_InviteTargetResponseMsg',448),(6039,57000,57002,'OP_InspectPlayerRequestMsg',449),(6040,57000,57002,'OP_DispatchMsg',450),(6041,57000,57002,'OP_DisplayEventMsg',451),(6042,57000,57002,'OP_PrePossessionMsg',452),(6043,57000,57002,'OP_PostPossessionMsg',453),(6044,57000,57002,'OP_ArenaCreate',455),(6045,57000,57002,'OP_ArenaList',456),(6046,57000,57002,'OP_ArenaWindow',464),(6047,57000,57002,'OP_HouseItemsList',482),(6048,57000,57002,'OP_CurrentPet',484),(6049,57000,57002,'OP_AdventureList',487),(6050,57000,57002,'OP_CancelSpellCast',488),(6051,57000,57002,'OP_UpdateTitleCmd',493),(6052,57000,57002,'OP_AttackAllowed',499),(6053,57000,57002,'OP_AttackNotAllowed',500),(6054,57000,57002,'OP_BagOptions',501),(6055,57000,57002,'OP_LFGGroupSearch',503),(6056,57000,57002,'OP_CharacterHousingList',506),(6057,57000,57002,'OP_DressingRoom',509),(6058,57000,57002,'OP_PlayLon',510),(6059,57000,57002,'OP_SkillInfoRequest',513),(6060,57000,57002,'OP_SkillInfoResponse',514),(6061,57000,57002,'OP_LFGUpdateMsg',517),(6062,57000,57002,'OP_BadLanguageFilter',518),(6063,57000,57002,'OP_VoiceChatChannel',519),(6064,57000,57002,'OP_MapRequest',520),(6065,57000,57002,'OP_MarketFundsUpdate',525),(6066,57000,57002,'OP_UIEvent',526),(6067,57000,57002,'OP_MarketAddFundsRequest',527),(6068,57000,57002,'OP_MarketAddFundsReply',528),(6069,57000,57002,'OP_MarketPurchase',530),(6070,57000,57002,'OP_MarketPlacePrices',531),(6071,57000,57002,'OP_MarketPlaceItems',534),(6072,57000,57002,'OP_RecipeBook',535),(6073,57000,57002,'OP_CreateCharacterDungeon',544),(6074,57000,57002,'OP_DungeonMakerEnter',545),(6075,57000,57002,'OP_DungeonMakerItemRequest',547),(6076,57000,57002,'OP_CharacterCreatedDungeons',548),(6077,57000,57002,'OP_DungeonMakerToolboxList',549),(6078,57000,57002,'OP_DungeonMakerUnknown',550),(6079,57000,57002,'OP_DungeonMakerUnknown1',551),(6080,57000,57002,'OP_PlayerPollPopup',553),(6081,57000,57002,'OP_PlayerPollAnswer',554),(6082,57000,57002,'OP_MentorPopup',555),(6083,57000,57002,'OP_LoadWelcomeWindow',557),(6084,57000,57002,'OP_OpenCharCust',558),(6085,57000,57002,'OP_SubmitCharCust',559),(6086,57000,57002,'OP_QueAllBgSolo',561),(6087,57000,57002,'OP_ZoneBgInstanceList',563),(6088,57000,57002,'OP_WorldTravelAvail',567),(6089,57000,57002,'OP_GarbagePacket',571),(6090,57000,57002,'OP_LoadCalendarEvents',572),(6091,57000,57002,'OP_VideoUploaded',573),(6092,57000,57002,'OP_SavageBarInitMsg',574),(6093,57000,57002,'OP_PetOptionsResponse',575),(6094,57000,57002,'OP_DungeonMakerItemResponse',576),(6095,57000,57002,'OP_CharacterMounts',578),(6096,57000,57002,'OP_EqBetaCopyRequest',588),(6097,57000,57002,'OP_EqHearChatCmd',589),(6098,57000,57002,'OP_EqDisplayTextCmd',590),(6099,57000,57002,'OP_EqCreateGhostCmd',591),(6100,57000,57002,'OP_EqCreateWidgetCmd',592),(6101,57000,57002,'OP_EqCreateSignWidgetCmd',593),(6102,57000,57002,'OP_EqDestroyGhostCmd',594),(6103,57000,57002,'OP_EqUpdateGhostCmd',595),(6104,57000,57002,'OP_EqSetControlGhostCmd',596),(6105,57000,57002,'OP_EqSetPOVGhostCmd',597),(6106,57000,57002,'OP_EqHearCombatCmd',598),(6107,57000,57002,'OP_EqHearSpellCastCmd',599),(6108,57000,57002,'OP_EQHearProcCmd',600),(6109,57000,57002,'OP_EQHearResEffectCmd',601),(6110,57000,57002,'OP_EqHearSpellInterruptCmd',602),(6111,57000,57002,'OP_EqHearSpellFizzleCmd',603),(6112,57000,57002,'OP_EqHearConsiderCmd',604),(6113,57000,57002,'OP_EqUpdateSubClassesCmd',605),(6114,57000,57002,'OP_EqCreateListBoxCmd',606),(6115,57000,57002,'OP_EqSetDebugPathPointsCmd',607),(6116,57000,57002,'OP_EqCannedEmoteCmd',609),(6117,57000,57002,'OP_EqStateCmd',610),(6118,57000,57002,'OP_EqPlaySoundCmd',611),(6119,57000,57002,'OP_EqPlaySound3DCmd',612),(6120,57000,57002,'OP_EqPlayVoiceCmd',613),(6121,57000,57002,'OP_EqHearDrowningCmd',614),(6122,57000,57002,'OP_EqHearDeathCmd',615),(6123,57000,57002,'OP_EqGroupMemberRemovedCmd',616),(6124,57000,57002,'OP_EqHearChainEffectCmd',617),(6125,57000,57002,'OP_EqReceiveOfferCmd',618),(6126,57000,57002,'OP_EqInspectPCResultsCmd',619),(6127,57000,57002,'OP_EqDrawablePathGraphCmd',620),(6128,57000,57002,'OP_EqDialogOpenCmd',621),(6129,57000,57002,'OP_EqDialogCloseCmd',622),(6130,57000,57002,'OP_EqFactionUpdateCmd',623),(6131,57000,57002,'OP_EqCollectionUpdateCmd',624),(6132,57000,57002,'OP_EqCollectionFilterCmd',625),(6133,57000,57002,'OP_EqCollectionItemCmd',626),(6134,57000,57002,'OP_EqQuestJournalUpdateCmd',627),(6135,57000,57002,'OP_EqMentoring',628),(6136,57000,57002,'OP_EqQuestJournalReplyCmd',629),(6137,57000,57002,'OP_EqQuestGroupCmd',630),(6138,57000,57002,'OP_EqUpdateMerchantCmd',631),(6139,57000,57002,'OP_EqUpdateStoreCmd',632),(6140,57000,57002,'OP_EqUpdatePlayerTradeCmd',633),(6141,57000,57002,'OP_EqHelpPathCmd',634),(6142,57000,57002,'OP_EqHelpPathClearCmd',635),(6143,57000,57002,'OP_EqUpdateBankCmd',636),(6144,57000,57002,'OP_EqExamineInfoCmd',637),(6145,57000,57002,'OP_EqCloseWindowCmd',638),(6146,57000,57002,'OP_EqUpdateLootCmd',639),(6147,57000,57002,'OP_EqJunctionListCmd',640),(6148,57000,57002,'OP_EqShowDeathWindowCmd',641),(6149,57000,57002,'OP_EqDisplaySpellFailCmd',642),(6150,57000,57002,'OP_EqSpellCastStartCmd',643),(6151,57000,57002,'OP_EqSpellCastEndCmd',644),(6152,57000,57002,'OP_EqResurrectedCmd',645),(6153,57000,57002,'OP_EqChoiceWinCmd',646),(6154,57000,57002,'OP_EqSetDefaultVerbCmd',647),(6155,57000,57002,'OP_EqInstructionWindowCmd',648),(6156,57000,57002,'OP_EqInstructionWindowCloseCmd',649),(6157,57000,57002,'OP_EqInstructionWindowGoalCmd',650),(6158,57000,57002,'OP_EqInstructionWindowTaskCmd',651),(6159,57000,57002,'OP_EqEnableGameEventCmd',652),(6160,57000,57002,'OP_EqShowWindowCmd',653),(6161,57000,57002,'OP_EqEnableWindowCmd',654),(6162,57000,57002,'OP_EqFlashWindowCmd',655),(6163,57000,57002,'OP_EqHearPlayFlavorCmd',657),(6164,57000,57002,'OP_EqUpdateSignWidgetCmd',658),(6165,57000,57002,'OP_EqDebugPVDCmd',659),(6166,57000,57002,'OP_EqShowBookCmd',660),(6167,57000,57002,'OP_EqQuestionnaireCmd',661),(6168,57000,57002,'OP_EqGetProbsCmd',663),(6169,57000,57002,'OP_EqHearHealCmd',664),(6170,57000,57002,'OP_EqChatChannelUpdateCmd',665),(6171,57000,57002,'OP_EqWhoChannelQueryReplyCmd',666),(6172,57000,57002,'OP_EqAvailWorldChannelsCmd',667),(6173,57000,57002,'OP_EqUpdateTargetCmd',668),(6174,57000,57002,'OP_BrokerSellList',669),(6175,57000,57002,'OP_EqConsignmentItemsCmd',670),(6176,57000,57002,'OP_EqStartBrokerCmd',672),(6177,57000,57002,'OP_EqMapExplorationCmd',673),(6178,57000,57002,'OP_EqStoreLogCmd',674),(6179,57000,57002,'OP_EqSpellMoveToRangeAndRetryCmd',675),(6180,57000,57002,'OP_EqUpdatePlayerMailCmd',676),(6181,57000,57002,'OP_GuildStatusUpdate',679),(6182,57000,57002,'OP_EqArenaResultsCmd',680),(6183,57000,57002,'OP_EqGuildBankEventActionCmd',681),(6184,57000,57002,'OP_EqGuildBankExamineInfoCmd',682),(6185,57000,57002,'OP_EqHearSpellNoLandCmd',683),(6186,57000,57002,'OP_Lottery',684),(6187,57000,57002,'OP_GuildRecruitingMemberInfo',685),(6188,57000,57002,'OP_GuildRecruiting',686),(6189,57000,57002,'OP_GuildRecruitingDetails',687),(6190,57000,57002,'OP_GuildRecruitingImage',688),(6191,57000,57002,'OP_TradeskillList',706),(6192,57000,57002,'OP_CharRenamed',690),(6193,57000,57002,'OP_UseAdornment',700),(6194,57000,57002,'OP_ExpPurchWindow',706),(6195,57000,57002,'OP_PointOfInterest',710),(6196,57000,57002,'OP_PointOfInterest2',711),(6197,57000,57002,'OP_TraitsList',712),(6198,57000,57002,'OP_CustomizeHouseDisplay',715),(6199,57000,57002,'OP_VoiceChatServer',716),(6200,57000,57002,'OP_SupplyDepot',720),(6201,57000,57002,'OP_EQHearThreatCmd',721),(6202,57000,57002,'OP_RecipeList',722),(6203,57000,57002,'OP_Research',723),(6204,57000,57002,'OP_CharacterCurrency',724),(6205,57000,57002,'OP_CharacterAchievements',725),(6206,57000,57002,'OP_AchievementUpdateMsg',726),(6207,57000,57002,'OP_EQHearDispellCmd',727),(6208,57000,57002,'OP_JournalQuestStoryline',728),(6209,57000,57002,'OP_DungeonPlayAsAvatarList',729),(6210,57000,57002,'OP_DungeonPlayAsAvatarSelected',730),(6211,57000,57002,'OP_MercHireWindow',731),(6212,57000,57002,'OP_MercUnknown',732),(6213,57000,57002,'OP_Unknown',748),(6686,57003,57016,'OP_LoginRequestMsg',0),(6687,57003,57016,'OP_LoginByNumRequestMsg',1),(6688,57003,57016,'OP_WSLoginRequestMsg',2),(6689,57003,57016,'OP_ESLoginRequestMsg',3),(6690,57003,57016,'OP_LoginReplyMsg',4),(6691,57003,57016,'OP_WSStatusReplyMsg',5),(6692,57003,57016,'OP_WorldStatusChangeMsg',6),(6693,57003,57016,'OP_AllWSDescRequestMsg',7),(6694,57003,57016,'OP_WorldListMsg',8),(6695,57003,57016,'OP_AllCharactersDescRequestMsg',9),(6696,57003,57016,'OP_AllCharactersDescReplyMsg',10),(6697,57003,57016,'OP_CreateCharacterRequestMsg',11),(6698,57003,57016,'OP_CreateCharacterReplyMsg',12),(6699,57003,57016,'OP_WSCreateCharacterRequestMsg',13),(6700,57003,57016,'OP_WSCreateCharacterReplyMsg',14),(6701,57003,57016,'OP_ReskinCharacterRequestMsg',15),(6702,57003,57016,'OP_DeleteCharacterRequestMsg',16),(6703,57003,57016,'OP_DeleteCharacterReplyMsg',17),(6704,57003,57016,'OP_PlayCharacterRequestMsg',18),(6705,57003,57016,'OP_PlayCharacterReplyMsg',19),(6706,57003,57016,'OP_ExpectClientAsCharacterReplyMs',22),(6707,57003,57016,'OP_ServerPlayCharacterRequestMsg',23),(6708,57003,57016,'OP_ServerPlayCharacterReplyMsg',24),(6709,57003,57016,'OP_ESInitMsg',25),(6710,57003,57016,'OP_ESReadyForClientsMsg',26),(6711,57003,57016,'OP_CreateZoneInstanceMsg',29),(6712,57003,57016,'OP_ZoneInstanceCreateReplyMsg',30),(6713,57003,57016,'OP_ZoneInstanceDestroyedMsg',31),(6714,57003,57016,'OP_ExpectClientAsCharacterRequest',32),(6715,57003,57016,'OP_ZoneInfoMsg',33),(6716,57003,57016,'OP_DoneLoadingZoneResourcesMsg',34),(6717,57003,57016,'OP_DoneSendingInitialEntitiesMsg',35),(6718,57003,57016,'OP_DoneLoadingEntityResourcesMsg',36),(6719,57003,57016,'OP_PredictionUpdateMsg',37),(6720,57003,57016,'OP_UpdatePositionMsg',39),(6721,57003,57016,'OP_SetRemoteCmdsMsg',41),(6722,57003,57016,'OP_RemoteCmdMsg',42),(6723,57003,57016,'OP_GameWorldTimeMsg',43),(6724,57003,57016,'OP_MOTDMsg',44),(6725,57003,57016,'OP_ZoneMOTDMsg',45),(6726,57003,57016,'OP_AvatarCreatedMsg',46),(6727,57003,57016,'OP_AvatarDestroyedMsg',47),(6728,57003,57016,'OP_RequestCampMsg',50),(6729,57003,57016,'OP_CampStartedMsg',51),(6730,57003,57016,'OP_CampAbortedMsg',52),(6731,57003,57016,'OP_WhoQueryRequestMsg',53),(6732,57003,57016,'OP_WhoQueryReplyMsg',54),(6733,57003,57016,'OP_MonitorReplyMsg',55),(6734,57003,57016,'OP_MonitorCharacterListMsg',56),(6735,57003,57016,'OP_MonitorCharacterListRequestMsg',57),(6736,57003,57016,'OP_ClientCmdMsg',58),(6737,57003,57016,'OP_DispatchESMsg',59),(6738,57003,57016,'OP_DispatchClientCmdMsg',60),(6739,57003,57016,'OP_UpdateTargetMsg',61),(6740,57003,57016,'OP_UpdateTargetLocMsg',62),(6741,57003,57016,'OP_UpdateCharacterSheetMsg',63),(6742,57003,57016,'OP_CharacterPet',64),(6743,57003,57016,'OP_CharacterMerc',65),(6744,57003,57016,'OP_UpdateSpellBookMsg',66),(6745,57003,57016,'OP_UpdateInventoryMsg',68),(6746,57003,57016,'OP_AfterInvSpellUpdate',69),(6747,57003,57016,'OP_UpdateRecipeBookMsg',70),(6748,57003,57016,'OP_RequestRecipeDetailsMsg',71),(6749,57003,57016,'OP_RecipeDetailsMsg',72),(6750,57003,57016,'OP_UpdateSkillBookMsg',73),(6751,57003,57016,'OP_UpdateSkillsMsg',74),(6752,57003,57016,'OP_UpdateOpportunityMsg',75),(6753,57003,57016,'OP_ChangeZoneMsg',77),(6754,57003,57016,'OP_ClientTeleportRequestMsg',78),(6755,57003,57016,'OP_TeleportWithinZoneMsg',79),(6756,57003,57016,'OP_TeleportWithinZoneNoReloadMsg',80),(6757,57003,57016,'OP_MigrateClientToZoneRequestMsg',81),(6758,57003,57016,'OP_MigrateClientToZoneReplyMsg',82),(6759,57003,57016,'OP_ReadyToZoneMsg',84),(6760,57003,57016,'OP_RemoveClientFromGroupMsg',85),(6761,57003,57016,'OP_RemoveGroupFromGroupMsg',86),(6762,57003,57016,'OP_MakeGroupLeaderMsg',87),(6763,57003,57016,'OP_GroupCreatedMsg',88),(6764,57003,57016,'OP_GroupDestroyedMsg',89),(6765,57003,57016,'OP_GroupMemberAddedMsg',90),(6766,57003,57016,'OP_GroupMemberRemovedMsg',91),(6767,57003,57016,'OP_GroupRemovedFromGroupMsg',92),(6768,57003,57016,'OP_GroupLeaderChangedMsg',93),(6769,57003,57016,'OP_GroupResendOOZDataMsg',94),(6770,57003,57016,'OP_GroupSettingsChangedMsg',95),(6771,57003,57016,'OP_OutOfZoneMemberDataMsg',96),(6772,57003,57016,'OP_SendLatestRequestMsg',97),(6773,57003,57016,'OP_ClearDataMsg',98),(6774,57003,57016,'OP_SetSocialMsg',99),(6775,57003,57016,'OP_ESStatusMsg',100),(6776,57003,57016,'OP_ESZoneInstanceStatusMsg',101),(6777,57003,57016,'OP_ZonesStatusRequestMsg',102),(6778,57003,57016,'OP_ZonesStatusMsg',103),(6779,57003,57016,'OP_ESWeatherRequestMsg',104),(6780,57003,57016,'OP_ESWeatherRequestEndMsg',105),(6781,57003,57016,'OP_DialogSelectMsg',109),(6782,57003,57016,'OP_DialogCloseMsg',110),(6783,57003,57016,'OP_RemoveSpellEffectMsg',111),(6784,57003,57016,'OP_RemoveConcentrationMsg',112),(6785,57003,57016,'OP_QuestJournalOpenMsg',113),(6786,57003,57016,'OP_QuestJournalInspectMsg',114),(6787,57003,57016,'OP_QuestJournalSetVisibleMsg',115),(6788,57003,57016,'OP_QuestJournalWaypointMsg',116),(6789,57003,57016,'OP_CreateGuildRequestMsg',119),(6790,57003,57016,'OP_CreateGuildReplyMsg',120),(6791,57003,57016,'OP_GuildsayMsg',121),(6792,57003,57016,'OP_FellowshipExpMsg',122),(6793,57003,57016,'OP_DeleteGuildMsg',123),(6794,57003,57016,'OP_GuildUpdateMsg',124),(6795,57003,57016,'OP_ConsignmentCloseStoreMsg',125),(6796,57003,57016,'OP_ConsignItemRequestMsg',126),(6797,57003,57016,'OP_ConsignItemResponseMsg',127),(6798,57003,57016,'OP_PurchaseConsignmentRequestMsg',128),(6799,57003,57016,'OP_LikeOption',135),(6800,57003,57016,'OP_PublishHouse',138),(6801,57003,57016,'OP_PlayerMadeInstacnesScreen',139),(6802,57003,57016,'OP_PlayerMadeInstances',140),(6803,57003,57016,'OP_HouseDeletedRemotelyMsg',142),(6804,57003,57016,'OP_UpdateHouseDataMsg',143),(6805,57003,57016,'OP_UpdateHouseAccessDataMsg',144),(6806,57003,57016,'OP_PlayerHouseBaseScreenMsg',145),(6807,57003,57016,'OP_PlayerHousePurchaseScreenMsg',146),(6808,57003,57016,'OP_PlayerHouseAccessUpdateMsg',147),(6809,57003,57016,'OP_PlayerHouseDisplayStatusMsg',148),(6810,57003,57016,'OP_PlayerHouseCloseUIMsg',149),(6811,57003,57016,'OP_BuyPlayerHouseMsg',150),(6812,57003,57016,'OP_BuyPlayerHouseTintMsg',151),(6813,57003,57016,'OP_CollectAllHouseItemsMsg',152),(6814,57003,57016,'OP_RelinquishHouseMsg',153),(6815,57003,57016,'OP_EnterHouseMsg',154),(6816,57003,57016,'OP_ExitHouseMsg',155),(6817,57003,57016,'OP_HouseDefaultAccessSetMsg',156),(6818,57003,57016,'OP_HouseAccessSetMsg',157),(6819,57003,57016,'OP_HouseAccessRemoveMsg',158),(6820,57003,57016,'OP_PayHouseUpkeepMsg',159),(6821,57003,57016,'OP_MoveableObjectPlacementCriteri',160),(6822,57003,57016,'OP_EnterMoveObjectModeMsg',161),(6823,57003,57016,'OP_PositionMoveableObject',162),(6824,57003,57016,'OP_CancelMoveObjectModeMsg',163),(6825,57003,57016,'OP_ShaderCustomizationMsg',164),(6826,57003,57016,'OP_ReplaceableSubMeshesMsg',165),(6827,57003,57016,'OP_HouseCustomizationScreenMsg',166),(6828,57003,57016,'OP_CustomizationPurchaseRequestMs',167),(6829,57003,57016,'OP_CustomizationSetRequestMsg',168),(6830,57003,57016,'OP_CustomizationReplyMsg',169),(6831,57003,57016,'OP_TintWidgetsMsg',170),(6832,57003,57016,'OP_ExamineConsignmentRequestMsg',171),(6833,57003,57016,'OP_ExamineConsignmentResponseMsg',172),(6834,57003,57016,'OP_UISettingsResponseMsg',173),(6835,57003,57016,'OP_UIResetMsg',174),(6836,57003,57016,'OP_KeymapLoadMsg',175),(6837,57003,57016,'OP_KeymapNoneMsg',176),(6838,57003,57016,'OP_KeymapDataMsg',177),(6839,57003,57016,'OP_KeymapSaveMsg',178),(6840,57003,57016,'OP_DispatchSpellCmdMsg',179),(6841,57003,57016,'OP_EntityVerbsRequestMsg',180),(6842,57003,57016,'OP_EntityVerbsReplyMsg',181),(6843,57003,57016,'OP_EntityVerbsVerbMsg',182),(6844,57003,57016,'OP_ChatRelationshipUpdateMsg',184),(6845,57003,57016,'OP_LootItemsRequestMsg',185),(6846,57003,57016,'OP_StoppedLootingMsg',186),(6847,57003,57016,'OP_SitMsg',187),(6848,57003,57016,'OP_StandMsg',188),(6849,57003,57016,'OP_SatMsg',189),(6850,57003,57016,'OP_StoodMsg',190),(6851,57003,57016,'OP_ClearForTakeOffMsg',191),(6852,57003,57016,'OP_ReadyForTakeOffMsg',192),(6853,57003,57016,'OP_ShowIllusionsMsg',193),(6854,57003,57016,'OP_HideIllusionsMsg',194),(6855,57003,57016,'OP_ExamineItemRequestMsg',195),(6856,57003,57016,'OP_ReadBookPageMsg',196),(6857,57003,57016,'OP_DefaultGroupOptionsRequestMsg',197),(6858,57003,57016,'OP_DefaultGroupOptionsMsg',198),(6859,57003,57016,'OP_GroupOptionsMsg',199),(6860,57003,57016,'OP_DisplayGroupOptionsScreenMsg',200),(6861,57003,57016,'OP_PetOptions',201),(6862,57003,57016,'OP_DisplayInnVisitScreenMsg',202),(6863,57003,57016,'OP_DumpSchedulerMsg',203),(6864,57003,57016,'OP_LSCheckAcctLockMsg',204),(6865,57003,57016,'OP_WSAcctLockStatusMsg',205),(6866,57003,57016,'OP_RequestHelpRepathMsg',206),(6867,57003,57016,'OP_RequestTargetLocMsg',207),(6868,57003,57016,'OP_UpdateMotdMsg',208),(6869,57003,57016,'OP_DestUpdateReq',210),(6870,57003,57016,'OP_PerformPlayerKnockbackMsg',213),(6871,57003,57016,'OP_PerformCameraShakeMsg',214),(6872,57003,57016,'OP_PopulateSkillMapsMsg',215),(6873,57003,57016,'OP_CancelledFeignMsg',216),(6874,57003,57016,'OP_SysClient',218),(6875,57003,57016,'OP_ShowCreateFromRecipeUIMsg',219),(6876,57003,57016,'OP_CancelCreateFromRecipeMsg',220),(6877,57003,57016,'OP_BeginItemCreationMsg',221),(6878,57003,57016,'OP_StopItemCreationMsg',222),(6879,57003,57016,'OP_ShowItemCreationProcessUIMsg',223),(6880,57003,57016,'OP_UpdateItemCreationProcessUIMsg',224),(6881,57003,57016,'OP_DisplayTSEventReactionMsg',225),(6882,57003,57016,'OP_ShowRecipeBookMsg',226),(6883,57003,57016,'OP_KnowledgebaseRequestMsg',227),(6884,57003,57016,'OP_KnowledgebaseResponseMsg',228),(6885,57003,57016,'OP_CSTicketHeaderRequestMsg',229),(6886,57003,57016,'OP_CSTicketInfoMsg',230),(6887,57003,57016,'OP_CSTicketCommentRequestMsg',231),(6888,57003,57016,'OP_CSTicketCommentResponseMsg',232),(6889,57003,57016,'OP_CSTicketCreateMsg',233),(6890,57003,57016,'OP_CSTicketAddCommentMsg',234),(6891,57003,57016,'OP_CSTicketDeleteMsg',235),(6892,57003,57016,'OP_CSTicketChangeNotificationMsg',236),(6893,57003,57016,'OP_WorldDataUpdateMsg',237),(6894,57003,57016,'OP_KnownLanguagesMsg',238),(6895,57003,57016,'OP_LsRequestClientCrashLogMsg',239),(6896,57003,57016,'OP_LsClientBaselogReplyMsg',240),(6897,57003,57016,'OP_LsClientCrashlogReplyMsg',241),(6898,57003,57016,'OP_LsClientAlertlogReplyMsg',242),(6899,57003,57016,'OP_LsClientVerifylogReplyMsg',243),(6900,57003,57016,'OP_ClientTeleportToLocationMsg',244),(6901,57003,57016,'OP_UpdateClientPredFlagsMsg',245),(6902,57003,57016,'OP_ChangeServerControlFlagMsg',246),(6903,57003,57016,'OP_CSToolsRequestMsg',247),(6904,57003,57016,'OP_CSToolsResponseMsg',248),(6905,57003,57016,'OP_AddSocialStructureStandingMsg',249),(6906,57003,57016,'OP_CreateBoatTransportsMsg',250),(6907,57003,57016,'OP_PositionBoatTransportMsg',251),(6908,57003,57016,'OP_MigrateBoatTransportMsg',252),(6909,57003,57016,'OP_MigrateBoatTransportReplyMsg',253),(6910,57003,57016,'OP_DisplayDebugNLLPointsMsg',254),(6911,57003,57016,'OP_ExamineInfoRequestMsg',255),(6912,57003,57016,'OP_QuickbarInitMsg',256),(6913,57003,57016,'OP_QuickbarUpdateMsg',257),(6914,57003,57016,'OP_MacroInitMsg',258),(6915,57003,57016,'OP_MacroUpdateMsg',259),(6916,57003,57016,'OP_QuestionnaireMsg',260),(6917,57003,57016,'OP_LevelChangedMsg',261),(6918,57003,57016,'OP_SpellGainedMsg',262),(6919,57003,57016,'OP_EncounterBrokenMsg',263),(6920,57003,57016,'OP_OnscreenMsgMsg',264),(6921,57003,57016,'OP_DisplayWarningMsg',265),(6922,57003,57016,'OP_ModifyGuildMsg',266),(6923,57003,57016,'OP_GuildEventMsg',267),(6924,57003,57016,'OP_GuildEventAddMsg',268),(6925,57003,57016,'OP_GuildEventActionMsg',269),(6926,57003,57016,'OP_GuildEventListMsg',270),(6927,57003,57016,'OP_RequestGuildEventDetailsMsg',271),(6928,57003,57016,'OP_GuildEventDetailsMsg',272),(6929,57003,57016,'OP_RequestGuildInfoMsg',273),(6930,57003,57016,'OP_GuildBankActionMsg',274),(6931,57003,57016,'OP_GuildBankActionResponseMsg',275),(6932,57003,57016,'OP_GuildBankItemDetailsRequestMsg',276),(6933,57003,57016,'OP_GuildBankItemDetailsResponseMs',277),(6934,57003,57016,'OP_GuildBankUpdateMsg',278),(6935,57003,57016,'OP_GuildBankEventListMsg',279),(6936,57003,57016,'OP_RequestGuildBankEventDetailsMs',280),(6937,57003,57016,'OP_RewardPackMsg',281),(6938,57003,57016,'OP_RenameGuildMsg',282),(6939,57003,57016,'OP_ZoneToFriendRequestMsg',283),(6940,57003,57016,'OP_ZoneToFriendReplyMsg',284),(6941,57003,57016,'OP_ChatCreateChannelMsg',285),(6942,57003,57016,'OP_ChatJoinChannelMsg',286),(6943,57003,57016,'OP_ChatWhoChannelMsg',287),(6944,57003,57016,'OP_ChatLeaveChannelMsg',288),(6945,57003,57016,'OP_ChatTellChannelMsg',289),(6946,57003,57016,'OP_ChatTellUserMsg',290),(6947,57003,57016,'OP_ChatToggleFriendMsg',291),(6948,57003,57016,'OP_BrokerAddBag',292),(6949,57003,57016,'OP_BrokerRemoveBag',293),(6950,57003,57016,'OP_ChatToggleIgnoreMsg',294),(6951,57003,57016,'OP_ChatSendFriendsMsg',295),(6952,57003,57016,'OP_ChatSendIgnoresMsg',296),(6953,57003,57016,'OP_QuestReward',320),(6954,57003,57016,'OP_ChatFiltersMsg',335),(6955,57003,57016,'OP_MailGetMessageMsg',338),(6956,57003,57016,'OP_MailSendMessageMsg',339),(6957,57003,57016,'OP_MailDeleteMessageMsg',340),(6958,57003,57016,'OP_MailGetHeadersReplyMsg',341),(6959,57003,57016,'OP_MailGetMessageReplyMsg',342),(6960,57003,57016,'OP_MailSendMessageReplyMsg',343),(6961,57003,57016,'OP_MailCommitSendMessageMsg',344),(6962,57003,57016,'OP_MailSendSystemMessageMsg',345),(6963,57003,57016,'OP_MailRemoveAttachFromMailMsg',346),(6964,57003,57016,'OP_WaypointRequestMsg',348),(6965,57003,57016,'OP_WaypointReplyMsg',349),(6966,57003,57016,'OP_WaypointSelectMsg',350),(6967,57003,57016,'OP_WaypointUpdateMsg',351),(6968,57003,57016,'OP_CharNameChangedMsg',352),(6969,57003,57016,'OP_ShowZoneTeleporterDestinations',353),(6970,57003,57016,'OP_SelectZoneTeleporterDestinatio',354),(6971,57003,57016,'OP_ReloadLocalizedTxtMsg',355),(6972,57003,57016,'OP_RequestGuildMembershipMsg',356),(6973,57003,57016,'OP_GuildMembershipResponseMsg',357),(6974,57003,57016,'OP_LeaveGuildNotifyMsg',358),(6975,57003,57016,'OP_JoinGuildNotifyMsg',359),(6976,57003,57016,'OP_AvatarUpdateMsg',360),(6977,57003,57016,'OP_BioUpdateMsg',362),(6978,57003,57016,'OP_InspectPlayerMsg',363),(6979,57003,57016,'OP_WSServerLockMsg',364),(6980,57003,57016,'OP_LSServerLockMsg',365),(6981,57003,57016,'OP_WSServerHideMsg',366),(6982,57003,57016,'OP_CsCategoryRequestMsg',367),(6983,57003,57016,'OP_CsCategoryResponseMsg',368),(6984,57003,57016,'OP_KnowledgeWindowSlotMappingMsg',369),(6985,57003,57016,'OP_AFKUpdateMsg',370),(6986,57003,57016,'OP_AnonUpdateMsg',371),(6987,57003,57016,'OP_UpdateActivePublicZonesMsg',372),(6988,57003,57016,'OP_UnknownNpcMsg',373),(6989,57003,57016,'OP_PromoFlagsDetailsMsg',374),(6990,57003,57016,'OP_ConsignViewCreateMsg',375),(6991,57003,57016,'OP_ConsignViewGetPageMsg',376),(6992,57003,57016,'OP_ConsignViewReleaseMsg',377),(6993,57003,57016,'OP_ConsignRemoveItemsMsg',378),(6994,57003,57016,'OP_UpdateDebugRadiiMsg',379),(6995,57003,57016,'OP_ReportMsg',380),(6996,57003,57016,'OP_UpdateRaidMsg',381),(6997,57003,57016,'OP_ConsignViewSortMsg',383),(6998,57003,57016,'OP_TitleUpdateMsg',384),(6999,57003,57016,'OP_ClientFellMsg',385),(7000,57003,57016,'OP_ClientInDeathRegionMsg',386),(7001,57003,57016,'OP_CampClientMsg',387),(7002,57003,57016,'OP_CSToolAccessResponseMsg',388),(7003,57003,57016,'OP_TrackingUpdateMsg',389),(7004,57003,57016,'OP_BeginTrackingMsg',390),(7005,57003,57016,'OP_StopTrackingMsg',391),(7006,57003,57016,'OP_GetAvatarAccessRequestForCSToo',393),(7007,57003,57016,'OP_AdvancementRequestMsg',394),(7008,57003,57016,'OP_MapFogDataInitMsg',395),(7009,57003,57016,'OP_MapFogDataUpdateMsg',396),(7010,57003,57016,'OP_CloseGroupInviteWindowMsg',397),(7011,57003,57016,'OP_UpdateGroupMemberDataMsg',398),(7012,57003,57016,'OP_WorldPingMsg',399),(7013,57003,57016,'OP_MoveLogUpdateMsg',390),(7014,57003,57016,'OP_OfferQuestMsg',401),(7015,57003,57016,'OP_WorldShutdownUpdateMsg',403),(7016,57003,57016,'OP_DisplayMailScreenMsg',404),(7017,57003,57016,'OP_ClientIdleBeginMsg',405),(7018,57003,57016,'OP_ClientIdleEndMsg',406),(7019,57003,57016,'OP_PurchaseConsignmentLoreCheckRe',407),(7020,57003,57016,'OP_NotifyApprenticeStoppedMentori',408),(7021,57003,57016,'OP_CorruptedClientMsg',409),(7022,57003,57016,'OP_WorldDataChangeMsg',410),(7023,57003,57016,'OP_MailEventNotificationMsg',411),(7024,57003,57016,'OP_RestartZoneMsg',412),(7025,57003,57016,'OP_FlightPathsMsg',413),(7026,57003,57016,'OP_CharacterLinkdeadMsg',414),(7027,57003,57016,'OP_CharTransferStartRequestMsg',415),(7028,57003,57016,'OP_CharTransferStartReplyMsg',416),(7029,57003,57016,'OP_CharTransferRequestMsg',417),(7030,57003,57016,'OP_CharTransferReplyMsg',418),(7031,57003,57016,'OP_CharTransferRollbackRequestMsg',419),(7032,57003,57016,'OP_CharTransferCommitRequestMsg',420),(7033,57003,57016,'OP_CharTransferRollbackReplyMsg',421),(7034,57003,57016,'OP_CharTransferCommitReplyMsg',422),(7035,57003,57016,'OP_GetCharacterSerializedRequestM',423),(7036,57003,57016,'OP_GetCharacterSerializedReplyMsg',424),(7037,57003,57016,'OP_CreateCharFromCBBRequestMsg',425),(7038,57003,57016,'OP_CreateCharFromCBBReplyMsg',426),(7039,57003,57016,'OP_HousingDataChangedMsg',427),(7040,57003,57016,'OP_HousingRestoreMsg',428),(7041,57003,57016,'OP_AuctionItem',429),(7042,57003,57016,'OP_AuctionItemReply',430),(7043,57003,57016,'OP_AuctionCoin',431),(7044,57003,57016,'OP_AuctionCoinReply',432),(7045,57003,57016,'OP_AuctionCharacter',433),(7046,57003,57016,'OP_AuctionCharacterReply',434),(7047,57003,57016,'OP_AuctionCommitMsg',435),(7048,57003,57016,'OP_AuctionAbortMsg',436),(7049,57003,57016,'OP_CharTransferValidateRequestMsg',437),(7050,57003,57016,'OP_CharTransferValidateReplyMsg',438),(7051,57003,57016,'OP_RaceRestrictionMsg',439),(7052,57003,57016,'OP_SetInstanceDisplayNameMsg',440),(7053,57003,57016,'OP_GetAuctionAssetIDMsg',441),(7054,57003,57016,'OP_GetAuctionAssetIDReplyMsg',442),(7055,57003,57016,'OP_ResendWorldChannelsMsg',443),(7056,57003,57016,'OP_DisplayExchangeScreenMsg',444),(7057,57003,57016,'OP_ArenaGameTypesMsg',445),(7058,57003,57016,'OP_AuditAuctionEventMsg',446),(7059,57003,57016,'OP_InviteRequestMsg',447),(7060,57003,57016,'OP_InviteResponseMsg',448),(7061,57003,57016,'OP_InviteTargetResponseMsg',449),(7062,57003,57016,'OP_InspectPlayerRequestMsg',450),(7063,57003,57016,'OP_DispatchMsg',451),(7064,57003,57016,'OP_DisplayEventMsg',452),(7065,57003,57016,'OP_PrePossessionMsg',453),(7066,57003,57016,'OP_PostPossessionMsg',454),(7067,57003,57016,'OP_ArenaCreate',456),(7068,57003,57016,'OP_ArenaList',457),(7069,57003,57016,'OP_ArenaWindow',465),(7070,57003,57016,'OP_HouseItemsList',483),(7071,57003,57016,'OP_CurrentPet',485),(7072,57003,57016,'OP_AdventureList',488),(7073,57003,57016,'OP_CancelSpellCast',489),(7074,57003,57016,'OP_UpdateTitleCmd',494),(7075,57003,57016,'OP_AttackAllowed',500),(7076,57003,57016,'OP_AttackNotAllowed',501),(7077,57003,57016,'OP_BagOptions',502),(7078,57003,57016,'OP_LFGGroupSearch',504),(7079,57003,57016,'OP_CharacterHousingList',507),(7080,57003,57016,'OP_DressingRoom',510),(7081,57003,57016,'OP_PlayLon',511),(7082,57003,57016,'OP_SkillInfoRequest',514),(7083,57003,57016,'OP_SkillInfoResponse',515),(7084,57003,57016,'OP_LFGUpdateMsg',518),(7085,57003,57016,'OP_BadLanguageFilter',519),(7086,57003,57016,'OP_VoiceChatChannel',520),(7087,57003,57016,'OP_MapRequest',521),(7088,57003,57016,'OP_MarketFundsUpdate',526),(7089,57003,57016,'OP_UIEvent',527),(7090,57003,57016,'OP_MarketAddFundsRequest',528),(7091,57003,57016,'OP_MarketAddFundsReply',529),(7092,57003,57016,'OP_MarketPurchase',531),(7093,57003,57016,'OP_MarketPlacePrices',532),(7094,57003,57016,'OP_MarketPlaceItems',535),(7095,57003,57016,'OP_RecipeBook',536),(7096,57003,57016,'OP_CreateCharacterDungeon',545),(7097,57003,57016,'OP_DungeonMakerEnter',546),(7098,57003,57016,'OP_DungeonMakerItemRequest',548),(7099,57003,57016,'OP_CharacterCreatedDungeons',549),(7100,57003,57016,'OP_DungeonMakerToolboxList',550),(7101,57003,57016,'OP_DungeonMakerUnknown',551),(7102,57003,57016,'OP_DungeonMakerUnknown1',552),(7103,57003,57016,'OP_PlayerPollPopup',554),(7104,57003,57016,'OP_PlayerPollAnswer',555),(7105,57003,57016,'OP_MentorPopup',556),(7106,57003,57016,'OP_LoadWelcomeWindow',558),(7107,57003,57016,'OP_OpenCharCust',559),(7108,57003,57016,'OP_SubmitCharCust',560),(7109,57003,57016,'OP_QueAllBgSolo',562),(7110,57003,57016,'OP_ZoneBgInstanceList',564),(7111,57003,57016,'OP_WorldTravelAvail',568),(7112,57003,57016,'OP_GarbagePacket',572),(7113,57003,57016,'OP_LoadCalendarEvents',573),(7114,57003,57016,'OP_VideoUploaded',574),(7115,57003,57016,'OP_SavageBarInitMsg',575),(7116,57003,57016,'OP_PetOptionsResponse',576),(7117,57003,57016,'OP_DungeonMakerItemResponse',577),(7118,57003,57016,'OP_CharacterMounts',579),(7119,57003,57016,'OP_EqBetaCopyRequest',593),(7120,57003,57016,'OP_EqHearChatCmd',594),(7121,57003,57016,'OP_EqDisplayTextCmd',595),(7122,57003,57016,'OP_EqCreateGhostCmd',596),(7123,57003,57016,'OP_EqCreateWidgetCmd',597),(7124,57003,57016,'OP_EqCreateSignWidgetCmd',598),(7125,57003,57016,'OP_EqDestroyGhostCmd',599),(7126,57003,57016,'OP_EqUpdateGhostCmd',600),(7127,57003,57016,'OP_EqSetControlGhostCmd',601),(7128,57003,57016,'OP_EqSetPOVGhostCmd',602),(7129,57003,57016,'OP_EqHearCombatCmd',603),(7130,57003,57016,'OP_EqHearSpellCastCmd',604),(7131,57003,57016,'OP_EQHearProcCmd',605),(7132,57003,57016,'OP_EQHearResEffectCmd',606),(7133,57003,57016,'OP_EqHearSpellInterruptCmd',607),(7134,57003,57016,'OP_EqHearSpellFizzleCmd',608),(7135,57003,57016,'OP_EqHearConsiderCmd',609),(7136,57003,57016,'OP_EqUpdateSubClassesCmd',610),(7137,57003,57016,'OP_EqCreateListBoxCmd',611),(7138,57003,57016,'OP_EqSetDebugPathPointsCmd',612),(7139,57003,57016,'OP_EqCannedEmoteCmd',614),(7140,57003,57016,'OP_EqStateCmd',615),(7141,57003,57016,'OP_EqPlaySoundCmd',616),(7142,57003,57016,'OP_EqPlaySound3DCmd',617),(7143,57003,57016,'OP_EqPlayVoiceCmd',618),(7144,57003,57016,'OP_EqHearDrowningCmd',619),(7145,57003,57016,'OP_EqHearDeathCmd',620),(7146,57003,57016,'OP_EqGroupMemberRemovedCmd',621),(7147,57003,57016,'OP_EqHearChainEffectCmd',622),(7148,57003,57016,'OP_EqReceiveOfferCmd',623),(7149,57003,57016,'OP_EqInspectPCResultsCmd',624),(7150,57003,57016,'OP_EqDrawablePathGraphCmd',625),(7151,57003,57016,'OP_EqDialogOpenCmd',626),(7152,57003,57016,'OP_EqDialogCloseCmd',627),(7153,57003,57016,'OP_EqFactionUpdateCmd',628),(7154,57003,57016,'OP_EqCollectionUpdateCmd',629),(7155,57003,57016,'OP_EqCollectionFilterCmd',630),(7156,57003,57016,'OP_EqCollectionItemCmd',631),(7157,57003,57016,'OP_EqQuestJournalUpdateCmd',632),(7158,57003,57016,'OP_EqMentoring',633),(7159,57003,57016,'OP_EqQuestJournalReplyCmd',634),(7160,57003,57016,'OP_EqQuestGroupCmd',635),(7161,57003,57016,'OP_EqUpdateMerchantCmd',636),(7162,57003,57016,'OP_EqUpdateStoreCmd',637),(7163,57003,57016,'OP_EqUpdatePlayerTradeCmd',638),(7164,57003,57016,'OP_EqHelpPathCmd',639),(7165,57003,57016,'OP_EqHelpPathClearCmd',640),(7166,57003,57016,'OP_EqUpdateBankCmd',641),(7167,57003,57016,'OP_EqExamineInfoCmd',642),(7168,57003,57016,'OP_EqCloseWindowCmd',643),(7169,57003,57016,'OP_EqUpdateLootCmd',644),(7170,57003,57016,'OP_EqJunctionListCmd',645),(7171,57003,57016,'OP_EqShowDeathWindowCmd',646),(7172,57003,57016,'OP_EqDisplaySpellFailCmd',647),(7173,57003,57016,'OP_EqSpellCastStartCmd',648),(7174,57003,57016,'OP_EqSpellCastEndCmd',649),(7175,57003,57016,'OP_EqResurrectedCmd',650),(7176,57003,57016,'OP_EqChoiceWinCmd',651),(7177,57003,57016,'OP_EqSetDefaultVerbCmd',652),(7178,57003,57016,'OP_EqInstructionWindowCmd',653),(7179,57003,57016,'OP_EqInstructionWindowCloseCmd',654),(7180,57003,57016,'OP_EqInstructionWindowGoalCmd',655),(7181,57003,57016,'OP_EqInstructionWindowTaskCmd',656),(7182,57003,57016,'OP_EqEnableGameEventCmd',657),(7183,57003,57016,'OP_EqShowWindowCmd',658),(7184,57003,57016,'OP_EqEnableWindowCmd',659),(7185,57003,57016,'OP_EqFlashWindowCmd',660),(7186,57003,57016,'OP_EqHearPlayFlavorCmd',662),(7187,57003,57016,'OP_EqUpdateSignWidgetCmd',663),(7188,57003,57016,'OP_EqDebugPVDCmd',664),(7189,57003,57016,'OP_EqShowBookCmd',665),(7190,57003,57016,'OP_EqQuestionnaireCmd',666),(7191,57003,57016,'OP_EqGetProbsCmd',668),(7192,57003,57016,'OP_EqHearHealCmd',669),(7193,57003,57016,'OP_EqChatChannelUpdateCmd',670),(7194,57003,57016,'OP_EqWhoChannelQueryReplyCmd',671),(7195,57003,57016,'OP_EqAvailWorldChannelsCmd',672),(7196,57003,57016,'OP_EqUpdateTargetCmd',673),(7197,57003,57016,'OP_BrokerSellList',674),(7198,57003,57016,'OP_EqConsignmentItemsCmd',675),(7199,57003,57016,'OP_EqStartBrokerCmd',677),(7200,57003,57016,'OP_EqMapExplorationCmd',678),(7201,57003,57016,'OP_EqStoreLogCmd',679),(7202,57003,57016,'OP_EqSpellMoveToRangeAndRetryCmd',680),(7203,57003,57016,'OP_EqUpdatePlayerMailCmd',681),(7204,57003,57016,'OP_GuildStatusUpdate',684),(7205,57003,57016,'OP_EqArenaResultsCmd',685),(7206,57003,57016,'OP_EqGuildBankEventActionCmd',686),(7207,57003,57016,'OP_EqGuildBankExamineInfoCmd',687),(7208,57003,57016,'OP_EqHearSpellNoLandCmd',688),(7209,57003,57016,'OP_Lottery',689),(7210,57003,57016,'OP_GuildRecruitingMemberInfo',690),(7211,57003,57016,'OP_GuildRecruiting',691),(7212,57003,57016,'OP_GuildRecruitingDetails',692),(7213,57003,57016,'OP_GuildRecruitingImage',693),(7214,57003,57016,'OP_TradeskillList',711),(7215,57003,57016,'OP_CharRenamed',695),(7216,57003,57016,'OP_UseAdornment',705),(7217,57003,57016,'OP_ExpPurchWindow',711),(7218,57003,57016,'OP_PointOfInterest',715),(7219,57003,57016,'OP_PointOfInterest2',716),(7220,57003,57016,'OP_TraitsList',717),(7221,57003,57016,'OP_CustomizeHouseDisplay',720),(7222,57003,57016,'OP_VoiceChatServer',721),(7223,57003,57016,'OP_SupplyDepot',725),(7224,57003,57016,'OP_EQHearThreatCmd',726),(7225,57003,57016,'OP_RecipeList',727),(7226,57003,57016,'OP_Research',728),(7227,57003,57016,'OP_CharacterCurrency',729),(7228,57003,57016,'OP_CharacterAchievements',730),(7229,57003,57016,'OP_AchievementUpdateMsg',731),(7230,57003,57016,'OP_EQHearDispellCmd',732),(7231,57003,57016,'OP_JournalQuestStoryline',733),(7232,57003,57016,'OP_DungeonPlayAsAvatarList',734),(7233,57003,57016,'OP_DungeonPlayAsAvatarSelected',735),(7234,57003,57016,'OP_MercHireWindow',736),(7235,57003,57016,'OP_MercUnknown',737),(7236,57003,57016,'OP_Unknown',753),(7709,57003,57016,'OP_ClearForLandingMsg',491),(7710,57003,57016,'OP_Launchpad',570),(7711,57003,57016,'OP_ReceipelistUnknown',588),(7712,57032,57047,'OP_LoginRequestMsg',0),(7713,57032,57047,'OP_LoginByNumRequestMsg',1),(7714,57032,57047,'OP_WSLoginRequestMsg',2),(7715,57032,57047,'OP_ESLoginRequestMsg',3),(7716,57032,57047,'OP_LoginReplyMsg',4),(7717,57032,57047,'OP_WSStatusReplyMsg',5),(7718,57032,57047,'OP_WorldStatusChangeMsg',6),(7719,57032,57047,'OP_AllWSDescRequestMsg',7),(7720,57032,57047,'OP_WorldListMsg',8),(7721,57032,57047,'OP_AllCharactersDescRequestMsg',9),(7722,57032,57047,'OP_AllCharactersDescReplyMsg',10),(7723,57032,57047,'OP_CreateCharacterRequestMsg',11),(7724,57032,57047,'OP_CreateCharacterReplyMsg',12),(7725,57032,57047,'OP_WSCreateCharacterRequestMsg',13),(7726,57032,57047,'OP_WSCreateCharacterReplyMsg',14),(7727,57032,57047,'OP_ReskinCharacterRequestMsg',15),(7728,57032,57047,'OP_DeleteCharacterRequestMsg',16),(7729,57032,57047,'OP_DeleteCharacterReplyMsg',17),(7730,57032,57047,'OP_PlayCharacterRequestMsg',18),(7731,57032,57047,'OP_PlayCharacterReplyMsg',19),(7732,57032,57047,'OP_ExpectClientAsCharacterReplyMs',22),(7733,57032,57047,'OP_ServerPlayCharacterRequestMsg',23),(7734,57032,57047,'OP_ServerPlayCharacterReplyMsg',24),(7735,57032,57047,'OP_ESInitMsg',25),(7736,57032,57047,'OP_ESReadyForClientsMsg',26),(7737,57032,57047,'OP_CreateZoneInstanceMsg',29),(7738,57032,57047,'OP_ZoneInstanceCreateReplyMsg',30),(7739,57032,57047,'OP_ZoneInstanceDestroyedMsg',31),(7740,57032,57047,'OP_ExpectClientAsCharacterRequest',32),(7741,57032,57047,'OP_ZoneInfoMsg',33),(7742,57032,57047,'OP_DoneLoadingZoneResourcesMsg',34),(7743,57032,57047,'OP_DoneSendingInitialEntitiesMsg',35),(7744,57032,57047,'OP_DoneLoadingEntityResourcesMsg',36),(7745,57032,57047,'OP_PredictionUpdateMsg',37),(7746,57032,57047,'OP_UpdatePositionMsg',39),(7747,57032,57047,'OP_SetRemoteCmdsMsg',41),(7748,57032,57047,'OP_RemoteCmdMsg',42),(7749,57032,57047,'OP_GameWorldTimeMsg',43),(7750,57032,57047,'OP_MOTDMsg',44),(7751,57032,57047,'OP_ZoneMOTDMsg',45),(7752,57032,57047,'OP_AvatarCreatedMsg',46),(7753,57032,57047,'OP_AvatarDestroyedMsg',47),(7754,57032,57047,'OP_RequestCampMsg',50),(7755,57032,57047,'OP_CampStartedMsg',51),(7756,57032,57047,'OP_CampAbortedMsg',52),(7757,57032,57047,'OP_WhoQueryRequestMsg',53),(7758,57032,57047,'OP_WhoQueryReplyMsg',54),(7759,57032,57047,'OP_MonitorReplyMsg',55),(7760,57032,57047,'OP_MonitorCharacterListMsg',56),(7761,57032,57047,'OP_MonitorCharacterListRequestMsg',57),(7762,57032,57047,'OP_ClientCmdMsg',58),(7763,57032,57047,'OP_DispatchESMsg',59),(7764,57032,57047,'OP_DispatchClientCmdMsg',60),(7765,57032,57047,'OP_UpdateTargetMsg',61),(7766,57032,57047,'OP_UpdateTargetLocMsg',62),(7767,57032,57047,'OP_UpdateCharacterSheetMsg',63),(7768,57032,57047,'OP_CharacterPet',64),(7769,57032,57047,'OP_CharacterMerc',65),(7770,57032,57047,'OP_UpdateSpellBookMsg',66),(7771,57032,57047,'OP_UpdateInventoryMsg',68),(7772,57032,57047,'OP_AfterInvSpellUpdate',69),(7773,57032,57047,'OP_UpdateRecipeBookMsg',70),(7774,57032,57047,'OP_RequestRecipeDetailsMsg',71),(7775,57032,57047,'OP_RecipeDetailsMsg',72),(7776,57032,57047,'OP_UpdateSkillBookMsg',73),(7777,57032,57047,'OP_UpdateSkillsMsg',74),(7778,57032,57047,'OP_UpdateOpportunityMsg',75),(7779,57032,57047,'OP_ChangeZoneMsg',77),(7780,57032,57047,'OP_ClientTeleportRequestMsg',78),(7781,57032,57047,'OP_TeleportWithinZoneMsg',79),(7782,57032,57047,'OP_TeleportWithinZoneNoReloadMsg',80),(7783,57032,57047,'OP_MigrateClientToZoneRequestMsg',81),(7784,57032,57047,'OP_MigrateClientToZoneReplyMsg',82),(7785,57032,57047,'OP_ReadyToZoneMsg',84),(7786,57032,57047,'OP_RemoveClientFromGroupMsg',85),(7787,57032,57047,'OP_RemoveGroupFromGroupMsg',86),(7788,57032,57047,'OP_MakeGroupLeaderMsg',87),(7789,57032,57047,'OP_GroupCreatedMsg',88),(7790,57032,57047,'OP_GroupDestroyedMsg',89),(7791,57032,57047,'OP_GroupMemberAddedMsg',90),(7792,57032,57047,'OP_GroupMemberRemovedMsg',91),(7793,57032,57047,'OP_GroupRemovedFromGroupMsg',92),(7794,57032,57047,'OP_GroupLeaderChangedMsg',93),(7795,57032,57047,'OP_GroupResendOOZDataMsg',94),(7796,57032,57047,'OP_GroupSettingsChangedMsg',95),(7797,57032,57047,'OP_OutOfZoneMemberDataMsg',96),(7798,57032,57047,'OP_SendLatestRequestMsg',97),(7799,57032,57047,'OP_ClearDataMsg',98),(7800,57032,57047,'OP_SetSocialMsg',99),(7801,57032,57047,'OP_ESStatusMsg',100),(7802,57032,57047,'OP_ESZoneInstanceStatusMsg',101),(7803,57032,57047,'OP_ZonesStatusRequestMsg',102),(7804,57032,57047,'OP_ZonesStatusMsg',103),(7805,57032,57047,'OP_ESWeatherRequestMsg',104),(7806,57032,57047,'OP_ESWeatherRequestEndMsg',105),(7807,57032,57047,'OP_DialogSelectMsg',109),(7808,57032,57047,'OP_DialogCloseMsg',110),(7809,57032,57047,'OP_RemoveSpellEffectMsg',111),(7810,57032,57047,'OP_RemoveConcentrationMsg',112),(7811,57032,57047,'OP_QuestJournalOpenMsg',113),(7812,57032,57047,'OP_QuestJournalInspectMsg',114),(7813,57032,57047,'OP_QuestJournalSetVisibleMsg',115),(7814,57032,57047,'OP_QuestJournalWaypointMsg',116),(7815,57032,57047,'OP_CreateGuildRequestMsg',119),(7816,57032,57047,'OP_CreateGuildReplyMsg',120),(7817,57032,57047,'OP_GuildsayMsg',121),(7818,57032,57047,'OP_FellowshipExpMsg',122),(7819,57032,57047,'OP_DeleteGuildMsg',123),(7820,57032,57047,'OP_GuildUpdateMsg',124),(7821,57032,57047,'OP_ConsignmentCloseStoreMsg',125),(7822,57032,57047,'OP_ConsignItemRequestMsg',126),(7823,57032,57047,'OP_ConsignItemResponseMsg',127),(7824,57032,57047,'OP_PurchaseConsignmentRequestMsg',128),(7825,57032,57047,'OP_LikeOption',136),(7826,57032,57047,'OP_PublishHouse',138),(7827,57032,57047,'OP_PlayerMadeInstancesScreen',139),(7828,57032,57047,'OP_PlayerMadeInstances',140),(7829,57032,57047,'OP_HouseDeletedRemotelyMsg',142),(7830,57032,57047,'OP_UpdateHouseDataMsg',143),(7831,57032,57047,'OP_UpdateHouseAccessDataMsg',144),(7832,57032,57047,'OP_PlayerHouseBaseScreenMsg',145),(7833,57032,57047,'OP_PlayerHousePurchaseScreenMsg',146),(7834,57032,57047,'OP_PlayerHouseAccessUpdateMsg',147),(7835,57032,57047,'OP_PlayerHouseDisplayStatusMsg',148),(7836,57032,57047,'OP_PlayerHouseCloseUIMsg',149),(7837,57032,57047,'OP_BuyPlayerHouseMsg',150),(7838,57032,57047,'OP_BuyPlayerHouseTintMsg',151),(7839,57032,57047,'OP_CollectAllHouseItemsMsg',152),(7840,57032,57047,'OP_RelinquishHouseMsg',153),(7841,57032,57047,'OP_EnterHouseMsg',154),(7842,57032,57047,'OP_ExitHouseMsg',155),(7843,57032,57047,'OP_HouseDefaultAccessSetMsg',156),(7844,57032,57047,'OP_HouseAccessSetMsg',157),(7845,57032,57047,'OP_HouseAccessRemoveMsg',158),(7846,57032,57047,'OP_PayHouseUpkeepMsg',159),(7847,57032,57047,'OP_MoveableObjectPlacementCriteri',160),(7848,57032,57047,'OP_EnterMoveObjectModeMsg',161),(7849,57032,57047,'OP_PositionMoveableObject',162),(7850,57032,57047,'OP_CancelMoveObjectModeMsg',163),(7851,57032,57047,'OP_ShaderCustomizationMsg',164),(7852,57032,57047,'OP_ReplaceableSubMeshesMsg',165),(7853,57032,57047,'OP_HouseCustomizationScreenMsg',166),(7854,57032,57047,'OP_CustomizationPurchaseRequestMs',167),(7855,57032,57047,'OP_CustomizationSetRequestMsg',168),(7856,57032,57047,'OP_CustomizationReplyMsg',169),(7857,57032,57047,'OP_TintWidgetsMsg',170),(7858,57032,57047,'OP_ExamineConsignmentRequestMsg',171),(7859,57032,57047,'OP_ExamineConsignmentResponseMsg',172),(7860,57032,57047,'OP_UISettingsResponseMsg',173),(7861,57032,57047,'OP_UIResetMsg',174),(7862,57032,57047,'OP_KeymapLoadMsg',175),(7863,57032,57047,'OP_KeymapNoneMsg',176),(7864,57032,57047,'OP_KeymapDataMsg',177),(7865,57032,57047,'OP_KeymapSaveMsg',178),(7866,57032,57047,'OP_DispatchSpellCmdMsg',179),(7867,57032,57047,'OP_EntityVerbsRequestMsg',180),(7868,57032,57047,'OP_EntityVerbsReplyMsg',181),(7869,57032,57047,'OP_EntityVerbsVerbMsg',182),(7870,57032,57047,'OP_ChatRelationshipUpdateMsg',184),(7871,57032,57047,'OP_LootItemsRequestMsg',185),(7872,57032,57047,'OP_StoppedLootingMsg',186),(7873,57032,57047,'OP_SitMsg',187),(7874,57032,57047,'OP_StandMsg',188),(7875,57032,57047,'OP_SatMsg',189),(7876,57032,57047,'OP_StoodMsg',190),(7877,57032,57047,'OP_ClearForTakeOffMsg',191),(7878,57032,57047,'OP_ReadyForTakeOffMsg',192),(7879,57032,57047,'OP_ShowIllusionsMsg',193),(7880,57032,57047,'OP_HideIllusionsMsg',194),(7881,57032,57047,'OP_ExamineItemRequestMsg',195),(7882,57032,57047,'OP_ReadBookPageMsg',196),(7883,57032,57047,'OP_DefaultGroupOptionsRequestMsg',197),(7884,57032,57047,'OP_DefaultGroupOptionsMsg',198),(7885,57032,57047,'OP_GroupOptionsMsg',199),(7886,57032,57047,'OP_DisplayGroupOptionsScreenMsg',200),(7887,57032,57047,'OP_PetOptions',201),(7888,57032,57047,'OP_DisplayInnVisitScreenMsg',202),(7889,57032,57047,'OP_DumpSchedulerMsg',203),(7890,57032,57047,'OP_LSCheckAcctLockMsg',204),(7891,57032,57047,'OP_WSAcctLockStatusMsg',205),(7892,57032,57047,'OP_RequestHelpRepathMsg',206),(7893,57032,57047,'OP_RequestTargetLocMsg',207),(7894,57032,57047,'OP_UpdateMotdMsg',208),(7895,57032,57047,'OP_DestUpdateReq',210),(7896,57032,57047,'OP_PerformPlayerKnockbackMsg',213),(7897,57032,57047,'OP_PerformCameraShakeMsg',214),(7898,57032,57047,'OP_PopulateSkillMapsMsg',215),(7899,57032,57047,'OP_CancelledFeignMsg',216),(7900,57032,57047,'OP_SysClient',218),(7901,57032,57047,'OP_ShowCreateFromRecipeUIMsg',219),(7902,57032,57047,'OP_CancelCreateFromRecipeMsg',220),(7903,57032,57047,'OP_BeginItemCreationMsg',221),(7904,57032,57047,'OP_StopItemCreationMsg',222),(7905,57032,57047,'OP_ShowItemCreationProcessUIMsg',223),(7906,57032,57047,'OP_UpdateItemCreationProcessUIMsg',224),(7907,57032,57047,'OP_DisplayTSEventReactionMsg',225),(7908,57032,57047,'OP_ShowRecipeBookMsg',226),(7909,57032,57047,'OP_KnowledgebaseRequestMsg',227),(7910,57032,57047,'OP_KnowledgebaseResponseMsg',228),(7911,57032,57047,'OP_CSTicketHeaderRequestMsg',229),(7912,57032,57047,'OP_CSTicketInfoMsg',230),(7913,57032,57047,'OP_CSTicketCommentRequestMsg',231),(7914,57032,57047,'OP_CSTicketCommentResponseMsg',232),(7915,57032,57047,'OP_CSTicketCreateMsg',233),(7916,57032,57047,'OP_CSTicketAddCommentMsg',234),(7917,57032,57047,'OP_CSTicketDeleteMsg',235),(7918,57032,57047,'OP_CSTicketChangeNotificationMsg',236),(7919,57032,57047,'OP_WorldDataUpdateMsg',237),(7920,57032,57047,'OP_KnownLanguagesMsg',238),(7921,57032,57047,'OP_LsRequestClientCrashLogMsg',239),(7922,57032,57047,'OP_LsClientBaselogReplyMsg',240),(7923,57032,57047,'OP_LsClientCrashlogReplyMsg',241),(7924,57032,57047,'OP_LsClientAlertlogReplyMsg',242),(7925,57032,57047,'OP_LsClientVerifylogReplyMsg',243),(7926,57032,57047,'OP_ClientTeleportToLocationMsg',244),(7927,57032,57047,'OP_UpdateClientPredFlagsMsg',245),(7928,57032,57047,'OP_ChangeServerControlFlagMsg',246),(7929,57032,57047,'OP_CSToolsRequestMsg',247),(7930,57032,57047,'OP_CSToolsResponseMsg',248),(7931,57032,57047,'OP_AddSocialStructureStandingMsg',249),(7932,57032,57047,'OP_CreateBoatTransportsMsg',250),(7933,57032,57047,'OP_PositionBoatTransportMsg',251),(7934,57032,57047,'OP_MigrateBoatTransportMsg',252),(7935,57032,57047,'OP_MigrateBoatTransportReplyMsg',253),(7936,57032,57047,'OP_DisplayDebugNLLPointsMsg',254),(7937,57032,57047,'OP_ExamineInfoRequestMsg',255),(7938,57032,57047,'OP_QuickbarInitMsg',256),(7939,57032,57047,'OP_QuickbarUpdateMsg',257),(7940,57032,57047,'OP_MacroInitMsg',258),(7941,57032,57047,'OP_MacroUpdateMsg',259),(7942,57032,57047,'OP_QuestionnaireMsg',260),(7943,57032,57047,'OP_LevelChangedMsg',261),(7944,57032,57047,'OP_SpellGainedMsg',262),(7945,57032,57047,'OP_EncounterBrokenMsg',263),(7946,57032,57047,'OP_OnscreenMsgMsg',264),(7947,57032,57047,'OP_DisplayWarningMsg',265),(7948,57032,57047,'OP_ModifyGuildMsg',266),(7949,57032,57047,'OP_GuildEventMsg',267),(7950,57032,57047,'OP_GuildEventAddMsg',268),(7951,57032,57047,'OP_GuildEventActionMsg',269),(7952,57032,57047,'OP_GuildEventListMsg',270),(7953,57032,57047,'OP_RequestGuildEventDetailsMsg',271),(7954,57032,57047,'OP_GuildEventDetailsMsg',272),(7955,57032,57047,'OP_RequestGuildInfoMsg',273),(7956,57032,57047,'OP_GuildBankActionMsg',274),(7957,57032,57047,'OP_GuildBankActionResponseMsg',275),(7958,57032,57047,'OP_GuildBankItemDetailsRequestMsg',276),(7959,57032,57047,'OP_GuildBankItemDetailsResponseMs',277),(7960,57032,57047,'OP_GuildBankUpdateMsg',278),(7961,57032,57047,'OP_GuildBankEventListMsg',279),(7962,57032,57047,'OP_RequestGuildBankEventDetailsMs',280),(7963,57032,57047,'OP_RewardPackMsg',281),(7964,57032,57047,'OP_RenameGuildMsg',282),(7965,57032,57047,'OP_ZoneToFriendRequestMsg',283),(7966,57032,57047,'OP_ZoneToFriendReplyMsg',284),(7967,57032,57047,'OP_ChatCreateChannelMsg',285),(7968,57032,57047,'OP_ChatJoinChannelMsg',286),(7969,57032,57047,'OP_ChatWhoChannelMsg',287),(7970,57032,57047,'OP_ChatLeaveChannelMsg',288),(7971,57032,57047,'OP_ChatTellChannelMsg',289),(7972,57032,57047,'OP_ChatTellUserMsg',290),(7973,57032,57047,'OP_ChatToggleFriendMsg',291),(7974,57032,57047,'OP_BrokerAddBag',292),(7975,57032,57047,'OP_BrokerRemoveBag',293),(7976,57032,57047,'OP_ChatToggleIgnoreMsg',294),(7977,57032,57047,'OP_ChatSendFriendsMsg',295),(7978,57032,57047,'OP_ChatSendIgnoresMsg',296),(7979,57032,57047,'OP_QuestReward',320),(7980,57032,57047,'OP_ChatFiltersMsg',335),(7981,57032,57047,'OP_MailGetMessageMsg',338),(7982,57032,57047,'OP_MailSendMessageMsg',339),(7983,57032,57047,'OP_MailDeleteMessageMsg',340),(7984,57032,57047,'OP_MailGetHeadersReplyMsg',341),(7985,57032,57047,'OP_MailGetMessageReplyMsg',342),(7986,57032,57047,'OP_MailSendMessageReplyMsg',343),(7987,57032,57047,'OP_MailCommitSendMessageMsg',344),(7988,57032,57047,'OP_MailSendSystemMessageMsg',345),(7989,57032,57047,'OP_MailRemoveAttachFromMailMsg',346),(7990,57032,57047,'OP_WaypointRequestMsg',348),(7991,57032,57047,'OP_WaypointReplyMsg',349),(7992,57032,57047,'OP_WaypointSelectMsg',350),(7993,57032,57047,'OP_WaypointUpdateMsg',351),(7994,57032,57047,'OP_CharNameChangedMsg',352),(7995,57032,57047,'OP_ShowZoneTeleporterDestinations',353),(7996,57032,57047,'OP_SelectZoneTeleporterDestinatio',354),(7997,57032,57047,'OP_ReloadLocalizedTxtMsg',355),(7998,57032,57047,'OP_RequestGuildMembershipMsg',356),(7999,57032,57047,'OP_GuildMembershipResponseMsg',357),(8000,57032,57047,'OP_LeaveGuildNotifyMsg',358),(8001,57032,57047,'OP_JoinGuildNotifyMsg',359),(8002,57032,57047,'OP_AvatarUpdateMsg',360),(8003,57032,57047,'OP_BioUpdateMsg',362),(8004,57032,57047,'OP_InspectPlayerMsg',363),(8005,57032,57047,'OP_WSServerLockMsg',364),(8006,57032,57047,'OP_LSServerLockMsg',365),(8007,57032,57047,'OP_WSServerHideMsg',366),(8008,57032,57047,'OP_CsCategoryRequestMsg',367),(8009,57032,57047,'OP_CsCategoryResponseMsg',368),(8010,57032,57047,'OP_KnowledgeWindowSlotMappingMsg',369),(8011,57032,57047,'OP_AFKUpdateMsg',370),(8012,57032,57047,'OP_AnonUpdateMsg',371),(8013,57032,57047,'OP_UpdateActivePublicZonesMsg',372),(8014,57032,57047,'OP_UnknownNpcMsg',373),(8015,57032,57047,'OP_PromoFlagsDetailsMsg',374),(8016,57032,57047,'OP_ConsignViewCreateMsg',375),(8017,57032,57047,'OP_ConsignViewGetPageMsg',376),(8018,57032,57047,'OP_ConsignViewReleaseMsg',377),(8019,57032,57047,'OP_ConsignRemoveItemsMsg',378),(8020,57032,57047,'OP_UpdateDebugRadiiMsg',379),(8021,57032,57047,'OP_ReportMsg',380),(8022,57032,57047,'OP_UpdateRaidMsg',381),(8023,57032,57047,'OP_ConsignViewSortMsg',383),(8024,57032,57047,'OP_TitleUpdateMsg',384),(8025,57032,57047,'OP_ClientFellMsg',385),(8026,57032,57047,'OP_ClientInDeathRegionMsg',386),(8027,57032,57047,'OP_CampClientMsg',387),(8028,57032,57047,'OP_CSToolAccessResponseMsg',388),(8029,57032,57047,'OP_UpdateGroupMemberDataMsg',388),(8030,57032,57047,'OP_TrackingUpdateMsg',389),(8031,57032,57047,'OP_BeginTrackingMsg',390),(8032,57032,57047,'OP_StopTrackingMsg',391),(8033,57032,57047,'OP_GetAvatarAccessRequestForCSToo',393),(8034,57032,57047,'OP_AdvancementRequestMsg',394),(8035,57032,57047,'OP_MapFogDataInitMsg',395),(8036,57032,57047,'OP_MapFogDataUpdateMsg',396),(8037,57032,57047,'OP_CloseGroupInviteWindowMsg',397),(8038,57032,57047,'OP_WorldPingMsg',399),(8039,57032,57047,'OP_MoveLogUpdateMsg',400),(8040,57032,57047,'OP_OfferQuestMsg',401),(8041,57032,57047,'OP_WorldShutdownUpdateMsg',403),(8042,57032,57047,'OP_DisplayMailScreenMsg',404),(8043,57032,57047,'OP_ClientIdleBeginMsg',405),(8044,57032,57047,'OP_ClientIdleEndMsg',406),(8045,57032,57047,'OP_PurchaseConsignmentLoreCheckRe',407),(8046,57032,57047,'OP_NotifyApprenticeStoppedMentori',408),(8047,57032,57047,'OP_CorruptedClientMsg',409),(8048,57032,57047,'OP_WorldDataChangeMsg',410),(8049,57032,57047,'OP_MailEventNotificationMsg',411),(8050,57032,57047,'OP_RestartZoneMsg',412),(8051,57032,57047,'OP_FlightPathsMsg',413),(8052,57032,57047,'OP_CharacterLinkdeadMsg',414),(8053,57032,57047,'OP_CharTransferStartRequestMsg',415),(8054,57032,57047,'OP_CharTransferStartReplyMsg',416),(8055,57032,57047,'OP_CharTransferRequestMsg',417),(8056,57032,57047,'OP_CharTransferReplyMsg',418),(8057,57032,57047,'OP_CharTransferRollbackRequestMsg',419),(8058,57032,57047,'OP_CharTransferCommitRequestMsg',420),(8059,57032,57047,'OP_CharTransferRollbackReplyMsg',421),(8060,57032,57047,'OP_CharTransferCommitReplyMsg',422),(8061,57032,57047,'OP_GetCharacterSerializedRequestM',423),(8062,57032,57047,'OP_GetCharacterSerializedReplyMsg',424),(8063,57032,57047,'OP_CreateCharFromCBBRequestMsg',425),(8064,57032,57047,'OP_CreateCharFromCBBReplyMsg',426),(8065,57032,57047,'OP_HousingDataChangedMsg',427),(8066,57032,57047,'OP_HousingRestoreMsg',428),(8067,57032,57047,'OP_AuctionItem',429),(8068,57032,57047,'OP_AuctionItemReply',430),(8069,57032,57047,'OP_AuctionCoin',431),(8070,57032,57047,'OP_AuctionCoinReply',432),(8071,57032,57047,'OP_AuctionCharacter',433),(8072,57032,57047,'OP_AuctionCharacterReply',434),(8073,57032,57047,'OP_AuctionCommitMsg',435),(8074,57032,57047,'OP_AuctionAbortMsg',436),(8075,57032,57047,'OP_CharTransferValidateRequestMsg',437),(8076,57032,57047,'OP_CharTransferValidateReplyMsg',438),(8077,57032,57047,'OP_RaceRestrictionMsg',439),(8078,57032,57047,'OP_SetInstanceDisplayNameMsg',440),(8079,57032,57047,'OP_GetAuctionAssetIDMsg',441),(8080,57032,57047,'OP_GetAuctionAssetIDReplyMsg',442),(8081,57032,57047,'OP_ResendWorldChannelsMsg',443),(8082,57032,57047,'OP_DisplayExchangeScreenMsg',444),(8083,57032,57047,'OP_ArenaGameTypesMsg',445),(8084,57032,57047,'OP_AuditAuctionEventMsg',446),(8085,57032,57047,'OP_InviteRequestMsg',447),(8086,57032,57047,'OP_InviteResponseMsg',448),(8087,57032,57047,'OP_InviteTargetResponseMsg',449),(8088,57032,57047,'OP_InspectPlayerRequestMsg',450),(8089,57032,57047,'OP_DispatchMsg',451),(8090,57032,57047,'OP_DisplayEventMsg',452),(8091,57032,57047,'OP_PrePossessionMsg',453),(8092,57032,57047,'OP_PostPossessionMsg',454),(8093,57032,57047,'OP_ArenaCreate',456),(8094,57032,57047,'OP_ArenaList',457),(8095,57032,57047,'OP_ArenaWindow',465),(8096,57032,57047,'OP_HouseItemsList',483),(8097,57032,57047,'OP_CurrentPet',485),(8098,57032,57047,'OP_AdventureList',488),(8099,57032,57047,'OP_CancelSpellCast',489),(8100,57032,57047,'OP_ClearForLandingMsg',491),(8101,57032,57047,'OP_UpdateTitleCmd',494),(8102,57032,57047,'OP_AttackAllowed',500),(8103,57032,57047,'OP_AttackNotAllowed',501),(8104,57032,57047,'OP_BagOptions',502),(8105,57032,57047,'OP_LFGGroupSearch',504),(8106,57032,57047,'OP_CharacterHousingList',507),(8107,57032,57047,'OP_DressingRoom',510),(8108,57032,57047,'OP_PlayLon',511),(8109,57032,57047,'OP_SkillInfoRequest',514),(8110,57032,57047,'OP_SkillInfoResponse',515),(8111,57032,57047,'OP_LFGUpdateMsg',518),(8112,57032,57047,'OP_BadLanguageFilter',519),(8113,57032,57047,'OP_VoiceChatChannel',520),(8114,57032,57047,'OP_MapRequest',521),(8115,57032,57047,'OP_MarketFundsUpdate',526),(8116,57032,57047,'OP_UIEvent',527),(8117,57032,57047,'OP_MarketAddFundsRequest',528),(8118,57032,57047,'OP_MarketAddFundsReply',529),(8119,57032,57047,'OP_MarketPurchase',531),(8120,57032,57047,'OP_MarketPlacePrices',532),(8121,57032,57047,'OP_MarketPlaceItems',535),(8122,57032,57047,'OP_RecipeBook',536),(8123,57032,57047,'OP_CreateCharacterDungeon',545),(8124,57032,57047,'OP_DungeonMakerEnter',546),(8125,57032,57047,'OP_DungeonMakerItemRequest',548),(8126,57032,57047,'OP_CharacterCreatedDungeons',549),(8127,57032,57047,'OP_DungeonMakerToolboxList',550),(8128,57032,57047,'OP_DungeonMakerUnknown',551),(8129,57032,57047,'OP_DungeonMakerUnknown1',552),(8130,57032,57047,'OP_PlayerPollPopup',554),(8131,57032,57047,'OP_PlayerPollAnswer',555),(8132,57032,57047,'OP_MentorPopup',556),(8133,57032,57047,'OP_LoadWelcomeWindow',558),(8134,57032,57047,'OP_OpenCharCust',559),(8135,57032,57047,'OP_SubmitCharCust',560),(8136,57032,57047,'OP_QueAllBgSolo',562),(8137,57032,57047,'OP_ZoneBgInstanceList',564),(8138,57032,57047,'OP_WorldTravelAvail',568),(8139,57032,57047,'OP_Launchpad',570),(8140,57032,57047,'OP_GarbagePacket',572),(8141,57032,57047,'OP_LoadCalendarEvents',573),(8142,57032,57047,'OP_VideoUploaded',574),(8143,57032,57047,'OP_SavageBarInitMsg',575),(8144,57032,57047,'OP_PetOptionsResponse',576),(8145,57032,57047,'OP_DungeonMakerItemResponse',577),(8146,57032,57047,'OP_CharacterMounts',579),(8147,57032,57047,'OP_RecipeListUnknown',588),(8148,57032,57047,'OP_EqBetaCopyRequest',593),(8149,57032,57047,'OP_EqHearChatCmd',594),(8150,57032,57047,'OP_EqDisplayTextCmd',595),(8151,57032,57047,'OP_EqCreateGhostCmd',596),(8152,57032,57047,'OP_EqCreateWidgetCmd',597),(8153,57032,57047,'OP_EqCreateSignWidgetCmd',598),(8154,57032,57047,'OP_EqDestroyGhostCmd',599),(8155,57032,57047,'OP_EqUpdateGhostCmd',600),(8156,57032,57047,'OP_EqSetControlGhostCmd',601),(8157,57032,57047,'OP_EqSetPOVGhostCmd',602),(8158,57032,57047,'OP_EqHearCombatCmd',603),(8159,57032,57047,'OP_EqHearSpellCastCmd',604),(8160,57032,57047,'OP_EQHearProcCmd',605),(8161,57032,57047,'OP_EQHearResEffectCmd',606),(8162,57032,57047,'OP_EqHearSpellInterruptCmd',607),(8163,57032,57047,'OP_EqHearSpellFizzleCmd',608),(8164,57032,57047,'OP_EqHearConsiderCmd',609),(8165,57032,57047,'OP_EqUpdateSubClassesCmd',610),(8166,57032,57047,'OP_EqCreateListBoxCmd',611),(8167,57032,57047,'OP_EqSetDebugPathPointsCmd',612),(8168,57032,57047,'OP_EqCannedEmoteCmd',614),(8169,57032,57047,'OP_EqStateCmd',615),(8170,57032,57047,'OP_EqPlaySoundCmd',616),(8171,57032,57047,'OP_EqPlaySound3DCmd',617),(8172,57032,57047,'OP_EqPlayVoiceCmd',618),(8173,57032,57047,'OP_EqHearDrowningCmd',619),(8174,57032,57047,'OP_EqHearDeathCmd',620),(8175,57032,57047,'OP_EqGroupMemberRemovedCmd',621),(8176,57032,57047,'OP_EqHearChainEffectCmd',622),(8177,57032,57047,'OP_EqReceiveOfferCmd',623),(8178,57032,57047,'OP_EqInspectPCResultsCmd',624),(8179,57032,57047,'OP_EqDrawablePathGraphCmd',625),(8180,57032,57047,'OP_EqDialogOpenCmd',626),(8181,57032,57047,'OP_EqDialogCloseCmd',627),(8182,57032,57047,'OP_EqFactionUpdateCmd',628),(8183,57032,57047,'OP_EqCollectionUpdateCmd',629),(8184,57032,57047,'OP_EqCollectionFilterCmd',630),(8185,57032,57047,'OP_EqCollectionItemCmd',631),(8186,57032,57047,'OP_EqQuestJournalUpdateCmd',632),(8187,57032,57047,'OP_EqMentoring',633),(8188,57032,57047,'OP_EqQuestJournalReplyCmd',634),(8189,57032,57047,'OP_EqQuestGroupCmd',635),(8190,57032,57047,'OP_EqUpdateMerchantCmd',636),(8191,57032,57047,'OP_EqUpdateStoreCmd',637),(8192,57032,57047,'OP_EqUpdatePlayerTradeCmd',638),(8193,57032,57047,'OP_EqHelpPathCmd',639),(8194,57032,57047,'OP_EqHelpPathClearCmd',640),(8195,57032,57047,'OP_EqUpdateBankCmd',641),(8196,57032,57047,'OP_EqExamineInfoCmd',642),(8197,57032,57047,'OP_EqCloseWindowCmd',643),(8198,57032,57047,'OP_EqUpdateLootCmd',644),(8199,57032,57047,'OP_EqJunctionListCmd',645),(8200,57032,57047,'OP_EqShowDeathWindowCmd',646),(8201,57032,57047,'OP_EqDisplaySpellFailCmd',647),(8202,57032,57047,'OP_EqSpellCastStartCmd',648),(8203,57032,57047,'OP_EqSpellCastEndCmd',649),(8204,57032,57047,'OP_EqResurrectedCmd',650),(8205,57032,57047,'OP_EqChoiceWinCmd',651),(8206,57032,57047,'OP_EqSetDefaultVerbCmd',652),(8207,57032,57047,'OP_EqInstructionWindowCmd',653),(8208,57032,57047,'OP_EqInstructionWindowCloseCmd',654),(8209,57032,57047,'OP_EqInstructionWindowGoalCmd',655),(8210,57032,57047,'OP_EqInstructionWindowTaskCmd',656),(8211,57032,57047,'OP_EqEnableGameEventCmd',657),(8212,57032,57047,'OP_EqShowWindowCmd',658),(8213,57032,57047,'OP_EqEnableWindowCmd',659),(8214,57032,57047,'OP_EqFlashWindowCmd',660),(8215,57032,57047,'OP_EqHearPlayFlavorCmd',662),(8216,57032,57047,'OP_EqUpdateSignWidgetCmd',663),(8217,57032,57047,'OP_EqDebugPVDCmd',664),(8218,57032,57047,'OP_EqShowBookCmd',665),(8219,57032,57047,'OP_EqQuestionnaireCmd',666),(8220,57032,57047,'OP_EqGetProbsCmd',668),(8221,57032,57047,'OP_EqHearHealCmd',669),(8222,57032,57047,'OP_EqChatChannelUpdateCmd',670),(8223,57032,57047,'OP_EqWhoChannelQueryReplyCmd',671),(8224,57032,57047,'OP_EqAvailWorldChannelsCmd',672),(8225,57032,57047,'OP_EqUpdateTargetCmd',673),(8226,57032,57047,'OP_BrokerSellList',674),(8227,57032,57047,'OP_EqConsignmentItemsCmd',675),(8228,57032,57047,'OP_EqStartBrokerCmd',677),(8229,57032,57047,'OP_EqMapExplorationCmd',678),(8230,57032,57047,'OP_EqStoreLogCmd',679),(8231,57032,57047,'OP_EqSpellMoveToRangeAndRetryCmd',680),(8232,57032,57047,'OP_EqUpdatePlayerMailCmd',681),(8233,57032,57047,'OP_GuildStatusUpdate',684),(8234,57032,57047,'OP_EqArenaResultsCmd',685),(8235,57032,57047,'OP_EqGuildBankEventActionCmd',686),(8236,57032,57047,'OP_EqGuildBankExamineInfoCmd',687),(8237,57032,57047,'OP_EqHearSpellNoLandCmd',688),(8238,57032,57047,'OP_Lottery',689),(8239,57032,57047,'OP_GuildRecruitingMemberInfo',690),(8240,57032,57047,'OP_GuildRecruiting',691),(8241,57032,57047,'OP_GuildRecruitingDetails',692),(8242,57032,57047,'OP_GuildRecruitingImage',693),(8243,57032,57047,'OP_TradeskillList',694),(8244,57032,57047,'OP_CharRenamed',695),(8245,57032,57047,'OP_UseAdornment',705),(8246,57032,57047,'OP_ExpPurchWindow',711),(8247,57032,57047,'OP_PointOfInterest',715),(8248,57032,57047,'OP_PointOfInterest2',716),(8249,57032,57047,'OP_TraitsList',717),(8250,57032,57047,'OP_CustomizeHouseDisplay',720),(8251,57032,57047,'OP_VoiceChatServer',721),(8252,57032,57047,'OP_SupplyDepot',725),(8253,57032,57047,'OP_EQHearThreatCmd',726),(8254,57032,57047,'OP_RecipeList',727),(8255,57032,57047,'OP_Research',728),(8256,57032,57047,'OP_CharacterCurrency',729),(8257,57032,57047,'OP_CharacterAchievements',730),(8258,57032,57047,'OP_AchievementUpdateMsg',731),(8259,57032,57047,'OP_EQHearDispellCmd',732),(8260,57032,57047,'OP_JournalQuestStoryline',733),(8261,57032,57047,'OP_DungeonPlayAsAvatarList',734),(8262,57032,57047,'OP_DungeonPlayAsAvatarSelected',735),(8263,57032,57047,'OP_MercHireWindow',736),(8264,57032,57047,'OP_MercUnknown',737),(8265,57032,57047,'OP_Unknown',750),(8266,57048,57079,'OP_LoginRequestMsg',0),(8267,57048,57079,'OP_LoginByNumRequestMsg',1),(8268,57048,57079,'OP_WSLoginRequestMsg',2),(8269,57048,57079,'OP_ESLoginRequestMsg',3),(8270,57048,57079,'OP_LoginReplyMsg',4),(8271,57048,57079,'OP_WSStatusReplyMsg',5),(8272,57048,57079,'OP_WorldStatusChangeMsg',6),(8273,57048,57079,'OP_AllWSDescRequestMsg',7),(8274,57048,57079,'OP_WorldListMsg',8),(8275,57048,57079,'OP_AllCharactersDescRequestMsg',9),(8276,57048,57079,'OP_AllCharactersDescReplyMsg',10),(8277,57048,57079,'OP_CreateCharacterRequestMsg',11),(8278,57048,57079,'OP_CreateCharacterReplyMsg',12),(8279,57048,57079,'OP_WSCreateCharacterRequestMsg',13),(8280,57048,57079,'OP_WSCreateCharacterReplyMsg',14),(8281,57048,57079,'OP_ReskinCharacterRequestMsg',15),(8282,57048,57079,'OP_DeleteCharacterRequestMsg',16),(8283,57048,57079,'OP_DeleteCharacterReplyMsg',17),(8284,57048,57079,'OP_PlayCharacterRequestMsg',18),(8285,57048,57079,'OP_PlayCharacterReplyMsg',19),(8286,57048,57079,'OP_ExpectClientAsCharacterReplyMs',22),(8287,57048,57079,'OP_ServerPlayCharacterRequestMsg',23),(8288,57048,57079,'OP_ServerPlayCharacterReplyMsg',24),(8289,57048,57079,'OP_ESInitMsg',25),(8290,57048,57079,'OP_ESReadyForClientsMsg',26),(8291,57048,57079,'OP_CreateZoneInstanceMsg',29),(8292,57048,57079,'OP_ZoneInstanceCreateReplyMsg',30),(8293,57048,57079,'OP_ZoneInstanceDestroyedMsg',31),(8294,57048,57079,'OP_ExpectClientAsCharacterRequest',32),(8295,57048,57079,'OP_ZoneInfoMsg',33),(8296,57048,57079,'OP_DoneLoadingZoneResourcesMsg',34),(8297,57048,57079,'OP_DoneSendingInitialEntitiesMsg',35),(8298,57048,57079,'OP_DoneLoadingEntityResourcesMsg',36),(8299,57048,57079,'OP_PredictionUpdateMsg',37),(8300,57048,57079,'OP_UpdatePositionMsg',39),(8301,57048,57079,'OP_SetRemoteCmdsMsg',41),(8302,57048,57079,'OP_RemoteCmdMsg',42),(8303,57048,57079,'OP_GameWorldTimeMsg',43),(8304,57048,57079,'OP_MOTDMsg',44),(8305,57048,57079,'OP_ZoneMOTDMsg',45),(8306,57048,57079,'OP_AvatarCreatedMsg',46),(8307,57048,57079,'OP_AvatarDestroyedMsg',47),(8308,57048,57079,'OP_RequestCampMsg',50),(8309,57048,57079,'OP_CampStartedMsg',51),(8310,57048,57079,'OP_CampAbortedMsg',52),(8311,57048,57079,'OP_WhoQueryRequestMsg',53),(8312,57048,57079,'OP_WhoQueryReplyMsg',54),(8313,57048,57079,'OP_MonitorReplyMsg',55),(8314,57048,57079,'OP_MonitorCharacterListMsg',56),(8315,57048,57079,'OP_MonitorCharacterListRequestMsg',57),(8316,57048,57079,'OP_ClientCmdMsg',58),(8317,57048,57079,'OP_DispatchESMsg',59),(8318,57048,57079,'OP_DispatchClientCmdMsg',60),(8319,57048,57079,'OP_UpdateTargetMsg',61),(8320,57048,57079,'OP_UpdateTargetLocMsg',62),(8321,57048,57079,'OP_UpdateCharacterSheetMsg',63),(8322,57048,57079,'OP_CharacterPet',64),(8323,57048,57079,'OP_CharacterMerc',65),(8324,57048,57079,'OP_UpdateSpellBookMsg',66),(8325,57048,57079,'OP_UpdateInventoryMsg',68),(8326,57048,57079,'OP_AfterInvSpellUpdate',69),(8327,57048,57079,'OP_UpdateRecipeBookMsg',70),(8328,57048,57079,'OP_RequestRecipeDetailsMsg',71),(8329,57048,57079,'OP_RecipeDetailsMsg',72),(8330,57048,57079,'OP_UpdateSkillBookMsg',73),(8331,57048,57079,'OP_UpdateSkillsMsg',74),(8332,57048,57079,'OP_UpdateOpportunityMsg',75),(8333,57048,57079,'OP_ChangeZoneMsg',77),(8334,57048,57079,'OP_ClientTeleportRequestMsg',78),(8335,57048,57079,'OP_TeleportWithinZoneMsg',79),(8336,57048,57079,'OP_TeleportWithinZoneNoReloadMsg',80),(8337,57048,57079,'OP_MigrateClientToZoneRequestMsg',81),(8338,57048,57079,'OP_MigrateClientToZoneReplyMsg',82),(8339,57048,57079,'OP_ReadyToZoneMsg',84),(8340,57048,57079,'OP_RemoveClientFromGroupMsg',85),(8341,57048,57079,'OP_RemoveGroupFromGroupMsg',86),(8342,57048,57079,'OP_MakeGroupLeaderMsg',87),(8343,57048,57079,'OP_GroupCreatedMsg',88),(8344,57048,57079,'OP_GroupDestroyedMsg',89),(8345,57048,57079,'OP_GroupMemberAddedMsg',90),(8346,57048,57079,'OP_GroupMemberRemovedMsg',91),(8347,57048,57079,'OP_GroupRemovedFromGroupMsg',92),(8348,57048,57079,'OP_GroupLeaderChangedMsg',93),(8349,57048,57079,'OP_GroupResendOOZDataMsg',94),(8350,57048,57079,'OP_GroupSettingsChangedMsg',95),(8351,57048,57079,'OP_OutOfZoneMemberDataMsg',96),(8352,57048,57079,'OP_SendLatestRequestMsg',97),(8353,57048,57079,'OP_ClearDataMsg',98),(8354,57048,57079,'OP_SetSocialMsg',99),(8355,57048,57079,'OP_ESStatusMsg',100),(8356,57048,57079,'OP_ESZoneInstanceStatusMsg',101),(8357,57048,57079,'OP_ZonesStatusRequestMsg',102),(8358,57048,57079,'OP_ZonesStatusMsg',103),(8359,57048,57079,'OP_ESWeatherRequestMsg',104),(8360,57048,57079,'OP_ESWeatherRequestEndMsg',105),(8361,57048,57079,'OP_DialogSelectMsg',109),(8362,57048,57079,'OP_DialogCloseMsg',110),(8363,57048,57079,'OP_RemoveSpellEffectMsg',111),(8364,57048,57079,'OP_RemoveConcentrationMsg',112),(8365,57048,57079,'OP_QuestJournalOpenMsg',113),(8366,57048,57079,'OP_QuestJournalInspectMsg',114),(8367,57048,57079,'OP_QuestJournalSetVisibleMsg',115),(8368,57048,57079,'OP_QuestJournalWaypointMsg',116),(8369,57048,57079,'OP_CreateGuildRequestMsg',119),(8370,57048,57079,'OP_CreateGuildReplyMsg',120),(8371,57048,57079,'OP_GuildsayMsg',121),(8372,57048,57079,'OP_FellowshipExpMsg',122),(8373,57048,57079,'OP_DeleteGuildMsg',123),(8374,57048,57079,'OP_GuildUpdateMsg',124),(8375,57048,57079,'OP_ConsignmentCloseStoreMsg',125),(8376,57048,57079,'OP_ConsignItemRequestMsg',126),(8377,57048,57079,'OP_ConsignItemResponseMsg',127),(8378,57048,57079,'OP_PurchaseConsignmentRequestMsg',128),(8379,57048,57079,'OP_LikeOption',136),(8380,57048,57079,'OP_PublishHouse',138),(8381,57048,57079,'OP_PlayerMadeInstancesScreen',139),(8382,57048,57079,'OP_PlayerMadeInstances',140),(8383,57048,57079,'OP_HouseDeletedRemotelyMsg',142),(8384,57048,57079,'OP_UpdateHouseDataMsg',143),(8385,57048,57079,'OP_UpdateHouseAccessDataMsg',144),(8386,57048,57079,'OP_PlayerHouseBaseScreenMsg',145),(8387,57048,57079,'OP_PlayerHousePurchaseScreenMsg',146),(8388,57048,57079,'OP_PlayerHouseAccessUpdateMsg',147),(8389,57048,57079,'OP_PlayerHouseDisplayStatusMsg',148),(8390,57048,57079,'OP_PlayerHouseCloseUIMsg',149),(8391,57048,57079,'OP_BuyPlayerHouseMsg',150),(8392,57048,57079,'OP_BuyPlayerHouseTintMsg',151),(8393,57048,57079,'OP_CollectAllHouseItemsMsg',152),(8394,57048,57079,'OP_RelinquishHouseMsg',153),(8395,57048,57079,'OP_EnterHouseMsg',154),(8396,57048,57079,'OP_ExitHouseMsg',155),(8397,57048,57079,'OP_HouseDefaultAccessSetMsg',156),(8398,57048,57079,'OP_HouseAccessSetMsg',157),(8399,57048,57079,'OP_HouseAccessRemoveMsg',158),(8400,57048,57079,'OP_PayHouseUpkeepMsg',159),(8401,57048,57079,'OP_MoveableObjectPlacementCriteri',160),(8402,57048,57079,'OP_EnterMoveObjectModeMsg',161),(8403,57048,57079,'OP_PositionMoveableObject',162),(8404,57048,57079,'OP_CancelMoveObjectModeMsg',163),(8405,57048,57079,'OP_ShaderCustomizationMsg',164),(8406,57048,57079,'OP_ReplaceableSubMeshesMsg',165),(8407,57048,57079,'OP_HouseCustomizationScreenMsg',166),(8408,57048,57079,'OP_CustomizationPurchaseRequestMs',167),(8409,57048,57079,'OP_CustomizationSetRequestMsg',168),(8410,57048,57079,'OP_CustomizationReplyMsg',169),(8411,57048,57079,'OP_TintWidgetsMsg',170),(8412,57048,57079,'OP_ExamineConsignmentRequestMsg',171),(8413,57048,57079,'OP_ExamineConsignmentResponseMsg',172),(8414,57048,57079,'OP_UISettingsResponseMsg',173),(8415,57048,57079,'OP_UIResetMsg',174),(8416,57048,57079,'OP_KeymapLoadMsg',175),(8417,57048,57079,'OP_KeymapNoneMsg',176),(8418,57048,57079,'OP_KeymapDataMsg',177),(8419,57048,57079,'OP_KeymapSaveMsg',178),(8420,57048,57079,'OP_DispatchSpellCmdMsg',179),(8421,57048,57079,'OP_EntityVerbsRequestMsg',180),(8422,57048,57079,'OP_EntityVerbsReplyMsg',181),(8423,57048,57079,'OP_EntityVerbsVerbMsg',182),(8424,57048,57079,'OP_ChatRelationshipUpdateMsg',184),(8425,57048,57079,'OP_LootItemsRequestMsg',185),(8426,57048,57079,'OP_StoppedLootingMsg',186),(8427,57048,57079,'OP_SitMsg',187),(8428,57048,57079,'OP_StandMsg',188),(8429,57048,57079,'OP_SatMsg',189),(8430,57048,57079,'OP_StoodMsg',190),(8431,57048,57079,'OP_ClearForTakeOffMsg',191),(8432,57048,57079,'OP_ReadyForTakeOffMsg',192),(8433,57048,57079,'OP_ShowIllusionsMsg',193),(8434,57048,57079,'OP_HideIllusionsMsg',194),(8435,57048,57079,'OP_ExamineItemRequestMsg',195),(8436,57048,57079,'OP_ReadBookPageMsg',196),(8437,57048,57079,'OP_DefaultGroupOptionsRequestMsg',197),(8438,57048,57079,'OP_DefaultGroupOptionsMsg',198),(8439,57048,57079,'OP_GroupOptionsMsg',199),(8440,57048,57079,'OP_DisplayGroupOptionsScreenMsg',200),(8441,57048,57079,'OP_PetOptions',201),(8442,57048,57079,'OP_DisplayInnVisitScreenMsg',202),(8443,57048,57079,'OP_DumpSchedulerMsg',203),(8444,57048,57079,'OP_LSCheckAcctLockMsg',204),(8445,57048,57079,'OP_WSAcctLockStatusMsg',205),(8446,57048,57079,'OP_RequestHelpRepathMsg',206),(8447,57048,57079,'OP_RequestTargetLocMsg',207),(8448,57048,57079,'OP_UpdateMotdMsg',208),(8449,57048,57079,'OP_DestUpdateReq',210),(8450,57048,57079,'OP_PerformPlayerKnockbackMsg',213),(8451,57048,57079,'OP_PerformCameraShakeMsg',214),(8452,57048,57079,'OP_PopulateSkillMapsMsg',215),(8453,57048,57079,'OP_CancelledFeignMsg',216),(8454,57048,57079,'OP_SysClient',218),(8455,57048,57079,'OP_ShowCreateFromRecipeUIMsg',219),(8456,57048,57079,'OP_CancelCreateFromRecipeMsg',220),(8457,57048,57079,'OP_BeginItemCreationMsg',221),(8458,57048,57079,'OP_StopItemCreationMsg',222),(8459,57048,57079,'OP_ShowItemCreationProcessUIMsg',223),(8460,57048,57079,'OP_UpdateItemCreationProcessUIMsg',224),(8461,57048,57079,'OP_DisplayTSEventReactionMsg',225),(8462,57048,57079,'OP_ShowRecipeBookMsg',226),(8463,57048,57079,'OP_KnowledgebaseRequestMsg',227),(8464,57048,57079,'OP_KnowledgebaseResponseMsg',228),(8465,57048,57079,'OP_CSTicketHeaderRequestMsg',229),(8466,57048,57079,'OP_CSTicketInfoMsg',230),(8467,57048,57079,'OP_CSTicketCommentRequestMsg',231),(8468,57048,57079,'OP_CSTicketCommentResponseMsg',232),(8469,57048,57079,'OP_CSTicketCreateMsg',233),(8470,57048,57079,'OP_CSTicketAddCommentMsg',234),(8471,57048,57079,'OP_CSTicketDeleteMsg',235),(8472,57048,57079,'OP_CSTicketChangeNotificationMsg',236),(8473,57048,57079,'OP_WorldDataUpdateMsg',237),(8474,57048,57079,'OP_KnownLanguagesMsg',238),(8475,57048,57079,'OP_LsRequestClientCrashLogMsg',239),(8476,57048,57079,'OP_LsClientBaselogReplyMsg',240),(8477,57048,57079,'OP_LsClientCrashlogReplyMsg',241),(8478,57048,57079,'OP_LsClientAlertlogReplyMsg',242),(8479,57048,57079,'OP_LsClientVerifylogReplyMsg',243),(8480,57048,57079,'OP_ClientTeleportToLocationMsg',244),(8481,57048,57079,'OP_UpdateClientPredFlagsMsg',245),(8482,57048,57079,'OP_ChangeServerControlFlagMsg',246),(8483,57048,57079,'OP_CSToolsRequestMsg',247),(8484,57048,57079,'OP_CSToolsResponseMsg',248),(8485,57048,57079,'OP_AddSocialStructureStandingMsg',249),(8486,57048,57079,'OP_CreateBoatTransportsMsg',250),(8487,57048,57079,'OP_PositionBoatTransportMsg',251),(8488,57048,57079,'OP_MigrateBoatTransportMsg',252),(8489,57048,57079,'OP_MigrateBoatTransportReplyMsg',253),(8490,57048,57079,'OP_DisplayDebugNLLPointsMsg',254),(8491,57048,57079,'OP_ExamineInfoRequestMsg',255),(8492,57048,57079,'OP_QuickbarInitMsg',256),(8493,57048,57079,'OP_QuickbarUpdateMsg',257),(8494,57048,57079,'OP_MacroInitMsg',258),(8495,57048,57079,'OP_MacroUpdateMsg',259),(8496,57048,57079,'OP_QuestionnaireMsg',260),(8497,57048,57079,'OP_LevelChangedMsg',261),(8498,57048,57079,'OP_SpellGainedMsg',262),(8499,57048,57079,'OP_EncounterBrokenMsg',263),(8500,57048,57079,'OP_OnscreenMsgMsg',264),(8501,57048,57079,'OP_DisplayWarningMsg',265),(8502,57048,57079,'OP_ModifyGuildMsg',266),(8503,57048,57079,'OP_GuildEventMsg',267),(8504,57048,57079,'OP_GuildEventAddMsg',268),(8505,57048,57079,'OP_GuildEventActionMsg',269),(8506,57048,57079,'OP_GuildEventListMsg',270),(8507,57048,57079,'OP_RequestGuildEventDetailsMsg',271),(8508,57048,57079,'OP_GuildEventDetailsMsg',272),(8509,57048,57079,'OP_RequestGuildInfoMsg',273),(8510,57048,57079,'OP_GuildBankActionMsg',274),(8511,57048,57079,'OP_GuildBankActionResponseMsg',275),(8512,57048,57079,'OP_GuildBankItemDetailsRequestMsg',276),(8513,57048,57079,'OP_GuildBankItemDetailsResponseMs',277),(8514,57048,57079,'OP_GuildBankUpdateMsg',278),(8515,57048,57079,'OP_GuildBankEventListMsg',279),(8516,57048,57079,'OP_RequestGuildBankEventDetailsMs',280),(8517,57048,57079,'OP_RewardPackMsg',281),(8518,57048,57079,'OP_RenameGuildMsg',282),(8519,57048,57079,'OP_ZoneToFriendRequestMsg',283),(8520,57048,57079,'OP_ZoneToFriendReplyMsg',284),(8521,57048,57079,'OP_ChatCreateChannelMsg',285),(8522,57048,57079,'OP_ChatJoinChannelMsg',286),(8523,57048,57079,'OP_ChatWhoChannelMsg',287),(8524,57048,57079,'OP_ChatLeaveChannelMsg',288),(8525,57048,57079,'OP_ChatTellChannelMsg',289),(8526,57048,57079,'OP_ChatTellUserMsg',290),(8527,57048,57079,'OP_ChatToggleFriendMsg',291),(8528,57048,57079,'OP_BrokerAddBag',292),(8529,57048,57079,'OP_BrokerRemoveBag',293),(8530,57048,57079,'OP_ChatToggleIgnoreMsg',294),(8531,57048,57079,'OP_ChatSendFriendsMsg',295),(8532,57048,57079,'OP_ChatSendIgnoresMsg',296),(8533,57048,57079,'OP_QuestReward',320),(8534,57048,57079,'OP_ChatFiltersMsg',335),(8535,57048,57079,'OP_MailGetMessageMsg',338),(8536,57048,57079,'OP_MailSendMessageMsg',339),(8537,57048,57079,'OP_MailDeleteMessageMsg',340),(8538,57048,57079,'OP_MailGetHeadersReplyMsg',341),(8539,57048,57079,'OP_MailGetMessageReplyMsg',342),(8540,57048,57079,'OP_MailSendMessageReplyMsg',343),(8541,57048,57079,'OP_MailCommitSendMessageMsg',344),(8542,57048,57079,'OP_MailSendSystemMessageMsg',345),(8543,57048,57079,'OP_MailRemoveAttachFromMailMsg',346),(8544,57048,57079,'OP_WaypointRequestMsg',348),(8545,57048,57079,'OP_WaypointReplyMsg',349),(8546,57048,57079,'OP_WaypointSelectMsg',350),(8547,57048,57079,'OP_WaypointUpdateMsg',351),(8548,57048,57079,'OP_CharNameChangedMsg',352),(8549,57048,57079,'OP_ShowZoneTeleporterDestinations',353),(8550,57048,57079,'OP_SelectZoneTeleporterDestinatio',354),(8551,57048,57079,'OP_ReloadLocalizedTxtMsg',355),(8552,57048,57079,'OP_RequestGuildMembershipMsg',356),(8553,57048,57079,'OP_GuildMembershipResponseMsg',357),(8554,57048,57079,'OP_LeaveGuildNotifyMsg',358),(8555,57048,57079,'OP_JoinGuildNotifyMsg',359),(8556,57048,57079,'OP_AvatarUpdateMsg',360),(8557,57048,57079,'OP_BioUpdateMsg',362),(8558,57048,57079,'OP_InspectPlayerMsg',363),(8559,57048,57079,'OP_WSServerLockMsg',364),(8560,57048,57079,'OP_LSServerLockMsg',365),(8561,57048,57079,'OP_WSServerHideMsg',366),(8562,57048,57079,'OP_CsCategoryRequestMsg',367),(8563,57048,57079,'OP_CsCategoryResponseMsg',368),(8564,57048,57079,'OP_KnowledgeWindowSlotMappingMsg',369),(8565,57048,57079,'OP_AFKUpdateMsg',370),(8566,57048,57079,'OP_AnonUpdateMsg',371),(8567,57048,57079,'OP_UpdateActivePublicZonesMsg',372),(8568,57048,57079,'OP_UnknownNpcMsg',373),(8569,57048,57079,'OP_PromoFlagsDetailsMsg',374),(8570,57048,57079,'OP_ConsignViewCreateMsg',375),(8571,57048,57079,'OP_ConsignViewGetPageMsg',376),(8572,57048,57079,'OP_ConsignViewReleaseMsg',377),(8573,57048,57079,'OP_ConsignRemoveItemsMsg',378),(8574,57048,57079,'OP_UpdateDebugRadiiMsg',379),(8575,57048,57079,'OP_ReportMsg',380),(8576,57048,57079,'OP_UpdateRaidMsg',381),(8577,57048,57079,'OP_ConsignViewSortMsg',383),(8578,57048,57079,'OP_TitleUpdateMsg',384),(8579,57048,57079,'OP_ClientFellMsg',385),(8580,57048,57079,'OP_ClientInDeathRegionMsg',386),(8581,57048,57079,'OP_CampClientMsg',387),(8582,57048,57079,'OP_CSToolAccessResponseMsg',388),(8583,57048,57079,'OP_UpdateGroupMemberDataMsg',388),(8584,57048,57079,'OP_TrackingUpdateMsg',389),(8585,57048,57079,'OP_BeginTrackingMsg',390),(8586,57048,57079,'OP_StopTrackingMsg',391),(8587,57048,57079,'OP_GetAvatarAccessRequestForCSToo',393),(8588,57048,57079,'OP_AdvancementRequestMsg',394),(8589,57048,57079,'OP_MapFogDataInitMsg',395),(8590,57048,57079,'OP_MapFogDataUpdateMsg',396),(8591,57048,57079,'OP_CloseGroupInviteWindowMsg',397),(8592,57048,57079,'OP_WorldPingMsg',399),(8593,57048,57079,'OP_MoveLogUpdateMsg',400),(8594,57048,57079,'OP_OfferQuestMsg',401),(8595,57048,57079,'OP_WorldShutdownUpdateMsg',403),(8596,57048,57079,'OP_DisplayMailScreenMsg',404),(8597,57048,57079,'OP_ClientIdleBeginMsg',405),(8598,57048,57079,'OP_ClientIdleEndMsg',406),(8599,57048,57079,'OP_PurchaseConsignmentLoreCheckRe',407),(8600,57048,57079,'OP_NotifyApprenticeStoppedMentori',408),(8601,57048,57079,'OP_CorruptedClientMsg',409),(8602,57048,57079,'OP_WorldDataChangeMsg',410),(8603,57048,57079,'OP_MailEventNotificationMsg',411),(8604,57048,57079,'OP_RestartZoneMsg',412),(8605,57048,57079,'OP_FlightPathsMsg',413),(8606,57048,57079,'OP_CharacterLinkdeadMsg',414),(8607,57048,57079,'OP_CharTransferStartRequestMsg',415),(8608,57048,57079,'OP_CharTransferStartReplyMsg',416),(8609,57048,57079,'OP_CharTransferRequestMsg',417),(8610,57048,57079,'OP_CharTransferReplyMsg',418),(8611,57048,57079,'OP_CharTransferRollbackRequestMsg',419),(8612,57048,57079,'OP_CharTransferCommitRequestMsg',420),(8613,57048,57079,'OP_CharTransferRollbackReplyMsg',421),(8614,57048,57079,'OP_CharTransferCommitReplyMsg',422),(8615,57048,57079,'OP_GetCharacterSerializedRequestM',423),(8616,57048,57079,'OP_GetCharacterSerializedReplyMsg',424),(8617,57048,57079,'OP_CreateCharFromCBBRequestMsg',425),(8618,57048,57079,'OP_CreateCharFromCBBReplyMsg',426),(8619,57048,57079,'OP_HousingDataChangedMsg',427),(8620,57048,57079,'OP_HousingRestoreMsg',428),(8621,57048,57079,'OP_AuctionItem',429),(8622,57048,57079,'OP_AuctionItemReply',430),(8623,57048,57079,'OP_AuctionCoin',431),(8624,57048,57079,'OP_AuctionCoinReply',432),(8625,57048,57079,'OP_AuctionCharacter',433),(8626,57048,57079,'OP_AuctionCharacterReply',434),(8627,57048,57079,'OP_AuctionCommitMsg',435),(8628,57048,57079,'OP_AuctionAbortMsg',436),(8629,57048,57079,'OP_CharTransferValidateRequestMsg',437),(8630,57048,57079,'OP_CharTransferValidateReplyMsg',438),(8631,57048,57079,'OP_RaceRestrictionMsg',439),(8632,57048,57079,'OP_SetInstanceDisplayNameMsg',440),(8633,57048,57079,'OP_GetAuctionAssetIDMsg',441),(8634,57048,57079,'OP_GetAuctionAssetIDReplyMsg',442),(8635,57048,57079,'OP_ResendWorldChannelsMsg',443),(8636,57048,57079,'OP_DisplayExchangeScreenMsg',444),(8637,57048,57079,'OP_ArenaGameTypesMsg',445),(8638,57048,57079,'OP_AuditAuctionEventMsg',446),(8639,57048,57079,'OP_InviteRequestMsg',447),(8640,57048,57079,'OP_InviteResponseMsg',448),(8641,57048,57079,'OP_InviteTargetResponseMsg',449),(8642,57048,57079,'OP_InspectPlayerRequestMsg',450),(8643,57048,57079,'OP_DispatchMsg',451),(8644,57048,57079,'OP_DisplayEventMsg',452),(8645,57048,57079,'OP_PrePossessionMsg',453),(8646,57048,57079,'OP_PostPossessionMsg',454),(8647,57048,57079,'OP_ArenaCreate',456),(8648,57048,57079,'OP_ArenaList',457),(8649,57048,57079,'OP_ArenaWindow',465),(8650,57048,57079,'OP_HouseItemsList',484),(8651,57048,57079,'OP_CurrentPet',485),(8652,57048,57079,'OP_AdventureList',488),(8653,57048,57079,'OP_CancelSpellCast',489),(8654,57048,57079,'OP_ClearForLandingMsg',491),(8655,57048,57079,'OP_UpdateTitleCmd',494),(8656,57048,57079,'OP_AttackAllowed',500),(8657,57048,57079,'OP_AttackNotAllowed',501),(8658,57048,57079,'OP_BagOptions',502),(8659,57048,57079,'OP_LFGGroupSearch',504),(8660,57048,57079,'OP_CharacterHousingList',507),(8661,57048,57079,'OP_DressingRoom',510),(8662,57048,57079,'OP_PlayLon',511),(8663,57048,57079,'OP_SkillInfoRequest',514),(8664,57048,57079,'OP_SkillInfoResponse',515),(8665,57048,57079,'OP_LFGUpdateMsg',518),(8666,57048,57079,'OP_BadLanguageFilter',519),(8667,57048,57079,'OP_VoiceChatChannel',520),(8668,57048,57079,'OP_MapRequest',521),(8669,57048,57079,'OP_MarketFundsUpdate',526),(8670,57048,57079,'OP_UIEvent',527),(8671,57048,57079,'OP_MarketAddFundsRequest',528),(8672,57048,57079,'OP_MarketAddFundsReply',529),(8673,57048,57079,'OP_MarketPurchase',531),(8674,57048,57079,'OP_MarketPlacePrices',532),(8675,57048,57079,'OP_MarketPlaceItems',537),(8676,57048,57079,'OP_RecipeBook',538),(8677,57048,57079,'OP_CreateCharacterDungeon',547),(8678,57048,57079,'OP_DungeonMakerEnter',548),(8679,57048,57079,'OP_DungeonMakerItemRequest',550),(8680,57048,57079,'OP_CharacterCreatedDungeons',551),(8681,57048,57079,'OP_DungeonMakerToolboxList',552),(8682,57048,57079,'OP_DungeonMakerUnknown',553),(8683,57048,57079,'OP_DungeonMakerUnknown1',554),(8684,57048,57079,'OP_PlayerPollPopup',556),(8685,57048,57079,'OP_PlayerPollAnswer',557),(8686,57048,57079,'OP_MentorPopup',558),(8687,57048,57079,'OP_LoadWelcomeWindow',560),(8688,57048,57079,'OP_OpenCharCust',561),(8689,57048,57079,'OP_SubmitCharCust',562),(8690,57048,57079,'OP_QueAllBgSolo',564),(8691,57048,57079,'OP_ZoneBgInstanceList',566),(8692,57048,57079,'OP_WorldTravelAvail',570),(8693,57048,57079,'OP_Launchpad',572),(8694,57048,57079,'OP_GarbagePacket',574),(8695,57048,57079,'OP_LoadCalendarEvents',575),(8696,57048,57079,'OP_VideoUploaded',576),(8697,57048,57079,'OP_SavageBarInitMsg',577),(8698,57048,57079,'OP_PetOptionsResponse',578),(8699,57048,57079,'OP_DungeonMakerItemResponse',579),(8700,57048,57079,'OP_CharacterMounts',581),(8701,57048,57079,'OP_RecipeListUnknown',590),(8702,57048,57079,'OP_EqBetaCopyRequest',596),(8703,57048,57079,'OP_EqHearChatCmd',597),(8704,57048,57079,'OP_EqDisplayTextCmd',598),(8705,57048,57079,'OP_EqCreateGhostCmd',599),(8706,57048,57079,'OP_EqCreateWidgetCmd',600),(8707,57048,57079,'OP_EqCreateSignWidgetCmd',601),(8708,57048,57079,'OP_EqDestroyGhostCmd',602),(8709,57048,57079,'OP_EqUpdateGhostCmd',603),(8710,57048,57079,'OP_EqSetControlGhostCmd',604),(8711,57048,57079,'OP_EqSetPOVGhostCmd',605),(8712,57048,57079,'OP_EqHearCombatCmd',606),(8713,57048,57079,'OP_EqHearSpellCastCmd',607),(8714,57048,57079,'OP_EQHearProcCmd',608),(8715,57048,57079,'OP_EQHearResEffectCmd',609),(8716,57048,57079,'OP_EqHearSpellInterruptCmd',610),(8717,57048,57079,'OP_EqHearSpellFizzleCmd',611),(8718,57048,57079,'OP_EqHearConsiderCmd',612),(8719,57048,57079,'OP_EqUpdateSubClassesCmd',613),(8720,57048,57079,'OP_EqCreateListBoxCmd',614),(8721,57048,57079,'OP_EqSetDebugPathPointsCmd',615),(8722,57048,57079,'OP_EqCannedEmoteCmd',617),(8723,57048,57079,'OP_EqStateCmd',618),(8724,57048,57079,'OP_EqPlaySoundCmd',619),(8725,57048,57079,'OP_EqPlaySound3DCmd',620),(8726,57048,57079,'OP_EqPlayVoiceCmd',621),(8727,57048,57079,'OP_EqHearDrowningCmd',622),(8728,57048,57079,'OP_EqHearDeathCmd',623),(8729,57048,57079,'OP_EqGroupMemberRemovedCmd',624),(8730,57048,57079,'OP_EqHearChainEffectCmd',625),(8731,57048,57079,'OP_EqReceiveOfferCmd',626),(8732,57048,57079,'OP_EqInspectPCResultsCmd',627),(8733,57048,57079,'OP_EqDrawablePathGraphCmd',628),(8734,57048,57079,'OP_EqDialogOpenCmd',629),(8735,57048,57079,'OP_EqDialogCloseCmd',630),(8736,57048,57079,'OP_EqFactionUpdateCmd',631),(8737,57048,57079,'OP_EqCollectionUpdateCmd',632),(8738,57048,57079,'OP_EqCollectionFilterCmd',633),(8739,57048,57079,'OP_EqCollectionItemCmd',634),(8740,57048,57079,'OP_EqQuestJournalUpdateCmd',635),(8741,57048,57079,'OP_EqMentoring',636),(8742,57048,57079,'OP_EqQuestJournalReplyCmd',637),(8743,57048,57079,'OP_EqQuestGroupCmd',638),(8744,57048,57079,'OP_EqUpdateMerchantCmd',639),(8745,57048,57079,'OP_EqUpdateStoreCmd',640),(8746,57048,57079,'OP_EqUpdatePlayerTradeCmd',641),(8747,57048,57079,'OP_EqHelpPathCmd',642),(8748,57048,57079,'OP_EqHelpPathClearCmd',643),(8749,57048,57079,'OP_EqUpdateBankCmd',644),(8750,57048,57079,'OP_EqExamineInfoCmd',645),(8751,57048,57079,'OP_EqCloseWindowCmd',646),(8752,57048,57079,'OP_EqUpdateLootCmd',647),(8753,57048,57079,'OP_EqJunctionListCmd',648),(8754,57048,57079,'OP_EqShowDeathWindowCmd',649),(8755,57048,57079,'OP_EqDisplaySpellFailCmd',650),(8756,57048,57079,'OP_EqSpellCastStartCmd',651),(8757,57048,57079,'OP_EqSpellCastEndCmd',652),(8758,57048,57079,'OP_EqResurrectedCmd',653),(8759,57048,57079,'OP_EqChoiceWinCmd',654),(8760,57048,57079,'OP_EqSetDefaultVerbCmd',655),(8761,57048,57079,'OP_EqInstructionWindowCmd',656),(8762,57048,57079,'OP_EqInstructionWindowCloseCmd',657),(8763,57048,57079,'OP_EqInstructionWindowGoalCmd',658),(8764,57048,57079,'OP_EqInstructionWindowTaskCmd',659),(8765,57048,57079,'OP_EqEnableGameEventCmd',660),(8766,57048,57079,'OP_EqShowWindowCmd',661),(8767,57048,57079,'OP_EqEnableWindowCmd',662),(8768,57048,57079,'OP_EqFlashWindowCmd',663),(8769,57048,57079,'OP_EqHearPlayFlavorCmd',665),(8770,57048,57079,'OP_EqUpdateSignWidgetCmd',666),(8771,57048,57079,'OP_EqDebugPVDCmd',667),(8772,57048,57079,'OP_EqShowBookCmd',668),(8773,57048,57079,'OP_EqQuestionnaireCmd',669),(8774,57048,57079,'OP_EqGetProbsCmd',671),(8775,57048,57079,'OP_EqHearHealCmd',672),(8776,57048,57079,'OP_EqChatChannelUpdateCmd',673),(8777,57048,57079,'OP_EqWhoChannelQueryReplyCmd',674),(8778,57048,57079,'OP_EqAvailWorldChannelsCmd',675),(8779,57048,57079,'OP_EqUpdateTargetCmd',676),(8780,57048,57079,'OP_BrokerSellList',677),(8781,57048,57079,'OP_EqConsignmentItemsCmd',678),(8782,57048,57079,'OP_EqStartBrokerCmd',680),(8783,57048,57079,'OP_EqMapExplorationCmd',681),(8784,57048,57079,'OP_EqStoreLogCmd',682),(8785,57048,57079,'OP_EqSpellMoveToRangeAndRetryCmd',683),(8786,57048,57079,'OP_EqUpdatePlayerMailCmd',684),(8787,57048,57079,'OP_GuildStatusUpdate',687),(8788,57048,57079,'OP_EqArenaResultsCmd',688),(8789,57048,57079,'OP_EqGuildBankEventActionCmd',689),(8790,57048,57079,'OP_EqGuildBankExamineInfoCmd',690),(8791,57048,57079,'OP_EqHearSpellNoLandCmd',691),(8792,57048,57079,'OP_Lottery',692),(8793,57048,57079,'OP_GuildRecruitingMemberInfo',693),(8794,57048,57079,'OP_GuildRecruiting',694),(8795,57048,57079,'OP_GuildRecruitingDetails',695),(8796,57048,57079,'OP_GuildRecruitingImage',696),(8797,57048,57079,'OP_TradeskillList',697),(8798,57048,57079,'OP_CharRenamed',698),(8799,57048,57079,'OP_UseAdornment',708),(8800,57048,57079,'OP_ExpPurchWindow',714),(8801,57048,57079,'OP_PointOfInterest',718),(8802,57048,57079,'OP_PointOfInterest2',719),(8803,57048,57079,'OP_TraitsList',720),(8804,57048,57079,'OP_CustomizeHouseDisplay',723),(8805,57048,57079,'OP_VoiceChatServer',724),(8806,57048,57079,'OP_SupplyDepot',728),(8807,57048,57079,'OP_EQHearThreatCmd',729),(8808,57048,57079,'OP_RecipeList',730),(8809,57048,57079,'OP_Research',731),(8810,57048,57079,'OP_CharacterCurrency',732),(8811,57048,57079,'OP_CharacterAchievements',733),(8812,57048,57079,'OP_AchievementUpdateMsg',734),(8813,57048,57079,'OP_EQHearDispellCmd',735),(8814,57048,57079,'OP_JournalQuestStoryline',736),(8815,57048,57079,'OP_DungeonPlayAsAvatarList',737),(8816,57048,57079,'OP_DungeonPlayAsAvatarSelected',738),(8817,57048,57079,'OP_MercHireWindow',739),(8818,57048,57079,'OP_MercUnknown',740),(8819,57048,57079,'OP_Unknown',753),(9289,57048,57079,'OP_DailyObjectives',594),(9290,1193,1195,'OP_Weakness',575),(9291,1198,1199,'OP_Weakness',575),(9292,1204,1205,'OP_Weakness',576),(9293,1208,1208,'OP_Weakness',577),(9294,57000,57002,'OP_Weakness',577),(9295,57003,57016,'OP_Weakness',578),(9296,57032,57047,'OP_Weakness',578),(9297,57048,57079,'OP_Weakness',580); +/*!40000 ALTER TABLE `opcodes` ENABLE KEYS */; +UNLOCK TABLES; + +-- +-- Table structure for table `parser_stats` +-- + +DROP TABLE IF EXISTS `parser_stats`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `parser_stats` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `data_version` smallint(5) unsigned NOT NULL DEFAULT '0', + `log_file` varchar(250) COLLATE latin1_general_ci NOT NULL DEFAULT '', + `total_items` smallint(5) unsigned NOT NULL DEFAULT '0', + `unique_items` smallint(5) unsigned NOT NULL DEFAULT '0', + `new_items` smallint(5) unsigned NOT NULL DEFAULT '0', + `total_spawns` smallint(5) unsigned NOT NULL DEFAULT '0', + `unique_spawns` smallint(5) unsigned NOT NULL DEFAULT '0', + `new_spawns` smallint(5) unsigned NOT NULL DEFAULT '0', + `total_spells` smallint(5) unsigned NOT NULL DEFAULT '0', + `unique_spells` smallint(5) unsigned NOT NULL DEFAULT '0', + `new_spells` smallint(5) unsigned NOT NULL DEFAULT '0', + `total_specials` smallint(5) unsigned NOT NULL DEFAULT '0', + `unique_specials` smallint(5) unsigned NOT NULL DEFAULT '0', + `new_specials` smallint(5) unsigned NOT NULL DEFAULT '0', + `total_achievements` smallint(5) unsigned NOT NULL DEFAULT '0', + `unique_achievements` smallint(5) unsigned NOT NULL DEFAULT '0', + `new_achievements` smallint(5) unsigned NOT NULL DEFAULT '0', + `total_advancements` smallint(5) unsigned NOT NULL DEFAULT '0', + `unique_advancements` smallint(5) unsigned NOT NULL DEFAULT '0', + `new_advancements` smallint(5) unsigned NOT NULL DEFAULT '0', + `total_abilities` smallint(5) unsigned NOT NULL DEFAULT '0', + `unique_abilities` smallint(5) unsigned NOT NULL DEFAULT '0', + `new_abilities` smallint(5) unsigned NOT NULL DEFAULT '0', + `total_traditions` smallint(5) unsigned NOT NULL DEFAULT '0', + `unique_traditions` smallint(5) unsigned NOT NULL DEFAULT '0', + `new_traditions` smallint(5) unsigned NOT NULL DEFAULT '0', + `total_trainings` smallint(5) unsigned NOT NULL DEFAULT '0', + `unique_trainings` smallint(5) unsigned NOT NULL DEFAULT '0', + `new_trainings` smallint(5) unsigned NOT NULL DEFAULT '0', + `total_poi` smallint(5) unsigned NOT NULL DEFAULT '0', + `unique_poi` smallint(5) unsigned NOT NULL DEFAULT '0', + `new_poi` smallint(5) unsigned NOT NULL DEFAULT '0', + `total_locations` smallint(5) unsigned NOT NULL DEFAULT '0', + `unique_locations` smallint(5) unsigned NOT NULL DEFAULT '0', + `new_locations` smallint(5) unsigned NOT NULL DEFAULT '0', + `total_quests` smallint(5) unsigned NOT NULL DEFAULT '0', + `unique_quests` smallint(5) unsigned NOT NULL DEFAULT '0', + `new_quests` smallint(5) unsigned NOT NULL DEFAULT '0', + `total_factions` smallint(5) unsigned NOT NULL DEFAULT '0', + `unique_factions` smallint(5) unsigned NOT NULL DEFAULT '0', + `new_factions` smallint(5) unsigned NOT NULL DEFAULT '0', + `total_collections` smallint(5) unsigned NOT NULL DEFAULT '0', + `unique_collections` smallint(5) unsigned NOT NULL DEFAULT '0', + `new_collections` smallint(5) unsigned NOT NULL DEFAULT '0', + `total_aa` smallint(5) unsigned NOT NULL DEFAULT '0', + `unique_aa` smallint(5) unsigned NOT NULL DEFAULT '0', + `new_aa` smallint(5) unsigned NOT NULL DEFAULT '0', + `total_titles` smallint(5) unsigned NOT NULL DEFAULT '0', + `unique_titles` smallint(5) unsigned NOT NULL DEFAULT '0', + `new_titles` smallint(5) unsigned NOT NULL DEFAULT '0', + `total_books` smallint(5) unsigned NOT NULL DEFAULT '0', + `unique_books` smallint(5) unsigned NOT NULL DEFAULT '0', + `new_books` smallint(5) unsigned NOT NULL DEFAULT '0', + `total_skills` smallint(5) unsigned NOT NULL DEFAULT '0', + `unique_skills` smallint(5) unsigned NOT NULL DEFAULT '0', + `new_skills` smallint(5) unsigned NOT NULL DEFAULT '0', + `total_recipe_det` smallint(5) unsigned NOT NULL DEFAULT '0', + `unique_recipe_det` smallint(5) unsigned NOT NULL DEFAULT '0', + `new_recipe_det` smallint(5) unsigned NOT NULL DEFAULT '0', + `total_recipes` smallint(5) unsigned NOT NULL DEFAULT '0', + `unique_recipes` smallint(5) unsigned NOT NULL DEFAULT '0', + `new_recipes` smallint(5) unsigned NOT NULL DEFAULT '0', + `total_recipes_list` smallint(5) unsigned NOT NULL DEFAULT '0', + `unique_recipes_list` smallint(5) unsigned NOT NULL DEFAULT '0', + `new_recipes_list` smallint(5) unsigned NOT NULL DEFAULT '0', + `total_commands` smallint(5) unsigned NOT NULL DEFAULT '0', + `unique_commands` smallint(5) unsigned NOT NULL DEFAULT '0', + `new_commands` smallint(5) unsigned NOT NULL DEFAULT '0', + PRIMARY KEY (`id`) +) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Dumping data for table `parser_stats` +-- + +LOCK TABLES `parser_stats` WRITE; +/*!40000 ALTER TABLE `parser_stats` DISABLE KEYS */; +/*!40000 ALTER TABLE `parser_stats` ENABLE KEYS */; +UNLOCK TABLES; + +-- +-- Table structure for table `raw_abilities` +-- + +DROP TABLE IF EXISTS `raw_abilities`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `raw_abilities` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `ability_id` int(10) unsigned NOT NULL DEFAULT '0', + `icon` smallint(5) unsigned NOT NULL DEFAULT '0', + `icon2` smallint(5) unsigned NOT NULL DEFAULT '0', + `unknown` int(10) unsigned NOT NULL DEFAULT '0', + `name` varchar(250) COLLATE latin1_general_ci DEFAULT '', + `data_version` smallint(5) unsigned NOT NULL, + `language_type` tinyint(3) unsigned NOT NULL DEFAULT '0', + `log_file` varchar(250) COLLATE latin1_general_ci DEFAULT '', + PRIMARY KEY (`id`), + UNIQUE KEY `ability_id` (`ability_id`) +) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Dumping data for table `raw_abilities` +-- + +LOCK TABLES `raw_abilities` WRITE; +/*!40000 ALTER TABLE `raw_abilities` DISABLE KEYS */; +/*!40000 ALTER TABLE `raw_abilities` ENABLE KEYS */; +UNLOCK TABLES; + +-- +-- Table structure for table `raw_achievements` +-- + +DROP TABLE IF EXISTS `raw_achievements`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `raw_achievements` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `achievement_id` int(10) unsigned NOT NULL DEFAULT '0', + `title` varchar(50) COLLATE latin1_general_ci NOT NULL, + `uncompleted_text` varchar(255) COLLATE latin1_general_ci DEFAULT NULL, + `completed_text` varchar(255) COLLATE latin1_general_ci DEFAULT NULL, + `category` varchar(50) COLLATE latin1_general_ci DEFAULT NULL, + `expansion` varchar(50) COLLATE latin1_general_ci DEFAULT NULL, + `icon` smallint(5) unsigned NOT NULL DEFAULT '0', + `point_value` int(10) unsigned NOT NULL DEFAULT '0', + `qty_req` int(10) unsigned NOT NULL DEFAULT '0', + `hide_achievement` tinyint(1) unsigned NOT NULL DEFAULT '0', + `unknown3a` int(10) unsigned NOT NULL DEFAULT '0', + `unknown3b` int(10) unsigned NOT NULL DEFAULT '0', + `data_version` smallint(5) unsigned NOT NULL DEFAULT '0', + `log_file` varchar(250) COLLATE latin1_general_ci NOT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `id` (`achievement_id`,`title`) +) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Dumping data for table `raw_achievements` +-- + +LOCK TABLES `raw_achievements` WRITE; +/*!40000 ALTER TABLE `raw_achievements` DISABLE KEYS */; +/*!40000 ALTER TABLE `raw_achievements` ENABLE KEYS */; +UNLOCK TABLES; + +-- +-- Table structure for table `raw_achievements_requirements` +-- + +DROP TABLE IF EXISTS `raw_achievements_requirements`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `raw_achievements_requirements` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `achievement_id` int(10) unsigned NOT NULL DEFAULT '0', + `name` varchar(250) COLLATE latin1_general_ci DEFAULT NULL, + `qty_req` int(10) unsigned NOT NULL DEFAULT '0', + PRIMARY KEY (`id`), + UNIQUE KEY `NewIndex` (`name`) +) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Dumping data for table `raw_achievements_requirements` +-- + +LOCK TABLES `raw_achievements_requirements` WRITE; +/*!40000 ALTER TABLE `raw_achievements_requirements` DISABLE KEYS */; +/*!40000 ALTER TABLE `raw_achievements_requirements` ENABLE KEYS */; +UNLOCK TABLES; + +-- +-- Table structure for table `raw_achievements_rewards` +-- + +DROP TABLE IF EXISTS `raw_achievements_rewards`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `raw_achievements_rewards` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `achievement_id` int(10) unsigned NOT NULL DEFAULT '0', + `reward` varchar(250) COLLATE latin1_general_ci DEFAULT '"', + PRIMARY KEY (`id`), + UNIQUE KEY `id` (`achievement_id`,`reward`) +) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Dumping data for table `raw_achievements_rewards` +-- + +LOCK TABLES `raw_achievements_rewards` WRITE; +/*!40000 ALTER TABLE `raw_achievements_rewards` DISABLE KEYS */; +/*!40000 ALTER TABLE `raw_achievements_rewards` ENABLE KEYS */; +UNLOCK TABLES; + +-- +-- Table structure for table `raw_adventure_list` +-- + +DROP TABLE IF EXISTS `raw_adventure_list`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `raw_adventure_list` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `unknown6` int(10) unsigned NOT NULL DEFAULT '0', + `unknown7` tinyint(3) unsigned NOT NULL DEFAULT '0', + `spell_id` int(10) unsigned NOT NULL DEFAULT '0', + `unknown10` smallint(3) unsigned NOT NULL DEFAULT '0', + `name` varchar(250) COLLATE latin1_general_ci DEFAULT NULL, + `description` varchar(250) COLLATE latin1_general_ci DEFAULT NULL, + `icon` mediumint(5) unsigned NOT NULL DEFAULT '0', + `icon2` mediumint(5) unsigned NOT NULL DEFAULT '0', + `current_rank` tinyint(3) unsigned NOT NULL DEFAULT '0', + `max_rank` tinyint(3) unsigned NOT NULL DEFAULT '0', + `rank_cost` tinyint(3) unsigned NOT NULL DEFAULT '0', + `unknown11` tinyint(3) unsigned NOT NULL DEFAULT '0', + `class_name` varchar(50) COLLATE latin1_general_ci DEFAULT NULL, + `points_req` tinyint(3) unsigned NOT NULL DEFAULT '0', + `subclass_name` varchar(50) COLLATE latin1_general_ci DEFAULT NULL, + `icon_col` tinyint(3) unsigned NOT NULL DEFAULT '0', + `icon_row` tinyint(3) unsigned NOT NULL DEFAULT '0', + `line_title` varchar(50) COLLATE latin1_general_ci DEFAULT NULL, + `unknown20` int(10) unsigned NOT NULL DEFAULT '0', + `global_req` smallint(5) unsigned NOT NULL DEFAULT '0', + `aa_type` varchar(32) COLLATE latin1_general_ci DEFAULT NULL, + `data_version` smallint(5) unsigned NOT NULL DEFAULT '0', + `log_file` varchar(250) COLLATE latin1_general_ci NOT NULL DEFAULT '', + PRIMARY KEY (`id`), + UNIQUE KEY `AdventureListIDX` (`spell_id`) +) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Dumping data for table `raw_adventure_list` +-- + +LOCK TABLES `raw_adventure_list` WRITE; +/*!40000 ALTER TABLE `raw_adventure_list` DISABLE KEYS */; +/*!40000 ALTER TABLE `raw_adventure_list` ENABLE KEYS */; +UNLOCK TABLES; + +-- +-- Table structure for table `raw_arena_challenges` +-- + +DROP TABLE IF EXISTS `raw_arena_challenges`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `raw_arena_challenges` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `challenge_name` varchar(32) NOT NULL DEFAULT '', + `challenge_value` tinyint(3) unsigned NOT NULL DEFAULT '0', + `data_version` smallint(5) unsigned NOT NULL DEFAULT '0', + `log_file` varchar(250) NOT NULL DEFAULT '', + PRIMARY KEY (`id`), + UNIQUE KEY `ArenaChallengeIDX` (`challenge_name`,`challenge_value`) +) ENGINE=MyISAM DEFAULT CHARSET=latin1; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Dumping data for table `raw_arena_challenges` +-- + +LOCK TABLES `raw_arena_challenges` WRITE; +/*!40000 ALTER TABLE `raw_arena_challenges` DISABLE KEYS */; +/*!40000 ALTER TABLE `raw_arena_challenges` ENABLE KEYS */; +UNLOCK TABLES; + +-- +-- Table structure for table `raw_arena_images` +-- + +DROP TABLE IF EXISTS `raw_arena_images`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `raw_arena_images` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `arena_zone_id` tinyint(3) NOT NULL DEFAULT '0', + `image_path` varchar(250) NOT NULL DEFAULT '', + `x` tinyint(3) unsigned NOT NULL DEFAULT '0', + `y` tinyint(3) unsigned NOT NULL DEFAULT '0', + `x2` tinyint(3) unsigned NOT NULL DEFAULT '0', + `y2` tinyint(3) unsigned NOT NULL DEFAULT '0', + `data_version` smallint(5) unsigned NOT NULL DEFAULT '0', + `log_file` varchar(250) NOT NULL DEFAULT '', + PRIMARY KEY (`id`), + UNIQUE KEY `ArenaImagesIDX` (`arena_zone_id`,`image_path`) +) ENGINE=MyISAM DEFAULT CHARSET=latin1; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Dumping data for table `raw_arena_images` +-- + +LOCK TABLES `raw_arena_images` WRITE; +/*!40000 ALTER TABLE `raw_arena_images` DISABLE KEYS */; +/*!40000 ALTER TABLE `raw_arena_images` ENABLE KEYS */; +UNLOCK TABLES; + +-- +-- Table structure for table `raw_arena_levels` +-- + +DROP TABLE IF EXISTS `raw_arena_levels`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `raw_arena_levels` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `level_name` varchar(32) NOT NULL DEFAULT '', + `level_value` tinyint(3) unsigned NOT NULL DEFAULT '0', + `data_version` smallint(5) unsigned NOT NULL DEFAULT '0', + `log_file` varchar(250) NOT NULL DEFAULT '', + PRIMARY KEY (`id`), + UNIQUE KEY `ArenaLevelIDX` (`level_name`,`level_value`) +) ENGINE=MyISAM DEFAULT CHARSET=latin1; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Dumping data for table `raw_arena_levels` +-- + +LOCK TABLES `raw_arena_levels` WRITE; +/*!40000 ALTER TABLE `raw_arena_levels` DISABLE KEYS */; +/*!40000 ALTER TABLE `raw_arena_levels` ENABLE KEYS */; +UNLOCK TABLES; + +-- +-- Table structure for table `raw_arena_timers` +-- + +DROP TABLE IF EXISTS `raw_arena_timers`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `raw_arena_timers` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `time_type` tinyint(3) unsigned NOT NULL DEFAULT '0', + `time_name` varchar(32) NOT NULL DEFAULT '', + `time_value` tinyint(3) unsigned NOT NULL DEFAULT '0', + `data_version` smallint(5) unsigned NOT NULL DEFAULT '0', + `log_file` varchar(250) NOT NULL DEFAULT '', + PRIMARY KEY (`id`), + UNIQUE KEY `ArenaTimerIDX` (`time_type`,`time_name`,`time_value`) +) ENGINE=MyISAM DEFAULT CHARSET=latin1; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Dumping data for table `raw_arena_timers` +-- + +LOCK TABLES `raw_arena_timers` WRITE; +/*!40000 ALTER TABLE `raw_arena_timers` DISABLE KEYS */; +/*!40000 ALTER TABLE `raw_arena_timers` ENABLE KEYS */; +UNLOCK TABLES; + +-- +-- Table structure for table `raw_arena_types` +-- + +DROP TABLE IF EXISTS `raw_arena_types`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `raw_arena_types` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `unknown2a` tinyint(3) unsigned NOT NULL DEFAULT '0', + `unknown2b` tinyint(3) unsigned NOT NULL DEFAULT '0', + `unknown2c` tinyint(3) unsigned NOT NULL DEFAULT '0', + `type_name` varchar(32) NOT NULL DEFAULT '', + `unknown3a` tinyint(3) unsigned NOT NULL DEFAULT '0', + `unknown3b` tinyint(3) unsigned NOT NULL DEFAULT '0', + `data_version` smallint(5) unsigned NOT NULL DEFAULT '0', + `log_file` varchar(250) NOT NULL DEFAULT '', + PRIMARY KEY (`id`), + UNIQUE KEY `ArenaTypesIDX` (`type_name`) +) ENGINE=MyISAM DEFAULT CHARSET=latin1; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Dumping data for table `raw_arena_types` +-- + +LOCK TABLES `raw_arena_types` WRITE; +/*!40000 ALTER TABLE `raw_arena_types` DISABLE KEYS */; +/*!40000 ALTER TABLE `raw_arena_types` ENABLE KEYS */; +UNLOCK TABLES; + +-- +-- Table structure for table `raw_arena_zones` +-- + +DROP TABLE IF EXISTS `raw_arena_zones`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `raw_arena_zones` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `type1` varchar(32) NOT NULL DEFAULT '', + `unknown4a` tinyint(3) unsigned NOT NULL DEFAULT '0', + `unknown4b` tinyint(3) unsigned NOT NULL DEFAULT '0', + `file` varchar(64) NOT NULL DEFAULT '', + `type2` varchar(32) NOT NULL DEFAULT '', + `name` varchar(32) NOT NULL DEFAULT '', + `description` text, + `data_version` smallint(5) unsigned NOT NULL DEFAULT '0', + `log_file` varchar(250) NOT NULL DEFAULT '', + PRIMARY KEY (`id`), + UNIQUE KEY `ArenaZonesIDX` (`type1`,`file`,`name`) +) ENGINE=MyISAM DEFAULT CHARSET=latin1; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Dumping data for table `raw_arena_zones` +-- + +LOCK TABLES `raw_arena_zones` WRITE; +/*!40000 ALTER TABLE `raw_arena_zones` DISABLE KEYS */; +/*!40000 ALTER TABLE `raw_arena_zones` ENABLE KEYS */; +UNLOCK TABLES; + +-- +-- Table structure for table `raw_book_images` +-- + +DROP TABLE IF EXISTS `raw_book_images`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `raw_book_images` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `spawn_id` int(10) unsigned NOT NULL, + `image_file` varchar(255) COLLATE latin1_general_ci DEFAULT NULL, + `image_id` tinyint(3) unsigned NOT NULL DEFAULT '0', + `unknown6` tinyint(3) unsigned NOT NULL DEFAULT '0', + PRIMARY KEY (`id`) +) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Dumping data for table `raw_book_images` +-- + +LOCK TABLES `raw_book_images` WRITE; +/*!40000 ALTER TABLE `raw_book_images` DISABLE KEYS */; +/*!40000 ALTER TABLE `raw_book_images` ENABLE KEYS */; +UNLOCK TABLES; + +-- +-- Table structure for table `raw_book_pages` +-- + +DROP TABLE IF EXISTS `raw_book_pages`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `raw_book_pages` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `spawn_id` int(10) unsigned NOT NULL DEFAULT '0', + `page_text` varchar(1024) COLLATE latin1_general_ci DEFAULT NULL, + `page_text_valign` tinyint(3) unsigned NOT NULL DEFAULT '0', + `page_text_halign` tinyint(3) unsigned NOT NULL DEFAULT '0', + PRIMARY KEY (`id`) +) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Dumping data for table `raw_book_pages` +-- + +LOCK TABLES `raw_book_pages` WRITE; +/*!40000 ALTER TABLE `raw_book_pages` DISABLE KEYS */; +/*!40000 ALTER TABLE `raw_book_pages` ENABLE KEYS */; +UNLOCK TABLES; + +-- +-- Table structure for table `raw_books` +-- + +DROP TABLE IF EXISTS `raw_books`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `raw_books` ( + `id` tinyint(10) unsigned NOT NULL AUTO_INCREMENT, + `spawn_id` int(10) unsigned NOT NULL DEFAULT '0', + `book_title` varchar(100) COLLATE latin1_general_ci NOT NULL, + `unknown` smallint(5) unsigned NOT NULL DEFAULT '0', + `book_type` varchar(100) COLLATE latin1_general_ci NOT NULL, + `unknown2` tinyint(3) unsigned NOT NULL DEFAULT '0', + `unknown3` smallint(5) unsigned NOT NULL DEFAULT '0', + `unknown4` int(10) NOT NULL DEFAULT '0', + `unknown5` tinyint(3) unsigned NOT NULL DEFAULT '0', + `data_version` smallint(5) unsigned NOT NULL DEFAULT '0', + `log_file` varchar(255) COLLATE latin1_general_ci DEFAULT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `NewIndex` (`spawn_id`) +) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Dumping data for table `raw_books` +-- + +LOCK TABLES `raw_books` WRITE; +/*!40000 ALTER TABLE `raw_books` DISABLE KEYS */; +/*!40000 ALTER TABLE `raw_books` ENABLE KEYS */; +UNLOCK TABLES; + +-- +-- Table structure for table `raw_collection_items` +-- + +DROP TABLE IF EXISTS `raw_collection_items`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `raw_collection_items` ( + `id` int(10) NOT NULL AUTO_INCREMENT, + `collection_id` int(10) unsigned NOT NULL DEFAULT '0', + `item_icon` smallint(5) unsigned NOT NULL DEFAULT '0', + `item_name` varchar(255) COLLATE latin1_general_ci NOT NULL DEFAULT 'Unknown', + `item_flag` tinyint(3) unsigned NOT NULL DEFAULT '0', + `item_id` int(11) NOT NULL DEFAULT '0', + `item_crc` int(11) NOT NULL DEFAULT '0', + `item_index` tinyint(3) unsigned NOT NULL DEFAULT '0', + PRIMARY KEY (`id`), + UNIQUE KEY `CollectionItemIDX` (`collection_id`,`item_id`) +) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Dumping data for table `raw_collection_items` +-- + +LOCK TABLES `raw_collection_items` WRITE; +/*!40000 ALTER TABLE `raw_collection_items` DISABLE KEYS */; +/*!40000 ALTER TABLE `raw_collection_items` ENABLE KEYS */; +UNLOCK TABLES; + +-- +-- Table structure for table `raw_collections` +-- + +DROP TABLE IF EXISTS `raw_collections`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `raw_collections` ( + `id` int(10) NOT NULL AUTO_INCREMENT, + `unknown` tinyint(3) unsigned NOT NULL DEFAULT '0', + `collection_id` int(10) unsigned NOT NULL DEFAULT '0', + `collection_name` varchar(512) COLLATE latin1_general_ci NOT NULL DEFAULT 'Unknown', + `collection_category` varchar(512) COLLATE latin1_general_ci NOT NULL DEFAULT 'Unknown', + `level` tinyint(3) unsigned NOT NULL DEFAULT '0', + `unknown3` tinyint(3) unsigned NOT NULL DEFAULT '0', + `log_file` varchar(255) COLLATE latin1_general_ci DEFAULT '', + `data_version` smallint(5) unsigned NOT NULL DEFAULT '0', + PRIMARY KEY (`id`), + UNIQUE KEY `collection_id` (`collection_id`) +) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Dumping data for table `raw_collections` +-- + +LOCK TABLES `raw_collections` WRITE; +/*!40000 ALTER TABLE `raw_collections` DISABLE KEYS */; +/*!40000 ALTER TABLE `raw_collections` ENABLE KEYS */; +UNLOCK TABLES; + +-- +-- Table structure for table `raw_commands` +-- + +DROP TABLE IF EXISTS `raw_commands`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `raw_commands` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `type` tinyint(3) unsigned DEFAULT '1', + `command` varchar(64) COLLATE latin1_general_ci NOT NULL, + `subcommand` varchar(64) COLLATE latin1_general_ci NOT NULL, + `handler` int(10) unsigned NOT NULL DEFAULT '0', + `required_status` smallint(5) NOT NULL DEFAULT '0', + `data_version` smallint(5) unsigned NOT NULL DEFAULT '0', + `log_file` varchar(250) COLLATE latin1_general_ci NOT NULL DEFAULT '', + PRIMARY KEY (`id`), + UNIQUE KEY `CommandIDX` (`command`) +) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Dumping data for table `raw_commands` +-- + +LOCK TABLES `raw_commands` WRITE; +/*!40000 ALTER TABLE `raw_commands` DISABLE KEYS */; +/*!40000 ALTER TABLE `raw_commands` ENABLE KEYS */; +UNLOCK TABLES; + +-- +-- Table structure for table `raw_conversations` +-- + +DROP TABLE IF EXISTS `raw_conversations`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `raw_conversations` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `spawn_id` int(10) unsigned NOT NULL DEFAULT '0', + `sound_file` varchar(512) COLLATE latin1_general_ci DEFAULT '', + `spawn_name` varchar(255) COLLATE latin1_general_ci DEFAULT '', + `chat_text` text COLLATE latin1_general_ci NOT NULL, + `emote` varchar(255) COLLATE latin1_general_ci DEFAULT '', + `key1` int(10) unsigned NOT NULL DEFAULT '0', + `key2` int(10) unsigned NOT NULL DEFAULT '0', + `log_file` varchar(255) COLLATE latin1_general_ci DEFAULT '', + PRIMARY KEY (`id`), + UNIQUE KEY `NewIndex` (`spawn_name`,`sound_file`,`chat_text`(200)) +) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Dumping data for table `raw_conversations` +-- + +LOCK TABLES `raw_conversations` WRITE; +/*!40000 ALTER TABLE `raw_conversations` DISABLE KEYS */; +/*!40000 ALTER TABLE `raw_conversations` ENABLE KEYS */; +UNLOCK TABLES; + +-- +-- Table structure for table `raw_dialog_choices` +-- + +DROP TABLE IF EXISTS `raw_dialog_choices`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `raw_dialog_choices` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `dialog_conversation_id` int(10) unsigned NOT NULL DEFAULT '0', + `index` smallint(3) unsigned NOT NULL DEFAULT '0', + `choice` text COLLATE latin1_general_ci NOT NULL, + PRIMARY KEY (`id`) +) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Dumping data for table `raw_dialog_choices` +-- + +LOCK TABLES `raw_dialog_choices` WRITE; +/*!40000 ALTER TABLE `raw_dialog_choices` DISABLE KEYS */; +/*!40000 ALTER TABLE `raw_dialog_choices` ENABLE KEYS */; +UNLOCK TABLES; + +-- +-- Table structure for table `raw_dialogs` +-- + +DROP TABLE IF EXISTS `raw_dialogs`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `raw_dialogs` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `spawn_id` int(10) unsigned NOT NULL DEFAULT '0', + `conversation_id` int(10) unsigned NOT NULL DEFAULT '0', + `npc_text` text COLLATE latin1_general_ci NOT NULL, + `voice_file` varchar(255) COLLATE latin1_general_ci NOT NULL, + `key1` int(10) unsigned NOT NULL DEFAULT '0', + `key2` int(10) unsigned NOT NULL DEFAULT '0', + `unknown` smallint(5) unsigned NOT NULL DEFAULT '0', + `unknown2` tinyint(3) unsigned NOT NULL DEFAULT '0', + `unknown3` tinyint(3) unsigned NOT NULL DEFAULT '0', + `sequence` smallint(5) unsigned NOT NULL DEFAULT '0', + `index` smallint(5) NOT NULL DEFAULT '0', + `language_type` tinyint(3) unsigned NOT NULL DEFAULT '0', + `log_file` varchar(255) COLLATE latin1_general_ci DEFAULT '', + PRIMARY KEY (`id`), + UNIQUE KEY `NewIndex` (`conversation_id`,`spawn_id`,`sequence`,`index`) +) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Dumping data for table `raw_dialogs` +-- + +LOCK TABLES `raw_dialogs` WRITE; +/*!40000 ALTER TABLE `raw_dialogs` DISABLE KEYS */; +/*!40000 ALTER TABLE `raw_dialogs` ENABLE KEYS */; +UNLOCK TABLES; + +-- +-- Table structure for table `raw_entity_commands` +-- + +DROP TABLE IF EXISTS `raw_entity_commands`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `raw_entity_commands` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `spawn_id` int(10) unsigned NOT NULL, + `name` varchar(64) COLLATE latin1_general_ci NOT NULL, + `max_distance` float unsigned NOT NULL DEFAULT '0', + `error_text` varchar(64) COLLATE latin1_general_ci NOT NULL, + `command` varchar(64) COLLATE latin1_general_ci NOT NULL, + `language_type` tinyint(3) unsigned NOT NULL DEFAULT '1', + PRIMARY KEY (`id`), + UNIQUE KEY `NewIndex` (`spawn_id`,`name`,`command`) +) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Dumping data for table `raw_entity_commands` +-- + +LOCK TABLES `raw_entity_commands` WRITE; +/*!40000 ALTER TABLE `raw_entity_commands` DISABLE KEYS */; +/*!40000 ALTER TABLE `raw_entity_commands` ENABLE KEYS */; +UNLOCK TABLES; + +-- +-- Table structure for table `raw_factions` +-- + +DROP TABLE IF EXISTS `raw_factions`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `raw_factions` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `faction_id` int(11) NOT NULL, + `name` varchar(512) COLLATE latin1_general_ci DEFAULT NULL, + `category` varchar(512) COLLATE latin1_general_ci DEFAULT NULL, + `description` varchar(512) COLLATE latin1_general_ci DEFAULT NULL, + `unknown` varchar(512) COLLATE latin1_general_ci DEFAULT NULL, + `con` tinyint(3) NOT NULL DEFAULT '0', + `percentage` tinyint(3) unsigned NOT NULL DEFAULT '0', + `unknown2` tinyint(3) unsigned NOT NULL DEFAULT '0', + `value` mediumint(5) NOT NULL DEFAULT '0', + `log_file` varchar(255) COLLATE latin1_general_ci DEFAULT '', + `data_version` smallint(5) unsigned NOT NULL DEFAULT '0', + PRIMARY KEY (`id`), + UNIQUE KEY `FactionIDX` (`faction_id`) +) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Dumping data for table `raw_factions` +-- + +LOCK TABLES `raw_factions` WRITE; +/*!40000 ALTER TABLE `raw_factions` DISABLE KEYS */; +/*!40000 ALTER TABLE `raw_factions` ENABLE KEYS */; +UNLOCK TABLES; + +-- +-- Table structure for table `raw_item_appearances` +-- + +DROP TABLE IF EXISTS `raw_item_appearances`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `raw_item_appearances` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `item_id` int(10) NOT NULL DEFAULT '0', + `item_crc` int(10) NOT NULL DEFAULT '0', + `equip_type` int(10) unsigned NOT NULL DEFAULT '0', + `red` tinyint(3) unsigned NOT NULL DEFAULT '0', + `green` tinyint(3) unsigned NOT NULL DEFAULT '0', + `blue` tinyint(3) unsigned NOT NULL DEFAULT '0', + `highlight_red` tinyint(3) unsigned NOT NULL DEFAULT '0', + `highlight_green` tinyint(3) unsigned NOT NULL DEFAULT '0', + `highlight_blue` tinyint(3) unsigned NOT NULL DEFAULT '0', + `language_type` tinyint(3) unsigned NOT NULL DEFAULT '1', + PRIMARY KEY (`id`), + UNIQUE KEY `NewIndex` (`item_id`,`language_type`) +) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Dumping data for table `raw_item_appearances` +-- + +LOCK TABLES `raw_item_appearances` WRITE; +/*!40000 ALTER TABLE `raw_item_appearances` DISABLE KEYS */; +/*!40000 ALTER TABLE `raw_item_appearances` ENABLE KEYS */; +UNLOCK TABLES; + +-- +-- Table structure for table `raw_item_descriptions` +-- + +DROP TABLE IF EXISTS `raw_item_descriptions`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `raw_item_descriptions` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `item_id` int(10) NOT NULL DEFAULT '0', + `item_crc` int(10) NOT NULL DEFAULT '0', + `unique_id` int(10) unsigned NOT NULL DEFAULT '0', + `icon` smallint(5) unsigned NOT NULL DEFAULT '0', + `tier` tinyint(3) unsigned NOT NULL DEFAULT '0', + `flags1` smallint(5) unsigned NOT NULL DEFAULT '0', + `flags2` smallint(5) unsigned NOT NULL DEFAULT '0', + `weight` int(10) unsigned NOT NULL DEFAULT '0', + `skill_req1` int(10) unsigned NOT NULL DEFAULT '0', + `skill_req2` int(10) unsigned NOT NULL DEFAULT '0', + `item_type` tinyint(3) unsigned NOT NULL DEFAULT '0', + `language_type` tinyint(3) unsigned NOT NULL DEFAULT '1', + PRIMARY KEY (`id`), + UNIQUE KEY `NewIndex` (`language_type`,`item_id`) +) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Dumping data for table `raw_item_descriptions` +-- + +LOCK TABLES `raw_item_descriptions` WRITE; +/*!40000 ALTER TABLE `raw_item_descriptions` DISABLE KEYS */; +/*!40000 ALTER TABLE `raw_item_descriptions` ENABLE KEYS */; +UNLOCK TABLES; + +-- +-- Table structure for table `raw_item_details_armor` +-- + +DROP TABLE IF EXISTS `raw_item_details_armor`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `raw_item_details_armor` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `item_id` int(11) NOT NULL DEFAULT '0', + `mitigation_low` smallint(5) unsigned NOT NULL DEFAULT '0', + `mitigation_high` smallint(5) unsigned NOT NULL DEFAULT '0', + `language_type` tinyint(3) unsigned NOT NULL DEFAULT '1', + PRIMARY KEY (`id`), + UNIQUE KEY `NewIndex` (`item_id`,`language_type`) +) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Dumping data for table `raw_item_details_armor` +-- + +LOCK TABLES `raw_item_details_armor` WRITE; +/*!40000 ALTER TABLE `raw_item_details_armor` DISABLE KEYS */; +/*!40000 ALTER TABLE `raw_item_details_armor` ENABLE KEYS */; +UNLOCK TABLES; + +-- +-- Table structure for table `raw_item_details_bag` +-- + +DROP TABLE IF EXISTS `raw_item_details_bag`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `raw_item_details_bag` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `item_id` int(11) NOT NULL DEFAULT '0', + `num_slots` tinyint(3) unsigned NOT NULL DEFAULT '0', + `weight_reduction` smallint(5) unsigned NOT NULL DEFAULT '0', + `unknown12` tinyint(3) unsigned NOT NULL DEFAULT '0', + `language_type` tinyint(3) unsigned NOT NULL DEFAULT '1', + PRIMARY KEY (`id`), + UNIQUE KEY `ItemIndex` (`item_id`,`language_type`) +) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Dumping data for table `raw_item_details_bag` +-- + +LOCK TABLES `raw_item_details_bag` WRITE; +/*!40000 ALTER TABLE `raw_item_details_bag` DISABLE KEYS */; +/*!40000 ALTER TABLE `raw_item_details_bag` ENABLE KEYS */; +UNLOCK TABLES; + +-- +-- Table structure for table `raw_item_details_bauble` +-- + +DROP TABLE IF EXISTS `raw_item_details_bauble`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `raw_item_details_bauble` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `item_id` int(10) NOT NULL DEFAULT '0', + `cast` smallint(5) unsigned NOT NULL DEFAULT '100', + `recovery` smallint(5) unsigned NOT NULL DEFAULT '0', + `duration` int(10) unsigned NOT NULL DEFAULT '0', + `recast` float unsigned NOT NULL DEFAULT '1', + `display_cast_time` tinyint(3) unsigned NOT NULL DEFAULT '0', + `display_bauble_type` tinyint(3) unsigned NOT NULL DEFAULT '0', + `effect_radius` float NOT NULL DEFAULT '0', + `max_aoe_targets` int(10) unsigned NOT NULL DEFAULT '0', + `display_until_cancelled` tinyint(3) unsigned NOT NULL DEFAULT '0', + `language_type` tinyint(3) unsigned NOT NULL DEFAULT '1', + PRIMARY KEY (`id`), + UNIQUE KEY `NewIndex` (`item_id`,`language_type`) +) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Dumping data for table `raw_item_details_bauble` +-- + +LOCK TABLES `raw_item_details_bauble` WRITE; +/*!40000 ALTER TABLE `raw_item_details_bauble` DISABLE KEYS */; +/*!40000 ALTER TABLE `raw_item_details_bauble` ENABLE KEYS */; +UNLOCK TABLES; + +-- +-- Table structure for table `raw_item_details_book` +-- + +DROP TABLE IF EXISTS `raw_item_details_book`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `raw_item_details_book` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `item_id` int(11) NOT NULL DEFAULT '0', + `language` tinyint(3) unsigned NOT NULL DEFAULT '0', + `author` varchar(255) COLLATE latin1_general_ci NOT NULL DEFAULT '', + `title` varchar(255) COLLATE latin1_general_ci NOT NULL DEFAULT '', + `language_type` tinyint(3) unsigned NOT NULL DEFAULT '1', + PRIMARY KEY (`id`), + UNIQUE KEY `ItemLanguageIDX` (`item_id`,`language_type`) +) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Dumping data for table `raw_item_details_book` +-- + +LOCK TABLES `raw_item_details_book` WRITE; +/*!40000 ALTER TABLE `raw_item_details_book` DISABLE KEYS */; +/*!40000 ALTER TABLE `raw_item_details_book` ENABLE KEYS */; +UNLOCK TABLES; + +-- +-- Table structure for table `raw_item_details_decorations` +-- + +DROP TABLE IF EXISTS `raw_item_details_decorations`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `raw_item_details_decorations` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `item_id` int(11) NOT NULL DEFAULT '0', + `decoration_name` varchar(64) COLLATE latin1_general_ci NOT NULL DEFAULT '', + `language_type` tinyint(3) unsigned NOT NULL DEFAULT '1', + PRIMARY KEY (`id`), + UNIQUE KEY `NewIndex` (`item_id`,`language_type`) +) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Dumping data for table `raw_item_details_decorations` +-- + +LOCK TABLES `raw_item_details_decorations` WRITE; +/*!40000 ALTER TABLE `raw_item_details_decorations` DISABLE KEYS */; +/*!40000 ALTER TABLE `raw_item_details_decorations` ENABLE KEYS */; +UNLOCK TABLES; + +-- +-- Table structure for table `raw_item_details_food` +-- + +DROP TABLE IF EXISTS `raw_item_details_food`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `raw_item_details_food` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `item_id` int(11) NOT NULL DEFAULT '0', + `type` tinyint(3) unsigned NOT NULL DEFAULT '0', + `level` tinyint(3) unsigned NOT NULL DEFAULT '0', + `duration` float NOT NULL DEFAULT '0', + `satiation` tinyint(3) unsigned NOT NULL DEFAULT '2', + `language_type` tinyint(3) unsigned NOT NULL DEFAULT '1', + PRIMARY KEY (`id`), + UNIQUE KEY `ItemIndex` (`item_id`,`language_type`) +) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Dumping data for table `raw_item_details_food` +-- + +LOCK TABLES `raw_item_details_food` WRITE; +/*!40000 ALTER TABLE `raw_item_details_food` DISABLE KEYS */; +/*!40000 ALTER TABLE `raw_item_details_food` ENABLE KEYS */; +UNLOCK TABLES; + +-- +-- Table structure for table `raw_item_details_house` +-- + +DROP TABLE IF EXISTS `raw_item_details_house`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `raw_item_details_house` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `item_id` int(11) NOT NULL DEFAULT '0', + `status_rent_reduction` int(11) NOT NULL DEFAULT '0', + `coin_rent_reduction` float unsigned NOT NULL DEFAULT '0', + `house_unknown2` smallint(6) unsigned NOT NULL DEFAULT '0', + `house_only` tinyint(3) unsigned NOT NULL DEFAULT '0', + `language_type` tinyint(3) unsigned NOT NULL DEFAULT '1', + PRIMARY KEY (`id`), + UNIQUE KEY `ItemLanguageIDX` (`item_id`,`language_type`) +) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Dumping data for table `raw_item_details_house` +-- + +LOCK TABLES `raw_item_details_house` WRITE; +/*!40000 ALTER TABLE `raw_item_details_house` DISABLE KEYS */; +/*!40000 ALTER TABLE `raw_item_details_house` ENABLE KEYS */; +UNLOCK TABLES; + +-- +-- Table structure for table `raw_item_details_house_container` +-- + +DROP TABLE IF EXISTS `raw_item_details_house_container`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `raw_item_details_house_container` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `item_id` int(11) NOT NULL DEFAULT '0', + `num_slots` tinyint(3) unsigned NOT NULL DEFAULT '0', + `allowed_types` int(10) unsigned NOT NULL DEFAULT '0', + `unknown12` int(10) unsigned NOT NULL DEFAULT '0', + `unknown13` tinyint(3) unsigned NOT NULL DEFAULT '0', + `broker_commission` smallint(5) unsigned NOT NULL DEFAULT '0', + `fence_commission` smallint(5) unsigned NOT NULL DEFAULT '0', + `language_type` tinyint(3) unsigned NOT NULL DEFAULT '1', + PRIMARY KEY (`id`), + UNIQUE KEY `ItemIndex` (`item_id`,`language_type`) +) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Dumping data for table `raw_item_details_house_container` +-- + +LOCK TABLES `raw_item_details_house_container` WRITE; +/*!40000 ALTER TABLE `raw_item_details_house_container` DISABLE KEYS */; +/*!40000 ALTER TABLE `raw_item_details_house_container` ENABLE KEYS */; +UNLOCK TABLES; + +-- +-- Table structure for table `raw_item_details_itemset` +-- + +DROP TABLE IF EXISTS `raw_item_details_itemset`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `raw_item_details_itemset` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `itemset_item_id` int(10) NOT NULL DEFAULT '0', + `item_id` int(10) NOT NULL DEFAULT '0', + `item_crc` int(10) NOT NULL DEFAULT '0', + `item_icon` smallint(5) unsigned NOT NULL DEFAULT '0', + `item_unknown1` smallint(5) unsigned NOT NULL DEFAULT '0', + `item_unknown2` int(10) NOT NULL DEFAULT '0', + `item_name` varchar(250) COLLATE latin1_general_ci DEFAULT '', + `language_type` tinyint(3) NOT NULL DEFAULT '0', + PRIMARY KEY (`id`), + UNIQUE KEY `NewIndex1` (`itemset_item_id`,`item_id`,`language_type`), + KEY `NewIndex2` (`item_name`) +) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Dumping data for table `raw_item_details_itemset` +-- + +LOCK TABLES `raw_item_details_itemset` WRITE; +/*!40000 ALTER TABLE `raw_item_details_itemset` DISABLE KEYS */; +/*!40000 ALTER TABLE `raw_item_details_itemset` ENABLE KEYS */; +UNLOCK TABLES; + +-- +-- Table structure for table `raw_item_details_marketplace` +-- + +DROP TABLE IF EXISTS `raw_item_details_marketplace`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `raw_item_details_marketplace` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `marketplace_item_id` int(10) NOT NULL DEFAULT '0', + `item_id` int(10) NOT NULL DEFAULT '0', + `item_icon` smallint(5) unsigned NOT NULL DEFAULT '0', + `language_type` tinyint(3) unsigned NOT NULL DEFAULT '0', + PRIMARY KEY (`id`), + UNIQUE KEY `NewIndex1` (`marketplace_item_id`,`item_id`,`language_type`) +) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Dumping data for table `raw_item_details_marketplace` +-- + +LOCK TABLES `raw_item_details_marketplace` WRITE; +/*!40000 ALTER TABLE `raw_item_details_marketplace` DISABLE KEYS */; +/*!40000 ALTER TABLE `raw_item_details_marketplace` ENABLE KEYS */; +UNLOCK TABLES; + +-- +-- Table structure for table `raw_item_details_pattern` +-- + +DROP TABLE IF EXISTS `raw_item_details_pattern`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `raw_item_details_pattern` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `pattern_item_id` int(10) NOT NULL DEFAULT '0', + `item_id` int(10) NOT NULL DEFAULT '0', + `item_crc` int(10) NOT NULL DEFAULT '0', + `item_icon` smallint(5) unsigned NOT NULL DEFAULT '0', + `item_name` varchar(250) COLLATE latin1_general_ci DEFAULT '', + `language_type` tinyint(3) NOT NULL DEFAULT '0', + PRIMARY KEY (`id`) +) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Dumping data for table `raw_item_details_pattern` +-- + +LOCK TABLES `raw_item_details_pattern` WRITE; +/*!40000 ALTER TABLE `raw_item_details_pattern` DISABLE KEYS */; +/*!40000 ALTER TABLE `raw_item_details_pattern` ENABLE KEYS */; +UNLOCK TABLES; + +-- +-- Table structure for table `raw_item_details_range` +-- + +DROP TABLE IF EXISTS `raw_item_details_range`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `raw_item_details_range` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `item_id` int(11) NOT NULL DEFAULT '0', + `damage_low1` smallint(5) unsigned NOT NULL DEFAULT '0', + `damage_high1` smallint(5) unsigned NOT NULL DEFAULT '0', + `damage_low2` smallint(5) unsigned NOT NULL DEFAULT '0', + `damage_high2` smallint(5) unsigned NOT NULL DEFAULT '0', + `damage_low3` smallint(5) unsigned NOT NULL DEFAULT '0', + `damage_high3` smallint(5) unsigned NOT NULL DEFAULT '0', + `delay` smallint(5) unsigned NOT NULL DEFAULT '0', + `range_low` smallint(5) unsigned NOT NULL DEFAULT '0', + `range_high` smallint(5) unsigned NOT NULL DEFAULT '0', + `damage_rating` float unsigned NOT NULL DEFAULT '0', + `damage_type` tinyint(3) unsigned NOT NULL DEFAULT '0', + `language_type` tinyint(3) unsigned NOT NULL DEFAULT '1', + PRIMARY KEY (`id`), + UNIQUE KEY `NewIndex` (`item_id`,`language_type`) +) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Dumping data for table `raw_item_details_range` +-- + +LOCK TABLES `raw_item_details_range` WRITE; +/*!40000 ALTER TABLE `raw_item_details_range` DISABLE KEYS */; +/*!40000 ALTER TABLE `raw_item_details_range` ENABLE KEYS */; +UNLOCK TABLES; + +-- +-- Table structure for table `raw_item_details_recipe` +-- + +DROP TABLE IF EXISTS `raw_item_details_recipe`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `raw_item_details_recipe` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `item_id` int(11) NOT NULL DEFAULT '0', + `uses` smallint(5) unsigned NOT NULL DEFAULT '1', + `language_type` tinyint(3) unsigned NOT NULL DEFAULT '1', + PRIMARY KEY (`id`), + UNIQUE KEY `NewIndex` (`item_id`,`language_type`) +) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Dumping data for table `raw_item_details_recipe` +-- + +LOCK TABLES `raw_item_details_recipe` WRITE; +/*!40000 ALTER TABLE `raw_item_details_recipe` DISABLE KEYS */; +/*!40000 ALTER TABLE `raw_item_details_recipe` ENABLE KEYS */; +UNLOCK TABLES; + +-- +-- Table structure for table `raw_item_details_recipe_items` +-- + +DROP TABLE IF EXISTS `raw_item_details_recipe_items`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `raw_item_details_recipe_items` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `item_id` int(11) NOT NULL DEFAULT '0', + `name` varchar(250) COLLATE latin1_general_ci DEFAULT NULL, + `language_type` tinyint(3) unsigned NOT NULL DEFAULT '1', + PRIMARY KEY (`id`), + UNIQUE KEY `NewIndex` (`item_id`,`name`,`language_type`) +) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Dumping data for table `raw_item_details_recipe_items` +-- + +LOCK TABLES `raw_item_details_recipe_items` WRITE; +/*!40000 ALTER TABLE `raw_item_details_recipe_items` DISABLE KEYS */; +/*!40000 ALTER TABLE `raw_item_details_recipe_items` ENABLE KEYS */; +UNLOCK TABLES; + +-- +-- Table structure for table `raw_item_details_shield` +-- + +DROP TABLE IF EXISTS `raw_item_details_shield`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `raw_item_details_shield` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `item_id` int(11) NOT NULL DEFAULT '0', + `mitigation_low` smallint(5) unsigned NOT NULL DEFAULT '0', + `mitigation_high` smallint(5) unsigned NOT NULL DEFAULT '0', + `language_type` tinyint(3) unsigned NOT NULL DEFAULT '1', + PRIMARY KEY (`id`), + UNIQUE KEY `NewIndex` (`item_id`,`language_type`) +) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Dumping data for table `raw_item_details_shield` +-- + +LOCK TABLES `raw_item_details_shield` WRITE; +/*!40000 ALTER TABLE `raw_item_details_shield` DISABLE KEYS */; +/*!40000 ALTER TABLE `raw_item_details_shield` ENABLE KEYS */; +UNLOCK TABLES; + +-- +-- Table structure for table `raw_item_details_skill` +-- + +DROP TABLE IF EXISTS `raw_item_details_skill`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `raw_item_details_skill` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `item_id` int(11) NOT NULL DEFAULT '0', + `spell_id` int(10) unsigned NOT NULL DEFAULT '0', + `tier` tinyint(3) unsigned NOT NULL DEFAULT '0', + `language_type` tinyint(3) unsigned NOT NULL DEFAULT '1', + PRIMARY KEY (`id`), + UNIQUE KEY `ItemSpellTierIdx` (`item_id`,`spell_id`,`tier`,`language_type`) +) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Dumping data for table `raw_item_details_skill` +-- + +LOCK TABLES `raw_item_details_skill` WRITE; +/*!40000 ALTER TABLE `raw_item_details_skill` DISABLE KEYS */; +/*!40000 ALTER TABLE `raw_item_details_skill` ENABLE KEYS */; +UNLOCK TABLES; + +-- +-- Table structure for table `raw_item_details_thrown` +-- + +DROP TABLE IF EXISTS `raw_item_details_thrown`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `raw_item_details_thrown` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `item_id` int(11) NOT NULL DEFAULT '0', + `range` int(11) NOT NULL DEFAULT '0', + `damage_modifier` int(11) NOT NULL DEFAULT '0', + `hit_bonus` float NOT NULL DEFAULT '0', + `damage_type` int(10) unsigned NOT NULL DEFAULT '0', + `language_type` tinyint(3) unsigned NOT NULL DEFAULT '1', + PRIMARY KEY (`id`), + UNIQUE KEY `NewIndex` (`item_id`,`language_type`) +) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Dumping data for table `raw_item_details_thrown` +-- + +LOCK TABLES `raw_item_details_thrown` WRITE; +/*!40000 ALTER TABLE `raw_item_details_thrown` DISABLE KEYS */; +/*!40000 ALTER TABLE `raw_item_details_thrown` ENABLE KEYS */; +UNLOCK TABLES; + +-- +-- Table structure for table `raw_item_details_weapon` +-- + +DROP TABLE IF EXISTS `raw_item_details_weapon`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `raw_item_details_weapon` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `item_id` int(11) NOT NULL DEFAULT '0', + `wield_style` tinyint(3) unsigned NOT NULL DEFAULT '0', + `damage_type` tinyint(3) unsigned NOT NULL DEFAULT '0', + `damage_low1` smallint(5) unsigned NOT NULL DEFAULT '0', + `damage_high1` smallint(5) unsigned NOT NULL DEFAULT '0', + `damage_low2` smallint(5) unsigned NOT NULL DEFAULT '0', + `damage_high2` smallint(5) unsigned NOT NULL DEFAULT '0', + `damage_low3` smallint(5) unsigned NOT NULL DEFAULT '0', + `damage_high3` smallint(5) unsigned NOT NULL DEFAULT '0', + `delay` smallint(5) unsigned NOT NULL DEFAULT '0', + `damage_rating` float NOT NULL DEFAULT '0', + `language_type` tinyint(3) unsigned NOT NULL DEFAULT '1', + PRIMARY KEY (`id`), + UNIQUE KEY `ItemIndex` (`item_id`,`language_type`) +) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Dumping data for table `raw_item_details_weapon` +-- + +LOCK TABLES `raw_item_details_weapon` WRITE; +/*!40000 ALTER TABLE `raw_item_details_weapon` DISABLE KEYS */; +/*!40000 ALTER TABLE `raw_item_details_weapon` ENABLE KEYS */; +UNLOCK TABLES; + +-- +-- Table structure for table `raw_item_effects` +-- + +DROP TABLE IF EXISTS `raw_item_effects`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `raw_item_effects` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `item_id` int(11) NOT NULL DEFAULT '0', + `effect` varchar(512) COLLATE latin1_general_ci NOT NULL DEFAULT 'Unknown', + `percentage` tinyint(3) unsigned NOT NULL DEFAULT '100', + `bullet` tinyint(3) unsigned NOT NULL DEFAULT '0', + `language_type` tinyint(3) unsigned NOT NULL DEFAULT '1', + PRIMARY KEY (`id`), + UNIQUE KEY `NewIndex` (`item_id`,`effect`,`language_type`) +) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Dumping data for table `raw_item_effects` +-- + +LOCK TABLES `raw_item_effects` WRITE; +/*!40000 ALTER TABLE `raw_item_effects` DISABLE KEYS */; +/*!40000 ALTER TABLE `raw_item_effects` ENABLE KEYS */; +UNLOCK TABLES; + +-- +-- Table structure for table `raw_item_itemset_bonus_effects` +-- + +DROP TABLE IF EXISTS `raw_item_itemset_bonus_effects`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `raw_item_itemset_bonus_effects` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `set_id` int(10) unsigned NOT NULL DEFAULT '0', + `master_item_id` int(10) NOT NULL DEFAULT '0', + `items_needed` tinyint(3) NOT NULL DEFAULT '0', + `subbulletflag` tinyint(3) unsigned NOT NULL DEFAULT '0', + `description` varchar(512) COLLATE latin1_general_ci DEFAULT '', + `percentage` tinyint(3) unsigned NOT NULL DEFAULT '100', + `effect_order` tinyint(3) unsigned NOT NULL DEFAULT '0', + `language_type` tinyint(3) unsigned NOT NULL DEFAULT '1', + PRIMARY KEY (`id`), + UNIQUE KEY `SetEffectsIDX` (`set_id`,`master_item_id`,`items_needed`,`subbulletflag`,`description`,`language_type`) +) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Dumping data for table `raw_item_itemset_bonus_effects` +-- + +LOCK TABLES `raw_item_itemset_bonus_effects` WRITE; +/*!40000 ALTER TABLE `raw_item_itemset_bonus_effects` DISABLE KEYS */; +/*!40000 ALTER TABLE `raw_item_itemset_bonus_effects` ENABLE KEYS */; +UNLOCK TABLES; + +-- +-- Table structure for table `raw_item_itemset_bonus_stats` +-- + +DROP TABLE IF EXISTS `raw_item_itemset_bonus_stats`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `raw_item_itemset_bonus_stats` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `set_id` int(10) NOT NULL DEFAULT '0', + `master_item_id` int(10) NOT NULL DEFAULT '0', + `items_needed` tinyint(3) NOT NULL DEFAULT '0', + `type` tinyint(3) unsigned NOT NULL DEFAULT '0', + `subtype` tinyint(3) unsigned NOT NULL DEFAULT '0', + `value` float NOT NULL DEFAULT '0', + `name` varchar(512) COLLATE latin1_general_ci DEFAULT '', + `unknown` tinyint(3) unsigned NOT NULL DEFAULT '0', + `stats_order` tinyint(3) unsigned NOT NULL DEFAULT '0', + `language_type` tinyint(3) unsigned NOT NULL DEFAULT '1', + PRIMARY KEY (`id`), + UNIQUE KEY `SetStatsIDX` (`set_id`,`master_item_id`,`items_needed`,`type`,`subtype`,`value`,`stats_order`,`language_type`,`name`) +) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Dumping data for table `raw_item_itemset_bonus_stats` +-- + +LOCK TABLES `raw_item_itemset_bonus_stats` WRITE; +/*!40000 ALTER TABLE `raw_item_itemset_bonus_stats` DISABLE KEYS */; +/*!40000 ALTER TABLE `raw_item_itemset_bonus_stats` ENABLE KEYS */; +UNLOCK TABLES; + +-- +-- Table structure for table `raw_item_itemset_items` +-- + +DROP TABLE IF EXISTS `raw_item_itemset_items`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `raw_item_itemset_items` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `set_id` int(10) NOT NULL DEFAULT '0', + `unknown1` tinyint(3) NOT NULL DEFAULT '0', + `unknown2` tinyint(3) NOT NULL DEFAULT '0', + `item_name` varchar(250) COLLATE latin1_general_ci NOT NULL DEFAULT 'Unknown', + `master_item_id` int(10) NOT NULL DEFAULT '0', + `item_order` tinyint(3) unsigned NOT NULL DEFAULT '0', + `language_type` tinyint(3) unsigned NOT NULL DEFAULT '1', + PRIMARY KEY (`id`), + UNIQUE KEY `SetItemIDX` (`set_id`,`master_item_id`,`item_name`,`item_order`,`language_type`) +) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Dumping data for table `raw_item_itemset_items` +-- + +LOCK TABLES `raw_item_itemset_items` WRITE; +/*!40000 ALTER TABLE `raw_item_itemset_items` DISABLE KEYS */; +/*!40000 ALTER TABLE `raw_item_itemset_items` ENABLE KEYS */; +UNLOCK TABLES; + +-- +-- Table structure for table `raw_item_itemsets` +-- + +DROP TABLE IF EXISTS `raw_item_itemsets`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `raw_item_itemsets` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `set_name` varchar(250) COLLATE latin1_general_ci NOT NULL DEFAULT 'Unknown', + `language_type` tinyint(3) unsigned NOT NULL DEFAULT '1', + `data_version` smallint(5) unsigned NOT NULL DEFAULT '0', + `log_file` varchar(250) COLLATE latin1_general_ci NOT NULL DEFAULT '', + PRIMARY KEY (`id`), + UNIQUE KEY `ItemSetIDX` (`set_name`,`language_type`) +) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Dumping data for table `raw_item_itemsets` +-- + +LOCK TABLES `raw_item_itemsets` WRITE; +/*!40000 ALTER TABLE `raw_item_itemsets` DISABLE KEYS */; +/*!40000 ALTER TABLE `raw_item_itemsets` ENABLE KEYS */; +UNLOCK TABLES; + +-- +-- Table structure for table `raw_item_stats` +-- + +DROP TABLE IF EXISTS `raw_item_stats`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `raw_item_stats` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `item_id` int(11) NOT NULL DEFAULT '0', + `type` tinyint(3) unsigned NOT NULL DEFAULT '0', + `subtype` tinyint(3) unsigned NOT NULL DEFAULT '0', + `value` float NOT NULL DEFAULT '0', + `text` varchar(512) COLLATE latin1_general_ci DEFAULT '', + `description` text COLLATE latin1_general_ci NOT NULL, + `language_type` tinyint(3) unsigned NOT NULL DEFAULT '1', + PRIMARY KEY (`id`), + UNIQUE KEY `NewIndex` (`item_id`,`subtype`,`type`,`text`,`language_type`) +) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Dumping data for table `raw_item_stats` +-- + +LOCK TABLES `raw_item_stats` WRITE; +/*!40000 ALTER TABLE `raw_item_stats` DISABLE KEYS */; +/*!40000 ALTER TABLE `raw_item_stats` ENABLE KEYS */; +UNLOCK TABLES; + +-- +-- Table structure for table `raw_items` +-- + +DROP TABLE IF EXISTS `raw_items`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `raw_items` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `item_id` int(10) NOT NULL DEFAULT '0', + `item_crc` int(10) NOT NULL DEFAULT '0', + `name` varchar(512) COLLATE latin1_general_ci NOT NULL DEFAULT '', + `item_type` enum('Normal','Weapon','Ranged','Armor','Shield','Bag','Scroll','Recipe','Food','Bauble','House','Thrown','House Container','Adornment','Profile','Pattern Set','Item Set','Book','Decoration','Dungeon Maker','Marketplace') COLLATE latin1_general_ci NOT NULL DEFAULT 'Normal', + `menu_type` smallint(5) unsigned NOT NULL DEFAULT '3', + `icon` smallint(5) unsigned NOT NULL DEFAULT '0', + `count` tinyint(3) unsigned NOT NULL DEFAULT '0', + `tier` tinyint(3) unsigned NOT NULL DEFAULT '1', + `skill_id_req` int(10) unsigned NOT NULL DEFAULT '0', + `skill_id_req2` int(10) unsigned NOT NULL DEFAULT '0', + `skill_min` smallint(5) unsigned NOT NULL DEFAULT '0', + `skill_max` smallint(5) unsigned NOT NULL DEFAULT '0', + `weight` int(10) unsigned NOT NULL DEFAULT '0', + `description` text COLLATE latin1_general_ci NOT NULL, + `show_name` tinyint(3) unsigned NOT NULL DEFAULT '1', + `attuned` tinyint(3) unsigned NOT NULL DEFAULT '0', + `attuneable` tinyint(3) unsigned NOT NULL DEFAULT '0', + `artifact` tinyint(3) unsigned NOT NULL DEFAULT '0', + `lore` tinyint(3) unsigned NOT NULL DEFAULT '0', + `temporary` tinyint(3) unsigned NOT NULL DEFAULT '0', + `notrade` tinyint(3) unsigned NOT NULL DEFAULT '0', + `novalue` tinyint(3) unsigned NOT NULL DEFAULT '0', + `nozone` tinyint(3) unsigned NOT NULL DEFAULT '0', + `nodestroy` tinyint(3) unsigned NOT NULL DEFAULT '0', + `crafted` tinyint(3) unsigned NOT NULL DEFAULT '0', + `good_only` tinyint(3) unsigned NOT NULL DEFAULT '0', + `evil_only` tinyint(3) unsigned NOT NULL DEFAULT '0', + `stacklore` tinyint(3) unsigned NOT NULL DEFAULT '0', + `lore_equip` tinyint(3) unsigned NOT NULL DEFAULT '0', + `flags_16384` tinyint(3) unsigned NOT NULL DEFAULT '0', + `flags_32768` tinyint(3) unsigned NOT NULL DEFAULT '0', + `flags_65536` tinyint(3) unsigned NOT NULL DEFAULT '0', + `ornate` tinyint(3) unsigned NOT NULL DEFAULT '0', + `heirloom` tinyint(3) unsigned NOT NULL DEFAULT '0', + `appearance_only` tinyint(3) unsigned NOT NULL DEFAULT '0', + `unlocked` tinyint(3) unsigned NOT NULL DEFAULT '0', + `norepair` tinyint(3) unsigned NOT NULL DEFAULT '0', + `flags2_64` tinyint(3) unsigned NOT NULL DEFAULT '0', + `flags2_256` tinyint(3) unsigned NOT NULL DEFAULT '0', + `slots` int(10) unsigned NOT NULL DEFAULT '0', + `set_name` varchar(250) COLLATE latin1_general_ci DEFAULT NULL, + `stack_size` tinyint(3) unsigned NOT NULL DEFAULT '0', + `collectable` tinyint(3) unsigned NOT NULL DEFAULT '0', + `adornment_slot1` tinyint(3) unsigned NOT NULL DEFAULT '255', + `adornment_slot2` tinyint(3) unsigned NOT NULL DEFAULT '255', + `adornment_slot3` tinyint(3) unsigned NOT NULL DEFAULT '255', + `adornment_slot4` tinyint(3) unsigned NOT NULL DEFAULT '255', + `adornment_slot5` tinyint(3) unsigned NOT NULL DEFAULT '255', + `adornment_slot6` tinyint(3) unsigned NOT NULL DEFAULT '255', + `adornment_description` text COLLATE latin1_general_ci, + `offers_quest` varchar(250) COLLATE latin1_general_ci DEFAULT NULL, + `part_of_quest` varchar(250) COLLATE latin1_general_ci DEFAULT NULL, + `quest_unknown` tinyint(3) unsigned NOT NULL DEFAULT '0', + `total_charges` smallint(5) unsigned NOT NULL DEFAULT '0', + `recommended_level` smallint(5) unsigned NOT NULL DEFAULT '0', + `adventure_default_level` smallint(5) unsigned NOT NULL DEFAULT '0', + `tradeskill_default_level` smallint(5) unsigned NOT NULL DEFAULT '0', + `adventure_classes` bigint(20) unsigned NOT NULL DEFAULT '0', + `tradeskill_classes` bigint(20) unsigned NOT NULL DEFAULT '0', + `updated` tinyint(3) unsigned NOT NULL DEFAULT '0', + `language_type` tinyint(3) unsigned NOT NULL DEFAULT '1', + `log_file` varchar(255) COLLATE latin1_general_ci NOT NULL DEFAULT '', + `data_version` smallint(5) unsigned NOT NULL, + `processed` tinyint(1) unsigned NOT NULL DEFAULT '0', + `populate_item_id` int(10) unsigned NOT NULL DEFAULT '0', + PRIMARY KEY (`id`), + UNIQUE KEY `ItemIDLanguageTypeIDX` (`item_id`) +) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Dumping data for table `raw_items` +-- + +LOCK TABLES `raw_items` WRITE; +/*!40000 ALTER TABLE `raw_items` DISABLE KEYS */; +/*!40000 ALTER TABLE `raw_items` ENABLE KEYS */; +UNLOCK TABLES; + +-- +-- Table structure for table `raw_locations` +-- + +DROP TABLE IF EXISTS `raw_locations`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `raw_locations` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `poi_id` tinyint(3) unsigned NOT NULL DEFAULT '0', + `soe_zone_id` smallint(5) unsigned NOT NULL DEFAULT '0', + `unknown` tinyint(3) unsigned NOT NULL DEFAULT '0', + `poi_name` varchar(250) COLLATE latin1_general_ci NOT NULL, + `data_version` smallint(5) unsigned NOT NULL DEFAULT '0', + `log_file` varchar(250) COLLATE latin1_general_ci NOT NULL, + `language_type` tinyint(3) unsigned NOT NULL DEFAULT '0', + PRIMARY KEY (`id`), + UNIQUE KEY `LocationIDX` (`poi_name`) +) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Dumping data for table `raw_locations` +-- + +LOCK TABLES `raw_locations` WRITE; +/*!40000 ALTER TABLE `raw_locations` DISABLE KEYS */; +/*!40000 ALTER TABLE `raw_locations` ENABLE KEYS */; +UNLOCK TABLES; + +-- +-- Table structure for table `raw_map_data` +-- + +DROP TABLE IF EXISTS `raw_map_data`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `raw_map_data` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `map_id` int(10) unsigned NOT NULL DEFAULT '0', + `zone_name` varchar(128) COLLATE latin1_general_ci NOT NULL, + `highest` float NOT NULL DEFAULT '0', + `lowest` float NOT NULL DEFAULT '0', + `explored_map_name` varchar(255) COLLATE latin1_general_ci NOT NULL, + `unexplored_map_name` varchar(255) COLLATE latin1_general_ci NOT NULL, + `bounds1_x` float NOT NULL DEFAULT '0', + `bounds1_z` float NOT NULL DEFAULT '0', + `bounds2_x` float NOT NULL DEFAULT '0', + `bounds2_z` float NOT NULL DEFAULT '0', + `bounds3_x` float NOT NULL DEFAULT '0', + `bounds3_z` float NOT NULL DEFAULT '0', + `bounds4_x` float NOT NULL DEFAULT '0', + `bounds4_z` float NOT NULL DEFAULT '0', + `explored_key` bigint(20) unsigned NOT NULL DEFAULT '0', + `unexplored_key` bigint(20) unsigned NOT NULL DEFAULT '0', + `log_file` varchar(255) COLLATE latin1_general_ci DEFAULT '', + PRIMARY KEY (`id`), + UNIQUE KEY `MapIDX` (`map_id`,`zone_name`,`unexplored_map_name`,`explored_map_name`) +) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Dumping data for table `raw_map_data` +-- + +LOCK TABLES `raw_map_data` WRITE; +/*!40000 ALTER TABLE `raw_map_data` DISABLE KEYS */; +/*!40000 ALTER TABLE `raw_map_data` ENABLE KEYS */; +UNLOCK TABLES; + +-- +-- Table structure for table `raw_merchant_inventory` +-- + +DROP TABLE IF EXISTS `raw_merchant_inventory`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `raw_merchant_inventory` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `inventory_id` int(10) unsigned NOT NULL DEFAULT '0', + `item_name` varchar(250) COLLATE latin1_general_ci NOT NULL DEFAULT '', + `price` bigint(20) unsigned NOT NULL DEFAULT '0', + `item_id` int(10) NOT NULL DEFAULT '0', + `unique_item_id` int(10) NOT NULL DEFAULT '0', + `stack_size` smallint(5) unsigned NOT NULL DEFAULT '0', + `icon` smallint(5) unsigned NOT NULL DEFAULT '0', + `item_difficulty` tinyint(3) unsigned NOT NULL DEFAULT '0', + `level` tinyint(3) unsigned NOT NULL DEFAULT '0', + `unknown4a` tinyint(3) unsigned NOT NULL DEFAULT '0', + `unknown4b` tinyint(3) unsigned NOT NULL DEFAULT '0', + `quantity` smallint(5) unsigned NOT NULL DEFAULT '0', + `unknown5` tinyint(3) unsigned NOT NULL DEFAULT '0', + `tier` tinyint(3) unsigned NOT NULL DEFAULT '0', + `status` int(10) unsigned NOT NULL DEFAULT '0', + `item_id2` int(10) NOT NULL DEFAULT '0', + `stack_size2` smallint(5) unsigned NOT NULL DEFAULT '0', + `status2` int(10) unsigned NOT NULL DEFAULT '0', + `station_cash` int(10) unsigned NOT NULL DEFAULT '0', + `unknown7a` tinyint(3) unsigned NOT NULL DEFAULT '0', + `unknown7b` tinyint(3) unsigned NOT NULL DEFAULT '0', + `num_tokens` tinyint(3) unsigned NOT NULL DEFAULT '0', + `description` text COLLATE latin1_general_ci, + `data_version` smallint(5) unsigned NOT NULL DEFAULT '0', + PRIMARY KEY (`id`), + UNIQUE KEY `InventoryIDX` (`inventory_id`,`item_id`) +) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Dumping data for table `raw_merchant_inventory` +-- + +LOCK TABLES `raw_merchant_inventory` WRITE; +/*!40000 ALTER TABLE `raw_merchant_inventory` DISABLE KEYS */; +/*!40000 ALTER TABLE `raw_merchant_inventory` ENABLE KEYS */; +UNLOCK TABLES; + +-- +-- Table structure for table `raw_merchant_inventory_tokens` +-- + +DROP TABLE IF EXISTS `raw_merchant_inventory_tokens`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `raw_merchant_inventory_tokens` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `inventory_item_id` int(10) unsigned NOT NULL DEFAULT '0', + `token_icon` smallint(5) unsigned NOT NULL DEFAULT '0', + `token_quantity` smallint(5) unsigned NOT NULL DEFAULT '0', + `token_id` int(10) NOT NULL DEFAULT '0', + `token_id2` int(10) NOT NULL DEFAULT '0', + `token_name` varchar(250) COLLATE latin1_general_ci NOT NULL DEFAULT '', + PRIMARY KEY (`id`), + KEY `TokenIDX` (`inventory_item_id`,`token_id`) +) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Dumping data for table `raw_merchant_inventory_tokens` +-- + +LOCK TABLES `raw_merchant_inventory_tokens` WRITE; +/*!40000 ALTER TABLE `raw_merchant_inventory_tokens` DISABLE KEYS */; +/*!40000 ALTER TABLE `raw_merchant_inventory_tokens` ENABLE KEYS */; +UNLOCK TABLES; + +-- +-- Table structure for table `raw_merchants` +-- + +DROP TABLE IF EXISTS `raw_merchants`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `raw_merchants` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `spawn_id` int(10) unsigned NOT NULL DEFAULT '0', + `description` varchar(250) COLLATE latin1_general_ci NOT NULL DEFAULT '', + `data_version` smallint(5) unsigned NOT NULL DEFAULT '0', + `log_file` varchar(250) COLLATE latin1_general_ci NOT NULL DEFAULT '', + `language_type` tinyint(3) unsigned NOT NULL DEFAULT '0', + PRIMARY KEY (`id`), + UNIQUE KEY `MerchantsIDX` (`spawn_id`,`language_type`) +) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Dumping data for table `raw_merchants` +-- + +LOCK TABLES `raw_merchants` WRITE; +/*!40000 ALTER TABLE `raw_merchants` DISABLE KEYS */; +/*!40000 ALTER TABLE `raw_merchants` ENABLE KEYS */; +UNLOCK TABLES; + +-- +-- Table structure for table `raw_poi_locations` +-- + +DROP TABLE IF EXISTS `raw_poi_locations`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `raw_poi_locations` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `unknown` smallint(5) unsigned NOT NULL DEFAULT '0', + `x` float NOT NULL DEFAULT '0', + `y` float NOT NULL DEFAULT '0', + `z` float NOT NULL DEFAULT '0', + `num_locations` smallint(5) unsigned NOT NULL DEFAULT '0', + `data_version` int(10) unsigned NOT NULL DEFAULT '0', + `log_file` varchar(250) COLLATE latin1_general_ci NOT NULL DEFAULT '', + PRIMARY KEY (`id`), + UNIQUE KEY `LocationIDX` (`x`,`y`,`z`) +) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Dumping data for table `raw_poi_locations` +-- + +LOCK TABLES `raw_poi_locations` WRITE; +/*!40000 ALTER TABLE `raw_poi_locations` DISABLE KEYS */; +/*!40000 ALTER TABLE `raw_poi_locations` ENABLE KEYS */; +UNLOCK TABLES; + +-- +-- Table structure for table `raw_quest_reward_factions` +-- + +DROP TABLE IF EXISTS `raw_quest_reward_factions`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `raw_quest_reward_factions` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `quest_id` int(10) unsigned NOT NULL DEFAULT '0', + `faction_name` varchar(64) COLLATE latin1_general_ci NOT NULL, + `amount` int(10) unsigned NOT NULL DEFAULT '0', + PRIMARY KEY (`id`), + UNIQUE KEY `FactionQuestIDX` (`quest_id`,`faction_name`) +) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Dumping data for table `raw_quest_reward_factions` +-- + +LOCK TABLES `raw_quest_reward_factions` WRITE; +/*!40000 ALTER TABLE `raw_quest_reward_factions` DISABLE KEYS */; +/*!40000 ALTER TABLE `raw_quest_reward_factions` ENABLE KEYS */; +UNLOCK TABLES; + +-- +-- Table structure for table `raw_quest_reward_items` +-- + +DROP TABLE IF EXISTS `raw_quest_reward_items`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `raw_quest_reward_items` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `quest_id` int(10) unsigned NOT NULL DEFAULT '0', + `item_id` int(11) NOT NULL DEFAULT '0', + `selectable` tinyint(3) unsigned NOT NULL DEFAULT '0', + PRIMARY KEY (`id`), + UNIQUE KEY `ItemQuestIDX` (`item_id`,`quest_id`,`selectable`) +) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Dumping data for table `raw_quest_reward_items` +-- + +LOCK TABLES `raw_quest_reward_items` WRITE; +/*!40000 ALTER TABLE `raw_quest_reward_items` DISABLE KEYS */; +/*!40000 ALTER TABLE `raw_quest_reward_items` ENABLE KEYS */; +UNLOCK TABLES; + +-- +-- Table structure for table `raw_quest_taskgroup_tasks` +-- + +DROP TABLE IF EXISTS `raw_quest_taskgroup_tasks`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `raw_quest_taskgroup_tasks` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `taskgroup_id` int(10) unsigned NOT NULL DEFAULT '0', + `task` text COLLATE latin1_general_ci NOT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `TaskGroupTaskIDX` (`task`(200),`taskgroup_id`) +) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Dumping data for table `raw_quest_taskgroup_tasks` +-- + +LOCK TABLES `raw_quest_taskgroup_tasks` WRITE; +/*!40000 ALTER TABLE `raw_quest_taskgroup_tasks` DISABLE KEYS */; +/*!40000 ALTER TABLE `raw_quest_taskgroup_tasks` ENABLE KEYS */; +UNLOCK TABLES; + +-- +-- Table structure for table `raw_quest_taskgroup_taskupdates` +-- + +DROP TABLE IF EXISTS `raw_quest_taskgroup_taskupdates`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `raw_quest_taskgroup_taskupdates` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `taskgroup_id` int(10) unsigned NOT NULL DEFAULT '0', + `icon` smallint(5) unsigned NOT NULL DEFAULT '0', + `update_target_name` varchar(64) COLLATE latin1_general_ci NOT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `TaskGroupUpdateIDX` (`taskgroup_id`,`update_target_name`) +) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Dumping data for table `raw_quest_taskgroup_taskupdates` +-- + +LOCK TABLES `raw_quest_taskgroup_taskupdates` WRITE; +/*!40000 ALTER TABLE `raw_quest_taskgroup_taskupdates` DISABLE KEYS */; +/*!40000 ALTER TABLE `raw_quest_taskgroup_taskupdates` ENABLE KEYS */; +UNLOCK TABLES; + +-- +-- Table structure for table `raw_quest_taskgroups` +-- + +DROP TABLE IF EXISTS `raw_quest_taskgroups`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `raw_quest_taskgroups` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `quest_id` int(10) unsigned NOT NULL DEFAULT '0', + `task_group` text COLLATE latin1_general_ci NOT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `QuestTaskIDX` (`quest_id`,`task_group`(200)) +) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Dumping data for table `raw_quest_taskgroups` +-- + +LOCK TABLES `raw_quest_taskgroups` WRITE; +/*!40000 ALTER TABLE `raw_quest_taskgroups` DISABLE KEYS */; +/*!40000 ALTER TABLE `raw_quest_taskgroups` ENABLE KEYS */; +UNLOCK TABLES; + +-- +-- Table structure for table `raw_quests` +-- + +DROP TABLE IF EXISTS `raw_quests`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `raw_quests` ( + `id` int(11) unsigned NOT NULL AUTO_INCREMENT, + `quest_id` int(11) NOT NULL DEFAULT '0', + `name` varchar(255) COLLATE latin1_general_ci NOT NULL, + `description` text COLLATE latin1_general_ci NOT NULL, + `type` varchar(255) COLLATE latin1_general_ci NOT NULL, + `zone` varchar(255) COLLATE latin1_general_ci NOT NULL, + `unknown1` tinyint(3) unsigned NOT NULL DEFAULT '0', + `repeatable` tinyint(3) unsigned NOT NULL DEFAULT '0', + `unknown2` tinyint(3) unsigned NOT NULL DEFAULT '0', + `day` tinyint(3) unsigned NOT NULL DEFAULT '0', + `month` tinyint(3) unsigned NOT NULL DEFAULT '0', + `year` tinyint(3) unsigned NOT NULL DEFAULT '0', + `level` tinyint(3) unsigned NOT NULL DEFAULT '0', + `encounter_level` tinyint(3) unsigned NOT NULL DEFAULT '0', + `difficulty` tinyint(3) unsigned NOT NULL DEFAULT '0', + `visible` tinyint(3) unsigned NOT NULL DEFAULT '0', + `max_coin` int(10) unsigned NOT NULL DEFAULT '0', + `min_coin` int(10) unsigned NOT NULL DEFAULT '0', + `status_points` int(10) unsigned NOT NULL DEFAULT '0', + `text` varchar(50) COLLATE latin1_general_ci NOT NULL, + `exp_bonus` int(10) unsigned NOT NULL DEFAULT '0', + `log_file` varchar(255) COLLATE latin1_general_ci DEFAULT '', + `data_version` smallint(5) unsigned NOT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `QuestIDX` (`quest_id`) +) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Dumping data for table `raw_quests` +-- + +LOCK TABLES `raw_quests` WRITE; +/*!40000 ALTER TABLE `raw_quests` DISABLE KEYS */; +/*!40000 ALTER TABLE `raw_quests` ENABLE KEYS */; +UNLOCK TABLES; + +-- +-- Table structure for table `raw_recipe_build_comps` +-- + +DROP TABLE IF EXISTS `raw_recipe_build_comps`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `raw_recipe_build_comps` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `recipe_id` int(10) unsigned NOT NULL DEFAULT '0', + `comp_name` varchar(100) COLLATE latin1_general_ci NOT NULL DEFAULT 'Unknown', + `comp_qty` tinyint(3) unsigned NOT NULL DEFAULT '0', + PRIMARY KEY (`id`) +) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Dumping data for table `raw_recipe_build_comps` +-- + +LOCK TABLES `raw_recipe_build_comps` WRITE; +/*!40000 ALTER TABLE `raw_recipe_build_comps` DISABLE KEYS */; +/*!40000 ALTER TABLE `raw_recipe_build_comps` ENABLE KEYS */; +UNLOCK TABLES; + +-- +-- Table structure for table `raw_recipe_details` +-- + +DROP TABLE IF EXISTS `raw_recipe_details`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `raw_recipe_details` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `recipe_id` int(10) unsigned NOT NULL DEFAULT '0', + `icon` smallint(5) unsigned NOT NULL DEFAULT '0', + `name` char(200) COLLATE latin1_general_ci NOT NULL, + `description` char(255) COLLATE latin1_general_ci NOT NULL, + `technique` int(10) unsigned NOT NULL DEFAULT '0', + `knowledge` int(10) unsigned NOT NULL DEFAULT '0', + `level` tinyint(3) unsigned NOT NULL DEFAULT '0', + `recipe_book` char(200) COLLATE latin1_general_ci NOT NULL, + `device` char(40) COLLATE latin1_general_ci NOT NULL, + `unknown1` int(10) unsigned NOT NULL DEFAULT '0', + `unknown2` int(10) unsigned NOT NULL DEFAULT '0', + `unknown3` int(10) unsigned NOT NULL DEFAULT '0', + `unknown4` int(10) unsigned NOT NULL DEFAULT '0', + `unknown5` int(10) unsigned NOT NULL DEFAULT '0', + `unknown6` int(10) unsigned NOT NULL DEFAULT '0', + PRIMARY KEY (`id`), + UNIQUE KEY `recipe_id` (`recipe_id`) +) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Dumping data for table `raw_recipe_details` +-- + +LOCK TABLES `raw_recipe_details` WRITE; +/*!40000 ALTER TABLE `raw_recipe_details` DISABLE KEYS */; +/*!40000 ALTER TABLE `raw_recipe_details` ENABLE KEYS */; +UNLOCK TABLES; + +-- +-- Table structure for table `raw_recipe_list` +-- + +DROP TABLE IF EXISTS `raw_recipe_list`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `raw_recipe_list` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `recipe_id` int(10) unsigned NOT NULL DEFAULT '0', + `tier` tinyint(3) unsigned NOT NULL DEFAULT '0', + `level` tinyint(3) unsigned NOT NULL DEFAULT '0', + `icon` smallint(5) unsigned NOT NULL DEFAULT '0', + `technique` int(10) unsigned NOT NULL DEFAULT '0', + `knowledge` int(10) unsigned NOT NULL DEFAULT '0', + `name` varchar(200) COLLATE latin1_general_ci DEFAULT 'Unknown', + `book` varchar(200) COLLATE latin1_general_ci DEFAULT 'Unknown', + `unknown1` int(10) unsigned NOT NULL DEFAULT '0', + `unknown2` int(10) unsigned NOT NULL DEFAULT '0', + `unknown3` int(10) unsigned NOT NULL DEFAULT '0', + `unknown4` int(10) unsigned NOT NULL DEFAULT '0', + PRIMARY KEY (`id`), + UNIQUE KEY `recipe_id` (`recipe_id`) +) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Dumping data for table `raw_recipe_list` +-- + +LOCK TABLES `raw_recipe_list` WRITE; +/*!40000 ALTER TABLE `raw_recipe_list` DISABLE KEYS */; +/*!40000 ALTER TABLE `raw_recipe_list` ENABLE KEYS */; +UNLOCK TABLES; + +-- +-- Table structure for table `raw_recipes` +-- + +DROP TABLE IF EXISTS `raw_recipes`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `raw_recipes` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `recipe_id` int(10) unsigned NOT NULL DEFAULT '0', + `level` tinyint(3) unsigned NOT NULL DEFAULT '0', + `skill_level` smallint(5) unsigned NOT NULL DEFAULT '0', + `technique` int(10) unsigned NOT NULL DEFAULT '0', + `knowledge` int(10) unsigned NOT NULL DEFAULT '0', + `device` varchar(50) COLLATE latin1_general_ci NOT NULL DEFAULT 'Unknown', + `tradeskill_id` tinyint(3) unsigned NOT NULL DEFAULT '0', + `product_classes` bigint(20) unsigned NOT NULL DEFAULT '0', + `product_icon` smallint(5) unsigned NOT NULL DEFAULT '0', + `product_name` varchar(100) COLLATE latin1_general_ci NOT NULL DEFAULT 'Unknown', + `product_qty` smallint(5) unsigned NOT NULL DEFAULT '0', + `product_item_id` int(10) NOT NULL DEFAULT '0', + `byproduct_icon` smallint(5) unsigned NOT NULL DEFAULT '0', + `byproduct_name` varchar(100) COLLATE latin1_general_ci NOT NULL DEFAULT 'Unknown', + `byproduct_qty` tinyint(3) unsigned NOT NULL DEFAULT '0', + `byproduct_id` int(10) NOT NULL DEFAULT '0', + `primary_comp` varchar(100) COLLATE latin1_general_ci NOT NULL DEFAULT 'Unknown', + `fuel_comp_name` varchar(100) COLLATE latin1_general_ci NOT NULL DEFAULT 'Unknown', + `fuel_comp_qty` tinyint(3) unsigned NOT NULL DEFAULT '0', + `recipe_name` varchar(100) COLLATE latin1_general_ci NOT NULL DEFAULT 'Unknown', + `recipe_description` varchar(255) COLLATE latin1_general_ci NOT NULL DEFAULT 'Description', + `unknown5` tinyint(3) unsigned NOT NULL DEFAULT '0', + `data_version` smallint(5) unsigned NOT NULL DEFAULT '0', + `log_file` varchar(200) COLLATE latin1_general_ci NOT NULL DEFAULT 'Unknown log file', + PRIMARY KEY (`id`), + UNIQUE KEY `recipe_id` (`recipe_id`) +) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Dumping data for table `raw_recipes` +-- + +LOCK TABLES `raw_recipes` WRITE; +/*!40000 ALTER TABLE `raw_recipes` DISABLE KEYS */; +/*!40000 ALTER TABLE `raw_recipes` ENABLE KEYS */; +UNLOCK TABLES; + +-- +-- Table structure for table `raw_skills` +-- + +DROP TABLE IF EXISTS `raw_skills`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `raw_skills` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `skill_id` int(10) unsigned NOT NULL DEFAULT '0', + `short_name` varchar(32) COLLATE latin1_general_ci DEFAULT 'Unknown', + `name` varchar(255) COLLATE latin1_general_ci DEFAULT 'Unknown', + `description` varchar(255) COLLATE latin1_general_ci DEFAULT 'Unknown', + `data_version` smallint(5) NOT NULL DEFAULT '0', + `log_file` varchar(250) COLLATE latin1_general_ci NOT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `skill_id` (`skill_id`) +) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Dumping data for table `raw_skills` +-- + +LOCK TABLES `raw_skills` WRITE; +/*!40000 ALTER TABLE `raw_skills` DISABLE KEYS */; +/*!40000 ALTER TABLE `raw_skills` ENABLE KEYS */; +UNLOCK TABLES; + +-- +-- Table structure for table `raw_skills_current` +-- + +DROP TABLE IF EXISTS `raw_skills_current`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `raw_skills_current` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `skill_id` int(10) unsigned NOT NULL DEFAULT '0', + `type` smallint(5) unsigned NOT NULL DEFAULT '0', + `current_val` mediumint(7) unsigned NOT NULL DEFAULT '0', + `base_val` mediumint(7) unsigned NOT NULL DEFAULT '0', + `max_val` mediumint(7) unsigned NOT NULL DEFAULT '0', + `skill_delta` mediumint(7) NOT NULL DEFAULT '0', + `skill_delta2` mediumint(7) NOT NULL DEFAULT '0', + `display_min` tinyint(3) unsigned NOT NULL DEFAULT '0', + `display_max` tinyint(3) unsigned NOT NULL DEFAULT '0', + `unknown` tinyint(3) unsigned NOT NULL DEFAULT '0', + `data_version` smallint(5) unsigned NOT NULL DEFAULT '0', + `log_file` varchar(250) COLLATE latin1_general_ci NOT NULL, + PRIMARY KEY (`id`) +) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Dumping data for table `raw_skills_current` +-- + +LOCK TABLES `raw_skills_current` WRITE; +/*!40000 ALTER TABLE `raw_skills_current` DISABLE KEYS */; +/*!40000 ALTER TABLE `raw_skills_current` ENABLE KEYS */; +UNLOCK TABLES; + +-- +-- Table structure for table `raw_sounds` +-- + +DROP TABLE IF EXISTS `raw_sounds`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `raw_sounds` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `sound_file` varchar(512) COLLATE latin1_general_ci DEFAULT '', + `zone_id` int(10) unsigned NOT NULL DEFAULT '0', + `x` float NOT NULL DEFAULT '0', + `y` float NOT NULL DEFAULT '0', + `z` float NOT NULL DEFAULT '0', + `unknown1` float NOT NULL DEFAULT '0', + `unknown2` float NOT NULL DEFAULT '0', + `unknown3` float NOT NULL DEFAULT '0', + `log_file` varchar(255) COLLATE latin1_general_ci DEFAULT '', + PRIMARY KEY (`id`), + UNIQUE KEY `NewIndex` (`sound_file`,`x`,`y`,`z`,`zone_id`) +) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Dumping data for table `raw_sounds` +-- + +LOCK TABLES `raw_sounds` WRITE; +/*!40000 ALTER TABLE `raw_sounds` DISABLE KEYS */; +/*!40000 ALTER TABLE `raw_sounds` ENABLE KEYS */; +UNLOCK TABLES; + +-- +-- Table structure for table `raw_spawn_appearance` +-- + +DROP TABLE IF EXISTS `raw_spawn_appearance`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `raw_spawn_appearance` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `spawn_id` int(10) unsigned NOT NULL DEFAULT '0', + `signed_value` tinyint(4) NOT NULL DEFAULT '0', + `type` varchar(64) COLLATE latin1_general_ci DEFAULT '', + `red` smallint(6) NOT NULL DEFAULT '0', + `green` smallint(6) NOT NULL DEFAULT '0', + `blue` smallint(6) NOT NULL DEFAULT '0', + `processed` tinyint(3) unsigned NOT NULL DEFAULT '0', + `language_type` tinyint(3) unsigned NOT NULL DEFAULT '1', + PRIMARY KEY (`id`), + UNIQUE KEY `NewIndex` (`spawn_id`,`type`) +) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Dumping data for table `raw_spawn_appearance` +-- + +LOCK TABLES `raw_spawn_appearance` WRITE; +/*!40000 ALTER TABLE `raw_spawn_appearance` DISABLE KEYS */; +/*!40000 ALTER TABLE `raw_spawn_appearance` ENABLE KEYS */; +UNLOCK TABLES; + +-- +-- Table structure for table `raw_spawn_appearance_equip` +-- + +DROP TABLE IF EXISTS `raw_spawn_appearance_equip`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `raw_spawn_appearance_equip` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `spawn_id` int(10) unsigned NOT NULL DEFAULT '0', + `slot_id` tinyint(3) unsigned NOT NULL DEFAULT '0', + `equip_type` int(10) unsigned NOT NULL DEFAULT '0', + `red` tinyint(3) unsigned NOT NULL DEFAULT '0', + `green` tinyint(3) unsigned NOT NULL DEFAULT '0', + `blue` tinyint(3) unsigned NOT NULL DEFAULT '0', + `highlight_red` tinyint(3) unsigned NOT NULL DEFAULT '0', + `highlight_green` tinyint(3) unsigned NOT NULL DEFAULT '0', + `highlight_blue` tinyint(3) unsigned NOT NULL DEFAULT '0', + `data_version` smallint(5) unsigned NOT NULL DEFAULT '0', + `processed` tinyint(3) unsigned NOT NULL DEFAULT '0', + `language_type` tinyint(3) unsigned NOT NULL DEFAULT '1', + PRIMARY KEY (`id`), + UNIQUE KEY `EquipIDX` (`spawn_id`,`slot_id`,`data_version`,`language_type`) +) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Dumping data for table `raw_spawn_appearance_equip` +-- + +LOCK TABLES `raw_spawn_appearance_equip` WRITE; +/*!40000 ALTER TABLE `raw_spawn_appearance_equip` DISABLE KEYS */; +/*!40000 ALTER TABLE `raw_spawn_appearance_equip` ENABLE KEYS */; +UNLOCK TABLES; + +-- +-- Table structure for table `raw_spawn_groups` +-- + +DROP TABLE IF EXISTS `raw_spawn_groups`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `raw_spawn_groups` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `spawn_group_id` int(10) unsigned NOT NULL DEFAULT '0', + `spawn_id` int(10) unsigned NOT NULL DEFAULT '0', + `language_type` tinyint(3) unsigned NOT NULL DEFAULT '1', + PRIMARY KEY (`id`), + UNIQUE KEY `NewIndex` (`spawn_id`,`spawn_group_id`) +) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Dumping data for table `raw_spawn_groups` +-- + +LOCK TABLES `raw_spawn_groups` WRITE; +/*!40000 ALTER TABLE `raw_spawn_groups` DISABLE KEYS */; +/*!40000 ALTER TABLE `raw_spawn_groups` ENABLE KEYS */; +UNLOCK TABLES; + +-- +-- Table structure for table `raw_spawn_info` +-- + +DROP TABLE IF EXISTS `raw_spawn_info`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `raw_spawn_info` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `name` varchar(255) COLLATE latin1_general_ci NOT NULL, + `guild` varchar(250) COLLATE latin1_general_ci DEFAULT NULL, + `min_level` tinyint(3) unsigned NOT NULL DEFAULT '0', + `max_level` tinyint(3) unsigned NOT NULL DEFAULT '0', + `difficulty` tinyint(3) unsigned NOT NULL DEFAULT '0', + `race` smallint(5) unsigned NOT NULL DEFAULT '0', + `model_type` smallint(5) unsigned NOT NULL DEFAULT '0', + `soga_model_type` smallint(5) unsigned NOT NULL DEFAULT '0', + `class_` tinyint(3) unsigned NOT NULL DEFAULT '0', + `gender` tinyint(3) unsigned NOT NULL DEFAULT '0', + `default_command` varchar(250) COLLATE latin1_general_ci DEFAULT NULL, + `max_distance` float NOT NULL DEFAULT '0', + `hair_type_id` smallint(5) unsigned NOT NULL DEFAULT '0', + `facial_hair_type_id` smallint(5) unsigned NOT NULL DEFAULT '0', + `wing_type_id` smallint(5) unsigned NOT NULL DEFAULT '0', + `chest_type_id` smallint(5) unsigned NOT NULL DEFAULT '0', + `legs_type_id` smallint(5) unsigned NOT NULL DEFAULT '0', + `soga_hair_type_id` smallint(5) unsigned NOT NULL DEFAULT '0', + `soga_facial_hair_type_id` smallint(5) unsigned NOT NULL DEFAULT '0', + `pos_collision_radius` smallint(5) unsigned NOT NULL DEFAULT '0', + `pos_size` smallint(5) unsigned NOT NULL DEFAULT '0', + `min_size` smallint(5) unsigned NOT NULL DEFAULT '0', + `max_size` smallint(5) unsigned NOT NULL DEFAULT '0', + `pos_size_multiplier` smallint(5) unsigned NOT NULL DEFAULT '0', + `pos_state` smallint(5) unsigned NOT NULL DEFAULT '0', + `pos_movement_mode` tinyint(3) unsigned NOT NULL DEFAULT '0', + `health_percent` tinyint(3) unsigned NOT NULL DEFAULT '100', + `hide_hood` tinyint(1) unsigned NOT NULL DEFAULT '0', + `heroic_flag` tinyint(3) unsigned NOT NULL DEFAULT '0', + `spawn_type` tinyint(3) unsigned NOT NULL DEFAULT '0', + `attackable_status` tinyint(3) unsigned NOT NULL DEFAULT '0', + `activity_status` int(10) unsigned NOT NULL DEFAULT '0', + `locked_no_loot` tinyint(3) unsigned NOT NULL DEFAULT '0', + `hand_flag` tinyint(3) unsigned NOT NULL DEFAULT '0', + `vis_flags` tinyint(3) unsigned NOT NULL DEFAULT '0', + `visual_state` int(10) unsigned NOT NULL DEFAULT '0', + `action_state` smallint(5) unsigned NOT NULL DEFAULT '0', + `mood_state` smallint(5) unsigned NOT NULL DEFAULT '0', + `emote_state` smallint(5) unsigned NOT NULL DEFAULT '0', + `widget_id` int(10) unsigned NOT NULL DEFAULT '0', + `title` varchar(255) COLLATE latin1_general_ci DEFAULT '', + `randomize` int(10) unsigned NOT NULL DEFAULT '0', + `populate_spawn_id` int(10) unsigned NOT NULL DEFAULT '0', + `language_type` tinyint(3) unsigned NOT NULL DEFAULT '1', + `log_file` varchar(255) COLLATE latin1_general_ci DEFAULT '', + `version` int(10) unsigned NOT NULL DEFAULT '0', + PRIMARY KEY (`id`) +) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Dumping data for table `raw_spawn_info` +-- + +LOCK TABLES `raw_spawn_info` WRITE; +/*!40000 ALTER TABLE `raw_spawn_info` DISABLE KEYS */; +/*!40000 ALTER TABLE `raw_spawn_info` ENABLE KEYS */; +UNLOCK TABLES; + +-- +-- Table structure for table `raw_spawn_mercs` +-- + +DROP TABLE IF EXISTS `raw_spawn_mercs`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `raw_spawn_mercs` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `spawn_id` int(10) unsigned NOT NULL DEFAULT '0', + `mercenary_name` varchar(64) COLLATE latin1_general_ci NOT NULL DEFAULT '', + `data_version` smallint(5) unsigned NOT NULL DEFAULT '0', + `log_file` varchar(250) COLLATE latin1_general_ci NOT NULL DEFAULT '', + PRIMARY KEY (`id`), + UNIQUE KEY `NewIndex1` (`mercenary_name`) +) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Dumping data for table `raw_spawn_mercs` +-- + +LOCK TABLES `raw_spawn_mercs` WRITE; +/*!40000 ALTER TABLE `raw_spawn_mercs` DISABLE KEYS */; +/*!40000 ALTER TABLE `raw_spawn_mercs` ENABLE KEYS */; +UNLOCK TABLES; + +-- +-- Table structure for table `raw_spawn_pets` +-- + +DROP TABLE IF EXISTS `raw_spawn_pets`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `raw_spawn_pets` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `spawn_id` int(10) unsigned NOT NULL DEFAULT '0', + `pet_name` varchar(64) COLLATE latin1_general_ci NOT NULL DEFAULT '', + `data_version` smallint(5) unsigned NOT NULL DEFAULT '0', + `log_file` varchar(250) COLLATE latin1_general_ci NOT NULL DEFAULT '', + PRIMARY KEY (`id`), + UNIQUE KEY `NewIndex1` (`pet_name`) +) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Dumping data for table `raw_spawn_pets` +-- + +LOCK TABLES `raw_spawn_pets` WRITE; +/*!40000 ALTER TABLE `raw_spawn_pets` DISABLE KEYS */; +/*!40000 ALTER TABLE `raw_spawn_pets` ENABLE KEYS */; +UNLOCK TABLES; + +-- +-- Table structure for table `raw_spawn_signs` +-- + +DROP TABLE IF EXISTS `raw_spawn_signs`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `raw_spawn_signs` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `spawn_id` int(10) unsigned NOT NULL DEFAULT '0', + `title` varchar(250) COLLATE latin1_general_ci DEFAULT NULL, + `unknown1a` float NOT NULL DEFAULT '0', + `unknown1b` float NOT NULL DEFAULT '0', + `unknown1c` float NOT NULL DEFAULT '0', + `widget_id` int(10) unsigned NOT NULL DEFAULT '0', + `widget_x` float NOT NULL DEFAULT '0', + `widget_y` float NOT NULL DEFAULT '0', + `widget_z` float NOT NULL DEFAULT '0', + `description` text COLLATE latin1_general_ci NOT NULL, + `sign_distance` float NOT NULL DEFAULT '0', + `unknown3` smallint(5) unsigned NOT NULL DEFAULT '0', + `icon` smallint(5) unsigned NOT NULL DEFAULT '0', + `type` enum('Zone','Generic') COLLATE latin1_general_ci NOT NULL DEFAULT 'Generic', + `include_heading` tinyint(3) unsigned NOT NULL DEFAULT '1', + `include_location` tinyint(3) unsigned NOT NULL DEFAULT '1', + `language_type` tinyint(3) unsigned NOT NULL DEFAULT '1', + PRIMARY KEY (`id`), + UNIQUE KEY `NewIndex` (`spawn_id`,`language_type`) +) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Dumping data for table `raw_spawn_signs` +-- + +LOCK TABLES `raw_spawn_signs` WRITE; +/*!40000 ALTER TABLE `raw_spawn_signs` DISABLE KEYS */; +/*!40000 ALTER TABLE `raw_spawn_signs` ENABLE KEYS */; +UNLOCK TABLES; + +-- +-- Table structure for table `raw_spawn_unknowns` +-- + +DROP TABLE IF EXISTS `raw_spawn_unknowns`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `raw_spawn_unknowns` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `spawn_id` int(10) unsigned NOT NULL DEFAULT '0', + `field` varchar(32) COLLATE latin1_general_ci NOT NULL, + `index` smallint(5) unsigned NOT NULL DEFAULT '0', + `value` varchar(50) COLLATE latin1_general_ci NOT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `NewIndex` (`spawn_id`,`field`,`index`) +) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Dumping data for table `raw_spawn_unknowns` +-- + +LOCK TABLES `raw_spawn_unknowns` WRITE; +/*!40000 ALTER TABLE `raw_spawn_unknowns` DISABLE KEYS */; +/*!40000 ALTER TABLE `raw_spawn_unknowns` ENABLE KEYS */; +UNLOCK TABLES; + +-- +-- Table structure for table `raw_spawn_widgets` +-- + +DROP TABLE IF EXISTS `raw_spawn_widgets`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `raw_spawn_widgets` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `spawn_id` int(10) unsigned NOT NULL DEFAULT '0', + `unknown1` float NOT NULL DEFAULT '0', + `unknown2` float NOT NULL DEFAULT '0', + `unknown3` float NOT NULL DEFAULT '0', + `widget_id` int(10) unsigned NOT NULL DEFAULT '0', + `widget_x` float NOT NULL DEFAULT '0', + `widget_y` float NOT NULL DEFAULT '0', + `widget_z` float NOT NULL DEFAULT '0', + `include_heading` tinyint(3) unsigned NOT NULL DEFAULT '1', + `include_location` tinyint(3) unsigned NOT NULL DEFAULT '1', + `icon` tinyint(3) unsigned NOT NULL DEFAULT '4', + `type` enum('Generic','Door') COLLATE latin1_general_ci NOT NULL DEFAULT 'Generic', + `language_type` tinyint(3) unsigned NOT NULL DEFAULT '1', + PRIMARY KEY (`id`), + UNIQUE KEY `NewIndex` (`spawn_id`,`language_type`) +) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Dumping data for table `raw_spawn_widgets` +-- + +LOCK TABLES `raw_spawn_widgets` WRITE; +/*!40000 ALTER TABLE `raw_spawn_widgets` DISABLE KEYS */; +/*!40000 ALTER TABLE `raw_spawn_widgets` ENABLE KEYS */; +UNLOCK TABLES; + +-- +-- Table structure for table `raw_spawns` +-- + +DROP TABLE IF EXISTS `raw_spawns`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `raw_spawns` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `spawn_id` int(10) unsigned NOT NULL DEFAULT '0', + `spawn_group_id` int(10) NOT NULL DEFAULT '0', + `spawn_packet_type` varchar(32) COLLATE latin1_general_ci NOT NULL DEFAULT 'Normal', + `zone_id` int(10) unsigned NOT NULL DEFAULT '0', + `x` float NOT NULL DEFAULT '0', + `y` float NOT NULL DEFAULT '0', + `z` float NOT NULL DEFAULT '0', + `heading` float NOT NULL DEFAULT '0', + `pitch` float unsigned NOT NULL DEFAULT '0', + `roll` float unsigned NOT NULL DEFAULT '0', + `grid_id` int(10) unsigned NOT NULL DEFAULT '0', + `language_type` tinyint(3) unsigned NOT NULL DEFAULT '1', + `populate_spawn_id` int(10) unsigned NOT NULL DEFAULT '0', + `processed` tinyint(3) unsigned NOT NULL DEFAULT '0', + `log_file` varchar(255) COLLATE latin1_general_ci DEFAULT '', + `data_version` smallint(5) unsigned NOT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `NewIndex` (`spawn_id`,`x`,`y`,`z`,`grid_id`,`zone_id`) +) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Dumping data for table `raw_spawns` +-- + +LOCK TABLES `raw_spawns` WRITE; +/*!40000 ALTER TABLE `raw_spawns` DISABLE KEYS */; +/*!40000 ALTER TABLE `raw_spawns` ENABLE KEYS */; +UNLOCK TABLES; + +-- +-- Table structure for table `raw_spell_details` +-- + +DROP TABLE IF EXISTS `raw_spell_details`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `raw_spell_details` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `spell_id` int(10) unsigned NOT NULL DEFAULT '0', + `tier` tinyint(3) unsigned NOT NULL DEFAULT '0', + `health_req` smallint(5) unsigned NOT NULL DEFAULT '0', + `health_upkeep` smallint(5) unsigned NOT NULL DEFAULT '0', + `power_req` smallint(5) unsigned NOT NULL DEFAULT '0', + `power_upkeep` smallint(5) unsigned NOT NULL DEFAULT '0', + `req_concentration` smallint(5) unsigned NOT NULL DEFAULT '0', + `cast_time` smallint(5) unsigned NOT NULL DEFAULT '0', + `recovery` smallint(5) unsigned NOT NULL DEFAULT '0', + `recast` float unsigned NOT NULL DEFAULT '0', + `radius` float unsigned NOT NULL DEFAULT '0', + `max_aoe_targets` smallint(5) unsigned NOT NULL DEFAULT '0', + `min_range` int(10) unsigned NOT NULL DEFAULT '0', + `range` float unsigned NOT NULL DEFAULT '0', + `duration1` int(10) unsigned NOT NULL DEFAULT '0', + `duration2` int(10) unsigned NOT NULL DEFAULT '0', + `unknown9` tinyint(3) unsigned NOT NULL DEFAULT '0', + `unknown10` smallint(5) unsigned NOT NULL DEFAULT '0', + `resistibility` float NOT NULL DEFAULT '0', + `hit_bonus` float NOT NULL DEFAULT '0', + `language_type` tinyint(3) unsigned NOT NULL DEFAULT '0', + `log_file` varchar(255) COLLATE latin1_general_ci DEFAULT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `NewIndex1` (`spell_id`,`tier`) +) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Dumping data for table `raw_spell_details` +-- + +LOCK TABLES `raw_spell_details` WRITE; +/*!40000 ALTER TABLE `raw_spell_details` DISABLE KEYS */; +/*!40000 ALTER TABLE `raw_spell_details` ENABLE KEYS */; +UNLOCK TABLES; + +-- +-- Table structure for table `raw_spell_effects` +-- + +DROP TABLE IF EXISTS `raw_spell_effects`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `raw_spell_effects` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `spell_id` int(10) unsigned NOT NULL DEFAULT '0', + `tier` tinyint(3) unsigned NOT NULL DEFAULT '0', + `index` tinyint(3) unsigned NOT NULL DEFAULT '0', + `subbulletflag` tinyint(3) unsigned NOT NULL DEFAULT '0', + `effect` varchar(512) COLLATE latin1_general_ci NOT NULL, + `percentage` tinyint(3) unsigned NOT NULL DEFAULT '100', + `language_type` tinyint(3) unsigned NOT NULL DEFAULT '0', + `log_file` varchar(255) COLLATE latin1_general_ci DEFAULT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `NewIndex1` (`spell_id`,`tier`,`index`) +) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Dumping data for table `raw_spell_effects` +-- + +LOCK TABLES `raw_spell_effects` WRITE; +/*!40000 ALTER TABLE `raw_spell_effects` DISABLE KEYS */; +/*!40000 ALTER TABLE `raw_spell_effects` ENABLE KEYS */; +UNLOCK TABLES; + +-- +-- Table structure for table `raw_spell_levels` +-- + +DROP TABLE IF EXISTS `raw_spell_levels`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `raw_spell_levels` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `spell_id` int(10) unsigned NOT NULL, + `tier` tinyint(3) unsigned NOT NULL DEFAULT '0', + `adventure_class_id` tinyint(3) unsigned NOT NULL DEFAULT '0', + `tradeskill_class_id` tinyint(3) unsigned NOT NULL DEFAULT '0', + `spell_level` smallint(5) unsigned NOT NULL DEFAULT '0', + `language_type` tinyint(3) unsigned NOT NULL DEFAULT '0', + `log_file` varchar(255) COLLATE latin1_general_ci DEFAULT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `NewIndex1` (`spell_id`,`tier`,`adventure_class_id`,`tradeskill_class_id`) +) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Dumping data for table `raw_spell_levels` +-- + +LOCK TABLES `raw_spell_levels` WRITE; +/*!40000 ALTER TABLE `raw_spell_levels` DISABLE KEYS */; +/*!40000 ALTER TABLE `raw_spell_levels` ENABLE KEYS */; +UNLOCK TABLES; + +-- +-- Table structure for table `raw_spell_visuals` +-- + +DROP TABLE IF EXISTS `raw_spell_visuals`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `raw_spell_visuals` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `spell_id` int(10) unsigned NOT NULL, + `num_targets` tinyint(3) unsigned NOT NULL DEFAULT '0', + `spell_visual1` smallint(5) unsigned NOT NULL DEFAULT '0', + `spell_visual2` smallint(5) unsigned NOT NULL DEFAULT '0', + `cast_time` float unsigned NOT NULL DEFAULT '0', + `spell_level` smallint(5) unsigned NOT NULL DEFAULT '0', + `spell_tier` tinyint(3) unsigned NOT NULL DEFAULT '0', + `data_version` smallint(5) unsigned NOT NULL DEFAULT '0', + `log_file` varchar(255) COLLATE latin1_general_ci DEFAULT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `VisIDX` (`spell_id`,`spell_visual1`,`spell_visual2`) +) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Dumping data for table `raw_spell_visuals` +-- + +LOCK TABLES `raw_spell_visuals` WRITE; +/*!40000 ALTER TABLE `raw_spell_visuals` DISABLE KEYS */; +/*!40000 ALTER TABLE `raw_spell_visuals` ENABLE KEYS */; +UNLOCK TABLES; + +-- +-- Table structure for table `raw_spells` +-- + +DROP TABLE IF EXISTS `raw_spells`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `raw_spells` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `spell_id` int(10) unsigned NOT NULL DEFAULT '0', + `aa_spell_id` int(10) unsigned NOT NULL DEFAULT '0', + `tier` tinyint(3) unsigned NOT NULL DEFAULT '0', + `name` varchar(128) COLLATE latin1_general_ci DEFAULT '', + `description` varchar(512) COLLATE latin1_general_ci DEFAULT '', + `icon` smallint(5) unsigned NOT NULL DEFAULT '0', + `icon2` smallint(5) unsigned NOT NULL DEFAULT '0', + `icontype` smallint(5) unsigned NOT NULL DEFAULT '0', + `type` tinyint(3) unsigned NOT NULL DEFAULT '0', + `class_skill` int(10) unsigned NOT NULL DEFAULT '0', + `mastery_skill` int(10) unsigned NOT NULL DEFAULT '0', + `min_class_skill_req` mediumint(8) unsigned NOT NULL DEFAULT '0', + `spell_text_color` int(10) unsigned NOT NULL DEFAULT '0', + `friendly_spell` smallint(5) unsigned NOT NULL DEFAULT '0', + `display_spell_tier` tinyint(3) unsigned NOT NULL DEFAULT '0', + `duration_flag` tinyint(3) unsigned NOT NULL DEFAULT '0', + `target` tinyint(3) unsigned NOT NULL DEFAULT '0', + `group_spell` tinyint(3) unsigned NOT NULL DEFAULT '0', + `spell_visual` int(10) unsigned NOT NULL DEFAULT '0', + `success_message` varchar(512) COLLATE latin1_general_ci DEFAULT NULL, + `effect_message` varchar(512) COLLATE latin1_general_ci DEFAULT NULL, + `unknown1` tinyint(3) unsigned NOT NULL DEFAULT '0', + `can_effect_raid` tinyint(3) unsigned NOT NULL DEFAULT '0', + `affect_only_group_members` tinyint(3) unsigned NOT NULL DEFAULT '0', + `aa_unknown` tinyint(3) unsigned NOT NULL DEFAULT '0', + `aa_unknown2` tinyint(3) unsigned NOT NULL DEFAULT '0', + `uses_remaining` smallint(5) unsigned NOT NULL DEFAULT '0', + `damage_remaining` smallint(5) unsigned NOT NULL DEFAULT '0', + `unknown3` tinyint(3) unsigned NOT NULL DEFAULT '0', + `unknown4` tinyint(3) unsigned NOT NULL DEFAULT '0', + `language_type` tinyint(3) unsigned NOT NULL DEFAULT '0', + `log_file` varchar(255) COLLATE latin1_general_ci DEFAULT NULL, + `data_version` smallint(5) unsigned NOT NULL, + `processed` tinyint(3) unsigned NOT NULL DEFAULT '0', + PRIMARY KEY (`id`), + UNIQUE KEY `SpellLanguageTypeIDX` (`spell_id`,`tier`) +) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Dumping data for table `raw_spells` +-- + +LOCK TABLES `raw_spells` WRITE; +/*!40000 ALTER TABLE `raw_spells` DISABLE KEYS */; +/*!40000 ALTER TABLE `raw_spells` ENABLE KEYS */; +UNLOCK TABLES; + +-- +-- Table structure for table `raw_spells_aa` +-- + +DROP TABLE IF EXISTS `raw_spells_aa`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `raw_spells_aa` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `aa_spell_id` int(10) unsigned NOT NULL DEFAULT '0', + `spell_id` int(10) unsigned NOT NULL DEFAULT '0', + `tier` tinyint(3) unsigned NOT NULL DEFAULT '0', + `unknown` smallint(5) unsigned NOT NULL DEFAULT '0', + `icon` smallint(5) unsigned NOT NULL DEFAULT '0', + `icon2` smallint(5) unsigned NOT NULL DEFAULT '0', + `current_rank` tinyint(3) unsigned NOT NULL DEFAULT '0', + `max_rank` tinyint(3) unsigned NOT NULL DEFAULT '0', + `rank_cost` tinyint(3) unsigned NOT NULL DEFAULT '0', + `unknown2` tinyint(3) unsigned NOT NULL DEFAULT '0', + `language_type` tinyint(3) unsigned NOT NULL DEFAULT '0', + `log_file` varchar(255) COLLATE latin1_general_ci DEFAULT '', + PRIMARY KEY (`id`), + UNIQUE KEY `NewIndex1` (`aa_spell_id`,`language_type`) +) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Dumping data for table `raw_spells_aa` +-- + +LOCK TABLES `raw_spells_aa` WRITE; +/*!40000 ALTER TABLE `raw_spells_aa` DISABLE KEYS */; +/*!40000 ALTER TABLE `raw_spells_aa` ENABLE KEYS */; +UNLOCK TABLES; + +-- +-- Table structure for table `raw_titles` +-- + +DROP TABLE IF EXISTS `raw_titles`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `raw_titles` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `title_name` varchar(250) COLLATE latin1_general_ci DEFAULT '', + `prefix` tinyint(3) unsigned NOT NULL DEFAULT '0', + `data_version` smallint(5) unsigned NOT NULL DEFAULT '0', + `log_file` varchar(250) COLLATE latin1_general_ci DEFAULT '', + PRIMARY KEY (`id`), + UNIQUE KEY `NewIndex` (`title_name`) +) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Dumping data for table `raw_titles` +-- + +LOCK TABLES `raw_titles` WRITE; +/*!40000 ALTER TABLE `raw_titles` DISABLE KEYS */; +/*!40000 ALTER TABLE `raw_titles` ENABLE KEYS */; +UNLOCK TABLES; + +-- +-- Table structure for table `raw_traditions` +-- + +DROP TABLE IF EXISTS `raw_traditions`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `raw_traditions` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `tradition_id` int(10) unsigned NOT NULL DEFAULT '0', + `selection` tinyint(3) unsigned NOT NULL DEFAULT '0', + `icon` smallint(5) unsigned NOT NULL DEFAULT '0', + `icon2` smallint(5) unsigned NOT NULL DEFAULT '0', + `unknown` int(10) unsigned NOT NULL DEFAULT '0', + `name` varchar(250) COLLATE latin1_general_ci DEFAULT '', + `section_name` varchar(250) COLLATE latin1_general_ci DEFAULT '', + `data_version` smallint(5) unsigned NOT NULL, + `language_type` tinyint(3) unsigned NOT NULL DEFAULT '0', + `log_file` varchar(250) COLLATE latin1_general_ci DEFAULT '', + PRIMARY KEY (`id`), + UNIQUE KEY `tradition_id` (`tradition_id`) +) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Dumping data for table `raw_traditions` +-- + +LOCK TABLES `raw_traditions` WRITE; +/*!40000 ALTER TABLE `raw_traditions` DISABLE KEYS */; +/*!40000 ALTER TABLE `raw_traditions` ENABLE KEYS */; +UNLOCK TABLES; + +-- +-- Table structure for table `raw_trainings` +-- + +DROP TABLE IF EXISTS `raw_trainings`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `raw_trainings` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `level` tinyint(3) unsigned NOT NULL DEFAULT '0', + `spell_line` tinyint(3) unsigned NOT NULL DEFAULT '0', + `icon_0` smallint(5) unsigned NOT NULL DEFAULT '0', + `icon2_0` smallint(5) unsigned NOT NULL DEFAULT '0', + `training_id_0` int(10) unsigned NOT NULL DEFAULT '0', + `unknown_0` int(10) unsigned NOT NULL DEFAULT '0', + `name_0` varchar(250) COLLATE latin1_general_ci DEFAULT NULL, + `icon_1` smallint(5) unsigned NOT NULL DEFAULT '0', + `icon2_1` smallint(5) unsigned NOT NULL DEFAULT '0', + `training_id_1` int(10) unsigned NOT NULL DEFAULT '0', + `unknown_1` int(10) unsigned NOT NULL DEFAULT '0', + `name_1` varchar(250) COLLATE latin1_general_ci DEFAULT '', + `icon_2` smallint(5) unsigned NOT NULL DEFAULT '0', + `icon2_2` smallint(5) unsigned NOT NULL DEFAULT '0', + `training_id_2` int(10) unsigned NOT NULL DEFAULT '0', + `unknown_2` int(10) unsigned NOT NULL DEFAULT '0', + `name_2` varchar(250) COLLATE latin1_general_ci DEFAULT '', + `icon_3` smallint(5) unsigned NOT NULL DEFAULT '0', + `icon2_3` smallint(5) unsigned NOT NULL DEFAULT '0', + `training_id_3` int(10) unsigned NOT NULL DEFAULT '0', + `unknown_3` int(10) unsigned NOT NULL DEFAULT '0', + `name_3` varchar(250) COLLATE latin1_general_ci DEFAULT '', + `icon_4` smallint(5) unsigned NOT NULL DEFAULT '0', + `icon2_4` smallint(5) unsigned NOT NULL DEFAULT '0', + `training_id_4` int(10) unsigned NOT NULL DEFAULT '0', + `unknown_4` int(10) unsigned NOT NULL DEFAULT '0', + `name_4` varchar(250) COLLATE latin1_general_ci DEFAULT '', + `data_version` smallint(5) unsigned NOT NULL, + `language_type` tinyint(3) unsigned NOT NULL DEFAULT '0', + `log_file` varchar(250) COLLATE latin1_general_ci DEFAULT '', + PRIMARY KEY (`id`), + UNIQUE KEY `NewIndex1` (`training_id_0`,`training_id_1`,`training_id_2`,`training_id_3`,`training_id_4`) +) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Dumping data for table `raw_trainings` +-- + +LOCK TABLES `raw_trainings` WRITE; +/*!40000 ALTER TABLE `raw_trainings` DISABLE KEYS */; +/*!40000 ALTER TABLE `raw_trainings` ENABLE KEYS */; +UNLOCK TABLES; + +-- +-- Table structure for table `raw_traits` +-- + +DROP TABLE IF EXISTS `raw_traits`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `raw_traits` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `level` tinyint(3) unsigned NOT NULL DEFAULT '0', + `selection` tinyint(3) unsigned NOT NULL DEFAULT '0', + `icon_0` smallint(5) unsigned NOT NULL DEFAULT '0', + `icon2_0` smallint(5) unsigned NOT NULL DEFAULT '0', + `trait_id_0` int(10) unsigned NOT NULL DEFAULT '0', + `unknown_0` int(10) unsigned NOT NULL DEFAULT '0', + `name_0` varchar(250) COLLATE latin1_general_ci DEFAULT NULL, + `icon_1` smallint(5) unsigned NOT NULL DEFAULT '0', + `icon2_1` smallint(5) unsigned NOT NULL DEFAULT '0', + `trait_id_1` int(10) unsigned NOT NULL DEFAULT '0', + `unknown_1` int(10) unsigned NOT NULL DEFAULT '0', + `name_1` varchar(250) COLLATE latin1_general_ci DEFAULT '', + `icon_2` smallint(5) unsigned NOT NULL DEFAULT '0', + `icon2_2` smallint(5) unsigned NOT NULL DEFAULT '0', + `trait_id_2` int(10) unsigned NOT NULL DEFAULT '0', + `unknown_2` int(10) unsigned NOT NULL DEFAULT '0', + `name_2` varchar(250) COLLATE latin1_general_ci DEFAULT '', + `icon_3` smallint(5) unsigned NOT NULL DEFAULT '0', + `icon2_3` smallint(5) unsigned NOT NULL DEFAULT '0', + `trait_id_3` int(10) unsigned NOT NULL DEFAULT '0', + `unknown_3` int(10) unsigned NOT NULL DEFAULT '0', + `name_3` varchar(250) COLLATE latin1_general_ci DEFAULT '', + `icon_4` smallint(5) unsigned NOT NULL DEFAULT '0', + `icon2_4` smallint(5) unsigned NOT NULL DEFAULT '0', + `trait_id_4` int(10) unsigned NOT NULL DEFAULT '0', + `unknown_4` int(10) unsigned NOT NULL DEFAULT '0', + `name_4` varchar(250) COLLATE latin1_general_ci DEFAULT '', + `data_version` smallint(5) unsigned NOT NULL, + `language_type` tinyint(3) unsigned NOT NULL DEFAULT '0', + `log_file` varchar(250) COLLATE latin1_general_ci DEFAULT '', + PRIMARY KEY (`id`), + UNIQUE KEY `NewIndex1` (`trait_id_0`,`trait_id_1`,`trait_id_2`,`trait_id_3`,`trait_id_4`) +) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Dumping data for table `raw_traits` +-- + +LOCK TABLES `raw_traits` WRITE; +/*!40000 ALTER TABLE `raw_traits` DISABLE KEYS */; +/*!40000 ALTER TABLE `raw_traits` ENABLE KEYS */; +UNLOCK TABLES; + +-- +-- Table structure for table `raw_zone_points` +-- + +DROP TABLE IF EXISTS `raw_zone_points`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `raw_zone_points` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `widget_id` int(10) unsigned NOT NULL DEFAULT '0', + `zone_name` varchar(250) COLLATE latin1_general_ci DEFAULT '', + `x` float NOT NULL DEFAULT '0', + `y` float NOT NULL DEFAULT '0', + `z` float NOT NULL DEFAULT '0', + `heading` float NOT NULL DEFAULT '0', + PRIMARY KEY (`id`), + UNIQUE KEY `NewIndex` (`widget_id`) +) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Dumping data for table `raw_zone_points` +-- + +LOCK TABLES `raw_zone_points` WRITE; +/*!40000 ALTER TABLE `raw_zone_points` DISABLE KEYS */; +/*!40000 ALTER TABLE `raw_zone_points` ENABLE KEYS */; +UNLOCK TABLES; + +-- +-- Table structure for table `raw_zones` +-- + +DROP TABLE IF EXISTS `raw_zones`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `raw_zones` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `zone_file` varchar(250) COLLATE latin1_general_ci NOT NULL, + `zone_desc` varchar(250) COLLATE latin1_general_ci NOT NULL, + `zone_key` varchar(250) COLLATE latin1_general_ci NOT NULL, + `location_x` float NOT NULL DEFAULT '0', + `location_y` float NOT NULL DEFAULT '0', + `location_z` float NOT NULL DEFAULT '0', + PRIMARY KEY (`id`), + UNIQUE KEY `NewIndex` (`zone_file`,`zone_desc`) +) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Dumping data for table `raw_zones` +-- + +LOCK TABLES `raw_zones` WRITE; +/*!40000 ALTER TABLE `raw_zones` DISABLE KEYS */; +/*!40000 ALTER TABLE `raw_zones` 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 */; +/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */; + +-- Dump completed on 2013-09-25 4:53:13 diff --git a/EQ2/devtools/PacketParser/ParserStructs/ItemStructs.xml b/EQ2/devtools/PacketParser/ParserStructs/ItemStructs.xml new file mode 100644 index 000000000..6b284ac8d --- /dev/null +++ b/EQ2/devtools/PacketParser/ParserStructs/ItemStructs.xml @@ -0,0 +1,2061 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/EQ2/devtools/PacketParser/ParserStructs/SpawnStructs.xml b/EQ2/devtools/PacketParser/ParserStructs/SpawnStructs.xml new file mode 100644 index 000000000..38e8b7361 --- /dev/null +++ b/EQ2/devtools/PacketParser/ParserStructs/SpawnStructs.xml @@ -0,0 +1,1258 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/EQ2/devtools/PacketParser/ParserStructs/WorldStructs.xml b/EQ2/devtools/PacketParser/ParserStructs/WorldStructs.xml new file mode 100644 index 000000000..562b006e5 --- /dev/null +++ b/EQ2/devtools/PacketParser/ParserStructs/WorldStructs.xml @@ -0,0 +1,5405 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +- + + + + + + + + + + + + + + - + + + + + - + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/EQ2/devtools/PacketParser/Readme.txt b/EQ2/devtools/PacketParser/Readme.txt new file mode 100644 index 000000000..7624c0ad2 --- /dev/null +++ b/EQ2/devtools/PacketParser/Readme.txt @@ -0,0 +1,183 @@ +################################ +# EQ2Emulator PacketParser.exe # +################################ + +Contents +-------- + +1. Legal and Disclaimers +2. What is PacketParser.exe? +3. Before you begin +4. Parsing your logs +5. Populating your EQ2Emulator database +6. Conclusion + + + +1. Legal and Disclaimers +======================================= +There is nothing "Legal" or "Illegal" about using this tool as it is licensed under GPL, so +don't hack it, reverse-engineer it, and re-release it calling it your own great tool. The +only thing I want to really emphasize here is, if you use this tool to parse logs and populate +your database, YOU ARE 100% RESPONSIBLE FOR THE OUTCOME. + +In no way, shape, or form is EQ2Emulator.net, developers, or database designers responsible +for you losing data, or encountering an inability to parse and populate properly. This tool, +like every other aspect of EQ2Emulator, is in a constant state of change and update, and at +times will cease to function. However, it is not a high priority for the EQ2Emulator team to +get it working again. + +In other words, be patient, report problems in a mature, friendly, +respectful manner, and the problems will be resolved and a new parser package released. + + + +2. What is PacketParser.exe? +======================================= +PacketParser.exe is the small utility that analyzes your collected packets from EQ2 Live game +and turns them into "raw" data for use in building your world. This tool is only needed if you +choose to build worlds based on the EQ2 Live experience. You can use this tool to parse Spawns, +Items, Merchant lists, Factions, Spell and Collection data, and Quest/Conversation from the live +game, with additional support added during the EQ2Emulator Alpha development cycle. + +In order to use PacketParser.exe, you of course need to have collected a log from the live game. +You can collect the game data yourself using EQ2PacketCollector.exe - a separate tool (and thus +documented separately). EQ2PacketCollector.exe is no longer available freely to the public, but +you may PM John Adams or LethalEncounter on the EQ2Emulator.net forums to receive a copy of the +program. + + + +3. Before You Begin +======================================= +Before you can parse a packet collect, you should have a local instance of MySQL 5.x installed. +You can have MySQL on your Windows XP workstation, or somewhere on your network - it does not have +to be on the same machine... but your database should not be located via a WAN or over the internet. +It would be far too slow! + +Create a folder, example C:\eq2parser, and put the following files into that folder: + +Required: +- PacketParser.exe +- zlib.dll (downloadable package - search for it on the internet) +- WorldStructs.xml +- SpawnStructs.xml +- ItemStructs.xml +- parser_db.ini +- Parser DB.sql (not needed except to source in raw DB structures) + +Optional (if you wanted to script some mysql actions) +- parse-all.bat +- mysql.exe +- mysqldump.exe + + +MySQL Database setup: +Assuming you use SQLYog or some other MySQL GUI Tools (google them, they are your friend), you must +connect to your MySQL instance and create a blank database. Refer to MySQL documentation on creating +a database. Example database name for the parser: eq2_rawdata. + +"Source" in the included Parser_DB.sql file - by this we mean open this Query and execute it so it +will build the database structure required by PacketParser.exe - without this, you are going nowhere. +If you encounter errors, you need to explore how to get around them as this is not a lesson in becoming +a Database Administrator. :) + +Once your database is created and you see tables like "raw_spawns", "raw_items", "raw_spells" etc, you +are almost ready to go. + +NOTE: Since PacketParser.exe is now a "controlled release", updates to both the EXE and Parser DB.sql +will usually be posted in In-House Tools, under PacketParser. + +parser_db.ini: +Edit parser_db.ini to reflect your database settings. Here is an example: + +[Database] +host=localhost +user=root +password=sekr3t +database=eq2_rawdata + +host: the IP or FQDN (fully qualified domain name) of your MySQL server. If it is on the same machine, +use "localhost" + +user/password: This is a MySQL account that has SELECT, INSERT, UPDATE, and DELETE rights to your +eq2_rawdata database. + +database: The name of your raw database - in my example, eq2_rawdata. + + + +4. Parsing Your Logs +======================================= +Included in your PacketParser package is a sample BATCH file that is designed to identify *.log files +in the current directory and execute the PacketParser.exe (with parameters) on each file individually. +Once the parser is done with the file, it will move it off to a "Done" folder. This is to prevent the +same log from being re-parsed should you have to stop and restart the job. + +Move your log(s) into your C:\eq2parser directory with your other parser files, and simply run the +included "parse-all.bat" file. This batch files is executing the following command: + +- PacketParser.exe -spawns -items -spells -quests -factions -collections {log_file} + +You can run the command-line version of the PacketParser.exe yourself - you do not need to use the +batch file. Run PacketParser.exe and hit ENTER to see a list of command-line options. + +Example, if you just want to parse Spell information from your logs, run: + +- PacketParser.exe -spells {log_file} + +* Replace {log_file} with the name of your collected log (ie., EQ2PacketLog.log) + + +You can stack the command-line options as many or as few as you like. There has to be at least one, +and for PARSING logs, -populate is not valid (see next chapter). + +NOTE: The parse-all.bat file is setup to output parser data to a parser_log.txt file. This is the +troubleshooting information we would need to see if you are having problems. Simply post your problem +and attach that text file. If it is larger than 10kb, you probably should ZIP/RAR it first. + + + +5. Populating your EQ2Emulator Database +======================================= +During the 0.7.0 development cycle of EQ2Emulator, some critical changes have been made to the database +structures regarding Items, Spawns, Spells and Quests. Take note of these as you continue populating +your worlds using our tools. Recently, major changes to the Spawns structure broke the -populate +functionality, but a new parser was released to resolve this issue. + +To populate your EQ2Emulator World database, simply run the following command: + +PacketParser.exe -populate {eq2world_db} + +* Replace {eq2world_db} with the name of your database that EQ2World.exe uses + +The -populate command will move all raw Spawn data from parser DB to World DB for use in your world. + +There are a few other commands currently available: + -loaditems - this will populate the Items tables in your World DB from Raw data + -loadfactions - this will populate the Factions tables in your World DB from Raw data + + + +6. Conclusion +======================================= +There is literally tons of RAW data coming from packet logs, some we do not even utilize yet in the -populate +commands of Parser. Examples of some of this data is: + + raw_dialogs : These are the conversations you have with NPCs in game, with the clickable option buttons + raw_conversations : These are the casual shouts NPCs give as you pass by or Hail them - no interaction + raw_map_data : You should update your map_data table in your World DB with newly parsed raw_map_data as needed + raw_merchant_items : As you parse Items, if they came from a merchant window, this table shows you what spawn_id had what item_id + raw_quests : This data is what we use to build LUA scripts for quests - currently no automation available + raw_sounds : These are your door squeaks and other sound effects in game, mapped to their raw_spawn ID + raw_spells : This data is used to build our Spells lists, or update existing information with new captured data + raw_zone_points : This is an attempt for the collector/parser to locate any known zone-in-points when you zone while collecting (not always accurate) + +There is so much more we can gleen from our logs we hvae yet to discover. If you feel like helping identify +some of this data, feel free to join in on the conversations in Development and offer your help. + + +Happy World Building! + + +-John Adams diff --git a/EQ2/devtools/PacketParser/old_files/ItemStructs.xml b/EQ2/devtools/PacketParser/old_files/ItemStructs.xml new file mode 100644 index 000000000..d7b303934 --- /dev/null +++ b/EQ2/devtools/PacketParser/old_files/ItemStructs.xml @@ -0,0 +1,1717 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/EQ2/devtools/PacketParser/old_files/ItemStructs_Parser.xml b/EQ2/devtools/PacketParser/old_files/ItemStructs_Parser.xml new file mode 100644 index 000000000..1afe07d76 --- /dev/null +++ b/EQ2/devtools/PacketParser/old_files/ItemStructs_Parser.xml @@ -0,0 +1,2208 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/EQ2/devtools/PacketParser/old_files/MerchantItemStructs.xml b/EQ2/devtools/PacketParser/old_files/MerchantItemStructs.xml new file mode 100644 index 000000000..0a5dfab09 --- /dev/null +++ b/EQ2/devtools/PacketParser/old_files/MerchantItemStructs.xml @@ -0,0 +1,571 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/EQ2/devtools/PacketParser/old_files/ParserStructs.xml b/EQ2/devtools/PacketParser/old_files/ParserStructs.xml new file mode 100644 index 000000000..5d4f137bd --- /dev/null +++ b/EQ2/devtools/PacketParser/old_files/ParserStructs.xml @@ -0,0 +1,3434 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/EQ2/devtools/PacketParser/old_files/WS_Updates.xml b/EQ2/devtools/PacketParser/old_files/WS_Updates.xml new file mode 100644 index 000000000..f59a450e2 --- /dev/null +++ b/EQ2/devtools/PacketParser/old_files/WS_Updates.xml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/EQ2/devtools/PacketParser/old_files/WorldStructs.xml b/EQ2/devtools/PacketParser/old_files/WorldStructs.xml new file mode 100644 index 000000000..3ad4f1d58 --- /dev/null +++ b/EQ2/devtools/PacketParser/old_files/WorldStructs.xml @@ -0,0 +1,3546 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/EQ2/devtools/PacketParser/old_files/WorldStructsDev.xml b/EQ2/devtools/PacketParser/old_files/WorldStructsDev.xml new file mode 100644 index 000000000..92fca4ab1 --- /dev/null +++ b/EQ2/devtools/PacketParser/old_files/WorldStructsDev.xml @@ -0,0 +1,4073 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/EQ2/devtools/PacketParser/parse all.bat b/EQ2/devtools/PacketParser/parse all.bat new file mode 100644 index 000000000..0f79afb76 --- /dev/null +++ b/EQ2/devtools/PacketParser/parse all.bat @@ -0,0 +1,10 @@ +@echo off +for /f "delims=^" %%a in ('dir /b *.log') do call :process "%%a" +PacketParser.exe -populate eq2_test +PAUSE +goto :eof + +:process +PacketParser.exe -spawns -spells -items %1%2 +move %1 Parsed + diff --git a/EQ2/devtools/PacketParser/parser_db.ini b/EQ2/devtools/PacketParser/parser_db.ini new file mode 100644 index 000000000..2a252c51b --- /dev/null +++ b/EQ2/devtools/PacketParser/parser_db.ini @@ -0,0 +1,5 @@ +[Database] +host=HOST +user=USER +password=PASSWORD +database=DATABASE diff --git a/EQ2/devtools/PacketParser/sql_updates/AchievementUpdates SQL.txt b/EQ2/devtools/PacketParser/sql_updates/AchievementUpdates SQL.txt new file mode 100644 index 000000000..e5ae3db01 --- /dev/null +++ b/EQ2/devtools/PacketParser/sql_updates/AchievementUpdates SQL.txt @@ -0,0 +1,20 @@ +CREATE TABLE `raw_achievement_updates` ( + `id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT, + `achievement_id` INT(10) UNSIGNED NOT NULL DEFAULT '0', + `completed_date` INT(10) UNSIGNED NOT NULL DEFAULT '0', + `num_items` TINYINT(3) UNSIGNED NOT NULL DEFAULT '0', + PRIMARY KEY (`id`), + UNIQUE INDEX `achievement_id` (`achievement_id`) +) +COLLATE='latin1_swedish_ci' +ENGINE=MyISAM; + +CREATE TABLE `raw_achievement_update_items` ( + `id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT, + `achievement_id` INT(10) UNSIGNED NOT NULL DEFAULT '0', + `item_update` INT(10) UNSIGNED NOT NULL DEFAULT '0', + PRIMARY KEY (`id`) +) +COLLATE='latin1_swedish_ci' +ENGINE=MyISAM; + diff --git a/EQ2/devtools/PacketParser/sql_updates/Conversation Fix.sql b/EQ2/devtools/PacketParser/sql_updates/Conversation Fix.sql new file mode 100644 index 000000000..b825d1cfb --- /dev/null +++ b/EQ2/devtools/PacketParser/sql_updates/Conversation Fix.sql @@ -0,0 +1 @@ +ALTER TABLE `raw_conversations` DROP INDEX `NewIndex`, ADD UNIQUE `NewIndex` (spawn_name, `sound_file`, `chat_text`(200)); \ No newline at end of file diff --git a/EQ2/devtools/PacketParser/sql_updates/EQ2ParserDB SQL Updates_v0.1.1.txt b/EQ2/devtools/PacketParser/sql_updates/EQ2ParserDB SQL Updates_v0.1.1.txt new file mode 100644 index 000000000..b3e6d8e9b --- /dev/null +++ b/EQ2/devtools/PacketParser/sql_updates/EQ2ParserDB SQL Updates_v0.1.1.txt @@ -0,0 +1,69 @@ +ALTER TABLE raw_item_effects CHANGE column `name` `effect` VARCHAR(512) NOT NULL DEFAULT 'Unknown' AFTER `item_id`; +ALTER TABLE raw_item_effects DROP COLUMN `description`; +ALTER TABLE parser_stats ADD COLUMN `total_skills` SMALLINT(5) UNSIGNED NOT NULL DEFAULT '0' AFTER `new_books`; +ALTER TABLE parser_stats ADD COLUMN `unique_skills` SMALLINT(5) UNSIGNED NOT NULL DEFAULT '0' AFTER `total_skills`; +ALTER TABLE parser_stats ADD COLUMN `new_skills` SMALLINT(5) UNSIGNED NOT NULL DEFAULT '0' AFTER `unique_skills`; + +CREATE TABLE IF NOT EXISTS `raw_traits` ( + `id` int(10) unsigned NOT NULL auto_increment, + `level` tinyint(3) unsigned NOT NULL default '0', + `selection` tinyint(3) unsigned NOT NULL default '0', + `icon_0` smallint(5) unsigned NOT NULL default '0', + `icon2_0` smallint(5) unsigned NOT NULL default '0', + `trait_id_0` int(10) unsigned NOT NULL default '0', + `unknown_0` int(10) unsigned NOT NULL default '0', + `name_0` varchar(250) collate latin1_general_ci default NULL, + `icon_1` smallint(5) unsigned NOT NULL default '0', + `icon2_1` smallint(5) unsigned NOT NULL default '0', + `trait_id_1` int(10) unsigned NOT NULL default '0', + `unknown_1` int(10) unsigned NOT NULL default '0', + `name_1` varchar(250) collate latin1_general_ci default '', + `icon_2` smallint(5) unsigned NOT NULL default '0', + `icon2_2` smallint(5) unsigned NOT NULL default '0', + `trait_id_2` int(10) unsigned NOT NULL default '0', + `unknown_2` int(10) unsigned NOT NULL default '0', + `name_2` varchar(250) collate latin1_general_ci default '', + `icon_3` smallint(5) unsigned NOT NULL default '0', + `icon2_3` smallint(5) unsigned NOT NULL default '0', + `trait_id_3` int(10) unsigned NOT NULL default '0', + `unknown_3` int(10) unsigned NOT NULL default '0', + `name_3` varchar(250) collate latin1_general_ci default '', + `icon_4` smallint(5) unsigned NOT NULL default '0', + `icon2_4` smallint(5) unsigned NOT NULL default '0', + `trait_id_4` int(10) unsigned NOT NULL default '0', + `unknown_4` int(10) unsigned NOT NULL default '0', + `name_4` varchar(250) collate latin1_general_ci default '', + `data_version` smallint(5) unsigned NOT NULL, + `language_type` tinyint(3) unsigned NOT NULL default '0', + `log_file` varchar(250) collate latin1_general_ci default '', + PRIMARY KEY (`id`), + UNIQUE KEY `NewIndex1` (`trait_id_0`,`trait_id_1`,`trait_id_2`,`trait_id_3`,`trait_id_4`) +) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci ROW_FORMAT=DYNAMIC; + +CREATE TABLE IF NOT EXISTS `raw_skills` ( + `id` int(10) unsigned NOT NULL auto_increment, + `skill_id` int(10) unsigned NOT NULL default '0', + `short_name` varchar(32) default 'Unknown', + `name` varchar(255) default 'Unknown', + `description` varchar(255) default 'Unknown', + `data_version` smallint(5) NOT NULL default '0', + `log_file` varchar(250) NOT NULL, + PRIMARY KEY (`id`) +) ENGINE=MyISAM DEFAULT CHARSET=latin1; + +CREATE TABLE IF NOT EXISTS `raw_skills_current` ( + `id` int(10) unsigned NOT NULL auto_increment, + `skill_id` int(10) unsigned NOT NULL default '0', + `type` smallint(5) unsigned NOT NULL default '0', + `current_val` mediumint(7) unsigned NOT NULL default '0', + `base_val` mediumint(7) unsigned NOT NULL default '0', + `max_val` mediumint(7) unsigned NOT NULL default '0', + `skill_delta` mediumint(7) NOT NULL default '0', + `skill_delta2` mediumint(7) NOT NULL default '0', + `display_min` tinyint(3) unsigned NOT NULL default '0', + `display_max` tinyint(3) unsigned NOT NULL default '0', + `unknown` tinyint(3) unsigned NOT NULL default '0', + `data_version` smallint(5) unsigned NOT NULL default '0', + `log_file` varchar(250) NOT NULL, + PRIMARY KEY (`id`) +) ENGINE=MyISAM DEFAULT CHARSET=latin1; \ No newline at end of file diff --git a/EQ2/devtools/PacketParser/sql_updates/Item Updates.sql b/EQ2/devtools/PacketParser/sql_updates/Item Updates.sql new file mode 100644 index 000000000..254679fe9 --- /dev/null +++ b/EQ2/devtools/PacketParser/sql_updates/Item Updates.sql @@ -0,0 +1,11 @@ +ALTER TABLE `raw_items` ADD `offers_quest` VARCHAR(64) DEFAULT ' ' NOT NULL AFTER `set_name`; +ALTER TABLE `raw_items` ADD `part_of_quest` VARCHAR(64) DEFAULT ' ' NOT NULL AFTER `offers_quest`; +ALTER TABLE `raw_items` ADD `quest_unknown` tinyint unsigned DEFAULT '0' NOT NULL AFTER `part_of_quest`; +ALTER TABLE `raw_items` ADD `total_charges` smallint unsigned DEFAULT '0' NOT NULL AFTER `quest_unknown`; +ALTER TABLE `raw_items` ADD `recommended_level` smallint unsigned DEFAULT '0' NOT NULL AFTER `total_charges`; +ALTER TABLE `raw_items` ADD `required_level` smallint unsigned DEFAULT '0' NOT NULL AFTER `recommended_level`; +ALTER TABLE `raw_items` ADD `stack_size` smallint unsigned DEFAULT '0' NOT NULL AFTER `required_level`; +ALTER TABLE `raw_items` ADD `collectable` tinyint unsigned DEFAULT '0' NOT NULL AFTER `stack_size`; +ALTER TABLE `raw_items` ADD `adornment_description` VARCHAR(64) DEFAULT ' ' NOT NULL AFTER `collectable`; +ALTER TABLE `raw_items` CHANGE `item_type` `item_type` ENUM('Normal','Armor','Food','Bag','Weapon','Ranged','Shield','Spell','Recipe','Book','House','Thrown','Bauble','House Container','Adornment') DEFAULT 'Normal' NOT NULL; +ALTER TABLE `raw_items` ADD `adornment_description` VARCHAR(255) DEFAULT ' ' NOT NULL AFTER `collectable`; \ No newline at end of file diff --git a/EQ2/devtools/PacketParser/sql_updates/MerchantItems.sql b/EQ2/devtools/PacketParser/sql_updates/MerchantItems.sql new file mode 100644 index 000000000..1a0f87b84 --- /dev/null +++ b/EQ2/devtools/PacketParser/sql_updates/MerchantItems.sql @@ -0,0 +1,24 @@ +CREATE TABLE `raw_merchant_items` ( + `id` int(10) unsigned NOT NULL auto_increment, + `spawn_id` int(10) unsigned NOT NULL default '0', + `item_id` int(10) unsigned NOT NULL, + `item_name` varchar(128) NOT NULL default ' ', + `unknown` tinyint(3) unsigned NOT NULL default '0', + `price` int(10) unsigned NOT NULL default '0', + `unknown2` int(10) unsigned NOT NULL default '0', + `stack_size` smallint(5) unsigned NOT NULL default '0', + `icon` smallint(5) unsigned NOT NULL default '0', + `unknown3` tinyint(3) unsigned NOT NULL default '0', + `level` tinyint(3) unsigned NOT NULL default '0', + `unknown4` tinyint(3) unsigned NOT NULL default '0', + `unknown5` smallint(5) unsigned NOT NULL default '0', + `tier` tinyint(3) unsigned NOT NULL default '0', + `unknown6` int(10) unsigned NOT NULL default '0', + `item_id2` int(10) unsigned NOT NULL default '0', + `stack_size2` smallint(5) unsigned NOT NULL default '0', + `description` varchar(512) NOT NULL default ' ', + `log_file` varchar(128) NOT NULL default ' ', + `language_type` tinyint(3) unsigned NOT NULL default '0', + PRIMARY KEY (`id`), + UNIQUE KEY `SpawnItemNDX` (`item_id`,`spawn_id`) +) ENGINE=InnoDB DEFAULT CHARSET=latin1; \ No newline at end of file diff --git a/EQ2/devtools/PacketParser/sql_updates/Misc item unknown updates.sql b/EQ2/devtools/PacketParser/sql_updates/Misc item unknown updates.sql new file mode 100644 index 000000000..07b68a9e0 --- /dev/null +++ b/EQ2/devtools/PacketParser/sql_updates/Misc item unknown updates.sql @@ -0,0 +1,39 @@ +DROP TABLE IF EXISTS `raw_item_details_thrown`; + +CREATE TABLE `raw_item_details_thrown` ( + `id` int(10) unsigned NOT NULL auto_increment, + `item_id` int(11) NOT NULL default '0', + `range` int(11) NOT NULL default '0', + `damage_modifier` int(11) NOT NULL default '0', + `hit_bonus` float NOT NULL default '0', + `damage_type` int(10) unsigned NOT NULL default '0', + `language_type` tinyint(3) unsigned NOT NULL default '1', + PRIMARY KEY (`id`), + UNIQUE KEY `NewIndex` (`item_id`,`language_type`) +) ENGINE=MyISAM AUTO_INCREMENT=41 DEFAULT CHARSET=latin1; + +ALTER TABLE `raw_item_details_house` CHANGE `status_rent_reduction` `status_rent_reduction` INT DEFAULT '0' NOT NULL; + +ALTER TABLE `raw_item_details_house_container` DROP `disallowed_types`; + +ALTER TABLE `raw_item_details_house_container` CHANGE `allowed_types` `allowed_types` INT UNSIGNED DEFAULT '0' NOT NULL; + +ALTER TABLE `raw_item_details_house_container` CHANGE `unknown13` `unknown13` TINYINT UNSIGNED DEFAULT '0' NOT NULL; + +ALTER TABLE `raw_item_details_house_container` CHANGE `unknown14` `broker_commission` SMALLINT(5) UNSIGNED DEFAULT '0' NOT NULL; + +ALTER TABLE `raw_item_details_house_container` CHANGE `unknown15` `fence_commission` SMALLINT(5) UNSIGNED DEFAULT '0' NOT NULL; + +ALTER TABLE `raw_item_details_recipe` CHANGE `unknown12` `uses` SMALLINT(5) UNSIGNED DEFAULT '1' NOT NULL; + +ALTER TABLE `raw_item_details_recipe` DROP `unknown13`, DROP `unknown14`; + +ALTER TABLE `raw_item_details_book` CHANGE `unknown1` `language` TINYINT(3) UNSIGNED DEFAULT '0' NOT NULL; + +ALTER TABLE `raw_item_details_book` DROP `unknown2`; + +ALTER TABLE `raw_item_details_book` ADD `author` VARCHAR(255) NOT NULL AFTER `language`; + +ALTER TABLE `raw_item_details_book` ADD `title` VARCHAR(255) NOT NULL AFTER `author`; + +ALTER TABLE `raw_spawn_unknowns` CHANGE `value` `value` VARCHAR(50) NOT NULL; \ No newline at end of file diff --git a/EQ2/devtools/PacketParser/sql_updates/New Insert Queries.txt b/EQ2/devtools/PacketParser/sql_updates/New Insert Queries.txt new file mode 100644 index 000000000..0d571bf9c --- /dev/null +++ b/EQ2/devtools/PacketParser/sql_updates/New Insert Queries.txt @@ -0,0 +1,49 @@ +INSERT INTO `eq2_test`.`npcs` (`id`, `name`, `min_level`, `max_level`, `enc_level`, `race`, `race_type`, `class_`, `gender`, `hair_type_id`, + `facial_hair_type_id`, `wing_type_id`, `chest_type_id`, `legs_type_id`, `soga_hair_type_id`, `soga_facial_hair_type_id`, `show_name`, `attackable`, + `show_level`, `targetable`, `show_command_icon`, `display_hand_icon`, visual_state, action_state, mood_state, initial_state, activity_status, collision_radius, command_primary, size) +select `id`, `name`, `level`, `level`, `difficulty`, `race`, `race_type`, `class_`, `gender`, `hair_type_id`, `facial_hair_type_id`, `wing_type_id`, + `chest_type_id`, `legs_type_id`, `soga_hair_type_id`, `soga_facial_hair_type_id`, (vis_flags & 16) >0 as 'show_name', attackable_status = 0 as 'attackable', + (vis_flags & 64 || vis_flags & 32) >0 as 'show_level', (vis_flags & 4) >0 as 'targetable', (vis_flags & 2) >0 as 'show_command_icon', hand_flag, + visual_state, action_state, mood_state, pos_state, activity_status, pos_collision_radius, 0, pos_size + from `eq2_rawdata`.`raw_spawn_info`; + +insert into `eq2_test`.`npc_appearance` + select + `id`, + `spawn_id` as npc_id, + `signed_value`, + `type`, + `red`, + `green`, + `blue` + from `eq2_rawdata`.`raw_spawn_appearance`; + +insert into `eq2_test`.`npc_appearance_equip` + select + `id`, + `spawn_id` as npc_id, + `slot_id`, + `equip_type`, + `red`, + `green`, + `blue`, + `highlight_red`, + `highlight_green`, + `highlight_blue` + from `eq2_rawdata`.`raw_spawn_appearance_equip`; + +insert into eq2_test.spawngroup select id, 'Tutorial Island Good Spawns' from eq2_rawdata.raw_spawns where eq2_rawdata.raw_spawns.spawn_packet_type = 'Normal'; + +insert into eq2_test.spawnentry (npcid, spawngroupid, spawnpercentage) select eq2_test.npcs.id, eq2_rawdata.raw_spawns.id, 100 from eq2_test.npcs, eq2_rawdata.raw_spawn_info, eq2_rawdata.raw_spawns where eq2_test.npcs.id = eq2_rawdata.raw_spawn_info.id and eq2_rawdata.raw_spawn_info.id = eq2_rawdata.raw_spawns.spawn_id and eq2_rawdata.raw_spawns.spawn_packet_type = 'Normal'; + +insert into eq2_test.spawns (spawngroup_id, zone_id, x, y, z, heading, respawn, location_id) select eq2_rawdata.raw_spawns.id, 9999, eq2_rawdata.raw_spawns.x, + eq2_rawdata.raw_spawns.y, eq2_rawdata.raw_spawns.z, eq2_rawdata.raw_spawns.heading, 3600, eq2_rawdata.raw_spawns.grid_id + from eq2_rawdata.raw_spawn_info, eq2_rawdata.raw_spawns + where eq2_rawdata.raw_spawn_info.id = eq2_rawdata.raw_spawns.spawn_id and eq2_rawdata.raw_spawns.spawn_packet_type = 'Normal'; + +update eq2_test.spawns, eq2_test.zones, eq2_rawdata.raw_spawns, eq2_rawdata.raw_zones set eq2_test.spawns.zone_id=eq2_test.zones.id +where eq2_test.spawns.zone_id= 9999 and eq2_rawdata.raw_spawns.id = eq2_test.spawns.spawngroup_id and eq2_rawdata.raw_zones.id = eq2_rawdata.raw_spawns.zone_id and eq2_rawdata.raw_zones.zone_file = eq2_test.zones.file; + + +update eq2_test.npcs, eq2_rawdata.raw_spawn_info, eq2_test.entity_commands set eq2_test.npcs.command_primary = eq2_test.entity_commands.command_list_id +where eq2_rawdata.raw_spawn_info.default_command = eq2_test.entity_commands.command_text and eq2_test.npcs.id = eq2_rawdata.raw_spawn_info.id; diff --git a/EQ2/devtools/PacketParser/sql_updates/Parser DB Updates.sql b/EQ2/devtools/PacketParser/sql_updates/Parser DB Updates.sql new file mode 100644 index 000000000..389c3f772 --- /dev/null +++ b/EQ2/devtools/PacketParser/sql_updates/Parser DB Updates.sql @@ -0,0 +1,85 @@ + +DROP TABLE IF EXISTS `raw_abilities`; +CREATE TABLE `raw_abilities` ( + `id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT, + `ability_id` INT(10) UNSIGNED NOT NULL DEFAULT '0', + `icon` SMALLINT(5) UNSIGNED NOT NULL DEFAULT '0', + `icon2` SMALLINT(5) UNSIGNED NOT NULL DEFAULT '0', + `unknown` INT(10) UNSIGNED NOT NULL DEFAULT '0', + `name` VARCHAR(250) DEFAULT '', + `data_version` SMALLINT(5) UNSIGNED NOT NULL, + `language_type` TINYINT(3) UNSIGNED NOT NULL DEFAULT '0', + `log_file` VARCHAR(250) DEFAULT '', + PRIMARY KEY (`id`), + UNIQUE KEY (`ability_id`) +) ENGINE=MYISAM; + + +DROP TABLE IF EXISTS `raw_locations`; +CREATE TABLE `raw_locations` ( + `id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT, + `poi_id` TINYINT(3) UNSIGNED NOT NULL DEFAULT '0', + `soe_zone_id` SMALLINT(5) UNSIGNED NOT NULL DEFAULT '0', + `unknown` TINYINT(3) UNSIGNED NOT NULL DEFAULT '0', + `poi_name` VARCHAR(250) CHARACTER SET latin1 COLLATE latin1_general_ci NOT NULL, + `data_version` SMALLINT(5) UNSIGNED NOT NULL DEFAULT '0', + `log_file` VARCHAR(250) CHARACTER SET latin1 COLLATE latin1_general_ci NOT NULL, + `language_type` TINYINT(3) UNSIGNED NOT NULL DEFAULT '0', + PRIMARY KEY (`id`), + UNIQUE KEY `LocationIDX` (`poi_id`,`soe_zone_id`) +) ENGINE=MYISAM; + + +DROP TABLE IF EXISTS `raw_traditions`; +CREATE TABLE `raw_traditions` ( + `id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT, + `tradition_id` INT(10) UNSIGNED NOT NULL DEFAULT '0', + `selection` TINYINT(3) UNSIGNED NOT NULL DEFAULT '0', + `icon` SMALLINT(5) UNSIGNED NOT NULL DEFAULT '0', + `icon2` SMALLINT(5) UNSIGNED NOT NULL DEFAULT '0', + `unknown` INT(10) UNSIGNED NOT NULL DEFAULT '0', + `name` VARCHAR(250) DEFAULT '', + `data_version` SMALLINT(5) UNSIGNED NOT NULL, + `language_type` TINYINT(3) UNSIGNED NOT NULL DEFAULT '0', + `log_file` VARCHAR(250) DEFAULT '', + PRIMARY KEY (`id`), + UNIQUE KEY (`tradition_id`) +) ENGINE=MYISAM; + + +DROP TABLE IF EXISTS `raw_trainings`; +CREATE TABLE `raw_trainings` ( + `id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT, + `level` TINYINT(3) UNSIGNED NOT NULL DEFAULT '0', + `spell_line` TINYINT(3) UNSIGNED NOT NULL DEFAULT '0', + `icon_0` SMALLINT(5) UNSIGNED NOT NULL DEFAULT '0', + `icon2_0` SMALLINT(5) UNSIGNED NOT NULL DEFAULT '0', + `training_id_0` INT(10) UNSIGNED NOT NULL DEFAULT '0', + `unknown_0` INT(10) UNSIGNED NOT NULL DEFAULT '0', + `name_0` VARCHAR(250) DEFAULT NULL, + `icon_1` SMALLINT(5) UNSIGNED NOT NULL DEFAULT '0', + `icon2_1` SMALLINT(5) UNSIGNED NOT NULL DEFAULT '0', + `training_id_1` INT(10) UNSIGNED NOT NULL DEFAULT '0', + `unknown_1` INT(10) UNSIGNED NOT NULL DEFAULT '0', + `name_1` VARCHAR(250) DEFAULT '', + `icon_2` SMALLINT(5) UNSIGNED NOT NULL DEFAULT '0', + `icon2_2` SMALLINT(5) UNSIGNED NOT NULL DEFAULT '0', + `training_id_2` INT(10) UNSIGNED NOT NULL DEFAULT '0', + `unknown_2` INT(10) UNSIGNED NOT NULL DEFAULT '0', + `name_2` VARCHAR(250) DEFAULT '', + `icon_3` SMALLINT(5) UNSIGNED NOT NULL DEFAULT '0', + `icon2_3` SMALLINT(5) UNSIGNED NOT NULL DEFAULT '0', + `training_id_3` INT(10) UNSIGNED NOT NULL DEFAULT '0', + `unknown_3` INT(10) UNSIGNED NOT NULL DEFAULT '0', + `name_3` VARCHAR(250) DEFAULT '', + `icon_4` SMALLINT(5) UNSIGNED NOT NULL DEFAULT '0', + `icon2_4` SMALLINT(5) UNSIGNED NOT NULL DEFAULT '0', + `training_id_4` INT(10) UNSIGNED NOT NULL DEFAULT '0', + `unknown_4` INT(10) UNSIGNED NOT NULL DEFAULT '0', + `name_4` VARCHAR(250) DEFAULT '', + `data_version` SMALLINT(5) UNSIGNED NOT NULL, + `language_type` TINYINT(3) UNSIGNED NOT NULL DEFAULT '0', + `log_file` VARCHAR(250) DEFAULT '', + PRIMARY KEY (`id`), + UNIQUE KEY `TrainingIDX` (`training_id_0`, `training_id_1`, `training_id_2`, `training_id_3`, `training_id_4`) +) ENGINE=MYISAM; diff --git a/EQ2/devtools/PacketParser/sql_updates/Parser Item and Quest DB Changes.sql b/EQ2/devtools/PacketParser/sql_updates/Parser Item and Quest DB Changes.sql new file mode 100644 index 000000000..4cc125835 --- /dev/null +++ b/EQ2/devtools/PacketParser/sql_updates/Parser Item and Quest DB Changes.sql @@ -0,0 +1,102 @@ +ALTER TABLE `raw_item_stats` CHANGE `text` `text` VARCHAR(250) DEFAULT ' ' NOT NULL; +ALTER TABLE `raw_item_details_weapon` CHANGE `damage_low1` `damage_low1` SMALLINT UNSIGNED DEFAULT '0' NOT NULL; +ALTER TABLE `raw_item_details_weapon` CHANGE `damage_low2` `damage_low2` SMALLINT UNSIGNED DEFAULT '0' NOT NULL; +ALTER TABLE `raw_item_details_weapon` CHANGE `damage_low3` `damage_low3` SMALLINT UNSIGNED DEFAULT '0' NOT NULL; +ALTER TABLE `raw_item_details_weapon` CHANGE `damage_high1` `damage_high1` SMALLINT UNSIGNED DEFAULT '0' NOT NULL; +ALTER TABLE `raw_item_details_weapon` CHANGE `damage_high2` `damage_high2` SMALLINT UNSIGNED DEFAULT '0' NOT NULL; +ALTER TABLE `raw_item_details_weapon` CHANGE `damage_high3` `damage_high3` SMALLINT UNSIGNED DEFAULT '0' NOT NULL; +ALTER TABLE `raw_item_details_weapon` CHANGE `delay` `delay` SMALLINT UNSIGNED DEFAULT '0' NOT NULL; +ALTER TABLE `raw_item_details_range` CHANGE `damage_low1` `damage_low1` SMALLINT UNSIGNED DEFAULT '0' NOT NULL; +ALTER TABLE `raw_item_details_range` CHANGE `damage_low2` `damage_low2` SMALLINT UNSIGNED DEFAULT '0' NOT NULL; +ALTER TABLE `raw_item_details_range` CHANGE `damage_low3` `damage_low3` SMALLINT UNSIGNED DEFAULT '0' NOT NULL; +ALTER TABLE `raw_item_details_range` CHANGE `damage_high1` `damage_high1` SMALLINT UNSIGNED DEFAULT '0' NOT NULL; +ALTER TABLE `raw_item_details_range` CHANGE `damage_high2` `damage_high2` SMALLINT UNSIGNED DEFAULT '0' NOT NULL; +ALTER TABLE `raw_item_details_range` CHANGE `damage_high3` `damage_high3` SMALLINT UNSIGNED DEFAULT '0' NOT NULL; +ALTER TABLE `raw_item_details_range` CHANGE `delay` `delay` SMALLINT UNSIGNED DEFAULT '0' NOT NULL; +ALTER TABLE `raw_item_details_range` CHANGE `range_low` `range_low` SMALLINT UNSIGNED DEFAULT '0' NOT NULL; +ALTER TABLE `raw_item_details_range` CHANGE `range_high` `range_high` SMALLINT UNSIGNED DEFAULT '0' NOT NULL; +ALTER TABLE `raw_item_details_shield` CHANGE `mitigation_high` `mitigation_high` SMALLINT UNSIGNED DEFAULT '0' NOT NULL; +ALTER TABLE `raw_item_details_shield` CHANGE `mitigation_low` `mitigation_low` SMALLINT UNSIGNED DEFAULT '0' NOT NULL; +ALTER TABLE `raw_item_details_armor` CHANGE `mitigation_high` `mitigation_high` SMALLINT UNSIGNED DEFAULT '0' NOT NULL; +ALTER TABLE `raw_item_details_armor` CHANGE `mitigation_low` `mitigation_low` SMALLINT UNSIGNED DEFAULT '0' NOT NULL; + +ALTER TABLE `raw_spell_levels` CHANGE `class_id` `adventure_class_id` TINYINT(3) UNSIGNED DEFAULT '0' NOT NULL; +ALTER TABLE `raw_spell_levels` ADD `tradeskill_class_id` TINYINT UNSIGNED DEFAULT '0' NOT NULL AFTER `adventure_class_id`; +ALTER TABLE `raw_spell_levels` DROP PRIMARY KEY, ADD PRIMARY KEY (`spell_id`, `tier`, `adventure_class_id`, `tradeskill_class_id`); + +ALTER TABLE `raw_item_skill_classes` CHANGE `class_id` `adventure_class_id` TINYINT(3) UNSIGNED DEFAULT '0' NOT NULL; +ALTER TABLE `raw_item_skill_classes` ADD `tradeskill_class_id` TINYINT UNSIGNED DEFAULT '0' NOT NULL AFTER `adventure_class_id`; +ALTER TABLE `raw_item_skill_classes` DROP INDEX `NewIndex`, ADD UNIQUE `NewIndex` (`item_id`, `adventure_class_id`, `language_type`, `tradeskill_class_id`); + +ALTER TABLE `raw_item_classes` ADD `tradeskill_class_id` TINYINT UNSIGNED DEFAULT '0' NOT NULL AFTER `class_id`; +ALTER TABLE `raw_item_classes` CHANGE `class_id` `adventure_class_id` TINYINT(3) UNSIGNED DEFAULT '0' NOT NULL; +ALTER TABLE `raw_item_classes` DROP INDEX `NewIndex`, ADD UNIQUE `NewIndex` (`adventure_class_id`, `item_id`, `language_type`, `tradeskill_class_id`); + +ALTER TABLE `raw_item_details_range` CHANGE `unknown12` `damage_type` TINYINT(3) UNSIGNED DEFAULT '0' NOT NULL; +ALTER TABLE `raw_items` CHANGE `description` `description` VARCHAR(1024) NOT NULL; + +CREATE TABLE `raw_quest_reward_factions` ( + `id` int(10) unsigned NOT NULL auto_increment, + `quest_id` int(10) unsigned NOT NULL default '0', + `faction_name` varchar(64) NOT NULL, + `amount` int(10) unsigned NOT NULL default '0', + PRIMARY KEY (`id`), + UNIQUE KEY `FactionQuestIDX` (`quest_id`,`faction_name`) +) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=latin1; + +CREATE TABLE `raw_quest_reward_items` ( + `id` int(10) unsigned NOT NULL auto_increment, + `quest_id` int(10) unsigned NOT NULL default '0', + `item_id` int(10) unsigned NOT NULL default '0', + PRIMARY KEY (`id`), + UNIQUE KEY `ItemQuestIDX` (`item_id`,`quest_id`) +) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=latin1; + +CREATE TABLE `raw_quest_taskgroup_tasks` ( + `id` int(10) unsigned NOT NULL auto_increment, + `taskgroup_id` int(10) unsigned NOT NULL default '0', + `task` text NOT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `TaskGroupTaskIDX` (`task`(200),`taskgroup_id`) +) ENGINE=InnoDB AUTO_INCREMENT=17 DEFAULT CHARSET=latin1; + +CREATE TABLE `raw_quest_taskgroup_taskupdates` ( + `id` int(10) unsigned NOT NULL auto_increment, + `taskgroup_id` int(10) unsigned NOT NULL default '0', + `icon` smallint(5) unsigned NOT NULL default '0', + `update_target_name` varchar(64) NOT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `TaskGroupUpdateIDX` (`taskgroup_id`,`update_target_name`) +) ENGINE=InnoDB AUTO_INCREMENT=7 DEFAULT CHARSET=latin1; + +CREATE TABLE `raw_quest_taskgroups` ( + `id` int(10) unsigned NOT NULL auto_increment, + `quest_id` int(10) unsigned NOT NULL default '0', + `task_group` text NOT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `QuestTaskIDX` (`quest_id`,`task_group`(200)) +) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=latin1; + +CREATE TABLE `raw_quests` ( + `id` int(11) unsigned NOT NULL default '0', + `name` varchar(255) NOT NULL, + `description` text NOT NULL, + `type` varchar(255) NOT NULL, + `zone` varchar(255) NOT NULL, + `unknown1` tinyint(3) unsigned NOT NULL default '0', + `repeatable` tinyint(3) unsigned NOT NULL default '0', + `unknown2` tinyint(3) unsigned NOT NULL default '0', + `day` tinyint(3) unsigned NOT NULL default '0', + `month` tinyint(3) unsigned NOT NULL default '0', + `year` tinyint(3) unsigned NOT NULL default '0', + `level` tinyint(3) unsigned NOT NULL default '0', + `encounter_level` tinyint(3) unsigned NOT NULL default '0', + `difficulty` tinyint(3) unsigned NOT NULL default '0', + `visible` tinyint(3) unsigned NOT NULL default '0', + `max_coin` int(10) unsigned NOT NULL default '0', + `min_coin` int(10) unsigned NOT NULL default '0', + `status_points` int(10) unsigned NOT NULL default '0', + `text` varchar(50) NOT NULL, + `exp_bonus` int(10) unsigned NOT NULL default '0', + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=latin1; \ No newline at end of file diff --git a/EQ2/devtools/PacketParser/sql_updates/Pattern Item Type update.sql b/EQ2/devtools/PacketParser/sql_updates/Pattern Item Type update.sql new file mode 100644 index 000000000..752f33e03 --- /dev/null +++ b/EQ2/devtools/PacketParser/sql_updates/Pattern Item Type update.sql @@ -0,0 +1,28 @@ +ALTER TABLE `raw_items` CHANGE `item_type` `item_type` ENUM('Normal','Armor','Food','Bag','Weapon','Ranged','Shield','Spell','Recipe','Book','House','Thrown','Bauble','House Container','Adornment','Pattern','Armor Set') DEFAULT 'Normal' NOT NULL; + + + +CREATE TABLE `raw_item_details_armorset` ( + `id` int(10) unsigned NOT NULL auto_increment, + `armorset_item_id` int(11) NOT NULL default '0', + `item_id` int(11) NOT NULL default '0', + `item_crc` int(11) NOT NULL default '0', + `item_name` varchar(255) NOT NULL default 'N/A', + `item_icon` smallint(5) unsigned NOT NULL default '0', + `unknown_piece` int(10) unsigned NOT NULL default '0', + `language_type` tinyint(3) unsigned NOT NULL default '1', + PRIMARY KEY (`id`), + UNIQUE KEY `UnqArmorSetIdx` (`item_id`,`armorset_item_id`) +) ENGINE=InnoDB AUTO_INCREMENT=22 DEFAULT CHARSET=latin1; + +CREATE TABLE `raw_item_details_pattern` ( + `id` int(10) unsigned NOT NULL auto_increment, + `pattern_item_id` int(11) NOT NULL default '0', + `item_id` int(11) NOT NULL default '0', + `item_crc` int(11) NOT NULL default '0', + `item_name` varchar(255) NOT NULL default 'N/A', + `item_icon` smallint(5) unsigned NOT NULL default '0', + `language_type` tinyint(3) unsigned NOT NULL default '1', + PRIMARY KEY (`id`), + UNIQUE KEY `UnqPatternIDX` (`pattern_item_id`,`item_id`) +) ENGINE=InnoDB AUTO_INCREMENT=135 DEFAULT CHARSET=latin1; diff --git a/EQ2/devtools/PacketParser/sql_updates/Quest Updates 2009-May-07.sql b/EQ2/devtools/PacketParser/sql_updates/Quest Updates 2009-May-07.sql new file mode 100644 index 000000000..30aecacdd --- /dev/null +++ b/EQ2/devtools/PacketParser/sql_updates/Quest Updates 2009-May-07.sql @@ -0,0 +1,2 @@ +ALTER TABLE `raw_quest_reward_items` ADD `selectable` TINYINT UNSIGNED DEFAULT '0' NOT NULL; +ALTER TABLE `raw_quest_reward_items` DROP INDEX `ItemQuestIDX`, ADD UNIQUE `ItemQuestIDX` (`item_id`, `quest_id`, `selectable`); \ No newline at end of file diff --git a/EQ2/devtools/PacketParser/sql_updates/RawDialogs.sql b/EQ2/devtools/PacketParser/sql_updates/RawDialogs.sql new file mode 100644 index 000000000..ba6f9f37d --- /dev/null +++ b/EQ2/devtools/PacketParser/sql_updates/RawDialogs.sql @@ -0,0 +1,29 @@ +drop table if exists raw_dialogs; +CREATE TABLE `raw_dialogs` ( + `id` int(10) unsigned NOT NULL auto_increment, + `spawn_id` int(10) unsigned NOT NULL default '0', + `conversation_id` int(10) unsigned NOT NULL default '0', + `npc_text` text NOT NULL, + `voice_file` varchar(255) NOT NULL, + `key1` int(10) unsigned NOT NULL default '0', + `key2` int(10) unsigned NOT NULL default '0', + `unknown` smallint(5) unsigned NOT NULL default '0', + `unknown2` tinyint(3) unsigned NOT NULL default '0', + `unknown3` tinyint(3) unsigned NOT NULL default '0', + `sequence` smallint(5) unsigned NOT NULL default '0', + `index` smallint(5) NOT NULL default '0', + `language_type` tinyint(3) unsigned NOT NULL default '0', + PRIMARY KEY (`id`), + UNIQUE KEY `NewIndex` (`conversation_id`,`spawn_id`,`sequence`,`index`) +) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=latin1; + +drop table if exists raw_dialog_choices; +CREATE TABLE `raw_dialog_choices` ( + `id` int(10) unsigned NOT NULL auto_increment, + `dialog_conversation_id` int(10) unsigned NOT NULL default '0', + `index` smallint(3) unsigned NOT NULL default '0', + `choice` text NOT NULL, + PRIMARY KEY (`id`) +) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=latin1; + + diff --git a/EQ2/devtools/PacketParser/sql_updates/Skill and Bauble Items update.sql b/EQ2/devtools/PacketParser/sql_updates/Skill and Bauble Items update.sql new file mode 100644 index 000000000..50587257f --- /dev/null +++ b/EQ2/devtools/PacketParser/sql_updates/Skill and Bauble Items update.sql @@ -0,0 +1,32 @@ +DROP TABLE IF EXISTS `raw_item_details_skills`; + +DROP TABLE IF EXISTS `raw_item_details_skill`; + +CREATE TABLE `raw_item_details_skill` ( + `id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT, + `item_id` INT(11) NOT NULL DEFAULT '0', + `spell_id` INT(10) UNSIGNED NOT NULL DEFAULT '0', + `tier` TINYINT(3) UNSIGNED NOT NULL DEFAULT '0', + `language_type` TINYINT(3) UNSIGNED NOT NULL DEFAULT '1', + PRIMARY KEY (`id`), + UNIQUE KEY `ItemSpellTierIdx` (`item_id`,`spell_id`,`tier`,`language_type`) +) ENGINE=MYISAM AUTO_INCREMENT=1 DEFAULT CHARSET=latin1; + + +CREATE TABLE `raw_item_details_bauble` ( + `id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT, + `item_id` INT(10) NOT NULL DEFAULT '0', + `cast` SMALLINT(5) UNSIGNED NOT NULL DEFAULT '100', + `recovery` SMALLINT(5) UNSIGNED NOT NULL DEFAULT '0', + `duration` INT(10) UNSIGNED NOT NULL DEFAULT '0', + `recast` FLOAT UNSIGNED NOT NULL DEFAULT '1', + `display_cast_time` TINYINT(3) UNSIGNED NOT NULL DEFAULT '0', + `display_bauble_type` TINYINT(3) UNSIGNED NOT NULL DEFAULT '0', + `effect_radius` FLOAT NOT NULL DEFAULT '0', + `max_aoe_targets` INT(10) UNSIGNED NOT NULL DEFAULT '0', + `display_until_cancelled` TINYINT(3) UNSIGNED NOT NULL DEFAULT '0', + `language_type` TINYINT(3) UNSIGNED NOT NULL DEFAULT '1', + PRIMARY KEY (`id`), + UNIQUE KEY `NewIndex` (`item_id`,`language_type`) +) ENGINE=MYISAM AUTO_INCREMENT=1 DEFAULT CHARSET=latin1; + diff --git a/EQ2/devtools/PacketParser/sql_updates/SpawnFix.sql b/EQ2/devtools/PacketParser/sql_updates/SpawnFix.sql new file mode 100644 index 000000000..eb1b1e664 --- /dev/null +++ b/EQ2/devtools/PacketParser/sql_updates/SpawnFix.sql @@ -0,0 +1,2 @@ +ALTER TABLE `raw_spawn_info` ADD `title` VARCHAR(255) DEFAULT ' ' NOT NULL AFTER `widget_id`; +ALTER TABLE `raw_spawn_info` DROP INDEX `NewIndex`, ADD UNIQUE `NewIndex` (`name`, `class_`, `race_type`, `race`, `level`, `gender`, `difficulty`, `language_type`, `widget_id`, `title`); \ No newline at end of file diff --git a/EQ2/devtools/PacketParser/sql_updates/TSO Parser Queries.sql b/EQ2/devtools/PacketParser/sql_updates/TSO Parser Queries.sql new file mode 100644 index 000000000..3597b676e --- /dev/null +++ b/EQ2/devtools/PacketParser/sql_updates/TSO Parser Queries.sql @@ -0,0 +1,24 @@ +ALTER TABLE `raw_item_appearances` CHANGE `item_id` `item_id` INT DEFAULT '0' NOT NULL; +ALTER TABLE `raw_item_classes` CHANGE `item_id` `item_id` INT DEFAULT '0' NOT NULL; +ALTER TABLE `raw_item_descriptions` CHANGE `item_id` `item_id` INT DEFAULT '0' NOT NULL; +ALTER TABLE `raw_item_details_armor` CHANGE `item_id` `item_id` INT DEFAULT '0' NOT NULL; +ALTER TABLE `raw_item_details_bag` CHANGE `item_id` `item_id` INT DEFAULT '0' NOT NULL; +ALTER TABLE `raw_item_details_bauble` CHANGE `item_id` `item_id` INT UNSIGNED DEFAULT '0' NULL; +ALTER TABLE `raw_item_details_food` CHANGE `item_id` `item_id` INT DEFAULT '0' NOT NULL; +ALTER TABLE `raw_item_details_house` CHANGE `item_id` `item_id` INT DEFAULT '0' NOT NULL; +ALTER TABLE `raw_item_details_house_container` CHANGE `item_id` `item_id` INT DEFAULT '0' NOT NULL; +ALTER TABLE `raw_item_details_range` CHANGE `item_id` `item_id` INT DEFAULT '0' NOT NULL; +ALTER TABLE `raw_item_details_recipe` CHANGE `item_id` `item_id` INT DEFAULT '0' NOT NULL; +ALTER TABLE `raw_item_details_recipe_items` CHANGE `item_id` `item_id` INT DEFAULT '0' NOT NULL; +ALTER TABLE `raw_item_details_shield` CHANGE `item_id` `item_id` INT DEFAULT '0' NOT NULL; +ALTER TABLE `raw_item_details_skills` CHANGE `item_id` `item_id` INT DEFAULT '0' NOT NULL; +ALTER TABLE `raw_item_details_thrown` CHANGE `item_id` `item_id` INT DEFAULT '0' NOT NULL; +ALTER TABLE `raw_item_details_weapon` CHANGE `item_id` `item_id` INT DEFAULT '0' NOT NULL; +ALTER TABLE `raw_item_effects` CHANGE `item_id` `item_id` INT DEFAULT '0' NOT NULL; +ALTER TABLE `raw_item_skill_classes` CHANGE `item_id` `item_id` INT DEFAULT '0' NOT NULL; +ALTER TABLE `raw_item_stats` CHANGE `item_id` `item_id` INT DEFAULT '0' NOT NULL; +ALTER TABLE `raw_items` CHANGE `id` `id` INT NOT NULL AUTO_INCREMENT; +ALTER TABLE `raw_merchant_items` CHANGE `item_id` `item_id` INT NOT NULL; +ALTER TABLE `raw_quest_reward_items` CHANGE `item_id` `item_id` INT DEFAULT '0' NOT NULL; +ALTER TABLE `raw_spawn_info` CHANGE `race_type` `model_type` SMALLINT(5) UNSIGNED DEFAULT '0' NOT NULL; +ALTER TABLE `raw_spawn_info` CHANGE `soga_race_type` `soga_model_type` SMALLINT(5) UNSIGNED DEFAULT '0' NOT NULL; diff --git a/EQ2/devtools/PacketParser/sql_updates/eq2_achievements.sql b/EQ2/devtools/PacketParser/sql_updates/eq2_achievements.sql new file mode 100644 index 000000000..f16ddfd6f --- /dev/null +++ b/EQ2/devtools/PacketParser/sql_updates/eq2_achievements.sql @@ -0,0 +1,40 @@ +DROP TABLE IF EXISTS `raw_achievements`; +CREATE TABLE `raw_achievements` ( + `id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT, + `unknown_id` INT(10) UNSIGNED NOT NULL DEFAULT '0', + `name` VARCHAR(50) NOT NULL, + `uncompleted_text` VARCHAR(255) DEFAULT NULL, + `completed_text` VARCHAR(255) DEFAULT NULL, + `category` VARCHAR(50) DEFAULT NULL, + `expansion` VARCHAR(50) DEFAULT NULL, + `icon` SMALLINT(5) UNSIGNED NOT NULL DEFAULT '0', + `point_value` SMALLINT(5) UNSIGNED NOT NULL DEFAULT '0', + `qty_req` INT(10) UNSIGNED NOT NULL DEFAULT '0', + `data_version` SMALLINT(5) UNSIGNED NOT NULL DEFAULT '0', + `log_file` VARCHAR(250) NOT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `id` (`unknown_id`,`name`) +) ENGINE=MYISAM DEFAULT CHARSET=latin1; + + + +DROP TABLE IF EXISTS `raw_achievements_items`; +CREATE TABLE /*!32312 IF NOT EXISTS*/ `raw_achievements_items` ( + `id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT, + `unknown_id` INT(10) UNSIGNED NOT NULL DEFAULT '0', + `name` VARCHAR(250) DEFAULT NULL, + `qty_req` INT(10) UNSIGNED NOT NULL DEFAULT '0', + PRIMARY KEY (`id`), + UNIQUE KEY `NewIndex` (`name`) +) ENGINE=MYISAM DEFAULT CHARSET=latin1; + + + +DROP TABLE IF EXISTS `raw_achievements_rewards`; +CREATE TABLE /*!32312 IF NOT EXISTS*/ `raw_achievements_rewards` ( + `id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT, + `unknown_id` INT(10) UNSIGNED NOT NULL DEFAULT '0', + `reward` VARCHAR(250) DEFAULT '"', + PRIMARY KEY (`id`), + UNIQUE KEY `id` (`unknown_id`) +) ENGINE=MYISAM DEFAULT CHARSET=latin1; diff --git a/EQ2/devtools/PacketParser/sql_updates/eq2_books.sql b/EQ2/devtools/PacketParser/sql_updates/eq2_books.sql new file mode 100644 index 000000000..ae2774f75 --- /dev/null +++ b/EQ2/devtools/PacketParser/sql_updates/eq2_books.sql @@ -0,0 +1,38 @@ +DROP TABLE IF EXISTS `raw_books`; +CREATE TABLE `raw_books` ( + `id` TINYINT(10) UNSIGNED NOT NULL AUTO_INCREMENT, + `spawn_id` INT(10) UNSIGNED NOT NULL DEFAULT '0', + `book_title` VARCHAR(100) NOT NULL, + `unknown` SMALLINT(5) UNSIGNED NOT NULL DEFAULT '0', + `book_type` VARCHAR(100) NOT NULL, + `unknown2` TINYINT(3) UNSIGNED NOT NULL DEFAULT '0', + `unknown3` SMALLINT(5) UNSIGNED NOT NULL DEFAULT '0', + `unknown4` INT(10) NOT NULL DEFAULT '0', + `unknown5` TINYINT(3) UNSIGNED NOT NULL DEFAULT '0', + `data_version` SMALLINT(5) UNSIGNED NOT NULL DEFAULT '0', + `log_file` VARCHAR(255) DEFAULT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `NewIndex` (`spawn_id`) +) ENGINE=MYISAM DEFAULT CHARSET=latin1; + + +DROP TABLE IF EXISTS `raw_book_images`; +CREATE TABLE `raw_book_images` ( + `id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT, + `spawn_id` INT(10) UNSIGNED NOT NULL, + `image_file` VARCHAR(255) DEFAULT NULL, + `image_id` TINYINT(3) UNSIGNED NOT NULL DEFAULT '0', + `unknown6` TINYINT(3) UNSIGNED NOT NULL DEFAULT '0', + PRIMARY KEY (`id`) +) ENGINE=MYISAM DEFAULT CHARSET=latin1; + + +DROP TABLE IF EXISTS `raw_book_pages`; +CREATE TABLE `raw_book_pages` ( + `id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT, + `spawn_id` INT(10) UNSIGNED NOT NULL DEFAULT '0', + `page_text` VARCHAR(1024) DEFAULT NULL, + `page_text_valign` TINYINT(3) UNSIGNED NOT NULL DEFAULT '0', + `page_text_halign` TINYINT(3) UNSIGNED NOT NULL DEFAULT '0', + PRIMARY KEY (`id`) +) ENGINE=MYISAM DEFAULT CHARSET=latin1; diff --git a/EQ2/devtools/PacketParser/sql_updates/eq2_rawdata_aa_tables.sql b/EQ2/devtools/PacketParser/sql_updates/eq2_rawdata_aa_tables.sql new file mode 100644 index 000000000..603e67a88 --- /dev/null +++ b/EQ2/devtools/PacketParser/sql_updates/eq2_rawdata_aa_tables.sql @@ -0,0 +1,82 @@ +CREATE TABLE `raw_aa_class` ( + `id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT, + `unknown6` INT(10) UNSIGNED NOT NULL DEFAULT '0', + `unknown7` TINYINT(3) UNSIGNED NOT NULL DEFAULT '0', + `spell_id` INT(10) UNSIGNED NOT NULL DEFAULT '0', + `unknown10` SMALLINT(3) UNSIGNED NOT NULL DEFAULT '0', + `name` VARCHAR(250) DEFAULT NULL, + `description` VARCHAR(250) DEFAULT NULL, + `icon` MEDIUMINT(5) UNSIGNED NOT NULL DEFAULT '0', + `icon2` MEDIUMINT(5) UNSIGNED NOT NULL DEFAULT '0', + `current_rank` TINYINT(3) UNSIGNED NOT NULL DEFAULT '0', + `max_rank` TINYINT(3) UNSIGNED NOT NULL DEFAULT '0', + `rank_cost` TINYINT(3) UNSIGNED NOT NULL DEFAULT '0', + `unknown11` TINYINT(3) UNSIGNED NOT NULL DEFAULT '0', + `class_name` VARCHAR(50) DEFAULT NULL, + `points_req` TINYINT(3) UNSIGNED NOT NULL DEFAULT '0', + `subclass_name` VARCHAR(50) DEFAULT NULL, + `icon_col` TINYINT(3) UNSIGNED NOT NULL DEFAULT '0', + `icon_row` TINYINT(3) UNSIGNED NOT NULL DEFAULT '0', + `line_title` VARCHAR(50) DEFAULT NULL, + `unknown20` INT(10) UNSIGNED NOT NULL DEFAULT '0', + `data_version` SMALLINT(5) UNSIGNED NOT NULL DEFAULT '0', + `log_file` VARCHAR(250) NOT NULL DEFAULT '', + PRIMARY KEY (`id`), + UNIQUE KEY `SpellIDX` (`spell_id`) +) ENGINE=MYISAM; + + +CREATE TABLE `raw_aa_subclass` ( + `id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT, + `unknown6` INT(10) UNSIGNED NOT NULL DEFAULT '0', + `unknown7` TINYINT(3) UNSIGNED NOT NULL DEFAULT '0', + `spell_id` INT(10) UNSIGNED NOT NULL DEFAULT '0', + `unknown10` SMALLINT(3) UNSIGNED NOT NULL DEFAULT '0', + `name` VARCHAR(250) DEFAULT NULL, + `description` VARCHAR(250) DEFAULT NULL, + `icon` MEDIUMINT(5) UNSIGNED NOT NULL DEFAULT '0', + `icon2` MEDIUMINT(5) UNSIGNED NOT NULL DEFAULT '0', + `current_rank` TINYINT(3) UNSIGNED NOT NULL DEFAULT '0', + `max_rank` TINYINT(3) UNSIGNED NOT NULL DEFAULT '0', + `rank_cost` TINYINT(3) UNSIGNED NOT NULL DEFAULT '0', + `unknown11` TINYINT(3) UNSIGNED NOT NULL DEFAULT '0', + `class_name` VARCHAR(50) DEFAULT NULL, + `points_req` TINYINT(3) UNSIGNED NOT NULL DEFAULT '0', + `subclass_name` VARCHAR(50) DEFAULT NULL, + `icon_col` TINYINT(3) UNSIGNED NOT NULL DEFAULT '0', + `icon_row` TINYINT(3) UNSIGNED NOT NULL DEFAULT '0', + `line_title` VARCHAR(50) DEFAULT NULL, + `unknown20` INT(10) UNSIGNED NOT NULL DEFAULT '0', + `data_version` SMALLINT(5) UNSIGNED NOT NULL DEFAULT '0', + `log_file` VARCHAR(250) NOT NULL DEFAULT '', + PRIMARY KEY (`id`), + UNIQUE KEY `SpellIDX` (`spell_id`) +) ENGINE=MYISAM; + + +CREATE TABLE `raw_aa_tso` ( + `id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT, + `unknown6` INT(10) UNSIGNED NOT NULL DEFAULT '0', + `unknown7` TINYINT(3) UNSIGNED NOT NULL DEFAULT '0', + `spell_id` INT(10) UNSIGNED NOT NULL DEFAULT '0', + `unknown10` SMALLINT(3) UNSIGNED NOT NULL DEFAULT '0', + `name` VARCHAR(250) DEFAULT NULL, + `description` VARCHAR(250) DEFAULT NULL, + `icon` MEDIUMINT(5) UNSIGNED NOT NULL DEFAULT '0', + `icon2` MEDIUMINT(5) UNSIGNED NOT NULL DEFAULT '0', + `current_rank` TINYINT(3) UNSIGNED NOT NULL DEFAULT '0', + `max_rank` TINYINT(3) UNSIGNED NOT NULL DEFAULT '0', + `rank_cost` TINYINT(3) UNSIGNED NOT NULL DEFAULT '0', + `unknown11` TINYINT(3) UNSIGNED NOT NULL DEFAULT '0', + `class_name` VARCHAR(50) DEFAULT NULL, + `points_req` TINYINT(3) UNSIGNED NOT NULL DEFAULT '0', + `subclass_name` VARCHAR(50) DEFAULT NULL, + `icon_col` TINYINT(3) UNSIGNED NOT NULL DEFAULT '0', + `icon_row` TINYINT(3) UNSIGNED NOT NULL DEFAULT '0', + `line_title` VARCHAR(50) DEFAULT NULL, + `unknown20` INT(10) UNSIGNED NOT NULL DEFAULT '0', + `data_version` SMALLINT(5) UNSIGNED NOT NULL DEFAULT '0', + `log_file` VARCHAR(250) NOT NULL DEFAULT '', + PRIMARY KEY (`id`), + UNIQUE KEY `SpellIDX` (`spell_id`) +) ENGINE=MYISAM; diff --git a/EQ2/devtools/PacketParser/sql_updates/parser_db_20070725.sql b/EQ2/devtools/PacketParser/sql_updates/parser_db_20070725.sql new file mode 100644 index 000000000..a3b469f84 --- /dev/null +++ b/EQ2/devtools/PacketParser/sql_updates/parser_db_20070725.sql @@ -0,0 +1,94 @@ +DROP TABLE IF EXISTS `raw_item_classes`; +DROP TABLE IF EXISTS `raw_item_skill_classes`; + +ALTER TABLE `raw_items` + ADD COLUMN `adventure_classes` BIGINT(20) UNSIGNED DEFAULT '0' NOT NULL AFTER `adventure_default_level`, + ADD COLUMN `tradeskill_classes` BIGINT(20) UNSIGNED DEFAULT '0' NOT NULL AFTER `adventure_classes`, + CHANGE `required_level` `adventure_default_level` SMALLINT(5) UNSIGNED DEFAULT '0' NOT NULL, + ADD COLUMN `tradeskill_default_level` SMALLINT(5) UNSIGNED DEFAULT '0' NOT NULL AFTER `adventure_default_level`; + +ALTER TABLE `raw_item_details_skills` + ADD COLUMN `adventure_classes` BIGINT(20) UNSIGNED DEFAULT '0' NOT NULL AFTER `unknown26`, + ADD COLUMN `tradeskill_classes` BIGINT(20) UNSIGNED DEFAULT '0' NOT NULL AFTER `adventure_classes`, + ADD COLUMN `adventure_default_level` SMALLINT(5) UNSIGNED DEFAULT '0' NOT NULL AFTER `tradeskill_classes`, + ADD COLUMN `tradeskill_default_level` SMALLINT(5) UNSIGNED DEFAULT '0' NOT NULL AFTER `adventure_default_level`; + +DROP TABLE IF EXISTS `raw_item_details_skill`; +CREATE TABLE `raw_item_details_skill` ( + `id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT, + `item_id` INT(10) UNSIGNED NOT NULL DEFAULT '0', + `spell_id` INT(10) UNSIGNED NOT NULL DEFAULT '0', + `spell_tier` TINYINT(3) UNSIGNED NOT NULL DEFAULT '1', + `language_type` TINYINT(3) UNSIGNED NOT NULL DEFAULT '0', + PRIMARY KEY (`id`), + UNIQUE KEY `NewIndex1` (`item_id`,`language_type`,`spell_id`,`spell_tier`) +) ENGINE=MYISAM; + +ALTER TABLE `raw_spawn_info` DROP COLUMN `populate_spawn_id`, DROP COLUMN `processed`; +ALTER TABLE `raw_spawns` ADD COLUMN `populate_spawn_id` INT(10) UNSIGNED DEFAULT '0' NOT NULL AFTER `language_type`; + + +ALTER TABLE `opcodes` ENGINE=MYISAM CHECKSUM=1 AUTO_INCREMENT=1 COMMENT='' DELAY_KEY_WRITE=1 ROW_FORMAT=DYNAMIC CHARSET=latin1 COLLATE=latin1_swedish_ci; +ALTER TABLE `raw_collections` ENGINE=MYISAM CHECKSUM=1 AUTO_INCREMENT=1 COMMENT='' DELAY_KEY_WRITE=1 ROW_FORMAT=DYNAMIC CHARSET=latin1 COLLATE=latin1_swedish_ci; +ALTER TABLE `raw_conversations` ENGINE=MYISAM CHECKSUM=1 AUTO_INCREMENT=1 COMMENT='' DELAY_KEY_WRITE=1 ROW_FORMAT=DYNAMIC CHARSET=latin1 COLLATE=latin1_swedish_ci; +ALTER TABLE `raw_dialog_choices` ENGINE=MYISAM CHECKSUM=1 AUTO_INCREMENT=1 COMMENT='' DELAY_KEY_WRITE=1 ROW_FORMAT=DYNAMIC CHARSET=latin1 COLLATE=latin1_swedish_ci; +ALTER TABLE `raw_dialogs` ENGINE=MYISAM CHECKSUM=1 AUTO_INCREMENT=1 COMMENT='' DELAY_KEY_WRITE=1 ROW_FORMAT=DYNAMIC CHARSET=latin1 COLLATE=latin1_swedish_ci; +ALTER TABLE `raw_entity_commands` ENGINE=MYISAM CHECKSUM=1 AUTO_INCREMENT=1 COMMENT='' DELAY_KEY_WRITE=1 ROW_FORMAT=DYNAMIC CHARSET=latin1 COLLATE=latin1_swedish_ci; +ALTER TABLE `raw_factions` ENGINE=MYISAM CHECKSUM=1 AUTO_INCREMENT=1 COMMENT='' DELAY_KEY_WRITE=1 ROW_FORMAT=DYNAMIC CHARSET=latin1 COLLATE=latin1_swedish_ci; +ALTER TABLE `raw_item_appearances` ENGINE=MYISAM CHECKSUM=1 AUTO_INCREMENT=1 COMMENT='' DELAY_KEY_WRITE=1 ROW_FORMAT=DYNAMIC CHARSET=latin1 COLLATE=latin1_swedish_ci; +ALTER TABLE `raw_item_descriptions` ENGINE=MYISAM CHECKSUM=1 AUTO_INCREMENT=1 COMMENT='' DELAY_KEY_WRITE=1 ROW_FORMAT=DYNAMIC CHARSET=latin1 COLLATE=latin1_swedish_ci; +ALTER TABLE `raw_item_details_armor` ENGINE=MYISAM CHECKSUM=1 AUTO_INCREMENT=1 COMMENT='' DELAY_KEY_WRITE=1 ROW_FORMAT=DYNAMIC CHARSET=latin1 COLLATE=latin1_swedish_ci; +ALTER TABLE `raw_item_details_armorset` ENGINE=MYISAM CHECKSUM=1 AUTO_INCREMENT=1 COMMENT='' DELAY_KEY_WRITE=1 ROW_FORMAT=DYNAMIC CHARSET=latin1 COLLATE=latin1_swedish_ci; +ALTER TABLE `raw_item_details_bag` ENGINE=MYISAM CHECKSUM=1 AUTO_INCREMENT=1 COMMENT='' DELAY_KEY_WRITE=1 ROW_FORMAT=DYNAMIC CHARSET=latin1 COLLATE=latin1_swedish_ci; +ALTER TABLE `raw_item_details_bauble` ENGINE=MYISAM CHECKSUM=1 AUTO_INCREMENT=1 COMMENT='' DELAY_KEY_WRITE=1 ROW_FORMAT=DYNAMIC CHARSET=latin1 COLLATE=latin1_swedish_ci; +ALTER TABLE `raw_item_details_book` ENGINE=MYISAM CHECKSUM=1 AUTO_INCREMENT=1 COMMENT='' DELAY_KEY_WRITE=1 ROW_FORMAT=DYNAMIC CHARSET=latin1 COLLATE=latin1_swedish_ci; +ALTER TABLE `raw_item_details_food` ENGINE=MYISAM CHECKSUM=1 AUTO_INCREMENT=1 COMMENT='' DELAY_KEY_WRITE=1 ROW_FORMAT=DYNAMIC CHARSET=latin1 COLLATE=latin1_swedish_ci; +ALTER TABLE `raw_item_details_house` ENGINE=MYISAM CHECKSUM=1 AUTO_INCREMENT=1 COMMENT='' DELAY_KEY_WRITE=1 ROW_FORMAT=DYNAMIC CHARSET=latin1 COLLATE=latin1_swedish_ci; +ALTER TABLE `raw_item_details_house_container` ENGINE=MYISAM CHECKSUM=1 AUTO_INCREMENT=1 COMMENT='' DELAY_KEY_WRITE=1 ROW_FORMAT=DYNAMIC CHARSET=latin1 COLLATE=latin1_swedish_ci; +ALTER TABLE `raw_item_details_pattern` ENGINE=MYISAM CHECKSUM=1 AUTO_INCREMENT=1 COMMENT='' DELAY_KEY_WRITE=1 ROW_FORMAT=DYNAMIC CHARSET=latin1 COLLATE=latin1_swedish_ci; +ALTER TABLE `raw_item_details_range` ENGINE=MYISAM CHECKSUM=1 AUTO_INCREMENT=1 COMMENT='' DELAY_KEY_WRITE=1 ROW_FORMAT=DYNAMIC CHARSET=latin1 COLLATE=latin1_swedish_ci; +ALTER TABLE `raw_item_details_recipe` ENGINE=MYISAM CHECKSUM=1 AUTO_INCREMENT=1 COMMENT='' DELAY_KEY_WRITE=1 ROW_FORMAT=DYNAMIC CHARSET=latin1 COLLATE=latin1_swedish_ci; +ALTER TABLE `raw_item_details_recipe_items` ENGINE=MYISAM CHECKSUM=1 AUTO_INCREMENT=1 COMMENT='' DELAY_KEY_WRITE=1 ROW_FORMAT=DYNAMIC CHARSET=latin1 COLLATE=latin1_swedish_ci; +ALTER TABLE `raw_item_details_shield` ENGINE=MYISAM CHECKSUM=1 AUTO_INCREMENT=1 COMMENT='' DELAY_KEY_WRITE=1 ROW_FORMAT=DYNAMIC CHARSET=latin1 COLLATE=latin1_swedish_ci; +ALTER TABLE `raw_item_details_skill` ENGINE=MYISAM CHECKSUM=1 AUTO_INCREMENT=1 COMMENT='' DELAY_KEY_WRITE=1 ROW_FORMAT=DYNAMIC CHARSET=latin1 COLLATE=latin1_swedish_ci; +ALTER TABLE `raw_item_details_skills` ENGINE=MYISAM CHECKSUM=1 AUTO_INCREMENT=1 COMMENT='' DELAY_KEY_WRITE=1 ROW_FORMAT=DYNAMIC CHARSET=latin1 COLLATE=latin1_swedish_ci; +ALTER TABLE `raw_item_details_thrown` ENGINE=MYISAM CHECKSUM=1 AUTO_INCREMENT=1 COMMENT='' DELAY_KEY_WRITE=1 ROW_FORMAT=DYNAMIC CHARSET=latin1 COLLATE=latin1_swedish_ci; +ALTER TABLE `raw_item_details_weapon` ENGINE=MYISAM CHECKSUM=1 AUTO_INCREMENT=1 COMMENT='' DELAY_KEY_WRITE=1 ROW_FORMAT=DYNAMIC CHARSET=latin1 COLLATE=latin1_swedish_ci; +ALTER TABLE `raw_item_effects` ENGINE=MYISAM CHECKSUM=1 AUTO_INCREMENT=1 COMMENT='' DELAY_KEY_WRITE=1 ROW_FORMAT=DYNAMIC CHARSET=latin1 COLLATE=latin1_swedish_ci; +ALTER TABLE `raw_item_sets` ENGINE=MYISAM CHECKSUM=1 AUTO_INCREMENT=1 COMMENT='' DELAY_KEY_WRITE=1 ROW_FORMAT=DYNAMIC CHARSET=latin1 COLLATE=latin1_swedish_ci; +ALTER TABLE `raw_item_sets_effects` ENGINE=MYISAM CHECKSUM=1 AUTO_INCREMENT=1 COMMENT='' DELAY_KEY_WRITE=1 ROW_FORMAT=DYNAMIC CHARSET=latin1 COLLATE=latin1_swedish_ci; +ALTER TABLE `raw_item_sets_stats` ENGINE=MYISAM CHECKSUM=1 AUTO_INCREMENT=1 COMMENT='' DELAY_KEY_WRITE=1 ROW_FORMAT=DYNAMIC CHARSET=latin1 COLLATE=latin1_swedish_ci; +ALTER TABLE `raw_item_stats` ENGINE=MYISAM CHECKSUM=1 AUTO_INCREMENT=1 COMMENT='' DELAY_KEY_WRITE=1 ROW_FORMAT=DYNAMIC CHARSET=latin1 COLLATE=latin1_swedish_ci; +ALTER TABLE `raw_items` ENGINE=MYISAM CHECKSUM=1 AUTO_INCREMENT=1 COMMENT='' DELAY_KEY_WRITE=1 ROW_FORMAT=DYNAMIC CHARSET=latin1 COLLATE=latin1_swedish_ci; +ALTER TABLE `raw_map_data` ENGINE=MYISAM CHECKSUM=1 AUTO_INCREMENT=1 COMMENT='' DELAY_KEY_WRITE=1 ROW_FORMAT=DYNAMIC CHARSET=latin1 COLLATE=latin1_swedish_ci; +ALTER TABLE `raw_merchant_items` ENGINE=MYISAM CHECKSUM=1 AUTO_INCREMENT=1 COMMENT='' DELAY_KEY_WRITE=1 ROW_FORMAT=DYNAMIC CHARSET=latin1 COLLATE=latin1_swedish_ci; +ALTER TABLE `raw_quest_reward_factions` ENGINE=MYISAM CHECKSUM=1 AUTO_INCREMENT=1 COMMENT='' DELAY_KEY_WRITE=1 ROW_FORMAT=DYNAMIC CHARSET=latin1 COLLATE=latin1_swedish_ci; +ALTER TABLE `raw_quest_reward_items` ENGINE=MYISAM CHECKSUM=1 AUTO_INCREMENT=1 COMMENT='' DELAY_KEY_WRITE=1 ROW_FORMAT=DYNAMIC CHARSET=latin1 COLLATE=latin1_swedish_ci; +ALTER TABLE `raw_quest_taskgroup_tasks` ENGINE=MYISAM CHECKSUM=1 AUTO_INCREMENT=1 COMMENT='' DELAY_KEY_WRITE=1 ROW_FORMAT=DYNAMIC CHARSET=latin1 COLLATE=latin1_swedish_ci; +ALTER TABLE `raw_quest_taskgroup_taskupdates` ENGINE=MYISAM CHECKSUM=1 AUTO_INCREMENT=1 COMMENT='' DELAY_KEY_WRITE=1 ROW_FORMAT=DYNAMIC CHARSET=latin1 COLLATE=latin1_swedish_ci; +ALTER TABLE `raw_quest_taskgroups` ENGINE=MYISAM CHECKSUM=1 AUTO_INCREMENT=1 COMMENT='' DELAY_KEY_WRITE=1 ROW_FORMAT=DYNAMIC CHARSET=latin1 COLLATE=latin1_swedish_ci; +ALTER TABLE `raw_quests` ENGINE=MYISAM CHECKSUM=1 AUTO_INCREMENT=1 COMMENT='' DELAY_KEY_WRITE=1 ROW_FORMAT=DYNAMIC CHARSET=latin1 COLLATE=latin1_swedish_ci; +ALTER TABLE `raw_sounds` ENGINE=MYISAM CHECKSUM=1 AUTO_INCREMENT=1 COMMENT='' DELAY_KEY_WRITE=1 ROW_FORMAT=DYNAMIC CHARSET=latin1 COLLATE=latin1_swedish_ci; +ALTER TABLE `raw_spawn_appearance` ENGINE=MYISAM CHECKSUM=1 AUTO_INCREMENT=1 COMMENT='' DELAY_KEY_WRITE=1 ROW_FORMAT=DYNAMIC CHARSET=latin1 COLLATE=latin1_swedish_ci; +ALTER TABLE `raw_spawn_appearance_equip` ENGINE=MYISAM CHECKSUM=1 AUTO_INCREMENT=1 COMMENT='' DELAY_KEY_WRITE=1 ROW_FORMAT=DYNAMIC CHARSET=latin1 COLLATE=latin1_swedish_ci; +ALTER TABLE `raw_spawn_groups` ENGINE=MYISAM CHECKSUM=1 AUTO_INCREMENT=1 COMMENT='' DELAY_KEY_WRITE=1 ROW_FORMAT=DYNAMIC CHARSET=latin1 COLLATE=latin1_swedish_ci; +ALTER TABLE `raw_spawn_info` ENGINE=MYISAM CHECKSUM=1 AUTO_INCREMENT=1 COMMENT='' DELAY_KEY_WRITE=1 ROW_FORMAT=DYNAMIC CHARSET=latin1 COLLATE=latin1_swedish_ci; +ALTER TABLE `raw_spawn_signs` ENGINE=MYISAM CHECKSUM=1 AUTO_INCREMENT=1 COMMENT='' DELAY_KEY_WRITE=1 ROW_FORMAT=DYNAMIC CHARSET=latin1 COLLATE=latin1_swedish_ci; +ALTER TABLE `raw_spawn_unknowns` ENGINE=MYISAM CHECKSUM=1 AUTO_INCREMENT=1 COMMENT='' DELAY_KEY_WRITE=1 ROW_FORMAT=DYNAMIC CHARSET=latin1 COLLATE=latin1_swedish_ci; +ALTER TABLE `raw_spawn_widgets` ENGINE=MYISAM CHECKSUM=1 AUTO_INCREMENT=1 COMMENT='' DELAY_KEY_WRITE=1 ROW_FORMAT=DYNAMIC CHARSET=latin1 COLLATE=latin1_swedish_ci; +ALTER TABLE `raw_spawns` ENGINE=MYISAM CHECKSUM=1 AUTO_INCREMENT=1 COMMENT='' DELAY_KEY_WRITE=1 ROW_FORMAT=DYNAMIC CHARSET=latin1 COLLATE=latin1_swedish_ci; +ALTER TABLE `raw_spell_details` ENGINE=MYISAM CHECKSUM=1 AUTO_INCREMENT=1 COMMENT='' DELAY_KEY_WRITE=1 ROW_FORMAT=DYNAMIC CHARSET=latin1 COLLATE=latin1_swedish_ci; +ALTER TABLE `raw_spell_effects` ENGINE=MYISAM CHECKSUM=1 AUTO_INCREMENT=1 COMMENT='' DELAY_KEY_WRITE=1 ROW_FORMAT=DYNAMIC CHARSET=latin1 COLLATE=latin1_swedish_ci; +ALTER TABLE `raw_spell_levels` ENGINE=MYISAM CHECKSUM=1 AUTO_INCREMENT=1 COMMENT='' DELAY_KEY_WRITE=1 ROW_FORMAT=DYNAMIC CHARSET=latin1 COLLATE=latin1_swedish_ci; +ALTER TABLE `raw_spells` ENGINE=MYISAM CHECKSUM=1 AUTO_INCREMENT=1 COMMENT='' DELAY_KEY_WRITE=1 ROW_FORMAT=DYNAMIC CHARSET=latin1 COLLATE=latin1_swedish_ci; +ALTER TABLE `raw_zone_points` ENGINE=MYISAM CHECKSUM=1 AUTO_INCREMENT=1 COMMENT='' DELAY_KEY_WRITE=1 ROW_FORMAT=DYNAMIC CHARSET=latin1 COLLATE=latin1_swedish_ci; +ALTER TABLE `raw_zones` ENGINE=MYISAM CHECKSUM=1 AUTO_INCREMENT=1 COMMENT='' DELAY_KEY_WRITE=1 ROW_FORMAT=DYNAMIC CHARSET=latin1 COLLATE=latin1_swedish_ci; + +ALTER TABLE `raw_spell_details` ADD COLUMN `id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT FIRST,CHANGE `spell_id` `spell_id` INT(10) UNSIGNED DEFAULT '0' NOT NULL, CHANGE `tier` `tier` TINYINT(3) UNSIGNED DEFAULT '0' NOT NULL, DROP PRIMARY KEY, ADD PRIMARY KEY(`id`); +ALTER TABLE `raw_spell_details` ADD UNIQUE `NewIndex1` (`spell_id`, `tier`); + +ALTER TABLE `raw_spell_effects` ADD COLUMN `id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT FIRST,CHANGE `spell_id` `spell_id` INT(10) UNSIGNED DEFAULT '0' NOT NULL, CHANGE `tier` `tier` TINYINT(3) UNSIGNED DEFAULT '0' NOT NULL, CHANGE `index` `index` TINYINT(3) UNSIGNED DEFAULT '0' NOT NULL, DROP PRIMARY KEY, ADD PRIMARY KEY(`id`); +ALTER TABLE `raw_spell_effects` ADD UNIQUE `NewIndex1` (`spell_id`, `tier`, `index`); + +ALTER TABLE `raw_spell_levels` ADD COLUMN `id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT FIRST,CHANGE `spell_id` `spell_id` INT(10) UNSIGNED NOT NULL, CHANGE `tier` `tier` TINYINT(3) UNSIGNED DEFAULT '0' NOT NULL, CHANGE `adventure_class_id` `adventure_class_id` TINYINT(3) UNSIGNED DEFAULT '0' NOT NULL, CHANGE `tradeskill_class_id` `tradeskill_class_id` TINYINT(3) UNSIGNED DEFAULT '0' NOT NULL, DROP PRIMARY KEY, ADD PRIMARY KEY(`id`); +ALTER TABLE `raw_spell_levels` ADD UNIQUE `NewIndex1` (`spell_id`, `tier`, `adventure_class_id`, `tradeskill_class_id`); diff --git a/EQ2/devtools/PacketParser/sql_updates/parser_db_20130102.sql b/EQ2/devtools/PacketParser/sql_updates/parser_db_20130102.sql new file mode 100644 index 000000000..f3d386046 --- /dev/null +++ b/EQ2/devtools/PacketParser/sql_updates/parser_db_20130102.sql @@ -0,0 +1,28 @@ +ALTER TABLE `raw_item_descriptions` DROP KEY `NewIndex`, ADD UNIQUE `NewIndex` (`language_type`, `item_id`); +ALTER TABLE `raw_item_descriptions` ADD COLUMN `item_crc` INT(10) DEFAULT '0' NOT NULL AFTER `item_id`, CHANGE `item_id` `item_id` INT(10) DEFAULT '0' NOT NULL; +-- adding item type 20, 21, and 22 +ALTER TABLE `raw_items` CHANGE `item_type` `item_type` ENUM('Normal','Armor','Food','Bag','Weapon','Ranged','Shield','Spell Scroll','Recipe','Book','House','Thrown','Bauble','House Container','Adornment','Pattern Set','Armor Set','Item Set','Decoration','Marketplace','Dungeon Maker') CHARACTER SET latin1 COLLATE latin1_general_ci DEFAULT 'Normal' NOT NULL; +ALTER TABLE `raw_item_appearances` CHANGE `item_crc` `item_crc` INT(10) DEFAULT '0' NOT NULL; + + +CREATE TABLE `raw_item_details_marketplace_rewards` ( + `id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT, + `item_id` INT(10) NOT NULL DEFAULT '0', + `reward_item_id` INT(10) NOT NULL DEFAULT '0', + `reward_item_crc` INT(10) NOT NULL DEFAULT '0', + `reward_item_icon` SMALLINT(5) UNSIGNED NOT NULL DEFAULT '0', + `reward_item_name` VARCHAR(250) COLLATE latin1_general_ci DEFAULT '', + `language_type` TINYINT(3) NOT NULL DEFAULT '0', + PRIMARY KEY (`id`), + UNIQUE KEY `NewIndex1` (`item_id`,`reward_item_id`,`language_type`) +) ENGINE=MYISAM DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci; + + +CREATE TABLE `raw_item_details_decorations` ( + `id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT, + `item_id` INT(11) NOT NULL DEFAULT '0', + `decoration_name` VARCHAR(64) COLLATE latin1_general_ci NOT NULL DEFAULT '', + `language_type` TINYINT(3) UNSIGNED NOT NULL DEFAULT '1', + PRIMARY KEY (`id`), + UNIQUE KEY `NewIndex` (`item_id`,`language_type`) +) ENGINE=MYISAM DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci; diff --git a/EQ2/devtools/PacketParser/sql_updates/parser_db_20130110.sql b/EQ2/devtools/PacketParser/sql_updates/parser_db_20130110.sql new file mode 100644 index 000000000..70bc360e9 --- /dev/null +++ b/EQ2/devtools/PacketParser/sql_updates/parser_db_20130110.sql @@ -0,0 +1,56 @@ +DROP TABLE IF EXISTS `raw_item_details_marketplace`; +CREATE TABLE `raw_item_details_marketplace` ( + `id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT, + `marketplace_item_id` INT(10) NOT NULL DEFAULT '0', + `item_id` INT(10) NOT NULL DEFAULT '0', + `item_icon` SMALLINT(5) UNSIGNED NOT NULL DEFAULT '0', + `language_type` TINYINT(3) UNSIGNED NOT NULL DEFAULT '0', + PRIMARY KEY (`id`), + UNIQUE KEY `NewIndex1` (`marketplace_item_id`,`item_id`,`language_type`) +) ENGINE=MYISAM DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci; + +ALTER TABLE `raw_item_descriptions` + CHANGE `flags1` `flags1` SMALLINT (5) UNSIGNED DEFAULT '0' NOT NULL, + CHANGE `flags2` `flags2` SMALLINT (5) UNSIGNED DEFAULT '0' NOT NULL, + CHANGE `item_type` `item_type` TINYINT (3) UNSIGNED DEFAULT '0' NOT NULL ; + +DROP TABLE `raw_item_details_armorset`; +DROP TABLE `raw_item_sets`; +DROP TABLE `raw_item_sets_effects`; +DROP TABLE `raw_item_sets_stats`; +DROP TABLE `raw_item_set_effects`; +DROP TABLE `raw_item_set_items`; +DROP TABLE `raw_item_set_stats`; + + +ALTER TABLE `raw_items` + ADD COLUMN `attuned` TINYINT (3) UNSIGNED DEFAULT '0' NOT NULL AFTER `show_name`, + ADD COLUMN `stacklore` TINYINT (3) UNSIGNED DEFAULT '0' NOT NULL AFTER `evil_only`, + ADD COLUMN `flags_16384` TINYINT(3) UNSIGNED DEFAULT '0' NOT NULL AFTER `lore_equip`, + ADD COLUMN `flags_32768` TINYINT(3) UNSIGNED DEFAULT '0' NOT NULL AFTER `flags_16384`, + ADD COLUMN `unlocked` TINYINT(3) UNSIGNED DEFAULT '0' NOT NULL AFTER `appearance_only`, + ADD COLUMN `norepair` TINYINT(3) UNSIGNED DEFAULT '0' NOT NULL AFTER `unlocked`, + ADD COLUMN `flags2_64` TINYINT(3) UNSIGNED DEFAULT '0' NOT NULL AFTER `norepair`, + ADD COLUMN `flags2_256` TINYINT(3) UNSIGNED DEFAULT '0' NOT NULL AFTER `flags2_64`, + ADD COLUMN `item_crc` INT(10) NOT NULL DEFAULT '0' AFTER `item_id`, + CHANGE `item_id` `item_id` INT(10) DEFAULT '0' NOT NULL; + +ALTER TABLE `raw_item_itemset_items` ADD COLUMN `item_order` TINYINT(3) UNSIGNED DEFAULT '0' NOT NULL AFTER `item_name`, ADD COLUMN `master_item_id` INT(10) DEFAULT '0' NOT NULL AFTER `item_name`; +ALTER TABLE `raw_item_itemset_items` DROP KEY `SetItemIDX`, ADD UNIQUE `SetItemIDX` (`set_id`, `master_item_id`, `item_name`, `item_order`, `language_type`); + +ALTER TABLE `raw_item_itemset_bonus_stats` ADD COLUMN `master_item_id` INT(10) DEFAULT '0' NOT NULL AFTER `set_id`; +ALTER TABLE `raw_item_itemset_bonus_stats` DROP KEY `SetStatsIDX`, ADD UNIQUE `SetStatsIDX` (`set_id`, `master_item_id`, `items_needed`, `type`, `subtype`, `value`, `value2`, `stats_order`, `language_type`, `name`); + +ALTER TABLE `raw_item_itemset_bonus_effects` ADD COLUMN `master_item_id` INT(10) DEFAULT '0' NOT NULL AFTER `set_id`; +ALTER TABLE `raw_item_itemset_bonus_effects` DROP KEY `SetEffectsIDX`, ADD UNIQUE `SetEffectsIDX` (`set_id`, `master_item_id`, `items_needed`, `subbulletflag`, `description`, `language_type`); + +ALTER TABLE `raw_item_stats` DROP COLUMN `value2`, CHANGE `value` `value` FLOAT DEFAULT '0' NOT NULL; +ALTER TABLE `raw_item_itemset_bonus_stats` DROP COLUMN `value2`, CHANGE `value` `value` FLOAT DEFAULT '0' NOT NULL; + +ALTER TABLE `raw_items` + ADD COLUMN `adornment_slot1` TINYINT (3) UNSIGNED DEFAULT '255' NOT NULL AFTER `collectable`, + ADD COLUMN `adornment_slot2` TINYINT (3) UNSIGNED DEFAULT '255' NOT NULL AFTER `adornment_slot1`, + ADD COLUMN `adornment_slot3` TINYINT (3) UNSIGNED DEFAULT '255' NOT NULL AFTER `adornment_slot2`, + ADD COLUMN `adornment_slot4` TINYINT (3) UNSIGNED DEFAULT '255' NOT NULL AFTER `adornment_slot3`, + ADD COLUMN `adornment_slot5` TINYINT (3) UNSIGNED DEFAULT '255' NOT NULL AFTER `adornment_slot4`, + ADD COLUMN `adornment_slot6` TINYINT (3) UNSIGNED DEFAULT '255' NOT NULL AFTER `adornment_slot5`; diff --git a/EQ2/devtools/PacketParser/sql_updates/parser_db_changes.sql b/EQ2/devtools/PacketParser/sql_updates/parser_db_changes.sql new file mode 100644 index 000000000..9b6a5eb31 --- /dev/null +++ b/EQ2/devtools/PacketParser/sql_updates/parser_db_changes.sql @@ -0,0 +1,5 @@ +-- raw_spawn_info.populate_spawn_id is new field, replacing processed +alter table `raw_spawn_info` change `processed` `populate_spawn_id` int(10) UNSIGNED default '0' NOT NULL; + +-- raw_item_effects.name truncates +alter table `raw_item_effects` change `name` `name` varchar(255) character set latin1 collate latin1_swedish_ci default 'Unknown' NOT NULL; diff --git a/EQ2/devtools/PacketParser/sql_updates/parser_stats.sql b/EQ2/devtools/PacketParser/sql_updates/parser_stats.sql new file mode 100644 index 000000000..d95038a7c --- /dev/null +++ b/EQ2/devtools/PacketParser/sql_updates/parser_stats.sql @@ -0,0 +1,64 @@ +DROP TABLE IF EXISTS `parser_stats`; +CREATE TABLE `parser_stats` ( + `id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT, + `data_version` SMALLINT(5) UNSIGNED NOT NULL DEFAULT '0', + `log_file` VARCHAR(250) NOT NULL DEFAULT '', + `total_items` SMALLINT(5) UNSIGNED NOT NULL DEFAULT '0', + `unique_items` SMALLINT(5) UNSIGNED NOT NULL DEFAULT '0', + `new_items` SMALLINT(5) UNSIGNED NOT NULL DEFAULT '0', + `total_spawns` SMALLINT(5) UNSIGNED NOT NULL DEFAULT '0', + `unique_spawns` SMALLINT(5) UNSIGNED NOT NULL DEFAULT '0', + `new_spawns` SMALLINT(5) UNSIGNED NOT NULL DEFAULT '0', + `total_spells` SMALLINT(5) UNSIGNED NOT NULL DEFAULT '0', + `unique_spells` SMALLINT(5) UNSIGNED NOT NULL DEFAULT '0', + `new_spells` SMALLINT(5) UNSIGNED NOT NULL DEFAULT '0', + `total_specials` SMALLINT(5) UNSIGNED NOT NULL DEFAULT '0', + `unique_specials` SMALLINT(5) UNSIGNED NOT NULL DEFAULT '0', + `new_specials` SMALLINT(5) UNSIGNED NOT NULL DEFAULT '0', + `total_achievements` SMALLINT(5) UNSIGNED NOT NULL DEFAULT '0', + `unique_achievements` SMALLINT(5) UNSIGNED NOT NULL DEFAULT '0', + `new_achievements` SMALLINT(5) UNSIGNED NOT NULL DEFAULT '0', + `total_advancements` SMALLINT(5) UNSIGNED NOT NULL DEFAULT '0', + `unique_advancements` SMALLINT(5) UNSIGNED NOT NULL DEFAULT '0', + `new_advancements` SMALLINT(5) UNSIGNED NOT NULL DEFAULT '0', + `total_abilities` SMALLINT(5) UNSIGNED NOT NULL DEFAULT '0', + `unique_abilities` SMALLINT(5) UNSIGNED NOT NULL DEFAULT '0', + `new_abilities` SMALLINT(5) UNSIGNED NOT NULL DEFAULT '0', + `total_traditions` SMALLINT(5) UNSIGNED NOT NULL DEFAULT '0', + `unique_traditions` SMALLINT(5) UNSIGNED NOT NULL DEFAULT '0', + `new_traditions` SMALLINT(5) UNSIGNED NOT NULL DEFAULT '0', + `total_trainings` SMALLINT(5) UNSIGNED NOT NULL DEFAULT '0', + `unique_trainings` SMALLINT(5) UNSIGNED NOT NULL DEFAULT '0', + `new_trainings` SMALLINT(5) UNSIGNED NOT NULL DEFAULT '0', + `total_poi` SMALLINT(5) UNSIGNED NOT NULL DEFAULT '0', + `unique_poi` SMALLINT(5) UNSIGNED NOT NULL DEFAULT '0', + `new_poi` SMALLINT(5) UNSIGNED NOT NULL DEFAULT '0', + `total_locations` SMALLINT(5) UNSIGNED NOT NULL DEFAULT '0', + `unique_locations` SMALLINT(5) UNSIGNED NOT NULL DEFAULT '0', + `new_locations` SMALLINT(5) UNSIGNED NOT NULL DEFAULT '0', + `total_quests` SMALLINT(5) UNSIGNED NOT NULL DEFAULT '0', + `unique_quests` SMALLINT(5) UNSIGNED NOT NULL DEFAULT '0', + `new_quests` SMALLINT(5) UNSIGNED NOT NULL DEFAULT '0', + `total_factions` SMALLINT(5) UNSIGNED NOT NULL DEFAULT '0', + `unique_factions` SMALLINT(5) UNSIGNED NOT NULL DEFAULT '0', + `new_factions` SMALLINT(5) UNSIGNED NOT NULL DEFAULT '0', + `total_collections` SMALLINT(5) UNSIGNED NOT NULL DEFAULT '0', + `unique_collections` SMALLINT(5) UNSIGNED NOT NULL DEFAULT '0', + `new_collections` SMALLINT(5) UNSIGNED NOT NULL DEFAULT '0', + `total_aa_class` SMALLINT(5) UNSIGNED NOT NULL DEFAULT '0', + `unique_aa_class` SMALLINT(5) UNSIGNED NOT NULL DEFAULT '0', + `new_aa_class` SMALLINT(5) UNSIGNED NOT NULL DEFAULT '0', + `total_aa_subclass` SMALLINT(5) UNSIGNED NOT NULL DEFAULT '0', + `unique_aa_subclass` SMALLINT(5) UNSIGNED NOT NULL DEFAULT '0', + `new_aa_subclass` SMALLINT(5) UNSIGNED NOT NULL DEFAULT '0', + `total_aa_tso` SMALLINT(5) UNSIGNED NOT NULL DEFAULT '0', + `unique_aa_tso` SMALLINT(5) UNSIGNED NOT NULL DEFAULT '0', + `new_aa_tso` SMALLINT(5) UNSIGNED NOT NULL DEFAULT '0', + `total_titles` SMALLINT(5) UNSIGNED NOT NULL DEFAULT '0', + `unique_titles` SMALLINT(5) UNSIGNED NOT NULL DEFAULT '0', + `new_titles` SMALLINT(5) UNSIGNED NOT NULL DEFAULT '0', + `total_books` SMALLINT(5) UNSIGNED NOT NULL DEFAULT '0', + `unique_books` SMALLINT(5) UNSIGNED NOT NULL DEFAULT '0', + `new_books` SMALLINT(5) UNSIGNED NOT NULL DEFAULT '0', + PRIMARY KEY (`id`) +) ENGINE=MYISAM; diff --git a/EQ2/devtools/PacketParser/sql_updates/raw db updates.sql b/EQ2/devtools/PacketParser/sql_updates/raw db updates.sql new file mode 100644 index 000000000..260446422 --- /dev/null +++ b/EQ2/devtools/PacketParser/sql_updates/raw db updates.sql @@ -0,0 +1,8 @@ +ALTER TABLE `raw_items` CHANGE COLUMN `item_type` `item_type` ENUM('Normal','Armor','Food','Bag','Weapon','Ranged','Shield','Spell Scroll','Recipe','Book','House','Thrown','Bauble','House Container','Adornment','Pattern','Armor Set') NOT NULL DEFAULT 'Normal' AFTER `name`; +ALTER TABLE `raw_items` ADD `lore_equip` tinyint(3) unsigned DEFAULT '0' NOT NULL AFTER `evil_only`; +ALTER TABLE `raw_items` ADD `ornate` tinyint(3) unsigned DEFAULT '0' NOT NULL AFTER `lore_equip`; +ALTER TABLE `raw_items` ADD `heirloom` tinyint(3) unsigned DEFAULT '0' NOT NULL AFTER `ornate`; +ALTER TABLE `raw_items` ADD `appearance_only` tinyint(3) unsigned DEFAULT '0' NOT NULL AFTER `heirloom`; +ALTER TABLE `raw_item_descriptions` DROP COLUMN `flags`; +ALTER TABLE `raw_item_descriptions` ADD `flags1` tinyint(3) unsigned DEFAULT '0' NOT NULL AFTER `tier`; +ALTER TABLE `raw_item_descriptions` ADD `flags2` tinyint(3) unsigned DEFAULT '0' NOT NULL AFTER `flags1`; \ No newline at end of file diff --git a/EQ2/devtools/PacketParser/sql_updates/raw_achievements_fixes.sql b/EQ2/devtools/PacketParser/sql_updates/raw_achievements_fixes.sql new file mode 100644 index 000000000..9fcbe59d6 --- /dev/null +++ b/EQ2/devtools/PacketParser/sql_updates/raw_achievements_fixes.sql @@ -0,0 +1,39 @@ +DROP TABLE IF EXISTS `raw_achievements`; +CREATE TABLE `raw_achievements` ( + `id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT, + `achievement_id` INT(10) UNSIGNED NOT NULL DEFAULT '0', + `title` VARCHAR(50) COLLATE latin1_general_ci NOT NULL, + `uncompleted_text` VARCHAR(255) COLLATE latin1_general_ci DEFAULT NULL, + `completed_text` VARCHAR(255) COLLATE latin1_general_ci DEFAULT NULL, + `category` VARCHAR(50) COLLATE latin1_general_ci DEFAULT NULL, + `expansion` VARCHAR(50) COLLATE latin1_general_ci DEFAULT NULL, + `icon` SMALLINT(5) UNSIGNED NOT NULL DEFAULT '0', + `point_value` INT(10) UNSIGNED NOT NULL DEFAULT '0', + `qty_req` INT(10) UNSIGNED NOT NULL DEFAULT '0', + `hide_achievement` TINYINT(1) UNSIGNED NOT NULL DEFAULT '0', + `unknown3a` INT(10) UNSIGNED NOT NULL DEFAULT '0', + `unknown3b` INT(10) UNSIGNED NOT NULL DEFAULT '0', + `data_version` SMALLINT(5) UNSIGNED NOT NULL DEFAULT '0', + `log_file` VARCHAR(250) COLLATE latin1_general_ci NOT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `id` (`achievement_id`,`title`) +) ENGINE=MYISAM DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci; + +DROP TABLE IF EXISTS `raw_achievements_requirements`; +CREATE TABLE `raw_achievements_requirements` ( + `id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT, + `achievement_id` INT(10) UNSIGNED NOT NULL DEFAULT '0', + `name` VARCHAR(250) COLLATE latin1_general_ci DEFAULT NULL, + `qty_req` INT(10) UNSIGNED NOT NULL DEFAULT '0', + PRIMARY KEY (`id`), + UNIQUE KEY `NewIndex` (`name`) +) ENGINE=MYISAM DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci; + +DROP TABLE IF EXISTS `raw_achievements_rewards`; +CREATE TABLE `raw_achievements_rewards` ( + `id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT, + `achievement_id` INT(10) UNSIGNED NOT NULL DEFAULT '0', + `reward` VARCHAR(250) COLLATE latin1_general_ci DEFAULT '"', + PRIMARY KEY (`id`), + UNIQUE KEY `id` (`achievement_id`,`reward`) +) ENGINE=MYISAM DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci; diff --git a/EQ2/devtools/PacketParser/sql_updates/raw_achievements_versions.sql b/EQ2/devtools/PacketParser/sql_updates/raw_achievements_versions.sql new file mode 100644 index 000000000..f090b48d0 --- /dev/null +++ b/EQ2/devtools/PacketParser/sql_updates/raw_achievements_versions.sql @@ -0,0 +1 @@ +ALTER TABLE `raw_achievements` DROP KEY `id`, ADD UNIQUE `id` (`achievement_id`, `title`, `data_version`); diff --git a/EQ2/devtools/PacketParser/sql_updates/raw_adventure_list.sql b/EQ2/devtools/PacketParser/sql_updates/raw_adventure_list.sql new file mode 100644 index 000000000..cec9a67b7 --- /dev/null +++ b/EQ2/devtools/PacketParser/sql_updates/raw_adventure_list.sql @@ -0,0 +1,44 @@ +ALTER TABLE `parser_stats` + DROP COLUMN `total_aa_subclass`, + DROP COLUMN `new_aa_tso`, + DROP COLUMN `unique_aa_tso`, + DROP COLUMN `total_aa_tso`, + DROP COLUMN `new_aa_subclass`, + DROP COLUMN `unique_aa_subclass`, + CHANGE `total_aa_class` `total_aa` SMALLINT (5) UNSIGNED DEFAULT '0' NOT NULL, + CHANGE `unique_aa_class` `unique_aa` SMALLINT (5) UNSIGNED DEFAULT '0' NOT NULL, + CHANGE `new_aa_class` `new_aa` SMALLINT (5) UNSIGNED DEFAULT '0' NOT NULL ; + +DROP TABLE IF EXISTS `raw_aa_class`; +DROP TABLE IF EXISTS `raw_aa_subclass`; +DROP TABLE IF EXISTS `raw_aa_tso`; + +CREATE TABLE `raw_adventure_list` ( + `id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT, + `unknown6` INT(10) UNSIGNED NOT NULL DEFAULT '0', + `unknown7` TINYINT(3) UNSIGNED NOT NULL DEFAULT '0', + `spell_id` INT(10) UNSIGNED NOT NULL DEFAULT '0', + `unknown10` SMALLINT(3) UNSIGNED NOT NULL DEFAULT '0', + `name` VARCHAR(250) COLLATE latin1_general_ci DEFAULT NULL, + `description` VARCHAR(250) COLLATE latin1_general_ci DEFAULT NULL, + `icon` MEDIUMINT(5) UNSIGNED NOT NULL DEFAULT '0', + `icon2` MEDIUMINT(5) UNSIGNED NOT NULL DEFAULT '0', + `current_rank` TINYINT(3) UNSIGNED NOT NULL DEFAULT '0', + `max_rank` TINYINT(3) UNSIGNED NOT NULL DEFAULT '0', + `rank_cost` TINYINT(3) UNSIGNED NOT NULL DEFAULT '0', + `unknown11` TINYINT(3) UNSIGNED NOT NULL DEFAULT '0', + `class_name` VARCHAR(50) COLLATE latin1_general_ci DEFAULT NULL, + `points_req` TINYINT(3) UNSIGNED NOT NULL DEFAULT '0', + `subclass_name` VARCHAR(50) COLLATE latin1_general_ci DEFAULT NULL, + `icon_col` TINYINT(3) UNSIGNED NOT NULL DEFAULT '0', + `icon_row` TINYINT(3) UNSIGNED NOT NULL DEFAULT '0', + `line_title` VARCHAR(50) COLLATE latin1_general_ci DEFAULT NULL, + `unknown20` INT(10) UNSIGNED NOT NULL DEFAULT '0', + `global_req` SMALLINT(5) UNSIGNED NOT NULL DEFAULT '0', + `aa_type` VARCHAR(32) COLLATE latin1_general_ci DEFAULT NULL, + `data_version` SMALLINT(5) UNSIGNED NOT NULL DEFAULT '0', + `log_file` VARCHAR(250) COLLATE latin1_general_ci NOT NULL DEFAULT '', + PRIMARY KEY (`id`), + UNIQUE KEY `AdventureListIDX` (`spell_id`) +) ENGINE=MYISAM DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci; + diff --git a/EQ2/devtools/PacketParser/sql_updates/raw_arenas.sql b/EQ2/devtools/PacketParser/sql_updates/raw_arenas.sql new file mode 100644 index 000000000..97d9012ef --- /dev/null +++ b/EQ2/devtools/PacketParser/sql_updates/raw_arenas.sql @@ -0,0 +1,80 @@ +DROP TABLE IF EXISTS `raw_arena_levels`; +CREATE TABLE `raw_arena_levels` ( + `id` INT (10) UNSIGNED NOT NULL AUTO_INCREMENT, + `level_name` VARCHAR (32) NOT NULL DEFAULT '', + `level_value` TINYINT (3) UNSIGNED NOT NULL DEFAULT '0', + `data_version` SMALLINT (5) UNSIGNED NOT NULL DEFAULT '0', + `log_file` VARCHAR (250) NOT NULL DEFAULT '', + UNIQUE `ArenaLevelIDX` (`level_name`, `level_value`), + PRIMARY KEY (`id`) +) ENGINE = 'Default' COMMENT = '' ROW_FORMAT = DEFAULT ; + +DROP TABLE IF EXISTS `raw_arena_timers`; +CREATE TABLE `raw_arena_timers` ( + `id` INT (10) UNSIGNED NOT NULL AUTO_INCREMENT, + `time_type` TINYINT (3) UNSIGNED NOT NULL DEFAULT '0', + `time_name` VARCHAR (32) NOT NULL DEFAULT '', + `time_value` TINYINT (3) UNSIGNED NOT NULL DEFAULT '0', + `data_version` SMALLINT (5) UNSIGNED NOT NULL DEFAULT '0', + `log_file` VARCHAR (250) NOT NULL DEFAULT '', + UNIQUE `ArenaTimerIDX` (`time_type`, `time_name`, `time_value`), + PRIMARY KEY (`id`) +) ENGINE = 'Default' COMMENT = '' ROW_FORMAT = DEFAULT ; + +DROP TABLE IF EXISTS `raw_arena_types`; +CREATE TABLE `raw_arena_types` ( + `id` INT (10) UNSIGNED NOT NULL AUTO_INCREMENT, + `unknown2a` TINYINT (3) UNSIGNED NOT NULL DEFAULT '0', + `unknown2b` TINYINT (3) UNSIGNED NOT NULL DEFAULT '0', + `unknown2c` TINYINT (3) UNSIGNED NOT NULL DEFAULT '0', + `type_name` VARCHAR (32) NOT NULL DEFAULT '', + `unknown3a` TINYINT (3) UNSIGNED NOT NULL DEFAULT '0', + `unknown3b` TINYINT (3) UNSIGNED NOT NULL DEFAULT '0', + `data_version` SMALLINT (5) UNSIGNED NOT NULL DEFAULT '0', + `log_file` VARCHAR (250) NOT NULL DEFAULT '', + UNIQUE `ArenaTypesIDX` (`type_name`), + PRIMARY KEY (`id`) +) ENGINE = 'Default' COMMENT = '' ROW_FORMAT = DEFAULT ; + +DROP TABLE IF EXISTS `raw_arena_challenges`; +CREATE TABLE `raw_arena_challenges` ( + `id` INT (10) UNSIGNED NOT NULL AUTO_INCREMENT, + `challenge_name` VARCHAR (32) NOT NULL DEFAULT '', + `challenge_value` TINYINT (3) UNSIGNED NOT NULL DEFAULT '0', + `data_version` SMALLINT (5) UNSIGNED NOT NULL DEFAULT '0', + `log_file` VARCHAR (250) NOT NULL DEFAULT '', + UNIQUE `ArenaChallengeIDX` (`challenge_name`, `challenge_value`), + PRIMARY KEY (`id`) +) ENGINE = 'Default' COMMENT = '' ROW_FORMAT = DEFAULT ; + +DROP TABLE IF EXISTS `raw_arena_zones`; +CREATE TABLE `raw_arena_zones` ( + `id` INT (10) UNSIGNED NOT NULL AUTO_INCREMENT, + `type1` VARCHAR (32) NOT NULL DEFAULT '', + `unknown4a` TINYINT (3) UNSIGNED NOT NULL DEFAULT '0', + `unknown4b` TINYINT (3) UNSIGNED NOT NULL DEFAULT '0', + `file` VARCHAR (64) NOT NULL DEFAULT '', + `type2` VARCHAR (32) NOT NULL DEFAULT '', + `name` VARCHAR (32) NOT NULL DEFAULT '', + `description` TEXT, + `data_version` SMALLINT (5) UNSIGNED NOT NULL DEFAULT '0', + `log_file` VARCHAR (250) NOT NULL DEFAULT '', + UNIQUE `ArenaZonesIDX` (`type1`, `file`, `name`), + PRIMARY KEY (`id`) +) ENGINE = 'Default' COMMENT = '' ROW_FORMAT = DEFAULT ; + +DROP TABLE IF EXISTS `raw_arena_images`; +CREATE TABLE `raw_arena_images` ( + `id` INT (10) UNSIGNED NOT NULL AUTO_INCREMENT, + `arena_zone_id` TINYINT(3) NOT NULL DEFAULT '0', + `image_path` VARCHAR (250) NOT NULL DEFAULT '', + `x` TINYINT (3) UNSIGNED NOT NULL DEFAULT '0', + `y` TINYINT (3) UNSIGNED NOT NULL DEFAULT '0', + `x2` TINYINT (3) UNSIGNED NOT NULL DEFAULT '0', + `y2` TINYINT (3) UNSIGNED NOT NULL DEFAULT '0', + `data_version` SMALLINT (5) UNSIGNED NOT NULL DEFAULT '0', + `log_file` VARCHAR (250) NOT NULL DEFAULT '', + UNIQUE `ArenaImagesIDX` (`arena_zone_id`, `image_path`), + PRIMARY KEY (`id`) +) ENGINE = 'Default' COMMENT = '' ROW_FORMAT = DEFAULT ; + diff --git a/EQ2/devtools/PacketParser/sql_updates/raw_collections.sql b/EQ2/devtools/PacketParser/sql_updates/raw_collections.sql new file mode 100644 index 000000000..883ef5049 --- /dev/null +++ b/EQ2/devtools/PacketParser/sql_updates/raw_collections.sql @@ -0,0 +1,49 @@ +# HeidiSQL Dump +# +# -------------------------------------------------------- +# Host: 127.0.0.1 +# Database: parser +# Server version: 5.1.31-community +# Server OS: Win32 +# Target-Compatibility: MySQL 5.0 +# max_allowed_packet: 1048576 +# HeidiSQL version: 3.2 Revision: 1129 +# -------------------------------------------------------- + +/*!40100 SET CHARACTER SET latin1*/; +/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0*/; + + +# +# Table structure for table 'raw_collections' +# + +CREATE TABLE /*!32312 IF NOT EXISTS*/ `raw_collections` ( + `unknown` tinyint(3) unsigned NOT NULL, + `collection_name` varchar(512) NOT NULL, + `collection_category` varchar(512) NOT NULL, + `unknown2` tinyint(3) unsigned NOT NULL, + `unknown6` tinyint(3) unsigned NOT NULL, + `unknown7` tinyint(3) unsigned NOT NULL, + `unknown8` tinyint(3) unsigned NOT NULL, + `unknown9` tinyint(3) unsigned NOT NULL, + `unknown10` tinyint(3) unsigned NOT NULL, + `level` tinyint(3) unsigned NOT NULL, + `num_items` tinyint(3) unsigned NOT NULL, + `item_icon` smallint(5) unsigned NOT NULL, + `item_name` varchar(512) DEFAULT NULL, + `unknown4` tinyint(3) unsigned DEFAULT NULL, + `item_id` int(11) DEFAULT NULL, + `item_crc` int(11) DEFAULT NULL, + `log_file` varchar(255) DEFAULT '' +) ENGINE=InnoDB /*!40100 DEFAULT CHARSET=latin1*/; + + + +# +# Dumping data for table 'raw_collections' +# + +# (No data found.) + +/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS*/; diff --git a/EQ2/devtools/PacketParser/sql_updates/raw_collections1.sql b/EQ2/devtools/PacketParser/sql_updates/raw_collections1.sql new file mode 100644 index 000000000..8cf9f542c --- /dev/null +++ b/EQ2/devtools/PacketParser/sql_updates/raw_collections1.sql @@ -0,0 +1,23 @@ +DROP TABLE IF EXISTS `raw_collections`; +CREATE TABLE `raw_collections` ( + `id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT, + `unknown` TINYINT(3) UNSIGNED NOT NULL, + `collection_name` VARCHAR(512) NOT NULL, + `collection_category` VARCHAR(512) NOT NULL, + `unknown2` TINYINT(3) UNSIGNED NOT NULL, + `unknown6` TINYINT(3) UNSIGNED NOT NULL, + `unknown7` TINYINT(3) UNSIGNED NOT NULL, + `unknown8` TINYINT(3) UNSIGNED NOT NULL, + `unknown9` TINYINT(3) UNSIGNED NOT NULL, + `unknown10` TINYINT(3) UNSIGNED NOT NULL, + `level` TINYINT(3) UNSIGNED NOT NULL, + `num_items` TINYINT(3) UNSIGNED NOT NULL, + `item_icon` SMALLINT(5) UNSIGNED NOT NULL, + `item_name` VARCHAR(512) DEFAULT NULL, + `unknown4` TINYINT(3) UNSIGNED DEFAULT NULL, + `item_id` INT(11) DEFAULT NULL, + `item_crc` INT(11) DEFAULT NULL, + `log_file` VARCHAR(255) DEFAULT '', + `data_version` SMALLINT(5) UNSIGNED NOT NULL DEFAULT '0', + PRIMARY KEY (`id`) +) ENGINE=MYISAM DEFAULT CHARSET=latin1 CHECKSUM=1 DELAY_KEY_WRITE=1 ROW_FORMAT=DYNAMIC; diff --git a/EQ2/devtools/PacketParser/sql_updates/raw_commands.sql b/EQ2/devtools/PacketParser/sql_updates/raw_commands.sql new file mode 100644 index 000000000..7a5547fff --- /dev/null +++ b/EQ2/devtools/PacketParser/sql_updates/raw_commands.sql @@ -0,0 +1,14 @@ +CREATE TABLE `raw_commands` ( + `id` int(10) unsigned NOT NULL auto_increment, + `type` tinyint(3) unsigned default '1', + `command` varchar(64) collate latin1_general_ci NOT NULL, + `subcommand` varchar(64) collate latin1_general_ci NOT NULL, + `handler` int(10) unsigned NOT NULL default '0', + `required_status` smallint(5) NOT NULL default '0', + `data_version` smallint(5) unsigned NOT NULL default '0', + `log_file` varchar(250) collate latin1_general_ci NOT NULL default '', + PRIMARY KEY (`id`), + UNIQUE KEY `CommandIDX` (`command`) +) ENGINE=InnoDB DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci; + +ALTER TABLE `parser_stats` ADD COLUMN `total_commands` SMALLINT(5) UNSIGNED DEFAULT '0' NOT NULL AFTER `new_recipes_list`, ADD COLUMN `unique_commands` SMALLINT(5) UNSIGNED DEFAULT '0' NOT NULL AFTER `total_commands`, ADD COLUMN `new_commands` SMALLINT(5) UNSIGNED DEFAULT '0' NOT NULL AFTER `unique_commands`; diff --git a/EQ2/devtools/PacketParser/sql_updates/raw_factions.sql b/EQ2/devtools/PacketParser/sql_updates/raw_factions.sql new file mode 100644 index 000000000..175afefbe --- /dev/null +++ b/EQ2/devtools/PacketParser/sql_updates/raw_factions.sql @@ -0,0 +1,23 @@ +# HeidiSQL Dump +# +# -------------------------------------------------------- +# Host: 192.168.0.2 +# Database: parser +# Server version: 5.0.60-log +# Server OS: pc-linux-gnu +# Target-Compatibility: Same as source server (MySQL 5.0.60-log) +# max_allowed_packet: 16777216 +# HeidiSQL version: 3.1 RC1 Revision: 1064 +# -------------------------------------------------------- + +/*!40100 SET CHARACTER SET latin1*/; +/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0*/; + + +# +# Dumping data for table 'raw_factions' +# + +# (No data found.) + +/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS*/; diff --git a/EQ2/devtools/PacketParser/sql_updates/raw_factions1.sql b/EQ2/devtools/PacketParser/sql_updates/raw_factions1.sql new file mode 100644 index 000000000..6faa95efc --- /dev/null +++ b/EQ2/devtools/PacketParser/sql_updates/raw_factions1.sql @@ -0,0 +1,15 @@ +DROP TABLE IF EXISTS `raw_factions`; +CREATE TABLE `raw_factions` ( + `faction_id` INT(11) NOT NULL AUTO_INCREMENT, + `name` VARCHAR(512) DEFAULT NULL, + `category` VARCHAR(512) DEFAULT NULL, + `description` VARCHAR(512) DEFAULT NULL, + `unknown` VARCHAR(512) DEFAULT NULL, + `con` TINYINT(3) NOT NULL DEFAULT '0', + `percentage` TINYINT(3) UNSIGNED NOT NULL DEFAULT '0', + `unknown2` TINYINT(3) UNSIGNED NOT NULL DEFAULT '0', + `value` MEDIUMINT(5) NOT NULL DEFAULT '0', + `log_file` VARCHAR(255) DEFAULT '', + `data_version` SMALLINT(5) UNSIGNED NOT NULL DEFAULT '0', + PRIMARY KEY (`faction_id`) +) ENGINE=MYISAM DEFAULT CHARSET=latin1 CHECKSUM=1 DELAY_KEY_WRITE=1 ROW_FORMAT=DYNAMIC; diff --git a/EQ2/devtools/PacketParser/sql_updates/raw_item_appearances.sql b/EQ2/devtools/PacketParser/sql_updates/raw_item_appearances.sql new file mode 100644 index 000000000..51b04fcbf --- /dev/null +++ b/EQ2/devtools/PacketParser/sql_updates/raw_item_appearances.sql @@ -0,0 +1,3 @@ +ALTER TABLE `raw_item_appearances` + ADD COLUMN `item_crc` BIGINT (20) DEFAULT '0' NOT NULL AFTER `item_id`, + CHANGE `item_id` `item_id` INT (10) DEFAULT '0' NOT NULL ; diff --git a/EQ2/devtools/PacketParser/sql_updates/raw_item_details_armorset.sql b/EQ2/devtools/PacketParser/sql_updates/raw_item_details_armorset.sql new file mode 100644 index 000000000..de7afc634 --- /dev/null +++ b/EQ2/devtools/PacketParser/sql_updates/raw_item_details_armorset.sql @@ -0,0 +1,16 @@ +/* New Item Type 18 (Armor Set) table structure */ + +CREATE TABLE `raw_item_details_armorset` ( + `id` int(10) unsigned NOT NULL auto_increment, + `armorset_item_id` int(10) NOT NULL default '0', + `item_id` int(10) NOT NULL default '0', + `item_crc` int(10) NOT NULL default '0', + `item_icon` smallint(5) unsigned NOT NULL default '0', + `item_name` varchar(250) collate latin1_general_ci default '', + `unknown_piece` int(10) unsigned NOT NULL default '0', + `language_type` tinyint(3) NOT NULL default '0', + PRIMARY KEY (`id`) +) ENGINE=MyISAM; + + +alter table `raw_items` change `item_type` `item_type` enum('Normal','Armor','Food','Bag','Weapon','Ranged','Shield','Spell','Recipe','Book','House','Thrown','Bauble','House Container','Adornment','Pattern','Armor Set') default 'Normal' NOT NULL; diff --git a/EQ2/devtools/PacketParser/sql_updates/raw_item_details_book.sql b/EQ2/devtools/PacketParser/sql_updates/raw_item_details_book.sql new file mode 100644 index 000000000..db7d1b451 --- /dev/null +++ b/EQ2/devtools/PacketParser/sql_updates/raw_item_details_book.sql @@ -0,0 +1,39 @@ +# HeidiSQL Dump +# +# -------------------------------------------------------- +# Host: 127.0.0.1 +# Database: parser +# Server version: 5.1.31-community +# Server OS: Win32 +# Target-Compatibility: MySQL 5.0 +# max_allowed_packet: 1048576 +# HeidiSQL version: 3.2 Revision: 1129 +# -------------------------------------------------------- + +/*!40100 SET CHARACTER SET latin1*/; +/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0*/; + + +# +# Table structure for table 'raw_item_details_book' +# + +CREATE TABLE /*!32312 IF NOT EXISTS*/ `raw_item_details_book` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `item_id` int(11) NOT NULL DEFAULT '0', + `unknown1` tinyint(3) unsigned NOT NULL DEFAULT '0', + `unknown2` int(10) unsigned NOT NULL DEFAULT '0', + `language_type` tinyint(3) unsigned NOT NULL DEFAULT '1', + PRIMARY KEY (`id`), + UNIQUE KEY `ItemLanguageIDX` (`item_id`,`language_type`) +) ENGINE=MyISAM /*!40100 DEFAULT CHARSET=latin1*/; + + + +# +# Dumping data for table 'raw_item_details_book' +# + +# (No data found.) + +/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS*/; diff --git a/EQ2/devtools/PacketParser/sql_updates/raw_item_details_house_update.sql b/EQ2/devtools/PacketParser/sql_updates/raw_item_details_house_update.sql new file mode 100644 index 000000000..05c6ddcfd --- /dev/null +++ b/EQ2/devtools/PacketParser/sql_updates/raw_item_details_house_update.sql @@ -0,0 +1,12 @@ +DROP TABLE `raw_item_details_house`; +CREATE TABLE `raw_item_details_house` ( + `id` int(10) unsigned NOT NULL auto_increment, + `item_id` int(11) NOT NULL default '0', + `status_rent_reduction` int(10) unsigned NOT NULL default '0', + `coin_rent_reduction` float unsigned default '0' NOT NULL, + `house_unknown2` smallint(6) unsigned default '0' NOT NULL, + `house_only` tinyint(3) unsigned default '0' NOT NULL, + `language_type` tinyint(3) unsigned NOT NULL default '1', + PRIMARY KEY (`id`), + UNIQUE KEY `ItemLanguageIDX` (`item_id`,`language_type`) +) ENGINE=MyISAM; diff --git a/EQ2/devtools/PacketParser/sql_updates/raw_item_details_itemset.sql b/EQ2/devtools/PacketParser/sql_updates/raw_item_details_itemset.sql new file mode 100644 index 000000000..264a2ac8b --- /dev/null +++ b/EQ2/devtools/PacketParser/sql_updates/raw_item_details_itemset.sql @@ -0,0 +1,16 @@ +CREATE TABLE `raw_item_details_itemset` ( + `id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT, + `itemset_item_id` INT(10) NOT NULL DEFAULT '0', + `item_id` INT(10) NOT NULL DEFAULT '0', + `item_crc` INT(10) NOT NULL DEFAULT '0', + `item_icon` SMALLINT(5) UNSIGNED NOT NULL DEFAULT '0', + `item_unknown1` SMALLINT(5) UNSIGNED NOT NULL DEFAULT '0', + `item_unknown2` INT(10) NOT NULL DEFAULT '0', + `item_name` VARCHAR(250) NULL DEFAULT '' COLLATE 'latin1_general_ci', + `language_type` TINYINT(3) NOT NULL DEFAULT '0', + PRIMARY KEY (`id`) +) +COLLATE='latin1_general_ci' +ENGINE=MyISAM; + +ALTER TABLE `raw_items` CHANGE COLUMN `item_type` `item_type` ENUM('Normal','Armor','Food','Bag','Weapon','Ranged','Shield','Spell Scroll','Recipe','Book','House','Thrown','Bauble','House Container','Adornment','Pattern Set','Armor Set','Item Set') NOT NULL DEFAULT 'Normal' COLLATE 'latin1_general_ci' AFTER `name`; \ No newline at end of file diff --git a/EQ2/devtools/PacketParser/sql_updates/raw_item_details_pattern.sql b/EQ2/devtools/PacketParser/sql_updates/raw_item_details_pattern.sql new file mode 100644 index 000000000..4938141f5 --- /dev/null +++ b/EQ2/devtools/PacketParser/sql_updates/raw_item_details_pattern.sql @@ -0,0 +1,16 @@ + +/* New Item Type 17 (Pattern) table structure */ + +CREATE TABLE `raw_item_details_pattern` ( + `id` int(10) unsigned NOT NULL auto_increment, + `pattern_item_id` int(10) NOT NULL default '0', + `item_id` int(10) NOT NULL default '0', + `item_crc` int(10) NOT NULL default '0', + `item_icon` smallint(5) unsigned NOT NULL default '0', + `item_name` varchar(250) collate latin1_general_ci default '', + `language_type` tinyint(3) NOT NULL default '0', + PRIMARY KEY (`id`) +) ENGINE=MyISAM; + + +alter table `raw_items` change `item_type` `item_type` enum('Normal','Armor','Food','Bag','Weapon','Ranged','Shield','Spell','Recipe','Book','House','Thrown','Bauble','House Container','Adornment','Pattern') default 'Normal' NOT NULL; diff --git a/EQ2/devtools/PacketParser/sql_updates/raw_item_effects-fix.sql b/EQ2/devtools/PacketParser/sql_updates/raw_item_effects-fix.sql new file mode 100644 index 000000000..5b7f99e16 --- /dev/null +++ b/EQ2/devtools/PacketParser/sql_updates/raw_item_effects-fix.sql @@ -0,0 +1 @@ +alter table `raw_item_effects` change `name` `name` varchar(512) character set latin1 collate latin1_swedish_ci default 'Unknown' NOT NULL; \ No newline at end of file diff --git a/EQ2/devtools/PacketParser/sql_updates/raw_item_itemsets.sql b/EQ2/devtools/PacketParser/sql_updates/raw_item_itemsets.sql new file mode 100644 index 000000000..f3a6e789d --- /dev/null +++ b/EQ2/devtools/PacketParser/sql_updates/raw_item_itemsets.sql @@ -0,0 +1,56 @@ +-- Item Type 16 - Profile Items +ALTER TABLE `raw_items` CHANGE `item_type` `item_type` ENUM('Normal','Armor','Food','Bag','Weapon','Ranged','Shield','Spell Scroll','Recipe','Book','House','Thrown','Bauble','House Container','Adornment','Pattern Set','Armor Set','Item Set','Decoration','Marketplace','Dungeon Maker','Profile') CHARACTER SET latin1 COLLATE latin1_general_ci DEFAULT 'Normal' NOT NULL; + +DROP TABLE IF EXISTS `raw_item_itemsets`; +CREATE TABLE `raw_item_itemsets` ( + `id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT, + `set_name` VARCHAR(250) COLLATE latin1_general_ci NOT NULL DEFAULT 'Unknown', + `language_type` TINYINT(3) UNSIGNED NOT NULL DEFAULT '1', + PRIMARY KEY (`id`), + UNIQUE KEY `ItemSetIDX` (`set_name`, `language_type`) +) ENGINE=MYISAM DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci; + +DROP TABLE IF EXISTS `raw_item_itemset_items`; +CREATE TABLE `raw_item_itemset_items` ( + `id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT, + `set_id` INT(10) NOT NULL DEFAULT '0', + `unknown1` TINYINT(3) NOT NULL DEFAULT '0', + `unknown2` TINYINT(3) NOT NULL DEFAULT '0', + `item_name` VARCHAR(250) COLLATE latin1_general_ci NOT NULL DEFAULT 'Unknown', + `language_type` TINYINT(3) UNSIGNED NOT NULL DEFAULT '1', + PRIMARY KEY (`id`), + UNIQUE KEY `SetItemIDX` (`set_id`, `item_name`, `language_type`) +) ENGINE=MYISAM DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci; + +DROP TABLE IF EXISTS `raw_item_itemset_bonus_stats`; +CREATE TABLE `raw_item_itemset_bonus_stats` ( + `id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT, + `set_id` INT(10) NOT NULL DEFAULT '0', + `items_needed` TINYINT(3) NOT NULL DEFAULT '0', + `type` TINYINT(3) UNSIGNED NOT NULL DEFAULT '0', + `subtype` TINYINT(3) UNSIGNED NOT NULL DEFAULT '0', + `value` SMALLINT(5) NOT NULL DEFAULT '0', + `value2` FLOAT DEFAULT '0', + `name` VARCHAR(512) COLLATE latin1_general_ci DEFAULT '', + `unknown` TINYINT(3) UNSIGNED NOT NULL DEFAULT '0', + `stats_order` TINYINT(3) UNSIGNED NOT NULL DEFAULT '0', + `language_type` TINYINT(3) UNSIGNED NOT NULL DEFAULT '1', + PRIMARY KEY (`id`), + UNIQUE KEY `SetStatsIDX` (`set_id`,`items_needed`,`type`,`subtype`,`value`,`value2`,`stats_order`,`language_type`) +) ENGINE=MYISAM DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci; + +DROP TABLE IF EXISTS `raw_item_itemset_bonus_effects`; +CREATE TABLE `raw_item_itemset_bonus_effects` ( + `id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT, + `set_id` INT(10) UNSIGNED NOT NULL DEFAULT '0', + `items_needed` TINYINT(3) NOT NULL DEFAULT '0', + `subbulletflag` TINYINT(3) UNSIGNED NOT NULL DEFAULT '0', + `description` VARCHAR(512) COLLATE latin1_general_ci DEFAULT '', + `percentage` TINYINT(3) UNSIGNED NOT NULL DEFAULT '100', + `effect_order` TINYINT(3) UNSIGNED NOT NULL DEFAULT '0', + `language_type` TINYINT(3) UNSIGNED NOT NULL DEFAULT '1', + PRIMARY KEY (`id`), + UNIQUE KEY `SetEffectsIDX` (`set_id`, `description`, `effect_order`, `language_type`) +) ENGINE=MYISAM DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci; + +ALTER TABLE `raw_item_itemsets` ADD COLUMN `data_version` SMALLINT(5) UNSIGNED DEFAULT '0' NOT NULL AFTER `language_type`, ADD COLUMN `log_file` VARCHAR(250) DEFAULT '' NOT NULL AFTER `data_version`; diff --git a/EQ2/devtools/PacketParser/sql_updates/raw_items-fix.sql b/EQ2/devtools/PacketParser/sql_updates/raw_items-fix.sql new file mode 100644 index 000000000..72d4427b8 --- /dev/null +++ b/EQ2/devtools/PacketParser/sql_updates/raw_items-fix.sql @@ -0,0 +1,3 @@ +-- getting items.name truncated, setting description to `text` +alter table `raw_items` change `name` `name` varchar(512), change `description` `description` text NOT NULL; +alter table `raw_items` add column `processed` tinyint(3) UNSIGNED DEFAULT '0' NOT NULL; diff --git a/EQ2/devtools/PacketParser/sql_updates/raw_map_data.sql b/EQ2/devtools/PacketParser/sql_updates/raw_map_data.sql new file mode 100644 index 000000000..10474eaf8 --- /dev/null +++ b/EQ2/devtools/PacketParser/sql_updates/raw_map_data.sql @@ -0,0 +1,22 @@ +DROP TABLE IF EXISTS `raw_map_data`; +CREATE TABLE `raw_map_data` ( + `id` int(10) unsigned NOT NULL auto_increment, + `map_id` int(10) unsigned NOT NULL default '0', + `zone_name` varchar(128) NOT NULL, + `highest` float NOT NULL default '0', + `lowest` float NOT NULL default '0', + `explored_map_name` varchar(255) NOT NULL, + `unexplored_map_name` varchar(255) NOT NULL, + `bounds1_x` float NOT NULL default '0', + `bounds1_z` float NOT NULL default '0', + `bounds2_x` float NOT NULL default '0', + `bounds2_z` float NOT NULL default '0', + `bounds3_x` float NOT NULL default '0', + `bounds3_z` float NOT NULL default '0', + `bounds4_x` float NOT NULL default '0', + `bounds4_z` float NOT NULL default '0', + `explored_key` bigint(20) unsigned NOT NULL default '0', + `unexplored_key` bigint(20) unsigned NOT NULL default '0', + PRIMARY KEY (`id`), + UNIQUE KEY `MapIDX` (`map_id`,`zone_name`,`unexplored_map_name`,`explored_map_name`) +) ENGINE=InnoDB; diff --git a/EQ2/devtools/PacketParser/sql_updates/raw_merchants.sql b/EQ2/devtools/PacketParser/sql_updates/raw_merchants.sql new file mode 100644 index 000000000..d53913b87 --- /dev/null +++ b/EQ2/devtools/PacketParser/sql_updates/raw_merchants.sql @@ -0,0 +1,58 @@ +DROP TABLE IF EXISTS `raw_merchant_items`; + +DROP TABLE IF EXISTS `raw_merchants`; +CREATE TABLE `raw_merchants` ( + `id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT, + `spawn_id` INT(10) UNSIGNED NOT NULL DEFAULT '0', + `description` VARCHAR(250) COLLATE latin1_general_ci NOT NULL DEFAULT '', + `data_version` SMALLINT(5) UNSIGNED NOT NULL DEFAULT '0', + `log_file` VARCHAR(250) COLLATE latin1_general_ci NOT NULL DEFAULT '', + `language_type` TINYINT(3) UNSIGNED NOT NULL DEFAULT '0', + PRIMARY KEY (`id`), + UNIQUE KEY `MerchantsIDX` (`spawn_id`,`language_type`) +) ENGINE=MYISAM DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci; + +DROP TABLE IF EXISTS `raw_merchant_inventory`; +CREATE TABLE `raw_merchant_inventory` ( + `id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT, + `inventory_id` INT(10) UNSIGNED NOT NULL DEFAULT '0', + `item_name` VARCHAR(250) COLLATE latin1_general_ci NOT NULL DEFAULT '', + `price` BIGINT(20) UNSIGNED NOT NULL DEFAULT '0', + `item_id` INT(10) NOT NULL DEFAULT '0', + `unique_item_id` INT(10) NOT NULL DEFAULT '0', + `stack_size` SMALLINT(5) UNSIGNED NOT NULL DEFAULT '0', + `icon` SMALLINT(5) UNSIGNED NOT NULL DEFAULT '0', + `item_difficulty` TINYINT(3) UNSIGNED NOT NULL DEFAULT '0', + `level` TINYINT(3) UNSIGNED NOT NULL DEFAULT '0', + `unknown4a` TINYINT(3) UNSIGNED NOT NULL DEFAULT '0', + `unknown4b` TINYINT(3) UNSIGNED NOT NULL DEFAULT '0', + `quantity` SMALLINT(5) UNSIGNED NOT NULL DEFAULT '0', + `unknown5` TINYINT(3) UNSIGNED NOT NULL DEFAULT '0', + `tier` TINYINT(3) UNSIGNED NOT NULL DEFAULT '0', + `status` INT(10) UNSIGNED NOT NULL DEFAULT '0', + `item_id2` INT(10) NOT NULL DEFAULT '0', + `stack_size2` SMALLINT(5) UNSIGNED NOT NULL DEFAULT '0', + `status2` INT(10) UNSIGNED NOT NULL DEFAULT '0', + `station_cash` INT(10) UNSIGNED NOT NULL DEFAULT '0', + `unknown7a` TINYINT(3) UNSIGNED NOT NULL DEFAULT '0', + `unknown7b` TINYINT(3) UNSIGNED NOT NULL DEFAULT '0', + `num_tokens` TINYINT(3) UNSIGNED NOT NULL DEFAULT '0', + `description` TEXT COLLATE latin1_general_ci, + `data_version` SMALLINT(5) UNSIGNED NOT NULL DEFAULT '0', + PRIMARY KEY (`id`), + UNIQUE KEY `InventoryIDX` (`inventory_id`,`item_id`) +) ENGINE=MYISAM DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci; + +DROP TABLE IF EXISTS `raw_merchant_inventory_tokens`; +CREATE TABLE `raw_merchant_inventory_tokens` ( + `id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT, + `inventory_item_id` INT(10) UNSIGNED NOT NULL DEFAULT '0', + `token_icon` SMALLINT(5) UNSIGNED NOT NULL DEFAULT '0', + `token_quantity` SMALLINT(5) UNSIGNED NOT NULL DEFAULT '0', + `token_id` INT(10) NOT NULL DEFAULT '0', + `token_id2` INT(10) NOT NULL DEFAULT '0', + `token_name` VARCHAR(250) COLLATE latin1_general_ci NOT NULL DEFAULT '', + PRIMARY KEY (`id`), + KEY `TokenIDX` (`inventory_item_id`,`token_id`) +) ENGINE=MYISAM DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci; + diff --git a/EQ2/devtools/PacketParser/sql_updates/raw_mercs_pets.sql b/EQ2/devtools/PacketParser/sql_updates/raw_mercs_pets.sql new file mode 100644 index 000000000..c4ad503ff --- /dev/null +++ b/EQ2/devtools/PacketParser/sql_updates/raw_mercs_pets.sql @@ -0,0 +1,21 @@ +DROP TABLE IF EXISTS `raw_spawn_mercs`; +CREATE TABLE `raw_spawn_mercs` ( + `id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT, + `spawn_id` INT(10) UNSIGNED NOT NULL DEFAULT '0', + `mercenary_name` VARCHAR(64) COLLATE latin1_general_ci NOT NULL DEFAULT '', + `data_version` SMALLINT(5) UNSIGNED NOT NULL DEFAULT '0', + `log_file` VARCHAR(250) COLLATE latin1_general_ci NOT NULL DEFAULT '', + PRIMARY KEY (`id`), + UNIQUE KEY `NewIndex1` (`mercenary_name`) +) ENGINE=MYISAM DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci; + +DROP TABLE IF EXISTS `raw_spawn_pets`; +CREATE TABLE `raw_spawn_pets` ( + `id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT, + `spawn_id` INT(10) UNSIGNED NOT NULL DEFAULT '0', + `pet_name` VARCHAR(64) COLLATE latin1_general_ci NOT NULL DEFAULT '', + `data_version` SMALLINT(5) UNSIGNED NOT NULL DEFAULT '0', + `log_file` VARCHAR(250) COLLATE latin1_general_ci NOT NULL DEFAULT '', + PRIMARY KEY (`id`), + UNIQUE KEY `NewIndex1` (`pet_name`) +) ENGINE=MYISAM DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci; diff --git a/EQ2/devtools/PacketParser/sql_updates/raw_poi_locations.sql b/EQ2/devtools/PacketParser/sql_updates/raw_poi_locations.sql new file mode 100644 index 000000000..05023f26b --- /dev/null +++ b/EQ2/devtools/PacketParser/sql_updates/raw_poi_locations.sql @@ -0,0 +1,11 @@ +CREATE TABLE `raw_poi_locations`( + `id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT , + `unknown` SMALLINT(5) UNSIGNED NOT NULL DEFAULT '0' , + `x` FLOAT NOT NULL DEFAULT '0' , + `y` FLOAT NOT NULL DEFAULT '0' , + `z` FLOAT NOT NULL DEFAULT '0' , + `num_locations` SMALLINT(5) UNSIGNED NOT NULL DEFAULT '0' , + `data_version` INT(10) UNSIGNED NOT NULL DEFAULT '0' , + `log_file` VARCHAR(250) NOT NULL DEFAULT '' , + PRIMARY KEY (`id`) +) ENGINE=MyISAM; diff --git a/EQ2/devtools/PacketParser/sql_updates/raw_spawn_appearance_equip.sql b/EQ2/devtools/PacketParser/sql_updates/raw_spawn_appearance_equip.sql new file mode 100644 index 000000000..7fa956d94 --- /dev/null +++ b/EQ2/devtools/PacketParser/sql_updates/raw_spawn_appearance_equip.sql @@ -0,0 +1,2 @@ +ALTER TABLE `raw_spawn_appearance_equip` ADD COLUMN `data_version` SMALLINT(5) UNSIGNED DEFAULT '0' NOT NULL AFTER `highlight_blue`; +ALTER TABLE `raw_spawn_appearance_equip` DROP KEY `NewIndex`, ADD UNIQUE `EquipIDX` (`spawn_id`, `slot_id`, `data_version`, `language_type`); \ No newline at end of file diff --git a/EQ2/devtools/PacketParser/sql_updates/raw_spawn_info_popID.sql b/EQ2/devtools/PacketParser/sql_updates/raw_spawn_info_popID.sql new file mode 100644 index 000000000..125a0c5fe --- /dev/null +++ b/EQ2/devtools/PacketParser/sql_updates/raw_spawn_info_popID.sql @@ -0,0 +1 @@ +ALTER TABLE `raw_spawn_info` ADD COLUMN `populate_spawn_id` INT(10) UNSIGNED DEFAULT '0' NOT NULL AFTER `randomize`; diff --git a/EQ2/devtools/PacketParser/sql_updates/raw_spawn_info_updates.sql b/EQ2/devtools/PacketParser/sql_updates/raw_spawn_info_updates.sql new file mode 100644 index 000000000..76a2c3418 --- /dev/null +++ b/EQ2/devtools/PacketParser/sql_updates/raw_spawn_info_updates.sql @@ -0,0 +1,6 @@ +ALTER TABLE `raw_spawn_info` + CHANGE `level` `min_level` TINYINT (3) UNSIGNED DEFAULT '0' NOT NULL, + ADD COLUMN `max_level` TINYINT (3) UNSIGNED DEFAULT '0' NOT NULL AFTER `min_level`, + ADD COLUMN `min_size` SMALLINT (5) UNSIGNED DEFAULT '0' NOT NULL AFTER `pos_size`, + ADD COLUMN `max_size` SMALLINT (5) UNSIGNED DEFAULT '0' NOT NULL AFTER `min_size`, + ADD COLUMN `randomize` INT (10) UNSIGNED DEFAULT '0' NOT NULL AFTER `title`; diff --git a/EQ2/devtools/PacketParser/sql_updates/raw_spawns_20090726.sql b/EQ2/devtools/PacketParser/sql_updates/raw_spawns_20090726.sql new file mode 100644 index 000000000..e220f77df --- /dev/null +++ b/EQ2/devtools/PacketParser/sql_updates/raw_spawns_20090726.sql @@ -0,0 +1 @@ +ALTER TABLE `raw_spawns` ADD COLUMN `spawn_group_id` INT(10) DEFAULT '0' NOT NULL AFTER `spawn_id`; diff --git a/EQ2/devtools/PacketParser/sql_updates/raw_spell_visuals.sql b/EQ2/devtools/PacketParser/sql_updates/raw_spell_visuals.sql new file mode 100644 index 000000000..b7a75fb46 --- /dev/null +++ b/EQ2/devtools/PacketParser/sql_updates/raw_spell_visuals.sql @@ -0,0 +1,15 @@ +DROP TABLE IF EXISTS `raw_spell_visuals`; + +CREATE TABLE `raw_spell_visuals` ( + `id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT, + `spell_id` INT(10) UNSIGNED NOT NULL DEFAULT '0', + `num_targets` SMALLINT(5) UNSIGNED NOT NULL DEFAULT '0', + `spell_visual1` SMALLINT(5) UNSIGNED NOT NULL DEFAULT '0', + `spell_visual2` SMALLINT(5) UNSIGNED NOT NULL DEFAULT '0', + `cast_time` FLOAT NOT NULL DEFAULT '0', + `spell_level` SMALLINT(5) UNSIGNED NOT NULL DEFAULT '0', + `spell_tier` TINYINT(3) UNSIGNED NOT NULL DEFAULT '0', + `data_version` SMALLINT(5) UNSIGNED NOT NULL DEFAULT '0', + `log_file` VARCHAR(250) NOT NULL DEFAULT '', + PRIMARY KEY (`id`) +) ENGINE=MYISAM; diff --git a/EQ2/devtools/PacketParser/sql_updates/raw_spell_visuals_fix.sql b/EQ2/devtools/PacketParser/sql_updates/raw_spell_visuals_fix.sql new file mode 100644 index 000000000..8019fcc49 --- /dev/null +++ b/EQ2/devtools/PacketParser/sql_updates/raw_spell_visuals_fix.sql @@ -0,0 +1,4 @@ +-- changes to spell_visuals +ALTER TABLE `raw_spell_visuals` CHANGE `id` `id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT; +ALTER TABLE `raw_spell_visuals` DROP KEY `id_2`; +ALTER TABLE `raw_spell_visuals` DROP KEY `id`, ADD UNIQUE `VisIDX` (`spell_id`, `spell_visual1`, `spell_visual2`); diff --git a/EQ2/devtools/PacketParser/sql_updates/raw_spells, raw_items and raw_collections update.sql b/EQ2/devtools/PacketParser/sql_updates/raw_spells, raw_items and raw_collections update.sql new file mode 100644 index 000000000..c85e5d60b --- /dev/null +++ b/EQ2/devtools/PacketParser/sql_updates/raw_spells, raw_items and raw_collections update.sql @@ -0,0 +1,60 @@ +TRUNCATE `raw_item_appearances`; +TRUNCATE `raw_item_classes`; +TRUNCATE `raw_item_descriptions`; +TRUNCATE `raw_item_details_armor`; +TRUNCATE `raw_item_details_armorset`; +TRUNCATE `raw_item_details_bag`; +TRUNCATE `raw_item_details_bauble`; +TRUNCATE `raw_item_details_book`; +TRUNCATE `raw_item_details_food`; +TRUNCATE `raw_item_details_house`; +TRUNCATE `raw_item_details_house_container`; +TRUNCATE `raw_item_details_pattern`; +TRUNCATE `raw_item_details_range`; +TRUNCATE `raw_item_details_recipe`; +TRUNCATE `raw_item_details_recipe_items`; +TRUNCATE `raw_item_details_shield`; +TRUNCATE `raw_item_details_skills`; +TRUNCATE `raw_item_details_thrown`; +TRUNCATE `raw_item_details_weapon`; +TRUNCATE `raw_item_effects`; +TRUNCATE `raw_item_sets`; +TRUNCATE `raw_item_sets_effects`; +TRUNCATE `raw_item_sets_stats`; +TRUNCATE `raw_item_skill_classes`; +TRUNCATE `raw_item_stats`; +TRUNCATE `raw_items`; +ALTER TABLE `raw_items` ADD `item_id` INT DEFAULT '0' NOT NULL AFTER `id`; +ALTER TABLE `raw_items` CHANGE `id` `id` INT(10) UNSIGNED NOT NULL; +ALTER TABLE `raw_items` DROP PRIMARY KEY; +ALTER TABLE `raw_items` ADD PRIMARY KEY (`id`); +ALTER TABLE `raw_items` CHANGE `id` `id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT; +ALTER TABLE `raw_items` AUTO_INCREMENT = 1; +ALTER TABLE `raw_items` ADD UNIQUE `ItemIDLanguageTypeIDX` (`item_id`, `language_type`); +ALTER TABLE `raw_items` CHANGE `menu_type` `menu_type` SMALLINT UNSIGNED DEFAULT '3' NOT NULL; +ALTER TABLE `raw_items` DROP `sub_type`; + +TRUNCATE `raw_spell_details`; +TRUNCATE `raw_spell_effects`; +TRUNCATE `raw_spell_levels`; +TRUNCATE `raw_spells`; +ALTER TABLE `raw_spells` ADD `spell_id` INT UNSIGNED DEFAULT '0' NOT NULL AFTER `id`; +ALTER TABLE `raw_spells` CHANGE `id` `id` INT(10) UNSIGNED NOT NULL; +ALTER TABLE `raw_spells` DROP PRIMARY KEY; +ALTER TABLE `raw_spells` ADD PRIMARY KEY (`id`); +ALTER TABLE `raw_spells` CHANGE `id` `id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT; +ALTER TABLE `raw_spells` AUTO_INCREMENT = 1; +ALTER TABLE `raw_spells` ADD UNIQUE `SpellLanguageTypeIDX` (`spell_id`, `tier`, `language_type`); + +DELETE FROM `raw_collections`; +ALTER TABLE `raw_collections` ADD `id` INT UNSIGNED DEFAULT '0' NOT NULL FIRST; +ALTER TABLE `raw_collections` ADD PRIMARY KEY (`id`); +ALTER TABLE `raw_collections` CHANGE `id` `id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT; + + +ALTER TABLE `raw_items` ADD `data_version` SMALLINT(5) UNSIGNED NOT NULL AFTER `log_file`; +ALTER TABLE `raw_spells` ADD `data_version` SMALLINT(5) UNSIGNED NOT NULL AFTER `log_file`; +ALTER TABLE `raw_quests` ADD `data_version` SMALLINT(5) UNSIGNED NOT NULL AFTER `log_file`; +ALTER TABLE `raw_spawns` ADD `data_version` SMALLINT(5) UNSIGNED NOT NULL AFTER `log_file`; + +ALTER TABLE `raw_items` ADD COLUMN `populate_item_id` INT(10) UNSIGNED DEFAULT '0' NOT NULL AFTER `processed`; \ No newline at end of file diff --git a/EQ2/devtools/PacketParser/sql_updates/raw_spells.sql b/EQ2/devtools/PacketParser/sql_updates/raw_spells.sql new file mode 100644 index 000000000..d39294425 --- /dev/null +++ b/EQ2/devtools/PacketParser/sql_updates/raw_spells.sql @@ -0,0 +1,71 @@ +CREATE TABLE `raw_spells` ( + `id` int(10) unsigned NOT NULL, + `tier` tinyint(3) unsigned NOT NULL default '0', + `name` varchar(128) NOT NULL default ' ', + `description` varchar(512) NOT NULL default ' ', + `icon` smallint(5) unsigned NOT NULL default '0', + `icon2` smallint(5) unsigned NOT NULL default '0', + `icontype` smallint(5) unsigned NOT NULL default '0', + `type` tinyint(3) unsigned NOT NULL default '0', + `class_skill` int(10) unsigned NOT NULL default '0', + `mastery_skill` int(10) unsigned NOT NULL default '0', + `unknown2` tinyint(3) unsigned NOT NULL default '0', + `spell_text_color` int(10) unsigned NOT NULL default '0', + `friendly_spell` smallint(5) unsigned NOT NULL default '0', + `display_spell_tier` tinyint(3) unsigned NOT NULL default '0', + `duration_flag` tinyint(3) unsigned NOT NULL default '0', + `target` tinyint(3) unsigned NOT NULL default '0', + `group_spell` tinyint(3) unsigned NOT NULL default '0', + `language_type` tinyint(3) unsigned NOT NULL default '0', + `log_file` varchar(64) default NULL, + `processed` tinyint(3) unsigned NOT NULL default '0', + PRIMARY KEY (`id`,`tier`) +) ENGINE=InnoDB DEFAULT CHARSET=latin1; + + +CREATE TABLE `raw_spell_details` ( + `spell_id` int(10) unsigned NOT NULL default '0', + `tier` tinyint(3) unsigned NOT NULL default '0', + `health_req` smallint(5) unsigned NOT NULL default '0', + `health_upkeep` smallint(5) unsigned NOT NULL default '0', + `power_req` smallint(5) unsigned NOT NULL default '0', + `power_upkeep` smallint(5) unsigned NOT NULL default '0', + `req_concentration` smallint(5) unsigned NOT NULL default '0', + `cast_time` smallint(5) unsigned NOT NULL default '0', + `recovery` smallint(5) unsigned NOT NULL default '0', + `recast` float unsigned NOT NULL default '0', + `radius` float unsigned NOT NULL default '0', + `max_aoe_targets` smallint(5) unsigned NOT NULL default '0', + `unknown8` int(10) unsigned NOT NULL default '0', + `range` float unsigned NOT NULL default '0', + `duration1` int(10) unsigned NOT NULL default '0', + `duration2` int(10) unsigned NOT NULL default '0', + `unknown9` tinyint(3) unsigned NOT NULL default '0', + `unknown10` smallint(5) unsigned NOT NULL default '0', + `resistibility` float NOT NULL default '0', + `hit_bonus` float NOT NULL default '0', + `language_type` tinyint(3) unsigned NOT NULL default '0', + `log_file` varchar(64) default NULL, + PRIMARY KEY (`spell_id`,`tier`) +) ENGINE=InnoDB DEFAULT CHARSET=latin1; + +CREATE TABLE `raw_spell_effects` ( + `spell_id` int(10) unsigned NOT NULL default '0', + `tier` tinyint(3) unsigned NOT NULL default '0', + `subbulletflag` tinyint(3) unsigned NOT NULL default '0', + `effect` varchar(512) NOT NULL, + `percentage` tinyint(3) unsigned NOT NULL default '100', + `language_type` tinyint(3) unsigned NOT NULL default '0', + `log_file` varchar(64) default NULL, + PRIMARY KEY (`spell_id`,`tier`) +) ENGINE=InnoDB DEFAULT CHARSET=latin1; + +CREATE TABLE `raw_spell_levels` ( + `spell_id` int(10) unsigned NOT NULL, + `tier` tinyint(3) unsigned NOT NULL default '0', + `class_id` tinyint(3) unsigned NOT NULL default '0', + `spell_level` smallint(5) unsigned NOT NULL default '0', + `language_type` tinyint(3) unsigned NOT NULL default '0', + `log_file` varchar(64) default NULL, + PRIMARY KEY (`spell_id`,`tier`,`class_id`) +) ENGINE=InnoDB DEFAULT CHARSET=latin1; \ No newline at end of file diff --git a/EQ2/devtools/PacketParser/sql_updates/raw_spells2.sql b/EQ2/devtools/PacketParser/sql_updates/raw_spells2.sql new file mode 100644 index 000000000..63961f83f --- /dev/null +++ b/EQ2/devtools/PacketParser/sql_updates/raw_spells2.sql @@ -0,0 +1,5 @@ +ALTER TABLE `raw_spell_effects` ADD `index` TINYINT UNSIGNED DEFAULT '0' NOT NULL AFTER `tier`; +ALTER TABLE `raw_spell_effects` DROP PRIMARY KEY, ADD PRIMARY KEY (`spell_id`, `tier`, `index`); +ALTER TABLE `raw_spells` ADD `spell_visual` INT UNSIGNED DEFAULT '0' NOT NULL AFTER `group_spell`; +ALTER TABLE `raw_spells` ADD `success_message` VARCHAR(512) NULL AFTER `spell_visual`; +ALTER TABLE `raw_spells` ADD `effect_message` VARCHAR(512) NULL AFTER `success_message`; diff --git a/EQ2/devtools/PacketParser/sql_updates/raw_spells3.sql b/EQ2/devtools/PacketParser/sql_updates/raw_spells3.sql new file mode 100644 index 000000000..5117e3bfc --- /dev/null +++ b/EQ2/devtools/PacketParser/sql_updates/raw_spells3.sql @@ -0,0 +1,5 @@ +ALTER TABLE `raw_spell_details` CHANGE `unknown8` `min_range` int(10) unsigned NOT NULL DEFAULT '0'; +ALTER TABLE `raw_spells` CHANGE `unknown2` `min_class_skill_req` mediumint(0) unsigned NOT NULL DEFAULT '0'; +ALTER TABLE `raw_spells` ADD `unknown1` tinyint(3) unsigned NOT NULL DEFAULT '0' AFTER `effect_message`; +ALTER TABLE `raw_spells` ADD `can_effect_raid` tinyint(3) unsigned NOT NULL DEFAULT '0' AFTER `unknown1`; +ALTER TABLE `raw_spells` ADD `affect_only_group_members` tinyint(3) unsigned NOT NULL DEFAULT '0' AFTER `can_effect_raid`; diff --git a/EQ2/devtools/PacketParser/sql_updates/raw_spells4.sql b/EQ2/devtools/PacketParser/sql_updates/raw_spells4.sql new file mode 100644 index 000000000..e5202d1cb --- /dev/null +++ b/EQ2/devtools/PacketParser/sql_updates/raw_spells4.sql @@ -0,0 +1,4 @@ +ALTER TABLE `raw_spells` ADD `aa_spell_id` int(10) unsigned NOT NULL DEFAULT '0' AFTER `spell_id`; +ALTER TABLE `raw_spells` ADD `aa_unknown` smallint(5) unsigned NOT NULL DEFAULT '0' AFTER `affect_only_group_members`; +ALTER TABLE `raw_spells` ADD `aa_unknown2` tinyint(3) unsigned NOT NULL DEFAULT '0' AFTER `aa_unknown`; +ALTER TABLE `raw_spells` DROP INDEX `SpellLanguageTypeIDX`, ADD UNIQUE `SpellLanguageTypeIDX` (`spell_id`, `tier`, `aa_spell_id`); diff --git a/EQ2/devtools/PacketParser/sql_updates/raw_spells5.sql b/EQ2/devtools/PacketParser/sql_updates/raw_spells5.sql new file mode 100644 index 000000000..b2217354c --- /dev/null +++ b/EQ2/devtools/PacketParser/sql_updates/raw_spells5.sql @@ -0,0 +1,40 @@ +DROP TABLE IF EXISTS `raw_spells`; +CREATE TABLE `raw_spells` ( + `id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT, + `spell_id` INT(10) UNSIGNED NOT NULL DEFAULT '0', + `aa_spell_id` INT(10) UNSIGNED NOT NULL DEFAULT '0', + `tier` TINYINT(3) UNSIGNED NOT NULL DEFAULT '0', + `name` VARCHAR(128) DEFAULT '', + `description` VARCHAR(512) DEFAULT '', + `icon` SMALLINT(5) UNSIGNED NOT NULL DEFAULT '0', + `icon2` SMALLINT(5) UNSIGNED NOT NULL DEFAULT '0', + `icontype` SMALLINT(5) UNSIGNED NOT NULL DEFAULT '0', + `type` TINYINT(3) UNSIGNED NOT NULL DEFAULT '0', + `class_skill` INT(10) UNSIGNED NOT NULL DEFAULT '0', + `mastery_skill` INT(10) UNSIGNED NOT NULL DEFAULT '0', + `min_class_skill_req` MEDIUMINT(8) UNSIGNED NOT NULL DEFAULT '0', + `spell_text_color` INT(10) UNSIGNED NOT NULL DEFAULT '0', + `friendly_spell` SMALLINT(5) UNSIGNED NOT NULL DEFAULT '0', + `display_spell_tier` TINYINT(3) UNSIGNED NOT NULL DEFAULT '0', + `duration_flag` TINYINT(3) UNSIGNED NOT NULL DEFAULT '0', + `target` TINYINT(3) UNSIGNED NOT NULL DEFAULT '0', + `group_spell` TINYINT(3) UNSIGNED NOT NULL DEFAULT '0', + `spell_visual` INT(10) UNSIGNED NOT NULL DEFAULT '0', + `success_message` VARCHAR(512) DEFAULT NULL, + `effect_message` VARCHAR(512) DEFAULT NULL, + `unknown1` TINYINT(3) UNSIGNED NOT NULL DEFAULT '0', + `can_effect_raid` TINYINT(3) UNSIGNED NOT NULL DEFAULT '0', + `affect_only_group_members` TINYINT(3) UNSIGNED NOT NULL DEFAULT '0', + `aa_unknown` TINYINT(3) UNSIGNED NOT NULL DEFAULT '0', + `aa_unknown2` TINYINT(3) UNSIGNED NOT NULL DEFAULT '0', + `uses_remaining` SMALLINT(5) UNSIGNED NOT NULL DEFAULT '0', + `damage_remaining` SMALLINT(5) UNSIGNED NOT NULL DEFAULT '0', + `unknown3` TINYINT(3) UNSIGNED NOT NULL DEFAULT '0', + `unknown4` TINYINT(3) UNSIGNED NOT NULL DEFAULT '0', + `language_type` TINYINT(3) UNSIGNED NOT NULL DEFAULT '0', + `log_file` VARCHAR(255) DEFAULT NULL, + `data_version` SMALLINT(5) UNSIGNED NOT NULL, + `processed` TINYINT(3) UNSIGNED NOT NULL DEFAULT '0', + PRIMARY KEY (`id`), + UNIQUE KEY `SpellLanguageTypeIDX` (`spell_id`,`tier`) +) ENGINE=MYISAM DEFAULT CHARSET=latin1 CHECKSUM=1 DELAY_KEY_WRITE=1 ROW_FORMAT=DYNAMIC; diff --git a/EQ2/devtools/PacketParser/sql_updates/raw_spells_aa.sql b/EQ2/devtools/PacketParser/sql_updates/raw_spells_aa.sql new file mode 100644 index 000000000..0b03d6af0 --- /dev/null +++ b/EQ2/devtools/PacketParser/sql_updates/raw_spells_aa.sql @@ -0,0 +1,18 @@ +DROP TABLE IF EXISTS `raw_spells_aa`; +CREATE TABLE `raw_spells_aa` ( + `id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT, + `aa_spell_id` INT(10) UNSIGNED NOT NULL DEFAULT '0', + `spell_id` INT(10) UNSIGNED NOT NULL DEFAULT '0', + `tier` TINYINT(3) UNSIGNED NOT NULL DEFAULT '0', + `unknown` SMALLINT(5) UNSIGNED NOT NULL DEFAULT '0', + `icon` SMALLINT(5) UNSIGNED NOT NULL DEFAULT '0', + `icon2` SMALLINT(5) UNSIGNED NOT NULL DEFAULT '0', + `current_rank` TINYINT(3) UNSIGNED NOT NULL DEFAULT '0', + `max_rank` TINYINT(3) UNSIGNED NOT NULL DEFAULT '0', + `rank_cost` TINYINT(3) UNSIGNED NOT NULL DEFAULT '0', + `unknown2` TINYINT(3) UNSIGNED NOT NULL DEFAULT '0', + `language_type` TINYINT(3) UNSIGNED NOT NULL DEFAULT '0', + `log_file` VARCHAR(255) DEFAULT '', + PRIMARY KEY (`id`), + UNIQUE KEY `NewIndex1` (`aa_spell_id`,`language_type`) +) ENGINE=MYISAM CHECKSUM=1 AUTO_INCREMENT=1 COMMENT='' DELAY_KEY_WRITE=1 ROW_FORMAT=DYNAMIC CHARSET=latin1 COLLATE=latin1_swedish_ci; \ No newline at end of file diff --git a/EQ2/devtools/PacketParser/sql_updates/raw_titles.sql b/EQ2/devtools/PacketParser/sql_updates/raw_titles.sql new file mode 100644 index 000000000..65644c2b3 --- /dev/null +++ b/EQ2/devtools/PacketParser/sql_updates/raw_titles.sql @@ -0,0 +1,10 @@ +DROP TABLE IF EXISTS `raw_titles`; +CREATE TABLE `raw_titles`( + `id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT, + `title_name` VARCHAR(250) NOT NULL DEFAULT '', + `prefix` TINYINT(1) UNSIGNED NOT NULL DEFAULT '0', + `data_version` SMALLINT(5) UNSIGNED NOT NULL DEFAULT '0', + `log_file` VARCHAR(250) NOT NULL DEFAULT '', + PRIMARY KEY (`id`), + UNIQUE KEY `NewIndex` (`title_name`) +) ENGINE=MYISAM; diff --git a/EQ2/devtools/PacketParser/sql_updates/raw_traditions.sql b/EQ2/devtools/PacketParser/sql_updates/raw_traditions.sql new file mode 100644 index 000000000..4d165c218 --- /dev/null +++ b/EQ2/devtools/PacketParser/sql_updates/raw_traditions.sql @@ -0,0 +1 @@ +ALTER TABLE `raw_traditions` ADD COLUMN `section_name` VARCHAR(250) DEFAULT '' NOT NULL AFTER `name`; \ No newline at end of file diff --git a/EQ2/distrib/DISTRIB.bat b/EQ2/distrib/DISTRIB.bat new file mode 100644 index 000000000..0381f08d8 --- /dev/null +++ b/EQ2/distrib/DISTRIB.bat @@ -0,0 +1,114 @@ +@echo off +REM ############################################################################ +REM # +REM # B A S I C C O N F I G U R A T I O N +REM # +REM ############################################################################ + +REM Set the following value to the full drive\path location of your EQ2Emu server +REM Or, leave as .\ to copy into the distrib folder (recommended) + +set serverpath=.\ + +REM ############################################################################ +REM # +REM # D O N O T M O D I F Y B E Y O N D T H I S P O I N T +REM # +REM ############################################################################ +if not exist %serverpath%\nul GOTO badpath + +:menu +cls +ECHO. +ECHO ############################################################################ +ECHO # +ECHO # S E R V E R D I S T R I B U T I O N B U I L D E R +ECHO # +ECHO ############################################################################ +ECHO. +ECHO Choose from the following options: +ECHO. +ECHO 1. Copy Required Server Files +ECHO 2. Copy Latest LUA Scripts +ECHO 3. Show SQL Patches +ECHO. +ECHO [S]ettings / [E]xit +ECHO. +set /p l= Choice: +if %l%==* goto error +if %l%==1 goto copyserver +if %l%==2 goto copylua +if %l%==3 goto showpatch +if %l%==s goto settings +if %l%==S goto settings +if %l%==e goto quit +if %l%==E goto quit +if %l%==q goto quit +if %l%==Q goto quit +if %l%==x goto quit +if %l%==X goto quit +if %l%==0 goto quit +goto error + + +:copyserver +xcopy ..\structs\*.xml %serverpath% /y /d +xcopy ..\bin\eq2emu-world.exe %serverpath% /y /d +xcopy ..\configs\*.ini %serverpath% /y /d +xcopy ..\utils\zlib.dll %serverpath% /y /d +xcopy ..\docs\changelog.txt %serverpath% /y /d +set copydone=1 +PAUSE +goto menu + + +:copylua +echo Not Yet. +PAUSE +goto menu + +:showpatch +echo Not Yet. +PAUSE +goto menu + + +:settings +cls +ECHO. +ECHO ############################################################################ +ECHO # +ECHO # S E T T I N G S +ECHO # +ECHO ############################################################################ +ECHO. +ECHO Server Path = %serverpath% +ECHO. +PAUSE +GOTO menu + + +:error +CLS +ECHO. +ECHO. +ECHO [ERROR] An error has occured, you will be directed back to the +ECHO [ERROR] main menu. +PAUSE +GOTO menu + +:badpath +ECHO. +ECHO. +ECHO [ERROR] An error has occured; Bad Path Set: %serverpath% +ECHO [ERROR] You will be directed back to the main menu. +PAUSE +GOTO menu + + +:quit +ECHO. +if .%copydone%==.1 echo Don't forget to edit your LoginServer.ini and world_db.ini! +ECHO. +set copydone= + diff --git a/EQ2/distrib/readme.txt b/EQ2/distrib/readme.txt new file mode 100644 index 000000000..7cc6df16d --- /dev/null +++ b/EQ2/distrib/readme.txt @@ -0,0 +1,4 @@ +DISTRIB.bat is a tool that will automatically build a folder containing the latest SVN files needed to run EQ2Emulator. + +Just run the batch file, then copy the ./trunk/distrib folder anywhere you want to run your world, +or run it from distrib! We don't mind! diff --git a/EQ2/docs/COPYING.txt b/EQ2/docs/COPYING.txt new file mode 100644 index 000000000..94a9ed024 --- /dev/null +++ b/EQ2/docs/COPYING.txt @@ -0,0 +1,674 @@ + GNU GENERAL PUBLIC LICENSE + Version 3, 29 June 2007 + + Copyright (C) 2007 Free Software Foundation, Inc. + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The GNU General Public License is a free, copyleft license for +software and other kinds of works. + + The licenses for most software and other practical works are designed +to take away your freedom to share and change the works. By contrast, +the GNU General Public License is intended to guarantee your freedom to +share and change all versions of a program--to make sure it remains free +software for all its users. We, the Free Software Foundation, use the +GNU General Public License for most of our software; it applies also to +any other work released this way by its authors. You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +them if you wish), that you receive source code or can get it if you +want it, that you can change the software or use pieces of it in new +free programs, and that you know you can do these things. + + To protect your rights, we need to prevent others from denying you +these rights or asking you to surrender the rights. Therefore, you have +certain responsibilities if you distribute copies of the software, or if +you modify it: responsibilities to respect the freedom of others. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must pass on to the recipients the same +freedoms that you received. You must make sure that they, too, receive +or can get the source code. And you must show them these terms so they +know their rights. + + Developers that use the GNU GPL protect your rights with two steps: +(1) assert copyright on the software, and (2) offer you this License +giving you legal permission to copy, distribute and/or modify it. + + For the developers' and authors' protection, the GPL clearly explains +that there is no warranty for this free software. For both users' and +authors' sake, the GPL requires that modified versions be marked as +changed, so that their problems will not be attributed erroneously to +authors of previous versions. + + Some devices are designed to deny users access to install or run +modified versions of the software inside them, although the manufacturer +can do so. This is fundamentally incompatible with the aim of +protecting users' freedom to change the software. The systematic +pattern of such abuse occurs in the area of products for individuals to +use, which is precisely where it is most unacceptable. Therefore, we +have designed this version of the GPL to prohibit the practice for those +products. If such problems arise substantially in other domains, we +stand ready to extend this provision to those domains in future versions +of the GPL, as needed to protect the freedom of users. + + Finally, every program is threatened constantly by software patents. +States should not allow patents to restrict development and use of +software on general-purpose computers, but in those that do, we wish to +avoid the special danger that patents applied to a free program could +make it effectively proprietary. To prevent this, the GPL assures that +patents cannot be used to render the program non-free. + + The precise terms and conditions for copying, distribution and +modification follow. + + TERMS AND CONDITIONS + + 0. Definitions. + + "This License" refers to version 3 of the GNU General Public License. + + "Copyright" also means copyright-like laws that apply to other kinds of +works, such as semiconductor masks. + + "The Program" refers to any copyrightable work licensed under this +License. Each licensee is addressed as "you". "Licensees" and +"recipients" may be individuals or organizations. + + To "modify" a work means to copy from or adapt all or part of the work +in a fashion requiring copyright permission, other than the making of an +exact copy. The resulting work is called a "modified version" of the +earlier work or a work "based on" the earlier work. + + A "covered work" means either the unmodified Program or a work based +on the Program. + + To "propagate" a work means to do anything with it that, without +permission, would make you directly or secondarily liable for +infringement under applicable copyright law, except executing it on a +computer or modifying a private copy. Propagation includes copying, +distribution (with or without modification), making available to the +public, and in some countries other activities as well. + + To "convey" a work means any kind of propagation that enables other +parties to make or receive copies. Mere interaction with a user through +a computer network, with no transfer of a copy, is not conveying. + + An interactive user interface displays "Appropriate Legal Notices" +to the extent that it includes a convenient and prominently visible +feature that (1) displays an appropriate copyright notice, and (2) +tells the user that there is no warranty for the work (except to the +extent that warranties are provided), that licensees may convey the +work under this License, and how to view a copy of this License. If +the interface presents a list of user commands or options, such as a +menu, a prominent item in the list meets this criterion. + + 1. Source Code. + + The "source code" for a work means the preferred form of the work +for making modifications to it. "Object code" means any non-source +form of a work. + + A "Standard Interface" means an interface that either is an official +standard defined by a recognized standards body, or, in the case of +interfaces specified for a particular programming language, one that +is widely used among developers working in that language. + + The "System Libraries" of an executable work include anything, other +than the work as a whole, that (a) is included in the normal form of +packaging a Major Component, but which is not part of that Major +Component, and (b) serves only to enable use of the work with that +Major Component, or to implement a Standard Interface for which an +implementation is available to the public in source code form. A +"Major Component", in this context, means a major essential component +(kernel, window system, and so on) of the specific operating system +(if any) on which the executable work runs, or a compiler used to +produce the work, or an object code interpreter used to run it. + + The "Corresponding Source" for a work in object code form means all +the source code needed to generate, install, and (for an executable +work) run the object code and to modify the work, including scripts to +control those activities. However, it does not include the work's +System Libraries, or general-purpose tools or generally available free +programs which are used unmodified in performing those activities but +which are not part of the work. For example, Corresponding Source +includes interface definition files associated with source files for +the work, and the source code for shared libraries and dynamically +linked subprograms that the work is specifically designed to require, +such as by intimate data communication or control flow between those +subprograms and other parts of the work. + + The Corresponding Source need not include anything that users +can regenerate automatically from other parts of the Corresponding +Source. + + The Corresponding Source for a work in source code form is that +same work. + + 2. Basic Permissions. + + All rights granted under this License are granted for the term of +copyright on the Program, and are irrevocable provided the stated +conditions are met. This License explicitly affirms your unlimited +permission to run the unmodified Program. The output from running a +covered work is covered by this License only if the output, given its +content, constitutes a covered work. This License acknowledges your +rights of fair use or other equivalent, as provided by copyright law. + + You may make, run and propagate covered works that you do not +convey, without conditions so long as your license otherwise remains +in force. You may convey covered works to others for the sole purpose +of having them make modifications exclusively for you, or provide you +with facilities for running those works, provided that you comply with +the terms of this License in conveying all material for which you do +not control copyright. Those thus making or running the covered works +for you must do so exclusively on your behalf, under your direction +and control, on terms that prohibit them from making any copies of +your copyrighted material outside their relationship with you. + + Conveying under any other circumstances is permitted solely under +the conditions stated below. Sublicensing is not allowed; section 10 +makes it unnecessary. + + 3. Protecting Users' Legal Rights From Anti-Circumvention Law. + + No covered work shall be deemed part of an effective technological +measure under any applicable law fulfilling obligations under article +11 of the WIPO copyright treaty adopted on 20 December 1996, or +similar laws prohibiting or restricting circumvention of such +measures. + + When you convey a covered work, you waive any legal power to forbid +circumvention of technological measures to the extent such circumvention +is effected by exercising rights under this License with respect to +the covered work, and you disclaim any intention to limit operation or +modification of the work as a means of enforcing, against the work's +users, your or third parties' legal rights to forbid circumvention of +technological measures. + + 4. Conveying Verbatim Copies. + + You may convey verbatim copies of the Program's source code as you +receive it, in any medium, provided that you conspicuously and +appropriately publish on each copy an appropriate copyright notice; +keep intact all notices stating that this License and any +non-permissive terms added in accord with section 7 apply to the code; +keep intact all notices of the absence of any warranty; and give all +recipients a copy of this License along with the Program. + + You may charge any price or no price for each copy that you convey, +and you may offer support or warranty protection for a fee. + + 5. Conveying Modified Source Versions. + + You may convey a work based on the Program, or the modifications to +produce it from the Program, in the form of source code under the +terms of section 4, provided that you also meet all of these conditions: + + a) The work must carry prominent notices stating that you modified + it, and giving a relevant date. + + b) The work must carry prominent notices stating that it is + released under this License and any conditions added under section + 7. This requirement modifies the requirement in section 4 to + "keep intact all notices". + + c) You must license the entire work, as a whole, under this + License to anyone who comes into possession of a copy. This + License will therefore apply, along with any applicable section 7 + additional terms, to the whole of the work, and all its parts, + regardless of how they are packaged. This License gives no + permission to license the work in any other way, but it does not + invalidate such permission if you have separately received it. + + d) If the work has interactive user interfaces, each must display + Appropriate Legal Notices; however, if the Program has interactive + interfaces that do not display Appropriate Legal Notices, your + work need not make them do so. + + A compilation of a covered work with other separate and independent +works, which are not by their nature extensions of the covered work, +and which are not combined with it such as to form a larger program, +in or on a volume of a storage or distribution medium, is called an +"aggregate" if the compilation and its resulting copyright are not +used to limit the access or legal rights of the compilation's users +beyond what the individual works permit. Inclusion of a covered work +in an aggregate does not cause this License to apply to the other +parts of the aggregate. + + 6. Conveying Non-Source Forms. + + You may convey a covered work in object code form under the terms +of sections 4 and 5, provided that you also convey the +machine-readable Corresponding Source under the terms of this License, +in one of these ways: + + a) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by the + Corresponding Source fixed on a durable physical medium + customarily used for software interchange. + + b) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by a + written offer, valid for at least three years and valid for as + long as you offer spare parts or customer support for that product + model, to give anyone who possesses the object code either (1) a + copy of the Corresponding Source for all the software in the + product that is covered by this License, on a durable physical + medium customarily used for software interchange, for a price no + more than your reasonable cost of physically performing this + conveying of source, or (2) access to copy the + Corresponding Source from a network server at no charge. + + c) Convey individual copies of the object code with a copy of the + written offer to provide the Corresponding Source. This + alternative is allowed only occasionally and noncommercially, and + only if you received the object code with such an offer, in accord + with subsection 6b. + + d) Convey the object code by offering access from a designated + place (gratis or for a charge), and offer equivalent access to the + Corresponding Source in the same way through the same place at no + further charge. You need not require recipients to copy the + Corresponding Source along with the object code. If the place to + copy the object code is a network server, the Corresponding Source + may be on a different server (operated by you or a third party) + that supports equivalent copying facilities, provided you maintain + clear directions next to the object code saying where to find the + Corresponding Source. Regardless of what server hosts the + Corresponding Source, you remain obligated to ensure that it is + available for as long as needed to satisfy these requirements. + + e) Convey the object code using peer-to-peer transmission, provided + you inform other peers where the object code and Corresponding + Source of the work are being offered to the general public at no + charge under subsection 6d. + + A separable portion of the object code, whose source code is excluded +from the Corresponding Source as a System Library, need not be +included in conveying the object code work. + + A "User Product" is either (1) a "consumer product", which means any +tangible personal property which is normally used for personal, family, +or household purposes, or (2) anything designed or sold for incorporation +into a dwelling. In determining whether a product is a consumer product, +doubtful cases shall be resolved in favor of coverage. For a particular +product received by a particular user, "normally used" refers to a +typical or common use of that class of product, regardless of the status +of the particular user or of the way in which the particular user +actually uses, or expects or is expected to use, the product. A product +is a consumer product regardless of whether the product has substantial +commercial, industrial or non-consumer uses, unless such uses represent +the only significant mode of use of the product. + + "Installation Information" for a User Product means any methods, +procedures, authorization keys, or other information required to install +and execute modified versions of a covered work in that User Product from +a modified version of its Corresponding Source. The information must +suffice to ensure that the continued functioning of the modified object +code is in no case prevented or interfered with solely because +modification has been made. + + If you convey an object code work under this section in, or with, or +specifically for use in, a User Product, and the conveying occurs as +part of a transaction in which the right of possession and use of the +User Product is transferred to the recipient in perpetuity or for a +fixed term (regardless of how the transaction is characterized), the +Corresponding Source conveyed under this section must be accompanied +by the Installation Information. But this requirement does not apply +if neither you nor any third party retains the ability to install +modified object code on the User Product (for example, the work has +been installed in ROM). + + The requirement to provide Installation Information does not include a +requirement to continue to provide support service, warranty, or updates +for a work that has been modified or installed by the recipient, or for +the User Product in which it has been modified or installed. Access to a +network may be denied when the modification itself materially and +adversely affects the operation of the network or violates the rules and +protocols for communication across the network. + + Corresponding Source conveyed, and Installation Information provided, +in accord with this section must be in a format that is publicly +documented (and with an implementation available to the public in +source code form), and must require no special password or key for +unpacking, reading or copying. + + 7. Additional Terms. + + "Additional permissions" are terms that supplement the terms of this +License by making exceptions from one or more of its conditions. +Additional permissions that are applicable to the entire Program shall +be treated as though they were included in this License, to the extent +that they are valid under applicable law. If additional permissions +apply only to part of the Program, that part may be used separately +under those permissions, but the entire Program remains governed by +this License without regard to the additional permissions. + + When you convey a copy of a covered work, you may at your option +remove any additional permissions from that copy, or from any part of +it. (Additional permissions may be written to require their own +removal in certain cases when you modify the work.) You may place +additional permissions on material, added by you to a covered work, +for which you have or can give appropriate copyright permission. + + Notwithstanding any other provision of this License, for material you +add to a covered work, you may (if authorized by the copyright holders of +that material) supplement the terms of this License with terms: + + a) Disclaiming warranty or limiting liability differently from the + terms of sections 15 and 16 of this License; or + + b) Requiring preservation of specified reasonable legal notices or + author attributions in that material or in the Appropriate Legal + Notices displayed by works containing it; or + + c) Prohibiting misrepresentation of the origin of that material, or + requiring that modified versions of such material be marked in + reasonable ways as different from the original version; or + + d) Limiting the use for publicity purposes of names of licensors or + authors of the material; or + + e) Declining to grant rights under trademark law for use of some + trade names, trademarks, or service marks; or + + f) Requiring indemnification of licensors and authors of that + material by anyone who conveys the material (or modified versions of + it) with contractual assumptions of liability to the recipient, for + any liability that these contractual assumptions directly impose on + those licensors and authors. + + All other non-permissive additional terms are considered "further +restrictions" within the meaning of section 10. If the Program as you +received it, or any part of it, contains a notice stating that it is +governed by this License along with a term that is a further +restriction, you may remove that term. If a license document contains +a further restriction but permits relicensing or conveying under this +License, you may add to a covered work material governed by the terms +of that license document, provided that the further restriction does +not survive such relicensing or conveying. + + If you add terms to a covered work in accord with this section, you +must place, in the relevant source files, a statement of the +additional terms that apply to those files, or a notice indicating +where to find the applicable terms. + + Additional terms, permissive or non-permissive, may be stated in the +form of a separately written license, or stated as exceptions; +the above requirements apply either way. + + 8. Termination. + + You may not propagate or modify a covered work except as expressly +provided under this License. Any attempt otherwise to propagate or +modify it is void, and will automatically terminate your rights under +this License (including any patent licenses granted under the third +paragraph of section 11). + + However, if you cease all violation of this License, then your +license from a particular copyright holder is reinstated (a) +provisionally, unless and until the copyright holder explicitly and +finally terminates your license, and (b) permanently, if the copyright +holder fails to notify you of the violation by some reasonable means +prior to 60 days after the cessation. + + Moreover, your license from a particular copyright holder is +reinstated permanently if the copyright holder notifies you of the +violation by some reasonable means, this is the first time you have +received notice of violation of this License (for any work) from that +copyright holder, and you cure the violation prior to 30 days after +your receipt of the notice. + + Termination of your rights under this section does not terminate the +licenses of parties who have received copies or rights from you under +this License. If your rights have been terminated and not permanently +reinstated, you do not qualify to receive new licenses for the same +material under section 10. + + 9. Acceptance Not Required for Having Copies. + + You are not required to accept this License in order to receive or +run a copy of the Program. Ancillary propagation of a covered work +occurring solely as a consequence of using peer-to-peer transmission +to receive a copy likewise does not require acceptance. However, +nothing other than this License grants you permission to propagate or +modify any covered work. These actions infringe copyright if you do +not accept this License. Therefore, by modifying or propagating a +covered work, you indicate your acceptance of this License to do so. + + 10. Automatic Licensing of Downstream Recipients. + + Each time you convey a covered work, the recipient automatically +receives a license from the original licensors, to run, modify and +propagate that work, subject to this License. You are not responsible +for enforcing compliance by third parties with this License. + + An "entity transaction" is a transaction transferring control of an +organization, or substantially all assets of one, or subdividing an +organization, or merging organizations. If propagation of a covered +work results from an entity transaction, each party to that +transaction who receives a copy of the work also receives whatever +licenses to the work the party's predecessor in interest had or could +give under the previous paragraph, plus a right to possession of the +Corresponding Source of the work from the predecessor in interest, if +the predecessor has it or can get it with reasonable efforts. + + You may not impose any further restrictions on the exercise of the +rights granted or affirmed under this License. For example, you may +not impose a license fee, royalty, or other charge for exercise of +rights granted under this License, and you may not initiate litigation +(including a cross-claim or counterclaim in a lawsuit) alleging that +any patent claim is infringed by making, using, selling, offering for +sale, or importing the Program or any portion of it. + + 11. Patents. + + A "contributor" is a copyright holder who authorizes use under this +License of the Program or a work on which the Program is based. The +work thus licensed is called the contributor's "contributor version". + + A contributor's "essential patent claims" are all patent claims +owned or controlled by the contributor, whether already acquired or +hereafter acquired, that would be infringed by some manner, permitted +by this License, of making, using, or selling its contributor version, +but do not include claims that would be infringed only as a +consequence of further modification of the contributor version. For +purposes of this definition, "control" includes the right to grant +patent sublicenses in a manner consistent with the requirements of +this License. + + Each contributor grants you a non-exclusive, worldwide, royalty-free +patent license under the contributor's essential patent claims, to +make, use, sell, offer for sale, import and otherwise run, modify and +propagate the contents of its contributor version. + + In the following three paragraphs, a "patent license" is any express +agreement or commitment, however denominated, not to enforce a patent +(such as an express permission to practice a patent or covenant not to +sue for patent infringement). To "grant" such a patent license to a +party means to make such an agreement or commitment not to enforce a +patent against the party. + + If you convey a covered work, knowingly relying on a patent license, +and the Corresponding Source of the work is not available for anyone +to copy, free of charge and under the terms of this License, through a +publicly available network server or other readily accessible means, +then you must either (1) cause the Corresponding Source to be so +available, or (2) arrange to deprive yourself of the benefit of the +patent license for this particular work, or (3) arrange, in a manner +consistent with the requirements of this License, to extend the patent +license to downstream recipients. "Knowingly relying" means you have +actual knowledge that, but for the patent license, your conveying the +covered work in a country, or your recipient's use of the covered work +in a country, would infringe one or more identifiable patents in that +country that you have reason to believe are valid. + + If, pursuant to or in connection with a single transaction or +arrangement, you convey, or propagate by procuring conveyance of, a +covered work, and grant a patent license to some of the parties +receiving the covered work authorizing them to use, propagate, modify +or convey a specific copy of the covered work, then the patent license +you grant is automatically extended to all recipients of the covered +work and works based on it. + + A patent license is "discriminatory" if it does not include within +the scope of its coverage, prohibits the exercise of, or is +conditioned on the non-exercise of one or more of the rights that are +specifically granted under this License. You may not convey a covered +work if you are a party to an arrangement with a third party that is +in the business of distributing software, under which you make payment +to the third party based on the extent of your activity of conveying +the work, and under which the third party grants, to any of the +parties who would receive the covered work from you, a discriminatory +patent license (a) in connection with copies of the covered work +conveyed by you (or copies made from those copies), or (b) primarily +for and in connection with specific products or compilations that +contain the covered work, unless you entered into that arrangement, +or that patent license was granted, prior to 28 March 2007. + + Nothing in this License shall be construed as excluding or limiting +any implied license or other defenses to infringement that may +otherwise be available to you under applicable patent law. + + 12. No Surrender of Others' Freedom. + + If conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot convey a +covered work so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you may +not convey it at all. For example, if you agree to terms that obligate you +to collect a royalty for further conveying from those to whom you convey +the Program, the only way you could satisfy both those terms and this +License would be to refrain entirely from conveying the Program. + + 13. Use with the GNU Affero General Public License. + + Notwithstanding any other provision of this License, you have +permission to link or combine any covered work with a work licensed +under version 3 of the GNU Affero General Public License into a single +combined work, and to convey the resulting work. The terms of this +License will continue to apply to the part which is the covered work, +but the special requirements of the GNU Affero General Public License, +section 13, concerning interaction through a network will apply to the +combination as such. + + 14. Revised Versions of this License. + + The Free Software Foundation may publish revised and/or new versions of +the GNU General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + + Each version is given a distinguishing version number. If the +Program specifies that a certain numbered version of the GNU General +Public License "or any later version" applies to it, you have the +option of following the terms and conditions either of that numbered +version or of any later version published by the Free Software +Foundation. If the Program does not specify a version number of the +GNU General Public License, you may choose any version ever published +by the Free Software Foundation. + + If the Program specifies that a proxy can decide which future +versions of the GNU General Public License can be used, that proxy's +public statement of acceptance of a version permanently authorizes you +to choose that version for the Program. + + Later license versions may give you additional or different +permissions. However, no additional obligations are imposed on any +author or copyright holder as a result of your choosing to follow a +later version. + + 15. Disclaimer of Warranty. + + THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY +APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT +HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY +OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, +THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM +IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF +ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. Limitation of Liability. + + IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS +THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY +GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE +USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF +DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD +PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), +EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF +SUCH DAMAGES. + + 17. Interpretation of Sections 15 and 16. + + If the disclaimer of warranty and limitation of liability provided +above cannot be given local legal effect according to their terms, +reviewing courts shall apply local law that most closely approximates +an absolute waiver of all civil liability in connection with the +Program, unless a warranty or assumption of liability accompanies a +copy of the Program in return for a fee. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +state the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . + +Also add information on how to contact you by electronic and paper mail. + + If the program does terminal interaction, make it output a short +notice like this when it starts in an interactive mode: + + Copyright (C) + This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, your program's commands +might be different; for a GUI interface, you would use an "about box". + + You should also get your employer (if you work as a programmer) or school, +if any, to sign a "copyright disclaimer" for the program, if necessary. +For more information on this, and how to apply and follow the GNU GPL, see +. + + The GNU General Public License does not permit incorporating your program +into proprietary programs. If your program is a subroutine library, you +may consider it more useful to permit linking proprietary applications with +the library. If this is what you want to do, use the GNU Lesser General +Public License instead of this License. But first, please read +. diff --git a/EQ2/docs/ChangeLog.txt b/EQ2/docs/ChangeLog.txt new file mode 100644 index 000000000..a5fefaff8 --- /dev/null +++ b/EQ2/docs/ChangeLog.txt @@ -0,0 +1,1862 @@ +EQ2Emulator 0.0.1+ Changelog (Started on July 26, 2007 15:58) +-------------------------------------------------------- +==07/19/2010: +JohnAdams: Relocated Dev SVN to JA's hardware. Test Commit (no code changes) + +==06/06/2010: +Scatman: Bug fix for item values caused by my Type2 commit. + +==06/05/2010: +Rhas: Added commands for /loot_corpse, /motd and /random +Rhas: Hotbar fix for items and equipped slots. +Zcoretri: Updated PacketParser code to parse latest logs. +Zcoretri: Fixed typos in WorldStructs.xml + +==06/03/2010: +Scatman: Packet values can now have two possible types. Use Type2="" to designate a 2nd type and set the 'use_second_type' flag to true in the PacketStruct::SetDataByName functions to use the second type. +Scatman: Minor version ;) + +==06/01/2010: +Rhas: Added command /use_equipped_item to use items from inventory or a charm slot. +Rhas: Added command /cancel_maintained. This will cancel friendly spells in your maintained window. + +==05/31/2010: +Zcoretri: Modified ItemStructs.xml - Added support for float values in item stats + +==05/29/2010: +Rhas: Fixed the issue where you continue to drown even after leaving the water or swimming to the top. +Rhas: Fixed the display of the level column in the broker window. +Rhas: Fixed bug where you could equip any item in any slot. Fixed it so if you try to equip an item in an invalid slot it does nothing and leaves the item in your inventory. + +==05/23/2010: +Scatman: Fixed a bug with my previous fix when moving full stacks of items. +Scatman: Joining a group will now apply all the group's buffs to you. +Scatman: Leaving a group will remove all buffs received from the group. +Scatman: NPCs will no longer face away from its opponent during combat and will constantly face its most hated target. + +==05/22/2010: +Scatman: Fixed bug #383. Moving stacks of items into an empty inventory spot will now work properly. + +==05/20/2010: +Scatman: Fixed a bug with food/drink items being damaged upon death. + +==05/06/2010: +Scatman: Fixed a bug loading characters with no created date. +Scatman: Potential crash fix of a rare situation when writing to the logfile. +Scatman: x64 commit. + +==4/14/2010: +JohnAdams: Commit x64bit binary +Scatman: Updated LoginServer.ini + +==4/12/2010: +Scatman: Fixed a bug with loading items caused from a previous commit. Thanks JA for the heads up. + +==4/11/2010: +Scatman: Fixed a bug causing a player to sheath their weapon if combat was started using a hostile spell. + +==4/07/2010: +Scatman: Fixed a few issues with the itemsearch window. Namely implememnted the ability to search for items using an item stat. + +==4/4/2010: +JohnAdams: Implemented "hot zone" xp modifier. Set value in zones.xp_modifier to be a float > 0. 0 and 1 = no modifier, 1.5 is 50% bonus, .5 = 1/2 xp in zone. + Thanks to Scatman for the C++ lesson! + +==4/3/2010: +JohnAdams: Commit x64bit binary + +==3/29/2010: +elcapototal: fixed bug 314. +elcapototal: fixed bug 339 by adding the missing drowning update code and changing the drowning logic correspondingly. +elcapototal: semi-fixed bug 350 by setting account age to character age. +elcapototal: fixed bug 353 by decouplying AddFighter to InCombat(true) and then checking the attacker's class. priests and mages will not start autoattack after a hostile spell but scouts and warriors will. +Scatman: Fixed a bug in guilds where initiates could not be given permission to receive guild points. +Scatman: Fixed a bug with items displaying classes improperly. How long has that been like that? :P +Scatman: Potential bug fix with player skill bonuses. + +==3/28/2010: +Scatman: NPCs can now use spells that increase their skills. +Scatman: Spawns that die and have an action state will no longer continue to perform their action while dead. :P +Scatman: Fixed a bug with spawns that have randomly generated features. +elcapototal: fixed bug where the server would crash if you killed yourself from a high fall. +elcapototal: fixed bug 88 by fixing the task group bugs for QuestJournalReply. +elcapototal: fixed bug with item swap when dropping on top of the char image. +elcapototal: fixed bug where /spawn set heading 180 would result in heading = 0. + +==3/27/2010: +elcapototal: Fixed bug 241 by checking if the slot in question already has an item, and unequipping it before equipping the item at hand (i.e. swapping). +Scatman: Fear not, for the auto-bank will no longer eat your items! It'll now properly place your item into the first bank slot it finds, or none if your bank is full. + +==3/26/2010: +Scatman: Crash fix with spell queue. +elcapototal: Fixed bugs 196 & 300 by sending the PlayerInfo struck packet after equipping/unequipping an item. +elcapototal: fixed bug 194 by resetting the quickbar items collection every time the user logs on. + +==3/24/2010: +elcapototal: Added check when killing a spawn to make sure it's not already in the dead list. +elcapototal: Added fix to /summon. +Scatman: Possible fix for the display problem with queue'd spells. + +==3/23/2010: +JohnAdams: Fixed bug in FK constraints on spawn_npcs table preventing insert of new spawns via /spawn add new command. Minor Version 244. + +==3/22/2010: +JohnAdams: Re-compile binaries testing x64 compile setup. + +==3/21/2010: +Scatman: Hopefully fixed the login bug. Sorry it took so long. + +==3/20/2010: +JohnAdams: Changed visual_states table structure (minor version 241) - added visual_state_id column which is the actual ID, and made the old `id` column a standard PK. +JohnAdams: Added debug print of XP earned to client (_DEBUG) and logs. Also added for group XP earned. + +==3/16/2010: +JohnAdams: Mocks Scatman for his disgraceful item load bug +JohnAdams: ClientLauncher: Cleaned up SVN commit. Changed output to ./Client Launcher, and put sources in Sources folder + +==3/10/2010: +Scatman: Fixed a disgraceful bug with my last change for loading items faster. +Scatman: /reload items should no longer crash world. + +==3/8/2010: +Scatman: Increased the speed at which items load from the database. + +==3/7/2010: +Scatman: Fixed a huge spell crash. + +==3/6/2010: +Scatman: Fixed many crashes (more to come). + +==3/3/2010: +JohnAdams: Parser: added -debug option, shutting off DumpPacket unless used + added parser_stats table; parser now outputs totals to table for data review + removed SaveSpawnUnknowns() to -debug only -- too much useless data, not parsed properly anyway + +==2/28/2010: +Scatman: Added /location create [name] (include y). Include y defaults to 0 (false). +Scatman: Added /location add [location id]. +Scatman: Added /location remove [location point id]. +Scatman: Added /location delete [location id]. +Scatman: Added /location list [locations|points] [location id if points used]. + +==2/21/2010: +Scatman: Implemented locations. Use the `locations` and `locaton_details` tables. Whenever a player enters a location, the name of the location will pop up on the screen. +Scatman: Added /reload locations. + +==2/20/2010: +Scatman: Fixed a bug causing spell visuals not to show after a /reload spawns. +Scatman: Added support to use spawn_location_placement.expire_offset. This will offset a spawn's expire_timer +/- expire_offset. +Zcoretri: Packetparser: Added version 1027 structs for spell parsing. + +==2/15/2010: +Scatman: Combining spawns now preserves their spawn location offsets. +Scatman: Fixed a bug where spawns in a spawn combine were being given unequal percentages to spawn. +Scatman: Added zone script functions enter_location(Zone, Player, GridID) and leave_location(Zone, Player, GridID). These are called when a player enters/leaves a grid within a zone. +Scatman: Spawns can now be given a timer for how long they can be spawned for before being depoped (like harvest nodes on live). Use `spawn_location_placement.expire_timer` (in seconds). +Zcoretri: PacketParser: Added version 1008 item structs for parsing only at this time. +Zcoretri: PacketParser: Fixed -loaditems switch to work again due to evolving DB changes. +Zcoretri: PacketParser: Added support to parse the new item flags ORNATE, HEIRLOOM, LORE_EQUIP, APPEARANCE_ONLY + +==2/14/2010: +Scatman: Fixed a bug with the new LUA spell loading system if the script did not have ".lua" on the end in the database. +Scatman: Yet, another spell crash fix. + +==2/11/2010: +Scatman: Fixed a bug not letting NPCs cast encounter AEs on players. +Scatman: Added LUA function ApplySpellVisual(Target, SpellVisualID). +Scatman: Implemented spell scribing from spell scrolls (be sure to update your WorldStructs.xml). +Scatman: NPCs that are in a spawn group which are aggro'able to you, will now aggro you together as a group (sorry! :P). +Scatman: Fixed a crash with interrupts. + +==2/10/2010: +Zcoretri: Reverted ItemStructs.xml file. Version 1008 structs caused examine problems. + +==2/08/2010: +Scatman: Fixed some linux compile warnings. +Scatman: Whole bunch of spell tweaks to calculate spell targets. Should be nearly identical to live now. +Scatman: Spawns no longer check for aggro'able spawns when moving only. It's now checked at all times, every 2 seconds. +Scatman: Fixed a bug that was displaying the wrong error message when purchasing an item you did not have enough coin for. +JohnAdams: Re-wrote UpdateStartingZone() function - added SQL error checking and debug output. + +==2/07/2010: +Scatman: Fixed a bug that was causing self only spells to check their range. + +==2/06/2010: +Scatman: Fixed a display issue with concentration not showing correctly when we switched over to use SOE's concentration standards (256 per 1 concentration slot). + +==2/05/2010: +Scatman: Added support for group enemy hostile spells (spells.target_type=1[Enemy] and spells.group_spell=1). +Scatman: Modified LUA function AddHate to calculate group targets if the spell being cast is a group spell. Use this function for group and single target taunts (also works if you're not casting a spell). + +==2/04/2010: +Scatman: Added support for stifle, daze, and stun. Use AddControlEffect with types 2, 3, and 4 respectively. + +==2/03/2010: +Scatman: Fixed a bug which was causing toggleable spells not to cancel if you had a different target than you did when you applied the spell. +Scatman: Implemented the command clearallqueuedabilities. The spam should be gone when you target something now :) +Scatman: Fixed a huge memory leak with spells. +Scatman: Interrupted spells will no longer consume concentration. +Scatman: Fixed a bug causing interrupted spells to still show their visual effect to all targets except the initial target. +Scatman: Spells that are uninterruptable will no longer be interrupted by moving. +Scatman: Added support for true AOE spells. +Zcoretri: Added version 1008 item structs. + +==2/02/2010: +Scatman: Made a lot of changes to spells and how its targets are found (mostly group stuff) to make the code easier to understand and less stressful on world. + +==1/31/2010: +Scatman: Fixed a crash bug with reuse timers for NPCs. +Scatman: You can now assign a picture through the EQ2 UI for your toon if you are a guild recruiter. +Scatman: The 'Collection' groundspawn skill will now properly use the 'Gathering' spell. Make sure your harvest spells are target_type=0 (Self). + +==1/30/2010: +Scatman: Implemented guild recruiting. +Scatman: Fixed a small bug that was saving a guild recruiting value improperly. + +==1/29/2010: +Scatman: Rewrote how spell scripts were loaded to only load spells scripts being used and to allow for subdirectories. + +==1/28/2010: +Scatman: Spells now take into account the amount of concentration required to cast it. + +==1/27/2010: +Scatman: Imlemented group exp. +Scatman: If you slay an epic mob, an announcement will appear in guild of your heroic actions! +Scatman: Winning any prize in the lotto will now display the coin animation on your character. + +==1/26/2010: +Scatman: Fixed a linux issue with the lotto. +Scatman: Implemented LUA functions GetVariableValue(name) and GetCoinMessage(total_coin_amount) (You can use these together to print out how much the current lottery is eg. 500 platinum 50 gold). +JohnAdams: DB: Removing FK constraints from spawn_npcs table (for now) + +==1/25/2010: +Scatman: Added LUA functions AddControlEffect(target, type) and RemoveControlEffect(target, type). For now, type=1 is mez. Later on, type=2 will be stifle and type=3 will be daze, etc. +Scatman: Implemented the lottery :P + +==1/24/2010: +Scatman: Added LUA functions AddSkillBonus(target, skill_id, value) and RemoveSkillBonus(target). +Scatman: Calling AddSkillBonus multiple times for one spell will now properly modify all skills intended for. +Scatman: Guild events now save into the database properly. +LethalEncounter: Fixed a Parser crash bug. +LethalEncounter: Fixed a bug with spawns depopping immediately. + +==1/23/2010: +Scatman: When a guild member levels, their new level will be shown correctly in the guild window. +Scatman: Group buffs' visuals will now display on all members of the group. +Scatman: Maintained spell icons for group buffs will appear on all group members' UI. +Zcoretri: Packet Parser: Added support to parse achievement data and specialspellinfo +Zcoretri: Added support for text replacement in spell fade messages. + +==1/22/2010: +Scatman: Implemented group buff support. + +==1/20/2010: +Scatman: Groundspawns should once again be working properly. +Scatman/JA: Added 'Collecting' as a valid groundspawn harvesting type. +Zcoretri: Added support for text replacement in spell success messages. + +==1/19/2010: +Zcoretri: Fixed spell effect, success and fade message colors to match live. + +==1/16/2010: (dev revision 1000!) +JohnAdams: DB: Committed Minor Version 226 - all FK work completed (for now) +JohnAdams: Fixed DB query in code looking for `titles` table, which is now named `character_titles` +Scatman: You can now use '/spawn create' and '/spawn add new' with signs and groundspawns. +Scatman: Guilds now use the custom value tables in the database to assign starting permissions, event filters, etc. + +==1/12/2010: +Zcoretri: Start implementation of languages + +==01/11/2010: +Scatman: A whole bunch of guild fixes/modifications. +Scatman: Added guild GM commands /guilds create|delete|add|remove|list. +Scatman: Modified world to use the new `character_social` table for characters' friends and ignore lists. +JohnAdams: DB: Pushed out InnoDB changes to World database, cleaned up some unused tables from download (Minor Version 137) +JohnAdams: DB: Modified guild_ranks_defaults to store default permission sets for ranks (Minor Version 138) + +==01/10/2010: +Scatman: Guilds! + +==1/9/2010: +Zcoretri: Fixed WS_AdventureList struct due to struct changes +Zcoretri: Added Titles and Language structs +Zcoretri: Packet parser updates + +==12/21/2009: +Image: MiniLogin defined in the Login source for convenience - better to keep them together since db changes. + +==12/16/2009: +Scatman: Spawns that are aggro to you but are also gray con will no longer have a red outline around their name. +Scatman: The hate meter will now show your percentage of hate towards the spawn you are fighting. +Scatman: Added in proper messaging when a spawn leashes. +LethalEncounter: Fixed a crash related to MutexMaps. + +==12/15/2009: +LethalEncounter: Fixed a crash related to DataStructs. + +==12/14/2009: +Zcoretri: Fixed typo in WS_WaypointSelect struct + +==12/13/2009: +LethalEncounter: Fixed a problem submitted by bolly about npc moving speed. +LethalEncounter: Fixed a problem submitted by bolly about groundspawns command list display. +LethalEncounter: Fixed a crashbug with the test command. +Scatman: Added LUA function Attack(NPC, Player). + +==12/12/2009: +LethalEncounter: Made quite a few changes to the MutexList/Map code to hopefully fix the crash bugs that were left. +LethalEncounter: Character class changes will now be saved to the database. +Scatman: Mobs that are aggro to you will no longer try to attack you if you're invulnerable. +Scatman: You will no longer be spammed by the drowning message if you're invulnerable and are drowning. +Scatman: If you do choose not to cheat death by drowning via /invulnerable, you should no longer die in less than a milisecond. You'll take damage every 2 seconds now as intended. + +==12/09/2009: +Scatman: Fixed a bug not letting players equip ranged weapons. + +==12/07/2009: +Scatman: Fixed a bug with /kick not allowing higher status players to kick lower status players. + +==12/06/2009: +LethalEncounter: Fixed a bug with the CastSpell LUA function. +LethalEncounter: Possible crash fix for MutexLists. +LethalEncounter: Added spell bonuses. +LethalEncounter: Fixed some issues with combat. +LethalEncounter: Made some changes to the LUA logging system. + +==12/05/2009: +LethalEncounter: Fixed a bug submitted by bolly where the power and health values would be swapped after a character database update. + +==12/01/2009: +Scatman: Fixed a bug with my previous code change dealing with harvesting groundspawns. + +==11/29/2009: +LethalEncounter: Added ability for the Login server to display the custom zone name from the player's World server. + +==11/23/2009: +Scatman: You can no longer cast hostile spells on spawns that are not attackable. Also added in some additional checks. + +==11/22/2009: +LethalEncounter: Fixed a bug where the bought message was not being displayed correctly for 0 cp items. +LethalEncounter: Fixed the bug where bought/quest bags where showing up as Opened and would delete all your items if you deleted it in this state. +LethalEncounter: Fixed a bug that was causing players to get sent to 0, 0, 0 when zoning in. +LethalEncounter: Fixed soga display issues as well as beards. Be sure to update your CommonStructs.xml file. +Scatman: Fixed a bug allowing you to equip items even if your level was too low. +Scatman: Signs that allow you to zone will now take into account the sign_distance before zoning you. Using 0 won't put a restriction on it. + +==11/21/2009: +LethalEncounter: Changed the update query to a replace query when setting the spawn group chances. +LethalEncounter: Fixed a 0 delay bug that was causing spawn loops to fail. + +==11/20/2009: +Bolly: Added LUA function AddSpellBookEntry(Spawn, SpellID, SpellTier). +Bolly: Added LUA function HasFreeSlot(Spawn). +Bolly: Fixed a bug when quests were completed before the client was saved, causing the completed quest to never be saved. +Scatman: Fixed an issue with saving and loading quests. +Scatman: Initial player inspecting. + +==11/15/2009: +LethalEncounter: Fixed a few combat related issues. NPC placement seems to be off a bit, but it will be fixed soon. + +==11/1/2009: +LethalEncounter: Fixed problem with spawn group associations not spawning correctly. + +==10/19/2009: +Scatman: LUA function RemoveItem will now consider whether or not the item is stackable. +Scatman: LUA function OfferQuest now lets you offer a quest with no quest giver. Use nil. +Zcoretri: PacketParser: Added new version of SpecialSpellInfo struct. + +==10/18/2009: +Scatman: Server statistcs should now work properly again. +Scatman: Null check crash fix with tracking if the struct wasn't found. =/ +Scatman: Added LUA function AddPrimaryEntityCommand(Player, Spawn, CommandName, [Distance], [Command], [ErrorText], [CastTime], [SpellVisual]). If not Command is specified, it will default to CommandText. If not distance is specified it will default to 10. Other values will default to 0. Note: Only the player who's passed into the command will see the new entity command on the spawn. +Zcoretri: PacketParser: Added ability to parse character titles. +Zcoretri: PacketParser: sql db updates for raw_spells and raw_spell_visuals tables. + +==10/17/2009: +LethalEncounter: Fixed (hopefully) last desync issue. Will know for sure after more extensive testing. +Scatman: Implemented tracking. You can type /track to begin for now. Thanks to Zcoretri for help with the packets. +Scatman: Implemented LUA function ToggleTracking(Player). +Scatman: Implemented /distance. Tells you the distance between you and your target. + +==10/16/2009: +Scatman: More mail enhancements. + +==10/15/2009: +Scatman: You can now use items. The LUA function used(Item, Player) will be called in the item's item script when used is clicked. To make an item usable, set the `used` field in the `items` table to 1. +Scatman: Implemented /weaponstats. +Scatman: Implemented mail. Give your mailboxes the 'Check Mail' entity command. +Scatman: Implemented /reload mail. +JohnAdams: Bumped minor version to 72 for table updates. + Note: I cannot compile x64 version at this time, so it is not updated. +Scatman: Fixed an issue where widgets, signs, and groundspawns could not use commands. +Scatman: Using an entity command on a spawn will now use the proper text when casting it. + +==10/12/2009: +LethalEncounter: Fixed a 64 bit issue that was causing an infinite loop. + +==10/11/2009: +LethalEncounter: Crash fixes, warning fixes, VS 2008 upgrade. +LethalEncounter: Checked in a 64 bit version of the emu. +LethalEncounter: MutexList changes so they delete any pending data when they are destroyed. +LethalEncounter: Fixed client crash bug. + +==10/10/2009: +Zcoretri: Parser: Group several functions to parse spells and related data under the -spells switch. +Zcoretri: Modified WS_HearCastSpell struct. Changed spell_visual from int32 to int16. + +==10/09/2009: +LethalEncounter: Made some fixes for linux compiles. +Scatman: Added LUA function GetTarget(Entity). + +==10/08/2009: +LethalEncounter: Made some fixes to the new container system and added the ability to delay the deletion of data inside a container. + +==10/06/2009: +Scatman: Widgets now use the new entity command handle use. + +==10/05/2009: +Scatman: Added /merchant list [merchant description]. +Scatman: Added /appearance list [appearance name]. +Scatman: Added 'sub_title' to /spawn set. +LethalEncounter: Converted combat to new container system. +LethalEncounter: Made some fixes to the new container system. + +==10/04/2009: +LethalEncounter: Started a major overhaul to the storage and useage of the object containers. They are now all thread safe which allows us to stop using the readlock/writelock support which could lead to deadlocks. +Zcoretri: Parser: Updated structs for OP_TraitsList and OP_AdventureList to version 996. +Zcoretri: Parser: Fixed bug in getting difficulty for NPC spawns. +LethalEncounter: Fixed quest struct. +LethalEncounter: Started fixing some compile time warnings. + +==10/03/2009: +JohnAdams: Parser: Fixed bug in spawn -populate command, and updated Parser DB.sql to version 996 opcodes + +==10/02/2009: +Scatman: Implemented starting details. Use the starting_details table to determine a race/class combo's starting stats. + +==10/01/2009: +Scatman: Fixed a grammatical error when fishing that Bolly pointed out. +Scatman: Fixed a bug related to repairing equipped armor thanks again to Bolly. +Scatman: Added a few more stat updates (# harvested items, # rares harvested, highest melee/magical/falling damages, total wealth). +Scatman: Added /entity_command list [name]. +Scatman: Added /reload factions. + +==09/30/2009: +Scatman: Put in a formula to calculate repair costs using the item's level and tier. + +==09/29/2009: +Scatman: You will now be notified when equipping broken armor. +Scatman: Fixed a bug with merchants offering their repair services. + +==09/28/2009: +Scatman: Implemented repairing. Add 16 to merchant_type in spawns if you want your merchant to offer a repair service. Repair costs are based off sell_price of the item for now. + +==09/27/2009: +LethalEncounter: Fixed Collector to work with the latest client. +LethalEncounter: Updated the opcodes and structs to work with the latest client. +LethalEncounter: Make some tweaks to the network code and fixed a major memory leak. +Scatman: Spawns once again called the healthchanged LUA function with the new combat revamp. + +==09/26/2009: +Scatman: Added LUA function IsInCombat(Entity) +Scatman: LUA function SummonItem now takes bool parameter, SummonItem(Player, Item, DisplayMessages). If DisplayMessages is true(1), text and a popup message will display on the client's screen just like live. +Scatman: LUA function RemoveItem now returns true or false. + +==09/25/2009: +Scatman: Fixed a bug which allowed you to interact with spawns even if the spawn was not targetable. +Scatman: Modified spawns to allow multiple required quests steps for a given quest. For each step, just call the LUA function SetRequiredQuest(Spawn, QuestID, QuestStepID). +Scatman: Changed the name of the LUA function StartItemConversation to StartDialogConversation. This is because the 'dialog' conversations can be started from either a spawn or an item. To handle this, the StartDialogConversation function takes an extra parameter 'type'. Type 1 means you're passing a spawn in and type 2 means you're passing an item in. + StartDialogConversation(Conversation, Type (1 or 2), (Spawn or Item), Player, text, mp3, key1, key2) where mp3, key1, and key2 are optional. +Scatman: Using SetRequiredQuest will now take into account if you have multiple steps open under a single taskgroup. + +==09/24/2009: +Scatman: Interacting with spawns is now done differently. You no longer need a spell to match the entity command. All you need is the entity command (with the expanded entity_command table) and to give that spawn the entity command of course. +Scatman: Added safe_heading functionality to the zones table. +Scatman: Added /reload entity_commands. +Scatman: Hailing NPCs will no longer display the chat bubble over your head like on live. + +--09/20/2009: +LethalEncounter: Fixed a few issues with combat. +LethalEncounter: Hopefully fixed a spell crash bug. +Zcoretri: Added support to PacketParser to get Alternate Acheivement information. + +--09/19/2009: +JohnAdams: Fixed bug in Items::CheckClass() for items with class = 0 (no restrictions) + +==09/13/2009: +LethalEncounter: Fixed spawn display problem. +LethalEncounter: Made some changes to the Spell Process code to improve reliability. +LethalEncounter: Each zone will have it's own Combat thread to increase performance and reliability. +Zcoretri: Fixed bug in packetparser not getting spell level + +==09/07/2009: +LethalEncounter: Added Item Script functionality. + +==09/06/2009: +LethalEncounter: Rewrote much of the code that handles loading and using the appearance data that is stored the database. +LethalEncounter: Reorganized some Entity-only data elements into the Entity class to avoid wasting resources whenever an object, sign, etc is created. +LethalEncounter: Fixed the display of spells, it now properly tracks when a spell re-use timer is up and which spell is queued. +LethalEncounter: Fixed a couple of crash bugs in spell processing. +LethalEncounter: Preventative fix in the LUA code that should prevent a possible crash based on the current spell. + +==09/03/2009: +Scatman: Fixed a crash bug related to casting a self/group buff with no target. +Scatman: Added /randomize command. This will allow your NPCs to spawn with randomly generated features everytime it spawns (hair, race, gender, colors, etc). Type /randomize in game for more information. +LethalEncounter: Fixed a bug with npc skills not being loaded. + +==09/02/2009: +LethalEncounter: Checked in revamped combat system. The system needs to be tuned and has a few flaws that need fixing, but it offers quite a few benefits to the old system. The highlights are NPCs can now cast, use weapons, and they can use/increase their skills. +LethalEncounter: Added adjustable agro range. +LethalEncounter: Lots of other changes that I can't remember :P + +==08/29/2009: +Scatman: Added LUA function GetSpawnByGroupID. +Scatman: Added LUA function GetSpawnByLocationID. +Scatman: Added LUA function SetServerControlFlag (moonjumps, flymode, etc =) ) +Scatman: Fixed LUA function GetSpawnID to return the proper ID. +Scatman: Reorganized /spawn details. +Scatman: Fixed a minor issue in /zone set regarding the zone motd. + +==08/21/2009: +Scatman: /zone details crash fix. +Zcoretri: SpawnStruct.xml fix. +Zcoretri: Modified World for HearCastSpell packet. + +==08/18/2009: +Scatman: Added /zone set [zone id|zone name] [attribute] [value]. It will change it in the database and change it in memory if the zone is running. +Scatman: Added /zone details [zone id|zone name]. + +==08/17/2009: +JohnAdams: Attempting to fix incorrect ToggleCharacterOnline() disconnect placement +JohnAdams: Bump to Minor Version for DB updates - restoring item_details_skills table + +==08/16/2009: +Secrets: (JA) Fixed bug with Friends list reporting player logins when they zone +Secrets: (JA) Also fixed bug with ACCEPTED_CONNECTIONS server stat for the same reason +Zcoretri: Minor bug fixes to spells/achievements parsing. Disabled Quest parsing per JA +Zcoretri: Modified WS_HearCastSpell struct, resolved unknown5 and unknown6 + +==08/14/2009: +Zcoretri: Added support to PacketParser to parse Points Of Interest locations +Zcoretri: Added support to PacketParser to parse spell info from the character development and achievements window + +==08/10/2009: +JohnAdams: Fixed bug where max_hp/max_power update values were swapped +JohnAdams: Cleaned up PacketParser folder, moving xml's to old_files folder +Scatman: Put in the proper drowning messaging. +Scatman: Added /skill [add|remove|list] [skill name] command. + +==08/07/2009: +Scatman: Implemented faction rewards for quests. +Scatman: Made some int to signed int changes in WorldStructs to reflect the faction rewards. +Scatman: Coin rewards for quests will now default to 0 if you do not specify a value for it. NPCs couldn't afford the 150 platinum pieces (or whatever random number was in memory) as a reward for quests :P +Scatman: Prereq level for quests will now default to 1 if you do not specify a value for it. + +==08/06/2009: +Image: More instancing code implemented, some did not make the multiple merges I had to break through. + +==08/02/2009: +Scatman: Added the appropriate error messages when equipping an item which you cannot equip. +Scatman: Ranged items now load properly. +Scatman: Fixed a bug when loading item's skill_req1 which was using the wrong field in the database, making most items unequippable. + +==07/26/2009: +Zcoretri: Added duration_flag field so spell examine window now shows Duration: Until Canceled when flag is set +JohnAdams: Added spawn_group_id field to raw_spawns to help link spawn points to spawn groups. +LethalEncounter: Made quite a few parser changes to parse previously unknown values. +LethalEncounter: Added lock traceback support to MPlayerItems in World. + +==07/25/2009: +JohnAdams: Fixed broken SpellInfo struct for version 954. +Scatman: Added LUA function GetGender. + +==07/24/2009: +LethalEncounter: Added support for latest live client. +LethalEncounter: Fixed spawn struct problem with heroic flag. +LethalEncounter: Fixed mouse over problem with spells. +LethalEncounter: Got spells working properly with the latest version. +JohnAdams: (Parser) Changed raw_items parsing to populate new classes fields only, and not build raw_item_classes table at all +JohnAdams: (Parser) Changed raw_item_details_skills parsing to populate new classes fields only, and not build raw_item_skill_classes table at all +JohnAdams: (Parser) Changed how -populate tracks populate_spawn_id, now in raw_spawns vs raw_spawn_info +JohnAdams: Corrected typo in "Loading EQ time of day" to say EQ2 +JohnAdams: Moved server STAT defines from Player.h to World.h + +==07/23/2009: +Zcoretri: Added support to packetparser to be able to parse AA spells + +==07/21/2009: +LethalEncounter: Fixed level problem with broker search results. +LethalEncounter: Fixed display of item base class information. It was red when the character's class was a subclass of an allowed class. +LethalEncounter: Changed the way that item classes were stored and sent to the client. Thanks to JA's idea, we store the item classes in a single field in the db now instead of the 750,000+ entries in another table! +LethalEncounter: Fixed the display of shields in /itemsearch. +LethalEncounter: Made some misc broker fixes. + +==07/18/2009: +Scatman: Made the changes for loading quests as discussed on the forum. All of the quest init() process is now stored in the database. +JohnAdams: (Parser) Re-wrote -loaditems routines to be more efficient +JohnAdams: Committed new Parser DB.sql with latest (973) DB changes by LE + +==07/11/2009: +LethalEncounter: Modified factions to only display increase/descrease messages if the value actually changes. +LethalEncounter: Fixed a crash bug with regen. +LethalEncounter: Fixed a deadlock issue with quests. + +==07/04/2009: +JohnAdams: Renamed zones.zone_script field to zones.lua_script for consistency (Minor Version 43) + +==07/02/2009: +JohnAdams: Commited new Parser DB.sql, w/Zcoretri's new fields +JohnAdams: Added parse counts for factions and collections parsing Bion added a while ago +JohnAdams: Added default `respawn` value of 300 (rather than change table default and cause another minor version). This way, manually inserted spawns still have the default 3600, but parsed spawns respawn in 300 seconds. +JohnAdams: Changed PacketParser.exe -populate tables to new spawn_location* structure + +==06/30/2009: +LethalEncounter: Fixed a crash bug caused by player's spawns. +LethalEncounter: Fixed a desync issue. +LethalEncounter: Fixed a few spell display/queueing issues. + +==06/29/2009: +LethalEncounter: Fixed a bug that prevented spawn groups from respawning correctly. + +==06/28/2009: +Scatman: Added the remaining functionality to the activity status flags. +LethalEncounter: Made changes to allow the server to run more efficiently/faster. +LethalEncounter: Only players regenerate now, per forum discussion. +LethalEncounter: Closed quite a few memleaks. +LethalEncounter: Fixed several crash bugs. +LethalEncounter: Changed the logging system to use timestamps. +LethalEncounter: Converted most of the cout statements to use the logging system. +LethalEncounter: Disabled crash handled for now. +LethalEncounter: Fixed a combat related bug that caused the player's damage to remain at their previous level's amount. +LethalEncounter: Fixed a problem with quest updates causing delays. +LethalEncounter: Fixed a group crash. +Zcoretri: Made modifications to PacketParser::ProcessSpells function + +==06/27/2009: +Scatman: Some simple unsigned to signed int changes. + +==06/26/2009: +JohnAdams: Added resets for some server stats at world startup to World::init() + +==06/21/2009: +Scatman: Added LUA functions GetSpawnGroupID, GetSpawnLocationID, and GetSpawnLocationPlacementID. +Scatman: Added LUA function AddVisualStateLoop(spawn, time_to_do_visual, delay_after, visual_state_id). Call these in a spawn's spawn() function. You will need one for every emote. +LethalEncounter: Made some crash fixes. +LethalEncounter: Further changes made to the mutex code. +LethalEncounter: Fixed an error in damage struct. +LethalEncounter: You will now autoattack when using combat abilities. + +==06/20/2009: +LethalEncounter: Possible Mutex fix. +LethalEncounter: Fixed the facial hair bug on login server. Unfortunately this will only work for new character creations. +LethalEncounter: Updated structs/opcodes for latest client version. +LethalEncounter: Changed the way spawn updates were being handled to make them faster and more efficient. +LethalEncounter: Fixed NPCs facing away during combat. +LethalEncounter: Increased the max spawn chase distance. +LethalEncounter: Fixed charges not being displayed properly. +LethalEncounter: Fixed combat not displaying correct names. +LethalEncounter: Fixed loot window not automatically being dismissed. +LethalEncounter: Fixed some loot items not being displayed properly. +LethalEncounter: Fixed loot messages not appearing in the correct window. +LethalEncounter: Fixed some issues with combat. +LethalEncounter: Fixed spawns not being removed after the coins were looted. +LethalEncounter: Added drowning. Don't stay under water too long! + +==06/14/2009: +LethalEncounter: Fixed a crash bug with /spawn combine. +LethalEncounter: Fixed a crash bug with /spawn group. +LethalEncounter: Fixed a login server issue. + +==06/13/2009: +LethalEncounter: Added ability to spawn groups of NPCs. use the /spawn group command. +LethalEncounter: Fix for linux compiles :/ +LethalEncounter: Moved the spawn tables to the spawn_location* table names. +LethalEncounter: Fixed a deadlock issue cause by Mutexes. +Scatman: Fixed a timing issue when displaying certain pop up messages. + +==06/12/2009: +PaulGH: Update /who to show GM status and other flags. +PaulGH: Add in flag support. Also add commands to use them ( /lfg /anon /show_cloak etc.). +PaulGH: Add commands /gm_hide (hide GM status) and gm_invis (invivible to /who). + +==06/07/2009 +JohnAdams: Changed server Stats REPLACE to INSERT ON DUPLICATE UPDATE. + +==06/06/2009: +Scatman: Made changes for the quest database changes. + +==06/02/2009: +LethalEncounter: Fixed a bug with the ignore chat code. + +==06/01/2009: +LethalEncounter: Fixed min_level/max_level not being used when creating new NPCs. +LethalEncounter: Added friend/ignore functionality. +LethalEncounter: Fixed some issues with player right click menus. + +==05/31/2009: +Scatman: Added level caps. Use variables 'level_cap' and 'level_cap_override_status'. +Scatman: You can no longer be less than level 1. :) + +==05/30/2009: +Image: Fixed a NULL call in WriteServerStatisticsNeededQueries + (new databases with no characters would crash shortly after booting, eventually writing stats). + +==05/29/2009: +LethalEncounter: Fixed a crash bug caused by another crash bug fix :P +LethalEncounter: Removed some memory leaks. +LethalEncounter: Removed some pieces of code that weren't being used. +LethalEncounter: Rewrote some of the spawn code to reduce the memory usage. + +==05/26/2009: +LethalEncounter: *Hopefully* fixed a desync issue that has plagued us since the beginning. + +==05/25/2009: +LethalEncounter: Fixed a few bugs as given on forums. +LethalEncounter: Added spawn size offset code. +LethalEncounter: Crash fix with earlier code. + +==05/23/2009: +Scatman: Spawns now call the healthchanged function when they take damage. +Scatman: Fixed my syntax error with statistics =) + +==05/19/2009: +Scatman: Added LUA function GetRaceName and GetRaceClass. +Scatman: Added server stats functionality. + +==05/17/2009: +LethalEncounter: Players display a right click menu now. +LethalEncounter: Players display the LD flag and remain in game for 30 seconds after going LD. +LethalEncounter: Added initial group support. +LethalEncounter: Fixed a couple of issues with the cl_* variables. +LethalEncounter: Fixed a few issues with the group support. +LethalEncounter: Fixed a deadlock issue with reloading spawns. +LethalEncounter: Fixed a crash issue with removing clients. + +==05/12/2009: +JohnAdams: Added preliminary STAT_PLAYER_* constants to Player.h for Stats system +JohnAdams: Added player death counter (untested) + +==05/10/2009: +LethalEncounter: Rewrote the ZoneServer Mutex code (again) as the first rewrite didn't work out as anticipated. +Scatman: Implemented JohnAdam's stat system. + +==05/09/2009: +JohnAdams: Added characters.online toggle to track when a character is online (1) or offline (0) +LethalEncounter: Rewrote the ZoneServer Mutex code. +LethalEncounter: Added Client feature override capability, just add cl_* entries to your variables table. +LethalEncounter: Fixed a crash bug from Zone not being set for the player until after it was being used by ZoneScripts. + +==05/07/2009: +JohnAdams: Parser: Changed raw_quests table to use 'id' as a PK, and 'quest_id` for quest ID's +JohnAdams: Parser: Added 'log_file' output to raw_quests table +JohnAdams: Parser: Updated "Parser DB.sql" with all current sql updates +LethalEncounter: Fixed some issues with parsing quest items/factions. + +==05/05/2009: +LethalEncounter: Fixed Packet Parser's parse of quests for versions >= 931. + +==04/29/2009: +Bion: Parser: added parsing of books and added another sql table to hold this +Bion: Struct: added WS_EqShowBook + +==04/28/2009: +LethalEncounter: Updated Emu for the latest client. + +==04/26/2009: +Scatman: Added Zone MOTDs. + +==04/25/2009: +Bion: Parser: added methods for getting collections data use -collections and added raw_collections to sql updates +Bion: Misc: added method to get item crc from the item name in misc.cpp +Bion: Struct: updated WS_CollectionUpdate for 955 and 839(oldest log i could find) +Scatman: Added GetFactionAmount(Player, FactionID) LUA function. + +==04/19/2009: +LethalEncounter: Added shutdown_timer field to the zones table that allows you to specify how long each zone should remain up (in seconds) before it is shut down. +LethalEncounter: Modified SetRequiredQuest LUA command so that the same spawn could be used for multiple quests/quest steps. (Just call the function for each quest/step you want) +LethalEncounter: Fixed SetRequiredQuest spawns so that they only are interactable when you are on the quest/step. +LethalEncounter: Added new Merchant system. + +==04/13/2009: +Bion: Parser: added item_type 19 and sql_update for raw_items_details_book. +Bion: Struct: updated WS_MerchantItemHouse and WS_ItemHouse for version 955 and added WS_MerchantItemBook and WS_ItemBook starting at 955. + +==04/12/2009: +Scatman: LUA function AddHate will now make your opponent attack you if not previously in combat. +Scatman: Added LUA Function SendPopUpMessage(Spawn, Message, [Color]). Color defaults to white. Optionally, you can pass in basic color names to change it. + +==04/08/2009: +Scatman: Fixed a bug with zone scripts. + +==04/07/2009: +Scatman: Added /broadcast and /announce. + +==04/05/2009: +Scatman: Added GetSpawnID(Spawn) LUA function. + +==04/03/2009: +JohnAdams: Parser: Fixed `range` as a column name issue with newer MySQL servers +JohnAdams: Parser: Removed obsolete items fields from -loaditems + +==04/03/2009: +Scatman: Added SendMessage(Player, Message, [Color]) LUA Function. Color defaults to white. Optionally, you can pass in "red" or "yellow" to change it. + +==03/29/2009: +LethalEncounter: Fixed mounts for 4412 client. +LethalEncounter: Fixed a desync issue caused by the network code. +LethalEncounter: Fixed a bug with quest bag items. +LethalEncounter: Fixed spell details not being displayed when you moused over the spell. + +==03/27/2009: +LethalEncounter: Added Mounts :) +LethalEncounter: Added SetMount, SetMountColor, GetMount, SetAdventureClass, and SetTradeskillClass LUA functions. + +==03/22/2009: +LethalEncounter: Replace /itemsearch with a user interface based on the broker system. +LethalEncounter: Fixed a bug with zlib deflating. + +==03/17/2009: +Bion/LethalEncounter: Fixed issue with items stats not properly being parsed when the value was negative. +LethalEncounter: Latest client now works. + +==03/11/2009: +LethalEncounter: Crash bug fix. + +==03/10/2009: +LethalEncounter: Fixed quest display problem. + +==03/09/2009: +Scatman: Fixed a problem when updating a quest step that has more than one quantity. + +==03/04/2009: +LethalEncounter: Added includes for Linux as submitted by bobbydole. Thanks! +LethalEncounter: Fixed some error messages in LUA scripts. + +==03/03/2009: +Scatman: Modified AddQuestStepChat to accept a quantity parameter. AddQuestStepChat(Quest, StepID, StepText, Quantity, TaskGroupText, Icon, ID(s)) + +==03/02/2009: +LethalEncounter: Spells now show properly in the effects and maintanance windows. +LethalEncounter: Fixed some issues with spells not being applied to the right target. +LethalEncounter: Updated several spell related structs. + +==03/01/2009: +LethalEncounter: Fixed some issues with stacking items. +LethalEncounter: Fixed merchant hover text opening new examine window. +LethalEncounter: Fixed coins in player struct. +LethalEncounter: Added buy/sell merchant text. +LethalEncounter: Added automatic stacking capability. +Scatman: Added RemoveItem LUA function. + +==02/28/2009: +LethalEncounter: Fixed a severe crash bug related to some of the reload commands. +LethalEncounter: Fixed spawngroups issue that was preventing more than 1 entry from being in a spawngroup. +LethalEncounter: Groundspawns should now respawn correctly. +LethalEncounter: Added a fix for the GetSpawn command. +LethalEncounter: Disabled exception handling until we fix a few bugs. +Zcoretri: Added a few struct changes. + +==02/26/2009: +Scatman: Added /reload zonescripts. +Scatman: Fixed a bug with SetLocationProximityFunction that was crashing the zone if a client zoned into an x,y,z where a proximity was already set. + +==02/25/2009: +JohnAdams: Added `starting_city` to characters table to preserve the city chosen during character creation +Scatman: Added LUA function SetLocationProximityFunction(Zone, x, y, z, MaxVariation, InRangeFunction, LeavingRangeFunction). + +==02/24/2009: +LethalEncounter: Made some tweaks to the spell generation code. +Scatman: Added Zone Scripts. Each zone has one script specified in the zones table. Whenever a player zones into a zone + with a zone script, the LUA function "player_entry(Zone, Player)" will be called within the zone's zone script. +Scatman: The "init_zone_script(Zone)" function will be called within the zone's zone script whenever a zone is loaded. + +==02/23/2009: +LethalEncounter: Added initial code for giving players spells upon leveling. +LethalEncounter: Fixed a crash bug with factions. +LethalEncounter: Fixed a reserved word issue with mysql 5.1 and the patcher. + +==02/22/2009: +LethalEncounter: Release 0.6.5 +LethalEncounter: Updated Patcher to consolidated server. + +==02/21/2009: +LethalEncounter: Made changes for the latest client. +LethalEncounter: Combat stance/combat music now works correctly. +LethalEncounter: Added support for minidings. +LethalEncounter: Players should fall down correctly when they die. +LethalEncounter: Fixed item display of classes. +LethalEncounter: Enabled item class/level restrictions. +LethalEncounter: Fixed most item menu commands. +LethalEncounter: Fixed item effects. +LethalEncounter: General item fixes. + +==02/20/2009: +JohnAdams: Committed AdnaeDMorte idea of unlimited /who results, enhanced with settings in `variables` table +Zcoretri: Added 3 toggles to spells for target display (display_spell_tier, friendly_spell, group_spell) +Zcoretri: Added toggle to display spell tier in examine + +OPTIONAL SQL: +insert into `variables`(`variable_name`,`variable_value`,`comment`) values ( 'max_who_results','10','Maximum number of players to show up in /who commands'); +insert into `variables`(`variable_name`,`variable_value`,`comment`) values ( 'max_who_results_status_override','100','Admin status to override the cap and display all results'); + +==02/09/2009: +LethalEncounter: Modified movement code to allow Widgets and objects to use Movement Loops like NPCs do. +LethalEncounter: Modified the net code to hopefully provide better stability. +LethalEncounter: Added invulnerable command. +LethalEncounter: Fixed /spawn create bug that wouldn't allow you to create spawns in an empty zone. +LethalEncounter: Fixed a client crash bug on linux. +LethalEncounter: Update to latest client. + + +==01/29/2009: +Scatman: LUA functions ModifyHP and ModifyPower now work as intended. +Scatman: Added ModifyMaxHP and ModifyMaxPower LUA functions. + +==01/27/2009: +Scatman: Emotes no longer display the targeted_message when you have yourself targeted. It will use the message field as it does on live. +LethalEncounter: Fixed a crash bug with connections. +LethalEncounter: Fixed a crash bug in Parser. + +==01/26/2009: +LethalEncounter: Fixed a deadlock crash. +LethalEncounter: Fixed a client crash I inadvertently added. +LethalEncounter: Fixed a server crash bug. +LethalEncounter: Added more exception handling capability. + +==01/25/2009: +LethalEncounter: Fixed a crash bug from a deleted packet stream. +LethalEncounter: Fixed emote capability. +LethalEncounter: Added most emote messages. +LethalEncounter: Fixed ability to specify combat/emote voices. + +==01/24/2009: +LethalEncounter: Fixed a couple of issues with spawn movement. +LethalEncounter: Fixed bug with health not showing up correctly. +LethalEncounter: Fixed a couple of crash bugs related to /repop. +LethalEncounter: Fixed a bug with toggle spells. +LethalEncounter: Fixed a bug that prevented spawns from falling down when they were dead. +LethalEncounter: Fixed a bug that would cause your target to be reset on the server side when any spawn was killed. + +==01/23/2009: +LethalEncounter: Made some changes to spells to prevent crashes. +LethalEncounter: Fixed a deadlock with range spawns. +LethalEncounter: Added some checks to prevent LUA errors from crashing server. +LethalEncounter: Fixed bug with using zone id with /zone + +==01/21/2009: +Scatman: Added AddStepProgress(Spawn, QuestID, StepID, ProgressAmount) LUA function. +Scatman: Added AddQuestStep(Quest, StepID, StepText, Quantity, Percentage, TaskgroupText, Icon). This step can only be updated via SetStepComplete or AddStepProgress. +Scatman: When a spell (or command) is cast on a spawn, the "casted_on(NPC, Spawn)" function is called in the target's spawn script. + +==01/20/2009: +Image: Fixed an issue with static zones and new variables from the zones table. +Image: Uploaded the profiler build. +Image: Added *base* instance code. +Image: Modified /zone command to allow /zone active (show list of zones running). + Also /zone instance # (Allows you to zone to a specific instance number). +LethalEncounter: Fixed quite a few crash bugs/deadlocks. +LethalEncounter: Added some debugging code to catch deadlocks. +Image: Uploaded a fix that was related to static zones and attempting to use the zone access variables, minstatus and minlevel. The instance type was also fixed for static zones. + +==01/18/2009: +LethalEncounter: Couple of crash bugs fixed. +LethalEncounter: Added support for latest client. + +==01/17/2009: +LethalEncounter: Fixed a couple of crash bugs. +Scatman: Added AddQuestStepSpell(Quest, StepID, StepText, Quantity, Percentage, TaskgroupText, Icon, SpellIDs) + This quest step will update whenever one of the Spell IDs is successfully finished casting. +Scatman: Added GetLevel LUA function. + +==01/15/2009: +Scatman: Added functionality for signs to use commands and spawnscripts from the right-click menu. +Scatman: Changed AddQuestStepChat, AddQuestStepKill, AddQuestStepObtainItem, and AddQuestStepLocation to take an icon as an additional parameter. Setting it to 0 will make it so the quest step does not show an icon. + AddQuestStepChat(Quest, StepID, StepText, TaskgroupText, Icon, ID) + AddQuestStepKill(Quest, StepID, StepText, Quantity, Percentage, TaskgroupText, Icon, IDs) + AddQuestStepObtainItem(Quest, StepID, StepText, Quantity, Percentage, TaskgroupText, Icon, IDs) + AddQuestStepLocation(Quest, StepID, StepText, Max Varation, TaskgroupText, Icon, x1, y1, z1 ...) + +==01/14/2009: +Scatman: Added UpdateQuestZone LUA function. Used to update which zone the quest is currently taking place in for quests that take place in more than one zone. + +==01/13/2009: +Scatman: Objects now call the 'death' function within their spawn script when killed. + +==01/12/2009: +Image: Fixed a crash in the new database functions (non-existant characters). +LethalEncounter: Added respawn timers to non NPC spawns. +LethalEncounter: Fixed linux compile issue. +LethalEncounter: Added HandleUse ability for NPCs. +LethalEncounter: Added ability to call spawn scripts via right click menu. + +==01/11/2009: +LethalEncounter: Fixed SpawnMob LUA function bug. +LethalEncounter: Rewrote some of the spawn handling code to hopefully be more live-like. + +==01/10/2009 +Image: Implemented /giveitem [name] [itemid] +Image: Implemented /kick [name], /ban [name] [permanent:0/1] and /lock [0/1]. + - the ban command permanent argument is optional, 1 will set account-wide bans. +Scatman: Modified AddQuestStepLocation LUA function to accept unlimited number of coordinates. + The new function looks like: AddQuestStepLocation(Quest, Quest ID, Step Text, Max Varation, Taskgroup Text, x1, y1, z1 ...) + +==01/09/2009: +LethalEncounter: Fixed /tell bug. + +==01/08/2009: +LethalEncounter: Fixed class/difficulty appearance bugs. +LethalEncounter: Added "/spawn target radius [radius here]" command to set spawns targetable by a radius. + +==01/07/2009: +LethalEncounter: Memleak fixes. + +==01/06/2009: +LethalEncounter: Fixed /move_spawn command. + +==01/03/2009: +LethalEncounter: Added ability to use in game maps. + +==01/02/2009: +Scatman: Added IsAlive LUA function. +LethalEncounter: Added /reload spawns command. +LethalEncounter: Added transport code to allow object transports and location based transports (warp points). +LethalEncounter: Fixed bug with SpawnMob command. +LethalEncounter: Renamed teleporter_id to transport_id. +LethalEncounter: Rewrote some of the /tell code that code have been causing problems. +LethalEncounter: Found piece of struct that allows NPCs to face the player. + +==01/01/2009: +LethalEncounter: Fixed lifts. +LethalEncounter: Fixed bug with quests. +LethalEncounter: Renamed Spawn LUA function to SpawnMob. + +==12/31/2008: +LethalEncounter: Fixed bug with bind location. +LethalEncounter: Fixed several of the display issues with quests. + +==12/30/2008: +LethalEncounter: Fixed errors in sample quest. +LethalEncounter: Made changes the way bind_zone and house_zone were stored in the database. +LethalEncounter: Added LUA commands for handling binding/gating. + +==12/29/2008: +LethalEncounter: Reorganized World structs. + +==12/28/2008: +LethalEncounter: Changes for the latest client. + +==12/11/2008: +LethalEncounter: Modified AddHate to accept negative numbers to allow hate reduction spells. +LethalEncounter: Made NPCs easier to kill. +Scatman: Added AddHate LUA function. + +==12/10/2008: +LethalEncounter: Fixed a crash bug from spawn script timers. +LethalEncounter: Added Despawn, KillSpawnByDistance, and SpawnSet LUA functions. +Scatman: Added KillSpawn LUA function. + +==12/07/2008: +LethalEncounter: Fixed non interruptable spells being interrupted. +LethalEncounter: Fixed skill caps. + +==12/06/2008: +LethalEncounter: Several crash fixes thanks to John Adams. +LethalEncounter: Changed right click spell command to get the player's spell tier to display the correct information. +LethalEncounter: Checked in initial code for harvesting items from nodes. +LethalEncounter: Added reload capability for groundspawn items. + +==11/24/2008: +LethalEncounter: Several crash fixes as well as the quest struct fix. Thanks to John and Wyndal/Marjorie for helping test it! + +==11/23/2008: +LethalEncounter: Added support for both the latest Live client as well as the TSO box client. +LethalEncounter: Most of the item changes/fixes that are now possible with the current feature set have been completed. + +==11/15/2008: +Image: Made Packet Parser linux compatible. + +==11/03/2008: +LethalEncounter: Added HasPendingLoot, HasPendingLootItem, and GiveLoot LUA functions for the upcoming collection support. + +==10/31/2008: +Image: Fixed a crash in the Login Server, if the version number was not in the opcode manager. + +==10/29/2008: +LethalEncounter: Update server changes for upcoming release. + +==10/28/2008: +LethalEncounter: NPCs engaged in combat will now call the hailed_busy LUA function instead of the hailed function. +LethalEncounter: Duplicate NPC issue on revive should be fixed. +LethalEncounter: The radius for the PlayFlavor LUA command is now 30. +LethalEncounter: Only red, white and grey item colors are now used for merchants. + +==10/26/2008 +Image: Zones now have a min_status and min_level variable. (SQL change attachment on BZ) + http://bugzilla.emagiware.com/show_bug.cgi?id=1 +Image: Fixed a bug with revive_points being null and crashing the world server. +Image: Fixed a bug with /spawn set commands setting to players or other NPCs not targetted + due to the database id of the targetted npc being 0 and other spawns that are 0. (esp players). + +==10/18/2008: +LethalEncounter: Added support for the latest client (5166L). + +==10/16/2008: +LethalEncounter: Fixed various camping options. /camp (charname) works too for switching characters. + +==10/13/2008: +LethalEncounter: Fixed object corpse problem. +LethalEncounter: Fixed item linking problem. +LethalEncounter: Added temporary action state (used to suspend action when facing a player). +LethalEncounter: Added a couple of more quest item updates. + +==10/13/2008: +LethalEncounter: Completed Step 1 of the item revamp. + -Complete overhaul of item loading and storage. Got rid of some obsolete fields and cleaned it up. Items in the items table are now set with just two fields (bag_id and slot). Bag_id is 0 for inventory items, otherwise it is the unique id of the bag which it is in. Bag_id is -3 for bank, -4 for shared bank. + -Simplification of the entire items lifecycle. A lot of the code was way more complex than it needed to be, which led to some of the item issues. + -Items will be added to bags first, then inventory if the bag is full (this includes starting_items). + -Enhancements/overhaul of the starting_items table - you no longer have to specify the slot as it will automatically assign a slot in the given characters inventory. It will now properly handle EQUIPPED items as well so you can automatically dress a character upon creation. + -Support for banked/shared bank items added. No need for the character_banks table. + -Numerous bug fixes with the core item behavior. + -Step 2 will be in a couple of weeks and will focus on the items themselves. + +==10/11/2008: +LethalEncounter: Made John Adam's requested database changes. +LethalEncounter: Converted race_type to model_type. +LethalEncounter: Added new AddQuestPrereqModelType LUA funcion. +LethalEncounter: Fixed crash bug with creating new NPCs as submitted by John Adams. +LethalEncounter: Fixed crash bug with network connections as submitted by John Adams. +Jabantiz: Changed code to all for visual state suspend after being hailed. +Jabantiz: Added GetRace LUA function. + +==10/07/2008: +LethalEncounter: Added GetZoneName, GetZoneID, and GetSpawn LUA functions. + +==10/06/2008: +LethalEncounter: Fixed a crash bug with SetPlayerProximityFunction. + +==9/20/2008: +LethalEncounter: Added SetPlayerProximityFunction lua function that calls a specified LUA function when the player enters a given range and optional leaves the given range. +LethalEncounter: Added initial Merchant code. + +==9/19/2008: +LethalEncounter: Fixed macro skillbar bug as submitted by John. +LethalEncounter: Fixed item and quest bugs with the 4412 client as submitted by Scatman. +LethalEncounter: Added lua script option to call after a NPC completes a movement in MovementLoopAdd Lua function. +LethalEncounter: Added voice option to the StartConversation function. +LethalEncounter: Added ability for quests to have a multiple rewards to choose from. +LethalEncounter: Added several new LUA functions for quests. +LethalEncounter: Fixed some issues with multiple quest items. +LethalEncounter: Fixed a bug with unsigned values and LUA. +LethalEncounter: Added QuestStepIsComplete function. + +==9/18/2008: +LethalEncounter: Changed /say chat distance from 500 to 30, as submitted by John Adams. +LethalEncounter: Changed the radius spawn combine component to only add spawns of the same type as the original spawn, as submitted by John Adams. +LethalEncounter: Arrow colors will now change when the player changes level, as submitted by John Adams. +LethalEncounter: Removed my test stuff that I had in the /name command, as submitted by John Adams. +LethalEncounter: Fixed quest turn in bug, as submitted by Malcolm. +LethalEncounter: Fixed bug that allowed you to gain xp from killing yourself. +LethalEncounter: Fixed HP/Power regen bug submitted by Seleandalos and John. +LethalEncounter: Fixed facial hair bug as submitted by John. + +==9/13/2008: +LethalEncounter: Modified the way that spawn scripts are stored and used. + - You can now specify a spawn script for a specific spawn_id, spawngroup_id, or spawn_entry_id. + - The scripts are now loaded when needed instead of loading all of them at startup. + - You must specify the absolute path to the structs now. This allows for additional organization. +LethalEncounter: Added /spawn set commands: spawn_script, spawngroup_script, and spawnentry_script. +LethalEncounter: Modified quests to take a percentage argument for the Kill and Item steps. + +==9/12/2008: +LethalEncounter: Changed the way that /zone list worked. +LethalEncounter: Fixed the 'You stop fighting' bug. + +==8/31/2008: +LethalEncounter: Added SetStepComplete function to Quests to take the place an automatic updating hail. +LethalEncounter: Fixed /reload quests +LethalEncounter: Fixed a few issues with multithreading. +LethalEncounter: Fixed a few bugs with the quest system. +LethalEncounter: Added several new LUA functions for the quest system. + +==8/30/2008: +LethalEncounter: Converted spell system over to the two table spell system that will reduce redundant data considerably. +LethalEncounter: Changed a few column names for JA. +LethalEncounter: Added several new LUA commands. +LethalEncounter: Made quite a few struct changes to reduce redundancy. +LethalEncounter: Changed the wildcard for the starting tables to 255. +LethalEncounter: Removed the spawn type parameter requirement on several /spawn commands. +LethalEncounter: Added several new fields for spells thanks to paulgh. +LethalEncounter: Fixed a problem with the display of quests. +LethalEncounter: Fixed the LUA Spawn command. +LethalEncounter: Added display of book icon if the NPC has a chat quest update. + +==8/18/2008: +LethalEncounter: Fixed sign display problem. +LethalEncounter: Fixed a couple of bugs with locks. + +==8/17/2008: +LethalEncounter: Added interruptions for spells. +LethalEncounter: Fixed several bugs with spells that were causing odd behaviors. +LethalEncounter: Fixed bug with zones not shutting down properly. + +==8/16/2008: +LethalEncounter: Fixed some spawn movement bugs. +LethalEncounter: Added city zone and always up options to the zones table. This allows you to boot up a zone without anyone in it. + +==8/14/2008: +LethalEncounter: Fixed some problems with factions. +LethalEncounter: Fixed some issues with npc attacks. +LethalEncounter: Fixed a bug locking up the spell que. +LethalEncounter: Made the quest end spawn default to the quest start spawn. +LethalEncounter: Fixed a couple of annoying random crashes/glitches caused by corrupted memory pointers. +LethalEncounter: Improved the NPC attack code. + +==8/10/2008: +LethalEncounter: Added ability for NPCs to attack each other based on factions. +LethalEncounter: Fixed a few crash errors with /repop, spawn scripts and combat. +LethalEncounter: Improved the spawn movement process. + + +==8/09/2008: +LethalEncounter: Added factions. +LethalEncounter: Fixed a crash bug associated with /spawn combine. +LethalEncounter: Fixed a bug with conversations. +LethalEncounter: Made some changes to the way NPC movement worked. + +==8/07/2008: +LethalEncounter: Added /depop, /repop, and /spawn combine commands. +LethalEncounter: Made some fixes to the parser. +LethalEncounter: Fixed a couple of bugs with /spawn combine. +LethalEncounter: Added automatic retargeting of the master spawn when using /spawn combine. + +==8/04/2008: +LethalEncounter: Added AddTimer LUA function. +LethalEncounter: Fixed a bug with entity commands. +LethalEncounter: Added ability for spawns to change their heading back to the original heading after 30 seconds. + +==8/03/2008: +LethalEncounter: Added ability to zone with the zone ID. +LethalEncounter: Fixed a bug that was dropping client connections more often that it should have done. +LethalEncounter: Made more improvements to the questing system to be more like Live. + +==8/02/2008: +LethalEncounter: Created questing system. This system is very robust and allows you to use LUA scripts to do just about anything. +LethalEncounter: Fixed a bug with structs that was preventing substructs from using the correct version. + +==7/27/2008: +LethalEncounter: Fixed a bug with high level spawns being gray cons. + +==6/30/2008: +LethalEncounter: Added /bug command. It will now forward all bugs to the login server which will save them for future use. + +==6/22/2008: +LethalEncounter: Fixed various item bugs to work with the latest client. +LethalEncounter: Opcodes/structs updated to work with the latest client. +LethalEncounter: Version changed to 0.6. + +==6/16/2008: +LethalEncounter: Fixed looting bugs. + +==6/15/2008: +LethalEncounter: Fixed a display problem with looting. +LethalEncounter: Fixed a bug with Entity right click commands being truncated. +LethalEncounter: Removed some of the debug print statements being printed out. +LethalEncounter: Added bank coin fields to the database, +LethalEncounter: Added initial code for banking both items and coins. Additional code will be needed to properly handle bags in bank and shared bank. + +==6/14/2008: +LethalEncounter: Added loottables and a loot system. +LethalEncounter: Added loot commands /loot list, additem, removeitem, setcoin +LethalEncounter: Remove some old LUA functions. +LethalEncounter: Fixed some looting issues. + +==6/1/2008: +LethalEncounter: Reworked items to make more logical sense and fixed some issues with them. +LethalEncounter: Merged all the reload commands into one master /reload command with spells, items, etc being subcommands. +John Adams: Fixed a bug with min locked status. +John Adams: Added LUA to the include directory listing. +LethalEncounter: Added spell class table. +LethalEncounter: Added item_details_skill table. + +==5/23/2008: +LethalEncounter: Got item chat links working properly. +LethalEncounter: Loot it now working. +LethalEncounter: Redesigned the way items were being sent. +LethalEncounter: Updated structs on login for the latest client and updated the opcodes. + +==5/05/2008: +LethalEncounter: Fixed a compile problem on linux. + +==5/04/2008: +LethalEncounter: Added signs and zone points. +LethalEncounter: Fixed a bug with LUA spell scripts that was appending ".lua" to the end. +LethalEncounter: Fixed a problem with parser that prevented npc appearances from appearing correctly. +LethalEncounter: Added zone point collection to the parser. +LethalEncounter: Reversed soga_eye and soga_skin colors in the structs. +LethalEncounter: Added /reloadluasystem command that should fix any lua problems if they occur. +LethalEncounter: Added conversation and voice collection to parser. +LethalEncounter: Fixed a problem parser was having with certain zones. + +==4/27/2008: +LethalEncounter: Reorganized the spawn code. Players and NPCs are now subclasses of Entity, which is a new subclass of Spawn. This is so that we can keep the Entity (combat - enabled) stuff separate from objects, widgets, and signs as they dont need combat support. +LethalEncounter: Added Entity and Widget classes. Widgets are things in the zone like doors that can be controlled. +John Adams/LethalEncounter: Reoganized the spawn database to be more logical and friendly. +LethalEncounter: Added new option to Parser called -populate that will populate a database with the raw database tables. +LethalEncounter: Got doors (and other widgets) working properly. +LethalEncounter: Added ability to play sounds (such as a door opening/closing, etc). + +==4/25/2008: +LethalEncounter: Fixed revives, it will now work correctly. If a revive point is not set, it will use the zone's safe point. +LethalEncounter: Added timer for NPCs to run back to their starting location if they kill someone and dont have anyone else to attack. +LethalEncounter: Fixed a couple of crash bugs with spawns. + +==4/24/2008: +LethalEncounter: Update opcodes and structs to work with the latest live client. + +==4/23/2008: +LethalEncounter: Added SetPosition and removed SetX/SetY/SetZ from lua interface. + +==4/21/2008: +LethalEncounter: Changed the way that spawns are sent/resent once again :P +LethalEncounter: Fixed a few crash bugs. + +==4/20/2008: +LethalEncounter: Spawns should no longer crash the client. +LethalEncounter: Added several new LUA functions. +LethalEncounter: Added spawn scripts to make spawns "come alive". +LethalEncounter: Rewrote much of the spawn handling code. +LethalEncounter: Modified some of the combat formulas. +LethalEncounter: Disabled new spawn grouping code. + +==4/13/2008: +LethalEncounter: Made some additional combat system improvements/bug fixes. +LethalEncounter: Added code that will respawn dead NPCs given the value in the spawns table. +LethalEncounter: Added some LUA functions. + +==4/09/2008: +LethalEncounter: Made some combat system improvements/bug fixes. + +==4/05/2008: +LethalEncounter: Fixed a few bugs relating to combat. +LethalEncounter: Added a spell que system similiar to live just without a few visual features. +LethalEncounter: Added framework for different spell types. +LethalEncounter: Changed a considerable amount of the spell code. +LethalEncounter: Added spell visual effects. + +==3/30/2008: +LethalEncounter: Fixed a crash bug in combat. +LethalEncounter: Added LUA scripting engine. If you are compiling this yourself BE SURE TO ADD the LUA directory to your includes and the LUA lib file to your libraries!!! +LethalEncounter: Changed the spell system to one based on LUA scripts. +LethalEncounter: Heavily modified the database in regards to spells. + +==3/17/2008: +LethalEncounter: Released 0.5! +LethalEncounter: Made changes to allow the latest live client. +LethalEncounter: Fixed a problem with database updates. +LethalEncounter: Changed `name` in the commands table to `command`. + +==3/01/2008: +LethalEncounter: Fixed display of attack icon for attackable NPCs. +LethalEncounter: Added some additional set options to /spawn set. +LethalEncounter: /settime will now update all clients. + +==2/29/2008: +LethalEncounter: Disallowed pvp and combat of dead spawns. +LethalEncounter: Fixed a crash bug with spawns. +LethalEncounter: Changed /move_spawn command to allow placement of wall items. +LethalEncounter: Added /settime command as requested. +LethalEncounter: Fixed a crash bug if the user got disconnected before the world properly handed the client to the zone server. +LethalEncounter: Changed /zone command to prevent people from zoning to the same zone they are in. +LethalEncounter: Removed some of the old obsolete spawn variables. +LethalEncounter: Made some fixes to client movement that makes it much more like Live. +LethalEncounter: Fixed a crash caused by the client not being removed properly. +LethalEncounter: Fixed a client crash bug caused by an invalid spawn radius. +LethalEncounter: Fixed quickbar updates for macros and spells. +LethalEncounter: Added several new fields for spawns. +LethalEncounter: Fixed several of the display problems with spawns. +LethalEncounter: Added a couple of defines to allow people to easily change the distance spawns are sent or removed. +LethalEncounter: Fixed a bug with spawns that was preventing some of them from being displayed properly. + +==2/23/2008: +LethalEncounter: Fixed a crash bug/problem with the /goto command. +LethalEncounter: Fixed a crash bug relating to the new netcode. +LethalEncounter: Added visual_state, action_state, and mood_state to further customize npcs. This uses the data in the visual_states table. +LethalEncounter: Spawn set will now set apply the action to all npcs that use the same database ID. +LethalEncounter: Fixed a problem with corrupt spawn packets on version 4412. +LethalEncounter: Fixed size problems that John mentioned. +LethalEncounter: Fixed linux compiler bug. +LethalEncounter: Fixed a client crash bug relating to other clients. + +==2/23/2008: +LethalEncounter: Fixed crash problem with version 4412. +LethalEncounter: Added player macros. + +==2/21/2008: +LethalEncounter: Fixed the problem with getting stuck on loading of UI Resources. +LethalEncounter: Fixed a large memory leak in World. + +==2/20/2008: +LethalEncounter: Fixed a crash bug in the new network code. +LethalEncounter: Revamped the entity commands (commands displayed when right clicking a spawn). + +==2/19/2008: +LethalEncounter: Changed quite a bit of the network code. Client crashes should be very rare now. +LethalEncounter: Made some fixes for item/stat calculations. +LethalEncounter: Added additional stat bases. +LethalEncounter: The /level command will reset xp now. +LethalEncounter: Added an option to the /spawn remove command that will despawn the mob as well (/spawn remove 1) +LethalEncounter: Added initial code to support damaging items upon player death. +LethalEncounter: Reset the CanEquipItem function to always return true so that you can equip any item so matter what the class requirements. I'll reenable it later on. + + +==2/09/2008: +LethalEncounter: Fixed client crash bug related to spawn IDs. +LethalEncounter: Fixed latest client to work with emu. +LethalEncounter: Renamed executables to EQ2World by request. + +==2/02/2008: +LethalEncounter: Fixed another packet size bug that affect various packets. +LethalEncounter: Fixed the WS_DeathWindow struct. + +==2/02/2008: +LethalEncounter: Fixed a compiler error on linux. +LethalEncounter: Modified /move_spawn command to enable a player to move a spawn anywhere they like. +LethalEncounter: /move_spawn will save the spawn location if it already has a spawn group id. +LethalEncounter: Fixed a problem with certain client commands. + +==1/28/2008: +LethalEncounter: Fixed a problem with account passwords that would give a bad password if the password was followed by spaces. +LethalEncounter: Fixed a bug in position updates that was corrupting the first update. +LethalEncounter: Added /summon and /goto commands. +LethalEncounter: Made some changes to the way exceptions are handled for zones that should isolate a crash in one zone from affecting other zones. (Unless the crash occurs in the main world thread.) + +==1/26/2008: +LethalEncounter: Fixed the display of locked servers on character select screen. +LethalEncounter: Fixed a crash bug when saving players. +LethalEncounter: Fixed the display of spells. +LethalEncounter: Made a few fixes to the way the exp bar was being displayed. The yellow/blue bars as well as the yellow/blue vitality indicators were wrong. +LethalEncounter: Vitality will now be update according to your settings for it in the variables table. You can specify the amount and how often it is given. +LethalEncounter: Fixed an overflow problem with Timers. +LethalEncounter: Fixed a problem with the destroy spawn packet that could crash the client. +LethalEncounter: Rewrote some of the packet code so that it checked the length after the packet was generated to prevent problems. +LethalEncounter: Consolidated the remove spawn packet code into one function. +LethalEncounter: Changed the spawn set location command to not need an argument. + +==1/24/2008: +LethalEncounter: Fixed a bug with automatic updates not updating properly. +LethalEncounter: Added initial xp code. +LethalEncounter: Fixed a few structs in character sheet. +LethalEncounter: Added code to save stats, coins, hp, etc. + +==1/23/2008: +LethalEncounter: Fixed world time functionality. Clients will now receive the coorect world time when they login and it will update like live. +LethalEncounter: Modified PacketStructs to be more tolerant of a bad configuration file. Now it wont use the PacketStruct if the opcode is wrong. +LethalEncounter: Fixed bug with summoning bags that made them appear open until you relogged. +LethalEncounter: Fixed bug with spawns that was causing the client to think it was dead since we didnt set the HP when they were /spawned. +LethalEncounter: Rewrote some of the spawn update code to prevent problems when large indexes and packets are created. + +==1/20/2008: +LethalEncounter: Fixed a crash bug when processing Skill update. +LethalEncounter: Fixed a crash bug when checking new character names. +_Andrew: Created code to handle player falls. +LethalEncounter: Added Safe Fall skill to _Andrews fall code. +LethalEncounter: Fixed bug that was causing a selection box to appear when logging in for the first timein the latest client. +LethalEncounter: Fixed much of the spawn code that was causing players to crash. Crashes should be relatively rare now. +LethalEncounter: Updated damage structs for all known damage types. +LethalEncounter: Rewrote damage functions to take advantage of the new structs. +LethalEncounter: Changed fall code to display correct message when the client is damaged. +LethalEncounter: Moved some files that were previously in the common directory to the world directory. +LethalEncounter: Fixed bugs that were causing spawn updates to be sent right after an NPC was spawned. +LethalEncounter: Damage packets will now only be sent to players within a range of 30'. +LethalEncounter: Updates skill code to properly send skill updates to the client. +LethalEncounter: Fixed /move that was broken in the last update. +LethalEncounter: Changed Spawn code to use per player indexes like Live instead of global indexes when sending spawns. +LethalEncounter: OP_MapFogDataUpdateMsg falls will now be ignored by default to get rid of some of the spam in the console window. It will eventually be handled. +LethalEncounter: Arrow colors will now be applied to all attackable mobs. Non-attackable mobs will be white. + +==1/14/2008: +LethalEncounter: Applied patch that Andrew created. This fixes many of the warnings generated on linux compiles. +LethalEncounter: Applied bug fix sent in by Andrew that fixed a compilation problem with linux. +Diamente: Added syntax displays for EQ2 client commands. +Diamente: Fixed a bug when attempting to /kill without a target. + +==1/13/2008: +LethalEncounter: Added code for checking skill raises. +LethalEncounter: Fixed a bug when loading large int values from the database. +LethalEncounter: Modified and added quite a few skills that will be set when a character is created. +LethalEncounter: Update World Patcher for multiple databases. + +==1/9/2008: +LethalEncounter: Changed color of servers running in debug mode to yellow on character creation server list. +LethalEncounter: Removed the version from the server names on character select. +LethalEncounter: Updates will now occur before anything else is loaded as world starts. +LethalEncounter: Added ability to limit update downloads if users abuse it. +LethalEncounter: Removed versions 0.1 to 0.3 from the valid versions list. +LethalEncounter: Modified LoginServer.ini file for patcher. BE SURE TO UPDATE YOUR LOGINSERVER.INI FILE!! + +==1/7/2008: +Diamente: Updated WorldStructs so that /quit and /camp function correctly again. + +==1/6/2008: +LethalEncounter: Created new Skill classes to handle skills. Converted existing code to use the classes. +LethalEncounter: Fixed a crash bug with items. +LethalEncounter: Reverted the order in which commands were sent to that of yesterday. Some clients seem to be having problems with it. + + +==1/5/2008: +LethalEncounter: Updated most of the opcodes to be correct. +LethalEncounter: Fixed a crash bug when loading opcodes. +LethalEncounter: Fixed a crash bug when using the /who command. +LethalEncounter: Fixed a few of the old incorrect opcodes referenced in the code. +LethalEncounter: Items that you summon will now be saved on your character even after you log off. + +==1/4/2008: +LethalEncounter: Revamped item code to make them easier to read and use. +Diamente: Made some updates to SendPlayerDeathWindow() and WS_DeathWindow + +==1/3/2008: +Diamente: Fixed shameless error in previously SVN'ed content. +Diamente: Added methods for retrieving revive locations from db and (properly) displaying them as junction choices in the death window +Diamente: Updated player death functions; fixed death window; updated WS_DeathWindow struct +Diamente: Added command: /kill. Those so inclined may indeed kill themselves by targetting themselves OR by using /kill self + +==1/2/2008: +LethalEncounter: Converted chat to use PacketStructs. +LethalEncounter: Changed /ooc to be global. +LethalEncounter: Made some fixes to items. +Diamente: Updated /quit to ensure player saving before disconnecting. + +==1/1/2008: +Diamente: Tweaked HP regen so that players who die stay dead until reviving. (Guess I need to implement reviving now...) +Diamente: Made small changes to the appearance of the server loading status messages for readability +Diamente: Fixed /camp; implemented /quit. +Diamente: Added WS_RequestCamp as well as initial version of WS_DeathWindow to World Structs. + +==12/31/2007 +LethalEncounter: Added /spawn details command. +LethalEncounter: Added several more /spawn set values. + +==12/30/2007 +LethalEncounter: Added /spawn target command. +LethalEncounter: Fixed spawn commands. +LethalEncounter: Made some changes to the way world stats were calculated. +LethalEncounter: Updated several opcodes. +LethalEncounter: Update /sit and /stand to use opcodes like live. + +==12/29/2007 +Diamente: Fixed crash bug related to spawn death in combat. + +==12/27/2007 +LethalEncounter: Fixed crash bug relating to failed database updates. +LethalEncounter: Made a few changes to the way that packets were being processed and compressed. +LethalEncounter: Fixed a bug on login that was causing clients to hang. +LethalEncounter: Implemented several spawn sub commands as mentioned on forums. +LethalEncounter: Updated some opcodes that were incorrect. +Diamente: Fixed issue with abandoning camp. + +==12/26/2007 +Diamente: Fixed bug related to automatic zone shutdowns. +Diamente: Added commands: sit and stand. +Diamente: Added visuals to /level command; added WS_UpdateText struct to WorldStructs for client message displays. + +==12/14/2007 +LethalEncounter: Updated GPL licensing information to v3. + +==12/07/2007 +LethalEncounter: Finally fixed stuck on loading entities bug. +LethalEncounter: Added /version command. +LethalEncounter: Made several bug fixes for spawns. +LethalEncounter: Implemented /who command. The lfg, lfw, and roleplay flags won't be implemented until we start using them. +LethalEncounter: Fixed several packet related crashes/issues. +LethalEncounter: Fixed packet issue where future synced packets would cause client to become desynced. + +==12/02/2007 +LethalEncounter: Changed the way zones were loaded and saved from the characters table. It now uses the zone name instead of the zone file. You can also give zones shorter names for the /zone command. Be sure to use _ instead of a space in the name though. +LethalEncounter: Made some changes to the way packets were generated and handled that should make the emu more stable and efficient. +LethalEncounter: Fixed char creation struct that was causing a problem. Be sure that you update your CommonStructs.xml file! + +==11/27/2007 +LethalEncounter: Fixed a bug with packets that were just a tad bit smaller than those that would be compressed. + +==11/26/2007 +LethalEncounter: Added some initial support functions for spawn commands. +LethalEncounter: Added /who command. + +==11/19/2007 +LethalEncounter: Fixed all the memory leaks in the code. (there were A LOT) +LethalEncounter: World will now display a title indicating the number of clients/zones when running on windows. +LethalEncounter: Fixed several crash bugs related to the multiversion implementation. +LethalEncounter: Updated structs for the new live client. +LethalEncounter: The emu will now be able to support more than one client version at a time again. The versions supported are 4523L, 4427L, and 4412. +LethalEncounter: Login wont let you connect with an invalid version anymore. +LethalEncounter: Fixed some misc bugs with login. +LethalEncounter: Mostly fixed the bug where you hang on Loading Entities on Login server. It still happens occasionally, but not often. +LethalEncounter: Login will now allow you to create a Sarnak if you are using versions 4412 or 4427. +LethalEncounter: Zones will automatically shut down after 5 minutes without a client. +LethalEncounter: Fixed some bugs with PacketStructs. + +==11/14/2007 +LethalEncounter: Character Select will now correctly display a World server's version. + +==11/12/2007 +LethalEncounter: Added Starting tables for automatically updating tables for new characters. Information like zones, items, etc. + See http://eq2emulator.net/forums/viewtopic.php?p=1692#1692 for more details. + +==11/11/2007 +LethalEncounter: Fixed a bug with the sprint spell that was allowing the client to run at 40% even after they removed the effect. +LethalEncounter: Added character_spells table. The spells in knowledge book are created from this table. +LethalEncounter: Added hot bar feature by dragging spells from knowledge book to any hotbar. +LethalEncounter: Added save feature to hotbars that will save their order. (Saves to DB every 60 seconds if hotbars are updated) +LethalEncounter: Fixed several issues with spells, hotbars, and knowledge book. +LethalEncounter: Fixed delete problem on Login. +LethalEncounter: Increase max number of characters that can be created on Login to 10. +LethalEncounter: Fixed display of zonename on character select. +LethalEncounter: Added zone update that will send your new zone name to Login for displaying on character select when you /zone. +LethalEncounter: Now saves your level correctly after you use /level. +LethalEncounter: Found and set expansion information field. + + +==11/08/2007 +LethalEncounter: Fixed some crash problems with VS .Net 2005. + +==11/07/2007 +LethalEncounter: Only sends spawns to the player if they are in the proximity of the spawn. +LethalEncounter: Removes the spawn from the player's list once the player moves far enough away. +LethalEncounter: Fixed bug with /spawn that wasnt assigning a new spawn id. +LethalEncounter: Added /speed command. +LethalEncounter: Fixed a few bugs with the proximity code. + + +==11/03/2007 +LethalEncounter: Fixed a crash bug with long zone names. +LethalEncounter: If a player doesnt inclue coordinates when using /spawn it will default to the player's coordinates. +LethalEncounter: Fixed motd, it will now correctly load from database. +LethalEncounter: Fixed bug with combat that allowed you to attack yourself. + +==10/26/2007 +LethalEncounter: Fixed bug that would cause clients to crash each other from movement. +LethalEncounter: Fixed a bug that should cause the client to ignore movement updates after a few minutes. +LethalEncounter: Made a few changes to packets that should improve performance a bit. +LethalEncounter: Fixed a bug from spawn updates that would crash client when it spawned. +LethalEncounter: Fixed a crash bug from sending updates too soon as a client is logging onto the server. +LethalEncounter: Found a few more flags for items. + +==10/24/2007 +Cadimiom: /itemsearch added, can specify a search string up to 256 characters (include spacing), + can also specify max search results after that (just a number). Ex. /itemsearch rough ruby 5 + Max results for an admin is set to 20, crashes the client if any more are sent. + +==10/21/2007 +Cadimiom: Added two variables: maxplayers and mingamefullstatus these are checks with the login + server when a character attempts to play their character. + +==10/19/2007 +Cadimiom: Login Server now records world server statistics in the database for future website use. + +==10/16/2007 +Cadimiom: Login Server now keeps track of worlds in two variables, a map and a list. + The list holds worlds which have not yet been authorized (have ID's set) + The map holds the worlds which have been authorized. +Cadimiom: Users will no longer get stuck with forced disconnect trying to create a character. +Cadimiom: Fixed bugs with how VisualStates and Variables in the World Server were handled in maps. + +==10/15/2007 +Cadimiom: World Servers can now be locked and use a database variable to set minimum status. +Cadimiom: Updated the Login Server to handle world's admin_status for banned/suspended accounts. + (All receive the same reply right now, but it restricts logging to the world). + +==10/14/2007 +Cadimiom: If a client tries to login to an invalid world or does not receive a response within + 5 seconds from a world server, it now receives a response to reset the character screen. +Cadimiom: World servers that are not connected are no longer listed on the LoginServer. +Cadimiom: Characters from world servers that are not connected should no longer appear. +Cadimiom: Login Server now has the updated reason codes for character creation. +Cadimiom: World Server's Name Filter now checks appropriate max lengths for characters name. +Cadimiom: World Server will now receive updates of Login Character Deletions if it is connected. +LethalEncounter: Fixed crash bug when spawning objects. +LethalEncounter: Made some adjustments to player position updates that should reduce the amount of crashes produced. +LethalEncounter: Fixed a few crash bugs relating to logging in and out. +LethalEncounter: Fixed a few code bugs for linux compilations. + +==10/13/2007 +LethalEncounter: Updated world to allow multiple clients to zone in and see each other (as well as chat). +LethalEncounter: Fixed the basics of movement updates for clients. It will appear a bit wierd and choppy right now. +LethalEncounter: Fixed a few things that were broken in the last patch. + +==10/08/2007 +LethalEncounter: Updated to live. + +==10/07/2007 +LethalEncounter: Created basic combat system. It is rather simple right now, but will be built upon in the future to develop a more robust system. +LethalEncounter: Fixed camping. +LethalEncounter: Fixed a crash few bugs relating to spawns. +LethalEncounter: Combined spawn updates/char sheet updates to reduce bandwidth. +LethalEncounter: Reworked some of the Spawn and zone functions to be easier to use. +LethalEncounter: Added disable exp command. +LethalEncounter: Fixed several opcodes associated with camping. + + +==09/23/2007 +LethalEncounter: Revamped spawns to be more consistent with the rest of the code. +LethalEncounter: Fixed spawn struct problems and discovered the purpose of much of the unknowns. +LethalEncounter: Added equipment appearance table for mobs that will allow people to customize mobs without giving them actual weapons and armor. +LethalEncounter: Removed all World SQL tables from svn to prevent people from trying to source them. Just connect to login and it will create/update your db. + +==09/19/2007 +Cadimiom: Fixed VisualStates in Release Build, bogus characters were being passed. +LethalEncounter: Fixed some character colors on character select screen. +LethalEncounter: Fixed some minor issues with logging into World that could crash server. +LethalEncounter: Fixed opcodes and structs that allows us to run with the latest client. Be sure to update to live. + +==09/17/2007 +Cadimiom: Fixed a buffer overrun exploit in TCPConnection with inflated packets. +Cadimiom: Clients no longer make a server list packet on login unless an update + has occured to a world. +Cadimiom: The LS now receives updates of /race,/class and /level. +Cadimiom: The LS and World use the character id retrieved from the world on + creation (opposed to name). + +==09/16/2007 +LethalEncounter: You can now summon items with the /summon command. +LethalEncounter: Implemented item movement from bags to inventory and vice versa. +LethalEncounter: Implemented equipping items. +LethalEncounter: Implemented unequipping items. +LethalEncounter: Add limited support for item stat calculations when equipping. +LethalEncounter: Add /reloaditems command. +LethalEncounter: Completely redesigned items and their associated tables. +LethalEncounter: Made some bug fixes to max hp/regen code. +LethalEncounter: Imported over 12,000 items into db. +LethalEncounter: Made some bug fixes to item loading, reducing the loading time considerably. + +==08/29/2007 +Cadimiom: Fixed an exploit with packets sent to the LS without authentication. + +==08/28/2007 +LethalEncounter: Got spell requirements working. Now it will check to verify that an effect should be fired. + +==08/27/2007 +LethalEncounter: Added player and mob Regen. Formula still needs to be tweeked, but they will regen correctly every 6 seconds. +LethalEncounter: Added some stuff for spell requirements. + +==08/26/2007 +LethalEncounter: Made a few bug fixes to the spell code. +LethalEncounter: Update character profile struct with regens. +LethalEncounter: Changed Login to display a world as down if a world isnt connected. +LethalEncounter: Updated spell tables with some additional fields. +LethalEncounter: Made some improvements to PacketStructs. +LethalEncounter: Implemented spell casting system. It was designed to be flexible enough for NPC spell casting in the future. +LethalEncounter: Added functions for interrupting spells. +LethalEncounter: Got first working spell in emu created. (Sprint) +LethalEncounter: Cleaned up alot of the code in regards to Player. +LethalEncounter: Added functions for Spawn updates. +LethalEncounter: Fixed spawn updates. +LethalEncounter: Fixed player updates. +LethalEncounter: Fixed /race, /class, /level commands. +LethalEncounter: /spawn command should work correctly again. +LethalEncounter: Discovered several more of the unknowns in character profile. + + +==08/22/2007 +Cadimiom: Eliminated hash collissions in the VisualStates, plus additional memory reduction. + +==08/21/2007 +Cadimiom: /animtest can now use the name column in visual_states +(ex. '/animtest cast_dustpuff' works just like '/animtest 145') +Cadimiom: The majority of gestures are now available through a visual_states hash table. Not all gestures seem to be in visual_states yet (/laugh for example) and every gesture needs a message applied to it. +DBUpdate: alter table visual_states add column message varchar(128) not null default ''; + +==08/19/2007 +LethalEncounter: Added character_skillbar table. +LethalEncounter: The character_skillbar table is used to specify which spells are added to the skillbar when logging in. +LethalEncounter: Added packet to allow world to read spell information from db and send it to client for above. + +==08/18/2007 +Cadimiom: Created an /animtest command to test the variety of gestures/spell effects on a player. +Ritojo: Updated most zones with their descriptions and safe coordinates. +LethalEncounter: Added spells, spell_effects, spell_effect_types, spell_effect_values, and spell_visual_effects tables to database. +LethalEncounter: World now loads spells from database and will display the spells correctly when viewed in game. + +==08/15/2007 +ferthala: Updated position struct and got it working correctly. Also added new opcode for it. +LethalEncounter: Added Spell class for future spell functions. +LethalEncounter: Updated the new spell struct. +LethalEncounter: Fixed a small bug in automatic updates. + +==08/13/2007 +Cadimiom: Removed two packets (GhostControlClose and OP_UpdateClientPredFlagsMsg) from zoning + they were not needed. +Cadimiom: Cleaned up ClientPacketFunctions of un-used packets. +Cadimiom: ZoneServers have been threaded for their process to make sure one zone cannot + consume the entire process. + +==08/11/2007 +LethalEncounter: Cleaned up some of the code related to sending packets to client. +LethalEncounter: Added /move command to transport people around the zone. Usage: /move x y z +LethalEncounter: Added structs for UpdateSpellBook and UpdateInventory and created the methods for them to be sent when logging in. +LethalEncounter: Fixed annoying crash loop on login that occured if the client crashed. (Previously required player to remove all logs files from eq2 directory) +Cadimiom: Fixed a crash in the World Server ClientList Process (NULL ref crashes). +Cadimiom: Updated ZoneAuthRequest and Client to support firstLogin, used to specify + packets or other messages that need to be only sent on world login (ex. MOTD). +Cadimiom: There is now a database-driven Variables external class. It's first use is for + handling the world MOTD in the database. Hard-coded MOTD will be used otherwise. + The new table is available in the SQL Files, World Directory "variables.sql" + +==08/10/2007 +LethalEncounter: Fixed a few login bugs. + +==08/09/2007 +LethalEncounter: Created skill packet necessary to update client with their available skills. +LethalEncounter: Updated database tables for skills. +Cadimiom: The /zone command is now functional again, this required a few changes: + 1) Save character now saves the zone name to current_zone instead of zone. + 2) Following opcodes need to be sourced into the database: + update opcodes set opcode=76 where name='OP_ReadyToZoneMsg'; + update opcodes set opcode=70 where name='OP_ChangeZoneMsg'; + update opcodes set opcode=74 where name='OP_AddGroupToGroupMsg'; + 3) I have noticed some zones do not work properly + (befallen and boat_freeport for examples) and may get stuck in there. + +==08/07/2007 +LethalEncounter: Improvements to PacketStruct to make it faster/more efficient. +LethalEncounter: Overhauled the character stats table (now called character_details) and made quite a few changes. Character Sheet packet will use the values from this table. +Cadimiom: After a character is created, the Login Server now reloads the login character list. + This solves the problem with crashing after creating a new character. + +==08/06/2007 +LethalEncounter: Added wing and hair types to spawn struct. +LethalEncounter: Updated character sheet packet for latest client. + +==08/05/2007 +LethalEncounter: Updated Spawn Struct. Now loading and sending character information from database. +LethalEncounter: Fixed several errors in PacketStructs that were causing corrupted data. +LethalEncounter: Added Print function to PacketStruct to print out debug information. +LethalEncounter: Update make file to compile on linux. +LethalEncounter: World will now load characters by name instead of ID so that the ids between world and login dont have to stay synced. +LethalEncounter: Updated to work with latest client. +LethalEncounter: Converted SetPOVGhostCmd and SetControlGhostCmd to use dynamic structs. + +==08/03/2007 +LethalEncounter: Rewrote a lot of the xml packet struct code. Streamlined it a little, but mainly to add in the ability to have packet arrays built into the structs. +LethalEncounter: Updated ZoneInfo struct. + +==07/30/2007 +LethalEncounter: Found the last packet needed to login to World! :) +Cadimiom: Command serialization updated for live (packet size is now sent as 4 bytes) +Cadimiom: Chat structure updated for live ( OP_EqHearChatCmd is now Opcode 474 ) + +==07/29/2007 +Cadimiom: Hardcoded an ability and quick bar initialization packets for world login. +Cadimiom: Dynamic structures added for CommandName and CommandMOTD. + +==07/28/2007 +Cadimiom: WorldStructs.xml added to Config Files/World Structs, must be added to the build folder. +Cadimiom: Cleaned up code in LoginServer.cpp cases: ServerOP_CharacterCreate, ServerOP_CharTimeStamp, ServerOP_UsertoWorldReq. +Cadimiom: Added LS_LoginReply to WorldStructs.xml, Dynamic structures through configReader + can now be used in ClientPacketFunctions. +LethalEncounter: Fixed character deletion on character select screen. +LethalEncounter: New Character creation checks with world before it creates any new characters. +LethalEncounter: Character selection works like live. New characters will display just as you made them. +LethalEncounter: Converted LoginByNumRequest packet to use xml structs. + +==07/26/2007 +LethalEncounter: Restarted project :) diff --git a/EQ2/docs/Client_Versions.xlsx b/EQ2/docs/Client_Versions.xlsx new file mode 100644 index 000000000..2ff9035bd Binary files /dev/null and b/EQ2/docs/Client_Versions.xlsx differ diff --git a/EQ2/docs/Notes about World.sln.txt b/EQ2/docs/Notes about World.sln.txt new file mode 100644 index 000000000..d782ab23d --- /dev/null +++ b/EQ2/docs/Notes about World.sln.txt @@ -0,0 +1,14 @@ +2010-03-20: +========== +JohnAdams: + + World.sln now writes all it's intermediate build information to a sub-folder of ./World + + The $(OutDir) is configured for ./trunk/bin/(build type) + + There is a Post-Build event that copies the output exe back to ./Trunk/bin for easy access + + There is a Pre-Compile event that deletes that copied EXE before building again, to avoid confusion on bad compiles + + + Please be sure you use an ignore-on-commmit for any of the intermediary or output files, we do not want build junk on SVN \ No newline at end of file diff --git a/EQ2/docs/Opcodes_List_2005.txt b/EQ2/docs/Opcodes_List_2005.txt new file mode 100644 index 000000000..9edd209f3 --- /dev/null +++ b/EQ2/docs/Opcodes_List_2005.txt @@ -0,0 +1,474 @@ +Xinux found this post on redguides - http://www.redguides.com/forums/showthread.php/5141-eq2-current-offsets + +In case it ever comes in handy :) + + +#opcode 0 is actually Login Request, hack because of dynamic opcode lists +OP_Unknown=0x0000 +#Login opcodes +OP_LoginRequestMsg=0xF001 +OP_LoginByNumRequestMsg=0x0001 +OP_WSLoginRequestMsg=0x0002 +OP_ESLoginRequestMsg=0x0003 +OP_LoginReplyMsg=0x0004 +OP_WSStatusReplyMsg=0x0005 +OP_WorldStatusChangeMsg=0x0006 +OP_AllWSDescRequestMsg=0x0007 +OP_WorldListMsg=0x0008 +OP_AllCharactersDescRequestMsg=0x0009 +OP_AllCharactersDescReplyMsg=0x000A +OP_CreateCharacterRequestMsg=0x000B +OP_CreateCharacterReplyMsg=0x000C +OP_WSCreateCharacterRequestMsg=0x000D +OP_WSCreateCharacterReplyMsg=0x000E +OP_ReskinCharacterRequestMsg=0x000F +OP_DeleteCharacterRequestMsg=0x0010 +OP_DeleteCharacterReplyMsg=0x0011 +OP_PlayCharacterRequestMsg=0x0012 +OP_PlayCharacterReplyMsg=0x0013 +OP_ServerPlayCharacterRequestMsg=0x0014 +OP_ServerPlayCharacterReplyMsg=0x0015 +OP_ESInitMsg=0x0016 +OP_ESReadyForClientsMsg=0x0017 +OP_CreateZoneInstanceMsg=0x0018 +OP_ZoneInstanceCreateReplyMsg=0x0019 +OP_ZoneInstanceDestroyedMsg=0x001A +OP_ExpectClientAsCharacterRequest=0x001B +OP_ExpectClientAsCharacterReplyMs=0x001C +OP_ZoneInfoMsg=0x001D +OP_DoneLoadingZoneResourcesMsg=0x001E +OP_DoneSendingInitialEntitiesMsg=0x001F +OP_DoneLoadingEntityResourcesMsg=0x0020 +OP_PredictionUpdateMsg=0x0021 +OP_SetRemoteCmdsMsg=0x0022 +OP_RemoteCmdMsg=0x0023 +OP_GameWorldTimeMsg=0x0024 +OP_MOTDMsg=0x0025 +OP_ZoneMOTDMsg=0x0026 +OP_AvatarCreatedMsg=0x0027 +OP_AvatarDestroyedMsg=0x0028 +OP_RequestCampMsg=0x0029 +OP_CampStartedMsg=0x002A +OP_CampAbortedMsg=0x002B +OP_WhoQueryRequestMsg=0x002C +OP_WhoQueryReplyMsg=0x002D +OP_MonitorReplyMsg=0x002E +OP_MonitorCharacterListMsg=0x002F +OP_MonitorCharacterListRequestMsg=0x0030 +OP_ClientCmdMsg=0x0031 +OP_DispatchClientCmdMsg=0x0032 +OP_DispatchESMsg=0x0033 +OP_UpdateTargetMsg=0x0034 +OP_UpdateTargetLocMsg=0x0035 +OP_UpdateCharacterSheetMsg=0x0036 +OP_UpdateSpellBookMsg=0x0037 +OP_UpdateInventoryMsg=0x0039 +OP_UpdateRecipeBookMsg=0x003A +OP_RequestRecipeDetailsMsg=0x003B +OP_RecipeDetailsMsg=0x003C +OP_UpdateSkillBookMsg=0x003D +OP_UpdateSkillsMsg=0x003E +OP_UpdateOpportunityMsg=0x003F +OP_ChangeZoneMsg=0x0041 +OP_ClientTeleportRequestMsg=0x0042 +OP_TeleportWithinZoneMsg=0x0043 +OP_TeleportWithinZoneNoReloadMsg=0x0044 +OP_MigrateClientToZoneRequestMsg=0x0045 +OP_MigrateClientToZoneReplyMsg=0x0046 +OP_ReadyToZoneMsg=0x0047 +OP_AddClientToGroupMsg=0x0048 +OP_AddGroupToGroupMsg=0x0049 +OP_RemoveClientFromGroupMsg=0x004A +OP_RemoveGroupFromGroupMsg=0x004B +OP_MakeGroupLeaderMsg=0x004C +OP_GroupCreatedMsg=0x004D +OP_GroupDestroyedMsg=0x004E +OP_GroupMemberAddedMsg=0x004F +OP_GroupMemberRemovedMsg=0x0050 +OP_GroupRemovedFromGroupMsg=0x0051 +OP_GroupLeaderChangedMsg=0x0052 +OP_GroupResendOOZDataMsg=0x0053 +OP_GroupSettingsChangedMsg=0x0054 +OP_OutOfZoneMemberDataMsg=0x0055 +OP_SendLatestRequestMsg=0x0056 +OP_ClearDataMsg=0x0057 +OP_SetSocialMsg=0x0058 +OP_ESStatusMsg=0x0059 +OP_ESZoneInstanceStatusMsg=0x005A +OP_ZonesStatusRequestMsg=0x005B +OP_ZonesStatusMsg=0x005C +OP_ESWeatherRequestMsg=0x005D +OP_ESWeatherRequestEndMsg=0x005E +OP_WSWeatherUpdateMsg=0x005F +OP_DialogSelectMsg=0x0060 +OP_DialogCloseMsg=0x0061 +OP_RemoveSpellEffectMsg=0x0062 +OP_RemoveConcentrationMsg=0x0063 +OP_QuestJournalOpenMsg=0x0064 +OP_QuestJournalInspectMsg=0x0065 +OP_QuestJournalSetVisibleMsg=0x0066 +OP_QuestJournalWaypointMsg=0x0067 +OP_CreateGuildRequestMsg=0x0068 +OP_CreateGuildReplyMsg=0x0069 +OP_GuildsayMsg=0x006A +OP_GuildKickMsg=0x006B +OP_GuildUpdateMsg=0x006C +OP_DeleteGuildMsg=0x006D +OP_FellowshipExpMsg=0x006E +OP_ConsignmentCloseStoreMsg=0x006F +OP_ConsignItemRequestMsg=0x0070 +OP_ConsignItemResponseMsg=0x0071 +OP_PurchaseConsignmentRequestMsg=0x0072 +OP_PurchaseConsignmentResponseMsg=0x0073 +OP_ProcessScriptMsg=0x0074 +OP_ProcessWorkspaceMsg=0x0075 +OP_HouseDeletedRemotelyMsg=0x0076 +OP_UpdateHouseDataMsg=0x0077 +OP_UpdateHouseAccessDataMsg=0x0078 +OP_PlayerHouseBaseScreenMsg=0x0079 +OP_PlayerHousePurchaseScreenMsg=0x007A +OP_PlayerHouseAccessUpdateMsg=0x007B +OP_PlayerHouseDisplayStatusMsg=0x007C +OP_PlayerHouseCloseUIMsg=0x007D +OP_BuyPlayerHouseMsg=0x007E +OP_BuyPlayerHouseTintMsg=0x007F +OP_CollectAllHouseItemsMsg=0x0080 +OP_RelinquishHouseMsg=0x0081 +OP_EnterHouseMsg=0x0082 +OP_ExitHouseMsg=0x0083 +OP_HouseDefaultAccessSetMsg=0x0084 +OP_HouseAccessSetMsg=0x0085 +OP_HouseAccessRemoveMsg=0x0086 +OP_PayHouseUpkeepMsg=0x0087 +OP_MoveableObjectPlacementCriteri=0x0088 +OP_EnterMoveObjectModeMsg=0x0089 +OP_PositionMoveableObject=0x008A +OP_CancelMoveObjectModeMsg=0x008B +OP_ShaderCustomizationMsg=0x008C +OP_ReplaceableSubMeshesMsg=0x008D +OP_HouseCustomizationScreenMsg=0x008E +OP_CustomizationPurchaseRequestMs=0x008F +OP_CustomizationSetRequestMsg=0x0090 +OP_CustomizationReplyMsg=0x0091 +OP_TintWidgetsMsg=0x0092 +OP_ExamineConsignmentRequestMsg=0x0093 +OP_ExamineConsignmentResponseMsg=0x0094 +OP_UISettingsResponseMsg=0x0095 +OP_UIResetMsg=0x0096 +OP_KeymapLoadMsg=0x0097 +OP_KeymapNoneMsg=0x0098 +OP_KeymapDataMsg=0x0099 +OP_KeymapSaveMsg=0x009A +OP_DispatchSpellCmdMsg=0x009B +OP_EntityVerbsRequestMsg=0x009D +OP_EntityVerbsReplyMsg=0x009E +OP_EntityVerbsVerbMsg=0x009F +OP_ChatRelationshipUpdateMsg=0x00A0 +OP_LootItemsRequestMsg=0x00A1 +OP_StoppedLootingMsg=0x00A2 +OP_SitMsg=0x00A3 +OP_StandMsg=0x00A4 +OP_SatMsg=0x00A5 +OP_StoodMsg=0x00A6 +OP_ExamineItemRequestMsg=0x00A7 +OP_DefaultGroupOptionsRequestMsg=0x00A8 +OP_DefaultGroupOptionsMsg=0x00A9 +OP_GroupOptionsMsg=0x00AA +OP_DisplayGroupOptionsScreenMsg=0x00AB +OP_DisplayInnVisitScreenMsg=0x00AC +OP_DumpSchedulerMsg=0x00AD +OP_LSRequestPlayerDescMsg=0x00AE +OP_LSCheckAcctLockMsg=0x00AF +OP_WSAcctLockStatusMsg=0x00B0 +OP_RequestHelpRepathMsg=0x00B1 +OP_RequestTargetLocMsg=0x00B2 +OP_UpdateMotdMsg=0x00B3 +OP_PerformPlayerKnockbackMsg=0x00B4 +OP_PerformCameraShakeMsg=0x00B5 +OP_PopulateSkillMapsMsg=0x00B6 +OP_CancelledFeignMsg=0x00B7 +OP_SignalMsg=0x00B8 +OP_ShowCreateFromRecipeUIMsg=0x00B9 +OP_CancelCreateFromRecipeMsg=0x00BA +OP_BeginItemCreationMsg=0x00BB +OP_StopItemCreationMsg=0x00BC +OP_ShowItemCreationProcessUIMsg=0x00BD +OP_UpdateItemCreationProcessUIMsg=0x00BE +OP_DisplayTSEventReactionMsg=0x00BF +OP_ShowRecipeBookMsg=0x00C0 +OP_KnowledgebaseRequestMsg=0x00C1 +OP_KnowledgebaseResponseMsg=0x00C2 +OP_CSTicketHeaderRequestMsg=0x00C3 +OP_CSTicketInfoMsg=0x00C4 +OP_CSTicketCommentRequestMsg=0x00C5 +OP_CSTicketCommentResponseMsg=0x00C6 +OP_CSTicketCreateMsg=0x00C7 +OP_CSTicketAddCommentMsg=0x00C8 +OP_CSTicketDeleteMsg=0x00C9 +OP_CSTicketChangeNotificationMsg=0x00CA +OP_WorldDataUpdateMsg=0x00CB +OP_KnownLanguagesMsg=0x00CC +OP_LsRequestClientCrashLogMsg=0x00CD +OP_LsClientBaselogReplyMsg=0x00CE +OP_LsClientCrashlogReplyMsg=0x00CF +OP_LsClientAlertlogReplyMsg=0x00D0 +OP_LsClientVerifylogReplyMsg=0x00D1 +OP_ClientTeleportToLocationMsg=0x00D2 +OP_UpdateClientPredFlagsMsg=0x00D3 +OP_ChangeServerControlFlagMsg=0x00D4 +OP_CSToolsRequestMsg=0x00D5 +OP_CSToolsResponseMsg=0x00D6 +OP_AddSocialStructureStandingMsg=0x00D7 +OP_CreateBoatTransportsMsg=0x00D8 +OP_PositionBoatTransportMsg=0x00D9 +OP_MigrateBoatTransportMsg=0x00DA +OP_MigrateBoatTransportReplyMsg=0x00DB +OP_DisplayDebugNLLPointsMsg=0x00DC +OP_ExamineInfoRequestMsg=0x00DD +OP_QuickbarInitMsg=0x00DE +OP_QuickbarUpdateMsg=0x00DF +OP_MacroInitMsg=0x00E0 +OP_MacroUpdateMsg=0x00E1 +OP_QuestionnaireMsg=0x00E2 +OP_LevelChangedMsg=0x00E3 +OP_SpellGainedMsg=0x00E4 +OP_EncounterBrokenMsg=0x00E5 +OP_OnscreenMsgMsg=0x00E6 +OP_DisplayWarningMsg=0x00E7 +OP_ModifyGuildMsg=0x00E8 +OP_GuildEventMsg=0x00E9 +OP_GuildEventAddMsg=0x00EA +OP_GuildEventActionMsg=0x00EB +OP_GuildEventListMsg=0x00EC +OP_RequestGuildEventDetailsMsg=0x00ED +OP_GuildEventDetailsMsg=0x00EE +OP_RequestGuildInfoMsg=0x00EF +OP_RewardPackMsg=0x00F0 +OP_RenameGuildMsg=0x00F1 +OP_ZoneToFriendRequestMsg=0x00F2 +OP_ZoneToFriendReplyMsg=0x00F3 +OP_ChatCreateChannelMsg=0x00F4 +OP_ChatJoinChannelMsg=0x00F5 +OP_ChatWhoChannelMsg=0x00F6 +OP_ChatLeaveChannelMsg=0x00F7 +OP_ChatTellChannelMsg=0x00F8 +OP_ChatTellUserMsg=0x00F9 +OP_ChatToggleFriendMsg=0x00FA +OP_ChatToggleIgnoreMsg=0x00FB +OP_ChatSendFriendsMsg=0x00FC +OP_ChatSendIgnoresMsg=0x00FD +OP_ChatFiltersMsg=0x00FE +OP_MailGetHeadersMsg=0x00FF +OP_MailGetMessageMsg=0x0100 +OP_MailSendMessageMsg=0x0101 +OP_MailDeleteMessageMsg=0x0102 +OP_MailGetHeadersReplyMsg=0x0103 +OP_MailGetMessageReplyMsg=0x0104 +OP_MailSendMessageReplyMsg=0x0105 +OP_MailCommitSendMessageMsg=0x0106 +OP_MailSendSystemMessageMsg=0x0107 +OP_MailRemoveAttachFromMailMsg=0x0108 +OP_WaypointRequestMsg=0x0109 +OP_WaypointReplyMsg=0x010A +OP_WaypointSelectMsg=0x010B +OP_WaypointUpdateMsg=0x010C +OP_CharNameChangedMsg=0x010D +OP_ShowZoneTeleporterDestinations=0x010E +OP_SelectZoneTeleporterDestinatio=0x010F +OP_ReloadLocalizedTxtMsg=0x0110 +OP_RequestGuildMembershipMsg=0x0111 +OP_GuildMembershipResponseMsg=0x0112 +OP_LeaveGuildNotifyMsg=0x0113 +OP_JoinGuildNotifyMsg=0x0114 +OP_AvatarUpdateMsg=0x0115 +OP_BioUpdateMsg=0x0116 +OP_InspectPlayerMsg=0x0117 +OP_WSServerLockMsg=0x0118 +OP_LSServerLockMsg=0x0119 +OP_WSServerHideMsg=0x011A +OP_CsCategoryRequestMsg=0x011B +OP_CsCategoryResponseMsg=0x011C +OP_KnowledgeWindowSlotMappingMsg=0x011D +OP_LFGUpdateMsg=0x011E +OP_AFKUpdateMsg=0x011F +OP_AnonUpdateMsg=0x0120 +OP_UpdateActivePublicZonesMsg=0x0121 +OP_UnknownNpcMsg=0x0122 +OP_PromoFlagsDetailsMsg=0x0123 +OP_ConsignViewCreateMsg=0x0124 +OP_ConsignViewGetPageMsg=0x0125 +OP_ConsignViewReleaseMsg=0x0126 +OP_ConsignRemoveItemsMsg=0x0127 +OP_UpdateDebugRadiiMsg=0x0128 +OP_SnoopMsg=0x0129 +OP_ReportMsg=0x012A +OP_UpdateRaidMsg=0x012B +OP_UpdateArenaMsg=0x012C +OP_ConsignViewSortMsg=0x012D +OP_TitleUpdateMsg=0x012E +OP_ClientFellMsg=0x012F +OP_ClientInDeathRegionMsg=0x0130 +OP_CampClientMsg=0x0131 +OP_CSToolAccessResponseMsg=0x0132 +OP_GetAvatarAccessRequestForCSToo=0x0133 +OP_TrackingUpdateMsg=0x0134 +OP_BeginTrackingMsg=0x0135 +OP_StopTrackingMsg=0x0136 +OP_AdvancementRequestMsg=0x0137 +OP_UpdateAvgFrameTimeMsg=0x0138 +OP_MapFogDataInitMsg=0x0139 +OP_MapFogDataUpdateMsg=0x013A +OP_CloseGroupInviteWindowMsg=0x013B +OP_UpdateGroupMemberDataMsg=0x013C +OP_WorldPingMsg=0x013D +OP_MoveLogUpdateMsg=0x013E +OP_OfferQuestMsg=0x013F +OP_WorldShutdownUpdateMsg=0x0140 +OP_DisplayMailScreenMsg=0x0141 +OP_ClientIdleBeginMsg=0x0142 +OP_ClientIdleEndMsg=0x0143 +OP_PurchaseConsignmentLoreCheckRe=0x0144 +OP_NotifyApprenticeStoppedMentori=0x0145 +OP_CorruptedClientMsg=0x0146 +OP_WorldDataChangeMsg=0x0147 +OP_MailEventNotificationMsg=0x0148 +OP_RestartZoneMsg=0x0149 +OP_FlightPathsMsg=0x014A +OP_CharacterLinkdeadMsg=0x014B +OP_CharTransferStartRequestMsg=0x014C +OP_CharTransferStartReplyMsg=0x014D +OP_CharTransferRequestMsg=0x014E +OP_CharTransferReplyMsg=0x014F +OP_CharTransferRollbackRequestMsg=0x0150 +OP_CharTransferCommitRequestMsg=0x0151 +OP_CharTransferRollbackReplyMsg=0x0152 +OP_CharTransferCommitReplyMsg=0x0153 +OP_GetCharacterSerializedRequestM=0x0154 +OP_GetCharacterSerializedReplyMsg=0x0155 +OP_CreateCharFromCBBRequestMsg=0x0156 +OP_CreateCharFromCBBReplyMsg=0x0157 +OP_HousingDataChangedMsg=0x0158 +OP_HousingRestoreMsg=0x0159 +OP_AuctionItem=0x015A +OP_AuctionItemReply=0x015B +OP_AuctionCoin=0x015C +OP_AuctionCoinReply=0x015D +OP_AuctionCharacter=0x015E +OP_AuctionCharacterReply=0x015F +OP_AuctionCommitMsg=0x0160 +OP_AuctionAbortMsg=0x0161 +OP_CharTransferValidateRequestMsg=0x0162 +OP_CharTransferValidateReplyMsg=0x0163 +OP_RaceRestrictionMsg=0x0164 +OP_SetInstanceDisplayNameMsg=0x0165 +OP_GetAuctionAssetIDMsg=0x0166 +OP_GetAuctionAssetIDReplyMsg=0x0167 +OP_ResendWorldChannelsMsg=0x0168 +OP_DisplayExchangeScreenMsg=0x0169 +OP_AuditAuctionEventMsg=0x016A +OP_ArenaGameTypesMsg=0x016B +OP_ArenaListMsg=0x016C +OP_ArenaSettingsMsg=0x016D +OP_ArenaZoneListMsg=0x016E +OP_ArenaResponseMsg=0x016F +OP_ArenaActionMsg=0x0170 +OP_ArenaParamsMsg=0x0171 +OP_ArenaInstanceReadyMsg=0x0172 +OP_ArenaCreateMsg=0x0173 +OP_ArenaJoinRequestMsg=0x0174 +OP_ArenaMatchStateMsg=0x0175 +OP_ArenaMatchStateUpdateMsg=0x0176 +OP_ArenaJoinTeamRequestMsg=0x0177 +OP_ArenaChampionDetailsMsg=0x0178 +OP_ArenaChampionListMsg=0x0179 +OP_ArenaSetChampionRequestMsg=0x017A +OP_ArenaPlayerReadyMsg=0x017B +OP_ArenaLeaveRequestMsg=0x017C +OP_ArenaZoneRequestMsg=0x017D +OP_ArenaOpenArenaRequestMsg=0x017E +OP_ArenaCloseArenaRequestMsg=0x017F +OP_InviteRequestMsg=0x0180 +OP_InviteResponseMsg=0x0181 +OP_InviteTargetResponseMsg=0x0182 +OP_InspectPlayerRequestMsg=0x0183 +OP_DispatchMsg=0x0184 + +OP_EqHearChatCmd=0x0185 +OP_EqDisplayTextCmd=0x0186 +OP_EqCreateGhostCmd=0x0187 +OP_EqCreateWidgetCmd=0x0188 +OP_EqCreateSignWidgetCmd=0x0189 +OP_EqDestroyGhostCmd=0x018A +OP_EqUpdateGhostCmd=0x018B +OP_EqSetControlGhostCmd=0x018C +OP_EqSetPOVGhostCmd=0x018D +OP_EqHearCombatCmd=0x018E +OP_EqHearSpellCastCmd=0x018F +OP_EqHearSpellInterruptCmd=0x0190 +OP_EqHearSpellFizzleCmd=0x0191 +OP_EqHearConsiderCmd=0x0192 +OP_EqUpdateSubClassesCmd=0x0193 +OP_EqCreateListBoxCmd=0x0194 +OP_EqSetDebugPathPointsCmd=0x0195 +OP_EqCannedEmoteCmd=0x0196 +OP_EqStateCmd=0x0197 +OP_EqPlaySoundCmd=0x0198 +OP_EqPlaySound3DCmd=0x0199 +OP_EqPlayVoiceCmd=0x019A +OP_EqHearDrowningCmd=0x019B +OP_EqHearDeathCmd=0x019C +OP_EqGroupMemberRemovedCmd=0x019D +OP_EqHearChainEffectCmd=0x019E +OP_EqReceiveOfferCmd=0x019F +OP_EqInspectPCResultsCmd=0x01A0 +OP_EqDrawablePathGraphCmd=0x01A1 +OP_EqDialogOpenCmd=0x01A2 +OP_EqDialogCloseCmd=0x01A3 +OP_EqCollectionUpdateCmd=0x01A4 +OP_EqCollectionFilterCmd=0x01A5 +OP_EqCollectionItemCmd=0x01A6 +OP_EqQuestJournalUpdateCmd=0x01A7 +OP_EqQuestJournalReplyCmd=0x01A8 +OP_EqQuestGroupCmd=0x01A9 +OP_EqUpdateMerchantCmd=0x01AA +OP_EqUpdateStoreCmd=0x01AB +OP_EqUpdatePlayerTradeCmd=0x01AC +OP_EqHelpPathCmd=0x01AD +OP_EqHelpPathClearCmd=0x01AE +OP_EqUpdateBankCmd=0x01AF +OP_EqExamineInfoCmd=0x01B0 +OP_EqUpdateLootCmd=0x01B1 +OP_EqJunctionListCmd=0x01B2 +OP_EqShowDeathWindowCmd=0x01B3 +OP_EqDisplaySpellFailCmd=0x01B4 +OP_EqSpellCastStartCmd=0x01B5 +OP_EqSpellCastEndCmd=0x01B6 +OP_EqResurrectedCmd=0x01B7 +OP_EqChoiceWinCmd=0x01B8 +OP_EqSetDefaultVerbCmd=0x01B9 +OP_EqInstructionWindowCmd=0x01BA +OP_EqInstructionWindowCloseCmd=0x01BB +OP_EqInstructionWindowGoalCmd=0x01BC +OP_EqInstructionWindowTaskCmd=0x01BD +OP_EqEnableGameEventCmd=0x01BE +OP_EqShowWindowCmd=0x01BF +OP_EqEnableWindowCmd=0x01C0 +OP_EqFlashWindowCmd=0x01C1 +OP_EqHearPlayFlavorCmd=0x01C2 +OP_EqUpdateSignWidgetCmd=0x01C3 +OP_EqDebugPVDCmd=0x01C4 +OP_EqShowBookCmd=0x01C5 +OP_EqQuestionnaireCmd=0x01C6 +OP_EqGetProbsCmd=0x01C7 +OP_EqHearHealCmd=0x01C8 +OP_EqChatChannelUpdateCmd=0x01C9 +OP_EqWhoChannelQueryReplyCmd=0x01CA +OP_EqAvailWorldChannelsCmd=0x01CB +OP_EqUpdateTargetCmd=0x01CC +OP_EqConsignmentItemsCmd=0x01CD +OP_EqStartBrokerCmd=0x01CE +OP_EqMapExplorationCmd=0x01CF +OP_EqStoreLogCmd=0x01D0 +OP_EqSpellMoveToRangeAndRetryCmd=0x01D1 +OP_EqUpdatePlayerMailCmd=0x01D2 +OP_EqArenaResultsCmd=0x01D3 \ No newline at end of file diff --git a/EQ2/docs/ToDo.txt b/EQ2/docs/ToDo.txt new file mode 100644 index 000000000..248a3a97b --- /dev/null +++ b/EQ2/docs/ToDo.txt @@ -0,0 +1,18 @@ +Quest Enhancements/Fixes +Collection Quests +Item enhancement/Fixes +Spells (More options/types) +Pets +AI Enhancements +Combat revisit +In-game Maps/Fog data +Groups +Instancing +Mounts +Guilds +Tradeskills +In-game email +Zone access flags +AA/Achievements +Create a better way of implementing commands. +Recompile commands into DLL file that can be replaced and reloaded without shutting down server. \ No newline at end of file diff --git a/EQ2/docs/bonus table.html b/EQ2/docs/bonus table.html new file mode 100644 index 000000000..2f77ed9d0 --- /dev/null +++ b/EQ2/docs/bonus table.html @@ -0,0 +1,89 @@ +EQ2 Harvesting Bonus Table + + + + + + + + +

EQ2 Harvesting Bonus Table

+ +

Chance at the Bonus Table

+ + \ No newline at end of file diff --git a/EQ2/docs/charactersheet_struct.txt b/EQ2/docs/charactersheet_struct.txt new file mode 100644 index 000000000..304965b86 --- /dev/null +++ b/EQ2/docs/charactersheet_struct.txt @@ -0,0 +1,73 @@ + + // 0 - 31 + // 31 - 42 + // 43 ( 0x10) + // 44 ( 0x01) + // 45 ( 0x00) + // 46 ( 0x1F) + // 47-50 (26) (race/class?) + // 51-54 (27) (race/class?) + // 55-68 + // 69-70 (0x01) + // 71-72 (0x01) + // 73-74 (0x01) + // 75-78 + // 79-80 (0xDE) + // 81 ( 0x03) + // 82-90 + // 91-92 ( 0x5A ) + // 93-100 + // 101-102 ( 0x5A ) + // 103-104 ( 0x5A ) + // 105-118 + // 119-120 ( 0x4E00 ) + // 121 ( 0x6F ) + // 122 ( 0x6E ) + // 123 ( 0x65 ) + // 124-169 + // 170-173 ( 0x01 ) + // 174-177 ( 0x14 ) + // 178-181 ( 0x14 ) + // 182-185 ( 0x01 ) + // 186-189 ( 0x76 ) + // 190-193 ( 0x76 ) + // 194-197 + // 198-5074 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/EQ2/docs/opcodes.sql b/EQ2/docs/opcodes.sql new file mode 100644 index 000000000..c9048c891 --- /dev/null +++ b/EQ2/docs/opcodes.sql @@ -0,0 +1,10792 @@ +/* +SQLyog Ultimate v9.20 +MySQL - 5.1.54-1ubuntu4 : Database - eq2_updates +********************************************************************* +*/ + +/*!40101 SET NAMES utf8 */; + +/*!40101 SET SQL_MODE=''*/; + +/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */; +/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */; +/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */; +/*Table structure for table `opcodes` */ + +DROP TABLE IF EXISTS `opcodes`; + +CREATE TABLE `opcodes` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `version_range1` smallint(5) unsigned NOT NULL DEFAULT '0', + `version_range2` smallint(5) unsigned NOT NULL DEFAULT '0', + `name` varchar(255) NOT NULL DEFAULT '', + `opcode` smallint(5) unsigned NOT NULL DEFAULT '0', + `table_data_version` smallint(5) unsigned NOT NULL DEFAULT '1', + PRIMARY KEY (`id`), + UNIQUE KEY `newindex` (`version_range1`,`name`,`version_range2`) +) ENGINE=InnoDB AUTO_INCREMENT=11250 DEFAULT CHARSET=latin1; + +/*Data for the table `opcodes` */ + +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1,0,0,'OP_LoginRequestMsg',0,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2,0,0,'OP_LoginByNumRequestMsg',1,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3,0,0,'OP_WSLoginRequestMsg',2,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4,0,0,'OP_ESLoginRequestMsg',3,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5,0,0,'OP_LoginReplyMsg',4,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6,0,0,'OP_WSStatusReplyMsg',5,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7,0,0,'OP_WorldStatusChangeMsg',6,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8,0,0,'OP_AllWSDescRequestMsg',7,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9,0,0,'OP_WorldListMsg',8,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10,0,0,'OP_AllCharactersDescRequestMsg',9,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (11,0,0,'OP_AllCharactersDescReplyMsg',10,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (12,0,0,'OP_CreateCharacterRequestMsg',11,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (13,0,0,'OP_CreateCharacterReplyMsg',12,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (14,0,0,'OP_WSCreateCharacterRequestMsg',13,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (15,0,0,'OP_WSCreateCharacterReplyMsg',14,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (16,0,0,'OP_ReskinCharacterRequestMsg',15,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (17,0,0,'OP_DeleteCharacterRequestMsg',16,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (18,0,0,'OP_DeleteCharacterReplyMsg',17,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (19,0,0,'OP_PlayCharacterRequestMsg',18,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (20,0,0,'OP_PlayCharacterReplyMsg',19,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (21,0,0,'OP_ExpectClientAsCharacterReplyMs',22,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (22,0,0,'OP_ServerPlayCharacterRequestMsg',23,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (23,0,0,'OP_ServerPlayCharacterReplyMsg',24,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (24,0,0,'OP_ESInitMsg',25,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (25,0,0,'OP_ESReadyForClientsMsg',26,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (26,0,0,'OP_CreateZoneInstanceMsg',27,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (27,0,0,'OP_ZoneInstanceCreateReplyMsg',28,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (28,0,0,'OP_ZoneInstanceDestroyedMsg',29,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (29,0,0,'OP_ExpectClientAsCharacterRequest',30,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (30,0,0,'OP_ZoneInfoMsg',31,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (31,0,0,'OP_DoneLoadingZoneResourcesMsg',32,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (32,0,0,'OP_DoneSendingInitialEntitiesMsg',33,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (33,0,0,'OP_DoneLoadingEntityResourcesMsg',34,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (34,0,0,'OP_PredictionUpdateMsg',35,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (35,0,0,'OP_UpdatePositionMsg',36,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (36,0,0,'OP_SetRemoteCmdsMsg',37,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (37,0,0,'OP_RemoteCmdMsg',38,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (38,0,0,'OP_GameWorldTimeMsg',39,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (39,0,0,'OP_MOTDMsg',40,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (40,0,0,'OP_ZoneMOTDMsg',41,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (41,0,0,'OP_AvatarCreatedMsg',42,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (42,0,0,'OP_AvatarDestroyedMsg',43,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (43,0,0,'OP_RequestCampMsg',45,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (44,0,0,'OP_CampStartedMsg',46,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (45,0,0,'OP_CampAbortedMsg',47,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (46,0,0,'OP_WhoQueryRequestMsg',48,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (47,0,0,'OP_WhoQueryReplyMsg',49,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (48,0,0,'OP_MonitorReplyMsg',50,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (49,0,0,'OP_MonitorCharacterListMsg',51,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (50,0,0,'OP_MonitorCharacterListRequestMsg',52,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (51,0,0,'OP_ClientCmdMsg',53,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (52,0,0,'OP_DispatchESMsg',54,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (53,0,0,'OP_DispatchClientCmdMsg',55,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (54,0,0,'OP_UpdateTargetMsg',56,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (55,0,0,'OP_UpdateTargetLocMsg',57,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (56,0,0,'OP_UpdateCharacterSheetMsg',58,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (57,0,0,'OP_UpdateSpellBookMsg',59,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (58,0,0,'OP_UpdateInventoryMsg',61,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (59,0,0,'OP_UpdateRecipeBookMsg',63,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (60,0,0,'OP_RequestRecipeDetailsMsg',64,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (61,0,0,'OP_RecipeDetailsMsg',65,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (62,0,0,'OP_UpdateSkillBookMsg',66,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (63,0,0,'OP_UpdateSkillsMsg',67,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (64,0,0,'OP_UpdateOpportunityMsg',68,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (65,0,0,'OP_ChangeZoneMsg',70,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (66,0,0,'OP_ClientTeleportRequestMsg',71,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (67,0,0,'OP_TeleportWithinZoneMsg',72,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (68,0,0,'OP_TeleportWithinZoneNoReloadMsg',73,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (69,0,0,'OP_MigrateClientToZoneRequestMsg',74,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (70,0,0,'OP_MigrateClientToZoneReplyMsg',75,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (71,0,0,'OP_ReadyToZoneMsg',76,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (72,0,0,'OP_RemoveClientFromGroupMsg',77,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (73,0,0,'OP_RemoveGroupFromGroupMsg',78,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (74,0,0,'OP_MakeGroupLeaderMsg',79,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (75,0,0,'OP_GroupCreatedMsg',80,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (76,0,0,'OP_GroupDestroyedMsg',81,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (77,0,0,'OP_GroupMemberAddedMsg',82,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (78,0,0,'OP_GroupMemberRemovedMsg',83,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (79,0,0,'OP_GroupRemovedFromGroupMsg',84,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (80,0,0,'OP_GroupLeaderChangedMsg',85,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (81,0,0,'OP_GroupResendOOZDataMsg',86,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (82,0,0,'OP_GroupSettingsChangedMsg',87,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (83,0,0,'OP_OutOfZoneMemberDataMsg',88,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (84,0,0,'OP_SendLatestRequestMsg',89,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (85,0,0,'OP_ClearDataMsg',90,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (86,0,0,'OP_SetSocialMsg',91,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (87,0,0,'OP_ESStatusMsg',92,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (88,0,0,'OP_ESZoneInstanceStatusMsg',93,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (89,0,0,'OP_ZonesStatusRequestMsg',94,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (90,0,0,'OP_ZonesStatusMsg',95,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (91,0,0,'OP_ESWeatherRequestMsg',96,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (92,0,0,'OP_ESWeatherRequestEndMsg',97,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (93,0,0,'OP_DialogSelectMsg',98,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (94,0,0,'OP_DialogCloseMsg',99,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (95,0,0,'OP_RemoveSpellEffectMsg',100,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (96,0,0,'OP_RemoveConcentrationMsg',101,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (97,0,0,'OP_QuestJournalOpenMsg',104,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (98,0,0,'OP_QuestJournalInspectMsg',105,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (99,0,0,'OP_QuestJournalSetVisibleMsg',106,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (100,0,0,'OP_QuestJournalWaypointMsg',107,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (101,0,0,'OP_CreateGuildRequestMsg',108,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (102,0,0,'OP_CreateGuildReplyMsg',109,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (103,0,0,'OP_GuildsayMsg',110,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (104,0,0,'OP_GuildUpdateMsg',111,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (105,0,0,'OP_DeleteGuildMsg',112,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (106,0,0,'OP_FellowshipExpMsg',113,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (107,0,0,'OP_ConsignmentCloseStoreMsg',114,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (108,0,0,'OP_ConsignItemRequestMsg',115,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (109,0,0,'OP_ConsignItemResponseMsg',116,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (110,0,0,'OP_PurchaseConsignmentRequestMsg',117,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (111,0,0,'OP_HouseDeletedRemotelyMsg',118,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (112,0,0,'OP_UpdateHouseDataMsg',119,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (113,0,0,'OP_UpdateHouseAccessDataMsg',120,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (114,0,0,'OP_PlayerHouseBaseScreenMsg',121,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (115,0,0,'OP_PlayerHousePurchaseScreenMsg',122,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (116,0,0,'OP_PlayerHouseAccessUpdateMsg',123,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (117,0,0,'OP_PlayerHouseDisplayStatusMsg',124,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (118,0,0,'OP_PlayerHouseCloseUIMsg',125,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (119,0,0,'OP_BuyPlayerHouseMsg',126,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (120,0,0,'OP_BuyPlayerHouseTintMsg',127,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (121,0,0,'OP_CollectAllHouseItemsMsg',128,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (122,0,0,'OP_RelinquishHouseMsg',129,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (123,0,0,'OP_EnterHouseMsg',130,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (124,0,0,'OP_ExitHouseMsg',131,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (125,0,0,'OP_HouseDefaultAccessSetMsg',132,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (126,0,0,'OP_HouseAccessSetMsg',133,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (127,0,0,'OP_HouseAccessRemoveMsg',134,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (128,0,0,'OP_PayHouseUpkeepMsg',135,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (129,0,0,'OP_MoveableObjectPlacementCriteri',136,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (130,0,0,'OP_EnterMoveObjectModeMsg',137,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (131,0,0,'OP_PositionMoveableObject',138,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (132,0,0,'OP_CancelMoveObjectModeMsg',139,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (133,0,0,'OP_ShaderCustomizationMsg',140,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (134,0,0,'OP_ReplaceableSubMeshesMsg',141,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (135,0,0,'OP_HouseCustomizationScreenMsg',142,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (136,0,0,'OP_CustomizationPurchaseRequestMs',143,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (137,0,0,'OP_CustomizationSetRequestMsg',144,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (138,0,0,'OP_CustomizationReplyMsg',145,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (139,0,0,'OP_TintWidgetsMsg',146,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (140,0,0,'OP_ExamineConsignmentRequestMsg',147,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (141,0,0,'OP_ExamineConsignmentResponseMsg',148,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (142,0,0,'OP_UISettingsResponseMsg',149,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (143,0,0,'OP_UIResetMsg',150,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (144,0,0,'OP_KeymapLoadMsg',151,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (145,0,0,'OP_KeymapNoneMsg',152,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (146,0,0,'OP_KeymapDataMsg',153,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (147,0,0,'OP_KeymapSaveMsg',154,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (148,0,0,'OP_DispatchSpellCmdMsg',155,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (149,0,0,'OP_EntityVerbsRequestMsg',157,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (150,0,0,'OP_EntityVerbsReplyMsg',158,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (151,0,0,'OP_EntityVerbsVerbMsg',159,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (152,0,0,'OP_ChatRelationshipUpdateMsg',161,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (153,0,0,'OP_LootItemsRequestMsg',162,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (154,0,0,'OP_StoppedLootingMsg',163,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (155,0,0,'OP_SitMsg',164,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (156,0,0,'OP_StandMsg',165,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (157,0,0,'OP_SatMsg',166,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (158,0,0,'OP_StoodMsg',167,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (159,0,0,'OP_ClearForTakeOffMsg',168,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (160,0,0,'OP_ReadyForTakeOffMsg',169,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (161,0,0,'OP_ShowIllusionsMsg',170,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (162,0,0,'OP_HideIllusionsMsg',171,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (163,0,0,'OP_ExamineItemRequestMsg',172,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (164,0,0,'OP_ReadBookPageMsg',173,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (165,0,0,'OP_DefaultGroupOptionsRequestMsg',174,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (166,0,0,'OP_DefaultGroupOptionsMsg',175,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (167,0,0,'OP_GroupOptionsMsg',176,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (168,0,0,'OP_DisplayGroupOptionsScreenMsg',177,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (169,0,0,'OP_DisplayInnVisitScreenMsg',178,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (170,0,0,'OP_DumpSchedulerMsg',179,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (171,0,0,'OP_LSRequestPlayerDescMsg',180,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (172,0,0,'OP_LSCheckAcctLockMsg',181,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (173,0,0,'OP_WSAcctLockStatusMsg',182,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (174,0,0,'OP_RequestHelpRepathMsg',183,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (175,0,0,'OP_RequestTargetLocMsg',184,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (176,0,0,'OP_UpdateMotdMsg',185,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (177,0,0,'OP_PerformPlayerKnockbackMsg',186,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (178,0,0,'OP_PerformCameraShakeMsg',187,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (179,0,0,'OP_PopulateSkillMapsMsg',188,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (180,0,0,'OP_CancelledFeignMsg',190,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (181,0,0,'OP_SignalMsg',191,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (182,0,0,'OP_ShowCreateFromRecipeUIMsg',192,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (183,0,0,'OP_CancelCreateFromRecipeMsg',193,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (184,0,0,'OP_BeginItemCreationMsg',194,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (185,0,0,'OP_StopItemCreationMsg',195,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (186,0,0,'OP_ShowItemCreationProcessUIMsg',196,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (187,0,0,'OP_UpdateItemCreationProcessUIMsg',197,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (188,0,0,'OP_DisplayTSEventReactionMsg',198,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (189,0,0,'OP_ShowRecipeBookMsg',199,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (190,0,0,'OP_KnowledgebaseRequestMsg',200,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (191,0,0,'OP_KnowledgebaseResponseMsg',201,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (192,0,0,'OP_CSTicketHeaderRequestMsg',202,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (193,0,0,'OP_CSTicketInfoMsg',203,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (194,0,0,'OP_CSTicketCommentRequestMsg',204,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (195,0,0,'OP_CSTicketCommentResponseMsg',205,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (196,0,0,'OP_CSTicketCreateMsg',206,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (197,0,0,'OP_CSTicketAddCommentMsg',207,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (198,0,0,'OP_CSTicketDeleteMsg',208,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (199,0,0,'OP_CSTicketChangeNotificationMsg',209,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (200,0,0,'OP_WorldDataUpdateMsg',210,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (201,0,0,'OP_KnownLanguagesMsg',211,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (202,0,0,'OP_LsRequestClientCrashLogMsg',212,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (203,0,0,'OP_LsClientBaselogReplyMsg',213,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (204,0,0,'OP_LsClientCrashlogReplyMsg',214,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (205,0,0,'OP_LsClientAlertlogReplyMsg',215,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (206,0,0,'OP_LsClientVerifylogReplyMsg',216,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (207,0,0,'OP_ClientTeleportToLocationMsg',217,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (208,0,0,'OP_UpdateClientPredFlagsMsg',218,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (209,0,0,'OP_ChangeServerControlFlagMsg',219,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (210,0,0,'OP_CSToolsRequestMsg',220,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (211,0,0,'OP_CSToolsResponseMsg',221,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (212,0,0,'OP_AddSocialStructureStandingMsg',222,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (213,0,0,'OP_CreateBoatTransportsMsg',223,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (214,0,0,'OP_PositionBoatTransportMsg',224,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (215,0,0,'OP_MigrateBoatTransportMsg',225,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (216,0,0,'OP_MigrateBoatTransportReplyMsg',226,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (217,0,0,'OP_DisplayDebugNLLPointsMsg',227,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (218,0,0,'OP_ExamineInfoRequestMsg',228,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (219,0,0,'OP_QuickbarInitMsg',229,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (220,0,0,'OP_QuickbarUpdateMsg',230,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (221,0,0,'OP_MacroInitMsg',231,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (222,0,0,'OP_MacroUpdateMsg',232,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (223,0,0,'OP_QuestionnaireMsg',233,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (224,0,0,'OP_LevelChangedMsg',234,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (225,0,0,'OP_SpellGainedMsg',235,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (226,0,0,'OP_EncounterBrokenMsg',236,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (227,0,0,'OP_OnscreenMsgMsg',237,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (228,0,0,'OP_DisplayWarningMsg',238,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (229,0,0,'OP_ModifyGuildMsg',239,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (230,0,0,'OP_GuildEventMsg',240,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (231,0,0,'OP_GuildEventAddMsg',241,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (232,0,0,'OP_GuildEventActionMsg',242,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (233,0,0,'OP_GuildEventListMsg',243,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (234,0,0,'OP_RequestGuildEventDetailsMsg',244,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (235,0,0,'OP_GuildEventDetailsMsg',245,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (236,0,0,'OP_RequestGuildInfoMsg',246,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (237,0,0,'OP_GuildBankActionMsg',247,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (238,0,0,'OP_GuildBankActionResponseMsg',248,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (239,0,0,'OP_GuildBankItemDetailsRequestMsg',249,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (240,0,0,'OP_GuildBankItemDetailsResponseMs',250,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (241,0,0,'OP_GuildBankUpdateMsg',251,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (242,0,0,'OP_GuildBankEventListMsg',252,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (243,0,0,'OP_RequestGuildBankEventDetailsMs',253,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (244,0,0,'OP_RewardPackMsg',254,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (245,0,0,'OP_RenameGuildMsg',255,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (246,0,0,'OP_ZoneToFriendRequestMsg',257,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (247,0,0,'OP_ZoneToFriendReplyMsg',258,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (248,0,0,'OP_ChatCreateChannelMsg',259,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (249,0,0,'OP_ChatJoinChannelMsg',260,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (250,0,0,'OP_ChatWhoChannelMsg',261,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (251,0,0,'OP_ChatLeaveChannelMsg',262,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (252,0,0,'OP_ChatTellChannelMsg',263,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (253,0,0,'OP_ChatTellUserMsg',264,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (254,0,0,'OP_ChatToggleFriendMsg',265,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (255,0,0,'OP_ChatToggleIgnoreMsg',266,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (256,0,0,'OP_ChatSendFriendsMsg',267,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (257,0,0,'OP_ChatSendIgnoresMsg',268,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (258,0,0,'OP_QuestReward',294,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (259,0,0,'OP_ChatFiltersMsg',309,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (260,0,0,'OP_MailGetHeadersMsg',310,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (261,0,0,'OP_MailGetMessageMsg',311,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (262,0,0,'OP_MailSendMessageMsg',312,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (263,0,0,'OP_MailDeleteMessageMsg',313,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (264,0,0,'OP_MailGetHeadersReplyMsg',314,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (265,0,0,'OP_MailGetMessageReplyMsg',315,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (266,0,0,'OP_MailSendMessageReplyMsg',316,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (267,0,0,'OP_MailCommitSendMessageMsg',317,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (268,0,0,'OP_MailSendSystemMessageMsg',318,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (269,0,0,'OP_MailRemoveAttachFromMailMsg',319,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (270,0,0,'OP_WaypointRequestMsg',321,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (271,0,0,'OP_WaypointReplyMsg',322,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (272,0,0,'OP_WaypointSelectMsg',323,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (273,0,0,'OP_WaypointUpdateMsg',324,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (274,0,0,'OP_CharNameChangedMsg',325,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (275,0,0,'OP_ShowZoneTeleporterDestinations',326,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (276,0,0,'OP_SelectZoneTeleporterDestinatio',327,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (277,0,0,'OP_ReloadLocalizedTxtMsg',328,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (278,0,0,'OP_RequestGuildMembershipMsg',329,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (279,0,0,'OP_GuildMembershipResponseMsg',330,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (280,0,0,'OP_LeaveGuildNotifyMsg',331,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (281,0,0,'OP_JoinGuildNotifyMsg',332,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (282,0,0,'OP_AvatarUpdateMsg',334,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (283,0,0,'OP_BioUpdateMsg',335,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (284,0,0,'OP_InspectPlayerMsg',336,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (285,0,0,'OP_WSServerLockMsg',337,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (286,0,0,'OP_LSServerLockMsg',338,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (287,0,0,'OP_WSServerHideMsg',339,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (288,0,0,'OP_CsCategoryRequestMsg',340,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (289,0,0,'OP_CsCategoryResponseMsg',341,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (290,0,0,'OP_KnowledgeWindowSlotMappingMsg',342,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (291,0,0,'OP_LFGUpdateMsg',343,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (292,0,0,'OP_AFKUpdateMsg',344,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (293,0,0,'OP_AnonUpdateMsg',345,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (294,0,0,'OP_UpdateActivePublicZonesMsg',346,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (295,0,0,'OP_UnknownNpcMsg',347,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (296,0,0,'OP_PromoFlagsDetailsMsg',348,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (297,0,0,'OP_ConsignViewCreateMsg',349,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (298,0,0,'OP_ConsignViewGetPageMsg',350,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (299,0,0,'OP_ConsignViewReleaseMsg',351,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (300,0,0,'OP_ConsignRemoveItemsMsg',352,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (301,0,0,'OP_UpdateDebugRadiiMsg',353,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (302,0,0,'OP_SnoopMsg',354,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (303,0,0,'OP_ReportMsg',355,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (304,0,0,'OP_UpdateRaidMsg',356,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (305,0,0,'OP_ConsignViewSortMsg',357,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (306,0,0,'OP_TitleUpdateMsg',358,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (307,0,0,'OP_ClientFellMsg',359,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (308,0,0,'OP_ClientInDeathRegionMsg',360,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (309,0,0,'OP_CampClientMsg',361,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (310,0,0,'OP_CSToolAccessResponseMsg',362,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (311,0,0,'OP_TrackingUpdateMsg',363,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (312,0,0,'OP_BeginTrackingMsg',364,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (313,0,0,'OP_StopTrackingMsg',365,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (314,0,0,'OP_GetAvatarAccessRequestForCSToo',366,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (315,0,0,'OP_AdvancementRequestMsg',367,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (316,0,0,'OP_UpdateAvgFrameTimeMsg',368,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (317,0,0,'OP_MapFogDataInitMsg',369,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (318,0,0,'OP_MapFogDataUpdateMsg',370,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (319,0,0,'OP_CloseGroupInviteWindowMsg',371,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (320,0,0,'OP_UpdateGroupMemberDataMsg',372,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (321,0,0,'OP_WorldPingMsg',373,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (322,0,0,'OP_MoveLogUpdateMsg',374,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (323,0,0,'OP_OfferQuestMsg',375,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (324,0,0,'OP_WorldShutdownUpdateMsg',376,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (325,0,0,'OP_DisplayMailScreenMsg',377,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (326,0,0,'OP_ClientIdleBeginMsg',378,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (327,0,0,'OP_ClientIdleEndMsg',379,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (328,0,0,'OP_PurchaseConsignmentLoreCheckRe',380,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (329,0,0,'OP_NotifyApprenticeStoppedMentori',381,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (330,0,0,'OP_CorruptedClientMsg',382,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (331,0,0,'OP_WorldDataChangeMsg',383,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (332,0,0,'OP_MailEventNotificationMsg',384,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (333,0,0,'OP_RestartZoneMsg',385,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (334,0,0,'OP_FlightPathsMsg',386,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (335,0,0,'OP_CharacterLinkdeadMsg',387,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (336,0,0,'OP_CharTransferStartRequestMsg',388,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (337,0,0,'OP_CharTransferStartReplyMsg',389,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (338,0,0,'OP_CharTransferRequestMsg',390,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (339,0,0,'OP_CharTransferReplyMsg',391,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (340,0,0,'OP_CharTransferRollbackRequestMsg',392,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (341,0,0,'OP_CharTransferCommitRequestMsg',393,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (342,0,0,'OP_CharTransferRollbackReplyMsg',394,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (343,0,0,'OP_CharTransferCommitReplyMsg',395,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (344,0,0,'OP_GetCharacterSerializedRequestM',396,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (345,0,0,'OP_GetCharacterSerializedReplyMsg',397,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (346,0,0,'OP_CreateCharFromCBBRequestMsg',398,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (347,0,0,'OP_CreateCharFromCBBReplyMsg',399,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (348,0,0,'OP_HousingDataChangedMsg',400,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (349,0,0,'OP_HousingRestoreMsg',401,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (350,0,0,'OP_AuctionItem',402,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (351,0,0,'OP_AuctionItemReply',403,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (352,0,0,'OP_AuctionCoin',404,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (353,0,0,'OP_AuctionCoinReply',405,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (354,0,0,'OP_AuctionCharacter',406,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (355,0,0,'OP_AuctionCharacterReply',407,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (356,0,0,'OP_AuctionCommitMsg',408,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (357,0,0,'OP_AuctionAbortMsg',409,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (358,0,0,'OP_CharTransferValidateRequestMsg',410,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (359,0,0,'OP_CharTransferValidateReplyMsg',411,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (360,0,0,'OP_RaceRestrictionMsg',412,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (361,0,0,'OP_SetInstanceDisplayNameMsg',413,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (362,0,0,'OP_GetAuctionAssetIDMsg',414,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (363,0,0,'OP_GetAuctionAssetIDReplyMsg',415,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (364,0,0,'OP_ResendWorldChannelsMsg',416,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (365,0,0,'OP_DisplayExchangeScreenMsg',417,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (366,0,0,'OP_ArenaGameTypesMsg',418,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (367,0,0,'OP_AuditAuctionEventMsg',420,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (368,0,0,'OP_InviteRequestMsg',422,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (369,0,0,'OP_InviteResponseMsg',423,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (370,0,0,'OP_InviteTargetResponseMsg',424,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (371,0,0,'OP_InspectPlayerRequestMsg',425,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (372,0,0,'OP_DispatchMsg',426,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (373,0,0,'OP_DisplayEventMsg',427,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (374,0,0,'OP_PrePossessionMsg',428,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (375,0,0,'OP_PostPossessionMsg',429,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (376,0,0,'OP_AdventureList',454,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (377,0,0,'OP_CancelSpellCast',455,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (378,0,0,'OP_AttackAllowed',467,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (379,0,0,'OP_AttackNotAllowed',468,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (380,0,0,'OP_DressingRoom',474,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (381,0,0,'OP_SkillInfoRequest',478,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (382,0,0,'OP_SkillInfoResponse',479,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (383,0,0,'OP_EqHearChatCmd',480,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (384,0,0,'OP_EqDisplayTextCmd',481,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (385,0,0,'OP_EqCreateGhostCmd',482,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (386,0,0,'OP_EqCreateWidgetCmd',483,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (387,0,0,'OP_EqCreateSignWidgetCmd',484,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (388,0,0,'OP_EqDestroyGhostCmd',485,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (389,0,0,'OP_EqUpdateGhostCmd',486,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (390,0,0,'OP_EqSetControlGhostCmd',487,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (391,0,0,'OP_EqSetPOVGhostCmd',488,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (392,0,0,'OP_EqHearCombatCmd',489,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (393,0,0,'OP_EqHearSpellCastCmd',490,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (394,0,0,'OP_EqHearSpellInterruptCmd',493,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (395,0,0,'OP_EqHearSpellFizzleCmd',494,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (396,0,0,'OP_EqHearConsiderCmd',495,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (397,0,0,'OP_EqUpdateSubClassesCmd',496,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (398,0,0,'OP_EqCreateListBoxCmd',497,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (399,0,0,'OP_EqSetDebugPathPointsCmd',498,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (400,0,0,'OP_EqCannedEmoteCmd',500,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (401,0,0,'OP_EqStateCmd',501,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (402,0,0,'OP_EqPlaySoundCmd',502,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (403,0,0,'OP_EqPlaySound3DCmd',503,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (404,0,0,'OP_EqPlayVoiceCmd',504,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (405,0,0,'OP_EqHearDrowningCmd',505,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (406,0,0,'OP_EqHearDeathCmd',506,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (407,0,0,'OP_EqGroupMemberRemovedCmd',507,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (408,0,0,'OP_EqHearChainEffectCmd',508,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (409,0,0,'OP_EqReceiveOfferCmd',509,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (410,0,0,'OP_EqInspectPCResultsCmd',510,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (411,0,0,'OP_EqDrawablePathGraphCmd',511,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (412,0,0,'OP_EqDialogOpenCmd',512,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (413,0,0,'OP_EqDialogCloseCmd',513,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (414,0,0,'OP_EqFactionUpdateCmd',514,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (415,0,0,'OP_EqCollectionUpdateCmd',515,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (416,0,0,'OP_EqCollectionFilterCmd',516,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (417,0,0,'OP_EqCollectionItemCmd',517,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (418,0,0,'OP_EqQuestJournalUpdateCmd',518,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (419,0,0,'OP_EqQuestJournalReplyCmd',520,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (420,0,0,'OP_EqQuestGroupCmd',521,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (421,0,0,'OP_EqUpdateMerchantCmd',522,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (422,0,0,'OP_EqUpdateStoreCmd',523,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (423,0,0,'OP_EqUpdatePlayerTradeCmd',524,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (424,0,0,'OP_EqHelpPathCmd',525,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (425,0,0,'OP_EqHelpPathClearCmd',526,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (426,0,0,'OP_EqUpdateBankCmd',527,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (427,0,0,'OP_EqExamineInfoCmd',528,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (428,0,0,'OP_EqCloseWindowCmd',529,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (429,0,0,'OP_EqUpdateLootCmd',530,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (430,0,0,'OP_EqJunctionListCmd',531,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (431,0,0,'OP_EqShowDeathWindowCmd',532,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (432,0,0,'OP_EqDisplaySpellFailCmd',533,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (433,0,0,'OP_EqSpellCastStartCmd',534,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (434,0,0,'OP_EqSpellCastEndCmd',535,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (435,0,0,'OP_EqResurrectedCmd',536,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (436,0,0,'OP_EqChoiceWinCmd',537,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (437,0,0,'OP_EqSetDefaultVerbCmd',538,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (438,0,0,'OP_EqInstructionWindowCmd',540,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (439,0,0,'OP_EqInstructionWindowCloseCmd',541,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (440,0,0,'OP_EqInstructionWindowGoalCmd',542,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (441,0,0,'OP_EqInstructionWindowTaskCmd',543,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (442,0,0,'OP_EqEnableGameEventCmd',544,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (443,0,0,'OP_EqShowWindowCmd',545,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (444,0,0,'OP_EqEnableWindowCmd',546,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (445,0,0,'OP_EqFlashWindowCmd',547,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (446,0,0,'OP_EqHearPlayFlavorCmd',548,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (447,0,0,'OP_EqUpdateSignWidgetCmd',550,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (448,0,0,'OP_EqDebugPVDCmd',551,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (449,0,0,'OP_EqShowBookCmd',552,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (450,0,0,'OP_EqQuestionnaireCmd',553,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (451,0,0,'OP_EqGetProbsCmd',554,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (452,0,0,'OP_EqHearHealCmd',555,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (453,0,0,'OP_EqChatChannelUpdateCmd',556,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (454,0,0,'OP_EqWhoChannelQueryReplyCmd',557,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (455,0,0,'OP_EqAvailWorldChannelsCmd',558,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (456,0,0,'OP_EqUpdateTargetCmd',559,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (457,0,0,'OP_EqConsignmentItemsCmd',561,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (458,0,0,'OP_EqStartBrokerCmd',563,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (459,0,0,'OP_EqMapExplorationCmd',564,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (460,0,0,'OP_EqStoreLogCmd',565,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (461,0,0,'OP_EqSpellMoveToRangeAndRetryCmd',566,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (462,0,0,'OP_EqUpdatePlayerMailCmd',567,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (463,0,0,'OP_EqArenaResultsCmd',568,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (464,0,0,'OP_EqGuildBankEventActionCmd',569,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (465,0,0,'OP_EqGuildBankExamineInfoCmd',570,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (466,0,0,'OP_EqHearSpellNoLandCmd',571,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (467,0,0,'OP_Lottery',572,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (468,0,0,'OP_GuildRecruitingMemberInfo',573,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (469,0,0,'OP_GuildRecruiting',574,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (470,0,0,'OP_GuildRecruitingDetails',575,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (471,0,0,'OP_GuildRecruitingImage',576,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (472,0,0,'OP_PointOfInterest',597,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (473,0,0,'OP_TraitsList',599,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (474,0,0,'OP_RecipeList',608,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (475,0,0,'OP_CharacterAchievements',655,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (476,0,0,'OP_AddClientToGroupMsg',999,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (477,0,0,'OP_AddGroupToGroupMsg',999,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (478,0,0,'OP_GuildKickMsg',999,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (479,0,0,'OP_PurchaseConsignmentResponseMsg',999,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (480,0,0,'OP_ProcessScriptMsg',999,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (481,0,0,'OP_ProcessWorkspaceMsg',999,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (482,0,0,'OP_QuickbarAddMsg',999,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (483,0,0,'OP_SkillSlotMapping',999,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (484,0,0,'OP_MapRequest',999,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (485,0,0,'OP_Unknown',10000,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (486,0,0,'OP_WSWeatherUpdateMsg',10012,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (487,839,844,'OP_LoginRequestMsg',0,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (488,839,844,'OP_LoginByNumRequestMsg',1,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (489,839,844,'OP_WSLoginRequestMsg',2,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (490,839,844,'OP_ESLoginRequestMsg',3,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (491,839,844,'OP_LoginReplyMsg',4,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (492,839,844,'OP_WSStatusReplyMsg',5,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (493,839,844,'OP_WorldStatusChangeMsg',6,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (494,839,844,'OP_AllWSDescRequestMsg',7,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (495,839,844,'OP_WorldListMsg',8,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (496,839,844,'OP_AllCharactersDescRequestMsg',9,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (497,839,844,'OP_AllCharactersDescReplyMsg',10,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (498,839,844,'OP_CreateCharacterRequestMsg',11,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (499,839,844,'OP_CreateCharacterReplyMsg',12,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (500,839,844,'OP_WSCreateCharacterRequestMsg',13,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (501,839,844,'OP_WSCreateCharacterReplyMsg',14,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (502,839,844,'OP_ReskinCharacterRequestMsg',15,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (503,839,844,'OP_DeleteCharacterRequestMsg',16,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (504,839,844,'OP_DeleteCharacterReplyMsg',17,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (505,839,844,'OP_PlayCharacterRequestMsg',18,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (506,839,844,'OP_PlayCharacterReplyMsg',19,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (507,839,844,'OP_ExpectClientAsCharacterReplyMs',22,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (508,839,844,'OP_ServerPlayCharacterRequestMsg',23,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (509,839,844,'OP_ServerPlayCharacterReplyMsg',24,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (510,839,844,'OP_ESInitMsg',25,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (511,839,844,'OP_ESReadyForClientsMsg',26,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (512,839,844,'OP_CreateZoneInstanceMsg',27,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (513,839,844,'OP_ZoneInstanceCreateReplyMsg',28,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (514,839,844,'OP_ZoneInstanceDestroyedMsg',29,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (515,839,844,'OP_ExpectClientAsCharacterRequest',30,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (516,839,844,'OP_ZoneInfoMsg',31,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (517,839,844,'OP_DoneLoadingZoneResourcesMsg',32,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (518,839,844,'OP_DoneSendingInitialEntitiesMsg',33,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (519,839,844,'OP_DoneLoadingEntityResourcesMsg',34,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (520,839,844,'OP_PredictionUpdateMsg',35,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (521,839,844,'OP_UpdatePositionMsg',36,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (522,839,844,'OP_SetRemoteCmdsMsg',37,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (523,839,844,'OP_RemoteCmdMsg',38,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (524,839,844,'OP_GameWorldTimeMsg',39,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (525,839,844,'OP_MOTDMsg',40,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (526,839,844,'OP_ZoneMOTDMsg',41,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (527,839,844,'OP_AvatarCreatedMsg',42,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (528,839,844,'OP_AvatarDestroyedMsg',43,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (529,839,844,'OP_RequestCampMsg',45,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (530,839,844,'OP_CampStartedMsg',46,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (531,839,844,'OP_CampAbortedMsg',47,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (532,839,844,'OP_WhoQueryRequestMsg',48,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (533,839,844,'OP_WhoQueryReplyMsg',49,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (534,839,844,'OP_MonitorReplyMsg',50,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (535,839,844,'OP_MonitorCharacterListMsg',51,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (536,839,844,'OP_MonitorCharacterListRequestMsg',52,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (537,839,844,'OP_ClientCmdMsg',53,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (538,839,844,'OP_DispatchESMsg',54,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (539,839,844,'OP_DispatchClientCmdMsg',55,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (540,839,844,'OP_UpdateTargetMsg',56,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (541,839,844,'OP_UpdateTargetLocMsg',57,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (542,839,844,'OP_UpdateCharacterSheetMsg',58,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (543,839,844,'OP_UpdateSpellBookMsg',59,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (544,839,844,'OP_UpdateInventoryMsg',61,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (545,839,844,'OP_UpdateRecipeBookMsg',63,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (546,839,844,'OP_RequestRecipeDetailsMsg',64,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (547,839,844,'OP_RecipeDetailsMsg',65,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (548,839,844,'OP_UpdateSkillBookMsg',66,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (549,839,844,'OP_UpdateSkillsMsg',67,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (550,839,844,'OP_UpdateOpportunityMsg',68,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (551,839,844,'OP_ChangeZoneMsg',70,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (552,839,844,'OP_ClientTeleportRequestMsg',71,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (553,839,844,'OP_TeleportWithinZoneMsg',72,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (554,839,844,'OP_TeleportWithinZoneNoReloadMsg',73,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (555,839,844,'OP_MigrateClientToZoneRequestMsg',74,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (556,839,844,'OP_MigrateClientToZoneReplyMsg',75,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (557,839,844,'OP_ReadyToZoneMsg',76,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (558,839,844,'OP_RemoveClientFromGroupMsg',77,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (559,839,844,'OP_RemoveGroupFromGroupMsg',78,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (560,839,844,'OP_MakeGroupLeaderMsg',79,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (561,839,844,'OP_GroupCreatedMsg',80,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (562,839,844,'OP_GroupDestroyedMsg',81,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (563,839,844,'OP_GroupMemberAddedMsg',82,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (564,839,844,'OP_GroupMemberRemovedMsg',83,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (565,839,844,'OP_GroupRemovedFromGroupMsg',84,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (566,839,844,'OP_GroupLeaderChangedMsg',85,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (567,839,844,'OP_GroupResendOOZDataMsg',86,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (568,839,844,'OP_GroupSettingsChangedMsg',87,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (569,839,844,'OP_OutOfZoneMemberDataMsg',88,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (570,839,844,'OP_SendLatestRequestMsg',89,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (571,839,844,'OP_ClearDataMsg',90,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (572,839,844,'OP_SetSocialMsg',91,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (573,839,844,'OP_ESStatusMsg',92,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (574,839,844,'OP_ESZoneInstanceStatusMsg',93,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (575,839,844,'OP_ZonesStatusRequestMsg',94,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (576,839,844,'OP_ZonesStatusMsg',95,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (577,839,844,'OP_ESWeatherRequestMsg',96,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (578,839,844,'OP_ESWeatherRequestEndMsg',97,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (579,839,844,'OP_DialogSelectMsg',98,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (580,839,844,'OP_DialogCloseMsg',99,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (581,839,844,'OP_RemoveSpellEffectMsg',100,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (582,839,844,'OP_RemoveConcentrationMsg',101,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (583,839,844,'OP_QuestJournalOpenMsg',102,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (584,839,844,'OP_QuestJournalInspectMsg',103,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (585,839,844,'OP_QuestJournalSetVisibleMsg',104,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (586,839,844,'OP_QuestJournalWaypointMsg',105,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (587,839,844,'OP_CreateGuildRequestMsg',108,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (588,839,844,'OP_CreateGuildReplyMsg',109,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (589,839,844,'OP_GuildsayMsg',110,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (590,839,844,'OP_GuildUpdateMsg',111,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (591,839,844,'OP_DeleteGuildMsg',112,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (592,839,844,'OP_FellowshipExpMsg',113,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (593,839,844,'OP_ConsignmentCloseStoreMsg',114,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (594,839,844,'OP_ConsignItemRequestMsg',115,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (595,839,844,'OP_ConsignItemResponseMsg',116,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (596,839,844,'OP_PurchaseConsignmentRequestMsg',117,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (597,839,844,'OP_HouseDeletedRemotelyMsg',118,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (598,839,844,'OP_UpdateHouseDataMsg',119,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (599,839,844,'OP_UpdateHouseAccessDataMsg',120,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (600,839,844,'OP_PlayerHouseBaseScreenMsg',121,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (601,839,844,'OP_PlayerHousePurchaseScreenMsg',122,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (602,839,844,'OP_PlayerHouseAccessUpdateMsg',123,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (603,839,844,'OP_PlayerHouseDisplayStatusMsg',124,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (604,839,844,'OP_PlayerHouseCloseUIMsg',125,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (605,839,844,'OP_BuyPlayerHouseMsg',126,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (606,839,844,'OP_BuyPlayerHouseTintMsg',127,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (607,839,844,'OP_CollectAllHouseItemsMsg',128,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (608,839,844,'OP_RelinquishHouseMsg',129,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (609,839,844,'OP_EnterHouseMsg',130,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (610,839,844,'OP_ExitHouseMsg',131,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (611,839,844,'OP_HouseDefaultAccessSetMsg',132,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (612,839,844,'OP_HouseAccessSetMsg',133,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (613,839,844,'OP_HouseAccessRemoveMsg',134,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (614,839,844,'OP_PayHouseUpkeepMsg',135,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (615,839,844,'OP_MoveableObjectPlacementCriteri',136,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (616,839,844,'OP_EnterMoveObjectModeMsg',137,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (617,839,844,'OP_PositionMoveableObject',138,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (618,839,844,'OP_CancelMoveObjectModeMsg',139,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (619,839,844,'OP_ShaderCustomizationMsg',140,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (620,839,844,'OP_ReplaceableSubMeshesMsg',141,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (621,839,844,'OP_HouseCustomizationScreenMsg',142,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (622,839,844,'OP_CustomizationPurchaseRequestMs',143,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (623,839,844,'OP_CustomizationSetRequestMsg',144,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (624,839,844,'OP_CustomizationReplyMsg',145,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (625,839,844,'OP_TintWidgetsMsg',146,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (626,839,844,'OP_ExamineConsignmentRequestMsg',147,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (627,839,844,'OP_ExamineConsignmentResponseMsg',148,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (628,839,844,'OP_UISettingsResponseMsg',149,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (629,839,844,'OP_UIResetMsg',150,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (630,839,844,'OP_KeymapLoadMsg',151,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (631,839,844,'OP_KeymapNoneMsg',152,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (632,839,844,'OP_KeymapDataMsg',153,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (633,839,844,'OP_KeymapSaveMsg',154,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (634,839,844,'OP_DispatchSpellCmdMsg',155,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (635,839,844,'OP_EntityVerbsRequestMsg',157,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (636,839,844,'OP_EntityVerbsReplyMsg',158,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (637,839,844,'OP_EntityVerbsVerbMsg',159,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (638,839,844,'OP_ChatRelationshipUpdateMsg',161,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (639,839,844,'OP_LootItemsRequestMsg',162,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (640,839,844,'OP_StoppedLootingMsg',163,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (641,839,844,'OP_SitMsg',164,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (642,839,844,'OP_StandMsg',165,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (643,839,844,'OP_SatMsg',166,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (644,839,844,'OP_StoodMsg',167,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (645,839,844,'OP_ClearForTakeOffMsg',168,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (646,839,844,'OP_ReadyForTakeOffMsg',169,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (647,839,844,'OP_ShowIllusionsMsg',170,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (648,839,844,'OP_HideIllusionsMsg',171,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (649,839,844,'OP_ExamineItemRequestMsg',172,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (650,839,844,'OP_ReadBookPageMsg',173,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (651,839,844,'OP_DefaultGroupOptionsRequestMsg',174,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (652,839,844,'OP_DefaultGroupOptionsMsg',175,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (653,839,844,'OP_GroupOptionsMsg',176,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (654,839,844,'OP_DisplayGroupOptionsScreenMsg',177,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (655,839,844,'OP_DisplayInnVisitScreenMsg',178,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (656,839,844,'OP_DumpSchedulerMsg',179,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (657,839,844,'OP_LSRequestPlayerDescMsg',180,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (658,839,844,'OP_LSCheckAcctLockMsg',181,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (659,839,844,'OP_WSAcctLockStatusMsg',182,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (660,839,844,'OP_RequestHelpRepathMsg',183,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (661,839,844,'OP_RequestTargetLocMsg',184,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (662,839,844,'OP_UpdateMotdMsg',185,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (663,839,844,'OP_PerformPlayerKnockbackMsg',186,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (664,839,844,'OP_PerformCameraShakeMsg',187,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (665,839,844,'OP_PopulateSkillMapsMsg',188,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (666,839,844,'OP_CancelledFeignMsg',190,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (667,839,844,'OP_SignalMsg',191,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (668,839,844,'OP_ShowCreateFromRecipeUIMsg',192,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (669,839,844,'OP_CancelCreateFromRecipeMsg',193,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (670,839,844,'OP_BeginItemCreationMsg',194,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (671,839,844,'OP_StopItemCreationMsg',195,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (672,839,844,'OP_ShowItemCreationProcessUIMsg',196,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (673,839,844,'OP_UpdateItemCreationProcessUIMsg',197,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (674,839,844,'OP_DisplayTSEventReactionMsg',198,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (675,839,844,'OP_ShowRecipeBookMsg',199,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (676,839,844,'OP_KnowledgebaseRequestMsg',200,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (677,839,844,'OP_KnowledgebaseResponseMsg',201,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (678,839,844,'OP_CSTicketHeaderRequestMsg',202,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (679,839,844,'OP_CSTicketInfoMsg',203,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (680,839,844,'OP_CSTicketCommentRequestMsg',204,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (681,839,844,'OP_CSTicketCommentResponseMsg',205,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (682,839,844,'OP_CSTicketCreateMsg',206,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (683,839,844,'OP_CSTicketAddCommentMsg',207,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (684,839,844,'OP_CSTicketDeleteMsg',208,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (685,839,844,'OP_CSTicketChangeNotificationMsg',209,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (686,839,844,'OP_WorldDataUpdateMsg',210,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (687,839,844,'OP_KnownLanguagesMsg',211,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (688,839,844,'OP_LsRequestClientCrashLogMsg',212,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (689,839,844,'OP_LsClientBaselogReplyMsg',213,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (690,839,844,'OP_LsClientCrashlogReplyMsg',214,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (691,839,844,'OP_LsClientAlertlogReplyMsg',215,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (692,839,844,'OP_LsClientVerifylogReplyMsg',216,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (693,839,844,'OP_ClientTeleportToLocationMsg',217,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (694,839,844,'OP_UpdateClientPredFlagsMsg',218,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (695,839,844,'OP_ChangeServerControlFlagMsg',219,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (696,839,844,'OP_CSToolsRequestMsg',220,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (697,839,844,'OP_CSToolsResponseMsg',221,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (698,839,844,'OP_AddSocialStructureStandingMsg',222,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (699,839,844,'OP_CreateBoatTransportsMsg',223,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (700,839,844,'OP_PositionBoatTransportMsg',224,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (701,839,844,'OP_MigrateBoatTransportMsg',225,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (702,839,844,'OP_MigrateBoatTransportReplyMsg',226,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (703,839,844,'OP_DisplayDebugNLLPointsMsg',227,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (704,839,844,'OP_ExamineInfoRequestMsg',228,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (705,839,844,'OP_QuickbarInitMsg',229,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (706,839,844,'OP_QuickbarUpdateMsg',230,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (707,839,844,'OP_MacroInitMsg',231,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (708,839,844,'OP_MacroUpdateMsg',232,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (709,839,844,'OP_QuestionnaireMsg',233,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (710,839,844,'OP_LevelChangedMsg',234,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (711,839,844,'OP_SpellGainedMsg',235,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (712,839,844,'OP_EncounterBrokenMsg',236,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (713,839,844,'OP_OnscreenMsgMsg',237,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (714,839,844,'OP_DisplayWarningMsg',238,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (715,839,844,'OP_ModifyGuildMsg',239,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (716,839,844,'OP_GuildEventMsg',240,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (717,839,844,'OP_GuildEventAddMsg',241,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (718,839,844,'OP_GuildEventActionMsg',242,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (719,839,844,'OP_GuildEventListMsg',243,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (720,839,844,'OP_RequestGuildEventDetailsMsg',244,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (721,839,844,'OP_GuildEventDetailsMsg',245,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (722,839,844,'OP_RequestGuildInfoMsg',246,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (723,839,844,'OP_GuildBankActionMsg',247,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (724,839,844,'OP_GuildBankActionResponseMsg',248,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (725,839,844,'OP_GuildBankItemDetailsRequestMsg',249,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (726,839,844,'OP_GuildBankItemDetailsResponseMs',250,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (727,839,844,'OP_GuildBankUpdateMsg',251,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (728,839,844,'OP_GuildBankEventListMsg',252,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (729,839,844,'OP_RequestGuildBankEventDetailsMs',253,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (730,839,844,'OP_RewardPackMsg',254,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (731,839,844,'OP_RenameGuildMsg',255,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (732,839,844,'OP_ZoneToFriendRequestMsg',257,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (733,839,844,'OP_ZoneToFriendReplyMsg',258,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (734,839,844,'OP_ChatCreateChannelMsg',259,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (735,839,844,'OP_ChatJoinChannelMsg',260,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (736,839,844,'OP_ChatWhoChannelMsg',261,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (737,839,844,'OP_ChatLeaveChannelMsg',262,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (738,839,844,'OP_ChatTellChannelMsg',263,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (739,839,844,'OP_ChatTellUserMsg',264,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (740,839,844,'OP_ChatToggleFriendMsg',265,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (741,839,844,'OP_ChatToggleIgnoreMsg',266,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (742,839,844,'OP_ChatSendFriendsMsg',267,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (743,839,844,'OP_ChatSendIgnoresMsg',268,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (744,839,844,'OP_QuestReward',294,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (745,839,844,'OP_ChatFiltersMsg',309,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (746,839,844,'OP_MailGetHeadersMsg',310,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (747,839,844,'OP_MailGetMessageMsg',311,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (748,839,844,'OP_MailSendMessageMsg',312,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (749,839,844,'OP_MailDeleteMessageMsg',313,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (750,839,844,'OP_MailGetHeadersReplyMsg',314,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (751,839,844,'OP_MailGetMessageReplyMsg',315,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (752,839,844,'OP_MailSendMessageReplyMsg',316,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (753,839,844,'OP_MailCommitSendMessageMsg',317,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (754,839,844,'OP_MailSendSystemMessageMsg',318,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (755,839,844,'OP_MailRemoveAttachFromMailMsg',319,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (756,839,844,'OP_WaypointRequestMsg',321,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (757,839,844,'OP_WaypointReplyMsg',322,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (758,839,844,'OP_WaypointSelectMsg',323,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (759,839,844,'OP_WaypointUpdateMsg',324,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (760,839,844,'OP_CharNameChangedMsg',325,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (761,839,844,'OP_ShowZoneTeleporterDestinations',326,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (762,839,844,'OP_SelectZoneTeleporterDestinatio',327,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (763,839,844,'OP_ReloadLocalizedTxtMsg',328,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (764,839,844,'OP_RequestGuildMembershipMsg',329,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (765,839,844,'OP_GuildMembershipResponseMsg',330,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (766,839,844,'OP_LeaveGuildNotifyMsg',331,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (767,839,844,'OP_JoinGuildNotifyMsg',332,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (768,839,844,'OP_AvatarUpdateMsg',334,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (769,839,844,'OP_BioUpdateMsg',335,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (770,839,844,'OP_InspectPlayerMsg',336,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (771,839,844,'OP_WSServerLockMsg',337,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (772,839,844,'OP_LSServerLockMsg',338,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (773,839,844,'OP_WSServerHideMsg',339,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (774,839,844,'OP_CsCategoryRequestMsg',340,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (775,839,844,'OP_CsCategoryResponseMsg',341,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (776,839,844,'OP_KnowledgeWindowSlotMappingMsg',342,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (777,839,844,'OP_LFGUpdateMsg',343,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (778,839,844,'OP_AFKUpdateMsg',344,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (779,839,844,'OP_AnonUpdateMsg',345,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (780,839,844,'OP_UpdateActivePublicZonesMsg',346,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (781,839,844,'OP_UnknownNpcMsg',347,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (782,839,844,'OP_PromoFlagsDetailsMsg',348,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (783,839,844,'OP_ConsignViewCreateMsg',349,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (784,839,844,'OP_ConsignViewGetPageMsg',350,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (785,839,844,'OP_ConsignViewReleaseMsg',351,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (786,839,844,'OP_ConsignRemoveItemsMsg',352,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (787,839,844,'OP_UpdateDebugRadiiMsg',353,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (788,839,844,'OP_SnoopMsg',354,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (789,839,844,'OP_ReportMsg',355,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (790,839,844,'OP_UpdateRaidMsg',356,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (791,839,844,'OP_ConsignViewSortMsg',357,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (792,839,844,'OP_TitleUpdateMsg',358,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (793,839,844,'OP_ClientFellMsg',359,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (794,839,844,'OP_ClientInDeathRegionMsg',360,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (795,839,844,'OP_CampClientMsg',361,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (796,839,844,'OP_CSToolAccessResponseMsg',362,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (797,839,844,'OP_TrackingUpdateMsg',363,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (798,839,844,'OP_BeginTrackingMsg',364,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (799,839,844,'OP_StopTrackingMsg',365,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (800,839,844,'OP_GetAvatarAccessRequestForCSToo',366,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (801,839,844,'OP_AdvancementRequestMsg',367,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (802,839,844,'OP_UpdateAvgFrameTimeMsg',368,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (803,839,844,'OP_MapFogDataInitMsg',369,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (804,839,844,'OP_MapFogDataUpdateMsg',370,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (805,839,844,'OP_CloseGroupInviteWindowMsg',371,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (806,839,844,'OP_UpdateGroupMemberDataMsg',372,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (807,839,844,'OP_WorldPingMsg',373,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (808,839,844,'OP_MoveLogUpdateMsg',374,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (809,839,844,'OP_OfferQuestMsg',375,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (810,839,844,'OP_WorldShutdownUpdateMsg',376,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (811,839,844,'OP_DisplayMailScreenMsg',377,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (812,839,844,'OP_ClientIdleBeginMsg',378,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (813,839,844,'OP_ClientIdleEndMsg',379,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (814,839,844,'OP_PurchaseConsignmentLoreCheckRe',380,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (815,839,844,'OP_NotifyApprenticeStoppedMentori',381,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (816,839,844,'OP_CorruptedClientMsg',382,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (817,839,844,'OP_WorldDataChangeMsg',383,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (818,839,844,'OP_MailEventNotificationMsg',384,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (819,839,844,'OP_RestartZoneMsg',385,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (820,839,844,'OP_FlightPathsMsg',386,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (821,839,844,'OP_CharacterLinkdeadMsg',387,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (822,839,844,'OP_CharTransferStartRequestMsg',388,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (823,839,844,'OP_CharTransferStartReplyMsg',389,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (824,839,844,'OP_CharTransferRequestMsg',390,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (825,839,844,'OP_CharTransferReplyMsg',391,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (826,839,844,'OP_CharTransferRollbackRequestMsg',392,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (827,839,844,'OP_CharTransferCommitRequestMsg',393,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (828,839,844,'OP_CharTransferRollbackReplyMsg',394,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (829,839,844,'OP_CharTransferCommitReplyMsg',395,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (830,839,844,'OP_GetCharacterSerializedRequestM',396,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (831,839,844,'OP_GetCharacterSerializedReplyMsg',397,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (832,839,844,'OP_CreateCharFromCBBRequestMsg',398,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (833,839,844,'OP_CreateCharFromCBBReplyMsg',399,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (834,839,844,'OP_HousingDataChangedMsg',400,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (835,839,844,'OP_HousingRestoreMsg',401,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (836,839,844,'OP_AuctionItem',402,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (837,839,844,'OP_AuctionItemReply',403,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (838,839,844,'OP_AuctionCoin',404,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (839,839,844,'OP_AuctionCoinReply',405,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (840,839,844,'OP_AuctionCharacter',406,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (841,839,844,'OP_AuctionCharacterReply',407,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (842,839,844,'OP_AuctionCommitMsg',408,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (843,839,844,'OP_AuctionAbortMsg',409,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (844,839,844,'OP_CharTransferValidateRequestMsg',410,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (845,839,844,'OP_CharTransferValidateReplyMsg',411,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (846,839,844,'OP_RaceRestrictionMsg',412,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (847,839,844,'OP_SetInstanceDisplayNameMsg',413,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (848,839,844,'OP_GetAuctionAssetIDMsg',414,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (849,839,844,'OP_GetAuctionAssetIDReplyMsg',415,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (850,839,844,'OP_ResendWorldChannelsMsg',416,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (851,839,844,'OP_DisplayExchangeScreenMsg',417,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (852,839,844,'OP_ArenaGameTypesMsg',418,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (853,839,844,'OP_AuditAuctionEventMsg',420,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (854,839,844,'OP_InviteRequestMsg',422,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (855,839,844,'OP_InviteResponseMsg',423,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (856,839,844,'OP_InviteTargetResponseMsg',424,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (857,839,844,'OP_InspectPlayerRequestMsg',425,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (858,839,844,'OP_DispatchMsg',426,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (859,839,844,'OP_DisplayEventMsg',427,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (860,839,844,'OP_PrePossessionMsg',428,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (861,839,844,'OP_PostPossessionMsg',429,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (862,839,844,'OP_AdventureList',454,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (863,839,844,'OP_CancelSpellCast',455,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (864,839,844,'OP_AttackAllowed',467,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (865,839,844,'OP_AttackNotAllowed',468,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (866,839,844,'OP_DressingRoom',474,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (867,839,844,'OP_SkillInfoRequest',478,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (868,839,844,'OP_SkillInfoResponse',479,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (869,839,844,'OP_EqHearChatCmd',480,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (870,839,844,'OP_EqDisplayTextCmd',481,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (871,839,844,'OP_EqCreateGhostCmd',482,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (872,839,844,'OP_EqCreateWidgetCmd',483,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (873,839,844,'OP_EqCreateSignWidgetCmd',484,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (874,839,844,'OP_EqDestroyGhostCmd',485,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (875,839,844,'OP_EqUpdateGhostCmd',486,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (876,839,844,'OP_EqSetControlGhostCmd',487,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (877,839,844,'OP_EqSetPOVGhostCmd',488,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (878,839,844,'OP_EqHearCombatCmd',489,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (879,839,844,'OP_EqHearSpellCastCmd',490,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (880,839,844,'OP_EqHearSpellInterruptCmd',493,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (881,839,844,'OP_EqHearSpellFizzleCmd',494,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (882,839,844,'OP_EqHearConsiderCmd',495,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (883,839,844,'OP_EqUpdateSubClassesCmd',496,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (884,839,844,'OP_EqCreateListBoxCmd',497,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (885,839,844,'OP_EqSetDebugPathPointsCmd',498,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (886,839,844,'OP_EqCannedEmoteCmd',500,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (887,839,844,'OP_EqStateCmd',501,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (888,839,844,'OP_EqPlaySoundCmd',502,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (889,839,844,'OP_EqPlaySound3DCmd',503,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (890,839,844,'OP_EqPlayVoiceCmd',504,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (891,839,844,'OP_EqHearDrowningCmd',505,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (892,839,844,'OP_EqHearDeathCmd',506,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (893,839,844,'OP_EqGroupMemberRemovedCmd',507,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (894,839,844,'OP_EqHearChainEffectCmd',508,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (895,839,844,'OP_EqReceiveOfferCmd',509,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (896,839,844,'OP_EqInspectPCResultsCmd',510,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (897,839,844,'OP_EqDrawablePathGraphCmd',511,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (898,839,844,'OP_EqDialogOpenCmd',512,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (899,839,844,'OP_EqDialogCloseCmd',513,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (900,839,844,'OP_EqFactionUpdateCmd',514,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (901,839,844,'OP_EqCollectionUpdateCmd',515,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (902,839,844,'OP_EqCollectionFilterCmd',516,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (903,839,844,'OP_EqCollectionItemCmd',517,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (904,839,844,'OP_EqQuestJournalUpdateCmd',518,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (905,839,844,'OP_EqQuestJournalReplyCmd',520,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (906,839,844,'OP_EqQuestGroupCmd',521,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (907,839,844,'OP_EqUpdateMerchantCmd',522,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (908,839,844,'OP_EqUpdateStoreCmd',523,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (909,839,844,'OP_EqUpdatePlayerTradeCmd',524,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (910,839,844,'OP_EqHelpPathCmd',525,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (911,839,844,'OP_EqHelpPathClearCmd',526,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (912,839,844,'OP_EqUpdateBankCmd',527,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (913,839,844,'OP_EqExamineInfoCmd',528,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (914,839,844,'OP_EqCloseWindowCmd',529,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (915,839,844,'OP_EqUpdateLootCmd',530,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (916,839,844,'OP_EqJunctionListCmd',531,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (917,839,844,'OP_EqShowDeathWindowCmd',532,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (918,839,844,'OP_EqDisplaySpellFailCmd',533,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (919,839,844,'OP_EqSpellCastStartCmd',534,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (920,839,844,'OP_EqSpellCastEndCmd',535,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (921,839,844,'OP_EqResurrectedCmd',536,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (922,839,844,'OP_EqChoiceWinCmd',537,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (923,839,844,'OP_EqSetDefaultVerbCmd',538,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (924,839,844,'OP_EqInstructionWindowCmd',540,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (925,839,844,'OP_EqInstructionWindowCloseCmd',541,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (926,839,844,'OP_EqInstructionWindowGoalCmd',542,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (927,839,844,'OP_EqInstructionWindowTaskCmd',543,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (928,839,844,'OP_EqEnableGameEventCmd',544,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (929,839,844,'OP_EqShowWindowCmd',545,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (930,839,844,'OP_EqEnableWindowCmd',546,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (931,839,844,'OP_EqFlashWindowCmd',547,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (932,839,844,'OP_EqHearPlayFlavorCmd',548,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (933,839,844,'OP_EqUpdateSignWidgetCmd',550,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (934,839,844,'OP_EqDebugPVDCmd',551,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (935,839,844,'OP_EqShowBookCmd',552,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (936,839,844,'OP_EqQuestionnaireCmd',553,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (937,839,844,'OP_EqGetProbsCmd',554,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (938,839,844,'OP_EqHearHealCmd',555,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (939,839,844,'OP_EqChatChannelUpdateCmd',556,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (940,839,844,'OP_EqWhoChannelQueryReplyCmd',557,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (941,839,844,'OP_EqAvailWorldChannelsCmd',558,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (942,839,844,'OP_EqUpdateTargetCmd',559,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (943,839,844,'OP_EqConsignmentItemsCmd',561,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (944,839,844,'OP_EqStartBrokerCmd',563,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (945,839,844,'OP_EqMapExplorationCmd',564,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (946,839,844,'OP_EqStoreLogCmd',565,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (947,839,844,'OP_EqSpellMoveToRangeAndRetryCmd',566,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (948,839,844,'OP_EqUpdatePlayerMailCmd',567,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (949,839,844,'OP_EqArenaResultsCmd',568,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (950,839,844,'OP_EqGuildBankEventActionCmd',569,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (951,839,844,'OP_EqGuildBankExamineInfoCmd',570,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (952,839,844,'OP_EqHearSpellNoLandCmd',571,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (953,839,844,'OP_Lottery',572,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (954,839,844,'OP_GuildRecruitingMemberInfo',573,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (955,839,844,'OP_GuildRecruiting',574,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (956,839,844,'OP_GuildRecruitingDetails',575,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (957,839,844,'OP_GuildRecruitingImage',576,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (958,839,844,'OP_PointOfInterest',597,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (959,839,844,'OP_TraitsList',599,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (960,839,844,'OP_RecipeList',608,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (961,839,844,'OP_CharacterAchievements',655,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (962,839,844,'OP_AddClientToGroupMsg',999,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (963,839,844,'OP_AddGroupToGroupMsg',999,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (964,839,844,'OP_GuildKickMsg',999,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (965,839,844,'OP_PurchaseConsignmentResponseMsg',999,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (966,839,844,'OP_ProcessScriptMsg',999,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (967,839,844,'OP_ProcessWorkspaceMsg',999,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (968,839,844,'OP_QuickbarAddMsg',999,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (969,839,844,'OP_SkillSlotMapping',999,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (970,839,844,'OP_MapRequest',999,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (971,839,844,'OP_Unknown',10000,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (972,839,844,'OP_WSWeatherUpdateMsg',10012,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (973,860,864,'OP_LoginRequestMsg',0,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (974,860,864,'OP_LoginByNumRequestMsg',1,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (975,860,864,'OP_WSLoginRequestMsg',2,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (976,860,864,'OP_ESLoginRequestMsg',3,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (977,860,864,'OP_LoginReplyMsg',4,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (978,860,864,'OP_WSStatusReplyMsg',5,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (979,860,864,'OP_WorldStatusChangeMsg',6,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (980,860,864,'OP_AllWSDescRequestMsg',7,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (981,860,864,'OP_WorldListMsg',8,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (982,860,864,'OP_AllCharactersDescRequestMsg',9,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (983,860,864,'OP_AllCharactersDescReplyMsg',10,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (984,860,864,'OP_CreateCharacterRequestMsg',11,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (985,860,864,'OP_CreateCharacterReplyMsg',12,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (986,860,864,'OP_WSCreateCharacterRequestMsg',13,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (987,860,864,'OP_WSCreateCharacterReplyMsg',14,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (988,860,864,'OP_ReskinCharacterRequestMsg',15,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (989,860,864,'OP_DeleteCharacterRequestMsg',16,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (990,860,864,'OP_DeleteCharacterReplyMsg',17,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (991,860,864,'OP_PlayCharacterRequestMsg',18,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (992,860,864,'OP_PlayCharacterReplyMsg',19,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (993,860,864,'OP_ExpectClientAsCharacterReplyMs',22,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (994,860,864,'OP_ServerPlayCharacterRequestMsg',23,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (995,860,864,'OP_ServerPlayCharacterReplyMsg',24,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (996,860,864,'OP_ESInitMsg',25,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (997,860,864,'OP_ESReadyForClientsMsg',26,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (998,860,864,'OP_CreateZoneInstanceMsg',27,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (999,860,864,'OP_ZoneInstanceCreateReplyMsg',28,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1000,860,864,'OP_ZoneInstanceDestroyedMsg',29,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1001,860,864,'OP_ExpectClientAsCharacterRequest',30,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1002,860,864,'OP_ZoneInfoMsg',31,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1003,860,864,'OP_DoneLoadingZoneResourcesMsg',32,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1004,860,864,'OP_DoneSendingInitialEntitiesMsg',33,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1005,860,864,'OP_DoneLoadingEntityResourcesMsg',34,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1006,860,864,'OP_PredictionUpdateMsg',35,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1007,860,864,'OP_UpdatePositionMsg',37,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1008,860,864,'OP_SetRemoteCmdsMsg',39,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1009,860,864,'OP_RemoteCmdMsg',40,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1010,860,864,'OP_GameWorldTimeMsg',41,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1011,860,864,'OP_MOTDMsg',42,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1012,860,864,'OP_ZoneMOTDMsg',43,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1013,860,864,'OP_AvatarCreatedMsg',44,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1014,860,864,'OP_AvatarDestroyedMsg',45,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1015,860,864,'OP_RequestCampMsg',47,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1016,860,864,'OP_CampStartedMsg',48,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1017,860,864,'OP_CampAbortedMsg',49,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1018,860,864,'OP_WhoQueryRequestMsg',50,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1019,860,864,'OP_WhoQueryReplyMsg',51,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1020,860,864,'OP_MonitorReplyMsg',52,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1021,860,864,'OP_MonitorCharacterListMsg',53,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1022,860,864,'OP_MonitorCharacterListRequestMsg',54,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1023,860,864,'OP_ClientCmdMsg',55,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1024,860,864,'OP_DispatchESMsg',56,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1025,860,864,'OP_DispatchClientCmdMsg',57,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1026,860,864,'OP_UpdateTargetMsg',58,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1027,860,864,'OP_UpdateTargetLocMsg',59,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1028,860,864,'OP_UpdateCharacterSheetMsg',60,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1029,860,864,'OP_UpdateSpellBookMsg',61,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1030,860,864,'OP_UpdateInventoryMsg',63,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1031,860,864,'OP_UpdateRecipeBookMsg',65,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1032,860,864,'OP_RequestRecipeDetailsMsg',66,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1033,860,864,'OP_RecipeDetailsMsg',67,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1034,860,864,'OP_UpdateSkillBookMsg',68,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1035,860,864,'OP_UpdateSkillsMsg',69,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1036,860,864,'OP_UpdateOpportunityMsg',70,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1037,860,864,'OP_ChangeZoneMsg',72,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1038,860,864,'OP_ClientTeleportRequestMsg',73,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1039,860,864,'OP_TeleportWithinZoneMsg',74,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1040,860,864,'OP_TeleportWithinZoneNoReloadMsg',75,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1041,860,864,'OP_MigrateClientToZoneRequestMsg',76,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1042,860,864,'OP_MigrateClientToZoneReplyMsg',77,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1043,860,864,'OP_ReadyToZoneMsg',78,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1044,860,864,'OP_RemoveClientFromGroupMsg',79,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1045,860,864,'OP_RemoveGroupFromGroupMsg',80,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1046,860,864,'OP_MakeGroupLeaderMsg',81,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1047,860,864,'OP_GroupCreatedMsg',82,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1048,860,864,'OP_GroupDestroyedMsg',83,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1049,860,864,'OP_GroupMemberAddedMsg',84,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1050,860,864,'OP_GroupMemberRemovedMsg',85,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1051,860,864,'OP_GroupRemovedFromGroupMsg',86,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1052,860,864,'OP_GroupLeaderChangedMsg',87,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1053,860,864,'OP_GroupResendOOZDataMsg',88,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1054,860,864,'OP_GroupSettingsChangedMsg',89,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1055,860,864,'OP_OutOfZoneMemberDataMsg',90,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1056,860,864,'OP_SendLatestRequestMsg',91,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1057,860,864,'OP_ClearDataMsg',92,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1058,860,864,'OP_SetSocialMsg',93,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1059,860,864,'OP_ESStatusMsg',94,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1060,860,864,'OP_ESZoneInstanceStatusMsg',95,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1061,860,864,'OP_ZonesStatusRequestMsg',96,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1062,860,864,'OP_ZonesStatusMsg',97,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1063,860,864,'OP_ESWeatherRequestMsg',98,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1064,860,864,'OP_ESWeatherRequestEndMsg',99,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1065,860,864,'OP_DialogSelectMsg',100,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1066,860,864,'OP_DialogCloseMsg',102,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1067,860,864,'OP_RemoveSpellEffectMsg',103,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1068,860,864,'OP_RemoveConcentrationMsg',104,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1069,860,864,'OP_QuestJournalOpenMsg',106,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1070,860,864,'OP_QuestJournalInspectMsg',107,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1071,860,864,'OP_QuestJournalSetVisibleMsg',108,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1072,860,864,'OP_QuestJournalWaypointMsg',109,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1073,860,864,'OP_CreateGuildRequestMsg',110,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1074,860,864,'OP_CreateGuildReplyMsg',111,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1075,860,864,'OP_GuildsayMsg',112,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1076,860,864,'OP_GuildUpdateMsg',113,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1077,860,864,'OP_DeleteGuildMsg',114,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1078,860,864,'OP_FellowshipExpMsg',115,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1079,860,864,'OP_ConsignmentCloseStoreMsg',116,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1080,860,864,'OP_ConsignItemRequestMsg',117,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1081,860,864,'OP_ConsignItemResponseMsg',118,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1082,860,864,'OP_PurchaseConsignmentRequestMsg',119,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1083,860,864,'OP_HouseDeletedRemotelyMsg',120,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1084,860,864,'OP_UpdateHouseDataMsg',121,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1085,860,864,'OP_UpdateHouseAccessDataMsg',122,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1086,860,864,'OP_PlayerHouseBaseScreenMsg',123,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1087,860,864,'OP_PlayerHousePurchaseScreenMsg',124,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1088,860,864,'OP_PlayerHouseAccessUpdateMsg',125,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1089,860,864,'OP_PlayerHouseDisplayStatusMsg',126,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1090,860,864,'OP_PlayerHouseCloseUIMsg',127,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1091,860,864,'OP_BuyPlayerHouseMsg',128,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1092,860,864,'OP_BuyPlayerHouseTintMsg',129,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1093,860,864,'OP_CollectAllHouseItemsMsg',130,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1094,860,864,'OP_RelinquishHouseMsg',131,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1095,860,864,'OP_EnterHouseMsg',132,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1096,860,864,'OP_ExitHouseMsg',133,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1097,860,864,'OP_HouseDefaultAccessSetMsg',134,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1098,860,864,'OP_HouseAccessSetMsg',135,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1099,860,864,'OP_HouseAccessRemoveMsg',136,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1100,860,864,'OP_PayHouseUpkeepMsg',137,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1101,860,864,'OP_MoveableObjectPlacementCriteri',138,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1102,860,864,'OP_EnterMoveObjectModeMsg',139,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1103,860,864,'OP_PositionMoveableObject',140,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1104,860,864,'OP_CancelMoveObjectModeMsg',141,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1105,860,864,'OP_ShaderCustomizationMsg',142,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1106,860,864,'OP_ReplaceableSubMeshesMsg',143,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1107,860,864,'OP_HouseCustomizationScreenMsg',144,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1108,860,864,'OP_CustomizationPurchaseRequestMs',145,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1109,860,864,'OP_CustomizationSetRequestMsg',146,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1110,860,864,'OP_CustomizationReplyMsg',147,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1111,860,864,'OP_TintWidgetsMsg',148,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1112,860,864,'OP_ExamineConsignmentRequestMsg',149,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1113,860,864,'OP_ExamineConsignmentResponseMsg',150,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1114,860,864,'OP_UISettingsResponseMsg',151,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1115,860,864,'OP_UIResetMsg',152,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1116,860,864,'OP_KeymapLoadMsg',153,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1117,860,864,'OP_KeymapNoneMsg',154,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1118,860,864,'OP_KeymapDataMsg',155,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1119,860,864,'OP_KeymapSaveMsg',156,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1120,860,864,'OP_DispatchSpellCmdMsg',157,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1121,860,864,'OP_EntityVerbsRequestMsg',159,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1122,860,864,'OP_EntityVerbsReplyMsg',160,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1123,860,864,'OP_EntityVerbsVerbMsg',161,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1124,860,864,'OP_ChatRelationshipUpdateMsg',163,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1125,860,864,'OP_LootItemsRequestMsg',164,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1126,860,864,'OP_StoppedLootingMsg',165,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1127,860,864,'OP_SitMsg',166,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1128,860,864,'OP_StandMsg',167,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1129,860,864,'OP_SatMsg',168,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1130,860,864,'OP_StoodMsg',169,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1131,860,864,'OP_ClearForTakeOffMsg',170,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1132,860,864,'OP_ReadyForTakeOffMsg',171,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1133,860,864,'OP_ShowIllusionsMsg',172,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1134,860,864,'OP_HideIllusionsMsg',173,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1135,860,864,'OP_ExamineItemRequestMsg',174,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1136,860,864,'OP_ReadBookPageMsg',175,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1137,860,864,'OP_DefaultGroupOptionsRequestMsg',176,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1138,860,864,'OP_DefaultGroupOptionsMsg',177,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1139,860,864,'OP_GroupOptionsMsg',178,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1140,860,864,'OP_DisplayGroupOptionsScreenMsg',179,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1141,860,864,'OP_DisplayInnVisitScreenMsg',180,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1142,860,864,'OP_DumpSchedulerMsg',181,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1143,860,864,'OP_LSRequestPlayerDescMsg',182,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1144,860,864,'OP_LSCheckAcctLockMsg',183,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1145,860,864,'OP_WSAcctLockStatusMsg',184,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1146,860,864,'OP_RequestHelpRepathMsg',185,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1147,860,864,'OP_RequestTargetLocMsg',186,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1148,860,864,'OP_UpdateMotdMsg',187,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1149,860,864,'OP_PerformPlayerKnockbackMsg',188,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1150,860,864,'OP_PerformCameraShakeMsg',189,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1151,860,864,'OP_PopulateSkillMapsMsg',190,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1152,860,864,'OP_CancelledFeignMsg',192,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1153,860,864,'OP_SignalMsg',193,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1154,860,864,'OP_ShowCreateFromRecipeUIMsg',194,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1155,860,864,'OP_CancelCreateFromRecipeMsg',195,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1156,860,864,'OP_BeginItemCreationMsg',196,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1157,860,864,'OP_StopItemCreationMsg',197,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1158,860,864,'OP_ShowItemCreationProcessUIMsg',198,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1159,860,864,'OP_UpdateItemCreationProcessUIMsg',199,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1160,860,864,'OP_DisplayTSEventReactionMsg',200,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1161,860,864,'OP_ShowRecipeBookMsg',201,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1162,860,864,'OP_KnowledgebaseRequestMsg',202,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1163,860,864,'OP_KnowledgebaseResponseMsg',203,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1164,860,864,'OP_CSTicketHeaderRequestMsg',204,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1165,860,864,'OP_CSTicketInfoMsg',205,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1166,860,864,'OP_CSTicketCommentRequestMsg',206,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1167,860,864,'OP_CSTicketCommentResponseMsg',207,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1168,860,864,'OP_CSTicketCreateMsg',208,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1169,860,864,'OP_CSTicketAddCommentMsg',209,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1170,860,864,'OP_CSTicketDeleteMsg',210,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1171,860,864,'OP_CSTicketChangeNotificationMsg',211,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1172,860,864,'OP_WorldDataUpdateMsg',212,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1173,860,864,'OP_KnownLanguagesMsg',213,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1174,860,864,'OP_LsRequestClientCrashLogMsg',214,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1175,860,864,'OP_LsClientBaselogReplyMsg',215,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1176,860,864,'OP_LsClientCrashlogReplyMsg',216,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1177,860,864,'OP_LsClientAlertlogReplyMsg',217,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1178,860,864,'OP_LsClientVerifylogReplyMsg',218,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1179,860,864,'OP_ClientTeleportToLocationMsg',219,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1180,860,864,'OP_UpdateClientPredFlagsMsg',220,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1181,860,864,'OP_ChangeServerControlFlagMsg',221,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1182,860,864,'OP_CSToolsRequestMsg',222,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1183,860,864,'OP_CSToolsResponseMsg',223,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1184,860,864,'OP_AddSocialStructureStandingMsg',224,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1185,860,864,'OP_CreateBoatTransportsMsg',225,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1186,860,864,'OP_PositionBoatTransportMsg',226,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1187,860,864,'OP_MigrateBoatTransportMsg',227,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1188,860,864,'OP_MigrateBoatTransportReplyMsg',228,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1189,860,864,'OP_DisplayDebugNLLPointsMsg',229,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1190,860,864,'OP_ExamineInfoRequestMsg',230,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1191,860,864,'OP_QuickbarInitMsg',231,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1192,860,864,'OP_QuickbarUpdateMsg',232,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1193,860,864,'OP_MacroInitMsg',233,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1194,860,864,'OP_MacroUpdateMsg',234,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1195,860,864,'OP_QuestionnaireMsg',235,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1196,860,864,'OP_LevelChangedMsg',236,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1197,860,864,'OP_SpellGainedMsg',237,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1198,860,864,'OP_EncounterBrokenMsg',238,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1199,860,864,'OP_OnscreenMsgMsg',239,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1200,860,864,'OP_DisplayWarningMsg',240,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1201,860,864,'OP_ModifyGuildMsg',241,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1202,860,864,'OP_GuildEventMsg',242,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1203,860,864,'OP_GuildEventAddMsg',243,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1204,860,864,'OP_GuildEventActionMsg',244,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1205,860,864,'OP_GuildEventListMsg',245,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1206,860,864,'OP_RequestGuildEventDetailsMsg',246,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1207,860,864,'OP_GuildEventDetailsMsg',247,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1208,860,864,'OP_RequestGuildInfoMsg',248,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1209,860,864,'OP_GuildBankActionMsg',249,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1210,860,864,'OP_GuildBankActionResponseMsg',250,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1211,860,864,'OP_GuildBankItemDetailsRequestMsg',251,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1212,860,864,'OP_GuildBankItemDetailsResponseMs',252,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1213,860,864,'OP_GuildBankUpdateMsg',253,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1214,860,864,'OP_GuildBankEventListMsg',254,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1215,860,864,'OP_RequestGuildBankEventDetailsMs',255,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1216,860,864,'OP_RewardPackMsg',256,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1217,860,864,'OP_RenameGuildMsg',257,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1218,860,864,'OP_ZoneToFriendRequestMsg',259,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1219,860,864,'OP_ZoneToFriendReplyMsg',260,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1220,860,864,'OP_ChatCreateChannelMsg',261,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1221,860,864,'OP_ChatJoinChannelMsg',262,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1222,860,864,'OP_ChatWhoChannelMsg',263,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1223,860,864,'OP_ChatLeaveChannelMsg',264,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1224,860,864,'OP_ChatTellChannelMsg',265,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1225,860,864,'OP_ChatTellUserMsg',266,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1226,860,864,'OP_ChatToggleFriendMsg',267,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1227,860,864,'OP_ChatToggleIgnoreMsg',268,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1228,860,864,'OP_ChatSendFriendsMsg',269,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1229,860,864,'OP_ChatSendIgnoresMsg',270,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1230,860,864,'OP_QuestReward',296,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1231,860,864,'OP_ChatFiltersMsg',311,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1232,860,864,'OP_MailGetHeadersMsg',312,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1233,860,864,'OP_MailGetMessageMsg',313,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1234,860,864,'OP_MailSendMessageMsg',314,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1235,860,864,'OP_MailDeleteMessageMsg',315,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1236,860,864,'OP_MailGetHeadersReplyMsg',316,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1237,860,864,'OP_MailGetMessageReplyMsg',317,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1238,860,864,'OP_MailSendMessageReplyMsg',318,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1239,860,864,'OP_MailCommitSendMessageMsg',319,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1240,860,864,'OP_MailSendSystemMessageMsg',320,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1241,860,864,'OP_MailRemoveAttachFromMailMsg',321,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1242,860,864,'OP_WaypointRequestMsg',323,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1243,860,864,'OP_WaypointReplyMsg',324,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1244,860,864,'OP_WaypointSelectMsg',325,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1245,860,864,'OP_WaypointUpdateMsg',326,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1246,860,864,'OP_CharNameChangedMsg',327,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1247,860,864,'OP_ShowZoneTeleporterDestinations',328,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1248,860,864,'OP_SelectZoneTeleporterDestinatio',329,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1249,860,864,'OP_ReloadLocalizedTxtMsg',330,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1250,860,864,'OP_RequestGuildMembershipMsg',331,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1251,860,864,'OP_GuildMembershipResponseMsg',332,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1252,860,864,'OP_LeaveGuildNotifyMsg',333,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1253,860,864,'OP_JoinGuildNotifyMsg',334,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1254,860,864,'OP_AvatarUpdateMsg',336,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1255,860,864,'OP_BioUpdateMsg',337,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1256,860,864,'OP_InspectPlayerMsg',338,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1257,860,864,'OP_WSServerLockMsg',339,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1258,860,864,'OP_LSServerLockMsg',340,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1259,860,864,'OP_WSServerHideMsg',341,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1260,860,864,'OP_CsCategoryRequestMsg',342,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1261,860,864,'OP_CsCategoryResponseMsg',343,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1262,860,864,'OP_KnowledgeWindowSlotMappingMsg',344,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1263,860,864,'OP_LFGUpdateMsg',345,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1264,860,864,'OP_AFKUpdateMsg',346,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1265,860,864,'OP_AnonUpdateMsg',347,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1266,860,864,'OP_UpdateActivePublicZonesMsg',348,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1267,860,864,'OP_UnknownNpcMsg',349,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1268,860,864,'OP_PromoFlagsDetailsMsg',350,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1269,860,864,'OP_ConsignViewCreateMsg',351,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1270,860,864,'OP_ConsignViewGetPageMsg',352,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1271,860,864,'OP_ConsignViewReleaseMsg',353,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1272,860,864,'OP_ConsignRemoveItemsMsg',354,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1273,860,864,'OP_UpdateDebugRadiiMsg',355,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1274,860,864,'OP_SnoopMsg',356,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1275,860,864,'OP_ReportMsg',357,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1276,860,864,'OP_UpdateRaidMsg',358,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1277,860,864,'OP_ConsignViewSortMsg',359,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1278,860,864,'OP_TitleUpdateMsg',360,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1279,860,864,'OP_ClientFellMsg',361,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1280,860,864,'OP_ClientInDeathRegionMsg',362,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1281,860,864,'OP_CampClientMsg',363,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1282,860,864,'OP_CSToolAccessResponseMsg',364,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1283,860,864,'OP_TrackingUpdateMsg',365,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1284,860,864,'OP_BeginTrackingMsg',366,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1285,860,864,'OP_StopTrackingMsg',367,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1286,860,864,'OP_GetAvatarAccessRequestForCSToo',368,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1287,860,864,'OP_AdvancementRequestMsg',369,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1288,860,864,'OP_UpdateAvgFrameTimeMsg',370,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1289,860,864,'OP_MapFogDataInitMsg',371,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1290,860,864,'OP_MapFogDataUpdateMsg',372,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1291,860,864,'OP_CloseGroupInviteWindowMsg',373,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1292,860,864,'OP_UpdateGroupMemberDataMsg',374,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1293,860,864,'OP_WorldPingMsg',375,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1294,860,864,'OP_MoveLogUpdateMsg',376,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1295,860,864,'OP_OfferQuestMsg',377,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1296,860,864,'OP_WorldShutdownUpdateMsg',378,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1297,860,864,'OP_DisplayMailScreenMsg',379,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1298,860,864,'OP_ClientIdleBeginMsg',380,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1299,860,864,'OP_ClientIdleEndMsg',381,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1300,860,864,'OP_PurchaseConsignmentLoreCheckRe',382,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1301,860,864,'OP_NotifyApprenticeStoppedMentori',383,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1302,860,864,'OP_CorruptedClientMsg',384,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1303,860,864,'OP_WorldDataChangeMsg',385,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1304,860,864,'OP_MailEventNotificationMsg',386,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1305,860,864,'OP_RestartZoneMsg',387,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1306,860,864,'OP_FlightPathsMsg',388,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1307,860,864,'OP_CharacterLinkdeadMsg',389,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1308,860,864,'OP_CharTransferStartRequestMsg',390,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1309,860,864,'OP_CharTransferStartReplyMsg',391,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1310,860,864,'OP_CharTransferRequestMsg',392,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1311,860,864,'OP_CharTransferReplyMsg',393,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1312,860,864,'OP_CharTransferRollbackRequestMsg',394,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1313,860,864,'OP_CharTransferCommitRequestMsg',395,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1314,860,864,'OP_CharTransferRollbackReplyMsg',396,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1315,860,864,'OP_CharTransferCommitReplyMsg',397,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1316,860,864,'OP_GetCharacterSerializedRequestM',398,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1317,860,864,'OP_GetCharacterSerializedReplyMsg',399,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1318,860,864,'OP_CreateCharFromCBBRequestMsg',400,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1319,860,864,'OP_CreateCharFromCBBReplyMsg',401,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1320,860,864,'OP_HousingDataChangedMsg',402,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1321,860,864,'OP_HousingRestoreMsg',403,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1322,860,864,'OP_AuctionItem',404,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1323,860,864,'OP_AuctionItemReply',405,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1324,860,864,'OP_AuctionCoin',406,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1325,860,864,'OP_AuctionCoinReply',407,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1326,860,864,'OP_AuctionCharacter',408,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1327,860,864,'OP_AuctionCharacterReply',409,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1328,860,864,'OP_AuctionCommitMsg',410,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1329,860,864,'OP_AuctionAbortMsg',411,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1330,860,864,'OP_CharTransferValidateRequestMsg',412,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1331,860,864,'OP_CharTransferValidateReplyMsg',413,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1332,860,864,'OP_RaceRestrictionMsg',414,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1333,860,864,'OP_SetInstanceDisplayNameMsg',415,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1334,860,864,'OP_GetAuctionAssetIDMsg',416,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1335,860,864,'OP_GetAuctionAssetIDReplyMsg',417,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1336,860,864,'OP_ResendWorldChannelsMsg',418,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1337,860,864,'OP_DisplayExchangeScreenMsg',419,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1338,860,864,'OP_ArenaGameTypesMsg',420,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1339,860,864,'OP_AuditAuctionEventMsg',422,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1340,860,864,'OP_InviteRequestMsg',424,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1341,860,864,'OP_InviteResponseMsg',425,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1342,860,864,'OP_InviteTargetResponseMsg',426,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1343,860,864,'OP_InspectPlayerRequestMsg',427,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1344,860,864,'OP_DispatchMsg',428,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1345,860,864,'OP_DisplayEventMsg',429,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1346,860,864,'OP_PrePossessionMsg',430,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1347,860,864,'OP_PostPossessionMsg',431,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1348,860,864,'OP_AdventureList',456,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1349,860,864,'OP_CancelSpellCast',457,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1350,860,864,'OP_AttackAllowed',469,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1351,860,864,'OP_AttackNotAllowed',470,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1352,860,864,'OP_DressingRoom',476,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1353,860,864,'OP_SkillInfoRequest',480,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1354,860,864,'OP_SkillInfoResponse',481,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1355,860,864,'OP_EqUnknown',482,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1356,860,864,'OP_EqHearChatCmd',483,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1357,860,864,'OP_EqDisplayTextCmd',484,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1358,860,864,'OP_EqCreateGhostCmd',485,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1359,860,864,'OP_EqCreateWidgetCmd',486,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1360,860,864,'OP_EqCreateSignWidgetCmd',487,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1361,860,864,'OP_EqDestroyGhostCmd',488,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1362,860,864,'OP_EqUpdateGhostCmd',489,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1363,860,864,'OP_EqSetControlGhostCmd',490,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1364,860,864,'OP_EqSetPOVGhostCmd',491,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1365,860,864,'OP_EqHearCombatCmd',492,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1366,860,864,'OP_EqHearSpellCastCmd',493,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1367,860,864,'OP_EqHearSpellInterruptCmd',496,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1368,860,864,'OP_EqHearSpellFizzleCmd',497,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1369,860,864,'OP_EqHearConsiderCmd',498,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1370,860,864,'OP_EqUpdateSubClassesCmd',499,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1371,860,864,'OP_EqCreateListBoxCmd',500,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1372,860,864,'OP_EqSetDebugPathPointsCmd',501,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1373,860,864,'OP_EqCannedEmoteCmd',503,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1374,860,864,'OP_EqStateCmd',504,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1375,860,864,'OP_EqPlaySoundCmd',505,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1376,860,864,'OP_EqPlaySound3DCmd',506,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1377,860,864,'OP_EqPlayVoiceCmd',507,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1378,860,864,'OP_EqHearDrowningCmd',508,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1379,860,864,'OP_EqHearDeathCmd',509,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1380,860,864,'OP_EqGroupMemberRemovedCmd',510,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1381,860,864,'OP_EqHearChainEffectCmd',511,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1382,860,864,'OP_EqReceiveOfferCmd',512,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1383,860,864,'OP_EqInspectPCResultsCmd',513,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1384,860,864,'OP_EqDrawablePathGraphCmd',514,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1385,860,864,'OP_EqDialogOpenCmd',515,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1386,860,864,'OP_EqDialogCloseCmd',516,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1387,860,864,'OP_EqFactionUpdateCmd',517,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1388,860,864,'OP_EqCollectionUpdateCmd',518,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1389,860,864,'OP_EqCollectionFilterCmd',519,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1390,860,864,'OP_EqCollectionItemCmd',520,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1391,860,864,'OP_EqQuestJournalUpdateCmd',521,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1392,860,864,'OP_EqQuestJournalReplyCmd',523,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1393,860,864,'OP_EqQuestGroupCmd',524,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1394,860,864,'OP_EqUpdateMerchantCmd',525,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1395,860,864,'OP_EqUpdateStoreCmd',526,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1396,860,864,'OP_EqUpdatePlayerTradeCmd',527,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1397,860,864,'OP_EqHelpPathCmd',528,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1398,860,864,'OP_EqHelpPathClearCmd',529,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1399,860,864,'OP_EqUpdateBankCmd',530,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1400,860,864,'OP_EqExamineInfoCmd',531,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1401,860,864,'OP_EqCloseWindowCmd',532,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1402,860,864,'OP_EqUpdateLootCmd',533,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1403,860,864,'OP_EqJunctionListCmd',534,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1404,860,864,'OP_EqShowDeathWindowCmd',535,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1405,860,864,'OP_EqDisplaySpellFailCmd',536,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1406,860,864,'OP_EqSpellCastStartCmd',537,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1407,860,864,'OP_EqSpellCastEndCmd',538,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1408,860,864,'OP_EqResurrectedCmd',539,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1409,860,864,'OP_EqChoiceWinCmd',540,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1410,860,864,'OP_EqSetDefaultVerbCmd',541,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1411,860,864,'OP_EqInstructionWindowCmd',543,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1412,860,864,'OP_EqInstructionWindowCloseCmd',544,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1413,860,864,'OP_EqInstructionWindowGoalCmd',545,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1414,860,864,'OP_EqInstructionWindowTaskCmd',546,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1415,860,864,'OP_EqEnableGameEventCmd',547,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1416,860,864,'OP_EqShowWindowCmd',548,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1417,860,864,'OP_EqEnableWindowCmd',549,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1418,860,864,'OP_EqFlashWindowCmd',550,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1419,860,864,'OP_EqHearPlayFlavorCmd',551,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1420,860,864,'OP_EqUpdateSignWidgetCmd',553,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1421,860,864,'OP_EqDebugPVDCmd',554,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1422,860,864,'OP_EqShowBookCmd',555,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1423,860,864,'OP_EqQuestionnaireCmd',556,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1424,860,864,'OP_EqGetProbsCmd',557,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1425,860,864,'OP_EqHearHealCmd',558,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1426,860,864,'OP_EqChatChannelUpdateCmd',559,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1427,860,864,'OP_EqWhoChannelQueryReplyCmd',560,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1428,860,864,'OP_EqAvailWorldChannelsCmd',561,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1429,860,864,'OP_EqUpdateTargetCmd',562,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1430,860,864,'OP_EqConsignmentItemsCmd',564,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1431,860,864,'OP_EqStartBrokerCmd',566,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1432,860,864,'OP_EqMapExplorationCmd',567,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1433,860,864,'OP_EqStoreLogCmd',568,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1434,860,864,'OP_EqSpellMoveToRangeAndRetryCmd',569,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1435,860,864,'OP_EqUpdatePlayerMailCmd',570,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1436,860,864,'OP_EqArenaResultsCmd',571,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1437,860,864,'OP_EqGuildBankEventActionCmd',572,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1438,860,864,'OP_EqGuildBankExamineInfoCmd',573,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1439,860,864,'OP_EqHearSpellNoLandCmd',574,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1440,860,864,'OP_Lottery',575,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1441,860,864,'OP_GuildRecruitingMemberInfo',576,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1442,860,864,'OP_GuildRecruiting',577,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1443,860,864,'OP_GuildRecruitingDetails',578,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1444,860,864,'OP_GuildRecruitingImage',579,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1445,860,864,'OP_PointOfInterest',600,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1446,860,864,'OP_TraitsList',602,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1447,860,864,'OP_RecipeList',611,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1448,860,864,'OP_CharacterAchievements',655,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1449,860,864,'OP_AddClientToGroupMsg',999,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1450,860,864,'OP_AddGroupToGroupMsg',999,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1451,860,864,'OP_GuildKickMsg',999,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1452,860,864,'OP_PurchaseConsignmentResponseMsg',999,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1453,860,864,'OP_ProcessScriptMsg',999,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1454,860,864,'OP_ProcessWorkspaceMsg',999,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1455,860,864,'OP_QuickbarAddMsg',999,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1456,860,864,'OP_SkillSlotMapping',999,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1457,860,864,'OP_MapRequest',999,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1458,860,864,'OP_Unknown',10003,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1459,860,864,'OP_WSWeatherUpdateMsg',10012,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1460,869,877,'OP_LoginRequestMsg',0,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1461,869,877,'OP_LoginByNumRequestMsg',1,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1462,869,877,'OP_WSLoginRequestMsg',2,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1463,869,877,'OP_ESLoginRequestMsg',3,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1464,869,877,'OP_LoginReplyMsg',4,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1465,869,877,'OP_WSStatusReplyMsg',5,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1466,869,877,'OP_WorldStatusChangeMsg',6,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1467,869,877,'OP_AllWSDescRequestMsg',7,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1468,869,877,'OP_WorldListMsg',8,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1469,869,877,'OP_AllCharactersDescRequestMsg',9,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1470,869,877,'OP_AllCharactersDescReplyMsg',10,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1471,869,877,'OP_CreateCharacterRequestMsg',11,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1472,869,877,'OP_CreateCharacterReplyMsg',12,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1473,869,877,'OP_WSCreateCharacterRequestMsg',13,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1474,869,877,'OP_WSCreateCharacterReplyMsg',14,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1475,869,877,'OP_ReskinCharacterRequestMsg',15,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1476,869,877,'OP_DeleteCharacterRequestMsg',16,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1477,869,877,'OP_DeleteCharacterReplyMsg',17,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1478,869,877,'OP_PlayCharacterRequestMsg',18,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1479,869,877,'OP_PlayCharacterReplyMsg',19,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1480,869,877,'OP_ExpectClientAsCharacterReplyMs',22,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1481,869,877,'OP_ServerPlayCharacterRequestMsg',23,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1482,869,877,'OP_ServerPlayCharacterReplyMsg',24,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1483,869,877,'OP_ESInitMsg',25,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1484,869,877,'OP_ESReadyForClientsMsg',26,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1485,869,877,'OP_CreateZoneInstanceMsg',27,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1486,869,877,'OP_ZoneInstanceCreateReplyMsg',28,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1487,869,877,'OP_ZoneInstanceDestroyedMsg',29,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1488,869,877,'OP_ExpectClientAsCharacterRequest',30,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1489,869,877,'OP_ZoneInfoMsg',31,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1490,869,877,'OP_DoneLoadingZoneResourcesMsg',32,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1491,869,877,'OP_DoneSendingInitialEntitiesMsg',33,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1492,869,877,'OP_DoneLoadingEntityResourcesMsg',34,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1493,869,877,'OP_PredictionUpdateMsg',35,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1494,869,877,'OP_UpdatePositionMsg',37,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1495,869,877,'OP_SetRemoteCmdsMsg',39,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1496,869,877,'OP_RemoteCmdMsg',40,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1497,869,877,'OP_GameWorldTimeMsg',41,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1498,869,877,'OP_MOTDMsg',42,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1499,869,877,'OP_ZoneMOTDMsg',43,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1500,869,877,'OP_AvatarCreatedMsg',44,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1501,869,877,'OP_AvatarDestroyedMsg',45,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1502,869,877,'OP_RequestCampMsg',47,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1503,869,877,'OP_CampStartedMsg',48,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1504,869,877,'OP_CampAbortedMsg',49,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1505,869,877,'OP_WhoQueryRequestMsg',50,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1506,869,877,'OP_WhoQueryReplyMsg',51,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1507,869,877,'OP_MonitorReplyMsg',52,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1508,869,877,'OP_MonitorCharacterListMsg',53,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1509,869,877,'OP_MonitorCharacterListRequestMsg',54,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1510,869,877,'OP_ClientCmdMsg',55,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1511,869,877,'OP_DispatchESMsg',56,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1512,869,877,'OP_DispatchClientCmdMsg',57,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1513,869,877,'OP_UpdateTargetMsg',58,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1514,869,877,'OP_UpdateTargetLocMsg',59,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1515,869,877,'OP_UpdateCharacterSheetMsg',60,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1516,869,877,'OP_UpdateSpellBookMsg',61,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1517,869,877,'OP_UpdateInventoryMsg',63,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1518,869,877,'OP_UpdateRecipeBookMsg',65,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1519,869,877,'OP_RequestRecipeDetailsMsg',66,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1520,869,877,'OP_RecipeDetailsMsg',67,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1521,869,877,'OP_UpdateSkillBookMsg',68,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1522,869,877,'OP_UpdateSkillsMsg',69,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1523,869,877,'OP_UpdateOpportunityMsg',70,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1524,869,877,'OP_ChangeZoneMsg',72,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1525,869,877,'OP_ClientTeleportRequestMsg',73,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1526,869,877,'OP_TeleportWithinZoneMsg',74,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1527,869,877,'OP_TeleportWithinZoneNoReloadMsg',75,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1528,869,877,'OP_MigrateClientToZoneRequestMsg',76,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1529,869,877,'OP_MigrateClientToZoneReplyMsg',77,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1530,869,877,'OP_ReadyToZoneMsg',78,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1531,869,877,'OP_RemoveClientFromGroupMsg',79,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1532,869,877,'OP_RemoveGroupFromGroupMsg',80,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1533,869,877,'OP_MakeGroupLeaderMsg',81,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1534,869,877,'OP_GroupCreatedMsg',82,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1535,869,877,'OP_GroupDestroyedMsg',83,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1536,869,877,'OP_GroupMemberAddedMsg',84,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1537,869,877,'OP_GroupMemberRemovedMsg',85,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1538,869,877,'OP_GroupRemovedFromGroupMsg',86,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1539,869,877,'OP_GroupLeaderChangedMsg',87,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1540,869,877,'OP_GroupResendOOZDataMsg',88,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1541,869,877,'OP_GroupSettingsChangedMsg',89,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1542,869,877,'OP_OutOfZoneMemberDataMsg',90,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1543,869,877,'OP_SendLatestRequestMsg',91,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1544,869,877,'OP_ClearDataMsg',92,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1545,869,877,'OP_SetSocialMsg',93,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1546,869,877,'OP_ESStatusMsg',94,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1547,869,877,'OP_ESZoneInstanceStatusMsg',95,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1548,869,877,'OP_ZonesStatusRequestMsg',96,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1549,869,877,'OP_ZonesStatusMsg',97,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1550,869,877,'OP_ESWeatherRequestMsg',98,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1551,869,877,'OP_ESWeatherRequestEndMsg',99,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1552,869,877,'OP_DialogSelectMsg',100,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1553,869,877,'OP_DialogCloseMsg',101,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1554,869,877,'OP_RemoveSpellEffectMsg',103,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1555,869,877,'OP_RemoveConcentrationMsg',104,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1556,869,877,'OP_QuestJournalOpenMsg',106,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1557,869,877,'OP_QuestJournalInspectMsg',107,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1558,869,877,'OP_QuestJournalSetVisibleMsg',108,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1559,869,877,'OP_QuestJournalWaypointMsg',109,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1560,869,877,'OP_CreateGuildRequestMsg',110,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1561,869,877,'OP_CreateGuildReplyMsg',111,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1562,869,877,'OP_GuildsayMsg',112,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1563,869,877,'OP_GuildUpdateMsg',113,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1564,869,877,'OP_DeleteGuildMsg',114,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1565,869,877,'OP_FellowshipExpMsg',115,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1566,869,877,'OP_ConsignmentCloseStoreMsg',116,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1567,869,877,'OP_ConsignItemRequestMsg',117,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1568,869,877,'OP_ConsignItemResponseMsg',118,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1569,869,877,'OP_PurchaseConsignmentRequestMsg',119,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1570,869,877,'OP_HouseDeletedRemotelyMsg',120,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1571,869,877,'OP_UpdateHouseDataMsg',121,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1572,869,877,'OP_UpdateHouseAccessDataMsg',122,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1573,869,877,'OP_PlayerHouseBaseScreenMsg',123,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1574,869,877,'OP_PlayerHousePurchaseScreenMsg',124,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1575,869,877,'OP_PlayerHouseAccessUpdateMsg',125,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1576,869,877,'OP_PlayerHouseDisplayStatusMsg',126,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1577,869,877,'OP_PlayerHouseCloseUIMsg',127,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1578,869,877,'OP_BuyPlayerHouseMsg',128,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1579,869,877,'OP_BuyPlayerHouseTintMsg',129,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1580,869,877,'OP_CollectAllHouseItemsMsg',130,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1581,869,877,'OP_RelinquishHouseMsg',131,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1582,869,877,'OP_EnterHouseMsg',132,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1583,869,877,'OP_ExitHouseMsg',133,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1584,869,877,'OP_HouseDefaultAccessSetMsg',134,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1585,869,877,'OP_HouseAccessSetMsg',135,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1586,869,877,'OP_HouseAccessRemoveMsg',136,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1587,869,877,'OP_PayHouseUpkeepMsg',137,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1588,869,877,'OP_MoveableObjectPlacementCriteri',138,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1589,869,877,'OP_EnterMoveObjectModeMsg',139,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1590,869,877,'OP_PositionMoveableObject',140,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1591,869,877,'OP_CancelMoveObjectModeMsg',141,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1592,869,877,'OP_ShaderCustomizationMsg',142,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1593,869,877,'OP_ReplaceableSubMeshesMsg',143,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1594,869,877,'OP_HouseCustomizationScreenMsg',144,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1595,869,877,'OP_CustomizationPurchaseRequestMs',145,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1596,869,877,'OP_CustomizationSetRequestMsg',146,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1597,869,877,'OP_CustomizationReplyMsg',147,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1598,869,877,'OP_TintWidgetsMsg',148,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1599,869,877,'OP_ExamineConsignmentRequestMsg',149,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1600,869,877,'OP_ExamineConsignmentResponseMsg',150,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1601,869,877,'OP_UISettingsResponseMsg',151,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1602,869,877,'OP_UIResetMsg',152,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1603,869,877,'OP_KeymapLoadMsg',153,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1604,869,877,'OP_KeymapNoneMsg',154,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1605,869,877,'OP_KeymapDataMsg',155,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1606,869,877,'OP_KeymapSaveMsg',156,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1607,869,877,'OP_DispatchSpellCmdMsg',157,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1608,869,877,'OP_EntityVerbsRequestMsg',159,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1609,869,877,'OP_EntityVerbsReplyMsg',160,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1610,869,877,'OP_EntityVerbsVerbMsg',161,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1611,869,877,'OP_ChatRelationshipUpdateMsg',163,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1612,869,877,'OP_LootItemsRequestMsg',164,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1613,869,877,'OP_StoppedLootingMsg',165,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1614,869,877,'OP_SitMsg',166,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1615,869,877,'OP_StandMsg',167,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1616,869,877,'OP_SatMsg',168,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1617,869,877,'OP_StoodMsg',169,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1618,869,877,'OP_ClearForTakeOffMsg',170,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1619,869,877,'OP_ReadyForTakeOffMsg',171,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1620,869,877,'OP_ShowIllusionsMsg',172,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1621,869,877,'OP_HideIllusionsMsg',173,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1622,869,877,'OP_ExamineItemRequestMsg',174,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1623,869,877,'OP_ReadBookPageMsg',175,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1624,869,877,'OP_DefaultGroupOptionsRequestMsg',176,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1625,869,877,'OP_DefaultGroupOptionsMsg',177,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1626,869,877,'OP_GroupOptionsMsg',178,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1627,869,877,'OP_DisplayGroupOptionsScreenMsg',179,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1628,869,877,'OP_DisplayInnVisitScreenMsg',180,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1629,869,877,'OP_DumpSchedulerMsg',181,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1630,869,877,'OP_LSRequestPlayerDescMsg',182,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1631,869,877,'OP_LSCheckAcctLockMsg',183,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1632,869,877,'OP_WSAcctLockStatusMsg',184,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1633,869,877,'OP_RequestHelpRepathMsg',185,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1634,869,877,'OP_RequestTargetLocMsg',186,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1635,869,877,'OP_UpdateMotdMsg',187,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1636,869,877,'OP_PerformPlayerKnockbackMsg',188,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1637,869,877,'OP_PerformCameraShakeMsg',189,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1638,869,877,'OP_PopulateSkillMapsMsg',191,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1639,869,877,'OP_CancelledFeignMsg',193,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1640,869,877,'OP_SignalMsg',194,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1641,869,877,'OP_ShowCreateFromRecipeUIMsg',195,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1642,869,877,'OP_CancelCreateFromRecipeMsg',196,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1643,869,877,'OP_BeginItemCreationMsg',197,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1644,869,877,'OP_StopItemCreationMsg',198,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1645,869,877,'OP_ShowItemCreationProcessUIMsg',199,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1646,869,877,'OP_UpdateItemCreationProcessUIMsg',200,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1647,869,877,'OP_DisplayTSEventReactionMsg',201,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1648,869,877,'OP_ShowRecipeBookMsg',202,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1649,869,877,'OP_KnowledgebaseRequestMsg',203,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1650,869,877,'OP_KnowledgebaseResponseMsg',204,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1651,869,877,'OP_CSTicketHeaderRequestMsg',205,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1652,869,877,'OP_CSTicketInfoMsg',206,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1653,869,877,'OP_CSTicketCommentRequestMsg',207,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1654,869,877,'OP_CSTicketCommentResponseMsg',208,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1655,869,877,'OP_CSTicketCreateMsg',209,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1656,869,877,'OP_CSTicketAddCommentMsg',210,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1657,869,877,'OP_CSTicketDeleteMsg',211,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1658,869,877,'OP_CSTicketChangeNotificationMsg',212,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1659,869,877,'OP_WorldDataUpdateMsg',213,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1660,869,877,'OP_KnownLanguagesMsg',214,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1661,869,877,'OP_LsRequestClientCrashLogMsg',215,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1662,869,877,'OP_LsClientBaselogReplyMsg',216,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1663,869,877,'OP_LsClientCrashlogReplyMsg',217,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1664,869,877,'OP_LsClientAlertlogReplyMsg',218,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1665,869,877,'OP_LsClientVerifylogReplyMsg',219,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1666,869,877,'OP_ClientTeleportToLocationMsg',220,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1667,869,877,'OP_UpdateClientPredFlagsMsg',221,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1668,869,877,'OP_ChangeServerControlFlagMsg',222,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1669,869,877,'OP_CSToolsRequestMsg',223,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1670,869,877,'OP_CSToolsResponseMsg',224,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1671,869,877,'OP_AddSocialStructureStandingMsg',225,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1672,869,877,'OP_CreateBoatTransportsMsg',226,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1673,869,877,'OP_PositionBoatTransportMsg',227,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1674,869,877,'OP_MigrateBoatTransportMsg',228,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1675,869,877,'OP_MigrateBoatTransportReplyMsg',229,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1676,869,877,'OP_DisplayDebugNLLPointsMsg',230,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1677,869,877,'OP_ExamineInfoRequestMsg',231,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1678,869,877,'OP_QuickbarInitMsg',232,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1679,869,877,'OP_QuickbarUpdateMsg',233,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1680,869,877,'OP_MacroInitMsg',234,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1681,869,877,'OP_MacroUpdateMsg',235,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1682,869,877,'OP_QuestionnaireMsg',236,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1683,869,877,'OP_LevelChangedMsg',237,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1684,869,877,'OP_SpellGainedMsg',238,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1685,869,877,'OP_EncounterBrokenMsg',239,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1686,869,877,'OP_OnscreenMsgMsg',240,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1687,869,877,'OP_DisplayWarningMsg',241,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1688,869,877,'OP_ModifyGuildMsg',242,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1689,869,877,'OP_GuildEventMsg',243,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1690,869,877,'OP_GuildEventAddMsg',244,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1691,869,877,'OP_GuildEventActionMsg',245,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1692,869,877,'OP_GuildEventListMsg',246,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1693,869,877,'OP_RequestGuildEventDetailsMsg',247,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1694,869,877,'OP_GuildEventDetailsMsg',248,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1695,869,877,'OP_RequestGuildInfoMsg',249,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1696,869,877,'OP_GuildBankActionMsg',250,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1697,869,877,'OP_GuildBankActionResponseMsg',251,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1698,869,877,'OP_GuildBankItemDetailsRequestMsg',252,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1699,869,877,'OP_GuildBankItemDetailsResponseMs',253,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1700,869,877,'OP_GuildBankUpdateMsg',254,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1701,869,877,'OP_GuildBankEventListMsg',255,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1702,869,877,'OP_RequestGuildBankEventDetailsMs',256,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1703,869,877,'OP_RewardPackMsg',257,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1704,869,877,'OP_RenameGuildMsg',258,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1705,869,877,'OP_ZoneToFriendRequestMsg',260,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1706,869,877,'OP_ZoneToFriendReplyMsg',261,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1707,869,877,'OP_ChatCreateChannelMsg',262,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1708,869,877,'OP_ChatJoinChannelMsg',263,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1709,869,877,'OP_ChatWhoChannelMsg',264,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1710,869,877,'OP_ChatLeaveChannelMsg',265,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1711,869,877,'OP_ChatTellChannelMsg',266,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1712,869,877,'OP_ChatTellUserMsg',267,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1713,869,877,'OP_ChatToggleFriendMsg',268,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1714,869,877,'OP_ChatToggleIgnoreMsg',269,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1715,869,877,'OP_ChatSendFriendsMsg',270,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1716,869,877,'OP_ChatSendIgnoresMsg',271,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1717,869,877,'OP_QuestReward',297,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1718,869,877,'OP_ChatFiltersMsg',312,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1719,869,877,'OP_MailGetHeadersMsg',313,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1720,869,877,'OP_MailGetMessageMsg',314,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1721,869,877,'OP_MailSendMessageMsg',315,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1722,869,877,'OP_MailDeleteMessageMsg',316,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1723,869,877,'OP_MailGetHeadersReplyMsg',317,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1724,869,877,'OP_MailGetMessageReplyMsg',318,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1725,869,877,'OP_MailSendMessageReplyMsg',319,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1726,869,877,'OP_MailCommitSendMessageMsg',320,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1727,869,877,'OP_MailSendSystemMessageMsg',321,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1728,869,877,'OP_MailRemoveAttachFromMailMsg',322,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1729,869,877,'OP_WaypointRequestMsg',324,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1730,869,877,'OP_WaypointReplyMsg',325,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1731,869,877,'OP_WaypointSelectMsg',326,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1732,869,877,'OP_WaypointUpdateMsg',327,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1733,869,877,'OP_CharNameChangedMsg',328,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1734,869,877,'OP_ShowZoneTeleporterDestinations',329,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1735,869,877,'OP_SelectZoneTeleporterDestinatio',330,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1736,869,877,'OP_ReloadLocalizedTxtMsg',331,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1737,869,877,'OP_RequestGuildMembershipMsg',332,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1738,869,877,'OP_GuildMembershipResponseMsg',333,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1739,869,877,'OP_LeaveGuildNotifyMsg',334,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1740,869,877,'OP_JoinGuildNotifyMsg',335,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1741,869,877,'OP_AvatarUpdateMsg',337,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1742,869,877,'OP_BioUpdateMsg',338,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1743,869,877,'OP_InspectPlayerMsg',339,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1744,869,877,'OP_WSServerLockMsg',340,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1745,869,877,'OP_LSServerLockMsg',341,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1746,869,877,'OP_WSServerHideMsg',342,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1747,869,877,'OP_CsCategoryRequestMsg',343,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1748,869,877,'OP_CsCategoryResponseMsg',344,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1749,869,877,'OP_KnowledgeWindowSlotMappingMsg',345,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1750,869,877,'OP_LFGUpdateMsg',346,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1751,869,877,'OP_AFKUpdateMsg',347,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1752,869,877,'OP_AnonUpdateMsg',348,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1753,869,877,'OP_UpdateActivePublicZonesMsg',349,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1754,869,877,'OP_UnknownNpcMsg',350,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1755,869,877,'OP_PromoFlagsDetailsMsg',351,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1756,869,877,'OP_ConsignViewCreateMsg',352,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1757,869,877,'OP_ConsignViewGetPageMsg',353,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1758,869,877,'OP_ConsignViewReleaseMsg',354,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1759,869,877,'OP_ConsignRemoveItemsMsg',355,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1760,869,877,'OP_UpdateDebugRadiiMsg',356,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1761,869,877,'OP_SnoopMsg',357,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1762,869,877,'OP_ReportMsg',358,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1763,869,877,'OP_UpdateRaidMsg',359,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1764,869,877,'OP_ConsignViewSortMsg',360,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1765,869,877,'OP_TitleUpdateMsg',361,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1766,869,877,'OP_ClientFellMsg',362,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1767,869,877,'OP_ClientInDeathRegionMsg',363,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1768,869,877,'OP_CampClientMsg',364,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1769,869,877,'OP_CSToolAccessResponseMsg',365,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1770,869,877,'OP_TrackingUpdateMsg',366,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1771,869,877,'OP_BeginTrackingMsg',367,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1772,869,877,'OP_StopTrackingMsg',368,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1773,869,877,'OP_GetAvatarAccessRequestForCSToo',369,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1774,869,877,'OP_AdvancementRequestMsg',370,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1775,869,877,'OP_UpdateAvgFrameTimeMsg',371,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1776,869,877,'OP_MapFogDataInitMsg',372,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1777,869,877,'OP_MapFogDataUpdateMsg',373,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1778,869,877,'OP_CloseGroupInviteWindowMsg',374,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1779,869,877,'OP_UpdateGroupMemberDataMsg',375,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1780,869,877,'OP_WorldPingMsg',376,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1781,869,877,'OP_MoveLogUpdateMsg',377,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1782,869,877,'OP_OfferQuestMsg',378,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1783,869,877,'OP_WorldShutdownUpdateMsg',379,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1784,869,877,'OP_DisplayMailScreenMsg',380,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1785,869,877,'OP_ClientIdleBeginMsg',381,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1786,869,877,'OP_ClientIdleEndMsg',382,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1787,869,877,'OP_PurchaseConsignmentLoreCheckRe',383,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1788,869,877,'OP_NotifyApprenticeStoppedMentori',384,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1789,869,877,'OP_CorruptedClientMsg',385,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1790,869,877,'OP_WorldDataChangeMsg',386,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1791,869,877,'OP_MailEventNotificationMsg',387,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1792,869,877,'OP_RestartZoneMsg',388,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1793,869,877,'OP_FlightPathsMsg',389,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1794,869,877,'OP_CharacterLinkdeadMsg',390,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1795,869,877,'OP_CharTransferStartRequestMsg',391,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1796,869,877,'OP_CharTransferStartReplyMsg',392,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1797,869,877,'OP_CharTransferRequestMsg',393,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1798,869,877,'OP_CharTransferReplyMsg',394,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1799,869,877,'OP_CharTransferRollbackRequestMsg',395,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1800,869,877,'OP_CharTransferCommitRequestMsg',396,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1801,869,877,'OP_CharTransferRollbackReplyMsg',397,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1802,869,877,'OP_CharTransferCommitReplyMsg',398,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1803,869,877,'OP_GetCharacterSerializedRequestM',399,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1804,869,877,'OP_GetCharacterSerializedReplyMsg',400,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1805,869,877,'OP_CreateCharFromCBBRequestMsg',401,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1806,869,877,'OP_CreateCharFromCBBReplyMsg',402,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1807,869,877,'OP_HousingDataChangedMsg',403,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1808,869,877,'OP_HousingRestoreMsg',404,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1809,869,877,'OP_AuctionItem',405,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1810,869,877,'OP_AuctionItemReply',406,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1811,869,877,'OP_AuctionCoin',407,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1812,869,877,'OP_AuctionCoinReply',408,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1813,869,877,'OP_AuctionCharacter',409,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1814,869,877,'OP_AuctionCharacterReply',410,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1815,869,877,'OP_AuctionCommitMsg',411,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1816,869,877,'OP_AuctionAbortMsg',412,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1817,869,877,'OP_CharTransferValidateRequestMsg',413,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1818,869,877,'OP_CharTransferValidateReplyMsg',414,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1819,869,877,'OP_RaceRestrictionMsg',415,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1820,869,877,'OP_SetInstanceDisplayNameMsg',416,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1821,869,877,'OP_GetAuctionAssetIDMsg',417,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1822,869,877,'OP_GetAuctionAssetIDReplyMsg',418,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1823,869,877,'OP_ResendWorldChannelsMsg',419,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1824,869,877,'OP_DisplayExchangeScreenMsg',420,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1825,869,877,'OP_ArenaGameTypesMsg',421,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1826,869,877,'OP_AuditAuctionEventMsg',423,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1827,869,877,'OP_InviteRequestMsg',425,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1828,869,877,'OP_InviteResponseMsg',426,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1829,869,877,'OP_InviteTargetResponseMsg',427,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1830,869,877,'OP_InspectPlayerRequestMsg',428,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1831,869,877,'OP_DispatchMsg',429,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1832,869,877,'OP_DisplayEventMsg',430,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1833,869,877,'OP_PrePossessionMsg',431,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1834,869,877,'OP_PostPossessionMsg',432,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1835,869,877,'OP_AdventureList',457,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1836,869,877,'OP_CancelSpellCast',458,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1837,869,877,'OP_AttackAllowed',470,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1838,869,877,'OP_AttackNotAllowed',471,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1839,869,877,'OP_DressingRoom',477,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1840,869,877,'OP_SkillInfoRequest',481,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1841,869,877,'OP_SkillInfoResponse',482,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1842,869,877,'OP_EqUnknown',483,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1843,869,877,'OP_EqHearChatCmd',484,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1844,869,877,'OP_EqDisplayTextCmd',485,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1845,869,877,'OP_EqCreateGhostCmd',486,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1846,869,877,'OP_EqCreateWidgetCmd',487,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1847,869,877,'OP_EqCreateSignWidgetCmd',488,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1848,869,877,'OP_EqDestroyGhostCmd',489,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1849,869,877,'OP_EqUpdateGhostCmd',490,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1850,869,877,'OP_EqSetControlGhostCmd',491,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1851,869,877,'OP_EqSetPOVGhostCmd',492,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1852,869,877,'OP_EqHearCombatCmd',493,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1853,869,877,'OP_EqHearSpellCastCmd',494,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1854,869,877,'OP_EqHearSpellInterruptCmd',497,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1855,869,877,'OP_EqHearSpellFizzleCmd',498,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1856,869,877,'OP_EqHearConsiderCmd',499,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1857,869,877,'OP_EqUpdateSubClassesCmd',500,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1858,869,877,'OP_EqCreateListBoxCmd',501,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1859,869,877,'OP_EqSetDebugPathPointsCmd',502,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1860,869,877,'OP_EqCannedEmoteCmd',504,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1861,869,877,'OP_EqStateCmd',505,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1862,869,877,'OP_EqPlaySoundCmd',506,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1863,869,877,'OP_EqPlaySound3DCmd',507,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1864,869,877,'OP_EqPlayVoiceCmd',508,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1865,869,877,'OP_EqHearDrowningCmd',509,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1866,869,877,'OP_EqHearDeathCmd',510,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1867,869,877,'OP_EqGroupMemberRemovedCmd',511,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1868,869,877,'OP_EqHearChainEffectCmd',512,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1869,869,877,'OP_EqReceiveOfferCmd',513,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1870,869,877,'OP_EqInspectPCResultsCmd',514,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1871,869,877,'OP_EqDrawablePathGraphCmd',515,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1872,869,877,'OP_EqDialogOpenCmd',516,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1873,869,877,'OP_EqDialogCloseCmd',517,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1874,869,877,'OP_EqFactionUpdateCmd',518,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1875,869,877,'OP_EqCollectionUpdateCmd',519,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1876,869,877,'OP_EqCollectionFilterCmd',520,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1877,869,877,'OP_EqCollectionItemCmd',521,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1878,869,877,'OP_EqQuestJournalUpdateCmd',522,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1879,869,877,'OP_EqQuestJournalReplyCmd',524,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1880,869,877,'OP_EqQuestGroupCmd',525,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1881,869,877,'OP_EqUpdateMerchantCmd',526,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1882,869,877,'OP_EqUpdateStoreCmd',527,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1883,869,877,'OP_EqUpdatePlayerTradeCmd',528,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1884,869,877,'OP_EqHelpPathCmd',529,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1885,869,877,'OP_EqHelpPathClearCmd',530,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1886,869,877,'OP_EqUpdateBankCmd',531,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1887,869,877,'OP_EqExamineInfoCmd',532,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1888,869,877,'OP_EqCloseWindowCmd',533,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1889,869,877,'OP_EqUpdateLootCmd',534,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1890,869,877,'OP_EqJunctionListCmd',535,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1891,869,877,'OP_EqShowDeathWindowCmd',536,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1892,869,877,'OP_EqDisplaySpellFailCmd',537,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1893,869,877,'OP_EqSpellCastStartCmd',538,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1894,869,877,'OP_EqSpellCastEndCmd',539,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1895,869,877,'OP_EqResurrectedCmd',540,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1896,869,877,'OP_EqChoiceWinCmd',541,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1897,869,877,'OP_EqSetDefaultVerbCmd',542,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1898,869,877,'OP_EqInstructionWindowCmd',544,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1899,869,877,'OP_EqInstructionWindowCloseCmd',545,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1900,869,877,'OP_EqInstructionWindowGoalCmd',546,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1901,869,877,'OP_EqInstructionWindowTaskCmd',547,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1902,869,877,'OP_EqEnableGameEventCmd',548,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1903,869,877,'OP_EqShowWindowCmd',549,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1904,869,877,'OP_EqEnableWindowCmd',550,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1905,869,877,'OP_EqFlashWindowCmd',551,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1906,869,877,'OP_EqHearPlayFlavorCmd',552,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1907,869,877,'OP_EqUpdateSignWidgetCmd',554,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1908,869,877,'OP_EqDebugPVDCmd',555,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1909,869,877,'OP_EqShowBookCmd',556,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1910,869,877,'OP_EqQuestionnaireCmd',557,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1911,869,877,'OP_EqGetProbsCmd',558,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1912,869,877,'OP_EqHearHealCmd',559,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1913,869,877,'OP_EqChatChannelUpdateCmd',560,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1914,869,877,'OP_EqWhoChannelQueryReplyCmd',561,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1915,869,877,'OP_EqAvailWorldChannelsCmd',562,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1916,869,877,'OP_EqUpdateTargetCmd',563,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1917,869,877,'OP_EqConsignmentItemsCmd',565,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1918,869,877,'OP_EqStartBrokerCmd',567,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1919,869,877,'OP_EqMapExplorationCmd',568,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1920,869,877,'OP_EqStoreLogCmd',569,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1921,869,877,'OP_EqSpellMoveToRangeAndRetryCmd',570,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1922,869,877,'OP_EqUpdatePlayerMailCmd',571,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1923,869,877,'OP_EqArenaResultsCmd',572,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1924,869,877,'OP_EqGuildBankEventActionCmd',573,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1925,869,877,'OP_EqGuildBankExamineInfoCmd',574,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1926,869,877,'OP_EqHearSpellNoLandCmd',575,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1927,869,877,'OP_Lottery',576,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1928,869,877,'OP_GuildRecruitingMemberInfo',577,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1929,869,877,'OP_GuildRecruiting',578,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1930,869,877,'OP_GuildRecruitingDetails',579,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1931,869,877,'OP_GuildRecruitingImage',580,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1932,869,877,'OP_PointOfInterest',601,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1933,869,877,'OP_TraitsList',603,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1934,869,877,'OP_RecipeList',612,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1935,869,877,'OP_CharacterAchievements',655,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1936,869,877,'OP_MapRequest',999,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1937,869,877,'OP_AddClientToGroupMsg',1000,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1938,869,877,'OP_AddGroupToGroupMsg',1000,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1939,869,877,'OP_GuildKickMsg',1000,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1940,869,877,'OP_PurchaseConsignmentResponseMsg',1000,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1941,869,877,'OP_ProcessScriptMsg',1000,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1942,869,877,'OP_ProcessWorkspaceMsg',1000,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1943,869,877,'OP_QuickbarAddMsg',1000,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1944,869,877,'OP_SkillSlotMapping',1000,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1945,869,877,'OP_Unknown',10004,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1946,869,877,'OP_WSWeatherUpdateMsg',10012,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1947,882,887,'OP_LoginRequestMsg',0,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1948,882,887,'OP_LoginByNumRequestMsg',1,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1949,882,887,'OP_WSLoginRequestMsg',2,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1950,882,887,'OP_ESLoginRequestMsg',3,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1951,882,887,'OP_LoginReplyMsg',4,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1952,882,887,'OP_WSStatusReplyMsg',5,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1953,882,887,'OP_WorldStatusChangeMsg',6,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1954,882,887,'OP_AllWSDescRequestMsg',7,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1955,882,887,'OP_WorldListMsg',8,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1956,882,887,'OP_AllCharactersDescRequestMsg',9,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1957,882,887,'OP_AllCharactersDescReplyMsg',10,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1958,882,887,'OP_CreateCharacterRequestMsg',11,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1959,882,887,'OP_CreateCharacterReplyMsg',12,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1960,882,887,'OP_WSCreateCharacterRequestMsg',13,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1961,882,887,'OP_WSCreateCharacterReplyMsg',14,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1962,882,887,'OP_ReskinCharacterRequestMsg',15,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1963,882,887,'OP_DeleteCharacterRequestMsg',16,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1964,882,887,'OP_DeleteCharacterReplyMsg',17,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1965,882,887,'OP_PlayCharacterRequestMsg',18,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1966,882,887,'OP_PlayCharacterReplyMsg',19,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1967,882,887,'OP_ExpectClientAsCharacterReplyMs',22,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1968,882,887,'OP_ServerPlayCharacterRequestMsg',23,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1969,882,887,'OP_ServerPlayCharacterReplyMsg',24,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1970,882,887,'OP_ESInitMsg',25,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1971,882,887,'OP_ESReadyForClientsMsg',26,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1972,882,887,'OP_CreateZoneInstanceMsg',27,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1973,882,887,'OP_ZoneInstanceCreateReplyMsg',28,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1974,882,887,'OP_ZoneInstanceDestroyedMsg',29,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1975,882,887,'OP_ExpectClientAsCharacterRequest',30,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1976,882,887,'OP_ZoneInfoMsg',31,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1977,882,887,'OP_DoneLoadingZoneResourcesMsg',32,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1978,882,887,'OP_DoneSendingInitialEntitiesMsg',33,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1979,882,887,'OP_DoneLoadingEntityResourcesMsg',34,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1980,882,887,'OP_PredictionUpdateMsg',35,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1981,882,887,'OP_UpdatePositionMsg',37,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1982,882,887,'OP_SetRemoteCmdsMsg',39,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1983,882,887,'OP_RemoteCmdMsg',40,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1984,882,887,'OP_GameWorldTimeMsg',41,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1985,882,887,'OP_MOTDMsg',42,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1986,882,887,'OP_ZoneMOTDMsg',43,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1987,882,887,'OP_AvatarCreatedMsg',44,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1988,882,887,'OP_AvatarDestroyedMsg',45,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1989,882,887,'OP_RequestCampMsg',47,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1990,882,887,'OP_CampStartedMsg',48,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1991,882,887,'OP_CampAbortedMsg',49,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1992,882,887,'OP_WhoQueryRequestMsg',50,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1993,882,887,'OP_WhoQueryReplyMsg',51,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1994,882,887,'OP_MonitorReplyMsg',52,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1995,882,887,'OP_MonitorCharacterListMsg',53,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1996,882,887,'OP_MonitorCharacterListRequestMsg',54,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1997,882,887,'OP_ClientCmdMsg',55,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1998,882,887,'OP_DispatchESMsg',56,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (1999,882,887,'OP_DispatchClientCmdMsg',57,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2000,882,887,'OP_UpdateTargetMsg',58,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2001,882,887,'OP_UpdateTargetLocMsg',59,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2002,882,887,'OP_UpdateCharacterSheetMsg',60,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2003,882,887,'OP_UpdateSpellBookMsg',61,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2004,882,887,'OP_UpdateInventoryMsg',63,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2005,882,887,'OP_UpdateRecipeBookMsg',65,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2006,882,887,'OP_RequestRecipeDetailsMsg',66,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2007,882,887,'OP_RecipeDetailsMsg',67,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2008,882,887,'OP_UpdateSkillBookMsg',68,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2009,882,887,'OP_UpdateSkillsMsg',69,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2010,882,887,'OP_UpdateOpportunityMsg',70,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2011,882,887,'OP_ChangeZoneMsg',72,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2012,882,887,'OP_ClientTeleportRequestMsg',73,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2013,882,887,'OP_TeleportWithinZoneMsg',74,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2014,882,887,'OP_TeleportWithinZoneNoReloadMsg',75,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2015,882,887,'OP_MigrateClientToZoneRequestMsg',76,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2016,882,887,'OP_MigrateClientToZoneReplyMsg',77,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2017,882,887,'OP_ReadyToZoneMsg',78,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2018,882,887,'OP_RemoveClientFromGroupMsg',79,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2019,882,887,'OP_RemoveGroupFromGroupMsg',80,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2020,882,887,'OP_MakeGroupLeaderMsg',81,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2021,882,887,'OP_GroupCreatedMsg',82,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2022,882,887,'OP_GroupDestroyedMsg',83,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2023,882,887,'OP_GroupMemberAddedMsg',84,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2024,882,887,'OP_GroupMemberRemovedMsg',85,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2025,882,887,'OP_GroupRemovedFromGroupMsg',86,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2026,882,887,'OP_GroupLeaderChangedMsg',87,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2027,882,887,'OP_GroupResendOOZDataMsg',88,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2028,882,887,'OP_GroupSettingsChangedMsg',89,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2029,882,887,'OP_OutOfZoneMemberDataMsg',90,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2030,882,887,'OP_SendLatestRequestMsg',91,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2031,882,887,'OP_ClearDataMsg',92,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2032,882,887,'OP_SetSocialMsg',93,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2033,882,887,'OP_ESStatusMsg',94,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2034,882,887,'OP_ESZoneInstanceStatusMsg',95,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2035,882,887,'OP_ZonesStatusRequestMsg',96,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2036,882,887,'OP_ZonesStatusMsg',97,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2037,882,887,'OP_ESWeatherRequestMsg',98,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2038,882,887,'OP_ESWeatherRequestEndMsg',99,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2039,882,887,'OP_DialogSelectMsg',101,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2040,882,887,'OP_DialogCloseMsg',102,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2041,882,887,'OP_RemoveSpellEffectMsg',103,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2042,882,887,'OP_RemoveConcentrationMsg',104,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2043,882,887,'OP_QuestJournalOpenMsg',106,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2044,882,887,'OP_QuestJournalInspectMsg',107,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2045,882,887,'OP_QuestJournalSetVisibleMsg',108,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2046,882,887,'OP_QuestJournalWaypointMsg',109,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2047,882,887,'OP_CreateGuildRequestMsg',110,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2048,882,887,'OP_CreateGuildReplyMsg',111,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2049,882,887,'OP_GuildsayMsg',112,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2050,882,887,'OP_GuildUpdateMsg',113,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2051,882,887,'OP_DeleteGuildMsg',115,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2052,882,887,'OP_FellowshipExpMsg',116,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2053,882,887,'OP_ConsignmentCloseStoreMsg',117,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2054,882,887,'OP_ConsignItemRequestMsg',118,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2055,882,887,'OP_ConsignItemResponseMsg',119,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2056,882,887,'OP_PurchaseConsignmentRequestMsg',120,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2057,882,887,'OP_HouseDeletedRemotelyMsg',121,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2058,882,887,'OP_UpdateHouseDataMsg',122,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2059,882,887,'OP_UpdateHouseAccessDataMsg',123,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2060,882,887,'OP_PlayerHouseBaseScreenMsg',124,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2061,882,887,'OP_PlayerHousePurchaseScreenMsg',125,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2062,882,887,'OP_PlayerHouseAccessUpdateMsg',126,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2063,882,887,'OP_PlayerHouseDisplayStatusMsg',127,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2064,882,887,'OP_PlayerHouseCloseUIMsg',128,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2065,882,887,'OP_BuyPlayerHouseMsg',129,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2066,882,887,'OP_BuyPlayerHouseTintMsg',130,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2067,882,887,'OP_CollectAllHouseItemsMsg',131,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2068,882,887,'OP_RelinquishHouseMsg',132,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2069,882,887,'OP_EnterHouseMsg',133,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2070,882,887,'OP_ExitHouseMsg',134,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2071,882,887,'OP_HouseDefaultAccessSetMsg',135,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2072,882,887,'OP_HouseAccessSetMsg',136,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2073,882,887,'OP_HouseAccessRemoveMsg',137,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2074,882,887,'OP_PayHouseUpkeepMsg',138,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2075,882,887,'OP_MoveableObjectPlacementCriteri',139,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2076,882,887,'OP_EnterMoveObjectModeMsg',140,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2077,882,887,'OP_PositionMoveableObject',141,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2078,882,887,'OP_CancelMoveObjectModeMsg',142,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2079,882,887,'OP_ShaderCustomizationMsg',143,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2080,882,887,'OP_ReplaceableSubMeshesMsg',144,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2081,882,887,'OP_HouseCustomizationScreenMsg',145,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2082,882,887,'OP_CustomizationPurchaseRequestMs',146,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2083,882,887,'OP_CustomizationSetRequestMsg',147,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2084,882,887,'OP_CustomizationReplyMsg',148,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2085,882,887,'OP_TintWidgetsMsg',149,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2086,882,887,'OP_ExamineConsignmentRequestMsg',150,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2087,882,887,'OP_ExamineConsignmentResponseMsg',151,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2088,882,887,'OP_UISettingsResponseMsg',152,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2089,882,887,'OP_UIResetMsg',153,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2090,882,887,'OP_KeymapLoadMsg',154,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2091,882,887,'OP_KeymapNoneMsg',155,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2092,882,887,'OP_KeymapDataMsg',156,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2093,882,887,'OP_KeymapSaveMsg',157,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2094,882,887,'OP_DispatchSpellCmdMsg',158,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2095,882,887,'OP_EntityVerbsRequestMsg',160,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2096,882,887,'OP_EntityVerbsReplyMsg',161,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2097,882,887,'OP_EntityVerbsVerbMsg',162,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2098,882,887,'OP_ChatRelationshipUpdateMsg',164,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2099,882,887,'OP_LootItemsRequestMsg',165,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2100,882,887,'OP_StoppedLootingMsg',166,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2101,882,887,'OP_SitMsg',167,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2102,882,887,'OP_StandMsg',168,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2103,882,887,'OP_SatMsg',169,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2104,882,887,'OP_StoodMsg',170,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2105,882,887,'OP_ClearForTakeOffMsg',171,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2106,882,887,'OP_ReadyForTakeOffMsg',172,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2107,882,887,'OP_ShowIllusionsMsg',173,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2108,882,887,'OP_HideIllusionsMsg',174,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2109,882,887,'OP_ExamineItemRequestMsg',175,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2110,882,887,'OP_ReadBookPageMsg',176,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2111,882,887,'OP_DefaultGroupOptionsRequestMsg',177,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2112,882,887,'OP_DefaultGroupOptionsMsg',178,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2113,882,887,'OP_GroupOptionsMsg',179,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2114,882,887,'OP_DisplayGroupOptionsScreenMsg',180,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2115,882,887,'OP_DisplayInnVisitScreenMsg',181,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2116,882,887,'OP_DumpSchedulerMsg',182,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2117,882,887,'OP_LSRequestPlayerDescMsg',183,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2118,882,887,'OP_LSCheckAcctLockMsg',184,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2119,882,887,'OP_WSAcctLockStatusMsg',185,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2120,882,887,'OP_RequestHelpRepathMsg',186,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2121,882,887,'OP_RequestTargetLocMsg',187,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2122,882,887,'OP_UpdateMotdMsg',188,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2123,882,887,'OP_PerformPlayerKnockbackMsg',189,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2124,882,887,'OP_PerformCameraShakeMsg',190,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2125,882,887,'OP_PopulateSkillMapsMsg',193,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2126,882,887,'OP_CancelledFeignMsg',195,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2127,882,887,'OP_SignalMsg',196,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2128,882,887,'OP_ShowCreateFromRecipeUIMsg',197,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2129,882,887,'OP_CancelCreateFromRecipeMsg',198,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2130,882,887,'OP_BeginItemCreationMsg',199,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2131,882,887,'OP_StopItemCreationMsg',200,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2132,882,887,'OP_ShowItemCreationProcessUIMsg',201,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2133,882,887,'OP_UpdateItemCreationProcessUIMsg',202,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2134,882,887,'OP_DisplayTSEventReactionMsg',203,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2135,882,887,'OP_ShowRecipeBookMsg',204,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2136,882,887,'OP_KnowledgebaseRequestMsg',205,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2137,882,887,'OP_KnowledgebaseResponseMsg',206,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2138,882,887,'OP_CSTicketHeaderRequestMsg',207,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2139,882,887,'OP_CSTicketInfoMsg',208,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2140,882,887,'OP_CSTicketCommentRequestMsg',209,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2141,882,887,'OP_CSTicketCommentResponseMsg',210,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2142,882,887,'OP_CSTicketCreateMsg',211,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2143,882,887,'OP_CSTicketAddCommentMsg',212,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2144,882,887,'OP_CSTicketDeleteMsg',213,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2145,882,887,'OP_CSTicketChangeNotificationMsg',214,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2146,882,887,'OP_WorldDataUpdateMsg',215,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2147,882,887,'OP_KnownLanguagesMsg',216,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2148,882,887,'OP_LsRequestClientCrashLogMsg',217,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2149,882,887,'OP_LsClientBaselogReplyMsg',218,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2150,882,887,'OP_LsClientCrashlogReplyMsg',219,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2151,882,887,'OP_LsClientAlertlogReplyMsg',220,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2152,882,887,'OP_LsClientVerifylogReplyMsg',221,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2153,882,887,'OP_ClientTeleportToLocationMsg',222,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2154,882,887,'OP_UpdateClientPredFlagsMsg',223,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2155,882,887,'OP_ChangeServerControlFlagMsg',224,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2156,882,887,'OP_CSToolsRequestMsg',225,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2157,882,887,'OP_CSToolsResponseMsg',226,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2158,882,887,'OP_AddSocialStructureStandingMsg',227,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2159,882,887,'OP_CreateBoatTransportsMsg',228,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2160,882,887,'OP_PositionBoatTransportMsg',229,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2161,882,887,'OP_MigrateBoatTransportMsg',230,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2162,882,887,'OP_MigrateBoatTransportReplyMsg',231,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2163,882,887,'OP_DisplayDebugNLLPointsMsg',232,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2164,882,887,'OP_ExamineInfoRequestMsg',233,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2165,882,887,'OP_QuickbarInitMsg',234,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2166,882,887,'OP_QuickbarUpdateMsg',235,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2167,882,887,'OP_MacroInitMsg',236,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2168,882,887,'OP_MacroUpdateMsg',237,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2169,882,887,'OP_QuestionnaireMsg',238,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2170,882,887,'OP_LevelChangedMsg',239,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2171,882,887,'OP_SpellGainedMsg',240,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2172,882,887,'OP_EncounterBrokenMsg',241,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2173,882,887,'OP_OnscreenMsgMsg',242,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2174,882,887,'OP_DisplayWarningMsg',243,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2175,882,887,'OP_ModifyGuildMsg',244,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2176,882,887,'OP_GuildEventMsg',245,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2177,882,887,'OP_GuildEventAddMsg',246,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2178,882,887,'OP_GuildEventActionMsg',247,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2179,882,887,'OP_GuildEventListMsg',248,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2180,882,887,'OP_RequestGuildEventDetailsMsg',249,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2181,882,887,'OP_GuildEventDetailsMsg',250,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2182,882,887,'OP_RequestGuildInfoMsg',251,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2183,882,887,'OP_GuildBankActionMsg',252,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2184,882,887,'OP_GuildBankActionResponseMsg',253,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2185,882,887,'OP_GuildBankItemDetailsRequestMsg',254,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2186,882,887,'OP_GuildBankItemDetailsResponseMs',255,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2187,882,887,'OP_GuildBankUpdateMsg',256,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2188,882,887,'OP_GuildBankEventListMsg',257,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2189,882,887,'OP_RequestGuildBankEventDetailsMs',258,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2190,882,887,'OP_RewardPackMsg',259,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2191,882,887,'OP_RenameGuildMsg',260,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2192,882,887,'OP_ZoneToFriendRequestMsg',262,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2193,882,887,'OP_ZoneToFriendReplyMsg',263,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2194,882,887,'OP_ChatCreateChannelMsg',264,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2195,882,887,'OP_ChatJoinChannelMsg',265,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2196,882,887,'OP_ChatWhoChannelMsg',266,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2197,882,887,'OP_ChatLeaveChannelMsg',267,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2198,882,887,'OP_ChatTellChannelMsg',268,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2199,882,887,'OP_ChatTellUserMsg',269,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2200,882,887,'OP_ChatToggleFriendMsg',270,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2201,882,887,'OP_ChatToggleIgnoreMsg',271,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2202,882,887,'OP_ChatSendFriendsMsg',272,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2203,882,887,'OP_ChatSendIgnoresMsg',273,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2204,882,887,'OP_QuestReward',299,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2205,882,887,'OP_ChatFiltersMsg',314,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2206,882,887,'OP_MailGetHeadersMsg',315,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2207,882,887,'OP_MailGetMessageMsg',316,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2208,882,887,'OP_MailSendMessageMsg',317,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2209,882,887,'OP_MailDeleteMessageMsg',318,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2210,882,887,'OP_MailGetHeadersReplyMsg',319,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2211,882,887,'OP_MailGetMessageReplyMsg',320,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2212,882,887,'OP_MailSendMessageReplyMsg',321,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2213,882,887,'OP_MailCommitSendMessageMsg',322,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2214,882,887,'OP_MailSendSystemMessageMsg',323,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2215,882,887,'OP_MailRemoveAttachFromMailMsg',324,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2216,882,887,'OP_WaypointRequestMsg',326,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2217,882,887,'OP_WaypointReplyMsg',327,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2218,882,887,'OP_WaypointSelectMsg',328,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2219,882,887,'OP_WaypointUpdateMsg',329,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2220,882,887,'OP_CharNameChangedMsg',330,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2221,882,887,'OP_ShowZoneTeleporterDestinations',331,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2222,882,887,'OP_SelectZoneTeleporterDestinatio',332,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2223,882,887,'OP_ReloadLocalizedTxtMsg',333,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2224,882,887,'OP_RequestGuildMembershipMsg',334,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2225,882,887,'OP_GuildMembershipResponseMsg',335,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2226,882,887,'OP_LeaveGuildNotifyMsg',336,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2227,882,887,'OP_JoinGuildNotifyMsg',337,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2228,882,887,'OP_AvatarUpdateMsg',339,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2229,882,887,'OP_BioUpdateMsg',340,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2230,882,887,'OP_InspectPlayerMsg',341,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2231,882,887,'OP_WSServerLockMsg',342,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2232,882,887,'OP_LSServerLockMsg',343,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2233,882,887,'OP_WSServerHideMsg',344,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2234,882,887,'OP_CsCategoryRequestMsg',345,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2235,882,887,'OP_CsCategoryResponseMsg',346,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2236,882,887,'OP_KnowledgeWindowSlotMappingMsg',347,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2237,882,887,'OP_LFGUpdateMsg',348,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2238,882,887,'OP_AFKUpdateMsg',349,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2239,882,887,'OP_AnonUpdateMsg',350,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2240,882,887,'OP_UpdateActivePublicZonesMsg',351,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2241,882,887,'OP_UnknownNpcMsg',352,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2242,882,887,'OP_PromoFlagsDetailsMsg',353,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2243,882,887,'OP_ConsignViewCreateMsg',354,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2244,882,887,'OP_ConsignViewGetPageMsg',355,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2245,882,887,'OP_ConsignViewReleaseMsg',356,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2246,882,887,'OP_ConsignRemoveItemsMsg',357,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2247,882,887,'OP_UpdateDebugRadiiMsg',358,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2248,882,887,'OP_SnoopMsg',359,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2249,882,887,'OP_ReportMsg',360,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2250,882,887,'OP_UpdateRaidMsg',361,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2251,882,887,'OP_ConsignViewSortMsg',362,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2252,882,887,'OP_TitleUpdateMsg',363,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2253,882,887,'OP_ClientFellMsg',364,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2254,882,887,'OP_ClientInDeathRegionMsg',365,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2255,882,887,'OP_CampClientMsg',366,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2256,882,887,'OP_CSToolAccessResponseMsg',367,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2257,882,887,'OP_TrackingUpdateMsg',368,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2258,882,887,'OP_BeginTrackingMsg',369,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2259,882,887,'OP_StopTrackingMsg',370,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2260,882,887,'OP_GetAvatarAccessRequestForCSToo',371,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2261,882,887,'OP_AdvancementRequestMsg',372,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2262,882,887,'OP_UpdateAvgFrameTimeMsg',373,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2263,882,887,'OP_MapFogDataInitMsg',374,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2264,882,887,'OP_MapFogDataUpdateMsg',375,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2265,882,887,'OP_CloseGroupInviteWindowMsg',376,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2266,882,887,'OP_UpdateGroupMemberDataMsg',377,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2267,882,887,'OP_WorldPingMsg',378,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2268,882,887,'OP_MoveLogUpdateMsg',379,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2269,882,887,'OP_OfferQuestMsg',380,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2270,882,887,'OP_WorldShutdownUpdateMsg',381,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2271,882,887,'OP_DisplayMailScreenMsg',382,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2272,882,887,'OP_ClientIdleBeginMsg',383,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2273,882,887,'OP_ClientIdleEndMsg',384,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2274,882,887,'OP_PurchaseConsignmentLoreCheckRe',385,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2275,882,887,'OP_NotifyApprenticeStoppedMentori',386,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2276,882,887,'OP_CorruptedClientMsg',387,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2277,882,887,'OP_WorldDataChangeMsg',388,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2278,882,887,'OP_MailEventNotificationMsg',389,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2279,882,887,'OP_RestartZoneMsg',390,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2280,882,887,'OP_FlightPathsMsg',391,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2281,882,887,'OP_CharacterLinkdeadMsg',392,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2282,882,887,'OP_CharTransferStartRequestMsg',393,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2283,882,887,'OP_CharTransferStartReplyMsg',394,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2284,882,887,'OP_CharTransferRequestMsg',395,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2285,882,887,'OP_CharTransferReplyMsg',396,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2286,882,887,'OP_CharTransferRollbackRequestMsg',397,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2287,882,887,'OP_CharTransferCommitRequestMsg',398,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2288,882,887,'OP_CharTransferRollbackReplyMsg',399,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2289,882,887,'OP_CharTransferCommitReplyMsg',400,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2290,882,887,'OP_GetCharacterSerializedRequestM',401,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2291,882,887,'OP_GetCharacterSerializedReplyMsg',402,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2292,882,887,'OP_CreateCharFromCBBRequestMsg',403,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2293,882,887,'OP_CreateCharFromCBBReplyMsg',404,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2294,882,887,'OP_HousingDataChangedMsg',405,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2295,882,887,'OP_HousingRestoreMsg',406,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2296,882,887,'OP_AuctionItem',407,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2297,882,887,'OP_AuctionItemReply',408,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2298,882,887,'OP_AuctionCoin',409,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2299,882,887,'OP_AuctionCoinReply',410,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2300,882,887,'OP_AuctionCharacter',411,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2301,882,887,'OP_AuctionCharacterReply',412,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2302,882,887,'OP_AuctionCommitMsg',413,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2303,882,887,'OP_AuctionAbortMsg',414,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2304,882,887,'OP_CharTransferValidateRequestMsg',415,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2305,882,887,'OP_CharTransferValidateReplyMsg',416,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2306,882,887,'OP_RaceRestrictionMsg',417,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2307,882,887,'OP_SetInstanceDisplayNameMsg',418,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2308,882,887,'OP_GetAuctionAssetIDMsg',419,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2309,882,887,'OP_GetAuctionAssetIDReplyMsg',420,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2310,882,887,'OP_ResendWorldChannelsMsg',421,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2311,882,887,'OP_DisplayExchangeScreenMsg',422,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2312,882,887,'OP_ArenaGameTypesMsg',423,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2313,882,887,'OP_AuditAuctionEventMsg',425,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2314,882,887,'OP_InviteRequestMsg',427,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2315,882,887,'OP_InviteResponseMsg',428,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2316,882,887,'OP_InviteTargetResponseMsg',429,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2317,882,887,'OP_InspectPlayerRequestMsg',430,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2318,882,887,'OP_DispatchMsg',431,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2319,882,887,'OP_DisplayEventMsg',432,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2320,882,887,'OP_PrePossessionMsg',433,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2321,882,887,'OP_PostPossessionMsg',434,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2322,882,887,'OP_AdventureList',459,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2323,882,887,'OP_CancelSpellCast',460,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2324,882,887,'OP_AttackAllowed',472,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2325,882,887,'OP_AttackNotAllowed',473,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2326,882,887,'OP_DressingRoom',479,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2327,882,887,'OP_SkillInfoRequest',483,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2328,882,887,'OP_SkillInfoResponse',484,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2329,882,887,'OP_EqUnknown',487,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2330,882,887,'OP_EqHearChatCmd',488,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2331,882,887,'OP_EqDisplayTextCmd',489,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2332,882,887,'OP_EqCreateGhostCmd',490,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2333,882,887,'OP_EqCreateWidgetCmd',491,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2334,882,887,'OP_EqCreateSignWidgetCmd',492,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2335,882,887,'OP_EqDestroyGhostCmd',493,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2336,882,887,'OP_EqUpdateGhostCmd',494,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2337,882,887,'OP_EqSetControlGhostCmd',495,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2338,882,887,'OP_EqSetPOVGhostCmd',496,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2339,882,887,'OP_EqHearCombatCmd',497,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2340,882,887,'OP_EqHearSpellCastCmd',498,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2341,882,887,'OP_EqHearSpellInterruptCmd',501,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2342,882,887,'OP_EqHearSpellFizzleCmd',502,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2343,882,887,'OP_EqHearConsiderCmd',503,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2344,882,887,'OP_EqUpdateSubClassesCmd',504,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2345,882,887,'OP_EqCreateListBoxCmd',505,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2346,882,887,'OP_EqSetDebugPathPointsCmd',506,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2347,882,887,'OP_EqCannedEmoteCmd',508,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2348,882,887,'OP_EqStateCmd',509,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2349,882,887,'OP_EqPlaySoundCmd',510,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2350,882,887,'OP_EqPlaySound3DCmd',511,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2351,882,887,'OP_EqPlayVoiceCmd',512,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2352,882,887,'OP_EqHearDrowningCmd',513,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2353,882,887,'OP_EqHearDeathCmd',514,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2354,882,887,'OP_EqGroupMemberRemovedCmd',515,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2355,882,887,'OP_EqHearChainEffectCmd',516,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2356,882,887,'OP_EqReceiveOfferCmd',517,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2357,882,887,'OP_EqInspectPCResultsCmd',518,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2358,882,887,'OP_EqDrawablePathGraphCmd',519,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2359,882,887,'OP_EqDialogOpenCmd',520,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2360,882,887,'OP_EqDialogCloseCmd',521,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2361,882,887,'OP_EqFactionUpdateCmd',522,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2362,882,887,'OP_EqCollectionUpdateCmd',523,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2363,882,887,'OP_EqCollectionFilterCmd',524,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2364,882,887,'OP_EqCollectionItemCmd',525,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2365,882,887,'OP_EqQuestJournalUpdateCmd',526,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2366,882,887,'OP_EqQuestJournalReplyCmd',528,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2367,882,887,'OP_EqQuestGroupCmd',529,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2368,882,887,'OP_EqUpdateMerchantCmd',530,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2369,882,887,'OP_EqUpdateStoreCmd',531,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2370,882,887,'OP_EqUpdatePlayerTradeCmd',532,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2371,882,887,'OP_EqHelpPathCmd',533,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2372,882,887,'OP_EqHelpPathClearCmd',534,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2373,882,887,'OP_EqUpdateBankCmd',535,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2374,882,887,'OP_EqExamineInfoCmd',536,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2375,882,887,'OP_EqCloseWindowCmd',537,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2376,882,887,'OP_EqUpdateLootCmd',538,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2377,882,887,'OP_EqJunctionListCmd',539,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2378,882,887,'OP_EqShowDeathWindowCmd',540,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2379,882,887,'OP_EqDisplaySpellFailCmd',541,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2380,882,887,'OP_EqSpellCastStartCmd',542,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2381,882,887,'OP_EqSpellCastEndCmd',543,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2382,882,887,'OP_EqResurrectedCmd',544,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2383,882,887,'OP_EqChoiceWinCmd',545,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2384,882,887,'OP_EqSetDefaultVerbCmd',546,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2385,882,887,'OP_EqInstructionWindowCmd',548,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2386,882,887,'OP_EqInstructionWindowCloseCmd',549,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2387,882,887,'OP_EqInstructionWindowGoalCmd',550,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2388,882,887,'OP_EqInstructionWindowTaskCmd',551,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2389,882,887,'OP_EqEnableGameEventCmd',552,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2390,882,887,'OP_EqShowWindowCmd',553,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2391,882,887,'OP_EqEnableWindowCmd',554,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2392,882,887,'OP_EqFlashWindowCmd',555,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2393,882,887,'OP_EqHearPlayFlavorCmd',556,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2394,882,887,'OP_EqUpdateSignWidgetCmd',558,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2395,882,887,'OP_EqDebugPVDCmd',559,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2396,882,887,'OP_EqShowBookCmd',560,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2397,882,887,'OP_EqQuestionnaireCmd',561,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2398,882,887,'OP_EqGetProbsCmd',562,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2399,882,887,'OP_EqHearHealCmd',563,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2400,882,887,'OP_EqChatChannelUpdateCmd',564,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2401,882,887,'OP_EqWhoChannelQueryReplyCmd',565,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2402,882,887,'OP_EqAvailWorldChannelsCmd',566,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2403,882,887,'OP_EqUpdateTargetCmd',567,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2404,882,887,'OP_EqConsignmentItemsCmd',569,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2405,882,887,'OP_EqStartBrokerCmd',571,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2406,882,887,'OP_EqMapExplorationCmd',572,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2407,882,887,'OP_EqStoreLogCmd',573,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2408,882,887,'OP_EqSpellMoveToRangeAndRetryCmd',574,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2409,882,887,'OP_EqUpdatePlayerMailCmd',575,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2410,882,887,'OP_EqArenaResultsCmd',576,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2411,882,887,'OP_EqGuildBankEventActionCmd',577,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2412,882,887,'OP_EqGuildBankExamineInfoCmd',578,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2413,882,887,'OP_EqHearSpellNoLandCmd',579,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2414,882,887,'OP_Lottery',580,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2415,882,887,'OP_GuildRecruitingMemberInfo',581,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2416,882,887,'OP_GuildRecruiting',582,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2417,882,887,'OP_GuildRecruitingDetails',583,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2418,882,887,'OP_GuildRecruitingImage',584,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2419,882,887,'OP_PointOfInterest',606,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2420,882,887,'OP_TraitsList',608,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2421,882,887,'OP_RecipeList',616,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2422,882,887,'OP_CharacterAchievements',655,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2423,882,887,'OP_MapRequest',999,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2424,882,887,'OP_AddClientToGroupMsg',1004,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2425,882,887,'OP_AddGroupToGroupMsg',1004,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2426,882,887,'OP_GuildKickMsg',1004,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2427,882,887,'OP_PurchaseConsignmentResponseMsg',1004,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2428,882,887,'OP_ProcessScriptMsg',1004,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2429,882,887,'OP_ProcessWorkspaceMsg',1004,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2430,882,887,'OP_QuickbarAddMsg',1004,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2431,882,887,'OP_SkillSlotMapping',1004,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2432,882,887,'OP_Unknown',10008,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2433,882,887,'OP_WSWeatherUpdateMsg',10012,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2434,892,894,'OP_LoginRequestMsg',0,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2435,892,894,'OP_LoginByNumRequestMsg',1,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2436,892,894,'OP_WSLoginRequestMsg',2,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2437,892,894,'OP_ESLoginRequestMsg',3,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2438,892,894,'OP_LoginReplyMsg',4,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2439,892,894,'OP_WSStatusReplyMsg',5,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2440,892,894,'OP_WorldStatusChangeMsg',6,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2441,892,894,'OP_AllWSDescRequestMsg',7,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2442,892,894,'OP_WorldListMsg',8,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2443,892,894,'OP_AllCharactersDescRequestMsg',9,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2444,892,894,'OP_AllCharactersDescReplyMsg',10,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2445,892,894,'OP_CreateCharacterRequestMsg',11,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2446,892,894,'OP_CreateCharacterReplyMsg',12,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2447,892,894,'OP_WSCreateCharacterRequestMsg',13,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2448,892,894,'OP_WSCreateCharacterReplyMsg',14,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2449,892,894,'OP_ReskinCharacterRequestMsg',15,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2450,892,894,'OP_DeleteCharacterRequestMsg',16,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2451,892,894,'OP_DeleteCharacterReplyMsg',17,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2452,892,894,'OP_PlayCharacterRequestMsg',18,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2453,892,894,'OP_PlayCharacterReplyMsg',19,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2454,892,894,'OP_ExpectClientAsCharacterReplyMs',22,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2455,892,894,'OP_ServerPlayCharacterRequestMsg',23,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2456,892,894,'OP_ServerPlayCharacterReplyMsg',24,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2457,892,894,'OP_ESInitMsg',25,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2458,892,894,'OP_ESReadyForClientsMsg',26,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2459,892,894,'OP_CreateZoneInstanceMsg',27,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2460,892,894,'OP_ZoneInstanceCreateReplyMsg',28,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2461,892,894,'OP_ZoneInstanceDestroyedMsg',29,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2462,892,894,'OP_ExpectClientAsCharacterRequest',30,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2463,892,894,'OP_ZoneInfoMsg',31,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2464,892,894,'OP_DoneLoadingZoneResourcesMsg',32,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2465,892,894,'OP_DoneSendingInitialEntitiesMsg',33,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2466,892,894,'OP_DoneLoadingEntityResourcesMsg',34,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2467,892,894,'OP_PredictionUpdateMsg',35,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2468,892,894,'OP_UpdatePositionMsg',37,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2469,892,894,'OP_SetRemoteCmdsMsg',39,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2470,892,894,'OP_RemoteCmdMsg',40,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2471,892,894,'OP_GameWorldTimeMsg',41,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2472,892,894,'OP_MOTDMsg',42,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2473,892,894,'OP_ZoneMOTDMsg',43,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2474,892,894,'OP_AvatarCreatedMsg',44,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2475,892,894,'OP_AvatarDestroyedMsg',45,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2476,892,894,'OP_RequestCampMsg',47,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2477,892,894,'OP_CampStartedMsg',48,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2478,892,894,'OP_CampAbortedMsg',49,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2479,892,894,'OP_WhoQueryRequestMsg',50,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2480,892,894,'OP_WhoQueryReplyMsg',51,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2481,892,894,'OP_MonitorReplyMsg',52,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2482,892,894,'OP_MonitorCharacterListMsg',53,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2483,892,894,'OP_MonitorCharacterListRequestMsg',54,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2484,892,894,'OP_ClientCmdMsg',55,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2485,892,894,'OP_DispatchESMsg',56,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2486,892,894,'OP_DispatchClientCmdMsg',57,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2487,892,894,'OP_UpdateTargetMsg',58,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2488,892,894,'OP_UpdateTargetLocMsg',59,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2489,892,894,'OP_UpdateCharacterSheetMsg',60,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2490,892,894,'OP_UpdateSpellBookMsg',61,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2491,892,894,'OP_UpdateInventoryMsg',63,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2492,892,894,'OP_UpdateRecipeBookMsg',65,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2493,892,894,'OP_RequestRecipeDetailsMsg',66,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2494,892,894,'OP_RecipeDetailsMsg',67,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2495,892,894,'OP_UpdateSkillBookMsg',68,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2496,892,894,'OP_UpdateSkillsMsg',69,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2497,892,894,'OP_UpdateOpportunityMsg',70,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2498,892,894,'OP_ChangeZoneMsg',72,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2499,892,894,'OP_ClientTeleportRequestMsg',73,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2500,892,894,'OP_TeleportWithinZoneMsg',74,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2501,892,894,'OP_TeleportWithinZoneNoReloadMsg',75,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2502,892,894,'OP_MigrateClientToZoneRequestMsg',76,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2503,892,894,'OP_MigrateClientToZoneReplyMsg',77,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2504,892,894,'OP_ReadyToZoneMsg',78,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2505,892,894,'OP_RemoveClientFromGroupMsg',79,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2506,892,894,'OP_RemoveGroupFromGroupMsg',80,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2507,892,894,'OP_MakeGroupLeaderMsg',81,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2508,892,894,'OP_GroupCreatedMsg',82,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2509,892,894,'OP_GroupDestroyedMsg',83,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2510,892,894,'OP_GroupMemberAddedMsg',84,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2511,892,894,'OP_GroupMemberRemovedMsg',85,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2512,892,894,'OP_GroupRemovedFromGroupMsg',86,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2513,892,894,'OP_GroupLeaderChangedMsg',87,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2514,892,894,'OP_GroupResendOOZDataMsg',88,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2515,892,894,'OP_GroupSettingsChangedMsg',89,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2516,892,894,'OP_OutOfZoneMemberDataMsg',90,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2517,892,894,'OP_SendLatestRequestMsg',91,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2518,892,894,'OP_ClearDataMsg',92,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2519,892,894,'OP_SetSocialMsg',93,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2520,892,894,'OP_ESStatusMsg',94,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2521,892,894,'OP_ESZoneInstanceStatusMsg',95,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2522,892,894,'OP_ZonesStatusRequestMsg',96,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2523,892,894,'OP_ZonesStatusMsg',97,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2524,892,894,'OP_ESWeatherRequestMsg',98,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2525,892,894,'OP_ESWeatherRequestEndMsg',99,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2526,892,894,'OP_DialogSelectMsg',102,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2527,892,894,'OP_DialogCloseMsg',103,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2528,892,894,'OP_RemoveSpellEffectMsg',104,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2529,892,894,'OP_RemoveConcentrationMsg',105,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2530,892,894,'OP_QuestJournalOpenMsg',106,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2531,892,894,'OP_QuestJournalInspectMsg',107,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2532,892,894,'OP_QuestJournalSetVisibleMsg',108,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2533,892,894,'OP_QuestJournalWaypointMsg',109,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2534,892,894,'OP_CreateGuildRequestMsg',110,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2535,892,894,'OP_CreateGuildReplyMsg',111,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2536,892,894,'OP_GuildsayMsg',112,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2537,892,894,'OP_GuildUpdateMsg',114,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2538,892,894,'OP_DeleteGuildMsg',116,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2539,892,894,'OP_FellowshipExpMsg',117,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2540,892,894,'OP_ConsignmentCloseStoreMsg',118,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2541,892,894,'OP_ConsignItemRequestMsg',119,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2542,892,894,'OP_ConsignItemResponseMsg',120,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2543,892,894,'OP_PurchaseConsignmentRequestMsg',121,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2544,892,894,'OP_HouseDeletedRemotelyMsg',122,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2545,892,894,'OP_UpdateHouseDataMsg',123,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2546,892,894,'OP_UpdateHouseAccessDataMsg',124,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2547,892,894,'OP_PlayerHouseBaseScreenMsg',125,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2548,892,894,'OP_PlayerHousePurchaseScreenMsg',126,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2549,892,894,'OP_PlayerHouseAccessUpdateMsg',127,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2550,892,894,'OP_PlayerHouseDisplayStatusMsg',128,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2551,892,894,'OP_PlayerHouseCloseUIMsg',129,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2552,892,894,'OP_BuyPlayerHouseMsg',130,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2553,892,894,'OP_BuyPlayerHouseTintMsg',131,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2554,892,894,'OP_CollectAllHouseItemsMsg',132,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2555,892,894,'OP_RelinquishHouseMsg',133,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2556,892,894,'OP_EnterHouseMsg',134,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2557,892,894,'OP_ExitHouseMsg',135,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2558,892,894,'OP_HouseDefaultAccessSetMsg',136,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2559,892,894,'OP_HouseAccessSetMsg',137,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2560,892,894,'OP_HouseAccessRemoveMsg',138,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2561,892,894,'OP_PayHouseUpkeepMsg',139,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2562,892,894,'OP_MoveableObjectPlacementCriteri',140,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2563,892,894,'OP_EnterMoveObjectModeMsg',141,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2564,892,894,'OP_PositionMoveableObject',142,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2565,892,894,'OP_CancelMoveObjectModeMsg',143,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2566,892,894,'OP_ShaderCustomizationMsg',144,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2567,892,894,'OP_ReplaceableSubMeshesMsg',145,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2568,892,894,'OP_HouseCustomizationScreenMsg',146,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2569,892,894,'OP_CustomizationPurchaseRequestMs',147,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2570,892,894,'OP_CustomizationSetRequestMsg',148,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2571,892,894,'OP_CustomizationReplyMsg',149,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2572,892,894,'OP_TintWidgetsMsg',150,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2573,892,894,'OP_ExamineConsignmentRequestMsg',151,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2574,892,894,'OP_ExamineConsignmentResponseMsg',152,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2575,892,894,'OP_UISettingsResponseMsg',153,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2576,892,894,'OP_UIResetMsg',154,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2577,892,894,'OP_KeymapLoadMsg',155,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2578,892,894,'OP_KeymapNoneMsg',156,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2579,892,894,'OP_KeymapDataMsg',157,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2580,892,894,'OP_KeymapSaveMsg',158,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2581,892,894,'OP_DispatchSpellCmdMsg',159,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2582,892,894,'OP_EntityVerbsRequestMsg',161,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2583,892,894,'OP_EntityVerbsReplyMsg',162,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2584,892,894,'OP_EntityVerbsVerbMsg',163,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2585,892,894,'OP_ChatRelationshipUpdateMsg',165,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2586,892,894,'OP_LootItemsRequestMsg',166,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2587,892,894,'OP_StoppedLootingMsg',167,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2588,892,894,'OP_SitMsg',168,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2589,892,894,'OP_StandMsg',169,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2590,892,894,'OP_SatMsg',170,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2591,892,894,'OP_StoodMsg',171,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2592,892,894,'OP_ClearForTakeOffMsg',172,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2593,892,894,'OP_ReadyForTakeOffMsg',173,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2594,892,894,'OP_ShowIllusionsMsg',174,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2595,892,894,'OP_HideIllusionsMsg',175,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2596,892,894,'OP_ExamineItemRequestMsg',176,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2597,892,894,'OP_ReadBookPageMsg',177,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2598,892,894,'OP_DefaultGroupOptionsRequestMsg',178,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2599,892,894,'OP_DefaultGroupOptionsMsg',179,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2600,892,894,'OP_GroupOptionsMsg',180,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2601,892,894,'OP_DisplayGroupOptionsScreenMsg',181,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2602,892,894,'OP_DisplayInnVisitScreenMsg',182,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2603,892,894,'OP_DumpSchedulerMsg',183,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2604,892,894,'OP_LSRequestPlayerDescMsg',184,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2605,892,894,'OP_LSCheckAcctLockMsg',185,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2606,892,894,'OP_WSAcctLockStatusMsg',186,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2607,892,894,'OP_RequestHelpRepathMsg',187,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2608,892,894,'OP_RequestTargetLocMsg',188,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2609,892,894,'OP_UpdateMotdMsg',189,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2610,892,894,'OP_PerformPlayerKnockbackMsg',190,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2611,892,894,'OP_PerformCameraShakeMsg',191,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2612,892,894,'OP_PopulateSkillMapsMsg',194,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2613,892,894,'OP_CancelledFeignMsg',196,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2614,892,894,'OP_SignalMsg',197,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2615,892,894,'OP_ShowCreateFromRecipeUIMsg',198,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2616,892,894,'OP_CancelCreateFromRecipeMsg',199,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2617,892,894,'OP_BeginItemCreationMsg',200,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2618,892,894,'OP_StopItemCreationMsg',201,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2619,892,894,'OP_ShowItemCreationProcessUIMsg',202,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2620,892,894,'OP_UpdateItemCreationProcessUIMsg',203,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2621,892,894,'OP_DisplayTSEventReactionMsg',204,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2622,892,894,'OP_ShowRecipeBookMsg',205,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2623,892,894,'OP_KnowledgebaseRequestMsg',206,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2624,892,894,'OP_KnowledgebaseResponseMsg',207,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2625,892,894,'OP_CSTicketHeaderRequestMsg',208,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2626,892,894,'OP_CSTicketInfoMsg',209,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2627,892,894,'OP_CSTicketCommentRequestMsg',210,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2628,892,894,'OP_CSTicketCommentResponseMsg',211,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2629,892,894,'OP_CSTicketCreateMsg',212,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2630,892,894,'OP_CSTicketAddCommentMsg',213,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2631,892,894,'OP_CSTicketDeleteMsg',214,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2632,892,894,'OP_CSTicketChangeNotificationMsg',215,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2633,892,894,'OP_WorldDataUpdateMsg',216,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2634,892,894,'OP_KnownLanguagesMsg',217,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2635,892,894,'OP_LsRequestClientCrashLogMsg',218,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2636,892,894,'OP_LsClientBaselogReplyMsg',219,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2637,892,894,'OP_LsClientCrashlogReplyMsg',220,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2638,892,894,'OP_LsClientAlertlogReplyMsg',221,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2639,892,894,'OP_LsClientVerifylogReplyMsg',222,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2640,892,894,'OP_ClientTeleportToLocationMsg',223,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2641,892,894,'OP_UpdateClientPredFlagsMsg',224,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2642,892,894,'OP_ChangeServerControlFlagMsg',225,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2643,892,894,'OP_CSToolsRequestMsg',226,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2644,892,894,'OP_CSToolsResponseMsg',227,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2645,892,894,'OP_AddSocialStructureStandingMsg',228,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2646,892,894,'OP_CreateBoatTransportsMsg',229,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2647,892,894,'OP_PositionBoatTransportMsg',230,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2648,892,894,'OP_MigrateBoatTransportMsg',231,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2649,892,894,'OP_MigrateBoatTransportReplyMsg',232,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2650,892,894,'OP_DisplayDebugNLLPointsMsg',233,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2651,892,894,'OP_ExamineInfoRequestMsg',234,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2652,892,894,'OP_QuickbarInitMsg',235,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2653,892,894,'OP_QuickbarUpdateMsg',236,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2654,892,894,'OP_MacroInitMsg',237,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2655,892,894,'OP_MacroUpdateMsg',238,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2656,892,894,'OP_QuestionnaireMsg',239,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2657,892,894,'OP_LevelChangedMsg',240,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2658,892,894,'OP_SpellGainedMsg',241,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2659,892,894,'OP_EncounterBrokenMsg',242,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2660,892,894,'OP_OnscreenMsgMsg',243,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2661,892,894,'OP_DisplayWarningMsg',244,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2662,892,894,'OP_ModifyGuildMsg',245,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2663,892,894,'OP_GuildEventMsg',246,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2664,892,894,'OP_GuildEventAddMsg',247,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2665,892,894,'OP_GuildEventActionMsg',248,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2666,892,894,'OP_GuildEventListMsg',249,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2667,892,894,'OP_RequestGuildEventDetailsMsg',250,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2668,892,894,'OP_GuildEventDetailsMsg',251,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2669,892,894,'OP_RequestGuildInfoMsg',252,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2670,892,894,'OP_GuildBankActionMsg',253,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2671,892,894,'OP_GuildBankActionResponseMsg',254,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2672,892,894,'OP_GuildBankItemDetailsRequestMsg',255,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2673,892,894,'OP_GuildBankItemDetailsResponseMs',256,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2674,892,894,'OP_GuildBankUpdateMsg',257,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2675,892,894,'OP_GuildBankEventListMsg',258,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2676,892,894,'OP_RequestGuildBankEventDetailsMs',259,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2677,892,894,'OP_RewardPackMsg',260,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2678,892,894,'OP_RenameGuildMsg',261,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2679,892,894,'OP_ZoneToFriendRequestMsg',263,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2680,892,894,'OP_ZoneToFriendReplyMsg',264,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2681,892,894,'OP_ChatCreateChannelMsg',265,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2682,892,894,'OP_ChatJoinChannelMsg',266,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2683,892,894,'OP_ChatWhoChannelMsg',267,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2684,892,894,'OP_ChatLeaveChannelMsg',268,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2685,892,894,'OP_ChatTellChannelMsg',269,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2686,892,894,'OP_ChatTellUserMsg',270,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2687,892,894,'OP_ChatToggleFriendMsg',271,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2688,892,894,'OP_ChatToggleIgnoreMsg',272,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2689,892,894,'OP_ChatSendFriendsMsg',273,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2690,892,894,'OP_ChatSendIgnoresMsg',274,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2691,892,894,'OP_QuestReward',300,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2692,892,894,'OP_ChatFiltersMsg',315,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2693,892,894,'OP_MailGetHeadersMsg',316,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2694,892,894,'OP_MailGetMessageMsg',317,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2695,892,894,'OP_MailSendMessageMsg',318,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2696,892,894,'OP_MailDeleteMessageMsg',319,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2697,892,894,'OP_MailGetHeadersReplyMsg',320,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2698,892,894,'OP_MailGetMessageReplyMsg',321,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2699,892,894,'OP_MailSendMessageReplyMsg',322,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2700,892,894,'OP_MailCommitSendMessageMsg',323,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2701,892,894,'OP_MailSendSystemMessageMsg',324,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2702,892,894,'OP_MailRemoveAttachFromMailMsg',325,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2703,892,894,'OP_WaypointRequestMsg',327,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2704,892,894,'OP_WaypointReplyMsg',328,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2705,892,894,'OP_WaypointSelectMsg',329,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2706,892,894,'OP_WaypointUpdateMsg',330,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2707,892,894,'OP_CharNameChangedMsg',331,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2708,892,894,'OP_ShowZoneTeleporterDestinations',332,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2709,892,894,'OP_SelectZoneTeleporterDestinatio',333,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2710,892,894,'OP_ReloadLocalizedTxtMsg',334,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2711,892,894,'OP_RequestGuildMembershipMsg',335,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2712,892,894,'OP_GuildMembershipResponseMsg',336,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2713,892,894,'OP_LeaveGuildNotifyMsg',337,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2714,892,894,'OP_JoinGuildNotifyMsg',338,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2715,892,894,'OP_AvatarUpdateMsg',340,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2716,892,894,'OP_BioUpdateMsg',341,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2717,892,894,'OP_InspectPlayerMsg',342,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2718,892,894,'OP_WSServerLockMsg',343,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2719,892,894,'OP_LSServerLockMsg',344,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2720,892,894,'OP_WSServerHideMsg',345,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2721,892,894,'OP_CsCategoryRequestMsg',346,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2722,892,894,'OP_CsCategoryResponseMsg',347,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2723,892,894,'OP_KnowledgeWindowSlotMappingMsg',348,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2724,892,894,'OP_LFGUpdateMsg',349,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2725,892,894,'OP_AFKUpdateMsg',350,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2726,892,894,'OP_AnonUpdateMsg',351,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2727,892,894,'OP_UpdateActivePublicZonesMsg',352,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2728,892,894,'OP_UnknownNpcMsg',353,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2729,892,894,'OP_PromoFlagsDetailsMsg',354,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2730,892,894,'OP_ConsignViewCreateMsg',355,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2731,892,894,'OP_ConsignViewGetPageMsg',356,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2732,892,894,'OP_ConsignViewReleaseMsg',357,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2733,892,894,'OP_ConsignRemoveItemsMsg',358,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2734,892,894,'OP_UpdateDebugRadiiMsg',359,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2735,892,894,'OP_SnoopMsg',360,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2736,892,894,'OP_ReportMsg',361,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2737,892,894,'OP_UpdateRaidMsg',362,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2738,892,894,'OP_ConsignViewSortMsg',363,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2739,892,894,'OP_TitleUpdateMsg',364,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2740,892,894,'OP_ClientFellMsg',365,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2741,892,894,'OP_ClientInDeathRegionMsg',366,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2742,892,894,'OP_CampClientMsg',367,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2743,892,894,'OP_CSToolAccessResponseMsg',368,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2744,892,894,'OP_TrackingUpdateMsg',369,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2745,892,894,'OP_BeginTrackingMsg',370,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2746,892,894,'OP_StopTrackingMsg',371,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2747,892,894,'OP_GetAvatarAccessRequestForCSToo',372,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2748,892,894,'OP_AdvancementRequestMsg',373,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2749,892,894,'OP_UpdateAvgFrameTimeMsg',374,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2750,892,894,'OP_MapFogDataInitMsg',375,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2751,892,894,'OP_MapFogDataUpdateMsg',376,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2752,892,894,'OP_CloseGroupInviteWindowMsg',377,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2753,892,894,'OP_UpdateGroupMemberDataMsg',378,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2754,892,894,'OP_WorldPingMsg',379,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2755,892,894,'OP_MoveLogUpdateMsg',380,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2756,892,894,'OP_OfferQuestMsg',381,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2757,892,894,'OP_WorldShutdownUpdateMsg',382,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2758,892,894,'OP_DisplayMailScreenMsg',383,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2759,892,894,'OP_ClientIdleBeginMsg',384,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2760,892,894,'OP_ClientIdleEndMsg',385,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2761,892,894,'OP_PurchaseConsignmentLoreCheckRe',386,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2762,892,894,'OP_NotifyApprenticeStoppedMentori',387,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2763,892,894,'OP_CorruptedClientMsg',388,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2764,892,894,'OP_WorldDataChangeMsg',389,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2765,892,894,'OP_MailEventNotificationMsg',390,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2766,892,894,'OP_RestartZoneMsg',391,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2767,892,894,'OP_FlightPathsMsg',392,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2768,892,894,'OP_CharacterLinkdeadMsg',393,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2769,892,894,'OP_CharTransferStartRequestMsg',394,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2770,892,894,'OP_CharTransferStartReplyMsg',395,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2771,892,894,'OP_CharTransferRequestMsg',396,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2772,892,894,'OP_CharTransferReplyMsg',397,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2773,892,894,'OP_CharTransferRollbackRequestMsg',398,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2774,892,894,'OP_CharTransferCommitRequestMsg',399,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2775,892,894,'OP_CharTransferRollbackReplyMsg',400,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2776,892,894,'OP_CharTransferCommitReplyMsg',401,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2777,892,894,'OP_GetCharacterSerializedRequestM',402,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2778,892,894,'OP_GetCharacterSerializedReplyMsg',403,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2779,892,894,'OP_CreateCharFromCBBRequestMsg',404,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2780,892,894,'OP_CreateCharFromCBBReplyMsg',405,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2781,892,894,'OP_HousingDataChangedMsg',406,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2782,892,894,'OP_HousingRestoreMsg',407,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2783,892,894,'OP_AuctionItem',408,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2784,892,894,'OP_AuctionItemReply',409,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2785,892,894,'OP_AuctionCoin',410,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2786,892,894,'OP_AuctionCoinReply',411,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2787,892,894,'OP_AuctionCharacter',412,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2788,892,894,'OP_AuctionCharacterReply',413,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2789,892,894,'OP_AuctionCommitMsg',414,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2790,892,894,'OP_AuctionAbortMsg',415,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2791,892,894,'OP_CharTransferValidateRequestMsg',416,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2792,892,894,'OP_CharTransferValidateReplyMsg',417,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2793,892,894,'OP_RaceRestrictionMsg',418,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2794,892,894,'OP_SetInstanceDisplayNameMsg',419,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2795,892,894,'OP_GetAuctionAssetIDMsg',420,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2796,892,894,'OP_GetAuctionAssetIDReplyMsg',421,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2797,892,894,'OP_ResendWorldChannelsMsg',422,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2798,892,894,'OP_DisplayExchangeScreenMsg',423,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2799,892,894,'OP_ArenaGameTypesMsg',424,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2800,892,894,'OP_AuditAuctionEventMsg',426,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2801,892,894,'OP_InviteRequestMsg',428,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2802,892,894,'OP_InviteResponseMsg',429,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2803,892,894,'OP_InviteTargetResponseMsg',430,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2804,892,894,'OP_InspectPlayerRequestMsg',431,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2805,892,894,'OP_DispatchMsg',432,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2806,892,894,'OP_DisplayEventMsg',433,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2807,892,894,'OP_PrePossessionMsg',434,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2808,892,894,'OP_PostPossessionMsg',435,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2809,892,894,'OP_AdventureList',460,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2810,892,894,'OP_CancelSpellCast',461,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2811,892,894,'OP_AttackAllowed',473,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2812,892,894,'OP_AttackNotAllowed',474,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2813,892,894,'OP_DressingRoom',480,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2814,892,894,'OP_SkillInfoRequest',484,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2815,892,894,'OP_SkillInfoResponse',485,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2816,892,894,'OP_EqUnknown',489,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2817,892,894,'OP_EqHearChatCmd',490,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2818,892,894,'OP_EqDisplayTextCmd',491,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2819,892,894,'OP_EqCreateGhostCmd',492,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2820,892,894,'OP_EqCreateWidgetCmd',493,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2821,892,894,'OP_EqCreateSignWidgetCmd',494,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2822,892,894,'OP_EqDestroyGhostCmd',495,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2823,892,894,'OP_EqUpdateGhostCmd',496,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2824,892,894,'OP_EqSetControlGhostCmd',497,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2825,892,894,'OP_EqSetPOVGhostCmd',498,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2826,892,894,'OP_EqHearCombatCmd',499,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2827,892,894,'OP_EqHearSpellCastCmd',500,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2828,892,894,'OP_EqHearSpellInterruptCmd',503,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2829,892,894,'OP_EqHearSpellFizzleCmd',504,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2830,892,894,'OP_EqHearConsiderCmd',505,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2831,892,894,'OP_EqUpdateSubClassesCmd',506,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2832,892,894,'OP_EqCreateListBoxCmd',507,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2833,892,894,'OP_EqSetDebugPathPointsCmd',508,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2834,892,894,'OP_EqCannedEmoteCmd',510,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2835,892,894,'OP_EqStateCmd',511,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2836,892,894,'OP_EqPlaySoundCmd',512,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2837,892,894,'OP_EqPlaySound3DCmd',513,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2838,892,894,'OP_EqPlayVoiceCmd',514,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2839,892,894,'OP_EqHearDrowningCmd',515,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2840,892,894,'OP_EqHearDeathCmd',516,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2841,892,894,'OP_EqGroupMemberRemovedCmd',517,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2842,892,894,'OP_EqHearChainEffectCmd',518,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2843,892,894,'OP_EqReceiveOfferCmd',519,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2844,892,894,'OP_EqInspectPCResultsCmd',520,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2845,892,894,'OP_EqDrawablePathGraphCmd',521,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2846,892,894,'OP_EqDialogOpenCmd',522,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2847,892,894,'OP_EqDialogCloseCmd',523,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2848,892,894,'OP_EqFactionUpdateCmd',524,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2849,892,894,'OP_EqCollectionUpdateCmd',525,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2850,892,894,'OP_EqCollectionFilterCmd',526,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2851,892,894,'OP_EqCollectionItemCmd',527,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2852,892,894,'OP_EqQuestJournalUpdateCmd',528,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2853,892,894,'OP_EqQuestJournalReplyCmd',530,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2854,892,894,'OP_EqQuestGroupCmd',531,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2855,892,894,'OP_EqUpdateMerchantCmd',532,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2856,892,894,'OP_EqUpdateStoreCmd',533,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2857,892,894,'OP_EqUpdatePlayerTradeCmd',534,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2858,892,894,'OP_EqHelpPathCmd',535,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2859,892,894,'OP_EqHelpPathClearCmd',536,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2860,892,894,'OP_EqUpdateBankCmd',537,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2861,892,894,'OP_EqExamineInfoCmd',538,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2862,892,894,'OP_EqCloseWindowCmd',539,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2863,892,894,'OP_EqUpdateLootCmd',540,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2864,892,894,'OP_EqJunctionListCmd',541,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2865,892,894,'OP_EqShowDeathWindowCmd',542,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2866,892,894,'OP_EqDisplaySpellFailCmd',543,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2867,892,894,'OP_EqSpellCastStartCmd',544,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2868,892,894,'OP_EqSpellCastEndCmd',545,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2869,892,894,'OP_EqResurrectedCmd',546,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2870,892,894,'OP_EqChoiceWinCmd',547,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2871,892,894,'OP_EqSetDefaultVerbCmd',548,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2872,892,894,'OP_EqInstructionWindowCmd',550,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2873,892,894,'OP_EqInstructionWindowCloseCmd',551,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2874,892,894,'OP_EqInstructionWindowGoalCmd',552,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2875,892,894,'OP_EqInstructionWindowTaskCmd',553,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2876,892,894,'OP_EqEnableGameEventCmd',554,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2877,892,894,'OP_EqShowWindowCmd',555,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2878,892,894,'OP_EqEnableWindowCmd',556,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2879,892,894,'OP_EqFlashWindowCmd',557,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2880,892,894,'OP_EqHearPlayFlavorCmd',558,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2881,892,894,'OP_EqUpdateSignWidgetCmd',560,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2882,892,894,'OP_EqDebugPVDCmd',561,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2883,892,894,'OP_EqShowBookCmd',562,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2884,892,894,'OP_EqQuestionnaireCmd',563,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2885,892,894,'OP_EqGetProbsCmd',564,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2886,892,894,'OP_EqHearHealCmd',565,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2887,892,894,'OP_EqChatChannelUpdateCmd',566,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2888,892,894,'OP_EqWhoChannelQueryReplyCmd',567,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2889,892,894,'OP_EqAvailWorldChannelsCmd',568,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2890,892,894,'OP_EqUpdateTargetCmd',569,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2891,892,894,'OP_EqConsignmentItemsCmd',571,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2892,892,894,'OP_EqStartBrokerCmd',573,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2893,892,894,'OP_EqMapExplorationCmd',574,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2894,892,894,'OP_EqStoreLogCmd',575,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2895,892,894,'OP_EqSpellMoveToRangeAndRetryCmd',576,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2896,892,894,'OP_EqUpdatePlayerMailCmd',577,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2897,892,894,'OP_EqArenaResultsCmd',578,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2898,892,894,'OP_EqGuildBankEventActionCmd',579,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2899,892,894,'OP_EqGuildBankExamineInfoCmd',580,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2900,892,894,'OP_EqHearSpellNoLandCmd',581,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2901,892,894,'OP_Lottery',583,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2902,892,894,'OP_GuildRecruitingMemberInfo',584,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2903,892,894,'OP_GuildRecruiting',585,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2904,892,894,'OP_GuildRecruitingDetails',586,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2905,892,894,'OP_GuildRecruitingImage',587,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2906,892,894,'OP_PointOfInterest',608,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2907,892,894,'OP_TraitsList',610,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2908,892,894,'OP_RecipeList',619,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2909,892,894,'OP_CharacterAchievements',655,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2910,892,894,'OP_MapRequest',999,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2911,892,894,'OP_AddClientToGroupMsg',1006,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2912,892,894,'OP_AddGroupToGroupMsg',1006,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2913,892,894,'OP_GuildKickMsg',1006,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2914,892,894,'OP_PurchaseConsignmentResponseMsg',1006,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2915,892,894,'OP_ProcessScriptMsg',1006,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2916,892,894,'OP_ProcessWorkspaceMsg',1006,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2917,892,894,'OP_QuickbarAddMsg',1006,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2918,892,894,'OP_SkillSlotMapping',1006,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2919,892,894,'OP_Unknown',10010,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2920,892,894,'OP_WSWeatherUpdateMsg',10012,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2921,898,898,'OP_LoginRequestMsg',0,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2922,898,898,'OP_LoginByNumRequestMsg',1,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2923,898,898,'OP_WSLoginRequestMsg',2,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2924,898,898,'OP_ESLoginRequestMsg',3,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2925,898,898,'OP_LoginReplyMsg',4,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2926,898,898,'OP_WSStatusReplyMsg',5,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2927,898,898,'OP_WorldStatusChangeMsg',6,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2928,898,898,'OP_AllWSDescRequestMsg',7,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2929,898,898,'OP_WorldListMsg',8,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2930,898,898,'OP_AllCharactersDescRequestMsg',9,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2931,898,898,'OP_AllCharactersDescReplyMsg',10,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2932,898,898,'OP_CreateCharacterRequestMsg',11,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2933,898,898,'OP_CreateCharacterReplyMsg',12,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2934,898,898,'OP_WSCreateCharacterRequestMsg',13,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2935,898,898,'OP_WSCreateCharacterReplyMsg',14,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2936,898,898,'OP_ReskinCharacterRequestMsg',15,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2937,898,898,'OP_DeleteCharacterRequestMsg',16,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2938,898,898,'OP_DeleteCharacterReplyMsg',17,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2939,898,898,'OP_PlayCharacterRequestMsg',18,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2940,898,898,'OP_PlayCharacterReplyMsg',19,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2941,898,898,'OP_ExpectClientAsCharacterReplyMs',22,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2942,898,898,'OP_ServerPlayCharacterRequestMsg',23,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2943,898,898,'OP_ServerPlayCharacterReplyMsg',24,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2944,898,898,'OP_ESInitMsg',25,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2945,898,898,'OP_ESReadyForClientsMsg',26,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2946,898,898,'OP_CreateZoneInstanceMsg',27,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2947,898,898,'OP_ZoneInstanceCreateReplyMsg',28,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2948,898,898,'OP_ZoneInstanceDestroyedMsg',29,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2949,898,898,'OP_ExpectClientAsCharacterRequest',30,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2950,898,898,'OP_ZoneInfoMsg',31,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2951,898,898,'OP_DoneLoadingZoneResourcesMsg',32,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2952,898,898,'OP_DoneSendingInitialEntitiesMsg',33,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2953,898,898,'OP_DoneLoadingEntityResourcesMsg',34,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2954,898,898,'OP_PredictionUpdateMsg',35,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2955,898,898,'OP_UpdatePositionMsg',37,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2956,898,898,'OP_SetRemoteCmdsMsg',39,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2957,898,898,'OP_RemoteCmdMsg',40,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2958,898,898,'OP_GameWorldTimeMsg',41,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2959,898,898,'OP_MOTDMsg',42,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2960,898,898,'OP_ZoneMOTDMsg',43,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2961,898,898,'OP_AvatarCreatedMsg',44,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2962,898,898,'OP_AvatarDestroyedMsg',45,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2963,898,898,'OP_RequestCampMsg',47,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2964,898,898,'OP_CampStartedMsg',48,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2965,898,898,'OP_CampAbortedMsg',49,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2966,898,898,'OP_WhoQueryRequestMsg',50,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2967,898,898,'OP_WhoQueryReplyMsg',51,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2968,898,898,'OP_MonitorReplyMsg',52,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2969,898,898,'OP_MonitorCharacterListMsg',53,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2970,898,898,'OP_MonitorCharacterListRequestMsg',54,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2971,898,898,'OP_ClientCmdMsg',55,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2972,898,898,'OP_DispatchESMsg',56,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2973,898,898,'OP_DispatchClientCmdMsg',57,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2974,898,898,'OP_UpdateTargetMsg',58,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2975,898,898,'OP_UpdateTargetLocMsg',59,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2976,898,898,'OP_UpdateCharacterSheetMsg',60,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2977,898,898,'OP_UpdateSpellBookMsg',61,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2978,898,898,'OP_UpdateInventoryMsg',63,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2979,898,898,'OP_UpdateRecipeBookMsg',65,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2980,898,898,'OP_RequestRecipeDetailsMsg',66,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2981,898,898,'OP_RecipeDetailsMsg',67,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2982,898,898,'OP_UpdateSkillBookMsg',68,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2983,898,898,'OP_UpdateSkillsMsg',69,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2984,898,898,'OP_UpdateOpportunityMsg',70,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2985,898,898,'OP_ChangeZoneMsg',72,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2986,898,898,'OP_ClientTeleportRequestMsg',73,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2987,898,898,'OP_TeleportWithinZoneMsg',74,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2988,898,898,'OP_TeleportWithinZoneNoReloadMsg',75,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2989,898,898,'OP_MigrateClientToZoneRequestMsg',76,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2990,898,898,'OP_MigrateClientToZoneReplyMsg',77,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2991,898,898,'OP_ReadyToZoneMsg',78,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2992,898,898,'OP_RemoveClientFromGroupMsg',79,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2993,898,898,'OP_RemoveGroupFromGroupMsg',80,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2994,898,898,'OP_MakeGroupLeaderMsg',81,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2995,898,898,'OP_GroupCreatedMsg',82,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2996,898,898,'OP_GroupDestroyedMsg',83,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2997,898,898,'OP_GroupMemberAddedMsg',84,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2998,898,898,'OP_GroupMemberRemovedMsg',85,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (2999,898,898,'OP_GroupRemovedFromGroupMsg',86,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3000,898,898,'OP_GroupLeaderChangedMsg',87,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3001,898,898,'OP_GroupResendOOZDataMsg',88,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3002,898,898,'OP_GroupSettingsChangedMsg',89,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3003,898,898,'OP_OutOfZoneMemberDataMsg',90,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3004,898,898,'OP_SendLatestRequestMsg',91,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3005,898,898,'OP_ClearDataMsg',92,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3006,898,898,'OP_SetSocialMsg',93,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3007,898,898,'OP_ESStatusMsg',94,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3008,898,898,'OP_ESZoneInstanceStatusMsg',95,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3009,898,898,'OP_ZonesStatusRequestMsg',96,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3010,898,898,'OP_ZonesStatusMsg',97,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3011,898,898,'OP_ESWeatherRequestMsg',98,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3012,898,898,'OP_ESWeatherRequestEndMsg',99,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3013,898,898,'OP_DialogSelectMsg',102,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3014,898,898,'OP_DialogCloseMsg',103,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3015,898,898,'OP_RemoveSpellEffectMsg',104,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3016,898,898,'OP_RemoveConcentrationMsg',105,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3017,898,898,'OP_QuestJournalOpenMsg',106,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3018,898,898,'OP_QuestJournalInspectMsg',107,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3019,898,898,'OP_QuestJournalSetVisibleMsg',108,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3020,898,898,'OP_QuestJournalWaypointMsg',109,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3021,898,898,'OP_CreateGuildRequestMsg',110,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3022,898,898,'OP_CreateGuildReplyMsg',111,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3023,898,898,'OP_GuildsayMsg',112,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3024,898,898,'OP_GuildUpdateMsg',114,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3025,898,898,'OP_DeleteGuildMsg',116,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3026,898,898,'OP_FellowshipExpMsg',117,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3027,898,898,'OP_ConsignmentCloseStoreMsg',118,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3028,898,898,'OP_ConsignItemRequestMsg',119,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3029,898,898,'OP_ConsignItemResponseMsg',120,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3030,898,898,'OP_PurchaseConsignmentRequestMsg',121,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3031,898,898,'OP_HouseDeletedRemotelyMsg',122,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3032,898,898,'OP_UpdateHouseDataMsg',123,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3033,898,898,'OP_UpdateHouseAccessDataMsg',124,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3034,898,898,'OP_PlayerHouseBaseScreenMsg',125,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3035,898,898,'OP_PlayerHousePurchaseScreenMsg',126,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3036,898,898,'OP_PlayerHouseAccessUpdateMsg',127,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3037,898,898,'OP_PlayerHouseDisplayStatusMsg',128,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3038,898,898,'OP_PlayerHouseCloseUIMsg',129,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3039,898,898,'OP_BuyPlayerHouseMsg',130,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3040,898,898,'OP_BuyPlayerHouseTintMsg',131,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3041,898,898,'OP_CollectAllHouseItemsMsg',132,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3042,898,898,'OP_RelinquishHouseMsg',133,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3043,898,898,'OP_EnterHouseMsg',134,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3044,898,898,'OP_ExitHouseMsg',135,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3045,898,898,'OP_HouseDefaultAccessSetMsg',136,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3046,898,898,'OP_HouseAccessSetMsg',137,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3047,898,898,'OP_HouseAccessRemoveMsg',138,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3048,898,898,'OP_PayHouseUpkeepMsg',139,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3049,898,898,'OP_MoveableObjectPlacementCriteri',140,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3050,898,898,'OP_EnterMoveObjectModeMsg',141,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3051,898,898,'OP_PositionMoveableObject',142,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3052,898,898,'OP_CancelMoveObjectModeMsg',143,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3053,898,898,'OP_ShaderCustomizationMsg',144,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3054,898,898,'OP_ReplaceableSubMeshesMsg',145,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3055,898,898,'OP_HouseCustomizationScreenMsg',146,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3056,898,898,'OP_CustomizationPurchaseRequestMs',147,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3057,898,898,'OP_CustomizationSetRequestMsg',148,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3058,898,898,'OP_CustomizationReplyMsg',149,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3059,898,898,'OP_TintWidgetsMsg',150,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3060,898,898,'OP_ExamineConsignmentRequestMsg',151,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3061,898,898,'OP_ExamineConsignmentResponseMsg',152,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3062,898,898,'OP_UISettingsResponseMsg',153,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3063,898,898,'OP_UIResetMsg',154,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3064,898,898,'OP_KeymapLoadMsg',155,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3065,898,898,'OP_KeymapNoneMsg',156,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3066,898,898,'OP_KeymapDataMsg',157,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3067,898,898,'OP_KeymapSaveMsg',158,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3068,898,898,'OP_DispatchSpellCmdMsg',159,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3069,898,898,'OP_EntityVerbsRequestMsg',161,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3070,898,898,'OP_EntityVerbsReplyMsg',162,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3071,898,898,'OP_EntityVerbsVerbMsg',163,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3072,898,898,'OP_ChatRelationshipUpdateMsg',165,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3073,898,898,'OP_LootItemsRequestMsg',166,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3074,898,898,'OP_StoppedLootingMsg',167,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3075,898,898,'OP_SitMsg',168,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3076,898,898,'OP_StandMsg',169,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3077,898,898,'OP_SatMsg',170,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3078,898,898,'OP_StoodMsg',171,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3079,898,898,'OP_ClearForTakeOffMsg',172,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3080,898,898,'OP_ReadyForTakeOffMsg',173,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3081,898,898,'OP_ShowIllusionsMsg',174,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3082,898,898,'OP_HideIllusionsMsg',175,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3083,898,898,'OP_ExamineItemRequestMsg',176,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3084,898,898,'OP_ReadBookPageMsg',177,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3085,898,898,'OP_DefaultGroupOptionsRequestMsg',178,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3086,898,898,'OP_DefaultGroupOptionsMsg',179,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3087,898,898,'OP_GroupOptionsMsg',180,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3088,898,898,'OP_DisplayGroupOptionsScreenMsg',181,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3089,898,898,'OP_DisplayInnVisitScreenMsg',182,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3090,898,898,'OP_DumpSchedulerMsg',183,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3091,898,898,'OP_LSRequestPlayerDescMsg',184,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3092,898,898,'OP_LSCheckAcctLockMsg',185,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3093,898,898,'OP_WSAcctLockStatusMsg',186,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3094,898,898,'OP_RequestHelpRepathMsg',187,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3095,898,898,'OP_RequestTargetLocMsg',188,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3096,898,898,'OP_UpdateMotdMsg',189,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3097,898,898,'OP_PerformPlayerKnockbackMsg',190,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3098,898,898,'OP_PerformCameraShakeMsg',191,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3099,898,898,'OP_PopulateSkillMapsMsg',194,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3100,898,898,'OP_CancelledFeignMsg',196,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3101,898,898,'OP_SignalMsg',197,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3102,898,898,'OP_ShowCreateFromRecipeUIMsg',198,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3103,898,898,'OP_CancelCreateFromRecipeMsg',199,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3104,898,898,'OP_BeginItemCreationMsg',200,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3105,898,898,'OP_StopItemCreationMsg',201,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3106,898,898,'OP_ShowItemCreationProcessUIMsg',202,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3107,898,898,'OP_UpdateItemCreationProcessUIMsg',203,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3108,898,898,'OP_DisplayTSEventReactionMsg',204,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3109,898,898,'OP_ShowRecipeBookMsg',205,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3110,898,898,'OP_KnowledgebaseRequestMsg',206,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3111,898,898,'OP_KnowledgebaseResponseMsg',207,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3112,898,898,'OP_CSTicketHeaderRequestMsg',208,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3113,898,898,'OP_CSTicketInfoMsg',209,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3114,898,898,'OP_CSTicketCommentRequestMsg',210,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3115,898,898,'OP_CSTicketCommentResponseMsg',211,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3116,898,898,'OP_CSTicketCreateMsg',212,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3117,898,898,'OP_CSTicketAddCommentMsg',213,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3118,898,898,'OP_CSTicketDeleteMsg',214,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3119,898,898,'OP_CSTicketChangeNotificationMsg',215,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3120,898,898,'OP_WorldDataUpdateMsg',216,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3121,898,898,'OP_KnownLanguagesMsg',217,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3122,898,898,'OP_LsRequestClientCrashLogMsg',218,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3123,898,898,'OP_LsClientBaselogReplyMsg',219,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3124,898,898,'OP_LsClientCrashlogReplyMsg',220,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3125,898,898,'OP_LsClientAlertlogReplyMsg',221,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3126,898,898,'OP_LsClientVerifylogReplyMsg',222,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3127,898,898,'OP_ClientTeleportToLocationMsg',223,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3128,898,898,'OP_UpdateClientPredFlagsMsg',224,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3129,898,898,'OP_ChangeServerControlFlagMsg',225,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3130,898,898,'OP_CSToolsRequestMsg',226,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3131,898,898,'OP_CSToolsResponseMsg',227,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3132,898,898,'OP_AddSocialStructureStandingMsg',228,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3133,898,898,'OP_CreateBoatTransportsMsg',229,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3134,898,898,'OP_PositionBoatTransportMsg',230,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3135,898,898,'OP_MigrateBoatTransportMsg',231,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3136,898,898,'OP_MigrateBoatTransportReplyMsg',232,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3137,898,898,'OP_DisplayDebugNLLPointsMsg',233,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3138,898,898,'OP_ExamineInfoRequestMsg',234,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3139,898,898,'OP_QuickbarInitMsg',235,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3140,898,898,'OP_QuickbarUpdateMsg',236,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3141,898,898,'OP_MacroInitMsg',237,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3142,898,898,'OP_MacroUpdateMsg',238,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3143,898,898,'OP_QuestionnaireMsg',239,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3144,898,898,'OP_LevelChangedMsg',240,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3145,898,898,'OP_SpellGainedMsg',241,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3146,898,898,'OP_EncounterBrokenMsg',242,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3147,898,898,'OP_OnscreenMsgMsg',243,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3148,898,898,'OP_DisplayWarningMsg',244,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3149,898,898,'OP_ModifyGuildMsg',245,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3150,898,898,'OP_GuildEventMsg',246,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3151,898,898,'OP_GuildEventAddMsg',247,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3152,898,898,'OP_GuildEventActionMsg',248,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3153,898,898,'OP_GuildEventListMsg',249,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3154,898,898,'OP_RequestGuildEventDetailsMsg',250,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3155,898,898,'OP_GuildEventDetailsMsg',251,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3156,898,898,'OP_RequestGuildInfoMsg',252,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3157,898,898,'OP_GuildBankActionMsg',253,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3158,898,898,'OP_GuildBankActionResponseMsg',254,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3159,898,898,'OP_GuildBankItemDetailsRequestMsg',255,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3160,898,898,'OP_GuildBankItemDetailsResponseMs',256,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3161,898,898,'OP_GuildBankUpdateMsg',257,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3162,898,898,'OP_GuildBankEventListMsg',258,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3163,898,898,'OP_RequestGuildBankEventDetailsMs',259,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3164,898,898,'OP_RewardPackMsg',260,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3165,898,898,'OP_RenameGuildMsg',261,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3166,898,898,'OP_ZoneToFriendRequestMsg',263,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3167,898,898,'OP_ZoneToFriendReplyMsg',264,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3168,898,898,'OP_ChatCreateChannelMsg',265,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3169,898,898,'OP_ChatJoinChannelMsg',266,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3170,898,898,'OP_ChatWhoChannelMsg',267,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3171,898,898,'OP_ChatLeaveChannelMsg',268,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3172,898,898,'OP_ChatTellChannelMsg',269,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3173,898,898,'OP_ChatTellUserMsg',270,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3174,898,898,'OP_ChatToggleFriendMsg',271,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3175,898,898,'OP_ChatToggleIgnoreMsg',272,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3176,898,898,'OP_ChatSendFriendsMsg',273,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3177,898,898,'OP_ChatSendIgnoresMsg',274,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3178,898,898,'OP_QuestReward',300,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3179,898,898,'OP_ChatFiltersMsg',315,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3180,898,898,'OP_MailGetHeadersMsg',316,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3181,898,898,'OP_MailGetMessageMsg',317,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3182,898,898,'OP_MailSendMessageMsg',318,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3183,898,898,'OP_MailDeleteMessageMsg',319,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3184,898,898,'OP_MailGetHeadersReplyMsg',320,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3185,898,898,'OP_MailGetMessageReplyMsg',321,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3186,898,898,'OP_MailSendMessageReplyMsg',322,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3187,898,898,'OP_MailCommitSendMessageMsg',323,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3188,898,898,'OP_MailSendSystemMessageMsg',324,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3189,898,898,'OP_MailRemoveAttachFromMailMsg',325,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3190,898,898,'OP_WaypointRequestMsg',327,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3191,898,898,'OP_WaypointReplyMsg',328,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3192,898,898,'OP_WaypointSelectMsg',329,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3193,898,898,'OP_WaypointUpdateMsg',330,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3194,898,898,'OP_CharNameChangedMsg',331,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3195,898,898,'OP_ShowZoneTeleporterDestinations',332,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3196,898,898,'OP_SelectZoneTeleporterDestinatio',333,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3197,898,898,'OP_ReloadLocalizedTxtMsg',334,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3198,898,898,'OP_RequestGuildMembershipMsg',335,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3199,898,898,'OP_GuildMembershipResponseMsg',336,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3200,898,898,'OP_LeaveGuildNotifyMsg',337,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3201,898,898,'OP_JoinGuildNotifyMsg',338,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3202,898,898,'OP_AvatarUpdateMsg',340,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3203,898,898,'OP_BioUpdateMsg',341,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3204,898,898,'OP_InspectPlayerMsg',342,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3205,898,898,'OP_WSServerLockMsg',343,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3206,898,898,'OP_LSServerLockMsg',344,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3207,898,898,'OP_WSServerHideMsg',345,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3208,898,898,'OP_CsCategoryRequestMsg',346,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3209,898,898,'OP_CsCategoryResponseMsg',347,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3210,898,898,'OP_KnowledgeWindowSlotMappingMsg',348,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3211,898,898,'OP_LFGUpdateMsg',349,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3212,898,898,'OP_AFKUpdateMsg',350,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3213,898,898,'OP_AnonUpdateMsg',351,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3214,898,898,'OP_UpdateActivePublicZonesMsg',352,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3215,898,898,'OP_UnknownNpcMsg',353,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3216,898,898,'OP_PromoFlagsDetailsMsg',354,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3217,898,898,'OP_ConsignViewCreateMsg',355,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3218,898,898,'OP_ConsignViewGetPageMsg',356,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3219,898,898,'OP_ConsignViewReleaseMsg',357,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3220,898,898,'OP_ConsignRemoveItemsMsg',358,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3221,898,898,'OP_UpdateDebugRadiiMsg',359,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3222,898,898,'OP_SnoopMsg',360,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3223,898,898,'OP_ReportMsg',361,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3224,898,898,'OP_UpdateRaidMsg',362,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3225,898,898,'OP_ConsignViewSortMsg',363,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3226,898,898,'OP_TitleUpdateMsg',364,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3227,898,898,'OP_ClientFellMsg',365,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3228,898,898,'OP_ClientInDeathRegionMsg',366,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3229,898,898,'OP_CampClientMsg',367,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3230,898,898,'OP_CSToolAccessResponseMsg',368,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3231,898,898,'OP_TrackingUpdateMsg',369,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3232,898,898,'OP_BeginTrackingMsg',370,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3233,898,898,'OP_StopTrackingMsg',371,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3234,898,898,'OP_GetAvatarAccessRequestForCSToo',372,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3235,898,898,'OP_AdvancementRequestMsg',373,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3236,898,898,'OP_UpdateAvgFrameTimeMsg',374,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3237,898,898,'OP_MapFogDataInitMsg',375,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3238,898,898,'OP_MapFogDataUpdateMsg',376,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3239,898,898,'OP_CloseGroupInviteWindowMsg',377,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3240,898,898,'OP_UpdateGroupMemberDataMsg',378,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3241,898,898,'OP_WorldPingMsg',379,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3242,898,898,'OP_MoveLogUpdateMsg',380,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3243,898,898,'OP_OfferQuestMsg',381,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3244,898,898,'OP_WorldShutdownUpdateMsg',382,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3245,898,898,'OP_DisplayMailScreenMsg',383,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3246,898,898,'OP_ClientIdleBeginMsg',384,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3247,898,898,'OP_ClientIdleEndMsg',385,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3248,898,898,'OP_PurchaseConsignmentLoreCheckRe',386,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3249,898,898,'OP_NotifyApprenticeStoppedMentori',387,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3250,898,898,'OP_CorruptedClientMsg',388,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3251,898,898,'OP_WorldDataChangeMsg',389,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3252,898,898,'OP_MailEventNotificationMsg',390,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3253,898,898,'OP_RestartZoneMsg',391,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3254,898,898,'OP_FlightPathsMsg',392,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3255,898,898,'OP_CharacterLinkdeadMsg',393,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3256,898,898,'OP_CharTransferStartRequestMsg',394,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3257,898,898,'OP_CharTransferStartReplyMsg',395,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3258,898,898,'OP_CharTransferRequestMsg',396,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3259,898,898,'OP_CharTransferReplyMsg',397,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3260,898,898,'OP_CharTransferRollbackRequestMsg',398,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3261,898,898,'OP_CharTransferCommitRequestMsg',399,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3262,898,898,'OP_CharTransferRollbackReplyMsg',400,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3263,898,898,'OP_CharTransferCommitReplyMsg',401,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3264,898,898,'OP_GetCharacterSerializedRequestM',402,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3265,898,898,'OP_GetCharacterSerializedReplyMsg',403,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3266,898,898,'OP_CreateCharFromCBBRequestMsg',404,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3267,898,898,'OP_CreateCharFromCBBReplyMsg',405,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3268,898,898,'OP_HousingDataChangedMsg',406,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3269,898,898,'OP_HousingRestoreMsg',407,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3270,898,898,'OP_AuctionItem',408,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3271,898,898,'OP_AuctionItemReply',409,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3272,898,898,'OP_AuctionCoin',410,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3273,898,898,'OP_AuctionCoinReply',411,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3274,898,898,'OP_AuctionCharacter',412,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3275,898,898,'OP_AuctionCharacterReply',413,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3276,898,898,'OP_AuctionCommitMsg',414,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3277,898,898,'OP_AuctionAbortMsg',415,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3278,898,898,'OP_CharTransferValidateRequestMsg',416,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3279,898,898,'OP_CharTransferValidateReplyMsg',417,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3280,898,898,'OP_RaceRestrictionMsg',418,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3281,898,898,'OP_SetInstanceDisplayNameMsg',419,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3282,898,898,'OP_GetAuctionAssetIDMsg',420,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3283,898,898,'OP_GetAuctionAssetIDReplyMsg',421,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3284,898,898,'OP_ResendWorldChannelsMsg',422,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3285,898,898,'OP_DisplayExchangeScreenMsg',423,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3286,898,898,'OP_ArenaGameTypesMsg',424,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3287,898,898,'OP_AuditAuctionEventMsg',426,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3288,898,898,'OP_InviteRequestMsg',428,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3289,898,898,'OP_InviteResponseMsg',429,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3290,898,898,'OP_InviteTargetResponseMsg',430,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3291,898,898,'OP_InspectPlayerRequestMsg',431,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3292,898,898,'OP_DispatchMsg',432,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3293,898,898,'OP_DisplayEventMsg',433,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3294,898,898,'OP_PrePossessionMsg',434,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3295,898,898,'OP_PostPossessionMsg',435,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3296,898,898,'OP_AdventureList',460,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3297,898,898,'OP_CancelSpellCast',461,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3298,898,898,'OP_AttackAllowed',473,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3299,898,898,'OP_AttackNotAllowed',474,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3300,898,898,'OP_DressingRoom',480,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3301,898,898,'OP_SkillInfoRequest',484,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3302,898,898,'OP_SkillInfoResponse',485,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3303,898,898,'OP_EqUnknown',490,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3304,898,898,'OP_EqHearChatCmd',491,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3305,898,898,'OP_EqDisplayTextCmd',492,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3306,898,898,'OP_EqCreateGhostCmd',493,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3307,898,898,'OP_EqCreateWidgetCmd',494,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3308,898,898,'OP_EqCreateSignWidgetCmd',495,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3309,898,898,'OP_EqDestroyGhostCmd',496,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3310,898,898,'OP_EqUpdateGhostCmd',497,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3311,898,898,'OP_EqSetControlGhostCmd',498,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3312,898,898,'OP_EqSetPOVGhostCmd',499,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3313,898,898,'OP_EqHearCombatCmd',500,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3314,898,898,'OP_EqHearSpellCastCmd',501,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3315,898,898,'OP_EqHearSpellInterruptCmd',504,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3316,898,898,'OP_EqHearSpellFizzleCmd',505,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3317,898,898,'OP_EqHearConsiderCmd',506,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3318,898,898,'OP_EqUpdateSubClassesCmd',507,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3319,898,898,'OP_EqCreateListBoxCmd',508,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3320,898,898,'OP_EqSetDebugPathPointsCmd',509,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3321,898,898,'OP_EqCannedEmoteCmd',511,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3322,898,898,'OP_EqStateCmd',512,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3323,898,898,'OP_EqPlaySoundCmd',513,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3324,898,898,'OP_EqPlaySound3DCmd',514,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3325,898,898,'OP_EqPlayVoiceCmd',515,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3326,898,898,'OP_EqHearDrowningCmd',516,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3327,898,898,'OP_EqHearDeathCmd',517,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3328,898,898,'OP_EqGroupMemberRemovedCmd',518,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3329,898,898,'OP_EqHearChainEffectCmd',519,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3330,898,898,'OP_EqReceiveOfferCmd',520,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3331,898,898,'OP_EqInspectPCResultsCmd',521,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3332,898,898,'OP_EqDrawablePathGraphCmd',522,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3333,898,898,'OP_EqDialogOpenCmd',523,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3334,898,898,'OP_EqDialogCloseCmd',524,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3335,898,898,'OP_EqFactionUpdateCmd',525,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3336,898,898,'OP_EqCollectionUpdateCmd',526,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3337,898,898,'OP_EqCollectionFilterCmd',527,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3338,898,898,'OP_EqCollectionItemCmd',528,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3339,898,898,'OP_EqQuestJournalUpdateCmd',529,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3340,898,898,'OP_EqQuestJournalReplyCmd',531,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3341,898,898,'OP_EqQuestGroupCmd',532,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3342,898,898,'OP_EqUpdateMerchantCmd',533,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3343,898,898,'OP_EqUpdateStoreCmd',534,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3344,898,898,'OP_EqUpdatePlayerTradeCmd',535,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3345,898,898,'OP_EqHelpPathCmd',536,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3346,898,898,'OP_EqHelpPathClearCmd',537,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3347,898,898,'OP_EqUpdateBankCmd',538,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3348,898,898,'OP_EqExamineInfoCmd',539,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3349,898,898,'OP_EqCloseWindowCmd',540,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3350,898,898,'OP_EqUpdateLootCmd',541,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3351,898,898,'OP_EqJunctionListCmd',542,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3352,898,898,'OP_EqShowDeathWindowCmd',543,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3353,898,898,'OP_EqDisplaySpellFailCmd',544,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3354,898,898,'OP_EqSpellCastStartCmd',545,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3355,898,898,'OP_EqSpellCastEndCmd',546,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3356,898,898,'OP_EqResurrectedCmd',547,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3357,898,898,'OP_EqChoiceWinCmd',548,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3358,898,898,'OP_EqSetDefaultVerbCmd',549,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3359,898,898,'OP_EqInstructionWindowCmd',551,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3360,898,898,'OP_EqInstructionWindowCloseCmd',552,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3361,898,898,'OP_EqInstructionWindowGoalCmd',553,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3362,898,898,'OP_EqInstructionWindowTaskCmd',554,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3363,898,898,'OP_EqEnableGameEventCmd',555,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3364,898,898,'OP_EqShowWindowCmd',556,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3365,898,898,'OP_EqEnableWindowCmd',557,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3366,898,898,'OP_EqFlashWindowCmd',558,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3367,898,898,'OP_EqHearPlayFlavorCmd',559,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3368,898,898,'OP_EqUpdateSignWidgetCmd',561,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3369,898,898,'OP_EqDebugPVDCmd',562,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3370,898,898,'OP_EqShowBookCmd',563,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3371,898,898,'OP_EqQuestionnaireCmd',564,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3372,898,898,'OP_EqGetProbsCmd',565,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3373,898,898,'OP_EqHearHealCmd',566,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3374,898,898,'OP_EqChatChannelUpdateCmd',567,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3375,898,898,'OP_EqWhoChannelQueryReplyCmd',568,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3376,898,898,'OP_EqAvailWorldChannelsCmd',569,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3377,898,898,'OP_EqUpdateTargetCmd',570,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3378,898,898,'OP_EqConsignmentItemsCmd',572,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3379,898,898,'OP_EqStartBrokerCmd',574,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3380,898,898,'OP_EqMapExplorationCmd',575,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3381,898,898,'OP_EqStoreLogCmd',576,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3382,898,898,'OP_EqSpellMoveToRangeAndRetryCmd',577,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3383,898,898,'OP_EqUpdatePlayerMailCmd',578,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3384,898,898,'OP_EqArenaResultsCmd',579,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3385,898,898,'OP_EqGuildBankEventActionCmd',580,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3386,898,898,'OP_EqGuildBankExamineInfoCmd',581,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3387,898,898,'OP_EqHearSpellNoLandCmd',582,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3388,898,898,'OP_Lottery',584,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3389,898,898,'OP_GuildRecruitingMemberInfo',585,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3390,898,898,'OP_GuildRecruiting',586,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3391,898,898,'OP_GuildRecruitingDetails',587,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3392,898,898,'OP_GuildRecruitingImage',588,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3393,898,898,'OP_PointOfInterest',609,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3394,898,898,'OP_TraitsList',611,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3395,898,898,'OP_RecipeList',620,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3396,898,898,'OP_CharacterAchievements',655,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3397,898,898,'OP_MapRequest',999,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3398,898,898,'OP_AddClientToGroupMsg',1007,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3399,898,898,'OP_AddGroupToGroupMsg',1007,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3400,898,898,'OP_GuildKickMsg',1007,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3401,898,898,'OP_ProcessScriptMsg',1007,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3402,898,898,'OP_ProcessWorkspaceMsg',1007,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3403,898,898,'OP_PurchaseConsignmentResponseMsg',1007,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3404,898,898,'OP_QuickbarAddMsg',1007,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3405,898,898,'OP_SkillSlotMapping',1007,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3406,898,898,'OP_Unknown',10011,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3407,898,898,'OP_WSWeatherUpdateMsg',10012,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3408,908,927,'OP_LoginRequestMsg',0,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3409,908,927,'OP_LoginByNumRequestMsg',1,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3410,908,927,'OP_WSLoginRequestMsg',2,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3411,908,927,'OP_ESLoginRequestMsg',3,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3412,908,927,'OP_LoginReplyMsg',4,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3413,908,927,'OP_WSStatusReplyMsg',5,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3414,908,927,'OP_WorldStatusChangeMsg',6,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3415,908,927,'OP_AllWSDescRequestMsg',7,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3416,908,927,'OP_WorldListMsg',8,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3417,908,927,'OP_AllCharactersDescRequestMsg',9,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3418,908,927,'OP_AllCharactersDescReplyMsg',10,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3419,908,927,'OP_CreateCharacterRequestMsg',11,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3420,908,927,'OP_CreateCharacterReplyMsg',12,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3421,908,927,'OP_WSCreateCharacterRequestMsg',13,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3422,908,927,'OP_WSCreateCharacterReplyMsg',14,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3423,908,927,'OP_ReskinCharacterRequestMsg',15,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3424,908,927,'OP_DeleteCharacterRequestMsg',16,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3425,908,927,'OP_DeleteCharacterReplyMsg',17,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3426,908,927,'OP_PlayCharacterRequestMsg',18,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3427,908,927,'OP_PlayCharacterReplyMsg',19,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3428,908,927,'OP_ExpectClientAsCharacterReplyMs',22,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3429,908,927,'OP_ServerPlayCharacterRequestMsg',23,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3430,908,927,'OP_ServerPlayCharacterReplyMsg',24,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3431,908,927,'OP_ESInitMsg',25,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3432,908,927,'OP_ESReadyForClientsMsg',26,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3433,908,927,'OP_CreateZoneInstanceMsg',27,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3434,908,927,'OP_ZoneInstanceCreateReplyMsg',28,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3435,908,927,'OP_ZoneInstanceDestroyedMsg',29,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3436,908,927,'OP_ExpectClientAsCharacterRequest',30,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3437,908,927,'OP_ZoneInfoMsg',31,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3438,908,927,'OP_DoneLoadingZoneResourcesMsg',32,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3439,908,927,'OP_DoneSendingInitialEntitiesMsg',33,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3440,908,927,'OP_DoneLoadingEntityResourcesMsg',34,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3441,908,927,'OP_PredictionUpdateMsg',35,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3442,908,927,'OP_UpdatePositionMsg',37,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3443,908,927,'OP_SetRemoteCmdsMsg',39,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3444,908,927,'OP_RemoteCmdMsg',40,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3445,908,927,'OP_GameWorldTimeMsg',41,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3446,908,927,'OP_MOTDMsg',42,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3447,908,927,'OP_ZoneMOTDMsg',43,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3448,908,927,'OP_AvatarCreatedMsg',44,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3449,908,927,'OP_AvatarDestroyedMsg',45,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3450,908,927,'OP_RequestCampMsg',47,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3451,908,927,'OP_CampStartedMsg',48,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3452,908,927,'OP_CampAbortedMsg',49,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3453,908,927,'OP_WhoQueryRequestMsg',50,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3454,908,927,'OP_WhoQueryReplyMsg',51,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3455,908,927,'OP_MonitorReplyMsg',52,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3456,908,927,'OP_MonitorCharacterListMsg',53,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3457,908,927,'OP_MonitorCharacterListRequestMsg',54,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3458,908,927,'OP_ClientCmdMsg',55,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3459,908,927,'OP_DispatchESMsg',56,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3460,908,927,'OP_DispatchClientCmdMsg',57,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3461,908,927,'OP_UpdateTargetMsg',58,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3462,908,927,'OP_UpdateTargetLocMsg',59,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3463,908,927,'OP_UpdateCharacterSheetMsg',60,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3464,908,927,'OP_UpdateSpellBookMsg',61,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3465,908,927,'OP_UpdateInventoryMsg',63,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3466,908,927,'OP_UpdateRecipeBookMsg',65,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3467,908,927,'OP_RequestRecipeDetailsMsg',66,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3468,908,927,'OP_RecipeDetailsMsg',67,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3469,908,927,'OP_UpdateSkillBookMsg',68,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3470,908,927,'OP_UpdateSkillsMsg',69,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3471,908,927,'OP_UpdateOpportunityMsg',70,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3472,908,927,'OP_ChangeZoneMsg',72,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3473,908,927,'OP_ClientTeleportRequestMsg',73,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3474,908,927,'OP_TeleportWithinZoneMsg',74,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3475,908,927,'OP_TeleportWithinZoneNoReloadMsg',75,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3476,908,927,'OP_MigrateClientToZoneRequestMsg',76,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3477,908,927,'OP_MigrateClientToZoneReplyMsg',77,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3478,908,927,'OP_ReadyToZoneMsg',78,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3479,908,927,'OP_RemoveClientFromGroupMsg',79,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3480,908,927,'OP_RemoveGroupFromGroupMsg',80,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3481,908,927,'OP_MakeGroupLeaderMsg',81,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3482,908,927,'OP_GroupCreatedMsg',82,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3483,908,927,'OP_GroupDestroyedMsg',83,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3484,908,927,'OP_GroupMemberAddedMsg',84,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3485,908,927,'OP_GroupMemberRemovedMsg',85,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3486,908,927,'OP_GroupRemovedFromGroupMsg',86,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3487,908,927,'OP_GroupLeaderChangedMsg',87,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3488,908,927,'OP_GroupResendOOZDataMsg',88,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3489,908,927,'OP_GroupSettingsChangedMsg',89,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3490,908,927,'OP_OutOfZoneMemberDataMsg',90,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3491,908,927,'OP_SendLatestRequestMsg',91,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3492,908,927,'OP_ClearDataMsg',92,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3493,908,927,'OP_SetSocialMsg',93,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3494,908,927,'OP_ESStatusMsg',94,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3495,908,927,'OP_ESZoneInstanceStatusMsg',95,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3496,908,927,'OP_ZonesStatusRequestMsg',96,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3497,908,927,'OP_ZonesStatusMsg',97,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3498,908,927,'OP_ESWeatherRequestMsg',98,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3499,908,927,'OP_ESWeatherRequestEndMsg',99,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3500,908,927,'OP_DialogSelectMsg',102,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3501,908,927,'OP_DialogCloseMsg',103,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3502,908,927,'OP_RemoveSpellEffectMsg',104,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3503,908,927,'OP_RemoveConcentrationMsg',105,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3504,908,927,'OP_QuestJournalOpenMsg',106,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3505,908,927,'OP_QuestJournalInspectMsg',107,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3506,908,927,'OP_QuestJournalSetVisibleMsg',108,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3507,908,927,'OP_QuestJournalWaypointMsg',109,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3508,908,927,'OP_CreateGuildRequestMsg',110,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3509,908,927,'OP_CreateGuildReplyMsg',111,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3510,908,927,'OP_GuildsayMsg',112,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3511,908,927,'OP_GuildUpdateMsg',115,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3512,908,927,'OP_DeleteGuildMsg',116,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3513,908,927,'OP_FellowshipExpMsg',117,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3514,908,927,'OP_ConsignmentCloseStoreMsg',118,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3515,908,927,'OP_ConsignItemRequestMsg',119,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3516,908,927,'OP_ConsignItemResponseMsg',120,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3517,908,927,'OP_PurchaseConsignmentRequestMsg',121,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3518,908,927,'OP_HouseDeletedRemotelyMsg',122,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3519,908,927,'OP_UpdateHouseDataMsg',123,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3520,908,927,'OP_UpdateHouseAccessDataMsg',124,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3521,908,927,'OP_PlayerHouseBaseScreenMsg',125,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3522,908,927,'OP_PlayerHousePurchaseScreenMsg',126,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3523,908,927,'OP_PlayerHouseAccessUpdateMsg',127,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3524,908,927,'OP_PlayerHouseDisplayStatusMsg',128,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3525,908,927,'OP_PlayerHouseCloseUIMsg',129,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3526,908,927,'OP_BuyPlayerHouseMsg',130,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3527,908,927,'OP_BuyPlayerHouseTintMsg',131,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3528,908,927,'OP_CollectAllHouseItemsMsg',132,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3529,908,927,'OP_RelinquishHouseMsg',133,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3530,908,927,'OP_EnterHouseMsg',134,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3531,908,927,'OP_ExitHouseMsg',135,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3532,908,927,'OP_HouseDefaultAccessSetMsg',136,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3533,908,927,'OP_HouseAccessSetMsg',137,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3534,908,927,'OP_HouseAccessRemoveMsg',138,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3535,908,927,'OP_PayHouseUpkeepMsg',139,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3536,908,927,'OP_MoveableObjectPlacementCriteri',141,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3537,908,927,'OP_EnterMoveObjectModeMsg',142,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3538,908,927,'OP_PositionMoveableObject',143,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3539,908,927,'OP_CancelMoveObjectModeMsg',144,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3540,908,927,'OP_ShaderCustomizationMsg',145,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3541,908,927,'OP_ReplaceableSubMeshesMsg',146,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3542,908,927,'OP_HouseCustomizationScreenMsg',147,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3543,908,927,'OP_CustomizationPurchaseRequestMs',148,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3544,908,927,'OP_CustomizationSetRequestMsg',149,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3545,908,927,'OP_CustomizationReplyMsg',150,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3546,908,927,'OP_TintWidgetsMsg',151,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3547,908,927,'OP_ExamineConsignmentRequestMsg',152,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3548,908,927,'OP_ExamineConsignmentResponseMsg',153,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3549,908,927,'OP_UISettingsResponseMsg',154,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3550,908,927,'OP_UIResetMsg',155,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3551,908,927,'OP_KeymapLoadMsg',156,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3552,908,927,'OP_KeymapNoneMsg',157,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3553,908,927,'OP_KeymapDataMsg',158,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3554,908,927,'OP_KeymapSaveMsg',159,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3555,908,927,'OP_DispatchSpellCmdMsg',160,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3556,908,927,'OP_EntityVerbsRequestMsg',162,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3557,908,927,'OP_EntityVerbsReplyMsg',163,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3558,908,927,'OP_EntityVerbsVerbMsg',164,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3559,908,927,'OP_ChatRelationshipUpdateMsg',166,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3560,908,927,'OP_LootItemsRequestMsg',167,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3561,908,927,'OP_StoppedLootingMsg',168,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3562,908,927,'OP_SitMsg',169,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3563,908,927,'OP_StandMsg',170,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3564,908,927,'OP_SatMsg',171,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3565,908,927,'OP_StoodMsg',172,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3566,908,927,'OP_ClearForTakeOffMsg',173,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3567,908,927,'OP_ReadyForTakeOffMsg',174,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3568,908,927,'OP_ShowIllusionsMsg',175,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3569,908,927,'OP_HideIllusionsMsg',176,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3570,908,927,'OP_ExamineItemRequestMsg',177,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3571,908,927,'OP_ReadBookPageMsg',178,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3572,908,927,'OP_DefaultGroupOptionsRequestMsg',179,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3573,908,927,'OP_DefaultGroupOptionsMsg',180,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3574,908,927,'OP_GroupOptionsMsg',181,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3575,908,927,'OP_DisplayGroupOptionsScreenMsg',182,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3576,908,927,'OP_DisplayInnVisitScreenMsg',183,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3577,908,927,'OP_DumpSchedulerMsg',184,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3578,908,927,'OP_LSRequestPlayerDescMsg',185,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3579,908,927,'OP_LSCheckAcctLockMsg',186,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3580,908,927,'OP_WSAcctLockStatusMsg',187,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3581,908,927,'OP_RequestHelpRepathMsg',188,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3582,908,927,'OP_RequestTargetLocMsg',189,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3583,908,927,'OP_UpdateMotdMsg',190,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3584,908,927,'OP_PerformPlayerKnockbackMsg',191,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3585,908,927,'OP_PerformCameraShakeMsg',192,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3586,908,927,'OP_PopulateSkillMapsMsg',195,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3587,908,927,'OP_CancelledFeignMsg',197,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3588,908,927,'OP_SignalMsg',198,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3589,908,927,'OP_ShowCreateFromRecipeUIMsg',199,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3590,908,927,'OP_CancelCreateFromRecipeMsg',200,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3591,908,927,'OP_BeginItemCreationMsg',201,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3592,908,927,'OP_StopItemCreationMsg',202,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3593,908,927,'OP_ShowItemCreationProcessUIMsg',203,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3594,908,927,'OP_UpdateItemCreationProcessUIMsg',204,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3595,908,927,'OP_DisplayTSEventReactionMsg',205,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3596,908,927,'OP_ShowRecipeBookMsg',206,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3597,908,927,'OP_KnowledgebaseRequestMsg',207,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3598,908,927,'OP_KnowledgebaseResponseMsg',208,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3599,908,927,'OP_CSTicketHeaderRequestMsg',209,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3600,908,927,'OP_CSTicketInfoMsg',210,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3601,908,927,'OP_CSTicketCommentRequestMsg',211,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3602,908,927,'OP_CSTicketCommentResponseMsg',212,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3603,908,927,'OP_CSTicketCreateMsg',213,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3604,908,927,'OP_CSTicketAddCommentMsg',214,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3605,908,927,'OP_CSTicketDeleteMsg',215,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3606,908,927,'OP_CSTicketChangeNotificationMsg',216,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3607,908,927,'OP_WorldDataUpdateMsg',217,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3608,908,927,'OP_KnownLanguagesMsg',218,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3609,908,927,'OP_LsRequestClientCrashLogMsg',219,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3610,908,927,'OP_LsClientBaselogReplyMsg',220,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3611,908,927,'OP_LsClientCrashlogReplyMsg',221,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3612,908,927,'OP_LsClientAlertlogReplyMsg',222,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3613,908,927,'OP_LsClientVerifylogReplyMsg',223,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3614,908,927,'OP_ClientTeleportToLocationMsg',224,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3615,908,927,'OP_UpdateClientPredFlagsMsg',225,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3616,908,927,'OP_ChangeServerControlFlagMsg',226,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3617,908,927,'OP_CSToolsRequestMsg',227,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3618,908,927,'OP_CSToolsResponseMsg',228,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3619,908,927,'OP_AddSocialStructureStandingMsg',229,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3620,908,927,'OP_CreateBoatTransportsMsg',230,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3621,908,927,'OP_PositionBoatTransportMsg',231,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3622,908,927,'OP_MigrateBoatTransportMsg',232,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3623,908,927,'OP_MigrateBoatTransportReplyMsg',233,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3624,908,927,'OP_DisplayDebugNLLPointsMsg',234,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3625,908,927,'OP_ExamineInfoRequestMsg',235,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3626,908,927,'OP_QuickbarInitMsg',236,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3627,908,927,'OP_QuickbarUpdateMsg',237,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3628,908,927,'OP_MacroInitMsg',238,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3629,908,927,'OP_MacroUpdateMsg',239,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3630,908,927,'OP_QuestionnaireMsg',240,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3631,908,927,'OP_LevelChangedMsg',241,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3632,908,927,'OP_SpellGainedMsg',242,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3633,908,927,'OP_EncounterBrokenMsg',243,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3634,908,927,'OP_OnscreenMsgMsg',244,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3635,908,927,'OP_DisplayWarningMsg',245,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3636,908,927,'OP_ModifyGuildMsg',246,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3637,908,927,'OP_GuildEventMsg',247,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3638,908,927,'OP_GuildEventAddMsg',248,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3639,908,927,'OP_GuildEventActionMsg',249,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3640,908,927,'OP_GuildEventListMsg',250,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3641,908,927,'OP_RequestGuildEventDetailsMsg',251,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3642,908,927,'OP_GuildEventDetailsMsg',252,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3643,908,927,'OP_RequestGuildInfoMsg',253,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3644,908,927,'OP_GuildBankActionMsg',254,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3645,908,927,'OP_GuildBankActionResponseMsg',255,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3646,908,927,'OP_GuildBankItemDetailsRequestMsg',256,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3647,908,927,'OP_GuildBankItemDetailsResponseMs',257,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3648,908,927,'OP_GuildBankUpdateMsg',258,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3649,908,927,'OP_GuildBankEventListMsg',259,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3650,908,927,'OP_RequestGuildBankEventDetailsMs',260,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3651,908,927,'OP_RewardPackMsg',261,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3652,908,927,'OP_RenameGuildMsg',262,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3653,908,927,'OP_ZoneToFriendRequestMsg',264,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3654,908,927,'OP_ZoneToFriendReplyMsg',265,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3655,908,927,'OP_ChatCreateChannelMsg',266,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3656,908,927,'OP_ChatJoinChannelMsg',267,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3657,908,927,'OP_ChatWhoChannelMsg',268,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3658,908,927,'OP_ChatLeaveChannelMsg',269,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3659,908,927,'OP_ChatTellChannelMsg',270,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3660,908,927,'OP_ChatTellUserMsg',271,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3661,908,927,'OP_ChatToggleFriendMsg',272,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3662,908,927,'OP_ChatToggleIgnoreMsg',273,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3663,908,927,'OP_ChatSendFriendsMsg',274,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3664,908,927,'OP_ChatSendIgnoresMsg',275,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3665,908,927,'OP_QuestReward',302,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3666,908,927,'OP_ChatFiltersMsg',317,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3667,908,927,'OP_MailGetHeadersMsg',318,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3668,908,927,'OP_MailGetMessageMsg',319,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3669,908,927,'OP_MailSendMessageMsg',320,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3670,908,927,'OP_MailDeleteMessageMsg',321,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3671,908,927,'OP_MailGetHeadersReplyMsg',322,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3672,908,927,'OP_MailGetMessageReplyMsg',323,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3673,908,927,'OP_MailSendMessageReplyMsg',324,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3674,908,927,'OP_MailCommitSendMessageMsg',325,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3675,908,927,'OP_MailSendSystemMessageMsg',326,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3676,908,927,'OP_MailRemoveAttachFromMailMsg',327,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3677,908,927,'OP_WaypointRequestMsg',329,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3678,908,927,'OP_WaypointReplyMsg',330,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3679,908,927,'OP_WaypointSelectMsg',331,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3680,908,927,'OP_WaypointUpdateMsg',332,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3681,908,927,'OP_CharNameChangedMsg',333,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3682,908,927,'OP_ShowZoneTeleporterDestinations',334,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3683,908,927,'OP_SelectZoneTeleporterDestinatio',335,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3684,908,927,'OP_ReloadLocalizedTxtMsg',336,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3685,908,927,'OP_RequestGuildMembershipMsg',337,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3686,908,927,'OP_GuildMembershipResponseMsg',338,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3687,908,927,'OP_LeaveGuildNotifyMsg',339,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3688,908,927,'OP_JoinGuildNotifyMsg',340,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3689,908,927,'OP_AvatarUpdateMsg',342,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3690,908,927,'OP_BioUpdateMsg',343,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3691,908,927,'OP_InspectPlayerMsg',344,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3692,908,927,'OP_WSServerLockMsg',345,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3693,908,927,'OP_LSServerLockMsg',346,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3694,908,927,'OP_WSServerHideMsg',347,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3695,908,927,'OP_CsCategoryRequestMsg',348,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3696,908,927,'OP_CsCategoryResponseMsg',349,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3697,908,927,'OP_KnowledgeWindowSlotMappingMsg',350,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3698,908,927,'OP_LFGUpdateMsg',351,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3699,908,927,'OP_AFKUpdateMsg',352,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3700,908,927,'OP_AnonUpdateMsg',353,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3701,908,927,'OP_UpdateActivePublicZonesMsg',354,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3702,908,927,'OP_UnknownNpcMsg',355,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3703,908,927,'OP_PromoFlagsDetailsMsg',356,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3704,908,927,'OP_ConsignViewCreateMsg',357,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3705,908,927,'OP_ConsignViewGetPageMsg',358,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3706,908,927,'OP_ConsignViewReleaseMsg',359,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3707,908,927,'OP_ConsignRemoveItemsMsg',360,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3708,908,927,'OP_UpdateDebugRadiiMsg',361,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3709,908,927,'OP_SnoopMsg',362,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3710,908,927,'OP_ReportMsg',363,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3711,908,927,'OP_UpdateRaidMsg',364,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3712,908,927,'OP_ConsignViewSortMsg',365,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3713,908,927,'OP_TitleUpdateMsg',366,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3714,908,927,'OP_ClientFellMsg',367,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3715,908,927,'OP_ClientInDeathRegionMsg',368,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3716,908,927,'OP_CampClientMsg',369,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3717,908,927,'OP_CSToolAccessResponseMsg',370,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3718,908,927,'OP_TrackingUpdateMsg',371,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3719,908,927,'OP_BeginTrackingMsg',372,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3720,908,927,'OP_StopTrackingMsg',373,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3721,908,927,'OP_GetAvatarAccessRequestForCSToo',374,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3722,908,927,'OP_AdvancementRequestMsg',375,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3723,908,927,'OP_UpdateAvgFrameTimeMsg',376,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3724,908,927,'OP_MapFogDataInitMsg',377,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3725,908,927,'OP_MapFogDataUpdateMsg',378,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3726,908,927,'OP_CloseGroupInviteWindowMsg',379,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3727,908,927,'OP_UpdateGroupMemberDataMsg',380,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3728,908,927,'OP_WorldPingMsg',381,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3729,908,927,'OP_MoveLogUpdateMsg',382,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3730,908,927,'OP_OfferQuestMsg',383,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3731,908,927,'OP_WorldShutdownUpdateMsg',384,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3732,908,927,'OP_DisplayMailScreenMsg',385,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3733,908,927,'OP_ClientIdleBeginMsg',386,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3734,908,927,'OP_ClientIdleEndMsg',387,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3735,908,927,'OP_PurchaseConsignmentLoreCheckRe',388,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3736,908,927,'OP_NotifyApprenticeStoppedMentori',389,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3737,908,927,'OP_CorruptedClientMsg',390,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3738,908,927,'OP_WorldDataChangeMsg',391,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3739,908,927,'OP_MailEventNotificationMsg',392,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3740,908,927,'OP_RestartZoneMsg',393,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3741,908,927,'OP_FlightPathsMsg',394,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3742,908,927,'OP_CharacterLinkdeadMsg',395,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3743,908,927,'OP_CharTransferStartRequestMsg',396,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3744,908,927,'OP_CharTransferStartReplyMsg',397,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3745,908,927,'OP_CharTransferRequestMsg',398,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3746,908,927,'OP_CharTransferReplyMsg',399,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3747,908,927,'OP_CharTransferRollbackRequestMsg',400,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3748,908,927,'OP_CharTransferCommitRequestMsg',401,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3749,908,927,'OP_CharTransferRollbackReplyMsg',402,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3750,908,927,'OP_CharTransferCommitReplyMsg',403,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3751,908,927,'OP_GetCharacterSerializedRequestM',404,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3752,908,927,'OP_GetCharacterSerializedReplyMsg',405,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3753,908,927,'OP_CreateCharFromCBBRequestMsg',406,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3754,908,927,'OP_CreateCharFromCBBReplyMsg',407,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3755,908,927,'OP_HousingDataChangedMsg',408,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3756,908,927,'OP_HousingRestoreMsg',409,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3757,908,927,'OP_AuctionItem',410,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3758,908,927,'OP_AuctionItemReply',411,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3759,908,927,'OP_AuctionCoin',412,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3760,908,927,'OP_AuctionCoinReply',413,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3761,908,927,'OP_AuctionCharacter',414,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3762,908,927,'OP_AuctionCharacterReply',415,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3763,908,927,'OP_AuctionCommitMsg',416,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3764,908,927,'OP_AuctionAbortMsg',417,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3765,908,927,'OP_CharTransferValidateRequestMsg',418,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3766,908,927,'OP_CharTransferValidateReplyMsg',419,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3767,908,927,'OP_RaceRestrictionMsg',420,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3768,908,927,'OP_SetInstanceDisplayNameMsg',421,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3769,908,927,'OP_GetAuctionAssetIDMsg',422,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3770,908,927,'OP_GetAuctionAssetIDReplyMsg',423,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3771,908,927,'OP_ResendWorldChannelsMsg',424,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3772,908,927,'OP_DisplayExchangeScreenMsg',425,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3773,908,927,'OP_ArenaGameTypesMsg',426,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3774,908,927,'OP_AuditAuctionEventMsg',428,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3775,908,927,'OP_InviteRequestMsg',430,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3776,908,927,'OP_InviteResponseMsg',431,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3777,908,927,'OP_InviteTargetResponseMsg',432,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3778,908,927,'OP_InspectPlayerRequestMsg',433,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3779,908,927,'OP_DispatchMsg',434,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3780,908,927,'OP_DisplayEventMsg',435,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3781,908,927,'OP_PrePossessionMsg',436,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3782,908,927,'OP_PostPossessionMsg',437,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3783,908,927,'OP_AdventureList',462,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3784,908,927,'OP_CancelSpellCast',463,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3785,908,927,'OP_AttackAllowed',475,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3786,908,927,'OP_AttackNotAllowed',476,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3787,908,927,'OP_DressingRoom',482,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3788,908,927,'OP_SkillInfoRequest',486,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3789,908,927,'OP_SkillInfoResponse',487,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3790,908,927,'OP_MapRequest',492,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3791,908,927,'OP_EqUnknown',493,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3792,908,927,'OP_EqHearChatCmd',494,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3793,908,927,'OP_EqDisplayTextCmd',495,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3794,908,927,'OP_EqCreateGhostCmd',496,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3795,908,927,'OP_EqCreateWidgetCmd',497,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3796,908,927,'OP_EqCreateSignWidgetCmd',498,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3797,908,927,'OP_EqDestroyGhostCmd',499,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3798,908,927,'OP_EqUpdateGhostCmd',500,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3799,908,927,'OP_EqSetControlGhostCmd',501,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3800,908,927,'OP_EqSetPOVGhostCmd',502,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3801,908,927,'OP_EqHearCombatCmd',503,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3802,908,927,'OP_EqHearSpellCastCmd',504,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3803,908,927,'OP_EqHearSpellInterruptCmd',507,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3804,908,927,'OP_EqHearSpellFizzleCmd',508,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3805,908,927,'OP_EqHearConsiderCmd',509,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3806,908,927,'OP_EqUpdateSubClassesCmd',510,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3807,908,927,'OP_EqCreateListBoxCmd',511,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3808,908,927,'OP_EqSetDebugPathPointsCmd',512,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3809,908,927,'OP_EqCannedEmoteCmd',514,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3810,908,927,'OP_EqStateCmd',515,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3811,908,927,'OP_EqPlaySoundCmd',516,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3812,908,927,'OP_EqPlaySound3DCmd',517,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3813,908,927,'OP_EqPlayVoiceCmd',518,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3814,908,927,'OP_EqHearDrowningCmd',519,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3815,908,927,'OP_EqHearDeathCmd',520,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3816,908,927,'OP_EqGroupMemberRemovedCmd',521,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3817,908,927,'OP_EqHearChainEffectCmd',522,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3818,908,927,'OP_EqReceiveOfferCmd',523,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3819,908,927,'OP_EqInspectPCResultsCmd',524,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3820,908,927,'OP_EqDrawablePathGraphCmd',525,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3821,908,927,'OP_EqDialogOpenCmd',526,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3822,908,927,'OP_EqDialogCloseCmd',527,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3823,908,927,'OP_EqFactionUpdateCmd',528,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3824,908,927,'OP_EqCollectionUpdateCmd',529,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3825,908,927,'OP_EqCollectionFilterCmd',530,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3826,908,927,'OP_EqCollectionItemCmd',531,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3827,908,927,'OP_EqQuestJournalUpdateCmd',532,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3828,908,927,'OP_EqQuestJournalReplyCmd',534,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3829,908,927,'OP_EqQuestGroupCmd',535,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3830,908,927,'OP_EqUpdateMerchantCmd',536,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3831,908,927,'OP_EqUpdateStoreCmd',537,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3832,908,927,'OP_EqUpdatePlayerTradeCmd',538,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3833,908,927,'OP_EqHelpPathCmd',539,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3834,908,927,'OP_EqHelpPathClearCmd',540,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3835,908,927,'OP_EqUpdateBankCmd',541,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3836,908,927,'OP_EqExamineInfoCmd',542,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3837,908,927,'OP_EqCloseWindowCmd',543,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3838,908,927,'OP_EqUpdateLootCmd',544,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3839,908,927,'OP_EqJunctionListCmd',545,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3840,908,927,'OP_EqShowDeathWindowCmd',546,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3841,908,927,'OP_EqDisplaySpellFailCmd',547,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3842,908,927,'OP_EqSpellCastStartCmd',548,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3843,908,927,'OP_EqSpellCastEndCmd',549,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3844,908,927,'OP_EqResurrectedCmd',550,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3845,908,927,'OP_EqChoiceWinCmd',551,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3846,908,927,'OP_EqSetDefaultVerbCmd',552,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3847,908,927,'OP_EqInstructionWindowCmd',554,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3848,908,927,'OP_EqInstructionWindowCloseCmd',555,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3849,908,927,'OP_EqInstructionWindowGoalCmd',556,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3850,908,927,'OP_EqInstructionWindowTaskCmd',557,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3851,908,927,'OP_EqEnableGameEventCmd',558,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3852,908,927,'OP_EqShowWindowCmd',559,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3853,908,927,'OP_EqEnableWindowCmd',560,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3854,908,927,'OP_EqFlashWindowCmd',561,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3855,908,927,'OP_EqHearPlayFlavorCmd',562,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3856,908,927,'OP_EqUpdateSignWidgetCmd',564,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3857,908,927,'OP_EqDebugPVDCmd',565,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3858,908,927,'OP_EqShowBookCmd',566,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3859,908,927,'OP_EqQuestionnaireCmd',567,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3860,908,927,'OP_EqGetProbsCmd',568,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3861,908,927,'OP_EqHearHealCmd',569,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3862,908,927,'OP_EqChatChannelUpdateCmd',570,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3863,908,927,'OP_EqWhoChannelQueryReplyCmd',571,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3864,908,927,'OP_EqAvailWorldChannelsCmd',572,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3865,908,927,'OP_EqUpdateTargetCmd',573,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3866,908,927,'OP_EqConsignmentItemsCmd',575,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3867,908,927,'OP_EqStartBrokerCmd',577,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3868,908,927,'OP_EqMapExplorationCmd',578,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3869,908,927,'OP_EqStoreLogCmd',579,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3870,908,927,'OP_EqSpellMoveToRangeAndRetryCmd',580,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3871,908,927,'OP_EqUpdatePlayerMailCmd',581,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3872,908,927,'OP_EqArenaResultsCmd',582,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3873,908,927,'OP_EqGuildBankEventActionCmd',583,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3874,908,927,'OP_EqGuildBankExamineInfoCmd',584,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3875,908,927,'OP_EqHearSpellNoLandCmd',585,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3876,908,927,'OP_Lottery',589,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3877,908,927,'OP_GuildRecruitingMemberInfo',590,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3878,908,927,'OP_GuildRecruiting',591,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3879,908,927,'OP_GuildRecruitingDetails',592,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3880,908,927,'OP_GuildRecruitingImage',593,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3881,908,927,'OP_PointOfInterest',614,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3882,908,927,'OP_TraitsList',616,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3883,908,927,'OP_RecipeList',625,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3884,908,927,'OP_CharacterAchievements',655,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3885,908,927,'OP_AddClientToGroupMsg',1010,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3886,908,927,'OP_AddGroupToGroupMsg',1010,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3887,908,927,'OP_GuildKickMsg',1010,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3888,908,927,'OP_ProcessScriptMsg',1010,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3889,908,927,'OP_ProcessWorkspaceMsg',1010,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3890,908,927,'OP_PurchaseConsignmentResponseMsg',1010,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3891,908,927,'OP_QuickbarAddMsg',1010,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3892,908,927,'OP_SkillSlotMapping',1010,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3893,908,927,'OP_Unknown',10014,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3894,908,927,'OP_WSWeatherUpdateMsg',10015,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3895,936,939,'OP_LoginRequestMsg',0,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3896,936,939,'OP_LoginByNumRequestMsg',1,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3897,936,939,'OP_WSLoginRequestMsg',2,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3898,936,939,'OP_ESLoginRequestMsg',3,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3899,936,939,'OP_LoginReplyMsg',4,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3900,936,939,'OP_WSStatusReplyMsg',5,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3901,936,939,'OP_WorldStatusChangeMsg',6,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3902,936,939,'OP_AllWSDescRequestMsg',7,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3903,936,939,'OP_WorldListMsg',8,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3904,936,939,'OP_AllCharactersDescRequestMsg',9,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3905,936,939,'OP_AllCharactersDescReplyMsg',10,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3906,936,939,'OP_CreateCharacterRequestMsg',11,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3907,936,939,'OP_CreateCharacterReplyMsg',12,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3908,936,939,'OP_WSCreateCharacterRequestMsg',13,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3909,936,939,'OP_WSCreateCharacterReplyMsg',14,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3910,936,939,'OP_ReskinCharacterRequestMsg',15,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3911,936,939,'OP_DeleteCharacterRequestMsg',16,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3912,936,939,'OP_DeleteCharacterReplyMsg',17,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3913,936,939,'OP_PlayCharacterRequestMsg',18,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3914,936,939,'OP_PlayCharacterReplyMsg',19,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3915,936,939,'OP_ExpectClientAsCharacterReplyMs',22,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3916,936,939,'OP_ServerPlayCharacterRequestMsg',23,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3917,936,939,'OP_ServerPlayCharacterReplyMsg',24,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3918,936,939,'OP_ESInitMsg',25,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3919,936,939,'OP_ESReadyForClientsMsg',26,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3920,936,939,'OP_CreateZoneInstanceMsg',27,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3921,936,939,'OP_ZoneInstanceCreateReplyMsg',28,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3922,936,939,'OP_ZoneInstanceDestroyedMsg',29,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3923,936,939,'OP_ExpectClientAsCharacterRequest',30,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3924,936,939,'OP_ZoneInfoMsg',31,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3925,936,939,'OP_DoneLoadingZoneResourcesMsg',32,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3926,936,939,'OP_DoneSendingInitialEntitiesMsg',33,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3927,936,939,'OP_DoneLoadingEntityResourcesMsg',34,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3928,936,939,'OP_PredictionUpdateMsg',35,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3929,936,939,'OP_UpdatePositionMsg',37,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3930,936,939,'OP_SetRemoteCmdsMsg',39,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3931,936,939,'OP_RemoteCmdMsg',40,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3932,936,939,'OP_GameWorldTimeMsg',41,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3933,936,939,'OP_MOTDMsg',42,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3934,936,939,'OP_ZoneMOTDMsg',43,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3935,936,939,'OP_AvatarCreatedMsg',44,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3936,936,939,'OP_AvatarDestroyedMsg',45,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3937,936,939,'OP_RequestCampMsg',47,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3938,936,939,'OP_CampStartedMsg',48,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3939,936,939,'OP_CampAbortedMsg',49,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3940,936,939,'OP_WhoQueryRequestMsg',50,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3941,936,939,'OP_WhoQueryReplyMsg',51,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3942,936,939,'OP_MonitorReplyMsg',52,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3943,936,939,'OP_MonitorCharacterListMsg',53,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3944,936,939,'OP_MonitorCharacterListRequestMsg',54,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3945,936,939,'OP_ClientCmdMsg',55,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3946,936,939,'OP_DispatchESMsg',56,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3947,936,939,'OP_DispatchClientCmdMsg',57,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3948,936,939,'OP_UpdateTargetMsg',58,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3949,936,939,'OP_UpdateTargetLocMsg',59,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3950,936,939,'OP_UpdateCharacterSheetMsg',60,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3951,936,939,'OP_UpdateSpellBookMsg',61,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3952,936,939,'OP_UpdateInventoryMsg',63,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3953,936,939,'OP_UpdateRecipeBookMsg',65,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3954,936,939,'OP_RequestRecipeDetailsMsg',66,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3955,936,939,'OP_RecipeDetailsMsg',67,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3956,936,939,'OP_UpdateSkillBookMsg',68,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3957,936,939,'OP_UpdateSkillsMsg',69,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3958,936,939,'OP_UpdateOpportunityMsg',70,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3959,936,939,'OP_ChangeZoneMsg',72,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3960,936,939,'OP_ClientTeleportRequestMsg',73,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3961,936,939,'OP_TeleportWithinZoneMsg',74,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3962,936,939,'OP_TeleportWithinZoneNoReloadMsg',75,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3963,936,939,'OP_MigrateClientToZoneRequestMsg',76,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3964,936,939,'OP_MigrateClientToZoneReplyMsg',77,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3965,936,939,'OP_ReadyToZoneMsg',78,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3966,936,939,'OP_RemoveClientFromGroupMsg',79,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3967,936,939,'OP_RemoveGroupFromGroupMsg',80,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3968,936,939,'OP_MakeGroupLeaderMsg',81,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3969,936,939,'OP_GroupCreatedMsg',82,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3970,936,939,'OP_GroupDestroyedMsg',83,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3971,936,939,'OP_GroupMemberAddedMsg',84,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3972,936,939,'OP_GroupMemberRemovedMsg',85,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3973,936,939,'OP_GroupRemovedFromGroupMsg',86,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3974,936,939,'OP_GroupLeaderChangedMsg',87,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3975,936,939,'OP_GroupResendOOZDataMsg',88,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3976,936,939,'OP_GroupSettingsChangedMsg',89,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3977,936,939,'OP_OutOfZoneMemberDataMsg',90,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3978,936,939,'OP_SendLatestRequestMsg',91,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3979,936,939,'OP_ClearDataMsg',92,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3980,936,939,'OP_SetSocialMsg',93,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3981,936,939,'OP_ESStatusMsg',94,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3982,936,939,'OP_ESZoneInstanceStatusMsg',95,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3983,936,939,'OP_ZonesStatusRequestMsg',96,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3984,936,939,'OP_ZonesStatusMsg',97,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3985,936,939,'OP_ESWeatherRequestMsg',98,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3986,936,939,'OP_ESWeatherRequestEndMsg',99,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3987,936,939,'OP_DialogSelectMsg',102,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3988,936,939,'OP_DialogCloseMsg',103,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3989,936,939,'OP_RemoveSpellEffectMsg',104,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3990,936,939,'OP_RemoveConcentrationMsg',105,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3991,936,939,'OP_QuestJournalOpenMsg',106,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3992,936,939,'OP_QuestJournalInspectMsg',107,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3993,936,939,'OP_QuestJournalSetVisibleMsg',108,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3994,936,939,'OP_QuestJournalWaypointMsg',109,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3995,936,939,'OP_CreateGuildRequestMsg',110,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3996,936,939,'OP_CreateGuildReplyMsg',111,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3997,936,939,'OP_GuildsayMsg',112,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3998,936,939,'OP_GuildUpdateMsg',115,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (3999,936,939,'OP_DeleteGuildMsg',116,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4000,936,939,'OP_FellowshipExpMsg',117,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4001,936,939,'OP_ConsignmentCloseStoreMsg',118,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4002,936,939,'OP_ConsignItemRequestMsg',119,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4003,936,939,'OP_ConsignItemResponseMsg',120,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4004,936,939,'OP_PurchaseConsignmentRequestMsg',121,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4005,936,939,'OP_HouseDeletedRemotelyMsg',122,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4006,936,939,'OP_UpdateHouseDataMsg',123,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4007,936,939,'OP_UpdateHouseAccessDataMsg',124,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4008,936,939,'OP_PlayerHouseBaseScreenMsg',125,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4009,936,939,'OP_PlayerHousePurchaseScreenMsg',126,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4010,936,939,'OP_PlayerHouseAccessUpdateMsg',127,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4011,936,939,'OP_PlayerHouseDisplayStatusMsg',128,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4012,936,939,'OP_PlayerHouseCloseUIMsg',129,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4013,936,939,'OP_BuyPlayerHouseMsg',130,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4014,936,939,'OP_BuyPlayerHouseTintMsg',131,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4015,936,939,'OP_CollectAllHouseItemsMsg',132,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4016,936,939,'OP_RelinquishHouseMsg',133,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4017,936,939,'OP_EnterHouseMsg',134,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4018,936,939,'OP_ExitHouseMsg',135,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4019,936,939,'OP_HouseDefaultAccessSetMsg',136,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4020,936,939,'OP_HouseAccessSetMsg',137,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4021,936,939,'OP_HouseAccessRemoveMsg',138,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4022,936,939,'OP_PayHouseUpkeepMsg',139,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4023,936,939,'OP_MoveableObjectPlacementCriteri',141,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4024,936,939,'OP_EnterMoveObjectModeMsg',142,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4025,936,939,'OP_PositionMoveableObject',143,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4026,936,939,'OP_CancelMoveObjectModeMsg',144,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4027,936,939,'OP_ShaderCustomizationMsg',145,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4028,936,939,'OP_ReplaceableSubMeshesMsg',146,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4029,936,939,'OP_HouseCustomizationScreenMsg',147,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4030,936,939,'OP_CustomizationPurchaseRequestMs',148,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4031,936,939,'OP_CustomizationSetRequestMsg',149,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4032,936,939,'OP_CustomizationReplyMsg',150,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4033,936,939,'OP_TintWidgetsMsg',151,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4034,936,939,'OP_ExamineConsignmentRequestMsg',152,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4035,936,939,'OP_ExamineConsignmentResponseMsg',153,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4036,936,939,'OP_UISettingsResponseMsg',154,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4037,936,939,'OP_UIResetMsg',155,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4038,936,939,'OP_KeymapLoadMsg',156,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4039,936,939,'OP_KeymapNoneMsg',157,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4040,936,939,'OP_KeymapDataMsg',158,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4041,936,939,'OP_KeymapSaveMsg',159,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4042,936,939,'OP_DispatchSpellCmdMsg',160,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4043,936,939,'OP_EntityVerbsRequestMsg',162,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4044,936,939,'OP_EntityVerbsReplyMsg',163,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4045,936,939,'OP_EntityVerbsVerbMsg',164,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4046,936,939,'OP_ChatRelationshipUpdateMsg',166,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4047,936,939,'OP_LootItemsRequestMsg',167,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4048,936,939,'OP_StoppedLootingMsg',168,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4049,936,939,'OP_SitMsg',169,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4050,936,939,'OP_StandMsg',170,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4051,936,939,'OP_SatMsg',171,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4052,936,939,'OP_StoodMsg',172,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4053,936,939,'OP_ClearForTakeOffMsg',173,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4054,936,939,'OP_ReadyForTakeOffMsg',174,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4055,936,939,'OP_ShowIllusionsMsg',175,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4056,936,939,'OP_HideIllusionsMsg',176,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4057,936,939,'OP_ExamineItemRequestMsg',177,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4058,936,939,'OP_ReadBookPageMsg',178,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4059,936,939,'OP_DefaultGroupOptionsRequestMsg',179,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4060,936,939,'OP_DefaultGroupOptionsMsg',180,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4061,936,939,'OP_GroupOptionsMsg',181,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4062,936,939,'OP_DisplayGroupOptionsScreenMsg',182,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4063,936,939,'OP_DisplayInnVisitScreenMsg',183,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4064,936,939,'OP_DumpSchedulerMsg',184,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4065,936,939,'OP_LSRequestPlayerDescMsg',185,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4066,936,939,'OP_LSCheckAcctLockMsg',186,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4067,936,939,'OP_WSAcctLockStatusMsg',187,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4068,936,939,'OP_RequestHelpRepathMsg',188,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4069,936,939,'OP_RequestTargetLocMsg',189,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4070,936,939,'OP_UpdateMotdMsg',190,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4071,936,939,'OP_PerformPlayerKnockbackMsg',191,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4072,936,939,'OP_PerformCameraShakeMsg',192,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4073,936,939,'OP_PopulateSkillMapsMsg',195,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4074,936,939,'OP_CancelledFeignMsg',197,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4075,936,939,'OP_SignalMsg',198,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4076,936,939,'OP_ShowCreateFromRecipeUIMsg',199,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4077,936,939,'OP_CancelCreateFromRecipeMsg',200,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4078,936,939,'OP_BeginItemCreationMsg',201,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4079,936,939,'OP_StopItemCreationMsg',202,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4080,936,939,'OP_ShowItemCreationProcessUIMsg',203,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4081,936,939,'OP_UpdateItemCreationProcessUIMsg',204,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4082,936,939,'OP_DisplayTSEventReactionMsg',205,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4083,936,939,'OP_ShowRecipeBookMsg',206,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4084,936,939,'OP_KnowledgebaseRequestMsg',207,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4085,936,939,'OP_KnowledgebaseResponseMsg',208,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4086,936,939,'OP_CSTicketHeaderRequestMsg',209,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4087,936,939,'OP_CSTicketInfoMsg',210,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4088,936,939,'OP_CSTicketCommentRequestMsg',211,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4089,936,939,'OP_CSTicketCommentResponseMsg',212,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4090,936,939,'OP_CSTicketCreateMsg',213,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4091,936,939,'OP_CSTicketAddCommentMsg',214,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4092,936,939,'OP_CSTicketDeleteMsg',215,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4093,936,939,'OP_CSTicketChangeNotificationMsg',216,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4094,936,939,'OP_WorldDataUpdateMsg',217,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4095,936,939,'OP_KnownLanguagesMsg',218,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4096,936,939,'OP_LsRequestClientCrashLogMsg',219,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4097,936,939,'OP_LsClientBaselogReplyMsg',220,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4098,936,939,'OP_LsClientCrashlogReplyMsg',221,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4099,936,939,'OP_LsClientAlertlogReplyMsg',222,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4100,936,939,'OP_LsClientVerifylogReplyMsg',223,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4101,936,939,'OP_ClientTeleportToLocationMsg',224,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4102,936,939,'OP_UpdateClientPredFlagsMsg',225,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4103,936,939,'OP_ChangeServerControlFlagMsg',226,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4104,936,939,'OP_CSToolsRequestMsg',227,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4105,936,939,'OP_CSToolsResponseMsg',228,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4106,936,939,'OP_AddSocialStructureStandingMsg',229,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4107,936,939,'OP_CreateBoatTransportsMsg',230,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4108,936,939,'OP_PositionBoatTransportMsg',231,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4109,936,939,'OP_MigrateBoatTransportMsg',232,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4110,936,939,'OP_MigrateBoatTransportReplyMsg',233,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4111,936,939,'OP_DisplayDebugNLLPointsMsg',234,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4112,936,939,'OP_ExamineInfoRequestMsg',235,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4113,936,939,'OP_QuickbarInitMsg',236,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4114,936,939,'OP_QuickbarUpdateMsg',237,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4115,936,939,'OP_MacroInitMsg',238,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4116,936,939,'OP_MacroUpdateMsg',239,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4117,936,939,'OP_QuestionnaireMsg',240,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4118,936,939,'OP_LevelChangedMsg',241,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4119,936,939,'OP_SpellGainedMsg',242,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4120,936,939,'OP_EncounterBrokenMsg',243,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4121,936,939,'OP_OnscreenMsgMsg',244,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4122,936,939,'OP_DisplayWarningMsg',245,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4123,936,939,'OP_ModifyGuildMsg',246,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4124,936,939,'OP_GuildEventMsg',247,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4125,936,939,'OP_GuildEventAddMsg',248,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4126,936,939,'OP_GuildEventActionMsg',249,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4127,936,939,'OP_GuildEventListMsg',250,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4128,936,939,'OP_RequestGuildEventDetailsMsg',251,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4129,936,939,'OP_GuildEventDetailsMsg',252,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4130,936,939,'OP_RequestGuildInfoMsg',253,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4131,936,939,'OP_GuildBankActionMsg',254,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4132,936,939,'OP_GuildBankActionResponseMsg',255,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4133,936,939,'OP_GuildBankItemDetailsRequestMsg',256,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4134,936,939,'OP_GuildBankItemDetailsResponseMs',257,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4135,936,939,'OP_GuildBankUpdateMsg',258,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4136,936,939,'OP_GuildBankEventListMsg',259,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4137,936,939,'OP_RequestGuildBankEventDetailsMs',260,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4138,936,939,'OP_RewardPackMsg',261,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4139,936,939,'OP_RenameGuildMsg',262,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4140,936,939,'OP_ZoneToFriendRequestMsg',264,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4141,936,939,'OP_ZoneToFriendReplyMsg',265,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4142,936,939,'OP_ChatCreateChannelMsg',266,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4143,936,939,'OP_ChatJoinChannelMsg',267,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4144,936,939,'OP_ChatWhoChannelMsg',268,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4145,936,939,'OP_ChatLeaveChannelMsg',269,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4146,936,939,'OP_ChatTellChannelMsg',270,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4147,936,939,'OP_ChatTellUserMsg',271,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4148,936,939,'OP_ChatToggleFriendMsg',272,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4149,936,939,'OP_ChatToggleIgnoreMsg',273,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4150,936,939,'OP_ChatSendFriendsMsg',274,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4151,936,939,'OP_ChatSendIgnoresMsg',275,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4152,936,939,'OP_QuestReward',302,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4153,936,939,'OP_ChatFiltersMsg',317,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4154,936,939,'OP_MailGetHeadersMsg',318,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4155,936,939,'OP_MailGetMessageMsg',319,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4156,936,939,'OP_MailSendMessageMsg',320,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4157,936,939,'OP_MailDeleteMessageMsg',321,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4158,936,939,'OP_MailGetHeadersReplyMsg',322,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4159,936,939,'OP_MailGetMessageReplyMsg',323,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4160,936,939,'OP_MailSendMessageReplyMsg',324,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4161,936,939,'OP_MailCommitSendMessageMsg',325,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4162,936,939,'OP_MailSendSystemMessageMsg',326,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4163,936,939,'OP_MailRemoveAttachFromMailMsg',327,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4164,936,939,'OP_WaypointRequestMsg',329,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4165,936,939,'OP_WaypointReplyMsg',330,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4166,936,939,'OP_WaypointSelectMsg',331,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4167,936,939,'OP_WaypointUpdateMsg',332,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4168,936,939,'OP_CharNameChangedMsg',333,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4169,936,939,'OP_ShowZoneTeleporterDestinations',334,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4170,936,939,'OP_SelectZoneTeleporterDestinatio',335,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4171,936,939,'OP_ReloadLocalizedTxtMsg',336,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4172,936,939,'OP_RequestGuildMembershipMsg',337,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4173,936,939,'OP_GuildMembershipResponseMsg',338,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4174,936,939,'OP_LeaveGuildNotifyMsg',339,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4175,936,939,'OP_JoinGuildNotifyMsg',340,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4176,936,939,'OP_AvatarUpdateMsg',342,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4177,936,939,'OP_BioUpdateMsg',343,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4178,936,939,'OP_InspectPlayerMsg',344,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4179,936,939,'OP_WSServerLockMsg',345,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4180,936,939,'OP_LSServerLockMsg',346,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4181,936,939,'OP_WSServerHideMsg',347,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4182,936,939,'OP_CsCategoryRequestMsg',348,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4183,936,939,'OP_CsCategoryResponseMsg',349,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4184,936,939,'OP_KnowledgeWindowSlotMappingMsg',350,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4185,936,939,'OP_LFGUpdateMsg',351,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4186,936,939,'OP_AFKUpdateMsg',352,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4187,936,939,'OP_AnonUpdateMsg',353,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4188,936,939,'OP_UpdateActivePublicZonesMsg',354,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4189,936,939,'OP_UnknownNpcMsg',355,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4190,936,939,'OP_PromoFlagsDetailsMsg',356,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4191,936,939,'OP_ConsignViewCreateMsg',357,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4192,936,939,'OP_ConsignViewGetPageMsg',358,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4193,936,939,'OP_ConsignViewReleaseMsg',359,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4194,936,939,'OP_ConsignRemoveItemsMsg',360,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4195,936,939,'OP_UpdateDebugRadiiMsg',361,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4196,936,939,'OP_SnoopMsg',362,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4197,936,939,'OP_ReportMsg',363,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4198,936,939,'OP_UpdateRaidMsg',364,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4199,936,939,'OP_ConsignViewSortMsg',365,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4200,936,939,'OP_TitleUpdateMsg',366,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4201,936,939,'OP_ClientFellMsg',367,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4202,936,939,'OP_ClientInDeathRegionMsg',368,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4203,936,939,'OP_CampClientMsg',369,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4204,936,939,'OP_CSToolAccessResponseMsg',370,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4205,936,939,'OP_TrackingUpdateMsg',371,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4206,936,939,'OP_BeginTrackingMsg',372,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4207,936,939,'OP_StopTrackingMsg',373,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4208,936,939,'OP_GetAvatarAccessRequestForCSToo',374,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4209,936,939,'OP_AdvancementRequestMsg',375,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4210,936,939,'OP_UpdateAvgFrameTimeMsg',376,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4211,936,939,'OP_MapFogDataInitMsg',377,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4212,936,939,'OP_MapFogDataUpdateMsg',378,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4213,936,939,'OP_CloseGroupInviteWindowMsg',379,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4214,936,939,'OP_UpdateGroupMemberDataMsg',380,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4215,936,939,'OP_WorldPingMsg',381,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4216,936,939,'OP_MoveLogUpdateMsg',382,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4217,936,939,'OP_OfferQuestMsg',383,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4218,936,939,'OP_WorldShutdownUpdateMsg',384,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4219,936,939,'OP_DisplayMailScreenMsg',385,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4220,936,939,'OP_ClientIdleBeginMsg',386,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4221,936,939,'OP_ClientIdleEndMsg',387,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4222,936,939,'OP_PurchaseConsignmentLoreCheckRe',388,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4223,936,939,'OP_NotifyApprenticeStoppedMentori',389,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4224,936,939,'OP_CorruptedClientMsg',390,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4225,936,939,'OP_WorldDataChangeMsg',391,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4226,936,939,'OP_MailEventNotificationMsg',392,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4227,936,939,'OP_RestartZoneMsg',393,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4228,936,939,'OP_FlightPathsMsg',394,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4229,936,939,'OP_CharacterLinkdeadMsg',395,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4230,936,939,'OP_CharTransferStartRequestMsg',396,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4231,936,939,'OP_CharTransferStartReplyMsg',397,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4232,936,939,'OP_CharTransferRequestMsg',398,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4233,936,939,'OP_CharTransferReplyMsg',399,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4234,936,939,'OP_CharTransferRollbackRequestMsg',400,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4235,936,939,'OP_CharTransferCommitRequestMsg',401,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4236,936,939,'OP_CharTransferRollbackReplyMsg',402,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4237,936,939,'OP_CharTransferCommitReplyMsg',403,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4238,936,939,'OP_GetCharacterSerializedRequestM',404,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4239,936,939,'OP_GetCharacterSerializedReplyMsg',405,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4240,936,939,'OP_CreateCharFromCBBRequestMsg',406,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4241,936,939,'OP_CreateCharFromCBBReplyMsg',407,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4242,936,939,'OP_HousingDataChangedMsg',408,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4243,936,939,'OP_HousingRestoreMsg',409,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4244,936,939,'OP_AuctionItem',410,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4245,936,939,'OP_AuctionItemReply',411,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4246,936,939,'OP_AuctionCoin',412,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4247,936,939,'OP_AuctionCoinReply',413,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4248,936,939,'OP_AuctionCharacter',414,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4249,936,939,'OP_AuctionCharacterReply',415,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4250,936,939,'OP_AuctionCommitMsg',416,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4251,936,939,'OP_AuctionAbortMsg',417,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4252,936,939,'OP_CharTransferValidateRequestMsg',418,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4253,936,939,'OP_CharTransferValidateReplyMsg',419,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4254,936,939,'OP_RaceRestrictionMsg',420,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4255,936,939,'OP_SetInstanceDisplayNameMsg',421,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4256,936,939,'OP_GetAuctionAssetIDMsg',422,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4257,936,939,'OP_GetAuctionAssetIDReplyMsg',423,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4258,936,939,'OP_ResendWorldChannelsMsg',424,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4259,936,939,'OP_DisplayExchangeScreenMsg',425,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4260,936,939,'OP_ArenaGameTypesMsg',426,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4261,936,939,'OP_AuditAuctionEventMsg',428,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4262,936,939,'OP_InviteRequestMsg',430,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4263,936,939,'OP_InviteResponseMsg',431,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4264,936,939,'OP_InviteTargetResponseMsg',432,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4265,936,939,'OP_InspectPlayerRequestMsg',433,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4266,936,939,'OP_DispatchMsg',434,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4267,936,939,'OP_DisplayEventMsg',435,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4268,936,939,'OP_PrePossessionMsg',436,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4269,936,939,'OP_PostPossessionMsg',437,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4270,936,939,'OP_AdventureList',462,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4271,936,939,'OP_CancelSpellCast',463,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4272,936,939,'OP_AttackAllowed',475,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4273,936,939,'OP_AttackNotAllowed',476,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4274,936,939,'OP_DressingRoom',482,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4275,936,939,'OP_SkillInfoRequest',486,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4276,936,939,'OP_SkillInfoResponse',487,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4277,936,939,'OP_MapRequest',492,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4278,936,939,'OP_EqUnknown',502,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4279,936,939,'OP_EqHearChatCmd',503,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4280,936,939,'OP_EqDisplayTextCmd',504,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4281,936,939,'OP_EqCreateGhostCmd',505,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4282,936,939,'OP_EqCreateWidgetCmd',506,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4283,936,939,'OP_EqCreateSignWidgetCmd',507,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4284,936,939,'OP_EqDestroyGhostCmd',508,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4285,936,939,'OP_EqUpdateGhostCmd',509,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4286,936,939,'OP_EqSetControlGhostCmd',510,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4287,936,939,'OP_EqSetPOVGhostCmd',511,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4288,936,939,'OP_EqHearCombatCmd',512,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4289,936,939,'OP_EqHearSpellCastCmd',513,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4290,936,939,'OP_EqHearSpellInterruptCmd',516,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4291,936,939,'OP_EqHearSpellFizzleCmd',517,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4292,936,939,'OP_EqHearConsiderCmd',518,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4293,936,939,'OP_EqUpdateSubClassesCmd',519,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4294,936,939,'OP_EqCreateListBoxCmd',520,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4295,936,939,'OP_EqSetDebugPathPointsCmd',521,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4296,936,939,'OP_EqCannedEmoteCmd',523,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4297,936,939,'OP_EqStateCmd',524,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4298,936,939,'OP_EqPlaySoundCmd',525,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4299,936,939,'OP_EqPlaySound3DCmd',526,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4300,936,939,'OP_EqPlayVoiceCmd',527,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4301,936,939,'OP_EqHearDrowningCmd',528,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4302,936,939,'OP_EqHearDeathCmd',529,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4303,936,939,'OP_EqGroupMemberRemovedCmd',530,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4304,936,939,'OP_EqHearChainEffectCmd',531,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4305,936,939,'OP_EqReceiveOfferCmd',532,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4306,936,939,'OP_EqInspectPCResultsCmd',533,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4307,936,939,'OP_EqDrawablePathGraphCmd',534,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4308,936,939,'OP_EqDialogOpenCmd',535,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4309,936,939,'OP_EqDialogCloseCmd',536,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4310,936,939,'OP_EqFactionUpdateCmd',537,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4311,936,939,'OP_EqCollectionUpdateCmd',538,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4312,936,939,'OP_EqCollectionFilterCmd',539,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4313,936,939,'OP_EqCollectionItemCmd',540,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4314,936,939,'OP_EqQuestJournalUpdateCmd',541,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4315,936,939,'OP_EqQuestJournalReplyCmd',543,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4316,936,939,'OP_EqQuestGroupCmd',544,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4317,936,939,'OP_EqUpdateMerchantCmd',545,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4318,936,939,'OP_EqUpdateStoreCmd',546,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4319,936,939,'OP_EqUpdatePlayerTradeCmd',547,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4320,936,939,'OP_EqHelpPathCmd',548,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4321,936,939,'OP_EqHelpPathClearCmd',549,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4322,936,939,'OP_EqUpdateBankCmd',550,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4323,936,939,'OP_EqExamineInfoCmd',551,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4324,936,939,'OP_EqCloseWindowCmd',552,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4325,936,939,'OP_EqUpdateLootCmd',553,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4326,936,939,'OP_EqJunctionListCmd',554,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4327,936,939,'OP_EqShowDeathWindowCmd',555,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4328,936,939,'OP_EqDisplaySpellFailCmd',556,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4329,936,939,'OP_EqSpellCastStartCmd',557,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4330,936,939,'OP_EqSpellCastEndCmd',558,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4331,936,939,'OP_EqResurrectedCmd',559,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4332,936,939,'OP_EqChoiceWinCmd',560,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4333,936,939,'OP_EqSetDefaultVerbCmd',561,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4334,936,939,'OP_EqInstructionWindowCmd',563,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4335,936,939,'OP_EqInstructionWindowCloseCmd',564,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4336,936,939,'OP_EqInstructionWindowGoalCmd',565,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4337,936,939,'OP_EqInstructionWindowTaskCmd',566,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4338,936,939,'OP_EqEnableGameEventCmd',567,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4339,936,939,'OP_EqShowWindowCmd',568,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4340,936,939,'OP_EqEnableWindowCmd',569,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4341,936,939,'OP_EqFlashWindowCmd',570,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4342,936,939,'OP_EqHearPlayFlavorCmd',571,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4343,936,939,'OP_EqUpdateSignWidgetCmd',573,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4344,936,939,'OP_EqDebugPVDCmd',574,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4345,936,939,'OP_EqShowBookCmd',575,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4346,936,939,'OP_EqQuestionnaireCmd',576,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4347,936,939,'OP_EqGetProbsCmd',577,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4348,936,939,'OP_EqHearHealCmd',578,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4349,936,939,'OP_EqChatChannelUpdateCmd',579,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4350,936,939,'OP_EqWhoChannelQueryReplyCmd',580,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4351,936,939,'OP_EqAvailWorldChannelsCmd',581,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4352,936,939,'OP_EqUpdateTargetCmd',582,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4353,936,939,'OP_EqConsignmentItemsCmd',584,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4354,936,939,'OP_EqStartBrokerCmd',586,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4355,936,939,'OP_EqMapExplorationCmd',587,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4356,936,939,'OP_EqStoreLogCmd',588,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4357,936,939,'OP_EqSpellMoveToRangeAndRetryCmd',589,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4358,936,939,'OP_EqUpdatePlayerMailCmd',590,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4359,936,939,'OP_EqArenaResultsCmd',591,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4360,936,939,'OP_EqGuildBankEventActionCmd',592,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4361,936,939,'OP_EqGuildBankExamineInfoCmd',593,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4362,936,939,'OP_EqHearSpellNoLandCmd',594,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4363,936,939,'OP_Lottery',598,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4364,936,939,'OP_GuildRecruitingMemberInfo',599,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4365,936,939,'OP_GuildRecruiting',600,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4366,936,939,'OP_GuildRecruitingDetails',601,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4367,936,939,'OP_GuildRecruitingImage',602,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4368,936,939,'OP_PointOfInterest',623,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4369,936,939,'OP_TraitsList',625,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4370,936,939,'OP_RecipeList',634,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4371,936,939,'OP_CharacterAchievements',655,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4372,936,939,'OP_AddClientToGroupMsg',1019,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4373,936,939,'OP_AddGroupToGroupMsg',1019,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4374,936,939,'OP_GuildKickMsg',1019,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4375,936,939,'OP_ProcessScriptMsg',1019,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4376,936,939,'OP_ProcessWorkspaceMsg',1019,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4377,936,939,'OP_PurchaseConsignmentResponseMsg',1019,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4378,936,939,'OP_QuickbarAddMsg',1019,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4379,936,939,'OP_SkillSlotMapping',1019,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4380,936,939,'OP_Unknown',10023,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4381,936,939,'OP_WSWeatherUpdateMsg',10024,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4382,942,954,'OP_LoginRequestMsg',0,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4383,942,954,'OP_LoginByNumRequestMsg',1,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4384,942,954,'OP_WSLoginRequestMsg',2,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4385,942,954,'OP_ESLoginRequestMsg',3,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4386,942,954,'OP_LoginReplyMsg',4,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4387,942,954,'OP_WSStatusReplyMsg',5,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4388,942,954,'OP_WorldStatusChangeMsg',6,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4389,942,954,'OP_AllWSDescRequestMsg',7,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4390,942,954,'OP_WorldListMsg',8,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4391,942,954,'OP_AllCharactersDescRequestMsg',9,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4392,942,954,'OP_AllCharactersDescReplyMsg',10,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4393,942,954,'OP_CreateCharacterRequestMsg',11,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4394,942,954,'OP_CreateCharacterReplyMsg',12,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4395,942,954,'OP_WSCreateCharacterRequestMsg',13,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4396,942,954,'OP_WSCreateCharacterReplyMsg',14,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4397,942,954,'OP_ReskinCharacterRequestMsg',15,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4398,942,954,'OP_DeleteCharacterRequestMsg',16,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4399,942,954,'OP_DeleteCharacterReplyMsg',17,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4400,942,954,'OP_PlayCharacterRequestMsg',18,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4401,942,954,'OP_PlayCharacterReplyMsg',19,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4402,942,954,'OP_ExpectClientAsCharacterReplyMs',22,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4403,942,954,'OP_ServerPlayCharacterRequestMsg',23,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4404,942,954,'OP_ServerPlayCharacterReplyMsg',24,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4405,942,954,'OP_ESInitMsg',25,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4406,942,954,'OP_ESReadyForClientsMsg',26,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4407,942,954,'OP_CreateZoneInstanceMsg',27,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4408,942,954,'OP_ZoneInstanceCreateReplyMsg',28,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4409,942,954,'OP_ZoneInstanceDestroyedMsg',29,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4410,942,954,'OP_ExpectClientAsCharacterRequest',30,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4411,942,954,'OP_ZoneInfoMsg',31,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4412,942,954,'OP_DoneLoadingZoneResourcesMsg',32,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4413,942,954,'OP_DoneSendingInitialEntitiesMsg',33,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4414,942,954,'OP_DoneLoadingEntityResourcesMsg',34,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4415,942,954,'OP_PredictionUpdateMsg',35,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4416,942,954,'OP_UpdatePositionMsg',37,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4417,942,954,'OP_SetRemoteCmdsMsg',39,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4418,942,954,'OP_RemoteCmdMsg',40,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4419,942,954,'OP_GameWorldTimeMsg',41,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4420,942,954,'OP_MOTDMsg',42,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4421,942,954,'OP_ZoneMOTDMsg',43,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4422,942,954,'OP_AvatarCreatedMsg',44,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4423,942,954,'OP_AvatarDestroyedMsg',45,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4424,942,954,'OP_RequestCampMsg',47,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4425,942,954,'OP_CampStartedMsg',48,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4426,942,954,'OP_CampAbortedMsg',49,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4427,942,954,'OP_WhoQueryRequestMsg',50,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4428,942,954,'OP_WhoQueryReplyMsg',51,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4429,942,954,'OP_MonitorReplyMsg',52,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4430,942,954,'OP_MonitorCharacterListMsg',53,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4431,942,954,'OP_MonitorCharacterListRequestMsg',54,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4432,942,954,'OP_ClientCmdMsg',55,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4433,942,954,'OP_DispatchESMsg',56,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4434,942,954,'OP_DispatchClientCmdMsg',57,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4435,942,954,'OP_UpdateTargetMsg',58,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4436,942,954,'OP_UpdateTargetLocMsg',59,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4437,942,954,'OP_UpdateCharacterSheetMsg',60,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4438,942,954,'OP_UpdateSpellBookMsg',61,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4439,942,954,'OP_UpdateInventoryMsg',63,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4440,942,954,'OP_UpdateRecipeBookMsg',65,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4441,942,954,'OP_RequestRecipeDetailsMsg',66,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4442,942,954,'OP_RecipeDetailsMsg',67,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4443,942,954,'OP_UpdateSkillBookMsg',68,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4444,942,954,'OP_UpdateSkillsMsg',69,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4445,942,954,'OP_UpdateOpportunityMsg',70,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4446,942,954,'OP_ChangeZoneMsg',72,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4447,942,954,'OP_ClientTeleportRequestMsg',73,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4448,942,954,'OP_TeleportWithinZoneMsg',74,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4449,942,954,'OP_TeleportWithinZoneNoReloadMsg',75,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4450,942,954,'OP_MigrateClientToZoneRequestMsg',76,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4451,942,954,'OP_MigrateClientToZoneReplyMsg',77,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4452,942,954,'OP_ReadyToZoneMsg',78,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4453,942,954,'OP_RemoveClientFromGroupMsg',79,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4454,942,954,'OP_RemoveGroupFromGroupMsg',80,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4455,942,954,'OP_MakeGroupLeaderMsg',81,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4456,942,954,'OP_GroupCreatedMsg',82,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4457,942,954,'OP_GroupDestroyedMsg',83,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4458,942,954,'OP_GroupMemberAddedMsg',84,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4459,942,954,'OP_GroupMemberRemovedMsg',85,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4460,942,954,'OP_GroupRemovedFromGroupMsg',86,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4461,942,954,'OP_GroupLeaderChangedMsg',87,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4462,942,954,'OP_GroupResendOOZDataMsg',88,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4463,942,954,'OP_GroupSettingsChangedMsg',89,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4464,942,954,'OP_OutOfZoneMemberDataMsg',90,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4465,942,954,'OP_SendLatestRequestMsg',91,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4466,942,954,'OP_ClearDataMsg',92,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4467,942,954,'OP_SetSocialMsg',93,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4468,942,954,'OP_ESStatusMsg',94,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4469,942,954,'OP_ESZoneInstanceStatusMsg',95,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4470,942,954,'OP_ZonesStatusRequestMsg',96,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4471,942,954,'OP_ZonesStatusMsg',97,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4472,942,954,'OP_ESWeatherRequestMsg',98,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4473,942,954,'OP_ESWeatherRequestEndMsg',99,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4474,942,954,'OP_DialogSelectMsg',102,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4475,942,954,'OP_DialogCloseMsg',103,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4476,942,954,'OP_RemoveSpellEffectMsg',104,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4477,942,954,'OP_RemoveConcentrationMsg',105,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4478,942,954,'OP_QuestJournalOpenMsg',106,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4479,942,954,'OP_QuestJournalInspectMsg',107,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4480,942,954,'OP_QuestJournalSetVisibleMsg',108,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4481,942,954,'OP_QuestJournalWaypointMsg',109,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4482,942,954,'OP_CreateGuildRequestMsg',110,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4483,942,954,'OP_CreateGuildReplyMsg',111,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4484,942,954,'OP_GuildsayMsg',112,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4485,942,954,'OP_GuildUpdateMsg',115,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4486,942,954,'OP_DeleteGuildMsg',116,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4487,942,954,'OP_FellowshipExpMsg',117,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4488,942,954,'OP_ConsignmentCloseStoreMsg',118,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4489,942,954,'OP_ConsignItemRequestMsg',119,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4490,942,954,'OP_ConsignItemResponseMsg',120,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4491,942,954,'OP_PurchaseConsignmentRequestMsg',121,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4492,942,954,'OP_HouseDeletedRemotelyMsg',122,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4493,942,954,'OP_UpdateHouseDataMsg',123,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4494,942,954,'OP_UpdateHouseAccessDataMsg',124,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4495,942,954,'OP_PlayerHouseBaseScreenMsg',125,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4496,942,954,'OP_PlayerHousePurchaseScreenMsg',126,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4497,942,954,'OP_PlayerHouseAccessUpdateMsg',127,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4498,942,954,'OP_PlayerHouseDisplayStatusMsg',128,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4499,942,954,'OP_PlayerHouseCloseUIMsg',129,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4500,942,954,'OP_BuyPlayerHouseMsg',130,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4501,942,954,'OP_BuyPlayerHouseTintMsg',131,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4502,942,954,'OP_CollectAllHouseItemsMsg',132,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4503,942,954,'OP_RelinquishHouseMsg',133,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4504,942,954,'OP_EnterHouseMsg',134,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4505,942,954,'OP_ExitHouseMsg',135,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4506,942,954,'OP_HouseDefaultAccessSetMsg',136,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4507,942,954,'OP_HouseAccessSetMsg',137,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4508,942,954,'OP_HouseAccessRemoveMsg',138,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4509,942,954,'OP_PayHouseUpkeepMsg',139,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4510,942,954,'OP_MoveableObjectPlacementCriteri',141,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4511,942,954,'OP_EnterMoveObjectModeMsg',142,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4512,942,954,'OP_PositionMoveableObject',143,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4513,942,954,'OP_CancelMoveObjectModeMsg',144,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4514,942,954,'OP_ShaderCustomizationMsg',145,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4515,942,954,'OP_ReplaceableSubMeshesMsg',146,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4516,942,954,'OP_HouseCustomizationScreenMsg',147,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4517,942,954,'OP_CustomizationPurchaseRequestMs',148,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4518,942,954,'OP_CustomizationSetRequestMsg',149,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4519,942,954,'OP_CustomizationReplyMsg',150,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4520,942,954,'OP_TintWidgetsMsg',151,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4521,942,954,'OP_ExamineConsignmentRequestMsg',152,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4522,942,954,'OP_ExamineConsignmentResponseMsg',153,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4523,942,954,'OP_UISettingsResponseMsg',154,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4524,942,954,'OP_UIResetMsg',155,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4525,942,954,'OP_KeymapLoadMsg',156,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4526,942,954,'OP_KeymapNoneMsg',157,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4527,942,954,'OP_KeymapDataMsg',158,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4528,942,954,'OP_KeymapSaveMsg',159,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4529,942,954,'OP_DispatchSpellCmdMsg',160,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4530,942,954,'OP_EntityVerbsRequestMsg',162,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4531,942,954,'OP_EntityVerbsReplyMsg',163,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4532,942,954,'OP_EntityVerbsVerbMsg',164,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4533,942,954,'OP_ChatRelationshipUpdateMsg',166,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4534,942,954,'OP_LootItemsRequestMsg',167,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4535,942,954,'OP_StoppedLootingMsg',168,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4536,942,954,'OP_SitMsg',169,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4537,942,954,'OP_StandMsg',170,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4538,942,954,'OP_SatMsg',171,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4539,942,954,'OP_StoodMsg',172,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4540,942,954,'OP_ClearForTakeOffMsg',173,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4541,942,954,'OP_ReadyForTakeOffMsg',174,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4542,942,954,'OP_ShowIllusionsMsg',175,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4543,942,954,'OP_HideIllusionsMsg',176,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4544,942,954,'OP_ExamineItemRequestMsg',177,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4545,942,954,'OP_ReadBookPageMsg',178,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4546,942,954,'OP_DefaultGroupOptionsRequestMsg',179,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4547,942,954,'OP_DefaultGroupOptionsMsg',180,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4548,942,954,'OP_GroupOptionsMsg',181,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4549,942,954,'OP_DisplayGroupOptionsScreenMsg',182,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4550,942,954,'OP_DisplayInnVisitScreenMsg',183,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4551,942,954,'OP_DumpSchedulerMsg',184,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4552,942,954,'OP_LSRequestPlayerDescMsg',185,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4553,942,954,'OP_LSCheckAcctLockMsg',186,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4554,942,954,'OP_WSAcctLockStatusMsg',187,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4555,942,954,'OP_RequestHelpRepathMsg',188,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4556,942,954,'OP_RequestTargetLocMsg',189,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4557,942,954,'OP_UpdateMotdMsg',190,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4558,942,954,'OP_PerformPlayerKnockbackMsg',191,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4559,942,954,'OP_PerformCameraShakeMsg',192,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4560,942,954,'OP_PopulateSkillMapsMsg',195,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4561,942,954,'OP_CancelledFeignMsg',197,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4562,942,954,'OP_SignalMsg',198,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4563,942,954,'OP_ShowCreateFromRecipeUIMsg',199,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4564,942,954,'OP_CancelCreateFromRecipeMsg',200,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4565,942,954,'OP_BeginItemCreationMsg',201,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4566,942,954,'OP_StopItemCreationMsg',202,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4567,942,954,'OP_ShowItemCreationProcessUIMsg',203,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4568,942,954,'OP_UpdateItemCreationProcessUIMsg',204,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4569,942,954,'OP_DisplayTSEventReactionMsg',205,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4570,942,954,'OP_ShowRecipeBookMsg',206,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4571,942,954,'OP_KnowledgebaseRequestMsg',207,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4572,942,954,'OP_KnowledgebaseResponseMsg',208,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4573,942,954,'OP_CSTicketHeaderRequestMsg',209,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4574,942,954,'OP_CSTicketInfoMsg',210,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4575,942,954,'OP_CSTicketCommentRequestMsg',211,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4576,942,954,'OP_CSTicketCommentResponseMsg',212,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4577,942,954,'OP_CSTicketCreateMsg',213,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4578,942,954,'OP_CSTicketAddCommentMsg',214,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4579,942,954,'OP_CSTicketDeleteMsg',215,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4580,942,954,'OP_CSTicketChangeNotificationMsg',216,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4581,942,954,'OP_WorldDataUpdateMsg',217,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4582,942,954,'OP_KnownLanguagesMsg',218,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4583,942,954,'OP_LsRequestClientCrashLogMsg',219,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4584,942,954,'OP_LsClientBaselogReplyMsg',220,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4585,942,954,'OP_LsClientCrashlogReplyMsg',221,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4586,942,954,'OP_LsClientAlertlogReplyMsg',222,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4587,942,954,'OP_LsClientVerifylogReplyMsg',223,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4588,942,954,'OP_ClientTeleportToLocationMsg',224,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4589,942,954,'OP_UpdateClientPredFlagsMsg',225,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4590,942,954,'OP_ChangeServerControlFlagMsg',226,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4591,942,954,'OP_CSToolsRequestMsg',227,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4592,942,954,'OP_CSToolsResponseMsg',228,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4593,942,954,'OP_AddSocialStructureStandingMsg',229,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4594,942,954,'OP_CreateBoatTransportsMsg',230,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4595,942,954,'OP_PositionBoatTransportMsg',231,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4596,942,954,'OP_MigrateBoatTransportMsg',232,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4597,942,954,'OP_MigrateBoatTransportReplyMsg',233,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4598,942,954,'OP_DisplayDebugNLLPointsMsg',234,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4599,942,954,'OP_ExamineInfoRequestMsg',235,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4600,942,954,'OP_QuickbarInitMsg',236,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4601,942,954,'OP_QuickbarUpdateMsg',237,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4602,942,954,'OP_MacroInitMsg',238,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4603,942,954,'OP_MacroUpdateMsg',239,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4604,942,954,'OP_QuestionnaireMsg',240,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4605,942,954,'OP_LevelChangedMsg',241,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4606,942,954,'OP_SpellGainedMsg',242,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4607,942,954,'OP_EncounterBrokenMsg',243,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4608,942,954,'OP_OnscreenMsgMsg',244,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4609,942,954,'OP_DisplayWarningMsg',245,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4610,942,954,'OP_ModifyGuildMsg',246,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4611,942,954,'OP_GuildEventMsg',247,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4612,942,954,'OP_GuildEventAddMsg',248,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4613,942,954,'OP_GuildEventActionMsg',249,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4614,942,954,'OP_GuildEventListMsg',250,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4615,942,954,'OP_RequestGuildEventDetailsMsg',251,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4616,942,954,'OP_GuildEventDetailsMsg',252,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4617,942,954,'OP_RequestGuildInfoMsg',253,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4618,942,954,'OP_GuildBankActionMsg',254,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4619,942,954,'OP_GuildBankActionResponseMsg',255,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4620,942,954,'OP_GuildBankItemDetailsRequestMsg',256,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4621,942,954,'OP_GuildBankItemDetailsResponseMs',257,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4622,942,954,'OP_GuildBankUpdateMsg',258,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4623,942,954,'OP_GuildBankEventListMsg',259,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4624,942,954,'OP_RequestGuildBankEventDetailsMs',260,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4625,942,954,'OP_RewardPackMsg',261,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4626,942,954,'OP_RenameGuildMsg',262,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4627,942,954,'OP_ZoneToFriendRequestMsg',264,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4628,942,954,'OP_ZoneToFriendReplyMsg',265,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4629,942,954,'OP_ChatCreateChannelMsg',266,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4630,942,954,'OP_ChatJoinChannelMsg',267,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4631,942,954,'OP_ChatWhoChannelMsg',268,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4632,942,954,'OP_ChatLeaveChannelMsg',269,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4633,942,954,'OP_ChatTellChannelMsg',270,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4634,942,954,'OP_ChatTellUserMsg',271,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4635,942,954,'OP_ChatToggleFriendMsg',272,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4636,942,954,'OP_ChatToggleIgnoreMsg',273,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4637,942,954,'OP_ChatSendFriendsMsg',274,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4638,942,954,'OP_ChatSendIgnoresMsg',275,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4639,942,954,'OP_QuestReward',302,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4640,942,954,'OP_ChatFiltersMsg',317,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4641,942,954,'OP_MailGetHeadersMsg',318,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4642,942,954,'OP_MailGetMessageMsg',319,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4643,942,954,'OP_MailSendMessageMsg',320,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4644,942,954,'OP_MailDeleteMessageMsg',321,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4645,942,954,'OP_MailGetHeadersReplyMsg',322,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4646,942,954,'OP_MailGetMessageReplyMsg',323,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4647,942,954,'OP_MailSendMessageReplyMsg',324,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4648,942,954,'OP_MailCommitSendMessageMsg',325,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4649,942,954,'OP_MailSendSystemMessageMsg',326,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4650,942,954,'OP_MailRemoveAttachFromMailMsg',327,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4651,942,954,'OP_WaypointRequestMsg',329,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4652,942,954,'OP_WaypointReplyMsg',330,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4653,942,954,'OP_WaypointSelectMsg',331,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4654,942,954,'OP_WaypointUpdateMsg',332,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4655,942,954,'OP_CharNameChangedMsg',333,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4656,942,954,'OP_ShowZoneTeleporterDestinations',334,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4657,942,954,'OP_SelectZoneTeleporterDestinatio',335,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4658,942,954,'OP_ReloadLocalizedTxtMsg',336,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4659,942,954,'OP_RequestGuildMembershipMsg',337,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4660,942,954,'OP_GuildMembershipResponseMsg',338,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4661,942,954,'OP_LeaveGuildNotifyMsg',339,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4662,942,954,'OP_JoinGuildNotifyMsg',340,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4663,942,954,'OP_AvatarUpdateMsg',342,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4664,942,954,'OP_BioUpdateMsg',343,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4665,942,954,'OP_InspectPlayerMsg',344,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4666,942,954,'OP_WSServerLockMsg',345,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4667,942,954,'OP_LSServerLockMsg',346,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4668,942,954,'OP_WSServerHideMsg',347,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4669,942,954,'OP_CsCategoryRequestMsg',348,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4670,942,954,'OP_CsCategoryResponseMsg',349,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4671,942,954,'OP_KnowledgeWindowSlotMappingMsg',350,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4672,942,954,'OP_LFGUpdateMsg',351,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4673,942,954,'OP_AFKUpdateMsg',352,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4674,942,954,'OP_AnonUpdateMsg',353,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4675,942,954,'OP_UpdateActivePublicZonesMsg',354,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4676,942,954,'OP_UnknownNpcMsg',355,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4677,942,954,'OP_PromoFlagsDetailsMsg',356,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4678,942,954,'OP_ConsignViewCreateMsg',357,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4679,942,954,'OP_ConsignViewGetPageMsg',358,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4680,942,954,'OP_ConsignViewReleaseMsg',359,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4681,942,954,'OP_ConsignRemoveItemsMsg',360,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4682,942,954,'OP_UpdateDebugRadiiMsg',361,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4683,942,954,'OP_SnoopMsg',362,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4684,942,954,'OP_ReportMsg',363,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4685,942,954,'OP_UpdateRaidMsg',364,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4686,942,954,'OP_ConsignViewSortMsg',365,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4687,942,954,'OP_TitleUpdateMsg',366,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4688,942,954,'OP_ClientFellMsg',367,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4689,942,954,'OP_ClientInDeathRegionMsg',368,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4690,942,954,'OP_CampClientMsg',369,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4691,942,954,'OP_CSToolAccessResponseMsg',370,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4692,942,954,'OP_TrackingUpdateMsg',371,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4693,942,954,'OP_BeginTrackingMsg',372,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4694,942,954,'OP_StopTrackingMsg',373,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4695,942,954,'OP_GetAvatarAccessRequestForCSToo',374,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4696,942,954,'OP_AdvancementRequestMsg',375,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4697,942,954,'OP_UpdateAvgFrameTimeMsg',376,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4698,942,954,'OP_MapFogDataInitMsg',377,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4699,942,954,'OP_MapFogDataUpdateMsg',378,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4700,942,954,'OP_CloseGroupInviteWindowMsg',379,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4701,942,954,'OP_UpdateGroupMemberDataMsg',380,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4702,942,954,'OP_WorldPingMsg',381,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4703,942,954,'OP_MoveLogUpdateMsg',382,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4704,942,954,'OP_OfferQuestMsg',383,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4705,942,954,'OP_WorldShutdownUpdateMsg',384,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4706,942,954,'OP_DisplayMailScreenMsg',385,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4707,942,954,'OP_ClientIdleBeginMsg',386,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4708,942,954,'OP_ClientIdleEndMsg',387,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4709,942,954,'OP_PurchaseConsignmentLoreCheckRe',388,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4710,942,954,'OP_NotifyApprenticeStoppedMentori',389,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4711,942,954,'OP_CorruptedClientMsg',390,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4712,942,954,'OP_WorldDataChangeMsg',391,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4713,942,954,'OP_MailEventNotificationMsg',392,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4714,942,954,'OP_RestartZoneMsg',393,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4715,942,954,'OP_FlightPathsMsg',394,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4716,942,954,'OP_CharacterLinkdeadMsg',395,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4717,942,954,'OP_CharTransferStartRequestMsg',396,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4718,942,954,'OP_CharTransferStartReplyMsg',397,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4719,942,954,'OP_CharTransferRequestMsg',398,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4720,942,954,'OP_CharTransferReplyMsg',399,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4721,942,954,'OP_CharTransferRollbackRequestMsg',400,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4722,942,954,'OP_CharTransferCommitRequestMsg',401,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4723,942,954,'OP_CharTransferRollbackReplyMsg',402,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4724,942,954,'OP_CharTransferCommitReplyMsg',403,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4725,942,954,'OP_GetCharacterSerializedRequestM',404,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4726,942,954,'OP_GetCharacterSerializedReplyMsg',405,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4727,942,954,'OP_CreateCharFromCBBRequestMsg',406,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4728,942,954,'OP_CreateCharFromCBBReplyMsg',407,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4729,942,954,'OP_HousingDataChangedMsg',408,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4730,942,954,'OP_HousingRestoreMsg',409,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4731,942,954,'OP_AuctionItem',410,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4732,942,954,'OP_AuctionItemReply',411,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4733,942,954,'OP_AuctionCoin',412,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4734,942,954,'OP_AuctionCoinReply',413,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4735,942,954,'OP_AuctionCharacter',414,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4736,942,954,'OP_AuctionCharacterReply',415,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4737,942,954,'OP_AuctionCommitMsg',416,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4738,942,954,'OP_AuctionAbortMsg',417,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4739,942,954,'OP_CharTransferValidateRequestMsg',418,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4740,942,954,'OP_CharTransferValidateReplyMsg',419,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4741,942,954,'OP_RaceRestrictionMsg',420,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4742,942,954,'OP_SetInstanceDisplayNameMsg',421,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4743,942,954,'OP_GetAuctionAssetIDMsg',422,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4744,942,954,'OP_GetAuctionAssetIDReplyMsg',423,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4745,942,954,'OP_ResendWorldChannelsMsg',424,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4746,942,954,'OP_DisplayExchangeScreenMsg',425,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4747,942,954,'OP_ArenaGameTypesMsg',426,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4748,942,954,'OP_AuditAuctionEventMsg',428,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4749,942,954,'OP_InviteRequestMsg',430,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4750,942,954,'OP_InviteResponseMsg',431,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4751,942,954,'OP_InviteTargetResponseMsg',432,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4752,942,954,'OP_InspectPlayerRequestMsg',433,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4753,942,954,'OP_DispatchMsg',434,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4754,942,954,'OP_DisplayEventMsg',435,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4755,942,954,'OP_PrePossessionMsg',436,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4756,942,954,'OP_PostPossessionMsg',437,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4757,942,954,'OP_AdventureList',462,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4758,942,954,'OP_CancelSpellCast',463,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4759,942,954,'OP_AttackAllowed',475,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4760,942,954,'OP_AttackNotAllowed',476,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4761,942,954,'OP_DressingRoom',482,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4762,942,954,'OP_SkillInfoRequest',486,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4763,942,954,'OP_SkillInfoResponse',487,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4764,942,954,'OP_MapRequest',492,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4765,942,954,'OP_EqUnknown',504,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4766,942,954,'OP_EqHearChatCmd',505,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4767,942,954,'OP_EqDisplayTextCmd',506,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4768,942,954,'OP_EqCreateGhostCmd',507,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4769,942,954,'OP_EqCreateWidgetCmd',508,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4770,942,954,'OP_EqCreateSignWidgetCmd',509,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4771,942,954,'OP_EqDestroyGhostCmd',510,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4772,942,954,'OP_EqUpdateGhostCmd',511,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4773,942,954,'OP_EqSetControlGhostCmd',512,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4774,942,954,'OP_EqSetPOVGhostCmd',513,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4775,942,954,'OP_EqHearCombatCmd',514,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4776,942,954,'OP_EqHearSpellCastCmd',515,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4777,942,954,'OP_EqHearSpellInterruptCmd',518,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4778,942,954,'OP_EqHearSpellFizzleCmd',519,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4779,942,954,'OP_EqHearConsiderCmd',520,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4780,942,954,'OP_EqUpdateSubClassesCmd',521,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4781,942,954,'OP_EqCreateListBoxCmd',522,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4782,942,954,'OP_EqSetDebugPathPointsCmd',523,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4783,942,954,'OP_EqCannedEmoteCmd',525,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4784,942,954,'OP_EqStateCmd',526,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4785,942,954,'OP_EqPlaySoundCmd',527,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4786,942,954,'OP_EqPlaySound3DCmd',528,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4787,942,954,'OP_EqPlayVoiceCmd',529,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4788,942,954,'OP_EqHearDrowningCmd',530,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4789,942,954,'OP_EqHearDeathCmd',531,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4790,942,954,'OP_EqGroupMemberRemovedCmd',532,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4791,942,954,'OP_EqHearChainEffectCmd',533,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4792,942,954,'OP_EqReceiveOfferCmd',534,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4793,942,954,'OP_EqInspectPCResultsCmd',535,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4794,942,954,'OP_EqDrawablePathGraphCmd',536,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4795,942,954,'OP_EqDialogOpenCmd',537,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4796,942,954,'OP_EqDialogCloseCmd',538,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4797,942,954,'OP_EqFactionUpdateCmd',539,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4798,942,954,'OP_EqCollectionUpdateCmd',540,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4799,942,954,'OP_EqCollectionFilterCmd',541,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4800,942,954,'OP_EqCollectionItemCmd',542,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4801,942,954,'OP_EqQuestJournalUpdateCmd',543,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4802,942,954,'OP_EqQuestJournalReplyCmd',545,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4803,942,954,'OP_EqQuestGroupCmd',546,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4804,942,954,'OP_EqUpdateMerchantCmd',547,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4805,942,954,'OP_EqUpdateStoreCmd',548,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4806,942,954,'OP_EqUpdatePlayerTradeCmd',549,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4807,942,954,'OP_EqHelpPathCmd',550,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4808,942,954,'OP_EqHelpPathClearCmd',551,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4809,942,954,'OP_EqUpdateBankCmd',552,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4810,942,954,'OP_EqExamineInfoCmd',553,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4811,942,954,'OP_EqCloseWindowCmd',554,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4812,942,954,'OP_EqUpdateLootCmd',555,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4813,942,954,'OP_EqJunctionListCmd',556,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4814,942,954,'OP_EqShowDeathWindowCmd',557,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4815,942,954,'OP_EqDisplaySpellFailCmd',558,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4816,942,954,'OP_EqSpellCastStartCmd',559,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4817,942,954,'OP_EqSpellCastEndCmd',560,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4818,942,954,'OP_EqResurrectedCmd',561,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4819,942,954,'OP_EqChoiceWinCmd',562,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4820,942,954,'OP_EqSetDefaultVerbCmd',563,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4821,942,954,'OP_EqInstructionWindowCmd',565,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4822,942,954,'OP_EqInstructionWindowCloseCmd',566,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4823,942,954,'OP_EqInstructionWindowGoalCmd',567,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4824,942,954,'OP_EqInstructionWindowTaskCmd',568,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4825,942,954,'OP_EqEnableGameEventCmd',569,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4826,942,954,'OP_EqShowWindowCmd',570,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4827,942,954,'OP_EqEnableWindowCmd',571,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4828,942,954,'OP_EqFlashWindowCmd',572,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4829,942,954,'OP_EqHearPlayFlavorCmd',573,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4830,942,954,'OP_EqUpdateSignWidgetCmd',575,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4831,942,954,'OP_EqDebugPVDCmd',576,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4832,942,954,'OP_EqShowBookCmd',577,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4833,942,954,'OP_EqQuestionnaireCmd',578,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4834,942,954,'OP_EqGetProbsCmd',579,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4835,942,954,'OP_EqHearHealCmd',580,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4836,942,954,'OP_EqChatChannelUpdateCmd',581,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4837,942,954,'OP_EqWhoChannelQueryReplyCmd',582,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4838,942,954,'OP_EqAvailWorldChannelsCmd',583,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4839,942,954,'OP_EqUpdateTargetCmd',584,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4840,942,954,'OP_EqConsignmentItemsCmd',586,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4841,942,954,'OP_EqStartBrokerCmd',588,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4842,942,954,'OP_EqMapExplorationCmd',589,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4843,942,954,'OP_EqStoreLogCmd',590,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4844,942,954,'OP_EqSpellMoveToRangeAndRetryCmd',591,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4845,942,954,'OP_EqUpdatePlayerMailCmd',592,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4846,942,954,'OP_EqArenaResultsCmd',593,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4847,942,954,'OP_EqGuildBankEventActionCmd',594,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4848,942,954,'OP_EqGuildBankExamineInfoCmd',595,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4849,942,954,'OP_EqHearSpellNoLandCmd',596,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4850,942,954,'OP_Lottery',600,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4851,942,954,'OP_GuildRecruitingMemberInfo',601,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4852,942,954,'OP_GuildRecruiting',602,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4853,942,954,'OP_GuildRecruitingDetails',603,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4854,942,954,'OP_GuildRecruitingImage',604,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4855,942,954,'OP_PointOfInterest',625,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4856,942,954,'OP_TraitsList',627,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4857,942,954,'OP_RecipeList',636,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4858,942,954,'OP_CharacterAchievements',655,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4859,942,954,'OP_AddClientToGroupMsg',1021,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4860,942,954,'OP_AddGroupToGroupMsg',1021,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4861,942,954,'OP_GuildKickMsg',1021,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4862,942,954,'OP_ProcessScriptMsg',1021,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4863,942,954,'OP_ProcessWorkspaceMsg',1021,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4864,942,954,'OP_PurchaseConsignmentResponseMsg',1021,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4865,942,954,'OP_QuickbarAddMsg',1021,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4866,942,954,'OP_SkillSlotMapping',1021,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4867,942,954,'OP_Unknown',10025,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4868,942,954,'OP_WSWeatherUpdateMsg',10026,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4869,955,958,'OP_LoginRequestMsg',0,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4870,955,958,'OP_LoginByNumRequestMsg',1,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4871,955,958,'OP_WSLoginRequestMsg',2,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4872,955,958,'OP_ESLoginRequestMsg',3,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4873,955,958,'OP_LoginReplyMsg',4,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4874,955,958,'OP_WSStatusReplyMsg',5,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4875,955,958,'OP_WorldStatusChangeMsg',6,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4876,955,958,'OP_AllWSDescRequestMsg',7,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4877,955,958,'OP_WorldListMsg',8,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4878,955,958,'OP_AllCharactersDescRequestMsg',9,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4879,955,958,'OP_AllCharactersDescReplyMsg',10,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4880,955,958,'OP_CreateCharacterRequestMsg',11,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4881,955,958,'OP_CreateCharacterReplyMsg',12,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4882,955,958,'OP_WSCreateCharacterRequestMsg',13,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4883,955,958,'OP_WSCreateCharacterReplyMsg',14,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4884,955,958,'OP_ReskinCharacterRequestMsg',15,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4885,955,958,'OP_DeleteCharacterRequestMsg',16,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4886,955,958,'OP_DeleteCharacterReplyMsg',17,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4887,955,958,'OP_PlayCharacterRequestMsg',18,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4888,955,958,'OP_PlayCharacterReplyMsg',19,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4889,955,958,'OP_ExpectClientAsCharacterReplyMs',22,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4890,955,958,'OP_ServerPlayCharacterRequestMsg',23,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4891,955,958,'OP_ServerPlayCharacterReplyMsg',24,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4892,955,958,'OP_ESInitMsg',25,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4893,955,958,'OP_ESReadyForClientsMsg',26,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4894,955,958,'OP_CreateZoneInstanceMsg',27,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4895,955,958,'OP_ZoneInstanceCreateReplyMsg',28,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4896,955,958,'OP_ZoneInstanceDestroyedMsg',29,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4897,955,958,'OP_ExpectClientAsCharacterRequest',30,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4898,955,958,'OP_ZoneInfoMsg',31,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4899,955,958,'OP_DoneLoadingZoneResourcesMsg',32,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4900,955,958,'OP_DoneSendingInitialEntitiesMsg',33,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4901,955,958,'OP_DoneLoadingEntityResourcesMsg',34,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4902,955,958,'OP_PredictionUpdateMsg',35,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4903,955,958,'OP_UpdatePositionMsg',37,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4904,955,958,'OP_SetRemoteCmdsMsg',39,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4905,955,958,'OP_RemoteCmdMsg',40,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4906,955,958,'OP_GameWorldTimeMsg',41,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4907,955,958,'OP_MOTDMsg',42,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4908,955,958,'OP_ZoneMOTDMsg',43,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4909,955,958,'OP_AvatarCreatedMsg',44,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4910,955,958,'OP_AvatarDestroyedMsg',45,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4911,955,958,'OP_RequestCampMsg',47,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4912,955,958,'OP_CampStartedMsg',48,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4913,955,958,'OP_CampAbortedMsg',49,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4914,955,958,'OP_WhoQueryRequestMsg',50,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4915,955,958,'OP_WhoQueryReplyMsg',51,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4916,955,958,'OP_MonitorReplyMsg',52,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4917,955,958,'OP_MonitorCharacterListMsg',53,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4918,955,958,'OP_MonitorCharacterListRequestMsg',54,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4919,955,958,'OP_ClientCmdMsg',55,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4920,955,958,'OP_DispatchESMsg',56,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4921,955,958,'OP_DispatchClientCmdMsg',57,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4922,955,958,'OP_UpdateTargetMsg',58,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4923,955,958,'OP_UpdateTargetLocMsg',59,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4924,955,958,'OP_UpdateCharacterSheetMsg',60,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4925,955,958,'OP_UpdateSpellBookMsg',61,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4926,955,958,'OP_UpdateInventoryMsg',63,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4927,955,958,'OP_UpdateRecipeBookMsg',65,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4928,955,958,'OP_RequestRecipeDetailsMsg',66,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4929,955,958,'OP_RecipeDetailsMsg',67,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4930,955,958,'OP_UpdateSkillBookMsg',68,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4931,955,958,'OP_UpdateSkillsMsg',69,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4932,955,958,'OP_UpdateOpportunityMsg',70,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4933,955,958,'OP_ChangeZoneMsg',72,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4934,955,958,'OP_ClientTeleportRequestMsg',73,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4935,955,958,'OP_TeleportWithinZoneMsg',74,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4936,955,958,'OP_TeleportWithinZoneNoReloadMsg',75,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4937,955,958,'OP_MigrateClientToZoneRequestMsg',76,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4938,955,958,'OP_MigrateClientToZoneReplyMsg',77,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4939,955,958,'OP_ReadyToZoneMsg',78,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4940,955,958,'OP_RemoveClientFromGroupMsg',79,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4941,955,958,'OP_RemoveGroupFromGroupMsg',80,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4942,955,958,'OP_MakeGroupLeaderMsg',81,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4943,955,958,'OP_GroupCreatedMsg',82,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4944,955,958,'OP_GroupDestroyedMsg',83,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4945,955,958,'OP_GroupMemberAddedMsg',84,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4946,955,958,'OP_GroupMemberRemovedMsg',85,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4947,955,958,'OP_GroupRemovedFromGroupMsg',86,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4948,955,958,'OP_GroupLeaderChangedMsg',87,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4949,955,958,'OP_GroupResendOOZDataMsg',88,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4950,955,958,'OP_GroupSettingsChangedMsg',89,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4951,955,958,'OP_OutOfZoneMemberDataMsg',90,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4952,955,958,'OP_SendLatestRequestMsg',91,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4953,955,958,'OP_ClearDataMsg',92,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4954,955,958,'OP_SetSocialMsg',93,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4955,955,958,'OP_ESStatusMsg',94,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4956,955,958,'OP_ESZoneInstanceStatusMsg',95,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4957,955,958,'OP_ZonesStatusRequestMsg',96,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4958,955,958,'OP_ZonesStatusMsg',97,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4959,955,958,'OP_ESWeatherRequestMsg',98,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4960,955,958,'OP_ESWeatherRequestEndMsg',99,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4961,955,958,'OP_DialogSelectMsg',102,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4962,955,958,'OP_DialogCloseMsg',103,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4963,955,958,'OP_RemoveSpellEffectMsg',104,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4964,955,958,'OP_RemoveConcentrationMsg',105,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4965,955,958,'OP_QuestJournalOpenMsg',106,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4966,955,958,'OP_QuestJournalInspectMsg',107,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4967,955,958,'OP_QuestJournalSetVisibleMsg',108,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4968,955,958,'OP_QuestJournalWaypointMsg',109,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4969,955,958,'OP_CreateGuildRequestMsg',110,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4970,955,958,'OP_CreateGuildReplyMsg',111,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4971,955,958,'OP_GuildsayMsg',112,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4972,955,958,'OP_GuildUpdateMsg',115,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4973,955,958,'OP_DeleteGuildMsg',116,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4974,955,958,'OP_FellowshipExpMsg',117,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4975,955,958,'OP_ConsignmentCloseStoreMsg',118,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4976,955,958,'OP_ConsignItemRequestMsg',119,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4977,955,958,'OP_ConsignItemResponseMsg',120,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4978,955,958,'OP_PurchaseConsignmentRequestMsg',121,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4979,955,958,'OP_HouseDeletedRemotelyMsg',122,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4980,955,958,'OP_UpdateHouseDataMsg',123,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4981,955,958,'OP_UpdateHouseAccessDataMsg',124,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4982,955,958,'OP_PlayerHouseBaseScreenMsg',125,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4983,955,958,'OP_PlayerHousePurchaseScreenMsg',126,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4984,955,958,'OP_PlayerHouseAccessUpdateMsg',127,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4985,955,958,'OP_PlayerHouseDisplayStatusMsg',128,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4986,955,958,'OP_PlayerHouseCloseUIMsg',129,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4987,955,958,'OP_BuyPlayerHouseMsg',130,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4988,955,958,'OP_BuyPlayerHouseTintMsg',131,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4989,955,958,'OP_CollectAllHouseItemsMsg',132,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4990,955,958,'OP_RelinquishHouseMsg',133,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4991,955,958,'OP_EnterHouseMsg',134,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4992,955,958,'OP_ExitHouseMsg',135,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4993,955,958,'OP_HouseDefaultAccessSetMsg',136,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4994,955,958,'OP_HouseAccessSetMsg',137,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4995,955,958,'OP_HouseAccessRemoveMsg',138,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4996,955,958,'OP_PayHouseUpkeepMsg',139,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4997,955,958,'OP_MoveableObjectPlacementCriteri',141,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4998,955,958,'OP_EnterMoveObjectModeMsg',142,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (4999,955,958,'OP_PositionMoveableObject',143,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5000,955,958,'OP_CancelMoveObjectModeMsg',144,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5001,955,958,'OP_ShaderCustomizationMsg',145,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5002,955,958,'OP_ReplaceableSubMeshesMsg',146,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5003,955,958,'OP_HouseCustomizationScreenMsg',147,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5004,955,958,'OP_CustomizationPurchaseRequestMs',148,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5005,955,958,'OP_CustomizationSetRequestMsg',149,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5006,955,958,'OP_CustomizationReplyMsg',150,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5007,955,958,'OP_TintWidgetsMsg',151,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5008,955,958,'OP_ExamineConsignmentRequestMsg',152,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5009,955,958,'OP_ExamineConsignmentResponseMsg',153,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5010,955,958,'OP_UISettingsResponseMsg',154,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5011,955,958,'OP_UIResetMsg',155,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5012,955,958,'OP_KeymapLoadMsg',156,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5013,955,958,'OP_KeymapNoneMsg',157,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5014,955,958,'OP_KeymapDataMsg',158,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5015,955,958,'OP_KeymapSaveMsg',159,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5016,955,958,'OP_DispatchSpellCmdMsg',160,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5017,955,958,'OP_EntityVerbsRequestMsg',162,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5018,955,958,'OP_EntityVerbsReplyMsg',163,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5019,955,958,'OP_EntityVerbsVerbMsg',164,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5020,955,958,'OP_ChatRelationshipUpdateMsg',166,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5021,955,958,'OP_LootItemsRequestMsg',167,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5022,955,958,'OP_StoppedLootingMsg',168,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5023,955,958,'OP_SitMsg',169,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5024,955,958,'OP_StandMsg',170,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5025,955,958,'OP_SatMsg',171,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5026,955,958,'OP_StoodMsg',172,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5027,955,958,'OP_ClearForTakeOffMsg',173,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5028,955,958,'OP_ReadyForTakeOffMsg',174,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5029,955,958,'OP_ShowIllusionsMsg',175,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5030,955,958,'OP_HideIllusionsMsg',176,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5031,955,958,'OP_ExamineItemRequestMsg',177,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5032,955,958,'OP_ReadBookPageMsg',178,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5033,955,958,'OP_DefaultGroupOptionsRequestMsg',179,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5034,955,958,'OP_DefaultGroupOptionsMsg',180,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5035,955,958,'OP_GroupOptionsMsg',181,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5036,955,958,'OP_DisplayGroupOptionsScreenMsg',182,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5037,955,958,'OP_DisplayInnVisitScreenMsg',183,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5038,955,958,'OP_DumpSchedulerMsg',184,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5039,955,958,'OP_LSRequestPlayerDescMsg',185,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5040,955,958,'OP_LSCheckAcctLockMsg',186,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5041,955,958,'OP_WSAcctLockStatusMsg',187,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5042,955,958,'OP_RequestHelpRepathMsg',188,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5043,955,958,'OP_RequestTargetLocMsg',189,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5044,955,958,'OP_UpdateMotdMsg',190,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5045,955,958,'OP_PerformPlayerKnockbackMsg',191,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5046,955,958,'OP_PerformCameraShakeMsg',192,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5047,955,958,'OP_PopulateSkillMapsMsg',195,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5048,955,958,'OP_CancelledFeignMsg',197,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5049,955,958,'OP_SignalMsg',198,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5050,955,958,'OP_ShowCreateFromRecipeUIMsg',199,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5051,955,958,'OP_CancelCreateFromRecipeMsg',200,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5052,955,958,'OP_BeginItemCreationMsg',201,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5053,955,958,'OP_StopItemCreationMsg',202,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5054,955,958,'OP_ShowItemCreationProcessUIMsg',203,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5055,955,958,'OP_UpdateItemCreationProcessUIMsg',204,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5056,955,958,'OP_DisplayTSEventReactionMsg',205,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5057,955,958,'OP_ShowRecipeBookMsg',206,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5058,955,958,'OP_KnowledgebaseRequestMsg',207,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5059,955,958,'OP_KnowledgebaseResponseMsg',208,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5060,955,958,'OP_CSTicketHeaderRequestMsg',209,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5061,955,958,'OP_CSTicketInfoMsg',210,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5062,955,958,'OP_CSTicketCommentRequestMsg',211,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5063,955,958,'OP_CSTicketCommentResponseMsg',212,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5064,955,958,'OP_CSTicketCreateMsg',213,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5065,955,958,'OP_CSTicketAddCommentMsg',214,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5066,955,958,'OP_CSTicketDeleteMsg',215,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5067,955,958,'OP_CSTicketChangeNotificationMsg',216,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5068,955,958,'OP_WorldDataUpdateMsg',217,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5069,955,958,'OP_KnownLanguagesMsg',218,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5070,955,958,'OP_LsRequestClientCrashLogMsg',219,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5071,955,958,'OP_LsClientBaselogReplyMsg',220,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5072,955,958,'OP_LsClientCrashlogReplyMsg',221,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5073,955,958,'OP_LsClientAlertlogReplyMsg',222,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5074,955,958,'OP_LsClientVerifylogReplyMsg',223,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5075,955,958,'OP_ClientTeleportToLocationMsg',224,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5076,955,958,'OP_UpdateClientPredFlagsMsg',225,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5077,955,958,'OP_ChangeServerControlFlagMsg',226,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5078,955,958,'OP_CSToolsRequestMsg',227,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5079,955,958,'OP_CSToolsResponseMsg',228,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5080,955,958,'OP_AddSocialStructureStandingMsg',229,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5081,955,958,'OP_CreateBoatTransportsMsg',230,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5082,955,958,'OP_PositionBoatTransportMsg',231,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5083,955,958,'OP_MigrateBoatTransportMsg',232,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5084,955,958,'OP_MigrateBoatTransportReplyMsg',233,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5085,955,958,'OP_DisplayDebugNLLPointsMsg',234,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5086,955,958,'OP_ExamineInfoRequestMsg',235,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5087,955,958,'OP_QuickbarInitMsg',236,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5088,955,958,'OP_QuickbarUpdateMsg',237,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5089,955,958,'OP_MacroInitMsg',238,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5090,955,958,'OP_MacroUpdateMsg',239,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5091,955,958,'OP_QuestionnaireMsg',240,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5092,955,958,'OP_LevelChangedMsg',241,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5093,955,958,'OP_SpellGainedMsg',242,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5094,955,958,'OP_EncounterBrokenMsg',243,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5095,955,958,'OP_OnscreenMsgMsg',244,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5096,955,958,'OP_DisplayWarningMsg',245,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5097,955,958,'OP_ModifyGuildMsg',246,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5098,955,958,'OP_GuildEventMsg',247,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5099,955,958,'OP_GuildEventAddMsg',248,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5100,955,958,'OP_GuildEventActionMsg',249,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5101,955,958,'OP_GuildEventListMsg',250,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5102,955,958,'OP_RequestGuildEventDetailsMsg',251,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5103,955,958,'OP_GuildEventDetailsMsg',252,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5104,955,958,'OP_RequestGuildInfoMsg',253,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5105,955,958,'OP_GuildBankActionMsg',254,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5106,955,958,'OP_GuildBankActionResponseMsg',255,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5107,955,958,'OP_GuildBankItemDetailsRequestMsg',256,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5108,955,958,'OP_GuildBankItemDetailsResponseMs',257,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5109,955,958,'OP_GuildBankUpdateMsg',258,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5110,955,958,'OP_GuildBankEventListMsg',259,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5111,955,958,'OP_RequestGuildBankEventDetailsMs',260,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5112,955,958,'OP_RewardPackMsg',261,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5113,955,958,'OP_RenameGuildMsg',262,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5114,955,958,'OP_ZoneToFriendRequestMsg',264,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5115,955,958,'OP_ZoneToFriendReplyMsg',265,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5116,955,958,'OP_ChatCreateChannelMsg',266,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5117,955,958,'OP_ChatJoinChannelMsg',267,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5118,955,958,'OP_ChatWhoChannelMsg',268,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5119,955,958,'OP_ChatLeaveChannelMsg',269,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5120,955,958,'OP_ChatTellChannelMsg',270,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5121,955,958,'OP_ChatTellUserMsg',271,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5122,955,958,'OP_ChatToggleFriendMsg',272,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5123,955,958,'OP_ChatToggleIgnoreMsg',273,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5124,955,958,'OP_ChatSendFriendsMsg',274,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5125,955,958,'OP_ChatSendIgnoresMsg',275,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5126,955,958,'OP_QuestReward',302,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5127,955,958,'OP_ChatFiltersMsg',317,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5128,955,958,'OP_MailGetHeadersMsg',318,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5129,955,958,'OP_MailGetMessageMsg',319,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5130,955,958,'OP_MailSendMessageMsg',320,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5131,955,958,'OP_MailDeleteMessageMsg',321,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5132,955,958,'OP_MailGetHeadersReplyMsg',322,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5133,955,958,'OP_MailGetMessageReplyMsg',323,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5134,955,958,'OP_MailSendMessageReplyMsg',324,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5135,955,958,'OP_MailCommitSendMessageMsg',325,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5136,955,958,'OP_MailSendSystemMessageMsg',326,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5137,955,958,'OP_MailRemoveAttachFromMailMsg',327,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5138,955,958,'OP_WaypointRequestMsg',329,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5139,955,958,'OP_WaypointReplyMsg',330,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5140,955,958,'OP_WaypointSelectMsg',331,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5141,955,958,'OP_WaypointUpdateMsg',332,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5142,955,958,'OP_CharNameChangedMsg',333,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5143,955,958,'OP_ShowZoneTeleporterDestinations',334,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5144,955,958,'OP_SelectZoneTeleporterDestinatio',335,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5145,955,958,'OP_ReloadLocalizedTxtMsg',336,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5146,955,958,'OP_RequestGuildMembershipMsg',337,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5147,955,958,'OP_GuildMembershipResponseMsg',338,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5148,955,958,'OP_LeaveGuildNotifyMsg',339,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5149,955,958,'OP_JoinGuildNotifyMsg',340,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5150,955,958,'OP_AvatarUpdateMsg',342,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5151,955,958,'OP_BioUpdateMsg',343,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5152,955,958,'OP_InspectPlayerMsg',344,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5153,955,958,'OP_WSServerLockMsg',345,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5154,955,958,'OP_LSServerLockMsg',346,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5155,955,958,'OP_WSServerHideMsg',347,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5156,955,958,'OP_CsCategoryRequestMsg',348,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5157,955,958,'OP_CsCategoryResponseMsg',349,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5158,955,958,'OP_KnowledgeWindowSlotMappingMsg',350,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5159,955,958,'OP_LFGUpdateMsg',351,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5160,955,958,'OP_AFKUpdateMsg',352,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5161,955,958,'OP_AnonUpdateMsg',353,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5162,955,958,'OP_UpdateActivePublicZonesMsg',354,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5163,955,958,'OP_UnknownNpcMsg',355,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5164,955,958,'OP_PromoFlagsDetailsMsg',356,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5165,955,958,'OP_ConsignViewCreateMsg',357,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5166,955,958,'OP_ConsignViewGetPageMsg',358,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5167,955,958,'OP_ConsignViewReleaseMsg',359,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5168,955,958,'OP_ConsignRemoveItemsMsg',360,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5169,955,958,'OP_UpdateDebugRadiiMsg',361,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5170,955,958,'OP_SnoopMsg',362,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5171,955,958,'OP_ReportMsg',363,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5172,955,958,'OP_UpdateRaidMsg',364,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5173,955,958,'OP_ConsignViewSortMsg',365,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5174,955,958,'OP_TitleUpdateMsg',366,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5175,955,958,'OP_ClientFellMsg',367,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5176,955,958,'OP_ClientInDeathRegionMsg',368,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5177,955,958,'OP_CampClientMsg',369,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5178,955,958,'OP_CSToolAccessResponseMsg',370,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5179,955,958,'OP_TrackingUpdateMsg',371,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5180,955,958,'OP_BeginTrackingMsg',372,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5181,955,958,'OP_StopTrackingMsg',373,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5182,955,958,'OP_GetAvatarAccessRequestForCSToo',374,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5183,955,958,'OP_AdvancementRequestMsg',375,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5184,955,958,'OP_UpdateAvgFrameTimeMsg',376,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5185,955,958,'OP_MapFogDataInitMsg',377,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5186,955,958,'OP_MapFogDataUpdateMsg',378,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5187,955,958,'OP_CloseGroupInviteWindowMsg',379,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5188,955,958,'OP_UpdateGroupMemberDataMsg',380,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5189,955,958,'OP_WorldPingMsg',381,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5190,955,958,'OP_MoveLogUpdateMsg',382,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5191,955,958,'OP_OfferQuestMsg',383,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5192,955,958,'OP_WorldShutdownUpdateMsg',384,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5193,955,958,'OP_DisplayMailScreenMsg',385,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5194,955,958,'OP_ClientIdleBeginMsg',386,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5195,955,958,'OP_ClientIdleEndMsg',387,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5196,955,958,'OP_PurchaseConsignmentLoreCheckRe',388,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5197,955,958,'OP_NotifyApprenticeStoppedMentori',389,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5198,955,958,'OP_CorruptedClientMsg',390,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5199,955,958,'OP_WorldDataChangeMsg',391,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5200,955,958,'OP_MailEventNotificationMsg',392,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5201,955,958,'OP_RestartZoneMsg',393,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5202,955,958,'OP_FlightPathsMsg',394,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5203,955,958,'OP_CharacterLinkdeadMsg',395,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5204,955,958,'OP_CharTransferStartRequestMsg',396,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5205,955,958,'OP_CharTransferStartReplyMsg',397,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5206,955,958,'OP_CharTransferRequestMsg',398,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5207,955,958,'OP_CharTransferReplyMsg',399,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5208,955,958,'OP_CharTransferRollbackRequestMsg',400,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5209,955,958,'OP_CharTransferCommitRequestMsg',401,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5210,955,958,'OP_CharTransferRollbackReplyMsg',402,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5211,955,958,'OP_CharTransferCommitReplyMsg',403,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5212,955,958,'OP_GetCharacterSerializedRequestM',404,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5213,955,958,'OP_GetCharacterSerializedReplyMsg',405,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5214,955,958,'OP_CreateCharFromCBBRequestMsg',406,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5215,955,958,'OP_CreateCharFromCBBReplyMsg',407,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5216,955,958,'OP_HousingDataChangedMsg',408,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5217,955,958,'OP_HousingRestoreMsg',409,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5218,955,958,'OP_AuctionItem',410,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5219,955,958,'OP_AuctionItemReply',411,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5220,955,958,'OP_AuctionCoin',412,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5221,955,958,'OP_AuctionCoinReply',413,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5222,955,958,'OP_AuctionCharacter',414,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5223,955,958,'OP_AuctionCharacterReply',415,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5224,955,958,'OP_AuctionCommitMsg',416,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5225,955,958,'OP_AuctionAbortMsg',417,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5226,955,958,'OP_CharTransferValidateRequestMsg',418,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5227,955,958,'OP_CharTransferValidateReplyMsg',419,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5228,955,958,'OP_RaceRestrictionMsg',420,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5229,955,958,'OP_SetInstanceDisplayNameMsg',421,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5230,955,958,'OP_GetAuctionAssetIDMsg',422,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5231,955,958,'OP_GetAuctionAssetIDReplyMsg',423,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5232,955,958,'OP_ResendWorldChannelsMsg',424,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5233,955,958,'OP_DisplayExchangeScreenMsg',425,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5234,955,958,'OP_ArenaGameTypesMsg',426,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5235,955,958,'OP_AuditAuctionEventMsg',428,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5236,955,958,'OP_InviteRequestMsg',430,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5237,955,958,'OP_InviteResponseMsg',431,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5238,955,958,'OP_InviteTargetResponseMsg',432,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5239,955,958,'OP_InspectPlayerRequestMsg',433,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5240,955,958,'OP_DispatchMsg',434,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5241,955,958,'OP_DisplayEventMsg',435,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5242,955,958,'OP_PrePossessionMsg',436,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5243,955,958,'OP_PostPossessionMsg',437,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5244,955,958,'OP_AdventureList',462,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5245,955,958,'OP_CancelSpellCast',463,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5246,955,958,'OP_AttackAllowed',475,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5247,955,958,'OP_AttackNotAllowed',476,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5248,955,958,'OP_DressingRoom',483,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5249,955,958,'OP_SkillInfoRequest',487,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5250,955,958,'OP_SkillInfoResponse',488,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5251,955,958,'OP_MapRequest',493,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5252,955,958,'OP_EqUnknown',506,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5253,955,958,'OP_EqHearChatCmd',507,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5254,955,958,'OP_EqDisplayTextCmd',508,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5255,955,958,'OP_EqCreateGhostCmd',509,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5256,955,958,'OP_EqCreateWidgetCmd',510,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5257,955,958,'OP_EqCreateSignWidgetCmd',511,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5258,955,958,'OP_EqDestroyGhostCmd',512,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5259,955,958,'OP_EqUpdateGhostCmd',513,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5260,955,958,'OP_EqSetControlGhostCmd',514,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5261,955,958,'OP_EqSetPOVGhostCmd',515,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5262,955,958,'OP_EqHearCombatCmd',516,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5263,955,958,'OP_EqHearSpellCastCmd',517,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5264,955,958,'OP_EqHearSpellInterruptCmd',520,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5265,955,958,'OP_EqHearSpellFizzleCmd',521,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5266,955,958,'OP_EqHearConsiderCmd',522,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5267,955,958,'OP_EqUpdateSubClassesCmd',523,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5268,955,958,'OP_EqCreateListBoxCmd',524,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5269,955,958,'OP_EqSetDebugPathPointsCmd',525,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5270,955,958,'OP_EqCannedEmoteCmd',527,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5271,955,958,'OP_EqStateCmd',528,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5272,955,958,'OP_EqPlaySoundCmd',529,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5273,955,958,'OP_EqPlaySound3DCmd',530,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5274,955,958,'OP_EqPlayVoiceCmd',531,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5275,955,958,'OP_EqHearDrowningCmd',532,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5276,955,958,'OP_EqHearDeathCmd',533,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5277,955,958,'OP_EqGroupMemberRemovedCmd',534,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5278,955,958,'OP_EqHearChainEffectCmd',535,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5279,955,958,'OP_EqReceiveOfferCmd',536,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5280,955,958,'OP_EqInspectPCResultsCmd',537,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5281,955,958,'OP_EqDrawablePathGraphCmd',538,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5282,955,958,'OP_EqDialogOpenCmd',539,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5283,955,958,'OP_EqDialogCloseCmd',540,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5284,955,958,'OP_EqFactionUpdateCmd',541,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5285,955,958,'OP_EqCollectionUpdateCmd',542,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5286,955,958,'OP_EqCollectionFilterCmd',543,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5287,955,958,'OP_EqCollectionItemCmd',544,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5288,955,958,'OP_EqQuestJournalUpdateCmd',545,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5289,955,958,'OP_EqQuestJournalReplyCmd',547,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5290,955,958,'OP_EqQuestGroupCmd',548,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5291,955,958,'OP_EqUpdateMerchantCmd',549,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5292,955,958,'OP_EqUpdateStoreCmd',550,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5293,955,958,'OP_EqUpdatePlayerTradeCmd',551,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5294,955,958,'OP_EqHelpPathCmd',552,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5295,955,958,'OP_EqHelpPathClearCmd',553,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5296,955,958,'OP_EqUpdateBankCmd',554,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5297,955,958,'OP_EqExamineInfoCmd',555,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5298,955,958,'OP_EqCloseWindowCmd',556,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5299,955,958,'OP_EqUpdateLootCmd',557,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5300,955,958,'OP_EqJunctionListCmd',558,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5301,955,958,'OP_EqShowDeathWindowCmd',559,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5302,955,958,'OP_EqDisplaySpellFailCmd',560,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5303,955,958,'OP_EqSpellCastStartCmd',561,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5304,955,958,'OP_EqSpellCastEndCmd',562,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5305,955,958,'OP_EqResurrectedCmd',563,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5306,955,958,'OP_EqChoiceWinCmd',564,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5307,955,958,'OP_EqSetDefaultVerbCmd',565,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5308,955,958,'OP_EqInstructionWindowCmd',567,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5309,955,958,'OP_EqInstructionWindowCloseCmd',568,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5310,955,958,'OP_EqInstructionWindowGoalCmd',569,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5311,955,958,'OP_EqInstructionWindowTaskCmd',570,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5312,955,958,'OP_EqEnableGameEventCmd',571,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5313,955,958,'OP_EqShowWindowCmd',572,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5314,955,958,'OP_EqEnableWindowCmd',573,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5315,955,958,'OP_EqFlashWindowCmd',574,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5316,955,958,'OP_EqHearPlayFlavorCmd',575,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5317,955,958,'OP_EqUpdateSignWidgetCmd',577,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5318,955,958,'OP_EqDebugPVDCmd',578,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5319,955,958,'OP_EqShowBookCmd',579,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5320,955,958,'OP_EqQuestionnaireCmd',580,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5321,955,958,'OP_EqGetProbsCmd',581,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5322,955,958,'OP_EqHearHealCmd',582,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5323,955,958,'OP_EqChatChannelUpdateCmd',583,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5324,955,958,'OP_EqWhoChannelQueryReplyCmd',584,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5325,955,958,'OP_EqAvailWorldChannelsCmd',585,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5326,955,958,'OP_EqUpdateTargetCmd',586,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5327,955,958,'OP_EqConsignmentItemsCmd',588,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5328,955,958,'OP_EqStartBrokerCmd',590,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5329,955,958,'OP_EqMapExplorationCmd',591,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5330,955,958,'OP_EqStoreLogCmd',592,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5331,955,958,'OP_EqSpellMoveToRangeAndRetryCmd',593,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5332,955,958,'OP_EqUpdatePlayerMailCmd',594,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5333,955,958,'OP_EqArenaResultsCmd',595,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5334,955,958,'OP_EqGuildBankEventActionCmd',596,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5335,955,958,'OP_EqGuildBankExamineInfoCmd',597,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5336,955,958,'OP_EqHearSpellNoLandCmd',598,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5337,955,958,'OP_Lottery',602,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5338,955,958,'OP_GuildRecruitingMemberInfo',603,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5339,955,958,'OP_GuildRecruiting',604,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5340,955,958,'OP_GuildRecruitingDetails',605,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5341,955,958,'OP_GuildRecruitingImage',606,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5342,955,958,'OP_PointOfInterest',627,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5343,955,958,'OP_TraitsList',629,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5344,955,958,'OP_RecipeList',638,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5345,955,958,'OP_CharacterAchievements',655,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5346,955,958,'OP_AddClientToGroupMsg',1023,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5347,955,958,'OP_AddGroupToGroupMsg',1023,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5348,955,958,'OP_GuildKickMsg',1023,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5349,955,958,'OP_ProcessScriptMsg',1023,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5350,955,958,'OP_ProcessWorkspaceMsg',1023,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5351,955,958,'OP_PurchaseConsignmentResponseMsg',1023,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5352,955,958,'OP_QuickbarAddMsg',1023,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5353,955,958,'OP_SkillSlotMapping',1023,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5354,955,958,'OP_Unknown',10027,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5355,955,958,'OP_WSWeatherUpdateMsg',10028,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5356,959,959,'OP_LoginRequestMsg',0,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5357,959,959,'OP_LoginByNumRequestMsg',1,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5358,959,959,'OP_WSLoginRequestMsg',2,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5359,959,959,'OP_ESLoginRequestMsg',3,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5360,959,959,'OP_LoginReplyMsg',4,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5361,959,959,'OP_WSStatusReplyMsg',5,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5362,959,959,'OP_WorldStatusChangeMsg',6,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5363,959,959,'OP_AllWSDescRequestMsg',7,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5364,959,959,'OP_WorldListMsg',8,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5365,959,959,'OP_AllCharactersDescRequestMsg',9,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5366,959,959,'OP_AllCharactersDescReplyMsg',10,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5367,959,959,'OP_CreateCharacterRequestMsg',11,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5368,959,959,'OP_CreateCharacterReplyMsg',12,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5369,959,959,'OP_WSCreateCharacterRequestMsg',13,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5370,959,959,'OP_WSCreateCharacterReplyMsg',14,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5371,959,959,'OP_ReskinCharacterRequestMsg',15,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5372,959,959,'OP_DeleteCharacterRequestMsg',16,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5373,959,959,'OP_DeleteCharacterReplyMsg',17,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5374,959,959,'OP_PlayCharacterRequestMsg',18,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5375,959,959,'OP_PlayCharacterReplyMsg',19,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5376,959,959,'OP_ExpectClientAsCharacterReplyMs',22,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5377,959,959,'OP_ServerPlayCharacterRequestMsg',23,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5378,959,959,'OP_ServerPlayCharacterReplyMsg',24,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5379,959,959,'OP_ESInitMsg',25,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5380,959,959,'OP_ESReadyForClientsMsg',26,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5381,959,959,'OP_CreateZoneInstanceMsg',27,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5382,959,959,'OP_ZoneInstanceCreateReplyMsg',28,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5383,959,959,'OP_ZoneInstanceDestroyedMsg',29,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5384,959,959,'OP_ExpectClientAsCharacterRequest',30,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5385,959,959,'OP_ZoneInfoMsg',31,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5386,959,959,'OP_DoneLoadingZoneResourcesMsg',32,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5387,959,959,'OP_DoneSendingInitialEntitiesMsg',33,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5388,959,959,'OP_DoneLoadingEntityResourcesMsg',34,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5389,959,959,'OP_PredictionUpdateMsg',35,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5390,959,959,'OP_UpdatePositionMsg',37,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5391,959,959,'OP_SetRemoteCmdsMsg',39,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5392,959,959,'OP_RemoteCmdMsg',40,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5393,959,959,'OP_GameWorldTimeMsg',41,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5394,959,959,'OP_MOTDMsg',42,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5395,959,959,'OP_ZoneMOTDMsg',43,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5396,959,959,'OP_AvatarCreatedMsg',44,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5397,959,959,'OP_AvatarDestroyedMsg',45,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5398,959,959,'OP_RequestCampMsg',47,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5399,959,959,'OP_CampStartedMsg',48,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5400,959,959,'OP_CampAbortedMsg',49,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5401,959,959,'OP_WhoQueryRequestMsg',50,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5402,959,959,'OP_WhoQueryReplyMsg',51,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5403,959,959,'OP_MonitorReplyMsg',52,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5404,959,959,'OP_MonitorCharacterListMsg',53,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5405,959,959,'OP_MonitorCharacterListRequestMsg',54,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5406,959,959,'OP_ClientCmdMsg',55,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5407,959,959,'OP_DispatchESMsg',56,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5408,959,959,'OP_DispatchClientCmdMsg',57,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5409,959,959,'OP_UpdateTargetMsg',58,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5410,959,959,'OP_UpdateTargetLocMsg',59,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5411,959,959,'OP_UpdateCharacterSheetMsg',60,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5412,959,959,'OP_UpdateSpellBookMsg',61,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5413,959,959,'OP_UpdateInventoryMsg',63,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5414,959,959,'OP_UpdateRecipeBookMsg',65,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5415,959,959,'OP_RequestRecipeDetailsMsg',66,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5416,959,959,'OP_RecipeDetailsMsg',67,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5417,959,959,'OP_UpdateSkillBookMsg',68,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5418,959,959,'OP_UpdateSkillsMsg',69,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5419,959,959,'OP_UpdateOpportunityMsg',70,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5420,959,959,'OP_ChangeZoneMsg',72,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5421,959,959,'OP_ClientTeleportRequestMsg',73,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5422,959,959,'OP_TeleportWithinZoneMsg',74,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5423,959,959,'OP_TeleportWithinZoneNoReloadMsg',75,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5424,959,959,'OP_MigrateClientToZoneRequestMsg',76,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5425,959,959,'OP_MigrateClientToZoneReplyMsg',77,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5426,959,959,'OP_ReadyToZoneMsg',78,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5427,959,959,'OP_RemoveClientFromGroupMsg',79,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5428,959,959,'OP_RemoveGroupFromGroupMsg',80,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5429,959,959,'OP_MakeGroupLeaderMsg',81,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5430,959,959,'OP_GroupCreatedMsg',82,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5431,959,959,'OP_GroupDestroyedMsg',83,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5432,959,959,'OP_GroupMemberAddedMsg',84,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5433,959,959,'OP_GroupMemberRemovedMsg',85,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5434,959,959,'OP_GroupRemovedFromGroupMsg',86,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5435,959,959,'OP_GroupLeaderChangedMsg',87,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5436,959,959,'OP_GroupResendOOZDataMsg',88,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5437,959,959,'OP_GroupSettingsChangedMsg',89,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5438,959,959,'OP_OutOfZoneMemberDataMsg',90,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5439,959,959,'OP_SendLatestRequestMsg',91,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5440,959,959,'OP_ClearDataMsg',92,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5441,959,959,'OP_SetSocialMsg',93,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5442,959,959,'OP_ESStatusMsg',94,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5443,959,959,'OP_ESZoneInstanceStatusMsg',95,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5444,959,959,'OP_ZonesStatusRequestMsg',96,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5445,959,959,'OP_ZonesStatusMsg',97,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5446,959,959,'OP_ESWeatherRequestMsg',98,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5447,959,959,'OP_ESWeatherRequestEndMsg',99,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5448,959,959,'OP_DialogSelectMsg',102,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5449,959,959,'OP_DialogCloseMsg',103,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5450,959,959,'OP_RemoveSpellEffectMsg',104,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5451,959,959,'OP_RemoveConcentrationMsg',105,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5452,959,959,'OP_QuestJournalOpenMsg',106,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5453,959,959,'OP_QuestJournalInspectMsg',107,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5454,959,959,'OP_QuestJournalSetVisibleMsg',108,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5455,959,959,'OP_QuestJournalWaypointMsg',109,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5456,959,959,'OP_CreateGuildRequestMsg',110,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5457,959,959,'OP_CreateGuildReplyMsg',111,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5458,959,959,'OP_GuildsayMsg',112,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5459,959,959,'OP_GuildUpdateMsg',115,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5460,959,959,'OP_DeleteGuildMsg',116,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5461,959,959,'OP_FellowshipExpMsg',117,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5462,959,959,'OP_ConsignmentCloseStoreMsg',118,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5463,959,959,'OP_ConsignItemRequestMsg',119,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5464,959,959,'OP_ConsignItemResponseMsg',120,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5465,959,959,'OP_PurchaseConsignmentRequestMsg',121,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5466,959,959,'OP_HouseDeletedRemotelyMsg',122,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5467,959,959,'OP_UpdateHouseDataMsg',123,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5468,959,959,'OP_UpdateHouseAccessDataMsg',124,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5469,959,959,'OP_PlayerHouseBaseScreenMsg',125,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5470,959,959,'OP_PlayerHousePurchaseScreenMsg',126,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5471,959,959,'OP_PlayerHouseAccessUpdateMsg',127,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5472,959,959,'OP_PlayerHouseDisplayStatusMsg',128,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5473,959,959,'OP_PlayerHouseCloseUIMsg',129,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5474,959,959,'OP_BuyPlayerHouseMsg',130,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5475,959,959,'OP_BuyPlayerHouseTintMsg',131,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5476,959,959,'OP_CollectAllHouseItemsMsg',132,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5477,959,959,'OP_RelinquishHouseMsg',133,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5478,959,959,'OP_EnterHouseMsg',134,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5479,959,959,'OP_ExitHouseMsg',135,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5480,959,959,'OP_HouseDefaultAccessSetMsg',136,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5481,959,959,'OP_HouseAccessSetMsg',137,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5482,959,959,'OP_HouseAccessRemoveMsg',138,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5483,959,959,'OP_PayHouseUpkeepMsg',139,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5484,959,959,'OP_MoveableObjectPlacementCriteri',141,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5485,959,959,'OP_EnterMoveObjectModeMsg',142,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5486,959,959,'OP_PositionMoveableObject',143,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5487,959,959,'OP_CancelMoveObjectModeMsg',144,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5488,959,959,'OP_ShaderCustomizationMsg',145,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5489,959,959,'OP_ReplaceableSubMeshesMsg',146,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5490,959,959,'OP_HouseCustomizationScreenMsg',147,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5491,959,959,'OP_CustomizationPurchaseRequestMs',148,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5492,959,959,'OP_CustomizationSetRequestMsg',149,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5493,959,959,'OP_CustomizationReplyMsg',150,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5494,959,959,'OP_TintWidgetsMsg',151,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5495,959,959,'OP_ExamineConsignmentRequestMsg',152,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5496,959,959,'OP_ExamineConsignmentResponseMsg',153,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5497,959,959,'OP_UISettingsResponseMsg',154,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5498,959,959,'OP_UIResetMsg',155,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5499,959,959,'OP_KeymapLoadMsg',156,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5500,959,959,'OP_KeymapNoneMsg',157,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5501,959,959,'OP_KeymapDataMsg',158,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5502,959,959,'OP_KeymapSaveMsg',159,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5503,959,959,'OP_DispatchSpellCmdMsg',160,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5504,959,959,'OP_EntityVerbsRequestMsg',162,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5505,959,959,'OP_EntityVerbsReplyMsg',163,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5506,959,959,'OP_EntityVerbsVerbMsg',164,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5507,959,959,'OP_ChatRelationshipUpdateMsg',166,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5508,959,959,'OP_LootItemsRequestMsg',167,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5509,959,959,'OP_StoppedLootingMsg',168,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5510,959,959,'OP_SitMsg',169,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5511,959,959,'OP_StandMsg',170,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5512,959,959,'OP_SatMsg',171,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5513,959,959,'OP_StoodMsg',172,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5514,959,959,'OP_ClearForTakeOffMsg',173,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5515,959,959,'OP_ReadyForTakeOffMsg',174,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5516,959,959,'OP_ShowIllusionsMsg',175,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5517,959,959,'OP_HideIllusionsMsg',176,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5518,959,959,'OP_ExamineItemRequestMsg',177,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5519,959,959,'OP_ReadBookPageMsg',178,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5520,959,959,'OP_DefaultGroupOptionsRequestMsg',179,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5521,959,959,'OP_DefaultGroupOptionsMsg',180,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5522,959,959,'OP_GroupOptionsMsg',181,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5523,959,959,'OP_DisplayGroupOptionsScreenMsg',182,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5524,959,959,'OP_DisplayInnVisitScreenMsg',183,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5525,959,959,'OP_DumpSchedulerMsg',184,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5526,959,959,'OP_LSRequestPlayerDescMsg',185,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5527,959,959,'OP_LSCheckAcctLockMsg',186,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5528,959,959,'OP_WSAcctLockStatusMsg',187,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5529,959,959,'OP_RequestHelpRepathMsg',188,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5530,959,959,'OP_RequestTargetLocMsg',189,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5531,959,959,'OP_UpdateMotdMsg',190,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5532,959,959,'OP_PerformPlayerKnockbackMsg',191,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5533,959,959,'OP_PerformCameraShakeMsg',192,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5534,959,959,'OP_PopulateSkillMapsMsg',195,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5535,959,959,'OP_CancelledFeignMsg',197,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5536,959,959,'OP_SignalMsg',198,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5537,959,959,'OP_ShowCreateFromRecipeUIMsg',199,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5538,959,959,'OP_CancelCreateFromRecipeMsg',200,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5539,959,959,'OP_BeginItemCreationMsg',201,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5540,959,959,'OP_StopItemCreationMsg',202,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5541,959,959,'OP_ShowItemCreationProcessUIMsg',203,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5542,959,959,'OP_UpdateItemCreationProcessUIMsg',204,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5543,959,959,'OP_DisplayTSEventReactionMsg',205,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5544,959,959,'OP_ShowRecipeBookMsg',206,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5545,959,959,'OP_KnowledgebaseRequestMsg',207,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5546,959,959,'OP_KnowledgebaseResponseMsg',208,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5547,959,959,'OP_CSTicketHeaderRequestMsg',209,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5548,959,959,'OP_CSTicketInfoMsg',210,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5549,959,959,'OP_CSTicketCommentRequestMsg',211,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5550,959,959,'OP_CSTicketCommentResponseMsg',212,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5551,959,959,'OP_CSTicketCreateMsg',213,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5552,959,959,'OP_CSTicketAddCommentMsg',214,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5553,959,959,'OP_CSTicketDeleteMsg',215,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5554,959,959,'OP_CSTicketChangeNotificationMsg',216,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5555,959,959,'OP_WorldDataUpdateMsg',217,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5556,959,959,'OP_KnownLanguagesMsg',218,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5557,959,959,'OP_LsRequestClientCrashLogMsg',219,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5558,959,959,'OP_LsClientBaselogReplyMsg',220,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5559,959,959,'OP_LsClientCrashlogReplyMsg',221,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5560,959,959,'OP_LsClientAlertlogReplyMsg',222,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5561,959,959,'OP_LsClientVerifylogReplyMsg',223,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5562,959,959,'OP_ClientTeleportToLocationMsg',224,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5563,959,959,'OP_UpdateClientPredFlagsMsg',225,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5564,959,959,'OP_ChangeServerControlFlagMsg',226,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5565,959,959,'OP_CSToolsRequestMsg',227,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5566,959,959,'OP_CSToolsResponseMsg',228,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5567,959,959,'OP_AddSocialStructureStandingMsg',229,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5568,959,959,'OP_CreateBoatTransportsMsg',230,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5569,959,959,'OP_PositionBoatTransportMsg',231,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5570,959,959,'OP_MigrateBoatTransportMsg',232,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5571,959,959,'OP_MigrateBoatTransportReplyMsg',233,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5572,959,959,'OP_DisplayDebugNLLPointsMsg',234,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5573,959,959,'OP_ExamineInfoRequestMsg',235,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5574,959,959,'OP_QuickbarInitMsg',236,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5575,959,959,'OP_QuickbarUpdateMsg',237,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5576,959,959,'OP_MacroInitMsg',238,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5577,959,959,'OP_MacroUpdateMsg',239,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5578,959,959,'OP_QuestionnaireMsg',240,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5579,959,959,'OP_LevelChangedMsg',241,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5580,959,959,'OP_SpellGainedMsg',242,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5581,959,959,'OP_EncounterBrokenMsg',243,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5582,959,959,'OP_OnscreenMsgMsg',244,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5583,959,959,'OP_DisplayWarningMsg',245,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5584,959,959,'OP_ModifyGuildMsg',246,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5585,959,959,'OP_GuildEventMsg',247,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5586,959,959,'OP_GuildEventAddMsg',248,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5587,959,959,'OP_GuildEventActionMsg',249,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5588,959,959,'OP_GuildEventListMsg',250,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5589,959,959,'OP_RequestGuildEventDetailsMsg',251,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5590,959,959,'OP_GuildEventDetailsMsg',252,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5591,959,959,'OP_RequestGuildInfoMsg',253,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5592,959,959,'OP_GuildBankActionMsg',254,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5593,959,959,'OP_GuildBankActionResponseMsg',255,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5594,959,959,'OP_GuildBankItemDetailsRequestMsg',256,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5595,959,959,'OP_GuildBankItemDetailsResponseMs',257,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5596,959,959,'OP_GuildBankUpdateMsg',258,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5597,959,959,'OP_GuildBankEventListMsg',259,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5598,959,959,'OP_RequestGuildBankEventDetailsMs',260,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5599,959,959,'OP_RewardPackMsg',261,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5600,959,959,'OP_RenameGuildMsg',262,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5601,959,959,'OP_ZoneToFriendRequestMsg',264,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5602,959,959,'OP_ZoneToFriendReplyMsg',265,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5603,959,959,'OP_ChatCreateChannelMsg',266,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5604,959,959,'OP_ChatJoinChannelMsg',267,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5605,959,959,'OP_ChatWhoChannelMsg',268,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5606,959,959,'OP_ChatLeaveChannelMsg',269,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5607,959,959,'OP_ChatTellChannelMsg',270,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5608,959,959,'OP_ChatTellUserMsg',271,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5609,959,959,'OP_ChatToggleFriendMsg',272,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5610,959,959,'OP_ChatToggleIgnoreMsg',273,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5611,959,959,'OP_ChatSendFriendsMsg',274,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5612,959,959,'OP_ChatSendIgnoresMsg',275,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5613,959,959,'OP_QuestReward',302,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5614,959,959,'OP_ChatFiltersMsg',317,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5615,959,959,'OP_MailGetHeadersMsg',318,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5616,959,959,'OP_MailGetMessageMsg',319,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5617,959,959,'OP_MailSendMessageMsg',320,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5618,959,959,'OP_MailDeleteMessageMsg',321,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5619,959,959,'OP_MailGetHeadersReplyMsg',322,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5620,959,959,'OP_MailGetMessageReplyMsg',323,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5621,959,959,'OP_MailSendMessageReplyMsg',324,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5622,959,959,'OP_MailCommitSendMessageMsg',325,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5623,959,959,'OP_MailSendSystemMessageMsg',326,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5624,959,959,'OP_MailRemoveAttachFromMailMsg',327,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5625,959,959,'OP_WaypointRequestMsg',329,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5626,959,959,'OP_WaypointReplyMsg',330,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5627,959,959,'OP_WaypointSelectMsg',331,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5628,959,959,'OP_WaypointUpdateMsg',332,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5629,959,959,'OP_CharNameChangedMsg',333,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5630,959,959,'OP_ShowZoneTeleporterDestinations',334,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5631,959,959,'OP_SelectZoneTeleporterDestinatio',335,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5632,959,959,'OP_ReloadLocalizedTxtMsg',336,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5633,959,959,'OP_RequestGuildMembershipMsg',337,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5634,959,959,'OP_GuildMembershipResponseMsg',338,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5635,959,959,'OP_LeaveGuildNotifyMsg',339,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5636,959,959,'OP_JoinGuildNotifyMsg',340,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5637,959,959,'OP_AvatarUpdateMsg',342,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5638,959,959,'OP_BioUpdateMsg',343,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5639,959,959,'OP_InspectPlayerMsg',344,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5640,959,959,'OP_WSServerLockMsg',345,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5641,959,959,'OP_LSServerLockMsg',346,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5642,959,959,'OP_WSServerHideMsg',347,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5643,959,959,'OP_CsCategoryRequestMsg',348,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5644,959,959,'OP_CsCategoryResponseMsg',349,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5645,959,959,'OP_KnowledgeWindowSlotMappingMsg',350,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5646,959,959,'OP_LFGUpdateMsg',351,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5647,959,959,'OP_AFKUpdateMsg',352,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5648,959,959,'OP_AnonUpdateMsg',353,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5649,959,959,'OP_UpdateActivePublicZonesMsg',354,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5650,959,959,'OP_UnknownNpcMsg',355,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5651,959,959,'OP_PromoFlagsDetailsMsg',356,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5652,959,959,'OP_ConsignViewCreateMsg',357,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5653,959,959,'OP_ConsignViewGetPageMsg',358,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5654,959,959,'OP_ConsignViewReleaseMsg',359,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5655,959,959,'OP_ConsignRemoveItemsMsg',360,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5656,959,959,'OP_UpdateDebugRadiiMsg',361,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5657,959,959,'OP_SnoopMsg',362,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5658,959,959,'OP_ReportMsg',363,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5659,959,959,'OP_UpdateRaidMsg',364,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5660,959,959,'OP_ConsignViewSortMsg',365,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5661,959,959,'OP_TitleUpdateMsg',366,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5662,959,959,'OP_ClientFellMsg',367,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5663,959,959,'OP_ClientInDeathRegionMsg',368,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5664,959,959,'OP_CampClientMsg',369,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5665,959,959,'OP_CSToolAccessResponseMsg',370,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5666,959,959,'OP_TrackingUpdateMsg',371,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5667,959,959,'OP_BeginTrackingMsg',372,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5668,959,959,'OP_StopTrackingMsg',373,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5669,959,959,'OP_GetAvatarAccessRequestForCSToo',374,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5670,959,959,'OP_AdvancementRequestMsg',375,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5671,959,959,'OP_UpdateAvgFrameTimeMsg',376,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5672,959,959,'OP_MapFogDataInitMsg',377,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5673,959,959,'OP_MapFogDataUpdateMsg',378,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5674,959,959,'OP_CloseGroupInviteWindowMsg',379,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5675,959,959,'OP_UpdateGroupMemberDataMsg',380,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5676,959,959,'OP_WorldPingMsg',381,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5677,959,959,'OP_MoveLogUpdateMsg',382,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5678,959,959,'OP_OfferQuestMsg',383,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5679,959,959,'OP_WorldShutdownUpdateMsg',384,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5680,959,959,'OP_DisplayMailScreenMsg',385,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5681,959,959,'OP_ClientIdleBeginMsg',386,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5682,959,959,'OP_ClientIdleEndMsg',387,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5683,959,959,'OP_PurchaseConsignmentLoreCheckRe',388,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5684,959,959,'OP_NotifyApprenticeStoppedMentori',389,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5685,959,959,'OP_CorruptedClientMsg',390,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5686,959,959,'OP_WorldDataChangeMsg',391,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5687,959,959,'OP_MailEventNotificationMsg',392,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5688,959,959,'OP_RestartZoneMsg',393,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5689,959,959,'OP_FlightPathsMsg',394,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5690,959,959,'OP_CharacterLinkdeadMsg',395,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5691,959,959,'OP_CharTransferStartRequestMsg',396,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5692,959,959,'OP_CharTransferStartReplyMsg',397,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5693,959,959,'OP_CharTransferRequestMsg',398,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5694,959,959,'OP_CharTransferReplyMsg',399,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5695,959,959,'OP_CharTransferRollbackRequestMsg',400,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5696,959,959,'OP_CharTransferCommitRequestMsg',401,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5697,959,959,'OP_CharTransferRollbackReplyMsg',402,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5698,959,959,'OP_CharTransferCommitReplyMsg',403,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5699,959,959,'OP_GetCharacterSerializedRequestM',404,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5700,959,959,'OP_GetCharacterSerializedReplyMsg',405,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5701,959,959,'OP_CreateCharFromCBBRequestMsg',406,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5702,959,959,'OP_CreateCharFromCBBReplyMsg',407,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5703,959,959,'OP_HousingDataChangedMsg',408,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5704,959,959,'OP_HousingRestoreMsg',409,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5705,959,959,'OP_AuctionItem',410,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5706,959,959,'OP_AuctionItemReply',411,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5707,959,959,'OP_AuctionCoin',412,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5708,959,959,'OP_AuctionCoinReply',413,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5709,959,959,'OP_AuctionCharacter',414,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5710,959,959,'OP_AuctionCharacterReply',415,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5711,959,959,'OP_AuctionCommitMsg',416,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5712,959,959,'OP_AuctionAbortMsg',417,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5713,959,959,'OP_CharTransferValidateRequestMsg',418,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5714,959,959,'OP_CharTransferValidateReplyMsg',419,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5715,959,959,'OP_RaceRestrictionMsg',420,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5716,959,959,'OP_SetInstanceDisplayNameMsg',421,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5717,959,959,'OP_GetAuctionAssetIDMsg',422,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5718,959,959,'OP_GetAuctionAssetIDReplyMsg',423,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5719,959,959,'OP_ResendWorldChannelsMsg',424,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5720,959,959,'OP_DisplayExchangeScreenMsg',425,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5721,959,959,'OP_ArenaGameTypesMsg',426,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5722,959,959,'OP_AuditAuctionEventMsg',428,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5723,959,959,'OP_InviteRequestMsg',430,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5724,959,959,'OP_InviteResponseMsg',431,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5725,959,959,'OP_InviteTargetResponseMsg',432,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5726,959,959,'OP_InspectPlayerRequestMsg',433,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5727,959,959,'OP_DispatchMsg',434,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5728,959,959,'OP_DisplayEventMsg',435,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5729,959,959,'OP_PrePossessionMsg',436,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5730,959,959,'OP_PostPossessionMsg',437,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5731,959,959,'OP_AdventureList',462,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5732,959,959,'OP_CancelSpellCast',463,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5733,959,959,'OP_AttackAllowed',475,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5734,959,959,'OP_AttackNotAllowed',476,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5735,959,959,'OP_DressingRoom',483,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5736,959,959,'OP_SkillInfoRequest',487,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5737,959,959,'OP_SkillInfoResponse',488,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5738,959,959,'OP_MapRequest',493,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5739,959,959,'OP_EqUnknown',507,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5740,959,959,'OP_EqHearChatCmd',508,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5741,959,959,'OP_EqDisplayTextCmd',509,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5742,959,959,'OP_EqCreateGhostCmd',510,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5743,959,959,'OP_EqCreateWidgetCmd',511,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5744,959,959,'OP_EqCreateSignWidgetCmd',512,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5745,959,959,'OP_EqDestroyGhostCmd',513,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5746,959,959,'OP_EqUpdateGhostCmd',514,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5747,959,959,'OP_EqSetControlGhostCmd',515,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5748,959,959,'OP_EqSetPOVGhostCmd',516,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5749,959,959,'OP_EqHearCombatCmd',517,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5750,959,959,'OP_EqHearSpellCastCmd',518,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5751,959,959,'OP_EqHearSpellInterruptCmd',521,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5752,959,959,'OP_EqHearSpellFizzleCmd',522,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5753,959,959,'OP_EqHearConsiderCmd',523,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5754,959,959,'OP_EqUpdateSubClassesCmd',524,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5755,959,959,'OP_EqCreateListBoxCmd',525,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5756,959,959,'OP_EqSetDebugPathPointsCmd',526,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5757,959,959,'OP_EqCannedEmoteCmd',528,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5758,959,959,'OP_EqStateCmd',529,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5759,959,959,'OP_EqPlaySoundCmd',530,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5760,959,959,'OP_EqPlaySound3DCmd',531,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5761,959,959,'OP_EqPlayVoiceCmd',532,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5762,959,959,'OP_EqHearDrowningCmd',533,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5763,959,959,'OP_EqHearDeathCmd',534,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5764,959,959,'OP_EqGroupMemberRemovedCmd',535,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5765,959,959,'OP_EqHearChainEffectCmd',536,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5766,959,959,'OP_EqReceiveOfferCmd',537,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5767,959,959,'OP_EqInspectPCResultsCmd',538,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5768,959,959,'OP_EqDrawablePathGraphCmd',539,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5769,959,959,'OP_EqDialogOpenCmd',540,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5770,959,959,'OP_EqDialogCloseCmd',541,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5771,959,959,'OP_EqFactionUpdateCmd',542,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5772,959,959,'OP_EqCollectionUpdateCmd',543,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5773,959,959,'OP_EqCollectionFilterCmd',544,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5774,959,959,'OP_EqCollectionItemCmd',545,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5775,959,959,'OP_EqQuestJournalUpdateCmd',546,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5776,959,959,'OP_EqQuestJournalReplyCmd',548,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5777,959,959,'OP_EqQuestGroupCmd',549,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5778,959,959,'OP_EqUpdateMerchantCmd',550,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5779,959,959,'OP_EqUpdateStoreCmd',551,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5780,959,959,'OP_EqUpdatePlayerTradeCmd',552,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5781,959,959,'OP_EqHelpPathCmd',553,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5782,959,959,'OP_EqHelpPathClearCmd',554,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5783,959,959,'OP_EqUpdateBankCmd',555,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5784,959,959,'OP_EqExamineInfoCmd',556,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5785,959,959,'OP_EqCloseWindowCmd',557,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5786,959,959,'OP_EqUpdateLootCmd',558,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5787,959,959,'OP_EqJunctionListCmd',559,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5788,959,959,'OP_EqShowDeathWindowCmd',560,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5789,959,959,'OP_EqDisplaySpellFailCmd',561,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5790,959,959,'OP_EqSpellCastStartCmd',562,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5791,959,959,'OP_EqSpellCastEndCmd',563,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5792,959,959,'OP_EqResurrectedCmd',564,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5793,959,959,'OP_EqChoiceWinCmd',565,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5794,959,959,'OP_EqSetDefaultVerbCmd',566,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5795,959,959,'OP_EqInstructionWindowCmd',568,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5796,959,959,'OP_EqInstructionWindowCloseCmd',569,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5797,959,959,'OP_EqInstructionWindowGoalCmd',570,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5798,959,959,'OP_EqInstructionWindowTaskCmd',571,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5799,959,959,'OP_EqEnableGameEventCmd',572,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5800,959,959,'OP_EqShowWindowCmd',573,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5801,959,959,'OP_EqEnableWindowCmd',574,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5802,959,959,'OP_EqFlashWindowCmd',575,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5803,959,959,'OP_EqHearPlayFlavorCmd',576,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5804,959,959,'OP_EqUpdateSignWidgetCmd',578,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5805,959,959,'OP_EqDebugPVDCmd',579,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5806,959,959,'OP_EqShowBookCmd',580,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5807,959,959,'OP_EqQuestionnaireCmd',581,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5808,959,959,'OP_EqGetProbsCmd',582,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5809,959,959,'OP_EqHearHealCmd',583,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5810,959,959,'OP_EqChatChannelUpdateCmd',584,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5811,959,959,'OP_EqWhoChannelQueryReplyCmd',585,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5812,959,959,'OP_EqAvailWorldChannelsCmd',586,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5813,959,959,'OP_EqUpdateTargetCmd',587,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5814,959,959,'OP_EqConsignmentItemsCmd',589,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5815,959,959,'OP_EqStartBrokerCmd',591,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5816,959,959,'OP_EqMapExplorationCmd',592,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5817,959,959,'OP_EqStoreLogCmd',593,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5818,959,959,'OP_EqSpellMoveToRangeAndRetryCmd',594,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5819,959,959,'OP_EqUpdatePlayerMailCmd',595,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5820,959,959,'OP_EqArenaResultsCmd',596,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5821,959,959,'OP_EqGuildBankEventActionCmd',597,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5822,959,959,'OP_EqGuildBankExamineInfoCmd',598,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5823,959,959,'OP_EqHearSpellNoLandCmd',599,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5824,959,959,'OP_Lottery',603,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5825,959,959,'OP_GuildRecruitingMemberInfo',604,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5826,959,959,'OP_GuildRecruiting',605,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5827,959,959,'OP_GuildRecruitingDetails',606,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5828,959,959,'OP_GuildRecruitingImage',607,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5829,959,959,'OP_PointOfInterest',628,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5830,959,959,'OP_TraitsList',630,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5831,959,959,'OP_RecipeList',639,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5832,959,959,'OP_CharacterAchievements',655,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5833,959,959,'OP_AddClientToGroupMsg',1024,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5834,959,959,'OP_AddGroupToGroupMsg',1024,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5835,959,959,'OP_GuildKickMsg',1024,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5836,959,959,'OP_ProcessScriptMsg',1024,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5837,959,959,'OP_ProcessWorkspaceMsg',1024,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5838,959,959,'OP_PurchaseConsignmentResponseMsg',1024,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5839,959,959,'OP_QuickbarAddMsg',1024,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5840,959,959,'OP_SkillSlotMapping',1024,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5841,959,959,'OP_Unknown',10028,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5842,959,959,'OP_WSWeatherUpdateMsg',10029,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5843,972,972,'OP_LoginRequestMsg',0,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5844,972,972,'OP_LoginByNumRequestMsg',1,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5845,972,972,'OP_WSLoginRequestMsg',2,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5846,972,972,'OP_ESLoginRequestMsg',3,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5847,972,972,'OP_LoginReplyMsg',4,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5848,972,972,'OP_WSStatusReplyMsg',5,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5849,972,972,'OP_WorldStatusChangeMsg',6,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5850,972,972,'OP_AllWSDescRequestMsg',7,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5851,972,972,'OP_WorldListMsg',8,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5852,972,972,'OP_AllCharactersDescRequestMsg',9,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5853,972,972,'OP_AllCharactersDescReplyMsg',10,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5854,972,972,'OP_CreateCharacterRequestMsg',11,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5855,972,972,'OP_CreateCharacterReplyMsg',12,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5856,972,972,'OP_WSCreateCharacterRequestMsg',13,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5857,972,972,'OP_WSCreateCharacterReplyMsg',14,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5858,972,972,'OP_ReskinCharacterRequestMsg',15,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5859,972,972,'OP_DeleteCharacterRequestMsg',16,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5860,972,972,'OP_DeleteCharacterReplyMsg',17,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5861,972,972,'OP_PlayCharacterRequestMsg',18,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5862,972,972,'OP_PlayCharacterReplyMsg',19,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5863,972,972,'OP_ExpectClientAsCharacterReplyMs',22,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5864,972,972,'OP_ServerPlayCharacterRequestMsg',23,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5865,972,972,'OP_ServerPlayCharacterReplyMsg',24,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5866,972,972,'OP_ESInitMsg',25,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5867,972,972,'OP_ESReadyForClientsMsg',26,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5868,972,972,'OP_CreateZoneInstanceMsg',27,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5869,972,972,'OP_ZoneInstanceCreateReplyMsg',28,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5870,972,972,'OP_ZoneInstanceDestroyedMsg',29,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5871,972,972,'OP_ExpectClientAsCharacterRequest',30,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5872,972,972,'OP_ZoneInfoMsg',31,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5873,972,972,'OP_DoneLoadingZoneResourcesMsg',32,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5874,972,972,'OP_DoneSendingInitialEntitiesMsg',33,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5875,972,972,'OP_DoneLoadingEntityResourcesMsg',34,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5876,972,972,'OP_PredictionUpdateMsg',35,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5877,972,972,'OP_UpdatePositionMsg',37,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5878,972,972,'OP_SetRemoteCmdsMsg',39,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5879,972,972,'OP_RemoteCmdMsg',40,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5880,972,972,'OP_GameWorldTimeMsg',41,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5881,972,972,'OP_MOTDMsg',42,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5882,972,972,'OP_ZoneMOTDMsg',43,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5883,972,972,'OP_AvatarCreatedMsg',44,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5884,972,972,'OP_AvatarDestroyedMsg',45,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5885,972,972,'OP_RequestCampMsg',47,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5886,972,972,'OP_CampStartedMsg',48,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5887,972,972,'OP_CampAbortedMsg',49,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5888,972,972,'OP_WhoQueryRequestMsg',50,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5889,972,972,'OP_WhoQueryReplyMsg',51,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5890,972,972,'OP_MonitorReplyMsg',52,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5891,972,972,'OP_MonitorCharacterListMsg',53,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5892,972,972,'OP_MonitorCharacterListRequestMsg',54,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5893,972,972,'OP_ClientCmdMsg',55,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5894,972,972,'OP_DispatchESMsg',56,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5895,972,972,'OP_DispatchClientCmdMsg',57,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5896,972,972,'OP_UpdateTargetMsg',58,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5897,972,972,'OP_UpdateTargetLocMsg',59,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5898,972,972,'OP_UpdateCharacterSheetMsg',60,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5899,972,972,'OP_UpdateSpellBookMsg',61,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5900,972,972,'OP_UpdateInventoryMsg',63,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5901,972,972,'OP_UpdateRecipeBookMsg',65,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5902,972,972,'OP_RequestRecipeDetailsMsg',66,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5903,972,972,'OP_RecipeDetailsMsg',67,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5904,972,972,'OP_UpdateSkillBookMsg',68,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5905,972,972,'OP_UpdateSkillsMsg',69,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5906,972,972,'OP_UpdateOpportunityMsg',70,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5907,972,972,'OP_ChangeZoneMsg',72,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5908,972,972,'OP_ClientTeleportRequestMsg',73,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5909,972,972,'OP_TeleportWithinZoneMsg',74,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5910,972,972,'OP_TeleportWithinZoneNoReloadMsg',75,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5911,972,972,'OP_MigrateClientToZoneRequestMsg',76,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5912,972,972,'OP_MigrateClientToZoneReplyMsg',77,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5913,972,972,'OP_ReadyToZoneMsg',78,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5914,972,972,'OP_RemoveClientFromGroupMsg',79,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5915,972,972,'OP_RemoveGroupFromGroupMsg',80,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5916,972,972,'OP_MakeGroupLeaderMsg',81,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5917,972,972,'OP_GroupCreatedMsg',82,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5918,972,972,'OP_GroupDestroyedMsg',83,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5919,972,972,'OP_GroupMemberAddedMsg',84,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5920,972,972,'OP_GroupMemberRemovedMsg',85,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5921,972,972,'OP_GroupRemovedFromGroupMsg',86,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5922,972,972,'OP_GroupLeaderChangedMsg',87,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5923,972,972,'OP_GroupResendOOZDataMsg',88,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5924,972,972,'OP_GroupSettingsChangedMsg',89,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5925,972,972,'OP_OutOfZoneMemberDataMsg',90,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5926,972,972,'OP_SendLatestRequestMsg',91,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5927,972,972,'OP_ClearDataMsg',92,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5928,972,972,'OP_SetSocialMsg',93,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5929,972,972,'OP_ESStatusMsg',94,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5930,972,972,'OP_ESZoneInstanceStatusMsg',95,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5931,972,972,'OP_ZonesStatusRequestMsg',96,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5932,972,972,'OP_ZonesStatusMsg',97,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5933,972,972,'OP_ESWeatherRequestMsg',98,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5934,972,972,'OP_ESWeatherRequestEndMsg',99,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5935,972,972,'OP_DialogSelectMsg',102,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5936,972,972,'OP_DialogCloseMsg',103,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5937,972,972,'OP_RemoveSpellEffectMsg',104,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5938,972,972,'OP_RemoveConcentrationMsg',105,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5939,972,972,'OP_QuestJournalOpenMsg',106,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5940,972,972,'OP_QuestJournalInspectMsg',107,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5941,972,972,'OP_QuestJournalSetVisibleMsg',108,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5942,972,972,'OP_QuestJournalWaypointMsg',109,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5943,972,972,'OP_CreateGuildRequestMsg',110,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5944,972,972,'OP_CreateGuildReplyMsg',111,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5945,972,972,'OP_GuildsayMsg',112,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5946,972,972,'OP_GuildUpdateMsg',115,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5947,972,972,'OP_DeleteGuildMsg',116,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5948,972,972,'OP_FellowshipExpMsg',117,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5949,972,972,'OP_ConsignmentCloseStoreMsg',118,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5950,972,972,'OP_ConsignItemRequestMsg',119,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5951,972,972,'OP_ConsignItemResponseMsg',120,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5952,972,972,'OP_PurchaseConsignmentRequestMsg',121,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5953,972,972,'OP_HouseDeletedRemotelyMsg',122,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5954,972,972,'OP_UpdateHouseDataMsg',123,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5955,972,972,'OP_UpdateHouseAccessDataMsg',124,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5956,972,972,'OP_PlayerHouseBaseScreenMsg',125,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5957,972,972,'OP_PlayerHousePurchaseScreenMsg',126,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5958,972,972,'OP_PlayerHouseAccessUpdateMsg',127,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5959,972,972,'OP_PlayerHouseDisplayStatusMsg',128,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5960,972,972,'OP_PlayerHouseCloseUIMsg',129,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5961,972,972,'OP_BuyPlayerHouseMsg',130,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5962,972,972,'OP_BuyPlayerHouseTintMsg',131,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5963,972,972,'OP_CollectAllHouseItemsMsg',132,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5964,972,972,'OP_RelinquishHouseMsg',133,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5965,972,972,'OP_EnterHouseMsg',134,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5966,972,972,'OP_ExitHouseMsg',135,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5967,972,972,'OP_HouseDefaultAccessSetMsg',136,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5968,972,972,'OP_HouseAccessSetMsg',137,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5969,972,972,'OP_HouseAccessRemoveMsg',138,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5970,972,972,'OP_PayHouseUpkeepMsg',139,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5971,972,972,'OP_MoveableObjectPlacementCriteri',141,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5972,972,972,'OP_EnterMoveObjectModeMsg',142,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5973,972,972,'OP_PositionMoveableObject',143,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5974,972,972,'OP_CancelMoveObjectModeMsg',144,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5975,972,972,'OP_ShaderCustomizationMsg',145,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5976,972,972,'OP_ReplaceableSubMeshesMsg',146,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5977,972,972,'OP_HouseCustomizationScreenMsg',147,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5978,972,972,'OP_CustomizationPurchaseRequestMs',148,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5979,972,972,'OP_CustomizationSetRequestMsg',149,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5980,972,972,'OP_CustomizationReplyMsg',150,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5981,972,972,'OP_TintWidgetsMsg',151,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5982,972,972,'OP_ExamineConsignmentRequestMsg',152,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5983,972,972,'OP_ExamineConsignmentResponseMsg',153,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5984,972,972,'OP_UISettingsResponseMsg',154,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5985,972,972,'OP_UIResetMsg',155,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5986,972,972,'OP_KeymapLoadMsg',156,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5987,972,972,'OP_KeymapNoneMsg',157,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5988,972,972,'OP_KeymapDataMsg',158,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5989,972,972,'OP_KeymapSaveMsg',159,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5990,972,972,'OP_DispatchSpellCmdMsg',160,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5991,972,972,'OP_EntityVerbsRequestMsg',162,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5992,972,972,'OP_EntityVerbsReplyMsg',163,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5993,972,972,'OP_EntityVerbsVerbMsg',164,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5994,972,972,'OP_ChatRelationshipUpdateMsg',166,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5995,972,972,'OP_LootItemsRequestMsg',167,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5996,972,972,'OP_StoppedLootingMsg',168,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5997,972,972,'OP_SitMsg',169,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5998,972,972,'OP_StandMsg',170,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (5999,972,972,'OP_SatMsg',171,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6000,972,972,'OP_StoodMsg',172,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6001,972,972,'OP_ClearForTakeOffMsg',173,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6002,972,972,'OP_ReadyForTakeOffMsg',174,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6003,972,972,'OP_ShowIllusionsMsg',175,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6004,972,972,'OP_HideIllusionsMsg',176,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6005,972,972,'OP_ExamineItemRequestMsg',177,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6006,972,972,'OP_ReadBookPageMsg',178,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6007,972,972,'OP_DefaultGroupOptionsRequestMsg',179,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6008,972,972,'OP_DefaultGroupOptionsMsg',180,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6009,972,972,'OP_GroupOptionsMsg',181,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6010,972,972,'OP_DisplayGroupOptionsScreenMsg',182,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6011,972,972,'OP_DisplayInnVisitScreenMsg',183,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6012,972,972,'OP_DumpSchedulerMsg',184,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6013,972,972,'OP_LSRequestPlayerDescMsg',185,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6014,972,972,'OP_LSCheckAcctLockMsg',186,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6015,972,972,'OP_WSAcctLockStatusMsg',187,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6016,972,972,'OP_RequestHelpRepathMsg',188,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6017,972,972,'OP_RequestTargetLocMsg',189,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6018,972,972,'OP_UpdateMotdMsg',190,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6019,972,972,'OP_PerformPlayerKnockbackMsg',191,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6020,972,972,'OP_PerformCameraShakeMsg',192,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6021,972,972,'OP_PopulateSkillMapsMsg',195,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6022,972,972,'OP_CancelledFeignMsg',197,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6023,972,972,'OP_SignalMsg',198,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6024,972,972,'OP_ShowCreateFromRecipeUIMsg',199,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6025,972,972,'OP_CancelCreateFromRecipeMsg',200,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6026,972,972,'OP_BeginItemCreationMsg',201,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6027,972,972,'OP_StopItemCreationMsg',202,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6028,972,972,'OP_ShowItemCreationProcessUIMsg',203,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6029,972,972,'OP_UpdateItemCreationProcessUIMsg',204,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6030,972,972,'OP_DisplayTSEventReactionMsg',205,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6031,972,972,'OP_ShowRecipeBookMsg',206,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6032,972,972,'OP_KnowledgebaseRequestMsg',207,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6033,972,972,'OP_KnowledgebaseResponseMsg',208,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6034,972,972,'OP_CSTicketHeaderRequestMsg',209,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6035,972,972,'OP_CSTicketInfoMsg',210,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6036,972,972,'OP_CSTicketCommentRequestMsg',211,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6037,972,972,'OP_CSTicketCommentResponseMsg',212,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6038,972,972,'OP_CSTicketCreateMsg',213,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6039,972,972,'OP_CSTicketAddCommentMsg',214,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6040,972,972,'OP_CSTicketDeleteMsg',215,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6041,972,972,'OP_CSTicketChangeNotificationMsg',216,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6042,972,972,'OP_WorldDataUpdateMsg',217,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6043,972,972,'OP_KnownLanguagesMsg',218,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6044,972,972,'OP_LsRequestClientCrashLogMsg',219,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6045,972,972,'OP_LsClientBaselogReplyMsg',220,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6046,972,972,'OP_LsClientCrashlogReplyMsg',221,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6047,972,972,'OP_LsClientAlertlogReplyMsg',222,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6048,972,972,'OP_LsClientVerifylogReplyMsg',223,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6049,972,972,'OP_ClientTeleportToLocationMsg',224,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6050,972,972,'OP_UpdateClientPredFlagsMsg',225,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6051,972,972,'OP_ChangeServerControlFlagMsg',226,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6052,972,972,'OP_CSToolsRequestMsg',227,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6053,972,972,'OP_CSToolsResponseMsg',228,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6054,972,972,'OP_AddSocialStructureStandingMsg',229,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6055,972,972,'OP_CreateBoatTransportsMsg',230,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6056,972,972,'OP_PositionBoatTransportMsg',231,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6057,972,972,'OP_MigrateBoatTransportMsg',232,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6058,972,972,'OP_MigrateBoatTransportReplyMsg',233,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6059,972,972,'OP_DisplayDebugNLLPointsMsg',234,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6060,972,972,'OP_ExamineInfoRequestMsg',235,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6061,972,972,'OP_QuickbarInitMsg',236,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6062,972,972,'OP_QuickbarUpdateMsg',237,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6063,972,972,'OP_MacroInitMsg',238,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6064,972,972,'OP_MacroUpdateMsg',239,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6065,972,972,'OP_QuestionnaireMsg',240,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6066,972,972,'OP_LevelChangedMsg',241,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6067,972,972,'OP_SpellGainedMsg',242,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6068,972,972,'OP_EncounterBrokenMsg',243,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6069,972,972,'OP_OnscreenMsgMsg',244,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6070,972,972,'OP_DisplayWarningMsg',245,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6071,972,972,'OP_ModifyGuildMsg',246,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6072,972,972,'OP_GuildEventMsg',247,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6073,972,972,'OP_GuildEventAddMsg',248,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6074,972,972,'OP_GuildEventActionMsg',249,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6075,972,972,'OP_GuildEventListMsg',250,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6076,972,972,'OP_RequestGuildEventDetailsMsg',251,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6077,972,972,'OP_GuildEventDetailsMsg',252,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6078,972,972,'OP_RequestGuildInfoMsg',253,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6079,972,972,'OP_GuildBankActionMsg',254,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6080,972,972,'OP_GuildBankActionResponseMsg',255,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6081,972,972,'OP_GuildBankItemDetailsRequestMsg',256,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6082,972,972,'OP_GuildBankItemDetailsResponseMs',257,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6083,972,972,'OP_GuildBankUpdateMsg',258,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6084,972,972,'OP_GuildBankEventListMsg',259,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6085,972,972,'OP_RequestGuildBankEventDetailsMs',260,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6086,972,972,'OP_RewardPackMsg',261,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6087,972,972,'OP_RenameGuildMsg',262,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6088,972,972,'OP_ZoneToFriendRequestMsg',264,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6089,972,972,'OP_ZoneToFriendReplyMsg',265,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6090,972,972,'OP_ChatCreateChannelMsg',266,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6091,972,972,'OP_ChatJoinChannelMsg',267,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6092,972,972,'OP_ChatWhoChannelMsg',268,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6093,972,972,'OP_ChatLeaveChannelMsg',269,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6094,972,972,'OP_ChatTellChannelMsg',270,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6095,972,972,'OP_ChatTellUserMsg',271,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6096,972,972,'OP_ChatToggleFriendMsg',272,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6097,972,972,'OP_ChatToggleIgnoreMsg',273,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6098,972,972,'OP_ChatSendFriendsMsg',274,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6099,972,972,'OP_ChatSendIgnoresMsg',275,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6100,972,972,'OP_QuestReward',302,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6101,972,972,'OP_ChatFiltersMsg',317,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6102,972,972,'OP_MailGetHeadersMsg',318,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6103,972,972,'OP_MailGetMessageMsg',319,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6104,972,972,'OP_MailSendMessageMsg',320,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6105,972,972,'OP_MailDeleteMessageMsg',321,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6106,972,972,'OP_MailGetHeadersReplyMsg',322,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6107,972,972,'OP_MailGetMessageReplyMsg',323,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6108,972,972,'OP_MailSendMessageReplyMsg',324,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6109,972,972,'OP_MailCommitSendMessageMsg',325,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6110,972,972,'OP_MailSendSystemMessageMsg',326,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6111,972,972,'OP_MailRemoveAttachFromMailMsg',327,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6112,972,972,'OP_WaypointRequestMsg',329,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6113,972,972,'OP_WaypointReplyMsg',330,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6114,972,972,'OP_WaypointSelectMsg',331,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6115,972,972,'OP_WaypointUpdateMsg',332,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6116,972,972,'OP_CharNameChangedMsg',333,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6117,972,972,'OP_ShowZoneTeleporterDestinations',334,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6118,972,972,'OP_SelectZoneTeleporterDestinatio',335,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6119,972,972,'OP_ReloadLocalizedTxtMsg',336,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6120,972,972,'OP_RequestGuildMembershipMsg',337,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6121,972,972,'OP_GuildMembershipResponseMsg',338,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6122,972,972,'OP_LeaveGuildNotifyMsg',339,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6123,972,972,'OP_JoinGuildNotifyMsg',340,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6124,972,972,'OP_AvatarUpdateMsg',342,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6125,972,972,'OP_BioUpdateMsg',343,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6126,972,972,'OP_InspectPlayerMsg',344,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6127,972,972,'OP_WSServerLockMsg',345,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6128,972,972,'OP_LSServerLockMsg',346,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6129,972,972,'OP_WSServerHideMsg',347,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6130,972,972,'OP_CsCategoryRequestMsg',348,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6131,972,972,'OP_CsCategoryResponseMsg',349,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6132,972,972,'OP_KnowledgeWindowSlotMappingMsg',350,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6133,972,972,'OP_LFGUpdateMsg',351,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6134,972,972,'OP_AFKUpdateMsg',352,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6135,972,972,'OP_AnonUpdateMsg',353,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6136,972,972,'OP_UpdateActivePublicZonesMsg',354,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6137,972,972,'OP_UnknownNpcMsg',355,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6138,972,972,'OP_PromoFlagsDetailsMsg',356,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6139,972,972,'OP_ConsignViewCreateMsg',357,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6140,972,972,'OP_ConsignViewGetPageMsg',358,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6141,972,972,'OP_ConsignViewReleaseMsg',359,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6142,972,972,'OP_ConsignRemoveItemsMsg',360,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6143,972,972,'OP_UpdateDebugRadiiMsg',361,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6144,972,972,'OP_SnoopMsg',362,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6145,972,972,'OP_ReportMsg',363,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6146,972,972,'OP_UpdateRaidMsg',364,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6147,972,972,'OP_ConsignViewSortMsg',365,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6148,972,972,'OP_TitleUpdateMsg',366,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6149,972,972,'OP_ClientFellMsg',367,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6150,972,972,'OP_ClientInDeathRegionMsg',368,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6151,972,972,'OP_CampClientMsg',369,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6152,972,972,'OP_CSToolAccessResponseMsg',370,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6153,972,972,'OP_TrackingUpdateMsg',371,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6154,972,972,'OP_BeginTrackingMsg',372,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6155,972,972,'OP_StopTrackingMsg',373,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6156,972,972,'OP_GetAvatarAccessRequestForCSToo',374,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6157,972,972,'OP_AdvancementRequestMsg',375,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6158,972,972,'OP_UpdateAvgFrameTimeMsg',376,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6159,972,972,'OP_MapFogDataInitMsg',377,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6160,972,972,'OP_MapFogDataUpdateMsg',378,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6161,972,972,'OP_CloseGroupInviteWindowMsg',379,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6162,972,972,'OP_UpdateGroupMemberDataMsg',380,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6163,972,972,'OP_WorldPingMsg',381,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6164,972,972,'OP_MoveLogUpdateMsg',382,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6165,972,972,'OP_OfferQuestMsg',383,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6166,972,972,'OP_WorldShutdownUpdateMsg',384,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6167,972,972,'OP_DisplayMailScreenMsg',385,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6168,972,972,'OP_ClientIdleBeginMsg',386,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6169,972,972,'OP_ClientIdleEndMsg',387,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6170,972,972,'OP_PurchaseConsignmentLoreCheckRe',388,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6171,972,972,'OP_NotifyApprenticeStoppedMentori',389,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6172,972,972,'OP_CorruptedClientMsg',390,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6173,972,972,'OP_WorldDataChangeMsg',391,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6174,972,972,'OP_MailEventNotificationMsg',392,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6175,972,972,'OP_RestartZoneMsg',393,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6176,972,972,'OP_FlightPathsMsg',394,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6177,972,972,'OP_CharacterLinkdeadMsg',395,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6178,972,972,'OP_CharTransferStartRequestMsg',396,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6179,972,972,'OP_CharTransferStartReplyMsg',397,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6180,972,972,'OP_CharTransferRequestMsg',398,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6181,972,972,'OP_CharTransferReplyMsg',399,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6182,972,972,'OP_CharTransferRollbackRequestMsg',400,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6183,972,972,'OP_CharTransferCommitRequestMsg',401,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6184,972,972,'OP_CharTransferRollbackReplyMsg',402,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6185,972,972,'OP_CharTransferCommitReplyMsg',403,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6186,972,972,'OP_GetCharacterSerializedRequestM',404,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6187,972,972,'OP_GetCharacterSerializedReplyMsg',405,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6188,972,972,'OP_CreateCharFromCBBRequestMsg',406,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6189,972,972,'OP_CreateCharFromCBBReplyMsg',407,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6190,972,972,'OP_HousingDataChangedMsg',408,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6191,972,972,'OP_HousingRestoreMsg',409,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6192,972,972,'OP_AuctionItem',410,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6193,972,972,'OP_AuctionItemReply',411,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6194,972,972,'OP_AuctionCoin',412,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6195,972,972,'OP_AuctionCoinReply',413,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6196,972,972,'OP_AuctionCharacter',414,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6197,972,972,'OP_AuctionCharacterReply',415,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6198,972,972,'OP_AuctionCommitMsg',416,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6199,972,972,'OP_AuctionAbortMsg',417,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6200,972,972,'OP_CharTransferValidateRequestMsg',418,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6201,972,972,'OP_CharTransferValidateReplyMsg',419,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6202,972,972,'OP_RaceRestrictionMsg',420,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6203,972,972,'OP_SetInstanceDisplayNameMsg',421,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6204,972,972,'OP_GetAuctionAssetIDMsg',422,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6205,972,972,'OP_GetAuctionAssetIDReplyMsg',423,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6206,972,972,'OP_ResendWorldChannelsMsg',424,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6207,972,972,'OP_DisplayExchangeScreenMsg',425,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6208,972,972,'OP_ArenaGameTypesMsg',426,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6209,972,972,'OP_AuditAuctionEventMsg',428,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6210,972,972,'OP_InviteRequestMsg',430,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6211,972,972,'OP_InviteResponseMsg',431,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6212,972,972,'OP_InviteTargetResponseMsg',432,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6213,972,972,'OP_InspectPlayerRequestMsg',433,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6214,972,972,'OP_DispatchMsg',434,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6215,972,972,'OP_DisplayEventMsg',435,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6216,972,972,'OP_PrePossessionMsg',436,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6217,972,972,'OP_PostPossessionMsg',437,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6218,972,972,'OP_AdventureList',462,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6219,972,972,'OP_CancelSpellCast',463,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6220,972,972,'OP_AttackAllowed',475,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6221,972,972,'OP_AttackNotAllowed',476,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6222,972,972,'OP_DressingRoom',483,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6223,972,972,'OP_SkillInfoRequest',487,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6224,972,972,'OP_SkillInfoResponse',488,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6225,972,972,'OP_MapRequest',493,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6226,972,972,'OP_EqUnknown',514,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6227,972,972,'OP_EqHearChatCmd',515,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6228,972,972,'OP_EqDisplayTextCmd',516,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6229,972,972,'OP_EqCreateGhostCmd',517,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6230,972,972,'OP_EqCreateWidgetCmd',518,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6231,972,972,'OP_EqCreateSignWidgetCmd',519,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6232,972,972,'OP_EqDestroyGhostCmd',520,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6233,972,972,'OP_EqUpdateGhostCmd',521,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6234,972,972,'OP_EqSetControlGhostCmd',522,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6235,972,972,'OP_EqSetPOVGhostCmd',523,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6236,972,972,'OP_EqHearCombatCmd',524,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6237,972,972,'OP_EqHearSpellCastCmd',525,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6238,972,972,'OP_EqHearSpellInterruptCmd',528,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6239,972,972,'OP_EqHearSpellFizzleCmd',529,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6240,972,972,'OP_EqHearConsiderCmd',530,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6241,972,972,'OP_EqUpdateSubClassesCmd',531,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6242,972,972,'OP_EqCreateListBoxCmd',532,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6243,972,972,'OP_EqSetDebugPathPointsCmd',533,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6244,972,972,'OP_EqCannedEmoteCmd',535,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6245,972,972,'OP_EqStateCmd',536,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6246,972,972,'OP_EqPlaySoundCmd',537,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6247,972,972,'OP_EqPlaySound3DCmd',538,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6248,972,972,'OP_EqPlayVoiceCmd',539,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6249,972,972,'OP_EqHearDrowningCmd',540,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6250,972,972,'OP_EqHearDeathCmd',541,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6251,972,972,'OP_EqGroupMemberRemovedCmd',542,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6252,972,972,'OP_EqHearChainEffectCmd',543,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6253,972,972,'OP_EqReceiveOfferCmd',544,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6254,972,972,'OP_EqInspectPCResultsCmd',545,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6255,972,972,'OP_EqDrawablePathGraphCmd',546,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6256,972,972,'OP_EqDialogOpenCmd',547,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6257,972,972,'OP_EqDialogCloseCmd',548,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6258,972,972,'OP_EqFactionUpdateCmd',549,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6259,972,972,'OP_EqCollectionUpdateCmd',550,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6260,972,972,'OP_EqCollectionFilterCmd',551,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6261,972,972,'OP_EqCollectionItemCmd',552,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6262,972,972,'OP_EqQuestJournalUpdateCmd',553,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6263,972,972,'OP_EqQuestJournalReplyCmd',555,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6264,972,972,'OP_EqQuestGroupCmd',556,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6265,972,972,'OP_EqUpdateMerchantCmd',557,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6266,972,972,'OP_EqUpdateStoreCmd',558,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6267,972,972,'OP_EqUpdatePlayerTradeCmd',559,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6268,972,972,'OP_EqHelpPathCmd',560,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6269,972,972,'OP_EqHelpPathClearCmd',561,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6270,972,972,'OP_EqUpdateBankCmd',562,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6271,972,972,'OP_EqExamineInfoCmd',563,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6272,972,972,'OP_EqCloseWindowCmd',564,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6273,972,972,'OP_EqUpdateLootCmd',565,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6274,972,972,'OP_EqJunctionListCmd',566,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6275,972,972,'OP_EqShowDeathWindowCmd',567,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6276,972,972,'OP_EqDisplaySpellFailCmd',568,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6277,972,972,'OP_EqSpellCastStartCmd',569,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6278,972,972,'OP_EqSpellCastEndCmd',570,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6279,972,972,'OP_EqResurrectedCmd',571,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6280,972,972,'OP_EqChoiceWinCmd',572,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6281,972,972,'OP_EqSetDefaultVerbCmd',573,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6282,972,972,'OP_EqInstructionWindowCmd',575,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6283,972,972,'OP_EqInstructionWindowCloseCmd',576,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6284,972,972,'OP_EqInstructionWindowGoalCmd',577,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6285,972,972,'OP_EqInstructionWindowTaskCmd',578,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6286,972,972,'OP_EqEnableGameEventCmd',579,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6287,972,972,'OP_EqShowWindowCmd',580,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6288,972,972,'OP_EqEnableWindowCmd',581,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6289,972,972,'OP_EqFlashWindowCmd',582,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6290,972,972,'OP_EqHearPlayFlavorCmd',583,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6291,972,972,'OP_EqUpdateSignWidgetCmd',585,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6292,972,972,'OP_EqDebugPVDCmd',586,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6293,972,972,'OP_EqShowBookCmd',587,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6294,972,972,'OP_EqQuestionnaireCmd',588,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6295,972,972,'OP_EqGetProbsCmd',589,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6296,972,972,'OP_EqHearHealCmd',590,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6297,972,972,'OP_EqChatChannelUpdateCmd',591,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6298,972,972,'OP_EqWhoChannelQueryReplyCmd',592,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6299,972,972,'OP_EqAvailWorldChannelsCmd',593,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6300,972,972,'OP_EqUpdateTargetCmd',594,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6301,972,972,'OP_EqConsignmentItemsCmd',596,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6302,972,972,'OP_EqStartBrokerCmd',598,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6303,972,972,'OP_EqMapExplorationCmd',599,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6304,972,972,'OP_EqStoreLogCmd',600,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6305,972,972,'OP_EqSpellMoveToRangeAndRetryCmd',601,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6306,972,972,'OP_EqUpdatePlayerMailCmd',602,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6307,972,972,'OP_EqArenaResultsCmd',603,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6308,972,972,'OP_EqGuildBankEventActionCmd',604,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6309,972,972,'OP_EqGuildBankExamineInfoCmd',605,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6310,972,972,'OP_EqHearSpellNoLandCmd',606,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6311,972,972,'OP_Lottery',610,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6312,972,972,'OP_GuildRecruitingMemberInfo',611,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6313,972,972,'OP_GuildRecruiting',612,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6314,972,972,'OP_GuildRecruitingDetails',613,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6315,972,972,'OP_GuildRecruitingImage',614,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6316,972,972,'OP_PointOfInterest',635,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6317,972,972,'OP_TraitsList',637,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6318,972,972,'OP_RecipeList',646,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6319,972,972,'OP_CharacterAchievements',655,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6320,972,972,'OP_AddClientToGroupMsg',1031,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6321,972,972,'OP_AddGroupToGroupMsg',1031,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6322,972,972,'OP_GuildKickMsg',1031,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6323,972,972,'OP_ProcessScriptMsg',1031,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6324,972,972,'OP_ProcessWorkspaceMsg',1031,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6325,972,972,'OP_PurchaseConsignmentResponseMsg',1031,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6326,972,972,'OP_QuickbarAddMsg',1031,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6327,972,972,'OP_SkillSlotMapping',1031,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6328,972,972,'OP_Unknown',10035,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6329,972,972,'OP_WSWeatherUpdateMsg',10036,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6330,973,973,'OP_LoginRequestMsg',0,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6331,973,973,'OP_LoginByNumRequestMsg',1,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6332,973,973,'OP_WSLoginRequestMsg',2,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6333,973,973,'OP_ESLoginRequestMsg',3,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6334,973,973,'OP_LoginReplyMsg',4,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6335,973,973,'OP_WSStatusReplyMsg',5,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6336,973,973,'OP_WorldStatusChangeMsg',6,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6337,973,973,'OP_AllWSDescRequestMsg',7,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6338,973,973,'OP_WorldListMsg',8,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6339,973,973,'OP_AllCharactersDescRequestMsg',9,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6340,973,973,'OP_AllCharactersDescReplyMsg',10,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6341,973,973,'OP_CreateCharacterRequestMsg',11,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6342,973,973,'OP_CreateCharacterReplyMsg',12,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6343,973,973,'OP_WSCreateCharacterRequestMsg',13,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6344,973,973,'OP_WSCreateCharacterReplyMsg',14,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6345,973,973,'OP_ReskinCharacterRequestMsg',15,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6346,973,973,'OP_DeleteCharacterRequestMsg',16,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6347,973,973,'OP_DeleteCharacterReplyMsg',17,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6348,973,973,'OP_PlayCharacterRequestMsg',18,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6349,973,973,'OP_PlayCharacterReplyMsg',19,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6350,973,973,'OP_ExpectClientAsCharacterReplyMs',22,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6351,973,973,'OP_ServerPlayCharacterRequestMsg',23,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6352,973,973,'OP_ServerPlayCharacterReplyMsg',24,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6353,973,973,'OP_ESInitMsg',25,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6354,973,973,'OP_ESReadyForClientsMsg',26,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6355,973,973,'OP_CreateZoneInstanceMsg',27,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6356,973,973,'OP_ZoneInstanceCreateReplyMsg',28,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6357,973,973,'OP_ZoneInstanceDestroyedMsg',29,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6358,973,973,'OP_ExpectClientAsCharacterRequest',30,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6359,973,973,'OP_ZoneInfoMsg',31,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6360,973,973,'OP_DoneLoadingZoneResourcesMsg',32,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6361,973,973,'OP_DoneSendingInitialEntitiesMsg',33,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6362,973,973,'OP_DoneLoadingEntityResourcesMsg',34,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6363,973,973,'OP_PredictionUpdateMsg',35,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6364,973,973,'OP_UpdatePositionMsg',37,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6365,973,973,'OP_SetRemoteCmdsMsg',39,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6366,973,973,'OP_RemoteCmdMsg',40,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6367,973,973,'OP_GameWorldTimeMsg',41,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6368,973,973,'OP_MOTDMsg',42,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6369,973,973,'OP_ZoneMOTDMsg',43,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6370,973,973,'OP_AvatarCreatedMsg',44,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6371,973,973,'OP_AvatarDestroyedMsg',45,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6372,973,973,'OP_RequestCampMsg',47,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6373,973,973,'OP_CampStartedMsg',48,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6374,973,973,'OP_CampAbortedMsg',49,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6375,973,973,'OP_WhoQueryRequestMsg',50,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6376,973,973,'OP_WhoQueryReplyMsg',51,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6377,973,973,'OP_MonitorReplyMsg',52,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6378,973,973,'OP_MonitorCharacterListMsg',53,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6379,973,973,'OP_MonitorCharacterListRequestMsg',54,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6380,973,973,'OP_ClientCmdMsg',55,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6381,973,973,'OP_DispatchESMsg',56,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6382,973,973,'OP_DispatchClientCmdMsg',57,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6383,973,973,'OP_UpdateTargetMsg',58,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6384,973,973,'OP_UpdateTargetLocMsg',59,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6385,973,973,'OP_UpdateCharacterSheetMsg',60,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6386,973,973,'OP_UpdateSpellBookMsg',61,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6387,973,973,'OP_UpdateInventoryMsg',63,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6388,973,973,'OP_UpdateRecipeBookMsg',65,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6389,973,973,'OP_RequestRecipeDetailsMsg',66,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6390,973,973,'OP_RecipeDetailsMsg',67,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6391,973,973,'OP_UpdateSkillBookMsg',68,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6392,973,973,'OP_UpdateSkillsMsg',69,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6393,973,973,'OP_UpdateOpportunityMsg',70,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6394,973,973,'OP_ChangeZoneMsg',72,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6395,973,973,'OP_ClientTeleportRequestMsg',73,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6396,973,973,'OP_TeleportWithinZoneMsg',74,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6397,973,973,'OP_TeleportWithinZoneNoReloadMsg',75,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6398,973,973,'OP_MigrateClientToZoneRequestMsg',76,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6399,973,973,'OP_MigrateClientToZoneReplyMsg',77,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6400,973,973,'OP_ReadyToZoneMsg',78,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6401,973,973,'OP_RemoveClientFromGroupMsg',79,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6402,973,973,'OP_RemoveGroupFromGroupMsg',80,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6403,973,973,'OP_MakeGroupLeaderMsg',81,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6404,973,973,'OP_GroupCreatedMsg',82,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6405,973,973,'OP_GroupDestroyedMsg',83,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6406,973,973,'OP_GroupMemberAddedMsg',84,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6407,973,973,'OP_GroupMemberRemovedMsg',85,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6408,973,973,'OP_GroupRemovedFromGroupMsg',86,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6409,973,973,'OP_GroupLeaderChangedMsg',87,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6410,973,973,'OP_GroupResendOOZDataMsg',88,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6411,973,973,'OP_GroupSettingsChangedMsg',89,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6412,973,973,'OP_OutOfZoneMemberDataMsg',90,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6413,973,973,'OP_SendLatestRequestMsg',91,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6414,973,973,'OP_ClearDataMsg',92,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6415,973,973,'OP_SetSocialMsg',93,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6416,973,973,'OP_ESStatusMsg',94,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6417,973,973,'OP_ESZoneInstanceStatusMsg',95,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6418,973,973,'OP_ZonesStatusRequestMsg',96,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6419,973,973,'OP_ZonesStatusMsg',97,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6420,973,973,'OP_ESWeatherRequestMsg',98,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6421,973,973,'OP_ESWeatherRequestEndMsg',99,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6422,973,973,'OP_DialogSelectMsg',102,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6423,973,973,'OP_DialogCloseMsg',103,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6424,973,973,'OP_RemoveSpellEffectMsg',104,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6425,973,973,'OP_RemoveConcentrationMsg',105,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6426,973,973,'OP_QuestJournalOpenMsg',106,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6427,973,973,'OP_QuestJournalInspectMsg',107,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6428,973,973,'OP_QuestJournalSetVisibleMsg',108,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6429,973,973,'OP_QuestJournalWaypointMsg',109,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6430,973,973,'OP_CreateGuildRequestMsg',110,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6431,973,973,'OP_CreateGuildReplyMsg',111,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6432,973,973,'OP_GuildsayMsg',112,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6433,973,973,'OP_GuildUpdateMsg',115,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6434,973,973,'OP_DeleteGuildMsg',116,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6435,973,973,'OP_FellowshipExpMsg',117,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6436,973,973,'OP_ConsignmentCloseStoreMsg',118,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6437,973,973,'OP_ConsignItemRequestMsg',119,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6438,973,973,'OP_ConsignItemResponseMsg',120,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6439,973,973,'OP_PurchaseConsignmentRequestMsg',121,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6440,973,973,'OP_HouseDeletedRemotelyMsg',122,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6441,973,973,'OP_UpdateHouseDataMsg',123,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6442,973,973,'OP_UpdateHouseAccessDataMsg',124,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6443,973,973,'OP_PlayerHouseBaseScreenMsg',125,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6444,973,973,'OP_PlayerHousePurchaseScreenMsg',126,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6445,973,973,'OP_PlayerHouseAccessUpdateMsg',127,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6446,973,973,'OP_PlayerHouseDisplayStatusMsg',128,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6447,973,973,'OP_PlayerHouseCloseUIMsg',129,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6448,973,973,'OP_BuyPlayerHouseMsg',130,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6449,973,973,'OP_BuyPlayerHouseTintMsg',131,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6450,973,973,'OP_CollectAllHouseItemsMsg',132,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6451,973,973,'OP_RelinquishHouseMsg',133,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6452,973,973,'OP_EnterHouseMsg',134,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6453,973,973,'OP_ExitHouseMsg',135,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6454,973,973,'OP_HouseDefaultAccessSetMsg',136,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6455,973,973,'OP_HouseAccessSetMsg',137,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6456,973,973,'OP_HouseAccessRemoveMsg',138,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6457,973,973,'OP_PayHouseUpkeepMsg',139,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6458,973,973,'OP_MoveableObjectPlacementCriteri',141,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6459,973,973,'OP_EnterMoveObjectModeMsg',142,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6460,973,973,'OP_PositionMoveableObject',143,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6461,973,973,'OP_CancelMoveObjectModeMsg',144,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6462,973,973,'OP_ShaderCustomizationMsg',145,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6463,973,973,'OP_ReplaceableSubMeshesMsg',146,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6464,973,973,'OP_HouseCustomizationScreenMsg',147,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6465,973,973,'OP_CustomizationPurchaseRequestMs',148,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6466,973,973,'OP_CustomizationSetRequestMsg',149,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6467,973,973,'OP_CustomizationReplyMsg',150,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6468,973,973,'OP_TintWidgetsMsg',151,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6469,973,973,'OP_ExamineConsignmentRequestMsg',152,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6470,973,973,'OP_ExamineConsignmentResponseMsg',153,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6471,973,973,'OP_UISettingsResponseMsg',154,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6472,973,973,'OP_UIResetMsg',155,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6473,973,973,'OP_KeymapLoadMsg',156,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6474,973,973,'OP_KeymapNoneMsg',157,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6475,973,973,'OP_KeymapDataMsg',158,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6476,973,973,'OP_KeymapSaveMsg',159,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6477,973,973,'OP_DispatchSpellCmdMsg',160,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6478,973,973,'OP_EntityVerbsRequestMsg',162,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6479,973,973,'OP_EntityVerbsReplyMsg',163,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6480,973,973,'OP_EntityVerbsVerbMsg',164,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6481,973,973,'OP_ChatRelationshipUpdateMsg',166,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6482,973,973,'OP_LootItemsRequestMsg',167,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6483,973,973,'OP_StoppedLootingMsg',168,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6484,973,973,'OP_SitMsg',169,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6485,973,973,'OP_StandMsg',170,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6486,973,973,'OP_SatMsg',171,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6487,973,973,'OP_StoodMsg',172,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6488,973,973,'OP_ClearForTakeOffMsg',173,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6489,973,973,'OP_ReadyForTakeOffMsg',174,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6490,973,973,'OP_ShowIllusionsMsg',175,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6491,973,973,'OP_HideIllusionsMsg',176,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6492,973,973,'OP_ExamineItemRequestMsg',177,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6493,973,973,'OP_ReadBookPageMsg',178,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6494,973,973,'OP_DefaultGroupOptionsRequestMsg',179,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6495,973,973,'OP_DefaultGroupOptionsMsg',180,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6496,973,973,'OP_GroupOptionsMsg',181,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6497,973,973,'OP_DisplayGroupOptionsScreenMsg',182,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6498,973,973,'OP_DisplayInnVisitScreenMsg',183,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6499,973,973,'OP_DumpSchedulerMsg',184,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6500,973,973,'OP_LSRequestPlayerDescMsg',185,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6501,973,973,'OP_LSCheckAcctLockMsg',186,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6502,973,973,'OP_WSAcctLockStatusMsg',187,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6503,973,973,'OP_RequestHelpRepathMsg',188,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6504,973,973,'OP_RequestTargetLocMsg',189,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6505,973,973,'OP_UpdateMotdMsg',190,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6506,973,973,'OP_PerformPlayerKnockbackMsg',191,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6507,973,973,'OP_PerformCameraShakeMsg',192,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6508,973,973,'OP_PopulateSkillMapsMsg',195,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6509,973,973,'OP_CancelledFeignMsg',197,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6510,973,973,'OP_SignalMsg',198,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6511,973,973,'OP_ShowCreateFromRecipeUIMsg',199,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6512,973,973,'OP_CancelCreateFromRecipeMsg',200,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6513,973,973,'OP_BeginItemCreationMsg',201,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6514,973,973,'OP_StopItemCreationMsg',202,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6515,973,973,'OP_ShowItemCreationProcessUIMsg',203,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6516,973,973,'OP_UpdateItemCreationProcessUIMsg',204,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6517,973,973,'OP_DisplayTSEventReactionMsg',205,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6518,973,973,'OP_ShowRecipeBookMsg',206,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6519,973,973,'OP_KnowledgebaseRequestMsg',207,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6520,973,973,'OP_KnowledgebaseResponseMsg',208,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6521,973,973,'OP_CSTicketHeaderRequestMsg',209,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6522,973,973,'OP_CSTicketInfoMsg',210,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6523,973,973,'OP_CSTicketCommentRequestMsg',211,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6524,973,973,'OP_CSTicketCommentResponseMsg',212,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6525,973,973,'OP_CSTicketCreateMsg',213,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6526,973,973,'OP_CSTicketAddCommentMsg',214,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6527,973,973,'OP_CSTicketDeleteMsg',215,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6528,973,973,'OP_CSTicketChangeNotificationMsg',216,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6529,973,973,'OP_WorldDataUpdateMsg',217,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6530,973,973,'OP_KnownLanguagesMsg',218,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6531,973,973,'OP_LsRequestClientCrashLogMsg',219,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6532,973,973,'OP_LsClientBaselogReplyMsg',220,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6533,973,973,'OP_LsClientCrashlogReplyMsg',221,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6534,973,973,'OP_LsClientAlertlogReplyMsg',222,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6535,973,973,'OP_LsClientVerifylogReplyMsg',223,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6536,973,973,'OP_ClientTeleportToLocationMsg',224,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6537,973,973,'OP_UpdateClientPredFlagsMsg',225,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6538,973,973,'OP_ChangeServerControlFlagMsg',226,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6539,973,973,'OP_CSToolsRequestMsg',227,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6540,973,973,'OP_CSToolsResponseMsg',228,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6541,973,973,'OP_AddSocialStructureStandingMsg',229,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6542,973,973,'OP_CreateBoatTransportsMsg',230,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6543,973,973,'OP_PositionBoatTransportMsg',231,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6544,973,973,'OP_MigrateBoatTransportMsg',232,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6545,973,973,'OP_MigrateBoatTransportReplyMsg',233,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6546,973,973,'OP_DisplayDebugNLLPointsMsg',234,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6547,973,973,'OP_ExamineInfoRequestMsg',235,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6548,973,973,'OP_QuickbarInitMsg',236,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6549,973,973,'OP_QuickbarUpdateMsg',237,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6550,973,973,'OP_MacroInitMsg',238,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6551,973,973,'OP_MacroUpdateMsg',239,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6552,973,973,'OP_QuestionnaireMsg',240,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6553,973,973,'OP_LevelChangedMsg',241,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6554,973,973,'OP_SpellGainedMsg',242,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6555,973,973,'OP_EncounterBrokenMsg',243,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6556,973,973,'OP_OnscreenMsgMsg',244,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6557,973,973,'OP_DisplayWarningMsg',245,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6558,973,973,'OP_ModifyGuildMsg',246,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6559,973,973,'OP_GuildEventMsg',247,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6560,973,973,'OP_GuildEventAddMsg',248,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6561,973,973,'OP_GuildEventActionMsg',249,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6562,973,973,'OP_GuildEventListMsg',250,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6563,973,973,'OP_RequestGuildEventDetailsMsg',251,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6564,973,973,'OP_GuildEventDetailsMsg',252,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6565,973,973,'OP_RequestGuildInfoMsg',253,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6566,973,973,'OP_GuildBankActionMsg',254,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6567,973,973,'OP_GuildBankActionResponseMsg',255,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6568,973,973,'OP_GuildBankItemDetailsRequestMsg',256,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6569,973,973,'OP_GuildBankItemDetailsResponseMs',257,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6570,973,973,'OP_GuildBankUpdateMsg',258,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6571,973,973,'OP_GuildBankEventListMsg',259,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6572,973,973,'OP_RequestGuildBankEventDetailsMs',260,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6573,973,973,'OP_RewardPackMsg',261,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6574,973,973,'OP_RenameGuildMsg',262,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6575,973,973,'OP_ZoneToFriendRequestMsg',264,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6576,973,973,'OP_ZoneToFriendReplyMsg',265,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6577,973,973,'OP_ChatCreateChannelMsg',266,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6578,973,973,'OP_ChatJoinChannelMsg',267,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6579,973,973,'OP_ChatWhoChannelMsg',268,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6580,973,973,'OP_ChatLeaveChannelMsg',269,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6581,973,973,'OP_ChatTellChannelMsg',270,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6582,973,973,'OP_ChatTellUserMsg',271,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6583,973,973,'OP_ChatToggleFriendMsg',272,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6584,973,973,'OP_ChatToggleIgnoreMsg',273,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6585,973,973,'OP_ChatSendFriendsMsg',274,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6586,973,973,'OP_ChatSendIgnoresMsg',275,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6587,973,973,'OP_QuestReward',302,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6588,973,973,'OP_ChatFiltersMsg',317,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6589,973,973,'OP_MailGetHeadersMsg',318,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6590,973,973,'OP_MailGetMessageMsg',319,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6591,973,973,'OP_MailSendMessageMsg',320,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6592,973,973,'OP_MailDeleteMessageMsg',321,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6593,973,973,'OP_MailGetHeadersReplyMsg',322,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6594,973,973,'OP_MailGetMessageReplyMsg',323,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6595,973,973,'OP_MailSendMessageReplyMsg',324,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6596,973,973,'OP_MailCommitSendMessageMsg',325,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6597,973,973,'OP_MailSendSystemMessageMsg',326,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6598,973,973,'OP_MailRemoveAttachFromMailMsg',327,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6599,973,973,'OP_WaypointRequestMsg',329,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6600,973,973,'OP_WaypointReplyMsg',330,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6601,973,973,'OP_WaypointSelectMsg',331,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6602,973,973,'OP_WaypointUpdateMsg',332,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6603,973,973,'OP_CharNameChangedMsg',333,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6604,973,973,'OP_ShowZoneTeleporterDestinations',334,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6605,973,973,'OP_SelectZoneTeleporterDestinatio',335,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6606,973,973,'OP_ReloadLocalizedTxtMsg',336,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6607,973,973,'OP_RequestGuildMembershipMsg',337,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6608,973,973,'OP_GuildMembershipResponseMsg',338,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6609,973,973,'OP_LeaveGuildNotifyMsg',339,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6610,973,973,'OP_JoinGuildNotifyMsg',340,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6611,973,973,'OP_AvatarUpdateMsg',342,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6612,973,973,'OP_BioUpdateMsg',343,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6613,973,973,'OP_InspectPlayerMsg',344,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6614,973,973,'OP_WSServerLockMsg',345,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6615,973,973,'OP_LSServerLockMsg',346,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6616,973,973,'OP_WSServerHideMsg',347,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6617,973,973,'OP_CsCategoryRequestMsg',348,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6618,973,973,'OP_CsCategoryResponseMsg',349,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6619,973,973,'OP_KnowledgeWindowSlotMappingMsg',350,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6620,973,973,'OP_LFGUpdateMsg',351,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6621,973,973,'OP_AFKUpdateMsg',352,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6622,973,973,'OP_AnonUpdateMsg',353,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6623,973,973,'OP_UpdateActivePublicZonesMsg',354,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6624,973,973,'OP_UnknownNpcMsg',355,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6625,973,973,'OP_PromoFlagsDetailsMsg',356,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6626,973,973,'OP_ConsignViewCreateMsg',357,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6627,973,973,'OP_ConsignViewGetPageMsg',358,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6628,973,973,'OP_ConsignViewReleaseMsg',359,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6629,973,973,'OP_ConsignRemoveItemsMsg',360,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6630,973,973,'OP_UpdateDebugRadiiMsg',361,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6631,973,973,'OP_SnoopMsg',362,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6632,973,973,'OP_ReportMsg',363,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6633,973,973,'OP_UpdateRaidMsg',364,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6634,973,973,'OP_ConsignViewSortMsg',365,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6635,973,973,'OP_TitleUpdateMsg',366,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6636,973,973,'OP_ClientFellMsg',367,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6637,973,973,'OP_ClientInDeathRegionMsg',368,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6638,973,973,'OP_CampClientMsg',369,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6639,973,973,'OP_CSToolAccessResponseMsg',370,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6640,973,973,'OP_TrackingUpdateMsg',371,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6641,973,973,'OP_BeginTrackingMsg',372,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6642,973,973,'OP_StopTrackingMsg',373,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6643,973,973,'OP_GetAvatarAccessRequestForCSToo',374,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6644,973,973,'OP_AdvancementRequestMsg',375,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6645,973,973,'OP_UpdateAvgFrameTimeMsg',376,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6646,973,973,'OP_MapFogDataInitMsg',377,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6647,973,973,'OP_MapFogDataUpdateMsg',378,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6648,973,973,'OP_CloseGroupInviteWindowMsg',379,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6649,973,973,'OP_UpdateGroupMemberDataMsg',380,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6650,973,973,'OP_WorldPingMsg',381,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6651,973,973,'OP_MoveLogUpdateMsg',382,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6652,973,973,'OP_OfferQuestMsg',383,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6653,973,973,'OP_WorldShutdownUpdateMsg',384,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6654,973,973,'OP_DisplayMailScreenMsg',385,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6655,973,973,'OP_ClientIdleBeginMsg',386,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6656,973,973,'OP_ClientIdleEndMsg',387,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6657,973,973,'OP_PurchaseConsignmentLoreCheckRe',388,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6658,973,973,'OP_NotifyApprenticeStoppedMentori',389,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6659,973,973,'OP_CorruptedClientMsg',390,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6660,973,973,'OP_WorldDataChangeMsg',391,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6661,973,973,'OP_MailEventNotificationMsg',392,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6662,973,973,'OP_RestartZoneMsg',393,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6663,973,973,'OP_FlightPathsMsg',394,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6664,973,973,'OP_CharacterLinkdeadMsg',395,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6665,973,973,'OP_CharTransferStartRequestMsg',396,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6666,973,973,'OP_CharTransferStartReplyMsg',397,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6667,973,973,'OP_CharTransferRequestMsg',398,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6668,973,973,'OP_CharTransferReplyMsg',399,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6669,973,973,'OP_CharTransferRollbackRequestMsg',400,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6670,973,973,'OP_CharTransferCommitRequestMsg',401,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6671,973,973,'OP_CharTransferRollbackReplyMsg',402,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6672,973,973,'OP_CharTransferCommitReplyMsg',403,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6673,973,973,'OP_GetCharacterSerializedRequestM',404,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6674,973,973,'OP_GetCharacterSerializedReplyMsg',405,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6675,973,973,'OP_CreateCharFromCBBRequestMsg',406,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6676,973,973,'OP_CreateCharFromCBBReplyMsg',407,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6677,973,973,'OP_HousingDataChangedMsg',408,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6678,973,973,'OP_HousingRestoreMsg',409,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6679,973,973,'OP_AuctionItem',410,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6680,973,973,'OP_AuctionItemReply',411,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6681,973,973,'OP_AuctionCoin',412,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6682,973,973,'OP_AuctionCoinReply',413,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6683,973,973,'OP_AuctionCharacter',414,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6684,973,973,'OP_AuctionCharacterReply',415,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6685,973,973,'OP_AuctionCommitMsg',416,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6686,973,973,'OP_AuctionAbortMsg',417,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6687,973,973,'OP_CharTransferValidateRequestMsg',418,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6688,973,973,'OP_CharTransferValidateReplyMsg',419,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6689,973,973,'OP_RaceRestrictionMsg',420,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6690,973,973,'OP_SetInstanceDisplayNameMsg',421,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6691,973,973,'OP_GetAuctionAssetIDMsg',422,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6692,973,973,'OP_GetAuctionAssetIDReplyMsg',423,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6693,973,973,'OP_ResendWorldChannelsMsg',424,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6694,973,973,'OP_DisplayExchangeScreenMsg',425,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6695,973,973,'OP_ArenaGameTypesMsg',426,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6696,973,973,'OP_AuditAuctionEventMsg',428,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6697,973,973,'OP_InviteRequestMsg',430,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6698,973,973,'OP_InviteResponseMsg',431,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6699,973,973,'OP_InviteTargetResponseMsg',432,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6700,973,973,'OP_InspectPlayerRequestMsg',433,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6701,973,973,'OP_DispatchMsg',434,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6702,973,973,'OP_DisplayEventMsg',435,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6703,973,973,'OP_PrePossessionMsg',436,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6704,973,973,'OP_PostPossessionMsg',437,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6705,973,973,'OP_AdventureList',462,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6706,973,973,'OP_CancelSpellCast',463,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6707,973,973,'OP_AttackAllowed',475,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6708,973,973,'OP_AttackNotAllowed',476,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6709,973,973,'OP_DressingRoom',483,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6710,973,973,'OP_SkillInfoRequest',487,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6711,973,973,'OP_SkillInfoResponse',488,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6712,973,973,'OP_MapRequest',493,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6713,973,973,'OP_EqUnknown',510,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6714,973,973,'OP_EqHearChatCmd',511,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6715,973,973,'OP_EqDisplayTextCmd',512,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6716,973,973,'OP_EqCreateGhostCmd',513,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6717,973,973,'OP_EqCreateWidgetCmd',514,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6718,973,973,'OP_EqCreateSignWidgetCmd',515,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6719,973,973,'OP_EqDestroyGhostCmd',516,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6720,973,973,'OP_EqUpdateGhostCmd',517,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6721,973,973,'OP_EqSetControlGhostCmd',518,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6722,973,973,'OP_EqSetPOVGhostCmd',519,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6723,973,973,'OP_EqHearCombatCmd',520,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6724,973,973,'OP_EqHearSpellCastCmd',521,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6725,973,973,'OP_EqHearSpellInterruptCmd',524,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6726,973,973,'OP_EqHearSpellFizzleCmd',525,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6727,973,973,'OP_EqHearConsiderCmd',526,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6728,973,973,'OP_EqUpdateSubClassesCmd',527,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6729,973,973,'OP_EqCreateListBoxCmd',528,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6730,973,973,'OP_EqSetDebugPathPointsCmd',529,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6731,973,973,'OP_EqCannedEmoteCmd',531,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6732,973,973,'OP_EqStateCmd',532,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6733,973,973,'OP_EqPlaySoundCmd',533,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6734,973,973,'OP_EqPlaySound3DCmd',534,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6735,973,973,'OP_EqPlayVoiceCmd',535,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6736,973,973,'OP_EqHearDrowningCmd',536,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6737,973,973,'OP_EqHearDeathCmd',537,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6738,973,973,'OP_EqGroupMemberRemovedCmd',538,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6739,973,973,'OP_EqHearChainEffectCmd',539,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6740,973,973,'OP_EqReceiveOfferCmd',540,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6741,973,973,'OP_EqInspectPCResultsCmd',541,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6742,973,973,'OP_EqDrawablePathGraphCmd',542,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6743,973,973,'OP_EqDialogOpenCmd',543,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6744,973,973,'OP_EqDialogCloseCmd',544,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6745,973,973,'OP_EqFactionUpdateCmd',545,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6746,973,973,'OP_EqCollectionUpdateCmd',546,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6747,973,973,'OP_EqCollectionFilterCmd',547,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6748,973,973,'OP_EqCollectionItemCmd',548,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6749,973,973,'OP_EqQuestJournalUpdateCmd',549,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6750,973,973,'OP_EqQuestJournalReplyCmd',551,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6751,973,973,'OP_EqQuestGroupCmd',552,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6752,973,973,'OP_EqUpdateMerchantCmd',553,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6753,973,973,'OP_EqUpdateStoreCmd',554,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6754,973,973,'OP_EqUpdatePlayerTradeCmd',555,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6755,973,973,'OP_EqHelpPathCmd',556,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6756,973,973,'OP_EqHelpPathClearCmd',557,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6757,973,973,'OP_EqUpdateBankCmd',558,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6758,973,973,'OP_EqExamineInfoCmd',559,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6759,973,973,'OP_EqCloseWindowCmd',560,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6760,973,973,'OP_EqUpdateLootCmd',561,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6761,973,973,'OP_EqJunctionListCmd',562,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6762,973,973,'OP_EqShowDeathWindowCmd',563,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6763,973,973,'OP_EqDisplaySpellFailCmd',564,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6764,973,973,'OP_EqSpellCastStartCmd',565,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6765,973,973,'OP_EqSpellCastEndCmd',566,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6766,973,973,'OP_EqResurrectedCmd',567,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6767,973,973,'OP_EqChoiceWinCmd',568,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6768,973,973,'OP_EqSetDefaultVerbCmd',569,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6769,973,973,'OP_EqInstructionWindowCmd',571,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6770,973,973,'OP_EqInstructionWindowCloseCmd',572,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6771,973,973,'OP_EqInstructionWindowGoalCmd',573,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6772,973,973,'OP_EqInstructionWindowTaskCmd',574,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6773,973,973,'OP_EqEnableGameEventCmd',575,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6774,973,973,'OP_EqShowWindowCmd',576,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6775,973,973,'OP_EqEnableWindowCmd',577,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6776,973,973,'OP_EqFlashWindowCmd',578,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6777,973,973,'OP_EqHearPlayFlavorCmd',579,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6778,973,973,'OP_EqUpdateSignWidgetCmd',581,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6779,973,973,'OP_EqDebugPVDCmd',582,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6780,973,973,'OP_EqShowBookCmd',583,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6781,973,973,'OP_EqQuestionnaireCmd',584,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6782,973,973,'OP_EqGetProbsCmd',585,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6783,973,973,'OP_EqHearHealCmd',586,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6784,973,973,'OP_EqChatChannelUpdateCmd',587,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6785,973,973,'OP_EqWhoChannelQueryReplyCmd',588,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6786,973,973,'OP_EqAvailWorldChannelsCmd',589,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6787,973,973,'OP_EqUpdateTargetCmd',590,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6788,973,973,'OP_EqConsignmentItemsCmd',592,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6789,973,973,'OP_EqStartBrokerCmd',594,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6790,973,973,'OP_EqMapExplorationCmd',595,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6791,973,973,'OP_EqStoreLogCmd',596,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6792,973,973,'OP_EqSpellMoveToRangeAndRetryCmd',597,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6793,973,973,'OP_EqUpdatePlayerMailCmd',598,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6794,973,973,'OP_EqArenaResultsCmd',599,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6795,973,973,'OP_EqGuildBankEventActionCmd',600,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6796,973,973,'OP_EqGuildBankExamineInfoCmd',601,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6797,973,973,'OP_EqHearSpellNoLandCmd',602,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6798,973,973,'OP_Lottery',606,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6799,973,973,'OP_GuildRecruitingMemberInfo',607,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6800,973,973,'OP_GuildRecruiting',608,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6801,973,973,'OP_GuildRecruitingDetails',609,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6802,973,973,'OP_GuildRecruitingImage',610,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6803,973,973,'OP_PointOfInterest',631,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6804,973,973,'OP_TraitsList',633,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6805,973,973,'OP_RecipeList',642,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6806,973,973,'OP_CharacterAchievements',655,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6807,973,973,'OP_AddClientToGroupMsg',1027,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6808,973,973,'OP_AddGroupToGroupMsg',1027,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6809,973,973,'OP_GuildKickMsg',1027,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6810,973,973,'OP_ProcessScriptMsg',1027,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6811,973,973,'OP_ProcessWorkspaceMsg',1027,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6812,973,973,'OP_PurchaseConsignmentResponseMsg',1027,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6813,973,973,'OP_QuickbarAddMsg',1027,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6814,973,973,'OP_SkillSlotMapping',1027,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6815,973,973,'OP_Unknown',10031,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6816,973,973,'OP_WSWeatherUpdateMsg',10032,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6817,987,987,'OP_LoginRequestMsg',0,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6818,987,987,'OP_LoginByNumRequestMsg',1,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6819,987,987,'OP_WSLoginRequestMsg',2,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6820,987,987,'OP_ESLoginRequestMsg',3,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6821,987,987,'OP_LoginReplyMsg',4,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6822,987,987,'OP_WSStatusReplyMsg',5,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6823,987,987,'OP_WorldStatusChangeMsg',6,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6824,987,987,'OP_AllWSDescRequestMsg',7,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6825,987,987,'OP_WorldListMsg',8,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6826,987,987,'OP_AllCharactersDescRequestMsg',9,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6827,987,987,'OP_AllCharactersDescReplyMsg',10,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6828,987,987,'OP_CreateCharacterRequestMsg',11,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6829,987,987,'OP_CreateCharacterReplyMsg',12,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6830,987,987,'OP_WSCreateCharacterRequestMsg',13,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6831,987,987,'OP_WSCreateCharacterReplyMsg',14,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6832,987,987,'OP_ReskinCharacterRequestMsg',15,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6833,987,987,'OP_DeleteCharacterRequestMsg',16,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6834,987,987,'OP_DeleteCharacterReplyMsg',17,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6835,987,987,'OP_PlayCharacterRequestMsg',18,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6836,987,987,'OP_PlayCharacterReplyMsg',19,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6837,987,987,'OP_ExpectClientAsCharacterReplyMs',22,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6838,987,987,'OP_ServerPlayCharacterRequestMsg',23,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6839,987,987,'OP_ServerPlayCharacterReplyMsg',24,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6840,987,987,'OP_ESInitMsg',25,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6841,987,987,'OP_ESReadyForClientsMsg',26,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6842,987,987,'OP_CreateZoneInstanceMsg',27,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6843,987,987,'OP_ZoneInstanceCreateReplyMsg',28,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6844,987,987,'OP_ZoneInstanceDestroyedMsg',29,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6845,987,987,'OP_ExpectClientAsCharacterRequest',30,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6846,987,987,'OP_ZoneInfoMsg',31,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6847,987,987,'OP_DoneLoadingZoneResourcesMsg',32,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6848,987,987,'OP_DoneSendingInitialEntitiesMsg',33,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6849,987,987,'OP_DoneLoadingEntityResourcesMsg',34,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6850,987,987,'OP_PredictionUpdateMsg',35,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6851,987,987,'OP_UpdatePositionMsg',37,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6852,987,987,'OP_SetRemoteCmdsMsg',39,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6853,987,987,'OP_RemoteCmdMsg',40,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6854,987,987,'OP_GameWorldTimeMsg',41,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6855,987,987,'OP_MOTDMsg',42,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6856,987,987,'OP_ZoneMOTDMsg',43,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6857,987,987,'OP_AvatarCreatedMsg',44,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6858,987,987,'OP_AvatarDestroyedMsg',45,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6859,987,987,'OP_RequestCampMsg',47,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6860,987,987,'OP_CampStartedMsg',48,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6861,987,987,'OP_CampAbortedMsg',49,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6862,987,987,'OP_WhoQueryRequestMsg',50,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6863,987,987,'OP_WhoQueryReplyMsg',51,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6864,987,987,'OP_MonitorReplyMsg',52,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6865,987,987,'OP_MonitorCharacterListMsg',53,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6866,987,987,'OP_MonitorCharacterListRequestMsg',54,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6867,987,987,'OP_ClientCmdMsg',55,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6868,987,987,'OP_DispatchESMsg',56,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6869,987,987,'OP_DispatchClientCmdMsg',57,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6870,987,987,'OP_UpdateTargetMsg',58,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6871,987,987,'OP_UpdateTargetLocMsg',59,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6872,987,987,'OP_UpdateCharacterSheetMsg',60,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6873,987,987,'OP_UpdateSpellBookMsg',61,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6874,987,987,'OP_UpdateInventoryMsg',63,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6875,987,987,'OP_UpdateRecipeBookMsg',65,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6876,987,987,'OP_RequestRecipeDetailsMsg',66,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6877,987,987,'OP_RecipeDetailsMsg',67,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6878,987,987,'OP_UpdateSkillBookMsg',68,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6879,987,987,'OP_UpdateSkillsMsg',69,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6880,987,987,'OP_UpdateOpportunityMsg',70,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6881,987,987,'OP_ChangeZoneMsg',72,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6882,987,987,'OP_ClientTeleportRequestMsg',73,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6883,987,987,'OP_TeleportWithinZoneMsg',74,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6884,987,987,'OP_TeleportWithinZoneNoReloadMsg',75,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6885,987,987,'OP_MigrateClientToZoneRequestMsg',76,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6886,987,987,'OP_MigrateClientToZoneReplyMsg',77,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6887,987,987,'OP_ReadyToZoneMsg',78,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6888,987,987,'OP_RemoveClientFromGroupMsg',79,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6889,987,987,'OP_RemoveGroupFromGroupMsg',80,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6890,987,987,'OP_MakeGroupLeaderMsg',81,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6891,987,987,'OP_GroupCreatedMsg',82,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6892,987,987,'OP_GroupDestroyedMsg',83,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6893,987,987,'OP_GroupMemberAddedMsg',84,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6894,987,987,'OP_GroupMemberRemovedMsg',85,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6895,987,987,'OP_GroupRemovedFromGroupMsg',86,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6896,987,987,'OP_GroupLeaderChangedMsg',87,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6897,987,987,'OP_GroupResendOOZDataMsg',88,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6898,987,987,'OP_GroupSettingsChangedMsg',89,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6899,987,987,'OP_OutOfZoneMemberDataMsg',90,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6900,987,987,'OP_SendLatestRequestMsg',91,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6901,987,987,'OP_ClearDataMsg',92,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6902,987,987,'OP_SetSocialMsg',93,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6903,987,987,'OP_ESStatusMsg',94,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6904,987,987,'OP_ESZoneInstanceStatusMsg',95,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6905,987,987,'OP_ZonesStatusRequestMsg',96,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6906,987,987,'OP_ZonesStatusMsg',97,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6907,987,987,'OP_ESWeatherRequestMsg',98,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6908,987,987,'OP_ESWeatherRequestEndMsg',99,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6909,987,987,'OP_DialogSelectMsg',102,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6910,987,987,'OP_DialogCloseMsg',103,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6911,987,987,'OP_RemoveSpellEffectMsg',104,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6912,987,987,'OP_RemoveConcentrationMsg',105,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6913,987,987,'OP_QuestJournalOpenMsg',106,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6914,987,987,'OP_QuestJournalInspectMsg',107,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6915,987,987,'OP_QuestJournalSetVisibleMsg',108,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6916,987,987,'OP_QuestJournalWaypointMsg',109,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6917,987,987,'OP_CreateGuildRequestMsg',110,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6918,987,987,'OP_CreateGuildReplyMsg',111,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6919,987,987,'OP_GuildsayMsg',112,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6920,987,987,'OP_GuildUpdateMsg',115,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6921,987,987,'OP_DeleteGuildMsg',116,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6922,987,987,'OP_FellowshipExpMsg',117,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6923,987,987,'OP_ConsignmentCloseStoreMsg',118,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6924,987,987,'OP_ConsignItemRequestMsg',119,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6925,987,987,'OP_ConsignItemResponseMsg',120,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6926,987,987,'OP_PurchaseConsignmentRequestMsg',121,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6927,987,987,'OP_HouseDeletedRemotelyMsg',122,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6928,987,987,'OP_UpdateHouseDataMsg',123,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6929,987,987,'OP_UpdateHouseAccessDataMsg',124,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6930,987,987,'OP_PlayerHouseBaseScreenMsg',125,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6931,987,987,'OP_PlayerHousePurchaseScreenMsg',126,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6932,987,987,'OP_PlayerHouseAccessUpdateMsg',127,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6933,987,987,'OP_PlayerHouseDisplayStatusMsg',128,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6934,987,987,'OP_PlayerHouseCloseUIMsg',129,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6935,987,987,'OP_BuyPlayerHouseMsg',130,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6936,987,987,'OP_BuyPlayerHouseTintMsg',131,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6937,987,987,'OP_CollectAllHouseItemsMsg',132,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6938,987,987,'OP_RelinquishHouseMsg',133,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6939,987,987,'OP_EnterHouseMsg',134,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6940,987,987,'OP_ExitHouseMsg',135,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6941,987,987,'OP_HouseDefaultAccessSetMsg',136,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6942,987,987,'OP_HouseAccessSetMsg',137,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6943,987,987,'OP_HouseAccessRemoveMsg',138,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6944,987,987,'OP_PayHouseUpkeepMsg',139,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6945,987,987,'OP_MoveableObjectPlacementCriteri',141,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6946,987,987,'OP_EnterMoveObjectModeMsg',142,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6947,987,987,'OP_PositionMoveableObject',143,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6948,987,987,'OP_CancelMoveObjectModeMsg',144,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6949,987,987,'OP_ShaderCustomizationMsg',145,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6950,987,987,'OP_ReplaceableSubMeshesMsg',146,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6951,987,987,'OP_HouseCustomizationScreenMsg',147,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6952,987,987,'OP_CustomizationPurchaseRequestMs',148,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6953,987,987,'OP_CustomizationSetRequestMsg',149,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6954,987,987,'OP_CustomizationReplyMsg',150,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6955,987,987,'OP_TintWidgetsMsg',151,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6956,987,987,'OP_ExamineConsignmentRequestMsg',152,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6957,987,987,'OP_ExamineConsignmentResponseMsg',153,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6958,987,987,'OP_UISettingsResponseMsg',154,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6959,987,987,'OP_UIResetMsg',155,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6960,987,987,'OP_KeymapLoadMsg',156,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6961,987,987,'OP_KeymapNoneMsg',157,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6962,987,987,'OP_KeymapDataMsg',158,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6963,987,987,'OP_KeymapSaveMsg',159,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6964,987,987,'OP_DispatchSpellCmdMsg',160,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6965,987,987,'OP_EntityVerbsRequestMsg',162,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6966,987,987,'OP_EntityVerbsReplyMsg',163,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6967,987,987,'OP_EntityVerbsVerbMsg',164,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6968,987,987,'OP_ChatRelationshipUpdateMsg',166,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6969,987,987,'OP_LootItemsRequestMsg',167,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6970,987,987,'OP_StoppedLootingMsg',168,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6971,987,987,'OP_SitMsg',169,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6972,987,987,'OP_StandMsg',170,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6973,987,987,'OP_SatMsg',171,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6974,987,987,'OP_StoodMsg',172,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6975,987,987,'OP_ClearForTakeOffMsg',173,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6976,987,987,'OP_ReadyForTakeOffMsg',174,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6977,987,987,'OP_ShowIllusionsMsg',175,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6978,987,987,'OP_HideIllusionsMsg',176,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6979,987,987,'OP_ExamineItemRequestMsg',177,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6980,987,987,'OP_ReadBookPageMsg',178,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6981,987,987,'OP_DefaultGroupOptionsRequestMsg',179,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6982,987,987,'OP_DefaultGroupOptionsMsg',180,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6983,987,987,'OP_GroupOptionsMsg',181,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6984,987,987,'OP_DisplayGroupOptionsScreenMsg',182,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6985,987,987,'OP_DisplayInnVisitScreenMsg',183,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6986,987,987,'OP_DumpSchedulerMsg',184,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6987,987,987,'OP_LSRequestPlayerDescMsg',185,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6988,987,987,'OP_LSCheckAcctLockMsg',186,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6989,987,987,'OP_WSAcctLockStatusMsg',187,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6990,987,987,'OP_RequestHelpRepathMsg',188,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6991,987,987,'OP_RequestTargetLocMsg',189,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6992,987,987,'OP_UpdateMotdMsg',190,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6993,987,987,'OP_PerformPlayerKnockbackMsg',191,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6994,987,987,'OP_PerformCameraShakeMsg',192,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6995,987,987,'OP_PopulateSkillMapsMsg',195,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6996,987,987,'OP_CancelledFeignMsg',197,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6997,987,987,'OP_SignalMsg',198,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6998,987,987,'OP_ShowCreateFromRecipeUIMsg',199,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (6999,987,987,'OP_CancelCreateFromRecipeMsg',200,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7000,987,987,'OP_BeginItemCreationMsg',201,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7001,987,987,'OP_StopItemCreationMsg',202,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7002,987,987,'OP_ShowItemCreationProcessUIMsg',203,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7003,987,987,'OP_UpdateItemCreationProcessUIMsg',204,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7004,987,987,'OP_DisplayTSEventReactionMsg',205,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7005,987,987,'OP_ShowRecipeBookMsg',206,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7006,987,987,'OP_KnowledgebaseRequestMsg',207,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7007,987,987,'OP_KnowledgebaseResponseMsg',208,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7008,987,987,'OP_CSTicketHeaderRequestMsg',209,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7009,987,987,'OP_CSTicketInfoMsg',210,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7010,987,987,'OP_CSTicketCommentRequestMsg',211,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7011,987,987,'OP_CSTicketCommentResponseMsg',212,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7012,987,987,'OP_CSTicketCreateMsg',213,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7013,987,987,'OP_CSTicketAddCommentMsg',214,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7014,987,987,'OP_CSTicketDeleteMsg',215,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7015,987,987,'OP_CSTicketChangeNotificationMsg',216,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7016,987,987,'OP_WorldDataUpdateMsg',217,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7017,987,987,'OP_KnownLanguagesMsg',218,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7018,987,987,'OP_LsRequestClientCrashLogMsg',219,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7019,987,987,'OP_LsClientBaselogReplyMsg',220,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7020,987,987,'OP_LsClientCrashlogReplyMsg',221,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7021,987,987,'OP_LsClientAlertlogReplyMsg',222,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7022,987,987,'OP_LsClientVerifylogReplyMsg',223,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7023,987,987,'OP_ClientTeleportToLocationMsg',224,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7024,987,987,'OP_UpdateClientPredFlagsMsg',225,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7025,987,987,'OP_ChangeServerControlFlagMsg',226,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7026,987,987,'OP_CSToolsRequestMsg',227,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7027,987,987,'OP_CSToolsResponseMsg',228,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7028,987,987,'OP_AddSocialStructureStandingMsg',229,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7029,987,987,'OP_CreateBoatTransportsMsg',230,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7030,987,987,'OP_PositionBoatTransportMsg',231,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7031,987,987,'OP_MigrateBoatTransportMsg',232,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7032,987,987,'OP_MigrateBoatTransportReplyMsg',233,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7033,987,987,'OP_DisplayDebugNLLPointsMsg',234,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7034,987,987,'OP_ExamineInfoRequestMsg',235,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7035,987,987,'OP_QuickbarInitMsg',236,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7036,987,987,'OP_QuickbarUpdateMsg',237,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7037,987,987,'OP_MacroInitMsg',238,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7038,987,987,'OP_MacroUpdateMsg',239,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7039,987,987,'OP_QuestionnaireMsg',240,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7040,987,987,'OP_LevelChangedMsg',241,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7041,987,987,'OP_SpellGainedMsg',242,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7042,987,987,'OP_EncounterBrokenMsg',243,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7043,987,987,'OP_OnscreenMsgMsg',244,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7044,987,987,'OP_DisplayWarningMsg',245,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7045,987,987,'OP_ModifyGuildMsg',246,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7046,987,987,'OP_GuildEventMsg',247,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7047,987,987,'OP_GuildEventAddMsg',248,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7048,987,987,'OP_GuildEventActionMsg',249,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7049,987,987,'OP_GuildEventListMsg',250,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7050,987,987,'OP_RequestGuildEventDetailsMsg',251,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7051,987,987,'OP_GuildEventDetailsMsg',252,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7052,987,987,'OP_RequestGuildInfoMsg',253,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7053,987,987,'OP_GuildBankActionMsg',254,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7054,987,987,'OP_GuildBankActionResponseMsg',255,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7055,987,987,'OP_GuildBankItemDetailsRequestMsg',256,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7056,987,987,'OP_GuildBankItemDetailsResponseMs',257,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7057,987,987,'OP_GuildBankUpdateMsg',258,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7058,987,987,'OP_GuildBankEventListMsg',259,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7059,987,987,'OP_RequestGuildBankEventDetailsMs',260,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7060,987,987,'OP_RewardPackMsg',261,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7061,987,987,'OP_RenameGuildMsg',262,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7062,987,987,'OP_ZoneToFriendRequestMsg',264,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7063,987,987,'OP_ZoneToFriendReplyMsg',265,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7064,987,987,'OP_ChatCreateChannelMsg',266,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7065,987,987,'OP_ChatJoinChannelMsg',267,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7066,987,987,'OP_ChatWhoChannelMsg',268,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7067,987,987,'OP_ChatLeaveChannelMsg',269,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7068,987,987,'OP_ChatTellChannelMsg',270,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7069,987,987,'OP_ChatTellUserMsg',271,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7070,987,987,'OP_ChatToggleFriendMsg',272,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7071,987,987,'OP_ChatToggleIgnoreMsg',273,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7072,987,987,'OP_ChatSendFriendsMsg',274,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7073,987,987,'OP_ChatSendIgnoresMsg',275,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7074,987,987,'OP_QuestReward',302,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7075,987,987,'OP_ChatFiltersMsg',317,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7076,987,987,'OP_MailGetHeadersMsg',318,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7077,987,987,'OP_MailGetMessageMsg',319,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7078,987,987,'OP_MailSendMessageMsg',320,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7079,987,987,'OP_MailDeleteMessageMsg',321,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7080,987,987,'OP_MailGetHeadersReplyMsg',322,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7081,987,987,'OP_MailGetMessageReplyMsg',323,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7082,987,987,'OP_MailSendMessageReplyMsg',324,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7083,987,987,'OP_MailCommitSendMessageMsg',325,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7084,987,987,'OP_MailSendSystemMessageMsg',326,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7085,987,987,'OP_MailRemoveAttachFromMailMsg',327,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7086,987,987,'OP_WaypointRequestMsg',329,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7087,987,987,'OP_WaypointReplyMsg',330,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7088,987,987,'OP_WaypointSelectMsg',331,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7089,987,987,'OP_WaypointUpdateMsg',332,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7090,987,987,'OP_CharNameChangedMsg',333,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7091,987,987,'OP_ShowZoneTeleporterDestinations',334,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7092,987,987,'OP_SelectZoneTeleporterDestinatio',335,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7093,987,987,'OP_ReloadLocalizedTxtMsg',336,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7094,987,987,'OP_RequestGuildMembershipMsg',337,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7095,987,987,'OP_GuildMembershipResponseMsg',338,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7096,987,987,'OP_LeaveGuildNotifyMsg',339,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7097,987,987,'OP_JoinGuildNotifyMsg',340,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7098,987,987,'OP_AvatarUpdateMsg',342,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7099,987,987,'OP_BioUpdateMsg',343,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7100,987,987,'OP_InspectPlayerMsg',344,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7101,987,987,'OP_WSServerLockMsg',345,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7102,987,987,'OP_LSServerLockMsg',346,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7103,987,987,'OP_WSServerHideMsg',347,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7104,987,987,'OP_CsCategoryRequestMsg',348,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7105,987,987,'OP_CsCategoryResponseMsg',349,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7106,987,987,'OP_KnowledgeWindowSlotMappingMsg',350,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7107,987,987,'OP_LFGUpdateMsg',351,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7108,987,987,'OP_AFKUpdateMsg',352,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7109,987,987,'OP_AnonUpdateMsg',353,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7110,987,987,'OP_UpdateActivePublicZonesMsg',354,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7111,987,987,'OP_UnknownNpcMsg',355,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7112,987,987,'OP_PromoFlagsDetailsMsg',356,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7113,987,987,'OP_ConsignViewCreateMsg',357,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7114,987,987,'OP_ConsignViewGetPageMsg',358,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7115,987,987,'OP_ConsignViewReleaseMsg',359,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7116,987,987,'OP_ConsignRemoveItemsMsg',360,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7117,987,987,'OP_UpdateDebugRadiiMsg',361,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7118,987,987,'OP_SnoopMsg',362,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7119,987,987,'OP_ReportMsg',363,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7120,987,987,'OP_UpdateRaidMsg',364,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7121,987,987,'OP_ConsignViewSortMsg',365,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7122,987,987,'OP_TitleUpdateMsg',366,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7123,987,987,'OP_ClientFellMsg',367,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7124,987,987,'OP_ClientInDeathRegionMsg',368,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7125,987,987,'OP_CampClientMsg',369,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7126,987,987,'OP_CSToolAccessResponseMsg',370,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7127,987,987,'OP_TrackingUpdateMsg',371,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7128,987,987,'OP_BeginTrackingMsg',372,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7129,987,987,'OP_StopTrackingMsg',373,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7130,987,987,'OP_GetAvatarAccessRequestForCSToo',374,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7131,987,987,'OP_AdvancementRequestMsg',375,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7132,987,987,'OP_UpdateAvgFrameTimeMsg',376,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7133,987,987,'OP_MapFogDataInitMsg',377,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7134,987,987,'OP_MapFogDataUpdateMsg',378,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7135,987,987,'OP_CloseGroupInviteWindowMsg',379,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7136,987,987,'OP_UpdateGroupMemberDataMsg',380,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7137,987,987,'OP_WorldPingMsg',381,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7138,987,987,'OP_MoveLogUpdateMsg',382,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7139,987,987,'OP_OfferQuestMsg',383,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7140,987,987,'OP_WorldShutdownUpdateMsg',384,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7141,987,987,'OP_DisplayMailScreenMsg',385,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7142,987,987,'OP_ClientIdleBeginMsg',386,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7143,987,987,'OP_ClientIdleEndMsg',387,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7144,987,987,'OP_PurchaseConsignmentLoreCheckRe',388,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7145,987,987,'OP_NotifyApprenticeStoppedMentori',389,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7146,987,987,'OP_CorruptedClientMsg',390,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7147,987,987,'OP_WorldDataChangeMsg',391,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7148,987,987,'OP_MailEventNotificationMsg',392,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7149,987,987,'OP_RestartZoneMsg',393,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7150,987,987,'OP_FlightPathsMsg',394,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7151,987,987,'OP_CharacterLinkdeadMsg',395,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7152,987,987,'OP_CharTransferStartRequestMsg',396,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7153,987,987,'OP_CharTransferStartReplyMsg',397,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7154,987,987,'OP_CharTransferRequestMsg',398,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7155,987,987,'OP_CharTransferReplyMsg',399,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7156,987,987,'OP_CharTransferRollbackRequestMsg',400,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7157,987,987,'OP_CharTransferCommitRequestMsg',401,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7158,987,987,'OP_CharTransferRollbackReplyMsg',402,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7159,987,987,'OP_CharTransferCommitReplyMsg',403,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7160,987,987,'OP_GetCharacterSerializedRequestM',404,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7161,987,987,'OP_GetCharacterSerializedReplyMsg',405,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7162,987,987,'OP_CreateCharFromCBBRequestMsg',406,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7163,987,987,'OP_CreateCharFromCBBReplyMsg',407,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7164,987,987,'OP_HousingDataChangedMsg',408,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7165,987,987,'OP_HousingRestoreMsg',409,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7166,987,987,'OP_AuctionItem',410,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7167,987,987,'OP_AuctionItemReply',411,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7168,987,987,'OP_AuctionCoin',412,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7169,987,987,'OP_AuctionCoinReply',413,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7170,987,987,'OP_AuctionCharacter',414,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7171,987,987,'OP_AuctionCharacterReply',415,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7172,987,987,'OP_AuctionCommitMsg',416,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7173,987,987,'OP_AuctionAbortMsg',417,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7174,987,987,'OP_CharTransferValidateRequestMsg',418,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7175,987,987,'OP_CharTransferValidateReplyMsg',419,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7176,987,987,'OP_RaceRestrictionMsg',420,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7177,987,987,'OP_SetInstanceDisplayNameMsg',421,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7178,987,987,'OP_GetAuctionAssetIDMsg',422,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7179,987,987,'OP_GetAuctionAssetIDReplyMsg',423,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7180,987,987,'OP_ResendWorldChannelsMsg',424,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7181,987,987,'OP_DisplayExchangeScreenMsg',425,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7182,987,987,'OP_ArenaGameTypesMsg',426,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7183,987,987,'OP_AuditAuctionEventMsg',428,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7184,987,987,'OP_InviteRequestMsg',430,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7185,987,987,'OP_InviteResponseMsg',431,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7186,987,987,'OP_InviteTargetResponseMsg',432,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7187,987,987,'OP_InspectPlayerRequestMsg',433,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7188,987,987,'OP_DispatchMsg',434,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7189,987,987,'OP_DisplayEventMsg',435,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7190,987,987,'OP_PrePossessionMsg',436,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7191,987,987,'OP_PostPossessionMsg',437,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7192,987,987,'OP_AdventureList',462,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7193,987,987,'OP_CancelSpellCast',463,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7194,987,987,'OP_AttackAllowed',475,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7195,987,987,'OP_AttackNotAllowed',476,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7196,987,987,'OP_DressingRoom',483,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7197,987,987,'OP_SkillInfoRequest',487,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7198,987,987,'OP_SkillInfoResponse',488,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7199,987,987,'OP_MapRequest',493,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7200,987,987,'OP_EqUnknown',514,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7201,987,987,'OP_EqHearChatCmd',516,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7202,987,987,'OP_EqDisplayTextCmd',517,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7203,987,987,'OP_EqCreateGhostCmd',518,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7204,987,987,'OP_EqCreateWidgetCmd',519,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7205,987,987,'OP_EqCreateSignWidgetCmd',520,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7206,987,987,'OP_EqDestroyGhostCmd',521,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7207,987,987,'OP_EqUpdateGhostCmd',522,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7208,987,987,'OP_EqSetControlGhostCmd',523,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7209,987,987,'OP_EqSetPOVGhostCmd',524,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7210,987,987,'OP_EqHearCombatCmd',525,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7211,987,987,'OP_EqHearSpellCastCmd',526,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7212,987,987,'OP_EqHearSpellInterruptCmd',529,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7213,987,987,'OP_EqHearSpellFizzleCmd',530,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7214,987,987,'OP_EqHearConsiderCmd',531,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7215,987,987,'OP_EqUpdateSubClassesCmd',532,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7216,987,987,'OP_EqCreateListBoxCmd',533,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7217,987,987,'OP_EqSetDebugPathPointsCmd',534,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7218,987,987,'OP_EqCannedEmoteCmd',536,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7219,987,987,'OP_EqStateCmd',537,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7220,987,987,'OP_EqPlaySoundCmd',538,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7221,987,987,'OP_EqPlaySound3DCmd',539,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7222,987,987,'OP_EqPlayVoiceCmd',540,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7223,987,987,'OP_EqHearDrowningCmd',541,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7224,987,987,'OP_EqHearDeathCmd',542,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7225,987,987,'OP_EqGroupMemberRemovedCmd',543,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7226,987,987,'OP_EqHearChainEffectCmd',544,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7227,987,987,'OP_EqReceiveOfferCmd',545,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7228,987,987,'OP_EqInspectPCResultsCmd',546,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7229,987,987,'OP_EqDrawablePathGraphCmd',547,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7230,987,987,'OP_EqDialogOpenCmd',548,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7231,987,987,'OP_EqDialogCloseCmd',549,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7232,987,987,'OP_EqFactionUpdateCmd',550,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7233,987,987,'OP_EqCollectionUpdateCmd',551,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7234,987,987,'OP_EqCollectionFilterCmd',552,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7235,987,987,'OP_EqCollectionItemCmd',553,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7236,987,987,'OP_EqQuestJournalUpdateCmd',554,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7237,987,987,'OP_EqQuestJournalReplyCmd',556,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7238,987,987,'OP_EqQuestGroupCmd',557,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7239,987,987,'OP_EqUpdateMerchantCmd',558,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7240,987,987,'OP_EqUpdateStoreCmd',559,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7241,987,987,'OP_EqUpdatePlayerTradeCmd',560,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7242,987,987,'OP_EqHelpPathCmd',561,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7243,987,987,'OP_EqHelpPathClearCmd',562,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7244,987,987,'OP_EqUpdateBankCmd',563,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7245,987,987,'OP_EqExamineInfoCmd',564,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7246,987,987,'OP_EqCloseWindowCmd',565,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7247,987,987,'OP_EqUpdateLootCmd',566,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7248,987,987,'OP_EqJunctionListCmd',567,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7249,987,987,'OP_EqShowDeathWindowCmd',568,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7250,987,987,'OP_EqDisplaySpellFailCmd',569,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7251,987,987,'OP_EqSpellCastStartCmd',570,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7252,987,987,'OP_EqSpellCastEndCmd',571,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7253,987,987,'OP_EqResurrectedCmd',572,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7254,987,987,'OP_EqChoiceWinCmd',573,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7255,987,987,'OP_EqSetDefaultVerbCmd',574,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7256,987,987,'OP_EqInstructionWindowCmd',576,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7257,987,987,'OP_EqInstructionWindowCloseCmd',577,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7258,987,987,'OP_EqInstructionWindowGoalCmd',578,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7259,987,987,'OP_EqInstructionWindowTaskCmd',579,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7260,987,987,'OP_EqEnableGameEventCmd',580,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7261,987,987,'OP_EqShowWindowCmd',581,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7262,987,987,'OP_EqEnableWindowCmd',582,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7263,987,987,'OP_EqFlashWindowCmd',583,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7264,987,987,'OP_EqHearPlayFlavorCmd',584,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7265,987,987,'OP_EqUpdateSignWidgetCmd',586,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7266,987,987,'OP_EqDebugPVDCmd',587,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7267,987,987,'OP_EqShowBookCmd',588,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7268,987,987,'OP_EqQuestionnaireCmd',589,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7269,987,987,'OP_EqGetProbsCmd',590,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7270,987,987,'OP_EqHearHealCmd',591,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7271,987,987,'OP_EqChatChannelUpdateCmd',592,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7272,987,987,'OP_EqWhoChannelQueryReplyCmd',593,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7273,987,987,'OP_EqAvailWorldChannelsCmd',594,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7274,987,987,'OP_EqUpdateTargetCmd',595,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7275,987,987,'OP_EqConsignmentItemsCmd',597,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7276,987,987,'OP_EqStartBrokerCmd',599,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7277,987,987,'OP_EqMapExplorationCmd',600,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7278,987,987,'OP_EqStoreLogCmd',601,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7279,987,987,'OP_EqSpellMoveToRangeAndRetryCmd',602,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7280,987,987,'OP_EqUpdatePlayerMailCmd',603,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7281,987,987,'OP_EqArenaResultsCmd',604,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7282,987,987,'OP_EqGuildBankEventActionCmd',605,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7283,987,987,'OP_EqGuildBankExamineInfoCmd',606,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7284,987,987,'OP_EqHearSpellNoLandCmd',607,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7285,987,987,'OP_Lottery',610,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7286,987,987,'OP_GuildRecruitingMemberInfo',611,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7287,987,987,'OP_GuildRecruiting',612,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7288,987,987,'OP_GuildRecruitingDetails',613,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7289,987,987,'OP_GuildRecruitingImage',614,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7290,987,987,'OP_PointOfInterest',636,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7291,987,987,'OP_TraitsList',638,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7292,987,987,'OP_RecipeList',646,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7293,987,987,'OP_CharacterAchievements',655,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7294,987,987,'OP_AddClientToGroupMsg',1032,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7295,987,987,'OP_AddGroupToGroupMsg',1032,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7296,987,987,'OP_GuildKickMsg',1032,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7297,987,987,'OP_ProcessScriptMsg',1032,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7298,987,987,'OP_ProcessWorkspaceMsg',1032,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7299,987,987,'OP_PurchaseConsignmentResponseMsg',1032,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7300,987,987,'OP_QuickbarAddMsg',1032,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7301,987,987,'OP_SkillSlotMapping',1032,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7302,987,987,'OP_Unknown',10036,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7303,987,987,'OP_WSWeatherUpdateMsg',10037,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7304,996,996,'OP_LoginRequestMsg',0,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7305,996,996,'OP_LoginByNumRequestMsg',1,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7306,996,996,'OP_WSLoginRequestMsg',2,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7307,996,996,'OP_ESLoginRequestMsg',3,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7308,996,996,'OP_LoginReplyMsg',4,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7309,996,996,'OP_WSStatusReplyMsg',5,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7310,996,996,'OP_WorldStatusChangeMsg',6,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7311,996,996,'OP_AllWSDescRequestMsg',7,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7312,996,996,'OP_WorldListMsg',8,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7313,996,996,'OP_AllCharactersDescRequestMsg',9,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7314,996,996,'OP_AllCharactersDescReplyMsg',10,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7315,996,996,'OP_CreateCharacterRequestMsg',11,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7316,996,996,'OP_CreateCharacterReplyMsg',12,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7317,996,996,'OP_WSCreateCharacterRequestMsg',13,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7318,996,996,'OP_WSCreateCharacterReplyMsg',14,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7319,996,996,'OP_ReskinCharacterRequestMsg',15,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7320,996,996,'OP_DeleteCharacterRequestMsg',16,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7321,996,996,'OP_DeleteCharacterReplyMsg',17,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7322,996,996,'OP_PlayCharacterRequestMsg',18,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7323,996,996,'OP_PlayCharacterReplyMsg',19,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7324,996,996,'OP_ExpectClientAsCharacterReplyMs',22,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7325,996,996,'OP_ServerPlayCharacterRequestMsg',23,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7326,996,996,'OP_ServerPlayCharacterReplyMsg',24,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7327,996,996,'OP_ESInitMsg',25,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7328,996,996,'OP_ESReadyForClientsMsg',26,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7329,996,996,'OP_CreateZoneInstanceMsg',27,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7330,996,996,'OP_ZoneInstanceCreateReplyMsg',28,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7331,996,996,'OP_ZoneInstanceDestroyedMsg',29,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7332,996,996,'OP_ExpectClientAsCharacterRequest',30,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7333,996,996,'OP_ZoneInfoMsg',31,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7334,996,996,'OP_DoneLoadingZoneResourcesMsg',32,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7335,996,996,'OP_DoneSendingInitialEntitiesMsg',33,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7336,996,996,'OP_DoneLoadingEntityResourcesMsg',34,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7337,996,996,'OP_PredictionUpdateMsg',35,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7338,996,996,'OP_UpdatePositionMsg',37,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7339,996,996,'OP_SetRemoteCmdsMsg',39,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7340,996,996,'OP_RemoteCmdMsg',40,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7341,996,996,'OP_GameWorldTimeMsg',41,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7342,996,996,'OP_MOTDMsg',42,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7343,996,996,'OP_ZoneMOTDMsg',43,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7344,996,996,'OP_AvatarCreatedMsg',44,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7345,996,996,'OP_AvatarDestroyedMsg',45,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7346,996,996,'OP_RequestCampMsg',47,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7347,996,996,'OP_CampStartedMsg',48,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7348,996,996,'OP_CampAbortedMsg',49,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7349,996,996,'OP_WhoQueryRequestMsg',50,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7350,996,996,'OP_WhoQueryReplyMsg',51,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7351,996,996,'OP_MonitorReplyMsg',52,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7352,996,996,'OP_MonitorCharacterListMsg',53,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7353,996,996,'OP_MonitorCharacterListRequestMsg',54,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7354,996,996,'OP_ClientCmdMsg',55,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7355,996,996,'OP_DispatchESMsg',56,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7356,996,996,'OP_DispatchClientCmdMsg',57,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7357,996,996,'OP_UpdateTargetMsg',58,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7358,996,996,'OP_UpdateTargetLocMsg',59,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7359,996,996,'OP_UpdateCharacterSheetMsg',60,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7360,996,996,'OP_UpdateSpellBookMsg',61,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7361,996,996,'OP_UpdateInventoryMsg',63,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7362,996,996,'OP_UpdateRecipeBookMsg',65,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7363,996,996,'OP_RequestRecipeDetailsMsg',66,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7364,996,996,'OP_RecipeDetailsMsg',67,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7365,996,996,'OP_UpdateSkillBookMsg',68,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7366,996,996,'OP_UpdateSkillsMsg',69,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7367,996,996,'OP_UpdateOpportunityMsg',70,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7368,996,996,'OP_ChangeZoneMsg',72,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7369,996,996,'OP_ClientTeleportRequestMsg',73,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7370,996,996,'OP_TeleportWithinZoneMsg',74,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7371,996,996,'OP_TeleportWithinZoneNoReloadMsg',75,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7372,996,996,'OP_MigrateClientToZoneRequestMsg',76,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7373,996,996,'OP_MigrateClientToZoneReplyMsg',77,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7374,996,996,'OP_ReadyToZoneMsg',78,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7375,996,996,'OP_RemoveClientFromGroupMsg',79,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7376,996,996,'OP_RemoveGroupFromGroupMsg',80,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7377,996,996,'OP_MakeGroupLeaderMsg',81,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7378,996,996,'OP_GroupCreatedMsg',82,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7379,996,996,'OP_GroupDestroyedMsg',83,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7380,996,996,'OP_GroupMemberAddedMsg',84,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7381,996,996,'OP_GroupMemberRemovedMsg',85,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7382,996,996,'OP_GroupRemovedFromGroupMsg',86,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7383,996,996,'OP_GroupLeaderChangedMsg',87,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7384,996,996,'OP_GroupResendOOZDataMsg',88,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7385,996,996,'OP_GroupSettingsChangedMsg',89,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7386,996,996,'OP_OutOfZoneMemberDataMsg',90,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7387,996,996,'OP_SendLatestRequestMsg',91,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7388,996,996,'OP_ClearDataMsg',92,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7389,996,996,'OP_SetSocialMsg',93,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7390,996,996,'OP_ESStatusMsg',94,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7391,996,996,'OP_ESZoneInstanceStatusMsg',95,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7392,996,996,'OP_ZonesStatusRequestMsg',96,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7393,996,996,'OP_ZonesStatusMsg',97,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7394,996,996,'OP_ESWeatherRequestMsg',98,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7395,996,996,'OP_ESWeatherRequestEndMsg',99,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7396,996,996,'OP_DialogSelectMsg',102,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7397,996,996,'OP_DialogCloseMsg',103,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7398,996,996,'OP_RemoveSpellEffectMsg',104,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7399,996,996,'OP_RemoveConcentrationMsg',105,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7400,996,996,'OP_QuestJournalOpenMsg',106,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7401,996,996,'OP_QuestJournalInspectMsg',107,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7402,996,996,'OP_QuestJournalSetVisibleMsg',108,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7403,996,996,'OP_QuestJournalWaypointMsg',109,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7404,996,996,'OP_CreateGuildRequestMsg',110,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7405,996,996,'OP_CreateGuildReplyMsg',111,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7406,996,996,'OP_GuildsayMsg',112,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7407,996,996,'OP_GuildUpdateMsg',115,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7408,996,996,'OP_DeleteGuildMsg',116,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7409,996,996,'OP_FellowshipExpMsg',117,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7410,996,996,'OP_ConsignmentCloseStoreMsg',118,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7411,996,996,'OP_ConsignItemRequestMsg',119,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7412,996,996,'OP_ConsignItemResponseMsg',120,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7413,996,996,'OP_PurchaseConsignmentRequestMsg',121,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7414,996,996,'OP_HouseDeletedRemotelyMsg',122,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7415,996,996,'OP_UpdateHouseDataMsg',123,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7416,996,996,'OP_UpdateHouseAccessDataMsg',124,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7417,996,996,'OP_PlayerHouseBaseScreenMsg',125,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7418,996,996,'OP_PlayerHousePurchaseScreenMsg',126,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7419,996,996,'OP_PlayerHouseAccessUpdateMsg',127,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7420,996,996,'OP_PlayerHouseDisplayStatusMsg',128,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7421,996,996,'OP_PlayerHouseCloseUIMsg',129,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7422,996,996,'OP_BuyPlayerHouseMsg',130,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7423,996,996,'OP_BuyPlayerHouseTintMsg',131,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7424,996,996,'OP_CollectAllHouseItemsMsg',132,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7425,996,996,'OP_RelinquishHouseMsg',133,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7426,996,996,'OP_EnterHouseMsg',134,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7427,996,996,'OP_ExitHouseMsg',135,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7428,996,996,'OP_HouseDefaultAccessSetMsg',136,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7429,996,996,'OP_HouseAccessSetMsg',137,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7430,996,996,'OP_HouseAccessRemoveMsg',138,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7431,996,996,'OP_PayHouseUpkeepMsg',139,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7432,996,996,'OP_MoveableObjectPlacementCriteri',141,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7433,996,996,'OP_EnterMoveObjectModeMsg',142,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7434,996,996,'OP_PositionMoveableObject',143,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7435,996,996,'OP_CancelMoveObjectModeMsg',144,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7436,996,996,'OP_ShaderCustomizationMsg',145,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7437,996,996,'OP_ReplaceableSubMeshesMsg',146,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7438,996,996,'OP_HouseCustomizationScreenMsg',147,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7439,996,996,'OP_CustomizationPurchaseRequestMs',148,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7440,996,996,'OP_CustomizationSetRequestMsg',149,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7441,996,996,'OP_CustomizationReplyMsg',150,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7442,996,996,'OP_TintWidgetsMsg',151,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7443,996,996,'OP_ExamineConsignmentRequestMsg',152,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7444,996,996,'OP_ExamineConsignmentResponseMsg',153,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7445,996,996,'OP_UISettingsResponseMsg',154,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7446,996,996,'OP_UIResetMsg',156,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7447,996,996,'OP_KeymapLoadMsg',157,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7448,996,996,'OP_KeymapNoneMsg',158,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7449,996,996,'OP_KeymapDataMsg',159,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7450,996,996,'OP_KeymapSaveMsg',160,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7451,996,996,'OP_DispatchSpellCmdMsg',161,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7452,996,996,'OP_EntityVerbsRequestMsg',163,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7453,996,996,'OP_EntityVerbsReplyMsg',164,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7454,996,996,'OP_EntityVerbsVerbMsg',165,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7455,996,996,'OP_ChatRelationshipUpdateMsg',167,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7456,996,996,'OP_LootItemsRequestMsg',168,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7457,996,996,'OP_StoppedLootingMsg',169,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7458,996,996,'OP_SitMsg',170,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7459,996,996,'OP_StandMsg',171,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7460,996,996,'OP_SatMsg',172,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7461,996,996,'OP_StoodMsg',173,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7462,996,996,'OP_ClearForTakeOffMsg',174,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7463,996,996,'OP_ReadyForTakeOffMsg',175,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7464,996,996,'OP_ShowIllusionsMsg',176,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7465,996,996,'OP_HideIllusionsMsg',177,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7466,996,996,'OP_ExamineItemRequestMsg',178,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7467,996,996,'OP_ReadBookPageMsg',179,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7468,996,996,'OP_DefaultGroupOptionsRequestMsg',180,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7469,996,996,'OP_DefaultGroupOptionsMsg',181,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7470,996,996,'OP_GroupOptionsMsg',182,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7471,996,996,'OP_DisplayGroupOptionsScreenMsg',183,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7472,996,996,'OP_DisplayInnVisitScreenMsg',184,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7473,996,996,'OP_DumpSchedulerMsg',185,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7474,996,996,'OP_LSRequestPlayerDescMsg',186,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7475,996,996,'OP_LSCheckAcctLockMsg',187,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7476,996,996,'OP_WSAcctLockStatusMsg',188,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7477,996,996,'OP_RequestHelpRepathMsg',189,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7478,996,996,'OP_RequestTargetLocMsg',190,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7479,996,996,'OP_UpdateMotdMsg',191,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7480,996,996,'OP_PerformPlayerKnockbackMsg',192,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7481,996,996,'OP_PerformCameraShakeMsg',193,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7482,996,996,'OP_PopulateSkillMapsMsg',196,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7483,996,996,'OP_CancelledFeignMsg',198,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7484,996,996,'OP_SignalMsg',199,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7485,996,996,'OP_ShowCreateFromRecipeUIMsg',200,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7486,996,996,'OP_CancelCreateFromRecipeMsg',201,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7487,996,996,'OP_BeginItemCreationMsg',202,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7488,996,996,'OP_StopItemCreationMsg',203,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7489,996,996,'OP_ShowItemCreationProcessUIMsg',204,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7490,996,996,'OP_UpdateItemCreationProcessUIMsg',205,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7491,996,996,'OP_DisplayTSEventReactionMsg',206,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7492,996,996,'OP_ShowRecipeBookMsg',207,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7493,996,996,'OP_KnowledgebaseRequestMsg',208,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7494,996,996,'OP_KnowledgebaseResponseMsg',209,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7495,996,996,'OP_CSTicketHeaderRequestMsg',210,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7496,996,996,'OP_CSTicketInfoMsg',211,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7497,996,996,'OP_CSTicketCommentRequestMsg',212,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7498,996,996,'OP_CSTicketCommentResponseMsg',213,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7499,996,996,'OP_CSTicketCreateMsg',214,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7500,996,996,'OP_CSTicketAddCommentMsg',215,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7501,996,996,'OP_CSTicketDeleteMsg',216,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7502,996,996,'OP_CSTicketChangeNotificationMsg',217,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7503,996,996,'OP_WorldDataUpdateMsg',218,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7504,996,996,'OP_KnownLanguagesMsg',219,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7505,996,996,'OP_LsRequestClientCrashLogMsg',220,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7506,996,996,'OP_LsClientBaselogReplyMsg',221,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7507,996,996,'OP_LsClientCrashlogReplyMsg',222,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7508,996,996,'OP_LsClientAlertlogReplyMsg',223,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7509,996,996,'OP_LsClientVerifylogReplyMsg',224,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7510,996,996,'OP_ClientTeleportToLocationMsg',225,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7511,996,996,'OP_UpdateClientPredFlagsMsg',226,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7512,996,996,'OP_ChangeServerControlFlagMsg',227,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7513,996,996,'OP_CSToolsRequestMsg',228,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7514,996,996,'OP_CSToolsResponseMsg',229,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7515,996,996,'OP_AddSocialStructureStandingMsg',230,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7516,996,996,'OP_CreateBoatTransportsMsg',231,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7517,996,996,'OP_PositionBoatTransportMsg',232,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7518,996,996,'OP_MigrateBoatTransportMsg',233,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7519,996,996,'OP_MigrateBoatTransportReplyMsg',234,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7520,996,996,'OP_DisplayDebugNLLPointsMsg',235,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7521,996,996,'OP_ExamineInfoRequestMsg',236,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7522,996,996,'OP_QuickbarInitMsg',237,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7523,996,996,'OP_QuickbarUpdateMsg',238,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7524,996,996,'OP_MacroInitMsg',239,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7525,996,996,'OP_MacroUpdateMsg',240,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7526,996,996,'OP_QuestionnaireMsg',241,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7527,996,996,'OP_LevelChangedMsg',242,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7528,996,996,'OP_SpellGainedMsg',243,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7529,996,996,'OP_EncounterBrokenMsg',244,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7530,996,996,'OP_OnscreenMsgMsg',245,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7531,996,996,'OP_DisplayWarningMsg',246,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7532,996,996,'OP_ModifyGuildMsg',247,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7533,996,996,'OP_GuildEventMsg',248,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7534,996,996,'OP_GuildEventAddMsg',249,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7535,996,996,'OP_GuildEventActionMsg',250,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7536,996,996,'OP_GuildEventListMsg',251,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7537,996,996,'OP_RequestGuildEventDetailsMsg',252,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7538,996,996,'OP_GuildEventDetailsMsg',253,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7539,996,996,'OP_RequestGuildInfoMsg',254,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7540,996,996,'OP_GuildBankActionMsg',255,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7541,996,996,'OP_GuildBankActionResponseMsg',256,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7542,996,996,'OP_GuildBankItemDetailsRequestMsg',257,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7543,996,996,'OP_GuildBankItemDetailsResponseMs',258,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7544,996,996,'OP_GuildBankUpdateMsg',259,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7545,996,996,'OP_GuildBankEventListMsg',260,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7546,996,996,'OP_RequestGuildBankEventDetailsMs',261,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7547,996,996,'OP_RewardPackMsg',262,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7548,996,996,'OP_RenameGuildMsg',263,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7549,996,996,'OP_ZoneToFriendRequestMsg',265,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7550,996,996,'OP_ZoneToFriendReplyMsg',266,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7551,996,996,'OP_ChatCreateChannelMsg',267,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7552,996,996,'OP_ChatJoinChannelMsg',268,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7553,996,996,'OP_ChatWhoChannelMsg',269,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7554,996,996,'OP_ChatLeaveChannelMsg',270,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7555,996,996,'OP_ChatTellChannelMsg',271,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7556,996,996,'OP_ChatTellUserMsg',272,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7557,996,996,'OP_ChatToggleFriendMsg',273,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7558,996,996,'OP_ChatToggleIgnoreMsg',274,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7559,996,996,'OP_ChatSendFriendsMsg',275,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7560,996,996,'OP_ChatSendIgnoresMsg',276,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7561,996,996,'OP_QuestReward',303,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7562,996,996,'OP_ChatFiltersMsg',318,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7563,996,996,'OP_MailGetHeadersMsg',319,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7564,996,996,'OP_MailGetMessageMsg',320,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7565,996,996,'OP_MailSendMessageMsg',321,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7566,996,996,'OP_MailDeleteMessageMsg',322,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7567,996,996,'OP_MailGetHeadersReplyMsg',323,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7568,996,996,'OP_MailGetMessageReplyMsg',324,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7569,996,996,'OP_MailSendMessageReplyMsg',325,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7570,996,996,'OP_MailCommitSendMessageMsg',326,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7571,996,996,'OP_MailSendSystemMessageMsg',327,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7572,996,996,'OP_MailRemoveAttachFromMailMsg',328,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7573,996,996,'OP_WaypointRequestMsg',330,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7574,996,996,'OP_WaypointReplyMsg',331,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7575,996,996,'OP_WaypointSelectMsg',332,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7576,996,996,'OP_WaypointUpdateMsg',333,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7577,996,996,'OP_CharNameChangedMsg',334,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7578,996,996,'OP_ShowZoneTeleporterDestinations',335,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7579,996,996,'OP_SelectZoneTeleporterDestinatio',336,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7580,996,996,'OP_ReloadLocalizedTxtMsg',337,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7581,996,996,'OP_RequestGuildMembershipMsg',338,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7582,996,996,'OP_GuildMembershipResponseMsg',339,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7583,996,996,'OP_LeaveGuildNotifyMsg',340,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7584,996,996,'OP_JoinGuildNotifyMsg',341,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7585,996,996,'OP_AvatarUpdateMsg',343,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7586,996,996,'OP_BioUpdateMsg',344,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7587,996,996,'OP_InspectPlayerMsg',345,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7588,996,996,'OP_WSServerLockMsg',346,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7589,996,996,'OP_LSServerLockMsg',347,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7590,996,996,'OP_WSServerHideMsg',348,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7591,996,996,'OP_CsCategoryRequestMsg',349,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7592,996,996,'OP_CsCategoryResponseMsg',350,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7593,996,996,'OP_KnowledgeWindowSlotMappingMsg',351,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7594,996,996,'OP_LFGUpdateMsg',352,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7595,996,996,'OP_AFKUpdateMsg',353,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7596,996,996,'OP_AnonUpdateMsg',354,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7597,996,996,'OP_UpdateActivePublicZonesMsg',355,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7598,996,996,'OP_UnknownNpcMsg',356,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7599,996,996,'OP_PromoFlagsDetailsMsg',357,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7600,996,996,'OP_ConsignViewCreateMsg',358,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7601,996,996,'OP_ConsignViewGetPageMsg',359,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7602,996,996,'OP_ConsignViewReleaseMsg',360,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7603,996,996,'OP_ConsignRemoveItemsMsg',361,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7604,996,996,'OP_UpdateDebugRadiiMsg',362,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7605,996,996,'OP_SnoopMsg',363,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7606,996,996,'OP_ReportMsg',364,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7607,996,996,'OP_UpdateRaidMsg',365,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7608,996,996,'OP_ConsignViewSortMsg',366,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7609,996,996,'OP_TitleUpdateMsg',367,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7610,996,996,'OP_ClientFellMsg',368,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7611,996,996,'OP_ClientInDeathRegionMsg',369,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7612,996,996,'OP_CampClientMsg',370,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7613,996,996,'OP_CSToolAccessResponseMsg',371,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7614,996,996,'OP_TrackingUpdateMsg',372,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7615,996,996,'OP_BeginTrackingMsg',373,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7616,996,996,'OP_StopTrackingMsg',374,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7617,996,996,'OP_GetAvatarAccessRequestForCSToo',375,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7618,996,996,'OP_AdvancementRequestMsg',376,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7619,996,996,'OP_UpdateAvgFrameTimeMsg',377,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7620,996,996,'OP_MapFogDataInitMsg',378,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7621,996,996,'OP_MapFogDataUpdateMsg',379,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7622,996,996,'OP_CloseGroupInviteWindowMsg',380,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7623,996,996,'OP_UpdateGroupMemberDataMsg',381,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7624,996,996,'OP_WorldPingMsg',382,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7625,996,996,'OP_MoveLogUpdateMsg',383,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7626,996,996,'OP_OfferQuestMsg',384,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7627,996,996,'OP_WorldShutdownUpdateMsg',385,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7628,996,996,'OP_DisplayMailScreenMsg',386,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7629,996,996,'OP_ClientIdleBeginMsg',387,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7630,996,996,'OP_ClientIdleEndMsg',388,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7631,996,996,'OP_PurchaseConsignmentLoreCheckRe',389,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7632,996,996,'OP_NotifyApprenticeStoppedMentori',390,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7633,996,996,'OP_CorruptedClientMsg',391,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7634,996,996,'OP_WorldDataChangeMsg',392,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7635,996,996,'OP_MailEventNotificationMsg',393,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7636,996,996,'OP_RestartZoneMsg',394,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7637,996,996,'OP_FlightPathsMsg',395,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7638,996,996,'OP_CharacterLinkdeadMsg',396,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7639,996,996,'OP_CharTransferStartRequestMsg',397,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7640,996,996,'OP_CharTransferStartReplyMsg',398,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7641,996,996,'OP_CharTransferRequestMsg',399,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7642,996,996,'OP_CharTransferReplyMsg',400,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7643,996,996,'OP_CharTransferRollbackRequestMsg',401,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7644,996,996,'OP_CharTransferCommitRequestMsg',402,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7645,996,996,'OP_CharTransferRollbackReplyMsg',403,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7646,996,996,'OP_CharTransferCommitReplyMsg',404,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7647,996,996,'OP_GetCharacterSerializedRequestM',405,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7648,996,996,'OP_GetCharacterSerializedReplyMsg',406,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7649,996,996,'OP_CreateCharFromCBBRequestMsg',407,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7650,996,996,'OP_CreateCharFromCBBReplyMsg',408,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7651,996,996,'OP_HousingDataChangedMsg',409,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7652,996,996,'OP_HousingRestoreMsg',410,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7653,996,996,'OP_AuctionItem',411,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7654,996,996,'OP_AuctionItemReply',412,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7655,996,996,'OP_AuctionCoin',413,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7656,996,996,'OP_AuctionCoinReply',414,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7657,996,996,'OP_AuctionCharacter',415,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7658,996,996,'OP_AuctionCharacterReply',416,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7659,996,996,'OP_AuctionCommitMsg',417,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7660,996,996,'OP_AuctionAbortMsg',418,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7661,996,996,'OP_CharTransferValidateRequestMsg',419,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7662,996,996,'OP_CharTransferValidateReplyMsg',420,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7663,996,996,'OP_RaceRestrictionMsg',421,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7664,996,996,'OP_SetInstanceDisplayNameMsg',422,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7665,996,996,'OP_GetAuctionAssetIDMsg',423,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7666,996,996,'OP_GetAuctionAssetIDReplyMsg',424,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7667,996,996,'OP_ResendWorldChannelsMsg',425,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7668,996,996,'OP_DisplayExchangeScreenMsg',426,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7669,996,996,'OP_ArenaGameTypesMsg',427,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7670,996,996,'OP_AuditAuctionEventMsg',429,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7671,996,996,'OP_InviteRequestMsg',431,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7672,996,996,'OP_InviteResponseMsg',432,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7673,996,996,'OP_InviteTargetResponseMsg',433,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7674,996,996,'OP_InspectPlayerRequestMsg',434,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7675,996,996,'OP_DispatchMsg',435,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7676,996,996,'OP_DisplayEventMsg',436,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7677,996,996,'OP_PrePossessionMsg',437,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7678,996,996,'OP_PostPossessionMsg',438,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7679,996,996,'OP_AdventureList',464,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7680,996,996,'OP_CancelSpellCast',465,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7681,996,996,'OP_AttackAllowed',477,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7682,996,996,'OP_AttackNotAllowed',478,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7683,996,996,'OP_DressingRoom',485,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7684,996,996,'OP_SkillInfoRequest',489,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7685,996,996,'OP_SkillInfoResponse',490,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7686,996,996,'OP_MapRequest',495,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7687,996,996,'OP_EqUnknown',518,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7688,996,996,'OP_EqHearChatCmd',520,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7689,996,996,'OP_EqDisplayTextCmd',521,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7690,996,996,'OP_EqCreateGhostCmd',522,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7691,996,996,'OP_EqCreateWidgetCmd',523,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7692,996,996,'OP_EqCreateSignWidgetCmd',524,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7693,996,996,'OP_EqDestroyGhostCmd',525,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7694,996,996,'OP_EqUpdateGhostCmd',526,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7695,996,996,'OP_EqSetControlGhostCmd',527,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7696,996,996,'OP_EqSetPOVGhostCmd',528,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7697,996,996,'OP_EqHearCombatCmd',529,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7698,996,996,'OP_EqHearSpellCastCmd',530,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7699,996,996,'OP_EqHearSpellInterruptCmd',533,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7700,996,996,'OP_EqHearSpellFizzleCmd',534,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7701,996,996,'OP_EqHearConsiderCmd',535,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7702,996,996,'OP_EqUpdateSubClassesCmd',536,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7703,996,996,'OP_EqCreateListBoxCmd',537,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7704,996,996,'OP_EqSetDebugPathPointsCmd',538,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7705,996,996,'OP_EqCannedEmoteCmd',540,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7706,996,996,'OP_EqStateCmd',541,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7707,996,996,'OP_EqPlaySoundCmd',542,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7708,996,996,'OP_EqPlaySound3DCmd',543,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7709,996,996,'OP_EqPlayVoiceCmd',544,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7710,996,996,'OP_EqHearDrowningCmd',545,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7711,996,996,'OP_EqHearDeathCmd',546,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7712,996,996,'OP_EqGroupMemberRemovedCmd',547,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7713,996,996,'OP_EqHearChainEffectCmd',548,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7714,996,996,'OP_EqReceiveOfferCmd',549,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7715,996,996,'OP_EqInspectPCResultsCmd',550,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7716,996,996,'OP_EqDrawablePathGraphCmd',551,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7717,996,996,'OP_EqDialogOpenCmd',552,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7718,996,996,'OP_EqDialogCloseCmd',553,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7719,996,996,'OP_EqFactionUpdateCmd',554,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7720,996,996,'OP_EqCollectionUpdateCmd',555,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7721,996,996,'OP_EqCollectionFilterCmd',556,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7722,996,996,'OP_EqCollectionItemCmd',557,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7723,996,996,'OP_EqQuestJournalUpdateCmd',558,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7724,996,996,'OP_EqQuestJournalReplyCmd',560,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7725,996,996,'OP_EqQuestGroupCmd',561,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7726,996,996,'OP_EqUpdateMerchantCmd',562,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7727,996,996,'OP_EqUpdateStoreCmd',563,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7728,996,996,'OP_EqUpdatePlayerTradeCmd',564,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7729,996,996,'OP_EqHelpPathCmd',565,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7730,996,996,'OP_EqHelpPathClearCmd',566,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7731,996,996,'OP_EqUpdateBankCmd',567,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7732,996,996,'OP_EqExamineInfoCmd',568,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7733,996,996,'OP_EqCloseWindowCmd',569,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7734,996,996,'OP_EqUpdateLootCmd',570,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7735,996,996,'OP_EqJunctionListCmd',571,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7736,996,996,'OP_EqShowDeathWindowCmd',572,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7737,996,996,'OP_EqDisplaySpellFailCmd',573,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7738,996,996,'OP_EqSpellCastStartCmd',574,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7739,996,996,'OP_EqSpellCastEndCmd',575,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7740,996,996,'OP_EqResurrectedCmd',576,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7741,996,996,'OP_EqChoiceWinCmd',577,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7742,996,996,'OP_EqSetDefaultVerbCmd',578,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7743,996,996,'OP_EqInstructionWindowCmd',580,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7744,996,996,'OP_EqInstructionWindowCloseCmd',581,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7745,996,996,'OP_EqInstructionWindowGoalCmd',582,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7746,996,996,'OP_EqInstructionWindowTaskCmd',583,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7747,996,996,'OP_EqEnableGameEventCmd',584,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7748,996,996,'OP_EqShowWindowCmd',585,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7749,996,996,'OP_EqEnableWindowCmd',586,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7750,996,996,'OP_EqFlashWindowCmd',587,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7751,996,996,'OP_EqHearPlayFlavorCmd',588,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7752,996,996,'OP_EqUpdateSignWidgetCmd',590,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7753,996,996,'OP_EqDebugPVDCmd',591,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7754,996,996,'OP_EqShowBookCmd',592,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7755,996,996,'OP_EqQuestionnaireCmd',593,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7756,996,996,'OP_EqGetProbsCmd',594,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7757,996,996,'OP_EqHearHealCmd',595,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7758,996,996,'OP_EqChatChannelUpdateCmd',596,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7759,996,996,'OP_EqWhoChannelQueryReplyCmd',597,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7760,996,996,'OP_EqAvailWorldChannelsCmd',598,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7761,996,996,'OP_EqUpdateTargetCmd',599,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7762,996,996,'OP_EqConsignmentItemsCmd',601,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7763,996,996,'OP_EqStartBrokerCmd',603,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7764,996,996,'OP_EqMapExplorationCmd',604,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7765,996,996,'OP_EqStoreLogCmd',605,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7766,996,996,'OP_EqSpellMoveToRangeAndRetryCmd',606,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7767,996,996,'OP_EqUpdatePlayerMailCmd',607,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7768,996,996,'OP_EqArenaResultsCmd',608,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7769,996,996,'OP_EqGuildBankEventActionCmd',609,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7770,996,996,'OP_EqGuildBankExamineInfoCmd',610,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7771,996,996,'OP_EqHearSpellNoLandCmd',611,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7772,996,996,'OP_Lottery',615,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7773,996,996,'OP_GuildRecruitingMemberInfo',616,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7774,996,996,'OP_GuildRecruiting',617,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7775,996,996,'OP_GuildRecruitingDetails',618,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7776,996,996,'OP_GuildRecruitingImage',619,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7777,996,996,'OP_PointOfInterest',640,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7778,996,996,'OP_TraitsList',642,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7779,996,996,'OP_RecipeList',651,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7780,996,996,'OP_CharacterAchievements',653,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7781,996,996,'OP_AddClientToGroupMsg',1039,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7782,996,996,'OP_AddGroupToGroupMsg',1039,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7783,996,996,'OP_GuildKickMsg',1039,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7784,996,996,'OP_ProcessScriptMsg',1039,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7785,996,996,'OP_ProcessWorkspaceMsg',1039,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7786,996,996,'OP_PurchaseConsignmentResponseMsg',1039,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7787,996,996,'OP_QuickbarAddMsg',1039,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7788,996,996,'OP_SkillSlotMapping',1039,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7789,996,996,'OP_Unknown',10043,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7790,996,996,'OP_WSWeatherUpdateMsg',10044,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7791,1008,1011,'OP_LoginRequestMsg',0,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7792,1008,1011,'OP_LoginByNumRequestMsg',1,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7793,1008,1011,'OP_WSLoginRequestMsg',2,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7794,1008,1011,'OP_ESLoginRequestMsg',3,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7795,1008,1011,'OP_LoginReplyMsg',4,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7796,1008,1011,'OP_WSStatusReplyMsg',5,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7797,1008,1011,'OP_WorldStatusChangeMsg',6,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7798,1008,1011,'OP_AllWSDescRequestMsg',7,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7799,1008,1011,'OP_WorldListMsg',8,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7800,1008,1011,'OP_AllCharactersDescRequestMsg',9,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7801,1008,1011,'OP_AllCharactersDescReplyMsg',10,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7802,1008,1011,'OP_CreateCharacterRequestMsg',11,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7803,1008,1011,'OP_CreateCharacterReplyMsg',12,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7804,1008,1011,'OP_WSCreateCharacterRequestMsg',13,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7805,1008,1011,'OP_WSCreateCharacterReplyMsg',14,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7806,1008,1011,'OP_ReskinCharacterRequestMsg',15,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7807,1008,1011,'OP_DeleteCharacterRequestMsg',16,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7808,1008,1011,'OP_DeleteCharacterReplyMsg',17,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7809,1008,1011,'OP_PlayCharacterRequestMsg',18,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7810,1008,1011,'OP_PlayCharacterReplyMsg',19,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7811,1008,1011,'OP_ExpectClientAsCharacterReplyMs',22,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7812,1008,1011,'OP_ServerPlayCharacterRequestMsg',23,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7813,1008,1011,'OP_ServerPlayCharacterReplyMsg',24,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7814,1008,1011,'OP_ESInitMsg',25,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7815,1008,1011,'OP_ESReadyForClientsMsg',26,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7816,1008,1011,'OP_CreateZoneInstanceMsg',27,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7817,1008,1011,'OP_ZoneInstanceCreateReplyMsg',28,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7818,1008,1011,'OP_ZoneInstanceDestroyedMsg',29,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7819,1008,1011,'OP_ExpectClientAsCharacterRequest',30,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7820,1008,1011,'OP_ZoneInfoMsg',31,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7821,1008,1011,'OP_DoneLoadingZoneResourcesMsg',32,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7822,1008,1011,'OP_DoneSendingInitialEntitiesMsg',33,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7823,1008,1011,'OP_DoneLoadingEntityResourcesMsg',34,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7824,1008,1011,'OP_PredictionUpdateMsg',35,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7825,1008,1011,'OP_UpdatePositionMsg',37,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7826,1008,1011,'OP_SetRemoteCmdsMsg',39,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7827,1008,1011,'OP_RemoteCmdMsg',40,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7828,1008,1011,'OP_GameWorldTimeMsg',41,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7829,1008,1011,'OP_MOTDMsg',42,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7830,1008,1011,'OP_ZoneMOTDMsg',43,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7831,1008,1011,'OP_AvatarCreatedMsg',44,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7832,1008,1011,'OP_AvatarDestroyedMsg',45,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7833,1008,1011,'OP_RequestCampMsg',47,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7834,1008,1011,'OP_CampStartedMsg',48,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7835,1008,1011,'OP_CampAbortedMsg',49,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7836,1008,1011,'OP_WhoQueryRequestMsg',50,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7837,1008,1011,'OP_WhoQueryReplyMsg',51,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7838,1008,1011,'OP_MonitorReplyMsg',52,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7839,1008,1011,'OP_MonitorCharacterListMsg',53,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7840,1008,1011,'OP_MonitorCharacterListRequestMsg',54,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7841,1008,1011,'OP_ClientCmdMsg',55,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7842,1008,1011,'OP_DispatchESMsg',56,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7843,1008,1011,'OP_DispatchClientCmdMsg',57,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7844,1008,1011,'OP_UpdateTargetMsg',58,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7845,1008,1011,'OP_UpdateTargetLocMsg',59,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7846,1008,1011,'OP_UpdateCharacterSheetMsg',60,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7847,1008,1011,'OP_UpdateSpellBookMsg',61,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7848,1008,1011,'OP_UpdateInventoryMsg',63,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7849,1008,1011,'OP_UpdateRecipeBookMsg',65,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7850,1008,1011,'OP_RequestRecipeDetailsMsg',66,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7851,1008,1011,'OP_RecipeDetailsMsg',67,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7852,1008,1011,'OP_UpdateSkillBookMsg',68,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7853,1008,1011,'OP_UpdateSkillsMsg',69,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7854,1008,1011,'OP_UpdateOpportunityMsg',70,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7855,1008,1011,'OP_ChangeZoneMsg',72,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7856,1008,1011,'OP_ClientTeleportRequestMsg',73,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7857,1008,1011,'OP_TeleportWithinZoneMsg',74,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7858,1008,1011,'OP_TeleportWithinZoneNoReloadMsg',75,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7859,1008,1011,'OP_MigrateClientToZoneRequestMsg',76,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7860,1008,1011,'OP_MigrateClientToZoneReplyMsg',77,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7861,1008,1011,'OP_ReadyToZoneMsg',78,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7862,1008,1011,'OP_RemoveClientFromGroupMsg',79,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7863,1008,1011,'OP_RemoveGroupFromGroupMsg',80,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7864,1008,1011,'OP_MakeGroupLeaderMsg',81,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7865,1008,1011,'OP_GroupCreatedMsg',82,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7866,1008,1011,'OP_GroupDestroyedMsg',83,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7867,1008,1011,'OP_GroupMemberAddedMsg',84,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7868,1008,1011,'OP_GroupMemberRemovedMsg',85,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7869,1008,1011,'OP_GroupRemovedFromGroupMsg',86,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7870,1008,1011,'OP_GroupLeaderChangedMsg',87,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7871,1008,1011,'OP_GroupResendOOZDataMsg',88,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7872,1008,1011,'OP_GroupSettingsChangedMsg',89,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7873,1008,1011,'OP_OutOfZoneMemberDataMsg',90,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7874,1008,1011,'OP_SendLatestRequestMsg',91,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7875,1008,1011,'OP_ClearDataMsg',92,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7876,1008,1011,'OP_SetSocialMsg',93,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7877,1008,1011,'OP_ESStatusMsg',94,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7878,1008,1011,'OP_ESZoneInstanceStatusMsg',95,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7879,1008,1011,'OP_ZonesStatusRequestMsg',96,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7880,1008,1011,'OP_ZonesStatusMsg',97,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7881,1008,1011,'OP_ESWeatherRequestMsg',98,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7882,1008,1011,'OP_ESWeatherRequestEndMsg',99,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7883,1008,1011,'OP_DialogSelectMsg',102,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7884,1008,1011,'OP_DialogCloseMsg',103,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7885,1008,1011,'OP_RemoveSpellEffectMsg',104,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7886,1008,1011,'OP_RemoveConcentrationMsg',105,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7887,1008,1011,'OP_QuestJournalOpenMsg',106,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7888,1008,1011,'OP_QuestJournalInspectMsg',107,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7889,1008,1011,'OP_QuestJournalSetVisibleMsg',108,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7890,1008,1011,'OP_QuestJournalWaypointMsg',109,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7891,1008,1011,'OP_CreateGuildRequestMsg',110,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7892,1008,1011,'OP_CreateGuildReplyMsg',111,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7893,1008,1011,'OP_GuildsayMsg',112,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7894,1008,1011,'OP_GuildUpdateMsg',115,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7895,1008,1011,'OP_DeleteGuildMsg',116,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7896,1008,1011,'OP_FellowshipExpMsg',117,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7897,1008,1011,'OP_ConsignmentCloseStoreMsg',118,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7898,1008,1011,'OP_ConsignItemRequestMsg',119,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7899,1008,1011,'OP_ConsignItemResponseMsg',120,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7900,1008,1011,'OP_PurchaseConsignmentRequestMsg',121,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7901,1008,1011,'OP_HouseDeletedRemotelyMsg',122,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7902,1008,1011,'OP_UpdateHouseDataMsg',123,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7903,1008,1011,'OP_UpdateHouseAccessDataMsg',124,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7904,1008,1011,'OP_PlayerHouseBaseScreenMsg',125,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7905,1008,1011,'OP_PlayerHousePurchaseScreenMsg',126,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7906,1008,1011,'OP_PlayerHouseAccessUpdateMsg',127,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7907,1008,1011,'OP_PlayerHouseDisplayStatusMsg',128,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7908,1008,1011,'OP_PlayerHouseCloseUIMsg',129,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7909,1008,1011,'OP_BuyPlayerHouseMsg',130,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7910,1008,1011,'OP_BuyPlayerHouseTintMsg',131,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7911,1008,1011,'OP_CollectAllHouseItemsMsg',132,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7912,1008,1011,'OP_RelinquishHouseMsg',133,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7913,1008,1011,'OP_EnterHouseMsg',134,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7914,1008,1011,'OP_ExitHouseMsg',135,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7915,1008,1011,'OP_HouseDefaultAccessSetMsg',136,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7916,1008,1011,'OP_HouseAccessSetMsg',137,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7917,1008,1011,'OP_HouseAccessRemoveMsg',138,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7918,1008,1011,'OP_PayHouseUpkeepMsg',139,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7919,1008,1011,'OP_MoveableObjectPlacementCriteri',141,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7920,1008,1011,'OP_EnterMoveObjectModeMsg',142,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7921,1008,1011,'OP_PositionMoveableObject',143,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7922,1008,1011,'OP_CancelMoveObjectModeMsg',144,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7923,1008,1011,'OP_ShaderCustomizationMsg',145,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7924,1008,1011,'OP_ReplaceableSubMeshesMsg',146,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7925,1008,1011,'OP_HouseCustomizationScreenMsg',147,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7926,1008,1011,'OP_CustomizationPurchaseRequestMs',148,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7927,1008,1011,'OP_CustomizationSetRequestMsg',149,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7928,1008,1011,'OP_CustomizationReplyMsg',150,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7929,1008,1011,'OP_TintWidgetsMsg',151,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7930,1008,1011,'OP_ExamineConsignmentRequestMsg',152,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7931,1008,1011,'OP_ExamineConsignmentResponseMsg',153,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7932,1008,1011,'OP_UISettingsResponseMsg',154,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7933,1008,1011,'OP_UIResetMsg',156,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7934,1008,1011,'OP_KeymapLoadMsg',157,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7935,1008,1011,'OP_KeymapNoneMsg',158,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7936,1008,1011,'OP_KeymapDataMsg',159,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7937,1008,1011,'OP_KeymapSaveMsg',160,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7938,1008,1011,'OP_DispatchSpellCmdMsg',161,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7939,1008,1011,'OP_EntityVerbsRequestMsg',163,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7940,1008,1011,'OP_EntityVerbsReplyMsg',164,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7941,1008,1011,'OP_EntityVerbsVerbMsg',165,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7942,1008,1011,'OP_ChatRelationshipUpdateMsg',167,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7943,1008,1011,'OP_LootItemsRequestMsg',168,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7944,1008,1011,'OP_StoppedLootingMsg',169,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7945,1008,1011,'OP_SitMsg',170,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7946,1008,1011,'OP_StandMsg',171,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7947,1008,1011,'OP_SatMsg',172,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7948,1008,1011,'OP_StoodMsg',173,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7949,1008,1011,'OP_ClearForTakeOffMsg',174,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7950,1008,1011,'OP_ReadyForTakeOffMsg',175,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7951,1008,1011,'OP_ShowIllusionsMsg',176,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7952,1008,1011,'OP_HideIllusionsMsg',177,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7953,1008,1011,'OP_ExamineItemRequestMsg',178,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7954,1008,1011,'OP_ReadBookPageMsg',179,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7955,1008,1011,'OP_DefaultGroupOptionsRequestMsg',180,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7956,1008,1011,'OP_DefaultGroupOptionsMsg',181,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7957,1008,1011,'OP_GroupOptionsMsg',182,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7958,1008,1011,'OP_DisplayGroupOptionsScreenMsg',183,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7959,1008,1011,'OP_DisplayInnVisitScreenMsg',184,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7960,1008,1011,'OP_DumpSchedulerMsg',185,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7961,1008,1011,'OP_LSRequestPlayerDescMsg',186,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7962,1008,1011,'OP_LSCheckAcctLockMsg',187,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7963,1008,1011,'OP_WSAcctLockStatusMsg',188,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7964,1008,1011,'OP_RequestHelpRepathMsg',189,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7965,1008,1011,'OP_RequestTargetLocMsg',190,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7966,1008,1011,'OP_UpdateMotdMsg',191,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7967,1008,1011,'OP_PerformPlayerKnockbackMsg',192,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7968,1008,1011,'OP_PerformCameraShakeMsg',193,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7969,1008,1011,'OP_PopulateSkillMapsMsg',196,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7970,1008,1011,'OP_CancelledFeignMsg',198,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7971,1008,1011,'OP_SignalMsg',199,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7972,1008,1011,'OP_ShowCreateFromRecipeUIMsg',200,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7973,1008,1011,'OP_CancelCreateFromRecipeMsg',201,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7974,1008,1011,'OP_BeginItemCreationMsg',202,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7975,1008,1011,'OP_StopItemCreationMsg',203,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7976,1008,1011,'OP_ShowItemCreationProcessUIMsg',204,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7977,1008,1011,'OP_UpdateItemCreationProcessUIMsg',205,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7978,1008,1011,'OP_DisplayTSEventReactionMsg',206,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7979,1008,1011,'OP_ShowRecipeBookMsg',207,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7980,1008,1011,'OP_KnowledgebaseRequestMsg',208,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7981,1008,1011,'OP_KnowledgebaseResponseMsg',209,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7982,1008,1011,'OP_CSTicketHeaderRequestMsg',210,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7983,1008,1011,'OP_CSTicketInfoMsg',211,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7984,1008,1011,'OP_CSTicketCommentRequestMsg',212,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7985,1008,1011,'OP_CSTicketCommentResponseMsg',213,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7986,1008,1011,'OP_CSTicketCreateMsg',214,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7987,1008,1011,'OP_CSTicketAddCommentMsg',215,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7988,1008,1011,'OP_CSTicketDeleteMsg',216,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7989,1008,1011,'OP_CSTicketChangeNotificationMsg',217,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7990,1008,1011,'OP_WorldDataUpdateMsg',218,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7991,1008,1011,'OP_KnownLanguagesMsg',219,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7992,1008,1011,'OP_LsRequestClientCrashLogMsg',220,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7993,1008,1011,'OP_LsClientBaselogReplyMsg',221,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7994,1008,1011,'OP_LsClientCrashlogReplyMsg',222,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7995,1008,1011,'OP_LsClientAlertlogReplyMsg',223,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7996,1008,1011,'OP_LsClientVerifylogReplyMsg',224,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7997,1008,1011,'OP_ClientTeleportToLocationMsg',225,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7998,1008,1011,'OP_UpdateClientPredFlagsMsg',226,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (7999,1008,1011,'OP_ChangeServerControlFlagMsg',227,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8000,1008,1011,'OP_CSToolsRequestMsg',228,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8001,1008,1011,'OP_CSToolsResponseMsg',229,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8002,1008,1011,'OP_AddSocialStructureStandingMsg',230,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8003,1008,1011,'OP_CreateBoatTransportsMsg',231,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8004,1008,1011,'OP_PositionBoatTransportMsg',232,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8005,1008,1011,'OP_MigrateBoatTransportMsg',233,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8006,1008,1011,'OP_MigrateBoatTransportReplyMsg',234,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8007,1008,1011,'OP_DisplayDebugNLLPointsMsg',235,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8008,1008,1011,'OP_ExamineInfoRequestMsg',236,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8009,1008,1011,'OP_QuickbarInitMsg',237,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8010,1008,1011,'OP_QuickbarUpdateMsg',238,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8011,1008,1011,'OP_MacroInitMsg',239,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8012,1008,1011,'OP_MacroUpdateMsg',240,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8013,1008,1011,'OP_QuestionnaireMsg',241,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8014,1008,1011,'OP_LevelChangedMsg',242,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8015,1008,1011,'OP_SpellGainedMsg',243,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8016,1008,1011,'OP_EncounterBrokenMsg',244,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8017,1008,1011,'OP_OnscreenMsgMsg',245,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8018,1008,1011,'OP_DisplayWarningMsg',246,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8019,1008,1011,'OP_ModifyGuildMsg',247,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8020,1008,1011,'OP_GuildEventMsg',248,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8021,1008,1011,'OP_GuildEventAddMsg',249,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8022,1008,1011,'OP_GuildEventActionMsg',250,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8023,1008,1011,'OP_GuildEventListMsg',251,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8024,1008,1011,'OP_RequestGuildEventDetailsMsg',252,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8025,1008,1011,'OP_GuildEventDetailsMsg',253,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8026,1008,1011,'OP_RequestGuildInfoMsg',254,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8027,1008,1011,'OP_GuildBankActionMsg',255,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8028,1008,1011,'OP_GuildBankActionResponseMsg',256,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8029,1008,1011,'OP_GuildBankItemDetailsRequestMsg',257,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8030,1008,1011,'OP_GuildBankItemDetailsResponseMs',258,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8031,1008,1011,'OP_GuildBankUpdateMsg',259,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8032,1008,1011,'OP_GuildBankEventListMsg',260,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8033,1008,1011,'OP_RequestGuildBankEventDetailsMs',261,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8034,1008,1011,'OP_RewardPackMsg',262,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8035,1008,1011,'OP_RenameGuildMsg',263,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8036,1008,1011,'OP_ZoneToFriendRequestMsg',265,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8037,1008,1011,'OP_ZoneToFriendReplyMsg',266,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8038,1008,1011,'OP_ChatCreateChannelMsg',267,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8039,1008,1011,'OP_ChatJoinChannelMsg',268,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8040,1008,1011,'OP_ChatWhoChannelMsg',269,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8041,1008,1011,'OP_ChatLeaveChannelMsg',270,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8042,1008,1011,'OP_ChatTellChannelMsg',271,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8043,1008,1011,'OP_ChatTellUserMsg',272,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8044,1008,1011,'OP_ChatToggleFriendMsg',273,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8045,1008,1011,'OP_ChatToggleIgnoreMsg',274,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8046,1008,1011,'OP_ChatSendFriendsMsg',275,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8047,1008,1011,'OP_ChatSendIgnoresMsg',276,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8048,1008,1011,'OP_QuestReward',303,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8049,1008,1011,'OP_ChatFiltersMsg',318,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8050,1008,1011,'OP_MailGetHeadersMsg',319,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8051,1008,1011,'OP_MailGetMessageMsg',320,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8052,1008,1011,'OP_MailSendMessageMsg',321,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8053,1008,1011,'OP_MailDeleteMessageMsg',322,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8054,1008,1011,'OP_MailGetHeadersReplyMsg',323,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8055,1008,1011,'OP_MailGetMessageReplyMsg',324,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8056,1008,1011,'OP_MailSendMessageReplyMsg',325,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8057,1008,1011,'OP_MailCommitSendMessageMsg',326,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8058,1008,1011,'OP_MailSendSystemMessageMsg',327,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8059,1008,1011,'OP_MailRemoveAttachFromMailMsg',328,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8060,1008,1011,'OP_WaypointRequestMsg',330,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8061,1008,1011,'OP_WaypointReplyMsg',331,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8062,1008,1011,'OP_WaypointSelectMsg',332,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8063,1008,1011,'OP_WaypointUpdateMsg',333,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8064,1008,1011,'OP_CharNameChangedMsg',334,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8065,1008,1011,'OP_ShowZoneTeleporterDestinations',335,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8066,1008,1011,'OP_SelectZoneTeleporterDestinatio',336,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8067,1008,1011,'OP_ReloadLocalizedTxtMsg',337,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8068,1008,1011,'OP_RequestGuildMembershipMsg',338,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8069,1008,1011,'OP_GuildMembershipResponseMsg',339,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8070,1008,1011,'OP_LeaveGuildNotifyMsg',340,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8071,1008,1011,'OP_JoinGuildNotifyMsg',341,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8072,1008,1011,'OP_AvatarUpdateMsg',343,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8073,1008,1011,'OP_BioUpdateMsg',344,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8074,1008,1011,'OP_InspectPlayerMsg',345,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8075,1008,1011,'OP_WSServerLockMsg',346,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8076,1008,1011,'OP_LSServerLockMsg',347,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8077,1008,1011,'OP_WSServerHideMsg',348,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8078,1008,1011,'OP_CsCategoryRequestMsg',349,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8079,1008,1011,'OP_CsCategoryResponseMsg',350,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8080,1008,1011,'OP_KnowledgeWindowSlotMappingMsg',351,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8081,1008,1011,'OP_LFGUpdateMsg',352,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8082,1008,1011,'OP_AFKUpdateMsg',353,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8083,1008,1011,'OP_AnonUpdateMsg',354,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8084,1008,1011,'OP_UpdateActivePublicZonesMsg',355,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8085,1008,1011,'OP_UnknownNpcMsg',356,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8086,1008,1011,'OP_PromoFlagsDetailsMsg',357,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8087,1008,1011,'OP_ConsignViewCreateMsg',358,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8088,1008,1011,'OP_ConsignViewGetPageMsg',359,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8089,1008,1011,'OP_ConsignViewReleaseMsg',360,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8090,1008,1011,'OP_ConsignRemoveItemsMsg',361,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8091,1008,1011,'OP_UpdateDebugRadiiMsg',362,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8092,1008,1011,'OP_SnoopMsg',363,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8093,1008,1011,'OP_ReportMsg',364,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8094,1008,1011,'OP_UpdateRaidMsg',365,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8095,1008,1011,'OP_ConsignViewSortMsg',366,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8096,1008,1011,'OP_TitleUpdateMsg',367,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8097,1008,1011,'OP_ClientFellMsg',368,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8098,1008,1011,'OP_ClientInDeathRegionMsg',369,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8099,1008,1011,'OP_CampClientMsg',370,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8100,1008,1011,'OP_CSToolAccessResponseMsg',371,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8101,1008,1011,'OP_TrackingUpdateMsg',372,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8102,1008,1011,'OP_BeginTrackingMsg',373,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8103,1008,1011,'OP_StopTrackingMsg',374,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8104,1008,1011,'OP_GetAvatarAccessRequestForCSToo',375,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8105,1008,1011,'OP_AdvancementRequestMsg',376,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8106,1008,1011,'OP_UpdateAvgFrameTimeMsg',377,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8107,1008,1011,'OP_MapFogDataInitMsg',378,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8108,1008,1011,'OP_MapFogDataUpdateMsg',379,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8109,1008,1011,'OP_CloseGroupInviteWindowMsg',380,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8110,1008,1011,'OP_UpdateGroupMemberDataMsg',381,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8111,1008,1011,'OP_WorldPingMsg',382,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8112,1008,1011,'OP_MoveLogUpdateMsg',383,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8113,1008,1011,'OP_OfferQuestMsg',384,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8114,1008,1011,'OP_WorldShutdownUpdateMsg',385,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8115,1008,1011,'OP_DisplayMailScreenMsg',386,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8116,1008,1011,'OP_ClientIdleBeginMsg',387,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8117,1008,1011,'OP_ClientIdleEndMsg',388,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8118,1008,1011,'OP_PurchaseConsignmentLoreCheckRe',389,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8119,1008,1011,'OP_NotifyApprenticeStoppedMentori',390,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8120,1008,1011,'OP_CorruptedClientMsg',391,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8121,1008,1011,'OP_WorldDataChangeMsg',392,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8122,1008,1011,'OP_MailEventNotificationMsg',393,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8123,1008,1011,'OP_RestartZoneMsg',394,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8124,1008,1011,'OP_FlightPathsMsg',395,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8125,1008,1011,'OP_CharacterLinkdeadMsg',396,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8126,1008,1011,'OP_CharTransferStartRequestMsg',397,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8127,1008,1011,'OP_CharTransferStartReplyMsg',398,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8128,1008,1011,'OP_CharTransferRequestMsg',399,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8129,1008,1011,'OP_CharTransferReplyMsg',400,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8130,1008,1011,'OP_CharTransferRollbackRequestMsg',401,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8131,1008,1011,'OP_CharTransferCommitRequestMsg',402,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8132,1008,1011,'OP_CharTransferRollbackReplyMsg',403,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8133,1008,1011,'OP_CharTransferCommitReplyMsg',404,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8134,1008,1011,'OP_GetCharacterSerializedRequestM',405,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8135,1008,1011,'OP_GetCharacterSerializedReplyMsg',406,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8136,1008,1011,'OP_CreateCharFromCBBRequestMsg',407,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8137,1008,1011,'OP_CreateCharFromCBBReplyMsg',408,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8138,1008,1011,'OP_HousingDataChangedMsg',409,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8139,1008,1011,'OP_HousingRestoreMsg',410,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8140,1008,1011,'OP_AuctionItem',411,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8141,1008,1011,'OP_AuctionItemReply',412,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8142,1008,1011,'OP_AuctionCoin',413,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8143,1008,1011,'OP_AuctionCoinReply',414,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8144,1008,1011,'OP_AuctionCharacter',415,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8145,1008,1011,'OP_AuctionCharacterReply',416,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8146,1008,1011,'OP_AuctionCommitMsg',417,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8147,1008,1011,'OP_AuctionAbortMsg',418,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8148,1008,1011,'OP_CharTransferValidateRequestMsg',419,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8149,1008,1011,'OP_CharTransferValidateReplyMsg',420,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8150,1008,1011,'OP_RaceRestrictionMsg',421,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8151,1008,1011,'OP_SetInstanceDisplayNameMsg',422,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8152,1008,1011,'OP_GetAuctionAssetIDMsg',423,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8153,1008,1011,'OP_GetAuctionAssetIDReplyMsg',424,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8154,1008,1011,'OP_ResendWorldChannelsMsg',425,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8155,1008,1011,'OP_DisplayExchangeScreenMsg',426,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8156,1008,1011,'OP_ArenaGameTypesMsg',427,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8157,1008,1011,'OP_AuditAuctionEventMsg',429,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8158,1008,1011,'OP_InviteRequestMsg',431,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8159,1008,1011,'OP_InviteResponseMsg',432,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8160,1008,1011,'OP_InviteTargetResponseMsg',433,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8161,1008,1011,'OP_InspectPlayerRequestMsg',434,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8162,1008,1011,'OP_DispatchMsg',435,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8163,1008,1011,'OP_DisplayEventMsg',436,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8164,1008,1011,'OP_PrePossessionMsg',437,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8165,1008,1011,'OP_PostPossessionMsg',438,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8166,1008,1011,'OP_AdventureList',464,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8167,1008,1011,'OP_CancelSpellCast',465,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8168,1008,1011,'OP_AttackAllowed',477,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8169,1008,1011,'OP_AttackNotAllowed',478,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8170,1008,1011,'OP_DressingRoom',485,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8171,1008,1011,'OP_SkillInfoRequest',489,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8172,1008,1011,'OP_SkillInfoResponse',490,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8173,1008,1011,'OP_MapRequest',495,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8174,1008,1011,'OP_EqUnknown',520,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8175,1008,1011,'OP_EqHearChatCmd',522,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8176,1008,1011,'OP_EqDisplayTextCmd',523,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8177,1008,1011,'OP_EqCreateGhostCmd',524,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8178,1008,1011,'OP_EqCreateWidgetCmd',525,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8179,1008,1011,'OP_EqCreateSignWidgetCmd',526,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8180,1008,1011,'OP_EqDestroyGhostCmd',527,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8181,1008,1011,'OP_EqUpdateGhostCmd',528,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8182,1008,1011,'OP_EqSetControlGhostCmd',529,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8183,1008,1011,'OP_EqSetPOVGhostCmd',530,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8184,1008,1011,'OP_EqHearCombatCmd',531,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8185,1008,1011,'OP_EqHearSpellCastCmd',532,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8186,1008,1011,'OP_EqHearSpellInterruptCmd',535,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8187,1008,1011,'OP_EqHearSpellFizzleCmd',536,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8188,1008,1011,'OP_EqHearConsiderCmd',537,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8189,1008,1011,'OP_EqUpdateSubClassesCmd',538,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8190,1008,1011,'OP_EqCreateListBoxCmd',539,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8191,1008,1011,'OP_EqSetDebugPathPointsCmd',540,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8192,1008,1011,'OP_EqCannedEmoteCmd',542,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8193,1008,1011,'OP_EqStateCmd',543,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8194,1008,1011,'OP_EqPlaySoundCmd',544,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8195,1008,1011,'OP_EqPlaySound3DCmd',545,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8196,1008,1011,'OP_EqPlayVoiceCmd',546,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8197,1008,1011,'OP_EqHearDrowningCmd',547,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8198,1008,1011,'OP_EqHearDeathCmd',548,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8199,1008,1011,'OP_EqGroupMemberRemovedCmd',549,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8200,1008,1011,'OP_EqHearChainEffectCmd',550,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8201,1008,1011,'OP_EqReceiveOfferCmd',551,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8202,1008,1011,'OP_EqInspectPCResultsCmd',552,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8203,1008,1011,'OP_EqDrawablePathGraphCmd',553,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8204,1008,1011,'OP_EqDialogOpenCmd',554,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8205,1008,1011,'OP_EqDialogCloseCmd',555,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8206,1008,1011,'OP_EqFactionUpdateCmd',556,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8207,1008,1011,'OP_EqCollectionUpdateCmd',557,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8208,1008,1011,'OP_EqCollectionFilterCmd',558,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8209,1008,1011,'OP_EqCollectionItemCmd',559,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8210,1008,1011,'OP_EqQuestJournalUpdateCmd',560,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8211,1008,1011,'OP_EqQuestJournalReplyCmd',562,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8212,1008,1011,'OP_EqQuestGroupCmd',563,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8213,1008,1011,'OP_EqUpdateMerchantCmd',564,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8214,1008,1011,'OP_EqUpdateStoreCmd',565,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8215,1008,1011,'OP_EqUpdatePlayerTradeCmd',566,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8216,1008,1011,'OP_EqHelpPathCmd',567,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8217,1008,1011,'OP_EqHelpPathClearCmd',568,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8218,1008,1011,'OP_EqUpdateBankCmd',569,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8219,1008,1011,'OP_EqExamineInfoCmd',570,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8220,1008,1011,'OP_EqCloseWindowCmd',571,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8221,1008,1011,'OP_EqUpdateLootCmd',572,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8222,1008,1011,'OP_EqJunctionListCmd',573,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8223,1008,1011,'OP_EqShowDeathWindowCmd',574,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8224,1008,1011,'OP_EqDisplaySpellFailCmd',575,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8225,1008,1011,'OP_EqSpellCastStartCmd',576,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8226,1008,1011,'OP_EqSpellCastEndCmd',577,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8227,1008,1011,'OP_EqResurrectedCmd',578,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8228,1008,1011,'OP_EqChoiceWinCmd',579,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8229,1008,1011,'OP_EqSetDefaultVerbCmd',580,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8230,1008,1011,'OP_EqInstructionWindowCmd',582,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8231,1008,1011,'OP_EqInstructionWindowCloseCmd',583,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8232,1008,1011,'OP_EqInstructionWindowGoalCmd',584,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8233,1008,1011,'OP_EqInstructionWindowTaskCmd',585,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8234,1008,1011,'OP_EqEnableGameEventCmd',586,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8235,1008,1011,'OP_EqShowWindowCmd',587,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8236,1008,1011,'OP_EqEnableWindowCmd',588,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8237,1008,1011,'OP_EqFlashWindowCmd',589,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8238,1008,1011,'OP_EqHearPlayFlavorCmd',590,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8239,1008,1011,'OP_EqUpdateSignWidgetCmd',592,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8240,1008,1011,'OP_EqDebugPVDCmd',593,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8241,1008,1011,'OP_EqShowBookCmd',594,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8242,1008,1011,'OP_EqQuestionnaireCmd',595,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8243,1008,1011,'OP_EqGetProbsCmd',596,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8244,1008,1011,'OP_EqHearHealCmd',597,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8245,1008,1011,'OP_EqChatChannelUpdateCmd',598,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8246,1008,1011,'OP_EqWhoChannelQueryReplyCmd',599,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8247,1008,1011,'OP_EqAvailWorldChannelsCmd',600,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8248,1008,1011,'OP_EqUpdateTargetCmd',601,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8249,1008,1011,'OP_EqConsignmentItemsCmd',603,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8250,1008,1011,'OP_EqStartBrokerCmd',605,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8251,1008,1011,'OP_EqMapExplorationCmd',606,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8252,1008,1011,'OP_EqStoreLogCmd',607,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8253,1008,1011,'OP_EqSpellMoveToRangeAndRetryCmd',608,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8254,1008,1011,'OP_EqUpdatePlayerMailCmd',609,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8255,1008,1011,'OP_EqArenaResultsCmd',610,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8256,1008,1011,'OP_EqGuildBankEventActionCmd',611,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8257,1008,1011,'OP_EqGuildBankExamineInfoCmd',612,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8258,1008,1011,'OP_EqHearSpellNoLandCmd',613,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8259,1008,1011,'OP_Lottery',617,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8260,1008,1011,'OP_GuildRecruitingMemberInfo',618,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8261,1008,1011,'OP_GuildRecruiting',619,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8262,1008,1011,'OP_GuildRecruitingDetails',620,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8263,1008,1011,'OP_GuildRecruitingImage',621,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8264,1008,1011,'OP_PointOfInterest',642,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8265,1008,1011,'OP_TraitsList',644,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8266,1008,1011,'OP_RecipeList',653,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8267,1008,1011,'OP_CharacterAchievements',655,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8268,1008,1011,'OP_AddClientToGroupMsg',1041,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8269,1008,1011,'OP_AddGroupToGroupMsg',1041,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8270,1008,1011,'OP_GuildKickMsg',1041,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8271,1008,1011,'OP_ProcessScriptMsg',1041,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8272,1008,1011,'OP_ProcessWorkspaceMsg',1041,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8273,1008,1011,'OP_PurchaseConsignmentResponseMsg',1041,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8274,1008,1011,'OP_QuickbarAddMsg',1041,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8275,1008,1011,'OP_SkillSlotMapping',1041,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8276,1008,1011,'OP_Unknown',10045,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8277,1008,1011,'OP_WSWeatherUpdateMsg',10046,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8278,1027,1027,'OP_LoginRequestMsg',0,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8279,1027,1027,'OP_LoginByNumRequestMsg',1,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8280,1027,1027,'OP_WSLoginRequestMsg',2,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8281,1027,1027,'OP_ESLoginRequestMsg',3,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8282,1027,1027,'OP_LoginReplyMsg',4,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8283,1027,1027,'OP_WSStatusReplyMsg',5,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8284,1027,1027,'OP_WorldStatusChangeMsg',6,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8285,1027,1027,'OP_AllWSDescRequestMsg',7,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8286,1027,1027,'OP_WorldListMsg',8,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8287,1027,1027,'OP_AllCharactersDescRequestMsg',9,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8288,1027,1027,'OP_AllCharactersDescReplyMsg',10,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8289,1027,1027,'OP_CreateCharacterRequestMsg',11,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8290,1027,1027,'OP_CreateCharacterReplyMsg',12,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8291,1027,1027,'OP_WSCreateCharacterRequestMsg',13,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8292,1027,1027,'OP_WSCreateCharacterReplyMsg',14,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8293,1027,1027,'OP_ReskinCharacterRequestMsg',15,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8294,1027,1027,'OP_DeleteCharacterRequestMsg',16,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8295,1027,1027,'OP_DeleteCharacterReplyMsg',17,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8296,1027,1027,'OP_PlayCharacterRequestMsg',18,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8297,1027,1027,'OP_PlayCharacterReplyMsg',19,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8298,1027,1027,'OP_ExpectClientAsCharacterReplyMs',22,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8299,1027,1027,'OP_ServerPlayCharacterRequestMsg',23,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8300,1027,1027,'OP_ServerPlayCharacterReplyMsg',24,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8301,1027,1027,'OP_ESInitMsg',25,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8302,1027,1027,'OP_ESReadyForClientsMsg',26,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8303,1027,1027,'OP_CreateZoneInstanceMsg',27,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8304,1027,1027,'OP_ZoneInstanceCreateReplyMsg',28,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8305,1027,1027,'OP_ZoneInstanceDestroyedMsg',29,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8306,1027,1027,'OP_ExpectClientAsCharacterRequest',30,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8307,1027,1027,'OP_ZoneInfoMsg',31,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8308,1027,1027,'OP_DoneLoadingZoneResourcesMsg',32,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8309,1027,1027,'OP_DoneSendingInitialEntitiesMsg',33,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8310,1027,1027,'OP_DoneLoadingEntityResourcesMsg',34,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8311,1027,1027,'OP_PredictionUpdateMsg',35,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8312,1027,1027,'OP_UpdatePositionMsg',37,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8313,1027,1027,'OP_SetRemoteCmdsMsg',39,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8314,1027,1027,'OP_RemoteCmdMsg',40,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8315,1027,1027,'OP_GameWorldTimeMsg',41,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8316,1027,1027,'OP_MOTDMsg',42,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8317,1027,1027,'OP_ZoneMOTDMsg',43,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8318,1027,1027,'OP_AvatarCreatedMsg',44,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8319,1027,1027,'OP_AvatarDestroyedMsg',45,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8320,1027,1027,'OP_RequestCampMsg',47,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8321,1027,1027,'OP_CampStartedMsg',48,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8322,1027,1027,'OP_CampAbortedMsg',49,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8323,1027,1027,'OP_WhoQueryRequestMsg',50,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8324,1027,1027,'OP_WhoQueryReplyMsg',51,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8325,1027,1027,'OP_MonitorReplyMsg',52,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8326,1027,1027,'OP_MonitorCharacterListMsg',53,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8327,1027,1027,'OP_MonitorCharacterListRequestMsg',54,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8328,1027,1027,'OP_ClientCmdMsg',55,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8329,1027,1027,'OP_DispatchESMsg',56,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8330,1027,1027,'OP_DispatchClientCmdMsg',57,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8331,1027,1027,'OP_UpdateTargetMsg',58,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8332,1027,1027,'OP_UpdateTargetLocMsg',59,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8333,1027,1027,'OP_UpdateCharacterSheetMsg',60,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8334,1027,1027,'OP_UpdateSpellBookMsg',61,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8335,1027,1027,'OP_UpdateInventoryMsg',63,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8336,1027,1027,'OP_UpdateRecipeBookMsg',65,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8337,1027,1027,'OP_RequestRecipeDetailsMsg',66,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8338,1027,1027,'OP_RecipeDetailsMsg',67,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8339,1027,1027,'OP_UpdateSkillBookMsg',68,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8340,1027,1027,'OP_UpdateSkillsMsg',69,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8341,1027,1027,'OP_UpdateOpportunityMsg',70,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8342,1027,1027,'OP_ChangeZoneMsg',72,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8343,1027,1027,'OP_ClientTeleportRequestMsg',73,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8344,1027,1027,'OP_TeleportWithinZoneMsg',74,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8345,1027,1027,'OP_TeleportWithinZoneNoReloadMsg',75,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8346,1027,1027,'OP_MigrateClientToZoneRequestMsg',76,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8347,1027,1027,'OP_MigrateClientToZoneReplyMsg',77,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8348,1027,1027,'OP_ReadyToZoneMsg',78,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8349,1027,1027,'OP_RemoveClientFromGroupMsg',79,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8350,1027,1027,'OP_RemoveGroupFromGroupMsg',80,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8351,1027,1027,'OP_MakeGroupLeaderMsg',81,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8352,1027,1027,'OP_GroupCreatedMsg',82,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8353,1027,1027,'OP_GroupDestroyedMsg',83,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8354,1027,1027,'OP_GroupMemberAddedMsg',84,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8355,1027,1027,'OP_GroupMemberRemovedMsg',85,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8356,1027,1027,'OP_GroupRemovedFromGroupMsg',86,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8357,1027,1027,'OP_GroupLeaderChangedMsg',87,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8358,1027,1027,'OP_GroupResendOOZDataMsg',88,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8359,1027,1027,'OP_GroupSettingsChangedMsg',89,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8360,1027,1027,'OP_OutOfZoneMemberDataMsg',90,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8361,1027,1027,'OP_SendLatestRequestMsg',91,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8362,1027,1027,'OP_ClearDataMsg',92,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8363,1027,1027,'OP_SetSocialMsg',93,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8364,1027,1027,'OP_ESStatusMsg',94,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8365,1027,1027,'OP_ESZoneInstanceStatusMsg',95,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8366,1027,1027,'OP_ZonesStatusRequestMsg',96,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8367,1027,1027,'OP_ZonesStatusMsg',97,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8368,1027,1027,'OP_ESWeatherRequestMsg',98,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8369,1027,1027,'OP_ESWeatherRequestEndMsg',99,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8370,1027,1027,'OP_DialogSelectMsg',102,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8371,1027,1027,'OP_DialogCloseMsg',103,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8372,1027,1027,'OP_RemoveSpellEffectMsg',104,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8373,1027,1027,'OP_RemoveConcentrationMsg',105,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8374,1027,1027,'OP_QuestJournalOpenMsg',106,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8375,1027,1027,'OP_QuestJournalInspectMsg',107,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8376,1027,1027,'OP_QuestJournalSetVisibleMsg',108,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8377,1027,1027,'OP_QuestJournalWaypointMsg',109,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8378,1027,1027,'OP_CreateGuildRequestMsg',110,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8379,1027,1027,'OP_CreateGuildReplyMsg',111,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8380,1027,1027,'OP_GuildsayMsg',112,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8381,1027,1027,'OP_GuildUpdateMsg',116,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8382,1027,1027,'OP_DeleteGuildMsg',117,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8383,1027,1027,'OP_FellowshipExpMsg',118,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8384,1027,1027,'OP_ConsignmentCloseStoreMsg',119,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8385,1027,1027,'OP_ConsignItemRequestMsg',120,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8386,1027,1027,'OP_ConsignItemResponseMsg',121,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8387,1027,1027,'OP_PurchaseConsignmentRequestMsg',122,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8388,1027,1027,'OP_HouseDeletedRemotelyMsg',123,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8389,1027,1027,'OP_UpdateHouseDataMsg',124,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8390,1027,1027,'OP_UpdateHouseAccessDataMsg',125,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8391,1027,1027,'OP_PlayerHouseBaseScreenMsg',126,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8392,1027,1027,'OP_PlayerHousePurchaseScreenMsg',127,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8393,1027,1027,'OP_PlayerHouseAccessUpdateMsg',128,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8394,1027,1027,'OP_PlayerHouseDisplayStatusMsg',129,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8395,1027,1027,'OP_PlayerHouseCloseUIMsg',130,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8396,1027,1027,'OP_BuyPlayerHouseMsg',131,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8397,1027,1027,'OP_BuyPlayerHouseTintMsg',132,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8398,1027,1027,'OP_CollectAllHouseItemsMsg',133,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8399,1027,1027,'OP_RelinquishHouseMsg',134,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8400,1027,1027,'OP_EnterHouseMsg',135,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8401,1027,1027,'OP_ExitHouseMsg',136,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8402,1027,1027,'OP_HouseDefaultAccessSetMsg',137,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8403,1027,1027,'OP_HouseAccessSetMsg',138,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8404,1027,1027,'OP_HouseAccessRemoveMsg',139,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8405,1027,1027,'OP_PayHouseUpkeepMsg',140,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8406,1027,1027,'OP_MoveableObjectPlacementCriteri',142,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8407,1027,1027,'OP_EnterMoveObjectModeMsg',143,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8408,1027,1027,'OP_PositionMoveableObject',144,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8409,1027,1027,'OP_CancelMoveObjectModeMsg',145,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8410,1027,1027,'OP_ShaderCustomizationMsg',146,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8411,1027,1027,'OP_ReplaceableSubMeshesMsg',147,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8412,1027,1027,'OP_HouseCustomizationScreenMsg',148,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8413,1027,1027,'OP_CustomizationPurchaseRequestMs',149,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8414,1027,1027,'OP_CustomizationSetRequestMsg',150,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8415,1027,1027,'OP_CustomizationReplyMsg',151,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8416,1027,1027,'OP_TintWidgetsMsg',152,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8417,1027,1027,'OP_ExamineConsignmentRequestMsg',153,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8418,1027,1027,'OP_ExamineConsignmentResponseMsg',154,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8419,1027,1027,'OP_UISettingsResponseMsg',155,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8420,1027,1027,'OP_UIResetMsg',157,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8421,1027,1027,'OP_KeymapLoadMsg',158,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8422,1027,1027,'OP_KeymapNoneMsg',159,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8423,1027,1027,'OP_KeymapDataMsg',160,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8424,1027,1027,'OP_KeymapSaveMsg',161,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8425,1027,1027,'OP_DispatchSpellCmdMsg',162,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8426,1027,1027,'OP_EntityVerbsRequestMsg',164,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8427,1027,1027,'OP_EntityVerbsReplyMsg',165,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8428,1027,1027,'OP_EntityVerbsVerbMsg',166,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8429,1027,1027,'OP_ChatRelationshipUpdateMsg',168,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8430,1027,1027,'OP_LootItemsRequestMsg',169,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8431,1027,1027,'OP_StoppedLootingMsg',170,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8432,1027,1027,'OP_SitMsg',171,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8433,1027,1027,'OP_StandMsg',172,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8434,1027,1027,'OP_SatMsg',173,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8435,1027,1027,'OP_StoodMsg',174,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8436,1027,1027,'OP_ClearForTakeOffMsg',175,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8437,1027,1027,'OP_ReadyForTakeOffMsg',176,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8438,1027,1027,'OP_ShowIllusionsMsg',177,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8439,1027,1027,'OP_HideIllusionsMsg',178,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8440,1027,1027,'OP_ExamineItemRequestMsg',179,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8441,1027,1027,'OP_ReadBookPageMsg',180,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8442,1027,1027,'OP_DefaultGroupOptionsRequestMsg',181,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8443,1027,1027,'OP_DefaultGroupOptionsMsg',182,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8444,1027,1027,'OP_GroupOptionsMsg',183,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8445,1027,1027,'OP_DisplayGroupOptionsScreenMsg',184,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8446,1027,1027,'OP_DisplayInnVisitScreenMsg',185,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8447,1027,1027,'OP_DumpSchedulerMsg',186,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8448,1027,1027,'OP_LSRequestPlayerDescMsg',187,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8449,1027,1027,'OP_LSCheckAcctLockMsg',188,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8450,1027,1027,'OP_WSAcctLockStatusMsg',189,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8451,1027,1027,'OP_RequestHelpRepathMsg',190,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8452,1027,1027,'OP_RequestTargetLocMsg',191,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8453,1027,1027,'OP_UpdateMotdMsg',192,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8454,1027,1027,'OP_PerformPlayerKnockbackMsg',193,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8455,1027,1027,'OP_PerformCameraShakeMsg',194,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8456,1027,1027,'OP_PopulateSkillMapsMsg',197,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8457,1027,1027,'OP_CancelledFeignMsg',199,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8458,1027,1027,'OP_SignalMsg',200,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8459,1027,1027,'OP_ShowCreateFromRecipeUIMsg',201,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8460,1027,1027,'OP_CancelCreateFromRecipeMsg',202,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8461,1027,1027,'OP_BeginItemCreationMsg',203,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8462,1027,1027,'OP_StopItemCreationMsg',204,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8463,1027,1027,'OP_ShowItemCreationProcessUIMsg',205,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8464,1027,1027,'OP_UpdateItemCreationProcessUIMsg',206,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8465,1027,1027,'OP_DisplayTSEventReactionMsg',207,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8466,1027,1027,'OP_ShowRecipeBookMsg',208,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8467,1027,1027,'OP_KnowledgebaseRequestMsg',209,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8468,1027,1027,'OP_KnowledgebaseResponseMsg',210,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8469,1027,1027,'OP_CSTicketHeaderRequestMsg',211,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8470,1027,1027,'OP_CSTicketInfoMsg',212,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8471,1027,1027,'OP_CSTicketCommentRequestMsg',213,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8472,1027,1027,'OP_CSTicketCommentResponseMsg',214,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8473,1027,1027,'OP_CSTicketCreateMsg',215,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8474,1027,1027,'OP_CSTicketAddCommentMsg',216,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8475,1027,1027,'OP_CSTicketDeleteMsg',217,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8476,1027,1027,'OP_CSTicketChangeNotificationMsg',218,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8477,1027,1027,'OP_WorldDataUpdateMsg',219,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8478,1027,1027,'OP_KnownLanguagesMsg',220,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8479,1027,1027,'OP_LsRequestClientCrashLogMsg',221,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8480,1027,1027,'OP_LsClientBaselogReplyMsg',222,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8481,1027,1027,'OP_LsClientCrashlogReplyMsg',223,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8482,1027,1027,'OP_LsClientAlertlogReplyMsg',224,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8483,1027,1027,'OP_LsClientVerifylogReplyMsg',225,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8484,1027,1027,'OP_ClientTeleportToLocationMsg',226,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8485,1027,1027,'OP_UpdateClientPredFlagsMsg',227,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8486,1027,1027,'OP_ChangeServerControlFlagMsg',228,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8487,1027,1027,'OP_CSToolsRequestMsg',229,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8488,1027,1027,'OP_CSToolsResponseMsg',230,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8489,1027,1027,'OP_AddSocialStructureStandingMsg',231,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8490,1027,1027,'OP_CreateBoatTransportsMsg',232,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8491,1027,1027,'OP_PositionBoatTransportMsg',233,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8492,1027,1027,'OP_MigrateBoatTransportMsg',234,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8493,1027,1027,'OP_MigrateBoatTransportReplyMsg',235,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8494,1027,1027,'OP_DisplayDebugNLLPointsMsg',236,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8495,1027,1027,'OP_ExamineInfoRequestMsg',237,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8496,1027,1027,'OP_QuickbarInitMsg',238,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8497,1027,1027,'OP_QuickbarUpdateMsg',239,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8498,1027,1027,'OP_MacroInitMsg',240,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8499,1027,1027,'OP_MacroUpdateMsg',241,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8500,1027,1027,'OP_QuestionnaireMsg',242,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8501,1027,1027,'OP_LevelChangedMsg',243,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8502,1027,1027,'OP_SpellGainedMsg',244,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8503,1027,1027,'OP_EncounterBrokenMsg',245,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8504,1027,1027,'OP_OnscreenMsgMsg',246,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8505,1027,1027,'OP_DisplayWarningMsg',247,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8506,1027,1027,'OP_ModifyGuildMsg',248,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8507,1027,1027,'OP_GuildEventMsg',249,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8508,1027,1027,'OP_GuildEventAddMsg',250,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8509,1027,1027,'OP_GuildEventActionMsg',251,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8510,1027,1027,'OP_GuildEventListMsg',252,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8511,1027,1027,'OP_RequestGuildEventDetailsMsg',253,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8512,1027,1027,'OP_GuildEventDetailsMsg',254,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8513,1027,1027,'OP_RequestGuildInfoMsg',255,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8514,1027,1027,'OP_GuildBankActionMsg',256,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8515,1027,1027,'OP_GuildBankActionResponseMsg',257,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8516,1027,1027,'OP_GuildBankItemDetailsRequestMsg',258,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8517,1027,1027,'OP_GuildBankItemDetailsResponseMs',259,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8518,1027,1027,'OP_GuildBankUpdateMsg',260,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8519,1027,1027,'OP_GuildBankEventListMsg',261,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8520,1027,1027,'OP_RequestGuildBankEventDetailsMs',262,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8521,1027,1027,'OP_RewardPackMsg',263,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8522,1027,1027,'OP_RenameGuildMsg',264,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8523,1027,1027,'OP_ZoneToFriendRequestMsg',266,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8524,1027,1027,'OP_ZoneToFriendReplyMsg',267,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8525,1027,1027,'OP_ChatCreateChannelMsg',268,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8526,1027,1027,'OP_ChatJoinChannelMsg',269,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8527,1027,1027,'OP_ChatWhoChannelMsg',270,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8528,1027,1027,'OP_ChatLeaveChannelMsg',271,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8529,1027,1027,'OP_ChatTellChannelMsg',272,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8530,1027,1027,'OP_ChatTellUserMsg',273,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8531,1027,1027,'OP_ChatToggleFriendMsg',274,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8532,1027,1027,'OP_ChatToggleIgnoreMsg',275,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8533,1027,1027,'OP_ChatSendFriendsMsg',276,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8534,1027,1027,'OP_ChatSendIgnoresMsg',277,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8535,1027,1027,'OP_QuestReward',304,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8536,1027,1027,'OP_ChatFiltersMsg',319,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8537,1027,1027,'OP_MailGetHeadersMsg',320,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8538,1027,1027,'OP_MailGetMessageMsg',321,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8539,1027,1027,'OP_MailSendMessageMsg',322,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8540,1027,1027,'OP_MailDeleteMessageMsg',323,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8541,1027,1027,'OP_MailGetHeadersReplyMsg',324,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8542,1027,1027,'OP_MailGetMessageReplyMsg',325,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8543,1027,1027,'OP_MailSendMessageReplyMsg',326,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8544,1027,1027,'OP_MailCommitSendMessageMsg',327,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8545,1027,1027,'OP_MailSendSystemMessageMsg',328,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8546,1027,1027,'OP_MailRemoveAttachFromMailMsg',329,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8547,1027,1027,'OP_WaypointRequestMsg',331,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8548,1027,1027,'OP_WaypointReplyMsg',332,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8549,1027,1027,'OP_WaypointSelectMsg',333,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8550,1027,1027,'OP_WaypointUpdateMsg',334,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8551,1027,1027,'OP_CharNameChangedMsg',335,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8552,1027,1027,'OP_ShowZoneTeleporterDestinations',336,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8553,1027,1027,'OP_SelectZoneTeleporterDestinatio',337,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8554,1027,1027,'OP_ReloadLocalizedTxtMsg',338,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8555,1027,1027,'OP_RequestGuildMembershipMsg',339,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8556,1027,1027,'OP_GuildMembershipResponseMsg',340,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8557,1027,1027,'OP_LeaveGuildNotifyMsg',341,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8558,1027,1027,'OP_JoinGuildNotifyMsg',342,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8559,1027,1027,'OP_AvatarUpdateMsg',344,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8560,1027,1027,'OP_BioUpdateMsg',345,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8561,1027,1027,'OP_InspectPlayerMsg',346,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8562,1027,1027,'OP_WSServerLockMsg',347,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8563,1027,1027,'OP_LSServerLockMsg',348,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8564,1027,1027,'OP_WSServerHideMsg',349,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8565,1027,1027,'OP_CsCategoryRequestMsg',350,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8566,1027,1027,'OP_CsCategoryResponseMsg',351,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8567,1027,1027,'OP_KnowledgeWindowSlotMappingMsg',352,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8568,1027,1027,'OP_LFGUpdateMsg',353,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8569,1027,1027,'OP_AFKUpdateMsg',354,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8570,1027,1027,'OP_AnonUpdateMsg',355,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8571,1027,1027,'OP_UpdateActivePublicZonesMsg',356,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8572,1027,1027,'OP_UnknownNpcMsg',357,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8573,1027,1027,'OP_PromoFlagsDetailsMsg',358,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8574,1027,1027,'OP_ConsignViewCreateMsg',359,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8575,1027,1027,'OP_ConsignViewGetPageMsg',360,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8576,1027,1027,'OP_ConsignViewReleaseMsg',361,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8577,1027,1027,'OP_ConsignRemoveItemsMsg',362,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8578,1027,1027,'OP_UpdateDebugRadiiMsg',363,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8579,1027,1027,'OP_SnoopMsg',364,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8580,1027,1027,'OP_ReportMsg',365,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8581,1027,1027,'OP_UpdateRaidMsg',366,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8582,1027,1027,'OP_ConsignViewSortMsg',367,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8583,1027,1027,'OP_TitleUpdateMsg',368,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8584,1027,1027,'OP_ClientFellMsg',369,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8585,1027,1027,'OP_ClientInDeathRegionMsg',370,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8586,1027,1027,'OP_CampClientMsg',371,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8587,1027,1027,'OP_CSToolAccessResponseMsg',372,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8588,1027,1027,'OP_TrackingUpdateMsg',373,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8589,1027,1027,'OP_BeginTrackingMsg',374,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8590,1027,1027,'OP_StopTrackingMsg',375,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8591,1027,1027,'OP_GetAvatarAccessRequestForCSToo',376,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8592,1027,1027,'OP_AdvancementRequestMsg',377,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8593,1027,1027,'OP_UpdateAvgFrameTimeMsg',378,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8594,1027,1027,'OP_MapFogDataInitMsg',379,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8595,1027,1027,'OP_MapFogDataUpdateMsg',380,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8596,1027,1027,'OP_CloseGroupInviteWindowMsg',381,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8597,1027,1027,'OP_UpdateGroupMemberDataMsg',382,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8598,1027,1027,'OP_WorldPingMsg',383,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8599,1027,1027,'OP_MoveLogUpdateMsg',384,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8600,1027,1027,'OP_OfferQuestMsg',385,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8601,1027,1027,'OP_WorldShutdownUpdateMsg',386,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8602,1027,1027,'OP_DisplayMailScreenMsg',387,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8603,1027,1027,'OP_ClientIdleBeginMsg',388,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8604,1027,1027,'OP_ClientIdleEndMsg',389,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8605,1027,1027,'OP_PurchaseConsignmentLoreCheckRe',390,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8606,1027,1027,'OP_NotifyApprenticeStoppedMentori',391,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8607,1027,1027,'OP_CorruptedClientMsg',392,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8608,1027,1027,'OP_WorldDataChangeMsg',393,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8609,1027,1027,'OP_MailEventNotificationMsg',394,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8610,1027,1027,'OP_RestartZoneMsg',395,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8611,1027,1027,'OP_FlightPathsMsg',396,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8612,1027,1027,'OP_CharacterLinkdeadMsg',397,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8613,1027,1027,'OP_CharTransferStartRequestMsg',398,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8614,1027,1027,'OP_CharTransferStartReplyMsg',399,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8615,1027,1027,'OP_CharTransferRequestMsg',400,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8616,1027,1027,'OP_CharTransferReplyMsg',401,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8617,1027,1027,'OP_CharTransferRollbackRequestMsg',402,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8618,1027,1027,'OP_CharTransferCommitRequestMsg',403,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8619,1027,1027,'OP_CharTransferRollbackReplyMsg',404,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8620,1027,1027,'OP_CharTransferCommitReplyMsg',405,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8621,1027,1027,'OP_GetCharacterSerializedRequestM',406,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8622,1027,1027,'OP_GetCharacterSerializedReplyMsg',407,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8623,1027,1027,'OP_CreateCharFromCBBRequestMsg',408,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8624,1027,1027,'OP_CreateCharFromCBBReplyMsg',409,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8625,1027,1027,'OP_HousingDataChangedMsg',410,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8626,1027,1027,'OP_HousingRestoreMsg',411,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8627,1027,1027,'OP_AuctionItem',412,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8628,1027,1027,'OP_AuctionItemReply',413,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8629,1027,1027,'OP_AuctionCoin',414,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8630,1027,1027,'OP_AuctionCoinReply',415,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8631,1027,1027,'OP_AuctionCharacter',416,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8632,1027,1027,'OP_AuctionCharacterReply',417,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8633,1027,1027,'OP_AuctionCommitMsg',418,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8634,1027,1027,'OP_AuctionAbortMsg',419,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8635,1027,1027,'OP_CharTransferValidateRequestMsg',420,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8636,1027,1027,'OP_CharTransferValidateReplyMsg',421,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8637,1027,1027,'OP_RaceRestrictionMsg',422,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8638,1027,1027,'OP_SetInstanceDisplayNameMsg',423,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8639,1027,1027,'OP_GetAuctionAssetIDMsg',424,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8640,1027,1027,'OP_GetAuctionAssetIDReplyMsg',425,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8641,1027,1027,'OP_ResendWorldChannelsMsg',426,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8642,1027,1027,'OP_DisplayExchangeScreenMsg',427,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8643,1027,1027,'OP_ArenaGameTypesMsg',428,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8644,1027,1027,'OP_AuditAuctionEventMsg',430,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8645,1027,1027,'OP_InviteRequestMsg',432,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8646,1027,1027,'OP_InviteResponseMsg',433,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8647,1027,1027,'OP_InviteTargetResponseMsg',434,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8648,1027,1027,'OP_InspectPlayerRequestMsg',435,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8649,1027,1027,'OP_DispatchMsg',436,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8650,1027,1027,'OP_DisplayEventMsg',437,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8651,1027,1027,'OP_PrePossessionMsg',438,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8652,1027,1027,'OP_PostPossessionMsg',439,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8653,1027,1027,'OP_AdventureList',471,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8654,1027,1027,'OP_CancelSpellCast',472,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8655,1027,1027,'OP_AttackAllowed',484,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8656,1027,1027,'OP_AttackNotAllowed',485,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8657,1027,1027,'OP_DressingRoom',491,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8658,1027,1027,'OP_SkillInfoRequest',495,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8659,1027,1027,'OP_SkillInfoResponse',496,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8660,1027,1027,'OP_MapRequest',501,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8661,1027,1027,'OP_EqUnknown',533,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8662,1027,1027,'OP_EqHearChatCmd',535,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8663,1027,1027,'OP_EqDisplayTextCmd',536,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8664,1027,1027,'OP_EqCreateGhostCmd',537,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8665,1027,1027,'OP_EqCreateWidgetCmd',538,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8666,1027,1027,'OP_EqCreateSignWidgetCmd',539,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8667,1027,1027,'OP_EqDestroyGhostCmd',540,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8668,1027,1027,'OP_EqUpdateGhostCmd',541,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8669,1027,1027,'OP_EqSetControlGhostCmd',542,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8670,1027,1027,'OP_EqSetPOVGhostCmd',543,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8671,1027,1027,'OP_EqHearCombatCmd',544,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8672,1027,1027,'OP_EqHearSpellCastCmd',545,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8673,1027,1027,'OP_EqHearSpellInterruptCmd',548,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8674,1027,1027,'OP_EqHearSpellFizzleCmd',549,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8675,1027,1027,'OP_EqHearConsiderCmd',550,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8676,1027,1027,'OP_EqUpdateSubClassesCmd',551,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8677,1027,1027,'OP_EqCreateListBoxCmd',552,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8678,1027,1027,'OP_EqSetDebugPathPointsCmd',553,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8679,1027,1027,'OP_EqCannedEmoteCmd',555,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8680,1027,1027,'OP_EqStateCmd',556,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8681,1027,1027,'OP_EqPlaySoundCmd',557,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8682,1027,1027,'OP_EqPlaySound3DCmd',558,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8683,1027,1027,'OP_EqPlayVoiceCmd',559,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8684,1027,1027,'OP_EqHearDrowningCmd',560,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8685,1027,1027,'OP_EqHearDeathCmd',561,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8686,1027,1027,'OP_EqGroupMemberRemovedCmd',562,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8687,1027,1027,'OP_EqHearChainEffectCmd',563,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8688,1027,1027,'OP_EqReceiveOfferCmd',564,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8689,1027,1027,'OP_EqInspectPCResultsCmd',565,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8690,1027,1027,'OP_EqDrawablePathGraphCmd',566,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8691,1027,1027,'OP_EqDialogOpenCmd',567,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8692,1027,1027,'OP_EqDialogCloseCmd',568,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8693,1027,1027,'OP_EqFactionUpdateCmd',569,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8694,1027,1027,'OP_EqCollectionUpdateCmd',570,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8695,1027,1027,'OP_EqCollectionFilterCmd',571,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8696,1027,1027,'OP_EqCollectionItemCmd',572,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8697,1027,1027,'OP_EqQuestJournalUpdateCmd',573,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8698,1027,1027,'OP_EqQuestJournalReplyCmd',575,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8699,1027,1027,'OP_EqQuestGroupCmd',576,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8700,1027,1027,'OP_EqUpdateMerchantCmd',577,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8701,1027,1027,'OP_EqUpdateStoreCmd',578,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8702,1027,1027,'OP_EqUpdatePlayerTradeCmd',579,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8703,1027,1027,'OP_EqHelpPathCmd',580,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8704,1027,1027,'OP_EqHelpPathClearCmd',581,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8705,1027,1027,'OP_EqUpdateBankCmd',582,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8706,1027,1027,'OP_EqExamineInfoCmd',583,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8707,1027,1027,'OP_EqCloseWindowCmd',584,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8708,1027,1027,'OP_EqUpdateLootCmd',585,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8709,1027,1027,'OP_EqJunctionListCmd',586,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8710,1027,1027,'OP_EqShowDeathWindowCmd',587,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8711,1027,1027,'OP_EqDisplaySpellFailCmd',588,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8712,1027,1027,'OP_EqSpellCastStartCmd',589,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8713,1027,1027,'OP_EqSpellCastEndCmd',590,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8714,1027,1027,'OP_EqResurrectedCmd',591,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8715,1027,1027,'OP_EqChoiceWinCmd',592,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8716,1027,1027,'OP_EqSetDefaultVerbCmd',593,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8717,1027,1027,'OP_EqInstructionWindowCmd',595,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8718,1027,1027,'OP_EqInstructionWindowCloseCmd',596,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8719,1027,1027,'OP_EqInstructionWindowGoalCmd',597,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8720,1027,1027,'OP_EqInstructionWindowTaskCmd',598,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8721,1027,1027,'OP_EqEnableGameEventCmd',599,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8722,1027,1027,'OP_EqShowWindowCmd',600,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8723,1027,1027,'OP_EqEnableWindowCmd',601,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8724,1027,1027,'OP_EqFlashWindowCmd',602,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8725,1027,1027,'OP_EqHearPlayFlavorCmd',603,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8726,1027,1027,'OP_EqUpdateSignWidgetCmd',605,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8727,1027,1027,'OP_EqDebugPVDCmd',606,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8728,1027,1027,'OP_EqShowBookCmd',607,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8729,1027,1027,'OP_EqQuestionnaireCmd',608,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8730,1027,1027,'OP_EqGetProbsCmd',609,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8731,1027,1027,'OP_EqHearHealCmd',610,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8732,1027,1027,'OP_EqChatChannelUpdateCmd',611,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8733,1027,1027,'OP_EqWhoChannelQueryReplyCmd',612,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8734,1027,1027,'OP_EqAvailWorldChannelsCmd',613,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8735,1027,1027,'OP_EqUpdateTargetCmd',614,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8736,1027,1027,'OP_EqConsignmentItemsCmd',616,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8737,1027,1027,'OP_EqStartBrokerCmd',618,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8738,1027,1027,'OP_EqMapExplorationCmd',619,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8739,1027,1027,'OP_EqStoreLogCmd',620,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8740,1027,1027,'OP_EqSpellMoveToRangeAndRetryCmd',621,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8741,1027,1027,'OP_EqUpdatePlayerMailCmd',622,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8742,1027,1027,'OP_EqArenaResultsCmd',623,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8743,1027,1027,'OP_EqGuildBankEventActionCmd',624,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8744,1027,1027,'OP_EqGuildBankExamineInfoCmd',625,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8745,1027,1027,'OP_EqHearSpellNoLandCmd',626,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8746,1027,1027,'OP_Lottery',630,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8747,1027,1027,'OP_GuildRecruitingMemberInfo',631,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8748,1027,1027,'OP_GuildRecruiting',632,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8749,1027,1027,'OP_GuildRecruitingDetails',633,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8750,1027,1027,'OP_GuildRecruitingImage',634,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8751,1027,1027,'OP_PointOfInterest',655,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8752,1027,1027,'OP_TraitsList',657,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8753,1027,1027,'OP_RecipeList',666,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8754,1027,1027,'OP_CharacterAchievements',668,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8755,1027,1027,'OP_AddClientToGroupMsg',1054,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8756,1027,1027,'OP_AddGroupToGroupMsg',1054,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8757,1027,1027,'OP_GuildKickMsg',1054,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8758,1027,1027,'OP_ProcessScriptMsg',1054,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8759,1027,1027,'OP_ProcessWorkspaceMsg',1054,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8760,1027,1027,'OP_PurchaseConsignmentResponseMsg',1054,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8761,1027,1027,'OP_QuickbarAddMsg',1054,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8762,1027,1027,'OP_SkillSlotMapping',1054,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8763,1027,1027,'OP_Unknown',10058,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8764,1027,1027,'OP_WSWeatherUpdateMsg',10059,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8765,1028,1029,'OP_LoginRequestMsg',0,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8766,1028,1029,'OP_LoginByNumRequestMsg',1,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8767,1028,1029,'OP_WSLoginRequestMsg',2,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8768,1028,1029,'OP_ESLoginRequestMsg',3,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8769,1028,1029,'OP_LoginReplyMsg',4,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8770,1028,1029,'OP_WSStatusReplyMsg',5,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8771,1028,1029,'OP_WorldStatusChangeMsg',6,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8772,1028,1029,'OP_AllWSDescRequestMsg',7,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8773,1028,1029,'OP_WorldListMsg',8,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8774,1028,1029,'OP_AllCharactersDescRequestMsg',9,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8775,1028,1029,'OP_AllCharactersDescReplyMsg',10,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8776,1028,1029,'OP_CreateCharacterRequestMsg',11,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8777,1028,1029,'OP_CreateCharacterReplyMsg',12,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8778,1028,1029,'OP_WSCreateCharacterRequestMsg',13,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8779,1028,1029,'OP_WSCreateCharacterReplyMsg',14,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8780,1028,1029,'OP_ReskinCharacterRequestMsg',15,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8781,1028,1029,'OP_DeleteCharacterRequestMsg',16,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8782,1028,1029,'OP_DeleteCharacterReplyMsg',17,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8783,1028,1029,'OP_PlayCharacterRequestMsg',18,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8784,1028,1029,'OP_PlayCharacterReplyMsg',19,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8785,1028,1029,'OP_ExpectClientAsCharacterReplyMs',22,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8786,1028,1029,'OP_ServerPlayCharacterRequestMsg',23,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8787,1028,1029,'OP_ServerPlayCharacterReplyMsg',24,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8788,1028,1029,'OP_ESInitMsg',25,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8789,1028,1029,'OP_ESReadyForClientsMsg',26,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8790,1028,1029,'OP_CreateZoneInstanceMsg',27,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8791,1028,1029,'OP_ZoneInstanceCreateReplyMsg',28,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8792,1028,1029,'OP_ZoneInstanceDestroyedMsg',29,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8793,1028,1029,'OP_ExpectClientAsCharacterRequest',30,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8794,1028,1029,'OP_ZoneInfoMsg',31,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8795,1028,1029,'OP_DoneLoadingZoneResourcesMsg',32,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8796,1028,1029,'OP_DoneSendingInitialEntitiesMsg',33,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8797,1028,1029,'OP_DoneLoadingEntityResourcesMsg',34,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8798,1028,1029,'OP_PredictionUpdateMsg',35,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8799,1028,1029,'OP_UpdatePositionMsg',37,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8800,1028,1029,'OP_SetRemoteCmdsMsg',39,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8801,1028,1029,'OP_RemoteCmdMsg',40,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8802,1028,1029,'OP_GameWorldTimeMsg',41,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8803,1028,1029,'OP_MOTDMsg',42,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8804,1028,1029,'OP_ZoneMOTDMsg',43,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8805,1028,1029,'OP_AvatarCreatedMsg',44,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8806,1028,1029,'OP_AvatarDestroyedMsg',45,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8807,1028,1029,'OP_RequestCampMsg',47,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8808,1028,1029,'OP_CampStartedMsg',48,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8809,1028,1029,'OP_CampAbortedMsg',49,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8810,1028,1029,'OP_WhoQueryRequestMsg',50,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8811,1028,1029,'OP_WhoQueryReplyMsg',51,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8812,1028,1029,'OP_MonitorReplyMsg',52,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8813,1028,1029,'OP_MonitorCharacterListMsg',53,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8814,1028,1029,'OP_MonitorCharacterListRequestMsg',54,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8815,1028,1029,'OP_ClientCmdMsg',55,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8816,1028,1029,'OP_DispatchESMsg',56,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8817,1028,1029,'OP_DispatchClientCmdMsg',57,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8818,1028,1029,'OP_UpdateTargetMsg',58,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8819,1028,1029,'OP_UpdateTargetLocMsg',59,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8820,1028,1029,'OP_UpdateCharacterSheetMsg',60,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8821,1028,1029,'OP_UpdateSpellBookMsg',61,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8822,1028,1029,'OP_UpdateInventoryMsg',63,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8823,1028,1029,'OP_UpdateRecipeBookMsg',65,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8824,1028,1029,'OP_RequestRecipeDetailsMsg',66,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8825,1028,1029,'OP_RecipeDetailsMsg',67,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8826,1028,1029,'OP_UpdateSkillBookMsg',68,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8827,1028,1029,'OP_UpdateSkillsMsg',69,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8828,1028,1029,'OP_UpdateOpportunityMsg',70,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8829,1028,1029,'OP_ChangeZoneMsg',72,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8830,1028,1029,'OP_ClientTeleportRequestMsg',73,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8831,1028,1029,'OP_TeleportWithinZoneMsg',74,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8832,1028,1029,'OP_TeleportWithinZoneNoReloadMsg',75,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8833,1028,1029,'OP_MigrateClientToZoneRequestMsg',76,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8834,1028,1029,'OP_MigrateClientToZoneReplyMsg',77,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8835,1028,1029,'OP_ReadyToZoneMsg',78,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8836,1028,1029,'OP_RemoveClientFromGroupMsg',79,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8837,1028,1029,'OP_RemoveGroupFromGroupMsg',80,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8838,1028,1029,'OP_MakeGroupLeaderMsg',81,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8839,1028,1029,'OP_GroupCreatedMsg',82,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8840,1028,1029,'OP_GroupDestroyedMsg',83,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8841,1028,1029,'OP_GroupMemberAddedMsg',84,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8842,1028,1029,'OP_GroupMemberRemovedMsg',85,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8843,1028,1029,'OP_GroupRemovedFromGroupMsg',86,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8844,1028,1029,'OP_GroupLeaderChangedMsg',87,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8845,1028,1029,'OP_GroupResendOOZDataMsg',88,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8846,1028,1029,'OP_GroupSettingsChangedMsg',89,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8847,1028,1029,'OP_OutOfZoneMemberDataMsg',90,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8848,1028,1029,'OP_SendLatestRequestMsg',91,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8849,1028,1029,'OP_ClearDataMsg',92,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8850,1028,1029,'OP_SetSocialMsg',93,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8851,1028,1029,'OP_ESStatusMsg',94,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8852,1028,1029,'OP_ESZoneInstanceStatusMsg',95,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8853,1028,1029,'OP_ZonesStatusRequestMsg',96,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8854,1028,1029,'OP_ZonesStatusMsg',97,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8855,1028,1029,'OP_ESWeatherRequestMsg',98,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8856,1028,1029,'OP_ESWeatherRequestEndMsg',99,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8857,1028,1029,'OP_DialogSelectMsg',102,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8858,1028,1029,'OP_DialogCloseMsg',103,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8859,1028,1029,'OP_RemoveSpellEffectMsg',104,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8860,1028,1029,'OP_RemoveConcentrationMsg',105,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8861,1028,1029,'OP_QuestJournalOpenMsg',106,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8862,1028,1029,'OP_QuestJournalInspectMsg',107,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8863,1028,1029,'OP_QuestJournalSetVisibleMsg',108,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8864,1028,1029,'OP_QuestJournalWaypointMsg',109,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8865,1028,1029,'OP_CreateGuildRequestMsg',110,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8866,1028,1029,'OP_CreateGuildReplyMsg',111,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8867,1028,1029,'OP_GuildsayMsg',112,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8868,1028,1029,'OP_GuildUpdateMsg',117,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8869,1028,1029,'OP_DeleteGuildMsg',118,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8870,1028,1029,'OP_FellowshipExpMsg',119,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8871,1028,1029,'OP_ConsignmentCloseStoreMsg',120,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8872,1028,1029,'OP_ConsignItemRequestMsg',121,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8873,1028,1029,'OP_ConsignItemResponseMsg',122,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8874,1028,1029,'OP_PurchaseConsignmentRequestMsg',123,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8875,1028,1029,'OP_HouseDeletedRemotelyMsg',124,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8876,1028,1029,'OP_UpdateHouseDataMsg',125,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8877,1028,1029,'OP_UpdateHouseAccessDataMsg',126,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8878,1028,1029,'OP_PlayerHouseBaseScreenMsg',127,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8879,1028,1029,'OP_PlayerHousePurchaseScreenMsg',128,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8880,1028,1029,'OP_PlayerHouseAccessUpdateMsg',129,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8881,1028,1029,'OP_PlayerHouseDisplayStatusMsg',130,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8882,1028,1029,'OP_PlayerHouseCloseUIMsg',131,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8883,1028,1029,'OP_BuyPlayerHouseMsg',132,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8884,1028,1029,'OP_BuyPlayerHouseTintMsg',133,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8885,1028,1029,'OP_CollectAllHouseItemsMsg',134,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8886,1028,1029,'OP_RelinquishHouseMsg',135,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8887,1028,1029,'OP_EnterHouseMsg',136,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8888,1028,1029,'OP_ExitHouseMsg',137,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8889,1028,1029,'OP_HouseDefaultAccessSetMsg',138,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8890,1028,1029,'OP_HouseAccessSetMsg',139,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8891,1028,1029,'OP_HouseAccessRemoveMsg',140,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8892,1028,1029,'OP_PayHouseUpkeepMsg',141,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8893,1028,1029,'OP_MoveableObjectPlacementCriteri',143,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8894,1028,1029,'OP_EnterMoveObjectModeMsg',144,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8895,1028,1029,'OP_PositionMoveableObject',145,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8896,1028,1029,'OP_CancelMoveObjectModeMsg',146,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8897,1028,1029,'OP_ShaderCustomizationMsg',147,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8898,1028,1029,'OP_ReplaceableSubMeshesMsg',148,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8899,1028,1029,'OP_HouseCustomizationScreenMsg',149,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8900,1028,1029,'OP_CustomizationPurchaseRequestMs',150,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8901,1028,1029,'OP_CustomizationSetRequestMsg',151,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8902,1028,1029,'OP_CustomizationReplyMsg',152,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8903,1028,1029,'OP_TintWidgetsMsg',153,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8904,1028,1029,'OP_ExamineConsignmentRequestMsg',154,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8905,1028,1029,'OP_ExamineConsignmentResponseMsg',155,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8906,1028,1029,'OP_UISettingsResponseMsg',156,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8907,1028,1029,'OP_UIResetMsg',158,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8908,1028,1029,'OP_KeymapLoadMsg',159,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8909,1028,1029,'OP_KeymapNoneMsg',160,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8910,1028,1029,'OP_KeymapDataMsg',161,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8911,1028,1029,'OP_KeymapSaveMsg',162,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8912,1028,1029,'OP_DispatchSpellCmdMsg',163,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8913,1028,1029,'OP_EntityVerbsRequestMsg',165,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8914,1028,1029,'OP_EntityVerbsReplyMsg',166,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8915,1028,1029,'OP_EntityVerbsVerbMsg',167,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8916,1028,1029,'OP_ChatRelationshipUpdateMsg',169,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8917,1028,1029,'OP_LootItemsRequestMsg',170,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8918,1028,1029,'OP_StoppedLootingMsg',171,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8919,1028,1029,'OP_SitMsg',172,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8920,1028,1029,'OP_StandMsg',173,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8921,1028,1029,'OP_SatMsg',174,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8922,1028,1029,'OP_StoodMsg',175,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8923,1028,1029,'OP_ClearForTakeOffMsg',176,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8924,1028,1029,'OP_ReadyForTakeOffMsg',177,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8925,1028,1029,'OP_ShowIllusionsMsg',178,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8926,1028,1029,'OP_HideIllusionsMsg',179,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8927,1028,1029,'OP_ExamineItemRequestMsg',180,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8928,1028,1029,'OP_ReadBookPageMsg',181,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8929,1028,1029,'OP_DefaultGroupOptionsRequestMsg',182,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8930,1028,1029,'OP_DefaultGroupOptionsMsg',183,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8931,1028,1029,'OP_GroupOptionsMsg',184,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8932,1028,1029,'OP_DisplayGroupOptionsScreenMsg',185,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8933,1028,1029,'OP_DisplayInnVisitScreenMsg',186,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8934,1028,1029,'OP_DumpSchedulerMsg',187,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8935,1028,1029,'OP_LSRequestPlayerDescMsg',188,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8936,1028,1029,'OP_LSCheckAcctLockMsg',189,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8937,1028,1029,'OP_WSAcctLockStatusMsg',190,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8938,1028,1029,'OP_RequestHelpRepathMsg',191,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8939,1028,1029,'OP_RequestTargetLocMsg',192,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8940,1028,1029,'OP_UpdateMotdMsg',193,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8941,1028,1029,'OP_PerformPlayerKnockbackMsg',194,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8942,1028,1029,'OP_PerformCameraShakeMsg',195,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8943,1028,1029,'OP_PopulateSkillMapsMsg',198,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8944,1028,1029,'OP_CancelledFeignMsg',200,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8945,1028,1029,'OP_SignalMsg',201,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8946,1028,1029,'OP_ShowCreateFromRecipeUIMsg',202,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8947,1028,1029,'OP_CancelCreateFromRecipeMsg',203,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8948,1028,1029,'OP_BeginItemCreationMsg',204,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8949,1028,1029,'OP_StopItemCreationMsg',205,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8950,1028,1029,'OP_ShowItemCreationProcessUIMsg',206,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8951,1028,1029,'OP_UpdateItemCreationProcessUIMsg',207,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8952,1028,1029,'OP_DisplayTSEventReactionMsg',208,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8953,1028,1029,'OP_ShowRecipeBookMsg',209,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8954,1028,1029,'OP_KnowledgebaseRequestMsg',210,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8955,1028,1029,'OP_KnowledgebaseResponseMsg',211,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8956,1028,1029,'OP_CSTicketHeaderRequestMsg',212,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8957,1028,1029,'OP_CSTicketInfoMsg',213,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8958,1028,1029,'OP_CSTicketCommentRequestMsg',214,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8959,1028,1029,'OP_CSTicketCommentResponseMsg',215,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8960,1028,1029,'OP_CSTicketCreateMsg',216,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8961,1028,1029,'OP_CSTicketAddCommentMsg',217,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8962,1028,1029,'OP_CSTicketDeleteMsg',218,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8963,1028,1029,'OP_CSTicketChangeNotificationMsg',219,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8964,1028,1029,'OP_WorldDataUpdateMsg',220,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8965,1028,1029,'OP_KnownLanguagesMsg',221,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8966,1028,1029,'OP_LsRequestClientCrashLogMsg',222,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8967,1028,1029,'OP_LsClientBaselogReplyMsg',223,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8968,1028,1029,'OP_LsClientCrashlogReplyMsg',224,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8969,1028,1029,'OP_LsClientAlertlogReplyMsg',225,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8970,1028,1029,'OP_LsClientVerifylogReplyMsg',226,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8971,1028,1029,'OP_ClientTeleportToLocationMsg',227,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8972,1028,1029,'OP_UpdateClientPredFlagsMsg',228,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8973,1028,1029,'OP_ChangeServerControlFlagMsg',229,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8974,1028,1029,'OP_CSToolsRequestMsg',230,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8975,1028,1029,'OP_CSToolsResponseMsg',231,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8976,1028,1029,'OP_AddSocialStructureStandingMsg',232,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8977,1028,1029,'OP_CreateBoatTransportsMsg',233,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8978,1028,1029,'OP_PositionBoatTransportMsg',234,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8979,1028,1029,'OP_MigrateBoatTransportMsg',235,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8980,1028,1029,'OP_MigrateBoatTransportReplyMsg',236,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8981,1028,1029,'OP_DisplayDebugNLLPointsMsg',237,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8982,1028,1029,'OP_ExamineInfoRequestMsg',238,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8983,1028,1029,'OP_QuickbarInitMsg',239,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8984,1028,1029,'OP_QuickbarUpdateMsg',240,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8985,1028,1029,'OP_MacroInitMsg',241,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8986,1028,1029,'OP_MacroUpdateMsg',242,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8987,1028,1029,'OP_QuestionnaireMsg',243,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8988,1028,1029,'OP_LevelChangedMsg',244,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8989,1028,1029,'OP_SpellGainedMsg',245,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8990,1028,1029,'OP_EncounterBrokenMsg',246,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8991,1028,1029,'OP_OnscreenMsgMsg',247,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8992,1028,1029,'OP_DisplayWarningMsg',248,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8993,1028,1029,'OP_ModifyGuildMsg',249,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8994,1028,1029,'OP_GuildEventMsg',250,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8995,1028,1029,'OP_GuildEventAddMsg',251,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8996,1028,1029,'OP_GuildEventActionMsg',252,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8997,1028,1029,'OP_GuildEventListMsg',253,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8998,1028,1029,'OP_RequestGuildEventDetailsMsg',254,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (8999,1028,1029,'OP_GuildEventDetailsMsg',255,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9000,1028,1029,'OP_RequestGuildInfoMsg',256,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9001,1028,1029,'OP_GuildBankActionMsg',257,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9002,1028,1029,'OP_GuildBankActionResponseMsg',258,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9003,1028,1029,'OP_GuildBankItemDetailsRequestMsg',259,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9004,1028,1029,'OP_GuildBankItemDetailsResponseMs',260,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9005,1028,1029,'OP_GuildBankUpdateMsg',261,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9006,1028,1029,'OP_GuildBankEventListMsg',262,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9007,1028,1029,'OP_RequestGuildBankEventDetailsMs',263,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9008,1028,1029,'OP_RewardPackMsg',264,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9009,1028,1029,'OP_RenameGuildMsg',265,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9010,1028,1029,'OP_ZoneToFriendRequestMsg',267,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9011,1028,1029,'OP_ZoneToFriendReplyMsg',268,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9012,1028,1029,'OP_ChatCreateChannelMsg',269,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9013,1028,1029,'OP_ChatJoinChannelMsg',270,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9014,1028,1029,'OP_ChatWhoChannelMsg',271,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9015,1028,1029,'OP_ChatLeaveChannelMsg',272,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9016,1028,1029,'OP_ChatTellChannelMsg',273,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9017,1028,1029,'OP_ChatTellUserMsg',274,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9018,1028,1029,'OP_ChatToggleFriendMsg',275,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9019,1028,1029,'OP_ChatToggleIgnoreMsg',276,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9020,1028,1029,'OP_ChatSendFriendsMsg',277,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9021,1028,1029,'OP_ChatSendIgnoresMsg',278,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9022,1028,1029,'OP_QuestReward',305,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9023,1028,1029,'OP_ChatFiltersMsg',320,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9024,1028,1029,'OP_MailGetHeadersMsg',321,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9025,1028,1029,'OP_MailGetMessageMsg',322,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9026,1028,1029,'OP_MailSendMessageMsg',323,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9027,1028,1029,'OP_MailDeleteMessageMsg',324,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9028,1028,1029,'OP_MailGetHeadersReplyMsg',325,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9029,1028,1029,'OP_MailGetMessageReplyMsg',326,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9030,1028,1029,'OP_MailSendMessageReplyMsg',327,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9031,1028,1029,'OP_MailCommitSendMessageMsg',328,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9032,1028,1029,'OP_MailSendSystemMessageMsg',329,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9033,1028,1029,'OP_MailRemoveAttachFromMailMsg',330,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9034,1028,1029,'OP_WaypointRequestMsg',332,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9035,1028,1029,'OP_WaypointReplyMsg',333,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9036,1028,1029,'OP_WaypointSelectMsg',334,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9037,1028,1029,'OP_WaypointUpdateMsg',335,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9038,1028,1029,'OP_CharNameChangedMsg',336,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9039,1028,1029,'OP_ShowZoneTeleporterDestinations',337,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9040,1028,1029,'OP_SelectZoneTeleporterDestinatio',338,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9041,1028,1029,'OP_ReloadLocalizedTxtMsg',339,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9042,1028,1029,'OP_RequestGuildMembershipMsg',340,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9043,1028,1029,'OP_GuildMembershipResponseMsg',341,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9044,1028,1029,'OP_LeaveGuildNotifyMsg',342,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9045,1028,1029,'OP_JoinGuildNotifyMsg',343,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9046,1028,1029,'OP_AvatarUpdateMsg',345,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9047,1028,1029,'OP_BioUpdateMsg',346,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9048,1028,1029,'OP_InspectPlayerMsg',347,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9049,1028,1029,'OP_WSServerLockMsg',348,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9050,1028,1029,'OP_LSServerLockMsg',349,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9051,1028,1029,'OP_WSServerHideMsg',350,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9052,1028,1029,'OP_CsCategoryRequestMsg',351,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9053,1028,1029,'OP_CsCategoryResponseMsg',352,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9054,1028,1029,'OP_KnowledgeWindowSlotMappingMsg',353,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9055,1028,1029,'OP_LFGUpdateMsg',354,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9056,1028,1029,'OP_AFKUpdateMsg',355,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9057,1028,1029,'OP_AnonUpdateMsg',356,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9058,1028,1029,'OP_UpdateActivePublicZonesMsg',357,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9059,1028,1029,'OP_UnknownNpcMsg',358,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9060,1028,1029,'OP_PromoFlagsDetailsMsg',359,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9061,1028,1029,'OP_ConsignViewCreateMsg',360,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9062,1028,1029,'OP_ConsignViewGetPageMsg',361,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9063,1028,1029,'OP_ConsignViewReleaseMsg',362,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9064,1028,1029,'OP_ConsignRemoveItemsMsg',363,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9065,1028,1029,'OP_UpdateDebugRadiiMsg',364,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9066,1028,1029,'OP_SnoopMsg',365,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9067,1028,1029,'OP_ReportMsg',366,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9068,1028,1029,'OP_UpdateRaidMsg',367,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9069,1028,1029,'OP_ConsignViewSortMsg',368,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9070,1028,1029,'OP_TitleUpdateMsg',369,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9071,1028,1029,'OP_ClientFellMsg',370,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9072,1028,1029,'OP_ClientInDeathRegionMsg',371,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9073,1028,1029,'OP_CampClientMsg',372,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9074,1028,1029,'OP_CSToolAccessResponseMsg',373,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9075,1028,1029,'OP_TrackingUpdateMsg',374,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9076,1028,1029,'OP_BeginTrackingMsg',375,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9077,1028,1029,'OP_StopTrackingMsg',376,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9078,1028,1029,'OP_GetAvatarAccessRequestForCSToo',377,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9079,1028,1029,'OP_AdvancementRequestMsg',378,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9080,1028,1029,'OP_UpdateAvgFrameTimeMsg',379,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9081,1028,1029,'OP_MapFogDataInitMsg',380,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9082,1028,1029,'OP_MapFogDataUpdateMsg',381,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9083,1028,1029,'OP_CloseGroupInviteWindowMsg',382,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9084,1028,1029,'OP_UpdateGroupMemberDataMsg',383,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9085,1028,1029,'OP_WorldPingMsg',384,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9086,1028,1029,'OP_MoveLogUpdateMsg',385,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9087,1028,1029,'OP_OfferQuestMsg',386,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9088,1028,1029,'OP_WorldShutdownUpdateMsg',387,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9089,1028,1029,'OP_DisplayMailScreenMsg',388,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9090,1028,1029,'OP_ClientIdleBeginMsg',389,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9091,1028,1029,'OP_ClientIdleEndMsg',390,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9092,1028,1029,'OP_PurchaseConsignmentLoreCheckRe',391,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9093,1028,1029,'OP_NotifyApprenticeStoppedMentori',392,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9094,1028,1029,'OP_CorruptedClientMsg',393,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9095,1028,1029,'OP_WorldDataChangeMsg',394,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9096,1028,1029,'OP_MailEventNotificationMsg',395,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9097,1028,1029,'OP_RestartZoneMsg',396,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9098,1028,1029,'OP_FlightPathsMsg',397,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9099,1028,1029,'OP_CharacterLinkdeadMsg',398,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9100,1028,1029,'OP_CharTransferStartRequestMsg',399,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9101,1028,1029,'OP_CharTransferStartReplyMsg',400,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9102,1028,1029,'OP_CharTransferRequestMsg',401,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9103,1028,1029,'OP_CharTransferReplyMsg',402,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9104,1028,1029,'OP_CharTransferRollbackRequestMsg',403,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9105,1028,1029,'OP_CharTransferCommitRequestMsg',404,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9106,1028,1029,'OP_CharTransferRollbackReplyMsg',405,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9107,1028,1029,'OP_CharTransferCommitReplyMsg',406,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9108,1028,1029,'OP_GetCharacterSerializedRequestM',407,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9109,1028,1029,'OP_GetCharacterSerializedReplyMsg',408,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9110,1028,1029,'OP_CreateCharFromCBBRequestMsg',409,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9111,1028,1029,'OP_CreateCharFromCBBReplyMsg',410,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9112,1028,1029,'OP_HousingDataChangedMsg',411,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9113,1028,1029,'OP_HousingRestoreMsg',412,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9114,1028,1029,'OP_AuctionItem',413,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9115,1028,1029,'OP_AuctionItemReply',414,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9116,1028,1029,'OP_AuctionCoin',415,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9117,1028,1029,'OP_AuctionCoinReply',416,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9118,1028,1029,'OP_AuctionCharacter',417,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9119,1028,1029,'OP_AuctionCharacterReply',418,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9120,1028,1029,'OP_AuctionCommitMsg',419,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9121,1028,1029,'OP_AuctionAbortMsg',420,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9122,1028,1029,'OP_CharTransferValidateRequestMsg',421,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9123,1028,1029,'OP_CharTransferValidateReplyMsg',422,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9124,1028,1029,'OP_RaceRestrictionMsg',423,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9125,1028,1029,'OP_SetInstanceDisplayNameMsg',424,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9126,1028,1029,'OP_GetAuctionAssetIDMsg',425,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9127,1028,1029,'OP_GetAuctionAssetIDReplyMsg',426,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9128,1028,1029,'OP_ResendWorldChannelsMsg',427,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9129,1028,1029,'OP_DisplayExchangeScreenMsg',428,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9130,1028,1029,'OP_ArenaGameTypesMsg',429,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9131,1028,1029,'OP_AuditAuctionEventMsg',431,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9132,1028,1029,'OP_InviteRequestMsg',433,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9133,1028,1029,'OP_InviteResponseMsg',434,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9134,1028,1029,'OP_InviteTargetResponseMsg',435,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9135,1028,1029,'OP_InspectPlayerRequestMsg',436,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9136,1028,1029,'OP_DispatchMsg',437,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9137,1028,1029,'OP_DisplayEventMsg',438,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9138,1028,1029,'OP_PrePossessionMsg',439,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9139,1028,1029,'OP_PostPossessionMsg',440,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9140,1028,1029,'OP_AdventureList',472,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9141,1028,1029,'OP_CancelSpellCast',473,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9142,1028,1029,'OP_AttackAllowed',485,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9143,1028,1029,'OP_AttackNotAllowed',486,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9144,1028,1029,'OP_DressingRoom',492,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9145,1028,1029,'OP_SkillInfoRequest',496,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9146,1028,1029,'OP_SkillInfoResponse',497,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9147,1028,1029,'OP_MapRequest',502,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9148,1028,1029,'OP_EqUnknown',534,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9149,1028,1029,'OP_EqHearChatCmd',536,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9150,1028,1029,'OP_EqDisplayTextCmd',537,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9151,1028,1029,'OP_EqCreateGhostCmd',538,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9152,1028,1029,'OP_EqCreateWidgetCmd',539,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9153,1028,1029,'OP_EqCreateSignWidgetCmd',540,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9154,1028,1029,'OP_EqDestroyGhostCmd',541,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9155,1028,1029,'OP_EqUpdateGhostCmd',542,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9156,1028,1029,'OP_EqSetControlGhostCmd',543,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9157,1028,1029,'OP_EqSetPOVGhostCmd',544,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9158,1028,1029,'OP_EqHearCombatCmd',545,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9159,1028,1029,'OP_EqHearSpellCastCmd',546,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9160,1028,1029,'OP_EqHearSpellInterruptCmd',549,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9161,1028,1029,'OP_EqHearSpellFizzleCmd',550,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9162,1028,1029,'OP_EqHearConsiderCmd',551,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9163,1028,1029,'OP_EqUpdateSubClassesCmd',552,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9164,1028,1029,'OP_EqCreateListBoxCmd',553,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9165,1028,1029,'OP_EqSetDebugPathPointsCmd',554,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9166,1028,1029,'OP_EqCannedEmoteCmd',556,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9167,1028,1029,'OP_EqStateCmd',557,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9168,1028,1029,'OP_EqPlaySoundCmd',558,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9169,1028,1029,'OP_EqPlaySound3DCmd',559,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9170,1028,1029,'OP_EqPlayVoiceCmd',560,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9171,1028,1029,'OP_EqHearDrowningCmd',561,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9172,1028,1029,'OP_EqHearDeathCmd',562,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9173,1028,1029,'OP_EqGroupMemberRemovedCmd',563,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9174,1028,1029,'OP_EqHearChainEffectCmd',564,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9175,1028,1029,'OP_EqReceiveOfferCmd',565,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9176,1028,1029,'OP_EqInspectPCResultsCmd',566,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9177,1028,1029,'OP_EqDrawablePathGraphCmd',567,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9178,1028,1029,'OP_EqDialogOpenCmd',568,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9179,1028,1029,'OP_EqDialogCloseCmd',569,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9180,1028,1029,'OP_EqFactionUpdateCmd',570,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9181,1028,1029,'OP_EqCollectionUpdateCmd',571,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9182,1028,1029,'OP_EqCollectionFilterCmd',572,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9183,1028,1029,'OP_EqCollectionItemCmd',573,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9184,1028,1029,'OP_EqQuestJournalUpdateCmd',574,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9185,1028,1029,'OP_EqQuestJournalReplyCmd',576,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9186,1028,1029,'OP_EqQuestGroupCmd',577,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9187,1028,1029,'OP_EqUpdateMerchantCmd',578,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9188,1028,1029,'OP_EqUpdateStoreCmd',579,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9189,1028,1029,'OP_EqUpdatePlayerTradeCmd',580,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9190,1028,1029,'OP_EqHelpPathCmd',581,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9191,1028,1029,'OP_EqHelpPathClearCmd',582,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9192,1028,1029,'OP_EqUpdateBankCmd',583,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9193,1028,1029,'OP_EqExamineInfoCmd',584,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9194,1028,1029,'OP_EqCloseWindowCmd',585,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9195,1028,1029,'OP_EqUpdateLootCmd',586,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9196,1028,1029,'OP_EqJunctionListCmd',587,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9197,1028,1029,'OP_EqShowDeathWindowCmd',588,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9198,1028,1029,'OP_EqDisplaySpellFailCmd',589,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9199,1028,1029,'OP_EqSpellCastStartCmd',590,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9200,1028,1029,'OP_EqSpellCastEndCmd',591,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9201,1028,1029,'OP_EqResurrectedCmd',592,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9202,1028,1029,'OP_EqChoiceWinCmd',593,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9203,1028,1029,'OP_EqSetDefaultVerbCmd',594,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9204,1028,1029,'OP_EqInstructionWindowCmd',596,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9205,1028,1029,'OP_EqInstructionWindowCloseCmd',597,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9206,1028,1029,'OP_EqInstructionWindowGoalCmd',598,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9207,1028,1029,'OP_EqInstructionWindowTaskCmd',599,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9208,1028,1029,'OP_EqEnableGameEventCmd',600,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9209,1028,1029,'OP_EqShowWindowCmd',601,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9210,1028,1029,'OP_EqEnableWindowCmd',602,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9211,1028,1029,'OP_EqFlashWindowCmd',603,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9212,1028,1029,'OP_EqHearPlayFlavorCmd',604,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9213,1028,1029,'OP_EqUpdateSignWidgetCmd',606,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9214,1028,1029,'OP_EqDebugPVDCmd',607,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9215,1028,1029,'OP_EqShowBookCmd',608,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9216,1028,1029,'OP_EqQuestionnaireCmd',609,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9217,1028,1029,'OP_EqGetProbsCmd',610,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9218,1028,1029,'OP_EqHearHealCmd',611,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9219,1028,1029,'OP_EqChatChannelUpdateCmd',612,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9220,1028,1029,'OP_EqWhoChannelQueryReplyCmd',613,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9221,1028,1029,'OP_EqAvailWorldChannelsCmd',614,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9222,1028,1029,'OP_EqUpdateTargetCmd',615,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9223,1028,1029,'OP_EqConsignmentItemsCmd',617,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9224,1028,1029,'OP_EqStartBrokerCmd',619,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9225,1028,1029,'OP_EqMapExplorationCmd',620,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9226,1028,1029,'OP_EqStoreLogCmd',621,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9227,1028,1029,'OP_EqSpellMoveToRangeAndRetryCmd',622,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9228,1028,1029,'OP_EqUpdatePlayerMailCmd',623,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9229,1028,1029,'OP_EqArenaResultsCmd',624,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9230,1028,1029,'OP_EqGuildBankEventActionCmd',625,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9231,1028,1029,'OP_EqGuildBankExamineInfoCmd',626,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9232,1028,1029,'OP_EqHearSpellNoLandCmd',627,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9233,1028,1029,'OP_Lottery',631,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9234,1028,1029,'OP_GuildRecruitingMemberInfo',632,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9235,1028,1029,'OP_GuildRecruiting',633,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9236,1028,1029,'OP_GuildRecruitingDetails',634,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9237,1028,1029,'OP_GuildRecruitingImage',635,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9238,1028,1029,'OP_PointOfInterest',656,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9239,1028,1029,'OP_TraitsList',658,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9240,1028,1029,'OP_RecipeList',667,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9241,1028,1029,'OP_CharacterAchievements',669,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9242,1028,1029,'OP_AddClientToGroupMsg',1054,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9243,1028,1029,'OP_AddGroupToGroupMsg',1054,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9244,1028,1029,'OP_GuildKickMsg',1054,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9245,1028,1029,'OP_ProcessScriptMsg',1054,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9246,1028,1029,'OP_ProcessWorkspaceMsg',1054,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9247,1028,1029,'OP_PurchaseConsignmentResponseMsg',1054,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9248,1028,1029,'OP_QuickbarAddMsg',1054,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9249,1028,1029,'OP_SkillSlotMapping',1054,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9250,1028,1029,'OP_Unknown',10058,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9251,1028,1029,'OP_WSWeatherUpdateMsg',10059,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9252,1032,1032,'OP_LoginRequestMsg',0,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9253,1032,1032,'OP_LoginByNumRequestMsg',1,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9254,1032,1032,'OP_WSLoginRequestMsg',2,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9255,1032,1032,'OP_ESLoginRequestMsg',3,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9256,1032,1032,'OP_LoginReplyMsg',4,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9257,1032,1032,'OP_WSStatusReplyMsg',5,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9258,1032,1032,'OP_WorldStatusChangeMsg',6,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9259,1032,1032,'OP_AllWSDescRequestMsg',7,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9260,1032,1032,'OP_WorldListMsg',8,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9261,1032,1032,'OP_AllCharactersDescRequestMsg',9,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9262,1032,1032,'OP_AllCharactersDescReplyMsg',10,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9263,1032,1032,'OP_CreateCharacterRequestMsg',11,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9264,1032,1032,'OP_CreateCharacterReplyMsg',12,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9265,1032,1032,'OP_WSCreateCharacterRequestMsg',13,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9266,1032,1032,'OP_WSCreateCharacterReplyMsg',14,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9267,1032,1032,'OP_ReskinCharacterRequestMsg',15,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9268,1032,1032,'OP_DeleteCharacterRequestMsg',16,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9269,1032,1032,'OP_DeleteCharacterReplyMsg',17,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9270,1032,1032,'OP_PlayCharacterRequestMsg',18,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9271,1032,1032,'OP_PlayCharacterReplyMsg',19,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9272,1032,1032,'OP_ExpectClientAsCharacterReplyMs',22,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9273,1032,1032,'OP_ServerPlayCharacterRequestMsg',23,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9274,1032,1032,'OP_ServerPlayCharacterReplyMsg',24,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9275,1032,1032,'OP_ESInitMsg',25,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9276,1032,1032,'OP_ESReadyForClientsMsg',26,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9277,1032,1032,'OP_CreateZoneInstanceMsg',27,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9278,1032,1032,'OP_ZoneInstanceCreateReplyMsg',28,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9279,1032,1032,'OP_ZoneInstanceDestroyedMsg',29,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9280,1032,1032,'OP_ExpectClientAsCharacterRequest',30,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9281,1032,1032,'OP_ZoneInfoMsg',31,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9282,1032,1032,'OP_DoneLoadingZoneResourcesMsg',32,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9283,1032,1032,'OP_DoneSendingInitialEntitiesMsg',33,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9284,1032,1032,'OP_DoneLoadingEntityResourcesMsg',34,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9285,1032,1032,'OP_PredictionUpdateMsg',35,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9286,1032,1032,'OP_UpdatePositionMsg',37,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9287,1032,1032,'OP_SetRemoteCmdsMsg',39,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9288,1032,1032,'OP_RemoteCmdMsg',40,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9289,1032,1032,'OP_GameWorldTimeMsg',41,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9290,1032,1032,'OP_MOTDMsg',42,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9291,1032,1032,'OP_ZoneMOTDMsg',43,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9292,1032,1032,'OP_AvatarCreatedMsg',44,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9293,1032,1032,'OP_AvatarDestroyedMsg',45,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9294,1032,1032,'OP_RequestCampMsg',47,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9295,1032,1032,'OP_CampStartedMsg',48,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9296,1032,1032,'OP_CampAbortedMsg',49,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9297,1032,1032,'OP_WhoQueryRequestMsg',50,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9298,1032,1032,'OP_WhoQueryReplyMsg',51,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9299,1032,1032,'OP_MonitorReplyMsg',52,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9300,1032,1032,'OP_MonitorCharacterListMsg',53,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9301,1032,1032,'OP_MonitorCharacterListRequestMsg',54,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9302,1032,1032,'OP_ClientCmdMsg',55,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9303,1032,1032,'OP_DispatchESMsg',56,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9304,1032,1032,'OP_DispatchClientCmdMsg',57,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9305,1032,1032,'OP_UpdateTargetMsg',58,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9306,1032,1032,'OP_UpdateTargetLocMsg',59,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9307,1032,1032,'OP_UpdateCharacterSheetMsg',60,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9308,1032,1032,'OP_UpdateSpellBookMsg',61,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9309,1032,1032,'OP_UpdateInventoryMsg',63,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9310,1032,1032,'OP_UpdateRecipeBookMsg',65,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9311,1032,1032,'OP_RequestRecipeDetailsMsg',66,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9312,1032,1032,'OP_RecipeDetailsMsg',67,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9313,1032,1032,'OP_UpdateSkillBookMsg',68,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9314,1032,1032,'OP_UpdateSkillsMsg',69,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9315,1032,1032,'OP_UpdateOpportunityMsg',70,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9316,1032,1032,'OP_ChangeZoneMsg',72,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9317,1032,1032,'OP_ClientTeleportRequestMsg',73,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9318,1032,1032,'OP_TeleportWithinZoneMsg',74,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9319,1032,1032,'OP_TeleportWithinZoneNoReloadMsg',75,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9320,1032,1032,'OP_MigrateClientToZoneRequestMsg',76,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9321,1032,1032,'OP_MigrateClientToZoneReplyMsg',77,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9322,1032,1032,'OP_ReadyToZoneMsg',78,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9323,1032,1032,'OP_RemoveClientFromGroupMsg',79,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9324,1032,1032,'OP_RemoveGroupFromGroupMsg',80,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9325,1032,1032,'OP_MakeGroupLeaderMsg',81,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9326,1032,1032,'OP_GroupCreatedMsg',82,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9327,1032,1032,'OP_GroupDestroyedMsg',83,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9328,1032,1032,'OP_GroupMemberAddedMsg',84,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9329,1032,1032,'OP_GroupMemberRemovedMsg',85,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9330,1032,1032,'OP_GroupRemovedFromGroupMsg',86,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9331,1032,1032,'OP_GroupLeaderChangedMsg',87,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9332,1032,1032,'OP_GroupResendOOZDataMsg',88,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9333,1032,1032,'OP_GroupSettingsChangedMsg',89,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9334,1032,1032,'OP_OutOfZoneMemberDataMsg',90,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9335,1032,1032,'OP_SendLatestRequestMsg',91,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9336,1032,1032,'OP_ClearDataMsg',92,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9337,1032,1032,'OP_SetSocialMsg',93,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9338,1032,1032,'OP_ESStatusMsg',94,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9339,1032,1032,'OP_ESZoneInstanceStatusMsg',95,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9340,1032,1032,'OP_ZonesStatusRequestMsg',96,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9341,1032,1032,'OP_ZonesStatusMsg',97,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9342,1032,1032,'OP_ESWeatherRequestMsg',98,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9343,1032,1032,'OP_ESWeatherRequestEndMsg',99,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9344,1032,1032,'OP_DialogSelectMsg',102,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9345,1032,1032,'OP_DialogCloseMsg',103,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9346,1032,1032,'OP_RemoveSpellEffectMsg',104,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9347,1032,1032,'OP_RemoveConcentrationMsg',105,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9348,1032,1032,'OP_QuestJournalOpenMsg',106,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9349,1032,1032,'OP_QuestJournalInspectMsg',107,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9350,1032,1032,'OP_QuestJournalSetVisibleMsg',108,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9351,1032,1032,'OP_QuestJournalWaypointMsg',109,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9352,1032,1032,'OP_CreateGuildRequestMsg',110,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9353,1032,1032,'OP_CreateGuildReplyMsg',111,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9354,1032,1032,'OP_GuildsayMsg',112,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9355,1032,1032,'OP_GuildUpdateMsg',118,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9356,1032,1032,'OP_DeleteGuildMsg',119,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9357,1032,1032,'OP_FellowshipExpMsg',120,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9358,1032,1032,'OP_ConsignmentCloseStoreMsg',121,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9359,1032,1032,'OP_ConsignItemRequestMsg',122,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9360,1032,1032,'OP_ConsignItemResponseMsg',123,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9361,1032,1032,'OP_PurchaseConsignmentRequestMsg',124,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9362,1032,1032,'OP_HouseDeletedRemotelyMsg',125,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9363,1032,1032,'OP_UpdateHouseDataMsg',126,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9364,1032,1032,'OP_UpdateHouseAccessDataMsg',127,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9365,1032,1032,'OP_PlayerHouseBaseScreenMsg',128,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9366,1032,1032,'OP_PlayerHousePurchaseScreenMsg',129,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9367,1032,1032,'OP_PlayerHouseAccessUpdateMsg',130,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9368,1032,1032,'OP_PlayerHouseDisplayStatusMsg',131,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9369,1032,1032,'OP_PlayerHouseCloseUIMsg',132,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9370,1032,1032,'OP_BuyPlayerHouseMsg',133,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9371,1032,1032,'OP_BuyPlayerHouseTintMsg',134,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9372,1032,1032,'OP_CollectAllHouseItemsMsg',135,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9373,1032,1032,'OP_RelinquishHouseMsg',136,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9374,1032,1032,'OP_EnterHouseMsg',137,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9375,1032,1032,'OP_ExitHouseMsg',138,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9376,1032,1032,'OP_HouseDefaultAccessSetMsg',139,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9377,1032,1032,'OP_HouseAccessSetMsg',140,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9378,1032,1032,'OP_HouseAccessRemoveMsg',141,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9379,1032,1032,'OP_PayHouseUpkeepMsg',142,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9380,1032,1032,'OP_MoveableObjectPlacementCriteri',144,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9381,1032,1032,'OP_EnterMoveObjectModeMsg',145,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9382,1032,1032,'OP_PositionMoveableObject',146,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9383,1032,1032,'OP_CancelMoveObjectModeMsg',147,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9384,1032,1032,'OP_ShaderCustomizationMsg',148,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9385,1032,1032,'OP_ReplaceableSubMeshesMsg',149,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9386,1032,1032,'OP_HouseCustomizationScreenMsg',150,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9387,1032,1032,'OP_CustomizationPurchaseRequestMs',151,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9388,1032,1032,'OP_CustomizationSetRequestMsg',152,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9389,1032,1032,'OP_CustomizationReplyMsg',153,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9390,1032,1032,'OP_TintWidgetsMsg',154,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9391,1032,1032,'OP_ExamineConsignmentRequestMsg',155,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9392,1032,1032,'OP_ExamineConsignmentResponseMsg',156,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9393,1032,1032,'OP_UISettingsResponseMsg',157,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9394,1032,1032,'OP_UIResetMsg',159,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9395,1032,1032,'OP_KeymapLoadMsg',160,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9396,1032,1032,'OP_KeymapNoneMsg',161,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9397,1032,1032,'OP_KeymapDataMsg',162,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9398,1032,1032,'OP_KeymapSaveMsg',163,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9399,1032,1032,'OP_DispatchSpellCmdMsg',164,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9400,1032,1032,'OP_EntityVerbsRequestMsg',166,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9401,1032,1032,'OP_EntityVerbsReplyMsg',167,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9402,1032,1032,'OP_EntityVerbsVerbMsg',168,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9403,1032,1032,'OP_ChatRelationshipUpdateMsg',170,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9404,1032,1032,'OP_LootItemsRequestMsg',171,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9405,1032,1032,'OP_StoppedLootingMsg',172,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9406,1032,1032,'OP_SitMsg',173,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9407,1032,1032,'OP_StandMsg',174,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9408,1032,1032,'OP_SatMsg',175,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9409,1032,1032,'OP_StoodMsg',176,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9410,1032,1032,'OP_ClearForTakeOffMsg',177,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9411,1032,1032,'OP_ReadyForTakeOffMsg',178,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9412,1032,1032,'OP_ShowIllusionsMsg',179,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9413,1032,1032,'OP_HideIllusionsMsg',180,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9414,1032,1032,'OP_ExamineItemRequestMsg',181,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9415,1032,1032,'OP_ReadBookPageMsg',182,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9416,1032,1032,'OP_DefaultGroupOptionsRequestMsg',183,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9417,1032,1032,'OP_DefaultGroupOptionsMsg',184,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9418,1032,1032,'OP_GroupOptionsMsg',185,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9419,1032,1032,'OP_DisplayGroupOptionsScreenMsg',186,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9420,1032,1032,'OP_DisplayInnVisitScreenMsg',187,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9421,1032,1032,'OP_DumpSchedulerMsg',188,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9422,1032,1032,'OP_LSRequestPlayerDescMsg',189,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9423,1032,1032,'OP_LSCheckAcctLockMsg',190,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9424,1032,1032,'OP_WSAcctLockStatusMsg',191,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9425,1032,1032,'OP_RequestHelpRepathMsg',192,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9426,1032,1032,'OP_RequestTargetLocMsg',193,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9427,1032,1032,'OP_UpdateMotdMsg',194,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9428,1032,1032,'OP_PerformPlayerKnockbackMsg',195,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9429,1032,1032,'OP_PerformCameraShakeMsg',196,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9430,1032,1032,'OP_PopulateSkillMapsMsg',199,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9431,1032,1032,'OP_CancelledFeignMsg',201,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9432,1032,1032,'OP_SignalMsg',202,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9433,1032,1032,'OP_ShowCreateFromRecipeUIMsg',203,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9434,1032,1032,'OP_CancelCreateFromRecipeMsg',204,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9435,1032,1032,'OP_BeginItemCreationMsg',205,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9436,1032,1032,'OP_StopItemCreationMsg',206,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9437,1032,1032,'OP_ShowItemCreationProcessUIMsg',207,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9438,1032,1032,'OP_UpdateItemCreationProcessUIMsg',208,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9439,1032,1032,'OP_DisplayTSEventReactionMsg',209,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9440,1032,1032,'OP_ShowRecipeBookMsg',210,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9441,1032,1032,'OP_KnowledgebaseRequestMsg',211,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9442,1032,1032,'OP_KnowledgebaseResponseMsg',212,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9443,1032,1032,'OP_CSTicketHeaderRequestMsg',213,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9444,1032,1032,'OP_CSTicketInfoMsg',214,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9445,1032,1032,'OP_CSTicketCommentRequestMsg',215,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9446,1032,1032,'OP_CSTicketCommentResponseMsg',216,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9447,1032,1032,'OP_CSTicketCreateMsg',217,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9448,1032,1032,'OP_CSTicketAddCommentMsg',218,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9449,1032,1032,'OP_CSTicketDeleteMsg',219,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9450,1032,1032,'OP_CSTicketChangeNotificationMsg',220,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9451,1032,1032,'OP_WorldDataUpdateMsg',221,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9452,1032,1032,'OP_KnownLanguagesMsg',222,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9453,1032,1032,'OP_LsRequestClientCrashLogMsg',223,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9454,1032,1032,'OP_LsClientBaselogReplyMsg',224,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9455,1032,1032,'OP_LsClientCrashlogReplyMsg',225,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9456,1032,1032,'OP_LsClientAlertlogReplyMsg',226,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9457,1032,1032,'OP_LsClientVerifylogReplyMsg',227,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9458,1032,1032,'OP_ClientTeleportToLocationMsg',228,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9459,1032,1032,'OP_UpdateClientPredFlagsMsg',229,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9460,1032,1032,'OP_ChangeServerControlFlagMsg',230,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9461,1032,1032,'OP_CSToolsRequestMsg',231,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9462,1032,1032,'OP_CSToolsResponseMsg',232,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9463,1032,1032,'OP_AddSocialStructureStandingMsg',233,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9464,1032,1032,'OP_CreateBoatTransportsMsg',234,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9465,1032,1032,'OP_PositionBoatTransportMsg',235,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9466,1032,1032,'OP_MigrateBoatTransportMsg',236,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9467,1032,1032,'OP_MigrateBoatTransportReplyMsg',237,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9468,1032,1032,'OP_DisplayDebugNLLPointsMsg',238,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9469,1032,1032,'OP_ExamineInfoRequestMsg',239,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9470,1032,1032,'OP_QuickbarInitMsg',240,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9471,1032,1032,'OP_QuickbarUpdateMsg',241,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9472,1032,1032,'OP_MacroInitMsg',242,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9473,1032,1032,'OP_MacroUpdateMsg',243,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9474,1032,1032,'OP_QuestionnaireMsg',244,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9475,1032,1032,'OP_LevelChangedMsg',245,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9476,1032,1032,'OP_SpellGainedMsg',246,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9477,1032,1032,'OP_EncounterBrokenMsg',247,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9478,1032,1032,'OP_OnscreenMsgMsg',248,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9479,1032,1032,'OP_DisplayWarningMsg',249,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9480,1032,1032,'OP_ModifyGuildMsg',250,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9481,1032,1032,'OP_GuildEventMsg',251,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9482,1032,1032,'OP_GuildEventAddMsg',252,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9483,1032,1032,'OP_GuildEventActionMsg',253,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9484,1032,1032,'OP_GuildEventListMsg',254,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9485,1032,1032,'OP_RequestGuildEventDetailsMsg',255,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9486,1032,1032,'OP_GuildEventDetailsMsg',256,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9487,1032,1032,'OP_RequestGuildInfoMsg',257,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9488,1032,1032,'OP_GuildBankActionMsg',258,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9489,1032,1032,'OP_GuildBankActionResponseMsg',259,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9490,1032,1032,'OP_GuildBankItemDetailsRequestMsg',260,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9491,1032,1032,'OP_GuildBankItemDetailsResponseMs',261,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9492,1032,1032,'OP_GuildBankUpdateMsg',262,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9493,1032,1032,'OP_GuildBankEventListMsg',263,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9494,1032,1032,'OP_RequestGuildBankEventDetailsMs',264,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9495,1032,1032,'OP_RewardPackMsg',265,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9496,1032,1032,'OP_RenameGuildMsg',266,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9497,1032,1032,'OP_ZoneToFriendRequestMsg',268,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9498,1032,1032,'OP_ZoneToFriendReplyMsg',269,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9499,1032,1032,'OP_ChatCreateChannelMsg',270,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9500,1032,1032,'OP_ChatJoinChannelMsg',271,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9501,1032,1032,'OP_ChatWhoChannelMsg',272,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9502,1032,1032,'OP_ChatLeaveChannelMsg',273,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9503,1032,1032,'OP_ChatTellChannelMsg',274,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9504,1032,1032,'OP_ChatTellUserMsg',275,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9505,1032,1032,'OP_ChatToggleFriendMsg',276,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9506,1032,1032,'OP_ChatToggleIgnoreMsg',277,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9507,1032,1032,'OP_ChatSendFriendsMsg',278,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9508,1032,1032,'OP_ChatSendIgnoresMsg',279,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9509,1032,1032,'OP_QuestReward',306,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9510,1032,1032,'OP_ChatFiltersMsg',321,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9511,1032,1032,'OP_MailGetHeadersMsg',322,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9512,1032,1032,'OP_MailGetMessageMsg',323,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9513,1032,1032,'OP_MailSendMessageMsg',324,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9514,1032,1032,'OP_MailDeleteMessageMsg',325,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9515,1032,1032,'OP_MailGetHeadersReplyMsg',326,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9516,1032,1032,'OP_MailGetMessageReplyMsg',327,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9517,1032,1032,'OP_MailSendMessageReplyMsg',328,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9518,1032,1032,'OP_MailCommitSendMessageMsg',329,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9519,1032,1032,'OP_MailSendSystemMessageMsg',330,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9520,1032,1032,'OP_MailRemoveAttachFromMailMsg',331,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9521,1032,1032,'OP_WaypointRequestMsg',333,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9522,1032,1032,'OP_WaypointReplyMsg',334,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9523,1032,1032,'OP_WaypointSelectMsg',335,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9524,1032,1032,'OP_WaypointUpdateMsg',336,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9525,1032,1032,'OP_CharNameChangedMsg',337,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9526,1032,1032,'OP_ShowZoneTeleporterDestinations',338,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9527,1032,1032,'OP_SelectZoneTeleporterDestinatio',339,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9528,1032,1032,'OP_ReloadLocalizedTxtMsg',340,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9529,1032,1032,'OP_RequestGuildMembershipMsg',341,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9530,1032,1032,'OP_GuildMembershipResponseMsg',342,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9531,1032,1032,'OP_LeaveGuildNotifyMsg',343,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9532,1032,1032,'OP_JoinGuildNotifyMsg',344,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9533,1032,1032,'OP_AvatarUpdateMsg',346,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9534,1032,1032,'OP_BioUpdateMsg',347,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9535,1032,1032,'OP_InspectPlayerMsg',348,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9536,1032,1032,'OP_WSServerLockMsg',349,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9537,1032,1032,'OP_LSServerLockMsg',350,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9538,1032,1032,'OP_WSServerHideMsg',351,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9539,1032,1032,'OP_CsCategoryRequestMsg',352,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9540,1032,1032,'OP_CsCategoryResponseMsg',353,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9541,1032,1032,'OP_KnowledgeWindowSlotMappingMsg',354,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9542,1032,1032,'OP_LFGUpdateMsg',355,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9543,1032,1032,'OP_AFKUpdateMsg',356,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9544,1032,1032,'OP_AnonUpdateMsg',357,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9545,1032,1032,'OP_UpdateActivePublicZonesMsg',358,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9546,1032,1032,'OP_UnknownNpcMsg',359,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9547,1032,1032,'OP_PromoFlagsDetailsMsg',360,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9548,1032,1032,'OP_ConsignViewCreateMsg',361,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9549,1032,1032,'OP_ConsignViewGetPageMsg',362,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9550,1032,1032,'OP_ConsignViewReleaseMsg',363,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9551,1032,1032,'OP_ConsignRemoveItemsMsg',364,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9552,1032,1032,'OP_UpdateDebugRadiiMsg',365,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9553,1032,1032,'OP_SnoopMsg',366,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9554,1032,1032,'OP_ReportMsg',367,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9555,1032,1032,'OP_UpdateRaidMsg',368,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9556,1032,1032,'OP_ConsignViewSortMsg',369,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9557,1032,1032,'OP_TitleUpdateMsg',370,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9558,1032,1032,'OP_ClientFellMsg',371,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9559,1032,1032,'OP_ClientInDeathRegionMsg',372,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9560,1032,1032,'OP_CampClientMsg',373,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9561,1032,1032,'OP_CSToolAccessResponseMsg',374,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9562,1032,1032,'OP_TrackingUpdateMsg',375,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9563,1032,1032,'OP_BeginTrackingMsg',376,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9564,1032,1032,'OP_StopTrackingMsg',377,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9565,1032,1032,'OP_GetAvatarAccessRequestForCSToo',378,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9566,1032,1032,'OP_AdvancementRequestMsg',379,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9567,1032,1032,'OP_UpdateAvgFrameTimeMsg',380,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9568,1032,1032,'OP_MapFogDataInitMsg',381,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9569,1032,1032,'OP_MapFogDataUpdateMsg',382,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9570,1032,1032,'OP_CloseGroupInviteWindowMsg',383,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9571,1032,1032,'OP_UpdateGroupMemberDataMsg',384,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9572,1032,1032,'OP_WorldPingMsg',385,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9573,1032,1032,'OP_MoveLogUpdateMsg',386,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9574,1032,1032,'OP_OfferQuestMsg',387,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9575,1032,1032,'OP_WorldShutdownUpdateMsg',388,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9576,1032,1032,'OP_DisplayMailScreenMsg',389,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9577,1032,1032,'OP_ClientIdleBeginMsg',390,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9578,1032,1032,'OP_ClientIdleEndMsg',391,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9579,1032,1032,'OP_PurchaseConsignmentLoreCheckRe',392,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9580,1032,1032,'OP_NotifyApprenticeStoppedMentori',393,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9581,1032,1032,'OP_CorruptedClientMsg',394,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9582,1032,1032,'OP_WorldDataChangeMsg',395,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9583,1032,1032,'OP_MailEventNotificationMsg',396,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9584,1032,1032,'OP_RestartZoneMsg',397,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9585,1032,1032,'OP_FlightPathsMsg',398,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9586,1032,1032,'OP_CharacterLinkdeadMsg',399,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9587,1032,1032,'OP_CharTransferStartRequestMsg',400,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9588,1032,1032,'OP_CharTransferStartReplyMsg',401,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9589,1032,1032,'OP_CharTransferRequestMsg',402,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9590,1032,1032,'OP_CharTransferReplyMsg',403,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9591,1032,1032,'OP_CharTransferRollbackRequestMsg',404,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9592,1032,1032,'OP_CharTransferCommitRequestMsg',405,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9593,1032,1032,'OP_CharTransferRollbackReplyMsg',406,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9594,1032,1032,'OP_CharTransferCommitReplyMsg',407,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9595,1032,1032,'OP_GetCharacterSerializedRequestM',408,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9596,1032,1032,'OP_GetCharacterSerializedReplyMsg',409,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9597,1032,1032,'OP_CreateCharFromCBBRequestMsg',410,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9598,1032,1032,'OP_CreateCharFromCBBReplyMsg',411,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9599,1032,1032,'OP_HousingDataChangedMsg',412,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9600,1032,1032,'OP_HousingRestoreMsg',413,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9601,1032,1032,'OP_AuctionItem',414,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9602,1032,1032,'OP_AuctionItemReply',415,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9603,1032,1032,'OP_AuctionCoin',416,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9604,1032,1032,'OP_AuctionCoinReply',417,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9605,1032,1032,'OP_AuctionCharacter',418,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9606,1032,1032,'OP_AuctionCharacterReply',419,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9607,1032,1032,'OP_AuctionCommitMsg',420,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9608,1032,1032,'OP_AuctionAbortMsg',421,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9609,1032,1032,'OP_CharTransferValidateRequestMsg',422,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9610,1032,1032,'OP_CharTransferValidateReplyMsg',423,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9611,1032,1032,'OP_RaceRestrictionMsg',424,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9612,1032,1032,'OP_SetInstanceDisplayNameMsg',425,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9613,1032,1032,'OP_GetAuctionAssetIDMsg',426,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9614,1032,1032,'OP_GetAuctionAssetIDReplyMsg',427,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9615,1032,1032,'OP_ResendWorldChannelsMsg',428,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9616,1032,1032,'OP_DisplayExchangeScreenMsg',429,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9617,1032,1032,'OP_ArenaGameTypesMsg',430,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9618,1032,1032,'OP_AuditAuctionEventMsg',432,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9619,1032,1032,'OP_InviteRequestMsg',434,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9620,1032,1032,'OP_InviteResponseMsg',435,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9621,1032,1032,'OP_InviteTargetResponseMsg',436,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9622,1032,1032,'OP_InspectPlayerRequestMsg',437,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9623,1032,1032,'OP_DispatchMsg',438,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9624,1032,1032,'OP_DisplayEventMsg',439,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9625,1032,1032,'OP_PrePossessionMsg',440,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9626,1032,1032,'OP_PostPossessionMsg',441,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9627,1032,1032,'OP_AdventureList',473,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9628,1032,1032,'OP_CancelSpellCast',474,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9629,1032,1032,'OP_AttackAllowed',486,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9630,1032,1032,'OP_AttackNotAllowed',487,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9631,1032,1032,'OP_DressingRoom',493,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9632,1032,1032,'OP_SkillInfoRequest',497,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9633,1032,1032,'OP_SkillInfoResponse',498,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9634,1032,1032,'OP_MapRequest',503,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9635,1032,1032,'OP_EqUnknown',536,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9636,1032,1032,'OP_EqHearChatCmd',538,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9637,1032,1032,'OP_EqDisplayTextCmd',539,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9638,1032,1032,'OP_EqCreateGhostCmd',540,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9639,1032,1032,'OP_EqCreateWidgetCmd',541,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9640,1032,1032,'OP_EqCreateSignWidgetCmd',542,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9641,1032,1032,'OP_EqDestroyGhostCmd',543,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9642,1032,1032,'OP_EqUpdateGhostCmd',544,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9643,1032,1032,'OP_EqSetControlGhostCmd',545,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9644,1032,1032,'OP_EqSetPOVGhostCmd',546,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9645,1032,1032,'OP_EqHearCombatCmd',547,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9646,1032,1032,'OP_EqHearSpellCastCmd',548,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9647,1032,1032,'OP_EqHearSpellInterruptCmd',551,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9648,1032,1032,'OP_EqHearSpellFizzleCmd',552,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9649,1032,1032,'OP_EqHearConsiderCmd',553,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9650,1032,1032,'OP_EqUpdateSubClassesCmd',554,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9651,1032,1032,'OP_EqCreateListBoxCmd',555,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9652,1032,1032,'OP_EqSetDebugPathPointsCmd',556,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9653,1032,1032,'OP_EqCannedEmoteCmd',558,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9654,1032,1032,'OP_EqStateCmd',559,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9655,1032,1032,'OP_EqPlaySoundCmd',560,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9656,1032,1032,'OP_EqPlaySound3DCmd',561,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9657,1032,1032,'OP_EqPlayVoiceCmd',562,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9658,1032,1032,'OP_EqHearDrowningCmd',563,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9659,1032,1032,'OP_EqHearDeathCmd',564,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9660,1032,1032,'OP_EqGroupMemberRemovedCmd',565,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9661,1032,1032,'OP_EqHearChainEffectCmd',566,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9662,1032,1032,'OP_EqReceiveOfferCmd',567,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9663,1032,1032,'OP_EqInspectPCResultsCmd',568,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9664,1032,1032,'OP_EqDrawablePathGraphCmd',569,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9665,1032,1032,'OP_EqDialogOpenCmd',570,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9666,1032,1032,'OP_EqDialogCloseCmd',571,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9667,1032,1032,'OP_EqFactionUpdateCmd',572,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9668,1032,1032,'OP_EqCollectionUpdateCmd',573,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9669,1032,1032,'OP_EqCollectionFilterCmd',574,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9670,1032,1032,'OP_EqCollectionItemCmd',575,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9671,1032,1032,'OP_EqQuestJournalUpdateCmd',576,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9672,1032,1032,'OP_EqQuestJournalReplyCmd',578,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9673,1032,1032,'OP_EqQuestGroupCmd',579,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9674,1032,1032,'OP_EqUpdateMerchantCmd',580,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9675,1032,1032,'OP_EqUpdateStoreCmd',581,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9676,1032,1032,'OP_EqUpdatePlayerTradeCmd',582,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9677,1032,1032,'OP_EqHelpPathCmd',583,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9678,1032,1032,'OP_EqHelpPathClearCmd',584,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9679,1032,1032,'OP_EqUpdateBankCmd',585,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9680,1032,1032,'OP_EqExamineInfoCmd',586,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9681,1032,1032,'OP_EqCloseWindowCmd',587,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9682,1032,1032,'OP_EqUpdateLootCmd',588,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9683,1032,1032,'OP_EqJunctionListCmd',589,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9684,1032,1032,'OP_EqShowDeathWindowCmd',590,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9685,1032,1032,'OP_EqDisplaySpellFailCmd',591,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9686,1032,1032,'OP_EqSpellCastStartCmd',592,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9687,1032,1032,'OP_EqSpellCastEndCmd',593,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9688,1032,1032,'OP_EqResurrectedCmd',594,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9689,1032,1032,'OP_EqChoiceWinCmd',595,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9690,1032,1032,'OP_EqSetDefaultVerbCmd',596,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9691,1032,1032,'OP_EqInstructionWindowCmd',598,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9692,1032,1032,'OP_EqInstructionWindowCloseCmd',599,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9693,1032,1032,'OP_EqInstructionWindowGoalCmd',600,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9694,1032,1032,'OP_EqInstructionWindowTaskCmd',601,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9695,1032,1032,'OP_EqEnableGameEventCmd',602,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9696,1032,1032,'OP_EqShowWindowCmd',603,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9697,1032,1032,'OP_EqEnableWindowCmd',604,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9698,1032,1032,'OP_EqFlashWindowCmd',605,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9699,1032,1032,'OP_EqHearPlayFlavorCmd',606,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9700,1032,1032,'OP_EqUpdateSignWidgetCmd',608,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9701,1032,1032,'OP_EqDebugPVDCmd',609,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9702,1032,1032,'OP_EqShowBookCmd',610,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9703,1032,1032,'OP_EqQuestionnaireCmd',611,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9704,1032,1032,'OP_EqGetProbsCmd',612,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9705,1032,1032,'OP_EqHearHealCmd',613,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9706,1032,1032,'OP_EqChatChannelUpdateCmd',614,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9707,1032,1032,'OP_EqWhoChannelQueryReplyCmd',615,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9708,1032,1032,'OP_EqAvailWorldChannelsCmd',616,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9709,1032,1032,'OP_EqUpdateTargetCmd',617,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9710,1032,1032,'OP_EqConsignmentItemsCmd',619,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9711,1032,1032,'OP_EqStartBrokerCmd',621,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9712,1032,1032,'OP_EqMapExplorationCmd',622,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9713,1032,1032,'OP_EqStoreLogCmd',623,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9714,1032,1032,'OP_EqSpellMoveToRangeAndRetryCmd',624,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9715,1032,1032,'OP_EqUpdatePlayerMailCmd',625,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9716,1032,1032,'OP_EqArenaResultsCmd',626,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9717,1032,1032,'OP_EqGuildBankEventActionCmd',627,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9718,1032,1032,'OP_EqGuildBankExamineInfoCmd',628,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9719,1032,1032,'OP_EqHearSpellNoLandCmd',629,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9720,1032,1032,'OP_Lottery',633,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9721,1032,1032,'OP_GuildRecruitingMemberInfo',634,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9722,1032,1032,'OP_GuildRecruiting',635,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9723,1032,1032,'OP_GuildRecruitingDetails',636,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9724,1032,1032,'OP_GuildRecruitingImage',637,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9725,1032,1032,'OP_PointOfInterest',658,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9726,1032,1032,'OP_TraitsList',660,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9727,1032,1032,'OP_RecipeList',669,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9728,1032,1032,'OP_CharacterAchievements',671,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9729,1032,1032,'OP_AddClientToGroupMsg',1054,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9730,1032,1032,'OP_AddGroupToGroupMsg',1054,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9731,1032,1032,'OP_GuildKickMsg',1054,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9732,1032,1032,'OP_ProcessScriptMsg',1054,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9733,1032,1032,'OP_ProcessWorkspaceMsg',1054,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9734,1032,1032,'OP_PurchaseConsignmentResponseMsg',1054,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9735,1032,1032,'OP_QuickbarAddMsg',1054,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9736,1032,1032,'OP_SkillSlotMapping',1054,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9737,1032,1032,'OP_Unknown',10058,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9738,1032,1032,'OP_WSWeatherUpdateMsg',10059,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9739,1045,1046,'OP_LoginRequestMsg',0,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9740,1045,1046,'OP_LoginByNumRequestMsg',1,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9741,1045,1046,'OP_WSLoginRequestMsg',2,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9742,1045,1046,'OP_ESLoginRequestMsg',3,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9743,1045,1046,'OP_LoginReplyMsg',4,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9744,1045,1046,'OP_WSStatusReplyMsg',5,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9745,1045,1046,'OP_WorldStatusChangeMsg',6,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9746,1045,1046,'OP_AllWSDescRequestMsg',7,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9747,1045,1046,'OP_WorldListMsg',8,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9748,1045,1046,'OP_AllCharactersDescRequestMsg',9,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9749,1045,1046,'OP_AllCharactersDescReplyMsg',10,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9750,1045,1046,'OP_CreateCharacterRequestMsg',11,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9751,1045,1046,'OP_CreateCharacterReplyMsg',12,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9752,1045,1046,'OP_WSCreateCharacterRequestMsg',13,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9753,1045,1046,'OP_WSCreateCharacterReplyMsg',14,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9754,1045,1046,'OP_ReskinCharacterRequestMsg',15,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9755,1045,1046,'OP_DeleteCharacterRequestMsg',16,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9756,1045,1046,'OP_DeleteCharacterReplyMsg',17,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9757,1045,1046,'OP_PlayCharacterRequestMsg',18,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9758,1045,1046,'OP_PlayCharacterReplyMsg',19,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9759,1045,1046,'OP_ExpectClientAsCharacterReplyMs',22,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9760,1045,1046,'OP_ServerPlayCharacterRequestMsg',23,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9761,1045,1046,'OP_ServerPlayCharacterReplyMsg',24,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9762,1045,1046,'OP_ESInitMsg',25,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9763,1045,1046,'OP_ESReadyForClientsMsg',26,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9764,1045,1046,'OP_CreateZoneInstanceMsg',27,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9765,1045,1046,'OP_ZoneInstanceCreateReplyMsg',28,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9766,1045,1046,'OP_ZoneInstanceDestroyedMsg',29,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9767,1045,1046,'OP_ExpectClientAsCharacterRequest',30,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9768,1045,1046,'OP_ZoneInfoMsg',31,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9769,1045,1046,'OP_DoneLoadingZoneResourcesMsg',32,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9770,1045,1046,'OP_DoneSendingInitialEntitiesMsg',33,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9771,1045,1046,'OP_DoneLoadingEntityResourcesMsg',34,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9772,1045,1046,'OP_PredictionUpdateMsg',35,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9773,1045,1046,'OP_UpdatePositionMsg',37,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9774,1045,1046,'OP_SetRemoteCmdsMsg',39,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9775,1045,1046,'OP_RemoteCmdMsg',40,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9776,1045,1046,'OP_GameWorldTimeMsg',41,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9777,1045,1046,'OP_MOTDMsg',42,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9778,1045,1046,'OP_ZoneMOTDMsg',43,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9779,1045,1046,'OP_AvatarCreatedMsg',44,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9780,1045,1046,'OP_AvatarDestroyedMsg',45,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9781,1045,1046,'OP_RequestCampMsg',47,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9782,1045,1046,'OP_CampStartedMsg',48,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9783,1045,1046,'OP_CampAbortedMsg',49,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9784,1045,1046,'OP_WhoQueryRequestMsg',50,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9785,1045,1046,'OP_WhoQueryReplyMsg',51,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9786,1045,1046,'OP_MonitorReplyMsg',52,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9787,1045,1046,'OP_MonitorCharacterListMsg',53,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9788,1045,1046,'OP_MonitorCharacterListRequestMsg',54,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9789,1045,1046,'OP_ClientCmdMsg',55,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9790,1045,1046,'OP_DispatchESMsg',56,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9791,1045,1046,'OP_DispatchClientCmdMsg',57,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9792,1045,1046,'OP_UpdateTargetMsg',58,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9793,1045,1046,'OP_UpdateTargetLocMsg',59,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9794,1045,1046,'OP_UpdateCharacterSheetMsg',60,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9795,1045,1046,'OP_UpdateSpellBookMsg',61,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9796,1045,1046,'OP_UpdateInventoryMsg',63,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9797,1045,1046,'OP_UpdateRecipeBookMsg',65,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9798,1045,1046,'OP_RequestRecipeDetailsMsg',66,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9799,1045,1046,'OP_RecipeDetailsMsg',67,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9800,1045,1046,'OP_UpdateSkillBookMsg',68,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9801,1045,1046,'OP_UpdateSkillsMsg',69,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9802,1045,1046,'OP_UpdateOpportunityMsg',70,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9803,1045,1046,'OP_ChangeZoneMsg',72,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9804,1045,1046,'OP_ClientTeleportRequestMsg',73,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9805,1045,1046,'OP_TeleportWithinZoneMsg',74,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9806,1045,1046,'OP_TeleportWithinZoneNoReloadMsg',75,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9807,1045,1046,'OP_MigrateClientToZoneRequestMsg',76,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9808,1045,1046,'OP_MigrateClientToZoneReplyMsg',77,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9809,1045,1046,'OP_ReadyToZoneMsg',78,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9810,1045,1046,'OP_RemoveClientFromGroupMsg',79,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9811,1045,1046,'OP_RemoveGroupFromGroupMsg',80,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9812,1045,1046,'OP_MakeGroupLeaderMsg',81,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9813,1045,1046,'OP_GroupCreatedMsg',82,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9814,1045,1046,'OP_GroupDestroyedMsg',83,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9815,1045,1046,'OP_GroupMemberAddedMsg',84,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9816,1045,1046,'OP_GroupMemberRemovedMsg',85,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9817,1045,1046,'OP_GroupRemovedFromGroupMsg',86,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9818,1045,1046,'OP_GroupLeaderChangedMsg',87,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9819,1045,1046,'OP_GroupResendOOZDataMsg',88,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9820,1045,1046,'OP_GroupSettingsChangedMsg',89,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9821,1045,1046,'OP_OutOfZoneMemberDataMsg',90,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9822,1045,1046,'OP_SendLatestRequestMsg',91,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9823,1045,1046,'OP_ClearDataMsg',92,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9824,1045,1046,'OP_SetSocialMsg',93,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9825,1045,1046,'OP_ESStatusMsg',94,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9826,1045,1046,'OP_ESZoneInstanceStatusMsg',95,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9827,1045,1046,'OP_ZonesStatusRequestMsg',96,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9828,1045,1046,'OP_ZonesStatusMsg',97,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9829,1045,1046,'OP_ESWeatherRequestMsg',98,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9830,1045,1046,'OP_ESWeatherRequestEndMsg',99,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9831,1045,1046,'OP_DialogSelectMsg',102,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9832,1045,1046,'OP_DialogCloseMsg',103,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9833,1045,1046,'OP_RemoveSpellEffectMsg',104,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9834,1045,1046,'OP_RemoveConcentrationMsg',105,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9835,1045,1046,'OP_QuestJournalOpenMsg',106,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9836,1045,1046,'OP_QuestJournalInspectMsg',107,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9837,1045,1046,'OP_QuestJournalSetVisibleMsg',108,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9838,1045,1046,'OP_QuestJournalWaypointMsg',109,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9839,1045,1046,'OP_CreateGuildRequestMsg',110,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9840,1045,1046,'OP_CreateGuildReplyMsg',111,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9841,1045,1046,'OP_GuildsayMsg',112,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9842,1045,1046,'OP_GuildUpdateMsg',119,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9843,1045,1046,'OP_DeleteGuildMsg',120,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9844,1045,1046,'OP_FellowshipExpMsg',121,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9845,1045,1046,'OP_ConsignmentCloseStoreMsg',122,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9846,1045,1046,'OP_ConsignItemRequestMsg',123,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9847,1045,1046,'OP_ConsignItemResponseMsg',124,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9848,1045,1046,'OP_PurchaseConsignmentRequestMsg',125,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9849,1045,1046,'OP_HouseDeletedRemotelyMsg',126,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9850,1045,1046,'OP_UpdateHouseDataMsg',127,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9851,1045,1046,'OP_UpdateHouseAccessDataMsg',128,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9852,1045,1046,'OP_PlayerHouseBaseScreenMsg',129,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9853,1045,1046,'OP_PlayerHousePurchaseScreenMsg',130,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9854,1045,1046,'OP_PlayerHouseAccessUpdateMsg',131,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9855,1045,1046,'OP_PlayerHouseDisplayStatusMsg',132,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9856,1045,1046,'OP_PlayerHouseCloseUIMsg',133,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9857,1045,1046,'OP_BuyPlayerHouseMsg',134,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9858,1045,1046,'OP_BuyPlayerHouseTintMsg',135,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9859,1045,1046,'OP_CollectAllHouseItemsMsg',136,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9860,1045,1046,'OP_RelinquishHouseMsg',137,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9861,1045,1046,'OP_EnterHouseMsg',138,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9862,1045,1046,'OP_ExitHouseMsg',139,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9863,1045,1046,'OP_HouseDefaultAccessSetMsg',140,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9864,1045,1046,'OP_HouseAccessSetMsg',141,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9865,1045,1046,'OP_HouseAccessRemoveMsg',142,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9866,1045,1046,'OP_PayHouseUpkeepMsg',143,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9867,1045,1046,'OP_MoveableObjectPlacementCriteri',145,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9868,1045,1046,'OP_EnterMoveObjectModeMsg',146,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9869,1045,1046,'OP_PositionMoveableObject',147,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9870,1045,1046,'OP_CancelMoveObjectModeMsg',148,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9871,1045,1046,'OP_ShaderCustomizationMsg',149,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9872,1045,1046,'OP_ReplaceableSubMeshesMsg',150,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9873,1045,1046,'OP_HouseCustomizationScreenMsg',151,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9874,1045,1046,'OP_CustomizationPurchaseRequestMs',152,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9875,1045,1046,'OP_CustomizationSetRequestMsg',153,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9876,1045,1046,'OP_CustomizationReplyMsg',154,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9877,1045,1046,'OP_TintWidgetsMsg',155,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9878,1045,1046,'OP_ExamineConsignmentRequestMsg',156,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9879,1045,1046,'OP_ExamineConsignmentResponseMsg',157,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9880,1045,1046,'OP_UISettingsResponseMsg',158,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9881,1045,1046,'OP_UIResetMsg',160,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9882,1045,1046,'OP_KeymapLoadMsg',161,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9883,1045,1046,'OP_KeymapNoneMsg',162,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9884,1045,1046,'OP_KeymapDataMsg',163,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9885,1045,1046,'OP_KeymapSaveMsg',164,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9886,1045,1046,'OP_DispatchSpellCmdMsg',165,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9887,1045,1046,'OP_EntityVerbsRequestMsg',167,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9888,1045,1046,'OP_EntityVerbsReplyMsg',168,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9889,1045,1046,'OP_EntityVerbsVerbMsg',169,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9890,1045,1046,'OP_ChatRelationshipUpdateMsg',171,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9891,1045,1046,'OP_LootItemsRequestMsg',172,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9892,1045,1046,'OP_StoppedLootingMsg',173,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9893,1045,1046,'OP_SitMsg',174,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9894,1045,1046,'OP_StandMsg',175,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9895,1045,1046,'OP_SatMsg',176,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9896,1045,1046,'OP_StoodMsg',177,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9897,1045,1046,'OP_ClearForTakeOffMsg',178,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9898,1045,1046,'OP_ReadyForTakeOffMsg',179,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9899,1045,1046,'OP_ShowIllusionsMsg',180,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9900,1045,1046,'OP_HideIllusionsMsg',181,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9901,1045,1046,'OP_ExamineItemRequestMsg',182,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9902,1045,1046,'OP_ReadBookPageMsg',183,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9903,1045,1046,'OP_DefaultGroupOptionsRequestMsg',184,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9904,1045,1046,'OP_DefaultGroupOptionsMsg',185,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9905,1045,1046,'OP_GroupOptionsMsg',186,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9906,1045,1046,'OP_DisplayGroupOptionsScreenMsg',187,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9907,1045,1046,'OP_DisplayInnVisitScreenMsg',188,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9908,1045,1046,'OP_DumpSchedulerMsg',189,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9909,1045,1046,'OP_LSRequestPlayerDescMsg',190,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9910,1045,1046,'OP_LSCheckAcctLockMsg',191,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9911,1045,1046,'OP_WSAcctLockStatusMsg',192,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9912,1045,1046,'OP_RequestHelpRepathMsg',193,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9913,1045,1046,'OP_RequestTargetLocMsg',194,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9914,1045,1046,'OP_UpdateMotdMsg',195,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9915,1045,1046,'OP_PerformPlayerKnockbackMsg',196,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9916,1045,1046,'OP_PerformCameraShakeMsg',197,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9917,1045,1046,'OP_PopulateSkillMapsMsg',200,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9918,1045,1046,'OP_CancelledFeignMsg',202,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9919,1045,1046,'OP_SignalMsg',203,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9920,1045,1046,'OP_ShowCreateFromRecipeUIMsg',204,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9921,1045,1046,'OP_CancelCreateFromRecipeMsg',205,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9922,1045,1046,'OP_BeginItemCreationMsg',206,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9923,1045,1046,'OP_StopItemCreationMsg',207,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9924,1045,1046,'OP_ShowItemCreationProcessUIMsg',208,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9925,1045,1046,'OP_UpdateItemCreationProcessUIMsg',209,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9926,1045,1046,'OP_DisplayTSEventReactionMsg',210,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9927,1045,1046,'OP_ShowRecipeBookMsg',211,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9928,1045,1046,'OP_KnowledgebaseRequestMsg',212,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9929,1045,1046,'OP_KnowledgebaseResponseMsg',213,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9930,1045,1046,'OP_CSTicketHeaderRequestMsg',214,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9931,1045,1046,'OP_CSTicketInfoMsg',215,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9932,1045,1046,'OP_CSTicketCommentRequestMsg',216,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9933,1045,1046,'OP_CSTicketCommentResponseMsg',217,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9934,1045,1046,'OP_CSTicketCreateMsg',218,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9935,1045,1046,'OP_CSTicketAddCommentMsg',219,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9936,1045,1046,'OP_CSTicketDeleteMsg',220,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9937,1045,1046,'OP_CSTicketChangeNotificationMsg',221,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9938,1045,1046,'OP_WorldDataUpdateMsg',222,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9939,1045,1046,'OP_KnownLanguagesMsg',223,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9940,1045,1046,'OP_LsRequestClientCrashLogMsg',224,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9941,1045,1046,'OP_LsClientBaselogReplyMsg',225,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9942,1045,1046,'OP_LsClientCrashlogReplyMsg',226,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9943,1045,1046,'OP_LsClientAlertlogReplyMsg',227,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9944,1045,1046,'OP_LsClientVerifylogReplyMsg',228,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9945,1045,1046,'OP_ClientTeleportToLocationMsg',229,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9946,1045,1046,'OP_UpdateClientPredFlagsMsg',230,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9947,1045,1046,'OP_ChangeServerControlFlagMsg',231,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9948,1045,1046,'OP_CSToolsRequestMsg',232,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9949,1045,1046,'OP_CSToolsResponseMsg',233,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9950,1045,1046,'OP_AddSocialStructureStandingMsg',234,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9951,1045,1046,'OP_CreateBoatTransportsMsg',235,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9952,1045,1046,'OP_PositionBoatTransportMsg',236,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9953,1045,1046,'OP_MigrateBoatTransportMsg',237,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9954,1045,1046,'OP_MigrateBoatTransportReplyMsg',238,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9955,1045,1046,'OP_DisplayDebugNLLPointsMsg',239,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9956,1045,1046,'OP_ExamineInfoRequestMsg',240,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9957,1045,1046,'OP_QuickbarInitMsg',241,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9958,1045,1046,'OP_QuickbarUpdateMsg',242,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9959,1045,1046,'OP_MacroInitMsg',243,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9960,1045,1046,'OP_MacroUpdateMsg',244,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9961,1045,1046,'OP_QuestionnaireMsg',245,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9962,1045,1046,'OP_LevelChangedMsg',246,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9963,1045,1046,'OP_SpellGainedMsg',247,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9964,1045,1046,'OP_EncounterBrokenMsg',248,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9965,1045,1046,'OP_OnscreenMsgMsg',249,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9966,1045,1046,'OP_DisplayWarningMsg',250,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9967,1045,1046,'OP_ModifyGuildMsg',251,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9968,1045,1046,'OP_GuildEventMsg',252,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9969,1045,1046,'OP_GuildEventAddMsg',253,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9970,1045,1046,'OP_GuildEventActionMsg',254,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9971,1045,1046,'OP_GuildEventListMsg',255,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9972,1045,1046,'OP_RequestGuildEventDetailsMsg',256,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9973,1045,1046,'OP_GuildEventDetailsMsg',257,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9974,1045,1046,'OP_RequestGuildInfoMsg',258,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9975,1045,1046,'OP_GuildBankActionMsg',259,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9976,1045,1046,'OP_GuildBankActionResponseMsg',260,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9977,1045,1046,'OP_GuildBankItemDetailsRequestMsg',261,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9978,1045,1046,'OP_GuildBankItemDetailsResponseMs',262,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9979,1045,1046,'OP_GuildBankUpdateMsg',263,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9980,1045,1046,'OP_GuildBankEventListMsg',264,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9981,1045,1046,'OP_RequestGuildBankEventDetailsMs',265,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9982,1045,1046,'OP_RewardPackMsg',266,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9983,1045,1046,'OP_RenameGuildMsg',267,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9984,1045,1046,'OP_ZoneToFriendRequestMsg',269,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9985,1045,1046,'OP_ZoneToFriendReplyMsg',270,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9986,1045,1046,'OP_ChatCreateChannelMsg',271,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9987,1045,1046,'OP_ChatJoinChannelMsg',272,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9988,1045,1046,'OP_ChatWhoChannelMsg',273,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9989,1045,1046,'OP_ChatLeaveChannelMsg',274,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9990,1045,1046,'OP_ChatTellChannelMsg',275,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9991,1045,1046,'OP_ChatTellUserMsg',276,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9992,1045,1046,'OP_ChatToggleFriendMsg',277,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9993,1045,1046,'OP_ChatToggleIgnoreMsg',278,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9994,1045,1046,'OP_ChatSendFriendsMsg',279,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9995,1045,1046,'OP_ChatSendIgnoresMsg',280,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9996,1045,1046,'OP_QuestReward',307,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9997,1045,1046,'OP_ChatFiltersMsg',322,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9998,1045,1046,'OP_MailGetHeadersMsg',323,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (9999,1045,1046,'OP_MailGetMessageMsg',324,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10000,1045,1046,'OP_MailSendMessageMsg',325,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10001,1045,1046,'OP_MailDeleteMessageMsg',326,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10002,1045,1046,'OP_MailGetHeadersReplyMsg',327,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10003,1045,1046,'OP_MailGetMessageReplyMsg',328,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10004,1045,1046,'OP_MailSendMessageReplyMsg',329,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10005,1045,1046,'OP_MailCommitSendMessageMsg',330,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10006,1045,1046,'OP_MailSendSystemMessageMsg',331,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10007,1045,1046,'OP_MailRemoveAttachFromMailMsg',332,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10008,1045,1046,'OP_WaypointRequestMsg',334,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10009,1045,1046,'OP_WaypointReplyMsg',335,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10010,1045,1046,'OP_WaypointSelectMsg',336,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10011,1045,1046,'OP_WaypointUpdateMsg',337,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10012,1045,1046,'OP_CharNameChangedMsg',338,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10013,1045,1046,'OP_ShowZoneTeleporterDestinations',339,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10014,1045,1046,'OP_SelectZoneTeleporterDestinatio',340,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10015,1045,1046,'OP_ReloadLocalizedTxtMsg',341,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10016,1045,1046,'OP_RequestGuildMembershipMsg',342,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10017,1045,1046,'OP_GuildMembershipResponseMsg',343,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10018,1045,1046,'OP_LeaveGuildNotifyMsg',344,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10019,1045,1046,'OP_JoinGuildNotifyMsg',345,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10020,1045,1046,'OP_AvatarUpdateMsg',347,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10021,1045,1046,'OP_BioUpdateMsg',348,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10022,1045,1046,'OP_InspectPlayerMsg',349,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10023,1045,1046,'OP_WSServerLockMsg',350,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10024,1045,1046,'OP_LSServerLockMsg',351,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10025,1045,1046,'OP_WSServerHideMsg',352,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10026,1045,1046,'OP_CsCategoryRequestMsg',353,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10027,1045,1046,'OP_CsCategoryResponseMsg',354,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10028,1045,1046,'OP_KnowledgeWindowSlotMappingMsg',355,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10029,1045,1046,'OP_LFGUpdateMsg',356,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10030,1045,1046,'OP_AFKUpdateMsg',357,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10031,1045,1046,'OP_AnonUpdateMsg',358,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10032,1045,1046,'OP_UpdateActivePublicZonesMsg',359,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10033,1045,1046,'OP_UnknownNpcMsg',360,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10034,1045,1046,'OP_PromoFlagsDetailsMsg',361,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10035,1045,1046,'OP_ConsignViewCreateMsg',362,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10036,1045,1046,'OP_ConsignViewGetPageMsg',363,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10037,1045,1046,'OP_ConsignViewReleaseMsg',364,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10038,1045,1046,'OP_ConsignRemoveItemsMsg',365,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10039,1045,1046,'OP_UpdateDebugRadiiMsg',366,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10040,1045,1046,'OP_SnoopMsg',367,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10041,1045,1046,'OP_ReportMsg',368,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10042,1045,1046,'OP_UpdateRaidMsg',369,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10043,1045,1046,'OP_ConsignViewSortMsg',370,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10044,1045,1046,'OP_TitleUpdateMsg',371,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10045,1045,1046,'OP_ClientFellMsg',372,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10046,1045,1046,'OP_ClientInDeathRegionMsg',373,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10047,1045,1046,'OP_CampClientMsg',374,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10048,1045,1046,'OP_CSToolAccessResponseMsg',375,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10049,1045,1046,'OP_TrackingUpdateMsg',376,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10050,1045,1046,'OP_BeginTrackingMsg',377,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10051,1045,1046,'OP_StopTrackingMsg',378,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10052,1045,1046,'OP_GetAvatarAccessRequestForCSToo',379,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10053,1045,1046,'OP_AdvancementRequestMsg',380,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10054,1045,1046,'OP_UpdateAvgFrameTimeMsg',381,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10055,1045,1046,'OP_MapFogDataInitMsg',382,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10056,1045,1046,'OP_MapFogDataUpdateMsg',383,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10057,1045,1046,'OP_CloseGroupInviteWindowMsg',384,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10058,1045,1046,'OP_UpdateGroupMemberDataMsg',385,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10059,1045,1046,'OP_WorldPingMsg',386,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10060,1045,1046,'OP_MoveLogUpdateMsg',387,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10061,1045,1046,'OP_OfferQuestMsg',388,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10062,1045,1046,'OP_WorldShutdownUpdateMsg',389,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10063,1045,1046,'OP_DisplayMailScreenMsg',390,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10064,1045,1046,'OP_ClientIdleBeginMsg',391,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10065,1045,1046,'OP_ClientIdleEndMsg',392,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10066,1045,1046,'OP_PurchaseConsignmentLoreCheckRe',393,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10067,1045,1046,'OP_NotifyApprenticeStoppedMentori',394,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10068,1045,1046,'OP_CorruptedClientMsg',395,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10069,1045,1046,'OP_WorldDataChangeMsg',396,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10070,1045,1046,'OP_MailEventNotificationMsg',397,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10071,1045,1046,'OP_RestartZoneMsg',398,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10072,1045,1046,'OP_FlightPathsMsg',399,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10073,1045,1046,'OP_CharacterLinkdeadMsg',400,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10074,1045,1046,'OP_CharTransferStartRequestMsg',401,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10075,1045,1046,'OP_CharTransferStartReplyMsg',402,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10076,1045,1046,'OP_CharTransferRequestMsg',403,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10077,1045,1046,'OP_CharTransferReplyMsg',404,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10078,1045,1046,'OP_CharTransferRollbackRequestMsg',405,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10079,1045,1046,'OP_CharTransferCommitRequestMsg',406,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10080,1045,1046,'OP_CharTransferRollbackReplyMsg',407,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10081,1045,1046,'OP_CharTransferCommitReplyMsg',408,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10082,1045,1046,'OP_GetCharacterSerializedRequestM',409,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10083,1045,1046,'OP_GetCharacterSerializedReplyMsg',410,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10084,1045,1046,'OP_CreateCharFromCBBRequestMsg',411,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10085,1045,1046,'OP_CreateCharFromCBBReplyMsg',412,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10086,1045,1046,'OP_HousingDataChangedMsg',413,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10087,1045,1046,'OP_HousingRestoreMsg',414,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10088,1045,1046,'OP_AuctionItem',415,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10089,1045,1046,'OP_AuctionItemReply',416,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10090,1045,1046,'OP_AuctionCoin',417,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10091,1045,1046,'OP_AuctionCoinReply',418,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10092,1045,1046,'OP_AuctionCharacter',419,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10093,1045,1046,'OP_AuctionCharacterReply',420,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10094,1045,1046,'OP_AuctionCommitMsg',421,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10095,1045,1046,'OP_AuctionAbortMsg',422,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10096,1045,1046,'OP_CharTransferValidateRequestMsg',423,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10097,1045,1046,'OP_CharTransferValidateReplyMsg',424,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10098,1045,1046,'OP_RaceRestrictionMsg',425,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10099,1045,1046,'OP_SetInstanceDisplayNameMsg',426,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10100,1045,1046,'OP_GetAuctionAssetIDMsg',427,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10101,1045,1046,'OP_GetAuctionAssetIDReplyMsg',428,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10102,1045,1046,'OP_ResendWorldChannelsMsg',429,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10103,1045,1046,'OP_DisplayExchangeScreenMsg',430,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10104,1045,1046,'OP_ArenaGameTypesMsg',431,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10105,1045,1046,'OP_AuditAuctionEventMsg',433,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10106,1045,1046,'OP_InviteRequestMsg',435,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10107,1045,1046,'OP_InviteResponseMsg',436,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10108,1045,1046,'OP_InviteTargetResponseMsg',437,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10109,1045,1046,'OP_InspectPlayerRequestMsg',438,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10110,1045,1046,'OP_DispatchMsg',439,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10111,1045,1046,'OP_DisplayEventMsg',440,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10112,1045,1046,'OP_PrePossessionMsg',441,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10113,1045,1046,'OP_PostPossessionMsg',442,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10114,1045,1046,'OP_AdventureList',474,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10115,1045,1046,'OP_CancelSpellCast',475,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10116,1045,1046,'OP_AttackAllowed',487,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10117,1045,1046,'OP_AttackNotAllowed',488,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10118,1045,1046,'OP_DressingRoom',494,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10119,1045,1046,'OP_SkillInfoRequest',498,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10120,1045,1046,'OP_SkillInfoResponse',499,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10121,1045,1046,'OP_MapRequest',504,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10122,1045,1046,'OP_EqUnknown',539,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10123,1045,1046,'OP_EqHearChatCmd',541,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10124,1045,1046,'OP_EqDisplayTextCmd',542,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10125,1045,1046,'OP_EqCreateGhostCmd',543,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10126,1045,1046,'OP_EqCreateWidgetCmd',544,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10127,1045,1046,'OP_EqCreateSignWidgetCmd',545,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10128,1045,1046,'OP_EqDestroyGhostCmd',546,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10129,1045,1046,'OP_EqUpdateGhostCmd',547,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10130,1045,1046,'OP_EqSetControlGhostCmd',548,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10131,1045,1046,'OP_EqSetPOVGhostCmd',549,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10132,1045,1046,'OP_EqHearCombatCmd',550,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10133,1045,1046,'OP_EqHearSpellCastCmd',551,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10134,1045,1046,'OP_EqHearSpellInterruptCmd',554,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10135,1045,1046,'OP_EqHearSpellFizzleCmd',555,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10136,1045,1046,'OP_EqHearConsiderCmd',556,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10137,1045,1046,'OP_EqUpdateSubClassesCmd',557,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10138,1045,1046,'OP_EqCreateListBoxCmd',558,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10139,1045,1046,'OP_EqSetDebugPathPointsCmd',559,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10140,1045,1046,'OP_EqCannedEmoteCmd',561,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10141,1045,1046,'OP_EqStateCmd',562,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10142,1045,1046,'OP_EqPlaySoundCmd',563,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10143,1045,1046,'OP_EqPlaySound3DCmd',564,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10144,1045,1046,'OP_EqPlayVoiceCmd',565,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10145,1045,1046,'OP_EqHearDrowningCmd',566,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10146,1045,1046,'OP_EqHearDeathCmd',567,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10147,1045,1046,'OP_EqGroupMemberRemovedCmd',568,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10148,1045,1046,'OP_EqHearChainEffectCmd',569,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10149,1045,1046,'OP_EqReceiveOfferCmd',570,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10150,1045,1046,'OP_EqInspectPCResultsCmd',571,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10151,1045,1046,'OP_EqDrawablePathGraphCmd',572,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10152,1045,1046,'OP_EqDialogOpenCmd',573,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10153,1045,1046,'OP_EqDialogCloseCmd',574,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10154,1045,1046,'OP_EqFactionUpdateCmd',575,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10155,1045,1046,'OP_EqCollectionUpdateCmd',576,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10156,1045,1046,'OP_EqCollectionFilterCmd',577,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10157,1045,1046,'OP_EqCollectionItemCmd',578,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10158,1045,1046,'OP_EqQuestJournalUpdateCmd',579,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10159,1045,1046,'OP_EqQuestJournalReplyCmd',581,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10160,1045,1046,'OP_EqQuestGroupCmd',582,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10161,1045,1046,'OP_EqUpdateMerchantCmd',583,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10162,1045,1046,'OP_EqUpdateStoreCmd',584,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10163,1045,1046,'OP_EqUpdatePlayerTradeCmd',585,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10164,1045,1046,'OP_EqHelpPathCmd',586,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10165,1045,1046,'OP_EqHelpPathClearCmd',587,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10166,1045,1046,'OP_EqUpdateBankCmd',588,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10167,1045,1046,'OP_EqExamineInfoCmd',589,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10168,1045,1046,'OP_EqCloseWindowCmd',590,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10169,1045,1046,'OP_EqUpdateLootCmd',591,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10170,1045,1046,'OP_EqJunctionListCmd',592,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10171,1045,1046,'OP_EqShowDeathWindowCmd',593,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10172,1045,1046,'OP_EqDisplaySpellFailCmd',594,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10173,1045,1046,'OP_EqSpellCastStartCmd',595,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10174,1045,1046,'OP_EqSpellCastEndCmd',596,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10175,1045,1046,'OP_EqResurrectedCmd',597,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10176,1045,1046,'OP_EqChoiceWinCmd',598,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10177,1045,1046,'OP_EqSetDefaultVerbCmd',599,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10178,1045,1046,'OP_EqInstructionWindowCmd',601,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10179,1045,1046,'OP_EqInstructionWindowCloseCmd',602,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10180,1045,1046,'OP_EqInstructionWindowGoalCmd',603,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10181,1045,1046,'OP_EqInstructionWindowTaskCmd',604,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10182,1045,1046,'OP_EqEnableGameEventCmd',605,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10183,1045,1046,'OP_EqShowWindowCmd',606,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10184,1045,1046,'OP_EqEnableWindowCmd',607,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10185,1045,1046,'OP_EqFlashWindowCmd',608,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10186,1045,1046,'OP_EqHearPlayFlavorCmd',609,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10187,1045,1046,'OP_EqUpdateSignWidgetCmd',611,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10188,1045,1046,'OP_EqDebugPVDCmd',612,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10189,1045,1046,'OP_EqShowBookCmd',613,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10190,1045,1046,'OP_EqQuestionnaireCmd',614,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10191,1045,1046,'OP_EqGetProbsCmd',615,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10192,1045,1046,'OP_EqHearHealCmd',616,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10193,1045,1046,'OP_EqChatChannelUpdateCmd',617,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10194,1045,1046,'OP_EqWhoChannelQueryReplyCmd',618,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10195,1045,1046,'OP_EqAvailWorldChannelsCmd',619,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10196,1045,1046,'OP_EqUpdateTargetCmd',620,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10197,1045,1046,'OP_EqConsignmentItemsCmd',622,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10198,1045,1046,'OP_EqStartBrokerCmd',624,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10199,1045,1046,'OP_EqMapExplorationCmd',625,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10200,1045,1046,'OP_EqStoreLogCmd',626,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10201,1045,1046,'OP_EqSpellMoveToRangeAndRetryCmd',627,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10202,1045,1046,'OP_EqUpdatePlayerMailCmd',628,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10203,1045,1046,'OP_EqArenaResultsCmd',629,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10204,1045,1046,'OP_EqGuildBankEventActionCmd',630,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10205,1045,1046,'OP_EqGuildBankExamineInfoCmd',631,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10206,1045,1046,'OP_EqHearSpellNoLandCmd',632,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10207,1045,1046,'OP_Lottery',636,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10208,1045,1046,'OP_GuildRecruitingMemberInfo',637,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10209,1045,1046,'OP_GuildRecruiting',638,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10210,1045,1046,'OP_GuildRecruitingDetails',639,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10211,1045,1046,'OP_GuildRecruitingImage',640,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10212,1045,1046,'OP_PointOfInterest',661,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10213,1045,1046,'OP_TraitsList',663,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10214,1045,1046,'OP_RecipeList',672,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10215,1045,1046,'OP_CharacterAchievements',674,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10216,1045,1046,'OP_AddClientToGroupMsg',1054,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10217,1045,1046,'OP_AddGroupToGroupMsg',1054,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10218,1045,1046,'OP_GuildKickMsg',1054,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10219,1045,1046,'OP_ProcessScriptMsg',1054,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10220,1045,1046,'OP_ProcessWorkspaceMsg',1054,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10221,1045,1046,'OP_PurchaseConsignmentResponseMsg',1054,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10222,1045,1046,'OP_QuickbarAddMsg',1054,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10223,1045,1046,'OP_SkillSlotMapping',1054,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10224,1045,1046,'OP_Unknown',10058,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10225,1045,1046,'OP_WSWeatherUpdateMsg',10059,1); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10716,882,887,'OP_BadLanguageFilter',487,3); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10717,892,894,'OP_BadLanguageFilter',488,5); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10718,898,898,'OP_BadLanguageFilter',488,3); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10719,908,927,'OP_BadLanguageFilter',490,3); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10720,936,939,'OP_BadLanguageFilter',490,3); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10721,942,954,'OP_BadLanguageFilter',490,3); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10722,955,958,'OP_BadLanguageFilter',491,3); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10723,959,959,'OP_BadLanguageFilter',491,3); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10724,972,972,'OP_BadLanguageFilter',492,3); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10725,973,973,'OP_BadLanguageFilter',492,3); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10726,987,987,'OP_BadLanguageFilter',492,3); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10727,996,996,'OP_BadLanguageFilter',494,3); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10728,1008,1011,'OP_BadLanguageFilter',494,3); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10729,1027,1027,'OP_BadLanguageFilter',500,3); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10730,1028,1029,'OP_BadLanguageFilter',501,3); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10731,1032,1032,'OP_BadLanguageFilter',502,3); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10732,1045,1046,'OP_BadLanguageFilter',503,3); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10733,0,0,'OP_BadLanguageFilter',999,4); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10734,839,843,'OP_BadLanguageFilter',999,4); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10735,860,864,'OP_BadLanguageFilter',999,4); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10736,869,877,'OP_BadLanguageFilter',999,4); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10737,0,0,'OP_UpdateTitleCmd',461,6); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10738,839,843,'OP_UpdateTitleCmd',461,6); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10739,860,864,'OP_UpdateTitleCmd',463,6); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10740,869,877,'OP_UpdateTitleCmd',464,6); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10741,882,887,'OP_UpdateTitleCmd',466,6); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10742,892,894,'OP_UpdateTitleCmd',467,7); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10743,898,898,'OP_UpdateTitleCmd',467,6); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10744,908,927,'OP_UpdateTitleCmd',469,6); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10745,936,939,'OP_UpdateTitleCmd',469,6); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10746,942,954,'OP_UpdateTitleCmd',469,6); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10747,955,958,'OP_UpdateTitleCmd',469,6); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10748,959,959,'OP_UpdateTitleCmd',469,6); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10749,972,972,'OP_UpdateTitleCmd',469,6); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10750,973,973,'OP_UpdateTitleCmd',469,6); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10751,987,987,'OP_UpdateTitleCmd',469,6); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10752,996,996,'OP_UpdateTitleCmd',471,6); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10753,1008,1011,'OP_UpdateTitleCmd',471,6); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10754,1027,1027,'OP_UpdateTitleCmd',478,6); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10755,1028,1029,'OP_UpdateTitleCmd',479,6); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10756,1032,1032,'OP_UpdateTitleCmd',480,6); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10757,1045,1046,'OP_UpdateTitleCmd',481,6); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10759,1096,1096,'OP_LoginRequestMsg',0,2); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10760,1096,1096,'OP_LoginByNumRequestMsg',1,2); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10761,1096,1096,'OP_WSLoginRequestMsg',2,2); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10762,1096,1096,'OP_ESLoginRequestMsg',3,2); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10763,1096,1096,'OP_LoginReplyMsg',4,2); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10764,1096,1096,'OP_WSStatusReplyMsg',5,2); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10765,1096,1096,'OP_WorldStatusChangeMsg',6,2); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10766,1096,1096,'OP_AllWSDescRequestMsg',7,2); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10767,1096,1096,'OP_WorldListMsg',8,2); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10768,1096,1096,'OP_AllCharactersDescRequestMsg',9,2); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10769,1096,1096,'OP_AllCharactersDescReplyMsg',10,2); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10770,1096,1096,'OP_CreateCharacterRequestMsg',11,2); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10771,1096,1096,'OP_CreateCharacterReplyMsg',12,2); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10772,1096,1096,'OP_WSCreateCharacterRequestMsg',13,2); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10773,1096,1096,'OP_WSCreateCharacterReplyMsg',14,2); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10774,1096,1096,'OP_ReskinCharacterRequestMsg',15,2); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10775,1096,1096,'OP_DeleteCharacterRequestMsg',16,2); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10776,1096,1096,'OP_DeleteCharacterReplyMsg',17,2); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10777,1096,1096,'OP_PlayCharacterRequestMsg',18,2); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10778,1096,1096,'OP_PlayCharacterReplyMsg',19,2); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10779,1096,1096,'OP_ExpectClientAsCharacterReplyMs',22,2); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10780,1096,1096,'OP_ServerPlayCharacterRequestMsg',23,2); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10781,1096,1096,'OP_ServerPlayCharacterReplyMsg',24,2); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10782,1096,1096,'OP_ESInitMsg',25,2); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10783,1096,1096,'OP_ESReadyForClientsMsg',26,2); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10784,1096,1096,'OP_CreateZoneInstanceMsg',27,2); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10785,1096,1096,'OP_ZoneInstanceCreateReplyMsg',28,2); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10786,1096,1096,'OP_ZoneInstanceDestroyedMsg',29,2); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10787,1096,1096,'OP_ExpectClientAsCharacterRequest',30,2); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10788,1096,1096,'OP_ZoneInfoMsg',32,8); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10789,1096,1096,'OP_DoneLoadingZoneResourcesMsg',33,8); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10790,1096,1096,'OP_DoneSendingInitialEntitiesMsg',34,8); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10791,1096,1096,'OP_DoneLoadingEntityResourcesMsg',35,8); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10792,1096,1096,'OP_PredictionUpdateMsg',36,8); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10793,1096,1096,'OP_UpdatePositionMsg',38,2); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10794,1096,1096,'OP_SetRemoteCmdsMsg',40,2); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10795,1096,1096,'OP_RemoteCmdMsg',41,2); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10796,1096,1096,'OP_GameWorldTimeMsg',42,2); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10797,1096,1096,'OP_MOTDMsg',43,2); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10798,1096,1096,'OP_ZoneMOTDMsg',44,2); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10799,1096,1096,'OP_AvatarCreatedMsg',45,2); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10800,1096,1096,'OP_AvatarDestroyedMsg',46,2); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10801,1096,1096,'OP_RequestCampMsg',48,2); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10802,1096,1096,'OP_CampStartedMsg',49,2); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10803,1096,1096,'OP_CampAbortedMsg',50,2); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10804,1096,1096,'OP_WhoQueryRequestMsg',51,2); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10805,1096,1096,'OP_WhoQueryReplyMsg',52,2); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10806,1096,1096,'OP_MonitorReplyMsg',53,2); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10807,1096,1096,'OP_MonitorCharacterListMsg',54,2); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10808,1096,1096,'OP_MonitorCharacterListRequestMsg',55,2); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10809,1096,1096,'OP_ClientCmdMsg',56,2); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10810,1096,1096,'OP_DispatchESMsg',57,2); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10811,1096,1096,'OP_DispatchClientCmdMsg',58,2); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10812,1096,1096,'OP_UpdateTargetMsg',59,2); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10813,1096,1096,'OP_UpdateTargetLocMsg',60,2); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10814,1096,1096,'OP_UpdateCharacterSheetMsg',61,2); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10815,1096,1096,'OP_UpdateSpellBookMsg',62,2); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10816,1096,1096,'OP_UpdateInventoryMsg',64,2); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10817,1096,1096,'OP_UpdateRecipeBookMsg',66,2); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10818,1096,1096,'OP_RequestRecipeDetailsMsg',67,2); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10819,1096,1096,'OP_RecipeDetailsMsg',68,2); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10820,1096,1096,'OP_UpdateSkillBookMsg',69,2); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10821,1096,1096,'OP_UpdateSkillsMsg',70,2); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10822,1096,1096,'OP_UpdateOpportunityMsg',71,2); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10823,1096,1096,'OP_ChangeZoneMsg',73,2); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10824,1096,1096,'OP_ClientTeleportRequestMsg',74,2); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10825,1096,1096,'OP_TeleportWithinZoneMsg',75,2); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10826,1096,1096,'OP_TeleportWithinZoneNoReloadMsg',76,2); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10827,1096,1096,'OP_MigrateClientToZoneRequestMsg',77,2); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10828,1096,1096,'OP_MigrateClientToZoneReplyMsg',78,2); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10829,1096,1096,'OP_ReadyToZoneMsg',80,8); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10830,1096,1096,'OP_RemoveClientFromGroupMsg',81,8); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10831,1096,1096,'OP_RemoveGroupFromGroupMsg',82,8); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10832,1096,1096,'OP_MakeGroupLeaderMsg',83,8); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10833,1096,1096,'OP_GroupCreatedMsg',84,8); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10834,1096,1096,'OP_GroupDestroyedMsg',85,8); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10835,1096,1096,'OP_GroupMemberAddedMsg',86,8); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10836,1096,1096,'OP_GroupMemberRemovedMsg',87,8); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10837,1096,1096,'OP_GroupRemovedFromGroupMsg',88,8); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10838,1096,1096,'OP_GroupLeaderChangedMsg',89,8); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10839,1096,1096,'OP_GroupResendOOZDataMsg',90,8); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10840,1096,1096,'OP_GroupSettingsChangedMsg',91,8); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10841,1096,1096,'OP_OutOfZoneMemberDataMsg',92,8); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10842,1096,1096,'OP_SendLatestRequestMsg',93,8); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10843,1096,1096,'OP_ClearDataMsg',94,8); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10844,1096,1096,'OP_SetSocialMsg',95,8); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10845,1096,1096,'OP_ESStatusMsg',96,8); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10846,1096,1096,'OP_ESZoneInstanceStatusMsg',97,8); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10847,1096,1096,'OP_ZonesStatusRequestMsg',98,8); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10848,1096,1096,'OP_ZonesStatusMsg',99,8); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10849,1096,1096,'OP_ESWeatherRequestMsg',100,8); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10850,1096,1096,'OP_ESWeatherRequestEndMsg',101,8); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10851,1096,1096,'OP_DialogSelectMsg',102,8); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10852,1096,1096,'OP_DialogCloseMsg',103,8); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10853,1096,1096,'OP_RemoveSpellEffectMsg',104,8); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10854,1096,1096,'OP_RemoveConcentrationMsg',105,8); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10855,1096,1096,'OP_QuestJournalOpenMsg',106,8); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10856,1096,1096,'OP_QuestJournalInspectMsg',107,8); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10857,1096,1096,'OP_QuestJournalSetVisibleMsg',108,8); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10858,1096,1096,'OP_QuestJournalWaypointMsg',109,8); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10859,1096,1096,'OP_CreateGuildRequestMsg',110,8); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10860,1096,1096,'OP_CreateGuildReplyMsg',111,8); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10861,1096,1096,'OP_GuildsayMsg',112,8); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10862,1096,1096,'OP_FellowshipExpMsg',118,2); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10863,1096,1096,'OP_DeleteGuildMsg',119,2); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10864,1096,1096,'OP_GuildUpdateMsg',120,2); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10865,1096,1096,'OP_ConsignmentCloseStoreMsg',121,2); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10866,1096,1096,'OP_ConsignItemRequestMsg',122,2); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10867,1096,1096,'OP_ConsignItemResponseMsg',123,2); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10868,1096,1096,'OP_PurchaseConsignmentRequestMsg',124,2); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10869,1096,1096,'OP_HouseDeletedRemotelyMsg',125,2); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10870,1096,1096,'OP_UpdateHouseDataMsg',126,2); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10871,1096,1096,'OP_UpdateHouseAccessDataMsg',127,2); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10872,1096,1096,'OP_PlayerHouseBaseScreenMsg',128,2); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10873,1096,1096,'OP_PlayerHousePurchaseScreenMsg',129,2); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10874,1096,1096,'OP_PlayerHouseAccessUpdateMsg',130,2); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10875,1096,1096,'OP_PlayerHouseDisplayStatusMsg',131,2); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10876,1096,1096,'OP_PlayerHouseCloseUIMsg',132,2); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10877,1096,1096,'OP_BuyPlayerHouseMsg',133,2); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10878,1096,1096,'OP_BuyPlayerHouseTintMsg',134,2); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10879,1096,1096,'OP_CollectAllHouseItemsMsg',135,2); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10880,1096,1096,'OP_RelinquishHouseMsg',136,2); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10881,1096,1096,'OP_EnterHouseMsg',137,2); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10882,1096,1096,'OP_ExitHouseMsg',138,2); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10883,1096,1096,'OP_HouseDefaultAccessSetMsg',139,2); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10884,1096,1096,'OP_HouseAccessSetMsg',140,2); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10885,1096,1096,'OP_HouseAccessRemoveMsg',141,2); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10886,1096,1096,'OP_PayHouseUpkeepMsg',142,2); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10887,1096,1096,'OP_MoveableObjectPlacementCriteri',144,2); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10888,1096,1096,'OP_EnterMoveObjectModeMsg',145,2); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10889,1096,1096,'OP_PositionMoveableObject',146,2); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10890,1096,1096,'OP_CancelMoveObjectModeMsg',147,2); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10891,1096,1096,'OP_ShaderCustomizationMsg',148,2); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10892,1096,1096,'OP_ReplaceableSubMeshesMsg',149,2); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10893,1096,1096,'OP_HouseCustomizationScreenMsg',150,2); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10894,1096,1096,'OP_CustomizationPurchaseRequestMs',151,2); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10895,1096,1096,'OP_CustomizationSetRequestMsg',152,2); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10896,1096,1096,'OP_CustomizationReplyMsg',153,2); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10897,1096,1096,'OP_TintWidgetsMsg',154,2); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10898,1096,1096,'OP_ExamineConsignmentRequestMsg',155,2); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10899,1096,1096,'OP_ExamineConsignmentResponseMsg',156,2); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10900,1096,1096,'OP_UISettingsResponseMsg',157,2); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10901,1096,1096,'OP_UIResetMsg',159,2); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10902,1096,1096,'OP_KeymapLoadMsg',160,2); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10903,1096,1096,'OP_KeymapNoneMsg',161,2); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10904,1096,1096,'OP_KeymapDataMsg',162,2); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10905,1096,1096,'OP_KeymapSaveMsg',163,2); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10906,1096,1096,'OP_DispatchSpellCmdMsg',164,2); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10907,1096,1096,'OP_EntityVerbsRequestMsg',166,2); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10908,1096,1096,'OP_EntityVerbsReplyMsg',167,2); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10909,1096,1096,'OP_EntityVerbsVerbMsg',168,2); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10910,1096,1096,'OP_ChatRelationshipUpdateMsg',170,2); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10911,1096,1096,'OP_LootItemsRequestMsg',171,2); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10912,1096,1096,'OP_StoppedLootingMsg',172,2); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10913,1096,1096,'OP_SitMsg',173,2); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10914,1096,1096,'OP_StandMsg',174,2); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10915,1096,1096,'OP_SatMsg',175,2); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10916,1096,1096,'OP_StoodMsg',176,2); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10917,1096,1096,'OP_ClearForTakeOffMsg',177,2); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10918,1096,1096,'OP_ReadyForTakeOffMsg',178,2); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10919,1096,1096,'OP_ShowIllusionsMsg',179,2); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10920,1096,1096,'OP_HideIllusionsMsg',180,2); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10921,1096,1096,'OP_ExamineItemRequestMsg',181,2); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10922,1096,1096,'OP_ReadBookPageMsg',182,2); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10923,1096,1096,'OP_DefaultGroupOptionsRequestMsg',183,2); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10924,1096,1096,'OP_DefaultGroupOptionsMsg',184,2); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10925,1096,1096,'OP_GroupOptionsMsg',185,2); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10926,1096,1096,'OP_DisplayGroupOptionsScreenMsg',186,2); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10927,1096,1096,'OP_DisplayInnVisitScreenMsg',187,2); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10928,1096,1096,'OP_DumpSchedulerMsg',188,2); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10929,1096,1096,'OP_LSRequestPlayerDescMsg',189,2); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10930,1096,1096,'OP_LSCheckAcctLockMsg',190,2); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10931,1096,1096,'OP_WSAcctLockStatusMsg',191,2); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10932,1096,1096,'OP_RequestHelpRepathMsg',192,2); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10933,1096,1096,'OP_RequestTargetLocMsg',193,2); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10934,1096,1096,'OP_UpdateMotdMsg',194,2); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10935,1096,1096,'OP_PerformPlayerKnockbackMsg',195,2); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10936,1096,1096,'OP_PerformCameraShakeMsg',196,2); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10937,1096,1096,'OP_PopulateSkillMapsMsg',199,2); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10938,1096,1096,'OP_CancelledFeignMsg',201,2); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10939,1096,1096,'OP_SignalMsg',202,2); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10940,1096,1096,'OP_ShowCreateFromRecipeUIMsg',203,2); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10941,1096,1096,'OP_CancelCreateFromRecipeMsg',204,2); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10942,1096,1096,'OP_BeginItemCreationMsg',205,2); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10943,1096,1096,'OP_StopItemCreationMsg',206,2); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10944,1096,1096,'OP_ShowItemCreationProcessUIMsg',207,2); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10945,1096,1096,'OP_UpdateItemCreationProcessUIMsg',208,2); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10946,1096,1096,'OP_DisplayTSEventReactionMsg',209,2); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10947,1096,1096,'OP_ShowRecipeBookMsg',210,2); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10948,1096,1096,'OP_KnowledgebaseRequestMsg',211,2); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10949,1096,1096,'OP_KnowledgebaseResponseMsg',212,2); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10950,1096,1096,'OP_CSTicketHeaderRequestMsg',213,2); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10951,1096,1096,'OP_CSTicketInfoMsg',214,2); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10952,1096,1096,'OP_CSTicketCommentRequestMsg',215,2); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10953,1096,1096,'OP_CSTicketCommentResponseMsg',216,2); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10954,1096,1096,'OP_CSTicketCreateMsg',217,2); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10955,1096,1096,'OP_CSTicketAddCommentMsg',218,2); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10956,1096,1096,'OP_CSTicketDeleteMsg',219,2); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10957,1096,1096,'OP_CSTicketChangeNotificationMsg',220,2); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10958,1096,1096,'OP_WorldDataUpdateMsg',221,2); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10959,1096,1096,'OP_KnownLanguagesMsg',222,2); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10960,1096,1096,'OP_LsRequestClientCrashLogMsg',223,2); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10961,1096,1096,'OP_LsClientBaselogReplyMsg',224,2); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10962,1096,1096,'OP_LsClientCrashlogReplyMsg',225,2); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10963,1096,1096,'OP_LsClientAlertlogReplyMsg',226,2); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10964,1096,1096,'OP_LsClientVerifylogReplyMsg',227,2); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10965,1096,1096,'OP_ClientTeleportToLocationMsg',228,2); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10966,1096,1096,'OP_UpdateClientPredFlagsMsg',229,2); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10967,1096,1096,'OP_ChangeServerControlFlagMsg',230,2); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10968,1096,1096,'OP_CSToolsRequestMsg',231,2); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10969,1096,1096,'OP_CSToolsResponseMsg',232,2); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10970,1096,1096,'OP_AddSocialStructureStandingMsg',233,2); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10971,1096,1096,'OP_CreateBoatTransportsMsg',234,2); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10972,1096,1096,'OP_PositionBoatTransportMsg',235,2); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10973,1096,1096,'OP_MigrateBoatTransportMsg',236,2); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10974,1096,1096,'OP_MigrateBoatTransportReplyMsg',237,2); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10975,1096,1096,'OP_DisplayDebugNLLPointsMsg',238,2); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10976,1096,1096,'OP_ExamineInfoRequestMsg',239,2); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10977,1096,1096,'OP_QuickbarInitMsg',240,2); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10978,1096,1096,'OP_QuickbarUpdateMsg',241,2); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10979,1096,1096,'OP_MacroInitMsg',242,2); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10980,1096,1096,'OP_MacroUpdateMsg',243,2); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10981,1096,1096,'OP_QuestionnaireMsg',244,2); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10982,1096,1096,'OP_LevelChangedMsg',245,2); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10983,1096,1096,'OP_SpellGainedMsg',246,2); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10984,1096,1096,'OP_EncounterBrokenMsg',247,2); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10985,1096,1096,'OP_OnscreenMsgMsg',248,2); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10986,1096,1096,'OP_DisplayWarningMsg',249,2); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10987,1096,1096,'OP_ModifyGuildMsg',250,2); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10988,1096,1096,'OP_GuildEventMsg',251,2); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10989,1096,1096,'OP_GuildEventAddMsg',252,2); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10990,1096,1096,'OP_GuildEventActionMsg',253,2); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10991,1096,1096,'OP_GuildEventListMsg',254,2); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10992,1096,1096,'OP_RequestGuildEventDetailsMsg',255,2); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10993,1096,1096,'OP_GuildEventDetailsMsg',256,2); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10994,1096,1096,'OP_RequestGuildInfoMsg',257,2); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10995,1096,1096,'OP_GuildBankActionMsg',258,2); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10996,1096,1096,'OP_GuildBankActionResponseMsg',259,2); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10997,1096,1096,'OP_GuildBankItemDetailsRequestMsg',260,2); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10998,1096,1096,'OP_GuildBankItemDetailsResponseMs',261,2); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (10999,1096,1096,'OP_GuildBankUpdateMsg',262,2); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (11000,1096,1096,'OP_GuildBankEventListMsg',263,2); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (11001,1096,1096,'OP_RequestGuildBankEventDetailsMs',264,2); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (11002,1096,1096,'OP_RewardPackMsg',265,2); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (11003,1096,1096,'OP_RenameGuildMsg',266,2); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (11004,1096,1096,'OP_ZoneToFriendRequestMsg',268,2); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (11005,1096,1096,'OP_ZoneToFriendReplyMsg',269,2); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (11006,1096,1096,'OP_ChatCreateChannelMsg',270,2); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (11007,1096,1096,'OP_ChatJoinChannelMsg',271,2); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (11008,1096,1096,'OP_ChatWhoChannelMsg',272,2); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (11009,1096,1096,'OP_ChatLeaveChannelMsg',273,2); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (11010,1096,1096,'OP_ChatTellChannelMsg',274,2); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (11011,1096,1096,'OP_ChatTellUserMsg',275,2); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (11012,1096,1096,'OP_ChatToggleFriendMsg',276,2); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (11013,1096,1096,'OP_ChatToggleIgnoreMsg',277,2); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (11014,1096,1096,'OP_ChatSendFriendsMsg',278,2); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (11015,1096,1096,'OP_ChatSendIgnoresMsg',279,2); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (11016,1096,1096,'OP_QuestReward',304,2); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (11017,1096,1096,'OP_ChatFiltersMsg',319,2); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (11018,1096,1096,'OP_MailGetHeadersMsg',320,2); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (11019,1096,1096,'OP_MailGetMessageMsg',321,2); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (11020,1096,1096,'OP_MailSendMessageMsg',322,2); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (11021,1096,1096,'OP_MailDeleteMessageMsg',323,2); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (11022,1096,1096,'OP_MailGetHeadersReplyMsg',324,2); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (11023,1096,1096,'OP_MailGetMessageReplyMsg',325,2); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (11024,1096,1096,'OP_MailSendMessageReplyMsg',326,2); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (11025,1096,1096,'OP_MailCommitSendMessageMsg',327,2); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (11026,1096,1096,'OP_MailSendSystemMessageMsg',328,2); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (11027,1096,1096,'OP_MailRemoveAttachFromMailMsg',329,2); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (11028,1096,1096,'OP_WaypointRequestMsg',331,2); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (11029,1096,1096,'OP_WaypointReplyMsg',332,2); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (11030,1096,1096,'OP_WaypointSelectMsg',333,2); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (11031,1096,1096,'OP_WaypointUpdateMsg',334,2); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (11032,1096,1096,'OP_CharNameChangedMsg',335,2); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (11033,1096,1096,'OP_ShowZoneTeleporterDestinations',336,2); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (11034,1096,1096,'OP_SelectZoneTeleporterDestinatio',337,2); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (11035,1096,1096,'OP_ReloadLocalizedTxtMsg',338,2); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (11036,1096,1096,'OP_RequestGuildMembershipMsg',339,2); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (11037,1096,1096,'OP_GuildMembershipResponseMsg',340,2); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (11038,1096,1096,'OP_LeaveGuildNotifyMsg',341,2); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (11039,1096,1096,'OP_JoinGuildNotifyMsg',342,2); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (11040,1096,1096,'OP_AvatarUpdateMsg',343,2); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (11041,1096,1096,'OP_BioUpdateMsg',344,2); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (11042,1096,1096,'OP_InspectPlayerMsg',345,2); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (11043,1096,1096,'OP_WSServerLockMsg',346,2); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (11044,1096,1096,'OP_LSServerLockMsg',347,2); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (11045,1096,1096,'OP_WSServerHideMsg',348,2); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (11046,1096,1096,'OP_CsCategoryRequestMsg',349,2); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (11047,1096,1096,'OP_CsCategoryResponseMsg',350,2); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (11048,1096,1096,'OP_KnowledgeWindowSlotMappingMsg',351,2); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (11049,1096,1096,'OP_LFGUpdateMsg',352,2); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (11050,1096,1096,'OP_AFKUpdateMsg',353,2); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (11051,1096,1096,'OP_AnonUpdateMsg',354,2); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (11052,1096,1096,'OP_UpdateActivePublicZonesMsg',355,2); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (11053,1096,1096,'OP_UnknownNpcMsg',356,2); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (11054,1096,1096,'OP_PromoFlagsDetailsMsg',357,2); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (11055,1096,1096,'OP_ConsignViewCreateMsg',358,2); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (11056,1096,1096,'OP_ConsignViewGetPageMsg',359,2); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (11057,1096,1096,'OP_ConsignViewReleaseMsg',360,2); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (11058,1096,1096,'OP_ConsignRemoveItemsMsg',361,2); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (11059,1096,1096,'OP_UpdateDebugRadiiMsg',362,2); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (11060,1096,1096,'OP_SnoopMsg',363,2); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (11061,1096,1096,'OP_ReportMsg',364,2); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (11062,1096,1096,'OP_UpdateRaidMsg',365,2); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (11063,1096,1096,'OP_ConsignViewSortMsg',366,2); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (11064,1096,1096,'OP_TitleUpdateMsg',367,2); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (11065,1096,1096,'OP_ClientFellMsg',368,2); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (11066,1096,1096,'OP_ClientInDeathRegionMsg',369,2); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (11067,1096,1096,'OP_CampClientMsg',370,2); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (11068,1096,1096,'OP_CSToolAccessResponseMsg',371,2); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (11069,1096,1096,'OP_TrackingUpdateMsg',372,2); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (11070,1096,1096,'OP_BeginTrackingMsg',373,2); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (11071,1096,1096,'OP_StopTrackingMsg',374,2); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (11072,1096,1096,'OP_GetAvatarAccessRequestForCSToo',375,2); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (11073,1096,1096,'OP_AdvancementRequestMsg',376,2); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (11074,1096,1096,'OP_UpdateAvgFrameTimeMsg',377,2); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (11075,1096,1096,'OP_MapFogDataInitMsg',378,2); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (11076,1096,1096,'OP_MapFogDataUpdateMsg',379,2); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (11077,1096,1096,'OP_CloseGroupInviteWindowMsg',380,2); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (11078,1096,1096,'OP_UpdateGroupMemberDataMsg',381,2); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (11079,1096,1096,'OP_WorldPingMsg',382,2); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (11080,1096,1096,'OP_MoveLogUpdateMsg',383,2); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (11081,1096,1096,'OP_OfferQuestMsg',384,2); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (11082,1096,1096,'OP_WorldShutdownUpdateMsg',385,2); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (11083,1096,1096,'OP_DisplayMailScreenMsg',386,2); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (11084,1096,1096,'OP_ClientIdleBeginMsg',387,2); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (11085,1096,1096,'OP_ClientIdleEndMsg',388,2); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (11086,1096,1096,'OP_PurchaseConsignmentLoreCheckRe',389,2); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (11087,1096,1096,'OP_NotifyApprenticeStoppedMentori',390,2); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (11088,1096,1096,'OP_CorruptedClientMsg',391,2); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (11089,1096,1096,'OP_WorldDataChangeMsg',392,2); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (11090,1096,1096,'OP_MailEventNotificationMsg',393,2); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (11091,1096,1096,'OP_RestartZoneMsg',394,2); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (11092,1096,1096,'OP_FlightPathsMsg',395,2); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (11093,1096,1096,'OP_CharacterLinkdeadMsg',396,2); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (11094,1096,1096,'OP_CharTransferStartRequestMsg',397,2); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (11095,1096,1096,'OP_CharTransferStartReplyMsg',398,2); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (11096,1096,1096,'OP_CharTransferRequestMsg',399,2); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (11097,1096,1096,'OP_CharTransferReplyMsg',400,2); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (11098,1096,1096,'OP_CharTransferRollbackRequestMsg',401,2); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (11099,1096,1096,'OP_CharTransferCommitRequestMsg',402,2); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (11100,1096,1096,'OP_CharTransferRollbackReplyMsg',403,2); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (11101,1096,1096,'OP_CharTransferCommitReplyMsg',404,2); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (11102,1096,1096,'OP_GetCharacterSerializedRequestM',405,2); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (11103,1096,1096,'OP_GetCharacterSerializedReplyMsg',406,2); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (11104,1096,1096,'OP_CreateCharFromCBBRequestMsg',407,2); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (11105,1096,1096,'OP_CreateCharFromCBBReplyMsg',408,2); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (11106,1096,1096,'OP_HousingDataChangedMsg',409,2); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (11107,1096,1096,'OP_HousingRestoreMsg',410,2); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (11108,1096,1096,'OP_AuctionItem',411,2); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (11109,1096,1096,'OP_AuctionItemReply',412,2); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (11110,1096,1096,'OP_AuctionCoin',413,2); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (11111,1096,1096,'OP_AuctionCoinReply',414,2); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (11112,1096,1096,'OP_AuctionCharacter',415,2); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (11113,1096,1096,'OP_AuctionCharacterReply',416,2); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (11114,1096,1096,'OP_AuctionCommitMsg',417,2); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (11115,1096,1096,'OP_AuctionAbortMsg',418,2); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (11116,1096,1096,'OP_CharTransferValidateRequestMsg',419,2); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (11117,1096,1096,'OP_CharTransferValidateReplyMsg',420,2); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (11118,1096,1096,'OP_RaceRestrictionMsg',421,2); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (11119,1096,1096,'OP_SetInstanceDisplayNameMsg',422,2); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (11120,1096,1096,'OP_GetAuctionAssetIDMsg',423,2); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (11121,1096,1096,'OP_GetAuctionAssetIDReplyMsg',424,2); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (11122,1096,1096,'OP_ResendWorldChannelsMsg',425,2); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (11123,1096,1096,'OP_DisplayExchangeScreenMsg',426,2); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (11124,1096,1096,'OP_ArenaGameTypesMsg',428,2); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (11125,1096,1096,'OP_AuditAuctionEventMsg',429,2); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (11126,1096,1096,'OP_InviteRequestMsg',431,2); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (11127,1096,1096,'OP_InviteResponseMsg',432,2); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (11128,1096,1096,'OP_InviteTargetResponseMsg',433,2); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (11129,1096,1096,'OP_InspectPlayerRequestMsg',434,2); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (11130,1096,1096,'OP_DispatchMsg',435,2); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (11131,1096,1096,'OP_DisplayEventMsg',436,2); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (11132,1096,1096,'OP_PrePossessionMsg',437,2); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (11133,1096,1096,'OP_PostPossessionMsg',438,2); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (11134,1096,1096,'OP_AdventureList',470,2); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (11135,1096,1096,'OP_CancelSpellCast',471,2); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (11136,1096,1096,'OP_AttackAllowed',483,2); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (11137,1096,1096,'OP_AttackNotAllowed',484,2); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (11138,1096,1096,'OP_DressingRoom',490,2); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (11139,1096,1096,'OP_SkillInfoRequest',496,2); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (11140,1096,1096,'OP_SkillInfoResponse',497,2); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (11141,1096,1096,'OP_BadLanguageFilter',501,2); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (11142,1096,1096,'OP_MapRequest',502,2); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (11143,1096,1096,'OP_Unknown',509,2); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (11144,1096,1096,'OP_EqUnknown',541,2); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (11145,1096,1096,'OP_EqHearChatCmd',543,2); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (11146,1096,1096,'OP_EqDisplayTextCmd',544,2); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (11147,1096,1096,'OP_EqCreateGhostCmd',545,2); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (11148,1096,1096,'OP_EqCreateWidgetCmd',546,2); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (11149,1096,1096,'OP_EqCreateSignWidgetCmd',547,2); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (11150,1096,1096,'OP_EqDestroyGhostCmd',548,2); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (11151,1096,1096,'OP_EqUpdateGhostCmd',549,2); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (11152,1096,1096,'OP_EqSetControlGhostCmd',550,2); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (11153,1096,1096,'OP_EqSetPOVGhostCmd',551,2); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (11154,1096,1096,'OP_EqHearCombatCmd',552,2); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (11155,1096,1096,'OP_EqHearSpellCastCmd',553,2); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (11156,1096,1096,'OP_EqHearSpellInterruptCmd',556,2); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (11157,1096,1096,'OP_EqHearSpellFizzleCmd',557,2); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (11158,1096,1096,'OP_EqHearConsiderCmd',558,2); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (11159,1096,1096,'OP_EqUpdateSubClassesCmd',559,2); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (11160,1096,1096,'OP_EqCreateListBoxCmd',560,2); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (11161,1096,1096,'OP_EqSetDebugPathPointsCmd',561,2); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (11162,1096,1096,'OP_EqCannedEmoteCmd',563,2); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (11163,1096,1096,'OP_EqStateCmd',564,2); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (11164,1096,1096,'OP_EqPlaySoundCmd',565,2); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (11165,1096,1096,'OP_EqPlaySound3DCmd',566,2); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (11166,1096,1096,'OP_EqPlayVoiceCmd',567,2); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (11167,1096,1096,'OP_EqHearDrowningCmd',568,2); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (11168,1096,1096,'OP_EqHearDeathCmd',569,2); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (11169,1096,1096,'OP_EqGroupMemberRemovedCmd',570,2); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (11170,1096,1096,'OP_EqHearChainEffectCmd',571,2); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (11171,1096,1096,'OP_EqReceiveOfferCmd',572,2); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (11172,1096,1096,'OP_EqInspectPCResultsCmd',573,2); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (11173,1096,1096,'OP_EqDrawablePathGraphCmd',574,2); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (11174,1096,1096,'OP_EqDialogOpenCmd',575,2); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (11175,1096,1096,'OP_EqDialogCloseCmd',576,2); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (11176,1096,1096,'OP_EqFactionUpdateCmd',577,2); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (11177,1096,1096,'OP_EqCollectionUpdateCmd',578,2); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (11178,1096,1096,'OP_EqCollectionFilterCmd',579,2); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (11179,1096,1096,'OP_EqCollectionItemCmd',580,2); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (11180,1096,1096,'OP_EqQuestJournalUpdateCmd',581,2); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (11181,1096,1096,'OP_EqQuestJournalReplyCmd',583,2); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (11182,1096,1096,'OP_EqQuestGroupCmd',584,2); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (11183,1096,1096,'OP_EqUpdateMerchantCmd',585,2); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (11184,1096,1096,'OP_EqUpdateStoreCmd',586,2); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (11185,1096,1096,'OP_EqUpdatePlayerTradeCmd',587,2); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (11186,1096,1096,'OP_EqHelpPathCmd',588,2); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (11187,1096,1096,'OP_EqHelpPathClearCmd',589,2); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (11188,1096,1096,'OP_EqUpdateBankCmd',590,2); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (11189,1096,1096,'OP_EqExamineInfoCmd',591,2); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (11190,1096,1096,'OP_EqCloseWindowCmd',592,2); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (11191,1096,1096,'OP_EqUpdateLootCmd',593,2); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (11192,1096,1096,'OP_EqJunctionListCmd',594,2); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (11193,1096,1096,'OP_EqShowDeathWindowCmd',595,2); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (11194,1096,1096,'OP_EqDisplaySpellFailCmd',596,2); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (11195,1096,1096,'OP_EqSpellCastStartCmd',597,2); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (11196,1096,1096,'OP_EqSpellCastEndCmd',598,2); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (11197,1096,1096,'OP_EqResurrectedCmd',599,2); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (11198,1096,1096,'OP_EqChoiceWinCmd',600,2); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (11199,1096,1096,'OP_EqSetDefaultVerbCmd',601,2); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (11200,1096,1096,'OP_EqInstructionWindowCmd',603,2); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (11201,1096,1096,'OP_EqInstructionWindowCloseCmd',604,2); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (11202,1096,1096,'OP_EqInstructionWindowGoalCmd',605,2); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (11203,1096,1096,'OP_EqInstructionWindowTaskCmd',606,2); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (11204,1096,1096,'OP_EqEnableGameEventCmd',607,2); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (11205,1096,1096,'OP_EqShowWindowCmd',608,2); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (11206,1096,1096,'OP_EqEnableWindowCmd',609,2); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (11207,1096,1096,'OP_EqFlashWindowCmd',610,2); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (11208,1096,1096,'OP_EqHearPlayFlavorCmd',611,2); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (11209,1096,1096,'OP_EqUpdateSignWidgetCmd',613,2); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (11210,1096,1096,'OP_EqDebugPVDCmd',614,2); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (11211,1096,1096,'OP_EqShowBookCmd',615,2); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (11212,1096,1096,'OP_EqQuestionnaireCmd',616,2); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (11213,1096,1096,'OP_EqGetProbsCmd',617,2); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (11214,1096,1096,'OP_EqHearHealCmd',618,2); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (11215,1096,1096,'OP_EqChatChannelUpdateCmd',619,2); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (11216,1096,1096,'OP_EqWhoChannelQueryReplyCmd',620,2); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (11217,1096,1096,'OP_EqAvailWorldChannelsCmd',621,2); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (11218,1096,1096,'OP_EqUpdateTargetCmd',622,2); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (11219,1096,1096,'OP_EqConsignmentItemsCmd',624,2); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (11220,1096,1096,'OP_EqStartBrokerCmd',626,2); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (11221,1096,1096,'OP_EqMapExplorationCmd',627,2); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (11222,1096,1096,'OP_EqStoreLogCmd',628,2); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (11223,1096,1096,'OP_EqSpellMoveToRangeAndRetryCmd',629,2); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (11224,1096,1096,'OP_EqUpdatePlayerMailCmd',630,2); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (11225,1096,1096,'OP_EqArenaResultsCmd',631,2); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (11226,1096,1096,'OP_EqGuildBankEventActionCmd',632,2); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (11227,1096,1096,'OP_EqGuildBankExamineInfoCmd',633,2); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (11228,1096,1096,'OP_EqHearSpellNoLandCmd',634,2); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (11229,1096,1096,'OP_GuildList',637,2); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (11230,1096,1096,'OP_Lottery',638,2); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (11231,1096,1096,'OP_GuildRecruitingMemberInfo',639,2); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (11232,1096,1096,'OP_GuildRecruiting',640,2); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (11233,1096,1096,'OP_GuildRecruitingDetails',641,2); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (11234,1096,1096,'OP_GuildRecruitingImage',642,2); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (11235,1096,1096,'OP_TradeskillList',659,2); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (11236,1096,1096,'OP_PointOfInterest',663,2); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (11237,1096,1096,'OP_TraitsList',665,2); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (11238,1096,1096,'OP_RecipeList',674,2); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (11239,1096,1096,'OP_CharacterAchievements',677,2); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (11240,1096,1096,'OP_AddClientToGroupMsg',999,2); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (11241,1096,1096,'OP_AddGroupToGroupMsg',1000,2); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (11242,1096,1096,'OP_WSWeatherUpdateMsg',1001,2); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (11243,1096,1096,'OP_SkillSlotMapping',1002,2); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (11244,1096,1096,'OP_GuildKickMsg',1003,2); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (11245,1096,1096,'OP_PurchaseConsignmentResponseMsg',1004,2); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (11246,1096,1096,'OP_ProcessScriptMsg',1005,2); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (11247,1096,1096,'OP_ProcessWorkspaceMsg',1006,2); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (11248,1096,1096,'OP_QuickbarAddMsg',1007,2); +insert into `opcodes`(`id`,`version_range1`,`version_range2`,`name`,`opcode`,`table_data_version`) values (11249,1096,1096,'OP_UpdateTitleCmd',479,9); + +/*!40101 SET SQL_MODE=@OLD_SQL_MODE */; +/*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */; +/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */; diff --git a/EQ2/docs/pull type chance.html b/EQ2/docs/pull type chance.html new file mode 100644 index 000000000..9562abbc3 --- /dev/null +++ b/EQ2/docs/pull type chance.html @@ -0,0 +1,175 @@ +Extending Pull Type + + + + + + + +

Extending Pull Type

+ + diff --git a/EQ2/source/LUA/include/lauxlib.h b/EQ2/source/LUA/include/lauxlib.h new file mode 100644 index 000000000..34258235d --- /dev/null +++ b/EQ2/source/LUA/include/lauxlib.h @@ -0,0 +1,174 @@ +/* +** $Id: lauxlib.h,v 1.88.1.1 2007/12/27 13:02:25 roberto Exp $ +** Auxiliary functions for building Lua libraries +** See Copyright Notice in lua.h +*/ + + +#ifndef lauxlib_h +#define lauxlib_h + + +#include +#include + +#include "lua.h" + + +#if defined(LUA_COMPAT_GETN) +LUALIB_API int (luaL_getn) (lua_State *L, int t); +LUALIB_API void (luaL_setn) (lua_State *L, int t, int n); +#else +#define luaL_getn(L,i) ((int)lua_objlen(L, i)) +#define luaL_setn(L,i,j) ((void)0) /* no op! */ +#endif + +#if defined(LUA_COMPAT_OPENLIB) +#define luaI_openlib luaL_openlib +#endif + + +/* extra error code for `luaL_load' */ +#define LUA_ERRFILE (LUA_ERRERR+1) + + +typedef struct luaL_Reg { + const char *name; + lua_CFunction func; +} luaL_Reg; + + + +LUALIB_API void (luaI_openlib) (lua_State *L, const char *libname, + const luaL_Reg *l, int nup); +LUALIB_API void (luaL_register) (lua_State *L, const char *libname, + const luaL_Reg *l); +LUALIB_API int (luaL_getmetafield) (lua_State *L, int obj, const char *e); +LUALIB_API int (luaL_callmeta) (lua_State *L, int obj, const char *e); +LUALIB_API int (luaL_typerror) (lua_State *L, int narg, const char *tname); +LUALIB_API int (luaL_argerror) (lua_State *L, int numarg, const char *extramsg); +LUALIB_API const char *(luaL_checklstring) (lua_State *L, int numArg, + size_t *l); +LUALIB_API const char *(luaL_optlstring) (lua_State *L, int numArg, + const char *def, size_t *l); +LUALIB_API lua_Number (luaL_checknumber) (lua_State *L, int numArg); +LUALIB_API lua_Number (luaL_optnumber) (lua_State *L, int nArg, lua_Number def); + +LUALIB_API lua_Integer (luaL_checkinteger) (lua_State *L, int numArg); +LUALIB_API lua_Integer (luaL_optinteger) (lua_State *L, int nArg, + lua_Integer def); + +LUALIB_API void (luaL_checkstack) (lua_State *L, int sz, const char *msg); +LUALIB_API void (luaL_checktype) (lua_State *L, int narg, int t); +LUALIB_API void (luaL_checkany) (lua_State *L, int narg); + +LUALIB_API int (luaL_newmetatable) (lua_State *L, const char *tname); +LUALIB_API void *(luaL_checkudata) (lua_State *L, int ud, const char *tname); + +LUALIB_API void (luaL_where) (lua_State *L, int lvl); +LUALIB_API int (luaL_error) (lua_State *L, const char *fmt, ...); + +LUALIB_API int (luaL_checkoption) (lua_State *L, int narg, const char *def, + const char *const lst[]); + +LUALIB_API int (luaL_ref) (lua_State *L, int t); +LUALIB_API void (luaL_unref) (lua_State *L, int t, int ref); + +LUALIB_API int (luaL_loadfile) (lua_State *L, const char *filename); +LUALIB_API int (luaL_loadbuffer) (lua_State *L, const char *buff, size_t sz, + const char *name); +LUALIB_API int (luaL_loadstring) (lua_State *L, const char *s); + +LUALIB_API lua_State *(luaL_newstate) (void); + + +LUALIB_API const char *(luaL_gsub) (lua_State *L, const char *s, const char *p, + const char *r); + +LUALIB_API const char *(luaL_findtable) (lua_State *L, int idx, + const char *fname, int szhint); + + + + +/* +** =============================================================== +** some useful macros +** =============================================================== +*/ + +#define luaL_argcheck(L, cond,numarg,extramsg) \ + ((void)((cond) || luaL_argerror(L, (numarg), (extramsg)))) +#define luaL_checkstring(L,n) (luaL_checklstring(L, (n), NULL)) +#define luaL_optstring(L,n,d) (luaL_optlstring(L, (n), (d), NULL)) +#define luaL_checkint(L,n) ((int)luaL_checkinteger(L, (n))) +#define luaL_optint(L,n,d) ((int)luaL_optinteger(L, (n), (d))) +#define luaL_checklong(L,n) ((long)luaL_checkinteger(L, (n))) +#define luaL_optlong(L,n,d) ((long)luaL_optinteger(L, (n), (d))) + +#define luaL_typename(L,i) lua_typename(L, lua_type(L,(i))) + +#define luaL_dofile(L, fn) \ + (luaL_loadfile(L, fn) || lua_pcall(L, 0, LUA_MULTRET, 0)) + +#define luaL_dostring(L, s) \ + (luaL_loadstring(L, s) || lua_pcall(L, 0, LUA_MULTRET, 0)) + +#define luaL_getmetatable(L,n) (lua_getfield(L, LUA_REGISTRYINDEX, (n))) + +#define luaL_opt(L,f,n,d) (lua_isnoneornil(L,(n)) ? (d) : f(L,(n))) + +/* +** {====================================================== +** Generic Buffer manipulation +** ======================================================= +*/ + + + +typedef struct luaL_Buffer { + char *p; /* current position in buffer */ + int lvl; /* number of strings in the stack (level) */ + lua_State *L; + char buffer[LUAL_BUFFERSIZE]; +} luaL_Buffer; + +#define luaL_addchar(B,c) \ + ((void)((B)->p < ((B)->buffer+LUAL_BUFFERSIZE) || luaL_prepbuffer(B)), \ + (*(B)->p++ = (char)(c))) + +/* compatibility only */ +#define luaL_putchar(B,c) luaL_addchar(B,c) + +#define luaL_addsize(B,n) ((B)->p += (n)) + +LUALIB_API void (luaL_buffinit) (lua_State *L, luaL_Buffer *B); +LUALIB_API char *(luaL_prepbuffer) (luaL_Buffer *B); +LUALIB_API void (luaL_addlstring) (luaL_Buffer *B, const char *s, size_t l); +LUALIB_API void (luaL_addstring) (luaL_Buffer *B, const char *s); +LUALIB_API void (luaL_addvalue) (luaL_Buffer *B); +LUALIB_API void (luaL_pushresult) (luaL_Buffer *B); + + +/* }====================================================== */ + + +/* compatibility with ref system */ + +/* pre-defined references */ +#define LUA_NOREF (-2) +#define LUA_REFNIL (-1) + +#define lua_ref(L,lock) ((lock) ? luaL_ref(L, LUA_REGISTRYINDEX) : \ + (lua_pushstring(L, "unlocked references are obsolete"), lua_error(L), 0)) + +#define lua_unref(L,ref) luaL_unref(L, LUA_REGISTRYINDEX, (ref)) + +#define lua_getref(L,ref) lua_rawgeti(L, LUA_REGISTRYINDEX, (ref)) + + +#define luaL_reg luaL_Reg + +#endif + + diff --git a/EQ2/source/LUA/include/lua.h b/EQ2/source/LUA/include/lua.h new file mode 100644 index 000000000..5bc97b746 --- /dev/null +++ b/EQ2/source/LUA/include/lua.h @@ -0,0 +1,388 @@ +/* +** $Id: lua.h,v 1.218.1.4 2008/01/03 15:41:15 roberto Exp $ +** Lua - An Extensible Extension Language +** Lua.org, PUC-Rio, Brazil (http://www.lua.org) +** See Copyright Notice at the end of this file +*/ + + +#ifndef lua_h +#define lua_h + +#include +#include + + +#include "luaconf.h" + + +#define LUA_VERSION "Lua 5.1" +#define LUA_RELEASE "Lua 5.1.3" +#define LUA_VERSION_NUM 501 +#define LUA_COPYRIGHT "Copyright (C) 1994-2008 Lua.org, PUC-Rio" +#define LUA_AUTHORS "R. Ierusalimschy, L. H. de Figueiredo & W. Celes" + + +/* mark for precompiled code (`Lua') */ +#define LUA_SIGNATURE "\033Lua" + +/* option for multiple returns in `lua_pcall' and `lua_call' */ +#define LUA_MULTRET (-1) + + +/* +** pseudo-indices +*/ +#define LUA_REGISTRYINDEX (-10000) +#define LUA_ENVIRONINDEX (-10001) +#define LUA_GLOBALSINDEX (-10002) +#define lua_upvalueindex(i) (LUA_GLOBALSINDEX-(i)) + + +/* thread status; 0 is OK */ +#define LUA_YIELD 1 +#define LUA_ERRRUN 2 +#define LUA_ERRSYNTAX 3 +#define LUA_ERRMEM 4 +#define LUA_ERRERR 5 + + +typedef struct lua_State lua_State; + +typedef int (*lua_CFunction) (lua_State *L); + + +/* +** functions that read/write blocks when loading/dumping Lua chunks +*/ +typedef const char * (*lua_Reader) (lua_State *L, void *ud, size_t *sz); + +typedef int (*lua_Writer) (lua_State *L, const void* p, size_t sz, void* ud); + + +/* +** prototype for memory-allocation functions +*/ +typedef void * (*lua_Alloc) (void *ud, void *ptr, size_t osize, size_t nsize); + + +/* +** basic types +*/ +#define LUA_TNONE (-1) + +#define LUA_TNIL 0 +#define LUA_TBOOLEAN 1 +#define LUA_TLIGHTUSERDATA 2 +#define LUA_TNUMBER 3 +#define LUA_TSTRING 4 +#define LUA_TTABLE 5 +#define LUA_TFUNCTION 6 +#define LUA_TUSERDATA 7 +#define LUA_TTHREAD 8 + + + +/* minimum Lua stack available to a C function */ +#define LUA_MINSTACK 20 + + +/* +** generic extra include file +*/ +#if defined(LUA_USER_H) +#include LUA_USER_H +#endif + + +/* type of numbers in Lua */ +typedef LUA_NUMBER lua_Number; + + +/* type for integer functions */ +typedef LUA_INTEGER lua_Integer; + + + +/* +** state manipulation +*/ +LUA_API lua_State *(lua_newstate) (lua_Alloc f, void *ud); +LUA_API void (lua_close) (lua_State *L); +LUA_API lua_State *(lua_newthread) (lua_State *L); + +LUA_API lua_CFunction (lua_atpanic) (lua_State *L, lua_CFunction panicf); + + +/* +** basic stack manipulation +*/ +LUA_API int (lua_gettop) (lua_State *L); +LUA_API void (lua_settop) (lua_State *L, int idx); +LUA_API void (lua_pushvalue) (lua_State *L, int idx); +LUA_API void (lua_remove) (lua_State *L, int idx); +LUA_API void (lua_insert) (lua_State *L, int idx); +LUA_API void (lua_replace) (lua_State *L, int idx); +LUA_API int (lua_checkstack) (lua_State *L, int sz); + +LUA_API void (lua_xmove) (lua_State *from, lua_State *to, int n); + + +/* +** access functions (stack -> C) +*/ + +LUA_API int (lua_isnumber) (lua_State *L, int idx); +LUA_API int (lua_isstring) (lua_State *L, int idx); +LUA_API int (lua_iscfunction) (lua_State *L, int idx); +LUA_API int (lua_isuserdata) (lua_State *L, int idx); +LUA_API int (lua_type) (lua_State *L, int idx); +LUA_API const char *(lua_typename) (lua_State *L, int tp); + +LUA_API int (lua_equal) (lua_State *L, int idx1, int idx2); +LUA_API int (lua_rawequal) (lua_State *L, int idx1, int idx2); +LUA_API int (lua_lessthan) (lua_State *L, int idx1, int idx2); + +LUA_API lua_Number (lua_tonumber) (lua_State *L, int idx); +LUA_API lua_Integer (lua_tointeger) (lua_State *L, int idx); +LUA_API int (lua_toboolean) (lua_State *L, int idx); +LUA_API const char *(lua_tolstring) (lua_State *L, int idx, size_t *len); +LUA_API size_t (lua_objlen) (lua_State *L, int idx); +LUA_API lua_CFunction (lua_tocfunction) (lua_State *L, int idx); +LUA_API void *(lua_touserdata) (lua_State *L, int idx); +LUA_API lua_State *(lua_tothread) (lua_State *L, int idx); +LUA_API const void *(lua_topointer) (lua_State *L, int idx); + + +/* +** push functions (C -> stack) +*/ +LUA_API void (lua_pushnil) (lua_State *L); +LUA_API void (lua_pushnumber) (lua_State *L, lua_Number n); +LUA_API void (lua_pushinteger) (lua_State *L, lua_Integer n); +LUA_API void (lua_pushlstring) (lua_State *L, const char *s, size_t l); +LUA_API void (lua_pushstring) (lua_State *L, const char *s); +LUA_API const char *(lua_pushvfstring) (lua_State *L, const char *fmt, + va_list argp); +LUA_API const char *(lua_pushfstring) (lua_State *L, const char *fmt, ...); +LUA_API void (lua_pushcclosure) (lua_State *L, lua_CFunction fn, int n); +LUA_API void (lua_pushboolean) (lua_State *L, int b); +LUA_API void (lua_pushlightuserdata) (lua_State *L, void *p); +LUA_API int (lua_pushthread) (lua_State *L); + + +/* +** get functions (Lua -> stack) +*/ +LUA_API void (lua_gettable) (lua_State *L, int idx); +LUA_API void (lua_getfield) (lua_State *L, int idx, const char *k); +LUA_API void (lua_rawget) (lua_State *L, int idx); +LUA_API void (lua_rawgeti) (lua_State *L, int idx, int n); +LUA_API void (lua_createtable) (lua_State *L, int narr, int nrec); +LUA_API void *(lua_newuserdata) (lua_State *L, size_t sz); +LUA_API int (lua_getmetatable) (lua_State *L, int objindex); +LUA_API void (lua_getfenv) (lua_State *L, int idx); + + +/* +** set functions (stack -> Lua) +*/ +LUA_API void (lua_settable) (lua_State *L, int idx); +LUA_API void (lua_setfield) (lua_State *L, int idx, const char *k); +LUA_API void (lua_rawset) (lua_State *L, int idx); +LUA_API void (lua_rawseti) (lua_State *L, int idx, int n); +LUA_API int (lua_setmetatable) (lua_State *L, int objindex); +LUA_API int (lua_setfenv) (lua_State *L, int idx); + + +/* +** `load' and `call' functions (load and run Lua code) +*/ +LUA_API void (lua_call) (lua_State *L, int nargs, int nresults); +LUA_API int (lua_pcall) (lua_State *L, int nargs, int nresults, int errfunc); +LUA_API int (lua_cpcall) (lua_State *L, lua_CFunction func, void *ud); +LUA_API int (lua_load) (lua_State *L, lua_Reader reader, void *dt, + const char *chunkname); + +LUA_API int (lua_dump) (lua_State *L, lua_Writer writer, void *data); + + +/* +** coroutine functions +*/ +LUA_API int (lua_yield) (lua_State *L, int nresults); +LUA_API int (lua_resume) (lua_State *L, int narg); +LUA_API int (lua_status) (lua_State *L); + +/* +** garbage-collection function and options +*/ + +#define LUA_GCSTOP 0 +#define LUA_GCRESTART 1 +#define LUA_GCCOLLECT 2 +#define LUA_GCCOUNT 3 +#define LUA_GCCOUNTB 4 +#define LUA_GCSTEP 5 +#define LUA_GCSETPAUSE 6 +#define LUA_GCSETSTEPMUL 7 + +LUA_API int (lua_gc) (lua_State *L, int what, int data); + + +/* +** miscellaneous functions +*/ + +LUA_API int (lua_error) (lua_State *L); + +LUA_API int (lua_next) (lua_State *L, int idx); + +LUA_API void (lua_concat) (lua_State *L, int n); + +LUA_API lua_Alloc (lua_getallocf) (lua_State *L, void **ud); +LUA_API void lua_setallocf (lua_State *L, lua_Alloc f, void *ud); + + + +/* +** =============================================================== +** some useful macros +** =============================================================== +*/ + +#define lua_pop(L,n) lua_settop(L, -(n)-1) + +#define lua_newtable(L) lua_createtable(L, 0, 0) + +#define lua_register(L,n,f) (lua_pushcfunction(L, (f)), lua_setglobal(L, (n))) + +#define lua_pushcfunction(L,f) lua_pushcclosure(L, (f), 0) + +#define lua_strlen(L,i) lua_objlen(L, (i)) + +#define lua_isfunction(L,n) (lua_type(L, (n)) == LUA_TFUNCTION) +#define lua_istable(L,n) (lua_type(L, (n)) == LUA_TTABLE) +#define lua_islightuserdata(L,n) (lua_type(L, (n)) == LUA_TLIGHTUSERDATA) +#define lua_isnil(L,n) (lua_type(L, (n)) == LUA_TNIL) +#define lua_isboolean(L,n) (lua_type(L, (n)) == LUA_TBOOLEAN) +#define lua_isthread(L,n) (lua_type(L, (n)) == LUA_TTHREAD) +#define lua_isnone(L,n) (lua_type(L, (n)) == LUA_TNONE) +#define lua_isnoneornil(L, n) (lua_type(L, (n)) <= 0) + +#define lua_pushliteral(L, s) \ + lua_pushlstring(L, "" s, (sizeof(s)/sizeof(char))-1) + +#define lua_setglobal(L,s) lua_setfield(L, LUA_GLOBALSINDEX, (s)) +#define lua_getglobal(L,s) lua_getfield(L, LUA_GLOBALSINDEX, (s)) + +#define lua_tostring(L,i) lua_tolstring(L, (i), NULL) + + + +/* +** compatibility macros and functions +*/ + +#define lua_open() luaL_newstate() + +#define lua_getregistry(L) lua_pushvalue(L, LUA_REGISTRYINDEX) + +#define lua_getgccount(L) lua_gc(L, LUA_GCCOUNT, 0) + +#define lua_Chunkreader lua_Reader +#define lua_Chunkwriter lua_Writer + + +/* hack */ +LUA_API void lua_setlevel (lua_State *from, lua_State *to); + + +/* +** {====================================================================== +** Debug API +** ======================================================================= +*/ + + +/* +** Event codes +*/ +#define LUA_HOOKCALL 0 +#define LUA_HOOKRET 1 +#define LUA_HOOKLINE 2 +#define LUA_HOOKCOUNT 3 +#define LUA_HOOKTAILRET 4 + + +/* +** Event masks +*/ +#define LUA_MASKCALL (1 << LUA_HOOKCALL) +#define LUA_MASKRET (1 << LUA_HOOKRET) +#define LUA_MASKLINE (1 << LUA_HOOKLINE) +#define LUA_MASKCOUNT (1 << LUA_HOOKCOUNT) + +typedef struct lua_Debug lua_Debug; /* activation record */ + + +/* Functions to be called by the debuger in specific events */ +typedef void (*lua_Hook) (lua_State *L, lua_Debug *ar); + + +LUA_API int lua_getstack (lua_State *L, int level, lua_Debug *ar); +LUA_API int lua_getinfo (lua_State *L, const char *what, lua_Debug *ar); +LUA_API const char *lua_getlocal (lua_State *L, const lua_Debug *ar, int n); +LUA_API const char *lua_setlocal (lua_State *L, const lua_Debug *ar, int n); +LUA_API const char *lua_getupvalue (lua_State *L, int funcindex, int n); +LUA_API const char *lua_setupvalue (lua_State *L, int funcindex, int n); + +LUA_API int lua_sethook (lua_State *L, lua_Hook func, int mask, int count); +LUA_API lua_Hook lua_gethook (lua_State *L); +LUA_API int lua_gethookmask (lua_State *L); +LUA_API int lua_gethookcount (lua_State *L); + + +struct lua_Debug { + int event; + const char *name; /* (n) */ + const char *namewhat; /* (n) `global', `local', `field', `method' */ + const char *what; /* (S) `Lua', `C', `main', `tail' */ + const char *source; /* (S) */ + int currentline; /* (l) */ + int nups; /* (u) number of upvalues */ + int linedefined; /* (S) */ + int lastlinedefined; /* (S) */ + char short_src[LUA_IDSIZE]; /* (S) */ + /* private part */ + int i_ci; /* active function */ +}; + +/* }====================================================================== */ + + +/****************************************************************************** +* Copyright (C) 1994-2008 Lua.org, PUC-Rio. All rights reserved. +* +* Permission is hereby granted, free of charge, to any person obtaining +* a copy of this software and associated documentation files (the +* "Software"), to deal in the Software without restriction, including +* without limitation the rights to use, copy, modify, merge, publish, +* distribute, sublicense, and/or sell copies of the Software, and to +* permit persons to whom the Software is furnished to do so, subject to +* the following conditions: +* +* The above copyright notice and this permission notice shall be +* included in all copies or substantial portions of the Software. +* +* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +******************************************************************************/ + + +#endif diff --git a/EQ2/source/LUA/include/lua.hpp b/EQ2/source/LUA/include/lua.hpp new file mode 100644 index 000000000..ec417f594 --- /dev/null +++ b/EQ2/source/LUA/include/lua.hpp @@ -0,0 +1,9 @@ +// lua.hpp +// Lua header files for C++ +// <> not supplied automatically because Lua also compiles as C++ + +extern "C" { +#include "lua.h" +#include "lualib.h" +#include "lauxlib.h" +} diff --git a/EQ2/source/LUA/include/luaconf.h b/EQ2/source/LUA/include/luaconf.h new file mode 100644 index 000000000..eb2f5a1f7 --- /dev/null +++ b/EQ2/source/LUA/include/luaconf.h @@ -0,0 +1,763 @@ +/* +** $Id: luaconf.h,v 1.82.1.6 2008/01/18 17:07:48 roberto Exp $ +** Configuration file for Lua +** See Copyright Notice in lua.h +*/ + + +#ifndef lconfig_h +#define lconfig_h + +#include +#include + + +/* +** ================================================================== +** Search for "@@" to find all configurable definitions. +** =================================================================== +*/ + + +/* +@@ LUA_ANSI controls the use of non-ansi features. +** CHANGE it (define it) if you want Lua to avoid the use of any +** non-ansi feature or library. +*/ +#if defined(__STRICT_ANSI__) +#define LUA_ANSI +#endif + + +#if !defined(LUA_ANSI) && defined(_WIN32) +#define LUA_WIN +#endif + +#if defined(LUA_USE_LINUX) +#define LUA_USE_POSIX +#define LUA_USE_DLOPEN /* needs an extra library: -ldl */ +#define LUA_USE_READLINE /* needs some extra libraries */ +#endif + +#if defined(LUA_USE_MACOSX) +#define LUA_USE_POSIX +#define LUA_DL_DYLD /* does not need extra library */ +#endif + + + +/* +@@ LUA_USE_POSIX includes all functionallity listed as X/Open System +@* Interfaces Extension (XSI). +** CHANGE it (define it) if your system is XSI compatible. +*/ +#if defined(LUA_USE_POSIX) +#define LUA_USE_MKSTEMP +#define LUA_USE_ISATTY +#define LUA_USE_POPEN +#define LUA_USE_ULONGJMP +#endif + + +/* +@@ LUA_PATH and LUA_CPATH are the names of the environment variables that +@* Lua check to set its paths. +@@ LUA_INIT is the name of the environment variable that Lua +@* checks for initialization code. +** CHANGE them if you want different names. +*/ +#define LUA_PATH "LUA_PATH" +#define LUA_CPATH "LUA_CPATH" +#define LUA_INIT "LUA_INIT" + + +/* +@@ LUA_PATH_DEFAULT is the default path that Lua uses to look for +@* Lua libraries. +@@ LUA_CPATH_DEFAULT is the default path that Lua uses to look for +@* C libraries. +** CHANGE them if your machine has a non-conventional directory +** hierarchy or if you want to install your libraries in +** non-conventional directories. +*/ +#if defined(_WIN32) +/* +** In Windows, any exclamation mark ('!') in the path is replaced by the +** path of the directory of the executable file of the current process. +*/ +#define LUA_LDIR "!\\lua\\" +#define LUA_CDIR "!\\" +#define LUA_PATH_DEFAULT \ + ".\\?.lua;" LUA_LDIR"?.lua;" LUA_LDIR"?\\init.lua;" \ + LUA_CDIR"?.lua;" LUA_CDIR"?\\init.lua" +#define LUA_CPATH_DEFAULT \ + ".\\?.dll;" LUA_CDIR"?.dll;" LUA_CDIR"loadall.dll" + +#else +#define LUA_ROOT "/usr/local/" +#define LUA_LDIR LUA_ROOT "share/lua/5.1/" +#define LUA_CDIR LUA_ROOT "lib/lua/5.1/" +#define LUA_PATH_DEFAULT \ + "./?.lua;" LUA_LDIR"?.lua;" LUA_LDIR"?/init.lua;" \ + LUA_CDIR"?.lua;" LUA_CDIR"?/init.lua" +#define LUA_CPATH_DEFAULT \ + "./?.so;" LUA_CDIR"?.so;" LUA_CDIR"loadall.so" +#endif + + +/* +@@ LUA_DIRSEP is the directory separator (for submodules). +** CHANGE it if your machine does not use "/" as the directory separator +** and is not Windows. (On Windows Lua automatically uses "\".) +*/ +#if defined(_WIN32) +#define LUA_DIRSEP "\\" +#else +#define LUA_DIRSEP "/" +#endif + + +/* +@@ LUA_PATHSEP is the character that separates templates in a path. +@@ LUA_PATH_MARK is the string that marks the substitution points in a +@* template. +@@ LUA_EXECDIR in a Windows path is replaced by the executable's +@* directory. +@@ LUA_IGMARK is a mark to ignore all before it when bulding the +@* luaopen_ function name. +** CHANGE them if for some reason your system cannot use those +** characters. (E.g., if one of those characters is a common character +** in file/directory names.) Probably you do not need to change them. +*/ +#define LUA_PATHSEP ";" +#define LUA_PATH_MARK "?" +#define LUA_EXECDIR "!" +#define LUA_IGMARK "-" + + +/* +@@ LUA_INTEGER is the integral type used by lua_pushinteger/lua_tointeger. +** CHANGE that if ptrdiff_t is not adequate on your machine. (On most +** machines, ptrdiff_t gives a good choice between int or long.) +*/ +#define LUA_INTEGER ptrdiff_t + + +/* +@@ LUA_API is a mark for all core API functions. +@@ LUALIB_API is a mark for all standard library functions. +** CHANGE them if you need to define those functions in some special way. +** For instance, if you want to create one Windows DLL with the core and +** the libraries, you may want to use the following definition (define +** LUA_BUILD_AS_DLL to get it). +*/ +#if defined(LUA_BUILD_AS_DLL) + +#if defined(LUA_CORE) || defined(LUA_LIB) +#define LUA_API __declspec(dllexport) +#else +#define LUA_API __declspec(dllimport) +#endif + +#else + +#define LUA_API extern + +#endif + +/* more often than not the libs go together with the core */ +#define LUALIB_API LUA_API + + +/* +@@ LUAI_FUNC is a mark for all extern functions that are not to be +@* exported to outside modules. +@@ LUAI_DATA is a mark for all extern (const) variables that are not to +@* be exported to outside modules. +** CHANGE them if you need to mark them in some special way. Elf/gcc +** (versions 3.2 and later) mark them as "hidden" to optimize access +** when Lua is compiled as a shared library. +*/ +#if defined(luaall_c) +#define LUAI_FUNC static +#define LUAI_DATA /* empty */ + +#elif defined(__GNUC__) && ((__GNUC__*100 + __GNUC_MINOR__) >= 302) && \ + defined(__ELF__) +#define LUAI_FUNC __attribute__((visibility("hidden"))) extern +#define LUAI_DATA LUAI_FUNC + +#else +#define LUAI_FUNC extern +#define LUAI_DATA extern +#endif + + + +/* +@@ LUA_QL describes how error messages quote program elements. +** CHANGE it if you want a different appearance. +*/ +#define LUA_QL(x) "'" x "'" +#define LUA_QS LUA_QL("%s") + + +/* +@@ LUA_IDSIZE gives the maximum size for the description of the source +@* of a function in debug information. +** CHANGE it if you want a different size. +*/ +#define LUA_IDSIZE 60 + + +/* +** {================================================================== +** Stand-alone configuration +** =================================================================== +*/ + +#if defined(lua_c) || defined(luaall_c) + +/* +@@ lua_stdin_is_tty detects whether the standard input is a 'tty' (that +@* is, whether we're running lua interactively). +** CHANGE it if you have a better definition for non-POSIX/non-Windows +** systems. +*/ +#if defined(LUA_USE_ISATTY) +#include +#define lua_stdin_is_tty() isatty(0) +#elif defined(LUA_WIN) +#include +#include +#define lua_stdin_is_tty() _isatty(_fileno(stdin)) +#else +#define lua_stdin_is_tty() 1 /* assume stdin is a tty */ +#endif + + +/* +@@ LUA_PROMPT is the default prompt used by stand-alone Lua. +@@ LUA_PROMPT2 is the default continuation prompt used by stand-alone Lua. +** CHANGE them if you want different prompts. (You can also change the +** prompts dynamically, assigning to globals _PROMPT/_PROMPT2.) +*/ +#define LUA_PROMPT "> " +#define LUA_PROMPT2 ">> " + + +/* +@@ LUA_PROGNAME is the default name for the stand-alone Lua program. +** CHANGE it if your stand-alone interpreter has a different name and +** your system is not able to detect that name automatically. +*/ +#define LUA_PROGNAME "lua" + + +/* +@@ LUA_MAXINPUT is the maximum length for an input line in the +@* stand-alone interpreter. +** CHANGE it if you need longer lines. +*/ +#define LUA_MAXINPUT 512 + + +/* +@@ lua_readline defines how to show a prompt and then read a line from +@* the standard input. +@@ lua_saveline defines how to "save" a read line in a "history". +@@ lua_freeline defines how to free a line read by lua_readline. +** CHANGE them if you want to improve this functionality (e.g., by using +** GNU readline and history facilities). +*/ +#if defined(LUA_USE_READLINE) +#include +#include +#include +#define lua_readline(L,b,p) ((void)L, ((b)=readline(p)) != NULL) +#define lua_saveline(L,idx) \ + if (lua_strlen(L,idx) > 0) /* non-empty line? */ \ + add_history(lua_tostring(L, idx)); /* add it to history */ +#define lua_freeline(L,b) ((void)L, free(b)) +#else +#define lua_readline(L,b,p) \ + ((void)L, fputs(p, stdout), fflush(stdout), /* show prompt */ \ + fgets(b, LUA_MAXINPUT, stdin) != NULL) /* get line */ +#define lua_saveline(L,idx) { (void)L; (void)idx; } +#define lua_freeline(L,b) { (void)L; (void)b; } +#endif + +#endif + +/* }================================================================== */ + + +/* +@@ LUAI_GCPAUSE defines the default pause between garbage-collector cycles +@* as a percentage. +** CHANGE it if you want the GC to run faster or slower (higher values +** mean larger pauses which mean slower collection.) You can also change +** this value dynamically. +*/ +#define LUAI_GCPAUSE 200 /* 200% (wait memory to double before next GC) */ + + +/* +@@ LUAI_GCMUL defines the default speed of garbage collection relative to +@* memory allocation as a percentage. +** CHANGE it if you want to change the granularity of the garbage +** collection. (Higher values mean coarser collections. 0 represents +** infinity, where each step performs a full collection.) You can also +** change this value dynamically. +*/ +#define LUAI_GCMUL 200 /* GC runs 'twice the speed' of memory allocation */ + + + +/* +@@ LUA_COMPAT_GETN controls compatibility with old getn behavior. +** CHANGE it (define it) if you want exact compatibility with the +** behavior of setn/getn in Lua 5.0. +*/ +#undef LUA_COMPAT_GETN + +/* +@@ LUA_COMPAT_LOADLIB controls compatibility about global loadlib. +** CHANGE it to undefined as soon as you do not need a global 'loadlib' +** function (the function is still available as 'package.loadlib'). +*/ +#undef LUA_COMPAT_LOADLIB + +/* +@@ LUA_COMPAT_VARARG controls compatibility with old vararg feature. +** CHANGE it to undefined as soon as your programs use only '...' to +** access vararg parameters (instead of the old 'arg' table). +*/ +#define LUA_COMPAT_VARARG + +/* +@@ LUA_COMPAT_MOD controls compatibility with old math.mod function. +** CHANGE it to undefined as soon as your programs use 'math.fmod' or +** the new '%' operator instead of 'math.mod'. +*/ +#define LUA_COMPAT_MOD + +/* +@@ LUA_COMPAT_LSTR controls compatibility with old long string nesting +@* facility. +** CHANGE it to 2 if you want the old behaviour, or undefine it to turn +** off the advisory error when nesting [[...]]. +*/ +#define LUA_COMPAT_LSTR 1 + +/* +@@ LUA_COMPAT_GFIND controls compatibility with old 'string.gfind' name. +** CHANGE it to undefined as soon as you rename 'string.gfind' to +** 'string.gmatch'. +*/ +#define LUA_COMPAT_GFIND + +/* +@@ LUA_COMPAT_OPENLIB controls compatibility with old 'luaL_openlib' +@* behavior. +** CHANGE it to undefined as soon as you replace to 'luaL_register' +** your uses of 'luaL_openlib' +*/ +#define LUA_COMPAT_OPENLIB + + + +/* +@@ luai_apicheck is the assert macro used by the Lua-C API. +** CHANGE luai_apicheck if you want Lua to perform some checks in the +** parameters it gets from API calls. This may slow down the interpreter +** a bit, but may be quite useful when debugging C code that interfaces +** with Lua. A useful redefinition is to use assert.h. +*/ +#if defined(LUA_USE_APICHECK) +#include +#define luai_apicheck(L,o) { (void)L; assert(o); } +#else +#define luai_apicheck(L,o) { (void)L; } +#endif + + +/* +@@ LUAI_BITSINT defines the number of bits in an int. +** CHANGE here if Lua cannot automatically detect the number of bits of +** your machine. Probably you do not need to change this. +*/ +/* avoid overflows in comparison */ +#if INT_MAX-20 < 32760 +#define LUAI_BITSINT 16 +#elif INT_MAX > 2147483640L +/* int has at least 32 bits */ +#define LUAI_BITSINT 32 +#else +#error "you must define LUA_BITSINT with number of bits in an integer" +#endif + + +/* +@@ LUAI_UINT32 is an unsigned integer with at least 32 bits. +@@ LUAI_INT32 is an signed integer with at least 32 bits. +@@ LUAI_UMEM is an unsigned integer big enough to count the total +@* memory used by Lua. +@@ LUAI_MEM is a signed integer big enough to count the total memory +@* used by Lua. +** CHANGE here if for some weird reason the default definitions are not +** good enough for your machine. (The definitions in the 'else' +** part always works, but may waste space on machines with 64-bit +** longs.) Probably you do not need to change this. +*/ +#if LUAI_BITSINT >= 32 +#define LUAI_UINT32 unsigned int +#define LUAI_INT32 int +#define LUAI_MAXINT32 INT_MAX +#define LUAI_UMEM size_t +#define LUAI_MEM ptrdiff_t +#else +/* 16-bit ints */ +#define LUAI_UINT32 unsigned long +#define LUAI_INT32 long +#define LUAI_MAXINT32 LONG_MAX +#define LUAI_UMEM unsigned long +#define LUAI_MEM long +#endif + + +/* +@@ LUAI_MAXCALLS limits the number of nested calls. +** CHANGE it if you need really deep recursive calls. This limit is +** arbitrary; its only purpose is to stop infinite recursion before +** exhausting memory. +*/ +#define LUAI_MAXCALLS 20000 + + +/* +@@ LUAI_MAXCSTACK limits the number of Lua stack slots that a C function +@* can use. +** CHANGE it if you need lots of (Lua) stack space for your C +** functions. This limit is arbitrary; its only purpose is to stop C +** functions to consume unlimited stack space. +*/ +#define LUAI_MCS_AUX ((int)(INT_MAX / (4*sizeof(LUA_NUMBER)))) +#define LUAI_MAXCSTACK (LUAI_MCS_AUX > SHRT_MAX ? SHRT_MAX : LUAI_MCS_AUX) + + + +/* +** {================================================================== +** CHANGE (to smaller values) the following definitions if your system +** has a small C stack. (Or you may want to change them to larger +** values if your system has a large C stack and these limits are +** too rigid for you.) Some of these constants control the size of +** stack-allocated arrays used by the compiler or the interpreter, while +** others limit the maximum number of recursive calls that the compiler +** or the interpreter can perform. Values too large may cause a C stack +** overflow for some forms of deep constructs. +** =================================================================== +*/ + + +/* +@@ LUAI_MAXCCALLS is the maximum depth for nested C calls (short) and +@* syntactical nested non-terminals in a program. +*/ +#define LUAI_MAXCCALLS 200 + + +/* +@@ LUAI_MAXVARS is the maximum number of local variables per function +@* (must be smaller than 250). +*/ +#define LUAI_MAXVARS 200 + + +/* +@@ LUAI_MAXUPVALUES is the maximum number of upvalues per function +@* (must be smaller than 250). +*/ +#define LUAI_MAXUPVALUES 60 + + +/* +@@ LUAL_BUFFERSIZE is the buffer size used by the lauxlib buffer system. +*/ +#define LUAL_BUFFERSIZE BUFSIZ + +/* }================================================================== */ + + + + +/* +** {================================================================== +@@ LUA_NUMBER is the type of numbers in Lua. +** CHANGE the following definitions only if you want to build Lua +** with a number type different from double. You may also need to +** change lua_number2int & lua_number2integer. +** =================================================================== +*/ + +#define LUA_NUMBER_DOUBLE +#define LUA_NUMBER double + +/* +@@ LUAI_UACNUMBER is the result of an 'usual argument conversion' +@* over a number. +*/ +#define LUAI_UACNUMBER double + + +/* +@@ LUA_NUMBER_SCAN is the format for reading numbers. +@@ LUA_NUMBER_FMT is the format for writing numbers. +@@ lua_number2str converts a number to a string. +@@ LUAI_MAXNUMBER2STR is maximum size of previous conversion. +@@ lua_str2number converts a string to a number. +*/ +#define LUA_NUMBER_SCAN "%lf" +#define LUA_NUMBER_FMT "%.14g" +#define lua_number2str(s,n) sprintf((s), LUA_NUMBER_FMT, (n)) +#define LUAI_MAXNUMBER2STR 32 /* 16 digits, sign, point, and \0 */ +#define lua_str2number(s,p) strtod((s), (p)) + + +/* +@@ The luai_num* macros define the primitive operations over numbers. +*/ +#if defined(LUA_CORE) +#include +#define luai_numadd(a,b) ((a)+(b)) +#define luai_numsub(a,b) ((a)-(b)) +#define luai_nummul(a,b) ((a)*(b)) +#define luai_numdiv(a,b) ((a)/(b)) +#define luai_nummod(a,b) ((a) - floor((a)/(b))*(b)) +#define luai_numpow(a,b) (pow(a,b)) +#define luai_numunm(a) (-(a)) +#define luai_numeq(a,b) ((a)==(b)) +#define luai_numlt(a,b) ((a)<(b)) +#define luai_numle(a,b) ((a)<=(b)) +#define luai_numisnan(a) (!luai_numeq((a), (a))) +#endif + + +/* +@@ lua_number2int is a macro to convert lua_Number to int. +@@ lua_number2integer is a macro to convert lua_Number to lua_Integer. +** CHANGE them if you know a faster way to convert a lua_Number to +** int (with any rounding method and without throwing errors) in your +** system. In Pentium machines, a naive typecast from double to int +** in C is extremely slow, so any alternative is worth trying. +*/ + +/* On a Pentium, resort to a trick */ +#if defined(LUA_NUMBER_DOUBLE) && !defined(LUA_ANSI) && !defined(__SSE2__) && \ + (defined(__i386) || defined (_M_IX86) || defined(__i386__)) + +/* On a Microsoft compiler, use assembler */ +#if defined(_MSC_VER) + +#define lua_number2int(i,d) __asm fld d __asm fistp i +#define lua_number2integer(i,n) lua_number2int(i, n) + +/* the next trick should work on any Pentium, but sometimes clashes + with a DirectX idiosyncrasy */ +#else + +union luai_Cast { double l_d; long l_l; }; +#define lua_number2int(i,d) \ + { volatile union luai_Cast u; u.l_d = (d) + 6755399441055744.0; (i) = u.l_l; } +#define lua_number2integer(i,n) lua_number2int(i, n) + +#endif + + +/* this option always works, but may be slow */ +#else +#define lua_number2int(i,d) ((i)=(int)(d)) +#define lua_number2integer(i,d) ((i)=(lua_Integer)(d)) + +#endif + +/* }================================================================== */ + + +/* +@@ LUAI_USER_ALIGNMENT_T is a type that requires maximum alignment. +** CHANGE it if your system requires alignments larger than double. (For +** instance, if your system supports long doubles and they must be +** aligned in 16-byte boundaries, then you should add long double in the +** union.) Probably you do not need to change this. +*/ +#define LUAI_USER_ALIGNMENT_T union { double u; void *s; long l; } + + +/* +@@ LUAI_THROW/LUAI_TRY define how Lua does exception handling. +** CHANGE them if you prefer to use longjmp/setjmp even with C++ +** or if want/don't to use _longjmp/_setjmp instead of regular +** longjmp/setjmp. By default, Lua handles errors with exceptions when +** compiling as C++ code, with _longjmp/_setjmp when asked to use them, +** and with longjmp/setjmp otherwise. +*/ +#if defined(__cplusplus) +/* C++ exceptions */ +#define LUAI_THROW(L,c) throw(c) +#define LUAI_TRY(L,c,a) try { a } catch(...) \ + { if ((c)->status == 0) (c)->status = -1; } +#define luai_jmpbuf int /* dummy variable */ + +#elif defined(LUA_USE_ULONGJMP) +/* in Unix, try _longjmp/_setjmp (more efficient) */ +#define LUAI_THROW(L,c) _longjmp((c)->b, 1) +#define LUAI_TRY(L,c,a) if (_setjmp((c)->b) == 0) { a } +#define luai_jmpbuf jmp_buf + +#else +/* default handling with long jumps */ +#define LUAI_THROW(L,c) longjmp((c)->b, 1) +#define LUAI_TRY(L,c,a) if (setjmp((c)->b) == 0) { a } +#define luai_jmpbuf jmp_buf + +#endif + + +/* +@@ LUA_MAXCAPTURES is the maximum number of captures that a pattern +@* can do during pattern-matching. +** CHANGE it if you need more captures. This limit is arbitrary. +*/ +#define LUA_MAXCAPTURES 32 + + +/* +@@ lua_tmpnam is the function that the OS library uses to create a +@* temporary name. +@@ LUA_TMPNAMBUFSIZE is the maximum size of a name created by lua_tmpnam. +** CHANGE them if you have an alternative to tmpnam (which is considered +** insecure) or if you want the original tmpnam anyway. By default, Lua +** uses tmpnam except when POSIX is available, where it uses mkstemp. +*/ +#if defined(loslib_c) || defined(luaall_c) + +#if defined(LUA_USE_MKSTEMP) +#include +#define LUA_TMPNAMBUFSIZE 32 +#define lua_tmpnam(b,e) { \ + strcpy(b, "/tmp/lua_XXXXXX"); \ + e = mkstemp(b); \ + if (e != -1) close(e); \ + e = (e == -1); } + +#else +#define LUA_TMPNAMBUFSIZE L_tmpnam +#define lua_tmpnam(b,e) { e = (tmpnam(b) == NULL); } +#endif + +#endif + + +/* +@@ lua_popen spawns a new process connected to the current one through +@* the file streams. +** CHANGE it if you have a way to implement it in your system. +*/ +#if defined(LUA_USE_POPEN) + +#define lua_popen(L,c,m) ((void)L, fflush(NULL), popen(c,m)) +#define lua_pclose(L,file) ((void)L, (pclose(file) != -1)) + +#elif defined(LUA_WIN) + +#define lua_popen(L,c,m) ((void)L, _popen(c,m)) +#define lua_pclose(L,file) ((void)L, (_pclose(file) != -1)) + +#else + +#define lua_popen(L,c,m) ((void)((void)c, m), \ + luaL_error(L, LUA_QL("popen") " not supported"), (FILE*)0) +#define lua_pclose(L,file) ((void)((void)L, file), 0) + +#endif + +/* +@@ LUA_DL_* define which dynamic-library system Lua should use. +** CHANGE here if Lua has problems choosing the appropriate +** dynamic-library system for your platform (either Windows' DLL, Mac's +** dyld, or Unix's dlopen). If your system is some kind of Unix, there +** is a good chance that it has dlopen, so LUA_DL_DLOPEN will work for +** it. To use dlopen you also need to adapt the src/Makefile (probably +** adding -ldl to the linker options), so Lua does not select it +** automatically. (When you change the makefile to add -ldl, you must +** also add -DLUA_USE_DLOPEN.) +** If you do not want any kind of dynamic library, undefine all these +** options. +** By default, _WIN32 gets LUA_DL_DLL and MAC OS X gets LUA_DL_DYLD. +*/ +#if defined(LUA_USE_DLOPEN) +#define LUA_DL_DLOPEN +#endif + +#if defined(LUA_WIN) +#define LUA_DL_DLL +#endif + + +/* +@@ LUAI_EXTRASPACE allows you to add user-specific data in a lua_State +@* (the data goes just *before* the lua_State pointer). +** CHANGE (define) this if you really need that. This value must be +** a multiple of the maximum alignment required for your machine. +*/ +#define LUAI_EXTRASPACE 0 + + +/* +@@ luai_userstate* allow user-specific actions on threads. +** CHANGE them if you defined LUAI_EXTRASPACE and need to do something +** extra when a thread is created/deleted/resumed/yielded. +*/ +#define luai_userstateopen(L) ((void)L) +#define luai_userstateclose(L) ((void)L) +#define luai_userstatethread(L,L1) ((void)L) +#define luai_userstatefree(L) ((void)L) +#define luai_userstateresume(L,n) ((void)L) +#define luai_userstateyield(L,n) ((void)L) + + +/* +@@ LUA_INTFRMLEN is the length modifier for integer conversions +@* in 'string.format'. +@@ LUA_INTFRM_T is the integer type correspoding to the previous length +@* modifier. +** CHANGE them if your system supports long long or does not support long. +*/ + +#if defined(LUA_USELONGLONG) + +#define LUA_INTFRMLEN "ll" +#define LUA_INTFRM_T long long + +#else + +#define LUA_INTFRMLEN "l" +#define LUA_INTFRM_T long + +#endif + + + +/* =================================================================== */ + +/* +** Local configuration. You can use this space to add your redefinitions +** without modifying the main part of the file. +*/ + + + +#endif + diff --git a/EQ2/source/LUA/include/lualib.h b/EQ2/source/LUA/include/lualib.h new file mode 100644 index 000000000..469417f67 --- /dev/null +++ b/EQ2/source/LUA/include/lualib.h @@ -0,0 +1,53 @@ +/* +** $Id: lualib.h,v 1.36.1.1 2007/12/27 13:02:25 roberto Exp $ +** Lua standard libraries +** See Copyright Notice in lua.h +*/ + + +#ifndef lualib_h +#define lualib_h + +#include "lua.h" + + +/* Key to file-handle type */ +#define LUA_FILEHANDLE "FILE*" + + +#define LUA_COLIBNAME "coroutine" +LUALIB_API int (luaopen_base) (lua_State *L); + +#define LUA_TABLIBNAME "table" +LUALIB_API int (luaopen_table) (lua_State *L); + +#define LUA_IOLIBNAME "io" +LUALIB_API int (luaopen_io) (lua_State *L); + +#define LUA_OSLIBNAME "os" +LUALIB_API int (luaopen_os) (lua_State *L); + +#define LUA_STRLIBNAME "string" +LUALIB_API int (luaopen_string) (lua_State *L); + +#define LUA_MATHLIBNAME "math" +LUALIB_API int (luaopen_math) (lua_State *L); + +#define LUA_DBLIBNAME "debug" +LUALIB_API int (luaopen_debug) (lua_State *L); + +#define LUA_LOADLIBNAME "package" +LUALIB_API int (luaopen_package) (lua_State *L); + + +/* open all previous libraries */ +LUALIB_API void (luaL_openlibs) (lua_State *L); + + + +#ifndef lua_assert +#define lua_assert(x) ((void)0) +#endif + + +#endif diff --git a/EQ2/source/LUA/lapi.c b/EQ2/source/LUA/lapi.c new file mode 100644 index 000000000..c9455a5d8 --- /dev/null +++ b/EQ2/source/LUA/lapi.c @@ -0,0 +1,1298 @@ +/* +** $Id: lapi.c,v 2.259 2016/02/29 14:27:14 roberto Exp $ +** Lua API +** See Copyright Notice in lua.h +*/ + +#define lapi_c +#define LUA_CORE + +#include "lprefix.h" + + +#include +#include + +#include "lua.h" + +#include "lapi.h" +#include "ldebug.h" +#include "ldo.h" +#include "lfunc.h" +#include "lgc.h" +#include "lmem.h" +#include "lobject.h" +#include "lstate.h" +#include "lstring.h" +#include "ltable.h" +#include "ltm.h" +#include "lundump.h" +#include "lvm.h" + + + +const char lua_ident[] = + "$LuaVersion: " LUA_COPYRIGHT " $" + "$LuaAuthors: " LUA_AUTHORS " $"; + + +/* value at a non-valid index */ +#define NONVALIDVALUE cast(TValue *, luaO_nilobject) + +/* corresponding test */ +#define isvalid(o) ((o) != luaO_nilobject) + +/* test for pseudo index */ +#define ispseudo(i) ((i) <= LUA_REGISTRYINDEX) + +/* test for upvalue */ +#define isupvalue(i) ((i) < LUA_REGISTRYINDEX) + +/* test for valid but not pseudo index */ +#define isstackindex(i, o) (isvalid(o) && !ispseudo(i)) + +#define api_checkvalidindex(l,o) api_check(l, isvalid(o), "invalid index") + +#define api_checkstackindex(l, i, o) \ + api_check(l, isstackindex(i, o), "index not in the stack") + + +static TValue *index2addr (lua_State *L, int idx) { + CallInfo *ci = L->ci; + if (idx > 0) { + TValue *o = ci->func + idx; + api_check(L, idx <= ci->top - (ci->func + 1), "unacceptable index"); + if (o >= L->top) return NONVALIDVALUE; + else return o; + } + else if (!ispseudo(idx)) { /* negative index */ + api_check(L, idx != 0 && -idx <= L->top - (ci->func + 1), "invalid index"); + return L->top + idx; + } + else if (idx == LUA_REGISTRYINDEX) + return &G(L)->l_registry; + else { /* upvalues */ + idx = LUA_REGISTRYINDEX - idx; + api_check(L, idx <= MAXUPVAL + 1, "upvalue index too large"); + if (ttislcf(ci->func)) /* light C function? */ + return NONVALIDVALUE; /* it has no upvalues */ + else { + CClosure *func = clCvalue(ci->func); + return (idx <= func->nupvalues) ? &func->upvalue[idx-1] : NONVALIDVALUE; + } + } +} + + +/* +** to be called by 'lua_checkstack' in protected mode, to grow stack +** capturing memory errors +*/ +static void growstack (lua_State *L, void *ud) { + int size = *(int *)ud; + luaD_growstack(L, size); +} + + +LUA_API int lua_checkstack (lua_State *L, int n) { + int res; + CallInfo *ci = L->ci; + lua_lock(L); + api_check(L, n >= 0, "negative 'n'"); + if (L->stack_last - L->top > n) /* stack large enough? */ + res = 1; /* yes; check is OK */ + else { /* no; need to grow stack */ + int inuse = cast_int(L->top - L->stack) + EXTRA_STACK; + if (inuse > LUAI_MAXSTACK - n) /* can grow without overflow? */ + res = 0; /* no */ + else /* try to grow stack */ + res = (luaD_rawrunprotected(L, &growstack, &n) == LUA_OK); + } + if (res && ci->top < L->top + n) + ci->top = L->top + n; /* adjust frame top */ + lua_unlock(L); + return res; +} + + +LUA_API void lua_xmove (lua_State *from, lua_State *to, int n) { + int i; + if (from == to) return; + lua_lock(to); + api_checknelems(from, n); + api_check(from, G(from) == G(to), "moving among independent states"); + api_check(from, to->ci->top - to->top >= n, "stack overflow"); + from->top -= n; + for (i = 0; i < n; i++) { + setobj2s(to, to->top, from->top + i); + to->top++; /* stack already checked by previous 'api_check' */ + } + lua_unlock(to); +} + + +LUA_API lua_CFunction lua_atpanic (lua_State *L, lua_CFunction panicf) { + lua_CFunction old; + lua_lock(L); + old = G(L)->panic; + G(L)->panic = panicf; + lua_unlock(L); + return old; +} + + +LUA_API const lua_Number *lua_version (lua_State *L) { + static const lua_Number version = LUA_VERSION_NUM; + if (L == NULL) return &version; + else return G(L)->version; +} + + + +/* +** basic stack manipulation +*/ + + +/* +** convert an acceptable stack index into an absolute index +*/ +LUA_API int lua_absindex (lua_State *L, int idx) { + return (idx > 0 || ispseudo(idx)) + ? idx + : cast_int(L->top - L->ci->func) + idx; +} + + +LUA_API int lua_gettop (lua_State *L) { + return cast_int(L->top - (L->ci->func + 1)); +} + + +LUA_API void lua_settop (lua_State *L, int idx) { + StkId func = L->ci->func; + lua_lock(L); + if (idx >= 0) { + api_check(L, idx <= L->stack_last - (func + 1), "new top too large"); + while (L->top < (func + 1) + idx) + setnilvalue(L->top++); + L->top = (func + 1) + idx; + } + else { + api_check(L, -(idx+1) <= (L->top - (func + 1)), "invalid new top"); + L->top += idx+1; /* 'subtract' index (index is negative) */ + } + lua_unlock(L); +} + + +/* +** Reverse the stack segment from 'from' to 'to' +** (auxiliary to 'lua_rotate') +*/ +static void reverse (lua_State *L, StkId from, StkId to) { + for (; from < to; from++, to--) { + TValue temp; + setobj(L, &temp, from); + setobjs2s(L, from, to); + setobj2s(L, to, &temp); + } +} + + +/* +** Let x = AB, where A is a prefix of length 'n'. Then, +** rotate x n == BA. But BA == (A^r . B^r)^r. +*/ +LUA_API void lua_rotate (lua_State *L, int idx, int n) { + StkId p, t, m; + lua_lock(L); + t = L->top - 1; /* end of stack segment being rotated */ + p = index2addr(L, idx); /* start of segment */ + api_checkstackindex(L, idx, p); + api_check(L, (n >= 0 ? n : -n) <= (t - p + 1), "invalid 'n'"); + m = (n >= 0 ? t - n : p - n - 1); /* end of prefix */ + reverse(L, p, m); /* reverse the prefix with length 'n' */ + reverse(L, m + 1, t); /* reverse the suffix */ + reverse(L, p, t); /* reverse the entire segment */ + lua_unlock(L); +} + + +LUA_API void lua_copy (lua_State *L, int fromidx, int toidx) { + TValue *fr, *to; + lua_lock(L); + fr = index2addr(L, fromidx); + to = index2addr(L, toidx); + api_checkvalidindex(L, to); + setobj(L, to, fr); + if (isupvalue(toidx)) /* function upvalue? */ + luaC_barrier(L, clCvalue(L->ci->func), fr); + /* LUA_REGISTRYINDEX does not need gc barrier + (collector revisits it before finishing collection) */ + lua_unlock(L); +} + + +LUA_API void lua_pushvalue (lua_State *L, int idx) { + lua_lock(L); + setobj2s(L, L->top, index2addr(L, idx)); + api_incr_top(L); + lua_unlock(L); +} + + + +/* +** access functions (stack -> C) +*/ + + +LUA_API int lua_type (lua_State *L, int idx) { + StkId o = index2addr(L, idx); + return (isvalid(o) ? ttnov(o) : LUA_TNONE); +} + + +LUA_API const char *lua_typename (lua_State *L, int t) { + UNUSED(L); + api_check(L, LUA_TNONE <= t && t < LUA_NUMTAGS, "invalid tag"); + return ttypename(t); +} + + +LUA_API int lua_iscfunction (lua_State *L, int idx) { + StkId o = index2addr(L, idx); + return (ttislcf(o) || (ttisCclosure(o))); +} + + +LUA_API int lua_isinteger (lua_State *L, int idx) { + StkId o = index2addr(L, idx); + return ttisinteger(o); +} + + +LUA_API int lua_isnumber (lua_State *L, int idx) { + lua_Number n; + const TValue *o = index2addr(L, idx); + return tonumber(o, &n); +} + + +LUA_API int lua_isstring (lua_State *L, int idx) { + const TValue *o = index2addr(L, idx); + return (ttisstring(o) || cvt2str(o)); +} + + +LUA_API int lua_isuserdata (lua_State *L, int idx) { + const TValue *o = index2addr(L, idx); + return (ttisfulluserdata(o) || ttislightuserdata(o)); +} + + +LUA_API int lua_rawequal (lua_State *L, int index1, int index2) { + StkId o1 = index2addr(L, index1); + StkId o2 = index2addr(L, index2); + return (isvalid(o1) && isvalid(o2)) ? luaV_rawequalobj(o1, o2) : 0; +} + + +LUA_API void lua_arith (lua_State *L, int op) { + lua_lock(L); + if (op != LUA_OPUNM && op != LUA_OPBNOT) + api_checknelems(L, 2); /* all other operations expect two operands */ + else { /* for unary operations, add fake 2nd operand */ + api_checknelems(L, 1); + setobjs2s(L, L->top, L->top - 1); + api_incr_top(L); + } + /* first operand at top - 2, second at top - 1; result go to top - 2 */ + luaO_arith(L, op, L->top - 2, L->top - 1, L->top - 2); + L->top--; /* remove second operand */ + lua_unlock(L); +} + + +LUA_API int lua_compare (lua_State *L, int index1, int index2, int op) { + StkId o1, o2; + int i = 0; + lua_lock(L); /* may call tag method */ + o1 = index2addr(L, index1); + o2 = index2addr(L, index2); + if (isvalid(o1) && isvalid(o2)) { + switch (op) { + case LUA_OPEQ: i = luaV_equalobj(L, o1, o2); break; + case LUA_OPLT: i = luaV_lessthan(L, o1, o2); break; + case LUA_OPLE: i = luaV_lessequal(L, o1, o2); break; + default: api_check(L, 0, "invalid option"); + } + } + lua_unlock(L); + return i; +} + + +LUA_API size_t lua_stringtonumber (lua_State *L, const char *s) { + size_t sz = luaO_str2num(s, L->top); + if (sz != 0) + api_incr_top(L); + return sz; +} + + +LUA_API lua_Number lua_tonumberx (lua_State *L, int idx, int *pisnum) { + lua_Number n; + const TValue *o = index2addr(L, idx); + int isnum = tonumber(o, &n); + if (!isnum) + n = 0; /* call to 'tonumber' may change 'n' even if it fails */ + if (pisnum) *pisnum = isnum; + return n; +} + + +LUA_API lua_Integer lua_tointegerx (lua_State *L, int idx, int *pisnum) { + lua_Integer res; + const TValue *o = index2addr(L, idx); + int isnum = tointeger(o, &res); + if (!isnum) + res = 0; /* call to 'tointeger' may change 'n' even if it fails */ + if (pisnum) *pisnum = isnum; + return res; +} + + +LUA_API int lua_toboolean (lua_State *L, int idx) { + const TValue *o = index2addr(L, idx); + return !l_isfalse(o); +} + + +LUA_API const char *lua_tolstring (lua_State *L, int idx, size_t *len) { + StkId o = index2addr(L, idx); + if (!ttisstring(o)) { + if (!cvt2str(o)) { /* not convertible? */ + if (len != NULL) *len = 0; + return NULL; + } + lua_lock(L); /* 'luaO_tostring' may create a new string */ + luaO_tostring(L, o); + luaC_checkGC(L); + o = index2addr(L, idx); /* previous call may reallocate the stack */ + lua_unlock(L); + } + if (len != NULL) + *len = vslen(o); + return svalue(o); +} + + +LUA_API size_t lua_rawlen (lua_State *L, int idx) { + StkId o = index2addr(L, idx); + switch (ttype(o)) { + case LUA_TSHRSTR: return tsvalue(o)->shrlen; + case LUA_TLNGSTR: return tsvalue(o)->u.lnglen; + case LUA_TUSERDATA: return uvalue(o)->len; + case LUA_TTABLE: return luaH_getn(hvalue(o)); + default: return 0; + } +} + + +LUA_API lua_CFunction lua_tocfunction (lua_State *L, int idx) { + StkId o = index2addr(L, idx); + if (ttislcf(o)) return fvalue(o); + else if (ttisCclosure(o)) + return clCvalue(o)->f; + else return NULL; /* not a C function */ +} + + +LUA_API void *lua_touserdata (lua_State *L, int idx) { + StkId o = index2addr(L, idx); + switch (ttnov(o)) { + case LUA_TUSERDATA: return getudatamem(uvalue(o)); + case LUA_TLIGHTUSERDATA: return pvalue(o); + default: return NULL; + } +} + + +LUA_API lua_State *lua_tothread (lua_State *L, int idx) { + StkId o = index2addr(L, idx); + return (!ttisthread(o)) ? NULL : thvalue(o); +} + + +LUA_API const void *lua_topointer (lua_State *L, int idx) { + StkId o = index2addr(L, idx); + switch (ttype(o)) { + case LUA_TTABLE: return hvalue(o); + case LUA_TLCL: return clLvalue(o); + case LUA_TCCL: return clCvalue(o); + case LUA_TLCF: return cast(void *, cast(size_t, fvalue(o))); + case LUA_TTHREAD: return thvalue(o); + case LUA_TUSERDATA: return getudatamem(uvalue(o)); + case LUA_TLIGHTUSERDATA: return pvalue(o); + default: return NULL; + } +} + + + +/* +** push functions (C -> stack) +*/ + + +LUA_API void lua_pushnil (lua_State *L) { + lua_lock(L); + setnilvalue(L->top); + api_incr_top(L); + lua_unlock(L); +} + + +LUA_API void lua_pushnumber (lua_State *L, lua_Number n) { + lua_lock(L); + setfltvalue(L->top, n); + api_incr_top(L); + lua_unlock(L); +} + + +LUA_API void lua_pushinteger (lua_State *L, lua_Integer n) { + lua_lock(L); + setivalue(L->top, n); + api_incr_top(L); + lua_unlock(L); +} + + +/* +** Pushes on the stack a string with given length. Avoid using 's' when +** 'len' == 0 (as 's' can be NULL in that case), due to later use of +** 'memcmp' and 'memcpy'. +*/ +LUA_API const char *lua_pushlstring (lua_State *L, const char *s, size_t len) { + TString *ts; + lua_lock(L); + ts = (len == 0) ? luaS_new(L, "") : luaS_newlstr(L, s, len); + setsvalue2s(L, L->top, ts); + api_incr_top(L); + luaC_checkGC(L); + lua_unlock(L); + return getstr(ts); +} + + +LUA_API const char *lua_pushstring (lua_State *L, const char *s) { + lua_lock(L); + if (s == NULL) + setnilvalue(L->top); + else { + TString *ts; + ts = luaS_new(L, s); + setsvalue2s(L, L->top, ts); + s = getstr(ts); /* internal copy's address */ + } + api_incr_top(L); + luaC_checkGC(L); + lua_unlock(L); + return s; +} + + +LUA_API const char *lua_pushvfstring (lua_State *L, const char *fmt, + va_list argp) { + const char *ret; + lua_lock(L); + ret = luaO_pushvfstring(L, fmt, argp); + luaC_checkGC(L); + lua_unlock(L); + return ret; +} + + +LUA_API const char *lua_pushfstring (lua_State *L, const char *fmt, ...) { + const char *ret; + va_list argp; + lua_lock(L); + va_start(argp, fmt); + ret = luaO_pushvfstring(L, fmt, argp); + va_end(argp); + luaC_checkGC(L); + lua_unlock(L); + return ret; +} + + +LUA_API void lua_pushcclosure (lua_State *L, lua_CFunction fn, int n) { + lua_lock(L); + if (n == 0) { + setfvalue(L->top, fn); + } + else { + CClosure *cl; + api_checknelems(L, n); + api_check(L, n <= MAXUPVAL, "upvalue index too large"); + cl = luaF_newCclosure(L, n); + cl->f = fn; + L->top -= n; + while (n--) { + setobj2n(L, &cl->upvalue[n], L->top + n); + /* does not need barrier because closure is white */ + } + setclCvalue(L, L->top, cl); + } + api_incr_top(L); + luaC_checkGC(L); + lua_unlock(L); +} + + +LUA_API void lua_pushboolean (lua_State *L, int b) { + lua_lock(L); + setbvalue(L->top, (b != 0)); /* ensure that true is 1 */ + api_incr_top(L); + lua_unlock(L); +} + + +LUA_API void lua_pushlightuserdata (lua_State *L, void *p) { + lua_lock(L); + setpvalue(L->top, p); + api_incr_top(L); + lua_unlock(L); +} + + +LUA_API int lua_pushthread (lua_State *L) { + lua_lock(L); + setthvalue(L, L->top, L); + api_incr_top(L); + lua_unlock(L); + return (G(L)->mainthread == L); +} + + + +/* +** get functions (Lua -> stack) +*/ + + +static int auxgetstr (lua_State *L, const TValue *t, const char *k) { + const TValue *slot; + TString *str = luaS_new(L, k); + if (luaV_fastget(L, t, str, slot, luaH_getstr)) { + setobj2s(L, L->top, slot); + api_incr_top(L); + } + else { + setsvalue2s(L, L->top, str); + api_incr_top(L); + luaV_finishget(L, t, L->top - 1, L->top - 1, slot); + } + lua_unlock(L); + return ttnov(L->top - 1); +} + + +LUA_API int lua_getglobal (lua_State *L, const char *name) { + Table *reg = hvalue(&G(L)->l_registry); + lua_lock(L); + return auxgetstr(L, luaH_getint(reg, LUA_RIDX_GLOBALS), name); +} + + +LUA_API int lua_gettable (lua_State *L, int idx) { + StkId t; + lua_lock(L); + t = index2addr(L, idx); + luaV_gettable(L, t, L->top - 1, L->top - 1); + lua_unlock(L); + return ttnov(L->top - 1); +} + + +LUA_API int lua_getfield (lua_State *L, int idx, const char *k) { + lua_lock(L); + return auxgetstr(L, index2addr(L, idx), k); +} + + +LUA_API int lua_geti (lua_State *L, int idx, lua_Integer n) { + StkId t; + const TValue *slot; + lua_lock(L); + t = index2addr(L, idx); + if (luaV_fastget(L, t, n, slot, luaH_getint)) { + setobj2s(L, L->top, slot); + api_incr_top(L); + } + else { + setivalue(L->top, n); + api_incr_top(L); + luaV_finishget(L, t, L->top - 1, L->top - 1, slot); + } + lua_unlock(L); + return ttnov(L->top - 1); +} + + +LUA_API int lua_rawget (lua_State *L, int idx) { + StkId t; + lua_lock(L); + t = index2addr(L, idx); + api_check(L, ttistable(t), "table expected"); + setobj2s(L, L->top - 1, luaH_get(hvalue(t), L->top - 1)); + lua_unlock(L); + return ttnov(L->top - 1); +} + + +LUA_API int lua_rawgeti (lua_State *L, int idx, lua_Integer n) { + StkId t; + lua_lock(L); + t = index2addr(L, idx); + api_check(L, ttistable(t), "table expected"); + setobj2s(L, L->top, luaH_getint(hvalue(t), n)); + api_incr_top(L); + lua_unlock(L); + return ttnov(L->top - 1); +} + + +LUA_API int lua_rawgetp (lua_State *L, int idx, const void *p) { + StkId t; + TValue k; + lua_lock(L); + t = index2addr(L, idx); + api_check(L, ttistable(t), "table expected"); + setpvalue(&k, cast(void *, p)); + setobj2s(L, L->top, luaH_get(hvalue(t), &k)); + api_incr_top(L); + lua_unlock(L); + return ttnov(L->top - 1); +} + + +LUA_API void lua_createtable (lua_State *L, int narray, int nrec) { + Table *t; + lua_lock(L); + t = luaH_new(L); + sethvalue(L, L->top, t); + api_incr_top(L); + if (narray > 0 || nrec > 0) + luaH_resize(L, t, narray, nrec); + luaC_checkGC(L); + lua_unlock(L); +} + + +LUA_API int lua_getmetatable (lua_State *L, int objindex) { + const TValue *obj; + Table *mt; + int res = 0; + lua_lock(L); + obj = index2addr(L, objindex); + switch (ttnov(obj)) { + case LUA_TTABLE: + mt = hvalue(obj)->metatable; + break; + case LUA_TUSERDATA: + mt = uvalue(obj)->metatable; + break; + default: + mt = G(L)->mt[ttnov(obj)]; + break; + } + if (mt != NULL) { + sethvalue(L, L->top, mt); + api_incr_top(L); + res = 1; + } + lua_unlock(L); + return res; +} + + +LUA_API int lua_getuservalue (lua_State *L, int idx) { + StkId o; + lua_lock(L); + o = index2addr(L, idx); + api_check(L, ttisfulluserdata(o), "full userdata expected"); + getuservalue(L, uvalue(o), L->top); + api_incr_top(L); + lua_unlock(L); + return ttnov(L->top - 1); +} + + +/* +** set functions (stack -> Lua) +*/ + +/* +** t[k] = value at the top of the stack (where 'k' is a string) +*/ +static void auxsetstr (lua_State *L, const TValue *t, const char *k) { + const TValue *slot; + TString *str = luaS_new(L, k); + api_checknelems(L, 1); + if (luaV_fastset(L, t, str, slot, luaH_getstr, L->top - 1)) + L->top--; /* pop value */ + else { + setsvalue2s(L, L->top, str); /* push 'str' (to make it a TValue) */ + api_incr_top(L); + luaV_finishset(L, t, L->top - 1, L->top - 2, slot); + L->top -= 2; /* pop value and key */ + } + lua_unlock(L); /* lock done by caller */ +} + + +LUA_API void lua_setglobal (lua_State *L, const char *name) { + Table *reg = hvalue(&G(L)->l_registry); + lua_lock(L); /* unlock done in 'auxsetstr' */ + auxsetstr(L, luaH_getint(reg, LUA_RIDX_GLOBALS), name); +} + + +LUA_API void lua_settable (lua_State *L, int idx) { + StkId t; + lua_lock(L); + api_checknelems(L, 2); + t = index2addr(L, idx); + luaV_settable(L, t, L->top - 2, L->top - 1); + L->top -= 2; /* pop index and value */ + lua_unlock(L); +} + + +LUA_API void lua_setfield (lua_State *L, int idx, const char *k) { + lua_lock(L); /* unlock done in 'auxsetstr' */ + auxsetstr(L, index2addr(L, idx), k); +} + + +LUA_API void lua_seti (lua_State *L, int idx, lua_Integer n) { + StkId t; + const TValue *slot; + lua_lock(L); + api_checknelems(L, 1); + t = index2addr(L, idx); + if (luaV_fastset(L, t, n, slot, luaH_getint, L->top - 1)) + L->top--; /* pop value */ + else { + setivalue(L->top, n); + api_incr_top(L); + luaV_finishset(L, t, L->top - 1, L->top - 2, slot); + L->top -= 2; /* pop value and key */ + } + lua_unlock(L); +} + + +LUA_API void lua_rawset (lua_State *L, int idx) { + StkId o; + TValue *slot; + lua_lock(L); + api_checknelems(L, 2); + o = index2addr(L, idx); + api_check(L, ttistable(o), "table expected"); + slot = luaH_set(L, hvalue(o), L->top - 2); + setobj2t(L, slot, L->top - 1); + invalidateTMcache(hvalue(o)); + luaC_barrierback(L, hvalue(o), L->top-1); + L->top -= 2; + lua_unlock(L); +} + + +LUA_API void lua_rawseti (lua_State *L, int idx, lua_Integer n) { + StkId o; + lua_lock(L); + api_checknelems(L, 1); + o = index2addr(L, idx); + api_check(L, ttistable(o), "table expected"); + luaH_setint(L, hvalue(o), n, L->top - 1); + luaC_barrierback(L, hvalue(o), L->top-1); + L->top--; + lua_unlock(L); +} + + +LUA_API void lua_rawsetp (lua_State *L, int idx, const void *p) { + StkId o; + TValue k, *slot; + lua_lock(L); + api_checknelems(L, 1); + o = index2addr(L, idx); + api_check(L, ttistable(o), "table expected"); + setpvalue(&k, cast(void *, p)); + slot = luaH_set(L, hvalue(o), &k); + setobj2t(L, slot, L->top - 1); + luaC_barrierback(L, hvalue(o), L->top - 1); + L->top--; + lua_unlock(L); +} + + +LUA_API int lua_setmetatable (lua_State *L, int objindex) { + TValue *obj; + Table *mt; + lua_lock(L); + api_checknelems(L, 1); + obj = index2addr(L, objindex); + if (ttisnil(L->top - 1)) + mt = NULL; + else { + api_check(L, ttistable(L->top - 1), "table expected"); + mt = hvalue(L->top - 1); + } + switch (ttnov(obj)) { + case LUA_TTABLE: { + hvalue(obj)->metatable = mt; + if (mt) { + luaC_objbarrier(L, gcvalue(obj), mt); + luaC_checkfinalizer(L, gcvalue(obj), mt); + } + break; + } + case LUA_TUSERDATA: { + uvalue(obj)->metatable = mt; + if (mt) { + luaC_objbarrier(L, uvalue(obj), mt); + luaC_checkfinalizer(L, gcvalue(obj), mt); + } + break; + } + default: { + G(L)->mt[ttnov(obj)] = mt; + break; + } + } + L->top--; + lua_unlock(L); + return 1; +} + + +LUA_API void lua_setuservalue (lua_State *L, int idx) { + StkId o; + lua_lock(L); + api_checknelems(L, 1); + o = index2addr(L, idx); + api_check(L, ttisfulluserdata(o), "full userdata expected"); + setuservalue(L, uvalue(o), L->top - 1); + luaC_barrier(L, gcvalue(o), L->top - 1); + L->top--; + lua_unlock(L); +} + + +/* +** 'load' and 'call' functions (run Lua code) +*/ + + +#define checkresults(L,na,nr) \ + api_check(L, (nr) == LUA_MULTRET || (L->ci->top - L->top >= (nr) - (na)), \ + "results from function overflow current stack size") + + +LUA_API void lua_callk (lua_State *L, int nargs, int nresults, + lua_KContext ctx, lua_KFunction k) { + StkId func; + lua_lock(L); + api_check(L, k == NULL || !isLua(L->ci), + "cannot use continuations inside hooks"); + api_checknelems(L, nargs+1); + api_check(L, L->status == LUA_OK, "cannot do calls on non-normal thread"); + checkresults(L, nargs, nresults); + func = L->top - (nargs+1); + if (k != NULL && L->nny == 0) { /* need to prepare continuation? */ + L->ci->u.c.k = k; /* save continuation */ + L->ci->u.c.ctx = ctx; /* save context */ + luaD_call(L, func, nresults); /* do the call */ + } + else /* no continuation or no yieldable */ + luaD_callnoyield(L, func, nresults); /* just do the call */ + adjustresults(L, nresults); + lua_unlock(L); +} + + + +/* +** Execute a protected call. +*/ +struct CallS { /* data to 'f_call' */ + StkId func; + int nresults; +}; + + +static void f_call (lua_State *L, void *ud) { + struct CallS *c = cast(struct CallS *, ud); + luaD_callnoyield(L, c->func, c->nresults); +} + + + +LUA_API int lua_pcallk (lua_State *L, int nargs, int nresults, int errfunc, + lua_KContext ctx, lua_KFunction k) { + struct CallS c; + int status; + ptrdiff_t func; + lua_lock(L); + api_check(L, k == NULL || !isLua(L->ci), + "cannot use continuations inside hooks"); + api_checknelems(L, nargs+1); + api_check(L, L->status == LUA_OK, "cannot do calls on non-normal thread"); + checkresults(L, nargs, nresults); + if (errfunc == 0) + func = 0; + else { + StkId o = index2addr(L, errfunc); + api_checkstackindex(L, errfunc, o); + func = savestack(L, o); + } + c.func = L->top - (nargs+1); /* function to be called */ + if (k == NULL || L->nny > 0) { /* no continuation or no yieldable? */ + c.nresults = nresults; /* do a 'conventional' protected call */ + status = luaD_pcall(L, f_call, &c, savestack(L, c.func), func); + } + else { /* prepare continuation (call is already protected by 'resume') */ + CallInfo *ci = L->ci; + ci->u.c.k = k; /* save continuation */ + ci->u.c.ctx = ctx; /* save context */ + /* save information for error recovery */ + ci->extra = savestack(L, c.func); + ci->u.c.old_errfunc = L->errfunc; + L->errfunc = func; + setoah(ci->callstatus, L->allowhook); /* save value of 'allowhook' */ + ci->callstatus |= CIST_YPCALL; /* function can do error recovery */ + luaD_call(L, c.func, nresults); /* do the call */ + ci->callstatus &= ~CIST_YPCALL; + L->errfunc = ci->u.c.old_errfunc; + status = LUA_OK; /* if it is here, there were no errors */ + } + adjustresults(L, nresults); + lua_unlock(L); + return status; +} + + +LUA_API int lua_load (lua_State *L, lua_Reader reader, void *data, + const char *chunkname, const char *mode) { + ZIO z; + int status; + lua_lock(L); + if (!chunkname) chunkname = "?"; + luaZ_init(L, &z, reader, data); + status = luaD_protectedparser(L, &z, chunkname, mode); + if (status == LUA_OK) { /* no errors? */ + LClosure *f = clLvalue(L->top - 1); /* get newly created function */ + if (f->nupvalues >= 1) { /* does it have an upvalue? */ + /* get global table from registry */ + Table *reg = hvalue(&G(L)->l_registry); + const TValue *gt = luaH_getint(reg, LUA_RIDX_GLOBALS); + /* set global table as 1st upvalue of 'f' (may be LUA_ENV) */ + setobj(L, f->upvals[0]->v, gt); + luaC_upvalbarrier(L, f->upvals[0]); + } + } + lua_unlock(L); + return status; +} + + +LUA_API int lua_dump (lua_State *L, lua_Writer writer, void *data, int strip) { + int status; + TValue *o; + lua_lock(L); + api_checknelems(L, 1); + o = L->top - 1; + if (isLfunction(o)) + status = luaU_dump(L, getproto(o), writer, data, strip); + else + status = 1; + lua_unlock(L); + return status; +} + + +LUA_API int lua_status (lua_State *L) { + return L->status; +} + + +/* +** Garbage-collection function +*/ + +LUA_API int lua_gc (lua_State *L, int what, int data) { + int res = 0; + global_State *g; + lua_lock(L); + g = G(L); + switch (what) { + case LUA_GCSTOP: { + g->gcrunning = 0; + break; + } + case LUA_GCRESTART: { + luaE_setdebt(g, 0); + g->gcrunning = 1; + break; + } + case LUA_GCCOLLECT: { + luaC_fullgc(L, 0); + break; + } + case LUA_GCCOUNT: { + /* GC values are expressed in Kbytes: #bytes/2^10 */ + res = cast_int(gettotalbytes(g) >> 10); + break; + } + case LUA_GCCOUNTB: { + res = cast_int(gettotalbytes(g) & 0x3ff); + break; + } + case LUA_GCSTEP: { + l_mem debt = 1; /* =1 to signal that it did an actual step */ + lu_byte oldrunning = g->gcrunning; + g->gcrunning = 1; /* allow GC to run */ + if (data == 0) { + luaE_setdebt(g, -GCSTEPSIZE); /* to do a "small" step */ + luaC_step(L); + } + else { /* add 'data' to total debt */ + debt = cast(l_mem, data) * 1024 + g->GCdebt; + luaE_setdebt(g, debt); + luaC_checkGC(L); + } + g->gcrunning = oldrunning; /* restore previous state */ + if (debt > 0 && g->gcstate == GCSpause) /* end of cycle? */ + res = 1; /* signal it */ + break; + } + case LUA_GCSETPAUSE: { + res = g->gcpause; + g->gcpause = data; + break; + } + case LUA_GCSETSTEPMUL: { + res = g->gcstepmul; + if (data < 40) data = 40; /* avoid ridiculous low values (and 0) */ + g->gcstepmul = data; + break; + } + case LUA_GCISRUNNING: { + res = g->gcrunning; + break; + } + default: res = -1; /* invalid option */ + } + lua_unlock(L); + return res; +} + + + +/* +** miscellaneous functions +*/ + + +LUA_API int lua_error (lua_State *L) { + lua_lock(L); + api_checknelems(L, 1); + luaG_errormsg(L); + /* code unreachable; will unlock when control actually leaves the kernel */ + return 0; /* to avoid warnings */ +} + + +LUA_API int lua_next (lua_State *L, int idx) { + StkId t; + int more; + lua_lock(L); + t = index2addr(L, idx); + api_check(L, ttistable(t), "table expected"); + more = luaH_next(L, hvalue(t), L->top - 1); + if (more) { + api_incr_top(L); + } + else /* no more elements */ + L->top -= 1; /* remove key */ + lua_unlock(L); + return more; +} + + +LUA_API void lua_concat (lua_State *L, int n) { + lua_lock(L); + api_checknelems(L, n); + if (n >= 2) { + luaV_concat(L, n); + } + else if (n == 0) { /* push empty string */ + setsvalue2s(L, L->top, luaS_newlstr(L, "", 0)); + api_incr_top(L); + } + /* else n == 1; nothing to do */ + luaC_checkGC(L); + lua_unlock(L); +} + + +LUA_API void lua_len (lua_State *L, int idx) { + StkId t; + lua_lock(L); + t = index2addr(L, idx); + luaV_objlen(L, L->top, t); + api_incr_top(L); + lua_unlock(L); +} + + +LUA_API lua_Alloc lua_getallocf (lua_State *L, void **ud) { + lua_Alloc f; + lua_lock(L); + if (ud) *ud = G(L)->ud; + f = G(L)->frealloc; + lua_unlock(L); + return f; +} + + +LUA_API void lua_setallocf (lua_State *L, lua_Alloc f, void *ud) { + lua_lock(L); + G(L)->ud = ud; + G(L)->frealloc = f; + lua_unlock(L); +} + + +LUA_API void *lua_newuserdata (lua_State *L, size_t size) { + Udata *u; + lua_lock(L); + u = luaS_newudata(L, size); + setuvalue(L, L->top, u); + api_incr_top(L); + luaC_checkGC(L); + lua_unlock(L); + return getudatamem(u); +} + + + +static const char *aux_upvalue (StkId fi, int n, TValue **val, + CClosure **owner, UpVal **uv) { + switch (ttype(fi)) { + case LUA_TCCL: { /* C closure */ + CClosure *f = clCvalue(fi); + if (!(1 <= n && n <= f->nupvalues)) return NULL; + *val = &f->upvalue[n-1]; + if (owner) *owner = f; + return ""; + } + case LUA_TLCL: { /* Lua closure */ + LClosure *f = clLvalue(fi); + TString *name; + Proto *p = f->p; + if (!(1 <= n && n <= p->sizeupvalues)) return NULL; + *val = f->upvals[n-1]->v; + if (uv) *uv = f->upvals[n - 1]; + name = p->upvalues[n-1].name; + return (name == NULL) ? "(*no name)" : getstr(name); + } + default: return NULL; /* not a closure */ + } +} + + +LUA_API const char *lua_getupvalue (lua_State *L, int funcindex, int n) { + const char *name; + TValue *val = NULL; /* to avoid warnings */ + lua_lock(L); + name = aux_upvalue(index2addr(L, funcindex), n, &val, NULL, NULL); + if (name) { + setobj2s(L, L->top, val); + api_incr_top(L); + } + lua_unlock(L); + return name; +} + + +LUA_API const char *lua_setupvalue (lua_State *L, int funcindex, int n) { + const char *name; + TValue *val = NULL; /* to avoid warnings */ + CClosure *owner = NULL; + UpVal *uv = NULL; + StkId fi; + lua_lock(L); + fi = index2addr(L, funcindex); + api_checknelems(L, 1); + name = aux_upvalue(fi, n, &val, &owner, &uv); + if (name) { + L->top--; + setobj(L, val, L->top); + if (owner) { luaC_barrier(L, owner, L->top); } + else if (uv) { luaC_upvalbarrier(L, uv); } + } + lua_unlock(L); + return name; +} + + +static UpVal **getupvalref (lua_State *L, int fidx, int n, LClosure **pf) { + LClosure *f; + StkId fi = index2addr(L, fidx); + api_check(L, ttisLclosure(fi), "Lua function expected"); + f = clLvalue(fi); + api_check(L, (1 <= n && n <= f->p->sizeupvalues), "invalid upvalue index"); + if (pf) *pf = f; + return &f->upvals[n - 1]; /* get its upvalue pointer */ +} + + +LUA_API void *lua_upvalueid (lua_State *L, int fidx, int n) { + StkId fi = index2addr(L, fidx); + switch (ttype(fi)) { + case LUA_TLCL: { /* lua closure */ + return *getupvalref(L, fidx, n, NULL); + } + case LUA_TCCL: { /* C closure */ + CClosure *f = clCvalue(fi); + api_check(L, 1 <= n && n <= f->nupvalues, "invalid upvalue index"); + return &f->upvalue[n - 1]; + } + default: { + api_check(L, 0, "closure expected"); + return NULL; + } + } +} + + +LUA_API void lua_upvaluejoin (lua_State *L, int fidx1, int n1, + int fidx2, int n2) { + LClosure *f1; + UpVal **up1 = getupvalref(L, fidx1, n1, &f1); + UpVal **up2 = getupvalref(L, fidx2, n2, NULL); + luaC_upvdeccount(L, *up1); + *up1 = *up2; + (*up1)->refcount++; + if (upisopen(*up1)) (*up1)->u.open.touched = 1; + luaC_upvalbarrier(L, *up1); +} + + diff --git a/EQ2/source/LUA/lapi.h b/EQ2/source/LUA/lapi.h new file mode 100644 index 000000000..6d36dee3f --- /dev/null +++ b/EQ2/source/LUA/lapi.h @@ -0,0 +1,24 @@ +/* +** $Id: lapi.h,v 2.9 2015/03/06 19:49:50 roberto Exp $ +** Auxiliary functions from Lua API +** See Copyright Notice in lua.h +*/ + +#ifndef lapi_h +#define lapi_h + + +#include "llimits.h" +#include "lstate.h" + +#define api_incr_top(L) {L->top++; api_check(L, L->top <= L->ci->top, \ + "stack overflow");} + +#define adjustresults(L,nres) \ + { if ((nres) == LUA_MULTRET && L->ci->top < L->top) L->ci->top = L->top; } + +#define api_checknelems(L,n) api_check(L, (n) < (L->top - L->ci->func), \ + "not enough elements in the stack") + + +#endif diff --git a/EQ2/source/LUA/lauxlib.c b/EQ2/source/LUA/lauxlib.c new file mode 100644 index 000000000..f7a383663 --- /dev/null +++ b/EQ2/source/LUA/lauxlib.c @@ -0,0 +1,1043 @@ +/* +** $Id: lauxlib.c,v 1.289 2016/12/20 18:37:00 roberto Exp $ +** Auxiliary functions for building Lua libraries +** See Copyright Notice in lua.h +*/ + +#define lauxlib_c +#define LUA_LIB + +#include "lprefix.h" + + +#include +#include +#include +#include +#include + + +/* +** This file uses only the official API of Lua. +** Any function declared here could be written as an application function. +*/ + +#include "lua.h" + +#include "lauxlib.h" + + +/* +** {====================================================== +** Traceback +** ======================================================= +*/ + + +#define LEVELS1 10 /* size of the first part of the stack */ +#define LEVELS2 11 /* size of the second part of the stack */ + + + +/* +** search for 'objidx' in table at index -1. +** return 1 + string at top if find a good name. +*/ +static int findfield (lua_State *L, int objidx, int level) { + if (level == 0 || !lua_istable(L, -1)) + return 0; /* not found */ + lua_pushnil(L); /* start 'next' loop */ + while (lua_next(L, -2)) { /* for each pair in table */ + if (lua_type(L, -2) == LUA_TSTRING) { /* ignore non-string keys */ + if (lua_rawequal(L, objidx, -1)) { /* found object? */ + lua_pop(L, 1); /* remove value (but keep name) */ + return 1; + } + else if (findfield(L, objidx, level - 1)) { /* try recursively */ + lua_remove(L, -2); /* remove table (but keep name) */ + lua_pushliteral(L, "."); + lua_insert(L, -2); /* place '.' between the two names */ + lua_concat(L, 3); + return 1; + } + } + lua_pop(L, 1); /* remove value */ + } + return 0; /* not found */ +} + + +/* +** Search for a name for a function in all loaded modules +*/ +static int pushglobalfuncname (lua_State *L, lua_Debug *ar) { + int top = lua_gettop(L); + lua_getinfo(L, "f", ar); /* push function */ + lua_getfield(L, LUA_REGISTRYINDEX, LUA_LOADED_TABLE); + if (findfield(L, top + 1, 2)) { + const char *name = lua_tostring(L, -1); + if (strncmp(name, "_G.", 3) == 0) { /* name start with '_G.'? */ + lua_pushstring(L, name + 3); /* push name without prefix */ + lua_remove(L, -2); /* remove original name */ + } + lua_copy(L, -1, top + 1); /* move name to proper place */ + lua_pop(L, 2); /* remove pushed values */ + return 1; + } + else { + lua_settop(L, top); /* remove function and global table */ + return 0; + } +} + + +static void pushfuncname (lua_State *L, lua_Debug *ar) { + if (pushglobalfuncname(L, ar)) { /* try first a global name */ + lua_pushfstring(L, "function '%s'", lua_tostring(L, -1)); + lua_remove(L, -2); /* remove name */ + } + else if (*ar->namewhat != '\0') /* is there a name from code? */ + lua_pushfstring(L, "%s '%s'", ar->namewhat, ar->name); /* use it */ + else if (*ar->what == 'm') /* main? */ + lua_pushliteral(L, "main chunk"); + else if (*ar->what != 'C') /* for Lua functions, use */ + lua_pushfstring(L, "function <%s:%d>", ar->short_src, ar->linedefined); + else /* nothing left... */ + lua_pushliteral(L, "?"); +} + + +static int lastlevel (lua_State *L) { + lua_Debug ar; + int li = 1, le = 1; + /* find an upper bound */ + while (lua_getstack(L, le, &ar)) { li = le; le *= 2; } + /* do a binary search */ + while (li < le) { + int m = (li + le)/2; + if (lua_getstack(L, m, &ar)) li = m + 1; + else le = m; + } + return le - 1; +} + + +LUALIB_API void luaL_traceback (lua_State *L, lua_State *L1, + const char *msg, int level) { + lua_Debug ar; + int top = lua_gettop(L); + int last = lastlevel(L1); + int n1 = (last - level > LEVELS1 + LEVELS2) ? LEVELS1 : -1; + if (msg) + lua_pushfstring(L, "%s\n", msg); + luaL_checkstack(L, 10, NULL); + lua_pushliteral(L, "stack traceback:"); + while (lua_getstack(L1, level++, &ar)) { + if (n1-- == 0) { /* too many levels? */ + lua_pushliteral(L, "\n\t..."); /* add a '...' */ + level = last - LEVELS2 + 1; /* and skip to last ones */ + } + else { + lua_getinfo(L1, "Slnt", &ar); + lua_pushfstring(L, "\n\t%s:", ar.short_src); + if (ar.currentline > 0) + lua_pushfstring(L, "%d:", ar.currentline); + lua_pushliteral(L, " in "); + pushfuncname(L, &ar); + if (ar.istailcall) + lua_pushliteral(L, "\n\t(...tail calls...)"); + lua_concat(L, lua_gettop(L) - top); + } + } + lua_concat(L, lua_gettop(L) - top); +} + +/* }====================================================== */ + + +/* +** {====================================================== +** Error-report functions +** ======================================================= +*/ + +LUALIB_API int luaL_argerror (lua_State *L, int arg, const char *extramsg) { + lua_Debug ar; + if (!lua_getstack(L, 0, &ar)) /* no stack frame? */ + return luaL_error(L, "bad argument #%d (%s)", arg, extramsg); + lua_getinfo(L, "n", &ar); + if (strcmp(ar.namewhat, "method") == 0) { + arg--; /* do not count 'self' */ + if (arg == 0) /* error is in the self argument itself? */ + return luaL_error(L, "calling '%s' on bad self (%s)", + ar.name, extramsg); + } + if (ar.name == NULL) + ar.name = (pushglobalfuncname(L, &ar)) ? lua_tostring(L, -1) : "?"; + return luaL_error(L, "bad argument #%d to '%s' (%s)", + arg, ar.name, extramsg); +} + + +static int typeerror (lua_State *L, int arg, const char *tname) { + const char *msg; + const char *typearg; /* name for the type of the actual argument */ + if (luaL_getmetafield(L, arg, "__name") == LUA_TSTRING) + typearg = lua_tostring(L, -1); /* use the given type name */ + else if (lua_type(L, arg) == LUA_TLIGHTUSERDATA) + typearg = "light userdata"; /* special name for messages */ + else + typearg = luaL_typename(L, arg); /* standard name */ + msg = lua_pushfstring(L, "%s expected, got %s", tname, typearg); + return luaL_argerror(L, arg, msg); +} + + +static void tag_error (lua_State *L, int arg, int tag) { + typeerror(L, arg, lua_typename(L, tag)); +} + + +/* +** The use of 'lua_pushfstring' ensures this function does not +** need reserved stack space when called. +*/ +LUALIB_API void luaL_where (lua_State *L, int level) { + lua_Debug ar; + if (lua_getstack(L, level, &ar)) { /* check function at level */ + lua_getinfo(L, "Sl", &ar); /* get info about it */ + if (ar.currentline > 0) { /* is there info? */ + lua_pushfstring(L, "%s:%d: ", ar.short_src, ar.currentline); + return; + } + } + lua_pushfstring(L, ""); /* else, no information available... */ +} + + +/* +** Again, the use of 'lua_pushvfstring' ensures this function does +** not need reserved stack space when called. (At worst, it generates +** an error with "stack overflow" instead of the given message.) +*/ +LUALIB_API int luaL_error (lua_State *L, const char *fmt, ...) { + va_list argp; + va_start(argp, fmt); + luaL_where(L, 1); + lua_pushvfstring(L, fmt, argp); + va_end(argp); + lua_concat(L, 2); + return lua_error(L); +} + + +LUALIB_API int luaL_fileresult (lua_State *L, int stat, const char *fname) { + int en = errno; /* calls to Lua API may change this value */ + if (stat) { + lua_pushboolean(L, 1); + return 1; + } + else { + lua_pushnil(L); + if (fname) + lua_pushfstring(L, "%s: %s", fname, strerror(en)); + else + lua_pushstring(L, strerror(en)); + lua_pushinteger(L, en); + return 3; + } +} + + +#if !defined(l_inspectstat) /* { */ + +#if defined(LUA_USE_POSIX) + +#include + +/* +** use appropriate macros to interpret 'pclose' return status +*/ +#define l_inspectstat(stat,what) \ + if (WIFEXITED(stat)) { stat = WEXITSTATUS(stat); } \ + else if (WIFSIGNALED(stat)) { stat = WTERMSIG(stat); what = "signal"; } + +#else + +#define l_inspectstat(stat,what) /* no op */ + +#endif + +#endif /* } */ + + +LUALIB_API int luaL_execresult (lua_State *L, int stat) { + const char *what = "exit"; /* type of termination */ + if (stat == -1) /* error? */ + return luaL_fileresult(L, 0, NULL); + else { + l_inspectstat(stat, what); /* interpret result */ + if (*what == 'e' && stat == 0) /* successful termination? */ + lua_pushboolean(L, 1); + else + lua_pushnil(L); + lua_pushstring(L, what); + lua_pushinteger(L, stat); + return 3; /* return true/nil,what,code */ + } +} + +/* }====================================================== */ + + +/* +** {====================================================== +** Userdata's metatable manipulation +** ======================================================= +*/ + +LUALIB_API int luaL_newmetatable (lua_State *L, const char *tname) { + if (luaL_getmetatable(L, tname) != LUA_TNIL) /* name already in use? */ + return 0; /* leave previous value on top, but return 0 */ + lua_pop(L, 1); + lua_createtable(L, 0, 2); /* create metatable */ + lua_pushstring(L, tname); + lua_setfield(L, -2, "__name"); /* metatable.__name = tname */ + lua_pushvalue(L, -1); + lua_setfield(L, LUA_REGISTRYINDEX, tname); /* registry.name = metatable */ + return 1; +} + + +LUALIB_API void luaL_setmetatable (lua_State *L, const char *tname) { + luaL_getmetatable(L, tname); + lua_setmetatable(L, -2); +} + + +LUALIB_API void *luaL_testudata (lua_State *L, int ud, const char *tname) { + void *p = lua_touserdata(L, ud); + if (p != NULL) { /* value is a userdata? */ + if (lua_getmetatable(L, ud)) { /* does it have a metatable? */ + luaL_getmetatable(L, tname); /* get correct metatable */ + if (!lua_rawequal(L, -1, -2)) /* not the same? */ + p = NULL; /* value is a userdata with wrong metatable */ + lua_pop(L, 2); /* remove both metatables */ + return p; + } + } + return NULL; /* value is not a userdata with a metatable */ +} + + +LUALIB_API void *luaL_checkudata (lua_State *L, int ud, const char *tname) { + void *p = luaL_testudata(L, ud, tname); + if (p == NULL) typeerror(L, ud, tname); + return p; +} + +/* }====================================================== */ + + +/* +** {====================================================== +** Argument check functions +** ======================================================= +*/ + +LUALIB_API int luaL_checkoption (lua_State *L, int arg, const char *def, + const char *const lst[]) { + const char *name = (def) ? luaL_optstring(L, arg, def) : + luaL_checkstring(L, arg); + int i; + for (i=0; lst[i]; i++) + if (strcmp(lst[i], name) == 0) + return i; + return luaL_argerror(L, arg, + lua_pushfstring(L, "invalid option '%s'", name)); +} + + +/* +** Ensures the stack has at least 'space' extra slots, raising an error +** if it cannot fulfill the request. (The error handling needs a few +** extra slots to format the error message. In case of an error without +** this extra space, Lua will generate the same 'stack overflow' error, +** but without 'msg'.) +*/ +LUALIB_API void luaL_checkstack (lua_State *L, int space, const char *msg) { + if (!lua_checkstack(L, space)) { + if (msg) + luaL_error(L, "stack overflow (%s)", msg); + else + luaL_error(L, "stack overflow"); + } +} + + +LUALIB_API void luaL_checktype (lua_State *L, int arg, int t) { + if (lua_type(L, arg) != t) + tag_error(L, arg, t); +} + + +LUALIB_API void luaL_checkany (lua_State *L, int arg) { + if (lua_type(L, arg) == LUA_TNONE) + luaL_argerror(L, arg, "value expected"); +} + + +LUALIB_API const char *luaL_checklstring (lua_State *L, int arg, size_t *len) { + const char *s = lua_tolstring(L, arg, len); + if (!s) tag_error(L, arg, LUA_TSTRING); + return s; +} + + +LUALIB_API const char *luaL_optlstring (lua_State *L, int arg, + const char *def, size_t *len) { + if (lua_isnoneornil(L, arg)) { + if (len) + *len = (def ? strlen(def) : 0); + return def; + } + else return luaL_checklstring(L, arg, len); +} + + +LUALIB_API lua_Number luaL_checknumber (lua_State *L, int arg) { + int isnum; + lua_Number d = lua_tonumberx(L, arg, &isnum); + if (!isnum) + tag_error(L, arg, LUA_TNUMBER); + return d; +} + + +LUALIB_API lua_Number luaL_optnumber (lua_State *L, int arg, lua_Number def) { + return luaL_opt(L, luaL_checknumber, arg, def); +} + + +static void interror (lua_State *L, int arg) { + if (lua_isnumber(L, arg)) + luaL_argerror(L, arg, "number has no integer representation"); + else + tag_error(L, arg, LUA_TNUMBER); +} + + +LUALIB_API lua_Integer luaL_checkinteger (lua_State *L, int arg) { + int isnum; + lua_Integer d = lua_tointegerx(L, arg, &isnum); + if (!isnum) { + interror(L, arg); + } + return d; +} + + +LUALIB_API lua_Integer luaL_optinteger (lua_State *L, int arg, + lua_Integer def) { + return luaL_opt(L, luaL_checkinteger, arg, def); +} + +/* }====================================================== */ + + +/* +** {====================================================== +** Generic Buffer manipulation +** ======================================================= +*/ + +/* userdata to box arbitrary data */ +typedef struct UBox { + void *box; + size_t bsize; +} UBox; + + +static void *resizebox (lua_State *L, int idx, size_t newsize) { + void *ud; + lua_Alloc allocf = lua_getallocf(L, &ud); + UBox *box = (UBox *)lua_touserdata(L, idx); + void *temp = allocf(ud, box->box, box->bsize, newsize); + if (temp == NULL && newsize > 0) { /* allocation error? */ + resizebox(L, idx, 0); /* free buffer */ + luaL_error(L, "not enough memory for buffer allocation"); + } + box->box = temp; + box->bsize = newsize; + return temp; +} + + +static int boxgc (lua_State *L) { + resizebox(L, 1, 0); + return 0; +} + + +static void *newbox (lua_State *L, size_t newsize) { + UBox *box = (UBox *)lua_newuserdata(L, sizeof(UBox)); + box->box = NULL; + box->bsize = 0; + if (luaL_newmetatable(L, "LUABOX")) { /* creating metatable? */ + lua_pushcfunction(L, boxgc); + lua_setfield(L, -2, "__gc"); /* metatable.__gc = boxgc */ + } + lua_setmetatable(L, -2); + return resizebox(L, -1, newsize); +} + + +/* +** check whether buffer is using a userdata on the stack as a temporary +** buffer +*/ +#define buffonstack(B) ((B)->b != (B)->initb) + + +/* +** returns a pointer to a free area with at least 'sz' bytes +*/ +LUALIB_API char *luaL_prepbuffsize (luaL_Buffer *B, size_t sz) { + lua_State *L = B->L; + if (B->size - B->n < sz) { /* not enough space? */ + char *newbuff; + size_t newsize = B->size * 2; /* double buffer size */ + if (newsize - B->n < sz) /* not big enough? */ + newsize = B->n + sz; + if (newsize < B->n || newsize - B->n < sz) + luaL_error(L, "buffer too large"); + /* create larger buffer */ + if (buffonstack(B)) + newbuff = (char *)resizebox(L, -1, newsize); + else { /* no buffer yet */ + newbuff = (char *)newbox(L, newsize); + memcpy(newbuff, B->b, B->n * sizeof(char)); /* copy original content */ + } + B->b = newbuff; + B->size = newsize; + } + return &B->b[B->n]; +} + + +LUALIB_API void luaL_addlstring (luaL_Buffer *B, const char *s, size_t l) { + if (l > 0) { /* avoid 'memcpy' when 's' can be NULL */ + char *b = luaL_prepbuffsize(B, l); + memcpy(b, s, l * sizeof(char)); + luaL_addsize(B, l); + } +} + + +LUALIB_API void luaL_addstring (luaL_Buffer *B, const char *s) { + luaL_addlstring(B, s, strlen(s)); +} + + +LUALIB_API void luaL_pushresult (luaL_Buffer *B) { + lua_State *L = B->L; + lua_pushlstring(L, B->b, B->n); + if (buffonstack(B)) { + resizebox(L, -2, 0); /* delete old buffer */ + lua_remove(L, -2); /* remove its header from the stack */ + } +} + + +LUALIB_API void luaL_pushresultsize (luaL_Buffer *B, size_t sz) { + luaL_addsize(B, sz); + luaL_pushresult(B); +} + + +LUALIB_API void luaL_addvalue (luaL_Buffer *B) { + lua_State *L = B->L; + size_t l; + const char *s = lua_tolstring(L, -1, &l); + if (buffonstack(B)) + lua_insert(L, -2); /* put value below buffer */ + luaL_addlstring(B, s, l); + lua_remove(L, (buffonstack(B)) ? -2 : -1); /* remove value */ +} + + +LUALIB_API void luaL_buffinit (lua_State *L, luaL_Buffer *B) { + B->L = L; + B->b = B->initb; + B->n = 0; + B->size = LUAL_BUFFERSIZE; +} + + +LUALIB_API char *luaL_buffinitsize (lua_State *L, luaL_Buffer *B, size_t sz) { + luaL_buffinit(L, B); + return luaL_prepbuffsize(B, sz); +} + +/* }====================================================== */ + + +/* +** {====================================================== +** Reference system +** ======================================================= +*/ + +/* index of free-list header */ +#define freelist 0 + + +LUALIB_API int luaL_ref (lua_State *L, int t) { + int ref; + if (lua_isnil(L, -1)) { + lua_pop(L, 1); /* remove from stack */ + return LUA_REFNIL; /* 'nil' has a unique fixed reference */ + } + t = lua_absindex(L, t); + lua_rawgeti(L, t, freelist); /* get first free element */ + ref = (int)lua_tointeger(L, -1); /* ref = t[freelist] */ + lua_pop(L, 1); /* remove it from stack */ + if (ref != 0) { /* any free element? */ + lua_rawgeti(L, t, ref); /* remove it from list */ + lua_rawseti(L, t, freelist); /* (t[freelist] = t[ref]) */ + } + else /* no free elements */ + ref = (int)lua_rawlen(L, t) + 1; /* get a new reference */ + lua_rawseti(L, t, ref); + return ref; +} + + +LUALIB_API void luaL_unref (lua_State *L, int t, int ref) { + if (ref >= 0) { + t = lua_absindex(L, t); + lua_rawgeti(L, t, freelist); + lua_rawseti(L, t, ref); /* t[ref] = t[freelist] */ + lua_pushinteger(L, ref); + lua_rawseti(L, t, freelist); /* t[freelist] = ref */ + } +} + +/* }====================================================== */ + + +/* +** {====================================================== +** Load functions +** ======================================================= +*/ + +typedef struct LoadF { + int n; /* number of pre-read characters */ + FILE *f; /* file being read */ + char buff[BUFSIZ]; /* area for reading file */ +} LoadF; + + +static const char *getF (lua_State *L, void *ud, size_t *size) { + LoadF *lf = (LoadF *)ud; + (void)L; /* not used */ + if (lf->n > 0) { /* are there pre-read characters to be read? */ + *size = lf->n; /* return them (chars already in buffer) */ + lf->n = 0; /* no more pre-read characters */ + } + else { /* read a block from file */ + /* 'fread' can return > 0 *and* set the EOF flag. If next call to + 'getF' called 'fread', it might still wait for user input. + The next check avoids this problem. */ + if (feof(lf->f)) return NULL; + *size = fread(lf->buff, 1, sizeof(lf->buff), lf->f); /* read block */ + } + return lf->buff; +} + + +static int errfile (lua_State *L, const char *what, int fnameindex) { + const char *serr = strerror(errno); + const char *filename = lua_tostring(L, fnameindex) + 1; + lua_pushfstring(L, "cannot %s %s: %s", what, filename, serr); + lua_remove(L, fnameindex); + return LUA_ERRFILE; +} + + +static int skipBOM (LoadF *lf) { + const char *p = "\xEF\xBB\xBF"; /* UTF-8 BOM mark */ + int c; + lf->n = 0; + do { + c = getc(lf->f); + if (c == EOF || c != *(const unsigned char *)p++) return c; + lf->buff[lf->n++] = c; /* to be read by the parser */ + } while (*p != '\0'); + lf->n = 0; /* prefix matched; discard it */ + return getc(lf->f); /* return next character */ +} + + +/* +** reads the first character of file 'f' and skips an optional BOM mark +** in its beginning plus its first line if it starts with '#'. Returns +** true if it skipped the first line. In any case, '*cp' has the +** first "valid" character of the file (after the optional BOM and +** a first-line comment). +*/ +static int skipcomment (LoadF *lf, int *cp) { + int c = *cp = skipBOM(lf); + if (c == '#') { /* first line is a comment (Unix exec. file)? */ + do { /* skip first line */ + c = getc(lf->f); + } while (c != EOF && c != '\n'); + *cp = getc(lf->f); /* skip end-of-line, if present */ + return 1; /* there was a comment */ + } + else return 0; /* no comment */ +} + + +LUALIB_API int luaL_loadfilex (lua_State *L, const char *filename, + const char *mode) { + LoadF lf; + int status, readstatus; + int c; + int fnameindex = lua_gettop(L) + 1; /* index of filename on the stack */ + if (filename == NULL) { + lua_pushliteral(L, "=stdin"); + lf.f = stdin; + } + else { + lua_pushfstring(L, "@%s", filename); + lf.f = fopen(filename, "r"); + if (lf.f == NULL) return errfile(L, "open", fnameindex); + } + if (skipcomment(&lf, &c)) /* read initial portion */ + lf.buff[lf.n++] = '\n'; /* add line to correct line numbers */ + if (c == LUA_SIGNATURE[0] && filename) { /* binary file? */ + lf.f = freopen(filename, "rb", lf.f); /* reopen in binary mode */ + if (lf.f == NULL) return errfile(L, "reopen", fnameindex); + skipcomment(&lf, &c); /* re-read initial portion */ + } + if (c != EOF) + lf.buff[lf.n++] = c; /* 'c' is the first character of the stream */ + status = lua_load(L, getF, &lf, lua_tostring(L, -1), mode); + readstatus = ferror(lf.f); + if (filename) fclose(lf.f); /* close file (even in case of errors) */ + if (readstatus) { + lua_settop(L, fnameindex); /* ignore results from 'lua_load' */ + return errfile(L, "read", fnameindex); + } + lua_remove(L, fnameindex); + return status; +} + + +typedef struct LoadS { + const char *s; + size_t size; +} LoadS; + + +static const char *getS (lua_State *L, void *ud, size_t *size) { + LoadS *ls = (LoadS *)ud; + (void)L; /* not used */ + if (ls->size == 0) return NULL; + *size = ls->size; + ls->size = 0; + return ls->s; +} + + +LUALIB_API int luaL_loadbufferx (lua_State *L, const char *buff, size_t size, + const char *name, const char *mode) { + LoadS ls; + ls.s = buff; + ls.size = size; + return lua_load(L, getS, &ls, name, mode); +} + + +LUALIB_API int luaL_loadstring (lua_State *L, const char *s) { + return luaL_loadbuffer(L, s, strlen(s), s); +} + +/* }====================================================== */ + + + +LUALIB_API int luaL_getmetafield (lua_State *L, int obj, const char *event) { + if (!lua_getmetatable(L, obj)) /* no metatable? */ + return LUA_TNIL; + else { + int tt; + lua_pushstring(L, event); + tt = lua_rawget(L, -2); + if (tt == LUA_TNIL) /* is metafield nil? */ + lua_pop(L, 2); /* remove metatable and metafield */ + else + lua_remove(L, -2); /* remove only metatable */ + return tt; /* return metafield type */ + } +} + + +LUALIB_API int luaL_callmeta (lua_State *L, int obj, const char *event) { + obj = lua_absindex(L, obj); + if (luaL_getmetafield(L, obj, event) == LUA_TNIL) /* no metafield? */ + return 0; + lua_pushvalue(L, obj); + lua_call(L, 1, 1); + return 1; +} + + +LUALIB_API lua_Integer luaL_len (lua_State *L, int idx) { + lua_Integer l; + int isnum; + lua_len(L, idx); + l = lua_tointegerx(L, -1, &isnum); + if (!isnum) + luaL_error(L, "object length is not an integer"); + lua_pop(L, 1); /* remove object */ + return l; +} + + +LUALIB_API const char *luaL_tolstring (lua_State *L, int idx, size_t *len) { + if (luaL_callmeta(L, idx, "__tostring")) { /* metafield? */ + if (!lua_isstring(L, -1)) + luaL_error(L, "'__tostring' must return a string"); + } + else { + switch (lua_type(L, idx)) { + case LUA_TNUMBER: { + if (lua_isinteger(L, idx)) + lua_pushfstring(L, "%I", (LUAI_UACINT)lua_tointeger(L, idx)); + else + lua_pushfstring(L, "%f", (LUAI_UACNUMBER)lua_tonumber(L, idx)); + break; + } + case LUA_TSTRING: + lua_pushvalue(L, idx); + break; + case LUA_TBOOLEAN: + lua_pushstring(L, (lua_toboolean(L, idx) ? "true" : "false")); + break; + case LUA_TNIL: + lua_pushliteral(L, "nil"); + break; + default: { + int tt = luaL_getmetafield(L, idx, "__name"); /* try name */ + const char *kind = (tt == LUA_TSTRING) ? lua_tostring(L, -1) : + luaL_typename(L, idx); + lua_pushfstring(L, "%s: %p", kind, lua_topointer(L, idx)); + if (tt != LUA_TNIL) + lua_remove(L, -2); /* remove '__name' */ + break; + } + } + } + return lua_tolstring(L, -1, len); +} + + +/* +** {====================================================== +** Compatibility with 5.1 module functions +** ======================================================= +*/ +#if defined(LUA_COMPAT_MODULE) + +static const char *luaL_findtable (lua_State *L, int idx, + const char *fname, int szhint) { + const char *e; + if (idx) lua_pushvalue(L, idx); + do { + e = strchr(fname, '.'); + if (e == NULL) e = fname + strlen(fname); + lua_pushlstring(L, fname, e - fname); + if (lua_rawget(L, -2) == LUA_TNIL) { /* no such field? */ + lua_pop(L, 1); /* remove this nil */ + lua_createtable(L, 0, (*e == '.' ? 1 : szhint)); /* new table for field */ + lua_pushlstring(L, fname, e - fname); + lua_pushvalue(L, -2); + lua_settable(L, -4); /* set new table into field */ + } + else if (!lua_istable(L, -1)) { /* field has a non-table value? */ + lua_pop(L, 2); /* remove table and value */ + return fname; /* return problematic part of the name */ + } + lua_remove(L, -2); /* remove previous table */ + fname = e + 1; + } while (*e == '.'); + return NULL; +} + + +/* +** Count number of elements in a luaL_Reg list. +*/ +static int libsize (const luaL_Reg *l) { + int size = 0; + for (; l && l->name; l++) size++; + return size; +} + + +/* +** Find or create a module table with a given name. The function +** first looks at the LOADED table and, if that fails, try a +** global variable with that name. In any case, leaves on the stack +** the module table. +*/ +LUALIB_API void luaL_pushmodule (lua_State *L, const char *modname, + int sizehint) { + luaL_findtable(L, LUA_REGISTRYINDEX, LUA_LOADED_TABLE, 1); + if (lua_getfield(L, -1, modname) != LUA_TTABLE) { /* no LOADED[modname]? */ + lua_pop(L, 1); /* remove previous result */ + /* try global variable (and create one if it does not exist) */ + lua_pushglobaltable(L); + if (luaL_findtable(L, 0, modname, sizehint) != NULL) + luaL_error(L, "name conflict for module '%s'", modname); + lua_pushvalue(L, -1); + lua_setfield(L, -3, modname); /* LOADED[modname] = new table */ + } + lua_remove(L, -2); /* remove LOADED table */ +} + + +LUALIB_API void luaL_openlib (lua_State *L, const char *libname, + const luaL_Reg *l, int nup) { + luaL_checkversion(L); + if (libname) { + luaL_pushmodule(L, libname, libsize(l)); /* get/create library table */ + lua_insert(L, -(nup + 1)); /* move library table to below upvalues */ + } + if (l) + luaL_setfuncs(L, l, nup); + else + lua_pop(L, nup); /* remove upvalues */ +} + +#endif +/* }====================================================== */ + +/* +** set functions from list 'l' into table at top - 'nup'; each +** function gets the 'nup' elements at the top as upvalues. +** Returns with only the table at the stack. +*/ +LUALIB_API void luaL_setfuncs (lua_State *L, const luaL_Reg *l, int nup) { + luaL_checkstack(L, nup, "too many upvalues"); + for (; l->name != NULL; l++) { /* fill the table with given functions */ + int i; + for (i = 0; i < nup; i++) /* copy upvalues to the top */ + lua_pushvalue(L, -nup); + lua_pushcclosure(L, l->func, nup); /* closure with those upvalues */ + lua_setfield(L, -(nup + 2), l->name); + } + lua_pop(L, nup); /* remove upvalues */ +} + + +/* +** ensure that stack[idx][fname] has a table and push that table +** into the stack +*/ +LUALIB_API int luaL_getsubtable (lua_State *L, int idx, const char *fname) { + if (lua_getfield(L, idx, fname) == LUA_TTABLE) + return 1; /* table already there */ + else { + lua_pop(L, 1); /* remove previous result */ + idx = lua_absindex(L, idx); + lua_newtable(L); + lua_pushvalue(L, -1); /* copy to be left at top */ + lua_setfield(L, idx, fname); /* assign new table to field */ + return 0; /* false, because did not find table there */ + } +} + + +/* +** Stripped-down 'require': After checking "loaded" table, calls 'openf' +** to open a module, registers the result in 'package.loaded' table and, +** if 'glb' is true, also registers the result in the global table. +** Leaves resulting module on the top. +*/ +LUALIB_API void luaL_requiref (lua_State *L, const char *modname, + lua_CFunction openf, int glb) { + luaL_getsubtable(L, LUA_REGISTRYINDEX, LUA_LOADED_TABLE); + lua_getfield(L, -1, modname); /* LOADED[modname] */ + if (!lua_toboolean(L, -1)) { /* package not already loaded? */ + lua_pop(L, 1); /* remove field */ + lua_pushcfunction(L, openf); + lua_pushstring(L, modname); /* argument to open function */ + lua_call(L, 1, 1); /* call 'openf' to open module */ + lua_pushvalue(L, -1); /* make copy of module (call result) */ + lua_setfield(L, -3, modname); /* LOADED[modname] = module */ + } + lua_remove(L, -2); /* remove LOADED table */ + if (glb) { + lua_pushvalue(L, -1); /* copy of module */ + lua_setglobal(L, modname); /* _G[modname] = module */ + } +} + + +LUALIB_API const char *luaL_gsub (lua_State *L, const char *s, const char *p, + const char *r) { + const char *wild; + size_t l = strlen(p); + luaL_Buffer b; + luaL_buffinit(L, &b); + while ((wild = strstr(s, p)) != NULL) { + luaL_addlstring(&b, s, wild - s); /* push prefix */ + luaL_addstring(&b, r); /* push replacement in place of pattern */ + s = wild + l; /* continue after 'p' */ + } + luaL_addstring(&b, s); /* push last suffix */ + luaL_pushresult(&b); + return lua_tostring(L, -1); +} + + +static void *l_alloc (void *ud, void *ptr, size_t osize, size_t nsize) { + (void)ud; (void)osize; /* not used */ + if (nsize == 0) { + free(ptr); + return NULL; + } + else + return realloc(ptr, nsize); +} + + +static int panic (lua_State *L) { + lua_writestringerror("PANIC: unprotected error in call to Lua API (%s)\n", + lua_tostring(L, -1)); + return 0; /* return to Lua to abort */ +} + + +LUALIB_API lua_State *luaL_newstate (void) { + lua_State *L = lua_newstate(l_alloc, NULL); + if (L) lua_atpanic(L, &panic); + return L; +} + + +LUALIB_API void luaL_checkversion_ (lua_State *L, lua_Number ver, size_t sz) { + const lua_Number *v = lua_version(L); + if (sz != LUAL_NUMSIZES) /* check numeric types */ + luaL_error(L, "core and library have incompatible numeric types"); + if (v != lua_version(NULL)) + luaL_error(L, "multiple Lua VMs detected"); + else if (*v != ver) + luaL_error(L, "version mismatch: app. needs %f, Lua core provides %f", + (LUAI_UACNUMBER)ver, (LUAI_UACNUMBER)*v); +} + diff --git a/EQ2/source/LUA/lauxlib.h b/EQ2/source/LUA/lauxlib.h new file mode 100644 index 000000000..9a2e66aa0 --- /dev/null +++ b/EQ2/source/LUA/lauxlib.h @@ -0,0 +1,264 @@ +/* +** $Id: lauxlib.h,v 1.131 2016/12/06 14:54:31 roberto Exp $ +** Auxiliary functions for building Lua libraries +** See Copyright Notice in lua.h +*/ + + +#ifndef lauxlib_h +#define lauxlib_h + + +#include +#include + +#include "lua.h" + + + +/* extra error code for 'luaL_loadfilex' */ +#define LUA_ERRFILE (LUA_ERRERR+1) + + +/* key, in the registry, for table of loaded modules */ +#define LUA_LOADED_TABLE "_LOADED" + + +/* key, in the registry, for table of preloaded loaders */ +#define LUA_PRELOAD_TABLE "_PRELOAD" + + +typedef struct luaL_Reg { + const char *name; + lua_CFunction func; +} luaL_Reg; + + +#define LUAL_NUMSIZES (sizeof(lua_Integer)*16 + sizeof(lua_Number)) + +LUALIB_API void (luaL_checkversion_) (lua_State *L, lua_Number ver, size_t sz); +#define luaL_checkversion(L) \ + luaL_checkversion_(L, LUA_VERSION_NUM, LUAL_NUMSIZES) + +LUALIB_API int (luaL_getmetafield) (lua_State *L, int obj, const char *e); +LUALIB_API int (luaL_callmeta) (lua_State *L, int obj, const char *e); +LUALIB_API const char *(luaL_tolstring) (lua_State *L, int idx, size_t *len); +LUALIB_API int (luaL_argerror) (lua_State *L, int arg, const char *extramsg); +LUALIB_API const char *(luaL_checklstring) (lua_State *L, int arg, + size_t *l); +LUALIB_API const char *(luaL_optlstring) (lua_State *L, int arg, + const char *def, size_t *l); +LUALIB_API lua_Number (luaL_checknumber) (lua_State *L, int arg); +LUALIB_API lua_Number (luaL_optnumber) (lua_State *L, int arg, lua_Number def); + +LUALIB_API lua_Integer (luaL_checkinteger) (lua_State *L, int arg); +LUALIB_API lua_Integer (luaL_optinteger) (lua_State *L, int arg, + lua_Integer def); + +LUALIB_API void (luaL_checkstack) (lua_State *L, int sz, const char *msg); +LUALIB_API void (luaL_checktype) (lua_State *L, int arg, int t); +LUALIB_API void (luaL_checkany) (lua_State *L, int arg); + +LUALIB_API int (luaL_newmetatable) (lua_State *L, const char *tname); +LUALIB_API void (luaL_setmetatable) (lua_State *L, const char *tname); +LUALIB_API void *(luaL_testudata) (lua_State *L, int ud, const char *tname); +LUALIB_API void *(luaL_checkudata) (lua_State *L, int ud, const char *tname); + +LUALIB_API void (luaL_where) (lua_State *L, int lvl); +LUALIB_API int (luaL_error) (lua_State *L, const char *fmt, ...); + +LUALIB_API int (luaL_checkoption) (lua_State *L, int arg, const char *def, + const char *const lst[]); + +LUALIB_API int (luaL_fileresult) (lua_State *L, int stat, const char *fname); +LUALIB_API int (luaL_execresult) (lua_State *L, int stat); + +/* predefined references */ +#define LUA_NOREF (-2) +#define LUA_REFNIL (-1) + +LUALIB_API int (luaL_ref) (lua_State *L, int t); +LUALIB_API void (luaL_unref) (lua_State *L, int t, int ref); + +LUALIB_API int (luaL_loadfilex) (lua_State *L, const char *filename, + const char *mode); + +#define luaL_loadfile(L,f) luaL_loadfilex(L,f,NULL) + +LUALIB_API int (luaL_loadbufferx) (lua_State *L, const char *buff, size_t sz, + const char *name, const char *mode); +LUALIB_API int (luaL_loadstring) (lua_State *L, const char *s); + +LUALIB_API lua_State *(luaL_newstate) (void); + +LUALIB_API lua_Integer (luaL_len) (lua_State *L, int idx); + +LUALIB_API const char *(luaL_gsub) (lua_State *L, const char *s, const char *p, + const char *r); + +LUALIB_API void (luaL_setfuncs) (lua_State *L, const luaL_Reg *l, int nup); + +LUALIB_API int (luaL_getsubtable) (lua_State *L, int idx, const char *fname); + +LUALIB_API void (luaL_traceback) (lua_State *L, lua_State *L1, + const char *msg, int level); + +LUALIB_API void (luaL_requiref) (lua_State *L, const char *modname, + lua_CFunction openf, int glb); + +/* +** =============================================================== +** some useful macros +** =============================================================== +*/ + + +#define luaL_newlibtable(L,l) \ + lua_createtable(L, 0, sizeof(l)/sizeof((l)[0]) - 1) + +#define luaL_newlib(L,l) \ + (luaL_checkversion(L), luaL_newlibtable(L,l), luaL_setfuncs(L,l,0)) + +#define luaL_argcheck(L, cond,arg,extramsg) \ + ((void)((cond) || luaL_argerror(L, (arg), (extramsg)))) +#define luaL_checkstring(L,n) (luaL_checklstring(L, (n), NULL)) +#define luaL_optstring(L,n,d) (luaL_optlstring(L, (n), (d), NULL)) + +#define luaL_typename(L,i) lua_typename(L, lua_type(L,(i))) + +#define luaL_dofile(L, fn) \ + (luaL_loadfile(L, fn) || lua_pcall(L, 0, LUA_MULTRET, 0)) + +#define luaL_dostring(L, s) \ + (luaL_loadstring(L, s) || lua_pcall(L, 0, LUA_MULTRET, 0)) + +#define luaL_getmetatable(L,n) (lua_getfield(L, LUA_REGISTRYINDEX, (n))) + +#define luaL_opt(L,f,n,d) (lua_isnoneornil(L,(n)) ? (d) : f(L,(n))) + +#define luaL_loadbuffer(L,s,sz,n) luaL_loadbufferx(L,s,sz,n,NULL) + + +/* +** {====================================================== +** Generic Buffer manipulation +** ======================================================= +*/ + +typedef struct luaL_Buffer { + char *b; /* buffer address */ + size_t size; /* buffer size */ + size_t n; /* number of characters in buffer */ + lua_State *L; + char initb[LUAL_BUFFERSIZE]; /* initial buffer */ +} luaL_Buffer; + + +#define luaL_addchar(B,c) \ + ((void)((B)->n < (B)->size || luaL_prepbuffsize((B), 1)), \ + ((B)->b[(B)->n++] = (c))) + +#define luaL_addsize(B,s) ((B)->n += (s)) + +LUALIB_API void (luaL_buffinit) (lua_State *L, luaL_Buffer *B); +LUALIB_API char *(luaL_prepbuffsize) (luaL_Buffer *B, size_t sz); +LUALIB_API void (luaL_addlstring) (luaL_Buffer *B, const char *s, size_t l); +LUALIB_API void (luaL_addstring) (luaL_Buffer *B, const char *s); +LUALIB_API void (luaL_addvalue) (luaL_Buffer *B); +LUALIB_API void (luaL_pushresult) (luaL_Buffer *B); +LUALIB_API void (luaL_pushresultsize) (luaL_Buffer *B, size_t sz); +LUALIB_API char *(luaL_buffinitsize) (lua_State *L, luaL_Buffer *B, size_t sz); + +#define luaL_prepbuffer(B) luaL_prepbuffsize(B, LUAL_BUFFERSIZE) + +/* }====================================================== */ + + + +/* +** {====================================================== +** File handles for IO library +** ======================================================= +*/ + +/* +** A file handle is a userdata with metatable 'LUA_FILEHANDLE' and +** initial structure 'luaL_Stream' (it may contain other fields +** after that initial structure). +*/ + +#define LUA_FILEHANDLE "FILE*" + + +typedef struct luaL_Stream { + FILE *f; /* stream (NULL for incompletely created streams) */ + lua_CFunction closef; /* to close stream (NULL for closed streams) */ +} luaL_Stream; + +/* }====================================================== */ + + + +/* compatibility with old module system */ +#if defined(LUA_COMPAT_MODULE) + +LUALIB_API void (luaL_pushmodule) (lua_State *L, const char *modname, + int sizehint); +LUALIB_API void (luaL_openlib) (lua_State *L, const char *libname, + const luaL_Reg *l, int nup); + +#define luaL_register(L,n,l) (luaL_openlib(L,(n),(l),0)) + +#endif + + +/* +** {================================================================== +** "Abstraction Layer" for basic report of messages and errors +** =================================================================== +*/ + +/* print a string */ +#if !defined(lua_writestring) +#define lua_writestring(s,l) fwrite((s), sizeof(char), (l), stdout) +#endif + +/* print a newline and flush the output */ +#if !defined(lua_writeline) +#define lua_writeline() (lua_writestring("\n", 1), fflush(stdout)) +#endif + +/* print an error message */ +#if !defined(lua_writestringerror) +#define lua_writestringerror(s,p) \ + (fprintf(stderr, (s), (p)), fflush(stderr)) +#endif + +/* }================================================================== */ + + +/* +** {============================================================ +** Compatibility with deprecated conversions +** ============================================================= +*/ +#if defined(LUA_COMPAT_APIINTCASTS) + +#define luaL_checkunsigned(L,a) ((lua_Unsigned)luaL_checkinteger(L,a)) +#define luaL_optunsigned(L,a,d) \ + ((lua_Unsigned)luaL_optinteger(L,a,(lua_Integer)(d))) + +#define luaL_checkint(L,n) ((int)luaL_checkinteger(L, (n))) +#define luaL_optint(L,n,d) ((int)luaL_optinteger(L, (n), (d))) + +#define luaL_checklong(L,n) ((long)luaL_checkinteger(L, (n))) +#define luaL_optlong(L,n,d) ((long)luaL_optinteger(L, (n), (d))) + +#endif +/* }============================================================ */ + + + +#endif + + diff --git a/EQ2/source/LUA/lbaselib.c b/EQ2/source/LUA/lbaselib.c new file mode 100644 index 000000000..08523e6e7 --- /dev/null +++ b/EQ2/source/LUA/lbaselib.c @@ -0,0 +1,498 @@ +/* +** $Id: lbaselib.c,v 1.314 2016/09/05 19:06:34 roberto Exp $ +** Basic library +** See Copyright Notice in lua.h +*/ + +#define lbaselib_c +#define LUA_LIB + +#include "lprefix.h" + + +#include +#include +#include +#include + +#include "lua.h" + +#include "lauxlib.h" +#include "lualib.h" + + +static int luaB_print (lua_State *L) { + int n = lua_gettop(L); /* number of arguments */ + int i; + lua_getglobal(L, "tostring"); + for (i=1; i<=n; i++) { + const char *s; + size_t l; + lua_pushvalue(L, -1); /* function to be called */ + lua_pushvalue(L, i); /* value to print */ + lua_call(L, 1, 1); + s = lua_tolstring(L, -1, &l); /* get result */ + if (s == NULL) + return luaL_error(L, "'tostring' must return a string to 'print'"); + if (i>1) lua_writestring("\t", 1); + lua_writestring(s, l); + lua_pop(L, 1); /* pop result */ + } + lua_writeline(); + return 0; +} + + +#define SPACECHARS " \f\n\r\t\v" + +static const char *b_str2int (const char *s, int base, lua_Integer *pn) { + lua_Unsigned n = 0; + int neg = 0; + s += strspn(s, SPACECHARS); /* skip initial spaces */ + if (*s == '-') { s++; neg = 1; } /* handle signal */ + else if (*s == '+') s++; + if (!isalnum((unsigned char)*s)) /* no digit? */ + return NULL; + do { + int digit = (isdigit((unsigned char)*s)) ? *s - '0' + : (toupper((unsigned char)*s) - 'A') + 10; + if (digit >= base) return NULL; /* invalid numeral */ + n = n * base + digit; + s++; + } while (isalnum((unsigned char)*s)); + s += strspn(s, SPACECHARS); /* skip trailing spaces */ + *pn = (lua_Integer)((neg) ? (0u - n) : n); + return s; +} + + +static int luaB_tonumber (lua_State *L) { + if (lua_isnoneornil(L, 2)) { /* standard conversion? */ + luaL_checkany(L, 1); + if (lua_type(L, 1) == LUA_TNUMBER) { /* already a number? */ + lua_settop(L, 1); /* yes; return it */ + return 1; + } + else { + size_t l; + const char *s = lua_tolstring(L, 1, &l); + if (s != NULL && lua_stringtonumber(L, s) == l + 1) + return 1; /* successful conversion to number */ + /* else not a number */ + } + } + else { + size_t l; + const char *s; + lua_Integer n = 0; /* to avoid warnings */ + lua_Integer base = luaL_checkinteger(L, 2); + luaL_checktype(L, 1, LUA_TSTRING); /* no numbers as strings */ + s = lua_tolstring(L, 1, &l); + luaL_argcheck(L, 2 <= base && base <= 36, 2, "base out of range"); + if (b_str2int(s, (int)base, &n) == s + l) { + lua_pushinteger(L, n); + return 1; + } /* else not a number */ + } /* else not a number */ + lua_pushnil(L); /* not a number */ + return 1; +} + + +static int luaB_error (lua_State *L) { + int level = (int)luaL_optinteger(L, 2, 1); + lua_settop(L, 1); + if (lua_type(L, 1) == LUA_TSTRING && level > 0) { + luaL_where(L, level); /* add extra information */ + lua_pushvalue(L, 1); + lua_concat(L, 2); + } + return lua_error(L); +} + + +static int luaB_getmetatable (lua_State *L) { + luaL_checkany(L, 1); + if (!lua_getmetatable(L, 1)) { + lua_pushnil(L); + return 1; /* no metatable */ + } + luaL_getmetafield(L, 1, "__metatable"); + return 1; /* returns either __metatable field (if present) or metatable */ +} + + +static int luaB_setmetatable (lua_State *L) { + int t = lua_type(L, 2); + luaL_checktype(L, 1, LUA_TTABLE); + luaL_argcheck(L, t == LUA_TNIL || t == LUA_TTABLE, 2, + "nil or table expected"); + if (luaL_getmetafield(L, 1, "__metatable") != LUA_TNIL) + return luaL_error(L, "cannot change a protected metatable"); + lua_settop(L, 2); + lua_setmetatable(L, 1); + return 1; +} + + +static int luaB_rawequal (lua_State *L) { + luaL_checkany(L, 1); + luaL_checkany(L, 2); + lua_pushboolean(L, lua_rawequal(L, 1, 2)); + return 1; +} + + +static int luaB_rawlen (lua_State *L) { + int t = lua_type(L, 1); + luaL_argcheck(L, t == LUA_TTABLE || t == LUA_TSTRING, 1, + "table or string expected"); + lua_pushinteger(L, lua_rawlen(L, 1)); + return 1; +} + + +static int luaB_rawget (lua_State *L) { + luaL_checktype(L, 1, LUA_TTABLE); + luaL_checkany(L, 2); + lua_settop(L, 2); + lua_rawget(L, 1); + return 1; +} + +static int luaB_rawset (lua_State *L) { + luaL_checktype(L, 1, LUA_TTABLE); + luaL_checkany(L, 2); + luaL_checkany(L, 3); + lua_settop(L, 3); + lua_rawset(L, 1); + return 1; +} + + +static int luaB_collectgarbage (lua_State *L) { + static const char *const opts[] = {"stop", "restart", "collect", + "count", "step", "setpause", "setstepmul", + "isrunning", NULL}; + static const int optsnum[] = {LUA_GCSTOP, LUA_GCRESTART, LUA_GCCOLLECT, + LUA_GCCOUNT, LUA_GCSTEP, LUA_GCSETPAUSE, LUA_GCSETSTEPMUL, + LUA_GCISRUNNING}; + int o = optsnum[luaL_checkoption(L, 1, "collect", opts)]; + int ex = (int)luaL_optinteger(L, 2, 0); + int res = lua_gc(L, o, ex); + switch (o) { + case LUA_GCCOUNT: { + int b = lua_gc(L, LUA_GCCOUNTB, 0); + lua_pushnumber(L, (lua_Number)res + ((lua_Number)b/1024)); + return 1; + } + case LUA_GCSTEP: case LUA_GCISRUNNING: { + lua_pushboolean(L, res); + return 1; + } + default: { + lua_pushinteger(L, res); + return 1; + } + } +} + + +static int luaB_type (lua_State *L) { + int t = lua_type(L, 1); + luaL_argcheck(L, t != LUA_TNONE, 1, "value expected"); + lua_pushstring(L, lua_typename(L, t)); + return 1; +} + + +static int pairsmeta (lua_State *L, const char *method, int iszero, + lua_CFunction iter) { + luaL_checkany(L, 1); + if (luaL_getmetafield(L, 1, method) == LUA_TNIL) { /* no metamethod? */ + lua_pushcfunction(L, iter); /* will return generator, */ + lua_pushvalue(L, 1); /* state, */ + if (iszero) lua_pushinteger(L, 0); /* and initial value */ + else lua_pushnil(L); + } + else { + lua_pushvalue(L, 1); /* argument 'self' to metamethod */ + lua_call(L, 1, 3); /* get 3 values from metamethod */ + } + return 3; +} + + +static int luaB_next (lua_State *L) { + luaL_checktype(L, 1, LUA_TTABLE); + lua_settop(L, 2); /* create a 2nd argument if there isn't one */ + if (lua_next(L, 1)) + return 2; + else { + lua_pushnil(L); + return 1; + } +} + + +static int luaB_pairs (lua_State *L) { + return pairsmeta(L, "__pairs", 0, luaB_next); +} + + +/* +** Traversal function for 'ipairs' +*/ +static int ipairsaux (lua_State *L) { + lua_Integer i = luaL_checkinteger(L, 2) + 1; + lua_pushinteger(L, i); + return (lua_geti(L, 1, i) == LUA_TNIL) ? 1 : 2; +} + + +/* +** 'ipairs' function. Returns 'ipairsaux', given "table", 0. +** (The given "table" may not be a table.) +*/ +static int luaB_ipairs (lua_State *L) { +#if defined(LUA_COMPAT_IPAIRS) + return pairsmeta(L, "__ipairs", 1, ipairsaux); +#else + luaL_checkany(L, 1); + lua_pushcfunction(L, ipairsaux); /* iteration function */ + lua_pushvalue(L, 1); /* state */ + lua_pushinteger(L, 0); /* initial value */ + return 3; +#endif +} + + +static int load_aux (lua_State *L, int status, int envidx) { + if (status == LUA_OK) { + if (envidx != 0) { /* 'env' parameter? */ + lua_pushvalue(L, envidx); /* environment for loaded function */ + if (!lua_setupvalue(L, -2, 1)) /* set it as 1st upvalue */ + lua_pop(L, 1); /* remove 'env' if not used by previous call */ + } + return 1; + } + else { /* error (message is on top of the stack) */ + lua_pushnil(L); + lua_insert(L, -2); /* put before error message */ + return 2; /* return nil plus error message */ + } +} + + +static int luaB_loadfile (lua_State *L) { + const char *fname = luaL_optstring(L, 1, NULL); + const char *mode = luaL_optstring(L, 2, NULL); + int env = (!lua_isnone(L, 3) ? 3 : 0); /* 'env' index or 0 if no 'env' */ + int status = luaL_loadfilex(L, fname, mode); + return load_aux(L, status, env); +} + + +/* +** {====================================================== +** Generic Read function +** ======================================================= +*/ + + +/* +** reserved slot, above all arguments, to hold a copy of the returned +** string to avoid it being collected while parsed. 'load' has four +** optional arguments (chunk, source name, mode, and environment). +*/ +#define RESERVEDSLOT 5 + + +/* +** Reader for generic 'load' function: 'lua_load' uses the +** stack for internal stuff, so the reader cannot change the +** stack top. Instead, it keeps its resulting string in a +** reserved slot inside the stack. +*/ +static const char *generic_reader (lua_State *L, void *ud, size_t *size) { + (void)(ud); /* not used */ + luaL_checkstack(L, 2, "too many nested functions"); + lua_pushvalue(L, 1); /* get function */ + lua_call(L, 0, 1); /* call it */ + if (lua_isnil(L, -1)) { + lua_pop(L, 1); /* pop result */ + *size = 0; + return NULL; + } + else if (!lua_isstring(L, -1)) + luaL_error(L, "reader function must return a string"); + lua_replace(L, RESERVEDSLOT); /* save string in reserved slot */ + return lua_tolstring(L, RESERVEDSLOT, size); +} + + +static int luaB_load (lua_State *L) { + int status; + size_t l; + const char *s = lua_tolstring(L, 1, &l); + const char *mode = luaL_optstring(L, 3, "bt"); + int env = (!lua_isnone(L, 4) ? 4 : 0); /* 'env' index or 0 if no 'env' */ + if (s != NULL) { /* loading a string? */ + const char *chunkname = luaL_optstring(L, 2, s); + status = luaL_loadbufferx(L, s, l, chunkname, mode); + } + else { /* loading from a reader function */ + const char *chunkname = luaL_optstring(L, 2, "=(load)"); + luaL_checktype(L, 1, LUA_TFUNCTION); + lua_settop(L, RESERVEDSLOT); /* create reserved slot */ + status = lua_load(L, generic_reader, NULL, chunkname, mode); + } + return load_aux(L, status, env); +} + +/* }====================================================== */ + + +static int dofilecont (lua_State *L, int d1, lua_KContext d2) { + (void)d1; (void)d2; /* only to match 'lua_Kfunction' prototype */ + return lua_gettop(L) - 1; +} + + +static int luaB_dofile (lua_State *L) { + const char *fname = luaL_optstring(L, 1, NULL); + lua_settop(L, 1); + if (luaL_loadfile(L, fname) != LUA_OK) + return lua_error(L); + lua_callk(L, 0, LUA_MULTRET, 0, dofilecont); + return dofilecont(L, 0, 0); +} + + +static int luaB_assert (lua_State *L) { + if (lua_toboolean(L, 1)) /* condition is true? */ + return lua_gettop(L); /* return all arguments */ + else { /* error */ + luaL_checkany(L, 1); /* there must be a condition */ + lua_remove(L, 1); /* remove it */ + lua_pushliteral(L, "assertion failed!"); /* default message */ + lua_settop(L, 1); /* leave only message (default if no other one) */ + return luaB_error(L); /* call 'error' */ + } +} + + +static int luaB_select (lua_State *L) { + int n = lua_gettop(L); + if (lua_type(L, 1) == LUA_TSTRING && *lua_tostring(L, 1) == '#') { + lua_pushinteger(L, n-1); + return 1; + } + else { + lua_Integer i = luaL_checkinteger(L, 1); + if (i < 0) i = n + i; + else if (i > n) i = n; + luaL_argcheck(L, 1 <= i, 1, "index out of range"); + return n - (int)i; + } +} + + +/* +** Continuation function for 'pcall' and 'xpcall'. Both functions +** already pushed a 'true' before doing the call, so in case of success +** 'finishpcall' only has to return everything in the stack minus +** 'extra' values (where 'extra' is exactly the number of items to be +** ignored). +*/ +static int finishpcall (lua_State *L, int status, lua_KContext extra) { + if (status != LUA_OK && status != LUA_YIELD) { /* error? */ + lua_pushboolean(L, 0); /* first result (false) */ + lua_pushvalue(L, -2); /* error message */ + return 2; /* return false, msg */ + } + else + return lua_gettop(L) - (int)extra; /* return all results */ +} + + +static int luaB_pcall (lua_State *L) { + int status; + luaL_checkany(L, 1); + lua_pushboolean(L, 1); /* first result if no errors */ + lua_insert(L, 1); /* put it in place */ + status = lua_pcallk(L, lua_gettop(L) - 2, LUA_MULTRET, 0, 0, finishpcall); + return finishpcall(L, status, 0); +} + + +/* +** Do a protected call with error handling. After 'lua_rotate', the +** stack will have ; so, the function passes +** 2 to 'finishpcall' to skip the 2 first values when returning results. +*/ +static int luaB_xpcall (lua_State *L) { + int status; + int n = lua_gettop(L); + luaL_checktype(L, 2, LUA_TFUNCTION); /* check error function */ + lua_pushboolean(L, 1); /* first result */ + lua_pushvalue(L, 1); /* function */ + lua_rotate(L, 3, 2); /* move them below function's arguments */ + status = lua_pcallk(L, n - 2, LUA_MULTRET, 2, 2, finishpcall); + return finishpcall(L, status, 2); +} + + +static int luaB_tostring (lua_State *L) { + luaL_checkany(L, 1); + luaL_tolstring(L, 1, NULL); + return 1; +} + + +static const luaL_Reg base_funcs[] = { + {"assert", luaB_assert}, + {"collectgarbage", luaB_collectgarbage}, + {"dofile", luaB_dofile}, + {"error", luaB_error}, + {"getmetatable", luaB_getmetatable}, + {"ipairs", luaB_ipairs}, + {"loadfile", luaB_loadfile}, + {"load", luaB_load}, +#if defined(LUA_COMPAT_LOADSTRING) + {"loadstring", luaB_load}, +#endif + {"next", luaB_next}, + {"pairs", luaB_pairs}, + {"pcall", luaB_pcall}, + {"print", luaB_print}, + {"rawequal", luaB_rawequal}, + {"rawlen", luaB_rawlen}, + {"rawget", luaB_rawget}, + {"rawset", luaB_rawset}, + {"select", luaB_select}, + {"setmetatable", luaB_setmetatable}, + {"tonumber", luaB_tonumber}, + {"tostring", luaB_tostring}, + {"type", luaB_type}, + {"xpcall", luaB_xpcall}, + /* placeholders */ + {"_G", NULL}, + {"_VERSION", NULL}, + {NULL, NULL} +}; + + +LUAMOD_API int luaopen_base (lua_State *L) { + /* open lib into global table */ + lua_pushglobaltable(L); + luaL_setfuncs(L, base_funcs, 0); + /* set global _G */ + lua_pushvalue(L, -1); + lua_setfield(L, -2, "_G"); + /* set global _VERSION */ + lua_pushliteral(L, LUA_VERSION); + lua_setfield(L, -2, "_VERSION"); + return 1; +} + diff --git a/EQ2/source/LUA/lbitlib.c b/EQ2/source/LUA/lbitlib.c new file mode 100644 index 000000000..1cb1d5b93 --- /dev/null +++ b/EQ2/source/LUA/lbitlib.c @@ -0,0 +1,233 @@ +/* +** $Id: lbitlib.c,v 1.30 2015/11/11 19:08:09 roberto Exp $ +** Standard library for bitwise operations +** See Copyright Notice in lua.h +*/ + +#define lbitlib_c +#define LUA_LIB + +#include "lprefix.h" + + +#include "lua.h" + +#include "lauxlib.h" +#include "lualib.h" + + +#if defined(LUA_COMPAT_BITLIB) /* { */ + + +#define pushunsigned(L,n) lua_pushinteger(L, (lua_Integer)(n)) +#define checkunsigned(L,i) ((lua_Unsigned)luaL_checkinteger(L,i)) + + +/* number of bits to consider in a number */ +#if !defined(LUA_NBITS) +#define LUA_NBITS 32 +#endif + + +/* +** a lua_Unsigned with its first LUA_NBITS bits equal to 1. (Shift must +** be made in two parts to avoid problems when LUA_NBITS is equal to the +** number of bits in a lua_Unsigned.) +*/ +#define ALLONES (~(((~(lua_Unsigned)0) << (LUA_NBITS - 1)) << 1)) + + +/* macro to trim extra bits */ +#define trim(x) ((x) & ALLONES) + + +/* builds a number with 'n' ones (1 <= n <= LUA_NBITS) */ +#define mask(n) (~((ALLONES << 1) << ((n) - 1))) + + + +static lua_Unsigned andaux (lua_State *L) { + int i, n = lua_gettop(L); + lua_Unsigned r = ~(lua_Unsigned)0; + for (i = 1; i <= n; i++) + r &= checkunsigned(L, i); + return trim(r); +} + + +static int b_and (lua_State *L) { + lua_Unsigned r = andaux(L); + pushunsigned(L, r); + return 1; +} + + +static int b_test (lua_State *L) { + lua_Unsigned r = andaux(L); + lua_pushboolean(L, r != 0); + return 1; +} + + +static int b_or (lua_State *L) { + int i, n = lua_gettop(L); + lua_Unsigned r = 0; + for (i = 1; i <= n; i++) + r |= checkunsigned(L, i); + pushunsigned(L, trim(r)); + return 1; +} + + +static int b_xor (lua_State *L) { + int i, n = lua_gettop(L); + lua_Unsigned r = 0; + for (i = 1; i <= n; i++) + r ^= checkunsigned(L, i); + pushunsigned(L, trim(r)); + return 1; +} + + +static int b_not (lua_State *L) { + lua_Unsigned r = ~checkunsigned(L, 1); + pushunsigned(L, trim(r)); + return 1; +} + + +static int b_shift (lua_State *L, lua_Unsigned r, lua_Integer i) { + if (i < 0) { /* shift right? */ + i = -i; + r = trim(r); + if (i >= LUA_NBITS) r = 0; + else r >>= i; + } + else { /* shift left */ + if (i >= LUA_NBITS) r = 0; + else r <<= i; + r = trim(r); + } + pushunsigned(L, r); + return 1; +} + + +static int b_lshift (lua_State *L) { + return b_shift(L, checkunsigned(L, 1), luaL_checkinteger(L, 2)); +} + + +static int b_rshift (lua_State *L) { + return b_shift(L, checkunsigned(L, 1), -luaL_checkinteger(L, 2)); +} + + +static int b_arshift (lua_State *L) { + lua_Unsigned r = checkunsigned(L, 1); + lua_Integer i = luaL_checkinteger(L, 2); + if (i < 0 || !(r & ((lua_Unsigned)1 << (LUA_NBITS - 1)))) + return b_shift(L, r, -i); + else { /* arithmetic shift for 'negative' number */ + if (i >= LUA_NBITS) r = ALLONES; + else + r = trim((r >> i) | ~(trim(~(lua_Unsigned)0) >> i)); /* add signal bit */ + pushunsigned(L, r); + return 1; + } +} + + +static int b_rot (lua_State *L, lua_Integer d) { + lua_Unsigned r = checkunsigned(L, 1); + int i = d & (LUA_NBITS - 1); /* i = d % NBITS */ + r = trim(r); + if (i != 0) /* avoid undefined shift of LUA_NBITS when i == 0 */ + r = (r << i) | (r >> (LUA_NBITS - i)); + pushunsigned(L, trim(r)); + return 1; +} + + +static int b_lrot (lua_State *L) { + return b_rot(L, luaL_checkinteger(L, 2)); +} + + +static int b_rrot (lua_State *L) { + return b_rot(L, -luaL_checkinteger(L, 2)); +} + + +/* +** get field and width arguments for field-manipulation functions, +** checking whether they are valid. +** ('luaL_error' called without 'return' to avoid later warnings about +** 'width' being used uninitialized.) +*/ +static int fieldargs (lua_State *L, int farg, int *width) { + lua_Integer f = luaL_checkinteger(L, farg); + lua_Integer w = luaL_optinteger(L, farg + 1, 1); + luaL_argcheck(L, 0 <= f, farg, "field cannot be negative"); + luaL_argcheck(L, 0 < w, farg + 1, "width must be positive"); + if (f + w > LUA_NBITS) + luaL_error(L, "trying to access non-existent bits"); + *width = (int)w; + return (int)f; +} + + +static int b_extract (lua_State *L) { + int w; + lua_Unsigned r = trim(checkunsigned(L, 1)); + int f = fieldargs(L, 2, &w); + r = (r >> f) & mask(w); + pushunsigned(L, r); + return 1; +} + + +static int b_replace (lua_State *L) { + int w; + lua_Unsigned r = trim(checkunsigned(L, 1)); + lua_Unsigned v = trim(checkunsigned(L, 2)); + int f = fieldargs(L, 3, &w); + lua_Unsigned m = mask(w); + r = (r & ~(m << f)) | ((v & m) << f); + pushunsigned(L, r); + return 1; +} + + +static const luaL_Reg bitlib[] = { + {"arshift", b_arshift}, + {"band", b_and}, + {"bnot", b_not}, + {"bor", b_or}, + {"bxor", b_xor}, + {"btest", b_test}, + {"extract", b_extract}, + {"lrotate", b_lrot}, + {"lshift", b_lshift}, + {"replace", b_replace}, + {"rrotate", b_rrot}, + {"rshift", b_rshift}, + {NULL, NULL} +}; + + + +LUAMOD_API int luaopen_bit32 (lua_State *L) { + luaL_newlib(L, bitlib); + return 1; +} + + +#else /* }{ */ + + +LUAMOD_API int luaopen_bit32 (lua_State *L) { + return luaL_error(L, "library 'bit32' has been deprecated"); +} + +#endif /* } */ diff --git a/EQ2/source/LUA/lcode.c b/EQ2/source/LUA/lcode.c new file mode 100644 index 000000000..0bb414262 --- /dev/null +++ b/EQ2/source/LUA/lcode.c @@ -0,0 +1,1203 @@ +/* +** $Id: lcode.c,v 2.112 2016/12/22 13:08:50 roberto Exp $ +** Code generator for Lua +** See Copyright Notice in lua.h +*/ + +#define lcode_c +#define LUA_CORE + +#include "lprefix.h" + + +#include +#include + +#include "lua.h" + +#include "lcode.h" +#include "ldebug.h" +#include "ldo.h" +#include "lgc.h" +#include "llex.h" +#include "lmem.h" +#include "lobject.h" +#include "lopcodes.h" +#include "lparser.h" +#include "lstring.h" +#include "ltable.h" +#include "lvm.h" + + +/* Maximum number of registers in a Lua function (must fit in 8 bits) */ +#define MAXREGS 255 + + +#define hasjumps(e) ((e)->t != (e)->f) + + +/* +** If expression is a numeric constant, fills 'v' with its value +** and returns 1. Otherwise, returns 0. +*/ +static int tonumeral(const expdesc *e, TValue *v) { + if (hasjumps(e)) + return 0; /* not a numeral */ + switch (e->k) { + case VKINT: + if (v) setivalue(v, e->u.ival); + return 1; + case VKFLT: + if (v) setfltvalue(v, e->u.nval); + return 1; + default: return 0; + } +} + + +/* +** Create a OP_LOADNIL instruction, but try to optimize: if the previous +** instruction is also OP_LOADNIL and ranges are compatible, adjust +** range of previous instruction instead of emitting a new one. (For +** instance, 'local a; local b' will generate a single opcode.) +*/ +void luaK_nil (FuncState *fs, int from, int n) { + Instruction *previous; + int l = from + n - 1; /* last register to set nil */ + if (fs->pc > fs->lasttarget) { /* no jumps to current position? */ + previous = &fs->f->code[fs->pc-1]; + if (GET_OPCODE(*previous) == OP_LOADNIL) { /* previous is LOADNIL? */ + int pfrom = GETARG_A(*previous); /* get previous range */ + int pl = pfrom + GETARG_B(*previous); + if ((pfrom <= from && from <= pl + 1) || + (from <= pfrom && pfrom <= l + 1)) { /* can connect both? */ + if (pfrom < from) from = pfrom; /* from = min(from, pfrom) */ + if (pl > l) l = pl; /* l = max(l, pl) */ + SETARG_A(*previous, from); + SETARG_B(*previous, l - from); + return; + } + } /* else go through */ + } + luaK_codeABC(fs, OP_LOADNIL, from, n - 1, 0); /* else no optimization */ +} + + +/* +** Gets the destination address of a jump instruction. Used to traverse +** a list of jumps. +*/ +static int getjump (FuncState *fs, int pc) { + int offset = GETARG_sBx(fs->f->code[pc]); + if (offset == NO_JUMP) /* point to itself represents end of list */ + return NO_JUMP; /* end of list */ + else + return (pc+1)+offset; /* turn offset into absolute position */ +} + + +/* +** Fix jump instruction at position 'pc' to jump to 'dest'. +** (Jump addresses are relative in Lua) +*/ +static void fixjump (FuncState *fs, int pc, int dest) { + Instruction *jmp = &fs->f->code[pc]; + int offset = dest - (pc + 1); + lua_assert(dest != NO_JUMP); + if (abs(offset) > MAXARG_sBx) + luaX_syntaxerror(fs->ls, "control structure too long"); + SETARG_sBx(*jmp, offset); +} + + +/* +** Concatenate jump-list 'l2' into jump-list 'l1' +*/ +void luaK_concat (FuncState *fs, int *l1, int l2) { + if (l2 == NO_JUMP) return; /* nothing to concatenate? */ + else if (*l1 == NO_JUMP) /* no original list? */ + *l1 = l2; /* 'l1' points to 'l2' */ + else { + int list = *l1; + int next; + while ((next = getjump(fs, list)) != NO_JUMP) /* find last element */ + list = next; + fixjump(fs, list, l2); /* last element links to 'l2' */ + } +} + + +/* +** Create a jump instruction and return its position, so its destination +** can be fixed later (with 'fixjump'). If there are jumps to +** this position (kept in 'jpc'), link them all together so that +** 'patchlistaux' will fix all them directly to the final destination. +*/ +int luaK_jump (FuncState *fs) { + int jpc = fs->jpc; /* save list of jumps to here */ + int j; + fs->jpc = NO_JUMP; /* no more jumps to here */ + j = luaK_codeAsBx(fs, OP_JMP, 0, NO_JUMP); + luaK_concat(fs, &j, jpc); /* keep them on hold */ + return j; +} + + +/* +** Code a 'return' instruction +*/ +void luaK_ret (FuncState *fs, int first, int nret) { + luaK_codeABC(fs, OP_RETURN, first, nret+1, 0); +} + + +/* +** Code a "conditional jump", that is, a test or comparison opcode +** followed by a jump. Return jump position. +*/ +static int condjump (FuncState *fs, OpCode op, int A, int B, int C) { + luaK_codeABC(fs, op, A, B, C); + return luaK_jump(fs); +} + + +/* +** returns current 'pc' and marks it as a jump target (to avoid wrong +** optimizations with consecutive instructions not in the same basic block). +*/ +int luaK_getlabel (FuncState *fs) { + fs->lasttarget = fs->pc; + return fs->pc; +} + + +/* +** Returns the position of the instruction "controlling" a given +** jump (that is, its condition), or the jump itself if it is +** unconditional. +*/ +static Instruction *getjumpcontrol (FuncState *fs, int pc) { + Instruction *pi = &fs->f->code[pc]; + if (pc >= 1 && testTMode(GET_OPCODE(*(pi-1)))) + return pi-1; + else + return pi; +} + + +/* +** Patch destination register for a TESTSET instruction. +** If instruction in position 'node' is not a TESTSET, return 0 ("fails"). +** Otherwise, if 'reg' is not 'NO_REG', set it as the destination +** register. Otherwise, change instruction to a simple 'TEST' (produces +** no register value) +*/ +static int patchtestreg (FuncState *fs, int node, int reg) { + Instruction *i = getjumpcontrol(fs, node); + if (GET_OPCODE(*i) != OP_TESTSET) + return 0; /* cannot patch other instructions */ + if (reg != NO_REG && reg != GETARG_B(*i)) + SETARG_A(*i, reg); + else { + /* no register to put value or register already has the value; + change instruction to simple test */ + *i = CREATE_ABC(OP_TEST, GETARG_B(*i), 0, GETARG_C(*i)); + } + return 1; +} + + +/* +** Traverse a list of tests ensuring no one produces a value +*/ +static void removevalues (FuncState *fs, int list) { + for (; list != NO_JUMP; list = getjump(fs, list)) + patchtestreg(fs, list, NO_REG); +} + + +/* +** Traverse a list of tests, patching their destination address and +** registers: tests producing values jump to 'vtarget' (and put their +** values in 'reg'), other tests jump to 'dtarget'. +*/ +static void patchlistaux (FuncState *fs, int list, int vtarget, int reg, + int dtarget) { + while (list != NO_JUMP) { + int next = getjump(fs, list); + if (patchtestreg(fs, list, reg)) + fixjump(fs, list, vtarget); + else + fixjump(fs, list, dtarget); /* jump to default target */ + list = next; + } +} + + +/* +** Ensure all pending jumps to current position are fixed (jumping +** to current position with no values) and reset list of pending +** jumps +*/ +static void dischargejpc (FuncState *fs) { + patchlistaux(fs, fs->jpc, fs->pc, NO_REG, fs->pc); + fs->jpc = NO_JUMP; +} + + +/* +** Add elements in 'list' to list of pending jumps to "here" +** (current position) +*/ +void luaK_patchtohere (FuncState *fs, int list) { + luaK_getlabel(fs); /* mark "here" as a jump target */ + luaK_concat(fs, &fs->jpc, list); +} + + +/* +** Path all jumps in 'list' to jump to 'target'. +** (The assert means that we cannot fix a jump to a forward address +** because we only know addresses once code is generated.) +*/ +void luaK_patchlist (FuncState *fs, int list, int target) { + if (target == fs->pc) /* 'target' is current position? */ + luaK_patchtohere(fs, list); /* add list to pending jumps */ + else { + lua_assert(target < fs->pc); + patchlistaux(fs, list, target, NO_REG, target); + } +} + + +/* +** Path all jumps in 'list' to close upvalues up to given 'level' +** (The assertion checks that jumps either were closing nothing +** or were closing higher levels, from inner blocks.) +*/ +void luaK_patchclose (FuncState *fs, int list, int level) { + level++; /* argument is +1 to reserve 0 as non-op */ + for (; list != NO_JUMP; list = getjump(fs, list)) { + lua_assert(GET_OPCODE(fs->f->code[list]) == OP_JMP && + (GETARG_A(fs->f->code[list]) == 0 || + GETARG_A(fs->f->code[list]) >= level)); + SETARG_A(fs->f->code[list], level); + } +} + + +/* +** Emit instruction 'i', checking for array sizes and saving also its +** line information. Return 'i' position. +*/ +static int luaK_code (FuncState *fs, Instruction i) { + Proto *f = fs->f; + dischargejpc(fs); /* 'pc' will change */ + /* put new instruction in code array */ + luaM_growvector(fs->ls->L, f->code, fs->pc, f->sizecode, Instruction, + MAX_INT, "opcodes"); + f->code[fs->pc] = i; + /* save corresponding line information */ + luaM_growvector(fs->ls->L, f->lineinfo, fs->pc, f->sizelineinfo, int, + MAX_INT, "opcodes"); + f->lineinfo[fs->pc] = fs->ls->lastline; + return fs->pc++; +} + + +/* +** Format and emit an 'iABC' instruction. (Assertions check consistency +** of parameters versus opcode.) +*/ +int luaK_codeABC (FuncState *fs, OpCode o, int a, int b, int c) { + lua_assert(getOpMode(o) == iABC); + lua_assert(getBMode(o) != OpArgN || b == 0); + lua_assert(getCMode(o) != OpArgN || c == 0); + lua_assert(a <= MAXARG_A && b <= MAXARG_B && c <= MAXARG_C); + return luaK_code(fs, CREATE_ABC(o, a, b, c)); +} + + +/* +** Format and emit an 'iABx' instruction. +*/ +int luaK_codeABx (FuncState *fs, OpCode o, int a, unsigned int bc) { + lua_assert(getOpMode(o) == iABx || getOpMode(o) == iAsBx); + lua_assert(getCMode(o) == OpArgN); + lua_assert(a <= MAXARG_A && bc <= MAXARG_Bx); + return luaK_code(fs, CREATE_ABx(o, a, bc)); +} + + +/* +** Emit an "extra argument" instruction (format 'iAx') +*/ +static int codeextraarg (FuncState *fs, int a) { + lua_assert(a <= MAXARG_Ax); + return luaK_code(fs, CREATE_Ax(OP_EXTRAARG, a)); +} + + +/* +** Emit a "load constant" instruction, using either 'OP_LOADK' +** (if constant index 'k' fits in 18 bits) or an 'OP_LOADKX' +** instruction with "extra argument". +*/ +int luaK_codek (FuncState *fs, int reg, int k) { + if (k <= MAXARG_Bx) + return luaK_codeABx(fs, OP_LOADK, reg, k); + else { + int p = luaK_codeABx(fs, OP_LOADKX, reg, 0); + codeextraarg(fs, k); + return p; + } +} + + +/* +** Check register-stack level, keeping track of its maximum size +** in field 'maxstacksize' +*/ +void luaK_checkstack (FuncState *fs, int n) { + int newstack = fs->freereg + n; + if (newstack > fs->f->maxstacksize) { + if (newstack >= MAXREGS) + luaX_syntaxerror(fs->ls, + "function or expression needs too many registers"); + fs->f->maxstacksize = cast_byte(newstack); + } +} + + +/* +** Reserve 'n' registers in register stack +*/ +void luaK_reserveregs (FuncState *fs, int n) { + luaK_checkstack(fs, n); + fs->freereg += n; +} + + +/* +** Free register 'reg', if it is neither a constant index nor +** a local variable. +) +*/ +static void freereg (FuncState *fs, int reg) { + if (!ISK(reg) && reg >= fs->nactvar) { + fs->freereg--; + lua_assert(reg == fs->freereg); + } +} + + +/* +** Free register used by expression 'e' (if any) +*/ +static void freeexp (FuncState *fs, expdesc *e) { + if (e->k == VNONRELOC) + freereg(fs, e->u.info); +} + + +/* +** Free registers used by expressions 'e1' and 'e2' (if any) in proper +** order. +*/ +static void freeexps (FuncState *fs, expdesc *e1, expdesc *e2) { + int r1 = (e1->k == VNONRELOC) ? e1->u.info : -1; + int r2 = (e2->k == VNONRELOC) ? e2->u.info : -1; + if (r1 > r2) { + freereg(fs, r1); + freereg(fs, r2); + } + else { + freereg(fs, r2); + freereg(fs, r1); + } +} + + +/* +** Add constant 'v' to prototype's list of constants (field 'k'). +** Use scanner's table to cache position of constants in constant list +** and try to reuse constants. Because some values should not be used +** as keys (nil cannot be a key, integer keys can collapse with float +** keys), the caller must provide a useful 'key' for indexing the cache. +*/ +static int addk (FuncState *fs, TValue *key, TValue *v) { + lua_State *L = fs->ls->L; + Proto *f = fs->f; + TValue *idx = luaH_set(L, fs->ls->h, key); /* index scanner table */ + int k, oldsize; + if (ttisinteger(idx)) { /* is there an index there? */ + k = cast_int(ivalue(idx)); + /* correct value? (warning: must distinguish floats from integers!) */ + if (k < fs->nk && ttype(&f->k[k]) == ttype(v) && + luaV_rawequalobj(&f->k[k], v)) + return k; /* reuse index */ + } + /* constant not found; create a new entry */ + oldsize = f->sizek; + k = fs->nk; + /* numerical value does not need GC barrier; + table has no metatable, so it does not need to invalidate cache */ + setivalue(idx, k); + luaM_growvector(L, f->k, k, f->sizek, TValue, MAXARG_Ax, "constants"); + while (oldsize < f->sizek) setnilvalue(&f->k[oldsize++]); + setobj(L, &f->k[k], v); + fs->nk++; + luaC_barrier(L, f, v); + return k; +} + + +/* +** Add a string to list of constants and return its index. +*/ +int luaK_stringK (FuncState *fs, TString *s) { + TValue o; + setsvalue(fs->ls->L, &o, s); + return addk(fs, &o, &o); /* use string itself as key */ +} + + +/* +** Add an integer to list of constants and return its index. +** Integers use userdata as keys to avoid collision with floats with +** same value; conversion to 'void*' is used only for hashing, so there +** are no "precision" problems. +*/ +int luaK_intK (FuncState *fs, lua_Integer n) { + TValue k, o; + setpvalue(&k, cast(void*, cast(size_t, n))); + setivalue(&o, n); + return addk(fs, &k, &o); +} + +/* +** Add a float to list of constants and return its index. +*/ +static int luaK_numberK (FuncState *fs, lua_Number r) { + TValue o; + setfltvalue(&o, r); + return addk(fs, &o, &o); /* use number itself as key */ +} + + +/* +** Add a boolean to list of constants and return its index. +*/ +static int boolK (FuncState *fs, int b) { + TValue o; + setbvalue(&o, b); + return addk(fs, &o, &o); /* use boolean itself as key */ +} + + +/* +** Add nil to list of constants and return its index. +*/ +static int nilK (FuncState *fs) { + TValue k, v; + setnilvalue(&v); + /* cannot use nil as key; instead use table itself to represent nil */ + sethvalue(fs->ls->L, &k, fs->ls->h); + return addk(fs, &k, &v); +} + + +/* +** Fix an expression to return the number of results 'nresults'. +** Either 'e' is a multi-ret expression (function call or vararg) +** or 'nresults' is LUA_MULTRET (as any expression can satisfy that). +*/ +void luaK_setreturns (FuncState *fs, expdesc *e, int nresults) { + if (e->k == VCALL) { /* expression is an open function call? */ + SETARG_C(getinstruction(fs, e), nresults + 1); + } + else if (e->k == VVARARG) { + Instruction *pc = &getinstruction(fs, e); + SETARG_B(*pc, nresults + 1); + SETARG_A(*pc, fs->freereg); + luaK_reserveregs(fs, 1); + } + else lua_assert(nresults == LUA_MULTRET); +} + + +/* +** Fix an expression to return one result. +** If expression is not a multi-ret expression (function call or +** vararg), it already returns one result, so nothing needs to be done. +** Function calls become VNONRELOC expressions (as its result comes +** fixed in the base register of the call), while vararg expressions +** become VRELOCABLE (as OP_VARARG puts its results where it wants). +** (Calls are created returning one result, so that does not need +** to be fixed.) +*/ +void luaK_setoneret (FuncState *fs, expdesc *e) { + if (e->k == VCALL) { /* expression is an open function call? */ + /* already returns 1 value */ + lua_assert(GETARG_C(getinstruction(fs, e)) == 2); + e->k = VNONRELOC; /* result has fixed position */ + e->u.info = GETARG_A(getinstruction(fs, e)); + } + else if (e->k == VVARARG) { + SETARG_B(getinstruction(fs, e), 2); + e->k = VRELOCABLE; /* can relocate its simple result */ + } +} + + +/* +** Ensure that expression 'e' is not a variable. +*/ +void luaK_dischargevars (FuncState *fs, expdesc *e) { + switch (e->k) { + case VLOCAL: { /* already in a register */ + e->k = VNONRELOC; /* becomes a non-relocatable value */ + break; + } + case VUPVAL: { /* move value to some (pending) register */ + e->u.info = luaK_codeABC(fs, OP_GETUPVAL, 0, e->u.info, 0); + e->k = VRELOCABLE; + break; + } + case VINDEXED: { + OpCode op; + freereg(fs, e->u.ind.idx); + if (e->u.ind.vt == VLOCAL) { /* is 't' in a register? */ + freereg(fs, e->u.ind.t); + op = OP_GETTABLE; + } + else { + lua_assert(e->u.ind.vt == VUPVAL); + op = OP_GETTABUP; /* 't' is in an upvalue */ + } + e->u.info = luaK_codeABC(fs, op, 0, e->u.ind.t, e->u.ind.idx); + e->k = VRELOCABLE; + break; + } + case VVARARG: case VCALL: { + luaK_setoneret(fs, e); + break; + } + default: break; /* there is one value available (somewhere) */ + } +} + + +/* +** Ensures expression value is in register 'reg' (and therefore +** 'e' will become a non-relocatable expression). +*/ +static void discharge2reg (FuncState *fs, expdesc *e, int reg) { + luaK_dischargevars(fs, e); + switch (e->k) { + case VNIL: { + luaK_nil(fs, reg, 1); + break; + } + case VFALSE: case VTRUE: { + luaK_codeABC(fs, OP_LOADBOOL, reg, e->k == VTRUE, 0); + break; + } + case VK: { + luaK_codek(fs, reg, e->u.info); + break; + } + case VKFLT: { + luaK_codek(fs, reg, luaK_numberK(fs, e->u.nval)); + break; + } + case VKINT: { + luaK_codek(fs, reg, luaK_intK(fs, e->u.ival)); + break; + } + case VRELOCABLE: { + Instruction *pc = &getinstruction(fs, e); + SETARG_A(*pc, reg); /* instruction will put result in 'reg' */ + break; + } + case VNONRELOC: { + if (reg != e->u.info) + luaK_codeABC(fs, OP_MOVE, reg, e->u.info, 0); + break; + } + default: { + lua_assert(e->k == VJMP); + return; /* nothing to do... */ + } + } + e->u.info = reg; + e->k = VNONRELOC; +} + + +/* +** Ensures expression value is in any register. +*/ +static void discharge2anyreg (FuncState *fs, expdesc *e) { + if (e->k != VNONRELOC) { /* no fixed register yet? */ + luaK_reserveregs(fs, 1); /* get a register */ + discharge2reg(fs, e, fs->freereg-1); /* put value there */ + } +} + + +static int code_loadbool (FuncState *fs, int A, int b, int jump) { + luaK_getlabel(fs); /* those instructions may be jump targets */ + return luaK_codeABC(fs, OP_LOADBOOL, A, b, jump); +} + + +/* +** check whether list has any jump that do not produce a value +** or produce an inverted value +*/ +static int need_value (FuncState *fs, int list) { + for (; list != NO_JUMP; list = getjump(fs, list)) { + Instruction i = *getjumpcontrol(fs, list); + if (GET_OPCODE(i) != OP_TESTSET) return 1; + } + return 0; /* not found */ +} + + +/* +** Ensures final expression result (including results from its jump +** lists) is in register 'reg'. +** If expression has jumps, need to patch these jumps either to +** its final position or to "load" instructions (for those tests +** that do not produce values). +*/ +static void exp2reg (FuncState *fs, expdesc *e, int reg) { + discharge2reg(fs, e, reg); + if (e->k == VJMP) /* expression itself is a test? */ + luaK_concat(fs, &e->t, e->u.info); /* put this jump in 't' list */ + if (hasjumps(e)) { + int final; /* position after whole expression */ + int p_f = NO_JUMP; /* position of an eventual LOAD false */ + int p_t = NO_JUMP; /* position of an eventual LOAD true */ + if (need_value(fs, e->t) || need_value(fs, e->f)) { + int fj = (e->k == VJMP) ? NO_JUMP : luaK_jump(fs); + p_f = code_loadbool(fs, reg, 0, 1); + p_t = code_loadbool(fs, reg, 1, 0); + luaK_patchtohere(fs, fj); + } + final = luaK_getlabel(fs); + patchlistaux(fs, e->f, final, reg, p_f); + patchlistaux(fs, e->t, final, reg, p_t); + } + e->f = e->t = NO_JUMP; + e->u.info = reg; + e->k = VNONRELOC; +} + + +/* +** Ensures final expression result (including results from its jump +** lists) is in next available register. +*/ +void luaK_exp2nextreg (FuncState *fs, expdesc *e) { + luaK_dischargevars(fs, e); + freeexp(fs, e); + luaK_reserveregs(fs, 1); + exp2reg(fs, e, fs->freereg - 1); +} + + +/* +** Ensures final expression result (including results from its jump +** lists) is in some (any) register and return that register. +*/ +int luaK_exp2anyreg (FuncState *fs, expdesc *e) { + luaK_dischargevars(fs, e); + if (e->k == VNONRELOC) { /* expression already has a register? */ + if (!hasjumps(e)) /* no jumps? */ + return e->u.info; /* result is already in a register */ + if (e->u.info >= fs->nactvar) { /* reg. is not a local? */ + exp2reg(fs, e, e->u.info); /* put final result in it */ + return e->u.info; + } + } + luaK_exp2nextreg(fs, e); /* otherwise, use next available register */ + return e->u.info; +} + + +/* +** Ensures final expression result is either in a register or in an +** upvalue. +*/ +void luaK_exp2anyregup (FuncState *fs, expdesc *e) { + if (e->k != VUPVAL || hasjumps(e)) + luaK_exp2anyreg(fs, e); +} + + +/* +** Ensures final expression result is either in a register or it is +** a constant. +*/ +void luaK_exp2val (FuncState *fs, expdesc *e) { + if (hasjumps(e)) + luaK_exp2anyreg(fs, e); + else + luaK_dischargevars(fs, e); +} + + +/* +** Ensures final expression result is in a valid R/K index +** (that is, it is either in a register or in 'k' with an index +** in the range of R/K indices). +** Returns R/K index. +*/ +int luaK_exp2RK (FuncState *fs, expdesc *e) { + luaK_exp2val(fs, e); + switch (e->k) { /* move constants to 'k' */ + case VTRUE: e->u.info = boolK(fs, 1); goto vk; + case VFALSE: e->u.info = boolK(fs, 0); goto vk; + case VNIL: e->u.info = nilK(fs); goto vk; + case VKINT: e->u.info = luaK_intK(fs, e->u.ival); goto vk; + case VKFLT: e->u.info = luaK_numberK(fs, e->u.nval); goto vk; + case VK: + vk: + e->k = VK; + if (e->u.info <= MAXINDEXRK) /* constant fits in 'argC'? */ + return RKASK(e->u.info); + else break; + default: break; + } + /* not a constant in the right range: put it in a register */ + return luaK_exp2anyreg(fs, e); +} + + +/* +** Generate code to store result of expression 'ex' into variable 'var'. +*/ +void luaK_storevar (FuncState *fs, expdesc *var, expdesc *ex) { + switch (var->k) { + case VLOCAL: { + freeexp(fs, ex); + exp2reg(fs, ex, var->u.info); /* compute 'ex' into proper place */ + return; + } + case VUPVAL: { + int e = luaK_exp2anyreg(fs, ex); + luaK_codeABC(fs, OP_SETUPVAL, e, var->u.info, 0); + break; + } + case VINDEXED: { + OpCode op = (var->u.ind.vt == VLOCAL) ? OP_SETTABLE : OP_SETTABUP; + int e = luaK_exp2RK(fs, ex); + luaK_codeABC(fs, op, var->u.ind.t, var->u.ind.idx, e); + break; + } + default: lua_assert(0); /* invalid var kind to store */ + } + freeexp(fs, ex); +} + + +/* +** Emit SELF instruction (convert expression 'e' into 'e:key(e,'). +*/ +void luaK_self (FuncState *fs, expdesc *e, expdesc *key) { + int ereg; + luaK_exp2anyreg(fs, e); + ereg = e->u.info; /* register where 'e' was placed */ + freeexp(fs, e); + e->u.info = fs->freereg; /* base register for op_self */ + e->k = VNONRELOC; /* self expression has a fixed register */ + luaK_reserveregs(fs, 2); /* function and 'self' produced by op_self */ + luaK_codeABC(fs, OP_SELF, e->u.info, ereg, luaK_exp2RK(fs, key)); + freeexp(fs, key); +} + + +/* +** Negate condition 'e' (where 'e' is a comparison). +*/ +static void negatecondition (FuncState *fs, expdesc *e) { + Instruction *pc = getjumpcontrol(fs, e->u.info); + lua_assert(testTMode(GET_OPCODE(*pc)) && GET_OPCODE(*pc) != OP_TESTSET && + GET_OPCODE(*pc) != OP_TEST); + SETARG_A(*pc, !(GETARG_A(*pc))); +} + + +/* +** Emit instruction to jump if 'e' is 'cond' (that is, if 'cond' +** is true, code will jump if 'e' is true.) Return jump position. +** Optimize when 'e' is 'not' something, inverting the condition +** and removing the 'not'. +*/ +static int jumponcond (FuncState *fs, expdesc *e, int cond) { + if (e->k == VRELOCABLE) { + Instruction ie = getinstruction(fs, e); + if (GET_OPCODE(ie) == OP_NOT) { + fs->pc--; /* remove previous OP_NOT */ + return condjump(fs, OP_TEST, GETARG_B(ie), 0, !cond); + } + /* else go through */ + } + discharge2anyreg(fs, e); + freeexp(fs, e); + return condjump(fs, OP_TESTSET, NO_REG, e->u.info, cond); +} + + +/* +** Emit code to go through if 'e' is true, jump otherwise. +*/ +void luaK_goiftrue (FuncState *fs, expdesc *e) { + int pc; /* pc of new jump */ + luaK_dischargevars(fs, e); + switch (e->k) { + case VJMP: { /* condition? */ + negatecondition(fs, e); /* jump when it is false */ + pc = e->u.info; /* save jump position */ + break; + } + case VK: case VKFLT: case VKINT: case VTRUE: { + pc = NO_JUMP; /* always true; do nothing */ + break; + } + default: { + pc = jumponcond(fs, e, 0); /* jump when false */ + break; + } + } + luaK_concat(fs, &e->f, pc); /* insert new jump in false list */ + luaK_patchtohere(fs, e->t); /* true list jumps to here (to go through) */ + e->t = NO_JUMP; +} + + +/* +** Emit code to go through if 'e' is false, jump otherwise. +*/ +void luaK_goiffalse (FuncState *fs, expdesc *e) { + int pc; /* pc of new jump */ + luaK_dischargevars(fs, e); + switch (e->k) { + case VJMP: { + pc = e->u.info; /* already jump if true */ + break; + } + case VNIL: case VFALSE: { + pc = NO_JUMP; /* always false; do nothing */ + break; + } + default: { + pc = jumponcond(fs, e, 1); /* jump if true */ + break; + } + } + luaK_concat(fs, &e->t, pc); /* insert new jump in 't' list */ + luaK_patchtohere(fs, e->f); /* false list jumps to here (to go through) */ + e->f = NO_JUMP; +} + + +/* +** Code 'not e', doing constant folding. +*/ +static void codenot (FuncState *fs, expdesc *e) { + luaK_dischargevars(fs, e); + switch (e->k) { + case VNIL: case VFALSE: { + e->k = VTRUE; /* true == not nil == not false */ + break; + } + case VK: case VKFLT: case VKINT: case VTRUE: { + e->k = VFALSE; /* false == not "x" == not 0.5 == not 1 == not true */ + break; + } + case VJMP: { + negatecondition(fs, e); + break; + } + case VRELOCABLE: + case VNONRELOC: { + discharge2anyreg(fs, e); + freeexp(fs, e); + e->u.info = luaK_codeABC(fs, OP_NOT, 0, e->u.info, 0); + e->k = VRELOCABLE; + break; + } + default: lua_assert(0); /* cannot happen */ + } + /* interchange true and false lists */ + { int temp = e->f; e->f = e->t; e->t = temp; } + removevalues(fs, e->f); /* values are useless when negated */ + removevalues(fs, e->t); +} + + +/* +** Create expression 't[k]'. 't' must have its final result already in a +** register or upvalue. +*/ +void luaK_indexed (FuncState *fs, expdesc *t, expdesc *k) { + lua_assert(!hasjumps(t) && (vkisinreg(t->k) || t->k == VUPVAL)); + t->u.ind.t = t->u.info; /* register or upvalue index */ + t->u.ind.idx = luaK_exp2RK(fs, k); /* R/K index for key */ + t->u.ind.vt = (t->k == VUPVAL) ? VUPVAL : VLOCAL; + t->k = VINDEXED; +} + + +/* +** Return false if folding can raise an error. +** Bitwise operations need operands convertible to integers; division +** operations cannot have 0 as divisor. +*/ +static int validop (int op, TValue *v1, TValue *v2) { + switch (op) { + case LUA_OPBAND: case LUA_OPBOR: case LUA_OPBXOR: + case LUA_OPSHL: case LUA_OPSHR: case LUA_OPBNOT: { /* conversion errors */ + lua_Integer i; + return (tointeger(v1, &i) && tointeger(v2, &i)); + } + case LUA_OPDIV: case LUA_OPIDIV: case LUA_OPMOD: /* division by 0 */ + return (nvalue(v2) != 0); + default: return 1; /* everything else is valid */ + } +} + + +/* +** Try to "constant-fold" an operation; return 1 iff successful. +** (In this case, 'e1' has the final result.) +*/ +static int constfolding (FuncState *fs, int op, expdesc *e1, + const expdesc *e2) { + TValue v1, v2, res; + if (!tonumeral(e1, &v1) || !tonumeral(e2, &v2) || !validop(op, &v1, &v2)) + return 0; /* non-numeric operands or not safe to fold */ + luaO_arith(fs->ls->L, op, &v1, &v2, &res); /* does operation */ + if (ttisinteger(&res)) { + e1->k = VKINT; + e1->u.ival = ivalue(&res); + } + else { /* folds neither NaN nor 0.0 (to avoid problems with -0.0) */ + lua_Number n = fltvalue(&res); + if (luai_numisnan(n) || n == 0) + return 0; + e1->k = VKFLT; + e1->u.nval = n; + } + return 1; +} + + +/* +** Emit code for unary expressions that "produce values" +** (everything but 'not'). +** Expression to produce final result will be encoded in 'e'. +*/ +static void codeunexpval (FuncState *fs, OpCode op, expdesc *e, int line) { + int r = luaK_exp2anyreg(fs, e); /* opcodes operate only on registers */ + freeexp(fs, e); + e->u.info = luaK_codeABC(fs, op, 0, r, 0); /* generate opcode */ + e->k = VRELOCABLE; /* all those operations are relocatable */ + luaK_fixline(fs, line); +} + + +/* +** Emit code for binary expressions that "produce values" +** (everything but logical operators 'and'/'or' and comparison +** operators). +** Expression to produce final result will be encoded in 'e1'. +** Because 'luaK_exp2RK' can free registers, its calls must be +** in "stack order" (that is, first on 'e2', which may have more +** recent registers to be released). +*/ +static void codebinexpval (FuncState *fs, OpCode op, + expdesc *e1, expdesc *e2, int line) { + int rk2 = luaK_exp2RK(fs, e2); /* both operands are "RK" */ + int rk1 = luaK_exp2RK(fs, e1); + freeexps(fs, e1, e2); + e1->u.info = luaK_codeABC(fs, op, 0, rk1, rk2); /* generate opcode */ + e1->k = VRELOCABLE; /* all those operations are relocatable */ + luaK_fixline(fs, line); +} + + +/* +** Emit code for comparisons. +** 'e1' was already put in R/K form by 'luaK_infix'. +*/ +static void codecomp (FuncState *fs, BinOpr opr, expdesc *e1, expdesc *e2) { + int rk1 = (e1->k == VK) ? RKASK(e1->u.info) + : check_exp(e1->k == VNONRELOC, e1->u.info); + int rk2 = luaK_exp2RK(fs, e2); + freeexps(fs, e1, e2); + switch (opr) { + case OPR_NE: { /* '(a ~= b)' ==> 'not (a == b)' */ + e1->u.info = condjump(fs, OP_EQ, 0, rk1, rk2); + break; + } + case OPR_GT: case OPR_GE: { + /* '(a > b)' ==> '(b < a)'; '(a >= b)' ==> '(b <= a)' */ + OpCode op = cast(OpCode, (opr - OPR_NE) + OP_EQ); + e1->u.info = condjump(fs, op, 1, rk2, rk1); /* invert operands */ + break; + } + default: { /* '==', '<', '<=' use their own opcodes */ + OpCode op = cast(OpCode, (opr - OPR_EQ) + OP_EQ); + e1->u.info = condjump(fs, op, 1, rk1, rk2); + break; + } + } + e1->k = VJMP; +} + + +/* +** Aplly prefix operation 'op' to expression 'e'. +*/ +void luaK_prefix (FuncState *fs, UnOpr op, expdesc *e, int line) { + static const expdesc ef = {VKINT, {0}, NO_JUMP, NO_JUMP}; + switch (op) { + case OPR_MINUS: case OPR_BNOT: /* use 'ef' as fake 2nd operand */ + if (constfolding(fs, op + LUA_OPUNM, e, &ef)) + break; + /* FALLTHROUGH */ + case OPR_LEN: + codeunexpval(fs, cast(OpCode, op + OP_UNM), e, line); + break; + case OPR_NOT: codenot(fs, e); break; + default: lua_assert(0); + } +} + + +/* +** Process 1st operand 'v' of binary operation 'op' before reading +** 2nd operand. +*/ +void luaK_infix (FuncState *fs, BinOpr op, expdesc *v) { + switch (op) { + case OPR_AND: { + luaK_goiftrue(fs, v); /* go ahead only if 'v' is true */ + break; + } + case OPR_OR: { + luaK_goiffalse(fs, v); /* go ahead only if 'v' is false */ + break; + } + case OPR_CONCAT: { + luaK_exp2nextreg(fs, v); /* operand must be on the 'stack' */ + break; + } + case OPR_ADD: case OPR_SUB: + case OPR_MUL: case OPR_DIV: case OPR_IDIV: + case OPR_MOD: case OPR_POW: + case OPR_BAND: case OPR_BOR: case OPR_BXOR: + case OPR_SHL: case OPR_SHR: { + if (!tonumeral(v, NULL)) + luaK_exp2RK(fs, v); + /* else keep numeral, which may be folded with 2nd operand */ + break; + } + default: { + luaK_exp2RK(fs, v); + break; + } + } +} + + +/* +** Finalize code for binary operation, after reading 2nd operand. +** For '(a .. b .. c)' (which is '(a .. (b .. c))', because +** concatenation is right associative), merge second CONCAT into first +** one. +*/ +void luaK_posfix (FuncState *fs, BinOpr op, + expdesc *e1, expdesc *e2, int line) { + switch (op) { + case OPR_AND: { + lua_assert(e1->t == NO_JUMP); /* list closed by 'luK_infix' */ + luaK_dischargevars(fs, e2); + luaK_concat(fs, &e2->f, e1->f); + *e1 = *e2; + break; + } + case OPR_OR: { + lua_assert(e1->f == NO_JUMP); /* list closed by 'luK_infix' */ + luaK_dischargevars(fs, e2); + luaK_concat(fs, &e2->t, e1->t); + *e1 = *e2; + break; + } + case OPR_CONCAT: { + luaK_exp2val(fs, e2); + if (e2->k == VRELOCABLE && + GET_OPCODE(getinstruction(fs, e2)) == OP_CONCAT) { + lua_assert(e1->u.info == GETARG_B(getinstruction(fs, e2))-1); + freeexp(fs, e1); + SETARG_B(getinstruction(fs, e2), e1->u.info); + e1->k = VRELOCABLE; e1->u.info = e2->u.info; + } + else { + luaK_exp2nextreg(fs, e2); /* operand must be on the 'stack' */ + codebinexpval(fs, OP_CONCAT, e1, e2, line); + } + break; + } + case OPR_ADD: case OPR_SUB: case OPR_MUL: case OPR_DIV: + case OPR_IDIV: case OPR_MOD: case OPR_POW: + case OPR_BAND: case OPR_BOR: case OPR_BXOR: + case OPR_SHL: case OPR_SHR: { + if (!constfolding(fs, op + LUA_OPADD, e1, e2)) + codebinexpval(fs, cast(OpCode, op + OP_ADD), e1, e2, line); + break; + } + case OPR_EQ: case OPR_LT: case OPR_LE: + case OPR_NE: case OPR_GT: case OPR_GE: { + codecomp(fs, op, e1, e2); + break; + } + default: lua_assert(0); + } +} + + +/* +** Change line information associated with current position. +*/ +void luaK_fixline (FuncState *fs, int line) { + fs->f->lineinfo[fs->pc - 1] = line; +} + + +/* +** Emit a SETLIST instruction. +** 'base' is register that keeps table; +** 'nelems' is #table plus those to be stored now; +** 'tostore' is number of values (in registers 'base + 1',...) to add to +** table (or LUA_MULTRET to add up to stack top). +*/ +void luaK_setlist (FuncState *fs, int base, int nelems, int tostore) { + int c = (nelems - 1)/LFIELDS_PER_FLUSH + 1; + int b = (tostore == LUA_MULTRET) ? 0 : tostore; + lua_assert(tostore != 0 && tostore <= LFIELDS_PER_FLUSH); + if (c <= MAXARG_C) + luaK_codeABC(fs, OP_SETLIST, base, b, c); + else if (c <= MAXARG_Ax) { + luaK_codeABC(fs, OP_SETLIST, base, b, 0); + codeextraarg(fs, c); + } + else + luaX_syntaxerror(fs->ls, "constructor too long"); + fs->freereg = base + 1; /* free registers with list values */ +} + diff --git a/EQ2/source/LUA/lcode.h b/EQ2/source/LUA/lcode.h new file mode 100644 index 000000000..cd306d573 --- /dev/null +++ b/EQ2/source/LUA/lcode.h @@ -0,0 +1,88 @@ +/* +** $Id: lcode.h,v 1.64 2016/01/05 16:22:37 roberto Exp $ +** Code generator for Lua +** See Copyright Notice in lua.h +*/ + +#ifndef lcode_h +#define lcode_h + +#include "llex.h" +#include "lobject.h" +#include "lopcodes.h" +#include "lparser.h" + + +/* +** Marks the end of a patch list. It is an invalid value both as an absolute +** address, and as a list link (would link an element to itself). +*/ +#define NO_JUMP (-1) + + +/* +** grep "ORDER OPR" if you change these enums (ORDER OP) +*/ +typedef enum BinOpr { + OPR_ADD, OPR_SUB, OPR_MUL, OPR_MOD, OPR_POW, + OPR_DIV, + OPR_IDIV, + OPR_BAND, OPR_BOR, OPR_BXOR, + OPR_SHL, OPR_SHR, + OPR_CONCAT, + OPR_EQ, OPR_LT, OPR_LE, + OPR_NE, OPR_GT, OPR_GE, + OPR_AND, OPR_OR, + OPR_NOBINOPR +} BinOpr; + + +typedef enum UnOpr { OPR_MINUS, OPR_BNOT, OPR_NOT, OPR_LEN, OPR_NOUNOPR } UnOpr; + + +/* get (pointer to) instruction of given 'expdesc' */ +#define getinstruction(fs,e) ((fs)->f->code[(e)->u.info]) + +#define luaK_codeAsBx(fs,o,A,sBx) luaK_codeABx(fs,o,A,(sBx)+MAXARG_sBx) + +#define luaK_setmultret(fs,e) luaK_setreturns(fs, e, LUA_MULTRET) + +#define luaK_jumpto(fs,t) luaK_patchlist(fs, luaK_jump(fs), t) + +LUAI_FUNC int luaK_codeABx (FuncState *fs, OpCode o, int A, unsigned int Bx); +LUAI_FUNC int luaK_codeABC (FuncState *fs, OpCode o, int A, int B, int C); +LUAI_FUNC int luaK_codek (FuncState *fs, int reg, int k); +LUAI_FUNC void luaK_fixline (FuncState *fs, int line); +LUAI_FUNC void luaK_nil (FuncState *fs, int from, int n); +LUAI_FUNC void luaK_reserveregs (FuncState *fs, int n); +LUAI_FUNC void luaK_checkstack (FuncState *fs, int n); +LUAI_FUNC int luaK_stringK (FuncState *fs, TString *s); +LUAI_FUNC int luaK_intK (FuncState *fs, lua_Integer n); +LUAI_FUNC void luaK_dischargevars (FuncState *fs, expdesc *e); +LUAI_FUNC int luaK_exp2anyreg (FuncState *fs, expdesc *e); +LUAI_FUNC void luaK_exp2anyregup (FuncState *fs, expdesc *e); +LUAI_FUNC void luaK_exp2nextreg (FuncState *fs, expdesc *e); +LUAI_FUNC void luaK_exp2val (FuncState *fs, expdesc *e); +LUAI_FUNC int luaK_exp2RK (FuncState *fs, expdesc *e); +LUAI_FUNC void luaK_self (FuncState *fs, expdesc *e, expdesc *key); +LUAI_FUNC void luaK_indexed (FuncState *fs, expdesc *t, expdesc *k); +LUAI_FUNC void luaK_goiftrue (FuncState *fs, expdesc *e); +LUAI_FUNC void luaK_goiffalse (FuncState *fs, expdesc *e); +LUAI_FUNC void luaK_storevar (FuncState *fs, expdesc *var, expdesc *e); +LUAI_FUNC void luaK_setreturns (FuncState *fs, expdesc *e, int nresults); +LUAI_FUNC void luaK_setoneret (FuncState *fs, expdesc *e); +LUAI_FUNC int luaK_jump (FuncState *fs); +LUAI_FUNC void luaK_ret (FuncState *fs, int first, int nret); +LUAI_FUNC void luaK_patchlist (FuncState *fs, int list, int target); +LUAI_FUNC void luaK_patchtohere (FuncState *fs, int list); +LUAI_FUNC void luaK_patchclose (FuncState *fs, int list, int level); +LUAI_FUNC void luaK_concat (FuncState *fs, int *l1, int l2); +LUAI_FUNC int luaK_getlabel (FuncState *fs); +LUAI_FUNC void luaK_prefix (FuncState *fs, UnOpr op, expdesc *v, int line); +LUAI_FUNC void luaK_infix (FuncState *fs, BinOpr op, expdesc *v); +LUAI_FUNC void luaK_posfix (FuncState *fs, BinOpr op, expdesc *v1, + expdesc *v2, int line); +LUAI_FUNC void luaK_setlist (FuncState *fs, int base, int nelems, int tostore); + + +#endif diff --git a/EQ2/source/LUA/lcorolib.c b/EQ2/source/LUA/lcorolib.c new file mode 100644 index 000000000..2303429e7 --- /dev/null +++ b/EQ2/source/LUA/lcorolib.c @@ -0,0 +1,168 @@ +/* +** $Id: lcorolib.c,v 1.10 2016/04/11 19:19:55 roberto Exp $ +** Coroutine Library +** See Copyright Notice in lua.h +*/ + +#define lcorolib_c +#define LUA_LIB + +#include "lprefix.h" + + +#include + +#include "lua.h" + +#include "lauxlib.h" +#include "lualib.h" + + +static lua_State *getco (lua_State *L) { + lua_State *co = lua_tothread(L, 1); + luaL_argcheck(L, co, 1, "thread expected"); + return co; +} + + +static int auxresume (lua_State *L, lua_State *co, int narg) { + int status; + if (!lua_checkstack(co, narg)) { + lua_pushliteral(L, "too many arguments to resume"); + return -1; /* error flag */ + } + if (lua_status(co) == LUA_OK && lua_gettop(co) == 0) { + lua_pushliteral(L, "cannot resume dead coroutine"); + return -1; /* error flag */ + } + lua_xmove(L, co, narg); + status = lua_resume(co, L, narg); + if (status == LUA_OK || status == LUA_YIELD) { + int nres = lua_gettop(co); + if (!lua_checkstack(L, nres + 1)) { + lua_pop(co, nres); /* remove results anyway */ + lua_pushliteral(L, "too many results to resume"); + return -1; /* error flag */ + } + lua_xmove(co, L, nres); /* move yielded values */ + return nres; + } + else { + lua_xmove(co, L, 1); /* move error message */ + return -1; /* error flag */ + } +} + + +static int luaB_coresume (lua_State *L) { + lua_State *co = getco(L); + int r; + r = auxresume(L, co, lua_gettop(L) - 1); + if (r < 0) { + lua_pushboolean(L, 0); + lua_insert(L, -2); + return 2; /* return false + error message */ + } + else { + lua_pushboolean(L, 1); + lua_insert(L, -(r + 1)); + return r + 1; /* return true + 'resume' returns */ + } +} + + +static int luaB_auxwrap (lua_State *L) { + lua_State *co = lua_tothread(L, lua_upvalueindex(1)); + int r = auxresume(L, co, lua_gettop(L)); + if (r < 0) { + if (lua_type(L, -1) == LUA_TSTRING) { /* error object is a string? */ + luaL_where(L, 1); /* add extra info */ + lua_insert(L, -2); + lua_concat(L, 2); + } + return lua_error(L); /* propagate error */ + } + return r; +} + + +static int luaB_cocreate (lua_State *L) { + lua_State *NL; + luaL_checktype(L, 1, LUA_TFUNCTION); + NL = lua_newthread(L); + lua_pushvalue(L, 1); /* move function to top */ + lua_xmove(L, NL, 1); /* move function from L to NL */ + return 1; +} + + +static int luaB_cowrap (lua_State *L) { + luaB_cocreate(L); + lua_pushcclosure(L, luaB_auxwrap, 1); + return 1; +} + + +static int luaB_yield (lua_State *L) { + return lua_yield(L, lua_gettop(L)); +} + + +static int luaB_costatus (lua_State *L) { + lua_State *co = getco(L); + if (L == co) lua_pushliteral(L, "running"); + else { + switch (lua_status(co)) { + case LUA_YIELD: + lua_pushliteral(L, "suspended"); + break; + case LUA_OK: { + lua_Debug ar; + if (lua_getstack(co, 0, &ar) > 0) /* does it have frames? */ + lua_pushliteral(L, "normal"); /* it is running */ + else if (lua_gettop(co) == 0) + lua_pushliteral(L, "dead"); + else + lua_pushliteral(L, "suspended"); /* initial state */ + break; + } + default: /* some error occurred */ + lua_pushliteral(L, "dead"); + break; + } + } + return 1; +} + + +static int luaB_yieldable (lua_State *L) { + lua_pushboolean(L, lua_isyieldable(L)); + return 1; +} + + +static int luaB_corunning (lua_State *L) { + int ismain = lua_pushthread(L); + lua_pushboolean(L, ismain); + return 2; +} + + +static const luaL_Reg co_funcs[] = { + {"create", luaB_cocreate}, + {"resume", luaB_coresume}, + {"running", luaB_corunning}, + {"status", luaB_costatus}, + {"wrap", luaB_cowrap}, + {"yield", luaB_yield}, + {"isyieldable", luaB_yieldable}, + {NULL, NULL} +}; + + + +LUAMOD_API int luaopen_coroutine (lua_State *L) { + luaL_newlib(L, co_funcs); + return 1; +} + diff --git a/EQ2/source/LUA/lctype.c b/EQ2/source/LUA/lctype.c new file mode 100644 index 000000000..ae9367e69 --- /dev/null +++ b/EQ2/source/LUA/lctype.c @@ -0,0 +1,55 @@ +/* +** $Id: lctype.c,v 1.12 2014/11/02 19:19:04 roberto Exp $ +** 'ctype' functions for Lua +** See Copyright Notice in lua.h +*/ + +#define lctype_c +#define LUA_CORE + +#include "lprefix.h" + + +#include "lctype.h" + +#if !LUA_USE_CTYPE /* { */ + +#include + +LUAI_DDEF const lu_byte luai_ctype_[UCHAR_MAX + 2] = { + 0x00, /* EOZ */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0. */ + 0x00, 0x08, 0x08, 0x08, 0x08, 0x08, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 1. */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x0c, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, /* 2. */ + 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, + 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, /* 3. */ + 0x16, 0x16, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, + 0x04, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x05, /* 4. */ + 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, + 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, /* 5. */ + 0x05, 0x05, 0x05, 0x04, 0x04, 0x04, 0x04, 0x05, + 0x04, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x05, /* 6. */ + 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, + 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, /* 7. */ + 0x05, 0x05, 0x05, 0x04, 0x04, 0x04, 0x04, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 8. */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 9. */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* a. */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* b. */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* c. */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* d. */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* e. */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* f. */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +}; + +#endif /* } */ diff --git a/EQ2/source/LUA/lctype.h b/EQ2/source/LUA/lctype.h new file mode 100644 index 000000000..99c7d1223 --- /dev/null +++ b/EQ2/source/LUA/lctype.h @@ -0,0 +1,95 @@ +/* +** $Id: lctype.h,v 1.12 2011/07/15 12:50:29 roberto Exp $ +** 'ctype' functions for Lua +** See Copyright Notice in lua.h +*/ + +#ifndef lctype_h +#define lctype_h + +#include "lua.h" + + +/* +** WARNING: the functions defined here do not necessarily correspond +** to the similar functions in the standard C ctype.h. They are +** optimized for the specific needs of Lua +*/ + +#if !defined(LUA_USE_CTYPE) + +#if 'A' == 65 && '0' == 48 +/* ASCII case: can use its own tables; faster and fixed */ +#define LUA_USE_CTYPE 0 +#else +/* must use standard C ctype */ +#define LUA_USE_CTYPE 1 +#endif + +#endif + + +#if !LUA_USE_CTYPE /* { */ + +#include + +#include "llimits.h" + + +#define ALPHABIT 0 +#define DIGITBIT 1 +#define PRINTBIT 2 +#define SPACEBIT 3 +#define XDIGITBIT 4 + + +#define MASK(B) (1 << (B)) + + +/* +** add 1 to char to allow index -1 (EOZ) +*/ +#define testprop(c,p) (luai_ctype_[(c)+1] & (p)) + +/* +** 'lalpha' (Lua alphabetic) and 'lalnum' (Lua alphanumeric) both include '_' +*/ +#define lislalpha(c) testprop(c, MASK(ALPHABIT)) +#define lislalnum(c) testprop(c, (MASK(ALPHABIT) | MASK(DIGITBIT))) +#define lisdigit(c) testprop(c, MASK(DIGITBIT)) +#define lisspace(c) testprop(c, MASK(SPACEBIT)) +#define lisprint(c) testprop(c, MASK(PRINTBIT)) +#define lisxdigit(c) testprop(c, MASK(XDIGITBIT)) + +/* +** this 'ltolower' only works for alphabetic characters +*/ +#define ltolower(c) ((c) | ('A' ^ 'a')) + + +/* two more entries for 0 and -1 (EOZ) */ +LUAI_DDEC const lu_byte luai_ctype_[UCHAR_MAX + 2]; + + +#else /* }{ */ + +/* +** use standard C ctypes +*/ + +#include + + +#define lislalpha(c) (isalpha(c) || (c) == '_') +#define lislalnum(c) (isalnum(c) || (c) == '_') +#define lisdigit(c) (isdigit(c)) +#define lisspace(c) (isspace(c)) +#define lisprint(c) (isprint(c)) +#define lisxdigit(c) (isxdigit(c)) + +#define ltolower(c) (tolower(c)) + +#endif /* } */ + +#endif + diff --git a/EQ2/source/LUA/ldblib.c b/EQ2/source/LUA/ldblib.c new file mode 100644 index 000000000..786f6cd95 --- /dev/null +++ b/EQ2/source/LUA/ldblib.c @@ -0,0 +1,456 @@ +/* +** $Id: ldblib.c,v 1.151 2015/11/23 11:29:43 roberto Exp $ +** Interface from Lua to its debug API +** See Copyright Notice in lua.h +*/ + +#define ldblib_c +#define LUA_LIB + +#include "lprefix.h" + + +#include +#include +#include + +#include "lua.h" + +#include "lauxlib.h" +#include "lualib.h" + + +/* +** The hook table at registry[&HOOKKEY] maps threads to their current +** hook function. (We only need the unique address of 'HOOKKEY'.) +*/ +static const int HOOKKEY = 0; + + +/* +** If L1 != L, L1 can be in any state, and therefore there are no +** guarantees about its stack space; any push in L1 must be +** checked. +*/ +static void checkstack (lua_State *L, lua_State *L1, int n) { + if (L != L1 && !lua_checkstack(L1, n)) + luaL_error(L, "stack overflow"); +} + + +static int db_getregistry (lua_State *L) { + lua_pushvalue(L, LUA_REGISTRYINDEX); + return 1; +} + + +static int db_getmetatable (lua_State *L) { + luaL_checkany(L, 1); + if (!lua_getmetatable(L, 1)) { + lua_pushnil(L); /* no metatable */ + } + return 1; +} + + +static int db_setmetatable (lua_State *L) { + int t = lua_type(L, 2); + luaL_argcheck(L, t == LUA_TNIL || t == LUA_TTABLE, 2, + "nil or table expected"); + lua_settop(L, 2); + lua_setmetatable(L, 1); + return 1; /* return 1st argument */ +} + + +static int db_getuservalue (lua_State *L) { + if (lua_type(L, 1) != LUA_TUSERDATA) + lua_pushnil(L); + else + lua_getuservalue(L, 1); + return 1; +} + + +static int db_setuservalue (lua_State *L) { + luaL_checktype(L, 1, LUA_TUSERDATA); + luaL_checkany(L, 2); + lua_settop(L, 2); + lua_setuservalue(L, 1); + return 1; +} + + +/* +** Auxiliary function used by several library functions: check for +** an optional thread as function's first argument and set 'arg' with +** 1 if this argument is present (so that functions can skip it to +** access their other arguments) +*/ +static lua_State *getthread (lua_State *L, int *arg) { + if (lua_isthread(L, 1)) { + *arg = 1; + return lua_tothread(L, 1); + } + else { + *arg = 0; + return L; /* function will operate over current thread */ + } +} + + +/* +** Variations of 'lua_settable', used by 'db_getinfo' to put results +** from 'lua_getinfo' into result table. Key is always a string; +** value can be a string, an int, or a boolean. +*/ +static void settabss (lua_State *L, const char *k, const char *v) { + lua_pushstring(L, v); + lua_setfield(L, -2, k); +} + +static void settabsi (lua_State *L, const char *k, int v) { + lua_pushinteger(L, v); + lua_setfield(L, -2, k); +} + +static void settabsb (lua_State *L, const char *k, int v) { + lua_pushboolean(L, v); + lua_setfield(L, -2, k); +} + + +/* +** In function 'db_getinfo', the call to 'lua_getinfo' may push +** results on the stack; later it creates the result table to put +** these objects. Function 'treatstackoption' puts the result from +** 'lua_getinfo' on top of the result table so that it can call +** 'lua_setfield'. +*/ +static void treatstackoption (lua_State *L, lua_State *L1, const char *fname) { + if (L == L1) + lua_rotate(L, -2, 1); /* exchange object and table */ + else + lua_xmove(L1, L, 1); /* move object to the "main" stack */ + lua_setfield(L, -2, fname); /* put object into table */ +} + + +/* +** Calls 'lua_getinfo' and collects all results in a new table. +** L1 needs stack space for an optional input (function) plus +** two optional outputs (function and line table) from function +** 'lua_getinfo'. +*/ +static int db_getinfo (lua_State *L) { + lua_Debug ar; + int arg; + lua_State *L1 = getthread(L, &arg); + const char *options = luaL_optstring(L, arg+2, "flnStu"); + checkstack(L, L1, 3); + if (lua_isfunction(L, arg + 1)) { /* info about a function? */ + options = lua_pushfstring(L, ">%s", options); /* add '>' to 'options' */ + lua_pushvalue(L, arg + 1); /* move function to 'L1' stack */ + lua_xmove(L, L1, 1); + } + else { /* stack level */ + if (!lua_getstack(L1, (int)luaL_checkinteger(L, arg + 1), &ar)) { + lua_pushnil(L); /* level out of range */ + return 1; + } + } + if (!lua_getinfo(L1, options, &ar)) + return luaL_argerror(L, arg+2, "invalid option"); + lua_newtable(L); /* table to collect results */ + if (strchr(options, 'S')) { + settabss(L, "source", ar.source); + settabss(L, "short_src", ar.short_src); + settabsi(L, "linedefined", ar.linedefined); + settabsi(L, "lastlinedefined", ar.lastlinedefined); + settabss(L, "what", ar.what); + } + if (strchr(options, 'l')) + settabsi(L, "currentline", ar.currentline); + if (strchr(options, 'u')) { + settabsi(L, "nups", ar.nups); + settabsi(L, "nparams", ar.nparams); + settabsb(L, "isvararg", ar.isvararg); + } + if (strchr(options, 'n')) { + settabss(L, "name", ar.name); + settabss(L, "namewhat", ar.namewhat); + } + if (strchr(options, 't')) + settabsb(L, "istailcall", ar.istailcall); + if (strchr(options, 'L')) + treatstackoption(L, L1, "activelines"); + if (strchr(options, 'f')) + treatstackoption(L, L1, "func"); + return 1; /* return table */ +} + + +static int db_getlocal (lua_State *L) { + int arg; + lua_State *L1 = getthread(L, &arg); + lua_Debug ar; + const char *name; + int nvar = (int)luaL_checkinteger(L, arg + 2); /* local-variable index */ + if (lua_isfunction(L, arg + 1)) { /* function argument? */ + lua_pushvalue(L, arg + 1); /* push function */ + lua_pushstring(L, lua_getlocal(L, NULL, nvar)); /* push local name */ + return 1; /* return only name (there is no value) */ + } + else { /* stack-level argument */ + int level = (int)luaL_checkinteger(L, arg + 1); + if (!lua_getstack(L1, level, &ar)) /* out of range? */ + return luaL_argerror(L, arg+1, "level out of range"); + checkstack(L, L1, 1); + name = lua_getlocal(L1, &ar, nvar); + if (name) { + lua_xmove(L1, L, 1); /* move local value */ + lua_pushstring(L, name); /* push name */ + lua_rotate(L, -2, 1); /* re-order */ + return 2; + } + else { + lua_pushnil(L); /* no name (nor value) */ + return 1; + } + } +} + + +static int db_setlocal (lua_State *L) { + int arg; + const char *name; + lua_State *L1 = getthread(L, &arg); + lua_Debug ar; + int level = (int)luaL_checkinteger(L, arg + 1); + int nvar = (int)luaL_checkinteger(L, arg + 2); + if (!lua_getstack(L1, level, &ar)) /* out of range? */ + return luaL_argerror(L, arg+1, "level out of range"); + luaL_checkany(L, arg+3); + lua_settop(L, arg+3); + checkstack(L, L1, 1); + lua_xmove(L, L1, 1); + name = lua_setlocal(L1, &ar, nvar); + if (name == NULL) + lua_pop(L1, 1); /* pop value (if not popped by 'lua_setlocal') */ + lua_pushstring(L, name); + return 1; +} + + +/* +** get (if 'get' is true) or set an upvalue from a closure +*/ +static int auxupvalue (lua_State *L, int get) { + const char *name; + int n = (int)luaL_checkinteger(L, 2); /* upvalue index */ + luaL_checktype(L, 1, LUA_TFUNCTION); /* closure */ + name = get ? lua_getupvalue(L, 1, n) : lua_setupvalue(L, 1, n); + if (name == NULL) return 0; + lua_pushstring(L, name); + lua_insert(L, -(get+1)); /* no-op if get is false */ + return get + 1; +} + + +static int db_getupvalue (lua_State *L) { + return auxupvalue(L, 1); +} + + +static int db_setupvalue (lua_State *L) { + luaL_checkany(L, 3); + return auxupvalue(L, 0); +} + + +/* +** Check whether a given upvalue from a given closure exists and +** returns its index +*/ +static int checkupval (lua_State *L, int argf, int argnup) { + int nup = (int)luaL_checkinteger(L, argnup); /* upvalue index */ + luaL_checktype(L, argf, LUA_TFUNCTION); /* closure */ + luaL_argcheck(L, (lua_getupvalue(L, argf, nup) != NULL), argnup, + "invalid upvalue index"); + return nup; +} + + +static int db_upvalueid (lua_State *L) { + int n = checkupval(L, 1, 2); + lua_pushlightuserdata(L, lua_upvalueid(L, 1, n)); + return 1; +} + + +static int db_upvaluejoin (lua_State *L) { + int n1 = checkupval(L, 1, 2); + int n2 = checkupval(L, 3, 4); + luaL_argcheck(L, !lua_iscfunction(L, 1), 1, "Lua function expected"); + luaL_argcheck(L, !lua_iscfunction(L, 3), 3, "Lua function expected"); + lua_upvaluejoin(L, 1, n1, 3, n2); + return 0; +} + + +/* +** Call hook function registered at hook table for the current +** thread (if there is one) +*/ +static void hookf (lua_State *L, lua_Debug *ar) { + static const char *const hooknames[] = + {"call", "return", "line", "count", "tail call"}; + lua_rawgetp(L, LUA_REGISTRYINDEX, &HOOKKEY); + lua_pushthread(L); + if (lua_rawget(L, -2) == LUA_TFUNCTION) { /* is there a hook function? */ + lua_pushstring(L, hooknames[(int)ar->event]); /* push event name */ + if (ar->currentline >= 0) + lua_pushinteger(L, ar->currentline); /* push current line */ + else lua_pushnil(L); + lua_assert(lua_getinfo(L, "lS", ar)); + lua_call(L, 2, 0); /* call hook function */ + } +} + + +/* +** Convert a string mask (for 'sethook') into a bit mask +*/ +static int makemask (const char *smask, int count) { + int mask = 0; + if (strchr(smask, 'c')) mask |= LUA_MASKCALL; + if (strchr(smask, 'r')) mask |= LUA_MASKRET; + if (strchr(smask, 'l')) mask |= LUA_MASKLINE; + if (count > 0) mask |= LUA_MASKCOUNT; + return mask; +} + + +/* +** Convert a bit mask (for 'gethook') into a string mask +*/ +static char *unmakemask (int mask, char *smask) { + int i = 0; + if (mask & LUA_MASKCALL) smask[i++] = 'c'; + if (mask & LUA_MASKRET) smask[i++] = 'r'; + if (mask & LUA_MASKLINE) smask[i++] = 'l'; + smask[i] = '\0'; + return smask; +} + + +static int db_sethook (lua_State *L) { + int arg, mask, count; + lua_Hook func; + lua_State *L1 = getthread(L, &arg); + if (lua_isnoneornil(L, arg+1)) { /* no hook? */ + lua_settop(L, arg+1); + func = NULL; mask = 0; count = 0; /* turn off hooks */ + } + else { + const char *smask = luaL_checkstring(L, arg+2); + luaL_checktype(L, arg+1, LUA_TFUNCTION); + count = (int)luaL_optinteger(L, arg + 3, 0); + func = hookf; mask = makemask(smask, count); + } + if (lua_rawgetp(L, LUA_REGISTRYINDEX, &HOOKKEY) == LUA_TNIL) { + lua_createtable(L, 0, 2); /* create a hook table */ + lua_pushvalue(L, -1); + lua_rawsetp(L, LUA_REGISTRYINDEX, &HOOKKEY); /* set it in position */ + lua_pushstring(L, "k"); + lua_setfield(L, -2, "__mode"); /** hooktable.__mode = "k" */ + lua_pushvalue(L, -1); + lua_setmetatable(L, -2); /* setmetatable(hooktable) = hooktable */ + } + checkstack(L, L1, 1); + lua_pushthread(L1); lua_xmove(L1, L, 1); /* key (thread) */ + lua_pushvalue(L, arg + 1); /* value (hook function) */ + lua_rawset(L, -3); /* hooktable[L1] = new Lua hook */ + lua_sethook(L1, func, mask, count); + return 0; +} + + +static int db_gethook (lua_State *L) { + int arg; + lua_State *L1 = getthread(L, &arg); + char buff[5]; + int mask = lua_gethookmask(L1); + lua_Hook hook = lua_gethook(L1); + if (hook == NULL) /* no hook? */ + lua_pushnil(L); + else if (hook != hookf) /* external hook? */ + lua_pushliteral(L, "external hook"); + else { /* hook table must exist */ + lua_rawgetp(L, LUA_REGISTRYINDEX, &HOOKKEY); + checkstack(L, L1, 1); + lua_pushthread(L1); lua_xmove(L1, L, 1); + lua_rawget(L, -2); /* 1st result = hooktable[L1] */ + lua_remove(L, -2); /* remove hook table */ + } + lua_pushstring(L, unmakemask(mask, buff)); /* 2nd result = mask */ + lua_pushinteger(L, lua_gethookcount(L1)); /* 3rd result = count */ + return 3; +} + + +static int db_debug (lua_State *L) { + for (;;) { + char buffer[250]; + lua_writestringerror("%s", "lua_debug> "); + if (fgets(buffer, sizeof(buffer), stdin) == 0 || + strcmp(buffer, "cont\n") == 0) + return 0; + if (luaL_loadbuffer(L, buffer, strlen(buffer), "=(debug command)") || + lua_pcall(L, 0, 0, 0)) + lua_writestringerror("%s\n", lua_tostring(L, -1)); + lua_settop(L, 0); /* remove eventual returns */ + } +} + + +static int db_traceback (lua_State *L) { + int arg; + lua_State *L1 = getthread(L, &arg); + const char *msg = lua_tostring(L, arg + 1); + if (msg == NULL && !lua_isnoneornil(L, arg + 1)) /* non-string 'msg'? */ + lua_pushvalue(L, arg + 1); /* return it untouched */ + else { + int level = (int)luaL_optinteger(L, arg + 2, (L == L1) ? 1 : 0); + luaL_traceback(L, L1, msg, level); + } + return 1; +} + + +static const luaL_Reg dblib[] = { + {"debug", db_debug}, + {"getuservalue", db_getuservalue}, + {"gethook", db_gethook}, + {"getinfo", db_getinfo}, + {"getlocal", db_getlocal}, + {"getregistry", db_getregistry}, + {"getmetatable", db_getmetatable}, + {"getupvalue", db_getupvalue}, + {"upvaluejoin", db_upvaluejoin}, + {"upvalueid", db_upvalueid}, + {"setuservalue", db_setuservalue}, + {"sethook", db_sethook}, + {"setlocal", db_setlocal}, + {"setmetatable", db_setmetatable}, + {"setupvalue", db_setupvalue}, + {"traceback", db_traceback}, + {NULL, NULL} +}; + + +LUAMOD_API int luaopen_debug (lua_State *L) { + luaL_newlib(L, dblib); + return 1; +} + diff --git a/EQ2/source/LUA/ldebug.c b/EQ2/source/LUA/ldebug.c new file mode 100644 index 000000000..239affb76 --- /dev/null +++ b/EQ2/source/LUA/ldebug.c @@ -0,0 +1,698 @@ +/* +** $Id: ldebug.c,v 2.121 2016/10/19 12:32:10 roberto Exp $ +** Debug Interface +** See Copyright Notice in lua.h +*/ + +#define ldebug_c +#define LUA_CORE + +#include "lprefix.h" + + +#include +#include +#include + +#include "lua.h" + +#include "lapi.h" +#include "lcode.h" +#include "ldebug.h" +#include "ldo.h" +#include "lfunc.h" +#include "lobject.h" +#include "lopcodes.h" +#include "lstate.h" +#include "lstring.h" +#include "ltable.h" +#include "ltm.h" +#include "lvm.h" + + + +#define noLuaClosure(f) ((f) == NULL || (f)->c.tt == LUA_TCCL) + + +/* Active Lua function (given call info) */ +#define ci_func(ci) (clLvalue((ci)->func)) + + +static const char *funcnamefromcode (lua_State *L, CallInfo *ci, + const char **name); + + +static int currentpc (CallInfo *ci) { + lua_assert(isLua(ci)); + return pcRel(ci->u.l.savedpc, ci_func(ci)->p); +} + + +static int currentline (CallInfo *ci) { + return getfuncline(ci_func(ci)->p, currentpc(ci)); +} + + +/* +** If function yielded, its 'func' can be in the 'extra' field. The +** next function restores 'func' to its correct value for debugging +** purposes. (It exchanges 'func' and 'extra'; so, when called again, +** after debugging, it also "re-restores" ** 'func' to its altered value. +*/ +static void swapextra (lua_State *L) { + if (L->status == LUA_YIELD) { + CallInfo *ci = L->ci; /* get function that yielded */ + StkId temp = ci->func; /* exchange its 'func' and 'extra' values */ + ci->func = restorestack(L, ci->extra); + ci->extra = savestack(L, temp); + } +} + + +/* +** This function can be called asynchronously (e.g. during a signal). +** Fields 'oldpc', 'basehookcount', and 'hookcount' (set by +** 'resethookcount') are for debug only, and it is no problem if they +** get arbitrary values (causes at most one wrong hook call). 'hookmask' +** is an atomic value. We assume that pointers are atomic too (e.g., gcc +** ensures that for all platforms where it runs). Moreover, 'hook' is +** always checked before being called (see 'luaD_hook'). +*/ +LUA_API void lua_sethook (lua_State *L, lua_Hook func, int mask, int count) { + if (func == NULL || mask == 0) { /* turn off hooks? */ + mask = 0; + func = NULL; + } + if (isLua(L->ci)) + L->oldpc = L->ci->u.l.savedpc; + L->hook = func; + L->basehookcount = count; + resethookcount(L); + L->hookmask = cast_byte(mask); +} + + +LUA_API lua_Hook lua_gethook (lua_State *L) { + return L->hook; +} + + +LUA_API int lua_gethookmask (lua_State *L) { + return L->hookmask; +} + + +LUA_API int lua_gethookcount (lua_State *L) { + return L->basehookcount; +} + + +LUA_API int lua_getstack (lua_State *L, int level, lua_Debug *ar) { + int status; + CallInfo *ci; + if (level < 0) return 0; /* invalid (negative) level */ + lua_lock(L); + for (ci = L->ci; level > 0 && ci != &L->base_ci; ci = ci->previous) + level--; + if (level == 0 && ci != &L->base_ci) { /* level found? */ + status = 1; + ar->i_ci = ci; + } + else status = 0; /* no such level */ + lua_unlock(L); + return status; +} + + +static const char *upvalname (Proto *p, int uv) { + TString *s = check_exp(uv < p->sizeupvalues, p->upvalues[uv].name); + if (s == NULL) return "?"; + else return getstr(s); +} + + +static const char *findvararg (CallInfo *ci, int n, StkId *pos) { + int nparams = clLvalue(ci->func)->p->numparams; + if (n >= cast_int(ci->u.l.base - ci->func) - nparams) + return NULL; /* no such vararg */ + else { + *pos = ci->func + nparams + n; + return "(*vararg)"; /* generic name for any vararg */ + } +} + + +static const char *findlocal (lua_State *L, CallInfo *ci, int n, + StkId *pos) { + const char *name = NULL; + StkId base; + if (isLua(ci)) { + if (n < 0) /* access to vararg values? */ + return findvararg(ci, -n, pos); + else { + base = ci->u.l.base; + name = luaF_getlocalname(ci_func(ci)->p, n, currentpc(ci)); + } + } + else + base = ci->func + 1; + if (name == NULL) { /* no 'standard' name? */ + StkId limit = (ci == L->ci) ? L->top : ci->next->func; + if (limit - base >= n && n > 0) /* is 'n' inside 'ci' stack? */ + name = "(*temporary)"; /* generic name for any valid slot */ + else + return NULL; /* no name */ + } + *pos = base + (n - 1); + return name; +} + + +LUA_API const char *lua_getlocal (lua_State *L, const lua_Debug *ar, int n) { + const char *name; + lua_lock(L); + swapextra(L); + if (ar == NULL) { /* information about non-active function? */ + if (!isLfunction(L->top - 1)) /* not a Lua function? */ + name = NULL; + else /* consider live variables at function start (parameters) */ + name = luaF_getlocalname(clLvalue(L->top - 1)->p, n, 0); + } + else { /* active function; get information through 'ar' */ + StkId pos = NULL; /* to avoid warnings */ + name = findlocal(L, ar->i_ci, n, &pos); + if (name) { + setobj2s(L, L->top, pos); + api_incr_top(L); + } + } + swapextra(L); + lua_unlock(L); + return name; +} + + +LUA_API const char *lua_setlocal (lua_State *L, const lua_Debug *ar, int n) { + StkId pos = NULL; /* to avoid warnings */ + const char *name; + lua_lock(L); + swapextra(L); + name = findlocal(L, ar->i_ci, n, &pos); + if (name) { + setobjs2s(L, pos, L->top - 1); + L->top--; /* pop value */ + } + swapextra(L); + lua_unlock(L); + return name; +} + + +static void funcinfo (lua_Debug *ar, Closure *cl) { + if (noLuaClosure(cl)) { + ar->source = "=[C]"; + ar->linedefined = -1; + ar->lastlinedefined = -1; + ar->what = "C"; + } + else { + Proto *p = cl->l.p; + ar->source = p->source ? getstr(p->source) : "=?"; + ar->linedefined = p->linedefined; + ar->lastlinedefined = p->lastlinedefined; + ar->what = (ar->linedefined == 0) ? "main" : "Lua"; + } + luaO_chunkid(ar->short_src, ar->source, LUA_IDSIZE); +} + + +static void collectvalidlines (lua_State *L, Closure *f) { + if (noLuaClosure(f)) { + setnilvalue(L->top); + api_incr_top(L); + } + else { + int i; + TValue v; + int *lineinfo = f->l.p->lineinfo; + Table *t = luaH_new(L); /* new table to store active lines */ + sethvalue(L, L->top, t); /* push it on stack */ + api_incr_top(L); + setbvalue(&v, 1); /* boolean 'true' to be the value of all indices */ + for (i = 0; i < f->l.p->sizelineinfo; i++) /* for all lines with code */ + luaH_setint(L, t, lineinfo[i], &v); /* table[line] = true */ + } +} + + +static const char *getfuncname (lua_State *L, CallInfo *ci, const char **name) { + if (ci == NULL) /* no 'ci'? */ + return NULL; /* no info */ + else if (ci->callstatus & CIST_FIN) { /* is this a finalizer? */ + *name = "__gc"; + return "metamethod"; /* report it as such */ + } + /* calling function is a known Lua function? */ + else if (!(ci->callstatus & CIST_TAIL) && isLua(ci->previous)) + return funcnamefromcode(L, ci->previous, name); + else return NULL; /* no way to find a name */ +} + + +static int auxgetinfo (lua_State *L, const char *what, lua_Debug *ar, + Closure *f, CallInfo *ci) { + int status = 1; + for (; *what; what++) { + switch (*what) { + case 'S': { + funcinfo(ar, f); + break; + } + case 'l': { + ar->currentline = (ci && isLua(ci)) ? currentline(ci) : -1; + break; + } + case 'u': { + ar->nups = (f == NULL) ? 0 : f->c.nupvalues; + if (noLuaClosure(f)) { + ar->isvararg = 1; + ar->nparams = 0; + } + else { + ar->isvararg = f->l.p->is_vararg; + ar->nparams = f->l.p->numparams; + } + break; + } + case 't': { + ar->istailcall = (ci) ? ci->callstatus & CIST_TAIL : 0; + break; + } + case 'n': { + ar->namewhat = getfuncname(L, ci, &ar->name); + if (ar->namewhat == NULL) { + ar->namewhat = ""; /* not found */ + ar->name = NULL; + } + break; + } + case 'L': + case 'f': /* handled by lua_getinfo */ + break; + default: status = 0; /* invalid option */ + } + } + return status; +} + + +LUA_API int lua_getinfo (lua_State *L, const char *what, lua_Debug *ar) { + int status; + Closure *cl; + CallInfo *ci; + StkId func; + lua_lock(L); + swapextra(L); + if (*what == '>') { + ci = NULL; + func = L->top - 1; + api_check(L, ttisfunction(func), "function expected"); + what++; /* skip the '>' */ + L->top--; /* pop function */ + } + else { + ci = ar->i_ci; + func = ci->func; + lua_assert(ttisfunction(ci->func)); + } + cl = ttisclosure(func) ? clvalue(func) : NULL; + status = auxgetinfo(L, what, ar, cl, ci); + if (strchr(what, 'f')) { + setobjs2s(L, L->top, func); + api_incr_top(L); + } + swapextra(L); /* correct before option 'L', which can raise a mem. error */ + if (strchr(what, 'L')) + collectvalidlines(L, cl); + lua_unlock(L); + return status; +} + + +/* +** {====================================================== +** Symbolic Execution +** ======================================================= +*/ + +static const char *getobjname (Proto *p, int lastpc, int reg, + const char **name); + + +/* +** find a "name" for the RK value 'c' +*/ +static void kname (Proto *p, int pc, int c, const char **name) { + if (ISK(c)) { /* is 'c' a constant? */ + TValue *kvalue = &p->k[INDEXK(c)]; + if (ttisstring(kvalue)) { /* literal constant? */ + *name = svalue(kvalue); /* it is its own name */ + return; + } + /* else no reasonable name found */ + } + else { /* 'c' is a register */ + const char *what = getobjname(p, pc, c, name); /* search for 'c' */ + if (what && *what == 'c') { /* found a constant name? */ + return; /* 'name' already filled */ + } + /* else no reasonable name found */ + } + *name = "?"; /* no reasonable name found */ +} + + +static int filterpc (int pc, int jmptarget) { + if (pc < jmptarget) /* is code conditional (inside a jump)? */ + return -1; /* cannot know who sets that register */ + else return pc; /* current position sets that register */ +} + + +/* +** try to find last instruction before 'lastpc' that modified register 'reg' +*/ +static int findsetreg (Proto *p, int lastpc, int reg) { + int pc; + int setreg = -1; /* keep last instruction that changed 'reg' */ + int jmptarget = 0; /* any code before this address is conditional */ + for (pc = 0; pc < lastpc; pc++) { + Instruction i = p->code[pc]; + OpCode op = GET_OPCODE(i); + int a = GETARG_A(i); + switch (op) { + case OP_LOADNIL: { + int b = GETARG_B(i); + if (a <= reg && reg <= a + b) /* set registers from 'a' to 'a+b' */ + setreg = filterpc(pc, jmptarget); + break; + } + case OP_TFORCALL: { + if (reg >= a + 2) /* affect all regs above its base */ + setreg = filterpc(pc, jmptarget); + break; + } + case OP_CALL: + case OP_TAILCALL: { + if (reg >= a) /* affect all registers above base */ + setreg = filterpc(pc, jmptarget); + break; + } + case OP_JMP: { + int b = GETARG_sBx(i); + int dest = pc + 1 + b; + /* jump is forward and do not skip 'lastpc'? */ + if (pc < dest && dest <= lastpc) { + if (dest > jmptarget) + jmptarget = dest; /* update 'jmptarget' */ + } + break; + } + default: + if (testAMode(op) && reg == a) /* any instruction that set A */ + setreg = filterpc(pc, jmptarget); + break; + } + } + return setreg; +} + + +static const char *getobjname (Proto *p, int lastpc, int reg, + const char **name) { + int pc; + *name = luaF_getlocalname(p, reg + 1, lastpc); + if (*name) /* is a local? */ + return "local"; + /* else try symbolic execution */ + pc = findsetreg(p, lastpc, reg); + if (pc != -1) { /* could find instruction? */ + Instruction i = p->code[pc]; + OpCode op = GET_OPCODE(i); + switch (op) { + case OP_MOVE: { + int b = GETARG_B(i); /* move from 'b' to 'a' */ + if (b < GETARG_A(i)) + return getobjname(p, pc, b, name); /* get name for 'b' */ + break; + } + case OP_GETTABUP: + case OP_GETTABLE: { + int k = GETARG_C(i); /* key index */ + int t = GETARG_B(i); /* table index */ + const char *vn = (op == OP_GETTABLE) /* name of indexed variable */ + ? luaF_getlocalname(p, t + 1, pc) + : upvalname(p, t); + kname(p, pc, k, name); + return (vn && strcmp(vn, LUA_ENV) == 0) ? "global" : "field"; + } + case OP_GETUPVAL: { + *name = upvalname(p, GETARG_B(i)); + return "upvalue"; + } + case OP_LOADK: + case OP_LOADKX: { + int b = (op == OP_LOADK) ? GETARG_Bx(i) + : GETARG_Ax(p->code[pc + 1]); + if (ttisstring(&p->k[b])) { + *name = svalue(&p->k[b]); + return "constant"; + } + break; + } + case OP_SELF: { + int k = GETARG_C(i); /* key index */ + kname(p, pc, k, name); + return "method"; + } + default: break; /* go through to return NULL */ + } + } + return NULL; /* could not find reasonable name */ +} + + +/* +** Try to find a name for a function based on the code that called it. +** (Only works when function was called by a Lua function.) +** Returns what the name is (e.g., "for iterator", "method", +** "metamethod") and sets '*name' to point to the name. +*/ +static const char *funcnamefromcode (lua_State *L, CallInfo *ci, + const char **name) { + TMS tm = (TMS)0; /* (initial value avoids warnings) */ + Proto *p = ci_func(ci)->p; /* calling function */ + int pc = currentpc(ci); /* calling instruction index */ + Instruction i = p->code[pc]; /* calling instruction */ + if (ci->callstatus & CIST_HOOKED) { /* was it called inside a hook? */ + *name = "?"; + return "hook"; + } + switch (GET_OPCODE(i)) { + case OP_CALL: + case OP_TAILCALL: + return getobjname(p, pc, GETARG_A(i), name); /* get function name */ + case OP_TFORCALL: { /* for iterator */ + *name = "for iterator"; + return "for iterator"; + } + /* other instructions can do calls through metamethods */ + case OP_SELF: case OP_GETTABUP: case OP_GETTABLE: + tm = TM_INDEX; + break; + case OP_SETTABUP: case OP_SETTABLE: + tm = TM_NEWINDEX; + break; + case OP_ADD: case OP_SUB: case OP_MUL: case OP_MOD: + case OP_POW: case OP_DIV: case OP_IDIV: case OP_BAND: + case OP_BOR: case OP_BXOR: case OP_SHL: case OP_SHR: { + int offset = cast_int(GET_OPCODE(i)) - cast_int(OP_ADD); /* ORDER OP */ + tm = cast(TMS, offset + cast_int(TM_ADD)); /* ORDER TM */ + break; + } + case OP_UNM: tm = TM_UNM; break; + case OP_BNOT: tm = TM_BNOT; break; + case OP_LEN: tm = TM_LEN; break; + case OP_CONCAT: tm = TM_CONCAT; break; + case OP_EQ: tm = TM_EQ; break; + case OP_LT: tm = TM_LT; break; + case OP_LE: tm = TM_LE; break; + default: + return NULL; /* cannot find a reasonable name */ + } + *name = getstr(G(L)->tmname[tm]); + return "metamethod"; +} + +/* }====================================================== */ + + + +/* +** The subtraction of two potentially unrelated pointers is +** not ISO C, but it should not crash a program; the subsequent +** checks are ISO C and ensure a correct result. +*/ +static int isinstack (CallInfo *ci, const TValue *o) { + ptrdiff_t i = o - ci->u.l.base; + return (0 <= i && i < (ci->top - ci->u.l.base) && ci->u.l.base + i == o); +} + + +/* +** Checks whether value 'o' came from an upvalue. (That can only happen +** with instructions OP_GETTABUP/OP_SETTABUP, which operate directly on +** upvalues.) +*/ +static const char *getupvalname (CallInfo *ci, const TValue *o, + const char **name) { + LClosure *c = ci_func(ci); + int i; + for (i = 0; i < c->nupvalues; i++) { + if (c->upvals[i]->v == o) { + *name = upvalname(c->p, i); + return "upvalue"; + } + } + return NULL; +} + + +static const char *varinfo (lua_State *L, const TValue *o) { + const char *name = NULL; /* to avoid warnings */ + CallInfo *ci = L->ci; + const char *kind = NULL; + if (isLua(ci)) { + kind = getupvalname(ci, o, &name); /* check whether 'o' is an upvalue */ + if (!kind && isinstack(ci, o)) /* no? try a register */ + kind = getobjname(ci_func(ci)->p, currentpc(ci), + cast_int(o - ci->u.l.base), &name); + } + return (kind) ? luaO_pushfstring(L, " (%s '%s')", kind, name) : ""; +} + + +l_noret luaG_typeerror (lua_State *L, const TValue *o, const char *op) { + const char *t = luaT_objtypename(L, o); + luaG_runerror(L, "attempt to %s a %s value%s", op, t, varinfo(L, o)); +} + + +l_noret luaG_concaterror (lua_State *L, const TValue *p1, const TValue *p2) { + if (ttisstring(p1) || cvt2str(p1)) p1 = p2; + luaG_typeerror(L, p1, "concatenate"); +} + + +l_noret luaG_opinterror (lua_State *L, const TValue *p1, + const TValue *p2, const char *msg) { + lua_Number temp; + if (!tonumber(p1, &temp)) /* first operand is wrong? */ + p2 = p1; /* now second is wrong */ + luaG_typeerror(L, p2, msg); +} + + +/* +** Error when both values are convertible to numbers, but not to integers +*/ +l_noret luaG_tointerror (lua_State *L, const TValue *p1, const TValue *p2) { + lua_Integer temp; + if (!tointeger(p1, &temp)) + p2 = p1; + luaG_runerror(L, "number%s has no integer representation", varinfo(L, p2)); +} + + +l_noret luaG_ordererror (lua_State *L, const TValue *p1, const TValue *p2) { + const char *t1 = luaT_objtypename(L, p1); + const char *t2 = luaT_objtypename(L, p2); + if (strcmp(t1, t2) == 0) + luaG_runerror(L, "attempt to compare two %s values", t1); + else + luaG_runerror(L, "attempt to compare %s with %s", t1, t2); +} + + +/* add src:line information to 'msg' */ +const char *luaG_addinfo (lua_State *L, const char *msg, TString *src, + int line) { + char buff[LUA_IDSIZE]; + if (src) + luaO_chunkid(buff, getstr(src), LUA_IDSIZE); + else { /* no source available; use "?" instead */ + buff[0] = '?'; buff[1] = '\0'; + } + return luaO_pushfstring(L, "%s:%d: %s", buff, line, msg); +} + + +l_noret luaG_errormsg (lua_State *L) { + if (L->errfunc != 0) { /* is there an error handling function? */ + StkId errfunc = restorestack(L, L->errfunc); + setobjs2s(L, L->top, L->top - 1); /* move argument */ + setobjs2s(L, L->top - 1, errfunc); /* push function */ + L->top++; /* assume EXTRA_STACK */ + luaD_callnoyield(L, L->top - 2, 1); /* call it */ + } + luaD_throw(L, LUA_ERRRUN); +} + + +l_noret luaG_runerror (lua_State *L, const char *fmt, ...) { + CallInfo *ci = L->ci; + const char *msg; + va_list argp; + va_start(argp, fmt); + msg = luaO_pushvfstring(L, fmt, argp); /* format message */ + va_end(argp); + if (isLua(ci)) /* if Lua function, add source:line information */ + luaG_addinfo(L, msg, ci_func(ci)->p->source, currentline(ci)); + luaG_errormsg(L); +} + + +void luaG_traceexec (lua_State *L) { + CallInfo *ci = L->ci; + lu_byte mask = L->hookmask; + int counthook = (--L->hookcount == 0 && (mask & LUA_MASKCOUNT)); + if (counthook) + resethookcount(L); /* reset count */ + else if (!(mask & LUA_MASKLINE)) + return; /* no line hook and count != 0; nothing to be done */ + if (ci->callstatus & CIST_HOOKYIELD) { /* called hook last time? */ + ci->callstatus &= ~CIST_HOOKYIELD; /* erase mark */ + return; /* do not call hook again (VM yielded, so it did not move) */ + } + if (counthook) + luaD_hook(L, LUA_HOOKCOUNT, -1); /* call count hook */ + if (mask & LUA_MASKLINE) { + Proto *p = ci_func(ci)->p; + int npc = pcRel(ci->u.l.savedpc, p); + int newline = getfuncline(p, npc); + if (npc == 0 || /* call linehook when enter a new function, */ + ci->u.l.savedpc <= L->oldpc || /* when jump back (loop), or when */ + newline != getfuncline(p, pcRel(L->oldpc, p))) /* enter a new line */ + luaD_hook(L, LUA_HOOKLINE, newline); /* call line hook */ + } + L->oldpc = ci->u.l.savedpc; + if (L->status == LUA_YIELD) { /* did hook yield? */ + if (counthook) + L->hookcount = 1; /* undo decrement to zero */ + ci->u.l.savedpc--; /* undo increment (resume will increment it again) */ + ci->callstatus |= CIST_HOOKYIELD; /* mark that it yielded */ + ci->func = L->top - 1; /* protect stack below results */ + luaD_throw(L, LUA_YIELD); + } +} + diff --git a/EQ2/source/LUA/ldebug.h b/EQ2/source/LUA/ldebug.h new file mode 100644 index 000000000..0e31546b1 --- /dev/null +++ b/EQ2/source/LUA/ldebug.h @@ -0,0 +1,39 @@ +/* +** $Id: ldebug.h,v 2.14 2015/05/22 17:45:56 roberto Exp $ +** Auxiliary functions from Debug Interface module +** See Copyright Notice in lua.h +*/ + +#ifndef ldebug_h +#define ldebug_h + + +#include "lstate.h" + + +#define pcRel(pc, p) (cast(int, (pc) - (p)->code) - 1) + +#define getfuncline(f,pc) (((f)->lineinfo) ? (f)->lineinfo[pc] : -1) + +#define resethookcount(L) (L->hookcount = L->basehookcount) + + +LUAI_FUNC l_noret luaG_typeerror (lua_State *L, const TValue *o, + const char *opname); +LUAI_FUNC l_noret luaG_concaterror (lua_State *L, const TValue *p1, + const TValue *p2); +LUAI_FUNC l_noret luaG_opinterror (lua_State *L, const TValue *p1, + const TValue *p2, + const char *msg); +LUAI_FUNC l_noret luaG_tointerror (lua_State *L, const TValue *p1, + const TValue *p2); +LUAI_FUNC l_noret luaG_ordererror (lua_State *L, const TValue *p1, + const TValue *p2); +LUAI_FUNC l_noret luaG_runerror (lua_State *L, const char *fmt, ...); +LUAI_FUNC const char *luaG_addinfo (lua_State *L, const char *msg, + TString *src, int line); +LUAI_FUNC l_noret luaG_errormsg (lua_State *L); +LUAI_FUNC void luaG_traceexec (lua_State *L); + + +#endif diff --git a/EQ2/source/LUA/ldo.c b/EQ2/source/LUA/ldo.c new file mode 100644 index 000000000..90b695fb0 --- /dev/null +++ b/EQ2/source/LUA/ldo.c @@ -0,0 +1,802 @@ +/* +** $Id: ldo.c,v 2.157 2016/12/13 15:52:21 roberto Exp $ +** Stack and Call structure of Lua +** See Copyright Notice in lua.h +*/ + +#define ldo_c +#define LUA_CORE + +#include "lprefix.h" + + +#include +#include +#include + +#include "lua.h" + +#include "lapi.h" +#include "ldebug.h" +#include "ldo.h" +#include "lfunc.h" +#include "lgc.h" +#include "lmem.h" +#include "lobject.h" +#include "lopcodes.h" +#include "lparser.h" +#include "lstate.h" +#include "lstring.h" +#include "ltable.h" +#include "ltm.h" +#include "lundump.h" +#include "lvm.h" +#include "lzio.h" + + + +#define errorstatus(s) ((s) > LUA_YIELD) + + +/* +** {====================================================== +** Error-recovery functions +** ======================================================= +*/ + +/* +** LUAI_THROW/LUAI_TRY define how Lua does exception handling. By +** default, Lua handles errors with exceptions when compiling as +** C++ code, with _longjmp/_setjmp when asked to use them, and with +** longjmp/setjmp otherwise. +*/ +#if !defined(LUAI_THROW) /* { */ + +#if defined(__cplusplus) && !defined(LUA_USE_LONGJMP) /* { */ + +/* C++ exceptions */ +#define LUAI_THROW(L,c) throw(c) +#define LUAI_TRY(L,c,a) \ + try { a } catch(...) { if ((c)->status == 0) (c)->status = -1; } +#define luai_jmpbuf int /* dummy variable */ + +#elif defined(LUA_USE_POSIX) /* }{ */ + +/* in POSIX, try _longjmp/_setjmp (more efficient) */ +#define LUAI_THROW(L,c) _longjmp((c)->b, 1) +#define LUAI_TRY(L,c,a) if (_setjmp((c)->b) == 0) { a } +#define luai_jmpbuf jmp_buf + +#else /* }{ */ + +/* ISO C handling with long jumps */ +#define LUAI_THROW(L,c) longjmp((c)->b, 1) +#define LUAI_TRY(L,c,a) if (setjmp((c)->b) == 0) { a } +#define luai_jmpbuf jmp_buf + +#endif /* } */ + +#endif /* } */ + + + +/* chain list of long jump buffers */ +struct lua_longjmp { + struct lua_longjmp *previous; + luai_jmpbuf b; + volatile int status; /* error code */ +}; + + +static void seterrorobj (lua_State *L, int errcode, StkId oldtop) { + switch (errcode) { + case LUA_ERRMEM: { /* memory error? */ + setsvalue2s(L, oldtop, G(L)->memerrmsg); /* reuse preregistered msg. */ + break; + } + case LUA_ERRERR: { + setsvalue2s(L, oldtop, luaS_newliteral(L, "error in error handling")); + break; + } + default: { + setobjs2s(L, oldtop, L->top - 1); /* error message on current top */ + break; + } + } + L->top = oldtop + 1; +} + + +l_noret luaD_throw (lua_State *L, int errcode) { + if (L->errorJmp) { /* thread has an error handler? */ + L->errorJmp->status = errcode; /* set status */ + LUAI_THROW(L, L->errorJmp); /* jump to it */ + } + else { /* thread has no error handler */ + global_State *g = G(L); + L->status = cast_byte(errcode); /* mark it as dead */ + if (g->mainthread->errorJmp) { /* main thread has a handler? */ + setobjs2s(L, g->mainthread->top++, L->top - 1); /* copy error obj. */ + luaD_throw(g->mainthread, errcode); /* re-throw in main thread */ + } + else { /* no handler at all; abort */ + if (g->panic) { /* panic function? */ + seterrorobj(L, errcode, L->top); /* assume EXTRA_STACK */ + if (L->ci->top < L->top) + L->ci->top = L->top; /* pushing msg. can break this invariant */ + lua_unlock(L); + g->panic(L); /* call panic function (last chance to jump out) */ + } + abort(); + } + } +} + + +int luaD_rawrunprotected (lua_State *L, Pfunc f, void *ud) { + unsigned short oldnCcalls = L->nCcalls; + struct lua_longjmp lj; + lj.status = LUA_OK; + lj.previous = L->errorJmp; /* chain new error handler */ + L->errorJmp = &lj; + LUAI_TRY(L, &lj, + (*f)(L, ud); + ); + L->errorJmp = lj.previous; /* restore old error handler */ + L->nCcalls = oldnCcalls; + return lj.status; +} + +/* }====================================================== */ + + +/* +** {================================================================== +** Stack reallocation +** =================================================================== +*/ +static void correctstack (lua_State *L, TValue *oldstack) { + CallInfo *ci; + UpVal *up; + L->top = (L->top - oldstack) + L->stack; + for (up = L->openupval; up != NULL; up = up->u.open.next) + up->v = (up->v - oldstack) + L->stack; + for (ci = L->ci; ci != NULL; ci = ci->previous) { + ci->top = (ci->top - oldstack) + L->stack; + ci->func = (ci->func - oldstack) + L->stack; + if (isLua(ci)) + ci->u.l.base = (ci->u.l.base - oldstack) + L->stack; + } +} + + +/* some space for error handling */ +#define ERRORSTACKSIZE (LUAI_MAXSTACK + 200) + + +void luaD_reallocstack (lua_State *L, int newsize) { + TValue *oldstack = L->stack; + int lim = L->stacksize; + lua_assert(newsize <= LUAI_MAXSTACK || newsize == ERRORSTACKSIZE); + lua_assert(L->stack_last - L->stack == L->stacksize - EXTRA_STACK); + luaM_reallocvector(L, L->stack, L->stacksize, newsize, TValue); + for (; lim < newsize; lim++) + setnilvalue(L->stack + lim); /* erase new segment */ + L->stacksize = newsize; + L->stack_last = L->stack + newsize - EXTRA_STACK; + correctstack(L, oldstack); +} + + +void luaD_growstack (lua_State *L, int n) { + int size = L->stacksize; + if (size > LUAI_MAXSTACK) /* error after extra size? */ + luaD_throw(L, LUA_ERRERR); + else { + int needed = cast_int(L->top - L->stack) + n + EXTRA_STACK; + int newsize = 2 * size; + if (newsize > LUAI_MAXSTACK) newsize = LUAI_MAXSTACK; + if (newsize < needed) newsize = needed; + if (newsize > LUAI_MAXSTACK) { /* stack overflow? */ + luaD_reallocstack(L, ERRORSTACKSIZE); + luaG_runerror(L, "stack overflow"); + } + else + luaD_reallocstack(L, newsize); + } +} + + +static int stackinuse (lua_State *L) { + CallInfo *ci; + StkId lim = L->top; + for (ci = L->ci; ci != NULL; ci = ci->previous) { + if (lim < ci->top) lim = ci->top; + } + lua_assert(lim <= L->stack_last); + return cast_int(lim - L->stack) + 1; /* part of stack in use */ +} + + +void luaD_shrinkstack (lua_State *L) { + int inuse = stackinuse(L); + int goodsize = inuse + (inuse / 8) + 2*EXTRA_STACK; + if (goodsize > LUAI_MAXSTACK) + goodsize = LUAI_MAXSTACK; /* respect stack limit */ + if (L->stacksize > LUAI_MAXSTACK) /* had been handling stack overflow? */ + luaE_freeCI(L); /* free all CIs (list grew because of an error) */ + else + luaE_shrinkCI(L); /* shrink list */ + /* if thread is currently not handling a stack overflow and its + good size is smaller than current size, shrink its stack */ + if (inuse <= (LUAI_MAXSTACK - EXTRA_STACK) && + goodsize < L->stacksize) + luaD_reallocstack(L, goodsize); + else /* don't change stack */ + condmovestack(L,{},{}); /* (change only for debugging) */ +} + + +void luaD_inctop (lua_State *L) { + luaD_checkstack(L, 1); + L->top++; +} + +/* }================================================================== */ + + +/* +** Call a hook for the given event. Make sure there is a hook to be +** called. (Both 'L->hook' and 'L->hookmask', which triggers this +** function, can be changed asynchronously by signals.) +*/ +void luaD_hook (lua_State *L, int event, int line) { + lua_Hook hook = L->hook; + if (hook && L->allowhook) { /* make sure there is a hook */ + CallInfo *ci = L->ci; + ptrdiff_t top = savestack(L, L->top); + ptrdiff_t ci_top = savestack(L, ci->top); + lua_Debug ar; + ar.event = event; + ar.currentline = line; + ar.i_ci = ci; + luaD_checkstack(L, LUA_MINSTACK); /* ensure minimum stack size */ + ci->top = L->top + LUA_MINSTACK; + lua_assert(ci->top <= L->stack_last); + L->allowhook = 0; /* cannot call hooks inside a hook */ + ci->callstatus |= CIST_HOOKED; + lua_unlock(L); + (*hook)(L, &ar); + lua_lock(L); + lua_assert(!L->allowhook); + L->allowhook = 1; + ci->top = restorestack(L, ci_top); + L->top = restorestack(L, top); + ci->callstatus &= ~CIST_HOOKED; + } +} + + +static void callhook (lua_State *L, CallInfo *ci) { + int hook = LUA_HOOKCALL; + ci->u.l.savedpc++; /* hooks assume 'pc' is already incremented */ + if (isLua(ci->previous) && + GET_OPCODE(*(ci->previous->u.l.savedpc - 1)) == OP_TAILCALL) { + ci->callstatus |= CIST_TAIL; + hook = LUA_HOOKTAILCALL; + } + luaD_hook(L, hook, -1); + ci->u.l.savedpc--; /* correct 'pc' */ +} + + +static StkId adjust_varargs (lua_State *L, Proto *p, int actual) { + int i; + int nfixargs = p->numparams; + StkId base, fixed; + /* move fixed parameters to final position */ + fixed = L->top - actual; /* first fixed argument */ + base = L->top; /* final position of first argument */ + for (i = 0; i < nfixargs && i < actual; i++) { + setobjs2s(L, L->top++, fixed + i); + setnilvalue(fixed + i); /* erase original copy (for GC) */ + } + for (; i < nfixargs; i++) + setnilvalue(L->top++); /* complete missing arguments */ + return base; +} + + +/* +** Check whether __call metafield of 'func' is a function. If so, put +** it in stack below original 'func' so that 'luaD_precall' can call +** it. Raise an error if __call metafield is not a function. +*/ +static void tryfuncTM (lua_State *L, StkId func) { + const TValue *tm = luaT_gettmbyobj(L, func, TM_CALL); + StkId p; + if (!ttisfunction(tm)) + luaG_typeerror(L, func, "call"); + /* Open a hole inside the stack at 'func' */ + for (p = L->top; p > func; p--) + setobjs2s(L, p, p-1); + L->top++; /* slot ensured by caller */ + setobj2s(L, func, tm); /* tag method is the new function to be called */ +} + + +/* +** Given 'nres' results at 'firstResult', move 'wanted' of them to 'res'. +** Handle most typical cases (zero results for commands, one result for +** expressions, multiple results for tail calls/single parameters) +** separated. +*/ +static int moveresults (lua_State *L, const TValue *firstResult, StkId res, + int nres, int wanted) { + switch (wanted) { /* handle typical cases separately */ + case 0: break; /* nothing to move */ + case 1: { /* one result needed */ + if (nres == 0) /* no results? */ + firstResult = luaO_nilobject; /* adjust with nil */ + setobjs2s(L, res, firstResult); /* move it to proper place */ + break; + } + case LUA_MULTRET: { + int i; + for (i = 0; i < nres; i++) /* move all results to correct place */ + setobjs2s(L, res + i, firstResult + i); + L->top = res + nres; + return 0; /* wanted == LUA_MULTRET */ + } + default: { + int i; + if (wanted <= nres) { /* enough results? */ + for (i = 0; i < wanted; i++) /* move wanted results to correct place */ + setobjs2s(L, res + i, firstResult + i); + } + else { /* not enough results; use all of them plus nils */ + for (i = 0; i < nres; i++) /* move all results to correct place */ + setobjs2s(L, res + i, firstResult + i); + for (; i < wanted; i++) /* complete wanted number of results */ + setnilvalue(res + i); + } + break; + } + } + L->top = res + wanted; /* top points after the last result */ + return 1; +} + + +/* +** Finishes a function call: calls hook if necessary, removes CallInfo, +** moves current number of results to proper place; returns 0 iff call +** wanted multiple (variable number of) results. +*/ +int luaD_poscall (lua_State *L, CallInfo *ci, StkId firstResult, int nres) { + StkId res; + int wanted = ci->nresults; + if (L->hookmask & (LUA_MASKRET | LUA_MASKLINE)) { + if (L->hookmask & LUA_MASKRET) { + ptrdiff_t fr = savestack(L, firstResult); /* hook may change stack */ + luaD_hook(L, LUA_HOOKRET, -1); + firstResult = restorestack(L, fr); + } + L->oldpc = ci->previous->u.l.savedpc; /* 'oldpc' for caller function */ + } + res = ci->func; /* res == final position of 1st result */ + L->ci = ci->previous; /* back to caller */ + /* move results to proper place */ + return moveresults(L, firstResult, res, nres, wanted); +} + + + +#define next_ci(L) (L->ci = (L->ci->next ? L->ci->next : luaE_extendCI(L))) + + +/* macro to check stack size, preserving 'p' */ +#define checkstackp(L,n,p) \ + luaD_checkstackaux(L, n, \ + ptrdiff_t t__ = savestack(L, p); /* save 'p' */ \ + luaC_checkGC(L), /* stack grow uses memory */ \ + p = restorestack(L, t__)) /* 'pos' part: restore 'p' */ + + +/* +** Prepares a function call: checks the stack, creates a new CallInfo +** entry, fills in the relevant information, calls hook if needed. +** If function is a C function, does the call, too. (Otherwise, leave +** the execution ('luaV_execute') to the caller, to allow stackless +** calls.) Returns true iff function has been executed (C function). +*/ +int luaD_precall (lua_State *L, StkId func, int nresults) { + lua_CFunction f; + CallInfo *ci; + switch (ttype(func)) { + case LUA_TCCL: /* C closure */ + f = clCvalue(func)->f; + goto Cfunc; + case LUA_TLCF: /* light C function */ + f = fvalue(func); + Cfunc: { + int n; /* number of returns */ + checkstackp(L, LUA_MINSTACK, func); /* ensure minimum stack size */ + ci = next_ci(L); /* now 'enter' new function */ + ci->nresults = nresults; + ci->func = func; + ci->top = L->top + LUA_MINSTACK; + lua_assert(ci->top <= L->stack_last); + ci->callstatus = 0; + if (L->hookmask & LUA_MASKCALL) + luaD_hook(L, LUA_HOOKCALL, -1); + lua_unlock(L); + n = (*f)(L); /* do the actual call */ + lua_lock(L); + api_checknelems(L, n); + luaD_poscall(L, ci, L->top - n, n); + return 1; + } + case LUA_TLCL: { /* Lua function: prepare its call */ + StkId base; + Proto *p = clLvalue(func)->p; + int n = cast_int(L->top - func) - 1; /* number of real arguments */ + int fsize = p->maxstacksize; /* frame size */ + checkstackp(L, fsize, func); + if (p->is_vararg) + base = adjust_varargs(L, p, n); + else { /* non vararg function */ + for (; n < p->numparams; n++) + setnilvalue(L->top++); /* complete missing arguments */ + base = func + 1; + } + ci = next_ci(L); /* now 'enter' new function */ + ci->nresults = nresults; + ci->func = func; + ci->u.l.base = base; + L->top = ci->top = base + fsize; + lua_assert(ci->top <= L->stack_last); + ci->u.l.savedpc = p->code; /* starting point */ + ci->callstatus = CIST_LUA; + if (L->hookmask & LUA_MASKCALL) + callhook(L, ci); + return 0; + } + default: { /* not a function */ + checkstackp(L, 1, func); /* ensure space for metamethod */ + tryfuncTM(L, func); /* try to get '__call' metamethod */ + return luaD_precall(L, func, nresults); /* now it must be a function */ + } + } +} + + +/* +** Check appropriate error for stack overflow ("regular" overflow or +** overflow while handling stack overflow). If 'nCalls' is larger than +** LUAI_MAXCCALLS (which means it is handling a "regular" overflow) but +** smaller than 9/8 of LUAI_MAXCCALLS, does not report an error (to +** allow overflow handling to work) +*/ +static void stackerror (lua_State *L) { + if (L->nCcalls == LUAI_MAXCCALLS) + luaG_runerror(L, "C stack overflow"); + else if (L->nCcalls >= (LUAI_MAXCCALLS + (LUAI_MAXCCALLS>>3))) + luaD_throw(L, LUA_ERRERR); /* error while handing stack error */ +} + + +/* +** Call a function (C or Lua). The function to be called is at *func. +** The arguments are on the stack, right after the function. +** When returns, all the results are on the stack, starting at the original +** function position. +*/ +void luaD_call (lua_State *L, StkId func, int nResults) { + if (++L->nCcalls >= LUAI_MAXCCALLS) + stackerror(L); + if (!luaD_precall(L, func, nResults)) /* is a Lua function? */ + luaV_execute(L); /* call it */ + L->nCcalls--; +} + + +/* +** Similar to 'luaD_call', but does not allow yields during the call +*/ +void luaD_callnoyield (lua_State *L, StkId func, int nResults) { + L->nny++; + luaD_call(L, func, nResults); + L->nny--; +} + + +/* +** Completes the execution of an interrupted C function, calling its +** continuation function. +*/ +static void finishCcall (lua_State *L, int status) { + CallInfo *ci = L->ci; + int n; + /* must have a continuation and must be able to call it */ + lua_assert(ci->u.c.k != NULL && L->nny == 0); + /* error status can only happen in a protected call */ + lua_assert((ci->callstatus & CIST_YPCALL) || status == LUA_YIELD); + if (ci->callstatus & CIST_YPCALL) { /* was inside a pcall? */ + ci->callstatus &= ~CIST_YPCALL; /* continuation is also inside it */ + L->errfunc = ci->u.c.old_errfunc; /* with the same error function */ + } + /* finish 'lua_callk'/'lua_pcall'; CIST_YPCALL and 'errfunc' already + handled */ + adjustresults(L, ci->nresults); + lua_unlock(L); + n = (*ci->u.c.k)(L, status, ci->u.c.ctx); /* call continuation function */ + lua_lock(L); + api_checknelems(L, n); + luaD_poscall(L, ci, L->top - n, n); /* finish 'luaD_precall' */ +} + + +/* +** Executes "full continuation" (everything in the stack) of a +** previously interrupted coroutine until the stack is empty (or another +** interruption long-jumps out of the loop). If the coroutine is +** recovering from an error, 'ud' points to the error status, which must +** be passed to the first continuation function (otherwise the default +** status is LUA_YIELD). +*/ +static void unroll (lua_State *L, void *ud) { + if (ud != NULL) /* error status? */ + finishCcall(L, *(int *)ud); /* finish 'lua_pcallk' callee */ + while (L->ci != &L->base_ci) { /* something in the stack */ + if (!isLua(L->ci)) /* C function? */ + finishCcall(L, LUA_YIELD); /* complete its execution */ + else { /* Lua function */ + luaV_finishOp(L); /* finish interrupted instruction */ + luaV_execute(L); /* execute down to higher C 'boundary' */ + } + } +} + + +/* +** Try to find a suspended protected call (a "recover point") for the +** given thread. +*/ +static CallInfo *findpcall (lua_State *L) { + CallInfo *ci; + for (ci = L->ci; ci != NULL; ci = ci->previous) { /* search for a pcall */ + if (ci->callstatus & CIST_YPCALL) + return ci; + } + return NULL; /* no pending pcall */ +} + + +/* +** Recovers from an error in a coroutine. Finds a recover point (if +** there is one) and completes the execution of the interrupted +** 'luaD_pcall'. If there is no recover point, returns zero. +*/ +static int recover (lua_State *L, int status) { + StkId oldtop; + CallInfo *ci = findpcall(L); + if (ci == NULL) return 0; /* no recovery point */ + /* "finish" luaD_pcall */ + oldtop = restorestack(L, ci->extra); + luaF_close(L, oldtop); + seterrorobj(L, status, oldtop); + L->ci = ci; + L->allowhook = getoah(ci->callstatus); /* restore original 'allowhook' */ + L->nny = 0; /* should be zero to be yieldable */ + luaD_shrinkstack(L); + L->errfunc = ci->u.c.old_errfunc; + return 1; /* continue running the coroutine */ +} + + +/* +** Signal an error in the call to 'lua_resume', not in the execution +** of the coroutine itself. (Such errors should not be handled by any +** coroutine error handler and should not kill the coroutine.) +*/ +static int resume_error (lua_State *L, const char *msg, int narg) { + L->top -= narg; /* remove args from the stack */ + setsvalue2s(L, L->top, luaS_new(L, msg)); /* push error message */ + api_incr_top(L); + lua_unlock(L); + return LUA_ERRRUN; +} + + +/* +** Do the work for 'lua_resume' in protected mode. Most of the work +** depends on the status of the coroutine: initial state, suspended +** inside a hook, or regularly suspended (optionally with a continuation +** function), plus erroneous cases: non-suspended coroutine or dead +** coroutine. +*/ +static void resume (lua_State *L, void *ud) { + int n = *(cast(int*, ud)); /* number of arguments */ + StkId firstArg = L->top - n; /* first argument */ + CallInfo *ci = L->ci; + if (L->status == LUA_OK) { /* starting a coroutine? */ + if (!luaD_precall(L, firstArg - 1, LUA_MULTRET)) /* Lua function? */ + luaV_execute(L); /* call it */ + } + else { /* resuming from previous yield */ + lua_assert(L->status == LUA_YIELD); + L->status = LUA_OK; /* mark that it is running (again) */ + ci->func = restorestack(L, ci->extra); + if (isLua(ci)) /* yielded inside a hook? */ + luaV_execute(L); /* just continue running Lua code */ + else { /* 'common' yield */ + if (ci->u.c.k != NULL) { /* does it have a continuation function? */ + lua_unlock(L); + n = (*ci->u.c.k)(L, LUA_YIELD, ci->u.c.ctx); /* call continuation */ + lua_lock(L); + api_checknelems(L, n); + firstArg = L->top - n; /* yield results come from continuation */ + } + luaD_poscall(L, ci, firstArg, n); /* finish 'luaD_precall' */ + } + unroll(L, NULL); /* run continuation */ + } +} + + +LUA_API int lua_resume (lua_State *L, lua_State *from, int nargs) { + int status; + unsigned short oldnny = L->nny; /* save "number of non-yieldable" calls */ + lua_lock(L); + if (L->status == LUA_OK) { /* may be starting a coroutine */ + if (L->ci != &L->base_ci) /* not in base level? */ + return resume_error(L, "cannot resume non-suspended coroutine", nargs); + } + else if (L->status != LUA_YIELD) + return resume_error(L, "cannot resume dead coroutine", nargs); + L->nCcalls = (from) ? from->nCcalls + 1 : 1; + if (L->nCcalls >= LUAI_MAXCCALLS) + return resume_error(L, "C stack overflow", nargs); + luai_userstateresume(L, nargs); + L->nny = 0; /* allow yields */ + api_checknelems(L, (L->status == LUA_OK) ? nargs + 1 : nargs); + status = luaD_rawrunprotected(L, resume, &nargs); + if (status == -1) /* error calling 'lua_resume'? */ + status = LUA_ERRRUN; + else { /* continue running after recoverable errors */ + while (errorstatus(status) && recover(L, status)) { + /* unroll continuation */ + status = luaD_rawrunprotected(L, unroll, &status); + } + if (errorstatus(status)) { /* unrecoverable error? */ + L->status = cast_byte(status); /* mark thread as 'dead' */ + seterrorobj(L, status, L->top); /* push error message */ + L->ci->top = L->top; + } + else lua_assert(status == L->status); /* normal end or yield */ + } + L->nny = oldnny; /* restore 'nny' */ + L->nCcalls--; + lua_assert(L->nCcalls == ((from) ? from->nCcalls : 0)); + lua_unlock(L); + return status; +} + + +LUA_API int lua_isyieldable (lua_State *L) { + return (L->nny == 0); +} + + +LUA_API int lua_yieldk (lua_State *L, int nresults, lua_KContext ctx, + lua_KFunction k) { + CallInfo *ci = L->ci; + luai_userstateyield(L, nresults); + lua_lock(L); + api_checknelems(L, nresults); + if (L->nny > 0) { + if (L != G(L)->mainthread) + luaG_runerror(L, "attempt to yield across a C-call boundary"); + else + luaG_runerror(L, "attempt to yield from outside a coroutine"); + } + L->status = LUA_YIELD; + ci->extra = savestack(L, ci->func); /* save current 'func' */ + if (isLua(ci)) { /* inside a hook? */ + api_check(L, k == NULL, "hooks cannot continue after yielding"); + } + else { + if ((ci->u.c.k = k) != NULL) /* is there a continuation? */ + ci->u.c.ctx = ctx; /* save context */ + ci->func = L->top - nresults - 1; /* protect stack below results */ + luaD_throw(L, LUA_YIELD); + } + lua_assert(ci->callstatus & CIST_HOOKED); /* must be inside a hook */ + lua_unlock(L); + return 0; /* return to 'luaD_hook' */ +} + + +int luaD_pcall (lua_State *L, Pfunc func, void *u, + ptrdiff_t old_top, ptrdiff_t ef) { + int status; + CallInfo *old_ci = L->ci; + lu_byte old_allowhooks = L->allowhook; + unsigned short old_nny = L->nny; + ptrdiff_t old_errfunc = L->errfunc; + L->errfunc = ef; + status = luaD_rawrunprotected(L, func, u); + if (status != LUA_OK) { /* an error occurred? */ + StkId oldtop = restorestack(L, old_top); + luaF_close(L, oldtop); /* close possible pending closures */ + seterrorobj(L, status, oldtop); + L->ci = old_ci; + L->allowhook = old_allowhooks; + L->nny = old_nny; + luaD_shrinkstack(L); + } + L->errfunc = old_errfunc; + return status; +} + + + +/* +** Execute a protected parser. +*/ +struct SParser { /* data to 'f_parser' */ + ZIO *z; + Mbuffer buff; /* dynamic structure used by the scanner */ + Dyndata dyd; /* dynamic structures used by the parser */ + const char *mode; + const char *name; +}; + + +static void checkmode (lua_State *L, const char *mode, const char *x) { + if (mode && strchr(mode, x[0]) == NULL) { + luaO_pushfstring(L, + "attempt to load a %s chunk (mode is '%s')", x, mode); + luaD_throw(L, LUA_ERRSYNTAX); + } +} + + +static void f_parser (lua_State *L, void *ud) { + LClosure *cl; + struct SParser *p = cast(struct SParser *, ud); + int c = zgetc(p->z); /* read first character */ + if (c == LUA_SIGNATURE[0]) { + checkmode(L, p->mode, "binary"); + cl = luaU_undump(L, p->z, p->name); + } + else { + checkmode(L, p->mode, "text"); + cl = luaY_parser(L, p->z, &p->buff, &p->dyd, p->name, c); + } + lua_assert(cl->nupvalues == cl->p->sizeupvalues); + luaF_initupvals(L, cl); +} + + +int luaD_protectedparser (lua_State *L, ZIO *z, const char *name, + const char *mode) { + struct SParser p; + int status; + L->nny++; /* cannot yield during parsing */ + p.z = z; p.name = name; p.mode = mode; + p.dyd.actvar.arr = NULL; p.dyd.actvar.size = 0; + p.dyd.gt.arr = NULL; p.dyd.gt.size = 0; + p.dyd.label.arr = NULL; p.dyd.label.size = 0; + luaZ_initbuffer(L, &p.buff); + status = luaD_pcall(L, f_parser, &p, savestack(L, L->top), L->errfunc); + luaZ_freebuffer(L, &p.buff); + luaM_freearray(L, p.dyd.actvar.arr, p.dyd.actvar.size); + luaM_freearray(L, p.dyd.gt.arr, p.dyd.gt.size); + luaM_freearray(L, p.dyd.label.arr, p.dyd.label.size); + L->nny--; + return status; +} + + diff --git a/EQ2/source/LUA/ldo.h b/EQ2/source/LUA/ldo.h new file mode 100644 index 000000000..4f5d51c3c --- /dev/null +++ b/EQ2/source/LUA/ldo.h @@ -0,0 +1,58 @@ +/* +** $Id: ldo.h,v 2.29 2015/12/21 13:02:14 roberto Exp $ +** Stack and Call structure of Lua +** See Copyright Notice in lua.h +*/ + +#ifndef ldo_h +#define ldo_h + + +#include "lobject.h" +#include "lstate.h" +#include "lzio.h" + + +/* +** Macro to check stack size and grow stack if needed. Parameters +** 'pre'/'pos' allow the macro to preserve a pointer into the +** stack across reallocations, doing the work only when needed. +** 'condmovestack' is used in heavy tests to force a stack reallocation +** at every check. +*/ +#define luaD_checkstackaux(L,n,pre,pos) \ + if (L->stack_last - L->top <= (n)) \ + { pre; luaD_growstack(L, n); pos; } else { condmovestack(L,pre,pos); } + +/* In general, 'pre'/'pos' are empty (nothing to save) */ +#define luaD_checkstack(L,n) luaD_checkstackaux(L,n,(void)0,(void)0) + + + +#define savestack(L,p) ((char *)(p) - (char *)L->stack) +#define restorestack(L,n) ((TValue *)((char *)L->stack + (n))) + + +/* type of protected functions, to be ran by 'runprotected' */ +typedef void (*Pfunc) (lua_State *L, void *ud); + +LUAI_FUNC int luaD_protectedparser (lua_State *L, ZIO *z, const char *name, + const char *mode); +LUAI_FUNC void luaD_hook (lua_State *L, int event, int line); +LUAI_FUNC int luaD_precall (lua_State *L, StkId func, int nresults); +LUAI_FUNC void luaD_call (lua_State *L, StkId func, int nResults); +LUAI_FUNC void luaD_callnoyield (lua_State *L, StkId func, int nResults); +LUAI_FUNC int luaD_pcall (lua_State *L, Pfunc func, void *u, + ptrdiff_t oldtop, ptrdiff_t ef); +LUAI_FUNC int luaD_poscall (lua_State *L, CallInfo *ci, StkId firstResult, + int nres); +LUAI_FUNC void luaD_reallocstack (lua_State *L, int newsize); +LUAI_FUNC void luaD_growstack (lua_State *L, int n); +LUAI_FUNC void luaD_shrinkstack (lua_State *L); +LUAI_FUNC void luaD_inctop (lua_State *L); + +LUAI_FUNC l_noret luaD_throw (lua_State *L, int errcode); +LUAI_FUNC int luaD_rawrunprotected (lua_State *L, Pfunc f, void *ud); + +#endif + diff --git a/EQ2/source/LUA/ldump.c b/EQ2/source/LUA/ldump.c new file mode 100644 index 000000000..016e30082 --- /dev/null +++ b/EQ2/source/LUA/ldump.c @@ -0,0 +1,215 @@ +/* +** $Id: ldump.c,v 2.37 2015/10/08 15:53:49 roberto Exp $ +** save precompiled Lua chunks +** See Copyright Notice in lua.h +*/ + +#define ldump_c +#define LUA_CORE + +#include "lprefix.h" + + +#include + +#include "lua.h" + +#include "lobject.h" +#include "lstate.h" +#include "lundump.h" + + +typedef struct { + lua_State *L; + lua_Writer writer; + void *data; + int strip; + int status; +} DumpState; + + +/* +** All high-level dumps go through DumpVector; you can change it to +** change the endianness of the result +*/ +#define DumpVector(v,n,D) DumpBlock(v,(n)*sizeof((v)[0]),D) + +#define DumpLiteral(s,D) DumpBlock(s, sizeof(s) - sizeof(char), D) + + +static void DumpBlock (const void *b, size_t size, DumpState *D) { + if (D->status == 0 && size > 0) { + lua_unlock(D->L); + D->status = (*D->writer)(D->L, b, size, D->data); + lua_lock(D->L); + } +} + + +#define DumpVar(x,D) DumpVector(&x,1,D) + + +static void DumpByte (int y, DumpState *D) { + lu_byte x = (lu_byte)y; + DumpVar(x, D); +} + + +static void DumpInt (int x, DumpState *D) { + DumpVar(x, D); +} + + +static void DumpNumber (lua_Number x, DumpState *D) { + DumpVar(x, D); +} + + +static void DumpInteger (lua_Integer x, DumpState *D) { + DumpVar(x, D); +} + + +static void DumpString (const TString *s, DumpState *D) { + if (s == NULL) + DumpByte(0, D); + else { + size_t size = tsslen(s) + 1; /* include trailing '\0' */ + const char *str = getstr(s); + if (size < 0xFF) + DumpByte(cast_int(size), D); + else { + DumpByte(0xFF, D); + DumpVar(size, D); + } + DumpVector(str, size - 1, D); /* no need to save '\0' */ + } +} + + +static void DumpCode (const Proto *f, DumpState *D) { + DumpInt(f->sizecode, D); + DumpVector(f->code, f->sizecode, D); +} + + +static void DumpFunction(const Proto *f, TString *psource, DumpState *D); + +static void DumpConstants (const Proto *f, DumpState *D) { + int i; + int n = f->sizek; + DumpInt(n, D); + for (i = 0; i < n; i++) { + const TValue *o = &f->k[i]; + DumpByte(ttype(o), D); + switch (ttype(o)) { + case LUA_TNIL: + break; + case LUA_TBOOLEAN: + DumpByte(bvalue(o), D); + break; + case LUA_TNUMFLT: + DumpNumber(fltvalue(o), D); + break; + case LUA_TNUMINT: + DumpInteger(ivalue(o), D); + break; + case LUA_TSHRSTR: + case LUA_TLNGSTR: + DumpString(tsvalue(o), D); + break; + default: + lua_assert(0); + } + } +} + + +static void DumpProtos (const Proto *f, DumpState *D) { + int i; + int n = f->sizep; + DumpInt(n, D); + for (i = 0; i < n; i++) + DumpFunction(f->p[i], f->source, D); +} + + +static void DumpUpvalues (const Proto *f, DumpState *D) { + int i, n = f->sizeupvalues; + DumpInt(n, D); + for (i = 0; i < n; i++) { + DumpByte(f->upvalues[i].instack, D); + DumpByte(f->upvalues[i].idx, D); + } +} + + +static void DumpDebug (const Proto *f, DumpState *D) { + int i, n; + n = (D->strip) ? 0 : f->sizelineinfo; + DumpInt(n, D); + DumpVector(f->lineinfo, n, D); + n = (D->strip) ? 0 : f->sizelocvars; + DumpInt(n, D); + for (i = 0; i < n; i++) { + DumpString(f->locvars[i].varname, D); + DumpInt(f->locvars[i].startpc, D); + DumpInt(f->locvars[i].endpc, D); + } + n = (D->strip) ? 0 : f->sizeupvalues; + DumpInt(n, D); + for (i = 0; i < n; i++) + DumpString(f->upvalues[i].name, D); +} + + +static void DumpFunction (const Proto *f, TString *psource, DumpState *D) { + if (D->strip || f->source == psource) + DumpString(NULL, D); /* no debug info or same source as its parent */ + else + DumpString(f->source, D); + DumpInt(f->linedefined, D); + DumpInt(f->lastlinedefined, D); + DumpByte(f->numparams, D); + DumpByte(f->is_vararg, D); + DumpByte(f->maxstacksize, D); + DumpCode(f, D); + DumpConstants(f, D); + DumpUpvalues(f, D); + DumpProtos(f, D); + DumpDebug(f, D); +} + + +static void DumpHeader (DumpState *D) { + DumpLiteral(LUA_SIGNATURE, D); + DumpByte(LUAC_VERSION, D); + DumpByte(LUAC_FORMAT, D); + DumpLiteral(LUAC_DATA, D); + DumpByte(sizeof(int), D); + DumpByte(sizeof(size_t), D); + DumpByte(sizeof(Instruction), D); + DumpByte(sizeof(lua_Integer), D); + DumpByte(sizeof(lua_Number), D); + DumpInteger(LUAC_INT, D); + DumpNumber(LUAC_NUM, D); +} + + +/* +** dump Lua function as precompiled chunk +*/ +int luaU_dump(lua_State *L, const Proto *f, lua_Writer w, void *data, + int strip) { + DumpState D; + D.L = L; + D.writer = w; + D.data = data; + D.strip = strip; + D.status = 0; + DumpHeader(&D); + DumpByte(f->sizeupvalues, &D); + DumpFunction(f, NULL, &D); + return D.status; +} + diff --git a/EQ2/source/LUA/lfunc.c b/EQ2/source/LUA/lfunc.c new file mode 100644 index 000000000..67967dab3 --- /dev/null +++ b/EQ2/source/LUA/lfunc.c @@ -0,0 +1,151 @@ +/* +** $Id: lfunc.c,v 2.45 2014/11/02 19:19:04 roberto Exp $ +** Auxiliary functions to manipulate prototypes and closures +** See Copyright Notice in lua.h +*/ + +#define lfunc_c +#define LUA_CORE + +#include "lprefix.h" + + +#include + +#include "lua.h" + +#include "lfunc.h" +#include "lgc.h" +#include "lmem.h" +#include "lobject.h" +#include "lstate.h" + + + +CClosure *luaF_newCclosure (lua_State *L, int n) { + GCObject *o = luaC_newobj(L, LUA_TCCL, sizeCclosure(n)); + CClosure *c = gco2ccl(o); + c->nupvalues = cast_byte(n); + return c; +} + + +LClosure *luaF_newLclosure (lua_State *L, int n) { + GCObject *o = luaC_newobj(L, LUA_TLCL, sizeLclosure(n)); + LClosure *c = gco2lcl(o); + c->p = NULL; + c->nupvalues = cast_byte(n); + while (n--) c->upvals[n] = NULL; + return c; +} + +/* +** fill a closure with new closed upvalues +*/ +void luaF_initupvals (lua_State *L, LClosure *cl) { + int i; + for (i = 0; i < cl->nupvalues; i++) { + UpVal *uv = luaM_new(L, UpVal); + uv->refcount = 1; + uv->v = &uv->u.value; /* make it closed */ + setnilvalue(uv->v); + cl->upvals[i] = uv; + } +} + + +UpVal *luaF_findupval (lua_State *L, StkId level) { + UpVal **pp = &L->openupval; + UpVal *p; + UpVal *uv; + lua_assert(isintwups(L) || L->openupval == NULL); + while (*pp != NULL && (p = *pp)->v >= level) { + lua_assert(upisopen(p)); + if (p->v == level) /* found a corresponding upvalue? */ + return p; /* return it */ + pp = &p->u.open.next; + } + /* not found: create a new upvalue */ + uv = luaM_new(L, UpVal); + uv->refcount = 0; + uv->u.open.next = *pp; /* link it to list of open upvalues */ + uv->u.open.touched = 1; + *pp = uv; + uv->v = level; /* current value lives in the stack */ + if (!isintwups(L)) { /* thread not in list of threads with upvalues? */ + L->twups = G(L)->twups; /* link it to the list */ + G(L)->twups = L; + } + return uv; +} + + +void luaF_close (lua_State *L, StkId level) { + UpVal *uv; + while (L->openupval != NULL && (uv = L->openupval)->v >= level) { + lua_assert(upisopen(uv)); + L->openupval = uv->u.open.next; /* remove from 'open' list */ + if (uv->refcount == 0) /* no references? */ + luaM_free(L, uv); /* free upvalue */ + else { + setobj(L, &uv->u.value, uv->v); /* move value to upvalue slot */ + uv->v = &uv->u.value; /* now current value lives here */ + luaC_upvalbarrier(L, uv); + } + } +} + + +Proto *luaF_newproto (lua_State *L) { + GCObject *o = luaC_newobj(L, LUA_TPROTO, sizeof(Proto)); + Proto *f = gco2p(o); + f->k = NULL; + f->sizek = 0; + f->p = NULL; + f->sizep = 0; + f->code = NULL; + f->cache = NULL; + f->sizecode = 0; + f->lineinfo = NULL; + f->sizelineinfo = 0; + f->upvalues = NULL; + f->sizeupvalues = 0; + f->numparams = 0; + f->is_vararg = 0; + f->maxstacksize = 0; + f->locvars = NULL; + f->sizelocvars = 0; + f->linedefined = 0; + f->lastlinedefined = 0; + f->source = NULL; + return f; +} + + +void luaF_freeproto (lua_State *L, Proto *f) { + luaM_freearray(L, f->code, f->sizecode); + luaM_freearray(L, f->p, f->sizep); + luaM_freearray(L, f->k, f->sizek); + luaM_freearray(L, f->lineinfo, f->sizelineinfo); + luaM_freearray(L, f->locvars, f->sizelocvars); + luaM_freearray(L, f->upvalues, f->sizeupvalues); + luaM_free(L, f); +} + + +/* +** Look for n-th local variable at line 'line' in function 'func'. +** Returns NULL if not found. +*/ +const char *luaF_getlocalname (const Proto *f, int local_number, int pc) { + int i; + for (i = 0; isizelocvars && f->locvars[i].startpc <= pc; i++) { + if (pc < f->locvars[i].endpc) { /* is variable active? */ + local_number--; + if (local_number == 0) + return getstr(f->locvars[i].varname); + } + } + return NULL; /* not found */ +} + diff --git a/EQ2/source/LUA/lfunc.h b/EQ2/source/LUA/lfunc.h new file mode 100644 index 000000000..2eeb0d5a4 --- /dev/null +++ b/EQ2/source/LUA/lfunc.h @@ -0,0 +1,61 @@ +/* +** $Id: lfunc.h,v 2.15 2015/01/13 15:49:11 roberto Exp $ +** Auxiliary functions to manipulate prototypes and closures +** See Copyright Notice in lua.h +*/ + +#ifndef lfunc_h +#define lfunc_h + + +#include "lobject.h" + + +#define sizeCclosure(n) (cast(int, sizeof(CClosure)) + \ + cast(int, sizeof(TValue)*((n)-1))) + +#define sizeLclosure(n) (cast(int, sizeof(LClosure)) + \ + cast(int, sizeof(TValue *)*((n)-1))) + + +/* test whether thread is in 'twups' list */ +#define isintwups(L) (L->twups != L) + + +/* +** maximum number of upvalues in a closure (both C and Lua). (Value +** must fit in a VM register.) +*/ +#define MAXUPVAL 255 + + +/* +** Upvalues for Lua closures +*/ +struct UpVal { + TValue *v; /* points to stack or to its own value */ + lu_mem refcount; /* reference counter */ + union { + struct { /* (when open) */ + UpVal *next; /* linked list */ + int touched; /* mark to avoid cycles with dead threads */ + } open; + TValue value; /* the value (when closed) */ + } u; +}; + +#define upisopen(up) ((up)->v != &(up)->u.value) + + +LUAI_FUNC Proto *luaF_newproto (lua_State *L); +LUAI_FUNC CClosure *luaF_newCclosure (lua_State *L, int nelems); +LUAI_FUNC LClosure *luaF_newLclosure (lua_State *L, int nelems); +LUAI_FUNC void luaF_initupvals (lua_State *L, LClosure *cl); +LUAI_FUNC UpVal *luaF_findupval (lua_State *L, StkId level); +LUAI_FUNC void luaF_close (lua_State *L, StkId level); +LUAI_FUNC void luaF_freeproto (lua_State *L, Proto *f); +LUAI_FUNC const char *luaF_getlocalname (const Proto *func, int local_number, + int pc); + + +#endif diff --git a/EQ2/source/LUA/lgc.c b/EQ2/source/LUA/lgc.c new file mode 100644 index 000000000..ba2c19e14 --- /dev/null +++ b/EQ2/source/LUA/lgc.c @@ -0,0 +1,1178 @@ +/* +** $Id: lgc.c,v 2.215 2016/12/22 13:08:50 roberto Exp $ +** Garbage Collector +** See Copyright Notice in lua.h +*/ + +#define lgc_c +#define LUA_CORE + +#include "lprefix.h" + + +#include + +#include "lua.h" + +#include "ldebug.h" +#include "ldo.h" +#include "lfunc.h" +#include "lgc.h" +#include "lmem.h" +#include "lobject.h" +#include "lstate.h" +#include "lstring.h" +#include "ltable.h" +#include "ltm.h" + + +/* +** internal state for collector while inside the atomic phase. The +** collector should never be in this state while running regular code. +*/ +#define GCSinsideatomic (GCSpause + 1) + +/* +** cost of sweeping one element (the size of a small object divided +** by some adjust for the sweep speed) +*/ +#define GCSWEEPCOST ((sizeof(TString) + 4) / 4) + +/* maximum number of elements to sweep in each single step */ +#define GCSWEEPMAX (cast_int((GCSTEPSIZE / GCSWEEPCOST) / 4)) + +/* cost of calling one finalizer */ +#define GCFINALIZECOST GCSWEEPCOST + + +/* +** macro to adjust 'stepmul': 'stepmul' is actually used like +** 'stepmul / STEPMULADJ' (value chosen by tests) +*/ +#define STEPMULADJ 200 + + +/* +** macro to adjust 'pause': 'pause' is actually used like +** 'pause / PAUSEADJ' (value chosen by tests) +*/ +#define PAUSEADJ 100 + + +/* +** 'makewhite' erases all color bits then sets only the current white +** bit +*/ +#define maskcolors (~(bitmask(BLACKBIT) | WHITEBITS)) +#define makewhite(g,x) \ + (x->marked = cast_byte((x->marked & maskcolors) | luaC_white(g))) + +#define white2gray(x) resetbits(x->marked, WHITEBITS) +#define black2gray(x) resetbit(x->marked, BLACKBIT) + + +#define valiswhite(x) (iscollectable(x) && iswhite(gcvalue(x))) + +#define checkdeadkey(n) lua_assert(!ttisdeadkey(gkey(n)) || ttisnil(gval(n))) + + +#define checkconsistency(obj) \ + lua_longassert(!iscollectable(obj) || righttt(obj)) + + +#define markvalue(g,o) { checkconsistency(o); \ + if (valiswhite(o)) reallymarkobject(g,gcvalue(o)); } + +#define markobject(g,t) { if (iswhite(t)) reallymarkobject(g, obj2gco(t)); } + +/* +** mark an object that can be NULL (either because it is really optional, +** or it was stripped as debug info, or inside an uncompleted structure) +*/ +#define markobjectN(g,t) { if (t) markobject(g,t); } + +static void reallymarkobject (global_State *g, GCObject *o); + + +/* +** {====================================================== +** Generic functions +** ======================================================= +*/ + + +/* +** one after last element in a hash array +*/ +#define gnodelast(h) gnode(h, cast(size_t, sizenode(h))) + + +/* +** link collectable object 'o' into list pointed by 'p' +*/ +#define linkgclist(o,p) ((o)->gclist = (p), (p) = obj2gco(o)) + + +/* +** If key is not marked, mark its entry as dead. This allows key to be +** collected, but keeps its entry in the table. A dead node is needed +** when Lua looks up for a key (it may be part of a chain) and when +** traversing a weak table (key might be removed from the table during +** traversal). Other places never manipulate dead keys, because its +** associated nil value is enough to signal that the entry is logically +** empty. +*/ +static void removeentry (Node *n) { + lua_assert(ttisnil(gval(n))); + if (valiswhite(gkey(n))) + setdeadvalue(wgkey(n)); /* unused and unmarked key; remove it */ +} + + +/* +** tells whether a key or value can be cleared from a weak +** table. Non-collectable objects are never removed from weak +** tables. Strings behave as 'values', so are never removed too. for +** other objects: if really collected, cannot keep them; for objects +** being finalized, keep them in keys, but not in values +*/ +static int iscleared (global_State *g, const TValue *o) { + if (!iscollectable(o)) return 0; + else if (ttisstring(o)) { + markobject(g, tsvalue(o)); /* strings are 'values', so are never weak */ + return 0; + } + else return iswhite(gcvalue(o)); +} + + +/* +** barrier that moves collector forward, that is, mark the white object +** being pointed by a black object. (If in sweep phase, clear the black +** object to white [sweep it] to avoid other barrier calls for this +** same object.) +*/ +void luaC_barrier_ (lua_State *L, GCObject *o, GCObject *v) { + global_State *g = G(L); + lua_assert(isblack(o) && iswhite(v) && !isdead(g, v) && !isdead(g, o)); + if (keepinvariant(g)) /* must keep invariant? */ + reallymarkobject(g, v); /* restore invariant */ + else { /* sweep phase */ + lua_assert(issweepphase(g)); + makewhite(g, o); /* mark main obj. as white to avoid other barriers */ + } +} + + +/* +** barrier that moves collector backward, that is, mark the black object +** pointing to a white object as gray again. +*/ +void luaC_barrierback_ (lua_State *L, Table *t) { + global_State *g = G(L); + lua_assert(isblack(t) && !isdead(g, t)); + black2gray(t); /* make table gray (again) */ + linkgclist(t, g->grayagain); +} + + +/* +** barrier for assignments to closed upvalues. Because upvalues are +** shared among closures, it is impossible to know the color of all +** closures pointing to it. So, we assume that the object being assigned +** must be marked. +*/ +void luaC_upvalbarrier_ (lua_State *L, UpVal *uv) { + global_State *g = G(L); + GCObject *o = gcvalue(uv->v); + lua_assert(!upisopen(uv)); /* ensured by macro luaC_upvalbarrier */ + if (keepinvariant(g)) + markobject(g, o); +} + + +void luaC_fix (lua_State *L, GCObject *o) { + global_State *g = G(L); + lua_assert(g->allgc == o); /* object must be 1st in 'allgc' list! */ + white2gray(o); /* they will be gray forever */ + g->allgc = o->next; /* remove object from 'allgc' list */ + o->next = g->fixedgc; /* link it to 'fixedgc' list */ + g->fixedgc = o; +} + + +/* +** create a new collectable object (with given type and size) and link +** it to 'allgc' list. +*/ +GCObject *luaC_newobj (lua_State *L, int tt, size_t sz) { + global_State *g = G(L); + GCObject *o = cast(GCObject *, luaM_newobject(L, novariant(tt), sz)); + o->marked = luaC_white(g); + o->tt = tt; + o->next = g->allgc; + g->allgc = o; + return o; +} + +/* }====================================================== */ + + + +/* +** {====================================================== +** Mark functions +** ======================================================= +*/ + + +/* +** mark an object. Userdata, strings, and closed upvalues are visited +** and turned black here. Other objects are marked gray and added +** to appropriate list to be visited (and turned black) later. (Open +** upvalues are already linked in 'headuv' list.) +*/ +static void reallymarkobject (global_State *g, GCObject *o) { + reentry: + white2gray(o); + switch (o->tt) { + case LUA_TSHRSTR: { + gray2black(o); + g->GCmemtrav += sizelstring(gco2ts(o)->shrlen); + break; + } + case LUA_TLNGSTR: { + gray2black(o); + g->GCmemtrav += sizelstring(gco2ts(o)->u.lnglen); + break; + } + case LUA_TUSERDATA: { + TValue uvalue; + markobjectN(g, gco2u(o)->metatable); /* mark its metatable */ + gray2black(o); + g->GCmemtrav += sizeudata(gco2u(o)); + getuservalue(g->mainthread, gco2u(o), &uvalue); + if (valiswhite(&uvalue)) { /* markvalue(g, &uvalue); */ + o = gcvalue(&uvalue); + goto reentry; + } + break; + } + case LUA_TLCL: { + linkgclist(gco2lcl(o), g->gray); + break; + } + case LUA_TCCL: { + linkgclist(gco2ccl(o), g->gray); + break; + } + case LUA_TTABLE: { + linkgclist(gco2t(o), g->gray); + break; + } + case LUA_TTHREAD: { + linkgclist(gco2th(o), g->gray); + break; + } + case LUA_TPROTO: { + linkgclist(gco2p(o), g->gray); + break; + } + default: lua_assert(0); break; + } +} + + +/* +** mark metamethods for basic types +*/ +static void markmt (global_State *g) { + int i; + for (i=0; i < LUA_NUMTAGS; i++) + markobjectN(g, g->mt[i]); +} + + +/* +** mark all objects in list of being-finalized +*/ +static void markbeingfnz (global_State *g) { + GCObject *o; + for (o = g->tobefnz; o != NULL; o = o->next) + markobject(g, o); +} + + +/* +** Mark all values stored in marked open upvalues from non-marked threads. +** (Values from marked threads were already marked when traversing the +** thread.) Remove from the list threads that no longer have upvalues and +** not-marked threads. +*/ +static void remarkupvals (global_State *g) { + lua_State *thread; + lua_State **p = &g->twups; + while ((thread = *p) != NULL) { + lua_assert(!isblack(thread)); /* threads are never black */ + if (isgray(thread) && thread->openupval != NULL) + p = &thread->twups; /* keep marked thread with upvalues in the list */ + else { /* thread is not marked or without upvalues */ + UpVal *uv; + *p = thread->twups; /* remove thread from the list */ + thread->twups = thread; /* mark that it is out of list */ + for (uv = thread->openupval; uv != NULL; uv = uv->u.open.next) { + if (uv->u.open.touched) { + markvalue(g, uv->v); /* remark upvalue's value */ + uv->u.open.touched = 0; + } + } + } + } +} + + +/* +** mark root set and reset all gray lists, to start a new collection +*/ +static void restartcollection (global_State *g) { + g->gray = g->grayagain = NULL; + g->weak = g->allweak = g->ephemeron = NULL; + markobject(g, g->mainthread); + markvalue(g, &g->l_registry); + markmt(g); + markbeingfnz(g); /* mark any finalizing object left from previous cycle */ +} + +/* }====================================================== */ + + +/* +** {====================================================== +** Traverse functions +** ======================================================= +*/ + +/* +** Traverse a table with weak values and link it to proper list. During +** propagate phase, keep it in 'grayagain' list, to be revisited in the +** atomic phase. In the atomic phase, if table has any white value, +** put it in 'weak' list, to be cleared. +*/ +static void traverseweakvalue (global_State *g, Table *h) { + Node *n, *limit = gnodelast(h); + /* if there is array part, assume it may have white values (it is not + worth traversing it now just to check) */ + int hasclears = (h->sizearray > 0); + for (n = gnode(h, 0); n < limit; n++) { /* traverse hash part */ + checkdeadkey(n); + if (ttisnil(gval(n))) /* entry is empty? */ + removeentry(n); /* remove it */ + else { + lua_assert(!ttisnil(gkey(n))); + markvalue(g, gkey(n)); /* mark key */ + if (!hasclears && iscleared(g, gval(n))) /* is there a white value? */ + hasclears = 1; /* table will have to be cleared */ + } + } + if (g->gcstate == GCSpropagate) + linkgclist(h, g->grayagain); /* must retraverse it in atomic phase */ + else if (hasclears) + linkgclist(h, g->weak); /* has to be cleared later */ +} + + +/* +** Traverse an ephemeron table and link it to proper list. Returns true +** iff any object was marked during this traversal (which implies that +** convergence has to continue). During propagation phase, keep table +** in 'grayagain' list, to be visited again in the atomic phase. In +** the atomic phase, if table has any white->white entry, it has to +** be revisited during ephemeron convergence (as that key may turn +** black). Otherwise, if it has any white key, table has to be cleared +** (in the atomic phase). +*/ +static int traverseephemeron (global_State *g, Table *h) { + int marked = 0; /* true if an object is marked in this traversal */ + int hasclears = 0; /* true if table has white keys */ + int hasww = 0; /* true if table has entry "white-key -> white-value" */ + Node *n, *limit = gnodelast(h); + unsigned int i; + /* traverse array part */ + for (i = 0; i < h->sizearray; i++) { + if (valiswhite(&h->array[i])) { + marked = 1; + reallymarkobject(g, gcvalue(&h->array[i])); + } + } + /* traverse hash part */ + for (n = gnode(h, 0); n < limit; n++) { + checkdeadkey(n); + if (ttisnil(gval(n))) /* entry is empty? */ + removeentry(n); /* remove it */ + else if (iscleared(g, gkey(n))) { /* key is not marked (yet)? */ + hasclears = 1; /* table must be cleared */ + if (valiswhite(gval(n))) /* value not marked yet? */ + hasww = 1; /* white-white entry */ + } + else if (valiswhite(gval(n))) { /* value not marked yet? */ + marked = 1; + reallymarkobject(g, gcvalue(gval(n))); /* mark it now */ + } + } + /* link table into proper list */ + if (g->gcstate == GCSpropagate) + linkgclist(h, g->grayagain); /* must retraverse it in atomic phase */ + else if (hasww) /* table has white->white entries? */ + linkgclist(h, g->ephemeron); /* have to propagate again */ + else if (hasclears) /* table has white keys? */ + linkgclist(h, g->allweak); /* may have to clean white keys */ + return marked; +} + + +static void traversestrongtable (global_State *g, Table *h) { + Node *n, *limit = gnodelast(h); + unsigned int i; + for (i = 0; i < h->sizearray; i++) /* traverse array part */ + markvalue(g, &h->array[i]); + for (n = gnode(h, 0); n < limit; n++) { /* traverse hash part */ + checkdeadkey(n); + if (ttisnil(gval(n))) /* entry is empty? */ + removeentry(n); /* remove it */ + else { + lua_assert(!ttisnil(gkey(n))); + markvalue(g, gkey(n)); /* mark key */ + markvalue(g, gval(n)); /* mark value */ + } + } +} + + +static lu_mem traversetable (global_State *g, Table *h) { + const char *weakkey, *weakvalue; + const TValue *mode = gfasttm(g, h->metatable, TM_MODE); + markobjectN(g, h->metatable); + if (mode && ttisstring(mode) && /* is there a weak mode? */ + ((weakkey = strchr(svalue(mode), 'k')), + (weakvalue = strchr(svalue(mode), 'v')), + (weakkey || weakvalue))) { /* is really weak? */ + black2gray(h); /* keep table gray */ + if (!weakkey) /* strong keys? */ + traverseweakvalue(g, h); + else if (!weakvalue) /* strong values? */ + traverseephemeron(g, h); + else /* all weak */ + linkgclist(h, g->allweak); /* nothing to traverse now */ + } + else /* not weak */ + traversestrongtable(g, h); + return sizeof(Table) + sizeof(TValue) * h->sizearray + + sizeof(Node) * cast(size_t, allocsizenode(h)); +} + + +/* +** Traverse a prototype. (While a prototype is being build, its +** arrays can be larger than needed; the extra slots are filled with +** NULL, so the use of 'markobjectN') +*/ +static int traverseproto (global_State *g, Proto *f) { + int i; + if (f->cache && iswhite(f->cache)) + f->cache = NULL; /* allow cache to be collected */ + markobjectN(g, f->source); + for (i = 0; i < f->sizek; i++) /* mark literals */ + markvalue(g, &f->k[i]); + for (i = 0; i < f->sizeupvalues; i++) /* mark upvalue names */ + markobjectN(g, f->upvalues[i].name); + for (i = 0; i < f->sizep; i++) /* mark nested protos */ + markobjectN(g, f->p[i]); + for (i = 0; i < f->sizelocvars; i++) /* mark local-variable names */ + markobjectN(g, f->locvars[i].varname); + return sizeof(Proto) + sizeof(Instruction) * f->sizecode + + sizeof(Proto *) * f->sizep + + sizeof(TValue) * f->sizek + + sizeof(int) * f->sizelineinfo + + sizeof(LocVar) * f->sizelocvars + + sizeof(Upvaldesc) * f->sizeupvalues; +} + + +static lu_mem traverseCclosure (global_State *g, CClosure *cl) { + int i; + for (i = 0; i < cl->nupvalues; i++) /* mark its upvalues */ + markvalue(g, &cl->upvalue[i]); + return sizeCclosure(cl->nupvalues); +} + +/* +** open upvalues point to values in a thread, so those values should +** be marked when the thread is traversed except in the atomic phase +** (because then the value cannot be changed by the thread and the +** thread may not be traversed again) +*/ +static lu_mem traverseLclosure (global_State *g, LClosure *cl) { + int i; + markobjectN(g, cl->p); /* mark its prototype */ + for (i = 0; i < cl->nupvalues; i++) { /* mark its upvalues */ + UpVal *uv = cl->upvals[i]; + if (uv != NULL) { + if (upisopen(uv) && g->gcstate != GCSinsideatomic) + uv->u.open.touched = 1; /* can be marked in 'remarkupvals' */ + else + markvalue(g, uv->v); + } + } + return sizeLclosure(cl->nupvalues); +} + + +static lu_mem traversethread (global_State *g, lua_State *th) { + StkId o = th->stack; + if (o == NULL) + return 1; /* stack not completely built yet */ + lua_assert(g->gcstate == GCSinsideatomic || + th->openupval == NULL || isintwups(th)); + for (; o < th->top; o++) /* mark live elements in the stack */ + markvalue(g, o); + if (g->gcstate == GCSinsideatomic) { /* final traversal? */ + StkId lim = th->stack + th->stacksize; /* real end of stack */ + for (; o < lim; o++) /* clear not-marked stack slice */ + setnilvalue(o); + /* 'remarkupvals' may have removed thread from 'twups' list */ + if (!isintwups(th) && th->openupval != NULL) { + th->twups = g->twups; /* link it back to the list */ + g->twups = th; + } + } + else if (g->gckind != KGC_EMERGENCY) + luaD_shrinkstack(th); /* do not change stack in emergency cycle */ + return (sizeof(lua_State) + sizeof(TValue) * th->stacksize + + sizeof(CallInfo) * th->nci); +} + + +/* +** traverse one gray object, turning it to black (except for threads, +** which are always gray). +*/ +static void propagatemark (global_State *g) { + lu_mem size; + GCObject *o = g->gray; + lua_assert(isgray(o)); + gray2black(o); + switch (o->tt) { + case LUA_TTABLE: { + Table *h = gco2t(o); + g->gray = h->gclist; /* remove from 'gray' list */ + size = traversetable(g, h); + break; + } + case LUA_TLCL: { + LClosure *cl = gco2lcl(o); + g->gray = cl->gclist; /* remove from 'gray' list */ + size = traverseLclosure(g, cl); + break; + } + case LUA_TCCL: { + CClosure *cl = gco2ccl(o); + g->gray = cl->gclist; /* remove from 'gray' list */ + size = traverseCclosure(g, cl); + break; + } + case LUA_TTHREAD: { + lua_State *th = gco2th(o); + g->gray = th->gclist; /* remove from 'gray' list */ + linkgclist(th, g->grayagain); /* insert into 'grayagain' list */ + black2gray(o); + size = traversethread(g, th); + break; + } + case LUA_TPROTO: { + Proto *p = gco2p(o); + g->gray = p->gclist; /* remove from 'gray' list */ + size = traverseproto(g, p); + break; + } + default: lua_assert(0); return; + } + g->GCmemtrav += size; +} + + +static void propagateall (global_State *g) { + while (g->gray) propagatemark(g); +} + + +static void convergeephemerons (global_State *g) { + int changed; + do { + GCObject *w; + GCObject *next = g->ephemeron; /* get ephemeron list */ + g->ephemeron = NULL; /* tables may return to this list when traversed */ + changed = 0; + while ((w = next) != NULL) { + next = gco2t(w)->gclist; + if (traverseephemeron(g, gco2t(w))) { /* traverse marked some value? */ + propagateall(g); /* propagate changes */ + changed = 1; /* will have to revisit all ephemeron tables */ + } + } + } while (changed); +} + +/* }====================================================== */ + + +/* +** {====================================================== +** Sweep Functions +** ======================================================= +*/ + + +/* +** clear entries with unmarked keys from all weaktables in list 'l' up +** to element 'f' +*/ +static void clearkeys (global_State *g, GCObject *l, GCObject *f) { + for (; l != f; l = gco2t(l)->gclist) { + Table *h = gco2t(l); + Node *n, *limit = gnodelast(h); + for (n = gnode(h, 0); n < limit; n++) { + if (!ttisnil(gval(n)) && (iscleared(g, gkey(n)))) { + setnilvalue(gval(n)); /* remove value ... */ + removeentry(n); /* and remove entry from table */ + } + } + } +} + + +/* +** clear entries with unmarked values from all weaktables in list 'l' up +** to element 'f' +*/ +static void clearvalues (global_State *g, GCObject *l, GCObject *f) { + for (; l != f; l = gco2t(l)->gclist) { + Table *h = gco2t(l); + Node *n, *limit = gnodelast(h); + unsigned int i; + for (i = 0; i < h->sizearray; i++) { + TValue *o = &h->array[i]; + if (iscleared(g, o)) /* value was collected? */ + setnilvalue(o); /* remove value */ + } + for (n = gnode(h, 0); n < limit; n++) { + if (!ttisnil(gval(n)) && iscleared(g, gval(n))) { + setnilvalue(gval(n)); /* remove value ... */ + removeentry(n); /* and remove entry from table */ + } + } + } +} + + +void luaC_upvdeccount (lua_State *L, UpVal *uv) { + lua_assert(uv->refcount > 0); + uv->refcount--; + if (uv->refcount == 0 && !upisopen(uv)) + luaM_free(L, uv); +} + + +static void freeLclosure (lua_State *L, LClosure *cl) { + int i; + for (i = 0; i < cl->nupvalues; i++) { + UpVal *uv = cl->upvals[i]; + if (uv) + luaC_upvdeccount(L, uv); + } + luaM_freemem(L, cl, sizeLclosure(cl->nupvalues)); +} + + +static void freeobj (lua_State *L, GCObject *o) { + switch (o->tt) { + case LUA_TPROTO: luaF_freeproto(L, gco2p(o)); break; + case LUA_TLCL: { + freeLclosure(L, gco2lcl(o)); + break; + } + case LUA_TCCL: { + luaM_freemem(L, o, sizeCclosure(gco2ccl(o)->nupvalues)); + break; + } + case LUA_TTABLE: luaH_free(L, gco2t(o)); break; + case LUA_TTHREAD: luaE_freethread(L, gco2th(o)); break; + case LUA_TUSERDATA: luaM_freemem(L, o, sizeudata(gco2u(o))); break; + case LUA_TSHRSTR: + luaS_remove(L, gco2ts(o)); /* remove it from hash table */ + luaM_freemem(L, o, sizelstring(gco2ts(o)->shrlen)); + break; + case LUA_TLNGSTR: { + luaM_freemem(L, o, sizelstring(gco2ts(o)->u.lnglen)); + break; + } + default: lua_assert(0); + } +} + + +#define sweepwholelist(L,p) sweeplist(L,p,MAX_LUMEM) +static GCObject **sweeplist (lua_State *L, GCObject **p, lu_mem count); + + +/* +** sweep at most 'count' elements from a list of GCObjects erasing dead +** objects, where a dead object is one marked with the old (non current) +** white; change all non-dead objects back to white, preparing for next +** collection cycle. Return where to continue the traversal or NULL if +** list is finished. +*/ +static GCObject **sweeplist (lua_State *L, GCObject **p, lu_mem count) { + global_State *g = G(L); + int ow = otherwhite(g); + int white = luaC_white(g); /* current white */ + while (*p != NULL && count-- > 0) { + GCObject *curr = *p; + int marked = curr->marked; + if (isdeadm(ow, marked)) { /* is 'curr' dead? */ + *p = curr->next; /* remove 'curr' from list */ + freeobj(L, curr); /* erase 'curr' */ + } + else { /* change mark to 'white' */ + curr->marked = cast_byte((marked & maskcolors) | white); + p = &curr->next; /* go to next element */ + } + } + return (*p == NULL) ? NULL : p; +} + + +/* +** sweep a list until a live object (or end of list) +*/ +static GCObject **sweeptolive (lua_State *L, GCObject **p) { + GCObject **old = p; + do { + p = sweeplist(L, p, 1); + } while (p == old); + return p; +} + +/* }====================================================== */ + + +/* +** {====================================================== +** Finalization +** ======================================================= +*/ + +/* +** If possible, shrink string table +*/ +static void checkSizes (lua_State *L, global_State *g) { + if (g->gckind != KGC_EMERGENCY) { + l_mem olddebt = g->GCdebt; + if (g->strt.nuse < g->strt.size / 4) /* string table too big? */ + luaS_resize(L, g->strt.size / 2); /* shrink it a little */ + g->GCestimate += g->GCdebt - olddebt; /* update estimate */ + } +} + + +static GCObject *udata2finalize (global_State *g) { + GCObject *o = g->tobefnz; /* get first element */ + lua_assert(tofinalize(o)); + g->tobefnz = o->next; /* remove it from 'tobefnz' list */ + o->next = g->allgc; /* return it to 'allgc' list */ + g->allgc = o; + resetbit(o->marked, FINALIZEDBIT); /* object is "normal" again */ + if (issweepphase(g)) + makewhite(g, o); /* "sweep" object */ + return o; +} + + +static void dothecall (lua_State *L, void *ud) { + UNUSED(ud); + luaD_callnoyield(L, L->top - 2, 0); +} + + +static void GCTM (lua_State *L, int propagateerrors) { + global_State *g = G(L); + const TValue *tm; + TValue v; + setgcovalue(L, &v, udata2finalize(g)); + tm = luaT_gettmbyobj(L, &v, TM_GC); + if (tm != NULL && ttisfunction(tm)) { /* is there a finalizer? */ + int status; + lu_byte oldah = L->allowhook; + int running = g->gcrunning; + L->allowhook = 0; /* stop debug hooks during GC metamethod */ + g->gcrunning = 0; /* avoid GC steps */ + setobj2s(L, L->top, tm); /* push finalizer... */ + setobj2s(L, L->top + 1, &v); /* ... and its argument */ + L->top += 2; /* and (next line) call the finalizer */ + L->ci->callstatus |= CIST_FIN; /* will run a finalizer */ + status = luaD_pcall(L, dothecall, NULL, savestack(L, L->top - 2), 0); + L->ci->callstatus &= ~CIST_FIN; /* not running a finalizer anymore */ + L->allowhook = oldah; /* restore hooks */ + g->gcrunning = running; /* restore state */ + if (status != LUA_OK && propagateerrors) { /* error while running __gc? */ + if (status == LUA_ERRRUN) { /* is there an error object? */ + const char *msg = (ttisstring(L->top - 1)) + ? svalue(L->top - 1) + : "no message"; + luaO_pushfstring(L, "error in __gc metamethod (%s)", msg); + status = LUA_ERRGCMM; /* error in __gc metamethod */ + } + luaD_throw(L, status); /* re-throw error */ + } + } +} + + +/* +** call a few (up to 'g->gcfinnum') finalizers +*/ +static int runafewfinalizers (lua_State *L) { + global_State *g = G(L); + unsigned int i; + lua_assert(!g->tobefnz || g->gcfinnum > 0); + for (i = 0; g->tobefnz && i < g->gcfinnum; i++) + GCTM(L, 1); /* call one finalizer */ + g->gcfinnum = (!g->tobefnz) ? 0 /* nothing more to finalize? */ + : g->gcfinnum * 2; /* else call a few more next time */ + return i; +} + + +/* +** call all pending finalizers +*/ +static void callallpendingfinalizers (lua_State *L) { + global_State *g = G(L); + while (g->tobefnz) + GCTM(L, 0); +} + + +/* +** find last 'next' field in list 'p' list (to add elements in its end) +*/ +static GCObject **findlast (GCObject **p) { + while (*p != NULL) + p = &(*p)->next; + return p; +} + + +/* +** move all unreachable objects (or 'all' objects) that need +** finalization from list 'finobj' to list 'tobefnz' (to be finalized) +*/ +static void separatetobefnz (global_State *g, int all) { + GCObject *curr; + GCObject **p = &g->finobj; + GCObject **lastnext = findlast(&g->tobefnz); + while ((curr = *p) != NULL) { /* traverse all finalizable objects */ + lua_assert(tofinalize(curr)); + if (!(iswhite(curr) || all)) /* not being collected? */ + p = &curr->next; /* don't bother with it */ + else { + *p = curr->next; /* remove 'curr' from 'finobj' list */ + curr->next = *lastnext; /* link at the end of 'tobefnz' list */ + *lastnext = curr; + lastnext = &curr->next; + } + } +} + + +/* +** if object 'o' has a finalizer, remove it from 'allgc' list (must +** search the list to find it) and link it in 'finobj' list. +*/ +void luaC_checkfinalizer (lua_State *L, GCObject *o, Table *mt) { + global_State *g = G(L); + if (tofinalize(o) || /* obj. is already marked... */ + gfasttm(g, mt, TM_GC) == NULL) /* or has no finalizer? */ + return; /* nothing to be done */ + else { /* move 'o' to 'finobj' list */ + GCObject **p; + if (issweepphase(g)) { + makewhite(g, o); /* "sweep" object 'o' */ + if (g->sweepgc == &o->next) /* should not remove 'sweepgc' object */ + g->sweepgc = sweeptolive(L, g->sweepgc); /* change 'sweepgc' */ + } + /* search for pointer pointing to 'o' */ + for (p = &g->allgc; *p != o; p = &(*p)->next) { /* empty */ } + *p = o->next; /* remove 'o' from 'allgc' list */ + o->next = g->finobj; /* link it in 'finobj' list */ + g->finobj = o; + l_setbit(o->marked, FINALIZEDBIT); /* mark it as such */ + } +} + +/* }====================================================== */ + + + +/* +** {====================================================== +** GC control +** ======================================================= +*/ + + +/* +** Set a reasonable "time" to wait before starting a new GC cycle; cycle +** will start when memory use hits threshold. (Division by 'estimate' +** should be OK: it cannot be zero (because Lua cannot even start with +** less than PAUSEADJ bytes). +*/ +static void setpause (global_State *g) { + l_mem threshold, debt; + l_mem estimate = g->GCestimate / PAUSEADJ; /* adjust 'estimate' */ + lua_assert(estimate > 0); + threshold = (g->gcpause < MAX_LMEM / estimate) /* overflow? */ + ? estimate * g->gcpause /* no overflow */ + : MAX_LMEM; /* overflow; truncate to maximum */ + debt = gettotalbytes(g) - threshold; + luaE_setdebt(g, debt); +} + + +/* +** Enter first sweep phase. +** The call to 'sweeplist' tries to make pointer point to an object +** inside the list (instead of to the header), so that the real sweep do +** not need to skip objects created between "now" and the start of the +** real sweep. +*/ +static void entersweep (lua_State *L) { + global_State *g = G(L); + g->gcstate = GCSswpallgc; + lua_assert(g->sweepgc == NULL); + g->sweepgc = sweeplist(L, &g->allgc, 1); +} + + +void luaC_freeallobjects (lua_State *L) { + global_State *g = G(L); + separatetobefnz(g, 1); /* separate all objects with finalizers */ + lua_assert(g->finobj == NULL); + callallpendingfinalizers(L); + lua_assert(g->tobefnz == NULL); + g->currentwhite = WHITEBITS; /* this "white" makes all objects look dead */ + g->gckind = KGC_NORMAL; + sweepwholelist(L, &g->finobj); + sweepwholelist(L, &g->allgc); + sweepwholelist(L, &g->fixedgc); /* collect fixed objects */ + lua_assert(g->strt.nuse == 0); +} + + +static l_mem atomic (lua_State *L) { + global_State *g = G(L); + l_mem work; + GCObject *origweak, *origall; + GCObject *grayagain = g->grayagain; /* save original list */ + lua_assert(g->ephemeron == NULL && g->weak == NULL); + lua_assert(!iswhite(g->mainthread)); + g->gcstate = GCSinsideatomic; + g->GCmemtrav = 0; /* start counting work */ + markobject(g, L); /* mark running thread */ + /* registry and global metatables may be changed by API */ + markvalue(g, &g->l_registry); + markmt(g); /* mark global metatables */ + /* remark occasional upvalues of (maybe) dead threads */ + remarkupvals(g); + propagateall(g); /* propagate changes */ + work = g->GCmemtrav; /* stop counting (do not recount 'grayagain') */ + g->gray = grayagain; + propagateall(g); /* traverse 'grayagain' list */ + g->GCmemtrav = 0; /* restart counting */ + convergeephemerons(g); + /* at this point, all strongly accessible objects are marked. */ + /* Clear values from weak tables, before checking finalizers */ + clearvalues(g, g->weak, NULL); + clearvalues(g, g->allweak, NULL); + origweak = g->weak; origall = g->allweak; + work += g->GCmemtrav; /* stop counting (objects being finalized) */ + separatetobefnz(g, 0); /* separate objects to be finalized */ + g->gcfinnum = 1; /* there may be objects to be finalized */ + markbeingfnz(g); /* mark objects that will be finalized */ + propagateall(g); /* remark, to propagate 'resurrection' */ + g->GCmemtrav = 0; /* restart counting */ + convergeephemerons(g); + /* at this point, all resurrected objects are marked. */ + /* remove dead objects from weak tables */ + clearkeys(g, g->ephemeron, NULL); /* clear keys from all ephemeron tables */ + clearkeys(g, g->allweak, NULL); /* clear keys from all 'allweak' tables */ + /* clear values from resurrected weak tables */ + clearvalues(g, g->weak, origweak); + clearvalues(g, g->allweak, origall); + luaS_clearcache(g); + g->currentwhite = cast_byte(otherwhite(g)); /* flip current white */ + work += g->GCmemtrav; /* complete counting */ + return work; /* estimate of memory marked by 'atomic' */ +} + + +static lu_mem sweepstep (lua_State *L, global_State *g, + int nextstate, GCObject **nextlist) { + if (g->sweepgc) { + l_mem olddebt = g->GCdebt; + g->sweepgc = sweeplist(L, g->sweepgc, GCSWEEPMAX); + g->GCestimate += g->GCdebt - olddebt; /* update estimate */ + if (g->sweepgc) /* is there still something to sweep? */ + return (GCSWEEPMAX * GCSWEEPCOST); + } + /* else enter next state */ + g->gcstate = nextstate; + g->sweepgc = nextlist; + return 0; +} + + +static lu_mem singlestep (lua_State *L) { + global_State *g = G(L); + switch (g->gcstate) { + case GCSpause: { + g->GCmemtrav = g->strt.size * sizeof(GCObject*); + restartcollection(g); + g->gcstate = GCSpropagate; + return g->GCmemtrav; + } + case GCSpropagate: { + g->GCmemtrav = 0; + lua_assert(g->gray); + propagatemark(g); + if (g->gray == NULL) /* no more gray objects? */ + g->gcstate = GCSatomic; /* finish propagate phase */ + return g->GCmemtrav; /* memory traversed in this step */ + } + case GCSatomic: { + lu_mem work; + propagateall(g); /* make sure gray list is empty */ + work = atomic(L); /* work is what was traversed by 'atomic' */ + entersweep(L); + g->GCestimate = gettotalbytes(g); /* first estimate */; + return work; + } + case GCSswpallgc: { /* sweep "regular" objects */ + return sweepstep(L, g, GCSswpfinobj, &g->finobj); + } + case GCSswpfinobj: { /* sweep objects with finalizers */ + return sweepstep(L, g, GCSswptobefnz, &g->tobefnz); + } + case GCSswptobefnz: { /* sweep objects to be finalized */ + return sweepstep(L, g, GCSswpend, NULL); + } + case GCSswpend: { /* finish sweeps */ + makewhite(g, g->mainthread); /* sweep main thread */ + checkSizes(L, g); + g->gcstate = GCScallfin; + return 0; + } + case GCScallfin: { /* call remaining finalizers */ + if (g->tobefnz && g->gckind != KGC_EMERGENCY) { + int n = runafewfinalizers(L); + return (n * GCFINALIZECOST); + } + else { /* emergency mode or no more finalizers */ + g->gcstate = GCSpause; /* finish collection */ + return 0; + } + } + default: lua_assert(0); return 0; + } +} + + +/* +** advances the garbage collector until it reaches a state allowed +** by 'statemask' +*/ +void luaC_runtilstate (lua_State *L, int statesmask) { + global_State *g = G(L); + while (!testbit(statesmask, g->gcstate)) + singlestep(L); +} + + +/* +** get GC debt and convert it from Kb to 'work units' (avoid zero debt +** and overflows) +*/ +static l_mem getdebt (global_State *g) { + l_mem debt = g->GCdebt; + int stepmul = g->gcstepmul; + if (debt <= 0) return 0; /* minimal debt */ + else { + debt = (debt / STEPMULADJ) + 1; + debt = (debt < MAX_LMEM / stepmul) ? debt * stepmul : MAX_LMEM; + return debt; + } +} + +/* +** performs a basic GC step when collector is running +*/ +void luaC_step (lua_State *L) { + global_State *g = G(L); + l_mem debt = getdebt(g); /* GC deficit (be paid now) */ + if (!g->gcrunning) { /* not running? */ + luaE_setdebt(g, -GCSTEPSIZE * 10); /* avoid being called too often */ + return; + } + do { /* repeat until pause or enough "credit" (negative debt) */ + lu_mem work = singlestep(L); /* perform one single step */ + debt -= work; + } while (debt > -GCSTEPSIZE && g->gcstate != GCSpause); + if (g->gcstate == GCSpause) + setpause(g); /* pause until next cycle */ + else { + debt = (debt / g->gcstepmul) * STEPMULADJ; /* convert 'work units' to Kb */ + luaE_setdebt(g, debt); + runafewfinalizers(L); + } +} + + +/* +** Performs a full GC cycle; if 'isemergency', set a flag to avoid +** some operations which could change the interpreter state in some +** unexpected ways (running finalizers and shrinking some structures). +** Before running the collection, check 'keepinvariant'; if it is true, +** there may be some objects marked as black, so the collector has +** to sweep all objects to turn them back to white (as white has not +** changed, nothing will be collected). +*/ +void luaC_fullgc (lua_State *L, int isemergency) { + global_State *g = G(L); + lua_assert(g->gckind == KGC_NORMAL); + if (isemergency) g->gckind = KGC_EMERGENCY; /* set flag */ + if (keepinvariant(g)) { /* black objects? */ + entersweep(L); /* sweep everything to turn them back to white */ + } + /* finish any pending sweep phase to start a new cycle */ + luaC_runtilstate(L, bitmask(GCSpause)); + luaC_runtilstate(L, ~bitmask(GCSpause)); /* start new collection */ + luaC_runtilstate(L, bitmask(GCScallfin)); /* run up to finalizers */ + /* estimate must be correct after a full GC cycle */ + lua_assert(g->GCestimate == gettotalbytes(g)); + luaC_runtilstate(L, bitmask(GCSpause)); /* finish collection */ + g->gckind = KGC_NORMAL; + setpause(g); +} + +/* }====================================================== */ + + diff --git a/EQ2/source/LUA/lgc.h b/EQ2/source/LUA/lgc.h new file mode 100644 index 000000000..aed3e18a5 --- /dev/null +++ b/EQ2/source/LUA/lgc.h @@ -0,0 +1,147 @@ +/* +** $Id: lgc.h,v 2.91 2015/12/21 13:02:14 roberto Exp $ +** Garbage Collector +** See Copyright Notice in lua.h +*/ + +#ifndef lgc_h +#define lgc_h + + +#include "lobject.h" +#include "lstate.h" + +/* +** Collectable objects may have one of three colors: white, which +** means the object is not marked; gray, which means the +** object is marked, but its references may be not marked; and +** black, which means that the object and all its references are marked. +** The main invariant of the garbage collector, while marking objects, +** is that a black object can never point to a white one. Moreover, +** any gray object must be in a "gray list" (gray, grayagain, weak, +** allweak, ephemeron) so that it can be visited again before finishing +** the collection cycle. These lists have no meaning when the invariant +** is not being enforced (e.g., sweep phase). +*/ + + + +/* how much to allocate before next GC step */ +#if !defined(GCSTEPSIZE) +/* ~100 small strings */ +#define GCSTEPSIZE (cast_int(100 * sizeof(TString))) +#endif + + +/* +** Possible states of the Garbage Collector +*/ +#define GCSpropagate 0 +#define GCSatomic 1 +#define GCSswpallgc 2 +#define GCSswpfinobj 3 +#define GCSswptobefnz 4 +#define GCSswpend 5 +#define GCScallfin 6 +#define GCSpause 7 + + +#define issweepphase(g) \ + (GCSswpallgc <= (g)->gcstate && (g)->gcstate <= GCSswpend) + + +/* +** macro to tell when main invariant (white objects cannot point to black +** ones) must be kept. During a collection, the sweep +** phase may break the invariant, as objects turned white may point to +** still-black objects. The invariant is restored when sweep ends and +** all objects are white again. +*/ + +#define keepinvariant(g) ((g)->gcstate <= GCSatomic) + + +/* +** some useful bit tricks +*/ +#define resetbits(x,m) ((x) &= cast(lu_byte, ~(m))) +#define setbits(x,m) ((x) |= (m)) +#define testbits(x,m) ((x) & (m)) +#define bitmask(b) (1<<(b)) +#define bit2mask(b1,b2) (bitmask(b1) | bitmask(b2)) +#define l_setbit(x,b) setbits(x, bitmask(b)) +#define resetbit(x,b) resetbits(x, bitmask(b)) +#define testbit(x,b) testbits(x, bitmask(b)) + + +/* Layout for bit use in 'marked' field: */ +#define WHITE0BIT 0 /* object is white (type 0) */ +#define WHITE1BIT 1 /* object is white (type 1) */ +#define BLACKBIT 2 /* object is black */ +#define FINALIZEDBIT 3 /* object has been marked for finalization */ +/* bit 7 is currently used by tests (luaL_checkmemory) */ + +#define WHITEBITS bit2mask(WHITE0BIT, WHITE1BIT) + + +#define iswhite(x) testbits((x)->marked, WHITEBITS) +#define isblack(x) testbit((x)->marked, BLACKBIT) +#define isgray(x) /* neither white nor black */ \ + (!testbits((x)->marked, WHITEBITS | bitmask(BLACKBIT))) + +#define tofinalize(x) testbit((x)->marked, FINALIZEDBIT) + +#define otherwhite(g) ((g)->currentwhite ^ WHITEBITS) +#define isdeadm(ow,m) (!(((m) ^ WHITEBITS) & (ow))) +#define isdead(g,v) isdeadm(otherwhite(g), (v)->marked) + +#define changewhite(x) ((x)->marked ^= WHITEBITS) +#define gray2black(x) l_setbit((x)->marked, BLACKBIT) + +#define luaC_white(g) cast(lu_byte, (g)->currentwhite & WHITEBITS) + + +/* +** Does one step of collection when debt becomes positive. 'pre'/'pos' +** allows some adjustments to be done only when needed. macro +** 'condchangemem' is used only for heavy tests (forcing a full +** GC cycle on every opportunity) +*/ +#define luaC_condGC(L,pre,pos) \ + { if (G(L)->GCdebt > 0) { pre; luaC_step(L); pos;}; \ + condchangemem(L,pre,pos); } + +/* more often than not, 'pre'/'pos' are empty */ +#define luaC_checkGC(L) luaC_condGC(L,(void)0,(void)0) + + +#define luaC_barrier(L,p,v) ( \ + (iscollectable(v) && isblack(p) && iswhite(gcvalue(v))) ? \ + luaC_barrier_(L,obj2gco(p),gcvalue(v)) : cast_void(0)) + +#define luaC_barrierback(L,p,v) ( \ + (iscollectable(v) && isblack(p) && iswhite(gcvalue(v))) ? \ + luaC_barrierback_(L,p) : cast_void(0)) + +#define luaC_objbarrier(L,p,o) ( \ + (isblack(p) && iswhite(o)) ? \ + luaC_barrier_(L,obj2gco(p),obj2gco(o)) : cast_void(0)) + +#define luaC_upvalbarrier(L,uv) ( \ + (iscollectable((uv)->v) && !upisopen(uv)) ? \ + luaC_upvalbarrier_(L,uv) : cast_void(0)) + +LUAI_FUNC void luaC_fix (lua_State *L, GCObject *o); +LUAI_FUNC void luaC_freeallobjects (lua_State *L); +LUAI_FUNC void luaC_step (lua_State *L); +LUAI_FUNC void luaC_runtilstate (lua_State *L, int statesmask); +LUAI_FUNC void luaC_fullgc (lua_State *L, int isemergency); +LUAI_FUNC GCObject *luaC_newobj (lua_State *L, int tt, size_t sz); +LUAI_FUNC void luaC_barrier_ (lua_State *L, GCObject *o, GCObject *v); +LUAI_FUNC void luaC_barrierback_ (lua_State *L, Table *o); +LUAI_FUNC void luaC_upvalbarrier_ (lua_State *L, UpVal *uv); +LUAI_FUNC void luaC_checkfinalizer (lua_State *L, GCObject *o, Table *mt); +LUAI_FUNC void luaC_upvdeccount (lua_State *L, UpVal *uv); + + +#endif diff --git a/EQ2/source/LUA/linit.c b/EQ2/source/LUA/linit.c new file mode 100644 index 000000000..afcaf98b2 --- /dev/null +++ b/EQ2/source/LUA/linit.c @@ -0,0 +1,68 @@ +/* +** $Id: linit.c,v 1.39 2016/12/04 20:17:24 roberto Exp $ +** Initialization of libraries for lua.c and other clients +** See Copyright Notice in lua.h +*/ + + +#define linit_c +#define LUA_LIB + +/* +** If you embed Lua in your program and need to open the standard +** libraries, call luaL_openlibs in your program. If you need a +** different set of libraries, copy this file to your project and edit +** it to suit your needs. +** +** You can also *preload* libraries, so that a later 'require' can +** open the library, which is already linked to the application. +** For that, do the following code: +** +** luaL_getsubtable(L, LUA_REGISTRYINDEX, LUA_PRELOAD_TABLE); +** lua_pushcfunction(L, luaopen_modname); +** lua_setfield(L, -2, modname); +** lua_pop(L, 1); // remove PRELOAD table +*/ + +#include "lprefix.h" + + +#include + +#include "lua.h" + +#include "lualib.h" +#include "lauxlib.h" + + +/* +** these libs are loaded by lua.c and are readily available to any Lua +** program +*/ +static const luaL_Reg loadedlibs[] = { + {"_G", luaopen_base}, + {LUA_LOADLIBNAME, luaopen_package}, + {LUA_COLIBNAME, luaopen_coroutine}, + {LUA_TABLIBNAME, luaopen_table}, + {LUA_IOLIBNAME, luaopen_io}, + {LUA_OSLIBNAME, luaopen_os}, + {LUA_STRLIBNAME, luaopen_string}, + {LUA_MATHLIBNAME, luaopen_math}, + {LUA_UTF8LIBNAME, luaopen_utf8}, + {LUA_DBLIBNAME, luaopen_debug}, +#if defined(LUA_COMPAT_BITLIB) + {LUA_BITLIBNAME, luaopen_bit32}, +#endif + {NULL, NULL} +}; + + +LUALIB_API void luaL_openlibs (lua_State *L) { + const luaL_Reg *lib; + /* "require" functions from 'loadedlibs' and set results to global table */ + for (lib = loadedlibs; lib->func; lib++) { + luaL_requiref(L, lib->name, lib->func, 1); + lua_pop(L, 1); /* remove lib */ + } +} + diff --git a/EQ2/source/LUA/liolib.c b/EQ2/source/LUA/liolib.c new file mode 100644 index 000000000..156840358 --- /dev/null +++ b/EQ2/source/LUA/liolib.c @@ -0,0 +1,771 @@ +/* +** $Id: liolib.c,v 2.151 2016/12/20 18:37:00 roberto Exp $ +** Standard I/O (and system) library +** See Copyright Notice in lua.h +*/ + +#define liolib_c +#define LUA_LIB + +#include "lprefix.h" + + +#include +#include +#include +#include +#include +#include + +#include "lua.h" + +#include "lauxlib.h" +#include "lualib.h" + + + + +/* +** Change this macro to accept other modes for 'fopen' besides +** the standard ones. +*/ +#if !defined(l_checkmode) + +/* accepted extensions to 'mode' in 'fopen' */ +#if !defined(L_MODEEXT) +#define L_MODEEXT "b" +#endif + +/* Check whether 'mode' matches '[rwa]%+?[L_MODEEXT]*' */ +static int l_checkmode (const char *mode) { + return (*mode != '\0' && strchr("rwa", *(mode++)) != NULL && + (*mode != '+' || (++mode, 1)) && /* skip if char is '+' */ + (strspn(mode, L_MODEEXT) == strlen(mode))); /* check extensions */ +} + +#endif + +/* +** {====================================================== +** l_popen spawns a new process connected to the current +** one through the file streams. +** ======================================================= +*/ + +#if !defined(l_popen) /* { */ + +#if defined(LUA_USE_POSIX) /* { */ + +#define l_popen(L,c,m) (fflush(NULL), popen(c,m)) +#define l_pclose(L,file) (pclose(file)) + +#elif defined(LUA_USE_WINDOWS) /* }{ */ + +#define l_popen(L,c,m) (_popen(c,m)) +#define l_pclose(L,file) (_pclose(file)) + +#else /* }{ */ + +/* ISO C definitions */ +#define l_popen(L,c,m) \ + ((void)((void)c, m), \ + luaL_error(L, "'popen' not supported"), \ + (FILE*)0) +#define l_pclose(L,file) ((void)L, (void)file, -1) + +#endif /* } */ + +#endif /* } */ + +/* }====================================================== */ + + +#if !defined(l_getc) /* { */ + +#if defined(LUA_USE_POSIX) +#define l_getc(f) getc_unlocked(f) +#define l_lockfile(f) flockfile(f) +#define l_unlockfile(f) funlockfile(f) +#else +#define l_getc(f) getc(f) +#define l_lockfile(f) ((void)0) +#define l_unlockfile(f) ((void)0) +#endif + +#endif /* } */ + + +/* +** {====================================================== +** l_fseek: configuration for longer offsets +** ======================================================= +*/ + +#if !defined(l_fseek) /* { */ + +#if defined(LUA_USE_POSIX) /* { */ + +#include + +#define l_fseek(f,o,w) fseeko(f,o,w) +#define l_ftell(f) ftello(f) +#define l_seeknum off_t + +#elif defined(LUA_USE_WINDOWS) && !defined(_CRTIMP_TYPEINFO) \ + && defined(_MSC_VER) && (_MSC_VER >= 1400) /* }{ */ + +/* Windows (but not DDK) and Visual C++ 2005 or higher */ +#define l_fseek(f,o,w) _fseeki64(f,o,w) +#define l_ftell(f) _ftelli64(f) +#define l_seeknum __int64 + +#else /* }{ */ + +/* ISO C definitions */ +#define l_fseek(f,o,w) fseek(f,o,w) +#define l_ftell(f) ftell(f) +#define l_seeknum long + +#endif /* } */ + +#endif /* } */ + +/* }====================================================== */ + + +#define IO_PREFIX "_IO_" +#define IOPREF_LEN (sizeof(IO_PREFIX)/sizeof(char) - 1) +#define IO_INPUT (IO_PREFIX "input") +#define IO_OUTPUT (IO_PREFIX "output") + + +typedef luaL_Stream LStream; + + +#define tolstream(L) ((LStream *)luaL_checkudata(L, 1, LUA_FILEHANDLE)) + +#define isclosed(p) ((p)->closef == NULL) + + +static int io_type (lua_State *L) { + LStream *p; + luaL_checkany(L, 1); + p = (LStream *)luaL_testudata(L, 1, LUA_FILEHANDLE); + if (p == NULL) + lua_pushnil(L); /* not a file */ + else if (isclosed(p)) + lua_pushliteral(L, "closed file"); + else + lua_pushliteral(L, "file"); + return 1; +} + + +static int f_tostring (lua_State *L) { + LStream *p = tolstream(L); + if (isclosed(p)) + lua_pushliteral(L, "file (closed)"); + else + lua_pushfstring(L, "file (%p)", p->f); + return 1; +} + + +static FILE *tofile (lua_State *L) { + LStream *p = tolstream(L); + if (isclosed(p)) + luaL_error(L, "attempt to use a closed file"); + lua_assert(p->f); + return p->f; +} + + +/* +** When creating file handles, always creates a 'closed' file handle +** before opening the actual file; so, if there is a memory error, the +** handle is in a consistent state. +*/ +static LStream *newprefile (lua_State *L) { + LStream *p = (LStream *)lua_newuserdata(L, sizeof(LStream)); + p->closef = NULL; /* mark file handle as 'closed' */ + luaL_setmetatable(L, LUA_FILEHANDLE); + return p; +} + + +/* +** Calls the 'close' function from a file handle. The 'volatile' avoids +** a bug in some versions of the Clang compiler (e.g., clang 3.0 for +** 32 bits). +*/ +static int aux_close (lua_State *L) { + LStream *p = tolstream(L); + volatile lua_CFunction cf = p->closef; + p->closef = NULL; /* mark stream as closed */ + return (*cf)(L); /* close it */ +} + + +static int io_close (lua_State *L) { + if (lua_isnone(L, 1)) /* no argument? */ + lua_getfield(L, LUA_REGISTRYINDEX, IO_OUTPUT); /* use standard output */ + tofile(L); /* make sure argument is an open stream */ + return aux_close(L); +} + + +static int f_gc (lua_State *L) { + LStream *p = tolstream(L); + if (!isclosed(p) && p->f != NULL) + aux_close(L); /* ignore closed and incompletely open files */ + return 0; +} + + +/* +** function to close regular files +*/ +static int io_fclose (lua_State *L) { + LStream *p = tolstream(L); + int res = fclose(p->f); + return luaL_fileresult(L, (res == 0), NULL); +} + + +static LStream *newfile (lua_State *L) { + LStream *p = newprefile(L); + p->f = NULL; + p->closef = &io_fclose; + return p; +} + + +static void opencheck (lua_State *L, const char *fname, const char *mode) { + LStream *p = newfile(L); + p->f = fopen(fname, mode); + if (p->f == NULL) + luaL_error(L, "cannot open file '%s' (%s)", fname, strerror(errno)); +} + + +static int io_open (lua_State *L) { + const char *filename = luaL_checkstring(L, 1); + const char *mode = luaL_optstring(L, 2, "r"); + LStream *p = newfile(L); + const char *md = mode; /* to traverse/check mode */ + luaL_argcheck(L, l_checkmode(md), 2, "invalid mode"); + p->f = fopen(filename, mode); + return (p->f == NULL) ? luaL_fileresult(L, 0, filename) : 1; +} + + +/* +** function to close 'popen' files +*/ +static int io_pclose (lua_State *L) { + LStream *p = tolstream(L); + return luaL_execresult(L, l_pclose(L, p->f)); +} + + +static int io_popen (lua_State *L) { + const char *filename = luaL_checkstring(L, 1); + const char *mode = luaL_optstring(L, 2, "r"); + LStream *p = newprefile(L); + p->f = l_popen(L, filename, mode); + p->closef = &io_pclose; + return (p->f == NULL) ? luaL_fileresult(L, 0, filename) : 1; +} + + +static int io_tmpfile (lua_State *L) { + LStream *p = newfile(L); + p->f = tmpfile(); + return (p->f == NULL) ? luaL_fileresult(L, 0, NULL) : 1; +} + + +static FILE *getiofile (lua_State *L, const char *findex) { + LStream *p; + lua_getfield(L, LUA_REGISTRYINDEX, findex); + p = (LStream *)lua_touserdata(L, -1); + if (isclosed(p)) + luaL_error(L, "standard %s file is closed", findex + IOPREF_LEN); + return p->f; +} + + +static int g_iofile (lua_State *L, const char *f, const char *mode) { + if (!lua_isnoneornil(L, 1)) { + const char *filename = lua_tostring(L, 1); + if (filename) + opencheck(L, filename, mode); + else { + tofile(L); /* check that it's a valid file handle */ + lua_pushvalue(L, 1); + } + lua_setfield(L, LUA_REGISTRYINDEX, f); + } + /* return current value */ + lua_getfield(L, LUA_REGISTRYINDEX, f); + return 1; +} + + +static int io_input (lua_State *L) { + return g_iofile(L, IO_INPUT, "r"); +} + + +static int io_output (lua_State *L) { + return g_iofile(L, IO_OUTPUT, "w"); +} + + +static int io_readline (lua_State *L); + + +/* +** maximum number of arguments to 'f:lines'/'io.lines' (it + 3 must fit +** in the limit for upvalues of a closure) +*/ +#define MAXARGLINE 250 + +static void aux_lines (lua_State *L, int toclose) { + int n = lua_gettop(L) - 1; /* number of arguments to read */ + luaL_argcheck(L, n <= MAXARGLINE, MAXARGLINE + 2, "too many arguments"); + lua_pushinteger(L, n); /* number of arguments to read */ + lua_pushboolean(L, toclose); /* close/not close file when finished */ + lua_rotate(L, 2, 2); /* move 'n' and 'toclose' to their positions */ + lua_pushcclosure(L, io_readline, 3 + n); +} + + +static int f_lines (lua_State *L) { + tofile(L); /* check that it's a valid file handle */ + aux_lines(L, 0); + return 1; +} + + +static int io_lines (lua_State *L) { + int toclose; + if (lua_isnone(L, 1)) lua_pushnil(L); /* at least one argument */ + if (lua_isnil(L, 1)) { /* no file name? */ + lua_getfield(L, LUA_REGISTRYINDEX, IO_INPUT); /* get default input */ + lua_replace(L, 1); /* put it at index 1 */ + tofile(L); /* check that it's a valid file handle */ + toclose = 0; /* do not close it after iteration */ + } + else { /* open a new file */ + const char *filename = luaL_checkstring(L, 1); + opencheck(L, filename, "r"); + lua_replace(L, 1); /* put file at index 1 */ + toclose = 1; /* close it after iteration */ + } + aux_lines(L, toclose); + return 1; +} + + +/* +** {====================================================== +** READ +** ======================================================= +*/ + + +/* maximum length of a numeral */ +#if !defined (L_MAXLENNUM) +#define L_MAXLENNUM 200 +#endif + + +/* auxiliary structure used by 'read_number' */ +typedef struct { + FILE *f; /* file being read */ + int c; /* current character (look ahead) */ + int n; /* number of elements in buffer 'buff' */ + char buff[L_MAXLENNUM + 1]; /* +1 for ending '\0' */ +} RN; + + +/* +** Add current char to buffer (if not out of space) and read next one +*/ +static int nextc (RN *rn) { + if (rn->n >= L_MAXLENNUM) { /* buffer overflow? */ + rn->buff[0] = '\0'; /* invalidate result */ + return 0; /* fail */ + } + else { + rn->buff[rn->n++] = rn->c; /* save current char */ + rn->c = l_getc(rn->f); /* read next one */ + return 1; + } +} + + +/* +** Accept current char if it is in 'set' (of size 2) +*/ +static int test2 (RN *rn, const char *set) { + if (rn->c == set[0] || rn->c == set[1]) + return nextc(rn); + else return 0; +} + + +/* +** Read a sequence of (hex)digits +*/ +static int readdigits (RN *rn, int hex) { + int count = 0; + while ((hex ? isxdigit(rn->c) : isdigit(rn->c)) && nextc(rn)) + count++; + return count; +} + + +/* +** Read a number: first reads a valid prefix of a numeral into a buffer. +** Then it calls 'lua_stringtonumber' to check whether the format is +** correct and to convert it to a Lua number +*/ +static int read_number (lua_State *L, FILE *f) { + RN rn; + int count = 0; + int hex = 0; + char decp[2]; + rn.f = f; rn.n = 0; + decp[0] = lua_getlocaledecpoint(); /* get decimal point from locale */ + decp[1] = '.'; /* always accept a dot */ + l_lockfile(rn.f); + do { rn.c = l_getc(rn.f); } while (isspace(rn.c)); /* skip spaces */ + test2(&rn, "-+"); /* optional signal */ + if (test2(&rn, "00")) { + if (test2(&rn, "xX")) hex = 1; /* numeral is hexadecimal */ + else count = 1; /* count initial '0' as a valid digit */ + } + count += readdigits(&rn, hex); /* integral part */ + if (test2(&rn, decp)) /* decimal point? */ + count += readdigits(&rn, hex); /* fractional part */ + if (count > 0 && test2(&rn, (hex ? "pP" : "eE"))) { /* exponent mark? */ + test2(&rn, "-+"); /* exponent signal */ + readdigits(&rn, 0); /* exponent digits */ + } + ungetc(rn.c, rn.f); /* unread look-ahead char */ + l_unlockfile(rn.f); + rn.buff[rn.n] = '\0'; /* finish string */ + if (lua_stringtonumber(L, rn.buff)) /* is this a valid number? */ + return 1; /* ok */ + else { /* invalid format */ + lua_pushnil(L); /* "result" to be removed */ + return 0; /* read fails */ + } +} + + +static int test_eof (lua_State *L, FILE *f) { + int c = getc(f); + ungetc(c, f); /* no-op when c == EOF */ + lua_pushliteral(L, ""); + return (c != EOF); +} + + +static int read_line (lua_State *L, FILE *f, int chop) { + luaL_Buffer b; + int c = '\0'; + luaL_buffinit(L, &b); + while (c != EOF && c != '\n') { /* repeat until end of line */ + char *buff = luaL_prepbuffer(&b); /* preallocate buffer */ + int i = 0; + l_lockfile(f); /* no memory errors can happen inside the lock */ + while (i < LUAL_BUFFERSIZE && (c = l_getc(f)) != EOF && c != '\n') + buff[i++] = c; + l_unlockfile(f); + luaL_addsize(&b, i); + } + if (!chop && c == '\n') /* want a newline and have one? */ + luaL_addchar(&b, c); /* add ending newline to result */ + luaL_pushresult(&b); /* close buffer */ + /* return ok if read something (either a newline or something else) */ + return (c == '\n' || lua_rawlen(L, -1) > 0); +} + + +static void read_all (lua_State *L, FILE *f) { + size_t nr; + luaL_Buffer b; + luaL_buffinit(L, &b); + do { /* read file in chunks of LUAL_BUFFERSIZE bytes */ + char *p = luaL_prepbuffer(&b); + nr = fread(p, sizeof(char), LUAL_BUFFERSIZE, f); + luaL_addsize(&b, nr); + } while (nr == LUAL_BUFFERSIZE); + luaL_pushresult(&b); /* close buffer */ +} + + +static int read_chars (lua_State *L, FILE *f, size_t n) { + size_t nr; /* number of chars actually read */ + char *p; + luaL_Buffer b; + luaL_buffinit(L, &b); + p = luaL_prepbuffsize(&b, n); /* prepare buffer to read whole block */ + nr = fread(p, sizeof(char), n, f); /* try to read 'n' chars */ + luaL_addsize(&b, nr); + luaL_pushresult(&b); /* close buffer */ + return (nr > 0); /* true iff read something */ +} + + +static int g_read (lua_State *L, FILE *f, int first) { + int nargs = lua_gettop(L) - 1; + int success; + int n; + clearerr(f); + if (nargs == 0) { /* no arguments? */ + success = read_line(L, f, 1); + n = first+1; /* to return 1 result */ + } + else { /* ensure stack space for all results and for auxlib's buffer */ + luaL_checkstack(L, nargs+LUA_MINSTACK, "too many arguments"); + success = 1; + for (n = first; nargs-- && success; n++) { + if (lua_type(L, n) == LUA_TNUMBER) { + size_t l = (size_t)luaL_checkinteger(L, n); + success = (l == 0) ? test_eof(L, f) : read_chars(L, f, l); + } + else { + const char *p = luaL_checkstring(L, n); + if (*p == '*') p++; /* skip optional '*' (for compatibility) */ + switch (*p) { + case 'n': /* number */ + success = read_number(L, f); + break; + case 'l': /* line */ + success = read_line(L, f, 1); + break; + case 'L': /* line with end-of-line */ + success = read_line(L, f, 0); + break; + case 'a': /* file */ + read_all(L, f); /* read entire file */ + success = 1; /* always success */ + break; + default: + return luaL_argerror(L, n, "invalid format"); + } + } + } + } + if (ferror(f)) + return luaL_fileresult(L, 0, NULL); + if (!success) { + lua_pop(L, 1); /* remove last result */ + lua_pushnil(L); /* push nil instead */ + } + return n - first; +} + + +static int io_read (lua_State *L) { + return g_read(L, getiofile(L, IO_INPUT), 1); +} + + +static int f_read (lua_State *L) { + return g_read(L, tofile(L), 2); +} + + +static int io_readline (lua_State *L) { + LStream *p = (LStream *)lua_touserdata(L, lua_upvalueindex(1)); + int i; + int n = (int)lua_tointeger(L, lua_upvalueindex(2)); + if (isclosed(p)) /* file is already closed? */ + return luaL_error(L, "file is already closed"); + lua_settop(L , 1); + luaL_checkstack(L, n, "too many arguments"); + for (i = 1; i <= n; i++) /* push arguments to 'g_read' */ + lua_pushvalue(L, lua_upvalueindex(3 + i)); + n = g_read(L, p->f, 2); /* 'n' is number of results */ + lua_assert(n > 0); /* should return at least a nil */ + if (lua_toboolean(L, -n)) /* read at least one value? */ + return n; /* return them */ + else { /* first result is nil: EOF or error */ + if (n > 1) { /* is there error information? */ + /* 2nd result is error message */ + return luaL_error(L, "%s", lua_tostring(L, -n + 1)); + } + if (lua_toboolean(L, lua_upvalueindex(3))) { /* generator created file? */ + lua_settop(L, 0); + lua_pushvalue(L, lua_upvalueindex(1)); + aux_close(L); /* close it */ + } + return 0; + } +} + +/* }====================================================== */ + + +static int g_write (lua_State *L, FILE *f, int arg) { + int nargs = lua_gettop(L) - arg; + int status = 1; + for (; nargs--; arg++) { + if (lua_type(L, arg) == LUA_TNUMBER) { + /* optimization: could be done exactly as for strings */ + int len = lua_isinteger(L, arg) + ? fprintf(f, LUA_INTEGER_FMT, + (LUAI_UACINT)lua_tointeger(L, arg)) + : fprintf(f, LUA_NUMBER_FMT, + (LUAI_UACNUMBER)lua_tonumber(L, arg)); + status = status && (len > 0); + } + else { + size_t l; + const char *s = luaL_checklstring(L, arg, &l); + status = status && (fwrite(s, sizeof(char), l, f) == l); + } + } + if (status) return 1; /* file handle already on stack top */ + else return luaL_fileresult(L, status, NULL); +} + + +static int io_write (lua_State *L) { + return g_write(L, getiofile(L, IO_OUTPUT), 1); +} + + +static int f_write (lua_State *L) { + FILE *f = tofile(L); + lua_pushvalue(L, 1); /* push file at the stack top (to be returned) */ + return g_write(L, f, 2); +} + + +static int f_seek (lua_State *L) { + static const int mode[] = {SEEK_SET, SEEK_CUR, SEEK_END}; + static const char *const modenames[] = {"set", "cur", "end", NULL}; + FILE *f = tofile(L); + int op = luaL_checkoption(L, 2, "cur", modenames); + lua_Integer p3 = luaL_optinteger(L, 3, 0); + l_seeknum offset = (l_seeknum)p3; + luaL_argcheck(L, (lua_Integer)offset == p3, 3, + "not an integer in proper range"); + op = l_fseek(f, offset, mode[op]); + if (op) + return luaL_fileresult(L, 0, NULL); /* error */ + else { + lua_pushinteger(L, (lua_Integer)l_ftell(f)); + return 1; + } +} + + +static int f_setvbuf (lua_State *L) { + static const int mode[] = {_IONBF, _IOFBF, _IOLBF}; + static const char *const modenames[] = {"no", "full", "line", NULL}; + FILE *f = tofile(L); + int op = luaL_checkoption(L, 2, NULL, modenames); + lua_Integer sz = luaL_optinteger(L, 3, LUAL_BUFFERSIZE); + int res = setvbuf(f, NULL, mode[op], (size_t)sz); + return luaL_fileresult(L, res == 0, NULL); +} + + + +static int io_flush (lua_State *L) { + return luaL_fileresult(L, fflush(getiofile(L, IO_OUTPUT)) == 0, NULL); +} + + +static int f_flush (lua_State *L) { + return luaL_fileresult(L, fflush(tofile(L)) == 0, NULL); +} + + +/* +** functions for 'io' library +*/ +static const luaL_Reg iolib[] = { + {"close", io_close}, + {"flush", io_flush}, + {"input", io_input}, + {"lines", io_lines}, + {"open", io_open}, + {"output", io_output}, + {"popen", io_popen}, + {"read", io_read}, + {"tmpfile", io_tmpfile}, + {"type", io_type}, + {"write", io_write}, + {NULL, NULL} +}; + + +/* +** methods for file handles +*/ +static const luaL_Reg flib[] = { + {"close", io_close}, + {"flush", f_flush}, + {"lines", f_lines}, + {"read", f_read}, + {"seek", f_seek}, + {"setvbuf", f_setvbuf}, + {"write", f_write}, + {"__gc", f_gc}, + {"__tostring", f_tostring}, + {NULL, NULL} +}; + + +static void createmeta (lua_State *L) { + luaL_newmetatable(L, LUA_FILEHANDLE); /* create metatable for file handles */ + lua_pushvalue(L, -1); /* push metatable */ + lua_setfield(L, -2, "__index"); /* metatable.__index = metatable */ + luaL_setfuncs(L, flib, 0); /* add file methods to new metatable */ + lua_pop(L, 1); /* pop new metatable */ +} + + +/* +** function to (not) close the standard files stdin, stdout, and stderr +*/ +static int io_noclose (lua_State *L) { + LStream *p = tolstream(L); + p->closef = &io_noclose; /* keep file opened */ + lua_pushnil(L); + lua_pushliteral(L, "cannot close standard file"); + return 2; +} + + +static void createstdfile (lua_State *L, FILE *f, const char *k, + const char *fname) { + LStream *p = newprefile(L); + p->f = f; + p->closef = &io_noclose; + if (k != NULL) { + lua_pushvalue(L, -1); + lua_setfield(L, LUA_REGISTRYINDEX, k); /* add file to registry */ + } + lua_setfield(L, -2, fname); /* add file to module */ +} + + +LUAMOD_API int luaopen_io (lua_State *L) { + luaL_newlib(L, iolib); /* new module */ + createmeta(L); + /* create (and set) default files */ + createstdfile(L, stdin, IO_INPUT, "stdin"); + createstdfile(L, stdout, IO_OUTPUT, "stdout"); + createstdfile(L, stderr, NULL, "stderr"); + return 1; +} + diff --git a/EQ2/source/LUA/llex.c b/EQ2/source/LUA/llex.c new file mode 100644 index 000000000..70328273f --- /dev/null +++ b/EQ2/source/LUA/llex.c @@ -0,0 +1,565 @@ +/* +** $Id: llex.c,v 2.96 2016/05/02 14:02:12 roberto Exp $ +** Lexical Analyzer +** See Copyright Notice in lua.h +*/ + +#define llex_c +#define LUA_CORE + +#include "lprefix.h" + + +#include +#include + +#include "lua.h" + +#include "lctype.h" +#include "ldebug.h" +#include "ldo.h" +#include "lgc.h" +#include "llex.h" +#include "lobject.h" +#include "lparser.h" +#include "lstate.h" +#include "lstring.h" +#include "ltable.h" +#include "lzio.h" + + + +#define next(ls) (ls->current = zgetc(ls->z)) + + + +#define currIsNewline(ls) (ls->current == '\n' || ls->current == '\r') + + +/* ORDER RESERVED */ +static const char *const luaX_tokens [] = { + "and", "break", "do", "else", "elseif", + "end", "false", "for", "function", "goto", "if", + "in", "local", "nil", "not", "or", "repeat", + "return", "then", "true", "until", "while", + "//", "..", "...", "==", ">=", "<=", "~=", + "<<", ">>", "::", "", + "", "", "", "" +}; + + +#define save_and_next(ls) (save(ls, ls->current), next(ls)) + + +static l_noret lexerror (LexState *ls, const char *msg, int token); + + +static void save (LexState *ls, int c) { + Mbuffer *b = ls->buff; + if (luaZ_bufflen(b) + 1 > luaZ_sizebuffer(b)) { + size_t newsize; + if (luaZ_sizebuffer(b) >= MAX_SIZE/2) + lexerror(ls, "lexical element too long", 0); + newsize = luaZ_sizebuffer(b) * 2; + luaZ_resizebuffer(ls->L, b, newsize); + } + b->buffer[luaZ_bufflen(b)++] = cast(char, c); +} + + +void luaX_init (lua_State *L) { + int i; + TString *e = luaS_newliteral(L, LUA_ENV); /* create env name */ + luaC_fix(L, obj2gco(e)); /* never collect this name */ + for (i=0; iextra = cast_byte(i+1); /* reserved word */ + } +} + + +const char *luaX_token2str (LexState *ls, int token) { + if (token < FIRST_RESERVED) { /* single-byte symbols? */ + lua_assert(token == cast_uchar(token)); + return luaO_pushfstring(ls->L, "'%c'", token); + } + else { + const char *s = luaX_tokens[token - FIRST_RESERVED]; + if (token < TK_EOS) /* fixed format (symbols and reserved words)? */ + return luaO_pushfstring(ls->L, "'%s'", s); + else /* names, strings, and numerals */ + return s; + } +} + + +static const char *txtToken (LexState *ls, int token) { + switch (token) { + case TK_NAME: case TK_STRING: + case TK_FLT: case TK_INT: + save(ls, '\0'); + return luaO_pushfstring(ls->L, "'%s'", luaZ_buffer(ls->buff)); + default: + return luaX_token2str(ls, token); + } +} + + +static l_noret lexerror (LexState *ls, const char *msg, int token) { + msg = luaG_addinfo(ls->L, msg, ls->source, ls->linenumber); + if (token) + luaO_pushfstring(ls->L, "%s near %s", msg, txtToken(ls, token)); + luaD_throw(ls->L, LUA_ERRSYNTAX); +} + + +l_noret luaX_syntaxerror (LexState *ls, const char *msg) { + lexerror(ls, msg, ls->t.token); +} + + +/* +** creates a new string and anchors it in scanner's table so that +** it will not be collected until the end of the compilation +** (by that time it should be anchored somewhere) +*/ +TString *luaX_newstring (LexState *ls, const char *str, size_t l) { + lua_State *L = ls->L; + TValue *o; /* entry for 'str' */ + TString *ts = luaS_newlstr(L, str, l); /* create new string */ + setsvalue2s(L, L->top++, ts); /* temporarily anchor it in stack */ + o = luaH_set(L, ls->h, L->top - 1); + if (ttisnil(o)) { /* not in use yet? */ + /* boolean value does not need GC barrier; + table has no metatable, so it does not need to invalidate cache */ + setbvalue(o, 1); /* t[string] = true */ + luaC_checkGC(L); + } + else { /* string already present */ + ts = tsvalue(keyfromval(o)); /* re-use value previously stored */ + } + L->top--; /* remove string from stack */ + return ts; +} + + +/* +** increment line number and skips newline sequence (any of +** \n, \r, \n\r, or \r\n) +*/ +static void inclinenumber (LexState *ls) { + int old = ls->current; + lua_assert(currIsNewline(ls)); + next(ls); /* skip '\n' or '\r' */ + if (currIsNewline(ls) && ls->current != old) + next(ls); /* skip '\n\r' or '\r\n' */ + if (++ls->linenumber >= MAX_INT) + lexerror(ls, "chunk has too many lines", 0); +} + + +void luaX_setinput (lua_State *L, LexState *ls, ZIO *z, TString *source, + int firstchar) { + ls->t.token = 0; + ls->L = L; + ls->current = firstchar; + ls->lookahead.token = TK_EOS; /* no look-ahead token */ + ls->z = z; + ls->fs = NULL; + ls->linenumber = 1; + ls->lastline = 1; + ls->source = source; + ls->envn = luaS_newliteral(L, LUA_ENV); /* get env name */ + luaZ_resizebuffer(ls->L, ls->buff, LUA_MINBUFFER); /* initialize buffer */ +} + + + +/* +** ======================================================= +** LEXICAL ANALYZER +** ======================================================= +*/ + + +static int check_next1 (LexState *ls, int c) { + if (ls->current == c) { + next(ls); + return 1; + } + else return 0; +} + + +/* +** Check whether current char is in set 'set' (with two chars) and +** saves it +*/ +static int check_next2 (LexState *ls, const char *set) { + lua_assert(set[2] == '\0'); + if (ls->current == set[0] || ls->current == set[1]) { + save_and_next(ls); + return 1; + } + else return 0; +} + + +/* LUA_NUMBER */ +/* +** this function is quite liberal in what it accepts, as 'luaO_str2num' +** will reject ill-formed numerals. +*/ +static int read_numeral (LexState *ls, SemInfo *seminfo) { + TValue obj; + const char *expo = "Ee"; + int first = ls->current; + lua_assert(lisdigit(ls->current)); + save_and_next(ls); + if (first == '0' && check_next2(ls, "xX")) /* hexadecimal? */ + expo = "Pp"; + for (;;) { + if (check_next2(ls, expo)) /* exponent part? */ + check_next2(ls, "-+"); /* optional exponent sign */ + if (lisxdigit(ls->current)) + save_and_next(ls); + else if (ls->current == '.') + save_and_next(ls); + else break; + } + save(ls, '\0'); + if (luaO_str2num(luaZ_buffer(ls->buff), &obj) == 0) /* format error? */ + lexerror(ls, "malformed number", TK_FLT); + if (ttisinteger(&obj)) { + seminfo->i = ivalue(&obj); + return TK_INT; + } + else { + lua_assert(ttisfloat(&obj)); + seminfo->r = fltvalue(&obj); + return TK_FLT; + } +} + + +/* +** skip a sequence '[=*[' or ']=*]'; if sequence is well formed, return +** its number of '='s; otherwise, return a negative number (-1 iff there +** are no '='s after initial bracket) +*/ +static int skip_sep (LexState *ls) { + int count = 0; + int s = ls->current; + lua_assert(s == '[' || s == ']'); + save_and_next(ls); + while (ls->current == '=') { + save_and_next(ls); + count++; + } + return (ls->current == s) ? count : (-count) - 1; +} + + +static void read_long_string (LexState *ls, SemInfo *seminfo, int sep) { + int line = ls->linenumber; /* initial line (for error message) */ + save_and_next(ls); /* skip 2nd '[' */ + if (currIsNewline(ls)) /* string starts with a newline? */ + inclinenumber(ls); /* skip it */ + for (;;) { + switch (ls->current) { + case EOZ: { /* error */ + const char *what = (seminfo ? "string" : "comment"); + const char *msg = luaO_pushfstring(ls->L, + "unfinished long %s (starting at line %d)", what, line); + lexerror(ls, msg, TK_EOS); + break; /* to avoid warnings */ + } + case ']': { + if (skip_sep(ls) == sep) { + save_and_next(ls); /* skip 2nd ']' */ + goto endloop; + } + break; + } + case '\n': case '\r': { + save(ls, '\n'); + inclinenumber(ls); + if (!seminfo) luaZ_resetbuffer(ls->buff); /* avoid wasting space */ + break; + } + default: { + if (seminfo) save_and_next(ls); + else next(ls); + } + } + } endloop: + if (seminfo) + seminfo->ts = luaX_newstring(ls, luaZ_buffer(ls->buff) + (2 + sep), + luaZ_bufflen(ls->buff) - 2*(2 + sep)); +} + + +static void esccheck (LexState *ls, int c, const char *msg) { + if (!c) { + if (ls->current != EOZ) + save_and_next(ls); /* add current to buffer for error message */ + lexerror(ls, msg, TK_STRING); + } +} + + +static int gethexa (LexState *ls) { + save_and_next(ls); + esccheck (ls, lisxdigit(ls->current), "hexadecimal digit expected"); + return luaO_hexavalue(ls->current); +} + + +static int readhexaesc (LexState *ls) { + int r = gethexa(ls); + r = (r << 4) + gethexa(ls); + luaZ_buffremove(ls->buff, 2); /* remove saved chars from buffer */ + return r; +} + + +static unsigned long readutf8esc (LexState *ls) { + unsigned long r; + int i = 4; /* chars to be removed: '\', 'u', '{', and first digit */ + save_and_next(ls); /* skip 'u' */ + esccheck(ls, ls->current == '{', "missing '{'"); + r = gethexa(ls); /* must have at least one digit */ + while ((save_and_next(ls), lisxdigit(ls->current))) { + i++; + r = (r << 4) + luaO_hexavalue(ls->current); + esccheck(ls, r <= 0x10FFFF, "UTF-8 value too large"); + } + esccheck(ls, ls->current == '}', "missing '}'"); + next(ls); /* skip '}' */ + luaZ_buffremove(ls->buff, i); /* remove saved chars from buffer */ + return r; +} + + +static void utf8esc (LexState *ls) { + char buff[UTF8BUFFSZ]; + int n = luaO_utf8esc(buff, readutf8esc(ls)); + for (; n > 0; n--) /* add 'buff' to string */ + save(ls, buff[UTF8BUFFSZ - n]); +} + + +static int readdecesc (LexState *ls) { + int i; + int r = 0; /* result accumulator */ + for (i = 0; i < 3 && lisdigit(ls->current); i++) { /* read up to 3 digits */ + r = 10*r + ls->current - '0'; + save_and_next(ls); + } + esccheck(ls, r <= UCHAR_MAX, "decimal escape too large"); + luaZ_buffremove(ls->buff, i); /* remove read digits from buffer */ + return r; +} + + +static void read_string (LexState *ls, int del, SemInfo *seminfo) { + save_and_next(ls); /* keep delimiter (for error messages) */ + while (ls->current != del) { + switch (ls->current) { + case EOZ: + lexerror(ls, "unfinished string", TK_EOS); + break; /* to avoid warnings */ + case '\n': + case '\r': + lexerror(ls, "unfinished string", TK_STRING); + break; /* to avoid warnings */ + case '\\': { /* escape sequences */ + int c; /* final character to be saved */ + save_and_next(ls); /* keep '\\' for error messages */ + switch (ls->current) { + case 'a': c = '\a'; goto read_save; + case 'b': c = '\b'; goto read_save; + case 'f': c = '\f'; goto read_save; + case 'n': c = '\n'; goto read_save; + case 'r': c = '\r'; goto read_save; + case 't': c = '\t'; goto read_save; + case 'v': c = '\v'; goto read_save; + case 'x': c = readhexaesc(ls); goto read_save; + case 'u': utf8esc(ls); goto no_save; + case '\n': case '\r': + inclinenumber(ls); c = '\n'; goto only_save; + case '\\': case '\"': case '\'': + c = ls->current; goto read_save; + case EOZ: goto no_save; /* will raise an error next loop */ + case 'z': { /* zap following span of spaces */ + luaZ_buffremove(ls->buff, 1); /* remove '\\' */ + next(ls); /* skip the 'z' */ + while (lisspace(ls->current)) { + if (currIsNewline(ls)) inclinenumber(ls); + else next(ls); + } + goto no_save; + } + default: { + esccheck(ls, lisdigit(ls->current), "invalid escape sequence"); + c = readdecesc(ls); /* digital escape '\ddd' */ + goto only_save; + } + } + read_save: + next(ls); + /* go through */ + only_save: + luaZ_buffremove(ls->buff, 1); /* remove '\\' */ + save(ls, c); + /* go through */ + no_save: break; + } + default: + save_and_next(ls); + } + } + save_and_next(ls); /* skip delimiter */ + seminfo->ts = luaX_newstring(ls, luaZ_buffer(ls->buff) + 1, + luaZ_bufflen(ls->buff) - 2); +} + + +static int llex (LexState *ls, SemInfo *seminfo) { + luaZ_resetbuffer(ls->buff); + for (;;) { + switch (ls->current) { + case '\n': case '\r': { /* line breaks */ + inclinenumber(ls); + break; + } + case ' ': case '\f': case '\t': case '\v': { /* spaces */ + next(ls); + break; + } + case '-': { /* '-' or '--' (comment) */ + next(ls); + if (ls->current != '-') return '-'; + /* else is a comment */ + next(ls); + if (ls->current == '[') { /* long comment? */ + int sep = skip_sep(ls); + luaZ_resetbuffer(ls->buff); /* 'skip_sep' may dirty the buffer */ + if (sep >= 0) { + read_long_string(ls, NULL, sep); /* skip long comment */ + luaZ_resetbuffer(ls->buff); /* previous call may dirty the buff. */ + break; + } + } + /* else short comment */ + while (!currIsNewline(ls) && ls->current != EOZ) + next(ls); /* skip until end of line (or end of file) */ + break; + } + case '[': { /* long string or simply '[' */ + int sep = skip_sep(ls); + if (sep >= 0) { + read_long_string(ls, seminfo, sep); + return TK_STRING; + } + else if (sep != -1) /* '[=...' missing second bracket */ + lexerror(ls, "invalid long string delimiter", TK_STRING); + return '['; + } + case '=': { + next(ls); + if (check_next1(ls, '=')) return TK_EQ; + else return '='; + } + case '<': { + next(ls); + if (check_next1(ls, '=')) return TK_LE; + else if (check_next1(ls, '<')) return TK_SHL; + else return '<'; + } + case '>': { + next(ls); + if (check_next1(ls, '=')) return TK_GE; + else if (check_next1(ls, '>')) return TK_SHR; + else return '>'; + } + case '/': { + next(ls); + if (check_next1(ls, '/')) return TK_IDIV; + else return '/'; + } + case '~': { + next(ls); + if (check_next1(ls, '=')) return TK_NE; + else return '~'; + } + case ':': { + next(ls); + if (check_next1(ls, ':')) return TK_DBCOLON; + else return ':'; + } + case '"': case '\'': { /* short literal strings */ + read_string(ls, ls->current, seminfo); + return TK_STRING; + } + case '.': { /* '.', '..', '...', or number */ + save_and_next(ls); + if (check_next1(ls, '.')) { + if (check_next1(ls, '.')) + return TK_DOTS; /* '...' */ + else return TK_CONCAT; /* '..' */ + } + else if (!lisdigit(ls->current)) return '.'; + else return read_numeral(ls, seminfo); + } + case '0': case '1': case '2': case '3': case '4': + case '5': case '6': case '7': case '8': case '9': { + return read_numeral(ls, seminfo); + } + case EOZ: { + return TK_EOS; + } + default: { + if (lislalpha(ls->current)) { /* identifier or reserved word? */ + TString *ts; + do { + save_and_next(ls); + } while (lislalnum(ls->current)); + ts = luaX_newstring(ls, luaZ_buffer(ls->buff), + luaZ_bufflen(ls->buff)); + seminfo->ts = ts; + if (isreserved(ts)) /* reserved word? */ + return ts->extra - 1 + FIRST_RESERVED; + else { + return TK_NAME; + } + } + else { /* single-char tokens (+ - / ...) */ + int c = ls->current; + next(ls); + return c; + } + } + } + } +} + + +void luaX_next (LexState *ls) { + ls->lastline = ls->linenumber; + if (ls->lookahead.token != TK_EOS) { /* is there a look-ahead token? */ + ls->t = ls->lookahead; /* use this one */ + ls->lookahead.token = TK_EOS; /* and discharge it */ + } + else + ls->t.token = llex(ls, &ls->t.seminfo); /* read next token */ +} + + +int luaX_lookahead (LexState *ls) { + lua_assert(ls->lookahead.token == TK_EOS); + ls->lookahead.token = llex(ls, &ls->lookahead.seminfo); + return ls->lookahead.token; +} + diff --git a/EQ2/source/LUA/llex.h b/EQ2/source/LUA/llex.h new file mode 100644 index 000000000..2363d87e4 --- /dev/null +++ b/EQ2/source/LUA/llex.h @@ -0,0 +1,85 @@ +/* +** $Id: llex.h,v 1.79 2016/05/02 14:02:12 roberto Exp $ +** Lexical Analyzer +** See Copyright Notice in lua.h +*/ + +#ifndef llex_h +#define llex_h + +#include "lobject.h" +#include "lzio.h" + + +#define FIRST_RESERVED 257 + + +#if !defined(LUA_ENV) +#define LUA_ENV "_ENV" +#endif + + +/* +* WARNING: if you change the order of this enumeration, +* grep "ORDER RESERVED" +*/ +enum RESERVED { + /* terminal symbols denoted by reserved words */ + TK_AND = FIRST_RESERVED, TK_BREAK, + TK_DO, TK_ELSE, TK_ELSEIF, TK_END, TK_FALSE, TK_FOR, TK_FUNCTION, + TK_GOTO, TK_IF, TK_IN, TK_LOCAL, TK_NIL, TK_NOT, TK_OR, TK_REPEAT, + TK_RETURN, TK_THEN, TK_TRUE, TK_UNTIL, TK_WHILE, + /* other terminal symbols */ + TK_IDIV, TK_CONCAT, TK_DOTS, TK_EQ, TK_GE, TK_LE, TK_NE, + TK_SHL, TK_SHR, + TK_DBCOLON, TK_EOS, + TK_FLT, TK_INT, TK_NAME, TK_STRING +}; + +/* number of reserved words */ +#define NUM_RESERVED (cast(int, TK_WHILE-FIRST_RESERVED+1)) + + +typedef union { + lua_Number r; + lua_Integer i; + TString *ts; +} SemInfo; /* semantics information */ + + +typedef struct Token { + int token; + SemInfo seminfo; +} Token; + + +/* state of the lexer plus state of the parser when shared by all + functions */ +typedef struct LexState { + int current; /* current character (charint) */ + int linenumber; /* input line counter */ + int lastline; /* line of last token 'consumed' */ + Token t; /* current token */ + Token lookahead; /* look ahead token */ + struct FuncState *fs; /* current function (parser) */ + struct lua_State *L; + ZIO *z; /* input stream */ + Mbuffer *buff; /* buffer for tokens */ + Table *h; /* to avoid collection/reuse strings */ + struct Dyndata *dyd; /* dynamic structures used by the parser */ + TString *source; /* current source name */ + TString *envn; /* environment variable name */ +} LexState; + + +LUAI_FUNC void luaX_init (lua_State *L); +LUAI_FUNC void luaX_setinput (lua_State *L, LexState *ls, ZIO *z, + TString *source, int firstchar); +LUAI_FUNC TString *luaX_newstring (LexState *ls, const char *str, size_t l); +LUAI_FUNC void luaX_next (LexState *ls); +LUAI_FUNC int luaX_lookahead (LexState *ls); +LUAI_FUNC l_noret luaX_syntaxerror (LexState *ls, const char *s); +LUAI_FUNC const char *luaX_token2str (LexState *ls, int token); + + +#endif diff --git a/EQ2/source/LUA/llimits.h b/EQ2/source/LUA/llimits.h new file mode 100644 index 000000000..f21377fef --- /dev/null +++ b/EQ2/source/LUA/llimits.h @@ -0,0 +1,323 @@ +/* +** $Id: llimits.h,v 1.141 2015/11/19 19:16:22 roberto Exp $ +** Limits, basic types, and some other 'installation-dependent' definitions +** See Copyright Notice in lua.h +*/ + +#ifndef llimits_h +#define llimits_h + + +#include +#include + + +#include "lua.h" + +/* +** 'lu_mem' and 'l_mem' are unsigned/signed integers big enough to count +** the total memory used by Lua (in bytes). Usually, 'size_t' and +** 'ptrdiff_t' should work, but we use 'long' for 16-bit machines. +*/ +#if defined(LUAI_MEM) /* { external definitions? */ +typedef LUAI_UMEM lu_mem; +typedef LUAI_MEM l_mem; +#elif LUAI_BITSINT >= 32 /* }{ */ +typedef size_t lu_mem; +typedef ptrdiff_t l_mem; +#else /* 16-bit ints */ /* }{ */ +typedef unsigned long lu_mem; +typedef long l_mem; +#endif /* } */ + + +/* chars used as small naturals (so that 'char' is reserved for characters) */ +typedef unsigned char lu_byte; + + +/* maximum value for size_t */ +#define MAX_SIZET ((size_t)(~(size_t)0)) + +/* maximum size visible for Lua (must be representable in a lua_Integer */ +#define MAX_SIZE (sizeof(size_t) < sizeof(lua_Integer) ? MAX_SIZET \ + : (size_t)(LUA_MAXINTEGER)) + + +#define MAX_LUMEM ((lu_mem)(~(lu_mem)0)) + +#define MAX_LMEM ((l_mem)(MAX_LUMEM >> 1)) + + +#define MAX_INT INT_MAX /* maximum value of an int */ + + +/* +** conversion of pointer to unsigned integer: +** this is for hashing only; there is no problem if the integer +** cannot hold the whole pointer value +*/ +#define point2uint(p) ((unsigned int)((size_t)(p) & UINT_MAX)) + + + +/* type to ensure maximum alignment */ +#if defined(LUAI_USER_ALIGNMENT_T) +typedef LUAI_USER_ALIGNMENT_T L_Umaxalign; +#else +typedef union { + lua_Number n; + double u; + void *s; + lua_Integer i; + long l; +} L_Umaxalign; +#endif + + + +/* types of 'usual argument conversions' for lua_Number and lua_Integer */ +typedef LUAI_UACNUMBER l_uacNumber; +typedef LUAI_UACINT l_uacInt; + + +/* internal assertions for in-house debugging */ +#if defined(lua_assert) +#define check_exp(c,e) (lua_assert(c), (e)) +/* to avoid problems with conditions too long */ +#define lua_longassert(c) ((c) ? (void)0 : lua_assert(0)) +#else +#define lua_assert(c) ((void)0) +#define check_exp(c,e) (e) +#define lua_longassert(c) ((void)0) +#endif + +/* +** assertion for checking API calls +*/ +#if !defined(luai_apicheck) +#define luai_apicheck(l,e) lua_assert(e) +#endif + +#define api_check(l,e,msg) luai_apicheck(l,(e) && msg) + + +/* macro to avoid warnings about unused variables */ +#if !defined(UNUSED) +#define UNUSED(x) ((void)(x)) +#endif + + +/* type casts (a macro highlights casts in the code) */ +#define cast(t, exp) ((t)(exp)) + +#define cast_void(i) cast(void, (i)) +#define cast_byte(i) cast(lu_byte, (i)) +#define cast_num(i) cast(lua_Number, (i)) +#define cast_int(i) cast(int, (i)) +#define cast_uchar(i) cast(unsigned char, (i)) + + +/* cast a signed lua_Integer to lua_Unsigned */ +#if !defined(l_castS2U) +#define l_castS2U(i) ((lua_Unsigned)(i)) +#endif + +/* +** cast a lua_Unsigned to a signed lua_Integer; this cast is +** not strict ISO C, but two-complement architectures should +** work fine. +*/ +#if !defined(l_castU2S) +#define l_castU2S(i) ((lua_Integer)(i)) +#endif + + +/* +** non-return type +*/ +#if defined(__GNUC__) +#define l_noret void __attribute__((noreturn)) +#elif defined(_MSC_VER) && _MSC_VER >= 1200 +#define l_noret void __declspec(noreturn) +#else +#define l_noret void +#endif + + + +/* +** maximum depth for nested C calls and syntactical nested non-terminals +** in a program. (Value must fit in an unsigned short int.) +*/ +#if !defined(LUAI_MAXCCALLS) +#define LUAI_MAXCCALLS 200 +#endif + + + +/* +** type for virtual-machine instructions; +** must be an unsigned with (at least) 4 bytes (see details in lopcodes.h) +*/ +#if LUAI_BITSINT >= 32 +typedef unsigned int Instruction; +#else +typedef unsigned long Instruction; +#endif + + + +/* +** Maximum length for short strings, that is, strings that are +** internalized. (Cannot be smaller than reserved words or tags for +** metamethods, as these strings must be internalized; +** #("function") = 8, #("__newindex") = 10.) +*/ +#if !defined(LUAI_MAXSHORTLEN) +#define LUAI_MAXSHORTLEN 40 +#endif + + +/* +** Initial size for the string table (must be power of 2). +** The Lua core alone registers ~50 strings (reserved words + +** metaevent keys + a few others). Libraries would typically add +** a few dozens more. +*/ +#if !defined(MINSTRTABSIZE) +#define MINSTRTABSIZE 128 +#endif + + +/* +** Size of cache for strings in the API. 'N' is the number of +** sets (better be a prime) and "M" is the size of each set (M == 1 +** makes a direct cache.) +*/ +#if !defined(STRCACHE_N) +#define STRCACHE_N 53 +#define STRCACHE_M 2 +#endif + + +/* minimum size for string buffer */ +#if !defined(LUA_MINBUFFER) +#define LUA_MINBUFFER 32 +#endif + + +/* +** macros that are executed whenever program enters the Lua core +** ('lua_lock') and leaves the core ('lua_unlock') +*/ +#if !defined(lua_lock) +#define lua_lock(L) ((void) 0) +#define lua_unlock(L) ((void) 0) +#endif + +/* +** macro executed during Lua functions at points where the +** function can yield. +*/ +#if !defined(luai_threadyield) +#define luai_threadyield(L) {lua_unlock(L); lua_lock(L);} +#endif + + +/* +** these macros allow user-specific actions on threads when you defined +** LUAI_EXTRASPACE and need to do something extra when a thread is +** created/deleted/resumed/yielded. +*/ +#if !defined(luai_userstateopen) +#define luai_userstateopen(L) ((void)L) +#endif + +#if !defined(luai_userstateclose) +#define luai_userstateclose(L) ((void)L) +#endif + +#if !defined(luai_userstatethread) +#define luai_userstatethread(L,L1) ((void)L) +#endif + +#if !defined(luai_userstatefree) +#define luai_userstatefree(L,L1) ((void)L) +#endif + +#if !defined(luai_userstateresume) +#define luai_userstateresume(L,n) ((void)L) +#endif + +#if !defined(luai_userstateyield) +#define luai_userstateyield(L,n) ((void)L) +#endif + + + +/* +** The luai_num* macros define the primitive operations over numbers. +*/ + +/* floor division (defined as 'floor(a/b)') */ +#if !defined(luai_numidiv) +#define luai_numidiv(L,a,b) ((void)L, l_floor(luai_numdiv(L,a,b))) +#endif + +/* float division */ +#if !defined(luai_numdiv) +#define luai_numdiv(L,a,b) ((a)/(b)) +#endif + +/* +** modulo: defined as 'a - floor(a/b)*b'; this definition gives NaN when +** 'b' is huge, but the result should be 'a'. 'fmod' gives the result of +** 'a - trunc(a/b)*b', and therefore must be corrected when 'trunc(a/b) +** ~= floor(a/b)'. That happens when the division has a non-integer +** negative result, which is equivalent to the test below. +*/ +#if !defined(luai_nummod) +#define luai_nummod(L,a,b,m) \ + { (m) = l_mathop(fmod)(a,b); if ((m)*(b) < 0) (m) += (b); } +#endif + +/* exponentiation */ +#if !defined(luai_numpow) +#define luai_numpow(L,a,b) ((void)L, l_mathop(pow)(a,b)) +#endif + +/* the others are quite standard operations */ +#if !defined(luai_numadd) +#define luai_numadd(L,a,b) ((a)+(b)) +#define luai_numsub(L,a,b) ((a)-(b)) +#define luai_nummul(L,a,b) ((a)*(b)) +#define luai_numunm(L,a) (-(a)) +#define luai_numeq(a,b) ((a)==(b)) +#define luai_numlt(a,b) ((a)<(b)) +#define luai_numle(a,b) ((a)<=(b)) +#define luai_numisnan(a) (!luai_numeq((a), (a))) +#endif + + + + + +/* +** macro to control inclusion of some hard tests on stack reallocation +*/ +#if !defined(HARDSTACKTESTS) +#define condmovestack(L,pre,pos) ((void)0) +#else +/* realloc stack keeping its size */ +#define condmovestack(L,pre,pos) \ + { int sz_ = (L)->stacksize; pre; luaD_reallocstack((L), sz_); pos; } +#endif + +#if !defined(HARDMEMTESTS) +#define condchangemem(L,pre,pos) ((void)0) +#else +#define condchangemem(L,pre,pos) \ + { if (G(L)->gcrunning) { pre; luaC_fullgc(L, 0); pos; } } +#endif + +#endif diff --git a/EQ2/source/LUA/lmathlib.c b/EQ2/source/LUA/lmathlib.c new file mode 100644 index 000000000..b7f8baee0 --- /dev/null +++ b/EQ2/source/LUA/lmathlib.c @@ -0,0 +1,410 @@ +/* +** $Id: lmathlib.c,v 1.119 2016/12/22 13:08:50 roberto Exp $ +** Standard mathematical library +** See Copyright Notice in lua.h +*/ + +#define lmathlib_c +#define LUA_LIB + +#include "lprefix.h" + + +#include +#include + +#include "lua.h" + +#include "lauxlib.h" +#include "lualib.h" + + +#undef PI +#define PI (l_mathop(3.141592653589793238462643383279502884)) + + +#if !defined(l_rand) /* { */ +#if defined(LUA_USE_POSIX) +#define l_rand() random() +#define l_srand(x) srandom(x) +#define L_RANDMAX 2147483647 /* (2^31 - 1), following POSIX */ +#else +#define l_rand() rand() +#define l_srand(x) srand(x) +#define L_RANDMAX RAND_MAX +#endif +#endif /* } */ + + +static int math_abs (lua_State *L) { + if (lua_isinteger(L, 1)) { + lua_Integer n = lua_tointeger(L, 1); + if (n < 0) n = (lua_Integer)(0u - (lua_Unsigned)n); + lua_pushinteger(L, n); + } + else + lua_pushnumber(L, l_mathop(fabs)(luaL_checknumber(L, 1))); + return 1; +} + +static int math_sin (lua_State *L) { + lua_pushnumber(L, l_mathop(sin)(luaL_checknumber(L, 1))); + return 1; +} + +static int math_cos (lua_State *L) { + lua_pushnumber(L, l_mathop(cos)(luaL_checknumber(L, 1))); + return 1; +} + +static int math_tan (lua_State *L) { + lua_pushnumber(L, l_mathop(tan)(luaL_checknumber(L, 1))); + return 1; +} + +static int math_asin (lua_State *L) { + lua_pushnumber(L, l_mathop(asin)(luaL_checknumber(L, 1))); + return 1; +} + +static int math_acos (lua_State *L) { + lua_pushnumber(L, l_mathop(acos)(luaL_checknumber(L, 1))); + return 1; +} + +static int math_atan (lua_State *L) { + lua_Number y = luaL_checknumber(L, 1); + lua_Number x = luaL_optnumber(L, 2, 1); + lua_pushnumber(L, l_mathop(atan2)(y, x)); + return 1; +} + + +static int math_toint (lua_State *L) { + int valid; + lua_Integer n = lua_tointegerx(L, 1, &valid); + if (valid) + lua_pushinteger(L, n); + else { + luaL_checkany(L, 1); + lua_pushnil(L); /* value is not convertible to integer */ + } + return 1; +} + + +static void pushnumint (lua_State *L, lua_Number d) { + lua_Integer n; + if (lua_numbertointeger(d, &n)) /* does 'd' fit in an integer? */ + lua_pushinteger(L, n); /* result is integer */ + else + lua_pushnumber(L, d); /* result is float */ +} + + +static int math_floor (lua_State *L) { + if (lua_isinteger(L, 1)) + lua_settop(L, 1); /* integer is its own floor */ + else { + lua_Number d = l_mathop(floor)(luaL_checknumber(L, 1)); + pushnumint(L, d); + } + return 1; +} + + +static int math_ceil (lua_State *L) { + if (lua_isinteger(L, 1)) + lua_settop(L, 1); /* integer is its own ceil */ + else { + lua_Number d = l_mathop(ceil)(luaL_checknumber(L, 1)); + pushnumint(L, d); + } + return 1; +} + + +static int math_fmod (lua_State *L) { + if (lua_isinteger(L, 1) && lua_isinteger(L, 2)) { + lua_Integer d = lua_tointeger(L, 2); + if ((lua_Unsigned)d + 1u <= 1u) { /* special cases: -1 or 0 */ + luaL_argcheck(L, d != 0, 2, "zero"); + lua_pushinteger(L, 0); /* avoid overflow with 0x80000... / -1 */ + } + else + lua_pushinteger(L, lua_tointeger(L, 1) % d); + } + else + lua_pushnumber(L, l_mathop(fmod)(luaL_checknumber(L, 1), + luaL_checknumber(L, 2))); + return 1; +} + + +/* +** next function does not use 'modf', avoiding problems with 'double*' +** (which is not compatible with 'float*') when lua_Number is not +** 'double'. +*/ +static int math_modf (lua_State *L) { + if (lua_isinteger(L ,1)) { + lua_settop(L, 1); /* number is its own integer part */ + lua_pushnumber(L, 0); /* no fractional part */ + } + else { + lua_Number n = luaL_checknumber(L, 1); + /* integer part (rounds toward zero) */ + lua_Number ip = (n < 0) ? l_mathop(ceil)(n) : l_mathop(floor)(n); + pushnumint(L, ip); + /* fractional part (test needed for inf/-inf) */ + lua_pushnumber(L, (n == ip) ? l_mathop(0.0) : (n - ip)); + } + return 2; +} + + +static int math_sqrt (lua_State *L) { + lua_pushnumber(L, l_mathop(sqrt)(luaL_checknumber(L, 1))); + return 1; +} + + +static int math_ult (lua_State *L) { + lua_Integer a = luaL_checkinteger(L, 1); + lua_Integer b = luaL_checkinteger(L, 2); + lua_pushboolean(L, (lua_Unsigned)a < (lua_Unsigned)b); + return 1; +} + +static int math_log (lua_State *L) { + lua_Number x = luaL_checknumber(L, 1); + lua_Number res; + if (lua_isnoneornil(L, 2)) + res = l_mathop(log)(x); + else { + lua_Number base = luaL_checknumber(L, 2); +#if !defined(LUA_USE_C89) + if (base == l_mathop(2.0)) + res = l_mathop(log2)(x); else +#endif + if (base == l_mathop(10.0)) + res = l_mathop(log10)(x); + else + res = l_mathop(log)(x)/l_mathop(log)(base); + } + lua_pushnumber(L, res); + return 1; +} + +static int math_exp (lua_State *L) { + lua_pushnumber(L, l_mathop(exp)(luaL_checknumber(L, 1))); + return 1; +} + +static int math_deg (lua_State *L) { + lua_pushnumber(L, luaL_checknumber(L, 1) * (l_mathop(180.0) / PI)); + return 1; +} + +static int math_rad (lua_State *L) { + lua_pushnumber(L, luaL_checknumber(L, 1) * (PI / l_mathop(180.0))); + return 1; +} + + +static int math_min (lua_State *L) { + int n = lua_gettop(L); /* number of arguments */ + int imin = 1; /* index of current minimum value */ + int i; + luaL_argcheck(L, n >= 1, 1, "value expected"); + for (i = 2; i <= n; i++) { + if (lua_compare(L, i, imin, LUA_OPLT)) + imin = i; + } + lua_pushvalue(L, imin); + return 1; +} + + +static int math_max (lua_State *L) { + int n = lua_gettop(L); /* number of arguments */ + int imax = 1; /* index of current maximum value */ + int i; + luaL_argcheck(L, n >= 1, 1, "value expected"); + for (i = 2; i <= n; i++) { + if (lua_compare(L, imax, i, LUA_OPLT)) + imax = i; + } + lua_pushvalue(L, imax); + return 1; +} + +/* +** This function uses 'double' (instead of 'lua_Number') to ensure that +** all bits from 'l_rand' can be represented, and that 'RANDMAX + 1.0' +** will keep full precision (ensuring that 'r' is always less than 1.0.) +*/ +static int math_random (lua_State *L) { + lua_Integer low, up; + double r = (double)l_rand() * (1.0 / ((double)L_RANDMAX + 1.0)); + switch (lua_gettop(L)) { /* check number of arguments */ + case 0: { /* no arguments */ + lua_pushnumber(L, (lua_Number)r); /* Number between 0 and 1 */ + return 1; + } + case 1: { /* only upper limit */ + low = 1; + up = luaL_checkinteger(L, 1); + break; + } + case 2: { /* lower and upper limits */ + low = luaL_checkinteger(L, 1); + up = luaL_checkinteger(L, 2); + break; + } + default: return luaL_error(L, "wrong number of arguments"); + } + /* random integer in the interval [low, up] */ + luaL_argcheck(L, low <= up, 1, "interval is empty"); + luaL_argcheck(L, low >= 0 || up <= LUA_MAXINTEGER + low, 1, + "interval too large"); + r *= (double)(up - low) + 1.0; + lua_pushinteger(L, (lua_Integer)r + low); + return 1; +} + + +static int math_randomseed (lua_State *L) { + l_srand((unsigned int)(lua_Integer)luaL_checknumber(L, 1)); + (void)l_rand(); /* discard first value to avoid undesirable correlations */ + return 0; +} + + +static int math_type (lua_State *L) { + if (lua_type(L, 1) == LUA_TNUMBER) { + if (lua_isinteger(L, 1)) + lua_pushliteral(L, "integer"); + else + lua_pushliteral(L, "float"); + } + else { + luaL_checkany(L, 1); + lua_pushnil(L); + } + return 1; +} + + +/* +** {================================================================== +** Deprecated functions (for compatibility only) +** =================================================================== +*/ +#if defined(LUA_COMPAT_MATHLIB) + +static int math_cosh (lua_State *L) { + lua_pushnumber(L, l_mathop(cosh)(luaL_checknumber(L, 1))); + return 1; +} + +static int math_sinh (lua_State *L) { + lua_pushnumber(L, l_mathop(sinh)(luaL_checknumber(L, 1))); + return 1; +} + +static int math_tanh (lua_State *L) { + lua_pushnumber(L, l_mathop(tanh)(luaL_checknumber(L, 1))); + return 1; +} + +static int math_pow (lua_State *L) { + lua_Number x = luaL_checknumber(L, 1); + lua_Number y = luaL_checknumber(L, 2); + lua_pushnumber(L, l_mathop(pow)(x, y)); + return 1; +} + +static int math_frexp (lua_State *L) { + int e; + lua_pushnumber(L, l_mathop(frexp)(luaL_checknumber(L, 1), &e)); + lua_pushinteger(L, e); + return 2; +} + +static int math_ldexp (lua_State *L) { + lua_Number x = luaL_checknumber(L, 1); + int ep = (int)luaL_checkinteger(L, 2); + lua_pushnumber(L, l_mathop(ldexp)(x, ep)); + return 1; +} + +static int math_log10 (lua_State *L) { + lua_pushnumber(L, l_mathop(log10)(luaL_checknumber(L, 1))); + return 1; +} + +#endif +/* }================================================================== */ + + + +static const luaL_Reg mathlib[] = { + {"abs", math_abs}, + {"acos", math_acos}, + {"asin", math_asin}, + {"atan", math_atan}, + {"ceil", math_ceil}, + {"cos", math_cos}, + {"deg", math_deg}, + {"exp", math_exp}, + {"tointeger", math_toint}, + {"floor", math_floor}, + {"fmod", math_fmod}, + {"ult", math_ult}, + {"log", math_log}, + {"max", math_max}, + {"min", math_min}, + {"modf", math_modf}, + {"rad", math_rad}, + {"random", math_random}, + {"randomseed", math_randomseed}, + {"sin", math_sin}, + {"sqrt", math_sqrt}, + {"tan", math_tan}, + {"type", math_type}, +#if defined(LUA_COMPAT_MATHLIB) + {"atan2", math_atan}, + {"cosh", math_cosh}, + {"sinh", math_sinh}, + {"tanh", math_tanh}, + {"pow", math_pow}, + {"frexp", math_frexp}, + {"ldexp", math_ldexp}, + {"log10", math_log10}, +#endif + /* placeholders */ + {"pi", NULL}, + {"huge", NULL}, + {"maxinteger", NULL}, + {"mininteger", NULL}, + {NULL, NULL} +}; + + +/* +** Open math library +*/ +LUAMOD_API int luaopen_math (lua_State *L) { + luaL_newlib(L, mathlib); + lua_pushnumber(L, PI); + lua_setfield(L, -2, "pi"); + lua_pushnumber(L, (lua_Number)HUGE_VAL); + lua_setfield(L, -2, "huge"); + lua_pushinteger(L, LUA_MAXINTEGER); + lua_setfield(L, -2, "maxinteger"); + lua_pushinteger(L, LUA_MININTEGER); + lua_setfield(L, -2, "mininteger"); + return 1; +} + diff --git a/EQ2/source/LUA/lmem.c b/EQ2/source/LUA/lmem.c new file mode 100644 index 000000000..0a0476cc7 --- /dev/null +++ b/EQ2/source/LUA/lmem.c @@ -0,0 +1,100 @@ +/* +** $Id: lmem.c,v 1.91 2015/03/06 19:45:54 roberto Exp $ +** Interface to Memory Manager +** See Copyright Notice in lua.h +*/ + +#define lmem_c +#define LUA_CORE + +#include "lprefix.h" + + +#include + +#include "lua.h" + +#include "ldebug.h" +#include "ldo.h" +#include "lgc.h" +#include "lmem.h" +#include "lobject.h" +#include "lstate.h" + + + +/* +** About the realloc function: +** void * frealloc (void *ud, void *ptr, size_t osize, size_t nsize); +** ('osize' is the old size, 'nsize' is the new size) +** +** * frealloc(ud, NULL, x, s) creates a new block of size 's' (no +** matter 'x'). +** +** * frealloc(ud, p, x, 0) frees the block 'p' +** (in this specific case, frealloc must return NULL); +** particularly, frealloc(ud, NULL, 0, 0) does nothing +** (which is equivalent to free(NULL) in ISO C) +** +** frealloc returns NULL if it cannot create or reallocate the area +** (any reallocation to an equal or smaller size cannot fail!) +*/ + + + +#define MINSIZEARRAY 4 + + +void *luaM_growaux_ (lua_State *L, void *block, int *size, size_t size_elems, + int limit, const char *what) { + void *newblock; + int newsize; + if (*size >= limit/2) { /* cannot double it? */ + if (*size >= limit) /* cannot grow even a little? */ + luaG_runerror(L, "too many %s (limit is %d)", what, limit); + newsize = limit; /* still have at least one free place */ + } + else { + newsize = (*size)*2; + if (newsize < MINSIZEARRAY) + newsize = MINSIZEARRAY; /* minimum size */ + } + newblock = luaM_reallocv(L, block, *size, newsize, size_elems); + *size = newsize; /* update only when everything else is OK */ + return newblock; +} + + +l_noret luaM_toobig (lua_State *L) { + luaG_runerror(L, "memory allocation error: block too big"); +} + + + +/* +** generic allocation routine. +*/ +void *luaM_realloc_ (lua_State *L, void *block, size_t osize, size_t nsize) { + void *newblock; + global_State *g = G(L); + size_t realosize = (block) ? osize : 0; + lua_assert((realosize == 0) == (block == NULL)); +#if defined(HARDMEMTESTS) + if (nsize > realosize && g->gcrunning) + luaC_fullgc(L, 1); /* force a GC whenever possible */ +#endif + newblock = (*g->frealloc)(g->ud, block, osize, nsize); + if (newblock == NULL && nsize > 0) { + lua_assert(nsize > realosize); /* cannot fail when shrinking a block */ + if (g->version) { /* is state fully built? */ + luaC_fullgc(L, 1); /* try to free some memory... */ + newblock = (*g->frealloc)(g->ud, block, osize, nsize); /* try again */ + } + if (newblock == NULL) + luaD_throw(L, LUA_ERRMEM); + } + lua_assert((nsize == 0) == (newblock == NULL)); + g->GCdebt = (g->GCdebt + nsize) - realosize; + return newblock; +} + diff --git a/EQ2/source/LUA/lmem.h b/EQ2/source/LUA/lmem.h new file mode 100644 index 000000000..30f484895 --- /dev/null +++ b/EQ2/source/LUA/lmem.h @@ -0,0 +1,69 @@ +/* +** $Id: lmem.h,v 1.43 2014/12/19 17:26:14 roberto Exp $ +** Interface to Memory Manager +** See Copyright Notice in lua.h +*/ + +#ifndef lmem_h +#define lmem_h + + +#include + +#include "llimits.h" +#include "lua.h" + + +/* +** This macro reallocs a vector 'b' from 'on' to 'n' elements, where +** each element has size 'e'. In case of arithmetic overflow of the +** product 'n'*'e', it raises an error (calling 'luaM_toobig'). Because +** 'e' is always constant, it avoids the runtime division MAX_SIZET/(e). +** +** (The macro is somewhat complex to avoid warnings: The 'sizeof' +** comparison avoids a runtime comparison when overflow cannot occur. +** The compiler should be able to optimize the real test by itself, but +** when it does it, it may give a warning about "comparison is always +** false due to limited range of data type"; the +1 tricks the compiler, +** avoiding this warning but also this optimization.) +*/ +#define luaM_reallocv(L,b,on,n,e) \ + (((sizeof(n) >= sizeof(size_t) && cast(size_t, (n)) + 1 > MAX_SIZET/(e)) \ + ? luaM_toobig(L) : cast_void(0)) , \ + luaM_realloc_(L, (b), (on)*(e), (n)*(e))) + +/* +** Arrays of chars do not need any test +*/ +#define luaM_reallocvchar(L,b,on,n) \ + cast(char *, luaM_realloc_(L, (b), (on)*sizeof(char), (n)*sizeof(char))) + +#define luaM_freemem(L, b, s) luaM_realloc_(L, (b), (s), 0) +#define luaM_free(L, b) luaM_realloc_(L, (b), sizeof(*(b)), 0) +#define luaM_freearray(L, b, n) luaM_realloc_(L, (b), (n)*sizeof(*(b)), 0) + +#define luaM_malloc(L,s) luaM_realloc_(L, NULL, 0, (s)) +#define luaM_new(L,t) cast(t *, luaM_malloc(L, sizeof(t))) +#define luaM_newvector(L,n,t) \ + cast(t *, luaM_reallocv(L, NULL, 0, n, sizeof(t))) + +#define luaM_newobject(L,tag,s) luaM_realloc_(L, NULL, tag, (s)) + +#define luaM_growvector(L,v,nelems,size,t,limit,e) \ + if ((nelems)+1 > (size)) \ + ((v)=cast(t *, luaM_growaux_(L,v,&(size),sizeof(t),limit,e))) + +#define luaM_reallocvector(L, v,oldn,n,t) \ + ((v)=cast(t *, luaM_reallocv(L, v, oldn, n, sizeof(t)))) + +LUAI_FUNC l_noret luaM_toobig (lua_State *L); + +/* not to be called directly */ +LUAI_FUNC void *luaM_realloc_ (lua_State *L, void *block, size_t oldsize, + size_t size); +LUAI_FUNC void *luaM_growaux_ (lua_State *L, void *block, int *size, + size_t size_elem, int limit, + const char *what); + +#endif + diff --git a/EQ2/source/LUA/loadlib.c b/EQ2/source/LUA/loadlib.c new file mode 100644 index 000000000..4791e748b --- /dev/null +++ b/EQ2/source/LUA/loadlib.c @@ -0,0 +1,790 @@ +/* +** $Id: loadlib.c,v 1.130 2017/01/12 17:14:26 roberto Exp $ +** Dynamic library loader for Lua +** See Copyright Notice in lua.h +** +** This module contains an implementation of loadlib for Unix systems +** that have dlfcn, an implementation for Windows, and a stub for other +** systems. +*/ + +#define loadlib_c +#define LUA_LIB + +#include "lprefix.h" + + +#include +#include +#include + +#include "lua.h" + +#include "lauxlib.h" +#include "lualib.h" + + +/* +** LUA_IGMARK is a mark to ignore all before it when building the +** luaopen_ function name. +*/ +#if !defined (LUA_IGMARK) +#define LUA_IGMARK "-" +#endif + + +/* +** LUA_CSUBSEP is the character that replaces dots in submodule names +** when searching for a C loader. +** LUA_LSUBSEP is the character that replaces dots in submodule names +** when searching for a Lua loader. +*/ +#if !defined(LUA_CSUBSEP) +#define LUA_CSUBSEP LUA_DIRSEP +#endif + +#if !defined(LUA_LSUBSEP) +#define LUA_LSUBSEP LUA_DIRSEP +#endif + + +/* prefix for open functions in C libraries */ +#define LUA_POF "luaopen_" + +/* separator for open functions in C libraries */ +#define LUA_OFSEP "_" + + +/* +** unique key for table in the registry that keeps handles +** for all loaded C libraries +*/ +static const int CLIBS = 0; + +#define LIB_FAIL "open" + + +#define setprogdir(L) ((void)0) + + +/* +** system-dependent functions +*/ + +/* +** unload library 'lib' +*/ +static void lsys_unloadlib (void *lib); + +/* +** load C library in file 'path'. If 'seeglb', load with all names in +** the library global. +** Returns the library; in case of error, returns NULL plus an +** error string in the stack. +*/ +static void *lsys_load (lua_State *L, const char *path, int seeglb); + +/* +** Try to find a function named 'sym' in library 'lib'. +** Returns the function; in case of error, returns NULL plus an +** error string in the stack. +*/ +static lua_CFunction lsys_sym (lua_State *L, void *lib, const char *sym); + + + + +#if defined(LUA_USE_DLOPEN) /* { */ +/* +** {======================================================================== +** This is an implementation of loadlib based on the dlfcn interface. +** The dlfcn interface is available in Linux, SunOS, Solaris, IRIX, FreeBSD, +** NetBSD, AIX 4.2, HPUX 11, and probably most other Unix flavors, at least +** as an emulation layer on top of native functions. +** ========================================================================= +*/ + +#include + +/* +** Macro to convert pointer-to-void* to pointer-to-function. This cast +** is undefined according to ISO C, but POSIX assumes that it works. +** (The '__extension__' in gnu compilers is only to avoid warnings.) +*/ +#if defined(__GNUC__) +#define cast_func(p) (__extension__ (lua_CFunction)(p)) +#else +#define cast_func(p) ((lua_CFunction)(p)) +#endif + + +static void lsys_unloadlib (void *lib) { + dlclose(lib); +} + + +static void *lsys_load (lua_State *L, const char *path, int seeglb) { + void *lib = dlopen(path, RTLD_NOW | (seeglb ? RTLD_GLOBAL : RTLD_LOCAL)); + if (lib == NULL) lua_pushstring(L, dlerror()); + return lib; +} + + +static lua_CFunction lsys_sym (lua_State *L, void *lib, const char *sym) { + lua_CFunction f = cast_func(dlsym(lib, sym)); + if (f == NULL) lua_pushstring(L, dlerror()); + return f; +} + +/* }====================================================== */ + + + +#elif defined(LUA_DL_DLL) /* }{ */ +/* +** {====================================================================== +** This is an implementation of loadlib for Windows using native functions. +** ======================================================================= +*/ + +#include + + +/* +** optional flags for LoadLibraryEx +*/ +#if !defined(LUA_LLE_FLAGS) +#define LUA_LLE_FLAGS 0 +#endif + + +#undef setprogdir + + +/* +** Replace in the path (on the top of the stack) any occurrence +** of LUA_EXEC_DIR with the executable's path. +*/ +static void setprogdir (lua_State *L) { + char buff[MAX_PATH + 1]; + char *lb; + DWORD nsize = sizeof(buff)/sizeof(char); + DWORD n = GetModuleFileNameA(NULL, buff, nsize); /* get exec. name */ + if (n == 0 || n == nsize || (lb = strrchr(buff, '\\')) == NULL) + luaL_error(L, "unable to get ModuleFileName"); + else { + *lb = '\0'; /* cut name on the last '\\' to get the path */ + luaL_gsub(L, lua_tostring(L, -1), LUA_EXEC_DIR, buff); + lua_remove(L, -2); /* remove original string */ + } +} + + + + +static void pusherror (lua_State *L) { + int error = GetLastError(); + char buffer[128]; + if (FormatMessageA(FORMAT_MESSAGE_IGNORE_INSERTS | FORMAT_MESSAGE_FROM_SYSTEM, + NULL, error, 0, buffer, sizeof(buffer)/sizeof(char), NULL)) + lua_pushstring(L, buffer); + else + lua_pushfstring(L, "system error %d\n", error); +} + +static void lsys_unloadlib (void *lib) { + FreeLibrary((HMODULE)lib); +} + + +static void *lsys_load (lua_State *L, const char *path, int seeglb) { + HMODULE lib = LoadLibraryExA(path, NULL, LUA_LLE_FLAGS); + (void)(seeglb); /* not used: symbols are 'global' by default */ + if (lib == NULL) pusherror(L); + return lib; +} + + +static lua_CFunction lsys_sym (lua_State *L, void *lib, const char *sym) { + lua_CFunction f = (lua_CFunction)GetProcAddress((HMODULE)lib, sym); + if (f == NULL) pusherror(L); + return f; +} + +/* }====================================================== */ + + +#else /* }{ */ +/* +** {====================================================== +** Fallback for other systems +** ======================================================= +*/ + +#undef LIB_FAIL +#define LIB_FAIL "absent" + + +#define DLMSG "dynamic libraries not enabled; check your Lua installation" + + +static void lsys_unloadlib (void *lib) { + (void)(lib); /* not used */ +} + + +static void *lsys_load (lua_State *L, const char *path, int seeglb) { + (void)(path); (void)(seeglb); /* not used */ + lua_pushliteral(L, DLMSG); + return NULL; +} + + +static lua_CFunction lsys_sym (lua_State *L, void *lib, const char *sym) { + (void)(lib); (void)(sym); /* not used */ + lua_pushliteral(L, DLMSG); + return NULL; +} + +/* }====================================================== */ +#endif /* } */ + + +/* +** {================================================================== +** Set Paths +** =================================================================== +*/ + +/* +** LUA_PATH_VAR and LUA_CPATH_VAR are the names of the environment +** variables that Lua check to set its paths. +*/ +#if !defined(LUA_PATH_VAR) +#define LUA_PATH_VAR "LUA_PATH" +#endif + +#if !defined(LUA_CPATH_VAR) +#define LUA_CPATH_VAR "LUA_CPATH" +#endif + + +#define AUXMARK "\1" /* auxiliary mark */ + + +/* +** return registry.LUA_NOENV as a boolean +*/ +static int noenv (lua_State *L) { + int b; + lua_getfield(L, LUA_REGISTRYINDEX, "LUA_NOENV"); + b = lua_toboolean(L, -1); + lua_pop(L, 1); /* remove value */ + return b; +} + + +/* +** Set a path +*/ +static void setpath (lua_State *L, const char *fieldname, + const char *envname, + const char *dft) { + const char *nver = lua_pushfstring(L, "%s%s", envname, LUA_VERSUFFIX); + const char *path = getenv(nver); /* use versioned name */ + if (path == NULL) /* no environment variable? */ + path = getenv(envname); /* try unversioned name */ + if (path == NULL || noenv(L)) /* no environment variable? */ + lua_pushstring(L, dft); /* use default */ + else { + /* replace ";;" by ";AUXMARK;" and then AUXMARK by default path */ + path = luaL_gsub(L, path, LUA_PATH_SEP LUA_PATH_SEP, + LUA_PATH_SEP AUXMARK LUA_PATH_SEP); + luaL_gsub(L, path, AUXMARK, dft); + lua_remove(L, -2); /* remove result from 1st 'gsub' */ + } + setprogdir(L); + lua_setfield(L, -3, fieldname); /* package[fieldname] = path value */ + lua_pop(L, 1); /* pop versioned variable name */ +} + +/* }================================================================== */ + + +/* +** return registry.CLIBS[path] +*/ +static void *checkclib (lua_State *L, const char *path) { + void *plib; + lua_rawgetp(L, LUA_REGISTRYINDEX, &CLIBS); + lua_getfield(L, -1, path); + plib = lua_touserdata(L, -1); /* plib = CLIBS[path] */ + lua_pop(L, 2); /* pop CLIBS table and 'plib' */ + return plib; +} + + +/* +** registry.CLIBS[path] = plib -- for queries +** registry.CLIBS[#CLIBS + 1] = plib -- also keep a list of all libraries +*/ +static void addtoclib (lua_State *L, const char *path, void *plib) { + lua_rawgetp(L, LUA_REGISTRYINDEX, &CLIBS); + lua_pushlightuserdata(L, plib); + lua_pushvalue(L, -1); + lua_setfield(L, -3, path); /* CLIBS[path] = plib */ + lua_rawseti(L, -2, luaL_len(L, -2) + 1); /* CLIBS[#CLIBS + 1] = plib */ + lua_pop(L, 1); /* pop CLIBS table */ +} + + +/* +** __gc tag method for CLIBS table: calls 'lsys_unloadlib' for all lib +** handles in list CLIBS +*/ +static int gctm (lua_State *L) { + lua_Integer n = luaL_len(L, 1); + for (; n >= 1; n--) { /* for each handle, in reverse order */ + lua_rawgeti(L, 1, n); /* get handle CLIBS[n] */ + lsys_unloadlib(lua_touserdata(L, -1)); + lua_pop(L, 1); /* pop handle */ + } + return 0; +} + + + +/* error codes for 'lookforfunc' */ +#define ERRLIB 1 +#define ERRFUNC 2 + +/* +** Look for a C function named 'sym' in a dynamically loaded library +** 'path'. +** First, check whether the library is already loaded; if not, try +** to load it. +** Then, if 'sym' is '*', return true (as library has been loaded). +** Otherwise, look for symbol 'sym' in the library and push a +** C function with that symbol. +** Return 0 and 'true' or a function in the stack; in case of +** errors, return an error code and an error message in the stack. +*/ +static int lookforfunc (lua_State *L, const char *path, const char *sym) { + void *reg = checkclib(L, path); /* check loaded C libraries */ + if (reg == NULL) { /* must load library? */ + reg = lsys_load(L, path, *sym == '*'); /* global symbols if 'sym'=='*' */ + if (reg == NULL) return ERRLIB; /* unable to load library */ + addtoclib(L, path, reg); + } + if (*sym == '*') { /* loading only library (no function)? */ + lua_pushboolean(L, 1); /* return 'true' */ + return 0; /* no errors */ + } + else { + lua_CFunction f = lsys_sym(L, reg, sym); + if (f == NULL) + return ERRFUNC; /* unable to find function */ + lua_pushcfunction(L, f); /* else create new function */ + return 0; /* no errors */ + } +} + + +static int ll_loadlib (lua_State *L) { + const char *path = luaL_checkstring(L, 1); + const char *init = luaL_checkstring(L, 2); + int stat = lookforfunc(L, path, init); + if (stat == 0) /* no errors? */ + return 1; /* return the loaded function */ + else { /* error; error message is on stack top */ + lua_pushnil(L); + lua_insert(L, -2); + lua_pushstring(L, (stat == ERRLIB) ? LIB_FAIL : "init"); + return 3; /* return nil, error message, and where */ + } +} + + + +/* +** {====================================================== +** 'require' function +** ======================================================= +*/ + + +static int readable (const char *filename) { + FILE *f = fopen(filename, "r"); /* try to open file */ + if (f == NULL) return 0; /* open failed */ + fclose(f); + return 1; +} + + +static const char *pushnexttemplate (lua_State *L, const char *path) { + const char *l; + while (*path == *LUA_PATH_SEP) path++; /* skip separators */ + if (*path == '\0') return NULL; /* no more templates */ + l = strchr(path, *LUA_PATH_SEP); /* find next separator */ + if (l == NULL) l = path + strlen(path); + lua_pushlstring(L, path, l - path); /* template */ + return l; +} + + +static const char *searchpath (lua_State *L, const char *name, + const char *path, + const char *sep, + const char *dirsep) { + luaL_Buffer msg; /* to build error message */ + luaL_buffinit(L, &msg); + if (*sep != '\0') /* non-empty separator? */ + name = luaL_gsub(L, name, sep, dirsep); /* replace it by 'dirsep' */ + while ((path = pushnexttemplate(L, path)) != NULL) { + const char *filename = luaL_gsub(L, lua_tostring(L, -1), + LUA_PATH_MARK, name); + lua_remove(L, -2); /* remove path template */ + if (readable(filename)) /* does file exist and is readable? */ + return filename; /* return that file name */ + lua_pushfstring(L, "\n\tno file '%s'", filename); + lua_remove(L, -2); /* remove file name */ + luaL_addvalue(&msg); /* concatenate error msg. entry */ + } + luaL_pushresult(&msg); /* create error message */ + return NULL; /* not found */ +} + + +static int ll_searchpath (lua_State *L) { + const char *f = searchpath(L, luaL_checkstring(L, 1), + luaL_checkstring(L, 2), + luaL_optstring(L, 3, "."), + luaL_optstring(L, 4, LUA_DIRSEP)); + if (f != NULL) return 1; + else { /* error message is on top of the stack */ + lua_pushnil(L); + lua_insert(L, -2); + return 2; /* return nil + error message */ + } +} + + +static const char *findfile (lua_State *L, const char *name, + const char *pname, + const char *dirsep) { + const char *path; + lua_getfield(L, lua_upvalueindex(1), pname); + path = lua_tostring(L, -1); + if (path == NULL) + luaL_error(L, "'package.%s' must be a string", pname); + return searchpath(L, name, path, ".", dirsep); +} + + +static int checkload (lua_State *L, int stat, const char *filename) { + if (stat) { /* module loaded successfully? */ + lua_pushstring(L, filename); /* will be 2nd argument to module */ + return 2; /* return open function and file name */ + } + else + return luaL_error(L, "error loading module '%s' from file '%s':\n\t%s", + lua_tostring(L, 1), filename, lua_tostring(L, -1)); +} + + +static int searcher_Lua (lua_State *L) { + const char *filename; + const char *name = luaL_checkstring(L, 1); + filename = findfile(L, name, "path", LUA_LSUBSEP); + if (filename == NULL) return 1; /* module not found in this path */ + return checkload(L, (luaL_loadfile(L, filename) == LUA_OK), filename); +} + + +/* +** Try to find a load function for module 'modname' at file 'filename'. +** First, change '.' to '_' in 'modname'; then, if 'modname' has +** the form X-Y (that is, it has an "ignore mark"), build a function +** name "luaopen_X" and look for it. (For compatibility, if that +** fails, it also tries "luaopen_Y".) If there is no ignore mark, +** look for a function named "luaopen_modname". +*/ +static int loadfunc (lua_State *L, const char *filename, const char *modname) { + const char *openfunc; + const char *mark; + modname = luaL_gsub(L, modname, ".", LUA_OFSEP); + mark = strchr(modname, *LUA_IGMARK); + if (mark) { + int stat; + openfunc = lua_pushlstring(L, modname, mark - modname); + openfunc = lua_pushfstring(L, LUA_POF"%s", openfunc); + stat = lookforfunc(L, filename, openfunc); + if (stat != ERRFUNC) return stat; + modname = mark + 1; /* else go ahead and try old-style name */ + } + openfunc = lua_pushfstring(L, LUA_POF"%s", modname); + return lookforfunc(L, filename, openfunc); +} + + +static int searcher_C (lua_State *L) { + const char *name = luaL_checkstring(L, 1); + const char *filename = findfile(L, name, "cpath", LUA_CSUBSEP); + if (filename == NULL) return 1; /* module not found in this path */ + return checkload(L, (loadfunc(L, filename, name) == 0), filename); +} + + +static int searcher_Croot (lua_State *L) { + const char *filename; + const char *name = luaL_checkstring(L, 1); + const char *p = strchr(name, '.'); + int stat; + if (p == NULL) return 0; /* is root */ + lua_pushlstring(L, name, p - name); + filename = findfile(L, lua_tostring(L, -1), "cpath", LUA_CSUBSEP); + if (filename == NULL) return 1; /* root not found */ + if ((stat = loadfunc(L, filename, name)) != 0) { + if (stat != ERRFUNC) + return checkload(L, 0, filename); /* real error */ + else { /* open function not found */ + lua_pushfstring(L, "\n\tno module '%s' in file '%s'", name, filename); + return 1; + } + } + lua_pushstring(L, filename); /* will be 2nd argument to module */ + return 2; +} + + +static int searcher_preload (lua_State *L) { + const char *name = luaL_checkstring(L, 1); + lua_getfield(L, LUA_REGISTRYINDEX, LUA_PRELOAD_TABLE); + if (lua_getfield(L, -1, name) == LUA_TNIL) /* not found? */ + lua_pushfstring(L, "\n\tno field package.preload['%s']", name); + return 1; +} + + +static void findloader (lua_State *L, const char *name) { + int i; + luaL_Buffer msg; /* to build error message */ + luaL_buffinit(L, &msg); + /* push 'package.searchers' to index 3 in the stack */ + if (lua_getfield(L, lua_upvalueindex(1), "searchers") != LUA_TTABLE) + luaL_error(L, "'package.searchers' must be a table"); + /* iterate over available searchers to find a loader */ + for (i = 1; ; i++) { + if (lua_rawgeti(L, 3, i) == LUA_TNIL) { /* no more searchers? */ + lua_pop(L, 1); /* remove nil */ + luaL_pushresult(&msg); /* create error message */ + luaL_error(L, "module '%s' not found:%s", name, lua_tostring(L, -1)); + } + lua_pushstring(L, name); + lua_call(L, 1, 2); /* call it */ + if (lua_isfunction(L, -2)) /* did it find a loader? */ + return; /* module loader found */ + else if (lua_isstring(L, -2)) { /* searcher returned error message? */ + lua_pop(L, 1); /* remove extra return */ + luaL_addvalue(&msg); /* concatenate error message */ + } + else + lua_pop(L, 2); /* remove both returns */ + } +} + + +static int ll_require (lua_State *L) { + const char *name = luaL_checkstring(L, 1); + lua_settop(L, 1); /* LOADED table will be at index 2 */ + lua_getfield(L, LUA_REGISTRYINDEX, LUA_LOADED_TABLE); + lua_getfield(L, 2, name); /* LOADED[name] */ + if (lua_toboolean(L, -1)) /* is it there? */ + return 1; /* package is already loaded */ + /* else must load package */ + lua_pop(L, 1); /* remove 'getfield' result */ + findloader(L, name); + lua_pushstring(L, name); /* pass name as argument to module loader */ + lua_insert(L, -2); /* name is 1st argument (before search data) */ + lua_call(L, 2, 1); /* run loader to load module */ + if (!lua_isnil(L, -1)) /* non-nil return? */ + lua_setfield(L, 2, name); /* LOADED[name] = returned value */ + if (lua_getfield(L, 2, name) == LUA_TNIL) { /* module set no value? */ + lua_pushboolean(L, 1); /* use true as result */ + lua_pushvalue(L, -1); /* extra copy to be returned */ + lua_setfield(L, 2, name); /* LOADED[name] = true */ + } + return 1; +} + +/* }====================================================== */ + + + +/* +** {====================================================== +** 'module' function +** ======================================================= +*/ +#if defined(LUA_COMPAT_MODULE) + +/* +** changes the environment variable of calling function +*/ +static void set_env (lua_State *L) { + lua_Debug ar; + if (lua_getstack(L, 1, &ar) == 0 || + lua_getinfo(L, "f", &ar) == 0 || /* get calling function */ + lua_iscfunction(L, -1)) + luaL_error(L, "'module' not called from a Lua function"); + lua_pushvalue(L, -2); /* copy new environment table to top */ + lua_setupvalue(L, -2, 1); + lua_pop(L, 1); /* remove function */ +} + + +static void dooptions (lua_State *L, int n) { + int i; + for (i = 2; i <= n; i++) { + if (lua_isfunction(L, i)) { /* avoid 'calling' extra info. */ + lua_pushvalue(L, i); /* get option (a function) */ + lua_pushvalue(L, -2); /* module */ + lua_call(L, 1, 0); + } + } +} + + +static void modinit (lua_State *L, const char *modname) { + const char *dot; + lua_pushvalue(L, -1); + lua_setfield(L, -2, "_M"); /* module._M = module */ + lua_pushstring(L, modname); + lua_setfield(L, -2, "_NAME"); + dot = strrchr(modname, '.'); /* look for last dot in module name */ + if (dot == NULL) dot = modname; + else dot++; + /* set _PACKAGE as package name (full module name minus last part) */ + lua_pushlstring(L, modname, dot - modname); + lua_setfield(L, -2, "_PACKAGE"); +} + + +static int ll_module (lua_State *L) { + const char *modname = luaL_checkstring(L, 1); + int lastarg = lua_gettop(L); /* last parameter */ + luaL_pushmodule(L, modname, 1); /* get/create module table */ + /* check whether table already has a _NAME field */ + if (lua_getfield(L, -1, "_NAME") != LUA_TNIL) + lua_pop(L, 1); /* table is an initialized module */ + else { /* no; initialize it */ + lua_pop(L, 1); + modinit(L, modname); + } + lua_pushvalue(L, -1); + set_env(L); + dooptions(L, lastarg); + return 1; +} + + +static int ll_seeall (lua_State *L) { + luaL_checktype(L, 1, LUA_TTABLE); + if (!lua_getmetatable(L, 1)) { + lua_createtable(L, 0, 1); /* create new metatable */ + lua_pushvalue(L, -1); + lua_setmetatable(L, 1); + } + lua_pushglobaltable(L); + lua_setfield(L, -2, "__index"); /* mt.__index = _G */ + return 0; +} + +#endif +/* }====================================================== */ + + + +static const luaL_Reg pk_funcs[] = { + {"loadlib", ll_loadlib}, + {"searchpath", ll_searchpath}, +#if defined(LUA_COMPAT_MODULE) + {"seeall", ll_seeall}, +#endif + /* placeholders */ + {"preload", NULL}, + {"cpath", NULL}, + {"path", NULL}, + {"searchers", NULL}, + {"loaded", NULL}, + {NULL, NULL} +}; + + +static const luaL_Reg ll_funcs[] = { +#if defined(LUA_COMPAT_MODULE) + {"module", ll_module}, +#endif + {"require", ll_require}, + {NULL, NULL} +}; + + +static void createsearcherstable (lua_State *L) { + static const lua_CFunction searchers[] = + {searcher_preload, searcher_Lua, searcher_C, searcher_Croot, NULL}; + int i; + /* create 'searchers' table */ + lua_createtable(L, sizeof(searchers)/sizeof(searchers[0]) - 1, 0); + /* fill it with predefined searchers */ + for (i=0; searchers[i] != NULL; i++) { + lua_pushvalue(L, -2); /* set 'package' as upvalue for all searchers */ + lua_pushcclosure(L, searchers[i], 1); + lua_rawseti(L, -2, i+1); + } +#if defined(LUA_COMPAT_LOADERS) + lua_pushvalue(L, -1); /* make a copy of 'searchers' table */ + lua_setfield(L, -3, "loaders"); /* put it in field 'loaders' */ +#endif + lua_setfield(L, -2, "searchers"); /* put it in field 'searchers' */ +} + + +/* +** create table CLIBS to keep track of loaded C libraries, +** setting a finalizer to close all libraries when closing state. +*/ +static void createclibstable (lua_State *L) { + lua_newtable(L); /* create CLIBS table */ + lua_createtable(L, 0, 1); /* create metatable for CLIBS */ + lua_pushcfunction(L, gctm); + lua_setfield(L, -2, "__gc"); /* set finalizer for CLIBS table */ + lua_setmetatable(L, -2); + lua_rawsetp(L, LUA_REGISTRYINDEX, &CLIBS); /* set CLIBS table in registry */ +} + + +LUAMOD_API int luaopen_package (lua_State *L) { + createclibstable(L); + luaL_newlib(L, pk_funcs); /* create 'package' table */ + createsearcherstable(L); + /* set paths */ + setpath(L, "path", LUA_PATH_VAR, LUA_PATH_DEFAULT); + setpath(L, "cpath", LUA_CPATH_VAR, LUA_CPATH_DEFAULT); + /* store config information */ + lua_pushliteral(L, LUA_DIRSEP "\n" LUA_PATH_SEP "\n" LUA_PATH_MARK "\n" + LUA_EXEC_DIR "\n" LUA_IGMARK "\n"); + lua_setfield(L, -2, "config"); + /* set field 'loaded' */ + luaL_getsubtable(L, LUA_REGISTRYINDEX, LUA_LOADED_TABLE); + lua_setfield(L, -2, "loaded"); + /* set field 'preload' */ + luaL_getsubtable(L, LUA_REGISTRYINDEX, LUA_PRELOAD_TABLE); + lua_setfield(L, -2, "preload"); + lua_pushglobaltable(L); + lua_pushvalue(L, -2); /* set 'package' as upvalue for next lib */ + luaL_setfuncs(L, ll_funcs, 1); /* open lib into global table */ + lua_pop(L, 1); /* pop global table */ + return 1; /* return 'package' table */ +} + diff --git a/EQ2/source/LUA/lobject.c b/EQ2/source/LUA/lobject.c new file mode 100644 index 000000000..2da76899a --- /dev/null +++ b/EQ2/source/LUA/lobject.c @@ -0,0 +1,521 @@ +/* +** $Id: lobject.c,v 2.113 2016/12/22 13:08:50 roberto Exp $ +** Some generic functions over Lua objects +** See Copyright Notice in lua.h +*/ + +#define lobject_c +#define LUA_CORE + +#include "lprefix.h" + + +#include +#include +#include +#include +#include +#include + +#include "lua.h" + +#include "lctype.h" +#include "ldebug.h" +#include "ldo.h" +#include "lmem.h" +#include "lobject.h" +#include "lstate.h" +#include "lstring.h" +#include "lvm.h" + + + +LUAI_DDEF const TValue luaO_nilobject_ = {NILCONSTANT}; + + +/* +** converts an integer to a "floating point byte", represented as +** (eeeeexxx), where the real value is (1xxx) * 2^(eeeee - 1) if +** eeeee != 0 and (xxx) otherwise. +*/ +int luaO_int2fb (unsigned int x) { + int e = 0; /* exponent */ + if (x < 8) return x; + while (x >= (8 << 4)) { /* coarse steps */ + x = (x + 0xf) >> 4; /* x = ceil(x / 16) */ + e += 4; + } + while (x >= (8 << 1)) { /* fine steps */ + x = (x + 1) >> 1; /* x = ceil(x / 2) */ + e++; + } + return ((e+1) << 3) | (cast_int(x) - 8); +} + + +/* converts back */ +int luaO_fb2int (int x) { + return (x < 8) ? x : ((x & 7) + 8) << ((x >> 3) - 1); +} + + +/* +** Computes ceil(log2(x)) +*/ +int luaO_ceillog2 (unsigned int x) { + static const lu_byte log_2[256] = { /* log_2[i] = ceil(log2(i - 1)) */ + 0,1,2,2,3,3,3,3,4,4,4,4,4,4,4,4,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, + 6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6, + 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, + 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, + 8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8, + 8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8, + 8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8, + 8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8 + }; + int l = 0; + x--; + while (x >= 256) { l += 8; x >>= 8; } + return l + log_2[x]; +} + + +static lua_Integer intarith (lua_State *L, int op, lua_Integer v1, + lua_Integer v2) { + switch (op) { + case LUA_OPADD: return intop(+, v1, v2); + case LUA_OPSUB:return intop(-, v1, v2); + case LUA_OPMUL:return intop(*, v1, v2); + case LUA_OPMOD: return luaV_mod(L, v1, v2); + case LUA_OPIDIV: return luaV_div(L, v1, v2); + case LUA_OPBAND: return intop(&, v1, v2); + case LUA_OPBOR: return intop(|, v1, v2); + case LUA_OPBXOR: return intop(^, v1, v2); + case LUA_OPSHL: return luaV_shiftl(v1, v2); + case LUA_OPSHR: return luaV_shiftl(v1, -v2); + case LUA_OPUNM: return intop(-, 0, v1); + case LUA_OPBNOT: return intop(^, ~l_castS2U(0), v1); + default: lua_assert(0); return 0; + } +} + + +static lua_Number numarith (lua_State *L, int op, lua_Number v1, + lua_Number v2) { + switch (op) { + case LUA_OPADD: return luai_numadd(L, v1, v2); + case LUA_OPSUB: return luai_numsub(L, v1, v2); + case LUA_OPMUL: return luai_nummul(L, v1, v2); + case LUA_OPDIV: return luai_numdiv(L, v1, v2); + case LUA_OPPOW: return luai_numpow(L, v1, v2); + case LUA_OPIDIV: return luai_numidiv(L, v1, v2); + case LUA_OPUNM: return luai_numunm(L, v1); + case LUA_OPMOD: { + lua_Number m; + luai_nummod(L, v1, v2, m); + return m; + } + default: lua_assert(0); return 0; + } +} + + +void luaO_arith (lua_State *L, int op, const TValue *p1, const TValue *p2, + TValue *res) { + switch (op) { + case LUA_OPBAND: case LUA_OPBOR: case LUA_OPBXOR: + case LUA_OPSHL: case LUA_OPSHR: + case LUA_OPBNOT: { /* operate only on integers */ + lua_Integer i1; lua_Integer i2; + if (tointeger(p1, &i1) && tointeger(p2, &i2)) { + setivalue(res, intarith(L, op, i1, i2)); + return; + } + else break; /* go to the end */ + } + case LUA_OPDIV: case LUA_OPPOW: { /* operate only on floats */ + lua_Number n1; lua_Number n2; + if (tonumber(p1, &n1) && tonumber(p2, &n2)) { + setfltvalue(res, numarith(L, op, n1, n2)); + return; + } + else break; /* go to the end */ + } + default: { /* other operations */ + lua_Number n1; lua_Number n2; + if (ttisinteger(p1) && ttisinteger(p2)) { + setivalue(res, intarith(L, op, ivalue(p1), ivalue(p2))); + return; + } + else if (tonumber(p1, &n1) && tonumber(p2, &n2)) { + setfltvalue(res, numarith(L, op, n1, n2)); + return; + } + else break; /* go to the end */ + } + } + /* could not perform raw operation; try metamethod */ + lua_assert(L != NULL); /* should not fail when folding (compile time) */ + luaT_trybinTM(L, p1, p2, res, cast(TMS, (op - LUA_OPADD) + TM_ADD)); +} + + +int luaO_hexavalue (int c) { + if (lisdigit(c)) return c - '0'; + else return (ltolower(c) - 'a') + 10; +} + + +static int isneg (const char **s) { + if (**s == '-') { (*s)++; return 1; } + else if (**s == '+') (*s)++; + return 0; +} + + + +/* +** {================================================================== +** Lua's implementation for 'lua_strx2number' +** =================================================================== +*/ + +#if !defined(lua_strx2number) + +/* maximum number of significant digits to read (to avoid overflows + even with single floats) */ +#define MAXSIGDIG 30 + +/* +** convert an hexadecimal numeric string to a number, following +** C99 specification for 'strtod' +*/ +static lua_Number lua_strx2number (const char *s, char **endptr) { + int dot = lua_getlocaledecpoint(); + lua_Number r = 0.0; /* result (accumulator) */ + int sigdig = 0; /* number of significant digits */ + int nosigdig = 0; /* number of non-significant digits */ + int e = 0; /* exponent correction */ + int neg; /* 1 if number is negative */ + int hasdot = 0; /* true after seen a dot */ + *endptr = cast(char *, s); /* nothing is valid yet */ + while (lisspace(cast_uchar(*s))) s++; /* skip initial spaces */ + neg = isneg(&s); /* check signal */ + if (!(*s == '0' && (*(s + 1) == 'x' || *(s + 1) == 'X'))) /* check '0x' */ + return 0.0; /* invalid format (no '0x') */ + for (s += 2; ; s++) { /* skip '0x' and read numeral */ + if (*s == dot) { + if (hasdot) break; /* second dot? stop loop */ + else hasdot = 1; + } + else if (lisxdigit(cast_uchar(*s))) { + if (sigdig == 0 && *s == '0') /* non-significant digit (zero)? */ + nosigdig++; + else if (++sigdig <= MAXSIGDIG) /* can read it without overflow? */ + r = (r * cast_num(16.0)) + luaO_hexavalue(*s); + else e++; /* too many digits; ignore, but still count for exponent */ + if (hasdot) e--; /* decimal digit? correct exponent */ + } + else break; /* neither a dot nor a digit */ + } + if (nosigdig + sigdig == 0) /* no digits? */ + return 0.0; /* invalid format */ + *endptr = cast(char *, s); /* valid up to here */ + e *= 4; /* each digit multiplies/divides value by 2^4 */ + if (*s == 'p' || *s == 'P') { /* exponent part? */ + int exp1 = 0; /* exponent value */ + int neg1; /* exponent signal */ + s++; /* skip 'p' */ + neg1 = isneg(&s); /* signal */ + if (!lisdigit(cast_uchar(*s))) + return 0.0; /* invalid; must have at least one digit */ + while (lisdigit(cast_uchar(*s))) /* read exponent */ + exp1 = exp1 * 10 + *(s++) - '0'; + if (neg1) exp1 = -exp1; + e += exp1; + *endptr = cast(char *, s); /* valid up to here */ + } + if (neg) r = -r; + return l_mathop(ldexp)(r, e); +} + +#endif +/* }====================================================== */ + + +/* maximum length of a numeral */ +#if !defined (L_MAXLENNUM) +#define L_MAXLENNUM 200 +#endif + +static const char *l_str2dloc (const char *s, lua_Number *result, int mode) { + char *endptr; + *result = (mode == 'x') ? lua_strx2number(s, &endptr) /* try to convert */ + : lua_str2number(s, &endptr); + if (endptr == s) return NULL; /* nothing recognized? */ + while (lisspace(cast_uchar(*endptr))) endptr++; /* skip trailing spaces */ + return (*endptr == '\0') ? endptr : NULL; /* OK if no trailing characters */ +} + + +/* +** Convert string 's' to a Lua number (put in 'result'). Return NULL +** on fail or the address of the ending '\0' on success. +** 'pmode' points to (and 'mode' contains) special things in the string: +** - 'x'/'X' means an hexadecimal numeral +** - 'n'/'N' means 'inf' or 'nan' (which should be rejected) +** - '.' just optimizes the search for the common case (nothing special) +** This function accepts both the current locale or a dot as the radix +** mark. If the convertion fails, it may mean number has a dot but +** locale accepts something else. In that case, the code copies 's' +** to a buffer (because 's' is read-only), changes the dot to the +** current locale radix mark, and tries to convert again. +*/ +static const char *l_str2d (const char *s, lua_Number *result) { + const char *endptr; + const char *pmode = strpbrk(s, ".xXnN"); + int mode = pmode ? ltolower(cast_uchar(*pmode)) : 0; + if (mode == 'n') /* reject 'inf' and 'nan' */ + return NULL; + endptr = l_str2dloc(s, result, mode); /* try to convert */ + if (endptr == NULL) { /* failed? may be a different locale */ + char buff[L_MAXLENNUM + 1]; + const char *pdot = strchr(s, '.'); + if (strlen(s) > L_MAXLENNUM || pdot == NULL) + return NULL; /* string too long or no dot; fail */ + strcpy(buff, s); /* copy string to buffer */ + buff[pdot - s] = lua_getlocaledecpoint(); /* correct decimal point */ + endptr = l_str2dloc(buff, result, mode); /* try again */ + if (endptr != NULL) + endptr = s + (endptr - buff); /* make relative to 's' */ + } + return endptr; +} + + +#define MAXBY10 cast(lua_Unsigned, LUA_MAXINTEGER / 10) +#define MAXLASTD cast_int(LUA_MAXINTEGER % 10) + +static const char *l_str2int (const char *s, lua_Integer *result) { + lua_Unsigned a = 0; + int empty = 1; + int neg; + while (lisspace(cast_uchar(*s))) s++; /* skip initial spaces */ + neg = isneg(&s); + if (s[0] == '0' && + (s[1] == 'x' || s[1] == 'X')) { /* hex? */ + s += 2; /* skip '0x' */ + for (; lisxdigit(cast_uchar(*s)); s++) { + a = a * 16 + luaO_hexavalue(*s); + empty = 0; + } + } + else { /* decimal */ + for (; lisdigit(cast_uchar(*s)); s++) { + int d = *s - '0'; + if (a >= MAXBY10 && (a > MAXBY10 || d > MAXLASTD + neg)) /* overflow? */ + return NULL; /* do not accept it (as integer) */ + a = a * 10 + d; + empty = 0; + } + } + while (lisspace(cast_uchar(*s))) s++; /* skip trailing spaces */ + if (empty || *s != '\0') return NULL; /* something wrong in the numeral */ + else { + *result = l_castU2S((neg) ? 0u - a : a); + return s; + } +} + + +size_t luaO_str2num (const char *s, TValue *o) { + lua_Integer i; lua_Number n; + const char *e; + if ((e = l_str2int(s, &i)) != NULL) { /* try as an integer */ + setivalue(o, i); + } + else if ((e = l_str2d(s, &n)) != NULL) { /* else try as a float */ + setfltvalue(o, n); + } + else + return 0; /* conversion failed */ + return (e - s) + 1; /* success; return string size */ +} + + +int luaO_utf8esc (char *buff, unsigned long x) { + int n = 1; /* number of bytes put in buffer (backwards) */ + lua_assert(x <= 0x10FFFF); + if (x < 0x80) /* ascii? */ + buff[UTF8BUFFSZ - 1] = cast(char, x); + else { /* need continuation bytes */ + unsigned int mfb = 0x3f; /* maximum that fits in first byte */ + do { /* add continuation bytes */ + buff[UTF8BUFFSZ - (n++)] = cast(char, 0x80 | (x & 0x3f)); + x >>= 6; /* remove added bits */ + mfb >>= 1; /* now there is one less bit available in first byte */ + } while (x > mfb); /* still needs continuation byte? */ + buff[UTF8BUFFSZ - n] = cast(char, (~mfb << 1) | x); /* add first byte */ + } + return n; +} + + +/* maximum length of the conversion of a number to a string */ +#define MAXNUMBER2STR 50 + + +/* +** Convert a number object to a string +*/ +void luaO_tostring (lua_State *L, StkId obj) { + char buff[MAXNUMBER2STR]; + size_t len; + lua_assert(ttisnumber(obj)); + if (ttisinteger(obj)) + len = lua_integer2str(buff, sizeof(buff), ivalue(obj)); + else { + len = lua_number2str(buff, sizeof(buff), fltvalue(obj)); +#if !defined(LUA_COMPAT_FLOATSTRING) + if (buff[strspn(buff, "-0123456789")] == '\0') { /* looks like an int? */ + buff[len++] = lua_getlocaledecpoint(); + buff[len++] = '0'; /* adds '.0' to result */ + } +#endif + } + setsvalue2s(L, obj, luaS_newlstr(L, buff, len)); +} + + +static void pushstr (lua_State *L, const char *str, size_t l) { + setsvalue2s(L, L->top, luaS_newlstr(L, str, l)); + luaD_inctop(L); +} + + +/* +** this function handles only '%d', '%c', '%f', '%p', and '%s' + conventional formats, plus Lua-specific '%I' and '%U' +*/ +const char *luaO_pushvfstring (lua_State *L, const char *fmt, va_list argp) { + int n = 0; + for (;;) { + const char *e = strchr(fmt, '%'); + if (e == NULL) break; + pushstr(L, fmt, e - fmt); + switch (*(e+1)) { + case 's': { /* zero-terminated string */ + const char *s = va_arg(argp, char *); + if (s == NULL) s = "(null)"; + pushstr(L, s, strlen(s)); + break; + } + case 'c': { /* an 'int' as a character */ + char buff = cast(char, va_arg(argp, int)); + if (lisprint(cast_uchar(buff))) + pushstr(L, &buff, 1); + else /* non-printable character; print its code */ + luaO_pushfstring(L, "<\\%d>", cast_uchar(buff)); + break; + } + case 'd': { /* an 'int' */ + setivalue(L->top, va_arg(argp, int)); + goto top2str; + } + case 'I': { /* a 'lua_Integer' */ + setivalue(L->top, cast(lua_Integer, va_arg(argp, l_uacInt))); + goto top2str; + } + case 'f': { /* a 'lua_Number' */ + setfltvalue(L->top, cast_num(va_arg(argp, l_uacNumber))); + top2str: /* convert the top element to a string */ + luaD_inctop(L); + luaO_tostring(L, L->top - 1); + break; + } + case 'p': { /* a pointer */ + char buff[4*sizeof(void *) + 8]; /* should be enough space for a '%p' */ + int l = l_sprintf(buff, sizeof(buff), "%p", va_arg(argp, void *)); + pushstr(L, buff, l); + break; + } + case 'U': { /* an 'int' as a UTF-8 sequence */ + char buff[UTF8BUFFSZ]; + int l = luaO_utf8esc(buff, cast(long, va_arg(argp, long))); + pushstr(L, buff + UTF8BUFFSZ - l, l); + break; + } + case '%': { + pushstr(L, "%", 1); + break; + } + default: { + luaG_runerror(L, "invalid option '%%%c' to 'lua_pushfstring'", + *(e + 1)); + } + } + n += 2; + fmt = e+2; + } + luaD_checkstack(L, 1); + pushstr(L, fmt, strlen(fmt)); + if (n > 0) luaV_concat(L, n + 1); + return svalue(L->top - 1); +} + + +const char *luaO_pushfstring (lua_State *L, const char *fmt, ...) { + const char *msg; + va_list argp; + va_start(argp, fmt); + msg = luaO_pushvfstring(L, fmt, argp); + va_end(argp); + return msg; +} + + +/* number of chars of a literal string without the ending \0 */ +#define LL(x) (sizeof(x)/sizeof(char) - 1) + +#define RETS "..." +#define PRE "[string \"" +#define POS "\"]" + +#define addstr(a,b,l) ( memcpy(a,b,(l) * sizeof(char)), a += (l) ) + +void luaO_chunkid (char *out, const char *source, size_t bufflen) { + size_t l = strlen(source); + if (*source == '=') { /* 'literal' source */ + if (l <= bufflen) /* small enough? */ + memcpy(out, source + 1, l * sizeof(char)); + else { /* truncate it */ + addstr(out, source + 1, bufflen - 1); + *out = '\0'; + } + } + else if (*source == '@') { /* file name */ + if (l <= bufflen) /* small enough? */ + memcpy(out, source + 1, l * sizeof(char)); + else { /* add '...' before rest of name */ + addstr(out, RETS, LL(RETS)); + bufflen -= LL(RETS); + memcpy(out, source + 1 + l - bufflen, bufflen * sizeof(char)); + } + } + else { /* string; format as [string "source"] */ + const char *nl = strchr(source, '\n'); /* find first new line (if any) */ + addstr(out, PRE, LL(PRE)); /* add prefix */ + bufflen -= LL(PRE RETS POS) + 1; /* save space for prefix+suffix+'\0' */ + if (l < bufflen && nl == NULL) { /* small one-line source? */ + addstr(out, source, l); /* keep it */ + } + else { + if (nl != NULL) l = nl - source; /* stop at first newline */ + if (l > bufflen) l = bufflen; + addstr(out, source, l); + addstr(out, RETS, LL(RETS)); + } + memcpy(out, POS, (LL(POS) + 1) * sizeof(char)); + } +} + diff --git a/EQ2/source/LUA/lobject.h b/EQ2/source/LUA/lobject.h new file mode 100644 index 000000000..3c0422894 --- /dev/null +++ b/EQ2/source/LUA/lobject.h @@ -0,0 +1,549 @@ +/* +** $Id: lobject.h,v 2.117 2016/08/01 19:51:24 roberto Exp $ +** Type definitions for Lua objects +** See Copyright Notice in lua.h +*/ + + +#ifndef lobject_h +#define lobject_h + + +#include + + +#include "llimits.h" +#include "lua.h" + + +/* +** Extra tags for non-values +*/ +#define LUA_TPROTO LUA_NUMTAGS /* function prototypes */ +#define LUA_TDEADKEY (LUA_NUMTAGS+1) /* removed keys in tables */ + +/* +** number of all possible tags (including LUA_TNONE but excluding DEADKEY) +*/ +#define LUA_TOTALTAGS (LUA_TPROTO + 2) + + +/* +** tags for Tagged Values have the following use of bits: +** bits 0-3: actual tag (a LUA_T* value) +** bits 4-5: variant bits +** bit 6: whether value is collectable +*/ + + +/* +** LUA_TFUNCTION variants: +** 0 - Lua function +** 1 - light C function +** 2 - regular C function (closure) +*/ + +/* Variant tags for functions */ +#define LUA_TLCL (LUA_TFUNCTION | (0 << 4)) /* Lua closure */ +#define LUA_TLCF (LUA_TFUNCTION | (1 << 4)) /* light C function */ +#define LUA_TCCL (LUA_TFUNCTION | (2 << 4)) /* C closure */ + + +/* Variant tags for strings */ +#define LUA_TSHRSTR (LUA_TSTRING | (0 << 4)) /* short strings */ +#define LUA_TLNGSTR (LUA_TSTRING | (1 << 4)) /* long strings */ + + +/* Variant tags for numbers */ +#define LUA_TNUMFLT (LUA_TNUMBER | (0 << 4)) /* float numbers */ +#define LUA_TNUMINT (LUA_TNUMBER | (1 << 4)) /* integer numbers */ + + +/* Bit mark for collectable types */ +#define BIT_ISCOLLECTABLE (1 << 6) + +/* mark a tag as collectable */ +#define ctb(t) ((t) | BIT_ISCOLLECTABLE) + + +/* +** Common type for all collectable objects +*/ +typedef struct GCObject GCObject; + + +/* +** Common Header for all collectable objects (in macro form, to be +** included in other objects) +*/ +#define CommonHeader GCObject *next; lu_byte tt; lu_byte marked + + +/* +** Common type has only the common header +*/ +struct GCObject { + CommonHeader; +}; + + + + +/* +** Tagged Values. This is the basic representation of values in Lua, +** an actual value plus a tag with its type. +*/ + +/* +** Union of all Lua values +*/ +typedef union Value { + GCObject *gc; /* collectable objects */ + void *p; /* light userdata */ + int b; /* booleans */ + lua_CFunction f; /* light C functions */ + lua_Integer i; /* integer numbers */ + lua_Number n; /* float numbers */ +} Value; + + +#define TValuefields Value value_; int tt_ + + +typedef struct lua_TValue { + TValuefields; +} TValue; + + + +/* macro defining a nil value */ +#define NILCONSTANT {NULL}, LUA_TNIL + + +#define val_(o) ((o)->value_) + + +/* raw type tag of a TValue */ +#define rttype(o) ((o)->tt_) + +/* tag with no variants (bits 0-3) */ +#define novariant(x) ((x) & 0x0F) + +/* type tag of a TValue (bits 0-3 for tags + variant bits 4-5) */ +#define ttype(o) (rttype(o) & 0x3F) + +/* type tag of a TValue with no variants (bits 0-3) */ +#define ttnov(o) (novariant(rttype(o))) + + +/* Macros to test type */ +#define checktag(o,t) (rttype(o) == (t)) +#define checktype(o,t) (ttnov(o) == (t)) +#define ttisnumber(o) checktype((o), LUA_TNUMBER) +#define ttisfloat(o) checktag((o), LUA_TNUMFLT) +#define ttisinteger(o) checktag((o), LUA_TNUMINT) +#define ttisnil(o) checktag((o), LUA_TNIL) +#define ttisboolean(o) checktag((o), LUA_TBOOLEAN) +#define ttislightuserdata(o) checktag((o), LUA_TLIGHTUSERDATA) +#define ttisstring(o) checktype((o), LUA_TSTRING) +#define ttisshrstring(o) checktag((o), ctb(LUA_TSHRSTR)) +#define ttislngstring(o) checktag((o), ctb(LUA_TLNGSTR)) +#define ttistable(o) checktag((o), ctb(LUA_TTABLE)) +#define ttisfunction(o) checktype(o, LUA_TFUNCTION) +#define ttisclosure(o) ((rttype(o) & 0x1F) == LUA_TFUNCTION) +#define ttisCclosure(o) checktag((o), ctb(LUA_TCCL)) +#define ttisLclosure(o) checktag((o), ctb(LUA_TLCL)) +#define ttislcf(o) checktag((o), LUA_TLCF) +#define ttisfulluserdata(o) checktag((o), ctb(LUA_TUSERDATA)) +#define ttisthread(o) checktag((o), ctb(LUA_TTHREAD)) +#define ttisdeadkey(o) checktag((o), LUA_TDEADKEY) + + +/* Macros to access values */ +#define ivalue(o) check_exp(ttisinteger(o), val_(o).i) +#define fltvalue(o) check_exp(ttisfloat(o), val_(o).n) +#define nvalue(o) check_exp(ttisnumber(o), \ + (ttisinteger(o) ? cast_num(ivalue(o)) : fltvalue(o))) +#define gcvalue(o) check_exp(iscollectable(o), val_(o).gc) +#define pvalue(o) check_exp(ttislightuserdata(o), val_(o).p) +#define tsvalue(o) check_exp(ttisstring(o), gco2ts(val_(o).gc)) +#define uvalue(o) check_exp(ttisfulluserdata(o), gco2u(val_(o).gc)) +#define clvalue(o) check_exp(ttisclosure(o), gco2cl(val_(o).gc)) +#define clLvalue(o) check_exp(ttisLclosure(o), gco2lcl(val_(o).gc)) +#define clCvalue(o) check_exp(ttisCclosure(o), gco2ccl(val_(o).gc)) +#define fvalue(o) check_exp(ttislcf(o), val_(o).f) +#define hvalue(o) check_exp(ttistable(o), gco2t(val_(o).gc)) +#define bvalue(o) check_exp(ttisboolean(o), val_(o).b) +#define thvalue(o) check_exp(ttisthread(o), gco2th(val_(o).gc)) +/* a dead value may get the 'gc' field, but cannot access its contents */ +#define deadvalue(o) check_exp(ttisdeadkey(o), cast(void *, val_(o).gc)) + +#define l_isfalse(o) (ttisnil(o) || (ttisboolean(o) && bvalue(o) == 0)) + + +#define iscollectable(o) (rttype(o) & BIT_ISCOLLECTABLE) + + +/* Macros for internal tests */ +#define righttt(obj) (ttype(obj) == gcvalue(obj)->tt) + +#define checkliveness(L,obj) \ + lua_longassert(!iscollectable(obj) || \ + (righttt(obj) && (L == NULL || !isdead(G(L),gcvalue(obj))))) + + +/* Macros to set values */ +#define settt_(o,t) ((o)->tt_=(t)) + +#define setfltvalue(obj,x) \ + { TValue *io=(obj); val_(io).n=(x); settt_(io, LUA_TNUMFLT); } + +#define chgfltvalue(obj,x) \ + { TValue *io=(obj); lua_assert(ttisfloat(io)); val_(io).n=(x); } + +#define setivalue(obj,x) \ + { TValue *io=(obj); val_(io).i=(x); settt_(io, LUA_TNUMINT); } + +#define chgivalue(obj,x) \ + { TValue *io=(obj); lua_assert(ttisinteger(io)); val_(io).i=(x); } + +#define setnilvalue(obj) settt_(obj, LUA_TNIL) + +#define setfvalue(obj,x) \ + { TValue *io=(obj); val_(io).f=(x); settt_(io, LUA_TLCF); } + +#define setpvalue(obj,x) \ + { TValue *io=(obj); val_(io).p=(x); settt_(io, LUA_TLIGHTUSERDATA); } + +#define setbvalue(obj,x) \ + { TValue *io=(obj); val_(io).b=(x); settt_(io, LUA_TBOOLEAN); } + +#define setgcovalue(L,obj,x) \ + { TValue *io = (obj); GCObject *i_g=(x); \ + val_(io).gc = i_g; settt_(io, ctb(i_g->tt)); } + +#define setsvalue(L,obj,x) \ + { TValue *io = (obj); TString *x_ = (x); \ + val_(io).gc = obj2gco(x_); settt_(io, ctb(x_->tt)); \ + checkliveness(L,io); } + +#define setuvalue(L,obj,x) \ + { TValue *io = (obj); Udata *x_ = (x); \ + val_(io).gc = obj2gco(x_); settt_(io, ctb(LUA_TUSERDATA)); \ + checkliveness(L,io); } + +#define setthvalue(L,obj,x) \ + { TValue *io = (obj); lua_State *x_ = (x); \ + val_(io).gc = obj2gco(x_); settt_(io, ctb(LUA_TTHREAD)); \ + checkliveness(L,io); } + +#define setclLvalue(L,obj,x) \ + { TValue *io = (obj); LClosure *x_ = (x); \ + val_(io).gc = obj2gco(x_); settt_(io, ctb(LUA_TLCL)); \ + checkliveness(L,io); } + +#define setclCvalue(L,obj,x) \ + { TValue *io = (obj); CClosure *x_ = (x); \ + val_(io).gc = obj2gco(x_); settt_(io, ctb(LUA_TCCL)); \ + checkliveness(L,io); } + +#define sethvalue(L,obj,x) \ + { TValue *io = (obj); Table *x_ = (x); \ + val_(io).gc = obj2gco(x_); settt_(io, ctb(LUA_TTABLE)); \ + checkliveness(L,io); } + +#define setdeadvalue(obj) settt_(obj, LUA_TDEADKEY) + + + +#define setobj(L,obj1,obj2) \ + { TValue *io1=(obj1); *io1 = *(obj2); \ + (void)L; checkliveness(L,io1); } + + +/* +** different types of assignments, according to destination +*/ + +/* from stack to (same) stack */ +#define setobjs2s setobj +/* to stack (not from same stack) */ +#define setobj2s setobj +#define setsvalue2s setsvalue +#define sethvalue2s sethvalue +#define setptvalue2s setptvalue +/* from table to same table */ +#define setobjt2t setobj +/* to new object */ +#define setobj2n setobj +#define setsvalue2n setsvalue + +/* to table (define it as an expression to be used in macros) */ +#define setobj2t(L,o1,o2) ((void)L, *(o1)=*(o2), checkliveness(L,(o1))) + + + + +/* +** {====================================================== +** types and prototypes +** ======================================================= +*/ + + +typedef TValue *StkId; /* index to stack elements */ + + + + +/* +** Header for string value; string bytes follow the end of this structure +** (aligned according to 'UTString'; see next). +*/ +typedef struct TString { + CommonHeader; + lu_byte extra; /* reserved words for short strings; "has hash" for longs */ + lu_byte shrlen; /* length for short strings */ + unsigned int hash; + union { + size_t lnglen; /* length for long strings */ + struct TString *hnext; /* linked list for hash table */ + } u; +} TString; + + +/* +** Ensures that address after this type is always fully aligned. +*/ +typedef union UTString { + L_Umaxalign dummy; /* ensures maximum alignment for strings */ + TString tsv; +} UTString; + + +/* +** Get the actual string (array of bytes) from a 'TString'. +** (Access to 'extra' ensures that value is really a 'TString'.) +*/ +#define getstr(ts) \ + check_exp(sizeof((ts)->extra), cast(char *, (ts)) + sizeof(UTString)) + + +/* get the actual string (array of bytes) from a Lua value */ +#define svalue(o) getstr(tsvalue(o)) + +/* get string length from 'TString *s' */ +#define tsslen(s) ((s)->tt == LUA_TSHRSTR ? (s)->shrlen : (s)->u.lnglen) + +/* get string length from 'TValue *o' */ +#define vslen(o) tsslen(tsvalue(o)) + + +/* +** Header for userdata; memory area follows the end of this structure +** (aligned according to 'UUdata'; see next). +*/ +typedef struct Udata { + CommonHeader; + lu_byte ttuv_; /* user value's tag */ + struct Table *metatable; + size_t len; /* number of bytes */ + union Value user_; /* user value */ +} Udata; + + +/* +** Ensures that address after this type is always fully aligned. +*/ +typedef union UUdata { + L_Umaxalign dummy; /* ensures maximum alignment for 'local' udata */ + Udata uv; +} UUdata; + + +/* +** Get the address of memory block inside 'Udata'. +** (Access to 'ttuv_' ensures that value is really a 'Udata'.) +*/ +#define getudatamem(u) \ + check_exp(sizeof((u)->ttuv_), (cast(char*, (u)) + sizeof(UUdata))) + +#define setuservalue(L,u,o) \ + { const TValue *io=(o); Udata *iu = (u); \ + iu->user_ = io->value_; iu->ttuv_ = rttype(io); \ + checkliveness(L,io); } + + +#define getuservalue(L,u,o) \ + { TValue *io=(o); const Udata *iu = (u); \ + io->value_ = iu->user_; settt_(io, iu->ttuv_); \ + checkliveness(L,io); } + + +/* +** Description of an upvalue for function prototypes +*/ +typedef struct Upvaldesc { + TString *name; /* upvalue name (for debug information) */ + lu_byte instack; /* whether it is in stack (register) */ + lu_byte idx; /* index of upvalue (in stack or in outer function's list) */ +} Upvaldesc; + + +/* +** Description of a local variable for function prototypes +** (used for debug information) +*/ +typedef struct LocVar { + TString *varname; + int startpc; /* first point where variable is active */ + int endpc; /* first point where variable is dead */ +} LocVar; + + +/* +** Function Prototypes +*/ +typedef struct Proto { + CommonHeader; + lu_byte numparams; /* number of fixed parameters */ + lu_byte is_vararg; + lu_byte maxstacksize; /* number of registers needed by this function */ + int sizeupvalues; /* size of 'upvalues' */ + int sizek; /* size of 'k' */ + int sizecode; + int sizelineinfo; + int sizep; /* size of 'p' */ + int sizelocvars; + int linedefined; /* debug information */ + int lastlinedefined; /* debug information */ + TValue *k; /* constants used by the function */ + Instruction *code; /* opcodes */ + struct Proto **p; /* functions defined inside the function */ + int *lineinfo; /* map from opcodes to source lines (debug information) */ + LocVar *locvars; /* information about local variables (debug information) */ + Upvaldesc *upvalues; /* upvalue information */ + struct LClosure *cache; /* last-created closure with this prototype */ + TString *source; /* used for debug information */ + GCObject *gclist; +} Proto; + + + +/* +** Lua Upvalues +*/ +typedef struct UpVal UpVal; + + +/* +** Closures +*/ + +#define ClosureHeader \ + CommonHeader; lu_byte nupvalues; GCObject *gclist + +typedef struct CClosure { + ClosureHeader; + lua_CFunction f; + TValue upvalue[1]; /* list of upvalues */ +} CClosure; + + +typedef struct LClosure { + ClosureHeader; + struct Proto *p; + UpVal *upvals[1]; /* list of upvalues */ +} LClosure; + + +typedef union Closure { + CClosure c; + LClosure l; +} Closure; + + +#define isLfunction(o) ttisLclosure(o) + +#define getproto(o) (clLvalue(o)->p) + + +/* +** Tables +*/ + +typedef union TKey { + struct { + TValuefields; + int next; /* for chaining (offset for next node) */ + } nk; + TValue tvk; +} TKey; + + +/* copy a value into a key without messing up field 'next' */ +#define setnodekey(L,key,obj) \ + { TKey *k_=(key); const TValue *io_=(obj); \ + k_->nk.value_ = io_->value_; k_->nk.tt_ = io_->tt_; \ + (void)L; checkliveness(L,io_); } + + +typedef struct Node { + TValue i_val; + TKey i_key; +} Node; + + +typedef struct Table { + CommonHeader; + lu_byte flags; /* 1<

lsizenode)) + + +/* +** (address of) a fixed nil value +*/ +#define luaO_nilobject (&luaO_nilobject_) + + +LUAI_DDEC const TValue luaO_nilobject_; + +/* size of buffer for 'luaO_utf8esc' function */ +#define UTF8BUFFSZ 8 + +LUAI_FUNC int luaO_int2fb (unsigned int x); +LUAI_FUNC int luaO_fb2int (int x); +LUAI_FUNC int luaO_utf8esc (char *buff, unsigned long x); +LUAI_FUNC int luaO_ceillog2 (unsigned int x); +LUAI_FUNC void luaO_arith (lua_State *L, int op, const TValue *p1, + const TValue *p2, TValue *res); +LUAI_FUNC size_t luaO_str2num (const char *s, TValue *o); +LUAI_FUNC int luaO_hexavalue (int c); +LUAI_FUNC void luaO_tostring (lua_State *L, StkId obj); +LUAI_FUNC const char *luaO_pushvfstring (lua_State *L, const char *fmt, + va_list argp); +LUAI_FUNC const char *luaO_pushfstring (lua_State *L, const char *fmt, ...); +LUAI_FUNC void luaO_chunkid (char *out, const char *source, size_t len); + + +#endif + diff --git a/EQ2/source/LUA/lopcodes.c b/EQ2/source/LUA/lopcodes.c new file mode 100644 index 000000000..a1cbef857 --- /dev/null +++ b/EQ2/source/LUA/lopcodes.c @@ -0,0 +1,124 @@ +/* +** $Id: lopcodes.c,v 1.55 2015/01/05 13:48:33 roberto Exp $ +** Opcodes for Lua virtual machine +** See Copyright Notice in lua.h +*/ + +#define lopcodes_c +#define LUA_CORE + +#include "lprefix.h" + + +#include + +#include "lopcodes.h" + + +/* ORDER OP */ + +LUAI_DDEF const char *const luaP_opnames[NUM_OPCODES+1] = { + "MOVE", + "LOADK", + "LOADKX", + "LOADBOOL", + "LOADNIL", + "GETUPVAL", + "GETTABUP", + "GETTABLE", + "SETTABUP", + "SETUPVAL", + "SETTABLE", + "NEWTABLE", + "SELF", + "ADD", + "SUB", + "MUL", + "MOD", + "POW", + "DIV", + "IDIV", + "BAND", + "BOR", + "BXOR", + "SHL", + "SHR", + "UNM", + "BNOT", + "NOT", + "LEN", + "CONCAT", + "JMP", + "EQ", + "LT", + "LE", + "TEST", + "TESTSET", + "CALL", + "TAILCALL", + "RETURN", + "FORLOOP", + "FORPREP", + "TFORCALL", + "TFORLOOP", + "SETLIST", + "CLOSURE", + "VARARG", + "EXTRAARG", + NULL +}; + + +#define opmode(t,a,b,c,m) (((t)<<7) | ((a)<<6) | ((b)<<4) | ((c)<<2) | (m)) + +LUAI_DDEF const lu_byte luaP_opmodes[NUM_OPCODES] = { +/* T A B C mode opcode */ + opmode(0, 1, OpArgR, OpArgN, iABC) /* OP_MOVE */ + ,opmode(0, 1, OpArgK, OpArgN, iABx) /* OP_LOADK */ + ,opmode(0, 1, OpArgN, OpArgN, iABx) /* OP_LOADKX */ + ,opmode(0, 1, OpArgU, OpArgU, iABC) /* OP_LOADBOOL */ + ,opmode(0, 1, OpArgU, OpArgN, iABC) /* OP_LOADNIL */ + ,opmode(0, 1, OpArgU, OpArgN, iABC) /* OP_GETUPVAL */ + ,opmode(0, 1, OpArgU, OpArgK, iABC) /* OP_GETTABUP */ + ,opmode(0, 1, OpArgR, OpArgK, iABC) /* OP_GETTABLE */ + ,opmode(0, 0, OpArgK, OpArgK, iABC) /* OP_SETTABUP */ + ,opmode(0, 0, OpArgU, OpArgN, iABC) /* OP_SETUPVAL */ + ,opmode(0, 0, OpArgK, OpArgK, iABC) /* OP_SETTABLE */ + ,opmode(0, 1, OpArgU, OpArgU, iABC) /* OP_NEWTABLE */ + ,opmode(0, 1, OpArgR, OpArgK, iABC) /* OP_SELF */ + ,opmode(0, 1, OpArgK, OpArgK, iABC) /* OP_ADD */ + ,opmode(0, 1, OpArgK, OpArgK, iABC) /* OP_SUB */ + ,opmode(0, 1, OpArgK, OpArgK, iABC) /* OP_MUL */ + ,opmode(0, 1, OpArgK, OpArgK, iABC) /* OP_MOD */ + ,opmode(0, 1, OpArgK, OpArgK, iABC) /* OP_POW */ + ,opmode(0, 1, OpArgK, OpArgK, iABC) /* OP_DIV */ + ,opmode(0, 1, OpArgK, OpArgK, iABC) /* OP_IDIV */ + ,opmode(0, 1, OpArgK, OpArgK, iABC) /* OP_BAND */ + ,opmode(0, 1, OpArgK, OpArgK, iABC) /* OP_BOR */ + ,opmode(0, 1, OpArgK, OpArgK, iABC) /* OP_BXOR */ + ,opmode(0, 1, OpArgK, OpArgK, iABC) /* OP_SHL */ + ,opmode(0, 1, OpArgK, OpArgK, iABC) /* OP_SHR */ + ,opmode(0, 1, OpArgR, OpArgN, iABC) /* OP_UNM */ + ,opmode(0, 1, OpArgR, OpArgN, iABC) /* OP_BNOT */ + ,opmode(0, 1, OpArgR, OpArgN, iABC) /* OP_NOT */ + ,opmode(0, 1, OpArgR, OpArgN, iABC) /* OP_LEN */ + ,opmode(0, 1, OpArgR, OpArgR, iABC) /* OP_CONCAT */ + ,opmode(0, 0, OpArgR, OpArgN, iAsBx) /* OP_JMP */ + ,opmode(1, 0, OpArgK, OpArgK, iABC) /* OP_EQ */ + ,opmode(1, 0, OpArgK, OpArgK, iABC) /* OP_LT */ + ,opmode(1, 0, OpArgK, OpArgK, iABC) /* OP_LE */ + ,opmode(1, 0, OpArgN, OpArgU, iABC) /* OP_TEST */ + ,opmode(1, 1, OpArgR, OpArgU, iABC) /* OP_TESTSET */ + ,opmode(0, 1, OpArgU, OpArgU, iABC) /* OP_CALL */ + ,opmode(0, 1, OpArgU, OpArgU, iABC) /* OP_TAILCALL */ + ,opmode(0, 0, OpArgU, OpArgN, iABC) /* OP_RETURN */ + ,opmode(0, 1, OpArgR, OpArgN, iAsBx) /* OP_FORLOOP */ + ,opmode(0, 1, OpArgR, OpArgN, iAsBx) /* OP_FORPREP */ + ,opmode(0, 0, OpArgN, OpArgU, iABC) /* OP_TFORCALL */ + ,opmode(0, 1, OpArgR, OpArgN, iAsBx) /* OP_TFORLOOP */ + ,opmode(0, 0, OpArgU, OpArgU, iABC) /* OP_SETLIST */ + ,opmode(0, 1, OpArgU, OpArgN, iABx) /* OP_CLOSURE */ + ,opmode(0, 1, OpArgU, OpArgN, iABC) /* OP_VARARG */ + ,opmode(0, 0, OpArgU, OpArgU, iAx) /* OP_EXTRAARG */ +}; + diff --git a/EQ2/source/LUA/lopcodes.h b/EQ2/source/LUA/lopcodes.h new file mode 100644 index 000000000..bbc4b6196 --- /dev/null +++ b/EQ2/source/LUA/lopcodes.h @@ -0,0 +1,297 @@ +/* +** $Id: lopcodes.h,v 1.149 2016/07/19 17:12:21 roberto Exp $ +** Opcodes for Lua virtual machine +** See Copyright Notice in lua.h +*/ + +#ifndef lopcodes_h +#define lopcodes_h + +#include "llimits.h" + + +/*=========================================================================== + We assume that instructions are unsigned numbers. + All instructions have an opcode in the first 6 bits. + Instructions can have the following fields: + 'A' : 8 bits + 'B' : 9 bits + 'C' : 9 bits + 'Ax' : 26 bits ('A', 'B', and 'C' together) + 'Bx' : 18 bits ('B' and 'C' together) + 'sBx' : signed Bx + + A signed argument is represented in excess K; that is, the number + value is the unsigned value minus K. K is exactly the maximum value + for that argument (so that -max is represented by 0, and +max is + represented by 2*max), which is half the maximum for the corresponding + unsigned argument. +===========================================================================*/ + + +enum OpMode {iABC, iABx, iAsBx, iAx}; /* basic instruction format */ + + +/* +** size and position of opcode arguments. +*/ +#define SIZE_C 9 +#define SIZE_B 9 +#define SIZE_Bx (SIZE_C + SIZE_B) +#define SIZE_A 8 +#define SIZE_Ax (SIZE_C + SIZE_B + SIZE_A) + +#define SIZE_OP 6 + +#define POS_OP 0 +#define POS_A (POS_OP + SIZE_OP) +#define POS_C (POS_A + SIZE_A) +#define POS_B (POS_C + SIZE_C) +#define POS_Bx POS_C +#define POS_Ax POS_A + + +/* +** limits for opcode arguments. +** we use (signed) int to manipulate most arguments, +** so they must fit in LUAI_BITSINT-1 bits (-1 for sign) +*/ +#if SIZE_Bx < LUAI_BITSINT-1 +#define MAXARG_Bx ((1<>1) /* 'sBx' is signed */ +#else +#define MAXARG_Bx MAX_INT +#define MAXARG_sBx MAX_INT +#endif + +#if SIZE_Ax < LUAI_BITSINT-1 +#define MAXARG_Ax ((1<>POS_OP) & MASK1(SIZE_OP,0))) +#define SET_OPCODE(i,o) ((i) = (((i)&MASK0(SIZE_OP,POS_OP)) | \ + ((cast(Instruction, o)<>pos) & MASK1(size,0))) +#define setarg(i,v,pos,size) ((i) = (((i)&MASK0(size,pos)) | \ + ((cast(Instruction, v)<> RK(C) */ +OP_UNM,/* A B R(A) := -R(B) */ +OP_BNOT,/* A B R(A) := ~R(B) */ +OP_NOT,/* A B R(A) := not R(B) */ +OP_LEN,/* A B R(A) := length of R(B) */ + +OP_CONCAT,/* A B C R(A) := R(B).. ... ..R(C) */ + +OP_JMP,/* A sBx pc+=sBx; if (A) close all upvalues >= R(A - 1) */ +OP_EQ,/* A B C if ((RK(B) == RK(C)) ~= A) then pc++ */ +OP_LT,/* A B C if ((RK(B) < RK(C)) ~= A) then pc++ */ +OP_LE,/* A B C if ((RK(B) <= RK(C)) ~= A) then pc++ */ + +OP_TEST,/* A C if not (R(A) <=> C) then pc++ */ +OP_TESTSET,/* A B C if (R(B) <=> C) then R(A) := R(B) else pc++ */ + +OP_CALL,/* A B C R(A), ... ,R(A+C-2) := R(A)(R(A+1), ... ,R(A+B-1)) */ +OP_TAILCALL,/* A B C return R(A)(R(A+1), ... ,R(A+B-1)) */ +OP_RETURN,/* A B return R(A), ... ,R(A+B-2) (see note) */ + +OP_FORLOOP,/* A sBx R(A)+=R(A+2); + if R(A) > 4) & 3)) +#define getCMode(m) (cast(enum OpArgMask, (luaP_opmodes[m] >> 2) & 3)) +#define testAMode(m) (luaP_opmodes[m] & (1 << 6)) +#define testTMode(m) (luaP_opmodes[m] & (1 << 7)) + + +LUAI_DDEC const char *const luaP_opnames[NUM_OPCODES+1]; /* opcode names */ + + +/* number of list items to accumulate before a SETLIST instruction */ +#define LFIELDS_PER_FLUSH 50 + + +#endif diff --git a/EQ2/source/LUA/loslib.c b/EQ2/source/LUA/loslib.c new file mode 100644 index 000000000..5a94eb906 --- /dev/null +++ b/EQ2/source/LUA/loslib.c @@ -0,0 +1,407 @@ +/* +** $Id: loslib.c,v 1.65 2016/07/18 17:58:58 roberto Exp $ +** Standard Operating System library +** See Copyright Notice in lua.h +*/ + +#define loslib_c +#define LUA_LIB + +#include "lprefix.h" + + +#include +#include +#include +#include +#include + +#include "lua.h" + +#include "lauxlib.h" +#include "lualib.h" + + +/* +** {================================================================== +** List of valid conversion specifiers for the 'strftime' function; +** options are grouped by length; group of length 2 start with '||'. +** =================================================================== +*/ +#if !defined(LUA_STRFTIMEOPTIONS) /* { */ + +/* options for ANSI C 89 (only 1-char options) */ +#define L_STRFTIMEC89 "aAbBcdHIjmMpSUwWxXyYZ%" + +/* options for ISO C 99 and POSIX */ +#define L_STRFTIMEC99 "aAbBcCdDeFgGhHIjmMnprRStTuUVwWxXyYzZ%" \ + "||" "EcECExEXEyEY" "OdOeOHOIOmOMOSOuOUOVOwOWOy" /* two-char options */ + +/* options for Windows */ +#define L_STRFTIMEWIN "aAbBcdHIjmMpSUwWxXyYzZ%" \ + "||" "#c#x#d#H#I#j#m#M#S#U#w#W#y#Y" /* two-char options */ + +#if defined(LUA_USE_WINDOWS) +#define LUA_STRFTIMEOPTIONS L_STRFTIMEWIN +#elif defined(LUA_USE_C89) +#define LUA_STRFTIMEOPTIONS L_STRFTIMEC89 +#else /* C99 specification */ +#define LUA_STRFTIMEOPTIONS L_STRFTIMEC99 +#endif + +#endif /* } */ +/* }================================================================== */ + + +/* +** {================================================================== +** Configuration for time-related stuff +** =================================================================== +*/ + +#if !defined(l_time_t) /* { */ +/* +** type to represent time_t in Lua +*/ +#define l_timet lua_Integer +#define l_pushtime(L,t) lua_pushinteger(L,(lua_Integer)(t)) + +static time_t l_checktime (lua_State *L, int arg) { + lua_Integer t = luaL_checkinteger(L, arg); + luaL_argcheck(L, (time_t)t == t, arg, "time out-of-bounds"); + return (time_t)t; +} + +#endif /* } */ + + +#if !defined(l_gmtime) /* { */ +/* +** By default, Lua uses gmtime/localtime, except when POSIX is available, +** where it uses gmtime_r/localtime_r +*/ + +#if defined(LUA_USE_POSIX) /* { */ + +#define l_gmtime(t,r) gmtime_r(t,r) +#define l_localtime(t,r) localtime_r(t,r) + +#else /* }{ */ + +/* ISO C definitions */ +#define l_gmtime(t,r) ((void)(r)->tm_sec, gmtime(t)) +#define l_localtime(t,r) ((void)(r)->tm_sec, localtime(t)) + +#endif /* } */ + +#endif /* } */ + +/* }================================================================== */ + + +/* +** {================================================================== +** Configuration for 'tmpnam': +** By default, Lua uses tmpnam except when POSIX is available, where +** it uses mkstemp. +** =================================================================== +*/ +#if !defined(lua_tmpnam) /* { */ + +#if defined(LUA_USE_POSIX) /* { */ + +#include + +#define LUA_TMPNAMBUFSIZE 32 + +#if !defined(LUA_TMPNAMTEMPLATE) +#define LUA_TMPNAMTEMPLATE "/tmp/lua_XXXXXX" +#endif + +#define lua_tmpnam(b,e) { \ + strcpy(b, LUA_TMPNAMTEMPLATE); \ + e = mkstemp(b); \ + if (e != -1) close(e); \ + e = (e == -1); } + +#else /* }{ */ + +/* ISO C definitions */ +#define LUA_TMPNAMBUFSIZE L_tmpnam +#define lua_tmpnam(b,e) { e = (tmpnam(b) == NULL); } + +#endif /* } */ + +#endif /* } */ +/* }================================================================== */ + + + + +static int os_execute (lua_State *L) { + const char *cmd = luaL_optstring(L, 1, NULL); + int stat = system(cmd); + if (cmd != NULL) + return luaL_execresult(L, stat); + else { + lua_pushboolean(L, stat); /* true if there is a shell */ + return 1; + } +} + + +static int os_remove (lua_State *L) { + const char *filename = luaL_checkstring(L, 1); + return luaL_fileresult(L, remove(filename) == 0, filename); +} + + +static int os_rename (lua_State *L) { + const char *fromname = luaL_checkstring(L, 1); + const char *toname = luaL_checkstring(L, 2); + return luaL_fileresult(L, rename(fromname, toname) == 0, NULL); +} + + +static int os_tmpname (lua_State *L) { + char buff[LUA_TMPNAMBUFSIZE]; + int err; + lua_tmpnam(buff, err); + if (err) + return luaL_error(L, "unable to generate a unique filename"); + lua_pushstring(L, buff); + return 1; +} + + +static int os_getenv (lua_State *L) { + lua_pushstring(L, getenv(luaL_checkstring(L, 1))); /* if NULL push nil */ + return 1; +} + + +static int os_clock (lua_State *L) { + lua_pushnumber(L, ((lua_Number)clock())/(lua_Number)CLOCKS_PER_SEC); + return 1; +} + + +/* +** {====================================================== +** Time/Date operations +** { year=%Y, month=%m, day=%d, hour=%H, min=%M, sec=%S, +** wday=%w+1, yday=%j, isdst=? } +** ======================================================= +*/ + +static void setfield (lua_State *L, const char *key, int value) { + lua_pushinteger(L, value); + lua_setfield(L, -2, key); +} + +static void setboolfield (lua_State *L, const char *key, int value) { + if (value < 0) /* undefined? */ + return; /* does not set field */ + lua_pushboolean(L, value); + lua_setfield(L, -2, key); +} + + +/* +** Set all fields from structure 'tm' in the table on top of the stack +*/ +static void setallfields (lua_State *L, struct tm *stm) { + setfield(L, "sec", stm->tm_sec); + setfield(L, "min", stm->tm_min); + setfield(L, "hour", stm->tm_hour); + setfield(L, "day", stm->tm_mday); + setfield(L, "month", stm->tm_mon + 1); + setfield(L, "year", stm->tm_year + 1900); + setfield(L, "wday", stm->tm_wday + 1); + setfield(L, "yday", stm->tm_yday + 1); + setboolfield(L, "isdst", stm->tm_isdst); +} + + +static int getboolfield (lua_State *L, const char *key) { + int res; + res = (lua_getfield(L, -1, key) == LUA_TNIL) ? -1 : lua_toboolean(L, -1); + lua_pop(L, 1); + return res; +} + + +/* maximum value for date fields (to avoid arithmetic overflows with 'int') */ +#if !defined(L_MAXDATEFIELD) +#define L_MAXDATEFIELD (INT_MAX / 2) +#endif + +static int getfield (lua_State *L, const char *key, int d, int delta) { + int isnum; + int t = lua_getfield(L, -1, key); /* get field and its type */ + lua_Integer res = lua_tointegerx(L, -1, &isnum); + if (!isnum) { /* field is not an integer? */ + if (t != LUA_TNIL) /* some other value? */ + return luaL_error(L, "field '%s' is not an integer", key); + else if (d < 0) /* absent field; no default? */ + return luaL_error(L, "field '%s' missing in date table", key); + res = d; + } + else { + if (!(-L_MAXDATEFIELD <= res && res <= L_MAXDATEFIELD)) + return luaL_error(L, "field '%s' is out-of-bound", key); + res -= delta; + } + lua_pop(L, 1); + return (int)res; +} + + +static const char *checkoption (lua_State *L, const char *conv, + ptrdiff_t convlen, char *buff) { + const char *option = LUA_STRFTIMEOPTIONS; + int oplen = 1; /* length of options being checked */ + for (; *option != '\0' && oplen <= convlen; option += oplen) { + if (*option == '|') /* next block? */ + oplen++; /* will check options with next length (+1) */ + else if (memcmp(conv, option, oplen) == 0) { /* match? */ + memcpy(buff, conv, oplen); /* copy valid option to buffer */ + buff[oplen] = '\0'; + return conv + oplen; /* return next item */ + } + } + luaL_argerror(L, 1, + lua_pushfstring(L, "invalid conversion specifier '%%%s'", conv)); + return conv; /* to avoid warnings */ +} + + +/* maximum size for an individual 'strftime' item */ +#define SIZETIMEFMT 250 + + +static int os_date (lua_State *L) { + size_t slen; + const char *s = luaL_optlstring(L, 1, "%c", &slen); + time_t t = luaL_opt(L, l_checktime, 2, time(NULL)); + const char *se = s + slen; /* 's' end */ + struct tm tmr, *stm; + if (*s == '!') { /* UTC? */ + stm = l_gmtime(&t, &tmr); + s++; /* skip '!' */ + } + else + stm = l_localtime(&t, &tmr); + if (stm == NULL) /* invalid date? */ + luaL_error(L, "time result cannot be represented in this installation"); + if (strcmp(s, "*t") == 0) { + lua_createtable(L, 0, 9); /* 9 = number of fields */ + setallfields(L, stm); + } + else { + char cc[4]; /* buffer for individual conversion specifiers */ + luaL_Buffer b; + cc[0] = '%'; + luaL_buffinit(L, &b); + while (s < se) { + if (*s != '%') /* not a conversion specifier? */ + luaL_addchar(&b, *s++); + else { + size_t reslen; + char *buff = luaL_prepbuffsize(&b, SIZETIMEFMT); + s++; /* skip '%' */ + s = checkoption(L, s, se - s, cc + 1); /* copy specifier to 'cc' */ + reslen = strftime(buff, SIZETIMEFMT, cc, stm); + luaL_addsize(&b, reslen); + } + } + luaL_pushresult(&b); + } + return 1; +} + + +static int os_time (lua_State *L) { + time_t t; + if (lua_isnoneornil(L, 1)) /* called without args? */ + t = time(NULL); /* get current time */ + else { + struct tm ts; + luaL_checktype(L, 1, LUA_TTABLE); + lua_settop(L, 1); /* make sure table is at the top */ + ts.tm_sec = getfield(L, "sec", 0, 0); + ts.tm_min = getfield(L, "min", 0, 0); + ts.tm_hour = getfield(L, "hour", 12, 0); + ts.tm_mday = getfield(L, "day", -1, 0); + ts.tm_mon = getfield(L, "month", -1, 1); + ts.tm_year = getfield(L, "year", -1, 1900); + ts.tm_isdst = getboolfield(L, "isdst"); + t = mktime(&ts); + setallfields(L, &ts); /* update fields with normalized values */ + } + if (t != (time_t)(l_timet)t || t == (time_t)(-1)) + luaL_error(L, "time result cannot be represented in this installation"); + l_pushtime(L, t); + return 1; +} + + +static int os_difftime (lua_State *L) { + time_t t1 = l_checktime(L, 1); + time_t t2 = l_checktime(L, 2); + lua_pushnumber(L, (lua_Number)difftime(t1, t2)); + return 1; +} + +/* }====================================================== */ + + +static int os_setlocale (lua_State *L) { + static const int cat[] = {LC_ALL, LC_COLLATE, LC_CTYPE, LC_MONETARY, + LC_NUMERIC, LC_TIME}; + static const char *const catnames[] = {"all", "collate", "ctype", "monetary", + "numeric", "time", NULL}; + const char *l = luaL_optstring(L, 1, NULL); + int op = luaL_checkoption(L, 2, "all", catnames); + lua_pushstring(L, setlocale(cat[op], l)); + return 1; +} + + +static int os_exit (lua_State *L) { + int status; + if (lua_isboolean(L, 1)) + status = (lua_toboolean(L, 1) ? EXIT_SUCCESS : EXIT_FAILURE); + else + status = (int)luaL_optinteger(L, 1, EXIT_SUCCESS); + if (lua_toboolean(L, 2)) + lua_close(L); + if (L) exit(status); /* 'if' to avoid warnings for unreachable 'return' */ + return 0; +} + + +static const luaL_Reg syslib[] = { + {"clock", os_clock}, + {"date", os_date}, + {"difftime", os_difftime}, + {"execute", os_execute}, + {"exit", os_exit}, + {"getenv", os_getenv}, + {"remove", os_remove}, + {"rename", os_rename}, + {"setlocale", os_setlocale}, + {"time", os_time}, + {"tmpname", os_tmpname}, + {NULL, NULL} +}; + +/* }====================================================== */ + + + +LUAMOD_API int luaopen_os (lua_State *L) { + luaL_newlib(L, syslib); + return 1; +} + diff --git a/EQ2/source/LUA/lparser.c b/EQ2/source/LUA/lparser.c new file mode 100644 index 000000000..cd4512d4d --- /dev/null +++ b/EQ2/source/LUA/lparser.c @@ -0,0 +1,1650 @@ +/* +** $Id: lparser.c,v 2.155 2016/08/01 19:51:24 roberto Exp $ +** Lua Parser +** See Copyright Notice in lua.h +*/ + +#define lparser_c +#define LUA_CORE + +#include "lprefix.h" + + +#include + +#include "lua.h" + +#include "lcode.h" +#include "ldebug.h" +#include "ldo.h" +#include "lfunc.h" +#include "llex.h" +#include "lmem.h" +#include "lobject.h" +#include "lopcodes.h" +#include "lparser.h" +#include "lstate.h" +#include "lstring.h" +#include "ltable.h" + + + +/* maximum number of local variables per function (must be smaller + than 250, due to the bytecode format) */ +#define MAXVARS 200 + + +#define hasmultret(k) ((k) == VCALL || (k) == VVARARG) + + +/* because all strings are unified by the scanner, the parser + can use pointer equality for string equality */ +#define eqstr(a,b) ((a) == (b)) + + +/* +** nodes for block list (list of active blocks) +*/ +typedef struct BlockCnt { + struct BlockCnt *previous; /* chain */ + int firstlabel; /* index of first label in this block */ + int firstgoto; /* index of first pending goto in this block */ + lu_byte nactvar; /* # active locals outside the block */ + lu_byte upval; /* true if some variable in the block is an upvalue */ + lu_byte isloop; /* true if 'block' is a loop */ +} BlockCnt; + + + +/* +** prototypes for recursive non-terminal functions +*/ +static void statement (LexState *ls); +static void expr (LexState *ls, expdesc *v); + + +/* semantic error */ +static l_noret semerror (LexState *ls, const char *msg) { + ls->t.token = 0; /* remove "near " from final message */ + luaX_syntaxerror(ls, msg); +} + + +static l_noret error_expected (LexState *ls, int token) { + luaX_syntaxerror(ls, + luaO_pushfstring(ls->L, "%s expected", luaX_token2str(ls, token))); +} + + +static l_noret errorlimit (FuncState *fs, int limit, const char *what) { + lua_State *L = fs->ls->L; + const char *msg; + int line = fs->f->linedefined; + const char *where = (line == 0) + ? "main function" + : luaO_pushfstring(L, "function at line %d", line); + msg = luaO_pushfstring(L, "too many %s (limit is %d) in %s", + what, limit, where); + luaX_syntaxerror(fs->ls, msg); +} + + +static void checklimit (FuncState *fs, int v, int l, const char *what) { + if (v > l) errorlimit(fs, l, what); +} + + +static int testnext (LexState *ls, int c) { + if (ls->t.token == c) { + luaX_next(ls); + return 1; + } + else return 0; +} + + +static void check (LexState *ls, int c) { + if (ls->t.token != c) + error_expected(ls, c); +} + + +static void checknext (LexState *ls, int c) { + check(ls, c); + luaX_next(ls); +} + + +#define check_condition(ls,c,msg) { if (!(c)) luaX_syntaxerror(ls, msg); } + + + +static void check_match (LexState *ls, int what, int who, int where) { + if (!testnext(ls, what)) { + if (where == ls->linenumber) + error_expected(ls, what); + else { + luaX_syntaxerror(ls, luaO_pushfstring(ls->L, + "%s expected (to close %s at line %d)", + luaX_token2str(ls, what), luaX_token2str(ls, who), where)); + } + } +} + + +static TString *str_checkname (LexState *ls) { + TString *ts; + check(ls, TK_NAME); + ts = ls->t.seminfo.ts; + luaX_next(ls); + return ts; +} + + +static void init_exp (expdesc *e, expkind k, int i) { + e->f = e->t = NO_JUMP; + e->k = k; + e->u.info = i; +} + + +static void codestring (LexState *ls, expdesc *e, TString *s) { + init_exp(e, VK, luaK_stringK(ls->fs, s)); +} + + +static void checkname (LexState *ls, expdesc *e) { + codestring(ls, e, str_checkname(ls)); +} + + +static int registerlocalvar (LexState *ls, TString *varname) { + FuncState *fs = ls->fs; + Proto *f = fs->f; + int oldsize = f->sizelocvars; + luaM_growvector(ls->L, f->locvars, fs->nlocvars, f->sizelocvars, + LocVar, SHRT_MAX, "local variables"); + while (oldsize < f->sizelocvars) + f->locvars[oldsize++].varname = NULL; + f->locvars[fs->nlocvars].varname = varname; + luaC_objbarrier(ls->L, f, varname); + return fs->nlocvars++; +} + + +static void new_localvar (LexState *ls, TString *name) { + FuncState *fs = ls->fs; + Dyndata *dyd = ls->dyd; + int reg = registerlocalvar(ls, name); + checklimit(fs, dyd->actvar.n + 1 - fs->firstlocal, + MAXVARS, "local variables"); + luaM_growvector(ls->L, dyd->actvar.arr, dyd->actvar.n + 1, + dyd->actvar.size, Vardesc, MAX_INT, "local variables"); + dyd->actvar.arr[dyd->actvar.n++].idx = cast(short, reg); +} + + +static void new_localvarliteral_ (LexState *ls, const char *name, size_t sz) { + new_localvar(ls, luaX_newstring(ls, name, sz)); +} + +#define new_localvarliteral(ls,v) \ + new_localvarliteral_(ls, "" v, (sizeof(v)/sizeof(char))-1) + + +static LocVar *getlocvar (FuncState *fs, int i) { + int idx = fs->ls->dyd->actvar.arr[fs->firstlocal + i].idx; + lua_assert(idx < fs->nlocvars); + return &fs->f->locvars[idx]; +} + + +static void adjustlocalvars (LexState *ls, int nvars) { + FuncState *fs = ls->fs; + fs->nactvar = cast_byte(fs->nactvar + nvars); + for (; nvars; nvars--) { + getlocvar(fs, fs->nactvar - nvars)->startpc = fs->pc; + } +} + + +static void removevars (FuncState *fs, int tolevel) { + fs->ls->dyd->actvar.n -= (fs->nactvar - tolevel); + while (fs->nactvar > tolevel) + getlocvar(fs, --fs->nactvar)->endpc = fs->pc; +} + + +static int searchupvalue (FuncState *fs, TString *name) { + int i; + Upvaldesc *up = fs->f->upvalues; + for (i = 0; i < fs->nups; i++) { + if (eqstr(up[i].name, name)) return i; + } + return -1; /* not found */ +} + + +static int newupvalue (FuncState *fs, TString *name, expdesc *v) { + Proto *f = fs->f; + int oldsize = f->sizeupvalues; + checklimit(fs, fs->nups + 1, MAXUPVAL, "upvalues"); + luaM_growvector(fs->ls->L, f->upvalues, fs->nups, f->sizeupvalues, + Upvaldesc, MAXUPVAL, "upvalues"); + while (oldsize < f->sizeupvalues) + f->upvalues[oldsize++].name = NULL; + f->upvalues[fs->nups].instack = (v->k == VLOCAL); + f->upvalues[fs->nups].idx = cast_byte(v->u.info); + f->upvalues[fs->nups].name = name; + luaC_objbarrier(fs->ls->L, f, name); + return fs->nups++; +} + + +static int searchvar (FuncState *fs, TString *n) { + int i; + for (i = cast_int(fs->nactvar) - 1; i >= 0; i--) { + if (eqstr(n, getlocvar(fs, i)->varname)) + return i; + } + return -1; /* not found */ +} + + +/* + Mark block where variable at given level was defined + (to emit close instructions later). +*/ +static void markupval (FuncState *fs, int level) { + BlockCnt *bl = fs->bl; + while (bl->nactvar > level) + bl = bl->previous; + bl->upval = 1; +} + + +/* + Find variable with given name 'n'. If it is an upvalue, add this + upvalue into all intermediate functions. +*/ +static void singlevaraux (FuncState *fs, TString *n, expdesc *var, int base) { + if (fs == NULL) /* no more levels? */ + init_exp(var, VVOID, 0); /* default is global */ + else { + int v = searchvar(fs, n); /* look up locals at current level */ + if (v >= 0) { /* found? */ + init_exp(var, VLOCAL, v); /* variable is local */ + if (!base) + markupval(fs, v); /* local will be used as an upval */ + } + else { /* not found as local at current level; try upvalues */ + int idx = searchupvalue(fs, n); /* try existing upvalues */ + if (idx < 0) { /* not found? */ + singlevaraux(fs->prev, n, var, 0); /* try upper levels */ + if (var->k == VVOID) /* not found? */ + return; /* it is a global */ + /* else was LOCAL or UPVAL */ + idx = newupvalue(fs, n, var); /* will be a new upvalue */ + } + init_exp(var, VUPVAL, idx); /* new or old upvalue */ + } + } +} + + +static void singlevar (LexState *ls, expdesc *var) { + TString *varname = str_checkname(ls); + FuncState *fs = ls->fs; + singlevaraux(fs, varname, var, 1); + if (var->k == VVOID) { /* global name? */ + expdesc key; + singlevaraux(fs, ls->envn, var, 1); /* get environment variable */ + lua_assert(var->k != VVOID); /* this one must exist */ + codestring(ls, &key, varname); /* key is variable name */ + luaK_indexed(fs, var, &key); /* env[varname] */ + } +} + + +static void adjust_assign (LexState *ls, int nvars, int nexps, expdesc *e) { + FuncState *fs = ls->fs; + int extra = nvars - nexps; + if (hasmultret(e->k)) { + extra++; /* includes call itself */ + if (extra < 0) extra = 0; + luaK_setreturns(fs, e, extra); /* last exp. provides the difference */ + if (extra > 1) luaK_reserveregs(fs, extra-1); + } + else { + if (e->k != VVOID) luaK_exp2nextreg(fs, e); /* close last expression */ + if (extra > 0) { + int reg = fs->freereg; + luaK_reserveregs(fs, extra); + luaK_nil(fs, reg, extra); + } + } + if (nexps > nvars) + ls->fs->freereg -= nexps - nvars; /* remove extra values */ +} + + +static void enterlevel (LexState *ls) { + lua_State *L = ls->L; + ++L->nCcalls; + checklimit(ls->fs, L->nCcalls, LUAI_MAXCCALLS, "C levels"); +} + + +#define leavelevel(ls) ((ls)->L->nCcalls--) + + +static void closegoto (LexState *ls, int g, Labeldesc *label) { + int i; + FuncState *fs = ls->fs; + Labellist *gl = &ls->dyd->gt; + Labeldesc *gt = &gl->arr[g]; + lua_assert(eqstr(gt->name, label->name)); + if (gt->nactvar < label->nactvar) { + TString *vname = getlocvar(fs, gt->nactvar)->varname; + const char *msg = luaO_pushfstring(ls->L, + " at line %d jumps into the scope of local '%s'", + getstr(gt->name), gt->line, getstr(vname)); + semerror(ls, msg); + } + luaK_patchlist(fs, gt->pc, label->pc); + /* remove goto from pending list */ + for (i = g; i < gl->n - 1; i++) + gl->arr[i] = gl->arr[i + 1]; + gl->n--; +} + + +/* +** try to close a goto with existing labels; this solves backward jumps +*/ +static int findlabel (LexState *ls, int g) { + int i; + BlockCnt *bl = ls->fs->bl; + Dyndata *dyd = ls->dyd; + Labeldesc *gt = &dyd->gt.arr[g]; + /* check labels in current block for a match */ + for (i = bl->firstlabel; i < dyd->label.n; i++) { + Labeldesc *lb = &dyd->label.arr[i]; + if (eqstr(lb->name, gt->name)) { /* correct label? */ + if (gt->nactvar > lb->nactvar && + (bl->upval || dyd->label.n > bl->firstlabel)) + luaK_patchclose(ls->fs, gt->pc, lb->nactvar); + closegoto(ls, g, lb); /* close it */ + return 1; + } + } + return 0; /* label not found; cannot close goto */ +} + + +static int newlabelentry (LexState *ls, Labellist *l, TString *name, + int line, int pc) { + int n = l->n; + luaM_growvector(ls->L, l->arr, n, l->size, + Labeldesc, SHRT_MAX, "labels/gotos"); + l->arr[n].name = name; + l->arr[n].line = line; + l->arr[n].nactvar = ls->fs->nactvar; + l->arr[n].pc = pc; + l->n = n + 1; + return n; +} + + +/* +** check whether new label 'lb' matches any pending gotos in current +** block; solves forward jumps +*/ +static void findgotos (LexState *ls, Labeldesc *lb) { + Labellist *gl = &ls->dyd->gt; + int i = ls->fs->bl->firstgoto; + while (i < gl->n) { + if (eqstr(gl->arr[i].name, lb->name)) + closegoto(ls, i, lb); + else + i++; + } +} + + +/* +** export pending gotos to outer level, to check them against +** outer labels; if the block being exited has upvalues, and +** the goto exits the scope of any variable (which can be the +** upvalue), close those variables being exited. +*/ +static void movegotosout (FuncState *fs, BlockCnt *bl) { + int i = bl->firstgoto; + Labellist *gl = &fs->ls->dyd->gt; + /* correct pending gotos to current block and try to close it + with visible labels */ + while (i < gl->n) { + Labeldesc *gt = &gl->arr[i]; + if (gt->nactvar > bl->nactvar) { + if (bl->upval) + luaK_patchclose(fs, gt->pc, bl->nactvar); + gt->nactvar = bl->nactvar; + } + if (!findlabel(fs->ls, i)) + i++; /* move to next one */ + } +} + + +static void enterblock (FuncState *fs, BlockCnt *bl, lu_byte isloop) { + bl->isloop = isloop; + bl->nactvar = fs->nactvar; + bl->firstlabel = fs->ls->dyd->label.n; + bl->firstgoto = fs->ls->dyd->gt.n; + bl->upval = 0; + bl->previous = fs->bl; + fs->bl = bl; + lua_assert(fs->freereg == fs->nactvar); +} + + +/* +** create a label named 'break' to resolve break statements +*/ +static void breaklabel (LexState *ls) { + TString *n = luaS_new(ls->L, "break"); + int l = newlabelentry(ls, &ls->dyd->label, n, 0, ls->fs->pc); + findgotos(ls, &ls->dyd->label.arr[l]); +} + +/* +** generates an error for an undefined 'goto'; choose appropriate +** message when label name is a reserved word (which can only be 'break') +*/ +static l_noret undefgoto (LexState *ls, Labeldesc *gt) { + const char *msg = isreserved(gt->name) + ? "<%s> at line %d not inside a loop" + : "no visible label '%s' for at line %d"; + msg = luaO_pushfstring(ls->L, msg, getstr(gt->name), gt->line); + semerror(ls, msg); +} + + +static void leaveblock (FuncState *fs) { + BlockCnt *bl = fs->bl; + LexState *ls = fs->ls; + if (bl->previous && bl->upval) { + /* create a 'jump to here' to close upvalues */ + int j = luaK_jump(fs); + luaK_patchclose(fs, j, bl->nactvar); + luaK_patchtohere(fs, j); + } + if (bl->isloop) + breaklabel(ls); /* close pending breaks */ + fs->bl = bl->previous; + removevars(fs, bl->nactvar); + lua_assert(bl->nactvar == fs->nactvar); + fs->freereg = fs->nactvar; /* free registers */ + ls->dyd->label.n = bl->firstlabel; /* remove local labels */ + if (bl->previous) /* inner block? */ + movegotosout(fs, bl); /* update pending gotos to outer block */ + else if (bl->firstgoto < ls->dyd->gt.n) /* pending gotos in outer block? */ + undefgoto(ls, &ls->dyd->gt.arr[bl->firstgoto]); /* error */ +} + + +/* +** adds a new prototype into list of prototypes +*/ +static Proto *addprototype (LexState *ls) { + Proto *clp; + lua_State *L = ls->L; + FuncState *fs = ls->fs; + Proto *f = fs->f; /* prototype of current function */ + if (fs->np >= f->sizep) { + int oldsize = f->sizep; + luaM_growvector(L, f->p, fs->np, f->sizep, Proto *, MAXARG_Bx, "functions"); + while (oldsize < f->sizep) + f->p[oldsize++] = NULL; + } + f->p[fs->np++] = clp = luaF_newproto(L); + luaC_objbarrier(L, f, clp); + return clp; +} + + +/* +** codes instruction to create new closure in parent function. +** The OP_CLOSURE instruction must use the last available register, +** so that, if it invokes the GC, the GC knows which registers +** are in use at that time. +*/ +static void codeclosure (LexState *ls, expdesc *v) { + FuncState *fs = ls->fs->prev; + init_exp(v, VRELOCABLE, luaK_codeABx(fs, OP_CLOSURE, 0, fs->np - 1)); + luaK_exp2nextreg(fs, v); /* fix it at the last register */ +} + + +static void open_func (LexState *ls, FuncState *fs, BlockCnt *bl) { + Proto *f; + fs->prev = ls->fs; /* linked list of funcstates */ + fs->ls = ls; + ls->fs = fs; + fs->pc = 0; + fs->lasttarget = 0; + fs->jpc = NO_JUMP; + fs->freereg = 0; + fs->nk = 0; + fs->np = 0; + fs->nups = 0; + fs->nlocvars = 0; + fs->nactvar = 0; + fs->firstlocal = ls->dyd->actvar.n; + fs->bl = NULL; + f = fs->f; + f->source = ls->source; + f->maxstacksize = 2; /* registers 0/1 are always valid */ + enterblock(fs, bl, 0); +} + + +static void close_func (LexState *ls) { + lua_State *L = ls->L; + FuncState *fs = ls->fs; + Proto *f = fs->f; + luaK_ret(fs, 0, 0); /* final return */ + leaveblock(fs); + luaM_reallocvector(L, f->code, f->sizecode, fs->pc, Instruction); + f->sizecode = fs->pc; + luaM_reallocvector(L, f->lineinfo, f->sizelineinfo, fs->pc, int); + f->sizelineinfo = fs->pc; + luaM_reallocvector(L, f->k, f->sizek, fs->nk, TValue); + f->sizek = fs->nk; + luaM_reallocvector(L, f->p, f->sizep, fs->np, Proto *); + f->sizep = fs->np; + luaM_reallocvector(L, f->locvars, f->sizelocvars, fs->nlocvars, LocVar); + f->sizelocvars = fs->nlocvars; + luaM_reallocvector(L, f->upvalues, f->sizeupvalues, fs->nups, Upvaldesc); + f->sizeupvalues = fs->nups; + lua_assert(fs->bl == NULL); + ls->fs = fs->prev; + luaC_checkGC(L); +} + + + +/*============================================================*/ +/* GRAMMAR RULES */ +/*============================================================*/ + + +/* +** check whether current token is in the follow set of a block. +** 'until' closes syntactical blocks, but do not close scope, +** so it is handled in separate. +*/ +static int block_follow (LexState *ls, int withuntil) { + switch (ls->t.token) { + case TK_ELSE: case TK_ELSEIF: + case TK_END: case TK_EOS: + return 1; + case TK_UNTIL: return withuntil; + default: return 0; + } +} + + +static void statlist (LexState *ls) { + /* statlist -> { stat [';'] } */ + while (!block_follow(ls, 1)) { + if (ls->t.token == TK_RETURN) { + statement(ls); + return; /* 'return' must be last statement */ + } + statement(ls); + } +} + + +static void fieldsel (LexState *ls, expdesc *v) { + /* fieldsel -> ['.' | ':'] NAME */ + FuncState *fs = ls->fs; + expdesc key; + luaK_exp2anyregup(fs, v); + luaX_next(ls); /* skip the dot or colon */ + checkname(ls, &key); + luaK_indexed(fs, v, &key); +} + + +static void yindex (LexState *ls, expdesc *v) { + /* index -> '[' expr ']' */ + luaX_next(ls); /* skip the '[' */ + expr(ls, v); + luaK_exp2val(ls->fs, v); + checknext(ls, ']'); +} + + +/* +** {====================================================================== +** Rules for Constructors +** ======================================================================= +*/ + + +struct ConsControl { + expdesc v; /* last list item read */ + expdesc *t; /* table descriptor */ + int nh; /* total number of 'record' elements */ + int na; /* total number of array elements */ + int tostore; /* number of array elements pending to be stored */ +}; + + +static void recfield (LexState *ls, struct ConsControl *cc) { + /* recfield -> (NAME | '['exp1']') = exp1 */ + FuncState *fs = ls->fs; + int reg = ls->fs->freereg; + expdesc key, val; + int rkkey; + if (ls->t.token == TK_NAME) { + checklimit(fs, cc->nh, MAX_INT, "items in a constructor"); + checkname(ls, &key); + } + else /* ls->t.token == '[' */ + yindex(ls, &key); + cc->nh++; + checknext(ls, '='); + rkkey = luaK_exp2RK(fs, &key); + expr(ls, &val); + luaK_codeABC(fs, OP_SETTABLE, cc->t->u.info, rkkey, luaK_exp2RK(fs, &val)); + fs->freereg = reg; /* free registers */ +} + + +static void closelistfield (FuncState *fs, struct ConsControl *cc) { + if (cc->v.k == VVOID) return; /* there is no list item */ + luaK_exp2nextreg(fs, &cc->v); + cc->v.k = VVOID; + if (cc->tostore == LFIELDS_PER_FLUSH) { + luaK_setlist(fs, cc->t->u.info, cc->na, cc->tostore); /* flush */ + cc->tostore = 0; /* no more items pending */ + } +} + + +static void lastlistfield (FuncState *fs, struct ConsControl *cc) { + if (cc->tostore == 0) return; + if (hasmultret(cc->v.k)) { + luaK_setmultret(fs, &cc->v); + luaK_setlist(fs, cc->t->u.info, cc->na, LUA_MULTRET); + cc->na--; /* do not count last expression (unknown number of elements) */ + } + else { + if (cc->v.k != VVOID) + luaK_exp2nextreg(fs, &cc->v); + luaK_setlist(fs, cc->t->u.info, cc->na, cc->tostore); + } +} + + +static void listfield (LexState *ls, struct ConsControl *cc) { + /* listfield -> exp */ + expr(ls, &cc->v); + checklimit(ls->fs, cc->na, MAX_INT, "items in a constructor"); + cc->na++; + cc->tostore++; +} + + +static void field (LexState *ls, struct ConsControl *cc) { + /* field -> listfield | recfield */ + switch(ls->t.token) { + case TK_NAME: { /* may be 'listfield' or 'recfield' */ + if (luaX_lookahead(ls) != '=') /* expression? */ + listfield(ls, cc); + else + recfield(ls, cc); + break; + } + case '[': { + recfield(ls, cc); + break; + } + default: { + listfield(ls, cc); + break; + } + } +} + + +static void constructor (LexState *ls, expdesc *t) { + /* constructor -> '{' [ field { sep field } [sep] ] '}' + sep -> ',' | ';' */ + FuncState *fs = ls->fs; + int line = ls->linenumber; + int pc = luaK_codeABC(fs, OP_NEWTABLE, 0, 0, 0); + struct ConsControl cc; + cc.na = cc.nh = cc.tostore = 0; + cc.t = t; + init_exp(t, VRELOCABLE, pc); + init_exp(&cc.v, VVOID, 0); /* no value (yet) */ + luaK_exp2nextreg(ls->fs, t); /* fix it at stack top */ + checknext(ls, '{'); + do { + lua_assert(cc.v.k == VVOID || cc.tostore > 0); + if (ls->t.token == '}') break; + closelistfield(fs, &cc); + field(ls, &cc); + } while (testnext(ls, ',') || testnext(ls, ';')); + check_match(ls, '}', '{', line); + lastlistfield(fs, &cc); + SETARG_B(fs->f->code[pc], luaO_int2fb(cc.na)); /* set initial array size */ + SETARG_C(fs->f->code[pc], luaO_int2fb(cc.nh)); /* set initial table size */ +} + +/* }====================================================================== */ + + + +static void parlist (LexState *ls) { + /* parlist -> [ param { ',' param } ] */ + FuncState *fs = ls->fs; + Proto *f = fs->f; + int nparams = 0; + f->is_vararg = 0; + if (ls->t.token != ')') { /* is 'parlist' not empty? */ + do { + switch (ls->t.token) { + case TK_NAME: { /* param -> NAME */ + new_localvar(ls, str_checkname(ls)); + nparams++; + break; + } + case TK_DOTS: { /* param -> '...' */ + luaX_next(ls); + f->is_vararg = 1; /* declared vararg */ + break; + } + default: luaX_syntaxerror(ls, " or '...' expected"); + } + } while (!f->is_vararg && testnext(ls, ',')); + } + adjustlocalvars(ls, nparams); + f->numparams = cast_byte(fs->nactvar); + luaK_reserveregs(fs, fs->nactvar); /* reserve register for parameters */ +} + + +static void body (LexState *ls, expdesc *e, int ismethod, int line) { + /* body -> '(' parlist ')' block END */ + FuncState new_fs; + BlockCnt bl; + new_fs.f = addprototype(ls); + new_fs.f->linedefined = line; + open_func(ls, &new_fs, &bl); + checknext(ls, '('); + if (ismethod) { + new_localvarliteral(ls, "self"); /* create 'self' parameter */ + adjustlocalvars(ls, 1); + } + parlist(ls); + checknext(ls, ')'); + statlist(ls); + new_fs.f->lastlinedefined = ls->linenumber; + check_match(ls, TK_END, TK_FUNCTION, line); + codeclosure(ls, e); + close_func(ls); +} + + +static int explist (LexState *ls, expdesc *v) { + /* explist -> expr { ',' expr } */ + int n = 1; /* at least one expression */ + expr(ls, v); + while (testnext(ls, ',')) { + luaK_exp2nextreg(ls->fs, v); + expr(ls, v); + n++; + } + return n; +} + + +static void funcargs (LexState *ls, expdesc *f, int line) { + FuncState *fs = ls->fs; + expdesc args; + int base, nparams; + switch (ls->t.token) { + case '(': { /* funcargs -> '(' [ explist ] ')' */ + luaX_next(ls); + if (ls->t.token == ')') /* arg list is empty? */ + args.k = VVOID; + else { + explist(ls, &args); + luaK_setmultret(fs, &args); + } + check_match(ls, ')', '(', line); + break; + } + case '{': { /* funcargs -> constructor */ + constructor(ls, &args); + break; + } + case TK_STRING: { /* funcargs -> STRING */ + codestring(ls, &args, ls->t.seminfo.ts); + luaX_next(ls); /* must use 'seminfo' before 'next' */ + break; + } + default: { + luaX_syntaxerror(ls, "function arguments expected"); + } + } + lua_assert(f->k == VNONRELOC); + base = f->u.info; /* base register for call */ + if (hasmultret(args.k)) + nparams = LUA_MULTRET; /* open call */ + else { + if (args.k != VVOID) + luaK_exp2nextreg(fs, &args); /* close last argument */ + nparams = fs->freereg - (base+1); + } + init_exp(f, VCALL, luaK_codeABC(fs, OP_CALL, base, nparams+1, 2)); + luaK_fixline(fs, line); + fs->freereg = base+1; /* call remove function and arguments and leaves + (unless changed) one result */ +} + + + + +/* +** {====================================================================== +** Expression parsing +** ======================================================================= +*/ + + +static void primaryexp (LexState *ls, expdesc *v) { + /* primaryexp -> NAME | '(' expr ')' */ + switch (ls->t.token) { + case '(': { + int line = ls->linenumber; + luaX_next(ls); + expr(ls, v); + check_match(ls, ')', '(', line); + luaK_dischargevars(ls->fs, v); + return; + } + case TK_NAME: { + singlevar(ls, v); + return; + } + default: { + luaX_syntaxerror(ls, "unexpected symbol"); + } + } +} + + +static void suffixedexp (LexState *ls, expdesc *v) { + /* suffixedexp -> + primaryexp { '.' NAME | '[' exp ']' | ':' NAME funcargs | funcargs } */ + FuncState *fs = ls->fs; + int line = ls->linenumber; + primaryexp(ls, v); + for (;;) { + switch (ls->t.token) { + case '.': { /* fieldsel */ + fieldsel(ls, v); + break; + } + case '[': { /* '[' exp1 ']' */ + expdesc key; + luaK_exp2anyregup(fs, v); + yindex(ls, &key); + luaK_indexed(fs, v, &key); + break; + } + case ':': { /* ':' NAME funcargs */ + expdesc key; + luaX_next(ls); + checkname(ls, &key); + luaK_self(fs, v, &key); + funcargs(ls, v, line); + break; + } + case '(': case TK_STRING: case '{': { /* funcargs */ + luaK_exp2nextreg(fs, v); + funcargs(ls, v, line); + break; + } + default: return; + } + } +} + + +static void simpleexp (LexState *ls, expdesc *v) { + /* simpleexp -> FLT | INT | STRING | NIL | TRUE | FALSE | ... | + constructor | FUNCTION body | suffixedexp */ + switch (ls->t.token) { + case TK_FLT: { + init_exp(v, VKFLT, 0); + v->u.nval = ls->t.seminfo.r; + break; + } + case TK_INT: { + init_exp(v, VKINT, 0); + v->u.ival = ls->t.seminfo.i; + break; + } + case TK_STRING: { + codestring(ls, v, ls->t.seminfo.ts); + break; + } + case TK_NIL: { + init_exp(v, VNIL, 0); + break; + } + case TK_TRUE: { + init_exp(v, VTRUE, 0); + break; + } + case TK_FALSE: { + init_exp(v, VFALSE, 0); + break; + } + case TK_DOTS: { /* vararg */ + FuncState *fs = ls->fs; + check_condition(ls, fs->f->is_vararg, + "cannot use '...' outside a vararg function"); + init_exp(v, VVARARG, luaK_codeABC(fs, OP_VARARG, 0, 1, 0)); + break; + } + case '{': { /* constructor */ + constructor(ls, v); + return; + } + case TK_FUNCTION: { + luaX_next(ls); + body(ls, v, 0, ls->linenumber); + return; + } + default: { + suffixedexp(ls, v); + return; + } + } + luaX_next(ls); +} + + +static UnOpr getunopr (int op) { + switch (op) { + case TK_NOT: return OPR_NOT; + case '-': return OPR_MINUS; + case '~': return OPR_BNOT; + case '#': return OPR_LEN; + default: return OPR_NOUNOPR; + } +} + + +static BinOpr getbinopr (int op) { + switch (op) { + case '+': return OPR_ADD; + case '-': return OPR_SUB; + case '*': return OPR_MUL; + case '%': return OPR_MOD; + case '^': return OPR_POW; + case '/': return OPR_DIV; + case TK_IDIV: return OPR_IDIV; + case '&': return OPR_BAND; + case '|': return OPR_BOR; + case '~': return OPR_BXOR; + case TK_SHL: return OPR_SHL; + case TK_SHR: return OPR_SHR; + case TK_CONCAT: return OPR_CONCAT; + case TK_NE: return OPR_NE; + case TK_EQ: return OPR_EQ; + case '<': return OPR_LT; + case TK_LE: return OPR_LE; + case '>': return OPR_GT; + case TK_GE: return OPR_GE; + case TK_AND: return OPR_AND; + case TK_OR: return OPR_OR; + default: return OPR_NOBINOPR; + } +} + + +static const struct { + lu_byte left; /* left priority for each binary operator */ + lu_byte right; /* right priority */ +} priority[] = { /* ORDER OPR */ + {10, 10}, {10, 10}, /* '+' '-' */ + {11, 11}, {11, 11}, /* '*' '%' */ + {14, 13}, /* '^' (right associative) */ + {11, 11}, {11, 11}, /* '/' '//' */ + {6, 6}, {4, 4}, {5, 5}, /* '&' '|' '~' */ + {7, 7}, {7, 7}, /* '<<' '>>' */ + {9, 8}, /* '..' (right associative) */ + {3, 3}, {3, 3}, {3, 3}, /* ==, <, <= */ + {3, 3}, {3, 3}, {3, 3}, /* ~=, >, >= */ + {2, 2}, {1, 1} /* and, or */ +}; + +#define UNARY_PRIORITY 12 /* priority for unary operators */ + + +/* +** subexpr -> (simpleexp | unop subexpr) { binop subexpr } +** where 'binop' is any binary operator with a priority higher than 'limit' +*/ +static BinOpr subexpr (LexState *ls, expdesc *v, int limit) { + BinOpr op; + UnOpr uop; + enterlevel(ls); + uop = getunopr(ls->t.token); + if (uop != OPR_NOUNOPR) { + int line = ls->linenumber; + luaX_next(ls); + subexpr(ls, v, UNARY_PRIORITY); + luaK_prefix(ls->fs, uop, v, line); + } + else simpleexp(ls, v); + /* expand while operators have priorities higher than 'limit' */ + op = getbinopr(ls->t.token); + while (op != OPR_NOBINOPR && priority[op].left > limit) { + expdesc v2; + BinOpr nextop; + int line = ls->linenumber; + luaX_next(ls); + luaK_infix(ls->fs, op, v); + /* read sub-expression with higher priority */ + nextop = subexpr(ls, &v2, priority[op].right); + luaK_posfix(ls->fs, op, v, &v2, line); + op = nextop; + } + leavelevel(ls); + return op; /* return first untreated operator */ +} + + +static void expr (LexState *ls, expdesc *v) { + subexpr(ls, v, 0); +} + +/* }==================================================================== */ + + + +/* +** {====================================================================== +** Rules for Statements +** ======================================================================= +*/ + + +static void block (LexState *ls) { + /* block -> statlist */ + FuncState *fs = ls->fs; + BlockCnt bl; + enterblock(fs, &bl, 0); + statlist(ls); + leaveblock(fs); +} + + +/* +** structure to chain all variables in the left-hand side of an +** assignment +*/ +struct LHS_assign { + struct LHS_assign *prev; + expdesc v; /* variable (global, local, upvalue, or indexed) */ +}; + + +/* +** check whether, in an assignment to an upvalue/local variable, the +** upvalue/local variable is begin used in a previous assignment to a +** table. If so, save original upvalue/local value in a safe place and +** use this safe copy in the previous assignment. +*/ +static void check_conflict (LexState *ls, struct LHS_assign *lh, expdesc *v) { + FuncState *fs = ls->fs; + int extra = fs->freereg; /* eventual position to save local variable */ + int conflict = 0; + for (; lh; lh = lh->prev) { /* check all previous assignments */ + if (lh->v.k == VINDEXED) { /* assigning to a table? */ + /* table is the upvalue/local being assigned now? */ + if (lh->v.u.ind.vt == v->k && lh->v.u.ind.t == v->u.info) { + conflict = 1; + lh->v.u.ind.vt = VLOCAL; + lh->v.u.ind.t = extra; /* previous assignment will use safe copy */ + } + /* index is the local being assigned? (index cannot be upvalue) */ + if (v->k == VLOCAL && lh->v.u.ind.idx == v->u.info) { + conflict = 1; + lh->v.u.ind.idx = extra; /* previous assignment will use safe copy */ + } + } + } + if (conflict) { + /* copy upvalue/local value to a temporary (in position 'extra') */ + OpCode op = (v->k == VLOCAL) ? OP_MOVE : OP_GETUPVAL; + luaK_codeABC(fs, op, extra, v->u.info, 0); + luaK_reserveregs(fs, 1); + } +} + + +static void assignment (LexState *ls, struct LHS_assign *lh, int nvars) { + expdesc e; + check_condition(ls, vkisvar(lh->v.k), "syntax error"); + if (testnext(ls, ',')) { /* assignment -> ',' suffixedexp assignment */ + struct LHS_assign nv; + nv.prev = lh; + suffixedexp(ls, &nv.v); + if (nv.v.k != VINDEXED) + check_conflict(ls, lh, &nv.v); + checklimit(ls->fs, nvars + ls->L->nCcalls, LUAI_MAXCCALLS, + "C levels"); + assignment(ls, &nv, nvars+1); + } + else { /* assignment -> '=' explist */ + int nexps; + checknext(ls, '='); + nexps = explist(ls, &e); + if (nexps != nvars) + adjust_assign(ls, nvars, nexps, &e); + else { + luaK_setoneret(ls->fs, &e); /* close last expression */ + luaK_storevar(ls->fs, &lh->v, &e); + return; /* avoid default */ + } + } + init_exp(&e, VNONRELOC, ls->fs->freereg-1); /* default assignment */ + luaK_storevar(ls->fs, &lh->v, &e); +} + + +static int cond (LexState *ls) { + /* cond -> exp */ + expdesc v; + expr(ls, &v); /* read condition */ + if (v.k == VNIL) v.k = VFALSE; /* 'falses' are all equal here */ + luaK_goiftrue(ls->fs, &v); + return v.f; +} + + +static void gotostat (LexState *ls, int pc) { + int line = ls->linenumber; + TString *label; + int g; + if (testnext(ls, TK_GOTO)) + label = str_checkname(ls); + else { + luaX_next(ls); /* skip break */ + label = luaS_new(ls->L, "break"); + } + g = newlabelentry(ls, &ls->dyd->gt, label, line, pc); + findlabel(ls, g); /* close it if label already defined */ +} + + +/* check for repeated labels on the same block */ +static void checkrepeated (FuncState *fs, Labellist *ll, TString *label) { + int i; + for (i = fs->bl->firstlabel; i < ll->n; i++) { + if (eqstr(label, ll->arr[i].name)) { + const char *msg = luaO_pushfstring(fs->ls->L, + "label '%s' already defined on line %d", + getstr(label), ll->arr[i].line); + semerror(fs->ls, msg); + } + } +} + + +/* skip no-op statements */ +static void skipnoopstat (LexState *ls) { + while (ls->t.token == ';' || ls->t.token == TK_DBCOLON) + statement(ls); +} + + +static void labelstat (LexState *ls, TString *label, int line) { + /* label -> '::' NAME '::' */ + FuncState *fs = ls->fs; + Labellist *ll = &ls->dyd->label; + int l; /* index of new label being created */ + checkrepeated(fs, ll, label); /* check for repeated labels */ + checknext(ls, TK_DBCOLON); /* skip double colon */ + /* create new entry for this label */ + l = newlabelentry(ls, ll, label, line, luaK_getlabel(fs)); + skipnoopstat(ls); /* skip other no-op statements */ + if (block_follow(ls, 0)) { /* label is last no-op statement in the block? */ + /* assume that locals are already out of scope */ + ll->arr[l].nactvar = fs->bl->nactvar; + } + findgotos(ls, &ll->arr[l]); +} + + +static void whilestat (LexState *ls, int line) { + /* whilestat -> WHILE cond DO block END */ + FuncState *fs = ls->fs; + int whileinit; + int condexit; + BlockCnt bl; + luaX_next(ls); /* skip WHILE */ + whileinit = luaK_getlabel(fs); + condexit = cond(ls); + enterblock(fs, &bl, 1); + checknext(ls, TK_DO); + block(ls); + luaK_jumpto(fs, whileinit); + check_match(ls, TK_END, TK_WHILE, line); + leaveblock(fs); + luaK_patchtohere(fs, condexit); /* false conditions finish the loop */ +} + + +static void repeatstat (LexState *ls, int line) { + /* repeatstat -> REPEAT block UNTIL cond */ + int condexit; + FuncState *fs = ls->fs; + int repeat_init = luaK_getlabel(fs); + BlockCnt bl1, bl2; + enterblock(fs, &bl1, 1); /* loop block */ + enterblock(fs, &bl2, 0); /* scope block */ + luaX_next(ls); /* skip REPEAT */ + statlist(ls); + check_match(ls, TK_UNTIL, TK_REPEAT, line); + condexit = cond(ls); /* read condition (inside scope block) */ + if (bl2.upval) /* upvalues? */ + luaK_patchclose(fs, condexit, bl2.nactvar); + leaveblock(fs); /* finish scope */ + luaK_patchlist(fs, condexit, repeat_init); /* close the loop */ + leaveblock(fs); /* finish loop */ +} + + +static int exp1 (LexState *ls) { + expdesc e; + int reg; + expr(ls, &e); + luaK_exp2nextreg(ls->fs, &e); + lua_assert(e.k == VNONRELOC); + reg = e.u.info; + return reg; +} + + +static void forbody (LexState *ls, int base, int line, int nvars, int isnum) { + /* forbody -> DO block */ + BlockCnt bl; + FuncState *fs = ls->fs; + int prep, endfor; + adjustlocalvars(ls, 3); /* control variables */ + checknext(ls, TK_DO); + prep = isnum ? luaK_codeAsBx(fs, OP_FORPREP, base, NO_JUMP) : luaK_jump(fs); + enterblock(fs, &bl, 0); /* scope for declared variables */ + adjustlocalvars(ls, nvars); + luaK_reserveregs(fs, nvars); + block(ls); + leaveblock(fs); /* end of scope for declared variables */ + luaK_patchtohere(fs, prep); + if (isnum) /* numeric for? */ + endfor = luaK_codeAsBx(fs, OP_FORLOOP, base, NO_JUMP); + else { /* generic for */ + luaK_codeABC(fs, OP_TFORCALL, base, 0, nvars); + luaK_fixline(fs, line); + endfor = luaK_codeAsBx(fs, OP_TFORLOOP, base + 2, NO_JUMP); + } + luaK_patchlist(fs, endfor, prep + 1); + luaK_fixline(fs, line); +} + + +static void fornum (LexState *ls, TString *varname, int line) { + /* fornum -> NAME = exp1,exp1[,exp1] forbody */ + FuncState *fs = ls->fs; + int base = fs->freereg; + new_localvarliteral(ls, "(for index)"); + new_localvarliteral(ls, "(for limit)"); + new_localvarliteral(ls, "(for step)"); + new_localvar(ls, varname); + checknext(ls, '='); + exp1(ls); /* initial value */ + checknext(ls, ','); + exp1(ls); /* limit */ + if (testnext(ls, ',')) + exp1(ls); /* optional step */ + else { /* default step = 1 */ + luaK_codek(fs, fs->freereg, luaK_intK(fs, 1)); + luaK_reserveregs(fs, 1); + } + forbody(ls, base, line, 1, 1); +} + + +static void forlist (LexState *ls, TString *indexname) { + /* forlist -> NAME {,NAME} IN explist forbody */ + FuncState *fs = ls->fs; + expdesc e; + int nvars = 4; /* gen, state, control, plus at least one declared var */ + int line; + int base = fs->freereg; + /* create control variables */ + new_localvarliteral(ls, "(for generator)"); + new_localvarliteral(ls, "(for state)"); + new_localvarliteral(ls, "(for control)"); + /* create declared variables */ + new_localvar(ls, indexname); + while (testnext(ls, ',')) { + new_localvar(ls, str_checkname(ls)); + nvars++; + } + checknext(ls, TK_IN); + line = ls->linenumber; + adjust_assign(ls, 3, explist(ls, &e), &e); + luaK_checkstack(fs, 3); /* extra space to call generator */ + forbody(ls, base, line, nvars - 3, 0); +} + + +static void forstat (LexState *ls, int line) { + /* forstat -> FOR (fornum | forlist) END */ + FuncState *fs = ls->fs; + TString *varname; + BlockCnt bl; + enterblock(fs, &bl, 1); /* scope for loop and control variables */ + luaX_next(ls); /* skip 'for' */ + varname = str_checkname(ls); /* first variable name */ + switch (ls->t.token) { + case '=': fornum(ls, varname, line); break; + case ',': case TK_IN: forlist(ls, varname); break; + default: luaX_syntaxerror(ls, "'=' or 'in' expected"); + } + check_match(ls, TK_END, TK_FOR, line); + leaveblock(fs); /* loop scope ('break' jumps to this point) */ +} + + +static void test_then_block (LexState *ls, int *escapelist) { + /* test_then_block -> [IF | ELSEIF] cond THEN block */ + BlockCnt bl; + FuncState *fs = ls->fs; + expdesc v; + int jf; /* instruction to skip 'then' code (if condition is false) */ + luaX_next(ls); /* skip IF or ELSEIF */ + expr(ls, &v); /* read condition */ + checknext(ls, TK_THEN); + if (ls->t.token == TK_GOTO || ls->t.token == TK_BREAK) { + luaK_goiffalse(ls->fs, &v); /* will jump to label if condition is true */ + enterblock(fs, &bl, 0); /* must enter block before 'goto' */ + gotostat(ls, v.t); /* handle goto/break */ + skipnoopstat(ls); /* skip other no-op statements */ + if (block_follow(ls, 0)) { /* 'goto' is the entire block? */ + leaveblock(fs); + return; /* and that is it */ + } + else /* must skip over 'then' part if condition is false */ + jf = luaK_jump(fs); + } + else { /* regular case (not goto/break) */ + luaK_goiftrue(ls->fs, &v); /* skip over block if condition is false */ + enterblock(fs, &bl, 0); + jf = v.f; + } + statlist(ls); /* 'then' part */ + leaveblock(fs); + if (ls->t.token == TK_ELSE || + ls->t.token == TK_ELSEIF) /* followed by 'else'/'elseif'? */ + luaK_concat(fs, escapelist, luaK_jump(fs)); /* must jump over it */ + luaK_patchtohere(fs, jf); +} + + +static void ifstat (LexState *ls, int line) { + /* ifstat -> IF cond THEN block {ELSEIF cond THEN block} [ELSE block] END */ + FuncState *fs = ls->fs; + int escapelist = NO_JUMP; /* exit list for finished parts */ + test_then_block(ls, &escapelist); /* IF cond THEN block */ + while (ls->t.token == TK_ELSEIF) + test_then_block(ls, &escapelist); /* ELSEIF cond THEN block */ + if (testnext(ls, TK_ELSE)) + block(ls); /* 'else' part */ + check_match(ls, TK_END, TK_IF, line); + luaK_patchtohere(fs, escapelist); /* patch escape list to 'if' end */ +} + + +static void localfunc (LexState *ls) { + expdesc b; + FuncState *fs = ls->fs; + new_localvar(ls, str_checkname(ls)); /* new local variable */ + adjustlocalvars(ls, 1); /* enter its scope */ + body(ls, &b, 0, ls->linenumber); /* function created in next register */ + /* debug information will only see the variable after this point! */ + getlocvar(fs, b.u.info)->startpc = fs->pc; +} + + +static void localstat (LexState *ls) { + /* stat -> LOCAL NAME {',' NAME} ['=' explist] */ + int nvars = 0; + int nexps; + expdesc e; + do { + new_localvar(ls, str_checkname(ls)); + nvars++; + } while (testnext(ls, ',')); + if (testnext(ls, '=')) + nexps = explist(ls, &e); + else { + e.k = VVOID; + nexps = 0; + } + adjust_assign(ls, nvars, nexps, &e); + adjustlocalvars(ls, nvars); +} + + +static int funcname (LexState *ls, expdesc *v) { + /* funcname -> NAME {fieldsel} [':' NAME] */ + int ismethod = 0; + singlevar(ls, v); + while (ls->t.token == '.') + fieldsel(ls, v); + if (ls->t.token == ':') { + ismethod = 1; + fieldsel(ls, v); + } + return ismethod; +} + + +static void funcstat (LexState *ls, int line) { + /* funcstat -> FUNCTION funcname body */ + int ismethod; + expdesc v, b; + luaX_next(ls); /* skip FUNCTION */ + ismethod = funcname(ls, &v); + body(ls, &b, ismethod, line); + luaK_storevar(ls->fs, &v, &b); + luaK_fixline(ls->fs, line); /* definition "happens" in the first line */ +} + + +static void exprstat (LexState *ls) { + /* stat -> func | assignment */ + FuncState *fs = ls->fs; + struct LHS_assign v; + suffixedexp(ls, &v.v); + if (ls->t.token == '=' || ls->t.token == ',') { /* stat -> assignment ? */ + v.prev = NULL; + assignment(ls, &v, 1); + } + else { /* stat -> func */ + check_condition(ls, v.v.k == VCALL, "syntax error"); + SETARG_C(getinstruction(fs, &v.v), 1); /* call statement uses no results */ + } +} + + +static void retstat (LexState *ls) { + /* stat -> RETURN [explist] [';'] */ + FuncState *fs = ls->fs; + expdesc e; + int first, nret; /* registers with returned values */ + if (block_follow(ls, 1) || ls->t.token == ';') + first = nret = 0; /* return no values */ + else { + nret = explist(ls, &e); /* optional return values */ + if (hasmultret(e.k)) { + luaK_setmultret(fs, &e); + if (e.k == VCALL && nret == 1) { /* tail call? */ + SET_OPCODE(getinstruction(fs,&e), OP_TAILCALL); + lua_assert(GETARG_A(getinstruction(fs,&e)) == fs->nactvar); + } + first = fs->nactvar; + nret = LUA_MULTRET; /* return all values */ + } + else { + if (nret == 1) /* only one single value? */ + first = luaK_exp2anyreg(fs, &e); + else { + luaK_exp2nextreg(fs, &e); /* values must go to the stack */ + first = fs->nactvar; /* return all active values */ + lua_assert(nret == fs->freereg - first); + } + } + } + luaK_ret(fs, first, nret); + testnext(ls, ';'); /* skip optional semicolon */ +} + + +static void statement (LexState *ls) { + int line = ls->linenumber; /* may be needed for error messages */ + enterlevel(ls); + switch (ls->t.token) { + case ';': { /* stat -> ';' (empty statement) */ + luaX_next(ls); /* skip ';' */ + break; + } + case TK_IF: { /* stat -> ifstat */ + ifstat(ls, line); + break; + } + case TK_WHILE: { /* stat -> whilestat */ + whilestat(ls, line); + break; + } + case TK_DO: { /* stat -> DO block END */ + luaX_next(ls); /* skip DO */ + block(ls); + check_match(ls, TK_END, TK_DO, line); + break; + } + case TK_FOR: { /* stat -> forstat */ + forstat(ls, line); + break; + } + case TK_REPEAT: { /* stat -> repeatstat */ + repeatstat(ls, line); + break; + } + case TK_FUNCTION: { /* stat -> funcstat */ + funcstat(ls, line); + break; + } + case TK_LOCAL: { /* stat -> localstat */ + luaX_next(ls); /* skip LOCAL */ + if (testnext(ls, TK_FUNCTION)) /* local function? */ + localfunc(ls); + else + localstat(ls); + break; + } + case TK_DBCOLON: { /* stat -> label */ + luaX_next(ls); /* skip double colon */ + labelstat(ls, str_checkname(ls), line); + break; + } + case TK_RETURN: { /* stat -> retstat */ + luaX_next(ls); /* skip RETURN */ + retstat(ls); + break; + } + case TK_BREAK: /* stat -> breakstat */ + case TK_GOTO: { /* stat -> 'goto' NAME */ + gotostat(ls, luaK_jump(ls->fs)); + break; + } + default: { /* stat -> func | assignment */ + exprstat(ls); + break; + } + } + lua_assert(ls->fs->f->maxstacksize >= ls->fs->freereg && + ls->fs->freereg >= ls->fs->nactvar); + ls->fs->freereg = ls->fs->nactvar; /* free registers */ + leavelevel(ls); +} + +/* }====================================================================== */ + + +/* +** compiles the main function, which is a regular vararg function with an +** upvalue named LUA_ENV +*/ +static void mainfunc (LexState *ls, FuncState *fs) { + BlockCnt bl; + expdesc v; + open_func(ls, fs, &bl); + fs->f->is_vararg = 1; /* main function is always declared vararg */ + init_exp(&v, VLOCAL, 0); /* create and... */ + newupvalue(fs, ls->envn, &v); /* ...set environment upvalue */ + luaX_next(ls); /* read first token */ + statlist(ls); /* parse main body */ + check(ls, TK_EOS); + close_func(ls); +} + + +LClosure *luaY_parser (lua_State *L, ZIO *z, Mbuffer *buff, + Dyndata *dyd, const char *name, int firstchar) { + LexState lexstate; + FuncState funcstate; + LClosure *cl = luaF_newLclosure(L, 1); /* create main closure */ + setclLvalue(L, L->top, cl); /* anchor it (to avoid being collected) */ + luaD_inctop(L); + lexstate.h = luaH_new(L); /* create table for scanner */ + sethvalue(L, L->top, lexstate.h); /* anchor it */ + luaD_inctop(L); + funcstate.f = cl->p = luaF_newproto(L); + funcstate.f->source = luaS_new(L, name); /* create and anchor TString */ + lua_assert(iswhite(funcstate.f)); /* do not need barrier here */ + lexstate.buff = buff; + lexstate.dyd = dyd; + dyd->actvar.n = dyd->gt.n = dyd->label.n = 0; + luaX_setinput(L, &lexstate, z, funcstate.f->source, firstchar); + mainfunc(&lexstate, &funcstate); + lua_assert(!funcstate.prev && funcstate.nups == 1 && !lexstate.fs); + /* all scopes should be correctly finished */ + lua_assert(dyd->actvar.n == 0 && dyd->gt.n == 0 && dyd->label.n == 0); + L->top--; /* remove scanner's table */ + return cl; /* closure is on the stack, too */ +} + diff --git a/EQ2/source/LUA/lparser.h b/EQ2/source/LUA/lparser.h new file mode 100644 index 000000000..02e9b03ae --- /dev/null +++ b/EQ2/source/LUA/lparser.h @@ -0,0 +1,133 @@ +/* +** $Id: lparser.h,v 1.76 2015/12/30 18:16:13 roberto Exp $ +** Lua Parser +** See Copyright Notice in lua.h +*/ + +#ifndef lparser_h +#define lparser_h + +#include "llimits.h" +#include "lobject.h" +#include "lzio.h" + + +/* +** Expression and variable descriptor. +** Code generation for variables and expressions can be delayed to allow +** optimizations; An 'expdesc' structure describes a potentially-delayed +** variable/expression. It has a description of its "main" value plus a +** list of conditional jumps that can also produce its value (generated +** by short-circuit operators 'and'/'or'). +*/ + +/* kinds of variables/expressions */ +typedef enum { + VVOID, /* when 'expdesc' describes the last expression a list, + this kind means an empty list (so, no expression) */ + VNIL, /* constant nil */ + VTRUE, /* constant true */ + VFALSE, /* constant false */ + VK, /* constant in 'k'; info = index of constant in 'k' */ + VKFLT, /* floating constant; nval = numerical float value */ + VKINT, /* integer constant; nval = numerical integer value */ + VNONRELOC, /* expression has its value in a fixed register; + info = result register */ + VLOCAL, /* local variable; info = local register */ + VUPVAL, /* upvalue variable; info = index of upvalue in 'upvalues' */ + VINDEXED, /* indexed variable; + ind.vt = whether 't' is register or upvalue; + ind.t = table register or upvalue; + ind.idx = key's R/K index */ + VJMP, /* expression is a test/comparison; + info = pc of corresponding jump instruction */ + VRELOCABLE, /* expression can put result in any register; + info = instruction pc */ + VCALL, /* expression is a function call; info = instruction pc */ + VVARARG /* vararg expression; info = instruction pc */ +} expkind; + + +#define vkisvar(k) (VLOCAL <= (k) && (k) <= VINDEXED) +#define vkisinreg(k) ((k) == VNONRELOC || (k) == VLOCAL) + +typedef struct expdesc { + expkind k; + union { + lua_Integer ival; /* for VKINT */ + lua_Number nval; /* for VKFLT */ + int info; /* for generic use */ + struct { /* for indexed variables (VINDEXED) */ + short idx; /* index (R/K) */ + lu_byte t; /* table (register or upvalue) */ + lu_byte vt; /* whether 't' is register (VLOCAL) or upvalue (VUPVAL) */ + } ind; + } u; + int t; /* patch list of 'exit when true' */ + int f; /* patch list of 'exit when false' */ +} expdesc; + + +/* description of active local variable */ +typedef struct Vardesc { + short idx; /* variable index in stack */ +} Vardesc; + + +/* description of pending goto statements and label statements */ +typedef struct Labeldesc { + TString *name; /* label identifier */ + int pc; /* position in code */ + int line; /* line where it appeared */ + lu_byte nactvar; /* local level where it appears in current block */ +} Labeldesc; + + +/* list of labels or gotos */ +typedef struct Labellist { + Labeldesc *arr; /* array */ + int n; /* number of entries in use */ + int size; /* array size */ +} Labellist; + + +/* dynamic structures used by the parser */ +typedef struct Dyndata { + struct { /* list of active local variables */ + Vardesc *arr; + int n; + int size; + } actvar; + Labellist gt; /* list of pending gotos */ + Labellist label; /* list of active labels */ +} Dyndata; + + +/* control of blocks */ +struct BlockCnt; /* defined in lparser.c */ + + +/* state needed to generate code for a given function */ +typedef struct FuncState { + Proto *f; /* current function header */ + struct FuncState *prev; /* enclosing function */ + struct LexState *ls; /* lexical state */ + struct BlockCnt *bl; /* chain of current blocks */ + int pc; /* next position to code (equivalent to 'ncode') */ + int lasttarget; /* 'label' of last 'jump label' */ + int jpc; /* list of pending jumps to 'pc' */ + int nk; /* number of elements in 'k' */ + int np; /* number of elements in 'p' */ + int firstlocal; /* index of first local var (in Dyndata array) */ + short nlocvars; /* number of elements in 'f->locvars' */ + lu_byte nactvar; /* number of active local variables */ + lu_byte nups; /* number of upvalues */ + lu_byte freereg; /* first free register */ +} FuncState; + + +LUAI_FUNC LClosure *luaY_parser (lua_State *L, ZIO *z, Mbuffer *buff, + Dyndata *dyd, const char *name, int firstchar); + + +#endif diff --git a/EQ2/source/LUA/lprefix.h b/EQ2/source/LUA/lprefix.h new file mode 100644 index 000000000..02daa837f --- /dev/null +++ b/EQ2/source/LUA/lprefix.h @@ -0,0 +1,45 @@ +/* +** $Id: lprefix.h,v 1.2 2014/12/29 16:54:13 roberto Exp $ +** Definitions for Lua code that must come before any other header file +** See Copyright Notice in lua.h +*/ + +#ifndef lprefix_h +#define lprefix_h + + +/* +** Allows POSIX/XSI stuff +*/ +#if !defined(LUA_USE_C89) /* { */ + +#if !defined(_XOPEN_SOURCE) +#define _XOPEN_SOURCE 600 +#elif _XOPEN_SOURCE == 0 +#undef _XOPEN_SOURCE /* use -D_XOPEN_SOURCE=0 to undefine it */ +#endif + +/* +** Allows manipulation of large files in gcc and some other compilers +*/ +#if !defined(LUA_32BITS) && !defined(_FILE_OFFSET_BITS) +#define _LARGEFILE_SOURCE 1 +#define _FILE_OFFSET_BITS 64 +#endif + +#endif /* } */ + + +/* +** Windows stuff +*/ +#if defined(_WIN32) /* { */ + +#if !defined(_CRT_SECURE_NO_WARNINGS) +#define _CRT_SECURE_NO_WARNINGS /* avoid warnings about ISO C functions */ +#endif + +#endif /* } */ + +#endif + diff --git a/EQ2/source/LUA/lstate.c b/EQ2/source/LUA/lstate.c new file mode 100644 index 000000000..9194ac341 --- /dev/null +++ b/EQ2/source/LUA/lstate.c @@ -0,0 +1,347 @@ +/* +** $Id: lstate.c,v 2.133 2015/11/13 12:16:51 roberto Exp $ +** Global State +** See Copyright Notice in lua.h +*/ + +#define lstate_c +#define LUA_CORE + +#include "lprefix.h" + + +#include +#include + +#include "lua.h" + +#include "lapi.h" +#include "ldebug.h" +#include "ldo.h" +#include "lfunc.h" +#include "lgc.h" +#include "llex.h" +#include "lmem.h" +#include "lstate.h" +#include "lstring.h" +#include "ltable.h" +#include "ltm.h" + + +#if !defined(LUAI_GCPAUSE) +#define LUAI_GCPAUSE 200 /* 200% */ +#endif + +#if !defined(LUAI_GCMUL) +#define LUAI_GCMUL 200 /* GC runs 'twice the speed' of memory allocation */ +#endif + + +/* +** a macro to help the creation of a unique random seed when a state is +** created; the seed is used to randomize hashes. +*/ +#if !defined(luai_makeseed) +#include +#define luai_makeseed() cast(unsigned int, time(NULL)) +#endif + + + +/* +** thread state + extra space +*/ +typedef struct LX { + lu_byte extra_[LUA_EXTRASPACE]; + lua_State l; +} LX; + + +/* +** Main thread combines a thread state and the global state +*/ +typedef struct LG { + LX l; + global_State g; +} LG; + + + +#define fromstate(L) (cast(LX *, cast(lu_byte *, (L)) - offsetof(LX, l))) + + +/* +** Compute an initial seed as random as possible. Rely on Address Space +** Layout Randomization (if present) to increase randomness.. +*/ +#define addbuff(b,p,e) \ + { size_t t = cast(size_t, e); \ + memcpy(b + p, &t, sizeof(t)); p += sizeof(t); } + +static unsigned int makeseed (lua_State *L) { + char buff[4 * sizeof(size_t)]; + unsigned int h = luai_makeseed(); + int p = 0; + addbuff(buff, p, L); /* heap variable */ + addbuff(buff, p, &h); /* local variable */ + addbuff(buff, p, luaO_nilobject); /* global variable */ + addbuff(buff, p, &lua_newstate); /* public function */ + lua_assert(p == sizeof(buff)); + return luaS_hash(buff, p, h); +} + + +/* +** set GCdebt to a new value keeping the value (totalbytes + GCdebt) +** invariant (and avoiding underflows in 'totalbytes') +*/ +void luaE_setdebt (global_State *g, l_mem debt) { + l_mem tb = gettotalbytes(g); + lua_assert(tb > 0); + if (debt < tb - MAX_LMEM) + debt = tb - MAX_LMEM; /* will make 'totalbytes == MAX_LMEM' */ + g->totalbytes = tb - debt; + g->GCdebt = debt; +} + + +CallInfo *luaE_extendCI (lua_State *L) { + CallInfo *ci = luaM_new(L, CallInfo); + lua_assert(L->ci->next == NULL); + L->ci->next = ci; + ci->previous = L->ci; + ci->next = NULL; + L->nci++; + return ci; +} + + +/* +** free all CallInfo structures not in use by a thread +*/ +void luaE_freeCI (lua_State *L) { + CallInfo *ci = L->ci; + CallInfo *next = ci->next; + ci->next = NULL; + while ((ci = next) != NULL) { + next = ci->next; + luaM_free(L, ci); + L->nci--; + } +} + + +/* +** free half of the CallInfo structures not in use by a thread +*/ +void luaE_shrinkCI (lua_State *L) { + CallInfo *ci = L->ci; + CallInfo *next2; /* next's next */ + /* while there are two nexts */ + while (ci->next != NULL && (next2 = ci->next->next) != NULL) { + luaM_free(L, ci->next); /* free next */ + L->nci--; + ci->next = next2; /* remove 'next' from the list */ + next2->previous = ci; + ci = next2; /* keep next's next */ + } +} + + +static void stack_init (lua_State *L1, lua_State *L) { + int i; CallInfo *ci; + /* initialize stack array */ + L1->stack = luaM_newvector(L, BASIC_STACK_SIZE, TValue); + L1->stacksize = BASIC_STACK_SIZE; + for (i = 0; i < BASIC_STACK_SIZE; i++) + setnilvalue(L1->stack + i); /* erase new stack */ + L1->top = L1->stack; + L1->stack_last = L1->stack + L1->stacksize - EXTRA_STACK; + /* initialize first ci */ + ci = &L1->base_ci; + ci->next = ci->previous = NULL; + ci->callstatus = 0; + ci->func = L1->top; + setnilvalue(L1->top++); /* 'function' entry for this 'ci' */ + ci->top = L1->top + LUA_MINSTACK; + L1->ci = ci; +} + + +static void freestack (lua_State *L) { + if (L->stack == NULL) + return; /* stack not completely built yet */ + L->ci = &L->base_ci; /* free the entire 'ci' list */ + luaE_freeCI(L); + lua_assert(L->nci == 0); + luaM_freearray(L, L->stack, L->stacksize); /* free stack array */ +} + + +/* +** Create registry table and its predefined values +*/ +static void init_registry (lua_State *L, global_State *g) { + TValue temp; + /* create registry */ + Table *registry = luaH_new(L); + sethvalue(L, &g->l_registry, registry); + luaH_resize(L, registry, LUA_RIDX_LAST, 0); + /* registry[LUA_RIDX_MAINTHREAD] = L */ + setthvalue(L, &temp, L); /* temp = L */ + luaH_setint(L, registry, LUA_RIDX_MAINTHREAD, &temp); + /* registry[LUA_RIDX_GLOBALS] = table of globals */ + sethvalue(L, &temp, luaH_new(L)); /* temp = new table (global table) */ + luaH_setint(L, registry, LUA_RIDX_GLOBALS, &temp); +} + + +/* +** open parts of the state that may cause memory-allocation errors. +** ('g->version' != NULL flags that the state was completely build) +*/ +static void f_luaopen (lua_State *L, void *ud) { + global_State *g = G(L); + UNUSED(ud); + stack_init(L, L); /* init stack */ + init_registry(L, g); + luaS_init(L); + luaT_init(L); + luaX_init(L); + g->gcrunning = 1; /* allow gc */ + g->version = lua_version(NULL); + luai_userstateopen(L); +} + + +/* +** preinitialize a thread with consistent values without allocating +** any memory (to avoid errors) +*/ +static void preinit_thread (lua_State *L, global_State *g) { + G(L) = g; + L->stack = NULL; + L->ci = NULL; + L->nci = 0; + L->stacksize = 0; + L->twups = L; /* thread has no upvalues */ + L->errorJmp = NULL; + L->nCcalls = 0; + L->hook = NULL; + L->hookmask = 0; + L->basehookcount = 0; + L->allowhook = 1; + resethookcount(L); + L->openupval = NULL; + L->nny = 1; + L->status = LUA_OK; + L->errfunc = 0; +} + + +static void close_state (lua_State *L) { + global_State *g = G(L); + luaF_close(L, L->stack); /* close all upvalues for this thread */ + luaC_freeallobjects(L); /* collect all objects */ + if (g->version) /* closing a fully built state? */ + luai_userstateclose(L); + luaM_freearray(L, G(L)->strt.hash, G(L)->strt.size); + freestack(L); + lua_assert(gettotalbytes(g) == sizeof(LG)); + (*g->frealloc)(g->ud, fromstate(L), sizeof(LG), 0); /* free main block */ +} + + +LUA_API lua_State *lua_newthread (lua_State *L) { + global_State *g = G(L); + lua_State *L1; + lua_lock(L); + luaC_checkGC(L); + /* create new thread */ + L1 = &cast(LX *, luaM_newobject(L, LUA_TTHREAD, sizeof(LX)))->l; + L1->marked = luaC_white(g); + L1->tt = LUA_TTHREAD; + /* link it on list 'allgc' */ + L1->next = g->allgc; + g->allgc = obj2gco(L1); + /* anchor it on L stack */ + setthvalue(L, L->top, L1); + api_incr_top(L); + preinit_thread(L1, g); + L1->hookmask = L->hookmask; + L1->basehookcount = L->basehookcount; + L1->hook = L->hook; + resethookcount(L1); + /* initialize L1 extra space */ + memcpy(lua_getextraspace(L1), lua_getextraspace(g->mainthread), + LUA_EXTRASPACE); + luai_userstatethread(L, L1); + stack_init(L1, L); /* init stack */ + lua_unlock(L); + return L1; +} + + +void luaE_freethread (lua_State *L, lua_State *L1) { + LX *l = fromstate(L1); + luaF_close(L1, L1->stack); /* close all upvalues for this thread */ + lua_assert(L1->openupval == NULL); + luai_userstatefree(L, L1); + freestack(L1); + luaM_free(L, l); +} + + +LUA_API lua_State *lua_newstate (lua_Alloc f, void *ud) { + int i; + lua_State *L; + global_State *g; + LG *l = cast(LG *, (*f)(ud, NULL, LUA_TTHREAD, sizeof(LG))); + if (l == NULL) return NULL; + L = &l->l.l; + g = &l->g; + L->next = NULL; + L->tt = LUA_TTHREAD; + g->currentwhite = bitmask(WHITE0BIT); + L->marked = luaC_white(g); + preinit_thread(L, g); + g->frealloc = f; + g->ud = ud; + g->mainthread = L; + g->seed = makeseed(L); + g->gcrunning = 0; /* no GC while building state */ + g->GCestimate = 0; + g->strt.size = g->strt.nuse = 0; + g->strt.hash = NULL; + setnilvalue(&g->l_registry); + g->panic = NULL; + g->version = NULL; + g->gcstate = GCSpause; + g->gckind = KGC_NORMAL; + g->allgc = g->finobj = g->tobefnz = g->fixedgc = NULL; + g->sweepgc = NULL; + g->gray = g->grayagain = NULL; + g->weak = g->ephemeron = g->allweak = NULL; + g->twups = NULL; + g->totalbytes = sizeof(LG); + g->GCdebt = 0; + g->gcfinnum = 0; + g->gcpause = LUAI_GCPAUSE; + g->gcstepmul = LUAI_GCMUL; + for (i=0; i < LUA_NUMTAGS; i++) g->mt[i] = NULL; + if (luaD_rawrunprotected(L, f_luaopen, NULL) != LUA_OK) { + /* memory allocation error: free partial state */ + close_state(L); + L = NULL; + } + return L; +} + + +LUA_API void lua_close (lua_State *L) { + L = G(L)->mainthread; /* only the main thread can be closed */ + lua_lock(L); + close_state(L); +} + + diff --git a/EQ2/source/LUA/lstate.h b/EQ2/source/LUA/lstate.h new file mode 100644 index 000000000..a469466c4 --- /dev/null +++ b/EQ2/source/LUA/lstate.h @@ -0,0 +1,235 @@ +/* +** $Id: lstate.h,v 2.133 2016/12/22 13:08:50 roberto Exp $ +** Global State +** See Copyright Notice in lua.h +*/ + +#ifndef lstate_h +#define lstate_h + +#include "lua.h" + +#include "lobject.h" +#include "ltm.h" +#include "lzio.h" + + +/* + +** Some notes about garbage-collected objects: All objects in Lua must +** be kept somehow accessible until being freed, so all objects always +** belong to one (and only one) of these lists, using field 'next' of +** the 'CommonHeader' for the link: +** +** 'allgc': all objects not marked for finalization; +** 'finobj': all objects marked for finalization; +** 'tobefnz': all objects ready to be finalized; +** 'fixedgc': all objects that are not to be collected (currently +** only small strings, such as reserved words). + +*/ + + +struct lua_longjmp; /* defined in ldo.c */ + + +/* +** Atomic type (relative to signals) to better ensure that 'lua_sethook' +** is thread safe +*/ +#if !defined(l_signalT) +#include +#define l_signalT sig_atomic_t +#endif + + +/* extra stack space to handle TM calls and some other extras */ +#define EXTRA_STACK 5 + + +#define BASIC_STACK_SIZE (2*LUA_MINSTACK) + + +/* kinds of Garbage Collection */ +#define KGC_NORMAL 0 +#define KGC_EMERGENCY 1 /* gc was forced by an allocation failure */ + + +typedef struct stringtable { + TString **hash; + int nuse; /* number of elements */ + int size; +} stringtable; + + +/* +** Information about a call. +** When a thread yields, 'func' is adjusted to pretend that the +** top function has only the yielded values in its stack; in that +** case, the actual 'func' value is saved in field 'extra'. +** When a function calls another with a continuation, 'extra' keeps +** the function index so that, in case of errors, the continuation +** function can be called with the correct top. +*/ +typedef struct CallInfo { + StkId func; /* function index in the stack */ + StkId top; /* top for this function */ + struct CallInfo *previous, *next; /* dynamic call link */ + union { + struct { /* only for Lua functions */ + StkId base; /* base for this function */ + const Instruction *savedpc; + } l; + struct { /* only for C functions */ + lua_KFunction k; /* continuation in case of yields */ + ptrdiff_t old_errfunc; + lua_KContext ctx; /* context info. in case of yields */ + } c; + } u; + ptrdiff_t extra; + short nresults; /* expected number of results from this function */ + unsigned short callstatus; +} CallInfo; + + +/* +** Bits in CallInfo status +*/ +#define CIST_OAH (1<<0) /* original value of 'allowhook' */ +#define CIST_LUA (1<<1) /* call is running a Lua function */ +#define CIST_HOOKED (1<<2) /* call is running a debug hook */ +#define CIST_FRESH (1<<3) /* call is running on a fresh invocation + of luaV_execute */ +#define CIST_YPCALL (1<<4) /* call is a yieldable protected call */ +#define CIST_TAIL (1<<5) /* call was tail called */ +#define CIST_HOOKYIELD (1<<6) /* last hook called yielded */ +#define CIST_LEQ (1<<7) /* using __lt for __le */ +#define CIST_FIN (1<<8) /* call is running a finalizer */ + +#define isLua(ci) ((ci)->callstatus & CIST_LUA) + +/* assume that CIST_OAH has offset 0 and that 'v' is strictly 0/1 */ +#define setoah(st,v) ((st) = ((st) & ~CIST_OAH) | (v)) +#define getoah(st) ((st) & CIST_OAH) + + +/* +** 'global state', shared by all threads of this state +*/ +typedef struct global_State { + lua_Alloc frealloc; /* function to reallocate memory */ + void *ud; /* auxiliary data to 'frealloc' */ + l_mem totalbytes; /* number of bytes currently allocated - GCdebt */ + l_mem GCdebt; /* bytes allocated not yet compensated by the collector */ + lu_mem GCmemtrav; /* memory traversed by the GC */ + lu_mem GCestimate; /* an estimate of the non-garbage memory in use */ + stringtable strt; /* hash table for strings */ + TValue l_registry; + unsigned int seed; /* randomized seed for hashes */ + lu_byte currentwhite; + lu_byte gcstate; /* state of garbage collector */ + lu_byte gckind; /* kind of GC running */ + lu_byte gcrunning; /* true if GC is running */ + GCObject *allgc; /* list of all collectable objects */ + GCObject **sweepgc; /* current position of sweep in list */ + GCObject *finobj; /* list of collectable objects with finalizers */ + GCObject *gray; /* list of gray objects */ + GCObject *grayagain; /* list of objects to be traversed atomically */ + GCObject *weak; /* list of tables with weak values */ + GCObject *ephemeron; /* list of ephemeron tables (weak keys) */ + GCObject *allweak; /* list of all-weak tables */ + GCObject *tobefnz; /* list of userdata to be GC */ + GCObject *fixedgc; /* list of objects not to be collected */ + struct lua_State *twups; /* list of threads with open upvalues */ + unsigned int gcfinnum; /* number of finalizers to call in each GC step */ + int gcpause; /* size of pause between successive GCs */ + int gcstepmul; /* GC 'granularity' */ + lua_CFunction panic; /* to be called in unprotected errors */ + struct lua_State *mainthread; + const lua_Number *version; /* pointer to version number */ + TString *memerrmsg; /* memory-error message */ + TString *tmname[TM_N]; /* array with tag-method names */ + struct Table *mt[LUA_NUMTAGS]; /* metatables for basic types */ + TString *strcache[STRCACHE_N][STRCACHE_M]; /* cache for strings in API */ +} global_State; + + +/* +** 'per thread' state +*/ +struct lua_State { + CommonHeader; + unsigned short nci; /* number of items in 'ci' list */ + lu_byte status; + StkId top; /* first free slot in the stack */ + global_State *l_G; + CallInfo *ci; /* call info for current function */ + const Instruction *oldpc; /* last pc traced */ + StkId stack_last; /* last free slot in the stack */ + StkId stack; /* stack base */ + UpVal *openupval; /* list of open upvalues in this stack */ + GCObject *gclist; + struct lua_State *twups; /* list of threads with open upvalues */ + struct lua_longjmp *errorJmp; /* current error recover point */ + CallInfo base_ci; /* CallInfo for first level (C calling Lua) */ + volatile lua_Hook hook; + ptrdiff_t errfunc; /* current error handling function (stack index) */ + int stacksize; + int basehookcount; + int hookcount; + unsigned short nny; /* number of non-yieldable calls in stack */ + unsigned short nCcalls; /* number of nested C calls */ + l_signalT hookmask; + lu_byte allowhook; +}; + + +#define G(L) (L->l_G) + + +/* +** Union of all collectable objects (only for conversions) +*/ +union GCUnion { + GCObject gc; /* common header */ + struct TString ts; + struct Udata u; + union Closure cl; + struct Table h; + struct Proto p; + struct lua_State th; /* thread */ +}; + + +#define cast_u(o) cast(union GCUnion *, (o)) + +/* macros to convert a GCObject into a specific value */ +#define gco2ts(o) \ + check_exp(novariant((o)->tt) == LUA_TSTRING, &((cast_u(o))->ts)) +#define gco2u(o) check_exp((o)->tt == LUA_TUSERDATA, &((cast_u(o))->u)) +#define gco2lcl(o) check_exp((o)->tt == LUA_TLCL, &((cast_u(o))->cl.l)) +#define gco2ccl(o) check_exp((o)->tt == LUA_TCCL, &((cast_u(o))->cl.c)) +#define gco2cl(o) \ + check_exp(novariant((o)->tt) == LUA_TFUNCTION, &((cast_u(o))->cl)) +#define gco2t(o) check_exp((o)->tt == LUA_TTABLE, &((cast_u(o))->h)) +#define gco2p(o) check_exp((o)->tt == LUA_TPROTO, &((cast_u(o))->p)) +#define gco2th(o) check_exp((o)->tt == LUA_TTHREAD, &((cast_u(o))->th)) + + +/* macro to convert a Lua object into a GCObject */ +#define obj2gco(v) \ + check_exp(novariant((v)->tt) < LUA_TDEADKEY, (&(cast_u(v)->gc))) + + +/* actual number of total bytes allocated */ +#define gettotalbytes(g) cast(lu_mem, (g)->totalbytes + (g)->GCdebt) + +LUAI_FUNC void luaE_setdebt (global_State *g, l_mem debt); +LUAI_FUNC void luaE_freethread (lua_State *L, lua_State *L1); +LUAI_FUNC CallInfo *luaE_extendCI (lua_State *L); +LUAI_FUNC void luaE_freeCI (lua_State *L); +LUAI_FUNC void luaE_shrinkCI (lua_State *L); + + +#endif + diff --git a/EQ2/source/LUA/lstring.c b/EQ2/source/LUA/lstring.c new file mode 100644 index 000000000..9351766fd --- /dev/null +++ b/EQ2/source/LUA/lstring.c @@ -0,0 +1,248 @@ +/* +** $Id: lstring.c,v 2.56 2015/11/23 11:32:51 roberto Exp $ +** String table (keeps all strings handled by Lua) +** See Copyright Notice in lua.h +*/ + +#define lstring_c +#define LUA_CORE + +#include "lprefix.h" + + +#include + +#include "lua.h" + +#include "ldebug.h" +#include "ldo.h" +#include "lmem.h" +#include "lobject.h" +#include "lstate.h" +#include "lstring.h" + + +#define MEMERRMSG "not enough memory" + + +/* +** Lua will use at most ~(2^LUAI_HASHLIMIT) bytes from a string to +** compute its hash +*/ +#if !defined(LUAI_HASHLIMIT) +#define LUAI_HASHLIMIT 5 +#endif + + +/* +** equality for long strings +*/ +int luaS_eqlngstr (TString *a, TString *b) { + size_t len = a->u.lnglen; + lua_assert(a->tt == LUA_TLNGSTR && b->tt == LUA_TLNGSTR); + return (a == b) || /* same instance or... */ + ((len == b->u.lnglen) && /* equal length and ... */ + (memcmp(getstr(a), getstr(b), len) == 0)); /* equal contents */ +} + + +unsigned int luaS_hash (const char *str, size_t l, unsigned int seed) { + unsigned int h = seed ^ cast(unsigned int, l); + size_t step = (l >> LUAI_HASHLIMIT) + 1; + for (; l >= step; l -= step) + h ^= ((h<<5) + (h>>2) + cast_byte(str[l - 1])); + return h; +} + + +unsigned int luaS_hashlongstr (TString *ts) { + lua_assert(ts->tt == LUA_TLNGSTR); + if (ts->extra == 0) { /* no hash? */ + ts->hash = luaS_hash(getstr(ts), ts->u.lnglen, ts->hash); + ts->extra = 1; /* now it has its hash */ + } + return ts->hash; +} + + +/* +** resizes the string table +*/ +void luaS_resize (lua_State *L, int newsize) { + int i; + stringtable *tb = &G(L)->strt; + if (newsize > tb->size) { /* grow table if needed */ + luaM_reallocvector(L, tb->hash, tb->size, newsize, TString *); + for (i = tb->size; i < newsize; i++) + tb->hash[i] = NULL; + } + for (i = 0; i < tb->size; i++) { /* rehash */ + TString *p = tb->hash[i]; + tb->hash[i] = NULL; + while (p) { /* for each node in the list */ + TString *hnext = p->u.hnext; /* save next */ + unsigned int h = lmod(p->hash, newsize); /* new position */ + p->u.hnext = tb->hash[h]; /* chain it */ + tb->hash[h] = p; + p = hnext; + } + } + if (newsize < tb->size) { /* shrink table if needed */ + /* vanishing slice should be empty */ + lua_assert(tb->hash[newsize] == NULL && tb->hash[tb->size - 1] == NULL); + luaM_reallocvector(L, tb->hash, tb->size, newsize, TString *); + } + tb->size = newsize; +} + + +/* +** Clear API string cache. (Entries cannot be empty, so fill them with +** a non-collectable string.) +*/ +void luaS_clearcache (global_State *g) { + int i, j; + for (i = 0; i < STRCACHE_N; i++) + for (j = 0; j < STRCACHE_M; j++) { + if (iswhite(g->strcache[i][j])) /* will entry be collected? */ + g->strcache[i][j] = g->memerrmsg; /* replace it with something fixed */ + } +} + + +/* +** Initialize the string table and the string cache +*/ +void luaS_init (lua_State *L) { + global_State *g = G(L); + int i, j; + luaS_resize(L, MINSTRTABSIZE); /* initial size of string table */ + /* pre-create memory-error message */ + g->memerrmsg = luaS_newliteral(L, MEMERRMSG); + luaC_fix(L, obj2gco(g->memerrmsg)); /* it should never be collected */ + for (i = 0; i < STRCACHE_N; i++) /* fill cache with valid strings */ + for (j = 0; j < STRCACHE_M; j++) + g->strcache[i][j] = g->memerrmsg; +} + + + +/* +** creates a new string object +*/ +static TString *createstrobj (lua_State *L, size_t l, int tag, unsigned int h) { + TString *ts; + GCObject *o; + size_t totalsize; /* total size of TString object */ + totalsize = sizelstring(l); + o = luaC_newobj(L, tag, totalsize); + ts = gco2ts(o); + ts->hash = h; + ts->extra = 0; + getstr(ts)[l] = '\0'; /* ending 0 */ + return ts; +} + + +TString *luaS_createlngstrobj (lua_State *L, size_t l) { + TString *ts = createstrobj(L, l, LUA_TLNGSTR, G(L)->seed); + ts->u.lnglen = l; + return ts; +} + + +void luaS_remove (lua_State *L, TString *ts) { + stringtable *tb = &G(L)->strt; + TString **p = &tb->hash[lmod(ts->hash, tb->size)]; + while (*p != ts) /* find previous element */ + p = &(*p)->u.hnext; + *p = (*p)->u.hnext; /* remove element from its list */ + tb->nuse--; +} + + +/* +** checks whether short string exists and reuses it or creates a new one +*/ +static TString *internshrstr (lua_State *L, const char *str, size_t l) { + TString *ts; + global_State *g = G(L); + unsigned int h = luaS_hash(str, l, g->seed); + TString **list = &g->strt.hash[lmod(h, g->strt.size)]; + lua_assert(str != NULL); /* otherwise 'memcmp'/'memcpy' are undefined */ + for (ts = *list; ts != NULL; ts = ts->u.hnext) { + if (l == ts->shrlen && + (memcmp(str, getstr(ts), l * sizeof(char)) == 0)) { + /* found! */ + if (isdead(g, ts)) /* dead (but not collected yet)? */ + changewhite(ts); /* resurrect it */ + return ts; + } + } + if (g->strt.nuse >= g->strt.size && g->strt.size <= MAX_INT/2) { + luaS_resize(L, g->strt.size * 2); + list = &g->strt.hash[lmod(h, g->strt.size)]; /* recompute with new size */ + } + ts = createstrobj(L, l, LUA_TSHRSTR, h); + memcpy(getstr(ts), str, l * sizeof(char)); + ts->shrlen = cast_byte(l); + ts->u.hnext = *list; + *list = ts; + g->strt.nuse++; + return ts; +} + + +/* +** new string (with explicit length) +*/ +TString *luaS_newlstr (lua_State *L, const char *str, size_t l) { + if (l <= LUAI_MAXSHORTLEN) /* short string? */ + return internshrstr(L, str, l); + else { + TString *ts; + if (l >= (MAX_SIZE - sizeof(TString))/sizeof(char)) + luaM_toobig(L); + ts = luaS_createlngstrobj(L, l); + memcpy(getstr(ts), str, l * sizeof(char)); + return ts; + } +} + + +/* +** Create or reuse a zero-terminated string, first checking in the +** cache (using the string address as a key). The cache can contain +** only zero-terminated strings, so it is safe to use 'strcmp' to +** check hits. +*/ +TString *luaS_new (lua_State *L, const char *str) { + unsigned int i = point2uint(str) % STRCACHE_N; /* hash */ + int j; + TString **p = G(L)->strcache[i]; + for (j = 0; j < STRCACHE_M; j++) { + if (strcmp(str, getstr(p[j])) == 0) /* hit? */ + return p[j]; /* that is it */ + } + /* normal route */ + for (j = STRCACHE_M - 1; j > 0; j--) + p[j] = p[j - 1]; /* move out last element */ + /* new element is first in the list */ + p[0] = luaS_newlstr(L, str, strlen(str)); + return p[0]; +} + + +Udata *luaS_newudata (lua_State *L, size_t s) { + Udata *u; + GCObject *o; + if (s > MAX_SIZE - sizeof(Udata)) + luaM_toobig(L); + o = luaC_newobj(L, LUA_TUSERDATA, sizeludata(s)); + u = gco2u(o); + u->len = s; + u->metatable = NULL; + setuservalue(L, u, luaO_nilobject); + return u; +} + diff --git a/EQ2/source/LUA/lstring.h b/EQ2/source/LUA/lstring.h new file mode 100644 index 000000000..27efd2077 --- /dev/null +++ b/EQ2/source/LUA/lstring.h @@ -0,0 +1,49 @@ +/* +** $Id: lstring.h,v 1.61 2015/11/03 15:36:01 roberto Exp $ +** String table (keep all strings handled by Lua) +** See Copyright Notice in lua.h +*/ + +#ifndef lstring_h +#define lstring_h + +#include "lgc.h" +#include "lobject.h" +#include "lstate.h" + + +#define sizelstring(l) (sizeof(union UTString) + ((l) + 1) * sizeof(char)) + +#define sizeludata(l) (sizeof(union UUdata) + (l)) +#define sizeudata(u) sizeludata((u)->len) + +#define luaS_newliteral(L, s) (luaS_newlstr(L, "" s, \ + (sizeof(s)/sizeof(char))-1)) + + +/* +** test whether a string is a reserved word +*/ +#define isreserved(s) ((s)->tt == LUA_TSHRSTR && (s)->extra > 0) + + +/* +** equality for short strings, which are always internalized +*/ +#define eqshrstr(a,b) check_exp((a)->tt == LUA_TSHRSTR, (a) == (b)) + + +LUAI_FUNC unsigned int luaS_hash (const char *str, size_t l, unsigned int seed); +LUAI_FUNC unsigned int luaS_hashlongstr (TString *ts); +LUAI_FUNC int luaS_eqlngstr (TString *a, TString *b); +LUAI_FUNC void luaS_resize (lua_State *L, int newsize); +LUAI_FUNC void luaS_clearcache (global_State *g); +LUAI_FUNC void luaS_init (lua_State *L); +LUAI_FUNC void luaS_remove (lua_State *L, TString *ts); +LUAI_FUNC Udata *luaS_newudata (lua_State *L, size_t s); +LUAI_FUNC TString *luaS_newlstr (lua_State *L, const char *str, size_t l); +LUAI_FUNC TString *luaS_new (lua_State *L, const char *str); +LUAI_FUNC TString *luaS_createlngstrobj (lua_State *L, size_t l); + + +#endif diff --git a/EQ2/source/LUA/lstrlib.c b/EQ2/source/LUA/lstrlib.c new file mode 100644 index 000000000..c7aa755fa --- /dev/null +++ b/EQ2/source/LUA/lstrlib.c @@ -0,0 +1,1584 @@ +/* +** $Id: lstrlib.c,v 1.254 2016/12/22 13:08:50 roberto Exp $ +** Standard library for string operations and pattern-matching +** See Copyright Notice in lua.h +*/ + +#define lstrlib_c +#define LUA_LIB + +#include "lprefix.h" + + +#include +#include +#include +#include +#include +#include +#include +#include + +#include "lua.h" + +#include "lauxlib.h" +#include "lualib.h" + + +/* +** maximum number of captures that a pattern can do during +** pattern-matching. This limit is arbitrary, but must fit in +** an unsigned char. +*/ +#if !defined(LUA_MAXCAPTURES) +#define LUA_MAXCAPTURES 32 +#endif + + +/* macro to 'unsign' a character */ +#define uchar(c) ((unsigned char)(c)) + + +/* +** Some sizes are better limited to fit in 'int', but must also fit in +** 'size_t'. (We assume that 'lua_Integer' cannot be smaller than 'int'.) +*/ +#define MAX_SIZET ((size_t)(~(size_t)0)) + +#define MAXSIZE \ + (sizeof(size_t) < sizeof(int) ? MAX_SIZET : (size_t)(INT_MAX)) + + + + +static int str_len (lua_State *L) { + size_t l; + luaL_checklstring(L, 1, &l); + lua_pushinteger(L, (lua_Integer)l); + return 1; +} + + +/* translate a relative string position: negative means back from end */ +static lua_Integer posrelat (lua_Integer pos, size_t len) { + if (pos >= 0) return pos; + else if (0u - (size_t)pos > len) return 0; + else return (lua_Integer)len + pos + 1; +} + + +static int str_sub (lua_State *L) { + size_t l; + const char *s = luaL_checklstring(L, 1, &l); + lua_Integer start = posrelat(luaL_checkinteger(L, 2), l); + lua_Integer end = posrelat(luaL_optinteger(L, 3, -1), l); + if (start < 1) start = 1; + if (end > (lua_Integer)l) end = l; + if (start <= end) + lua_pushlstring(L, s + start - 1, (size_t)(end - start) + 1); + else lua_pushliteral(L, ""); + return 1; +} + + +static int str_reverse (lua_State *L) { + size_t l, i; + luaL_Buffer b; + const char *s = luaL_checklstring(L, 1, &l); + char *p = luaL_buffinitsize(L, &b, l); + for (i = 0; i < l; i++) + p[i] = s[l - i - 1]; + luaL_pushresultsize(&b, l); + return 1; +} + + +static int str_lower (lua_State *L) { + size_t l; + size_t i; + luaL_Buffer b; + const char *s = luaL_checklstring(L, 1, &l); + char *p = luaL_buffinitsize(L, &b, l); + for (i=0; i MAXSIZE / n) /* may overflow? */ + return luaL_error(L, "resulting string too large"); + else { + size_t totallen = (size_t)n * l + (size_t)(n - 1) * lsep; + luaL_Buffer b; + char *p = luaL_buffinitsize(L, &b, totallen); + while (n-- > 1) { /* first n-1 copies (followed by separator) */ + memcpy(p, s, l * sizeof(char)); p += l; + if (lsep > 0) { /* empty 'memcpy' is not that cheap */ + memcpy(p, sep, lsep * sizeof(char)); + p += lsep; + } + } + memcpy(p, s, l * sizeof(char)); /* last copy (not followed by separator) */ + luaL_pushresultsize(&b, totallen); + } + return 1; +} + + +static int str_byte (lua_State *L) { + size_t l; + const char *s = luaL_checklstring(L, 1, &l); + lua_Integer posi = posrelat(luaL_optinteger(L, 2, 1), l); + lua_Integer pose = posrelat(luaL_optinteger(L, 3, posi), l); + int n, i; + if (posi < 1) posi = 1; + if (pose > (lua_Integer)l) pose = l; + if (posi > pose) return 0; /* empty interval; return no values */ + if (pose - posi >= INT_MAX) /* arithmetic overflow? */ + return luaL_error(L, "string slice too long"); + n = (int)(pose - posi) + 1; + luaL_checkstack(L, n, "string slice too long"); + for (i=0; i= ms->level || ms->capture[l].len == CAP_UNFINISHED) + return luaL_error(ms->L, "invalid capture index %%%d", l + 1); + return l; +} + + +static int capture_to_close (MatchState *ms) { + int level = ms->level; + for (level--; level>=0; level--) + if (ms->capture[level].len == CAP_UNFINISHED) return level; + return luaL_error(ms->L, "invalid pattern capture"); +} + + +static const char *classend (MatchState *ms, const char *p) { + switch (*p++) { + case L_ESC: { + if (p == ms->p_end) + luaL_error(ms->L, "malformed pattern (ends with '%%')"); + return p+1; + } + case '[': { + if (*p == '^') p++; + do { /* look for a ']' */ + if (p == ms->p_end) + luaL_error(ms->L, "malformed pattern (missing ']')"); + if (*(p++) == L_ESC && p < ms->p_end) + p++; /* skip escapes (e.g. '%]') */ + } while (*p != ']'); + return p+1; + } + default: { + return p; + } + } +} + + +static int match_class (int c, int cl) { + int res; + switch (tolower(cl)) { + case 'a' : res = isalpha(c); break; + case 'c' : res = iscntrl(c); break; + case 'd' : res = isdigit(c); break; + case 'g' : res = isgraph(c); break; + case 'l' : res = islower(c); break; + case 'p' : res = ispunct(c); break; + case 's' : res = isspace(c); break; + case 'u' : res = isupper(c); break; + case 'w' : res = isalnum(c); break; + case 'x' : res = isxdigit(c); break; + case 'z' : res = (c == 0); break; /* deprecated option */ + default: return (cl == c); + } + return (islower(cl) ? res : !res); +} + + +static int matchbracketclass (int c, const char *p, const char *ec) { + int sig = 1; + if (*(p+1) == '^') { + sig = 0; + p++; /* skip the '^' */ + } + while (++p < ec) { + if (*p == L_ESC) { + p++; + if (match_class(c, uchar(*p))) + return sig; + } + else if ((*(p+1) == '-') && (p+2 < ec)) { + p+=2; + if (uchar(*(p-2)) <= c && c <= uchar(*p)) + return sig; + } + else if (uchar(*p) == c) return sig; + } + return !sig; +} + + +static int singlematch (MatchState *ms, const char *s, const char *p, + const char *ep) { + if (s >= ms->src_end) + return 0; + else { + int c = uchar(*s); + switch (*p) { + case '.': return 1; /* matches any char */ + case L_ESC: return match_class(c, uchar(*(p+1))); + case '[': return matchbracketclass(c, p, ep-1); + default: return (uchar(*p) == c); + } + } +} + + +static const char *matchbalance (MatchState *ms, const char *s, + const char *p) { + if (p >= ms->p_end - 1) + luaL_error(ms->L, "malformed pattern (missing arguments to '%%b')"); + if (*s != *p) return NULL; + else { + int b = *p; + int e = *(p+1); + int cont = 1; + while (++s < ms->src_end) { + if (*s == e) { + if (--cont == 0) return s+1; + } + else if (*s == b) cont++; + } + } + return NULL; /* string ends out of balance */ +} + + +static const char *max_expand (MatchState *ms, const char *s, + const char *p, const char *ep) { + ptrdiff_t i = 0; /* counts maximum expand for item */ + while (singlematch(ms, s + i, p, ep)) + i++; + /* keeps trying to match with the maximum repetitions */ + while (i>=0) { + const char *res = match(ms, (s+i), ep+1); + if (res) return res; + i--; /* else didn't match; reduce 1 repetition to try again */ + } + return NULL; +} + + +static const char *min_expand (MatchState *ms, const char *s, + const char *p, const char *ep) { + for (;;) { + const char *res = match(ms, s, ep+1); + if (res != NULL) + return res; + else if (singlematch(ms, s, p, ep)) + s++; /* try with one more repetition */ + else return NULL; + } +} + + +static const char *start_capture (MatchState *ms, const char *s, + const char *p, int what) { + const char *res; + int level = ms->level; + if (level >= LUA_MAXCAPTURES) luaL_error(ms->L, "too many captures"); + ms->capture[level].init = s; + ms->capture[level].len = what; + ms->level = level+1; + if ((res=match(ms, s, p)) == NULL) /* match failed? */ + ms->level--; /* undo capture */ + return res; +} + + +static const char *end_capture (MatchState *ms, const char *s, + const char *p) { + int l = capture_to_close(ms); + const char *res; + ms->capture[l].len = s - ms->capture[l].init; /* close capture */ + if ((res = match(ms, s, p)) == NULL) /* match failed? */ + ms->capture[l].len = CAP_UNFINISHED; /* undo capture */ + return res; +} + + +static const char *match_capture (MatchState *ms, const char *s, int l) { + size_t len; + l = check_capture(ms, l); + len = ms->capture[l].len; + if ((size_t)(ms->src_end-s) >= len && + memcmp(ms->capture[l].init, s, len) == 0) + return s+len; + else return NULL; +} + + +static const char *match (MatchState *ms, const char *s, const char *p) { + if (ms->matchdepth-- == 0) + luaL_error(ms->L, "pattern too complex"); + init: /* using goto's to optimize tail recursion */ + if (p != ms->p_end) { /* end of pattern? */ + switch (*p) { + case '(': { /* start capture */ + if (*(p + 1) == ')') /* position capture? */ + s = start_capture(ms, s, p + 2, CAP_POSITION); + else + s = start_capture(ms, s, p + 1, CAP_UNFINISHED); + break; + } + case ')': { /* end capture */ + s = end_capture(ms, s, p + 1); + break; + } + case '$': { + if ((p + 1) != ms->p_end) /* is the '$' the last char in pattern? */ + goto dflt; /* no; go to default */ + s = (s == ms->src_end) ? s : NULL; /* check end of string */ + break; + } + case L_ESC: { /* escaped sequences not in the format class[*+?-]? */ + switch (*(p + 1)) { + case 'b': { /* balanced string? */ + s = matchbalance(ms, s, p + 2); + if (s != NULL) { + p += 4; goto init; /* return match(ms, s, p + 4); */ + } /* else fail (s == NULL) */ + break; + } + case 'f': { /* frontier? */ + const char *ep; char previous; + p += 2; + if (*p != '[') + luaL_error(ms->L, "missing '[' after '%%f' in pattern"); + ep = classend(ms, p); /* points to what is next */ + previous = (s == ms->src_init) ? '\0' : *(s - 1); + if (!matchbracketclass(uchar(previous), p, ep - 1) && + matchbracketclass(uchar(*s), p, ep - 1)) { + p = ep; goto init; /* return match(ms, s, ep); */ + } + s = NULL; /* match failed */ + break; + } + case '0': case '1': case '2': case '3': + case '4': case '5': case '6': case '7': + case '8': case '9': { /* capture results (%0-%9)? */ + s = match_capture(ms, s, uchar(*(p + 1))); + if (s != NULL) { + p += 2; goto init; /* return match(ms, s, p + 2) */ + } + break; + } + default: goto dflt; + } + break; + } + default: dflt: { /* pattern class plus optional suffix */ + const char *ep = classend(ms, p); /* points to optional suffix */ + /* does not match at least once? */ + if (!singlematch(ms, s, p, ep)) { + if (*ep == '*' || *ep == '?' || *ep == '-') { /* accept empty? */ + p = ep + 1; goto init; /* return match(ms, s, ep + 1); */ + } + else /* '+' or no suffix */ + s = NULL; /* fail */ + } + else { /* matched once */ + switch (*ep) { /* handle optional suffix */ + case '?': { /* optional */ + const char *res; + if ((res = match(ms, s + 1, ep + 1)) != NULL) + s = res; + else { + p = ep + 1; goto init; /* else return match(ms, s, ep + 1); */ + } + break; + } + case '+': /* 1 or more repetitions */ + s++; /* 1 match already done */ + /* FALLTHROUGH */ + case '*': /* 0 or more repetitions */ + s = max_expand(ms, s, p, ep); + break; + case '-': /* 0 or more repetitions (minimum) */ + s = min_expand(ms, s, p, ep); + break; + default: /* no suffix */ + s++; p = ep; goto init; /* return match(ms, s + 1, ep); */ + } + } + break; + } + } + } + ms->matchdepth++; + return s; +} + + + +static const char *lmemfind (const char *s1, size_t l1, + const char *s2, size_t l2) { + if (l2 == 0) return s1; /* empty strings are everywhere */ + else if (l2 > l1) return NULL; /* avoids a negative 'l1' */ + else { + const char *init; /* to search for a '*s2' inside 's1' */ + l2--; /* 1st char will be checked by 'memchr' */ + l1 = l1-l2; /* 's2' cannot be found after that */ + while (l1 > 0 && (init = (const char *)memchr(s1, *s2, l1)) != NULL) { + init++; /* 1st char is already checked */ + if (memcmp(init, s2+1, l2) == 0) + return init-1; + else { /* correct 'l1' and 's1' to try again */ + l1 -= init-s1; + s1 = init; + } + } + return NULL; /* not found */ + } +} + + +static void push_onecapture (MatchState *ms, int i, const char *s, + const char *e) { + if (i >= ms->level) { + if (i == 0) /* ms->level == 0, too */ + lua_pushlstring(ms->L, s, e - s); /* add whole match */ + else + luaL_error(ms->L, "invalid capture index %%%d", i + 1); + } + else { + ptrdiff_t l = ms->capture[i].len; + if (l == CAP_UNFINISHED) luaL_error(ms->L, "unfinished capture"); + if (l == CAP_POSITION) + lua_pushinteger(ms->L, (ms->capture[i].init - ms->src_init) + 1); + else + lua_pushlstring(ms->L, ms->capture[i].init, l); + } +} + + +static int push_captures (MatchState *ms, const char *s, const char *e) { + int i; + int nlevels = (ms->level == 0 && s) ? 1 : ms->level; + luaL_checkstack(ms->L, nlevels, "too many captures"); + for (i = 0; i < nlevels; i++) + push_onecapture(ms, i, s, e); + return nlevels; /* number of strings pushed */ +} + + +/* check whether pattern has no special characters */ +static int nospecials (const char *p, size_t l) { + size_t upto = 0; + do { + if (strpbrk(p + upto, SPECIALS)) + return 0; /* pattern has a special character */ + upto += strlen(p + upto) + 1; /* may have more after \0 */ + } while (upto <= l); + return 1; /* no special chars found */ +} + + +static void prepstate (MatchState *ms, lua_State *L, + const char *s, size_t ls, const char *p, size_t lp) { + ms->L = L; + ms->matchdepth = MAXCCALLS; + ms->src_init = s; + ms->src_end = s + ls; + ms->p_end = p + lp; +} + + +static void reprepstate (MatchState *ms) { + ms->level = 0; + lua_assert(ms->matchdepth == MAXCCALLS); +} + + +static int str_find_aux (lua_State *L, int find) { + size_t ls, lp; + const char *s = luaL_checklstring(L, 1, &ls); + const char *p = luaL_checklstring(L, 2, &lp); + lua_Integer init = posrelat(luaL_optinteger(L, 3, 1), ls); + if (init < 1) init = 1; + else if (init > (lua_Integer)ls + 1) { /* start after string's end? */ + lua_pushnil(L); /* cannot find anything */ + return 1; + } + /* explicit request or no special characters? */ + if (find && (lua_toboolean(L, 4) || nospecials(p, lp))) { + /* do a plain search */ + const char *s2 = lmemfind(s + init - 1, ls - (size_t)init + 1, p, lp); + if (s2) { + lua_pushinteger(L, (s2 - s) + 1); + lua_pushinteger(L, (s2 - s) + lp); + return 2; + } + } + else { + MatchState ms; + const char *s1 = s + init - 1; + int anchor = (*p == '^'); + if (anchor) { + p++; lp--; /* skip anchor character */ + } + prepstate(&ms, L, s, ls, p, lp); + do { + const char *res; + reprepstate(&ms); + if ((res=match(&ms, s1, p)) != NULL) { + if (find) { + lua_pushinteger(L, (s1 - s) + 1); /* start */ + lua_pushinteger(L, res - s); /* end */ + return push_captures(&ms, NULL, 0) + 2; + } + else + return push_captures(&ms, s1, res); + } + } while (s1++ < ms.src_end && !anchor); + } + lua_pushnil(L); /* not found */ + return 1; +} + + +static int str_find (lua_State *L) { + return str_find_aux(L, 1); +} + + +static int str_match (lua_State *L) { + return str_find_aux(L, 0); +} + + +/* state for 'gmatch' */ +typedef struct GMatchState { + const char *src; /* current position */ + const char *p; /* pattern */ + const char *lastmatch; /* end of last match */ + MatchState ms; /* match state */ +} GMatchState; + + +static int gmatch_aux (lua_State *L) { + GMatchState *gm = (GMatchState *)lua_touserdata(L, lua_upvalueindex(3)); + const char *src; + gm->ms.L = L; + for (src = gm->src; src <= gm->ms.src_end; src++) { + const char *e; + reprepstate(&gm->ms); + if ((e = match(&gm->ms, src, gm->p)) != NULL && e != gm->lastmatch) { + gm->src = gm->lastmatch = e; + return push_captures(&gm->ms, src, e); + } + } + return 0; /* not found */ +} + + +static int gmatch (lua_State *L) { + size_t ls, lp; + const char *s = luaL_checklstring(L, 1, &ls); + const char *p = luaL_checklstring(L, 2, &lp); + GMatchState *gm; + lua_settop(L, 2); /* keep them on closure to avoid being collected */ + gm = (GMatchState *)lua_newuserdata(L, sizeof(GMatchState)); + prepstate(&gm->ms, L, s, ls, p, lp); + gm->src = s; gm->p = p; gm->lastmatch = NULL; + lua_pushcclosure(L, gmatch_aux, 3); + return 1; +} + + +static void add_s (MatchState *ms, luaL_Buffer *b, const char *s, + const char *e) { + size_t l, i; + lua_State *L = ms->L; + const char *news = lua_tolstring(L, 3, &l); + for (i = 0; i < l; i++) { + if (news[i] != L_ESC) + luaL_addchar(b, news[i]); + else { + i++; /* skip ESC */ + if (!isdigit(uchar(news[i]))) { + if (news[i] != L_ESC) + luaL_error(L, "invalid use of '%c' in replacement string", L_ESC); + luaL_addchar(b, news[i]); + } + else if (news[i] == '0') + luaL_addlstring(b, s, e - s); + else { + push_onecapture(ms, news[i] - '1', s, e); + luaL_tolstring(L, -1, NULL); /* if number, convert it to string */ + lua_remove(L, -2); /* remove original value */ + luaL_addvalue(b); /* add capture to accumulated result */ + } + } + } +} + + +static void add_value (MatchState *ms, luaL_Buffer *b, const char *s, + const char *e, int tr) { + lua_State *L = ms->L; + switch (tr) { + case LUA_TFUNCTION: { + int n; + lua_pushvalue(L, 3); + n = push_captures(ms, s, e); + lua_call(L, n, 1); + break; + } + case LUA_TTABLE: { + push_onecapture(ms, 0, s, e); + lua_gettable(L, 3); + break; + } + default: { /* LUA_TNUMBER or LUA_TSTRING */ + add_s(ms, b, s, e); + return; + } + } + if (!lua_toboolean(L, -1)) { /* nil or false? */ + lua_pop(L, 1); + lua_pushlstring(L, s, e - s); /* keep original text */ + } + else if (!lua_isstring(L, -1)) + luaL_error(L, "invalid replacement value (a %s)", luaL_typename(L, -1)); + luaL_addvalue(b); /* add result to accumulator */ +} + + +static int str_gsub (lua_State *L) { + size_t srcl, lp; + const char *src = luaL_checklstring(L, 1, &srcl); /* subject */ + const char *p = luaL_checklstring(L, 2, &lp); /* pattern */ + const char *lastmatch = NULL; /* end of last match */ + int tr = lua_type(L, 3); /* replacement type */ + lua_Integer max_s = luaL_optinteger(L, 4, srcl + 1); /* max replacements */ + int anchor = (*p == '^'); + lua_Integer n = 0; /* replacement count */ + MatchState ms; + luaL_Buffer b; + luaL_argcheck(L, tr == LUA_TNUMBER || tr == LUA_TSTRING || + tr == LUA_TFUNCTION || tr == LUA_TTABLE, 3, + "string/function/table expected"); + luaL_buffinit(L, &b); + if (anchor) { + p++; lp--; /* skip anchor character */ + } + prepstate(&ms, L, src, srcl, p, lp); + while (n < max_s) { + const char *e; + reprepstate(&ms); /* (re)prepare state for new match */ + if ((e = match(&ms, src, p)) != NULL && e != lastmatch) { /* match? */ + n++; + add_value(&ms, &b, src, e, tr); /* add replacement to buffer */ + src = lastmatch = e; + } + else if (src < ms.src_end) /* otherwise, skip one character */ + luaL_addchar(&b, *src++); + else break; /* end of subject */ + if (anchor) break; + } + luaL_addlstring(&b, src, ms.src_end-src); + luaL_pushresult(&b); + lua_pushinteger(L, n); /* number of substitutions */ + return 2; +} + +/* }====================================================== */ + + + +/* +** {====================================================== +** STRING FORMAT +** ======================================================= +*/ + +#if !defined(lua_number2strx) /* { */ + +/* +** Hexadecimal floating-point formatter +*/ + +#include + +#define SIZELENMOD (sizeof(LUA_NUMBER_FRMLEN)/sizeof(char)) + + +/* +** Number of bits that goes into the first digit. It can be any value +** between 1 and 4; the following definition tries to align the number +** to nibble boundaries by making what is left after that first digit a +** multiple of 4. +*/ +#define L_NBFD ((l_mathlim(MANT_DIG) - 1)%4 + 1) + + +/* +** Add integer part of 'x' to buffer and return new 'x' +*/ +static lua_Number adddigit (char *buff, int n, lua_Number x) { + lua_Number dd = l_mathop(floor)(x); /* get integer part from 'x' */ + int d = (int)dd; + buff[n] = (d < 10 ? d + '0' : d - 10 + 'a'); /* add to buffer */ + return x - dd; /* return what is left */ +} + + +static int num2straux (char *buff, int sz, lua_Number x) { + /* if 'inf' or 'NaN', format it like '%g' */ + if (x != x || x == (lua_Number)HUGE_VAL || x == -(lua_Number)HUGE_VAL) + return l_sprintf(buff, sz, LUA_NUMBER_FMT, (LUAI_UACNUMBER)x); + else if (x == 0) { /* can be -0... */ + /* create "0" or "-0" followed by exponent */ + return l_sprintf(buff, sz, LUA_NUMBER_FMT "x0p+0", (LUAI_UACNUMBER)x); + } + else { + int e; + lua_Number m = l_mathop(frexp)(x, &e); /* 'x' fraction and exponent */ + int n = 0; /* character count */ + if (m < 0) { /* is number negative? */ + buff[n++] = '-'; /* add signal */ + m = -m; /* make it positive */ + } + buff[n++] = '0'; buff[n++] = 'x'; /* add "0x" */ + m = adddigit(buff, n++, m * (1 << L_NBFD)); /* add first digit */ + e -= L_NBFD; /* this digit goes before the radix point */ + if (m > 0) { /* more digits? */ + buff[n++] = lua_getlocaledecpoint(); /* add radix point */ + do { /* add as many digits as needed */ + m = adddigit(buff, n++, m * 16); + } while (m > 0); + } + n += l_sprintf(buff + n, sz - n, "p%+d", e); /* add exponent */ + lua_assert(n < sz); + return n; + } +} + + +static int lua_number2strx (lua_State *L, char *buff, int sz, + const char *fmt, lua_Number x) { + int n = num2straux(buff, sz, x); + if (fmt[SIZELENMOD] == 'A') { + int i; + for (i = 0; i < n; i++) + buff[i] = toupper(uchar(buff[i])); + } + else if (fmt[SIZELENMOD] != 'a') + luaL_error(L, "modifiers for format '%%a'/'%%A' not implemented"); + return n; +} + +#endif /* } */ + + +/* +** Maximum size of each formatted item. This maximum size is produced +** by format('%.99f', -maxfloat), and is equal to 99 + 3 ('-', '.', +** and '\0') + number of decimal digits to represent maxfloat (which +** is maximum exponent + 1). (99+3+1 then rounded to 120 for "extra +** expenses", such as locale-dependent stuff) +*/ +#define MAX_ITEM (120 + l_mathlim(MAX_10_EXP)) + + +/* valid flags in a format specification */ +#define FLAGS "-+ #0" + +/* +** maximum size of each format specification (such as "%-099.99d") +*/ +#define MAX_FORMAT 32 + + +static void addquoted (luaL_Buffer *b, const char *s, size_t len) { + luaL_addchar(b, '"'); + while (len--) { + if (*s == '"' || *s == '\\' || *s == '\n') { + luaL_addchar(b, '\\'); + luaL_addchar(b, *s); + } + else if (iscntrl(uchar(*s))) { + char buff[10]; + if (!isdigit(uchar(*(s+1)))) + l_sprintf(buff, sizeof(buff), "\\%d", (int)uchar(*s)); + else + l_sprintf(buff, sizeof(buff), "\\%03d", (int)uchar(*s)); + luaL_addstring(b, buff); + } + else + luaL_addchar(b, *s); + s++; + } + luaL_addchar(b, '"'); +} + + +/* +** Ensures the 'buff' string uses a dot as the radix character. +*/ +static void checkdp (char *buff, int nb) { + if (memchr(buff, '.', nb) == NULL) { /* no dot? */ + char point = lua_getlocaledecpoint(); /* try locale point */ + char *ppoint = (char *)memchr(buff, point, nb); + if (ppoint) *ppoint = '.'; /* change it to a dot */ + } +} + + +static void addliteral (lua_State *L, luaL_Buffer *b, int arg) { + switch (lua_type(L, arg)) { + case LUA_TSTRING: { + size_t len; + const char *s = lua_tolstring(L, arg, &len); + addquoted(b, s, len); + break; + } + case LUA_TNUMBER: { + char *buff = luaL_prepbuffsize(b, MAX_ITEM); + int nb; + if (!lua_isinteger(L, arg)) { /* float? */ + lua_Number n = lua_tonumber(L, arg); /* write as hexa ('%a') */ + nb = lua_number2strx(L, buff, MAX_ITEM, "%" LUA_NUMBER_FRMLEN "a", n); + checkdp(buff, nb); /* ensure it uses a dot */ + } + else { /* integers */ + lua_Integer n = lua_tointeger(L, arg); + const char *format = (n == LUA_MININTEGER) /* corner case? */ + ? "0x%" LUA_INTEGER_FRMLEN "x" /* use hexa */ + : LUA_INTEGER_FMT; /* else use default format */ + nb = l_sprintf(buff, MAX_ITEM, format, (LUAI_UACINT)n); + } + luaL_addsize(b, nb); + break; + } + case LUA_TNIL: case LUA_TBOOLEAN: { + luaL_tolstring(L, arg, NULL); + luaL_addvalue(b); + break; + } + default: { + luaL_argerror(L, arg, "value has no literal form"); + } + } +} + + +static const char *scanformat (lua_State *L, const char *strfrmt, char *form) { + const char *p = strfrmt; + while (*p != '\0' && strchr(FLAGS, *p) != NULL) p++; /* skip flags */ + if ((size_t)(p - strfrmt) >= sizeof(FLAGS)/sizeof(char)) + luaL_error(L, "invalid format (repeated flags)"); + if (isdigit(uchar(*p))) p++; /* skip width */ + if (isdigit(uchar(*p))) p++; /* (2 digits at most) */ + if (*p == '.') { + p++; + if (isdigit(uchar(*p))) p++; /* skip precision */ + if (isdigit(uchar(*p))) p++; /* (2 digits at most) */ + } + if (isdigit(uchar(*p))) + luaL_error(L, "invalid format (width or precision too long)"); + *(form++) = '%'; + memcpy(form, strfrmt, ((p - strfrmt) + 1) * sizeof(char)); + form += (p - strfrmt) + 1; + *form = '\0'; + return p; +} + + +/* +** add length modifier into formats +*/ +static void addlenmod (char *form, const char *lenmod) { + size_t l = strlen(form); + size_t lm = strlen(lenmod); + char spec = form[l - 1]; + strcpy(form + l - 1, lenmod); + form[l + lm - 1] = spec; + form[l + lm] = '\0'; +} + + +static int str_format (lua_State *L) { + int top = lua_gettop(L); + int arg = 1; + size_t sfl; + const char *strfrmt = luaL_checklstring(L, arg, &sfl); + const char *strfrmt_end = strfrmt+sfl; + luaL_Buffer b; + luaL_buffinit(L, &b); + while (strfrmt < strfrmt_end) { + if (*strfrmt != L_ESC) + luaL_addchar(&b, *strfrmt++); + else if (*++strfrmt == L_ESC) + luaL_addchar(&b, *strfrmt++); /* %% */ + else { /* format item */ + char form[MAX_FORMAT]; /* to store the format ('%...') */ + char *buff = luaL_prepbuffsize(&b, MAX_ITEM); /* to put formatted item */ + int nb = 0; /* number of bytes in added item */ + if (++arg > top) + luaL_argerror(L, arg, "no value"); + strfrmt = scanformat(L, strfrmt, form); + switch (*strfrmt++) { + case 'c': { + nb = l_sprintf(buff, MAX_ITEM, form, (int)luaL_checkinteger(L, arg)); + break; + } + case 'd': case 'i': + case 'o': case 'u': case 'x': case 'X': { + lua_Integer n = luaL_checkinteger(L, arg); + addlenmod(form, LUA_INTEGER_FRMLEN); + nb = l_sprintf(buff, MAX_ITEM, form, (LUAI_UACINT)n); + break; + } + case 'a': case 'A': + addlenmod(form, LUA_NUMBER_FRMLEN); + nb = lua_number2strx(L, buff, MAX_ITEM, form, + luaL_checknumber(L, arg)); + break; + case 'e': case 'E': case 'f': + case 'g': case 'G': { + lua_Number n = luaL_checknumber(L, arg); + addlenmod(form, LUA_NUMBER_FRMLEN); + nb = l_sprintf(buff, MAX_ITEM, form, (LUAI_UACNUMBER)n); + break; + } + case 'q': { + addliteral(L, &b, arg); + break; + } + case 's': { + size_t l; + const char *s = luaL_tolstring(L, arg, &l); + if (form[2] == '\0') /* no modifiers? */ + luaL_addvalue(&b); /* keep entire string */ + else { + luaL_argcheck(L, l == strlen(s), arg, "string contains zeros"); + if (!strchr(form, '.') && l >= 100) { + /* no precision and string is too long to be formatted */ + luaL_addvalue(&b); /* keep entire string */ + } + else { /* format the string into 'buff' */ + nb = l_sprintf(buff, MAX_ITEM, form, s); + lua_pop(L, 1); /* remove result from 'luaL_tolstring' */ + } + } + break; + } + default: { /* also treat cases 'pnLlh' */ + return luaL_error(L, "invalid option '%%%c' to 'format'", + *(strfrmt - 1)); + } + } + lua_assert(nb < MAX_ITEM); + luaL_addsize(&b, nb); + } + } + luaL_pushresult(&b); + return 1; +} + +/* }====================================================== */ + + +/* +** {====================================================== +** PACK/UNPACK +** ======================================================= +*/ + + +/* value used for padding */ +#if !defined(LUAL_PACKPADBYTE) +#define LUAL_PACKPADBYTE 0x00 +#endif + +/* maximum size for the binary representation of an integer */ +#define MAXINTSIZE 16 + +/* number of bits in a character */ +#define NB CHAR_BIT + +/* mask for one character (NB 1's) */ +#define MC ((1 << NB) - 1) + +/* size of a lua_Integer */ +#define SZINT ((int)sizeof(lua_Integer)) + + +/* dummy union to get native endianness */ +static const union { + int dummy; + char little; /* true iff machine is little endian */ +} nativeendian = {1}; + + +/* dummy structure to get native alignment requirements */ +struct cD { + char c; + union { double d; void *p; lua_Integer i; lua_Number n; } u; +}; + +#define MAXALIGN (offsetof(struct cD, u)) + + +/* +** Union for serializing floats +*/ +typedef union Ftypes { + float f; + double d; + lua_Number n; + char buff[5 * sizeof(lua_Number)]; /* enough for any float type */ +} Ftypes; + + +/* +** information to pack/unpack stuff +*/ +typedef struct Header { + lua_State *L; + int islittle; + int maxalign; +} Header; + + +/* +** options for pack/unpack +*/ +typedef enum KOption { + Kint, /* signed integers */ + Kuint, /* unsigned integers */ + Kfloat, /* floating-point numbers */ + Kchar, /* fixed-length strings */ + Kstring, /* strings with prefixed length */ + Kzstr, /* zero-terminated strings */ + Kpadding, /* padding */ + Kpaddalign, /* padding for alignment */ + Knop /* no-op (configuration or spaces) */ +} KOption; + + +/* +** Read an integer numeral from string 'fmt' or return 'df' if +** there is no numeral +*/ +static int digit (int c) { return '0' <= c && c <= '9'; } + +static int getnum (const char **fmt, int df) { + if (!digit(**fmt)) /* no number? */ + return df; /* return default value */ + else { + int a = 0; + do { + a = a*10 + (*((*fmt)++) - '0'); + } while (digit(**fmt) && a <= ((int)MAXSIZE - 9)/10); + return a; + } +} + + +/* +** Read an integer numeral and raises an error if it is larger +** than the maximum size for integers. +*/ +static int getnumlimit (Header *h, const char **fmt, int df) { + int sz = getnum(fmt, df); + if (sz > MAXINTSIZE || sz <= 0) + luaL_error(h->L, "integral size (%d) out of limits [1,%d]", + sz, MAXINTSIZE); + return sz; +} + + +/* +** Initialize Header +*/ +static void initheader (lua_State *L, Header *h) { + h->L = L; + h->islittle = nativeendian.little; + h->maxalign = 1; +} + + +/* +** Read and classify next option. 'size' is filled with option's size. +*/ +static KOption getoption (Header *h, const char **fmt, int *size) { + int opt = *((*fmt)++); + *size = 0; /* default */ + switch (opt) { + case 'b': *size = sizeof(char); return Kint; + case 'B': *size = sizeof(char); return Kuint; + case 'h': *size = sizeof(short); return Kint; + case 'H': *size = sizeof(short); return Kuint; + case 'l': *size = sizeof(long); return Kint; + case 'L': *size = sizeof(long); return Kuint; + case 'j': *size = sizeof(lua_Integer); return Kint; + case 'J': *size = sizeof(lua_Integer); return Kuint; + case 'T': *size = sizeof(size_t); return Kuint; + case 'f': *size = sizeof(float); return Kfloat; + case 'd': *size = sizeof(double); return Kfloat; + case 'n': *size = sizeof(lua_Number); return Kfloat; + case 'i': *size = getnumlimit(h, fmt, sizeof(int)); return Kint; + case 'I': *size = getnumlimit(h, fmt, sizeof(int)); return Kuint; + case 's': *size = getnumlimit(h, fmt, sizeof(size_t)); return Kstring; + case 'c': + *size = getnum(fmt, -1); + if (*size == -1) + luaL_error(h->L, "missing size for format option 'c'"); + return Kchar; + case 'z': return Kzstr; + case 'x': *size = 1; return Kpadding; + case 'X': return Kpaddalign; + case ' ': break; + case '<': h->islittle = 1; break; + case '>': h->islittle = 0; break; + case '=': h->islittle = nativeendian.little; break; + case '!': h->maxalign = getnumlimit(h, fmt, MAXALIGN); break; + default: luaL_error(h->L, "invalid format option '%c'", opt); + } + return Knop; +} + + +/* +** Read, classify, and fill other details about the next option. +** 'psize' is filled with option's size, 'notoalign' with its +** alignment requirements. +** Local variable 'size' gets the size to be aligned. (Kpadal option +** always gets its full alignment, other options are limited by +** the maximum alignment ('maxalign'). Kchar option needs no alignment +** despite its size. +*/ +static KOption getdetails (Header *h, size_t totalsize, + const char **fmt, int *psize, int *ntoalign) { + KOption opt = getoption(h, fmt, psize); + int align = *psize; /* usually, alignment follows size */ + if (opt == Kpaddalign) { /* 'X' gets alignment from following option */ + if (**fmt == '\0' || getoption(h, fmt, &align) == Kchar || align == 0) + luaL_argerror(h->L, 1, "invalid next option for option 'X'"); + } + if (align <= 1 || opt == Kchar) /* need no alignment? */ + *ntoalign = 0; + else { + if (align > h->maxalign) /* enforce maximum alignment */ + align = h->maxalign; + if ((align & (align - 1)) != 0) /* is 'align' not a power of 2? */ + luaL_argerror(h->L, 1, "format asks for alignment not power of 2"); + *ntoalign = (align - (int)(totalsize & (align - 1))) & (align - 1); + } + return opt; +} + + +/* +** Pack integer 'n' with 'size' bytes and 'islittle' endianness. +** The final 'if' handles the case when 'size' is larger than +** the size of a Lua integer, correcting the extra sign-extension +** bytes if necessary (by default they would be zeros). +*/ +static void packint (luaL_Buffer *b, lua_Unsigned n, + int islittle, int size, int neg) { + char *buff = luaL_prepbuffsize(b, size); + int i; + buff[islittle ? 0 : size - 1] = (char)(n & MC); /* first byte */ + for (i = 1; i < size; i++) { + n >>= NB; + buff[islittle ? i : size - 1 - i] = (char)(n & MC); + } + if (neg && size > SZINT) { /* negative number need sign extension? */ + for (i = SZINT; i < size; i++) /* correct extra bytes */ + buff[islittle ? i : size - 1 - i] = (char)MC; + } + luaL_addsize(b, size); /* add result to buffer */ +} + + +/* +** Copy 'size' bytes from 'src' to 'dest', correcting endianness if +** given 'islittle' is different from native endianness. +*/ +static void copywithendian (volatile char *dest, volatile const char *src, + int size, int islittle) { + if (islittle == nativeendian.little) { + while (size-- != 0) + *(dest++) = *(src++); + } + else { + dest += size - 1; + while (size-- != 0) + *(dest--) = *(src++); + } +} + + +static int str_pack (lua_State *L) { + luaL_Buffer b; + Header h; + const char *fmt = luaL_checkstring(L, 1); /* format string */ + int arg = 1; /* current argument to pack */ + size_t totalsize = 0; /* accumulate total size of result */ + initheader(L, &h); + lua_pushnil(L); /* mark to separate arguments from string buffer */ + luaL_buffinit(L, &b); + while (*fmt != '\0') { + int size, ntoalign; + KOption opt = getdetails(&h, totalsize, &fmt, &size, &ntoalign); + totalsize += ntoalign + size; + while (ntoalign-- > 0) + luaL_addchar(&b, LUAL_PACKPADBYTE); /* fill alignment */ + arg++; + switch (opt) { + case Kint: { /* signed integers */ + lua_Integer n = luaL_checkinteger(L, arg); + if (size < SZINT) { /* need overflow check? */ + lua_Integer lim = (lua_Integer)1 << ((size * NB) - 1); + luaL_argcheck(L, -lim <= n && n < lim, arg, "integer overflow"); + } + packint(&b, (lua_Unsigned)n, h.islittle, size, (n < 0)); + break; + } + case Kuint: { /* unsigned integers */ + lua_Integer n = luaL_checkinteger(L, arg); + if (size < SZINT) /* need overflow check? */ + luaL_argcheck(L, (lua_Unsigned)n < ((lua_Unsigned)1 << (size * NB)), + arg, "unsigned overflow"); + packint(&b, (lua_Unsigned)n, h.islittle, size, 0); + break; + } + case Kfloat: { /* floating-point options */ + volatile Ftypes u; + char *buff = luaL_prepbuffsize(&b, size); + lua_Number n = luaL_checknumber(L, arg); /* get argument */ + if (size == sizeof(u.f)) u.f = (float)n; /* copy it into 'u' */ + else if (size == sizeof(u.d)) u.d = (double)n; + else u.n = n; + /* move 'u' to final result, correcting endianness if needed */ + copywithendian(buff, u.buff, size, h.islittle); + luaL_addsize(&b, size); + break; + } + case Kchar: { /* fixed-size string */ + size_t len; + const char *s = luaL_checklstring(L, arg, &len); + luaL_argcheck(L, len <= (size_t)size, arg, + "string longer than given size"); + luaL_addlstring(&b, s, len); /* add string */ + while (len++ < (size_t)size) /* pad extra space */ + luaL_addchar(&b, LUAL_PACKPADBYTE); + break; + } + case Kstring: { /* strings with length count */ + size_t len; + const char *s = luaL_checklstring(L, arg, &len); + luaL_argcheck(L, size >= (int)sizeof(size_t) || + len < ((size_t)1 << (size * NB)), + arg, "string length does not fit in given size"); + packint(&b, (lua_Unsigned)len, h.islittle, size, 0); /* pack length */ + luaL_addlstring(&b, s, len); + totalsize += len; + break; + } + case Kzstr: { /* zero-terminated string */ + size_t len; + const char *s = luaL_checklstring(L, arg, &len); + luaL_argcheck(L, strlen(s) == len, arg, "string contains zeros"); + luaL_addlstring(&b, s, len); + luaL_addchar(&b, '\0'); /* add zero at the end */ + totalsize += len + 1; + break; + } + case Kpadding: luaL_addchar(&b, LUAL_PACKPADBYTE); /* FALLTHROUGH */ + case Kpaddalign: case Knop: + arg--; /* undo increment */ + break; + } + } + luaL_pushresult(&b); + return 1; +} + + +static int str_packsize (lua_State *L) { + Header h; + const char *fmt = luaL_checkstring(L, 1); /* format string */ + size_t totalsize = 0; /* accumulate total size of result */ + initheader(L, &h); + while (*fmt != '\0') { + int size, ntoalign; + KOption opt = getdetails(&h, totalsize, &fmt, &size, &ntoalign); + size += ntoalign; /* total space used by option */ + luaL_argcheck(L, totalsize <= MAXSIZE - size, 1, + "format result too large"); + totalsize += size; + switch (opt) { + case Kstring: /* strings with length count */ + case Kzstr: /* zero-terminated string */ + luaL_argerror(L, 1, "variable-length format"); + /* call never return, but to avoid warnings: *//* FALLTHROUGH */ + default: break; + } + } + lua_pushinteger(L, (lua_Integer)totalsize); + return 1; +} + + +/* +** Unpack an integer with 'size' bytes and 'islittle' endianness. +** If size is smaller than the size of a Lua integer and integer +** is signed, must do sign extension (propagating the sign to the +** higher bits); if size is larger than the size of a Lua integer, +** it must check the unread bytes to see whether they do not cause an +** overflow. +*/ +static lua_Integer unpackint (lua_State *L, const char *str, + int islittle, int size, int issigned) { + lua_Unsigned res = 0; + int i; + int limit = (size <= SZINT) ? size : SZINT; + for (i = limit - 1; i >= 0; i--) { + res <<= NB; + res |= (lua_Unsigned)(unsigned char)str[islittle ? i : size - 1 - i]; + } + if (size < SZINT) { /* real size smaller than lua_Integer? */ + if (issigned) { /* needs sign extension? */ + lua_Unsigned mask = (lua_Unsigned)1 << (size*NB - 1); + res = ((res ^ mask) - mask); /* do sign extension */ + } + } + else if (size > SZINT) { /* must check unread bytes */ + int mask = (!issigned || (lua_Integer)res >= 0) ? 0 : MC; + for (i = limit; i < size; i++) { + if ((unsigned char)str[islittle ? i : size - 1 - i] != mask) + luaL_error(L, "%d-byte integer does not fit into Lua Integer", size); + } + } + return (lua_Integer)res; +} + + +static int str_unpack (lua_State *L) { + Header h; + const char *fmt = luaL_checkstring(L, 1); + size_t ld; + const char *data = luaL_checklstring(L, 2, &ld); + size_t pos = (size_t)posrelat(luaL_optinteger(L, 3, 1), ld) - 1; + int n = 0; /* number of results */ + luaL_argcheck(L, pos <= ld, 3, "initial position out of string"); + initheader(L, &h); + while (*fmt != '\0') { + int size, ntoalign; + KOption opt = getdetails(&h, pos, &fmt, &size, &ntoalign); + if ((size_t)ntoalign + size > ~pos || pos + ntoalign + size > ld) + luaL_argerror(L, 2, "data string too short"); + pos += ntoalign; /* skip alignment */ + /* stack space for item + next position */ + luaL_checkstack(L, 2, "too many results"); + n++; + switch (opt) { + case Kint: + case Kuint: { + lua_Integer res = unpackint(L, data + pos, h.islittle, size, + (opt == Kint)); + lua_pushinteger(L, res); + break; + } + case Kfloat: { + volatile Ftypes u; + lua_Number num; + copywithendian(u.buff, data + pos, size, h.islittle); + if (size == sizeof(u.f)) num = (lua_Number)u.f; + else if (size == sizeof(u.d)) num = (lua_Number)u.d; + else num = u.n; + lua_pushnumber(L, num); + break; + } + case Kchar: { + lua_pushlstring(L, data + pos, size); + break; + } + case Kstring: { + size_t len = (size_t)unpackint(L, data + pos, h.islittle, size, 0); + luaL_argcheck(L, pos + len + size <= ld, 2, "data string too short"); + lua_pushlstring(L, data + pos + size, len); + pos += len; /* skip string */ + break; + } + case Kzstr: { + size_t len = (int)strlen(data + pos); + lua_pushlstring(L, data + pos, len); + pos += len + 1; /* skip string plus final '\0' */ + break; + } + case Kpaddalign: case Kpadding: case Knop: + n--; /* undo increment */ + break; + } + pos += size; + } + lua_pushinteger(L, pos + 1); /* next position */ + return n + 1; +} + +/* }====================================================== */ + + +static const luaL_Reg strlib[] = { + {"byte", str_byte}, + {"char", str_char}, + {"dump", str_dump}, + {"find", str_find}, + {"format", str_format}, + {"gmatch", gmatch}, + {"gsub", str_gsub}, + {"len", str_len}, + {"lower", str_lower}, + {"match", str_match}, + {"rep", str_rep}, + {"reverse", str_reverse}, + {"sub", str_sub}, + {"upper", str_upper}, + {"pack", str_pack}, + {"packsize", str_packsize}, + {"unpack", str_unpack}, + {NULL, NULL} +}; + + +static void createmetatable (lua_State *L) { + lua_createtable(L, 0, 1); /* table to be metatable for strings */ + lua_pushliteral(L, ""); /* dummy string */ + lua_pushvalue(L, -2); /* copy table */ + lua_setmetatable(L, -2); /* set table as metatable for strings */ + lua_pop(L, 1); /* pop dummy string */ + lua_pushvalue(L, -2); /* get string library */ + lua_setfield(L, -2, "__index"); /* metatable.__index = string */ + lua_pop(L, 1); /* pop metatable */ +} + + +/* +** Open string library +*/ +LUAMOD_API int luaopen_string (lua_State *L) { + luaL_newlib(L, strlib); + createmetatable(L); + return 1; +} + diff --git a/EQ2/source/LUA/ltable.c b/EQ2/source/LUA/ltable.c new file mode 100644 index 000000000..d080189f2 --- /dev/null +++ b/EQ2/source/LUA/ltable.c @@ -0,0 +1,669 @@ +/* +** $Id: ltable.c,v 2.118 2016/11/07 12:38:35 roberto Exp $ +** Lua tables (hash) +** See Copyright Notice in lua.h +*/ + +#define ltable_c +#define LUA_CORE + +#include "lprefix.h" + + +/* +** Implementation of tables (aka arrays, objects, or hash tables). +** Tables keep its elements in two parts: an array part and a hash part. +** Non-negative integer keys are all candidates to be kept in the array +** part. The actual size of the array is the largest 'n' such that +** more than half the slots between 1 and n are in use. +** Hash uses a mix of chained scatter table with Brent's variation. +** A main invariant of these tables is that, if an element is not +** in its main position (i.e. the 'original' position that its hash gives +** to it), then the colliding element is in its own main position. +** Hence even when the load factor reaches 100%, performance remains good. +*/ + +#include +#include + +#include "lua.h" + +#include "ldebug.h" +#include "ldo.h" +#include "lgc.h" +#include "lmem.h" +#include "lobject.h" +#include "lstate.h" +#include "lstring.h" +#include "ltable.h" +#include "lvm.h" + + +/* +** Maximum size of array part (MAXASIZE) is 2^MAXABITS. MAXABITS is +** the largest integer such that MAXASIZE fits in an unsigned int. +*/ +#define MAXABITS cast_int(sizeof(int) * CHAR_BIT - 1) +#define MAXASIZE (1u << MAXABITS) + +/* +** Maximum size of hash part is 2^MAXHBITS. MAXHBITS is the largest +** integer such that 2^MAXHBITS fits in a signed int. (Note that the +** maximum number of elements in a table, 2^MAXABITS + 2^MAXHBITS, still +** fits comfortably in an unsigned int.) +*/ +#define MAXHBITS (MAXABITS - 1) + + +#define hashpow2(t,n) (gnode(t, lmod((n), sizenode(t)))) + +#define hashstr(t,str) hashpow2(t, (str)->hash) +#define hashboolean(t,p) hashpow2(t, p) +#define hashint(t,i) hashpow2(t, i) + + +/* +** for some types, it is better to avoid modulus by power of 2, as +** they tend to have many 2 factors. +*/ +#define hashmod(t,n) (gnode(t, ((n) % ((sizenode(t)-1)|1)))) + + +#define hashpointer(t,p) hashmod(t, point2uint(p)) + + +#define dummynode (&dummynode_) + +static const Node dummynode_ = { + {NILCONSTANT}, /* value */ + {{NILCONSTANT, 0}} /* key */ +}; + + +/* +** Hash for floating-point numbers. +** The main computation should be just +** n = frexp(n, &i); return (n * INT_MAX) + i +** but there are some numerical subtleties. +** In a two-complement representation, INT_MAX does not has an exact +** representation as a float, but INT_MIN does; because the absolute +** value of 'frexp' is smaller than 1 (unless 'n' is inf/NaN), the +** absolute value of the product 'frexp * -INT_MIN' is smaller or equal +** to INT_MAX. Next, the use of 'unsigned int' avoids overflows when +** adding 'i'; the use of '~u' (instead of '-u') avoids problems with +** INT_MIN. +*/ +#if !defined(l_hashfloat) +static int l_hashfloat (lua_Number n) { + int i; + lua_Integer ni; + n = l_mathop(frexp)(n, &i) * -cast_num(INT_MIN); + if (!lua_numbertointeger(n, &ni)) { /* is 'n' inf/-inf/NaN? */ + lua_assert(luai_numisnan(n) || l_mathop(fabs)(n) == cast_num(HUGE_VAL)); + return 0; + } + else { /* normal case */ + unsigned int u = cast(unsigned int, i) + cast(unsigned int, ni); + return cast_int(u <= cast(unsigned int, INT_MAX) ? u : ~u); + } +} +#endif + + +/* +** returns the 'main' position of an element in a table (that is, the index +** of its hash value) +*/ +static Node *mainposition (const Table *t, const TValue *key) { + switch (ttype(key)) { + case LUA_TNUMINT: + return hashint(t, ivalue(key)); + case LUA_TNUMFLT: + return hashmod(t, l_hashfloat(fltvalue(key))); + case LUA_TSHRSTR: + return hashstr(t, tsvalue(key)); + case LUA_TLNGSTR: + return hashpow2(t, luaS_hashlongstr(tsvalue(key))); + case LUA_TBOOLEAN: + return hashboolean(t, bvalue(key)); + case LUA_TLIGHTUSERDATA: + return hashpointer(t, pvalue(key)); + case LUA_TLCF: + return hashpointer(t, fvalue(key)); + default: + lua_assert(!ttisdeadkey(key)); + return hashpointer(t, gcvalue(key)); + } +} + + +/* +** returns the index for 'key' if 'key' is an appropriate key to live in +** the array part of the table, 0 otherwise. +*/ +static unsigned int arrayindex (const TValue *key) { + if (ttisinteger(key)) { + lua_Integer k = ivalue(key); + if (0 < k && (lua_Unsigned)k <= MAXASIZE) + return cast(unsigned int, k); /* 'key' is an appropriate array index */ + } + return 0; /* 'key' did not match some condition */ +} + + +/* +** returns the index of a 'key' for table traversals. First goes all +** elements in the array part, then elements in the hash part. The +** beginning of a traversal is signaled by 0. +*/ +static unsigned int findindex (lua_State *L, Table *t, StkId key) { + unsigned int i; + if (ttisnil(key)) return 0; /* first iteration */ + i = arrayindex(key); + if (i != 0 && i <= t->sizearray) /* is 'key' inside array part? */ + return i; /* yes; that's the index */ + else { + int nx; + Node *n = mainposition(t, key); + for (;;) { /* check whether 'key' is somewhere in the chain */ + /* key may be dead already, but it is ok to use it in 'next' */ + if (luaV_rawequalobj(gkey(n), key) || + (ttisdeadkey(gkey(n)) && iscollectable(key) && + deadvalue(gkey(n)) == gcvalue(key))) { + i = cast_int(n - gnode(t, 0)); /* key index in hash table */ + /* hash elements are numbered after array ones */ + return (i + 1) + t->sizearray; + } + nx = gnext(n); + if (nx == 0) + luaG_runerror(L, "invalid key to 'next'"); /* key not found */ + else n += nx; + } + } +} + + +int luaH_next (lua_State *L, Table *t, StkId key) { + unsigned int i = findindex(L, t, key); /* find original element */ + for (; i < t->sizearray; i++) { /* try first array part */ + if (!ttisnil(&t->array[i])) { /* a non-nil value? */ + setivalue(key, i + 1); + setobj2s(L, key+1, &t->array[i]); + return 1; + } + } + for (i -= t->sizearray; cast_int(i) < sizenode(t); i++) { /* hash part */ + if (!ttisnil(gval(gnode(t, i)))) { /* a non-nil value? */ + setobj2s(L, key, gkey(gnode(t, i))); + setobj2s(L, key+1, gval(gnode(t, i))); + return 1; + } + } + return 0; /* no more elements */ +} + + +/* +** {============================================================= +** Rehash +** ============================================================== +*/ + +/* +** Compute the optimal size for the array part of table 't'. 'nums' is a +** "count array" where 'nums[i]' is the number of integers in the table +** between 2^(i - 1) + 1 and 2^i. 'pna' enters with the total number of +** integer keys in the table and leaves with the number of keys that +** will go to the array part; return the optimal size. +*/ +static unsigned int computesizes (unsigned int nums[], unsigned int *pna) { + int i; + unsigned int twotoi; /* 2^i (candidate for optimal size) */ + unsigned int a = 0; /* number of elements smaller than 2^i */ + unsigned int na = 0; /* number of elements to go to array part */ + unsigned int optimal = 0; /* optimal size for array part */ + /* loop while keys can fill more than half of total size */ + for (i = 0, twotoi = 1; *pna > twotoi / 2; i++, twotoi *= 2) { + if (nums[i] > 0) { + a += nums[i]; + if (a > twotoi/2) { /* more than half elements present? */ + optimal = twotoi; /* optimal size (till now) */ + na = a; /* all elements up to 'optimal' will go to array part */ + } + } + } + lua_assert((optimal == 0 || optimal / 2 < na) && na <= optimal); + *pna = na; + return optimal; +} + + +static int countint (const TValue *key, unsigned int *nums) { + unsigned int k = arrayindex(key); + if (k != 0) { /* is 'key' an appropriate array index? */ + nums[luaO_ceillog2(k)]++; /* count as such */ + return 1; + } + else + return 0; +} + + +/* +** Count keys in array part of table 't': Fill 'nums[i]' with +** number of keys that will go into corresponding slice and return +** total number of non-nil keys. +*/ +static unsigned int numusearray (const Table *t, unsigned int *nums) { + int lg; + unsigned int ttlg; /* 2^lg */ + unsigned int ause = 0; /* summation of 'nums' */ + unsigned int i = 1; /* count to traverse all array keys */ + /* traverse each slice */ + for (lg = 0, ttlg = 1; lg <= MAXABITS; lg++, ttlg *= 2) { + unsigned int lc = 0; /* counter */ + unsigned int lim = ttlg; + if (lim > t->sizearray) { + lim = t->sizearray; /* adjust upper limit */ + if (i > lim) + break; /* no more elements to count */ + } + /* count elements in range (2^(lg - 1), 2^lg] */ + for (; i <= lim; i++) { + if (!ttisnil(&t->array[i-1])) + lc++; + } + nums[lg] += lc; + ause += lc; + } + return ause; +} + + +static int numusehash (const Table *t, unsigned int *nums, unsigned int *pna) { + int totaluse = 0; /* total number of elements */ + int ause = 0; /* elements added to 'nums' (can go to array part) */ + int i = sizenode(t); + while (i--) { + Node *n = &t->node[i]; + if (!ttisnil(gval(n))) { + ause += countint(gkey(n), nums); + totaluse++; + } + } + *pna += ause; + return totaluse; +} + + +static void setarrayvector (lua_State *L, Table *t, unsigned int size) { + unsigned int i; + luaM_reallocvector(L, t->array, t->sizearray, size, TValue); + for (i=t->sizearray; iarray[i]); + t->sizearray = size; +} + + +static void setnodevector (lua_State *L, Table *t, unsigned int size) { + if (size == 0) { /* no elements to hash part? */ + t->node = cast(Node *, dummynode); /* use common 'dummynode' */ + t->lsizenode = 0; + t->lastfree = NULL; /* signal that it is using dummy node */ + } + else { + int i; + int lsize = luaO_ceillog2(size); + if (lsize > MAXHBITS) + luaG_runerror(L, "table overflow"); + size = twoto(lsize); + t->node = luaM_newvector(L, size, Node); + for (i = 0; i < (int)size; i++) { + Node *n = gnode(t, i); + gnext(n) = 0; + setnilvalue(wgkey(n)); + setnilvalue(gval(n)); + } + t->lsizenode = cast_byte(lsize); + t->lastfree = gnode(t, size); /* all positions are free */ + } +} + + +void luaH_resize (lua_State *L, Table *t, unsigned int nasize, + unsigned int nhsize) { + unsigned int i; + int j; + unsigned int oldasize = t->sizearray; + int oldhsize = allocsizenode(t); + Node *nold = t->node; /* save old hash ... */ + if (nasize > oldasize) /* array part must grow? */ + setarrayvector(L, t, nasize); + /* create new hash part with appropriate size */ + setnodevector(L, t, nhsize); + if (nasize < oldasize) { /* array part must shrink? */ + t->sizearray = nasize; + /* re-insert elements from vanishing slice */ + for (i=nasize; iarray[i])) + luaH_setint(L, t, i + 1, &t->array[i]); + } + /* shrink array */ + luaM_reallocvector(L, t->array, oldasize, nasize, TValue); + } + /* re-insert elements from hash part */ + for (j = oldhsize - 1; j >= 0; j--) { + Node *old = nold + j; + if (!ttisnil(gval(old))) { + /* doesn't need barrier/invalidate cache, as entry was + already present in the table */ + setobjt2t(L, luaH_set(L, t, gkey(old)), gval(old)); + } + } + if (oldhsize > 0) /* not the dummy node? */ + luaM_freearray(L, nold, cast(size_t, oldhsize)); /* free old hash */ +} + + +void luaH_resizearray (lua_State *L, Table *t, unsigned int nasize) { + int nsize = allocsizenode(t); + luaH_resize(L, t, nasize, nsize); +} + +/* +** nums[i] = number of keys 'k' where 2^(i - 1) < k <= 2^i +*/ +static void rehash (lua_State *L, Table *t, const TValue *ek) { + unsigned int asize; /* optimal size for array part */ + unsigned int na; /* number of keys in the array part */ + unsigned int nums[MAXABITS + 1]; + int i; + int totaluse; + for (i = 0; i <= MAXABITS; i++) nums[i] = 0; /* reset counts */ + na = numusearray(t, nums); /* count keys in array part */ + totaluse = na; /* all those keys are integer keys */ + totaluse += numusehash(t, nums, &na); /* count keys in hash part */ + /* count extra key */ + na += countint(ek, nums); + totaluse++; + /* compute new size for array part */ + asize = computesizes(nums, &na); + /* resize the table to new computed sizes */ + luaH_resize(L, t, asize, totaluse - na); +} + + + +/* +** }============================================================= +*/ + + +Table *luaH_new (lua_State *L) { + GCObject *o = luaC_newobj(L, LUA_TTABLE, sizeof(Table)); + Table *t = gco2t(o); + t->metatable = NULL; + t->flags = cast_byte(~0); + t->array = NULL; + t->sizearray = 0; + setnodevector(L, t, 0); + return t; +} + + +void luaH_free (lua_State *L, Table *t) { + if (!isdummy(t)) + luaM_freearray(L, t->node, cast(size_t, sizenode(t))); + luaM_freearray(L, t->array, t->sizearray); + luaM_free(L, t); +} + + +static Node *getfreepos (Table *t) { + if (!isdummy(t)) { + while (t->lastfree > t->node) { + t->lastfree--; + if (ttisnil(gkey(t->lastfree))) + return t->lastfree; + } + } + return NULL; /* could not find a free place */ +} + + + +/* +** inserts a new key into a hash table; first, check whether key's main +** position is free. If not, check whether colliding node is in its main +** position or not: if it is not, move colliding node to an empty place and +** put new key in its main position; otherwise (colliding node is in its main +** position), new key goes to an empty position. +*/ +TValue *luaH_newkey (lua_State *L, Table *t, const TValue *key) { + Node *mp; + TValue aux; + if (ttisnil(key)) luaG_runerror(L, "table index is nil"); + else if (ttisfloat(key)) { + lua_Integer k; + if (luaV_tointeger(key, &k, 0)) { /* does index fit in an integer? */ + setivalue(&aux, k); + key = &aux; /* insert it as an integer */ + } + else if (luai_numisnan(fltvalue(key))) + luaG_runerror(L, "table index is NaN"); + } + mp = mainposition(t, key); + if (!ttisnil(gval(mp)) || isdummy(t)) { /* main position is taken? */ + Node *othern; + Node *f = getfreepos(t); /* get a free place */ + if (f == NULL) { /* cannot find a free place? */ + rehash(L, t, key); /* grow table */ + /* whatever called 'newkey' takes care of TM cache */ + return luaH_set(L, t, key); /* insert key into grown table */ + } + lua_assert(!isdummy(t)); + othern = mainposition(t, gkey(mp)); + if (othern != mp) { /* is colliding node out of its main position? */ + /* yes; move colliding node into free position */ + while (othern + gnext(othern) != mp) /* find previous */ + othern += gnext(othern); + gnext(othern) = cast_int(f - othern); /* rechain to point to 'f' */ + *f = *mp; /* copy colliding node into free pos. (mp->next also goes) */ + if (gnext(mp) != 0) { + gnext(f) += cast_int(mp - f); /* correct 'next' */ + gnext(mp) = 0; /* now 'mp' is free */ + } + setnilvalue(gval(mp)); + } + else { /* colliding node is in its own main position */ + /* new node will go into free position */ + if (gnext(mp) != 0) + gnext(f) = cast_int((mp + gnext(mp)) - f); /* chain new position */ + else lua_assert(gnext(f) == 0); + gnext(mp) = cast_int(f - mp); + mp = f; + } + } + setnodekey(L, &mp->i_key, key); + luaC_barrierback(L, t, key); + lua_assert(ttisnil(gval(mp))); + return gval(mp); +} + + +/* +** search function for integers +*/ +const TValue *luaH_getint (Table *t, lua_Integer key) { + /* (1 <= key && key <= t->sizearray) */ + if (l_castS2U(key) - 1 < t->sizearray) + return &t->array[key - 1]; + else { + Node *n = hashint(t, key); + for (;;) { /* check whether 'key' is somewhere in the chain */ + if (ttisinteger(gkey(n)) && ivalue(gkey(n)) == key) + return gval(n); /* that's it */ + else { + int nx = gnext(n); + if (nx == 0) break; + n += nx; + } + } + return luaO_nilobject; + } +} + + +/* +** search function for short strings +*/ +const TValue *luaH_getshortstr (Table *t, TString *key) { + Node *n = hashstr(t, key); + lua_assert(key->tt == LUA_TSHRSTR); + for (;;) { /* check whether 'key' is somewhere in the chain */ + const TValue *k = gkey(n); + if (ttisshrstring(k) && eqshrstr(tsvalue(k), key)) + return gval(n); /* that's it */ + else { + int nx = gnext(n); + if (nx == 0) + return luaO_nilobject; /* not found */ + n += nx; + } + } +} + + +/* +** "Generic" get version. (Not that generic: not valid for integers, +** which may be in array part, nor for floats with integral values.) +*/ +static const TValue *getgeneric (Table *t, const TValue *key) { + Node *n = mainposition(t, key); + for (;;) { /* check whether 'key' is somewhere in the chain */ + if (luaV_rawequalobj(gkey(n), key)) + return gval(n); /* that's it */ + else { + int nx = gnext(n); + if (nx == 0) + return luaO_nilobject; /* not found */ + n += nx; + } + } +} + + +const TValue *luaH_getstr (Table *t, TString *key) { + if (key->tt == LUA_TSHRSTR) + return luaH_getshortstr(t, key); + else { /* for long strings, use generic case */ + TValue ko; + setsvalue(cast(lua_State *, NULL), &ko, key); + return getgeneric(t, &ko); + } +} + + +/* +** main search function +*/ +const TValue *luaH_get (Table *t, const TValue *key) { + switch (ttype(key)) { + case LUA_TSHRSTR: return luaH_getshortstr(t, tsvalue(key)); + case LUA_TNUMINT: return luaH_getint(t, ivalue(key)); + case LUA_TNIL: return luaO_nilobject; + case LUA_TNUMFLT: { + lua_Integer k; + if (luaV_tointeger(key, &k, 0)) /* index is int? */ + return luaH_getint(t, k); /* use specialized version */ + /* else... */ + } /* FALLTHROUGH */ + default: + return getgeneric(t, key); + } +} + + +/* +** beware: when using this function you probably need to check a GC +** barrier and invalidate the TM cache. +*/ +TValue *luaH_set (lua_State *L, Table *t, const TValue *key) { + const TValue *p = luaH_get(t, key); + if (p != luaO_nilobject) + return cast(TValue *, p); + else return luaH_newkey(L, t, key); +} + + +void luaH_setint (lua_State *L, Table *t, lua_Integer key, TValue *value) { + const TValue *p = luaH_getint(t, key); + TValue *cell; + if (p != luaO_nilobject) + cell = cast(TValue *, p); + else { + TValue k; + setivalue(&k, key); + cell = luaH_newkey(L, t, &k); + } + setobj2t(L, cell, value); +} + + +static int unbound_search (Table *t, unsigned int j) { + unsigned int i = j; /* i is zero or a present index */ + j++; + /* find 'i' and 'j' such that i is present and j is not */ + while (!ttisnil(luaH_getint(t, j))) { + i = j; + if (j > cast(unsigned int, MAX_INT)/2) { /* overflow? */ + /* table was built with bad purposes: resort to linear search */ + i = 1; + while (!ttisnil(luaH_getint(t, i))) i++; + return i - 1; + } + j *= 2; + } + /* now do a binary search between them */ + while (j - i > 1) { + unsigned int m = (i+j)/2; + if (ttisnil(luaH_getint(t, m))) j = m; + else i = m; + } + return i; +} + + +/* +** Try to find a boundary in table 't'. A 'boundary' is an integer index +** such that t[i] is non-nil and t[i+1] is nil (and 0 if t[1] is nil). +*/ +int luaH_getn (Table *t) { + unsigned int j = t->sizearray; + if (j > 0 && ttisnil(&t->array[j - 1])) { + /* there is a boundary in the array part: (binary) search for it */ + unsigned int i = 0; + while (j - i > 1) { + unsigned int m = (i+j)/2; + if (ttisnil(&t->array[m - 1])) j = m; + else i = m; + } + return i; + } + /* else must find a boundary in hash part */ + else if (isdummy(t)) /* hash part is empty? */ + return j; /* that is easy... */ + else return unbound_search(t, j); +} + + + +#if defined(LUA_DEBUG) + +Node *luaH_mainposition (const Table *t, const TValue *key) { + return mainposition(t, key); +} + +int luaH_isdummy (const Table *t) { return isdummy(t); } + +#endif diff --git a/EQ2/source/LUA/ltable.h b/EQ2/source/LUA/ltable.h new file mode 100644 index 000000000..6da9024fe --- /dev/null +++ b/EQ2/source/LUA/ltable.h @@ -0,0 +1,66 @@ +/* +** $Id: ltable.h,v 2.23 2016/12/22 13:08:50 roberto Exp $ +** Lua tables (hash) +** See Copyright Notice in lua.h +*/ + +#ifndef ltable_h +#define ltable_h + +#include "lobject.h" + + +#define gnode(t,i) (&(t)->node[i]) +#define gval(n) (&(n)->i_val) +#define gnext(n) ((n)->i_key.nk.next) + + +/* 'const' to avoid wrong writings that can mess up field 'next' */ +#define gkey(n) cast(const TValue*, (&(n)->i_key.tvk)) + +/* +** writable version of 'gkey'; allows updates to individual fields, +** but not to the whole (which has incompatible type) +*/ +#define wgkey(n) (&(n)->i_key.nk) + +#define invalidateTMcache(t) ((t)->flags = 0) + + +/* true when 't' is using 'dummynode' as its hash part */ +#define isdummy(t) ((t)->lastfree == NULL) + + +/* allocated size for hash nodes */ +#define allocsizenode(t) (isdummy(t) ? 0 : sizenode(t)) + + +/* returns the key, given the value of a table entry */ +#define keyfromval(v) \ + (gkey(cast(Node *, cast(char *, (v)) - offsetof(Node, i_val)))) + + +LUAI_FUNC const TValue *luaH_getint (Table *t, lua_Integer key); +LUAI_FUNC void luaH_setint (lua_State *L, Table *t, lua_Integer key, + TValue *value); +LUAI_FUNC const TValue *luaH_getshortstr (Table *t, TString *key); +LUAI_FUNC const TValue *luaH_getstr (Table *t, TString *key); +LUAI_FUNC const TValue *luaH_get (Table *t, const TValue *key); +LUAI_FUNC TValue *luaH_newkey (lua_State *L, Table *t, const TValue *key); +LUAI_FUNC TValue *luaH_set (lua_State *L, Table *t, const TValue *key); +LUAI_FUNC Table *luaH_new (lua_State *L); +LUAI_FUNC void luaH_resize (lua_State *L, Table *t, unsigned int nasize, + unsigned int nhsize); +LUAI_FUNC void luaH_resizearray (lua_State *L, Table *t, unsigned int nasize); +LUAI_FUNC void luaH_free (lua_State *L, Table *t); +LUAI_FUNC int luaH_next (lua_State *L, Table *t, StkId key); +LUAI_FUNC int luaH_getn (Table *t); + + +#if defined(LUA_DEBUG) +LUAI_FUNC Node *luaH_mainposition (const Table *t, const TValue *key); +LUAI_FUNC int luaH_isdummy (const Table *t); +#endif + + +#endif diff --git a/EQ2/source/LUA/ltablib.c b/EQ2/source/LUA/ltablib.c new file mode 100644 index 000000000..98b2f8713 --- /dev/null +++ b/EQ2/source/LUA/ltablib.c @@ -0,0 +1,450 @@ +/* +** $Id: ltablib.c,v 1.93 2016/02/25 19:41:54 roberto Exp $ +** Library for Table Manipulation +** See Copyright Notice in lua.h +*/ + +#define ltablib_c +#define LUA_LIB + +#include "lprefix.h" + + +#include +#include +#include + +#include "lua.h" + +#include "lauxlib.h" +#include "lualib.h" + + +/* +** Operations that an object must define to mimic a table +** (some functions only need some of them) +*/ +#define TAB_R 1 /* read */ +#define TAB_W 2 /* write */ +#define TAB_L 4 /* length */ +#define TAB_RW (TAB_R | TAB_W) /* read/write */ + + +#define aux_getn(L,n,w) (checktab(L, n, (w) | TAB_L), luaL_len(L, n)) + + +static int checkfield (lua_State *L, const char *key, int n) { + lua_pushstring(L, key); + return (lua_rawget(L, -n) != LUA_TNIL); +} + + +/* +** Check that 'arg' either is a table or can behave like one (that is, +** has a metatable with the required metamethods) +*/ +static void checktab (lua_State *L, int arg, int what) { + if (lua_type(L, arg) != LUA_TTABLE) { /* is it not a table? */ + int n = 1; /* number of elements to pop */ + if (lua_getmetatable(L, arg) && /* must have metatable */ + (!(what & TAB_R) || checkfield(L, "__index", ++n)) && + (!(what & TAB_W) || checkfield(L, "__newindex", ++n)) && + (!(what & TAB_L) || checkfield(L, "__len", ++n))) { + lua_pop(L, n); /* pop metatable and tested metamethods */ + } + else + luaL_checktype(L, arg, LUA_TTABLE); /* force an error */ + } +} + + +#if defined(LUA_COMPAT_MAXN) +static int maxn (lua_State *L) { + lua_Number max = 0; + luaL_checktype(L, 1, LUA_TTABLE); + lua_pushnil(L); /* first key */ + while (lua_next(L, 1)) { + lua_pop(L, 1); /* remove value */ + if (lua_type(L, -1) == LUA_TNUMBER) { + lua_Number v = lua_tonumber(L, -1); + if (v > max) max = v; + } + } + lua_pushnumber(L, max); + return 1; +} +#endif + + +static int tinsert (lua_State *L) { + lua_Integer e = aux_getn(L, 1, TAB_RW) + 1; /* first empty element */ + lua_Integer pos; /* where to insert new element */ + switch (lua_gettop(L)) { + case 2: { /* called with only 2 arguments */ + pos = e; /* insert new element at the end */ + break; + } + case 3: { + lua_Integer i; + pos = luaL_checkinteger(L, 2); /* 2nd argument is the position */ + luaL_argcheck(L, 1 <= pos && pos <= e, 2, "position out of bounds"); + for (i = e; i > pos; i--) { /* move up elements */ + lua_geti(L, 1, i - 1); + lua_seti(L, 1, i); /* t[i] = t[i - 1] */ + } + break; + } + default: { + return luaL_error(L, "wrong number of arguments to 'insert'"); + } + } + lua_seti(L, 1, pos); /* t[pos] = v */ + return 0; +} + + +static int tremove (lua_State *L) { + lua_Integer size = aux_getn(L, 1, TAB_RW); + lua_Integer pos = luaL_optinteger(L, 2, size); + if (pos != size) /* validate 'pos' if given */ + luaL_argcheck(L, 1 <= pos && pos <= size + 1, 1, "position out of bounds"); + lua_geti(L, 1, pos); /* result = t[pos] */ + for ( ; pos < size; pos++) { + lua_geti(L, 1, pos + 1); + lua_seti(L, 1, pos); /* t[pos] = t[pos + 1] */ + } + lua_pushnil(L); + lua_seti(L, 1, pos); /* t[pos] = nil */ + return 1; +} + + +/* +** Copy elements (1[f], ..., 1[e]) into (tt[t], tt[t+1], ...). Whenever +** possible, copy in increasing order, which is better for rehashing. +** "possible" means destination after original range, or smaller +** than origin, or copying to another table. +*/ +static int tmove (lua_State *L) { + lua_Integer f = luaL_checkinteger(L, 2); + lua_Integer e = luaL_checkinteger(L, 3); + lua_Integer t = luaL_checkinteger(L, 4); + int tt = !lua_isnoneornil(L, 5) ? 5 : 1; /* destination table */ + checktab(L, 1, TAB_R); + checktab(L, tt, TAB_W); + if (e >= f) { /* otherwise, nothing to move */ + lua_Integer n, i; + luaL_argcheck(L, f > 0 || e < LUA_MAXINTEGER + f, 3, + "too many elements to move"); + n = e - f + 1; /* number of elements to move */ + luaL_argcheck(L, t <= LUA_MAXINTEGER - n + 1, 4, + "destination wrap around"); + if (t > e || t <= f || (tt != 1 && !lua_compare(L, 1, tt, LUA_OPEQ))) { + for (i = 0; i < n; i++) { + lua_geti(L, 1, f + i); + lua_seti(L, tt, t + i); + } + } + else { + for (i = n - 1; i >= 0; i--) { + lua_geti(L, 1, f + i); + lua_seti(L, tt, t + i); + } + } + } + lua_pushvalue(L, tt); /* return destination table */ + return 1; +} + + +static void addfield (lua_State *L, luaL_Buffer *b, lua_Integer i) { + lua_geti(L, 1, i); + if (!lua_isstring(L, -1)) + luaL_error(L, "invalid value (%s) at index %d in table for 'concat'", + luaL_typename(L, -1), i); + luaL_addvalue(b); +} + + +static int tconcat (lua_State *L) { + luaL_Buffer b; + lua_Integer last = aux_getn(L, 1, TAB_R); + size_t lsep; + const char *sep = luaL_optlstring(L, 2, "", &lsep); + lua_Integer i = luaL_optinteger(L, 3, 1); + last = luaL_optinteger(L, 4, last); + luaL_buffinit(L, &b); + for (; i < last; i++) { + addfield(L, &b, i); + luaL_addlstring(&b, sep, lsep); + } + if (i == last) /* add last value (if interval was not empty) */ + addfield(L, &b, i); + luaL_pushresult(&b); + return 1; +} + + +/* +** {====================================================== +** Pack/unpack +** ======================================================= +*/ + +static int pack (lua_State *L) { + int i; + int n = lua_gettop(L); /* number of elements to pack */ + lua_createtable(L, n, 1); /* create result table */ + lua_insert(L, 1); /* put it at index 1 */ + for (i = n; i >= 1; i--) /* assign elements */ + lua_seti(L, 1, i); + lua_pushinteger(L, n); + lua_setfield(L, 1, "n"); /* t.n = number of elements */ + return 1; /* return table */ +} + + +static int unpack (lua_State *L) { + lua_Unsigned n; + lua_Integer i = luaL_optinteger(L, 2, 1); + lua_Integer e = luaL_opt(L, luaL_checkinteger, 3, luaL_len(L, 1)); + if (i > e) return 0; /* empty range */ + n = (lua_Unsigned)e - i; /* number of elements minus 1 (avoid overflows) */ + if (n >= (unsigned int)INT_MAX || !lua_checkstack(L, (int)(++n))) + return luaL_error(L, "too many results to unpack"); + for (; i < e; i++) { /* push arg[i..e - 1] (to avoid overflows) */ + lua_geti(L, 1, i); + } + lua_geti(L, 1, e); /* push last element */ + return (int)n; +} + +/* }====================================================== */ + + + +/* +** {====================================================== +** Quicksort +** (based on 'Algorithms in MODULA-3', Robert Sedgewick; +** Addison-Wesley, 1993.) +** ======================================================= +*/ + + +/* type for array indices */ +typedef unsigned int IdxT; + + +/* +** Produce a "random" 'unsigned int' to randomize pivot choice. This +** macro is used only when 'sort' detects a big imbalance in the result +** of a partition. (If you don't want/need this "randomness", ~0 is a +** good choice.) +*/ +#if !defined(l_randomizePivot) /* { */ + +#include + +/* size of 'e' measured in number of 'unsigned int's */ +#define sof(e) (sizeof(e) / sizeof(unsigned int)) + +/* +** Use 'time' and 'clock' as sources of "randomness". Because we don't +** know the types 'clock_t' and 'time_t', we cannot cast them to +** anything without risking overflows. A safe way to use their values +** is to copy them to an array of a known type and use the array values. +*/ +static unsigned int l_randomizePivot (void) { + clock_t c = clock(); + time_t t = time(NULL); + unsigned int buff[sof(c) + sof(t)]; + unsigned int i, rnd = 0; + memcpy(buff, &c, sof(c) * sizeof(unsigned int)); + memcpy(buff + sof(c), &t, sof(t) * sizeof(unsigned int)); + for (i = 0; i < sof(buff); i++) + rnd += buff[i]; + return rnd; +} + +#endif /* } */ + + +/* arrays larger than 'RANLIMIT' may use randomized pivots */ +#define RANLIMIT 100u + + +static void set2 (lua_State *L, IdxT i, IdxT j) { + lua_seti(L, 1, i); + lua_seti(L, 1, j); +} + + +/* +** Return true iff value at stack index 'a' is less than the value at +** index 'b' (according to the order of the sort). +*/ +static int sort_comp (lua_State *L, int a, int b) { + if (lua_isnil(L, 2)) /* no function? */ + return lua_compare(L, a, b, LUA_OPLT); /* a < b */ + else { /* function */ + int res; + lua_pushvalue(L, 2); /* push function */ + lua_pushvalue(L, a-1); /* -1 to compensate function */ + lua_pushvalue(L, b-2); /* -2 to compensate function and 'a' */ + lua_call(L, 2, 1); /* call function */ + res = lua_toboolean(L, -1); /* get result */ + lua_pop(L, 1); /* pop result */ + return res; + } +} + + +/* +** Does the partition: Pivot P is at the top of the stack. +** precondition: a[lo] <= P == a[up-1] <= a[up], +** so it only needs to do the partition from lo + 1 to up - 2. +** Pos-condition: a[lo .. i - 1] <= a[i] == P <= a[i + 1 .. up] +** returns 'i'. +*/ +static IdxT partition (lua_State *L, IdxT lo, IdxT up) { + IdxT i = lo; /* will be incremented before first use */ + IdxT j = up - 1; /* will be decremented before first use */ + /* loop invariant: a[lo .. i] <= P <= a[j .. up] */ + for (;;) { + /* next loop: repeat ++i while a[i] < P */ + while (lua_geti(L, 1, ++i), sort_comp(L, -1, -2)) { + if (i == up - 1) /* a[i] < P but a[up - 1] == P ?? */ + luaL_error(L, "invalid order function for sorting"); + lua_pop(L, 1); /* remove a[i] */ + } + /* after the loop, a[i] >= P and a[lo .. i - 1] < P */ + /* next loop: repeat --j while P < a[j] */ + while (lua_geti(L, 1, --j), sort_comp(L, -3, -1)) { + if (j < i) /* j < i but a[j] > P ?? */ + luaL_error(L, "invalid order function for sorting"); + lua_pop(L, 1); /* remove a[j] */ + } + /* after the loop, a[j] <= P and a[j + 1 .. up] >= P */ + if (j < i) { /* no elements out of place? */ + /* a[lo .. i - 1] <= P <= a[j + 1 .. i .. up] */ + lua_pop(L, 1); /* pop a[j] */ + /* swap pivot (a[up - 1]) with a[i] to satisfy pos-condition */ + set2(L, up - 1, i); + return i; + } + /* otherwise, swap a[i] - a[j] to restore invariant and repeat */ + set2(L, i, j); + } +} + + +/* +** Choose an element in the middle (2nd-3th quarters) of [lo,up] +** "randomized" by 'rnd' +*/ +static IdxT choosePivot (IdxT lo, IdxT up, unsigned int rnd) { + IdxT r4 = (up - lo) / 4; /* range/4 */ + IdxT p = rnd % (r4 * 2) + (lo + r4); + lua_assert(lo + r4 <= p && p <= up - r4); + return p; +} + + +/* +** QuickSort algorithm (recursive function) +*/ +static void auxsort (lua_State *L, IdxT lo, IdxT up, + unsigned int rnd) { + while (lo < up) { /* loop for tail recursion */ + IdxT p; /* Pivot index */ + IdxT n; /* to be used later */ + /* sort elements 'lo', 'p', and 'up' */ + lua_geti(L, 1, lo); + lua_geti(L, 1, up); + if (sort_comp(L, -1, -2)) /* a[up] < a[lo]? */ + set2(L, lo, up); /* swap a[lo] - a[up] */ + else + lua_pop(L, 2); /* remove both values */ + if (up - lo == 1) /* only 2 elements? */ + return; /* already sorted */ + if (up - lo < RANLIMIT || rnd == 0) /* small interval or no randomize? */ + p = (lo + up)/2; /* middle element is a good pivot */ + else /* for larger intervals, it is worth a random pivot */ + p = choosePivot(lo, up, rnd); + lua_geti(L, 1, p); + lua_geti(L, 1, lo); + if (sort_comp(L, -2, -1)) /* a[p] < a[lo]? */ + set2(L, p, lo); /* swap a[p] - a[lo] */ + else { + lua_pop(L, 1); /* remove a[lo] */ + lua_geti(L, 1, up); + if (sort_comp(L, -1, -2)) /* a[up] < a[p]? */ + set2(L, p, up); /* swap a[up] - a[p] */ + else + lua_pop(L, 2); + } + if (up - lo == 2) /* only 3 elements? */ + return; /* already sorted */ + lua_geti(L, 1, p); /* get middle element (Pivot) */ + lua_pushvalue(L, -1); /* push Pivot */ + lua_geti(L, 1, up - 1); /* push a[up - 1] */ + set2(L, p, up - 1); /* swap Pivot (a[p]) with a[up - 1] */ + p = partition(L, lo, up); + /* a[lo .. p - 1] <= a[p] == P <= a[p + 1 .. up] */ + if (p - lo < up - p) { /* lower interval is smaller? */ + auxsort(L, lo, p - 1, rnd); /* call recursively for lower interval */ + n = p - lo; /* size of smaller interval */ + lo = p + 1; /* tail call for [p + 1 .. up] (upper interval) */ + } + else { + auxsort(L, p + 1, up, rnd); /* call recursively for upper interval */ + n = up - p; /* size of smaller interval */ + up = p - 1; /* tail call for [lo .. p - 1] (lower interval) */ + } + if ((up - lo) / 128 > n) /* partition too imbalanced? */ + rnd = l_randomizePivot(); /* try a new randomization */ + } /* tail call auxsort(L, lo, up, rnd) */ +} + + +static int sort (lua_State *L) { + lua_Integer n = aux_getn(L, 1, TAB_RW); + if (n > 1) { /* non-trivial interval? */ + luaL_argcheck(L, n < INT_MAX, 1, "array too big"); + if (!lua_isnoneornil(L, 2)) /* is there a 2nd argument? */ + luaL_checktype(L, 2, LUA_TFUNCTION); /* must be a function */ + lua_settop(L, 2); /* make sure there are two arguments */ + auxsort(L, 1, (IdxT)n, 0); + } + return 0; +} + +/* }====================================================== */ + + +static const luaL_Reg tab_funcs[] = { + {"concat", tconcat}, +#if defined(LUA_COMPAT_MAXN) + {"maxn", maxn}, +#endif + {"insert", tinsert}, + {"pack", pack}, + {"unpack", unpack}, + {"remove", tremove}, + {"move", tmove}, + {"sort", sort}, + {NULL, NULL} +}; + + +LUAMOD_API int luaopen_table (lua_State *L) { + luaL_newlib(L, tab_funcs); +#if defined(LUA_COMPAT_UNPACK) + /* _G.unpack = table.unpack */ + lua_getfield(L, -1, "unpack"); + lua_setglobal(L, "unpack"); +#endif + return 1; +} + diff --git a/EQ2/source/LUA/ltm.c b/EQ2/source/LUA/ltm.c new file mode 100644 index 000000000..14e525788 --- /dev/null +++ b/EQ2/source/LUA/ltm.c @@ -0,0 +1,165 @@ +/* +** $Id: ltm.c,v 2.38 2016/12/22 13:08:50 roberto Exp $ +** Tag methods +** See Copyright Notice in lua.h +*/ + +#define ltm_c +#define LUA_CORE + +#include "lprefix.h" + + +#include + +#include "lua.h" + +#include "ldebug.h" +#include "ldo.h" +#include "lobject.h" +#include "lstate.h" +#include "lstring.h" +#include "ltable.h" +#include "ltm.h" +#include "lvm.h" + + +static const char udatatypename[] = "userdata"; + +LUAI_DDEF const char *const luaT_typenames_[LUA_TOTALTAGS] = { + "no value", + "nil", "boolean", udatatypename, "number", + "string", "table", "function", udatatypename, "thread", + "proto" /* this last case is used for tests only */ +}; + + +void luaT_init (lua_State *L) { + static const char *const luaT_eventname[] = { /* ORDER TM */ + "__index", "__newindex", + "__gc", "__mode", "__len", "__eq", + "__add", "__sub", "__mul", "__mod", "__pow", + "__div", "__idiv", + "__band", "__bor", "__bxor", "__shl", "__shr", + "__unm", "__bnot", "__lt", "__le", + "__concat", "__call" + }; + int i; + for (i=0; itmname[i] = luaS_new(L, luaT_eventname[i]); + luaC_fix(L, obj2gco(G(L)->tmname[i])); /* never collect these names */ + } +} + + +/* +** function to be used with macro "fasttm": optimized for absence of +** tag methods +*/ +const TValue *luaT_gettm (Table *events, TMS event, TString *ename) { + const TValue *tm = luaH_getshortstr(events, ename); + lua_assert(event <= TM_EQ); + if (ttisnil(tm)) { /* no tag method? */ + events->flags |= cast_byte(1u<metatable; + break; + case LUA_TUSERDATA: + mt = uvalue(o)->metatable; + break; + default: + mt = G(L)->mt[ttnov(o)]; + } + return (mt ? luaH_getshortstr(mt, G(L)->tmname[event]) : luaO_nilobject); +} + + +/* +** Return the name of the type of an object. For tables and userdata +** with metatable, use their '__name' metafield, if present. +*/ +const char *luaT_objtypename (lua_State *L, const TValue *o) { + Table *mt; + if ((ttistable(o) && (mt = hvalue(o)->metatable) != NULL) || + (ttisfulluserdata(o) && (mt = uvalue(o)->metatable) != NULL)) { + const TValue *name = luaH_getshortstr(mt, luaS_new(L, "__name")); + if (ttisstring(name)) /* is '__name' a string? */ + return getstr(tsvalue(name)); /* use it as type name */ + } + return ttypename(ttnov(o)); /* else use standard type name */ +} + + +void luaT_callTM (lua_State *L, const TValue *f, const TValue *p1, + const TValue *p2, TValue *p3, int hasres) { + ptrdiff_t result = savestack(L, p3); + StkId func = L->top; + setobj2s(L, func, f); /* push function (assume EXTRA_STACK) */ + setobj2s(L, func + 1, p1); /* 1st argument */ + setobj2s(L, func + 2, p2); /* 2nd argument */ + L->top += 3; + if (!hasres) /* no result? 'p3' is third argument */ + setobj2s(L, L->top++, p3); /* 3rd argument */ + /* metamethod may yield only when called from Lua code */ + if (isLua(L->ci)) + luaD_call(L, func, hasres); + else + luaD_callnoyield(L, func, hasres); + if (hasres) { /* if has result, move it to its place */ + p3 = restorestack(L, result); + setobjs2s(L, p3, --L->top); + } +} + + +int luaT_callbinTM (lua_State *L, const TValue *p1, const TValue *p2, + StkId res, TMS event) { + const TValue *tm = luaT_gettmbyobj(L, p1, event); /* try first operand */ + if (ttisnil(tm)) + tm = luaT_gettmbyobj(L, p2, event); /* try second operand */ + if (ttisnil(tm)) return 0; + luaT_callTM(L, tm, p1, p2, res, 1); + return 1; +} + + +void luaT_trybinTM (lua_State *L, const TValue *p1, const TValue *p2, + StkId res, TMS event) { + if (!luaT_callbinTM(L, p1, p2, res, event)) { + switch (event) { + case TM_CONCAT: + luaG_concaterror(L, p1, p2); + /* call never returns, but to avoid warnings: *//* FALLTHROUGH */ + case TM_BAND: case TM_BOR: case TM_BXOR: + case TM_SHL: case TM_SHR: case TM_BNOT: { + lua_Number dummy; + if (tonumber(p1, &dummy) && tonumber(p2, &dummy)) + luaG_tointerror(L, p1, p2); + else + luaG_opinterror(L, p1, p2, "perform bitwise operation on"); + } + /* calls never return, but to avoid warnings: *//* FALLTHROUGH */ + default: + luaG_opinterror(L, p1, p2, "perform arithmetic on"); + } + } +} + + +int luaT_callorderTM (lua_State *L, const TValue *p1, const TValue *p2, + TMS event) { + if (!luaT_callbinTM(L, p1, p2, L->top, event)) + return -1; /* no metamethod */ + else + return !l_isfalse(L->top); +} + diff --git a/EQ2/source/LUA/ltm.h b/EQ2/source/LUA/ltm.h new file mode 100644 index 000000000..63db7269b --- /dev/null +++ b/EQ2/source/LUA/ltm.h @@ -0,0 +1,76 @@ +/* +** $Id: ltm.h,v 2.22 2016/02/26 19:20:15 roberto Exp $ +** Tag methods +** See Copyright Notice in lua.h +*/ + +#ifndef ltm_h +#define ltm_h + + +#include "lobject.h" + + +/* +* WARNING: if you change the order of this enumeration, +* grep "ORDER TM" and "ORDER OP" +*/ +typedef enum { + TM_INDEX, + TM_NEWINDEX, + TM_GC, + TM_MODE, + TM_LEN, + TM_EQ, /* last tag method with fast access */ + TM_ADD, + TM_SUB, + TM_MUL, + TM_MOD, + TM_POW, + TM_DIV, + TM_IDIV, + TM_BAND, + TM_BOR, + TM_BXOR, + TM_SHL, + TM_SHR, + TM_UNM, + TM_BNOT, + TM_LT, + TM_LE, + TM_CONCAT, + TM_CALL, + TM_N /* number of elements in the enum */ +} TMS; + + + +#define gfasttm(g,et,e) ((et) == NULL ? NULL : \ + ((et)->flags & (1u<<(e))) ? NULL : luaT_gettm(et, e, (g)->tmname[e])) + +#define fasttm(l,et,e) gfasttm(G(l), et, e) + +#define ttypename(x) luaT_typenames_[(x) + 1] + +LUAI_DDEC const char *const luaT_typenames_[LUA_TOTALTAGS]; + + +LUAI_FUNC const char *luaT_objtypename (lua_State *L, const TValue *o); + +LUAI_FUNC const TValue *luaT_gettm (Table *events, TMS event, TString *ename); +LUAI_FUNC const TValue *luaT_gettmbyobj (lua_State *L, const TValue *o, + TMS event); +LUAI_FUNC void luaT_init (lua_State *L); + +LUAI_FUNC void luaT_callTM (lua_State *L, const TValue *f, const TValue *p1, + const TValue *p2, TValue *p3, int hasres); +LUAI_FUNC int luaT_callbinTM (lua_State *L, const TValue *p1, const TValue *p2, + StkId res, TMS event); +LUAI_FUNC void luaT_trybinTM (lua_State *L, const TValue *p1, const TValue *p2, + StkId res, TMS event); +LUAI_FUNC int luaT_callorderTM (lua_State *L, const TValue *p1, + const TValue *p2, TMS event); + + + +#endif diff --git a/EQ2/source/LUA/lua.h b/EQ2/source/LUA/lua.h new file mode 100644 index 000000000..26c0e2d69 --- /dev/null +++ b/EQ2/source/LUA/lua.h @@ -0,0 +1,486 @@ +/* +** $Id: lua.h,v 1.332 2016/12/22 15:51:20 roberto Exp $ +** Lua - A Scripting Language +** Lua.org, PUC-Rio, Brazil (http://www.lua.org) +** See Copyright Notice at the end of this file +*/ + + +#ifndef lua_h +#define lua_h + +#include +#include + + +#include "luaconf.h" + + +#define LUA_VERSION_MAJOR "5" +#define LUA_VERSION_MINOR "3" +#define LUA_VERSION_NUM 503 +#define LUA_VERSION_RELEASE "4" + +#define LUA_VERSION "Lua " LUA_VERSION_MAJOR "." LUA_VERSION_MINOR +#define LUA_RELEASE LUA_VERSION "." LUA_VERSION_RELEASE +#define LUA_COPYRIGHT LUA_RELEASE " Copyright (C) 1994-2017 Lua.org, PUC-Rio" +#define LUA_AUTHORS "R. Ierusalimschy, L. H. de Figueiredo, W. Celes" + + +/* mark for precompiled code ('Lua') */ +#define LUA_SIGNATURE "\x1bLua" + +/* option for multiple returns in 'lua_pcall' and 'lua_call' */ +#define LUA_MULTRET (-1) + + +/* +** Pseudo-indices +** (-LUAI_MAXSTACK is the minimum valid index; we keep some free empty +** space after that to help overflow detection) +*/ +#define LUA_REGISTRYINDEX (-LUAI_MAXSTACK - 1000) +#define lua_upvalueindex(i) (LUA_REGISTRYINDEX - (i)) + + +/* thread status */ +#define LUA_OK 0 +#define LUA_YIELD 1 +#define LUA_ERRRUN 2 +#define LUA_ERRSYNTAX 3 +#define LUA_ERRMEM 4 +#define LUA_ERRGCMM 5 +#define LUA_ERRERR 6 + + +typedef struct lua_State lua_State; + + +/* +** basic types +*/ +#define LUA_TNONE (-1) + +#define LUA_TNIL 0 +#define LUA_TBOOLEAN 1 +#define LUA_TLIGHTUSERDATA 2 +#define LUA_TNUMBER 3 +#define LUA_TSTRING 4 +#define LUA_TTABLE 5 +#define LUA_TFUNCTION 6 +#define LUA_TUSERDATA 7 +#define LUA_TTHREAD 8 + +#define LUA_NUMTAGS 9 + + + +/* minimum Lua stack available to a C function */ +#define LUA_MINSTACK 20 + + +/* predefined values in the registry */ +#define LUA_RIDX_MAINTHREAD 1 +#define LUA_RIDX_GLOBALS 2 +#define LUA_RIDX_LAST LUA_RIDX_GLOBALS + + +/* type of numbers in Lua */ +typedef LUA_NUMBER lua_Number; + + +/* type for integer functions */ +typedef LUA_INTEGER lua_Integer; + +/* unsigned integer type */ +typedef LUA_UNSIGNED lua_Unsigned; + +/* type for continuation-function contexts */ +typedef LUA_KCONTEXT lua_KContext; + + +/* +** Type for C functions registered with Lua +*/ +typedef int (*lua_CFunction) (lua_State *L); + +/* +** Type for continuation functions +*/ +typedef int (*lua_KFunction) (lua_State *L, int status, lua_KContext ctx); + + +/* +** Type for functions that read/write blocks when loading/dumping Lua chunks +*/ +typedef const char * (*lua_Reader) (lua_State *L, void *ud, size_t *sz); + +typedef int (*lua_Writer) (lua_State *L, const void *p, size_t sz, void *ud); + + +/* +** Type for memory-allocation functions +*/ +typedef void * (*lua_Alloc) (void *ud, void *ptr, size_t osize, size_t nsize); + + + +/* +** generic extra include file +*/ +#if defined(LUA_USER_H) +#include LUA_USER_H +#endif + + +/* +** RCS ident string +*/ +extern const char lua_ident[]; + + +/* +** state manipulation +*/ +LUA_API lua_State *(lua_newstate) (lua_Alloc f, void *ud); +LUA_API void (lua_close) (lua_State *L); +LUA_API lua_State *(lua_newthread) (lua_State *L); + +LUA_API lua_CFunction (lua_atpanic) (lua_State *L, lua_CFunction panicf); + + +LUA_API const lua_Number *(lua_version) (lua_State *L); + + +/* +** basic stack manipulation +*/ +LUA_API int (lua_absindex) (lua_State *L, int idx); +LUA_API int (lua_gettop) (lua_State *L); +LUA_API void (lua_settop) (lua_State *L, int idx); +LUA_API void (lua_pushvalue) (lua_State *L, int idx); +LUA_API void (lua_rotate) (lua_State *L, int idx, int n); +LUA_API void (lua_copy) (lua_State *L, int fromidx, int toidx); +LUA_API int (lua_checkstack) (lua_State *L, int n); + +LUA_API void (lua_xmove) (lua_State *from, lua_State *to, int n); + + +/* +** access functions (stack -> C) +*/ + +LUA_API int (lua_isnumber) (lua_State *L, int idx); +LUA_API int (lua_isstring) (lua_State *L, int idx); +LUA_API int (lua_iscfunction) (lua_State *L, int idx); +LUA_API int (lua_isinteger) (lua_State *L, int idx); +LUA_API int (lua_isuserdata) (lua_State *L, int idx); +LUA_API int (lua_type) (lua_State *L, int idx); +LUA_API const char *(lua_typename) (lua_State *L, int tp); + +LUA_API lua_Number (lua_tonumberx) (lua_State *L, int idx, int *isnum); +LUA_API lua_Integer (lua_tointegerx) (lua_State *L, int idx, int *isnum); +LUA_API int (lua_toboolean) (lua_State *L, int idx); +LUA_API const char *(lua_tolstring) (lua_State *L, int idx, size_t *len); +LUA_API size_t (lua_rawlen) (lua_State *L, int idx); +LUA_API lua_CFunction (lua_tocfunction) (lua_State *L, int idx); +LUA_API void *(lua_touserdata) (lua_State *L, int idx); +LUA_API lua_State *(lua_tothread) (lua_State *L, int idx); +LUA_API const void *(lua_topointer) (lua_State *L, int idx); + + +/* +** Comparison and arithmetic functions +*/ + +#define LUA_OPADD 0 /* ORDER TM, ORDER OP */ +#define LUA_OPSUB 1 +#define LUA_OPMUL 2 +#define LUA_OPMOD 3 +#define LUA_OPPOW 4 +#define LUA_OPDIV 5 +#define LUA_OPIDIV 6 +#define LUA_OPBAND 7 +#define LUA_OPBOR 8 +#define LUA_OPBXOR 9 +#define LUA_OPSHL 10 +#define LUA_OPSHR 11 +#define LUA_OPUNM 12 +#define LUA_OPBNOT 13 + +LUA_API void (lua_arith) (lua_State *L, int op); + +#define LUA_OPEQ 0 +#define LUA_OPLT 1 +#define LUA_OPLE 2 + +LUA_API int (lua_rawequal) (lua_State *L, int idx1, int idx2); +LUA_API int (lua_compare) (lua_State *L, int idx1, int idx2, int op); + + +/* +** push functions (C -> stack) +*/ +LUA_API void (lua_pushnil) (lua_State *L); +LUA_API void (lua_pushnumber) (lua_State *L, lua_Number n); +LUA_API void (lua_pushinteger) (lua_State *L, lua_Integer n); +LUA_API const char *(lua_pushlstring) (lua_State *L, const char *s, size_t len); +LUA_API const char *(lua_pushstring) (lua_State *L, const char *s); +LUA_API const char *(lua_pushvfstring) (lua_State *L, const char *fmt, + va_list argp); +LUA_API const char *(lua_pushfstring) (lua_State *L, const char *fmt, ...); +LUA_API void (lua_pushcclosure) (lua_State *L, lua_CFunction fn, int n); +LUA_API void (lua_pushboolean) (lua_State *L, int b); +LUA_API void (lua_pushlightuserdata) (lua_State *L, void *p); +LUA_API int (lua_pushthread) (lua_State *L); + + +/* +** get functions (Lua -> stack) +*/ +LUA_API int (lua_getglobal) (lua_State *L, const char *name); +LUA_API int (lua_gettable) (lua_State *L, int idx); +LUA_API int (lua_getfield) (lua_State *L, int idx, const char *k); +LUA_API int (lua_geti) (lua_State *L, int idx, lua_Integer n); +LUA_API int (lua_rawget) (lua_State *L, int idx); +LUA_API int (lua_rawgeti) (lua_State *L, int idx, lua_Integer n); +LUA_API int (lua_rawgetp) (lua_State *L, int idx, const void *p); + +LUA_API void (lua_createtable) (lua_State *L, int narr, int nrec); +LUA_API void *(lua_newuserdata) (lua_State *L, size_t sz); +LUA_API int (lua_getmetatable) (lua_State *L, int objindex); +LUA_API int (lua_getuservalue) (lua_State *L, int idx); + + +/* +** set functions (stack -> Lua) +*/ +LUA_API void (lua_setglobal) (lua_State *L, const char *name); +LUA_API void (lua_settable) (lua_State *L, int idx); +LUA_API void (lua_setfield) (lua_State *L, int idx, const char *k); +LUA_API void (lua_seti) (lua_State *L, int idx, lua_Integer n); +LUA_API void (lua_rawset) (lua_State *L, int idx); +LUA_API void (lua_rawseti) (lua_State *L, int idx, lua_Integer n); +LUA_API void (lua_rawsetp) (lua_State *L, int idx, const void *p); +LUA_API int (lua_setmetatable) (lua_State *L, int objindex); +LUA_API void (lua_setuservalue) (lua_State *L, int idx); + + +/* +** 'load' and 'call' functions (load and run Lua code) +*/ +LUA_API void (lua_callk) (lua_State *L, int nargs, int nresults, + lua_KContext ctx, lua_KFunction k); +#define lua_call(L,n,r) lua_callk(L, (n), (r), 0, NULL) + +LUA_API int (lua_pcallk) (lua_State *L, int nargs, int nresults, int errfunc, + lua_KContext ctx, lua_KFunction k); +#define lua_pcall(L,n,r,f) lua_pcallk(L, (n), (r), (f), 0, NULL) + +LUA_API int (lua_load) (lua_State *L, lua_Reader reader, void *dt, + const char *chunkname, const char *mode); + +LUA_API int (lua_dump) (lua_State *L, lua_Writer writer, void *data, int strip); + + +/* +** coroutine functions +*/ +LUA_API int (lua_yieldk) (lua_State *L, int nresults, lua_KContext ctx, + lua_KFunction k); +LUA_API int (lua_resume) (lua_State *L, lua_State *from, int narg); +LUA_API int (lua_status) (lua_State *L); +LUA_API int (lua_isyieldable) (lua_State *L); + +#define lua_yield(L,n) lua_yieldk(L, (n), 0, NULL) + + +/* +** garbage-collection function and options +*/ + +#define LUA_GCSTOP 0 +#define LUA_GCRESTART 1 +#define LUA_GCCOLLECT 2 +#define LUA_GCCOUNT 3 +#define LUA_GCCOUNTB 4 +#define LUA_GCSTEP 5 +#define LUA_GCSETPAUSE 6 +#define LUA_GCSETSTEPMUL 7 +#define LUA_GCISRUNNING 9 + +LUA_API int (lua_gc) (lua_State *L, int what, int data); + + +/* +** miscellaneous functions +*/ + +LUA_API int (lua_error) (lua_State *L); + +LUA_API int (lua_next) (lua_State *L, int idx); + +LUA_API void (lua_concat) (lua_State *L, int n); +LUA_API void (lua_len) (lua_State *L, int idx); + +LUA_API size_t (lua_stringtonumber) (lua_State *L, const char *s); + +LUA_API lua_Alloc (lua_getallocf) (lua_State *L, void **ud); +LUA_API void (lua_setallocf) (lua_State *L, lua_Alloc f, void *ud); + + + +/* +** {============================================================== +** some useful macros +** =============================================================== +*/ + +#define lua_getextraspace(L) ((void *)((char *)(L) - LUA_EXTRASPACE)) + +#define lua_tonumber(L,i) lua_tonumberx(L,(i),NULL) +#define lua_tointeger(L,i) lua_tointegerx(L,(i),NULL) + +#define lua_pop(L,n) lua_settop(L, -(n)-1) + +#define lua_newtable(L) lua_createtable(L, 0, 0) + +#define lua_register(L,n,f) (lua_pushcfunction(L, (f)), lua_setglobal(L, (n))) + +#define lua_pushcfunction(L,f) lua_pushcclosure(L, (f), 0) + +#define lua_isfunction(L,n) (lua_type(L, (n)) == LUA_TFUNCTION) +#define lua_istable(L,n) (lua_type(L, (n)) == LUA_TTABLE) +#define lua_islightuserdata(L,n) (lua_type(L, (n)) == LUA_TLIGHTUSERDATA) +#define lua_isnil(L,n) (lua_type(L, (n)) == LUA_TNIL) +#define lua_isboolean(L,n) (lua_type(L, (n)) == LUA_TBOOLEAN) +#define lua_isthread(L,n) (lua_type(L, (n)) == LUA_TTHREAD) +#define lua_isnone(L,n) (lua_type(L, (n)) == LUA_TNONE) +#define lua_isnoneornil(L, n) (lua_type(L, (n)) <= 0) + +#define lua_pushliteral(L, s) lua_pushstring(L, "" s) + +#define lua_pushglobaltable(L) \ + ((void)lua_rawgeti(L, LUA_REGISTRYINDEX, LUA_RIDX_GLOBALS)) + +#define lua_tostring(L,i) lua_tolstring(L, (i), NULL) + + +#define lua_insert(L,idx) lua_rotate(L, (idx), 1) + +#define lua_remove(L,idx) (lua_rotate(L, (idx), -1), lua_pop(L, 1)) + +#define lua_replace(L,idx) (lua_copy(L, -1, (idx)), lua_pop(L, 1)) + +/* }============================================================== */ + + +/* +** {============================================================== +** compatibility macros for unsigned conversions +** =============================================================== +*/ +#if defined(LUA_COMPAT_APIINTCASTS) + +#define lua_pushunsigned(L,n) lua_pushinteger(L, (lua_Integer)(n)) +#define lua_tounsignedx(L,i,is) ((lua_Unsigned)lua_tointegerx(L,i,is)) +#define lua_tounsigned(L,i) lua_tounsignedx(L,(i),NULL) + +#endif +/* }============================================================== */ + +/* +** {====================================================================== +** Debug API +** ======================================================================= +*/ + + +/* +** Event codes +*/ +#define LUA_HOOKCALL 0 +#define LUA_HOOKRET 1 +#define LUA_HOOKLINE 2 +#define LUA_HOOKCOUNT 3 +#define LUA_HOOKTAILCALL 4 + + +/* +** Event masks +*/ +#define LUA_MASKCALL (1 << LUA_HOOKCALL) +#define LUA_MASKRET (1 << LUA_HOOKRET) +#define LUA_MASKLINE (1 << LUA_HOOKLINE) +#define LUA_MASKCOUNT (1 << LUA_HOOKCOUNT) + +typedef struct lua_Debug lua_Debug; /* activation record */ + + +/* Functions to be called by the debugger in specific events */ +typedef void (*lua_Hook) (lua_State *L, lua_Debug *ar); + + +LUA_API int (lua_getstack) (lua_State *L, int level, lua_Debug *ar); +LUA_API int (lua_getinfo) (lua_State *L, const char *what, lua_Debug *ar); +LUA_API const char *(lua_getlocal) (lua_State *L, const lua_Debug *ar, int n); +LUA_API const char *(lua_setlocal) (lua_State *L, const lua_Debug *ar, int n); +LUA_API const char *(lua_getupvalue) (lua_State *L, int funcindex, int n); +LUA_API const char *(lua_setupvalue) (lua_State *L, int funcindex, int n); + +LUA_API void *(lua_upvalueid) (lua_State *L, int fidx, int n); +LUA_API void (lua_upvaluejoin) (lua_State *L, int fidx1, int n1, + int fidx2, int n2); + +LUA_API void (lua_sethook) (lua_State *L, lua_Hook func, int mask, int count); +LUA_API lua_Hook (lua_gethook) (lua_State *L); +LUA_API int (lua_gethookmask) (lua_State *L); +LUA_API int (lua_gethookcount) (lua_State *L); + + +struct lua_Debug { + int event; + const char *name; /* (n) */ + const char *namewhat; /* (n) 'global', 'local', 'field', 'method' */ + const char *what; /* (S) 'Lua', 'C', 'main', 'tail' */ + const char *source; /* (S) */ + int currentline; /* (l) */ + int linedefined; /* (S) */ + int lastlinedefined; /* (S) */ + unsigned char nups; /* (u) number of upvalues */ + unsigned char nparams;/* (u) number of parameters */ + char isvararg; /* (u) */ + char istailcall; /* (t) */ + char short_src[LUA_IDSIZE]; /* (S) */ + /* private part */ + struct CallInfo *i_ci; /* active function */ +}; + +/* }====================================================================== */ + + +/****************************************************************************** +* Copyright (C) 1994-2017 Lua.org, PUC-Rio. +* +* Permission is hereby granted, free of charge, to any person obtaining +* a copy of this software and associated documentation files (the +* "Software"), to deal in the Software without restriction, including +* without limitation the rights to use, copy, modify, merge, publish, +* distribute, sublicense, and/or sell copies of the Software, and to +* permit persons to whom the Software is furnished to do so, subject to +* the following conditions: +* +* The above copyright notice and this permission notice shall be +* included in all copies or substantial portions of the Software. +* +* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +******************************************************************************/ + + +#endif diff --git a/EQ2/source/LUA/lua.hpp b/EQ2/source/LUA/lua.hpp new file mode 100644 index 000000000..ec417f594 --- /dev/null +++ b/EQ2/source/LUA/lua.hpp @@ -0,0 +1,9 @@ +// lua.hpp +// Lua header files for C++ +// <> not supplied automatically because Lua also compiles as C++ + +extern "C" { +#include "lua.h" +#include "lualib.h" +#include "lauxlib.h" +} diff --git a/EQ2/source/LUA/luaconf.h b/EQ2/source/LUA/luaconf.h new file mode 100644 index 000000000..f37bea096 --- /dev/null +++ b/EQ2/source/LUA/luaconf.h @@ -0,0 +1,783 @@ +/* +** $Id: luaconf.h,v 1.259 2016/12/22 13:08:50 roberto Exp $ +** Configuration file for Lua +** See Copyright Notice in lua.h +*/ + + +#ifndef luaconf_h +#define luaconf_h + +#include +#include + + +/* +** =================================================================== +** Search for "@@" to find all configurable definitions. +** =================================================================== +*/ + + +/* +** {==================================================================== +** System Configuration: macros to adapt (if needed) Lua to some +** particular platform, for instance compiling it with 32-bit numbers or +** restricting it to C89. +** ===================================================================== +*/ + +/* +@@ LUA_32BITS enables Lua with 32-bit integers and 32-bit floats. You +** can also define LUA_32BITS in the make file, but changing here you +** ensure that all software connected to Lua will be compiled with the +** same configuration. +*/ +/* #define LUA_32BITS */ + + +/* +@@ LUA_USE_C89 controls the use of non-ISO-C89 features. +** Define it if you want Lua to avoid the use of a few C99 features +** or Windows-specific features on Windows. +*/ +/* #define LUA_USE_C89 */ + + +/* +** By default, Lua on Windows use (some) specific Windows features +*/ +#if !defined(LUA_USE_C89) && defined(_WIN32) && !defined(_WIN32_WCE) +#define LUA_USE_WINDOWS /* enable goodies for regular Windows */ +#endif + + +#if defined(LUA_USE_WINDOWS) +#define LUA_DL_DLL /* enable support for DLL */ +#define LUA_USE_C89 /* broadly, Windows is C89 */ +#endif + + +#if defined(LUA_USE_LINUX) +#define LUA_USE_POSIX +#define LUA_USE_DLOPEN /* needs an extra library: -ldl */ +#define LUA_USE_READLINE /* needs some extra libraries */ +#endif + + +#if defined(LUA_USE_MACOSX) +#define LUA_USE_POSIX +#define LUA_USE_DLOPEN /* MacOS does not need -ldl */ +#define LUA_USE_READLINE /* needs an extra library: -lreadline */ +#endif + + +/* +@@ LUA_C89_NUMBERS ensures that Lua uses the largest types available for +** C89 ('long' and 'double'); Windows always has '__int64', so it does +** not need to use this case. +*/ +#if defined(LUA_USE_C89) && !defined(LUA_USE_WINDOWS) +#define LUA_C89_NUMBERS +#endif + + + +/* +@@ LUAI_BITSINT defines the (minimum) number of bits in an 'int'. +*/ +/* avoid undefined shifts */ +#if ((INT_MAX >> 15) >> 15) >= 1 +#define LUAI_BITSINT 32 +#else +/* 'int' always must have at least 16 bits */ +#define LUAI_BITSINT 16 +#endif + + +/* +@@ LUA_INT_TYPE defines the type for Lua integers. +@@ LUA_FLOAT_TYPE defines the type for Lua floats. +** Lua should work fine with any mix of these options (if supported +** by your C compiler). The usual configurations are 64-bit integers +** and 'double' (the default), 32-bit integers and 'float' (for +** restricted platforms), and 'long'/'double' (for C compilers not +** compliant with C99, which may not have support for 'long long'). +*/ + +/* predefined options for LUA_INT_TYPE */ +#define LUA_INT_INT 1 +#define LUA_INT_LONG 2 +#define LUA_INT_LONGLONG 3 + +/* predefined options for LUA_FLOAT_TYPE */ +#define LUA_FLOAT_FLOAT 1 +#define LUA_FLOAT_DOUBLE 2 +#define LUA_FLOAT_LONGDOUBLE 3 + +#if defined(LUA_32BITS) /* { */ +/* +** 32-bit integers and 'float' +*/ +#if LUAI_BITSINT >= 32 /* use 'int' if big enough */ +#define LUA_INT_TYPE LUA_INT_INT +#else /* otherwise use 'long' */ +#define LUA_INT_TYPE LUA_INT_LONG +#endif +#define LUA_FLOAT_TYPE LUA_FLOAT_FLOAT + +#elif defined(LUA_C89_NUMBERS) /* }{ */ +/* +** largest types available for C89 ('long' and 'double') +*/ +#define LUA_INT_TYPE LUA_INT_LONG +#define LUA_FLOAT_TYPE LUA_FLOAT_DOUBLE + +#endif /* } */ + + +/* +** default configuration for 64-bit Lua ('long long' and 'double') +*/ +#if !defined(LUA_INT_TYPE) +#define LUA_INT_TYPE LUA_INT_LONGLONG +#endif + +#if !defined(LUA_FLOAT_TYPE) +#define LUA_FLOAT_TYPE LUA_FLOAT_DOUBLE +#endif + +/* }================================================================== */ + + + + +/* +** {================================================================== +** Configuration for Paths. +** =================================================================== +*/ + +/* +** LUA_PATH_SEP is the character that separates templates in a path. +** LUA_PATH_MARK is the string that marks the substitution points in a +** template. +** LUA_EXEC_DIR in a Windows path is replaced by the executable's +** directory. +*/ +#define LUA_PATH_SEP ";" +#define LUA_PATH_MARK "?" +#define LUA_EXEC_DIR "!" + + +/* +@@ LUA_PATH_DEFAULT is the default path that Lua uses to look for +** Lua libraries. +@@ LUA_CPATH_DEFAULT is the default path that Lua uses to look for +** C libraries. +** CHANGE them if your machine has a non-conventional directory +** hierarchy or if you want to install your libraries in +** non-conventional directories. +*/ +#define LUA_VDIR LUA_VERSION_MAJOR "." LUA_VERSION_MINOR +#if defined(_WIN32) /* { */ +/* +** In Windows, any exclamation mark ('!') in the path is replaced by the +** path of the directory of the executable file of the current process. +*/ +#define LUA_LDIR "!\\lua\\" +#define LUA_CDIR "!\\" +#define LUA_SHRDIR "!\\..\\share\\lua\\" LUA_VDIR "\\" +#define LUA_PATH_DEFAULT \ + LUA_LDIR"?.lua;" LUA_LDIR"?\\init.lua;" \ + LUA_CDIR"?.lua;" LUA_CDIR"?\\init.lua;" \ + LUA_SHRDIR"?.lua;" LUA_SHRDIR"?\\init.lua;" \ + ".\\?.lua;" ".\\?\\init.lua" +#define LUA_CPATH_DEFAULT \ + LUA_CDIR"?.dll;" \ + LUA_CDIR"..\\lib\\lua\\" LUA_VDIR "\\?.dll;" \ + LUA_CDIR"loadall.dll;" ".\\?.dll" + +#else /* }{ */ + +#define LUA_ROOT "/usr/local/" +#define LUA_LDIR LUA_ROOT "share/lua/" LUA_VDIR "/" +#define LUA_CDIR LUA_ROOT "lib/lua/" LUA_VDIR "/" +#define LUA_PATH_DEFAULT \ + LUA_LDIR"?.lua;" LUA_LDIR"?/init.lua;" \ + LUA_CDIR"?.lua;" LUA_CDIR"?/init.lua;" \ + "./?.lua;" "./?/init.lua" +#define LUA_CPATH_DEFAULT \ + LUA_CDIR"?.so;" LUA_CDIR"loadall.so;" "./?.so" +#endif /* } */ + + +/* +@@ LUA_DIRSEP is the directory separator (for submodules). +** CHANGE it if your machine does not use "/" as the directory separator +** and is not Windows. (On Windows Lua automatically uses "\".) +*/ +#if defined(_WIN32) +#define LUA_DIRSEP "\\" +#else +#define LUA_DIRSEP "/" +#endif + +/* }================================================================== */ + + +/* +** {================================================================== +** Marks for exported symbols in the C code +** =================================================================== +*/ + +/* +@@ LUA_API is a mark for all core API functions. +@@ LUALIB_API is a mark for all auxiliary library functions. +@@ LUAMOD_API is a mark for all standard library opening functions. +** CHANGE them if you need to define those functions in some special way. +** For instance, if you want to create one Windows DLL with the core and +** the libraries, you may want to use the following definition (define +** LUA_BUILD_AS_DLL to get it). +*/ +#if defined(LUA_BUILD_AS_DLL) /* { */ + +#if defined(LUA_CORE) || defined(LUA_LIB) /* { */ +#define LUA_API __declspec(dllexport) +#else /* }{ */ +#define LUA_API __declspec(dllimport) +#endif /* } */ + +#else /* }{ */ + +#define LUA_API extern + +#endif /* } */ + + +/* more often than not the libs go together with the core */ +#define LUALIB_API LUA_API +#define LUAMOD_API LUALIB_API + + +/* +@@ LUAI_FUNC is a mark for all extern functions that are not to be +** exported to outside modules. +@@ LUAI_DDEF and LUAI_DDEC are marks for all extern (const) variables +** that are not to be exported to outside modules (LUAI_DDEF for +** definitions and LUAI_DDEC for declarations). +** CHANGE them if you need to mark them in some special way. Elf/gcc +** (versions 3.2 and later) mark them as "hidden" to optimize access +** when Lua is compiled as a shared library. Not all elf targets support +** this attribute. Unfortunately, gcc does not offer a way to check +** whether the target offers that support, and those without support +** give a warning about it. To avoid these warnings, change to the +** default definition. +*/ +#if defined(__GNUC__) && ((__GNUC__*100 + __GNUC_MINOR__) >= 302) && \ + defined(__ELF__) /* { */ +#define LUAI_FUNC __attribute__((visibility("hidden"))) extern +#else /* }{ */ +#define LUAI_FUNC extern +#endif /* } */ + +#define LUAI_DDEC LUAI_FUNC +#define LUAI_DDEF /* empty */ + +/* }================================================================== */ + + +/* +** {================================================================== +** Compatibility with previous versions +** =================================================================== +*/ + +/* +@@ LUA_COMPAT_5_2 controls other macros for compatibility with Lua 5.2. +@@ LUA_COMPAT_5_1 controls other macros for compatibility with Lua 5.1. +** You can define it to get all options, or change specific options +** to fit your specific needs. +*/ +#if defined(LUA_COMPAT_5_2) /* { */ + +/* +@@ LUA_COMPAT_MATHLIB controls the presence of several deprecated +** functions in the mathematical library. +*/ +#define LUA_COMPAT_MATHLIB + +/* +@@ LUA_COMPAT_BITLIB controls the presence of library 'bit32'. +*/ +#define LUA_COMPAT_BITLIB + +/* +@@ LUA_COMPAT_IPAIRS controls the effectiveness of the __ipairs metamethod. +*/ +#define LUA_COMPAT_IPAIRS + +/* +@@ LUA_COMPAT_APIINTCASTS controls the presence of macros for +** manipulating other integer types (lua_pushunsigned, lua_tounsigned, +** luaL_checkint, luaL_checklong, etc.) +*/ +#define LUA_COMPAT_APIINTCASTS + +#endif /* } */ + + +#if defined(LUA_COMPAT_5_1) /* { */ + +/* Incompatibilities from 5.2 -> 5.3 */ +#define LUA_COMPAT_MATHLIB +#define LUA_COMPAT_APIINTCASTS + +/* +@@ LUA_COMPAT_UNPACK controls the presence of global 'unpack'. +** You can replace it with 'table.unpack'. +*/ +#define LUA_COMPAT_UNPACK + +/* +@@ LUA_COMPAT_LOADERS controls the presence of table 'package.loaders'. +** You can replace it with 'package.searchers'. +*/ +#define LUA_COMPAT_LOADERS + +/* +@@ macro 'lua_cpcall' emulates deprecated function lua_cpcall. +** You can call your C function directly (with light C functions). +*/ +#define lua_cpcall(L,f,u) \ + (lua_pushcfunction(L, (f)), \ + lua_pushlightuserdata(L,(u)), \ + lua_pcall(L,1,0,0)) + + +/* +@@ LUA_COMPAT_LOG10 defines the function 'log10' in the math library. +** You can rewrite 'log10(x)' as 'log(x, 10)'. +*/ +#define LUA_COMPAT_LOG10 + +/* +@@ LUA_COMPAT_LOADSTRING defines the function 'loadstring' in the base +** library. You can rewrite 'loadstring(s)' as 'load(s)'. +*/ +#define LUA_COMPAT_LOADSTRING + +/* +@@ LUA_COMPAT_MAXN defines the function 'maxn' in the table library. +*/ +#define LUA_COMPAT_MAXN + +/* +@@ The following macros supply trivial compatibility for some +** changes in the API. The macros themselves document how to +** change your code to avoid using them. +*/ +#define lua_strlen(L,i) lua_rawlen(L, (i)) + +#define lua_objlen(L,i) lua_rawlen(L, (i)) + +#define lua_equal(L,idx1,idx2) lua_compare(L,(idx1),(idx2),LUA_OPEQ) +#define lua_lessthan(L,idx1,idx2) lua_compare(L,(idx1),(idx2),LUA_OPLT) + +/* +@@ LUA_COMPAT_MODULE controls compatibility with previous +** module functions 'module' (Lua) and 'luaL_register' (C). +*/ +#define LUA_COMPAT_MODULE + +#endif /* } */ + + +/* +@@ LUA_COMPAT_FLOATSTRING makes Lua format integral floats without a +@@ a float mark ('.0'). +** This macro is not on by default even in compatibility mode, +** because this is not really an incompatibility. +*/ +/* #define LUA_COMPAT_FLOATSTRING */ + +/* }================================================================== */ + + + +/* +** {================================================================== +** Configuration for Numbers. +** Change these definitions if no predefined LUA_FLOAT_* / LUA_INT_* +** satisfy your needs. +** =================================================================== +*/ + +/* +@@ LUA_NUMBER is the floating-point type used by Lua. +@@ LUAI_UACNUMBER is the result of a 'default argument promotion' +@@ over a floating number. +@@ l_mathlim(x) corrects limit name 'x' to the proper float type +** by prefixing it with one of FLT/DBL/LDBL. +@@ LUA_NUMBER_FRMLEN is the length modifier for writing floats. +@@ LUA_NUMBER_FMT is the format for writing floats. +@@ lua_number2str converts a float to a string. +@@ l_mathop allows the addition of an 'l' or 'f' to all math operations. +@@ l_floor takes the floor of a float. +@@ lua_str2number converts a decimal numeric string to a number. +*/ + + +/* The following definitions are good for most cases here */ + +#define l_floor(x) (l_mathop(floor)(x)) + +#define lua_number2str(s,sz,n) \ + l_sprintf((s), sz, LUA_NUMBER_FMT, (LUAI_UACNUMBER)(n)) + +/* +@@ lua_numbertointeger converts a float number to an integer, or +** returns 0 if float is not within the range of a lua_Integer. +** (The range comparisons are tricky because of rounding. The tests +** here assume a two-complement representation, where MININTEGER always +** has an exact representation as a float; MAXINTEGER may not have one, +** and therefore its conversion to float may have an ill-defined value.) +*/ +#define lua_numbertointeger(n,p) \ + ((n) >= (LUA_NUMBER)(LUA_MININTEGER) && \ + (n) < -(LUA_NUMBER)(LUA_MININTEGER) && \ + (*(p) = (LUA_INTEGER)(n), 1)) + + +/* now the variable definitions */ + +#if LUA_FLOAT_TYPE == LUA_FLOAT_FLOAT /* { single float */ + +#define LUA_NUMBER float + +#define l_mathlim(n) (FLT_##n) + +#define LUAI_UACNUMBER double + +#define LUA_NUMBER_FRMLEN "" +#define LUA_NUMBER_FMT "%.7g" + +#define l_mathop(op) op##f + +#define lua_str2number(s,p) strtof((s), (p)) + + +#elif LUA_FLOAT_TYPE == LUA_FLOAT_LONGDOUBLE /* }{ long double */ + +#define LUA_NUMBER long double + +#define l_mathlim(n) (LDBL_##n) + +#define LUAI_UACNUMBER long double + +#define LUA_NUMBER_FRMLEN "L" +#define LUA_NUMBER_FMT "%.19Lg" + +#define l_mathop(op) op##l + +#define lua_str2number(s,p) strtold((s), (p)) + +#elif LUA_FLOAT_TYPE == LUA_FLOAT_DOUBLE /* }{ double */ + +#define LUA_NUMBER double + +#define l_mathlim(n) (DBL_##n) + +#define LUAI_UACNUMBER double + +#define LUA_NUMBER_FRMLEN "" +#define LUA_NUMBER_FMT "%.14g" + +#define l_mathop(op) op + +#define lua_str2number(s,p) strtod((s), (p)) + +#else /* }{ */ + +#error "numeric float type not defined" + +#endif /* } */ + + + +/* +@@ LUA_INTEGER is the integer type used by Lua. +** +@@ LUA_UNSIGNED is the unsigned version of LUA_INTEGER. +** +@@ LUAI_UACINT is the result of a 'default argument promotion' +@@ over a lUA_INTEGER. +@@ LUA_INTEGER_FRMLEN is the length modifier for reading/writing integers. +@@ LUA_INTEGER_FMT is the format for writing integers. +@@ LUA_MAXINTEGER is the maximum value for a LUA_INTEGER. +@@ LUA_MININTEGER is the minimum value for a LUA_INTEGER. +@@ lua_integer2str converts an integer to a string. +*/ + + +/* The following definitions are good for most cases here */ + +#define LUA_INTEGER_FMT "%" LUA_INTEGER_FRMLEN "d" + +#define LUAI_UACINT LUA_INTEGER + +#define lua_integer2str(s,sz,n) \ + l_sprintf((s), sz, LUA_INTEGER_FMT, (LUAI_UACINT)(n)) + +/* +** use LUAI_UACINT here to avoid problems with promotions (which +** can turn a comparison between unsigneds into a signed comparison) +*/ +#define LUA_UNSIGNED unsigned LUAI_UACINT + + +/* now the variable definitions */ + +#if LUA_INT_TYPE == LUA_INT_INT /* { int */ + +#define LUA_INTEGER int +#define LUA_INTEGER_FRMLEN "" + +#define LUA_MAXINTEGER INT_MAX +#define LUA_MININTEGER INT_MIN + +#elif LUA_INT_TYPE == LUA_INT_LONG /* }{ long */ + +#define LUA_INTEGER long +#define LUA_INTEGER_FRMLEN "l" + +#define LUA_MAXINTEGER LONG_MAX +#define LUA_MININTEGER LONG_MIN + +#elif LUA_INT_TYPE == LUA_INT_LONGLONG /* }{ long long */ + +/* use presence of macro LLONG_MAX as proxy for C99 compliance */ +#if defined(LLONG_MAX) /* { */ +/* use ISO C99 stuff */ + +#define LUA_INTEGER long long +#define LUA_INTEGER_FRMLEN "ll" + +#define LUA_MAXINTEGER LLONG_MAX +#define LUA_MININTEGER LLONG_MIN + +#elif defined(LUA_USE_WINDOWS) /* }{ */ +/* in Windows, can use specific Windows types */ + +#define LUA_INTEGER __int64 +#define LUA_INTEGER_FRMLEN "I64" + +#define LUA_MAXINTEGER _I64_MAX +#define LUA_MININTEGER _I64_MIN + +#else /* }{ */ + +#error "Compiler does not support 'long long'. Use option '-DLUA_32BITS' \ + or '-DLUA_C89_NUMBERS' (see file 'luaconf.h' for details)" + +#endif /* } */ + +#else /* }{ */ + +#error "numeric integer type not defined" + +#endif /* } */ + +/* }================================================================== */ + + +/* +** {================================================================== +** Dependencies with C99 and other C details +** =================================================================== +*/ + +/* +@@ l_sprintf is equivalent to 'snprintf' or 'sprintf' in C89. +** (All uses in Lua have only one format item.) +*/ +#if !defined(LUA_USE_C89) +#define l_sprintf(s,sz,f,i) snprintf(s,sz,f,i) +#else +#define l_sprintf(s,sz,f,i) ((void)(sz), sprintf(s,f,i)) +#endif + + +/* +@@ lua_strx2number converts an hexadecimal numeric string to a number. +** In C99, 'strtod' does that conversion. Otherwise, you can +** leave 'lua_strx2number' undefined and Lua will provide its own +** implementation. +*/ +#if !defined(LUA_USE_C89) +#define lua_strx2number(s,p) lua_str2number(s,p) +#endif + + +/* +@@ lua_number2strx converts a float to an hexadecimal numeric string. +** In C99, 'sprintf' (with format specifiers '%a'/'%A') does that. +** Otherwise, you can leave 'lua_number2strx' undefined and Lua will +** provide its own implementation. +*/ +#if !defined(LUA_USE_C89) +#define lua_number2strx(L,b,sz,f,n) \ + ((void)L, l_sprintf(b,sz,f,(LUAI_UACNUMBER)(n))) +#endif + + +/* +** 'strtof' and 'opf' variants for math functions are not valid in +** C89. Otherwise, the macro 'HUGE_VALF' is a good proxy for testing the +** availability of these variants. ('math.h' is already included in +** all files that use these macros.) +*/ +#if defined(LUA_USE_C89) || (defined(HUGE_VAL) && !defined(HUGE_VALF)) +#undef l_mathop /* variants not available */ +#undef lua_str2number +#define l_mathop(op) (lua_Number)op /* no variant */ +#define lua_str2number(s,p) ((lua_Number)strtod((s), (p))) +#endif + + +/* +@@ LUA_KCONTEXT is the type of the context ('ctx') for continuation +** functions. It must be a numerical type; Lua will use 'intptr_t' if +** available, otherwise it will use 'ptrdiff_t' (the nearest thing to +** 'intptr_t' in C89) +*/ +#define LUA_KCONTEXT ptrdiff_t + +#if !defined(LUA_USE_C89) && defined(__STDC_VERSION__) && \ + __STDC_VERSION__ >= 199901L +#include +#if defined(INTPTR_MAX) /* even in C99 this type is optional */ +#undef LUA_KCONTEXT +#define LUA_KCONTEXT intptr_t +#endif +#endif + + +/* +@@ lua_getlocaledecpoint gets the locale "radix character" (decimal point). +** Change that if you do not want to use C locales. (Code using this +** macro must include header 'locale.h'.) +*/ +#if !defined(lua_getlocaledecpoint) +#define lua_getlocaledecpoint() (localeconv()->decimal_point[0]) +#endif + +/* }================================================================== */ + + +/* +** {================================================================== +** Language Variations +** ===================================================================== +*/ + +/* +@@ LUA_NOCVTN2S/LUA_NOCVTS2N control how Lua performs some +** coercions. Define LUA_NOCVTN2S to turn off automatic coercion from +** numbers to strings. Define LUA_NOCVTS2N to turn off automatic +** coercion from strings to numbers. +*/ +/* #define LUA_NOCVTN2S */ +/* #define LUA_NOCVTS2N */ + + +/* +@@ LUA_USE_APICHECK turns on several consistency checks on the C API. +** Define it as a help when debugging C code. +*/ +#if defined(LUA_USE_APICHECK) +#include +#define luai_apicheck(l,e) assert(e) +#endif + +/* }================================================================== */ + + +/* +** {================================================================== +** Macros that affect the API and must be stable (that is, must be the +** same when you compile Lua and when you compile code that links to +** Lua). You probably do not want/need to change them. +** ===================================================================== +*/ + +/* +@@ LUAI_MAXSTACK limits the size of the Lua stack. +** CHANGE it if you need a different limit. This limit is arbitrary; +** its only purpose is to stop Lua from consuming unlimited stack +** space (and to reserve some numbers for pseudo-indices). +*/ +#if LUAI_BITSINT >= 32 +#define LUAI_MAXSTACK 1000000 +#else +#define LUAI_MAXSTACK 15000 +#endif + + +/* +@@ LUA_EXTRASPACE defines the size of a raw memory area associated with +** a Lua state with very fast access. +** CHANGE it if you need a different size. +*/ +#define LUA_EXTRASPACE (sizeof(void *)) + + +/* +@@ LUA_IDSIZE gives the maximum size for the description of the source +@@ of a function in debug information. +** CHANGE it if you want a different size. +*/ +#define LUA_IDSIZE 60 + + +/* +@@ LUAL_BUFFERSIZE is the buffer size used by the lauxlib buffer system. +** CHANGE it if it uses too much C-stack space. (For long double, +** 'string.format("%.99f", -1e4932)' needs 5034 bytes, so a +** smaller buffer would force a memory allocation for each call to +** 'string.format'.) +*/ +#if LUA_FLOAT_TYPE == LUA_FLOAT_LONGDOUBLE +#define LUAL_BUFFERSIZE 8192 +#else +#define LUAL_BUFFERSIZE ((int)(0x80 * sizeof(void*) * sizeof(lua_Integer))) +#endif + +/* }================================================================== */ + + +/* +@@ LUA_QL describes how error messages quote program elements. +** Lua does not use these macros anymore; they are here for +** compatibility only. +*/ +#define LUA_QL(x) "'" x "'" +#define LUA_QS LUA_QL("%s") + + + + +/* =================================================================== */ + +/* +** Local configuration. You can use this space to add your redefinitions +** without modifying the main part of the file. +*/ + + + + + +#endif + diff --git a/EQ2/source/LUA/lualib.h b/EQ2/source/LUA/lualib.h new file mode 100644 index 000000000..6c0bc4cb0 --- /dev/null +++ b/EQ2/source/LUA/lualib.h @@ -0,0 +1,61 @@ +/* +** $Id: lualib.h,v 1.45 2017/01/12 17:14:26 roberto Exp $ +** Lua standard libraries +** See Copyright Notice in lua.h +*/ + + +#ifndef lualib_h +#define lualib_h + +#include "lua.h" + + +/* version suffix for environment variable names */ +#define LUA_VERSUFFIX "_" LUA_VERSION_MAJOR "_" LUA_VERSION_MINOR + + +LUAMOD_API int (luaopen_base) (lua_State *L); + +#define LUA_COLIBNAME "coroutine" +LUAMOD_API int (luaopen_coroutine) (lua_State *L); + +#define LUA_TABLIBNAME "table" +LUAMOD_API int (luaopen_table) (lua_State *L); + +#define LUA_IOLIBNAME "io" +LUAMOD_API int (luaopen_io) (lua_State *L); + +#define LUA_OSLIBNAME "os" +LUAMOD_API int (luaopen_os) (lua_State *L); + +#define LUA_STRLIBNAME "string" +LUAMOD_API int (luaopen_string) (lua_State *L); + +#define LUA_UTF8LIBNAME "utf8" +LUAMOD_API int (luaopen_utf8) (lua_State *L); + +#define LUA_BITLIBNAME "bit32" +LUAMOD_API int (luaopen_bit32) (lua_State *L); + +#define LUA_MATHLIBNAME "math" +LUAMOD_API int (luaopen_math) (lua_State *L); + +#define LUA_DBLIBNAME "debug" +LUAMOD_API int (luaopen_debug) (lua_State *L); + +#define LUA_LOADLIBNAME "package" +LUAMOD_API int (luaopen_package) (lua_State *L); + + +/* open all previous libraries */ +LUALIB_API void (luaL_openlibs) (lua_State *L); + + + +#if !defined(lua_assert) +#define lua_assert(x) ((void)0) +#endif + + +#endif diff --git a/EQ2/source/LUA/lundump.c b/EQ2/source/LUA/lundump.c new file mode 100644 index 000000000..4080af9c0 --- /dev/null +++ b/EQ2/source/LUA/lundump.c @@ -0,0 +1,279 @@ +/* +** $Id: lundump.c,v 2.44 2015/11/02 16:09:30 roberto Exp $ +** load precompiled Lua chunks +** See Copyright Notice in lua.h +*/ + +#define lundump_c +#define LUA_CORE + +#include "lprefix.h" + + +#include + +#include "lua.h" + +#include "ldebug.h" +#include "ldo.h" +#include "lfunc.h" +#include "lmem.h" +#include "lobject.h" +#include "lstring.h" +#include "lundump.h" +#include "lzio.h" + + +#if !defined(luai_verifycode) +#define luai_verifycode(L,b,f) /* empty */ +#endif + + +typedef struct { + lua_State *L; + ZIO *Z; + const char *name; +} LoadState; + + +static l_noret error(LoadState *S, const char *why) { + luaO_pushfstring(S->L, "%s: %s precompiled chunk", S->name, why); + luaD_throw(S->L, LUA_ERRSYNTAX); +} + + +/* +** All high-level loads go through LoadVector; you can change it to +** adapt to the endianness of the input +*/ +#define LoadVector(S,b,n) LoadBlock(S,b,(n)*sizeof((b)[0])) + +static void LoadBlock (LoadState *S, void *b, size_t size) { + if (luaZ_read(S->Z, b, size) != 0) + error(S, "truncated"); +} + + +#define LoadVar(S,x) LoadVector(S,&x,1) + + +static lu_byte LoadByte (LoadState *S) { + lu_byte x; + LoadVar(S, x); + return x; +} + + +static int LoadInt (LoadState *S) { + int x; + LoadVar(S, x); + return x; +} + + +static lua_Number LoadNumber (LoadState *S) { + lua_Number x; + LoadVar(S, x); + return x; +} + + +static lua_Integer LoadInteger (LoadState *S) { + lua_Integer x; + LoadVar(S, x); + return x; +} + + +static TString *LoadString (LoadState *S) { + size_t size = LoadByte(S); + if (size == 0xFF) + LoadVar(S, size); + if (size == 0) + return NULL; + else if (--size <= LUAI_MAXSHORTLEN) { /* short string? */ + char buff[LUAI_MAXSHORTLEN]; + LoadVector(S, buff, size); + return luaS_newlstr(S->L, buff, size); + } + else { /* long string */ + TString *ts = luaS_createlngstrobj(S->L, size); + LoadVector(S, getstr(ts), size); /* load directly in final place */ + return ts; + } +} + + +static void LoadCode (LoadState *S, Proto *f) { + int n = LoadInt(S); + f->code = luaM_newvector(S->L, n, Instruction); + f->sizecode = n; + LoadVector(S, f->code, n); +} + + +static void LoadFunction(LoadState *S, Proto *f, TString *psource); + + +static void LoadConstants (LoadState *S, Proto *f) { + int i; + int n = LoadInt(S); + f->k = luaM_newvector(S->L, n, TValue); + f->sizek = n; + for (i = 0; i < n; i++) + setnilvalue(&f->k[i]); + for (i = 0; i < n; i++) { + TValue *o = &f->k[i]; + int t = LoadByte(S); + switch (t) { + case LUA_TNIL: + setnilvalue(o); + break; + case LUA_TBOOLEAN: + setbvalue(o, LoadByte(S)); + break; + case LUA_TNUMFLT: + setfltvalue(o, LoadNumber(S)); + break; + case LUA_TNUMINT: + setivalue(o, LoadInteger(S)); + break; + case LUA_TSHRSTR: + case LUA_TLNGSTR: + setsvalue2n(S->L, o, LoadString(S)); + break; + default: + lua_assert(0); + } + } +} + + +static void LoadProtos (LoadState *S, Proto *f) { + int i; + int n = LoadInt(S); + f->p = luaM_newvector(S->L, n, Proto *); + f->sizep = n; + for (i = 0; i < n; i++) + f->p[i] = NULL; + for (i = 0; i < n; i++) { + f->p[i] = luaF_newproto(S->L); + LoadFunction(S, f->p[i], f->source); + } +} + + +static void LoadUpvalues (LoadState *S, Proto *f) { + int i, n; + n = LoadInt(S); + f->upvalues = luaM_newvector(S->L, n, Upvaldesc); + f->sizeupvalues = n; + for (i = 0; i < n; i++) + f->upvalues[i].name = NULL; + for (i = 0; i < n; i++) { + f->upvalues[i].instack = LoadByte(S); + f->upvalues[i].idx = LoadByte(S); + } +} + + +static void LoadDebug (LoadState *S, Proto *f) { + int i, n; + n = LoadInt(S); + f->lineinfo = luaM_newvector(S->L, n, int); + f->sizelineinfo = n; + LoadVector(S, f->lineinfo, n); + n = LoadInt(S); + f->locvars = luaM_newvector(S->L, n, LocVar); + f->sizelocvars = n; + for (i = 0; i < n; i++) + f->locvars[i].varname = NULL; + for (i = 0; i < n; i++) { + f->locvars[i].varname = LoadString(S); + f->locvars[i].startpc = LoadInt(S); + f->locvars[i].endpc = LoadInt(S); + } + n = LoadInt(S); + for (i = 0; i < n; i++) + f->upvalues[i].name = LoadString(S); +} + + +static void LoadFunction (LoadState *S, Proto *f, TString *psource) { + f->source = LoadString(S); + if (f->source == NULL) /* no source in dump? */ + f->source = psource; /* reuse parent's source */ + f->linedefined = LoadInt(S); + f->lastlinedefined = LoadInt(S); + f->numparams = LoadByte(S); + f->is_vararg = LoadByte(S); + f->maxstacksize = LoadByte(S); + LoadCode(S, f); + LoadConstants(S, f); + LoadUpvalues(S, f); + LoadProtos(S, f); + LoadDebug(S, f); +} + + +static void checkliteral (LoadState *S, const char *s, const char *msg) { + char buff[sizeof(LUA_SIGNATURE) + sizeof(LUAC_DATA)]; /* larger than both */ + size_t len = strlen(s); + LoadVector(S, buff, len); + if (memcmp(s, buff, len) != 0) + error(S, msg); +} + + +static void fchecksize (LoadState *S, size_t size, const char *tname) { + if (LoadByte(S) != size) + error(S, luaO_pushfstring(S->L, "%s size mismatch in", tname)); +} + + +#define checksize(S,t) fchecksize(S,sizeof(t),#t) + +static void checkHeader (LoadState *S) { + checkliteral(S, LUA_SIGNATURE + 1, "not a"); /* 1st char already checked */ + if (LoadByte(S) != LUAC_VERSION) + error(S, "version mismatch in"); + if (LoadByte(S) != LUAC_FORMAT) + error(S, "format mismatch in"); + checkliteral(S, LUAC_DATA, "corrupted"); + checksize(S, int); + checksize(S, size_t); + checksize(S, Instruction); + checksize(S, lua_Integer); + checksize(S, lua_Number); + if (LoadInteger(S) != LUAC_INT) + error(S, "endianness mismatch in"); + if (LoadNumber(S) != LUAC_NUM) + error(S, "float format mismatch in"); +} + + +/* +** load precompiled chunk +*/ +LClosure *luaU_undump(lua_State *L, ZIO *Z, const char *name) { + LoadState S; + LClosure *cl; + if (*name == '@' || *name == '=') + S.name = name + 1; + else if (*name == LUA_SIGNATURE[0]) + S.name = "binary string"; + else + S.name = name; + S.L = L; + S.Z = Z; + checkHeader(&S); + cl = luaF_newLclosure(L, LoadByte(&S)); + setclLvalue(L, L->top, cl); + luaD_inctop(L); + cl->p = luaF_newproto(L); + LoadFunction(&S, cl->p, NULL); + lua_assert(cl->nupvalues == cl->p->sizeupvalues); + luai_verifycode(L, buff, cl->p); + return cl; +} + diff --git a/EQ2/source/LUA/lundump.h b/EQ2/source/LUA/lundump.h new file mode 100644 index 000000000..aa5cc82f1 --- /dev/null +++ b/EQ2/source/LUA/lundump.h @@ -0,0 +1,32 @@ +/* +** $Id: lundump.h,v 1.45 2015/09/08 15:41:05 roberto Exp $ +** load precompiled Lua chunks +** See Copyright Notice in lua.h +*/ + +#ifndef lundump_h +#define lundump_h + +#include "llimits.h" +#include "lobject.h" +#include "lzio.h" + + +/* data to catch conversion errors */ +#define LUAC_DATA "\x19\x93\r\n\x1a\n" + +#define LUAC_INT 0x5678 +#define LUAC_NUM cast_num(370.5) + +#define MYINT(s) (s[0]-'0') +#define LUAC_VERSION (MYINT(LUA_VERSION_MAJOR)*16+MYINT(LUA_VERSION_MINOR)) +#define LUAC_FORMAT 0 /* this is the official format */ + +/* load one chunk; from lundump.c */ +LUAI_FUNC LClosure* luaU_undump (lua_State* L, ZIO* Z, const char* name); + +/* dump one chunk; from ldump.c */ +LUAI_FUNC int luaU_dump (lua_State* L, const Proto* f, lua_Writer w, + void* data, int strip); + +#endif diff --git a/EQ2/source/LUA/lutf8lib.c b/EQ2/source/LUA/lutf8lib.c new file mode 100644 index 000000000..de9e3dcdd --- /dev/null +++ b/EQ2/source/LUA/lutf8lib.c @@ -0,0 +1,256 @@ +/* +** $Id: lutf8lib.c,v 1.16 2016/12/22 13:08:50 roberto Exp $ +** Standard library for UTF-8 manipulation +** See Copyright Notice in lua.h +*/ + +#define lutf8lib_c +#define LUA_LIB + +#include "lprefix.h" + + +#include +#include +#include +#include + +#include "lua.h" + +#include "lauxlib.h" +#include "lualib.h" + +#define MAXUNICODE 0x10FFFF + +#define iscont(p) ((*(p) & 0xC0) == 0x80) + + +/* from strlib */ +/* translate a relative string position: negative means back from end */ +static lua_Integer u_posrelat (lua_Integer pos, size_t len) { + if (pos >= 0) return pos; + else if (0u - (size_t)pos > len) return 0; + else return (lua_Integer)len + pos + 1; +} + + +/* +** Decode one UTF-8 sequence, returning NULL if byte sequence is invalid. +*/ +static const char *utf8_decode (const char *o, int *val) { + static const unsigned int limits[] = {0xFF, 0x7F, 0x7FF, 0xFFFF}; + const unsigned char *s = (const unsigned char *)o; + unsigned int c = s[0]; + unsigned int res = 0; /* final result */ + if (c < 0x80) /* ascii? */ + res = c; + else { + int count = 0; /* to count number of continuation bytes */ + while (c & 0x40) { /* still have continuation bytes? */ + int cc = s[++count]; /* read next byte */ + if ((cc & 0xC0) != 0x80) /* not a continuation byte? */ + return NULL; /* invalid byte sequence */ + res = (res << 6) | (cc & 0x3F); /* add lower 6 bits from cont. byte */ + c <<= 1; /* to test next bit */ + } + res |= ((c & 0x7F) << (count * 5)); /* add first byte */ + if (count > 3 || res > MAXUNICODE || res <= limits[count]) + return NULL; /* invalid byte sequence */ + s += count; /* skip continuation bytes read */ + } + if (val) *val = res; + return (const char *)s + 1; /* +1 to include first byte */ +} + + +/* +** utf8len(s [, i [, j]]) --> number of characters that start in the +** range [i,j], or nil + current position if 's' is not well formed in +** that interval +*/ +static int utflen (lua_State *L) { + int n = 0; + size_t len; + const char *s = luaL_checklstring(L, 1, &len); + lua_Integer posi = u_posrelat(luaL_optinteger(L, 2, 1), len); + lua_Integer posj = u_posrelat(luaL_optinteger(L, 3, -1), len); + luaL_argcheck(L, 1 <= posi && --posi <= (lua_Integer)len, 2, + "initial position out of string"); + luaL_argcheck(L, --posj < (lua_Integer)len, 3, + "final position out of string"); + while (posi <= posj) { + const char *s1 = utf8_decode(s + posi, NULL); + if (s1 == NULL) { /* conversion error? */ + lua_pushnil(L); /* return nil ... */ + lua_pushinteger(L, posi + 1); /* ... and current position */ + return 2; + } + posi = s1 - s; + n++; + } + lua_pushinteger(L, n); + return 1; +} + + +/* +** codepoint(s, [i, [j]]) -> returns codepoints for all characters +** that start in the range [i,j] +*/ +static int codepoint (lua_State *L) { + size_t len; + const char *s = luaL_checklstring(L, 1, &len); + lua_Integer posi = u_posrelat(luaL_optinteger(L, 2, 1), len); + lua_Integer pose = u_posrelat(luaL_optinteger(L, 3, posi), len); + int n; + const char *se; + luaL_argcheck(L, posi >= 1, 2, "out of range"); + luaL_argcheck(L, pose <= (lua_Integer)len, 3, "out of range"); + if (posi > pose) return 0; /* empty interval; return no values */ + if (pose - posi >= INT_MAX) /* (lua_Integer -> int) overflow? */ + return luaL_error(L, "string slice too long"); + n = (int)(pose - posi) + 1; + luaL_checkstack(L, n, "string slice too long"); + n = 0; + se = s + pose; + for (s += posi - 1; s < se;) { + int code; + s = utf8_decode(s, &code); + if (s == NULL) + return luaL_error(L, "invalid UTF-8 code"); + lua_pushinteger(L, code); + n++; + } + return n; +} + + +static void pushutfchar (lua_State *L, int arg) { + lua_Integer code = luaL_checkinteger(L, arg); + luaL_argcheck(L, 0 <= code && code <= MAXUNICODE, arg, "value out of range"); + lua_pushfstring(L, "%U", (long)code); +} + + +/* +** utfchar(n1, n2, ...) -> char(n1)..char(n2)... +*/ +static int utfchar (lua_State *L) { + int n = lua_gettop(L); /* number of arguments */ + if (n == 1) /* optimize common case of single char */ + pushutfchar(L, 1); + else { + int i; + luaL_Buffer b; + luaL_buffinit(L, &b); + for (i = 1; i <= n; i++) { + pushutfchar(L, i); + luaL_addvalue(&b); + } + luaL_pushresult(&b); + } + return 1; +} + + +/* +** offset(s, n, [i]) -> index where n-th character counting from +** position 'i' starts; 0 means character at 'i'. +*/ +static int byteoffset (lua_State *L) { + size_t len; + const char *s = luaL_checklstring(L, 1, &len); + lua_Integer n = luaL_checkinteger(L, 2); + lua_Integer posi = (n >= 0) ? 1 : len + 1; + posi = u_posrelat(luaL_optinteger(L, 3, posi), len); + luaL_argcheck(L, 1 <= posi && --posi <= (lua_Integer)len, 3, + "position out of range"); + if (n == 0) { + /* find beginning of current byte sequence */ + while (posi > 0 && iscont(s + posi)) posi--; + } + else { + if (iscont(s + posi)) + luaL_error(L, "initial position is a continuation byte"); + if (n < 0) { + while (n < 0 && posi > 0) { /* move back */ + do { /* find beginning of previous character */ + posi--; + } while (posi > 0 && iscont(s + posi)); + n++; + } + } + else { + n--; /* do not move for 1st character */ + while (n > 0 && posi < (lua_Integer)len) { + do { /* find beginning of next character */ + posi++; + } while (iscont(s + posi)); /* (cannot pass final '\0') */ + n--; + } + } + } + if (n == 0) /* did it find given character? */ + lua_pushinteger(L, posi + 1); + else /* no such character */ + lua_pushnil(L); + return 1; +} + + +static int iter_aux (lua_State *L) { + size_t len; + const char *s = luaL_checklstring(L, 1, &len); + lua_Integer n = lua_tointeger(L, 2) - 1; + if (n < 0) /* first iteration? */ + n = 0; /* start from here */ + else if (n < (lua_Integer)len) { + n++; /* skip current byte */ + while (iscont(s + n)) n++; /* and its continuations */ + } + if (n >= (lua_Integer)len) + return 0; /* no more codepoints */ + else { + int code; + const char *next = utf8_decode(s + n, &code); + if (next == NULL || iscont(next)) + return luaL_error(L, "invalid UTF-8 code"); + lua_pushinteger(L, n + 1); + lua_pushinteger(L, code); + return 2; + } +} + + +static int iter_codes (lua_State *L) { + luaL_checkstring(L, 1); + lua_pushcfunction(L, iter_aux); + lua_pushvalue(L, 1); + lua_pushinteger(L, 0); + return 3; +} + + +/* pattern to match a single UTF-8 character */ +#define UTF8PATT "[\0-\x7F\xC2-\xF4][\x80-\xBF]*" + + +static const luaL_Reg funcs[] = { + {"offset", byteoffset}, + {"codepoint", codepoint}, + {"char", utfchar}, + {"len", utflen}, + {"codes", iter_codes}, + /* placeholders */ + {"charpattern", NULL}, + {NULL, NULL} +}; + + +LUAMOD_API int luaopen_utf8 (lua_State *L) { + luaL_newlib(L, funcs); + lua_pushlstring(L, UTF8PATT, sizeof(UTF8PATT)/sizeof(char) - 1); + lua_setfield(L, -2, "charpattern"); + return 1; +} + diff --git a/EQ2/source/LUA/lvm.c b/EQ2/source/LUA/lvm.c new file mode 100644 index 000000000..84ade6b2f --- /dev/null +++ b/EQ2/source/LUA/lvm.c @@ -0,0 +1,1322 @@ +/* +** $Id: lvm.c,v 2.268 2016/02/05 19:59:14 roberto Exp $ +** Lua virtual machine +** See Copyright Notice in lua.h +*/ + +#define lvm_c +#define LUA_CORE + +#include "lprefix.h" + +#include +#include +#include +#include +#include +#include + +#include "lua.h" + +#include "ldebug.h" +#include "ldo.h" +#include "lfunc.h" +#include "lgc.h" +#include "lobject.h" +#include "lopcodes.h" +#include "lstate.h" +#include "lstring.h" +#include "ltable.h" +#include "ltm.h" +#include "lvm.h" + + +/* limit for table tag-method chains (to avoid loops) */ +#define MAXTAGLOOP 2000 + + + +/* +** 'l_intfitsf' checks whether a given integer can be converted to a +** float without rounding. Used in comparisons. Left undefined if +** all integers fit in a float precisely. +*/ +#if !defined(l_intfitsf) + +/* number of bits in the mantissa of a float */ +#define NBM (l_mathlim(MANT_DIG)) + +/* +** Check whether some integers may not fit in a float, that is, whether +** (maxinteger >> NBM) > 0 (that implies (1 << NBM) <= maxinteger). +** (The shifts are done in parts to avoid shifting by more than the size +** of an integer. In a worst case, NBM == 113 for long double and +** sizeof(integer) == 32.) +*/ +#if ((((LUA_MAXINTEGER >> (NBM / 4)) >> (NBM / 4)) >> (NBM / 4)) \ + >> (NBM - (3 * (NBM / 4)))) > 0 + +#define l_intfitsf(i) \ + (-((lua_Integer)1 << NBM) <= (i) && (i) <= ((lua_Integer)1 << NBM)) + +#endif + +#endif + + + +/* +** Try to convert a value to a float. The float case is already handled +** by the macro 'tonumber'. +*/ +int luaV_tonumber_ (const TValue *obj, lua_Number *n) { + TValue v; + if (ttisinteger(obj)) { + *n = cast_num(ivalue(obj)); + return 1; + } + else if (cvt2num(obj) && /* string convertible to number? */ + luaO_str2num(svalue(obj), &v) == vslen(obj) + 1) { + *n = nvalue(&v); /* convert result of 'luaO_str2num' to a float */ + return 1; + } + else + return 0; /* conversion failed */ +} + + +/* +** try to convert a value to an integer, rounding according to 'mode': +** mode == 0: accepts only integral values +** mode == 1: takes the floor of the number +** mode == 2: takes the ceil of the number +*/ +int luaV_tointeger (const TValue *obj, lua_Integer *p, int mode) { + TValue v; + again: + if (ttisfloat(obj)) { + lua_Number n = fltvalue(obj); + lua_Number f = l_floor(n); + if (n != f) { /* not an integral value? */ + if (mode == 0) return 0; /* fails if mode demands integral value */ + else if (mode > 1) /* needs ceil? */ + f += 1; /* convert floor to ceil (remember: n != f) */ + } + return lua_numbertointeger(f, p); + } + else if (ttisinteger(obj)) { + *p = ivalue(obj); + return 1; + } + else if (cvt2num(obj) && + luaO_str2num(svalue(obj), &v) == vslen(obj) + 1) { + obj = &v; + goto again; /* convert result from 'luaO_str2num' to an integer */ + } + return 0; /* conversion failed */ +} + + +/* +** Try to convert a 'for' limit to an integer, preserving the +** semantics of the loop. +** (The following explanation assumes a non-negative step; it is valid +** for negative steps mutatis mutandis.) +** If the limit can be converted to an integer, rounding down, that is +** it. +** Otherwise, check whether the limit can be converted to a number. If +** the number is too large, it is OK to set the limit as LUA_MAXINTEGER, +** which means no limit. If the number is too negative, the loop +** should not run, because any initial integer value is larger than the +** limit. So, it sets the limit to LUA_MININTEGER. 'stopnow' corrects +** the extreme case when the initial value is LUA_MININTEGER, in which +** case the LUA_MININTEGER limit would still run the loop once. +*/ +static int forlimit (const TValue *obj, lua_Integer *p, lua_Integer step, + int *stopnow) { + *stopnow = 0; /* usually, let loops run */ + if (!luaV_tointeger(obj, p, (step < 0 ? 2 : 1))) { /* not fit in integer? */ + lua_Number n; /* try to convert to float */ + if (!tonumber(obj, &n)) /* cannot convert to float? */ + return 0; /* not a number */ + if (luai_numlt(0, n)) { /* if true, float is larger than max integer */ + *p = LUA_MAXINTEGER; + if (step < 0) *stopnow = 1; + } + else { /* float is smaller than min integer */ + *p = LUA_MININTEGER; + if (step >= 0) *stopnow = 1; + } + } + return 1; +} + + +/* +** Finish the table access 'val = t[key]'. +** if 'slot' is NULL, 't' is not a table; otherwise, 'slot' points to +** t[k] entry (which must be nil). +*/ +void luaV_finishget (lua_State *L, const TValue *t, TValue *key, StkId val, + const TValue *slot) { + int loop; /* counter to avoid infinite loops */ + const TValue *tm; /* metamethod */ + for (loop = 0; loop < MAXTAGLOOP; loop++) { + if (slot == NULL) { /* 't' is not a table? */ + lua_assert(!ttistable(t)); + tm = luaT_gettmbyobj(L, t, TM_INDEX); + if (ttisnil(tm)) + luaG_typeerror(L, t, "index"); /* no metamethod */ + /* else will try the metamethod */ + } + else { /* 't' is a table */ + lua_assert(ttisnil(slot)); + tm = fasttm(L, hvalue(t)->metatable, TM_INDEX); /* table's metamethod */ + if (tm == NULL) { /* no metamethod? */ + setnilvalue(val); /* result is nil */ + return; + } + /* else will try the metamethod */ + } + if (ttisfunction(tm)) { /* is metamethod a function? */ + luaT_callTM(L, tm, t, key, val, 1); /* call it */ + return; + } + t = tm; /* else try to access 'tm[key]' */ + if (luaV_fastget(L,t,key,slot,luaH_get)) { /* fast track? */ + setobj2s(L, val, slot); /* done */ + return; + } + /* else repeat (tail call 'luaV_finishget') */ + } + luaG_runerror(L, "'__index' chain too long; possible loop"); +} + + +/* +** Finish a table assignment 't[key] = val'. +** If 'slot' is NULL, 't' is not a table. Otherwise, 'slot' points +** to the entry 't[key]', or to 'luaO_nilobject' if there is no such +** entry. (The value at 'slot' must be nil, otherwise 'luaV_fastset' +** would have done the job.) +*/ +void luaV_finishset (lua_State *L, const TValue *t, TValue *key, + StkId val, const TValue *slot) { + int loop; /* counter to avoid infinite loops */ + for (loop = 0; loop < MAXTAGLOOP; loop++) { + const TValue *tm; /* '__newindex' metamethod */ + if (slot != NULL) { /* is 't' a table? */ + Table *h = hvalue(t); /* save 't' table */ + lua_assert(ttisnil(slot)); /* old value must be nil */ + tm = fasttm(L, h->metatable, TM_NEWINDEX); /* get metamethod */ + if (tm == NULL) { /* no metamethod? */ + if (slot == luaO_nilobject) /* no previous entry? */ + slot = luaH_newkey(L, h, key); /* create one */ + /* no metamethod and (now) there is an entry with given key */ + setobj2t(L, cast(TValue *, slot), val); /* set its new value */ + invalidateTMcache(h); + luaC_barrierback(L, h, val); + return; + } + /* else will try the metamethod */ + } + else { /* not a table; check metamethod */ + if (ttisnil(tm = luaT_gettmbyobj(L, t, TM_NEWINDEX))) + luaG_typeerror(L, t, "index"); + } + /* try the metamethod */ + if (ttisfunction(tm)) { + luaT_callTM(L, tm, t, key, val, 0); + return; + } + t = tm; /* else repeat assignment over 'tm' */ + if (luaV_fastset(L, t, key, slot, luaH_get, val)) + return; /* done */ + /* else loop */ + } + luaG_runerror(L, "'__newindex' chain too long; possible loop"); +} + + +/* +** Compare two strings 'ls' x 'rs', returning an integer smaller-equal- +** -larger than zero if 'ls' is smaller-equal-larger than 'rs'. +** The code is a little tricky because it allows '\0' in the strings +** and it uses 'strcoll' (to respect locales) for each segments +** of the strings. +*/ +static int l_strcmp (const TString *ls, const TString *rs) { + const char *l = getstr(ls); + size_t ll = tsslen(ls); + const char *r = getstr(rs); + size_t lr = tsslen(rs); + for (;;) { /* for each segment */ + int temp = strcoll(l, r); + if (temp != 0) /* not equal? */ + return temp; /* done */ + else { /* strings are equal up to a '\0' */ + size_t len = strlen(l); /* index of first '\0' in both strings */ + if (len == lr) /* 'rs' is finished? */ + return (len == ll) ? 0 : 1; /* check 'ls' */ + else if (len == ll) /* 'ls' is finished? */ + return -1; /* 'ls' is smaller than 'rs' ('rs' is not finished) */ + /* both strings longer than 'len'; go on comparing after the '\0' */ + len++; + l += len; ll -= len; r += len; lr -= len; + } + } +} + + +/* +** Check whether integer 'i' is less than float 'f'. If 'i' has an +** exact representation as a float ('l_intfitsf'), compare numbers as +** floats. Otherwise, if 'f' is outside the range for integers, result +** is trivial. Otherwise, compare them as integers. (When 'i' has no +** float representation, either 'f' is "far away" from 'i' or 'f' has +** no precision left for a fractional part; either way, how 'f' is +** truncated is irrelevant.) When 'f' is NaN, comparisons must result +** in false. +*/ +static int LTintfloat (lua_Integer i, lua_Number f) { +#if defined(l_intfitsf) + if (!l_intfitsf(i)) { + if (f >= -cast_num(LUA_MININTEGER)) /* -minint == maxint + 1 */ + return 1; /* f >= maxint + 1 > i */ + else if (f > cast_num(LUA_MININTEGER)) /* minint < f <= maxint ? */ + return (i < cast(lua_Integer, f)); /* compare them as integers */ + else /* f <= minint <= i (or 'f' is NaN) --> not(i < f) */ + return 0; + } +#endif + return luai_numlt(cast_num(i), f); /* compare them as floats */ +} + + +/* +** Check whether integer 'i' is less than or equal to float 'f'. +** See comments on previous function. +*/ +static int LEintfloat (lua_Integer i, lua_Number f) { +#if defined(l_intfitsf) + if (!l_intfitsf(i)) { + if (f >= -cast_num(LUA_MININTEGER)) /* -minint == maxint + 1 */ + return 1; /* f >= maxint + 1 > i */ + else if (f >= cast_num(LUA_MININTEGER)) /* minint <= f <= maxint ? */ + return (i <= cast(lua_Integer, f)); /* compare them as integers */ + else /* f < minint <= i (or 'f' is NaN) --> not(i <= f) */ + return 0; + } +#endif + return luai_numle(cast_num(i), f); /* compare them as floats */ +} + + +/* +** Return 'l < r', for numbers. +*/ +static int LTnum (const TValue *l, const TValue *r) { + if (ttisinteger(l)) { + lua_Integer li = ivalue(l); + if (ttisinteger(r)) + return li < ivalue(r); /* both are integers */ + else /* 'l' is int and 'r' is float */ + return LTintfloat(li, fltvalue(r)); /* l < r ? */ + } + else { + lua_Number lf = fltvalue(l); /* 'l' must be float */ + if (ttisfloat(r)) + return luai_numlt(lf, fltvalue(r)); /* both are float */ + else if (luai_numisnan(lf)) /* 'r' is int and 'l' is float */ + return 0; /* NaN < i is always false */ + else /* without NaN, (l < r) <--> not(r <= l) */ + return !LEintfloat(ivalue(r), lf); /* not (r <= l) ? */ + } +} + + +/* +** Return 'l <= r', for numbers. +*/ +static int LEnum (const TValue *l, const TValue *r) { + if (ttisinteger(l)) { + lua_Integer li = ivalue(l); + if (ttisinteger(r)) + return li <= ivalue(r); /* both are integers */ + else /* 'l' is int and 'r' is float */ + return LEintfloat(li, fltvalue(r)); /* l <= r ? */ + } + else { + lua_Number lf = fltvalue(l); /* 'l' must be float */ + if (ttisfloat(r)) + return luai_numle(lf, fltvalue(r)); /* both are float */ + else if (luai_numisnan(lf)) /* 'r' is int and 'l' is float */ + return 0; /* NaN <= i is always false */ + else /* without NaN, (l <= r) <--> not(r < l) */ + return !LTintfloat(ivalue(r), lf); /* not (r < l) ? */ + } +} + + +/* +** Main operation less than; return 'l < r'. +*/ +int luaV_lessthan (lua_State *L, const TValue *l, const TValue *r) { + int res; + if (ttisnumber(l) && ttisnumber(r)) /* both operands are numbers? */ + return LTnum(l, r); + else if (ttisstring(l) && ttisstring(r)) /* both are strings? */ + return l_strcmp(tsvalue(l), tsvalue(r)) < 0; + else if ((res = luaT_callorderTM(L, l, r, TM_LT)) < 0) /* no metamethod? */ + luaG_ordererror(L, l, r); /* error */ + return res; +} + + +/* +** Main operation less than or equal to; return 'l <= r'. If it needs +** a metamethod and there is no '__le', try '__lt', based on +** l <= r iff !(r < l) (assuming a total order). If the metamethod +** yields during this substitution, the continuation has to know +** about it (to negate the result of r= 0) /* try 'le' */ + return res; + else { /* try 'lt': */ + L->ci->callstatus |= CIST_LEQ; /* mark it is doing 'lt' for 'le' */ + res = luaT_callorderTM(L, r, l, TM_LT); + L->ci->callstatus ^= CIST_LEQ; /* clear mark */ + if (res < 0) + luaG_ordererror(L, l, r); + return !res; /* result is negated */ + } +} + + +/* +** Main operation for equality of Lua values; return 't1 == t2'. +** L == NULL means raw equality (no metamethods) +*/ +int luaV_equalobj (lua_State *L, const TValue *t1, const TValue *t2) { + const TValue *tm; + if (ttype(t1) != ttype(t2)) { /* not the same variant? */ + if (ttnov(t1) != ttnov(t2) || ttnov(t1) != LUA_TNUMBER) + return 0; /* only numbers can be equal with different variants */ + else { /* two numbers with different variants */ + lua_Integer i1, i2; /* compare them as integers */ + return (tointeger(t1, &i1) && tointeger(t2, &i2) && i1 == i2); + } + } + /* values have same type and same variant */ + switch (ttype(t1)) { + case LUA_TNIL: return 1; + case LUA_TNUMINT: return (ivalue(t1) == ivalue(t2)); + case LUA_TNUMFLT: return luai_numeq(fltvalue(t1), fltvalue(t2)); + case LUA_TBOOLEAN: return bvalue(t1) == bvalue(t2); /* true must be 1 !! */ + case LUA_TLIGHTUSERDATA: return pvalue(t1) == pvalue(t2); + case LUA_TLCF: return fvalue(t1) == fvalue(t2); + case LUA_TSHRSTR: return eqshrstr(tsvalue(t1), tsvalue(t2)); + case LUA_TLNGSTR: return luaS_eqlngstr(tsvalue(t1), tsvalue(t2)); + case LUA_TUSERDATA: { + if (uvalue(t1) == uvalue(t2)) return 1; + else if (L == NULL) return 0; + tm = fasttm(L, uvalue(t1)->metatable, TM_EQ); + if (tm == NULL) + tm = fasttm(L, uvalue(t2)->metatable, TM_EQ); + break; /* will try TM */ + } + case LUA_TTABLE: { + if (hvalue(t1) == hvalue(t2)) return 1; + else if (L == NULL) return 0; + tm = fasttm(L, hvalue(t1)->metatable, TM_EQ); + if (tm == NULL) + tm = fasttm(L, hvalue(t2)->metatable, TM_EQ); + break; /* will try TM */ + } + default: + return gcvalue(t1) == gcvalue(t2); + } + if (tm == NULL) /* no TM? */ + return 0; /* objects are different */ + luaT_callTM(L, tm, t1, t2, L->top, 1); /* call TM */ + return !l_isfalse(L->top); +} + + +/* macro used by 'luaV_concat' to ensure that element at 'o' is a string */ +#define tostring(L,o) \ + (ttisstring(o) || (cvt2str(o) && (luaO_tostring(L, o), 1))) + +#define isemptystr(o) (ttisshrstring(o) && tsvalue(o)->shrlen == 0) + +/* copy strings in stack from top - n up to top - 1 to buffer */ +static void copy2buff (StkId top, int n, char *buff) { + size_t tl = 0; /* size already copied */ + do { + size_t l = vslen(top - n); /* length of string being copied */ + memcpy(buff + tl, svalue(top - n), l * sizeof(char)); + tl += l; + } while (--n > 0); +} + + +/* +** Main operation for concatenation: concat 'total' values in the stack, +** from 'L->top - total' up to 'L->top - 1'. +*/ +void luaV_concat (lua_State *L, int total) { + lua_assert(total >= 2); + do { + StkId top = L->top; + int n = 2; /* number of elements handled in this pass (at least 2) */ + if (!(ttisstring(top-2) || cvt2str(top-2)) || !tostring(L, top-1)) + luaT_trybinTM(L, top-2, top-1, top-2, TM_CONCAT); + else if (isemptystr(top - 1)) /* second operand is empty? */ + cast_void(tostring(L, top - 2)); /* result is first operand */ + else if (isemptystr(top - 2)) { /* first operand is an empty string? */ + setobjs2s(L, top - 2, top - 1); /* result is second op. */ + } + else { + /* at least two non-empty string values; get as many as possible */ + size_t tl = vslen(top - 1); + TString *ts; + /* collect total length and number of strings */ + for (n = 1; n < total && tostring(L, top - n - 1); n++) { + size_t l = vslen(top - n - 1); + if (l >= (MAX_SIZE/sizeof(char)) - tl) + luaG_runerror(L, "string length overflow"); + tl += l; + } + if (tl <= LUAI_MAXSHORTLEN) { /* is result a short string? */ + char buff[LUAI_MAXSHORTLEN]; + copy2buff(top, n, buff); /* copy strings to buffer */ + ts = luaS_newlstr(L, buff, tl); + } + else { /* long string; copy strings directly to final result */ + ts = luaS_createlngstrobj(L, tl); + copy2buff(top, n, getstr(ts)); + } + setsvalue2s(L, top - n, ts); /* create result */ + } + total -= n-1; /* got 'n' strings to create 1 new */ + L->top -= n-1; /* popped 'n' strings and pushed one */ + } while (total > 1); /* repeat until only 1 result left */ +} + + +/* +** Main operation 'ra' = #rb'. +*/ +void luaV_objlen (lua_State *L, StkId ra, const TValue *rb) { + const TValue *tm; + switch (ttype(rb)) { + case LUA_TTABLE: { + Table *h = hvalue(rb); + tm = fasttm(L, h->metatable, TM_LEN); + if (tm) break; /* metamethod? break switch to call it */ + setivalue(ra, luaH_getn(h)); /* else primitive len */ + return; + } + case LUA_TSHRSTR: { + setivalue(ra, tsvalue(rb)->shrlen); + return; + } + case LUA_TLNGSTR: { + setivalue(ra, tsvalue(rb)->u.lnglen); + return; + } + default: { /* try metamethod */ + tm = luaT_gettmbyobj(L, rb, TM_LEN); + if (ttisnil(tm)) /* no metamethod? */ + luaG_typeerror(L, rb, "get length of"); + break; + } + } + luaT_callTM(L, tm, rb, rb, ra, 1); +} + + +/* +** Integer division; return 'm // n', that is, floor(m/n). +** C division truncates its result (rounds towards zero). +** 'floor(q) == trunc(q)' when 'q >= 0' or when 'q' is integer, +** otherwise 'floor(q) == trunc(q) - 1'. +*/ +lua_Integer luaV_div (lua_State *L, lua_Integer m, lua_Integer n) { + if (l_castS2U(n) + 1u <= 1u) { /* special cases: -1 or 0 */ + if (n == 0) + luaG_runerror(L, "attempt to divide by zero"); + return intop(-, 0, m); /* n==-1; avoid overflow with 0x80000...//-1 */ + } + else { + lua_Integer q = m / n; /* perform C division */ + if ((m ^ n) < 0 && m % n != 0) /* 'm/n' would be negative non-integer? */ + q -= 1; /* correct result for different rounding */ + return q; + } +} + + +/* +** Integer modulus; return 'm % n'. (Assume that C '%' with +** negative operands follows C99 behavior. See previous comment +** about luaV_div.) +*/ +lua_Integer luaV_mod (lua_State *L, lua_Integer m, lua_Integer n) { + if (l_castS2U(n) + 1u <= 1u) { /* special cases: -1 or 0 */ + if (n == 0) + luaG_runerror(L, "attempt to perform 'n%%0'"); + return 0; /* m % -1 == 0; avoid overflow with 0x80000...%-1 */ + } + else { + lua_Integer r = m % n; + if (r != 0 && (m ^ n) < 0) /* 'm/n' would be non-integer negative? */ + r += n; /* correct result for different rounding */ + return r; + } +} + + +/* number of bits in an integer */ +#define NBITS cast_int(sizeof(lua_Integer) * CHAR_BIT) + +/* +** Shift left operation. (Shift right just negates 'y'.) +*/ +lua_Integer luaV_shiftl (lua_Integer x, lua_Integer y) { + if (y < 0) { /* shift right? */ + if (y <= -NBITS) return 0; + else return intop(>>, x, -y); + } + else { /* shift left */ + if (y >= NBITS) return 0; + else return intop(<<, x, y); + } +} + + +/* +** check whether cached closure in prototype 'p' may be reused, that is, +** whether there is a cached closure with the same upvalues needed by +** new closure to be created. +*/ +static LClosure *getcached (Proto *p, UpVal **encup, StkId base) { + LClosure *c = p->cache; + if (c != NULL) { /* is there a cached closure? */ + int nup = p->sizeupvalues; + Upvaldesc *uv = p->upvalues; + int i; + for (i = 0; i < nup; i++) { /* check whether it has right upvalues */ + TValue *v = uv[i].instack ? base + uv[i].idx : encup[uv[i].idx]->v; + if (c->upvals[i]->v != v) + return NULL; /* wrong upvalue; cannot reuse closure */ + } + } + return c; /* return cached closure (or NULL if no cached closure) */ +} + + +/* +** create a new Lua closure, push it in the stack, and initialize +** its upvalues. Note that the closure is not cached if prototype is +** already black (which means that 'cache' was already cleared by the +** GC). +*/ +static void pushclosure (lua_State *L, Proto *p, UpVal **encup, StkId base, + StkId ra) { + int nup = p->sizeupvalues; + Upvaldesc *uv = p->upvalues; + int i; + LClosure *ncl = luaF_newLclosure(L, nup); + ncl->p = p; + setclLvalue(L, ra, ncl); /* anchor new closure in stack */ + for (i = 0; i < nup; i++) { /* fill in its upvalues */ + if (uv[i].instack) /* upvalue refers to local variable? */ + ncl->upvals[i] = luaF_findupval(L, base + uv[i].idx); + else /* get upvalue from enclosing function */ + ncl->upvals[i] = encup[uv[i].idx]; + ncl->upvals[i]->refcount++; + /* new closure is white, so we do not need a barrier here */ + } + if (!isblack(p)) /* cache will not break GC invariant? */ + p->cache = ncl; /* save it on cache for reuse */ +} + + +/* +** finish execution of an opcode interrupted by an yield +*/ +void luaV_finishOp (lua_State *L) { + CallInfo *ci = L->ci; + StkId base = ci->u.l.base; + Instruction inst = *(ci->u.l.savedpc - 1); /* interrupted instruction */ + OpCode op = GET_OPCODE(inst); + switch (op) { /* finish its execution */ + case OP_ADD: case OP_SUB: case OP_MUL: case OP_DIV: case OP_IDIV: + case OP_BAND: case OP_BOR: case OP_BXOR: case OP_SHL: case OP_SHR: + case OP_MOD: case OP_POW: + case OP_UNM: case OP_BNOT: case OP_LEN: + case OP_GETTABUP: case OP_GETTABLE: case OP_SELF: { + setobjs2s(L, base + GETARG_A(inst), --L->top); + break; + } + case OP_LE: case OP_LT: case OP_EQ: { + int res = !l_isfalse(L->top - 1); + L->top--; + if (ci->callstatus & CIST_LEQ) { /* "<=" using "<" instead? */ + lua_assert(op == OP_LE); + ci->callstatus ^= CIST_LEQ; /* clear mark */ + res = !res; /* negate result */ + } + lua_assert(GET_OPCODE(*ci->u.l.savedpc) == OP_JMP); + if (res != GETARG_A(inst)) /* condition failed? */ + ci->u.l.savedpc++; /* skip jump instruction */ + break; + } + case OP_CONCAT: { + StkId top = L->top - 1; /* top when 'luaT_trybinTM' was called */ + int b = GETARG_B(inst); /* first element to concatenate */ + int total = cast_int(top - 1 - (base + b)); /* yet to concatenate */ + setobj2s(L, top - 2, top); /* put TM result in proper position */ + if (total > 1) { /* are there elements to concat? */ + L->top = top - 1; /* top is one after last element (at top-2) */ + luaV_concat(L, total); /* concat them (may yield again) */ + } + /* move final result to final position */ + setobj2s(L, ci->u.l.base + GETARG_A(inst), L->top - 1); + L->top = ci->top; /* restore top */ + break; + } + case OP_TFORCALL: { + lua_assert(GET_OPCODE(*ci->u.l.savedpc) == OP_TFORLOOP); + L->top = ci->top; /* correct top */ + break; + } + case OP_CALL: { + if (GETARG_C(inst) - 1 >= 0) /* nresults >= 0? */ + L->top = ci->top; /* adjust results */ + break; + } + case OP_TAILCALL: case OP_SETTABUP: case OP_SETTABLE: + break; + default: lua_assert(0); + } +} + + + + +/* +** {================================================================== +** Function 'luaV_execute': main interpreter loop +** =================================================================== +*/ + + +/* +** some macros for common tasks in 'luaV_execute' +*/ + + +#define RA(i) (base+GETARG_A(i)) +#define RB(i) check_exp(getBMode(GET_OPCODE(i)) == OpArgR, base+GETARG_B(i)) +#define RC(i) check_exp(getCMode(GET_OPCODE(i)) == OpArgR, base+GETARG_C(i)) +#define RKB(i) check_exp(getBMode(GET_OPCODE(i)) == OpArgK, \ + ISK(GETARG_B(i)) ? k+INDEXK(GETARG_B(i)) : base+GETARG_B(i)) +#define RKC(i) check_exp(getCMode(GET_OPCODE(i)) == OpArgK, \ + ISK(GETARG_C(i)) ? k+INDEXK(GETARG_C(i)) : base+GETARG_C(i)) + + +/* execute a jump instruction */ +#define dojump(ci,i,e) \ + { int a = GETARG_A(i); \ + if (a != 0) luaF_close(L, ci->u.l.base + a - 1); \ + ci->u.l.savedpc += GETARG_sBx(i) + e; } + +/* for test instructions, execute the jump instruction that follows it */ +#define donextjump(ci) { i = *ci->u.l.savedpc; dojump(ci, i, 1); } + + +#define Protect(x) { {x;}; base = ci->u.l.base; } + +#define checkGC(L,c) \ + { luaC_condGC(L, L->top = (c), /* limit of live values */ \ + Protect(L->top = ci->top)); /* restore top */ \ + luai_threadyield(L); } + + +/* fetch an instruction and prepare its execution */ +#define vmfetch() { \ + i = *(ci->u.l.savedpc++); \ + if (L->hookmask & (LUA_MASKLINE | LUA_MASKCOUNT)) \ + Protect(luaG_traceexec(L)); \ + ra = RA(i); /* WARNING: any stack reallocation invalidates 'ra' */ \ + lua_assert(base == ci->u.l.base); \ + lua_assert(base <= L->top && L->top < L->stack + L->stacksize); \ +} + +#define vmdispatch(o) switch(o) +#define vmcase(l) case l: +#define vmbreak break + + +/* +** copy of 'luaV_gettable', but protecting the call to potential +** metamethod (which can reallocate the stack) +*/ +#define gettableProtected(L,t,k,v) { const TValue *slot; \ + if (luaV_fastget(L,t,k,slot,luaH_get)) { setobj2s(L, v, slot); } \ + else Protect(luaV_finishget(L,t,k,v,slot)); } + + +/* same for 'luaV_settable' */ +#define settableProtected(L,t,k,v) { const TValue *slot; \ + if (!luaV_fastset(L,t,k,slot,luaH_get,v)) \ + Protect(luaV_finishset(L,t,k,v,slot)); } + + + +void luaV_execute (lua_State *L) { + CallInfo *ci = L->ci; + LClosure *cl; + TValue *k; + StkId base; + ci->callstatus |= CIST_FRESH; /* fresh invocation of 'luaV_execute" */ + newframe: /* reentry point when frame changes (call/return) */ + lua_assert(ci == L->ci); + cl = clLvalue(ci->func); /* local reference to function's closure */ + k = cl->p->k; /* local reference to function's constant table */ + base = ci->u.l.base; /* local copy of function's base */ + /* main loop of interpreter */ + for (;;) { + Instruction i; + StkId ra; + vmfetch(); + vmdispatch (GET_OPCODE(i)) { + vmcase(OP_MOVE) { + setobjs2s(L, ra, RB(i)); + vmbreak; + } + vmcase(OP_LOADK) { + TValue *rb = k + GETARG_Bx(i); + setobj2s(L, ra, rb); + vmbreak; + } + vmcase(OP_LOADKX) { + TValue *rb; + lua_assert(GET_OPCODE(*ci->u.l.savedpc) == OP_EXTRAARG); + rb = k + GETARG_Ax(*ci->u.l.savedpc++); + setobj2s(L, ra, rb); + vmbreak; + } + vmcase(OP_LOADBOOL) { + setbvalue(ra, GETARG_B(i)); + if (GETARG_C(i)) ci->u.l.savedpc++; /* skip next instruction (if C) */ + vmbreak; + } + vmcase(OP_LOADNIL) { + int b = GETARG_B(i); + do { + setnilvalue(ra++); + } while (b--); + vmbreak; + } + vmcase(OP_GETUPVAL) { + int b = GETARG_B(i); + setobj2s(L, ra, cl->upvals[b]->v); + vmbreak; + } + vmcase(OP_GETTABUP) { + TValue *upval = cl->upvals[GETARG_B(i)]->v; + TValue *rc = RKC(i); + gettableProtected(L, upval, rc, ra); + vmbreak; + } + vmcase(OP_GETTABLE) { + StkId rb = RB(i); + TValue *rc = RKC(i); + gettableProtected(L, rb, rc, ra); + vmbreak; + } + vmcase(OP_SETTABUP) { + TValue *upval = cl->upvals[GETARG_A(i)]->v; + TValue *rb = RKB(i); + TValue *rc = RKC(i); + settableProtected(L, upval, rb, rc); + vmbreak; + } + vmcase(OP_SETUPVAL) { + UpVal *uv = cl->upvals[GETARG_B(i)]; + setobj(L, uv->v, ra); + luaC_upvalbarrier(L, uv); + vmbreak; + } + vmcase(OP_SETTABLE) { + TValue *rb = RKB(i); + TValue *rc = RKC(i); + settableProtected(L, ra, rb, rc); + vmbreak; + } + vmcase(OP_NEWTABLE) { + int b = GETARG_B(i); + int c = GETARG_C(i); + Table *t = luaH_new(L); + sethvalue(L, ra, t); + if (b != 0 || c != 0) + luaH_resize(L, t, luaO_fb2int(b), luaO_fb2int(c)); + checkGC(L, ra + 1); + vmbreak; + } + vmcase(OP_SELF) { + const TValue *aux; + StkId rb = RB(i); + TValue *rc = RKC(i); + TString *key = tsvalue(rc); /* key must be a string */ + setobjs2s(L, ra + 1, rb); + if (luaV_fastget(L, rb, key, aux, luaH_getstr)) { + setobj2s(L, ra, aux); + } + else Protect(luaV_finishget(L, rb, rc, ra, aux)); + vmbreak; + } + vmcase(OP_ADD) { + TValue *rb = RKB(i); + TValue *rc = RKC(i); + lua_Number nb; lua_Number nc; + if (ttisinteger(rb) && ttisinteger(rc)) { + lua_Integer ib = ivalue(rb); lua_Integer ic = ivalue(rc); + setivalue(ra, intop(+, ib, ic)); + } + else if (tonumber(rb, &nb) && tonumber(rc, &nc)) { + setfltvalue(ra, luai_numadd(L, nb, nc)); + } + else { Protect(luaT_trybinTM(L, rb, rc, ra, TM_ADD)); } + vmbreak; + } + vmcase(OP_SUB) { + TValue *rb = RKB(i); + TValue *rc = RKC(i); + lua_Number nb; lua_Number nc; + if (ttisinteger(rb) && ttisinteger(rc)) { + lua_Integer ib = ivalue(rb); lua_Integer ic = ivalue(rc); + setivalue(ra, intop(-, ib, ic)); + } + else if (tonumber(rb, &nb) && tonumber(rc, &nc)) { + setfltvalue(ra, luai_numsub(L, nb, nc)); + } + else { Protect(luaT_trybinTM(L, rb, rc, ra, TM_SUB)); } + vmbreak; + } + vmcase(OP_MUL) { + TValue *rb = RKB(i); + TValue *rc = RKC(i); + lua_Number nb; lua_Number nc; + if (ttisinteger(rb) && ttisinteger(rc)) { + lua_Integer ib = ivalue(rb); lua_Integer ic = ivalue(rc); + setivalue(ra, intop(*, ib, ic)); + } + else if (tonumber(rb, &nb) && tonumber(rc, &nc)) { + setfltvalue(ra, luai_nummul(L, nb, nc)); + } + else { Protect(luaT_trybinTM(L, rb, rc, ra, TM_MUL)); } + vmbreak; + } + vmcase(OP_DIV) { /* float division (always with floats) */ + TValue *rb = RKB(i); + TValue *rc = RKC(i); + lua_Number nb; lua_Number nc; + if (tonumber(rb, &nb) && tonumber(rc, &nc)) { + setfltvalue(ra, luai_numdiv(L, nb, nc)); + } + else { Protect(luaT_trybinTM(L, rb, rc, ra, TM_DIV)); } + vmbreak; + } + vmcase(OP_BAND) { + TValue *rb = RKB(i); + TValue *rc = RKC(i); + lua_Integer ib; lua_Integer ic; + if (tointeger(rb, &ib) && tointeger(rc, &ic)) { + setivalue(ra, intop(&, ib, ic)); + } + else { Protect(luaT_trybinTM(L, rb, rc, ra, TM_BAND)); } + vmbreak; + } + vmcase(OP_BOR) { + TValue *rb = RKB(i); + TValue *rc = RKC(i); + lua_Integer ib; lua_Integer ic; + if (tointeger(rb, &ib) && tointeger(rc, &ic)) { + setivalue(ra, intop(|, ib, ic)); + } + else { Protect(luaT_trybinTM(L, rb, rc, ra, TM_BOR)); } + vmbreak; + } + vmcase(OP_BXOR) { + TValue *rb = RKB(i); + TValue *rc = RKC(i); + lua_Integer ib; lua_Integer ic; + if (tointeger(rb, &ib) && tointeger(rc, &ic)) { + setivalue(ra, intop(^, ib, ic)); + } + else { Protect(luaT_trybinTM(L, rb, rc, ra, TM_BXOR)); } + vmbreak; + } + vmcase(OP_SHL) { + TValue *rb = RKB(i); + TValue *rc = RKC(i); + lua_Integer ib; lua_Integer ic; + if (tointeger(rb, &ib) && tointeger(rc, &ic)) { + setivalue(ra, luaV_shiftl(ib, ic)); + } + else { Protect(luaT_trybinTM(L, rb, rc, ra, TM_SHL)); } + vmbreak; + } + vmcase(OP_SHR) { + TValue *rb = RKB(i); + TValue *rc = RKC(i); + lua_Integer ib; lua_Integer ic; + if (tointeger(rb, &ib) && tointeger(rc, &ic)) { + setivalue(ra, luaV_shiftl(ib, -ic)); + } + else { Protect(luaT_trybinTM(L, rb, rc, ra, TM_SHR)); } + vmbreak; + } + vmcase(OP_MOD) { + TValue *rb = RKB(i); + TValue *rc = RKC(i); + lua_Number nb; lua_Number nc; + if (ttisinteger(rb) && ttisinteger(rc)) { + lua_Integer ib = ivalue(rb); lua_Integer ic = ivalue(rc); + setivalue(ra, luaV_mod(L, ib, ic)); + } + else if (tonumber(rb, &nb) && tonumber(rc, &nc)) { + lua_Number m; + luai_nummod(L, nb, nc, m); + setfltvalue(ra, m); + } + else { Protect(luaT_trybinTM(L, rb, rc, ra, TM_MOD)); } + vmbreak; + } + vmcase(OP_IDIV) { /* floor division */ + TValue *rb = RKB(i); + TValue *rc = RKC(i); + lua_Number nb; lua_Number nc; + if (ttisinteger(rb) && ttisinteger(rc)) { + lua_Integer ib = ivalue(rb); lua_Integer ic = ivalue(rc); + setivalue(ra, luaV_div(L, ib, ic)); + } + else if (tonumber(rb, &nb) && tonumber(rc, &nc)) { + setfltvalue(ra, luai_numidiv(L, nb, nc)); + } + else { Protect(luaT_trybinTM(L, rb, rc, ra, TM_IDIV)); } + vmbreak; + } + vmcase(OP_POW) { + TValue *rb = RKB(i); + TValue *rc = RKC(i); + lua_Number nb; lua_Number nc; + if (tonumber(rb, &nb) && tonumber(rc, &nc)) { + setfltvalue(ra, luai_numpow(L, nb, nc)); + } + else { Protect(luaT_trybinTM(L, rb, rc, ra, TM_POW)); } + vmbreak; + } + vmcase(OP_UNM) { + TValue *rb = RB(i); + lua_Number nb; + if (ttisinteger(rb)) { + lua_Integer ib = ivalue(rb); + setivalue(ra, intop(-, 0, ib)); + } + else if (tonumber(rb, &nb)) { + setfltvalue(ra, luai_numunm(L, nb)); + } + else { + Protect(luaT_trybinTM(L, rb, rb, ra, TM_UNM)); + } + vmbreak; + } + vmcase(OP_BNOT) { + TValue *rb = RB(i); + lua_Integer ib; + if (tointeger(rb, &ib)) { + setivalue(ra, intop(^, ~l_castS2U(0), ib)); + } + else { + Protect(luaT_trybinTM(L, rb, rb, ra, TM_BNOT)); + } + vmbreak; + } + vmcase(OP_NOT) { + TValue *rb = RB(i); + int res = l_isfalse(rb); /* next assignment may change this value */ + setbvalue(ra, res); + vmbreak; + } + vmcase(OP_LEN) { + Protect(luaV_objlen(L, ra, RB(i))); + vmbreak; + } + vmcase(OP_CONCAT) { + int b = GETARG_B(i); + int c = GETARG_C(i); + StkId rb; + L->top = base + c + 1; /* mark the end of concat operands */ + Protect(luaV_concat(L, c - b + 1)); + ra = RA(i); /* 'luaV_concat' may invoke TMs and move the stack */ + rb = base + b; + setobjs2s(L, ra, rb); + checkGC(L, (ra >= rb ? ra + 1 : rb)); + L->top = ci->top; /* restore top */ + vmbreak; + } + vmcase(OP_JMP) { + dojump(ci, i, 0); + vmbreak; + } + vmcase(OP_EQ) { + TValue *rb = RKB(i); + TValue *rc = RKC(i); + Protect( + if (luaV_equalobj(L, rb, rc) != GETARG_A(i)) + ci->u.l.savedpc++; + else + donextjump(ci); + ) + vmbreak; + } + vmcase(OP_LT) { + Protect( + if (luaV_lessthan(L, RKB(i), RKC(i)) != GETARG_A(i)) + ci->u.l.savedpc++; + else + donextjump(ci); + ) + vmbreak; + } + vmcase(OP_LE) { + Protect( + if (luaV_lessequal(L, RKB(i), RKC(i)) != GETARG_A(i)) + ci->u.l.savedpc++; + else + donextjump(ci); + ) + vmbreak; + } + vmcase(OP_TEST) { + if (GETARG_C(i) ? l_isfalse(ra) : !l_isfalse(ra)) + ci->u.l.savedpc++; + else + donextjump(ci); + vmbreak; + } + vmcase(OP_TESTSET) { + TValue *rb = RB(i); + if (GETARG_C(i) ? l_isfalse(rb) : !l_isfalse(rb)) + ci->u.l.savedpc++; + else { + setobjs2s(L, ra, rb); + donextjump(ci); + } + vmbreak; + } + vmcase(OP_CALL) { + int b = GETARG_B(i); + int nresults = GETARG_C(i) - 1; + if (b != 0) L->top = ra+b; /* else previous instruction set top */ + if (luaD_precall(L, ra, nresults)) { /* C function? */ + if (nresults >= 0) + L->top = ci->top; /* adjust results */ + Protect((void)0); /* update 'base' */ + } + else { /* Lua function */ + ci = L->ci; + goto newframe; /* restart luaV_execute over new Lua function */ + } + vmbreak; + } + vmcase(OP_TAILCALL) { + int b = GETARG_B(i); + if (b != 0) L->top = ra+b; /* else previous instruction set top */ + lua_assert(GETARG_C(i) - 1 == LUA_MULTRET); + if (luaD_precall(L, ra, LUA_MULTRET)) { /* C function? */ + Protect((void)0); /* update 'base' */ + } + else { + /* tail call: put called frame (n) in place of caller one (o) */ + CallInfo *nci = L->ci; /* called frame */ + CallInfo *oci = nci->previous; /* caller frame */ + StkId nfunc = nci->func; /* called function */ + StkId ofunc = oci->func; /* caller function */ + /* last stack slot filled by 'precall' */ + StkId lim = nci->u.l.base + getproto(nfunc)->numparams; + int aux; + /* close all upvalues from previous call */ + if (cl->p->sizep > 0) luaF_close(L, oci->u.l.base); + /* move new frame into old one */ + for (aux = 0; nfunc + aux < lim; aux++) + setobjs2s(L, ofunc + aux, nfunc + aux); + oci->u.l.base = ofunc + (nci->u.l.base - nfunc); /* correct base */ + oci->top = L->top = ofunc + (L->top - nfunc); /* correct top */ + oci->u.l.savedpc = nci->u.l.savedpc; + oci->callstatus |= CIST_TAIL; /* function was tail called */ + ci = L->ci = oci; /* remove new frame */ + lua_assert(L->top == oci->u.l.base + getproto(ofunc)->maxstacksize); + goto newframe; /* restart luaV_execute over new Lua function */ + } + vmbreak; + } + vmcase(OP_RETURN) { + int b = GETARG_B(i); + if (cl->p->sizep > 0) luaF_close(L, base); + b = luaD_poscall(L, ci, ra, (b != 0 ? b - 1 : cast_int(L->top - ra))); + if (ci->callstatus & CIST_FRESH) /* local 'ci' still from callee */ + return; /* external invocation: return */ + else { /* invocation via reentry: continue execution */ + ci = L->ci; + if (b) L->top = ci->top; + lua_assert(isLua(ci)); + lua_assert(GET_OPCODE(*((ci)->u.l.savedpc - 1)) == OP_CALL); + goto newframe; /* restart luaV_execute over new Lua function */ + } + } + vmcase(OP_FORLOOP) { + if (ttisinteger(ra)) { /* integer loop? */ + lua_Integer step = ivalue(ra + 2); + lua_Integer idx = intop(+, ivalue(ra), step); /* increment index */ + lua_Integer limit = ivalue(ra + 1); + if ((0 < step) ? (idx <= limit) : (limit <= idx)) { + ci->u.l.savedpc += GETARG_sBx(i); /* jump back */ + chgivalue(ra, idx); /* update internal index... */ + setivalue(ra + 3, idx); /* ...and external index */ + } + } + else { /* floating loop */ + lua_Number step = fltvalue(ra + 2); + lua_Number idx = luai_numadd(L, fltvalue(ra), step); /* inc. index */ + lua_Number limit = fltvalue(ra + 1); + if (luai_numlt(0, step) ? luai_numle(idx, limit) + : luai_numle(limit, idx)) { + ci->u.l.savedpc += GETARG_sBx(i); /* jump back */ + chgfltvalue(ra, idx); /* update internal index... */ + setfltvalue(ra + 3, idx); /* ...and external index */ + } + } + vmbreak; + } + vmcase(OP_FORPREP) { + TValue *init = ra; + TValue *plimit = ra + 1; + TValue *pstep = ra + 2; + lua_Integer ilimit; + int stopnow; + if (ttisinteger(init) && ttisinteger(pstep) && + forlimit(plimit, &ilimit, ivalue(pstep), &stopnow)) { + /* all values are integer */ + lua_Integer initv = (stopnow ? 0 : ivalue(init)); + setivalue(plimit, ilimit); + setivalue(init, intop(-, initv, ivalue(pstep))); + } + else { /* try making all values floats */ + lua_Number ninit; lua_Number nlimit; lua_Number nstep; + if (!tonumber(plimit, &nlimit)) + luaG_runerror(L, "'for' limit must be a number"); + setfltvalue(plimit, nlimit); + if (!tonumber(pstep, &nstep)) + luaG_runerror(L, "'for' step must be a number"); + setfltvalue(pstep, nstep); + if (!tonumber(init, &ninit)) + luaG_runerror(L, "'for' initial value must be a number"); + setfltvalue(init, luai_numsub(L, ninit, nstep)); + } + ci->u.l.savedpc += GETARG_sBx(i); + vmbreak; + } + vmcase(OP_TFORCALL) { + StkId cb = ra + 3; /* call base */ + setobjs2s(L, cb+2, ra+2); + setobjs2s(L, cb+1, ra+1); + setobjs2s(L, cb, ra); + L->top = cb + 3; /* func. + 2 args (state and index) */ + Protect(luaD_call(L, cb, GETARG_C(i))); + L->top = ci->top; + i = *(ci->u.l.savedpc++); /* go to next instruction */ + ra = RA(i); + lua_assert(GET_OPCODE(i) == OP_TFORLOOP); + goto l_tforloop; + } + vmcase(OP_TFORLOOP) { + l_tforloop: + if (!ttisnil(ra + 1)) { /* continue loop? */ + setobjs2s(L, ra, ra + 1); /* save control variable */ + ci->u.l.savedpc += GETARG_sBx(i); /* jump back */ + } + vmbreak; + } + vmcase(OP_SETLIST) { + int n = GETARG_B(i); + int c = GETARG_C(i); + unsigned int last; + Table *h; + if (n == 0) n = cast_int(L->top - ra) - 1; + if (c == 0) { + lua_assert(GET_OPCODE(*ci->u.l.savedpc) == OP_EXTRAARG); + c = GETARG_Ax(*ci->u.l.savedpc++); + } + h = hvalue(ra); + last = ((c-1)*LFIELDS_PER_FLUSH) + n; + if (last > h->sizearray) /* needs more space? */ + luaH_resizearray(L, h, last); /* preallocate it at once */ + for (; n > 0; n--) { + TValue *val = ra+n; + luaH_setint(L, h, last--, val); + luaC_barrierback(L, h, val); + } + L->top = ci->top; /* correct top (in case of previous open call) */ + vmbreak; + } + vmcase(OP_CLOSURE) { + Proto *p = cl->p->p[GETARG_Bx(i)]; + LClosure *ncl = getcached(p, cl->upvals, base); /* cached closure */ + if (ncl == NULL) /* no match? */ + pushclosure(L, p, cl->upvals, base, ra); /* create a new one */ + else + setclLvalue(L, ra, ncl); /* push cashed closure */ + checkGC(L, ra + 1); + vmbreak; + } + vmcase(OP_VARARG) { + int b = GETARG_B(i) - 1; /* required results */ + int j; + int n = cast_int(base - ci->func) - cl->p->numparams - 1; + if (n < 0) /* less arguments than parameters? */ + n = 0; /* no vararg arguments */ + if (b < 0) { /* B == 0? */ + b = n; /* get all var. arguments */ + Protect(luaD_checkstack(L, n)); + ra = RA(i); /* previous call may change the stack */ + L->top = ra + n; + } + for (j = 0; j < b && j < n; j++) + setobjs2s(L, ra + j, base - n + j); + for (; j < b; j++) /* complete required results with nil */ + setnilvalue(ra + j); + vmbreak; + } + vmcase(OP_EXTRAARG) { + lua_assert(0); + vmbreak; + } + } + } +} + +/* }================================================================== */ + diff --git a/EQ2/source/LUA/lvm.h b/EQ2/source/LUA/lvm.h new file mode 100644 index 000000000..422f87194 --- /dev/null +++ b/EQ2/source/LUA/lvm.h @@ -0,0 +1,113 @@ +/* +** $Id: lvm.h,v 2.41 2016/12/22 13:08:50 roberto Exp $ +** Lua virtual machine +** See Copyright Notice in lua.h +*/ + +#ifndef lvm_h +#define lvm_h + + +#include "ldo.h" +#include "lobject.h" +#include "ltm.h" + + +#if !defined(LUA_NOCVTN2S) +#define cvt2str(o) ttisnumber(o) +#else +#define cvt2str(o) 0 /* no conversion from numbers to strings */ +#endif + + +#if !defined(LUA_NOCVTS2N) +#define cvt2num(o) ttisstring(o) +#else +#define cvt2num(o) 0 /* no conversion from strings to numbers */ +#endif + + +/* +** You can define LUA_FLOORN2I if you want to convert floats to integers +** by flooring them (instead of raising an error if they are not +** integral values) +*/ +#if !defined(LUA_FLOORN2I) +#define LUA_FLOORN2I 0 +#endif + + +#define tonumber(o,n) \ + (ttisfloat(o) ? (*(n) = fltvalue(o), 1) : luaV_tonumber_(o,n)) + +#define tointeger(o,i) \ + (ttisinteger(o) ? (*(i) = ivalue(o), 1) : luaV_tointeger(o,i,LUA_FLOORN2I)) + +#define intop(op,v1,v2) l_castU2S(l_castS2U(v1) op l_castS2U(v2)) + +#define luaV_rawequalobj(t1,t2) luaV_equalobj(NULL,t1,t2) + + +/* +** fast track for 'gettable': if 't' is a table and 't[k]' is not nil, +** return 1 with 'slot' pointing to 't[k]' (final result). Otherwise, +** return 0 (meaning it will have to check metamethod) with 'slot' +** pointing to a nil 't[k]' (if 't' is a table) or NULL (otherwise). +** 'f' is the raw get function to use. +*/ +#define luaV_fastget(L,t,k,slot,f) \ + (!ttistable(t) \ + ? (slot = NULL, 0) /* not a table; 'slot' is NULL and result is 0 */ \ + : (slot = f(hvalue(t), k), /* else, do raw access */ \ + !ttisnil(slot))) /* result not nil? */ + +/* +** standard implementation for 'gettable' +*/ +#define luaV_gettable(L,t,k,v) { const TValue *slot; \ + if (luaV_fastget(L,t,k,slot,luaH_get)) { setobj2s(L, v, slot); } \ + else luaV_finishget(L,t,k,v,slot); } + + +/* +** Fast track for set table. If 't' is a table and 't[k]' is not nil, +** call GC barrier, do a raw 't[k]=v', and return true; otherwise, +** return false with 'slot' equal to NULL (if 't' is not a table) or +** 'nil'. (This is needed by 'luaV_finishget'.) Note that, if the macro +** returns true, there is no need to 'invalidateTMcache', because the +** call is not creating a new entry. +*/ +#define luaV_fastset(L,t,k,slot,f,v) \ + (!ttistable(t) \ + ? (slot = NULL, 0) \ + : (slot = f(hvalue(t), k), \ + ttisnil(slot) ? 0 \ + : (luaC_barrierback(L, hvalue(t), v), \ + setobj2t(L, cast(TValue *,slot), v), \ + 1))) + + +#define luaV_settable(L,t,k,v) { const TValue *slot; \ + if (!luaV_fastset(L,t,k,slot,luaH_get,v)) \ + luaV_finishset(L,t,k,v,slot); } + + + +LUAI_FUNC int luaV_equalobj (lua_State *L, const TValue *t1, const TValue *t2); +LUAI_FUNC int luaV_lessthan (lua_State *L, const TValue *l, const TValue *r); +LUAI_FUNC int luaV_lessequal (lua_State *L, const TValue *l, const TValue *r); +LUAI_FUNC int luaV_tonumber_ (const TValue *obj, lua_Number *n); +LUAI_FUNC int luaV_tointeger (const TValue *obj, lua_Integer *p, int mode); +LUAI_FUNC void luaV_finishget (lua_State *L, const TValue *t, TValue *key, + StkId val, const TValue *slot); +LUAI_FUNC void luaV_finishset (lua_State *L, const TValue *t, TValue *key, + StkId val, const TValue *slot); +LUAI_FUNC void luaV_finishOp (lua_State *L); +LUAI_FUNC void luaV_execute (lua_State *L); +LUAI_FUNC void luaV_concat (lua_State *L, int total); +LUAI_FUNC lua_Integer luaV_div (lua_State *L, lua_Integer x, lua_Integer y); +LUAI_FUNC lua_Integer luaV_mod (lua_State *L, lua_Integer x, lua_Integer y); +LUAI_FUNC lua_Integer luaV_shiftl (lua_Integer x, lua_Integer y); +LUAI_FUNC void luaV_objlen (lua_State *L, StkId ra, const TValue *rb); + +#endif diff --git a/EQ2/source/LUA/lzio.c b/EQ2/source/LUA/lzio.c new file mode 100644 index 000000000..c9e1f491f --- /dev/null +++ b/EQ2/source/LUA/lzio.c @@ -0,0 +1,68 @@ +/* +** $Id: lzio.c,v 1.37 2015/09/08 15:41:05 roberto Exp $ +** Buffered streams +** See Copyright Notice in lua.h +*/ + +#define lzio_c +#define LUA_CORE + +#include "lprefix.h" + + +#include + +#include "lua.h" + +#include "llimits.h" +#include "lmem.h" +#include "lstate.h" +#include "lzio.h" + + +int luaZ_fill (ZIO *z) { + size_t size; + lua_State *L = z->L; + const char *buff; + lua_unlock(L); + buff = z->reader(L, z->data, &size); + lua_lock(L); + if (buff == NULL || size == 0) + return EOZ; + z->n = size - 1; /* discount char being returned */ + z->p = buff; + return cast_uchar(*(z->p++)); +} + + +void luaZ_init (lua_State *L, ZIO *z, lua_Reader reader, void *data) { + z->L = L; + z->reader = reader; + z->data = data; + z->n = 0; + z->p = NULL; +} + + +/* --------------------------------------------------------------- read --- */ +size_t luaZ_read (ZIO *z, void *b, size_t n) { + while (n) { + size_t m; + if (z->n == 0) { /* no bytes in buffer? */ + if (luaZ_fill(z) == EOZ) /* try to read more */ + return n; /* no more input; return number of missing bytes */ + else { + z->n++; /* luaZ_fill consumed first byte; put it back */ + z->p--; + } + } + m = (n <= z->n) ? n : z->n; /* min. between n and z->n */ + memcpy(b, z->p, m); + z->n -= m; + z->p += m; + b = (char *)b + m; + n -= m; + } + return 0; +} + diff --git a/EQ2/source/LUA/lzio.h b/EQ2/source/LUA/lzio.h new file mode 100644 index 000000000..e7b6f34b1 --- /dev/null +++ b/EQ2/source/LUA/lzio.h @@ -0,0 +1,66 @@ +/* +** $Id: lzio.h,v 1.31 2015/09/08 15:41:05 roberto Exp $ +** Buffered streams +** See Copyright Notice in lua.h +*/ + + +#ifndef lzio_h +#define lzio_h + +#include "lua.h" + +#include "lmem.h" + + +#define EOZ (-1) /* end of stream */ + +typedef struct Zio ZIO; + +#define zgetc(z) (((z)->n--)>0 ? cast_uchar(*(z)->p++) : luaZ_fill(z)) + + +typedef struct Mbuffer { + char *buffer; + size_t n; + size_t buffsize; +} Mbuffer; + +#define luaZ_initbuffer(L, buff) ((buff)->buffer = NULL, (buff)->buffsize = 0) + +#define luaZ_buffer(buff) ((buff)->buffer) +#define luaZ_sizebuffer(buff) ((buff)->buffsize) +#define luaZ_bufflen(buff) ((buff)->n) + +#define luaZ_buffremove(buff,i) ((buff)->n -= (i)) +#define luaZ_resetbuffer(buff) ((buff)->n = 0) + + +#define luaZ_resizebuffer(L, buff, size) \ + ((buff)->buffer = luaM_reallocvchar(L, (buff)->buffer, \ + (buff)->buffsize, size), \ + (buff)->buffsize = size) + +#define luaZ_freebuffer(L, buff) luaZ_resizebuffer(L, buff, 0) + + +LUAI_FUNC void luaZ_init (lua_State *L, ZIO *z, lua_Reader reader, + void *data); +LUAI_FUNC size_t luaZ_read (ZIO* z, void *b, size_t n); /* read next n bytes */ + + + +/* --------- Private Part ------------------ */ + +struct Zio { + size_t n; /* bytes still unread */ + const char *p; /* current position in buffer */ + lua_Reader reader; /* reader function */ + void *data; /* additional data */ + lua_State *L; /* Lua state (for reader) */ +}; + + +LUAI_FUNC int luaZ_fill (ZIO *z); + +#endif diff --git a/EQ2/source/LoginServer/.vs/EQ2 Login/v14/.suo b/EQ2/source/LoginServer/.vs/EQ2 Login/v14/.suo new file mode 100644 index 000000000..6e7fca1da Binary files /dev/null and b/EQ2/source/LoginServer/.vs/EQ2 Login/v14/.suo differ diff --git a/EQ2/source/LoginServer/.vs/EQ2 Login/v16/.suo b/EQ2/source/LoginServer/.vs/EQ2 Login/v16/.suo new file mode 100644 index 000000000..c08c629f5 Binary files /dev/null and b/EQ2/source/LoginServer/.vs/EQ2 Login/v16/.suo differ diff --git a/EQ2/source/LoginServer/.vs/EQ2 Login/v16/Browse.VC.db b/EQ2/source/LoginServer/.vs/EQ2 Login/v16/Browse.VC.db new file mode 100644 index 000000000..392f606f3 Binary files /dev/null and b/EQ2/source/LoginServer/.vs/EQ2 Login/v16/Browse.VC.db differ diff --git a/EQ2/source/LoginServer/Character.cpp b/EQ2/source/LoginServer/Character.cpp new file mode 100644 index 000000000..67423d878 --- /dev/null +++ b/EQ2/source/LoginServer/Character.cpp @@ -0,0 +1,20 @@ +/* + EQ2Emulator: Everquest II Server Emulator + Copyright (C) 2007 EQ2EMulator Development Team (http://www.eq2emulator.net) + + This file is part of EQ2Emulator. + + EQ2Emulator is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + EQ2Emulator is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with EQ2Emulator. If not, see . +*/ +#include "Character.h" \ No newline at end of file diff --git a/EQ2/source/LoginServer/Character.h b/EQ2/source/LoginServer/Character.h new file mode 100644 index 000000000..a0e89a85e --- /dev/null +++ b/EQ2/source/LoginServer/Character.h @@ -0,0 +1,25 @@ +/* + EQ2Emulator: Everquest II Server Emulator + Copyright (C) 2007 EQ2EMulator Development Team (http://www.eq2emulator.net) + + This file is part of EQ2Emulator. + + EQ2Emulator is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + EQ2Emulator is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with EQ2Emulator. If not, see . +*/ +#ifndef _EQ2_CHARACTER_ +#define _EQ2_CHARACTER_ +class Character{ + +}; +#endif diff --git a/EQ2/source/LoginServer/EQ2 Login.ncb b/EQ2/source/LoginServer/EQ2 Login.ncb new file mode 100644 index 000000000..f878e1c48 Binary files /dev/null and b/EQ2/source/LoginServer/EQ2 Login.ncb differ diff --git a/EQ2/source/LoginServer/EQ2 Login.sdf b/EQ2/source/LoginServer/EQ2 Login.sdf new file mode 100644 index 000000000..28fac52cc Binary files /dev/null and b/EQ2/source/LoginServer/EQ2 Login.sdf differ diff --git a/EQ2/source/LoginServer/EQ2 Login.sln b/EQ2/source/LoginServer/EQ2 Login.sln new file mode 100644 index 000000000..48169c736 --- /dev/null +++ b/EQ2/source/LoginServer/EQ2 Login.sln @@ -0,0 +1,25 @@ +Microsoft Visual Studio Solution File, Format Version 11.00 +# Visual Studio 2010 +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "EQ2 Login", "Login.vcxproj", "{BE2C1914-FCCC-4F65-A7DD-105142B36104}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Win32 = Debug|Win32 + EQ2Login|Win32 = EQ2Login|Win32 + MiniLogin Release|Win32 = MiniLogin Release|Win32 + Release|Win32 = Release|Win32 + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {BE2C1914-FCCC-4F65-A7DD-105142B36104}.Debug|Win32.ActiveCfg = EQ2Login|Win32 + {BE2C1914-FCCC-4F65-A7DD-105142B36104}.Debug|Win32.Build.0 = EQ2Login|Win32 + {BE2C1914-FCCC-4F65-A7DD-105142B36104}.EQ2Login|Win32.ActiveCfg = EQ2Login|Win32 + {BE2C1914-FCCC-4F65-A7DD-105142B36104}.EQ2Login|Win32.Build.0 = EQ2Login|Win32 + {BE2C1914-FCCC-4F65-A7DD-105142B36104}.MiniLogin Release|Win32.ActiveCfg = EQ2Login|Win32 + {BE2C1914-FCCC-4F65-A7DD-105142B36104}.MiniLogin Release|Win32.Build.0 = EQ2Login|Win32 + {BE2C1914-FCCC-4F65-A7DD-105142B36104}.Release|Win32.ActiveCfg = EQ2Login|Win32 + {BE2C1914-FCCC-4F65-A7DD-105142B36104}.Release|Win32.Build.0 = EQ2Login|Win32 + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/EQ2/source/LoginServer/EQ2 Login.sln.old b/EQ2/source/LoginServer/EQ2 Login.sln.old new file mode 100644 index 000000000..520191471 --- /dev/null +++ b/EQ2/source/LoginServer/EQ2 Login.sln.old @@ -0,0 +1,22 @@ +Microsoft Visual Studio Solution File, Format Version 10.00 +# Visual Studio 2008 +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "EQ2 Login", "Login.vcproj", "{BE2C1914-FCCC-4F65-A7DD-105142B36104}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Win32 = Debug|Win32 + EQ2Login|Win32 = EQ2Login|Win32 + Release|Win32 = Release|Win32 + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {BE2C1914-FCCC-4F65-A7DD-105142B36104}.Debug|Win32.ActiveCfg = EQ2Login|Win32 + {BE2C1914-FCCC-4F65-A7DD-105142B36104}.Debug|Win32.Build.0 = EQ2Login|Win32 + {BE2C1914-FCCC-4F65-A7DD-105142B36104}.EQ2Login|Win32.ActiveCfg = EQ2Login|Win32 + {BE2C1914-FCCC-4F65-A7DD-105142B36104}.EQ2Login|Win32.Build.0 = EQ2Login|Win32 + {BE2C1914-FCCC-4F65-A7DD-105142B36104}.Release|Win32.ActiveCfg = EQ2Login|Win32 + {BE2C1914-FCCC-4F65-A7DD-105142B36104}.Release|Win32.Build.0 = EQ2Login|Win32 + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/EQ2/source/LoginServer/EQ2 Login.suo b/EQ2/source/LoginServer/EQ2 Login.suo new file mode 100644 index 000000000..d090a9e69 Binary files /dev/null and b/EQ2/source/LoginServer/EQ2 Login.suo differ diff --git a/EQ2/source/LoginServer/EQ2 Login.suo.old b/EQ2/source/LoginServer/EQ2 Login.suo.old new file mode 100644 index 000000000..32ee225a3 Binary files /dev/null and b/EQ2/source/LoginServer/EQ2 Login.suo.old differ diff --git a/EQ2/source/LoginServer/LWorld.cpp b/EQ2/source/LoginServer/LWorld.cpp new file mode 100644 index 000000000..450442741 --- /dev/null +++ b/EQ2/source/LoginServer/LWorld.cpp @@ -0,0 +1,1357 @@ +/* + EQ2Emulator: Everquest II Server Emulator + Copyright (C) 2007 EQ2EMulator Development Team (http://www.eq2emulator.net) + + This file is part of EQ2Emulator. +*/ +#include "../common/debug.h" +#include +#include + +#ifdef WIN32 +#define WIN32_LEAN_AND_MEAN +#include +#include +#include +#else +#include +#include +#include +#include +#include +#include + +#include "../common/unix.h" + +#define SOCKET_ERROR -1 +#define INVALID_SOCKET -1 + +extern int errno; +#endif + +#include "../common/servertalk.h" +#include "LWorld.h" +#include "net.h" +#include "client.h" +#include "../common/packet_dump.h" +#include "login_opcodes.h" +#include "login_structs.h" +#include "LoginDatabase.h" +#include "PacketHeaders.h" +#include "../common/ConfigReader.h" + +#ifdef WIN32 +#define snprintf _snprintf +#define vsnprintf _vsnprintf +#define strncasecmp _strnicmp +#define strcasecmp _stricmp +#endif + +extern ClientList client_list; +extern NetConnection net; +extern LWorldList world_list; +extern LoginDatabase database; +extern ConfigReader configReader; +extern volatile bool RunLoops; + +#include "../common/Log.h" +using namespace std; +LWorld::LWorld(TCPConnection* in_con, bool in_OutgoingLoginUplink, int32 iIP, int16 iPort, bool iNeverKick) { + Link = in_con; + RemoteID = 0; + LinkWorldID = 0; + if (iIP) + ip = iIP; + else + ip = in_con->GetrIP(); + if (iPort) + port = iPort; + else + port = in_con->GetrPort(); + ID = 0; + pClientPort = 0; + memset(account, 0, sizeof(account)); + memset(address, 0, sizeof(address)); + memset(worldname, 0, sizeof(worldname)); + status = 0; + accountid = 0; + admin_id = 0; + IsInit = false; + kicked = false; + pNeverKick = iNeverKick; + pPlaceholder = false; + pshowdown = false; + pConnected = in_con->Connected(); + pReconnectTimer = 0; + pStatsTimer = NULL; + isAuthenticated = false; + + if (in_OutgoingLoginUplink) { + pClientPort = port; + ptype = Login; + OutgoingUplink = true; + if (net.GetLoginMode() == Mesh) { + pReconnectTimer = new Timer(INTERSERVER_TIMER); + pReconnectTimer->Trigger(); + } + } + else { + ptype = UnknownW; + OutgoingUplink = false; + } + + struct in_addr in; + in.s_addr = GetIP(); + strcpy(address, inet_ntoa(in)); + isaddressip = true; + + num_players = 0; + num_zones = 0; +} + +LWorld::LWorld(int32 in_accountid, char* in_accountname, char* in_worldname, int32 in_admin_id) { + pPlaceholder = true; + Link = 0; + ip = 0; + port = 0; + ID = 0; + pClientPort = 0; + memset(account, 0, sizeof(account)); + memset(address, 0, sizeof(address)); + memset(worldname, 0, sizeof(worldname)); + status = 0; + accountid = in_accountid; + admin_id = in_admin_id; + IsInit = false; + kicked = false; + pNeverKick = false; + pshowdown = true; + RemoteID = 0; + LinkWorldID = 0; + OutgoingUplink = false; + pReconnectTimer = 0; + pConnected = false; + + pStatsTimer = NULL; + + ptype = World; + strcpy(account, in_accountname); + strcpy(worldname, in_worldname); + + strcpy(address, "none"); + + isaddressip = true; + + num_players = 0; + num_zones = 0; +} + +LWorld::LWorld(TCPConnection* in_RemoteLink, int32 in_ip, int32 in_RemoteID, int32 in_accountid, char* in_accountname, char* in_worldname, char* in_address, sint32 in_status, int32 in_adminid, bool in_showdown, int8 in_authlevel, bool in_placeholder, int32 iLinkWorldID) { + Link = in_RemoteLink; + RemoteID = in_RemoteID; + LinkWorldID = iLinkWorldID; + ip = in_ip; + port = 0; + ID = 0; + pClientPort = 0; + memset(account, 0, sizeof(account)); + memset(address, 0, sizeof(address)); + memset(worldname, 0, sizeof(worldname)); + status = in_status; + accountid = in_accountid; + admin_id = in_adminid; + IsInit = true; + kicked = false; + pNeverKick = false; + pPlaceholder = in_placeholder; + pshowdown = in_showdown; + OutgoingUplink = false; + pReconnectTimer = 0; + pConnected = true; + pStatsTimer = NULL; + + ptype = World; + strcpy(account, in_accountname); + strcpy(worldname, in_worldname); + + strcpy(address, in_address); + + isaddressip = false; + + num_players = 0; + num_zones = 0; +} + +LWorld::~LWorld() { + + safe_delete ( pStatsTimer ); + num_zones = 0; + num_players = 0; + database.UpdateWorldServerStats(this, -4); + + if (ptype == World && RemoteID == 0) { + if (net.GetLoginMode() != Mesh || (!pPlaceholder && IsInit)) { + ServerPacket* pack = new ServerPacket(ServerOP_WorldListRemove, sizeof(int32)); + *((int32*) pack->pBuffer) = GetID(); + world_list.SendPacketLogin(pack); + delete pack; + } + } + + if (Link != 0 && RemoteID == 0) { + world_list.RemoveByLink(Link, 0, this); + if (OutgoingUplink) + delete Link; + else + Link->Free(); + } + Link = 0; + safe_delete(pReconnectTimer); + + world_list.RemoveByID ( this->GetID ( ) ); +} + +bool LWorld::Process() { + bool ret = true; + if (Link == 0) + return true; + if (Link->Connected()) { + if (!pConnected) { + pConnected = true; + } + } + else { + pConnected = false; + if (pReconnectTimer) { + if (pReconnectTimer->Check() && Link->ConnectReady()) { + pReconnectTimer->Start(pReconnectTimer->GetTimerTime() + (rand()%15000), false); + } + return true; + } + return false; + } + if (RemoteID != 0) + return true; + + if(pStatsTimer && pStatsTimer->Check()) + database.UpdateWorldServerStats(this, GetStatus()); + + ServerPacket* pack = 0; + while (ret && (pack = Link->PopPacket())) { + + // this stops connections from sending invalid packets without first authenticating + // with the login server to show it is a legit server + if(!isAuthenticated && pack->opcode != ServerOP_LSInfo) + { + Kick("This connection has not authenticated."); + break; + } + + switch(pack->opcode) { + case 0: + break; + case ServerOP_KeepAlive: { + // ignore this + break; + } + case ServerOP_LSFatalError: { + net.Uplink_WrongVersion = true; + ret = false; + kicked = true; + break; + } + case ServerOP_CharacterCreate: { + WorldCharNameFilterResponse_Struct* wcnfr = (WorldCharNameFilterResponse_Struct*) pack->pBuffer; + + Client* client = client_list.FindByLSID(wcnfr->account_id); + if(!client){ + if(wcnfr->account_id == 0){ + client_list.FindByCreateRequest(); + } + break; + } + if(wcnfr->response == 1) + { + client->CharacterApproved(GetID(),wcnfr->char_id); + } + else + { + client->CharacterRejected(wcnfr->response); + } + break; + } + case ServerOP_UsertoWorldReq: { + UsertoWorldRequest_Struct* ustwr = (UsertoWorldRequest_Struct*) pack->pBuffer; + if (ustwr->ToID) { + LWorld* world = world_list.FindByID(ustwr->ToID); + if (!world) { + break; + } + if (this->GetType() != Login) { + break; + } + ustwr->FromID = this->GetID(); + world->SendPacket(pack); + } + break; + } + case ServerOP_UsertoWorldResp: { + if (pack->size != sizeof(UsertoWorldResponse_Struct)) + break; + + UsertoWorldResponse_Struct* seps = (UsertoWorldResponse_Struct*) pack->pBuffer; + if (seps->ToID) { + LWorld* world = world_list.FindByID(seps->ToID); + if (world) { + seps->ToID = world->GetRemoteID(); + world->SendPacket(pack); + } + } + else { + Client* client = 0; + client = client_list.FindByLSID(seps->lsaccountid); + if(client == 0) + break; + if(this->GetID() != seps->worldid && this->GetType() != Login) + break; + + client->WorldResponse(GetID(),seps->response, seps->ip_address, seps->port, seps->access_key); + } + break; + } + case ServerOP_CharTimeStamp: { // This is being sent to synch a new timestamp on the login server + if(pack->size != sizeof(CharacterTimeStamp_Struct)) + break; + + CharacterTimeStamp_Struct* cts = (CharacterTimeStamp_Struct*) pack->pBuffer; + + if(!database.UpdateCharacterTimeStamp(cts->account_id,cts->char_id,cts->unix_timestamp,GetAccountID())) + printf("TimeStamp update error with character id %i of account id %i on server %i\n",cts->char_id,cts->account_id,GetAccountID()); + + //Todo: Synch with the other login servers + + break; + } + case ServerOP_GetTableData:{ + Kick("This is not an update server, update your LoginServer.ini file."); + break; + } + case ServerOP_GetTableQuery:{ + Kick("This is not an update server, update your LoginServer.ini file."); + break; + } + case ServerOP_GetLatestTables:{ + Kick("This is not an update server, update your LoginServer.ini file."); + break; + } + case ServerOP_ZoneUpdate:{ + if(pack->size > CHARZONESTRUCT_MAXSIZE) + break; + CharZoneUpdate_Struct* czu = (CharZoneUpdate_Struct*)pack->pBuffer; + database.UpdateCharacterZone(czu->account_id, czu->char_id, czu->zone_id, GetAccountID()); + break; + } + case ServerOP_RaceUpdate: { + + if(pack->size != sizeof(RaceUpdate_Struct)) + break; + + RaceUpdate_Struct* ru = (RaceUpdate_Struct*) pack->pBuffer; + database.UpdateCharacterRace(ru->account_id , ru->char_id , ru->model_type , ru->race , this->GetAccountID ( )); + break; + } + case ServerOP_BasicCharUpdate: { + if(pack->size != sizeof(CharDataUpdate_Struct)) + break; + + CharDataUpdate_Struct* cdu = (CharDataUpdate_Struct*) pack->pBuffer; + + switch(cdu->update_field) + { + case LEVEL_UPDATE_FLAG: + { + database.UpdateCharacterLevel(cdu->account_id,cdu->char_id,cdu->update_data,this->GetAccountID()); + break; + } + case CLASS_UPDATE_FLAG: + { + database.UpdateCharacterClass(cdu->account_id,cdu->char_id,cdu->update_data,this->GetAccountID()); + break; + } + case GENDER_UPDATE_FLAG: + { + database.UpdateCharacterGender(cdu->account_id,cdu->char_id,cdu->update_data,this->GetAccountID()); + break; + } + case DELETE_UPDATE_FLAG: + { + if(cdu->update_field == 1) + database.DeleteCharacter(cdu->account_id,cdu->char_id,this->GetAccountID()); + break; + } + } + break; + } + case ServerOP_LSInfo: { + if (pack->size != sizeof(ServerLSInfo_Struct)) { + this->Kick(ERROR_BADVERSION); + ret = false; + struct in_addr in; + in.s_addr = GetIP(); + } + else { + ServerLSInfo_Struct* lsi = (ServerLSInfo_Struct*) pack->pBuffer; + if (strcmp(lsi->protocolversion, EQEMU_PROTOCOL_VERSION) != 0 || !database.CheckVersion(lsi->serverversion)) { + this->Kick(ERROR_BADVERSION); + ret = false; + struct in_addr in; + in.s_addr = GetIP(); + } + else if (!SetupWorld(lsi->name, lsi->address, lsi->account, lsi->password, lsi->serverversion)) { + this->Kick(ERROR_BADPASSWORD); + ret = false; + struct in_addr in; + in.s_addr = GetIP(); + } + else{ + isAuthenticated = true; + devel_server = (lsi->servertype == 4); + } + } + break; + } + case ServerOP_LSStatus: { + ServerLSStatus_Struct* lss = (ServerLSStatus_Struct*) pack->pBuffer; + + if(lss->num_players > 5000 || lss->num_zones > 500) { + this->Kick("Your server has exceeded a number of players and/or zone limit."); + ret = false; + break; + } + UpdateStatus(lss->status, lss->num_players, lss->num_zones); + break; + } + case ServerOP_SystemwideMessage: { + if (this->GetType() == Login) { + // no looping plz =p + //world_list.SendPacket(pack, this); + } + else if (this->GetType() == Chat) { + world_list.SendPacket(pack); + } + else { + } + break; + } + case ServerOP_ListWorlds: { + if (pack->size <= 1 || pack->pBuffer[pack->size - 1] != 0) { + break; + } + world_list.SendWorldStatus(this, (char*) pack->pBuffer); + break; + } + case ServerOP_WorldListUpdate: { + if (this->GetType() != Login) { + break; + } + if (pack->size != sizeof(ServerSyncWorldList_Struct)) { + break; + } + ServerSyncWorldList_Struct* sswls = (ServerSyncWorldList_Struct*) pack->pBuffer; + if (!CheckServerName(sswls->name)) { + struct in_addr in; + in.s_addr = sswls->ip; + break; // Someone needs to tell the other login server to update it's exe! + } + LWorld* world = world_list.FindByLink(this->Link, sswls->RemoteID); + if (world) { + world->SetRemoteInfo(sswls->ip, sswls->accountid, sswls->account, sswls->name, sswls->address, sswls->status, sswls->adminid, sswls->num_players, sswls->num_zones); + } + else { + world = world_list.FindByAccount(sswls->accountid, World); + if (world == 0 || sswls->placeholder == false) { + if (world) { +#ifdef _DEBUG + cout << "Kick(" << world->GetID() << ") in ServerOP_WorldListUpdate" << endl; +#endif + world->Kick(); + } + world = new LWorld(this->Link, sswls->ip, sswls->RemoteID, sswls->accountid, sswls->account, sswls->name, sswls->address, sswls->status, sswls->adminid, sswls->showdown, sswls->authlevel, sswls->placeholder, this->GetID()); + LWorld* world2=world_list.FindByID(sswls->RemoteID); + if(!world2) + world_list.Add(world); + } + } + sswls->RemoteID = world->GetID(); + if (net.GetLoginMode() != Mesh) + world_list.SendPacketLogin(pack, this); + cout << "Got world update for '" << sswls->name << "', #" << world->GetID() << endl; + break; + } + case ServerOP_WorldListRemove: { + if (this->GetType() != Login) { + // cout << "Error: ServerOP_WorldListRemove from a non-login connection? WTF!" << endl; + break; + } + if (pack->size != sizeof(int32)) { + // cout << "Wrong size on ServerOP_WorldListRemove. Got: " << pack->size << ", Expected: " << sizeof(int32) << endl; + break; + } + cout << "Got world remove for remote #" << *((int32*) pack->pBuffer) << endl; + if ((*((int32*) pack->pBuffer)) > 0) { + LWorld* world = world_list.FindByLink(this->GetLink(), *((int32*) pack->pBuffer)); + if (world && world->GetRemoteID() != 0) { + *((int32*) pack->pBuffer) = world->GetID(); + if (net.GetLoginMode() != Mesh) + world_list.SendPacketLogin(pack, this); + world_list.RemoveByID(*((int32*) pack->pBuffer)); + } + } + else { + // cout << "Error: ServerOP_WorldListRemove: ID = 0? ops!" << endl; + } + break; + } + case ServerOP_TriggerWorldListRefresh: { + world_list.UpdateWorldList(); + if (net.GetLoginMode() != Mesh) + world_list.SendPacketLogin(pack, this); + break; + } + case ServerOP_ZoneUpdates:{ + pack->Inflate(); + ZoneUpdateList_Struct* updates = 0; + if(pack->size >= sizeof(ZoneUpdateList_Struct) && ((ZoneUpdateList_Struct*)pack->pBuffer)->total_updates <= MAX_UPDATE_COUNT){ + updates = (ZoneUpdateList_Struct*)pack->pBuffer; + ZoneUpdate_Struct* zone = 0; + int32 pos = sizeof(ZoneUpdateList_Struct); + sint16 num_updates = 0; + map zone_updates; + LoginZoneUpdate update; + while(pos < pack->size && num_updates < updates->total_updates){ + zone = (ZoneUpdate_Struct*)(pack->pBuffer+pos); + if((pos + zone->zone_name_length + zone->zone_desc_length + sizeof(ZoneUpdate_Struct)) <= pack->size){ + update.name = string(zone->data, zone->zone_name_length); + update.description = string(zone->data + zone->zone_name_length, zone->zone_desc_length); + pos += sizeof(ZoneUpdate_Struct) + zone->zone_name_length + zone->zone_desc_length; + num_updates++; + zone_updates[zone->zone_id] = update; + } + else + break; + } + if(zone_updates.size() == updates->total_updates) + world_list.AddServerZoneUpdates(this, zone_updates); + else + cout << "Error processing zone updates for server: " << GetAccount() << endl; + } + else + Kick("Possible Hacking Attempt"); + break; + } + case ServerOP_BugReport:{ + if(pack->size == sizeof(BugReport)){ + BugReport* report = (BugReport*)pack->pBuffer; + database.SaveBugReport(GetAccountID(), report->category, report->subcategory, report->causes_crash, report->reproducible, report->summary, report->description, report->version, report->player, report->account_id, report->spawn_name, report->spawn_id, report->zone_id); + } + break; + } + case ServerOP_EncapPacket: { + if (this->GetType() != Login) { + // cout << "Error: ServerOP_EncapPacket from a non-login connection? WTF!" << endl; + break; + } + ServerEncapPacket_Struct* seps = (ServerEncapPacket_Struct*) pack->pBuffer; + if (seps->ToID == 0xFFFFFFFF) { // Broadcast + ServerPacket* inpack = new ServerPacket(seps->opcode); + inpack->size = seps->size; + // Little trick here to save a memcpy, be careful if you change this any + inpack->pBuffer = seps->data; + world_list.SendPacketLocal(inpack, this); + inpack->pBuffer = 0; + delete inpack; + } + else { + LWorld* world = world_list.FindByID(seps->ToID); + if (world) { + ServerPacket* inpack = new ServerPacket(seps->opcode); + inpack->size = seps->size; + // Little trick here to save a memcpy, be careful if you change this any + inpack->pBuffer = seps->data; + world->SendPacket(inpack); + inpack->pBuffer = 0; + delete inpack; + } + } + if (net.GetLoginMode() != Mesh) + world_list.SendPacketLogin(pack, this); + break; + } + default: + { + cout << "Unknown LoginSOPcode: 0x" << hex << (int)pack->opcode << dec; + cout << " size:" << pack->size << " from " << GetAccount() << endl; + DumpPacket(pack->pBuffer, pack->size); + Kick("Possible Hacking Attempt"); + break; + } + } + delete pack; + } + return ret; +} + +void LWorld::SendPacket(ServerPacket* pack) { + if (Link == 0) + return; + if (RemoteID) { + ServerPacket* outpack = new ServerPacket(ServerOP_EncapPacket, sizeof(ServerEncapPacket_Struct) + pack->size); + ServerEncapPacket_Struct* seps = (ServerEncapPacket_Struct*) outpack->pBuffer; + seps->ToID = RemoteID; + seps->opcode = pack->opcode; + seps->size = pack->size; + memcpy(seps->data, pack->pBuffer, pack->size); + Link->SendPacket(outpack); + delete outpack; + } + else { + Link->SendPacket(pack); + } +} + +void LWorld::Message(char* to, char* message, ...) { + va_list argptr; + char buffer[256]; + + va_start(argptr, message); + vsnprintf(buffer, 256, message, argptr); + va_end(argptr); + + ServerPacket* pack = new ServerPacket(ServerOP_EmoteMessage, sizeof(ServerEmoteMessage_Struct) + strlen(buffer) + 1); + ServerEmoteMessage_Struct* sem = (ServerEmoteMessage_Struct*) pack->pBuffer; + strcpy(sem->to, to); + strcpy(sem->message, buffer); + SendPacket(pack); + delete pack; +} + +void LWorld::Kick(char* message, bool iSetKickedFlag) { + if (iSetKickedFlag) + kicked = true; + if (message) { + ServerPacket* pack = new ServerPacket(ServerOP_LSFatalError, strlen(message) + 1); + strcpy((char*) pack->pBuffer, message); + SendPacket(pack); + delete pack; + } + if (Link && GetRemoteID() == 0) + Link->Disconnect(); +} +bool LWorld::CheckServerName(char* name) { + if (strlen(name) < 10) + return false; + for (int i=0; i= 'a' && name[i] <= 'z') || (name[i] >= 'A' && name[i] <= 'Z') || (name[i] >= '0' && name[i] <= '9') || name[i] == ' ' || name[i] == '\'' || name[i] == '-' || name[i] == '(' || name[i] == ')' || name[i] == '[' || name[i] == ']' || name[i] == '/' || name[i] == '.' || name[i] == ',' || name[i] == '_' || name[i] == '+' || name[i] == '=' || name[i] == ':' || name[i] == '~')) + return false; + } + return true; +} +bool LWorld::SetupWorld(char* in_worldname, char* in_worldaddress, char* in_account, char* in_password, char* in_version) { + if (strlen(in_worldaddress) > 3) { + isaddressip = false; + strcpy(address, in_worldaddress); + } + if (strlen(in_worldname) > 3) { + int32 id = database.CheckServerAccount(in_account, in_password); + + if(id == 0) + return false; + LWorld* world = world_list.FindByID(id); + if(world) + world->Kick("Ghost Kick!"); + + ID = id; + accountid = id; + char* name = database.GetServerAccountName(id); + if(name) + snprintf(worldname, (sizeof(worldname)) - 1, "%s", name); + else{ //failed to get account + account[0] = 0; + IsInit = false; + this->Kick ( "Could not load server information." ); + return false; + } + //world_list.KickGhostIP(GetIP(), this); + account[0] = 0; + IsInit = true; + ptype = World; + world_list.SendWorldChanged(id, true); + } + else { + // name too short + account[0] = 0; + IsInit = false; + return false; + } + + pStatsTimer = new Timer ( 60000 ); + pStatsTimer->Start ( 60000 ); + + return true; +} +void LWorldList::SendWorldChanged(int32 server_id, bool sendtoallclients, Client* sendto){ + EQ2Packet* outapp = new EQ2Packet(OP_WorldStatusChangeMsg, 0, sizeof(LS_WorldStatusChanged)); + LS_WorldStatusChanged* world_changed = (LS_WorldStatusChanged*)outapp->pBuffer; + + world_changed->server_id = server_id; + LWorld* world = world_list.FindByID(server_id); + if(!world || world->ShowDown()) + world_changed->up = 0; + else + world_changed->up = 1; + if(sendtoallclients || sendto == 0) + client_list.SendPacketToAllClients(outapp); + else + sendto->QueuePacket(outapp); + world_list.SetUpdateServerList(true); +} +void LWorld::UpdateWorldList(LWorld* to) { + world_list.SetUpdateServerList( true ); +} + +void LWorld::ChangeToPlaceholder() { + ip = 0; + status = -1; + pPlaceholder = true; + if (Link != 0 && RemoteID == 0) { + Link->Disconnect(); + } + UpdateWorldList(); +} + +void LWorld::SetRemoteInfo(int32 in_ip, int32 in_accountid, char* in_account, char* in_name, char* in_address, int32 in_status, int32 in_adminid, sint32 in_players, sint32 in_zones) { + ip = in_ip; + accountid = in_accountid; + strcpy(account, in_account); + strcpy(worldname, in_name); + strcpy(address, in_address); + status = in_status; + admin_id = in_adminid; + num_players = in_players; + num_zones = in_zones; +} + + +LWorldList::LWorldList() { + server_update_thread = true; + NextID = 1; + tcplistener = new TCPServer(net.GetPort(), true); + if (net.GetLoginMode() == Slave) + OutLink = new TCPConnection(true); + else + OutLink = 0; + + ServerListData = NULL; + UpdateServerList = true; + #ifdef WIN32 + _beginthread(ServerUpdateLoop, 0, this); + #else + pthread_t thread; + pthread_create(&thread, NULL, &ServerUpdateLoop, this); + #endif +} + +LWorldList::~LWorldList() { + server_update_thread = false; + while(!server_update_thread){ + Sleep(100); + } + safe_delete(tcplistener); + safe_delete(OutLink); +} + +void LWorldList::Shutdown() { + LinkedListIterator iterator(list); + + iterator.Reset(); + while(iterator.MoreElements()) + { + iterator.RemoveCurrent ( ); + } + + safe_delete(tcplistener); +} + +void LWorldList::Add(LWorld* worldserver) { + LWorld* worldExist = FindByID(worldserver->GetID ( ) ); + if( worldExist ) + { + worldExist->Kick(); + MWorldMap.writelock(); + worldmap.erase(worldExist->GetID()); + MWorldMap.releasewritelock(); + safe_delete(worldExist); + } + MWorldMap.writelock(); + worldmap[worldserver->GetID()] = worldserver; + MWorldMap.releasewritelock(); + database.ResetWorldServerStatsConnectedTime(worldserver); + database.UpdateWorldIPAddress(worldserver->GetID(), worldserver->GetIP()); +} + +void LWorldList::AddInitiateWorld ( LWorld* world ) +{ + list.Insert ( world ); +} + +void LWorldList::KickGhostIP(int32 ip, LWorld* NotMe, int16 iClientPort) { + if (ip == 0) + return; + + map::iterator map_list; + MWorldMap.readlock(); + for( map_list = worldmap.begin(); map_list != worldmap.end(); map_list++ ) { + LWorld* world = map_list->second; + if (!world->IsKicked() && world->GetIP() == ip && world != NotMe) { + if ((iClientPort == 0 && world->GetType() == World) || (iClientPort != 0 && world->GetClientPort() == iClientPort)) { + struct in_addr in; + in.s_addr = world->GetIP(); + // cout << "Removing GhostIP LWorld(" << world->GetID() << ") from ip: " << inet_ntoa(in) << " port: " << (int16)(world->GetPort()); + if (!world->Connected()) + // cout << " (it wasnt connected)"; + // cout << endl; + if (NotMe) { + in.s_addr = NotMe->GetIP(); + cout << "NotMe(" << NotMe->GetID() << ") = " << inet_ntoa(in) << ":" << NotMe->GetPort() << " (" << NotMe->GetClientPort() << ")" << endl; + } + world->Kick("Ghost IP kick"); + } + } + } + MWorldMap.releasereadlock(); +} + +void LWorldList::KickGhost(ConType in_type, int32 in_accountid, LWorld* ButNotMe) { + map::iterator map_list; + MWorldMap.readlock(); + for( map_list = worldmap.begin(); map_list != worldmap.end(); map_list++ ) { + LWorld* world = map_list->second; + if (!world->IsKicked() && world->GetType() == in_type && world != ButNotMe && (in_accountid == 0 || world->GetAccountID() == in_accountid)) { + if (world->GetIP() != 0) { + struct in_addr in; + in.s_addr = world->GetIP(); + // cout << "Removing GhostAcc LWorld(" << world->GetID() << ") from ip: " << inet_ntoa(in) << " port: " << (int16)(world->GetPort()) << endl; + } + if (world->GetType() == Login && world->IsOutgoingUplink()) { + world->Kick("Ghost Acc Kick", false); + // cout << "softkick" << endl; + } + else + world->Kick("Ghost Acc Kick"); + } + } + MWorldMap.releasereadlock(); +} + +void LWorldList::UpdateWorldStats(){ + map::iterator map_list; + MWorldMap.readlock(); + for(map_list = worldmap.begin(); map_list != worldmap.end(); map_list++) { + LWorld* world = map_list->second; + if(world && world->GetAccountID() > 0) + database.UpdateWorldServerStats(world, world->GetStatus()); + } + MWorldMap.releasereadlock(); +} + +void LWorldList::Process() { + TCPConnection* newtcp = 0; + LWorld* newworld = 0; + + LinkedListIterator iterator(list); + + iterator.Reset(); + while(iterator.MoreElements()) + { + if(iterator.GetData( )->GetID ( ) > 0 ) + { + LWorld* world = iterator.GetData ( ); + iterator.RemoveCurrent ( false ); + Add( world ); + } + else + { + if(! iterator.GetData ( )->Process ( ) ) + iterator.RemoveCurrent ( ); + else + iterator.Advance(); + } + } + + while ((newtcp = tcplistener->NewQueuePop())) { + newworld = new LWorld(newtcp); + newworld->SetID(0); + AddInitiateWorld(newworld); + struct in_addr in; + in.s_addr = newtcp->GetrIP(); + LogWrite(LOGIN__INFO, 0, "Login", "New Server connection: %s port %i", inet_ntoa(in), ntohs(newtcp->GetrPort())); + net.numservers++; + net.UpdateWindowTitle(); + } + map::iterator map_list; + for( map_list = worldmap.begin(); map_list != worldmap.end(); ) { + LWorld* world = map_list->second; + + int32 account_id = world->GetAccountID(); + + if (world->IsKicked() && !world->IsNeverKick()) { + map_list++; + worldmap.erase ( account_id ); + net.numservers--; + net.UpdateWindowTitle(); + safe_delete ( world ); + continue; + } + else if (!world->Process()) { + struct in_addr in; + in.s_addr = world->GetIP(); + if (world->GetAccountID() == 0 || !(world->ShowDown()) || world->GetType() == Chat) { + map_list++; + worldmap.erase ( account_id ); + + net.numservers--; + net.UpdateWindowTitle(); + if(account_id > 0){ + LWorld* world2 = FindByID(account_id); + if(world2) + world2->ShowDownActive(true); + } + SendWorldChanged(account_id, true); + safe_delete ( world ); + continue; + } + else { + world->ChangeToPlaceholder(); + } + } + map_list++; + } +} + +// Sends packet to all World and Chat servers, local and remote (but not to remote login server's ::Process()) +void LWorldList::SendPacket(ServerPacket* pack, LWorld* butnotme) { + map::iterator map_list; + for( map_list = worldmap.begin(); map_list != worldmap.end(); map_list++) { + LWorld* world = map_list->second; + if (world != butnotme) { + if (world->GetType() == Login) { + ServerPacket* outpack = new ServerPacket(ServerOP_EncapPacket, sizeof(ServerEncapPacket_Struct) + pack->size); + ServerEncapPacket_Struct* seps = (ServerEncapPacket_Struct*) outpack->pBuffer; + seps->ToID = 0xFFFFFFFF; + seps->opcode = pack->opcode; + seps->size = pack->size; + memcpy(seps->data, pack->pBuffer, pack->size); + world->SendPacket(outpack); + delete outpack; + } + else if (world->GetRemoteID() == 0) { + world->SendPacket(pack); + } + } + } +} + +// Sends a packet to every local TCP Connection, all types +void LWorldList::SendPacketLocal(ServerPacket* pack, LWorld* butnotme) { + map::iterator map_list; + for( map_list = worldmap.begin(); map_list != worldmap.end(); map_list++) { + LWorld* world = map_list->second; + if (world != butnotme && world->GetRemoteID() == 0) { + world->SendPacket(pack); + } + } +} + +// Sends the packet to all login servers +void LWorldList::SendPacketLogin(ServerPacket* pack, LWorld* butnotme) { + map::iterator map_list; + for( map_list = worldmap.begin(); map_list != worldmap.end(); map_list++ ) { + LWorld* world = map_list->second; + if (world != butnotme && world->GetType() == Login) { + world->SendPacket(pack); + } + } +} + +void LWorldList::UpdateWorldList(LWorld* to) { + map::iterator map_list; + for( map_list = worldmap.begin(); map_list != worldmap.end(); map_list++) { + LWorld* world = map_list->second; + if (net.GetLoginMode() != Mesh || world->GetRemoteID() == 0) + world->UpdateWorldList(to); + } +} + +LWorld* LWorldList::FindByID(int32 LWorldID) { + if(worldmap.count(LWorldID) > 0) + return worldmap[LWorldID]; + return 0; +} + +LWorld* LWorldList::FindByIP(int32 ip) { + map::iterator map_list; + LWorld* world = 0; + LWorld* ret = 0; + MWorldMap.readlock(); + for( map_list = worldmap.begin(); map_list != worldmap.end(); map_list++) { + world = map_list->second; + if (world->GetIP() == ip){ + ret = world; + break; + } + } + MWorldMap.releasereadlock(); + return ret; +} + +LWorld* LWorldList::FindByAddress(char* address) { + map::iterator map_list; + LWorld* world = 0; + LWorld* ret = 0; + MWorldMap.readlock(); + for( map_list = worldmap.begin(); map_list != worldmap.end(); map_list++) { + world = map_list->second; + if (strcasecmp(world->GetAddress(), address) == 0){ + ret = world; + break; + } + } + MWorldMap.releasereadlock(); + return ret; +} + +LWorld* LWorldList::FindByLink(TCPConnection* in_link, int32 in_id) { + if (in_link == 0) + return 0; + LWorld* world = 0; + LWorld* ret = 0; + map::iterator map_list; + MWorldMap.readlock(); + for( map_list = worldmap.begin(); map_list != worldmap.end(); map_list++) { + world = map_list->second; + if (world->GetLink() == in_link && world->GetRemoteID() == in_id){ + ret = world; + break; + } + } + MWorldMap.releasereadlock(); + return ret; +} + +LWorld* LWorldList::FindByAccount(int32 in_accountid, ConType in_type) { + if (in_accountid == 0) + return 0; + LWorld* world = 0; + LWorld* ret = 0; + map::iterator map_list; + MWorldMap.readlock(); + for( map_list = worldmap.begin(); map_list != worldmap.end(); map_list++) { + world = map_list->second; + if (world->GetAccountID() == in_accountid && world->GetType() == in_type){ + ret = world; + break; + } + } + MWorldMap.releasereadlock(); + return ret; +} + +int8 LWorld::GetWorldStatus(){ + if(IsDevelServer() && IsLocked() == false) + return 1; + else if(IsInit && IsLocked() == false) + return 0; + else + return 2; +} + +void LWorld::SendDeleteCharacter ( int32 char_id , int32 account_id ) +{ + ServerPacket* outpack = new ServerPacket(ServerOP_BasicCharUpdate, sizeof(CharDataUpdate_Struct)); + CharDataUpdate_Struct* cdu = (CharDataUpdate_Struct*)outpack->pBuffer; + cdu->account_id = account_id; + cdu->char_id = char_id; + cdu->update_field = DELETE_UPDATE_FLAG; + cdu->update_data = 1; + SendPacket(outpack); +} + +vector* LWorldList::GetServerListUpdate(int16 version){ + vector* ret = new vector; + map::iterator map_list; + PacketStruct* packet = 0; + MWorldMap.readlock(); + for( map_list = worldmap.begin(); map_list != worldmap.end(); map_list++) { + LWorld* world = map_list->second; + if ((world->IsInit || (world->ShowDown() && world->ShowDownActive())) && world->GetType() == World) { + packet = configReader.getStruct("LS_WorldUpdate", version); + if(packet){ + packet->setDataByName("server_id", world->GetID()); + packet->setDataByName("up", 1); + if(world->IsLocked()) + packet->setDataByName("locked", 1); + ret->push_back(packet); + } + } + } + MWorldMap.releasereadlock(); + return ret; +} + +EQ2Packet* LWorldList::MakeServerListPacket(int8 lsadmin, int16 version) { + + // if the latest world list has already been loaded, just return the string + if(!UpdateServerList && ServerListData) + return ServerListData; + + MWorldMap.readlock(); + + LWorld* world = 0; + uchar num_servers[2]; + int32 ServerNum = 0; + /* while(iterator.MoreElements()){ + world = iterator.GetData(); + if ((world->IsInit || (world->ShowDown() && world->ShowDownActive())) && world->GetType() == World) + ServerNum++; + iterator.Advance(); + } + ServerNum+=3; + */ + + PacketStruct* packet = configReader.getStruct("LS_WorldList", version); + packet->setArrayLengthByName("num_worlds", 1); + + string world_data; + map::iterator map_list; + for( map_list = worldmap.begin(); map_list != worldmap.end(); map_list++) { + LWorld* world = map_list->second; + if ((world->IsInit || (world->ShowDown() && world->ShowDownActive())) && world->GetType() == World) { + ServerNum++; + packet->setArrayDataByName("id", world->GetID(), ServerNum-1); + packet->setArrayDataByName("allowed_races", 0x000FFFFF, ServerNum-1); //change later + packet->setArrayDataByName("number_online_flag", 1, ServerNum-1); + packet->setArrayDataByName("num_players", world->GetPlayerNum(), ServerNum-1); + packet->setArrayDataByName("name", world->GetName(), ServerNum-1); + packet->setArrayDataByName("name2", world->GetName(), ServerNum-1); + packet->setArrayDataByName("feature_set",0, ServerNum-1); + packet->setArrayDataByName("load", 2, ServerNum-1); + if(world->IsLocked()) + packet->setArrayDataByName("locked", 1); + + if(world->ShowDown()) + packet->setArrayDataByName("tag", 0); + else + packet->setArrayDataByName("tag", 1); + } + } + + EQ2Packet* pack = packet->serialize(); + ServerListData = pack; + MWorldMap.releasereadlock(); + + SetUpdateServerList( false ); + + return ServerListData; +} + +void LWorldList::SendWorldStatus(LWorld* chat, char* adminname) { + struct in_addr in; + + int32 count = 0; + map::iterator map_list; + for( map_list = worldmap.begin(); map_list != worldmap.end(); map_list++) { + LWorld* world = map_list->second; + if (world->GetIP() != 0 && world->GetType() == World) { + chat->Message(adminname, "Name: %s", world->GetName()); + in.s_addr = world->GetIP(); + if (world->GetAccountID() != 0) { + chat->Message(adminname, " Account: %s", world->GetAccount()); + } + chat->Message(adminname, " Number of Zones: %i", world->GetZoneNum()); + chat->Message(adminname, " Number of Players: %i", world->GetPlayerNum()); + chat->Message(adminname, " IP: %s", inet_ntoa(in)); + if (!world->IsAddressIP()) { + chat->Message(adminname, " Address: %s", world->GetAddress()); + } + count++; + } + } + chat->Message(adminname, "%i worlds listed.", count); +} + +void LWorldList::RemoveByLink(TCPConnection* in_link, int32 in_id, LWorld* ButNotMe) { + if (in_link == 0) + return; + map::iterator map_list; + for( map_list = worldmap.begin(); map_list != worldmap.end(); map_list++) { + LWorld* world = map_list->second; + if (world != ButNotMe && world->GetLink() == in_link && (in_id == 0 || world->GetRemoteID() == in_id)) { + // world->Link = 0; + map_list++; + worldmap.erase ( world->GetID ( ) ); + safe_delete ( world ); + continue; + } + } +} + +void LWorldList::RemoveByID(int32 in_id) { + if (in_id == 0) + return; + + LWorld* existWorld = FindByID(in_id); + if ( existWorld != NULL ) + { + MWorldMap.writelock(); + worldmap.erase ( in_id ); + MWorldMap.releasewritelock(); + safe_delete ( existWorld ); + } +} + +bool LWorldList::Init() { + + database.ResetWorldStats ( ); + + if (!tcplistener->IsOpen()) { + return tcplistener->Open(net.GetPort()); + } + + return false; +} + +void LWorldList::InitWorlds(){ + vector server_list; + database.GetServerAccounts(&server_list); + vector::iterator iter; + int i = 0; + for(iter = server_list.begin(); iter != server_list.end(); iter++, i++){ + LWorld* world = FindByID(server_list[i]->GetAccountID()); + if(!world){ + server_list[i]->ShowDown(true); + server_list[i]->ShowDownActive(true); + server_list[i]->SetID ( server_list[i]->GetAccountID ( ) ); + Add ( server_list[i] ); + } + } +} + +void LWorldList::ListWorldsToConsole() { + struct in_addr in; + + cout << "World List:" << endl; + cout << "============================" << endl; + map::iterator map_list; + for( map_list = worldmap.begin(); map_list != worldmap.end(); map_list++) { + LWorld* world = map_list->second; + in.s_addr = world->GetIP(); + if (world->GetType() == World) { + if (world->GetRemoteID() == 0) + cout << "ID: " << world->GetID() << ", Name: " << world->GetName() << ", Local, IP: " << inet_ntoa(in) << ":" << world->GetPort() << ", Status: " << world->GetStatus() << ", AccID: " << world->GetAccountID() << endl; + else + cout << "ID: " << world->GetID() << ", Name: " << world->GetName() << ", RemoteID: " << world->GetRemoteID() << ", LinkWorldID: " << world->GetLinkWorldID() << ", IP: " << inet_ntoa(in) << ":" << world->GetPort() << ", Status: " << world->GetStatus() << ", AccID: " << world->GetAccountID() << endl; + } + else if (world->GetType() == Chat) { + cout << "ID: " << world->GetID() << ", Chat Server, IP: " << inet_ntoa(in) << ":" << world->GetPort() << ", AccID: " << world->GetAccountID() << endl; + } + else if (world->GetType() == Login) { + if (world->IsOutgoingUplink()) { + if (world->Connected()) + cout << "ID: " << world->GetID() << ", Login Server (out), IP: " << inet_ntoa(in) << ":" << world->GetPort() << ", AccID: " << world->GetAccountID() << endl; + else + cout << "ID: " << world->GetID() << ", Login Server (nc), IP: " << inet_ntoa(in) << ":" << world->GetPort() << ", AccID: " << world->GetAccountID() << endl; + } + else + cout << "ID: " << world->GetID() << ", Login Server (in), IP: " << inet_ntoa(in) << ":" << world->GetPort() << " (" << world->GetClientPort() << "), AccID: " << world->GetAccountID() << endl; + } + else { + cout << "ID: " << world->GetID() << ", Unknown Type, Name: " << world->GetName() << ", IP: " << inet_ntoa(in) << ":" << world->GetPort() << ", AccID: " << world->GetAccountID() << endl; + } + } + cout << "============================" << endl; +} + +void LWorldList::AddServerZoneUpdates(LWorld* world, map updates){ + int32 server_id = world->GetID(); + map::iterator itr; + for(itr = updates.begin(); itr != updates.end(); itr++){ + if(zone_updates_already_used.size() >= 1500 || zone_updates_already_used[server_id].count(itr->first) > 0){ + world->Kick("Hacking attempt."); + return; + } + zone_updates_already_used[server_id][itr->first] = true; + } + server_zone_updates.Put(server_id, updates); +} + +void LWorldList::RequestServerUpdates(LWorld* world){ + if(world){ + ServerPacket* pack = new ServerPacket(ServerOP_ZoneUpdates, sizeof(ZoneUpdateRequest_Struct)); + ZoneUpdateRequest_Struct* request = (ZoneUpdateRequest_Struct*)pack->pBuffer; + request->max_per_batch = MAX_UPDATE_COUNT; + world->SendPacket(pack); + delete pack; + zone_update_timeouts.Put(world->GetID(), Timer::GetCurrentTime2() + 30000); + } +} + +void LWorldList::ProcessServerUpdates(){ + MutexMap >::iterator itr = server_zone_updates.begin(); + while(itr.Next()){ + if(itr->second.size() > 0){ + database.SetServerZoneDescriptions(itr->first, itr->second); + if(itr->second.size() == MAX_UPDATE_COUNT) + awaiting_zone_update.Put(itr->first, Timer::GetCurrentTime2() + 10000); //only process 20 updates in a 10 second period to avoid network problems + server_zone_updates.erase(itr->first); + } + if(zone_update_timeouts.count(itr->first) == 0 || zone_update_timeouts.Get(itr->first) <= Timer::GetCurrentTime2()){ + zone_update_timeouts.erase(itr->first); + server_zone_updates.erase(itr->first); + } + } + LWorld* world = 0; + MWorldMap.readlock(); + map::iterator map_itr; + for(map_itr = worldmap.begin(); map_itr != worldmap.end(); map_itr++){ + world = map_itr->second; + if(world && world->GetID()){ + if(last_updated.count(world) == 0 || last_updated.Get(world) <= Timer::GetCurrentTime2()){ + zone_updates_already_used[world->GetID()].clear(); + RequestServerUpdates(world); + last_updated.Put(world, Timer::GetCurrentTime2() + 21600000); + } + if(awaiting_zone_update.count(world->GetID()) > 0 && awaiting_zone_update.Get(world->GetID()) <= Timer::GetCurrentTime2()){ + awaiting_zone_update.erase(world->GetID()); + RequestServerUpdates(world); + } + } + } + MWorldMap.releasereadlock(); +} + +ThreadReturnType ServerUpdateLoop(void* tmp) { +#ifdef WIN32 + SetThreadPriority(GetCurrentThread(), THREAD_PRIORITY_ABOVE_NORMAL); +#endif + if (tmp == 0) { + ThrowError("ServerUpdateLoop(): tmp = 0!"); + THREAD_RETURN(NULL); + } + LWorldList* worldList = (LWorldList*) tmp; + while (worldList->ContinueServerUpdates()) { + Sleep(1000); + worldList->ProcessServerUpdates(); + } + worldList->ResetServerUpdates(); + THREAD_RETURN(NULL); +} diff --git a/EQ2/source/LoginServer/LWorld.h b/EQ2/source/LoginServer/LWorld.h new file mode 100644 index 000000000..cf7c6d345 --- /dev/null +++ b/EQ2/source/LoginServer/LWorld.h @@ -0,0 +1,218 @@ +/* + EQ2Emulator: Everquest II Server Emulator + Copyright (C) 2007 EQ2EMulator Development Team (http://www.eq2emulator.net) + + This file is part of EQ2Emulator. +*/ +#ifndef LWORLD_H +#define LWORLD_H + +#include "../common/Mutex.h" + +#define ERROR_BADPASSWORD "Bad password" +#define INVALID_ACCOUNT "Invalid Server Account. Make sure you put in the account information in your LoginServer.ini file." +#define ERROR_BADVERSION "Incorrect version" +#define ERROR_UNNAMED "Unnamed servers not allowed to connect to full login servers" +#define ERROR_NOTMASTER "Not a master server" +#define ERROR_NOTMESH "Not a mesh server" +#define ERROR_GHOST "Ghost kick" +#define ERROR_UnknownServerType "Unknown Server Type" +#define ERROR_BADNAME_SERVER "Bad server name, name may not contain the word \"Server\" (case sensitive)" +#define ERROR_BADNAME "Bad server name. Unknown reason." + +#define WORLD_NAME_SUFFIX " Server" + +#include "../common/linked_list.h" +#include "../WorldServer/MutexList.h" +#include "../WorldServer/MutexMap.h" +#include "../common/timer.h" +#include "../common/types.h" +#include "../common/queue.h" +#include "../common/servertalk.h" +#include "../common/TCPConnection.h" +#include "client.h" + +#define MAX_UPDATE_COUNT 20 + +#ifdef WIN32 + void ServerUpdateLoop(void* tmp); +#else + void* ServerUpdateLoop(void* tmp); +#endif + +enum ConType { UnknownW, World, Chat, Login }; + +class LWorld +{ +public: + LWorld(TCPConnection* in_con, bool OutgoingLoginUplink = false, int32 iIP = 0, int16 iPort = 0, bool iNeverKick = false); + LWorld(int32 in_accountid, char* in_accountname, char* in_worldname, int32 in_admin_id); + LWorld(TCPConnection* in_RemoteLink, int32 in_ip, int32 in_RemoteID, int32 in_accountid, char* in_accountname, char* in_worldname, char* in_address, sint32 in_status, int32 in_adminid, bool in_showdown, int8 in_authlevel, bool in_placeholder, int32 iLinkWorldID); + ~LWorld(); + + static bool CheckServerName(char* name); + + bool Process(); + void SendPacket(ServerPacket* pack); + void Message(char* to, char* message, ...); + + bool SetupWorld(char* in_worldname, char* in_worldaddress, char* in_account, char* in_password, char* in_version); + void UpdateStatus(sint32 in_status, sint32 in_players, sint32 in_zones) { + // we don't want the server list to update unless something has changed + if(status != in_status || num_players != in_players || num_zones != in_zones) + { + status = in_status; + num_players = in_players; + num_zones = in_zones; + UpdateWorldList(); + } + } + void UpdateWorldList(LWorld* to = 0); + void SetRemoteInfo(int32 in_ip, int32 in_accountid, char* in_account, char* in_name, char* in_address, int32 in_status, int32 in_adminid, sint32 in_players, sint32 in_zones); + + inline bool IsPlaceholder() { return pPlaceholder; } + inline int32 GetAccountID() { return accountid; } + inline char* GetAccount() { return account; } + inline char* GetAddress() { return address; } + inline int16 GetClientPort() { return pClientPort; } + inline bool IsAddressIP() { return isaddressip; } + inline char* GetName() { return worldname; } + inline sint32 GetStatus() { return status; } + bool IsLocked() { return status==-2; } + inline int32 GetIP() { return ip; } + inline int16 GetPort() { return port; } + inline int32 GetID() { return ID; } + inline int32 GetAdmin() { return admin_id; } + inline bool ShowDown() { return pshowdown; } + inline bool ShowDownActive(){ return show_down_active; } + void ShowDownActive(bool show){ show_down_active = show; } + void ShowDown(bool show){ pshowdown = show; } + inline bool Connected() { return pConnected; } + int8 GetWorldStatus(); + + void ChangeToPlaceholder(); + void Kick(char* message = ERROR_GHOST, bool iSetKickedFlag = true); + inline bool IsKicked() { return kicked; } + inline bool IsNeverKick() { return pNeverKick; } + inline ConType GetType() { return ptype; } + inline bool IsOutgoingUplink() { return OutgoingUplink; } + inline TCPConnection* GetLink() { return Link; } + inline int32 GetRemoteID() { return RemoteID; } + inline int32 GetLinkWorldID() { return LinkWorldID; } + inline sint32 GetZoneNum() { return num_zones; } + inline sint32 GetPlayerNum() { return num_players; } + void SetID(int32 new_id) { ID = new_id; } + + void SendDeleteCharacter( int32 char_id, int32 account_id ); + bool IsDevelServer(){ return devel_server; } + + bool IsInit; +protected: + friend class LWorldList; + TCPConnection* Link; + Timer* pReconnectTimer; + Timer* pStatsTimer; +private: + int32 ID; + int32 ip; + int16 port; + bool kicked; + bool pNeverKick; + bool pPlaceholder; + bool devel_server; + + int32 accountid; + char account[30]; + char address[250]; + bool isAuthenticated; + int16 pClientPort; + bool isaddressip; + char worldname[200]; + sint32 status; + int32 admin_id; + bool pshowdown; + bool show_down_active; + ConType ptype; + bool OutgoingUplink; + bool pConnected; + sint32 num_players; + sint32 num_zones; + int32 RemoteID; + int32 LinkWorldID; +}; + +class LWorldList +{ +public: + + LWorldList(); + ~LWorldList(); + + LWorld* FindByID(int32 WorldID); + LWorld* FindByIP(int32 ip); + LWorld* FindByAddress(char* address); + LWorld* FindByLink(TCPConnection* in_link, int32 in_id); + LWorld* FindByAccount(int32 in_accountid, ConType in_type = World); + + void Add(LWorld* worldserver); + void AddInitiateWorld ( LWorld* world ); + void Process(); + void ReceiveData(); + void SendPacket(ServerPacket* pack, LWorld* butnotme = 0); + void SendPacketLocal(ServerPacket* pack, LWorld* butnotme = 0); + void SendPacketLogin(ServerPacket* pack, LWorld* butnotme = 0); + void SendWorldChanged(int32 server_id, bool sendtoallclients=false, Client* sendto = 0); + vector* GetServerListUpdate(int16 version); + EQ2Packet* MakeServerListPacket(int8 lsadmin, int16 version); + + void UpdateWorldList(LWorld* to = 0); + void UpdateWorldStats(); + void KickGhost(ConType in_type, int32 in_accountid = 0, LWorld* ButNotMe = 0); + void KickGhostIP(int32 ip, LWorld* NotMe = 0, int16 iClientPort = 0); + void RemoveByLink(TCPConnection* in_link, int32 in_id = 0, LWorld* ButNotMe = 0); + void RemoveByID(int32 in_id); + + void SendWorldStatus(LWorld* chat, char* adminname); + + void ConnectUplink(); + bool Init(); + void InitWorlds(); + void Shutdown(); + bool WriteXML(); + + void ListWorldsToConsole(); + + void SetUpdateServerList ( bool var ) { UpdateServerList = var; } + bool ContinueServerUpdates(){ return server_update_thread; } + void ResetServerUpdates(){server_update_thread = true;} + void ProcessServerUpdates(); + void RequestServerUpdates(LWorld* world); + void AddServerZoneUpdates(LWorld* world, map updates); + +protected: + friend class LWorld; + int32 GetNextID() { return NextID++; } + +private: + Mutex MWorldMap; + map > zone_updates_already_used; //used to determine if someone is trying to DOS us + MutexMap zone_update_timeouts; + MutexMap awaiting_zone_update; + MutexMap last_updated; + MutexMap > server_zone_updates; + bool server_update_thread; + int32 NextID; + + LinkedList list; + + map worldmap; + + TCPServer* tcplistener; + TCPConnection* OutLink; + + // holds the world server list so we don't have to create it for every character + // logging in + EQ2Packet* ServerListData; + bool UpdateServerList; +}; +#endif diff --git a/EQ2/source/LoginServer/Login.dsp b/EQ2/source/LoginServer/Login.dsp new file mode 100644 index 000000000..cf66e51f2 --- /dev/null +++ b/EQ2/source/LoginServer/Login.dsp @@ -0,0 +1,447 @@ +# Microsoft Developer Studio Project File - Name="Login" - Package Owner=<4> +# Microsoft Developer Studio Generated Build File, Format Version 6.00 +# ** DO NOT EDIT ** + +# TARGTYPE "Win32 (x86) Console Application" 0x0103 + +CFG=Login - Win32 Debug +!MESSAGE This is not a valid makefile. To build this project using NMAKE, +!MESSAGE use the Export Makefile command and run +!MESSAGE +!MESSAGE NMAKE /f "Login.mak". +!MESSAGE +!MESSAGE You can specify a configuration when running NMAKE +!MESSAGE by defining the macro CFG on the command line. For example: +!MESSAGE +!MESSAGE NMAKE /f "Login.mak" CFG="Login - Win32 Debug" +!MESSAGE +!MESSAGE Possible choices for configuration are: +!MESSAGE +!MESSAGE "Login - Win32 Release" (based on "Win32 (x86) Console Application") +!MESSAGE "Login - Win32 Debug" (based on "Win32 (x86) Console Application") +!MESSAGE "Login - Win32 MiniLogin" (based on "Win32 (x86) Console Application") +!MESSAGE "Login - Win32 PublicLogin" (based on "Win32 (x86) Console Application") +!MESSAGE + +# Begin Project +# PROP AllowPerConfigDependencies 0 +# PROP Scc_ProjName "" +# PROP Scc_LocalPath "" +CPP=cl.exe +RSC=rc.exe + +!IF "$(CFG)" == "Login - Win32 Release" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 0 +# PROP BASE Output_Dir "Release" +# PROP BASE Intermediate_Dir "Release" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 0 +# PROP Output_Dir "../Build" +# PROP Intermediate_Dir "../Build/Login" +# PROP Ignore_Export_Lib 0 +# PROP Target_Dir "" +# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c +# ADD CPP /nologo /MT /w /W0 /GX /Zi /O2 /Ob2 /D "LOGINCRYPTO" /D "INVERSEXY" /D _WIN32_WINNT=0x0400 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /FR /YX /FD /c +# ADD BASE RSC /l 0x409 /d "NDEBUG" +# ADD RSC /l 0x409 /d "NDEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo /o"../Build/Login/Login.bsc" +LINK32=link.exe +# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 +# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib wsock32.lib zlib.lib mysqlclient.lib /nologo /subsystem:console /map:"../Build/Login.map" /debug /machine:I386 +# SUBTRACT LINK32 /pdb:none + +!ELSEIF "$(CFG)" == "Login - Win32 Debug" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 1 +# PROP BASE Output_Dir "Login___Win32_Debug" +# PROP BASE Intermediate_Dir "Login___Win32_Debug" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 1 +# PROP Output_Dir "../build/login/Debug" +# PROP Intermediate_Dir "../build/login/debug" +# PROP Ignore_Export_Lib 0 +# PROP Target_Dir "" +# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c +# ADD CPP /nologo /MTd /Gm /GX /ZI /Od /D "LOGINCRYPTO" /D "INVERSEXY" /D _WIN32_WINNT=0x0400 /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /FR /YX /FD /GZ /c +# ADD BASE RSC /l 0x409 /d "_DEBUG" +# ADD RSC /l 0x409 /d "_DEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LINK32=link.exe +# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept +# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib wsock32.lib zlib.lib mysqlclient.lib /nologo /subsystem:console /debug /machine:I386 /nodefaultlib:"LIBCMT" /out:"../build/login/Debug/LoginDebug.exe" /pdbtype:sept +# SUBTRACT LINK32 /pdb:none + +!ELSEIF "$(CFG)" == "Login - Win32 MiniLogin" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 0 +# PROP BASE Output_Dir "Login___Win32_MiniLogin" +# PROP BASE Intermediate_Dir "Login___Win32_MiniLogin" +# PROP BASE Ignore_Export_Lib 0 +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 0 +# PROP Output_Dir "../Build" +# PROP Intermediate_Dir "../Build/MiniLogin" +# PROP Ignore_Export_Lib 0 +# PROP Target_Dir "" +# ADD BASE CPP /nologo /MT /w /W0 /GX /O2 /Ob2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /D "BUILD_FOR_WINDOWS" /FR /YX /FD /c +# ADD CPP /nologo /MT /w /W0 /GX /O2 /Ob2 /D _WIN32_WINNT=0x0400 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /D "MINILOGIN" /FR /YX /FD /c +# ADD BASE RSC /l 0x409 /d "NDEBUG" +# ADD RSC /l 0x409 /d "NDEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo /o"../Build/Login/Login.bsc" +# ADD BSC32 /nologo /o"../Build/MiniLogin/Login.bsc" +LINK32=link.exe +# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib wsock32.lib zlib.lib mysqlclient.lib /nologo /subsystem:console /machine:I386 +# SUBTRACT BASE LINK32 /pdb:none +# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib wsock32.lib zlib.lib mysqlclient.lib /nologo /subsystem:console /machine:I386 /out:"../Build/MiniLogin.exe" +# SUBTRACT LINK32 /pdb:none + +!ELSEIF "$(CFG)" == "Login - Win32 PublicLogin" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 0 +# PROP BASE Output_Dir "Login___Win32_PublicLogin" +# PROP BASE Intermediate_Dir "Login___Win32_PublicLogin" +# PROP BASE Ignore_Export_Lib 0 +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 0 +# PROP Output_Dir "../Build" +# PROP Intermediate_Dir "../Build/PublicLogin" +# PROP Ignore_Export_Lib 0 +# PROP Target_Dir "" +# ADD BASE CPP /nologo /MT /w /W0 /GX /O2 /Ob2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /D "BUILD_FOR_WINDOWS" /FR /YX /FD /c +# ADD CPP /nologo /MT /w /W0 /GX /O2 /Ob2 /D _WIN32_WINNT=0x0400 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /D "PUBLICLOGIN" /FR /YX /FD /c +# ADD BASE RSC /l 0x409 /d "NDEBUG" +# ADD RSC /l 0x409 /d "NDEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo /o"../Build/Login/Login.bsc" +# ADD BSC32 /nologo /o"../Build/Login/Login.bsc" +LINK32=link.exe +# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib wsock32.lib zlib.lib mysqlclient.lib /nologo /subsystem:console /machine:I386 +# SUBTRACT BASE LINK32 /pdb:none +# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib wsock32.lib zlib.lib mysqlclient.lib /nologo /subsystem:console /machine:I386 /out:"../Build/PublicLogin.exe" +# SUBTRACT LINK32 /pdb:none + +!ENDIF + +# Begin Target + +# Name "Login - Win32 Release" +# Name "Login - Win32 Debug" +# Name "Login - Win32 MiniLogin" +# Name "Login - Win32 PublicLogin" +# Begin Group "Source Files" + +# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat" +# Begin Source File + +SOURCE=.\client.cpp +# End Source File +# Begin Source File + +SOURCE=.\EQCrypto.cpp + +!IF "$(CFG)" == "Login - Win32 Release" + +!ELSEIF "$(CFG)" == "Login - Win32 Debug" + +!ELSEIF "$(CFG)" == "Login - Win32 MiniLogin" + +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "Login - Win32 PublicLogin" + +# PROP Exclude_From_Build 1 + +!ENDIF + +# End Source File +# Begin Source File + +SOURCE=.\logindatabase.cpp + +!IF "$(CFG)" == "Login - Win32 Release" + +!ELSEIF "$(CFG)" == "Login - Win32 Debug" + +!ELSEIF "$(CFG)" == "Login - Win32 MiniLogin" + +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "Login - Win32 PublicLogin" + +!ENDIF + +# End Source File +# Begin Source File + +SOURCE=.\LWorld.cpp +# End Source File +# Begin Source File + +SOURCE=.\net.cpp +# End Source File +# End Group +# Begin Group "Header Files" + +# PROP Default_Filter "h;hpp;hxx;hm;inl" +# Begin Source File + +SOURCE=.\client.h +# End Source File +# Begin Source File + +SOURCE=.\EQCrypto.h +# End Source File +# Begin Source File + +SOURCE=.\login_opcodes.h +# End Source File +# Begin Source File + +SOURCE=.\login_structs.h +# End Source File +# Begin Source File + +SOURCE=.\LWorld.h +# End Source File +# Begin Source File + +SOURCE=.\net.h +# End Source File +# End Group +# Begin Group "Common Source Files" + +# PROP Default_Filter ".cpp" +# Begin Source File + +SOURCE=..\common\crc32.cpp +# End Source File +# Begin Source File + +SOURCE=..\common\database.cpp + +!IF "$(CFG)" == "Login - Win32 Release" + +!ELSEIF "$(CFG)" == "Login - Win32 Debug" + +!ELSEIF "$(CFG)" == "Login - Win32 MiniLogin" + +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "Login - Win32 PublicLogin" + +!ENDIF + +# End Source File +# Begin Source File + +SOURCE=..\common\dbcore.cpp +# End Source File +# Begin Source File + +SOURCE=..\common\DBMemLeak.cpp +# End Source File +# Begin Source File + +SOURCE=..\common\debug.cpp +# End Source File +# Begin Source File + +SOURCE=..\common\EQNetwork.cpp +# End Source File +# Begin Source File + +SOURCE=..\common\md5.cpp +# End Source File +# Begin Source File + +SOURCE=..\common\MiscFunctions.cpp +# End Source File +# Begin Source File + +SOURCE=..\common\Mutex.cpp +# End Source File +# Begin Source File + +SOURCE=..\common\packet_dump.cpp +# End Source File +# Begin Source File + +SOURCE=..\common\packet_functions.cpp +# End Source File +# Begin Source File + +SOURCE=..\common\TCPConnection.cpp +# End Source File +# Begin Source File + +SOURCE=..\common\timer.cpp +# End Source File +# End Group +# Begin Group "Common Header Files" + +# PROP Default_Filter ".h" +# Begin Source File + +SOURCE=..\common\classes.h +# End Source File +# Begin Source File + +SOURCE=..\common\crc32.h +# End Source File +# Begin Source File + +SOURCE=..\common\database.h +# End Source File +# Begin Source File + +SOURCE=..\common\DBMemLeak.h +# End Source File +# Begin Source File + +SOURCE=..\common\debug.h +# End Source File +# Begin Source File + +SOURCE=..\common\deity.h +# End Source File +# Begin Source File + +SOURCE=..\common\eq_opcodes.h +# End Source File +# Begin Source File + +SOURCE=..\common\eq_packet_structs.h +# End Source File +# Begin Source File + +SOURCE=..\common\EQCheckTable.h +# End Source File +# Begin Source File + +SOURCE=..\common\EQFragment.h +# End Source File +# Begin Source File + +SOURCE=..\common\EQNetwork.h +# End Source File +# Begin Source File + +SOURCE=..\common\EQOpcodes.h +# End Source File +# Begin Source File + +SOURCE=..\common\EQPacket.h +# End Source File +# Begin Source File + +SOURCE=..\common\EQPacketManager.h +# End Source File +# Begin Source File + +SOURCE=..\common\errmsg.h +# End Source File +# Begin Source File + +SOURCE=..\common\Guilds.h +# End Source File +# Begin Source File + +SOURCE=..\common\linked_list.h +# End Source File +# Begin Source File + +SOURCE=..\common\md5.h +# End Source File +# Begin Source File + +SOURCE=..\common\MiscFunctions.h +# End Source File +# Begin Source File + +SOURCE=..\common\moremath.h +# End Source File +# Begin Source File + +SOURCE=..\common\Mutex.h +# End Source File +# Begin Source File + +SOURCE=..\common\packet_dump.h +# End Source File +# Begin Source File + +SOURCE=..\common\packet_dump_file.h +# End Source File +# Begin Source File + +SOURCE=..\common\packet_functions.h +# End Source File +# Begin Source File + +SOURCE=..\common\queue.h +# End Source File +# Begin Source File + +SOURCE=..\common\queues.h +# End Source File +# Begin Source File + +SOURCE=..\common\races.h +# End Source File +# Begin Source File + +SOURCE=..\common\Seperator.h +# End Source File +# Begin Source File + +SOURCE=..\common\servertalk.h +# End Source File +# Begin Source File + +SOURCE=..\common\TCPConnection.h +# End Source File +# Begin Source File + +SOURCE=..\common\timer.h +# End Source File +# Begin Source File + +SOURCE=..\common\types.h +# End Source File +# Begin Source File + +SOURCE=..\common\version.h +# End Source File +# End Group +# Begin Group "Text Files" + +# PROP Default_Filter "" +# Begin Source File + +SOURCE=.\Protocol.txt +# End Source File +# Begin Source File + +SOURCE=.\Tables.txt +# End Source File +# Begin Source File + +SOURCE=.\ThanksTo.txt +# End Source File +# End Group +# End Target +# End Project diff --git a/EQ2/source/LoginServer/Login.dsw b/EQ2/source/LoginServer/Login.dsw new file mode 100644 index 000000000..4ed0adfdb --- /dev/null +++ b/EQ2/source/LoginServer/Login.dsw @@ -0,0 +1,29 @@ +Microsoft Developer Studio Workspace File, Format Version 6.00 +# WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE! + +############################################################################### + +Project: "Login"=.\Login.dsp - Package Owner=<4> + +Package=<5> +{{{ +}}} + +Package=<4> +{{{ +}}} + +############################################################################### + +Global: + +Package=<5> +{{{ +}}} + +Package=<3> +{{{ +}}} + +############################################################################### + diff --git a/EQ2/source/LoginServer/Login.sdf b/EQ2/source/LoginServer/Login.sdf new file mode 100644 index 000000000..bbb2f499e Binary files /dev/null and b/EQ2/source/LoginServer/Login.sdf differ diff --git a/EQ2/source/LoginServer/Login.vcproj b/EQ2/source/LoginServer/Login.vcproj new file mode 100644 index 000000000..7c1f7a6de --- /dev/null +++ b/EQ2/source/LoginServer/Login.vcproj @@ -0,0 +1,542 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/EQ2/source/LoginServer/Login.vcxproj b/EQ2/source/LoginServer/Login.vcxproj new file mode 100644 index 000000000..903516ec1 --- /dev/null +++ b/EQ2/source/LoginServer/Login.vcxproj @@ -0,0 +1,184 @@ + + + + + EQ2Login + Win32 + + + + EQ2Login + {BE2C1914-FCCC-4F65-A7DD-105142B36104} + EQ2 Login + 10.0 + + + + Application + false + MultiByte + v142 + + + + + + + + + + + <_ProjectFileVersion>10.0.30319.1 + $(SolutionDir)loginserver\ + .\$(ProjectName)__Debug\ + false + $(SolutionDir)..\source\depends\mariadb-10.1.19\include;$(SolutionDir)..\source\depends\zlib\include;$(IncludePath) + $(SolutionDir)..\source\depends\mariadb-10.1.19\lib\32-debug;$(SolutionDir)..\source\depends\zlib\lib;$(LibraryPath) + + + $(ProjectName)__Debug + + + + .\../Build/Login.tlb + + + /D EQDEBUG=5 %(AdditionalOptions) + Disabled + AnySuitable + _WIN32_WINNT=0x0400;WIN32;NDEBUG;_CONSOLE;LOGIN; EQ2; EQN_DEBUG;_CRT_SECURE_NO_DEPRECATE;%(PreprocessorDefinitions) + + + MultiThreadedDebug + false + NotUsing + + + $(IntDir) + $(IntDir) + $(IntDir) + + + true + ProgramDatabase + Default + false + + EnableFastChecks + true + false + + + 4996;%(DisableSpecificWarnings) + + + NDEBUG;%(PreprocessorDefinitions) + 0x0409 + + + /MACHINE:I386 %(AdditionalOptions) + odbc32.lib;odbccp32.lib;ws2_32.lib;mysqlclient.lib;%(AdditionalDependencies) + $(OutDir)$(TargetName)$(TargetExt) + true + + + LIBCMT;LIBC;%(IgnoreSpecificDefaultLibraries) + true + $(IntDir)$(TargetName).pdb + + + false + + + true + true + Default + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/EQ2/source/LoginServer/Login.vcxproj.filters b/EQ2/source/LoginServer/Login.vcxproj.filters new file mode 100644 index 000000000..c746e290a --- /dev/null +++ b/EQ2/source/LoginServer/Login.vcxproj.filters @@ -0,0 +1,265 @@ + + + + + {bfe8d6b0-594f-4b55-9f95-101bbcf4069c} + cpp;c;cxx;rc;def;r;odl;idl;hpj;bat + + + {d65b2760-468c-4206-a19a-48323a50ba5a} + h;hpp;hxx;hm;inl + + + {27b769a5-0972-4e9e-b78c-09ad3341579c} + .cpp + + + {11757e5a-691c-49c9-a627-df027ad58326} + .h + + + {99e7f9f9-abcd-4abf-8200-a4b5a467788c} + + + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Common Source Files + + + Common Source Files + + + Common Source Files + + + Common Source Files + + + Common Source Files + + + Common Source Files + + + Common Source Files + + + Common Source Files + + + Common Source Files + + + Common Source Files + + + Common Source Files + + + Common Source Files + + + Common Source Files + + + Common Source Files + + + Common Source Files + + + Common Source Files + + + Common Source Files + + + Common Source Files + + + Common Source Files + + + Common Source Files + + + Common Source Files + + + Common Source Files + + + Common Source Files + + + Common Source Files + + + Common Source Files + + + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Common Header Files + + + Common Header Files + + + Common Header Files + + + Common Header Files + + + Common Header Files + + + Common Header Files + + + Common Header Files + + + Common Header Files + + + Common Header Files + + + Common Header Files + + + Common Header Files + + + Common Header Files + + + Common Header Files + + + Common Header Files + + + Common Header Files + + + Common Header Files + + + Common Header Files + + + Common Header Files + + + Common Header Files + + + Common Header Files + + + Common Header Files + + + Common Header Files + + + Common Header Files + + + Common Header Files + + + Common Header Files + + + Common Header Files + + + Common Header Files + + + Common Header Files + + + Common Header Files + + + Common Header Files + + + Common Header Files + + + Common Header Files + + + Common Header Files + + + Common Header Files + + + Common Header Files + + + World Files + + + World Files + + + World Files + + + Common Header Files + + + Common Header Files + + + \ No newline at end of file diff --git a/EQ2/source/LoginServer/Login.vcxproj.user b/EQ2/source/LoginServer/Login.vcxproj.user new file mode 100644 index 000000000..ace9a86ac --- /dev/null +++ b/EQ2/source/LoginServer/Login.vcxproj.user @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/EQ2/source/LoginServer/LoginAccount.cpp b/EQ2/source/LoginServer/LoginAccount.cpp new file mode 100644 index 000000000..bc0f84938 --- /dev/null +++ b/EQ2/source/LoginServer/LoginAccount.cpp @@ -0,0 +1,53 @@ +/* + EQ2Emulator: Everquest II Server Emulator + Copyright (C) 2007 EQ2EMulator Development Team (http://www.eq2emulator.net) + + This file is part of EQ2Emulator. +*/ +#include "LoginAccount.h" + +LoginAccount::LoginAccount(){ +} +LoginAccount::~LoginAccount(){ + vector::iterator iter; + for(iter = charlist.begin(); iter != charlist.end(); iter++){ + safe_delete(*iter); + } +} + +void LoginAccount::flushCharacters ( ) +{ + vector::iterator iter; + for(iter = charlist.begin(); iter != charlist.end(); iter++){ + safe_delete(*iter); + } + + charlist.clear ( ); +} + +CharSelectProfile* LoginAccount::getCharacter(char* name){ + vector::iterator char_iterator; + CharSelectProfile* profile = 0; + EQ2_16BitString temp; + for(char_iterator = charlist.begin(); char_iterator != charlist.end(); char_iterator++){ + profile = *char_iterator; + temp = profile->packet->getType_EQ2_16BitString_ByName("name"); + if(strcmp(temp.data.c_str(), name)==0) + return profile; + } + return 0; +} +void LoginAccount::removeCharacter(char* name){ + vector::iterator iter; + CharSelectProfile* profile = 0; + EQ2_16BitString temp; + for(iter = charlist.begin(); iter != charlist.end(); iter++){ + profile = *iter; + temp = profile->packet->getType_EQ2_16BitString_ByName("name"); + if(strcmp(temp.data.c_str(), name)==0){ + safe_delete(*iter); + charlist.erase(iter); + return; + } + } +} \ No newline at end of file diff --git a/EQ2/source/LoginServer/LoginAccount.h b/EQ2/source/LoginServer/LoginAccount.h new file mode 100644 index 000000000..e108f8150 --- /dev/null +++ b/EQ2/source/LoginServer/LoginAccount.h @@ -0,0 +1,54 @@ +/* + EQ2Emulator: Everquest II Server Emulator + Copyright (C) 2007 EQ2EMulator Development Team (http://www.eq2emulator.net) + + This file is part of EQ2Emulator. +*/ +#ifndef _LOGINACCOUNT_ +#define _LOGINACCOUNT_ + +#include +#include +#include +#include "../common/linked_list.h" +#include "PacketHeaders.h" +#include "../common/PacketStruct.h" + +using namespace std; +class LoginAccount { +public: + LoginAccount(); + LoginAccount(int32 id, const char* in_name, const char* in_pass){ + account_id = id; + strcpy(name, in_name); + strcpy(password, in_pass); + } + ~LoginAccount(); + bool SaveAccount(LoginAccount* acct); + vector charlist; + void setName(const char* in_name) { strcpy(name, in_name); } + void setPassword(const char* in_pass) { strcpy(password, in_pass); } + void setAuthenticated(bool in_auth) { authenticated=in_auth; } + void setAccountID(int32 id){ account_id = id; } + void addCharacter(CharSelectProfile* profile){ + charlist.push_back(profile); + } + void removeCharacter(PacketStruct* profile); + void removeCharacter(char* name); + void serializeCharacter(uchar* buffer, CharSelectProfile* profile); + + void flushCharacters ( ); + + CharSelectProfile* getCharacter(char* name); + int32 getLoginAccountID(){ return account_id; } + char* getLoginName() { return name; } + char* getLoginPassword() { return password; } + bool getLoginAuthenticated() { return authenticated; } + +private: + int32 account_id; + char name[32]; + char password[32]; + bool authenticated; +}; +#endif \ No newline at end of file diff --git a/EQ2/source/LoginServer/LoginDatabase.cpp b/EQ2/source/LoginServer/LoginDatabase.cpp new file mode 100644 index 000000000..7c73d5272 --- /dev/null +++ b/EQ2/source/LoginServer/LoginDatabase.cpp @@ -0,0 +1,753 @@ +/* + EQ2Emulator: Everquest II Server Emulator + Copyright (C) 2007 EQ2EMulator Development Team (http://www.eq2emulator.net) + + This file is part of EQ2Emulator. +*/ +#include "../common/debug.h" + +#include +using namespace std; + +#ifdef WIN32 +#define WIN32_LEAN_AND_MEAN +#include +#define snprintf _snprintf +#define strncasecmp _strnicmp +#define strcasecmp _stricmp +#else +#include "../common/unix.h" +#include +#endif + +#include "../common/Log.h" +#include "LoginDatabase.h" +#include "LoginAccount.h" +#include "../common/MiscFunctions.h" +#include "../common/packet_functions.h" +#include "../common/packet_dump.h" +#include "LWorld.h" + +extern LoginDatabase database; +extern LWorldList world_list; + + +void LoginDatabase::SetZoneInformation(int32 server_id, int32 zone_id, PacketStruct* packet){ + if(packet){ + Query query; + MYSQL_RES* result = query.RunQuery2(Q_SELECT, "SELECT name, description from ls_world_zones where server_id=%i and zone_id=%i", server_id, zone_id); + MYSQL_ROW row; + if(result && (row = mysql_fetch_row(result))) { + if(row[0]) + packet->setMediumStringByName("zone", row[0]); + else + packet->setMediumStringByName("zone", " "); + if(row[1]) + packet->setMediumStringByName("zonedesc", row[1]); + else + packet->setMediumStringByName("zonedesc", " "); + } + else{ + Query query2; + MYSQL_RES* result2 = query2.RunQuery2(Q_SELECT, "SELECT name, description from zones where id=%i", zone_id); + MYSQL_ROW row2; + if(result2 && (row2 = mysql_fetch_row(result2))) { + if(row2[0]) + packet->setMediumStringByName("zone", row2[0]); + else + packet->setMediumStringByName("zone", " "); + if(row2[1]) + packet->setMediumStringByName("zonedesc", row2[1]); + else + packet->setMediumStringByName("zonedesc", " "); + } + } + packet->setMediumStringByName("zonename2"," "); + } +} + +string LoginDatabase::GetZoneDescription(char* name){ + string ret; + Query query; + query.escaped_name = getEscapeString(name); + MYSQL_RES* result = query.RunQuery2(Q_SELECT, "SELECT description from zones where file=substring_index('%s', '.', 1)", query.escaped_name); + MYSQL_ROW row; + if((row = mysql_fetch_row(result))) { + ret = string(row[0]); + } + return ret; +} + +void LoginDatabase::SetServerZoneDescriptions(int32 server_id, map zone_descriptions){ + if(zone_descriptions.size() > 0){ + map::iterator zone_itr; + string query_string = "replace into ls_world_zones (server_id, zone_id, name, description) values"; + int count=0; + char server_id_str[12] = {0}; + sprintf(server_id_str, "%i", server_id); + for(zone_itr = zone_descriptions.begin(); zone_itr != zone_descriptions.end(); zone_itr++, count++){ + char zone_id_str[12] = {0}; + sprintf(zone_id_str, "%i", zone_itr->first); + if(count > 0) + query_string.append(", "); + query_string.append("(").append(server_id_str).append(","); + query_string.append(zone_id_str).append(","); + query_string.append("'").append(getSafeEscapeString(zone_itr->second.name.c_str()).c_str()).append("', '"); + query_string.append(getSafeEscapeString(zone_itr->second.description.c_str()).c_str()).append("')"); + } + Query query; + query.RunQuery2(query_string, Q_REPLACE); + } +} + +void LoginDatabase::LoadCharacters(LoginAccount* acct, int16 version){ + if(acct != NULL) + acct->flushCharacters ( ); + + Query query; + Query query2; + int32 id = 0; + MYSQL_RES* result = query.RunQuery2(Q_SELECT, "SELECT lc.char_id, lc.server_id, lc.name, lc.race, lc.class, lc.gender, lc.deity, lc.body_size, lc.body_age, lc.current_zone_id, lc.level, lc.soga_wing_type, lc.soga_chest_type, lc.soga_legs_type, lc.soga_hair_type, lc.legs_type, lc.chest_type, lc.wing_type, lc.hair_type, unix_timestamp(lc.created_date), unix_timestamp(lc.last_played), lc.id, lw.name, lc.facial_hair_type, lc.soga_facial_hair_type from login_characters lc, login_worldservers lw where lw.id = lc.server_id and lc.account_id=%i and lc.deleted=0",acct->getLoginAccountID()); + if(result) { + MYSQL_ROW row; + MYSQL_ROW row2; + MYSQL_ROW row3; + while ((row = mysql_fetch_row(result))) { + CharSelectProfile* player = new CharSelectProfile(version); + id = atoul(row[0]); + player->packet->setDataByName("charid", id); + player->packet->setDataByName("server_id", atoul(row[1])); + player->packet->setMediumStringByName("name", row[2]); + player->packet->setDataByName("race", atoi(row[3])); + player->packet->setDataByName("class", atoi(row[4])); + player->packet->setDataByName("gender", atoi(row[5])); + player->packet->setDataByName("deity", atoi(row[6])); + player->packet->setDataByName("body_size", atof(row[7])); + player->packet->setDataByName("body_age", atof(row[8])); + SetZoneInformation(atoi(row[1]), atoi(row[9]), player->packet); + player->packet->setDataByName("level", atoi(row[10])); + player->packet->setDataByName("soga_wing_type", atoi(row[11])); + player->packet->setDataByName("soga_chest_type", atoi(row[12])); + player->packet->setDataByName("soga_legs_type", atoi(row[13])); + player->packet->setDataByName("soga_hair_type", atoi(row[14])); +// player->packet->setDataByName("soga_race_type", atoi(row[15])); + player->packet->setDataByName("legs_type", atoi(row[15])); + player->packet->setDataByName("chest_type", atoi(row[16])); + player->packet->setDataByName("wing_type", atoi(row[17])); + player->packet->setDataByName("hair_type", atoi(row[18])); + //player->packet->setDataByName("race_type", atoi(row[19])); + player->packet->setDataByName("created_date", atol(row[19])); + if (row[20]) + player->packet->setDataByName("last_played", atol(row[20])); + if(version >= 887) + player->packet->setDataByName("version", 6); + else + player->packet->setDataByName("version", 5); + player->packet->setDataByName("account_id", acct->getLoginAccountID()); + player->packet->setDataByName("account_id2", acct->getLoginAccountID()); + + LoadAppearanceData(atol(row[21]), player->packet); + + if(row[22]) + player->packet->setMediumStringByName("server_name", row[22]); + player->packet->setDataByName("hair_face_type", atoi(row[23])); + player->packet->setDataByName("soga_hair_face_type", atoi(row[24])); + + player->packet->setDataByName("unknown3", 57); + player->packet->setDataByName("unknown4", 56); + player->packet->setDataByName("unknown6", 1, 1); //if not here will not display character + player->packet->setDataByName("unknown8", 15); + player->packet->setDataByName("unknown13", 212); + player->packet->setColorByName("unknown14", 0xFF, 0xFF, 0xFF); + + uchar tmp[] = {0xFF, 0xFF, 0xFF, 0x61, 0x00, 0x2C, 0x04, 0xA5, 0x09, 0x02, 0x0F, 0x00, 0x00}; + for(int y=0;ypacket->setDataByName("unknown11", tmp[y], y); + + MYSQL_RES* result3 = query2.RunQuery2(Q_SELECT, "SELECT slot, equip_type, red, green, blue, highlight_red, highlight_green, highlight_blue from login_equipment where login_characters_id=%i order by slot",id); + if(result3){ + for(int i=0;(row3 = mysql_fetch_row(result3)) && i<24; i++){ + player->packet->setEquipmentByName("equip", atoi(row3[1]), atoi(row3[2]), atoi(row3[3]), atoi(row3[4]), atoi(row3[5]), atoi(row3[6]), atoi(row3[7]), atoi(row3[0])); + } + } + acct->addCharacter(player); + } + } + else + LogWrite(LOGIN__ERROR, 0, "Login", "Error in LoadCharacters query '%s': %s", query.GetQuery(), query.GetError()); + +} + +void LoginDatabase::CheckCharacterTimeStamps(LoginAccount* acct){ + Query query; + MYSQL_RES* result = query.RunQuery2(Q_SELECT, "SELECT char_id, unix_timestamp from login_characters where account_id=%i",acct->getLoginAccountID()); + if(result && mysql_num_rows(result) > 0) { + MYSQL_ROW row; + + ServerPacket* outpack = new ServerPacket(ServerOP_CharTimeStamp, sizeof(CharacterTimeStamp_Struct)); + CharacterTimeStamp_Struct* cts = (CharacterTimeStamp_Struct*) outpack->pBuffer; + cts->account_id = acct->getLoginAccountID(); + int32 server_id = 0; + LWorld* world_server = 0; + while ((row = mysql_fetch_row(result))) { + server_id = atoi(row[1]); + if(server_id != 0) + world_server = world_list.FindByAccount(server_id, World); + if(world_server) // If the pointer is 0, the world server must be down, we can't do any updates... + { + cts->char_id = atoi(row[0]); + cts->unix_timestamp = atoi(row[1]); + world_server->SendPacket(outpack); + //Reset for next character + world_server = 0; + server_id = 0; + } + } + safe_delete(outpack); + } +} + +void LoginDatabase::SaveCharacterFloats(int32 char_id, char* type, float float1, float float2, float float3){ + Query query; + string create_char = string("insert into login_char_colors (login_characters_id, type, red, green, blue, signed_value) values(%i,'%s',%i,%i,%i, 1)"); + query.RunQuery2(Q_INSERT, create_char.c_str(), char_id, type, (sint8)(float1*100), (sint8)(float2*100), (sint8)(float3*100)); +} + +void LoginDatabase::SaveCharacterColors(int32 char_id, char* type, EQ2_Color color){ + Query query; + string create_char = string("insert into login_char_colors (login_characters_id, type, red, green, blue) values(%i,'%s',%i,%i,%i)"); + query.RunQuery2(Q_INSERT, create_char.c_str(), char_id, type, color.red, color.green, color.blue); +} + +void LoginDatabase::LoadAppearanceData(int32 char_id, PacketStruct* char_select_packet){ + Query query; + MYSQL_ROW row; + MYSQL_RES* result = query.RunQuery2(Q_SELECT, "SELECT type, signed_value, red, green, blue from login_char_colors where login_characters_id = %i",char_id); + while((row = mysql_fetch_row(result))){ + if(atoi(row[1]) == 0) + char_select_packet->setColorByName(row[0], atoi(row[2]), atoi(row[3]), atoi(row[4])); + else{ + char_select_packet->setDataByName(row[0], atoi(row[2]),0); + char_select_packet->setDataByName(row[0], atoi(row[3]),1); + char_select_packet->setDataByName(row[0], atoi(row[4]),2); + } + } +} +int16 LoginDatabase::GetAppearanceID(string name){ + int32 id = 0; + Query query; + MYSQL_ROW row; + query.escaped_name = getEscapeString(name.c_str()); + MYSQL_RES* result = query.RunQuery2(Q_SELECT, "SELECT appearance_id from appearances where name='%s'", query.escaped_name); + if(result && mysql_num_rows(result) == 1){ + row = mysql_fetch_row(result); + id = atoi(row[0]); + } + return id; +} + +void LoginDatabase::DeactivateCharID(int32 server_id, int32 char_id, int32 exception_id){ + Query query; + query.RunQuery2(Q_UPDATE, "update login_characters set deleted=1 where char_id=%u and server_id=%u and id!=%u",char_id,server_id,exception_id); +} + +int32 LoginDatabase::SaveCharacter(PacketStruct* create, LoginAccount* acct, int32 world_charid){ + int32 ret_id = 0; + Query query; + string create_char = + string("Insert into login_characters (account_id, server_id, char_id, name, race, class, gender, deity, body_size, body_age, soga_wing_type, soga_chest_type, soga_legs_type, soga_hair_type, soga_facial_hair_type, legs_type, chest_type, wing_type, hair_type, facial_hair_type)" + " values(%i, %i, %i, '%s', %i, %i, %i, %i, %f, %f, %i, %i, %i, %i, %i, %i, %i, %i, %i, %i)"); + query.RunQuery2(Q_INSERT, create_char.c_str(), + acct->getLoginAccountID(), + create->getType_int32_ByName("server_id"), world_charid, + create->getType_EQ2_16BitString_ByName("name").data.c_str(), + create->getType_int8_ByName("race"), + create->getType_int8_ByName("class"), + create->getType_int8_ByName("gender"), + create->getType_int8_ByName("deity"), + create->getType_float_ByName("body_size"), + create->getType_float_ByName("body_age"), + GetAppearanceID(create->getType_EQ2_16BitString_ByName("soga_wing_file").data), + GetAppearanceID(create->getType_EQ2_16BitString_ByName("soga_chest_file").data), + GetAppearanceID(create->getType_EQ2_16BitString_ByName("soga_legs_file").data), + GetAppearanceID(create->getType_EQ2_16BitString_ByName("soga_hair_file").data), + GetAppearanceID(create->getType_EQ2_16BitString_ByName("soga_face_file").data), + GetAppearanceID(create->getType_EQ2_16BitString_ByName("legs_file").data), + GetAppearanceID(create->getType_EQ2_16BitString_ByName("chest_file").data), + GetAppearanceID(create->getType_EQ2_16BitString_ByName("wing_file").data), + GetAppearanceID(create->getType_EQ2_16BitString_ByName("hair_file").data), + GetAppearanceID(create->getType_EQ2_16BitString_ByName("face_file").data)); + if(query.GetError() && strlen(query.GetError()) > 0){ + LogWrite(LOGIN__ERROR, 0, "Login", "Error in SaveCharacter query '%s': %s", query.GetQuery(), query.GetError()); + return 0; + } + + int32 last_insert_id = query.GetLastInsertedID(); + + //mark any remaining characters with same id as deleted (creates problems if world deleted their db and started assigning new char ids) + DeactivateCharID(create->getType_int32_ByName("server_id"), world_charid, last_insert_id); + int32 char_id = last_insert_id; + SaveCharacterColors(char_id,"skin_color", create->getType_EQ2_Color_ByName("skin_color")); + SaveCharacterColors(char_id,"eye_color", create->getType_EQ2_Color_ByName("eye_color")); + SaveCharacterColors(char_id,"hair_color1", create->getType_EQ2_Color_ByName("hair_color1")); + SaveCharacterColors(char_id,"hair_color2", create->getType_EQ2_Color_ByName("hair_color2")); + SaveCharacterColors(char_id,"hair_highlight", create->getType_EQ2_Color_ByName("hair_highlight")); + SaveCharacterColors(char_id,"hair_type_color", create->getType_EQ2_Color_ByName("hair_type_color")); + SaveCharacterColors(char_id,"hair_type_highlight_color", create->getType_EQ2_Color_ByName("hair_type_highlight_color")); + SaveCharacterColors(char_id,"hair_face_color", create->getType_EQ2_Color_ByName("hair_face_color")); + SaveCharacterColors(char_id,"hair_face_highlight_color", create->getType_EQ2_Color_ByName("hair_face_highlight_color")); + SaveCharacterColors(char_id,"wing_color1", create->getType_EQ2_Color_ByName("wing_color1")); + SaveCharacterColors(char_id,"wing_color2", create->getType_EQ2_Color_ByName("wing_color2")); + SaveCharacterColors(char_id,"shirt_color", create->getType_EQ2_Color_ByName("shirt_color")); + SaveCharacterColors(char_id,"unknown_chest_color", create->getType_EQ2_Color_ByName("unknown_chest_color")); + SaveCharacterColors(char_id,"pants_color", create->getType_EQ2_Color_ByName("pants_color")); + SaveCharacterColors(char_id,"unknown_legs_color", create->getType_EQ2_Color_ByName("unknown_legs_color")); + SaveCharacterColors(char_id,"unknown9", create->getType_EQ2_Color_ByName("unknown9")); + SaveCharacterFloats(char_id,"eye_type", create->getType_float_ByName("eyes2",0), create->getType_float_ByName("eyes2",1), create->getType_float_ByName("eyes2",2)); + SaveCharacterFloats(char_id,"ear_type", create->getType_float_ByName("ears",0), create->getType_float_ByName("ears",1), create->getType_float_ByName("ears",2)); + SaveCharacterFloats(char_id,"eye_brow_type", create->getType_float_ByName("eye_brows",0), create->getType_float_ByName("eye_brows",1), create->getType_float_ByName("eye_brows",2)); + SaveCharacterFloats(char_id,"cheek_type", create->getType_float_ByName("cheeks",0), create->getType_float_ByName("cheeks",1), create->getType_float_ByName("cheeks",2)); + SaveCharacterFloats(char_id,"lip_type", create->getType_float_ByName("lips",0), create->getType_float_ByName("lips",1), create->getType_float_ByName("lips",2)); + SaveCharacterFloats(char_id,"chin_type", create->getType_float_ByName("chin",0), create->getType_float_ByName("chin",1), create->getType_float_ByName("chin",2)); + SaveCharacterFloats(char_id,"nose_type", create->getType_float_ByName("nose",0), create->getType_float_ByName("nose",1), create->getType_float_ByName("nose",2)); + SaveCharacterFloats(char_id,"body_size", create->getType_float_ByName("body_size",0), 0, 0); + + SaveCharacterColors(char_id,"soga_skin_color", create->getType_EQ2_Color_ByName("soga_skin_color")); + SaveCharacterColors(char_id,"soga_eye_color", create->getType_EQ2_Color_ByName("soga_eye_color")); + SaveCharacterColors(char_id,"soga_hair_color1", create->getType_EQ2_Color_ByName("soga_hair_color1")); + SaveCharacterColors(char_id,"soga_hair_color2", create->getType_EQ2_Color_ByName("soga_hair_color2")); + SaveCharacterColors(char_id,"soga_hair_highlight", create->getType_EQ2_Color_ByName("soga_hair_highlight")); + SaveCharacterColors(char_id,"soga_hair_type_color", create->getType_EQ2_Color_ByName("soga_hair_type_color")); + SaveCharacterColors(char_id,"soga_hair_type_highlight_color", create->getType_EQ2_Color_ByName("soga_hair_type_highlight_color")); + SaveCharacterColors(char_id,"soga_hair_face_color", create->getType_EQ2_Color_ByName("soga_hair_face_color")); + SaveCharacterColors(char_id,"soga_hair_face_highlight_color", create->getType_EQ2_Color_ByName("soga_hair_face_highlight_color")); + SaveCharacterColors(char_id,"soga_wing_color1", create->getType_EQ2_Color_ByName("soga_wing_color1")); + SaveCharacterColors(char_id,"soga_wing_color2", create->getType_EQ2_Color_ByName("soga_wing_color2")); + SaveCharacterColors(char_id,"soga_shirt_color", create->getType_EQ2_Color_ByName("soga_shirt_color")); + SaveCharacterColors(char_id,"soga_unknown_chest_color", create->getType_EQ2_Color_ByName("soga_unknown_chest_color")); + SaveCharacterColors(char_id,"soga_pants_color", create->getType_EQ2_Color_ByName("soga_pants_color")); + SaveCharacterColors(char_id,"soga_unknown_legs_color", create->getType_EQ2_Color_ByName("soga_unknown_legs_color")); + SaveCharacterColors(char_id,"soga_unknown13", create->getType_EQ2_Color_ByName("soga_unknown13")); + SaveCharacterFloats(char_id,"soga_eye_type", create->getType_float_ByName("soga_eyes2",0), create->getType_float_ByName("soga_eyes2",1), create->getType_float_ByName("soga_eyes2",2)); + SaveCharacterFloats(char_id,"soga_ear_type", create->getType_float_ByName("soga_ears",0), create->getType_float_ByName("soga_ears",1), create->getType_float_ByName("soga_ears",2)); + SaveCharacterFloats(char_id,"soga_eye_brow_type", create->getType_float_ByName("soga_eye_brows",0), create->getType_float_ByName("soga_eye_brows",1), create->getType_float_ByName("soga_eye_brows",2)); + SaveCharacterFloats(char_id,"soga_cheek_type", create->getType_float_ByName("soga_cheeks",0), create->getType_float_ByName("soga_cheeks",1), create->getType_float_ByName("soga_cheeks",2)); + SaveCharacterFloats(char_id,"soga_lip_type", create->getType_float_ByName("soga_lips",0), create->getType_float_ByName("soga_lips",1), create->getType_float_ByName("soga_lips",2)); + SaveCharacterFloats(char_id,"soga_chin_type", create->getType_float_ByName("soga_chin",0), create->getType_float_ByName("soga_chin",1), create->getType_float_ByName("soga_chin",2)); + SaveCharacterFloats(char_id,"soga_nose_type", create->getType_float_ByName("soga_nose",0), create->getType_float_ByName("soga_nose",1), create->getType_float_ByName("soga_nose",2)); + + return ret_id; +} + +bool LoginDatabase::DeleteCharacter(int32 account_id, int32 character_id, int32 server_id){ + Query query; + string delete_char = string("delete from login_characters where char_id=%i and account_id=%i and server_id=%i"); + query.RunQuery2(Q_DELETE, delete_char.c_str(),character_id,account_id,server_id); + if(!query.GetAffectedRows()) + { + //No error just in case ppl try doing stupid stuff + return false; + } + + return true; +} + +string LoginDatabase::GetCharacterName(int32 char_id, int32 server_id){ + Query query; + MYSQL_ROW row; + MYSQL_RES* result = query.RunQuery2(Q_SELECT, "SELECT name from login_characters where char_id=%lu and server_id=%lu and deleted = 0", char_id,server_id); + + if(result && mysql_num_rows(result) == 1){ + row = mysql_fetch_row(result); + return string(row[0]); + } + return string(""); +} + +bool LoginDatabase::UpdateCharacterTimeStamp(int32 account_id, int32 character_id, int32 timestamp_update, int32 server_id){ + Query query; + string update_charts = string("update login_characters set unix_timestamp=%lu where char_id=%lu and account_id=%lu and server_id=%lu"); + query.RunQuery2(Q_UPDATE, update_charts.c_str(),timestamp_update,character_id,account_id,server_id); + if(!query.GetAffectedRows()) + { + LogWrite(LOGIN__ERROR, 0, "Login", "Error in UpdateCharacterTimeStamp query '%s': %s", query.GetQuery(), query.GetError()); + return false; + } + + return true; +} + +bool LoginDatabase::UpdateCharacterLevel(int32 account_id, int32 character_id, int8 in_level, int32 server_id){ + Query query; + string update_charts = string("update login_characters set level=%i where char_id=%lu and account_id=%lu and server_id=%lu"); + query.RunQuery2(Q_UPDATE, update_charts.c_str(),in_level,character_id,account_id,server_id); + if(!query.GetAffectedRows()) + { + LogWrite(LOGIN__ERROR, 0, "Login", "Error in UpdateCharacterLevel query '%s': %s", query.GetQuery(), query.GetError()); + return false; + } + + return true; +} + +bool LoginDatabase::UpdateCharacterRace(int32 account_id, int32 character_id, int16 in_racetype, int8 in_race, int32 server_id){ + Query query; + string update_charts = string("update login_characters set race_type=%i, race=%i where char_id=%lu and account_id=%lu and server_id=%lu"); + query.RunQuery2(Q_UPDATE, update_charts.c_str(),in_racetype,in_race,character_id,account_id,server_id); + if(!query.GetAffectedRows()) + { + LogWrite(LOGIN__ERROR, 0, "Login", "Error in UpdateCharacterRace query '%s': %s", query.GetQuery(), query.GetError()); + return false; + } + + return true; +} + +bool LoginDatabase::UpdateCharacterZone(int32 account_id, int32 character_id, int32 zone_id, int32 server_id){ + Query query; + string update_chars = string("update login_characters set current_zone_id=%i where char_id=%lu and account_id=%lu and server_id=%lu"); + query.RunQuery2(Q_UPDATE, update_chars.c_str(), zone_id, character_id, account_id, server_id); + if(!query.GetAffectedRows()) + { + LogWrite(LOGIN__ERROR, 0, "Login", "Error in UpdateCharacterZone query '%s': %s", query.GetQuery(), query.GetError()); + return false; + } + + return true; +} + +bool LoginDatabase::UpdateCharacterClass(int32 account_id, int32 character_id, int8 in_class, int32 server_id){ + Query query; + string update_charts = string("update login_characters set class=%i where char_id=%lu and account_id=%lu and server_id=%lu"); + query.RunQuery2(Q_UPDATE, update_charts.c_str(),in_class,character_id,account_id,server_id); + if(!query.GetAffectedRows()) + { + LogWrite(LOGIN__ERROR, 0, "Login", "Error in UpdateCharacterClass query '%s': %s", query.GetQuery(), query.GetError()); + return false; + } + + return true; +} + +bool LoginDatabase::UpdateCharacterGender(int32 account_id, int32 character_id, int8 in_gender, int32 server_id){ + Query query; + string update_charts = string("update login_characters set gender=%i where char_id=%lu and account_id=%lu and server_id=%lu"); + query.RunQuery2(Q_UPDATE, update_charts.c_str(),in_gender,character_id,account_id,server_id); + if(!query.GetAffectedRows()) + { + LogWrite(LOGIN__ERROR, 0, "Login", "Error in UpdateCharacterClass query '%s': %s", query.GetQuery(), query.GetError()); + return false; + } + + return true; +} + +LoginAccount* LoginDatabase::LoadAccount(const char* name, const char* password){ + LoginAccount* acct = NULL; + Query query; + query.escaped_name = getEscapeString(name); + query.escaped_pass = getEscapeString(password); + MYSQL_ROW row; + MYSQL_RES* result = query.RunQuery2(Q_SELECT, "SELECT id from account where name='%s' and passwd=md5('%s')", query.escaped_name, query.escaped_pass); + if(result){ + if (mysql_num_rows(result) == 1){ + row = mysql_fetch_row(result); + + int32 id = atol(row[0]); + + acct = new LoginAccount(id, name, password); + acct->setAuthenticated(true); + } + else if(mysql_num_rows(result) > 0) + LogWrite(LOGIN__ERROR, 0, "Login", "Error in LoginAccount: more than one account returned for '%s'", name); + } + return acct; +} + +int32 LoginDatabase::CheckServerAccount(char* name, char* passwd){ + int32 id = 0; + Query query; + MYSQL_ROW row; + query.escaped_name = getEscapeString(name); + MYSQL_RES* result = query.RunQuery2(Q_SELECT, "SELECT password, id from login_worldservers where account='%s'", query.escaped_name); + if(result && mysql_num_rows(result) == 1){ + row = mysql_fetch_row(result); + if(memcmp(row[0], passwd, 1) == 0) + id = atoi(row[1]); + } + return id; +} +void LoginDatabase::GetServerAccounts(vector* server_list){ + Query query; + MYSQL_ROW row; + MYSQL_RES* result = query.RunQuery2(Q_SELECT, "SELECT id, account, name, admin_id from login_worldservers"); + while((row = mysql_fetch_row(result))){ + LWorld* world = new LWorld(atol(row[0]), row[1], row[2], atoi(row[3])); + world->SetID(world->GetAccountID()); + server_list->push_back(world); + } +} +void LoginDatabase::SaveClientLog(char* type, char* message, char* player_name, int16 version){ + Query query; + query.escaped_data1 = getEscapeString(message); + query.escaped_name = getEscapeString(player_name); + query.RunQuery2(Q_INSERT, "insert into log_messages (type, message, name, version) values('%s', '%s', '%s', %i)", type, query.escaped_data1, query.escaped_name, version); +} +bool LoginDatabase::VerifyDelete(int32 account_id, int32 character_id, const char* name){ + Query query; + query.escaped_name = getEscapeString(name); + query.RunQuery2(Q_UPDATE, "update login_characters set deleted = 1 where char_id=%i and account_id=%i and name='%s'", character_id, account_id, query.escaped_name); + if(query.GetAffectedRows() == 1) + return true; + else + return false; +} +char* LoginDatabase::GetServerAccountName(int32 id){ + Query query; + MYSQL_ROW row; + char* name = 0; + MYSQL_RES* result = query.RunQuery2(Q_SELECT, "SELECT name from login_worldservers where id=%lu", id); + if(result && mysql_num_rows(result) == 1){ + row = mysql_fetch_row(result); + if(strlen(row[0]) > 0){ + name = new char[strlen(row[0])+1]; + strcpy(name, row[0]); + } + } + return name; +} +int32 LoginDatabase::GetRaceID(char* name){ + int32 ret = 1487; + Query query; + MYSQL_ROW row; + query.escaped_name = getEscapeString(name); + MYSQL_RES* result = query.RunQuery2(Q_SELECT, "SELECT race_type from login_races where name='%s'", query.escaped_name); + if(result && mysql_num_rows(result) == 1){ + row = mysql_fetch_row(result); + ret = atol(row[0]); + } + else if(!result || mysql_num_rows(result) == 0) + UpdateRaceID(query.escaped_name); + return ret; +} +void LoginDatabase::UpdateRaceID(char* name){ + Query query; + query.RunQuery2(Q_UPDATE, "insert into login_races (name) values('%s')", name); +} +bool LoginDatabase::CheckVersion(char* in_version){ + Query query; + query.escaped_data1 = getEscapeString(in_version); + MYSQL_RES* result = query.RunQuery2(Q_SELECT, "SELECT id from login_versions where version='%s'", query.escaped_data1); + if(result && mysql_num_rows(result) == 1) + return true; + else + return false; +} +void LoginDatabase::GetLatestTableVersions(LatestTableVersions* table_versions){ + Query query; + MYSQL_ROW row; + MYSQL_RES* result = query.RunQuery2(Q_SELECT, "SELECT name, max(version) from login_table_versions group by name order by id"); + if(result && mysql_num_rows(result) > 0){ + table_versions->SetTableSize(mysql_num_rows(result)); + } + else // we need to return if theres no result, otherwise it will crash attempting to loop through rows + + return; + while((row = mysql_fetch_row(result))){ + if(VerifyDataTable(row[0])) + table_versions->AddTable(row[0], atoi(row[1]), GetDataVersion(row[0])); + else + table_versions->AddTable(row[0], atoi(row[1]), 0); + } +} +bool LoginDatabase::VerifyDataTable(char* name){ + Query query; + MYSQL_RES* result = query.RunQuery2(Q_SELECT, "SELECT table_name from download_tables where table_name='%s'", name); + if(result && mysql_num_rows(result) > 0) + return true; + return false; +} +string LoginDatabase::GetColumnNames(char* name){ + Query query; + MYSQL_ROW row; + string columns = "("; + MYSQL_RES* result = query.RunQuery2(Q_SELECT, "show columns from %s", name); + if(result && mysql_num_rows(result) > 0){ + int16 i = 0; + while((row = mysql_fetch_row(result))){ + if(strcmp(row[0], "table_data_version") != 0){ + if(i>0) + columns.append(","); + columns.append(row[0]); + i++; + } + } + } + columns.append(") "); + return columns; +} +TableDataQuery* LoginDatabase::GetTableDataQuery(int32 server_ip, char* name, int16 version){ + Query query; + MYSQL_ROW row; + query.escaped_name = getEscapeString(name); + TableDataQuery* table_query = 0; + MYSQL_RES* result = 0; + string columns; + + if(VerifyDataTable(query.escaped_name)){ + result = query.RunQuery2(Q_SELECT, "SELECT * from %s where table_data_version > %i", query.escaped_name, version); + columns = GetColumnNames(query.escaped_name); + } + if(result && mysql_num_rows(result) > 0){ + table_query = new TableDataQuery(query.escaped_name); + table_query->num_queries = mysql_num_rows(result); + table_query->columns_size = columns.length() + 1; + table_query->columns = new char[table_query->columns_size + 1]; + table_query->version = GetDataVersion(query.escaped_name); + strcpy(table_query->columns, (char*)columns.c_str()); + string query_data; + MYSQL_FIELD* field; + int* int_list = new int[mysql_num_fields(result)]; + int16 ndx = 0; + while((field = mysql_fetch_field(result))){ + int_list[ndx] = IS_NUM(field->type); + if(strcmp(field->name,"table_data_version") == 0) + int_list[ndx] = 2; + ndx++; + } + ndx = 0; + while((row = mysql_fetch_row(result))){ + query_data = ""; + for(int i=0;i0) + query_data.append(","); + if(!int_list[i]){ + query_data.append("'").append(getEscapeString(row[i])).append("'"); + } + else + query_data.append(row[i]); + } + } + TableData* new_query = new TableData; + new_query->size = query_data.length() + 1; + new_query->query = new char[query_data.length() + 1]; + strcpy(new_query->query, query_data.c_str()); + table_query->queries.push_back(new_query); + ndx++; + } + safe_delete_array(int_list); + } + else{ + string query2 = string("The user tried to download the following table: ").append(query.escaped_name); + SaveClientLog("Possible Hacking Attempt", (char*)query2.c_str(), "Hacking Data", server_ip); + } + return table_query; +} +TableQuery* LoginDatabase::GetLatestTableQuery(int32 server_ip, char* name, int16 version){ + Query query; + MYSQL_ROW row; + query.escaped_name = getEscapeString(name); + TableQuery* table_query = 0; + MYSQL_RES* result = query.RunQuery2(Q_SELECT, "SELECT query, version from login_table_versions where name = '%s' and version>=%i order by version", query.escaped_name, version + 1); + if(result && mysql_num_rows(result) > 0){ + int16 i = 0; + table_query = new TableQuery; + while((row = mysql_fetch_row(result))){ + char* rowdata = row[0]; + if(strstr(rowdata, ";")){ + char* token = strtok(rowdata,";"); + while(token){ + char* new_query = new char[strlen(token) + 1]; + strcpy(new_query, token); + table_query->AddQuery(new_query); + token = strtok(NULL, ";"); + } + } + else + table_query->AddQuery(rowdata); + table_query->latest_version = atoi(row[1]); + } + strcpy(table_query->tablename, name); + table_query->your_version = version; + } + else{ + string query2 = string("The following was the DB Query: ").append(query.GetQuery()); + SaveClientLog("Possible Hacking Attempt", (char*)query2.c_str(), "Hacking Query", server_ip); + } + return table_query; +} +sint16 LoginDatabase::GetDataVersion(char* name){ + Query query; + MYSQL_RES* result = query.RunQuery2(Q_SELECT, "SELECT max(table_data_version) from %s", name); + sint16 ret_version = 0; + if(result && mysql_num_rows(result) > 0) { + MYSQL_ROW row; + row = mysql_fetch_row(result); + if(row[0]) + ret_version = atoi(row[0]); + } + return ret_version; +} + +void LoginDatabase::RemoveOldWorldServerStats(){ + Query query; + query.RunQuery2(Q_DELETE, "delete from login_worldstats where (UNIX_TIMESTAMP(NOW())-UNIX_TIMESTAMP(last_update)) > 86400"); +} + +void LoginDatabase::UpdateWorldServerStats( LWorld* world, sint32 status ) +{ + if( !world || world->GetAccountID() == 0 ) + return; + Query query; + query.RunQuery2(Q_INSERT, "insert into login_worldstats (world_id, world_status, current_players, current_zones, last_update) values(%lu, %i, %i, %i, NOW()) ON DUPLICATE KEY UPDATE current_players=%i,current_zones=%i,world_status=%i,last_update=NOW()", + world->GetAccountID(), status, world->GetPlayerNum(), world->GetZoneNum(), world->GetPlayerNum(), world->GetZoneNum(), status); +} + +bool LoginDatabase::ResetWorldServerStatsConnectedTime(LWorld* world){ + if(!world || world->GetAccountID() == 0) + return false; + + Query query; + string update_stats = string("update login_worldstats set connected_time=now() where world_id=%i and (UNIX_TIMESTAMP(NOW())-UNIX_TIMESTAMP(last_update)) > 300"); + query.RunQuery2(Q_UPDATE, update_stats.c_str(),world->GetAccountID()); + + return true; +} + +void LoginDatabase::ResetWorldStats ( ) +{ + Query query; + string update_stats = string("update login_worldstats set world_status=-4, current_players=0, current_zones=0"); + query.RunQuery2(update_stats.c_str(), Q_UPDATE); +} + +void LoginDatabase::SaveBugReport(int32 world_id, char* category, char* subcategory, char* causes_crash, char* reproducible, char* summary, char* description, char* version, char* player, int32 account_id, char* spawn_name, int32 spawn_id, int32 zone_id){ + Query query; + string bug_report = string("insert into bugs (world_id, category, subcategory, causes_crash, reproducible, summary, description, version, player, account_id, spawn_name, spawn_id, zone_id) values(%lu, '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', %lu, '%s', %lu, %lu)"); + query.RunQuery2(Q_INSERT, bug_report.c_str(), world_id, database.getSafeEscapeString(category).c_str(), database.getSafeEscapeString(subcategory).c_str(), + database.getSafeEscapeString(causes_crash).c_str(), database.getSafeEscapeString(reproducible).c_str(), database.getSafeEscapeString(summary).c_str(), + database.getSafeEscapeString(description).c_str(), database.getSafeEscapeString(version).c_str(), database.getSafeEscapeString(player).c_str(), account_id, + database.getSafeEscapeString(spawn_name).c_str(), spawn_id, zone_id); + FixBugReport(); +} + +void LoginDatabase::FixBugReport(){ + Query query; + string bug_report = string("update bugs set description = REPLACE(description,SUBSTRING(description,INSTR(description,'%'), 3),char(CONV(SUBSTRING(description,INSTR(description,'%')+1, 2), 16, 10))), summary = REPLACE(summary,SUBSTRING(summary,INSTR(summary,'%'), 3),char(CONV(SUBSTRING(summary,INSTR(summary,'%')+1, 2), 16, 10)))"); + query.RunQuery2(bug_report.c_str(), Q_UPDATE); +} + +void LoginDatabase::UpdateWorldIPAddress(int32 world_id, int32 address){ + struct in_addr in; + in.s_addr = address; + Query query; + query.RunQuery2(Q_UPDATE, "update login_worldservers set ip_address='%s' where id=%lu", inet_ntoa(in), world_id); +} + +void LoginDatabase::UpdateAccountIPAddress(int32 account_id, int32 address){ + struct in_addr in; + in.s_addr = address; + Query query; + query.RunQuery2(Q_UPDATE, "update account set ip_address='%s' where id=%lu", inet_ntoa(in), account_id); +} \ No newline at end of file diff --git a/EQ2/source/LoginServer/LoginDatabase.h b/EQ2/source/LoginServer/LoginDatabase.h new file mode 100644 index 000000000..822a4487c --- /dev/null +++ b/EQ2/source/LoginServer/LoginDatabase.h @@ -0,0 +1,79 @@ +/* + EQ2Emulator: Everquest II Server Emulator + Copyright (C) 2007 EQ2EMulator Development Team (http://www.eq2emulator.net) + + This file is part of EQ2Emulator. +*/ +#ifndef EQ2LOGIN_EMU_DATABASE_H +#define EQ2LOGIN_EMU_DATABASE_H + +#ifdef WIN32 +#define WIN32_LEAN_AND_MEAN + #include + #include +#endif +#include +#include +#include + +#include "../common/database.h" +#include "../common/types.h" +#include "../common/MiscFunctions.h" +#include "../common/servertalk.h" +#include "../common/Mutex.h" +#include "PacketHeaders.h" +#include "LoginAccount.h" +#include "LWorld.h" +#include "../common/PacketStruct.h" + +using namespace std; +#pragma pack() +class LoginDatabase : public Database +{ +public: + void FixBugReport(); + void UpdateAccountIPAddress(int32 account_id, int32 address); + void UpdateWorldIPAddress(int32 world_id, int32 address); + void SaveBugReport(int32 world_id, char* category, char* subcategory, char* causes_crash, char* reproducible, char* summary, char* description, char* version, char* player, int32 account_id, char* spawn_name, int32 spawn_id, int32 zone_id); + LoginAccount* LoadAccount(const char* name, const char* password); + int32 CheckServerAccount(char* name, char* passwd); + void GetServerAccounts(vector* server_list); + char* GetServerAccountName(int32 id); + bool VerifyDelete(int32 account_id, int32 character_id, const char* name); + void SetServerZoneDescriptions(int32 server_id, map zone_descriptions); + + void LoadCharacters(LoginAccount* acct, int16 version); + void CheckCharacterTimeStamps(LoginAccount* acct); + string GetCharacterName(int32 char_id , int32 server_id); + void SaveCharacterColors(int32 char_id, char* type, EQ2_Color color); + void SaveCharacterFloats(int32 char_id, char* type, float float1, float float2, float float3); + int16 GetAppearanceID(string name); + void DeactivateCharID(int32 server_id, int32 char_id, int32 exception_id); + int32 SaveCharacter(PacketStruct* create, LoginAccount* acct, int32 world_charid); + void LoadAppearanceData(int32 char_id, PacketStruct* char_select_packet); + bool UpdateCharacterTimeStamp(int32 account_id, int32 character_id, int32 timestamp_update, int32 server_id); + bool UpdateCharacterLevel(int32 account_id, int32 character_id, int8 in_level, int32 server_id); + bool UpdateCharacterRace(int32 account_id, int32 character_id, int16 in_racetype, int8 in_race, int32 server_id); + bool UpdateCharacterClass(int32 account_id, int32 character_id, int8 in_class, int32 server_id); + bool UpdateCharacterZone(int32 account_id, int32 character_id, int32 zone_id, int32 server_id); + bool UpdateCharacterGender(int32 account_id, int32 character_id, int8 in_gender, int32 server_id); + int32 GetRaceID(char* name); + void UpdateRaceID(char* name); + bool DeleteCharacter(int32 account_id, int32 character_id, int32 server_id); + void SaveClientLog(char* type, char* message, char* player_name, int16 version); + bool CheckVersion(char* version); + void GetLatestTableVersions(LatestTableVersions* table_versions); + TableQuery* GetLatestTableQuery(int32 server_ip, char* name, int16 version); + bool VerifyDataTable(char* name); + sint16 GetDataVersion(char* name); + void SetZoneInformation(int32 server_id, int32 zone_id, PacketStruct* packet); + string GetZoneDescription(char* name); + string GetColumnNames(char* name); + TableDataQuery* GetTableDataQuery(int32 server_ip, char* name, int16 version); + + void UpdateWorldServerStats( LWorld* world, sint32 status); + bool ResetWorldServerStatsConnectedTime( LWorld* world ); + void RemoveOldWorldServerStats(); + void ResetWorldStats(); +}; +#endif \ No newline at end of file diff --git a/EQ2/source/LoginServer/PacketHeaders.cpp b/EQ2/source/LoginServer/PacketHeaders.cpp new file mode 100644 index 000000000..ed213b44c --- /dev/null +++ b/EQ2/source/LoginServer/PacketHeaders.cpp @@ -0,0 +1,63 @@ +/* + EQ2Emulator: Everquest II Server Emulator + Copyright (C) 2007 EQ2EMulator Development Team (http://www.eq2emulator.net) + + This file is part of EQ2Emulator. +*/ +#include "PacketHeaders.h" +#include "../common/MiscFunctions.h" +#include "LWorld.h" + +extern LWorldList world_list; + +void LS_DeleteCharacterRequest::loadData(EQApplicationPacket* packet){ + InitializeLoadData(packet->pBuffer, packet->size); + LoadData(character_number); + LoadData(server_id); + LoadData(spacer); + LoadDataString(name); +} + +EQ2Packet* LS_CharSelectList::serialize(int16 version){ + LS_CharListAccountInfo account_info; + account_info.account_id = account_id; + account_info.unknown1 = 0xFFFFFFFF; + account_info.unknown2 = 0; + account_info.unknown3 = 10; + account_info.unknown4 = 0; + for(int i=0;i<3;i++) + account_info.unknown5[i] = 0xFFFFFFFF; + account_info.unknown5[3] = 0; + + Clear(); + AddData(num_characters); + AddData(char_data); + AddData(account_info); + return new EQ2Packet(OP_AllCharactersDescReplyMsg, getData(), getDataSize()); +} + +void LS_CharSelectList::addChar(uchar* data, int16 size){ + char_data.append((char*)data, size); +} + +void LS_CharSelectList::loadData(int32 account, vector charlist, int16 version){ + vector::iterator itr; + account_id = account; + num_characters = 0; + char_data = ""; + CharSelectProfile* character = 0; + for(itr = charlist.begin();itr != charlist.end();itr++){ + character = *itr; + int32 serverID = character->packet->getType_int32_ByName("server_id"); + if(serverID == 0 || !world_list.FindByID(serverID)) + continue; + num_characters++; + character->SaveData(version); + addChar(character->getData(), character->getDataSize()); + } +} + +void CharSelectProfile::SaveData(int16 in_version){ + Clear(); + AddData(*packet->serializeString()); +} \ No newline at end of file diff --git a/EQ2/source/LoginServer/PacketHeaders.h b/EQ2/source/LoginServer/PacketHeaders.h new file mode 100644 index 000000000..f65a2d5a3 --- /dev/null +++ b/EQ2/source/LoginServer/PacketHeaders.h @@ -0,0 +1,60 @@ +/* + EQ2Emulator: Everquest II Server Emulator + Copyright (C) 2007 EQ2EMulator Development Team (http://www.eq2emulator.net) + + This file is part of EQ2Emulator. +*/ +#ifndef __PACKET_HEADERS__ +#define __PACKET_HEADERS__ + +#include "../common/types.h" +#include "../common/EQPacket.h" +#include "../common/EQ2_Common_Structs.h" +#include "login_structs.h" +#include "../common/DataBuffer.h" +#include "../common/GlobalHeaders.h" +#include "../common/ConfigReader.h" +#include + +extern ConfigReader configReader; + +class CharSelectProfile : public DataBuffer{ +public: + CharSelectProfile(int16 version){ + printf("GetCharSelectProfile\n"); + packet = configReader.getStruct("CharSelectProfile",version); + for(int8 i=0;i<24;i++){ + packet->setEquipmentByName("equip",0,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,i); + } + } + + ~CharSelectProfile(){ + safe_delete(packet); + } + PacketStruct* packet; + + void SaveData(int16 in_version); + void Data(); + int16 size; +}; + +class LS_CharSelectList : public DataBuffer { +public: + int8 num_characters; + int32 account_id; + + EQ2Packet* serialize(int16 version); + void addChar(uchar* data, int16 size); + string char_data; + void loadData(int32 account, vector charlist, int16 version); +}; + +class LS_DeleteCharacterRequest : public DataBuffer{ +public: + int32 character_number; + int32 server_id; + int32 spacer; + EQ2_16BitString name; + void loadData(EQApplicationPacket* packet); +}; +#endif \ No newline at end of file diff --git a/EQ2/source/LoginServer/UpgradeLog.XML b/EQ2/source/LoginServer/UpgradeLog.XML new file mode 100644 index 000000000..2406b78c7 --- /dev/null +++ b/EQ2/source/LoginServer/UpgradeLog.XML @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/EQ2/source/LoginServer/UpgradeLog2.XML b/EQ2/source/LoginServer/UpgradeLog2.XML new file mode 100644 index 000000000..25b404af1 --- /dev/null +++ b/EQ2/source/LoginServer/UpgradeLog2.XML @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/EQ2/source/LoginServer/UpgradeLog3.XML b/EQ2/source/LoginServer/UpgradeLog3.XML new file mode 100644 index 000000000..c3853d6bd --- /dev/null +++ b/EQ2/source/LoginServer/UpgradeLog3.XML @@ -0,0 +1,20 @@ + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/EQ2/source/LoginServer/UpgradeLog4.XML b/EQ2/source/LoginServer/UpgradeLog4.XML new file mode 100644 index 000000000..f38f26a1d --- /dev/null +++ b/EQ2/source/LoginServer/UpgradeLog4.XML @@ -0,0 +1,20 @@ + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/EQ2/source/LoginServer/client.cpp b/EQ2/source/LoginServer/client.cpp new file mode 100644 index 000000000..75d90c8c4 --- /dev/null +++ b/EQ2/source/LoginServer/client.cpp @@ -0,0 +1,901 @@ +/* + EQ2Emulator: Everquest II Server Emulator + Copyright (C) 2007 EQ2EMulator Development Team (http://www.eq2emulator.net) + + This file is part of EQ2Emulator. +*/ +#include "../common/debug.h" +#ifdef WIN32 +#define WIN32_LEAN_AND_MEAN +#include +#include +#include +#else +#include +#include +#include +#include +#endif +#include +#include +#include +#include + +#include "net.h" +#include "client.h" +#include "../common/EQStream.h" +#include "../common/packet_dump.h" +#include "../common/packet_functions.h" +#include "../common/emu_opcodes.h" +#include "../common/MiscFunctions.h" +#include "LWorld.h" +#include "LoginDatabase.h" +#include "../common/ConfigReader.h" +#include "../common/Log.h" + +extern NetConnection net; +extern LWorldList world_list; +extern ClientList client_list; +extern LoginDatabase database; +extern mapEQOpcodeManager; +extern ConfigReader configReader; +using namespace std; +Client::Client(EQStream* ieqnc) { + eqnc = ieqnc; + ip = eqnc->GetrIP(); + port = ntohs(eqnc->GetrPort()); + account_id = 0; + lsadmin = 0; + worldadmin = 0; + lsstatus = 0; + origversion = version = 0; + kicked = false; + verified = false; + memset(bannedreason, 0, sizeof(bannedreason)); + //worldresponse_timer = new Timer(10000); + //worldresponse_timer->Disable(); + memset(key,0,10); + LoginMode = None; + num_updates = 0; + updatetimer = new Timer(500); + updatelisttimer = new Timer(10000); + //keepalive = new Timer(5000); + //logintimer = new Timer(500); // Give time for the servers to send updates + //keepalive->Start(); + //updatetimer->Start(); + //logintimer->Disable(); + disconnectTimer = 0; + memset(ClientSession,0,25); + request_num = 0; + login_account = 0; + createRequest = 0; + playWaitTimer = NULL; + start = false; + update_position = 0; + update_packets = 0; + needs_world_list = true; +} + +Client::~Client() { + //safe_delete(worldresponse_timer); + //safe_delete(logintimer); + safe_delete(login_account); + eqnc->Close(); + safe_delete(playWaitTimer); + safe_delete(createRequest); + safe_delete(disconnectTimer); + safe_delete(updatetimer); +} + +bool Client::Process() { + if(!start && !eqnc->CheckActive()){ + if(!playWaitTimer) + playWaitTimer = new Timer(5000); + else if(playWaitTimer->Check()){ + safe_delete(playWaitTimer); + return false; + } + return true; + } + else if(!start){ + safe_delete(playWaitTimer); + start = true; + } + //if(disconnectTimer && disconnectTimer->Check()) + // getConnection()->SendDisconnect(); + if (!kicked) { + /************ Get all packets from packet manager out queue and process them ************/ + EQApplicationPacket *app = 0; + /*if(logintimer && logintimer->Check()) + { + database.LoadCharacters(GetLoginAccount()); + SendLoginAccepted(); + logintimer->Disable(); + }*/ + /*if(worldresponse_timer && worldresponse_timer->Check()) + { + FatalError(WorldDownErrorMessage); + worldresponse_timer->Disable(); + }*/ + + if(playWaitTimer != NULL && playWaitTimer->Check ( ) ) + { + SendPlayFailed(PLAY_ERROR_SERVER_TIMEOUT); + safe_delete(playWaitTimer); + } + if(!needs_world_list && updatetimer && updatetimer->Check()){ + if(updatelisttimer && updatelisttimer->Check()){ + if(num_updates >= 180){ //30 minutes + getConnection()->SendDisconnect(); + } + else{ + vector::iterator itr; + if(update_packets){ + for(itr = update_packets->begin(); itr != update_packets->end(); itr++){ + safe_delete(*itr); + } + } + safe_delete(update_packets); + update_packets = world_list.GetServerListUpdate(version); + } + num_updates++; + } + else{ + if(!update_packets){ + update_packets = world_list.GetServerListUpdate(version); + } + else{ + if(update_position < update_packets->size()){ + QueuePacket(update_packets->at(update_position)->serialize()); + update_position++; + } + else + update_position = 0; + } + } + } + + while(app = eqnc->PopPacket()) + { + switch(app->GetOpcode()) + { + case OP_LoginRequestMsg:{ +// DumpPacket(app); + PacketStruct* packet = configReader.getStruct("LS_LoginRequest", 1); + if(packet->LoadPacketData(app->pBuffer,app->size)){ + version = packet->getType_int32_ByName("version"); + + LogWrite(LOGIN__DEBUG, 0, "Login", "Client Version Provided: %i", version); + + // Image 2020 Notes + // we keep the original version for special packets like char creation to pass to world server + origversion = version; + // forced version to 60085 for now since those structures seem to work best for steam AoM 12133L Aug 17 2015 11:19:13 build + version = 60085; + + if (EQOpcodeManager.count(GetOpcodeVersion(version)) == 0) { + LogWrite(LOGIN__ERROR, 0, "Login", "Incompatible client version provided: %i", version); + SendLoginDenied(); + return false; + } + + if(EQOpcodeManager.count(GetOpcodeVersion(version)) > 0 && getConnection()){ + getConnection()->SetClientVersion(GetOrigVersion()); + EQ2_16BitString username = packet->getType_EQ2_16BitString_ByName("username"); + EQ2_16BitString password = packet->getType_EQ2_16BitString_ByName("password"); + LoginAccount* acct = database.LoadAccount(username.data.c_str(),password.data.c_str()); + if(acct){ + Client* otherclient = client_list.FindByLSID(acct->getLoginAccountID()); + if(otherclient) + otherclient->getConnection()->SendDisconnect(); // This person is already logged in, we don't want them logged in twice, kick the previous client as it might be a ghost + } + if(acct){ + SetAccountName(username.data.c_str()); + database.UpdateAccountIPAddress(acct->getLoginAccountID(), getConnection()->GetrIP()); + LogWrite(LOGIN__INFO, 0, "Login", "%s successfully logged in.", (char*)username.data.c_str()); + } + else + { + if (username.size > 0) + LogWrite(LOGIN__ERROR, 0, "Login", "%s login failed!", (char*)username.data.c_str()); + else + LogWrite(LOGIN__ERROR, 0, "Login", "[UNKNOWN USER] login failed!"); + } + + if(!acct) + SendLoginDenied(); + else{ + needs_world_list = true; + SetLoginAccount(acct); + SendLoginAccepted(); + } + } + else{ + cout << "Error bad version: " << version << endl; + SendLoginDeniedBadVersion(); + } + } + else{ + cout << "Error loading LS_LoginRequest packet: \n"; + //DumpPacket(app); + } + safe_delete(packet); + break; + } + case OP_KeymapLoadMsg:{ + // cout << "Received OP_KeymapNoneMsg\n"; + //dunno what this is for + break; + } + case OP_AllWSDescRequestMsg:{ + SendWorldList(); + needs_world_list = false; + database.LoadCharacters(GetLoginAccount(), GetOrigVersion()); + SendCharList(); + break; + } + case OP_LsClientCrashlogReplyMsg:{ +// DumpPacket(app); + SaveErrorsToDB(app, "Crash Log"); + break; + } + case OP_LsClientVerifylogReplyMsg:{ +// DumpPacket(app); + SaveErrorsToDB(app, "Verify Log"); + break; + } + case OP_LsClientAlertlogReplyMsg:{ +// DumpPacket(app); + SaveErrorsToDB(app, "Alert Log"); + break; + } + case OP_LsClientBaselogReplyMsg:{ +// DumpPacket(app); + SaveErrorsToDB(app, "Base Log"); + break; + } + case OP_AllCharactersDescRequestMsg:{ + break; + } + case OP_CreateCharacterRequestMsg:{ + PacketStruct* packet = configReader.getStruct("CreateCharacter", GetOrigVersion()); + + playWaitTimer = new Timer ( 15000 ); + playWaitTimer->Start ( ); + cout << "Char Create Request From: " << GetAccountName() << "...."; + if(packet->LoadPacketData(app->pBuffer,app->size)){ + cout << "Loaded Successfully\n"; + packet->setDataByName("account_id",GetAccountID()); + LWorld* world_server = world_list.FindByID(packet->getType_int32_ByName("server_id")); + if(!world_server) + { + cout << GetAccountName() << " attempted creation of character with an invalid server id of: " << packet->getType_int32_ByName("server_id") << "\n"; + break; + } + else + { + ServerPacket* outpack = new ServerPacket(ServerOP_CharacterCreate, app->size+sizeof(int16)); + int16 out_version = GetOrigVersion(); + memcpy(outpack->pBuffer, &out_version, sizeof(int16)); + memcpy(outpack->pBuffer + sizeof(int16), app->pBuffer, app->size); + uchar* tmp = outpack->pBuffer; + tmp+=7; + int32 account_id = GetAccountID(); + memcpy(tmp, &account_id, sizeof(int32)); + world_server->SendPacket(outpack); + safe_delete(outpack); + createRequest = packet; + } + } + else{ + cout << "Error loading Char Create Packet!!\n"; + safe_delete(packet); + } + // world_list.SendWorldChanged(create.profile.server_id, false, this); + break; + } + case OP_PlayCharacterRequestMsg:{ + int32 char_id = 0; + int32 server_id = 0; + PacketStruct* request = configReader.getStruct("LS_PlayRequest",GetVersion()); + + if(request && request->LoadPacketData(app->pBuffer,app->size)){ + char_id = request->getType_int32_ByName("char_id"); + server_id = request->getType_int32_ByName("server_id"); + LWorld* world = world_list.FindByID(server_id); + string name = database.GetCharacterName(char_id,server_id); + if(world && name.length() > 0){ + pending_play_char_id = char_id; + ServerPacket* outpack = new ServerPacket(ServerOP_UsertoWorldReq, sizeof(UsertoWorldRequest_Struct)); + UsertoWorldRequest_Struct* req = (UsertoWorldRequest_Struct*)outpack->pBuffer; + req->char_id = char_id; + req->lsaccountid = GetAccountID(); + req->worldid = server_id; + + struct in_addr in; + in.s_addr = GetIP(); + strcpy(req->ip_address, inet_ntoa(in)); + world->SendPacket(outpack); + delete outpack; + + safe_delete(playWaitTimer); + + playWaitTimer = new Timer ( 5000 ); + playWaitTimer->Start ( ); + } + else{ + cout << GetAccountName() << " sent invalid Play Request: \n"; + SendPlayFailed(PLAY_ERROR_PROBLEM); + DumpPacket(app); + } + } + safe_delete(request); + break; + } + case OP_DeleteCharacterRequestMsg:{ + PacketStruct* request = configReader.getStruct("LS_DeleteCharacterRequest", GetVersion()); + PacketStruct* response = configReader.getStruct("LS_DeleteCharacterResponse", GetVersion()); + if(request && response && request->LoadPacketData(app->pBuffer,app->size)){ + EQ2_16BitString name = request->getType_EQ2_16BitString_ByName("name"); + int32 acct_id = GetAccountID(); + int32 char_id = request->getType_int32_ByName("char_id"); + int32 server_id = request->getType_int32_ByName("server_id"); + if(database.VerifyDelete(acct_id, char_id, name.data.c_str())){ + response->setDataByName("response", 1); + GetLoginAccount()->removeCharacter((char*)name.data.c_str()); + LWorld* world_server = world_list.FindByID(server_id); + if(world_server != NULL) + world_server->SendDeleteCharacter ( char_id , acct_id ); + } + else + response->setDataByName("response", 0); + response->setDataByName("server_id", server_id); + response->setDataByName("char_id", char_id); + response->setDataByName("account_id", account_id); + response->setMediumStringByName("name", (char*)name.data.c_str()); + response->setDataByName("max_characters", 10); + + EQ2Packet* outapp = response->serialize(); + QueuePacket(outapp); + } + safe_delete(request); + safe_delete(response); + break; + } + default: { + char* name = (char*)app->GetOpcodeName(); + if(name) + cout << name; + else + cout << "Unknown"; + cout << " Packet: OPCode: 0x" << hex << setw(2) << setfill('0') << app->GetOpcode() << dec << ", size: " << setw(5) << setfill(' ') << app->Size() << " from " << GetAccountName() << endl; + if (app->Size() < 128) + DumpPacket(app); + } + } + delete app; + } + } + + if (!eqnc->CheckActive()) { + return false; + } + + return true; +} + +void Client::SaveErrorsToDB(EQApplicationPacket* app, char* type){ + int32 size = 0; + memcpy(&size, app->pBuffer + sizeof(int32), sizeof(int32)); + size++; + char* message = new char[size]; + memset(message, 0, size); + z_stream zstream; + int zerror = 0; + zstream.next_in = app->pBuffer + 8; + zstream.avail_in = app->size - 8; + zstream.next_out = (BYTE*)message; + zstream.avail_out = size; + zstream.zalloc = Z_NULL; + zstream.zfree = Z_NULL; + zstream.opaque = Z_NULL; + + zerror = inflateInit( &zstream); + if(zerror != Z_OK) { + safe_delete_array(message); + return; + } + zerror = inflate( &zstream, 0 ); + if(message && strlen(message) > 0) + database.SaveClientLog(type, message, GetLoginAccount()->getLoginName(), GetVersion()); + safe_delete_array(message); +} + +void Client::CharacterApproved(int32 server_id,int32 char_id) +{ + if(createRequest && server_id == createRequest->getType_int32_ByName("server_id")){ + LWorld* world_server = world_list.FindByID(server_id); + if(!world_server) + return; + + PacketStruct* packet = configReader.getStruct("LS_CreateCharacterReply", GetVersion()); + if(packet){ + packet->setDataByName("account_id", GetAccountID()); + packet->setDataByName("response", CREATESUCCESS_REPLY); + packet->setMediumStringByName("name", (char*)createRequest->getType_EQ2_16BitString_ByName("name").data.c_str()); + EQ2Packet* outapp = packet->serialize(); + QueuePacket(outapp); + safe_delete(packet); + database.SaveCharacter(createRequest, GetLoginAccount(),char_id); + + // refresh characters for this account + database.LoadCharacters(GetLoginAccount(), GetVersion()); + + SendCharList(); + } + } + else{ + cout << GetAccountName() << " received invalid CharacterApproval from server: " << server_id << endl; + } + safe_delete(createRequest); +} + +void Client::CharacterRejected(int8 reason_number) +{ + PacketStruct* packet = configReader.getStruct("LS_CreateCharacterReply", GetVersion()); + if(createRequest && packet){ + packet->setDataByName("account_id", GetAccountID()); + int8 clientReasonNum = reason_number; + // reason numbers change and instead of updating the world server + // the login server will hold the up to date #'s +/* + switch(reason_number) + { + // these error codes seem to be removed now, they shutdown the client rather immediately + // for now we are just going to play a joke on them and say they can't create a new character. + case INVALIDRACE_REPLY: + case INVALIDGENDER_REPLY: + clientReasonNum = 8; + break; + case BADNAMELENGTH_REPLY: + clientReasonNum = 9; + break; + case NAMEINVALID_REPLY: + clientReasonNum = 10; + break; + case NAMEFILTER_REPLY: + clientReasonNum = 11; + break; + case NAMETAKEN_REPLY: + clientReasonNum = 12; + break; + case OVERLOADEDSERVER_REPLY: + clientReasonNum = 13; + break; + } +*/ + packet->setDataByName("response", clientReasonNum); + packet->setMediumStringByName("name", ""); + EQ2Packet* outapp = packet->serialize(); + QueuePacket(outapp); + safe_delete(packet); + } + /*LS_CreateCharacterReply reply(GetAccountID(), reason_number, create.profile.name.data); + EQ2Packet* outapp = reply.serialize(); + QueuePacket(outapp); + create.Clear();*/ +} + +void Client::SendCharList(){ + /*PacketStruct* packet = configReader.getStruct("LS_CreateCharacterReply"); + packet->setDataByName("account_id", GetAccountID()); + packet->setDataByName("response", reason_number); + packet->setDataByName("name", &create.profile.name); + EQ2Packet* outapp = packet->serialize(); + QueuePacket(outapp); + safe_delete(packet);*/ + LogWrite(LOGIN__INFO, 0, "Login", "[%s] sending character list.", GetAccountName()); + LS_CharSelectList list; + list.loadData(GetAccountID(), GetLoginAccount()->charlist, GetVersion()); + EQ2Packet* outapp = list.serialize(GetVersion()); +// DumpPacket(outapp); + QueuePacket(outapp); + +} +void Client::SendLoginDeniedBadVersion(){ + EQ2Packet* app = new EQ2Packet(OP_LoginReplyMsg, 0, sizeof(LS_LoginResponse)); + LS_LoginResponse* ls_response = (LS_LoginResponse*)app->pBuffer; + ls_response->reply_code = 6; + ls_response->unknown03 = 0xFFFFFFFF; + ls_response->unknown04 = 0xFFFFFFFF; + QueuePacket(app); +} +void Client::SendLoginDenied(){ + EQ2Packet* app = new EQ2Packet(OP_LoginReplyMsg, 0, sizeof(LS_LoginResponse)); + LS_LoginResponse* ls_response = (LS_LoginResponse*)app->pBuffer; + ls_response->reply_code = 1; + ls_response->unknown03 = 0xFFFFFFFF; + ls_response->unknown04 = 0xFFFFFFFF; + QueuePacket(app); +} + +void Client::SendLoginAccepted(){ //all 0s are a success :) + + + PacketStruct* packet = configReader.getStruct("LS_LoginReplyMsg",version); + int i =0; + if ( packet ) + { + packet->setDataByName("account_id", 1); + packet->setDataByName("login_response", 0); + packet->setDataByName("reset_appearance", 0); + packet->setDataByName("do_not_force_soga", 1); + packet->setDataByName("race_unknown", 0x3F); + packet->setDataByName("unknown11", 2); // can be 7 + packet->setDataByName("sub_level", 2); + packet->setDataByName("race_flag", 0x1FFFFF); + packet->setDataByName("class_flag", 0x7FFFFFE); + packet->setMediumStringByName("username", GetAccountName()); + packet->setMediumStringByName("password", GetAccountName()); + packet->setDataByName("unknown5", 0x7C); + packet->setDataByName("unknown7", 0xFF6FFFBF); + + // Image 2020 Notes + // Login Server only supports AoM at current time, but we will need to keep in mind the structure for 60100 or later calls for additional custom fields + // >=60100 + //packet->setDataByName("unknown7a", 0xFFFF); + //packet->setDataByName("unknown8", 0xFF, 1); + EQ2Packet* outapp = packet->serialize(); + QueuePacket(outapp); + safe_delete(packet); + } + return; + if(version >= 843){ + uchar login_accepted_packet[] ={0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 +,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x7C,0x00,0x00,0xBF,0xBF,0xED,0x03 +,0x1F,0x00,0x00,0x00,0x00,0x01,0x18,0x03,0x05,0x3C,0x02,0x03,0x01,0x00,0xF4,0xF4 +,0xF4,0xFF,0xFF,0xFF,0x3D,0x02,0x08,0x01,0x00,0xF4,0xF4,0xF4,0xFF,0xFF,0xFF,0x41 +,0x02,0x07,0x01,0x00,0xF4,0xF4,0xF4,0xFF,0xFF,0xFF,0xAE,0x0C,0x00,0x00,0x00,0xFF +,0xFF,0xFF,0xFF,0xFF,0xFF,0x34,0x0F,0x10,0x01,0x01,0x93,0x62,0x44,0xCF,0xCF,0xAF +,0x04,0x06,0x3C,0x02,0x03,0x01,0x00,0xB6,0x36,0x36,0xFF,0xFF,0xFF,0x41,0x02,0x07 +,0x01,0x00,0xB6,0x36,0x36,0xFF,0xFF,0xFF,0x3D,0x02,0x08,0x01,0x00,0xB6,0x36,0x36 +,0xFF,0xFF,0xFF,0x0F,0x09,0x00,0x01,0x01,0x67,0x54,0x42,0xA0,0xA0,0x50,0x0F,0x09 +,0x00,0x01,0x01,0x67,0x54,0x42,0xA0,0xA0,0x50,0x34,0x0F,0x10,0x01,0x01,0x93,0x62 +,0x44,0xCF,0xCF,0xAF,0x06,0x06,0x31,0x00,0x00,0x01,0x01,0xF4,0xF4,0xF4,0xF4,0xF4 +,0xF4,0x31,0x00,0x00,0x01,0x01,0xF4,0xF4,0xF4,0xF4,0xF4,0xF4,0xF3,0x02,0x03,0x00 +,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x31,0x00,0x07,0x00,0x00,0xFF,0xFF,0xFF,0xFF +,0xFF,0xFF,0x31,0x00,0x08,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xF8,0x0E,0x10 +,0x01,0x01,0xFF,0xFF,0x00,0x80,0x80,0x00,0x07,0x06,0xE6,0x09,0x00,0x01,0x01,0xBA +,0x7B,0x42,0xBA,0x7B,0x42,0xE6,0x09,0x00,0x01,0x01,0xBA,0x7B,0x42,0xBA,0x7B,0x42 +,0xA6,0x01,0x08,0x01,0x01,0x77,0x60,0x46,0x77,0x60,0x46,0xAA,0x01,0x07,0x01,0x01 +,0x77,0x60,0x46,0x77,0x60,0x46,0xC7,0x0F,0x03,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF +,0xFF,0xB2,0x0C,0x10,0x01,0x01,0xFF,0xFF,0x00,0x80,0x80,0x00,0x09,0x05,0x33,0x02 +,0x03,0x01,0x00,0x2D,0x2D,0x2D,0xFF,0xFF,0xFF,0x34,0x02,0x08,0x01,0x00,0x2D,0x2D +,0x2D,0xFF,0xFF,0xFF,0x38,0x02,0x07,0x01,0x00,0x2D,0x2D,0x2D,0xFF,0xFF,0xFF,0x69 +,0x09,0x00,0x01,0x01,0x6D,0x1C,0x1C,0x93,0x6B,0x6B,0x34,0x0F,0x10,0x01,0x01,0x93 +,0x62,0x44,0xCF,0xCF,0xAF,0x0A,0x05,0x69,0x09,0x00,0x01,0x01,0xA7,0xA7,0xEB,0xA7 +,0xA7,0xEB,0x33,0x02,0x03,0x01,0x00,0xF4,0xF4,0xF4,0xFF,0xFF,0xFF,0x38,0x02,0x07 +,0x01,0x00,0xF4,0xF4,0xF4,0xFF,0xFF,0xFF,0x34,0x02,0x08,0x01,0x00,0xF4,0xF4,0xF4 +,0xFF,0xFF,0xFF,0x34,0x0F,0x10,0x01,0x01,0x93,0x62,0x44,0xCF,0xCF,0xAF,0x0D,0x04 +,0xEA,0x09,0x00,0x01,0x01,0xDD,0xDD,0x8C,0xDD,0xDD,0x8C,0x95,0x02,0x08,0x01,0x00 +,0xF4,0xF4,0x0A,0xFF,0xFF,0xFF,0x94,0x02,0x03,0x01,0x00,0xF4,0xF4,0x0A,0xFF,0xFF +,0xFF,0x99,0x02,0x07,0x01,0x00,0xF4,0xF4,0x0A,0xFF,0xFF,0xFF,0x0E,0x04,0xC6,0x02 +,0x08,0x01,0x00,0x13,0x13,0x13,0xFF,0xFF,0xFF,0xC5,0x02,0x03,0x01,0x00,0x13,0x13 +,0x13,0xFF,0xFF,0xFF,0xCA,0x02,0x07,0x01,0x00,0x13,0x13,0x13,0xFF,0xFF,0xFF,0x14 +,0x09,0x00,0x01,0x01,0x9C,0x4F,0x4F,0x2B,0x15,0x15,0x10,0x04,0xDF,0x09,0x00,0x01 +,0x01,0x70,0xBA,0x70,0xBA,0x7B,0x42,0x38,0x04,0x08,0x01,0x00,0xB6,0xCD,0x2F,0xFF +,0xFF,0xFF,0x37,0x04,0x03,0x01,0x00,0xB6,0xCD,0x2F,0xFF,0xFF,0xFF,0x3C,0x04,0x07 +,0x01,0x00,0xB6,0xCD,0x2F,0xFF,0xFF,0xFF,0x11,0x04,0xDF,0x09,0x00,0x01,0x01,0xBA +,0x7B,0x42,0x62,0xB3,0x62,0x38,0x04,0x08,0x01,0x00,0x1A,0x41,0x1A,0xFF,0xFF,0xFF +,0x3C,0x04,0x07,0x01,0x00,0x1A,0x41,0x1A,0xFF,0xFF,0xFF,0x37,0x04,0x03,0x01,0x00 +,0x1A,0x41,0x1A,0xFF,0xFF,0xFF,0x13,0x04,0x59,0x0E,0x00,0x01,0x01,0x3B,0x7C,0x3B +,0xE2,0xE2,0x85,0xB6,0x03,0x08,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xB5,0x03 +,0x03,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xBA,0x03,0x07,0x00,0x00,0xFF,0xFF +,0xFF,0xFF,0xFF,0xFF,0x14,0x04,0x59,0x0E,0x00,0x01,0x01,0x2B,0x34,0x21,0xE2,0xE2 +,0x85,0xA8,0x03,0x08,0x01,0x01,0x18,0x18,0x18,0x18,0x18,0x18,0xA7,0x03,0x03,0x01 +,0x01,0x18,0x18,0x18,0x18,0x18,0x18,0xAC,0x03,0x07,0x01,0x01,0x18,0x18,0x18,0x18 +,0x18,0x18,0x17,0x04,0x4B,0x0E,0x00,0x01,0x01,0xE6,0x95,0xE6,0xE6,0x95,0xE6,0xDA +,0x01,0x07,0x01,0x01,0x9E,0x9E,0xD8,0xA3,0x6B,0x80,0x92,0x17,0x03,0x01,0x01,0x66 +,0x42,0x4B,0x9E,0x9E,0xD8,0xD6,0x01,0x08,0x01,0x01,0x9E,0x9E,0xD8,0xA3,0x6B,0x80 +,0x18,0x04,0x4D,0x0E,0x00,0x01,0x01,0xCF,0x2F,0xCF,0xE6,0x95,0xE6,0x92,0x17,0x03 +,0x01,0x01,0x70,0x70,0x70,0x67,0x2B,0x67,0xD6,0x01,0x08,0x01,0x01,0x67,0x2B,0x67 +,0x50,0x50,0x50,0xDA,0x01,0x07,0x01,0x01,0x67,0x2B,0x67,0x50,0x50,0x50,0x1A,0x04 +,0xE4,0x0C,0x00,0x01,0x01,0xBA,0xFF,0xBA,0xD4,0xE9,0xFF,0x92,0x17,0x03,0x01,0x01 +,0xDA,0xDA,0xA5,0x60,0x60,0x9E,0xDA,0x01,0x07,0x01,0x01,0x60,0x60,0x9E,0xDA,0xDA +,0xA5,0xD6,0x01,0x08,0x01,0x01,0x60,0x60,0x9E,0xDA,0xDA,0xA5,0x1B,0x04,0x92,0x17 +,0x03,0x01,0x01,0x99,0x48,0x48,0xF7,0xCF,0x82,0xDA,0x01,0x07,0x01,0x01,0xF7,0xCF +,0x82,0x99,0x48,0x48,0xD6,0x01,0x08,0x01,0x01,0xF7,0xCF,0x82,0x99,0x48,0x48,0xD7 +,0x0E,0x00,0x01,0x01,0x8E,0x46,0x46,0x2B,0x15,0x15,0x1D,0x04,0xA9,0x08,0x00,0x01 +,0x01,0xE8,0xB6,0x85,0xE8,0xB6,0x85,0x92,0x17,0x03,0x01,0x01,0x57,0x85,0xAE,0xD8 +,0xE8,0xF4,0xD6,0x01,0x08,0x01,0x01,0xD8,0xE8,0xF4,0x95,0xB3,0xCD,0xDA,0x01,0x07 +,0x01,0x01,0xD8,0xE8,0xF4,0x95,0xB3,0xCD,0x1E,0x04,0x92,0x17,0x03,0x01,0x01,0x62 +,0x57,0x4D,0xA3,0x9E,0x9A,0xD6,0x01,0x08,0x01,0x01,0xFF,0xDA,0xB6,0x6B,0x57,0x44 +,0xDA,0x01,0x07,0x01,0x01,0xFF,0xDA,0xB6,0x6B,0x57,0x44,0x3A,0x0E,0x00,0x01,0x01 +,0x2B,0x54,0x54,0x2B,0x15,0x15,0x21,0x06,0x64,0x03,0x08,0x01,0x00,0x7E,0x4B,0x46 +,0xFF,0xFF,0xFF,0x68,0x03,0x07,0x01,0x00,0x7E,0x4B,0x46,0xFF,0xFF,0xFF,0x63,0x03 +,0x03,0x01,0x00,0x7E,0x4B,0x46,0xFF,0xFF,0xFF,0xA9,0x08,0x00,0x01,0x01,0x1F,0x3F +,0x60,0x62,0x62,0x62,0xA9,0x08,0x00,0x01,0x01,0x1F,0x3F,0x60,0x62,0x62,0x62,0x42 +,0x0F,0x10,0x01,0x01,0xFF,0xFF,0x00,0x80,0x80,0x00,0x22,0x06,0xD6,0x0C,0x00,0x01 +,0x01,0xE6,0x95,0xE6,0x1A,0x1A,0x70,0xD6,0x0C,0x00,0x01,0x01,0xE6,0x95,0xE6,0x1A +,0x1A,0x70,0x64,0x03,0x08,0x01,0x00,0x5D,0x42,0x5D,0xFF,0xFF,0xFF,0x68,0x03,0x07 +,0x01,0x00,0x5D,0x42,0x5D,0xFF,0xFF,0xFF,0x63,0x03,0x03,0x01,0x00,0x5D,0x42,0x5D +,0xFF,0xFF,0xFF,0x42,0x0F,0x10,0x01,0x01,0xFF,0xFF,0x00,0x80,0x80,0x00,0x24,0x06 +,0x63,0x03,0x03,0x01,0x00,0x99,0xC8,0xE2,0xFF,0xFF,0xFF,0x64,0x03,0x08,0x01,0x00 +,0x99,0xC8,0xE2,0xFF,0xFF,0xFF,0x68,0x03,0x07,0x01,0x00,0x99,0xC8,0xE2,0xFF,0xFF +,0xFF,0xD6,0x0C,0x00,0x01,0x01,0x85,0x85,0xA7,0xD1,0xD1,0xAC,0xD6,0x0C,0x00,0x01 +,0x01,0x85,0x85,0xA7,0xD1,0xD1,0xAC,0x34,0x0F,0x10,0x01,0x01,0x93,0x62,0x44,0xCF +,0xCF,0xAF,0x25,0x06,0x63,0x03,0x03,0x01,0x00,0xBF,0xA5,0x7E,0xFF,0xFF,0xFF,0x5C +,0x03,0x08,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x60,0x03,0x07,0x00,0x00,0xFF +,0xFF,0xFF,0xFF,0xFF,0xFF,0xB1,0x08,0x00,0x01,0x01,0x90,0x48,0x48,0x90,0x48,0x48 +,0xB1,0x08,0x00,0x01,0x01,0x90,0x48,0x48,0x90,0x48,0x48,0x34,0x0F,0x10,0x01,0x01 +,0x93,0x62,0x44,0xCF,0xCF,0xAF,0x27,0x06,0xB9,0x16,0x08,0x01,0x01,0x3D,0x54,0x3D +,0xBC,0xBC,0xBC,0xB8,0x16,0x03,0x01,0x01,0x3D,0x54,0x3D,0xBC,0xBC,0xBC,0xBD,0x16 +,0x07,0x01,0x01,0x3D,0x54,0x3D,0xBC,0xBC,0xBC,0x34,0x0F,0x10,0x01,0x01,0x31,0x4D +,0x3F,0xCF,0xCF,0xAF,0xCD,0x08,0x00,0x01,0x01,0x2B,0x54,0x3F,0x3F,0x98,0x6B,0xCD +,0x08,0x00,0x01,0x01,0x2B,0x54,0x3F,0x3F,0x98,0x6B,0x28,0x06,0xB9,0x16,0x08,0x01 +,0x01,0x21,0x21,0x31,0x3F,0x3F,0x3F,0xB8,0x16,0x03,0x01,0x01,0x21,0x21,0x31,0x3F +,0x3F,0x3F,0xBD,0x16,0x07,0x01,0x00,0x48,0x48,0x54,0xFF,0xFF,0xFF,0x34,0x0F,0x10 +,0x01,0x01,0x31,0x4D,0x3F,0xCF,0xCF,0xAF,0xA9,0x08,0x00,0x01,0x01,0x1A,0x1A,0x70 +,0xE6,0x95,0xE6,0xA9,0x08,0x00,0x01,0x01,0x1A,0x1A,0x70,0xE6,0x95,0xE6,0x0A,0xD1 +,0x00,0x00,0x00,0xD0,0x00,0x00,0x00,0xCF,0x00,0x00,0x00,0x6E,0x00,0x00,0x00,0x70 +,0x00,0x00,0x00,0x71,0x00,0x00,0x00,0x72,0x00,0x00,0x00,0x73,0x00,0x00,0x00,0x74 +,0x00,0x00,0x00,0x76,0x00,0x00,0x00}; + memcpy(login_accepted_packet+16, &account_id, sizeof(int32)); + EQ2Packet* app = new EQ2Packet(OP_LoginReplyMsg, login_accepted_packet, sizeof(login_accepted_packet)); + QueuePacket(app); + } + else{ + uchar login_accepted_packet[] ={0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 + ,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x40,0x18,0x00,0x00,0xff,0xde,0x0d + ,0x00,0x00,0x01,0x18,0x03,0x05,0x3c,0x02,0x03,0x01,0x00,0xf4,0xf4,0xf4,0xff,0xff + ,0xff,0x3d,0x02,0x08,0x01,0x00,0xf4,0xf4,0xf4,0xff,0xff,0xff,0x41,0x02,0x07,0x01 + ,0x00,0xf4,0xf4,0xf4,0xff,0xff,0xff,0xae,0x0c,0x00,0x00,0x00,0xff,0xff,0xff,0xff + ,0xff,0xff,0x34,0x0f,0x00,0x01,0x01,0x93,0x62,0x44,0xcf,0xcf,0xaf,0x04,0x06,0x3c + ,0x02,0x03,0x01,0x00,0xb6,0x36,0x36,0xff,0xff,0xff,0x41,0x02,0x07,0x01,0x00,0xb6 + ,0x36,0x36,0xff,0xff,0xff,0x3d,0x02,0x08,0x01,0x00,0xb6,0x36,0x36,0xff,0xff,0xff + ,0x0f,0x09,0x00,0x01,0x01,0x67,0x54,0x42,0xa0,0xa0,0x50,0x0f,0x09,0x00,0x01,0x01 + ,0x67,0x54,0x42,0xa0,0xa0,0x50,0x34,0x0f,0x00,0x01,0x01,0x93,0x62,0x44,0xcf,0xcf + ,0xaf,0x06,0x06,0x31,0x00,0x00,0x01,0x01,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0x31,0x00 + ,0x00,0x01,0x01,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf3,0x02,0x03,0x00,0x00,0xff,0xff + ,0xff,0xff,0xff,0xff,0x31,0x00,0x07,0x00,0x00,0xff,0xff,0xff,0xff,0xff,0xff,0x31 + ,0x00,0x08,0x00,0x00,0xff,0xff,0xff,0xff,0xff,0xff,0xf8,0x0e,0x00,0x01,0x01,0xff + ,0xff,0x00,0x80,0x80,0x00,0x07,0x06,0xe6,0x09,0x00,0x01,0x01,0xba,0x7b,0x42,0xba + ,0x7b,0x42,0xe6,0x09,0x00,0x01,0x01,0xba,0x7b,0x42,0xba,0x7b,0x42,0xa6,0x01,0x08 + ,0x01,0x01,0x77,0x60,0x46,0x77,0x60,0x46,0xaa,0x01,0x07,0x01,0x01,0x77,0x60,0x46 + ,0x77,0x60,0x46,0xc7,0x0f,0x03,0x00,0x00,0xff,0xff,0xff,0xff,0xff,0xff,0xb2,0x0c + ,0x00,0x01,0x01,0xff,0xff,0x00,0x80,0x80,0x00,0x09,0x05,0x33,0x02,0x03,0x01,0x00 + ,0x2d,0x2d,0x2d,0xff,0xff,0xff,0x34,0x02,0x08,0x01,0x00,0x2d,0x2d,0x2d,0xff,0xff + ,0xff,0x38,0x02,0x07,0x01,0x00,0x2d,0x2d,0x2d,0xff,0xff,0xff,0x69,0x09,0x00,0x01 + ,0x01,0x6d,0x1c,0x1c,0x93,0x6b,0x6b,0x34,0x0f,0x00,0x01,0x01,0x93,0x62,0x44,0xcf + ,0xcf,0xaf,0x0a,0x05,0x69,0x09,0x00,0x01,0x01,0xa7,0xa7,0xeb,0xa7,0xa7,0xeb,0x33 + ,0x02,0x03,0x01,0x00,0xf4,0xf4,0xf4,0xff,0xff,0xff,0x38,0x02,0x07,0x01,0x00,0xf4 + ,0xf4,0xf4,0xff,0xff,0xff,0x34,0x02,0x08,0x01,0x00,0xf4,0xf4,0xf4,0xff,0xff,0xff + ,0x34,0x0f,0x00,0x01,0x01,0x93,0x62,0x44,0xcf,0xcf,0xaf,0x0d,0x04,0xea,0x09,0x00 + ,0x01,0x01,0xdd,0xdd,0x8c,0xdd,0xdd,0x8c,0x95,0x02,0x08,0x01,0x00,0xf4,0xf4,0x0a + ,0xff,0xff,0xff,0x94,0x02,0x03,0x01,0x00,0xf4,0xf4,0x0a,0xff,0xff,0xff,0x99,0x02 + ,0x07,0x01,0x00,0xf4,0xf4,0x0a,0xff,0xff,0xff,0x0e,0x04,0xc6,0x02,0x08,0x01,0x00 + ,0x13,0x13,0x13,0xff,0xff,0xff,0xc5,0x02,0x03,0x01,0x00,0x13,0x13,0x13,0xff,0xff + ,0xff,0xca,0x02,0x07,0x01,0x00,0x13,0x13,0x13,0xff,0xff,0xff,0x14,0x09,0x00,0x01 + ,0x01,0x9c,0x4f,0x4f,0x2b,0x15,0x15,0x10,0x04,0xdf,0x09,0x00,0x01,0x01,0x70,0xba + ,0x70,0xba,0x7b,0x42,0x38,0x04,0x08,0x01,0x00,0xb6,0xcd,0x2f,0xff,0xff,0xff,0x37 + ,0x04,0x03,0x01,0x00,0xb6,0xcd,0x2f,0xff,0xff,0xff,0x3c,0x04,0x07,0x01,0x00,0xb6 + ,0xcd,0x2f,0xff,0xff,0xff,0x11,0x04,0xdf,0x09,0x00,0x01,0x01,0xba,0x7b,0x42,0x62 + ,0xb3,0x62,0x38,0x04,0x08,0x01,0x00,0x1a,0x41,0x1a,0xff,0xff,0xff,0x3c,0x04,0x07 + ,0x01,0x00,0x1a,0x41,0x1a,0xff,0xff,0xff,0x37,0x04,0x03,0x01,0x00,0x1a,0x41,0x1a + ,0xff,0xff,0xff,0x13,0x04,0x59,0x0e,0x00,0x01,0x01,0x3b,0x7c,0x3b,0xe2,0xe2,0x85 + ,0xb6,0x03,0x08,0x00,0x00,0xff,0xff,0xff,0xff,0xff,0xff,0xb5,0x03,0x03,0x00,0x00 + ,0xff,0xff,0xff,0xff,0xff,0xff,0xba,0x03,0x07,0x00,0x00,0xff,0xff,0xff,0xff,0xff + ,0xff,0x14,0x04,0x59,0x0e,0x00,0x01,0x01,0x2b,0x34,0x21,0xe2,0xe2,0x85,0xa8,0x03 + ,0x08,0x01,0x01,0x18,0x18,0x18,0x18,0x18,0x18,0xa7,0x03,0x03,0x01,0x01,0x18,0x18 + ,0x18,0x18,0x18,0x18,0xac,0x03,0x07,0x01,0x01,0x18,0x18,0x18,0x18,0x18,0x18,0x17 + ,0x04,0x4b,0x0e,0x00,0x01,0x01,0xe6,0x95,0xe6,0xe6,0x95,0xe6,0xda,0x01,0x07,0x01 + ,0x01,0x9e,0x9e,0xd8,0xa3,0x6b,0x80,0x92,0x17,0x03,0x01,0x01,0x66,0x42,0x4b,0x9e + ,0x9e,0xd8,0xd6,0x01,0x08,0x01,0x01,0x9e,0x9e,0xd8,0xa3,0x6b,0x80,0x18,0x04,0x4d + ,0x0e,0x00,0x01,0x01,0xcf,0x2f,0xcf,0xe6,0x95,0xe6,0x92,0x17,0x03,0x01,0x01,0x70 + ,0x70,0x70,0x67,0x2b,0x67,0xd6,0x01,0x08,0x01,0x01,0x67,0x2b,0x67,0x50,0x50,0x50 + ,0xda,0x01,0x07,0x01,0x01,0x67,0x2b,0x67,0x50,0x50,0x50,0x1a,0x04,0xe4,0x0c,0x00 + ,0x01,0x01,0xba,0xff,0xba,0xd4,0xe9,0xff,0x92,0x17,0x03,0x01,0x01,0xda,0xda,0xa5 + ,0x60,0x60,0x9e,0xda,0x01,0x07,0x01,0x01,0x60,0x60,0x9e,0xda,0xda,0xa5,0xd6,0x01 + ,0x08,0x01,0x01,0x60,0x60,0x9e,0xda,0xda,0xa5,0x1b,0x04,0x92,0x17,0x03,0x01,0x01 + ,0x99,0x48,0x48,0xf7,0xcf,0x82,0xda,0x01,0x07,0x01,0x01,0xf7,0xcf,0x82,0x99,0x48 + ,0x48,0xd6,0x01,0x08,0x01,0x01,0xf7,0xcf,0x82,0x99,0x48,0x48,0xd7,0x0e,0x00,0x01 + ,0x01,0x8e,0x46,0x46,0x2b,0x15,0x15,0x1d,0x04,0xa9,0x08,0x00,0x01,0x01,0xe8,0xb6 + ,0x85,0xe8,0xb6,0x85,0x92,0x17,0x03,0x01,0x01,0x57,0x85,0xae,0xd8,0xe8,0xf4,0xd6 + ,0x01,0x08,0x01,0x01,0xd8,0xe8,0xf4,0x95,0xb3,0xcd,0xda,0x01,0x07,0x01,0x01,0xd8 + ,0xe8,0xf4,0x95,0xb3,0xcd,0x1e,0x04,0x92,0x17,0x03,0x01,0x01,0x62,0x57,0x4d,0xa3 + ,0x9e,0x9a,0xd6,0x01,0x08,0x01,0x01,0xff,0xda,0xb6,0x6b,0x57,0x44,0xda,0x01,0x07 + ,0x01,0x01,0xff,0xda,0xb6,0x6b,0x57,0x44,0x3a,0x0e,0x00,0x01,0x01,0x2b,0x54,0x54 + ,0x2b,0x15,0x15,0x21,0x06,0x64,0x03,0x08,0x01,0x00,0x7e,0x4b,0x46,0xff,0xff,0xff + ,0x68,0x03,0x07,0x01,0x00,0x7e,0x4b,0x46,0xff,0xff,0xff,0x63,0x03,0x03,0x01,0x00 + ,0x7e,0x4b,0x46,0xff,0xff,0xff,0xa9,0x08,0x00,0x01,0x01,0x1f,0x3f,0x60,0x62,0x62 + ,0x62,0xa9,0x08,0x00,0x01,0x01,0x1f,0x3f,0x60,0x62,0x62,0x62,0x42,0x0f,0x00,0x01 + ,0x01,0xff,0xff,0x00,0x80,0x80,0x00,0x22,0x06,0xd6,0x0c,0x00,0x01,0x01,0xe6,0x95 + ,0xe6,0x1a,0x1a,0x70,0xd6,0x0c,0x00,0x01,0x01,0xe6,0x95,0xe6,0x1a,0x1a,0x70,0x64 + ,0x03,0x08,0x01,0x00,0x5d,0x42,0x5d,0xff,0xff,0xff,0x68,0x03,0x07,0x01,0x00,0x5d + ,0x42,0x5d,0xff,0xff,0xff,0x63,0x03,0x03,0x01,0x00,0x5d,0x42,0x5d,0xff,0xff,0xff + ,0x42,0x0f,0x00,0x01,0x01,0xff,0xff,0x00,0x80,0x80,0x00,0x24,0x06,0x63,0x03,0x03 + ,0x01,0x00,0x99,0xc8,0xe2,0xff,0xff,0xff,0x64,0x03,0x08,0x01,0x00,0x99,0xc8,0xe2 + ,0xff,0xff,0xff,0x68,0x03,0x07,0x01,0x00,0x99,0xc8,0xe2,0xff,0xff,0xff,0xd6,0x0c + ,0x00,0x01,0x01,0x85,0x85,0xa7,0xd1,0xd1,0xac,0xd6,0x0c,0x00,0x01,0x01,0x85,0x85 + ,0xa7,0xd1,0xd1,0xac,0x34,0x0f,0x00,0x01,0x01,0x93,0x62,0x44,0xcf,0xcf,0xaf,0x25 + ,0x06,0x63,0x03,0x03,0x01,0x00,0xbf,0xa5,0x7e,0xff,0xff,0xff,0x5c,0x03,0x08,0x00 + ,0x00,0xff,0xff,0xff,0xff,0xff,0xff,0x60,0x03,0x07,0x00,0x00,0xff,0xff,0xff,0xff + ,0xff,0xff,0xb1,0x08,0x00,0x01,0x01,0x90,0x48,0x48,0x90,0x48,0x48,0xb1,0x08,0x00 + ,0x01,0x01,0x90,0x48,0x48,0x90,0x48,0x48,0x34,0x0f,0x00,0x01,0x01,0x93,0x62,0x44 + ,0xcf,0xcf,0xaf,0x27,0x06,0xb9,0x16,0x08,0x01,0x01,0x3d,0x54,0x3d,0xbc,0xbc,0xbc + ,0xb8,0x16,0x03,0x01,0x01,0x3d,0x54,0x3d,0xbc,0xbc,0xbc,0x68,0x03,0x07,0x01,0x00 + ,0x3d,0x54,0x3d,0xff,0xff,0xff,0x34,0x0f,0x00,0x01,0x01,0x31,0x4d,0x3f,0xcf,0xcf + ,0xaf,0xcd,0x08,0x00,0x01,0x01,0x2b,0x54,0x3f,0x3f,0x98,0x6b,0xcd,0x08,0x00,0x01 + ,0x01,0x2b,0x54,0x3f,0x3f,0x98,0x6b,0x28,0x06,0xb9,0x16,0x08,0x01,0x01,0x21,0x21 + ,0x31,0x3f,0x3f,0x3f,0xb8,0x16,0x03,0x01,0x01,0x21,0x21,0x31,0x3f,0x3f,0x3f,0x68 + ,0x03,0x07,0x01,0x00,0x48,0x48,0x54,0xff,0xff,0xff,0x34,0x0f,0x00,0x01,0x01,0x31 + ,0x4d,0x3f,0xcf,0xcf,0xaf,0xa9,0x08,0x00,0x01,0x01,0x1a,0x1a,0x70,0xe6,0x95,0xe6 + ,0xa9,0x08,0x00,0x01,0x01,0x1a,0x1a,0x70,0xe6,0x95,0xe6,0x0a,0xd1,0x00,0x00,0x00 + ,0xd0,0x00,0x00,0x00,0xcf,0x00,0x00,0x00,0x6e,0x00,0x00,0x00,0x70,0x00,0x00,0x00 + ,0x71,0x00,0x00,0x00,0x72,0x00,0x00,0x00,0x73,0x00,0x00,0x00,0x74,0x00,0x00,0x00 + ,0x76,0x00,0x00,0x00}; + memcpy(login_accepted_packet+16, &account_id, sizeof(int32)); + EQ2Packet* app = new EQ2Packet(OP_LoginReplyMsg, login_accepted_packet, sizeof(login_accepted_packet)); + QueuePacket(app); + } + + /*EQ2Packet* app = new EQ2Packet(OP_LoginReplyMsg, 0, sizeof(LS_LoginResponse)); + LS_LoginResponse* ls_response = (LS_LoginResponse*)app->pBuffer; + ls_response->accountid = GetAccountID(); + QueuePacket(app);*/ +} +void Client::SendWorldList(){ + EQ2Packet* pack = world_list.MakeServerListPacket(lsadmin, version); + EQ2Packet* dupe = pack->Copy(); + DumpPacket(dupe->pBuffer,dupe->size); + QueuePacket(dupe); + return; +} +void Client::QueuePacket(EQ2Packet* app){ + eqnc->EQ2QueuePacket(app); +} + +void Client::WorldResponse(int32 worldid, int8 response, char* ip_address, int32 port, int32 access_key) +{ + LWorld* world = world_list.FindByID(worldid); + if(world == 0) { + FatalError(0); + return; + } + if(response != 1){ + if(response == PLAY_ERROR_CHAR_NOT_LOADED){ + string pending_play_char_name = database.GetCharacterName(pending_play_char_id, worldid); + if(database.VerifyDelete(GetAccountID(), pending_play_char_id, pending_play_char_name.c_str())){ + GetLoginAccount()->removeCharacter((char*)pending_play_char_name.c_str()); + } + } + FatalError(response); + return; + } + + PacketStruct* response_packet = configReader.getStruct("LS_PlayResponse", GetVersion()); + if(response_packet){ + safe_delete(playWaitTimer); + response_packet->setDataByName("response", 1); + response_packet->setSmallStringByName("server", ip_address); + response_packet->setDataByName("port", port); + response_packet->setDataByName("account_id", GetAccountID()); + response_packet->setDataByName("access_code", access_key); + EQ2Packet* outapp = response_packet->serialize(); + QueuePacket(outapp); + safe_delete(response_packet); + disconnectTimer = new Timer(1000); + disconnectTimer->Start(); + } + return; +} +void Client::FatalError(int8 response) { + safe_delete(playWaitTimer); + SendPlayFailed(response); +} + +void Client::SendPlayFailed(int8 response){ + PacketStruct* response_packet = configReader.getStruct("LS_PlayResponse", GetVersion()); + if(response_packet){ + response_packet->setDataByName("response", response); + response_packet->setSmallStringByName("server", ""); + response_packet->setDataByName("port", 0); + response_packet->setDataByName("account_id", GetAccountID()); + response_packet->setDataByName("access_code", 0); + EQ2Packet* outapp = response_packet->serialize(); + QueuePacket(outapp); + safe_delete(response_packet); + } +} + +void ClientList::Add(Client* client) { + MClientList.writelock(); + client_list[client] = true; + MClientList.releasewritelock(); +} + +Client* ClientList::Get(int32 ip, int16 port) { + Client* ret = 0; + map::iterator itr; + MClientList.readlock(); + for(itr = client_list.begin(); itr != client_list.end(); itr++){ + if(itr->first->GetIP() == ip && itr->first->GetPort() == port){ + ret = itr->first; + break; + } + } + MClientList.releasereadlock(); + return ret; +} + +void ClientList::FindByCreateRequest(){ + Client* client = 0; + map::iterator itr; + MClientList.readlock(); + for(itr = client_list.begin(); itr != client_list.end(); itr++){ + if(itr->first->AwaitingCharCreationRequest()){ + if(!client) + client = itr->first; + else{ + client = 0;//more than 1 character waiting, dont want to send rejection to wrong one + break; + } + } + } + MClientList.releasereadlock(); + if(client) + client->CharacterRejected(UNKNOWNERROR_REPLY); +} + +Client* ClientList::FindByLSID(int32 lsaccountid) { + Client* client = 0; + map::iterator itr; + MClientList.readlock(); + for(itr = client_list.begin(); itr != client_list.end(); itr++){ + if(itr->first->GetAccountID() == lsaccountid){ + client = itr->first; + break; + } + } + MClientList.releasereadlock(); + return client; +} +void ClientList::SendPacketToAllClients(EQ2Packet* app){ + Client* client = 0; + map::iterator itr; + MClientList.readlock(); + if(client_list.size() > 0){ + for(itr = client_list.begin(); itr != client_list.end(); itr++){ + itr->first->QueuePacket(app->Copy()); + } + } + safe_delete(app); + MClientList.releasereadlock(); +} +void ClientList::Process() { + Client* client = 0; + vector erase_list; + map::iterator itr; + MClientList.readlock(); + for(itr = client_list.begin(); itr != client_list.end(); itr++){ + client = itr->first; + if(!client->Process()) + erase_list.push_back(client); + } + MClientList.releasereadlock(); + if(erase_list.size() > 0){ + vector::iterator erase_itr; + MClientList.writelock(); + for(erase_itr = erase_list.begin(); erase_itr != erase_list.end(); erase_itr++){ + client = *erase_itr; + struct in_addr in; + in.s_addr = client->getConnection()->GetRemoteIP(); + net.numclients--; + cout << Timer::GetCurrentTime2() << " Removing client from ip: " << inet_ntoa(in) << " port: " << ntohs(client->getConnection()->GetRemotePort()) << " Name: " << client->GetAccountName() << endl; + client->getConnection()->SetState(CLOSED); + net.UpdateWindowTitle(); + client_list.erase(client); + } + MClientList.releasewritelock(); + } +} diff --git a/EQ2/source/LoginServer/client.h b/EQ2/source/LoginServer/client.h new file mode 100644 index 000000000..6e53e879b --- /dev/null +++ b/EQ2/source/LoginServer/client.h @@ -0,0 +1,130 @@ +/* + EQ2Emulator: Everquest II Server Emulator + Copyright (C) 2007 EQ2EMulator Development Team (http://www.eq2emulator.net) + + This file is part of EQ2Emulator. +*/ +#ifndef CLIENT_H +#define CLIENT_H + +#include "../common/linked_list.h" +#include "../common/timer.h" +#include "../common/TCPConnection.h" +#include "login_structs.h" +#include "LoginAccount.h" +#include "../common/PacketStruct.h" +#include +#include + +enum eLoginMode { None, Normal, Registration }; +class DelayQue; +class Client +{ +public: + Client(EQStream* ieqnc); + ~Client(); + void SendLoginDenied(); + void SendLoginDeniedBadVersion(); + void SendLoginAccepted(); + void SendWorldList(); + void SendCharList(); + int16 AddWorldToList2(uchar* buffer, char* name, int32 id, int16* flags); + void GenerateChecksum(EQApplicationPacket* outapp); + int8 LoginKey[10]; + int8 ClientSession[25]; + bool Process(); + void SaveErrorsToDB(EQApplicationPacket* app, char* type); + void CharacterApproved(int32 server_id,int32 char_id); + void CharacterRejected(int8 reason_number); + EQStream* getConnection() { return eqnc; } + LoginAccount* GetLoginAccount() { return login_account; } + void SetLoginAccount(LoginAccount* in_account) { + login_account = in_account; + if(in_account) + account_id = in_account->getLoginAccountID(); + } + int16 GetVersion(){ return version; } + int16 GetOrigVersion(){ return origversion; } + char* GetKey() { return key; } + void SetKey(char* in_key) { strcpy(key,in_key); } + int32 GetIP() { return ip; } + int16 GetPort() { return port; } + int32 GetAccountID() { return account_id; } + char* GetAccountName(){ return (char*)account_name.c_str(); } + void SetAccountName(const char* name){ account_name = string(name); } + void ProcessLogin(char* name, char* pass,int seq=0); + void QueuePacket(EQ2Packet* app); + void FatalError(int8 response); + void WorldResponse(int32 worldid, int8 response, char* ip_address, int32 port, int32 access_key); + bool AwaitingCharCreationRequest(){ + if(createRequest) + return true; + else + return false; + } + Timer* updatetimer; + Timer* updatelisttimer; + Timer* disconnectTimer; + //Timer* keepalive; + //Timer* logintimer; + int16 packettotal; + int32 requested_server_id; + int32 request_num; + LinkedList delay_que; + void SendPlayFailed(int8 response); +private: + string pending_play_char_name; + int32 pending_play_char_id; + int8 update_position; + int16 num_updates; + vector* update_packets; + LoginAccount* login_account; + EQStream* eqnc; + + int32 ip; + int16 port; + + int32 account_id; + string account_name; + char key[10]; + int8 lsadmin; + sint16 worldadmin; + int lsstatus; + bool kicked; + bool verified; + bool start; + bool needs_world_list; + int16 version; + int16 origversion; + char bannedreason[30]; + eLoginMode LoginMode; + PacketStruct* createRequest; + Timer* playWaitTimer; +}; + +class ClientList +{ +public: + ClientList() {} + ~ClientList() {} + + void Add(Client* client); + Client* Get(int32 ip, int16 port); + Client* FindByLSID(int32 lsaccountid); + void FindByCreateRequest(); + void SendPacketToAllClients(EQ2Packet* app); + void Process(); +private: + Mutex MClientList; + map client_list; +}; +class DelayQue { +public: + DelayQue(Timer* in_timer, EQApplicationPacket* in_packet){ + timer = in_timer; + packet = in_packet; + }; + Timer* timer; + EQApplicationPacket* packet; +}; +#endif diff --git a/EQ2/source/LoginServer/eq2_login.sql b/EQ2/source/LoginServer/eq2_login.sql new file mode 100644 index 000000000..fe1a8ca33 --- /dev/null +++ b/EQ2/source/LoginServer/eq2_login.sql @@ -0,0 +1,410 @@ +# HeidiSQL Dump +# +# -------------------------------------------------------- +# Host: 69.60.121.221 +# Database: eq2_login +# Server version: 5.0.27 +# Server OS: redhat-linux-gnu +# Target-Compatibility: Standard ANSI SQL +# HeidiSQL version: 3.2 Revision: 1129 +# -------------------------------------------------------- + +/*!40100 SET CHARACTER SET latin1;*/ +/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='ANSI';*/ +/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0;*/ + + +DROP TABLE IF EXISTS "account"; + +# +# Table structure for table 'account' +# + +CREATE TABLE "account" ( + "id" int(10) unsigned NOT NULL auto_increment, + "name" varchar(64) NOT NULL default '', + "passwd" varchar(64) NOT NULL default '', + "ip_address" varchar(50) NOT NULL default '0', + "email_address" varchar(50) NOT NULL default 'Unknown', + PRIMARY KEY ("id"), + UNIQUE KEY "Name" ("name") +) AUTO_INCREMENT=3633 /*!40100 DEFAULT CHARSET=latin1*/; + + + +DROP TABLE IF EXISTS "appearances"; + +# +# Table structure for table 'appearances' +# + +CREATE TABLE "appearances" ( + "id" int(10) unsigned NOT NULL auto_increment, + "appearance_id" int(10) unsigned NOT NULL, + "name" varchar(250) default NULL, + "table_data_version" smallint(5) unsigned NOT NULL default '1', + PRIMARY KEY ("id"), + UNIQUE KEY "AppID" ("appearance_id") +) AUTO_INCREMENT=15933 /*!40100 DEFAULT CHARSET=latin1*/; + +DROP TABLE IF EXISTS "bugs"; + +# +# Table structure for table 'bugs' +# + +CREATE TABLE "bugs" ( + "id" int(10) unsigned NOT NULL auto_increment, + "Status" enum('New','Invalid','Fixed') NOT NULL default 'New', + "world_id" int(10) unsigned NOT NULL default '0', + "account_id" int(10) unsigned NOT NULL default '0', + "player" varchar(64) NOT NULL default ' ', + "category" varchar(64) NOT NULL default ' ', + "subcategory" varchar(64) NOT NULL default ' ', + "causes_crash" varchar(64) NOT NULL default ' ', + "reproducible" varchar(64) NOT NULL default ' ', + "summary" varchar(128) NOT NULL default ' ', + "description" text NOT NULL, + "version" varchar(32) NOT NULL default ' ', + "spawn_name" varchar(64) NOT NULL default 'N/A', + "spawn_id" int(10) unsigned NOT NULL default '0', + "bug_datetime" timestamp NOT NULL default CURRENT_TIMESTAMP, + "zone_id" int(10) unsigned NOT NULL default '0', + PRIMARY KEY ("id") +) AUTO_INCREMENT=38 /*!40100 DEFAULT CHARSET=latin1*/; + + + +DROP TABLE IF EXISTS "command_list"; + +# +# Table structure for table 'command_list' +# + +CREATE TABLE "command_list" ( + "id" int(10) unsigned NOT NULL auto_increment, + "type" enum('NPC','OBJECT','PLAYER') NOT NULL default 'NPC', + "sub_type" enum('NORMAL','DEFAULT','DEFAULT_ATTACKABLE') NOT NULL default 'NORMAL', + "spawn_id" int(10) unsigned NOT NULL default '0', + "distance" float NOT NULL default '0', + "command_text" varchar(32) NOT NULL default '', + "command" varchar(32) NOT NULL default '', + "comment" varchar(255) NOT NULL default '', + "table_data_version" smallint(5) unsigned NOT NULL default '1', + PRIMARY KEY ("id") +) AUTO_INCREMENT=6 /*!40100 DEFAULT CHARSET=latin1*/; + + + +DROP TABLE IF EXISTS "commands"; + +# +# Table structure for table 'commands' +# + +CREATE TABLE "commands" ( + "id" int(10) unsigned NOT NULL auto_increment, + "name" varchar(64) NOT NULL default '', + "subcommand" varchar(64) NOT NULL, + "handler" int(10) unsigned NOT NULL default '0', + "required_status" smallint(5) NOT NULL default '0', + "table_data_version" smallint(5) unsigned NOT NULL default '1', + PRIMARY KEY ("id"), + UNIQUE KEY "NewIndex" ("name","subcommand") +) AUTO_INCREMENT=217 /*!40100 DEFAULT CHARSET=latin1*/; + + + +DROP TABLE IF EXISTS "download_limits"; + +# +# Table structure for table 'download_limits' +# + +CREATE TABLE "download_limits" ( + "id" int(10) unsigned NOT NULL auto_increment, + "username" varchar(64) default NULL, + "ip_address" varchar(20) default NULL, + "table_name" varchar(64) default NULL, + "table_version" int(10) unsigned NOT NULL default '0', + "data_version" int(10) unsigned NOT NULL default '0', + "num_data_downloads" tinyint(3) unsigned NOT NULL default '0', + "num_table_downloads" tinyint(3) unsigned NOT NULL default '0', + "update_time" timestamp NOT NULL default CURRENT_TIMESTAMP, + PRIMARY KEY ("id"), + UNIQUE KEY "id" ("id"), + KEY "id_2" ("id") +) /*!40100 DEFAULT CHARSET=latin1*/; + + + +DROP TABLE IF EXISTS "download_tables"; + +# +# Table structure for table 'download_tables' +# + +CREATE TABLE "download_tables" ( + "id" int(3) unsigned NOT NULL auto_increment, + "table_name" varchar(64) NOT NULL default '', + PRIMARY KEY ("id") +) AUTO_INCREMENT=32 /*!40100 DEFAULT CHARSET=latin1*/; + + + +DROP TABLE IF EXISTS "factions"; + +# +# Table structure for table 'factions' +# + +CREATE TABLE "factions" ( + "id" int(10) unsigned NOT NULL auto_increment, + "name" varchar(64) NOT NULL default '', + "type" varchar(32) NOT NULL default '', + "description" text NOT NULL, + "default_level" mediumint(9) NOT NULL default '0', + "negative_change" smallint(5) unsigned NOT NULL default '1', + "positive_change" smallint(5) unsigned NOT NULL default '75', + "table_data_version" smallint(5) unsigned NOT NULL default '1', + PRIMARY KEY ("id") +) AUTO_INCREMENT=154 /*!40100 DEFAULT CHARSET=latin1*/; + + + +DROP TABLE IF EXISTS "log_messages"; + +# +# Table structure for table 'log_messages' +# + +CREATE TABLE "log_messages" ( + "id" int(10) unsigned NOT NULL auto_increment, + "time" timestamp NOT NULL default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP, + "type" varchar(64) NOT NULL, + "message" text NOT NULL, + "name" varchar(64) NOT NULL default '', + "version" int(10) unsigned NOT NULL default '0', + PRIMARY KEY ("id") +) AUTO_INCREMENT=20293 /*!40100 DEFAULT CHARSET=latin1*/; + + + +DROP TABLE IF EXISTS "login_char_colors"; + +# +# Table structure for table 'login_char_colors' +# + +CREATE TABLE "login_char_colors" ( + "id" bigint(20) unsigned NOT NULL auto_increment, + "char_id" int(10) unsigned NOT NULL, + "signed_value" tinyint(4) NOT NULL default '0', + "type" varchar(32) NOT NULL, + "red" smallint(6) NOT NULL default '0', + "green" smallint(6) NOT NULL default '0', + "blue" smallint(6) NOT NULL default '0', + PRIMARY KEY ("id"), + UNIQUE KEY "id" ("id"), + KEY "id_2" ("id"), + KEY "CharID" ("char_id") +) AUTO_INCREMENT=320162 /*!40100 DEFAULT CHARSET=latin1*/; + + + +DROP TABLE IF EXISTS "login_characters"; + +# +# Table structure for table 'login_characters' +# + +CREATE TABLE "login_characters" ( + "id" int(10) unsigned NOT NULL auto_increment, + "account_id" int(10) unsigned NOT NULL default '0', + "server_id" int(10) unsigned NOT NULL default '0', + "name" varchar(64) NOT NULL default '', + "race" tinyint(3) unsigned NOT NULL default '0', + "class" tinyint(3) unsigned NOT NULL default '0', + "gender" tinyint(3) unsigned NOT NULL default '0', + "diety" tinyint(3) unsigned NOT NULL default '0', + "body_size" float NOT NULL default '0', + "body_age" float NOT NULL default '0', + "current_zone" varchar(64) NOT NULL default 'antonica', + "level" int(10) unsigned NOT NULL default '1', + "tradeskill_level" int(10) unsigned NOT NULL default '1', + "soga_wing_type" mediumint(8) unsigned NOT NULL, + "soga_chest_type" mediumint(8) unsigned NOT NULL, + "soga_legs_type" mediumint(8) unsigned NOT NULL, + "soga_hair_type" mediumint(8) unsigned NOT NULL, + "soga_race_type" mediumint(8) unsigned NOT NULL, + "legs_type" mediumint(8) unsigned NOT NULL, + "chest_type" mediumint(8) unsigned NOT NULL, + "wing_type" mediumint(8) unsigned NOT NULL, + "hair_type" mediumint(8) unsigned NOT NULL, + "race_type" mediumint(8) unsigned NOT NULL, + "deleted" tinyint(3) unsigned NOT NULL default '0', + "unix_timestamp" int(10) NOT NULL default '0', + "created_date" timestamp NOT NULL default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP, + "last_played" datetime NOT NULL default '0000-00-00 00:00:00', + "char_id" int(11) NOT NULL default '0', + PRIMARY KEY ("id") +) AUTO_INCREMENT=6880 /*!40100 DEFAULT CHARSET=latin1*/; + + + +DROP TABLE IF EXISTS "login_equipment"; + +# +# Table structure for table 'login_equipment' +# + +CREATE TABLE "login_equipment" ( + "id" int(10) unsigned NOT NULL auto_increment, + "char_id" int(10) unsigned NOT NULL default '0', + "item_type" smallint(5) unsigned NOT NULL default '0', + "color1" tinyint(3) unsigned NOT NULL default '255', + "color2" tinyint(3) unsigned NOT NULL default '255', + "color3" tinyint(3) unsigned NOT NULL default '255', + "highlight1" tinyint(3) unsigned NOT NULL default '255', + "highlight2" tinyint(3) unsigned NOT NULL default '255', + "highlight3" tinyint(3) unsigned NOT NULL default '255', + PRIMARY KEY ("id") +) AUTO_INCREMENT=26 /*!40100 DEFAULT CHARSET=latin1*/; + + +DROP TABLE IF EXISTS "login_versions"; + +# +# Table structure for table 'login_versions' +# + +CREATE TABLE "login_versions" ( + "id" smallint(5) unsigned NOT NULL auto_increment, + "version" varchar(30) NOT NULL default '', + PRIMARY KEY ("id"), + UNIQUE KEY "NewIndex" ("version") +) AUTO_INCREMENT=7 /*!40100 DEFAULT CHARSET=latin1*/; + + + +DROP TABLE IF EXISTS "login_worldservers"; + +# +# Table structure for table 'login_worldservers' +# + +CREATE TABLE "login_worldservers" ( + "id" int(11) unsigned NOT NULL auto_increment, + "name" varchar(250) NOT NULL default '', + "disabled" tinyint(3) unsigned NOT NULL default '0', + "account" varchar(30) NOT NULL default '', + "chat_shortname" varchar(20) NOT NULL default '', + "description" text NOT NULL, + "server_type" varchar(15) NOT NULL default '0', + "password" varchar(32) NOT NULL, + "serverop" varchar(64) NOT NULL default '', + "lastseen" int(10) unsigned NOT NULL default '0', + "admin_id" int(11) unsigned NOT NULL default '0', + "greenname" tinyint(1) unsigned NOT NULL default '0', + "showdown" tinyint(4) NOT NULL default '0', + "chat" varchar(20) NOT NULL default '0', + "note" tinytext NOT NULL, + "ip_address" varchar(50) NOT NULL default '0', + "reset_needed" tinyint(3) unsigned NOT NULL default '0', + PRIMARY KEY ("id"), + UNIQUE KEY "account" ("account") +) AUTO_INCREMENT=1425 /*!40100 DEFAULT CHARSET=latin1*/; + + + +DROP TABLE IF EXISTS "login_worldstats"; + +# +# Table structure for table 'login_worldstats' +# + +CREATE TABLE "login_worldstats" ( + "id" int(11) unsigned NOT NULL auto_increment, + "world_id" int(11) unsigned NOT NULL default '0', + "world_status" int(11) NOT NULL default '-1', + "current_players" int(11) unsigned NOT NULL default '0', + "current_zones" int(11) unsigned NOT NULL default '0', + "connected_time" timestamp NOT NULL default CURRENT_TIMESTAMP, + "last_update" timestamp NOT NULL default '0000-00-00 00:00:00', + PRIMARY KEY ("id"), + UNIQUE KEY "NewIndex" ("world_id") +) AUTO_INCREMENT=6037 /*!40100 DEFAULT CHARSET=latin1*/; + + + +DROP TABLE IF EXISTS "opcodes"; + +# +# Table structure for table 'opcodes' +# + +CREATE TABLE "opcodes" ( + "id" int(10) unsigned NOT NULL auto_increment, + "version_range1" smallint(5) unsigned NOT NULL default '0', + "version_range2" smallint(5) unsigned NOT NULL default '0', + "name" varchar(255) NOT NULL default '', + "opcode" smallint(5) unsigned NOT NULL default '0', + "table_data_version" smallint(5) unsigned NOT NULL default '0', + PRIMARY KEY ("id"), + UNIQUE KEY "newindex" ("version_range1","name","version_range2") +) AUTO_INCREMENT=6168 /*!40100 DEFAULT CHARSET=latin1*/; + + + +DROP TABLE IF EXISTS "variables"; + +# +# Table structure for table 'variables' +# + +CREATE TABLE "variables" ( + "variable_name" varchar(64) NOT NULL default '', + "variable_value" varchar(256) NOT NULL default '', + "table_data_version" smallint(5) unsigned NOT NULL default '1', + PRIMARY KEY ("variable_name") +) /*!40100 DEFAULT CHARSET=latin1*/; + + +DROP TABLE IF EXISTS "visual_states"; + +# +# Table structure for table 'visual_states' +# + +CREATE TABLE "visual_states" ( + "id" int(10) unsigned NOT NULL auto_increment, + "name" varchar(64) NOT NULL default 'None', + "table_data_version" smallint(5) unsigned NOT NULL default '1', + PRIMARY KEY ("id") +) AUTO_INCREMENT=48398 /*!40100 DEFAULT CHARSET=latin1*/; + + + +DROP TABLE IF EXISTS "zones"; + +# +# Table structure for table 'zones' +# + +CREATE TABLE "zones" ( + "id" int(11) unsigned NOT NULL auto_increment, + "name" varchar(64) NOT NULL default '', + "file" varchar(64) NOT NULL default '', + "description" varchar(255) NOT NULL default 'Describe me in the zones table! :)', + "safe_x" float NOT NULL default '0', + "safe_y" float NOT NULL default '0', + "safe_z" float NOT NULL default '0', + "underworld" float NOT NULL default '-1e+06', + "table_data_version" smallint(5) unsigned NOT NULL default '1', + PRIMARY KEY ("id"), + UNIQUE KEY "NewIndex" ("name") +) AUTO_INCREMENT=276 /*!40100 DEFAULT CHARSET=latin1*/; + + +/*!40101 SET SQL_MODE=@OLD_SQL_MODE;*/ +/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS;*/ diff --git a/EQ2/source/LoginServer/login_opcodes.h b/EQ2/source/LoginServer/login_opcodes.h new file mode 100644 index 000000000..734ae2f74 --- /dev/null +++ b/EQ2/source/LoginServer/login_opcodes.h @@ -0,0 +1,52 @@ +/* + EQ2Emulator: Everquest II Server Emulator + Copyright (C) 2007 EQ2EMulator Development Team (http://www.eq2emulator.net) + + This file is part of EQ2Emulator. +*/ + +#ifndef LOGIN_OPCODES_H +#define LOGIN_OPCODES_H +#define OP_Login2 0x0200 +#define OP_GetLoginInfo 0x0300 +#define OP_SendServersFragment 0x0D00 +#define OP_LoginInfo 0x0100 +#define OP_SessionId 0x0900 +#define OP_Disconnect 0x0500 +//#define OP_Reg_SendPricing 0x0400 +#define OP_AllFinish 0x0500 +#define OP_Ack5 0x1500 +#define OP_Chat_ChannelList 0x0600 +#define OP_Chat_JoinChannel 0x0700 +#define OP_Chat_PartChannel 0x0800 +#define OP_Chat_ChannelMessage 0x0930 +#define OP_Chat_Tell 0x0a00 +#define OP_Chat_SysMsg 0x0b00 +#define OP_Chat_CreateChannel 0x0c00 +#define OP_Chat_ChangeChannel 0x0d00 +#define OP_Chat_DeleteChannel 0x0e00 +#define OP_Chat_UserList 0x1000 +#define OP_Reg_GetPricing 0x1a00 // for new account signup +#define OP_Reg_SendPricing 0x1b00 +#define OP_RegisterAccount 0x2300 +#define OP_Chat_ChannelWelcome 0x2400 +#define OP_Chat_PopupMakeWindow 0x3000 +#define OP_BillingInfoAccepted 0x3300 // i THINK =p +#define OP_CheckGameCardValid 0x3400 +#define OP_GameCardTimeLeft 0x3600 +#define OP_AccountExpired 0x4200 +#define OP_Reg_GetPricing2 0x4400 // for re-registering +#define OP_ChangePassword 0x4500 +#define OP_ServerList 0x4600 +#define OP_SessionKey 0x4700 +#define OP_RequestServerStatus 0x4800 +#define OP_SendServerStatus 0x4A00 +#define OP_Reg_ChangeAcctLogin 0x5100 +#define OP_LoginBanner 0x5200 +#define OP_Chat_GuildsList 0x5500 +#define OP_Chat_GuildEdit 0x5700 +#define OP_Version 0x5900 +#define OP_RenewAccountBillingInfo 0x7a00 + +#endif /* LOGIN_OPCODES_H */ + diff --git a/EQ2/source/LoginServer/login_structs.h b/EQ2/source/LoginServer/login_structs.h new file mode 100644 index 000000000..3169ca0e1 --- /dev/null +++ b/EQ2/source/LoginServer/login_structs.h @@ -0,0 +1,49 @@ +/* + EQ2Emulator: Everquest II Server Emulator + Copyright (C) 2007 EQ2EMulator Development Team (http://www.eq2emulator.net) + + This file is part of EQ2Emulator. +*/ +#ifndef LOGIN_STRUCTS_H +#define LOGIN_STRUCTS_H + +#include "../common/types.h" +#include "PacketHeaders.h" + +#pragma pack(1) +struct LS_LoginRequest{ + EQ2_16BitString AccessCode; + EQ2_16BitString unknown1; + EQ2_16BitString username; + EQ2_16BitString password; + EQ2_16BitString unknown2[4]; + int16 unknown3; + int32 unknown4[2]; +}; +struct LS_WorldStatusChanged{ + int32 server_id; + int8 up; + int8 locked; + int8 hidden; +}; +struct LS_PlayCharacterRequest{ + int32 character_id; + int32 server_id; + int16 unknown1; +}; +struct LS_OLDPlayCharacterRequest{ + int32 character_id; + EQ2_16BitString name; +}; +struct LS_CharListAccountInfo{ + int32 account_id; + int32 unknown1; + int16 unknown2; + int32 unknown3; + int8 unknown4; + int32 unknown5[4]; + int16 unknown6; +}; +#pragma pack() + +#endif diff --git a/EQ2/source/LoginServer/makefile b/EQ2/source/LoginServer/makefile new file mode 100644 index 000000000..8ab6eaa4a --- /dev/null +++ b/EQ2/source/LoginServer/makefile @@ -0,0 +1,30 @@ +APP=login +SF= ../common/timer.o ../common/packet_dump.o ../common/unix.o \ + ../common/Mutex.o ../common/MiscFunctions.o LoginDatabase.o LoginAccount.o \ + ../common/TCPConnection.o ../common/emu_opcodes.o \ + client.o net.o PacketHeaders.o LWorld.o ../common/md5.o ../common/dbcore.o \ + ../common/EQEMuError.o ../common/misc.o ../common/Crypto.o ../common/RC4.o \ + .obj/debug.o .obj/database.o .obj/EQStream.o ../common/xmlParser.o \ + .obj/EQStreamFactory.o .obj/EQPacket.o ../common/CRC16.o ../common/packet_functions.o \ + ../common/Condition.o ../common/opcodemgr.o ../common/PacketStruct.o ../common/ConfigReader.o + +CC=g++ +LINKER=gcc +DFLAGS=-DEQ2 -DLOGIN +WFLAGS=-Wall -Wuninitialized -Wwrite-strings -Wcast-qual -Wcomment -Wcast-align -Wno-deprecated +COPTS=$(WFLAGS) -g -march=i686 -O -pthread -pipe -DFX -D_GNU_SOURCE -DINVERSEXY $(DFLAGS) -I/usr/include/mysql -I/usr/mysql/include +LINKOPTS=-rdynamic -L. -lstdc++ -lm -lz -L/usr/lib/mysql -L/usr/mysql/lib -lmysqlclient -ldl +all: $(APP) + +$(APP): $(SF) + $(LINKER) $(COPTS) $(OBJS) $^ $(LINKOPTS) -o $@ + +clean: + rm -f $(SF) $(APP) + +%.o: %.cpp + $(CC) -c $(COPTS) $< -o $@ + +.obj/%.o: ../common/%.cpp ../common/%.h + mkdir -p .obj + $(CC) $(COPTS) -c $< -o $@ diff --git a/EQ2/source/LoginServer/net.cpp b/EQ2/source/LoginServer/net.cpp new file mode 100644 index 000000000..36aa4d237 --- /dev/null +++ b/EQ2/source/LoginServer/net.cpp @@ -0,0 +1,282 @@ +/* + EQ2Emulator: Everquest II Server Emulator + Copyright (C) 2007 EQ2EMulator Development Team (http://www.eq2emulator.net) + + This file is part of EQ2Emulator. +*/ +#include "../common/debug.h" + +#include +#include +#include +#include + +#include "../common/queue.h" +#include "../common/timer.h" + +#include "../common/seperator.h" + +#include "net.h" +#include "client.h" + +#include "LoginDatabase.h" +#include "LWorld.h" +#include "../common/packet_functions.h" +#include "../common/EQStreamFactory.h" +#include "../common/MiscFunctions.h" +#include "../common/version.h" + +#include "../common/PacketStruct.h" +#include "../common/DataBuffer.h" +#include "../common/ConfigReader.h" +#include "../common/Log.h" + +#ifdef WIN32 + #define snprintf _snprintf + #define vsnprintf _vsnprintf + #define strncasecmp _strnicmp + #define strcasecmp _stricmp + #include +#else + #include + #include "../common/unix.h" +#endif +EQStreamFactory eqsf(LoginStream); +mapEQOpcodeManager; +//TCPServer eqns(5999); +NetConnection net; +ClientList client_list; +LWorldList world_list; +LoginDatabase database; +ConfigReader configReader; +map EQOpcodeVersions; +Timer statTimer(60000); + +volatile bool RunLoops = true; +bool ReadLoginConfig(); + +#ifdef PUBLICLOGIN +char version[200], consoletitle[200]; +#endif +#include "../common/timer.h" + +#include "../common/CRC16.h" +#include + +int main(int argc, char** argv){ +#ifdef _DEBUG + _CrtSetDbgFlag( _CRTDBG_ALLOC_MEM_DF | _CRTDBG_LEAK_CHECK_DF); +#endif + if (signal(SIGINT, CatchSignal) == SIG_ERR) { + cerr << "Could not set signal handler" << endl; + } + srand(time(NULL)); + + if(!net.ReadLoginConfig()) + return 1; + + const char* structList[] = { "CommonStructs.xml", "LoginStructs.xml" }; + + for (int s = 0; s < sizeof(structList) / sizeof(const char*); s++) + { + LogWrite(INIT__INFO, 0, "Init", "Loading Structs File %s..", structList[s]); + if (configReader.processXML_Elements(structList[s])) + LogWrite(INIT__INFO, 0, "Init", "Loading Structs File %s completed..", structList[s]); + else + { + LogWrite(INIT__ERROR, 0, "Init", "Loading Structs File %s FAILED!", structList[s]); + return 1; + } + } + + + LogWrite(INIT__INFO, 0, "Init", "Initialize World List.."); + world_list.Init(); + + if(eqsf.listen_ip_address) + LogWrite(INIT__INFO, 0, "Init", "Login server listening on %s port %i", eqsf.listen_ip_address, net.GetPort()); + else + LogWrite(INIT__INFO, 0, "Init", "Login server listening on port %i", net.GetPort()); + /*} + else { + cout << "EQNetworkServer.Open() error" << endl; + return 1; + }*/ + if (!eqsf.Open(net.GetPort())) { + LogWrite(INIT__ERROR, 0, "Init", "Failed to open port %i.", net.GetPort()); + return 1; + } + net.UpdateWindowTitle(); + EQStream* eqs; + Timer* TimeoutTimer = new Timer(5000); + TimeoutTimer->Start(); + while(RunLoops) { + Timer::SetCurrentTime(); + while ((eqs = eqsf.Pop())) { + struct in_addr in; + in.s_addr = eqs->GetRemoteIP(); + + LogWrite(LOGIN__INFO, 0, "Login", "New client from IP: %s on port %i", inet_ntoa(in), ntohs(eqs->GetRemotePort())); + Client* client = new Client(eqs); + eqs->SetClientVersion(0); + client_list.Add(client); + net.numclients++; + net.UpdateWindowTitle(); + } + if(TimeoutTimer->Check()){ + eqsf.CheckTimeout(); + } + if(statTimer.Check()){ + world_list.UpdateWorldStats(); + database.RemoveOldWorldServerStats(); + database.FixBugReport(); + } + client_list.Process(); + world_list.Process(); +#ifdef WIN32 + if(kbhit()) + { + int hitkey = getch(); + net.HitKey(hitkey); + } +#endif + Sleep(1); + } + //close + //eqns.Close(); + eqsf.Close(); + world_list.Shutdown(); + return 0; +} +#ifdef WIN32 +void NetConnection::HitKey(int keyhit) +{ + switch(keyhit) + { + case 'l': + case 'L': { + world_list.ListWorldsToConsole(); + break; + } + case '1': + world_list.SendWorldChanged(1, true); + break; + case '2': + world_list.SendWorldChanged(1, false); + break; + case 'H': + case 'h': { + printf("============================\n"); + printf("Available Commands:\n"); + printf("l = Listing of World Servers\n"); + printf("v = Login Version\n"); +// printf("0 = Kick all connected world servers\n"); + printf("============================\n"); + break; + } + default: + printf("Invalid Command.\n"); + break; + } +} +#endif + +void CatchSignal(int sig_num) { + cout << "Got signal " << sig_num << endl; + RunLoops = false; +} + +bool NetConnection::ReadLoginConfig() { + char buf[201], type[201]; + int8 items[5] = {0, 0, 0, 0, 0}; + FILE *f; + + char* lsInfoFile = { "LoginServer.ini" }; + + if (!(f = fopen (lsInfoFile, "r"))) { + LogWrite(INIT__ERROR, 0, "Init", "File %s could not be found..", lsInfoFile); + return false; + } + do { + fgets (buf, 200, f); + if (feof (f)) + { + LogWrite(INIT__ERROR, 0, "Init", "[LoginConfig] block from %s missing..", lsInfoFile); + fclose (f); + return false; + } + } + while (strncasecmp (buf, "[LoginConfig]\n", 14) != 0 && strncasecmp (buf, "[LoginConfig]\r\n", 15) != 0); + + while (!feof (f)) + { +#ifdef WIN32 + if (fscanf (f, "%[^=]=%[^\n]\r\n", type, buf) == 2) +#else + if (fscanf (f, "%[^=]=%[^\r\n]\n", type, buf) == 2) +#endif + { + items[0] = 1; + LoginMode = Standalone; + items[1] = 1; + items[2] = 1; + items[3] = 1; + if (!strncasecmp(type, "serverport", 10)) { + if (Seperator::IsNumber(buf) && atoi(buf) > 0 && atoi(buf) < 0xFFFF) { + port = atoi(buf); + } + } + if (!strncasecmp(type, "serverip", 8)) { + eqsf.listen_ip_address = new char[sizeof(buf) + 1]; + strcpy(eqsf.listen_ip_address, buf); + } + } + } + + fclose (f); + if (!items[0] || (LoginMode == Slave && !(items[1] && items[2] && items[3])) || (items[4] && !(items[2] && items[3]))) + { + LogWrite(INIT__ERROR, 0, "Init", "Incomplete %s..", lsInfoFile); + return false; + } + LogWrite(INIT__INFO, 0, "Init", "%s loaded..", lsInfoFile); + + + LogWrite(INIT__INFO, 0, "Init", "Database init begin.."); + //remove this when all database calls are using the new database class + if (!database.Init()) { + LogWrite(INIT__ERROR, 0, "Init", "Database init FAILED!"); + LogStop(); + return EXIT_FAILURE; + } + + + LogWrite(INIT__INFO, 0, "Init", "Loading opcodes 2.0.."); + EQOpcodeVersions = database.GetVersions(); + map::iterator version_itr2; + int16 version1 = 0; + for (version_itr2 = EQOpcodeVersions.begin(); version_itr2 != EQOpcodeVersions.end(); version_itr2++) { + version1 = version_itr2->first; + EQOpcodeManager[version1] = new RegularOpcodeManager(); + map eq = database.GetOpcodes(version1); + if(!EQOpcodeManager[version1]->LoadOpcodes(&eq)) { + LogWrite(INIT__ERROR, 0, "Init", "Loading opcodes failed. Make sure you have sourced the opcodes.sql file!"); + return false; + } + } + + return true; +} + +void NetConnection::UpdateWindowTitle(char* iNewTitle) { +#ifdef WIN32 + char tmp[500]; + if (iNewTitle) { + snprintf(tmp, sizeof(tmp), "%s", iNewTitle); + } + else { + snprintf(tmp, sizeof(tmp), "%i Server(s), %i Client(s) Connected", net.numservers, net.numclients); + } + SetConsoleTitle(tmp); +#endif +} diff --git a/EQ2/source/LoginServer/net.h b/EQ2/source/LoginServer/net.h new file mode 100644 index 000000000..27e1a26e5 --- /dev/null +++ b/EQ2/source/LoginServer/net.h @@ -0,0 +1,72 @@ +/* + EQ2Emulator: Everquest II Server Emulator + Copyright (C) 2007 EQ2EMulator Development Team (http://www.eq2emulator.net) + + This file is part of EQ2Emulator. +*/ +#ifdef WIN32 +#define WIN32_LEAN_AND_MEAN + #include + #include +#else + #include + #include + #include + #include +#endif + +//#include +#include +#include + +#include "../common/types.h" + +void CatchSignal(int sig_num); +enum eServerMode { Standalone, Master, Slave, Mesh }; + +class NetConnection +{ +public: + NetConnection() { + port = 5999; + listening_socket = 0; + memset(masteraddress, 0, sizeof(masteraddress)); + uplinkport = 0; + memset(uplinkaccount, 0, sizeof(uplinkaccount)); + memset(uplinkpassword, 0, sizeof(uplinkpassword)); + LoginMode = Standalone; + Uplink_WrongVersion = false; + numclients = 0; + numservers = 0; + } + void UpdateWindowTitle(char* iNewTitle = 0); + bool Init(); + void ListenNewClients(); + void HitKey(int keyhit); + char address[1024]; + int32 numclients; + int32 numservers; + + int16 GetPort() { return port; } + void SetPort(int16 in_port) { port = in_port; } + eServerMode GetLoginMode() { return LoginMode; } + + bool ReadLoginConfig(); + char* GetMasterAddress() { return masteraddress; } + int16 GetUplinkPort() { if (uplinkport != 0) return uplinkport; else return port; } + char* GetUplinkAccount() { return uplinkaccount; } + char* GetUplinkPassword() { return uplinkpassword; } + + +protected: + friend class LWorld; + bool Uplink_WrongVersion; +private: + int16 port; + int listening_socket; + char masteraddress[300]; + int16 uplinkport; + char uplinkaccount[300]; + char uplinkpassword[300]; + eServerMode LoginMode; +}; diff --git a/EQ2/source/WorldServer/Achievements/Achievements.cpp b/EQ2/source/WorldServer/Achievements/Achievements.cpp new file mode 100644 index 000000000..0d651649a --- /dev/null +++ b/EQ2/source/WorldServer/Achievements/Achievements.cpp @@ -0,0 +1,332 @@ +/* +EQ2Emulator: Everquest II Server Emulator +Copyright (C) 2007 EQ2EMulator Development Team (http://www.eq2emulator.net) + +This file is part of EQ2Emulator. + +EQ2Emulator is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +EQ2Emulator is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with EQ2Emulator. If not, see . +*/ + +#include "Achievements.h" + +#include "../../common/Log.h" +#include "../../common/ConfigReader.h" +#include + +extern ConfigReader configReader; +extern MasterAchievementList master_achievement_list; + +Achievement::Achievement() { + id = 0; + memset(title, 0, sizeof(title)); + memset(uncompleted_text, 0, sizeof(uncompleted_text)); + memset(completed_text, 0, sizeof(completed_text)); + memset(category, 0, sizeof(category)); + memset(expansion, 0, sizeof(expansion)); + icon = 0; + point_value = 0; + qty_req = 0; + hide = false; + unknown3a = 0; + unknown3b = 0; +} + +Achievement::Achievement(Achievement *in) { + vector *requirements_in; + vector *rewards_in; + vector::iterator itr; + vector::iterator itr2; + struct AchievementRequirements *achievement_requirement; + struct AchievementRewards *achievement_reward; + + assert(in); + + id = in->GetID(); + strncpy(title, in->GetTitle(), sizeof(title)); + strncpy(uncompleted_text, in->GetUncompletedText(), sizeof(uncompleted_text)); + strncpy(completed_text, in->GetCompletedText(), sizeof(completed_text)); + strncpy(category, in->GetCategory(), sizeof(category)); + strncpy(expansion, in->GetExpansion(), sizeof(expansion)); + icon = in->GetIcon(); + point_value = in->GetPointValue(); + qty_req = in->GetQtyReq(); + hide = in->GetHide(); + unknown3a = in->GetUnknown3a(); + unknown3b = in->GetUnknown3b(); + + requirements_in = in->GetRequirements(); + for (itr = requirements_in->begin(); itr != requirements_in->end(); itr++) { + achievement_requirement = new struct AchievementRequirements; + achievement_requirement->achievement_id = (*itr)->achievement_id; + achievement_requirement->name = (*itr)->name; + achievement_requirement->qty_req = (*itr)->qty_req; + requirements.push_back(achievement_requirement); + } + + rewards_in = in->GetRewards(); + for (itr2 = rewards_in->begin(); itr2 != rewards_in->end(); itr2++) { + achievement_reward = new struct AchievementRewards; + achievement_reward->achievement_id = (*itr2)->achievement_id; + achievement_reward->reward = (*itr2)->reward; + rewards.push_back(achievement_reward); + } +} + +Achievement::~Achievement() { + vector::iterator itr; + vector::iterator itr2; + + for (itr = requirements.begin(); itr != requirements.end(); itr++) + safe_delete(*itr); + for (itr2 = rewards.begin(); itr2 != rewards.end(); itr2++) + safe_delete(*itr2); +} + +void Achievement::AddAchievementRequirement(struct AchievementRequirements *requirement) { + assert(requirement); + + requirements.push_back(requirement); +} + +void Achievement::AddAchievementReward(struct AchievementRewards *reward) { + assert(reward); + + rewards.push_back(reward); +} + +void AchievementUpdate::AddAchievementUpdateItems(struct AchievementUpdateItems *update_item) { + assert(update_item); + + update_items.push_back(update_item); +} + +MasterAchievementList::MasterAchievementList() { + m_packetsCreated = false; + masterPacket = 0; + mutex_achievements.SetName("MasterAchievementList::achievements"); +} + +MasterAchievementList::~MasterAchievementList() { + ClearAchievements(); +} + +bool MasterAchievementList::AddAchievement(Achievement *achievement) { + bool ret = false; + + assert(achievement); + + mutex_achievements.writelock(__FUNCTION__, __LINE__); + if (achievements.count(achievement->GetID()) == 0) { + achievements[achievement->GetID()] = achievement; + ret = true; + } + mutex_achievements.releasewritelock(__FUNCTION__, __LINE__); + + return ret; +} + +Achievement * MasterAchievementList::GetAchievement(int32 achievement_id) { + Achievement *achievement = 0; + + mutex_achievements.readlock(__FUNCTION__, __LINE__); + if (achievements.count(achievement_id) > 0) + achievement = achievements[achievement_id]; + mutex_achievements.releasereadlock(__FUNCTION__, __LINE__); + + return achievement; +} + +void MasterAchievementList::ClearAchievements() { + map::iterator itr; + + mutex_achievements.writelock(__FUNCTION__, __LINE__); + for (itr = achievements.begin(); itr != achievements.end(); itr++) + safe_delete(itr->second); + achievements.clear(); + mutex_achievements.releasewritelock(__FUNCTION__, __LINE__); +} + +int32 MasterAchievementList::Size() { + int32 size; + + mutex_achievements.readlock(__FUNCTION__, __LINE__); + size = achievements.size(); + mutex_achievements.releasereadlock(__FUNCTION__, __LINE__); + + return size; +} + +PlayerAchievementList::PlayerAchievementList() { +} + +PlayerAchievementList::~PlayerAchievementList() { + ClearAchievements(); +} + +bool PlayerAchievementList::AddAchievement(Achievement *achievement) { + assert(achievement); + + if (achievements.count(achievement->GetID()) == 0) { + achievements[achievement->GetID()] = achievement; + return true; + } + + return false; +} + +Achievement * PlayerAchievementList::GetAchievement(int32 achievement_id) { + if (achievements.count(achievement_id) > 0) + return achievements[achievement_id]; + + return 0; +} + +void PlayerAchievementList::ClearAchievements() { + map::iterator itr; + + for (itr = achievements.begin(); itr != achievements.end(); itr++) + safe_delete(itr->second); + achievements.clear(); +} + +int32 PlayerAchievementList::Size() { + return achievements.size(); +} + +AchievementUpdate::AchievementUpdate() { + id = 0; + completed_date = 0; + +} + +AchievementUpdate::AchievementUpdate(AchievementUpdate *in) { + vector *items_in; + vector::iterator itr; + struct AchievementUpdateItems *items; + + assert(in); + + id = in->GetID(); + completed_date = in->GetCompletedDate(); + + items_in = in->GetUpdateItems(); + for (itr = items_in->begin(); itr != items_in->end(); itr++) { + items = new struct AchievementUpdateItems; + items->achievement_id = (*itr)->achievement_id; + items->item_update = (*itr)->item_update; + update_items.push_back(items); + } +} + +AchievementUpdate::~AchievementUpdate() { + vector::iterator itr; + + for (itr = update_items.begin(); itr != update_items.end(); itr++) + safe_delete(*itr); +} + + +PlayerAchievementUpdateList::PlayerAchievementUpdateList() { + +} + +PlayerAchievementUpdateList::~PlayerAchievementUpdateList() { + ClearAchievementUpdates(); +} + +bool PlayerAchievementUpdateList::AddAchievementUpdate(AchievementUpdate *update) { + assert(update); + + if (achievement_updates.count(update->GetID()) == 0) { + achievement_updates[update->GetID()] = update; + return true; + } + return false; +} + +void PlayerAchievementUpdateList::ClearAchievementUpdates() { + map::iterator itr; + + for (itr = achievement_updates.begin(); itr != achievement_updates.end(); itr++) + safe_delete(itr->second); + achievement_updates.clear(); +} + +int32 PlayerAchievementUpdateList::Size() { + return achievement_updates.size(); +} + +void MasterAchievementList::CreateMasterAchievementListPacket() { + map::iterator itr; + Achievement *achievement; + vector *requirements = 0; + vector::iterator itr2; + AchievementRequirements *requirement; + vector *rewards = 0; + vector::iterator itr3; + AchievementRewards *reward; + PacketStruct *packet; + int16 i = 0; + int16 j = 0; + int16 k = 0; + int16 version = 1096; + + if (!(packet = configReader.getStruct("WS_CharacterAchievements", version))) { + return; + } + + packet->setArrayLengthByName("num_achievements" , achievements.size()); + for (itr = achievements.begin(); itr != achievements.end(); itr++) { + achievement = itr->second; + packet->setArrayDataByName("achievement_id", achievement->GetID(), i); + packet->setArrayDataByName("title", achievement->GetTitle(), i); + packet->setArrayDataByName("uncompleted_text", achievement->GetUncompletedText(), i); + packet->setArrayDataByName("completed_text", achievement->GetCompletedText(), i); + packet->setArrayDataByName("category", achievement->GetCategory(), i); + packet->setArrayDataByName("expansion", achievement->GetExpansion(), i); + packet->setArrayDataByName("icon", achievement->GetIcon(), i); + packet->setArrayDataByName("point_value", achievement->GetPointValue(), i); + packet->setArrayDataByName("qty_req", achievement->GetQtyReq(), i); + packet->setArrayDataByName("hide_achievement", achievement->GetHide(), i); + packet->setArrayDataByName("unknown3", achievement->GetUnknown3a(), i); + packet->setArrayDataByName("unknown3", achievement->GetUnknown3b(), i); + requirements = achievement->GetRequirements(); + rewards = achievement->GetRewards(); + j = 0; + k = 0; + packet->setSubArrayLengthByName("num_items", requirements->size(), i, j); + for (itr2 = requirements->begin(); itr2 != requirements->end(); itr2++) { + requirement = *itr2; + packet->setSubArrayDataByName("item_name", requirement->name.c_str(), i, j); + packet->setSubArrayDataByName("item_qty_req", requirement->qty_req, i, j); + j++; + } + packet->setSubArrayLengthByName("num_rewards", achievement->GetRewards()->size(), i, k); + for (itr3 = rewards->begin(); itr3 != rewards->end(); itr3++) { + reward = *itr3; + packet->setSubArrayDataByName("reward_item", reward->reward.c_str(), i, k); + k++; + } + i++; + } + + //packet->PrintPacket(); + EQ2Packet* data = packet->serialize(); + masterPacket = new EQ2Packet(OP_ClientCmdMsg, data->pBuffer, data->size); + safe_delete(packet); + safe_delete(data); + //DumpPacket(app); + + m_packetsCreated = true; +} diff --git a/EQ2/source/WorldServer/Achievements/Achievements.h b/EQ2/source/WorldServer/Achievements/Achievements.h new file mode 100644 index 000000000..7b1895cb0 --- /dev/null +++ b/EQ2/source/WorldServer/Achievements/Achievements.h @@ -0,0 +1,176 @@ +/* +EQ2Emulator: Everquest II Server Emulator +Copyright (C) 2007 EQ2EMulator Development Team (http://www.eq2emulator.net) + +This file is part of EQ2Emulator. + +EQ2Emulator is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +EQ2Emulator is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with EQ2Emulator. If not, see . +*/ + +#ifndef ACHIEVEMENTS_H_ +#define ACHIEVEMENTS_H_ + +#include "../../common/types.h" +#include "../../common/Mutex.h" +#include "../Items/Items.h" +#include +#include + +using namespace std; + +struct AchievementRewards +{ + int32 achievement_id; + string reward; +}; + +struct AchievementRequirements +{ + int32 achievement_id; + string name; + int32 qty_req; +}; + +struct AchievementUpdateItems +{ + int32 achievement_id; + int32 item_update; +}; + +class Achievement { +public: + Achievement(); + Achievement(Achievement *in); + virtual ~Achievement(); + + void SetID(int32 id) {this->id = id;} + void SetTitle(const char *title) {strncpy(this->title, title, sizeof(this->title));} + void SetUncompletedText(const char *uncompleted_text) {strncpy(this->uncompleted_text, uncompleted_text, sizeof(this->uncompleted_text));} + void SetCompletedText(const char *completed_text) {strncpy(this->completed_text, completed_text, sizeof(this->completed_text));} + void SetCategory(const char *category) {strncpy(this->category, category, sizeof(this->category));} + void SetExpansion(const char *expansion) {strncpy(this->expansion, expansion, sizeof(this->expansion));} + void SetIcon(int16 icon) {this->icon = icon;} + void SetPointValue(int32 point_value) {this->point_value = point_value;} + void SetQtyReq(int32 qty_req) {this->qty_req = qty_req;} + void SetHide(bool hide) {this->hide = hide;} + void SetUnknown3a(int32 unknown3a) {this->unknown3a = unknown3a;} + void SetUnknown3b(int32 unknown3b) {this->unknown3b = unknown3b;} + + void AddAchievementRequirement(struct AchievementRequirements *requirements); + void AddAchievementReward(struct AchievementRewards *reward); + + int32 GetID() {return id;} + const char * GetTitle() {return title;} + const char * GetUncompletedText() {return uncompleted_text;} + const char * GetCompletedText() {return completed_text;} + const char * GetCategory() {return category;} + const char * GetExpansion() {return expansion;} + int16 GetIcon() {return icon;} + int32 GetPointValue() {return point_value;} + int32 GetQtyReq() {return qty_req;} + bool GetHide() {return hide;} + int32 GetUnknown3a() {return unknown3a;} + int32 GetUnknown3b() {return unknown3b;} + vector * GetRequirements() {return &requirements;} + vector * GetRewards() {return &rewards;} + +private: + int32 id; + char title[512]; + char uncompleted_text[512]; + char completed_text[512]; + char category[32]; + char expansion[32]; + int16 icon; + int32 point_value; + int32 qty_req; + bool hide; + int32 unknown3a; + int32 unknown3b; + vector requirements; + vector rewards; +}; + +class AchievementUpdate { +public: + AchievementUpdate(); + AchievementUpdate(AchievementUpdate *in); + virtual ~AchievementUpdate(); + + void SetID(int32 id) {this->id = id;} + void SetCompletedDate(int32 completed_date) {this->completed_date = completed_date;} + + void AddAchievementUpdateItems(struct AchievementUpdateItems *update_items); + + int32 GetID() {return id;} + int32 GetCompletedDate() {return completed_date;} + + vector * GetUpdateItems() {return &update_items;} + +private: + int32 id; + int32 completed_date; + vector update_items; +}; + +class MasterAchievementList { +public: + MasterAchievementList(); + virtual ~MasterAchievementList(); + + bool AddAchievement(Achievement *achievement); + Achievement * GetAchievement(int32 achievement_id); + void ClearAchievements(); + int32 Size(); + void CreateMasterAchievementListPacket(); + EQ2Packet * GetAchievementPacket() { return m_packetsCreated ? masterPacket : 0;} + EQ2Packet *masterPacket; +private: + Mutex mutex_achievements; + map achievements; + + bool m_packetsCreated; +}; + +class PlayerAchievementList { +public: + PlayerAchievementList(); + virtual ~PlayerAchievementList(); + + bool AddAchievement(Achievement *achievement); + Achievement * GetAchievement(int32 achievement_id); + void ClearAchievements(); + int32 Size(); + + map * GetAchievements() {return &achievements;} + +private: + map achievements; +}; + +class PlayerAchievementUpdateList { +public: + PlayerAchievementUpdateList(); + virtual ~PlayerAchievementUpdateList(); + + bool AddAchievementUpdate(AchievementUpdate *achievement_update); + void ClearAchievementUpdates(); + int32 Size(); + + map * GetAchievementUpdates() {return &achievement_updates;} + +private: + map achievement_updates; +}; +#endif \ No newline at end of file diff --git a/EQ2/source/WorldServer/Achievements/AchievementsDB.cpp b/EQ2/source/WorldServer/Achievements/AchievementsDB.cpp new file mode 100644 index 000000000..b8fd9bd94 --- /dev/null +++ b/EQ2/source/WorldServer/Achievements/AchievementsDB.cpp @@ -0,0 +1,241 @@ +/* + EQ2Emulator: Everquest II Server Emulator + Copyright (C) 2007 EQ2EMulator Development Team (http://www.eq2emulator.net) + + This file is part of EQ2Emulator. + + EQ2Emulator is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + EQ2Emulator is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with EQ2Emulator. If not, see . +*/ + +#ifdef WIN32 + #include + #include +#endif +#include +#include +#include "../../common/Log.h" +#include "../WorldDatabase.h" +#include "Achievements.h" + +extern MasterAchievementList master_achievement_list; + +void WorldDatabase::LoadAchievements() +{ + Achievement *achievement; + Query query; + MYSQL_ROW row; + MYSQL_RES *res; + int32 aReqs_total = 0; + int32 aRewards_total = 0; + + res = query.RunQuery2(Q_SELECT, "SELECT `achievement_id`,`title`,`uncompleted_text`,`completed_text`,`category`,`expansion`,`icon`,`point_value`,`qty_req`,`hide_achievement`,`unknown3a`,`unknown3b`\n" + "FROM `achievements`"); + + if (res) + { + while ((row = mysql_fetch_row(res))) + { + achievement = new Achievement(); + achievement->SetID(atoul(row[0])); + achievement->SetTitle(row[1]); + achievement->SetUncompletedText(row[2]); + achievement->SetCompletedText(row[3]); + achievement->SetCategory(row[4]); + achievement->SetExpansion(row[5]); + achievement->SetIcon(atoi(row[6])); + achievement->SetPointValue(atoul(row[7])); + achievement->SetQtyReq(atoul(row[8])); + achievement->SetHide( atoi(row[9]) == 0 ? false : true ); + achievement->SetUnknown3a(atoul(row[10])); + achievement->SetUnknown3b(atoul(row[11])); + + LogWrite(ACHIEVEMENT__DEBUG, 5, "Achievements", "\tLoading Achievement: '%s' (%u)", achievement->GetTitle(), achievement->GetID()); + + if (!master_achievement_list.AddAchievement(achievement)) + { + LogWrite(ACHIEVEMENT__ERROR, 0, "Achievements", "Error adding achievement '%s' - duplicate ID: %u", achievement->GetTitle(), achievement->GetID()); + safe_delete(achievement); + continue; + } + + aReqs_total += LoadAchievementRequirements(achievement); + aRewards_total += LoadAchievementRewards(achievement); + } + } + LogWrite(ACHIEVEMENT__DEBUG, 0, "Achievements", "\tLoaded %u achievements", master_achievement_list.Size()); + LogWrite(ACHIEVEMENT__DEBUG, 0, "Achievements", "\tLoaded %u achievement requirements", aReqs_total); + LogWrite(ACHIEVEMENT__DEBUG, 0, "Achievements", "\tLoaded %u achievement rewards", aRewards_total); + +} + +int32 WorldDatabase::LoadAchievementRequirements(Achievement *achievement) +{ + AchievementRequirements *requirements; + Query query; + MYSQL_ROW row; + MYSQL_RES *res; + int16 total = 0; + + assert(achievement); + + res = query.RunQuery2(Q_SELECT, "SELECT `achievement_id`, `name`, `qty_req` FROM `achievements_requirements` WHERE `achievement_id` = %u", achievement->GetID()); + if (res) { + while ((row = mysql_fetch_row(res))) { + requirements = new AchievementRequirements(); + requirements->achievement_id = atoul(row[0]); + requirements->name = row[1]; + requirements->qty_req = atoul(row[2]); + achievement->AddAchievementRequirement(requirements); + LogWrite(ACHIEVEMENT__DEBUG, 5, "Achievements", "Loading Achievements Requirement '%s'", requirements->name.c_str()); + total++; + } + } + LogWrite(ACHIEVEMENT__DEBUG, 5, "Achievements", "Loaded %u requirements for achievement '%s' ID: %u", total, achievement->GetTitle(), achievement->GetID()); + return total; +} + +int32 WorldDatabase::LoadAchievementRewards(Achievement *achievement) +{ + AchievementRewards *rewards; + Query query; + MYSQL_ROW row; + MYSQL_RES *res; + int16 total = 0; + + assert(achievement); + + res = query.RunQuery2(Q_SELECT, "SELECT `achievement_id`, `reward` FROM `achievements_rewards` WHERE `achievement_id` = %u", achievement->GetID()); + if (res) { + while ((row = mysql_fetch_row(res))) { + rewards = new AchievementRewards(); + rewards->achievement_id = atoul(row[0]); + rewards->reward = row[1]; + achievement->AddAchievementReward(rewards); + LogWrite(ACHIEVEMENT__DEBUG, 5, "Achievements", "Loading Achievements Reward '%s'", rewards->reward.c_str()); + total++; + } + } + LogWrite(ACHIEVEMENT__DEBUG, 5, "Achievements", "Loaded %u rewards for achievement '%s' ID: %u", total, achievement->GetTitle(), achievement->GetID()); + return total; +} + +void WorldDatabase::LoadPlayerAchievements(Player *player) { + Achievement *achievement; + Query query; + MYSQL_ROW row; + MYSQL_RES *res; + int32 aReqs_total = 0; + int32 aRewards_total = 0; + int32 total = 0; + + assert(player); + + res = query.RunQuery2(Q_SELECT, "SELECT `achievement_id`,`title`,`uncompleted_text`,`completed_text`,`category`,`expansion`,`icon`,`point_value`,`qty_req`,`hide_achievement`,`unknown3a`,`unknown3b`\n" + "FROM `achievements`"); + + if (res) + { + while ((row = mysql_fetch_row(res))) + { + achievement = new Achievement(); + achievement->SetID(atoul(row[0])); + achievement->SetTitle(row[1]); + achievement->SetUncompletedText(row[2]); + achievement->SetCompletedText(row[3]); + achievement->SetCategory(row[4]); + achievement->SetExpansion(row[5]); + achievement->SetIcon(atoi(row[6])); + achievement->SetPointValue(atoul(row[7])); + achievement->SetQtyReq(atoul(row[8])); + achievement->SetHide( atoi(row[9]) == 0 ? false : true ); + achievement->SetUnknown3a(atoul(row[10])); + achievement->SetUnknown3b(atoul(row[11])); + + LogWrite(ACHIEVEMENT__DEBUG, 5, "Achievements", "\tLoading Achievement: '%s' (%u)", achievement->GetTitle(), achievement->GetID()); + + if (!player->GetAchievementList()->AddAchievement(achievement)) + { + LogWrite(ACHIEVEMENT__ERROR, 0, "Achievements", "Error adding achievement '%s' - duplicate ID: %u", achievement->GetTitle(), achievement->GetID()); + safe_delete(achievement); + continue; + } + total++; + aReqs_total += LoadAchievementRequirements(achievement); + aRewards_total += LoadAchievementRewards(achievement); + } + } + LogWrite(ACHIEVEMENT__DEBUG, 0, "Achievements", "\tLoaded %u achievements for '%s'", total, player->GetName()); + LogWrite(ACHIEVEMENT__DEBUG, 0, "Achievements", "\tLoaded %u achievement requirements for '%s'", aReqs_total, player->GetName()); + LogWrite(ACHIEVEMENT__DEBUG, 0, "Achievements", "\tLoaded %u achievement rewards for '%s'", aRewards_total, player->GetName()); +} + +int32 WorldDatabase::LoadPlayerAchievementsUpdates(Player *player) { + AchievementUpdate *update; + Query query; + MYSQL_ROW row; + MYSQL_RES *res; + int32 total = 0; + int32 items_total = 0; + + assert(player); + + res = query.RunQuery2(Q_SELECT, "SELECT `char_id`, `achievement_id`, `completed_date` FROM character_achievements WHERE char_id = %u ", player->GetCharacterID()); + if (res) { + while ((row = mysql_fetch_row(res))) { + update = new AchievementUpdate(); + update->SetID(atoul(row[1])); + update->SetCompletedDate(atoul(row[2])); + + LogWrite(ACHIEVEMENT__DEBUG, 5, "Achievements", "Loading Player Achievement Update for Achievement ID: %u ", update->GetID()); + + if (!player->GetAchievementUpdateList()->AddAchievementUpdate(update)) + { + LogWrite(ACHIEVEMENT__ERROR, 0, "Achievements", "Error adding achievement update %u - diplicate ID", update->GetID()); + safe_delete(update); + continue; + } + total++; + items_total += LoadPlayerAchievementsUpdateItems(update, player->GetCharacterID()); + } + } + + LogWrite(ACHIEVEMENT__DEBUG, 0, "Achievements", "Loaded %u player achievement updates", total); + + return total; +} + +int32 WorldDatabase::LoadPlayerAchievementsUpdateItems(AchievementUpdate *update, int32 player_id) { + AchievementUpdateItems *update_items; + Query query; + MYSQL_ROW row; + MYSQL_RES *res; + int32 total = 0; + + assert(update); + + res = query.RunQuery2(Q_SELECT, "SELECT `achievement_id`, `items` FROM character_achievements_items WHERE char_id = %u AND achievement_id = %u;", player_id, update->GetID()); + if (res) { + while ((row = mysql_fetch_row(res))) { + update_items = new AchievementUpdateItems(); + update_items->achievement_id = atoul(row[0]); + update_items->item_update = atoul(row[1]); + update->AddAchievementUpdateItems(update_items); + + LogWrite(ACHIEVEMENT__DEBUG, 5, "Achievements", "Loading Player Achievement Update Items for Achievement ID: %u ", update_items->achievement_id); + total++; + } + } + LogWrite(ACHIEVEMENT__DEBUG, 0, "Achievements", "Loaded %u player achievement update items", total); + return total; +} \ No newline at end of file diff --git a/EQ2/source/WorldServer/AltAdvancement/AltAdvancement.cpp b/EQ2/source/WorldServer/AltAdvancement/AltAdvancement.cpp new file mode 100644 index 000000000..b08868157 --- /dev/null +++ b/EQ2/source/WorldServer/AltAdvancement/AltAdvancement.cpp @@ -0,0 +1,1705 @@ +/* +EQ2Emulator: Everquest II Server Emulator +Copyright (C) 2007 EQ2EMulator Development Team (http://www.eq2emulator.net) + +This file is part of EQ2Emulator. + +EQ2Emulator is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +EQ2Emulator is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with EQ2Emulator. If not, see . +*/ + +#include "AltAdvancement.h" +#include "../../common/ConfigReader.h" +#include "../../common/Log.h" +#include "../Spells.h" +#include "../classes.h" +#include "../Rules/Rules.h" +#include +#include +#include +#include "../../common/DatabaseNew.h" +#include "../WorldDatabase.h" +extern ConfigReader configReader; +extern MasterSpellList master_spell_list; +extern Classes classes; +extern RuleManager rule_manager; +extern MasterAANodeList master_tree_nodes; + +MasterAAList::MasterAAList() +{ + MMasterAAList.SetName("MasterAAList::AAList"); +} + +MasterAAList::~MasterAAList() +{ + DestroyAltAdvancements(); +} + +void MasterAAList::AddAltAdvancement(AltAdvanceData* data) { + MMasterAAList.writelock(__FUNCTION__, __LINE__); + AAList.push_back(data); + MMasterAAList.releasewritelock(__FUNCTION__, __LINE__); +} + +int MasterAAList::Size() { + return AAList.size(); +} + +// Jabantiz: Probably a better way to do this but can't think of it right now +AltAdvanceData* MasterAAList::GetAltAdvancement(int32 spellID) { + vector::iterator itr; + AltAdvanceData* data = NULL; + + MMasterAAList.readlock(__FUNCTION__, __LINE__); + for (itr = AAList.begin(); itr != AAList.end(); itr++) { + if ((*itr)->spellID == spellID) { + data = (*itr); + break; + } + } + MMasterAAList.releasereadlock(__FUNCTION__, __LINE__); + + return data; +} + +void MasterAAList::DestroyAltAdvancements() { + MMasterAAList.writelock(__FUNCTION__, __LINE__); + vector::iterator itr; + for (itr = AAList.begin(); itr != AAList.end(); itr++) + safe_delete(*itr); + AAList.clear(); + MMasterAAList.releasewritelock(__FUNCTION__, __LINE__); +} + +MasterAANodeList::MasterAANodeList() { +} + +MasterAANodeList::~MasterAANodeList() { + DestroyTreeNodes(); +} + +void MasterAANodeList::AddTreeNode(TreeNodeData* data) { + TreeNodeList.push_back(data); +} + +void MasterAANodeList::DestroyTreeNodes() { + vector::iterator itr; + for (itr = TreeNodeList.begin(); itr != TreeNodeList.end(); itr++) + safe_delete(*itr); + TreeNodeList.clear(); +} + +int MasterAANodeList::Size() { + return TreeNodeList.size(); +} + +vector MasterAANodeList::GetTreeNodes() { + return TreeNodeList; +} + +EQ2Packet* MasterAAList::GetAAListPacket(Client* client) +{ + + /* + -- OP_DispatchESMsg -- + 5/24/2011 20:54:15 + 199.108.12.165 -> 192.168.0.197 + 0000: 00 38 3B 00 00 00 FF A3 02 FF FF FF FF 00 00 00 .8;............. + 0010: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ + 0020: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ + 0030: 00 00 00 00 00 00 00 00 FF FF FF FF 00 00 00 00 ................ + 0040 00 . + */ + + uchar blah[] = {0xFF,0xE8,0x01, +0x00, //unknown +0x07,0x00,0x00,0x00, //unknown2 +0x07,0x00,0x57,0x61,0x72,0x72,0x69,0x6F,0x72, //class_title_tab +0x0C,0x00, //unknown3 +0x64,0x00,0x00,0x00, //max_class_aa +0xFD,0x74,0xB6,0x73, //class_id +0x00, //kos_req +0x00,0x00,0x00,0x00, //num_class_items + +0x0B,0x00,0x00,0x00, //unknown10 +0x11,0x00,0x00,0x00, //class_points_spent +0x00,0x00,0x3B,0x81,0x01,0x00, //unknown11 +0x00,0x00, //unknown12 +0x00,0x00, //unknown13 +0x00,0x00,0x00,0x00, //unknown14 +0x00,0x00, //unknown15 +0x00,0x00,0x00,0x00,0x00,0x00,0x00, //unknown16 +0x09,0x00,0x42,0x65,0x72,0x73,0x65,0x72,0x6B,0x65,0x72, //subclass_title_tab +0x0E,0x00, //unknown17 +0x64,0x00,0x00,0x00, //max_subclass_aa +0x5F,0xD6,0xAF,0x50, //subclass_id +0x00, //eof_req +0x00,0x00,0x00,0x00, //num_subclass_items + +0x0C,0x00,0x00,0x00, //unknown20 +0x08,0x00,0x00,0x00, //subclass_points_spent +0x00,0x00,0x3B,0x81,0x03,0x14, //unknown21 +0x00,0x00,0x00, //unknown22 +0x1D,0x00,0x3A,0x63,0x65,0x31,0x38,0x36,0x34,0x63,0x37,0x66,0x35,0x33,0x66,0x65,0x62,0x37,0x62,0x5F,0x31,0x3A,0x42,0x65,0x72,0x73,0x65,0x72,0x6B,0x65,0x72, //unknown23 +0x01,0x00,0x00,0x00, //unknown24 +0x1D,0x00,0x3A,0x63,0x65,0x31,0x38,0x36,0x34,0x63,0x37,0x35,0x66,0x39,0x34,0x61,0x32,0x64,0x37,0x5F,0x31,0x3A,0x45,0x78,0x70,0x65,0x72,0x74,0x69,0x73,0x65, //unknown25 +0x00,0x00,0x00,0x00,0x00,0x00, //unknown26 +0x07,0x00,0x53,0x68,0x61,0x64,0x6F,0x77,0x73, //shadows_tab_title +0x2C,0x00, //unknown27 +0x46,0x00,0x00,0x00, //max_shadows_aa +0x53,0x88,0x59,0x62, //shadows_id +0x00, //rok_req +0x00,0x00,0x00,0x00, //num_shadow_items + +0x0E,0x00,0x00,0x00, //unknown30 +0x00,0x00,0x00,0x00, //shadows_points_spent +0x00,0x00,0x3B,0x81,0x03,0x00, //unknown31 +0x00,0x00,0x00, //unknown32 +0x00,0x00, //uknown33 +0x00,0x00,0x00,0x00, //unknown34 +0x00,0x00, //unknown35 +0x00,0x00,0x00,0x00,0x00,0x00, //unknown36 +0x06,0x00,0x48,0x65,0x72,0x6F,0x69,0x63, //heroic_tab_title +0x48,0x00, //unknown37 +0x32,0x00,0x00,0x00, //max_heroic_aa +0xC0,0x6B,0xFC,0x3C, //heroic_id +0x01, //heroic_dov_req +0x00,0x00,0x00,0x00, //num_heroic_items + +0x10,0x00,0x00,0x00, //unknown40 +0x00,0x00,0x00,0x00, //heroic_points_spent +0x00,0x00,0x3B,0x81,0x03,0x00, //unknown41 +0x00,0x00,0x00, //unknown42 +0x00,0x00, //unknown43 +0x00,0x00,0x00,0x00, //unknown44 +0x00,0x00, //unknown45 +0x00,0x00,0x00,0x00,0x00,0x00, //unknown46 +0x0A,0x00,0x54,0x72,0x61,0x64,0x65,0x73,0x6B,0x69,0x6C,0x6C, //tradeskill_tab_title +0x49,0x00, //unknown47 +0x28,0x00,0x00,0x00, //max_tradeskill_aa +0x1E,0xDB,0x41,0x2F, //tradeskill_id +0x00, //exp_req +0x00,0x00,0x00,0x00, //num_tradeskill_items + +0x00,0x00,0x00,0x00, //unknown50 +0x00,0x00,0x00,0x00, //tradeskill_points_spent +0x00,0x00,0x3B,0x81,0x03,0x00, //unknown51 +0x00,0x00,0x00, //unknown52 +0x00,0x00, //unknown53 +0x00,0x00,0x00,0x00, //unknown54 +0x00,0x00, //unknown55 +0x03,0x00,0x00,0x00,0x00,0x00, //unknown56 +0x08,0x00,0x50,0x72,0x65,0x73,0x74,0x69,0x67,0x65, //prestige_tab_title +0x67,0x00, //unknown57 +0x19,0x00,0x00,0x00, //max_prestige_aa +0xC6,0xA8,0x83,0xBD, //prestige_id +0x01, //prestige_dov_req +0x00,0x00,0x00,0x00, //num_prestige_items + +0x10,0x00,0x00,0x00, //unknown60 +0x00,0x00,0x00,0x00, //prestige_points_spent +0x00,0x00,0x3B,0x81,0x03,0x06, //unknown61 +0x00,0x00,0x00, //unknown62 +0x1D,0x00,0x3A,0x34,0x39,0x33,0x64,0x65,0x62,0x62,0x33,0x65,0x36,0x37,0x38,0x62,0x39,0x37,0x37,0x5F,0x35,0x35,0x3A,0x50,0x72,0x65,0x73,0x74,0x69,0x67,0x65, //unknown63 +0x01,0x00,0x00,0x00, //unknown64 +0x27,0x00,0x3A,0x34,0x39,0x33,0x64,0x65,0x62,0x62,0x33,0x65,0x36,0x61,0x38,0x62,0x62,0x37,0x39,0x5F,0x31,0x32,0x3A,0x50,0x72,0x65,0x73,0x74,0x69,0x67,0x65,0x20,0x45,0x78,0x70,0x65,0x72,0x74,0x69,0x73,0x65, //unknown65 +0x02,0x00,0x00,0x00,0x00,0x00, //unknown66 +0x13,0x00,0x54,0x72,0x61,0x64,0x65,0x73,0x6B,0x69,0x6C,0x6C,0x20,0x50,0x72,0x65,0x73,0x74,0x69,0x67,0x65, //tradeskill_prestige_tab_title +0x79,0x00, //unknown67 +0x19,0x00,0x00,0x00, //max_tradeskill_prestige_aa +0x18,0x2C,0x0B,0x74, //tradeskill_prestige_id +0x01, //coe_req +0x00,0x00,0x00,0x00, //num_tradeskill_prestige_items + +0x12,0x00,0x00,0x00, //unknown70 +0x00,0x00,0x00,0x00, //tradeskill_prestige_points_spent +0x00,0x00,0x3B,0x81,0x03,0x00, //unknown71 +0x00,0x00,0x00, //unknown72 +0x00,0x00, //unknown73 +0x00,0x00,0x00,0x00, //unknown74 +0x00,0x00, //unknown75 +0x04,0x00,0x00,0x00,0x00,0x00,0x40,0x00,0x00,0x00, //unknown76 +0x00,0x00,0x00,0x01,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, //unknown77 +0x01, //num_templates +0x64, //template_unknown1 +0x03,0x00,0x4E,0x65,0x77, //template_name +0x00, //template_unknown2 +0x00,0x00}; //num_tabs + + return (new EQ2Packet(OP_AdventureList, blah, sizeof(blah))); +} + + + +struct AAEntry { + int8 template_id; + int8 tab_id; + int32 aa_id; + int16 order; + int8 treeid; +}; +void MasterAAList::DisplayAA(Client* client,int8 newtemplate,int8 changemode) { + map AAtree_id; + map >::iterator itr_tree2; + vector::iterator itr_tree3; + map > Nodes; + vector TreeNodeList = master_tree_nodes.GetTreeNodes(); + vector > > AAEntryList ; + Query query; + MYSQL_ROW row; + int32 Pid = client->GetCharacterID(); + + AAEntryList.resize(8); // max number of templates + for (int i = 0; i < 8; i++) { + AAEntryList[i].resize(5); // max number of tabs + + } + + // load templates 1-3 Personal + + MYSQL_RES* result = query.RunQuery2(Q_SELECT, "SELECT `template_id`,`tab_id`,`aa_id`,`order`,treeid FROM character_aa_defaults where class = %i order by `order`", client->GetPlayer()->GetAdventureClass()); + + while (result && (row = mysql_fetch_row(result))) { + AAEntry newentry; + newentry.template_id = strtoul(row[0], NULL, 0); + newentry.tab_id = strtoul(row[1], NULL, 0); + newentry.aa_id = strtoul(row[2], NULL, 0); + newentry.order = strtoul(row[3], NULL, 0); + newentry.treeid = strtoul(row[4], NULL, 0); + AAEntryList[newentry.template_id][newentry.tab_id].push_back(newentry); + } + LogWrite(SPELL__INFO, 0, "AA", "Loaded %u AA Tree Nodes", AAEntryList.size()); + // load tmplates 4-6 Server + MYSQL_RES* result2 = query.RunQuery2(Q_SELECT, "SELECT `template_id`,`tab_id`,`aa_id`,`order`,treeid FROM character_aa where char_id = %i order by `order`", client->GetCharacterID()); + + while (result2 && (row = mysql_fetch_row(result2))) { + AAEntry newentry; + newentry.template_id = strtoul(row[0], NULL, 0); + newentry.tab_id = strtoul(row[1], NULL, 0); + newentry.aa_id = strtoul(row[2], NULL, 0); + newentry.order = strtoul(row[3], NULL, 0); + newentry.treeid = strtoul(row[4], NULL, 0); + AAEntryList[newentry.template_id][newentry.tab_id].push_back(newentry); + } + LogWrite(SPELL__INFO, 0, "AA", "Loaded %u AA Tree Nodes", AAEntryList.size()); + + + + + for (int x = 0; x < TreeNodeList.size(); x++) + { + int8 class_id = client->GetPlayer()->GetInfoStruct()->class3; + + if (TreeNodeList[x]->classID == class_id) + { + itr_tree2 = Nodes.lower_bound(TreeNodeList[x]->classID); + if (itr_tree2 != Nodes.end() && !(Nodes.key_comp()(TreeNodeList[x]->classID, itr_tree2->first))) + { + (itr_tree2->second).push_back(TreeNodeList[x]); + LogWrite(SPELL__TRACE, 0, "AA", "Added AA Tree node ID: %u", TreeNodeList[x]->treeID); + } + else + { + vector tmpVec; + tmpVec.push_back(TreeNodeList[x]); + Nodes.insert(make_pair(TreeNodeList[x]->classID, tmpVec)); + LogWrite(SPELL__TRACE, 0, "AA", "Added AA Tree node ID: %u", TreeNodeList[x]->treeID); + } + } + } + + map >::iterator itr2; + vector::iterator itr3; + + map > ClassTab; + map > SubclassTab; + map > ShadowsTab; + map > HeroicTab; + map > TradeskillTab; + map > PrestigeTab; + map > TradeskillPrestigeTab; + map > DragonTab; + map > DragonclassTab; + map > FarseasTab; + + MMasterAAList.readlock(__FUNCTION__, __LINE__); + // Get Tree Node ID's + map node_id; + map classid; + + + for (itr_tree2 = Nodes.begin(); itr_tree2 != Nodes.end(); itr_tree2++) { + int8 x = 0; + for (itr_tree3 = itr_tree2->second.begin(); itr_tree3 != itr_tree2->second.end(); itr_tree3++, x++ ) { + node_id[x] = (*itr_tree3)->treeID; + classid[(*itr_tree3)->treeID] = (*itr_tree3)->AAtreeID; + } + } + int rrr = 0; + for (int i =0; i < Size(); i++) { + if (AAList[i]->group == node_id[AA_CLASS]) { + itr2 = ClassTab.lower_bound(AAList[i]->group); + if (itr2 != ClassTab.end() && !(ClassTab.key_comp()(AAList[i]->group, itr2->first))) { + (itr2->second).push_back(AAList[i]); + LogWrite(SPELL__TRACE, 0, "AA", "Added...%u ", AAList[i]->spellID); + } + else { + vector tmpVec; + tmpVec.push_back(AAList[i]); + ClassTab.insert(make_pair(AAList[i]->group, tmpVec)); + LogWrite(SPELL__TRACE, 0, "AA", "Added...%u ", AAList[i]->spellID); + } + } + // Sort for Subclass Tab + if (AAList[i]->group == node_id[AA_SUBCLASS]) { + itr2 = SubclassTab.lower_bound(AAList[i]->group); + if (itr2 != SubclassTab.end() && !(SubclassTab.key_comp()(AAList[i]->group, itr2->first))) { + (itr2->second).push_back(AAList[i]); + LogWrite(SPELL__TRACE, 0, "AA", "Added...%u ", AAList[i]->spellID); + } + else { + vector tmpVec; + tmpVec.push_back(AAList[i]); + SubclassTab.insert(make_pair(AAList[i]->group, tmpVec)); + LogWrite(SPELL__TRACE, 0, "AA", "Added...%u ", AAList[i]->spellID); + } + } + // Sort for Shadows Tab + if (AAList[i]->group == node_id[AA_SHADOW]) { + itr2 = ShadowsTab.lower_bound(AAList[i]->group); + if (itr2 != ShadowsTab.end() && !(ShadowsTab.key_comp()(AAList[i]->group, itr2->first))) { + (itr2->second).push_back(AAList[i]); + LogWrite(SPELL__TRACE, 0, "AA", "Added...%u ", AAList[i]->spellID); + } + else { + vector tmpVec; + tmpVec.push_back(AAList[i]); + ShadowsTab.insert(make_pair(AAList[i]->group, tmpVec)); + LogWrite(SPELL__TRACE, 0, "AA", "Added...%u ", AAList[i]->spellID); + } + } + // Sort for Heroic Tab + if (AAList[i]->group == node_id[AA_HEROIC]) { + itr2 = HeroicTab.lower_bound(AAList[i]->group); + if (itr2 != HeroicTab.end() && !(HeroicTab.key_comp()(AAList[i]->group, itr2->first))) { + (itr2->second).push_back(AAList[i]); + LogWrite(SPELL__TRACE, 0, "AA", "Added...%u ", AAList[i]->spellID); + } + else { + vector tmpVec; + tmpVec.push_back(AAList[i]); + HeroicTab.insert(make_pair(AAList[i]->group, tmpVec)); + LogWrite(SPELL__TRACE, 0, "AA", "Added...%u ", AAList[i]->spellID); + } + } + // Sort for Tradeskill Tab + if (AAList[i]->group == node_id[AA_TRADESKILL]) { + itr2 = TradeskillTab.lower_bound(AAList[i]->group); + if (itr2 != TradeskillTab.end() && !(TradeskillTab.key_comp()(AAList[i]->group, itr2->first))) { + (itr2->second).push_back(AAList[i]); + LogWrite(SPELL__TRACE, 0, "AA", "Added...%u ", AAList[i]->spellID); + } + else { + vector tmpVec; + tmpVec.push_back(AAList[i]); + TradeskillTab.insert(make_pair(AAList[i]->group, tmpVec)); + LogWrite(SPELL__TRACE, 0, "AA", "Added...%u ", AAList[i]->spellID); + } + } + // Sort for Prestige Tab + if (AAList[i]->group == node_id[AA_PRESTIGE]) { + itr2 = PrestigeTab.lower_bound(AAList[i]->group); + if (itr2 != PrestigeTab.end() && !(PrestigeTab.key_comp()(AAList[i]->group, itr2->first))) { + (itr2->second).push_back(AAList[i]); + LogWrite(SPELL__TRACE, 0, "AA", "Added...%u ", AAList[i]->spellID); + } + else { + vector tmpVec; + tmpVec.push_back(AAList[i]); + PrestigeTab.insert(make_pair(AAList[i]->group, tmpVec)); + LogWrite(SPELL__TRACE, 0, "AA", "Added...%u ", AAList[i]->spellID); + } + } + // Sort for TradeskillPrestige Tab + if (AAList[i]->group == node_id[AA_TRADESKILL_PRESTIGE]) { + itr2 = TradeskillPrestigeTab.lower_bound(AAList[i]->group); + if (itr2 != TradeskillPrestigeTab.end() && !(TradeskillPrestigeTab.key_comp()(AAList[i]->group, itr2->first))) { + (itr2->second).push_back(AAList[i]); + LogWrite(SPELL__TRACE, 0, "AA", "Added...%u ", AAList[i]->spellID); + } + else { + vector tmpVec; + tmpVec.push_back(AAList[i]); + TradeskillPrestigeTab.insert(make_pair(AAList[i]->group, tmpVec)); + LogWrite(SPELL__TRACE, 0, "AA", "Added...%u ", AAList[i]->spellID); + } + } + // Sort for Dragon Tab + if (AAList[i]->group == node_id[AA_DRAGON]) { + itr2 = DragonTab.lower_bound(AAList[i]->group); + if (itr2 != DragonTab.end() && !(DragonTab.key_comp()(AAList[i]->group, itr2->first))) { + (itr2->second).push_back(AAList[i]); + LogWrite(SPELL__TRACE, 0, "AA", "Added...%u ", AAList[i]->spellID); + } + else { + vector tmpVec; + tmpVec.push_back(AAList[i]); + DragonTab.insert(make_pair(AAList[i]->group, tmpVec)); + LogWrite(SPELL__TRACE, 0, "AA", "Added...%u ", AAList[i]->spellID); + } + } + // Sort for Dragon Class Tab + if (AAList[i]->group == node_id[AA_DRAGONCLASS]) { + itr2 = DragonclassTab.lower_bound(AAList[i]->group); + if (itr2 != DragonclassTab.end() && !(DragonclassTab.key_comp()(AAList[i]->group, itr2->first))) { + (itr2->second).push_back(AAList[i]); + LogWrite(SPELL__TRACE, 0, "AA", "Added...%u ", AAList[i]->spellID); + } + else { + vector tmpVec; + tmpVec.push_back(AAList[i]); + DragonclassTab.insert(make_pair(AAList[i]->group, tmpVec)); + LogWrite(SPELL__TRACE, 0, "AA", "Added...%u ", AAList[i]->spellID); + } + } + // Sort for Farseas Tab + if (AAList[i]->group == node_id[AA_FARSEAS]) { + itr2 = FarseasTab.lower_bound(AAList[i]->group); + if (itr2 != FarseasTab.end() && !(FarseasTab.key_comp()(AAList[i]->group, itr2->first))) { + (itr2->second).push_back(AAList[i]); + LogWrite(SPELL__TRACE, 0, "AA", "Added...%u ", AAList[i]->spellID); + } + else { + vector tmpVec; + tmpVec.push_back(AAList[i]); + FarseasTab.insert(make_pair(AAList[i]->group, tmpVec)); + LogWrite(SPELL__TRACE, 0, "AA", "Added...%u ", AAList[i]->spellID); + } + } + } + MMasterAAList.releasereadlock(__FUNCTION__, __LINE__); + + int16 version = 0; + int8 class_num_items = 0; + int8 subclass_num_items = 0; + int8 shadows_num_items = 0; + int8 heroic_num_items = 0; + int8 tradeskill_num_items = 0; + int8 prestige_num_items = 0; + int8 tradeskillprestige_num_items = 0; + int8 dragon_num_items = 0; + int8 dragonclass_num_items = 0; + int8 farseas_num_items = 0; + int8 index = 0; + Spell* spell = 0; + int8 current_rank = 0; + int32 class_node_id = 0; + + if (client) + version = client->GetVersion(); + + + + PacketStruct* packet = configReader.getStruct("WS_AdventureList", version); + + + + if (version >= 58617) { + packet->setDataByName("num_aa_trees", 10);// number of AA tabs + } + else if (version >= 1193) { + packet->setDataByName("num_aa_trees", 7);// number of AA tabs + } + else if (version >= 1096) { + packet->setDataByName("num_aa_trees", 4);// number of AA tabs + } + // since we do not have a proper way of supporting 3 levels of nested arrays the first array is manual here and not looped + + //__________________________________________________________START OF CLASS TREE____________________________________________________________________________________ + // Get the value for num_class_items based on size of ClassTab vector + for (itr2 = ClassTab.begin(); itr2 != ClassTab.end(); itr2++) { + class_num_items += (itr2->second).size(); + } + LogWrite(SPELL__DEBUG, 0, "AA", "ClassTab Size...%i ", class_num_items); + index = 0; + packet->setDataByName("class_tab_title", classes.GetClassNameCase(classes.GetSecondaryBaseClass(client->GetPlayer()->GetAdventureClass())).c_str()); + packet->setDataByName("class_tree_node_id", node_id[AA_CLASS]); + packet->setDataByName("class_max_aa", rule_manager.GetGlobalRule(R_Player, MaxClassAA)->GetInt32()); + int32 class_id = TreeNodeList[node_id[AA_CLASS]]->AAtreeID; + class_id = classid[node_id[AA_CLASS]]; + packet->setDataByName("class_id", classid[node_id[AA_CLASS]]); + packet->setDataByName("class_kos_req", 0); + packet->setArrayLengthByName("class_num_items", class_num_items,0); + for (itr2 = ClassTab.begin(); itr2 != ClassTab.end(); itr2++) { + for (itr3 = itr2->second.begin(); itr3 != itr2->second.end(); itr3++, index++) { + spell = master_spell_list.GetSpell((*itr3)->spellID, (*itr3)->tier); + current_rank = client->GetPlayer()->GetSpellTier((*itr3)->spellID); + if (index == 0) + class_node_id = (*itr3)->spellID; + //if (spell) { + packet->setArrayDataByName("class_parent_id", (*itr3)->rankPrereqID, index); + packet->setArrayDataByName("class_req_tier", (*itr3)->rankPrereq, index); + packet->setArrayDataByName("class_spell_id", (*itr3)->spellID, index); + int myrank = (current_rank == 0 ? 0 : (current_rank >= (*itr3)->maxRank) ? 2 : 1); + packet->setArrayDataByName("class_active", (current_rank == 0 ? 0 : (current_rank >= (*itr3)->maxRank) ? 2 : 1), index); //1= have tier >= 1; 3 = not available for selection; 0 available for selection + packet->setArrayDataByName("class_spell_name", (*itr3)->name.c_str(), index); + packet->setArrayDataByName("class_spell_description", (*itr3)->description.c_str(), index); + packet->setArrayDataByName("class_icon", (*itr3)->icon, index); + packet->setArrayDataByName("class_icon2",(*itr3)->icon2, index); + packet->setArrayDataByName("class_current_rank", current_rank, index); // TODO: need to get this value from the DB + packet->setArrayDataByName("class_max_rank", (*itr3)->maxRank , index); + packet->setArrayDataByName("class_rank_cost", (*itr3)->rankCost, index); + packet->setArrayDataByName("class_min_lev", (*itr3)->min_level, index); + packet->setSubArrayLengthByName("class_unknown5_numitems", 0,index, 0); + //packet->setSubArrayDataByName("class_unknown5", 308397057, index, 0); + //packet->setSubArrayDataByName("class_unknown5", 3215564363, index, 1); + //packet->setSubArrayDataByName("class_unknown5", 445192837, index, 2); + //packet->setSubArrayDataByName("class_unknown5", 3345493294, index, 3); + //packet->setSubArrayDataByName("class_unknown5", 696953971, index, 4); + packet->setArrayDataByName("class_unknown6", 4294967295, index); + packet->setArrayDataByName("class_unknown7", 1, index); + packet->setArrayDataByName("class_classification1", (*itr3)->class_name.c_str(), index); + packet->setArrayDataByName("class_points_req", (*itr3)->req_points, index); + packet->setArrayDataByName("class_unknown8", 0, index); + packet->setArrayDataByName("class_classification2", (*itr3)->subclass_name.c_str(), index); + packet->setArrayDataByName("class_col", (*itr3)->col, index); + packet->setArrayDataByName("class_row", (*itr3)->row, index); + packet->setArrayDataByName("class_line_title", (*itr3)->line_title.c_str(), index); + packet->setArrayDataByName("class_unknown9", ((*itr3)->title_level > 0 ? 258 : 0 ), index); + packet->setArrayDataByName("class_points_to_unlock", (*itr3)->req_tree_points, index); + packet->setArrayDataByName("class_unknown9b", current_rank, index);// aom + //} + //else + //LogWrite(SPELL__ERROR, 0, "AltAdvancement","Could not find Spell ID %u and Tier %i in Master Spell List", (*itr3)->spellID, (*itr3)->tier); + } + } + + packet->setDataByName("class_points_spent", 11); + if (version >= 58617) { + packet->setDataByName("class_unknown10", 11); + + packet->setDataByName("class_unknown11a", 0); + packet->setDataByName("class_unknown11b", 0); + packet->setDataByName("class_unknown11c", 1); + } + else if (version >= 1193) { + packet->setDataByName("class_unknown10", 11); + packet->setDataByName("class_unknown11", 0, 0); + packet->setDataByName("class_unknown11", 1, 1); + packet->setDataByName("class_unknown11", 1, 2); + } + else if (version >= 1096) { + packet->setDataByName("class_unknown10", 11); + packet->setDataByName("class_unknown11", 0, 0); + packet->setDataByName("class_unknown11", 0, 1); + packet->setDataByName("class_unknown11", 1, 2); + packet->setDataByName("class_unknown11", 0, 3); + packet->setDataByName("class_unknown11", 1, 4); + } + else { // this will change if there is ever a lower client supported + packet->setDataByName("class_unknown10", 11); + packet->setDataByName("class_unknown11", 0, 0); + packet->setDataByName("class_unknown11", 0, 1); + packet->setDataByName("class_unknown11", 1, 2); + packet->setDataByName("class_unknown11", 0, 3); + packet->setDataByName("class_unknown11", 1, 4); + } + + + + + + //__________________________________________________________START OF SUBCLASS TREE____________________________________________________________________________________ + // Get the value for num_class_items based on size of SubclassTab vector + for (itr2 = SubclassTab.begin(); itr2 != SubclassTab.end(); itr2++) { + subclass_num_items += (itr2->second).size(); + } + LogWrite(SPELL__DEBUG, 0, "AA", "SubclassTab Size...%i ", subclass_num_items); + index = 0; + packet->setDataByName("subclass_tab_title", classes.GetClassNameCase(client->GetPlayer()->GetAdventureClass()).c_str()); + packet->setDataByName("subclass_tree_node_id", node_id[AA_SUBCLASS]); + packet->setDataByName("subclass_max_aa", rule_manager.GetGlobalRule(R_Player, MaxSubclassAA)->GetInt32()); + int32 unknown3 = TreeNodeList[node_id[AA_SUBCLASS]]->AAtreeID; + + packet->setDataByName("subclass_id", classid[node_id[AA_SUBCLASS]]); + packet->setDataByName("subclass_eof_req", 0); + packet->setArrayLengthByName("subclass_num_items", subclass_num_items, 0); + for (itr2 = SubclassTab.begin(); itr2 != SubclassTab.end(); itr2++) { + for (itr3 = itr2->second.begin(); itr3 != itr2->second.end(); itr3++, index++) { + //spell = master_spell_list.GetSpell((*itr3)->spellID, (*itr3)->tier); + //current_rank = client->GetPlayer()->GetSpellTier((*itr3)->spellID); + if (index == 0) + class_node_id = (*itr3)->spellID; + //if (spell) { + packet->setArrayDataByName("subclass_parent_id", (*itr3)->rankPrereqID, index); + packet->setArrayDataByName("subclass_req_tier", (*itr3)->rankPrereq, index); + packet->setArrayDataByName("subclass_spell_id", (*itr3)->spellID, index); + packet->setArrayDataByName("subclass_active", (current_rank == 0 ? 0 : (current_rank >= (*itr3)->maxRank) ? 2 : 1), index); + packet->setArrayDataByName("subclass_spell_name", (*itr3)->name.c_str(), index); + packet->setArrayDataByName("subclass_spell_description", (*itr3)->description.c_str(), index); + packet->setArrayDataByName("subclass_icon", (*itr3)->icon, index); + packet->setArrayDataByName("subclass_icon2", (*itr3)->icon2, index); + packet->setArrayDataByName("subclass_current_rank", current_rank, index); // TODO: need to get this value from the DB + packet->setArrayDataByName("subclass_max_rank", (*itr3)->maxRank, index); + packet->setArrayDataByName("subclass_rank_cost", (*itr3)->rankCost, index); + packet->setArrayDataByName("subclass_min_lev", (*itr3)->min_level, index); + packet->setSubArrayLengthByName("subclass_unknown5_numitems", 0,index,0); + //packet->setSubArrayDataByName("subclass_unknown5", 308397057, index, 0); + //packet->setSubArrayDataByName("subclass_unknown5", 3215564363, index, 1); + //packet->setSubArrayDataByName("subclass_unknown5", 445192837, index, 2); + //packet->setSubArrayDataByName("subclass_unknown5", 3345493294, index, 3); + //packet->setSubArrayDataByName("subclass_unknown5", 696953971, index, 4); + packet->setArrayDataByName("subclass_unknown6", 4294967295, index); + packet->setArrayDataByName("subclass_unknown7", 1, index); + packet->setArrayDataByName("subclass_classification1", (*itr3)->class_name.c_str(), index); + packet->setArrayDataByName("subclass_points_req", (*itr3)->req_points, index); + packet->setArrayDataByName("subclass_unknown8", 0, index); + packet->setArrayDataByName("subclass_classification2", (*itr3)->subclass_name.c_str(), index); + packet->setArrayDataByName("subclass_col", (*itr3)->col, index); + packet->setArrayDataByName("subclass_row", (*itr3)->row, index); + packet->setArrayDataByName("subclass_line_title", (*itr3)->line_title.c_str(), index); + packet->setArrayDataByName("subclass_unknown9", ((*itr3)->title_level > 0 ? 258 : 0), index); + packet->setArrayDataByName("subclass_points_to_unlock", (*itr3)->req_tree_points, index); + packet->setArrayDataByName("subclass_unknown9b", 0, index); //added with 68617 AOM something to do with points + //} + //else + //LogWrite(SPELL__ERROR, 0, "AltAdvancement","Could not find Spell ID %u and Tier %i in Master Spell List", (*itr3)->spellID, (*itr3)->tier); + } + } + + packet->setDataByName("subclass_points_spent", 12); // to change the 34 to a track value + + + if (version >= 58617) { + packet->setDataByName("subclass_unknown10", 12); + + packet->setDataByName("subclass_unknown11a", 0); + packet->setDataByName("subclass_unknown11b", 50386); + packet->setDataByName("subclass_unknown11c", 5123); + + packet->setDataByName("subclass_unknown12", 0, 0); + packet->setDataByName("subclass_unknown12", 0, 1); + packet->setDataByName("subclass_unknown12", 0, 2); + packet->setDataByName("subclass_unknown13",":493debb3e678b977_91:test_unknown13");// this is based on class + packet->setDataByName("subclass_unknown14", 1); + packet->setDataByName("subclass_unknown15", ":ce1864c75f94a2d7_14:Expertise"); + packet->setDataByName("subclass_unknown16", 0, 0); + packet->setDataByName("subclass_unknown16", 0, 1); + packet->setDataByName("subclass_unknown16", 0, 2); + packet->setDataByName("subclass_unknown16", 0, 3); + packet->setDataByName("subclass_unknown16", 0, 4); + packet->setDataByName("subclass_unknown16", 0, 5); + } + else if (version >= 1193) { + packet->setDataByName("subclass_unknown10", 12); + packet->setDataByName("subclass_unknown11", 0, 0); + packet->setDataByName("subclass_unknown11", 1, 1); + packet->setDataByName("subclass_unknown11", 5123, 2); + packet->setDataByName("subclass_unknown12", 0, 0); + packet->setDataByName("subclass_unknown12", 0, 1); + packet->setDataByName("subclass_unknown12", 0, 2); + packet->setDataByName("subclass_unknown13", ":493debb3e678b977_91:test_unknown13");// this is based on class + packet->setDataByName("subclass_unknown14", 1); + packet->setDataByName("subclass_unknown15", ":ce1864c75f94a2d7_14:Expertise"); + packet->setDataByName("subclass_unknown16", 111, 0); + packet->setDataByName("subclass_unknown16", 108, 1); + packet->setDataByName("subclass_unknown16", 108, 2); + packet->setDataByName("subclass_unknown16", 1101, 3); + packet->setDataByName("subclass_unknown16", 121, 4); + packet->setDataByName("subclass_unknown16", 129, 5); + } + else if (version >= 1096) { + packet->setDataByName("subclass_unknown10", 12); + packet->setDataByName("subclass_unknown11", 0, 0); + packet->setDataByName("subclass_unknown11", 0, 1); + packet->setDataByName("subclass_unknown11", 1, 2); + packet->setDataByName("subclass_unknown11", 0, 3); + packet->setDataByName("subclass_unknown11", 3, 4); + } + else { // this will change if there is ever a lower client supported + packet->setDataByName("subclass_unknown10", 12); + packet->setDataByName("subclass_unknown11", 0, 0); + packet->setDataByName("subclass_unknown11", 0, 1); + packet->setDataByName("subclass_unknown11", 1, 2); + packet->setDataByName("subclass_unknown11", 0, 3); + packet->setDataByName("subclass_unknown11", 3, 4); + } + //__________________________________________________________START OF SHADOWS TREE____________________________________________________________________________________ + + for (itr2 = ShadowsTab.begin(); itr2 != ShadowsTab.end(); itr2++) { + shadows_num_items += (itr2->second).size(); + } + LogWrite(SPELL__DEBUG, 0, "AA", "ShadowsTab Size...%i ", shadows_num_items); + index = 0; + packet->setDataByName("shadows_tab_title", "Shadows"); + packet->setDataByName("shadows_tree_node_id", node_id[AA_SHADOW]); + packet->setDataByName("shadows_max_aa", rule_manager.GetGlobalRule(R_Player, MaxShadowsAA)->GetInt32()); + packet->setDataByName("shadows_id", classid[node_id[AA_SHADOW]]); + packet->setDataByName("shadows_eof_req", 0); + packet->setArrayLengthByName("shadows_num_items", shadows_num_items, 0); + //packet->PrintPacket(); + for (itr2 = ShadowsTab.begin(); itr2 != ShadowsTab.end(); itr2++) { + for (itr3 = itr2->second.begin(); itr3 != itr2->second.end(); itr3++, index++) { + spell = master_spell_list.GetSpell((*itr3)->spellID, (*itr3)->tier); + current_rank = client->GetPlayer()->GetSpellTier((*itr3)->spellID); + if (index == 0) + class_node_id = (*itr3)->spellID; + //if (spell) { + packet->setArrayDataByName("shadows_parent_id", (*itr3)->rankPrereqID, index); + packet->setArrayDataByName("shadows_req_tier", (*itr3)->rankPrereq, index); + packet->setArrayDataByName("shadows_spell_id", (*itr3)->spellID, index); + packet->setArrayDataByName("shadows_active", (current_rank == 0 ? 0 : (current_rank >= (*itr3)->maxRank) ? 2 : 1), index); + packet->setArrayDataByName("shadows_spell_name", (*itr3)->name.c_str(), index); + packet->setArrayDataByName("shadows_spell_description", (*itr3)->description.c_str(), index); + packet->setArrayDataByName("shadows_icon", (*itr3)->icon, index); + packet->setArrayDataByName("shadows_icon2", (*itr3)->icon2, index); + packet->setArrayDataByName("shadows_current_rank", current_rank, index); // TODO: need to get this value from the DB + packet->setArrayDataByName("shadows_max_rank", (*itr3)->maxRank, index); + packet->setArrayDataByName("shadows_rank_cost", (*itr3)->rankCost, index); + packet->setArrayDataByName("shadows_min_lev", (*itr3)->min_level, index); + packet->setSubArrayLengthByName("shadows_unknown5_num_items", 0, index, 0); + //packet->setSubArrayDataByName("shadows_unknown5", 308397057, index, 0); + //packet->setSubArrayDataByName("shadows_unknown5", 3215564363, index, 1); + //packet->setSubArrayDataByName("shadows_unknown5", 445192837, index, 2); + //packet->setSubArrayDataByName("shadows_unknown5", 3345493294, index, 3); + //packet->setSubArrayDataByName("shadows_unknown5", 696953971, index, 4); + packet->setArrayDataByName("shadows_unknown6", 4294967295, index); + packet->setArrayDataByName("shadows_unknown7", 1, index); + packet->setArrayDataByName("shadows_classification1", (*itr3)->class_name.c_str(), index); + packet->setArrayDataByName("shadows_points_req", (*itr3)->req_points, index); + packet->setArrayDataByName("shadows_unknown8", 0, index); + packet->setArrayDataByName("shadows_classification2", (*itr3)->subclass_name.c_str(), index); + packet->setArrayDataByName("shadows_col", (*itr3)->col, index); + packet->setArrayDataByName("shadows_row", (*itr3)->row, index); + packet->setArrayDataByName("shadows_line_title", (*itr3)->line_title.c_str(), index); + packet->setArrayDataByName("shadows_unknown9", ((*itr3)->title_level > 0 ? 258 : 0), index); + packet->setArrayDataByName("shadows_points_to_unlock", (*itr3)->req_tree_points, index); + packet->setArrayDataByName("shadows_unknown9b", 0, index); + //} + //else + //LogWrite(SPELL__ERROR, 0, "AltAdvancement","Could not find Spell ID %u and Tier %i in Master Spell List", (*itr3)->spellID, (*itr3)->tier); + } + } + + packet->setDataByName("shadows_points_spent", 14); + + + if (version >= 58617) { + packet->setDataByName("shadows_unknown10", 14); + + packet->setDataByName("shadows_unknown11a", 0); + packet->setDataByName("shadows_unknown11b", 50386); + packet->setDataByName("shadows_unknown11c", 3); + + packet->setDataByName("shadows_unknown12", 0, 0); + packet->setDataByName("shadows_unknown12", 0, 1); + packet->setDataByName("shadows_unknown12", 0, 2); + } + else if (version >= 1193) { + packet->setDataByName("shadows_unknown10", 14); + packet->setDataByName("shadows_unknown11", 0, 0); + packet->setDataByName("shadows_unknown11", 1, 1); + packet->setDataByName("shadows_unknown11", 3, 2); + packet->setDataByName("shadows_unknown12", 0, 0); + packet->setDataByName("shadows_unknown12", 0, 1); + packet->setDataByName("shadows_unknown12", 0, 2); + } + else if (version >= 1096) { + packet->setDataByName("shadows_unknown11", 0, 0); + packet->setDataByName("shadows_unknown11", 0, 1); + packet->setDataByName("shadows_unknown11", 1, 2); + packet->setDataByName("shadows_unknown11", 0, 3); + packet->setDataByName("shadows_unknown11", 3, 4); + } + else { // this will change if there is ever a lower client supported + packet->setDataByName("shadows_unknown11", 0, 0); + packet->setDataByName("shadows_unknown11", 0, 1); + packet->setDataByName("shadows_unknown11", 1, 2); + packet->setDataByName("shadows_unknown11", 0, 3); + packet->setDataByName("shadows_unknown11", 3, 4); + packet->setDataByName("shadows_unknown12", 103, 0); + packet->setDataByName("shadows_unknown12", 101, 1); + packet->setDataByName("shadows_unknown12", 114, 2); + packet->setDataByName("shadows_unknown14", 1835365408); + packet->setDataByName("shadows_unknown16", 114, 0); + packet->setDataByName("shadows_unknown16", 97, 1); + packet->setDataByName("shadows_unknown16", 114, 2); + packet->setDataByName("shadows_unknown16", 121, 3); + packet->setDataByName("shadows_unknown16", 32, 4); + packet->setDataByName("shadows_unknown16", 98, 5); + } + //__________________________________________________________START OF HEROIC TREE____________________________________________________________________________________ + for (itr2 = HeroicTab.begin(); itr2 != HeroicTab.end(); itr2++) { + heroic_num_items += (itr2->second).size(); + } + LogWrite(SPELL__DEBUG, 0, "AA", "HeroicTab Size...%i ", heroic_num_items); + index = 0; + packet->setDataByName("heroic_tab_title", "Heroic"); + packet->setDataByName("heroic_tree_node_id", node_id[AA_HEROIC]); + packet->setDataByName("heroic_max_aa", rule_manager.GetGlobalRule(R_Player, MaxHeroicAA)->GetInt32()); + packet->setDataByName("heroic_id", classid[node_id[AA_HEROIC]]); + packet->setDataByName("heroic_eof_req", 0); + packet->setArrayLengthByName("heroic_num_items", heroic_num_items, 0); + for (itr2 = HeroicTab.begin(); itr2 != HeroicTab.end(); itr2++) { + for (itr3 = itr2->second.begin(); itr3 != itr2->second.end(); itr3++, index++) { + //spell = master_spell_list.GetSpell((*itr3)->spellID, (*itr3)->tier); + //current_rank = client->GetPlayer()->GetSpellTier((*itr3)->spellID); + if (index == 0) + class_node_id = (*itr3)->spellID; + //if (spell) { + packet->setArrayDataByName("heroic_parent_id", (*itr3)->rankPrereqID, index); + packet->setArrayDataByName("heroic_req_tier", (*itr3)->rankPrereq, index); + packet->setArrayDataByName("heroic_spell_id", (*itr3)->spellID, index); + packet->setArrayDataByName("heroic_active", (current_rank == 0 ? 0 : (current_rank >= (*itr3)->maxRank) ? 2 : 1), index); + packet->setArrayDataByName("heroic_spell_name", (*itr3)->name.c_str(), index); + packet->setArrayDataByName("heroic_spell_description", (*itr3)->description.c_str(), index); + packet->setArrayDataByName("heroic_icon", (*itr3)->icon, index); + packet->setArrayDataByName("heroic_icon2", (*itr3)->icon2, index); + packet->setArrayDataByName("heroic_current_rank", current_rank, index); // TODO: need to get this value from the DB + packet->setArrayDataByName("heroic_max_rank", (*itr3)->maxRank, index); + packet->setArrayDataByName("heroic_rank_cost", (*itr3)->rankCost, index); + packet->setArrayDataByName("heroic_min_lev", (*itr3)->min_level, index); + packet->setSubArrayLengthByName("heroic_unknown5_num_items", 0, index, 0); + //packet->setSubArrayDataByName("heroic_unknown5", 308397057, index, 0); + //packet->setSubArrayDataByName("heroic_unknown5", 3215564363, index, 1); + //packet->setSubArrayDataByName("heroic_unknown5", 445192837, index, 2); + //packet->setSubArrayDataByName("heroic_unknown5", 3345493294, index, 3); + //packet->setSubArrayDataByName("heroic_unknown5", 696953971, index, 4); + packet->setArrayDataByName("heroic_unknown6", 4294967295, index); + packet->setArrayDataByName("heroic_unknown7", 1, index); + packet->setArrayDataByName("heroic_classification1", (*itr3)->class_name.c_str(), index); + packet->setArrayDataByName("heroic_points_req", (*itr3)->req_points, index); + packet->setArrayDataByName("heroic_unknown8", 0, index); + packet->setArrayDataByName("heroic_classification2", (*itr3)->subclass_name.c_str(), index); + packet->setArrayDataByName("heroic_col", (*itr3)->col, index); + packet->setArrayDataByName("heroic_row", (*itr3)->row, index); + packet->setArrayDataByName("heroic_line_title", (*itr3)->line_title.c_str(), index); + packet->setArrayDataByName("heroic_unknown9", ((*itr3)->title_level > 0 ? 258 : 0), index); + packet->setArrayDataByName("heroic_points_to_unlock", (*itr3)->req_tree_points, index); + packet->setArrayDataByName("heroic_unknown9b", 0, index); + //} + //else + //LogWrite(SPELL__ERROR, 0, "AltAdvancement","Could not find Spell ID %u and Tier %i in Master Spell List", (*itr3)->spellID, (*itr3)->tier); + } + } + + packet->setDataByName("heroic_points_spent", 16); + + if (version >= 58617) { + packet->setDataByName("heroic_unknown10", 16); + + packet->setDataByName("heroic_unknown11a", 0); + packet->setDataByName("heroic_unknown11b", 50386); + packet->setDataByName("heroic_unknown11c", 3); + + packet->setDataByName("heroic_unknown12", 0, 0); + packet->setDataByName("heroic_unknown12", 0, 1); + packet->setDataByName("heroic_unknown12", 0, 2); + + packet->setDataByName("heroic_unknown14", 0); + packet->setDataByName("heroic_unknown16", 39, 0); + packet->setDataByName("heroic_unknown16", 115, 1); + packet->setDataByName("heroic_unknown16", 32, 2); + packet->setDataByName("heroic_unknown16", 115, 3); + packet->setDataByName("heroic_unknown16", 101, 4); + packet->setDataByName("heroic_unknown16", 108, 5); + } + else if (version >= 1193) { + packet->setDataByName("heroic_unknown10", 16); + packet->setDataByName("heroic_unknown11", 0, 0); + packet->setDataByName("heroic_unknown11", 1, 1); + packet->setDataByName("heroic_unknown11", 3, 2); + packet->setDataByName("heroic_unknown12", 0, 0); + packet->setDataByName("heroic_unknown12", 0, 1); + packet->setDataByName("heroic_unknown12", 0, 2); + packet->setDataByName("heroic_unknown14", 0); + packet->setDataByName("heroic_unknown16", 0, 0); + packet->setDataByName("heroic_unknown16", 0, 1); + packet->setDataByName("heroic_unknown16", 0, 2); + packet->setDataByName("heroic_unknown16", 0, 3); + packet->setDataByName("heroic_unknown16", 0, 4); + packet->setDataByName("heroic_unknown16", 0, 5); + } + else if (version >= 1096) { + packet->setDataByName("heroic_unknown11", 0, 0); + packet->setDataByName("heroic_unknown11", 0, 1); + packet->setDataByName("heroic_unknown11", 1, 2); + packet->setDataByName("heroic_unknown11", 0, 3); + packet->setDataByName("heroic_unknown11", 3, 4); + } + else { // this will change if there is ever a lower client supported + packet->setDataByName("heroic_unknown11", 0, 0); + packet->setDataByName("heroic_unknown11", 0, 1); + packet->setDataByName("heroic_unknown11", 1, 2); + packet->setDataByName("heroic_unknown11", 0, 3); + packet->setDataByName("heroic_unknown11", 3, 4); + } + if (version >= 1193) { + + //__________________________________________________________START OF TRADESKILL TREE____________________________________________________________________________________ + for (itr2 = TradeskillTab.begin(); itr2 != TradeskillTab.end(); itr2++) { + tradeskill_num_items += (itr2->second).size(); + } + LogWrite(SPELL__DEBUG, 0, "AA", "TradeskillTab Size...%i ", tradeskill_num_items); + index = 0; + packet->setDataByName("tradeskill_tab_title", "Tradeskill"); + packet->setDataByName("tradeskill_tree_node_id", node_id[AA_TRADESKILL]); + packet->setDataByName("tradeskill_max_aa", rule_manager.GetGlobalRule(R_Player, MaxTradeskillAA)->GetInt32()); + packet->setDataByName("tradeskill_id", classid[node_id[AA_TRADESKILL]]); + packet->setDataByName("tradeskill_eof_req", 0); + packet->setArrayLengthByName("tradeskill_num_items", tradeskill_num_items, 0); + for (itr2 = TradeskillTab.begin(); itr2 != TradeskillTab.end(); itr2++) { + for (itr3 = itr2->second.begin(); itr3 != itr2->second.end(); itr3++, index++) { + //spell = master_spell_list.GetSpell((*itr3)->spellID, (*itr3)->tier); + //current_rank = client->GetPlayer()->GetSpellTier((*itr3)->spellID); + if (index == 0) + class_node_id = (*itr3)->spellID; + //if (spell) { + packet->setArrayDataByName("tradeskill_parent_id", (*itr3)->rankPrereqID, index); + packet->setArrayDataByName("tradeskill_req_tier", (*itr3)->rankPrereq, index); + packet->setArrayDataByName("tradeskill_spell_id", (*itr3)->spellID, index); + packet->setArrayDataByName("tradeskill_active", (current_rank == 0 ? 0 : (current_rank >= (*itr3)->maxRank) ? 2 : 1), index); + packet->setArrayDataByName("tradeskill_spell_name", (*itr3)->name.c_str(), index); + packet->setArrayDataByName("tradeskill_spell_description", (*itr3)->description.c_str(), index); + packet->setArrayDataByName("tradeskill_icon", (*itr3)->icon, index); + packet->setArrayDataByName("tradeskill_icon2", (*itr3)->icon2, index); + packet->setArrayDataByName("tradeskill_current_rank", current_rank, index); // TODO: need to get this value from the DB + packet->setArrayDataByName("tradeskill_max_rank", (*itr3)->maxRank, index); + packet->setArrayDataByName("tradeskill_rank_cost", (*itr3)->rankCost, index); + packet->setArrayDataByName("tradeskill_min_lev", (*itr3)->min_level, index); + packet->setSubArrayLengthByName("tradeskill_unknown5_num_items", 0, index, 0); + //packet->setSubArrayDataByName("tradeskill_unknown5", 308397057, index, 0); + //packet->setSubArrayDataByName("tradeskill_unknown5", 3215564363, index, 1); + //packet->setSubArrayDataByName("tradeskill_unknown5", 445192837, index, 2); + //packet->setSubArrayDataByName("tradeskill_unknown5", 3345493294, index, 3); + //packet->setSubArrayDataByName("tradeskill_unknown5", 696953971, index, 4); + packet->setArrayDataByName("tradeskill_unknown6", 4294967295, index); + packet->setArrayDataByName("tradeskill_unknown7", 0, index); + packet->setArrayDataByName("tradeskill_classification1", (*itr3)->class_name.c_str(), index); + packet->setArrayDataByName("tradeskill_points_req", (*itr3)->req_points, index); + packet->setArrayDataByName("tradeskill_unknown8", 0, index); + packet->setArrayDataByName("tradeskill_classification2", (*itr3)->subclass_name.c_str(), index); + packet->setArrayDataByName("tradeskill_col", (*itr3)->col, index); + packet->setArrayDataByName("tradeskill_row", (*itr3)->row, index); + packet->setArrayDataByName("tradeskill_line_title", (*itr3)->line_title.c_str(), index); + packet->setArrayDataByName("tradeskill_unknown9", ((*itr3)->title_level > 0 ? 258 : 0), index); + packet->setArrayDataByName("tradeskill_points_to_unlock", (*itr3)->req_tree_points, index); + packet->setArrayDataByName("tradeskill_unknown9b", 0, index); + //} + //else + //LogWrite(SPELL__ERROR, 0, "AltAdvancement","Could not find Spell ID %u and Tier %i in Master Spell List", (*itr3)->spellID, (*itr3)->tier); + } + } + packet->setDataByName("tradeskill_unknown10", 0); + packet->setDataByName("tradeskill_points_spent", 22); + if (version >= 58617) { + packet->setDataByName("tradeskill_unknown10", 11); + + packet->setDataByName("tradeskill_unknown11a", 0); + packet->setDataByName("tradeskill_unknown11b", 50386); + packet->setDataByName("tradeskill_unknown11c", 3); + + packet->setDataByName("tradeskill_unknown12", 0, 0); + packet->setDataByName("tradeskill_unknown12", 0, 1); + packet->setDataByName("tradeskill_unknown12", 0, 2); + + packet->setDataByName("tradeskill_unknown14", 0); + packet->setDataByName("tradeskill_unknown16", 3, 0); + packet->setDataByName("tradeskill_unknown16", 0, 1); + packet->setDataByName("tradeskill_unknown16", 0, 2); + packet->setDataByName("tradeskill_unknown16", 0, 3); + packet->setDataByName("tradeskill_unknown16", 0, 4); + packet->setDataByName("tradeskill_unknown16", 0, 5); + } + else if (version >= 1193) { + packet->setDataByName("tradeskill_unknown10", 0); + packet->setDataByName("tradeskill_unknown11", 0, 0); + packet->setDataByName("tradeskill_unknown11", 1, 1); + packet->setDataByName("tradeskill_unknown11", 3, 2); + packet->setDataByName("tradeskill_unknown12", 0, 0); + packet->setDataByName("tradeskill_unknown12", 0, 1); + packet->setDataByName("tradeskill_unknown12", 0, 2); + packet->setDataByName("tradeskill_unknown14", 0); + packet->setDataByName("tradeskill_unknown16", 3, 0); + packet->setDataByName("tradeskill_unknown16", 0, 1); + packet->setDataByName("tradeskill_unknown16", 0, 2); + packet->setDataByName("tradeskill_unknown16", 0, 3); + packet->setDataByName("tradeskill_unknown16", 0, 4); + packet->setDataByName("tradeskill_unknown16", 0, 5); + } + + //__________________________________________________________START OF PRESTIGE TREE____________________________________________________________________________________ + for (itr2 = PrestigeTab.begin(); itr2 != PrestigeTab.end(); itr2++) { + prestige_num_items += (itr2->second).size(); + } + LogWrite(SPELL__DEBUG, 0, "AA", "PrestigeTab Size...%i ", prestige_num_items); + index = 0; + packet->setDataByName("prestige_tab_title", "Prestige"); + packet->setDataByName("prestige_tree_node_id", node_id[AA_PRESTIGE]); + packet->setDataByName("prestige_max_aa", rule_manager.GetGlobalRule(R_Player, MaxPrestigeAA)->GetInt32()); + packet->setDataByName("prestige_id", classid[node_id[AA_PRESTIGE]]); + packet->setDataByName("prestige_eof_req", 0); + packet->setArrayLengthByName("prestige_num_items", prestige_num_items, 0); + for (itr2 = PrestigeTab.begin(); itr2 != PrestigeTab.end(); itr2++) { + for (itr3 = itr2->second.begin(); itr3 != itr2->second.end(); itr3++, index++) { + //spell = master_spell_list.GetSpell((*itr3)->spellID, (*itr3)->tier); + //current_rank = client->GetPlayer()->GetSpellTier((*itr3)->spellID); + if (index == 0) + class_node_id = (*itr3)->spellID; + //if (spell) { + packet->setArrayDataByName("prestige_parent_id", (*itr3)->rankPrereqID, index); + packet->setArrayDataByName("prestige_req_tier", (*itr3)->rankPrereq, index); + packet->setArrayDataByName("prestige_spell_id", (*itr3)->spellID, index); + packet->setArrayDataByName("prestige_active", (current_rank == 0 ? 0 : (current_rank >= (*itr3)->maxRank) ? 2 : 1), index); + packet->setArrayDataByName("prestige_spell_name", (*itr3)->name.c_str(), index); + packet->setArrayDataByName("prestige_spell_description", (*itr3)->description.c_str(), index); + packet->setArrayDataByName("prestige_icon", (*itr3)->icon, index); + packet->setArrayDataByName("prestige_icon2", (*itr3)->icon2, index); + packet->setArrayDataByName("prestige_current_rank", current_rank, index); // TODO: need to get this value from the DB + packet->setArrayDataByName("prestige_max_rank", (*itr3)->maxRank, index); + packet->setArrayDataByName("prestige_rank_cost", (*itr3)->rankCost, index); + packet->setArrayDataByName("prestige_min_lev", (*itr3)->min_level, index); + packet->setSubArrayLengthByName("prestige_unknown5_num_items", 0, index, 0); + //packet->setSubArrayDataByName("prestige_unknown5", 308397057, index, 0); + //packet->setSubArrayDataByName("prestige_unknown5", 3215564363, index, 1); + //packet->setSubArrayDataByName("prestige_unknown5", 445192837, index, 2); + //packet->setSubArrayDataByName("prestige_unknown5", 3345493294, index, 3); + //packet->setSubArrayDataByName("prestige_unknown5", 696953971, index, 4); + packet->setArrayDataByName("prestige_unknown6", 4294967295, index); + packet->setArrayDataByName("prestige_unknown7", 1, index); + packet->setArrayDataByName("prestige_classification1", (*itr3)->class_name.c_str(), index); + packet->setArrayDataByName("prestige_points_req", (*itr3)->req_points, index); + packet->setArrayDataByName("prestige_unknown8", 0, index); + packet->setArrayDataByName("prestige_classification2", (*itr3)->subclass_name.c_str(), index); + packet->setArrayDataByName("prestige_col", (*itr3)->col, index); + packet->setArrayDataByName("prestige_row", (*itr3)->row, index); + packet->setArrayDataByName("prestige_line_title", (*itr3)->line_title.c_str(), index); + packet->setArrayDataByName("prestige_unknown9", ((*itr3)->title_level > 0 ? 258 : 0), index); + packet->setArrayDataByName("prestige_points_to_unlock", (*itr3)->req_tree_points, index); + packet->setArrayDataByName("prestige_unknown9b", 0, index); + + //} + //else + //LogWrite(SPELL__ERROR, 0, "AltAdvancement","Could not find Spell ID %u and Tier %i in Master Spell List", (*itr3)->spellID, (*itr3)->tier); + } + } + + packet->setDataByName("prestige_points_spent", 34); + + if (version >= 58617) { + packet->setDataByName("prestige_unknown10", 16); + + packet->setDataByName("prestige_unknown11a", 0); + packet->setDataByName("prestige_unknown11b", 50386); + packet->setDataByName("prestige_unknown11c", 1539); + + packet->setDataByName("prestige_unknown12", 0, 0); + packet->setDataByName("prestige_unknown12", 0, 1); + packet->setDataByName("prestige_unknown12", 0, 2); + + packet->setDataByName("prestige_unknown13", ":493debb3e678b977_91:Prestige"); + packet->setDataByName("prestige_unknown14", 1); + packet->setDataByName("prestige_unknown15", ":493debb3e6a8bb79_20:Prestige Expertise"); + packet->setDataByName("prestige_unknown16", 2, 0); + packet->setDataByName("prestige_unknown16", 0, 1); + packet->setDataByName("prestige_unknown16", 0, 2); + packet->setDataByName("prestige_unknown16", 0, 3); + packet->setDataByName("prestige_unknown16", 0, 4); + packet->setDataByName("prestige_unknown16", 0, 5); + } + else if (version >= 1193) { + packet->setDataByName("prestige_unknown10", 16); + packet->setDataByName("prestige_unknown11", 0, 0); + packet->setDataByName("prestige_unknown11", 1, 1); + packet->setDataByName("prestige_unknown11", 1539, 2); + packet->setDataByName("prestige_unknown12", 0, 0); + packet->setDataByName("prestige_unknown12", 0, 1); + packet->setDataByName("prestige_unknown12", 0, 2); + packet->setDataByName("prestige_unknown13", ":493debb3e678b977_91:Prestige"); + packet->setDataByName("prestige_unknown14", 1); + packet->setDataByName("prestige_unknown15", ":493debb3e6a8bb79_20:Prestige Expertise"); + packet->setDataByName("prestige_unknown16", 2, 0); + packet->setDataByName("prestige_unknown16", 0, 1); + packet->setDataByName("prestige_unknown16", 0, 2); + packet->setDataByName("prestige_unknown16", 0, 3); + packet->setDataByName("prestige_unknown16", 0, 4); + packet->setDataByName("prestige_unknown16", 0, 5); + } + + //__________________________________________________________START OF TRADESKILL PRESTIGE TREE____________________________________________________________________________________ + for (itr2 = TradeskillPrestigeTab.begin(); itr2 != TradeskillPrestigeTab.end(); itr2++) { + tradeskillprestige_num_items += (itr2->second).size(); + } + LogWrite(SPELL__DEBUG, 0, "AA", "TradeskillPrestigeTab Size...%i ", tradeskillprestige_num_items); + index = 0; + if (version >= 58617) { + packet->setDataByName("tradeskillprestige_tab_title", "General"); + } + else { + packet->setDataByName("tradeskillprestige_tab_title", "Tradeskill Prestige"); + } + packet->setDataByName("tradeskillprestige_tree_node_id", node_id[AA_TRADESKILL_PRESTIGE]); + packet->setDataByName("tradeskillprestige_max_aa", rule_manager.GetGlobalRule(R_Player, MaxPrestigeAA)->GetInt32()); + packet->setDataByName("tradeskillprestige_id", classid[node_id[AA_TRADESKILL_PRESTIGE]]); + packet->setDataByName("tradeskillprestige_eof_req", 0); + packet->setArrayLengthByName("tradeskillprestige_num_items", tradeskillprestige_num_items, 0); + for (itr2 = PrestigeTab.begin(); itr2 != PrestigeTab.end(); itr2++) { + for (itr3 = itr2->second.begin(); itr3 != itr2->second.end(); itr3++, index++) { + //spell = master_spell_list.GetSpell((*itr3)->spellID, (*itr3)->tier); + //current_rank = client->GetPlayer()->GetSpellTier((*itr3)->spellID); + if (index == 0) + class_node_id = (*itr3)->spellID; + //if (spell) { + packet->setArrayDataByName("tradeskillprestige_parent_id", (*itr3)->rankPrereqID, index); + packet->setArrayDataByName("tradeskillprestige_req_tier", (*itr3)->rankPrereq, index); + packet->setArrayDataByName("tradeskillprestige_spell_id", (*itr3)->spellID, index); + packet->setArrayDataByName("tradeskillprestige_active", (current_rank == 0 ? 0 : (current_rank >= (*itr3)->maxRank) ? 2 : 1), index); + packet->setArrayDataByName("tradeskillprestige_spell_name", (*itr3)->name.c_str(), index); + packet->setArrayDataByName("tradeskillprestige_spell_description", (*itr3)->description.c_str(), index); + packet->setArrayDataByName("tradeskillprestige_icon", (*itr3)->icon, index); + packet->setArrayDataByName("tradeskillprestige_icon2", (*itr3)->icon2, index); + packet->setArrayDataByName("tradeskillprestige_current_rank", current_rank, index); // TODO: need to get this value from the DB + packet->setArrayDataByName("tradeskillprestige_max_rank", (*itr3)->maxRank, index); + packet->setArrayDataByName("tradeskillprestige_rank_cost", (*itr3)->rankCost, index); + packet->setArrayDataByName("tradeskillprestige_min_lev", (*itr3)->min_level, index); + packet->setSubArrayLengthByName("tradeskillprestige_unknown5_num_items", 0, index, 0); + //packet->setSubArrayDataByName("tradeskillprestige_unknown5", 308397057, index, 0); + //packet->setSubArrayDataByName("tradeskillprestige_unknown5", 3215564363, index, 1); + //packet->setSubArrayDataByName("tradeskillprestige_unknown5", 445192837, index, 2); + //packet->setSubArrayDataByName("tradeskillprestige_unknown5", 3345493294, index, 3); + //packet->setSubArrayDataByName("tradeskillprestige_unknown5", 696953971, index, 4); + packet->setArrayDataByName("tradeskillprestige_unknown6", 4294967295, index); + packet->setArrayDataByName("tradeskillprestige_unknown7", 1, index); + packet->setArrayDataByName("tradeskillprestige_classification1", (*itr3)->class_name.c_str(), index); + packet->setArrayDataByName("tradeskillprestige_points_req", (*itr3)->req_points, index); + packet->setArrayDataByName("tradeskillprestige_unknown8", 0, index); + packet->setArrayDataByName("tradeskillprestige_classification2", (*itr3)->subclass_name.c_str(), index); + packet->setArrayDataByName("tradeskillprestige_col", (*itr3)->col, index); + packet->setArrayDataByName("tradeskillprestige_row", (*itr3)->row, index); + packet->setArrayDataByName("tradeskillprestige_line_title", (*itr3)->line_title.c_str(), index); + packet->setArrayDataByName("tradeskillprestige_unknown9", ((*itr3)->title_level > 0 ? 258 : 0), index); + packet->setArrayDataByName("tradeskillprestige_points_to_unlock", (*itr3)->req_tree_points, index); + packet->setArrayDataByName("tradeskillprestige_unknown9b", 0, index); + //} + //else + //LogWrite(SPELL__ERROR, 0, "AltAdvancement","Could not find Spell ID %u and Tier %i in Master Spell List", (*itr3)->spellID, (*itr3)->tier); + } + } + + packet->setDataByName("tradeskillprestige_points_spent", 18); + if (version >= 58617) { + packet->setDataByName("tradeskillprestige_unknown10", 18); + + packet->setDataByName("tradeskillprestige_unknown11a", 0); + packet->setDataByName("tradeskillprestige_unknown11b", 50386); + packet->setDataByName("tradeskillprestige_unknown11c", 3); + + packet->setDataByName("tradeskillprestige_unknown12", 0, 0); + packet->setDataByName("tradeskillprestige_unknown12", 0, 1); + packet->setDataByName("tradeskillprestige_unknown12", 0, 2); + + packet->setDataByName("tradeskillprestige_unknown14", 0); + packet->setDataByName("tradeskillprestige_unknown16", 4, 0); + packet->setDataByName("tradeskillprestige_unknown16", 0, 1); + packet->setDataByName("tradeskillprestige_unknown16", 0, 2); + packet->setDataByName("tradeskillprestige_unknown16", 0, 3); + packet->setDataByName("tradeskillprestige_unknown16", 0, 4); + packet->setDataByName("tradeskillprestige_unknown16", 0, 5); + } + else if (version >= 1193) { + packet->setDataByName("tradeskillprestige_unknown10", 16); + packet->setDataByName("tradeskillprestige_unknown11", 0, 0); + packet->setDataByName("tradeskillprestige_unknown11", 1, 1); + packet->setDataByName("tradeskillprestige_unknown11", 3, 2); + + packet->setDataByName("tradeskillprestige_unknown12", 0, 0); + packet->setDataByName("tradeskillprestige_unknown12", 0, 1); + packet->setDataByName("tradeskillprestige_unknown12", 0, 2); + + packet->setDataByName("tradeskillprestige_unknown16", 4, 0); + packet->setDataByName("tradeskillprestige_unknown16", 0, 1); + packet->setDataByName("tradeskillprestige_unknown16", 0, 2); + packet->setDataByName("tradeskillprestige_unknown16", 0, 3); + packet->setDataByName("tradeskillprestige_unknown16", 0, 4); + packet->setDataByName("tradeskillprestige_unknown16", 0, 5); + } + } + if (version >= 58617) { + //__________________________________________________________START OF DRAGON TREE____________________________________________________________________________________ + for (itr2 = DragonTab.begin(); itr2 != DragonTab.end(); itr2++) { + dragon_num_items += (itr2->second).size(); + } + LogWrite(SPELL__DEBUG, 0, "AA", "DragonTab Size...%i ", dragon_num_items); + index = 0; + packet->setDataByName("dragon_tab_title", "Dragon"); + packet->setDataByName("dragon_tree_node_id", node_id[AA_DRAGON]); + packet->setDataByName("dragon_max_aa", rule_manager.GetGlobalRule(R_Player, MaxDragonAA)->GetInt32()); + packet->setDataByName("dragon_id", classid[node_id[AA_DRAGON]]); + packet->setDataByName("dragon_eof_req", 0); + packet->setArrayLengthByName("dragon_num_items", dragon_num_items, 0); + for (itr2 = DragonTab.begin(); itr2 != DragonTab.end(); itr2++) { + for (itr3 = itr2->second.begin(); itr3 != itr2->second.end(); itr3++, index++) { + //spell = master_spell_list.GetSpell((*itr3)->spellID, (*itr3)->tier); + //current_rank = client->GetPlayer()->GetSpellTier((*itr3)->spellID); + if (index == 0) + class_node_id = (*itr3)->spellID; + + + //if (spell) { + packet->setArrayDataByName("dragon_parent_id", (*itr3)->rankPrereqID, index); + packet->setArrayDataByName("dragon_req_tier", (*itr3)->rankPrereq, index); + packet->setArrayDataByName("dragon_spell_id", (*itr3)->spellID, index); + packet->setArrayDataByName("dragon_active", (current_rank == 0 ? 0 : (current_rank >= (*itr3)->maxRank) ? 2 : 1), index); + packet->setArrayDataByName("dragon_spell_name", (*itr3)->name.c_str(), index); + packet->setArrayDataByName("dragon_spell_description", (*itr3)->description.c_str(), index); + packet->setArrayDataByName("dragon_icon", (*itr3)->icon, index); + packet->setArrayDataByName("dragon_icon2", (*itr3)->icon2, index); + packet->setArrayDataByName("dragon_current_rank", current_rank, index); // TODO: need to get this value from the DB + packet->setArrayDataByName("dragon_max_rank", (*itr3)->maxRank, index); + packet->setArrayDataByName("dragon_rank_cost", (*itr3)->rankCost, index); + packet->setArrayDataByName("dragon_min_lev", (*itr3)->min_level, index); + packet->setSubArrayLengthByName("dragon_unknown5_num_items", 0, index, 0); + //packet->setSubArrayDataByName("dragon_unknown5", 308397057, index, 0); + //packet->setSubArrayDataByName("dragon_unknown5", 3215564363, index, 1); + //packet->setSubArrayDataByName("dragon_unknown5", 445192837, index, 2); + //packet->setSubArrayDataByName("dragon_unknown5", 3345493294, index, 3); + //packet->setSubArrayDataByName("dragon_unknown5", 696953971, index, 4); + packet->setArrayDataByName("dragon_unknown6", 4294967295, index); + packet->setArrayDataByName("dragon_unknown7", 1, index); + packet->setArrayDataByName("dragon_classification1", (*itr3)->class_name.c_str(), index); + packet->setArrayDataByName("dragon_points_req", (*itr3)->req_points, index); + packet->setArrayDataByName("dragon_unknown8", 0, index); + packet->setArrayDataByName("dragon_classification2", (*itr3)->subclass_name.c_str(), index); + packet->setArrayDataByName("dragon_col", (*itr3)->col, index); + packet->setArrayDataByName("dragon_row", (*itr3)->row, index); + packet->setArrayDataByName("dragon_line_title", (*itr3)->line_title.c_str(), index); + packet->setArrayDataByName("dragon_unknown9", ((*itr3)->title_level > 0 ? 258 : 0), index); + packet->setArrayDataByName("dragon_points_to_unlock", (*itr3)->req_tree_points, index); + packet->setArrayDataByName("dragon_unknown9b", 0, index); + + //} + //else + //LogWrite(SPELL__ERROR, 0, "AltAdvancement","Could not find Spell ID %u and Tier %i in Master Spell List", (*itr3)->spellID, (*itr3)->tier); + } + } + + packet->setDataByName("dragon_points_spent", 19); + + if (version >= 58617) { + packet->setDataByName("dragon_unknown10", 19); + + packet->setDataByName("dragon_unknown11a", 0); + packet->setDataByName("dragon_unknown11b", 50386); + packet->setDataByName("dragon_unknown11c", 1); + + packet->setDataByName("dragon_unknown12", 0, 0); + packet->setDataByName("dragon_unknown12", 0, 1); + packet->setDataByName("dragon_unknown12", 0, 2); + + packet->setDataByName("dragon_unknown14", 0); + packet->setDataByName("dragon_unknown16", 0, 0); + packet->setDataByName("dragon_unknown16", 0, 1); + packet->setDataByName("dragon_unknown16", 0, 2); + packet->setDataByName("dragon_unknown16", 0, 3); + packet->setDataByName("dragon_unknown16", 0, 4); + packet->setDataByName("dragon_unknown16", 0, 5); + } + //__________________________________________________________START OF DRAGON CLASS TREE____________________________________________________________________________________ + for (itr2 = DragonclassTab.begin(); itr2 != DragonclassTab.end(); itr2++) { + dragonclass_num_items += (itr2->second).size(); + } + LogWrite(SPELL__DEBUG, 0, "AA", "DragonclassTab Size...%i ", dragonclass_num_items); + index = 0; + packet->setDataByName("dragonclass_tab_title", classes.GetClassNameCase(client->GetPlayer()->GetAdventureClass()).c_str()); + packet->setDataByName("dragonclass_tree_node_id", node_id[AA_DRAGONCLASS]); + packet->setDataByName("dragonclass_max_aa", rule_manager.GetGlobalRule(R_Player, MaxDragonAA)->GetInt32()); + packet->setDataByName("dragonclass_id", classid[node_id[AA_DRAGONCLASS]]); + packet->setDataByName("dragonclass_eof_req", 0); + packet->setArrayLengthByName("dragonclass_num_items", dragonclass_num_items, 0); + for (itr2 = DragonclassTab.begin(); itr2 != DragonclassTab.end(); itr2++) { + for (itr3 = itr2->second.begin(); itr3 != itr2->second.end(); itr3++, index++) { + //spell = master_spell_list.GetSpell((*itr3)->spellID, (*itr3)->tier); + //current_rank = client->GetPlayer()->GetSpellTier((*itr3)->spellID); + if (index == 0) + class_node_id = (*itr3)->spellID; + //if (spell) { + packet->setArrayDataByName("dragonclass_parent_id", (*itr3)->rankPrereqID, index); + packet->setArrayDataByName("dragonclass_req_tier", (*itr3)->rankPrereq, index); + packet->setArrayDataByName("dragonclass_spell_id", (*itr3)->spellID, index); + packet->setArrayDataByName("dragonclass_active", (current_rank == 0 ? 0 : (current_rank >= (*itr3)->maxRank) ? 2 : 1), index); + packet->setArrayDataByName("dragonclass_spell_name", (*itr3)->name.c_str(), index); + packet->setArrayDataByName("dragonclass_spell_description", (*itr3)->description.c_str(), index); + packet->setArrayDataByName("dragonclass_icon", (*itr3)->icon, index); + packet->setArrayDataByName("dragonclass_icon2", (*itr3)->icon2, index); + packet->setArrayDataByName("dragonclass_current_rank", current_rank, index); // TODO: need to get this value from the DB + packet->setArrayDataByName("dragonclass_max_rank", (*itr3)->maxRank, index); + packet->setArrayDataByName("dragonclass_rank_cost", (*itr3)->rankCost, index); + packet->setArrayDataByName("dragonclass_min_lev", (*itr3)->min_level, index); + packet->setSubArrayLengthByName("dragonclass_unknown5_num_items", 0, index, 0); + //packet->setSubArrayDataByName("dragonclass_unknown5", 308397057, index, 0); + //packet->setSubArrayDataByName("dragonclass_unknown5", 3215564363, index, 1); + //packet->setSubArrayDataByName("dragonclass_unknown5", 445192837, index, 2); + //packet->setSubArrayDataByName("dragonclass_unknown5", 3345493294, index, 3); + //packet->setSubArrayDataByName("dragonclass_unknown5", 696953971, index, 4); + packet->setArrayDataByName("dragonclass_unknown6", 4294967295, index); + packet->setArrayDataByName("dragonclass_unknown7", 1, index); + packet->setArrayDataByName("dragonclass_classification1", (*itr3)->class_name.c_str(), index); + packet->setArrayDataByName("dragonclass_points_req", (*itr3)->req_points, index); + packet->setArrayDataByName("dragonclass_unknown8", 0, index); + packet->setArrayDataByName("dragonclass_classification2", (*itr3)->subclass_name.c_str(), index); + packet->setArrayDataByName("dragonclass_col", (*itr3)->col, index); + packet->setArrayDataByName("dragonclass_row", (*itr3)->row, index); + packet->setArrayDataByName("dragonclass_line_title", (*itr3)->line_title.c_str(), index); + packet->setArrayDataByName("dragonclass_unknown9", ((*itr3)->title_level > 0 ? 258 : 0), index); + packet->setArrayDataByName("dragonclass_points_to_unlock", (*itr3)->req_tree_points, index); + packet->setArrayDataByName("dragonclass_unknown9b", 0, index); + + //} + //else + //LogWrite(SPELL__ERROR, 0, "AltAdvancement","Could not find Spell ID %u and Tier %i in Master Spell List", (*itr3)->spellID, (*itr3)->tier); + } + } + + packet->setDataByName("dragonclass_points_spent",20); + + if (version >= 58617) { + packet->setDataByName("dragonclass_unknown10", 20); + + packet->setDataByName("dragonclass_unknown11a", 0); + packet->setDataByName("dragonclass_unknown11b", 50386); + packet->setDataByName("dragonclass_unknown11c", 3); + + packet->setDataByName("dragonclass_unknown12", 0, 0); + packet->setDataByName("dragonclass_unknown12", 0, 1); + packet->setDataByName("dragonclass_unknown12", 0, 2); + + packet->setDataByName("dragonclass_unknown14", 0); + packet->setDataByName("dragonclass_unknown16", 2, 0); + packet->setDataByName("dragonclass_unknown16", 0, 1); + packet->setDataByName("dragonclass_unknown16", 0, 2); + packet->setDataByName("dragonclass_unknown16", 0, 3); + packet->setDataByName("dragonclass_unknown16", 0, 4); + packet->setDataByName("dragonclass_unknown16", 0, 5); + } + + //__________________________________________________________START OF FARSEAS TREE____________________________________________________________________________________ + for (itr2 = FarseasTab.begin(); itr2 != FarseasTab.end(); itr2++) { + farseas_num_items += (itr2->second).size(); + } + LogWrite(SPELL__DEBUG, 0, "AA", "FarseasTab Size...%i ", farseas_num_items); + index = 0; + packet->setDataByName("farseas_tab_title", "Farseas"); + packet->setDataByName("farseas_tree_node_id", node_id[AA_FARSEAS]); + packet->setDataByName("farseas_max_aa", rule_manager.GetGlobalRule(R_Player, MaxDragonAA)->GetInt32()); + packet->setDataByName("farseas_id", classid[node_id[AA_FARSEAS]]); + packet->setDataByName("farseas_eof_req", 0); + packet->setArrayLengthByName("farseas_num_items", farseas_num_items, 0); + for (itr2 = FarseasTab.begin(); itr2 != FarseasTab.end(); itr2++) { + for (itr3 = itr2->second.begin(); itr3 != itr2->second.end(); itr3++, index++) { + //spell = master_spell_list.GetSpell((*itr3)->spellID, (*itr3)->tier); + //current_rank = client->GetPlayer()->GetSpellTier((*itr3)->spellID); + if (index == 0) + class_node_id = (*itr3)->spellID; + //if (spell) { + packet->setArrayDataByName("farseas_parent_id", (*itr3)->rankPrereqID, index); + packet->setArrayDataByName("farseas_req_tier", (*itr3)->rankPrereq, index); + packet->setArrayDataByName("farseas_spell_id", (*itr3)->spellID, index); + packet->setArrayDataByName("farseas_active", (current_rank == 0 ? 0 : (current_rank >= (*itr3)->maxRank) ? 2 : 1), index); + packet->setArrayDataByName("farseas_spell_name", (*itr3)->name.c_str(), index); + packet->setArrayDataByName("farseas_spell_description", (*itr3)->description.c_str(), index); + packet->setArrayDataByName("farseas_icon", (*itr3)->icon, index); + packet->setArrayDataByName("farseas_icon2", (*itr3)->icon2, index); + packet->setArrayDataByName("farseas_current_rank", current_rank, index); // TODO: need to get this value from the DB + packet->setArrayDataByName("farseas_max_rank", (*itr3)->maxRank, index); + packet->setArrayDataByName("farseas_rank_cost", (*itr3)->rankCost, index); + packet->setArrayDataByName("farseas_min_lev", (*itr3)->min_level, index); + packet->setSubArrayLengthByName("farseas_unknown5_num_items", 0, index, 0); + //packet->setSubArrayDataByName("farseas_unknown5", 308397057, index, 0); + //packet->setSubArrayDataByName("farseas_unknown5", 3215564363, index, 1); + //packet->setSubArrayDataByName("farseas_unknown5", 445192837, index, 2); + //packet->setSubArrayDataByName("farseas_unknown5", 3345493294, index, 3); + //packet->setSubArrayDataByName("farseas_unknown5", 696953971, index, 4); + packet->setArrayDataByName("farseas_unknown6", 4294967295, index); + packet->setArrayDataByName("farseas_unknown7", 1, index); + packet->setArrayDataByName("farseas_classification1", (*itr3)->class_name.c_str(), index); + packet->setArrayDataByName("farseas_points_req", (*itr3)->req_points, index); + packet->setArrayDataByName("farseas_unknown8", 0, index); + packet->setArrayDataByName("farseas_classification2", (*itr3)->subclass_name.c_str(), index); + packet->setArrayDataByName("farseas_col", (*itr3)->col, index); + packet->setArrayDataByName("farseas_row", (*itr3)->row, index); + packet->setArrayDataByName("farseas_line_title", (*itr3)->line_title.c_str(), index); + packet->setArrayDataByName("farseas_unknown9", ((*itr3)->title_level > 0 ? 258 : 0), index); + packet->setArrayDataByName("farseas_points_to_unlock", (*itr3)->req_tree_points, index); + packet->setArrayDataByName("farseas_unknown9b", 0, index); + + //} + //else + //LogWrite(SPELL__ERROR, 0, "AltAdvancement","Could not find Spell ID %u and Tier %i in Master Spell List", (*itr3)->spellID, (*itr3)->tier); + } + } + + packet->setDataByName("farseas_points_spent",20); + + if (version >= 58617) { + packet->setDataByName("farseas_unknown10", 20); + + packet->setDataByName("farseas_unknown11a", 0); + packet->setDataByName("farseas_unknown11b", 50386); + packet->setDataByName("farseas_unknown11c", 3); + + packet->setDataByName("farseas_unknown12", 0, 0); + packet->setDataByName("farseas_unknown12", 0, 1); + packet->setDataByName("farseas_unknown12", 0, 2); + + packet->setDataByName("farseas_unknown14", 0); + packet->setDataByName("farseas_unknown16", 4, 0); + packet->setDataByName("farseas_unknown16", 0, 1); + packet->setDataByName("farseas_unknown16", 0, 2); + packet->setDataByName("farseas_unknown16", 0, 3); + packet->setDataByName("farseas_unknown16", 0, 4); + packet->setDataByName("farseas_unknown16", 0, 5); + } + int8 tt = 0; + int8 numtabs = 0; + int xxx = 0; + bool sendblanktabs = false; + packet->setDataByName("template_unknown1", (changemode == 2 ? 255 : 25)); + packet->setDataByName("template_unknown2a", 0); + packet->setDataByName("template_unknown2b", 0); + packet->setDataByName("template_unknown2c", (changemode == 3 ? 1 : 0)); + packet->setDataByName("template_unknown2d", (changemode == 1 || changemode == 2 ? 1 :0)); + packet->setDataByName("template_unknown3", (changemode == 2 ? 0 : 4294967295)); //4294967295); + packet->setDataByName("template_unknown4", newtemplate);// active template ID + packet->setDataByName("template_unknown5", 0); + + packet->setDataByName("num_templates", 7); + packet->setDataByName("slot1_template_id", 0); + packet->setDataByName("slot1_name", "Unused Slot 1"); + packet->setDataByName("slot1_active", 0); //0 is server type ,1 = personal type + tt = 1; // template # + numtabs = 0; + if (AAEntryList[tt][0].size() > 0) { numtabs++; } + if (AAEntryList[tt][1].size() > 0) { numtabs++; } + if (AAEntryList[tt][2].size() > 0) { numtabs++; } + if (AAEntryList[tt][3].size() > 0) { numtabs++; } + if (AAEntryList[tt][4].size() > 0) { numtabs++; } + + if (sendblanktabs == true) { + numtabs = 4; + } + packet->setArrayLengthByName("slot1_num_tabs", numtabs); + xxx = 0; + for (int xx = 0; xx < AAEntryList[tt].size(); xx++) { + + if (sendblanktabs == false && AAEntryList[tt][xx].size() < 1 ) {continue;} + packet->setArrayDataByName("slot1_tab_typenum", xx, xxx); + packet->setArrayDataByName("slot1_tab_unknown2", 1, xxx); + packet->setSubArrayLengthByName("slot1_num_items", AAEntryList[tt][xx].size(), xxx); + for (int yy = 0; yy < AAEntryList[tt][xx].size(); yy++) { + packet->setSubArrayDataByName("slot1_item_order", AAEntryList[tt][xx][yy].order, xxx, yy); + packet->setSubArrayDataByName("slot1_item_treeid", AAEntryList[tt][xx][yy].treeid, xxx, yy); + packet->setSubArrayDataByName("slot1_item_id", AAEntryList[tt][xx][yy].aa_id, xxx, yy); + } + xxx++; + } + + packet->setDataByName("slot2_template_id", 1); + packet->setDataByName("slot2_name", "Unused Slot 2"); + packet->setDataByName("slot2_active", 0); + tt = 2; // template # + numtabs = 0; + if (AAEntryList[tt][0].size() > 0) { numtabs++; } + if (AAEntryList[tt][1].size() > 0) { numtabs++; } + if (AAEntryList[tt][2].size() > 0) { numtabs++; } + if (AAEntryList[tt][3].size() > 0) { numtabs++; } + if (AAEntryList[tt][4].size() > 0) { numtabs++; } + + if (sendblanktabs == true) { + numtabs = 4; + } + packet->setArrayLengthByName("slot2_num_tabs", numtabs); + xxx = 0; + for (int xx = 0; xx < AAEntryList[tt].size(); xx++) { + + if (sendblanktabs == false && AAEntryList[tt][xx].size() < 1) { continue; } + packet->setArrayDataByName("slot2_tab_typenum", xx, xxx); + packet->setArrayDataByName("slot2_tab_unknown2", 1, xxx); + packet->setSubArrayLengthByName("slot2_num_items", AAEntryList[tt][xx].size(), xxx); + for (int yy = 0; yy < AAEntryList[tt][xx].size(); yy++) { + packet->setSubArrayDataByName("slot2_item_order", AAEntryList[tt][xx][yy].order, xxx, yy); + packet->setSubArrayDataByName("slot2_item_treeid", AAEntryList[tt][xx][yy].treeid, xxx, yy); + packet->setSubArrayDataByName("slot2_item_id", AAEntryList[tt][xx][yy].aa_id, xxx, yy); + } + xxx++; + } + + packet->setDataByName("slot3_template_id", 2); + packet->setDataByName("slot3_name", "Unused Slot 3"); + packet->setDataByName("slot3_active", 0); + tt = 3; // template # + numtabs = 0; + if (AAEntryList[tt][0].size() > 0) { numtabs++; } + if (AAEntryList[tt][1].size() > 0) { numtabs++; } + if (AAEntryList[tt][2].size() > 0) { numtabs++; } + if (AAEntryList[tt][3].size() > 0) { numtabs++; } + if (AAEntryList[tt][4].size() > 0) { numtabs++; } + + if (sendblanktabs == true) { + numtabs = 4; + } + packet->setArrayLengthByName("slot3_num_tabs", numtabs); + xxx = 0; + for (int xx = 0; xx < AAEntryList[tt].size(); xx++) { + + if (sendblanktabs == false && AAEntryList[tt][xx].size() < 1) { continue; } + packet->setArrayDataByName("slot3_tab_typenum", xx, xxx); + packet->setArrayDataByName("slot3_tab_unknown2", 1, xxx); + packet->setSubArrayLengthByName("slot3_num_items", AAEntryList[tt][xx].size(), xxx); + for (int yy = 0; yy < AAEntryList[tt][xx].size(); yy++) { + packet->setSubArrayDataByName("slot3_item_order", AAEntryList[tt][xx][yy].order, xxx, yy); + packet->setSubArrayDataByName("slot3_item_treeid", AAEntryList[tt][xx][yy].treeid, xxx, yy); + packet->setSubArrayDataByName("slot3_item_id", AAEntryList[tt][xx][yy].aa_id, xxx, yy); + } + xxx++; + } + + packet->setDataByName("slot4_template_id", 20); + packet->setDataByName("slot4_name", "Basic Leveling Profile - Solo"); + packet->setDataByName("slot4_active", 1); + tt = 4; // template # + numtabs = 0; + if (AAEntryList[tt][0].size() > 0) { numtabs++; } + if (AAEntryList[tt][1].size() > 0) { numtabs++; } + if (AAEntryList[tt][2].size() > 0) { numtabs++; } + if (AAEntryList[tt][3].size() > 0) { numtabs++; } + if (AAEntryList[tt][4].size() > 0) { numtabs++; } + + if (sendblanktabs == true) { + numtabs = 4; + } + packet->setArrayLengthByName("slot4_num_tabs", numtabs); + xxx = 0; + for (int xx = 0; xx < AAEntryList[tt].size(); xx++) { + + if (sendblanktabs == false && AAEntryList[tt][xx].size() < 1) { continue; } + packet->setArrayDataByName("slot4_tab_typenum", xx, xxx); + packet->setArrayDataByName("slot4_tab_unknown2", 1, xxx); + packet->setSubArrayLengthByName("slot4_num_items", AAEntryList[tt][xx].size(), xxx); + for (int yy = 0; yy < AAEntryList[tt][xx].size(); yy++) { + packet->setSubArrayDataByName("slot4_item_order", AAEntryList[tt][xx][yy].order, xxx, yy); + packet->setSubArrayDataByName("slot4_item_treeid", AAEntryList[tt][xx][yy].treeid, xxx, yy); + packet->setSubArrayDataByName("slot4_item_id", AAEntryList[tt][xx][yy].aa_id, xxx, yy); + } + xxx++; + } + + + packet->setDataByName("slot5_template_id", 21); + packet->setDataByName("slot5_name", "Basic Leveling Profile - Group"); + packet->setDataByName("slot5_active", 1); + tt = 5; // template # + numtabs = 0; + if (AAEntryList[tt][0].size() > 0) { numtabs++; } + if (AAEntryList[tt][1].size() > 0) { numtabs++; } + if (AAEntryList[tt][2].size() > 0) { numtabs++; } + if (AAEntryList[tt][3].size() > 0) { numtabs++; } + if (AAEntryList[tt][4].size() > 0) { numtabs++; } + + if (sendblanktabs == true) { + numtabs = 4; + } + packet->setArrayLengthByName("slot5_num_tabs", numtabs); + xxx = 0; + for (int xx = 0; xx < AAEntryList[tt].size(); xx++) { + + if (sendblanktabs == false && AAEntryList[tt][xx].size() < 1) { continue; } + packet->setArrayDataByName("slot5_tab_typenum", xx, xxx); + packet->setArrayDataByName("slot5_tab_unknown2", 1, xxx); + packet->setSubArrayLengthByName("slot5_num_items", AAEntryList[tt][xx].size(), xxx); + for (int yy = 0; yy < AAEntryList[tt][xx].size(); yy++) { + packet->setSubArrayDataByName("slot5_item_order", AAEntryList[tt][xx][yy].order, xxx, yy); + packet->setSubArrayDataByName("slot5_item_treeid", AAEntryList[tt][xx][yy].treeid, xxx, yy); + packet->setSubArrayDataByName("slot5_item_id", AAEntryList[tt][xx][yy].aa_id, xxx, yy); + } + xxx++; + } + + packet->setDataByName("slot6_template_id", 22); + packet->setDataByName("slot6_name", "Basic Leveling Profile - PVP"); + packet->setDataByName("slot6_active", 1); + tt = 6; // template # + numtabs = 0; + if (AAEntryList[tt][0].size() > 0) { numtabs++; } + if (AAEntryList[tt][1].size() > 0) { numtabs++; } + if (AAEntryList[tt][2].size() > 0) { numtabs++; } + if (AAEntryList[tt][3].size() > 0) { numtabs++; } + if (AAEntryList[tt][4].size() > 0) { numtabs++; } + + if (sendblanktabs == true) { + numtabs = 4; + } + packet->setArrayLengthByName("slot6_num_tabs", numtabs); + xxx = 0; + for (int xx = 0; xx < AAEntryList[tt].size(); xx++) { + + if (sendblanktabs == false && AAEntryList[tt][xx].size() < 1) { continue; } + packet->setArrayDataByName("slot6_tab_typenum", xx, xxx); + packet->setArrayDataByName("slot6_tab_unknown2", 1, xxx); + packet->setSubArrayLengthByName("slot6_num_items", AAEntryList[tt][xx].size(), xxx); + for (int yy = 0; yy < AAEntryList[tt][xx].size(); yy++) { + packet->setSubArrayDataByName("slot6_item_order", AAEntryList[tt][xx][yy].order, xxx, yy); + packet->setSubArrayDataByName("slot6_item_treeid", AAEntryList[tt][xx][yy].treeid, xxx, yy); + packet->setSubArrayDataByName("slot6_item_id", AAEntryList[tt][xx][yy].aa_id, xxx, yy); + } + xxx++; + } + + packet->setDataByName("slot7_template_id",100); + packet->setDataByName("slot7_name", "New"); + packet->setDataByName("slot7_active", 0); + tt = 7; // template # + numtabs = 0; + if (AAEntryList[tt][0].size() > 0) { numtabs++; } + if (AAEntryList[tt][1].size() > 0) { numtabs++; } + if (AAEntryList[tt][2].size() > 0) { numtabs++; } + if (AAEntryList[tt][3].size() > 0) { numtabs++; } + if (AAEntryList[tt][4].size() > 0) { numtabs++; } + + if (sendblanktabs == true) { + numtabs = 4; + } + packet->setArrayLengthByName("slot7_num_tabs", numtabs); + xxx = 0; + for (int xx = 0; xx < AAEntryList[tt].size(); xx++) { + + if (sendblanktabs == false && AAEntryList[tt][xx].size() < 1) { continue; } + packet->setArrayDataByName("slot7_tab_typenum", xx, xxx); + packet->setArrayDataByName("slot7_tab_unknown2", 1, xxx); + packet->setSubArrayLengthByName("slot7_num_items", AAEntryList[tt][xx].size(), xxx); + for (int yy = 0; yy < AAEntryList[tt][xx].size(); yy++) { + packet->setSubArrayDataByName("slot7_item_order", AAEntryList[tt][xx][yy].order, xxx, yy); + packet->setSubArrayDataByName("slot7_item_treeid", AAEntryList[tt][xx][yy].treeid, xxx, yy); + packet->setSubArrayDataByName("slot7_item_id", AAEntryList[tt][xx][yy].aa_id, xxx, yy); + } + xxx++; + } + //packet->PrintPacket(); + } + //packet->PrintPacket(); + EQ2Packet* data = packet->serialize(); + EQ2Packet* app = new EQ2Packet(OP_AdventureList, data->pBuffer, data->size); + //DumpPacket(app); + client->QueuePacket(app); + safe_delete(packet); + safe_delete(data); +} \ No newline at end of file diff --git a/EQ2/source/WorldServer/AltAdvancement/AltAdvancement.h b/EQ2/source/WorldServer/AltAdvancement/AltAdvancement.h new file mode 100644 index 000000000..9b0ed937d --- /dev/null +++ b/EQ2/source/WorldServer/AltAdvancement/AltAdvancement.h @@ -0,0 +1,118 @@ +/* +EQ2Emulator: Everquest II Server Emulator +Copyright (C) 2007 EQ2EMulator Development Team (http://www.eq2emulator.net) + +This file is part of EQ2Emulator. + +EQ2Emulator is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +EQ2Emulator is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with EQ2Emulator. If not, see . +*/ + +#ifndef __AltAdvancement__ +#define __AltAdvancement__ + +#include +#include "../../common/types.h" +#include "../../common/EQPacket.h" +#include "../client.h" + +// defines for AA tabs based on group # from DB +#define AA_CLASS 0 +#define AA_SUBCLASS 1 +#define AA_SHADOW 2 +#define AA_HEROIC 3 +#define AA_TRADESKILL 4 +#define AA_PRESTIGE 5 +#define AA_TRADESKILL_PRESTIGE 6 +#define AA_DRAGON 7 +#define AA_DRAGONCLASS 8 +#define AA_FARSEAS 9 +struct AltAdvanceData +{ + int32 spellID; + int8 min_level; + int32 spell_crc; + string name; + string description; + int8 group; + int16 icon; + int16 icon2; + int8 col; + int8 row; + int8 rankCost; + int8 maxRank; + int32 rankPrereqID; + int8 rankPrereq; + int8 class_req; + int8 tier; + int8 req_points; + int16 req_tree_points; + string class_name; + string subclass_name; + string line_title; + int8 title_level; + int32 node_id; +}; + + +class MasterAAList +{ +public: + MasterAAList(); + ~MasterAAList(); + ///

Sorts the Alternate Advancements for the given client, creates and sends the OP_AdventureList packet. + /// The Client calling this function + /// EQ2Packet* + EQ2Packet* GetAAListPacket(Client* client); + + /// Add Alternate Advancement data to the global list. + /// The Alternate Advancement data to add. + void AddAltAdvancement(AltAdvanceData* data); + + /// Get the total number of Alternate Advancements in the global list. + int Size(); + + /// Get the Alternate Advancement data for the given spell. + /// Spell ID to get Alternate Advancement data for. + AltAdvanceData* GetAltAdvancement(int32 spellID); + + /// empties the master Alternate Advancement list + void DestroyAltAdvancements(); + void DisplayAA(Client* client,int8 newtemplate,int8 changemode); +private: + vector AAList; + Mutex MMasterAAList; +}; + +struct TreeNodeData +{ + int32 classID; + int32 treeID; + int32 AAtreeID; +}; + +class MasterAANodeList +{ +public: + MasterAANodeList(); + ~MasterAANodeList(); + void AddTreeNode(TreeNodeData* data); + int Size(); + void DestroyTreeNodes(); + vector GetTreeNodes(); + +private: + vector TreeNodeList; +}; + +#endif \ No newline at end of file diff --git a/EQ2/source/WorldServer/AltAdvancement/AltAdvancementDB.cpp b/EQ2/source/WorldServer/AltAdvancement/AltAdvancementDB.cpp new file mode 100644 index 000000000..b7f3da9b5 --- /dev/null +++ b/EQ2/source/WorldServer/AltAdvancement/AltAdvancementDB.cpp @@ -0,0 +1,102 @@ +/* + EQ2Emulator: Everquest II Server Emulator + Copyright (C) 2007 EQ2EMulator Development Team (http://www.eq2emulator.net) + + This file is part of EQ2Emulator. + + EQ2Emulator is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + EQ2Emulator is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with EQ2Emulator. If not, see . +*/ + +#ifdef WIN32 + #include + #include +#endif +#include +#include +#include "../../common/Log.h" +#include "../../common/DatabaseNew.h" +#include "../WorldDatabase.h" +#include "AltAdvancement.h" + +extern MasterAAList master_aa_list; +extern MasterAANodeList master_tree_nodes; + +void WorldDatabase::LoadAltAdvancements() +{ + Query query; + MYSQL_ROW row; + AltAdvanceData* data; + + //MYSQL_RES* result = query.RunQuery2(Q_SELECT, "SELECT `spell_id`, `group`, `icon`, `icon2`, `col`, `row`, `rank_cost`, `max_cost`, `rank_prereq_id`, `rank_prereq`, `class_req`, `tier`, `class_name`, `subclass_name`, `line_title` FROM spell_aa"); + MYSQL_RES* result = query.RunQuery2(Q_SELECT, "SELECT `nodeid`,`minlevel`, `spellcrc`, `name`, `description`, `aa_list_fk`, `icon_id`, `icon_backdrop`, `xcoord`, `ycoord`, `pointspertier`, `maxtier`, `firstparentid`, `firstparentrequiredtier`, `displayedclassification`,`requiredclassification`, `classificationpointsrequired`, `pointsspentintreetounlock`, `title`,`titlelevel` FROM spell_aa_nodelist"); + while (result && (row = mysql_fetch_row(result))) { + data = new AltAdvanceData; + int8 i = 0; + data->spellID = strtoul(row[0], NULL, 0); + data->min_level = atoi(row[++i]); + data->spell_crc = strtoul(row[++i], NULL, 0); + data->name = string(row[++i]); + data->description = string(row[++i]); + data->group = atoi(row[++i]); + data->icon = atoi(row[++i]); + data->icon2 = atoi(row[++i]); + data->col = atoi(row[++i]); + data->row = atoi(row[++i]); + data->rankCost = atoi(row[++i]); + data->maxRank = atoi(row[++i]); + data->rankPrereqID = strtoul(row[++i], NULL, 0); + data->rankPrereq = atoi(row[++i]); + data->tier = 1; + data->class_name = string(row[++i]); + data->subclass_name = string(row[i]); + data->req_points = atoi(row[++i]); + data->req_tree_points = atoi(row[++i]); + data->line_title = string(row[++i]); + data->title_level = atoi(row[++i]); + + master_aa_list.AddAltAdvancement(data); + } + + LogWrite(SPELL__INFO, 0, "AA", "Loaded %u Alternate Advancement(s)", master_aa_list.Size()); + +} + +void WorldDatabase::LoadTreeNodes() +{ + Query query; + MYSQL_ROW row; + TreeNodeData* data; + + MYSQL_RES* result = query.RunQuery2(Q_SELECT, "SELECT class_id, tree_node, aa_tree_id FROM spell_aa_class_list"); + while (result && (row = mysql_fetch_row(result))) { + data = new TreeNodeData; + data->classID = strtoul(row[0], NULL, 0); + data->treeID = strtoul(row[1], NULL, 0); + data->AAtreeID = strtoul(row[2], NULL, 0); + master_tree_nodes.AddTreeNode(data); + } + LogWrite(SPELL__INFO, 0, "AA", "Loaded %u AA Tree Nodes", master_tree_nodes.Size()); +} +void WorldDatabase::LoadPlayerAA(Player *player) +{ + Query query; + MYSQL_ROW row; + + + MYSQL_RES* result = query.RunQuery2(Q_SELECT, "SELECT `template_id`,`tab_id`,`aa_id`,`order`,treeid FROM character_aa where char_id = %i order by `order`",player->id); + while (result && (row = mysql_fetch_row(result))) { + + } + LogWrite(SPELL__INFO, 0, "AA", "Loaded %u AA Tree Nodes", master_tree_nodes.Size()); +} \ No newline at end of file diff --git a/EQ2/source/WorldServer/Appearances.h b/EQ2/source/WorldServer/Appearances.h new file mode 100644 index 000000000..11f1de628 --- /dev/null +++ b/EQ2/source/WorldServer/Appearances.h @@ -0,0 +1,87 @@ +/* + EQ2Emulator: Everquest II Server Emulator + Copyright (C) 2007 EQ2EMulator Development Team (http://www.eq2emulator.net) + + This file is part of EQ2Emulator. + + EQ2Emulator is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + EQ2Emulator is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with EQ2Emulator. If not, see . +*/ +#include + +using namespace std; + +// Appearances must use a hash table because of the large amount that exists and the large spacing +// between their ID's. String and character arrays could not be used for the first iterator because +// it would require the same pointer to access it from the hash table, which is obviously not possible +// since the text is from the client. + +// maximum amount of iterations it will attempt to find a entree +#define HASH_SEARCH_MAX 20 + +class Appearance +{ +public: + // JA: someday add the min_client_version to the map to determine which appearance_id to set per client version + Appearance(int32 inID, const char *inName, int16 inVer) + { + if( !inName ) + return; + name = string(inName); + id = inID; + min_client = inVer; + } + + int32 GetID() { return id; } + const char* GetName() { return name.c_str(); } + int16 GetMinClientVersion() { return min_client; } + string GetNameString() { return name; } + +private: + int32 id; + string name; + int16 min_client; +}; + +class Appearances +{ +public: + ~Appearances(){ + Reset(); + } + + void Reset(){ + ClearAppearances(); + } + + void ClearAppearances(){ + map::iterator map_list; + for(map_list = appearanceMap.begin(); map_list != appearanceMap.end(); map_list++ ) + safe_delete(map_list->second); + appearanceMap.clear(); + } + + void InsertAppearance(Appearance* a){ + appearanceMap[a->GetID()] = a; + } + + Appearance* FindAppearanceByID(int32 id){ + if(appearanceMap.count(id) > 0) + return appearanceMap[id]; + return 0; + } + +private: + map appearanceMap; +}; + diff --git a/EQ2/source/WorldServer/Bots/Bot.cpp b/EQ2/source/WorldServer/Bots/Bot.cpp new file mode 100644 index 000000000..800919fa0 --- /dev/null +++ b/EQ2/source/WorldServer/Bots/Bot.cpp @@ -0,0 +1,680 @@ +#include "Bot.h" +#include "BotBrain.h" +#include "../Trade.h" +#include "../../common/Log.h" +#include "../WorldDatabase.h" +#include "../classes.h" +#include "../SpellProcess.h" + +extern WorldDatabase database; +extern MasterSpellList master_spell_list; +extern World world; +extern Classes classes; + +Bot::Bot() : NPC() { + SetBrain(new BotBrain(this)); + BotID = 0; + ShowHelm = true; + ShowCloak = true; + CanTaunt = false; + combat_target = 0; + main_tank = 0; + + //AddPrimaryEntityCommand("hail", 10000, "hail", "", 0, 0); + AddSecondaryEntityCommand("invite bot", 10000, "invite", "", 0, 0); + AddSecondaryEntityCommand("bot inventory", 10000, "bot inv list", "", 0, 0); + + InfoStruct* info = GetInfoStruct(); + info->str_base = 50; + info->sta_base = 20; + info->wis_base = 20; + info->intel_base = 20; + info->agi_base = 20; +} + +Bot::~Bot() { + +} + +void Bot::GiveItem(int32 item_id) { + Item* master_item = master_item_list.GetItem(item_id); + Item* item = 0; + if (master_item) + item = new Item(master_item); + if (item) { + int8 slot = GetEquipmentList()->GetFreeSlot(item); + if (slot != 255) { + GetEquipmentList()->AddItem(slot, item); + SetEquipment(item, slot); + database.SaveBotItem(BotID, item_id, slot); + if (slot == 0) { + ChangePrimaryWeapon(); + if (IsBot()) + LogWrite(PLAYER__ERROR, 0, "Bot", "Changing bot primary weapon."); + } + + CalculateBonuses(); + } + } +} + +void Bot::RemoveItem(Item* item) { + int8 slot = GetEquipmentList()->GetSlotByItem(item); + if (slot != 255) { + GetEquipmentList()->RemoveItem(slot, true); + SetEquipment(0, slot); + } +} + +void Bot::TradeItemAdded(Item* item) { + int8 slot = GetEquipmentList()->GetFreeSlot(item); + if (slot == 255 && item->slot_data.size() > 0) { + slot = item->slot_data[0]; + AddItemToTrade(slot); + } +} + +void Bot::AddItemToTrade(int8 slot) { + Item* item = GetEquipmentList()->GetItem(slot); + if (trading_slots.count(slot) == 0 && item && trade) { + trade->AddItemToTrade(this, item, 1, 255); + trading_slots.insert(slot); + } +} + +bool Bot::CheckTradeItems(map* list) { + if (!list) { + LogWrite(PLAYER__ERROR, 0, "Bot", "CheckTradeItems did not recieve a valid list of items"); + return false; + } + + bool ret = true; + map::iterator itr; + for (itr = list->begin(); itr != list->end(); itr++) { + Item* item = itr->second.item; + if (item) { + if (!CanEquipItem(item)) { + // No slots means not equipable so reject the trade + ret = false; + break; + } + } + } + + return ret; +} + +void Bot::FinishTrade() { + trading_slots.clear(); +} + +bool Bot::CanEquipItem(Item* item) { + if (item) { + if (item->IsArmor() || item->IsWeapon() || item->IsFood() || item->IsRanged() || item->IsShield() || item->IsBauble() || item->IsAmmo() || item->IsThrown()) { + int16 override_level = item->GetOverrideLevel(GetAdventureClass(), GetTradeskillClass()); + if (override_level > 0 && override_level <= GetLevel()) { + LogWrite(PLAYER__ERROR, 0, "Bot", "Passed in override_level check"); + return true; + } + if (item->CheckClass(GetAdventureClass(), GetTradeskillClass())) + if (item->CheckLevel(GetAdventureClass(), GetTradeskillClass(), GetLevel())) { + LogWrite(PLAYER__ERROR, 0, "Bot", "Passed in normal check"); + return true; + } + } + } + return false; +} + +void Bot::MessageGroup(string msg) { + GroupMemberInfo* gmi = GetGroupMemberInfo(); + if (gmi) + world.GetGroupManager()->GroupChatMessage(gmi->group_id, this, msg.c_str()); +} + +void Bot::GetNewSpells() { + vector spells; + vector* spells1 = master_spell_list.GetSpellListByAdventureClass(GetAdventureClass(), GetLevel(), 1); + vector* spells2 = master_spell_list.GetSpellListByAdventureClass(classes.GetBaseClass(GetAdventureClass()), GetLevel(), 1); + vector* spells3 = master_spell_list.GetSpellListByAdventureClass(classes.GetSecondaryBaseClass(GetAdventureClass()), GetLevel(), 1); + + spells.insert(spells.end(), spells1->begin(), spells1->end()); + spells.insert(spells.end(), spells2->begin(), spells2->end()); + spells.insert(spells.end(), spells3->begin(), spells3->end()); + + vector::iterator itr; + map* spell_list = 0; + for (itr = spells.begin(); itr != spells.end(); itr++) { + switch ((*itr)->GetSpellData()->spell_type) { + case SPELL_TYPE_DD: + spell_list = &dd_spells; + break; + case SPELL_TYPE_DOT: + spell_list = &dot_spells; + break; + case SPELL_TYPE_HEAL: + spell_list = &heal_spells; + break; + case SPELL_TYPE_HOT_WARD: + spell_list = &hot_ward_spells; + break; + case SPELL_TYPE_DEBUFF: + spell_list = &debuff_spells; + break; + case SPELL_TYPE_BUFF: + spell_list = &buff_spells; + break; + case SPELL_TYPE_COMBATBUFF: + spell_list = &combat_buff_spells; + break; + case SPELL_TYPE_TAUNT: + spell_list = &taunt_spells; + break; + case SPELL_TYPE_DETAUNT: + spell_list = &detaunt_spells; + break; + case SPELL_TYPE_REZ: + LogWrite(PLAYER__ERROR, 0, "Bot", "Adding rez spell."); + spell_list = &rez_spells; + break; + case SPELL_TYPE_CURE: + spell_list = &cure_spells; + break; + default: + spell_list = 0; + break; + } + if (spell_list && spell_list->count((*itr)->GetSpellID()) == 0) + (*spell_list)[(*itr)->GetSpellID()] = 1; + } + + safe_delete(spells1); + safe_delete(spells2); + safe_delete(spells3); +} + +Entity* Bot::GetCombatTarget() { + Spawn* target = GetZone()->GetSpawnByID(combat_target); + if (target && target->IsEntity()) + return (Entity*)target; + + combat_target = 0; + return 0; +} + +Spell* Bot::SelectSpellToCast(float distance) { + Spell* spell = 0; + map::iterator itr; + + // Heal + spell = GetHealSpell(); + if (spell) + return spell; + + // Taunt + spell = GetTauntSpell(); + if (spell) + return spell; + + // Detaunt + spell = GetDetauntSpell(); + if (spell) + return spell; + + // Hot/Ward + spell = GetHoTWardSpell(); + if (spell) + return spell; + + // Debuff + spell = GetDebuffSpell(); + if (spell) + return spell; + + // Combat Buff + spell = GetCombatBuffSpell(); + if (spell) + return spell; + + // DoT + spell = GetDoTSpell(); + if (spell) + return spell; + + // DD + spell = GetDDSpell(); + if (spell) + return spell; + + return 0; +} + +void Bot::SetRecast(Spell* spell, int32 time) { + recast_times[spell->GetSpellID()] = time; +} + +bool Bot::IsSpellReady(Spell* spell) { + if (recast_times.count(spell->GetSpellID()) > 0) { + if (recast_times[spell->GetSpellID()] > Timer::GetCurrentTime2()) + return false; + } + + return true; +} + +Spell* Bot::GetDDSpell() { + if (dd_spells.size() == 0) + return 0; + + Spell* spell = 0; + map::iterator itr; + for (itr = dd_spells.begin(); itr != dd_spells.end(); itr++) { + spell = master_spell_list.GetSpell(itr->first, itr->second); + if (spell && IsSpellReady(spell)) { + return spell; + } + } + + return 0; +} + +Spell* Bot::GetHealSpell() { + if (heal_spells.size() == 0) + return 0; + + // Get an available heal spell + Spell* spell = 0; + map::iterator itr; + for (itr = heal_spells.begin(); itr != heal_spells.end(); itr++) { + spell = master_spell_list.GetSpell(itr->first, itr->second); + if (spell && IsSpellReady(spell)) { + break; + } + } + + // No heal available, return out + if (!spell) + return 0; + + + // There was a heal spell so find a group member that needs healing + int8 threshold = GetHealThreshold(); + GroupMemberInfo* gmi = GetGroupMemberInfo(); + deque* members = world.GetGroupManager()->GetGroupMembers(gmi->group_id); + for (int8 i = 0; i < members->size(); i++) { + Entity* member = members->at(i)->member; + + if (!member->Alive()) + continue; + + int8 percent = (int8)(((float)member->GetHP() / member->GetTotalHP()) * 100); + if (percent <= threshold) { + if (spell) { + SetTarget(member); + return spell; + } + } + } + + + return 0; +} + +Spell* Bot::GetTauntSpell() { + if (taunt_spells.size() == 0) + return 0; + + // If not the main tank and taunts are turned off return out + if (main_tank != this && !CanTaunt) + return 0; + + Spell* spell = 0; + map::iterator itr; + for (itr = taunt_spells.begin(); itr != taunt_spells.end(); itr++) { + spell = master_spell_list.GetSpell(itr->first, itr->second); + if (spell && IsSpellReady(spell)) { + return spell; + } + } + + return 0; +} + +Spell* Bot::GetDetauntSpell() { + if (detaunt_spells.size() == 0) + return 0; + + if (!GetTarget() || !GetTarget()->IsNPC()) + return 0; + + NPC* target = (NPC*)GetTarget(); + Entity* hated = target->Brain()->GetMostHated(); + if (hated == this) { + Spell* spell = 0; + map::iterator itr; + for (itr = detaunt_spells.begin(); itr != detaunt_spells.end(); itr++) { + spell = master_spell_list.GetSpell(itr->first, itr->second); + if (spell && IsSpellReady(spell)) { + return spell; + } + } + } + + return 0; +} + +Spell* Bot::GetHoTWardSpell() { + if (hot_ward_spells.size() == 0) + return 0; + + // Get an available spell + Spell* spell = 0; + map::iterator itr; + for (itr = hot_ward_spells.begin(); itr != hot_ward_spells.end(); itr++) { + spell = master_spell_list.GetSpell(itr->first, itr->second); + if (spell && IsSpellReady(spell)) { + break; + } + } + + // No spell available, return out + if (!spell) + return 0; + + // There was a spell so find a group member that needs healing + int8 threshold = GetHealThreshold(); + GroupMemberInfo* gmi = GetGroupMemberInfo(); + deque* members = world.GetGroupManager()->GetGroupMembers(gmi->group_id); + for (int8 i = 0; i < members->size(); i++) { + Entity* member = members->at(i)->member; + int8 percent = 0; + if (member->GetHP() > 0) + percent = (int8)(((float)member->GetHP() / member->GetTotalHP()) * 100); + + if (percent <= 99 && percent > threshold) { + if (spell) { + SetTarget(member); + return spell; + } + } + } + + return 0; +} +Spell* Bot::GetDebuffSpell() { + if (debuff_spells.size() == 0) + return 0; + + Spell* spell = 0; + map::iterator itr; + for (itr = debuff_spells.begin(); itr != debuff_spells.end(); itr++) { + spell = master_spell_list.GetSpell(itr->first, itr->second); + if (spell && IsSpellReady(spell)) { + // If target already has this effect on them then continue to the next spell + if (((Entity*)GetTarget())->GetSpellEffect(itr->first)) + continue; + + return spell; + } + } + + return 0; +} + +Spell* Bot::GetCombatBuffSpell() { + return 0; +} + +Spell* Bot::GetDoTSpell() { + if (dot_spells.size() == 0) + return 0; + + Spell* spell = 0; + map::iterator itr; + for (itr = dot_spells.begin(); itr != dot_spells.end(); itr++) { + spell = master_spell_list.GetSpell(itr->first, itr->second); + if (spell && IsSpellReady(spell)) { + // If target already has this effect on them then continue to the next spell + if (((Entity*)GetTarget())->GetSpellEffect(itr->first)) + continue; + + return spell; + } + } + + return 0; +} + +Spell* Bot::GetBuffSpell() { + if (buff_spells.size() == 0) + return 0; + + Spell* spell = 0; + Entity* target = 0; + map::iterator itr; + for (itr = buff_spells.begin(); itr != buff_spells.end(); itr++) { + spell = master_spell_list.GetSpell(itr->first, itr->second); + if (spell && IsSpellReady(spell)) { + target = 0; + + if (spell->GetSpellData()->target_type == SPELL_TARGET_SELF) + target = this; + if (spell->GetSpellData()->target_type == SPELL_TARGET_GROUP_AE) + target = this; + if (spell->GetSpellData()->target_type == SPELL_TARGET_ENEMY && spell->GetSpellData()->friendly_spell == 1) + target = (main_tank != NULL) ? main_tank : GetOwner(); + if (!target) + continue; + if (!target->Alive()) + continue; + + // If target already has this effect on them then continue to the next spell + if (target->GetSpellEffect(itr->first)) + continue; + + SetTarget(target); + return spell; + } + } + + return 0; +} + +Spell* Bot::GetRezSpell() { + if (rez_spells.size() == 0) + return 0; + + GroupMemberInfo* gmi = GetGroupMemberInfo(); + if (!gmi) + return 0; + + Entity* target = 0; + deque* members = world.GetGroupManager()->GetGroupMembers(gmi->group_id); + for (int8 i = 0; i < members->size(); i++) { + Entity* member = members->at(i)->member; + if (member && !member->Alive() && member->IsPlayer()) { + PendingResurrection* rez = members->at(i)->client->GetCurrentRez(); + if (rez->active) + continue; + + target = member; + break; + } + } + + if (!target) + return 0; + + Spell* spell = 0; + map::iterator itr; + for (itr = rez_spells.begin(); itr != rez_spells.end(); itr++) { + spell = master_spell_list.GetSpell(itr->first, itr->second); + if (spell && IsSpellReady(spell)) { + SetTarget(target); + return spell; + } + } + + return 0; +} + +Spell* Bot::GetCureSpell() { + return 0; +} + +int8 Bot::GetHealThreshold() { + int8 ret = 0; + + switch (GetAdventureClass()) { + case PRIEST: + case CLERIC: + case TEMPLAR: + case INQUISITOR: + case DRUID: + case WARDEN: + case FURY: + case SHAMAN: + case MYSTIC: + case DEFILER: + ret = 70; + break; + default: + ret = 30; + break; + } + + return ret; +} + +bool Bot::ShouldMelee() { + bool ret = true; + + switch (GetAdventureClass()) { + case PRIEST: + case CLERIC: + case TEMPLAR: + case INQUISITOR: + case DRUID: + case WARDEN: + case FURY: + case SHAMAN: + case MYSTIC: + case DEFILER: + case MAGE: + case SORCERER: + case WIZARD: + case WARLOCK: + case ENCHANTER: + case ILLUSIONIST: + case COERCER: + case SUMMONER: + case CONJUROR: + case NECROMANCER: + ret = false; + break; + default: + ret = true; + break; + } + + if (GetTarget() == GetOwner()) + ret = false; + + return ret; +} + +void Bot::Camp() { + // Copy from COMMAND_GROUP_LEAVE + GroupMemberInfo* gmi = GetGroupMemberInfo(); + if (gmi) { + int32 group_id = gmi->group_id; + world.GetGroupManager()->RemoveGroupMember(group_id, this); + if (!world.GetGroupManager()->IsGroupIDValid(group_id)) { + // leader->Message(CHANNEL_COLOR_GROUP, "%s has left the group.", client->GetPlayer()->GetName()); + } + else { + world.GetGroupManager()->GroupMessage(group_id, "%s has left the group.", GetName()); + } + } + + GetZone()->PlayAnimation(this, 538); + SetVisualState(540); + GetZone()->Despawn(this, 5000); + + if (!GetOwner()) + return; + + Client* client = GetZone()->GetClientBySpawn(GetOwner()); + if (client) + client->GetPlayer()->SpawnedBots.erase(BotIndex); +} + +void Bot::ChangeLevel(int16 old_level, int16 new_level) { + if (new_level < 1) + return; + + if (GetLevel() != new_level) { + SetLevel(new_level); + if (GetGroupMemberInfo()) { + UpdateGroupMemberInfo(); + world.GetGroupManager()->SendGroupUpdate(GetGroupMemberInfo()->group_id); + } + } + + if (GetPet()) { + NPC* pet = (NPC*)GetPet(); + if (pet->GetMaxPetLevel() == 0 || new_level <= pet->GetMaxPetLevel()) { + pet->SetLevel(new_level); + GetZone()->PlayAnimation(pet, 1753); + } + } + + // level up animation + GetZone()->PlayAnimation(this, 1753); + + //player->GetSkills()->IncreaseAllSkillCaps(5 * (new_level - old_level)); + GetNewSpells(); + //SendNewSpells(player->GetAdventureClass()); + //SendNewSpells(classes.GetBaseClass(player->GetAdventureClass())); + //SendNewSpells(classes.GetSecondaryBaseClass(player->GetAdventureClass())); + + + ChangePrimaryWeapon(); + ChangeSecondaryWeapon(); + ChangeRangedWeapon(); + GetInfoStruct()->level = new_level; + // GetPlayer()->SetLevel(new_level); + + LogWrite(MISC__TODO, 1, "TODO", "Get new HP/POWER/stat based on default values from DB\n\t(%s, function: %s, line #: %i)", __FILE__, __FUNCTION__, __LINE__); + + SetTotalHPBase(new_level*new_level * 2 + 40); + SetTotalPowerBase((sint32)(new_level*new_level*2.1 + 45)); + CalculateBonuses(); + SetHP(GetTotalHP()); + SetPower(GetTotalPower()); + GetInfoStruct()->agi_base = new_level * 2 + 15; + GetInfoStruct()->intel_base = new_level * 2 + 15; + GetInfoStruct()->wis_base = new_level * 2 + 15; + GetInfoStruct()->str_base = new_level * 2 + 15; + GetInfoStruct()->sta_base = new_level * 2 + 15; + GetInfoStruct()->cold_base = (int16)(new_level*1.5 + 10); + GetInfoStruct()->heat_base = (int16)(new_level*1.5 + 10); + GetInfoStruct()->disease_base = (int16)(new_level*1.5 + 10); + GetInfoStruct()->mental_base = (int16)(new_level*1.5 + 10); + GetInfoStruct()->magic_base = (int16)(new_level*1.5 + 10); + GetInfoStruct()->divine_base = (int16)(new_level*1.5 + 10); + GetInfoStruct()->poison_base = (int16)(new_level*1.5 + 10); + SetHPRegen((int)(new_level*.75) + (int)(new_level / 10) + 3); + SetPowerRegen(new_level + (int)(new_level / 10) + 4); + GetInfoStruct()->poison_base = (int16)(new_level*1.5 + 10); + /*UpdateTimeStampFlag(LEVEL_UPDATE_FLAG); + GetPlayer()->SetCharSheetChanged(true); + + Message(CHANNEL_COLOR_EXP, "You are now level %i!", new_level); + LogWrite(WORLD__DEBUG, 0, "World", "Player: %s leveled from %u to %u", GetPlayer()->GetName(), old_level, new_level); + GetPlayer()->GetSkills()->SetSkillCapsByType(1, 5 * new_level); + GetPlayer()->GetSkills()->SetSkillCapsByType(3, 5 * new_level); + GetPlayer()->GetSkills()->SetSkillCapsByType(6, 5 * new_level); + GetPlayer()->GetSkills()->SetSkillCapsByType(13, 5 * new_level); + */ +} \ No newline at end of file diff --git a/EQ2/source/WorldServer/Bots/Bot.h b/EQ2/source/WorldServer/Bots/Bot.h new file mode 100644 index 000000000..21c6c6e59 --- /dev/null +++ b/EQ2/source/WorldServer/Bots/Bot.h @@ -0,0 +1,88 @@ +#pragma once + +#include "../NPC.h" +#include + +struct TradeItemInfo; + +class Bot : public NPC { +public: + Bot(); + ~Bot(); + + int32 BotID; // DB id + int32 BotIndex; // Bot id with its owner (player) + bool IsBot() { return true; } + + void GiveItem(int32 item_id); + void RemoveItem(Item* item); + void TradeItemAdded(Item* item); + void AddItemToTrade(int8 slot); + bool CheckTradeItems(map* list); + void FinishTrade(); + void GetNewSpells(); + map* GetBotSpells() { return &dd_spells; } + + bool ShowHelm; + bool ShowCloak; + bool CanTaunt; + + Entity* GetCombatTarget(); + void SetCombatTarget(int32 target) { combat_target = target; } + + Spell* SelectSpellToCast(float distance); + + void MessageGroup(string msg); + + void SetRecast(Spell* spell, int32 time); + bool ShouldMelee(); + + Spell* GetNextBuffSpell() { return GetBuffSpell(); } + Spell* GetHealSpell(); + Spell* GetRezSpell(); + + void SetMainTank(Entity* tank) { main_tank = tank; } + + void Camp(); + void ChangeLevel(int16 old_level, int16 new_level); + +private: + bool CanEquipItem(Item* item); + bool IsSpellReady(Spell* spell); + + + Spell* GetTauntSpell(); + Spell* GetDetauntSpell(); + Spell* GetHoTWardSpell(); + Spell* GetDebuffSpell(); + Spell* GetCombatBuffSpell(); + Spell* GetDoTSpell(); + Spell* GetDDSpell(); + + Spell* GetBuffSpell(); + Spell* GetCureSpell(); + + + int8 GetHealThreshold(); + + set trading_slots; + int32 combat_target; + + Entity* main_tank; + + map bot_spells; + map dd_spells; + map dot_spells; + map heal_spells; + map hot_ward_spells; + map debuff_spells; + map buff_spells; + map combat_buff_spells; + map taunt_spells; + map detaunt_spells; + map rez_spells; + map cure_spells; + + // First int32 = spell id (change to timer id later), second int32 is time the spell is available to cast again + map recast_times; +}; diff --git a/EQ2/source/WorldServer/Bots/BotBrain.cpp b/EQ2/source/WorldServer/Bots/BotBrain.cpp new file mode 100644 index 000000000..29007ec16 --- /dev/null +++ b/EQ2/source/WorldServer/Bots/BotBrain.cpp @@ -0,0 +1,204 @@ +#include "BotBrain.h" +#include "../Combat.h" +#include "../Spells.h" +#include "../../common/Log.h" + +BotBrain::BotBrain(Bot* body) : Brain(body) { + Body = body; +} + +BotBrain::~BotBrain() { + +} + +void BotBrain::Think() { + // No ownder do nothing, probably despawn as owner should never be empty for bots + if (!m_body->GetOwner()) + return; + + // Not in a group yet then do nothing + if (!m_body->GetGroupMemberInfo()) + return; + + if (!Body->Alive()) + return; + + if (Body->IsMezzedOrStunned()) + return; + + Entity* target = 0; + bool result; + + // If combat was processed we can return out + if (ProcessCombat()) + return; + + // Combat failed to process so do out of combat tasks like follow the player + if (ProcessOutOfCombatSpells()) + return; + + // put htis here so bots don't try to follow the owner while in combat + if (Body->EngagedInCombat()) + return; + + // Set target to owner + target = GetBody()->GetOwner(); + + // Get distance from the owner + float distance = GetBody()->GetDistance(target); + distance -= target->appearance.pos.collision_radius / 10; + distance -= GetBody()->appearance.pos.collision_radius / 10; + + // If out of melee range then move closer + if (distance > MAX_COMBAT_RANGE) + MoveCloser(target); +} + +bool BotBrain::ProcessCombat() { + SetTarget(); + + if (Body->GetTarget() && Body->EngagedInCombat()) { + if (Body->GetTarget() && Body->GetTarget()->IsEntity() && Body->AttackAllowed((Entity*)Body->GetTarget())) { + Entity* target = (Entity*)Body->GetTarget(); + float distance = Body->GetDistance(target); + + if (!ProcessSpell(target, distance)) { + if (Body->ShouldMelee()) + ProcessMelee(target, distance); + } + + NPC* pet = (NPC*)Body->GetPet(); + if (pet) { + if (pet->Brain()->GetHate(target) == 0) + pet->AddHate(target, 1); + } + } + + return true; + } + + return false; +} + +void BotBrain::SetTarget() { + // The target issued from /bot attack + if (Body->GetCombatTarget() && Body->GetCombatTarget()->Alive()) { + Body->SetTarget(Body->GetCombatTarget()); + Body->InCombat(true); + return; + } + + // Assist + Entity* owner = Body->GetOwner(); + if (owner && owner->EngagedInCombat()) { + if (owner->GetTarget() && owner->GetTarget()->IsEntity() && owner->GetTarget()->Alive() && owner->AttackAllowed((Entity*)owner->GetTarget())) { + Body->SetTarget(owner->GetTarget()); + Body->InCombat(true); + // Add some hate to keep the bot attacking if + // the player toggles combat off + if (GetHate((Entity*)Body->GetTarget()) == 0) + AddHate((Entity*)Body->GetTarget(), 1); + return; + } + } + + // Most hated + Entity* hated = GetMostHated(); + if (hated && hated->Alive()) { + if (hated == Body->GetOwner()) { + ClearHate(hated); + } + else { + Body->SetTarget(hated); + Body->InCombat(true); + return; + } + } + + // None of the above true so clear target and turn combat off + Body->SetTarget(0); + Body->InCombat(false); +} + +bool BotBrain::ProcessSpell(Entity* target, float distance) { + if (Body->IsStifled() || Body->IsFeared()) + return false; + + if (Body->IsCasting()) + return false; + + if (!HasRecovered()) + return false; + + Spell* spell = Body->SelectSpellToCast(distance); + if (spell) { + // Target can change (heals for example) so recalculate distance and if out of range move closer + float distance = Body->GetDistance(Body->GetTarget()); + if (distance > spell->GetSpellData()->range) { + if (Body->GetTarget()->IsEntity()) + MoveCloser((Entity*)Body->GetTarget()); + } + else { + // stop movement if spell can't be cast while moving + if (!spell->GetSpellData()->cast_while_moving) + Body->CalculateRunningLocation(true); + + Body->GetZone()->ProcessSpell(spell, Body, Body->GetTarget()); + m_spellRecovery = (int32)(Timer::GetCurrentTime2() + (spell->GetSpellData()->cast_time * 10) + (spell->GetSpellData()->recovery * 10) + 2000); + // recast time + int32 time = Timer::GetCurrentTime2() + (spell->GetSpellData()->recast * 1000); + Body->SetRecast(spell, time); + + string str = "I am casting "; + str += spell->GetName(); + Body->MessageGroup(str); + } + return true; + } + + return false; +} + +bool BotBrain::ProcessOutOfCombatSpells() { + if (Body->IsStifled() || Body->IsFeared()) + return false; + + if (Body->IsCasting()) + return false; + + if (!HasRecovered()) + return false; + + Spell* spell = Body->GetHealSpell(); + if (!spell) + spell = Body->GetRezSpell(); + if (!spell) + spell = Body->GetNextBuffSpell(); + + if (spell) { + // stop movement if spell can't be cast while moving + if (!spell->GetSpellData()->cast_while_moving) + Body->CalculateRunningLocation(true); + + // See if we are in range of target, if not move closer + float distance = Body->GetDistance(Body->GetTarget()); + if (distance > spell->GetSpellData()->range) { + if (Body->GetTarget()->IsEntity()) + MoveCloser((Entity*)Body->GetTarget()); + } + else { + Body->GetZone()->ProcessSpell(spell, Body, Body->GetTarget()); + m_spellRecovery = (int32)(Timer::GetCurrentTime2() + (spell->GetSpellData()->cast_time * 10) + (spell->GetSpellData()->recovery * 10) + 2000); + // recast time + int32 time = Timer::GetCurrentTime2() + (spell->GetSpellData()->recast * 1000); + Body->SetRecast(spell, time); + + string str = "I am casting "; + str += spell->GetName(); + Body->MessageGroup(str); + } + return true; + } + + return false; +} \ No newline at end of file diff --git a/EQ2/source/WorldServer/Bots/BotBrain.h b/EQ2/source/WorldServer/Bots/BotBrain.h new file mode 100644 index 000000000..aa8911f8f --- /dev/null +++ b/EQ2/source/WorldServer/Bots/BotBrain.h @@ -0,0 +1,20 @@ +#pragma once + +#include "../NPC_AI.h" +#include "Bot.h" + +class BotBrain : public Brain { +public: + BotBrain(Bot* body); + virtual ~BotBrain(); + void Think(); + bool ProcessSpell(Entity* target, float distance); + + bool ProcessOutOfCombatSpells(); + +private: + Bot* Body; + + bool ProcessCombat(); + void SetTarget(); +}; \ No newline at end of file diff --git a/EQ2/source/WorldServer/Bots/BotCommands.cpp b/EQ2/source/WorldServer/Bots/BotCommands.cpp new file mode 100644 index 000000000..f4dde992a --- /dev/null +++ b/EQ2/source/WorldServer/Bots/BotCommands.cpp @@ -0,0 +1,790 @@ +#include "../Commands/Commands.h" +#include "../WorldDatabase.h" +#include "../classes.h" +#include "../races.h" +#include "../Bots/Bot.h" +#include "../../common/Log.h" +#include "../Trade.h" +#include "../PlayerGroups.h" +#include "../World.h" +#include "../../common/GlobalHeaders.h" + +extern WorldDatabase database; +extern ConfigReader configReader; +extern World world; +extern MasterSpellList master_spell_list; + +void Commands::Command_Bot(Client* client, Seperator* sep) { + + if (sep && sep->IsSet(0)) { + if (strncasecmp("camp", sep->arg[0], 4) == 0) { + if (!client->GetPlayer()->GetTarget() || !client->GetPlayer()->GetTarget()->IsBot()) { + client->SimpleMessage(CHANNEL_COLOR_YELLOW, "You must target a bot"); + return; + } + + Bot* bot = (Bot*)client->GetPlayer()->GetTarget(); + if (bot->GetOwner() != client->GetPlayer()) { + client->SimpleMessage(CHANNEL_COLOR_YELLOW, "You can only camp your own bots."); + return; + } + + bot->Camp(); + return; + } + else if (strncasecmp("attack", sep->arg[0], 6) == 0) { + if (client->GetPlayer()->GetTarget() && client->GetPlayer()->GetTarget()->IsEntity() && client->GetPlayer()->GetTarget()->Alive()) { + Entity* target = (Entity*)client->GetPlayer()->GetTarget(); + + if (client->GetPlayer()->GetDistance(target) <= 50) { + if (client->GetPlayer()->AttackAllowed(target)) { + GroupMemberInfo* gmi = client->GetPlayer()->GetGroupMemberInfo(); + if (gmi) { + deque* members = world.GetGroupManager()->GetGroupMembers(gmi->group_id); + deque::iterator itr; + for (itr = members->begin(); itr != members->end(); itr++) { + if ((*itr)->member->IsBot() && ((Bot*)(*itr)->member)->GetOwner() == client->GetPlayer()) { + ((Bot*)(*itr)->member)->SetCombatTarget(target->GetID()); + } + } + } + } + else + client->SimpleMessage(CHANNEL_COLOR_YELLOW, "You can not attack that target."); + } + else + client->SimpleMessage(CHANNEL_COLOR_YELLOW, "Target is to far away."); + } + else + client->SimpleMessage(CHANNEL_COLOR_YELLOW, "Not a valid target."); + + return; + } + else if (strncasecmp("spells", sep->arg[0], 6) == 0) { + if (client->GetPlayer()->GetTarget() && client->GetPlayer()->GetTarget()->IsBot()) { + Bot* bot = (Bot*)client->GetPlayer()->GetTarget(); + + map* spells = bot->GetBotSpells(); + map::iterator itr; + string output; + for (itr = spells->begin(); itr != spells->end(); itr++) { + Spell* spell = master_spell_list.GetSpell(itr->first, itr->second); + if (spell) { + output += spell->GetName(); + output += "\n"; + } + } + + client->SimpleMessage(CHANNEL_COLOR_YELLOW, output.c_str()); + return; + } + } + else if (strncasecmp("maintank", sep->arg[0], 8) == 0) { + if (!client->GetPlayer()->GetTarget() || !client->GetPlayer()->GetTarget()->IsEntity()) { + client->SimpleMessage(CHANNEL_COMMAND_TEXT, "Not a valid target."); + return; + } + + GroupMemberInfo* gmi = client->GetPlayer()->GetGroupMemberInfo(); + if (!gmi) { + client->SimpleMessage(CHANNEL_COMMAND_TEXT, "You are not in a group."); + return; + } + + Entity* target = (Entity*)client->GetPlayer()->GetTarget(); + if (!world.GetGroupManager()->IsInGroup(gmi->group_id, target)) { + client->SimpleMessage(CHANNEL_COMMAND_TEXT, "Target is not in your group."); + return; + } + + deque* members = world.GetGroupManager()->GetGroupMembers(gmi->group_id); + for (int8 i = 0; i < members->size(); i++) { + GroupMemberInfo* gmi2 = members->at(i); + if (gmi2->member->IsBot() && ((Bot*)gmi2->member)->GetOwner() == client->GetPlayer()) { + ((Bot*)gmi2->member)->SetMainTank(target); + client->Message(CHANNEL_COMMAND_TEXT, "Setting main tank for %s to %s", gmi2->member->GetName(), target->GetName()); + } + } + return; + } + else if (strncasecmp("delete", sep->arg[0], 6) == 0) { + if (sep->IsSet(1) && sep->IsNumber(1)) { + int32 index = atoi(sep->arg[1]); + + // Check if bot is currently spawned and if so camp it out + if (client->GetPlayer()->SpawnedBots.count(index) > 0) { + Spawn* bot = client->GetCurrentZone()->GetSpawnByID(client->GetPlayer()->SpawnedBots[index]); + if (bot && bot->IsBot()) + ((Bot*)bot)->Camp(); + } + + database.DeleteBot(client->GetCharacterID(), index); + client->SimpleMessage(CHANNEL_COLOR_YELLOW, "Bot has been deleted."); + return; + } + else { + client->SimpleMessage(CHANNEL_COLOR_YELLOW, "You must give the id (from /bot list) to delete a bot"); + return; + } + } + else if (strncasecmp("summon", sep->arg[0], 6) == 0) { + if (sep->IsSet(1) && strncasecmp("group", sep->arg[1], 5) == 0) { + GroupMemberInfo* gmi = client->GetPlayer()->GetGroupMemberInfo(); + if (gmi) { + Player* player = client->GetPlayer(); + deque* members = world.GetGroupManager()->GetGroupMembers(gmi->group_id); + for (int8 i = 0; i < members->size(); i++) { + Entity* member = members->at(i)->member; + if (member->IsBot() && ((Bot*)member)->GetOwner() == player) { + member->appearance.pos.grid_id = player->appearance.pos.grid_id; + member->SetX(player->GetX()); + member->SetY(player->GetY()); + member->SetZ(player->GetZ()); + client->Message(CHANNEL_COLOR_YELLOW, "Summoning %s.", member->GetName()); + } + } + return; + } + else { + client->SimpleMessage(CHANNEL_COLOR_YELLOW, "You are not in a group."); + return; + } + } + else { + if (client->GetPlayer()->GetTarget() && client->GetPlayer()->GetTarget()->IsBot()) { + Bot* bot = (Bot*)client->GetPlayer()->GetTarget(); + Player* player = client->GetPlayer(); + if (bot && bot->GetOwner() == player) { + bot->appearance.pos.grid_id = player->appearance.pos.grid_id; + bot->SetX(player->GetX()); + bot->SetY(player->GetY()); + bot->SetZ(player->GetZ()); + client->Message(CHANNEL_COLOR_YELLOW, "Summoning %s.", bot->GetName()); + return; + } + else { + client->SimpleMessage(CHANNEL_COLOR_YELLOW, "You can only summon your own bots."); + return; + } + } + else { + client->SimpleMessage(CHANNEL_COLOR_YELLOW, "You must target a bot."); + return; + } + } + } + else if (strncasecmp("test", sep->arg[0], 4) == 0) { + if (client->GetPlayer()->GetTarget() && client->GetPlayer()->GetTarget()->IsBot()) { + ((Bot*)client->GetPlayer()->GetTarget())->MessageGroup("Test message"); + return; + } + } + } + + client->SimpleMessage(CHANNEL_COLOR_YELLOW, "BotCommands:"); + client->SimpleMessage(CHANNEL_COLOR_YELLOW, "/bot create [race] [gender] [class] [name]"); + client->SimpleMessage(CHANNEL_COLOR_YELLOW, "/bot customize - customize the appearance of the bot"); + client->SimpleMessage(CHANNEL_COLOR_YELLOW, "/bot list - list all the bots you have created with this character"); + client->SimpleMessage(CHANNEL_COLOR_YELLOW, "/bot spawn [id] - spawns a bot into the world, id obtained from /bot list"); + client->SimpleMessage(CHANNEL_COLOR_YELLOW, "/bot inv [give/list/remove] - manage bot equipment, for remove a slot must be provided"); + client->SimpleMessage(CHANNEL_COLOR_YELLOW, "/bot settings [helm/hood/cloak/taunt] [0/1] - Turn setting on (1) or off(0)"); + client->SimpleMessage(CHANNEL_COLOR_YELLOW, "/bot camp - removes the bot from your group and despawns them"); + client->SimpleMessage(CHANNEL_COLOR_YELLOW, "/bot attack - commands your bots to attack your target"); + client->SimpleMessage(CHANNEL_COLOR_YELLOW, "/bot spells - lists bot spells, not fully implemented yet"); + client->SimpleMessage(CHANNEL_COLOR_YELLOW, "/bot maintank - sets targeted group member as the main tank for your bots"); + client->SimpleMessage(CHANNEL_COLOR_YELLOW, "/bot delete [id] - deletes the bot with the given id (obtained from /bot list)"); + client->SimpleMessage(CHANNEL_COLOR_YELLOW, "/bot help"); +} + +void Commands::Command_Bot_Create(Client* client, Seperator* sep) { + int8 race = BARBARIAN; + int8 gender = 0; + int8 advClass = GUARDIAN; + string name; + + if (sep) { + if (sep->IsSet(0) && sep->IsNumber(0)) + race = atoi(sep->arg[0]); + else { + client->SimpleMessage(CHANNEL_COLOR_YELLOW, "First param of \"/bot create\" needs to be a number"); + return; + } + + if (sep->IsSet(1) && sep->IsNumber(1)) + gender = atoi(sep->arg[1]); + else { + client->SimpleMessage(CHANNEL_COLOR_YELLOW, "Second param of \"/bot create\" needs to be a number"); + return; + } + + if (sep->IsSet(2) && sep->IsNumber(2)) + advClass = atoi(sep->arg[2]); + else { + client->SimpleMessage(CHANNEL_COLOR_YELLOW, "Third param of \"/bot create\" needs to be a number"); + return; + } + + if (sep->IsSet(3)) { + name = string(sep->arg[3]); + transform(name.begin(), name.begin() + 1, name.begin(), ::toupper); + transform(name.begin() + 1, name.end(), name.begin() + 1, ::tolower); + } + else { + client->SimpleMessage(CHANNEL_COLOR_YELLOW, "Fourth param (name) of \"/bot create\" is required"); + return; + } + + } + else { + client->SimpleMessage(CHANNEL_COLOR_YELLOW, "Syntax: /bot create [race ID] [Gender ID] [class ID] [name]"); + client->SimpleMessage(CHANNEL_COLOR_YELLOW, "All parameters are required. /bot help race or /bot help class for ID's."); + client->SimpleMessage(CHANNEL_COLOR_YELLOW, "Gender ID's: 0 = Female, 1 = Male"); + client->SimpleMessage(CHANNEL_COLOR_YELLOW, "Ex: /bot create 0 0 3 Botty"); + return; + } + + int8 result = database.CheckNameFilter(name.c_str()); + if (result == BADNAMELENGTH_REPLY) { + client->SimpleMessage(CHANNEL_COLOR_YELLOW, "Name length is invalid, must be greater then 3 characters and less then 16."); + return; + } + else if (result == NAMEINVALID_REPLY) { + client->SimpleMessage(CHANNEL_COLOR_YELLOW, "Name is invalid, can only contain letters."); + return; + } + else if (result == NAMETAKEN_REPLY) { + client->SimpleMessage(CHANNEL_COLOR_YELLOW, "Name is already taken, please choose another."); + return; + } + else if (result == NAMEFILTER_REPLY) { + client->SimpleMessage(CHANNEL_COLOR_YELLOW, "Name failed the filter check."); + return; + } + else if (result == UNKNOWNERROR_REPLY) { + client->SimpleMessage(CHANNEL_COLOR_YELLOW, "Unknown error while checking the name."); + return; + } + + string race_string; + switch (race) { + case BARBARIAN: + race_string = "/barbarian/barbarian"; + break; + case DARK_ELF: + race_string = "/darkelf/darkelf"; + break; + case DWARF: + race_string = "/dwarf/dwarf"; + break; + case ERUDITE: + race_string = "/erudite/erudite"; + break; + case FROGLOK: + race_string = "/froglok/froglok"; + break; + case GNOME: + race_string = "/gnome/gnome"; + break; + case HALF_ELF: + race_string = "/halfelf/halfelf"; + break; + case HALFLING: + race_string = "/halfling/halfling"; + break; + case HIGH_ELF: + race_string = "/highelf/highelf"; + break; + case HUMAN: + race_string = "/human/human"; + break; + case IKSAR: + race_string = "/iksar/iksar"; + break; + case KERRA: + race_string = "/kerra/kerra"; + break; + case OGRE: + race_string = "/ogre/ogre"; + break; + case RATONGA: + race_string = "/ratonga/ratonga"; + break; + case TROLL: + race_string = "/troll/troll"; + break; + case WOOD_ELF: + race_string = "/woodelf/woodelf"; + break; + case FAE: + race_string = "/fae/fae_light"; + break; + case ARASAI: + race_string = "/fae/fae_dark"; + break; + case SARNAK: + gender == 1 ? race_string = "01/sarnak_male/sarnak" : race_string = "01/sarnak_female/sarnak"; + break; + case VAMPIRE: + race_string = "/vampire/vampire"; + break; + case AERAKYN: + race_string = "/aerakyn/aerakyn"; + break; + } + + if (race_string.length() > 0) { + string gender_string; + Bot* bot = 0; + + gender == 1 ? gender_string = "male" : gender_string = "female"; + + vector* id_list = database.GetAppearanceIDsLikeName("ec/pc" + race_string + "_" + gender_string); + + if (id_list) { + bot = new Bot(); + memset(&bot->appearance, 0, sizeof(bot->appearance)); + bot->appearance.pos.collision_radius = 32; + bot->secondary_command_list_id = 0; + bot->primary_command_list_id = 0; + bot->appearance.display_name = 1; + bot->appearance.show_level = 1; + bot->appearance.attackable = 1; + bot->appearance.show_command_icon = 1; + bot->appearance.targetable = 1; + bot->appearance.race = race; + bot->appearance.gender = gender; + bot->SetID(Spawn::NextID()); + bot->SetX(client->GetPlayer()->GetX()); + bot->SetY(client->GetPlayer()->GetY()); + bot->SetZ(client->GetPlayer()->GetZ()); + bot->SetHeading(client->GetPlayer()->GetHeading()); + bot->SetSpawnOrigX(bot->GetX()); + bot->SetSpawnOrigY(bot->GetY()); + bot->SetSpawnOrigZ(bot->GetZ()); + bot->SetSpawnOrigHeading(bot->GetHeading()); + bot->appearance.pos.grid_id = client->GetPlayer()->appearance.pos.grid_id; + bot->SetInitialState(16512); + bot->SetModelType(id_list->at(0)); + bot->SetAdventureClass(advClass); + bot->SetLevel(client->GetPlayer()->GetLevel()); + bot->SetName(name.c_str()); + bot->SetEncounterLevel(6); + bot->size = 32; + if (bot->GetTotalHP() == 0) { + bot->SetTotalHP(25 * bot->GetLevel() + 1); + bot->SetHP(25 * bot->GetLevel() + 1); + } + if (bot->GetTotalPower() == 0) { + bot->SetTotalPower(25 * bot->GetLevel() + 1); + bot->SetPower(25 * bot->GetLevel() + 1); + } + bot->SetOwner(client->GetPlayer()); + bot->GetNewSpells(); + client->GetCurrentZone()->AddSpawn(bot); + + int32 index; + int32 bot_id = database.CreateNewBot(client->GetCharacterID(), name, race, advClass, gender, id_list->at(0), index); + if (bot_id == 0) { + LogWrite(PLAYER__ERROR, 0, "Player", "Error saving bot to DB. Bot was not saved!"); + client->SimpleMessage(CHANNEL_ERROR, "Error saving bot to DB. Bot was not saved!"); + } + else { + bot->BotID = bot_id; + bot->BotIndex = index; + client->GetPlayer()->SpawnedBots[bot->BotIndex] = bot->GetID(); + + // Add Items + database.SetBotStartingItems(bot, advClass, race); + } + } + else { + client->SimpleMessage(CHANNEL_COLOR_RED, "Error finding the id list for your race, please verify the race id."); + } + + safe_delete(id_list); + } + else + client->SimpleMessage(CHANNEL_COLOR_RED, "Error finding the race string, please verify the race id."); +} + +void Commands::Command_Bot_Customize(Client* client, Seperator* sep) { + Bot* bot = 0; + if (client->GetPlayer()->GetTarget() && client->GetPlayer()->GetTarget()->IsBot()) + bot = (Bot*)client->GetPlayer()->GetTarget(); + + if (bot && bot->GetOwner() == client->GetPlayer()) { + PacketStruct* packet = configReader.getStruct("WS_OpenCharCust", client->GetVersion()); + if (packet) { + + AppearanceData* botApp = &bot->appearance; + CharFeatures* botFeatures = &bot->features; + + AppearanceData* playerApp = &client->GetPlayer()->appearance; + CharFeatures* playerFeatures = &client->GetPlayer()->features; + + memcpy(&client->GetPlayer()->SavedApp, playerApp, sizeof(AppearanceData)); + memcpy(&client->GetPlayer()->SavedFeatures, playerFeatures, sizeof(CharFeatures)); + + client->GetPlayer()->custNPC = true; + client->GetPlayer()->custNPCTarget = bot; + memcpy(playerApp, botApp, sizeof(AppearanceData)); + memcpy(playerFeatures, botFeatures, sizeof(CharFeatures)); + client->GetPlayer()->changed = true; + client->GetPlayer()->info_changed = true; + client->GetCurrentZone()->SendSpawnChanges(client->GetPlayer(), client); + packet->setDataByName("race_id", 255); + client->QueuePacket(packet->serialize()); + } + } +} + +void Commands::Command_Bot_Spawn(Client* client, Seperator* sep) { + + if (sep && sep->IsSet(0) && sep->IsNumber(0)) { + int32 bot_id = atoi(sep->arg[0]); + if (client->GetPlayer()->SpawnedBots.count(bot_id) > 0) { + client->Message(CHANNEL_COLOR_YELLOW, "The bot with id %u is already spawned.", bot_id); + return; + } + + Bot* bot = new Bot(); + memset(&bot->appearance, 0, sizeof(bot->appearance)); + + if (database.LoadBot(client->GetCharacterID(), bot_id, bot)) { + bot->appearance.pos.collision_radius = 32; + bot->secondary_command_list_id = 0; + bot->primary_command_list_id = 0; + bot->appearance.display_name = 1; + bot->appearance.show_level = 1; + bot->appearance.attackable = 1; + bot->appearance.show_command_icon = 1; + bot->appearance.targetable = 1; + bot->SetID(Spawn::NextID()); + bot->SetX(client->GetPlayer()->GetX()); + bot->SetY(client->GetPlayer()->GetY()); + bot->SetZ(client->GetPlayer()->GetZ()); + bot->SetHeading(client->GetPlayer()->GetHeading()); + bot->SetSpawnOrigX(bot->GetX()); + bot->SetSpawnOrigY(bot->GetY()); + bot->SetSpawnOrigZ(bot->GetZ()); + bot->SetSpawnOrigHeading(bot->GetHeading()); + bot->appearance.pos.grid_id = client->GetPlayer()->appearance.pos.grid_id; + bot->SetInitialState(16512); + bot->SetLevel(client->GetPlayer()->GetLevel()); + bot->SetEncounterLevel(6); + bot->size = 32; + if (bot->GetTotalHP() == 0) { + bot->SetTotalHP(25 * bot->GetLevel() + 1); + bot->SetHP(25 * bot->GetLevel() + 1); + } + if (bot->GetTotalPower() == 0) { + bot->SetTotalPower(25 * bot->GetLevel() + 1); + bot->SetPower(25 * bot->GetLevel() + 1); + } + bot->SetOwner(client->GetPlayer()); + bot->ChangePrimaryWeapon(); + bot->CalculateBonuses(); + bot->GetNewSpells(); + client->GetCurrentZone()->AddSpawn(bot); + + if (sep->IsSet(1) && sep->IsNumber(1) && atoi(sep->arg[1]) == 1) { + client->GetCurrentZone()->SendSpawn(bot, client); + + int8 result = world.GetGroupManager()->Invite(client->GetPlayer(), bot); + + if (result == 0) + client->Message(CHANNEL_COMMANDS, "You invite %s to group with you.", bot->GetName()); + else if (result == 1) + client->SimpleMessage(CHANNEL_COMMANDS, "That player is already in a group."); + else if (result == 2) + client->SimpleMessage(CHANNEL_COMMANDS, "That player has been invited to another group."); + else if (result == 3) + client->SimpleMessage(CHANNEL_COMMANDS, "Your group is already full."); + else if (result == 4) + client->SimpleMessage(CHANNEL_COMMANDS, "You have a pending invitation, cancel it first."); + else if (result == 5) + client->SimpleMessage(CHANNEL_COMMANDS, "You cannot invite yourself!"); + else if (result == 6) + client->SimpleMessage(CHANNEL_COMMANDS, "Could not locate the player."); + else + client->SimpleMessage(CHANNEL_COMMANDS, "Group invite failed, unknown error!"); + } + + client->GetPlayer()->SpawnedBots[bot_id] = bot->GetID(); + } + else { + client->Message(CHANNEL_ERROR, "Error spawning bot (%u)", bot_id); + } + } + else { + Command_Bot(client, sep); + } +} + +void Commands::Command_Bot_List(Client* client, Seperator* sep) { + string bot_list; + bot_list = database.GetBotList(client->GetCharacterID()); + if (!bot_list.empty()) + client->SimpleMessage(CHANNEL_COLOR_YELLOW, bot_list.c_str()); +} + +void Commands::Command_Bot_Inv(Client* client, Seperator* sep) { + if (sep && sep->IsSet(0)) { + if (strncasecmp("give", sep->arg[0], 4) == 0) { + if (client->GetPlayer()->trade) { + client->SimpleMessage(CHANNEL_COLOR_YELLOW, "You are already trading."); + return; + } + + if (!client->GetPlayer()->GetTarget() || !client->GetPlayer()->GetTarget()->IsBot()) { + client->SimpleMessage(CHANNEL_COLOR_YELLOW, "You must target a bot"); + return; + } + + Bot* bot = (Bot*)client->GetPlayer()->GetTarget(); + if (bot->trade) { + client->SimpleMessage(CHANNEL_COLOR_YELLOW, "Bot is already in a trade..."); + return; + } + + if (bot->GetOwner() != client->GetPlayer()) { + client->SimpleMessage(CHANNEL_COLOR_YELLOW, "You can only trade with your own bot."); + return; + } + + Trade* trade = new Trade(client->GetPlayer(), bot); + client->GetPlayer()->trade = trade; + bot->trade = trade; + } + else if (strncasecmp("list", sep->arg[0], 4) == 0) { + if (!client->GetPlayer()->GetTarget() || !client->GetPlayer()->GetTarget()->IsBot()) { + client->SimpleMessage(CHANNEL_COLOR_YELLOW, "You must target a bot"); + return; + } + + Bot* bot = (Bot*)client->GetPlayer()->GetTarget(); + if (bot->GetOwner() != client->GetPlayer()) { + client->SimpleMessage(CHANNEL_COLOR_YELLOW, "You can only see the inventory of your own bot."); + return; + } + + string item_list = "Bot Items:\nSlot\tName\n"; + for (int8 i = 0; i < NUM_SLOTS; i++) { + Item* item = bot->GetEquipmentList()->GetItem(i); + if (item) { + //\\aITEM %u %u:%s\\/a + item_list += to_string(i) + ":\t\\aITEM " + to_string(item->details.item_id) + " " + to_string(item->details.unique_id) + ":" + item->name + "\\/a \n"; + } + } + + client->SimpleMessage(CHANNEL_COLOR_YELLOW, item_list.c_str()); + } + else if (strncasecmp("remove", sep->arg[0], 6) == 0) { + if (sep->IsSet(1) && sep->IsNumber(1)) { + int8 slot = atoi(sep->arg[1]); + if (slot >= NUM_SLOTS) { + client->SimpleMessage(CHANNEL_COLOR_YELLOW, "Invalid slot"); + return; + } + + if (!client->GetPlayer()->GetTarget() || !client->GetPlayer()->GetTarget()->IsBot()) { + client->SimpleMessage(CHANNEL_COLOR_YELLOW, "You must target a bot."); + return; + } + + Bot* bot = (Bot*)client->GetPlayer()->GetTarget(); + if (bot->GetOwner() != client->GetPlayer()) { + client->SimpleMessage(CHANNEL_COLOR_YELLOW, "You can only remove items from your own bot."); + return; + } + + + if (client->GetPlayer()->trade) { + Trade* trade = client->GetPlayer()->trade; + if (trade->GetTradee(client->GetPlayer()) != bot) { + client->SimpleMessage(CHANNEL_COLOR_YELLOW, "You are already in a trade."); + return; + } + + bot->AddItemToTrade(slot); + } + else { + if (bot->trade) { + client->SimpleMessage(CHANNEL_COLOR_YELLOW, "Your bot is already trading..."); + return; + } + + Trade* trade = new Trade(client->GetPlayer(), bot); + client->GetPlayer()->trade = trade; + bot->trade = trade; + + bot->AddItemToTrade(slot); + } + } + } + else + Command_Bot(client, sep); + } + else + Command_Bot(client, sep); +} + +void Commands::Command_Bot_Settings(Client* client, Seperator* sep) { + if (sep && sep->IsSet(0) && sep->IsSet(1) && sep->IsNumber(1)) { + if (client->GetPlayer()->GetTarget() && client->GetPlayer()->GetTarget()->IsBot()) { + Bot* bot = (Bot*)client->GetPlayer()->GetTarget(); + if (bot->GetOwner() == client->GetPlayer()) { + if (strncasecmp("helm", sep->arg[0], 4) == 0) { + bot->ShowHelm = (atoi(sep->arg[1]) == 1) ? true : false; + bot->info_changed = true; + bot->changed = true; + bot->GetZone()->SendSpawnChanges(bot); + } + else if (strncasecmp("cloak", sep->arg[0], 5) == 0) { + bot->ShowCloak = (atoi(sep->arg[1]) == 1) ? true : false; + bot->info_changed = true; + bot->changed = true; + bot->GetZone()->SendSpawnChanges(bot); + } + else if (strncasecmp("taunt", sep->arg[0], 5) == 0) { + bot->CanTaunt = (atoi(sep->arg[1]) == 1) ? true : false; + } + else if (strncasecmp("hood", sep->arg[0], 4) == 0) { + bot->SetHideHood((atoi(sep->arg[0]) == 1) ? 0 : 1); + } + else + Command_Bot(client, sep); + } + else + client->SimpleMessage(CHANNEL_COLOR_YELLOW, "You can only change settings on your own bot."); + } + else + client->SimpleMessage(CHANNEL_COLOR_YELLOW, "You must target a bot."); + } + else + Command_Bot(client, sep); +} + +void Commands::Command_Bot_Help(Client* client, Seperator* sep) { + if (sep && sep->IsSet(0)) { + if (strncasecmp("race", sep->arg[0], 4) == 0) { + PacketStruct* packet = configReader.getStruct("WS_EqShowBook", client->GetVersion()); + if (packet) { + packet->setDataByName("spawn_id", client->GetPlayer()->GetIDWithPlayerSpawn(client->GetPlayer())); + + string title = "Race ID's"; + packet->setDataByName("book_title", title.c_str()); + packet->setDataByName("book_type", "simple"); + packet->setDataByName("unknown2", 1); + packet->setDataByName("unknown5", 1, 4); + packet->setArrayLengthByName("num_pages", 1); + + string details; + details += "0\tBarbarian\n"; + details += "1\tDark Elf\n"; + details += "2\tDwarf\n"; + details += "3\tErudite\n"; + details += "4\tFroglok\n"; + details += "5\tGnome\n"; + details += "6\tHalf Elf\n"; + details += "7\tHalfling\n"; + details += "8\tHigh Elf\n"; + details += "9\tHuman\n"; + details += "10\tIksar\n"; + details += "11\tKerra\n"; + details += "12\tOgre\n"; + details += "13\tRatonga\n"; + details += "14\tTroll\n"; + details += "15\tWood Elf\n"; + details += "16\tFae\n"; + details += "17\tArasai\n"; + details += "18\tSarnak\n"; + details += "19\tVampire\n"; + details += "20\tAerakyn\n"; + + packet->setArrayDataByName("page_text", details.c_str()); + + client->QueuePacket(packet->serialize()); + safe_delete(packet); + } + + return; + } + else if (strncasecmp("class", sep->arg[0], 5) == 0) { + PacketStruct* packet = configReader.getStruct("WS_EqShowBook", client->GetVersion()); + if (packet) { + packet->setDataByName("spawn_id", client->GetPlayer()->GetIDWithPlayerSpawn(client->GetPlayer())); + + string title = "Class ID's"; + packet->setDataByName("book_title", title.c_str()); + packet->setDataByName("book_type", "simple"); + packet->setDataByName("unknown2", 1); + packet->setDataByName("unknown5", 1, 4); + packet->setArrayLengthByName("num_pages", 3); + + string details; + details += "0\tCOMMONER\n"; + details += "1\tFIGHTER\n"; + details += "2\tWARRIOR\n"; + details += "3\tGUARDIAN\n"; + details += "4\tBERSERKER\n"; + details += "5\tBRAWLER\n"; + details += "6\tMONK\n"; + details += "7\tBRUISER\n"; + details += "8\tCRUSADER\n"; + details += "9\tSHADOWKNIGHT\n"; + details += "10\tPALADIN\n"; + details += "11\tPRIEST\n"; + details += "12\tCLERIC\n"; + details += "13\tTEMPLAR\n"; + details += "14\tINQUISITOR\n"; + details += "15\tDRUID\n"; + details += "16\tWARDEN\n"; + details += "17\tFURY\n"; + details += "18\tSHAMAN\n"; + details += "19\tMYSTIC\n"; + details += "20\tDEFILER\n"; + + string details2 = "21\tMAGE\n"; + details2 += "22\tSORCERER\n"; + details2 += "23\tWIZARD\n"; + details2 += "24\tWARLOCK\n"; + details2 += "25\tENCHANTER\n"; + details2 += "26\tILLUSIONIST\n"; + details2 += "27\tCOERCER\n"; + details2 += "28\tSUMMONER\n"; + details2 += "29\tCONJUROR\n"; + details2 += "30\tNECROMANCER\n"; + details2 += "31\tSCOUT\n"; + details2 += "32\tROGUE\n"; + details2 += "33\tSWASHBUCKLER\n"; + details2 += "34\tBRIGAND\n"; + details2 += "35\tBARD\n"; + details2 += "36\tTROUBADOR\n"; + details2 += "37\tDIRGE\n"; + details2 += "38\tPREDATOR\n"; + details2 += "39\tRANGER\n"; + details2 += "40\tASSASSIN\n"; + + string details3 = "\\#FF0000Following aren't implemented yet.\\#000000\n"; + details3 += "41\tANIMALIST\n"; + details3 += "42\tBEASTLORD\n"; + details3 += "43\tSHAPER\n"; + details3 += "44\tCHANNELER\n"; + + packet->setArrayDataByName("page_text", details.c_str()); + packet->setArrayDataByName("page_text", details2.c_str(), 1); + packet->setArrayDataByName("page_text", details3.c_str(), 2); + + client->QueuePacket(packet->serialize()); + safe_delete(packet); + } + return; + } + } + else { + client->SimpleMessage(CHANNEL_COLOR_YELLOW, "Bot help is WIP."); + client->SimpleMessage(CHANNEL_COLOR_YELLOW, "/bot help race - race id list"); + client->SimpleMessage(CHANNEL_COLOR_YELLOW, "/bot help class - class id list"); + } +} \ No newline at end of file diff --git a/EQ2/source/WorldServer/Bots/BotDB.cpp b/EQ2/source/WorldServer/Bots/BotDB.cpp new file mode 100644 index 000000000..6aa806723 --- /dev/null +++ b/EQ2/source/WorldServer/Bots/BotDB.cpp @@ -0,0 +1,449 @@ +#include "../WorldDatabase.h" +#include "../../common/Log.h" +#include "Bot.h" +#include "../classes.h" +#include "../races.h" + +extern Classes classes; +extern Races races; + +int32 WorldDatabase::CreateNewBot(int32 char_id, string name, int8 race, int8 advClass, int8 gender, int16 model_id, int32& index) { + DatabaseResult result; + index = 0; + + if (!database_new.Select(&result, "SELECT MAX(`bot_id`) FROM `bots` WHERE `char_id` = %u", char_id)) { + LogWrite(DATABASE__ERROR, 0, "DBNew", "MySQL Error %u: %s", database_new.GetError(), database_new.GetErrorMsg()); + return 0; + } + + if (result.Next()) { + if (result.IsNull(0)) + index = 1; + else + index = result.GetInt32(0) + 1; + } + + if (!database_new.Query("INSERT INTO `bots` (`char_id`, `bot_id`, `name`, `race`, `class`, `gender`, `model_type`) VALUES (%u, %u, \"%s\", %u, %u, %u, %u)", char_id, index, name.c_str(), race, advClass, gender, model_id)) { + LogWrite(DATABASE__ERROR, 0, "DBNew", "MySQL Error %u: %s", database_new.GetError(), database_new.GetErrorMsg()); + return 0; + } + int32 ret = database_new.LastInsertID(); + + LogWrite(PLAYER__DEBUG, 0, "Player", "New bot (%s) created for player (%u)", name.c_str(), char_id); + return ret; +} + +void WorldDatabase::SaveBotAppearance(Bot* bot) { + SaveBotColors(bot->BotID, "skin_color", bot->features.skin_color); + SaveBotColors(bot->BotID, "eye_color", bot->features.eye_color); + SaveBotColors(bot->BotID, "hair_color1", bot->features.hair_color1); + SaveBotColors(bot->BotID, "hair_color2", bot->features.hair_color2); + SaveBotColors(bot->BotID, "hair_highlight", bot->features.hair_highlight_color); + SaveBotColors(bot->BotID, "hair_type_color", bot->features.hair_type_color); + SaveBotColors(bot->BotID, "hair_type_highlight_color", bot->features.hair_type_highlight_color); + SaveBotColors(bot->BotID, "hair_face_color", bot->features.hair_face_color); + SaveBotColors(bot->BotID, "hair_face_highlight_color", bot->features.hair_face_highlight_color); + SaveBotColors(bot->BotID, "wing_color1", bot->features.wing_color1); + SaveBotColors(bot->BotID, "wing_color2", bot->features.wing_color2); + SaveBotColors(bot->BotID, "shirt_color", bot->features.shirt_color); + //SaveBotColors(bot->BotID, "unknown_chest_color", ); + SaveBotColors(bot->BotID, "pants_color", bot->features.pants_color); + //SaveBotColors(bot->BotID, "unknown_legs_color", ); + //SaveBotColors(bot->BotID, "unknown9", ); + SaveBotFloats(bot->BotID, "eye_type", bot->features.eye_type[0], bot->features.eye_type[1], bot->features.eye_type[2]); + SaveBotFloats(bot->BotID, "ear_type", bot->features.ear_type[0], bot->features.ear_type[1], bot->features.ear_type[2]); + SaveBotFloats(bot->BotID, "eye_brow_type", bot->features.eye_brow_type[0], bot->features.eye_brow_type[1], bot->features.eye_brow_type[2]); + SaveBotFloats(bot->BotID, "cheek_type", bot->features.cheek_type[0], bot->features.cheek_type[1], bot->features.cheek_type[2]); + SaveBotFloats(bot->BotID, "lip_type", bot->features.lip_type[0], bot->features.lip_type[1], bot->features.lip_type[2]); + SaveBotFloats(bot->BotID, "chin_type", bot->features.chin_type[0], bot->features.chin_type[1], bot->features.chin_type[2]); + SaveBotFloats(bot->BotID, "nose_type", bot->features.nose_type[0], bot->features.nose_type[1], bot->features.nose_type[2]); + + SaveBotFloats(bot->BotID, "body_size", bot->features.body_size, 0, 0); + SaveBotFloats(bot->BotID, "body_age", bot->features.body_age, 0, 0); + + SaveBotColors(bot->BotID, "soga_skin_color", bot->features.soga_skin_color); + SaveBotColors(bot->BotID, "soga_eye_color", bot->features.soga_eye_color); + SaveBotColors(bot->BotID, "soga_hair_color1", bot->features.soga_hair_color1); + SaveBotColors(bot->BotID, "soga_hair_color2", bot->features.soga_hair_color2); + SaveBotColors(bot->BotID, "soga_hair_highlight", bot->features.soga_hair_highlight_color); + SaveBotColors(bot->BotID, "soga_hair_type_color", bot->features.soga_hair_type_color); + SaveBotColors(bot->BotID, "soga_hair_type_highlight_color", bot->features.soga_hair_type_highlight_color); + SaveBotColors(bot->BotID, "soga_hair_face_color", bot->features.soga_hair_face_color); + SaveBotColors(bot->BotID, "soga_hair_face_highlight_color", bot->features.soga_hair_face_highlight_color); + SaveBotColors(bot->BotID, "soga_wing_color1", bot->features.wing_color1); + SaveBotColors(bot->BotID, "soga_wing_color2", bot->features.wing_color2); + SaveBotColors(bot->BotID, "soga_shirt_color", bot->features.shirt_color); + //SaveBotColors(bot->BotID, "soga_unknown_chest_color", ); + SaveBotColors(bot->BotID, "soga_pants_color", bot->features.pants_color); + //SaveBotColors(bot->BotID, "soga_unknown_legs_color", ); + //SaveBotColors(bot->BotID, "soga_unknown13", ); + SaveBotFloats(bot->BotID, "soga_eye_type", bot->features.soga_eye_type[0], bot->features.soga_eye_type[1], bot->features.soga_eye_type[2]); + SaveBotFloats(bot->BotID, "soga_ear_type", bot->features.soga_ear_type[0], bot->features.soga_ear_type[1], bot->features.soga_ear_type[2]); + SaveBotFloats(bot->BotID, "soga_eye_brow_type", bot->features.soga_eye_brow_type[0], bot->features.soga_eye_brow_type[1], bot->features.soga_eye_brow_type[2]); + SaveBotFloats(bot->BotID, "soga_cheek_type", bot->features.soga_cheek_type[0], bot->features.soga_cheek_type[1], bot->features.soga_cheek_type[2]); + SaveBotFloats(bot->BotID, "soga_lip_type", bot->features.soga_lip_type[0], bot->features.soga_lip_type[1], bot->features.soga_lip_type[2]); + SaveBotFloats(bot->BotID, "soga_chin_type", bot->features.soga_chin_type[0], bot->features.soga_chin_type[1], bot->features.soga_chin_type[2]); + SaveBotFloats(bot->BotID, "soga_nose_type", bot->features.soga_nose_type[0], bot->features.soga_nose_type[1], bot->features.soga_nose_type[2]); + + if (!database_new.Query("UPDATE `bots` SET `model_type` = %u, `hair_type` = %u, `face_type` = %u, `wing_type` = %u, `chest_type` = %u, `legs_type` = %u, `soga_model_type` = %u, `soga_hair_type` = %u, `soga_face_type` = %u WHERE `id` = %u", + bot->GetModelType(), bot->GetHairType(), bot->GetFacialHairType(), bot->GetWingType(), bot->GetChestType(), bot->GetLegsType(), bot->GetSogaModelType(), bot->GetSogaHairType(), bot->GetSogaFacialHairType(), bot->BotID)) { + LogWrite(DATABASE__ERROR, 0, "DBNew", "MySQL Error %u: %s", database_new.GetError(), database_new.GetErrorMsg()); + return; + } +} + +void WorldDatabase::SaveBotColors(int32 bot_id, const char* type, EQ2_Color color) { + if (!database_new.Query("INSERT INTO `bot_appearance` (`bot_id`, `type`, `red`, `green`, `blue`) VALUES (%i, '%s', %i, %i, %i) ON DUPLICATE KEY UPDATE `red` = %i, `blue` = %i, `green` = %i", bot_id, type, color.red, color.green, color.blue, color.red, color.blue, color.green)) { + LogWrite(DATABASE__ERROR, 0, "DBNew", "MySQL Error %u: %s", database_new.GetError(), database_new.GetErrorMsg()); + return; + } +} + +void WorldDatabase::SaveBotFloats(int32 bot_id, const char* type, float float1, float float2, float float3) { + if (!database_new.Query("INSERT INTO `bot_appearance` (`bot_id`, `type`, `red`, `green`, `blue`, `signed_value`) VALUES (%i, '%s', %i, %i, %i, 1) ON DUPLICATE KEY UPDATE `red` = %i, `blue` = %i, `green` = %i", bot_id, type, float1, float2, float3, float1, float2, float3)) { + LogWrite(DATABASE__ERROR, 0, "DBNew", "MySQL Error %u: %s", database_new.GetError(), database_new.GetErrorMsg()); + return; + } +} + +bool WorldDatabase::LoadBot(int32 char_id, int32 bot_index, Bot* bot) { + DatabaseResult result; + + if (!database_new.Select(&result, "SELECT * FROM bots WHERE `char_id` = %u AND `bot_id` = %u", char_id, bot_index)) { + LogWrite(DATABASE__ERROR, 0, "DBNew", "MySQL Error %u: %s", database_new.GetError(), database_new.GetErrorMsg()); + return false; + } + + if (result.Next()) { + bot->BotID = result.GetInt32(0); + bot->BotIndex = result.GetInt32(2); + bot->SetName(result.GetString(3)); + bot->SetRace(result.GetInt8(4)); + bot->SetAdventureClass(result.GetInt8(5)); + bot->SetGender(result.GetInt8(6)); + bot->SetModelType(result.GetInt16(7)); + bot->SetHairType(result.GetInt16(8)); + bot->SetFacialHairType(result.GetInt16(9)); + bot->SetWingType(result.GetInt16(10)); + bot->SetChestType(result.GetInt16(11)); + bot->SetLegsType(result.GetInt16(12)); + bot->SetSogaModelType(result.GetInt16(13)); + bot->SetSogaHairType(result.GetInt16(14)); + bot->SetSogaFacialHairType(result.GetInt16(15)); + } + else + return false; + + LoadBotAppearance(bot); + LoadBotEquipment(bot); + return true; +} + +void WorldDatabase::LoadBotAppearance(Bot* bot) { + DatabaseResult result; + string type; + map appearance_types; + EQ2_Color color; + color.red = 0; + color.green = 0; + color.blue = 0; + + if (!database_new.Select(&result, "SELECT distinct `type` FROM bot_appearance WHERE length(`type`) > 0 AND `bot_id` = %u", bot->BotID)) { + LogWrite(DATABASE__ERROR, 0, "DBNew", "MySQL Error %u: %s", database_new.GetError(), database_new.GetErrorMsg()); + return; + } + + while (result.Next()) { + type = result.GetString(0); + appearance_types[type] = GetAppearanceType(type); + if (appearance_types[type] == 255) + LogWrite(WORLD__ERROR, 0, "Appearance", "Unknown appearance type '%s' in LoadBotAppearances.", type.c_str()); + } + + if (!database_new.Select(&result, "SELECT `type`, `signed_value`, `red`, `green`, `blue` FROM bot_appearance WHERE length(`type`) > 0 AND bot_id = %u", bot->BotID)) { + LogWrite(DATABASE__ERROR, 0, "DBNew", "MySQL Error %u: %s", database_new.GetError(), database_new.GetErrorMsg()); + return; + } + + while (result.Next()) { + type = result.GetString(0); + if (appearance_types[type] < APPEARANCE_SOGA_EBT) { + color.red = result.GetInt8(2); + color.green = result.GetInt8(3); + color.blue = result.GetInt8(4); + } + switch (appearance_types[type]) { + case APPEARANCE_SOGA_HFHC: { + bot->features.soga_hair_face_highlight_color = color; + break; + } + case APPEARANCE_SOGA_HTHC: { + bot->features.soga_hair_type_highlight_color = color; + break; + } + case APPEARANCE_SOGA_HFC: { + bot->features.soga_hair_face_color = color; + break; + } + case APPEARANCE_SOGA_HTC: { + bot->features.soga_hair_type_color = color; + break; + } + case APPEARANCE_SOGA_HH: { + bot->features.soga_hair_highlight_color = color; + break; + } + case APPEARANCE_SOGA_HC1: { + bot->features.soga_hair_color1 = color; + break; + } + case APPEARANCE_SOGA_HC2: { + bot->features.soga_hair_color2 = color; + break; + } + case APPEARANCE_SOGA_SC: { + bot->features.soga_skin_color = color; + break; + } + case APPEARANCE_SOGA_EC: { + bot->features.soga_eye_color = color; + break; + } + case APPEARANCE_HTHC: { + bot->features.hair_type_highlight_color = color; + break; + } + case APPEARANCE_HFHC: { + bot->features.hair_face_highlight_color = color; + break; + } + case APPEARANCE_HTC: { + bot->features.hair_type_color = color; + break; + } + case APPEARANCE_HFC: { + bot->features.hair_face_color = color; + break; + } + case APPEARANCE_HH: { + bot->features.hair_highlight_color = color; + break; + } + case APPEARANCE_HC1: { + bot->features.hair_color1 = color; + break; + } + case APPEARANCE_HC2: { + bot->features.hair_color2 = color; + break; + } + case APPEARANCE_WC1: { + bot->features.wing_color1 = color; + break; + } + case APPEARANCE_WC2: { + bot->features.wing_color2 = color; + break; + } + case APPEARANCE_SC: { + bot->features.skin_color = color; + break; + } + case APPEARANCE_EC: { + bot->features.eye_color = color; + break; + } + case APPEARANCE_SOGA_EBT: { + for (int i = 0; i < 3; i++) + bot->features.soga_eye_brow_type[i] = result.GetSInt8(2 + i); + break; + } + case APPEARANCE_SOGA_CHEEKT: { + for (int i = 0; i < 3; i++) + bot->features.soga_cheek_type[i] = result.GetSInt8(2 + i); + break; + } + case APPEARANCE_SOGA_NT: { + for (int i = 0; i < 3; i++) + bot->features.soga_nose_type[i] = result.GetSInt8(2 + i); + break; + } + case APPEARANCE_SOGA_CHINT: { + for (int i = 0; i < 3; i++) + bot->features.soga_chin_type[i] = result.GetSInt8(2 + i); + break; + } + case APPEARANCE_SOGA_LT: { + for (int i = 0; i < 3; i++) + bot->features.soga_lip_type[i] = result.GetSInt8(2 + i); + break; + } + case APPEARANCE_SOGA_EART: { + for (int i = 0; i < 3; i++) + bot->features.soga_ear_type[i] = result.GetSInt8(2 + i); + break; + } + case APPEARANCE_SOGA_EYET: { + for (int i = 0; i < 3; i++) + bot->features.soga_eye_type[i] = result.GetSInt8(2 + i); + break; + } + case APPEARANCE_EBT: { + for (int i = 0; i < 3; i++) + bot->features.eye_brow_type[i] = result.GetSInt8(2 + i); + break; + } + case APPEARANCE_CHEEKT: { + for (int i = 0; i < 3; i++) + bot->features.cheek_type[i] = result.GetSInt8(2 + i); + break; + } + case APPEARANCE_NT: { + for (int i = 0; i < 3; i++) + bot->features.nose_type[i] = result.GetSInt8(2 + i); + break; + } + case APPEARANCE_CHINT: { + for (int i = 0; i < 3; i++) + bot->features.chin_type[i] = result.GetSInt8(2 + i); + break; + } + case APPEARANCE_EART: { + for (int i = 0; i < 3; i++) + bot->features.ear_type[i] = result.GetSInt8(2 + i); + break; + } + case APPEARANCE_EYET: { + for (int i = 0; i < 3; i++) + bot->features.eye_type[i] = result.GetSInt8(2 + i); + break; + } + case APPEARANCE_LT: { + for (int i = 0; i < 3; i++) + bot->features.lip_type[i] = result.GetSInt8(2 + i); + break; + } + case APPEARANCE_SHIRT: { + bot->features.shirt_color = color; + break; + } + case APPEARANCE_UCC: { + break; + } + case APPEARANCE_PANTS: { + bot->features.pants_color = color; + break; + } + case APPEARANCE_ULC: { + break; + } + case APPEARANCE_U9: { + break; + } + case APPEARANCE_BODY_SIZE: { + bot->features.body_size = color.red; + break; + } + case APPEARANCE_SOGA_WC1: { + break; + } + case APPEARANCE_SOGA_WC2: { + break; + } + case APPEARANCE_SOGA_SHIRT: { + break; + } + case APPEARANCE_SOGA_UCC: { + break; + } + case APPEARANCE_SOGA_PANTS: { + break; + } + case APPEARANCE_SOGA_ULC: { + break; + } + case APPEARANCE_SOGA_U13: { + break; + } + case APPEARANCE_BODY_AGE: { + bot->features.body_age = color.red; + break; + } + } + } +} + +void WorldDatabase::SaveBotItem(int32 bot_id, int32 item_id, int8 slot) { + if (!database_new.Query("INSERT INTO `bot_equipment` (`bot_id`, `slot`, `item_id`) VALUES (%u, %u, %u) ON DUPLICATE KEY UPDATE `item_id` = %u", bot_id, slot, item_id, item_id)) { + LogWrite(DATABASE__ERROR, 0, "DBNew", "MySQL Error %u: %s", database_new.GetError(), database_new.GetErrorMsg()); + return; + } +} + +void WorldDatabase::LoadBotEquipment(Bot* bot) { + DatabaseResult result; + + if (!database_new.Select(&result, "SELECT `slot`, `item_id` FROM `bot_equipment` WHERE `bot_id` = %u", bot->BotID)) { + LogWrite(DATABASE__ERROR, 0, "DBNew", "MySQL Error %u: %s", database_new.GetError(), database_new.GetErrorMsg()); + return; + } + + Item* master_item = 0; + Item* item = 0; + + while (result.Next()) { + int8 slot = result.GetInt8(0); + int32 item_id = result.GetInt32(1); + + master_item = master_item_list.GetItem(item_id); + if (master_item) { + item = new Item(master_item); + if (item) { + bot->GetEquipmentList()->AddItem(slot, item); + bot->SetEquipment(item, slot); + } + } + } +} + +string WorldDatabase::GetBotList(int32 char_id) { + DatabaseResult result; + string ret; + + if (!database_new.Select(&result, "SELECT `bot_id`, `name`, `race`, `class` FROM `bots` WHERE `char_id` = %u", char_id)) { + LogWrite(DATABASE__ERROR, 0, "DBNew", "MySQL Error %u: %s", database_new.GetError(), database_new.GetErrorMsg()); + return ret; + } + + while (result.Next()) { + ret += to_string(result.GetInt32(0)) + ": "; + ret += result.GetString(1); + ret += " the "; + ret += races.GetRaceNameCase(result.GetInt8(2)); + ret += " "; + ret += classes.GetClassNameCase(result.GetInt8(3)) + "\n"; + } + + return ret; +} + +void WorldDatabase::DeleteBot(int32 char_id, int32 bot_index) { + if (!database_new.Query("DELETE FROM `bots` WHERE `char_id` = %u AND `bot_id` = %u", char_id, bot_index)) { + LogWrite(DATABASE__ERROR, 0, "DBNew", "MySQL Error %u: %s", database_new.GetError(), database_new.GetErrorMsg()); + } +} + +void WorldDatabase::SetBotStartingItems(Bot* bot, int8 class_id, int8 race_id) { + int32 bot_id = bot->BotID; + LogWrite(PLAYER__DEBUG, 0, "Bot", "Adding default items for race: %u, class: %u for bot_id: %u", race_id, class_id, bot_id); + + DatabaseResult result; + if (!database_new.Select(&result, "SELECT item_id FROM starting_items WHERE class_id IN (%i, %i, %i, 255) AND race_id IN (%i, 255) ORDER BY id", classes.GetBaseClass(class_id), classes.GetSecondaryBaseClass(class_id), class_id, race_id)) { + LogWrite(DATABASE__ERROR, 0, "DBNew", "MySQL Error %u: %s", database_new.GetError(), database_new.GetErrorMsg()); + return; + } + + while (result.Next()) { + bot->GiveItem(result.GetInt32(0)); + } +} \ No newline at end of file diff --git a/EQ2/source/WorldServer/Chat/Chat.cpp b/EQ2/source/WorldServer/Chat/Chat.cpp new file mode 100644 index 000000000..6ad1945d3 --- /dev/null +++ b/EQ2/source/WorldServer/Chat/Chat.cpp @@ -0,0 +1,335 @@ +/* + EQ2Emulator: Everquest II Server Emulator + Copyright (C) 2007 EQ2EMulator Development Team (http://www.eq2emulator.net) + + This file is part of EQ2Emulator. + + EQ2Emulator is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + EQ2Emulator is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with EQ2Emulator. If not, see . +*/ + +#include "Chat.h" +#include "../../common/Log.h" +#include "../../common/ConfigReader.h" +#include "../../common/PacketStruct.h" +#include "../IRC/IRC.h" + +extern ConfigReader configReader; +extern IRC irc; + +Chat::Chat() { + m_channels.SetName("Chat::Channels"); +} + +Chat::~Chat() { + vector::iterator itr; + + m_channels.writelock(__FUNCTION__, __LINE__); + for (itr = channels.begin(); itr != channels.end(); itr++) + safe_delete(*itr); + m_channels.releasewritelock(__FUNCTION__, __LINE__); +} + +void Chat::AddChannel(ChatChannel *channel) { + m_channels.writelock(__FUNCTION__, __LINE__); + channels.push_back(channel); + m_channels.releasewritelock(__FUNCTION__, __LINE__); +} + +unsigned int Chat::GetNumChannels() { + unsigned int ret; + + m_channels.readlock(__FUNCTION__, __LINE__); + ret = (unsigned int)channels.size(); + m_channels.releasereadlock(__FUNCTION__, __LINE__); + + return ret; +} + +EQ2Packet * Chat::GetWorldChannelList(Client *client) { + PacketStruct *packet_struct = configReader.getStruct("WS_AvailWorldChannels", client->GetVersion()); + Player *player = client->GetPlayer(); + vector channels_to_send; + vector::iterator itr; + ChatChannel *channel; + EQ2Packet *packet; + int32 i = 0; + bool add; + + if (packet_struct == NULL) { + LogWrite(CHAT__ERROR, 0, "Chat", "Could not find packet 'WS_AvailWorldChannels' for client %s on version %i\n", player->GetName(), client->GetVersion()); + return NULL; + } + + m_channels.readlock(__FUNCTION__, __LINE__); + for (itr = channels.begin(); itr != channels.end(); itr++) { + channel = *itr; + + if (channel->GetType() == CHAT_CHANNEL_TYPE_WORLD) { + add = true; + + if (add && !channel->CanJoinChannelByLevel(player->GetLevel())) + add = false; + if (add && !channel->CanJoinChannelByRace(player->GetRace())) + add = false; + if (add && !channel->CanJoinChannelByClass(player->GetAdventureClass())) + add = false; + + if (add) + channels_to_send.push_back(channel); + } + } + m_channels.releasereadlock(__FUNCTION__, __LINE__); + + packet_struct->setArrayLengthByName("num_channels", channels_to_send.size()); + for (itr = channels_to_send.begin(); itr != channels_to_send.end(); itr++, i++) { + packet_struct->setArrayDataByName("channel_name", (*itr)->GetName(), i); + packet_struct->setArrayDataByName("unknown", 0, i); + } + + packet = packet_struct->serialize(); + safe_delete(packet_struct); + + return packet; +} + +bool Chat::ChannelExists(const char *channel_name) { + vector::iterator itr; + bool ret = false; + + m_channels.readlock(__FUNCTION__, __LINE__); + for (itr = channels.begin(); itr != channels.end(); itr++) { + if (strncasecmp(channel_name, (*itr)->GetName(), CHAT_CHANNEL_MAX_NAME) == 0) { + ret = true; + break; + } + } + m_channels.releasereadlock(__FUNCTION__, __LINE__); + + return ret; +} + +bool Chat::HasPassword(const char *channel_name) { + vector::iterator itr; + bool ret = false; + + m_channels.readlock(__FUNCTION__, __LINE__); + for (itr = channels.begin(); itr != channels.end(); itr++) { + if (strncasecmp(channel_name, (*itr)->GetName(), CHAT_CHANNEL_MAX_NAME) == 0) { + ret = (*itr)->HasPassword(); + break; + } + } + m_channels.releasereadlock(__FUNCTION__, __LINE__); + + return ret; +} + +bool Chat::PasswordMatches(const char *channel_name, const char *password) { + vector::iterator itr; + bool ret = false; + + m_channels.readlock(__FUNCTION__, __LINE__); + for (itr = channels.begin(); itr != channels.end(); itr++) { + if (strncasecmp(channel_name, (*itr)->GetName(), CHAT_CHANNEL_MAX_NAME) == 0) { + ret = (*itr)->PasswordMatches(password); + break; + } + } + m_channels.releasereadlock(__FUNCTION__, __LINE__); + + return ret; +} + +bool Chat::CreateChannel(const char *channel_name) { + return CreateChannel(channel_name, NULL); +} + +bool Chat::CreateChannel(const char *channel_name, const char *password) { + LogWrite(CHAT__DEBUG, 0, "Chat", "Channel %s being created", channel_name); + + ChatChannel *channel = new ChatChannel(); + channel->SetName(channel_name); + channel->SetType(CHAT_CHANNEL_TYPE_CUSTOM); + if (password != NULL) + channel->SetPassword(password); + + m_channels.writelock(__FUNCTION__, __LINE__); + channels.push_back(channel); + m_channels.releasewritelock(__FUNCTION__, __LINE__); + + return true; +} + +bool Chat::IsInChannel(Client *client, const char *channel_name) { + vector::iterator itr; + bool ret = false; + + m_channels.readlock(__FUNCTION__, __LINE__); + for (itr = channels.begin(); itr != channels.end(); itr++) { + if (strncasecmp(channel_name, (*itr)->GetName(), CHAT_CHANNEL_MAX_NAME) == 0) { + ret = (*itr)->IsInChannel(client->GetCharacterID()); + break; + } + } + m_channels.releasereadlock(__FUNCTION__, __LINE__); + + return ret; +} + +bool Chat::JoinChannel(Client *client, const char *channel_name) { + vector::iterator itr; + bool ret = false; + + LogWrite(CHAT__DEBUG, 1, "Chat", "Client %s is joining channel %s", client->GetPlayer()->GetName(), channel_name); + + m_channels.writelock(__FUNCTION__, __LINE__); + for (itr = channels.begin(); itr != channels.end(); itr++) { + if (strncasecmp(channel_name, (*itr)->GetName(), CHAT_CHANNEL_MAX_NAME) == 0) { + ret = (*itr)->JoinChannel(client); + break; + } + } + m_channels.releasewritelock(__FUNCTION__, __LINE__); + + return ret; +} + +bool Chat::LeaveChannel(Client *client, const char *channel_name) { + vector::iterator itr; + bool ret = false; + + LogWrite(CHAT__DEBUG, 1, "Chat", "Client %s is leaving channel %s", client->GetPlayer()->GetName(), channel_name); + + m_channels.writelock(__FUNCTION__, __LINE__); + for (itr = channels.begin(); itr != channels.end(); itr++) { + if (strncasecmp(channel_name, (*itr)->GetName(), CHAT_CHANNEL_MAX_NAME) == 0) { + ret = (*itr)->LeaveChannel(client); + + if ((*itr)->GetType() == CHAT_CHANNEL_TYPE_CUSTOM && (*itr)->GetNumClients() == 0) { + LogWrite(CHAT__DEBUG, 0, "Chat", "Custom channel %s has 0 clients left, deleting channel", channel_name); + safe_delete(*itr); + channels.erase(itr); + } + + break; + } + } + m_channels.releasewritelock(__FUNCTION__, __LINE__); + + return ret; +} + +bool Chat::LeaveAllChannels(Client *client) { + vector::iterator itr; + ChatChannel *channel; + bool erased; + + m_channels.writelock(__FUNCTION__, __LINE__); + itr = channels.begin(); + while (itr != channels.end()) { + channel = *itr; + erased = false; + + if (channel->IsInChannel(client->GetCharacterID())) { + LogWrite(CHAT__DEBUG, 1, "Chat", "Client %s is leaving channel %s", client->GetPlayer()->GetName(), channel->GetName()); + channel->LeaveChannel(client); + + if (channel->GetType() == CHAT_CHANNEL_TYPE_CUSTOM && channel->GetNumClients() == 0) { + LogWrite(CHAT__DEBUG, 0, "Chat", "Custom channel %s has 0 clients left, deleting channel", channel->GetName()); + safe_delete(*itr); + itr = channels.erase(itr); + erased = true; + } + } + + if (!erased) + itr++; + } + m_channels.releasewritelock(__FUNCTION__, __LINE__); + + return true; +} + +bool Chat::TellChannel(Client *client, const char *channel_name, const char *message, const char* name) { + vector::iterator itr; + bool ret = false; + + m_channels.readlock(__FUNCTION__, __LINE__); + for (itr = channels.begin(); itr != channels.end(); itr++) { + if (strncasecmp(channel_name, (*itr)->GetName(), CHAT_CHANNEL_MAX_NAME) == 0) { + if (client && name) + ret = (*itr)->TellChannelClient(client, message, name); + else + ret = (*itr)->TellChannel(client, message, name); + + // if client = null then it came from irc, don't send it back to irc + if (client) { + IRCServer* server = 0; + bool global = false; + string msg; + const char* safe_name = irc.GetSafeChannelName(channel_name); + + // If global irc channel add "PlayerName says: " to the begining of the message + if ((*itr)->IsGlobalIRCChannel()) { + server = irc.GetGlobalServer(); + msg = string(client->GetPlayer()->GetName()) + string(" says: ") + string(message); + global = true; + } + else + server = irc.GetServer(client); + + // if global channel don't send a client and send the modified message + if (server && server->GetChannel(safe_name)) + irc.Say(global ? 0 : client, channel_name, global ? msg.c_str() : message); + } + + break; + } + } + m_channels.releasereadlock(__FUNCTION__, __LINE__); + + return ret; +} + +bool Chat::SendChannelUserList(Client *client, const char *channel_name) { + vector::iterator itr; + bool ret = false; + + m_channels.readlock(__FUNCTION__, __LINE__); + for (itr = channels.begin(); itr != channels.end(); itr++) { + if (strncasecmp(channel_name, (*itr)->GetName(), CHAT_CHANNEL_MAX_NAME) == 0) { + ret = (*itr)->SendChannelUserList(client); + break; + } + } + m_channels.releasereadlock(__FUNCTION__, __LINE__); + + return ret; +} + +ChatChannel* Chat::GetChannel(const char *channel_name) { + vector::iterator itr; + ChatChannel* ret = 0; + + m_channels.readlock(__FUNCTION__, __LINE__); + for (itr = channels.begin(); itr != channels.end(); itr++) { + if (strncasecmp(channel_name, (*itr)->GetName(), CHAT_CHANNEL_MAX_NAME) == 0) { + ret = (*itr); + break; + } + } + m_channels.releasereadlock(__FUNCTION__, __LINE__); + + return ret; +} diff --git a/EQ2/source/WorldServer/Chat/Chat.h b/EQ2/source/WorldServer/Chat/Chat.h new file mode 100644 index 000000000..ccdb54a17 --- /dev/null +++ b/EQ2/source/WorldServer/Chat/Chat.h @@ -0,0 +1,110 @@ +/* + EQ2Emulator: Everquest II Server Emulator + Copyright (C) 2007 EQ2EMulator Development Team (http://www.eq2emulator.net) + + This file is part of EQ2Emulator. + + EQ2Emulator is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + EQ2Emulator is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with EQ2Emulator. If not, see . +*/ +#ifndef CHAT_CHAT_H_ +#define CHAT_CHAT_H_ + +#include +#include "../../common/types.h" +#include "../../common/EQPacket.h" +#include "../../common/Mutex.h" +#include "../client.h" +#include "ChatChannel.h" + +using namespace std; +/* + +CREATING A CHANNEL + +-- OP_RemoteCmdMsg -- +3/14/2012 20:17:06 +192.168.1.198 -> 69.174.200.73 +0000: 00 09 05 9A 2A 0E 00 0F 00 63 75 73 74 6F 6D 20 ....*....custom +0010 70 61 73 73 77 6F 72 64 password + + +TALKING IN A CHANNEL + +[11:52.23] <@Xinux> -- OP_RemoteCmdMsg -- +[11:52.23] <@Xinux> 3/14/2012 20:17:25 +[11:52.23] <@Xinux> 192.168.1.198 -> 69.174.200.73 +[11:52.23] <@Xinux> 0000: 00 09 06 2D 2A 11 00 21 00 63 75 73 74 6F 6D 20 ...-*..!.custom +[11:52.23] <@Xinux> 0010: 20 74 68 69 73 20 69 73 20 6D 79 20 63 75 73 74 this is my cust +[11:52.23] <@Xinux> 0020 6F 6D 20 63 68 61 6E 6E 65 6C om channel + + +[08:37.46] <@Xinux_Work> 00 09 05 8B 00 3A 53 00 00 00 FF 3C 02 00 00 FF .....:S....<.... +[08:37.46] <@Xinux_Work> FF FF FF FF FF FF FF 06 00 4C 65 69 68 69 61 07 .........Leihia. +[08:37.46] <@Xinux_Work> 00 4B 6F 65 63 68 6F 68 00 02 00 00 00 00 01 00 .Koechoh........ +[08:37.46] <@Xinux_Work> 00 00 22 00 18 00 62 65 74 74 65 72 20 74 68 61 .."...better tha +[08:37.46] <@Xinux_Work> 6E 20 61 20 72 65 64 20 6F 6E 65 20 3A 50 09 00 n a red one :P.. +[08:37.46] <@Xinux_Work> 4C 65 76 65 6C 5F 31 2D 39 01 01 00 00 Level_1-9.... + +OTHERS LEAVING AND JOINING A CHANNEL + +-- OP_ClientCmdMsg::OP_EqChatChannelUpdateCmd -- +3/14/2012 20:17:06 +69.174.200.73 -> 192.168.1.198 +0000: 00 3A 18 00 00 00 FF 88 02 03 09 00 4C 65 76 65 .:..........Leve +0010 6C 5F 31 2D 39 07 00 53 68 61 77 6E 61 68 l_1-9..Shawnah + + +-- OP_ClientCmdMsg::OP_EqChatChannelUpdateCmd -- +3/14/2012 20:17:06 +69.174.200.73 -> 192.168.1.198 +0000: 00 3A 16 00 00 00 FF 88 02 03 07 00 41 75 63 74 .:..........Auct +0010 69 6F 6E 07 00 53 68 61 77 6E 61 68 ion..Shawnah + +OP_EqChatChannelUpdateCmd +unknown=0 unknown1=blank join +unknown=1 unknown1=blank leave +unknown=2 unknown2=player join/leave? +unknown=3 unknown2=player join/leave? +*/ + + +class Chat{ +public: + Chat(); + virtual ~Chat(); + + void AddChannel(ChatChannel *channel); + unsigned int GetNumChannels(); + + EQ2Packet * GetWorldChannelList(Client *client); + + bool ChannelExists(const char *channel_name); + bool HasPassword(const char *channel_name); + bool PasswordMatches(const char *channel_name, const char *password); + bool CreateChannel(const char *channel_name); + bool CreateChannel(const char *channel_name, const char *password); + bool IsInChannel(Client *client, const char *channel_name); + bool JoinChannel(Client *client, const char *channel_name); + bool LeaveChannel(Client *client, const char *channel_name); + bool LeaveAllChannels(Client *client); + bool TellChannel(Client *client, const char *channel_name, const char *message, const char* name = 0); + bool SendChannelUserList(Client *client, const char *channel_name); + ChatChannel* GetChannel(const char* channel_name); + +private: + Mutex m_channels; + vector channels; +}; + +#endif diff --git a/EQ2/source/WorldServer/Chat/ChatChannel.cpp b/EQ2/source/WorldServer/Chat/ChatChannel.cpp new file mode 100644 index 000000000..75adbb43b --- /dev/null +++ b/EQ2/source/WorldServer/Chat/ChatChannel.cpp @@ -0,0 +1,209 @@ +#include +#include "../../common/Log.h" +#include "../../common/ConfigReader.h" +#include "../../common/PacketStruct.h" +#include "../World.h" +#include "ChatChannel.h" + +extern ConfigReader configReader; +extern ZoneList zone_list; + +#define CHAT_CHANNEL_JOIN 0 +#define CHAT_CHANNEL_LEAVE 1 +#define CHAT_CHANNEL_OTHER_JOIN 2 +#define CHAT_CHANNEL_OTHER_LEAVE 3 + +ChatChannel::ChatChannel() { + memset(name, 0, sizeof(name)); + memset(password, 0, sizeof(password)); + type = CHAT_CHANNEL_TYPE_NONE; + level_restriction = 0; + races = 0; + classes = 0; + m_globalIRCChannel = false; +} + +ChatChannel::~ChatChannel() { +} + +bool ChatChannel::IsInChannel(int32 character_id) { + vector::iterator itr; + + for (itr = clients.begin(); itr != clients.end(); itr++) { + if (character_id == *itr) + return true; + } + + return false; +} + +bool ChatChannel::JoinChannel(Client *client) { + PacketStruct *packet_struct; + vector::iterator itr; + Client *to_client; + + //send the player join packet to the joining client + if ((packet_struct = configReader.getStruct("WS_ChatChannelUpdate", client->GetVersion())) == NULL) { + LogWrite(CHAT__ERROR, 0, "Chat", "Could not find packet 'WS_ChatChannelUpdate' when client %s was trying to join channel %s", client->GetPlayer()->GetName(), name); + return false; + } + + packet_struct->setDataByName("action", CHAT_CHANNEL_JOIN); + packet_struct->setDataByName("channel_name", name); + client->QueuePacket(packet_struct->serialize()); + safe_delete(packet_struct); + clients.push_back(client->GetCharacterID()); + + //loop through everyone else in the channel and send the "other" player join packet + for (itr = clients.begin(); itr != clients.end(); itr++) { + if (client->GetCharacterID() == *itr) + continue; + + if ((to_client = zone_list.GetClientByCharID(*itr)) == NULL) + continue; + + if ((packet_struct = configReader.getStruct("WS_ChatChannelUpdate", to_client->GetVersion())) == NULL) + continue; + + packet_struct->setDataByName("action", CHAT_CHANNEL_OTHER_JOIN); + packet_struct->setDataByName("channel_name", name); + packet_struct->setDataByName("player_name", client->GetPlayer()->GetName()); + to_client->QueuePacket(packet_struct->serialize()); + safe_delete(packet_struct); + } + + return true; +} + +bool ChatChannel::LeaveChannel(Client *client) { + vector::iterator itr; + PacketStruct *packet_struct; + Client *to_client; + bool ret = false; + + for (itr = clients.begin(); itr != clients.end(); itr++) { + if (client->GetCharacterID() == *itr) { + clients.erase(itr); + ret = true; + break; + } + } + + if (ret) { + //send the packet to the leaving client + if ((packet_struct = configReader.getStruct("WS_ChatChannelUpdate", client->GetVersion())) == NULL) + return false; + + packet_struct->setDataByName("action", CHAT_CHANNEL_LEAVE); + packet_struct->setDataByName("channel_name", name); + + client->QueuePacket(packet_struct->serialize()); + safe_delete(packet_struct); + + //send the leave packet to all other clients in the channel + for (itr = clients.begin(); itr != clients.end(); itr++) { + if ((to_client = zone_list.GetClientByCharID(*itr)) == NULL) + continue; + + if ((packet_struct = configReader.getStruct("WS_ChatChannelUpdate", to_client->GetVersion())) == NULL) + continue; + + packet_struct->setDataByName("action", CHAT_CHANNEL_OTHER_LEAVE); + packet_struct->setDataByName("channel_name", name); + packet_struct->setDataByName("player_name", client->GetPlayer()->GetName()); + to_client->QueuePacket(packet_struct->serialize()); + safe_delete(packet_struct); + } + } + + return ret; +} + +bool ChatChannel::TellChannel(Client *client, const char *message, const char* name2) { + vector::iterator itr; + PacketStruct *packet_struct; + Client *to_client; + + for (itr = clients.begin(); itr != clients.end(); itr++) { + if ((to_client = zone_list.GetClientByCharID(*itr)) == NULL) + continue; + if ((packet_struct = configReader.getStruct("WS_HearChat", to_client->GetVersion())) == NULL) + continue; + + packet_struct->setDataByName("unknown", 0); + packet_struct->setDataByName("from_spawn_id", 0xFFFFFFFF); + packet_struct->setDataByName("to_spawn_id", 0xFFFFFFFF); + + if (client) + packet_struct->setDataByName("from", client->GetPlayer()->GetName()); + else + packet_struct->setDataByName("from", name2); + + packet_struct->setDataByName("to", to_client->GetPlayer()->GetName()); + packet_struct->setDataByName("channel", 34); + packet_struct->setDataByName("language", 0); + packet_struct->setDataByName("message", message); + packet_struct->setDataByName("channel_name", name); + packet_struct->setDataByName("show_bubble", 1); + packet_struct->setDataByName("understood", 1); + packet_struct->setDataByName("unknown4", 0); + + to_client->QueuePacket(packet_struct->serialize()); + safe_delete(packet_struct); + } + + return true; +} + +bool ChatChannel::TellChannelClient(Client* to_client, const char* message, const char* name2) { + PacketStruct *packet_struct; + + if (string(name2).find('[') != string::npos) + return true; + + packet_struct = configReader.getStruct("WS_HearChat", to_client->GetVersion()); + if (packet_struct) { + packet_struct->setDataByName("unknown", 0); + packet_struct->setDataByName("from_spawn_id", 0xFFFFFFFF); + packet_struct->setDataByName("to_spawn_id", 0xFFFFFFFF); + packet_struct->setDataByName("from", name2); + packet_struct->setDataByName("to", to_client->GetPlayer()->GetName()); + packet_struct->setDataByName("channel", 34); + packet_struct->setDataByName("language", 0); + packet_struct->setDataByName("message", message); + packet_struct->setDataByName("channel_name", name); + packet_struct->setDataByName("show_bubble", 1); + packet_struct->setDataByName("understood", 1); + packet_struct->setDataByName("unknown4", 0); + + to_client->QueuePacket(packet_struct->serialize()); + } + safe_delete(packet_struct); + + return true; +} + +bool ChatChannel::SendChannelUserList(Client *client) { + vector::iterator itr; + PacketStruct *packet_struct; + Client *to_client; + int8 i = 0; + + if ((packet_struct = configReader.getStruct("WS_WhoChannelQueryReply", client->GetVersion())) == NULL) + return false; + + packet_struct->setDataByName("channel_name", name); + packet_struct->setDataByName("unknown", 0); + packet_struct->setArrayLengthByName("num_players", clients.size()); + for (itr = clients.begin(); itr != clients.end(); itr++) { + if ((to_client = zone_list.GetClientByCharID(*itr)) != NULL) + packet_struct->setArrayDataByName("player_name", client->GetPlayer()->GetName(), i++); + else + packet_struct->setArrayDataByName("player_name", "", i++); + } + + client->QueuePacket(packet_struct->serialize()); + safe_delete(packet_struct); + + return true; +} diff --git a/EQ2/source/WorldServer/Chat/ChatChannel.h b/EQ2/source/WorldServer/Chat/ChatChannel.h new file mode 100644 index 000000000..f59d29080 --- /dev/null +++ b/EQ2/source/WorldServer/Chat/ChatChannel.h @@ -0,0 +1,83 @@ +/* + EQ2Emulator: Everquest II Server Emulator + Copyright (C) 2007 EQ2EMulator Development Team (http://www.eq2emulator.net) + + This file is part of EQ2Emulator. + + EQ2Emulator is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + EQ2Emulator is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with EQ2Emulator. If not, see . +*/ + +#ifndef CHAT_CHATCHANNEL_H_ +#define CHAT_CHATCHANNEL_H_ + +#include "../../common/types.h" +#include "../client.h" +#include + +using namespace std; + +#define CHAT_CHANNEL_MAX_NAME 100 +#define CHAT_CHANNEL_MAX_PASSWORD 100 + +enum ChatChannelType { + CHAT_CHANNEL_TYPE_NONE = 0, + CHAT_CHANNEL_TYPE_WORLD, + CHAT_CHANNEL_TYPE_CUSTOM, + CHAT_CHANNEL_TYPE_IRC +}; + +class ChatChannel { +public: + ChatChannel(); + virtual ~ChatChannel(); + + void SetName(const char *name) {strncpy(this->name, name, CHAT_CHANNEL_MAX_NAME);} + void SetPassword(const char *password) {strncpy(this->password, password, CHAT_CHANNEL_MAX_PASSWORD);} + void SetType(ChatChannelType type) {this->type = type;} + void SetLevelRestriction(int16 level_restriction) {this->level_restriction = level_restriction;} + void SetRacesAllowed(int64 races) {this->races = races;} + void SetClassesAllowed(int64 classes) {this->classes = classes;} + + const char * GetName() {return name;} + ChatChannelType GetType() {return type;} + unsigned int GetNumClients() {return clients.size();} + + bool HasPassword() {return password[0] != '\0';} + bool PasswordMatches(const char *password) {return strncmp(this->password, password, CHAT_CHANNEL_MAX_PASSWORD) == 0;} + bool CanJoinChannelByLevel(int16 level) {return level >= level_restriction;} + bool CanJoinChannelByRace(int8 race_id) {return races == 0 || (1 << race_id) & races;} + bool CanJoinChannelByClass(int8 class_id) {return classes == 0 || (1 << class_id) & classes;} + + bool IsInChannel(int32 character_id); + bool JoinChannel(Client *client); + bool LeaveChannel(Client *client); + bool TellChannel(Client *client, const char *message, const char* name2 = 0); + bool TellChannelClient(Client* to_client, const char* message, const char* name2 = 0); + bool SendChannelUserList(Client *client); + + void SetGlobalIRCChannel(bool val) { m_globalIRCChannel = val; } + bool IsGlobalIRCChannel() { return m_globalIRCChannel; } + +private: + char name[CHAT_CHANNEL_MAX_NAME + 1]; + char password[CHAT_CHANNEL_MAX_PASSWORD + 1]; + ChatChannelType type; + vector clients; + int16 level_restriction; + int64 races; + int64 classes; + bool m_globalIRCChannel; +}; + +#endif diff --git a/EQ2/source/WorldServer/Chat/ChatDB.cpp b/EQ2/source/WorldServer/Chat/ChatDB.cpp new file mode 100644 index 000000000..c92be6489 --- /dev/null +++ b/EQ2/source/WorldServer/Chat/ChatDB.cpp @@ -0,0 +1,47 @@ +/* + EQ2Emulator: Everquest II Server Emulator + Copyright (C) 2007 EQ2EMulator Development Team (http://www.eq2emulator.net) + + This file is part of EQ2Emulator. + + EQ2Emulator is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + EQ2Emulator is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with EQ2Emulator. If not, see . +*/ + +// JA: for when we add world channel or IRC configs + +#include "../../common/Log.h" +#include "Chat.h" +#include "../WorldDatabase.h" + +extern Chat chat; + +void WorldDatabase::LoadChannels() { + DatabaseResult result; + ChatChannel *channel; + + if (database_new.Select(&result, "SELECT `name`,`password`,`level_restriction`,`classes`,`races` FROM `channels`")) { + while (result.Next()) { + channel = new ChatChannel(); + channel->SetName(result.GetString(0)); + if (!result.IsNull(1)) + channel->SetPassword(result.GetString(1)); + channel->SetLevelRestriction(result.GetInt16(2)); + channel->SetClassesAllowed(result.GetInt64(3)); + channel->SetRacesAllowed(result.GetInt64(4)); + channel->SetType(CHAT_CHANNEL_TYPE_WORLD); + + chat.AddChannel(channel); + } + } +} \ No newline at end of file diff --git a/EQ2/source/WorldServer/ClientPacketFunctions.cpp b/EQ2/source/WorldServer/ClientPacketFunctions.cpp new file mode 100644 index 000000000..c8a95c193 --- /dev/null +++ b/EQ2/source/WorldServer/ClientPacketFunctions.cpp @@ -0,0 +1,402 @@ +/* + EQ2Emulator: Everquest II Server Emulator + Copyright (C) 2007 EQ2EMulator Development Team (http://www.eq2emulator.net) + + This file is part of EQ2Emulator. + + EQ2Emulator is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + EQ2Emulator is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with EQ2Emulator. If not, see . +*/ +#include "ClientPacketFunctions.h" +#include "WorldDatabase.h" +#include "../common/ConfigReader.h" +#include "Variables.h" +#include "World.h" +#include "classes.h" +#include "../common/Log.h" +#include "Traits/Traits.h" + +extern Classes classes; +extern Commands commands; +extern WorldDatabase database; +extern ConfigReader configReader; +extern MasterSpellList master_spell_list; +extern MasterTraitList master_trait_list; +extern Variables variables; +extern World world; + +void ClientPacketFunctions::SendFinishedEntitiesList ( Client* client ){ + + EQ2Packet* finishedEntitiesApp = new EQ2Packet(OP_DoneSendingInitialEntitiesMsg, 0, 0); + client->QueuePacket(finishedEntitiesApp); + +} + +void ClientPacketFunctions::SendSkillSlotMappings(Client* client){ + EQ2Packet* app = client->GetPlayer()->GetSpellSlotMappingPacket(client->GetVersion()); + if(app) + client->QueuePacket(app); +} + +void ClientPacketFunctions::SendLoginDenied ( Client* client ){ + PacketStruct* packet = configReader.getStruct("LS_LoginResponse", 1); + if(packet){ + packet->setDataByName("reply_code", 1); + packet->setDataByName("unknown03", 0xFFFFFFFF); + packet->setDataByName("unknown04", 0xFFFFFFFF); + EQ2Packet* app = packet->serialize(); + client->QueuePacket(app); + safe_delete(packet); + } +} + +void ClientPacketFunctions::SendLoginAccepted ( Client* client ){ + LogWrite(PACKET__DEBUG, 0, "Packet", "Sending Login Accepted packet (LS_LoginResponse, %i)", client->GetVersion()); + PacketStruct* response_packet = configReader.getStruct("LS_LoginResponse", client->GetVersion()); + if(response_packet){ + response_packet->setDataByName("unknown02", 1); + response_packet->setDataByName("unknown05", -959971393); + response_packet->setDataByName("unknown08", 2); + response_packet->setDataByName("unknown09", 585); + response_packet->setDataByName("unknown10", 1597830); + response_packet->setDataByName("accountid", 3); //client->GetAccountID()); + EQ2Packet* outapp = response_packet->serialize(); + client->QueuePacket(outapp); + safe_delete(response_packet); + } +} + +void ClientPacketFunctions::SendCommandList ( Client* client ){ + EQ2Packet* app = commands.GetRemoteCommands()->serialize(); + client->QueuePacket(app); +} + +void ClientPacketFunctions::SendGameWorldTime ( Client* client ){ + PacketStruct* packet = world.GetWorldTime(client->GetVersion()); + if(packet){ + client->QueuePacket(packet->serialize()); + safe_delete(packet); + } + //opcode 501 was the selection display opcode +} + +void ClientPacketFunctions::SendCharacterData ( Client* client ){ + client->GetPlayer()->SetCharacterID(client->GetCharacterID()); + EQ2Packet* outapp = client->GetPlayer()->serialize(client->GetPlayer(), client->GetVersion()); + //DumpPacket(outapp); + client->QueuePacket(outapp); + //client->GetPlayer()->ClearRemovedSpawn(client->GetPlayer()); +} + +void ClientPacketFunctions::SendCharacterSheet ( Client* client ){ + EQ2Packet* app = client->GetPlayer()->GetPlayerInfo()->serialize(client->GetVersion()); + client->QueuePacket(app); + + if (client->GetVersion() >= 1188) { + EQ2Packet* app2 = client->GetPlayer()->GetPlayerInfo()->serializePet(client->GetVersion()); + if (app2) + client->QueuePacket(app2); + } +} + +void ClientPacketFunctions::SendSkillBook ( Client* client ){ + EQ2Packet* app = client->GetPlayer()->skill_list.GetSkillPacket(client->GetVersion()); + if(app) + client->QueuePacket(app); +} + +// Jabantiz: Attempt to get the char trait list working +void ClientPacketFunctions::SendTraitList ( Client* client ){ + EQ2Packet* traitApp = master_trait_list.GetTraitListPacket(client); + //DumpPacket(traitApp); + if (traitApp){ + client->QueuePacket(traitApp); + } + +} + +void ClientPacketFunctions::SendClassAA( Client* client ){ + int16 version = 1; + if(client) + version = client->GetVersion(); + + PacketStruct* packet = configReader.getStruct("WS_DisplayHouseStatus", version); + + packet->setDataByName("spawn_id", client->GetCharacterID()); + packet->setDataByName("house_name", client->GetPlayer()->GetName()); + packet->setDataByName("house_location", "Qeynos Village Inn"); + + packet->PrintPacket(); + EQ2Packet* data = packet->serialize(); + EQ2Packet* app = new EQ2Packet(OP_PlayerHouseDisplayStatusMsg, data->pBuffer, data->size); + safe_delete(packet); + safe_delete(data); + client->QueuePacket(app); +} + +void ClientPacketFunctions::SendAbilities ( Client* client ){ + LogWrite(MISC__TODO, 1, "TODO", " Add SendAbilities functionality\n\t(%s, function: %s, line #: %i)", __FILE__, __FUNCTION__, __LINE__); + // this is the featherfall ability data + // later this would loop through and send all abilities + /*uchar abilityData[] ={0x11,0x00,0x00,0x00,0xff,0x15,0x02,0x00,0x0b,0x00,0x46,0x65,0x61,0x74 + ,0x68,0x65,0x72,0x66,0x61,0x6c,0x6c}; + EQ2Packet* abilityApp = new EQ2Packet(OP_ClientCmdMsg, abilityData, sizeof(abilityData)); + client->QueuePacket(abilityApp);*/ +} + +void ClientPacketFunctions::SendCommandNamePacket ( Client* client ){ + LogWrite(MISC__TODO, 1, "TODO", " fix, this is actually quest/collection information\n\t(%s, function: %s, line #: %i)", __FILE__, __FUNCTION__, __LINE__); + /* + PacketStruct* command_packet = configReader.getStruct("WS_CommandName", client->GetVersion()); + if(command_packet){ + command_packet->setDataByName("unknown03", 0x221bfb47); + + char* charName = { "BogusName" }; + command_packet->setMediumStringByName("character_name",charName); + EQ2Packet* outapp = command_packet->serialize(); + client->QueuePacket(outapp); + safe_delete(command_packet); + } + */ +} + +void ClientPacketFunctions::SendQuickBarInit ( Client* client ){ + int32 count = database.LoadPlayerSkillbar(client); + if(count == 0) { + LogWrite(PACKET__DEBUG, 0, "Packet", "No character quickbar found!"); + database.UpdateStartingSkillbar(client->GetCharacterID(), client->GetPlayer()->GetAdventureClass(), client->GetPlayer()->GetRace()); + database.LoadPlayerSkillbar(client); + } + EQ2Packet* quickbarApp = client->GetPlayer()->GetQuickbarPacket(client->GetVersion()); + if(quickbarApp) + client->QueuePacket(quickbarApp); +} + +void ClientPacketFunctions::SendCharacterMacros(Client* client) { + LogWrite(PACKET__DEBUG, 0, "Packet", "Sending Character Macro packet (WS_MacroInit, %i)", client->GetVersion()); + map >* macros = database.LoadCharacterMacros(client->GetCharacterID()); + if(macros) { + PacketStruct* macro_packet = configReader.getStruct("WS_MacroInit", client->GetVersion()); + if(macro_packet) { + map >::iterator itr; + macro_packet->setArrayLengthByName("macro_count", macros->size()); + int8 x = 0; + for(itr=macros->begin();itr!=macros->end();itr++, x++) { + macro_packet->setArrayDataByName("number", itr->first, x); + if(itr->second.size() > 0) { + LogWrite(PACKET__DEBUG, 5, "Packet", "Loading Macro %i, name: %s", itr->first, itr->second[0]->name.c_str()); + macro_packet->setArrayDataByName("name", itr->second[0]->name.c_str(), x); + } + char tmp_details_count[25] = {0}; + sprintf(tmp_details_count, "macro_details_count_%i", x); + macro_packet->setArrayLengthByName(tmp_details_count, itr->second.size()); + for(int8 i=0;isecond.size();i++) { + char tmp_command[15] = {0}; + sprintf(tmp_command, "command%i", x); + LogWrite(PACKET__DEBUG, 5, "Packet", "\tLoading Command %i: %s", itr->first, x, itr->second[i]->text.c_str()); + macro_packet->setArrayDataByName(tmp_command, itr->second[i]->text.c_str(), i); + } + macro_packet->setArrayDataByName("unknown2", 2, x); + macro_packet->setArrayDataByName("icon", itr->second[0]->icon, x); + client->GetPlayer()->macro_icons[itr->first] = itr->second[0]->icon; + macro_packet->setArrayDataByName("unknown3", 0xFFFFFFFF, x); + } + EQ2Packet* packet = macro_packet->serialize(); + client->QueuePacket(packet); + safe_delete(macro_packet); + } + safe_delete(macros); + } +} + +void ClientPacketFunctions::SendMOTD ( Client* client ){ + + const char* motd = 0; + + // fetch MOTD from `variables` table + Variable* var = variables.FindVariable("motd"); + + if( var == NULL || strlen (var->GetValue()) == 0) { + LogWrite(WORLD__WARNING, 0, "World", "No MOTD set. Sending generic message..."); + client->SimpleMessage(CHANNEL_COLOR_YELLOW, "Message of the Day: Welcome to EQ2Emulator! Customize this message in the `variables`.`motd` data!"); + } + else { + motd = var->GetValue(); + LogWrite(WORLD__DEBUG, 0, "World", "Send MOTD..."); + client->SimpleMessage(CHANNEL_COLOR_YELLOW, motd); + } + +} + +void ClientPacketFunctions::SendUpdateSpellBook ( Client* client ){ + EQ2Packet* app = client->GetPlayer()->GetSpellBookUpdatePacket(client->GetVersion()); + if(app) + client->QueuePacket(app); + client->GetPlayer()->UnlockAllSpells(true); +} + +void ClientPacketFunctions::SendLoginCommandMessages ( Client* client ){ + LogWrite(MISC__TODO, 1, "TODO", "Why is this function empty? Func: %s", __FUNCTION__); +} + +void ClientPacketFunctions::SendServerControlFlags(Client* client, int8 param, int8 param_val, int8 value) { + PacketStruct* packet = configReader.getStruct("WS_ServerControlFlags", client->GetVersion()); + if(packet) { + if (param == 1) + packet->setDataByName("parameter1", param_val); + else if (param == 2) + packet->setDataByName("parameter2", param_val); + else if (param == 3) + packet->setDataByName("parameter3", param_val); + else if (param == 4) + packet->setDataByName("parameter4", param_val); + else if (param == 5) + packet->setDataByName("parameter5", param_val); + else { + safe_delete(packet); + return; + } + + packet->setDataByName("value", value); + client->QueuePacket(packet->serialize()); + /* + Some other values for this packet + first param: + 01 flymode + 02 collisons off + 04 unknown + 08 heading movement only + 16 forward/reverse movement only + 32 low gravity + 64 sit + + second + 2 crouch + + + third: + 04 float when trying to jump, no movement + 08 jump high, no movement + 128 walk underwater + + fourth: + 01 moon jump underwater + 04 fear + 16 moon jumps + 32 safe fall (float to ground) + 64 cant move + + fifth: + 01 die + 08 hover (fae) + 32 flymode2? + + */ + } + safe_delete(packet); +} + +void ClientPacketFunctions::SendInstanceList(Client* client) { + if (client->GetPlayer()->GetCharacterInstances()->GetInstanceCount() > 0) { + PacketStruct* packet = configReader.getStruct("WS_InstanceCreated", client->GetVersion()); + if (packet) { + vector persist = client->GetPlayer()->GetCharacterInstances()->GetPersistentInstances(); + vector lockout = client->GetPlayer()->GetCharacterInstances()->GetLockoutInstances(); + + packet->setArrayLengthByName("num_instances", lockout.size()); + for (int32 i = 0; i < lockout.size(); i++) { + InstanceData data = lockout.at(i); + + packet->setArrayDataByName("unknown1", data.db_id, i); // unique id per player + packet->setArrayDataByName("instance_zone_name", data.zone_name.c_str(), i); + packet->setArrayDataByName("unknown2", 0x0B, i); // Always set to 0x0B on live packets + packet->setArrayDataByName("success_last", data.last_success_timestamp, i); + packet->setArrayDataByName("last_failure", data.last_failure_timestamp, i); + packet->setArrayDataByName("failure", data.failure_lockout_time, i); + packet->setArrayDataByName("success", data.success_lockout_time, i); + } + + packet->setArrayLengthByName("num_persistent", persist.size()); + for (int32 i = 0; i < persist.size(); i++) { + InstanceData data = persist.at(i); + + packet->setArrayDataByName("unknown1a", data.db_id, i); // unique id per player + packet->setArrayDataByName("persistent_zone_name", data.zone_name.c_str(), i); + packet->setArrayDataByName("unknown2a", 0x0B, i); // set to 0x0B in all live packets + packet->setArrayDataByName("persist_success_timestamp", data.last_success_timestamp, i); + packet->setArrayDataByName("persist_failure_timestamp", data.last_failure_timestamp, i); + + // Check min duration (last success + failure) + //if (Timer::GetUnixTimeStamp() < data.last_success_timestamp + data.failure_lockout_time*/) + //packet->setArrayDataByName("unknown3b", 1, i); + packet->setArrayDataByName("unknown3b", 1, i); + + packet->setArrayDataByName("minimum_duration", data.failure_lockout_time, i); + packet->setArrayDataByName("maximum_duration", data.success_lockout_time, i); + + packet->setArrayDataByName("unknown4a", 1800, i); // All live logs have 0x0708 + } + + client->QueuePacket(packet->serialize()); + } + safe_delete(packet); + } +} + +void ClientPacketFunctions::SendMaintainedExamineUpdate(Client* client, int8 slot_pos, int32 update_value, int8 update_type){ + if (!client) + return; + + PacketStruct* packet = configReader.getStruct("WS_UpdateMaintainedExamine", client->GetVersion()); + + if (packet){ + packet->setSubstructDataByName("info_header", "show_name", 1); + packet->setSubstructDataByName("info_header", "packettype", 19710); + packet->setSubstructDataByName("info_header", "packetsubtype", 5); + packet->setDataByName("time_stamp", Timer::GetCurrentTime2()); + packet->setDataByName("slot_pos", slot_pos); + packet->setDataByName("update_value", update_value > 0 ? update_value : 0xFFFFFFFF); + packet->setDataByName("update_type", update_type); + client->QueuePacket(packet->serialize()); + safe_delete(packet); + } +} + +void ClientPacketFunctions::SendZoneChange(Client* client, char* zone_ip, int16 zone_port, int32 key) { + if (!client) + return; + + PacketStruct* packet = configReader.getStruct("WS_ZoneChangeMsg", client->GetVersion()); + if (packet) { + packet->setDataByName("account_id", client->GetAccountID()); + packet->setDataByName("key", key); + packet->setDataByName("ip_address", zone_ip); + packet->setDataByName("port", zone_port); + client->QueuePacket(packet->serialize()); + } + safe_delete(packet); +} + +void ClientPacketFunctions::SendStateCommand(Client* client, int32 spawn_id, int32 state) { + if (!client) { + return; + } + + PacketStruct* packet = configReader.getStruct("WS_StateCmd", client->GetVersion()); + if (packet) { + packet->setDataByName("spawn_id", spawn_id); + packet->setDataByName("state", state); + client->QueuePacket(packet->serialize()); + } + safe_delete(packet); +} \ No newline at end of file diff --git a/EQ2/source/WorldServer/ClientPacketFunctions.h b/EQ2/source/WorldServer/ClientPacketFunctions.h new file mode 100644 index 000000000..939544d40 --- /dev/null +++ b/EQ2/source/WorldServer/ClientPacketFunctions.h @@ -0,0 +1,89 @@ +/* + EQ2Emulator: Everquest II Server Emulator + Copyright (C) 2007 EQ2EMulator Development Team (http://www.eq2emulator.net) + + This file is part of EQ2Emulator. + + EQ2Emulator is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + EQ2Emulator is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with EQ2Emulator. If not, see . +*/ +#pragma once +#include "client.h" + +struct HouseZone; +struct PlayerHouse; +struct HeroicOP; + +class ClientPacketFunctions +{ +public: + static void SendFinishedEntitiesList ( Client* client ); + + static void SendLoginDenied ( Client* client ); + static void SendLoginAccepted ( Client* client ); + + static void SendCommandList ( Client* client ); + + static void SendGameWorldTime ( Client* client ); + + static void SendCharacterData ( Client* client ); + static void SendCharacterSheet ( Client* client ); + static void SendSkillBook ( Client* client ); + static void SendTraitList ( Client* client ); + static void SendAbilities ( Client* client ); + static void SendClassAA ( Client* client ); + + static void SendCommandNamePacket ( Client* client ); + + static void SendQuickBarInit ( Client* client ); + + static void SendMOTD ( Client* client ); + + static void SendCharacterMacros(Client* client); + + static void SendUpdateSpellBook ( Client* client ); + + static void SendLoginCommandMessages ( Client* client ); + + static void SendSkillSlotMappings(Client* client); + + static void SendRestartZoneMsg(Client* client); + + static void SendServerControlFlags(Client* client, int8 param, int8 param_val, int8 value); + + static void SendInstanceList(Client* client); + + static void SendZoneChange(Client* client, char* zone_ip, int16 zone_port, int32 key); + + static void SendStateCommand(Client* client, int32 spawn_id, int32 state); + + /* Tradeskills (/Tradeskills/TradeskillsPackets.cpp) */ + static void SendCreateFromRecipe(Client* client, int32 recipeID); + static void SendItemCreationUI(Client* client, Recipe* recipe); + static void StopCrafting(Client* client); + static void CounterReaction(Client* client, bool countered); + + static void SendAchievementList(Client* client); + + /* Housing (/Housing/HousingPackets.cpp) */ + static void SendHousePurchace(Client* client, HouseZone* hz, int32 spawnID); + static void SendBaseHouseWindow(Client* client, HouseZone* hz, PlayerHouse* ph, int32 spawnID); + static void SendHouseVisitWindow(Client* client, vector houses); + + /* Heroic OP's (/HeroicOp/HeroicOpPackets.cpp) */ + static void SendHeroicOPUpdate(Client* client, HeroicOP* ho); + + //UI updates for trigger count and damage remaining on maintained spells + static void SendMaintainedExamineUpdate(Client* client, int8 slot_pos, int32 update_value, int8 update_type); +}; + diff --git a/EQ2/source/WorldServer/Collections/Collections.cpp b/EQ2/source/WorldServer/Collections/Collections.cpp new file mode 100644 index 000000000..041d3a6e4 --- /dev/null +++ b/EQ2/source/WorldServer/Collections/Collections.cpp @@ -0,0 +1,317 @@ +/* +EQ2Emulator: Everquest II Server Emulator +Copyright (C) 2007 EQ2EMulator Development Team (http://www.eq2emulator.net) + +This file is part of EQ2Emulator. + +EQ2Emulator is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +EQ2Emulator is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with EQ2Emulator. If not, see . +*/ +#include "Collections.h" + +#include "../../common/Log.h" +#include + +extern MasterCollectionList master_collection_list; + +Collection::Collection() { + id = 0; + memset(name, 0, sizeof(name)); + memset(category, 0, sizeof(category)); + level = 0; + reward_coin = 0; + reward_xp = 0; + completed = false; + save_needed = false; +} + +Collection::Collection(Collection *in) { + vector *collection_items_in; + vector *reward_items_in; + vector::iterator itr; + vector::iterator itr2; + struct CollectionItem *collection_item; + struct CollectionRewardItem *reward_item; + + assert(in); + + id = in->GetID(); + strncpy(name, in->GetName(), sizeof(name)); + strncpy(category, in->GetCategory(), sizeof(category)); + level = in->GetLevel(); + reward_coin = in->GetRewardCoin(); + reward_xp = in->GetRewardXP(); + completed = in->GetCompleted(); + save_needed = in->GetSaveNeeded(); + + collection_items_in = in->GetCollectionItems(); + for (itr = collection_items_in->begin(); itr != collection_items_in->end(); itr++) { + collection_item = new struct CollectionItem; + collection_item->item = (*itr)->item; + collection_item->index = (*itr)->index; + collection_item->found = (*itr)->found; + collection_items.push_back(collection_item); + } + + reward_items_in = in->GetRewardItems(); + for (itr2 = reward_items_in->begin(); itr2 != reward_items_in->end(); itr2++) { + reward_item = new struct CollectionRewardItem; + reward_item->item = (*itr2)->item; + reward_item->quantity = (*itr2)->quantity; + reward_items.push_back(reward_item); + } + + reward_items_in = in->GetSelectableRewardItems(); + for (itr2 = reward_items_in->begin(); itr2 != reward_items_in->end(); itr2++) { + reward_item = new struct CollectionRewardItem; + reward_item->item = (*itr2)->item; + reward_item->quantity = (*itr2)->quantity; + selectable_reward_items.push_back(reward_item); + } +} + +Collection::~Collection() { + vector::iterator itr; + vector::iterator itr2; + + for (itr = collection_items.begin(); itr != collection_items.end(); itr++) + safe_delete(*itr); + for (itr2 = reward_items.begin(); itr2 != reward_items.end(); itr2++) + safe_delete(*itr2); + for (itr2 = selectable_reward_items.begin(); itr2 != selectable_reward_items.end(); itr2++) + safe_delete(*itr2); +} + +void Collection::AddCollectionItem(struct CollectionItem *collection_item) { + assert(collection_item); + + collection_items.push_back(collection_item); +} + +void Collection::AddRewardItem(struct CollectionRewardItem *reward_item) { + assert(reward_item); + + reward_items.push_back(reward_item); +} + +void Collection::AddSelectableRewardItem(struct CollectionRewardItem *reward_item) { + assert(reward_item); + + selectable_reward_items.push_back(reward_item); +} + +bool Collection::NeedsItem(Item *item) { + vector::iterator itr; + struct CollectionItem *collection_item; + + assert(item); + + if (completed) + return false; + + for (itr = collection_items.begin(); itr != collection_items.end(); itr++) { + collection_item = *itr; + if (collection_item->item == item->details.item_id) { + if (collection_item->found) + return false; + else + return true; + } + } + + /* item is not required by this collection at all */ + return false; +} + +struct CollectionItem * Collection::GetCollectionItemByItemID(int32 item_id) { + vector::iterator itr; + struct CollectionItem *collection_item; + + for (itr = collection_items.begin(); itr != collection_items.end(); itr++) { + collection_item = *itr; + if (collection_item->item == item_id) + return collection_item; + } + + return 0; +} + +bool Collection::GetIsReadyToTurnIn() { + vector::iterator itr; + + if (completed) + return false; + + for (itr = collection_items.begin(); itr != collection_items.end(); itr++) { + if (!(*itr)->found) + return false; + } + + return true; +} + +MasterCollectionList::MasterCollectionList() { + mutex_collections.SetName("MasterCollectionList::collections"); +} + +MasterCollectionList::~MasterCollectionList() { + ClearCollections(); +} + +bool MasterCollectionList::AddCollection(Collection *collection) { + bool ret = false; + + assert(collection); + + mutex_collections.writelock(__FUNCTION__, __LINE__); + if (collections.count(collection->GetID()) == 0) { + collections[collection->GetID()] = collection; + ret = true; + } + mutex_collections.releasewritelock(__FUNCTION__, __LINE__); + + return ret; +} + +Collection * MasterCollectionList::GetCollection(int32 collection_id) { + Collection *collection = 0; + + mutex_collections.readlock(__FUNCTION__, __LINE__); + if (collections.count(collection_id) > 0) + collection = collections[collection_id]; + mutex_collections.releasereadlock(__FUNCTION__, __LINE__); + + return collection; +} + +void MasterCollectionList::ClearCollections() { + map::iterator itr; + + mutex_collections.writelock(__FUNCTION__, __LINE__); + for (itr = collections.begin(); itr != collections.end(); itr++) + safe_delete(itr->second); + collections.clear(); + mutex_collections.releasewritelock(__FUNCTION__, __LINE__); +} + +int32 MasterCollectionList::Size() { + int32 size; + + mutex_collections.readlock(__FUNCTION__, __LINE__); + size = collections.size(); + mutex_collections.releasereadlock(__FUNCTION__, __LINE__); + + return size; +} + +bool MasterCollectionList::NeedsItem(Item *item) { + map::iterator itr; + bool ret = false; + + assert(item); + + mutex_collections.readlock(__FUNCTION__, __LINE__); + for (itr = collections.begin(); itr != collections.end(); itr++) { + if (itr->second->NeedsItem(item)) { + ret = true; + break; + } + } + mutex_collections.releasereadlock(__FUNCTION__, __LINE__); + + return ret; +} + +PlayerCollectionList::PlayerCollectionList() { +} + +PlayerCollectionList::~PlayerCollectionList() { + ClearCollections(); +} + +bool PlayerCollectionList::AddCollection(Collection *collection) { + assert(collection); + + if (collections.count(collection->GetID()) == 0) { + collections[collection->GetID()] = collection; + return true; + } + + return false; +} + +Collection * PlayerCollectionList::GetCollection(int32 collection_id) { + if (collections.count(collection_id) > 0) + return collections[collection_id]; + + return 0; +} + +void PlayerCollectionList::ClearCollections() { + map::iterator itr; + + for (itr = collections.begin(); itr != collections.end(); itr++) + safe_delete(itr->second); + collections.clear(); +} + +int32 PlayerCollectionList::Size() { + return collections.size(); +} + +bool PlayerCollectionList::NeedsItem(Item *item) { + map *master_collections; + map::iterator itr; + Collection *collection; + Mutex *master_mutex; + bool ret = false; + + assert(item); + + for (itr = collections.begin(); itr != collections.end(); itr++) { + if (itr->second->NeedsItem(item)) { + ret = true; + break; + } + } + + /* if the player doesnt have a collection that needs the item, check the master collection list to see if there's a collection + * in there that needs the item that the player does not have yet */ + if (!ret) { + master_mutex = master_collection_list.GetMutex(); + master_collections = master_collection_list.GetCollections(); + + master_mutex->readlock(__FUNCTION__, __LINE__); + for (itr = master_collections->begin(); itr != master_collections->end(); itr++) { + collection = itr->second; + if (collection->NeedsItem(item) && !GetCollection(collection->GetID())) { + ret = true; + break; + } + } + master_mutex->releasereadlock(__FUNCTION__, __LINE__); + } + + return ret; +} + +bool PlayerCollectionList::HasCollectionsToHandIn() { + map::iterator itr; + + for (itr = collections.begin(); itr != collections.end(); itr++) { + if (itr->second->GetIsReadyToTurnIn()) + return true; + } + + return false; +} \ No newline at end of file diff --git a/EQ2/source/WorldServer/Collections/Collections.h b/EQ2/source/WorldServer/Collections/Collections.h new file mode 100644 index 000000000..eb398735a --- /dev/null +++ b/EQ2/source/WorldServer/Collections/Collections.h @@ -0,0 +1,107 @@ +#ifndef COLLECTIONS_H_ +#define COLLECTIONS_H_ + +#include "../../common/types.h" +#include "../../common/Mutex.h" +#include "../Items/Items.h" +#include +#include + +using namespace std; + +struct CollectionItem { + int32 item; + int8 index; + int8 found; +}; + +struct CollectionRewardItem { + Item *item; + int8 quantity; +}; + +class Collection { +public: + Collection(); + Collection(Collection *in); + virtual ~Collection(); + + void SetID(int32 id) {this->id = id;} + void SetName(const char *name) {strncpy(this->name, name, sizeof(this->name));} + void SetCategory(const char *category) {strncpy(this->category, category, sizeof(this->category));} + void SetLevel(int8 level) {this->level = level;} + void SetCompleted(bool completed) {this->completed = completed;} + void SetSaveNeeded(bool save_needed) {this->save_needed = save_needed;} + void AddCollectionItem(struct CollectionItem *collection_item); + void AddRewardItem(struct CollectionRewardItem *reward_item); + void AddSelectableRewardItem(struct CollectionRewardItem *reward_item); + void SetRewardCoin(int64 reward_coin) {this->reward_coin = reward_coin;} + void SetRewardXP(int64 reward_xp) {this->reward_xp = reward_xp;} + bool NeedsItem(Item *item); + struct CollectionItem * GetCollectionItemByItemID(int32 item_id); + + int32 GetID() {return id;} + const char * GetName() {return name;} + const char * GetCategory() {return category;} + int8 GetLevel() {return level;} + bool GetIsReadyToTurnIn(); + bool GetCompleted() {return completed;} + bool GetSaveNeeded() {return save_needed;} + vector * GetCollectionItems() {return &collection_items;} + vector * GetRewardItems() {return &reward_items;} + vector * GetSelectableRewardItems() {return &selectable_reward_items;} + int64 GetRewardCoin() {return reward_coin;} + int64 GetRewardXP() {return reward_xp;} + +private: + int32 id; + char name[512]; + char category[512]; + int8 level; + int64 reward_coin; + int64 reward_xp; + bool completed; + bool save_needed; + vector collection_items; + vector reward_items; + vector selectable_reward_items; +}; + +class MasterCollectionList { +public: + MasterCollectionList(); + virtual ~MasterCollectionList(); + + bool AddCollection(Collection *collection); + Collection * GetCollection(int32 collection_id); + void ClearCollections(); + int32 Size(); + bool NeedsItem(Item *item); + + Mutex * GetMutex() {return &mutex_collections;} + map * GetCollections() {return &collections;} + +private: + Mutex mutex_collections; + map collections; +}; + +class PlayerCollectionList { +public: + PlayerCollectionList(); + virtual ~PlayerCollectionList(); + + bool AddCollection(Collection *collection); + Collection * GetCollection(int32 collection_id); + void ClearCollections(); + int32 Size(); + bool NeedsItem(Item *item); + bool HasCollectionsToHandIn(); + + map * GetCollections() {return &collections;} + +private: + map collections; +}; + +#endif \ No newline at end of file diff --git a/EQ2/source/WorldServer/Collections/CollectionsDB.cpp b/EQ2/source/WorldServer/Collections/CollectionsDB.cpp new file mode 100644 index 000000000..8be855117 --- /dev/null +++ b/EQ2/source/WorldServer/Collections/CollectionsDB.cpp @@ -0,0 +1,295 @@ +/* + EQ2Emulator: Everquest II Server Emulator + Copyright (C) 2007 EQ2EMulator Development Team (http://www.eq2emulator.net) + + This file is part of EQ2Emulator. + + EQ2Emulator is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + EQ2Emulator is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with EQ2Emulator. If not, see . +*/ +#ifdef WIN32 + #include + #include +#endif +#include +#include +#include "../../common/Log.h" +#include "../WorldDatabase.h" +#include "Collections.h" + +extern MasterCollectionList master_collection_list; + + +void WorldDatabase::LoadCollections() +{ + Collection *collection; + Query query; + MYSQL_ROW row; + MYSQL_RES *res; + int32 cItems_total = 0; + int32 cItems_rewards = 0; + + res = query.RunQuery2(Q_SELECT, "SELECT `id`,`collection_name`,`collection_category`,`level`\n" + "FROM `collections`"); + if (res) + { + while ((row = mysql_fetch_row(res))) + { + collection = new Collection(); + collection->SetID(atoul(row[0])); + collection->SetName(row[1]); + collection->SetCategory(row[2]); + collection->SetLevel(atoi(row[3])); + + LogWrite(COLLECTION__DEBUG, 5, "Collect", "\tLoading Collection: '%s' (%u)", collection->GetName(),collection->GetID()); + + if (!master_collection_list.AddCollection(collection)) + { + LogWrite(COLLECTION__ERROR, 0, "Collect", "Error adding collection '%s' - duplicate ID: %u", collection->GetName(),collection->GetID()); + safe_delete(collection); + continue; + } + + cItems_total += LoadCollectionItems(collection); + cItems_rewards += LoadCollectionRewards(collection); + } + } + LogWrite(COLLECTION__DEBUG, 0, "Collect", "\tLoaded %u collections", master_collection_list.Size()); + LogWrite(COLLECTION__DEBUG, 0, "Collect", "\tLoaded %u collection items", cItems_total); + LogWrite(COLLECTION__DEBUG, 0, "Collect", "\tLoaded %u collection rewards", cItems_rewards); +} + +int32 WorldDatabase::LoadCollectionItems(Collection *collection) +{ + struct CollectionItem *collection_item; + Item *item; + Query query; + MYSQL_ROW row; + MYSQL_RES *res; + int32 total = 0; + + assert(collection); + + res = query.RunQuery2(Q_SELECT, "SELECT `item_id`,`item_index`\n" + "FROM `collection_details`\n" + "WHERE `collection_id`=%u\n" + "ORDER BY `item_index` ASC", + collection->GetID()); + + if (res) + { + while ((row = mysql_fetch_row(res))) + { + if ((item = master_item_list.GetItem(atoul(row[0])))) + { + collection_item = new struct CollectionItem; + collection_item->item = atoul(row[0]); + collection_item->index = atoi(row[1]); + collection_item->found = 0; + LogWrite(COLLECTION__DEBUG, 5, "Collect", "\tLoading Collection Item: (%u)", atoul(row[0])); //LogWrite(COLLECTION__DEBUG, 5, "Collect", "\tLoading Collection Item: '%s' (%u)", master_item_list.GetItem(collection_item->item)->name.c_str(), atoul(row[0])); + collection->AddCollectionItem(collection_item); + total++; + } + } + } + if(query.GetErrorNumber()) + LogWrite(COLLECTION__ERROR, 0, "Collect", "Error Loading Collection Items, Query: %s, Error: %s", query.GetQuery(), query.GetError()); + + return total; +} + +int32 WorldDatabase::LoadCollectionRewards(Collection *collection) +{ + struct CollectionRewardItem *reward_item; + Query query; + MYSQL_ROW row; + MYSQL_RES *res; + int32 total = 0; + + assert(collection); + + res = query.RunQuery2(Q_SELECT, "SELECT `reward_type`,`reward_value`,`reward_quantity`\n" + "FROM `collection_rewards`\n" + "WHERE `collection_id`=%u", + collection->GetID()); + + if (res) + { + while ((row = mysql_fetch_row(res))) + { + LogWrite(COLLECTION__DEBUG, 5, "Collect", "\tLoading Collection Reward: Type: %s, Val: %s, Qty: %u", row[0], row[1], atoi(row[2])); + + if (!strcasecmp(row[0], "Item")) + { + reward_item = new struct CollectionRewardItem; + reward_item->item = master_item_list.GetItem(atoul(row[1])); + reward_item->quantity = atoi(row[2]); + collection->AddRewardItem(reward_item); + total++; + } + else if (!strcasecmp(row[0], "Selectable")) + { + reward_item = new struct CollectionRewardItem; + reward_item->item = master_item_list.GetItem(atoul(row[1])); + reward_item->quantity = atoi(row[2]); + collection->AddSelectableRewardItem(reward_item); + total++; + } + else if (!strcasecmp(row[0], "Coin")) + { + collection->SetRewardCoin(atoi64(row[1])); + total++; + } + else if (!strcasecmp(row[0], "XP")) + { + collection->SetRewardXP(atoi64(row[1])); + total++; + } + else + LogWrite(COLLECTION__ERROR, 0, "Collect", "Error adding collection reward to collection '%s'. Unknown reward type '%s'", collection->GetName(), row[0]); + } + } + + if(query.GetErrorNumber()) + LogWrite(COLLECTION__ERROR, 0, "Collect", "Error Loading Collection Rewards, Query: %s, Error: %s", query.GetQuery(), query.GetError()); + + return total; +} + +void WorldDatabase::LoadPlayerCollections(Player *player) +{ + Collection *collection; + Query query; + MYSQL_ROW row; + MYSQL_RES *res; + + assert(player); + + res = query.RunQuery2(Q_SELECT, "SELECT `collection_id`,`completed` FROM `character_collections` WHERE `char_id`=%u", player->GetCharacterID()); + if (res) + { + while ((row = mysql_fetch_row(res))) + { + collection = new Collection(master_collection_list.GetCollection(atoul(row[0]))); + collection->SetCompleted(atoi(row[1])); + + if (!player->GetCollectionList()->AddCollection(collection)) + { + LogWrite(COLLECTION__ERROR, 0, "Collect", "Error adding collection %u to player '%s' - duplicate ID\n", collection->GetID(), player->GetName()); + safe_delete(collection); + continue; + } + + LoadPlayerCollectionItems(player, collection); + } + } + if(query.GetErrorNumber()) + LogWrite(COLLECTION__ERROR, 0, "Collect", "Error Loading Character Collections, Query: %s, Error: %s", query.GetQuery(), query.GetError()); +} + +void WorldDatabase::LoadPlayerCollectionItems(Player *player, Collection *collection) +{ + struct CollectionItem *collection_item; + Query query; + MYSQL_ROW row; + MYSQL_RES *res; + + assert(player); + assert(collection); + + res = query.RunQuery2(Q_SELECT, "SELECT `collection_item_id`\n" + "FROM `character_collection_items`\n" + "WHERE `char_id`=%u\n" + "AND `collection_id`=%u", + player->GetCharacterID(), collection->GetID()); + + if (res) + { + while ((row = mysql_fetch_row(res))) + { + if ((collection_item = collection->GetCollectionItemByItemID(atoul(row[0])))) + collection_item->found = true; + else + LogWrite(COLLECTION__ERROR, 0, "Collect", "Error Loading character collection items. Item ID %u does not exist in collection %s", atoul(row[0]), collection->GetName()); + } + } + if(query.GetErrorNumber()) + LogWrite(COLLECTION__ERROR, 0, "Collect", "Error Loading Character Collection Items, Query: %s, Error: %s", query.GetQuery(), query.GetError()); +} + +void WorldDatabase::SavePlayerCollections(Client *client) +{ + map *collections; + map::iterator itr; + Collection *collection; + + assert(client); + + collections = client->GetPlayer()->GetCollectionList()->GetCollections(); + for (itr = collections->begin(); itr != collections->end(); itr++) + { + collection = itr->second; + if (collection->GetSaveNeeded()) + { + SavePlayerCollection(client, collection); + SavePlayerCollectionItems(client, collection); + collection->SetSaveNeeded(false); + } + } +} + +void WorldDatabase::SavePlayerCollection(Client *client, Collection *collection) +{ + Query query; + + assert(client); + assert(collection); + + query.RunQuery2(Q_UPDATE, "INSERT INTO `character_collections` (`char_id`,`collection_id`,`completed`)\n" + "VALUES (%u,%u,0)\n" + "ON DUPLICATE KEY UPDATE `completed`=%i", + client->GetPlayer()->GetCharacterID(), collection->GetID(), + collection->GetCompleted() ? 1 : 0); +} + +void WorldDatabase::SavePlayerCollectionItems(Client *client, Collection *collection) +{ + vector *collection_items; + vector::iterator itr; + struct CollectionItem *collection_item; + + assert(client); + assert(collection); + + collection_items = collection->GetCollectionItems(); + for (itr = collection_items->begin(); itr != collection_items->end(); itr++) + { + collection_item = *itr; + if (collection_item->found > 0) + SavePlayerCollectionItem(client, collection, collection_item->item); + } +} + +void WorldDatabase::SavePlayerCollectionItem(Client *client, Collection *collection, int32 item_id) +{ + Query query; + + assert(client); + assert(collection); + //assert(item); + + query.RunQuery2(Q_INSERT, "INSERT IGNORE INTO `character_collection_items` (`char_id`,`collection_id`,`collection_item_id`)\n" + "VALUES (%u,%u,%u)", + client->GetPlayer()->GetCharacterID(), collection->GetID(), item_id); +} + diff --git a/EQ2/source/WorldServer/Combat.cpp b/EQ2/source/WorldServer/Combat.cpp new file mode 100644 index 000000000..547c41813 --- /dev/null +++ b/EQ2/source/WorldServer/Combat.cpp @@ -0,0 +1,1379 @@ +/* + EQ2Emulator: Everquest II Server Emulator + Copyright (C) 2007 EQ2EMulator Development Team (http://www.eq2emulator.net) + + This file is part of EQ2Emulator. + + EQ2Emulator is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + EQ2Emulator is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with EQ2Emulator. If not, see . +*/ +#include "Combat.h" +#include "client.h" +#include "../common/ConfigReader.h" +#include "classes.h" +#include "../common/debug.h" +#include "../common/Log.h" +#include "zoneserver.h" +#include "Skills.h" +#include "classes.h" +#include "World.h" +#include "LuaInterface.h" +#include "Rules/Rules.h" +#include "SpellProcess.h" +#include + +extern Classes classes; +extern ConfigReader configReader; +extern MasterSkillList master_skill_list; +extern RuleManager rule_manager; +extern LuaInterface* lua_interface; + +/* ****************************************************************************** + +DamageSpawn() - Damage equation +MeleeAttack() - Melee auto attacks +RangeAttack() - Range auto attacks +DetermineHit() - ToHit chance as well as defender parry / dodge / block / riposte +CheckInterruptSpell() - Interrupt equations + + +No mitigation equations yet + +****************************************************************************** */ + +/* New Combat code */ + +bool Entity::PrimaryWeaponReady() { + //Can only be ready if no ranged timer + if (GetPrimaryLastAttackTime() == 0 || (Timer::GetCurrentTime2() >= (GetPrimaryLastAttackTime() + GetPrimaryAttackDelay()))) { + if (GetRangeLastAttackTime() == 0 || Timer::GetCurrentTime2() >= (GetRangeLastAttackTime() + GetRangeAttackDelay())) + return true; + } + + return false; +} + +bool Entity::SecondaryWeaponReady() { + //Can only be ready if no ranged timer + // if(IsDualWield() && (GetPrimaryLastAttackTime() + if (IsDualWield() && (GetSecondaryLastAttackTime() == 0 || (Timer::GetCurrentTime2() >= (GetSecondaryLastAttackTime() + GetSecondaryAttackDelay())))) { + if(GetRangeLastAttackTime() == 0 || Timer::GetCurrentTime2() >= (GetRangeLastAttackTime() + GetRangeAttackDelay())) + return true; + } + + return false; +} + +bool Entity::RangeWeaponReady() { + //Ranged can only be ready if no other attack timers are active + if(GetRangeLastAttackTime() == 0 || (Timer::GetCurrentTime2() >= (GetRangeLastAttackTime() + GetRangeAttackDelay()))) { + if((GetPrimaryLastAttackTime() == 0 || (Timer::GetCurrentTime2() >= (GetPrimaryLastAttackTime() + GetPrimaryAttackDelay()))) && (GetSecondaryLastAttackTime() == 0 || Timer::GetCurrentTime2() >= (GetSecondaryLastAttackTime() + GetSecondaryAttackDelay()))){ + if(!IsPlayer() || ((Player*)this)->GetRangeAttack()) { + return true; + } + } + } + + return false; +} + +bool Entity::AttackAllowed(Entity* target, float distance, bool range_attack) { + Entity* attacker = this; + Client* client = 0; + if(!target || IsMezzedOrStunned() || IsDazed()) { + LogWrite(COMBAT__DEBUG, 3, "AttackAllowed", "Failed to attack: no target, mezzed, stunned or dazed"); + return false; + } + + if (IsPlayer()) + client = GetZone()->GetClientBySpawn(this); + + if (IsPet()) + attacker = ((NPC*)this)->GetOwner(); + if (target->IsNPC() && ((NPC*)target)->IsPet()){ + if (((NPC*)target)->GetOwner()) + target = ((NPC*)target)->GetOwner(); + } + + bool pvp_allowed = rule_manager.GetGlobalRule(R_PVP, AllowPVP)->GetBool(); + LogWrite(COMBAT__DEBUG, 3, "PVP", "PVP is: %s", pvp_allowed ? "ENABLED!" : "Disabled."); + + if (attacker == target) { + LogWrite(COMBAT__DEBUG, 3, "AttackAllowed", "Failed to attack: attacker tried to attack himself or his pet."); + return false; + } + + if (IsPlayer() && target->GetAttackable() == 0) { + LogWrite(COMBAT__DEBUG, 3, "AttackAllowed", "Failed to attack: target is not attackable"); + return false; + } + + if (IsPlayer() && target->IsBot()) { + LogWrite(COMBAT__DEBUG, 3, "AttackAllowed", "Failed to attack: players are not allowed to attack bots"); + return false; + } + + if (!pvp_allowed && (attacker->IsPlayer() && target->IsPlayer())) { + LogWrite(COMBAT__DEBUG, 3, "AttackAllowed", "Failed to attack: pvp is not allowed"); + return false; + } + + if (target->GetHP() <= 0) { + LogWrite(COMBAT__DEBUG, 3, "AttackAllowed", "Failed to attack: target is dead"); + return false; + } + + if(range_attack && distance != 0) { + Item* weapon = 0; + Item* ammo = 0; + if(attacker->IsPlayer()) { + weapon = ((Player*)attacker)->GetEquipmentList()->GetItem(EQ2_RANGE_SLOT); + ammo = ((Player*)attacker)->GetEquipmentList()->GetItem(EQ2_AMMO_SLOT); + } + if(weapon && weapon->IsRanged() && ammo && ammo->IsAmmo() && ammo->IsThrown()) { + // Distance is less then min weapon range + if(distance < weapon->ranged_info->range_low) { + if (client) + client->SimpleMessage(CHANNEL_COLOR_COMBAT, "Your target is too close! Move back!"); + LogWrite(COMBAT__DEBUG, 3, "AttackAllowed", "Failed to attack: range attack, target to close"); + return false; + } + // Distance is greater then max weapon range + if (distance > (weapon->ranged_info->range_high + ammo->thrown_info->range)) { + if (client) + client->SimpleMessage(CHANNEL_COLOR_COMBAT, "Your target is too far away! Move closer!"); + LogWrite(COMBAT__DEBUG, 3, "AttackAllowed", "Failed to attack: range attack, target is to far"); + return false; + } + } + } + else if (distance != 0) { + if(distance >= MAX_COMBAT_RANGE) { + LogWrite(COMBAT__DEBUG, 3, "AttackAllowed", "Failed to attack: distance is beyond melee range"); + return false; + } + } + LogWrite(MISC__TODO, 3, "TODO", "Add more AttackAllowed calculations\n\t(%s, function: %s, line #: %i)", __FILE__, __FUNCTION__, __LINE__); + return true; +} + +void Entity::MeleeAttack(Spawn* victim, float distance, bool primary, bool multi_attack) { + if(!victim) + return; + + int8 damage_type = 0; + int32 min_damage = 0; + int32 max_damage = 0; + if(primary) { + damage_type = GetPrimaryWeaponType(); + min_damage = GetPrimaryWeaponMinDamage(); + max_damage = GetPrimaryWeaponMaxDamage(); + } + else { + damage_type = GetSecondaryWeaponType(); + min_damage = GetSecondaryWeaponMinDamage(); + max_damage = GetSecondaryWeaponMaxDamage(); + } + if (IsStealthed() || IsInvis()) + CancelAllStealth(); + + + int8 hit_result = DetermineHit(victim, damage_type, 0, false); + if(hit_result == DAMAGE_PACKET_RESULT_SUCCESSFUL){ + /*if(GetAdventureClass() == MONK){ + max_damage*=3; + crit_chance = GetLevel()/4+5; + } + else if(GetAdventureClass() == BRUISER){ + min_damage = GetLevel(); + max_damage*=3; + crit_chance = GetLevel()/3+5; + } + if(rand()%100 <=crit_chance){ + max_damage*= 2; + DamageSpawn((Entity*)victim, DAMAGE_PACKET_TYPE_SIMPLE_CRIT_DMG, damage_type, min_damage, max_damage, 0); + } + else*/ + DamageSpawn((Entity*)victim, DAMAGE_PACKET_TYPE_SIMPLE_DAMAGE, damage_type, min_damage, max_damage, 0); + if (!multi_attack) { + CheckProcs(PROC_TYPE_OFFENSIVE, victim); + CheckProcs(PROC_TYPE_PHYSICAL_OFFENSIVE, victim); + } + } + else{ + + GetZone()->SendDamagePacket(this, victim, DAMAGE_PACKET_TYPE_SIMPLE_DAMAGE, hit_result, damage_type, 0, 0); + if(hit_result == DAMAGE_PACKET_RESULT_RIPOSTE && victim->IsEntity()) + ((Entity*)victim)->MeleeAttack(this, distance, true); + } + + //Multi Attack roll + if(!multi_attack){ + float multi_attack = info_struct.multi_attack; + if(multi_attack > 0){ + float chance = multi_attack; + if (multi_attack > 100){ + int8 automatic_multi = (int8)floor((float)(multi_attack / 100)); + chance = (multi_attack - (floor((float) ((multi_attack / 100) * 100)))); + while(automatic_multi > 0){ + MeleeAttack(victim, 100, primary, true); + automatic_multi--; + } + } + if (MakeRandomFloat(0, 100) <= chance) + MeleeAttack(victim, 100, primary, true); + } + } + + //Apply attack speed mods + if(!multi_attack) + SetAttackDelay(primary); + + + if(victim->IsNPC() && victim->EngagedInCombat() == false) { + ((NPC*)victim)->AddHate(this, 50); + } + + if (victim->IsEntity() && victim->GetHP() > 0 && ((Entity*)victim)->HasPet()) { + Entity* pet = 0; + bool AddHate = false; + if (victim->IsPlayer()) { + if (((Player*)victim)->GetInfoStruct()->pet_behavior & 1) + AddHate = true; + } + else + AddHate = true; + + if (AddHate) { + pet = ((Entity*)victim)->GetPet(); + if (pet) + pet->AddHate(this, 1); + pet = ((Entity*)victim)->GetCharmedPet(); + if (pet) + pet->AddHate(this, 1); + } + } +} + +void Entity::RangeAttack(Spawn* victim, float distance, Item* weapon, Item* ammo, bool multi_attack) { + if(!victim) + return; + + if(weapon && weapon->IsRanged() && ammo && ammo->IsAmmo() && ammo->IsThrown()) { + if(weapon->ranged_info->range_low <= distance && (weapon->ranged_info->range_high + ammo->thrown_info->range) >= distance) { + int8 hit_result = DetermineHit(victim, ammo->thrown_info->damage_type, ammo->thrown_info->hit_bonus, false); + if(hit_result == DAMAGE_PACKET_RESULT_SUCCESSFUL) { + DamageSpawn((Entity*)victim, DAMAGE_PACKET_TYPE_RANGE_DAMAGE, ammo->thrown_info->damage_type, weapon->ranged_info->weapon_info.damage_low3, weapon->ranged_info->weapon_info.damage_high3+ammo->thrown_info->damage_modifier, 0); + if (!multi_attack) { + CheckProcs(PROC_TYPE_OFFENSIVE, victim); + CheckProcs(PROC_TYPE_PHYSICAL_OFFENSIVE, victim); + } + } + else + GetZone()->SendDamagePacket(this, victim, DAMAGE_PACKET_TYPE_RANGE_DAMAGE, hit_result, ammo->thrown_info->damage_type, 0, 0); + + // If is a player subtract ammo + if (IsPlayer()) { + if (ammo->details.count > 1) { + ammo->details.count -= 1; + ammo->save_needed = true; + } + else + ((Player*)this)->equipment_list.RemoveItem(ammo->details.slot_id, true); + + Client* client = GetZone()->GetClientBySpawn(this); + EQ2Packet* outapp = ((Player*)this)->GetEquipmentList()->serialize(client->GetVersion()); + if(outapp) + client->QueuePacket(outapp); + } + + if(victim->IsNPC() && victim->EngagedInCombat() == false) { + ((NPC*)victim)->AddHate(this, 50); + } + + if (victim->IsEntity() && victim->GetHP() > 0 && ((Entity*)victim)->HasPet()) { + Entity* pet = 0; + bool AddHate = false; + if (victim->IsPlayer()) { + if (((Player*)victim)->GetInfoStruct()->pet_behavior & 1) + AddHate = true; + } + else + AddHate = true; + + if (AddHate) { + pet = ((Entity*)victim)->GetPet(); + if (pet) + pet->AddHate(this, 1); + pet = ((Entity*)victim)->GetCharmedPet(); + if (pet) + pet->AddHate(this, 1); + } + } + // Check Ranged attack proc + CheckProcs(PROC_TYPE_RANGED_ATTACK, victim); + + // Check Ranged defence proc + if (victim->IsEntity()) + ((Entity*)victim)->CheckProcs(PROC_TYPE_RANGED_DEFENSE, this); + + SetRangeLastAttackTime(Timer::GetCurrentTime2()); + } + } + //Multi Attack roll + if(!multi_attack){ + float multi_attack = info_struct.multi_attack; + if(multi_attack > 0){ + float chance = multi_attack; + if (multi_attack > 100){ + int8 automatic_multi = (int8)floor((float)(multi_attack / 100)); + chance = (multi_attack - (floor((float)(multi_attack / 100) * 100))); + while(automatic_multi > 0){ + RangeAttack(victim, 100, weapon, ammo, true); + automatic_multi--; + } + } + if (MakeRandomFloat(0, 100) <= chance) + RangeAttack(victim, 100, weapon, ammo, true); + } + } + + //Apply attack speed mods + if(!multi_attack) + SetAttackDelay(false, true); +} + +bool Entity::SpellAttack(Spawn* victim, float distance, LuaSpell* luaspell, int8 damage_type, int32 low_damage, int32 high_damage, int8 crit_mod, bool no_calcs){ + if(!victim || !luaspell || !luaspell->spell) + return false; + + Spell* spell = luaspell->spell; + float bonus = 0; + Skill* skill = nullptr; + if(spell->GetSpellData()->resistibility > 0) + bonus -= (1 - spell->GetSpellData()->resistibility)*100; + skill = master_skill_list.GetSkill(spell->GetSpellData()->mastery_skill); + if(skill){ + skill = GetSkillByName(skill->name.data.c_str(), true); + if(skill) + bonus += skill->current_val / 25; + } + + int8 hit_result = 0; + bool is_tick = false; // if spell is already active, this is a tick + if (GetZone()->GetSpellProcess()->GetActiveSpells()->count(luaspell)){ + hit_result = DAMAGE_PACKET_RESULT_SUCCESSFUL; + is_tick = true; + } + else if(spell->GetSpellData()->type == SPELL_BOOK_TYPE_COMBAT_ART) + hit_result = DetermineHit(victim, damage_type, 0, false); + else + hit_result = DetermineHit(victim, damage_type, 0, true); + + if(hit_result == DAMAGE_PACKET_RESULT_SUCCESSFUL) { + luaspell->last_spellattack_hit = true; + //If this spell is a tick and has already crit, force the tick to crit + if(is_tick){ + if(luaspell->crit) + crit_mod = 1; + else + crit_mod = 2; + } + if(DamageSpawn((Entity*)victim, DAMAGE_PACKET_TYPE_SPELL_DAMAGE, damage_type, low_damage, high_damage, spell->GetName(), crit_mod, is_tick, no_calcs) && !luaspell->crit) + luaspell->crit = true; + CheckProcs(PROC_TYPE_OFFENSIVE, victim); + CheckProcs(PROC_TYPE_MAGICAL_OFFENSIVE, victim); + + if(spell->GetSpellData()->success_message.length() > 0){ + Client* client = nullptr; + if(IsPlayer()) + client = GetZone()->GetClientBySpawn(this); + if(client){ + string success_message = spell->GetSpellData()->success_message; + if(success_message.find("%t") < 0xFFFFFFFF) + success_message.replace(success_message.find("%t"), 2, victim->GetName()); + client->Message(CHANNEL_COLOR_SPELL, success_message.c_str()); + //commented out the following line as it was causing a duplicate message EmemJR 5/4/2019 + //GetZone()->SendDamagePacket(this, victim, DAMAGE_PACKET_TYPE_SPELL_DAMAGE, hit_result, damage_type, 0, spell->GetName()); + } + } + if(spell->GetSpellData()->effect_message.length() > 0){ + string effect_message = spell->GetSpellData()->effect_message; + if(effect_message.find("%t") < 0xFFFFFFFF) + effect_message.replace(effect_message.find("%t"), 2, victim->GetName()); + GetZone()->SimpleMessage(CHANNEL_COLOR_SPELL_EFFECT, effect_message.c_str(), victim, 50); + } + } + else { + if(hit_result == DAMAGE_PACKET_RESULT_RESIST) + luaspell->resisted = true; + if(victim->IsNPC()) + ((NPC*)victim)->AddHate(this, 5); + luaspell->last_spellattack_hit = false; + GetZone()->SendDamagePacket(this, victim, DAMAGE_PACKET_TYPE_SPELL_DAMAGE, hit_result, damage_type, 0, spell->GetName()); + } + if(EngagedInCombat() == false) + { + LogWrite(MISC__TODO, 1, "TODO", "//It would probably be better to add a column to the spells table for 'starts autoattack'\nfile: %s, func: %s, Line: %i", __FILE__, __FUNCTION__, __LINE__); + if(GetInfoStruct()->class1 == COMMONER || + GetInfoStruct()->class1 == FIGHTER || + GetInfoStruct()->class1 == WARRIOR || + GetInfoStruct()->class1 == GUARDIAN || + GetInfoStruct()->class1 == BERSERKER || + GetInfoStruct()->class1 == BRAWLER || + GetInfoStruct()->class1 == MONK || + GetInfoStruct()->class1 == BRUISER || + GetInfoStruct()->class1 == CRUSADER || + GetInfoStruct()->class1 == SHADOWKNIGHT || + GetInfoStruct()->class1 == PALADIN || + GetInfoStruct()->class1 == SCOUT || + GetInfoStruct()->class1 == ROGUE || + GetInfoStruct()->class1 == SWASHBUCKLER || + GetInfoStruct()->class1 == BRIGAND || + GetInfoStruct()->class1 == BARD || + GetInfoStruct()->class1 == TROUBADOR || + GetInfoStruct()->class1 == DIRGE || + GetInfoStruct()->class1 == PREDATOR || + GetInfoStruct()->class1 == RANGER || + GetInfoStruct()->class1 == ASSASSIN || + GetInfoStruct()->class1 == ANIMALIST || + GetInfoStruct()->class1 == BEASTLORD || + GetInfoStruct()->class1 == SHAPER || + GetInfoStruct()->class1 == CHANNELER) //note: it would probably be better to add a column to the spells table for "starts autoattack". + { + if (victim->IsNPC()) + ((NPC*)victim)->AddHate(this, 5); + else + InCombat(true); + } + } + + if (victim->IsEntity() && victim->GetHP() > 0 && ((Entity*)victim)->HasPet()) { + Entity* pet = 0; + bool AddHate = false; + if (victim->IsPlayer()) { + if (((Player*)victim)->GetInfoStruct()->pet_behavior & 1) + AddHate = true; + } + else + AddHate = true; + + if (AddHate) { + pet = ((Entity*)victim)->GetPet(); + if (pet) + pet->AddHate(this, 1); + pet = ((Entity*)victim)->GetCharmedPet(); + if (pet) + pet->AddHate(this, 1); + } + } + + return true; +} + +bool Entity::ProcAttack(Spawn* victim, int8 damage_type, int32 low_damage, int32 high_damage, string name, string success_msg, string effect_msg) { + int8 hit_result = DetermineHit(victim, damage_type, 0, true); + + if (hit_result == DAMAGE_PACKET_RESULT_SUCCESSFUL) { + DamageSpawn((Entity*)victim, DAMAGE_PACKET_TYPE_SPELL_DAMAGE, damage_type, low_damage, high_damage, name.c_str()); + + if (success_msg.length() > 0) { + Client* client = 0; + if(IsPlayer()) + client = GetZone()->GetClientBySpawn(this); + if(client) { + if(success_msg.find("%t") < 0xFFFFFFFF) + success_msg.replace(success_msg.find("%t"), 2, victim->GetName()); + client->Message(CHANNEL_COLOR_SPELL, success_msg.c_str()); + } + } + if (effect_msg.length() > 0) { + if(effect_msg.find("%t") < 0xFFFFFFFF) + effect_msg.replace(effect_msg.find("%t"), 2, victim->GetName()); + GetZone()->SimpleMessage(CHANNEL_COLOR_SPELL_EFFECT, effect_msg.c_str(), victim, 50); + } + } + else { + if(victim->IsNPC()) + ((NPC*)victim)->AddHate(this, 5); + GetZone()->SendDamagePacket(this, victim, DAMAGE_PACKET_TYPE_SPELL_DAMAGE, hit_result, damage_type, 0, name.c_str()); + } + + + if (victim->IsEntity() && victim->GetHP() > 0 && ((Entity*)victim)->HasPet()) { + Entity* pet = 0; + bool AddHate = false; + if (victim->IsPlayer()) { + if (((Player*)victim)->GetInfoStruct()->pet_behavior & 1) + AddHate = true; + } + else + AddHate = true; + + if (AddHate) { + pet = ((Entity*)victim)->GetPet(); + if (pet) + pet->AddHate(this, 1); + pet = ((Entity*)victim)->GetCharmedPet(); + if (pet) + pet->AddHate(this, 1); + } + } + + return true; +} + +bool Entity::SpellHeal(Spawn* target, float distance, LuaSpell* luaspell, string heal_type, int32 low_heal, int32 high_heal, int8 crit_mod, bool no_calcs){ + if(!target || !luaspell || !luaspell->spell) + return false; + + if (!target->Alive()) + return false; + + if (target->GetHP() == target->GetTotalHP()) + return true; + + int32 heal_amt = 0; + bool crit = false; + + if(high_heal < low_heal) + high_heal = low_heal; + if(high_heal == low_heal) + heal_amt = high_heal; + else + heal_amt = MakeRandomInt(low_heal, high_heal); + + if(!no_calcs){ + // if spell is already active, this is a tick + bool is_tick = GetZone()->GetSpellProcess()->GetActiveSpells()->count(luaspell); + + //if is a tick and the spell has crit, force crit, else disable + if(is_tick){ + if(luaspell->crit) + crit_mod = 1; + else + crit_mod = 2; + } + + if (heal_amt > 0){ + //int32 base_roll = heal_amt; + //potency mod + heal_amt *= (stats[ITEM_STAT_POTENCY] / 100 + 1); + + //primary stat mod, insert forula here when done + //heal_amt += base_roll * (GetPrimaryStat() + + //Ability Modifier can only be up to half of base roll + potency and primary stat bonus + heal_amt += (int32)min(info_struct.ability_modifier, (float)(heal_amt / 2)); + } + + if(!crit_mod || crit_mod == 1){ + if(crit_mod == 1) + crit = true; + else { + // Crit Roll + float chance = max((float)0, info_struct.crit_chance); + crit = (MakeRandomFloat(0, 100) <= chance); + } + if(crit){ + //Apply total crit multiplier with crit bonus + heal_amt *= (info_struct.crit_bonus / 100) + 1.3; + if(luaspell->spell) + luaspell->crit = true; + } + } + } + + int16 type = 0; + if (heal_type == "Heal") { + if(crit) + type = HEAL_PACKET_TYPE_CRIT_HEAL; + else + type = HEAL_PACKET_TYPE_SIMPLE_HEAL; + //apply heal + + if (target->GetHP() + (sint32)heal_amt > target->GetTotalHP()) + heal_amt = target->GetTotalHP() - target->GetHP(); + target->SetHP(target->GetHP() + heal_amt); + + /* + if (target->GetHP() + (sint32)heal_amt > target->GetTotalHP()) + target->SetHP(target->GetTotalHP()); + else + target->SetHP(target->GetHP() + heal_amt); + */ + } + else if (heal_type == "Power"){ + if(crit) + type = HEAL_PACKET_TYPE_CRIT_MANA; + else + type = HEAL_PACKET_TYPE_SIMPLE_MANA; + //give power + if (target->GetPower() + (sint32)heal_amt > target->GetTotalPower()) + heal_amt = target->GetTotalPower() - target->GetPower(); + target->SetPower(GetPower() + heal_amt); + + /* + if (target->GetPower() + (sint32)heal_amt > target->GetTotalPower()) + target->SetPower(target->GetTotalPower()); + else + target->SetPower(GetPower() + heal_amt); + */ + } + /*else if (heal_type == "Savagery"){ + if(crit) + type = HEAL_PACKET_TYPE_CRIT_SAVAGERY; + else + type = HEAL_PACKET_TYPE_SAVAGERY; + } + else if (heal_type == "Repair"){ + if(crit) + type = HEAL_PACKET_TYPE_CRIT_REPAIR; + else + type = HEAL_PACKET_TYPE_REPAIR; + }*/ + else{ //default to heal if type cannot be determined + if(crit) + type = HEAL_PACKET_TYPE_CRIT_HEAL; + else + type = HEAL_PACKET_TYPE_SIMPLE_HEAL; + + if (target->GetHP() + (sint32)heal_amt > target->GetTotalHP()) + heal_amt = target->GetTotalHP() - target->GetHP(); + target->SetHP(target->GetHP() + heal_amt); + /* + if (target->GetHP() + (sint32)heal_amt > target->GetTotalHP()) + target->SetHP(target->GetTotalHP()); + else + target->SetHP(target->GetHP() + heal_amt); + */ + } + + target->GetZone()->TriggerCharSheetTimer(); + if (heal_amt > 0) + GetZone()->SendHealPacket(this, target, type, heal_amt, luaspell->spell->GetName()); + CheckProcs(PROC_TYPE_HEALING, target); + CheckProcs(PROC_TYPE_BENEFICIAL, target); + + if (target->IsEntity()) { + int32 hate_amt = heal_amt / 2; + set::iterator itr; + for (itr = ((Entity*)target)->HatedBy.begin(); itr != ((Entity*)target)->HatedBy.end(); itr++) { + Spawn* spawn = GetZone()->GetSpawnByID(*itr); + if (spawn && spawn->IsEntity()) { + ((Entity*)spawn)->AddHate(this, hate_amt); + } + } + } + + return true; +} + +int8 Entity::DetermineHit(Spawn* victim, int8 damage_type, float ToHitBonus, bool spell){ + if(!victim) { + return DAMAGE_PACKET_RESULT_MISS; + } + + if(victim->GetInvulnerable()) { + return DAMAGE_PACKET_RESULT_INVULNERABLE; + } + + if(!victim->IsEntity() || (!spell && BehindTarget(victim))) { + return DAMAGE_PACKET_RESULT_SUCCESSFUL; + } + + float bonus = ToHitBonus; + Skill* skill = GetSkillByWeaponType(damage_type, true); + if (skill) + bonus += skill->current_val / 25; + if (victim->IsEntity()) + bonus -= ((Entity*)victim)->GetDamageTypeResistPercentage(damage_type); + + + Entity* entity_victim = (Entity*)victim; + float chance = 80 + bonus; //80% base chance that the victim will get hit (plus bonus) + sint16 roll_chance = 100; + if(skill) + roll_chance -= skill->current_val / 25; + + if(!spell){ // melee or range attack + skill = GetSkillByName("Offense", true); //add this skill for NPCs + if(skill) + roll_chance -= skill->current_val / 25; + + skill = entity_victim->GetSkillByName("Defense", true); + if (skill) + chance -= skill->current_val / 25; + + if(rand()%roll_chance >= (chance - entity_victim->GetAgi()/50)){ + entity_victim->CheckProcs(PROC_TYPE_EVADE, this); + return DAMAGE_PACKET_RESULT_DODGE;//successfully dodged + } + if(rand() % roll_chance >= chance) + return DAMAGE_PACKET_RESULT_MISS; //successfully avoided + + skill = entity_victim->GetSkillByName("Parry", true); + if(skill){ + if(rand()%roll_chance >= (chance - 5 - skill->current_val/25)){ //successful parry + if(rand()%100 <= 20) { + entity_victim->CheckProcs(PROC_TYPE_RIPOSTE, this); + return DAMAGE_PACKET_RESULT_RIPOSTE; + } + entity_victim->CheckProcs(PROC_TYPE_PARRY, this); + return DAMAGE_PACKET_RESULT_PARRY; + } + } + + skill = entity_victim->GetSkillByName("Deflection", true); + if(skill){ + if(rand()%100 >= (chance - skill->current_val/25)) { //successfully deflected + return DAMAGE_PACKET_RESULT_DEFLECT; + } + } + } + else{ + skill = entity_victim->GetSkillByName("Spell Avoidance", true); + if(skill) + chance -= skill->current_val / 25; + if(rand()%roll_chance >= chance) { + return DAMAGE_PACKET_RESULT_RESIST; //successfully resisted + } + } + + return DAMAGE_PACKET_RESULT_SUCCESSFUL; +} + +float Entity::GetDamageTypeResistPercentage(int8 damage_type) { + float ret = 1; + + switch(damage_type) { + case DAMAGE_PACKET_DAMAGE_TYPE_CRUSH: + case DAMAGE_PACKET_DAMAGE_TYPE_PIERCE: + case DAMAGE_PACKET_DAMAGE_TYPE_SLASH: { + Skill* skill = GetSkillByName("Defense", true); + if(skill) + ret += skill->current_val / 25; + if(IsNPC()) + LogWrite(COMBAT__DEBUG, 3, "Combat", "DamageType: Crush/Pierce/Slash (%i)", damage_type, ret); + break; + } + case DAMAGE_PACKET_DAMAGE_TYPE_HEAT: { + ret += GetInfoStruct()->heat / 50; + LogWrite(COMBAT__DEBUG, 3, "Combat", "DamageType: Heat (%i), Amt: %.2f", damage_type, ret); + break; + } + case DAMAGE_PACKET_DAMAGE_TYPE_COLD: { + ret += GetInfoStruct()->cold / 50; + LogWrite(COMBAT__DEBUG, 3, "Combat", "DamageType: Cold (%i), Amt: %.2f", damage_type, ret); + break; + } + case DAMAGE_PACKET_DAMAGE_TYPE_MAGIC: { + ret += GetInfoStruct()->magic / 50; + LogWrite(COMBAT__DEBUG, 3, "Combat", "DamageType: Magic (%i), Amt: %.2f", damage_type, ret); + break; + } + case DAMAGE_PACKET_DAMAGE_TYPE_MENTAL: { + ret += GetInfoStruct()->mental / 50; + LogWrite(COMBAT__DEBUG, 3, "Combat", "DamageType: Mental (%i), Amt: %.2f", damage_type, ret); + break; + } + case DAMAGE_PACKET_DAMAGE_TYPE_DIVINE: { + ret += GetInfoStruct()->divine / 50; + LogWrite(COMBAT__DEBUG, 3, "Combat", "DamageType: Divine (%i), Amt: %.2f", damage_type, ret); + break; + } + case DAMAGE_PACKET_DAMAGE_TYPE_DISEASE: { + ret += GetInfoStruct()->disease / 50; + LogWrite(COMBAT__DEBUG, 3, "Combat", "DamageType: Disease (%i), Amt: %.2f", damage_type, ret); + break; + } + case DAMAGE_PACKET_DAMAGE_TYPE_POISON: { + ret += GetInfoStruct()->poison / 50; + LogWrite(COMBAT__DEBUG, 3, "Combat", "DamageType: Poison (%i), Amt: %.2f", damage_type, ret); + break; + } + } + + return ret; +} + +Skill* Entity::GetSkillByWeaponType(int8 type, bool update) { + switch(type) { + case DAMAGE_PACKET_DAMAGE_TYPE_SLASH: // slash + return GetSkillByName("Slashing", update); + case DAMAGE_PACKET_DAMAGE_TYPE_CRUSH: // crush + return GetSkillByName("Crushing", update); + case DAMAGE_PACKET_DAMAGE_TYPE_PIERCE: // pierce + return GetSkillByName("Piercing", update); + case DAMAGE_PACKET_DAMAGE_TYPE_HEAT: + case DAMAGE_PACKET_DAMAGE_TYPE_COLD: + case DAMAGE_PACKET_DAMAGE_TYPE_MAGIC: + case DAMAGE_PACKET_DAMAGE_TYPE_MENTAL: + case DAMAGE_PACKET_DAMAGE_TYPE_DIVINE: + case DAMAGE_PACKET_DAMAGE_TYPE_DISEASE: + case DAMAGE_PACKET_DAMAGE_TYPE_POISON: + return GetSkillByName("Disruption", update); + } + + return 0; +} + +bool Entity::DamageSpawn(Entity* victim, int8 type, int8 damage_type, int32 low_damage, int32 high_damage, const char* spell_name, int8 crit_mod, bool is_tick, bool no_calcs) { + if(!victim || victim->GetHP() == 0) + return false; + + int8 hit_result = 0; + int16 blow_type = 0; + sint32 damage = 0; + bool crit = false; + + if(low_damage > high_damage) + high_damage = low_damage; + if(low_damage == high_damage) + damage = low_damage; + else + damage = MakeRandomInt(low_damage, high_damage); + + if(!no_calcs) { + //this can be simplified by taking out the / 2, but I wanted the damage to be more consistent + //damage = (rand()%((int)(high_damage/2-low_damage/2) + low_damage/2)) + (rand()%((int)(high_damage/2-low_damage/2) + low_damage/2)); + //damage = (rand()%((int)(high_damage-low_damage) + low_damage)) + (rand()%((int)(high_damage-low_damage) + low_damage)); + + //DPS mod is only applied to auto attacks + if (type == DAMAGE_PACKET_TYPE_SIMPLE_DAMAGE || type == DAMAGE_PACKET_TYPE_RANGE_DAMAGE ) { + damage *= (info_struct.dps_multiplier); + } + //Potency and ability mod is only applied to spells/CAs + else { + // Potency mod + damage *= ((stats[ITEM_STAT_POTENCY] / 100) + 1); + + // Ability mod can only give up to half of damage after potency + int32 mod = (int32)min(info_struct.ability_modifier, (float)(damage / 2)); + damage += mod; + } + + + if(!crit_mod || crit_mod == 1){ + //force crit if crit_mod == 1 + if(crit_mod == 1) + crit = true; + + // Crit Roll + else { + float chance = max((float)0, (info_struct.crit_chance - victim->stats[ITEM_STAT_CRITAVOIDANCE])); + if (MakeRandomFloat(0, 100) <= chance) + crit = true; + } + if(crit){ + //Apply total crit multiplier with crit bonus + if(info_struct.crit_bonus > 0) + damage *= (1.3 + (info_struct.crit_bonus / 100)); + else + damage *= 1.3; + + // Change packet type to crit + if (type == DAMAGE_PACKET_TYPE_SIMPLE_DAMAGE) + type = DAMAGE_PACKET_TYPE_SIMPLE_CRIT_DMG; + else if (type == DAMAGE_PACKET_TYPE_SPELL_DAMAGE) + type = DAMAGE_PACKET_TYPE_SPELL_CRIT_DMG; + } + } + + // TODO: Mitigation equation from http://www.guildportal.com/Guild.aspx?GuildID=20881&TabID=189653&ForumID=95908&TopicID=9024250 + + } + + LogWrite(MISC__TODO, 3, "TODO", "Take players armor into account\nfile: %s, func: %s, line: %i)", __FILE__, __FUNCTION__, __LINE__); + + if(damage <= 0){ + hit_result = DAMAGE_PACKET_RESULT_NO_DAMAGE; + damage = 0; + } + else{ + hit_result = DAMAGE_PACKET_RESULT_SUCCESSFUL; + GetZone()->CallSpawnScript(victim, SPAWN_SCRIPT_HEALTHCHANGED, this); + damage = victim->CheckWards(damage, damage_type); + victim->TakeDamage(damage); + victim->CheckProcs(PROC_TYPE_DAMAGED, this); + + if (IsPlayer()) { + switch (damage_type) { + case DAMAGE_PACKET_DAMAGE_TYPE_SLASH: + case DAMAGE_PACKET_DAMAGE_TYPE_CRUSH: + case DAMAGE_PACKET_DAMAGE_TYPE_PIERCE: + if (((Player*)this)->GetPlayerStatisticValue(STAT_PLAYER_HIGHEST_MELEE_HIT) < damage) + ((Player*)this)->UpdatePlayerStatistic(STAT_PLAYER_HIGHEST_MELEE_HIT, damage, true); + victim->CheckProcs(PROC_TYPE_DAMAGED_MELEE, this); + break; + case DAMAGE_PACKET_DAMAGE_TYPE_HEAT: + case DAMAGE_PACKET_DAMAGE_TYPE_COLD: + case DAMAGE_PACKET_DAMAGE_TYPE_MAGIC: + case DAMAGE_PACKET_DAMAGE_TYPE_MENTAL: + case DAMAGE_PACKET_DAMAGE_TYPE_DIVINE: + case DAMAGE_PACKET_DAMAGE_TYPE_DISEASE: + case DAMAGE_PACKET_DAMAGE_TYPE_POISON: + if (((Player*)this)->GetPlayerStatisticValue(STAT_PLAYER_HIGHEST_MAGIC_HIT) < damage) + ((Player*)this)->UpdatePlayerStatistic(STAT_PLAYER_HIGHEST_MAGIC_HIT, damage, true); + victim->CheckProcs(PROC_TYPE_DAMAGED_MAGIC, this); + break; + } + } + } + if(victim->IsNPC() && victim->GetHP() > 0) + ((Entity*)victim)->AddHate(this, damage); + + if (damage > 0) { + GetZone()->SendDamagePacket(this, victim, type, hit_result, damage_type, damage, spell_name); + if (IsStealthed() || IsInvis()) + CancelAllStealth(); + + if (victim->IsEntity()) + ((Entity*)victim)->CheckInterruptSpell(this); + } + + if (victim->GetHP() <= 0) + KillSpawn(victim, damage_type, blow_type); + else { + victim->CheckProcs(PROC_TYPE_DEFENSIVE, this); + if (spell_name) + victim->CheckProcs(PROC_TYPE_MAGICAL_DEFENSIVE, this); + else + victim->CheckProcs(PROC_TYPE_PHYSICAL_DEFENSIVE, this); + } + + return crit; +} + +void Entity::AddHate(Entity* attacker, sint32 hate) { + if(!attacker || GetHP() <= 0 || attacker->GetHP() <= 0) + return; + + // If a players pet and protect self is off + if (IsPet() && ((NPC*)this)->GetOwner()->IsPlayer() && ((((Player*)((NPC*)this)->GetOwner())->GetInfoStruct()->pet_behavior & 2) == 0)) + return; + + if (IsNPC()) { + LogWrite(COMBAT__DEBUG, 3, "Combat", "Add NPC_AI Hate: Victim '%s', Attacker '%s', Hate: %i", GetName(), attacker->GetName(), hate); + ((NPC*)this)->Brain()->AddHate(attacker, hate); + // if encounter size is 0 then add the attacker to the encounter + if (((NPC*)this)->Brain()->GetEncounterSize() == 0) + ((NPC*)this)->Brain()->AddToEncounter(attacker); + } + + if (attacker->GetThreatTransfer() && hate > 0) { + Spawn* transfer_target = (Entity*)GetZone()->GetSpawnByID(attacker->GetThreatTransfer()->Target); + if (transfer_target && transfer_target->IsEntity()) { + sint32 transfered_hate = hate * (GetThreatTransfer()->Amount / 100); + hate -= transfered_hate; + this->AddHate((Entity*)transfer_target, transfered_hate); + } + } + + // If pet is adding hate add some to the pets owner as well + if (attacker->IsNPC() && ((NPC*)attacker)->IsPet()) + AddHate(((NPC*)attacker)->GetOwner(), 1); + + // If player and player has a pet and protect master is set add hate to the pet + if (IsPlayer() && HasPet() && (((Player*)this)->GetInfoStruct()->pet_behavior & 1)) { + // If we have a combat pet add hate to it + if (((Player*)this)->GetPet()) + AddHate(((Player*)this)->GetPet(), 1); + if (((Player*)this)->GetCharmedPet()) + AddHate(((Player*)this)->GetCharmedPet(), 1); + } + + // If this spawn has a spawn group then add the attacker to the hate list of the other + // group members if not already in their list + if (HasSpawnGroup()) { + vector* group = GetSpawnGroup(); + vector::iterator itr; + for (itr = group->begin(); itr != group->end(); itr++) { + if (!(*itr)->IsNPC()) + continue; + NPC* spawn = (NPC*)(*itr); + if (spawn->Brain()->GetHate(attacker) == 0) + spawn->Brain()->AddHate(attacker, 1); + } + safe_delete(group); + } +} + +bool Entity::CheckInterruptSpell(Entity* attacker) { + if(!IsCasting()) + return false; + + Spell* spell = GetZone()->GetSpell(this); + if(!spell || spell->GetSpellData()->interruptable == 0) + return false; + + //base of 30 percent chance to continue casting if attacked (RULE) + int8 percent = 30; + Skill* skill = GetSkillByName("Focus", true); + if(skill) + percent += ((skill->current_val + 1)/6); + if(MakeRandomInt(1, 100) > percent) { + LogWrite(COMBAT__DEBUG, 0, "Combat", "'%s' interrupted spell for '%s': %i%%", attacker->GetName(), GetName(), percent); + GetZone()->Interrupted(this, attacker, SPELL_ERROR_INTERRUPTED); + return true; + } + + LogWrite(COMBAT__DEBUG, 0, "Combat", "'%s' failed to interrupt spell for '%s': %i%%", attacker->GetName(), GetName(), percent); + return false; +} + +void Entity::KillSpawn(Spawn* dead, int8 damage_type, int16 kill_blow_type) { + if(!dead) + return; + + if (IsPlayer()) { + Client* client = GetZone()->GetClientBySpawn(this); + PacketStruct* packet = configReader.getStruct("WS_EnterCombat", client->GetVersion()); + if (packet) { + client->QueuePacket(packet->serialize()); + } + safe_delete(packet); + + ((Player*)this)->InCombat(false); + } + + if (IsPlayer() && dead->IsEntity()) + GetZone()->GetSpellProcess()->KillHOBySpawnID(dead->GetID()); + + //if (dead->IsEntity()) same code called in zone server + //((Entity*)dead)->InCombat(false); + + if (dead->IsPet()) + ((NPC*)dead)->GetOwner()->DismissPet((NPC*)dead, true); + else if (dead->IsEntity()) { + // remove all pets for this entity + ((Entity*)dead)->DismissPet((NPC*)((Entity*)dead)->GetPet()); + ((Entity*)dead)->DismissPet((NPC*)((Entity*)dead)->GetCharmedPet()); + ((Entity*)dead)->DismissPet((NPC*)((Entity*)dead)->GetDeityPet()); + ((Entity*)dead)->DismissPet((NPC*)((Entity*)dead)->GetCosmeticPet()); + } + + // If not in combat and no one in the encounter list add this killer to the list + if(dead->EngagedInCombat() == false && dead->IsNPC() && ((NPC*)dead)->Brain()->GetEncounterSize() == 0) + ((NPC*)dead)->Brain()->AddToEncounter(this); + + if (IsCasting()) + GetZone()->Interrupted(this, dead, SPELL_ERROR_NOT_ALIVE); + + LogWrite(COMBAT__DEBUG, 3, "Combat", "Killing '%s'", dead->GetName()); + + // Kill movement for the dead npc so the corpse doesn't move + dead->CalculateRunningLocation(true); + + GetZone()->KillSpawn(dead, this, true, damage_type, kill_blow_type); +} + +void Entity::ProcessCombat() { + // This is a virtual function so when a NPC calls this it will use the NPC::ProcessCombat() version + // and a player will use the Player::ProcessCombat() version, leave this function blank. +} + +void NPC::ProcessCombat() { + MBrain.writelock(__FUNCTION__, __LINE__); + // Check to see if it is time to call the AI again + if (GetHP() > 0 && Timer::GetCurrentTime2() >= (m_brain->LastTick() + m_brain->Tick())) { + // Probably never want to use the following log, will spam the console for every NPC in a zone 4 times a second + //LogWrite(NPC_AI__DEBUG, 9, "NPC_AI", "%s is thinking...", GetName()); + m_brain->Think(); + // Set the time for when the brain was last called + m_brain->SetLastTick(Timer::GetCurrentTime2()); + } + MBrain.releasewritelock(__FUNCTION__, __LINE__); +} + +void Player::ProcessCombat() { + // if not in combat OR casting a spell OR dazed OR feared return out + if (!EngagedInCombat() || IsCasting() || IsDazed() || IsFeared()) + return; + + //If no target delete combat_target and return out + Spawn* Target = GetZone()->GetSpawnByID(target); + if (!Target) { + combat_target = 0; + if (target > 0) { + SetTarget(0); + } + return; + } + // If is not an entity return out + if (!Target->IsEntity()) + return; + + // Reset combat target + combat_target = 0; + + if (Target->HasTarget()) { + if (Target->IsPlayer() || (Target->IsNPC() && Target->IsPet() && ((NPC*)Target)->GetOwner()->IsPlayer())){ + Spawn* secondary_target = Target->GetTarget(); + if (secondary_target->IsNPC() && secondary_target->appearance.attackable) { + if (!secondary_target->IsPet() || (secondary_target->IsPet() && ((NPC*)secondary_target)->GetOwner()->IsNPC())) { + combat_target = secondary_target; + } + } + } + } + + // If combat_target wasn't set in the above if set it to the original target + if (!combat_target) + combat_target = Target; + + // this if may not be required as at the min combat_target will be Target, which we already check at the begining + if(!combat_target) + return; + + float distance = 0; + distance = GetDistance(combat_target); + distance -= combat_target->appearance.pos.collision_radius / 10; + distance -= appearance.pos.collision_radius / 10; + + // Check to see if we are doing ranged auto attacks if not check to see if we are in melee range + if (GetRangeAttack()) { + // We are doing ranged auto attacks + + //check to see if we can attack the target AND the ranged weapon is ready + if(AttackAllowed((Entity*)combat_target, distance, true) && RangeWeaponReady()) { + Item* weapon = 0; + Item* ammo = 0; + // Get the currently equiped weapon and ammo for the ranged attack + weapon = GetEquipmentList()->GetItem(EQ2_RANGE_SLOT); + ammo = GetEquipmentList()->GetItem(EQ2_AMMO_SLOT); + LogWrite(COMBAT__DEBUG, 1, "Combat", "Weapon '%s', Ammo '%s'", ( weapon )? weapon->name.c_str() : "None", ( ammo ) ? ammo->name.c_str() : "None"); + + // If weapon and ammo are both valid perform the ranged attack else send a message to the client + if(weapon && ammo) { + LogWrite(COMBAT__DEBUG, 1, "Combat", "Weapon: Primary, Fighter: '%s', Target: '%s', Distance: %.2f", GetName(), combat_target->GetName(), distance); + RangeAttack(combat_target, distance, weapon, ammo); + } + else { + Client* client = GetZone()->GetClientBySpawn(this); + if (client) { + // Need to get messages from live, made these up so the player knows what is wrong in game if weapon or ammo are not valid + if (!ammo) + client->SimpleMessage(CHANNEL_COLOR_YELLOW, "Out of ammo."); + if (!weapon) + client->SimpleMessage(CHANNEL_COLOR_YELLOW, "No ranged weapon found."); + + } + } + } + } + else if(distance <= MAX_COMBAT_RANGE) { + // We are doing melee auto attacks and are within range + + // Check to see if we can attack the target + if(AttackAllowed((Entity*)combat_target)) { + // Check to see if the primary melee weapon is ready + if(PrimaryWeaponReady()) { + // Set the time of the last melee attack with the primary weapon and perform the melee attack with primary weapon + SetPrimaryLastAttackTime(Timer::GetCurrentTime2()); + MeleeAttack(combat_target, distance, true); + } + // Check to see if the secondary weapon is ready + if(SecondaryWeaponReady()) { + // set the time of the last melee attack with the secondary weapon and perform the melee attack with the secondary weapon + SetSecondaryLastAttackTime(Timer::GetCurrentTime2()); + MeleeAttack(combat_target, distance, false); + } + } + } +} + +void Entity::SetAttackDelay(bool primary, bool ranged) { + float mod = CalculateAttackSpeedMod(); + bool dual_wield = IsDualWield(); + + //Note: Capping all attack speed increases at 125% normal speed (from function CalculateAttackSpeedMod()) + //Add 33% longer delay if dual wielding + if(dual_wield && ! ranged) { + if(primary) + SetPrimaryAttackDelay((GetPrimaryWeaponDelay() * 1.33) / mod); + else + SetSecondaryAttackDelay((GetSecondaryWeaponDelay() * 1.33) / mod); + } + else { + if(primary) + SetPrimaryAttackDelay(GetPrimaryWeaponDelay() / mod); + else if(ranged) + SetRangeAttackDelay(GetRangeWeaponDelay() / mod); + else + SetSecondaryAttackDelay(GetSecondaryWeaponDelay() / mod); + } +} + +float Entity::CalculateAttackSpeedMod(){ + float aspeed = info_struct.attackspeed; + + if(aspeed > 0) { + if (aspeed <= 100) + return (aspeed / 100 + 1); + else if (aspeed <= 200) + return 2.25; + } + return 1; +} + +void Entity::AddProc(int8 type, float chance, Item* item, LuaSpell* spell) { + if (type == 0) { + LogWrite(COMBAT__ERROR, 0, "Proc", "Entity::AddProc called with an invalid type."); + return; + } + + if (!item && !spell) { + LogWrite(COMBAT__ERROR, 0, "Proc", "Entity::AddProc must have a valid item or spell."); + return; + } + + MProcList.writelock(__FUNCTION__, __LINE__); + Proc* proc = new Proc(); + proc->chance = chance; + proc->item = item; + proc->spell = spell; + m_procList[type].push_back(proc); + MProcList.releasewritelock(__FUNCTION__, __LINE__); +} + +void Entity::RemoveProc(Item* item, LuaSpell* spell) { + if (!item && !spell) { + LogWrite(COMBAT__ERROR, 0, "Proc", "Entity::RemoveProc must have a valid item or spell."); + return; + } + + MProcList.writelock(__FUNCTION__, __LINE__); + map >::iterator proc_itr; + vector::iterator itr; + for (proc_itr = m_procList.begin(); proc_itr != m_procList.end(); proc_itr++) { + itr = proc_itr->second.begin(); + while (itr != proc_itr->second.end()) { + Proc* proc = *itr; + + if ((item && proc->item == item) || (spell && proc->spell == spell)) { + safe_delete(*itr); + itr = proc_itr->second.erase(itr); + } + else + itr++; + } + } + MProcList.releasewritelock(__FUNCTION__, __LINE__); +} + +bool Entity::CastProc(Proc* proc, int8 type, Spawn* target) { + lua_State* state = 0; + bool item_proc = false; + int8 num_args = 3; + + if (proc->spell) { + state = proc->spell->state; + } + else if (proc->item) { + state = lua_interface->GetItemScript(proc->item->GetItemScript()); + item_proc = true; + } + + if (!state) { + LogWrite(COMBAT__ERROR, 0, "Proc", "No valid lua_State* found"); + return false; + } + + lua_getglobal(state, "proc"); + + if (item_proc) { + num_args++; + lua_interface->SetItemValue(state, proc->item); + } + + lua_interface->SetSpawnValue(state, this); + lua_interface->SetSpawnValue(state, target); + lua_interface->SetInt32Value(state, type); + + /* + Add spell data from db in case of a spell proc here... + */ + if (!item_proc) { + // Append spell data to the param list + vector* data = proc->spell->spell->GetLUAData(); + for(int32 i = 0; i < data->size(); i++) { + switch(data->at(i)->type) { + case 0:{ + lua_interface->SetSInt32Value(proc->spell->state, data->at(i)->int_value); + break; + } + case 1:{ + lua_interface->SetFloatValue(proc->spell->state, data->at(i)->float_value); + break; + } + case 2:{ + lua_interface->SetBooleanValue(proc->spell->state, data->at(i)->bool_value); + break; + } + case 3:{ + lua_interface->SetStringValue(proc->spell->state, data->at(i)->string_value.c_str()); + break; + } + default:{ + LogWrite(SPELL__ERROR, 0, "Spell", "Error: Unknown LUA Type '%i' in Entity::CastProc for Spell '%s'", (int)data->at(i)->type, proc->spell->spell->GetName()); + return false; + } + } + num_args++; + } + } + + if (lua_pcall(state, num_args, 0, 0) != 0) { + LogWrite(COMBAT__ERROR, 0, "Proc", "Unable to call the proc function"); + lua_pop(state, 1); + return false; + } + + return true; +} + +void Entity::CheckProcs(int8 type, Spawn* target) { + if (type == 0) { + LogWrite(COMBAT__ERROR, 0, "Proc", "Entity::CheckProcs called with an invalid type."); + return; + } + + float roll = MakeRandomFloat(0, 100); + + MProcList.readlock(__FUNCTION__, __LINE__); + for (int8 i = 0; i < m_procList[type].size(); i++) { + Proc* proc = m_procList[type].at(i); + if (roll <= proc->chance) + CastProc(proc, type, target); + } + MProcList.releasereadlock(__FUNCTION__, __LINE__); +} + +void Entity::ClearProcs() { + MProcList.writelock(__FUNCTION__, __LINE__); + + map >::iterator proc_itr; + vector::iterator itr; + for (proc_itr = m_procList.begin(); proc_itr != m_procList.end(); proc_itr++) { + itr = proc_itr->second.begin(); + while (itr != proc_itr->second.end()) { + safe_delete(*itr); + itr = proc_itr->second.erase(itr); + } + proc_itr->second.clear(); + } + m_procList.clear(); + + MProcList.releasewritelock(__FUNCTION__, __LINE__); +} diff --git a/EQ2/source/WorldServer/Combat.h b/EQ2/source/WorldServer/Combat.h new file mode 100644 index 000000000..41144fcea --- /dev/null +++ b/EQ2/source/WorldServer/Combat.h @@ -0,0 +1,38 @@ +/* + EQ2Emulator: Everquest II Server Emulator + Copyright (C) 2007 EQ2EMulator Development Team (http://www.eq2emulator.net) + + This file is part of EQ2Emulator. + + EQ2Emulator is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + EQ2Emulator is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with EQ2Emulator. If not, see . +*/ +#ifndef __EQ2_COMBAT_H__ +#define __EQ2_COMBAT_H__ +#include "Player.h" +#include "../common/timer.h" +#include "NPC_AI.h" +#include "MutexList.h" + +#define COMBAT_NORMAL_FIGHTER 0 +#define COMBAT_ADD_FIGHTER 1 +#define COMBAT_REMOVE_FIGHTER 2 +#define MAX_COMBAT_RANGE 3 + +class ZoneServer; +class SpellProcess; +class LuaSpell; + + +#endif + diff --git a/EQ2/source/WorldServer/Commands/Commands.cpp b/EQ2/source/WorldServer/Commands/Commands.cpp new file mode 100644 index 000000000..cafbb0206 --- /dev/null +++ b/EQ2/source/WorldServer/Commands/Commands.cpp @@ -0,0 +1,8696 @@ +/* +EQ2Emulator: Everquest II Server Emulator +Copyright (C) 2007 EQ2EMulator Development Team (http://www.eq2emulator.net) + +This file is part of EQ2Emulator. + +EQ2Emulator is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +EQ2Emulator is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with EQ2Emulator. If not, see . +*/ +#include +#include "Commands.h" +#include "../ClientPacketFunctions.h" +#include "../../common/version.h" +#include "../../common/seperator.h" +#include "../../common/servertalk.h" +#include "../WorldDatabase.h" +#include "../World.h" +#include "../../common/ConfigReader.h" +#include "../VisualStates.h" +#include "../../common/debug.h" +#include "../LuaInterface.h" +#include "../Quests.h" +#include "../client.h" +#include "../NPC.h" +#include "../Guilds/Guild.h" +#include "../SpellProcess.h" +#include "../Tradeskills/Tradeskills.h" +#include "../../common/Log.h" +#include "../../common/MiscFunctions.h" +#include "../Languages.h" +#include "../IRC/IRC.h" +#include "../Traits/Traits.h" +#include "../Chat/Chat.h" +#include "../Rules/Rules.h" +#include "../AltAdvancement/AltAdvancement.h" +#include "../RaceTypes/RaceTypes.h" +#include "../classes.h" + +extern WorldDatabase database; +extern MasterSpellList master_spell_list; +extern MasterTraitList master_trait_list; +extern MasterRecipeList master_recipe_list; +extern MasterRecipeBookList master_recipebook_list; +extern World world; +extern ClientList client_list; +extern ConfigReader configReader; +extern VisualStates visual_states; +extern ZoneList zone_list; +extern LuaInterface* lua_interface; +extern MasterQuestList master_quest_list; +extern MasterCollectionList master_collection_list; +extern MasterSkillList master_skill_list; +extern MasterFactionList master_faction_list; +extern GuildList guild_list; +extern MasterLanguagesList master_languages_list; +extern IRC irc; +extern Chat chat; +extern RuleManager rule_manager; +extern MasterAAList master_aa_list; +extern MasterRaceTypeList race_types_list; +extern Classes classes; + +EQ2Packet* RemoteCommands::serialize(){ + buffer.clear(); + vector::iterator command_list; + buffer.append((char*)&num_commands, sizeof(int16)); + for( command_list = commands.begin(); command_list != commands.end(); command_list++ ) { + AddDataCommand(&(*command_list)); + } + EQ2Packet* app = new EQ2Packet(OP_SetRemoteCmdsMsg, (uchar*)buffer.c_str(), buffer.length() + 1); + return app; +} + +Commands::Commands(){ + remote_commands = new RemoteCommands(); + spawn_set_values["list"] = SPAWN_SET_VALUE_LIST; + spawn_set_values["name"] = SPAWN_SET_VALUE_NAME; + spawn_set_values["level"] = SPAWN_SET_VALUE_LEVEL; // TODO: Fix this, min_level, max_level + spawn_set_values["difficulty"] = SPAWN_SET_VALUE_DIFFICULTY; + spawn_set_values["model_type"] = SPAWN_SET_VALUE_MODEL_TYPE; + spawn_set_values["class"] = SPAWN_SET_VALUE_CLASS; + spawn_set_values["gender"] = SPAWN_SET_VALUE_GENDER; + spawn_set_values["show_name"] = SPAWN_SET_VALUE_SHOW_NAME; + spawn_set_values["attackable"] = SPAWN_SET_VALUE_ATTACKABLE; + spawn_set_values["show_level"] = SPAWN_SET_VALUE_SHOW_LEVEL; + spawn_set_values["targetable"] = SPAWN_SET_VALUE_TARGETABLE; + spawn_set_values["show_command_icon"] = SPAWN_SET_VALUE_SHOW_COMMAND_ICON; + spawn_set_values["display_hand_icon"] = SPAWN_SET_VALUE_HAND_ICON; + spawn_set_values["hair_type"] = SPAWN_SET_VALUE_HAIR_TYPE; + spawn_set_values["facial_hair_type"] = SPAWN_SET_VALUE_FACIAL_HAIR_TYPE; + spawn_set_values["wing_type"] = SPAWN_SET_VALUE_WING_TYPE; + spawn_set_values["chest_type"] = SPAWN_SET_VALUE_CHEST_TYPE; + spawn_set_values["legs_type"] = SPAWN_SET_VALUE_LEGS_TYPE; + spawn_set_values["soga_hair_type"] = SPAWN_SET_VALUE_SOGA_HAIR_TYPE; + spawn_set_values["soga_facial_hair_type"] = SPAWN_SET_VALUE_SOGA_FACIAL_HAIR_TYPE; + spawn_set_values["soga_model_type"] = SPAWN_SET_VALUE_SOGA_MODEL_TYPE; + spawn_set_values["size"] = SPAWN_SET_VALUE_SIZE; + spawn_set_values["hp"] = SPAWN_SET_VALUE_HP; + spawn_set_values["power"] = SPAWN_SET_VALUE_POWER; + spawn_set_values["heroic"] = SPAWN_SET_VALUE_HEROIC; + spawn_set_values["respawn"] = SPAWN_SET_VALUE_RESPAWN; + spawn_set_values["x"] = SPAWN_SET_VALUE_X; + spawn_set_values["y"] = SPAWN_SET_VALUE_Y; + spawn_set_values["z"] = SPAWN_SET_VALUE_Z; + spawn_set_values["heading"] = SPAWN_SET_VALUE_HEADING; + spawn_set_values["location"] = SPAWN_SET_VALUE_LOCATION; + spawn_set_values["command_primary"] = SPAWN_SET_VALUE_COMMAND_PRIMARY; + spawn_set_values["command_secondary"] = SPAWN_SET_VALUE_COMMAND_SECONDARY; + spawn_set_values["visual_state"] = SPAWN_SET_VALUE_VISUAL_STATE; + spawn_set_values["action_state"] = SPAWN_SET_VALUE_ACTION_STATE; + spawn_set_values["mood_state"] = SPAWN_SET_VALUE_MOOD_STATE; + spawn_set_values["initial_state"] = SPAWN_SET_VALUE_INITIAL_STATE; + spawn_set_values["activity_state"] = SPAWN_SET_VALUE_ACTIVITY_STATE; + spawn_set_values["collision_radius"] = SPAWN_SET_VALUE_COLLISION_RADIUS; + spawn_set_values["faction"] = SPAWN_SET_VALUE_FACTION; + spawn_set_values["spawn_script"] = SPAWN_SET_VALUE_SPAWN_SCRIPT; + spawn_set_values["spawnentry_script"] = SPAWN_SET_VALUE_SPAWNENTRY_SCRIPT; + spawn_set_values["spawnlocation_script"] = SPAWN_SET_VALUE_SPAWNLOCATION_SCRIPT; + spawn_set_values["sub_title"] = SPAWN_SET_VALUE_SUB_TITLE; + spawn_set_values["expire"] = SPAWN_SET_VALUE_EXPIRE; + spawn_set_values["expire_offset"] = SPAWN_SET_VALUE_EXPIRE_OFFSET; + spawn_set_values["x_offset"] = SPAWN_SET_VALUE_X_OFFSET; + spawn_set_values["y_offset"] = SPAWN_SET_VALUE_Y_OFFSET; + spawn_set_values["z_offset"] = SPAWN_SET_VALUE_Z_OFFSET; + spawn_set_values["device_id"] = SPAWN_SET_VALUE_DEVICE_ID; + spawn_set_values["pitch"] = SPAWN_SET_VALUE_PITCH; + spawn_set_values["roll"] = SPAWN_SET_VALUE_ROLL; + spawn_set_values["hide_hood"] = SPAWN_SET_VALUE_HIDE_HOOD; + spawn_set_values["emote_state"] = SPAWN_SET_VALUE_EMOTE_STATE; + spawn_set_values["icon"] = SPAWN_SET_VALUE_ICON; + spawn_set_values["prefix"] = SPAWN_SET_VALUE_PREFIX; + spawn_set_values["suffix"] = SPAWN_SET_VALUE_SUFFIX; + spawn_set_values["lastname"] = SPAWN_SET_VALUE_LASTNAME; + + zone_set_values["expansion_id"] = ZONE_SET_VALUE_EXPANSION_ID; + zone_set_values["name"] = ZONE_SET_VALUE_NAME; + zone_set_values["file"] = ZONE_SET_VALUE_FILE ; + zone_set_values["description"] = ZONE_SET_VALUE_DESCRIPTION; + zone_set_values["safe_x"] = ZONE_SET_VALUE_SAFE_X; + zone_set_values["safe_y"] = ZONE_SET_VALUE_SAFE_Y; + zone_set_values["safe_z"] = ZONE_SET_VALUE_SAFE_Z; + zone_set_values["underworld"] = ZONE_SET_VALUE_UNDERWORLD; + zone_set_values["min_recommended"] = ZONE_SET_VALUE_MIN_RECOMMENDED; + zone_set_values["max_recommended"] = ZONE_SET_VALUE_MAX_RECOMMENDED; + zone_set_values["zone_type"] = ZONE_SET_VALUE_ZONE_TYPE; + zone_set_values["always_loaded"] = ZONE_SET_VALUE_ALWAYS_LOADED; + zone_set_values["city_zone"] = ZONE_SET_VALUE_CITY_ZONE; + zone_set_values["weather_allowed"] = ZONE_SET_VALUE_WEATHER_ALLOWED; + zone_set_values["min_status"] = ZONE_SET_VALUE_MIN_STATUS; + zone_set_values["min_level"] = ZONE_SET_VALUE_MIN_LEVEL; + zone_set_values["start_zone"] = ZONE_SET_VALUE_START_ZONE; + zone_set_values["instance_type"] = ZONE_SET_VALUE_INSTANCE_TYPE; + zone_set_values["default_reenter_time"] = ZONE_SET_VALUE_DEFAULT_REENTER_TIME; + zone_set_values["default_reset_time"] = ZONE_SET_VALUE_DEFAULT_RESET_TIME; + zone_set_values["default_lockout_time"] = ZONE_SET_VALUE_DEFAULT_LOCKOUT_TIME; + zone_set_values["force_group_to_zone"] = ZONE_SET_VALUE_FORCE_GROUP_TO_ZONE; + zone_set_values["lua_script"] = ZONE_SET_VALUE_LUA_SCRIPT; + zone_set_values["shutdown_timer"] = ZONE_SET_VALUE_SHUTDOWN_TIMER; + zone_set_values["zone_motd"] = ZONE_SET_VALUE_ZONE_MOTD; +} + +Commands::~Commands() { + safe_delete(remote_commands); +} + +int32 Commands::GetSpawnSetType(string val){ + if(spawn_set_values.count(val) > 0) + return spawn_set_values[val]; + return 0xFFFFFFFF; +} + +bool Commands::SetSpawnCommand(Client* client, Spawn* target, int8 type, const char* value, bool send_update, bool temporary, string* temp_value){ + if(!target) + return false; + int32 val = 0; + try{ + if(type != SPAWN_SET_VALUE_NAME && !(type >= SPAWN_SET_VALUE_SPAWN_SCRIPT && type <= SPAWN_SET_VALUE_SUB_TITLE) && !(type >= SPAWN_SET_VALUE_PREFIX && type <= SPAWN_SET_VALUE_LASTNAME)) + val = atoul(value); + } + catch(...){ + if(client) + client->Message(CHANNEL_COLOR_RED, "Invalid numeric spawn value: %s", value); + return false; + } + if(temporary && temp_value){ + char tmp[128] = {0}; + switch(type){ + case SPAWN_SET_VALUE_NAME:{ + sprintf(tmp, "%s", target->GetName()); + target->SetName(value); + client->GetCurrentZone()->SendUpdateTitles(target); + break; + } + case SPAWN_SET_VALUE_X_OFFSET: + { + sprintf(tmp, "%f", target->GetXOffset()); + target->SetXOffset(float(val)); + break; + } + case SPAWN_SET_VALUE_Y_OFFSET: + { + sprintf(tmp, "%f", target->GetYOffset()); + target->SetYOffset(float(val)); + break; + } + case SPAWN_SET_VALUE_Z_OFFSET: + { + sprintf(tmp, "%f", target->GetZOffset()); + target->SetZOffset(float(val)); + break; + } + case SPAWN_SET_VALUE_EXPIRE: { + sprintf(tmp, "%u", target->GetExpireTime()); + target->SetExpireTime(val); + break; + } + case SPAWN_SET_VALUE_EXPIRE_OFFSET: { + sprintf(tmp, "%u", target->GetExpireOffsetTime()); + target->SetExpireOffsetTime(val); + break; + } + case SPAWN_SET_VALUE_SUB_TITLE: { + sprintf(tmp, "%s", target->GetSubTitle()); + target->SetSubTitle(value); + client->GetCurrentZone()->SendUpdateTitles(target); + break; + } + case SPAWN_SET_VALUE_LEVEL:{ + sprintf(tmp, "%i", target->GetLevel()); + target->SetLevel(val, send_update); + break; + } + case SPAWN_SET_VALUE_DIFFICULTY:{ + sprintf(tmp, "%i", target->GetEncounterLevel()); + target->SetEncounterLevel(val, send_update); + break; + } + case SPAWN_SET_VALUE_MODEL_TYPE:{ + sprintf(tmp, "%i", target->GetModelType()); + target->SetModelType(val, send_update); + break; + } + case SPAWN_SET_VALUE_CLASS:{ + sprintf(tmp, "%i", target->GetAdventureClass()); + target->SetAdventureClass(val, send_update); + break; + } + case SPAWN_SET_VALUE_GENDER:{ + sprintf(tmp, "%i", target->GetGender()); + target->SetGender(val, send_update); + break; + } + case SPAWN_SET_VALUE_SHOW_NAME:{ + sprintf(tmp, "%i", target->GetShowName()); + target->SetShowName(val, send_update); + break; + } + case SPAWN_SET_VALUE_ATTACKABLE:{ + sprintf(tmp, "%i", target->GetAttackable()); + target->SetAttackable(val, send_update); + break; + } + case SPAWN_SET_VALUE_SHOW_LEVEL:{ + sprintf(tmp, "%i", target->GetShowLevel()); + target->SetShowLevel(val, send_update); + break; + } + case SPAWN_SET_VALUE_TARGETABLE:{ + sprintf(tmp, "%i", target->GetTargetable()); + target->SetTargetable(val, send_update); + break; + } + case SPAWN_SET_VALUE_SHOW_COMMAND_ICON:{ + sprintf(tmp, "%i", target->GetShowCommandIcon()); + target->SetShowCommandIcon(val, send_update); + break; + } + case SPAWN_SET_VALUE_HAND_ICON:{ + sprintf(tmp, "%i", target->GetShowHandIcon()); + target->SetShowHandIcon(val, send_update); + break; + } + case SPAWN_SET_VALUE_HAIR_TYPE:{ + if(target->IsEntity()){ + sprintf(tmp, "%i", ((Entity*)target)->GetHairType()); + ((Entity*)target)->SetHairType(val, send_update); + } + break; + } + case SPAWN_SET_VALUE_FACIAL_HAIR_TYPE:{ + if(target->IsEntity()){ + sprintf(tmp, "%i", ((Entity*)target)->GetHairType()); + ((Entity*)target)->SetHairType(val, send_update); + } + break; + } + case SPAWN_SET_VALUE_WING_TYPE:{ + if(target->IsEntity()){ + sprintf(tmp, "%i", ((Entity*)target)->GetWingType()); + ((Entity*)target)->SetWingType(val, send_update); + } + break; + } + case SPAWN_SET_VALUE_CHEST_TYPE:{ + if(target->IsEntity()){ + sprintf(tmp, "%i", ((Entity*)target)->GetChestType()); + ((Entity*)target)->SetChestType(val, send_update); + } + break; + } + case SPAWN_SET_VALUE_LEGS_TYPE:{ + if(target->IsEntity()){ + sprintf(tmp, "%i", ((Entity*)target)->GetLegsType()); + ((Entity*)target)->SetLegsType(val, send_update); + } + break; + } + case SPAWN_SET_VALUE_SOGA_HAIR_TYPE:{ + if(target->IsEntity()){ + sprintf(tmp, "%i", ((Entity*)target)->GetSogaHairType()); + ((Entity*)target)->SetSogaHairType(val, send_update); + } + break; + } + case SPAWN_SET_VALUE_SOGA_FACIAL_HAIR_TYPE:{ + if(target->IsEntity()){ + sprintf(tmp, "%i", ((Entity*)target)->GetSogaFacialHairType()); + ((Entity*)target)->SetSogaFacialHairType(val, send_update); + } + break; + } + case SPAWN_SET_VALUE_SOGA_MODEL_TYPE:{ + sprintf(tmp, "%i", target->GetSogaModelType()); + target->SetSogaModelType(val, send_update); + break; + } + case SPAWN_SET_VALUE_SIZE:{ + sprintf(tmp, "%i", target->GetSize()); + target->SetSize(val, send_update); + break; + } + case SPAWN_SET_VALUE_HP:{ + sprintf(tmp, "%i", target->GetHP()); + target->SetHP(val, send_update); + break; + } + case SPAWN_SET_VALUE_POWER:{ + sprintf(tmp, "%i", target->GetPower()); + target->SetPower(val, send_update); + break; + } + case SPAWN_SET_VALUE_HEROIC:{ + sprintf(tmp, "%i", target->GetHeroic()); + target->SetHeroic(val, send_update); + break; + } + case SPAWN_SET_VALUE_RESPAWN:{ + sprintf(tmp, "%u", target->GetRespawnTime()); + target->SetRespawnTime(val); + break; + } + case SPAWN_SET_VALUE_X:{ + sprintf(tmp, "%f", target->GetX()); + target->SetX(atof(value), send_update); + break; + } + case SPAWN_SET_VALUE_Y:{ + sprintf(tmp, "%f", target->GetY()); + target->SetY(atof(value), send_update); + break; + } + case SPAWN_SET_VALUE_Z:{ + sprintf(tmp, "%f", target->GetZ()); + target->SetZ(atof(value), send_update); + break; + } + case SPAWN_SET_VALUE_HEADING:{ + sprintf(tmp, "%f", target->GetHeading()); + target->SetHeading(atof(value) + 360, send_update); + break; + } + case SPAWN_SET_VALUE_VISUAL_STATE:{ + sprintf(tmp, "%i", target->GetVisualState()); + target->SetVisualState(val, send_update); + break; + } + case SPAWN_SET_VALUE_ACTION_STATE:{ + sprintf(tmp, "%i", target->GetActionState()); + target->SetActionState(val, send_update); + break; + } + case SPAWN_SET_VALUE_MOOD_STATE:{ + sprintf(tmp, "%i", target->GetMoodState()); + target->SetMoodState(val, send_update); + break; + } + case SPAWN_SET_VALUE_INITIAL_STATE:{ + sprintf(tmp, "%i", target->GetInitialState()); + target->SetInitialState(val, send_update); + break; + } + case SPAWN_SET_VALUE_ACTIVITY_STATE:{ + sprintf(tmp, "%i", target->GetActivityStatus()); + target->SetActivityStatus(val, send_update); + break; + } + case SPAWN_SET_VALUE_COLLISION_RADIUS:{ + sprintf(tmp, "%i", target->GetCollisionRadius()); + target->SetCollisionRadius(val, send_update); + break; + } + case SPAWN_SET_VALUE_DEVICE_ID: { + if (target->IsObject()) { + sprintf(tmp, "%i", ((Object*)target)->GetDeviceID()); + ((Object*)target)->SetDeviceID(val); + } + break; + } + case SPAWN_SET_VALUE_PITCH: { + sprintf(tmp, "%f", target->GetPitch()); + target->SetPitch(atof(value), send_update); + break; + } + case SPAWN_SET_VALUE_ROLL: { + sprintf(tmp, "%f", target->GetRoll()); + target->SetRoll(atof(value), send_update); + break; + } + case SPAWN_SET_VALUE_HIDE_HOOD: { + sprintf(tmp, "%i", target->appearance.hide_hood); + target->SetHideHood(val); + break; + } + case SPAWN_SET_VALUE_EMOTE_STATE: { + sprintf(tmp, "%i", target->appearance.emote_state); + target->SetEmoteState(val); + break; + } + case SPAWN_SET_VALUE_ICON: { + sprintf(tmp, "%i", target->GetIconValue()); + target->SetIcon(val); + break; + } + + case SPAWN_SET_VALUE_PREFIX: { + sprintf(tmp, "%s", target->GetPrefixTitle()); + target->SetPrefixTitle(value); + client->GetCurrentZone()->SendUpdateTitles(target); + break; + } + + case SPAWN_SET_VALUE_SUFFIX: { + sprintf(tmp, "%s", target->GetSuffixTitle()); + target->SetSuffixTitle(value); + client->GetCurrentZone()->SendUpdateTitles(target); + break; + } + + case SPAWN_SET_VALUE_LASTNAME: { + sprintf(tmp, "%s", target->GetLastName()); + target->SetLastName(value); + client->GetCurrentZone()->SendUpdateTitles(target); + break; + } + + *temp_value = string(tmp); + } + } + else{ + switch(type){ + case SPAWN_SET_VALUE_NAME:{ + target->SetName(value); + client->GetCurrentZone()->SendUpdateTitles(target); + break; + } + case SPAWN_SET_VALUE_SUB_TITLE: { + target->SetSubTitle(value); + client->GetCurrentZone()->SendUpdateTitles(target); + break; + } + case SPAWN_SET_VALUE_X_OFFSET: + { + target->SetXOffset(atof(value)); + break; + } + case SPAWN_SET_VALUE_Y_OFFSET: + { + target->SetYOffset(atof(value)); + break; + } + case SPAWN_SET_VALUE_Z_OFFSET: + { + target->SetZOffset(atof(value)); + break; + } + case SPAWN_SET_VALUE_EXPIRE: { + target->SetExpireTime(val); + break; + } + case SPAWN_SET_VALUE_EXPIRE_OFFSET: { + target->SetExpireOffsetTime(val); + break; + } + case SPAWN_SET_VALUE_LEVEL:{ + target->SetLevel(val, send_update); + break; + } + case SPAWN_SET_VALUE_DIFFICULTY:{ + target->SetEncounterLevel(val, send_update); + break; + } + case SPAWN_SET_VALUE_MODEL_TYPE:{ + target->SetModelType(val, send_update); + break; + } + case SPAWN_SET_VALUE_CLASS:{ + target->SetAdventureClass(val, send_update); + break; + } + case SPAWN_SET_VALUE_GENDER:{ + target->SetGender(val, send_update); + break; + } + case SPAWN_SET_VALUE_SHOW_NAME:{ + target->SetShowName(val, send_update); + break; + } + case SPAWN_SET_VALUE_ATTACKABLE:{ + target->SetAttackable(val, send_update); + break; + } + case SPAWN_SET_VALUE_SHOW_LEVEL:{ + target->SetShowLevel(val, send_update); + break; + } + case SPAWN_SET_VALUE_TARGETABLE:{ + target->SetTargetable(val, send_update); + break; + } + case SPAWN_SET_VALUE_SHOW_COMMAND_ICON:{ + target->SetShowCommandIcon(val, send_update); + break; + } + case SPAWN_SET_VALUE_HAND_ICON:{ + target->SetShowHandIcon(val, send_update); + break; + } + case SPAWN_SET_VALUE_HAIR_TYPE:{ + if(target->IsEntity()) + ((Entity*)target)->SetHairType(val, send_update); + break; + } + case SPAWN_SET_VALUE_FACIAL_HAIR_TYPE:{ + if(target->IsEntity()) + ((Entity*)target)->SetHairType(val, send_update); + break; + } + case SPAWN_SET_VALUE_WING_TYPE:{ + if(target->IsEntity()) + ((Entity*)target)->SetWingType(val, send_update); + break; + } + case SPAWN_SET_VALUE_CHEST_TYPE:{ + if(target->IsEntity()) + ((Entity*)target)->SetChestType(val, send_update); + break; + } + case SPAWN_SET_VALUE_LEGS_TYPE:{ + if(target->IsEntity()) + ((Entity*)target)->SetLegsType(val, send_update); + break; + } + case SPAWN_SET_VALUE_SOGA_HAIR_TYPE:{ + if(target->IsEntity()) + ((Entity*)target)->SetSogaHairType(val, send_update); + break; + } + case SPAWN_SET_VALUE_SOGA_FACIAL_HAIR_TYPE:{ + if(target->IsEntity()) + ((Entity*)target)->SetSogaFacialHairType(val, send_update); + break; + } + case SPAWN_SET_VALUE_SOGA_MODEL_TYPE:{ + target->SetSogaModelType(val, send_update); + break; + } + case SPAWN_SET_VALUE_SIZE:{ + target->SetSize(val, send_update); + break; + } + case SPAWN_SET_VALUE_HP:{ + target->SetHP(val, send_update); + break; + } + case SPAWN_SET_VALUE_POWER:{ + target->SetPower(val, send_update); + break; + } + case SPAWN_SET_VALUE_HEROIC:{ + target->SetHeroic(val, send_update); + break; + } + case SPAWN_SET_VALUE_RESPAWN:{ + target->SetRespawnTime(val); + break; + } + case SPAWN_SET_VALUE_X:{ + target->SetX(atof(value), send_update); + target->SetSpawnOrigX(target->GetX()); + break; + } + case SPAWN_SET_VALUE_Y:{ + target->SetY(atof(value), send_update); + target->SetSpawnOrigY(target->GetY()); + break; + } + case SPAWN_SET_VALUE_Z:{ + target->SetZ(atof(value), send_update); + target->SetSpawnOrigZ(target->GetZ()); + break; + } + case SPAWN_SET_VALUE_HEADING:{ + target->SetHeading(atof(value), send_update); + target->SetSpawnOrigHeading(target->GetHeading()); + break; + } + case SPAWN_SET_VALUE_COMMAND_PRIMARY:{ + ZoneServer* zone = target->GetZone(); + if (!zone) + zone = client->GetCurrentZone(); + + if(zone->GetEntityCommandList(val)) + target->SetPrimaryCommands(zone->GetEntityCommandList(val)); + target->primary_command_list_id = val; + break; + } + case SPAWN_SET_VALUE_COMMAND_SECONDARY:{ + ZoneServer* zone = target->GetZone(); + if (!zone) + zone = client->GetCurrentZone(); + + if (zone->GetEntityCommandList(val)) + target->SetSecondaryCommands(zone->GetEntityCommandList(val)); + target->secondary_command_list_id = val; + break; + } + case SPAWN_SET_VALUE_VISUAL_STATE:{ + target->SetVisualState(val, send_update); + break; + } + case SPAWN_SET_VALUE_ACTION_STATE:{ + target->SetActionState(val, send_update); + break; + } + case SPAWN_SET_VALUE_MOOD_STATE:{ + target->SetMoodState(val, send_update); + break; + } + case SPAWN_SET_VALUE_INITIAL_STATE:{ + target->SetInitialState(val, send_update); + break; + } + case SPAWN_SET_VALUE_ACTIVITY_STATE:{ + target->SetActivityStatus(val, send_update); + break; + } + case SPAWN_SET_VALUE_COLLISION_RADIUS:{ + target->SetCollisionRadius(val, send_update); + break; + } + case SPAWN_SET_VALUE_FACTION:{ + ZoneServer* zone = target->GetZone(); + if (!zone) + zone = client->GetCurrentZone(); + + target->faction_id = val; + zone->RemoveDeadEnemyList(target); + if(target->IsNPC()) + zone->AddEnemyList((NPC*)target); + break; + } + case SPAWN_SET_VALUE_DEVICE_ID:{ + if (target->IsObject()) + ((Object*)target)->SetDeviceID(val); + break; + } + case SPAWN_SET_VALUE_PITCH: { + target->SetPitch(atof(value), send_update); + target->SetSpawnOrigPitch(atof(value)); + break; + } + case SPAWN_SET_VALUE_ROLL: { + target->SetRoll(atof(value), send_update); + target->SetSpawnOrigRoll(atof(value)); + break; + } + case SPAWN_SET_VALUE_HIDE_HOOD: { + target->SetHideHood(val); + break; + } + case SPAWN_SET_VALUE_EMOTE_STATE: { + target->SetEmoteState(val); + break; + } + case SPAWN_SET_VALUE_ICON: { + target->SetIcon(val); + break; + } + case SPAWN_SET_VALUE_PREFIX: { + target->SetPrefixTitle(value); + client->GetCurrentZone()->SendUpdateTitles(target); + break; + } + case SPAWN_SET_VALUE_SUFFIX: { + target->SetSuffixTitle(value); + client->GetCurrentZone()->SendUpdateTitles(target); + break; + } + case SPAWN_SET_VALUE_LASTNAME: { + target->SetLastName(value); + client->GetCurrentZone()->SendUpdateTitles(target); + break; + } + case SPAWN_SET_VALUE_SPAWN_SCRIPT:{ + if(lua_interface && lua_interface->GetSpawnScript(value) == 0){ + if(client){ + client->Message(CHANNEL_COLOR_RED, "Invalid Spawn Script file. Be sure you give the absolute path."); + client->Message(CHANNEL_COLOR_RED, "Example: /spawn set spawn_script 'SpawnScripts/example.lua'"); + } + return false; + } + else if(!database.UpdateSpawnScriptData(target->GetDatabaseID(), 0, 0, value)) + return false; + else{ + if(!world.GetSpawnLocationScript(target->GetSpawnLocationID())) + target->SetSpawnScript(value); + } + break; + } + case SPAWN_SET_VALUE_SPAWNLOCATION_SCRIPT:{ + if(lua_interface && lua_interface->GetSpawnScript(value) == 0){ + if(client){ + client->Message(CHANNEL_COLOR_RED, "Invalid Spawn Script file. Be sure you give the absolute path."); + client->Message(CHANNEL_COLOR_RED, "Example: /spawn set spawnlocation_script 'SpawnScripts/example.lua'"); + } + return false; + } + else if(!database.UpdateSpawnScriptData(0, target->GetSpawnLocationID(), 0, value)) + return false; + else{ + if(!world.GetSpawnEntryScript(target->GetSpawnEntryID())) + target->SetSpawnScript(value); + } + break; + } + case SPAWN_SET_VALUE_SPAWNENTRY_SCRIPT:{ + if(lua_interface && lua_interface->GetSpawnScript(value) == 0){ + if(client){ + client->Message(CHANNEL_COLOR_RED, "Invalid Spawn Script file. Be sure you give the absolute path."); + client->Message(CHANNEL_COLOR_RED, "Example: /spawn set spawnentry_script 'SpawnScripts/example.lua'"); + } + return false; + } + else if(!database.UpdateSpawnScriptData(0, 0, target->GetSpawnEntryID(), value)) + return false; + else + target->SetSpawnScript(value); + break; + } + } + } + return true; +} + +/* The zone object will be NULL if the zone is not currently running. We pass both of these in so we can update + the database fields always and also update the zone in memory if it's running. */ +bool Commands::SetZoneCommand(Client* client, int32 zone_id, ZoneServer* zone, int8 type, const char* value) { + if (client && zone_id > 0 && type > 0 && value) { + sint32 int_value = 0; + float float_value = 0; + if (type == ZONE_SET_VALUE_SAFE_X || type == ZONE_SET_VALUE_SAFE_Y || type == ZONE_SET_VALUE_SAFE_Z || type == ZONE_SET_VALUE_UNDERWORLD) { + try { + float_value = atof(value); + } + catch (...) { + client->Message(CHANNEL_COLOR_RED, "Error converting '%s' to a float value", value); + return false; + } + } + else if (type != ZONE_SET_VALUE_NAME && type != ZONE_SET_VALUE_FILE && type != ZONE_SET_VALUE_DESCRIPTION && type != ZONE_SET_VALUE_ZONE_TYPE && type != ZONE_SET_VALUE_LUA_SCRIPT && type != ZONE_SET_VALUE_ZONE_MOTD) { + try { + int_value = atoi(value); + } + catch (...) { + client->Message(CHANNEL_COLOR_RED, "Error converting '%s' to an integer value", value); + return false; + } + } + switch (type) { + case ZONE_SET_VALUE_EXPANSION_ID: { + break; + } + case ZONE_SET_VALUE_NAME: { + if (zone) + zone->SetZoneName(const_cast(value)); + database.SaveZoneInfo(zone_id, "name", value); + break; + } + case ZONE_SET_VALUE_FILE: { + if (zone) + zone->SetZoneFile(const_cast(value)); + database.SaveZoneInfo(zone_id, "file", value); + break; + } + case ZONE_SET_VALUE_DESCRIPTION: { + if (zone) + zone->SetZoneDescription(const_cast(value)); + database.SaveZoneInfo(zone_id, "description", value); + break; + } + case ZONE_SET_VALUE_SAFE_X: { + if (zone) + zone->SetSafeX(float_value); + database.SaveZoneInfo(zone_id, "safe_x", float_value); + break; + } + case ZONE_SET_VALUE_SAFE_Y: { + if (zone) + zone->SetSafeY(float_value); + database.SaveZoneInfo(zone_id, "safe_y", float_value); + break; + } + case ZONE_SET_VALUE_SAFE_Z: { + if (zone) + zone->SetSafeZ(float_value); + database.SaveZoneInfo(zone_id, "safe_z", float_value); + break; + } + case ZONE_SET_VALUE_UNDERWORLD: { + if (zone) + zone->SetUnderWorld(float_value); + database.SaveZoneInfo(zone_id, "underworld", float_value); + break; + } + case ZONE_SET_VALUE_MIN_RECOMMENDED: { + break; + } + case ZONE_SET_VALUE_MAX_RECOMMENDED: { + break; + } + case ZONE_SET_VALUE_ZONE_TYPE: { + break; + } + case ZONE_SET_VALUE_ALWAYS_LOADED: { + if (zone) + zone->SetAlwaysLoaded(int_value == 1); + database.SaveZoneInfo(zone_id, "always_loaded", int_value); + break; + } + case ZONE_SET_VALUE_CITY_ZONE: { + if (zone) + zone->SetCityZone(int_value == 1); + database.SaveZoneInfo(zone_id, "city_zone", int_value); + break; + } + case ZONE_SET_VALUE_WEATHER_ALLOWED: { + if (zone) + zone->SetWeatherAllowed(int_value == 1); + database.SaveZoneInfo(zone_id, "weather_allowed", int_value); + break; + } + case ZONE_SET_VALUE_MIN_STATUS: { + if (zone) + zone->SetMinimumStatus(int_value); + database.SaveZoneInfo(zone_id, "min_status", int_value); + break; + } + case ZONE_SET_VALUE_MIN_LEVEL: { + if (zone) + zone->SetMinimumLevel(int_value); + database.SaveZoneInfo(zone_id, "min_level", int_value); + break; + } + case ZONE_SET_VALUE_MAX_LEVEL: { + if (zone) + zone->SetMaximumLevel(int_value); + database.SaveZoneInfo(zone_id, "max_level", int_value); + break; + } + case ZONE_SET_VALUE_START_ZONE: { + database.SaveZoneInfo(zone_id, "start_zone", int_value); + break; + } + case ZONE_SET_VALUE_INSTANCE_TYPE: { + if (zone) + zone->SetInstanceType(int_value); + database.SaveZoneInfo(zone_id, "instance_type", int_value); + break; + } + case ZONE_SET_VALUE_DEFAULT_REENTER_TIME: { + if (zone) + zone->SetDefaultReenterTime(int_value); + database.SaveZoneInfo(zone_id, "default_reenter_time", int_value); + break; + } + case ZONE_SET_VALUE_DEFAULT_RESET_TIME: { + if (zone) + zone->SetDefaultResetTime(int_value); + database.SaveZoneInfo(zone_id, "default_reset_time", int_value); + break; + } + case ZONE_SET_VALUE_DEFAULT_LOCKOUT_TIME: { + if (zone) + zone->SetDefaultLockoutTime(int_value); + database.SaveZoneInfo(zone_id, "default_lockout_time", int_value); + break; + } + case ZONE_SET_VALUE_FORCE_GROUP_TO_ZONE: { + if (zone) + zone->SetForceGroupZoneOption(int_value); + database.SaveZoneInfo(zone_id, "force_group_to_zone", int_value); + break; + } + case ZONE_SET_VALUE_LUA_SCRIPT: { + if (lua_interface && lua_interface->GetZoneScript(value) == 0) { + client->Message(CHANNEL_COLOR_RED, "Invalid Zone Script file. Be sure you give the absolute path."); + client->Message(CHANNEL_COLOR_RED, "Example: /zone set lua_script 'ZoneScripts/QueensColony.lua'"); + return false; + } + else { + world.AddZoneScript(zone_id, const_cast(value)); + database.SaveZoneInfo(zone_id, "lua_script", value); + } + break; + } + case ZONE_SET_VALUE_SHUTDOWN_TIMER: { + if (zone) + zone->SetShutdownTimer(int_value); + database.SaveZoneInfo(zone_id, "shutdown_timer", int_value); + break; + } + case ZONE_SET_VALUE_ZONE_MOTD: { + if (zone) + zone->SetZoneMOTD(string(value)); + database.SaveZoneInfo(zone_id, "zone_motd", value); + break; + } + default: { + client->Message(CHANNEL_COLOR_RED, "Invalid zone attribute %i", type); + return false; + } + } + } + else { + if (client) + client->SimpleMessage(CHANNEL_COLOR_RED, "An error occured saving new zone data."); + return false; + } + return true; +} + +void Commands::Process(int32 index, EQ2_16BitString* command_parms, Client* client) { + if (index >= remote_commands->commands.size()) { + LogWrite(COMMAND__ERROR, 0, "Command", "Error, command handler of %u was requested, but max handler is %u", index, remote_commands->commands.size()); + return; + } + EQ2_RemoteCommandString* parent_command = 0; + EQ2_RemoteCommandString* command = &remote_commands->commands[index]; + Seperator* sep = 0; + if (command_parms->size > 0) { + sep = new Seperator(command_parms->data.c_str(), ' ', 10, 500, true); + if (sep && sep->arg[0] && remote_commands->validSubCommand(command->command.data, string(sep->arg[0]))) { + parent_command = command; + command = &(remote_commands->subcommands[command->command.data][string(sep->arg[0])]); + safe_delete(sep); + if (command_parms->data.length() > (command->command.data.length() + 1)) + sep = new Seperator(command_parms->data.c_str() + (command->command.data.length() + 1), ' ', 10, 500, true); + LogWrite(COMMAND__DEBUG, 1, "Command", "Handler: %u, COMMAND: '%s', SUBCOMMAND: '%s'", index, parent_command->command.data.c_str(), command->command.data.c_str()); + } + else + LogWrite(COMMAND__DEBUG, 1, "Command", "Handler: %u, COMMAND: '%s'", index, command->command.data.c_str()); + } + + int ndx = 0; + if (command->required_status > client->GetAdminStatus()) + { + LogWrite(COMMAND__ERROR, 0, "Command", "Player '%s' (%u) needs status %i to use command: %s", client->GetPlayer()->GetName(), client->GetAccountID(), command->required_status, command->command.data.c_str()); + safe_delete(sep); + client->SimpleMessage(3, "Error: Your status is insufficient for this command."); + return; + } + + Player* player = client->GetPlayer(); + LogWrite(COMMAND__DEBUG, 0, "Command", "Player '%s' (%u), Command: %s", player->GetName(), client->GetAccountID(), command->command.data.c_str()); + + switch (command->handler) { + case COMMAND_RELOAD: { + client->SimpleMessage(CHANNEL_COLOR_YELLOW, "Reload commands:"); + client->SimpleMessage(CHANNEL_COLOR_YELLOW, "/reload structs"); + client->SimpleMessage(CHANNEL_COLOR_YELLOW, "/reload items"); + client->SimpleMessage(CHANNEL_COLOR_YELLOW, "/reload luasystem"); + client->SimpleMessage(CHANNEL_COLOR_YELLOW, "/reload spawnscripts"); + client->SimpleMessage(CHANNEL_COLOR_YELLOW, "/reload spells"); + client->SimpleMessage(CHANNEL_COLOR_YELLOW, "/reload quests"); + client->SimpleMessage(CHANNEL_COLOR_YELLOW, "/reload spawns"); + client->SimpleMessage(CHANNEL_COLOR_YELLOW, "/reload groundspawns"); + client->SimpleMessage(CHANNEL_COLOR_YELLOW, "/reload zonescripts"); + client->SimpleMessage(CHANNEL_COLOR_YELLOW, "/reload entity_commands"); + client->SimpleMessage(CHANNEL_COLOR_YELLOW, "/reload factions"); + client->SimpleMessage(CHANNEL_COLOR_YELLOW, "/reload mail"); + client->SimpleMessage(CHANNEL_COLOR_YELLOW, "/reload guilds"); + client->SimpleMessage(CHANNEL_COLOR_YELLOW, "/reload locations"); + break; + } + case COMMAND_RELOADSTRUCTS: { + client->SimpleMessage(CHANNEL_COLOR_YELLOW, "Reloading Structs..."); + configReader.ReloadStructs(); + client->SimpleMessage(CHANNEL_COLOR_YELLOW, "Done!"); + break; + } + case COMMAND_RELOAD_QUESTS: { + client->SimpleMessage(CHANNEL_COLOR_YELLOW, "Reloading Quests..."); + master_quest_list.Reload(); + client_list.ReloadQuests(); + zone_list.ReloadClientQuests(); + client->SimpleMessage(CHANNEL_COLOR_YELLOW, "Done!"); + break; + } + case COMMAND_RELOAD_SPAWNS: { + client->GetCurrentZone()->ReloadSpawns(); + break; + } + case COMMAND_RELOAD_SPELLS: { + client->SimpleMessage(CHANNEL_COLOR_YELLOW, "Reloading Spells..."); + zone_list.DeleteSpellProcess(); + master_spell_list.Reload(); + if (lua_interface) + lua_interface->ReloadSpells(); + zone_list.LoadSpellProcess(); + client->SimpleMessage(CHANNEL_COLOR_YELLOW, "Done!"); + break; + } + case COMMAND_RELOAD_GROUNDSPAWNS: { + client->SimpleMessage(CHANNEL_COLOR_YELLOW, "Reloading Groundspawn Entries..."); + client->GetCurrentZone()->DeleteGroundSpawnItems(); + client->GetCurrentZone()->LoadGroundSpawnEntries(); + client->SimpleMessage(CHANNEL_COLOR_YELLOW, "Done!"); + break; + } + + case COMMAND_RELOAD_ZONESCRIPTS: { + client->SimpleMessage(CHANNEL_COLOR_YELLOW, "Reloading Zone Scripts..."); + world.ResetZoneScripts(); + database.LoadZoneScriptData(); + if (lua_interface) + lua_interface->DestroyZoneScripts(); + client->SimpleMessage(CHANNEL_COLOR_YELLOW, "Done!"); + break; + } + case COMMAND_RELOAD_ENTITYCOMMANDS: { + client->SimpleMessage(CHANNEL_COLOR_YELLOW, "Reloading Entity Commands..."); + client->GetCurrentZone()->ClearEntityCommands(); + database.LoadEntityCommands(client->GetCurrentZone()); + client->SimpleMessage(CHANNEL_COLOR_YELLOW, "Done!"); + break; + } + case COMMAND_RELOAD_FACTIONS: { + client->SimpleMessage(CHANNEL_COLOR_YELLOW, "Reloading Factions..."); + master_faction_list.Clear(); + database.LoadFactionList(); + client->SimpleMessage(CHANNEL_COLOR_YELLOW, "Done!"); + break; + } + case COMMAND_RELOAD_MAIL: { + client->SimpleMessage(CHANNEL_COLOR_YELLOW, "Reloading Mail..."); + zone_list.ReloadMail(); + client->SimpleMessage(CHANNEL_COLOR_YELLOW, "Done!"); + break; + } + case COMMAND_RELOAD_GUILDS: { + client->SimpleMessage(CHANNEL_COLOR_YELLOW, "Reloading Guilds..."); + world.ReloadGuilds(); + client->SimpleMessage(CHANNEL_COLOR_YELLOW, "Done!"); + break; + } + case COMMAND_RELOAD_LOCATIONS: { + client->SimpleMessage(CHANNEL_COLOR_YELLOW, "Reloading Locations..."); + client->GetPlayer()->GetZone()->RemoveLocationGrids(); + database.LoadLocationGrids(client->GetPlayer()->GetZone()); + client->SimpleMessage(CHANNEL_COLOR_YELLOW, "Done!"); + break; + } + case COMMAND_READ: { + if (sep && sep->arg[1][0] && sep->IsNumber(1)) { + if (strcmp(sep->arg[0], "read") == 0) { + int32 item_index = atol(sep->arg[1]); + Item* item = client->GetPlayer()->item_list.GetItemFromIndex(item_index); + if (item) { + Spawn* spawn = client->GetPlayer()->GetTarget(); + int8 numpages = item->book_pages.size(); + + string page1 = string(item->book_pages[0]->page_text.data); + PacketStruct* packet = configReader.getStruct("WS_EqShowBook", client->GetVersion()); + string title = item->name; + + + + if (packet) { + packet->setDataByName("spawn_id", client->GetPlayer()->GetIDWithPlayerSpawn(client->GetPlayer())); + packet->setDataByName("book_title", title.c_str()); + packet->setDataByName("book_type", "simple"); + packet->setDataByName("unknown2", 1); + packet->setDataByName("unknown5", 1, 4); + packet->setArrayLengthByName("num_pages", numpages); + for (int8 pages = 1; pages <= numpages; pages++) { + + int8 pagenum = int8(item->book_pages[pages - 1]->page); + string page = string(item->book_pages[pages-1]->page_text.data); + int8 valign = int8(item->book_pages[pages - 1]->valign); + int8 halign = int8(item->book_pages[pages - 1]->halign); + packet->setArrayDataByName("page_text", page.c_str(), pagenum -1); + packet->setArrayDataByName("page_text_valign", valign , pagenum - 1); + packet->setArrayDataByName("page_text_halign", halign, pagenum - 1); + + // Need to add support for images + } + client->QueuePacket(packet->serialize()); + safe_delete(packet); + } + + + break; + } + } + } + +} + case COMMAND_USEABILITY:{ + if(sep && sep->arg[0][0] && sep->IsNumber(0)){ + if(client->GetPlayer()->GetHP() == 0){ + client->SimpleMessage(CHANNEL_COLOR_RED,"You cannot do that right now."); + } + else{ + int32 spell_id = atoul(sep->arg[0]); + int8 spell_tier = 0; + if(sep->arg[1][0] && sep->IsNumber(1)) + spell_tier = atoi(sep->arg[1]); + else + spell_tier = client->GetPlayer()->GetSpellTier(spell_id); + if (!spell_tier) + spell_tier = 1; + Spell* spell = master_spell_list.GetSpell(spell_id, spell_tier); + if (spell) { + if (strncmp(spell->GetName(), "Gathering", 9) == 0 || strncmp(spell->GetName(), "Mining", 6) == 0 || strncmp(spell->GetName(), "Trapping", 8) == 0 || strncmp(spell->GetName(), "Foresting", 9) == 0 || strncmp(spell->GetName(), "Fishing", 7) == 0 || strncmp(spell->GetName(), "Collecting", 10) == 0) + client->GetCurrentZone()->ProcessSpell(spell, client->GetPlayer(), client->GetPlayer()->GetTarget(), true, true); + else + { + if (client->GetPlayer()->HasTarget()) + client->GetCurrentZone()->ProcessSpell(spell, client->GetPlayer(), client->GetPlayer()->GetTarget()); + else + client->GetCurrentZone()->ProcessSpell(spell, client->GetPlayer(), client->GetPlayer()); + } + } + } + } + else{ + client->SimpleMessage(CHANNEL_COLOR_YELLOW,"Usage: /useability {spell_id} [spell_tier]"); + } + break; + } + case COMMAND_INFO:{ + if(sep && sep->arg[1][0] && sep->IsNumber(1)){ + if(strcmp(sep->arg[0], "inventory") == 0){ + int32 item_index = atol(sep->arg[1]); + Item* item = client->GetPlayer()->item_list.GetItemFromIndex(item_index); + if(item){ + if (item->IsCollectable() && client->SendCollectionsForItem(item)) + break; + + EQ2Packet* app = item->serialize(client->GetVersion(), (!item->GetItemScript() || !lua_interface), client->GetPlayer()); + //DumpPacket(app); + client->QueuePacket(app); + if(item->GetItemScript() && lua_interface) + lua_interface->RunItemScript(item->GetItemScript(), "examined", item, client->GetPlayer()); + else if(item->generic_info.offers_quest_id > 0){ //leave the current functionality in place if it doesnt have an item script + Quest* quest = master_quest_list.GetQuest(item->generic_info.offers_quest_id); + if(quest && client->GetPlayer()->GetCompletedQuest(item->generic_info.offers_quest_id) == 0 && client->GetPlayer()->GetQuest(item->generic_info.offers_quest_id) == 0) + client->AddPendingQuest(quest); + } + } + else + LogWrite(COMMAND__ERROR, 0, "Command", "Unknown Index: %u", item_index); + } + else if(strcmp(sep->arg[0], "equipment") == 0){ + int32 item_index = atol(sep->arg[1]); + Item* item = client->GetPlayer()->GetEquipmentList()->GetItem(item_index); + if(item){ + EQ2Packet* app = item->serialize(client->GetVersion(), true, client->GetPlayer()); + client->QueuePacket(app); + if(item->GetItemScript() && lua_interface) + lua_interface->RunItemScript(item->GetItemScript(), "examined", item, client->GetPlayer()); + } + else + LogWrite(COMMAND__ERROR, 0, "Command", "Unknown Index: %u", item_index); + } + else if(strcmp(sep->arg[0], "item") == 0 || strcmp(sep->arg[0], "merchant") == 0 || strcmp(sep->arg[0], "store") == 0 || strcmp(sep->arg[0], "buyback") == 0 || strcmp(sep->arg[0], "consignment") == 0){ + int32 item_id = atoul(sep->arg[1]); + Item* item = master_item_list.GetItem(item_id); + if(item){ + EQ2Packet* app = item->serialize(client->GetVersion(), true, client->GetPlayer()); + client->QueuePacket(app); + } + else + LogWrite(COMMAND__ERROR, 0, "Command", "Unknown Item ID: %u", item_id); + } + else if (strcmp(sep->arg[0], "spell") == 0) { + sint32 spell_id = atol(sep->arg[1]); + int8 tier = atoi(sep->arg[3]); + EQ2Packet* outapp = master_spell_list.GetSpellPacket(spell_id, tier, client, true, 0x2A); + if (outapp) + client->QueuePacket(outapp); + else + LogWrite(COMMAND__ERROR, 0, "Command", "Unknown Spell ID and/or Tier, ID: %u, Tier: %i", spell_id, tier); + } + else if (strcmp(sep->arg[0], "achievement") == 0) { + sint32 spell_id = atol(sep->arg[2]); + + int8 group = atoi(sep->arg[1]); + AltAdvanceData* data = 0; + SpellBookEntry* spellentry = 0; + int8 tier = client->GetPlayer()->GetSpellTier(spell_id); + + LogWrite(COMMAND__ERROR, 0, "Command", "AA Spell ID and/or Tier, ID: %u, Group: %i", spell_id, group); + EQ2Packet* outapp = master_spell_list.GetAASpellPacket(spell_id, tier, client, true, 0x45); + if (outapp) + client->QueuePacket(outapp); + else + LogWrite(COMMAND__ERROR, 0, "Command", "Unknown Spell ID and/or Tier, ID: %u, Tier: %i", spell_id, group); + } + else if (strcmp(sep->arg[0], "spellbook") == 0) { + sint32 spell_id = atol(sep->arg[1]); + int8 tier = atoi(sep->arg[2]); + EQ2Packet* outapp = master_spell_list.GetSpellPacket(spell_id, tier, client, true, 0x2A); + if (outapp) + client->QueuePacket(outapp); + else + LogWrite(COMMAND__ERROR, 0, "Command", "Unknown Spell ID and/or Tier, ID: %u, Tier: %i", spell_id, tier); + } + else if (strcmp(sep->arg[0], "recipe") == 0) { + sint32 recipe_id = atol(sep->arg[1]); + EQ2Packet* outapp = master_recipe_list.GetRecipePacket(recipe_id, client, true, 0x2C); + if(outapp) + client->QueuePacket(outapp); + else + LogWrite(COMMAND__ERROR, 0, "Command", "Unknown Recipe ID: %u", recipe_id); + } + else if (strcmp(sep->arg[0], "maintained") ==0) { + int32 slot = atol(sep->arg[1]); + int32 spell_id = atol(sep->arg[2]); + LogWrite(COMMAND__DEBUG, 5, "Command", "Unknown Spell ID - Slot: %u unknown: %u", slot, spell_id); + //int8 tier = client->GetPlayer()->GetSpellTier(spell_id); + MaintainedEffects* info = client->GetPlayer()->GetMaintainedSpellBySlot(slot); + EQ2Packet* outapp = master_spell_list.GetSpellPacket(info->spell_id, info->tier, client, true, 0x00); + if(outapp) + client->QueuePacket(outapp); + else + LogWrite(COMMAND__ERROR, 0, "Command", "Unknown Spell ID: %u", spell_id); + } + else if (strcmp(sep->arg[0], "effect") == 0) { + int32 spell_id = atol(sep->arg[1]); + LogWrite(COMMAND__DEBUG, 5, "Command", "Unknown Spell ID: %u", spell_id); + int8 tier = client->GetPlayer()->GetSpellTier(spell_id); + EQ2Packet* outapp = master_spell_list.GetSpecialSpellPacket(spell_id, tier, client, true, 0x00); + if (outapp){ + client->QueuePacket(outapp); + } + else + LogWrite(COMMAND__ERROR, 0, "Command", "Unknown Spell ID: %u", spell_id); + } + } + else if (sep && strcmp(sep->arg[0], "overflow") == 0) { + Item* item = player->item_list.GetOverflowItem(); + if(item) { + EQ2Packet* app = item->serialize(client->GetVersion(), true, client->GetPlayer()); + client->QueuePacket(app); + } + else + LogWrite(COMMAND__ERROR, 0,"Command", "Unable to retrieve an overflow item."); + } + else + client->SimpleMessage(CHANNEL_COLOR_YELLOW,"Usage: /info {inventory|equipment|spell} {id}"); + break; + } + case COMMAND_USE_EQUIPPED_ITEM:{ + if (sep && sep->arg[0] && sep->IsNumber(0)){ + int32 slot_id = atoul(sep->arg[0]); + Item* item = player->GetEquipmentList()->GetItem(slot_id); + if (item && item->generic_info.usable && item->GetItemScript()) + lua_interface->RunItemScript(item->GetItemScript(), "used", item, player); + } + break; + } + case COMMAND_USE_ITEM: { + if (sep && sep->arg[0] && sep->IsNumber(0)) { + int32 item_index = atoul(sep->arg[0]); + Item* item = player->item_list.GetItemFromIndex(item_index); + if (item && item->GetItemScript()) { + if (item->generic_info.max_charges == 0) + lua_interface->RunItemScript(item->GetItemScript(), "used", item, player); + else { + if (item->generic_info.display_charges > 0) { + lua_interface->RunItemScript(item->GetItemScript(), "used", item, player); + item->generic_info.display_charges -= 1; + item->save_needed = true; + client->QueuePacket(item->serialize(client->GetVersion(), false, client->GetPlayer())); + } + } + } + } + break; + } + case COMMAND_SCRIBE_SCROLL_ITEM: { + if (sep && sep->arg[0] && sep->IsNumber(0)) { + Item* item = player->item_list.GetItemFromUniqueID(atoul(sep->arg[0])); + if (item) { + LogWrite(ITEM__DEBUG, 0, "Items", "ITEM ID: %u", item->details.item_id); + + if(item->generic_info.item_type == 6) { + Spell* spell = master_spell_list.GetSpell(item->skill_info->spell_id, item->skill_info->spell_tier); + int8 old_slot = 0; + if (spell) { + if (!player->HasSpell(spell->GetSpellID(), spell->GetSpellTier(), true)) { + old_slot = player->GetSpellSlot(spell->GetSpellID()); + player->RemoveSpellBookEntry(spell->GetSpellID()); + player->AddSpellBookEntry(spell->GetSpellID(), spell->GetSpellTier(), old_slot, spell->GetSpellData()->spell_book_type, spell->GetSpellData()->linked_timer, true); + player->UnlockSpell(spell); + client->SendSpellUpdate(spell); + database.DeleteItem(client->GetCharacterID(), item, 0); + player->item_list.RemoveItem(item, true); + client->QueuePacket(player->GetSpellBookUpdatePacket(client->GetVersion())); + client->QueuePacket(player->SendInventoryUpdate(client->GetVersion())); + } + } + else + LogWrite(COMMAND__ERROR, 0, "Command", "Unknown spell ID: %u and tier: %u", item->skill_info->spell_id, item->skill_info->spell_tier); + } + else if(item->generic_info.item_type == 7){ + LogWrite(TRADESKILL__DEBUG, 0, "Recipe", "Scribing recipe book %s (%u) for player %s.", item->name.c_str(), item->details.item_id, player->GetName()); + Recipe* recipe_book = new Recipe(master_recipebook_list.GetRecipeBooks(item->details.item_id)); + // if valid recipe book and the player doesn't have it + if (recipe_book && recipe_book->GetLevel() > client->GetPlayer()->GetTSLevel()) { + client->Message(CHANNEL_COLOR_WHITE, "Your tradeskill level is not high enough to scribe this book."); + safe_delete(recipe_book); + } + else if (recipe_book && !(client->GetPlayer()->GetRecipeBookList()->HasRecipeBook(item->details.item_id))) { + LogWrite(TRADESKILL__DEBUG, 0, "Recipe", "Valid recipe book that the player doesn't have"); + // Add recipe book to the players list + client->GetPlayer()->GetRecipeBookList()->AddRecipeBook(recipe_book); + + // Get a list of all recipes this book contains + vector* book_recipes = master_recipe_list.GetRecipes(recipe_book->GetBookName()); + LogWrite(TRADESKILL__DEBUG, 0, "Recipe", "%i recipes found for %s book", book_recipes->size(), recipe_book->GetBookName()); + + // Create the packet to send to update the players recipe list + PacketStruct* packet = 0; + if (client->GetRecipeListSent()) { + packet = configReader.getStruct("WS_RecipeList", client->GetVersion()); + + if (packet) + packet->setArrayLengthByName("num_recipes", book_recipes->size()); + } + + // loop through the list + vector::iterator itr; + int16 i = 0; + for (itr = book_recipes->begin(); itr != book_recipes->end(); itr++) { + // check to see if the player already has this recipe some how + if (!client->GetPlayer()->GetRecipeList()->GetRecipe((*itr)->GetID())) { + // Player doesn't already have this recipe so lets add it + Recipe* recipe = new Recipe(master_recipe_list.GetRecipe((*itr)->GetID())); + client->GetPlayer()->GetRecipeList()->AddRecipe(recipe); + database.SavePlayerRecipe(client->GetPlayer(), recipe->GetID()); + client->Message(CHANNEL_COLOR_WHITE, "Recipe: \"%s\" put in recipe book.", recipe->GetName()); + + if (packet && client->GetRecipeListSent()) { + packet->setArrayDataByName("id", recipe->GetID(), i); + packet->setArrayDataByName("tier", recipe->GetTier(), i); + packet->setArrayDataByName("level", recipe->GetLevel(), i); + packet->setArrayDataByName("icon", recipe->GetIcon(), i); + packet->setArrayDataByName("classes", recipe->GetClasses(), i); + packet->setArrayDataByName("skill", recipe->GetSkill(), i); + packet->setArrayDataByName("technique", recipe->GetTechnique(), i); + packet->setArrayDataByName("knowledge", recipe->GetKnowledge(), i); + packet->setArrayDataByName("unknown2", recipe->GetUnknown2(), i); + packet->setArrayDataByName("recipe_name", recipe->GetName(), i); + packet->setArrayDataByName("recipe_book", recipe->GetBook(), i); + packet->setArrayDataByName("unknown3", recipe->GetUnknown3(), i); + i++; + } + } + } + LogWrite(TRADESKILL__DEBUG, 0, "Recipe", "Done adding recipes"); + database.SavePlayerRecipeBook(client->GetPlayer(), recipe_book->GetBookID()); + database.DeleteItem(client->GetCharacterID(), item, 0); + client->GetPlayer()->item_list.RemoveItem(item, true); + client->QueuePacket(client->GetPlayer()->SendInventoryUpdate(client->GetVersion())); + if (packet && client->GetRecipeListSent()) + client->QueuePacket(packet->serialize()); + + safe_delete(packet); + } + else { + if (recipe_book) + client->Message(CHANNEL_COLOR_WHITE, "You have already learned all you can from this item."); + safe_delete(recipe_book); + } + + } + } + else + LogWrite(COMMAND__ERROR, 0, "Command", "Unknown unique item ID: %s", sep->arg[0]); + } + break; + } + case COMMAND_SUMMONITEM: { + if (sep && sep->IsNumber(0)) { + int32 item_id = atol(sep->arg[0]); + int32 quantity = 1; + + if (sep->arg[1] && sep->IsNumber(1)) + quantity = atoi(sep->arg[1]); + + if (sep->arg[2] && strncasecmp(sep->arg[2], "bank", 4) == 0) { + client->AddItemToBank(item_id,quantity); + } + else { + client->AddItem(item_id, quantity); + } + } + else { + client->SimpleMessage(CHANNEL_COLOR_YELLOW, "Usage: /summonitem {item_id} [quantity] or"); + client->SimpleMessage(CHANNEL_COLOR_YELLOW, "Usage: /summonitem {item_id} {quantity} [location] where location = bank"); + } + break; + } + case COMMAND_COLLECTION_ADDITEM: { + // takes 2 params: collection_id, slot + if (sep && sep->arg[0] && sep->arg[1] && sep->IsNumber(0) && sep->IsNumber(1)) { + Item *item = client->GetPlayer()->GetPlayerItemList()->GetItemFromIndex(atoul(sep->arg[1])); + if (item) + client->HandleCollectionAddItem(atoul(sep->arg[0]), item); + else + LogWrite(COLLECTION__ERROR, 0, "Collect", "Error in 'COMMAND_COLLECTION_ADDITEM'. Unable to get item from player '%s' at index %u", client->GetPlayer()->GetName(), atoul(sep->arg[0])); + } + else + LogWrite(COLLECTION__ERROR, 0, "Collect", "Received command 'COMMAND_COLLECTION_ADDITEM' with unhandeled argument types"); + break; + } + case COMMAND_COLLECTION_FILTER_MATCHITEM: { + // takes 1 param: slot + printf("COMMAND_COLLECTION_FILTER_MATCHITEM:\n"); + int i = 0; + while (sep->arg[i] && strlen(sep->arg[i]) > 0) { + printf("\t%u: %s\n", i, sep->arg[i]); + i++; + } + break; + } + case COMMAND_WHO:{ + const char* who = 0; + if(sep && sep->arg[0]){ + //cout << "Who query: \n"; + who = sep->argplus[0]; + //cout << who << endl; + } + zone_list.ProcessWhoQuery(who, client); + break; + } + case COMMAND_SELECT_JUNCTION:{ + LogWrite(MISC__TODO, 1, "TODO", "For access/travel selections (i.e. Mariner Bells, Player Death Window, etc.)\n\t(%s, function: %s, line #: %i)", __FILE__, __FUNCTION__, __LINE__); + int32 choice = 0; + if(sep && sep->arg[0] && sep->IsNumber(0)) + choice = atoul(sep->arg[0]); + if(client->GetPlayer()->GetHP() == 0){ //dead and this is a revive request + client->HandlePlayerRevive(choice); + } + break; + } + case COMMAND_SPAWN_MOVE:{ + Spawn* target = client->GetPlayer()->GetTarget(); + if(target && target->IsPlayer() == false){ + PacketStruct* packet = configReader.getStruct("WS_MoveObjectMode", client->GetVersion()); + if(packet){ + float unknown2_3 = 0; + int8 placement_mode = 0; + if(sep && sep->arg[0][0]){ + if(strcmp(sep->arg[0], "wall") == 0){ + placement_mode = 2; + unknown2_3 = 150; + } + else if(strcmp(sep->arg[0], "ceiling") == 0) + placement_mode = 1; + } + packet->setDataByName("placement_mode", placement_mode); + packet->setDataByName("spawn_id", client->GetPlayer()->GetIDWithPlayerSpawn(target)); + packet->setDataByName("model_type", target->GetModelType()); + packet->setDataByName("unknown", 1); //size + packet->setDataByName("unknown2", 1); //size 2 + packet->setDataByName("unknown2", .5, 1); //size 3 + packet->setDataByName("unknown2", 3, 2); + packet->setDataByName("unknown2", unknown2_3, 3); + packet->setDataByName("max_distance", 500); + packet->setDataByName("CoEunknown", 0xFFFFFFFF); + client->QueuePacket(packet->serialize()); + safe_delete(packet); + } + } + else{ + client->SimpleMessage(CHANNEL_COLOR_YELLOW, "Usage: /spawn move (wall OR ceiling)"); + client->SimpleMessage(CHANNEL_COLOR_YELLOW, "Moves a spawn anywhere you like. Optionally wall/ceiling can be provided to place wall/ceiling items."); + } + break; + } + case COMMAND_HAIL:{ + Spawn* spawn = client->GetPlayer()->GetTarget(); + if(spawn && spawn->GetTargetable()) + { + char tmp[75] = {0}; + + sprintf(tmp, "Hail, %s", spawn->GetName()); + + bool show_bubble = true; + + if (spawn->IsNPC()) + show_bubble = false; + client->GetCurrentZone()->HandleChatMessage(client->GetPlayer(), 0, CHANNEL_SAY, tmp, HEAR_SPAWN_DISTANCE, 0, show_bubble); + if(spawn->IsPlayer() == false && spawn->GetDistance(client->GetPlayer()) < 30){ + if(spawn->IsNPC() && ((NPC*)spawn)->EngagedInCombat()) + spawn->GetZone()->CallSpawnScript(spawn, SPAWN_SCRIPT_HAILED_BUSY, client->GetPlayer()); + else + spawn->ProcessMovement(); + LogWrite(MISC__TODO, 0, "Check", "ProcessMovement has been called"); + spawn->GetZone()->CallSpawnScript(spawn, SPAWN_SCRIPT_HAILED, client->GetPlayer()); + } + } + else { + string tmp = "Hail"; + client->GetCurrentZone()->HandleChatMessage(client->GetPlayer(), 0, CHANNEL_SAY, tmp.c_str(), HEAR_SPAWN_DISTANCE, 0, true); + } + break; + } + case COMMAND_SAY:{ + if (sep && sep->arg[0][0]) { + client->GetCurrentZone()->HandleChatMessage(client->GetPlayer(), 0, CHANNEL_SAY, sep->argplus[0], HEAR_SPAWN_DISTANCE); + if (client->GetPlayer()->GetTarget() && !(client->GetPlayer()->GetTarget()->IsPlayer())) + client->GetCurrentZone()->CallSpawnScript(client->GetPlayer()->GetTarget(), SPAWN_SCRIPT_HEAR_SAY, client->GetPlayer(), sep->argplus[0]); + } + else + client->SimpleMessage(CHANNEL_COLOR_YELLOW,"Usage: /say {message}"); + break; + } + case COMMAND_TELL:{ + if(sep && sep->arg[0] && sep->argplus[1]){ + if(!zone_list.HandleGlobalChatMessage(client, sep->arg[0], CHANNEL_TELL, sep->argplus[1])) + client->Message(CHANNEL_COLOR_RED,"Unable to find client %s",sep->arg[0]); + }else + client->SimpleMessage(CHANNEL_COLOR_YELLOW,"Usage: /tell {character_name} {message}"); + break; + } + case COMMAND_SHOUT:{ + if(sep && sep->arg[0][0]) + client->GetCurrentZone()->HandleChatMessage(client->GetPlayer(), 0, CHANNEL_SHOUT, sep->argplus[0]); + else + client->SimpleMessage(CHANNEL_COLOR_YELLOW,"Usage: /shout {message}"); + break; + } + case COMMAND_AUCTION:{ + if(sep && sep->arg[0][0]) + client->GetCurrentZone()->HandleChatMessage(client->GetPlayer(), 0, CHANNEL_AUCTION, sep->argplus[0]); + else + client->SimpleMessage(CHANNEL_COLOR_YELLOW,"Usage: /auction {message}"); + break; + } + case COMMAND_OOC:{ + //For now ooc will be the global chat channel, eventually when we create more channels we will create a global chat channel + if(sep && sep->arg[0][0]) + zone_list.HandleGlobalChatMessage(client, 0, CHANNEL_OOC, sep->argplus[0]); + else + client->SimpleMessage(CHANNEL_COLOR_YELLOW,"Usage: /ooc {message}"); + break; + } + case COMMAND_EMOTE:{ + if(sep && sep->arg[0][0]) + client->GetCurrentZone()->HandleChatMessage(client->GetPlayer(), 0, CHANNEL_EMOTE, sep->argplus[0]); + else + client->SimpleMessage(CHANNEL_COLOR_YELLOW,"Usage: /emote {action}"); + break; + } + case COMMAND_RACE:{ + if(sep && sep->arg[0][0] && sep->IsNumber(0)){ + if(sep->arg[1][0] && sep->IsNumber(1)){ + client->GetPlayer()->GetInfoStruct()->race = atoi(sep->arg[1]); + client->GetPlayer()->SetRace(atoi(sep->arg[1])); + client->UpdateTimeStampFlag ( RACE_UPDATE_FLAG ); + client->GetPlayer()->SetCharSheetChanged(true); + } + client->GetPlayer()->SetModelType(atoi(sep->arg[0])); + //EQ2Packet* outapp = client->GetPlayer()->spawn_update_packet(client->GetPlayer(), client->GetVersion(), client->GetPlayer()->GetFeatures()); + //client->QueuePacket(outapp); + } + else{ + client->SimpleMessage(CHANNEL_COLOR_YELLOW, "Usage: /race {race type id} {race id}"); + client->SimpleMessage(CHANNEL_COLOR_YELLOW, "{race id} is optional"); + } + break; + } + case COMMAND_BANK_DEPOSIT:{ + if(client->GetBanker() && sep && sep->arg[0]){ + int64 amount = 0; + string deposit = string(sep->arg[0]); + amount = atoi64(deposit.c_str()); + client->BankDeposit(amount); + } + break; + } + case COMMAND_BANK_WITHDRAWAL:{ + if(client->GetBanker() && sep && sep->arg[0] && sep->IsNumber(0)){ + int64 amount = 0; + string deposit = string(sep->arg[0]); + amount = atoi64(deposit.c_str()); + client->BankWithdrawal(amount); + } + break; + } + case COMMAND_BANK_CANCEL:{ + Spawn* banker = client->GetPlayer()->GetTarget(); + client->Bank(banker, true); + break; + } + case COMMAND_BANK:{ + LogWrite(PLAYER__DEBUG, 0, "Players", "Open Player Personal Bank..."); + Spawn* banker = client->GetPlayer()->GetTarget(); + client->Bank(banker); + break; + } + case COMMAND_GUILD_BANK:{ + LogWrite(GUILD__DEBUG, 0, "Guilds", "Open Guild Bank..."); + //Spawn* banker = client->GetPlayer()->GetTarget(); + client->SimpleMessage(CHANNEL_COLOR_YELLOW, "This will eventually open the guild bank!"); + break; + } + case COMMAND_START_MAIL: { + client->SetMailTransaction(client->GetPlayer()->GetTarget()); + client->SendMailList(); + break; + } + case COMMAND_CANCEL_MAIL: { + client->SetMailTransaction(0); + break; + } + case COMMAND_GET_MAIL_MESSAGE: { + if (sep && sep->arg[0] && sep->IsNumber(0)) + client->DisplayMailMessage(atoul(sep->arg[0])); + break; + } + case COMMAND_ADD_MAIL_PLAT: { + if (sep && sep->arg[0] && sep->IsNumber(0)) + client->AddMailCoin(0, 0, 0, atoul(sep->arg[0])); + break; + } + case COMMAND_ADD_MAIL_GOLD: { + if (sep && sep->arg[0] && sep->IsNumber(0)) + client->AddMailCoin(0, 0, atoul(sep->arg[0])); + break; + } + case COMMAND_ADD_MAIL_SILVER: { + if (sep && sep->arg[0] && sep->IsNumber(0)) + client->AddMailCoin(0, atoul(sep->arg[0])); + break; + } + case COMMAND_ADD_MAIL_COPPER: { + if (sep && sep->arg[0] && sep->IsNumber(0)) + client->AddMailCoin(atoul(sep->arg[0])); + break; + } + case COMMAND_SET_MAIL_ITEM: { + LogWrite(MISC__TODO, 1, "TODO", " received set_mail_item\n\t(%s, function: %s, line #: %i)", __FILE__, __FUNCTION__, __LINE__); + if (sep && sep->arg[0]) LogWrite(COMMAND__DEBUG, 0, "Command", "%s\n", sep->argplus[0]); + break; + } + case COMMAND_REMOVE_MAIL_PLAT: { + if (sep && sep->arg[0] && sep->IsNumber(0)) + client->RemoveMailCoin(0, 0, 0, atoul(sep->arg[0])); + break; + } + case COMMAND_REMOVE_MAIL_GOLD: { + if (sep && sep->arg[0] && sep->IsNumber(0)) + client->RemoveMailCoin(0, 0, atoul(sep->arg[0])); + break; + } + case COMMAND_REMOVE_MAIL_SILVER: { + if (sep && sep->arg[0] && sep->IsNumber(0)) + client->RemoveMailCoin(0, atoul(sep->arg[0])); + break; + } + case COMMAND_REMOVE_MAIL_COPPER: { + if (sep && sep->arg[0] && sep->IsNumber(0)) + client->RemoveMailCoin(atoul(sep->arg[0])); + break; + } + case COMMAND_TAKE_MAIL_ATTACHMENTS: { + if (sep && sep->arg[0] && sep->IsNumber(0)) + client->TakeMailAttachments(atoul(sep->arg[0])); + break; + } + case COMMAND_CANCEL_SEND_MAIL: { + client->CancelSendMail(); + break; + } + case COMMAND_DELETE_MAIL_MESSAGE: { + if (sep && sep->arg[0] && sep->IsNumber(0)) + client->DeleteMail(atoul(sep->arg[0]), true); + break; + } + case COMMAND_REPORT_SPAM: { + LogWrite(MISC__TODO, 1, "TODO", " received reportspam\n\t(%s, function: %s, line #: %i)", __FILE__, __FUNCTION__, __LINE__); + if (sep && sep->arg[0]) LogWrite(COMMAND__DEBUG, 0, "Command", "%s\n", sep->argplus[0]); + break; + } + case COMMAND_KILL:{ + Spawn* dead = 0; + if (sep && sep->arg[0] && strncasecmp(sep->arg[0],"self",4)==0){ + dead=client->GetPlayer(); + client->GetPlayer()->SetHP(0); + client->GetPlayer()->KillSpawn(dead); + }else{ + dead=client->GetPlayer()->GetTarget(); + if(dead && dead->IsPlayer() == false){ + dead->SetHP(0); + if(sep && sep->arg[0] && sep->IsNumber(0) && atoi(sep->arg[0]) == 1) + client->GetCurrentZone()->RemoveSpawn(dead, true); + else + client->GetPlayer()->KillSpawn(dead); + }else{ + client->SimpleMessage(CHANNEL_COLOR_YELLOW,"Usage: /kill (self)"); + client->SimpleMessage(CHANNEL_COLOR_YELLOW,"Kills currently selected non-player target."); + client->SimpleMessage(CHANNEL_COLOR_YELLOW,"Optionally, self may be used to kill yourself"); + } + } + break; + } + case COMMAND_LEVEL:{ + if(sep && sep->arg[ndx][0] && sep->IsNumber(0)){ + int16 new_level = atoi(sep->arg[ndx]); + if (!client->GetPlayer()->CheckLevelStatus(new_level)) + client->SimpleMessage(CHANNEL_COLOR_RED, "You do not have the required status to level up anymore!"); + else { + if (new_level < 1) + new_level = 1; + + if (new_level > 255) + new_level = 255; + + client->ChangeLevel(client->GetPlayer()->GetLevel(), new_level); + client->GetPlayer()->SetXP(1); + client->GetPlayer()->SetNeededXP(); + } + }else + client->SimpleMessage(CHANNEL_COLOR_YELLOW,"Usage: /level {new_level}"); + break; + } + case COMMAND_SIT: { + LogWrite(MISC__TODO, 1, "TODO", " Send update packet to all clients\n\t(%s, function: %s, line #: %i)", __FILE__, __FUNCTION__, __LINE__); + if(client->GetPlayer()->GetHP() > 0){ + client->QueuePacket(new EQ2Packet(OP_SitMsg, 0, 0)); + client->SimpleMessage(CHANNEL_COLOR_YELLOW,"You sit down."); + client->GetPlayer()->set_character_flag(CF_IS_SITTING); + } + break; + } + case COMMAND_STAND: { + LogWrite(MISC__TODO, 1, "TODO", " Send update packet to all clients\n\t(%s, function: %s, line #: %i)", __FILE__, __FUNCTION__, __LINE__); + if(client->GetPlayer()->GetHP() > 0){ + client->QueuePacket(new EQ2Packet(OP_StandMsg, 0, 0)); + client->SimpleMessage(CHANNEL_COLOR_YELLOW,"You stand up."); + client->GetPlayer()->reset_character_flag(CF_IS_SITTING); + } + break; + } + case COMMAND_CLASS:{ + if(sep && sep->arg[ndx][0]){ + client->GetPlayer()->SetPlayerAdventureClass(atoi(sep->arg[ndx])); + client->UpdateTimeStampFlag ( CLASS_UPDATE_FLAG ); + }else + client->SimpleMessage(CHANNEL_COLOR_YELLOW,"Usage: /class {class_id}"); + break; + } + case COMMAND_GENDER:{ + if(sep && sep->arg[ndx][0]){ + client->GetPlayer()->GetInfoStruct()->gender = atoi(sep->arg[ndx]); + client->GetPlayer()->SetCharSheetChanged(true); + client->UpdateTimeStampFlag ( GENDER_UPDATE_FLAG ); + }else{ + client->SimpleMessage(CHANNEL_COLOR_YELLOW,"Usage: /gender {new_gender_id}"); + client->SimpleMessage(CHANNEL_COLOR_YELLOW," Male: 1"); + client->SimpleMessage(CHANNEL_COLOR_YELLOW," Female: 2"); + } + break; + } + case COMMAND_FLYMODE:{ + PacketStruct* packet = configReader.getStruct("WS_ServerControlFlags", client->GetVersion()); + if(packet && sep && sep->arg[0] && sep->IsNumber(0)){ + PrintSep(sep, "COMMAND_FLYMODE"); + int8 val = atoi(sep->arg[0]); + packet->setDataByName("parameter5", 32); + packet->setDataByName("value", val); + client->QueuePacket(packet->serialize()); + + client->Message(CHANNEL_STATUS, "Flymode %s", val == 1 ? "on" : "off"); + /* + Some other values for this packet + first param: + 01 flymode + 02 collisons off + 04 unknown + 08 forward movement + 16 heading movement + 32 low gravity + 64 sit + + second + 2 crouch + + + third: + 04 float when trying to jump, no movement + 08 jump high, no movement + + fourth: + 04 autorun (fear?) + 16 moon jumps + 32 safe fall (float to ground) + 64 cant move + + fifth: + 01 die + 08 hover (fae) + 32 flymode2? + + */ + safe_delete(packet); + } + else{ + client->SimpleMessage(CHANNEL_COLOR_YELLOW, "Usage ON: /flymode 1"); + client->SimpleMessage(CHANNEL_COLOR_YELLOW, "Usage OFF: /flymode 0"); + } + break; + } + case COMMAND_LOOT_LIST:{ + Spawn* spawn = client->GetPlayer()->GetTarget(); + if(spawn && spawn->IsEntity()){ + vector loot_list = client->GetCurrentZone()->GetSpawnLootList(spawn->GetDatabaseID(), spawn->GetZone()->GetZoneID(), spawn->GetLevel(), race_types_list.GetRaceType(spawn->GetModelType())); + if(loot_list.size() > 0){ + client->Message(CHANNEL_COLOR_YELLOW, "%s belongs to the following loot lists: ", spawn->GetName()); + vector::iterator list_itr; + LootTable* table = 0; + for(list_itr = loot_list.begin(); list_itr != loot_list.end(); list_itr++){ + table = client->GetCurrentZone()->GetLootTable(*list_itr); + if(table) + client->Message(CHANNEL_COLOR_YELLOW, "%u - %s", *list_itr, table->name.c_str()); + } + } + Entity* target = (Entity*)spawn; + client->Message(CHANNEL_COLOR_YELLOW, "Coins being carried: %u", target->GetLootCoins()); + vector* items = target->GetLootItems(); + if(items){ + client->SimpleMessage(CHANNEL_COLOR_YELLOW, "Spawn is carrying the following items: "); + vector::iterator itr; + Item* item = 0; + for(itr = items->begin(); itr != items->end(); itr++){ + item = *itr; + client->Message(CHANNEL_COLOR_YELLOW, "%u - %s", item->details.item_id, item->name.c_str()); + } + } + else + client->SimpleMessage(CHANNEL_COLOR_YELLOW, "Spawn is not carrying any items."); + } + break; + } + case COMMAND_LOOT_SETCOIN:{ + Spawn* spawn = client->GetPlayer()->GetTarget(); + if(spawn && spawn->IsEntity() && sep && sep->arg[0] && sep->IsNumber(0)){ + Entity* target = (Entity*)spawn; + target->SetLootCoins(atoul(sep->arg[0])); + client->SimpleMessage(CHANNEL_COLOR_YELLOW, "Successfully set coins."); + } + else + client->SimpleMessage(CHANNEL_COLOR_YELLOW, "Syntax: /loot setcoin {amount}"); + break; + } + case COMMAND_LOOT_ADDITEM:{ + Spawn* spawn = client->GetPlayer()->GetTarget(); + if(spawn && spawn->IsEntity() && sep && sep->arg[0] && sep->IsNumber(0)){ + Entity* target = (Entity*)spawn; + int16 charges = 1; + if(sep->arg[1] && sep->IsNumber(1)) + charges = atoi(sep->arg[1]); + target->AddLootItem(atoul(sep->arg[0]), charges); + client->SimpleMessage(CHANNEL_COLOR_YELLOW, "Successfully added item."); + } + else + client->SimpleMessage(CHANNEL_COLOR_YELLOW, "Syntax: /loot additem {item_id}"); + break; + } + case COMMAND_LOOT_REMOVEITEM:{ + Spawn* spawn = client->GetPlayer()->GetTarget(); + if(spawn && spawn->IsEntity() && sep && sep->arg[0] && sep->IsNumber(0)){ + Entity* target = (Entity*)spawn; + target->LootItem(atoul(sep->arg[0])); + client->SimpleMessage(CHANNEL_COLOR_YELLOW, "Successfully removed item."); + } + else + client->SimpleMessage(CHANNEL_COLOR_YELLOW, "Syntax: /loot removeitem {item_id}"); + break; + } + case COMMAND_LOOT_CORPSE: + case COMMAND_LOOT:{ + Spawn* target = client->GetPlayer()->GetTarget(); + if(target && target->IsEntity()){ + if (target->GetDistance(client->GetPlayer()) <= 10){ + client->Loot((Entity*)target); + if (!((Entity*)target)->HasLoot()){ + if (((Entity*)target)->IsNPC()) + client->GetCurrentZone()->RemoveDeadSpawn(target); + } + } + else + client->Message(CHANNEL_COLOR_YELLOW, "You are too far away to interact with that"); + } + else if(!target || target->GetHP() > 0) + client->SimpleMessage(CHANNEL_COLOR_YELLOW, "Invalid target."); + break; + } + case COMMAND_RELOADSPAWNSCRIPTS:{ + client->SimpleMessage(CHANNEL_COLOR_YELLOW, "Reloading Spawn Scripts...."); + if (lua_interface) + lua_interface->SetSpawnScriptsReloading(true); + world.ResetSpawnScripts(); + database.LoadSpawnScriptData(); + if(lua_interface) { + lua_interface->DestroySpawnScripts(); + lua_interface->SetSpawnScriptsReloading(false); + } + client->SimpleMessage(CHANNEL_COLOR_YELLOW, "Success!"); + break; + } + case COMMAND_RELOADLUASYSTEM:{ + client->SimpleMessage(CHANNEL_COLOR_YELLOW, "Attempting to reload entire LUA system...."); + map debug_clients = lua_interface->GetDebugClients(); + safe_delete(lua_interface); + lua_interface = new LuaInterface(); + if(lua_interface) + lua_interface->SetSpawnScriptsReloading(true); + + if(lua_interface && debug_clients.size() > 0){ + map::iterator itr; + for(itr = debug_clients.begin(); itr != debug_clients .end(); itr++){ + if(lua_interface) + lua_interface->UpdateDebugClients(itr->first); + } + } + + world.ResetSpawnScripts(); + database.LoadSpawnScriptData(); + + world.ResetZoneScripts(); + database.LoadZoneScriptData(); + + int32 quest_count = database.LoadQuests(); + + zone_list.DeleteSpellProcess(); + master_spell_list.Reload(); + int32 spell_count = 0; + + if(lua_interface) { + lua_interface->DestroySpawnScripts(); + lua_interface->DestroySpells(); + spell_count = database.LoadSpellScriptData(); + lua_interface->SetSpawnScriptsReloading(false); + } + zone_list.LoadSpellProcess(); + + client->Message(CHANNEL_COLOR_YELLOW, "Successfully loaded %u spell(s), %u quest(s).", spell_count, quest_count); + break; + } + case COMMAND_DECLINE_QUEST:{ + int32 quest_id = 0; + if(sep && sep->arg[0] && sep->IsNumber(0)) + quest_id = atoul(sep->arg[0]); + if(quest_id > 0){ + Quest* quest = client->GetPendingQuest(quest_id); + if(quest){ + client->RemovePendingQuest(quest); + if(lua_interface) + lua_interface->CallQuestFunction(quest, "Declined", client->GetPlayer()); + safe_delete(quest); + client->GetCurrentZone()->SendQuestUpdates(client); + } + } + break; + } + case COMMAND_DELETE_QUEST:{ + int32 quest_id = 0; + if(sep && sep->arg[0] && sep->IsNumber(0)) + quest_id = atoul(sep->arg[0]); + if(quest_id > 0){ + if(lua_interface && client->GetPlayer()->player_quests.count(quest_id) > 0) { + Quest* quest = client->GetPlayer()->player_quests[quest_id]; + if (quest) + lua_interface->CallQuestFunction(quest, "Deleted", client->GetPlayer()); + } + client->RemovePlayerQuest(quest_id); + client->GetCurrentZone()->SendQuestUpdates(client); + } + break; + } + case COMMAND_ACCEPT_QUEST:{ + int32 quest_id = 0; + if(sep && sep->arg[0] && sep->IsNumber(0)) + quest_id = atoul(sep->arg[0]); + if(quest_id > 0){ + Quest* quest = client->GetPendingQuest(quest_id); + if(quest){ + client->RemovePendingQuest(quest); + client->AddPlayerQuest(quest); + client->GetCurrentZone()->SendQuestUpdates(client); + + // If character has already completed this quest once update the given date in the database + if (client->GetPlayer()->GetCompletedPlayerQuests()->count(quest_id) > 0) { + Quest* quest2 = client->GetPlayer()->GetCompletedQuest(quest_id); + if (quest2) + quest->SetCompleteCount(quest2->GetCompleteCount()); + + database.SaveCharRepeatableQuest(client, quest_id, quest->GetCompleteCount()); + + } + } + } + break; + } + case COMMAND_NAME:{ + if(sep && sep->arg[ndx][0]){ + memset(client->GetPlayer()->GetInfoStruct()->name, 0, 40); + strncpy(client->GetPlayer()->GetInfoStruct()->name, sep->arg[ndx], 39); + client->GetPlayer()->SetCharSheetChanged(true); + }else + client->Message(CHANNEL_COLOR_YELLOW,"Usage: /name {new_name}"); + + break; + } + case COMMAND_GROUPSAY:{ + GroupMemberInfo* gmi = client->GetPlayer()->GetGroupMemberInfo(); + if(sep && sep->arg[0] && gmi) + world.GetGroupManager()->GroupChatMessage(gmi->group_id, client->GetPlayer(), sep->argplus[0]); + break; + } + case COMMAND_GROUPINVITE: { + Entity* target = 0; + Client* target_client = 0; + + if (client->GetPlayer()->GetGroupMemberInfo() && !client->GetPlayer()->GetGroupMemberInfo()->leader) { + client->SimpleMessage(CHANNEL_COMMANDS, "You must be the group leader to invite."); + return; + } + + // name provided with command so it has to be a player, npc not supported here + if (sep && sep->arg[0] && strlen(sep->arg[0]) > 0){ + target_client = zone_list.GetClientByCharName(sep->arg[0]); + if (target_client) { + if (!target_client->IsConnected() || !target_client->IsReadyForSpawns()) + target = 0; + else + target = target_client->GetPlayer(); + } + } + + // if name was not provided use the players target, npc or player supported here + if (!target && client->GetPlayer()->GetTarget() && client->GetPlayer()->GetTarget()->IsEntity()) { + target = (Entity*)client->GetPlayer()->GetTarget(); + if (target->IsPlayer()) { + target_client = client->GetCurrentZone()->GetClientBySpawn(target); + } + } + + int8 result = world.GetGroupManager()->Invite(client->GetPlayer(), target); + + if (result == 0) { + client->Message(CHANNEL_COMMANDS, "You invite %s to group with you.", target->GetName()); + if (target_client) { + PacketStruct* packet = configReader.getStruct("WS_ReceiveOffer", target_client->GetVersion()); + if (packet) { + packet->setDataByName("type", 1); + packet->setDataByName("name", client->GetPlayer()->GetName()); + packet->setDataByName("unknown2", 1); + target_client->QueuePacket(packet->serialize()); + safe_delete(packet); + } + } + } + else if (result == 1) + client->SimpleMessage(CHANNEL_COMMANDS, "That player is already in a group."); + else if (result == 2) + client->SimpleMessage(CHANNEL_COMMANDS, "That player has been invited to another group."); + else if (result == 3) + client->SimpleMessage(CHANNEL_COMMANDS, "Your group is already full."); + else if (result == 4) + client->SimpleMessage(CHANNEL_COMMANDS, "You have a pending invitation, cancel it first."); + else if (result == 5) + client->SimpleMessage(CHANNEL_COMMANDS, "You cannot invite yourself!"); + else if (result == 6) + client->SimpleMessage(CHANNEL_COMMANDS, "Could not locate the player."); + else + client->SimpleMessage(CHANNEL_COMMANDS, "Group invite failed, unknown error!"); + + break; + } + case COMMAND_GROUPDISBAND: { + GroupMemberInfo* gmi = client->GetPlayer()->GetGroupMemberInfo(); + + if (gmi) { // TODO: Leader check + // world.GetGroupManager()->SimpleGroupMessage(gmi->group_id, "Your group has been disbanded."); + world.GetGroupManager()->RemoveGroup(gmi->group_id); + } + + break; + } + case COMMAND_GROUP_LEAVE: { + GroupMemberInfo* gmi = client->GetPlayer()->GetGroupMemberInfo(); + + if (gmi) { + int32 group_id = gmi->group_id; + world.GetGroupManager()->RemoveGroupMember(group_id, client->GetPlayer()); + if (!world.GetGroupManager()->IsGroupIDValid(group_id)) { + // leader->Message(CHANNEL_COLOR_GROUP, "%s has left the group.", client->GetPlayer()->GetName()); + } + else { + world.GetGroupManager()->GroupMessage(group_id, "%s has left the group.", client->GetPlayer()->GetName()); + } + + client->SimpleMessage(CHANNEL_COLOR_GROUP, "You have left the group"); + } + + break; + } + case COMMAND_FRIEND_ADD:{ + string name = ""; + if(sep && sep->arg[0] && strlen(sep->arg[0]) > 1) + name = database.GetPlayerName(sep->arg[0]); + else if(client->GetPlayer()->GetTarget() && client->GetPlayer()->GetTarget()->IsPlayer()) + name = string(client->GetPlayer()->GetTarget()->GetName()); + if(name.length() > 0){ + if(strcmp(name.c_str(), client->GetPlayer()->GetName()) != 0){ + if(client->GetPlayer()->IsIgnored(name.c_str())){ + client->GetPlayer()->RemoveIgnore(name.c_str()); + client->Message(CHANNEL_COLOR_CHAT_RELATIONSHIP, "Removed ignore: %s", name.c_str()); + client->SendChatRelationship(3, name.c_str()); + } + client->GetPlayer()->AddFriend(name.c_str(), true); + client->SendChatRelationship(0, name.c_str()); + client->Message(CHANNEL_COLOR_CHAT_RELATIONSHIP, "Added friend: %s", name.c_str()); + if(zone_list.GetClientByCharName(name)) + client->Message(CHANNEL_COLOR_CHAT_RELATIONSHIP, "Friend: %s has logged in.", name.c_str()); + } + else + client->SimpleMessage(CHANNEL_COLOR_RED, "You cannot be more friendly towards yourself!"); + } + else + client->SimpleMessage(CHANNEL_COLOR_CHAT_RELATIONSHIP, "That character does not exist."); + break; + } + case COMMAND_FRIEND_REMOVE:{ + string name = ""; + if(sep && sep->arg[0] && strlen(sep->arg[0]) > 1) + name = database.GetPlayerName(sep->arg[0]); + else if(client->GetPlayer()->GetTarget() && client->GetPlayer()->GetTarget()->IsPlayer()) + name = string(client->GetPlayer()->GetTarget()->GetName()); + if(name.length() > 0){ + client->GetPlayer()->RemoveFriend(name.c_str()); + client->SendChatRelationship(1, name.c_str()); + client->Message(CHANNEL_COLOR_CHAT_RELATIONSHIP, "Removed friend: %s", name.c_str()); + } + else + client->SimpleMessage(CHANNEL_COLOR_CHAT_RELATIONSHIP, "That character does not exist."); + break; + } + case COMMAND_FRIENDS:{ + + break; + } + case COMMAND_IGNORE_ADD:{ + string name = ""; + if(sep && sep->arg[0] && strlen(sep->arg[0]) > 1) + name = database.GetPlayerName(sep->arg[0]); + else if(client->GetPlayer()->GetTarget() && client->GetPlayer()->GetTarget()->IsPlayer()) + name = string(client->GetPlayer()->GetTarget()->GetName()); + if(name.length() > 0){ + if(strcmp(name.c_str(), client->GetPlayer()->GetName()) != 0){ + if(client->GetPlayer()->IsFriend(name.c_str())){ + client->GetPlayer()->RemoveFriend(name.c_str()); + client->Message(CHANNEL_COLOR_CHAT_RELATIONSHIP, "Removed friend: %s", name.c_str()); + client->SendChatRelationship(1, name.c_str()); + } + client->GetPlayer()->AddIgnore(name.c_str(), true); + client->SendChatRelationship(2, name.c_str()); + client->Message(CHANNEL_COLOR_CHAT_RELATIONSHIP, "Added ignore: %s", name.c_str()); + } + else + client->SimpleMessage(CHANNEL_COLOR_RED, "You cannot ignore yourself!"); + } + else + client->SimpleMessage(CHANNEL_COLOR_CHAT_RELATIONSHIP, "That character does not exist."); + break; + } + case COMMAND_IGNORE_REMOVE:{ + string name = ""; + if(sep && sep->arg[0] && strlen(sep->arg[0]) > 1) + name = database.GetPlayerName(sep->arg[0]); + else if(client->GetPlayer()->GetTarget() && client->GetPlayer()->GetTarget()->IsPlayer()) + name = string(client->GetPlayer()->GetTarget()->GetName()); + if(name.length() > 0){ + client->GetPlayer()->RemoveIgnore(name.c_str()); + client->SendChatRelationship(3, name.c_str()); + client->Message(CHANNEL_COLOR_CHAT_RELATIONSHIP, "Removed ignore: %s", name.c_str()); + } + break; + } + case COMMAND_IGNORES:{ + + break; + } + case COMMAND_GROUP_KICK:{ + Entity* kicked = 0; + Client* kicked_client = 0; + int32 group_id = 0; + + if (!client->GetPlayer()->GetGroupMemberInfo() || !client->GetPlayer()->GetGroupMemberInfo()->leader) + return; + + LogWrite(MISC__TODO, 0, "TODO", "Add a check to see if the client using the command (COMMAND_GROUP_KICK) is the group leader"); + + if (sep && sep->arg[0]) { + kicked_client = zone_list.GetClientByCharName(string(sep->arg[0])); + if (kicked_client) + kicked = kicked_client->GetPlayer(); + } + else if (client->GetPlayer()->GetTarget() && client->GetPlayer()->GetTarget()->IsEntity()) { + kicked = (Entity*)client->GetPlayer()->GetTarget(); + } + + group_id = client->GetPlayer()->GetGroupMemberInfo()->group_id; + + bool send_kicked_message = world.GetGroupManager()->GetGroupSize(group_id) > 2; + if (kicked) + world.GetGroupManager()->RemoveGroupMember(group_id, kicked); + + if(send_kicked_message) + world.GetGroupManager()->GroupMessage(group_id, "%s was kicked from the group.", kicked->GetName()); + else + client->Message(CHANNEL_COLOR_GROUP, "You kicked %s from the group", kicked->GetName()); + + if (kicked_client) + kicked_client->SimpleMessage(CHANNEL_COLOR_GROUP, "You were kicked from the group"); + + break; + } + case COMMAND_GROUP_MAKE_LEADER:{ + + if (!client->GetPlayer()->GetGroupMemberInfo() || !client->GetPlayer()->GetGroupMemberInfo()->leader) { + client->SimpleMessage(CHANNEL_COMMANDS, "You are not a group leader."); + return; + } + + if (sep && sep->arg[0] && strlen(sep->arg[0]) > 1) { + Client* new_leader = zone_list.GetClientByCharName(sep->arg[0]); + if (new_leader) { + if (client->GetPlayer()->IsGroupMember(new_leader->GetPlayer())) { + world.GetGroupManager()->MakeLeader(client->GetPlayer()->GetGroupMemberInfo()->group_id, new_leader->GetPlayer()); + } + } + else + client->SimpleMessage(CHANNEL_COMMANDS, "Unable to find the given player."); + } + else if (client->GetPlayer()->GetTarget() && client->GetPlayer()->GetTarget()->IsPlayer()) + world.GetGroupManager()->MakeLeader(client->GetPlayer()->GetGroupMemberInfo()->group_id, (Entity*)client->GetPlayer()->GetTarget()); + else + client->SimpleMessage(CHANNEL_COLOR_YELLOW, "Unable to change group leader."); + + break; + } + case COMMAND_GROUP_ACCEPT_INVITE: { + if(sep && sep->arg[0] && strcmp(sep->arg[0], "group") == 0) { + int8 result = world.GetGroupManager()->AcceptInvite(client->GetPlayer()); + + if (result == 0) + client->SimpleMessage(CHANNEL_GROUP, "You have joined the group."); + else if (result == 1) + client->SimpleMessage(CHANNEL_GROUP, "You do not have a pending invite."); + else if (result == 2) + client->SimpleMessage(CHANNEL_GROUP, "Unable to join group - could not find leader."); + else + client->SimpleMessage(CHANNEL_GROUP, "Unable to join group - unknown error."); + } + break; + } + case COMMAND_GROUP_DECLINE_INVITE: { + if(sep && sep->arg[0] && strcmp(sep->arg[0], "group") == 0) { + world.GetGroupManager()->DeclineInvite(client->GetPlayer()); // TODO: Add message to leader + } + break; + } + case COMMAND_SUMMON:{ + char* search_name = 0; + if(sep && sep->arg[0][0]) + search_name = sep->arg[0]; + + if(!search_name && !client->GetPlayer()->GetTarget()){ + client->SimpleMessage(CHANNEL_COLOR_YELLOW,"Usage: /summon [name]"); + client->SimpleMessage(CHANNEL_COLOR_YELLOW,"Summons a targeted spawn or a spawn by name to you. If more than one spawn matches name, it will summon closest."); + } + else{ + if(!client->Summon(search_name)) + client->SimpleMessage(CHANNEL_COLOR_YELLOW, "No matches found."); + } + break; + } + case COMMAND_GOTO:{ + const char* search_name = 0; + if(sep && sep->arg[0][0]) + search_name = sep->argplus[0]; + if(!search_name && !client->GetPlayer()->GetTarget()){ + client->SimpleMessage(CHANNEL_COLOR_YELLOW,"Usage: /goto [name]"); + client->SimpleMessage(CHANNEL_COLOR_YELLOW,"Moves to targeted spawn or to a spawn by name. If more than one spawn matches name, you will move to closest."); + } + else{ + if(!client->GotoSpawn(search_name)) + client->SimpleMessage(CHANNEL_COLOR_YELLOW, "No matches found."); + } + break; + } + case COMMAND_MOVE:{ + bool success = false; + try{ + if(sep && sep->arg[2][0] && sep->IsNumber(0) && sep->IsNumber(1) && sep->IsNumber(2)){ + EQ2Packet* app = client->GetPlayer()->Move(atof(sep->arg[0]), atof(sep->arg[1]), atof(sep->arg[2]), client->GetVersion()); + if(app){ + client->QueuePacket(app); + success = true; + } + } + } + catch(...){} + if(!success){ + client->SimpleMessage(CHANNEL_COLOR_YELLOW,"Usage: /move x y z"); + client->SimpleMessage(CHANNEL_COLOR_YELLOW,"Moves the client to the given coordinates."); + } + break; + } + case COMMAND_SETTIME:{ + if(sep && sep->arg[0]){ + sscanf (sep->arg[0], "%d:%d", &world.GetWorldTimeStruct()->hour, &world.GetWorldTimeStruct()->minute); + if(sep->arg[1] && sep->IsNumber(1)) + world.GetWorldTimeStruct()->month = atoi(sep->arg[1]) - 1; //zero based indexes + if(sep->arg[2] && sep->IsNumber(2)) + world.GetWorldTimeStruct()->day = atoi(sep->arg[2]) - 1; //zero based indexes + if(sep->arg[3] && sep->IsNumber(3)) + world.GetWorldTimeStruct()->year = atoi(sep->arg[3]); + client->GetCurrentZone()->SendTimeUpdateToAllClients(); + } + else{ + client->SimpleMessage(CHANNEL_COLOR_YELLOW,"Usage: /settime [hour:minute] (month) (day) (year)"); + client->SimpleMessage(CHANNEL_COLOR_YELLOW,"Example: /settime 8:30"); + } + break; + } + case COMMAND_VERSION:{ + client->Message(CHANNEL_COLOR_YELLOW,"%s %s", EQ2EMU_MODULE, CURRENT_VERSION); + client->Message(CHANNEL_COLOR_YELLOW,"Last Compiled on %s %s", COMPILE_DATE, COMPILE_TIME); + break; + } + case COMMAND_ZONE:{ + string* zonename = 0; + int32 instanceID = 0; + const char* zone = 0; + int32 zone_id = 0; + bool listSearch = false; + bool isInstance = false; + ZoneServer* zsZone = 0; + + if(sep && sep->arg[0][0]) + { + if(strncasecmp(sep->arg[0], "list", 4) == 0) + listSearch = true; + + else if(strncasecmp(sep->arg[0], "active", 6) == 0) + { + zone_list.SendZoneList(client); + break; + } + + else if(strncasecmp(sep->arg[0], "instance", 6) == 0) + { + if(sep->IsNumber(1)) + instanceID = atol(sep->arg[1]); + } + + else if(strncasecmp(sep->arg[0], "lock", 4) == 0) + { + PrintSep(sep, "ZONE LOCK"); + + if(sep->IsNumber(1)) + zsZone = zone_list.Get(atoul(sep->arg[1]), false); + else + zsZone = zone_list.Get(sep->arg[1], false); + + if( zsZone ) + { + zsZone->SetZoneLockState(true); + client->Message(CHANNEL_COLOR_YELLOW, "Zone %s (%u) is now locked.", zsZone->GetZoneName(), zsZone->GetZoneID()); + } + else + client->Message(CHANNEL_COLOR_RED, "Zone %s is not running and cannot be locked.", sep->arg[1]); + + break; + } + else if(strncasecmp(sep->arg[0], "unlock", 6) == 0) + { + PrintSep(sep, "ZONE UNLOCK"); + + if(sep->IsNumber(1)) + zsZone = zone_list.Get(atoul(sep->arg[1]), false); + else + zsZone = zone_list.Get(sep->arg[1], false); + + if( zsZone ) + { + zsZone->SetZoneLockState(false); + client->Message(CHANNEL_COLOR_YELLOW, "Zone %s (%u) is now unlocked.", zsZone->GetZoneName(), zsZone->GetZoneID()); + } + else + client->Message(CHANNEL_COLOR_RED, "Zone %s is not running and cannot be unlocked.", sep->arg[1]); + break; + } + else + { + if(sep->IsNumber(0)) + { + zone_id = atoul(sep->arg[0]); + zonename = database.GetZoneName(zone_id); + + if(zonename) + zone = zonename->c_str(); + } + else + zone = sep->arg[0]; + } + if(instanceID > 0) + { + ZoneServer* zsInstance = zone_list.GetByInstanceID(instanceID); + + if(zsInstance != NULL) + { + instanceID = zsInstance->GetInstanceID(); + zone = zsInstance->GetZoneName(); + zone_id = zsInstance->GetZoneID(); + isInstance = true; + } + } + } + + if(!listSearch) + { + if(!zone) + client->Message(CHANNEL_COLOR_RED, "Error: Invalid Zone"); + else if(instanceID != client->GetCurrentZone()->GetInstanceID() || + zone_id != client->GetCurrentZone()->GetZoneID()) + { + if(database.VerifyZone(zone)) + { + if(client->CheckZoneAccess(zone)) + { + client->Message(CHANNEL_COLOR_YELLOW,"Zoning to %s...", zone); + if(isInstance) + client->Zone(instanceID,true,true); + else + client->Zone(zone); + } + } + else + client->Message(CHANNEL_COLOR_RED, "Error: Zone '%s' not found. To get a list type /zone list", zone); + } + else + client->Message(CHANNEL_COLOR_RED, "Error: You are already in that zone!"); + } + else + { + const char* name = 0; + if(sep && sep->arg[1][0]) + { + map* zone_names; + name = sep->argplus[1]; + sint16 status = client->GetAdminStatus(); + if( status > 0 ) + { + client->SimpleMessage(CHANNEL_COLOR_RED, "ADMIN MODE"); + zone_names = database.GetZoneList(name, true); + } + else + zone_names = database.GetZoneList(name); + + if(!zone_names) + client->SimpleMessage(CHANNEL_COLOR_YELLOW, "No zones found."); + else + { + map::iterator itr; + client->SimpleMessage(CHANNEL_COLOR_YELLOW," ID Name: "); + for(itr = zone_names->begin(); itr != zone_names->end(); itr++) + client->Message(CHANNEL_COLOR_YELLOW,"%03lu %s", itr->first, itr->second.c_str()); + safe_delete(zone_names); + } + } + else + { + client->SimpleMessage(CHANNEL_COLOR_YELLOW,"Syntax: /zone [zone name]"); + client->SimpleMessage(CHANNEL_COLOR_YELLOW,"Syntax: /zone list [partial zone name]"); + } + } + safe_delete(zonename); + break; + } + case COMMAND_USE:{ + Spawn* target = client->GetPlayer()->GetTarget(); + if(target->IsWidget()) + ((Widget*)target)->HandleUse(client, "use"); + break; + } + case COMMAND_ATTACK: + case COMMAND_AUTO_ATTACK:{ + int8 type = 1; + Player* player = client->GetPlayer(); + if(!player) + break; + bool incombat = player->EngagedInCombat(); + if(sep && sep->arg[0] && sep->IsNumber(0)) + type = atoi(sep->arg[0]); + if(client->GetPlayer()->GetHP() == 0){ + client->SimpleMessage(CHANNEL_COLOR_RED,"You cannot do that right now."); + break; + } + if(type == 0){ + if(incombat) + client->SimpleMessage(CHANNEL_COLOR_COMBAT, "You stop fighting."); + player->InCombat(false); + player->InCombat(false, true); + player->SetRangeAttack(false); + } + else { + if(type == 2){ + player->InCombat(false); + if(incombat && player->GetRangeAttack()){ + player->SetRangeAttack(false); + player->InCombat(false, true); + client->SimpleMessage(CHANNEL_COLOR_COMBAT, "You stop fighting."); + } + else{ + player->SetRangeAttack(true); + player->InCombat(true, true); + client->SimpleMessage(CHANNEL_COLOR_COMBAT, "You start fighting."); + } + } + else { + player->InCombat(false, true); + player->SetRangeAttack(false); + player->InCombat(true); + if(!incombat) + client->SimpleMessage(CHANNEL_COLOR_COMBAT, "You start fighting."); + } + /*else + client->SimpleMessage(CHANNEL_COLOR_YELLOW, "You cannot attack that!");*/ + } + player->SetCharSheetChanged(true); + break; + } + case COMMAND_DEPOP:{ + bool allow_respawns = false; + if(sep && sep->arg[0] && sep->IsNumber(0)){ + if(atoi(sep->arg[0]) == 1) + allow_respawns = true; + } + client->GetCurrentZone()->Depop(allow_respawns); + break; + } + case COMMAND_REPOP:{ + client->GetCurrentZone()->Depop(false, true); + break; + } + case COMMAND_BUYBACK:{ + if(sep && sep->arg[1][0] && sep->IsNumber(0) && sep->IsNumber(1)){ + // Item ID and Unique ID get combined in this command so we need to get the number as an int64 and break it into 2 int32's + int64 id = atoi64(sep->arg[0]); + // get the first int32, the item id + //int32 item_id = (int32)id; + // get the second int32, the unique id + int32 unique_id = (int32)(id>>32); + int8 quantity = atoi(sep->arg[1]); + if(quantity == 255) + quantity = 1; + client->BuyBack(unique_id, quantity); + } + break; + } + case COMMAND_MERCHANT_BUY:{ + if(sep && sep->arg[1][0] && sep->IsNumber(0) && sep->IsNumber(1)){ + int32 item_id = atoul(sep->arg[0]); + int8 quantity = atoi(sep->arg[1]); + client->BuyItem(item_id, quantity); + } + break; + } + case COMMAND_MERCHANT_SELL:{ + if(sep && sep->arg[1][0] && sep->IsNumber(0) && sep->IsNumber(1)){ + // Item ID and Unique ID get combined in this command so we need to get the number as an int64 and break it into 2 int32's + int64 id = atoi64(sep->arg[0]); + // get the first int32, the item id + int32 item_id = (int32)id; + // get the second int32, the unique id + int32 unique_id = (int32)(id>>32); + + int8 quantity = atoi(sep->arg[1]); + LogWrite(MERCHANT__DEBUG, 0, "Merchant", "Selling Item: Item Id = %ul, unique id = %ul, Quantity = %i", item_id, unique_id, quantity); + client->SellItem(item_id, quantity, unique_id); + } + break; + } + case COMMAND_MENDER_REPAIR: { + if (sep && sep->arg[0] && sep->IsNumber(0)) + client->RepairItem(atoul(sep->arg[0])); + break; + } + case COMMAND_MENDER_REPAIR_ALL: { + client->RepairAllItems(); + break; + } + case COMMAND_CANCEL_MERCHANT:{ + client->SetMerchantTransaction(0); + break; + } + case COMMAND_START_MERCHANT:{ + break; + } + case COMMAND_INVULNERABLE:{ + sint8 val = -1; + if(sep && sep->arg[0] && sep->IsNumber(0)){ + val = atoi(sep->arg[0]); + client->GetPlayer()->SetInvulnerable(val==1); + if(client->GetPlayer()->GetInvulnerable()) + client->SimpleMessage(CHANNEL_COLOR_YELLOW, "You are now invulnerable!"); + else + client->SimpleMessage(CHANNEL_COLOR_YELLOW, "You are no longer invulnerable!"); + } + if(val == -1) + client->SimpleMessage(CHANNEL_COLOR_YELLOW, "Usage: /invulnerable [0/1]"); + break; + } + case COMMAND_REPAIR: { + Spawn* spawn = client->GetPlayer()->GetTarget(); + if (spawn && spawn->GetMerchantType() & MERCHANT_TYPE_REPAIR) { + client->SetMerchantTransaction(spawn); + client->SendRepairList(); + } + break; + } + case COMMAND_LOTTO: { + Spawn* spawn = client->GetPlayer()->GetTarget(); + if (spawn && spawn->GetMerchantType() & MERCHANT_TYPE_LOTTO) { + client->SetMerchantTransaction(spawn); + client->ShowLottoWindow(); + } + break; + } + case COMMAND_ACCEPT_REWARD:{ + int32 unknown = 0; + int32 selectable_item_id = 0; + //Quest *quest = 0; + Collection *collection = 0; + + /* no idea what the first argument is for (faction maybe?) + if the reward has a selectable item reward, it's sent as the second argument + if neither of these are included in the reward, there is no sep + since the regular item rewards are manditary to receive, we don't have to know what they are until we accept the collection or quest + only 1 quest or collection reward may be displayed at a time */ + if (sep && sep->arg[0] && sep->arg[1] && sep->IsNumber(0) && sep->IsNumber(1)) { + unknown = atoul(sep->arg[0]); + selectable_item_id = atoul(sep->arg[1]); + } + + //if ((quest = player->GetPendingQuestReward())) + // client->AcceptQuestRewards(quest, selectable_item_id); + + /* the below needs to go away eventually and be redone */ + int32 item_id = 0; + if(sep && sep->arg[0][0] && sep->IsNumber(0)) + item_id = atoul(sep->arg[0]); + Quest* quest = client->GetPendingQuestAcceptance(item_id); + if(quest){ + client->AcceptQuestReward(quest, item_id); + break; + } + + if (collection = player->GetPendingCollectionReward()) + client->AcceptCollectionRewards(collection, selectable_item_id); + else + LogWrite(COMMAND__ERROR, 0, "Command", "Error in COMMAND_ACCEPT_REWARD. No pending quest or collection reward was found (unknown=%u).", unknown); + break; + } + case COMMAND_BUY_FROM_BROKER:{ + if(sep && sep->arg[1][0] && sep->IsNumber(0) && sep->IsNumber(1)){ + int32 item_id = atoul(sep->arg[0]); + int16 quantity = atoul(sep->arg[1]); + client->AddItem(item_id, quantity); + } + break; + } + case COMMAND_SEARCH_STORES_PAGE:{ + if(sep && sep->arg[0][0] && sep->IsNumber(0)){ + int32 page = atoul(sep->arg[0]); + client->SearchStore(page); + } + break; + } + case COMMAND_SEARCH_STORES:{ + if(sep && sep->arg[0][0]){ + const char* values = sep->argplus[0]; + if(values){ + map str_values = TranslateBrokerRequest(values); + vector* items = master_item_list.GetItems(str_values); + if(items){ + client->SetItemSearch(items); + client->SearchStore(0); + } + } + } + break; + } + + case COMMAND_LUADEBUG:{ + if(sep && sep->arg[0][0] && strcmp(sep->arg[0], "start") == 0){ + client->SetLuaDebugClient(true); + if(lua_interface) + lua_interface->UpdateDebugClients(client); + client->SimpleMessage(CHANNEL_COLOR_YELLOW, "You will now receive LUA error messages."); + } + else if(sep && sep->arg[0][0] && strcmp(sep->arg[0], "stop") == 0){ + client->SetLuaDebugClient(false); + if(lua_interface) + lua_interface->RemoveDebugClients(client); + client->SimpleMessage(CHANNEL_COLOR_YELLOW, "You will no longer receive LUA error messages."); + } + else{ + client->SimpleMessage(CHANNEL_COLOR_YELLOW, "Syntax: /luadebug {start | stop}"); + client->SimpleMessage(CHANNEL_COLOR_YELLOW, "This will allow you to receive lua debug messages normally seen only in the console."); + } + break; + } + case COMMAND_SPAWN_GROUP: + { + Spawn* target = client->GetPlayer()->GetTarget(); + + if(target && target->IsPlayer() == false) + { + if(sep && sep->arg[0][0] && strcmp(sep->arg[0], "create") == 0) + { + if(target->GetSpawnLocationPlacementID() > 0) + { + if(sep->arg[1] && !sep->IsNumber(1) && strlen(sep->arg[1]) > 0) + { + int32 id = database.CreateSpawnGroup(target, sep->arg[1]); + + if(id > 0) + client->Message(CHANNEL_COLOR_YELLOW, "Successfully created new spawn group with id: %u", id); + else + client->SimpleMessage(CHANNEL_COLOR_YELLOW,"Error creating group, check console for details."); + + target->SetSpawnGroupID(id); + target->AddSpawnToGroup(target); + } + else + client->SimpleMessage(CHANNEL_COLOR_YELLOW,"Syntax: /spawn group create [name]"); + } + else + client->SimpleMessage(CHANNEL_COLOR_YELLOW,"Could not use spawn to create a new group. Likely cause would be a newly spawned spawn that did not exist when /reload spawns was last used."); + } + else if(sep && sep->arg[0][0] && strcmp(sep->arg[0], "add") == 0) + { + if(sep->arg[1] && sep->IsNumber(1)) + { + int32 group_id = atoul(sep->arg[1]); + Spawn* leader = client->GetCurrentZone()->GetSpawnGroup(group_id); + + if(leader) + { + leader->AddSpawnToGroup(target); + target->SetSpawnGroupID(group_id); + + if(database.SpawnGroupAddSpawn(target, group_id)) + client->Message(CHANNEL_COLOR_YELLOW, "Successfully added '%s' to group id: %u", target->GetName(), group_id); + else + client->SimpleMessage(CHANNEL_COLOR_YELLOW,"Error adding spawn to group, check console for details."); + } + else + client->SimpleMessage(CHANNEL_COLOR_YELLOW, "No spawns found in the current zone for that spawn group, be sure to use '/spawn group create' first!"); + } + else + client->SimpleMessage(CHANNEL_COLOR_YELLOW,"Syntax: /spawn group add [group id]"); + } + else if(target->GetSpawnGroupID() == 0) + { + client->SimpleMessage(CHANNEL_COLOR_YELLOW, "That spawn is not in a group!"); + } + else if(sep && sep->arg[0][0] && strcmp(sep->arg[0], "remove") == 0) + { + int32 group_id = target->GetSpawnGroupID(); + target->RemoveSpawnFromGroup(); + + if(database.SpawnGroupRemoveSpawn(target, group_id)) + client->Message(CHANNEL_COLOR_YELLOW, "Successfully removed '%s' from group id: %u", target->GetName(), group_id); + else + client->SimpleMessage(CHANNEL_COLOR_YELLOW,"Error removing spawn from group, check console for details."); + } + else if(sep && sep->arg[0][0] && strcmp(sep->arg[0], "associate") == 0) + { + int32 group_id = target->GetSpawnGroupID(); + + if(sep->arg[1] && sep->IsNumber(1)) + { + if(database.SpawnGroupAddAssociation(group_id, atoul(sep->arg[1]))) + client->Message(CHANNEL_COLOR_YELLOW, "Successfully associated group id %u with group id %u", group_id, atoul(sep->arg[1])); + else + client->SimpleMessage(CHANNEL_COLOR_YELLOW,"Error associating groups, check console for details."); + } + else + client->SimpleMessage(CHANNEL_COLOR_YELLOW,"Allows you to spawn only one associated group at once. Syntax: /spawn group associate [other group id]"); + } + else if(sep && sep->arg[0][0] && strcmp(sep->arg[0], "deassociate") == 0) + { + int32 group_id = target->GetSpawnGroupID(); + + if(sep->arg[1] && sep->IsNumber(1)) + { + if(database.SpawnGroupRemoveAssociation(group_id, atoul(sep->arg[1]))) + client->Message(CHANNEL_COLOR_YELLOW, "Successfully removed association between group id %u and group id %u", group_id, atoul(sep->arg[1])); + else + client->SimpleMessage(CHANNEL_COLOR_YELLOW,"Error removing group associations, check console for details."); + } + else + client->SimpleMessage(CHANNEL_COLOR_YELLOW,"Removes previous group associations. Syntax: /spawn group deassociate [other group id]"); + } + else if(sep && sep->arg[0][0] && strcmp(sep->arg[0], "chance") == 0) + { + if(sep->arg[1] && sep->IsNumber(1)) + { + if(database.SetGroupSpawnChance(target->GetSpawnGroupID(), atof(sep->arg[1]))) + client->Message(CHANNEL_COLOR_YELLOW, "Successfully set group spawn chance to %f for group id: %u", atof(sep->arg[1]), target->GetSpawnGroupID()); + else + client->SimpleMessage(CHANNEL_COLOR_YELLOW,"Error setting group spawn chance, check console for details."); + } + else + client->SimpleMessage(CHANNEL_COLOR_YELLOW,"Syntax: /spawn group chance [group's spawn chance percentage]"); + } + else + { + client->SimpleMessage(CHANNEL_COLOR_YELLOW, "This command allows you to modify spawn groups."); + client->SimpleMessage(CHANNEL_COLOR_YELLOW,"Syntax: /spawn group [create/add/remove/chance/associate/deassociate]"); + } + } + else + client->SimpleMessage(CHANNEL_COLOR_YELLOW, "You must select a valid spawn to use this command."); + break; + } + case COMMAND_SPAWN_COMBINE:{ + Spawn* spawn = client->GetPlayer()->GetTarget(); + float radius = 0; + bool failed = true; + if(spawn && !spawn->IsPlayer() && sep && sep->arg[0] && sep->arg[0][0]){ + failed = false; + if(spawn->GetSpawnGroupID() > 0){ + client->SimpleMessage(CHANNEL_COLOR_YELLOW, "Can not combine this spawn as it is in a spawn group. Remove it from the group and try again."); + } + else if(sep->IsNumber(0)){ + radius = atof(sep->arg[0]); + client->CombineSpawns(radius, spawn); + } + else{ + if(strncasecmp(sep->arg[0], "add", 3) == 0){ + client->AddCombineSpawn(spawn); + } + else if(strncasecmp(sep->arg[0], "remove", 6) == 0){ + client->RemoveCombineSpawn(spawn); + } + else if(strncasecmp(sep->arg[0], "save", 4) == 0){ + const char* name = 0; + if(sep->arg[1] && sep->arg[1][0]) + name = sep->argplus[1]; + client->SaveCombineSpawns(name); + } + else + failed = true; + } + } + if(failed){ + client->SimpleMessage(CHANNEL_COLOR_YELLOW, "This command combines several spawns into a single spawn group."); + client->SimpleMessage(CHANNEL_COLOR_YELLOW,"Syntax: /spawn combine [radius/add/remove/save]"); + client->SimpleMessage(CHANNEL_COLOR_YELLOW,"Ex: /spawn combine 1, /spawn combine save (spawn group name)"); + } + break; + } + case COMMAND_SPAWN_CREATE:{ + Spawn* spawn = 0; + if(sep && sep->arg[4][0] && strncasecmp(sep->arg[0], "object", 6) == 0 && sep->IsNumber(1) && sep->IsNumber(2) && sep->IsNumber(3)){ + spawn = new Object(); + memset(&spawn->appearance, 0, sizeof(spawn->appearance)); + } + else if (sep && sep->arg[4][0] && strncasecmp(sep->arg[0], "groundspawn", 11) == 0 && sep->IsNumber(1) && sep->IsNumber(2) && sep->IsNumber(3)) { + spawn = new GroundSpawn(); + memset(&spawn->appearance, 0, sizeof(spawn->appearance)); + } + else if (sep && sep->arg[4][0] && strncasecmp(sep->arg[0], "sign", 4) == 0 && sep->IsNumber(1) && sep->IsNumber(2) && sep->IsNumber(3)) { + spawn = new Sign(); + memset(&spawn->appearance, 0, sizeof(spawn->appearance)); + } + else if(sep && sep->arg[4][0] && strncasecmp(sep->arg[0], "npc", 3) == 0 && sep->IsNumber(1) && sep->IsNumber(2) && sep->IsNumber(3)){ + spawn = new NPC(); + memset(&spawn->appearance, 0, sizeof(spawn->appearance)); + spawn->appearance.pos.collision_radius = 32; + spawn->secondary_command_list_id = 0; + spawn->primary_command_list_id = 0; + spawn->appearance.display_name = 1; + spawn->appearance.show_level = 1; + spawn->appearance.attackable = 1; + } + else{ + client->SimpleMessage(CHANNEL_COLOR_YELLOW, "Syntax: /spawn create [spawn type] [race type] [class type] [level] [name] (difficulty) (size)"); + client->SimpleMessage(CHANNEL_COLOR_YELLOW, "All parameters are required except difficulty and size. Valid types are Object, NPC, Sign, or GroundSpawn"); + client->SimpleMessage(CHANNEL_COLOR_YELLOW, "Ex: /spawn create npc 203 1 50 'Lady Vox' 1 32"); + break; + } + spawn->SetID(Spawn::NextID()); + spawn->SetX(client->GetPlayer()->GetX()); + spawn->SetY(client->GetPlayer()->GetY()); + spawn->SetZ(client->GetPlayer()->GetZ()); + spawn->SetHeading(client->GetPlayer()->GetHeading()); + spawn->SetSpawnOrigX(spawn->GetX()); + spawn->SetSpawnOrigY(spawn->GetY()); + spawn->SetSpawnOrigZ(spawn->GetZ()); + spawn->SetSpawnOrigHeading(spawn->GetHeading()); + spawn->appearance.targetable = 1; + spawn->appearance.race = 255; + spawn->appearance.pos.grid_id = client->GetPlayer()->appearance.pos.grid_id; + spawn->SetModelType(atoi(sep->arg[1])); + spawn->SetAdventureClass(atoi(sep->arg[2])); + spawn->SetLevel(atoi(sep->arg[3])); + spawn->SetName(sep->arg[4]); + if(sep->arg[5][0] && sep->IsNumber(5)) + spawn->SetEncounterLevel(atoi(sep->arg[5])); + if(sep->arg[6][0] && sep->IsNumber(6)) + spawn->size = atoi(sep->arg[6]); + if(spawn->GetTotalHP() == 0){ + spawn->SetTotalHP(25*spawn->GetLevel() + 1); + spawn->SetHP(25*spawn->GetLevel() + 1); + } + if(spawn->GetTotalPower() == 0){ + spawn->SetTotalPower(25*spawn->GetLevel() + 1); + spawn->SetPower(25*spawn->GetLevel() + 1); + } + client->GetCurrentZone()->AddSpawn(spawn); + break; + } + case COMMAND_SPAWN_EQUIPMENT:{ + Spawn* spawn = client->GetPlayer()->GetTarget(); + if(spawn && sep && sep->arg[1][0] && sep->IsNumber(0) && sep->IsNumber(1) && spawn->IsEntity()){ + int8 slot = atoi(sep->arg[0]); + int16 type = atoi(sep->arg[1]); + int8 red = 0; + int8 green = 0; + int8 blue = 0; + int8 h_red = 0; + int8 h_green = 0; + int8 h_blue = 0; + if(sep->arg[2]) + red = atoi(sep->arg[2]); + if(sep->arg[3]) + green = atoi(sep->arg[3]); + if(sep->arg[4]) + blue = atoi(sep->arg[4]); + if(sep->arg[5]) + h_red = atoi(sep->arg[5]); + if(sep->arg[6]) + h_green = atoi(sep->arg[6]); + if(sep->arg[7]) + h_blue = atoi(sep->arg[7]); + ((Entity*)spawn)->SetEquipment(slot, type, red, green, blue, h_red, h_green, h_blue); + database.SaveNPCAppearanceEquipment(spawn->GetDatabaseID() , slot, type, red, green, blue, h_red, h_green, h_blue); + } + else{ + client->SimpleMessage(CHANNEL_COLOR_YELLOW, "Syntax: /spawn equipment [slot] [appearance id] (red) (green) (blue) (highlight red) (hgreen) (hblue)"); + client->SimpleMessage(CHANNEL_COLOR_YELLOW, "This will set the given spawn's equipment. "); + client->SimpleMessage(CHANNEL_COLOR_YELLOW, "Slot is 0-24, Appearance ID from appearances table, Colors are 0-255"); + } + break; + } + case COMMAND_SPAWN_DETAILS:{ + Spawn* spawn = client->GetPlayer()->GetTarget(); + if(spawn){ + const char* type = "NPC"; + if(spawn->IsObject()) + type = "Object"; + else if(spawn->IsSign()) + type = "Sign"; + else if(spawn->IsWidget()) + type = "Widget"; + else if(spawn->IsGroundSpawn()) + type = "GroundSpawn"; + client->Message(CHANNEL_COLOR_YELLOW, "Name: %s, %s ID: %u", spawn->GetName(), type, spawn->GetDatabaseID()); + client->Message(CHANNEL_COLOR_YELLOW, "Last Name: %s, Sub-Title: %s, Prefix: %s, Suffix: %s", spawn->GetLastName(), spawn->GetSubTitle(), spawn->GetPrefixTitle(), spawn->GetSuffixTitle()); + client->Message(CHANNEL_COLOR_YELLOW, "Spawn Location ID: %u, Spawn Group ID: %u", spawn->GetSpawnLocationID(), spawn->GetSpawnGroupID()); + client->Message(CHANNEL_COLOR_YELLOW, "Faction ID: %u, Merchant ID: %u, Transporter ID: %u", spawn->GetFactionID(), spawn->GetMerchantID(), spawn->GetTransporterID()); + client->Message(CHANNEL_COLOR_YELLOW, "Grid ID: %u", spawn->GetLocation()); + client->Message(CHANNEL_COLOR_YELLOW, "Race: %i, Class: %i, Gender: %i", spawn->GetRace(), spawn->GetAdventureClass(), spawn->GetGender()); + client->Message(CHANNEL_COLOR_YELLOW, "Level: %i, HP: %u, Power: %u", spawn->GetLevel(), spawn->GetHP(), spawn->GetPower()); + client->Message(CHANNEL_COLOR_YELLOW, "Respawn Time: %u (sec), X: %f, Y: %f, Z: %f Heading: %f", spawn->GetRespawnTime(), spawn->GetX(), spawn->GetY(), spawn->GetZ(), spawn->GetHeading()); + client->Message(CHANNEL_COLOR_YELLOW, "Collision Radius: %i, Size: %i, Difficulty: %i, Heroic: %i", spawn->GetCollisionRadius(), spawn->GetSize(), spawn->GetEncounterLevel(), spawn->GetHeroic()); + client->Message(CHANNEL_COLOR_YELLOW, "Targetable: %i, Show Name: %i, Attackable: %i, Show Level: %i", spawn->GetTargetable(), spawn->GetShowName(), spawn->GetAttackable(), spawn->GetShowLevel()); + client->Message(CHANNEL_COLOR_YELLOW, "Show Command Icon: %i, Display Hand Icon: %i", spawn->GetShowCommandIcon(), spawn->GetShowHandIcon()); + if(spawn->IsEntity()){ + client->Message(CHANNEL_COLOR_YELLOW, "Facial Hair Type: %i, Hair Type: %i, Chest Type: %i, Legs Type: %i", ((Entity*)spawn)->GetFacialHairType(), ((Entity*)spawn)->GetHairType(), ((Entity*)spawn)->GetChestType(), ((Entity*)spawn)->GetLegsType()); + client->Message(CHANNEL_COLOR_YELLOW, "Soga Facial Hair Type: %i, Soga Hair Type: %i, Wing Type: %i", ((Entity*)spawn)->GetSogaFacialHairType(), ((Entity*)spawn)->GetSogaHairType(), ((Entity*)spawn)->GetWingType()); + } + client->Message(CHANNEL_COLOR_YELLOW, "Model Type: %i, Soga Race Type: %i", spawn->GetModelType(), spawn->GetSogaModelType()); + client->Message(CHANNEL_COLOR_YELLOW, "Primary Command Type: %u, Secondary Command Type: %u", spawn->GetPrimaryCommandListID(), spawn->GetSecondaryCommandListID()); + client->Message(CHANNEL_COLOR_YELLOW, "Visual State: %i, Action State: %i, Mood State: %i, Initial State: %i, Activity Status: %i", spawn->GetVisualState(), spawn->GetActionState(), spawn->GetMoodState(), spawn->GetInitialState(), spawn->GetActivityStatus()); + client->Message(CHANNEL_COLOR_YELLOW, "Emote State: %i, Pitch: %f, Roll: %f, Hide Hood: %i", spawn->GetEmoteState(), spawn->GetPitch(), spawn->GetRoll(), spawn->appearance.hide_hood); + if (spawn->IsNPC()) + client->Message(CHANNEL_COLOR_YELLOW, "Randomize: %u", ((NPC*)spawn)->GetRandomize()); + + PacketStruct* packet = configReader.getStruct("WS_EqShowBook", client->GetVersion()); + if (packet) { + packet->setDataByName("spawn_id", client->GetPlayer()->GetIDWithPlayerSpawn(client->GetPlayer())); + + string title = string(spawn->GetName()) + "(" + to_string(spawn->GetDatabaseID()) + ")"; + packet->setDataByName("book_title", title.c_str()); + packet->setDataByName("book_type", "simple"); + packet->setDataByName("unknown2", 1); + packet->setDataByName("unknown5", 1, 4); + packet->setArrayLengthByName("num_pages", 4); + string details; + details += "\\#0000FFName: " + string(spawn->GetName()) + "\n"; + details += "Type: " + string(type) + "\n"; + details += "ID: " + to_string(spawn->GetDatabaseID()) + "\n"; + details += "Last Name: " + string(spawn->GetLastName()) + "\n"; + details += "Sub-Title: " + string(spawn->GetSubTitle()) + "\n"; + details += "Prefix: " + string(spawn->GetPrefixTitle()) + "\n"; + details += "Suffix: " + string(spawn->GetSuffixTitle()) + "\n"; + details += "Race: " + to_string(spawn->GetRace()) + "\n"; + details += "Class: " + to_string(spawn->GetAdventureClass()) + "\n"; + details += "Gender: " + to_string(spawn->GetGender()) + "\n"; + details += "Level: " + to_string(spawn->GetLevel()) + "\n"; + details += "HP: " + to_string(spawn->GetHP()) + "\n"; + details += "Power: " + to_string(spawn->GetPower()) + "\n"; + details += "Difficulty: " + to_string(spawn->GetEncounterLevel()) + "\n"; + details += "Heroic: " + to_string(spawn->GetHeroic()) + "\n"; + details += "Group ID: " + to_string(spawn->GetSpawnGroupID()) + "\n"; + details += "Faction ID: " + to_string(spawn->GetFactionID()) + "\n"; + details += "Merchant ID: " + to_string(spawn->GetMerchantID()) + "\n"; + details += "Transport ID: " + to_string(spawn->GetTransporterID()) + "\n"; + details += "Location ID: " + to_string(spawn->GetSpawnLocationID()) + "\n"; + char x[16]; + sprintf(x, "%.2f", spawn->GetX()); + char y[16]; + sprintf(y, "%.2f", spawn->GetY()); + char z[16]; + sprintf(z, "%.2f", spawn->GetZ()); + details += "Location: " + string(x) + ", " + string(y) + ", " + string(z) + "\n"; + + string details2; + details2 += "Heading: " + to_string(spawn->GetHeading()) + "\n"; + details2 += "Grid ID: " + to_string(spawn->GetLocation()) + "\n"; + details2 += "Size: " + to_string(spawn->GetSize()) + "\n"; + details2 += "Collision Radius: " + to_string(spawn->GetCollisionRadius()) + "\n"; + details2 += "Respawn Time: " + to_string(spawn->GetRespawnTime()) + "\n"; + details2 += "Targetable: " + to_string(spawn->GetTargetable()) + "\n"; + details2 += "Show Name: " + to_string(spawn->GetShowName()) + "\n"; + details2 += "Attackable: " + to_string(spawn->GetAttackable()) + "\n"; + details2 += "Show Level: " + to_string(spawn->GetShowLevel()) + "\n"; + details2 += "Show Command Icon: " + to_string(spawn->GetShowCommandIcon()) + "\n"; + details2 += "Display Hand Icon: " + to_string(spawn->GetShowHandIcon()) + "\n"; + details2 += "Model Type: " + to_string(spawn->GetModelType()) + "\n"; + details2 += "Soga Race Type: " + to_string(spawn->GetSogaModelType()) + "\n"; + details2 += "Primary Command ID: " + to_string(spawn->GetPrimaryCommandListID()) + "\n"; + details2 += "Secondary Cmd ID: " + to_string(spawn->GetSecondaryCommandListID()) + "\n"; + details2 += "Visual State: " + to_string(spawn->GetVisualState()) + "\n"; + details2 += "Action State: " + to_string(spawn->GetActionState()) + "\n"; + details2 += "Mood State: " + to_string(spawn->GetMoodState()) + "\n"; + details2 += "Initial State: " + to_string(spawn->GetInitialState()) + "\n"; + details2 += "Activity Status: " + to_string(spawn->GetActivityStatus()) + "\n"; + details2 += "Emote State: " + to_string(spawn->GetEmoteState()) + "\n"; + + string details3; + details3 += "Pitch: " + to_string(spawn->GetPitch()) + "\n"; + details3 += "Roll: " + to_string(spawn->GetRoll()) + "\n"; + details3 += "Hide Hood: " + to_string(spawn->appearance.hide_hood) + "\n"; + + string details4; + if (spawn->IsEntity()) { + details4 += "Facial Hair Type: " + to_string(((Entity*)spawn)->GetFacialHairType()) + "\n"; + details4 += "Hair Type: " + to_string(((Entity*)spawn)->GetHairType()) + "\n"; + details4 += "Chest Type: " + to_string(((Entity*)spawn)->GetChestType()) + "\n"; + details4 += "Legs Type: " + to_string(((Entity*)spawn)->GetLegsType()) + "\n"; + details4 += "Soga Facial Hair Type: " + to_string(((Entity*)spawn)->GetSogaFacialHairType()) + "\n"; + details4 += "Soga Hair Type: " + to_string(((Entity*)spawn)->GetSogaHairType()) + "\n"; + details4 += "Wing Type: " + to_string(((Entity*)spawn)->GetWingType()) + "\n"; + if (spawn->IsNPC()) { + details4 += "\nRandomize: " + to_string(((NPC*)spawn)->GetRandomize()) + "\n"; + } + } + + //details2 += "" + to_string() + "\n"; + + packet->setArrayDataByName("page_text", details.c_str()); + packet->setArrayDataByName("page_text", details2.c_str(), 1); + packet->setArrayDataByName("page_text", details3.c_str(), 2); + packet->setArrayDataByName("page_text", details4.c_str(), 3); + + client->QueuePacket(packet->serialize()); + safe_delete(packet); + } + } + else{ + client->SimpleMessage(CHANNEL_COLOR_YELLOW, "Syntax: /spawn details "); + client->SimpleMessage(CHANNEL_COLOR_YELLOW, "This will display information about the currently selected spawn"); + } + break; + } + case COMMAND_SPAWN_TARGET:{ + if(sep && sep->arg[0][0] && sep->IsNumber(0)){ + int32 spawn_id = atoul(sep->arg[0]); + int16 response = client->GetCurrentZone()->SetSpawnTargetable(spawn_id); + client->Message(CHANNEL_COLOR_YELLOW, "%i spawn(s) in the current zone were reset to targetable.", response); + } + else if(sep && sep->arg[0][0] && sep->arg[1][0] && sep->IsNumber(1) && ToLower(string(sep->arg[0])) == "radius"){ + float distance = atof(sep->arg[1]); + int16 response = client->GetCurrentZone()->SetSpawnTargetable(client->GetPlayer(), distance); + client->Message(CHANNEL_COLOR_YELLOW, "%i spawn(s) in the current zone were reset to targetable.", response); + } + else{ + client->SimpleMessage(CHANNEL_COLOR_YELLOW, "Syntax: /spawn target [spawn id]"); + client->SimpleMessage(CHANNEL_COLOR_YELLOW, "This will set the given spawn as targetable. Used to change a spawn if it was set to untargetable."); + } + break; + } + case COMMAND_SPAWN_SET: + { + Spawn* spawn = client->GetPlayer()->GetTarget(); + sint16 set_type = -1; + string type_str; + + if (spawn) + { + // check if parameters are (location or list or not player and not a 2nd param), and that there is at least 1 value + if(sep && ((sep->arg[0][0] && ToLower(string(sep->arg[0])) == "location") || (sep->arg[0][0] && ToLower(string(sep->arg[0])) == "list") || (spawn && spawn->IsPlayer() == false && sep->arg[1][0])) && spawn_set_values.count(ToLower(string(sep->arg[0]))) == 1) + { + // set the type, which will be 0 if location or list or invalid + set_type = spawn_set_values[ToLower(string(sep->arg[0]))]; + } + + if(set_type > 0) + { + // check if spawn set is NOT a char update, or not location, or isn't a number + if(!(set_type >= SPAWN_SET_VALUE_PREFIX) && !(set_type <= SPAWN_SET_VALUE_LASTNAME) && set_type != SPAWN_SET_VALUE_NAME && ((set_type < SPAWN_SET_VALUE_SPAWN_SCRIPT) || (set_type > SPAWN_SET_VALUE_SUB_TITLE)) && set_type != SPAWN_SET_VALUE_LOCATION && sep->IsNumber(1) == false) + { + client->SimpleMessage(CHANNEL_COLOR_RED, "Invalid value for set command."); + } + else + { + string name = string(spawn->GetName()); + if(SetSpawnCommand(client, spawn, set_type, sep->arg[1])) + { + if(set_type == SPAWN_SET_VALUE_NAME) + { + client->SimpleMessage(CHANNEL_COLOR_YELLOW, "New name will not be effective until zone reload."); + } + else if(set_type == SPAWN_SET_VALUE_LOCATION) + { + spawn->SetLocation(client->GetPlayer()->GetLocation()); + client->Message(CHANNEL_COLOR_YELLOW, "Successfully set '%s' to '%u' for spawn '%s'", sep->arg[0], client->GetPlayer()->GetLocation(), name.c_str()); + } + else + { + client->Message(CHANNEL_COLOR_YELLOW, "Successfully set '%s' to '%s' for spawn '%s'", sep->arg[0], sep->arg[1], name.c_str()); + } + + if(set_type != SPAWN_SET_VALUE_FACTION) + { + client->GetCurrentZone()->ApplySetSpawnCommand(client, spawn, set_type, sep->arg[1]); + } + + if((set_type >= SPAWN_SET_VALUE_RESPAWN && set_type <=SPAWN_SET_VALUE_LOCATION) || (set_type >= SPAWN_SET_VALUE_EXPIRE && set_type <=SPAWN_SET_VALUE_Z_OFFSET) || (set_type == SPAWN_SET_VALUE_PITCH || set_type == SPAWN_SET_VALUE_ROLL)) + { + if(spawn->GetSpawnLocationID() > 0 && database.UpdateSpawnLocationSpawns(spawn)) + { + client->SimpleMessage(CHANNEL_COLOR_YELLOW, "Successfully saved spawn information."); + } + else if(spawn->GetSpawnLocationID() > 0) + { + client->SimpleMessage(CHANNEL_COLOR_YELLOW, "Error saving spawn information, see console window for details."); + } + } + else + { + if(spawn->GetDatabaseID() > 0 && database.SaveSpawnInfo(spawn)) + { + client->SimpleMessage(CHANNEL_COLOR_YELLOW, "Successfully saved spawn."); + } + else if(spawn->GetDatabaseID() > 0) + { + client->SimpleMessage(CHANNEL_COLOR_YELLOW, "Error saving spawn, see console window for details."); + } + } + } + } + } + else if(set_type == 0) + { + // /spawn set list - lists all possible attributes that can be changed with this command, 10 per line. + map::iterator itr; + int i=0; + string list; + for(itr = spawn_set_values.begin(); itr != spawn_set_values.end(); itr++, i++) + { + if(i==10) + { + client->SimpleMessage(CHANNEL_COLOR_YELLOW, list.c_str()); + i = 0; + } + + if(i>0) + { + list.append(", ").append(itr->first); + } + else + { + list = itr->first; + } + } + + if(list.length() > 0) + { + // if 1 or more, display in client. + client->SimpleMessage(CHANNEL_COLOR_YELLOW, list.c_str()); + } + } + else + { + // syntax fail + client->SimpleMessage(CHANNEL_COLOR_YELLOW, "Syntax: /spawn set [type] [value]"); + client->SimpleMessage(CHANNEL_COLOR_YELLOW, "This command is used to change various settings for the targeted NPC or Object."); + client->SimpleMessage(CHANNEL_COLOR_YELLOW, "For a list of changeable settings use /spawn set list"); + client->SimpleMessage(CHANNEL_COLOR_YELLOW, "Note: /spawn set location does not require a value. The client's current location is used."); + } + } + break; + } + case COMMAND_SPAWN_REMOVE:{ + Spawn* spawn = client->GetPlayer()->GetTarget(); + if(spawn && !spawn->IsPlayer()){ + if(spawn->GetSpawnLocationID() > 0){ + if(database.RemoveSpawnFromSpawnLocation(spawn)){ + bool delete_spawn = false; + if(sep && sep->arg[0][0] && sep->IsNumber(0)){ + if(atoi(sep->arg[0]) == 1) + delete_spawn = true; + } + if(delete_spawn) + client->GetCurrentZone()->RemoveSpawn(spawn, true, false); + else + spawn->SetSpawnLocationID(0); + client->SimpleMessage(CHANNEL_COLOR_YELLOW, "Successfully removed spawn from zone"); + } + else + client->SimpleMessage(CHANNEL_COLOR_RED, "Error removing spawn, see console window for details."); + } + else + client->SimpleMessage(CHANNEL_COLOR_RED, "This spawn does not have a spawn group associated with it"); + } + else{ + client->SimpleMessage(CHANNEL_COLOR_YELLOW, "Syntax: /spawn remove"); + client->SimpleMessage(CHANNEL_COLOR_YELLOW, "This command is used for removing the targeted NPC or Object from the zone."); + client->SimpleMessage(CHANNEL_COLOR_YELLOW, "Optionally, you can supply a 1 after the command to despawn it as well. IE /spawn remove 1"); + } + break; + } + case COMMAND_SPAWN_LIST:{ + if(sep && sep->arg[0][0]){ + vector* results = database.GetSpawnNameList(sep->argplus[0]); + vector::iterator itr; + if(results){ + for(itr=results->begin();itr!=results->end();itr++){ + client->SimpleMessage(CHANNEL_COLOR_YELLOW, (*itr).c_str()); + } + safe_delete(results); + } + else + client->SimpleMessage(CHANNEL_COLOR_YELLOW, "No matches found. "); + } + else{ + client->SimpleMessage(CHANNEL_COLOR_YELLOW, "Syntax: /spawn list [name]"); + client->SimpleMessage(CHANNEL_COLOR_YELLOW, "Name can be a partial match."); + client->SimpleMessage(CHANNEL_COLOR_YELLOW, "Ex: /spawn list Qeynos Guard"); + } + break; + } + case COMMAND_SPAWN_ADD:{ + Spawn* spawn = client->GetPlayer()->GetTarget(); + if(spawn && sep && sep->arg[1][0] && (sep->IsNumber(0) || strncasecmp(sep->arg[0], "new", 3) == 0)){ + if(spawn->GetSpawnLocationID() > 0){ + client->Message(CHANNEL_COLOR_RED, "This spawn already has a spawn group id of %u, use /spawn remove to reassign it", spawn->GetSpawnLocationID()); + break; + } + if(spawn->GetDatabaseID() == 0){ + if(database.SaveSpawnInfo(spawn)) { + char spawn_type[32]; + memset(spawn_type, 0, sizeof(spawn_type)); + if (spawn->IsNPC()) + strncpy(spawn_type, "NPC", sizeof(spawn_type) - 1); + else if (spawn->IsObject()) + strncpy(spawn_type, "Object", sizeof(spawn_type) - 1); + else if (spawn->IsSign()) + strncpy(spawn_type, "Sign", sizeof(spawn_type) - 1); + else if (spawn->IsGroundSpawn()) + strncpy(spawn_type, "GroundSpawn", sizeof(spawn_type) - 1); + else + strncpy(spawn_type, "Unknown", sizeof(spawn_type) - 1); + client->Message(CHANNEL_COLOR_YELLOW, "Successfully saved spawn information with a %s id of %u", spawn_type, spawn->GetDatabaseID()); + } + else + client->SimpleMessage(CHANNEL_COLOR_RED, "Error saving spawn information, see console window for details."); + } + int32 spawn_group_id = 0; + if(strncasecmp(sep->arg[0], "new", 3) == 0) + spawn_group_id = database.GetNextSpawnLocation(); + else + spawn_group_id = atol(sep->arg[0]); + int8 percent = 100; + if(sep->arg[2] && sep->IsNumber(2)) + percent = atoi(sep->arg[2]); + spawn->SetSpawnLocationID(spawn_group_id); + float x_offset = database.GetSpawnLocationPlacementOffsetX(spawn->GetSpawnLocationID()); + float y_offset = database.GetSpawnLocationPlacementOffsetY(spawn->GetSpawnLocationID()); + float z_offset = database.GetSpawnLocationPlacementOffsetZ(spawn->GetSpawnLocationID()); + if(database.SaveSpawnEntry(spawn, sep->arg[1], percent, x_offset, y_offset, z_offset)) + client->Message(CHANNEL_COLOR_YELLOW, "Successfully saved spawn location with a spawn group of %u", spawn->GetSpawnLocationID()); + else + client->SimpleMessage(CHANNEL_COLOR_RED, "Error saving spawn location, see console window for details."); + } + else{ + client->SimpleMessage(CHANNEL_COLOR_YELLOW, "Syntax: /spawn add [spawn group id] [spawn group name] (percentage)"); + client->SimpleMessage(CHANNEL_COLOR_YELLOW, "This command is used for adding the targeted NPC or Object to the database."); + client->SimpleMessage(CHANNEL_COLOR_YELLOW, "You can substitute new for [spawn group id] to create a new one."); + } + break; + } + case COMMAND_SPAWN:{ + int32 id = 0; + Spawn* spawn = 0; + if(sep && sep->arg[0] && sep->IsNumber(0)){ + id = atol(sep->arg[0]); + spawn = client->GetCurrentZone()->GetSpawn(id); + } + if(id > 0 && spawn && spawn->appearance.name[0] == 0) + id = 0; + if(!id || !spawn){ + client->SimpleMessage(CHANNEL_COLOR_YELLOW, "Syntax: /spawn [spawn id] (x) (y) (z) (heading) (location)"); + client->SimpleMessage(CHANNEL_COLOR_YELLOW, "All parameters are optional except the id. The spawn id must be in the database."); + client->SimpleMessage(CHANNEL_COLOR_YELLOW, "Ex: /spawn 1 0 0 0 0"); + safe_delete(sep); + return; + } + if(sep && sep->arg[1][0]){ + float x = atof(sep->arg[1]); + spawn->appearance.pos.X = x; + } + else + spawn->SetX(client->GetPlayer()->GetX(), false); + if(sep && sep->arg[2][0]){ + float y = atof(sep->arg[2]); + spawn->appearance.pos.Y = y; + } + else + spawn->SetY(client->GetPlayer()->GetY(), false); + if(sep && sep->arg[3][0]){ + float z = atof(sep->arg[3]); + spawn->appearance.pos.Z = z; + } + else + spawn->SetZ(client->GetPlayer()->GetZ(), false); + if(sep && sep->arg[4][0]){ + float heading = atof(sep->arg[4]); + spawn->SetHeading(heading); + } + else + spawn->SetHeading(client->GetPlayer()->GetHeading(), false); + spawn->SetSpawnOrigX(spawn->GetX()); + spawn->SetSpawnOrigY(spawn->GetY()); + spawn->SetSpawnOrigZ(spawn->GetZ()); + spawn->SetSpawnOrigHeading(spawn->GetHeading()); + if(sep && sep->arg[5][0]) + spawn->appearance.pos.grid_id = atol(sep->arg[5]); + else + spawn->appearance.pos.grid_id = client->GetPlayer()->appearance.pos.grid_id; + + if(spawn->IsNPC() && spawn->GetTotalHP() == 0){ + spawn->SetTotalHP(spawn->GetLevel() * 15); + spawn->SetHP(spawn->GetTotalHP()); + } + if(spawn->GetTotalPower() == 0){ + spawn->SetTotalPower(spawn->GetLevel() * 15); + spawn->SetPower(spawn->GetTotalPower()); + } + const char* script = world.GetSpawnScript(id); + if(script && lua_interface && lua_interface->GetSpawnScript(script) != 0) + spawn->SetSpawnScript(string(script)); + client->GetCurrentZone()->AddSpawn(spawn); + if(spawn->IsNPC()) + spawn->GetZone()->AddLoot((NPC*)spawn); + spawn->GetZone()->CallSpawnScript(spawn, SPAWN_SCRIPT_SPAWN); + LogWrite(COMMAND__INFO, 0, "Command", "Received spawn command - Parms: %s", command_parms->data.c_str()); + break; + } + case COMMAND_ADMINFLAG: + { + if(sep && sep->arg[0]){ + sint16 tmp_status = database.GetCharacterAdminStatus(sep->arg[0]); + sint16 new_status = atoi(sep->arg[1]); + if(tmp_status == -10) + client->SimpleMessage(CHANNEL_ERROR,"Unable to flag character. Reason: Character does not exist."); + else if(tmp_status >= client->GetAdminStatus()) + client->SimpleMessage(CHANNEL_ERROR,"Unable to flag character. Reason: Character has same or higher level status."); + else if (new_status > client->GetAdminStatus()) + client->SimpleMessage(CHANNEL_ERROR, "Unable to flag character. Reason: New status is higher then your status."); + else{ + Client* client2 = client->GetCurrentZone()->GetClientByName(sep->arg[0]); + if (!client2) + client2 = zone_list.GetClientByCharName(sep->arg[0]); + + if(database.UpdateAdminStatus(sep->arg[0],new_status)) { + client->Message(CHANNEL_COLOR_YELLOW,"Character status updated to %i for %s.",new_status,sep->arg[0]); + if (client2) { + client2->SetAdminStatus(new_status); + client2->Message(CHANNEL_COLOR_YELLOW, "%s has set your admin status to %i.", client->GetPlayer()->GetName(), new_status); + } + } + else + client->SimpleMessage(CHANNEL_ERROR,"Unable to flag character. Unknown reason."); + } + }else{ + client->SimpleMessage(CHANNEL_COLOR_YELLOW,"Usage: /flag {name} {new_status}"); + client->SimpleMessage(CHANNEL_COLOR_YELLOW," Standard User: 0"); + client->SimpleMessage(CHANNEL_COLOR_YELLOW," Admin User: 100"); + } + break; + } + case COMMAND_CANNEDEMOTE:{ + client->GetCurrentZone()->HandleEmote(client, command_parms->data); + break; + } + case COMMAND_BROADCAST: { + if (sep && sep->arg[0]) + zone_list.HandleGlobalBroadcast(sep->argplus[0]); + else + client->SimpleMessage(CHANNEL_COLOR_YELLOW, "Usage: /broadcast {message}"); + break; + } + case COMMAND_ANNOUNCE: { + if (sep && sep->arg[0]) + zone_list.HandleGlobalAnnouncement(sep->argplus[0]); + else + client->SimpleMessage(CHANNEL_COLOR_YELLOW, "Usage: /announce {message}"); + break; + } + case COMMAND_RELOAD_ITEMS:{ + LogWrite(COMMAND__INFO, 0, "Command", "Reloading items.."); + client->SimpleMessage(CHANNEL_COLOR_YELLOW, "Started Reloading items (this might take a few minutes...)"); + database.ReloadItemList(); + database.LoadMerchantInformation(); + client->SimpleMessage(CHANNEL_COLOR_YELLOW, "Finished Reloading items."); + break; + } + case COMMAND_ENABLE_ABILITY_QUE:{ + EQ2Packet* app = client->GetPlayer()->GetSpellBookUpdatePacket(client->GetVersion()); + if(app) + client->QueuePacket(app); + break; + } + case COMMAND_ITEMSEARCH:{ + PacketStruct* packet = configReader.getStruct("WS_StartBroker", client->GetVersion()); + if(packet){ + packet->setDataByName("spawn_id", client->GetPlayer()->GetIDWithPlayerSpawn(client->GetPlayer())); + //packet->setDataByName("unknown", 1); + packet->setDataByName("unknown2", 5, 0); + packet->setDataByName("unknown2", 20, 1); + packet->setDataByName("unknown2", 58, 3); + packet->setDataByName("unknown2", 40, 4); + client->QueuePacket(packet->serialize()); + PacketStruct* packet2 = configReader.getStruct("WS_BrokerBags", client->GetVersion()); + if(packet2){ + packet2->setDataByName("char_id", client->GetCharacterID()); + client->QueuePacket(packet2->serialize()); //send this for now, needed to properly clear data + safe_delete(packet2); + } + safe_delete(packet); + } + break; + } + case COMMAND_ANIMTEST:{ + PacketStruct* command_packet = configReader.getStruct("WS_CannedEmote", client->GetVersion()); + if(command_packet){ + int32 id = client->GetPlayer()->GetIDWithPlayerSpawn(client->GetPlayer()); + if (client->GetPlayer()->HasTarget()) + id = client->GetPlayer()->GetIDWithPlayerSpawn(client->GetPlayer()->GetTarget()); + command_packet->setDataByName ( "spawn_id" , id); + + int animID = 1; + + if(sep && sep->arg[0] && sep->IsNumber(0)) + animID = atoi(sep->arg[0]); + + VisualState* vs = NULL; + if(animID == 0) + { + vs = visual_states.FindVisualState(sep->arg[0]); + } + + + char msg[128]; + sprintf(msg,"Animation Test ID: %i",animID); + command_packet->setMediumStringByName ( "emote_msg" , msg ); + + if(vs != NULL) + command_packet->setDataByName ( "anim_type", vs->GetID ( ) ); + else + command_packet->setDataByName ( "anim_type", animID ); + + command_packet->setDataByName ( "unknown0", 0 ); + EQ2Packet* outapp = command_packet->serialize(); + client->QueuePacket(outapp); + safe_delete(command_packet); + } + break; + } + case COMMAND_KICK: + { + if( sep == 0 || sep->arg[0] == 0) + { + client->SimpleMessage(CHANNEL_COLOR_RED, "/kick [name]"); + } + else + { + Client* kickClient = zone_list.GetClientByCharName(string(sep->arg[0])); + + if ( kickClient == client ) + { + client->Message(CHANNEL_COLOR_RED, "You can't kick yourself!"); + break; + } + else if(kickClient != NULL) + { + sint16 maxStatus = database.GetHighestCharacterAdminStatus(kickClient->GetAccountID()); + + if ( maxStatus >= client->GetAdminStatus( ) || kickClient->GetAdminStatus() >= client->GetAdminStatus() ) + { + client->Message(CHANNEL_COLOR_RED,"Don't even think about it..."); + break; + } + + client->Message(CHANNEL_COLOR_RED, "Kicking %s...",sep->arg[0]); + + kickClient->Disconnect(); + } + else + { + client->Message(CHANNEL_COLOR_RED, "Could not find %s.",sep->arg[0]); + } + } + + break; + } + case COMMAND_LOCK: + { + if( sep != NULL && sep->arg[0] != NULL && sep->IsNumber(0)){ + int worldLocked = atoi(sep->arg[0]); + net.world_locked = worldLocked; + if ( worldLocked ) + client->Message(CHANNEL_COLOR_YELLOW,"World server has been locked."); + else + client->Message(CHANNEL_COLOR_YELLOW,"World server has been unlocked."); + } + else + client->SimpleMessage(CHANNEL_COLOR_RED, "/lock [0/1]"); + + break; + } + case COMMAND_BAN:{ + if( sep == 0 || sep->arg[0] == 0 || (sep->arg[1][0] != 0 && !sep->IsNumber(1) ) ) + { + client->SimpleMessage(CHANNEL_COLOR_RED, "/ban [name] [permanent:0/1]"); + } + else + { + Client* kickClient = zone_list.GetClientByCharName(sep->arg[0]); + + if ( kickClient == client ) + { + client->Message(CHANNEL_COLOR_RED, "You can't ban yourself!"); + break; + } + else if(kickClient != NULL) + { + sint16 maxStatus = database.GetHighestCharacterAdminStatus(kickClient->GetAccountID()); + + if ( maxStatus > client->GetAdminStatus( ) || + client->GetAdminStatus ( ) > kickClient->GetAdminStatus ( ) ) + { + client->Message(CHANNEL_COLOR_RED,"Don't even think about it..."); + break; + } + + client->Message(CHANNEL_COLOR_RED, "Kicking & Banning %s...",sep->arg[0]); + + int perm = atol(sep->arg[1]); + if ( perm == 1 ) + database.UpdateAdminStatus(sep->arg[0],-2); + else + database.UpdateAdminStatus(sep->arg[0],-1); + kickClient->Disconnect(); + } + else + { + client->Message(CHANNEL_COLOR_RED, "Could not find %s.",sep->arg[0]); + } + } + break; + } + case COMMAND_SET_COMBAT_VOICE:{ + int32 value = 0; + if(sep && sep->arg[0] && sep->IsNumber(0)) + value = atoi(sep->arg[0]); + client->GetPlayer()->SetCombatVoice(value); + break; + } + case COMMAND_SET_EMOTE_VOICE:{ + int32 value = 0; + if(sep && sep->arg[0] && sep->IsNumber(0)) + value = atoi(sep->arg[0]); + client->GetPlayer()->SetEmoteVoice(value); + break; + } + case COMMAND_GIVEITEM:{ + + if(sep && sep->arg[0][0] && sep->arg[0][1] && sep->IsNumber(1)){ + Client* itemToClient = zone_list.GetClientByCharName(sep->arg[0]); + + if ( itemToClient == NULL ) + client->Message(CHANNEL_COLOR_YELLOW,"Could not find %s.",sep->arg[0]); + else + { + int32 item_id = atol(sep->arg[1]); + client->Message(CHANNEL_COLOR_YELLOW,"Gave %s item id %i.",sep->arg[0],item_id); + itemToClient->AddItem(item_id); + } + } + else + client->SimpleMessage(CHANNEL_COLOR_YELLOW,"Usage: /giveitem [name] [item_id]"); + + break; + } + + case COMMAND_REPORT_BUG : { Command_ReportBug(client, sep); break; } + case COMMAND_INVENTORY : { Command_Inventory(client, sep, command); break; } + case COMMAND_WEAPONSTATS : { Command_WeaponStats(client); break; } + case COMMAND_SKILL : + case COMMAND_SKILL_ADD : + case COMMAND_SKILL_REMOVE : + case COMMAND_SKILL_LIST : { Command_Skills(client, sep, command->handler); break; } + case COMMAND_ZONE_SET : { Command_ZoneSet(client, sep); break; } + case COMMAND_ZONE_DETAILS : { Command_ZoneDetails(client, sep); break; } + case COMMAND_ENTITYCOMMAND : + case COMMAND_ENTITYCOMMAND_LIST : { Command_EntityCommand(client, sep, command->handler); break; } + case COMMAND_MERCHANT : + case COMMAND_MERCHANT_LIST : { Command_Merchant(client, sep, command->handler); break; } + case COMMAND_APPEARANCE : + case COMMAND_APPEARANCE_LIST : { Command_Appearance(client, sep, command->handler); break; } + case COMMAND_TRACK : { Command_Track(client); break; } + case COMMAND_DISTANCE : { Command_Distance(client); break; } + case COMMAND_INSPECT_PLAYER : { Command_InspectPlayer(client, sep); break; } + case COMMAND_ZONE_SAFE : { Command_ZoneSafeCoords(client, sep); break; } + case COMMAND_GUILDSAY : { Command_GuildSay(client, sep); break; } + case COMMAND_OFFICERSAY : { Command_OfficerSay(client, sep); break; } + case COMMAND_SET_GUILD_MEMBER_NOTE : { Command_SetGuildMemberNote(client, sep); break; } + case COMMAND_SET_GUILD_OFFICER_NOTE : { Command_SetGuildOfficerNote(client, sep); break; } + case COMMAND_GUILD : { Command_Guild(client, sep); break; } + case COMMAND_CREATE_GUILD : { Command_CreateGuild(client); break; } + case COMMAND_GUILDS : { Command_Guilds(client); break; } + case COMMAND_GUILDS_ADD : { Command_GuildsAdd(client, sep); break; } + case COMMAND_GUILDS_CREATE : { Command_GuildsCreate(client, sep); break; } + case COMMAND_GUILDS_DELETE : { Command_GuildsDelete(client, sep); break; } + case COMMAND_GUILDS_LIST : { Command_GuildsList(client); break; } + case COMMAND_GUILDS_REMOVE : { Command_GuildsRemove(client, sep); break; } + case COMMAND_CLAIM : { Command_Claim(client, sep); break; } + case COMMAND_CLEAR_ALL_QUEUED : { Command_ClearAllQueued(client); break; } + case COMMAND_LOCATION : { Command_Location(client); break; } + case COMMAND_LOCATION_ADD : { Command_LocationAdd(client, sep); break; } + case COMMAND_LOCATION_CREATE : { Command_LocationCreate(client, sep); break; } + case COMMAND_LOCATION_DELETE : { Command_LocationDelete(client, sep); break; } + case COMMAND_LOCATION_LIST : { Command_LocationList(client, sep); break; } + case COMMAND_LOCATION_REMOVE : { Command_LocationRemove(client, sep); break; } + case COMMAND_GRID : { Command_Grid(client); break; } + case COMMAND_TRY_ON : { Command_TryOn(client, sep); break; } + case COMMAND_IRC : { Command_IRC(client, sep); break; } + case COMMAND_RANDOMIZE : { Command_Randomize(client, sep); break; } + case COMMAND_AFK : { Command_AFK(client, sep); break; } + case COMMAND_SHOW_CLOAK : { Command_ShowCloak(client, sep); break; } + case COMMAND_SHOW_HELM : { Command_ShowHelm(client, sep); break; } + case COMMAND_SHOW_HOOD : { Command_ShowHood(client, sep); break; } + case COMMAND_SHOW_HOOD_OR_HELM : { Command_ShowHoodHelm(client, sep); break; } + case COMMAND_SHOW_RANGED : { Command_ShowRanged(client, sep); break; } + case COMMAND_STOP_DRINKING : { Command_StopDrinking(client); break; } + case COMMAND_STOP_EATING : { Command_StopEating(client); break; } + case COMMAND_TOGGLE_ANONYMOUS : { Command_Toggle_Anonymous(client); break; } + case COMMAND_TOGGLE_AUTOCONSUME : { Command_Toggle_AutoConsume(client, sep); break; } + case COMMAND_TOGGLE_BONUS_EXP : { Command_Toggle_BonusXP(client); break; } + case COMMAND_TOGGLE_COMBAT_EXP : { Command_Toggle_CombatXP(client); break; } + case COMMAND_TOGGLE_GM_HIDE : { Command_Toggle_GMHide(client); break; } + case COMMAND_TOGGLE_GM_VANISH : { Command_Toggle_GMVanish(client); break; } + case COMMAND_TOGGLE_ILLUSIONS : { Command_Toggle_Illusions(client, sep); break; } + case COMMAND_TOGGLE_LFG : { Command_Toggle_LFG(client); break; } + case COMMAND_TOGGLE_LFW : { Command_Toggle_LFW(client); break; } + case COMMAND_TOGGLE_QUEST_EXP : { Command_Toggle_QuestXP(client); break; } + case COMMAND_TOGGLE_ROLEPLAYING : { Command_Toggle_Roleplaying(client); break; } + case COMMAND_TOGGLE_DUELS : { Command_Toggle_Duels(client); break; } + case COMMAND_TOGGLE_TRADES : { Command_Toggle_Trades(client); break; } + case COMMAND_TOGGLE_GUILDS : { Command_Toggle_Guilds(client); break; } + case COMMAND_TOGGLE_GROUPS : { Command_Toggle_Groups(client); break; } + case COMMAND_TOGGLE_RAIDS : { Command_Toggle_Raids(client); break; } + case COMMAND_TOGGLE_LON : { Command_Toggle_LON(client); break; } + case COMMAND_TOGGLE_VCINVITE : { Command_Toggle_VoiceChat(client); break; } + case COMMAND_CANCEL_MAINTAINED : { Command_CancelMaintained(client, sep); break; } + case COMMAND_MOTD : { Command_MOTD(client); break; } + case COMMAND_RANDOM : { Command_Random(client, sep); break; } + case COMMAND_CREATE : { Command_Create(client, sep); break; } + case COMMAND_CREATEFROMRECIPE : { Command_CreateFromRecipe(client, sep); break; } + case COMMAND_TITLE : { Command_Title(client); break; } + case COMMAND_TITLE_LIST : { Command_TitleList(client); break; } + case COMMAND_TITLE_SETPREFIX : { Command_TitleSetPrefix(client, sep); break; } + case COMMAND_TITLE_SETSUFFIX : { Command_TitleSetSuffix(client, sep); break; } + case COMMAND_TITLE_FIX : { Command_TitleFix(client, sep); break; } + case COMMAND_LANGUAGES : { Command_Languages(client, sep); break; } + case COMMAND_SET_LANGUAGE : { Command_SetLanguage(client, sep); break; } + case COMMAND_FOLLOW : { Command_Follow(client, sep); break; } + case COMMAND_STOP_FOLLOW : { Command_StopFollow(client, sep); break; } + case COMMAND_LASTNAME : { Command_LastName(client, sep); break; } + case COMMAND_CONFIRMLASTNAME : { Command_ConfirmLastName(client, sep); break; } + case COMMAND_PET : { Command_Pet(client, sep); break; } + case COMMAND_PETNAME : { Command_PetName(client, sep); break; } + case COMMAND_NAME_PET : { Command_NamePet(client, sep); break; } + case COMMAND_RENAME : { Command_Rename(client, sep); break; } + case COMMAND_CONFIRMRENAME : { Command_ConfirmRename(client, sep); break; } + case COMMAND_PETOPTIONS : { Command_PetOptions(client, sep); break; } + case COMMAND_START_TRADE : { Command_TradeStart(client, sep); break; } + case COMMAND_ACCEPT_TRADE : { Command_TradeAccept(client, sep); break; } + case COMMAND_REJECT_TRADE : { Command_TradeReject(client, sep); break; } + case COMMAND_CANCEL_TRADE : { Command_TradeCancel(client, sep); break; } + case COMMAND_SET_TRADE_COIN : { Command_TradeSetCoin(client, sep); break; } + case COMMAND_ADD_TRADE_COPPER : { Command_TradeAddCoin(client, sep, COMMAND_ADD_TRADE_COPPER); break; } + case COMMAND_ADD_TRADE_SILVER : { Command_TradeAddCoin(client, sep, COMMAND_ADD_TRADE_SILVER); break; } + case COMMAND_ADD_TRADE_GOLD : { Command_TradeAddCoin(client, sep, COMMAND_ADD_TRADE_GOLD); break; } + case COMMAND_ADD_TRADE_PLAT : { Command_TradeAddCoin(client, sep, COMMAND_ADD_TRADE_PLAT); break; } + case COMMAND_REMOVE_TRADE_COPPER: { Command_TradeRemoveCoin(client, sep, COMMAND_REMOVE_TRADE_COPPER); break; } + case COMMAND_REMOVE_TRADE_SILVER: { Command_TradeRemoveCoin(client, sep, COMMAND_REMOVE_TRADE_SILVER); break; } + case COMMAND_REMOVE_TRADE_GOLD : { Command_TradeRemoveCoin(client, sep, COMMAND_REMOVE_TRADE_GOLD); break; } + case COMMAND_REMOVE_TRADE_PLAT : { Command_TradeRemoveCoin(client, sep, COMMAND_REMOVE_TRADE_PLAT); break; } + case COMMAND_ADD_TRADE_ITEM : { Command_TradeAddItem(client, sep); break; } + case COMMAND_REMOVE_TRADE_ITEM : { Command_TradeRemoveItem(client, sep); break; } + case COMMAND_ACCEPT_ADVANCEMENT : { Command_AcceptAdvancement(client, sep); break; } + case COMMAND_DUEL : { Command_Duel(client, sep); break; } + case COMMAND_DUELBET : { Command_DuelBet(client, sep); break; } + case COMMAND_DUEL_ACCEPT : { Command_DuelAccept(client, sep); break; } + case COMMAND_DUEL_DECLINE : { Command_DuelDecline(client, sep); break; } + case COMMAND_DUEL_SURRENDER : { Command_DuelSurrender(client, sep); break; } + case COMMAND_DUEL_TOGGLE : { Command_DuelToggle(client, sep); break; } + case COMMAND_SPAWN_TEMPLATE : { Command_SpawnTemplate(client, sep); break; } + + case COMMAND_MODIFY : { Command_Modify(client); break; } + case COMMAND_MODIFY_CHARACTER : { Command_ModifyCharacter(client, sep); break; } + case COMMAND_MODIFY_QUEST : { Command_ModifyQuest(client, sep); break; } + case COMMAND_MODIFY_FACTION : { Command_ModifyFaction(client, sep); break; } + case COMMAND_MODIFY_GUILD : { Command_ModifyGuild(client, sep); break; } + case COMMAND_MODIFY_ITEM : { Command_ModifyItem(client, sep); break; } + case COMMAND_MODIFY_SKILL : { Command_ModifySkill(client, sep); break; } + case COMMAND_MODIFY_SPAWN : { Command_ModifySpawn(client, sep); break; } + case COMMAND_MODIFY_SPELL : { Command_ModifySpell(client, sep); break; } + case COMMAND_MODIFY_ZONE : { Command_ModifyZone(client, sep); break; } + + case COMMAND_JOIN_CHANNEL : { Command_JoinChannel(client, sep); break;} + case COMMAND_JOIN_CHANNEL_FROM_LOAD: { Command_JoinChannelFromLoad(client, sep); break;} + case COMMAND_TELL_CHANNEL : { Command_TellChannel(client, sep); break;} + case COMMAND_LEAVE_CHANNEL : { Command_LeaveChannel(client, sep); break;} + case COMMAND_WHO_CHANNEL : { Command_WhoChannel(client, sep); break;} + case COMMAND_RAIN : { Command_Rain(client, sep); break; } + case COMMAND_WIND : { Command_Wind(client, sep); break; } + case COMMAND_WEATHER : { Command_Weather(client, sep); break; } + case COMMAND_FROM_MERCHANT : { Command_SendMerchantWindow(client, sep); break; } + case COMMAND_TO_MERCHANT : { Command_SendMerchantWindow(client, sep, true); break; } + case COMMAND_SELECT : { Command_Select(client, sep); break; } + case COMMAND_SMP : { Command_StationMarketPlace(client, sep); break; } + case COMMAND_CONSUME_FOOD : { Command_ConsumeFood(client, sep); break; } + case COMMAND_AQUAMAN : { Command_Aquaman(client, sep); break; } + case COMMAND_ATTUNE_INV : { Command_Attune_Inv(client, sep); break; } + case COMMAND_PLAYER : { Command_Player(client, sep); break; } + case COMMAND_PLAYER_COINS : { Command_Player_Coins(client, sep); break; } + case COMMAND_RESET_ZONE_TIMER : { Command_Reset_Zone_Timer(client, sep); break; } + case COMMAND_ACHIEVEMENT_ADD : { Command_AchievementAdd(client, sep); break; } + case COMMAND_EDITOR : { Command_Editor(client, sep); break; } + case COMMAND_ACCEPT_RESURRECTION: { Command_AcceptResurrection(client, sep); break; } + case COMMAND_DECLINE_RESURRECTION:{ Command_DeclineResurrection(client, sep); break; } + case COMMAND_TEST : { Command_Test(client, command_parms); break; } + case COMMAND_SPEED : { Command_Speed(client, sep); break; } + + case COMMAND_BOT : { Command_Bot(client, sep); break; } + case COMMAND_BOT_CREATE : { Command_Bot_Create(client, sep); break; } + case COMMAND_BOT_CUSTOMIZE : { Command_Bot_Customize(client, sep); break; } + case COMMAND_BOT_SPAWN : { Command_Bot_Spawn(client, sep); break; } + case COMMAND_BOT_LIST : { Command_Bot_List(client, sep); break; } + case COMMAND_BOT_INV : { Command_Bot_Inv(client, sep); break; } + case COMMAND_BOT_SETTINGS : { Command_Bot_Settings(client, sep); break; } + case COMMAND_BOT_HELP : { Command_Bot_Help(client, sep); break; } + case GET_AA_XML : { Get_AA_Xml(client, sep); break; } + case ADD_AA : { Add_AA(client, sep); break; } + case COMMIT_AA_PROFILE : { Commit_AA_Profile(client, sep); break; } + case BEGIN_AA_PROFILE : { Begin_AA_Profile(client, sep); break; } + case BACK_AA : { Back_AA(client, sep); break; } + case REMOVE_AA : { Remove_AA(client, sep); break; } + case SWITCH_AA_PROFILE : { Switch_AA_Profile(client, sep); break; } + case CANCEL_AA_PROFILE : { Cancel_AA_Profile(client, sep); break; } + case SAVE_AA_PROFILE : { Save_AA_Profile(client, sep); break; } + + + + + default: + { + LogWrite(COMMAND__WARNING, 0, "Command", "Unhandled command: %s", command->command.data.c_str()); + break; + } + + } + safe_delete(sep); +} + + +/******************** New COMMAND Handler Functions ********************/ +/* + Started breaking apart the huge switch() for commands into sepErate + functions so it is easier to locate the blocks of code by command + -- JA 2012.03.03 +*/ + +// sample function header +/* + Function: + Purpose : + Params : + Dev : + Example : +*/ +//void Commands::Command() +//{ +//} + + +/* + Function: Command_AcceptAdvancement() + Purpose : Player accepts a new advancement option + Params : Spell ID + Dev : Jabantiz +*/ +void Commands::Command_AcceptAdvancement(Client* client, Seperator* sep) +{ + Player *player = client->GetPlayer(); + TraitData* trait = master_trait_list.GetTrait(atoul(sep->arg[0])); + + // Check to see if this is a trait or grandmaster training (traits are always new spells, training is always upgrades) + if (!player->HasSpell(trait->spellID, 0, true)) + { + Spell* spell = master_spell_list.GetSpell(trait->spellID, trait->tier); + player->AddSpellBookEntry(trait->spellID, trait->tier, player->GetFreeSpellBookSlot(spell->GetSpellData()->spell_book_type), spell->GetSpellData()->spell_book_type, spell->GetSpellData()->linked_timer, true); + } + else + { + Spell* spell = master_spell_list.GetSpell(trait->spellID, trait->tier); + int8 old_slot = player->GetSpellSlot(spell->GetSpellID()); + player->RemoveSpellBookEntry(spell->GetSpellID()); + player->AddSpellBookEntry(spell->GetSpellID(), spell->GetSpellTier(), old_slot, spell->GetSpellData()->spell_book_type, spell->GetSpellData()->linked_timer, true); + player->UnlockSpell(spell); + client->SendSpellUpdate(spell); + } + + // Spell book update + client->QueuePacket(player->GetSpellBookUpdatePacket(client->GetVersion())); + client->QueuePacket(master_trait_list.GetTraitListPacket(client)); +} + +/* + Function: + Purpose : + Params : + Dev : + Example : +*/ +void Commands::Command_AFK(Client* client, Seperator* sep) +{ + Player* player = client->GetPlayer(); + + player->toggle_character_flag(CF_AFK); + client->Message(CHANNEL_COLOR_YELLOW,"You are %s afk.", client->GetPlayer()->get_character_flag(CF_AFK)?"now":"no longer"); + + if (player->get_character_flag(CF_AFK)) + { + LogWrite(MISC__TODO, 1, "TODO", "player->SetActivityStatus(player->GetActivityStatus() + ACTIVITY_STATUS_AFK); <-- need to find this"); + /*player->SetActivityStatus(player->GetActivityStatus() + ACTIVITY_STATUS_AFK); <-- need to find this */ + + if (sep && sep->argplus[0]) + player->SetAwayMessage("I am away from the keyboard, " + string(sep->argplus[0])); + else + player->SetAwayMessage("Sorry, I am A.F.K. (Away From Keyboard)"); + + string message = string(player->GetName()) + " is going afk."; + Spawn* target = player->GetTarget(); + + if (target && target != player) + { + message = string(player->GetName()) + " tells " + string(target->GetName()) + " that "; + player->GetGender() == 1 ? message += "he" : message += "she"; + message += " is going afk."; + } + + player->GetZone()->SimpleMessage(CHANNEL_COLOR_YELLOW, message.c_str(), player, 30); + } + /*else + player->SetActivityStatus(player->GetActivityStatus() - ACTIVITY_STATUS_AFK); <-- need to find this */ +} + +/* + Function: Command_Appearance() + Purpose : Handles /appearance commands + Params : list + Dev : Scatman + Example : /appearance list +*/ +void Commands::Command_Appearance(Client* client, Seperator* sep, int handler) +{ + if( handler == COMMAND_APPEARANCE ) + { + // /appearance command by itself shows help (to be extended) + client->SimpleMessage(CHANNEL_COLOR_YELLOW, "Usage: /appearance list [appearance name]"); + return; + } + else if( handler == COMMAND_APPEARANCE_LIST ) + { + // /appearance list command expects "name" param + if (sep && sep->arg[0]) + { + const char* appearance_name = sep->argplus[0]; + client->Message(CHANNEL_COLOR_YELLOW, "Listing appearances like '%s':", appearance_name); + vector* appearances = database.GetAppearanceIDsLikeName(string(appearance_name)); + + if (appearances) + { + vector::iterator itr; + for (itr = appearances->begin(); itr != appearances->end(); itr++) + { + int16 id = *itr; + string name = database.GetAppearanceName(id); + + if (ToLower(name).find(ToLower(string(appearance_name))) < 0xFFFFFFFF) + client->Message(CHANNEL_COLOR_YELLOW, "%s (%u)", name.c_str(), id); + } + safe_delete(appearances); + } + } + else // no param + client->SimpleMessage(CHANNEL_COLOR_YELLOW, "Usage: /appearance list [appearance name]"); + } + +} + +/* + Function: Command_Claim() + Purpose : + Params : + Dev : + Example : +*/ +void Commands::Command_Claim(Client* client, Seperator* sep) +{ + if (sep && sep->arg[0] && sep->IsNumber(0)) + { + LogWrite(MISC__TODO, 1, "TODO", "On Scatman's TODO list!\n\t(%s, function: %s, line #: %i)", __FILE__, __FUNCTION__, __LINE__); + client->SimpleMessage(CHANNEL_COLOR_YELLOW, "On Scatman's TODO :)"); + } + else + client->ShowClaimWindow(); +} + +/* + Function: Command_ClearAllQueued() + Purpose : + Params : + Dev : + Example : +*/ +void Commands::Command_ClearAllQueued(Client* client) +{ + ZoneServer* zone = client->GetPlayer()->GetZone(); + if (zone && zone->GetSpellProcess()) + zone->GetSpellProcess()->RemoveSpellFromQueue(client->GetPlayer()); +} + +/* + Function: Command_CancelMaintained() + Purpose : Cancels maintained spells + Params : Maintained Spell Index + Dev : Zcoretri + Example : /cancel_maintained 1 - would cancel the spell in slot 1 of Maintained Spells list +*/ +void Commands::Command_CancelMaintained(Client* client, Seperator* sep) +{ + if (sep && sep->arg[0] && sep->IsNumber(0)) + { + int32 spell_index = atoul(sep->arg[0]); + MaintainedEffects mEffects = client->GetPlayer()->GetInfoStruct()->maintained_effects[spell_index]; + //Spell* spell = master_spell_list.GetSpell(mEffects.spell_id, mEffects.tier); + + // if (spell && spell->GetSpellData()->friendly_spell) -- NOTE::You can cancel hostile maintained spells, + // just not spelleffects/dets - Foof + //{ + if (!client->GetPlayer()->GetZone()->GetSpellProcess()->DeleteCasterSpell(mEffects.spell)) + client->Message(CHANNEL_COLOR_RED, "The maintained spell could not be cancelled."); + // } + //else + //client->Message(CHANNEL_COLOR_RED, "You can only cancel friendly spells!"); + } +} + +/* + Function: Command_Create() + Purpose : Handler for starting Tradeskilling table + Params : + Dev : Zcoretri + Example : +*/ +void Commands::Command_Create(Client* client, Seperator* sep) +{ + PrintSep(sep, "COMMAND_CREATE"); + client->SendRecipeList(); + client->ShowRecipeBook(); +} + +void Commands::Command_CreateFromRecipe(Client* client, Seperator* sep) +{ + PrintSep(sep, "COMMAND_CREATEFROMRECIPE"); + if (sep && sep->arg[0] && sep->IsNumber(0)) + ClientPacketFunctions::SendCreateFromRecipe(client, atoul(sep->arg[0])); +} + +/* + Function: Command_Distance() + Purpose : Displays distance from targeted spawn + Params : + Dev : Scatman + Example : /distance +*/ +void Commands::Command_Distance(Client* client) +{ + Spawn* target = client->GetPlayer()->GetTarget(); + + if (target) + client->Message(CHANNEL_COLOR_YELLOW, "Your distance from %s is %f", target->GetName(), client->GetPlayer()->GetDistance(target)); + else + client->SimpleMessage(CHANNEL_COLOR_YELLOW, "You must have a spawn targeted to use /distance"); +} + +/* + Function: Command_Duel() + Purpose : Handle the /duel commands - not yet implemented + Params : unknown + Dev : + Example : +*/ +void Commands::Command_Duel(Client* client, Seperator* sep) +{ + PrintSep(sep, "COMMAND_DUEL"); + LogWrite(MISC__TODO, 1, "Command", "TODO-Command: Duel Command"); + client->Message(CHANNEL_COLOR_YELLOW, "You cannot duel other players (Not Implemented)"); +} + +/* + Function: Command_DuelBet() + Purpose : Handle the /duel commands - not yet implemented + Params : unknown + Dev : + Example : +*/ +void Commands::Command_DuelBet(Client* client, Seperator* sep) +{ + PrintSep(sep, "COMMAND_DUELBET"); + LogWrite(MISC__TODO, 1, "Command", "TODO-Command: Duel Bet Command"); + client->Message(CHANNEL_COLOR_YELLOW, "You cannot duel other players (Not Implemented)"); +} + +/* + Function: Command_DuelAccept() + Purpose : Handle the /duel commands - not yet implemented + Params : unknown + Dev : + Example : +*/ +void Commands::Command_DuelAccept(Client* client, Seperator* sep) +{ + PrintSep(sep, "COMMAND_DUEL_ACCEPT"); + LogWrite(MISC__TODO, 1, "Command", "TODO-Command: Accept Duel Command"); + client->Message(CHANNEL_COLOR_YELLOW, "You cannot duel other players (Not Implemented)"); +} + +/* + Function: Command_DuelDecline() + Purpose : Handle the /duel commands - not yet implemented + Params : unknown + Dev : + Example : +*/ +void Commands::Command_DuelDecline(Client* client, Seperator* sep) +{ + PrintSep(sep, "COMMAND_DUEL_DECLINE"); + LogWrite(MISC__TODO, 1, "Command", "TODO-Command: Decline Duel Request Command"); + client->Message(CHANNEL_COLOR_YELLOW, "You cannot duel other players (Not Implemented)"); +} + +/* + Function: Command_DuelSurrender() + Purpose : Handle the /duel commands - not yet implemented + Params : unknown + Dev : + Example : +*/ +void Commands::Command_DuelSurrender(Client* client, Seperator* sep) +{ + PrintSep(sep, "COMMAND_DUEL_SURRENDER"); + LogWrite(MISC__TODO, 1, "Command", "TODO-Command: Surrender Duel Command"); + client->Message(CHANNEL_COLOR_YELLOW, "You cannot duel other players (Not Implemented)"); + + // JA, just messin around ;) + char surrender[64]; + sprintf(surrender, "%s surrendered like a cowardly dog!", client->GetPlayer()->GetName()); + zone_list.HandleGlobalAnnouncement(surrender); +} + +/* + Function: Command_DuelToggle() + Purpose : Handle the /duel commands - not yet implemented + Params : unknown + Dev : + Example : +*/ +void Commands::Command_DuelToggle(Client* client, Seperator* sep) +{ + PrintSep(sep, "COMMAND_DUEL"); + LogWrite(MISC__TODO, 1, "Command", "TODO-Command: Duel Commands"); + client->Message(CHANNEL_COLOR_YELLOW, "You cannot duel other players (Not Implemented)"); +} + +/* + Function: + Purpose : + Params : + Dev : + Example : +*/ +void Commands::Command_EntityCommand(Client* client, Seperator* sep, int handler) +{ + if( handler == COMMAND_ENTITYCOMMAND ) + { + // /entitycommand command by itself shows help (to be extended) + client->SimpleMessage(CHANNEL_COLOR_YELLOW, "Usage: /entity_command list [entity command name]"); + return; + } + else if( handler == COMMAND_ENTITYCOMMAND_LIST ) + { + // /entitycommand list command expects "name" param + if (sep && sep->arg[0]) + { + const char* entity_command_name = sep->argplus[0]; + client->Message(CHANNEL_COLOR_YELLOW, "Listing entity commands like '%s':", entity_command_name); + map*>* entity_command_list_all = client->GetCurrentZone()->GetEntityCommandListAll(); + map*>::iterator itr; + + for (itr = entity_command_list_all->begin(); itr != entity_command_list_all->end(); itr++) + { + vector* entity_command_list = itr->second; + vector::iterator itr2; + + for (itr2 = entity_command_list->begin(); itr2 != entity_command_list->end(); itr2++) + { + EntityCommand* entity_command = *itr2; + + if (ToLower(entity_command->name).find(ToLower(string(entity_command_name))) < 0xFFFFFFFF) + client->Message(CHANNEL_COLOR_YELLOW, "Command Text: %s, Command List ID: %u, Distance: %f\n", entity_command->name.c_str(), itr->first, entity_command->distance); + } + } + } + else // no command name + client->SimpleMessage(CHANNEL_COLOR_YELLOW, "Usage: /entity_command list [entity command name]"); + } +} + + +/* + Function: Command_Follow() + Purpose : Handle the /follow command - not yet implemented + Params : + Dev : + Example : +*/ +void Commands::Command_Follow(Client* client, Seperator* sep) +{ + PrintSep(sep, "COMMAND_FOLLOW"); + // flag to toggle if the players target is in the players group + bool targetInGroup = false; + // get a pointer to the players group + GroupMemberInfo* gmi = client->GetPlayer()->GetGroupMemberInfo(); + // If the player has a group and has a target + if (gmi && client->GetPlayer()->GetTarget()) { + deque::iterator itr; + + world.GetGroupManager()->GroupLock(__FUNCTION__, __LINE__); + + deque* members = world.GetGroupManager()->GetGroupMembers(gmi->group_id); + // Loop through the group members + for (itr = members->begin(); itr != members->end(); itr++) { + // If a group member matches a target + if ((*itr)->member == client->GetPlayer()->GetTarget()) { + // toggle the flag and break the loop + targetInGroup = true; + break; + } + } + + world.GetGroupManager()->ReleaseGroupLock(__FUNCTION__, __LINE__); + } + if (targetInGroup) { + // CHANNEL_COLOR_CHAT_RELATIONSHIP = 4, which matches the value in logs + client->Message(CHANNEL_COLOR_CHAT_RELATIONSHIP, "You start to follow %s.", client->GetPlayer()->GetTarget()->GetName()); + client->GetPlayer()->SetFollowTarget(client->GetPlayer()->GetTarget()); + client->GetPlayer()->info_changed = true; + client->GetPlayer()->changed = true; + } + else + client->Message(CHANNEL_COLOR_WHITE, "You must first select a group member to follow."); +} + +/* + Function: Command_StopFollow() + Purpose : Handle the /stop_follow command - not yet implemented + Params : + Dev : + Example : +*/ +void Commands::Command_StopFollow(Client* client, Seperator* sep) +{ + PrintSep(sep, "COMMAND_STOP_FOLLOW"); + if (client->GetPlayer()->GetFollowTarget()) { + // CHANNEL_COLOR_CHAT_RELATIONSHIP = 4, which matches the value in logs + client->Message(CHANNEL_COLOR_CHAT_RELATIONSHIP, "You are no longer following %s", client->GetPlayer()->GetFollowTarget()->GetName()); + client->GetPlayer()->SetFollowTarget(0); + client->GetPlayer()->info_changed = true; + client->GetPlayer()->changed = true; + } +} + +#include "../Zone/SPGrid.h" +/* + Function: Command_Grid() + Purpose : Show player's current Grid ID + Params : + Dev : Scatman + Example : /grid +*/ +void Commands::Command_Grid(Client* client) +{ + client->Message(CHANNEL_COLOR_YELLOW, "Your Grid ID is %u", client->GetPlayer()->appearance.pos.grid_id); + + if (client->GetCurrentZone()->Grid != nullptr) { + int32 grid = client->GetCurrentZone()->Grid->GetGridID(client->GetPlayer()); + client->Message(CHANNEL_COLOR_YELLOW, "SPGrid result is %u", grid); + } +} + +/* + Function: Command_Guild() + Purpose : Handler for all UI-related guild commands + Dev : Scatman +*/ +void Commands::Command_Guild(Client* client, Seperator* sep) +{ + Guild* guild = client->GetPlayer()->GetGuild(); + + if (sep && sep->arg[0]) + { + const char* command = sep->arg[0]; + int32 length = strlen(command); + + LogWrite(COMMAND__DEBUG, 0, "Command", "Guild Command: %s", command); + + if (strncmp(command, "rank_name", length) == 0 && sep->arg[1] && sep->IsNumber(1) && sep->arg[2] && guild) + guild->SetRankName(atoi(sep->arg[1]), sep->argplus[2]); + else if (strncmp(command, "rank_permission", length) == 0 && sep->arg[1] && sep->IsNumber(1) && sep->arg[2] && sep->IsNumber(2) && sep->arg[3] && guild) + guild->SetPermission(atoi(sep->arg[1]), atoi(sep->arg[2]), strncmp(sep->arg[3], "true", 4) == 0 ? 1 : 0); + else if (strncmp(command, "filter_event", length) == 0 && sep->arg[1] && sep->IsNumber(1) && sep->arg[2] && sep->IsNumber(2) && sep->arg[3] && guild) + guild->SetEventFilter(atoi(sep->arg[1]), atoi(sep->arg[2]), strncmp(sep->arg[3], "true", 4) == 0 ? 1 : 0); + else if (strncmp(command, "kick", length) == 0 && sep->arg[1] && guild) + guild->KickGuildMember(client, sep->arg[1]); + else if (strncmp(command, "demote", length) == 0 && sep->arg[1] && guild) + guild->DemoteGuildMember(client, sep->arg[1]); + else if (strncmp(command, "promote", length) == 0 && sep->arg[1] && guild) + guild->PromoteGuildMember(client, sep->arg[1]); + else if (strncmp(command, "points", length) == 0 && guild) + { + if (sep->arg[1] && strncmp(sep->arg[1], "add", length) == 0) + { + if (sep->arg[2] && sep->IsNumber(2) && sep->arg[3]) + { + float points = atof(sep->arg[2]); + const char* option = sep->arg[3]; + const char* comment = sep->argplus[4]; + + if (strncmp(option, "all", strlen(option)) == 0) + guild->AddPointsToAll(client, points, comment); + else if (strncmp(option, "online", strlen(option)) == 0) + guild->AddPointsToAllOnline(client, points, comment); + else if (strncmp(option, "group", strlen(option)) == 0) + guild->AddPointsToGroup(client, points, comment); + else if (strncmp(option, "raid", strlen(option)) == 0) + guild->AddPointsToRaid(client, points, comment); + else + guild->AddPointsToGuildMember(client, points, option, comment); + } + } + else if (sep->arg[1] && strncmp(sep->arg[1], "view", strlen(sep->arg[1])) == 0 && sep->arg[2]) + guild->ViewGuildMemberPoints(client, sep->arg[2]); + else + LogWrite(COMMAND__ERROR, 0, "Command", "Unhandled guild points command: %s", sep->argplus[0]); + } + else if (strncmp(command, "motd", length) == 0 && sep->arg[1] && guild) + guild->SetMOTD(sep->argplus[1]); + else if (strncmp(command, "recruiting", length) == 0 && guild) + { + if (sep->arg[1]) + { + const char* option = sep->arg[1]; + + if (strncmp(option, "short_text", strlen(option)) == 0 && sep->arg[2]) + guild->SetRecruitingShortDesc(sep->argplus[2]); + else if (strncmp(option, "long_text", strlen(option)) == 0 && sep->arg[2]) + guild->SetRecruitingFullDesc(sep->argplus[2]); + else if (strncmp(option, "flag", strlen(option)) == 0 && sep->arg[2] && sep->IsNumber(2) && sep->arg[3]) + guild->SetRecruitingFlag(atoi(sep->arg[2]), strncmp(sep->arg[3], "true", 4) == 0 ? 1 : 0); + else if (strncmp(option, "min_level", strlen(option)) == 0 && sep->arg[2] && sep->IsNumber(2)) + guild->SetRecruitingMinLevel(atoi(sep->arg[2])); + else if (strncmp(option, "playstyle", strlen(option)) == 0 && sep->arg[2] && sep->IsNumber(2)) + guild->SetRecruitingPlayStyle(atoi(sep->arg[2])); + else if (strncmp(option, "tag", strlen(option)) == 0 && sep->arg[2] && sep->IsNumber(2) && sep->arg[3] && sep->IsNumber(3)) + guild->SetRecruitingDescTag(atoi(sep->arg[2]), atoi(sep->arg[3])); + else if (strncmp(command, "recruiting", strlen(option)) == 0) + guild->ChangeMemberFlag(client, GUILD_MEMBER_FLAGS_RECRUITING_FOR_GUILD, strncmp(sep->arg[1], "true", 4) == 0 ? 1 : 0); + else + LogWrite(COMMAND__ERROR, 0, "Command", "Unhandled guild recruiting command: %s", sep->argplus[0]); + } + else + LogWrite(COMMAND__ERROR, 0, "Command", "Unhandled guild recruiting command: %s", sep->argplus[0]); + } + else if (strncmp(command, "notify_online", length) == 0 && sep->arg[1] && guild) + guild->ChangeMemberFlag(client, GUILD_MEMBER_FLAGS_NOTIFY_LOGINS, strncmp(sep->arg[1], "true", 4) == 0 ? 1 : 0); + else if (strncmp(command, "event_privacy", length) == 0 && sep->arg[1] && guild) + guild->ChangeMemberFlag(client, GUILD_MEMBER_FLAGS_DONT_GENERATE_EVENTS, strncmp(sep->arg[1], "true", 4) == 0 ? 1 : 0); + else if (strncmp(command, "recruiter", length) == 0 && sep->arg[1] && sep->arg[2] && guild) + guild->SetGuildRecruiter(client, sep->arg[1], strncmp(sep->arg[2], "true", 4) == 0 ? true : false); + else if (strncmp(command, "recruiter_description", length) == 0 && sep->arg[1] && guild) + guild->SetGuildRecruiterDescription(client, sep->argplus[1]); + else if (strncmp(command, "lock_event", length) == 0 && sep->arg[1] && sep->arg[2] && guild) + guild->LockGuildEvent(atoul(sep->arg[1]), strncmp(sep->arg[2], "true", 4) == 0 ? true : false); + else if (strncmp(command, "delete_event", length) == 0 && sep->arg[1] && guild) + guild->DeleteGuildEvent(atoul(sep->arg[1])); + else if (strncmp(command, "invite", length) == 0 && guild) + { + if (sep->arg[1] && strlen(sep->arg[1]) > 0) + guild->InvitePlayer(client, sep->arg[1]); + else + { + Spawn* target = client->GetPlayer()->GetTarget(); + if (target) + { + if (target->IsPlayer()) + guild->InvitePlayer(client, target->GetName()); + else + client->Message(CHANNEL_COLOR_WHITE, "%s is not a player.", target->GetName()); + } + } + } + else if (strncmp(command, "accept", length) == 0) + { + PendingGuildInvite* pgi = client->GetPendingGuildInvite(); + + if (pgi && pgi->guild && pgi->invited_by) + pgi->guild->AddNewGuildMember(client, pgi->invited_by->GetName()); + client->SetPendingGuildInvite(0); + } + else if (strncmp(command, "decline", length) == 0) + { + PendingGuildInvite* pgi = client->GetPendingGuildInvite(); + + if (pgi && pgi->guild && pgi->invited_by) + { + Client* client_inviter = pgi->invited_by->GetZone()->GetClientBySpawn(pgi->invited_by); + + if (client_inviter) + client_inviter->Message(CHANNEL_COLOR_WHITE, "%s has declined your invitation to join %s.", client->GetPlayer()->GetName(), pgi->guild->GetName()); + } + client->SetPendingGuildInvite(0); + } + else if (strncmp(command, "create", length) == 0 && sep->arg[1]) + { + const char* guild_name = sep->argplus[0]; + + if (!guild_list.GetGuild(guild_name)) + world.CreateGuild(guild_name, client, client->GetPlayer()->GetGroupMemberInfo()->group_id); + else + client->SimpleMessage(CHANNEL_COLOR_WHITE, "A guild with that name already exists."); + } + else if (strncmp(command, "search", length) == 0) + client->ShowGuildSearchWindow(); + else if (strncmp(command, "recruiting_details", length) == 0 && sep->arg[1] && sep->IsNumber(1)) + { + Guild* to_guild = guild_list.GetGuild(atoul(sep->arg[1])); + + if (to_guild) + to_guild->SendGuildRecruitingDetails(client); + } + else if (strncmp(command, "recruiting_image", length) == 0 && sep->arg[1] && sep->IsNumber(1)) + { + Guild* to_guild = guild_list.GetGuild(atoul(sep->arg[1])); + + if (to_guild) + to_guild->SendGuildRecruitingImages(client); + } + else if (strncmp(command, "recruiter_adventure_class", length) == 0) + { + if (sep->arg[1]) + { + const char* option = sep->arg[1]; + + if (strncmp(option, "toggle", strlen(option)) == 0) + guild->ToggleGuildRecruiterAdventureClass(client); + } + else + LogWrite(COMMAND__ERROR, 0, "Command", "Unhandled guild recruiter_adventure_class command: '%s'", sep->argplus[0]); + } + else if (strncmp(command, "display_heraldry", length) == 0) + { + // JA: not sure this is right... + client->GetPlayer()->toggle_character_flag(CF_SHOW_GUILD_HERALDRY); + client->GetPlayer()->SetCharSheetChanged(true); + } + else + LogWrite(COMMAND__ERROR, 0, "Command", "Unhandled guild command: '%s'", sep->argplus[0]); + } +} + +/* + Function: Command_GuildCreate() + Purpose : Display's in-game Guild Creation window + Dev : Scatman +*/ +void Commands::Command_CreateGuild(Client* client) +{ + client->SendGuildCreateWindow(); +} + +/* + Function: Command_SetGuildOfficerNote() + Purpose : + Dev : Scatman +*/ +void Commands::Command_SetGuildOfficerNote(Client* client, Seperator* sep) +{ + if (sep && sep->arg[0] && sep->arg[1]) + { + Guild* guild = client->GetPlayer()->GetGuild(); + + if (guild) + guild->SetGuildOfficerNote(sep->arg[0], sep->argplus[1]); + } +} + +/* + Function: Command_SetGuildMemberNote() + Purpose : + Dev : Scatman +*/ +void Commands::Command_SetGuildMemberNote(Client* client, Seperator* sep) +{ + if (sep && sep->arg[0] && sep->arg[1]) + { + Guild* guild = client->GetPlayer()->GetGuild(); + + if (guild) + guild->SetGuildMemberNote(sep->arg[0], sep->argplus[1]); + } +} + +/* + Function: Command_GuildSay() + Purpose : + Dev : Scatman +*/ +void Commands::Command_GuildSay(Client* client, Seperator* sep) +{ + Guild* guild = client->GetPlayer()->GetGuild(); + + if (guild) + { + if (sep && sep->arg[0]) + guild->HandleGuildSay(client, sep->argplus[0]); + } + else + client->SimpleMessage(CHANNEL_COLOR_WHITE, "You are not a member of a guild"); +} + +/* + Function: Command_OfficerSay() + Purpose : + Dev : Scatman +*/ +void Commands::Command_OfficerSay(Client* client, Seperator* sep) +{ + Guild* guild = client->GetPlayer()->GetGuild(); + + if (guild) + { + if (sep && sep->arg[0]) + guild->HandleOfficerSay(client, sep->argplus[0]); + } + else + client->SimpleMessage(CHANNEL_COLOR_WHITE, "You are not a member of a guild"); +} + +/* + Function: Command_Guilds() + Purpose : Shows help for /guild command + Params : + Dev : Scatman + Example : +*/ +void Commands::Command_Guilds(Client* client) +{ + client->SimpleMessage(CHANNEL_COLOR_YELLOW, "Usage: /guilds [create|delete|add|remove|list]"); +} + +/* + Function: Command_GuildsAdd() + Purpose : Add's players to a guild + Params : guild_name|guild_id, player name + Dev : Scatman + Example : /guilds add 1 Admin = adds player Admin to guild_id 1 +*/ +void Commands::Command_GuildsAdd(Client* client, Seperator* sep) +{ + if (sep && sep->arg[0] && strlen(sep->arg[0]) > 0) + { + Guild* guild = 0; + bool found = true; + + if (sep->IsNumber(0)) + { + guild = guild_list.GetGuild(atoul(sep->arg[0])); + + if (!guild) + { + client->Message(CHANNEL_COLOR_YELLOW, "Guild with ID %u does not exist.", atoul(sep->arg[0])); + found = false; + } + } + else + { + guild = guild_list.GetGuild(sep->arg[0]); + + if (!guild) + { + client->Message(CHANNEL_COLOR_YELLOW, "Guild '%s' does not exist.", sep->arg[0]); + found = false; + } + } + if (found) + { + Client* to_client = 0; + + if (sep->arg[1] && strlen(sep->arg[1]) > 0) + to_client = zone_list.GetClientByCharName(string(sep->arg[1])); + else if (client->GetPlayer()->GetTarget() && client->GetPlayer()->GetTarget()->IsPlayer()) + to_client = client->GetPlayer()->GetTarget()->GetZone()->GetClientBySpawn(client->GetPlayer()->GetTarget()); + + if (to_client) + guild->InvitePlayer(client, to_client->GetPlayer()->GetName()); + else + client->Message(CHANNEL_COLOR_YELLOW, "Could not find player '%s' to invite to the guild.", sep->arg[1]); + } + } + else + client->SimpleMessage(CHANNEL_COLOR_YELLOW, "Usage: /guilds add [guild name|guild id] (player name)."); +} + +/* + Function: Command_GuildsCreate() + Purpose : Creates a guild + Params : guild_name, player_name (optional) + Dev : Scatman + Example : /guilds create [guild name] (player name) +*/ +void Commands::Command_GuildsCreate(Client* client, Seperator* sep) +{ + if (sep && sep->arg[0]) + { + const char* guild_name = sep->arg[0]; + + if (!guild_list.GetGuild(guild_name)) + { + bool ret = false; + + if (sep->arg[1] && strlen(sep->arg[1]) > 0) + { + Client* to_client = zone_list.GetClientByCharName(string(sep->arg[1])); + + if (to_client) + { + world.CreateGuild(guild_name, to_client); + ret = true; + } + else + client->Message(CHANNEL_COLOR_YELLOW, "Could not find player with name '%s'", sep->arg[1]); + } + else if (client->GetPlayer()->GetTarget() && client->GetPlayer()->GetTarget()->IsPlayer()) + { + Client* to_client = client->GetPlayer()->GetTarget()->GetZone()->GetClientBySpawn(client->GetPlayer()->GetTarget()); + + if (to_client) + { + world.CreateGuild(guild_name, to_client); + ret = true; + } + } + else + { + world.CreateGuild(guild_name); + ret = true; + } + + if (ret) + client->Message(CHANNEL_COLOR_YELLOW, "Guild '%s' was successfully created.", guild_name); + else + client->SimpleMessage(CHANNEL_COLOR_YELLOW, "There was an error creating the guild."); + } + else + client->Message(CHANNEL_COLOR_YELLOW, "Guild '%s' already exists.", guild_name); + } + else + client->SimpleMessage(CHANNEL_COLOR_YELLOW, "Usage: /guilds create [guild name] (player name). If no player is specified, the player's target will be used. If the player has no target, a guild with no members will be created."); +} + +/* + Function: Command_GuildsDelete() + Purpose : Delete's a guild + Params : guild name + Dev : Scatman + Example : /guilds delete Test +*/ +void Commands::Command_GuildsDelete(Client* client, Seperator* sep) +{ + if (sep && sep->arg[0]) + { + Guild* guild = 0; + bool found = true; + + if (sep->IsNumber(0)) + { + guild = guild_list.GetGuild(atoul(sep->arg[0])); + + if (!guild) + { + client->Message(CHANNEL_COLOR_YELLOW, "Guild with ID %u does not exist.", atoul(sep->arg[0])); + found = false; + } + } + else + { + guild = guild_list.GetGuild(sep->arg[0]); + + if (!guild) + { + client->Message(CHANNEL_COLOR_YELLOW, "Guild '%s' does not exist.", sep->arg[0]); + found = false; + } + } + + if (found) + { + guild->RemoveAllGuildMembers(); + database.DeleteGuild(guild); + + client->Message(CHANNEL_COLOR_YELLOW, "Guild '%s' was successfully deleted.", guild->GetName()); + guild_list.RemoveGuild(guild, true); + } + } + else + client->SimpleMessage(CHANNEL_COLOR_YELLOW, "Usage: /guilds delete [guild name]."); +} + +/* + Function: Command_GuildsList() + Purpose : Lists current guilds on server + Params : + Dev : Scatman + Example : /guilds list +*/ +void Commands::Command_GuildsList(Client* client) +{ + MutexMap* guilds = guild_list.GetGuilds(); + MutexMap::iterator itr = guilds->begin(); + client->SimpleMessage(CHANNEL_COLOR_YELLOW, "Guild List:"); + if (guilds->size() == 0) + client->SimpleMessage(CHANNEL_COLOR_YELLOW, "None."); + else { + while (itr.Next()) { + Guild* guild = itr.second; + client->Message(CHANNEL_COLOR_YELLOW, "%u) %s", guild->GetID(), guild->GetName()); + } + } +} + +/* + Function: Command_GuildsRemove() + Purpose : Removes a player from a guild + Params : guild name|guild id, player name + Dev : Scatman + Example : /guilds remove 1 Admin = removes Admin from guild 1 +*/ +void Commands::Command_GuildsRemove(Client* client, Seperator* sep) +{ + if (sep && sep->arg[0] && strlen(sep->arg[0]) > 0) + { + Guild* guild = 0; + bool found = true; + + if (sep->IsNumber(0)) + { + guild = guild_list.GetGuild(atoul(sep->arg[0])); + + if (!guild) + { + client->Message(CHANNEL_COLOR_YELLOW, "Guild with ID %u does not exist.", atoul(sep->arg[0])); + found = false; + } + } + else + { + guild = guild_list.GetGuild(sep->arg[0]); + + if (!guild) + { + client->Message(CHANNEL_COLOR_YELLOW, "Guild '%s' does not exist.", sep->arg[0]); + found = false; + } + } + + if (found) + { + Client* to_client = 0; + + if (sep->arg[1] && strlen(sep->arg[1]) > 0) + to_client = zone_list.GetClientByCharName(string(sep->arg[1])); + else if (client->GetPlayer()->GetTarget() && client->GetPlayer()->GetTarget()->IsPlayer()) + to_client = client->GetPlayer()->GetTarget()->GetZone()->GetClientBySpawn(client->GetPlayer()->GetTarget()); + + if (to_client) + { + Player* to_player = to_client->GetPlayer(); + if (to_player->GetGuild()) + { + if (to_player->GetGuild() == guild) + { + guild->KickGuildMember(client, to_player->GetName()); + } + else + client->Message(CHANNEL_COLOR_YELLOW, "%s is not in the guild '%s'.", to_player->GetName(), guild->GetName()); + } + else + client->Message(CHANNEL_COLOR_YELLOW, "%s is not in a guild.", to_player->GetName()); + } + else + client->Message(CHANNEL_COLOR_YELLOW, "Could not find player '%s' to invite to the guild.", sep->arg[1]); + } + } + else + client->SimpleMessage(CHANNEL_COLOR_YELLOW, "Usage: /guilds remove [guild name|guild id] (player name)."); +} + +/* + Function: Command_InspectPlayer() + Purpose : Handle the Inspect functions + Params : Client to inspect + Dev : Scatman + Example : /inspect Scatman +*/ +void Commands::Command_InspectPlayer(Client* client, Seperator* sep) +{ + if (sep && sep->arg[0]) + { + Client* inspect_client = zone_list.GetClientByCharName(string(sep->arg[0])); + + if (inspect_client) + client->InspectPlayer(inspect_client->GetPlayer()); + } + else + { + Spawn* target = client->GetPlayer()->GetTarget(); + + if (target && target->IsPlayer()) + client->InspectPlayer((Player*)target); + } +} + +/* + Function: Command_Inventory() + Purpose : Handle changes in player inventory + Params : + Dev : All + Example : /inventory delete item_id +*/ +void Commands::Command_Inventory(Client* client, Seperator* sep, EQ2_RemoteCommandString* command) +{ + + PrintSep(sep, "Command_Inventory"); // temp to figure out the params + + Player* player = client->GetPlayer(); + + if(sep && sep->arg[0][0]) + { + LogWrite(COMMAND__INFO, 0, "Command", "command: %s", command->command.data.c_str()); + + if(client->GetPlayer()->GetHP() == 0) + client->SimpleMessage(CHANNEL_COLOR_RED,"You cannot do that right now."); + else if(sep->arg[1][0] && strncasecmp("destroy", sep->arg[0], 6) == 0 && sep->IsNumber(1)) + { + int16 index = atoi(sep->arg[1]); + Item* item = client->GetPlayer()->item_list.GetItemFromIndex(index); + + if(item) + { + if(item->GetItemScript() && lua_interface) + lua_interface->RunItemScript(item->GetItemScript(), "destroyed", item, client->GetPlayer()); + int32 bag_id = item->details.inv_slot_id; + database.DeleteItem(client->GetCharacterID(), item, 0); + client->GetPlayer()->item_list.DestroyItem(index); + EQ2Packet* outapp = client->GetPlayer()->SendInventoryUpdate(client->GetVersion()); + client->QueuePacket(outapp); + + outapp = client->GetPlayer()->SendBagUpdate(bag_id, client->GetVersion()); + + if (outapp) + client->QueuePacket(outapp); + } + } + else if(sep->arg[4][0] && strncasecmp("move", sep->arg[0], 4) == 0 && sep->IsNumber(1) && sep->IsNumber(2) && sep->IsNumber(3) && sep->IsNumber(4)) + { + int16 from_index = atoi(sep->arg[1]); + sint16 to_slot = atoi(sep->arg[2]); + sint32 bag_id = atol(sep->arg[3]); + int8 charges = atoi(sep->arg[4]); + Item* item = client->GetPlayer()->item_list.GetItemFromIndex(from_index); + + if(bag_id == -4 && !client->GetPlayer()->item_list.SharedBankAddAllowed(item)) + { + client->SimpleMessage(CHANNEL_COLOR_RED, "That item (or an item inside) cannot be shared."); + return; + } + + sint32 old_inventory_id = 0; + + if(item) + old_inventory_id = item->details.inv_slot_id; + + //autobank + if (bag_id == -3 && to_slot == -1) + { + if (player->HasFreeBankSlot()) + to_slot = player->FindFreeBankSlot(); + else + { + client->SimpleMessage(CHANNEL_COLOR_RED, "You do not have any free bank slots."); + return; + } + } + + //auto inventory + if (bag_id == 0 && to_slot == -1) + { + if (!player->item_list.GetFirstFreeSlot(&bag_id, &to_slot)) + { + client->SimpleMessage(CHANNEL_COLOR_RED, "You do not have any free slots."); + return; + } + } + + EQ2Packet* outapp = client->GetPlayer()->MoveInventoryItem(bag_id, from_index, (int8)to_slot, charges, client->GetVersion()); + client->QueuePacket(outapp); + + //removed from bag send update + if(old_inventory_id > 0 && item && item->details.inv_slot_id != old_inventory_id) + { + outapp = client->GetPlayer()->SendBagUpdate(old_inventory_id, client->GetVersion()); + if(outapp) + client->QueuePacket(outapp); + } + + if(item && item->details.inv_slot_id > 0 && item->details.inv_slot_id != old_inventory_id) + { + outapp = client->GetPlayer()->SendBagUpdate(item->details.inv_slot_id, client->GetVersion()); + + if(outapp) + client->QueuePacket(outapp); + } + } + else if(sep->arg[1][0] && strncasecmp("equip", sep->arg[0], 5) == 0 && sep->IsNumber(1)) + { + if(client->GetPlayer()->EngagedInCombat()) + client->SimpleMessage(CHANNEL_COLOR_RED, "You may not equip items while in combat."); + else + { + int16 index = atoi(sep->arg[1]); + int8 slot_id = 255; + + if(sep->arg[2][0] && sep->IsNumber(2)) + slot_id = atoi(sep->arg[2]); + + vector packets = client->GetPlayer()->EquipItem(index, client->GetVersion(), slot_id); + EQ2Packet* outapp = 0; + + for(int32 i=0;iQueuePacket(outapp); + } + + client->GetPlayer()->ChangePrimaryWeapon(); + client->GetPlayer()->ChangeSecondaryWeapon(); + client->GetPlayer()->ChangeRangedWeapon(); + EQ2Packet* characterSheetPackets = client->GetPlayer()->GetPlayerInfo()->serialize(client->GetVersion()); + client->QueuePacket(characterSheetPackets); + } + } + else if (sep->arg[1][0] && strncasecmp("unpack", sep->arg[0], 6) == 0 && sep->IsNumber(1)) + { + if (client->GetPlayer()->EngagedInCombat()) + client->SimpleMessage(CHANNEL_COLOR_RED, "You may not unpack items while in combat."); + else { + int16 index = atoi(sep->arg[1]); + Item* item = client->GetPlayer()->item_list.GetItemFromIndex(index); + if (item) { + // client->GetPlayer()->item_list.DestroyItem(index); + if (item->item_sets.size() > 0) { + for (int32 i = 0; i < item->item_sets.size(); i++) { + ItemSet* set = item->item_sets[i]; + if (set->item_stack_size == 0) + set->item_stack_size += 1; + client->AddItem(set->item_id, set->item_stack_size); + } + } + + } + client->RemoveItem(item, 1); + + } + + } + else if(sep->arg[1][0] && strncasecmp("unequip", sep->arg[0], 7) == 0 && sep->IsNumber(1)) + { + if(client->GetPlayer()->EngagedInCombat()) + client->SimpleMessage(CHANNEL_COLOR_RED, "You may not unequip items while in combat."); + else + { + int16 index = atoi(sep->arg[1]); + sint32 bag_id = -999; + int8 to_slot = 255; + + if(sep->arg[3][0]) + { + if(sep->IsNumber(2)) + bag_id = atol(sep->arg[2]); + + if(sep->IsNumber(3)) + to_slot = atoi(sep->arg[3]); + } + + vector packets = client->GetPlayer()->UnequipItem(index, bag_id, to_slot, client->GetVersion()); + EQ2Packet* outapp = 0; + + for(int32 i=0;iQueuePacket(outapp); + } + + client->GetPlayer()->ChangePrimaryWeapon(); + client->GetPlayer()->ChangeSecondaryWeapon(); + client->GetPlayer()->ChangeRangedWeapon(); + EQ2Packet* characterSheetPackets = client->GetPlayer()->GetPlayerInfo()->serialize(client->GetVersion()); + client->QueuePacket(characterSheetPackets); + } + } + else if(sep->arg[2][0] && strncasecmp("swap_equip", sep->arg[0], 10) == 0 && sep->IsNumber(1) && sep->IsNumber(2)) + { + LogWrite(MISC__TODO, 1, "TODO", " fix this, need to get how live does it\n\t(%s, function: %s, line #: %i)", __FILE__, __FUNCTION__, __LINE__); + int16 index1 = atoi(sep->arg[1]); + int16 index2 = atoi(sep->arg[2]); + EQ2Packet* outapp = client->GetPlayer()->SwapEquippedItems(index1, index2, client->GetVersion()); + + if(outapp) + client->QueuePacket(outapp); + else + { + client->SimpleMessage(CHANNEL_COLOR_YELLOW, "Unable to swap items"); + return; + } + } + else if (sep->arg[2][0] && strncasecmp("pop", sep->arg[0], 3) == 0 && sep->IsNumber(1) && sep->IsNumber(2)) + { + sint16 to_slot = atoi(sep->arg[1]); + sint32 bag_id = atoi(sep->arg[2]); + Item* item = client->GetPlayer()->item_list.GetOverflowItem(); + if (item) { + //auto inventory + if (bag_id == 0 && to_slot == -1) + { + if (!player->item_list.GetFirstFreeSlot(&bag_id, &to_slot)) + { + client->SimpleMessage(CHANNEL_ERROR, "You do not have any free slots."); + return; + } + // Set the slot for the item + item->details.inv_slot_id = bag_id; + item->details.slot_id = to_slot; + // Flag the item so it gets saved in its new location + item->save_needed = true; + // Add the item to its new location + player->item_list.AddItem(item); + // Remove the item from the overflow list + player->item_list.RemoveOverflowItem(item); + // Send the inventory update packet + client->QueuePacket(player->item_list.serialize(player, client->GetVersion())); + return; + } + else if (bag_id == -3 && to_slot == -1) { + // Auto Bank + if (!player->item_list.GetFirstFreeBankSlot(&bag_id, &to_slot)) { + client->SimpleMessage(CHANNEL_STATUS, "You do not have any free bank slots."); + return; + } + item->details.inv_slot_id = bag_id; + item->details.slot_id = to_slot; + item->save_needed = true; + player->item_list.AddItem(item); + player->item_list.RemoveOverflowItem(item); + client->QueuePacket(player->item_list.serialize(player, client->GetVersion())); + } + else if (bag_id == -4) { + // Shared Bank + if (!player->item_list.SharedBankAddAllowed(item)) { + client->SimpleMessage(CHANNEL_STATUS, "That item (or an item inside) cannot be shared."); + return; + } + Item* tmp_item = player->item_list.GetItem(-4, to_slot); + if (tmp_item) { + client->SimpleMessage(CHANNEL_STATUS, "You can not place an overflow item into an occupied slot"); + return; + } + else { + item->details.inv_slot_id = bag_id; + item->details.slot_id = to_slot; + item->save_needed = true; + player->item_list.AddItem(item); + player->item_list.RemoveOverflowItem(item); + client->QueuePacket(player->item_list.serialize(player, client->GetVersion())); + return; + } + } + else { + // Try to get an item from the given bag id and slot id + Item* tmp_item = player->item_list.GetItem(bag_id, to_slot); + // Check to see if we got an item, if we do send an error, + // if we don't put the overflow item into this slot + if (tmp_item) { + client->SimpleMessage(CHANNEL_STATUS, "You can not place an overflow item into an occupied slot"); + } + else { + item->details.inv_slot_id = bag_id; + item->details.slot_id = to_slot; + item->save_needed = true; + player->item_list.AddItem(item); + player->item_list.RemoveOverflowItem(item); + client->QueuePacket(player->item_list.serialize(player, client->GetVersion())); + return; + } + } + } + } + } + else + client->SimpleMessage(CHANNEL_COLOR_YELLOW,"Usage: /inventory {destroy|move|equip|unequip|swap_equip|pop} {item_id} [to_slot] [bag_id]"); + +} + +/* + Function: Command_IRC() + Purpose : Handle the IRC functions + Params : IRC Commands + Dev : Scatman + Example : /irc say #Channel Hello World! +*/ +void Commands::Command_IRC(Client* client, Seperator* sep) +{ + if (!rule_manager.GetGlobalRule(R_World, IRCEnabled)->GetBool()) { + client->SimpleMessage(CHANNEL_STATUS, "IRC is currently disabled on this server"); + return; + } + + if (sep && sep->arg[0][0]) { + if (strcasecmp(sep->arg[0], "say") == 0) { + if (sep->arg[1][0] && sep->arg[2][0]) { + if (sep->IsNumber(sep->arg[1])) + irc.Say(client, atoul(sep->arg[1]), sep->argplus[2]); + else + irc.Say(client, sep->arg[1], sep->argplus[2]); + } + else + client->SimpleMessage(CHANNEL_COLOR_YELLOW, "Usage: /irc say "); + } + else if (strcasecmp(sep->arg[0], "join") == 0) { + if (sep->arg[1][0]) + irc.JoinChannel(client, sep->arg[1]); + else + client->SimpleMessage(CHANNEL_COLOR_YELLOW, "Usage: /irc join "); + } + else if (strcasecmp(sep->arg[0], "leave") == 0) { + if (sep->arg[1][0]) + irc.LeaveChannel(client, sep->arg[1]); + else + client->SimpleMessage(CHANNEL_COLOR_YELLOW, "Usage: /irc leave "); + } + else if (strcasecmp(sep->arg[0], "list") == 0) + irc.ListChannels(client); + else if (strcasecmp(sep->arg[0], "connect") == 0) { + if (sep->arg[1][0] && sep->arg[2][0] && sep->IsNumber(2)) + irc.ConnectToServer(client, sep->arg[1], atoi(sep->arg[2]), sep->arg[3]); + else + client->SimpleMessage(CHANNEL_COLOR_YELLOW, "Usage: /irc connect (nick)"); + } + else if (strcasecmp(sep->arg[0], "disconnect") == 0) + irc.DisconnectFromServer(client); + else + client->SimpleMessage(CHANNEL_COLOR_YELLOW, "Unknown IRC command."); + } + else + client->SimpleMessage(CHANNEL_COLOR_YELLOW, "Unknown IRC command."); +} +/* + Function: Command_Languages() + Purpose : Show's languages the player knows + Params : + Dev : Zcoretri + Example : +*/ +void Commands::Command_Languages(Client* client, Seperator* sep) +{ + list* languages = client->GetPlayer()->GetPlayerLanguages()->GetAllLanguages(); + list::iterator itr; + Language* language; + client->Message(CHANNEL_COLOR_WHITE, "You know the following languages:"); + + for(itr = languages->begin(); itr != languages->end(); itr++) + { + language = *itr; + client->Message(CHANNEL_COLOR_WHITE, "%s", language->GetName()); + } +} + +/* + Function: Command_SetLanguage() + Purpose : Handles language commands + Params : Language ID + Dev : Zcoretri + Example : +*/ +void Commands::Command_SetLanguage(Client* client, Seperator* sep) +{ + Player* player = client->GetPlayer(); + + if (sep && sep->arg[0]) + { + if(!sep->IsNumber(0)) + { + //String passed in + const char* value = sep->arg[0]; + + if(strncasecmp(value, "Common", strlen(value)) == 0) + { + database.SaveCharacterCurrentLang(0, client->GetCharacterID(), client); + client->SendLanguagesUpdate(0); + client->Message(CHANNEL_COLOR_WHITE, "You are now speaking %s", value); + } + else + { + if(player->HasLanguage(value)) + { + Language* language = player->GetPlayerLanguages()->GetLanguageByName(value); + database.SaveCharacterCurrentLang(language->GetID(), client->GetCharacterID(), client); + client->SendLanguagesUpdate(language->GetID()); + client->Message(CHANNEL_COLOR_WHITE, "You are now speaking %s", language->GetName()); + } + else + client->Message(CHANNEL_COLOR_WHITE, "You do not know how to speak %s", value); + } + } + else + { + //Number passed in + int32 id = atoul(sep->arg[0]); + + if(player->HasLanguage(id)) + { + Language* language = player->GetPlayerLanguages()->GetLanguage(id); + database.SaveCharacterCurrentLang(id, client->GetCharacterID(), client); + client->SendLanguagesUpdate(id); + client->Message(CHANNEL_COLOR_WHITE, "You are now speaking %s", language->GetName()); + } + else + { + Language* language = master_languages_list.GetLanguage(id); + client->Message(CHANNEL_COLOR_WHITE, "You do not know how to speak %s", language->GetName()); + } + } + } + else + { + //No value was passed in + int32 id = database.GetCharacterCurrentLang(client->GetCharacterID(), player); + + if(id > 0) + { + Language* language = player->GetPlayerLanguages()->GetLanguage(id); + client->Message(CHANNEL_COLOR_WHITE, "You are currently speaking %s ", language->GetName()); + } + else + client->Message(CHANNEL_COLOR_WHITE, "You are currently speaking Common"); + } +} + +/* + Function: Command_LastName() + Purpose : Sets player surname + Params : Name text + Dev : theFoof + Example : +*/ +void Commands::Command_LastName(Client* client, Seperator* sep) +{ + if (!client) + return; + + if (sep && sep->arg[0]) + { + if (!client->GetPlayer()->get_character_flag(CF_ENABLE_CHANGE_LASTNAME)){ + client->Message(CHANNEL_COLOR_YELLOW, "You must be atleast level %i to change your last name.", rule_manager.GetGlobalRule(R_Player, MinLastNameLevel)->GetInt8()); + return; + } + client->RemovePendingLastName(); + + uchar* checkname = (uchar*)sep->arg[0]; + bool valid_name = true; + for (int32 i = 0; i < strlen(sep->arg[0]); i++) { + if (!alpha_check(checkname[i])) { + valid_name = false; + break; + } + } + + if (!valid_name) { + client->Message(CHANNEL_COLOR_YELLOW, "Your last name can only contain letters.", rule_manager.GetGlobalRule(R_Player, MinLastNameLevel)->GetInt8()); + return; + } + + string last_name = (string)sep->arg[0]; + int8 max_length = rule_manager.GetGlobalRule(R_Player, MaxLastNameLength)->GetInt8(); + int8 min_length = rule_manager.GetGlobalRule(R_Player, MinLastNameLength)->GetInt8(); + if (last_name.length() <= max_length && last_name.length() >= min_length){ + client->SetPendingLastName(last_name); + client->SendLastNameConfirmation(); + } + else + client->Message(CHANNEL_COLOR_YELLOW, "Your last name must be between %i and %i characters long.", min_length, max_length); + } +} + +/* + Function: Command_ConfirmLastName() + Purpose : Confirms setting of player surname + Params : Name text + Dev : theFoof + Example : +*/ +void Commands::Command_ConfirmLastName(Client* client, Seperator* sep) +{ + if (!client) + return; + + string* name = client->GetPendingLastName(); + if (name){ + Player* player = client->GetPlayer(); + player->SetLastName(name->c_str(), false); + client->SendTitleUpdate(); + player->SetCharSheetChanged(true); + client->RemovePendingLastName(); + } +} + +/* + Function: Command_Location() + Purpose : Display's Help for /location commands + Params : + Dev : Scatman + Example : /location = show's help for command +*/ +void Commands::Command_Location(Client* client) +{ + client->SimpleMessage(CHANNEL_COLOR_YELLOW, "Valid /location commands are:"); + client->SimpleMessage(CHANNEL_COLOR_YELLOW, "/location create [name] (include y). Include y defaults to false"); + client->SimpleMessage(CHANNEL_COLOR_YELLOW, "/location add [location id]"); + client->SimpleMessage(CHANNEL_COLOR_YELLOW, "/location remove [location point id]"); + client->SimpleMessage(CHANNEL_COLOR_YELLOW, "/location delete [location id]"); + client->SimpleMessage(CHANNEL_COLOR_YELLOW, "/location list [locations|points] [location id if points used]"); +} + +/* + Function: Command_LocationAdd() + Purpose : Add's a location to an existing location config + Params : location_id + Dev : Scatman + Example : /location add {location_id} +*/ +void Commands::Command_LocationAdd(Client* client, Seperator* sep) +{ + if (sep && sep->arg[0] && sep->IsNumber(0)) + { + int32 location_id = atoul(sep->arg[0]); + float x = client->GetPlayer()->GetX(); + float y = client->GetPlayer()->GetY(); + float z = client->GetPlayer()->GetZ(); + + if (database.AddLocationPoint(location_id, x, y, z)) + client->Message(CHANNEL_COLOR_YELLOW, "Point (%f, %f, %f) was successfully added to location %u", x, y, z, location_id); + else + client->Message(CHANNEL_COLOR_YELLOW, "A location with ID %u does not exist. Use /location create to create one", location_id); + } + else + client->SimpleMessage(CHANNEL_COLOR_YELLOW, "Usage: /location add [location id]"); +} + +/* + Function: Command_LocationCreate() + Purpose : Creates a new location config + Params : location name, 0/1 for include_y (optional) + Dev : Scatman + Example : /location create Test 1 = creates a new location named Test with include_y True +*/ +void Commands::Command_LocationCreate(Client* client, Seperator* sep) +{ + if (sep && sep->arg[0] && strlen(sep->arg[0]) > 0) + { + const char* name = sep->arg[0]; + bool include_y = false; + + if (sep->arg[1] && sep->IsNumber(1) && atoi(sep->arg[1]) > 0) + include_y = true; + + int32 location_id = database.CreateLocation(client->GetPlayer()->GetZone()->GetZoneID(), client->GetPlayer()->appearance.pos.grid_id, name, include_y); + + if (location_id > 0) + client->Message(CHANNEL_COLOR_YELLOW, "Location '%s' was successfully created with location id %u", name, location_id); + else + client->SimpleMessage(CHANNEL_COLOR_YELLOW, "There was an error creating the requested location"); + } + else + client->SimpleMessage(CHANNEL_COLOR_YELLOW, "Usage: /location create [name] (include_y). Include y defaults to false"); +} + +/* + Function: Command_LocationDelete() + Purpose : Delete's a location config and all it's location points + Params : location_id + Dev : Scatman + Example : /location delete {location_id} +*/ +void Commands::Command_LocationDelete(Client* client, Seperator* sep) +{ + if (sep && sep->arg[0] && sep->IsNumber(0)) + { + int32 location_id = atoul(sep->arg[0]); + + if (database.DeleteLocation(location_id)) + client->Message(CHANNEL_COLOR_YELLOW, "Location id %u and all its points were successfully deleted", location_id); + else + client->Message(CHANNEL_COLOR_YELLOW, "A location with ID %u does not exist", location_id); + } + else + client->SimpleMessage(CHANNEL_COLOR_YELLOW, "Usage: /location delete [location id]"); +} + +/* + Function: Command_LocationList() + Purpose : Display's a list of location points + Params : location_id + Dev : Scatman + Example : /location list {location_id} +*/ +void Commands::Command_LocationList(Client* client, Seperator* sep) +{ + if (sep && sep->arg[0]) + { + const char* option = sep->arg[0]; + + if (strncmp(option, "locations", strlen(option)) == 0) + database.ListLocations(client); + else if (strncmp(option, "points", strlen(option)) == 0 && sep->arg[1] && sep->IsNumber(1)) + { + int32 location_id = atoul(sep->arg[1]); + database.ListLocationPoints(client, location_id); + } + else + client->SimpleMessage(CHANNEL_COLOR_YELLOW, "Useage: /location list [locations|points] [location ID if points used]"); + } + else + client->SimpleMessage(CHANNEL_COLOR_YELLOW, "Useage: /location list [locations|points] [location ID if points used]"); +} + +/* + Function: Command_LocationRemove() + Purpose : Removes a single location point from a location config + Params : location_point_id (gotten from /location list {id}) + Dev : Scatman + Example : /location remove 1 = will remove location_point_id 1 +*/ +void Commands::Command_LocationRemove(Client* client, Seperator* sep) +{ + if (sep && sep->arg[0] && sep->IsNumber(0)) + { + int32 location_point_id = atoul(sep->arg[0]); + + if (database.DeleteLocationPoint(location_point_id)) + client->SimpleMessage(CHANNEL_COLOR_YELLOW, "Location point was successfully deleted"); + else + client->Message(CHANNEL_COLOR_YELLOW, "Location point with ID %u does not exist", location_point_id); + } + else + client->SimpleMessage(CHANNEL_COLOR_YELLOW, "Usage: /location remove [location point id]"); +} + +/* + Function: Command_Merchant() + Purpose : Handles Merchant commands + Params : list + Dev : Scatman + Example : /merchant list +*/ +void Commands::Command_Merchant(Client* client, Seperator* sep, int handler) +{ + if( handler == COMMAND_MERCHANT ) + { + // /merchant command by itself shows help (to be extended) + client->SimpleMessage(CHANNEL_COLOR_YELLOW, "Usage: /merchant list [merchant description]"); + return; + } + else if( handler == COMMAND_MERCHANT_LIST ) + { + // /merchant list command expects "description" param + if (sep && sep->arg[0]) + { + const char* merchant_description = sep->argplus[0]; + client->Message(CHANNEL_COLOR_YELLOW, "Listing merchants like '%s':", merchant_description); + map* merchant_info = world.GetMerchantInfo(); + map::iterator itr; + + for (itr = merchant_info->begin(); itr != merchant_info->end(); itr++) + { + string description = database.GetMerchantDescription(itr->first); + + if (ToLower(description).find(ToLower(string(merchant_description))) < 0xFFFFFFFF) + client->Message(CHANNEL_COLOR_YELLOW, "Merchant ID: %u, Description: %s", itr->first, description.c_str()); + } + } + else // no description + client->SimpleMessage(CHANNEL_COLOR_YELLOW, "Usage: /merchant list [merchant description]"); + } +} + +/* + Function: Command_Modify() + Purpose : to replace our other "set" commands + Params : System = the system to modify, Action = the action to perform, Target = what to change (target, or index) + Dev : John Adams + Example : /modify spell set name "Aegolism III" +*/ +void Commands::Command_Modify(Client* client) +{ + client->SimpleMessage(CHANNEL_COLOR_YELLOW, "Usage: /modify [system] [action] [field] [value] {target|id}"); + client->SimpleMessage(CHANNEL_COLOR_YELLOW, "Systems: character, faction, guild, item, skill, spawn, spell, zone"); + client->SimpleMessage(CHANNEL_COLOR_YELLOW, "Actions: set, create, delete, add, remove"); + client->SimpleMessage(CHANNEL_COLOR_YELLOW, "Value : field name in the table being modified"); + client->SimpleMessage(CHANNEL_COLOR_YELLOW, "Target : modify current target, or specified {system} ID"); +} + + +/* + Function: Command_ModifySpawn() + Purpose : replace "spawn set" commands + Params : Action : the action to perform (or special handler) + : Field : the DB field to change + : Value : what to set the value to + : Target : what object to change (my target, or spawn_id) + Dev : John Adams + Example : /modify spawn set name "Lady Vox" + : + Note : Special Handlers, like "zoneto" for Signs + : /modify spawn zoneto + : Will set a sign's zone x/y/z to my current coords +*/ +void Commands::Command_ModifySpawn(Client* client, Seperator* sep) +{ + PrintSep(sep, "COMMAND_MODIFY"); + + // need at least 2 args for a valid command + if( sep && sep->arg[1] ) + { + // JA: just a quick implementation because I need it :) + if (strcmp(sep->arg[0], "zoneto") == 0) + { + if( sep->IsNumber(1) ) + { + int32 spawn_id = atoul(sep->arg[1]); + float x_coord = client->GetPlayer()->GetX(); + float y_coord = client->GetPlayer()->GetY(); + float z_coord = client->GetPlayer()->GetZ(); + float h_coord = client->GetPlayer()->GetHeading(); + + database.SaveSignZoneToCoords(spawn_id, x_coord, y_coord, z_coord, h_coord); + } + else + client->SimpleMessage(CHANNEL_COLOR_RED, "Usage: /modify spawn zoneto spawn_id - sets spawn_id to your coords"); + } + } + else + Command_Modify(client); +} + +/* + Function: Command_ModifyCharacter() + Purpose : to replace our other "set" commands + Params : Action : Add, Remove + : Field : copper, silver, gold, plat + : Value : min 1, max unlimited + : Target : Self, Player + Dev : Cynnar + Example : /modify character add gold 50 + : /modify character remove silver 25 +*/ +void Commands::Command_ModifyCharacter(Client* client, Seperator* sep) +{ + PrintSep(sep, "COMMAND_MODIFY"); + + int64 value = 0; + + Player* player = client->GetPlayer(); + if (player->HasTarget() && player->GetTarget()->IsPlayer()) + player = (Player*)player->GetTarget(); + + // need at least 2 args for a valid command + if( sep && sep->arg[1] ) + + { + if (strcmp(sep->arg[0], "add") == 0) + + { + if (strcmp(sep->arg[1], "copper") == 0) + { + value = atoi64(sep->arg[2]); + player->AddCoins(value); + if (client->GetPlayer() == player) + { + client->Message(CHANNEL_COLOR_YELLOW, "You give yourself %llu copper coin%s", value, (value > 1 ? "s" : "")); + } + else { + client->Message(CHANNEL_COLOR_YELLOW, "You give %s %llu copper coin%s", player->GetName(), value, (value > 1 ? "s" : "")); + client->GetCurrentZone()->GetClientBySpawn(player)->Message(CHANNEL_COLOR_YELLOW, "%s gave you %llu copper coin%s", client->GetPlayer()->GetName(), value, (value > 1 ? "s" : "")); + } + } + + else if (strcmp(sep->arg[1], "silver") == 0) + { + value = atoi64(sep->arg[2]) * 100; + player->AddCoins(value); + if (client->GetPlayer() == player) + { + client->Message(CHANNEL_COLOR_YELLOW, "You give yourself %llu silver coin%s", value / 100, (value > 1 ? "s" : "")); + } + else { + client->Message(CHANNEL_COLOR_YELLOW, "You give %s %llu silver coin%s", player->GetName(), value / 100, (value > 1 ? "s" : "")); + client->GetCurrentZone()->GetClientBySpawn(player)->Message(CHANNEL_COLOR_YELLOW, "%s gave you %llu silver coin%s", client->GetPlayer()->GetName(), value / 100, (value > 1 ? "s" : "")); + } + } + + else if (strcmp(sep->arg[1], "gold") == 0) + { + value = atoi64(sep->arg[2]) * 10000; + player->AddCoins(value); + if (client->GetPlayer() == player) + { + client->Message(CHANNEL_COLOR_YELLOW, "You give yourself %llu gold coin%s", value / 10000, (value > 1 ? "s" : "")); + } + else { + client->Message(CHANNEL_COLOR_YELLOW, "You give %s %llu gold coin%s", player->GetName(), value / 10000, (value > 1 ? "s" : "")); + client->GetCurrentZone()->GetClientBySpawn(player)->Message(CHANNEL_COLOR_YELLOW, "%s gave you %llu gold coin%s", client->GetPlayer()->GetName(), value / 10000, (value > 1 ? "s" : "")); + } + } + + else if (strcmp(sep->arg[1], "plat") == 0) + { + value = atoi64(sep->arg[2]) * 1000000; + player->AddCoins(value); + if (client->GetPlayer() == player) + { + client->Message(CHANNEL_COLOR_YELLOW, "You give yourself %llu platinum coin%s", value / 1000000, (value > 1 ? "s" : "")); + } + else { + client->Message(CHANNEL_COLOR_YELLOW, "You give %s %llu platinum coin%s", player->GetName(), value / 1000000, (value > 1 ? "s" : "")); + client->GetCurrentZone()->GetClientBySpawn(player)->Message(CHANNEL_COLOR_YELLOW, "%s gave you %llu platinum coin%s", client->GetPlayer()->GetName(), value / 1000000, (value > 1 ? "s" : "")); + } + } + + else + { + client->SimpleMessage(CHANNEL_COLOR_RED, "Usage: /modify character [action] [field] [value]"); + client->SimpleMessage(CHANNEL_COLOR_RED, "Actions: add, remove"); + client->SimpleMessage(CHANNEL_COLOR_RED, "Value : copper, silver, gold, plat"); + client->SimpleMessage(CHANNEL_COLOR_RED, "Example: /modify character add copper 20"); + } + } + + else if (strcmp(sep->arg[0], "remove") == 0) + { + if (strcmp(sep->arg[1], "copper") == 0) + { + value = atoi64(sep->arg[2]); + player->RemoveCoins(value); + if (client->GetPlayer() == player) + { + client->Message(CHANNEL_COLOR_YELLOW, "You take %llu copper coin%s from yourself", value, (value > 1 ? "s" : "")); + } + else { + client->Message(CHANNEL_COLOR_YELLOW, "You take %llu copper coin%s from %s", value, (value > 1 ? "s" : ""), player->GetName()); + client->GetCurrentZone()->GetClientBySpawn(player)->Message(CHANNEL_COLOR_YELLOW, "%s takes %llu copper coin%s from you", client->GetPlayer()->GetName(), value, (value > 1 ? "s" : "")); + } + } + + else if (strcmp(sep->arg[1], "silver") == 0) + { + value = atoi64(sep->arg[2]) * 100; + player->RemoveCoins(value); + if (client->GetPlayer() == player) + { + client->Message(CHANNEL_COLOR_YELLOW, "You take %llu silver coin%s from yourself", value / 100, (value > 1 ? "s" : "")); + } + else { + client->Message(CHANNEL_COLOR_YELLOW, "You take %llu silver coin%s from %s", value / 100, (value > 1 ? "s" : ""), player->GetName()); + client->GetCurrentZone()->GetClientBySpawn(player)->Message(CHANNEL_COLOR_YELLOW, "%s takes %llu silver coin%s from you", client->GetPlayer()->GetName(), value / 100, (value > 1 ? "s" : "")); + } + } + + else if (strcmp(sep->arg[1], "gold") == 0) + { + value = atoi64(sep->arg[2]) * 10000; + player->RemoveCoins(value); + if (client->GetPlayer() == player) + { + client->Message(CHANNEL_COLOR_YELLOW, "You take %llu gold coin%s from yourself", value / 10000, (value > 1 ? "s" : "")); + } + else { + client->Message(CHANNEL_COLOR_YELLOW, "You take %llu gold coin%s from %s", value / 10000, (value > 1 ? "s" : ""), player->GetName()); + client->GetCurrentZone()->GetClientBySpawn(player)->Message(CHANNEL_COLOR_YELLOW, "%s takes %llu gold coin%s from you", client->GetPlayer()->GetName(), value / 10000, (value > 1 ? "s" : "")); + } + } + + else if (strcmp(sep->arg[1], "plat") == 0) + { + value = atoi64(sep->arg[2]) * 1000000; + player->RemoveCoins(value); + if (client->GetPlayer() == player) + { + client->Message(CHANNEL_COLOR_YELLOW, "You take %llu platinum coin%s from yourself", value / 1000000, (value > 1 ? "s" : "")); + } + else { + client->Message(CHANNEL_COLOR_YELLOW, "You take %llu platinum coin%s from %s", value / 1000000, (value > 1 ? "s" : ""), player->GetName()); + client->GetCurrentZone()->GetClientBySpawn(player)->Message(CHANNEL_COLOR_YELLOW, "%s takes %llu platinum coin%s from you", client->GetPlayer()->GetName(), value / 1000000, (value > 1 ? "s" : "")); + } + } + + else + { + client->SimpleMessage(CHANNEL_COLOR_RED, "Example: /modify character remove gold 15"); + + } + } + + else if (strcmp(sep->arg[0], "set") == 0) { + + if (strcmp(sep->arg[1], "tslevel") == 0) { + int8 level = atoi(sep->arg[2]); + + if (level > 0 && level < 256) { + if (player) { + if (client->GetPlayer() == player) + client->ChangeTSLevel(player->GetTSLevel(), level); + else + player->GetZone()->GetClientBySpawn(player)->ChangeTSLevel(player->GetTSLevel(), level); + } + } + else + client->SimpleMessage(CHANNEL_ERROR, "Level must be between 1 - 255"); + } + + else if (strcmp(sep->arg[1], "tsclass") == 0) { + int8 tsclass = atoi(sep->arg[2]); + + player->SetTradeskillClass(tsclass); + player->GetInfoStruct()->tradeskill_class1 = classes.GetTSBaseClass(player->GetTradeskillClass()); + player->GetInfoStruct()->tradeskill_class2 = classes.GetSecondaryTSBaseClass(player->GetTradeskillClass()); + player->GetInfoStruct()->tradeskill_class3 = player->GetTradeskillClass(); + player->SetCharSheetChanged(true); + } + } + } + else + { + client->SimpleMessage(CHANNEL_COLOR_RED, "Usage: /modify character [action] [field] [value]"); + client->SimpleMessage(CHANNEL_COLOR_RED, "Actions: add, remove"); + client->SimpleMessage(CHANNEL_COLOR_RED, "Value : copper, silver, gold, plat"); + client->SimpleMessage(CHANNEL_COLOR_RED, "Example: /modify character remove gold 15"); + } + +} + + +void Commands::Command_ModifyFaction(Client* client, Seperator* sep) +{ + PrintSep(sep, "COMMAND_MODIFY"); + + // need at least 2 args for a valid command + if( sep && sep->arg[1] ) + { + } + else + Command_Modify(client); +} + + +void Commands::Command_ModifyGuild(Client* client, Seperator* sep) +{ + PrintSep(sep, "COMMAND_MODIFY"); + + // need at least 2 args for a valid command + if( sep && sep->arg[1] ) + { + } + else + Command_Modify(client); +} + + +void Commands::Command_ModifyItem(Client* client, Seperator* sep) +{ + PrintSep(sep, "COMMAND_MODIFY"); + + // need at least 2 args for a valid command + if( sep && sep->arg[1] ) + { + } + else + Command_Modify(client); +} + +/* + Function: Command_ModifyQuest() + Purpose : to list players quest and completed quests + Params : Action : list, completed + : Target : Self, Player + Dev : Cynnar + Example : /modify quest list + : /modify quest completed +*/ + +void Commands::Command_ModifyQuest(Client* client, Seperator* sep) +{ + PrintSep(sep, "COMMAND_MODIFY"); + + int64 value = 0; + + Player* player = client->GetPlayer(); + if (player->HasTarget() && player->GetTarget()->IsPlayer()) + player = (Player*)player->GetTarget(); + + // need at least 2 args for a valid command + + if( sep && sep->arg[1] ) + { + + if (strcmp(sep->arg[0], "list") == 0) + { + map* quests = player->GetPlayerQuests(); + map::iterator itr; + client->Message(CHANNEL_COLOR_YELLOW, "%s's Quest List:.", client->GetPlayer()->GetName()); + if (quests->size() == 0) + client->Message(CHANNEL_COLOR_YELLOW, "%s has no quests.", client->GetPlayer()->GetName()); + else + { + for( itr = quests->begin(); itr != quests->end(); itr++ ) + { + Quest* quest = itr->second; + client->Message(CHANNEL_COLOR_YELLOW, "%u) %s", itr->first, quest->GetName()); + } + } + + } + + else if (strcmp(sep->arg[0], "completed") == 0) + { + + map* quests = player->GetCompletedPlayerQuests(); + map::iterator itr; + client->Message(CHANNEL_COLOR_YELLOW, "%s's Completed Quest List:.", client->GetPlayer()->GetName()); + if (quests->size() == 0) + client->Message(CHANNEL_COLOR_YELLOW, "%s has no completed quests.", client->GetPlayer()->GetName()); + else + { + for( itr = quests->begin(); itr != quests->end(); itr++ ) + { + Quest* quest = itr->second; + client->Message(CHANNEL_COLOR_YELLOW, "%u) %s", itr->first, quest->GetName()); + } + } + + } + // Add in a progress step, and a LogWrite() for tracking GM Commands. + // LogWrite(LUA__DEBUG, 0, "LUA", "Quest: %s, function: %s", quest->GetName(), function); + else if (strcmp(sep->arg[0], "remove") == 0) + { + int32 quest_id = 0; + + if (sep && sep->arg[1] && sep->IsNumber(1)) + quest_id = atoul(sep->arg[1]); + + if (quest_id > 0) + { + if (lua_interface && client->GetPlayer()->player_quests.count(quest_id) > 0) + { + Quest* quest = client->GetPlayer()->player_quests[quest_id]; + if (quest) + if (client->GetPlayer() == player) + { + client->Message(CHANNEL_COLOR_YELLOW, "The quest %s has been removed from your journal", quest->GetName()); + } + else + { + client->Message(CHANNEL_COLOR_YELLOW, "You have removed the quest %s from %s's journal", quest->GetName(), player->GetName()); + client->GetCurrentZone()->GetClientBySpawn(player)->Message(CHANNEL_COLOR_YELLOW, "%s has removed the quest %s from your journal", client->GetPlayer()->GetName(), quest->GetName()); + } + LogWrite(COMMAND__INFO, 0, "GM Command", "%s removed the quest %s from %s", client->GetPlayer()->GetName(), quest->GetName(), player->GetName()); + lua_interface->CallQuestFunction(quest, "Deleted", client->GetPlayer()); + } + client->RemovePlayerQuest(quest_id); + client->GetCurrentZone()->SendQuestUpdates(client); + } + } + + else + { + Command_Modify(client); + } + } + + else + { + client->SimpleMessage(CHANNEL_COLOR_RED, "Usage: /modify quest [action] [quest id]"); + client->SimpleMessage(CHANNEL_COLOR_RED, "Actions: list, completed, remove"); + client->SimpleMessage(CHANNEL_COLOR_RED, "Example: /modify quest list"); + client->SimpleMessage(CHANNEL_COLOR_RED, "Example: /modify quest remove 156"); + } + +} + + +void Commands::Command_ModifySkill(Client* client, Seperator* sep) +{ + PrintSep(sep, "COMMAND_MODIFY"); + + // need at least 2 args for a valid command + if( sep && sep->arg[1] ) + { + if (strcmp(sep->arg[0], "add") == 0) { + const char* skill_name = sep->argplus[1]; + Skill* skill = master_skill_list.GetSkillByName(skill_name); + + if (skill) { + Player* player = 0; + Client* to_client = 0; + + if (client->GetPlayer()->GetTarget() && client->GetPlayer()->GetTarget()->IsPlayer()) { + player = (Player*)client->GetPlayer()->GetTarget(); + to_client = client->GetCurrentZone()->GetClientBySpawn(player); + } + else { + player = client->GetPlayer(); + to_client = client; + } + + if (player) + { + if (!player->GetSkills()->HasSkill(skill->skill_id)) + { + player->AddSkill(skill->skill_id, 1, player->GetLevel() * 5, true); + if (to_client == client) { + client->Message(CHANNEL_STATUS, "Added skill '%s'.", skill_name); + } + else { + client->Message(CHANNEL_STATUS, "You gave skill '%s' to player '%s'.", skill_name, player->GetName()); + to_client->Message(CHANNEL_STATUS, "%s gave you skill '%s'.", client->GetPlayer()->GetName(), skill_name); + } + } + else + client->Message(CHANNEL_STATUS, "%s already has the skill '%s'.", to_client == client ? "You" : player->GetName(), skill_name); + } + } + else + client->Message(CHANNEL_STATUS, "The skill '%s' does not exist.", skill_name); + } + else if (strcmp(sep->arg[0], "remove") == 0) { + const char* skill_name = sep->argplus[1]; + Skill* skill = master_skill_list.GetSkillByName(skill_name); + + if (skill) { + Player* player = 0; + Client* to_client = 0; + + if (client->GetPlayer()->GetTarget() && client->GetPlayer()->GetTarget()->IsPlayer()) { + player = (Player*)client->GetPlayer()->GetTarget(); + to_client = client->GetCurrentZone()->GetClientBySpawn(player); + } + else { + player = client->GetPlayer(); + to_client = client; + } + + if (player) + { + if (player->GetSkills()->HasSkill(skill->skill_id)) + { + player->RemoveSkillFromDB(skill, true); + if (client == to_client) { + client->Message(CHANNEL_STATUS, "Removed skill '%s'.", skill_name); + } + else { + client->Message(CHANNEL_STATUS, "Removed skill '%s' from player %s.", skill_name, player->GetName()); + to_client->Message(CHANNEL_STATUS, "%s has removed skill '%s' from you.", client->GetPlayer()->GetName(), skill_name); + } + } + else { + if (client == to_client) + client->Message(CHANNEL_STATUS, "You do not have the skill '%s'.", skill_name); + else + client->Message(CHANNEL_STATUS, "Player '%s' does not have the skill '%s'.", player->GetName(), skill_name); + } + } + } + else + client->Message(CHANNEL_STATUS, "The skill '%s' does not exist.", skill_name); + } + else if (strcmp(sep->arg[0], "set") == 0) { + if (!sep->IsNumber(2)) { + client->Message(CHANNEL_STATUS, "The last parameter must be a number."); + return; + } + + const char* skill_name = sep->arg[1]; + Skill* skill = master_skill_list.GetSkillByName(skill_name); + if (skill) { + int16 val = atoi(sep->arg[2]); + Player* player = 0; + Client* to_client = 0; + + if (client->GetPlayer()->GetTarget() && client->GetPlayer()->GetTarget()->IsPlayer()) { + player = (Player*)client->GetPlayer()->GetTarget(); + to_client = client->GetCurrentZone()->GetClientBySpawn(player); + } + else { + player = client->GetPlayer(); + to_client = client; + } + + if (player) + { + if (player->GetSkills()->HasSkill(skill->skill_id)) { + player->GetSkills()->SetSkill(skill->skill_id, val); + if (client != to_client) + client->Message(CHANNEL_STATUS, "You set %s's '%s' skill to %i.", player->GetName(), skill_name, val); + + to_client->Message(CHANNEL_STATUS, "Your '%s' skill has been set to %i.", skill_name, val); + } + else { + client->Message(CHANNEL_STATUS, "Target does not have the skill '%s'.", skill_name); + } + } + } + else { + client->Message(CHANNEL_STATUS, "The skill '%s' does not exist.", skill_name); + } + } + else { + client->SimpleMessage(CHANNEL_STATUS, "Usage: /modify skill [action] [skill]"); + client->SimpleMessage(CHANNEL_STATUS, "Actions: add, remove, set"); + client->SimpleMessage(CHANNEL_STATUS, "Example: /modify skill add parry"); + } + } + else { + client->SimpleMessage(CHANNEL_STATUS, "Usage: /modify skill [action] [skill]"); + client->SimpleMessage(CHANNEL_STATUS, "Actions: add, remove, set"); + client->SimpleMessage(CHANNEL_STATUS, "Example: /modify skill add parry"); + } +} + + +void Commands::Command_ModifySpell(Client* client, Seperator* sep) +{ + PrintSep(sep, "COMMAND_MODIFY"); + + // need at least 2 args for a valid command + if( sep && sep->arg[1] ) + { + } + else + Command_Modify(client); +} + + +void Commands::Command_ModifyZone(Client* client, Seperator* sep) +{ + PrintSep(sep, "COMMAND_MODIFY"); + + // need at least 2 args for a valid command + if( sep && sep->arg[1] ) + { + } + else + Command_Modify(client); +} + + +/* + Function: Command_MOTD() + Purpose : Displays server MOTD + Params : + Dev : LethalEncounter + Example : /motd +*/ +void Commands::Command_MOTD(Client* client) +{ + if (client) + ClientPacketFunctions::SendMOTD(client); +} + +/* + Function: Command_Pet() + Purpose : Handle Pet {Command} commands + Params : attack, backoff, preserve_master, preserve_self, follow, stay, getlost + Dev : + Example : /pet preserve_master +*/ +void Commands::Command_Pet(Client* client, Seperator* sep) +{ + PrintSep(sep, "COMMAND_PET"); + //LogWrite(MISC__TODO, 1, "Command", "TODO-Command: Pet Commands"); + //client->Message(CHANNEL_COLOR_YELLOW, "Pets are not yet implemented."); + + if (strcmp(sep->arg[0], "hide") == 0) { + // doing /pet hide will toggle the hide status on all the pets that can be hidden + Entity* pet = client->GetPlayer()->GetDeityPet(); + if (pet) { + if (pet->IsPrivateSpawn()) + client->GetPlayer()->HideDeityPet(false); + else + client->GetPlayer()->HideDeityPet(true); + } + + pet = client->GetPlayer()->GetCosmeticPet(); + if (pet) { + if (pet->IsPrivateSpawn()) + client->GetPlayer()->HideCosmeticPet(false); + else + client->GetPlayer()->HideCosmeticPet(true); + } + + return; + } + + // below is for all combat pets + if (!client->GetPlayer()->HasPet()) { + client->Message(CHANNEL_COLOR_YELLOW, "You do not have a pet."); + return; + } + + if (strcmp(sep->arg[0], "stay") == 0) { + client->Message(CHANNEL_COLOR_YELLOW, "You command your pet to stay."); + client->GetPlayer()->GetInfoStruct()->pet_movement = 1; + client->GetPlayer()->SetCharSheetChanged(true); + if (client->GetPlayer()->GetPet()) + client->GetPlayer()->GetPet()->following = false; + if (client->GetPlayer()->GetCharmedPet()) + client->GetPlayer()->GetCharmedPet()->following = false; + } + else if (strcmp(sep->arg[0], "follow") == 0) { + client->Message(CHANNEL_COLOR_YELLOW, "You command your pet to follow."); + client->GetPlayer()->GetInfoStruct()->pet_movement = 2; + client->GetPlayer()->SetCharSheetChanged(true); + } + else if (strcmp(sep->arg[0], "preserve_master") == 0) { + if (client->GetPlayer()->GetInfoStruct()->pet_behavior & 1) { + client->Message(CHANNEL_COLOR_YELLOW, "Your pet will no longer protect you."); + client->GetPlayer()->GetInfoStruct()->pet_behavior -= 1; + } + else { + client->Message(CHANNEL_COLOR_YELLOW, "You command your pet to protect you."); + client->GetPlayer()->GetInfoStruct()->pet_behavior += 1; + } + client->GetPlayer()->SetCharSheetChanged(true); + } + else if (strcmp(sep->arg[0], "preserve_self") == 0) { + if (client->GetPlayer()->GetInfoStruct()->pet_behavior & 2) { + client->Message(CHANNEL_COLOR_YELLOW, "Your pet will no longer protect itself."); + client->GetPlayer()->GetInfoStruct()->pet_behavior -= 2; + } + else { + client->Message(CHANNEL_COLOR_YELLOW, "You command your pet to protect itself."); + client->GetPlayer()->GetInfoStruct()->pet_behavior += 2; + } + client->GetPlayer()->SetCharSheetChanged(true); + } + else if (strcmp(sep->arg[0], "backoff") == 0) { + client->Message(CHANNEL_COLOR_YELLOW, "You command your pet to back down."); + if (client->GetPlayer()->GetPet()) + ((NPC*)client->GetPlayer()->GetPet())->Brain()->ClearHate(); + if (client->GetPlayer()->GetCharmedPet()) + ((NPC*)client->GetPlayer()->GetCharmedPet())->Brain()->ClearHate(); + client->GetPlayer()->GetInfoStruct()->pet_behavior = 0; + client->GetPlayer()->SetCharSheetChanged(true); + } + else if (strcmp(sep->arg[0], "attack") == 0) { + if (client->GetPlayer()->HasTarget() && client->GetPlayer()->GetTarget()->IsEntity()) { + if (client->GetPlayer()->AttackAllowed((Entity*)client->GetPlayer()->GetTarget())){ + client->Message(CHANNEL_COLOR_YELLOW, "You command your pet to attack your target."); + if (client->GetPlayer()->GetPet()) + client->GetPlayer()->GetPet()->AddHate((Entity*)client->GetPlayer()->GetTarget(), 1); + if (client->GetPlayer()->GetCharmedPet()) + client->GetPlayer()->GetCharmedPet()->AddHate((Entity*)client->GetPlayer()->GetTarget(), 1); + } + else + client->Message(CHANNEL_COLOR_YELLOW, "You can not attack that."); + } + else + client->Message(CHANNEL_COLOR_YELLOW, "You do not have a target."); + + } + else if (strcmp(sep->arg[0], "getlost") == 0) { + client->GetPlayer()->DismissPet((NPC*)client->GetPlayer()->GetPet()); + client->GetPlayer()->DismissPet((NPC*)client->GetPlayer()->GetCharmedPet()); + + client->Message(CHANNEL_COLOR_YELLOW, "You tell your pet to get lost."); + } + else + client->Message(CHANNEL_COLOR_YELLOW, "Unknown pet command."); + +} + +/* + Function: Command_PetName() + Purpose : Pet your name (???) + Params : + Dev : + Example : +*/ +void Commands::Command_PetName(Client* client, Seperator* sep) +{ + PrintSep(sep, "COMMAND_PETNAME"); + LogWrite(MISC__TODO, 1, "Command", "TODO-Command: Pet Name Command"); + client->Message(CHANNEL_COLOR_YELLOW, "Pets are not yet implemented."); +} + +/* + Function: Command_NamePet() + Purpose : Name your pet + Params : + Dev : + Example : +*/ +void Commands::Command_NamePet(Client* client, Seperator* sep) +{ + PrintSep(sep, "COMMAND_NAME_PET"); + LogWrite(MISC__TODO, 1, "Command", "TODO-Command: Name Pet Command"); + client->Message(CHANNEL_COLOR_YELLOW, "Pets are not yet implemented."); +} + +/* + Function: Command_Rename() + Purpose : Renames existing pet + Params : + Dev : + Example : +*/ +void Commands::Command_Rename(Client* client, Seperator* sep) +{ + PrintSep(sep, "COMMAND_RENAME"); + LogWrite(MISC__TODO, 1, "Command", "TODO-Command: Rename Pet Command"); + client->Message(CHANNEL_COLOR_YELLOW, "Pets are not yet implemented."); +} + +/* + Function: Command_ConfirmRename() + Purpose : Confirms renaming your pet + Params : + Dev : + Example : +*/ +void Commands::Command_ConfirmRename(Client* client, Seperator* sep) +{ + PrintSep(sep, "COMMAND_CONFIRMRENAME"); + LogWrite(MISC__TODO, 1, "Command", "TODO-Command: Confirm Rename Pet Command"); + client->Message(CHANNEL_COLOR_YELLOW, "Pets are not yet implemented."); +} + +/* + Function: Command_PetOptions() + Purpose : Sets various pet options + Params : + Dev : + Example : +*/ +void Commands::Command_PetOptions(Client* client, Seperator* sep) +{ + PrintSep(sep, "COMMAND_PETOPTIONS"); + + Player* player = client->GetPlayer(); + Spawn* target = player->GetTarget(); + if (!target) + return; + + if (target == player->GetPet()) + client->SendPetOptionsWindow(player->GetPet()->GetName()); + else if (target == player->GetCharmedPet()) + client->SendPetOptionsWindow(player->GetCharmedPet()->GetName()); + else if (target == player->GetCosmeticPet()) + client->SendPetOptionsWindow(player->GetCosmeticPet()->GetName(), 0); + else if (target == player->GetDeityPet()) + client->SendPetOptionsWindow(player->GetDeityPet()->GetName(), 0); +} + +/* + Function: Command_Random() + Purpose : Handles /random dice roll in-game + Params : 1-100 + Dev : Scatman + Example : /randon 1 100 +*/ +void Commands::Command_Random(Client* client, Seperator* sep) +{ + char message[256] = {0}; + + if (sep) + { + if (sep->GetArgNumber() == 0 && sep->IsNumber(0)) + sprintf(message, "Random: %s rolls 1 to %i on the magic dice...and scores a %i!", client->GetPlayer()->GetName(), atoi(sep->arg[0]), MakeRandomInt(1, atoi(sep->arg[0]))); + else if (sep->GetArgNumber() > 0 && sep->IsNumber(0) && sep->IsNumber(1)) + sprintf(message, "Random: %s rolls from %i to %i on the magic dice...and scores a %i!", client->GetPlayer()->GetName(), atoi(sep->arg[0]), atoi(sep->arg[1]), MakeRandomInt(atoi(sep->arg[0]), atoi(sep->arg[1]))); + else + sprintf(message, "Random: %s rolls from 1 to 100 on the magic dice...and scores a %i!", client->GetPlayer()->GetName(), MakeRandomInt(1, 100)); + } + else + sprintf(message, "Random: %s rolls from 1 to 100 on the magic dice...and scores a %i!", client->GetPlayer()->GetName(), MakeRandomInt(1, 100)); + + client->GetPlayer()->GetZone()->HandleChatMessage(0, 0, CHANNEL_EMOTE, message); +} + +/* + Function: Command_Randomize() + Purpose : Sets randomize (appearance) values for NPCs + Params : Attrib Name + Dev : Scatman + Example : /randomize gender 1 -- will randomize the NPCs gender (male/female) +*/ +void Commands::Command_Randomize(Client* client, Seperator* sep) +{ + NPC* target = (NPC*)client->GetPlayer()->GetTarget(); + if (target) + { + if (target->IsNPC()) + { + if (sep && sep->arg[0] && !sep->IsNumber(0)) + { + const char* value = sep->arg[0]; + if (strncasecmp(value, "show", strlen(value)) == 0) + { + client->DisplayRandomizeFeatures(target->GetRandomize()); + } + else + { + if (sep->arg[1] && sep->IsNumber(1)) + { + int8 option = atoi(sep->arg[1]); + if (option == 0 || option == 1) + { + int32 feature = 0; + char feature_text[32] = {0}; + if (strncasecmp(value, "gender", strlen(value)) == 0) { + feature = RANDOMIZE_GENDER; + strncpy(feature_text, "gender", sizeof(feature_text) - 1); + } + else if (strncasecmp(value, "race", strlen(value)) == 0) { + feature = RANDOMIZE_RACE; + strncpy(feature_text, "race", sizeof(feature_text) - 1); + } + else if (strncasecmp(value, "model", strlen(value)) == 0) { + feature = RANDOMIZE_MODEL_TYPE; + strncpy(feature_text, "model", sizeof(feature_text) - 1); + } + else if (strncasecmp(value, "facial_hair", strlen(value)) == 0) { + feature = RANDOMIZE_FACIAL_HAIR_TYPE; + strncpy(feature_text, "facial hair", sizeof(feature_text) - 1); + } + else if (strncasecmp(value, "hair", strlen(value)) == 0) { + feature = RANDOMIZE_HAIR_TYPE; + strncpy(feature_text, "hair", sizeof(feature_text) - 1); + } + else if (strncasecmp(value, "wing", strlen(value)) == 0) { + feature = RANDOMIZE_WING_TYPE; + strncpy(feature_text, "wings", sizeof(feature_text) - 1); + } + else if (strncasecmp(value, "cheek", strlen(value)) == 0) { + feature = RANDOMIZE_CHEEK_TYPE; + strncpy(feature_text, "cheeks", sizeof(feature_text) - 1); + } + else if (strncasecmp(value, "chin", strlen(value)) == 0) { + feature = RANDOMIZE_CHIN_TYPE; + strncpy(feature_text, "chin", sizeof(feature_text) - 1); + } + else if (strncasecmp(value, "ear", strlen(value)) == 0) { + feature = RANDOMIZE_EAR_TYPE; + strncpy(feature_text, "ears", sizeof(feature_text) - 1); + } + else if (strncasecmp(value, "eye_brow", strlen(value)) == 0) { + feature = RANDOMIZE_EYE_BROW_TYPE; + strncpy(feature_text, "eye brows", sizeof(feature_text) - 1); + } + else if (strncasecmp(value, "eye", strlen(value)) == 0) { + feature = RANDOMIZE_EYE_TYPE; + strncpy(feature_text, "eyes", sizeof(feature_text) - 1); + } + else if (strncasecmp(value, "lip", strlen(value)) == 0) { + feature = RANDOMIZE_LIP_TYPE; + strncpy(feature_text, "lips", sizeof(feature_text) - 1); + } + else if (strncasecmp(value, "nose", strlen(value)) == 0) { + feature = RANDOMIZE_NOSE_TYPE; + strncpy(feature_text, "nose", sizeof(feature_text) - 1); + } + else if (strncasecmp(value, "eye_color", strlen(value)) == 0) { + feature = RANDOMIZE_EYE_COLOR; + strncpy(feature_text, "eye color", sizeof(feature_text) - 1); + } + else if (strncasecmp(value, "hair_color", strlen(value)) == 0) { + feature = RANDOMIZE_HAIR_TYPE_COLOR; + strncpy(feature_text, "hair color", sizeof(feature_text) - 1); + } + else if (strncasecmp(value, "hair_color1", strlen(value)) == 0) { + feature = RANDOMIZE_HAIR_COLOR1; + strncpy(feature_text, "hair color1", sizeof(feature_text) - 1); + } + else if (strncasecmp(value, "hair_color2", strlen(value)) == 0) { + feature = RANDOMIZE_HAIR_COLOR2; + strncpy(feature_text, "hair color2", sizeof(feature_text) - 1); + } + else if (strncasecmp(value, "hair_highlight", strlen(value)) == 0) { + feature = RANDOMIZE_HAIR_HIGHLIGHT; + strncpy(feature_text, "hair highlights", sizeof(feature_text) - 1); + } + else if (strncasecmp(value, "facial_hair_color", strlen(value)) == 0) { + feature = RANDOMIZE_HAIR_FACE_COLOR; + strncpy(feature_text, "facial hair color", sizeof(feature_text) - 1); + } + else if (strncasecmp(value, "facial_hair_color_highlight", strlen(value)) == 0) { + feature = RANDOMIZE_HAIR_FACE_HIGHLIGHT_COLOR; + strncpy(feature_text, "facial hair color highlights", sizeof(feature_text) - 1); + } + else if (strncasecmp(value, "hair_color_highlight", strlen(value)) == 0) { + feature = RANDOMIZE_HAIR_TYPE_HIGHLIGHT_COLOR; + strncpy(feature_text, "hair color highlights", sizeof(feature_text) - 1); + } + else if (strncasecmp(value, "skin_color", strlen(value)) == 0) { + feature = RANDOMIZE_SKIN_COLOR; + strncpy(feature_text, "skin color", sizeof(feature_text) - 1); + } + else if (strncasecmp(value, "wing_color1", strlen(value)) == 0) { + feature = RANDOMIZE_WING_COLOR1; + strncpy(feature_text, "wing color1", sizeof(feature_text) - 1); + } + else if (strncasecmp(value, "wing_color2", strlen(value)) == 0) { + feature = RANDOMIZE_WING_COLOR2; + strncpy(feature_text, "wing color2", sizeof(feature_text) - 1); + } + else { + client->Message(CHANNEL_COLOR_YELLOW, "'%s' is not a valid feature to randomize.", value); + client->SimpleMessage(CHANNEL_COLOR_YELLOW, "Valid features are: 'gender', 'race', 'model', 'hair', 'facial_hair', 'legs', 'wings', 'cheek', 'chin', 'ear', 'eye', 'eye_brow', 'lip', 'nose', 'eye_color', 'hair_color1', 'hair_color2', 'hair_highlight', 'facial_hair_color', 'facial_hair_color_highlight', 'hair_color', 'hair_color_highlight', 'skin_color', 'wing_color1', 'wing_color2'."); + } + + if (feature > 0) { + if (option == 1) { + if (target->GetRandomize() & feature) + client->Message(CHANNEL_COLOR_YELLOW, "'%s' is already set to randomly generate their %s.", target->GetName(), feature_text); + else { + target->AddRandomize(feature); + ((NPC*)client->GetCurrentZone()->GetSpawn(target->GetDatabaseID()))->AddRandomize(feature); + database.UpdateRandomize(target->GetDatabaseID(), feature); + client->Message(CHANNEL_COLOR_YELLOW, "'%s' will now generate their %s randomly.", target->GetName(), feature_text); + } + } + else { + if (target->GetRandomize() & feature) { + target->AddRandomize(-feature); + ((NPC*)client->GetCurrentZone()->GetSpawn(target->GetDatabaseID()))->AddRandomize(-feature); + database.UpdateRandomize(target->GetDatabaseID(), -feature); + client->Message(CHANNEL_COLOR_YELLOW, "'%s' will no longer generate their %s randomly.", target->GetName(), feature_text); + } + else + client->Message(CHANNEL_COLOR_YELLOW, "'%s' already does not randomly generate their %s.", target->GetName(), feature_text); + } + } + } + else + client->SimpleMessage(CHANNEL_COLOR_YELLOW, "You must specify either a 1(on) or 0(off) as the second parameter."); + } + else + client->SimpleMessage(CHANNEL_COLOR_YELLOW, "You must specify either a 1(on) or 0(off) as the second parameter."); + } + } + else { + client->SimpleMessage(CHANNEL_COLOR_YELLOW, "Usage: /randomize [show | [feature [1|0]]"); + client->SimpleMessage(CHANNEL_COLOR_YELLOW, "'show' will display current configured features"); + client->SimpleMessage(CHANNEL_COLOR_YELLOW, "Valid features are: 'gender', 'race', 'model', 'hair', 'facial_hair', 'legs', 'wings', 'cheek', 'chin', 'ear', 'eye', 'eye_brow', 'lip', 'nose', 'eye_color', 'hair_color1', 'hair_color2', 'hair_highlight', 'facial_hair_color', 'facial_hair_color_highlight', 'hair_color', 'hair_color_highlight', 'skin_color', 'wing_color1', 'wing_color2'."); + } + } + else + client->SimpleMessage(CHANNEL_COLOR_YELLOW, "The target you wish to randomize must be an NPC."); + } + else + client->SimpleMessage(CHANNEL_COLOR_YELLOW, "You must select the target you wish to randomize."); +} + +/* + Function: Command_ShowCloak() + Purpose : Character Settings combo box for Show Cloak + Params : true/false + Dev : John Adams + Example : +*/ +void Commands::Command_ShowCloak(Client* client, Seperator* sep) +{ + Player* player = client->GetPlayer(); + + if (sep && sep->arg[0]) + { + const char* value = sep->arg[0]; + if (strncasecmp(value, "true", strlen(value)) == 0) + { + player->set_character_flag(CF_SHOW_CLOAK); + player->reset_character_flag(CF2_SHOW_RANGED); + } + else if (strncasecmp(value, "false", strlen(value)) == 0) + player->reset_character_flag(CF_SHOW_CLOAK); + else + { + client->Message(CHANNEL_COLOR_YELLOW, "Not supposed to be here! Please /bug this: Error in %s (%u)", __FUNCTION__, __LINE__); + LogWrite(COMMAND__WARNING, 0, "Command", "Not supposed to be here! Please /bug this: Error in %s (%u)", __FUNCTION__, __LINE__); + } + } +} + +/* + Function: Command_ShowHelm() + Purpose : Character Settings combo box for Show Helm + Params : true/false + Dev : John Adams + Example : +*/ +void Commands::Command_ShowHelm(Client* client, Seperator* sep) +{ + Player* player = client->GetPlayer(); + + if (sep && sep->arg[0]) + { + const char* value = sep->arg[0]; + if (strncasecmp(value, "true", strlen(value)) == 0) + { + player->reset_character_flag(CF_HIDE_HELM); + player->set_character_flag(CF_HIDE_HOOD); + } + else if (strncasecmp(value, "false", strlen(value)) == 0) + player->set_character_flag(CF_HIDE_HELM); + else + { + client->Message(CHANNEL_COLOR_YELLOW, "Not supposed to be here! Please /bug this: Error in %s (%u)", __FUNCTION__, __LINE__); + LogWrite(COMMAND__WARNING, 0, "Command", "Not supposed to be here! Please /bug this: Error in %s (%u)", __FUNCTION__, __LINE__); + } + } +} + +/* + Function: Command_ShowHood() + Purpose : Character Settings combo box for Show Hood + Params : true/false + Dev : John Adams + Example : +*/ +void Commands::Command_ShowHood(Client* client, Seperator* sep) +{ + Player* player = client->GetPlayer(); + + if (sep && sep->arg[0]) + { + const char* value = sep->arg[0]; + + if (strncasecmp(value, "true", strlen(value)) == 0) + { + player->reset_character_flag(CF_HIDE_HOOD); + player->set_character_flag(CF_HIDE_HELM); + } + else if (strncasecmp(value, "false", strlen(value)) == 0) + player->set_character_flag(CF_HIDE_HOOD); + else + { + client->Message(CHANNEL_COLOR_YELLOW, "Not supposed to be here! Please /bug this: Error in %s (%u)", __FUNCTION__, __LINE__); + LogWrite(COMMAND__WARNING, 0, "Command", "Not supposed to be here! Please /bug this: Error in %s (%u)", __FUNCTION__, __LINE__); + } + } +} + +/* + Function: Command_ShowHoodHelm() + Purpose : Character Settings combo box for Show Helm or Hood + Params : true/false + Dev : John Adams + Example : +*/ +void Commands::Command_ShowHoodHelm(Client* client, Seperator* sep) +{ + Player* player = client->GetPlayer(); + + if (sep && sep->arg[0]) + { + const char* value = sep->arg[0]; + if (strncasecmp(value, "true", strlen(value)) == 0) + { + player->reset_character_flag(CF_HIDE_HOOD); + player->reset_character_flag(CF_HIDE_HELM); + } + else if (strncasecmp(value, "false", strlen(value)) == 0) + { + // don't think we ever wind up in here... + player->set_character_flag(CF_HIDE_HOOD); + player->set_character_flag(CF_HIDE_HELM); + } + else + { + client->Message(CHANNEL_COLOR_YELLOW, "Not supposed to be here! Please /bug this: Error in %s (%u)", __FUNCTION__, __LINE__); + LogWrite(COMMAND__WARNING, 0, "Command", "Not supposed to be here! Please /bug this: Error in %s (%u)", __FUNCTION__, __LINE__); + } + } +} + +/* + Function: Command_ShowRanged() + Purpose : Character Settings combo box for Show Ranged weapon + Params : true/false + Dev : John Adams + Example : +*/ +void Commands::Command_ShowRanged(Client* client, Seperator* sep) +{ + Player* player = client->GetPlayer(); + + if (sep && sep->arg[0]) + { + const char* value = sep->arg[0]; + if (strncasecmp(value, "true", strlen(value)) == 0) + { + player->set_character_flag(CF2_SHOW_RANGED); + player->reset_character_flag(CF_SHOW_CLOAK); + } + else if (strncasecmp(value, "false", strlen(value)) == 0) + player->reset_character_flag(CF2_SHOW_RANGED); + else + { + client->Message(CHANNEL_COLOR_YELLOW, "Not supposed to be here! Please /bug this: Error in %s (%u)", __FUNCTION__, __LINE__); + LogWrite(COMMAND__WARNING, 0, "Command", "Not supposed to be here! Please /bug this: Error in %s (%u)", __FUNCTION__, __LINE__); + } + } +} + +/* + Function: + Purpose : + Params : + Dev : + Example : +*/ +void Commands::Command_Skills(Client* client, Seperator* sep, int handler) +{ + Player* player = 0; + Client* to_client = 0; + + if(client->GetPlayer()->GetTarget() && client->GetPlayer()->GetTarget()->IsPlayer()) + to_client = client->GetPlayer()->GetTarget()->GetZone()->GetClientBySpawn(client->GetPlayer()->GetTarget()); + + switch(handler) + { + case COMMAND_SKILL: + { + client->SimpleMessage(CHANNEL_COLOR_YELLOW, "Usage: /skill [add|remove|list] [skill name]"); + client->SimpleMessage(CHANNEL_COLOR_YELLOW, "Target player to add/remove skills for that player."); + break; + } + case COMMAND_SKILL_ADD: + { + if (sep && sep->arg[0]) + { + const char* skill_name = sep->argplus[0]; + Skill* skill = master_skill_list.GetSkillByName(skill_name); + + if (skill && to_client && !(client->GetPlayer() == to_client->GetPlayer())) // add skill to your target, if target is not you + { + player = to_client->GetPlayer(); + + if (player) + { + if (!player->GetSkills()->HasSkill(skill->skill_id)) + { + player->AddSkill(skill->skill_id, 1, player->GetLevel() * 5, true); + client->Message(CHANNEL_COLOR_YELLOW, "You gave skill '%s' to player '%s'.", skill_name, player->GetName()); + to_client->Message(CHANNEL_COLOR_YELLOW, "%s gave you skill '%s'.", client->GetPlayer()->GetName(), skill_name); + } + else + client->Message(CHANNEL_COLOR_YELLOW, "%s already has the skill '%s'.", player->GetName(), skill_name); + } + } + else if (skill) // add skill to yourself + { + player = client->GetPlayer(); + + if (player) + { + if (!player->GetSkills()->HasSkill(skill->skill_id)) + { + player->AddSkill(skill->skill_id, 1, player->GetLevel() * 5, true); + client->Message(CHANNEL_COLOR_YELLOW, "Added skill '%s'.", skill_name); + } + else + client->Message(CHANNEL_COLOR_YELLOW, "You already have the skill '%s'.", skill_name); + } + } + else + client->Message(CHANNEL_COLOR_YELLOW, "The skill '%s' does not exist.", skill_name); + } + else + { + client->SimpleMessage(CHANNEL_COLOR_YELLOW, "Usage: /skill add [skill name]"); + client->SimpleMessage(CHANNEL_COLOR_YELLOW, "Target player to give skill to that player."); + } + break; + } + case COMMAND_SKILL_REMOVE: + { + if (sep && sep->arg[0]) + { + const char* skill_name = sep->argplus[0]; + Skill* skill = master_skill_list.GetSkillByName(skill_name); + + if (skill && to_client && !(client->GetPlayer() == to_client->GetPlayer())) // remove skill from your target, if target is not you + { + player = to_client->GetPlayer(); + + if (player) + { + if (player->GetSkills()->HasSkill(skill->skill_id)) + { + player->RemoveSkillFromDB(skill, true); + client->Message(CHANNEL_COLOR_YELLOW, "Removed skill '%s' from player %s.", skill_name, player->GetName()); + to_client->Message(CHANNEL_COLOR_YELLOW, "%s has removed skill '%s' from you.", client->GetPlayer()->GetName(), skill_name); + } + else + client->Message(CHANNEL_COLOR_YELLOW, "Player '%s' does not have the skill '%s'.", player->GetName(), skill_name); + } + } + else if(skill) // remove skill from yourself + { + Player* player = client->GetPlayer(); + + if (player) + { + if (player->GetSkills()->HasSkill(skill->skill_id)) + { + player->RemoveSkillFromDB(skill, true); + client->Message(CHANNEL_COLOR_YELLOW, "Removed skill '%s'.", skill_name); + } + else + client->Message(CHANNEL_COLOR_YELLOW, "You do not have the skill '%s'.", skill_name); + } + } + else + client->Message(CHANNEL_COLOR_YELLOW, "The skill '%s' does not exist.", skill_name); + } + else + { + client->SimpleMessage(CHANNEL_COLOR_YELLOW, "Usage: /skill remove [skill name]"); + client->SimpleMessage(CHANNEL_COLOR_YELLOW, "Target player to give skill to that player."); + } + break; + } + case COMMAND_SKILL_LIST: + { + if (sep && sep->arg[0]) + { + const char* skill_name = sep->argplus[0]; + client->Message(CHANNEL_COLOR_YELLOW, "Listing skills like '%s':", skill_name); + map* skills = master_skill_list.GetAllSkills(); + map::iterator itr; + + if (skills && skills->size() > 0) + { + for (itr = skills->begin(); itr != skills->end(); itr++) + { + Skill* skill = itr->second; + string current_skill_name = ::ToLower(string(skill->name.data.c_str())); + + if (current_skill_name.find(::ToLower(string(skill_name))) < 0xFFFFFFFF) + client->Message(CHANNEL_COLOR_YELLOW, "%s (%u)", skill->name.data.c_str(), skill->skill_id); + } + } + } + else + client->SimpleMessage(CHANNEL_COLOR_YELLOW, "Usage: /skill list [skill name]"); + break; + } + } +} + +/* + Function: Command_SpawnTemplate() + Purpose : Create or Use defined Spawn Templates + Params : create, save, rempve, list + Dev : John Adams + Example : /spawn template create "Test" +*/ +void Commands::Command_SpawnTemplate(Client* client, Seperator* sep) +{ + if (sep == NULL || sep->arg[0] == NULL) + { + client->Message(CHANNEL_COLOR_YELLOW, "Examples:\n/spawn template save Test - saves a template of the targetted spawn as the name Test\n/spawn template list - shows a list of current templates\n/spawn template spawn [id|name] creates a new spawn based on template [id|name] at your current location."); + return; + } + + // got params, continue + const char * template_cmd = sep->arg[0]; + + if (strncasecmp(template_cmd, "list", strlen(template_cmd)) == 0) + { + if (!sep->IsSet(1)) + { + client->SimpleMessage(CHANNEL_COLOR_YELLOW,"Usage: /spawn template list [name|location_id]"); + client->SimpleMessage(CHANNEL_COLOR_YELLOW,"Examples:\n/spawn template list [name] - will show all templates containing [name].\n/spawn template list [location_id] - will show all templates that [location_id] is assigned to."); + return; + } + + map* template_names = 0; + if (sep->IsNumber(1)) + { + int32 location_id = 0; + location_id = atoi(sep->arg[1]); + template_names = database.GetSpawnTemplateListByID(location_id); + } + else + { + const char* name = 0; + name = sep->argplus[1]; + template_names = database.GetSpawnTemplateListByName(name); + } + + if(!template_names) + client->SimpleMessage(CHANNEL_COLOR_YELLOW, "No templates found."); + else + { + map::iterator itr; + client->SimpleMessage(CHANNEL_COLOR_YELLOW," ID Name: "); + for(itr = template_names->begin(); itr != template_names->end(); itr++) + client->Message(CHANNEL_COLOR_YELLOW,"%03lu %s", itr->first, itr->second.c_str()); + safe_delete(template_names); + } + } + + else if (strncasecmp(template_cmd, "save", strlen(template_cmd)) == 0) + { + NPC* target = (NPC*)client->GetPlayer()->GetTarget(); + if ( target && (target->IsNPC() || target->IsObject() || target->IsSign() || target->IsWidget() || target->IsGroundSpawn()) ) + { + if (sep && sep->arg[1][0] && !sep->IsNumber(1)) + { + // first, lookup to see if template name already exists + const char* name = 0; + name = sep->argplus[1]; + map* template_names = database.GetSpawnTemplateListByName(name); + if(!template_names) + { + int32 new_template_id = database.SaveSpawnTemplate(target->GetSpawnLocationID(), name); + if( new_template_id > 0 ) + client->Message(CHANNEL_COLOR_YELLOW, "Spawn template '%s' added for spawn '%s' (%u) as TemplateID: %u", name, target->GetName(), target->GetSpawnLocationID(), new_template_id); + else + client->Message(CHANNEL_COLOR_RED, "ERROR: Failed to add new template '%s' for spawn '%s' (%u).", name, target->GetName(), target->GetSpawnLocationID()); + } + else + client->Message(CHANNEL_COLOR_RED, "ERROR: Failed to add new template '%s' - Already exists!", name); + } + else + client->Message(CHANNEL_COLOR_RED, "ERROR: Saving a new spawn template requires a valid template name!"); + } + else + client->Message(CHANNEL_COLOR_RED, "ERROR: You must target the spawn you wish to save as a template!"); + } + + else if (strncasecmp(template_cmd, "remove", strlen(template_cmd)) == 0) + { + if (sep && sep->arg[1][0] && sep->IsNumber(1)) + { + int32 template_id = 0; + template_id = atoi(sep->arg[1]); + if (database.RemoveSpawnTemplate(template_id)) + client->Message(CHANNEL_COLOR_YELLOW, "Spawn template ID: %u successfully removed.", template_id); + else + client->Message(CHANNEL_COLOR_RED, "ERROR: Failed to remove spawn template ID: %u", template_id); + } + else + client->Message(CHANNEL_COLOR_RED, "ERROR: Removing a spawn template requires a valid template ID!"); + } + + // Renamed create to spawn + else if (strncasecmp(template_cmd, "spawn", strlen(template_cmd)) == 0) + { + if (sep && sep->arg[1][0]) + { + int32 new_location = 0; + + if (sep->IsNumber(1)) + { + int32 template_id = 0; + template_id = atoi(sep->arg[1]); + + new_location = database.CreateSpawnFromTemplateByID(client, template_id); + if( new_location > 0 ) + client->Message(CHANNEL_COLOR_YELLOW, "New spawn location %u created from template ID: %u", new_location, template_id); + else + client->Message(CHANNEL_COLOR_RED, "ERROR: Failed to spawn the new spawn location from template ID: %u", template_id); + } + else + { + const char* name = 0; + name = sep->argplus[1]; + + new_location = database.CreateSpawnFromTemplateByName(client, name); + if( new_location > 0 ) + client->Message(CHANNEL_COLOR_YELLOW, "New spawn location %u created from template: '%s'", new_location, name); + else + client->Message(CHANNEL_COLOR_RED, "ERROR: Failed to spawn the new spawn location from template: '%s'", name); + } + } + else + client->Message(CHANNEL_COLOR_RED, "ERROR: Spawning a new spawn location requires a valid template name or ID!"); + } + + else + client->Message(CHANNEL_COLOR_RED, "ERROR: Unknown /spawn template command."); +} + +void Commands::Command_Speed(Client* client, Seperator* sep) { + if(sep && sep->arg[0][0] && sep->IsNumber(0)){ + float new_speed = atof(sep->arg[0]); + client->GetPlayer()->SetSpeed(new_speed); + client->GetPlayer()->SetCharSheetChanged(true); + client->Message(CHANNEL_STATUS, "Setting speed to %.2f.", new_speed); + } + else{ + client->SimpleMessage(CHANNEL_COLOR_YELLOW, "Usage: /speed {new speed value}"); + } + +} + +/* + Function: Command_StationMarketPlace() + Purpose : just trying to eat the console spam for now + Params : + Dev : John +*/ +void Commands::Command_StationMarketPlace(Client* client, Seperator* sep) +{ + PrintSep(sep, "COMMAND_SMP"); + // This will reduce the spam from once every 10 sec to once every 30 sec, + // can't seem to reduce it any more get rid of it completely... + if (sep && strcmp(sep->arg[0], "gkw") == 0) { + PacketStruct* packet = configReader.getStruct("WS_MarketFundsUpdate", client->GetVersion()); + if (packet) { + packet->setDataByName("account_id", client->GetAccountID()); + packet->setDataByName("character_id", client->GetCharacterID()); + packet->setDataByName("unknown1", 1, 5); + packet->setDataByName("unknown1", 26, 6); + packet->setDataByName("unknown2", 0xFFFFFFFF); + packet->setDataByName("unknown3", 248, 1); + client->QueuePacket(packet->serialize()); + } + safe_delete(packet); + } +} + +/* + Function: Command_StopDrinking() + Purpose : Stops player from auto-consuming drink + Params : + Dev : Zcoretri + Example : /stopdrinking +*/ +void Commands::Command_StopDrinking(Client* client) +{ + client->GetPlayer()->reset_character_flag(CF_DRINK_AUTO_CONSUME); + client->Message(CHANNEL_COLOR_YELLOW,"You stop drinking your current drink."); +} + +/* + Function: Command_StopEating() + Purpose : Stops player from auto-consuming food + Params : + Dev : Zcoretri + Example : /stopeating +*/ +void Commands::Command_StopEating(Client* client) +{ + client->GetPlayer()->reset_character_flag(CF_FOOD_AUTO_CONSUME); + client->Message(CHANNEL_COLOR_YELLOW,"You stop eating your current food."); +} + +/* + Function: Command_Title() + Purpose : Help for /title command + Params : n/a + Dev : Zcoretri + Example : /title +*/ +void Commands::Command_Title(Client* client) +{ + client->Message(CHANNEL_COLOR_YELLOW, "Available subcommands: list, setprefix , setsuffix , fix"); +} + +/* + Function: Command_TitleList() + Purpose : List available titles for player + Params : n/a + Dev : Zcoretri + Example : /title list +*/ +void Commands::Command_TitleList(Client* client) +{ + list* titles = client->GetPlayer()->GetPlayerTitles()->GetAllTitles(); + list::iterator itr; + Title* title; + int16 i = 0; + + client->Message(CHANNEL_COLOR_WHITE, "Listing available titles:"); + for(itr = titles->begin(); itr != titles->end(); itr++) + { + title = *itr; + client->Message(CHANNEL_COLOR_WHITE, "%i: type=[%s] title=[%s]", i, title->GetPrefix() ? "Prefix":"Suffix", title->GetName()); + i++; + } + +} + +/* + Function: Command_TitleSetPrefix() + Purpose : Set Prefix title for player + Params : Title ID + Dev : Zcoretri + Example : /title setprefix 1 +*/ +void Commands::Command_TitleSetPrefix(Client* client, Seperator* sep) +{ + if (sep && sep->arg[0] && sep->IsNumber(0)) + { + int32 index = atoul(sep->arg[0]); + + database.SaveCharPrefixIndex(index, client->GetCharacterID(), client); + client->SendTitleUpdate(); + } +} + +/* + Function: Command_TitleSetSuffix() + Purpose : Set Suffix title for player + Params : Title ID + Dev : Zcoretri + Example : /title setsuffix 1 +*/ +void Commands::Command_TitleSetSuffix(Client* client, Seperator* sep) +{ + if (sep && sep->arg[0] && sep->IsNumber(0)) + { + int32 index = atoul(sep->arg[0]); + + database.SaveCharSuffixIndex(index, client->GetCharacterID(), client); + client->SendTitleUpdate(); + } +} + +/* + Function: Command_TitleFix() + Purpose : Fix title for player (???) + Params : + Dev : Zcoretri + Example : +*/ +void Commands::Command_TitleFix(Client* client, Seperator* sep) +{ + PrintSep(sep, "COMMAND_TITLE_FIX"); + LogWrite(MISC__TODO, 1, "Titles", "TODO-Command: TITLE_FIX"); +} + + +/* + Function: Command_Toggle_Anonymous() + Purpose : Toggles player Anonymous + Params : + Dev : paulgh + Example : /anon +*/ +void Commands::Command_Toggle_Anonymous(Client* client) +{ + Player* player = client->GetPlayer(); + + player->toggle_character_flag(CF_ANONYMOUS); + client->Message(CHANNEL_COLOR_YELLOW,"You are %s anonymous.", player->get_character_flag(CF_ANONYMOUS)?"now":"no longer"); + + if (player->get_character_flag(CF_ANONYMOUS)) + player->SetActivityStatus(player->GetActivityStatus() + ACTIVITY_STATUS_ANONYMOUS); + else + player->SetActivityStatus(player->GetActivityStatus() - ACTIVITY_STATUS_ANONYMOUS); +} + +/* + Function: Command_Toggle_AutoConsume() + Purpose : Toggles player food/drink auto consume + Params : unknown + Dev : paulgh + Example : /set_auto_consume +*/ +void Commands::Command_Toggle_AutoConsume(Client* client, Seperator* sep) +{ + Player* player = client->GetPlayer(); + + if (sep && sep->arg[0]) + PrintSep(sep, "COMMAND_SET_AUTO_CONSUME"); + if (sep && sep->arg[0] && sep->IsNumber(0)) + { + int8 slot = atoi(sep->arg[0]); + int8 flag = atoi(sep->arg[1]); + if (slot == EQ2_FOOD_SLOT) + { + player->toggle_character_flag(CF_FOOD_AUTO_CONSUME); + player->SetCharSheetChanged(true); + client->QueuePacket(player->GetEquipmentList()->serialize(client->GetVersion(), player)); + if (flag == 1) + client->Message(CHANNEL_COLOR_WHITE, "You decide to eat immediately whenever you become hungry."); + else + client->Message(CHANNEL_COLOR_WHITE, "You decide to ignore the hunger."); + } + else + { + player->toggle_character_flag(CF_DRINK_AUTO_CONSUME); + player->SetCharSheetChanged(true); + client->QueuePacket(player->GetEquipmentList()->serialize(client->GetVersion(), player)); + if (flag == 1) + client->Message(CHANNEL_COLOR_WHITE, "You decide to drink immediately whenever you become thirsty."); + else + client->Message(CHANNEL_COLOR_WHITE, "You decide to ignore the thirst."); + } + } +} + +/* + Function: Command_Toggle_BonusXP() + Purpose : Toggles player Bonus XP + Params : + Dev : John Adams + Example : /disable_char_bonus_exp +*/ +void Commands::Command_Toggle_BonusXP(Client* client) +{ + Player* player = client->GetPlayer(); + + player->toggle_character_flag(CF2_CHARACTER_BONUS_EXPERIENCE_ENABLED); + player->SetCharSheetChanged(true); +} + +/* + Function: Command_Toggle_CombatXP() + Purpose : Toggles player Adventure XP + Params : + Dev : John Adams + Example : /disable_combat_exp +*/ +void Commands::Command_Toggle_CombatXP(Client* client) +{ + Player* player = client->GetPlayer(); + + player->toggle_character_flag(CF_COMBAT_EXPERIENCE_ENABLED); + player->SetCharSheetChanged(true); +} + +/* + Function: Command_Toggle_GMHide() + Purpose : Toggles hiding player GM status + Params : + Dev : Scatman + Example : /gm_hide +*/ +void Commands::Command_Toggle_GMHide(Client* client) +{ + Player* player = client->GetPlayer(); + + player->toggle_character_flag(CF_HIDE_STATUS); + client->Message(CHANNEL_COLOR_YELLOW,"You are %s hiding your GM status.", player->get_character_flag(CF_HIDE_STATUS)?"now":"no longer"); +} + +/* + Function: Command_Toggle_GMVanish() + Purpose : Toggles hiding GM players from /who searches + Params : + Dev : Scatman + Example : /gm_vanish +*/ +void Commands::Command_Toggle_GMVanish(Client* client) +{ + Player* player = client->GetPlayer(); + + player->toggle_character_flag(CF_GM_HIDDEN); + client->Message(CHANNEL_COLOR_YELLOW,"You are %s invisible to who queries.", player->get_character_flag(CF_GM_HIDDEN)?"now":"no longer"); +} + +/* + Function: Command_Toggle_Illusions() + Purpose : Toggles player illusion form + Params : not sure sep is needed, testing + Dev : paulgh + Example : /hide_illusions +*/ +void Commands::Command_Toggle_Illusions(Client* client, Seperator* sep) +{ + if (sep && sep->arg[0]) + PrintSep(sep, "COMMAND_TOGGLE_ILLUSIONS"); + client->GetPlayer()->toggle_character_flag(CF_SHOW_ILLUSION); +} + +/* + Function: Command_Toggle_LFG() + Purpose : Toggles player LFG Flag + Params : + Dev : paulgh + Example : /lfg +*/ +void Commands::Command_Toggle_LFG(Client* client) +{ + Player* player = client->GetPlayer(); + + player->toggle_character_flag(CF_LFG); + client->Message(CHANNEL_COLOR_YELLOW,"You are %s LFG.", player->get_character_flag(CF_LFG)?"now":"no longer"); + + if (player->get_character_flag(CF_LFG)) + player->SetActivityStatus(player->GetActivityStatus() + ACTIVITY_STATUS_LFG); + else + player->SetActivityStatus(player->GetActivityStatus() - ACTIVITY_STATUS_LFG); +} + +/* + Function: Command_Toggle_LFW() + Purpose : Toggles player LFW Flag + Params : + Dev : paulgh + Example : /lfw +*/ +void Commands::Command_Toggle_LFW(Client* client) +{ + Player* player = client->GetPlayer(); + + player->toggle_character_flag(CF_LFW); + client->Message(CHANNEL_COLOR_YELLOW,"You %s looking for work.", player->get_character_flag(CF_LFW)?"let others know you are":"stop"); + + if (player->get_character_flag(CF_LFW)) + player->SetActivityStatus(player->GetActivityStatus() + ACTIVITY_STATUS_LFW); + else + player->SetActivityStatus(player->GetActivityStatus() - ACTIVITY_STATUS_LFW); +} + +/* + Function: Command_Toggle_QuestXP() + Purpose : Toggles player Quest XP + Params : + Dev : John Adams + Example : /disable_quest_exp +*/ +void Commands::Command_Toggle_QuestXP(Client* client) +{ + Player* player = client->GetPlayer(); + + player->toggle_character_flag(CF_QUEST_EXPERIENCE_ENABLED); + player->SetCharSheetChanged(true); +} + +/* + Function: Command_Toggle_Roleplaying() + Purpose : Toggles player Roleplaying flag + Params : + Dev : paulgh + Example : /role +*/ +void Commands::Command_Toggle_Roleplaying(Client* client) +{ + Player* player = client->GetPlayer(); + + player->toggle_character_flag(CF_ROLEPLAYING); + client->Message(CHANNEL_COLOR_YELLOW,"You are %s roleplaying.", player->get_character_flag(CF_ROLEPLAYING)?"now":"no longer"); + + if (player->get_character_flag(CF_ROLEPLAYING)) + player->SetActivityStatus(player->GetActivityStatus() + ACTIVITY_STATUS_ROLEPLAYING); + else + player->SetActivityStatus(player->GetActivityStatus() - ACTIVITY_STATUS_ROLEPLAYING); +} + +void Commands::Command_Toggle_Duels(Client* client) +{ + Player* player = client->GetPlayer(); + + player->toggle_character_flag(CF_ALLOW_DUEL_INVITES); + client->Message(CHANNEL_COLOR_YELLOW,"You are %s accepting duel invites.", player->get_character_flag(CF_ALLOW_DUEL_INVITES)?"now":"no longer"); +} + +void Commands::Command_Toggle_Trades(Client* client) +{ + Player* player = client->GetPlayer(); + + player->toggle_character_flag(CF_ALLOW_TRADE_INVITES); + client->Message(CHANNEL_COLOR_YELLOW,"You are %s accepting trade invites.", player->get_character_flag(CF_ALLOW_TRADE_INVITES)?"now":"no longer"); +} + +void Commands::Command_Toggle_Guilds(Client* client) +{ + Player* player = client->GetPlayer(); + + player->toggle_character_flag(CF_ALLOW_GUILD_INVITES); + client->Message(CHANNEL_COLOR_YELLOW,"You are %s accepting guild invites.", player->get_character_flag(CF_ALLOW_GUILD_INVITES)?"now":"no longer"); +} + +void Commands::Command_Toggle_Groups(Client* client) +{ + Player* player = client->GetPlayer(); + + player->toggle_character_flag(CF_ALLOW_GROUP_INVITES); + client->Message(CHANNEL_COLOR_YELLOW,"You are %s accepting group invites.", player->get_character_flag(CF_ALLOW_GROUP_INVITES)?"now":"no longer"); +} + +void Commands::Command_Toggle_Raids(Client* client) +{ + Player* player = client->GetPlayer(); + + player->toggle_character_flag(CF_ALLOW_RAID_INVITES); + client->Message(CHANNEL_COLOR_YELLOW,"You are %s accepting raid invites.", player->get_character_flag(CF_ALLOW_RAID_INVITES)?"now":"no longer"); +} + +void Commands::Command_Toggle_LON(Client* client) +{ + Player* player = client->GetPlayer(); + + player->toggle_character_flag(CF2_ALLOW_LON_INVITES); + client->Message(CHANNEL_COLOR_YELLOW,"You are %s accepting LoN invites.", player->get_character_flag(CF2_ALLOW_LON_INVITES)?"now":"no longer"); +} + +void Commands::Command_Toggle_VoiceChat(Client* client) +{ + Player* player = client->GetPlayer(); + + player->toggle_character_flag(CF2_ALLOW_VOICE_INVITES); + client->Message(CHANNEL_COLOR_YELLOW,"You are %s accepting voice chat invites.", player->get_character_flag(CF2_ALLOW_VOICE_INVITES)?"now":"no longer"); +} + +/* + Function: Command_TradeStart() + Purpose : Starts item/coin trade between players + Params : + Dev : + Example : +*/ +#include "../Trade.h" +void Commands::Command_TradeStart(Client* client, Seperator* sep) +{ + PrintSep(sep, "COMMAND_START_TRADE"); + + Entity* trader = client->GetPlayer(); + Entity* trader2 = 0; + if (sep && sep->IsSet(0) && sep->IsNumber(0)) { + Spawn* spawn = client->GetPlayer()->GetSpawnWithPlayerID(atoi(sep->arg[0])); + if (spawn) { + if (spawn->IsEntity()) + trader2 = (Entity*)spawn; + } + } + else if (client->GetPlayer()->GetTarget()) { + if (client->GetPlayer()->GetTarget()->IsEntity()) + trader2 = (Entity*)client->GetPlayer()->GetTarget(); + } + + // can only trade with player or bots + if (trader && trader2) { + if (trader == trader2) { + client->SimpleMessage(CHANNEL_COLOR_YELLOW, "You can't trade with yourself."); + } + else if (trader2->IsPlayer() || trader2->IsBot()) { + LogWrite(PLAYER__ERROR, 0, "Trade", "creating trade"); + if (trader->trade) + client->SimpleMessage(CHANNEL_COLOR_YELLOW, "You are already trading."); + else if (trader2->trade) + client->SimpleMessage(CHANNEL_COLOR_YELLOW, "Your target is already trading."); + else { + Trade* trade = new Trade(trader, trader2); + trader->trade = trade; + trader2->trade = trade; + } + } + else { + client->SimpleMessage(CHANNEL_COLOR_YELLOW, "You can only trade with another player or a bot."); + } + } + else + client->SimpleMessage(CHANNEL_COLOR_YELLOW, "Unable to find target"); +} + +/* + Function: Command_Track() + Purpose : Starts/Stops Tracking for a player + Params : + Dev : Scatman + Example : /track +*/ +void Commands::Command_Track(Client* client) +{ + if (!client->GetPlayer()->GetIsTracking()) + client->GetPlayer()->GetZone()->AddPlayerTracking(client->GetPlayer()); + else + client->GetPlayer()->GetZone()->RemovePlayerTracking(client->GetPlayer(), TRACKING_STOP); +} + +/* + Function: Command_TradeAccept() + Purpose : Accepts item/coin trade between players + Params : + Dev : + Example : +*/ +void Commands::Command_TradeAccept(Client* client, Seperator* sep) +{ + PrintSep(sep, "COMMAND_ACCEPT_TRADE"); + Trade* trade = client->GetPlayer()->trade; + if (trade) { + bool trade_complete = trade->SetTradeAccepted(client->GetPlayer()); + if (trade_complete) + safe_delete(trade); + } + else + client->SimpleMessage(CHANNEL_COLOR_YELLOW, "You are not currently trading."); +} + +/* + Function: Command_TradeReject() + Purpose : Rejects item/coin trade between players + Params : + Dev : + Example : +*/ +void Commands::Command_TradeReject(Client* client, Seperator* sep) +{ + PrintSep(sep, "COMMAND_REJECT_TRADE"); + LogWrite(MISC__TODO, 1, "Command", "TODO-Command: Reject Player Trading"); + client->Message(CHANNEL_COLOR_YELLOW, "You cannot trade with other players (Not Implemented)"); +} + +/* + Function: Command_TradeCancel() + Purpose : Cancels item/coin trade between players + Params : + Dev : + Example : +*/ +void Commands::Command_TradeCancel(Client* client, Seperator* sep) +{ + PrintSep(sep, "COMMAND_CANCEL_TRADE"); + Trade* trade = client->GetPlayer()->trade; + if (trade) { + trade->CancelTrade(client->GetPlayer()); + safe_delete(trade); + } + else + client->SimpleMessage(CHANNEL_COLOR_YELLOW, "You are not currently trading."); +} + +/* + Function: Command_TradeSetCoin() + Purpose : Sets coin trade between players + Params : + Dev : + Example : +*/ +void Commands::Command_TradeSetCoin(Client* client, Seperator* sep) +{ + PrintSep(sep, "COMMAND_SET_TRADE_COIN"); + LogWrite(MISC__TODO, 1, "Command", "TODO-Command: Set Trade Coin"); + client->Message(CHANNEL_COLOR_YELLOW, "You cannot trade with other players (Not Implemented)"); +} + +/* + Function: Command_TradeAddCoin() + Purpose : Adds coin to trade between players + Params : Passes "handler" through so we can process copper, silver, gold and plat in the same function + Dev : + Example : +*/ +void Commands::Command_TradeAddCoin(Client* client, Seperator* sep, int handler) +{ + PrintSep(sep, "COMMAND_ADD_TRADE_{coin type}"); + Trade* trade = client->GetPlayer()->trade; + if (trade) { + if (sep && sep->IsSet(0) && sep->IsNumber(0)) { + int32 amount = atoi(sep->arg[0]); + int64 val = 0; + switch (handler) { + case COMMAND_ADD_TRADE_COPPER: + { + val = amount; + trade->AddCoinToTrade(client->GetPlayer(), val); + break; + } + + case COMMAND_ADD_TRADE_SILVER: + { + val = amount * 100; + trade->AddCoinToTrade(client->GetPlayer(), val); + break; + } + + case COMMAND_ADD_TRADE_GOLD: + { + val = amount * 10000; + trade->AddCoinToTrade(client->GetPlayer(), val); + break; + } + + case COMMAND_ADD_TRADE_PLAT: + { + val = amount * 1000000; + trade->AddCoinToTrade(client->GetPlayer(), val); + break; + } + + default: + { + LogWrite(COMMAND__ERROR, 0, "Command", "No coin type specified in func: '%s', line %u", __FUNCTION__, __LINE__); + break; + } + } + } + else + client->SimpleMessage(CHANNEL_COLOR_YELLOW, "Invalid coin amount."); + } + else + client->SimpleMessage(CHANNEL_COLOR_YELLOW, "You are not currently trading."); +} + +/* + Function: Command_TradeRemoveCoin() + Purpose : Removes coin from trade between players + Params : Passes "handler" through so we can process copper, silver, gold and plat in the same function + Dev : + Example : +*/ +void Commands::Command_TradeRemoveCoin(Client* client, Seperator* sep, int handler) +{ + PrintSep(sep, "COMMAND_REMOVE_TRADE_{coin type}"); + + Trade* trade = client->GetPlayer()->trade; + if (trade) { + if (sep && sep->IsSet(0) && sep->IsNumber(0)) { + int32 amount = atoi(sep->arg[0]); + int64 val = 0; + switch (handler) { + case COMMAND_REMOVE_TRADE_COPPER: + { + val = amount; + trade->RemoveCoinFromTrade(client->GetPlayer(), val); + break; + } + + case COMMAND_REMOVE_TRADE_SILVER: + { + val = amount * 100; + trade->RemoveCoinFromTrade(client->GetPlayer(), val); + break; + } + + case COMMAND_REMOVE_TRADE_GOLD: + { + val = amount * 10000; + trade->RemoveCoinFromTrade(client->GetPlayer(), val); + break; + } + + case COMMAND_REMOVE_TRADE_PLAT: + { + val = amount * 1000000; + trade->RemoveCoinFromTrade(client->GetPlayer(), val); + break; + } + + default: + { + LogWrite(COMMAND__ERROR, 0, "Command", "No coin type specified in func: '%s', line %u", __FUNCTION__, __LINE__); + break; + } + } + } + else + client->SimpleMessage(CHANNEL_COLOR_YELLOW, "Invalid coin amount"); + } + else + client->SimpleMessage(CHANNEL_COLOR_YELLOW, "You are not currently trading."); +} + +/* + Function: Command_TradeAddItem() + Purpose : Adds item to trade between players + Params : + Dev : + Example : +*/ +void Commands::Command_TradeAddItem(Client* client, Seperator* sep) +{ + PrintSep(sep, "COMMAND_ADD_TRADE_ITEM"); + /* + arg[0] = item index + arg[1] = slot + arg[2] = quantity + */ + if (!client->GetPlayer()->trade) { + LogWrite(PLAYER__ERROR, 0, "Trade", "Player is not currently trading."); + client->SimpleMessage(CHANNEL_COLOR_YELLOW, "You are not currently trading."); + return; + } + + if (sep && sep->IsSet(0) && sep->IsNumber(0) && sep->IsSet(1) && sep->IsNumber(1) && sep->IsSet(2) && sep->IsNumber(2)) { + Item* item = 0; + int32 index = atoi(sep->arg[0]); + item = client->GetPlayer()->GetPlayerItemList()->GetItemFromIndex(index); + if (item) { + int8 result = client->GetPlayer()->trade->AddItemToTrade(client->GetPlayer(), item, atoi(sep->arg[2]), atoi(sep->arg[1])); + if (result == 1) + client->SimpleMessage(CHANNEL_COLOR_YELLOW, "Item is already being traded."); + else if (result == 2) + client->SimpleMessage(CHANNEL_COLOR_YELLOW, "You can't trade NO-TRADE items."); + else if (result == 3) + client->SimpleMessage(CHANNEL_COLOR_YELLOW, "You can't trade HEIRLOOM items."); + else if (result == 255) + client->SimpleMessage(CHANNEL_COLOR_YELLOW, "Unknown error trying to add the item to the trade..."); + } + else { + LogWrite(PLAYER__ERROR, 0, "Trade", "Unable to get an item for the player (%s) from the index (%u)", client->GetPlayer()->GetName(), index); + client->Message(CHANNEL_ERROR, "Unable to find item at index %u", index); + } + } + else + client->SimpleMessage(CHANNEL_COLOR_YELLOW, "Invalid item."); +} + +/* + Function: Command_TradeRemoveItem() + Purpose : Removes item from trade between players + Params : + Dev : + Example : +*/ +void Commands::Command_TradeRemoveItem(Client* client, Seperator* sep) +{ + PrintSep(sep, "COMMAND_REMOVE_TRADE_ITEM"); + /* + arg[0] = trade window slot + */ + + Trade* trade = client->GetPlayer()->trade; + if (trade) { + if (sep && sep->IsSet(0) && sep->IsNumber(0)) { + trade->RemoveItemFromTrade(client->GetPlayer(), atoi(sep->arg[0])); + } + else + client->SimpleMessage(CHANNEL_COLOR_YELLOW, "Invalid item."); + } + else + client->SimpleMessage(CHANNEL_COLOR_YELLOW, "You are not currently trading."); +} + +void Commands::Command_TryOn(Client* client, Seperator* sep) +{ + Item *item = 0; + sint32 crc; + + if (sep) { + // 1096+ sends more info so need to do a version check so older clients (SF) still work + if (client->GetVersion() < 1096) { + if (sep->arg[1] && sep->IsNumber(1) && sep->arg[2] && sep->IsNumber(2)) + { + item = master_item_list.GetItem(atoul(sep->arg[1])); + crc = atol(sep->arg[2]); + } + } + else { + // From the broker and links in chat + if (strcmp(sep->arg[0], "crc") == 0) { + if (sep->IsNumber(2) && sep->IsNumber(3)) { + item = master_item_list.GetItem(atoul(sep->arg[2])); + crc = atol(sep->arg[3]); + } + } + // From inventory + if (strcmp(sep->arg[0], "dbid") == 0) { + if (sep->IsNumber(2) && sep->IsNumber(4)) { + item = master_item_list.GetItem(atoul(sep->arg[2])); + crc = atol(sep->arg[4]); + } + } + } + if (item) + client->ShowDressingRoom(item, crc); + } +} + +void Commands::Command_JoinChannel(Client * client, Seperator *sep) { + const char *channel_name, *password = NULL; + + if (sep == NULL || !sep->IsSet(0)) { + client->SimpleMessage(CHANNEL_COLOR_YELLOW, "Usage: /joinchannel [password]"); + return; + } + + channel_name = sep->arg[0]; + if (sep->IsSet(1)) + password = sep->arg[1]; + + if (!chat.ChannelExists(channel_name) && !chat.CreateChannel(channel_name, password)) { + client->Message(CHANNEL_COLOR_RED, "Unable to create channel '%s'.", channel_name); + return; + } + + if (chat.IsInChannel(client, channel_name)) { + client->Message(CHANNEL_COLOR_WHITE, "You are already in '%s'.", channel_name); + return; + } + + if (chat.HasPassword(channel_name)) { + if (password == NULL) { + client->Message(CHANNEL_COLOR_WHITE, "Unable to join '%s': That channel is password protected.", channel_name); + return; + } + if (!chat.PasswordMatches(channel_name, password)) { + client->Message(CHANNEL_COLOR_WHITE, "Unable to join '%s': The password is not correc.t", channel_name); + return; + } + } + + if (!chat.JoinChannel(client, channel_name)) + client->Message(CHANNEL_COLOR_RED, "There was an internal error preventing you from joining '%s'.", channel_name); +} + +void Commands::Command_JoinChannelFromLoad(Client * client, Seperator *sep) { + printf("ScatDebug: Received 'joinfromchannel', using the same function as 'joinchannel' (not sure what the difference is)\n"); + Command_JoinChannel(client, sep); +} + +void Commands::Command_TellChannel(Client *client, Seperator *sep) { + if (sep == NULL || !sep->IsSet(0) || !sep->IsSet(1)) { + client->SimpleMessage(CHANNEL_COLOR_YELLOW, "Usage: /tellchannel "); + PrintSep(sep, "tellchannel"); + return; + } + + chat.TellChannel(client, sep->arg[0], sep->argplus[1]); +} + +void Commands::Command_Test(Client* client, EQ2_16BitString* command_parms) { + + //Seperator* sep2 = new Seperator(command_parms->data.c_str(), ' ', 50, 500, true); + //client->GetCurrentZone()->SendSpellFailedPacket(client, atoi(sep2->arg[0])); + //} + + + + + + + + + + + + + + /*Seperator* sep2 = new Seperator(command_parms->data.c_str(), ' ', 50, 500, true); + if (sep2 && sep2->arg[0] && sep2->IsNumber(0)) { + client->SetPendingFlightPath(atoi(sep2->arg[0])); + PacketStruct* packet = configReader.getStruct("WS_ReadyForTakeOff", client->GetVersion()); + if (packet) { + client->QueuePacket(packet->serialize()); + safe_delete(packet); + } + }*/ + + /*if (client->GetCurrentZone()->Grid != nullptr) { + int32 numFaces = 0; + int32 numGrids = client->GetPlayer()->Cell_Info.CurrentCell->FaceList.size(); + client->Message(CHANNEL_COLOR_YELLOW, "Num grids in cell: %u", numGrids); + + map >::iterator itr; + for (itr = client->GetPlayer()->Cell_Info.CurrentCell->FaceList.begin(); itr != client->GetPlayer()->Cell_Info.CurrentCell->FaceList.end(); itr++) + numFaces += (*itr).second.size(); + + client->Message(CHANNEL_COLOR_YELLOW, "Num faces in cell: %u", numFaces); + }*/ + + //uchar blah[] = { + // 1208 - OP_EQUpdateStoreCmd + // /*0x00,0x3A,*/0x2B,0x00,0x00,0x00,0xFF,0x78,0x02,0x53,0x2C,0x33,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 + + // /*0x58,*/0x47,0x35,0xD3,0x45,0x42,0x42,0x51,0x00,0x40,0xD1,0xE7,0x57,0xB1,0x51,0xB1,0xBB,0xBB,0xB1,0x3B,0xB0,0xBB,0xB0,0x3B,0x59,0x85,0x5B,0x47,0x1D,0x9C,0x3B,0x3A,0x1B,0xB8,0xD9,0x64,0x14,0x85,0x9F,0x4C,0xC8,0x09,0x21,0xA4,0xB3,0x7F,0x45,0x90,0x0B,0x79,0x90,0x0F,0x31,0x28,0x80,0x42,0x28,0x82,0x62,0x28,0x81,0x52,0x28,0x83,0x38,0x94,0x43,0x05,0x54,0x42,0x02,0xAA,0xA0,0x1A,0x6A,0xA0,0x16,0xEA,0xA0,0x1E,0x1A,0xA0,0x11,0x9A,0xA0,0x19,0x5A,0xA0,0x15,0xDA,0xA0,0x1D,0x3A,0xA0,0x13,0xBA,0xA0,0x1B,0x7A,0xA0,0x17,0xFA,0xA0,0x1F,0x06,0x60,0x10,0x86,0x60,0x18,0x46,0x60,0x14,0xC6,0x60,0x1C,0x26,0x20,0x09,0x93,0x30,0x05,0xD3,0x30,0x03,0xB3,0x30,0x07,0xF3,0xB0,0x00,0x8B,0xB0,0x04,0xCB,0xB0,0x02,0xAB,0xB0,0x06,0xEB,0xB0,0x01,0x29,0xD8,0x84,0x2D,0xD8,0x86,0x1D,0xD8,0x85,0x3D,0xD8,0x87,0x03,0x38,0x84,0x23,0x38,0x86,0x13,0x38,0x85,0x33,0x38,0x87,0x0B,0xB8,0x84,0x34,0x5C,0xC1,0x35,0xDC,0xC0,0x2D,0xDC,0xC1,0x3D,0x3C,0xC0,0x23,0x3C,0xC1,0x33,0xBC,0xC0,0x2B,0xBC,0xC1,0x3B,0x7C,0xC0,0x27,0x7C,0xC1,0x37,0x64,0xE0,0xFF,0xD3,0xF0,0x0B,0x29,0x4A,0xD8,0x68 + + // 1193 - -- OP_ClientCmdMsg::OP_EqUpdateMerchantCmd -- + // /*0x00,0x3A,*/0x38,0x00,0x00,0x00,0xFF,0x77,0x02,0xA6,0xAA,0x00,0x00,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x3F,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x3F,0x00,0x00,0x00,0x00,0xA8,0x55,0xEC,0x8F,0x7F,0x70,0x31,0x08,0x40,0x71,0x3A,0x8B,0xB4,0x55,0xEC,0x8F,0x00 + /*}; + + Seperator* sep2 = new Seperator(command_parms->data.c_str(), ' ', 50, 500, true); + int8 val = 0; + int16 pos = 0; + int idx = 0; + while(sep2 && sep2->arg[idx+1] && sep2->IsNumber(idx) && sep2->IsNumber(idx+1)){ + pos = atoi(sep2->arg[idx]); + val = atoi(sep2->arg[idx+1]); + memset(blah+pos, val, 1); + idx+=2; + } + + DumpPacket(blah, sizeof(blah)); + client->QueuePacket(new EQ2Packet(OP_GroupCreatedMsg , blah, sizeof(blah)));*/ + + if (client->GetPlayer()->GetTarget()) { + PacketStruct* packet = configReader.getStruct("WS_SetControlGhost", client->GetVersion()); + if (packet) { + packet->setDataByName("spawn_id", client->GetPlayer()->GetIDWithPlayerSpawn(client->GetPlayer()->GetTarget())); + packet->setDataByName("size", 0); + packet->setDataByName("unknown2", 0); + EQ2Packet* app = packet->serialize(); + client->QueuePacket(app); + safe_delete(packet); + } + + PacketStruct* set_pov = configReader.getStruct("WS_SetPOVGhostCmd", client->GetVersion()); + if (set_pov) { + set_pov->setDataByName("spawn_id", client->GetPlayer()->GetIDWithPlayerSpawn(client->GetPlayer()->GetTarget())); + EQ2Packet* app_pov = set_pov->serialize(); + client->QueuePacket(app_pov); + safe_delete(set_pov); + } + } + + Seperator* sep2 = new Seperator(command_parms->data.c_str(), ' ', 50, 500, true); + + PacketStruct* packet = configReader.getStruct("WS_OpenCharCust", client->GetVersion()); + if (packet) { + + + if (sep2 && sep2->arg[0] && sep2->IsNumber(0)) + packet->setDataByName("Type", atoi(sep2->arg[0])); + else + packet->setDataByName("Type", 2); + + if (sep2 && sep2->arg[1] && sep2->IsNumber(1)) + packet->setDataByName("race_id", atoi(sep2->arg[1])); + else + packet->setDataByName("race_id", 0); + + if (sep2 && sep2->arg[2] && sep2->IsNumber(2)) + packet->setDataByName("gender", atoi(sep2->arg[2])); + else + packet->setDataByName("gender", 2); + + if (sep2 && sep2->arg[3] && sep2->IsNumber(3)) + packet->setDataByName("unknown", atoi(sep2->arg[3]), 0); + else + packet->setDataByName("unknown", 0, 0); + + if (sep2 && sep2->arg[4] && sep2->IsNumber(4)) + packet->setDataByName("unknown", atoi(sep2->arg[4]), 1); + else + packet->setDataByName("unknown", 0, 1); + + if (sep2 && sep2->arg[5] && sep2->IsNumber(5)) + packet->setDataByName("unknown", atoi(sep2->arg[5]), 2); + else + packet->setDataByName("unknown", 0, 2); + + + client->QueuePacket(packet->serialize()); + } + safe_delete(packet); + safe_delete(sep2); +} + +void Commands::Command_LeaveChannel(Client *client, Seperator *sep) { + const char *channel_name; + + if (sep == NULL || !sep->IsSet(0)) { + client->SimpleMessage(CHANNEL_COLOR_YELLOW, "Usage: /leavechat "); + PrintSep(sep); + return; + } + + channel_name = sep->arg[0]; + + if (!chat.IsInChannel(client, channel_name)) + client->Message(CHANNEL_COLOR_WHITE, "Unable to leave '%s': You are not in the channel.", channel_name); + else if (!chat.LeaveChannel(client, channel_name)) + client->SimpleMessage(CHANNEL_COLOR_YELLOW, "There was an internal error preventing you from leaving that channel MUAHAHA"); +} + +/* + Function: + Purpose : + Params : + Dev : + Example : +*/ +void Commands::Command_WeaponStats(Client* client) +{ + Player* player = client->GetPlayer(); + + Item* primary = player->GetEquipmentList()->GetItem(EQ2_PRIMARY_SLOT); + Item* secondary = player->GetEquipmentList()->GetItem(EQ2_SECONDARY_SLOT); + Item* ranged = player->GetEquipmentList()->GetItem(EQ2_RANGE_SLOT); + client->SimpleMessage(0, "Primary:"); + if (primary) { + client->Message(0, "Name: %s", primary->name.c_str()); + client->Message(0, "Base Damage: %u - %u", primary->weapon_info->damage_low3, primary->weapon_info->damage_high3); + client->Message(0, "Actual Damage: %u - %u", player->GetPrimaryWeaponMinDamage(), player->GetPrimaryWeaponMaxDamage()); + client->Message(0, "Actual Delay: %u", player->GetPrimaryWeaponDelay()); + client->Message(0, "Proc Percent: %d%%", 0); + client->Message(0, "Procs Per Minute: %d", 0); + } + else { + client->SimpleMessage(0, "Name: fist"); + client->Message(0, "Base Damage: %u - %u", player->GetPrimaryWeaponMinDamage(), player->GetPrimaryWeaponMaxDamage()); + client->Message(0, "Actual Damage: %u - %u", player->GetPrimaryWeaponMinDamage(), player->GetPrimaryWeaponMaxDamage()); + client->Message(0, "Actual Delay: %d", player->GetPrimaryWeaponDelay() * 0.1); + client->Message(0, "Proc Percent: %d%%", 0); + client->Message(0, "Procs Per Minute: %d", 0); + } + client->SimpleMessage(0, " "); + client->SimpleMessage(0, " "); + if (secondary) { + client->SimpleMessage(0, "Secondary:"); + client->Message(0, "Name: %s", secondary->name.c_str()); + client->Message(0, "Base Damage: %u - %u", secondary->weapon_info->damage_low3, secondary->weapon_info->damage_high3); + client->Message(0, "Actual Damage: %u - %u", player->GetSecondaryWeaponMinDamage(), player->GetSecondaryWeaponMaxDamage()); + client->Message(0, "Actual Delay: %d", player->GetSecondaryWeaponDelay() * 0.1); + client->Message(0, "Proc Percent: %d%%", 0); + client->Message(0, "Procs Per Minute: %d", 0); + client->SimpleMessage(0, " "); + client->SimpleMessage(0, " "); + } + client->SimpleMessage(0, "Ranged:"); + if (ranged) { + client->Message(0, "Name: %s", ranged->name.c_str()); + client->Message(0, "Base Damage: %u - %u", ranged->ranged_info->weapon_info.damage_low3, ranged->ranged_info->weapon_info.damage_high3); + client->Message(0, "Actual Damage: %u - %u", player->GetRangedWeaponMinDamage(), player->GetRangedWeaponMaxDamage()); + client->Message(0, "Actual Delay: %d", player->GetRangeWeaponDelay() * 0.1); + client->Message(0, "Proc Percent: %d%%", 0); + client->Message(0, "Procs Per Minute: %d", 0); + } + else + client->SimpleMessage(0, "None"); + +} + +void Commands::Command_WhoChannel(Client *client, Seperator *sep) { + const char *channel_name; + + if (sep == NULL || !sep->IsSet(0)) { + client->SimpleMessage(CHANNEL_COLOR_YELLOW, "Usage: /chatwho "); + return; + } + + channel_name = sep->arg[0]; + + if (!chat.ChannelExists(channel_name)) + client->SimpleMessage(CHANNEL_COLOR_YELLOW, "That channel does not exist!"); + else + chat.SendChannelUserList(client, channel_name); +} + +void Commands::Command_ZoneSafeCoords(Client *client, Seperator *sep) +{ + ZoneServer* zone = 0; + int32 zone_id = client->GetPlayer()->GetZone()->GetZoneID(); + + if (zone_id > 0) + { + zone = zone_list.Get(zone_id, false); + if (zone) + { + zone->SetSafeX(client->GetPlayer()->GetX()); + zone->SetSafeY(client->GetPlayer()->GetY()); + zone->SetSafeZ(client->GetPlayer()->GetZ()); + zone->SetSafeHeading(client->GetPlayer()->GetHeading()); + if( database.SaveZoneSafeCoords(zone_id, zone->GetSafeX(), zone->GetSafeY(), zone->GetSafeZ(), zone->GetSafeHeading()) ) + client->SimpleMessage(CHANNEL_COLOR_YELLOW, "Zone safe coordinates updated!"); + else + client->SimpleMessage(CHANNEL_COLOR_RED, "FAILED to update zone safe coordinates!"); + } + } +} + +/* + Function: + Purpose : + Params : + Dev : + Example : +*/ +void Commands::Command_ZoneDetails(Client* client, Seperator* sep) +{ + ZoneInfo* zone_info = new ZoneInfo; + + if (sep && sep->arg[0]) + { + if (sep->IsNumber(0)) + zone_info->id = atoi(sep->arg[0]); + else + zone_info->id = database.GetZoneID(sep->arg[0]); + + if (zone_info->id > 0) + { + database.LoadZoneInfo(zone_info); + client->Message(CHANNEL_COLOR_YELLOW, "id: %u, name: %s, file: %s, description: %s", zone_info->id, zone_info->name, zone_info->file, zone_info->description); + client->Message(CHANNEL_COLOR_YELLOW, "safe_x: %f, safe_y: %f, safe_z: %f, underworld: %f", zone_info->safe_x, zone_info->safe_y, zone_info->safe_z, zone_info->underworld); + client->Message(CHANNEL_COLOR_YELLOW, "min_status: %u, min_level: %u, max_level: %u, xp_modifier: %u", zone_info->min_status, zone_info->min_level, zone_info->max_level, zone_info->xp_modifier); + client->Message(CHANNEL_COLOR_YELLOW, "instance_type: %u, shutdown_timer: %u, ruleset_id: %u", zone_info->instance_type, zone_info->shutdown_timer, zone_info->ruleset_id); + client->Message(CHANNEL_COLOR_YELLOW, "default_reenter_time: %u, default_reset_time: %u, default_lockout_time: %u", zone_info->default_reenter_time, zone_info->default_reenter_time, zone_info->default_lockout_time); + client->Message(CHANNEL_COLOR_YELLOW, "force_group_to_zone: %u, expansion_id: %u, min_version: %u", zone_info->force_group_to_zone, zone_info->expansion_id, zone_info->min_version); + client->Message(CHANNEL_COLOR_YELLOW, "always_loaded: %u, city_zone: %u, start_zone: %u, weather_allowed: %u", zone_info->always_loaded, zone_info->city_zone, zone_info->start_zone, zone_info->weather_allowed); + client->Message(CHANNEL_COLOR_YELLOW, "zone_type: %s", zone_info->zone_type); + client->Message(CHANNEL_COLOR_YELLOW, "lua_script: %s", zone_info->lua_script); + client->Message(CHANNEL_COLOR_YELLOW, "zone_motd: %s", zone_info->zone_motd); + } + else + client->Message(CHANNEL_COLOR_YELLOW, "The zone name or ID '%s' does not exist.", sep->arg[0]); + } + else + client->SimpleMessage(CHANNEL_COLOR_YELLOW, "Usage: /zone details [zone id|zone name]"); + + safe_delete(zone_info); +} + +/* + Function: + Purpose : + Params : + Dev : + Example : +*/ +void Commands::Command_ZoneSet(Client* client, Seperator* sep) +{ + if (sep && sep->arg[0] && sep->arg[1] && sep->arg[2]) + { + ZoneServer* zone = 0; + int32 zone_id = 0; + + if (sep->IsNumber(0) && atoi(sep->arg[0]) > 0) + { + zone_id = atoi(sep->arg[0]); + zone = zone_list.Get(atoi(sep->arg[0]), false); + } + else + { + zone_id = database.GetZoneID(sep->arg[0]); + + if (zone_id > 0) + zone = zone_list.Get(sep->arg[0], false); + } + + if (zone_id > 0) + { + if (zone_set_values.count(string(sep->arg[1])) > 0) + SetZoneCommand(client, zone_id, zone, zone_set_values[sep->arg[1]], sep->arg[2]); + else + client->Message(CHANNEL_COLOR_YELLOW, "The attribute '%s' is not valid.", sep->arg[1]); + } + else + client->Message(CHANNEL_COLOR_YELLOW, "The zone name or ID '%s' does not exist.", sep->arg[0]); + } + else + client->SimpleMessage(CHANNEL_COLOR_YELLOW, "Usage: /zone set [zone id|zone name] [attribute] [value]"); +} + +void Commands::Command_Rain(Client* client, Seperator* sep) { + if (sep == NULL || !sep->IsSet(0) || !sep->IsNumber(0)) { + client->SimpleMessage(CHANNEL_COLOR_YELLOW, "Usage: /rain "); + return; + } + + client->Message(CHANNEL_COLOR_YELLOW,"Setting rain to %.2f", atof(sep->arg[0])); + client->GetCurrentZone()->SetRain(atof(sep->arg[0])); + client->GetCurrentZone()->SetCurrentWeather(atof(sep->arg[0])); +} + +void Commands::Command_Wind(Client* client, Seperator* sep) { + if (sep == NULL || !sep->IsSet(0) || !sep->IsNumber(0)) { + client->SimpleMessage(CHANNEL_COLOR_YELLOW, "Usage: /wind "); + return; + } + + client->Message(CHANNEL_COLOR_YELLOW, "Setting wind to %.2f", atof(sep->arg[0])); + client->GetCurrentZone()->SetWind(atof(sep->arg[0])); +} + + +void Commands::Command_SendMerchantWindow(Client* client, Seperator* sep, bool sell) { + Spawn* spawn = client->GetPlayer()->GetTarget(); + if(spawn) { + client->SetMerchantTransaction(spawn); + if (spawn->GetMerchantID() > 0){ + //MerchantFactionMultiplier* multiplier = world.GetMerchantMultiplier(spawn->GetMerchantID()); + //if(!multiplier || (multiplier && client->GetPlayer()->GetFactions()->GetFactionValue(multiplier->faction_id) >= multiplier->faction_min)){ + client->SendBuyMerchantList(sell); + if(!(spawn->GetMerchantType() & MERCHANT_TYPE_NO_BUY)) + client->SendSellMerchantList(sell); + if(!(spawn->GetMerchantType() & MERCHANT_TYPE_NO_BUY_BACK)) + client->SendBuyBackList(sell); + + PacketStruct* packet = configReader.getStruct("WS_UpdateMerchant", client->GetVersion()); + if (packet) { + packet->setDataByName("spawn_id", 0xFFFFFFFF); + packet->setDataByName("type", 16); + EQ2Packet* outapp = packet->serialize(); + if (outapp) + client->QueuePacket(outapp); + safe_delete(packet); + } + } + if (spawn->GetMerchantType() & MERCHANT_TYPE_REPAIR) + client->SendRepairList(); + } + // client->SimpleMessage(CHANNEL_COLOR_RED, "Your faction is too low to use this merchant."); +} + + +void Commands::Command_Weather(Client* client, Seperator* sep) +{ + //PrintSep(sep, "Weather"); + + if( sep && sep->arg[0] ) + { + ZoneServer* zsZone = client->GetCurrentZone(); + const char* value = sep->arg[0]; + + // process single-param commands first + if( strncasecmp(value, "details", strlen(value)) == 0 ) + { + client->Message(CHANNEL_COLOR_YELLOW, "Weather Details for zone %s: ", zsZone->GetZoneName()); + client->Message(CHANNEL_COLOR_YELLOW, "enabled: %i, allowed: %i, type: %i, frequency: %u", zsZone->isWeatherEnabled(), zsZone->isWeatherAllowed(), zsZone->GetWeatherType(), zsZone->GetWeatherFrequency()); + client->Message(CHANNEL_COLOR_YELLOW, "severity: %.2f = %.2f, current: %.2f", zsZone->GetWeatherMinSeverity(), zsZone->GetWeatherMaxSeverity(), zsZone->GetCurrentWeather()); + client->Message(CHANNEL_COLOR_YELLOW, "pattern: %i, chance: %i, amount: %.2f, offset: %.2f", zsZone->GetWeatherPattern(), zsZone->GetWeatherChance(), zsZone->GetWeatherChangeAmount(), zsZone->GetWeatherDynamicOffset()); + } + else if( strncasecmp(value, "process", strlen(value)) == 0 ) + { + zsZone->SetWeatherLastChangedTime(Timer::GetUnixTimeStamp() - zsZone->GetWeatherFrequency()); + zsZone->ProcessWeather(); + } + else if( strncasecmp(value, "reset", strlen(value)) == 0 ) + { + zsZone->SetWeatherType(rule_manager.GetGlobalRule(R_Zone, WeatherType)->GetInt8()); + zsZone->SetWeatherFrequency(rule_manager.GetGlobalRule(R_Zone, WeatherChangeFrequency)->GetInt32()); + zsZone->SetWeatherMinSeverity(rule_manager.GetGlobalRule(R_Zone, MinWeatherSeverity)->GetFloat()); + zsZone->SetWeatherMaxSeverity(rule_manager.GetGlobalRule(R_Zone, MaxWeatherSeverity)->GetFloat()); + zsZone->SetCurrentWeather(zsZone->GetWeatherMinSeverity()); + zsZone->SetWeatherPattern(1); + zsZone->SetWeatherChance(rule_manager.GetGlobalRule(R_Zone, WeatherChangeChance)->GetInt8()); + zsZone->SetWeatherChangeAmount(rule_manager.GetGlobalRule(R_Zone, WeatherChangePerInterval)->GetFloat()); + zsZone->SetWeatherDynamicOffset(rule_manager.GetGlobalRule(R_Zone, WeatherDynamicMaxOffset)->GetFloat()); + zsZone->SetWeatherLastChangedTime(Timer::GetUnixTimeStamp() - zsZone->GetWeatherFrequency()); + zsZone->ProcessWeather(); + } + + // process commands with params + if( sep->arg[1] ) + { + if( strncasecmp(value, "enable", strlen(value)) == 0 && sep->IsNumber(1) ) + zsZone->SetWeatherEnabled( ( atoi(sep->arg[1]) == 1 ) ? true : false ); + else if( strncasecmp(value, "type", strlen(value)) == 0 && sep->IsNumber(1) && (atoi(sep->arg[1]) >= 0 && atoi(sep->arg[1]) <= 3) ) + zsZone->SetWeatherType(atoi(sep->arg[1])); + else if( strncasecmp(value, "frequency", strlen(value)) == 0 && sep->IsNumber(1)) + zsZone->SetWeatherFrequency( atoul(sep->arg[1]) ); + else if( strncasecmp(value, "range", strlen(value)) == 0 && sep->IsNumber(1) && sep->IsNumber(2) ) { + zsZone->SetWeatherMinSeverity(atof(sep->arg[1])); + zsZone->SetWeatherMaxSeverity(atof(sep->arg[2])); + zsZone->SetRain(zsZone->GetWeatherMinSeverity()); + } + else if( strncasecmp(value, "current", strlen(value)) == 0 && sep->IsNumber(1) ) { + zsZone->SetCurrentWeather(atof(sep->arg[1])); + zsZone->SetRain(zsZone->GetCurrentWeather()); + } + else if( strncasecmp(value, "pattern", strlen(value)) == 0 && sep->IsNumber(1) && (atoi(sep->arg[1]) >= 0 && atoi(sep->arg[1]) <= 2) ) + zsZone->SetWeatherPattern( atoi(sep->arg[1]) ); + else if( strncasecmp(value, "chance", strlen(value)) == 0 && sep->IsNumber(1) && (atoi(sep->arg[1]) >= 0 && atoi(sep->arg[1]) <= 100) ) + zsZone->SetWeatherChance( atoi(sep->arg[1]) ); + else if( strncasecmp(value, "amount", strlen(value)) == 0 && sep->IsNumber(1) && (atoi(sep->arg[1]) >= 0 && atoi(sep->arg[1]) <= 1) ) + zsZone->SetWeatherChangeAmount( atof(sep->arg[1]) ); + else if( strncasecmp(value, "offset", strlen(value)) == 0 && sep->IsNumber(1) && (atoi(sep->arg[1]) >= 0 && atoi(sep->arg[1]) <= 1) ) + zsZone->SetWeatherDynamicOffset( atof(sep->arg[1]) ); + } + } + else + { + client->SimpleMessage(CHANNEL_COLOR_YELLOW, "Usage: /weather [command] [param]"); + client->SimpleMessage(CHANNEL_COLOR_YELLOW, "Commands: enable (0|1), type (0-3), frequency (sec), range|current (0.0 - 1.0)"); + client->SimpleMessage(CHANNEL_COLOR_YELLOW, "Commands: details, process, pattern (0|1), chance (%), amount (float), offset (float)"); + return; + } + +} + +void Commands::Command_Select(Client* client, Seperator* sep) { + if (sep && sep->arg[1]) { + Spawn* spawn = client->GetPlayer()->GetTarget(); + if (spawn && strlen(sep->arg[1]) > 0) + client->GetCurrentZone()->CallSpawnScript(spawn, SPAWN_SCRIPT_CUSTOM, client->GetPlayer(), sep->arg[1]); + } +} + +/* + Function: Command_ConsumeFood() + Purpose : Consume Food/Drink and apply mods + Params : Slot ID - EQ2_FOOD_SLOT 22, EQ2_DRINK_SLOT 23 + Dev : Zcoretri + Example : /consume_food 22 +*/ +void Commands::Command_ConsumeFood(Client* client, Seperator* sep) { + if (sep && sep->arg[0] && sep->IsNumber(0)) + { + Player* player = client->GetPlayer(); + int8 slot = atoi(sep->arg[0]); + Item* item = player->GetEquipmentList()->GetItem(slot); + + if(item) { + LogWrite(MISC__INFO, 1, "Command", "ItemID: %u, ItemName: %s ItemCount: %i ", item->details.item_id, item->name.c_str(), item->details.count); + if(item->GetItemScript() && lua_interface){ + lua_interface->RunItemScript(item->GetItemScript(), "cast", item, client->GetPlayer()); + if (slot == 22) + client->Message(CHANNEL_COLOR_WHITE, "You eat a %s.", item->name.c_str()); + else + client->Message(CHANNEL_COLOR_WHITE, "You drink a %s.", item->name.c_str()); + } + } + + if (item->details.count > 1) { + item->details.count -= 1; + item->save_needed = true; + } + else { + player->GetEquipmentList()->RemoveItem(slot, true); + database.DeleteItem(player->GetCharacterID(), item, "EQUIPPED"); + } + client->GetPlayer()->SetCharSheetChanged(true); + client->QueuePacket(player->GetEquipmentList()->serialize(client->GetVersion(), player)); + } +} + +void Commands::Command_Aquaman(Client* client, Seperator* sep) { + if (sep && sep->arg[0] && sep->IsNumber(0)) { + if (atoi(sep->arg[0]) == 1) { + client->GetPlayer()->GetInfoStruct()->vision = 4; + client->GetPlayer()->GetInfoStruct()->breathe_underwater = 1; + client->GetPlayer()->SetCharSheetChanged(true); + client->SimpleMessage(CHANNEL_COLOR_YELLOW, "Maybe you ought to stick to the shallow end until you know how to swim."); + } + else { + client->GetPlayer()->GetInfoStruct()->vision = 0; + client->GetPlayer()->GetInfoStruct()->breathe_underwater = 0; + client->GetPlayer()->SetCharSheetChanged(true); + client->SimpleMessage(CHANNEL_COLOR_YELLOW, "Aquaman mode turned off."); + } + } + else + client->SimpleMessage(CHANNEL_COLOR_YELLOW, "Usage: /aquaman [0|1]"); +} + +void Commands::Command_ReportBug(Client* client, Seperator* sep) +{ + if(sep) + { + string data; + + if(sep->arg[0]){ + data = string(sep->arg[0]); + } + + for(int i=1;iGetMaxArgNum();i++){ + if(sep->arg[i]) + data.append(" ").append(sep->arg[i]); + } + + const char* target_name = 0; + int32 spawn_id = 0; + + if(client->GetPlayer()->GetTarget()) + { + target_name = client->GetPlayer()->GetTarget()->GetName(); + spawn_id = client->GetPlayer()->GetTarget()->GetDatabaseID(); + } + else + target_name = "N/A"; + + LogWrite(COMMAND__DEBUG, 1, "Command", "%s", data.c_str()); + + if(world.ReportBug(data, client->GetPlayer()->GetName(), client->GetAccountID(), target_name, spawn_id, client->GetCurrentZone()->GetZoneID())) + client->SimpleMessage(CHANNEL_COLOR_YELLOW, "Successfully submitted bug."); + else + client->SimpleMessage(CHANNEL_COLOR_RED, "Error submitting bug."); + } +} + +void Commands::Command_Attune_Inv(Client* client, Seperator* sep) { + PrintSep(sep, "Command_Attune_Inv"); + if (sep && sep->arg[0] && sep->IsNumber(0)) { + // Get the item index from the first parameter + int16 index = atoi(sep->arg[0]); + // Check to see if this is a valid item index for the player, if not exit out of the function + if (client->GetPlayer()->item_list.indexed_items.count(index) == 0) { + LogWrite(ITEM__DEBUG, 0, "Items", "%s has no item with an index of %i", client->GetPlayer()->GetName(), index); + return; + } + + // Get the item + Item* item = client->GetPlayer()->item_list.indexed_items[index]; + if(item) { + // Valid item lets check to make sure this item is attunable, if not return out + if (!item->CheckFlag(ATTUNEABLE)) { + LogWrite(ITEM__DEBUG, 0, "Items", "attune_inv called for an item that is not attunable (%s)", item->name.c_str()); + return; + } + + // Remove the attunable flag + item->generic_info.item_flags -= ATTUNEABLE; + // Set the attuned flag + item->generic_info.item_flags += ATTUNED; + // Flag this item for saving + item->save_needed = true; + + client->QueuePacket(item->serialize(client->GetVersion(), false, client->GetPlayer())); + + vector packets = client->GetPlayer()->EquipItem(index, client->GetVersion(), -1); + EQ2Packet* outapp = 0; + + for (int32 i=0;iQueuePacket(outapp); + } + } + + } +} + +void Commands::Command_Reset_Zone_Timer(Client* client, Seperator* sep) { + PrintSep(sep, "Command_Reset_Zone_Timer"); + /*if (sep && sep->arg[0] && sep->IsNumber(0)) { + int32 db_id = atoul(sep->arg[0]); + InstanceData* data = client->GetPlayer()->GetCharacterInstances().FindInstanceByDBID(db_id); + if (data) { + // TODO: add a check to timers to ensure it can be reset + + // Delete the character from the instance + database.DeleteCharacterFromInstance(client->GetPlayer()->GetCharacterID(), data->instance_id); + data->instance_id = 0; + + // Update the success time and set to 0 so the player can enter it again + database.UpdateCharacterInstance(client->GetPlayer()->GetCharacterID(), data->zone_name, 0, 1, 0); + data->last_success_timestamp = 0; + } + }*/ +} + +void Commands::Command_Player(Client* client, Seperator* sep) { + client->SimpleMessage(CHANNEL_COLOR_YELLOW, " -- /player syntax --"); + client->SimpleMessage(CHANNEL_COLOR_YELLOW, "/player coins"); +} + +void Commands::Command_Player_Coins(Client* client, Seperator* sep) { + // /player coins add 10 + // /player coins add plat 10 + Player* player = client->GetPlayer(); + if (player->HasTarget() && player->GetTarget()->IsPlayer()) + player = (Player*)player->GetTarget(); + + + if (sep && sep->arg[0] && sep->arg[1]) { + const char* action = sep->arg[0]; + int64 value = 0; + + if (strncasecmp(action, "add", strlen(action)) == 0) { + if (sep->IsNumber(1)) { + value = atoi64(sep->arg[1]); + player->AddCoins(value); + + if (client->GetPlayer() == player) + client->Message(CHANNEL_COLOR_YELLOW, "You give yourself %llu coin%s", value, (value > 1 ? "s" : "")); + else { + client->Message(CHANNEL_COLOR_YELLOW, "You give %s %llu coin%s", player->GetName(), value, (value > 1 ? "s" : "")); + client->GetCurrentZone()->GetClientBySpawn(player)->Message(CHANNEL_COLOR_YELLOW, "%s gave you %llu coin%s", client->GetPlayer()->GetName(), value, (value > 1 ? "s" : "")); + } + + return; + } + else if (sep->arg[2] && sep->IsNumber(2)) { + const char* type = sep->arg[1]; + if (strncasecmp(type, "copper", strlen(type)) == 0) { + value = atoi64(sep->arg[2]); + } + else if (strncasecmp(type, "silver", strlen(type)) == 0) { + value = atoi64(sep->arg[2]) * 100; + } + else if (strncasecmp(type, "gold", strlen(type)) == 0) { + value = atoi64(sep->arg[2]) * 10000; + } + else if (strncasecmp(type, "plat", strlen(type)) == 0) { + value = atoi64(sep->arg[2]) * 1000000; + } + player->AddCoins(value); + + if (client->GetPlayer() == player) + client->Message(CHANNEL_COLOR_YELLOW, "You give yourself %llu coin%s", value, (value > 1 ? "s" : "")); + else { + client->Message(CHANNEL_COLOR_YELLOW, "You give %s %llu coin%s", player->GetName(), value, (value > 1 ? "s" : "")); + client->GetCurrentZone()->GetClientBySpawn(player)->Message(CHANNEL_COLOR_YELLOW, "%s gave you %llu coin%s", client->GetPlayer()->GetName(), value, (value > 1 ? "s" : "")); + } + return; + } + } + } + + client->SimpleMessage(CHANNEL_COLOR_YELLOW, " -- /player coins syntax --"); + client->SimpleMessage(CHANNEL_COLOR_YELLOW, "/player coins add [value] - adds the given number of coins to the player"); + client->SimpleMessage(CHANNEL_COLOR_YELLOW, "/player coins add copper [value] - adds the given amount of copper to the player"); + client->SimpleMessage(CHANNEL_COLOR_YELLOW, "/player coins add silver [value] - adds the given amount of silver to the player"); + client->SimpleMessage(CHANNEL_COLOR_YELLOW, "/player coins add gold [value] - adds the given amount of gold to the player"); + client->SimpleMessage(CHANNEL_COLOR_YELLOW, "/player coins add plat [value] - adds the given amount of platinum to the player"); +} + +void Commands::Command_AchievementAdd(Client* client, Seperator* sep) { + PrintSep(sep, "ACHIEVEMENT_ADD"); + if (sep && sep->IsSet(0)) { + int32 spell_id = atoul(sep->arg[1]); + int8 spell_tier = 0; + spell_tier = client->GetPlayer()->GetSpellTier(spell_id); + AltAdvanceData* data = master_aa_list.GetAltAdvancement(spell_id); + // addspellbookentry here + if (spell_tier >= data->maxRank) { + return; + } + if (!spell_tier) { + spell_tier = 1; + } + if (!client->GetPlayer()->HasSpell(spell_id, 0, true)) + { + Spell* spell = master_spell_list.GetSpell(spell_id, spell_tier); + client->GetPlayer()->AddSpellBookEntry(spell_id, 1, client->GetPlayer()->GetFreeSpellBookSlot(spell->GetSpellData()->spell_book_type), spell->GetSpellData()->spell_book_type, spell->GetSpellData()->linked_timer, true); + client->GetPlayer()->UnlockSpell(spell); + client->SendSpellUpdate(spell); + } + else + { + Spell* spell = master_spell_list.GetSpell(spell_id, spell_tier + 1); + int8 old_slot = client->GetPlayer()->GetSpellSlot(spell->GetSpellID()); + client->GetPlayer()->RemoveSpellBookEntry(spell->GetSpellID()); + client->GetPlayer()->AddSpellBookEntry(spell->GetSpellID(), spell->GetSpellTier(), old_slot, spell->GetSpellData()->spell_book_type, spell->GetSpellData()->linked_timer, true); + client->GetPlayer()->UnlockSpell(spell); + client->SendSpellUpdate(spell); + } + + + // cast spell here + if (!spell_tier) + spell_tier = 1; + Spell* spell = master_spell_list.GetSpell(spell_id, spell_tier); + if (spell) { + client->GetCurrentZone()->ProcessSpell(spell, client->GetPlayer(), client->GetPlayer()); + } + } + else { + client->SimpleMessage(CHANNEL_COLOR_YELLOW, "Usage: /useability {spell_id} [spell_tier]"); + } + master_aa_list.DisplayAA(client, 0, 0); +} + +void Commands::Command_Editor(Client* client, Seperator* sep) { + PacketStruct* packet = configReader.getStruct("WS_ChoiceWindow", client->GetVersion()); + if (packet) { + string url = string(rule_manager.GetGlobalRule(R_World, EditorURL)->GetString()); + + if (rule_manager.GetGlobalRule(R_World, EditorOfficialServer)->GetBool()) { + char command[255]; + url = "browser " + url; + int32 spawn_id = 0; + int32 zone_id = 0; + string type; + + if (client->GetCurrentZone()) + zone_id = client->GetCurrentZone()->GetZoneID(); + + if (client->GetPlayer()->GetTarget()) { + Spawn* target = client->GetPlayer()->GetTarget(); + if (target->IsWidget()) + type = "widgets"; + else if (target->IsSign()) + type = "signs"; + else if (target->IsObject()) + type = "objects"; + else if (target->IsNPC()) + type = "npcs"; + else if (target->IsGroundSpawn()) + type = "ground"; + else + type = "spawn"; + + spawn_id = client->GetPlayer()->GetTarget()->GetDatabaseID(); + } + + sprintf(command, url.c_str(), zone_id, type.c_str(), spawn_id); + + packet->setDataByName("accept_command", command); + } + else if (rule_manager.GetGlobalRule(R_World, EditorIncludeID)->GetBool()) { + char command[255]; + url = "browser " + url; + if (client->GetPlayer()->GetTarget()) + sprintf(command, url.c_str(), client->GetPlayer()->GetTarget()->GetDatabaseID()); + + packet->setDataByName("accept_command", command); + } + else { + string command = "browser " + url; + packet->setDataByName("accept_command", command.c_str()); + } + + packet->setDataByName("text", "Open the web editor?"); + packet->setDataByName("accept_text", "Open"); + + packet->setDataByName("cancel_text", "Cancel"); + // No clue if we even need the following 2 unknowns, just added them so the packet matches what live sends + packet->setDataByName("unknown2", 50); + packet->setDataByName("unknown4", 1); + + client->QueuePacket(packet->serialize()); + safe_delete(packet); + } +} + +void Commands::Command_AcceptResurrection(Client* client, Seperator* sep) { + if(!client || !sep || client->GetPlayer()->GetID() != atoul(sep->arg[0])) + return; + client->GetResurrectMutex()->writelock(__FUNCTION__, __LINE__); + if(client->GetCurrentRez()->active) + client->AcceptResurrection(); + client->GetResurrectMutex()->releasewritelock(__FUNCTION__, __LINE__); +} + +void Commands::Command_DeclineResurrection(Client* client, Seperator* sep) { + if(!client || !sep || client->GetPlayer()->GetID() != atoul(sep->arg[0])) + return; + client->GetResurrectMutex()->writelock(__FUNCTION__, __LINE__); + if(client->GetCurrentRez()->active) + client->GetCurrentRez()->should_delete = true; + client->GetResurrectMutex()->releasewritelock(__FUNCTION__, __LINE__); +} +void Commands::Switch_AA_Profile(Client* client, Seperator* sep) { + PrintSep(sep, "Switch_AA_Profile"); + if (sep && sep->IsSet(0)) { + string type = sep->arg[0]; + int8 newtemplate = atoul(sep->arg[1]); + master_aa_list.DisplayAA(client, newtemplate, 1); + } +} +void Commands::Get_AA_Xml(Client* client, Seperator* sep) { + PrintSep(sep, "Get_AA_Xml"); + if (sep && sep->IsSet(0)) { + string tabnum = sep->arg[0]; + string spellid = sep->arg[1]; + + + + } +} +void Commands::Add_AA(Client* client, Seperator* sep) { + PrintSep(sep, "Add_AA"); + if (sep && sep->IsSet(0)) { + int32 spell_id = atoul(sep->arg[1]); + int8 spell_tier = 0; + spell_tier = client->GetPlayer()->GetSpellTier(spell_id); + AltAdvanceData* data = master_aa_list.GetAltAdvancement(spell_id); + // addspellbookentry here + if (spell_tier >= data->maxRank) { + return; + } + if (!spell_tier) { + spell_tier = 1; + } + if (!client->GetPlayer()->HasSpell(spell_id, 0, true)) + { + Spell* spell = master_spell_list.GetSpell(spell_id, spell_tier); + client->GetPlayer()->AddSpellBookEntry(spell_id, 1, client->GetPlayer()->GetFreeSpellBookSlot(spell->GetSpellData()->spell_book_type), spell->GetSpellData()->spell_book_type, spell->GetSpellData()->linked_timer, true); + client->GetPlayer()->UnlockSpell(spell); + client->SendSpellUpdate(spell); + } + else + { + Spell* spell = master_spell_list.GetSpell(spell_id, spell_tier + 1 ); + int8 old_slot = client->GetPlayer()->GetSpellSlot(spell->GetSpellID()); + client->GetPlayer()->RemoveSpellBookEntry(spell->GetSpellID()); + client->GetPlayer()->AddSpellBookEntry(spell->GetSpellID(), spell->GetSpellTier(), old_slot, spell->GetSpellData()->spell_book_type, spell->GetSpellData()->linked_timer, true); + client->GetPlayer()->UnlockSpell(spell); + client->SendSpellUpdate(spell); + } + + + // cast spell here + if (!spell_tier) + spell_tier = 1; + Spell* spell = master_spell_list.GetSpell(spell_id, spell_tier); + if (spell) { + client->GetCurrentZone()->ProcessSpell(spell, client->GetPlayer(), client->GetPlayer()); + } + } + else { + client->SimpleMessage(CHANNEL_COLOR_YELLOW, "Usage: /useability {spell_id} [spell_tier]"); + } + master_aa_list.DisplayAA(client, 0, 0); +} +void Commands::Commit_AA_Profile(Client* client, Seperator* sep) { + PrintSep(sep, "Commit_AA_Profile"); + if (sep && sep->IsSet(0)) { + + + } +} +void Commands::Begin_AA_Profile(Client* client, Seperator* sep) { + PrintSep(sep, "Begin_AA_Profile"); + if (sep && sep->IsSet(0)) { + master_aa_list.DisplayAA(client, 100, 2); + } +} +void Commands::Back_AA(Client* client, Seperator* sep) { + if (sep && sep->IsSet(0)) { + PrintSep(sep, "Back_AA"); + + } +} +void Commands::Remove_AA(Client* client, Seperator* sep) { + if (sep && sep->IsSet(0)) { + PrintSep(sep, "Remove_AA"); + + } +} + +void Commands::Cancel_AA_Profile(Client* client, Seperator* sep) { + MasterAAList master_aa_list; + PrintSep(sep, "Cancel_AA_Profile"); + master_aa_list.DisplayAA(client, 0, 0); + +} +void Commands::Save_AA_Profile(Client* client, Seperator* sep) { + if (sep && sep->IsSet(0)) { + PrintSep(sep, "Save_AA_Profile"); + + } +} \ No newline at end of file diff --git a/EQ2/source/WorldServer/Commands/Commands.h b/EQ2/source/WorldServer/Commands/Commands.h new file mode 100644 index 000000000..1ceddd9f1 --- /dev/null +++ b/EQ2/source/WorldServer/Commands/Commands.h @@ -0,0 +1,894 @@ +/* + EQ2Emulator: Everquest II Server Emulator + Copyright (C) 2007 EQ2EMulator Development Team (http://www.eq2emulator.net) + + This file is part of EQ2Emulator. + + EQ2Emulator is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + EQ2Emulator is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with EQ2Emulator. If not, see . +*/ +#ifndef __EQ2_COMMANDS__ +#define __EQ2_COMMANDS__ +#include "../../common/DataBuffer.h" +#include "../../common/MiscFunctions.h" +#include "../../common/types.h" +#include "../../common/opcodemgr.h" +#include +#include +#include +#include "../../common/debug.h" +using namespace std; + +class Client; +class Spawn; +class ZoneServer; +extern mapEQOpcodeManager; + +#define CHANNEL_COLOR_RED 3 +#define CHANNEL_COLOR_CHAT_RELATIONSHIP 4 +#define CHANNEL_COLOR_YELLOW 5 +#define CHANNEL_COLOR_REVIVE 12 +#define CHANNEL_COLOR_MAIL 12 +#define CHANNEL_COLOR_WHITE 12 +#define CHANNEL_COLOR_GROUP 15 +#define CHANNEL_COLOR_GUILD 18 +#define CHANNEL_COLOR_GUILD_MOTD 20 +#define CHANNEL_COLOR_GUILD_EVENT 22 +#define CHANNEL_COLOR_EXP 36 +#define CHANNEL_COLOR_SKILL 39 +#define CHANNEL_COLOR_FACTION 40 +#define CHANNEL_COLOR_SPELL_EFFECT 42 +#define CHANNEL_COLOR_SPELL 47 +#define CHANNEL_COLOR_SPELL_INTERRUPT 52 +#define CHANNEL_COLOR_SPELL_FADE 51 +#define CHANNEL_COLOR_COMBAT 60 +#define CHANNEL_COLOR_LOOT 81 +#define CHANNEL_COLOR_NEW_LOOT 84 +#define CHANNEL_COLOR_NEWEST_LOOT 89 +#define CHANNEL_COLOR_MERCHANT 88 +#define CHANNEL_COLOR_GROUP_INVITE 89 +#define CHANNEL_COLOR_GUILD_MSGS 94 +#define CHANNEL_COLOR_HARVEST 96 + +#define UPDATE_COLOR_WHITE 254 // For UpdateText + +#define CHANNEL_SAY 8 +#define CHANNEL_SHOUT 9 +#define CHANNEL_EMOTE 10 +#define CHANNEL_GROUP 15 +#define CHANNEL_RAID 16 +#define CHANNEL_GUILD 18 +#define CHANNEL_OFFICER 19 +#define CHANNEL_SAYTARGET 25 // you say to xxx +#define CHANNEL_TELL 28 // you tell xxx +#define CHANNEL_OOC 32 +//#define CHANNEL_AUCTION 30 + +#define CHANNEL_GAME_TEXT 1 +#define CHANNEL_DEFAULT 2 +#define CHANNEL_ERROR 3 +#define CHANNEL_STATUS 4 +#define CHANNEL_MOTD 5 +#define CHANNEL_CHAT_TEXT 6 +#define CHANNEL_NEARBY_CHAT 7 +#define CHANNEL_SAY 8 +#define CHANNEL_SHOUT 9 +#define CHANNEL_EMOTE 10 +#define CHANNEL_YELL 11 +#define CHANNEL_NARRATIVE 12 +#define CHANNEL_NONPLAYER_SAY 13 +#define CHANNEL_GROUP_CHAT 14 +#define CHANNEL_GROUP_SAY 15 // Use this for group chat +#define CHANNEL_RAID_SAY 16 +#define CHANNEL_GUILD_CHAT 17 +#define CHANNEL_GUILD_SAY 18 // Use this for guild chat +#define CHANNEL_OFFICER_SAY 19 +#define CHANNEL_GUILD_MOTD 20 +#define CHANNEL_GUILD_MEMBER_ONLINE 21 +#define CHANNEL_GUILD_EVENT 22 +#define CHANNEL_GUILD_RECRUITING_PAGE 23 +#define CHANNEL_GUILD_RECRUITING_PAGE_OTHER 24 +#define CHANNEL_PRIVATE_CHAT 25 +#define CHANNEL_NONPLAYER_TELL 26 +#define CHANNEL_OBJECT_TEXT 27 +#define CHANNEL_PRIVATE_TELL 28 +#define CHANNEL_TELL_FROM_CS 29 +#define CHANNEL_ARENA 30 +#define CHANNEL_CHAT_CHANNEL_TEXT 31 +#define CHANNEL_OUT_OF_CHARACTER 32 +#define CHANNEL_AUCTION 33 +// 34 is nothing, message with 34 as type will not show on client +#define CHANNEL_CHARACTER_TEXT 35 +#define CHANNEL_REWARD 36 +#define CHANNEL_DEATH 37 +#define CHANNEL_PET_CHAT 38 +#define CHANNEL_SKILL 39 +#define CHANNEL_FACTION 40 +// Combat related chat channels start here +#define CHANNEL_SPELLS 41 +#define CHANNEL_YOU_CAST 42 +#define CHANNEL_YOU_FAIL 43 +#define CHANNEL_CRITICAL_CAST 44 +#define CHANNEL_FRIENDLY_CAST 45 +#define CHANNEL_FRIENDLY_FAIL 46 +#define CHANNEL_OTHER_CAST 47 +#define CHANNEL_OTHER_FAIL 48 +#define CHANNEL_HOSTILE_CAST 49 +#define CHANNEL_HOSTILE_FAIL 50 +#define CHANNEL_WORN_OFF 51 +#define CHANNEL_SPELLS_OTHER 52 +#define CHANNEL_HEAL_SPELLS 53 +#define CHANNEL_HEALS 54 +#define CHANNEL_FRIENDLY_HEALS 55 +#define CHANNEL_OTHER_HEALS 56 +#define CHANNEL_HOSTILE_HEALS 57 +#define CHANNEL_CRITICAL_HEALS 58 +#define CHANNEL_COMBAT 59 +#define CHANNEL_GENERAL_COMBAT 60 +#define CHANNEL_HEROIC_OPPORTUNITY 61 +#define CHANNEL_NON_MELEE_DAMAGE 62 +#define CHANNEL_DAMAGE_SHIELD 63 +#define CHANNEL_WARD 64 +#define CHANNEL_DAMAGE_INTERCEPT 65 +#define CHANNEL_MELEE_COMBAT 66 +#define CHANNEL_WARNINGS 67 +#define CHANNEL_YOU_HIT 68 +#define CHANNEL_YOU_MISS 69 +#define CHANNEL_ATTACKER_HITS 70 +#define CHANNEL_ATTACKER_MISSES 71 +#define CHANNEL_YOUR_PET_HITS 72 +#define CHANNEL_YOUR_PET_MISSES 73 +#define CHANNEL_ATTACKER_HITS_PET 74 +#define CHANNEL_ATTACKER_MISSES_PET 75 +#define CHANNEL_OTHER_HIT 76 +#define CHANNEL_OTHER_MISSES 77 +#define CHANNEL_CRITICAL_HIT 78 +#define CHANNEL_HATE_ADJUSTMENTS 79 +#define CHANNEL_YOUR_HATE 80 +#define CHANNEL_OTHERS_HATE 81 +#define CHANNEL_DISPELS_AND_CURES 82 +#define CHANNEL_DISPEL_YOU 83 +#define CHANNEL_DISPEL_OTHER 84 +#define CHANNEL_CURE_YOU 85 +#define CHANNEL_CURE_OTHER 86 +// End of combat chat channels +#define CHANNEL_OTHER 87 +#define CHANNEL_MONEY_SPLIT 88 +#define CHANNEL_LOOT 89 +#define CHANNEL_LOOT_ROLLS 90 +#define CHANNEL_COMMAND_TEXT 91 +#define CHANNEL_BROADCAST 92 // Goes to all chat windows no matter what +#define CHANNEL_WHO 93 +#define CHANNEL_COMMANDS 94 +#define CHANNEL_MERCHANT 95 +#define CHANNEL_MERCHANT_BUY_SELL 96 +#define CHANNEL_CONSIDER_MESSAGE 97 +#define CHANNEL_CON_MINUS_2 98 +#define CHANNEL_CON_MINUS_1 99 +#define CHANNEL_CON_0 100 +#define CHANNEL_CON_1 101 +#define CHANNEL_CON_2 102 +#define CHANNEL_TRADESKILLS 103 +#define CHANNEL_HARVESTING 104 +#define CHANNEL_HARVESTING_WARNINGS 105 +// 106 is nothing, message sent with this channel won't display in the client +#define CHANNEL_VOICE_CHAT 107 +// 108+ will crash the client DO NOT USE + +/* Using this in the /zone details command so that we do not have to store a whole zone in memory while changing zone attributes. Also, + ran into a problem when deleting a zone pointer (for zones that were not running), it would try to shut down a zone which was not + running, causing world to crash. */ +struct ZoneInfo { + int32 id; + int8 expansion_id; + char name[64]; + char file[64]; + char description[256]; + float safe_x; + float safe_y; + float safe_z; + float underworld; + int8 min_recommended; + int8 max_recommended; + char zone_type[64]; + bool always_loaded; + bool city_zone; + sint16 min_status; + int16 min_level; + int16 max_level; + int8 start_zone; + int8 instance_type; + int32 default_reenter_time; + int32 default_reset_time; + int32 default_lockout_time; + int8 force_group_to_zone; + char lua_script[256]; + int32 shutdown_timer; + char zone_motd[256]; + float xp_modifier; + int16 min_version; + bool weather_allowed; + int32 ruleset_id; +}; + +class EQ2_CommandString : public DataBuffer{ +public: + EQ2_CommandString(){ handler = 0; } + EQ2_CommandString(uchar* buffer, int32 size){ + InitializeLoadData(buffer, size); + LoadData(handler); + LoadDataString(command); + } + EQ2_16BitString command; + int16 handler; +}; +class EQ2_RemoteCommandString : public DataBuffer{ +public: + EQ2_RemoteCommandString(){ handler = 0; } + EQ2_RemoteCommandString(char* name, int32 in_handler, sint16 in_status){ + command.data = string(name); + command.size = command.data.length(); + handler = in_handler; + required_status = in_status; + } + EQ2_RemoteCommandString(uchar* buffer, int32 size){ + required_status = 0; + InitializeLoadData(buffer, size); + LoadData(handler); + LoadDataString(command); + } + + EQ2_8BitString command; + int16 handler; + sint16 required_status; +}; +class RemoteCommands { +public: + RemoteCommands(){ num_commands = 0; buffer.clear(); } + int16 num_commands; + vector commands; + void addCommand(EQ2_RemoteCommandString add){ commands.push_back(add); num_commands++;} + void AddSubCommand(string command, EQ2_RemoteCommandString subcommand){ + subcommands[command][subcommand.command.data] = subcommand; + } + bool validSubCommand(string command, string subcommand){ + if(subcommands.count(command) > 0 && subcommands[command].count(subcommand) > 0) + return true; + return false; + } + void addZero(){ + num_commands++; + EQ2_RemoteCommandString add; + add.command.size = 0; + commands.push_back(add); + } + void CheckAddSubCommand(string command, EQ2_RemoteCommandString subcommand){ + vector::iterator itr; + for(itr = commands.begin(); itr != commands.end();itr++){ + if((*itr).command.data == command){ + AddSubCommand(command, subcommand); + return; + } + } + // TODO: cannot seem to use LogWrite in this .h file! + printf("Unable to find parent command '%s' for subcommand: '%s'\n\tEvery subcommand must have a parent command!", command.c_str(), subcommand.command.data.c_str()); + } + void AddDataCommand(EQ2_RemoteCommandString* command){ + buffer.append((char*)&command->command.size, sizeof(command->command.size)); + if(command->command.size>0) + buffer.append(command->command.data); + } + int32 GetCommandHandler(const char* name){ + if(!name) + return 0xFFFFFFFF; + int8 name_size = strlen(name); + for(int32 i = 0; i < commands.size(); i++){ + if(commands[i].command.size > 0){ + if(strncasecmp(commands[i].command.data.c_str(), name, name_size) == 0) + return commands[i].handler; + } + } + return 0xFFFFFFFF; + } + string buffer; + EQ2Packet* serialize(); + map > subcommands; +}; +class Commands{ +public: + Commands(); + ~Commands(); + bool SetSpawnCommand(Client* client, Spawn* target, int8 type, const char* value, bool send_update = true, bool temporary = false, string* temp_value = 0); + bool SetZoneCommand(Client* client, int32 zone_id, ZoneServer* zone, int8 type, const char* value); + RemoteCommands* GetRemoteCommands() { return remote_commands; } + void Process(int32 index, EQ2_16BitString* command_parms, Client* client); + int32 GetCommandHandler(const char* name){ + return remote_commands->GetCommandHandler(name); + } + int32 GetSpawnSetType(string val); + + // JA: New Command handlers + void Command_AcceptAdvancement(Client* client, Seperator* sep); + void Command_AFK(Client* client, Seperator* sep); + void Command_Appearance(Client* client, Seperator* sep, int handler); + void Command_CancelMaintained(Client* client, Seperator* sep); + void Command_Claim(Client* client, Seperator* sep); + void Command_ClearAllQueued(Client* client); + void Command_Create(Client* client, Seperator* sep); + void Command_CreateFromRecipe(Client* client, Seperator* sep); + void Command_Distance(Client* client); + void Command_Duel(Client* client, Seperator* sep); + void Command_DuelBet(Client* client, Seperator* sep); + void Command_DuelAccept(Client* client, Seperator* sep); + void Command_DuelDecline(Client* client, Seperator* sep); + void Command_DuelSurrender(Client* client, Seperator* sep); + void Command_DuelToggle(Client* client, Seperator* sep); + void Command_EntityCommand(Client* client, Seperator* sep, int handler); + void Command_Follow(Client* client, Seperator* sep); + void Command_StopFollow(Client* client, Seperator* sep); + void Command_Grid(Client* client); + void Command_Guild(Client* client, Seperator* sep); + void Command_CreateGuild(Client* client); + void Command_SetGuildOfficerNote(Client* client, Seperator* sep); + void Command_SetGuildMemberNote(Client* client, Seperator* sep); + void Command_OfficerSay(Client* client, Seperator* sep); + void Command_GuildSay(Client* client, Seperator* sep); + void Command_Guilds(Client* client); + void Command_GuildsAdd(Client* client, Seperator* sep); + void Command_GuildsCreate(Client* client, Seperator* sep); + void Command_GuildsDelete(Client* client, Seperator* sep); + void Command_GuildsList(Client* client); + void Command_GuildsRemove(Client* client, Seperator* sep); + void Command_InspectPlayer(Client* client, Seperator* sep); + void Command_Inventory(Client* client, Seperator* sep, EQ2_RemoteCommandString* command); + void Command_IRC(Client* client, Seperator* sep); + void Command_Languages(Client* client, Seperator* sep); + void Command_SetLanguage(Client* client, Seperator* sep); + void Command_LastName(Client* client, Seperator* sep); + void Command_ConfirmLastName(Client* client, Seperator* sep); + void Command_Location(Client* client); + void Command_LocationAdd(Client* client, Seperator* sep); + void Command_LocationCreate(Client* client, Seperator* sep); + void Command_LocationDelete(Client* client, Seperator* sep); + void Command_LocationList(Client* client, Seperator* sep); + void Command_LocationRemove(Client* client, Seperator* sep); + void Command_Merchant(Client* client, Seperator* sep, int handler); + + void Command_Modify(Client* client); // usage function + void Command_ModifyCharacter(Client* client, Seperator* sep); + void Command_ModifyFaction(Client* client, Seperator* sep); + void Command_ModifyGuild(Client* client, Seperator* sep); + void Command_ModifyItem(Client* client, Seperator* sep); + void Command_ModifyQuest(Client* client, Seperator* sep); + void Command_ModifySkill(Client* client, Seperator* sep); + void Command_ModifySpawn(Client* client, Seperator* sep); + void Command_ModifySpell(Client* client, Seperator* sep); + void Command_ModifyZone(Client* client, Seperator* sep); + + void Command_MOTD(Client* client); + void Command_Pet(Client* client, Seperator* sep); + void Command_PetName(Client* client, Seperator* sep); + void Command_NamePet(Client* client, Seperator* sep); + void Command_Rename(Client* client, Seperator* sep); + void Command_ConfirmRename(Client* client, Seperator* sep); + void Command_PetOptions(Client* client, Seperator* sep); + void Command_Random(Client* client, Seperator* sep); + void Command_Randomize(Client* client, Seperator* sep); + void Command_ReportBug(Client* client, Seperator* sep); + void Command_ShowCloak(Client* client, Seperator* sep); + void Command_ShowHelm(Client* client, Seperator* sep); + void Command_ShowHood(Client* client, Seperator* sep); + void Command_ShowHoodHelm(Client* client, Seperator* sep); + void Command_ShowRanged(Client* client, Seperator* sep); + void Command_Skills(Client* client, Seperator* sep, int handler); + void Command_SpawnTemplate(Client* client, Seperator* sep); + void Command_Speed(Client* client, Seperator* sep); + void Command_StationMarketPlace(Client* client, Seperator* sep); + void Command_StopEating(Client* client); + void Command_StopDrinking(Client* client); + void Command_Test(Client* client, EQ2_16BitString* command_parms); + void Command_Title(Client* client); + void Command_TitleList(Client* client); + void Command_TitleSetPrefix(Client* client, Seperator* sep); + void Command_TitleSetSuffix(Client* client, Seperator* sep); + void Command_TitleFix(Client* client, Seperator* sep); + void Command_Toggle_Anonymous(Client* client); + void Command_Toggle_AutoConsume(Client* client, Seperator* sep); + void Command_Toggle_BonusXP(Client* client); + void Command_Toggle_CombatXP(Client* client); + void Command_Toggle_GMHide(Client* client); + void Command_Toggle_GMVanish(Client* client); + void Command_Toggle_Illusions(Client* client, Seperator* sep); + void Command_Toggle_LFG(Client* client); + void Command_Toggle_LFW(Client* client); + void Command_Toggle_QuestXP(Client* client); + void Command_Toggle_Roleplaying(Client* client); + void Command_Toggle_Duels(Client* client); + void Command_Toggle_Trades(Client* client); + void Command_Toggle_Guilds(Client* client); + void Command_Toggle_Groups(Client* client); + void Command_Toggle_Raids(Client* client); + void Command_Toggle_LON(Client* client); + void Command_Toggle_VoiceChat(Client* client); + void Command_Track(Client* client); + void Command_TradeStart(Client* client, Seperator* sep); + void Command_TradeAccept(Client* client, Seperator* sep); + void Command_TradeReject(Client* client, Seperator* sep); + void Command_TradeCancel(Client* client, Seperator* sep); + void Command_TradeSetCoin(Client* client, Seperator* sep); + void Command_TradeAddCoin(Client* client, Seperator* sep, int handler); + void Command_TradeRemoveCoin(Client* client, Seperator* sep, int handler); + void Command_TradeAddItem(Client* client, Seperator* sep); + void Command_TradeRemoveItem(Client* client, Seperator* sep); + void Command_TryOn(Client* client, Seperator* sep); + void Command_JoinChannel(Client *client, Seperator *sep); + void Command_JoinChannelFromLoad(Client *client, Seperator *sep); + void Command_TellChannel(Client *client, Seperator *sep); + void Command_LeaveChannel(Client *client, Seperator *sep); + void Command_WeaponStats(Client *client); + void Command_WhoChannel(Client *client, Seperator *sep); + void Command_ZoneSafeCoords(Client *client, Seperator *sep); + void Command_ZoneDetails(Client *client, Seperator *sep); + void Command_ZoneSet(Client *client, Seperator *sep); + void Command_Rain(Client* client, Seperator* sep); + void Command_Wind(Client* client, Seperator* sep); + void Command_SendMerchantWindow(Client* client, Seperator* sep, bool sell = false); + void Command_Weather(Client* client, Seperator* sep); + void Command_Select(Client* client, Seperator* sep); + void Command_ConsumeFood(Client* client, Seperator* sep); + void Command_Aquaman(Client* client, Seperator* sep); + void Command_Attune_Inv(Client* client, Seperator* sep); + void Command_Player(Client* client, Seperator* sep); + void Command_Player_Coins(Client* client, Seperator* sep); + void Command_Reset_Zone_Timer(Client* client, Seperator* sep); + void Command_AchievementAdd(Client* client, Seperator* sep); + void Command_Editor(Client* client, Seperator* sep); + void Command_AcceptResurrection(Client* client, Seperator* sep); + void Command_DeclineResurrection(Client* client, Seperator* set); + + // Bot Commands + void Command_Bot(Client* client, Seperator* sep); + void Command_Bot_Create(Client* client, Seperator* sep); + void Command_Bot_Customize(Client* client, Seperator* sep); + void Command_Bot_Spawn(Client* client, Seperator* sep); + void Command_Bot_List(Client* client, Seperator* sep); + void Command_Bot_Inv(Client* client, Seperator* sep); + void Command_Bot_Settings(Client* client, Seperator* sep); + void Command_Bot_Help(Client* client, Seperator* sep); + + // AA Commands + void Get_AA_Xml(Client* client, Seperator* sep); + void Add_AA(Client* client, Seperator* sep); + void Commit_AA_Profile(Client* client, Seperator* sep); + void Begin_AA_Profile(Client* client, Seperator* sep); + void Back_AA(Client* client, Seperator* sep); + void Remove_AA(Client* client, Seperator* sep); + void Switch_AA_Profile(Client* client, Seperator* sep); + void Cancel_AA_Profile(Client* client, Seperator* sep); + void Save_AA_Profile(Client* client, Seperator* sep); +private: + RemoteCommands* remote_commands; + map spawn_set_values; + map zone_set_values; +}; +#define SPAWN_SET_VALUE_LIST 0 +#define SPAWN_SET_VALUE_NAME 1 +#define SPAWN_SET_VALUE_LEVEL 2 +#define SPAWN_SET_VALUE_DIFFICULTY 3 +#define SPAWN_SET_VALUE_MODEL_TYPE 4 +#define SPAWN_SET_VALUE_CLASS 5 +#define SPAWN_SET_VALUE_GENDER 6 +#define SPAWN_SET_VALUE_SHOW_NAME 7 +#define SPAWN_SET_VALUE_ATTACKABLE 8 +#define SPAWN_SET_VALUE_SHOW_LEVEL 9 +#define SPAWN_SET_VALUE_TARGETABLE 10 +#define SPAWN_SET_VALUE_SHOW_COMMAND_ICON 11 +#define SPAWN_SET_VALUE_HAND_ICON 12 +#define SPAWN_SET_VALUE_HAIR_TYPE 13 +#define SPAWN_SET_VALUE_FACIAL_HAIR_TYPE 14 +#define SPAWN_SET_VALUE_WING_TYPE 15 +#define SPAWN_SET_VALUE_CHEST_TYPE 16 +#define SPAWN_SET_VALUE_LEGS_TYPE 17 +#define SPAWN_SET_VALUE_SOGA_HAIR_TYPE 18 +#define SPAWN_SET_VALUE_SOGA_FACIAL_HAIR_TYPE 19 +#define SPAWN_SET_VALUE_SOGA_MODEL_TYPE 20 +#define SPAWN_SET_VALUE_SIZE 21 +#define SPAWN_SET_VALUE_HP 22 +#define SPAWN_SET_VALUE_POWER 23 +#define SPAWN_SET_VALUE_HEROIC 24 +#define SPAWN_SET_VALUE_RESPAWN 25 +#define SPAWN_SET_VALUE_X 26 +#define SPAWN_SET_VALUE_Y 27 +#define SPAWN_SET_VALUE_Z 28 +#define SPAWN_SET_VALUE_HEADING 29 +#define SPAWN_SET_VALUE_LOCATION 30 +#define SPAWN_SET_VALUE_COMMAND_PRIMARY 31 +#define SPAWN_SET_VALUE_COMMAND_SECONDARY 32 +#define SPAWN_SET_VALUE_VISUAL_STATE 33 +#define SPAWN_SET_VALUE_ACTION_STATE 34 +#define SPAWN_SET_VALUE_MOOD_STATE 35 +#define SPAWN_SET_VALUE_INITIAL_STATE 36 +#define SPAWN_SET_VALUE_ACTIVITY_STATE 37 +#define SPAWN_SET_VALUE_COLLISION_RADIUS 38 +#define SPAWN_SET_VALUE_FACTION 39 +#define SPAWN_SET_VALUE_SPAWN_SCRIPT 40 +#define SPAWN_SET_VALUE_SPAWNENTRY_SCRIPT 41 +#define SPAWN_SET_VALUE_SPAWNLOCATION_SCRIPT 42 +#define SPAWN_SET_VALUE_SUB_TITLE 43 +#define SPAWN_SET_VALUE_EXPIRE 45 +#define SPAWN_SET_VALUE_EXPIRE_OFFSET 46 +#define SPAWN_SET_VALUE_X_OFFSET 47 +#define SPAWN_SET_VALUE_Y_OFFSET 48 +#define SPAWN_SET_VALUE_Z_OFFSET 49 +#define SPAWN_SET_VALUE_DEVICE_ID 50 +#define SPAWN_SET_VALUE_PITCH 51 +#define SPAWN_SET_VALUE_ROLL 52 +#define SPAWN_SET_VALUE_HIDE_HOOD 53 +#define SPAWN_SET_VALUE_EMOTE_STATE 54 +#define SPAWN_SET_VALUE_ICON 55 +#define SPAWN_SET_VALUE_PREFIX 56 +#define SPAWN_SET_VALUE_SUFFIX 57 +#define SPAWN_SET_VALUE_LASTNAME 58 + +#define ZONE_SET_VALUE_EXPANSION_ID 0 +#define ZONE_SET_VALUE_NAME 1 +#define ZONE_SET_VALUE_FILE 2 +#define ZONE_SET_VALUE_DESCRIPTION 3 +#define ZONE_SET_VALUE_SAFE_X 4 +#define ZONE_SET_VALUE_SAFE_Y 5 +#define ZONE_SET_VALUE_SAFE_Z 6 +#define ZONE_SET_VALUE_UNDERWORLD 7 +#define ZONE_SET_VALUE_MIN_RECOMMENDED 8 +#define ZONE_SET_VALUE_MAX_RECOMMENDED 9 +#define ZONE_SET_VALUE_ZONE_TYPE 10 +#define ZONE_SET_VALUE_ALWAYS_LOADED 11 +#define ZONE_SET_VALUE_CITY_ZONE 12 +#define ZONE_SET_VALUE_MIN_STATUS 13 +#define ZONE_SET_VALUE_MIN_LEVEL 14 +#define ZONE_SET_VALUE_START_ZONE 15 +#define ZONE_SET_VALUE_INSTANCE_TYPE 16 +#define ZONE_SET_VALUE_DEFAULT_REENTER_TIME 17 +#define ZONE_SET_VALUE_DEFAULT_RESET_TIME 18 +#define ZONE_SET_VALUE_DEFAULT_LOCKOUT_TIME 19 +#define ZONE_SET_VALUE_FORCE_GROUP_TO_ZONE 20 +#define ZONE_SET_VALUE_LUA_SCRIPT 21 +#define ZONE_SET_VALUE_SHUTDOWN_TIMER 22 +#define ZONE_SET_VALUE_ZONE_MOTD 23 +#define ZONE_SET_VALUE_MAX_LEVEL 24 +#define ZONE_SET_VALUE_WEATHER_ALLOWED 25 + +#define COMMAND_SPAWN 1 +#define COMMAND_RACE 2 +#define COMMAND_LEVEL 3 +#define COMMAND_CLASS 4 +#define COMMAND_GENDER 5 +#define COMMAND_NAME 6 +#define COMMAND_SAY 7 +#define COMMAND_TELL 8 +#define COMMAND_YELL 9 +#define COMMAND_SHOUT 10 +#define COMMAND_AUCTION 11 +#define COMMAND_OOC 12 +#define COMMAND_EMOTE 13 +#define COMMAND_GROUPSAY 14 +#define COMMAND_GROUPINVITE 15 +#define COMMAND_GROUPDISBAND 16 +#define COMMAND_GROUP 17 +#define COMMAND_CLAIM 18 +#define COMMAND_HAIL 19 +#define COMMAND_ZONE 20 +#define COMMAND_ADMINFLAG 21 +#define COMMAND_KICK 22 +#define COMMAND_BAN 23 +#define COMMAND_INVENTORY 24 +#define COMMAND_SUMMONITEM 25 +#define COMMAND_FOLLOW 26 +#define COMMAND_STOP_FOLLOW 27 +#define COMMAND_LASTNAME 28 +#define COMMAND_CONFIRMLASTNAME 29 +#define COMMAND_COLLECTION_ADDITEM 30 +#define COMMAND_COLLECTION_FILTER_MATCHITEM 31 +#define COMMAND_MOVE 32 +#define COMMAND_INFO 33 +#define COMMAND_USEABILITY 34 +#define COMMAND_ENABLE_ABILITY_QUE 35 +#define COMMAND_RELOAD_ITEMS 36 +#define COMMAND_AUTO_ATTACK 37 +#define COMMAND_WEATHER 38 +#define COMMAND_SPEED 39 +#define COMMAND_SPAWN_MOVE 40 +#define COMMAND_WHO 41 +#define COMMAND_VERSION 42 +#define COMMAND_SPAWN_ADD 43 +#define COMMAND_SPAWN_CREATE 44 +#define COMMAND_SPAWN_SET 45 +#define COMMAND_SPAWN_REMOVE 46 +#define COMMAND_SPAWN_LIST 47 +#define COMMAND_SIT 48 +#define COMMAND_STAND 49 +#define COMMAND_SPAWN_TARGET 50 +#define COMMAND_SPAWN_EQUIPMENT 51 +#define COMMAND_SPAWN_DETAILS 52 +#define COMMAND_SELECT_JUNCTION 53 +#define COMMAND_KILL 54 +#define COMMAND_SUMMON 55 +#define COMMAND_GOTO 56 +#define COMMAND_FLYMODE 57 +#define COMMAND_SETTIME 58 +#define COMMAND_RELOAD_SPELLS 59 +#define COMMAND_LOOT 60 +#define COMMAND_USE 61 +#define COMMAND_RELOADSPAWNSCRIPTS 62 +#define COMMAND_RELOADLUASYSTEM 63 +#define COMMAND_RELOADSTRUCTS 64 +#define COMMAND_RELOAD 65 +#define COMMAND_LOOT_LIST 66 +#define COMMAND_LOOT_SETCOIN 67 +#define COMMAND_LOOT_ADDITEM 68 +#define COMMAND_LOOT_REMOVEITEM 69 +#define COMMAND_BANK 70 +#define COMMAND_BANK_DEPOSIT 71 +#define COMMAND_BANK_WITHDRAWAL 72 +#define COMMAND_BANK_CANCEL 73 +#define COMMAND_ATTACK 74 +#define COMMAND_REPORT_BUG 75 +#define COMMAND_ACCEPT_QUEST 76 +#define COMMAND_DECLINE_QUEST 77 +#define COMMAND_DELETE_QUEST 78 +#define COMMAND_RELOAD_QUESTS 79 +#define COMMAND_SPAWN_COMBINE 80 +#define COMMAND_DEPOP 81 +#define COMMAND_REPOP 82 +#define COMMAND_LUADEBUG 83 +#define COMMAND_TEST 84 +#define COMMAND_ACCEPT_REWARD 85 +#define COMMAND_FROM_MERCHANT 86 +#define COMMAND_MERCHANT_BUY 87 +#define COMMAND_MERCHANT_SELL 88 +#define COMMAND_CANCEL_MERCHANT 89 +#define COMMAND_START_MERCHANT 90 +#define COMMAND_BUYBACK 91 +#define COMMAND_SEARCH_STORES 92 +#define COMMAND_INVULNERABLE 93 +#define COMMAND_SEARCH_STORES_PAGE 94 +#define COMMAND_BUY_FROM_BROKER 95 +#define COMMAND_GROUP_ACCEPT_INVITE 96 +#define COMMAND_GROUP_DECLINE_INVITE 97 +#define COMMAND_RELOAD_GROUNDSPAWNS 98 +#define COMMAND_RELOAD_SPAWNS 99 +#define COMMAND_LOCK 100 +#define COMMAND_GIVEITEM 101 +#define COMMAND_SET_COMBAT_VOICE 102 +#define COMMAND_SET_EMOTE_VOICE 103 +#define COMMAND_RELOAD_ZONESCRIPTS 104 +#define COMMAND_GROUP_LEAVE 105 +#define COMMAND_GROUP_MAKE_LEADER 106 +#define COMMAND_GROUP_KICK 107 +#define COMMAND_FRIEND_ADD 108 +#define COMMAND_FRIEND_REMOVE 109 +#define COMMAND_FRIENDS 110 +#define COMMAND_IGNORE_ADD 111 +#define COMMAND_IGNORE_REMOVE 112 +#define COMMAND_IGNORES 113 +#define COMMAND_MENDER_REPAIR 114 +#define COMMAND_MENDER_REPAIR_ALL 115 +#define COMMAND_REPAIR 116 +#define COMMAND_USE_ITEM 117 +#define COMMAND_WEAPONSTATS 118 +#define COMMAND_START_MAIL 119 +#define COMMAND_GET_MAIL_MESSAGE 120 +#define COMMAND_TAKE_MAIL_ATTACHMENTS 121 +#define COMMAND_REPORT_SPAM 122 +#define COMMAND_CANCEL_MAIL 123 +#define COMMAND_ADD_MAIL_PLAT 124 +#define COMMAND_ADD_MAIL_GOLD 125 +#define COMMAND_ADD_MAIL_SILVER 126 +#define COMMAND_ADD_MAIL_COPPER 127 +#define COMMAND_SET_MAIL_ITEM 128 +#define COMMAND_CANCEL_SEND_MAIL 129 +#define COMMAND_REMOVE_MAIL_PLAT 130 +#define COMMAND_REMOVE_MAIL_GOLD 131 +#define COMMAND_REMOVE_MAIL_SILVER 132 +#define COMMAND_REMOVE_MAIL_COPPER 133 +#define COMMAND_DELETE_MAIL_MESSAGE 134 +#define COMMAND_TRACK 135 +#define COMMAND_INSPECT_PLAYER 136 +#define COMMAND_PET 137 +#define COMMAND_PETNAME 138 +#define COMMAND_NAME_PET 139 +#define COMMAND_RENAME 140 +#define COMMAND_CONFIRMRENAME 141 +#define COMMAND_PETOPTIONS 142 +#define COMMAND_SPAWN_TEMPLATE 143 // JA: new /spawn template command +#define COMMAND_CANNEDEMOTE 144 +#define COMMAND_BROADCAST 145 +#define COMMAND_ANNOUNCE 146 +#define COMMAND_AFK 147 +#define COMMAND_TOGGLE_ANONYMOUS 148 +#define COMMAND_TOGGLE_LFW 149 +#define COMMAND_TOGGLE_LFG 150 +#define COMMAND_SHOW_RANGED 151 +#define COMMAND_TOGGLE_AUTOCONSUME 152 +#define COMMAND_SHOW_HELM 153 +#define COMMAND_SHOW_HOOD_OR_HELM 154 +#define COMMAND_SHOW_CLOAK 155 +#define COMMAND_STOP_EATING 156 +#define COMMAND_STOP_DRINKING 157 +#define COMMAND_TOGGLE_ILLUSIONS 158 +#define COMMAND_SHOW_HOOD 159 +#define COMMAND_TOGGLE_DUELS 160 +#define COMMAND_TOGGLE_TRADES 161 +#define COMMAND_TOGGLE_GUILDS 162 +#define COMMAND_TOGGLE_GROUPS 163 +#define COMMAND_TOGGLE_RAIDS 164 +#define COMMAND_TOGGLE_LON 165 + +#define COMMAND_TOGGLE_GM_HIDE 167 +#define COMMAND_TOGGLE_GM_VANISH 168 +#define COMMAND_SPAWN_GROUP 169 +#define COMMAND_TOGGLE_ROLEPLAYING 170 +#define COMMAND_TOGGLE_VCINVITE 171 +#define COMMAND_START_TRADE 172 +#define COMMAND_ACCEPT_TRADE 173 +#define COMMAND_REJECT_TRADE 174 +#define COMMAND_CANCEL_TRADE 175 +#define COMMAND_SET_TRADE_COIN 176 +#define COMMAND_ADD_TRADE_COPPER 177 +#define COMMAND_ADD_TRADE_SILVER 178 +#define COMMAND_ADD_TRADE_GOLD 179 +#define COMMAND_ADD_TRADE_PLAT 180 +#define COMMAND_REMOVE_TRADE_COPPER 181 +#define COMMAND_REMOVE_TRADE_SILVER 182 +#define COMMAND_REMOVE_TRADE_GOLD 183 +#define COMMAND_REMOVE_TRADE_PLAT 184 +#define COMMAND_ADD_TRADE_ITEM 185 +#define COMMAND_REMOVE_TRADE_ITEM 186 +#define COMMAND_TOGGLE_COMBAT_EXP 187 +#define COMMAND_TOGGLE_QUEST_EXP 188 +#define COMMAND_TOGGLE_BONUS_EXP 189 +#define COMMAND_ZONE_SHUTDOWN 190 +#define COMMAND_ZONE_SAFE 191 +#define COMMAND_ZONE_REVIVE 192 +#define COMMAND_RELOAD_ZONES 193 + +#define COMMAND_DUEL 200 +#define COMMAND_DUELBET 201 +#define COMMAND_DUEL_ACCEPT 202 +#define COMMAND_DUEL_DECLINE 203 +#define COMMAND_DUEL_SURRENDER 204 +#define COMMAND_DUEL_TOGGLE 205 + +#define COMMAND_ANIMTEST 211 +#define COMMAND_ITEMSEARCH 212 + +#define COMMAND_ACTION 232 // JA: What is this? Exists nowhere else... +#define COMMAND_SKILL_ADD 233 +#define COMMAND_SKILL_REMOVE 234 +#define COMMAND_SKILL_LIST 235 +#define COMMAND_SKILL 236 +#define COMMAND_ZONE_SET 237 +#define COMMAND_ZONE_DETAILS 238 +#define COMMAND_RANDOMIZE 239 +#define COMMAND_RELOAD_ENTITYCOMMANDS 240 +#define COMMAND_ENTITYCOMMAND 241 +#define COMMAND_ENTITYCOMMAND_LIST 242 +#define COMMAND_RELOAD_FACTIONS 243 +#define COMMAND_MERCHANT 244 +#define COMMAND_MERCHANT_LIST 245 +#define COMMAND_APPEARANCE 246 +#define COMMAND_APPEARANCE_LIST 247 +#define COMMAND_RELOAD_MAIL 248 +#define COMMAND_DISTANCE 249 +#define COMMAND_GUILDSAY 250 +#define COMMAND_OFFICERSAY 251 +#define COMMAND_GUILD 252 +#define COMMAND_SET_GUILD_MEMBER_NOTE 253 +#define COMMAND_SET_GUILD_OFFICER_NOTE 254 +#define COMMAND_RELOAD_GUILDS 255 +#define COMMAND_CREATE 256 +#define COMMAND_CREATE_GUILD 257 +#define COMMAND_GUILDS 258 +#define COMMAND_GUILDS_CREATE 259 +#define COMMAND_GUILDS_DELETE 260 +#define COMMAND_GUILDS_ADD 261 +#define COMMAND_GUILDS_REMOVE 262 +#define COMMAND_GUILDS_LIST 263 +#define COMMAND_LOTTO 264 +#define COMMAND_CLEAR_ALL_QUEUED 265 +#define COMMAND_SCRIBE_SCROLL_ITEM 266 +#define COMMAND_RELOAD_LOCATIONS 267 +#define COMMAND_LOCATION 268 +#define COMMAND_LOCATION_CREATE 269 +#define COMMAND_LOCATION_ADD 270 +#define COMMAND_GRID 271 +#define COMMAND_LOCATION_REMOVE 272 +#define COMMAND_LOCATION_DELETE 273 +#define COMMAND_LOCATION_LIST 274 +#define COMMAND_USE_EQUIPPED_ITEM 275 +#define COMMAND_CANCEL_MAINTAINED 276 +#define COMMAND_LOOT_CORPSE 277 +#define COMMAND_MOTD 278 +#define COMMAND_RANDOM 279 +#define COMMAND_TRY_ON 280 +#define COMMAND_TITLE 281 +#define COMMAND_GUILD_BANK 282 +#define COMMAND_GUILD_BANK_DEPOSIT 283 +#define COMMAND_GUILD_BANK_WITHDRAWAL 284 +#define COMMAND_GUILD_BANK_CANCEL 285 +#define COMMAND_TITLE_LIST 286 +#define COMMAND_TITLE_SETPREFIX 287 +#define COMMAND_TITLE_SETSUFFIX 288 +#define COMMAND_TITLE_FIX 289 +#define COMMAND_LANGUAGES 290 +#define COMMAND_SET_LANGUAGE 291 +#define COMMAND_IRC 292 +#define COMMAND_ACCEPT_ADVANCEMENT 293 + +#define COMMAND_JOIN_CHANNEL 294 +#define COMMAND_JOIN_CHANNEL_FROM_LOAD 295 +#define COMMAND_TELL_CHANNEL 296 +#define COMMAND_LEAVE_CHANNEL 297 +#define COMMAND_WHO_CHANNEL 298 + +#define COMMAND_CREATEFROMRECIPE 299 +#define COMMAND_RAIN 300 +#define COMMAND_TO_MERCHANT 301 +#define COMMAND_SELECT 302 +#define COMMAND_SMP 303 +#define COMMAND_CONSUME_FOOD 304 +#define COMMAND_AQUAMAN 305 +#define COMMAND_ATTUNE_INV 306 +#define COMMAND_PLAYER 307 +#define COMMAND_PLAYER_COINS 308 +#define COMMAND_RESET_ZONE_TIMER 309 +#define COMMAND_ACHIEVEMENT_ADD 310 +#define COMMAND_EDITOR 311 +#define COMMAND_ACCEPT_RESURRECTION 312 +#define COMMAND_DECLINE_RESURRECTION 313 +#define COMMAND_WIND 314 +#define COMMAND_READ 463 + +#define COMMAND_BOT 500 +#define COMMAND_BOT_CREATE 501 +#define COMMAND_BOT_CUSTOMIZE 502 +#define COMMAND_BOT_SPAWN 503 +#define COMMAND_BOT_LIST 504 +#define COMMAND_BOT_INV 505 +#define COMMAND_BOT_SETTINGS 506 +#define COMMAND_BOT_HELP 507 + +#define GET_AA_XML 751 +#define ADD_AA 752 +#define COMMIT_AA_PROFILE 753 +#define BEGIN_AA_PROFILE 754 +#define BACK_AA 755 +#define REMOVE_AA 756 +#define SWITCH_AA_PROFILE 757 +#define CANCEL_AA_PROFILE 758 +#define SAVE_AA_PROFILE 759 + + + + +#define COMMAND_MODIFY 1000 // INSERT INTO `commands`(`id`,`type`,`command`,`subcommand`,`handler`,`required_status`) VALUES ( NULL,'1','modify','','1000','200'); +#define COMMAND_MODIFY_CHARACTER 1001 +#define COMMAND_MODIFY_FACTION 1002 +#define COMMAND_MODIFY_GUILD 1003 +#define COMMAND_MODIFY_ITEM 1004 +#define COMMAND_MODIFY_QUEST 1005 +#define COMMAND_MODIFY_SKILL 1006 +#define COMMAND_MODIFY_SPAWN 1007 +#define COMMAND_MODIFY_SPELL 1008 +#define COMMAND_MODIFY_ZONE 1009 + +#endif diff --git a/EQ2/source/WorldServer/Commands/CommandsDB.cpp b/EQ2/source/WorldServer/Commands/CommandsDB.cpp new file mode 100644 index 000000000..32ba11189 --- /dev/null +++ b/EQ2/source/WorldServer/Commands/CommandsDB.cpp @@ -0,0 +1,322 @@ +/* + EQ2Emulator: Everquest II Server Emulator + Copyright (C) 2007 EQ2EMulator Development Team (http://www.eq2emulator.net) + + This file is part of EQ2Emulator. + + EQ2Emulator is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + EQ2Emulator is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with EQ2Emulator. If not, see . +*/ +#ifdef WIN32 + #include + #include +#endif +#include +#include +#include "../../common/Log.h" +#include "../WorldDatabase.h" +#include "Commands.h" +#include "ConsoleCommands.h" + + + +map* WorldDatabase::GetSpawnTemplateListByName(const char* name) +{ + LogWrite(COMMAND__DEBUG, 0, "Command", "Player listing spawn templates by template name ('%s')...", name); + + map* ret = 0; + string template_name = ""; + + Query query; + MYSQL_RES* result = query.RunQuery2(Q_SELECT, "SELECT id, name FROM spawn_templates WHERE name RLIKE '%s' LIMIT 0,10", getSafeEscapeString(name).c_str()); + if(result && mysql_num_rows(result) > 0) + { + ret = new map; + MYSQL_ROW row; + while(result && (row = mysql_fetch_row(result))) + { + template_name = string(row[1]); + (*ret)[atoul(row[0])] = template_name; + LogWrite(COMMAND__DEBUG, 5, "Command", "\t%u. '%s'", atoul(row[0]), template_name.c_str()); + } + } + return ret; +} + +map* WorldDatabase::GetSpawnTemplateListByID(int32 location_id) +{ + LogWrite(COMMAND__DEBUG, 0, "Command", "Player listing spawn templates by LocaionID: %u...", location_id); + + map* ret = 0; + string template_name = ""; + + Query query; + MYSQL_RES* result = query.RunQuery2(Q_SELECT, "SELECT id, name FROM spawn_templates WHERE spawn_location_id = %u", location_id); + if(result && mysql_num_rows(result) > 0) + { + ret = new map; + MYSQL_ROW row; + while(result && (row = mysql_fetch_row(result))) + { + template_name = string(row[1]); + (*ret)[atoul(row[0])] = template_name; + LogWrite(COMMAND__DEBUG, 5, "Command", "\t%u. '%s'", atoul(row[0]), template_name.c_str()); + } + } + return ret; +} + + +int32 WorldDatabase::SaveSpawnTemplate(int32 placement_id, const char* template_name) +{ + Query query; + + string str_name = getSafeEscapeString(template_name).c_str(); + LogWrite(COMMAND__DEBUG, 0, "Command", "Player saving spawn template '%s' for placement_id %u...", str_name.c_str(), placement_id); + + query.RunQuery2(Q_INSERT, "INSERT INTO spawn_templates (name, spawn_location_id) VALUES ('%s', %u)", str_name.c_str(), placement_id); + if(query.GetErrorNumber() && query.GetError() && query.GetErrorNumber() < 0xFFFFFFFF){ + LogWrite(COMMAND__ERROR, 0, "Command", "Error in SaveSpawnTemplate query '%s': %s", query.GetQuery(), query.GetError()); + return 0; + } + int32 ret = query.GetLastInsertedID(); + LogWrite(COMMAND__DEBUG, 0, "Command", "Success! Returning TemplateID: %u...", ret); + return ret; +} + +bool WorldDatabase::RemoveSpawnTemplate(int32 template_id) +{ + Query query; + + LogWrite(COMMAND__DEBUG, 0, "Command", "Player removing spawn template ID %u...", template_id); + + query.RunQuery2(Q_DELETE, "DELETE FROM spawn_templates WHERE id = %u", template_id); + if(query.GetErrorNumber() && query.GetError() && query.GetErrorNumber() < 0xFFFFFFFF){ + LogWrite(COMMAND__ERROR, 0, "Command", "Error in RemoveSpawnTemplate query '%s': %s", query.GetQuery(), query.GetError()); + return false; + } + + if (query.GetAffectedRows() > 0 ) + { + LogWrite(COMMAND__DEBUG, 0, "Command", "Success! Removed spawn template ID %u...", template_id); + return true; + } + + return false; +} + + +int32 WorldDatabase::CreateSpawnFromTemplateByID(Client* client, int32 template_id) +{ + Query query; + MYSQL_ROW row; + int32 spawn_location_id = 0; + float new_x = client->GetPlayer()->GetX(); + float new_y = client->GetPlayer()->GetY(); + float new_z = client->GetPlayer()->GetZ(); + float new_heading = client->GetPlayer()->GetHeading(); + + LogWrite(COMMAND__DEBUG, 0, "Command", "Creating spawn point from templateID %u...", template_id); + LogWrite(COMMAND__DEBUG, 5, "Command", "\tCoords: %.2f %.2f %.2f...", new_x, new_y, new_z); + + // find the spawn_location_id in the template we plan to duplicate + Query query1; + MYSQL_RES* result = query1.RunQuery2(Q_SELECT, "SELECT spawn_location_id FROM spawn_templates WHERE id = %u", template_id); + if (result && (row = mysql_fetch_row(result))) { + if (row[0]) + spawn_location_id = atoi(row[0]); + } + + if( spawn_location_id > 0 ) + { + LogWrite(COMMAND__DEBUG, 5, "Command", "\tUsing LocationID: %u...", spawn_location_id); + + // insert a new spawn_location_name record + string name = "TemplateGenerated"; + query.RunQuery2(Q_INSERT, "INSERT INTO spawn_location_name (name) VALUES ('%s')", name.c_str()); + if(query.GetErrorNumber() && query.GetError() && query.GetErrorNumber() < 0xFFFFFFFF){ + LogWrite(COMMAND__ERROR, 0, "Command", "Error in CreateSpawnFromTemplateByID query '%s': %s", query.GetQuery(), query.GetError()); + return 0; + } + int32 new_location_id = query.GetLastInsertedID(); + LogWrite(COMMAND__DEBUG, 5, "Command", "Created new Spawn Location: '%s' (%u)", name.c_str(), new_location_id); + + // get all spawn_location_entries that match the templates spawn_location_id value and insert as new + LogWrite(COMMAND__DEBUG, 5, "Command", "Finding existing spawn_location_entry(s) for location_id %u", spawn_location_id); + Query query2; + MYSQL_RES* result2 = query2.RunQuery2(Q_SELECT, "SELECT spawn_id, spawnpercentage FROM spawn_location_entry WHERE spawn_location_id = %u", spawn_location_id); + if(result2 && mysql_num_rows(result2) > 0){ + MYSQL_ROW row2; + while(result2 && (row2 = mysql_fetch_row(result2)) && row2[0]) + { + query.RunQuery2(Q_INSERT, "INSERT INTO spawn_location_entry (spawn_id, spawn_location_id, spawnpercentage) VALUES (%u, %u, %i)", + atoul(row2[0]), new_location_id, atoi(row2[1])); + if(query.GetErrorNumber() && query.GetError() && query.GetErrorNumber() < 0xFFFFFFFF){ + LogWrite(COMMAND__ERROR, 0, "Command", "Error in CreateSpawnFromTemplateByID query '%s': %s", query.GetQuery(), query.GetError()); + return 0; + } + LogWrite(COMMAND__DEBUG, 5, "Command", "Insert Entry for spawn_id %u, location_id %u, percentage %i", atoul(row2[0]), new_location_id, atoi(row2[1])); + } + } + + // get all spawn_location_placements that match the templates spawn_location_id value and insert as new + // Note: /spawn templates within current zone_id only, because of spawn_id issues (cannot template an Antonic spawn in Commonlands) + LogWrite(COMMAND__DEBUG, 5, "Command", "Finding existing spawn_location_placement(s) for location_id %u", spawn_location_id); + Query query3; + MYSQL_RES* result3 = query3.RunQuery2(Q_SELECT, "SELECT zone_id, x_offset, y_offset, z_offset, respawn, expire_timer, expire_offset, grid_id FROM spawn_location_placement WHERE spawn_location_id = %u", spawn_location_id); + if(result3 && mysql_num_rows(result3) > 0){ + MYSQL_ROW row3; + while(result3 && (row3 = mysql_fetch_row(result3)) && row3[0]) + { + query.RunQuery2(Q_INSERT, "INSERT INTO spawn_location_placement (zone_id, spawn_location_id, x, y, z, heading, x_offset, y_offset, z_offset, respawn, expire_timer, expire_offset, grid_id) VALUES (%i, %u, %2f, %2f, %2f, %2f, %2f, %2f, %2f, %i, %i, %i, %u)", + atoi(row3[0]), new_location_id, new_x, new_y, new_z, new_heading, atof(row3[1]), atof(row3[2]), atof(row3[3]), atoi(row3[4]), atoi(row3[5]), atoi(row3[6]), atoul(row3[7])); + if(query.GetErrorNumber() && query.GetError() && query.GetErrorNumber() < 0xFFFFFFFF){ + LogWrite(COMMAND__ERROR, 0, "Command", "Error in CreateSpawnFromTemplateByID query '%s': %s", query.GetQuery(), query.GetError()); + return 0; + } + LogWrite(COMMAND__DEBUG, 5, "Command", "Insert Placement at new coords for location_id %u", new_location_id); + } + } + LogWrite(COMMAND__DEBUG, 0, "Command", "Success! New spawn(s) from TemplateID %u created from location %u", template_id, spawn_location_id); + return new_location_id; + } + + return 0; +} + + +int32 WorldDatabase::CreateSpawnFromTemplateByName(Client* client, const char* template_name) +{ + Query query; + MYSQL_ROW row; + int32 template_id = 0; + int32 spawn_location_id = 0; + float new_x = client->GetPlayer()->GetX(); + float new_y = client->GetPlayer()->GetY(); + float new_z = client->GetPlayer()->GetZ(); + float new_heading = client->GetPlayer()->GetHeading(); + + LogWrite(COMMAND__DEBUG, 0, "Command", "Creating spawn point from template '%s'...", template_name); + LogWrite(COMMAND__DEBUG, 5, "Command", "\tCoords: %.2f %.2f %.2f...", new_x, new_y, new_z); + + // find the spawn_location_id in the template we plan to duplicate + Query query1; + MYSQL_RES* result = query1.RunQuery2(Q_SELECT, "SELECT id, spawn_location_id FROM spawn_templates WHERE name = '%s'", template_name); + if (result && (row = mysql_fetch_row(result))) { + if (row[0]) + { + template_id = atoul(row[0]); + spawn_location_id = atoi(row[1]); + } + } + + if( spawn_location_id > 0 ) + { + LogWrite(COMMAND__DEBUG, 5, "Command", "\tUsing LocationID: %u...", spawn_location_id); + + // insert a new spawn_location_name record + string name = "TemplateGenerated"; + query.RunQuery2(Q_INSERT, "INSERT INTO spawn_location_name (name) VALUES ('%s')", name.c_str()); + if(query.GetErrorNumber() && query.GetError() && query.GetErrorNumber() < 0xFFFFFFFF){ + LogWrite(COMMAND__ERROR, 0, "Command", "Error in CreateSpawnFromTemplateByID query '%s': %s", query.GetQuery(), query.GetError()); + return 0; + } + int32 new_location_id = query.GetLastInsertedID(); + LogWrite(COMMAND__DEBUG, 5, "Command", "Created new Spawn Location: '%s' (%u)", name.c_str(), new_location_id); + + // get all spawn_location_entries that match the templates spawn_location_id value and insert as new + LogWrite(COMMAND__DEBUG, 5, "Command", "Finding existing spawn_location_entry(s) for location_id %u", spawn_location_id); + Query query2; + MYSQL_RES* result2 = query2.RunQuery2(Q_SELECT, "SELECT spawn_id, spawnpercentage FROM spawn_location_entry WHERE spawn_location_id = %u", spawn_location_id); + if(result2 && mysql_num_rows(result2) > 0){ + MYSQL_ROW row2; + while(result2 && (row2 = mysql_fetch_row(result2)) && row2[0]) + { + query.RunQuery2(Q_INSERT, "INSERT INTO spawn_location_entry (spawn_id, spawn_location_id, spawnpercentage) VALUES (%u, %u, %i)", + atoul(row2[0]), new_location_id, atoi(row2[1])); + if(query.GetErrorNumber() && query.GetError() && query.GetErrorNumber() < 0xFFFFFFFF){ + LogWrite(COMMAND__ERROR, 0, "Command", "Error in CreateSpawnFromTemplateByID query '%s': %s", query.GetQuery(), query.GetError()); + return 0; + } + LogWrite(COMMAND__DEBUG, 5, "Command", "Insert Entry for spawn_id %u, location_id %u, percentage %i", atoul(row2[0]), new_location_id, atoi(row2[1])); + } + } + + // get all spawn_location_placements that match the templates spawn_location_id value and insert as new + // Note: /spawn templates within current zone_id only, because of spawn_id issues (cannot template an Antonic spawn in Commonlands) + LogWrite(COMMAND__DEBUG, 5, "Command", "Finding existing spawn_location_placement(s) for location_id %u", spawn_location_id); + Query query3; + MYSQL_RES* result3 = query3.RunQuery2(Q_SELECT, "SELECT zone_id, x_offset, y_offset, z_offset, respawn, expire_timer, expire_offset, grid_id FROM spawn_location_placement WHERE spawn_location_id = %u", spawn_location_id); + if(result3 && mysql_num_rows(result3) > 0){ + MYSQL_ROW row3; + while(result3 && (row3 = mysql_fetch_row(result3)) && row3[0]) + { + query.RunQuery2(Q_INSERT, "INSERT INTO spawn_location_placement (zone_id, spawn_location_id, x, y, z, heading, x_offset, y_offset, z_offset, respawn, expire_timer, expire_offset, grid_id) VALUES (%i, %u, %2f, %2f, %2f, %2f, %2f, %2f, %2f, %i, %i, %i, %u)", + atoi(row3[0]), new_location_id, new_x, new_y, new_z, new_heading, atof(row3[1]), atof(row3[2]), atof(row3[3]), atoi(row3[4]), atoi(row3[5]), atoi(row3[6]), atoul(row3[7])); + if(query.GetErrorNumber() && query.GetError() && query.GetErrorNumber() < 0xFFFFFFFF){ + LogWrite(COMMAND__ERROR, 0, "Command", "Error in CreateSpawnFromTemplateByID query '%s': %s", query.GetQuery(), query.GetError()); + return 0; + } + LogWrite(COMMAND__DEBUG, 5, "Command", "Insert Placement at new coords for location_id %u", new_location_id); + } + } + LogWrite(COMMAND__DEBUG, 0, "Command", "Success! New spawn(s) from TemplateID %u created from location %u", template_id, spawn_location_id); + return new_location_id; + } + + return 0; +} + +bool WorldDatabase::SaveZoneSafeCoords(int32 zone_id, float x, float y, float z, float heading) +{ + Query query; + + LogWrite(COMMAND__DEBUG, 0, "Command", "Setting safe coords for zone %u (X: %.2f, Y: %.2f, Z: %.2f, H: %.2f)", zone_id, x, y, z, heading); + + query.RunQuery2(Q_UPDATE, "UPDATE zones SET safe_x = %f, safe_y = %f, safe_z = %f, safe_heading = %f WHERE id = %u", x, y, z, heading, zone_id); + if(query.GetErrorNumber() && query.GetError() && query.GetErrorNumber() < 0xFFFFFFFF){ + LogWrite(DATABASE__ERROR, 0, "DBCore", "Error in SaveZoneSafeCoords query '%s': %s", query.GetQuery(), query.GetError()); + return false; + } + + if (query.GetAffectedRows() > 0 ) + { + LogWrite(COMMAND__DEBUG, 0, "Command", "Success! Set new safe coordinates in zone ID %u...", zone_id); + return true; + } + + LogWrite(COMMAND__ERROR, 0, "Command", "FAILED! Set new safe coordinates in zone ID %u...", zone_id); + return false; +} + +bool WorldDatabase::SaveSignZoneToCoords(int32 spawn_id, float x, float y, float z, float heading) +{ + Query query; + + LogWrite(COMMAND__DEBUG, 0, "Command", "Setting Zone-To coords for Spawn ID %u (X: %.2f, Y: %.2f, Z: %.2f, H: %.2f)", spawn_id, x, y, z, heading); + + query.RunQuery2(Q_UPDATE, "UPDATE spawn_signs SET zone_x = %f, zone_y = %f, zone_z = %f, zone_heading = %f WHERE spawn_id = %u", x, y, z, heading, spawn_id); + if(query.GetErrorNumber() && query.GetError() && query.GetErrorNumber() < 0xFFFFFFFF){ + LogWrite(DATABASE__ERROR, 0, "DBCore", "Error in SaveSignZoneToCoords query '%s': %s", query.GetQuery(), query.GetError()); + return false; + } + + if (query.GetAffectedRows() > 0 ) + { + LogWrite(COMMAND__DEBUG, 0, "Command", "Success! Set new Zone-To coordinates in zone ID %u...", spawn_id); + return true; + } + + LogWrite(COMMAND__ERROR, 0, "Command", "FAILED! Set new Zone-To coordinates in zone ID %u...", spawn_id); + return false; +} diff --git a/EQ2/source/WorldServer/Commands/ConsoleCommands.cpp b/EQ2/source/WorldServer/Commands/ConsoleCommands.cpp new file mode 100644 index 000000000..f9ac159e3 --- /dev/null +++ b/EQ2/source/WorldServer/Commands/ConsoleCommands.cpp @@ -0,0 +1,517 @@ +/* + EQ2Emulator: Everquest II Server Emulator + Copyright (C) 2007 EQ2EMulator Development Team (http://www.eq2emulator.net) + + This file is part of EQ2Emulator. + + EQ2Emulator is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + EQ2Emulator is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with EQ2Emulator. If not, see . +*/ + +#include +using namespace std; +#include +#include +#include + +#include "../../common/debug.h" +#include "../../common/Log.h" +#include "../../common/seperator.h" +#include "ConsoleCommands.h" +#include "../World.h" +#include "../Rules/Rules.h" +#include "../WorldDatabase.h" + +extern volatile bool RunLoops; +bool ContinueLoops = false; +extern Variables variables; +extern ZoneList zone_list; +extern RuleManager rule_manager; +extern WorldDatabase database; + +void ProcessConsoleInput(const char * cmdInput) +{ + static ConsoleCommand Commands[] = { + + // account controls + { &ConsoleBanCommand, "ban", "[player] {duration} {reason}", "Ban player with {optional} duration and reason." }, + { &ConsoleUnbanCommand, "unban", "[player]", "Unban a player." }, + { &ConsoleKickCommand, "kick", "[player] {reason}", "Kick player with {optional} reason." }, + + // chat controls + { &ConsoleAnnounceCommand, "announce", "[message]", "Sends Announcement message to all channels/clients." }, + { &ConsoleBroadcastCommand, "broadcast","[message]", "Sends Broadcast message to all channels/clients." }, + { &ConsoleChannelCommand, "channel", "[channel] [message]", "Sends Channel message to channel." }, + { &ConsoleTellCommand, "tell", "[player] [message]", "Sends Private message to player." }, + + // world system controls + { &ConsoleGuildCommand, "guild", "[params]", "" }, + { &ConsolePlayerCommand, "player", "[params]", "" }, + { &ConsoleZoneCommand, "zone", "[command][value]", "command = help to get help" }, + { &ConsoleWorldCommand, "world", "[params]", "" }, + { &ConsoleGetMOTDCommand, "getmotd", "", "Display current MOTD" }, + { &ConsoleSetMOTDCommand, "setmotd", "[new motd]", "Sets a new MOTD" }, + + /// misc controls + { &ConsoleWhoCommand, "who", "{zone id | player}", "Shows who is online globally, or in a given zone." }, + { &ConsoleReloadCommand, "reload", "[all | [type]]", "Reload main systems." }, + { &ConsoleRulesCommand, "rules", "{zone} {id}", "Show Global Ruleset (or Zone ruleset {optional})" }, + { &ConsoleShutdownCommand, "shutdown", "[delay]", "Gracefully shutdown world in [delay] sesconds." }, + { &ConsoleCancelShutdownCommand,"cancel", "", "Cancel shutdown command." }, + { &ConsoleExitCommand, "exit", "", "Brutally kills the world without mercy." }, + { &ConsoleExitCommand, "quit", "", "Brutally kills the world without mercy." }, + { &ConsoleTestCommand, "test", "", "Dev testing command." }, + { NULL, NULL, NULL, NULL }, + }; + + Seperator *sep = new Seperator(cmdInput, ' ', 20, 100, true); + bool found = false; + uint32 i; + + if (!sep) + return; + + if (!strcasecmp(sep->arg[0], "help") || sep->arg[0][0] == 'h' || sep->arg[0][0] == 'H' || sep->arg[0][0] == '?') { + found = true; + printf("======================================================================================================\n"); + printf("| %10s | %30s | %52s |\n", "Name", "Params", "Description"); + printf("======================================================================================================\n"); + for (i = 0; Commands[i].Name != NULL; i++) { + printf("| %10s | %30s | %52s |\n", Commands[i].Name, Commands[i].ParameterFormat, Commands[i].Description); + } + printf("======================================================================================================\n"); + printf("-[ Help formatted for 120 chars wide screen ]-\n"); + } + else { + for (i = 0; Commands[i].Name != NULL; ++i) { + if (!strcasecmp(Commands[i].Name, sep->arg[0])) { + found = true; + if (!Commands[i].CommandPointer(sep)) + printf("\nError, incorrect syntax for '%s'.\n Correct syntax is: '%s'.\n\n", Commands[i].Name, Commands[i].ParameterFormat ); + } + } + } + + if (!found) + printf("Invalid Command '%s'! Type '?' or 'help' to get a command list.\n\n", sep->arg[0]); + + fflush(stdout); + + delete sep; +} + +/************************************************* COMMANDS *************************************************/ + +bool ConsoleBanCommand(Seperator *sep) +{ + if( strlen(sep->arg[1]) == 0 ) + return false; + + return true; +} + +bool ConsoleUnbanCommand(Seperator *sep) +{ + if( strlen(sep->arg[1]) == 0 ) + return false; + + return true; +} + +bool ConsoleKickCommand(Seperator *sep) +{ + if( strlen(sep->arg[1]) == 0 ) + return false; + + return true; +} + + +bool ConsoleAnnounceCommand(Seperator *sep) +{ + if( strlen(sep->arg[1]) == 0 ) + return false; + + return true; +} + +bool ConsoleBroadcastCommand(Seperator *sep) +{ + if( strlen(sep->arg[1]) == 0 ) + return false; + + char message[4096]; + snprintf(message, sizeof(message), "%s %s", "BROADCAST:", sep->argplus[1]); + zone_list.HandleGlobalBroadcast(message); + return true; +} + +bool ConsoleChannelCommand(Seperator *sep) +{ + if( strlen(sep->arg[1]) == 0 ) + return false; + + return true; +} + +bool ConsoleTellCommand(Seperator *sep) +{ + if( strlen(sep->arg[1]) == 0 ) + return false; + + return true; +} + + +bool ConsoleWhoCommand(Seperator *sep) +{ + + // zone_list.ProcessWhoQuery(who, client); + + if (!strcasecmp(sep->arg[1], "zone")) { + printf("Who's Online in Zone"); + if (sep->IsNumber(2)) { + printf("ID %s:\n", sep->arg[2]); + printf("===============================================================================\n"); + printf("| %10s | %62s |\n", "CharID", "Name"); + printf("===============================================================================\n"); + } + else { + printf(" '%s':\n", sep->arg[2]); + printf("===============================================================================\n"); + printf("| %10s | %62s |\n", "CharID", "Name"); + printf("===============================================================================\n"); + } + } + else { + printf("Who's Online (Global):\n"); + printf("===============================================================================\n"); + printf("| %10s | %20s | %39s |\n", "CharID", "Name", "Zone"); + printf("===============================================================================\n"); + } + printf("Not Implemented... yet :)\n"); + printf("===============================================================================\n"); + return true; +} + +bool ConsoleGuildCommand(Seperator *sep) +{ + if( strlen(sep->arg[1]) == 0 ) + return false; + + return true; +} + +bool ConsolePlayerCommand(Seperator *sep) +{ + if( strlen(sep->arg[1]) == 0 ) + return false; + + return true; +} + +bool ConsoleWorldCommand(Seperator *sep) +{ + if( strlen(sep->arg[1]) == 0 ) + return false; + + return true; +} + +bool ConsoleZoneCommand(Seperator *sep) +{ + if( strlen(sep->arg[1]) == 0 ) // has to be at least 1 arg (command) + return false; + + ZoneServer* zone = 0; + + if( strlen(sep->arg[2]) == 0 ) + { + // process commands without values + if (!strcasecmp(sep->arg[1], "active") ) + { + // not correct, but somehow need to access the Private zlist from World.h ??? + list zlist; + + list::iterator zone_iter; + ZoneServer* tmp = 0; + int zonesListed = 0; + + printf("> List Active Zones...\n"); + printf("======================================================================================================\n"); + printf("| %7s | %30s | %10s | %42s |\n", "ID", "Name", "Instance", "Description"); + printf("======================================================================================================\n"); + + for(zone_iter=zlist.begin(); zone_iter!=zlist.end(); zone_iter++){ + tmp = *zone_iter; + zonesListed++; + printf("| %7d | %30s | %10d | %42s |\n", tmp->GetZoneID(), tmp->GetZoneName(), tmp->GetInstanceID(),tmp->GetZoneDescription()); + } + return true; + } + else if (!strcasecmp(sep->arg[1], "help") || sep->arg[1][0] == '?') + { + printf("======================================================================================================\n"); + printf("| %10s | %30s | %52s |\n", "Command", "Value", "Description"); + printf("======================================================================================================\n"); + printf("| %10s | %30s | %52s |\n", "active", "n/a", "List currently active zones"); + printf("| %10s | %30s | %52s |\n", "list", "[name]", "Lookup zone by name"); + printf("| %10s | %30s | %52s |\n", "status", "[zone_id | name | ALL]", "List zone stats"); + printf("| %10s | %30s | %52s |\n", "lock", "[zone_id | name]", "Locks a zone"); + printf("| %10s | %30s | %52s |\n", "unlock", "[zone_id | name]", "Unlocks a zone"); + printf("| %10s | %30s | %52s |\n", "shutdown", "[zone_id | name | ALL]", "Gracefully shuts down a zone"); + printf("| %10s | %30s | %52s |\n", "kill", "[zone_id | name | ALL]", "Terminates a zone"); + printf("======================================================================================================\n"); + return true; + } + else + return false; + } + else + { + if( !strcasecmp(sep->arg[1], "list") ) + { + const char* name = 0; + name = sep->argplus[2]; + map* zone_names = database.GetZoneList(name); + + if(!zone_names) + { + printf("> No zones found.\n"); + } + else + { + printf("> List zones matching '%s'...\n", sep->arg[2]); + printf("====================================================\n"); + printf("| %3s | %42s |\n", "ID", "Name"); + printf("====================================================\n"); + map::iterator itr; + + for(itr = zone_names->begin(); itr != zone_names->end(); itr++) + printf("| %3u | %42s |\n", itr->first, itr->second.c_str()); + safe_delete(zone_names); + printf("====================================================\n"); + } + return true; + } + + if( !strcasecmp(sep->arg[1], "lock") ) + { + if( sep->IsNumber(2) ) + printf("> Locking zone ID %i...\n", atoul(sep->arg[2])); + else + printf("> Locking zone '%s'...\n", sep->arg[2]); + return true; + } + + if( !strcasecmp(sep->arg[1], "unlock") ) + { + if( strlen(sep->arg[2]) > 0 && sep->IsNumber(2) ) + printf("> Unlocking zone ID %i...\n", atoi(sep->arg[2])); + else + printf("> Unlocking zone '%s'...\n", sep->arg[2]); + return true; + } + + if( !strcasecmp(sep->arg[1], "status") ) + { + if( sep->IsNumber(2) ) + { + zone = zone_list.Get(atoi(sep->arg[2]), false); + if( zone ) + { + printf("> Zone status for zone ID %i...\n", atoi(sep->arg[2])); + printf("============================================================================================\n"); + printf("| %30s | %10s | %42s |\n", "Zone", "Param", "Value"); + printf("============================================================================================\n"); + printf("| %30s | %10s | %42s |\n", zone->GetZoneName(), "locked", zone->GetZoneLockState() ? "true" : "false"); + } + else + { + printf("> Zone ID %i not running, so not locked.\n", atoi(sep->arg[2])); + } + } + else if( !strcasecmp(sep->arg[2], "ALL") ) + { + printf("> Zone status for ALL active zones...\n"); + } + else + { + printf("> Zone status for zone '%s'...\n", sep->arg[2]); + } + return true; + } + + if( !strcasecmp(sep->arg[1], "shutdown") ) + { + if( sep->IsNumber(2) ) + printf("> Shutdown zone ID %i...\n", atoi(sep->arg[2])); + else if( !strcasecmp(sep->arg[2], "ALL") ) + printf("> Shutdown ALL active zones...\n"); + else + printf("> Shutdown zone '%s'...\n", sep->arg[2]); + return true; + } + + if( !strcasecmp(sep->arg[1], "kill") ) + { + if( sep->IsNumber(2) ) + printf("> Kill zone ID %i...\n", atoi(sep->arg[2])); + else if( !strcasecmp(sep->arg[2], "ALL") ) + printf("> Kill ALL active zones...\n"); + else + printf("> Kill zone '%s'...\n", sep->arg[2]); + return true; + } + } + return false; +} + +bool ConsoleGetMOTDCommand(Seperator *sep) +{ + const char* motd = 0; + Variable* var = variables.FindVariable("motd"); + if( var == NULL || strlen (var->GetValue()) == 0){ + printf("No MOTD."); + } + else{ + motd = var->GetValue(); + printf("%s\n", motd); + } + return true; +} + +bool ConsoleSetMOTDCommand(Seperator *sep) +{ + if( strlen(sep->arg[1]) == 0 ) + return false; + + return true; +} + +bool ConsoleReloadCommand(Seperator *sep) +{ + #ifdef _WIN32 + HANDLE console = GetStdHandle(STD_OUTPUT_HANDLE); + SetConsoleTextAttribute(console, FOREGROUND_YELLOW_BOLD); + #else + printf("\033[1;33m"); + #endif + printf("Usage: "); + + #ifdef _WIN32 + SetConsoleTextAttribute(console, FOREGROUND_WHITE_BOLD); + #else + printf("\033[1;37m"); + #endif + printf("reload [type]\n"); + + #ifdef _WIN32 + SetConsoleTextAttribute(console, 8); + #else + printf("\033[0m"); + #endif + printf("Valid [type] paramters are:\n"); + printf("===============================================================================\n"); + printf("| %21s | %51s |\n", "all", "Reloads all systems (why not just restart?)"); + printf("| %21s | %51s |\n", "structs", "Reloads structs (XMLs)"); + printf("| %21s | %51s |\n", "items", "Reload Items data"); + printf("| %21s | %51s |\n", "luasystem", "Reload LUA System Scripts"); + printf("| %21s | %51s |\n", "spawnscripts", "Reload SpawnScripts"); + printf("| %21s | %51s |\n", "quests", "Reload Quest Data and Scripts"); + printf("| %21s | %51s |\n", "spawns", "Reload ALL Spawns from DB"); + printf("| %21s | %51s |\n", "groundspawn_items", "Reload Groundspawn Items lists"); + printf("| %21s | %51s |\n", "zonescripts", "Reload Zone Scripts"); + printf("| %21s | %51s |\n", "entity_commands", "Reload Entity Commands"); + printf("| %21s | %51s |\n", "factions", "Reload Factions"); + printf("| %21s | %51s |\n", "mail", "Reload in-game Mail data"); + printf("| %21s | %51s |\n", "guilds", "Reload Guilds"); + printf("| %21s | %51s |\n", "locations", "Reload Locations data"); + printf("===============================================================================\n"); + if( strlen(sep->arg[1]) > 0 ) { + // handle reloads here + if (!strcasecmp(sep->arg[1], "spawns")) + zone_list.ReloadSpawns(); + } + + return true; +} + +bool ConsoleShutdownCommand(Seperator *sep) +{ + if ( IsNumber(sep->arg[1]) ) { + int8 shutdown_delay = atoi(sep->arg[1]); + printf("Shutdown World in %i second(s)...\n", shutdown_delay); + // shutting down gracefully, warn players. + char message[4096]; + snprintf(message, sizeof(message), "BROADCAST: Server is shutting down in %s second(s)", sep->arg[1]); + zone_list.HandleGlobalBroadcast(message); + Sleep(shutdown_delay * 1000); + } + else { + printf("Shutdown World immediately... you probably won't even see this message, huh!\n"); + } + if( !ContinueLoops ) + RunLoops = false; + return true; +} + +bool ConsoleCancelShutdownCommand(Seperator *sep) +{ + printf("Cancel World Shutdown...\n"); + ContinueLoops = true; + return true; +} + +bool ConsoleExitCommand(Seperator *sep) +{ + // I wanted this to be a little more Terminate-y... killkillkill + printf("Terminate World immediately...\n"); + RunLoops = false; + return true; +} + +bool ConsoleRulesCommand(Seperator *sep) +{ + /*if( strlen(sep->arg[1]) == 0 ) + return false;*/ + + printf("Current Active Ruleset"); + if (!strcasecmp(sep->arg[1], "zone")) + { + if (sep->IsNumber(2)) { + printf(" in Zone ID: %s\n", sep->arg[2]); + } + else + return false; + } + else + { + printf(" (global):\n"); + } + printf("===============================================================================\n"); + printf("| %20s | %20s | %29s |\n", "Category", "Type", "Value"); + printf("===============================================================================\n"); + + return true; +} + +bool ConsoleTestCommand(Seperator *sep) +{ + // devs put whatever test code in here + printf("Testing Server Guild Rules values:\n"); + printf("AutoJoin: %i\n", rule_manager.GetGlobalRule(R_World, GuildAutoJoin)->GetInt8()); + printf("Guild ID: %i\n", rule_manager.GetGlobalRule(R_World, GuildAutoJoinID)->GetInt32()); + printf("Rank: %i\n", rule_manager.GetGlobalRule(R_World, GuildAutoJoinDefaultRankID)->GetInt8()); + return true; +} diff --git a/EQ2/source/WorldServer/Commands/ConsoleCommands.h b/EQ2/source/WorldServer/Commands/ConsoleCommands.h new file mode 100644 index 000000000..f7ce6af73 --- /dev/null +++ b/EQ2/source/WorldServer/Commands/ConsoleCommands.h @@ -0,0 +1,61 @@ +/* + EQ2Emulator: Everquest II Server Emulator + Copyright (C) 2007 EQ2EMulator Development Team (http://www.eq2emulator.net) + + This file is part of EQ2Emulator. + + EQ2Emulator is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + EQ2Emulator is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with EQ2Emulator. If not, see . +*/ + +#ifndef _CONSOLECOMMANDS_H +#define _CONSOLECOMMANDS_H + +#include "../../common/seperator.h" + +struct ConsoleCommand +{ + bool(*CommandPointer)(Seperator *); + const char * Name; // 10 chars + const char * ParameterFormat; // 30 chars + const char * Description; // 40 chars + // = 70 chars +}; + + void ProcessConsoleInput(const char * command); + + bool ConsoleBanCommand(Seperator *sep); + bool ConsoleUnbanCommand(Seperator *sep); + bool ConsoleKickCommand(Seperator *sep); + + bool ConsoleAnnounceCommand(Seperator *sep); + bool ConsoleBroadcastCommand(Seperator *sep); + bool ConsoleChannelCommand(Seperator *sep); + bool ConsoleTellCommand(Seperator *sep); + + bool ConsoleGuildCommand(Seperator *sep); + bool ConsolePlayerCommand(Seperator *sep); + bool ConsoleWorldCommand(Seperator *sep); + bool ConsoleZoneCommand(Seperator *sep); + bool ConsoleGetMOTDCommand(Seperator *sep); + bool ConsoleSetMOTDCommand(Seperator *sep); + bool ConsoleWhoCommand(Seperator *sep); + bool ConsoleReloadCommand(Seperator *sep); + + bool ConsoleShutdownCommand(Seperator *sep); + bool ConsoleCancelShutdownCommand(Seperator *sep); + bool ConsoleExitCommand(Seperator *sep); + bool ConsoleRulesCommand(Seperator *sep); + bool ConsoleTestCommand(Seperator *sep); + +#endif \ No newline at end of file diff --git a/EQ2/source/WorldServer/Entity.cpp b/EQ2/source/WorldServer/Entity.cpp new file mode 100644 index 000000000..81dd0d0cc --- /dev/null +++ b/EQ2/source/WorldServer/Entity.cpp @@ -0,0 +1,2417 @@ +/* + EQ2Emulator: Everquest II Server Emulator + Copyright (C) 2007 EQ2EMulator Development Team (http://www.eq2emulator.net) + + This file is part of EQ2Emulator. + + EQ2Emulator is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + EQ2Emulator is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with EQ2Emulator. If not, see . +*/ +#include "Entity.h" +#include +#include "Items/Items.h" +#include "zoneserver.h" +#include "World.h" +#include "../common/Log.h" +#include "Spells.h" +#include "SpellProcess.h" +#include "classes.h" +#include "LuaInterface.h" +#include "ClientPacketFunctions.h" + +extern World world; +extern MasterItemList master_item_list; +extern MasterSpellList master_spell_list; +extern Classes classes; + +Entity::Entity(){ + max_speed = 6; + last_x = -1; + last_y = -1; + last_z = -1; + last_heading = -1; + regen_hp_rate = 0; + regen_power_rate = 0; + in_combat = false; + casting = false; + memset(&melee_combat_data, 0, sizeof(CombatData)); + memset(&ranged_combat_data, 0, sizeof(CombatData)); + memset(&info_struct, 0, sizeof(InfoStruct)); + loot_coins = 0; + memset(&features, 0, sizeof(CharFeatures)); + memset(&equipment, 0, sizeof(EQ2_Equipment)); + pet = 0; + charmedPet = 0; + deityPet = 0; + cosmeticPet = 0; + speed = 0; + speed_multiplier = 1.0f; + m_threatTransfer = 0; + group_member_info = 0; + trade = 0; + deity = 0; + MProcList.SetName("Entity::m_procList"); + MDetriments.SetName("Entity::MDetriments"); + MMaintainedSpells.SetName("Entity::MMaintainedSpells"); + MSpellEffects.SetName("Entity::MSpellEffects"); + m_procList.clear(); + control_effects.clear(); + immunities.clear(); + + for(int i=0;i<45;i++){ + if(i::iterator itr; + for(itr = loot_items.begin(); itr != loot_items.end(); itr++) + safe_delete(*itr); + MutexList::iterator itr2 = bonus_list.begin(); + while(itr2.Next()) + safe_delete(itr2.value); + ClearProcs(); + safe_delete(m_threatTransfer); + map*>::iterator itr3; + for (itr3 = control_effects.begin(); itr3 != control_effects.end(); itr3++) + safe_delete(itr3->second); + control_effects.clear(); + map*>::iterator itr4; + for (itr4 = immunities.begin(); itr4 != immunities.end(); itr4++) + safe_delete(itr4->second); + immunities.clear(); +} + +bool Entity::HasMoved(bool include_heading){ + if(GetX() == last_x && GetY() == last_y && GetZ() == last_z && ((!include_heading) || (include_heading && GetHeading() == last_heading))) + return false; + bool ret_val = true; + if(last_x == -1 && last_y == -1 && last_z == -1 && last_heading == -1){ + ret_val = false; + } + last_x = GetX(); + last_y = GetY(); + last_z = GetZ(); + last_heading = GetHeading(); + return ret_val; +} + +int16 Entity::GetStr(){ + return GetInfoStruct()->str; +} + +int16 Entity::GetSta(){ + return GetInfoStruct()->sta; +} + +int16 Entity::GetInt(){ + return GetInfoStruct()->intel; +} + +int16 Entity::GetWis(){ + return GetInfoStruct()->wis; +} + +int16 Entity::GetAgi(){ + return GetInfoStruct()->agi; +} + +int16 Entity::GetPrimaryStat(){ + int8 base_class = classes.GetBaseClass(GetAdventureClass()); + if (base_class == FIGHTER) + return GetInfoStruct()->str; + else if (base_class == PRIEST) + return GetInfoStruct()->wis; + else if (base_class == MAGE) + return GetInfoStruct()->intel; + else + return GetInfoStruct()->agi; +} + +int16 Entity::GetHeatResistance(){ + return GetInfoStruct()->heat; +} + +int16 Entity::GetColdResistance(){ + return GetInfoStruct()->cold; +} + +int16 Entity::GetMagicResistance(){ + return GetInfoStruct()->magic; +} + +int16 Entity::GetMentalResistance(){ + return GetInfoStruct()->mental; +} + +int16 Entity::GetDivineResistance(){ + return GetInfoStruct()->divine; +} + +int16 Entity::GetDiseaseResistance(){ + return GetInfoStruct()->disease; +} + +int16 Entity::GetPoisonResistance(){ + return GetInfoStruct()->poison; +} + +int8 Entity::GetConcentrationCurrent() { + return GetInfoStruct()->cur_concentration; +} + +int8 Entity::GetConcentrationMax() { + return GetInfoStruct()->max_concentration; +} + +int16 Entity::GetStrBase(){ + return GetInfoStruct()->str_base; +} + +int16 Entity::GetStaBase(){ + return GetInfoStruct()->sta_base; +} + +int16 Entity::GetIntBase(){ + return GetInfoStruct()->intel_base; +} + +int16 Entity::GetWisBase(){ + return GetInfoStruct()->wis_base; +} + +int16 Entity::GetAgiBase(){ + return GetInfoStruct()->agi_base; +} + +int16 Entity::GetHeatResistanceBase(){ + return GetInfoStruct()->heat_base; +} + +int16 Entity::GetColdResistanceBase(){ + return GetInfoStruct()->cold_base; +} + +int16 Entity::GetMagicResistanceBase(){ + return GetInfoStruct()->magic_base; +} + +int16 Entity::GetMentalResistanceBase(){ + return GetInfoStruct()->mental_base; +} + +int16 Entity::GetDivineResistanceBase(){ + return GetInfoStruct()->divine_base; +} + +int16 Entity::GetDiseaseResistanceBase(){ + return GetInfoStruct()->disease_base; +} + +int16 Entity::GetPoisonResistanceBase(){ + return GetInfoStruct()->poison_base; +} + +sint8 Entity::GetAlignment(){ + return GetInfoStruct()->alignment; +} + +bool Entity::IsCasting(){ + return casting; +} + +void Entity::IsCasting(bool val){ + casting = val; +} + +int32 Entity::GetRangeLastAttackTime(){ + return ranged_combat_data.range_last_attack_time; +} + +void Entity::SetRangeLastAttackTime(int32 time){ + ranged_combat_data.range_last_attack_time = time; +} + +int16 Entity::GetRangeAttackDelay(){ + return ranged_combat_data.ranged_attack_delay; +// if(IsPlayer()){ +// Item* item = ((Player*)this)->GetEquipmentList()->GetItem(EQ2_RANGE_SLOT); +// if(item && item->IsRanged()) +// return item->ranged_info->weapon_info.delay*100; +// } +// return 3000; +} + +int32 Entity::GetPrimaryLastAttackTime(){ + return melee_combat_data.primary_last_attack_time; +} + +int16 Entity::GetPrimaryAttackDelay(){ + return melee_combat_data.primary_attack_delay; +} + +void Entity::SetPrimaryAttackDelay(int16 new_delay){ + melee_combat_data.primary_attack_delay = new_delay; +} + +void Entity::SetPrimaryLastAttackTime(int32 new_time){ + melee_combat_data.primary_last_attack_time = new_time; +} + +int32 Entity::GetSecondaryLastAttackTime(){ + return melee_combat_data.secondary_last_attack_time; +} + +int16 Entity::GetSecondaryAttackDelay(){ + return melee_combat_data.secondary_attack_delay; +} + +void Entity::SetSecondaryAttackDelay(int16 new_delay){ + melee_combat_data.secondary_attack_delay = new_delay; +} + +void Entity::SetSecondaryLastAttackTime(int32 new_time){ + melee_combat_data.secondary_last_attack_time = new_time; +} + +void Entity::ChangePrimaryWeapon(){ + Item* item = equipment_list.GetItem(EQ2_PRIMARY_SLOT); + if(item && item->details.item_id > 0 && item->IsWeapon()){ + melee_combat_data.primary_weapon_delay = item->weapon_info->delay * 100; + melee_combat_data.primary_weapon_damage_low = item->weapon_info->damage_low3; + melee_combat_data.primary_weapon_damage_high = item->weapon_info->damage_high3; + melee_combat_data.primary_weapon_type = item->GetWeaponType(); + melee_combat_data.wield_type = item->weapon_info->wield_type; + } + else{ + melee_combat_data.primary_weapon_delay = 2000; + melee_combat_data.primary_weapon_damage_low = (int32)(1 + GetLevel() * .2); + melee_combat_data.primary_weapon_damage_high = (int32)(5 + GetLevel() * (GetLevel()/5)); + if(IsNPC()) + melee_combat_data.primary_weapon_type = ((NPC*)this)->GetAttackType(); + else + melee_combat_data.primary_weapon_type = 1; + melee_combat_data.wield_type = 2; + } + if(IsNPC()) + melee_combat_data.primary_weapon_damage_high += (int32)(GetInfoStruct()->str / 10); + else + melee_combat_data.primary_weapon_damage_high += (int32)(GetInfoStruct()->str / 25); +} + +void Entity::ChangeSecondaryWeapon(){ + Item* item = equipment_list.GetItem(EQ2_SECONDARY_SLOT); + if(item && item->details.item_id > 0 && item->IsWeapon()){ + melee_combat_data.secondary_weapon_delay = item->weapon_info->delay * 100; + melee_combat_data.secondary_weapon_damage_low = item->weapon_info->damage_low3; + melee_combat_data.secondary_weapon_damage_high = item->weapon_info->damage_high3; + melee_combat_data.secondary_weapon_type = item->GetWeaponType(); + } + else{ + melee_combat_data.secondary_weapon_delay = 2000; + melee_combat_data.secondary_weapon_damage_low = (int32)(1 + GetLevel() * .2); + melee_combat_data.secondary_weapon_damage_high = (int32)(5 + GetLevel() * (GetLevel()/6)); + melee_combat_data.secondary_weapon_type = 1; + } + if(IsNPC()) + melee_combat_data.secondary_weapon_damage_high += (int32)(GetInfoStruct()->str / 10); + else + melee_combat_data.secondary_weapon_damage_high += (int32)(GetInfoStruct()->str / 25); +} + +void Entity::ChangeRangedWeapon(){ + Item* item = equipment_list.GetItem(EQ2_RANGE_SLOT); + if(item && item->details.item_id > 0 && item->IsRanged()){ + ranged_combat_data.ranged_weapon_delay = item->ranged_info->weapon_info.delay*100; + ranged_combat_data.ranged_weapon_damage_low = item->ranged_info->weapon_info.damage_low3; + ranged_combat_data.ranged_weapon_damage_high = item->ranged_info->weapon_info.damage_high3; + ranged_combat_data.ranged_weapon_type = item->GetWeaponType(); + } +} + +int32 Entity::GetPrimaryWeaponMinDamage(){ + return melee_combat_data.primary_weapon_damage_low; +} + +int32 Entity::GetPrimaryWeaponMaxDamage(){ + return melee_combat_data.primary_weapon_damage_high; +} + +int32 Entity::GetSecondaryWeaponMinDamage(){ + return melee_combat_data.secondary_weapon_damage_low; +} + +int32 Entity::GetSecondaryWeaponMaxDamage(){ + return melee_combat_data.secondary_weapon_damage_high; +} + +int8 Entity::GetPrimaryWeaponType(){ + return melee_combat_data.primary_weapon_type; +} + +int8 Entity::GetSecondaryWeaponType(){ + return melee_combat_data.secondary_weapon_type; +} + +int32 Entity::GetRangedWeaponMinDamage(){ + return ranged_combat_data.ranged_weapon_damage_low; +} + +int32 Entity::GetRangedWeaponMaxDamage(){ + return ranged_combat_data.ranged_weapon_damage_high; +} + +int8 Entity::GetRangedWeaponType(){ + return ranged_combat_data.ranged_weapon_type; +} + +bool Entity::IsDualWield(){ + return melee_combat_data.wield_type == 1; +} + +int8 Entity::GetWieldType(){ + return melee_combat_data.wield_type; +} + +bool Entity::BehindTarget(Spawn* target){ + float target_angle = 360 - target->GetHeading(); + float angle = 360 - GetHeading(); + if(target_angle > angle) + angle = target_angle - angle; + else + angle -= target_angle; + return (angle < 90 || angle > 270); +} + +bool Entity::FlankingTarget(Spawn* target) { + float angle; + double diff_x = target->GetX() - GetX(); + double diff_z = target->GetZ() - GetZ(); + if (diff_z == 0) { + if (diff_x > 0) + angle = 90; + else + angle = 270; + } + else + angle = ((atan(diff_x / diff_z)) * 180) / 3.14159265358979323846; + if (angle < 0) + angle = angle + 360; + else + angle = angle + 180; + if (diff_x < 0) + angle = angle + 180; + + if (angle > GetHeading()) + angle = angle - GetHeading(); + else + angle = GetHeading() - angle; + + if (angle > 360) + angle -= 360; + + //LogWrite(SPAWN__ERROR, 0, "Angle", "spawn heading = %f", GetHeading()); + //LogWrite(SPAWN__ERROR, 0, "Angle", "angle = %f", angle); + + return (angle >= 45 && angle <= 315); +} + +float Entity::GetShieldBlockChance(){ + float ret = 0; + Item* item = equipment_list.GetItem(1); + if(item && item->details.item_id > 0 && item->IsShield()){ + + } + return ret; +} + +float Entity::GetDodgeChance(){ + float ret = 0; + + return ret; +} + +bool Entity::EngagedInCombat(){ + return in_combat; +} + +void Entity::InCombat(bool val){ + in_combat = val; +} + +void Entity::SetHPRegen(int16 new_val){ + regen_hp_rate = new_val; +} +void Entity::SetPowerRegen(int16 new_val){ + regen_power_rate = new_val; +} +int16 Entity::GetHPRegen(){ + return regen_hp_rate; +} +int16 Entity::GetPowerRegen(){ + return regen_power_rate; +} + +void Entity::DoRegenUpdate(){ + if(GetHP() == 0)//dead + return; + sint32 hp = GetHP(); + sint32 power = GetPower(); + int16 level = GetLevel(); + + // No regen for NPC's while in combat + // Temp solution for now + if (IsNPC() && EngagedInCombat()) + return; + + if(hp < GetTotalHP()){ + if(regen_hp_rate == 0) + regen_hp_rate = (int)(level*.75)+(int)(level/10) + 1; + int16 temp = regen_hp_rate + stats[ITEM_STAT_HPREGEN]; + if((hp + temp) > GetTotalHP()) + SetHP(GetTotalHP()); + else + SetHP(hp + temp); + + LogWrite(MISC__TODO, 1, "TODO", "Fix this later for mobs\n\t(%s, function: %s, line #: %i)", __FILE__, __FUNCTION__, __LINE__); + + } + if(GetPower() < GetTotalPower()){ + if(regen_power_rate == 0) + regen_power_rate = level + (int)(level/10) + 1; + if((power + regen_power_rate) > GetTotalPower()) + SetPower(GetTotalPower()); + else + SetPower(power + regen_power_rate); + + LogWrite(MISC__TODO, 1, "TODO", "Fix this later for mobs\n\t(%s, function: %s, line #: %i)", __FILE__, __FUNCTION__, __LINE__); + + } +} + +void Entity::AddMaintainedSpell(LuaSpell* luaspell){ + if (!luaspell) + return; + + Spell* spell = luaspell->spell; + MaintainedEffects* effect = GetFreeMaintainedSpellSlot(); + + if (effect){ + MMaintainedSpells.writelock(__FUNCTION__, __LINE__); + effect->spell = luaspell; + effect->spell_id = spell->GetSpellData()->id; + LogWrite(NPC__SPELLS, 5, "NPC", "AddMaintainedSpell Spell ID: %u", spell->GetSpellData()->id); + effect->conc_used = spell->GetSpellData()->req_concentration / 256; + effect->total_time = spell->GetSpellDuration() / 10; + effect->tier = spell->GetSpellData()->tier; + if (spell->GetSpellData()->duration_until_cancel) + effect->expire_timestamp = 0xFFFFFFFF; + else + effect->expire_timestamp = Timer::GetCurrentTime2() + (spell->GetSpellDuration() * 100); + MMaintainedSpells.releasewritelock(__FUNCTION__, __LINE__); + } +} + +void Entity::AddSpellEffect(LuaSpell* luaspell){ + if (!luaspell || !luaspell->caster) + return; + + Spell* spell = luaspell->spell; + SpellEffects* old_effect = GetSpellEffect(spell->GetSpellID(), luaspell->caster); + SpellEffects* effect = 0; + if (old_effect){ + GetZone()->RemoveTargetFromSpell(old_effect->spell, this); + RemoveSpellEffect(old_effect->spell); + } + effect = GetFreeSpellEffectSlot(); + + if(effect){ + MSpellEffects.writelock(__FUNCTION__, __LINE__); + effect->spell = luaspell; + effect->spell_id = spell->GetSpellData()->id; + effect->caster = luaspell->caster; + effect->total_time = spell->GetSpellDuration()/10; + if (spell->GetSpellData()->duration_until_cancel) + effect->expire_timestamp = 0xFFFFFFFF; + else + effect->expire_timestamp = Timer::GetCurrentTime2() + (spell->GetSpellDuration()*100); + effect->icon = spell->GetSpellData()->icon; + effect->icon_backdrop = spell->GetSpellData()->icon_backdrop; + effect->tier = spell->GetSpellTier(); + MSpellEffects.releasewritelock(__FUNCTION__, __LINE__); + changed = true; + info_changed = true; + AddChangedZoneSpawn(); + } +} + +void Entity::RemoveMaintainedSpell(LuaSpell* luaspell){ + if (!luaspell) + return; + + bool found = false; + MMaintainedSpells.writelock(__FUNCTION__, __LINE__); + for (int i = 0; i<30; i++){ + // If we already found the spell then we are bumping all other up one so there are no gaps + // This check needs to be first so found can never be true on the first iteration (i = 0) + if (found) { + GetInfoStruct()->maintained_effects[i].slot_pos = i - 1; + GetInfoStruct()->maintained_effects[i - 1] = GetInfoStruct()->maintained_effects[i]; + + } + // Compare spells, if we found a match set the found flag + if (GetInfoStruct()->maintained_effects[i].spell == luaspell) + found = true; + + } + // if we found the spell in the array then we need to set the last element to empty + if (found) { + memset(&GetInfoStruct()->maintained_effects[29], 0, sizeof(MaintainedEffects)); + GetInfoStruct()->maintained_effects[29].spell_id = 0xFFFFFFFF; + GetInfoStruct()->maintained_effects[29].icon = 0xFFFF; + } + MMaintainedSpells.releasewritelock(__FUNCTION__, __LINE__); +} + +void Entity::RemoveSpellEffect(LuaSpell* spell) { + bool found = false; + MSpellEffects.writelock(__FUNCTION__, __LINE__); + for(int i=0;i<45;i++) { + if (found) { + GetInfoStruct()->spell_effects[i-1] = GetInfoStruct()->spell_effects[i]; + } + if (GetInfoStruct()->spell_effects[i].spell == spell) + found = true; + } + if (found) { + memset(&GetInfoStruct()->spell_effects[44], 0, sizeof(SpellEffects)); + GetInfoStruct()->spell_effects[44].spell_id = 0xFFFFFFFF; + changed = true; + info_changed = true; + AddChangedZoneSpawn(); + } + MSpellEffects.releasewritelock(__FUNCTION__, __LINE__); +} + +bool Entity::HasActiveMaintainedSpell(Spell* spell, Spawn* target){ + LogWrite(MISC__TODO, 1, "TODO", "This does nothing... yet...\n\t(%s, function: %s, line #: %i)", __FILE__, __FUNCTION__, __LINE__); + return false; +} + +bool Entity::HasActiveSpellEffect(Spell* spell, Spawn* target){ + LogWrite(MISC__TODO, 1, "TODO", "This does nothing... yet...\n\t(%s, function: %s, line #: %i)", __FILE__, __FUNCTION__, __LINE__); + return false; +} + +MaintainedEffects* Entity::GetFreeMaintainedSpellSlot(){ + MaintainedEffects* ret = 0; + InfoStruct* info = GetInfoStruct(); + MMaintainedSpells.readlock(__FUNCTION__, __LINE__); + for (int i = 0; imaintained_effects[i].spell_id == 0xFFFFFFFF){ + ret = &info->maintained_effects[i]; + ret->spell_id = 0; + ret->slot_pos = i; + break; + } + } + MMaintainedSpells.releasereadlock(__FUNCTION__, __LINE__); + return ret; +} + +MaintainedEffects* Entity::GetMaintainedSpell(int32 spell_id){ + MaintainedEffects* ret = 0; + InfoStruct* info = GetInfoStruct(); + MMaintainedSpells.readlock(__FUNCTION__, __LINE__); + for (int i = 0; imaintained_effects[i].spell_id == spell_id){ + ret = &info->maintained_effects[i]; + break; + } + } + MMaintainedSpells.releasereadlock(__FUNCTION__, __LINE__); + return ret; +} + +SpellEffects* Entity::GetFreeSpellEffectSlot(){ + SpellEffects* ret = 0; + InfoStruct* info = GetInfoStruct(); + MSpellEffects.readlock(__FUNCTION__, __LINE__); + for(int i=0;i<45;i++){ + if(info->spell_effects[i].spell_id == 0xFFFFFFFF){ + ret = &info->spell_effects[i]; + ret->spell_id = 0; + break; + } + } + MSpellEffects.releasereadlock(__FUNCTION__, __LINE__); + return ret; +} + +SpellEffects* Entity::GetSpellEffect(int32 id, Entity* caster) { + SpellEffects* ret = 0; + InfoStruct* info = GetInfoStruct(); + MSpellEffects.readlock(__FUNCTION__, __LINE__); + for(int i = 0; i < 45; i++) { + if(info->spell_effects[i].spell_id == id) { + if (!caster || info->spell_effects[i].caster == caster){ + ret = &info->spell_effects[i]; + break; + } + } + } + MSpellEffects.releasereadlock(__FUNCTION__, __LINE__); + return ret; +} + +InfoStruct* Entity::GetInfoStruct(){ + return &info_struct; +} + +Item* Entity::LootItem(int32 id){ + Item* ret = 0; + vector::iterator itr; + MLootItems.lock(); + for(itr = loot_items.begin(); itr != loot_items.end(); itr++){ + if((*itr)->details.item_id == id){ + ret = *itr; + loot_items.erase(itr); + break; + } + } + MLootItems.unlock(); + return ret; +} + +int32 Entity::GetLootItemID(){ + int32 ret = 0; + vector::iterator itr; + MLootItems.lock(); + for(itr = loot_items.begin(); itr != loot_items.end(); itr++){ + ret = (*itr)->details.item_id; + break; + } + MLootItems.unlock(); + return ret; +} + +bool Entity::HasLootItemID(int32 id) { + bool ret = false; + + vector::iterator itr; + MLootItems.readlock(__FUNCTION__, __LINE__); + for (itr = loot_items.begin(); itr != loot_items.end(); itr++) { + if ((*itr)->details.item_id == id) { + ret = true; + break; + } + } + MLootItems.releasereadlock(__FUNCTION__, __LINE__); + + return ret; +} + +Skill* Entity::GetSkillByName(const char* name, bool check_update){ + LogWrite(MISC__TODO, 1, "TODO", "This does nothing... yet...\n\t(%s, function: %s, line #: %i)", __FILE__, __FUNCTION__, __LINE__); + return 0; +} + +float Entity::GetMaxSpeed(){ + return max_speed; +} + +void Entity::SetMaxSpeed(float val){ + max_speed = val; +} + +void Entity::CalculateBonuses(){ + InfoStruct* info = &info_struct; + info->block = info->block_base; + + info->cur_attack = info->attack_base; + info->cur_mitigation = info->mitigation_base; + info->base_avoidance_pct = info->avoidance_base; + + LogWrite(MISC__TODO, 1, "TODO", "Calculate via current spells\n\t(%s, function: %s, line #: %i)", __FILE__, __FUNCTION__, __LINE__); + + //info->cur_concentration = 0; + info->parry = info->parry_base; + info->deflection = info->deflection_base; + + info->disease = info->disease_base; + info->divine = info->divine_base; + info->heat = info->heat_base; + info->magic = info->magic_base; + info->mental = info->mental_base; + info->cold = info->cold_base; + info->poison = info->poison_base; + info->elemental_base = info->heat; + info->noxious_base = info->poison; + info->arcane_base = info->magic; + + info->sta = info->sta_base; + info->agi = info->agi_base; + info->str = info->str_base; + info->wis = info->wis_base; + info->intel = info->intel_base; + info->ability_modifier = 0; + info->critical_mitigation = 0; + info->block_chance = 0; + info->crit_chance = 0; + info->crit_bonus = 0; + info->potency = 0; + info->hate_mod = 0; + info->reuse_speed = 0; + info->casting_speed = 0; + info->recovery_speed = 0; + info->spell_reuse_speed = 0; + info->spell_multi_attack = 0; + info->dps = 0; + info->dps_multiplier = 0; + info->haste = 0; + info->attackspeed = 0; + info->multi_attack = 0; + info->flurry = 0; + info->melee_ae = 0; + info->strikethrough = 0; + info->accuracy = 0; + info->offensivespeed = 0; + + stats.clear(); + ItemStatsValues* values = equipment_list.CalculateEquipmentBonuses(this); + CalculateSpellBonuses(values); + info->sta += values->sta; + info->str += values->str; + info->agi += values->agi; + info->wis += values->wis; + info->intel += values->int_; + + info->disease += values->vs_disease; + info->divine += values->vs_divine; + info->heat += values->vs_heat; + info->magic += values->vs_magic; + int32 sta_hp_bonus = 0.0; + int32 prim_power_bonus = 0.0; + float bonus_mod = 0.0; + if (IsPlayer()) { + bonus_mod = CalculateBonusMod(); + sta_hp_bonus = info->sta * bonus_mod; + prim_power_bonus = GetPrimaryStat() * bonus_mod; + } + prim_power_bonus = floor(float(prim_power_bonus)); + sta_hp_bonus = floor(float(sta_hp_bonus)); + SetTotalHP(GetTotalHPBase() + values->health + sta_hp_bonus); + SetTotalPower(GetTotalPowerBase() + values->power + prim_power_bonus); + if(GetHP() > GetTotalHP()) + SetHP(GetTotalHP()); + if(GetPower() > GetTotalPower()) + SetPower(GetTotalPower()); + info->mental += values->vs_mental; + info->poison += values->vs_poison; + info->max_concentration += values->concentration; + info->cold += values->vs_cold; + info->mitigation_skill1 += values->vs_slash; + info->mitigation_skill2 += values->vs_pierce; + info->mitigation_skill3 += values->vs_crush; + info->ability_modifier += values->ability_modifier; + info->critical_mitigation += values->criticalmitigation; + info->block_chance += values->extrashieldblockchance; + info->crit_chance += values->beneficialcritchance; + info->crit_bonus += values->critbonus; + info->potency += values->potency; + info->hate_mod += values->hategainmod; + info->reuse_speed += values->abilityreusespeed; + info->casting_speed += values->abilitycastingspeed; + info->recovery_speed += values->abilityrecoveryspeed; + info->spell_reuse_speed += values->spellreusespeed; + info->spell_multi_attack += values->spellmultiattackchance; + info->dps += values->dps; + info->dps_multiplier = CalculateDPSMultiplier(); + info->haste += values->attackspeed; + info->multi_attack += values->multiattackchance; + info->flurry += values->flurry; + info->melee_ae += values->aeautoattackchance; + info->strikethrough += values->strikethrough; + info->accuracy += values->accuracy; + info->offensivespeed += values->offensivespeed; + info->uncontested_block += values->uncontested_block; + info->uncontested_parry += values->uncontested_parry; + info->uncontested_dodge += values->uncontested_dodge; + info->uncontested_riposte += values->uncontested_riposte; + safe_delete(values); +} + +EquipmentItemList* Entity::GetEquipmentList(){ + return &equipment_list; +} + +void Entity::SetEquipment(Item* item, int8 slot){ + if(!item && slot < NUM_SLOTS){ + SetInfo(&equipment.equip_id[slot], 0); + SetInfo(&equipment.color[slot].red, 0); + SetInfo(&equipment.color[slot].green, 0); + SetInfo(&equipment.color[slot].blue, 0); + SetInfo(&equipment.highlight[slot].red, 0); + SetInfo(&equipment.highlight[slot].green, 0); + SetInfo(&equipment.highlight[slot].blue, 0); + } + else{ + SetInfo(&equipment.equip_id[item->details.slot_id], item->generic_info.appearance_id); + SetInfo(&equipment.color[item->details.slot_id].red, item->generic_info.appearance_red); + SetInfo(&equipment.color[item->details.slot_id].green, item->generic_info.appearance_green); + SetInfo(&equipment.color[item->details.slot_id].blue, item->generic_info.appearance_blue); + SetInfo(&equipment.highlight[item->details.slot_id].red, item->generic_info.appearance_highlight_red); + SetInfo(&equipment.highlight[item->details.slot_id].green, item->generic_info.appearance_highlight_green); + SetInfo(&equipment.highlight[item->details.slot_id].blue, item->generic_info.appearance_highlight_blue); + } +} + +bool Entity::CheckSpellBonusRemoval(LuaSpell* spell, int16 type){ + MutexList::iterator itr = bonus_list.begin(); + while(itr.Next()){ + if(itr.value->luaspell == spell && itr.value->type == type){ + bonus_list.Remove(itr.value, true); + return true; + } + } + return false; +} + +void Entity::AddSpellBonus(LuaSpell* spell, int16 type, float value, int64 class_req, vector race_req, vector faction_req){ + CheckSpellBonusRemoval(spell, type); + BonusValues* bonus = new BonusValues; + bonus->spell_id = spell->spell->GetSpellID(); + bonus->luaspell = spell; + bonus->type = type; + bonus->value = value; + bonus->class_req = class_req; + bonus->race_req = race_req; + bonus->faction_req = faction_req; + bonus->tier = spell ? spell->spell->GetSpellTier() : 0; + bonus_list.Add(bonus); + +} + +BonusValues* Entity::GetSpellBonus(int32 spell_id) { + BonusValues *ret = 0; + MutexList::iterator itr = bonus_list.begin(); + while (itr.Next()) { + if (itr.value->spell_id == spell_id) { + ret = itr.value; + break; + } + } + + return ret; +} + +vector* Entity::GetAllSpellBonuses(LuaSpell* spell) { + vector* list = new vector; + MutexList::iterator itr = bonus_list.begin(); + while (itr.Next()) { + if (itr.value->luaspell == spell) + list->push_back(itr.value); + } + return list; +} + +void Entity::RemoveSpellBonus(const LuaSpell* spell){ + MutexList::iterator itr = bonus_list.begin(); + while(itr.Next()){ + if(itr.value->luaspell == spell) + bonus_list.Remove(itr.value, true); + } +} + +void Entity::CalculateSpellBonuses(ItemStatsValues* stats){ + if(stats){ + MutexList::iterator itr = bonus_list.begin(); + vector bv; + //First check if we meet the requirement for each bonus + bool race_match = false; + while(itr.Next()) { + if (itr.value->race_req.size() > 0) { + for (int8 i; i < itr.value->race_req.size(); i++) { + if (GetRace() == itr.value->race_req[i]) { + race_match = true; + } + } + } + else + race_match = true; // if the race_req.size = 0 then there is no race requirement and the race_match will be true + int64 const class1 = pow(2.0, (GetAdventureClass() - 1)); + int64 const class2 = pow(2.0, (classes.GetSecondaryBaseClass(GetAdventureClass()) - 1)); + int64 const class3 = pow(2.0, (classes.GetBaseClass(GetAdventureClass()) - 1)); + if (itr.value->class_req == 0 || (itr.value->class_req & class1) == class1 || (itr.value->class_req & class2) == class2 || (itr.value->class_req & class3) == class3 && race_match ) + bv.push_back(itr.value); + } + //Sort the bonuses by spell id and luaspell + BonusValues* bonus = nullptr; + map > > sort; + for (int8 i = 0; i < bv.size(); i++){ + bonus = bv.at(i); + sort[bonus->spell_id][bonus->luaspell].push_back(bonus); + } + //Now check for the highest tier of each spell id and apply those bonuses + map >::iterator tier_itr; + map > >::iterator sort_itr; + for (sort_itr = sort.begin(); sort_itr != sort.end(); sort_itr++){ + LuaSpell* key = nullptr; + sint8 highest_tier = -1; + //Find the highest tier for this spell id + for (tier_itr = sort_itr->second.begin(); tier_itr != sort_itr->second.end(); tier_itr++){ + LuaSpell* current_spell = tier_itr->first; + sint8 current_tier = 0; + if (current_spell && ((current_tier = current_spell->spell->GetSpellTier()) > highest_tier)) { + highest_tier = current_tier; + key = current_spell; + } + } + //We've found the highest tier for this spell id, so add the bonuses + vector* final_bonuses = &sort_itr->second[key]; + for (int8 i = 0; i < final_bonuses->size(); i++) + world.AddBonuses(stats, final_bonuses->at(i)->type, final_bonuses->at(i)->value, this); + } + } +} + +void Entity::AddMezSpell(LuaSpell* spell) { + if (!spell) + return; + + if (!control_effects[CONTROL_EFFECT_TYPE_MEZ]) + control_effects[CONTROL_EFFECT_TYPE_MEZ] = new MutexList; + + MutexList* mez_spells = control_effects[CONTROL_EFFECT_TYPE_MEZ]; + + if (IsPlayer() && !IsStunned() && !IsMezImmune() && mez_spells->size(true) == 0){ + ((Player*)this)->SetPlayerControlFlag(1, 16, true); + if (!IsRooted()) + ((Player*)this)->SetPlayerControlFlag(1, 8, true); + if (!IsStifled() && !IsFeared()) + GetZone()->LockAllSpells((Player*)this); + } + + mez_spells->Add(spell); +} + +void Entity::RemoveMezSpell(LuaSpell* spell) { + MutexList* mez_spells = control_effects[CONTROL_EFFECT_TYPE_MEZ]; + if (!mez_spells || mez_spells->size(true) == 0) + return; + + mez_spells->Remove(spell); + if (mez_spells->size(true) == 0){ + if (IsPlayer() && !IsMezImmune() && !IsStunned()){ + if (!IsStifled() && !IsFeared()) + GetZone()->UnlockAllSpells((Player*)this); + ((Player*)this)->SetPlayerControlFlag(1, 16, false); + if (!IsRooted()) + ((Player*)this)->SetPlayerControlFlag(1, 8, false); + } + } +} + +void Entity::RemoveAllMezSpells() { + MutexList* mez_spells = control_effects[CONTROL_EFFECT_TYPE_MEZ]; + if (!mez_spells) + return; + + MutexList::iterator itr = mez_spells->begin(); + while (itr.Next()){ + LuaSpell* spell = itr.value; + if (!spell) + continue; + GetZone()->RemoveTargetFromSpell(spell, this); + RemoveDetrimentalSpell(spell); + RemoveSpellEffect(spell); + if (IsPlayer()) + ((Player*)this)->RemoveSkillBonus(spell->spell->GetSpellID()); + } + + mez_spells->clear(); + if (IsPlayer() && !IsMezImmune() && !IsStunned()){ + if (!IsStifled() && !IsFeared()) + GetZone()->UnlockAllSpells((Player*)this); + ((Player*)this)->SetPlayerControlFlag(1, 16, false); + if (!IsRooted()) + ((Player*)this)->SetPlayerControlFlag(1, 8, false); + } +} + +void Entity::AddStifleSpell(LuaSpell* spell) { + if (!spell) + return; + + if (!control_effects[CONTROL_EFFECT_TYPE_STIFLE]) + control_effects[CONTROL_EFFECT_TYPE_STIFLE] = new MutexList; + + if (IsPlayer() && control_effects[CONTROL_EFFECT_TYPE_STIFLE]->size(true) == 0 && !IsStifleImmune() && !IsMezzedOrStunned()) + GetZone()->LockAllSpells((Player*)this); + + control_effects[CONTROL_EFFECT_TYPE_STIFLE]->Add(spell); +} + +void Entity::RemoveStifleSpell(LuaSpell* spell) { + MutexList* stifle_list = control_effects[CONTROL_EFFECT_TYPE_STIFLE]; + if (!stifle_list || stifle_list->size(true) == 0) + return; + + stifle_list->Remove(spell); + + if (IsPlayer() && stifle_list->size(true) == 0 && !IsStifleImmune() && !IsMezzedOrStunned()) + GetZone()->UnlockAllSpells((Player*)this); +} + +void Entity::AddDazeSpell(LuaSpell* spell) { + if (!spell) + return; + + if (!control_effects[CONTROL_EFFECT_TYPE_DAZE]) + control_effects[CONTROL_EFFECT_TYPE_DAZE] = new MutexList; + + control_effects[CONTROL_EFFECT_TYPE_DAZE]->Add(spell); +} + +void Entity::RemoveDazeSpell(LuaSpell* spell) { + MutexList* daze_list = control_effects[CONTROL_EFFECT_TYPE_DAZE]; + if (!daze_list || daze_list->size(true) == 0) + return; + + daze_list->Remove(spell); +} + +void Entity::AddStunSpell(LuaSpell* spell) { + if (!spell) + return; + + if (!control_effects[CONTROL_EFFECT_TYPE_STUN]) + control_effects[CONTROL_EFFECT_TYPE_STUN] = new MutexList; + + if (IsPlayer() && control_effects[CONTROL_EFFECT_TYPE_STUN]->size(true) == 0 && !IsStunImmune()){ + if (!IsMezzed()){ + ((Player*)this)->SetPlayerControlFlag(1, 16, true); + if (!IsRooted()) + ((Player*)this)->SetPlayerControlFlag(1, 8, true); + if (!IsStifled() && !IsFeared()) + GetZone()->LockAllSpells((Player*)this); + } + } + + control_effects[CONTROL_EFFECT_TYPE_STUN]->Add(spell); +} + +void Entity::RemoveStunSpell(LuaSpell* spell) { + MutexList* stun_list = control_effects[CONTROL_EFFECT_TYPE_STUN]; + if (!stun_list || stun_list->size(true) == 0) + return; + + stun_list->Remove(spell); + if (stun_list->size(true) == 0){ + if (IsPlayer() && !IsMezzed() && !IsStunImmune()){ + ((Player*)this)->SetPlayerControlFlag(1, 16, false); + if (!IsRooted()) + ((Player*)this)->SetPlayerControlFlag(1, 8, false); + if (!IsStifled() && !IsFeared()) + GetZone()->UnlockAllSpells((Player*)this); + } + } +} + +void Entity::HideDeityPet(bool val) { + if (!deityPet) + return; + + if (val) { + deityPet->AddAllowAccessSpawn(deityPet); + GetZone()->HidePrivateSpawn(deityPet); + } + else + deityPet->MakeSpawnPublic(); +} + +void Entity::HideCosmeticPet(bool val) { + if (!cosmeticPet) + return; + + if (val) { + cosmeticPet->AddAllowAccessSpawn(cosmeticPet); + GetZone()->HidePrivateSpawn(cosmeticPet); + } + else + cosmeticPet->MakeSpawnPublic(); +} + +void Entity::DismissPet(NPC* pet, bool from_death) { + if (!pet) + return; + + Entity* PetOwner = pet->GetOwner(); + + pet->SetDismissing(true); + + // Remove the spell maintained spell + Spell* spell = master_spell_list.GetSpell(pet->GetPetSpellID(), pet->GetPetSpellTier()); + if (spell) + GetZone()->GetSpellProcess()->DeleteCasterSpell(this, spell); + + if (pet->GetPetType() == PET_TYPE_CHARMED) { + PetOwner->SetCharmedPet(0); + + if (!from_death) { + // set the pet flag to false, owner to 0, and give the mob its old brain back + pet->SetPet(false); + pet->SetOwner(0); + pet->SetBrain(new Brain(pet)); + pet->SetDismissing(false); + } + } + else if (pet->GetPetType() == PET_TYPE_COMBAT) + PetOwner->SetCombatPet(0); + else if (pet->GetPetType() == PET_TYPE_DEITY) + PetOwner->SetDeityPet(0); + else if (pet->GetPetType() == PET_TYPE_COSMETIC) + PetOwner->SetCosmeticPet(0); + + // if owner is player and no combat pets left reset the pet info + if (PetOwner->IsPlayer()) { + if (!PetOwner->GetPet() && !PetOwner->GetCharmedPet()) + ((Player*)PetOwner)->ResetPetInfo(); + } + + // remove the spawn from the world + if (!from_death && pet->GetPetType() != PET_TYPE_CHARMED) + GetZone()->RemoveSpawn(pet); +} + +float Entity::CalculateBonusMod() { + int8 level = GetLevel(); + if (level <= 20) + return 3.0; + else if (level >= 90) + return 10.0; + else + return (level - 20) * .1 + 3.0; +} + +float Entity::CalculateDPSMultiplier(){ + float dps = GetInfoStruct()->dps; + + if (dps > 0){ + if (dps <= 100) + return (dps / 100 + 1); + else if (dps <= 200) + return (((dps - 100) * .25 + 100) / 100 + 1); + else if (dps <= 300) + return (((dps - 200) * .1 + 125) / 100 + 1); + else if (dps <= 900) + return (((dps - 300) * .05 + 135) / 100 + 1); + else + return (((dps - 900) * .01 + 165) / 100 + 1); + } + return 1; +} + +void Entity::AddWard(int32 spellID, WardInfo* ward) { + if (m_wardList.count(spellID) == 0) { + m_wardList[spellID] = ward; + } +} + +WardInfo* Entity::GetWard(int32 spellID) { + WardInfo* ret = 0; + + if (m_wardList.count(spellID) > 0) + ret = m_wardList[spellID]; + + return ret; +} + +void Entity::RemoveWard(int32 spellID) { + if (m_wardList.count(spellID) > 0) { + // Delete the ward info + safe_delete(m_wardList[spellID]); + // Remove from the ward list + m_wardList.erase(spellID); + } +} + +int32 Entity::CheckWards(int32 damage, int8 damage_type) { + map::iterator itr; + WardInfo* ward = 0; + LuaSpell* spell = 0; + + while (m_wardList.size() > 0 && damage > 0) { + // Get the ward with the lowest base damage + for (itr = m_wardList.begin(); itr != m_wardList.end(); itr++) { + if (!ward || itr->second->BaseDamage < ward->BaseDamage) { + if (itr->second->DamageLeft > 0 && + (itr->second->WardType == WARD_TYPE_ALL || + (itr->second->WardType == WARD_TYPE_PHYSICAL && damage_type >= DAMAGE_PACKET_DAMAGE_TYPE_SLASH && damage_type <= DAMAGE_PACKET_DAMAGE_TYPE_PIERCE) || + (itr->second->WardType == WARD_TYPE_MAGICAL && ((itr->second->DamageType == 0 && damage_type >= DAMAGE_PACKET_DAMAGE_TYPE_PIERCE) || (damage_type >= DAMAGE_PACKET_DAMAGE_TYPE_PIERCE && itr->second->DamageType == damage_type))))) + ward = itr->second; + } + } + + if (!ward) + break; + + spell = ward->Spell; + + if (damage >= ward->DamageLeft) { + // Damage is greater than or equal to the amount left on the ward + damage -= ward->DamageLeft; + ward->DamageLeft = 0; + spell->damage_remaining = 0; + GetZone()->SendHealPacket(spell->caster, this, HEAL_PACKET_TYPE_ABSORB, ward->DamageLeft, spell->spell->GetName()); + if (!ward->keepWard) { + RemoveWard(spell->spell->GetSpellID()); + GetZone()->GetSpellProcess()->DeleteCasterSpell(spell); + } + } + else { + // Damage is less then the amount left on the ward + ward->DamageLeft -= damage; + spell->damage_remaining = ward->DamageLeft; + if (spell->caster->IsPlayer()) + ClientPacketFunctions::SendMaintainedExamineUpdate(GetZone()->GetClientBySpawn(spell->caster), spell->slot_pos, ward->DamageLeft, 1); + GetZone()->SendHealPacket(ward->Spell->caster, this, HEAL_PACKET_TYPE_ABSORB, damage, spell->spell->GetName()); + damage = 0; + } + + // Reset ward pointer + ward = 0; + } + + return damage; +} + +float Entity::CalculateCastingSpeedMod() { + float cast_speed = info_struct.casting_speed; + + if(cast_speed > 0) + return 100 * max((float) 0.5, (float) (1 + (1 - (1 / (1 + (cast_speed * .01)))))); + else if (cast_speed < 0) + return 100 * min((float) 1.5, (float) (1 + (1 - (1 / (1 + (cast_speed * -.01)))))); + return 0; +} + +float Entity::GetSpeed() { + float ret = speed; + + if (IsStealthed() || IsInvis()) + ret += stats[ITEM_STAT_STEALTHINVISSPEEDMOD]; + else if (EngagedInCombat()) + ret += stats[ITEM_STAT_OFFENSIVESPEED]; + else + ret += max(stats[ITEM_STAT_SPEED], stats[ITEM_STAT_MOUNTSPEED]); + + ret *= speed_multiplier; + return ret; +} + +float Entity::GetAirSpeed() { + float ret = speed; + + if (!EngagedInCombat()) + ret += stats[ITEM_STAT_MOUNTAIRSPEED]; + + ret *= speed_multiplier; + return ret; +} + +int8 Entity::GetTraumaCount() { + return det_count_list[DET_TYPE_TRAUMA]; +} + +int8 Entity::GetArcaneCount() { + return det_count_list[DET_TYPE_ARCANE]; +} + +int8 Entity::GetNoxiousCount() { + return det_count_list[DET_TYPE_NOXIOUS]; +} + +int8 Entity::GetElementalCount() { + return det_count_list[DET_TYPE_ELEMENTAL]; +} + +int8 Entity::GetCurseCount() { + return det_count_list[DET_TYPE_CURSE]; +} + +Mutex* Entity::GetDetrimentMutex() { + return &MDetriments; +} + +Mutex* Entity::GetMaintainedMutex() { + return &MMaintainedSpells; +} + +Mutex* Entity::GetSpellEffectMutex() { + return &MSpellEffects; +} + +bool Entity::HasCurableDetrimentType(int8 det_type) { + DetrimentalEffects* det; + bool ret = false; + MDetriments.readlock(__FUNCTION__, __LINE__); + for (int32 i = 0; i < detrimental_spell_effects.size(); i++){ + det = &detrimental_spell_effects.at(i); + if(det && det->det_type == det_type && !det->incurable){ + ret = true; + break; + } + } + MDetriments.releasereadlock(__FUNCTION__, __LINE__); + return ret; +} + +void Entity::ClearAllDetriments() { + MDetriments.writelock(__FUNCTION__, __LINE__); + detrimental_spell_effects.clear(); + det_count_list.clear(); + MDetriments.releasewritelock(__FUNCTION__, __LINE__); +} + +void Entity::CureDetrimentByType(int8 cure_count, int8 det_type, string cure_name, Entity* caster, int8 cure_level) { + if (cure_count <= 0 || GetDetTypeCount(det_type) <= 0) + return; + + vector* det_list = &detrimental_spell_effects; + DetrimentalEffects* det; + vector remove_list; + LuaSpell* spell = 0; + vector* levels; + int8 caster_class1 = 0; + int8 caster_class2 = 0; + int8 caster_class3 = 0; + int8 level_class = 0; + InfoStruct* info_struct = 0; + bool pass_level_check = false; + + MDetriments.readlock(__FUNCTION__, __LINE__); + for (int32 i = 0; isize(); i++){ + det = &det_list->at(i); + if (det && det->det_type == det_type && !det->incurable){ + levels = det->spell->spell->GetSpellLevels(); + info_struct = det->caster->GetInfoStruct(); + caster_class1 = info_struct->class1; + caster_class2 = info_struct->class2; + caster_class3 = info_struct->class3; + pass_level_check = false; + for (int32 x = 0; x < levels->size(); x++){ + level_class = levels->at(x)->adventure_class; + if (!cure_level || ((caster_class1 == level_class || caster_class2 == level_class || caster_class3 == level_class) + && cure_level >= (levels->at(x)->spell_level / 10))){ + pass_level_check = true; + break; + } + } + if (pass_level_check){ + remove_list.push_back(det->spell); + cure_count--; + if (cure_count == 0) + break; + } + } + } + MDetriments.releasereadlock(__FUNCTION__, __LINE__); + + for (int32 i = 0; iSendDispellPacket(caster, this, cure_name, (string)remove_list.at(i)->spell->GetName(), DISPELL_TYPE_CURE); + if (GetZone()) + GetZone()->RemoveTargetFromSpell(spell, this); + RemoveSpellEffect(spell); + RemoveDetrimentalSpell(spell); + } + remove_list.clear(); +} + +void Entity::CureDetrimentByControlEffect(int8 cure_count, int8 control_type, string cure_name, Entity* caster, int8 cure_level) { + if (cure_count <= 0 || GetDetCount() <= 0) + return; + + vector* det_list = &detrimental_spell_effects; + DetrimentalEffects* det; + vector remove_list; + LuaSpell* spell = 0; + vector* levels; + int8 caster_class1 = 0; + int8 caster_class2 = 0; + int8 caster_class3 = 0; + int8 level_class = 0; + InfoStruct* info_struct = 0; + bool pass_level_check = false; + + MDetriments.readlock(__FUNCTION__, __LINE__); + for (int32 i = 0; isize(); i++){ + det = &det_list->at(i); + if (det && det->control_effect == control_type && !det->incurable){ + levels = det->spell->spell->GetSpellLevels(); + info_struct = det->caster->GetInfoStruct(); + caster_class1 = info_struct->class1; + caster_class2 = info_struct->class2; + caster_class3 = info_struct->class3; + pass_level_check = false; + for (int32 x = 0; x < levels->size(); x++){ + level_class = levels->at(x)->adventure_class; + if (!cure_level || ((caster_class1 == level_class || caster_class2 == level_class || caster_class3 == level_class) + && cure_level >= (levels->at(x)->spell_level / 10))){ + pass_level_check = true; + break; + } + } + if (pass_level_check){ + remove_list.push_back(det->spell); + cure_count--; + if (cure_count == 0) + break; + } + } + } + MDetriments.releasereadlock(__FUNCTION__, __LINE__); + + for (int32 i = 0; iSendDispellPacket(caster, this, cure_name, (string)remove_list.at(i)->spell->GetName(), DISPELL_TYPE_CURE); + if (GetZone()) + GetZone()->RemoveTargetFromSpell(spell, this); + RemoveSpellEffect(spell); + RemoveDetrimentalSpell(spell); + } + remove_list.clear(); +} + +void Entity::RemoveDetrimentalSpell(LuaSpell* spell) { + if(!spell || spell->spell->GetSpellData()->det_type == 0) + return; + MDetriments.writelock(__FUNCTION__, __LINE__); + vector* det_list = &detrimental_spell_effects; + vector::iterator itr; + for(itr = det_list->begin(); itr != det_list->end(); itr++){ + if((*itr).spell == spell){ + det_count_list[(*itr).det_type]--; + det_list->erase(itr); + if(IsPlayer()) + ((Player*)this)->SetCharSheetChanged(true); + break; + } + } + MDetriments.releasewritelock(__FUNCTION__, __LINE__); +} + +int8 Entity::GetDetTypeCount(int8 det_type){ + return det_count_list[det_type]; +} + +int8 Entity::GetDetCount() { + int8 det_count = 0; + map::iterator itr; + + for(itr=det_count_list.begin(); itr != det_count_list.end(); itr++) + det_count += (*itr).second; + + return det_count; +} + +vector* Entity::GetDetrimentalSpellEffects() { + return &detrimental_spell_effects; +} + +void Entity::AddDetrimentalSpell(LuaSpell* luaspell){ + if(!luaspell || !luaspell->caster) + return; + + Spell* spell = luaspell->spell; + DetrimentalEffects* det = GetDetrimentalEffect(spell->GetSpellID(), luaspell->caster); + DetrimentalEffects new_det; + if(det) + RemoveDetrimentalSpell(det->spell); + + SpellData* data = spell->GetSpellData(); + if(!data) + return; + + new_det.caster = luaspell->caster; + new_det.spell = luaspell; + if (spell->GetSpellData()->duration_until_cancel) + new_det.expire_timestamp = 0xFFFFFFFF; + else + new_det.expire_timestamp = Timer::GetCurrentTime2() + (spell->GetSpellDuration()*100); + new_det.icon = data->icon; + new_det.icon_backdrop = data->icon_backdrop; + new_det.tier = data->tier; + new_det.det_type = data->det_type; + new_det.incurable = data->incurable; + new_det.spell_id = spell->GetSpellID(); + new_det.control_effect = data->control_effect_type; + new_det.total_time = spell->GetSpellDuration()/10; + + MDetriments.writelock(__FUNCTION__, __LINE__); + detrimental_spell_effects.push_back(new_det); + det_count_list[new_det.det_type]++; + MDetriments.releasewritelock(__FUNCTION__, __LINE__); +} + +DetrimentalEffects* Entity::GetDetrimentalEffect(int32 spell_id, Entity* caster){ + vector* det_list = &detrimental_spell_effects; + DetrimentalEffects* ret = 0; + MDetriments.readlock(__FUNCTION__, __LINE__); + for(int32 i=0; isize(); i++){ + if (det_list->at(i).spell_id == spell_id && det_list->at(i).caster == caster) + ret = &det_list->at(i); + } + MDetriments.releasereadlock(__FUNCTION__, __LINE__); + + return ret; +} + +void Entity::CancelAllStealth() { + bool did_change = false; + MutexList* stealth_list = control_effects[CONTROL_EFFECT_TYPE_STEALTH]; + if (stealth_list){ + MutexList::iterator itr = stealth_list->begin(); + while (itr.Next()){ + if (itr.value->caster == this) + GetZone()->GetSpellProcess()->AddSpellCancel(itr.value); + else{ + GetZone()->RemoveTargetFromSpell(itr.value, this); + RemoveSpellEffect(itr.value); + } + did_change = true; + } + } + MutexList* invis_list = control_effects[CONTROL_EFFECT_TYPE_INVIS]; + if (invis_list){ + MutexList::iterator invis_itr = invis_list->begin(); + while (invis_itr.Next()){ + if (invis_itr.value->caster == this) + GetZone()->GetSpellProcess()->AddSpellCancel(invis_itr.value); + else{ + GetZone()->RemoveTargetFromSpell(invis_itr.value, this); + RemoveSpellEffect(invis_itr.value); + } + did_change = true; + } + } + + if (did_change){ + info_changed = true; + changed = true; + AddChangedZoneSpawn(); + if (IsPlayer()) + ((Player*)this)->SetCharSheetChanged(true); + } +} + +bool Entity::IsStealthed(){ + MutexList* stealth_list = control_effects[CONTROL_EFFECT_TYPE_STEALTH]; + return (!stealth_list || stealth_list->size(true) == 0) == false; +} + +bool Entity::IsInvis(){ + MutexList* invis_list = control_effects[CONTROL_EFFECT_TYPE_INVIS]; + return (!invis_list || invis_list->size(true) == 0) == false; +} + +void Entity::AddStealthSpell(LuaSpell* spell) { + if (!spell) + return; + + if (!control_effects[CONTROL_EFFECT_TYPE_STEALTH]) + control_effects[CONTROL_EFFECT_TYPE_STEALTH] = new MutexList; + + control_effects[CONTROL_EFFECT_TYPE_STEALTH]->Add(spell); + if (control_effects[CONTROL_EFFECT_TYPE_STEALTH]->size(true) == 1){ + info_changed = true; + changed = true; + AddChangedZoneSpawn(); + if (IsPlayer()) + ((Player*)this)->SetCharSheetChanged(true); + } +} + +void Entity::AddInvisSpell(LuaSpell* spell) { + if (!spell) + return; + + if (!control_effects[CONTROL_EFFECT_TYPE_INVIS]) + control_effects[CONTROL_EFFECT_TYPE_INVIS] = new MutexList; + + control_effects[CONTROL_EFFECT_TYPE_INVIS]->Add(spell); + if (control_effects[CONTROL_EFFECT_TYPE_INVIS]->size(true) == 1){ + info_changed = true; + changed = true; + AddChangedZoneSpawn(); + if (IsPlayer()) + ((Player*)this)->SetCharSheetChanged(true); + } +} + +void Entity::RemoveInvisSpell(LuaSpell* spell) { + MutexList* invis_list = control_effects[CONTROL_EFFECT_TYPE_INVIS]; + if (!invis_list || invis_list->size(true) == 0) + return; + + invis_list->Remove(spell); + RemoveSpellEffect(spell); + if (invis_list->size(true) == 0){ + info_changed = true; + changed = true; + AddChangedZoneSpawn(); + if (IsPlayer()) + ((Player*)this)->SetCharSheetChanged(true); + } +} + +void Entity::RemoveStealthSpell(LuaSpell* spell) { + MutexList* stealth_list = control_effects[CONTROL_EFFECT_TYPE_STEALTH]; + if (!stealth_list || stealth_list->size(true) == 0) + return; + + stealth_list->Remove(spell); + RemoveSpellEffect(spell); + if (stealth_list->size() == 0){ + info_changed = true; + changed = true; + AddChangedZoneSpawn(); + if (IsPlayer()) + ((Player*)this)->SetCharSheetChanged(true); + } +} + +void Entity::AddRootSpell(LuaSpell* spell) { + if (!spell) + return; + + if (!control_effects[CONTROL_EFFECT_TYPE_ROOT]) + control_effects[CONTROL_EFFECT_TYPE_ROOT] = new MutexList; + + if (control_effects[CONTROL_EFFECT_TYPE_ROOT]->size(true) == 0 && !IsRootImmune()) { + if (IsPlayer()){ + if (!IsMezzedOrStunned()) + ((Player*)this)->SetPlayerControlFlag(1, 8, true); // heading movement only + } + else + SetSpeedMultiplier(0.0f); + } + + control_effects[CONTROL_EFFECT_TYPE_ROOT]->Add(spell); +} + +void Entity::RemoveRootSpell(LuaSpell* spell) { + MutexList* root_list = control_effects[CONTROL_EFFECT_TYPE_ROOT]; + if (!root_list || root_list->size(true) == 0) + return; + + root_list->Remove(spell); + if (root_list->size(true) == 0 && !IsRootImmune()) { + if (IsPlayer()){ + if (!IsMezzedOrStunned()) + ((Player*)this)->SetPlayerControlFlag(1, 8, false); // heading movement only + } + else { + // GetHighestSnare() will return 1.0f if no snares returning the spawn to full speed + SetSpeedMultiplier(GetHighestSnare()); + } + } +} + +void Entity::AddFearSpell(LuaSpell* spell){ + if (!spell) + return; + + if (!control_effects[CONTROL_EFFECT_TYPE_FEAR]) + control_effects[CONTROL_EFFECT_TYPE_FEAR] = new MutexList; + + if (IsPlayer() && control_effects[CONTROL_EFFECT_TYPE_FEAR]->size(true) == 0 && !IsFearImmune()){ + ((Player*)this)->SetPlayerControlFlag(4, 4, true); // feared + if (!IsMezzedOrStunned() && !IsStifled()) + GetZone()->LockAllSpells((Player*)this); + } + + control_effects[CONTROL_EFFECT_TYPE_FEAR]->Add(spell); +} + +void Entity::RemoveFearSpell(LuaSpell* spell){ + MutexList* fear_list = control_effects[CONTROL_EFFECT_TYPE_FEAR]; + if (!fear_list || fear_list->size(true) == 0) + return; + + fear_list->Remove(spell); + + if (IsPlayer() && fear_list->size(true) == 0 && !IsFearImmune()){ + ((Player*)this)->SetPlayerControlFlag(4, 4, false); // feared disabled + if (!IsMezzedOrStunned() && !IsStifled()) + GetZone()->LockAllSpells((Player*)this); + } +} + +void Entity::AddSnareSpell(LuaSpell* spell) { + if (!spell) + return; + + if (!control_effects[CONTROL_EFFECT_TYPE_SNARE]) + control_effects[CONTROL_EFFECT_TYPE_SNARE] = new MutexList; + + control_effects[CONTROL_EFFECT_TYPE_SNARE]->Add(spell); + + // Don't set speed multiplier if there is a root or no snare values + MutexList* roots = control_effects[CONTROL_EFFECT_TYPE_ROOT]; + if ((!roots || roots->size(true) == 0) && snare_values.size() > 0) + SetSpeedMultiplier(GetHighestSnare()); +} + +void Entity::RemoveSnareSpell(LuaSpell* spell) { + MutexList* snare_list = control_effects[CONTROL_EFFECT_TYPE_SNARE]; + if (!snare_list || snare_list->size(true) == 0) + return; + + snare_list->Remove(spell); + snare_values.erase(spell); + + //LogWrite(PLAYER__ERROR, 0, "Debug", "snare_values.size() = %u", snare_values.size()); + + // only change speeds if there are no roots + MutexList* roots = control_effects[CONTROL_EFFECT_TYPE_ROOT]; + if (!roots || roots->size(true) == 0) { + float multiplier = GetHighestSnare(); + //LogWrite(PLAYER__ERROR, 0, "Debug", "GetHighestSnare() = %f", multiplier); + SetSpeedMultiplier(multiplier); + } +} + +void Entity::SetSnareValue(LuaSpell* spell, float snare_val) { + if (!spell) + return; + + snare_values[spell] = snare_val; +} + +float Entity::GetHighestSnare() { + // For simplicity this will return the highest snare value, which is actually the lowest value + float ret = 1.0f; + + if (snare_values.size() == 0) + return ret; + + map::iterator itr; + for (itr = snare_values.begin(); itr != snare_values.end(); itr++) { + if (itr->second < ret) + ret = itr->second; + } + + return ret; +} + +bool Entity::IsSnared() { + MutexList* snare_list = control_effects[CONTROL_EFFECT_TYPE_SNARE]; + return (!snare_list || snare_list->size(true) == 0) == false; +} + +bool Entity::IsMezzed(){ + MutexList* mez_spells = control_effects[CONTROL_EFFECT_TYPE_MEZ]; + return (!mez_spells || mez_spells->size(true) == 0 || IsMezImmune()) == false; +} + +bool Entity::IsStifled(){ + MutexList* stifle_list = control_effects[CONTROL_EFFECT_TYPE_STIFLE]; + return (!stifle_list || stifle_list->size(true) == 0 || IsStifleImmune()) == false; +} + +bool Entity::IsDazed(){ + MutexList* daze_list = control_effects[CONTROL_EFFECT_TYPE_DAZE]; + return (!daze_list || daze_list->size(true) == 0 || IsDazeImmune()) == false; +} + +bool Entity::IsStunned(){ + MutexList* stun_list = control_effects[CONTROL_EFFECT_TYPE_STUN]; + return (!stun_list || stun_list->size(true) == 0 || IsStunImmune()) == false; +} + +bool Entity::IsRooted(){ + MutexList* root_list = control_effects[CONTROL_EFFECT_TYPE_ROOT]; + return (!root_list || root_list->size(true) == 0 || IsRootImmune()) == false; +} + +bool Entity::IsFeared(){ + MutexList* fear_list = control_effects[CONTROL_EFFECT_TYPE_FEAR]; + return (!fear_list || fear_list->size(true) == 0 || IsFearImmune()) == false; +} + +void Entity::AddWaterwalkSpell(LuaSpell* spell){ + if (!spell) + return; + + if (!control_effects[CONTROL_EFFECT_TYPE_WALKUNDERWATER]) + control_effects[CONTROL_EFFECT_TYPE_WALKUNDERWATER] = new MutexList; + + control_effects[CONTROL_EFFECT_TYPE_WALKUNDERWATER]->Add(spell); + if (control_effects[CONTROL_EFFECT_TYPE_WALKUNDERWATER]->size(true) == 1 && IsPlayer()) + ((Player*)this)->SetPlayerControlFlag(3, 128, true); // enable walking underwater +} + +void Entity::RemoveWaterwalkSpell(LuaSpell* spell){ + MutexList* waterwalk_list = control_effects[CONTROL_EFFECT_TYPE_WALKUNDERWATER]; + if (!waterwalk_list || waterwalk_list->size(true) == 0) + return; + + waterwalk_list->Remove(spell); + if (waterwalk_list->size(true) == 0 && IsPlayer()) + ((Player*)this)->SetPlayerControlFlag(3, 128, false); // disable walking underwater +} + +void Entity::AddWaterjumpSpell(LuaSpell* spell){ + if (!spell) + return; + + if (!control_effects[CONTROL_EFFECT_TYPE_JUMPUNDERWATER]) + control_effects[CONTROL_EFFECT_TYPE_JUMPUNDERWATER] = new MutexList; + + control_effects[CONTROL_EFFECT_TYPE_JUMPUNDERWATER]->Add(spell); + if (control_effects[CONTROL_EFFECT_TYPE_JUMPUNDERWATER]->size(true) == 1 && IsPlayer()) + ((Player*)this)->SetPlayerControlFlag(4, 1, true); // enable moonjumps underwater +} + +void Entity::RemoveWaterjumpSpell(LuaSpell* spell){ + MutexList* waterjump_list = control_effects[CONTROL_EFFECT_TYPE_JUMPUNDERWATER]; + if (!waterjump_list || waterjump_list->size(true) == 0) + return; + + waterjump_list->Remove(spell); + if (waterjump_list->size(true) == 0 && IsPlayer()) + ((Player*)this)->SetPlayerControlFlag(4, 1, false); // disable moonjumps underwater +} + +void Entity::AddAOEImmunity(LuaSpell* spell){ + if (!spell) + return; + + if (!immunities[IMMUNITY_TYPE_AOE]) + immunities[IMMUNITY_TYPE_AOE] = new MutexList; + + immunities[IMMUNITY_TYPE_AOE]->Add(spell); +} + +void Entity::RemoveAOEImmunity(LuaSpell* spell){ + MutexList* aoe_list = immunities[IMMUNITY_TYPE_AOE]; + if (!aoe_list || aoe_list->size(true) == 0) + return; + aoe_list->Remove(spell); +} + +bool Entity::IsAOEImmune(){ + return (immunities[IMMUNITY_TYPE_AOE] && immunities[IMMUNITY_TYPE_AOE]->size(true)); +} + +void Entity::AddStunImmunity(LuaSpell* spell){ + if (!spell) + return; + + if (!immunities[IMMUNITY_TYPE_STUN]) + immunities[IMMUNITY_TYPE_STUN] = new MutexList; + + if (IsPlayer() && IsStunned() && !IsMezzed()){ + ((Player*)this)->SetPlayerControlFlag(4, 64, false); + if (!IsFeared() && !IsStifled()) + ((Player*)this)->UnlockAllSpells(); + } + + immunities[IMMUNITY_TYPE_STUN]->Add(spell); +} + +void Entity::RemoveStunImmunity(LuaSpell* spell){ + MutexList* stun_list = immunities[IMMUNITY_TYPE_STUN]; + if (!stun_list || stun_list->size(true) == 0) + return; + + stun_list->Remove(spell); + + if (IsPlayer() && IsStunned() && !IsMezzed()){ + ((Player*)this)->SetPlayerControlFlag(4, 64, true); + if (!IsFeared() && !IsStifled()) + ((Player*)this)->UnlockAllSpells(); + } +} + +bool Entity::IsStunImmune(){ + return (immunities[IMMUNITY_TYPE_STUN] && immunities[IMMUNITY_TYPE_STUN]->size(true) > 0); +} + +void Entity::AddStifleImmunity(LuaSpell* spell){ + if (!spell) + return; + + if (!immunities[IMMUNITY_TYPE_STIFLE]) + immunities[IMMUNITY_TYPE_STIFLE] = new MutexList; + + if (IsPlayer() && immunities[IMMUNITY_TYPE_STIFLE]->size(true) == 0){ + if (IsStifled() && !IsMezzedOrStunned() && !IsFeared()) + ((Player*)this)->UnlockAllSpells(); + } + + immunities[IMMUNITY_TYPE_STIFLE]->Add(spell); +} + +void Entity::RemoveStifleImmunity(LuaSpell* spell){ + MutexList* stifle_list = immunities[IMMUNITY_TYPE_STIFLE]; + if (!stifle_list || stifle_list->size(true) == 0) + return; + + stifle_list->Remove(spell); + + if (IsPlayer() && IsStifled() && !IsMezzedOrStunned() && !IsFeared()) + ((Player*)this)->UnlockAllSpells(); +} + +bool Entity::IsStifleImmune(){ + return (immunities[IMMUNITY_TYPE_STIFLE] && immunities[IMMUNITY_TYPE_STIFLE]->size(true) > 0); +} + +void Entity::AddMezImmunity(LuaSpell* spell){ + if (!spell) + return; + + if (!immunities[IMMUNITY_TYPE_MEZ]) + immunities[IMMUNITY_TYPE_MEZ] = new MutexList; + + if (IsPlayer() && IsMezzed() && !IsStunned()){ + ((Player*)this)->SetPlayerControlFlag(4, 64, false); + if (!IsFeared() && !IsStifled()) + ((Player*)this)->UnlockAllSpells(); + } + + immunities[IMMUNITY_TYPE_MEZ]->Add(spell); +} + +void Entity::RemoveMezImmunity(LuaSpell* spell){ + MutexList* mez_list = immunities[IMMUNITY_TYPE_MEZ]; + if (!mez_list || mez_list->size(true) == 0) + return; + + mez_list->Remove(spell); + + if (IsPlayer() && IsMezzed() && !IsStunned()){ + ((Player*)this)->SetPlayerControlFlag(4, 64, true); + if (!IsFeared() && !IsStifled()) + ((Player*)this)->LockAllSpells(); + } +} + +bool Entity::IsMezImmune(){ + return (immunities[IMMUNITY_TYPE_MEZ] && immunities[IMMUNITY_TYPE_MEZ]->size(true) > 0); +} + +void Entity::AddRootImmunity(LuaSpell* spell){ + if (!spell) + return; + + if (!immunities[IMMUNITY_TYPE_ROOT]) + immunities[IMMUNITY_TYPE_ROOT] = new MutexList; + + if (IsPlayer() && IsRooted()) + ((Player*)this)->SetPlayerControlFlag(1, 8, false); + + immunities[IMMUNITY_TYPE_ROOT]->Add(spell); +} + +void Entity::RemoveRootImmunity(LuaSpell* spell){ + MutexList* root_list = immunities[IMMUNITY_TYPE_ROOT]; + if (!root_list || root_list->size(true) == 0) + return; + + root_list->Remove(spell); + + if (IsPlayer() && IsRooted()) + ((Player*)this)->SetPlayerControlFlag(1, 8, true); +} + +bool Entity::IsRootImmune(){ + return (immunities[IMMUNITY_TYPE_ROOT] && immunities[IMMUNITY_TYPE_ROOT]->size(true) > 0); +} + +void Entity::AddFearImmunity(LuaSpell* spell){ + if (!spell) + return; + + if (!immunities[IMMUNITY_TYPE_FEAR]) + immunities[IMMUNITY_TYPE_FEAR] = new MutexList; + + if (IsPlayer() && IsFeared()){ + if (!IsMezzedOrStunned() && !IsStifled()) + ((Player*)this)->UnlockAllSpells(); + ((Player*)this)->SetPlayerControlFlag(4, 4, false); + } + + immunities[IMMUNITY_TYPE_FEAR]->Add(spell); +} + +void Entity::RemoveFearImmunity(LuaSpell* spell){ + MutexList* fear_list = immunities[IMMUNITY_TYPE_FEAR]; + if (!fear_list || fear_list->size(true) == 0) + return; + + fear_list->Remove(spell); + + if (IsPlayer() && IsFeared()){ + if (!IsMezzedOrStunned() && !IsStifled()) + ((Player*)this)->LockAllSpells(); + ((Player*)this)->SetPlayerControlFlag(4, 4, true); + } +} + +bool Entity::IsFearImmune(){ + return (immunities[IMMUNITY_TYPE_FEAR] && immunities[IMMUNITY_TYPE_FEAR]->size(true) > 0); +} + +void Entity::AddDazeImmunity(LuaSpell* spell){ + if (!spell) + return; + + if (!immunities[IMMUNITY_TYPE_DAZE]) + immunities[IMMUNITY_TYPE_DAZE] = new MutexList; + + immunities[IMMUNITY_TYPE_DAZE]->Add(spell); +} + +void Entity::RemoveDazeImmunity(LuaSpell* spell){ + MutexList* daze_list = immunities[IMMUNITY_TYPE_DAZE]; + if (!daze_list || daze_list->size(true) == 0) + return; + + daze_list->Remove(spell); +} + +bool Entity::IsDazeImmune(){ + return (immunities[IMMUNITY_TYPE_DAZE] && immunities[IMMUNITY_TYPE_DAZE]->size(true) > 0); +} + +void Entity::RemoveEffectsFromLuaSpell(LuaSpell* spell){ + if (!spell) + return; + + //Attempt to remove all applied effects from this spell when spell has been removed from just this target. Should improve performance/easier maitenance + int32 effect_bitmask = spell->effect_bitmask; + if (effect_bitmask == 0) + return; + + if (effect_bitmask & EFFECT_FLAG_STUN) + RemoveStunSpell(spell); + if (effect_bitmask & EFFECT_FLAG_ROOT) + RemoveRootSpell(spell); + if (effect_bitmask & EFFECT_FLAG_MEZ) + RemoveMezSpell(spell); + if (effect_bitmask & EFFECT_FLAG_STIFLE) + RemoveStifleSpell(spell); + if (effect_bitmask & EFFECT_FLAG_DAZE) + RemoveDazeSpell(spell); + if (effect_bitmask & EFFECT_FLAG_FEAR) + RemoveFearSpell(spell); + if (effect_bitmask & EFFECT_FLAG_SPELLBONUS) + RemoveSpellBonus(spell); + if (effect_bitmask & EFFECT_FLAG_SKILLBONUS) + RemoveSkillBonus(spell->spell->GetSpellID()); + if (effect_bitmask & EFFECT_FLAG_STEALTH) + RemoveStealthSpell(spell); + if (effect_bitmask & EFFECT_FLAG_INVIS) + RemoveInvisSpell(spell); + if (effect_bitmask & EFFECT_FLAG_SNARE) + RemoveSnareSpell(spell); + if (effect_bitmask & EFFECT_FLAG_WATERWALK) + RemoveWaterwalkSpell(spell); + if (effect_bitmask & EFFECT_FLAG_WATERJUMP) + RemoveWaterjumpSpell(spell); + if (effect_bitmask & EFFECT_FLAG_FLIGHT) + RemoveFlightSpell(spell); + if (effect_bitmask & EFFECT_FLAG_GLIDE) + RemoveGlideSpell(spell); + if (effect_bitmask & EFFECT_FLAG_AOE_IMMUNE) + RemoveAOEImmunity(spell); + if (effect_bitmask & EFFECT_FLAG_STUN_IMMUNE) + RemoveStunImmunity(spell); + if (effect_bitmask & EFFECT_FLAG_MEZ_IMMUNE) + RemoveMezImmunity(spell); + if (effect_bitmask & EFFECT_FLAG_DAZE_IMMUNE) + RemoveDazeImmunity(spell); + if (effect_bitmask & EFFECT_FLAG_ROOT_IMMUNE) + RemoveRootImmunity(spell); + if (effect_bitmask & EFFECT_FLAG_STIFLE_IMMUNE) + RemoveStifleImmunity(spell); + if (effect_bitmask & EFFECT_FLAG_FEAR_IMMUNE) + RemoveFearImmunity(spell); + if (effect_bitmask & EFFECT_FLAG_SAFEFALL) + RemoveSafefallSpell(spell); +} + +void Entity::RemoveSkillBonus(int32 spell_id){ + //This is a virtual, just making it so we don't have to do extra checks for player/npcs + return; +} + +void Entity::AddFlightSpell(LuaSpell* spell){ + if (!spell) + return; + + if (!control_effects[CONTROL_EFFECT_TYPE_FLIGHT]) + control_effects[CONTROL_EFFECT_TYPE_FLIGHT] = new MutexList; + + if (IsPlayer() && control_effects[CONTROL_EFFECT_TYPE_FLIGHT]->size(true) == 0) + ((Player*)this)->SetPlayerControlFlag(5, 32, true); + + control_effects[CONTROL_EFFECT_TYPE_FLIGHT]->Add(spell); +} + +void Entity::RemoveFlightSpell(LuaSpell* spell){ + MutexList* flight_list = control_effects[CONTROL_EFFECT_TYPE_FLIGHT]; + if (!flight_list || flight_list->size(true) == 0) + return; + + flight_list->Remove(spell); + if (IsPlayer() && flight_list->size(true) == 0) + ((Player*)this)->SetPlayerControlFlag(5, 32, false); +} + +void Entity::AddGlideSpell(LuaSpell* spell){ + if (!spell) + return; + + if (!control_effects[CONTROL_EFFECT_TYPE_GLIDE]) + control_effects[CONTROL_EFFECT_TYPE_GLIDE] = new MutexList; + + if (IsPlayer() && control_effects[CONTROL_EFFECT_TYPE_GLIDE]->size(true) == 0) + ((Player*)this)->SetPlayerControlFlag(4, 16, true); + + control_effects[CONTROL_EFFECT_TYPE_GLIDE]->Add(spell); +} + +void Entity::RemoveGlideSpell(LuaSpell* spell){ + MutexList* glide_list = control_effects[CONTROL_EFFECT_TYPE_GLIDE]; + if (!glide_list || glide_list->size(true) == 0) + return; + + glide_list->Remove(spell); + if (IsPlayer() && glide_list->size(true) == 0) + ((Player*)this)->SetPlayerControlFlag(4, 16, false); +} + +void Entity::AddSafefallSpell(LuaSpell* spell){ + if (!spell) + return; + + if (!control_effects[CONTROL_EFFECT_TYPE_SAFEFALL]) + control_effects[CONTROL_EFFECT_TYPE_SAFEFALL] = new MutexList; + + if (IsPlayer() && control_effects[CONTROL_EFFECT_TYPE_SAFEFALL]->size(true) == 0) + ((Player*)this)->SetPlayerControlFlag(4, 32, true); + + control_effects[CONTROL_EFFECT_TYPE_SAFEFALL]->Add(spell); +} + +void Entity::RemoveSafefallSpell(LuaSpell* spell){ + MutexList* safe_list = control_effects[CONTROL_EFFECT_TYPE_SAFEFALL]; + if (!safe_list || safe_list->size(true) == 0) + return; + + safe_list->Remove(spell); + if (IsPlayer() && safe_list->size(true) == 0) + ((Player*)this)->SetPlayerControlFlag(4, 32, false); +} + +void Entity::UpdateGroupMemberInfo() { + if (!group_member_info) + return; + + group_member_info->class_id = GetAdventureClass(); + group_member_info->hp_max = GetTotalHP(); + group_member_info->hp_current = GetHP(); + group_member_info->level_max = GetLevel(); + group_member_info->level_current = GetLevel(); + group_member_info->name = string(GetName()); + group_member_info->power_current = GetPower(); + group_member_info->power_max = GetTotalPower(); + group_member_info->race_id = GetRace(); + if (GetZone()) + group_member_info->zone = GetZone()->GetZoneDescription(); + else + group_member_info->zone = "Unknown"; +} + +#include "WorldDatabase.h" +extern WorldDatabase database; +void Entity::CustomizeAppearance(PacketStruct* packet) { + + bool is_soga = packet->getType_int8_ByName("is_soga") == 1 ? true : false; + int16 model_id = database.GetAppearanceID(packet->getType_EQ2_16BitString_ByName("race_file").data); + EQ2_Color skin_color = packet->getType_EQ2_Color_ByName("skin_color"); + EQ2_Color skin_color2 = packet->getType_EQ2_Color_ByName("skin_color2"); + EQ2_Color eye_color = packet->getType_EQ2_Color_ByName("eye_color"); + EQ2_Color hair_color1 = packet->getType_EQ2_Color_ByName("hair_color1"); + EQ2_Color hair_color2 = packet->getType_EQ2_Color_ByName("hair_color2"); + EQ2_Color hair_highlight = packet->getType_EQ2_Color_ByName("hair_highlight"); + int16 hair_id = database.GetAppearanceID(packet->getType_EQ2_16BitString_ByName("hair_file").data); + EQ2_Color hair_type_color = packet->getType_EQ2_Color_ByName("hair_type_color"); + EQ2_Color hair_type_highlight_color = packet->getType_EQ2_Color_ByName("hair_type_highlight_color"); + int16 face_id = database.GetAppearanceID(packet->getType_EQ2_16BitString_ByName("face_file").data); + EQ2_Color hair_face_color = packet->getType_EQ2_Color_ByName("hair_face_color"); + EQ2_Color hair_face_highlight_color = packet->getType_EQ2_Color_ByName("hair_face_highlight_color"); + int16 wing_id = database.GetAppearanceID(packet->getType_EQ2_16BitString_ByName("wing_file").data); + EQ2_Color wing_color1 = packet->getType_EQ2_Color_ByName("wing_color1"); + EQ2_Color wing_color2 = packet->getType_EQ2_Color_ByName("wing_color2"); + int16 chest_id = database.GetAppearanceID(packet->getType_EQ2_16BitString_ByName("chest_file").data); + EQ2_Color shirt_color = packet->getType_EQ2_Color_ByName("shirt_color"); + EQ2_Color unknown_chest_color = packet->getType_EQ2_Color_ByName("unknown_chest_color"); + int16 legs_id = database.GetAppearanceID(packet->getType_EQ2_16BitString_ByName("legs_file").data); + EQ2_Color pants_color = packet->getType_EQ2_Color_ByName("pants_color"); + EQ2_Color unknown_legs_color = packet->getType_EQ2_Color_ByName("unknown_legs_color"); + EQ2_Color unknown2 = packet->getType_EQ2_Color_ByName("unknown2"); + + float eyes2[3]; + eyes2[0] = packet->getType_float_ByName("eyes2", 0) * 100; + eyes2[1] = packet->getType_float_ByName("eyes2", 1) * 100; + eyes2[2] = packet->getType_float_ByName("eyes2", 2) * 100; + + float ears[3]; + ears[0] = packet->getType_float_ByName("ears", 0) * 100; + ears[1] = packet->getType_float_ByName("ears", 1) * 100; + ears[2] = packet->getType_float_ByName("ears", 2) * 100; + + float eye_brows[3]; + eye_brows[0] = packet->getType_float_ByName("eye_brows", 0) * 100; + eye_brows[1] = packet->getType_float_ByName("eye_brows", 1) * 100; + eye_brows[2] = packet->getType_float_ByName("eye_brows", 2) * 100; + + float cheeks[3]; + cheeks[0] = packet->getType_float_ByName("cheeks", 0) * 100; + cheeks[1] = packet->getType_float_ByName("cheeks", 1) * 100; + cheeks[2] = packet->getType_float_ByName("cheeks", 2) * 100; + + float lips[3]; + lips[0] = packet->getType_float_ByName("lips", 0) * 100; + lips[1] = packet->getType_float_ByName("lips", 1) * 100; + lips[2] = packet->getType_float_ByName("lips", 2) * 100; + + float chin[3]; + chin[0] = packet->getType_float_ByName("chin", 0) * 100; + chin[1] = packet->getType_float_ByName("chin", 1) * 100; + chin[2] = packet->getType_float_ByName("chin", 2) * 100; + + float nose[3]; + nose[0] = packet->getType_float_ByName("nose", 0) * 100; + nose[1] = packet->getType_float_ByName("nose", 1) * 100; + nose[2] = packet->getType_float_ByName("nose", 2) * 100; + + sint8 body_size = (sint8)(packet->getType_float_ByName("body_size") * 100); + sint8 body_age = (sint8)(packet->getType_float_ByName("body_age") * 100); + + if (is_soga) { + appearance.soga_model_type = model_id; + features.soga_skin_color = skin_color; + features.soga_eye_color = eye_color; + features.soga_hair_color1 = hair_color1; + features.soga_hair_color2 = hair_color2; + features.soga_hair_highlight_color = hair_highlight; + features.soga_hair_type = hair_id; + features.soga_hair_type_color = hair_type_color; + features.soga_hair_type_highlight_color = hair_type_highlight_color; + features.soga_hair_face_type = face_id; + features.soga_hair_face_color = hair_face_color; + features.soga_hair_face_highlight_color = hair_face_highlight_color; + features.wing_type = wing_id; + features.wing_color1 = wing_color1; + features.wing_color2 = wing_color2; + features.soga_chest_type = chest_id; + features.shirt_color = shirt_color; + features.soga_legs_type = legs_id; + features.pants_color = pants_color; + features.soga_eye_type[0] = eyes2[0]; + features.soga_eye_type[1] = eyes2[1]; + features.soga_eye_type[2] = eyes2[2]; + features.soga_ear_type[0] = ears[0]; + features.soga_ear_type[0] = ears[1]; + features.soga_ear_type[0] = ears[2]; + features.soga_eye_brow_type[0] = eye_brows[0]; + features.soga_eye_brow_type[1] = eye_brows[1]; + features.soga_eye_brow_type[2] = eye_brows[2]; + features.soga_cheek_type[0] = cheeks[0]; + features.soga_cheek_type[1] = cheeks[1]; + features.soga_cheek_type[2] = cheeks[2]; + features.soga_lip_type[0] = lips[0]; + features.soga_lip_type[1] = lips[1]; + features.soga_lip_type[2] = lips[2]; + features.soga_chin_type[0] = chin[0]; + features.soga_chin_type[1] = chin[1]; + features.soga_chin_type[2] = chin[2]; + features.soga_nose_type[0] = nose[0]; + features.soga_nose_type[1] = nose[1]; + features.soga_nose_type[2] = nose[2]; + } + else { + appearance.model_type = model_id; + features.skin_color = skin_color; + features.eye_color = eye_color; + features.hair_color1 = hair_color1; + features.hair_color2 = hair_color2; + features.hair_highlight_color = hair_highlight; + features.hair_type = hair_id; + features.hair_type_color = hair_type_color; + features.hair_type_highlight_color = hair_type_highlight_color; + features.hair_face_type = face_id; + features.hair_face_color = hair_face_color; + features.hair_face_highlight_color = hair_face_highlight_color; + features.wing_type = wing_id; + features.wing_color1 = wing_color1; + features.wing_color2 = wing_color2; + features.chest_type = chest_id; + features.shirt_color = shirt_color; + features.legs_type = legs_id; + features.pants_color = pants_color; + features.eye_type[0] = eyes2[0]; + features.eye_type[1] = eyes2[1]; + features.eye_type[2] = eyes2[2]; + features.ear_type[0] = ears[0]; + features.ear_type[0] = ears[1]; + features.ear_type[0] = ears[2]; + features.eye_brow_type[0] = eye_brows[0]; + features.eye_brow_type[1] = eye_brows[1]; + features.eye_brow_type[2] = eye_brows[2]; + features.cheek_type[0] = cheeks[0]; + features.cheek_type[1] = cheeks[1]; + features.cheek_type[2] = cheeks[2]; + features.lip_type[0] = lips[0]; + features.lip_type[1] = lips[1]; + features.lip_type[2] = lips[2]; + features.chin_type[0] = chin[0]; + features.chin_type[1] = chin[1]; + features.chin_type[2] = chin[2]; + features.nose_type[0] = nose[0]; + features.nose_type[1] = nose[1]; + features.nose_type[2] = nose[2]; + } + + features.body_size = body_size; + features.body_age = body_age; + info_changed = true; + changed = true; +} + +void Entity::AddSkillBonus(int32 spell_id, int32 skill_id, float value) { + // handled in npc or player + return; +} \ No newline at end of file diff --git a/EQ2/source/WorldServer/Entity.h b/EQ2/source/WorldServer/Entity.h new file mode 100644 index 000000000..a23f9ab27 --- /dev/null +++ b/EQ2/source/WorldServer/Entity.h @@ -0,0 +1,866 @@ +/* + EQ2Emulator: Everquest II Server Emulator + Copyright (C) 2007 EQ2EMulator Development Team (http://www.eq2emulator.net) + + This file is part of EQ2Emulator. + + EQ2Emulator is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + EQ2Emulator is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with EQ2Emulator. If not, see . +*/ +#ifndef __EQ2_ENTITY__ +#define __EQ2_ENTITY__ +#include "Spawn.h" +#include "../common/Mutex.h" +#include "Skills.h" +#include "MutexList.h" +#include "MutexVector.h" +#include + + +using namespace std; + +class Entity; +class NPC; +class Trade; +struct LuaSpell; +struct GroupMemberInfo; + +struct BonusValues{ + int32 spell_id; + int8 tier; + int16 type; + sint32 value; + int64 class_req; + vector race_req; + vector faction_req; + LuaSpell* luaspell; +}; + +struct MaintainedEffects{ + char name[60]; //name of the spell + int32 target; + int8 target_type; + int32 spell_id; + int32 slot_pos; + int16 icon; + int16 icon_backdrop; + int8 conc_used; + int8 tier; + float total_time; + int32 expire_timestamp; + LuaSpell* spell; +}; + +struct SpellEffects{ + int32 spell_id; + Entity* caster; + float total_time; + int32 expire_timestamp; + int16 icon; + int16 icon_backdrop; + int8 tier; + LuaSpell* spell; +}; + +struct DetrimentalEffects { + int32 spell_id; + Entity* caster; + int32 expire_timestamp; + int16 icon; + int16 icon_backdrop; + int8 tier; + int8 det_type; + bool incurable; + LuaSpell* spell; + int8 control_effect; + float total_time; +}; + +struct CombatData{ + int32 range_last_attack_time; + int32 primary_last_attack_time; + int32 secondary_last_attack_time; + int16 primary_attack_delay; + int16 secondary_attack_delay; + int16 ranged_attack_delay; + int8 primary_weapon_type; + int8 secondary_weapon_type; + int8 ranged_weapon_type; + int32 primary_weapon_damage_low; + int32 primary_weapon_damage_high; + int32 secondary_weapon_damage_low; + int32 secondary_weapon_damage_high; + int32 ranged_weapon_damage_low; + int32 ranged_weapon_damage_high; + int8 wield_type; + int16 primary_weapon_delay; + int16 secondary_weapon_delay; + int16 ranged_weapon_delay; +}; + +struct InfoStruct{ + char name[40]; + int8 class1; + int8 class2; + int8 class3; + int8 race; + int8 gender; + int16 level; + int16 max_level; + int16 tradeskill_level; + int16 tradeskill_max_level; + + int8 cur_concentration; + int8 max_concentration; + int16 cur_attack; + int16 attack_base; + int16 cur_mitigation; + int16 max_mitigation; + int16 mitigation_base; + int16 avoidance_display; + int16 cur_avoidance; + int16 base_avoidance_pct; + int16 avoidance_base; + int16 max_avoidance; + int16 parry; + int16 parry_base; + int16 deflection; + int16 deflection_base; + int16 block; + int16 block_base; + float str; //int16 + float sta; //int16 + float agi;//int16 + float wis;//int16 + float intel;//int16 + float str_base;//int16 + float sta_base;//int16 + float agi_base;//int16 + float wis_base;//int16 + float intel_base;//int16 + int16 heat; + int16 cold; + int16 magic; + int16 mental; + int16 divine; + int16 disease; + int16 poison; + int16 disease_base; + int16 cold_base; + int16 divine_base; + int16 magic_base; + int16 mental_base; + int16 heat_base; + int16 poison_base; + int16 elemental_base; + int16 noxious_base; + int16 arcane_base; + int32 coin_copper; + int32 coin_silver; + int32 coin_gold; + int32 coin_plat; + int32 bank_coin_copper; + int32 bank_coin_silver; + int32 bank_coin_gold; + int32 bank_coin_plat; + + int32 status_points; + char deity[32]; + int32 weight; + int32 max_weight; + SpellEffects spell_effects[45]; + MaintainedEffects maintained_effects[30]; + int8 tradeskill_class1; + int8 tradeskill_class2; + int8 tradeskill_class3; + int16 account_age_base; + int8 account_age_bonus[19]; + int16 absorb; + int32 xp; + int32 xp_needed; + int32 xp_debt; + int16 xp_yellow; + int16 xp_yellow_vitality_bar; + int16 xp_blue_vitality_bar; + int16 xp_blue; + int32 ts_xp; + int32 ts_xp_needed; + int16 tradeskill_exp_yellow; + int16 tradeskill_exp_blue; + int32 flags; + int32 flags2; + float xp_vitality; + float tradeskill_xp_vitality; + int16 mitigation_skill1; + int16 mitigation_skill2; + int16 mitigation_skill3; + float ability_modifier; + float critical_mitigation; + float block_chance; + float uncontested_parry; + float uncontested_block; + float uncontested_dodge; + float uncontested_riposte; + + float crit_chance; + float crit_bonus; + float potency; + float hate_mod; + float reuse_speed; + float casting_speed; + float recovery_speed; + float spell_reuse_speed; + float spell_multi_attack; + float dps; + float dps_multiplier; + float attackspeed; + float haste; + float multi_attack; + float flurry; + float melee_ae; + float strikethrough; + float accuracy; + float offensivespeed; + float rain; + float wind; + sint8 alignment; + + int32 pet_id; + char pet_name[32]; + float pet_health_pct; + float pet_power_pct; + int8 pet_movement; + int8 pet_behavior; + + int8 vision; + int8 breathe_underwater; + char biography[512]; + float drunk; +}; + +struct WardInfo { + LuaSpell* Spell; + int32 BaseDamage; + int32 DamageLeft; + int8 WardType; + int8 DamageType; + bool keepWard; +}; + +#define WARD_TYPE_ALL 0 +#define WARD_TYPE_PHYSICAL 1 +#define WARD_TYPE_MAGICAL 2 + +struct Proc { + LuaSpell* spell; + Item* item; + float chance; +}; + +#define PROC_TYPE_OFFENSIVE 1 +#define PROC_TYPE_DEFENSIVE 2 +#define PROC_TYPE_PHYSICAL_OFFENSIVE 3 +#define PROC_TYPE_PHYSICAL_DEFENSIVE 4 +#define PROC_TYPE_MAGICAL_OFFENSIVE 5 +#define PROC_TYPE_MAGICAL_DEFENSIVE 6 +#define PROC_TYPE_BLOCK 7 +#define PROC_TYPE_PARRY 8 +#define PROC_TYPE_RIPOSTE 9 +#define PROC_TYPE_EVADE 10 +#define PROC_TYPE_HEALING 11 +#define PROC_TYPE_BENEFICIAL 12 +#define PROC_TYPE_DEATH 13 +#define PROC_TYPE_KILL 14 +#define PROC_TYPE_DAMAGED 15 +#define PROC_TYPE_DAMAGED_MELEE 16 +#define PROC_TYPE_DAMAGED_MAGIC 17 +#define PROC_TYPE_RANGED_ATTACK 18 +#define PROC_TYPE_RANGED_DEFENSE 19 + +struct ThreatTransfer { + int32 Target; + float Amount; + LuaSpell* Spell; +}; + +#define DET_TYPE_TRAUMA 1 +#define DET_TYPE_ARCANE 2 +#define DET_TYPE_NOXIOUS 3 +#define DET_TYPE_ELEMENTAL 4 +#define DET_TYPE_CURSE 5 + +#define DISPELL_TYPE_CURE 0 +#define DISPELL_TYPE_DISPELL 1 + +#define CONTROL_EFFECT_TYPE_MEZ 1 +#define CONTROL_EFFECT_TYPE_STIFLE 2 +#define CONTROL_EFFECT_TYPE_DAZE 3 +#define CONTROL_EFFECT_TYPE_STUN 4 +#define CONTROL_EFFECT_TYPE_ROOT 5 +#define CONTROL_EFFECT_TYPE_FEAR 6 +#define CONTROL_EFFECT_TYPE_WALKUNDERWATER 7 +#define CONTROL_EFFECT_TYPE_JUMPUNDERWATER 8 +#define CONTROL_EFFECT_TYPE_INVIS 9 +#define CONTROL_EFFECT_TYPE_STEALTH 10 +#define CONTROL_EFFECT_TYPE_SNARE 11 +#define CONTROL_EFFECT_TYPE_FLIGHT 12 +#define CONTROL_EFFECT_TYPE_GLIDE 13 +#define CONTROL_EFFECT_TYPE_SAFEFALL 14 + +#define IMMUNITY_TYPE_MEZ 1 +#define IMMUNITY_TYPE_STIFLE 2 +#define IMMUNITY_TYPE_DAZE 3 +#define IMMUNITY_TYPE_STUN 4 +#define IMMUNITY_TYPE_ROOT 5 +#define IMMUNITY_TYPE_FEAR 6 +#define IMMUNITY_TYPE_AOE 7 + +//class Spell; +//class ZoneServer; + +//The entity class is for NPCs and Players, spawns which are able to fight +class Entity : public Spawn{ +public: + Entity(); + virtual ~Entity(); + virtual float GetShieldBlockChance(); + virtual float GetDodgeChance(); + virtual void AddMaintainedSpell(LuaSpell* spell); + virtual void AddSpellEffect(LuaSpell* spell); + virtual void RemoveMaintainedSpell(LuaSpell* spell); + virtual void RemoveSpellEffect(LuaSpell* spell); + virtual bool HasActiveMaintainedSpell(Spell* spell, Spawn* target); + virtual bool HasActiveSpellEffect(Spell* spell, Spawn* target); + virtual void AddSkillBonus(int32 spell_id, int32 skill_id, float value); + void AddDetrimentalSpell(LuaSpell* spell); + DetrimentalEffects* GetDetrimentalEffect(int32 spell_id, Entity* caster); + virtual MaintainedEffects* GetMaintainedSpell(int32 spell_id); + void RemoveDetrimentalSpell(LuaSpell* spell); + void SetDeity(int8 new_deity){ + deity = new_deity; + } + int8 GetDeity(){ return deity; } + EquipmentItemList* GetEquipmentList(); + + bool IsEntity(){ return true; } + void CalculateBonuses(); + float CalculateBonusMod(); + float CalculateDPSMultiplier(); + float CalculateCastingSpeedMod(); + + InfoStruct* GetInfoStruct(); + + int16 GetStr(); + int16 GetSta(); + int16 GetInt(); + int16 GetWis(); + int16 GetAgi(); + int16 GetPrimaryStat(); + + int16 GetHeatResistance(); + int16 GetColdResistance(); + int16 GetMagicResistance(); + int16 GetMentalResistance(); + int16 GetDivineResistance(); + int16 GetDiseaseResistance(); + int16 GetPoisonResistance(); + + int16 GetStrBase(); + int16 GetStaBase(); + int16 GetIntBase(); + int16 GetWisBase(); + int16 GetAgiBase(); + + int16 GetHeatResistanceBase(); + int16 GetColdResistanceBase(); + int16 GetMagicResistanceBase(); + int16 GetMentalResistanceBase(); + int16 GetDivineResistanceBase(); + int16 GetDiseaseResistanceBase(); + int16 GetPoisonResistanceBase(); + + int8 GetConcentrationCurrent(); + int8 GetConcentrationMax(); + + sint8 GetAlignment(); + void SetAlignment(sint8 new_value); + + bool HasMoved(bool include_heading); + void SetHPRegen(int16 new_val); + void SetPowerRegen(int16 new_val); + int16 GetHPRegen(); + int16 GetPowerRegen(); + void DoRegenUpdate(); + MaintainedEffects* GetFreeMaintainedSpellSlot(); + SpellEffects* GetFreeSpellEffectSlot(); + SpellEffects* GetSpellEffect(int32 id, Entity* caster = 0); + + //flags + int32 GetFlags() { return info_struct.flags; } + int32 GetFlags2() { return info_struct.flags2; } + bool query_flags(int flag) { + if (flag > 63) return false; + if (flag < 32) return ((info_struct.flags & (1 << flag))?true:false); + return ((info_struct.flags2 & (1 << (flag - 32)))?true:false); + } + float GetMaxSpeed(); + void SetMaxSpeed(float val); + //combat stuff: + int32 GetRangeLastAttackTime(); + void SetRangeLastAttackTime(int32 time); + int16 GetRangeAttackDelay(); + int16 GetRangeWeaponDelay() {return ranged_combat_data.ranged_weapon_delay;} + void SetRangeWeaponDelay(int16 new_delay) {ranged_combat_data.ranged_weapon_delay = new_delay * 100;} + void SetRangeAttackDelay(int16 new_delay) {ranged_combat_data.ranged_attack_delay = new_delay;} + int32 GetPrimaryLastAttackTime(); + int16 GetPrimaryAttackDelay(); + void SetPrimaryAttackDelay(int16 new_delay); + void SetPrimaryLastAttackTime(int32 new_time); + void SetPrimaryWeaponDelay(int16 new_delay) {melee_combat_data.primary_weapon_delay = new_delay * 100;} + int32 GetSecondaryLastAttackTime(); + int16 GetSecondaryAttackDelay(); + void SetSecondaryAttackDelay(int16 new_delay); + void SetSecondaryLastAttackTime(int32 new_time); + void SetSecondaryWeaponDelay(int16 new_delay) {melee_combat_data.primary_weapon_delay = new_delay * 100;} + int32 GetPrimaryWeaponMinDamage(); + int32 GetPrimaryWeaponMaxDamage(); + int32 GetSecondaryWeaponMinDamage(); + int32 GetSecondaryWeaponMaxDamage(); + int32 GetRangedWeaponMinDamage(); + int32 GetRangedWeaponMaxDamage(); + int8 GetPrimaryWeaponType(); + int8 GetSecondaryWeaponType(); + int8 GetRangedWeaponType(); + int8 GetWieldType(); + int16 GetPrimaryWeaponDelay() {return melee_combat_data.primary_weapon_delay;} + int16 GetSecondaryWeaponDelay() {return melee_combat_data.secondary_weapon_delay;} + bool IsDualWield(); + bool BehindTarget(Spawn* target); + bool FlankingTarget(Spawn* target); + void ChangePrimaryWeapon(); + void ChangeSecondaryWeapon(); + void ChangeRangedWeapon(); + virtual Skill* GetSkillByName(const char* name, bool check_update = false); + bool AttackAllowed(Entity* target, float distance = 0, bool range_attack = false); + bool PrimaryWeaponReady(); + bool SecondaryWeaponReady(); + bool RangeWeaponReady(); + void MeleeAttack(Spawn* victim, float distance, bool primary, bool multi_attack = false); + void RangeAttack(Spawn* victim, float distance, Item* weapon, Item* ammo, bool multi_attack = false); + bool SpellAttack(Spawn* victim, float distance, LuaSpell* luaspell, int8 damage_type, int32 low_damage, int32 high_damage, int8 crit_mod = 0, bool no_calcs = false); + bool ProcAttack(Spawn* victim, int8 damage_type, int32 low_damage, int32 high_damage, string name, string success_msg, string effect_msg); + bool SpellHeal(Spawn* target, float distance, LuaSpell* luaspell, string heal_type, int32 low_heal, int32 high_heal, int8 crit_mod = 0, bool no_calcs = false); + int8 DetermineHit(Spawn* victim, int8 damage_type, float ToHitBonus, bool spell); + float GetDamageTypeResistPercentage(int8 damage_type); + Skill* GetSkillByWeaponType(int8 type, bool update); + bool DamageSpawn(Entity* victim, int8 type, int8 damage_type, int32 low_damage, int32 high_damage, const char* spell_name, int8 crit_mod = 0, bool is_tick = false, bool no_damage_calcs = false); + void AddHate(Entity* attacker, sint32 hate); + bool CheckInterruptSpell(Entity* attacker); + void KillSpawn(Spawn* dead, int8 damage_type = 0, int16 kill_blow_type = 0); + void SetAttackDelay(bool primary = false, bool ranged = false); + float CalculateAttackSpeedMod(); + virtual void ProcessCombat(); + + bool EngagedInCombat(); + virtual void InCombat(bool val); + + bool IsCasting(); + void IsCasting(bool val); + bool HasLoot(){ + if(loot_items.size() == 0 && loot_coins == 0) + return false; + return true; + } + bool HasLootItemID(int32 id); + int32 GetLootItemID(); + Item* LootItem(int32 id); + vector* GetLootItems(){ + return &loot_items; + } + void LockLoot(){ + MLootItems.lock(); + } + void UnlockLoot(){ + MLootItems.unlock(); + } + int32 GetLootCoins(){ + return loot_coins; + } + void SetLootCoins(int32 val){ + loot_coins = val; + } + void AddLootCoins(int32 coins){ + loot_coins += coins; + } + void AddLootItem(int32 id, int16 charges = 1){ + Item* master_item = master_item_list.GetItem(id); + if(master_item){ + Item* item = new Item(master_item); + item->details.count = charges; + loot_items.push_back(item); + } + } + void SetMount(int16 val, bool setUpdateFlags = true) { + if(val == 0){ + EQ2_Color color; + color.red = 0; + color.green = 0; + color.blue = 0; + SetMountColor(&color); + SetMountSaddleColor(&color); + } + SetInfo(&features.mount_model_type, val, setUpdateFlags); + } + void SetEquipment(Item* item, int8 slot = 255); + void SetEquipment(int8 slot, int16 type, int8 red, int8 green, int8 blue, int8 h_r, int8 h_g, int8 h_b){ + SetInfo(&equipment.equip_id[slot], type); + SetInfo(&equipment.color[slot].red, red); + SetInfo(&equipment.color[slot].green, green); + SetInfo(&equipment.color[slot].blue, blue); + SetInfo(&equipment.highlight[slot].red, h_r); + SetInfo(&equipment.highlight[slot].green, h_g); + SetInfo(&equipment.highlight[slot].blue, h_b); + } + void SetHairType(int16 new_val, bool setUpdateFlags = true){ + SetInfo(&features.hair_type, new_val, setUpdateFlags); + } + void SetHairColor(EQ2_Color new_val, bool setUpdateFlags = true){ + SetInfo(&features.hair_type_color, new_val, setUpdateFlags); + } + void SetHairHighlightColor(EQ2_Color new_val, bool setUpdateFlags = true){ + SetInfo(&features.hair_type_highlight_color, new_val, setUpdateFlags); + } + void SetFacialHairType(int16 new_val, bool setUpdateFlags = true){ + SetInfo(&features.hair_face_type, new_val, setUpdateFlags); + } + void SetFacialHairColor(EQ2_Color new_val, bool setUpdateFlags = true){ + SetInfo(&features.hair_face_color, new_val, setUpdateFlags); + } + void SetFacialHairHighlightColor(EQ2_Color new_val, bool setUpdateFlags = true){ + SetInfo(&features.hair_face_highlight_color, new_val, setUpdateFlags); + } + void SetWingType(int16 new_val, bool setUpdateFlags = true){ + SetInfo(&features.wing_type, new_val, setUpdateFlags); + } + void SetWingColor1(EQ2_Color new_val, bool setUpdateFlags = true){ + SetInfo(&features.wing_color1, new_val, setUpdateFlags); + } + void SetWingColor2(EQ2_Color new_val, bool setUpdateFlags = true){ + SetInfo(&features.wing_color2, new_val, setUpdateFlags); + } + void SetChestType(int16 new_val, bool setUpdateFlags = true){ + SetInfo(&features.chest_type, new_val, setUpdateFlags); + } + void SetLegsType(int16 new_val, bool setUpdateFlags = true){ + SetInfo(&features.legs_type, new_val, setUpdateFlags); + } + void SetSogaHairType(int16 new_val, bool setUpdateFlags = true){ + SetInfo(&features.soga_hair_type, new_val, setUpdateFlags); + } + void SetSogaFacialHairType(int16 new_val, bool setUpdateFlags = true){ + SetInfo(&features.soga_hair_face_type, new_val, setUpdateFlags); + } + void SetSogaChestType(int16 new_val, bool setUpdateFlags = true){ + SetInfo(&features.soga_chest_type, new_val, setUpdateFlags); + } + void SetSogaLegType(int16 new_val, bool setUpdateFlags = true){ + SetInfo(&features.soga_legs_type, new_val, setUpdateFlags); + } + void SetSkinColor(EQ2_Color color){ + SetInfo(&features.skin_color, color); + } + void SetCombatVoice(int16 val, bool setUpdateFlags = true) { + SetInfo(&features.combat_voice, val, setUpdateFlags); + } + void SetEmoteVoice(int16 val, bool setUpdateFlags = true) { + SetInfo(&features.emote_voice, val, setUpdateFlags); + } + int16 GetCombatVoice(){ return features.combat_voice; } + int16 GetEmoteVoice(){ return features.emote_voice; } + int16 GetMount(){ return features.mount_model_type; } + void SetMountSaddleColor(EQ2_Color* color){ + SetInfo(&features.mount_saddle_color, *color); + } + void SetMountColor(EQ2_Color* color){ + SetInfo(&features.mount_color, *color); + } + void SetEyeColor(EQ2_Color eye_color){ + SetInfo(&features.eye_color, eye_color); + } + int16 GetHairType(){ + return features.hair_type; + } + int16 GetFacialHairType(){ + return features.hair_face_type; + } + int16 GetWingType(){ + return features.wing_type; + } + int16 GetChestType(){ + return features.chest_type; + } + int16 GetLegsType(){ + return features.legs_type; + } + int16 GetSogaHairType(){ + return features.soga_hair_type; + } + int16 GetSogaFacialHairType(){ + return features.soga_hair_face_type; + } + int16 GetSogaChestType(){ + return features.soga_chest_type; + } + int16 GetSogaLegType(){ + return features.soga_legs_type; + } + EQ2_Color* GetSkinColor(){ + return &features.skin_color; + } + EQ2_Color* GetEyeColor(){ + return &features.eye_color; + } + EQ2_Color* GetMountSaddleColor(){ + return &features.mount_saddle_color; + } + EQ2_Color* GetMountColor(){ + return &features.mount_color; + } + EQ2_Equipment equipment; + CharFeatures features; + + void AddSpellBonus(LuaSpell* spell, int16 type, float value, int64 class_req =0, vector race_req = vector(), vector faction_req = vector()); + BonusValues* GetSpellBonus(int32 spell_id); + vector* GetAllSpellBonuses(LuaSpell* spell); + bool CheckSpellBonusRemoval(LuaSpell* spell, int16 type); + void RemoveSpellBonus(const LuaSpell* spell); + void CalculateSpellBonuses(ItemStatsValues* stats); + void AddMezSpell(LuaSpell* spell); + void RemoveMezSpell(LuaSpell* spell); + void RemoveAllMezSpells(); + bool IsMezzed(); + void AddStifleSpell(LuaSpell* spell); + void RemoveStifleSpell(LuaSpell* spell); + bool IsStifled(); + void AddDazeSpell(LuaSpell* spell); + void RemoveDazeSpell(LuaSpell* spell); + bool IsDazed(); + void AddStunSpell(LuaSpell* spell); + void RemoveStunSpell(LuaSpell* spell); + bool IsStunned(); + bool IsMezzedOrStunned() {return IsMezzed() || IsStunned();} + void AddRootSpell(LuaSpell* spell); + void RemoveRootSpell(LuaSpell* spell); + bool IsRooted(); + void AddFearSpell(LuaSpell* spell); + void RemoveFearSpell(LuaSpell* spell); + bool IsFeared(); + void AddSnareSpell(LuaSpell* spell); + void RemoveSnareSpell(LuaSpell* spell); + void SetSnareValue(LuaSpell* spell, float snare_val); + bool IsSnared(); + float GetHighestSnare(); + + + void SetCombatPet(Entity* pet) { this->pet = pet; } + void SetCharmedPet(Entity* pet) { charmedPet = pet; } + void SetDeityPet(Entity* pet) { deityPet = pet; } + void SetCosmeticPet(Entity* pet) { cosmeticPet = pet; } + Entity* GetPet() { return pet; } + Entity* GetCharmedPet() { return charmedPet; } + Entity* GetDeityPet() { return deityPet; } + Entity* GetCosmeticPet() { return cosmeticPet; } + /// Check to see if the entity has a combat pet + /// True if the entity has a combat pet + bool HasPet() { return (pet || charmedPet) ? true : false; } + + void HideDeityPet(bool val); + void HideCosmeticPet(bool val); + void DismissPet(NPC* pet, bool from_death = false); + + /// Creates a loot chest to drop in the world + /// Pointer to the chest + NPC* DropChest(); + + /// Add a ward to the entities ward list + /// Spell id of the ward to add + /// WardInfo* of the ward we are adding + void AddWard(int32 spellID, WardInfo* ward); + + /// Gets ward info for the given spell id + /// The spell id of the ward we want to get + /// WardInfo for the given spell id + WardInfo* GetWard(int32 spellID); + + /// Removes the ward with the given spell id + /// The spell id of the ward to remove + void RemoveWard(int32 spellID); + + /// Subtracts the given damage from the wards + /// The damage to subtract from the wards + /// The amount of damage left after wards + int32 CheckWards(int32 damage, int8 damage_type); + + map stats; + + /// Adds a proc to the list of current procs + /// The type of proc to add + /// The percent chance the proc has to go off + /// The item the proc is coming from if any + /// The spell the proc is coming from if any + void AddProc(int8 type, float chance, Item* item = 0, LuaSpell* spell = 0); + + /// Removes a proc from the list of current procs + /// Item the proc is from + /// Spell the proc is from + void RemoveProc(Item* item = 0, LuaSpell* spell = 0); + + /// Cycles through the proc list and executes them if they can go off + /// The proc type to check + /// The target of the proc if it goes off + void CheckProcs(int8 type, Spawn* target); + + /// Clears the entire proc list + void ClearProcs(); + + float GetSpeed(); + float GetAirSpeed(); + float GetBaseSpeed() { return speed; } + void SetSpeed(float val) { speed = val; } + void SetSpeedMultiplier(float val) { speed_multiplier = val; } + + void SetThreatTransfer(ThreatTransfer* transfer) { m_threatTransfer = transfer; } + ThreatTransfer* GetThreatTransfer() { return m_threatTransfer; } + int8 GetTraumaCount(); + int8 GetArcaneCount(); + int8 GetNoxiousCount(); + int8 GetElementalCount(); + int8 GetCurseCount(); + int8 GetDetTypeCount(int8 det_type); + int8 GetDetCount(); + bool HasCurableDetrimentType(int8 det_type); + Mutex* GetDetrimentMutex(); + Mutex* GetMaintainedMutex(); + Mutex* GetSpellEffectMutex(); + void ClearAllDetriments(); + void CureDetrimentByType(int8 cure_count, int8 det_type, string cure_name, Entity* caster, int8 cure_level = 0); + void CureDetrimentByControlEffect(int8 cure_count, int8 det_type, string cure_name, Entity* caster, int8 cure_level = 0); + vector* GetDetrimentalSpellEffects(); + void RemoveEffectsFromLuaSpell(LuaSpell* spell); + virtual void RemoveSkillBonus(int32 spell_id); + void CancelAllStealth(); + bool IsStealthed(); + bool IsInvis(); + void AddInvisSpell(LuaSpell* spell); + void AddStealthSpell(LuaSpell* spell); + void RemoveStealthSpell(LuaSpell* spell); + void RemoveInvisSpell(LuaSpell* spell); + void AddWaterwalkSpell(LuaSpell* spell); + void AddWaterjumpSpell(LuaSpell* spell); + void RemoveWaterwalkSpell(LuaSpell* spell); + void RemoveWaterjumpSpell(LuaSpell* spell); + void AddAOEImmunity(LuaSpell* spell); + bool IsAOEImmune(); + void RemoveAOEImmunity(LuaSpell* spell); + void AddStunImmunity(LuaSpell* spell); + void RemoveStunImmunity(LuaSpell* spell); + bool IsStunImmune(); + void AddStifleImmunity(LuaSpell* spell); + void RemoveStifleImmunity(LuaSpell* spell); + bool IsStifleImmune(); + void AddMezImmunity(LuaSpell* spell); + void RemoveMezImmunity(LuaSpell* spell); + bool IsMezImmune(); + void AddRootImmunity(LuaSpell* spell); + void RemoveRootImmunity(LuaSpell* spell); + bool IsRootImmune(); + void AddFearImmunity(LuaSpell* spell); + void RemoveFearImmunity(LuaSpell* spell); + bool IsFearImmune(); + void AddDazeImmunity(LuaSpell* spell); + void RemoveDazeImmunity(LuaSpell* spell); + bool IsDazeImmune(); + void AddFlightSpell(LuaSpell* spell); + void RemoveFlightSpell(LuaSpell* spell); + void AddSafefallSpell(LuaSpell* spell); + void RemoveSafefallSpell(LuaSpell* spell); + void AddGlideSpell(LuaSpell* spell); + void RemoveGlideSpell(LuaSpell* spell); + + GroupMemberInfo* GetGroupMemberInfo() { return group_member_info; } + void SetGroupMemberInfo(GroupMemberInfo* info) { group_member_info = info; } + void UpdateGroupMemberInfo(); + + void CustomizeAppearance(PacketStruct* packet); + Trade* trade; + + // Keep track of entities that hate this spawn. + set HatedBy; + +protected: + bool in_combat; + +private: + MutexList bonus_list; + map*> control_effects; + map*> immunities; + float max_speed; + vector loot_items; + int32 loot_coins; + int8 deity; + sint16 regen_hp_rate; + sint16 regen_power_rate; + float last_x; + float last_y; + float last_z; + float last_heading; + bool casting; + InfoStruct info_struct; + CombatData melee_combat_data; + CombatData ranged_combat_data; + map det_count_list; + Mutex MDetriments; + Mutex MMaintainedSpells; + Mutex MSpellEffects; + vector detrimental_spell_effects; + Mutex MLootItems; + // Pointers for the 4 types of pets (Summon, Charm, Deity, Cosmetic) + Entity* pet; + Entity* charmedPet; + Entity* deityPet; + Entity* cosmeticPet; + + // int32 = spell id, WardInfo* = pointer to ward info + map m_wardList; + + // int8 = type, vector = list of pointers to proc info + map > m_procList; + Mutex MProcList; + + /// Actually calls the lua script to cast the proc + /// Proc to be cast + /// Type of proc going off
+ /// Target of the proc + bool CastProc(Proc* proc, int8 type, Spawn* target); + + float speed; + float speed_multiplier; + + map snare_values; + + ThreatTransfer* m_threatTransfer; + + GroupMemberInfo* group_member_info; +}; + +#endif diff --git a/EQ2/source/WorldServer/Factions.cpp b/EQ2/source/WorldServer/Factions.cpp new file mode 100644 index 000000000..03e2b55d9 --- /dev/null +++ b/EQ2/source/WorldServer/Factions.cpp @@ -0,0 +1,179 @@ +/* + EQ2Emulator: Everquest II Server Emulator + Copyright (C) 2007 EQ2EMulator Development Team (http://www.eq2emulator.net) + + This file is part of EQ2Emulator. + + EQ2Emulator is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + EQ2Emulator is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with EQ2Emulator. If not, see . +*/ +#include "Factions.h" +#include "client.h" + +extern MasterFactionList master_faction_list; +extern ConfigReader configReader; + +PlayerFaction::PlayerFaction(){ + MFactionUpdateNeeded.SetName("PlayerFaction::MFactionUpdateNeeded"); +} + +sint32 PlayerFaction::GetMaxValue(sint8 con){ + if(con < 0) + return con * 10000; + else + return (con * 10000) + 9999; +} + +sint32 PlayerFaction::GetMinValue(sint8 con){ + if(con <= 0) + return (con * 10000) - 9999; + else + return (con * 10000); +} + +bool PlayerFaction::ShouldAttack(int32 faction_id){ + return (GetCon(faction_id) <= -4); +} + +sint8 PlayerFaction::GetCon(int32 faction_id){ + if(faction_id <= 10){ + if(faction_id == 0) + return 0; + return (faction_id-5); + } + + sint32 value = GetFactionValue(faction_id); + if(value >= -9999 && value <= 9999) + return 0; + else{ + if(value>= 40000) + return 4; + else if(value <= -40000) + return -4; + return (sint8)(value/10000); + } +} + +int8 PlayerFaction::GetPercent(int32 faction_id){ + if(faction_id <= 10) + return 0; + sint8 con = GetCon(faction_id); + sint32 value = GetFactionValue(faction_id); + if(con != 0){ + if(value <= 0) + value *= -1; + if(con < 0) + con *= -1; + value -= con * 10000; + value *= 100; + return value / 10000; + } + else{ + value += 10000; + value *= 100; + return value / 20000; + } +} + +EQ2Packet* PlayerFaction::FactionUpdate(int16 version){ + EQ2Packet* ret = 0; + Faction* faction = 0; + PacketStruct* packet = configReader.getStruct("WS_FactionUpdate", version); + MFactionUpdateNeeded.lock(); + if(packet){ + packet->setArrayLengthByName("num_factions", faction_update_needed.size()); + for(int32 i=0;isetArrayDataByName("faction_id", faction->id, i); + packet->setArrayDataByName("name", faction->name.c_str(), i); + packet->setArrayDataByName("description", faction->description.c_str(), i); + packet->setArrayDataByName("category", faction->type.c_str(), i); + packet->setArrayDataByName("con", GetCon(faction->id), i); + packet->setArrayDataByName("percentage", GetPercent(faction->id), i); + packet->setArrayDataByName("value", GetFactionValue(faction->id), i); + } + } + ret = packet->serialize(); + safe_delete(packet); + } + faction_update_needed.clear(); + MFactionUpdateNeeded.unlock(); + return ret; +} + +sint32 PlayerFaction::GetFactionValue(int32 faction_id){ + if(faction_id <= 10) + return 0; + if(faction_values.count(faction_id) == 0) + return master_faction_list.GetDefaultFactionValue(faction_id); //faction_values[faction_id] = master_faction_list.GetDefaultFactionValue(faction_id); + return faction_values[faction_id]; +} + +bool PlayerFaction::ShouldIncrease(int32 faction_id){ + if(faction_id <= 10 || master_faction_list.GetIncreaseAmount(faction_id) == 0) + return false; + return true; +} + +bool PlayerFaction::ShouldDecrease(int32 faction_id){ + if(faction_id <= 10 || master_faction_list.GetDecreaseAmount(faction_id) == 0) + return false; + return true; +} + +bool PlayerFaction::IncreaseFaction(int32 faction_id, int32 amount){ + if(faction_id <= 10) + return true; + bool ret = true; + if(amount == 0) + amount = master_faction_list.GetIncreaseAmount(faction_id); + faction_values[faction_id] += amount; + if(faction_values[faction_id] >= 50000){ + faction_values[faction_id] = 50000; + ret = false; + } + MFactionUpdateNeeded.lock(); + faction_update_needed.push_back(faction_id); + MFactionUpdateNeeded.unlock(); + return ret; +} + +bool PlayerFaction::DecreaseFaction(int32 faction_id, int32 amount){ + if(faction_id <= 10) + return true; + bool ret = true; + if(amount == 0) + amount = master_faction_list.GetDecreaseAmount(faction_id); + if(amount != 0){ + faction_values[faction_id] -= amount; + if(faction_values[faction_id] <= -50000){ + faction_values[faction_id] = -50000; + ret = false; + } + } + else + ret = false; + MFactionUpdateNeeded.lock(); + faction_update_needed.push_back(faction_id); + MFactionUpdateNeeded.unlock(); + return ret; +} + +bool PlayerFaction::SetFactionValue(int32 faction_id, sint32 value){ + faction_values[faction_id] = value; + MFactionUpdateNeeded.lock(); + faction_update_needed.push_back(faction_id); + MFactionUpdateNeeded.unlock(); + return true; +} diff --git a/EQ2/source/WorldServer/Factions.h b/EQ2/source/WorldServer/Factions.h new file mode 100644 index 000000000..146571e95 --- /dev/null +++ b/EQ2/source/WorldServer/Factions.h @@ -0,0 +1,136 @@ +/* + EQ2Emulator: Everquest II Server Emulator + Copyright (C) 2007 EQ2EMulator Development Team (http://www.eq2emulator.net) + + This file is part of EQ2Emulator. + + EQ2Emulator is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + EQ2Emulator is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with EQ2Emulator. If not, see . +*/ +#ifndef EQ2_FACTIONS +#define EQ2_FACTIONS + +#include "../common/ConfigReader.h" +#include "../common/Mutex.h" + +struct Faction { + int32 id; + string name; + string type; + string description; + int16 negative_change; + int16 positive_change; + sint32 default_value; +}; + +class MasterFactionList{ +public: + MasterFactionList(){ + + } + ~MasterFactionList(){ + Clear(); + } + void Clear() { + map::iterator iter; + for(iter = global_faction_list.begin();iter != global_faction_list.end(); iter++){ + safe_delete(iter->second); + } + } + sint32 GetDefaultFactionValue(int32 faction_id){ + if(global_faction_list.count(faction_id) > 0 && global_faction_list[faction_id]) + return global_faction_list[faction_id]->default_value; + return 0; + } + Faction* GetFaction(char* name){ + return faction_name_list[name]; + } + Faction* GetFaction(int32 id){ + if(global_faction_list.count(id) > 0) + return global_faction_list[id]; + return 0; + } + void AddFaction(Faction* faction){ + global_faction_list[faction->id] = faction; + faction_name_list[faction->name] = faction; + } + sint32 GetIncreaseAmount(int32 faction_id){ + if(global_faction_list.count(faction_id) > 0 && global_faction_list[faction_id]) + return global_faction_list[faction_id]->positive_change; + return 0; + } + sint32 GetDecreaseAmount(int32 faction_id){ + if(global_faction_list.count(faction_id) > 0 && global_faction_list[faction_id]) + return global_faction_list[faction_id]->negative_change; + return 0; + } + int32 GetFactionCount(){ + return global_faction_list.size(); + } + void AddHostileFaction(int32 faction_id, int32 hostile_faction_id){ + hostile_factions[faction_id].push_back(hostile_faction_id); + } + void AddFriendlyFaction(int32 faction_id, int32 friendly_faction_id){ + friendly_factions[faction_id].push_back(friendly_faction_id); + } + vector* GetFriendlyFactions(int32 faction_id){ + if(friendly_factions.count(faction_id) > 0) + return &friendly_factions[faction_id]; + else + return 0; + } + vector* GetHostileFactions(int32 faction_id){ + if(hostile_factions.count(faction_id) > 0) + return &hostile_factions[faction_id]; + else + return 0; + } + const char* GetFactionNameByID(int32 faction_id) { + if (faction_id > 0 && global_faction_list.count(faction_id) > 0) + return global_faction_list[faction_id]->name.c_str(); + return 0; + } +private: + map > friendly_factions; + map > hostile_factions; + map global_faction_list; + map faction_name_list; +}; + +class PlayerFaction{ +public: + PlayerFaction(); + sint32 GetMaxValue(sint8 con); + sint32 GetMinValue(sint8 con); + EQ2Packet* FactionUpdate(int16 version); + sint32 GetFactionValue(int32 faction_id); + bool ShouldIncrease(int32 faction_id); + bool ShouldDecrease(int32 faction_id); + bool IncreaseFaction(int32 faction_id, int32 amount = 0); + bool DecreaseFaction(int32 faction_id, int32 amount = 0); + bool SetFactionValue(int32 faction_id, sint32 value); + sint8 GetCon(int32 faction_id); + int8 GetPercent(int32 faction_id); + map* GetFactionValues(){ + return &faction_values; + } + bool ShouldAttack(int32 faction_id); + +private: + Mutex MFactionUpdateNeeded; + vector faction_update_needed; + map faction_values; + map faction_percent; +}; +#endif + diff --git a/EQ2/source/WorldServer/GroundSpawn.cpp b/EQ2/source/WorldServer/GroundSpawn.cpp new file mode 100644 index 000000000..c9a7442a7 --- /dev/null +++ b/EQ2/source/WorldServer/GroundSpawn.cpp @@ -0,0 +1,548 @@ +/* + EQ2Emulator: Everquest II Server Emulator + Copyright (C) 2007 EQ2EMulator Development Team (http://www.eq2emulator.net) + + This file is part of EQ2Emulator. + + EQ2Emulator is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + EQ2Emulator is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with EQ2Emulator. If not, see . +*/ +#include "GroundSpawn.h" +#include "World.h" +#include "Spells.h" +#include "../common/MiscFunctions.h" +#include "../common/Log.h" + +extern ConfigReader configReader; +extern MasterSpellList master_spell_list; +extern World world; + +GroundSpawn::GroundSpawn(){ + packet_num = 0; + appearance.encounter_level = 0; + spawn_type = 2; + appearance.pos.state = 129; + number_harvests = 0; + num_attempts_per_harvest = 0; + groundspawn_id = 0; + MHarvest.SetName("GroundSpawn::MHarvest"); + MHarvestUse.SetName("GroundSpawn::MHarvestUse"); +} + +GroundSpawn::~GroundSpawn(){ + +} + +EQ2Packet* GroundSpawn::serialize(Player* player, int16 version){ + opcode = EQOpcodeManager[GetOpcodeVersion(version)]->EmuToEQ(OP_EqCreateGhostCmd); + return spawn_serialize(player, version); +} + +int8 GroundSpawn::GetNumberHarvests(){ + return number_harvests; +} + +void GroundSpawn::SetNumberHarvests(int8 val){ + number_harvests = val; +} + +int8 GroundSpawn::GetAttemptsPerHarvest(){ + return num_attempts_per_harvest; +} + +void GroundSpawn::SetAttemptsPerHarvest(int8 val){ + num_attempts_per_harvest = val; +} + +int32 GroundSpawn::GetGroundSpawnEntryID(){ + return groundspawn_id; +} + +void GroundSpawn::SetGroundSpawnEntryID(int32 val){ + groundspawn_id = val; +} + +void GroundSpawn::SetCollectionSkill(const char* val){ + if(val) + collection_skill = string(val); +} + +const char* GroundSpawn::GetCollectionSkill(){ + return collection_skill.c_str(); +} + +void GroundSpawn::ProcessHarvest(Client* client) { + LogWrite(GROUNDSPAWN__DEBUG, 3, "GSpawn", "Process harvesting for player '%s' (%u)", client->GetPlayer()->GetName(), client->GetPlayer()->GetID()); + + MHarvest.lock(); + + vector* groundspawn_entries = GetZone()->GetGroundSpawnEntries(groundspawn_id); + vector* groundspawn_items = GetZone()->GetGroundSpawnEntryItems(groundspawn_id); + + Item* master_item = 0; + Item* master_rare = 0; + Item* item = 0; + Item* item_rare = 0; + + int16 lowest_skill_level = 0; + int16 table_choice = 0; + int32 item_choice = 0; + int32 rare_choice = 0; + int8 harvest_type = 0; + int32 item_harvested = 0; + int8 reward_total = 1; + int32 rare_harvested = 0; + int8 rare_item = 0; + bool is_collection = false; + + if (!groundspawn_entries || !groundspawn_items) { + LogWrite(GROUNDSPAWN__ERROR, 3, "GSpawn", "No groundspawn entries or items assigned to groundspawn id: %u", groundspawn_id); + client->Message(CHANNEL_COLOR_RED, "Error: There are no groundspawn entries or items assigned to groundspawn id: %u", groundspawn_id); + MHarvest.unlock(); + return; + } + + if (number_harvests == 0) { + LogWrite(GROUNDSPAWN__DEBUG, 3, "GSpawn", "Total harvests depleated for groundspawn id: %u", groundspawn_id); + client->SimpleMessage(CHANNEL_COLOR_RED, "Error: This spawn has nothing more to harvest!"); + MHarvest.unlock(); + return; + } + + Skill* skill = 0; + if (collection_skill == "Collecting") { + skill = client->GetPlayer()->GetSkillByName("Gathering"); + is_collection = true; + } + else + skill = client->GetPlayer()->GetSkillByName(collection_skill.c_str(), true); + if (!skill) { + LogWrite(GROUNDSPAWN__WARNING, 3, "GSpawn", "Player '%s' lacks the skill: '%s'", client->GetPlayer()->GetName(), collection_skill.c_str()); + client->Message(CHANNEL_COLOR_RED, "Error: You do not have the '%s' skill!", collection_skill.c_str()); + MHarvest.unlock(); + return; + } + + for (int8 i = 0; i < num_attempts_per_harvest; i++) { + vector mod_groundspawn_entries; + + if (groundspawn_entries) { + vector highest_match; + vector::iterator itr; + + GroundSpawnEntry* entry = 0; // current data + GroundSpawnEntry* selected_table = 0; // selected table data + + // first, iterate through groundspawn_entries, discard tables player cannot use + for (itr = groundspawn_entries->begin(); itr != groundspawn_entries->end(); itr++) { + entry = *itr; + + // if player lacks skill, skip table + if (entry->min_skill_level > skill->current_val) + continue; + // if bonus, but player lacks level, skip table + if (entry->bonus_table && (client->GetPlayer()->GetLevel() < entry->min_adventure_level)) + continue; + + // build modified entries table + mod_groundspawn_entries.push_back(entry); + LogWrite(GROUNDSPAWN__DEBUG, 5, "GSpawn", "Keeping groundspawn_entry: %i", entry->min_skill_level); + } + + // if anything remains, find lowest min_skill_level in remaining set(s) + if (mod_groundspawn_entries.size() > 0) { + vector::iterator itr; + GroundSpawnEntry* entry = 0; + + for (itr = mod_groundspawn_entries.begin(); itr != mod_groundspawn_entries.end(); itr++) { + entry = *itr; + + // find the low range of available tables for random roll + if (lowest_skill_level > entry->min_skill_level || lowest_skill_level == 0) + lowest_skill_level = entry->min_skill_level; + } + LogWrite(GROUNDSPAWN__DEBUG, 3, "GSpawn", "Lowest Skill Level: %i", lowest_skill_level); + } + else { + // if no tables chosen, you must lack the skills + // TODO: move this check to LUA when harvest command is first selected + client->Message(CHANNEL_COLOR_RED, "You lack the skills to harvest this node!"); + LogWrite(GROUNDSPAWN__DEBUG, 3, "GSpawn", "All groundspawn_entry tables tossed! No Skills? Something broke?"); + MHarvest.unlock(); + return; + } + + // now roll to see which table to use + table_choice = MakeRandomInt(lowest_skill_level, skill->current_val); + LogWrite(GROUNDSPAWN__DEBUG, 3, "GSpawn", "Random INT for Table by skill level: %i", table_choice); + + int16 highest_score = 0; + for (itr = mod_groundspawn_entries.begin(); itr != mod_groundspawn_entries.end(); itr++) { + entry = *itr; + + // determines the highest min_skill_level in the current set of tables (if multiple tables) + if (table_choice >= entry->min_skill_level && (highest_score == 0 || highest_score < table_choice)) { + // removes old highest for the new one + highest_match.clear(); + highest_score = entry->min_skill_level; + } + // if the score = level, push into highest_match set + if (highest_score == entry->min_skill_level) + highest_match.push_back(entry); + } + + // if there is STILL more than 1 table player qualifies for, rand() and pick one + if (highest_match.size() > 1) { + int16 rand_index = rand() % highest_match.size(); + selected_table = highest_match.at(rand_index); + } + else if (highest_match.size() > 0) + selected_table = highest_match.at(0); + + // by this point, we should have 1 table who's min skill matches the score (selected_table) + if (selected_table) { + LogWrite(GROUNDSPAWN__DEBUG, 3, "GSpawn", "Using Table: %i, %i, %i, %.2f, %.2f, %.2f, %.2f, %.2f, %.2f, %i", + selected_table->min_skill_level, + selected_table->min_adventure_level, + selected_table->bonus_table, + selected_table->harvest1, + selected_table->harvest3, + selected_table->harvest5, + selected_table->harvest_imbue, + selected_table->harvest_rare, + selected_table->harvest10, + selected_table->harvest_coin); + + + // roll 1-100 for chance-to-harvest percentage + float chance = MakeRandomFloat(0, 100); + LogWrite(GROUNDSPAWN__DEBUG, 3, "GSpawn", "Random FLOAT for harvest percentages: %.2f", chance); + + // starting with the lowest %, select a harvest type + reward qty + if (chance <= selected_table->harvest10 && is_collection == false) { + LogWrite(GROUNDSPAWN__DEBUG, 3, "GSpawn", "Harvest 10 items + Rare Item from table : %i", selected_table->min_skill_level); + harvest_type = 6; + reward_total = 10; + } + else if (chance <= selected_table->harvest_rare && is_collection == false) { + LogWrite(GROUNDSPAWN__DEBUG, 3, "GSpawn", "Harvest Rare Item from table : %i", selected_table->min_skill_level); + harvest_type = 5; + } + else if (chance <= selected_table->harvest_imbue && is_collection == false) { + LogWrite(GROUNDSPAWN__DEBUG, 3, "GSpawn", "Harvest Imbue Item from table : %i", selected_table->min_skill_level); + harvest_type = 4; + } + else if (chance <= selected_table->harvest5 && is_collection == false) { + LogWrite(GROUNDSPAWN__DEBUG, 3, "GSpawn", "Harvest 5 Items from table : %i", selected_table->min_skill_level); + harvest_type = 3; + reward_total = 5; + } + else if (chance <= selected_table->harvest3 && is_collection == false) { + LogWrite(GROUNDSPAWN__DEBUG, 3, "GSpawn", "Harvest 3 Items from table : %i", selected_table->min_skill_level); + harvest_type = 2; + reward_total = 3; + } + else if (chance <= selected_table->harvest1 || skill->current_val == skill->max_val || is_collection) { + LogWrite(GROUNDSPAWN__DEBUG, 3, "GSpawn", "Harvest 1 Item from table : %i", selected_table->min_skill_level); + harvest_type = 1; + } + else + LogWrite(GROUNDSPAWN__DEBUG, 3, "GSpawn", "Harvest nothing..."); + } + + // once you know how many and what type of item to harvest, pick an item from the list + if (harvest_type) { + vector mod_groundspawn_items; + vector mod_groundspawn_rares; + vector mod_groundspawn_imbue; + + vector::iterator itr; + GroundSpawnEntryItem* entry = 0; + + // iterate through groundspawn_items, discard items player cannot roll for + for (itr = groundspawn_items->begin(); itr != groundspawn_items->end(); itr++) { + entry = *itr; + + // if this is a Rare, or an Imbue, but is_rare flag is 0, skip item + if ((harvest_type == 5 || harvest_type == 4) && entry->is_rare == 0) + continue; + // if it is a 1, 3, or 5 and is_rare = 1, skip + else if (harvest_type < 4 && entry->is_rare == 1) + continue; + + // if the grid_id on the item matches player grid, or is 0, keep the item + if (!entry->grid_id || (entry->grid_id == client->GetPlayer()->appearance.pos.grid_id)) { + // build modified entries table + if ((entry->is_rare == 1 && harvest_type == 5) || (entry->is_rare == 1 && harvest_type == 6)) { + // if the matching item is rare, or harvest10 push to mod rares + mod_groundspawn_rares.push_back(entry); + LogWrite(GROUNDSPAWN__DEBUG, 3, "GSpawn", "Keeping groundspawn_rare_item: %u", entry->item_id); + } + if (entry->is_rare == 0 && harvest_type != 4 && harvest_type != 5) { + // if the matching item is normal,or harvest 10 push to mod items + mod_groundspawn_items.push_back(entry); + LogWrite(GROUNDSPAWN__DEBUG, 3, "GSpawn", "Keeping groundspawn_common_item: %u", entry->item_id); + } + if (entry->is_rare == 2 && harvest_type == 4) { + // if the matching item is imbue item, push to mod imbue + mod_groundspawn_imbue.push_back(entry); + LogWrite(GROUNDSPAWN__DEBUG, 3, "GSpawn", "Keeping groundspawn_imbue_item: %u", entry->item_id); + } + } + } + + // if any items remain in the list, random to see which one gets awarded + if (mod_groundspawn_items.size() > 0) { + // roll to see which item index to use + item_choice = rand() % mod_groundspawn_items.size(); + LogWrite(GROUNDSPAWN__DEBUG, 3, "GSpawn", "Random INT for which item to award: %i", item_choice); + + // set item_id to be awarded + item_harvested = mod_groundspawn_items[item_choice]->item_id; + + // if reward is rare, set flag + rare_item = mod_groundspawn_items[item_choice]->is_rare; + + LogWrite(GROUNDSPAWN__DEBUG, 3, "GSpawn", "Item ID to award: %u, Rare = %i", item_harvested, item_rare); + + // if 10+rare, handle additional "rare" reward + if (harvest_type == 6) { + // make sure there is a rare table to choose from! + if (mod_groundspawn_rares.size() > 0) { + // roll to see which rare index to use + rare_choice = rand() % mod_groundspawn_rares.size(); + + // set (rare) item_id to be awarded + rare_harvested = mod_groundspawn_rares[rare_choice]->item_id; + + // we're picking a rare here, so obviously this is true ;) + rare_item = 1; + + LogWrite(GROUNDSPAWN__DEBUG, 3, "GSpawn", "RARE Item ID to award: %u", rare_harvested); + } + else { + // all rare entries were eliminated above, or none are assigned. Either way, shouldn't be here! + LogWrite(GROUNDSPAWN__ERROR, 3, "GSpawn", "Groundspawn Entry for '%s' (%i) has no RARE items!", GetName(), GetID()); + } + } + } + else if (mod_groundspawn_rares.size() > 0) { + // roll to see which rare index to use + item_choice = rand() % mod_groundspawn_rares.size(); + + // set (rare) item_id to be awarded + item_harvested = mod_groundspawn_rares[item_choice]->item_id; + + // we're picking a rare here, so obviously this is true ;) + rare_item = 1; + + LogWrite(GROUNDSPAWN__DEBUG, 3, "GSpawn", "RARE Item ID to award: %u", rare_harvested); + } + else if (mod_groundspawn_imbue.size() > 0) { + // roll to see which rare index to use + item_choice = rand() % mod_groundspawn_imbue.size(); + + // set (rare) item_id to be awarded + item_harvested = mod_groundspawn_imbue[item_choice]->item_id; + + // we're picking a rare here, so obviously this is true ;) + rare_item = 0; + + LogWrite(GROUNDSPAWN__DEBUG, 3, "GSpawn", "imbue Item ID to award: %u", rare_harvested); + } + + + + + else { + // all item entries were eliminated above, or none are assigned. Either way, shouldn't be here! + LogWrite(GROUNDSPAWN__ERROR, 0, "GSpawn", "Groundspawn Entry for '%s' (%i) has no items!", GetName(), GetID()); + } + + // if an item was harvested, send updates to client, add item to inventory + if (item_harvested) { + char tmp[200] = { 0 }; + + // set Normal item harvested + master_item = master_item_list.GetItem(item_harvested); + if (master_item) { + // set details of Normal item + item = new Item(master_item); + // set how many of this item the player receives + item->details.count = reward_total; + + // chat box update for normal item (todo: verify output text) + client->Message(CHANNEL_COLOR_HARVEST, "You %s %i \\aITEM %u %u:%s\\/a from the %s.", GetHarvestMessageName(true).c_str(), item->details.count, item->details.item_id, item->details.unique_id, item->name.c_str(), GetName()); + // add Normal item to player inventory + client->AddItem(item); + //Check if the player has a harvesting quest for this + client->GetPlayer()->CheckQuestsHarvestUpdate(item, reward_total); + + + + // if this is a 10+rare, handle sepErately + if (harvest_type == 6 && rare_item == 1) { + LogWrite(GROUNDSPAWN__DEBUG, 3, "GSpawn", "Item ID %u is Normal. Qty %i", item_harvested, item->details.count); + + // send Normal harvest message to client + sprintf(tmp, "\\#64FFFFYou have %s:\12\\#C8FFFF%i %s", GetHarvestMessageName().c_str(), item->details.count, item->name.c_str()); + client->SendPopupMessage(10, tmp, "ui_harvested_normal", 2.25, 0xFF, 0xFF, 0xFF); + client->GetPlayer()->UpdatePlayerStatistic(STAT_PLAYER_ITEMS_HARVESTED, item->details.count); + + // set Rare item harvested + master_rare = master_item_list.GetItem(rare_harvested); + if (master_rare) { + // set details of Rare item + item_rare = new Item(master_rare); + // count of Rare is always 1 + item_rare->details.count = 1; + + LogWrite(GROUNDSPAWN__DEBUG, 3, "GSpawn", "Item ID %u is RARE!", rare_harvested); + + // send Rare harvest message to client + sprintf(tmp, "\\#FFFF6ERare item found!\12%s: \\#C8FFFF%i %s", GetHarvestMessageName().c_str(), item_rare->details.count, item_rare->name.c_str()); + client->Message(CHANNEL_COLOR_HARVEST, "You have found a rare item!"); + client->SendPopupMessage(11, tmp, "ui_harvested_rare", 2.25, 0xFF, 0xFF, 0xFF); + client->GetPlayer()->UpdatePlayerStatistic(STAT_PLAYER_RARES_HARVESTED, item_rare->details.count); + + // chat box update for rare item (todo: verify output text) + client->Message(CHANNEL_COLOR_HARVEST, "You %s %i \\aITEM %u %u:%s\\/a from the %s.", GetHarvestMessageName(true).c_str(), item_rare->details.count, item_rare->details.item_id, item_rare->details.unique_id, item_rare->name.c_str(), GetName()); + // add Rare item to player inventory + client->AddItem(item_rare); + //Check if the player has a harvesting quest for this + client->GetPlayer()->CheckQuestsHarvestUpdate(item_rare, 1); + } + } + else if (rare_item == 1) { + // if harvest signaled rare or imbue type + LogWrite(GROUNDSPAWN__DEBUG, 3, "GSpawn", "Item ID %u is RARE! Qty: %i", item_harvested, item->details.count); + + // send Rare harvest message to client + sprintf(tmp, "\\#FFFF6ERare item found!\12%s: \\#C8FFFF%i %s", GetHarvestMessageName().c_str(), item->details.count, item->name.c_str()); + client->Message(CHANNEL_COLOR_HARVEST, "You have found a rare item!"); + client->SendPopupMessage(11, tmp, "ui_harvested_rare", 2.25, 0xFF, 0xFF, 0xFF); + client->GetPlayer()->UpdatePlayerStatistic(STAT_PLAYER_RARES_HARVESTED, item->details.count); + } + else { + // send Normal harvest message to client + LogWrite(GROUNDSPAWN__DEBUG, 3, "GSpawn", "Item ID %u is Normal. Qty %i", item_harvested, item->details.count); + sprintf(tmp, "\\#64FFFFYou have %s:\12\\#C8FFFF%i %s", GetHarvestMessageName().c_str(), item->details.count, item->name.c_str()); + client->SendPopupMessage(10, tmp, "ui_harvested_normal", 2.25, 0xFF, 0xFF, 0xFF); + client->GetPlayer()->UpdatePlayerStatistic(STAT_PLAYER_ITEMS_HARVESTED, item->details.count); + } + + } + else { + // error! + LogWrite(GROUNDSPAWN__ERROR, 0, "GSpawn", "Error: Item ID Not Found - %u", item_harvested); + client->Message(CHANNEL_COLOR_RED, "Error: Unable to find item id %u", item_harvested); + } + // decrement # of pulls on this node before it despawns + number_harvests--; + } + else { + // if no item harvested + LogWrite(GROUNDSPAWN__DEBUG, 3, "GSpawn", "No item_harvested"); + client->Message(CHANNEL_COLOR_HARVEST, "You failed to %s anything from %s.", GetHarvestMessageName(true, true).c_str(), GetName()); + } + } + else { + // if no harvest type + LogWrite(GROUNDSPAWN__DEBUG, 3, "GSpawn", "No harvest_type"); + client->Message(CHANNEL_COLOR_HARVEST, "You failed to %s anything from %s.", GetHarvestMessageName(true, true).c_str(), GetName()); + } + } + } // cycle through num_attempts_per_harvest + MHarvest.unlock(); + + LogWrite(GROUNDSPAWN__DEBUG, 0, "GSpawn", "Process harvest complete for player '%s' (%u)", client->GetPlayer()->GetName(), client->GetPlayer()->GetID()); +} + +string GroundSpawn::GetHarvestMessageName(bool present_tense, bool failure){ + string ret = ""; + if((collection_skill == "Gathering" ||collection_skill == "Collecting") && !present_tense) + ret = "gathered"; + else if(collection_skill == "Gathering" || collection_skill == "Collecting") + ret = "gather"; + else if(collection_skill == "Mining" && !present_tense) + ret = "mined"; + else if(collection_skill == "Mining") + ret = "mine"; + else if (collection_skill == "Fishing" && !present_tense) + ret = "fished"; + else if(collection_skill == "Fishing") + ret = "fish"; + else if(collection_skill == "Trapping" && !present_tense && !failure) + ret = "acquired"; + else if(collection_skill == "Trapping" && failure) + ret = "trap"; + else if(collection_skill == "Trapping") + ret = "acquire"; + else if(collection_skill == "Foresting" && !present_tense) + ret = "forested"; + else if(collection_skill == "Foresting") + ret = "forest"; + else if (collection_skill == "Collecting") + ret = "collect"; + return ret; +} + +string GroundSpawn::GetHarvestSpellType(){ + string ret = ""; + if(collection_skill == "Gathering" || collection_skill == "Collecting") + ret = "gather"; + else if(collection_skill == "Mining") + ret = "mine"; + else if(collection_skill == "Trapping") + ret = "trap"; + else if(collection_skill == "Foresting") + ret = "chop"; + else if(collection_skill == "Fishing") + ret = "fish"; + return ret; +} + +string GroundSpawn::GetHarvestSpellName() { + string ret = ""; + if (collection_skill == "Collecting") + ret = "Gathering"; + else + ret = collection_skill; + return ret; +} + +void GroundSpawn::HandleUse(Client* client, string type){ + if(!client || type.length() == 0) + return; + //The following check disables the use of the groundspawn if spawn access is not granted + if (client) { + bool meets_quest_reqs = MeetsSpawnAccessRequirements(client->GetPlayer()); + if (!meets_quest_reqs && (GetQuestsRequiredOverride() & 2) == 0) + return; + else if (meets_quest_reqs && appearance.show_command_icon != 1) + return; + } + + MHarvestUse.lock(); + if (type == GetHarvestSpellType() && MeetsSpawnAccessRequirements(client->GetPlayer())) { + Spell* spell = master_spell_list.GetSpellByName(GetHarvestSpellName().c_str()); + if (spell) + client->GetCurrentZone()->ProcessSpell(spell, client->GetPlayer(), client->GetPlayer()->GetTarget(), true, true); + } + else if (appearance.show_command_icon == 1 && MeetsSpawnAccessRequirements(client->GetPlayer())) { + EntityCommand* entity_command = FindEntityCommand(type); + if (entity_command) + client->GetCurrentZone()->ProcessEntityCommand(entity_command, client->GetPlayer(), client->GetPlayer()->GetTarget()); + } + MHarvestUse.unlock(); +} diff --git a/EQ2/source/WorldServer/GroundSpawn.h b/EQ2/source/WorldServer/GroundSpawn.h new file mode 100644 index 000000000..56b1ab6ad --- /dev/null +++ b/EQ2/source/WorldServer/GroundSpawn.h @@ -0,0 +1,77 @@ +/* + EQ2Emulator: Everquest II Server Emulator + Copyright (C) 2007 EQ2EMulator Development Team (http://www.eq2emulator.net) + + This file is part of EQ2Emulator. + + EQ2Emulator is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + EQ2Emulator is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with EQ2Emulator. If not, see . +*/ +#ifndef __EQ2_GroundSpawn__ +#define __EQ2_GroundSpawn__ + +#include "Spawn.h" +#include "client.h" +#include "../common/Mutex.h" + +class GroundSpawn : public Spawn { +public: + GroundSpawn(); + virtual ~GroundSpawn(); + GroundSpawn* Copy(){ + GroundSpawn* new_spawn = new GroundSpawn(); + new_spawn->size = size; + new_spawn->SetPrimaryCommands(&primary_command_list); + new_spawn->SetSecondaryCommands(&secondary_command_list); + new_spawn->database_id = database_id; + new_spawn->primary_command_list_id = primary_command_list_id; + new_spawn->secondary_command_list_id = secondary_command_list_id; + memcpy(&new_spawn->appearance, &appearance, sizeof(AppearanceData)); + new_spawn->faction_id = faction_id; + new_spawn->target = 0; + new_spawn->SetTotalHP(GetTotalHP()); + new_spawn->SetTotalPower(GetTotalPower()); + new_spawn->SetHP(GetHP()); + new_spawn->SetPower(GetPower()); + new_spawn->SetNumberHarvests(number_harvests); + new_spawn->SetAttemptsPerHarvest(num_attempts_per_harvest); + new_spawn->SetGroundSpawnEntryID(groundspawn_id); + new_spawn->SetCollectionSkill(collection_skill.c_str()); + new_spawn->SetQuestsRequired(GetQuestsRequired()); + return new_spawn; + } + bool IsGroundSpawn(){ return true; } + EQ2Packet* serialize(Player* player, int16 version); + int8 GetNumberHarvests(); + void SetNumberHarvests(int8 val); + int8 GetAttemptsPerHarvest(); + void SetAttemptsPerHarvest(int8 val); + int32 GetGroundSpawnEntryID(); + void SetGroundSpawnEntryID(int32 val); + void ProcessHarvest(Client* client); + void SetCollectionSkill(const char* val); + const char* GetCollectionSkill(); + string GetHarvestMessageName(bool present_tense = false, bool failure = false); + string GetHarvestSpellType(); + string GetHarvestSpellName(); + void HandleUse(Client* client, string type); +private: + int8 number_harvests; + int8 num_attempts_per_harvest; + int32 groundspawn_id; + string collection_skill; + Mutex MHarvest; + Mutex MHarvestUse; +}; +#endif + diff --git a/EQ2/source/WorldServer/Guilds/Guild.cpp b/EQ2/source/WorldServer/Guilds/Guild.cpp new file mode 100644 index 000000000..6c3e452b5 --- /dev/null +++ b/EQ2/source/WorldServer/Guilds/Guild.cpp @@ -0,0 +1,2352 @@ +/* + EQ2Emulator: Everquest II Server Emulator + Copyright (C) 2007 EQ2EMulator Development Team (http://www.eq2emulator.net) + + This file is part of EQ2Emulator. + + EQ2Emulator is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + EQ2Emulator is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with EQ2Emulator. If not, see . +*/ + +#include +#include +#include +#include "Guild.h" +#include "../Player.h" +#include "../client.h" +#include "../World.h" +#include "../zoneserver.h" +#include "../WorldDatabase.h" +#include "../../common/Log.h" + +extern ConfigReader configReader; +extern ZoneList zone_list; +extern WorldDatabase database; +extern World world; + +/*************************************************************************************************************************************************** + * GUILD + ***************************************************************************************************************************************************/ + +Guild::Guild() { + id = 0; + memset(name, 0, sizeof(name)); + level = 1; + formed_date = 0; + memset(motd, 0, sizeof(motd)); + exp_current = 111; + exp_to_next_level = 2521; + recruiting_min_level = 1; + recruiting_play_style = GUILD_RECRUITING_PLAYSTYLE_NONE; + recruiting_flags.Put(GUILD_RECRUITING_FLAG_TRAINING, 0); + recruiting_flags.Put(GUILD_RECRUITING_FLAG_FIGHTERS, 0); + recruiting_flags.Put(GUILD_RECRUITING_FLAG_PRIESTS, 0); + recruiting_flags.Put(GUILD_RECRUITING_FLAG_SCOUTS, 0); + recruiting_flags.Put(GUILD_RECRUITING_FLAG_MAGES, 0); + recruiting_flags.Put(GUILD_RECRUITING_FLAG_TRADESKILLERS, 0); + recruiting_desc_tags.Put(0, GUILD_RECRUITING_DESC_TAG_NONE); + recruiting_desc_tags.Put(1, GUILD_RECRUITING_DESC_TAG_NONE); + recruiting_desc_tags.Put(2, GUILD_RECRUITING_DESC_TAG_NONE); + recruiting_desc_tags.Put(3, GUILD_RECRUITING_DESC_TAG_NONE); + banks[0].name = "Bank 1"; + banks[1].name = "Bank 2"; + banks[2].name = "Bank 3"; + banks[3].name = "Bank 4"; + save_needed = false; + member_save_needed = false; + events_save_needed = false; + ranks_save_needed = false; + event_filters_save_needed = false; + points_history_save_needed = false; + recruiting_save_needed = false; + mMembers.SetName("Guild::members"); +} + +Guild::~Guild() { + map::iterator guild_member_itr; + + mMembers.writelock(__FUNCTION__, __LINE__); + for (guild_member_itr = members.begin(); guild_member_itr != members.end(); guild_member_itr++) { + deque::iterator point_history_itr; + for (point_history_itr = guild_member_itr->second->point_history.begin(); point_history_itr != guild_member_itr->second->point_history.end(); point_history_itr++) + safe_delete(*point_history_itr); + safe_delete_array(guild_member_itr->second->recruiter_picture_data); + safe_delete(guild_member_itr->second); + } + mMembers.releasewritelock(__FUNCTION__, __LINE__); + + deque::iterator guild_events_itr; + for (guild_events_itr = guild_events.begin(); guild_events_itr != guild_events.end(); guild_events_itr++) + safe_delete(*guild_events_itr); + MutexMap*>::iterator permissions_itr = permissions.begin(); + while (permissions_itr.Next()) + safe_delete(permissions_itr.second); + MutexMap*>::iterator filter_itr = event_filters.begin(); + while (filter_itr.Next()) + safe_delete(filter_itr.second); + for (int32 i = 0; i < 4; i++) { + deque::iterator bank_event_itr; + for (bank_event_itr = banks[i].events.begin(); bank_event_itr != banks[i].events.end(); bank_event_itr++) + safe_delete(*bank_event_itr); + } +} + +void Guild::SetName(const char* name, bool send_packet) { + + assert(name); + + strncpy(this->name, name, sizeof(this->name)); + if (send_packet) { + LogWrite(GUILD__DEBUG, 1, "Guilds", "Setting Guild Name to '%s'...", name); + SendGuildUpdate(); + save_needed = true; + } +} + +void Guild::SetLevel(int8 level, bool send_packet) { + + this->level = level; + if (send_packet) { + LogWrite(GUILD__DEBUG, 1, "Guilds", "Setting Guild Level to %i...", level); + SendGuildUpdate(); + save_needed = true; + } +} + +void Guild::SetMOTD(const char *motd, bool send_packet) { + + assert(motd); + + strncpy(this->motd, motd, sizeof(this->motd)); + if (send_packet) { + LogWrite(GUILD__DEBUG, 1, "Guilds", "Setting Guild MOTD text:\n'%s'", motd); + SendGuildUpdate(); + save_needed = true; + } +} + +void Guild::SetEXPCurrent(int64 exp, bool send_packet) { + + exp_current = exp; + if (send_packet) { + LogWrite(GUILD__DEBUG, 1, "Guilds", "Setting Guild Current XP to %u", exp); + SendGuildUpdate(); + save_needed = true; + } +} + +void Guild::AddEXPCurrent(sint64 exp, bool send_packet) { + + bool ret = false; + char message[128]; + char adjective[16]; + + if (exp > 0 && level < GUILD_MAX_LEVEL) { + exp_current += exp; + if (exp_current >= exp_to_next_level) { + + LogWrite(MISC__TODO, 1, "TODO", "Do we know what guild is leveling here yet?"); + + LogWrite(GUILD__DEBUG, 0, "Guilds", "Guild Level UP! New Level: %i (current XP: %ul)", level, exp_current); + int64 left_over = exp_current - exp_to_next_level; + level++; + exp_to_next_level *= 2; + exp_current = left_over; + AddNewGuildEvent(GUILD_EVENT_GUILD_LEVEL_UP, "The guild gained a level and is now level %u.", Timer::GetUnixTimeStamp(), true, level); + SendMessageToGuild(GUILD_EVENT_GUILD_LEVEL_UP, "The guild gained a level and is now level %u.", level); + + if (level % 10 == 0) { + if (level == 10) + strncpy(adjective, "bold", sizeof(adjective)); + else if (level == 20) + strncpy(adjective, "daring", sizeof(adjective)); + else if (level == 30) + strncpy(adjective, "gallant", sizeof(adjective)); + else if (level == 40) + strncpy(adjective, "noble", sizeof(adjective)); + else if (level == 50) + strncpy(adjective, "heroic", sizeof(adjective)); + else if (level == 60) + strncpy(adjective, "lordly", sizeof(adjective)); + else if (level == 70) + strncpy(adjective, "legendary", sizeof(adjective)); + else if (level == 80) + strncpy(adjective, "epic", sizeof(adjective)); + else + strncpy(adjective, "too uber for cheerios", sizeof(adjective) - 1); + sprintf(message, "The %s guild <%s> has attained level %u", adjective, name, level); + zone_list.HandleGlobalAnnouncement(message); + } + } + save_needed = true; + ret = true; + } + else if (exp < 0) { + } + if (ret && send_packet) + SendGuildUpdate(); +} + +void Guild::SetEXPToNextLevel(int64 exp, bool send_packet) { + + exp_to_next_level = exp; + if (send_packet) { + LogWrite(GUILD__DEBUG, 1, "Guilds", "Guild XP to next level: %ul", exp_to_next_level); + SendGuildUpdate(); + save_needed = true; + } +} + +void Guild::SetRecruitingShortDesc(const char* new_desc, bool send_packet) { + + assert(new_desc); + + recruiting_short_desc = string(new_desc); + if (send_packet) { + LogWrite(GUILD__DEBUG, 1, "Guilds", "Set Guild Recruiting short desc:\n%s", recruiting_short_desc.c_str()); + SendGuildUpdate(); + recruiting_save_needed = true; + } +} + +void Guild::SetRecruitingFullDesc(const char* new_desc, bool send_packet) { + + assert(new_desc); + + recruiting_full_desc = string(new_desc); + if (send_packet) { + LogWrite(GUILD__DEBUG, 1, "Guilds", "Set Guild Recruiting full desc:\n%s", recruiting_full_desc.c_str()); + SendGuildUpdate(); + recruiting_save_needed = true; + } +} + +void Guild::SetRecruitingMinLevel(int8 new_level, bool send_packet) { + + recruiting_min_level = new_level; + if (send_packet) { + LogWrite(GUILD__DEBUG, 1, "Guilds", "Set Guild Recruiting min_level: %i", recruiting_min_level); + SendGuildUpdate(); + recruiting_save_needed = true; + } +} + +void Guild::SetRecruitingPlayStyle(int8 new_play_style, bool send_packet) { + + recruiting_play_style = new_play_style; + if (send_packet) { + LogWrite(GUILD__DEBUG, 1, "Guilds", "Set Guild Recruiting play style: %i", recruiting_play_style); + SendGuildUpdate(); + recruiting_save_needed = true; + } +} + +bool Guild::SetRecruitingDescTag(int8 index, int8 tag, bool send_packet) { + + bool ret = false; + if (index <= 3) { + recruiting_desc_tags.Put(index, tag); + ret = true; + } + if (ret && send_packet) { + LogWrite(GUILD__DEBUG, 1, "Guilds", "Set Guild Recruiting descriptive tag index: %i, tag: %i", index, tag); + SendGuildUpdate(); + recruiting_save_needed = true; + } + return ret; +} + +int8 Guild::GetRecruitingDescTag(int8 index) { + + int8 ret = 0; + if (index <= 3) + ret = recruiting_desc_tags.Get(index); + LogWrite(GUILD__DEBUG, 1, "Guilds", "Get Guild Recruiting descriptive tag index: %i, value: %i", index, ret); + return ret; +} + +bool Guild::SetPermission(int8 rank, int8 permission, int8 value, bool send_packet) { + + bool ret = false; + if (value == 0 || value == 1) { + if (permissions.count(rank) == 0) + permissions.Put(rank, new MutexMap); + permissions.Get(rank)->Put(permission, value); + ret = true; + } + if (ret && send_packet) { + LogWrite(GUILD__DEBUG, 1, "Guilds", "Set Guild Permissions - Rank: %i, Permission: %i, Value: %i", rank, permission, value); + SendGuildUpdate(); + ranks_save_needed = true; + } + return ret; +} + +int8 Guild::GetPermission(int8 rank, int8 permission) { + + int8 ret = 0; + if (permissions.count(rank) > 0 && permissions.Get(rank)->count(permission) > 0) + ret = permissions.Get(rank)->Get(permission); + LogWrite(GUILD__DEBUG, 1, "Guilds", "Get Guild Permissions - Rank: %i, Permission: %i, Value: %i", rank, permission, ret); + return ret; +} + +bool Guild::SetEventFilter(int8 event_id, int8 category, int8 value, bool send_packet) { + + bool ret = false; + if ((category == GUILD_EVENT_FILTER_CATEGORY_RETAIN_HISTORY || category == GUILD_EVENT_FILTER_CATEGORY_BROADCAST) && (value == 0 || value == 1)) { + if (event_filters.count(event_id) == 0) + event_filters.Put(event_id, new MutexMap); + event_filters.Get(event_id)->Put(category, value); + ret = true; + } + if (ret && send_packet) { + LogWrite(GUILD__DEBUG, 1, "Guilds", "Set Guild Event Filter - EventID: %i, Category: %i, Value: %i", event_id, category, value); + SendGuildUpdate(); + event_filters_save_needed = true; + } + return ret; +} + +int8 Guild::GetEventFilter(int8 event_id, int8 category) { + + int8 ret = 0; + if (event_filters.count(event_id) > 0 && event_filters.Get(event_id)->count(category) > 0) { + ret = event_filters.Get(event_id)->Get(category); + LogWrite(GUILD__DEBUG, 1, "Guilds", "Get Guild Event Filter - EventID: %i, Category: %i, Value: %i", event_id, category, ret); + } + return ret; +} + +int32 Guild::GetNumUniqueAccounts() { + + map::iterator itr; + map accounts; + + mMembers.readlock(__FUNCTION__, __LINE__); + if (members.size() > 0) { + for (itr = members.begin(); itr != members.end(); itr++) { + if (accounts.count(itr->second->account_id) == 0) + accounts[itr->second->account_id] = true; + } + } + mMembers.releasereadlock(__FUNCTION__, __LINE__); + LogWrite(GUILD__DEBUG, 1, "Guilds", "Found %i Unique Account(s) in Guild", accounts.size()); + return accounts.size(); +} + +int32 Guild::GetNumRecruiters() { + + map::iterator itr; + int32 ret = 0; + + mMembers.readlock(__FUNCTION__, __LINE__); + for (itr = members.begin(); itr != members.end(); itr++) { + if (itr->second->recruiter_id > 0 && (itr->second->member_flags & GUILD_MEMBER_FLAGS_RECRUITING_FOR_GUILD)) + ret++; + } + mMembers.releasereadlock(__FUNCTION__, __LINE__); + LogWrite(GUILD__DEBUG, 1, "Guilds", "Found %i Recruiter(s) in Guild", ret); + return ret; +} + +int32 Guild::GetNextRecruiterID() { + + map::iterator itr; + map tmp; + int32 i, ret = 0; + + mMembers.readlock(__FUNCTION__, __LINE__); + for (itr = members.begin(); itr != members.end(); itr++) { + if (itr->second->recruiter_id > 0) + tmp[itr->second->recruiter_id] = true; + } + for (i = 1; i < 0xFFFFFFFF; i++) { + if (tmp.count(i) == 0) { + ret = i; + break; + } + } + mMembers.releasereadlock(__FUNCTION__, __LINE__); + LogWrite(GUILD__DEBUG, 1, "Guilds", "Next Guild Recruiter ID: %i", ret); + return ret; +} + +int64 Guild::GetNextEventID() { + + GuildEvent *ge; + int64 ret = 1; + + if (guild_events.size() > 0) { + ge = guild_events.front(); + ret = ge->event_id + 1; + } + LogWrite(GUILD__DEBUG, 1, "Guilds", "Next Guild Event ID: %i", ret); + return ret; +} + +GuildMember * Guild::GetGuildMemberOnline(Client *client) { + + map::iterator itr; + GuildMember *ret = 0; + + assert(client); + + mMembers.readlock(__FUNCTION__, __LINE__); + for (itr = members.begin(); itr != members.end(); itr++) { + if (itr->second->character_id == client->GetCharacterID()) { + ret = itr->second; + break; + } + } + mMembers.releasereadlock(__FUNCTION__, __LINE__); + LogWrite(GUILD__DEBUG, 3, "Guilds", "Guild Member Online: %s", ret->name); + return ret; +} + +GuildMember * Guild::GetGuildMember(Player *player) { + + assert(player); + LogWrite(MISC__TODO, 1, "TODO", "Figure out how to log this in %s: %i", __FUNCTION__, __LINE__); + return GetGuildMember(player->GetCharacterID()); +} + +GuildMember * Guild::GetGuildMember(int32 character_id) { + + GuildMember *ret = 0; + + mMembers.readlock(__FUNCTION__, __LINE__); + if (members.count(character_id) > 0) + ret = members[character_id]; + mMembers.releasereadlock(__FUNCTION__, __LINE__); + LogWrite(GUILD__DEBUG, 1, "Guilds", "%s: %i", __FUNCTION__, character_id); + return ret; +} + +GuildMember * Guild::GetGuildMember(const char *player_name) { + + map::iterator itr; + GuildMember *ret = 0; + + assert(player_name); + + mMembers.readlock(__FUNCTION__, __LINE__); + for (itr = members.begin(); itr != members.end(); itr++) { + if (!strncmp(player_name, itr->second->name, sizeof(itr->second->name))) { + ret = itr->second; + break; + } + } + mMembers.releasereadlock(__FUNCTION__, __LINE__); + LogWrite(GUILD__DEBUG, 1, "Guilds", "%s: %s", __FUNCTION__, player_name); + return ret; +} + +vector * Guild::GetGuildRecruiters() { + + map::iterator itr; + vector *ret = 0; + + mMembers.readlock(__FUNCTION__, __LINE__); + for (itr = members.begin(); itr != members.end(); itr++) { + if (itr->second->recruiter_id > 0 && (itr->second->member_flags & GUILD_MEMBER_FLAGS_RECRUITING_FOR_GUILD)) { + if (!ret) + ret = new vector; + ret->push_back(itr->second); + LogWrite(GUILD__DEBUG, 1, "Guilds", "Get Guild Recruiter '%s' (%i)", itr->second->name, itr->second->recruiter_id); + } + } + mMembers.releasereadlock(__FUNCTION__, __LINE__); + + return ret; +} + +GuildEvent * Guild::GetGuildEvent(int64 event_id) { + + deque::iterator itr; + GuildEvent* ret = 0; + + for (itr = guild_events.begin(); itr != guild_events.end(); itr++) { + if ((*itr)->event_id == event_id) { + ret = *itr; + break; + } + } + LogWrite(GUILD__DEBUG, 1, "Guilds", "Get Guild Event: %s (%lli)", ret->description.c_str(), ret->event_id); + return ret; +} + +bool Guild::SetRankName(int8 rank, const char *name, bool send_packet) { + + assert(name); + + ranks.Put(rank, string(name)); + + if (send_packet) { + LogWrite(GUILD__DEBUG, 0, "Guilds", "Set Guild Rank Name: %s (%i)", name, rank); + SendGuildUpdate(); + ranks_save_needed = true; + } + return true; +} + +const char * Guild::GetRankName(int8 rank) { + + if (ranks.count(rank) > 0) { + LogWrite(GUILD__DEBUG, 0, "Guilds", "Get Guild Rank Name: %s (%i)", ranks.Get(rank).c_str(), rank); + return ranks.Get(rank).c_str(); + } + return 0; +} + +bool Guild::SetRecruitingFlag(int8 flag, int8 value, bool send_packet) { + + bool ret = false; + + if (recruiting_flags.count(flag) > 0 && (value == 0 || value == 1)) { + recruiting_flags.Put(flag, value); + ret = true; + } + if (ret && send_packet) { + LogWrite(GUILD__DEBUG, 0, "Guilds", "Set Guild Recruiting Flag: %i, Value: %i", flag, value); + SendGuildUpdate(); + recruiting_save_needed = true; + } + return ret; +} + +int8 Guild::GetRecruitingFlag(int8 flag) { + + int8 value = 0; + if (recruiting_flags.count(flag) > 0) + value = recruiting_flags.Get(flag); + LogWrite(GUILD__DEBUG, 0, "Guilds", "Get Guild Recruiting Flag: %i, Value: %i", flag, value); + return value; +} + +bool Guild::SetGuildRecruiter(Client* client, const char* name, bool value, bool send_packet) { + + GuildMember *gm; + const char *awarder_name; + + assert(client); + assert(name); + + if (!(gm = GetGuildMember(name))) + return false; + + awarder_name = client->GetPlayer()->GetName(); + if (value) { + gm->recruiter_id = GetNextRecruiterID(); + AddNewGuildEvent(GUILD_EVENT_BECOMES_RECRUITER, "%s awarded %s Guild Recruiting Permission.", Timer::GetUnixTimeStamp(), true, awarder_name, name); + SendMessageToGuild(GUILD_EVENT_BECOMES_RECRUITER, "%s awarded %s Guild Recruiting Permission.", awarder_name, name); + LogWrite(GUILD__DEBUG, 0, "Guilds", "%s makes %s a guild recruiter.", awarder_name, name); + } + else { + gm->recruiter_id = 0; + AddNewGuildEvent(GUILD_EVENT_NO_LONGER_RECRUITER, "%s revoked %s's Guild Recruiting Permission.", Timer::GetUnixTimeStamp(), true, awarder_name, name); + SendMessageToGuild(GUILD_EVENT_NO_LONGER_RECRUITER, "%s revoked %s's Guild Recruiting Permission.", awarder_name, name); + LogWrite(GUILD__DEBUG, 0, "Guilds", "%s removes %s from guild recruiters.", awarder_name, name); + } + + if (send_packet) { + SendGuildMember(gm); + member_save_needed = true; + } + + return true; +} + +bool Guild::SetGuildRecruiterDescription(Client *client, const char *description, bool send_packet) { + + GuildMember *gm; + + assert(client); + assert(description); + + if (!(gm = GetGuildMember(client->GetPlayer()))) + return false; + + gm->recruiter_description = string(description); + + if (send_packet) { + LogWrite(GUILD__DEBUG, 0, "Guilds", "Set guild recruiter description:\n%s", gm->recruiter_description.c_str()); + SendGuildRecruiterInfo(client, client->GetPlayer()); + member_save_needed = true; + } + + return true; +} + +bool Guild::ToggleGuildRecruiterAdventureClass(Client *client, bool send_packet) { + + GuildMember *gm; + + assert(client); + + if (!(gm = GetGuildMember(client->GetPlayer()))) + return false; + + gm->recruiting_show_adventure_class = (gm->recruiting_show_adventure_class == 0 ? 1 : 0); + + if (send_packet) { + LogWrite(GUILD__DEBUG, 0, "Guilds", "Toggle guild recruiter adventure class = %i", gm->recruiting_show_adventure_class); + SendGuildRecruiterInfo(client, client->GetPlayer()); + } + + return true; +} + +bool Guild::SetGuildMemberNote(const char *name, const char *note, bool send_packet) { + + GuildMember *gm; + + assert(name); + assert(note); + + if (!(gm = GetGuildMember(name))) + return false; + + gm->note = string(note); + + if (send_packet) { + LogWrite(GUILD__DEBUG, 0, "Guilds", "Set guild member note:\n%s", gm->note.c_str()); + SendGuildMember(gm); + member_save_needed = true; + } + + return true; +} + +bool Guild::SetGuildOfficerNote(const char *name, const char *note, bool send_packet) { + + GuildMember *gm; + + assert(name); + assert(note); + + if (!(gm = GetGuildMember(name))) + return false; + + gm->officer_note = string(note); + + if (send_packet) { + LogWrite(GUILD__DEBUG, 0, "Guilds", "Set guild officer note:\n%s", gm->officer_note.c_str()); + SendGuildMember(gm); + member_save_needed = true; + } + + return true; +} + +bool Guild::AddNewGuildMember(Client *client, const char *invited_by, int8 rank) { + + Player *player; + GuildMember *gm; + + assert(client); + + player = client->GetPlayer(); + assert(player); + + if (members.count(player->GetCharacterID()) == 0 && !player->GetGuild()) { + gm = new GuildMember; + + gm->account_id = player->GetZone()->GetClientBySpawn(player)->GetAccountID(); + gm->character_id = player->GetCharacterID(); + strncpy(gm->name, player->GetName(), sizeof(gm->name)); + gm->guild_status = 0; + gm->points = 0.0; + gm->adventure_class = player->GetAdventureClass(); + gm->adventure_level = player->GetLevel(); + gm->tradeskill_class = player->GetTradeskillClass(); + gm->tradeskill_level = player->GetTSLevel(); + gm->rank = rank; + gm->zone = string(player->GetZone()->GetZoneDescription()); + gm->join_date = Timer::GetUnixTimeStamp(); + gm->last_login_date = gm->join_date; + gm->recruiter_id = 0; + gm->member_flags = GUILD_MEMBER_FLAGS_NOTIFY_LOGINS; + gm->recruiting_show_adventure_class = 1; + gm->recruiter_picture_data_size = 0; + gm->recruiter_picture_data = 0; + mMembers.writelock(__FUNCTION__, __LINE__); + members[player->GetCharacterID()] = gm; + mMembers.releasewritelock(__FUNCTION__, __LINE__); + player->SetGuild(this); + string subtitle; + subtitle.append("<").append(GetName()).append(">"); + player->SetSubTitle(subtitle.c_str()); + + if (invited_by) + client->SimpleMessage(CHANNEL_COLOR_WHITE, "You accept the invite into the guild."); + else { + client->SimpleMessage(CHANNEL_COLOR_WHITE, "You have formed the guild."); + LogWrite(GUILD__DEBUG, 0, "Guilds", "New Guild formed: %s", GetName()); + } + + client->PlaySound("ui_joined"); + SendGuildUpdate(client); + SendGuildMember(gm); + SendGuildMOTD(client); + SendGuildEventList(client); + SendGuildBankEventList(client); + SendAllGuildEvents(client); + SendGuildMemberList(client); + client->GetCurrentZone()->SendUpdateTitles(client->GetPlayer()); + + if (invited_by) { + AddNewGuildEvent(GUILD_EVENT_MEMBER_JOINS, "%s has accepted %s's invitation to join %s.", Timer::GetUnixTimeStamp(), true, player->GetName(), invited_by, GetName()); + SendMessageToGuild(GUILD_EVENT_MEMBER_JOINS, "%s has accepted %s's invitation to join %s.", player->GetName(), invited_by, GetName()); + LogWrite(GUILD__DEBUG, 0, "Guilds", "%s invited %s to join guild: %s", invited_by, player->GetName(), GetName()); + } + + member_save_needed = true; + } + + return true; +} + +bool Guild::AddGuildMember(GuildMember *guild_member) { + + assert(guild_member); + + mMembers.writelock(__FUNCTION__, __LINE__); + assert(members.count(guild_member->character_id) == 0); + members[guild_member->character_id] = guild_member; + mMembers.releasewritelock(__FUNCTION__, __LINE__); + + // spammy + LogWrite(GUILD__DEBUG, 5, "Guilds", "Added Player: %s (%i) to Guild: %s", guild_member->name, guild_member->character_id, GetName()); + + return true; +} + +void Guild::RemoveGuildMember(int32 character_id, bool send_packet) { + GuildMember *gm = 0; + Client *client; + + mMembers.writelock(__FUNCTION__, __LINE__); + if (members.count(character_id) > 0) { + gm = members[character_id]; + members.erase(gm->character_id); + } + mMembers.releasewritelock(__FUNCTION__, __LINE__); + + if (gm) { + LogWrite(GUILD__DEBUG, 0, "Guilds", "Remove Player: %s (%i) from Guild: %s", members[character_id]->name, character_id, GetName()); + + if ((client = zone_list.GetClientByCharID(character_id))) { + client->GetPlayer()->SetGuild(0); + client->GetPlayer()->SetSubTitle(""); + client->GetCurrentZone()->SendUpdateTitles(client->GetPlayer()); + client->SimpleMessage(CHANNEL_COLOR_YELLOW, "You were removed from the guild."); + } + + database.DeleteGuildMember(this, gm->character_id); + + if (send_packet) { + SendGuildMemberLeave(gm->character_id); + SendGuildUpdate(); + SendGuildMemberList(); + } + + AddNewGuildEvent(GUILD_EVENT_MEMBER_LEAVES, "%s left the guild.", Timer::GetUnixTimeStamp(), true, gm->name); + SendMessageToGuild(GUILD_EVENT_MEMBER_LEAVES, "%s left the guild.", gm->name); + + safe_delete_array(gm->recruiter_picture_data); + safe_delete(gm); + } +} + +void Guild::RemoveAllGuildMembers() { + map::iterator itr; + Client *client; + + mMembers.writelock(__FUNCTION__, __LINE__); + for (itr = members.begin(); itr != members.end(); itr++) { + if ((client = zone_list.GetClientByCharID(itr->second->character_id))) { + client->GetPlayer()->SetGuild(0); + client->GetPlayer()->SetSubTitle(""); + } + safe_delete(itr->second); + } + members.clear(); + mMembers.releasewritelock(__FUNCTION__, __LINE__); + + LogWrite(GUILD__DEBUG, 0, "Guilds", "Removed ALL members from Guild: %s", GetName()); + +} + +bool Guild::DemoteGuildMember(Client *client, const char *name, bool send_packet) { + + GuildMember *gm; + const char *demoter_name; + bool ret = false; + + assert(client); + assert(name); + + mMembers.readlock(__FUNCTION__, __LINE__); + if ((gm = GetGuildMember(name)) && gm->rank != GUILD_RANK_RECRUIT) { + demoter_name = client->GetPlayer()->GetName(); + gm->rank++; + + AddNewGuildEvent(GUILD_EVENT_MEMBER_DEMOTED, "%s has demoted %s to %s.", Timer::GetUnixTimeStamp(), true, demoter_name, name, ranks.Get(gm->rank).c_str()); + SendMessageToGuild(GUILD_EVENT_MEMBER_DEMOTED, "%s has demoted %s to %s.", demoter_name, name, ranks.Get(gm->rank).c_str()); + LogWrite(GUILD__DEBUG, 0, "Guilds", "%s demoted %s to %s in Guild: %s", demoter_name, name, ranks.Get(gm->rank).c_str(), GetName()); + + ret = true; + + if (send_packet) { + SendGuildMember(gm); + SendGuildMemberList(); + member_save_needed = true; + } + } + mMembers.releasereadlock(__FUNCTION__, __LINE__); + + return ret; +} + +bool Guild::PromoteGuildMember(Client *client, const char *name, bool send_packet) { + + GuildMember *gm; + const char *promoter_name; + bool ret = false; + + assert(client); + assert(name); + + mMembers.readlock(__FUNCTION__, __LINE__); + if ((gm = GetGuildMember(name)) && gm->rank != GUILD_RANK_LEADER) { + promoter_name = client->GetPlayer()->GetName(); + gm->rank--; + + AddNewGuildEvent(GUILD_EVENT_MEMBER_PROMOTED, "%s has promoted %s to %s.", Timer::GetUnixTimeStamp(), true, promoter_name, name, ranks.Get(gm->rank).c_str()); + SendMessageToGuild(GUILD_EVENT_MEMBER_PROMOTED, "%s has promoted %s to %s.", promoter_name, name, ranks.Get(gm->rank).c_str()); + LogWrite(GUILD__DEBUG, 0, "Guilds", "%s promoted %s to %s in Guild: %s", promoter_name, name, ranks.Get(gm->rank).c_str(), GetName()); + + if (send_packet) { + SendGuildMember(gm); + SendGuildMemberList(); + member_save_needed = true; + } + } + mMembers.releasereadlock(__FUNCTION__, __LINE__); + + return ret; +} + +bool Guild::KickGuildMember(Client *client, const char *name, bool send_packet) { + + GuildMember *gm; + Client *kicked_client; + const char *kicker_name; + + assert(client); + assert(name); + + if (!(gm = GetGuildMember(name))) + return false; + + kicker_name = client->GetPlayer()->GetName(); + + if (!strncmp(kicker_name, gm->name, sizeof(gm->name))) { + AddNewGuildEvent(GUILD_EVENT_MEMBER_LEAVES, "%s left the guild.", Timer::GetUnixTimeStamp(), true, gm->name); + SendMessageToGuild(GUILD_EVENT_MEMBER_LEAVES, "%s left the guild.", gm->name); + LogWrite(GUILD__DEBUG, 0, "Guilds", "Player: %s has left guild: %s", gm->name, GetName()); + } + else { + AddNewGuildEvent(GUILD_EVENT_MEMBER_LEAVES, "%s kicked %s from the guild.", Timer::GetUnixTimeStamp(), true, kicker_name, gm->name); + SendMessageToGuild(GUILD_EVENT_MEMBER_LEAVES, "%s kicked %s from the guild.", kicker_name, gm->name); + LogWrite(GUILD__DEBUG, 0, "Guilds", "Player: %s was kicked from guild: %s by %s.", gm->name, GetName(), kicker_name); + } + + if ((kicked_client = zone_list.GetClientByCharID(gm->character_id))) { + kicked_client->GetPlayer()->SetGuild(0); + kicked_client->GetPlayer()->SetSubTitle(""); + if (!strncmp(client->GetPlayer()->GetName(), gm->name, sizeof(gm->name))) + kicked_client->SimpleMessage(CHANNEL_COLOR_YELLOW, "You left the guild."); + else + kicked_client->Message(CHANNEL_COLOR_YELLOW, "You were kicked from the guild by %s.", kicker_name); + } + + mMembers.writelock(__FUNCTION__, __LINE__); + members.erase(gm->character_id); + mMembers.releasewritelock(__FUNCTION__, __LINE__); + + database.DeleteGuildMember(this, gm->character_id); + + if (send_packet) { + SendGuildMemberLeave(gm->character_id); + SendGuildUpdate(); + SendGuildMemberList(); + } + + safe_delete_array(gm->recruiter_picture_data); + safe_delete(gm); + + return true; +} + +bool Guild::InvitePlayer(Client *client, const char *name, bool send_packet) { + + Client *client_invite; + Player *player_invite; + PacketStruct *packet; + + assert(client); + assert(name); + + if (!(client_invite = zone_list.GetClientByCharName(string(name)))) { + client->Message(CHANNEL_COLOR_WHITE, "%s couldn't be found.", name); + LogWrite(GUILD__WARNING, 0, "Guilds", "Attempted to invite %s to guild %s: Player Not Found", name, GetName()); + return false; + } + + player_invite = client_invite->GetPlayer(); + + if (player_invite->GetGuild()) { + client->Message(CHANNEL_COLOR_WHITE, "%s is already in a guild.", player_invite->GetName()); + LogWrite(GUILD__WARNING, 0, "Guilds", "Attempted to invite %s to guild %s: Already in a guild", player_invite->GetName(), GetName()); + return false; + } + + if (client_invite->GetPendingGuildInvite()->guild) { + client->Message(CHANNEL_COLOR_WHITE, "%s is already considering joining a guild.", player_invite->GetName()); + LogWrite(GUILD__WARNING, 0, "Guilds", "Attempted to invite %s to guild %s: Pending Invite elsewhere", player_invite->GetName(), GetName()); + return false; + } + + if (!(packet = configReader.getStruct("WS_ReceiveOffer", client_invite->GetVersion()))) + return false; + + packet->setDataByName("type", 2); + packet->setMediumStringByName("name", client->GetPlayer()->GetName()); + packet->setDataByName("unknown2", 1); + packet->setMediumStringByName("guild_name", GetName()); + client_invite->QueuePacket(packet->serialize()); + + client->Message(CHANNEL_COLOR_WHITE, "You have invited %s to join %s.", player_invite->GetName(), GetName()); + LogWrite(GUILD__DEBUG, 0, "Guilds", "%s invited %s to guild %s", client->GetPlayer()->GetName(), player_invite->GetName(), GetName()); + + client_invite->SetPendingGuildInvite(this, client->GetPlayer()); + + safe_delete(packet); + return true; +} + +bool Guild::AddPointsToAll(Client *client, float points, const char *comment, bool send_packet) { + + map::iterator itr; + vector character_ids; + GuildMember *gm; + Client *client_to; + + assert(client); + + mMembers.readlock(__FUNCTION__, __LINE__); + for (itr = members.begin(); itr != members.end(); itr++) { + gm = itr->second; + + if (!permissions.Get(gm->rank)->Get(GUILD_PERMISSIONS_RECEIVE_POINTS)) { + LogWrite(GUILD__DEBUG, 0, "Guilds", "PlayerID: %i not allowed to receive points! Skipping...", gm->character_id); + continue; + } + + gm->points += points; + character_ids.push_back(gm->character_id); + + AddPointHistory(gm, Timer::GetUnixTimeStamp(), client->GetPlayer()->GetName(), points, comment); + if ((client_to = zone_list.GetClientByCharID(gm->character_id))) + { + client_to->Message(CHANNEL_COLOR_GUILD_MSGS, "%s increased your guild member points by %.1f.", client->GetPlayer()->GetName(), points); + LogWrite(GUILD__DEBUG, 0, "Guilds", "Guild: %s", GetName()); + LogWrite(GUILD__DEBUG, 0, "Guilds", "\tAwarded By: %s +%.1f pts to Player: %s", client->GetPlayer()->GetName(), points, gm->name); + } + + LogWrite(MISC__TODO, 1, "TODO", "Comment that this is temporary?\n%s, %s, %i", __FILE__, __FUNCTION__, __LINE__); + SendGuildMember(gm); //tmp + } + mMembers.releasereadlock(__FUNCTION__, __LINE__); + + client->Message(CHANNEL_COLOR_GUILD_MSGS, "Points modified for %u guild members.", character_ids.size()); + if (send_packet) { + LogWrite(GUILD__DEBUG, 0, "Guilds", "%s modified points for %u members. Reason: %s", client->GetPlayer()->GetName(), character_ids.size(), points, comment); + SendGuildModification(points, &character_ids); + member_save_needed = true; + points_history_save_needed = true; + } + + return true; +} + +bool Guild::AddPointsToAllOnline(Client *client, float points, const char *comment, bool send_packet) { + + map::iterator itr; + vector character_ids; + GuildMember *gm; + Client *client_to; + + assert(client); + + mMembers.readlock(__FUNCTION__, __LINE__); + for (itr = members.begin(); itr != members.end(); itr++) { + gm = itr->second; + + if (!(client_to = zone_list.GetClientByCharID(gm->character_id))) { + LogWrite(GUILD__DEBUG, 0, "Guilds", "PlayerID: %i not online to receive points! Skipping...", gm->character_id); + continue; + } + + if (!permissions.Get(gm->rank)->Get(GUILD_PERMISSIONS_RECEIVE_POINTS)) { + LogWrite(GUILD__DEBUG, 0, "Guilds", "PlayerID: %i not allowed to receive points! Skipping...", gm->character_id); + continue; + } + + gm->points += points; + character_ids.push_back(gm->character_id); + + AddPointHistory(gm, Timer::GetUnixTimeStamp(), client->GetPlayer()->GetName(), points, comment); + client_to->Message(CHANNEL_COLOR_GUILD_MSGS, "%s increased your guild member points by %.1f.", client->GetPlayer()->GetName(), points); + LogWrite(GUILD__DEBUG, 0, "Guilds", "Guild: %s", GetName()); + LogWrite(GUILD__DEBUG, 0, "Guilds", "\tAwarded By: %s +%.1f pts to Player: %s", client->GetPlayer()->GetName(), points, gm->name); + + LogWrite(MISC__TODO, 1, "TODO", "Comment that this is temporary?\n%s, %s, %i", __FILE__, __FUNCTION__, __LINE__); + SendGuildMember(gm); //tmp + + } + mMembers.releasereadlock(__FUNCTION__, __LINE__); + + client->Message(CHANNEL_COLOR_GUILD_MSGS, "Points modified for %u guild members.", character_ids.size()); + if (send_packet) { + LogWrite(GUILD__DEBUG, 0, "Guilds", "%s modified points for %u members. Reason: %s", client->GetPlayer()->GetName(), character_ids.size(), points, comment); + SendGuildModification(points, &character_ids); + member_save_needed = true; + points_history_save_needed = true; + } + + return true; +} + +bool Guild::AddPointsToGroup(Client *client, float points, const char *comment, bool send_packet) { + + deque::iterator itr; + deque* group_members; + vector character_ids; + GroupMemberInfo *gmi; + GuildMember *gm; + + assert(client); + + if (!client->GetPlayer()->GetGroupMemberInfo()) { + client->SimpleMessage(CHANNEL_COLOR_GUILD_MSGS, "Cannot assign points because you aren't in a group."); + LogWrite(GUILD__DEBUG, 0, "Guilds", "%s tried to assign points for group and failed: Not in a group", client->GetPlayer()->GetName()); + return false; + } + + mMembers.readlock(__FUNCTION__, __LINE__); + world.GetGroupManager()->GroupLock(__FUNCTION__, __LINE__); + + group_members = world.GetGroupManager()->GetGroupMembers(client->GetPlayer()->GetGroupMemberInfo()->group_id); + for (itr = group_members->begin(); itr != group_members->end(); itr++) { + gmi = *itr; + + if (!gmi->client) + continue; + + if (gmi->client->GetPlayer()->GetGuild() != this) { + LogWrite(GUILD__DEBUG, 0, "Guilds", "PlayerID: %i not in guild to receive group points! Skipping...", gmi->client->GetPlayer()->GetCharacterID()); + continue; + } + + if (!(gm = members[gmi->client->GetCharacterID()]) || !permissions.Get(gm->rank)->Get(GUILD_PERMISSIONS_RECEIVE_POINTS)) { + LogWrite(GUILD__DEBUG, 0, "Guilds", "PlayerID: %i not allowed to receive points! Skipping...", gm->character_id); + continue; + } + + gm->points += points; + character_ids.push_back(gm->character_id); + + AddPointHistory(gm, Timer::GetUnixTimeStamp(), client->GetPlayer()->GetName(), points, comment); + gmi->client->Message(CHANNEL_COLOR_GUILD_MSGS, "%s increased your guild member points by %.1f.", client->GetPlayer()->GetName(), points); + LogWrite(GUILD__DEBUG, 0, "Guilds", "Guild: %s", GetName()); + LogWrite(GUILD__DEBUG, 0, "Guilds", "\tAwarded By: %s +%.1f pts to Player: %s", client->GetPlayer()->GetName(), points, gm->name); + + LogWrite(MISC__TODO, 1, "TODO", "Comment that this is temporary?\n%s, %s, %i", __FILE__, __FUNCTION__, __LINE__); + SendGuildMember(gm); //tmp + + } + + world.GetGroupManager()->ReleaseGroupLock(__FUNCTION__, __LINE__); + mMembers.releasereadlock(__FUNCTION__, __LINE__); + + client->Message(CHANNEL_COLOR_GUILD_MSGS, "Points modified for %u guild members.", character_ids.size()); + if (send_packet) { + LogWrite(GUILD__DEBUG, 0, "Guilds", "%s modified points for %u members. Reason: %s", client->GetPlayer()->GetName(), character_ids.size(), points, comment); + SendGuildModification(points, &character_ids); + member_save_needed = true; + points_history_save_needed = true; + } + + return true; +} + +bool Guild::AddPointsToRaid(Client *client, float points, const char *comment, bool send_packet) { + + assert(client); + LogWrite(MISC__TODO, 1, "TODO", "Implement Raiding\n%s, %s, %i", __FILE__, __FUNCTION__, __LINE__); + client->SimpleMessage(CHANNEL_COLOR_GUILD_MSGS, "Cannot assign points because you aren't in a raid."); + return false; +} + +bool Guild::AddPointsToGuildMember(Client *client, float points, const char *name, const char *comment, bool send_packet) { + + vector character_ids; + GuildMember *gm; + Client *client_to; + + assert(client); + assert(name); + + if (!(gm = GetGuildMember(name))) + return false; + + mMembers.readlock(__FUNCTION__, __LINE__); + if (!permissions.Get(gm->rank)->Get(GUILD_PERMISSIONS_RECEIVE_POINTS)) { + mMembers.releasereadlock(__FUNCTION__, __LINE__); + LogWrite(GUILD__DEBUG, 0, "Guilds", "PlayerID: %i not allowed to receive points! Skipping...", gm->character_id); + client->Message(CHANNEL_COLOR_GUILD_MSGS, "%s does not have permission to receive guild points.", gm->name); + return false; + } + + gm->points += points; + character_ids.push_back(gm->character_id); + + if ((client_to = zone_list.GetClientByCharID(gm->character_id))) { + client_to->Message(CHANNEL_COLOR_GUILD_MSGS, "%s increased your guild member points by %.1f.", client->GetPlayer()->GetName(), points); + LogWrite(GUILD__DEBUG, 0, "Guilds", "Guild: %s", GetName()); + LogWrite(GUILD__DEBUG, 0, "Guilds", "\tAwarded By: %s +%.1f pts to Player: %s", client->GetPlayer()->GetName(), points, gm->name); + } + + LogWrite(GUILD__DEBUG, 0, "Guilds", "%s modified points for 1 guild member. Reason: %s", client->GetPlayer()->GetName(), comment); + client->SimpleMessage(CHANNEL_COLOR_GUILD_MSGS, "Points modified for 1 guild member."); + AddPointHistory(gm, Timer::GetUnixTimeStamp(), client->GetPlayer()->GetName(), points, comment); + + if (send_packet) { + + LogWrite(MISC__TODO, 1, "TODO", "Comment that this is temporary?\n%s, %s, %i", __FILE__, __FUNCTION__, __LINE__); + SendGuildMember(gm); //tmp + + SendGuildModification(points, &character_ids); + member_save_needed = true; + points_history_save_needed = true; + } + mMembers.releasereadlock(__FUNCTION__, __LINE__); + + return true; +} + +bool Guild::AddPointHistory(GuildMember *guild_member, int32 date, const char *modified_by, float points, const char *comment, bool new_point_history) { + + LogWrite(MISC__TODO, 1, "TODO", "JA: decide to put logging here rather than in all AddPoints functions\n%s, %s, %i", __FILE__, __FUNCTION__, __LINE__); + + PointHistory *ph, *ph_delete; + deque *ph_list; + + assert(guild_member); + assert(modified_by); + + ph = new PointHistory; + ph->date = date; + ph->modified_by = string(modified_by); + ph->points = points; + if (comment) + ph->comment = string(comment); + ph->saved_needed = new_point_history; + + mMembers.readlock(__FUNCTION__, __LINE__); + ph_list = &guild_member->point_history; + if (ph_list->size() == GUILD_MAX_POINT_HISTORY) { + ph_delete = ph_list->back(); + database.DeleteGuildPointHistory(this, guild_member->character_id, ph_delete); + safe_delete(ph_delete); + ph_list->pop_back(); + } + + ph_list->push_front(ph); + mMembers.releasereadlock(__FUNCTION__, __LINE__); + + return true; +} + +void Guild::ViewGuildMemberPoints(Client *client, const char * name) { + + deque *ph_list; + deque::iterator itr; + PointHistory *ph; + GuildMember *gm; + PacketStruct *packet; + int32 i; + + assert(client); + assert(name); + + if (!(gm = GetGuildMember(name))) + return; + + if (!(packet = configReader.getStruct("WS_RequestGuildEventDetails", client->GetVersion()))) + return; + + mMembers.readlock(__FUNCTION__, __LINE__); + ph_list = &gm->point_history; + i = 0; + + packet->setDataByName("account_id", client->GetAccountID()); + packet->setDataByName("character_id", client->GetCharacterID()); + packet->setDataByName("guild_id", id); + packet->setArrayLengthByName("num_events", ph_list->size()); + + // this log entry may be excessive... test it out. + LogWrite(GUILD__DEBUG, 0, "Guilds", "account_id: %i, character_id: %i, guild_id: %i, num_events: %i", client->GetAccountID(), client->GetCharacterID(), id, ph_list->size()); + + for (itr = ph_list->begin(); itr != ph_list->end(); itr++) { + ph = *itr; + packet->setArrayDataByName("date", ph->date, i); + packet->setArrayDataByName("modified_by", ph->modified_by.c_str(), i); + packet->setArrayDataByName("comment", ph->comment.c_str(), i); + packet->setArrayDataByName("points", ph->points, i); + // this log entry may be excessive... test it out. + LogWrite(GUILD__DEBUG, 0, "Guilds", "date: %i, modified_by: %i, comment: %i, points: %.1f", ph->date, ph->modified_by.c_str(), ph->comment.c_str(), ph->points); + i++; + } + mMembers.releasereadlock(__FUNCTION__, __LINE__); + //DumpPacket(packet->serialize()); + + client->QueuePacket(packet->serialize()); + safe_delete(packet); +} + +bool Guild::ChangeMemberFlag(Client *client, int8 member_flag, int8 value, bool send_packet) { + + GuildMember *gm; + bool ret = false; + + assert (client); + + if (!(gm = GetGuildMemberOnline(client))) + return false; + + mMembers.readlock(__FUNCTION__, __LINE__); + switch (member_flag) { + case GUILD_MEMBER_FLAGS_RECRUITING_FOR_GUILD: { + if (value > 0 && !(gm->member_flags & GUILD_MEMBER_FLAGS_RECRUITING_FOR_GUILD)) { + gm->member_flags += GUILD_MEMBER_FLAGS_RECRUITING_FOR_GUILD; + ret = true; + } + else if (value == 0 && gm->member_flags & GUILD_MEMBER_FLAGS_RECRUITING_FOR_GUILD) { + gm->member_flags -= GUILD_MEMBER_FLAGS_RECRUITING_FOR_GUILD; + ret = true; + } + break; + } + case GUILD_MEMBER_FLAGS_NOTIFY_LOGINS: { + if (value > 0 && !(gm->member_flags & GUILD_MEMBER_FLAGS_NOTIFY_LOGINS)) { + gm->member_flags += GUILD_MEMBER_FLAGS_NOTIFY_LOGINS; + client->SimpleMessage(CHANNEL_COLOR_GUILD_MSGS, "Guild online notifications are now enabled."); + ret = true; + } + else if (value == 0 && gm->member_flags & GUILD_MEMBER_FLAGS_NOTIFY_LOGINS) { + gm->member_flags -= GUILD_MEMBER_FLAGS_NOTIFY_LOGINS; + client->SimpleMessage(CHANNEL_COLOR_GUILD_MSGS, "Guild online notifications are now disabled."); + ret = true; + } + break; + } + case GUILD_MEMBER_FLAGS_DONT_GENERATE_EVENTS: { + if (value > 1 && !(gm->member_flags & GUILD_MEMBER_FLAGS_DONT_GENERATE_EVENTS)) { + gm->member_flags += GUILD_MEMBER_FLAGS_DONT_GENERATE_EVENTS; + client->SimpleMessage(CHANNEL_COLOR_GUILD_MSGS, "Guild events are now disabled for this character."); + ret = true; + } + else if (value == 0 && gm->member_flags & GUILD_MEMBER_FLAGS_DONT_GENERATE_EVENTS) { + gm->member_flags -= GUILD_MEMBER_FLAGS_DONT_GENERATE_EVENTS; + client->SimpleMessage(CHANNEL_COLOR_GUILD_MSGS, "Guild events are now enabled for this character."); + ret = true; + } + break; + } + default: + break; + } + + if (ret && send_packet) { + LogWrite(GUILD__DEBUG, 0, "Guilds", "Guild Member Flag '%i' changed to %i", member_flag, value); + member_save_needed = true; + SendGuildMember(client, gm); + } + mMembers.releasereadlock(__FUNCTION__, __LINE__); + + return ret; +} +bool Guild::UpdateGuildStatus(Player *player ,int32 Status) { + GuildMember *gm; + assert(player); + assert(members.count(player->GetCharacterID()) > 0); + mMembers.readlock(__FUNCTION__, __LINE__); + gm = members[player->GetCharacterID()]; + gm->guild_status += Status; + mMembers.releasereadlock(__FUNCTION__, __LINE__); + member_save_needed = true; + return true; +} +bool Guild::UpdateGuildMemberInfo(Player *player) { + + GuildMember *gm; + + assert(player); + assert(members.count(player->GetCharacterID()) > 0); + + LogWrite(GUILD__DEBUG, 0, "Guilds", "Updating Guild Member Info for Player: %i", player->GetCharacterID()); + + mMembers.readlock(__FUNCTION__, __LINE__); + gm = members[player->GetCharacterID()]; + gm->adventure_class = player->GetAdventureClass(); + gm->adventure_level = player->GetLevel(); + gm->tradeskill_class = player->GetTradeskillClass(); + gm->tradeskill_level = player->GetTSLevel(); + gm->zone = string(player->GetZone()->GetZoneDescription()); + gm->last_login_date = database.GetCharacterTimeStamp(player->GetCharacterID()); + mMembers.releasereadlock(__FUNCTION__, __LINE__); + + return true; +} + +void Guild::AddGuildEvent(int64 event_id, int32 type, const char *description, int32 date, int8 locked) { + + LogWrite(GUILD__DEBUG, 3, "Guilds", "Guild: %s", GetName()); + LogWrite(GUILD__DEBUG, 3, "Guilds", "Add Guild Event: %lli, %i, %s", event_id, type, string(description).c_str()); + + GuildEvent *ge; + + assert(description); + assert(event_filters.Get(type)->Get(GUILD_EVENT_FILTER_CATEGORY_RETAIN_HISTORY)); + assert(guild_events.size() < GUILD_MAX_EVENTS); + + ge = new GuildEvent; + ge->event_id = event_id; + ge->type = type; + ge->description = string(description); + ge->date = date; + ge->locked = locked; + ge->save_needed = false; + guild_events.push_back(ge); +} + +void Guild::AddNewGuildEvent(int32 type, const char *description, int32 date, bool send_packet, ...) { + + deque::reverse_iterator itr; + GuildEvent *ge, *current_ge; + char buffer[4096]; + va_list argptr; + + assert(description); + + va_start(argptr, send_packet); + vsnprintf(buffer, sizeof(buffer), description, argptr); + va_end(argptr); + + ge = new GuildEvent; + ge->event_id = GetNextEventID(); + ge->type = type; + ge->description = string(buffer); + ge->date = date; + ge->locked = 0; + + if (!event_filters.Get(type)->Get(GUILD_EVENT_FILTER_CATEGORY_RETAIN_HISTORY)) { + database.SaveHiddenGuildEvent(this, ge); + return; + } + + if (guild_events.size() == GUILD_MAX_EVENTS) { + for (itr = guild_events.rbegin(); itr != guild_events.rend(); itr++) { + current_ge = *itr; + + if (current_ge->locked == 0) { + database.ArchiveGuildEvent(this, current_ge); + safe_delete(current_ge); + guild_events.erase(--itr.base()); + guild_events.push_front(ge); + break; + } + } + } + else + guild_events.push_front(ge); + + if (send_packet) { + LogWrite(GUILD__DEBUG, 0, "Guilds", "Some Add New Guild Event thing happened, not sure what..."); + SendNewGuildEvent(ge); + ge->save_needed = true; + events_save_needed = true; + } +} + +bool Guild::LockGuildEvent(int64 event_id, bool lock, bool send_packet) { + + bool ret = false; + GuildEvent* ge = GetGuildEvent(event_id); + if (ge) { + if (lock) { + ge->locked = 1; + if (send_packet) + SendGuildEventAction(GUILD_EVENT_ACTION_LOCK, ge); + } + else { + ge->locked = 0; + if (send_packet) + SendGuildEventAction(GUILD_EVENT_ACTION_UNLOCK, ge); + } + ret = true; + } + if (ret && send_packet) { + LogWrite(GUILD__DEBUG, 0, "Guilds", "Toggle guild event lock, EventID: %lli, value: %i", event_id, lock); + ge->save_needed = true; + events_save_needed = true; + } + return ret; +} + +bool Guild::DeleteGuildEvent(int64 event_id, bool send_packet) { + + bool ret = false; + deque::iterator itr; + for (itr = guild_events.begin(); itr != guild_events.end(); itr++) { + GuildEvent* ge = *itr; + if (ge->event_id == event_id) { + if (send_packet) + SendGuildEventAction(GUILD_EVENT_ACTION_DELETE, ge); + database.DeleteGuildEvent(this, ge->event_id); + safe_delete(ge); + guild_events.erase(itr); + ret = true; + break; + } + } + LogWrite(GUILD__DEBUG, 0, "Guilds", "Delete guild event, EventID: %lli", event_id); + return ret; +} + +int32 Guild::GetPermissionsPacketValue(int8 rank, int32 start, int32 end) { + + int32 ret = 0; + for (int32 i = start; i <= end; i++) { + if (permissions.count(rank) > 0 && permissions.Get(rank)->count(i) > 0 && permissions.Get(rank)->Get(i)) { + if (i >= 0 && i <= 31) + ret += (int32)pow(2.0, (double)i); + else if (i >= 32 && i <= 63) + ret += (int32)pow(2.0, (double)(i - 32)); + } + } + return ret; +} + +int32 Guild::GetEventFilterPacketValue(int8 category, int32 start, int32 end) { + + int32 ret = 0; + for (int32 i = start; i <= end; i++) { + if (event_filters.count(i) > 0 && event_filters.Get(i)->count(category) > 0 && event_filters.Get(i)->Get(category)) { + if (i >= 0 && i <= 31) + ret += (int32)pow(2.0, (double)i); + else if (i >= 32 && i <= 63) + ret += (int32)pow(2.0, (double)(i - 32)); + else if (i >= 64 && i <= 95) + ret += (int32)pow(2.0, (double)(i - 64)); + } + } + return ret; +} + +int8 Guild::GetRecruitingLookingForPacketValue() { + + int8 ret = 0; + MutexMap::iterator itr = recruiting_flags.begin(); + while (itr.Next()) { + if (itr.second) + ret += (int8)pow(2.0, (double)itr.first); + } + return ret; +} + +void Guild::SendGuildMOTD(Client* client) { + + if (client && strlen(motd) > 0) + client->Message(CHANNEL_COLOR_GUILD_MOTD, "Guild MOTD: %s", motd); + + LogWrite(GUILD__DEBUG, 1, "Guilds", "Sent guild MOTD.\n'%s'", motd); +} + +void Guild::SendGuildEventList() { + + map::iterator itr; + Client *client; + + mMembers.readlock(__FUNCTION__, __LINE__); + for (itr = members.begin(); itr != members.end(); itr++) { + if ((client = zone_list.GetClientByCharID(itr->second->character_id))) + SendGuildEventList(client); + } + mMembers.releasereadlock(__FUNCTION__, __LINE__); + + LogWrite(GUILD__DEBUG, 1, "Guilds", "Sent guild Event List (%s).", __FUNCTION__); +} + +void Guild::SendGuildEventList(Client* client) { + + if (client) { + PacketStruct* packet = configReader.getStruct("WS_GuildEventList", client->GetVersion()); + if (packet) { + packet->setDataByName("account_id", client->GetAccountID()); + packet->setArrayLengthByName("num_events", guild_events.size()); + deque::iterator itr; + int32 i = 0; + for (itr = guild_events.begin(); itr != guild_events.end(); itr++) { + packet->setArrayDataByName("event_id", (*itr)->event_id, i); + packet->setArrayDataByName("locked", (*itr)->locked, i); + i++; + } + client->QueuePacket(packet->serialize()); + //DumpPacket(packet->serialize()); + safe_delete(packet); + } + } + LogWrite(GUILD__DEBUG, 1, "Guilds", "Sent guild Event List (%s).", __FUNCTION__); +} + +void Guild::SendGuildEventDetails() { + + map::iterator itr; + Client *client; + + mMembers.readlock(__FUNCTION__, __LINE__); + for (itr = members.begin(); itr != members.end(); itr++) { + if ((client = zone_list.GetClientByCharID(itr->second->character_id))) + SendGuildEventDetails(client); + } + mMembers.releasereadlock(__FUNCTION__, __LINE__); + LogWrite(GUILD__DEBUG, 1, "Guilds", "Sent guild Event Details (%s).", __FUNCTION__); +} + +void Guild::SendGuildEventDetails(Client* client) { + + if (client) { + PacketStruct* packet = configReader.getStruct("WS_GuildEventDetails", client->GetVersion()); + if (packet) { + deque::iterator itr; + int32 i = 0; + for (itr = guild_events.begin(); itr != guild_events.end(); itr++) { + packet->setArrayDataByName("event_id", (*itr)->event_id, i); + i++; + } + client->QueuePacket(packet->serialize()); + safe_delete(packet); + } + } + LogWrite(GUILD__DEBUG, 1, "Guilds", "Sent guild Event Details (%s).", __FUNCTION__); +} + +void Guild::SendAllGuildEvents() { + + map::iterator itr; + Client *client; + + mMembers.readlock(__FUNCTION__, __LINE__); + for (itr = members.begin(); itr != members.end(); itr++) { + if ((client = zone_list.GetClientByCharID(itr->second->character_id))) + SendAllGuildEvents(client); + } + mMembers.releasereadlock(__FUNCTION__, __LINE__); + LogWrite(GUILD__DEBUG, 0, "Guilds", "Sent ALL guild Events (%s).", __FUNCTION__); +} + +void Guild::SendAllGuildEvents(Client* client) { + + if (client) { + deque::iterator itr; + for (itr = guild_events.begin(); itr != guild_events.end(); itr++) + SendOldGuildEvent(client, *itr); + } + LogWrite(GUILD__DEBUG, 0, "Guilds", "Sent ALL guild Events (%s).", __FUNCTION__); +} + +void Guild::SendOldGuildEvent(Client* client, GuildEvent* guild_event) { + + if (client && guild_event) { + PacketStruct* packet = configReader.getStruct("WS_RequestGuildInfo", client->GetVersion()); + if (packet) { + packet->setDataByName("account_id", client->GetAccountID()); + packet->setDataByName("event_id", guild_event->event_id); + packet->setDataByName("date", guild_event->date); + packet->setDataByName("type", guild_event->type); + packet->setMediumStringByName("description", guild_event->description.c_str()); + client->QueuePacket(packet->serialize()); + safe_delete(packet); + } + } + LogWrite(GUILD__DEBUG, 3, "Guilds", "Sent OLD guild Events."); +} + +void Guild::SendNewGuildEvent(GuildEvent* guild_event) { + + map::iterator itr; + Client *client; + + assert (guild_event); + + mMembers.readlock(__FUNCTION__, __LINE__); + for (itr = members.begin(); itr != members.end(); itr++) { + if ((client = zone_list.GetClientByCharID(itr->second->character_id))) + SendNewGuildEvent(client, guild_event); + } + mMembers.releasereadlock(__FUNCTION__, __LINE__); + LogWrite(GUILD__DEBUG, 0, "Guilds", "Sent NEW guild Events. (%s)", __FUNCTION__); +} + +void Guild::SendNewGuildEvent(Client* client, GuildEvent* guild_event) { + + if (client && guild_event) { + PacketStruct* packet = configReader.getStruct("WS_GuildEventAdd", client->GetVersion()); + if (packet) { + packet->setDataByName("account_id", client->GetAccountID()); + packet->setDataByName("event_id", guild_event->event_id); + packet->setDataByName("type", guild_event->type); + packet->setDataByName("date", guild_event->date); + packet->setDataByName("description", guild_event->description.c_str()); + //DumpPacket(packet->serialize()); + client->QueuePacket(packet->serialize()); + safe_delete(packet); + } + } + LogWrite(GUILD__DEBUG, 0, "Guilds", "Sent NEW guild Events. (%s)", __FUNCTION__); +} + +void Guild::SendGuildEventAction(int8 action, GuildEvent* guild_event) { + + map::iterator itr; + Client *client; + + assert(guild_event); + + mMembers.readlock(__FUNCTION__, __LINE__); + for (itr = members.begin(); itr != members.end(); itr++) { + if ((client = zone_list.GetClientByCharID(itr->second->character_id))) + SendGuildEventAction(client, action, guild_event); + } + mMembers.releasereadlock(__FUNCTION__, __LINE__); + + LogWrite(GUILD__DEBUG, 1, "Guilds", "Sent guild events Action. (%s)", __FUNCTION__); +} + +void Guild::SendGuildEventAction(Client* client, int8 action, GuildEvent* guild_event) { + + if (guild_event) { + PacketStruct* packet = configReader.getStruct("WS_GuildEventAction", client->GetVersion()); + if (packet) { + packet->setDataByName("account_id", client->GetAccountID()); + packet->setDataByName("event_id", guild_event->event_id); + packet->setDataByName("action", action); + client->QueuePacket(packet->serialize()); + safe_delete(packet); + } + } + + LogWrite(GUILD__DEBUG, 1, "Guilds", "Sent guild events Action. (%s)", __FUNCTION__); +} + +void Guild::SendGuildBankEventList() { + + map::iterator itr; + Client *client; + + mMembers.readlock(__FUNCTION__, __LINE__); + for (itr = members.begin(); itr != members.end(); itr++) { + if ((client = zone_list.GetClientByCharID(itr->second->character_id))) + SendGuildBankEventList(client); + } + mMembers.releasereadlock(__FUNCTION__, __LINE__); + LogWrite(GUILD__DEBUG, 1, "Guilds", "Sent guild bank events list. (%s)", __FUNCTION__); +} + +void Guild::SendGuildBankEventList(Client* client) { + + if (client) { + for (int32 i = 0; i < 4; i++) { + PacketStruct* packet = configReader.getStruct("WS_GuildBankEventList", client->GetVersion()); + if (packet) { + packet->setDataByName("account_id", client->GetAccountID()); + packet->setDataByName("bank_number", i); + packet->setArrayLengthByName("num_events", banks[i].events.size()); + deque::iterator itr; + for (itr = banks[i].events.begin(); itr != banks[i].events.end(); itr++) + packet->setArrayDataByName("event_id", (*itr)->event_id, i); + //DumpPacket(packet->serialize()); + client->QueuePacket(packet->serialize()); + safe_delete(packet); + } + } + } + LogWrite(GUILD__DEBUG, 1, "Guilds", "Sent guild bank events list. (%s)", __FUNCTION__); +} + +void Guild::SendGuildUpdate() { + + map::iterator itr; + Client *client; + + LogWrite(GUILD__DEBUG, 1, "Guilds", "SendGuildUpdate to all guild member clients online... (%s)", __FUNCTION__); + mMembers.readlock(__FUNCTION__, __LINE__); + for (itr = members.begin(); itr != members.end(); itr++) { + if ((client = zone_list.GetClientByCharID(itr->second->character_id))) + SendGuildUpdate(client); + } + mMembers.releasereadlock(__FUNCTION__, __LINE__); +} + +void Guild::SendGuildUpdate(Client* client) { + + if (client) { + LogWrite(GUILD__DEBUG, 1, "Guilds", "SendGuildUpdate to client online... (%s)", __FUNCTION__); + + PacketStruct* packet = configReader.getStruct("WS_GuildUpdate", client->GetVersion()); + if (packet) { + packet->setMediumStringByName("guild_name", GetName()); + packet->setMediumStringByName("guild_motd", motd); + packet->setDataByName("guild_id", id); + packet->setDataByName("guild_level", level); + packet->setDataByName("unknown", 1); + packet->setDataByName("formed_date", formed_date); + packet->setDataByName("unique_accounts", GetNumUniqueAccounts()); + packet->setDataByName("num_members", members.size()); + packet->setDataByName("exp_current", exp_current); + packet->setDataByName("exp_to_next_level", exp_to_next_level); + packet->setDataByName("event_filter_retain1", GetEventFilterPacketValue(GUILD_EVENT_FILTER_CATEGORY_RETAIN_HISTORY, 0, 31)); + packet->setDataByName("event_filter_retain2", GetEventFilterPacketValue(GUILD_EVENT_FILTER_CATEGORY_RETAIN_HISTORY, 32, 63)); + packet->setDataByName("event_filter_retain3", GetEventFilterPacketValue(GUILD_EVENT_FILTER_CATEGORY_RETAIN_HISTORY, 63, 92)); + packet->setDataByName("event_filter_retain4", 0); + packet->setDataByName("event_filter_broadcast1", GetEventFilterPacketValue(GUILD_EVENT_FILTER_CATEGORY_BROADCAST, 0, 31)); + packet->setDataByName("event_filter_broadcast2", GetEventFilterPacketValue(GUILD_EVENT_FILTER_CATEGORY_BROADCAST, 32, 63)); + packet->setDataByName("event_filter_broadcast3", GetEventFilterPacketValue(GUILD_EVENT_FILTER_CATEGORY_BROADCAST, 64, 92)); + packet->setDataByName("event_filter_broadcast4", 0); + packet->setDataByName("recruiting_looking_for", GetRecruitingLookingForPacketValue()); + packet->setDataByName("recruiting_desc_tag1", GetRecruitingDescTag(0)); + packet->setDataByName("recruiting_desc_tag2", GetRecruitingDescTag(1)); + packet->setDataByName("recruiting_desc_tag3", GetRecruitingDescTag(2)); + packet->setDataByName("recruiting_desc_tag4", GetRecruitingDescTag(3)); + packet->setDataByName("recruiting_playstyle", recruiting_play_style); + packet->setDataByName("recruiting_min_level", recruiting_min_level); + packet->setMediumStringByName("recuiting_short_description", recruiting_short_desc.c_str()); + packet->setMediumStringByName("recruiting_full_description", recruiting_full_desc.c_str()); + packet->setMediumStringByName("rank0_name", ranks.Get(GUILD_RANK_LEADER).c_str()); + packet->setDataByName("rank0_permissions1", GetPermissionsPacketValue(GUILD_RANK_LEADER, 0, 31)); + packet->setDataByName("rank0_permissions2", GetPermissionsPacketValue(GUILD_RANK_LEADER, 32, 44)); + packet->setDataByName("rank0_permissions_unused", 0); + packet->setMediumStringByName("rank1_name", ranks.Get(GUILD_RANK_SENIOR_OFFICER).c_str()); + packet->setDataByName("rank1_permissions1", GetPermissionsPacketValue(GUILD_RANK_SENIOR_OFFICER, 0, 31)); + packet->setDataByName("rank1_permissions2", GetPermissionsPacketValue(GUILD_RANK_SENIOR_OFFICER, 32, 44)); + packet->setDataByName("rank1_permissions_unused", 0); + packet->setMediumStringByName("rank2_name", ranks.Get(GUILD_RANK_OFFICER).c_str()); + packet->setDataByName("rank2_permissions1", GetPermissionsPacketValue(GUILD_RANK_OFFICER, 0, 31)); + packet->setDataByName("rank2_permissions2", GetPermissionsPacketValue(GUILD_RANK_OFFICER, 32, 44)); + packet->setDataByName("rank2_permissions_unused", 0); + packet->setMediumStringByName("rank3_name", ranks.Get(GUILD_RANK_SENIOR_MEMBER).c_str()); + packet->setDataByName("rank3_permissions1", GetPermissionsPacketValue(GUILD_RANK_SENIOR_MEMBER, 0, 31)); + packet->setDataByName("rank3_permissions2", GetPermissionsPacketValue(GUILD_RANK_SENIOR_MEMBER, 32, 44)); + packet->setDataByName("rank3_permissions_unused", 0); + packet->setMediumStringByName("rank4_name", ranks.Get(GUILD_RANK_MEMBER).c_str()); + packet->setDataByName("rank4_permissions1", GetPermissionsPacketValue(GUILD_RANK_MEMBER, 0, 31)); + packet->setDataByName("rank4_permissions2", GetPermissionsPacketValue(GUILD_RANK_MEMBER, 32, 44)); + packet->setDataByName("rank4_permissions_unused", 0); + packet->setMediumStringByName("rank5_name", ranks.Get(GUILD_RANK_JUNIOR_MEMBER).c_str()); + packet->setDataByName("rank5_permissions1", GetPermissionsPacketValue(GUILD_RANK_JUNIOR_MEMBER, 0, 31)); + packet->setDataByName("rank5_permissions2", GetPermissionsPacketValue(GUILD_RANK_JUNIOR_MEMBER, 32, 44)); + packet->setDataByName("rank5_permissions_unused", 0); + packet->setMediumStringByName("rank6_name", ranks.Get(GUILD_RANK_INITIATE).c_str()); + packet->setDataByName("rank6_permissions1", GetPermissionsPacketValue(GUILD_RANK_INITIATE, 0, 31)); + packet->setDataByName("rank6_permissions2", GetPermissionsPacketValue(GUILD_RANK_INITIATE, 32, 44)); + packet->setDataByName("rank6_permissions_unused", 0); + packet->setMediumStringByName("rank7_name", ranks.Get(GUILD_RANK_RECRUIT).c_str()); + packet->setDataByName("rank7_permissions1", GetPermissionsPacketValue(GUILD_RANK_RECRUIT, 0, 31)); + packet->setDataByName("rank7_permissions2", GetPermissionsPacketValue(GUILD_RANK_RECRUIT, 32, 44)); + packet->setDataByName("rank7_permissions_unused", 0); + packet->setMediumStringByName("bank1_name", banks[0].name.c_str()); + packet->setMediumStringByName("bank2_name", banks[1].name.c_str()); + packet->setMediumStringByName("bank3_name", banks[2].name.c_str()); + packet->setMediumStringByName("bank4_name", banks[3].name.c_str()); + //DumpPacket(packet->serialize()); + client->QueuePacket(packet->serialize()); + safe_delete(packet); + } + } +} + +void Guild::SendGuildMemberList() { + + map::iterator itr; + Client *client; + + mMembers.readlock(__FUNCTION__, __LINE__); + for (itr = members.begin(); itr != members.end(); itr++) { + if ((client = zone_list.GetClientByCharID(itr->second->character_id))) + SendGuildMemberList(client); + } + mMembers.releasereadlock(__FUNCTION__, __LINE__); + LogWrite(GUILD__DEBUG, 1, "Guilds", "Sent guild member list to all clients."); +} + +void Guild::SendGuildMemberList(Client* client) { + + map::iterator itr; + GuildMember *gm; + + if (client) { + LogWrite(GUILD__DEBUG, 1, "Guilds", "Sent guild member list to a client."); + PacketStruct* packet = configReader.getStruct("WS_GuildMembershipResponse", client->GetVersion()); + if (packet) { + packet->setDataByName("guild_id", id); + packet->setDataByName("character_id_to", client->GetCharacterID()); + + mMembers.readlock(__FUNCTION__, __LINE__); + packet->setArrayLengthByName("num_members", members.size()); + int32 i = 0; + for (itr = members.begin(); itr != members.end(); itr++) { + gm = itr->second; + packet->setArrayDataByName("account_id", gm->account_id, i); + packet->setArrayDataByName("character_id", gm->character_id, i); + packet->setArrayDataByName("name", gm->name, i); + packet->setArrayDataByName("unknown2", 0, i); + packet->setArrayDataByName("unknown3", 1, i); + packet->setArrayDataByName("adventure_class", gm->adventure_class, i); + packet->setArrayDataByName("adventure_level", gm->adventure_level, i); + packet->setArrayDataByName("tradeskill_class", gm->tradeskill_class, i); + packet->setArrayDataByName("tradeskill_level", gm->tradeskill_level, i); + packet->setArrayDataByName("rank", gm->rank, i); + packet->setArrayDataByName("member_flags", gm->member_flags, i); + packet->setArrayDataByName("join_date", gm->join_date, i); + packet->setArrayDataByName("guild_status", gm->guild_status, i); + packet->setArrayDataByName("last_login", gm->last_login_date, i); + packet->setArrayDataByName("recruiter_id", gm->recruiter_id, i); + packet->setArrayDataByName("points", gm->points, i); + if (zone_list.GetClientByCharID(gm->character_id)) + packet->setArrayDataByName("zone", gm->zone.c_str(), i); + packet->setArrayDataByName("note", gm->note.c_str(), i); + packet->setArrayDataByName("officer_note", gm->officer_note.c_str(), i); + i++; + } + mMembers.releasereadlock(__FUNCTION__, __LINE__); + //DumpPacket(packet->serialize()); + client->QueuePacket(packet->serialize()); + safe_delete(packet); + } + } +} + +void Guild::SendGuildMember(Player* player, bool include_zone) { + + map::iterator itr; + Client *client; + GuildMember *gm; + + assert(player); + + mMembers.readlock(__FUNCTION__, __LINE__); + if (members.count(player->GetCharacterID()) > 0) { + gm = members[player->GetCharacterID()]; + + for (itr = members.begin(); itr != members.end(); itr++) { + if ((client = zone_list.GetClientByCharID(itr->second->character_id))) + SendGuildMember(client, gm, include_zone); + } + } + mMembers.releasereadlock(__FUNCTION__, __LINE__); + LogWrite(GUILD__DEBUG, 1, "Guilds", "Sent guild member."); +} + +void Guild::SendGuildMember(GuildMember* gm, bool include_zone) { + + map::iterator itr; + Client *client; + + assert(gm); + + mMembers.readlock(__FUNCTION__, __LINE__); + for (itr = members.begin(); itr != members.end(); itr++) { + if ((client = zone_list.GetClientByCharID(itr->second->character_id))) + SendGuildMember(client, gm, include_zone); + } + mMembers.releasereadlock(__FUNCTION__, __LINE__); + LogWrite(GUILD__DEBUG, 1, "Guilds", "Sent guild member."); +} + +void Guild::SendGuildMember(Client* client, GuildMember* gm, bool include_zone) { + + if (client && gm) { + PacketStruct* packet = configReader.getStruct("WS_JoinGuildNotify", client->GetVersion()); + if (packet) { + packet->setDataByName("guild_id", id); + packet->setDataByName("character_id", gm->character_id); + packet->setDataByName("account_id", gm->account_id); + packet->setMediumStringByName("name", gm->name); + packet->setDataByName("unknown2", 0); + packet->setDataByName("unknown3", 1); + packet->setDataByName("adventure_class", gm->adventure_class); + packet->setDataByName("adventure_level", gm->adventure_level); + packet->setDataByName("tradeskill_class", gm->tradeskill_class); + packet->setDataByName("tradeskill_level", gm->tradeskill_level); + packet->setDataByName("rank", gm->rank); + packet->setDataByName("member_flags", gm->member_flags); + packet->setDataByName("join_date", gm->join_date); + packet->setDataByName("guild_status", gm->guild_status); + packet->setDataByName("last_login", gm->last_login_date); + packet->setDataByName("recruiter_id", gm->recruiter_id); + packet->setDataByName("points", gm->points); + packet->setMediumStringByName("note", gm->note.c_str()); + packet->setMediumStringByName("officer_note", gm->officer_note.c_str()); + if (include_zone && zone_list.GetClientByCharID(gm->character_id)) { + packet->setMediumStringByName("zone", gm->zone.c_str()); + //DumpPacket(packet->serialize()); + } + client->QueuePacket(packet->serialize()); + safe_delete(packet); + } + } + LogWrite(GUILD__DEBUG, 1, "Guilds", "Sent guild member to a client."); +} + +void Guild::SendGuildModification(float points, vector* character_ids) { + + map::iterator itr; + Client *client; + + if (character_ids) { + mMembers.readlock(__FUNCTION__, __LINE__); + for (itr = members.begin(); itr != members.end(); itr++) { + if ((client = zone_list.GetClientByCharID(itr->second->character_id))) + SendGuildModification(client, points, character_ids); + } + mMembers.releasereadlock(__FUNCTION__, __LINE__); + } + LogWrite(GUILD__DEBUG, 1, "Guilds", "Sent guild modification to all clients."); +} + +void Guild::SendGuildModification(Client* client, float points, vector* character_ids) { + + if (client && character_ids) { + PacketStruct* packet = configReader.getStruct("WS_ModifyGuild", client->GetVersion()); + if (packet) { + packet->setDataByName("guild_id", id); + packet->setDataByName("unknown2", 0xFFFFFFFF); + packet->setDataByName("points", points); + packet->setArrayLengthByName("num_character_ids", character_ids->size()); + for (int32 i = 0; i < character_ids->size(); i++) + packet->setArrayDataByName("character_id", character_ids->at(i), i); + client->QueuePacket(packet->serialize()); + safe_delete(packet); + } + } + LogWrite(GUILD__DEBUG, 1, "Guilds", "Sent guild modification to a client."); +} + +void Guild::GuildMemberLogin(Client *client, bool first_login) { + + map::iterator itr; + Client *client_to; + char buf[128]; + + assert(client); + + UpdateGuildMemberInfo(client->GetPlayer()); + if (first_login) + SendGuildMOTD(client); + SendGuildUpdate(client); + if (first_login) + SendGuildMember(client->GetPlayer(), false); + SendGuildRecruiterInfo(client, client->GetPlayer()); + SendGuildEventList(client); + SendGuildBankEventList(client); + SendGuildMember(client->GetPlayer()); + SendGuildEventDetails(client); + uchar blah5[] = {/*0xFF,0x09,0x01,*/0x01,0x00,0x00,0x00,0x00,0x00,0x00}; + uchar blah6[] = {/*0xFF,0x09,0x01,*/0x01,0x00,0x00,0x00,0x01,0x00,0x00}; + uchar blah7[] = {/*0xFF,0x09,0x01,*/0x01,0x00,0x00,0x00,0x02,0x00,0x00}; + uchar blah8[] = {/*0xFF,0x09,0x01,*/0x01,0x00,0x00,0x00,0x03,0x00,0x00}; + + //DumpPacket(blah5, sizeof(blah5)); + //DumpPacket(blah6, sizeof(blah6)); + //DumpPacket(blah7, sizeof(blah7)); + //DumpPacket(blah8, sizeof(blah8)); + + client->QueuePacket(new EQ2Packet(OP_RequestGuildBankEventDetailsMs, blah5, sizeof(blah5))); + client->QueuePacket(new EQ2Packet(OP_RequestGuildBankEventDetailsMs, blah6, sizeof(blah6))); + client->QueuePacket(new EQ2Packet(OP_RequestGuildBankEventDetailsMs, blah7, sizeof(blah7))); + client->QueuePacket(new EQ2Packet(OP_RequestGuildBankEventDetailsMs, blah8, sizeof(blah8))); + if (first_login) + SendAllGuildEvents(client); + SendGuildMemberList(client); + if (first_login) { + snprintf(buf, sizeof(buf), "Guildmate: %s has logged in", client->GetPlayer()->GetName()); + + mMembers.readlock(__FUNCTION__, __LINE__); + for (itr = members.begin(); itr != members.end(); itr++) { + if ((client_to = zone_list.GetClientByCharID(itr->second->character_id))) + client_to->SimpleMessage(CHANNEL_GUILD_MEMBER_ONLINE, buf); + } + mMembers.releasereadlock(__FUNCTION__, __LINE__); + } + + if (first_login){ + uchar blah1[] = {/*0xFF,0x09,0x01,*/0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00}; + uchar blah2[] = {/*0xFF,0x09,0x01,*/0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00}; + uchar blah3[] = {/*0xFF,0x09,0x01,*/0x01,0x00,0x00,0x00,0x02,0x00,0x00,0x00}; + uchar blah4[] = {/*0xFF,0x09,0x01,*/0x01,0x00,0x00,0x00,0x03,0x00,0x00,0x00}; + + //DumpPacket(blah1, sizeof(blah1)); + //DumpPacket(blah2, sizeof(blah2)); + //DumpPacket(blah3, sizeof(blah3)); + //DumpPacket(blah4, sizeof(blah4)); + + client->QueuePacket(new EQ2Packet(OP_GuildBankUpdateMsg, blah1, sizeof(blah1))); + client->QueuePacket(new EQ2Packet(OP_GuildBankUpdateMsg, blah2, sizeof(blah2))); + client->QueuePacket(new EQ2Packet(OP_GuildBankUpdateMsg, blah3, sizeof(blah3))); + client->QueuePacket(new EQ2Packet(OP_GuildBankUpdateMsg, blah4, sizeof(blah4))); + } + LogWrite(GUILD__DEBUG, 0, "Guilds", "Guild Member logged in."); +} + +void Guild::GuildMemberLogoff(Player *player) { + + map::iterator itr; + GuildMember *gm; + Client *client; + char buf[128]; + + assert(player); + + mMembers.readlock(__FUNCTION__, __LINE__); + if ((gm = GetGuildMember(player))) { + snprintf(buf, sizeof(buf), "Guildmate: %s has logged out", player->GetName()); + gm->zone.clear(); + + for (itr = members.begin(); itr != members.end(); itr++) { + if ((client = zone_list.GetClientByCharID(itr->second->character_id))) { + SendGuildMember(client, gm, false); + client->SimpleMessage(CHANNEL_GUILD_MEMBER_ONLINE, buf); + } + } + } + mMembers.releasereadlock(__FUNCTION__, __LINE__); + LogWrite(GUILD__DEBUG, 0, "Guilds", "Guild Member logged out."); +} + +void Guild::SendGuildMemberLeave(int32 character_id) { + + map::iterator itr; + Client *client; + + mMembers.readlock(__FUNCTION__, __LINE__); + for (itr = members.begin(); itr != members.end(); itr++) { + if ((client = zone_list.GetClientByCharID(itr->second->character_id))) + SendGuildMemberLeave(client, character_id); + } + mMembers.releasereadlock(__FUNCTION__, __LINE__); + LogWrite(GUILD__DEBUG, 1, "Guilds", "Sent guild member left the guild to all clients."); +} + +void Guild::SendGuildMemberLeave(Client* client, int32 character_id) { + + PacketStruct* packet = configReader.getStruct("WS_LeaveGuildNotify", client->GetVersion()); + if (packet) { + packet->setDataByName("guild_id", id); + packet->setDataByName("character_id", character_id); + client->QueuePacket(packet->serialize()); + safe_delete(packet); + } + LogWrite(GUILD__DEBUG, 1, "Guilds", "Sent guild member left the guild to a client."); +} + +void Guild::SendGuildRecruitingDetails(Client* client) { + + if (client) { + LogWrite(GUILD__DEBUG, 1, "Guilds", "Sent guild recruiting details to a client."); + PacketStruct* packet = configReader.getStruct("WS_GuildRecruitingDetails", client->GetVersion()); + if (packet) { + vector* recruiters = GetGuildRecruiters(); + vector::iterator itr; + packet->setDataByName("guild_id", id); + packet->setDataByName("recruiting_full_description", recruiting_full_desc.c_str()); + if (recruiters) { + int32 i = 0; + packet->setArrayLengthByName("num_recruiters", recruiters->size()); + for (itr = recruiters->begin(); itr != recruiters->end(); itr++) { + GuildMember* gm = *itr; + packet->setArrayDataByName("adventure_class", gm->adventure_class, i); + packet->setArrayDataByName("adventure_level", gm->adventure_level, i); + packet->setArrayDataByName("tradeskill_class", gm->tradeskill_class, i); + packet->setArrayDataByName("tradeskill_level", gm->tradeskill_level, i); + packet->setArrayDataByName("show_adventure_class", gm->recruiting_show_adventure_class, i); + packet->setArrayDataByName("unknown2", 4, i); + packet->setArrayDataByName("unknown3", 2, i); + packet->setSubArrayLengthByName("num_bytes", gm->recruiter_picture_data_size, i); + if (gm->recruiter_picture_data_size > 0) { + for (int16 j = 0; j < gm->recruiter_picture_data_size; j++) + packet->setSubArrayDataByName("picture_byte", gm->recruiter_picture_data[j], i, j); + } + packet->setArrayDataByName("char_name", gm->name, i); + packet->setArrayDataByName("recruiter_description", gm->recruiter_description.c_str(), i); + i++; + } + safe_delete(recruiters); + } + //DumpPacket(packet->serialize()); + client->QueuePacket(packet->serialize()); + safe_delete(packet); + } + } +} + +void Guild::SendGuildRecruitingImages(Client* client) { + if (client) { + LogWrite(GUILD__DEBUG, 1, "Guilds", "Sent guild recruiting images to a client."); + PacketStruct* packet = configReader.getStruct("WS_GuildRecruitingImage", client->GetVersion()); + if (packet) { + vector* recruiters = GetGuildRecruiters(); + packet->setDataByName("guild_id", id); + if (recruiters && recruiters->size() > 0) { + GuildMember* gm = recruiters->at(0); + packet->setArrayLengthByName("num_bytes", gm->recruiter_picture_data_size); + if (gm->recruiter_picture_data_size > 0) { + for (int16 i = 0; i < gm->recruiter_picture_data_size; i++) + packet->setArrayDataByName("picture_byte", gm->recruiter_picture_data[i], i); + } + safe_delete(recruiters); + } + client->QueuePacket(packet->serialize()); + safe_delete(packet); + } + } +} + +void Guild::SendGuildRecruiterInfo(Client* client, Player* player) { + + if (client && player) { + LogWrite(GUILD__DEBUG, 1, "Guilds", "Sent guild recruiter info to a client."); + GuildMember* gm = GetGuildMember(player); + if (gm) { + PacketStruct* packet = configReader.getStruct("WS_GuildRecruitingMemberInfo", client->GetVersion()); + if (packet) { + packet->setDataByName("character_id", gm->character_id); + packet->setDataByName("unknown", 1); + packet->setDataByName("adventure_class", gm->adventure_class); + packet->setDataByName("adventure_level", gm->adventure_level); + packet->setDataByName("tradeskill_class", gm->tradeskill_class); + packet->setDataByName("tradeskill_level", gm->tradeskill_level); + packet->setDataByName("show_adventure_class", gm->recruiting_show_adventure_class); + packet->setDataByName("unknown3", 0); + + // hack! + gm->recruiter_picture_data_size = 0; + packet->setArrayLengthByName("num_bytes", gm->recruiter_picture_data_size); + if (gm->recruiter_picture_data_size > 0) { + for (int16 i = 0; i < gm->recruiter_picture_data_size; i++) + packet->setArrayDataByName("picture_byte", gm->recruiter_picture_data[i], i); + } + + packet->setMediumStringByName("recruiter_name", gm->name); + packet->setMediumStringByName("recruiter_description", gm->recruiter_description.c_str()); + //DumpPacket(packet->serialize()); + client->QueuePacket(packet->serialize()); + safe_delete(packet); + } + } + } +} + +void Guild::HandleGuildSay(Client* sender, const char* message) { + + map::iterator itr; + GuildMember *gm; + Client *client; + + assert(sender); + assert(message); + + if (!(gm = GetGuildMemberOnline(sender))) + return; + + if (!permissions.Get(gm->rank)->Get(GUILD_PERMISSIONS_SPEAK_IN_GUILD_CHAT)) { + sender->SimpleMessage(CHANNEL_COLOR_WHITE, "You do not have permission to speak in guild chat."); + return; + } + + mMembers.readlock(__FUNCTION__, __LINE__); + for (itr = members.begin(); itr != members.end(); itr++) { + if (!(client = zone_list.GetClientByCharID(itr->second->character_id))) + continue; + + if (permissions.Get(itr->second->rank)->Get(GUILD_PERMISSIONS_SEE_GUILD_CHAT)) + client->GetCurrentZone()->HandleChatMessage(client, sender->GetPlayer(), client->GetPlayer()->GetName(), CHANNEL_GUILD, message, 0, 0, false); + } + mMembers.releasereadlock(__FUNCTION__, __LINE__); + LogWrite(GUILD__DEBUG, 0, "Guilds", "Guild Say"); +} + +void Guild::HandleOfficerSay(Client* sender, const char* message) { + + map::iterator itr; + GuildMember *gm; + Client *client; + + assert(sender); + assert(message); + + if (!(gm = GetGuildMemberOnline(sender))) + return; + + if (!permissions.Get(gm->rank)->Get(GUILD_PERMISSIONS_SPEAK_IN_OFFICER_CHAT)) { + sender->SimpleMessage(CHANNEL_COLOR_WHITE, "You do not have permission to speak in officer chat."); + return; + } + + mMembers.readlock(__FUNCTION__, __LINE__); + for (itr = members.begin(); itr != members.end(); itr++) { + if (!(client = zone_list.GetClientByCharID(itr->second->character_id))) + continue; + + if (permissions.Get(itr->second->rank)->Get(GUILD_PERMISSIONS_SEE_OFFICER_CHAT)) + client->GetCurrentZone()->HandleChatMessage(client, sender->GetPlayer(), client->GetPlayer()->GetName(), CHANNEL_OFFICER, message, 0, 0, false); + } + mMembers.releasereadlock(__FUNCTION__, __LINE__); + LogWrite(GUILD__DEBUG, 0, "Guilds", "Officer Say"); +} + +void Guild::SendMessageToGuild(int8 event_type, const char* message, ...) { + + map::iterator itr; + Client *client; + va_list argptr; + char buffer[4096]; + + va_start(argptr, message); + vsnprintf(buffer, sizeof(buffer), message, argptr); + va_end(argptr); + + mMembers.readlock(__FUNCTION__, __LINE__); + for (itr = members.begin(); itr != members.end(); itr++) { + if (!(client = zone_list.GetClientByCharID(itr->second->character_id))) + continue; + + if (event_filters.Get(itr->second->rank)->Get(GUILD_EVENT_FILTER_CATEGORY_BROADCAST)) + client->SimpleMessage(CHANNEL_COLOR_GUILD_EVENT, buffer); + } + mMembers.releasereadlock(__FUNCTION__, __LINE__); + LogWrite(GUILD__DEBUG, 0, "Guilds", "Sent message to entire guild."); +} + +string Guild::GetEpicMobDeathMessage(const char* player_name, const char* mob_name) { + + char message[256]; + int8 choice; + + assert(player_name); + assert(mob_name); + + choice = (rand() % 5) + 1; + if (choice == 1) + snprintf(message, sizeof(message), "%s was slain by %s in a thunderous engagement!", mob_name, player_name); + else if (choice == 2) + snprintf(message, sizeof(message), "%s was slain by %s in a titanic struggle!", mob_name, player_name); + else if (choice == 3) + snprintf(message, sizeof(message), "%s was slain by %s's heroic might!", mob_name, player_name); + else if (choice == 4) + snprintf(message, sizeof(message), "%s slew %s in an earth shaking battle!", player_name, mob_name); + else + snprintf(message, sizeof(message), "%s slew %s in a heroic clash!", player_name, mob_name); + + LogWrite(GUILD__DEBUG, 0, "Guilds", "Guild Epic Mob Death message sent."); + return string(message); +} + +/*************************************************************************************************************************************************************** + * GUILDLIST + ***************************************************************************************************************************************************************/ + +GuildList::GuildList() { +} + +GuildList::~GuildList() { + + MutexMap::iterator itr = guild_list.begin(); + while (itr.Next()) + safe_delete(itr.second); +} + +bool GuildList::AddGuild(Guild* guild) { + + bool ret = false; + if (guild && guild_list.count(guild->GetID()) == 0) { + guild_list.Put(guild->GetID(), guild); + ret = true; + } + return ret; +} + +Guild* GuildList::GetGuild(int32 guild_id) { + + Guild* ret = 0; + if (guild_list.count(guild_id) > 0) + ret = guild_list.Get(guild_id); + return ret; +} + +Guild* GuildList::GetGuild(const char* guild_name) { + + Guild* ret = 0; + MutexMap::iterator itr = guild_list.begin(); + while (itr.Next()) { + if (strncasecmp(itr.second->GetName(), guild_name, strlen(guild_name)) == 0) { + ret = itr.second; + break; + } + } + return ret; +} + +bool GuildList::RemoveGuild(Guild* guild, bool delete_data) { + + bool ret = false; + if (guild && guild_list.count(guild->GetID()) > 0) { + guild_list.erase(guild->GetID(), false, delete_data); + ret = true; + } + return ret; +} + +bool GuildList::RemoveGuild(int32 guild_id, bool delete_data) { + + bool ret = false; + if (guild_list.count(guild_id) > 0) { + guild_list.erase(guild_id, false, delete_data); + ret = true; + } + return ret; +} diff --git a/EQ2/source/WorldServer/Guilds/Guild.h b/EQ2/source/WorldServer/Guilds/Guild.h new file mode 100644 index 000000000..9ce4923b9 --- /dev/null +++ b/EQ2/source/WorldServer/Guilds/Guild.h @@ -0,0 +1,450 @@ +/* + EQ2Emulator: Everquest II Server Emulator + Copyright (C) 2007 EQ2EMulator Development Team (http://www.eq2emulator.net) + + This file is part of EQ2Emulator. + + EQ2Emulator is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + EQ2Emulator is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with EQ2Emulator. If not, see . +*/ + +#ifndef GUILD_H_ +#define GUILD_H_ + +#include +#include +#include +#include "../../common/Mutex.h" +#include "../MutexMap.h" +using namespace std; + +class ZoneServer; +class Client; +class Player; + +#define GUILD_RANK_LEADER 0 +#define GUILD_RANK_SENIOR_OFFICER 1 +#define GUILD_RANK_OFFICER 2 +#define GUILD_RANK_SENIOR_MEMBER 3 +#define GUILD_RANK_MEMBER 4 +#define GUILD_RANK_JUNIOR_MEMBER 5 +#define GUILD_RANK_INITIATE 6 +#define GUILD_RANK_RECRUIT 7 + +#define GUILD_PERMISSIONS_INVITE 0 +#define GUILD_PERMISSIONS_RMEOVE_MEMBER 1 +#define GUILD_PERMISSIONS_PROMOTE_MEMBER 2 +#define GUILD_PERMISSIONS_DEMOTE_MEMBER 3 +#define GUILD_PERMISSIONS_CHANGE_MOTD 6 +#define GUILD_PERMISSIONS_CHANGE_PERMISSIONS 7 +#define GUILD_PERMISSIONS_CHANGE_RANK_NAMES 8 +#define GUILD_PERMISSIONS_SEE_OFFICER_NOTES 9 +#define GUILD_PERMISSIONS_EDIT_OFFICER_NOTES 10 +#define GUILD_PERMISSIONS_SEE_OFFICER_CHAT 11 +#define GUILD_PERMISSIONS_SPEAK_IN_OFFICER_CHAT 12 +#define GUILD_PERMISSIONS_SEE_GUILD_CHAT 13 +#define GUILD_PERMISSIONS_SPEAK_IN_GUILD_CHAT 14 +#define GUILD_PERMISSIONS_EDIT_PERSONAL_NOTES 15 +#define GUILD_PERMISSIONS_EDIT_PERSONAL_NOTES_OTHERS 16 +#define GUILD_PERMISSIONS_EDIT_EVENT_FILTERS 17 +#define GUILD_PERMISSIONS_EDIT_EVENTS 18 +#define GUILD_PERMISSIONS_PURCHASE_STATUS_ITEMS 19 +#define GUILD_PERMISSIONS_DISPLAY_GUILD_NAME 20 +#define GUILD_PERMISSIONS_SEND_EMAIL_TO_GUILD 21 +#define GUILD_PERMISSIONS_BANK1_SEE_CONTENTS 22 +#define GUILD_PERMISSIONS_BANK2_SEE_CONTENTS 23 +#define GUILD_PERMISSIONS_BANK3_SEE_CONTENTS 24 +#define GUILD_PERMISSIONS_BANK4_SEE_CONTENTS 25 +#define GUILD_PERMISSIONS_BANK1_DEPOSIT 26 +#define GUILD_PERMISSIONS_BANK2_DEPOSIT 27 +#define GUILD_PERMISSIONS_BANK3_DEPOSIT 28 +#define GUILD_PERMISSIONS_BANK4_DEPOSIT 29 +#define GUILD_PERMISSIONS_BANK1_WITHDRAWL 30 +#define GUILD_PERMISSIONS_BANK2_WITHDRAWL 31 +#define GUILD_PERMISSIONS_BANK3_WITHDRAWL 32 +#define GUILD_PERMISSIONS_BANK4_WITHDRAWL 33 +#define GUILD_PERMISSIONS_EDIT_RECRUITING_SETTINGS 35 +#define GUILD_PERMISSIONS_MAKE_OTHERS_RECRUITERS 36 +#define GUILD_PERMISSIONS_SEE_RECRUITING_SETTINGS 37 +#define GUILD_PERMISSIONS_ASSIGN_POINTS 43 +#define GUILD_PERMISSIONS_RECEIVE_POINTS 44 + +#define GUILD_EVENT_FILTER_CATEGORY_RETAIN_HISTORY 0 +#define GUILD_EVENT_FILTER_CATEGORY_BROADCAST 1 + +#define GUILD_EVENT_GUILD_LEVEL_UP 0 +#define GUILD_EVENT_GUILD_LEVEL_DOWN 1 +#define GUILD_EVENT_DISCOVERS_ITEM 2 +#define GUILD_EVENT_GAINS_ADV_LEVEL_1_10 3 +#define GUILD_EVENT_GAINS_ADV_LEVEL_11_20 4 +#define GUILD_EVENT_GAINS_ADV_LEVEL_21_30 5 +#define GUILD_EVENT_GAINS_ADV_LEVEL_31_40 6 +#define GUILD_EVENT_GAINS_ADV_LEVEL_41_50 7 +#define GUILD_EVENT_GAINS_TS_LEVEL_1_10 8 +#define GUILD_EVENT_GAINS_TS_LEVEL_11_20 9 +#define GUILD_EVENT_GAINS_TS_LEVEL_21_30 10 +#define GUILD_EVENT_GAINS_TS_LEVEL_31_40 11 +#define GUILD_EVENT_GAINS_TS_LEVEL_41_50 12 +#define GUILD_EVENT_MEMBER_JOINS 13 +#define GUILD_EVENT_MEMBER_LEAVES 14 +#define GUILD_EVENT_MEMBER_PROMOTED 15 +#define GUILD_EVENT_MEMBER_DEMOTED 16 +#define GUILD_EVENT_COMPLETES_HERITAGE_QUEST 19 +#define GUILD_EVENT_KILLS_EPIC_MONSTER 20 +#define GUILD_EVENT_LOOTS_ARTIFACT 21 +#define GUILD_EVENT_LOOTS_FABELED_ITEM 22 +#define GUILD_EVENT_LOOTS_LEGENDARY_ITEM 23 +#define GUILD_EVENT_COMPLETES_WRIT 24 +#define GUILD_EVENT_LOOTS_MYTHICAL_ITEM 25 +#define GUILD_EVENT_GAINS_ADV_LEVEL_10 26 +#define GUILD_EVENT_GAINS_ADV_LEVEL_20 27 +#define GUILD_EVENT_GAINS_ADV_LEVEL_30 28 +#define GUILD_EVENT_GAINS_ADV_LEVEL_40 29 +#define GUILD_EVENT_GAINS_ADV_LEVEL_50 30 +#define GUILD_EVENT_GAINS_TS_LEVEL_10 31 +#define GUILD_EVENT_GAINS_TS_LEVEL_20 32 +#define GUILD_EVENT_GAINS_TS_LEVEL_30 33 +#define GUILD_EVENT_GAINS_TS_LEVEL_40 34 +#define GUILD_EVENT_GAINS_TS_LEVEL_50 35 +#define GUILD_EVENT_GAINS_ADV_LEVEL_51_60 37 +#define GUILD_EVENT_GAINS_TS_LEVEL_51_60 38 +#define GUILD_EVENT_GAINS_ADV_LEVEL_60 39 +#define GUILD_EVENT_GAINS_TS_LEVEL_60 40 +#define GUILD_EVENT_GAINS_ADV_LEVEL_61_70 41 +#define GUILD_EVENT_GAINS_TS_LEVEL_61_70 42 +#define GUILD_EVENT_GAINS_ADV_LEVEL_70 43 +#define GUILD_EVENT_GAINS_TS_LEVEL_70 44 +#define GUILD_EVENT_GAINS_AA_10 45 +#define GUILD_EVENT_GAINS_AA_20 46 +#define GUILD_EVENT_GAINS_AA_30 47 +#define GUILD_EVENT_GAINS_AA_40 48 +#define GUILD_EVENT_GAINS_AA_50 49 +#define GUILD_EVENT_GAINS_AA_1_10 50 +#define GUILD_EVENT_GAINS_AA_11_20 51 +#define GUILD_EVENT_GAINS_AA_21_30 52 +#define GUILD_EVENT_GAINS_AA_31_40 53 +#define GUILD_EVENT_GAINS_AA_41_50 54 +#define GUILD_EVENT_BECOMES_RECRUITER 55 +#define GUILD_EVENT_NO_LONGER_RECRUITER 56 +#define GUILD_EVENT_HERALDY_CHANGE 57 +#define GUILD_EVENT_GAINS_AA_60 58 +#define GUILD_EVENT_GAINS_AA_70 59 +#define GUILD_EVENT_GAINS_AA_80 60 +#define GUILD_EVENT_GAINS_AA_90 61 +#define GUILD_EVENT_GAINS_AA_100 62 +#define GUILD_EVENT_GAINS_AA_51_60 63 +#define GUILD_EVENT_GAINS_AA_61_70 64 +#define GUILD_EVENT_GAINS_AA_71_80 65 +#define GUILD_EVENT_GAINS_AA_81_90 66 +#define GUILD_EVENT_GAINS_AA_91_100 67 +#define GUILD_EVENT_GAINS_ADV_LEVEL_80 68 +#define GUILD_EVENT_GAINS_TS_LEVEL_80 69 +#define GUILD_EVENT_GAINS_ADV_LEVEL_71_80 70 +#define GUILD_EVENT_GAINS_TS_LEVEL_71_80 71 +#define GUILD_EVENT_GAINS_AA_110 72 +#define GUILD_EVENT_GAINS_AA_120 73 +#define GUILD_EVENT_GAINS_AA_130 74 +#define GUILD_EVENT_GAINS_AA_140 75 +#define GUILD_EVENT_GAINS_AA_101_110 76 +#define GUILD_EVENT_GAINS_AA_111_120 77 +#define GUILD_EVENT_GAINS_AA_121_130 78 +#define GUILD_EVENT_GAINS_AA_131_140 79 +#define GUILD_EVENT_GAINS_AA_150 80 +#define GUILD_EVENT_GAINS_AA_141_150 81 +#define GUILD_EVENT_GAINS_AA_160 82 +#define GUILD_EVENT_GAINS_AA_170 83 +#define GUILD_EVENT_GAINS_AA_180 84 +#define GUILD_EVENT_GAINS_AA_190 85 +#define GUILD_EVENT_GAINS_AA_200 86 +#define GUILD_EVENT_GAINS_AA_151_160 87 +#define GUILD_EVENT_GAINS_AA_161_170 88 +#define GUILD_EVENT_GAINS_AA_171_180 89 +#define GUILD_EVENT_GAINS_AA_181_190 90 +#define GUILD_EVENT_GAINS_AA_191_200 91 +#define GUILD_EVENT_EARNS_ACHIEVEMENT 92 + +#define GUILD_RECRUITING_FLAG_TRAINING 0 +#define GUILD_RECRUITING_FLAG_FIGHTERS 1 +#define GUILD_RECRUITING_FLAG_PRIESTS 2 +#define GUILD_RECRUITING_FLAG_SCOUTS 3 +#define GUILD_RECRUITING_FLAG_MAGES 4 +#define GUILD_RECRUITING_FLAG_TRADESKILLERS 5 + +#define GUILD_RECRUITING_PLAYSTYLE_NONE 0 +#define GUILD_RECRUITING_PLAYSTYLE_CASUAL 1 +#define GUILD_RECRUITING_PLAYSTYLE_HARDCORE 2 + +#define GUILD_RECRUITING_DESC_TAG_NONE 0 +#define GUILD_RECRUITING_DESC_TAG_GOOD 1 +#define GUILD_RECRUITING_DESC_TAG_EVIL 2 +#define GUILD_RECRUITING_DESC_TAG_CHATTY 3 +#define GUILD_RECRUITING_DESC_TAG_ORGANIZED 4 +#define GUILD_RECRUITING_DESC_TAG_ROLEPLAY 5 +#define GUILD_RECRUITING_DESC_TAG_ENJOY_QUESTS 6 +#define GUILD_RECRUITING_DESC_TAG_ENJOY_RAIDS 7 +#define GUILD_RECRUITING_DESC_TAG_ODD_HOURS 8 +#define GUILD_RECRUITING_DESC_TAG_CRAFTER_ORIENTED 9 +#define GUILD_RECRUITING_DESC_TAG_FAMILY_FRIENDLY 10 +#define GUILD_RECRUITING_DESC_TAG_MATURE_HUMOR 11 +#define GUILD_RECRUITING_DESC_TAG_INMATES_RUN 12 +#define GUILD_RECRUITING_DESC_TAG_VERY_FUNNY 13 +#define GUILD_RECRUITING_DESC_TAG_HUMOR_CAUES_PAIN 14 +#define GUILD_RECRUITING_DESC_TAG_SERIOUS 15 + +#define GUILD_MEMBER_FLAGS_RECRUITING_FOR_GUILD 1 +#define GUILD_MEMBER_FLAGS_NOTIFY_LOGINS 2 +#define GUILD_MEMBER_FLAGS_DONT_GENERATE_EVENTS 4 + +#define GUILD_EVENT_ACTION_LOCK 0 +#define GUILD_EVENT_ACTION_UNLOCK 1 +#define GUILD_EVENT_ACTION_DELETE 2 + +#define GUILD_MAX_LEVEL 80 +#define GUILD_MAX_POINT_HISTORY 50 +#define GUILD_MAX_EVENTS 500 +#define GUILD_MAX_LOCKED_EVENTS 200 + +struct PointHistory { + int32 date; + string modified_by; + string comment; + float points; + bool saved_needed; +}; + +struct GuildMember { + int32 character_id; + int32 account_id; + int32 recruiter_id; //00 00 00 00 if not a guild recruiter + char name[64]; + int32 guild_status; + float points; + int8 adventure_class; + int8 adventure_level; + int8 tradeskill_class; + int8 tradeskill_level; + int8 rank; + int8 member_flags; + string zone; + int32 join_date; + int32 last_login_date; + string note; + string officer_note; + string recruiter_description; + unsigned char* recruiter_picture_data; + int16 recruiter_picture_data_size; + int8 recruiting_show_adventure_class; + deque point_history; +}; + +struct GuildEvent { + int64 event_id; + int32 date; + int32 type; + string description; + int8 locked; + bool save_needed; +}; + +struct GuildBankEvent { + int64 event_id; + int32 date; + int32 type; + string description; +}; + +struct Bank { + string name; + deque events; +}; + +class Guild { +public: + Guild(); + virtual ~Guild(); + void SetID(int32 id_in) {id = id_in;} + void SetName(const char* name, bool send_packet = true); + void SetLevel(int8 level, bool send_packet = true); + void SetFormedDate(int32 formed_date_in) {formed_date = formed_date_in;} + void SetMOTD(const char *motd, bool send_packet = true); + int32 GetID() const {return id;} + const char* GetName() const {return name;} + int8 GetLevel() const {return level;} + int32 GetFormedDate() const {return formed_date;} + const char * GetMOTD() const {return motd;} + void SetEXPCurrent(int64 exp, bool send_packet = true); + void AddEXPCurrent(sint64 exp, bool send_packet = true); + int64 GetEXPCurrent() const {return exp_current;} + void SetEXPToNextLevel(int64 exp, bool send_packet = true); + int64 GetEXPToNextLevel() const {return exp_to_next_level;} + void SetRecruitingShortDesc(const char* new_desc, bool send_packet = true); + string GetRecruitingShortDesc() const {return recruiting_short_desc;} + void SetRecruitingFullDesc(const char* new_desc, bool send_packet = true); + string GetRecruitingFullDesc() const {return recruiting_full_desc;} + void SetRecruitingMinLevel(int8 new_level, bool send_packet = true); + int8 GetRecruitingMinLevel() const {return recruiting_min_level;} + void SetRecruitingPlayStyle(int8 new_play_style, bool send_packet = true); + int8 GetRecruitingPlayStyle() const {return recruiting_play_style;} + bool SetRecruitingDescTag(int8 index, int8 tag, bool send_packet = true); + int8 GetRecruitingDescTag(int8 index); + bool SetPermission(int8 rank, int8 permission, int8 value, bool send_packet = true); + int8 GetPermission(int8 rank, int8 permission); + bool SetEventFilter(int8 event_id, int8 category, int8 value, bool send_packet = true); + int8 GetEventFilter(int8 event_id, int8 category); + int32 GetNumUniqueAccounts(); + int32 GetNumRecruiters(); + int32 GetNextRecruiterID(); + int64 GetNextEventID(); + GuildMember* GetGuildMemberOnline(Client* client); + GuildMember* GetGuildMember(Player* player); + GuildMember* GetGuildMember(int32 character_id); + GuildMember* GetGuildMember(const char* player_name); + vector* GetGuildRecruiters(); + GuildEvent* GetGuildEvent(int64 event_id); + bool SetRankName(int8 rank, const char* name, bool send_packet = true); + const char* GetRankName(int8 rank); + bool SetRecruitingFlag(int8 flag, int8 value, bool send_packet = true); + int8 GetRecruitingFlag(int8 flag); + bool SetGuildRecruiter(Client* client, const char* name, bool value, bool send_packet = true); + bool SetGuildRecruiterDescription(Client* client, const char* description, bool send_packet = true); + bool ToggleGuildRecruiterAdventureClass(Client* client, bool send_packet = true); + bool SetGuildMemberNote(const char* name, const char* note, bool send_packet = true); + bool SetGuildOfficerNote(const char* name, const char* note, bool send_packet = true); + bool AddNewGuildMember(Client* client, const char* invited_by = 0, int8 rank = GUILD_RANK_RECRUIT); + bool AddGuildMember(GuildMember* guild_member); + void RemoveGuildMember(int32 character_id, bool send_packet = true); + void RemoveAllGuildMembers(); + bool DemoteGuildMember(Client* client, const char* name, bool send_packet = true); + bool PromoteGuildMember(Client* client, const char* name, bool send_packet = true); + bool KickGuildMember(Client* client, const char* name, bool send_packet = true); + bool InvitePlayer(Client* client, const char* name, bool send_packet = true); + bool AddPointsToAll(Client* client, float points, const char* comment = 0, bool send_packet = true); + bool AddPointsToAllOnline(Client* client, float points, const char* comment = 0, bool send_packet = true); + bool AddPointsToGroup(Client* client, float points, const char* comment = 0, bool send_packet = true); + bool AddPointsToRaid(Client* client, float points, const char* comment = 0, bool send_packet = true); + bool AddPointsToGuildMember(Client* client, float points, const char* name, const char* comment = 0, bool send_packet = true); + bool AddPointHistory(GuildMember* guild_member, int32 date, const char* modified_by, float points, const char* comment = 0, bool new_point_history = true); + void ViewGuildMemberPoints(Client* client, const char* name); + bool ChangeMemberFlag(Client* client, int8 member_flag, int8 value, bool send_packet = true); + bool UpdateGuildMemberInfo(Player* player); + bool UpdateGuildStatus(Player *player, int32 Status); + void AddGuildEvent(int64 event_id, int32 type, const char* description, int32 date, int8 locked); + void AddNewGuildEvent(int32 type, const char* description, int32 date, bool send_packet = true, ...); + bool LockGuildEvent(int64 event_id, bool lock, bool send_packet = true); + bool DeleteGuildEvent(int64 event_id, bool send_packet = true); + void SendGuildMOTD(Client* client); + void SendGuildEventList(); + void SendGuildEventList(Client* client); + void SendGuildEventDetails(); + void SendGuildEventDetails(Client* client); + void SendAllGuildEvents(); + void SendAllGuildEvents(Client* client); + void SendOldGuildEvent(Client* client, GuildEvent* guild_event); + void SendNewGuildEvent(GuildEvent* guild_event); + void SendNewGuildEvent(Client* client, GuildEvent* guild_event); + void SendGuildEventAction(int8 action, GuildEvent* guild_event); + void SendGuildEventAction(Client* client, int8 action, GuildEvent* guild_event); + void SendGuildBankEventList(); + void SendGuildBankEventList(Client* client); + void SendGuildUpdate(); + void SendGuildUpdate(Client* client); + void SendGuildMemberList(); + void SendGuildMemberList(Client* client); + void SendGuildMember(Player* player, bool include_zone = true); + void SendGuildMember(GuildMember* gm, bool include_zone = true); + void SendGuildMember(Client* client, GuildMember* gm, bool include_zone = true); + void SendGuildModification(float points, vector* character_ids); + void SendGuildModification(Client* client, float points, vector* character_ids); + void GuildMemberLogin(Client *client, bool first_login = false); + void GuildMemberLogoff(Player *player); + void SendGuildMemberLeave(int32 character_id); + void SendGuildMemberLeave(Client* client, int32 character_id); + void SendGuildRecruitingDetails(Client* client); + void SendGuildRecruitingImages(Client* client); + void SendGuildRecruiterInfo(Client* client, Player* player); + void HandleGuildSay(Client* sender, const char* message); + void HandleOfficerSay(Client* sender, const char* message); + void SendMessageToGuild(int8 event_type, const char* message, ...); + void SetSaveNeeded(bool val) {save_needed = val;} + bool GetSaveNeeded() {return save_needed;} + void SetMemberSaveNeeded(bool val) {member_save_needed = val;} + bool GetMemberSaveNeeded() {return member_save_needed;} + void SetEventsSaveNeeded(bool val) {events_save_needed = val;} + bool GetEventsSaveNeeded() {return events_save_needed;} + void SetRanksSaveNeeded(bool val) {ranks_save_needed = val;} + bool GetRanksSaveNeeded() {return ranks_save_needed;} + void SetEventFiltersSaveNeeded(bool val) {event_filters_save_needed = val;} + bool GetEventFiltersSaveNeeded() {return event_filters_save_needed;} + void SetPointsHistorySaveNeeded(bool val) {points_history_save_needed = val;} + bool GetPointsHistorySaveNeeded() {return points_history_save_needed;} + void SetRecruitingSaveNeeded(bool val) {recruiting_save_needed = val;} + bool GetRecruitingSaveNeeded() {return recruiting_save_needed;} + map* GetGuildMembers() {return &members;} + Mutex * GetGuildMembersMutex() {return &mMembers;} + deque* GetGuildEvents() {return &guild_events;} + MutexMap*>* GetPermissions() {return &permissions;} + MutexMap* GetGuildRanks() {return &ranks;} + MutexMap* GetRecruitingFlags() {return &recruiting_flags;} + MutexMap* GetRecruitingDescTags() {return &recruiting_desc_tags;} + int8 GetRecruitingLookingForPacketValue(); + static string GetEpicMobDeathMessage(const char* player_name, const char* mob_name); + +private: + int32 id; + char name[64]; + int8 level; + int32 formed_date; + char motd[256]; + int64 exp_current; + int64 exp_to_next_level; + string recruiting_short_desc; + string recruiting_full_desc; + int8 recruiting_min_level; + int8 recruiting_play_style; + MutexMap ranks; + map members; + Mutex mMembers; + deque guild_events; + MutexMap*> permissions; + MutexMap*> event_filters; + MutexMap recruiting_flags; + MutexMap recruiting_desc_tags; + Bank banks[4]; + int32 GetPermissionsPacketValue(int8 rank, int32 start, int32 end); + int32 GetEventFilterPacketValue(int8 category, int32 start, int32 end); + bool save_needed; + bool member_save_needed; + bool events_save_needed; + bool event_filters_save_needed; + bool ranks_save_needed; + bool points_history_save_needed; + bool recruiting_save_needed; +}; + +class GuildList { +public: + GuildList(); + virtual ~GuildList(); + bool AddGuild(Guild* guild); + Guild* GetGuild(int32 guild_id); + Guild* GetGuild(const char* guild_name); + bool RemoveGuild(Guild* guild, bool delete_data = false); + bool RemoveGuild(int32 guild_id, bool delete_data = false); + int32 GetNumGuilds() {return guild_list.size();} + MutexMap* GetGuilds() {return &guild_list;} + +private: + MutexMap guild_list; +}; + +#endif diff --git a/EQ2/source/WorldServer/Guilds/GuildDB.cpp b/EQ2/source/WorldServer/Guilds/GuildDB.cpp new file mode 100644 index 000000000..13075af01 --- /dev/null +++ b/EQ2/source/WorldServer/Guilds/GuildDB.cpp @@ -0,0 +1,580 @@ +/* + EQ2Emulator: Everquest II Server Emulator + Copyright (C) 2007 EQ2EMulator Development Team (http://www.eq2emulator.net) + + This file is part of EQ2Emulator. + + EQ2Emulator is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + EQ2Emulator is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with EQ2Emulator. If not, see . +*/ +#ifdef WIN32 + #include + #include +#endif +#include +#include +#include +#include +#include +#include +#include +#include "../../common/Log.h" +#include "../WorldDatabase.h" +#include "Guild.h" + +extern GuildList guild_list; +extern RuleManager rule_manager; + +void WorldDatabase::LoadGuilds() { + int32 num_guilds = 0; + Query query; + MYSQL_ROW row; + MYSQL_RES* result = query.RunQuery2(Q_SELECT, "SELECT `id`, `name`, `motd`, `level`, `xp`, `xp_needed`, `formed_on` FROM `guilds`"); + while (result && (row = mysql_fetch_row(result))) { + LogWrite(GUILD__DEBUG, 1, "Guilds", "%u. %s", atoul(row[0]), row[1]); + Guild* guild = new Guild; + guild->SetID(atoul(row[0])); + guild->SetName(row[1]); + if (row[2]) + guild->SetMOTD(row[2], false); + guild->SetLevel(atoi(row[3]), false); + guild->SetEXPCurrent(atoul(row[4]), false); + guild->SetEXPToNextLevel(atoul(row[5]), false); + guild->SetFormedDate(atoul(row[6])); + + LogWrite(GUILD__DEBUG, 3, "Guilds", "\tLoaded %i guild members.", LoadGuildMembers(guild)); + LogWrite(GUILD__DEBUG, 3, "Guilds", "\tLoading Guild Ranks..."); + LoadGuildRanks(guild); + LogWrite(GUILD__DEBUG, 3, "Guilds", "\tLoading Guild Event Filters..."); + LoadGuildEventFilters(guild); + LogWrite(GUILD__DEBUG, 3, "Guilds", "\tLoading Guild Events..."); + LoadGuildEvents(guild); + LogWrite(GUILD__DEBUG, 3, "Guilds", "\tLoading Guild Recruiting..."); + LoadGuildRecruiting(guild); + guild_list.AddGuild(guild); + num_guilds++; + } + LogWrite(GUILD__INFO, 0, "Guilds", "\tLoaded %u Guild(s)", num_guilds); +} + +int32 WorldDatabase::LoadGuildMembers(Guild* guild) { + int32 num_members = 0; + Query query; + MYSQL_ROW row; + char *name; + int32 char_id; + MYSQL_RES* result = query.RunQuery2(Q_SELECT, "SELECT `char_id`, `recruiter_id`, `guild_status`, `points`, `rank_id`, `member_flags`, `join_date`, `note`, `officer_note`, `recruiting_message`, `recruiter_picture_data` FROM `guild_members` WHERE `guild_id`=%u", guild->GetID()); + + while (result && (row = mysql_fetch_row(result))) { + char_id = atoul(row[0]); + if (!(name = GetCharacterName(char_id))) + continue; + + GuildMember* gm = new GuildMember; + gm->character_id = char_id; + gm->recruiter_id = atoul(row[1]); + gm->guild_status = atoul(row[2]); + gm->points = atof(row[3]); + gm->rank = atoi(row[4]); + gm->member_flags = atoi(row[5]); + gm->join_date = atoul(row[6]); + if (row[7]) + gm->note = string(row[7]); + if (row[8]) + gm->officer_note = string(row[8]); + if (row[9]) + gm->recruiter_description = string(row[9]); + int16 recruiter_picture_data_size = 0; + if (row[10] && (recruiter_picture_data_size = strlen(row[10])) > 0) { + gm->recruiter_picture_data_size = recruiter_picture_data_size / 2; + gm->recruiter_picture_data = new unsigned char[gm->recruiter_picture_data_size]; + unsigned char* cpy = gm->recruiter_picture_data; + const char* str = row[10]; + char high, low; + for (const char* ptr = str; *ptr; ptr += 2) { + high = tolower(*ptr); + low = tolower(*(ptr+1)); + if (isdigit(high)) + high = high - '0'; + else if (high >= 'a' && high <= 'f') + high = (high - 'a') + 10; + else { + LogWrite(GUILD__ERROR, 0, "Guilds", "Guild mate with id %u has corrupt picture data. Data not loading.", gm->character_id); + safe_delete_array(gm->recruiter_picture_data); + gm->recruiter_picture_data_size = 0; + break; + } + if (isdigit(low)) + low = low - '0'; + else if (low >= 'a' && low <= 'f') + low = (low - 'a') + 10; + else { + LogWrite(GUILD__ERROR, 0, "Guilds", "Guild mate with id %u has corrupt picture data. Data not loading.", gm->character_id); + safe_delete_array(gm->recruiter_picture_data); + gm->recruiter_picture_data_size = 0; + break; + } + *cpy++ = low | (high << 4); + } + /*for (int16 i = 0; i < gm->recruiter_picture_data_size; i++) + if (i<10) + printf("int:%u hex:%x\n", gm->recruiter_picture_data[i], gm->recruiter_picture_data[i]);*/ + } + else { + gm->recruiter_picture_data_size = 0; + gm->recruiter_picture_data = 0; + } + strncpy(gm->name, name, sizeof(gm->name)); + gm->account_id = GetCharacterAccountID(char_id); + gm->adventure_class = GetCharacterClass(char_id); + gm->adventure_level = GetCharacterLevel(char_id); + gm->tradeskill_class = 0; + gm->tradeskill_level = 0; + gm->last_login_date = GetCharacterTimeStamp(char_id); + gm->zone = GetZoneDescription(GetCharacterCurrentZoneID(char_id)); + gm->recruiting_show_adventure_class = 1; + LoadGuildPointsHistory(guild, gm); + guild->AddGuildMember(gm); + safe_delete_array(name); + num_members++; + } + return num_members; +} + +void WorldDatabase::LoadGuildEvents(Guild* guild) { + if (guild) { + Query query; + MYSQL_ROW row; + MYSQL_RES* result = query.RunQuery2(Q_SELECT, "SELECT `event_id`, `event_date`, `event_type`, `description`, `locked` FROM `guild_events` WHERE `guild_id`=%u AND `display`=1 AND `archived`=0 ORDER BY `event_date` DESC LIMIT 0, %u", guild->GetID(), GUILD_MAX_EVENTS); + while (result && (row = mysql_fetch_row(result))) + guild->AddGuildEvent(atoi64(row[0]), atoul(row[2]), row[3], atoul(row[1]), atoi(row[4])); + } +} + +void WorldDatabase::LoadGuildRanks(Guild* guild) { + + if (guild) { + LogWrite(GUILD__DEBUG, 3, "Guilds", "Loading Ranks for guild id: %u", guild->GetID()); + Query query; + MYSQL_ROW row; + MYSQL_RES* result = query.RunQuery2(Q_SELECT, "SELECT `rank_id`, `rank_name`, `permission1`, `permission2` FROM `guild_ranks` WHERE `guild_id`=%u", guild->GetID()); + while (result && (row = mysql_fetch_row(result))) { + int8 rank_id = atoi(row[0]); + int32 permission1 = atoul(row[2]); + int32 permission2 = atoul(row[3]); + guild->SetRankName(rank_id, row[1], false); + LogWrite(GUILD__DEBUG, 5, "Guilds", "\tLoading rank_id: %i", rank_id); + LogWrite(GUILD__DEBUG, 5, "Guilds", "\tPermission1: %ul, Permission2: %ul", permission1, permission2); + for (int32 i = 0; i <= 44; i++) { + int32 bitwise_val; + if (i < 32) { + bitwise_val = (int32)pow(2.0, (double)(i)); + guild->SetPermission(rank_id, i, permission1 & bitwise_val ? 1 : 0, false); + LogWrite(GUILD__DEBUG, 5, "Guilds", "\tSetting Permission %u to %u", i, permission1 & bitwise_val ? 1 : 0); + } + else { + bitwise_val = (int32)pow(2.0, (double)(i - 32)); + guild->SetPermission(rank_id, i, permission2 & bitwise_val ? 1 : 0, false); + LogWrite(GUILD__DEBUG, 5, "Guilds", "\tSetting Permission %u to %u", i, permission2 & bitwise_val ? 1 : 0); + } + } + } + } +} + +void WorldDatabase::LoadGuildEventFilters(Guild* guild) { + if (guild) { + Query query; + MYSQL_ROW row; + bool event_filter_added = false; + MYSQL_RES* result = query.RunQuery2(Q_SELECT, "SELECT `event_id`, `retain`, `broadcast` FROM `guild_event_filters` WHERE `guild_id`=%u", guild->GetID()); + while (result && (row = mysql_fetch_row(result))) { + guild->SetEventFilter(atoi(row[0]), GUILD_EVENT_FILTER_CATEGORY_RETAIN_HISTORY, atoi(row[1]), false); + guild->SetEventFilter(atoi(row[0]), GUILD_EVENT_FILTER_CATEGORY_BROADCAST, atoi(row[2]), false); + if (!event_filter_added) + event_filter_added = true; + } + + if (!event_filter_added) + LoadGuildDefaultEventFilters(guild); + } +} + +void WorldDatabase::LoadGuildPointsHistory(Guild* guild, GuildMember* guild_member) { + Query query; + MYSQL_ROW row; + MYSQL_RES* result; + + assert(guild); + assert(guild_member); + + result = query.RunQuery2(Q_SELECT, "SELECT `points_date`, `modified_by`, `comment`, `points` FROM `guild_points_history` WHERE `guild_id`=%u AND `char_id`=%u ORDER BY `points_date` DESC", guild->GetID(), guild_member->character_id); + while (result && (row = mysql_fetch_row(result))) + guild->AddPointHistory(guild_member, atoul(row[0]), row[1], atof(row[3]), row[2], false); +} + +void WorldDatabase::LoadGuildRecruiting(Guild* guild) { + if (guild) { + Query query; + MYSQL_ROW row; + MYSQL_RES* result = query.RunQuery2(Q_SELECT, "SELECT `short_desc`, `full_desc`, `min_level`, `play_style`, `looking_for`, `descriptive_tag1`, `descriptive_tag2`, `descriptive_tag3`, `descriptive_tag4` FROM `guild_recruiting` WHERE `guild_id`=%u", guild->GetID()); + while (result && (row = mysql_fetch_row(result))) { + if (row[0]) + guild->SetRecruitingShortDesc(row[0], false); + if (row[1]) + guild->SetRecruitingFullDesc(row[1], false); + guild->SetRecruitingMinLevel(atoi(row[2]), false); + guild->SetRecruitingPlayStyle(atoi(row[3]), false); + for (int32 i = 0; i <= 5; i++) { + int32 bitwise_val = (int32)pow(2.0, (double)i); + guild->SetRecruitingFlag(i, atoi(row[4]) & bitwise_val ? 1 : 0, false); + } + guild->SetRecruitingDescTag(0, atoi(row[5]), false); + guild->SetRecruitingDescTag(1, atoi(row[6]), false); + guild->SetRecruitingDescTag(2, atoi(row[7]), false); + guild->SetRecruitingDescTag(3, atoi(row[8]), false); + } + } +} + +void WorldDatabase::SaveGuild(Guild* guild, bool new_guild) { + Query query; + + assert(guild); + + if (new_guild) { + LogWrite(GUILD__DEBUG, 3, "Guilds", "Saving NEW Guild '%s' (%u) data...", guild->GetName(), guild->GetID()); + query.RunQuery2(Q_INSERT, "INSERT INTO `guilds` (`name`, `motd`, `level`, `xp`, `xp_needed`, `formed_on`) " + "VALUES ('%s', '%s', %i, %llu, %llu, %u)", + getSafeEscapeString(guild->GetName()).c_str(), getSafeEscapeString(guild->GetMOTD()).c_str(), guild->GetLevel(), guild->GetEXPCurrent(), guild->GetEXPToNextLevel(), guild->GetFormedDate()); + guild->SetID(query.GetLastInsertedID()); + } + else { + LogWrite(GUILD__DEBUG, 3, "Guilds", "Saving Guild '%s' (%u) data...", guild->GetName(), guild->GetID()); + query.RunQuery2(Q_UPDATE, "UPDATE `guilds` " + "SET `name`='%s', `motd`='%s', `level`=%i, `xp`=%llu, `xp_needed`=%llu, `formed_on`=%u WHERE `id`=%u", + getSafeEscapeString(guild->GetName()).c_str(), getSafeEscapeString(guild->GetMOTD()).c_str(), guild->GetLevel(), guild->GetEXPCurrent(), guild->GetEXPToNextLevel(), guild->GetFormedDate(), guild->GetID()); + } + guild->SetSaveNeeded(false); +} + +void WorldDatabase::SaveGuildMembers(Guild* guild) { + map* members; + map::iterator itr; + Mutex *mMembers; + GuildMember *gm; + Query query, query2; + + assert(guild); + + members = guild->GetGuildMembers(); + mMembers = guild->GetGuildMembersMutex(); + + mMembers->readlock(__FUNCTION__, __LINE__); + for (itr = members->begin(); itr != members->end(); itr++) { + gm = itr->second; + LogWrite(GUILD__DEBUG, 5, "Guilds", "Saving Guild Member '%s' (%u) data...", gm->name, gm->character_id); + query.RunQuery2(Q_INSERT, "INSERT INTO `guild_members` (`guild_id`, `char_id`, `recruiter_id`, `guild_status`, `points`, `rank_id`, `member_flags`, `join_date`, `note`, `officer_note`, `recruiting_message`, `recruiter_picture_data`) VALUES (%u, %u, %u, %u, %f, %u, %u, %u, '%s', '%s', '%s', NULL) ON DUPLICATE KEY UPDATE `guild_id`=%u, `recruiter_id`=%u, `guild_status`=%u, `points`=%f, `rank_id`=%u, `member_flags`=%u, `join_date`=%u, `note`='%s', `officer_note`='%s', `recruiting_message`='%s', `recruiter_picture_data`=NULL", guild->GetID(), gm->character_id, gm->recruiter_id, gm->guild_status, gm->points, gm->rank, gm->member_flags, gm->join_date, getSafeEscapeString(gm->note.c_str()).c_str(), getSafeEscapeString(gm->officer_note.c_str()).c_str(), getSafeEscapeString(gm->recruiter_description.c_str()).c_str(), guild->GetID(), gm->recruiter_id, gm->guild_status, gm->points, gm->rank, gm->member_flags, gm->join_date, getSafeEscapeString(gm->note.c_str()).c_str(), getSafeEscapeString(gm->officer_note.c_str()).c_str(), getSafeEscapeString(gm->recruiter_description.c_str()).c_str()); + if (gm->recruiter_picture_data_size > 0 && gm->recruiter_picture_data) { + stringstream ss_hex; + stringstream ss_query; + ss_hex.flags(ios::hex); + for (int16 i = 0; i < gm->recruiter_picture_data_size; i++) + ss_hex << setfill('0') << setw(2) << (int)gm->recruiter_picture_data[i]; + ss_query << "UPDATE `guild_members` SET `recruiter_picture_data`='" << ss_hex.str() << "' WHERE `char_id`=" << gm->character_id; + query2.RunQuery2(ss_query.str(), Q_UPDATE); + } + } + guild->SetMemberSaveNeeded(false); + mMembers->releasereadlock(__FUNCTION__, __LINE__); +} + +void WorldDatabase::SaveGuildEvents(Guild* guild) { + if (guild) { + deque* guild_events = guild->GetGuildEvents(); + deque::iterator itr; + for (itr = guild_events->begin(); itr != guild_events->end(); itr++) { + GuildEvent* ge = *itr; + if (!ge->save_needed) + continue; + + LogWrite(GUILD__DEBUG, 5, "Guilds", "Saving Guild Events for guild '%s' (%u)...", guild->GetName(), guild->GetID()); + + Query query; + query.RunQuery2(Q_INSERT, "INSERT INTO `guild_events` (`guild_id`, `event_id`, `event_date`, `event_type`, `description`, `display`, `locked`, `archived`) " + "VALUES (%u, %llu, %u, %u, '%s', 1, %u, 0) " + "ON DUPLICATE KEY UPDATE `locked`=%i", + guild->GetID(), ge->event_id, ge->date, ge->type, getSafeEscapeString(ge->description.c_str()).c_str(), ge->locked, ge->locked); + ge->save_needed = false; + } + guild->SetEventsSaveNeeded(false); + } +} + +void WorldDatabase::SaveGuildRanks(Guild* guild) { + if (guild) { + MutexMap*>* permissions = guild->GetPermissions(); + MutexMap* ranks = guild->GetGuildRanks(); + MutexMap::iterator ranks_itr = ranks->begin(); + while (ranks_itr.Next()) { + int32 permission1 = 0; + int32 permission2 = 0; + for (int32 i = 0; i <= 44; i++) { + if (permissions->count(ranks_itr.first) > 0 && permissions->Get(ranks_itr.first)->count(i) > 0 && permissions->Get(ranks_itr.first)->Get(i)) { + if (i < 32) + permission1 += (int32)pow(2.0, (double)i); + else + permission2 += (int32)pow(2.0, (double)(i - 32)); + } + } + LogWrite(GUILD__DEBUG, 5, "Guilds", "Saving Guild Ranks for guild '%s' (%u)...", guild->GetName(), guild->GetID()); + Query query; + query.RunQuery2(Q_INSERT, "INSERT INTO `guild_ranks` (`guild_id`, `rank_id`, `rank_name`, `permission1`, `permission2`) " + "VALUES (%u, %u, '%s', %u, %u) " + "ON DUPLICATE KEY UPDATE `rank_name`='%s', `permission1`=%u, permission2=%u", + guild->GetID(), ranks_itr.first, getSafeEscapeString(ranks_itr.second.c_str()).c_str(), permission1, permission2, getSafeEscapeString(ranks_itr.second.c_str()).c_str(), permission1, permission2); + } + guild->SetRanksSaveNeeded(false); + } +} + +void WorldDatabase::SaveGuildEventFilters(Guild* guild) { + int32 i; + assert(guild); + + for (i = 0; i < 93; i++) { + LogWrite(GUILD__DEBUG, 5, "Guilds", "Saving Guild EventFilters for guild '%s' (%u)...", guild->GetName(), guild->GetID()); + Query query; + query.RunQuery2(Q_INSERT, "INSERT INTO `guild_event_filters` (`guild_id`, `event_id`, `retain`, `broadcast`) " + "VALUES (%u, %u, %u, %u) " + "ON DUPLICATE KEY UPDATE `retain`=%u, `broadcast`=%u", + guild->GetID(), i, guild->GetEventFilter(i, GUILD_EVENT_FILTER_CATEGORY_RETAIN_HISTORY), guild->GetEventFilter(i, GUILD_EVENT_FILTER_CATEGORY_BROADCAST), guild->GetEventFilter(i, GUILD_EVENT_FILTER_CATEGORY_RETAIN_HISTORY), guild->GetEventFilter(i, GUILD_EVENT_FILTER_CATEGORY_BROADCAST)); + } + + guild->SetEventFiltersSaveNeeded(false); +} + +void WorldDatabase::SaveGuildPointsHistory(Guild* guild) { + map *members; + map::iterator itr; + Mutex *mMembers; + deque *ph_list; + deque::iterator ph_itr; + PointHistory* ph; + + assert (guild); + + members = guild->GetGuildMembers(); + mMembers = guild->GetGuildMembersMutex(); + + mMembers->readlock(__FUNCTION__, __LINE__); + for (itr = members->begin(); itr != members->end(); itr++) { + ph_list = &itr->second->point_history; + + for (ph_itr = ph_list->begin(); ph_itr != ph_list->end(); ph_itr++) { + ph = *ph_itr; + if (!ph->saved_needed) + continue; + + LogWrite(GUILD__DEBUG, 5, "Guilds", "Saving Guild Point History for guild '%s' (%u)...", guild->GetName(), guild->GetID()); + Query query; + query.RunQuery2(Q_INSERT, "INSERT INTO `guild_points_history` (`guild_id`, `char_id`, `points_date`, `modified_by`, `comment`, `points`) " + "VALUES (%u, %u, %u, '%s', '%s', %f)", + guild->GetID(), itr->first, ph->date, getSafeEscapeString(ph->modified_by.c_str()).c_str(), getSafeEscapeString(ph->comment.c_str()).c_str(), ph->points); + ph->saved_needed = false; + } + } + guild->SetPointsHistorySaveNeeded(false); + mMembers->releasereadlock(__FUNCTION__, __LINE__); +} + +void WorldDatabase::SaveGuildRecruiting(Guild* guild) { + if (guild) { + LogWrite(GUILD__DEBUG, 3, "Guilds", "Saving Recruiting info for guild '%s' (%u)...", guild->GetName(), guild->GetID()); + Query query; + query.RunQuery2(Q_INSERT, "INSERT INTO `guild_recruiting` (`guild_id`, `short_desc`, `full_desc`, `min_level`, `play_style`, `looking_for`, `descriptive_tag1`, `descriptive_tag2`, `descriptive_tag3`, `descriptive_tag4`) VALUES (%u, '%s', '%s', %u, %u, %u, %u, %u, %u, %u) ON DUPLICATE KEY UPDATE `short_desc`='%s', `full_desc`='%s', `min_level`=%u, `play_style`=%u, `looking_for`=%u, `descriptive_tag1`=%u, `descriptive_tag2`=%u, `descriptive_tag3`=%u, `descriptive_tag4`=%u", guild->GetID(), getSafeEscapeString(guild->GetRecruitingShortDesc().c_str()).c_str(), getSafeEscapeString(guild->GetRecruitingFullDesc().c_str()).c_str(), guild->GetRecruitingMinLevel(), guild->GetRecruitingPlayStyle(), guild->GetRecruitingLookingForPacketValue(), guild->GetRecruitingDescTag(0), guild->GetRecruitingDescTag(1), guild->GetRecruitingDescTag(2), guild->GetRecruitingDescTag(3), getSafeEscapeString(guild->GetRecruitingShortDesc().c_str()).c_str(), getSafeEscapeString(guild->GetRecruitingFullDesc().c_str()).c_str(), guild->GetRecruitingMinLevel(), guild->GetRecruitingPlayStyle(), guild->GetRecruitingLookingForPacketValue(), guild->GetRecruitingDescTag(0), guild->GetRecruitingDescTag(1), guild->GetRecruitingDescTag(2), guild->GetRecruitingDescTag(3)); + guild->SetRecruitingSaveNeeded(false); + } +} + +void WorldDatabase::DeleteGuild(Guild* guild) { + if (guild) { + LogWrite(GUILD__DEBUG, 3, "Guilds", "Deleting Guild '%s' (%u)...", guild->GetName(), guild->GetID()); + Query query; + query.RunQuery2(Q_DELETE, "DELETE FROM `guilds` WHERE `id`=%u", guild->GetID()); + } +} + +void WorldDatabase::DeleteGuildMember(Guild* guild, int32 character_id) { + if (guild) { + LogWrite(GUILD__DEBUG, 3, "Guilds", "Deleting Character (%u) from guild '%s' (%u)...", character_id, guild->GetName(), guild->GetID()); + Query query; + query.RunQuery2(Q_DELETE, "DELETE FROM `guild_members` WHERE `guild_id`=%u AND `char_id`=%u", guild->GetID(), character_id); + } +} + +void WorldDatabase::DeleteGuildEvent(Guild* guild, int64 event_id) { + if (guild) { + LogWrite(GUILD__DEBUG, 3, "Guilds", "Deleting Event (%u) from guild '%s' (%u)...", event_id, guild->GetName(), guild->GetID()); + Query query; + query.RunQuery2(Q_DELETE, "DELETE FROM `guild_events` WHERE `guild_id`=%u AND `event_id`=%u", guild->GetID(), event_id); + } +} + +void WorldDatabase::DeleteGuildPointHistory(Guild* guild, int32 character_id, PointHistory* point_history) { + if (guild && point_history) { + LogWrite(GUILD__DEBUG, 3, "Guilds", "Deleting PointHistory for Character (%u) from guild '%s' (%u)...", character_id, guild->GetName(), guild->GetID()); + Query query; + query.RunQuery2(Q_DELETE, "DELETE FROM `guild_points_history` WHERE `guild_id`=%u AND `char_id`=%u AND `points_date`=%u", guild->GetID(), character_id, point_history->date); + } +} + +void WorldDatabase::ArchiveGuildEvent(Guild* guild, GuildEvent* guild_event) { + if (guild && guild_event) { + LogWrite(GUILD__DEBUG, 3, "Guilds", "Archiving Event (%u) for guild '%s' (%u)...", guild_event->event_id, guild->GetName(), guild->GetID()); + Query query; + query.RunQuery2(Q_UPDATE, "UPDATE `guild_events` SET `archived`=1 WHERE `guild_id`=%u AND `event_id`=%u", guild->GetID(), guild_event->event_id); + } +} + +void WorldDatabase::SaveHiddenGuildEvent(Guild* guild, GuildEvent* guild_event) { + if (guild && guild_event) { + LogWrite(GUILD__DEBUG, 3, "Guilds", "Saving Hidden Event (%u) for guild '%s' (%u)...", guild_event->event_id, guild->GetName(), guild->GetID()); + Query query; + query.RunQuery2(Q_INSERT, "INSERT INTO `guild_events` (`guild_id`, `event_id`, `event_date`, `event_type`, `description`, `display`, `locked`, `archived`) VALUES (%u, %u, %u, %u, '%s', 0, %u, 0)", guild->GetID(), guild_event->event_id, guild_event->type, guild_event->date, getSafeEscapeString(guild_event->description.c_str()).c_str(), guild_event->locked); + } +} + +int32 WorldDatabase::GetGuildIDByCharacterID(int32 char_id) { + if(char_id > 0) + { + LogWrite(GUILD__DEBUG, 3, "Guilds", "Look up guild ID for player ID: '%u'...", char_id); + Query query; + MYSQL_ROW row; + MYSQL_RES* result = query.RunQuery2(Q_SELECT, "SELECT name FROM guilds, guild_members WHERE guilds.id = guild_members.guild_id AND char_id = %u ", char_id); + while (result && (row = mysql_fetch_row(result))) { + if( row[0] ) + return atoul(row[0]); + } + } + return 0; +} + +void WorldDatabase::LoadGuildDefaultRanks(Guild* guild) { + if (guild) { + LogWrite(GUILD__DEBUG, 3, "Guilds", "Load/Set Default Ranks for guild '%s' (%u)...", guild->GetName(), guild->GetID()); + Query query; + MYSQL_ROW row; + MYSQL_RES* result = query.RunQuery2(Q_SELECT, "SELECT DISTINCT `rank_id`, `rank_name`, `permission1`, `permission2` FROM `guild_ranks_defaults`"); + while (result && (row = mysql_fetch_row(result))) { + int8 rank_id = atoi(row[0]); + int32 permission1 = atoul(row[2]); + int32 permission2 = atoul(row[3]); + + LogWrite(GUILD__DEBUG, 3, "Guilds", "\tSetting RankID %i, permission1: %u, permission2: %u", rank_id, permission1, permission2); + + guild->SetRankName(rank_id, row[1], false); + for (int32 i = 0; i <= 44; i++) { + int32 bitwise_val; + if (i < 32) { + bitwise_val = (int32)pow(2.0, (double)i); + guild->SetPermission(rank_id, i, permission1 & bitwise_val ? 1 : 0, false); + } + else { + bitwise_val = (int32)pow(2.0, (double)(i - 32)); + guild->SetPermission(rank_id, i, permission2 & bitwise_val ? 1 : 0, false); + } + } + } + } +} + +void WorldDatabase::LoadGuildDefaultEventFilters(Guild* guild) { + if (guild) { + LogWrite(GUILD__DEBUG, 3, "Guilds", "Load/Set Default Event Filters for guild '%s' (%u)...", guild->GetName(), guild->GetID()); + Query query; + MYSQL_ROW row; + MYSQL_RES* result = query.RunQuery2(Q_SELECT, "SELECT DISTINCT `event_id`, `retain`, `broadcast` FROM `guild_event_defaults`"); + while (result && (row = mysql_fetch_row(result))) { + + LogWrite(GUILD__DEBUG, 3, "Guilds", "\tSetting Event Filter %i, retain: %i, broadcast: %i", atoi(row[0]), atoi(row[1]), atoi(row[2])); + + guild->SetEventFilter(atoi(row[0]), GUILD_EVENT_FILTER_CATEGORY_RETAIN_HISTORY, atoi(row[1]), false); + guild->SetEventFilter(atoi(row[0]), GUILD_EVENT_FILTER_CATEGORY_BROADCAST, atoi(row[2]), false); + } + } +} + +bool WorldDatabase::AddNewPlayerToServerGuild(int32 account_id, int32 char_id) +{ + // Check if this servers rule allow auto-joining Server guild + int8 autojoin = rule_manager.GetGlobalRule(R_World, GuildAutoJoin)->GetInt8(); + if( autojoin ) + { + // if so, what is the guild ID of the default server guild? + int32 guild_id = rule_manager.GetGlobalRule(R_World, GuildAutoJoinID)->GetInt32(); + Guild* guild = 0; + guild = guild_list.GetGuild(guild_id); + if (!guild) + { + // guild was not valid, abort! + LogWrite(GUILD__ERROR, 1, "Guilds", "Guild ID %u not found! Cannot autojoin members!", guild_id); + return false; + } + else + { + // guild was found, so what default Rank to make the players? if not set, use 7 (recruit) + int8 rank_id = rule_manager.GetGlobalRule(R_World, GuildAutoJoinDefaultRankID)->GetInt8(); + if(!rank_id) + rank_id = 7; + + // assuming all is good, insert the new guild member here... + GuildMember *gm = new GuildMember(); + + gm->account_id = account_id; + gm->character_id = char_id; + char* name = GetCharacterName(gm->character_id); + strncpy(gm->name, name, sizeof(gm->name)); + gm->guild_status = 0; + gm->points = 0.0; + //gm->adventure_class = player->GetAdventureClass(); + //gm->adventure_level = player->GetLevel(); + //gm->tradeskill_class = player->GetTradeskillClass(); + //gm->tradeskill_level = player->GetTSLevel(); + gm->rank = rank_id; + gm->zone = string(""); + gm->join_date = Timer::GetUnixTimeStamp(); + gm->last_login_date = gm->join_date; + gm->recruiter_id = 0; + gm->member_flags = GUILD_MEMBER_FLAGS_NOTIFY_LOGINS; + gm->recruiting_show_adventure_class = 1; + gm->recruiter_picture_data_size = 0; + gm->recruiter_picture_data = 0; + + guild->AddGuildMember(gm); + + Query query; + query.RunQuery2(Q_INSERT, "INSERT INTO `guild_members` (`guild_id`, `char_id`, `join_date`, `rank_id`) VALUES (%u, %u, %u, %i)", + guild_id, char_id, gm->join_date, rank_id); + + LogWrite(GUILD__DEBUG, 3, "Guilds", "Auto-join player (%u) to server guild '%s' (%u) at rank %i...", char_id, guild->GetName(), guild_id, rank_id); + + // success! + return true; + } + } + // do not auto-join server guild + return false; +} + + diff --git a/EQ2/source/WorldServer/HeroicOp/HeroicOp.cpp b/EQ2/source/WorldServer/HeroicOp/HeroicOp.cpp new file mode 100644 index 000000000..6d4800c8d --- /dev/null +++ b/EQ2/source/WorldServer/HeroicOp/HeroicOp.cpp @@ -0,0 +1,302 @@ +/* + EQ2Emulator: Everquest II Server Emulator + Copyright (C) 2007 EQ2EMulator Development Team (http://www.eq2emulator.net) + + This file is part of EQ2Emulator. + + EQ2Emulator is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + EQ2Emulator is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with EQ2Emulator. If not, see . +*/ + +#include "HeroicOp.h" +#include "../../common/Log.h" +#include "../Rules/Rules.h" + +extern MasterHeroicOPList master_ho_list; +extern RuleManager rule_manager; + +HeroicOP::HeroicOP() { + m_complete = 0; + m_currentStage = 0; + m_wheel = 0; + m_target = 0; + m_startTime = 0; + m_totalTime = 0; + m_shifted = false; + for (int8 i = 0; i < 6; i++) + countered[i] = 0; +} + +HeroicOP::~HeroicOP() { + starters.clear(); +} + +void HeroicOP::SetWheel(HeroicOPWheel* val) { + if (!m_wheel) + m_wheel = val; + else + LogWrite(SPELL__ERROR, 0, "HO", "Attempted to set the wheel on a heroic op with a wheel already set"); +} + +void HeroicOP::SetTarget(int32 val) { + m_target = val; +} + +bool HeroicOP::UpdateHeroicOP(int16 icon) { + bool ret = false; + vector::iterator itr; + vector::iterator> temp; + HeroicOPStarter* starter = 0; + + // If no wheel is set we are dealing with a starter chain still. + if (!m_wheel) { + // Loop through the starter chains + for (itr = starters.begin(); itr != starters.end(); itr++) { + starter = *itr; + // See if the icon matches the ability at our current stage, if not add it to a list to be removed + if (starter->abilities[m_currentStage] == icon) + ret = true; + else + temp.push_back(itr); + } + + if (ret) { + // ret = true so we had a match, first thing to do is remove those that didn't match + vector::iterator>::iterator remove_itr; + for (remove_itr = temp.begin(); remove_itr != temp.end(); remove_itr++) + starters.erase(*remove_itr); + + // now advance the current stage + m_currentStage++; + + // Temp pointer to hold the completed chain, if any + HeroicOPStarter* complete_starter = 0; + + // now loop through those that are left and check the next stage abilities for a 0xFFFF + for (itr = starters.begin(); itr != starters.end(); itr++) { + starter = *itr; + // Found one that is 0xFFFF, means the starter chain is done, get a wheel and reset the stage to 0 + if ((starter->abilities[m_currentStage] = 0xFFFF)) { + // reset the stage + ResetStage(); + // geth the wheel + m_wheel = master_ho_list.GetWheel(starter); + // store the starter chain that is completed + complete_starter = starter; + // set the start time to now + SetStartTime(Timer::GetCurrentTime2()); + // set the total time to complete the real to was the admin set in rules (default 10.0f) + SetTotalTime(rule_manager.GetGlobalRule(R_Zone, HOTime)->GetFloat()); + // We set a wheel so we are done, kill the loop + break; + } + } + + // Check to see if the completed start chain pointer was set + if (complete_starter) { + // clear the starter list + starters.clear(); + // add the completed starter back in, we do this in case we need this starter again we can just do starters.at(0), for example shifting the wheel + starters.push_back(complete_starter); + } + } + } + else { + // Wheel was set so we need to check the order it needs to be completed in. + if (m_wheel->order == 0) { + // No order + + // Flag used to see if we can shift the wheel + bool can_shift = true; + // Check the icons and flag the ability as countered if there is a match + for (int8 i = 0; i < 6; i++) { + if (countered[i] == 1) { + // progress made on this wheel so we can't shift it + can_shift = false; + } + if (m_wheel->abilities[i] == icon) { + countered[i] = 1; + ret = true; + } + } + + if (ret) { + // As we found a match lets loop through to see if we completed the ho + bool finished = true; + for (int8 i = 0; i < 6; i++) { + // if the ability is not 0xFFFF and countered is 0 then we still have more to go + if (m_wheel->abilities[i] != 0xFFFF && countered[i] == 0) { + finished = false; + break; + } + } + + // is we finished the ho set the complete flag + if (finished) + SetComplete(2); + } + + if (!ret && can_shift && m_wheel->shift_icon == icon) { + // can shift, icon matched shift icon, and no progress made + ret = ShiftWheel(); + } + } + else { + // In order + + // Check to see if we can shift the wheel + if (countered[0] == 0 && icon == m_wheel->shift_icon) { + // Can only shift the icon if nothing has completed yet (countered[0] = 0) + ret = ShiftWheel(); + } + // Check the current stage and compare it to the icon + else if (m_wheel->abilities[m_currentStage] == icon) { + // Is a match so flag this stage as done + countered[m_currentStage] = 1; + // Advance the stage + m_currentStage++; + // Set the return value to true + ret = true; + // Check the next stage, if it is over 6 or equal to 0xFFFF flag the HO as complete + if (m_currentStage > 6 || m_wheel->abilities[m_currentStage] == 0xFFFF) + SetComplete(2); + } + } + } + + return ret; +} + +void HeroicOP::AddStarterChain(HeroicOPStarter* starter) { + starters.push_back(starter); +} + +bool HeroicOP::ShiftWheel() { + // Can only shift once so if we already have return out + if (HasShifted()) + return false; + + // Clear the wheel + m_wheel = 0; + + // Get a new Wheel + SetWheel(master_ho_list.GetWheel(starters.at(0))); + + // Set the ho as shifted + m_shifted = true; + + return true; +} + +MasterHeroicOPList::MasterHeroicOPList() { +} + +MasterHeroicOPList::~MasterHeroicOPList() { + map > >::iterator itr; + map >::iterator itr2; + vector::iterator itr3; + vector temp; + vector::iterator itr4; + + // loop through the m_hoList to delete the pointers + for (itr = m_hoList.begin(); itr != m_hoList.end(); itr++) { + // loop through the second map of the m_hoList + for (itr2 = itr->second.begin(); itr2 != itr->second.end(); itr2++) { + // loop through the vector of the second map and delete the pointers + for (itr3 = itr2->second.begin(); itr3 != itr2->second.end(); itr3++) + safe_delete(*itr3); + + // clear the vector + itr2->second.clear(); + // put the starter in a temp list to delete later + temp.push_back(itr2->first); + } + // clear the seond map + itr->second.clear(); + } + // clear the m_hoList + m_hoList.clear(); + + // Delete the starters + for (itr4 = temp.begin(); itr4 != temp.end(); itr4++) + safe_delete(*itr4); + + // clear the temp vector + temp.clear(); +} + +void MasterHeroicOPList::AddStarter(int8 start_class, HeroicOPStarter* starter) { + if (m_hoList.count(start_class) == 0 || m_hoList[start_class].count(starter) == 0) { + m_hoList[start_class][starter]; // This adds the starter with out giving it a vector of wheels yet. + } +} + +void MasterHeroicOPList::AddWheel(int32 starter_id, HeroicOPWheel* wheel) { + map > >::iterator itr; + map >::iterator itr2; + bool found = false; + + // Loop through the list and add the wheel to the correct starter + for (itr = m_hoList.begin(); itr != m_hoList.end(); itr++) { + for (itr2 = itr->second.begin(); itr2 != itr->second.end(); itr2++) { + if (itr2->first->id == starter_id) { + // Found a match, add the wheel, set the flag to break the first loop, and break this loop + itr2->second.push_back(wheel); + found = true; + break; + } + } + // If we found a match break the first loop + if (found) + break; + } + + // No match found give an error. + if (!found) + LogWrite(SPELL__ERROR, 0, "HO", "Attempted to add a wheel to a starter (%u) that doesn't exsist", starter_id); +} + +HeroicOP* MasterHeroicOPList::GetHeroicOP(int8 class_id) { + if (m_hoList.count(class_id) == 0) { + LogWrite(SPELL__ERROR, 0, "HO", "No HO's found for the given class (%i)", class_id); + return 0; + } + + map >::iterator itr; + HeroicOP* ret = new HeroicOP(); + + // Loop through the starters for this class and add them to the HO + for (itr = m_hoList[class_id].begin(); itr != m_hoList[class_id].end(); itr++) + ret->AddStarterChain(itr->first); + + return ret; +} + +HeroicOPWheel* MasterHeroicOPList::GetWheel(HeroicOPStarter* starter) { + if (!starter) + return 0; + + if (m_hoList.count(starter->start_class) == 0) { + LogWrite(SPELL__ERROR, 0, "HO", "Start class (%u) not found", starter->start_class); + return 0; + } + + if (m_hoList[starter->start_class].count(starter) == 0) { + LogWrite(SPELL__ERROR, 0, "HO", "Wheel not found for the provided starter (%u)", starter->id); + return 0; + } + + int index = MakeRandomInt(0, m_hoList[starter->start_class][starter].size() - 1); + return m_hoList[starter->start_class][starter].at(index); +} + diff --git a/EQ2/source/WorldServer/HeroicOp/HeroicOp.h b/EQ2/source/WorldServer/HeroicOp/HeroicOp.h new file mode 100644 index 000000000..a5c9fcf1a --- /dev/null +++ b/EQ2/source/WorldServer/HeroicOp/HeroicOp.h @@ -0,0 +1,156 @@ +/* + EQ2Emulator: Everquest II Server Emulator + Copyright (C) 2007 EQ2EMulator Development Team (http://www.eq2emulator.net) + + This file is part of EQ2Emulator. + + EQ2Emulator is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + EQ2Emulator is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with EQ2Emulator. If not, see . +*/ + +#ifndef __HEROICOP_H__ +#define __HEROICOP_H__ + +#include +#include + +#include "../../common/types.h" + +using namespace std; + +struct HeroicOPStarter { + int32 id; + int8 start_class; + int16 starter_icon; + int16 abilities[6]; +}; + +struct HeroicOPWheel { + int8 order; + int16 shift_icon; + float chance; + int16 abilities[6]; + int32 spell_id; +}; + +class HeroicOP { +public: + HeroicOP(); + ~HeroicOP(); + + /// Sets the complete flag for this Heroic OP + /// The value to set the complete flag to, 1 = failed 2 = finished + void SetComplete(int8 val) { m_complete = val; } + + /// Sets the current stage of the starter chain or the wheel chain is at + /// The stage to set this Heroic OP to + void SetStage(int8 val) { m_currentStage = val; } + + /// Sets the wheel for this Heroic OP + /// The wheel we are setting the Heroic OP to + void SetWheel(HeroicOPWheel* val); + + /// Sets the start time for the wheel + /// Value to set the start time to + void SetStartTime(int32 val) { m_startTime = val; } + + /// Sets the total time to complete the wheel + /// Value to set the total time to + void SetTotalTime(float val) { m_totalTime = val; } + + /// Sets the target of this HO + /// The ID of the spawn + void SetTarget(int32 val); + + /// Gets the complete flag for this Heroic OP + /// 0 = not complete, 1 = complete, 2+= failed + int8 GetComplete() { return m_complete; } + + /// Gets the wheel for this heroic op + HeroicOPWheel* GetWheel() { return m_wheel; } + + /// Gets a pointer to the list of starter chains + vector* GetStarterChains() { return &starters; } + + /// Gets the current stage the HO is on + int8 GetStage() { return m_currentStage; } + + /// Gets the start time for the wheel + int32 GetStartTime() { return m_startTime; } + + /// Gets the total time players have to complete the wheel + float GetTotalTime() { return m_totalTime; } + + /// Gets the ID of this HO's target + int32 GetTarget() { return m_target; } + + /// + bool HasShifted() { return m_shifted; } + + /// Checks to see if the given icon will advance the Heroic OP + /// The icon that is trying to advance the Heroic OP + /// True if the icon advanced the HO + bool UpdateHeroicOP(int16 icon); + + /// Reset the stage to 0 + void ResetStage() { m_currentStage = 0; } + + /// Adds a starter chain to the Heroic OP + /// The starter chain to add + void AddStarterChain(HeroicOPStarter* starter); + + /// Attempts to shift the wheel + bool ShiftWheel(); + + int8 countered[6]; + +private: + int8 m_complete; + int8 m_currentStage; + int32 m_startTime; + float m_totalTime; + int32 m_target; + bool m_shifted; + HeroicOPWheel* m_wheel; + vector starters; +}; + +class MasterHeroicOPList { +public: + MasterHeroicOPList(); + ~MasterHeroicOPList(); + + /// Adds the starter chain to the list + /// Class id for the starter chain + /// Starter chain to add + void AddStarter(int8 start_class, HeroicOPStarter* starter); + + /// Add the wheel chain to the list + /// Id of the starter this wheel belongs to + /// Wheel to add + void AddWheel(int32 starter_id, HeroicOPWheel* wheel); + + /// Creates a new HO + /// Class ID starting the HO + HeroicOP* GetHeroicOP(int8 class_id); + + /// Gets a random wheel from the given starter + /// The starter to determine what wheels to choose from + HeroicOPWheel* GetWheel(HeroicOPStarter* starter); + +private: + // map > > + map > > m_hoList; +}; + +#endif \ No newline at end of file diff --git a/EQ2/source/WorldServer/HeroicOp/HeroicOpDB.cpp b/EQ2/source/WorldServer/HeroicOp/HeroicOpDB.cpp new file mode 100644 index 000000000..370108041 --- /dev/null +++ b/EQ2/source/WorldServer/HeroicOp/HeroicOpDB.cpp @@ -0,0 +1,79 @@ +/* + EQ2Emulator: Everquest II Server Emulator + Copyright (C) 2007 EQ2EMulator Development Team (http://www.eq2emulator.net) + + This file is part of EQ2Emulator. + + EQ2Emulator is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + EQ2Emulator is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with EQ2Emulator. If not, see . +*/ + +#include "../WorldDatabase.h" +#include "../../common/Log.h" +#include "HeroicOp.h" + +extern MasterHeroicOPList master_ho_list; + +void WorldDatabase::LoadHOStarters() { + Query query; + MYSQL_ROW row; + MYSQL_RES* result = query.RunQuery2(Q_SELECT, "SELECT `id`, `starter_class`, `starter_icon`, `ability1`, `ability2`, `ability3`, `ability4`, `ability5`, `ability6` FROM `heroic_ops` WHERE `ho_type`='Starter'"); + + if (result && mysql_num_rows(result) > 0) { + int32 count = 0; + while ((row = mysql_fetch_row(result))) { + HeroicOPStarter* starter = new HeroicOPStarter; + starter->id = atoul(row[0]); + starter->start_class = atoi(row[1]); + starter->starter_icon = atoi(row[2]); + starter->abilities[0] = atoi(row[3]); + starter->abilities[1] = atoi(row[4]); + starter->abilities[2] = atoi(row[5]); + starter->abilities[3] = atoi(row[6]); + starter->abilities[4] = atoi(row[7]); + starter->abilities[5] = atoi(row[8]); + master_ho_list.AddStarter(starter->start_class, starter); + count++; + } + + LogWrite(WORLD__INFO, 0, "World", "- Loaded %u starter chains", count); + } +} + +void WorldDatabase::LoadHOWheel() { + Query query; + MYSQL_ROW row; + MYSQL_RES* result = query.RunQuery2(Q_SELECT, "SELECT `starter_link_id`, `chain_order`, `shift_icon`, `spell_id`, `chance`, `ability1`, `ability2`, `ability3`, `ability4`, `ability5`, `ability6` FROM `heroic_ops` WHERE `ho_type`='Wheel'"); + + if (result && mysql_num_rows(result) > 0) { + int32 count = 0; + while ((row = mysql_fetch_row(result))) { + HeroicOPWheel* wheel = new HeroicOPWheel; + wheel->order = atoi(row[1]); + wheel->shift_icon = atoi(row[2]); + wheel->spell_id = atoul(row[3]); + wheel->chance = atof(row[4]); + wheel->abilities[0] = atoi(row[5]); + wheel->abilities[1] = atoi(row[6]); + wheel->abilities[2] = atoi(row[7]); + wheel->abilities[3] = atoi(row[8]); + wheel->abilities[4] = atoi(row[9]); + wheel->abilities[5] = atoi(row[10]); + + master_ho_list.AddWheel(atoul(row[0]), wheel); + count++; + } + + LogWrite(WORLD__INFO, 0, "World", "- Loaded %u HO wheels", count); + } +} diff --git a/EQ2/source/WorldServer/HeroicOp/HeroicOpPackets.cpp b/EQ2/source/WorldServer/HeroicOp/HeroicOpPackets.cpp new file mode 100644 index 000000000..b12fccb62 --- /dev/null +++ b/EQ2/source/WorldServer/HeroicOp/HeroicOpPackets.cpp @@ -0,0 +1,158 @@ +/* + EQ2Emulator: Everquest II Server Emulator + Copyright (C) 2007 EQ2EMulator Development Team (http://www.eq2emulator.net) + + This file is part of EQ2Emulator. + + EQ2Emulator is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + EQ2Emulator is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with EQ2Emulator. If not, see . +*/ + +#include "../ClientPacketFunctions.h" +#include "../../common/Log.h" +#include "HeroicOp.h" +#include "../Spells.h" + +extern ConfigReader configReader; +extern MasterSpellList master_spell_list; + +void ClientPacketFunctions::SendHeroicOPUpdate(Client* client, HeroicOP* ho) { + if (!client) { + LogWrite(PACKET__ERROR, 0, "Packets", "SendHeroicOPUpdate() called without a valid client"); + return; + } + + if (!ho) { + LogWrite(PACKET__ERROR, 0, "Packets", "SendHeroicOPUpdate() called without a valid HO"); + return; + } + + PacketStruct* packet = configReader.getStruct("WS_HeroicOpportunity", client->GetVersion()); + Spell* spell = 0; + if (packet) { + packet->setDataByName("id", client->GetPlayer()->player_spawn_reverse_id_map[client->GetPlayer()]); + if (ho->GetWheel()) { + spell = master_spell_list.GetSpell(ho->GetWheel()->spell_id, 1); + if (!spell) { + LogWrite(SPELL__ERROR, 0, "HO", "Unable to get the spell (%u)", ho->GetWheel()->spell_id); + return; + } + + packet->setDataByName("name", spell->GetName()); + packet->setDataByName("description", spell->GetDescription()); + packet->setDataByName("order", ho->GetWheel()->order); + packet->setDataByName("time_total", ho->GetTotalTime()); + packet->setDataByName("time_left", max(0.0f, (float)(((ho->GetStartTime() + (ho->GetTotalTime() * 1000)) - Timer::GetCurrentTime2()) / 1000))); + // This is not displayed in the wheel so set it to 0xFFFF + packet->setDataByName("starter_icon", 0xFFFF); + + if (ho->HasShifted()) + packet->setDataByName("shift_icon", 0xFFFF); + else + packet->setDataByName("shift_icon", ho->GetWheel()->shift_icon); + + // If completed set special values + if (ho->GetComplete() > 0) { + packet->setDataByName("wheel_type", 2); + packet->setDataByName("unknown", ho->GetComplete()); + } + + char temp[20]; + char ability[20]; + + // Set the icons for the whee; + for (int8 i = 1; i < 7; i++) { + strcpy(ability, "icon"); + itoa(i, temp, 10); + strcat(ability, temp); + packet->setDataByName(ability, ho->GetWheel()->abilities[i-1]); + } + + // Flag the icons that are completed + for (int8 i = 1; i < 7; i++) { + strcpy(ability, "countered"); + itoa(i, temp, 10); + strcat(ability, temp); + packet->setDataByName(ability, ho->countered[i-1]); + } + + } + else { + if (ho->GetComplete() > 0) { + // This will make the ui element vanish + packet->setDataByName("wheel_type", 5); + packet->setDataByName("unknown", 8); + } + else { + packet->setDataByName("wheel_type", 4); + } + + packet->setDataByName("icon1", 0xFFFF); + packet->setDataByName("icon2", 0xFFFF); + packet->setDataByName("icon3", 0xFFFF); + packet->setDataByName("icon4", 0xFFFF); + packet->setDataByName("icon5", 0xFFFF); + packet->setDataByName("icon6", 0xFFFF); + packet->setDataByName("shift_icon", 0xFFFF); + + int8 index = 1; + char temp[20]; + char ability[20]; + vector::iterator itr; + for (itr = ho->GetStarterChains()->begin(); itr != ho->GetStarterChains()->end(); itr++, index++) { + if (index > 6 ) + break; + + strcpy(ability, "icon"); + itoa(index, temp, 10); + strcat(ability, temp); + + packet->setDataByName(ability, (*itr)->abilities[ho->GetStage()]); + + // Only set this once + if (index == 1) + packet->setDataByName("starter_icon", (*itr)->starter_icon); + } + } + client->QueuePacket(packet->serialize()); + } + safe_delete(packet); +} + + +/* + + + + + + + + + + + + + + + + + + + + + + + + +*/ \ No newline at end of file diff --git a/EQ2/source/WorldServer/Housing/HousingDB.cpp b/EQ2/source/WorldServer/Housing/HousingDB.cpp new file mode 100644 index 000000000..72623350d --- /dev/null +++ b/EQ2/source/WorldServer/Housing/HousingDB.cpp @@ -0,0 +1,40 @@ +#include "../WorldDatabase.h" +#include "../World.h" + +extern World world; + +void WorldDatabase::LoadHouseZones() { + Query query; + MYSQL_ROW row; + MYSQL_RES* result = query.RunQuery2(Q_SELECT, "SELECT * FROM `houses`"); + + if (result && mysql_num_rows(result) > 0) { + while ((row = mysql_fetch_row(result))) { + world.AddHouseZone(atoul(row[0]), row[1], atoi64(row[2]), atoul(row[3]), atoi64(row[4]), atoul(row[5]), atoi(row[6]), atoi(row[7]), atoi(row[8]), atoul(row[9]), atoul(row[10]), atof(row[11]), atof(row[12]), atof(row[13]), atof(row[14])); + } + } +} + +int64 WorldDatabase::AddPlayerHouse(int32 char_id, int32 house_id, int32 instance_id, int32 upkeep_due) { + Query query; + string insert = string("INSERT INTO character_houses (char_id, house_id, instance_id, upkeep_due) VALUES (%u, %u, %u, %u) "); + query.RunQuery2(Q_INSERT, insert.c_str(), char_id, house_id, instance_id, upkeep_due); + + int64 unique_id = query.GetLastInsertedID(); + return unique_id; +} + +void WorldDatabase::RemovePlayerHouse(int32 char_id, int32 house_id) { +} + +void WorldDatabase::LoadPlayerHouses() { + Query query; + MYSQL_ROW row; + MYSQL_RES* result = query.RunQuery2(Q_SELECT, "SELECT h.id, h.char_id, h.house_id, h.instance_id, h.upkeep_due, h.escrow_coins, h.escrow_status, c.name FROM character_houses h, characters c WHERE h.char_id = c.id"); + + if (result && mysql_num_rows(result) > 0) { + while ((row = mysql_fetch_row(result))) { + world.AddPlayerHouse(atoul(row[1]), atoul(row[2]), atoi64(row[0]), atoul(row[3]), atoul(row[4]), atoi64(row[5]), atoul(row[6]), row[7]); + } + } +} \ No newline at end of file diff --git a/EQ2/source/WorldServer/Housing/HousingPackets.cpp b/EQ2/source/WorldServer/Housing/HousingPackets.cpp new file mode 100644 index 000000000..04953c80a --- /dev/null +++ b/EQ2/source/WorldServer/Housing/HousingPackets.cpp @@ -0,0 +1,148 @@ +#include "../ClientPacketFunctions.h" +#include "../World.h" +#include "../client.h" + +extern ConfigReader configReader; +extern World world; + +void ClientPacketFunctions::SendHousePurchace(Client* client, HouseZone* hz, int32 spawnID) { + PacketStruct* packet = configReader.getStruct("WS_PlayerHousePurchase", client->GetVersion()); + if (packet) { + packet->setDataByName("house_name", hz->name.c_str()); + packet->setDataByName("house_id", hz->id); + packet->setDataByName("spawn_id", spawnID); + packet->setDataByName("purchase_coins", hz->cost_coin); + packet->setDataByName("purchace_status", hz->cost_status); + packet->setDataByName("upkeep_coins", hz->upkeep_coin); + packet->setDataByName("upkeep_status", hz->upkeep_status); + packet->setDataByName("vendor_vault_slots", hz->vault_slots); + string req; + if (hz->alignment > 0) { + req = "You must be of "; + if (hz->alignment == 1) + req.append("Good"); + else + req.append("Evil"); + req.append(" alignment"); + } + if (hz->guild_level > 0) { + if (req.length() > 0) { + req.append(", and a guild level of "); + char temp[5]; + sprintf(temp, "%i", hz->guild_level); + req.append(temp); + //req.append(std::to_string(static_cast(hz->guild_level))); + } + else { + req.append("Requires a guild of level "); + char temp[5]; + sprintf(temp, "%i", hz->guild_level); + req.append(temp); + //req.append(std::to_string(static_cast(hz->guild_level))) + req.append(" or above"); + } + } + if (req.length() > 0) { + req.append(" in order to purchase a home within the "); + req.append(hz->name); + req.append("."); + } + + packet->setDataByName("additional_reqs", req.c_str()); + + bool enable_buy = true; + if (hz->alignment > 0 && client->GetPlayer()->GetAlignment() != hz->alignment) + enable_buy = false; + if (hz->guild_level > 0 && (!client->GetPlayer()->GetGuild() || (client->GetPlayer()->GetGuild() && client->GetPlayer()->GetGuild()->GetLevel() < hz->guild_level))) + enable_buy = false; + + packet->setDataByName("enable_buy", enable_buy ? 1 : 0); + + client->QueuePacket(packet->serialize()); + } + + safe_delete(packet); +} + +void ClientPacketFunctions::SendBaseHouseWindow(Client* client, HouseZone* hz, PlayerHouse* ph, int32 spawnID) { + PacketStruct* packet = configReader.getStruct("WS_PlayerHouseBaseScreen", client->GetVersion()); + if (packet) { + packet->setDataByName("house_id", ph->unique_id); + packet->setDataByName("spawn_id", spawnID); + string name; + name = ph->player_name; + name.append("'s "); + name.append(hz->name); + packet->setDataByName("house_name", name.c_str()); + packet->setDataByName("zone_name", hz->name.c_str()); + packet->setDataByName("upkeep_cost_coins", hz->upkeep_coin); + packet->setDataByName("upkeep_cost_status", hz->upkeep_status); + int32 upkeep_due = ph->upkeep_due - Timer::GetUnixTimeStamp(); + packet->setDataByName("upkeep_due", upkeep_due); + + packet->setDataByName("escrow_balance_coins", ph->escrow_coins); + packet->setDataByName("escrow_balance_status", ph->escrow_status); + + // temp - set priv level to owner for now + packet->setDataByName("privlage_level", 4); + // temp - set house type to personal house for now + packet->setDataByName("house_type", 0); + + if (client->GetCurrentZone()->GetInstanceType() == PERSONAL_HOUSE_INSTANCE + || client->GetCurrentZone()->GetInstanceType() == GUILD_HOUSE_INSTANCE) { + // Inside a house need to set a flag and set the history for the tabs + + packet->setDataByName("inside_house", 1); + packet->setDataByName("num_access", 0); + packet->setDataByName("public_access_level", 1); + packet->setDataByName("num_history", 0); + } + + client->QueuePacket(packet->serialize()); + } + + safe_delete(packet); +} + +void ClientPacketFunctions::SendHouseVisitWindow(Client* client, vector houses) { + PacketStruct* packet = configReader.getStruct("WS_DisplayVisitScreen", client->GetVersion()); + if (packet) { + vector::iterator itr; + packet->setArrayLengthByName("num_houses", houses.size()); + int16 i = 0; + for (itr = houses.begin(); itr != houses.end(); itr++) { + PlayerHouse* ph = *itr; + if (ph) { + HouseZone* hz = world.GetHouseZone(ph->house_id); + if (hz) { + packet->setArrayDataByName("house_id", ph->unique_id, i); + packet->setArrayDataByName("house_owner", ph->player_name.c_str(), i); + packet->setArrayDataByName("house_location", hz->name.c_str(), i); + packet->setArrayDataByName("house_zone", client->GetCurrentZone()->GetZoneName(), i); + packet->setArrayDataByName("access_level", 1, i); + packet->setArrayDataByName("visit_flag", 0, i); // 0 = allowed to visit, 1 = owner hasn't paid upkeep + i++; + } + } + } + client->QueuePacket(packet->serialize()); + } + safe_delete(packet); +} + +/* + + + + + + + + + + + + + + +*/ \ No newline at end of file diff --git a/EQ2/source/WorldServer/IRC/IRC.cpp b/EQ2/source/WorldServer/IRC/IRC.cpp new file mode 100644 index 000000000..5a6ce5f62 --- /dev/null +++ b/EQ2/source/WorldServer/IRC/IRC.cpp @@ -0,0 +1,539 @@ +/* + EQ2Emulator: Everquest II Server Emulator + Copyright (C) 2007 EQ2EMulator Development Team (http://www.eq2emulator.net) + + This file is part of EQ2Emulator. + + EQ2Emulator is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + EQ2Emulator is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with EQ2Emulator. If not, see . +*/ +#include +#ifdef _WIN32 +#include +#include +#include +#else +#include +#include +#include "../../common/unix.h" +#endif +#include "IRCReplyCodes.h" +#include "IRC.h" +#include "../Chat/Chat.h" +#include "../../common/Log.h" +#include "../Rules/Rules.h" + +extern Chat chat; +extern RuleManager rule_manager; + +IRC::IRC() { + running = false; + m_globalServer = 0; + m_servers.SetName("IRC::servers"); +} + +IRC::~IRC() { + map::iterator itr; + + m_servers.writelock(__FUNCTION__, __LINE__); + for (itr = servers.begin(); itr != servers.end(); itr++) + safe_delete(itr->second); + m_servers.releasewritelock(__FUNCTION__, __LINE__); + + safe_delete(m_globalServer); +} + +ThreadReturnType ServerLoop(void *arg); + +void IRC::Start() { + if (running) + return; + + running = true; +#ifdef _WIN32 + _beginthread(ServerLoop, 0, this); +#else + pthread_t thread; + pthread_create(&thread, NULL, ServerLoop, this); + pthread_detach(thread); +#endif +} + +int32 IRC::GetNumServers() { + int32 count; + + m_servers.readlock(__FUNCTION__, __LINE__); + count = servers.size(); + m_servers.releasereadlock(__FUNCTION__, __LINE__); + + return count; +} + +const char * IRC::GetSafeChannelName(const char *channel_name) { + char *safe_channel_name; + size_t len; + + assert(channel_name != NULL); + + len = strlen(channel_name) + 2; + safe_channel_name = new char[len]; + if (channel_name[0] != '#') + snprintf(safe_channel_name, len, "#%s", channel_name); + else + strncpy(safe_channel_name, channel_name, len); + + return safe_channel_name; +} + +void IRC::ConnectToServer(Client *client, const char *host, short port, const char *nick) { + int32 character_id; + IRCServer *server; + int ret; + + assert(client != NULL); + assert(host != NULL); + + character_id = client->GetCharacterID(); + + m_servers.writelock(__FUNCTION__, __LINE__); + if (servers.count(character_id) > 0) + client->Message(CHANNEL_COLOR_YELLOW, "You are already connected to IRC server %s.", servers[character_id]->GetHost()); + else { + client->Message(CHANNEL_COLOR_YELLOW, "Connecting to IRC server %s:%i.", host, port); + server = new IRCServer(character_id, host, port, nick == NULL || strlen(nick) == 0 ? client->GetPlayer()->GetName() : nick); + ret = server->Connect(); + + switch (ret) { + case IRC_CONNECT_SUCCESS: + servers[character_id] = server; + client->SimpleMessage(CHANNEL_COLOR_YELLOW, "Successfully connected to IRC server!"); + client->SimpleMessage(CHANNEL_COLOR_YELLOW, "You can now join channels on this server using /irc join ."); + break; + case IRC_CONNECT_ALREADY_CONNECTED: + client->SimpleMessage(CHANNEL_COLOR_YELLOW, "You are already connected to this IRC server!"); + break; + case IRC_CONNECT_NO_NICK: + client->SimpleMessage(CHANNEL_COLOR_YELLOW, "Could not connect to IRC server. A nick was never given."); + break; + case IRC_CONNECT_WINSOCK_INIT: + client->SimpleMessage(CHANNEL_COLOR_YELLOW, "Could not connect to IRC server. Failed to initailize Winsock."); + break; + case IRC_CONNECT_WINSOCK_VERSION: + client->SimpleMessage(CHANNEL_COLOR_YELLOW, "Could not connect to IRC server. Winsock version 2.2 was not found. Contact your EQ2Emu server administrator."); + break; + case IRC_CONNECT_SOCKET: + client->SimpleMessage(CHANNEL_COLOR_YELLOW, "Could not connect to IRC server. Failed to create a socket."); + break; + case IRC_CONNECT_NO_HOST: + client->SimpleMessage(CHANNEL_COLOR_YELLOW, "Could not connect to IRC server. That host does not exist."); + break; + case IRC_CONNECT_FAIL: + client->SimpleMessage(CHANNEL_COLOR_YELLOW, "Could not connect to IRC server. Failed to connect."); + break; + case IRC_CONNECT_SOCKET_OPT: + client->SimpleMessage(CHANNEL_COLOR_YELLOW, "Could not connect to IRC server. Could not set socket options."); + break; + default: + client->Message(CHANNEL_COLOR_YELLOW, "Could not connect to IRC server. Unknown error (%i).", ret); + break; + } + } + m_servers.releasewritelock(__FUNCTION__, __LINE__); +} + +void IRC::ConnectToGlobalServer(const char *host, short port, const char *nick) { + IRCServer* server = 0; + ChatChannel* channel = 0; + const char* channel_name = 0; + int ret; + + assert(host != NULL); + assert(nick != NULL); + + if (m_globalServer) + LogWrite(CHAT__ERROR, 0, "IRC", "You are already connected to the global IRC server %s.", m_globalServer->GetHost()); + else { + LogWrite(CHAT__DEBUG, 0, "IRC", "Connecting to IRC server %s:%i.", host, port); + server = new IRCServer(host, port, nick); + ret = server->Connect(); + + switch (ret) { + case IRC_CONNECT_SUCCESS: + m_globalServer = server; + LogWrite(CHAT__DEBUG, 0, "IRC", "Successfully connected to the global IRC server!"); + + // Get the global irc channel + channel_name = rule_manager.GetGlobalRule(R_World, IRCChan)->GetString(); + // Join the channel + m_globalServer->JoinChannel(channel_name); + + // Remove the leading # if there was one + if (channel_name[0] == '#') + channel_name++; + + // Check to see if a EQ2 chat channel exists, if not create it + if (!chat.ChannelExists(channel_name)) { + //chat.CreateChannel(channel_name); + ChatChannel* new_channel = new ChatChannel(); + new_channel->SetName(channel_name); + + new_channel->SetLevelRestriction(0); + new_channel->SetClassesAllowed(0); + new_channel->SetRacesAllowed(0); + new_channel->SetType(CHAT_CHANNEL_TYPE_WORLD); + + chat.AddChannel(new_channel); + } + + // Get the EQ2 Channel + channel = chat.GetChannel(channel_name); + // Make sure we got the channel + if (channel) { + // Set the channel as the global IRC channel + channel->SetGlobalIRCChannel(true); + } + else { + // "Should" never end up here as we make sure the channel exists before we get it, send an error if we do end up in here some how + LogWrite(CHAT__ERROR, 0, "IRC", "Unable to set the global IRC channel"); + } + + break; + case IRC_CONNECT_ALREADY_CONNECTED: + LogWrite(CHAT__ERROR, 0, "IRC", "You are already connected to the global IRC server!"); + safe_delete(server); + break; + case IRC_CONNECT_NO_NICK: + LogWrite(CHAT__ERROR, 0, "IRC", "Could not connect to global IRC server. A nick was never given."); + safe_delete(server); + break; + case IRC_CONNECT_WINSOCK_INIT: + LogWrite(CHAT__ERROR, 0, "IRC", "Could not connect to global IRC server. Failed to initailize Winsock."); + safe_delete(server); + break; + case IRC_CONNECT_WINSOCK_VERSION: + LogWrite(CHAT__ERROR, 0, "IRC", "Could not connect to global IRC server. Winsock version 2.2 was not found. Contact your EQ2Emu server administrator."); + safe_delete(server); + break; + case IRC_CONNECT_SOCKET: + LogWrite(CHAT__ERROR, 0, "IRC", "Could not connect to global IRC server. Failed to create a socket."); + safe_delete(server); + break; + case IRC_CONNECT_NO_HOST: + LogWrite(CHAT__ERROR, 0, "IRC", "Could not connect to global IRC server. That host does not exist."); + safe_delete(server); + break; + case IRC_CONNECT_FAIL: + LogWrite(CHAT__ERROR, 0, "IRC", "Could not connect to global IRC server. Failed to connect."); + safe_delete(server); + break; + case IRC_CONNECT_SOCKET_OPT: + LogWrite(CHAT__ERROR, 0, "IRC", "Could not connect to global IRC server. Could not set socket options."); + safe_delete(server); + break; + default: + LogWrite(CHAT__ERROR, 0, "IRC", "Could not connect to global IRC server. Unknown error (%i).", ret); + safe_delete(server); + break; + } + } +} + +void IRC::DisconnectFromServer(Client *client) { + IRCServer *server; + int32 character_id; + + assert(client != NULL); + + character_id = client->GetCharacterID(); + + m_servers.writelock(__FUNCTION__, __LINE__); + if (servers.count(character_id) == 0) + client->SimpleMessage(CHANNEL_COLOR_YELLOW, "You are not connected to an IRC server!"); + else { + server = servers[character_id]; + client->Message(CHANNEL_COLOR_YELLOW, "You have been disconnected from IRC server %s.", server->GetHost()); + server->Disconnect(); + safe_delete(server); + servers.erase(character_id); + } + m_servers.releasewritelock(__FUNCTION__, __LINE__); +} + +void IRC::DisconnectFromGlobalServer() { + if (!m_globalServer) + LogWrite(CHAT__ERROR, 0, "IRC", "You are not connected to a global IRC server!"); + else { + LogWrite(CHAT__DEBUG, 0, "IRC", "You have been disconnected from the global IRC server (%s).", m_globalServer->GetHost()); + m_globalServer->Disconnect(); + safe_delete(m_globalServer); + } +} + +void IRC::JoinChannel(Client *client, const char *channel_name) { + const char *safe_channel_name; + int32 character_id; + int ret; + + assert(client != NULL); + assert(channel_name != NULL); + + character_id = client->GetCharacterID(); + + //if the user didn't include a hash in the channel name, add it + safe_channel_name = GetSafeChannelName(channel_name); + + m_servers.readlock(__FUNCTION__, __LINE__); + if (servers.count(character_id) == 0) + client->SimpleMessage(CHANNEL_COLOR_YELLOW, "You are not connected to an IRC server!"); + else { + ret = servers[character_id]->JoinChannel(safe_channel_name); + + switch (ret) { + case IRC_JOIN_CHANNEL_SUCCESS: + client->Message(CHANNEL_COLOR_YELLOW, "Joining IRC channel %s.", safe_channel_name); + if (channel_name[0] == '#') + channel_name++; + + if (!chat.ChannelExists(channel_name)) + chat.CreateChannel(channel_name); + if (!chat.IsInChannel(client, channel_name)) + chat.JoinChannel(client, channel_name); + + break; + case IRC_JOIN_CHANNEL_ALREADY_IN: + client->SimpleMessage(CHANNEL_COLOR_YELLOW, "You are already in that IRC channel!"); + break; + default: + client->Message(CHANNEL_COLOR_YELLOW, "Error joining channel. Unknown error (%i).", ret); + break; + } + } + m_servers.releasereadlock(__FUNCTION__, __LINE__); + + safe_delete_array(safe_channel_name); +} + +void IRC::LeaveChannel(Client *client, const char *channel_name) { + const char *safe_channel_name; + int32 character_id; + int ret; + + assert(client != NULL); + assert(channel_name != NULL); + + character_id = client->GetCharacterID(); + + //if the user didn't include a hash in the channel name, add it + safe_channel_name = GetSafeChannelName(channel_name); + + m_servers.readlock(__FUNCTION__, __LINE__); + if (servers.count(character_id) == 0) + client->SimpleMessage(CHANNEL_COLOR_YELLOW, "You are not connected to an IRC server!"); + else { + ret = servers[character_id]->LeaveChannel(safe_channel_name); + + switch (ret) { + case IRC_LEAVE_CHANNEL_SUCCESS: + client->Message(CHANNEL_COLOR_YELLOW, "You have left IRC channel %s.", safe_channel_name); + break; + case IRC_LEAVE_CHANNEL_NOT_IN: + client->SimpleMessage(CHANNEL_COLOR_YELLOW, "You are not in that IRC channel."); + break; + default: + client->Message(CHANNEL_COLOR_YELLOW, "Error leaving channel. Unknown error (%i).", ret); + break; + } + } + m_servers.releasereadlock(__FUNCTION__, __LINE__); + + safe_delete_array(safe_channel_name); +} + +void IRC::ListChannels(Client *client) { + vector *channels; + vector::iterator itr; + IRCServer *server; + int32 character_id, i; + + assert(client != NULL); + + character_id = client->GetCharacterID(); + + m_servers.readlock(__FUNCTION__, __LINE__); + if (servers.count(character_id) == 0) + client->SimpleMessage(CHANNEL_COLOR_YELLOW, "You are not connected to an IRC server!"); + else { + server = servers[character_id]; + channels = server->GetChannels(); + + client->Message(CHANNEL_COLOR_YELLOW, "IRC Channels you are logged into on %s:", server->GetHost()); + if (channels->size() == 0) + client->SimpleMessage(CHANNEL_COLOR_YELLOW, " None"); + else { + i = 1; + for (itr = channels->begin(); itr != channels->end(); itr++) + client->Message(CHANNEL_COLOR_YELLOW, " %i) %s", i++, ((*itr)->GetName())); + } + } + m_servers.releasereadlock(__FUNCTION__, __LINE__); +} + +void IRC::Say(Client *client, const char *channel_name, const char *message) { + const char *safe_channel_name; + int32 character_id; + int ret; + IRCServer* server = 0; + + assert(channel_name != NULL); + assert(message != NULL); + + if (client) + character_id = client->GetCharacterID(); + + //if the user didn't include a hash in the channel name, add it + safe_channel_name = GetSafeChannelName(channel_name); + + m_servers.readlock(__FUNCTION__, __LINE__); + if (!m_globalServer && servers.count(character_id) == 0) { + if (client) + client->SimpleMessage(CHANNEL_COLOR_YELLOW, "You are not connected to an IRC server!"); + else + LogWrite(CHAT__DEBUG, 0, "IRC", "Not connected to a global IRC server"); + } + else { + if (client) + server = servers[character_id]; + else + server = m_globalServer; + + ret = server->Say(safe_channel_name, message); + + switch (ret) { + case IRC_SAY_SUCCESS: + //client->Message(CHANNEL_COLOR_YELLOW, "You say to %s, \"%s\"", safe_channel_name, message); + break; + case IRC_SAY_NOT_IN: + if (client) + client->Message(CHANNEL_COLOR_YELLOW, "You are not in channel %s. Use /irc list to see what channels you are in.", safe_channel_name); + else + LogWrite(CHAT__DEBUG, 0, "IRC", "Global IRC does not contain the channel %s.", safe_channel_name); + break; + default: + if (client) + client->Message(CHANNEL_COLOR_YELLOW, "Error sending message to %s. Unknown error (%i).", safe_channel_name, ret); + else + LogWrite(CHAT__DEBUG, 0, "IRC", "Error sending message to %s. Unknown error (%i).", safe_channel_name, ret); + + break; + } + } + m_servers.releasereadlock(__FUNCTION__, __LINE__); + + safe_delete_array(safe_channel_name); +} + +void IRC::Say(Client *client, int32 channel_index, const char *message) { + IRCChannel *channel; + int32 character_id; + int ret; + + assert(client != NULL); + assert(message != NULL); + + character_id = client->GetCharacterID(); + + m_servers.readlock(__FUNCTION__, __LINE__); + if (servers.count(character_id) == 0) + client->SimpleMessage(CHANNEL_COLOR_YELLOW, "You are not connected to an IRC server!"); + else { + ret = servers[character_id]->Say(channel_index, message); + channel = servers[character_id]->GetChannel(channel_index); + + switch (ret) { + case IRC_SAY_SUCCESS: + client->Message(CHANNEL_COLOR_YELLOW, "You say to %s, \"%s\"", channel->GetName(), message); + break; + case IRC_SAY_NOT_IN: + client->Message(CHANNEL_COLOR_YELLOW, "You are not in a channel at index %u. Use /irc list to see what channels you are in.", channel_index); + break; + default: + client->Message(CHANNEL_COLOR_YELLOW, "Error sending message to channel at index %i. Unknown error (%i).", channel_index, ret); + break; + } + } + m_servers.releasereadlock(__FUNCTION__, __LINE__); +} + +void IRC::Process() { + map::iterator itr; + vector removes; + vector::iterator itr_removes; + int32 character_id; + IRCServer *server; + + m_servers.readlock(__FUNCTION__, __LINE__); + for (itr = servers.begin(); itr != servers.end(); itr++) { + server = itr->second; + if (server->IsConnected()) { + + //if this connection fails to process, disconnect it + if (!server->Process()) + removes.push_back(itr->first); + } + } + m_servers.releasereadlock(__FUNCTION__, __LINE__); + + // Process the global irc server if there is one + if (m_globalServer && m_globalServer->IsConnected()) + m_globalServer->Process(); + + //process any bad connections + if (removes.size() > 0) { + m_servers.writelock(__FUNCTION__, __LINE__); + for (itr_removes = removes.begin(); itr_removes != removes.end(); itr_removes++) { + character_id = *itr_removes; + + if (servers.count(character_id) > 0) { + safe_delete(servers[character_id]); + servers.erase(character_id); + } + } + m_servers.releasewritelock(__FUNCTION__, __LINE__); + } +} + +ThreadReturnType ServerLoop(void *arg) { + IRC *irc = (IRC *)arg; + + while (irc->IsRunning()) { + irc->Process(); + + if (irc->GetNumServers() == 0) + Sleep(1000); + else + Sleep(100); + } + + THREAD_RETURN(NULL); +} + +IRCServer* IRC::GetServer(Client* client) { + IRCServer* ret = 0; + + m_servers.readlock(__FUNCTION__, __LINE__); + if (servers.count(client->GetCharacterID()) != 0) + ret = servers[client->GetCharacterID()]; + m_servers.releasereadlock(__FUNCTION__, __LINE__); + + return ret; +} \ No newline at end of file diff --git a/EQ2/source/WorldServer/IRC/IRC.h b/EQ2/source/WorldServer/IRC/IRC.h new file mode 100644 index 000000000..d49cda293 --- /dev/null +++ b/EQ2/source/WorldServer/IRC/IRC.h @@ -0,0 +1,65 @@ +/* + EQ2Emulator: Everquest II Server Emulator + Copyright (C) 2007 EQ2EMulator Development Team (http://www.eq2emulator.net) + + This file is part of EQ2Emulator. + + EQ2Emulator is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + EQ2Emulator is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with EQ2Emulator. If not, see . +*/ +#ifndef IRC_IRC_H_ +#define IRC_IRC_H_ + +#include +#include "../../common/types.h" +#include "../../common/Mutex.h" +#include "IRCServer.h" + +using namespace std; + +class IRC { +public: + IRC(); + virtual ~IRC(); + + void SetRunning(bool running) {this->running = running;} + bool IsRunning() {return running;} + int32 GetNumServers(); + + static const char * GetSafeChannelName(const char *channel_name); + + void Start(); + void Process(); + + void ConnectToServer(Client *client, const char *host, short port, const char *nick = NULL); + void ConnectToGlobalServer(const char *host, short port, const char *nick = NULL); + void DisconnectFromServer(Client *client); + void DisconnectFromGlobalServer(); + void JoinChannel(Client *client, const char *channel_name); + void LeaveChannel(Client *client, const char *channel_name); + void ListChannels(Client *client); + void Say(Client *client, const char *channel_name, const char *message); + void Say(Client *client, int32 channel_index, const char *message); + + IRCServer* GetServer(Client* client); + + IRCServer* GetGlobalServer() { return m_globalServer; } + +private: + bool running; + Mutex m_servers; + map servers; + IRCServer* m_globalServer; +}; + +#endif diff --git a/EQ2/source/WorldServer/IRC/IRCChannel.cpp b/EQ2/source/WorldServer/IRC/IRCChannel.cpp new file mode 100644 index 000000000..5cc3c94c2 --- /dev/null +++ b/EQ2/source/WorldServer/IRC/IRCChannel.cpp @@ -0,0 +1,31 @@ +/* + EQ2Emulator: Everquest II Server Emulator + Copyright (C) 2007 EQ2EMulator Development Team (http://www.eq2emulator.net) + + This file is part of EQ2Emulator. + + EQ2Emulator is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + EQ2Emulator is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with EQ2Emulator. If not, see . +*/ +#include +#include +#include "IRCChannel.h" + +IRCChannel::IRCChannel(const char *name) { + assert(name != NULL); + + strncpy(this->name, name, IRC_CHANNEL_LEN_MAX); +} + +IRCChannel::~IRCChannel() { +} \ No newline at end of file diff --git a/EQ2/source/WorldServer/IRC/IRCChannel.h b/EQ2/source/WorldServer/IRC/IRCChannel.h new file mode 100644 index 000000000..14dd3ace5 --- /dev/null +++ b/EQ2/source/WorldServer/IRC/IRCChannel.h @@ -0,0 +1,40 @@ +/* + EQ2Emulator: Everquest II Server Emulator + Copyright (C) 2007 EQ2EMulator Development Team (http://www.eq2emulator.net) + + This file is part of EQ2Emulator. + + EQ2Emulator is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + EQ2Emulator is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with EQ2Emulator. If not, see . +*/ +#ifndef IRC_IRCCHANNEL_H_ +#define IRC_IRCCHANNEL_H_ + +#define IRC_CHANNEL_LEN_MAX 32 + +class IRCChannel { +public: + IRCChannel(const char *name); + virtual ~IRCChannel(); + + void SetJoining(bool joining) {this->joining = joining;} + + const char * GetName() {return name;} + bool IsJoining() {return joining;} + +private: + char name[IRC_CHANNEL_LEN_MAX + 1]; + bool joining; +}; + +#endif diff --git a/EQ2/source/WorldServer/IRC/IRCMessage.cpp b/EQ2/source/WorldServer/IRC/IRCMessage.cpp new file mode 100644 index 000000000..55ebbe0a9 --- /dev/null +++ b/EQ2/source/WorldServer/IRC/IRCMessage.cpp @@ -0,0 +1,90 @@ +/* + EQ2Emulator: Everquest II Server Emulator + Copyright (C) 2007 EQ2EMulator Development Team (http://www.eq2emulator.net) + + This file is part of EQ2Emulator. + + EQ2Emulator is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + EQ2Emulator is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with EQ2Emulator. If not, see . +*/ +#include +#include +#include +#include "../../common/types.h" +#include "IRCMessage.h" + +IRCMessage::IRCMessage(const char *message, ...) { + int n, size = 512; + va_list ap; + + len = 0; + serialized = false; + + while (true) { + //allocate our buffer + this->message = new char[size]; + + //print the format into the buffer + va_start(ap, message); + n = vsnprintf(this->message, size, message, ap); + va_end(ap); + + //did we write what we needed to? + if (n > -1 && n < size) + break; + +#ifdef _WIN32 + size *= 2; //double the buffer +#else + if (n > -1) + size = n + 1; //we know exactly how many bytes to write + else + size *= 2; //double the buffer +#endif + + safe_delete_array(this->message); + } +} + +IRCMessage::~IRCMessage() { + if (message != NULL) + safe_delete_array(message); +} + +const char * IRCMessage::Serialize() { + char *buf; + + if (message == NULL || serialized) + return message; + + //allocate enough room for the /r/n, and of course the null + len = strlen(message) + 3; + buf = new char[len]; + snprintf(buf, len, "%s\r\n", message); + + //now copy back into our true buffer + safe_delete_array(message); + message = new char[len]; + strncpy(message, buf, len); + + //and finally free our temporary buffer + safe_delete_array(buf); + + //we don't want to do this process again if for some reason Serialize() is called again + serialized = true; + + //we don't want to include the trailing null in the length + len--; + + return message; +} \ No newline at end of file diff --git a/EQ2/source/WorldServer/IRC/IRCMessage.h b/EQ2/source/WorldServer/IRC/IRCMessage.h new file mode 100644 index 000000000..595df3595 --- /dev/null +++ b/EQ2/source/WorldServer/IRC/IRCMessage.h @@ -0,0 +1,39 @@ +/* + EQ2Emulator: Everquest II Server Emulator + Copyright (C) 2007 EQ2EMulator Development Team (http://www.eq2emulator.net) + + This file is part of EQ2Emulator. + + EQ2Emulator is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + EQ2Emulator is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with EQ2Emulator. If not, see . +*/ +#ifndef IRC_IRCMESSAGE_H_ +#define IRC_IRCMESSAGE_H_ + +#include + +class IRCMessage { +public: + IRCMessage(const char *message, ...); + virtual ~IRCMessage(); + + size_t GetLength() {return len;} + const char *Serialize(); + +private: + char *message; + size_t len; + bool serialized; +}; + +#endif diff --git a/EQ2/source/WorldServer/IRC/IRCReplyCodes.h b/EQ2/source/WorldServer/IRC/IRCReplyCodes.h new file mode 100644 index 000000000..bf09d57c8 --- /dev/null +++ b/EQ2/source/WorldServer/IRC/IRCReplyCodes.h @@ -0,0 +1,43 @@ +/* + EQ2Emulator: Everquest II Server Emulator + Copyright (C) 2007 EQ2EMulator Development Team (http://www.eq2emulator.net) + + This file is part of EQ2Emulator. + + EQ2Emulator is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + EQ2Emulator is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with EQ2Emulator. If not, see . +*/ +#ifndef IRC_IRCREPLYCODES_H_ +#define IRC_IRCREPLYCODES_H_ + +//the following are eq2emu specific irc reply codes +#define IRC_CONNECT_SUCCESS 0 +#define IRC_CONNECT_ALREADY_CONNECTED 1 //already connected to this server +#define IRC_CONNECT_NO_NICK 2 //a nick was never given +#define IRC_CONNECT_WINSOCK_INIT 3 //couldn't initialize winsock +#define IRC_CONNECT_WINSOCK_VERSION 4 //couldn't find the version of winsock we want +#define IRC_CONNECT_SOCKET 5 //couldn't create a socket +#define IRC_CONNECT_NO_HOST 6 //couldn't find the hostname +#define IRC_CONNECT_FAIL 7 //failure connecting +#define IRC_CONNECT_SOCKET_OPT 8 //couldn't set socket options + +#define IRC_JOIN_CHANNEL_SUCCESS 0 +#define IRC_JOIN_CHANNEL_ALREADY_IN 1 //already in the channel + +#define IRC_LEAVE_CHANNEL_SUCCESS 0 +#define IRC_LEAVE_CHANNEL_NOT_IN 1 //was never in the channel + +#define IRC_SAY_SUCCESS 0 +#define IRC_SAY_NOT_IN 1 //was never the channel + +#endif diff --git a/EQ2/source/WorldServer/IRC/IRCServer.cpp b/EQ2/source/WorldServer/IRC/IRCServer.cpp new file mode 100644 index 000000000..9dda2d818 --- /dev/null +++ b/EQ2/source/WorldServer/IRC/IRCServer.cpp @@ -0,0 +1,467 @@ +/* + EQ2Emulator: Everquest II Server Emulator + Copyright (C) 2007 EQ2EMulator Development Team (http://www.eq2emulator.net) + + This file is part of EQ2Emulator. + + EQ2Emulator is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + EQ2Emulator is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with EQ2Emulator. If not, see . +*/ +#include +#include +#include +#ifdef _WIN32 +#include +#include +#else +#include +#include +#include +#include +#include +#include +#include +#include "../../common/unix.h" +#endif +#include "../World.h" +#include "IRCReplyCodes.h" +#include "IRCServer.h" +#include "../Chat/Chat.h" +#include "../../common/Log.h" + +extern ZoneList zone_list; +extern Chat chat; + +IRCServer::IRCServer() { + character_id = 0; + memset(host, 0, sizeof(host)); + port = 0; + memset(nick, 0, sizeof(nick)); + sockfd = -1; + connected = false; + m_globalServer = false; +} + +IRCServer::IRCServer(int32 character_id, const char *host, short port, const char *nick) { + assert(host != NULL); + assert(nick != NULL); + + this->character_id = character_id; + strncpy(this->host, host, IRC_HOST_LEN_MAX); + this->port = port; + strncpy(this->nick, nick, IRC_NICK_LEN_MAX); + sockfd = -1; + connected = false; + m_globalServer = false; +} + +IRCServer::IRCServer(const char *host, short port, const char *nick) { + assert(host != NULL); + assert(nick != NULL); + + this->character_id = 0; + strncpy(this->host, host, IRC_HOST_LEN_MAX); + this->port = port; + strncpy(this->nick, nick, IRC_NICK_LEN_MAX); + sockfd = -1; + connected = false; + m_globalServer = true; +} + +IRCServer::~IRCServer() { + Disconnect(); +} + +IRCChannel * IRCServer::GetChannel(const char *channel_name) { + vector::iterator itr; + IRCChannel *channel = NULL; + + assert(channel_name != NULL); + + for (itr = channels.begin(); itr != channels.end(); itr++) { + if (strncmp((*itr)->GetName(), channel_name, IRC_CHANNEL_LEN_MAX) == 0) { + channel = *itr; + break; + } + } + + return channel; +} + +IRCChannel * IRCServer::GetChannel(int32 channel_index) { + //channel indexes start at 1 according to the client + channel_index--; + + return channel_index < channels.size() ? channels[channel_index] : NULL; +} + +int IRCServer::Connect() { + struct sockaddr_in server_addr; + struct hostent *server; +#ifdef _WIN32 + u_long nonblocking = 1; + WSADATA wsa; +#else + int nonblocking = 1; +#endif + + //you're already connected numbnuts! + if (connected) + return IRC_CONNECT_ALREADY_CONNECTED; + + //make sure a nick was given (should always have one) + if (nick[0] == '\0') + return IRC_CONNECT_NO_NICK; + +#ifdef _WIN32 + //initialize winsock for version 2.2 + if (WSAStartup(MAKEWORD(2, 2), &wsa) != 0) { + Disconnect(); + return IRC_CONNECT_WINSOCK_INIT; + } + + //make sure we support this version of winsock + if (LOBYTE(wsa.wVersion) != 2 || HIBYTE(wsa.wHighVersion) != 2) { + Disconnect(); + return IRC_CONNECT_WINSOCK_VERSION; + } +#endif + + //attempt to create a tcp socket + if ((sockfd = socket(AF_INET, SOCK_STREAM, 0)) < 0) { + Disconnect(); + return IRC_CONNECT_SOCKET; + } + + //find the hostname + if ((server = gethostbyname(host)) == NULL) { + Disconnect(); + return IRC_CONNECT_NO_HOST; + } + + //setup the server info + memset(&server_addr, 0, sizeof(server_addr)); + server_addr.sin_family = AF_INET; + memcpy(&server_addr.sin_addr.s_addr, server->h_addr, server->h_length); + server_addr.sin_port = htons(port); + + //connect to the irc server + if (connect(sockfd, (struct sockaddr *)&server_addr, sizeof(server_addr)) < 0) { + Disconnect(); + return IRC_CONNECT_FAIL; + } + + //we want a non blocking socket +#ifdef _WIN32 + if (ioctlsocket(sockfd, FIONBIO, &nonblocking) != 0) { +#else + if (ioctl(sockfd, FIONBIO, &nonblocking) != 0) { +#endif + Disconnect(); + return IRC_CONNECT_SOCKET_OPT; + } + + //woohoo! connected - send the register messages + Send(new IRCMessage("NICK %s", nick)); + Send(new IRCMessage("USER %s 0 * :scott", nick)); + + connected = true; + return IRC_CONNECT_SUCCESS; +} + +void IRCServer::Disconnect() { + connected = false; +#ifdef _WIN32 + if (sockfd > 0) { + closesocket(sockfd); + sockfd = -1; + } + WSACleanup(); +#else + if (sockfd > 0) { + close(sockfd); + sockfd = -1; + } +#endif + + vector::iterator itr; + for (itr = channels.begin(); itr != channels.end(); itr++) { + safe_delete(*itr); + } + channels.clear(); +} + +int IRCServer::JoinChannel(const char *channel_name) { + vector::iterator itr; + IRCChannel *channel; + + assert(channel_name != NULL); + + //let's make sure they're already not in the channel + for (itr = channels.begin(); itr != channels.end(); itr++) { + if (strncmp((*itr)->GetName(), channel_name, IRC_CHANNEL_LEN_MAX) == 0) + return IRC_JOIN_CHANNEL_ALREADY_IN; + } + + //add the channel to the list of channels and mark it as joining. we'll unmark it once we get a response back from the server + channel = new IRCChannel(channel_name); + channel->SetJoining(true); + channels.push_back(channel); + + //send the JOIN command to the IRC server + Send(new IRCMessage("JOIN %s", channel_name)); + + return IRC_JOIN_CHANNEL_SUCCESS; +} + +int IRCServer::LeaveChannel(const char *channel_name) { + vector::iterator itr; + IRCChannel *channel; + + assert(channel_name != NULL); + + for (itr = channels.begin(); itr != channels.end(); itr++) { + channel = *itr; + if (strncmp(channel->GetName(), channel_name, IRC_CHANNEL_LEN_MAX) == 0) { + + //send the leave message to the IRC server + Send(new IRCMessage("PART %s", channel->GetName())); + + //free resourceses + safe_delete(channel); + channels.erase(itr); + + return IRC_LEAVE_CHANNEL_SUCCESS; + } + } + + return IRC_LEAVE_CHANNEL_NOT_IN; +} + +int IRCServer::Say(const char *channel_name, const char *message) { + IRCChannel *channel; + + assert(channel_name != NULL); + assert(message != NULL); + + if ((channel = GetChannel(channel_name)) == NULL) + return IRC_SAY_NOT_IN; + + Say(channel, message); + return IRC_SAY_SUCCESS; +} + +int IRCServer::Say(int32 channel_index, const char *message) { + IRCChannel *channel; + + assert(message != NULL); + + if ((channel = GetChannel(channel_index)) == NULL) + return IRC_SAY_NOT_IN; + + Say(channel, message); + return IRC_SAY_SUCCESS; +} + +void IRCServer::Say(IRCChannel *channel, const char *message) { + assert(channel != NULL); + assert(message != NULL); + + Send(new IRCMessage("PRIVMSG %s %s", channel->GetName(), message)); +} + +bool IRCServer::Process() { + char *start, *end; + char buf[8192]; + int i, count; + Client *client = 0; + + if (!connected) + return false; + + //make sure we can find a client associated with this character id + if (!m_globalServer && (client = zone_list.GetClientByCharID(character_id)) == NULL) { + LogWrite(CHAT__ERROR, 0, "IRC", "No client found with character ID %u", character_id); + Disconnect(); + return false; + } + + //read off the socket - remember this socket is non blocking + memset(buf, 0, sizeof(buf)); + count = recv(sockfd, buf, sizeof(buf), 0); + + //did server shut us down gracefully? + if (count == 0) { + if (client) + client->Message(CHANNEL_COLOR_YELLOW, "You have been disconnected from IRC server %s.", host); + else + LogWrite(CHAT__DEBUG, 0, "IRC", "You have been disconnected from global IRC server"); + Disconnect(); + return false; + } + + //did we get an error? + //if we get WSAWEOULDBLOCK or EAGAIN, then there was no data for us on the socket this time around, don't disconnect +#ifdef _WIN32 + if (count < 0) { + if (WSAGetLastError() == WSAEWOULDBLOCK) + return true; +#else + if (count < 0) { + if (errno == EAGAIN) + return true; +#endif + else { + if (client) + client->Message(CHANNEL_COLOR_YELLOW, "You have been disconnected from IRC server %s because of an error.", host); + else + LogWrite(CHAT__DEBUG, 0, "IRC", "You have been disconnected from global IRC server because of an error"); + Disconnect(); + return false; + } + } + + //if we made it here then we got data! + //irc messages are separated by \r\n, so loop until we find a \n, replace it with a null to create a string then process it + start = buf; + end = buf; + i = 0; + + while (i < count) { + if (*end == '\n') { + *end = '\0'; + ProcessLine(client, start); + + //move to the next potential string + start = end + 1; + } + + i++; + end++; + } + + return true; +} + +void IRCServer::ProcessLine(Client *client, const char *line) { + char *ptr, *ptr2, *ptr3, *ptr4, *findme; + size_t len; + char *copy; + + //assert(client != NULL); + assert(line != NULL); + + if ((len = strlen(line)) == 0) { + LogWrite(CHAT__DEBUG, 0, "IRC", "Blank line recieved in IRCServer::ProcessLine"); + //fprintf(stderr, "Blank line received in IRCServer::ProcessLine\n"); + return; + } + + LogWrite(CHAT__DEBUG, 7, "IRC", "%s", line); + //printf("%s\n", line); + + //copy the line buffer so we dont ruin it with strtok + copy = new char[len + 1]; + strncpy(copy, line, len); + + if (len >= 4 && strncmp(line, "PING", 4) == 0) + HandlePing(); + else if (line[0] == ':') { + ptr = strtok(copy, " :"); + + if (ptr == NULL) { + LogWrite(CHAT__DEBUG, 0, "IRC", "Unknown IRC line in IRCServer::ProcessLine: '%s'", line); + //fprintf(stderr, "Unknown IRC line in IRCServer::ProcessLine: '%s'\n", line); + } + else { + + //:scatman!scatman@hidden-BC7E1801.hsd1.pa.comcast.net PRIVMSG #EQ2Dev :test --from user, public channel msg + //:scatman!scatman@hidden-BC7E1801.hsd1.pa.comcast.net PRIVMSG scatman :test --from user, private message + + //is this message from the server or a user? + if (strncmp(ptr, host, IRC_HOST_LEN_MAX) == 0) { + } + else { + ptr2 = strtok(NULL, " :"); + if (ptr2 == NULL) { + LogWrite(CHAT__DEBUG, 0, "IRC", "Unknown IRC line in IRCServer::ProcessLine: '%s'", line); + //fprintf(stderr, "Unknown IRC line in IRCServer::ProcessLine: '%s'\n", line); + } + else { + + if (strncmp(ptr2, "PRIVMSG", 7) == 0) { + ptr3 = strtok(NULL, " :"); //channel + ptr4 = strtok(NULL, "\r"); //message + + //strip the user's address + if ((findme = strstr(ptr, "!")) != NULL) + *findme = '\0'; + + //remove the leading semi-colon from the beginning of the message + if (ptr4[0] == ':') + ptr4++; + + if (ptr[0] == ':') + ptr++; + + //client->Message(CHANNEL_COLOR_YELLOW, "%s says to %s: \"%s\"", ptr, ptr3, ptr4); + if (ptr3[0] == '#') + ptr3++; + + // Add "[IRC]" to the front of the name + string name = string("[IRC]") + string(ptr); + LogWrite(CHAT__DEBUG, 7, "IRC", "IRC sending chat to EQ2 channel (Channel Name: %s, Message: %s, Name: %s)", ptr3, ptr4, name.c_str()); + chat.TellChannel(client, ptr3, ptr4, name.c_str()); + } + + } + } + } + } + + safe_delete_array(copy); +} + +void IRCServer::Send(IRCMessage *message) { + const char *msg; + size_t len; + int count; + + assert(message != NULL); + + msg = message->Serialize(); + len = message->GetLength(); + + if (msg == NULL) { + LogWrite(CHAT__ERROR, 0, "IRC", "Error sending IRC message to server %s. Message was null.", host); + //fprintf(stderr, "Error sending IRC message to server %s. Message was null.", host); + } + else if (len == 0) { + LogWrite(CHAT__ERROR, 0, "IRC", "Error sending IRC message server %s. Message length was 0.", host); + //fprintf(stderr, "Error sending IRC message server %s. Message length was 0.", host); + } + else { + LogWrite(CHAT__DEBUG, 7, "IRC", "IRC MSG: '%s'", msg); + //printf("IRC MSG: '%s'", msg); + if ((count = send(sockfd, msg, len, 0)) != (int)len) { + LogWrite(CHAT__ERROR, 0, "IRC", "Error sending IRC message '%s' to server %s. Tried to write %u bytes but only wrote %i", msg, host, len, count); + //fprintf(stderr, "Error sending IRC message '%s' to server %s. Tried to write %u bytes but only wrote %i", msg, host, len, count); + } + } + + safe_delete(message); +} + +void IRCServer::HandlePing() { + Send(new IRCMessage("PONG %s", host)); +} diff --git a/EQ2/source/WorldServer/IRC/IRCServer.h b/EQ2/source/WorldServer/IRC/IRCServer.h new file mode 100644 index 000000000..e89df1b7c --- /dev/null +++ b/EQ2/source/WorldServer/IRC/IRCServer.h @@ -0,0 +1,71 @@ +/* + EQ2Emulator: Everquest II Server Emulator + Copyright (C) 2007 EQ2EMulator Development Team (http://www.eq2emulator.net) + + This file is part of EQ2Emulator. + + EQ2Emulator is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + EQ2Emulator is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with EQ2Emulator. If not, see . +*/ +#ifndef IRC_SERVER_H_ +#define IRC_SERVER_H_ + +#include "../client.h" +#include "IRCChannel.h" +#include "IRCMessage.h" + +//maximum host length for an irc server +#define IRC_HOST_LEN_MAX 256 + +//maximum nick name on an irc server for the client +#define IRC_NICK_LEN_MAX 32 + +class IRCServer { +public: + IRCServer(); + IRCServer(int32 character_id, const char *host, short port, const char *nick); + IRCServer(const char *host, short port, const char *nick); + virtual ~IRCServer(); + + const char * GetHost() {return host;} + short GetPort() {return port;} + bool IsConnected() {return connected;} + vector * GetChannels() {return &channels;} + IRCChannel * GetChannel(const char *channel_name); + IRCChannel * GetChannel(int32 channel_index); + + int Connect(); + void Disconnect(); + int JoinChannel(const char *channel_name); + int LeaveChannel(const char *channel_name); + int Say(const char *channel_name, const char *message); + int Say(int32 channel_index, const char *message); + + bool Process(); + +private: + int32 character_id; + char host[IRC_HOST_LEN_MAX + 1]; //host (eg. irc.myircserver.com) + short port; //port (default is typically 6667) + char nick[IRC_NICK_LEN_MAX + 1]; + int sockfd; //socket used to connect to the irc server + vector channels; + bool connected; + void ProcessLine(Client *client, const char *line); + void Send(IRCMessage *message); + void HandlePing(); + void Say(IRCChannel *channel, const char *message); + bool m_globalServer; +}; + +#endif diff --git a/EQ2/source/WorldServer/Items/Items.cpp b/EQ2/source/WorldServer/Items/Items.cpp new file mode 100644 index 000000000..780ee485d --- /dev/null +++ b/EQ2/source/WorldServer/Items/Items.cpp @@ -0,0 +1,3506 @@ +/* + EQ2Emulator: Everquest II Server Emulator + Copyright (C) 2007 EQ2EMulator Development Team (http://www.eq2emulator.net) + + This file is part of EQ2Emulator. + + EQ2Emulator is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + EQ2Emulator is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with EQ2Emulator. If not, see . +*/ +#include "Items.h" +#include "../Spells.h" +#include "../Quests.h" +#include "../Player.h" +#include "../classes.h" +#include "math.h" +#include "../World.h" +#include "../LuaInterface.h" +#include "../../common/Log.h" +#include "../Entity.h" +#include "../Recipes/Recipe.h" +#include + +extern World world; +extern MasterSpellList master_spell_list; +extern MasterQuestList master_quest_list; +extern MasterRecipeList master_recipe_list; +extern ConfigReader configReader; +extern LuaInterface* lua_interface; + +MasterItemList::~MasterItemList(){ + RemoveAll(); +} + +vector* MasterItemList::GetItems(string name, int32 itype, int32 ltype, int32 btype, int64 minprice, int64 maxprice, int8 minskill, int8 maxskill, string seller, string adornment, int8 mintier, int8 maxtier, int16 minlevel, int16 maxlevel, sint8 itemclass){ + vector* ret = new vector; + map::iterator iter; + Item* item = 0; + const char* chkname = 0; + //const char* chkseller = 0; + //const char* chkadornment = 0; + if(name.length() > 0) + chkname = name.c_str(); + //if(seller.length() > 0) + // chkseller = seller.c_str(); + //if(adornment.length() > 0) + // chkadornment = adornment.c_str(); + bool should_add = true; + for(iter = items.begin();iter != items.end(); iter++){ + item = iter->second; + if(item){ + if(itype != ITEM_BROKER_TYPE_ANY){ + should_add = false; + switch(itype){ + case ITEM_BROKER_TYPE_ADORNMENT:{ + if(item->IsAdornment()) + should_add = true; + break; + } + case ITEM_BROKER_TYPE_AMMO:{ + if(item->IsAmmo()) + should_add = true; + break; + } + case ITEM_BROKER_TYPE_ATTUNEABLE:{ + if(item->CheckFlag(ATTUNEABLE)) + should_add = true; + break; + } + case ITEM_BROKER_TYPE_BAG:{ + if(item->IsBag()) + should_add = true; + break; + } + case ITEM_BROKER_TYPE_BAUBLE:{ + if(item->IsBauble()) + should_add = true; + break; + } + case ITEM_BROKER_TYPE_BOOK:{ + if(item->IsBook()) + should_add = true; + break; + } + case ITEM_BROKER_TYPE_CHAINARMOR:{ + if(item->IsChainArmor()) + should_add = true; + break; + } + case ITEM_BROKER_TYPE_CLOAK:{ + if(item->IsCloak()) + should_add = true; + break; + } + case ITEM_BROKER_TYPE_CLOTHARMOR:{ + if(item->IsClothArmor()) + should_add = true; + break; + } + case ITEM_BROKER_TYPE_COLLECTABLE:{ + if(item->IsCollectable()) + should_add = true; + break; + } + case ITEM_BROKER_TYPE_CRUSHWEAPON:{ + if(item->IsCrushWeapon()) + should_add = true; + break; + } + case ITEM_BROKER_TYPE_DRINK:{ + if(item->IsFoodDrink()) + should_add = true; + break; + } + case ITEM_BROKER_TYPE_FOOD:{ + if(item->IsFoodFood()) + should_add = true; + break; + } + case ITEM_BROKER_TYPE_HOUSEITEM:{ + if(item->IsHouseItem()) + should_add = true; + break; + } + case ITEM_BROKER_TYPE_JEWELRY:{ + if(item->IsJewelry()) + should_add = true; + break; + } + case ITEM_BROKER_TYPE_LEATHERARMOR:{ + if(item->IsLeatherArmor()) + should_add = true; + break; + } + case ITEM_BROKER_TYPE_LORE:{ + if(item->CheckFlag(LORE)) + should_add = true; + break; + } + case ITEM_BROKER_TYPE_MISC:{ + if(item->IsMisc()) + should_add = true; + break; + } + case ITEM_BROKER_TYPE_PIERCEWEAPON:{ + if(item->IsPierceWeapon()) + should_add = true; + break; + } + case ITEM_BROKER_TYPE_PLATEARMOR:{ + if(item->IsPlateArmor()) + should_add = true; + break; + } + case ITEM_BROKER_TYPE_POISON:{ + if(item->IsPoison()) + should_add = true; + break; + } + case ITEM_BROKER_TYPE_POTION:{ + if(item->IsPotion()) + should_add = true; + break; + } + case ITEM_BROKER_TYPE_RECIPEBOOK:{ + if(item->IsRecipeBook()) + should_add = true; + break; + } + case ITEM_BROKER_TYPE_SALESDISPLAY:{ + if(item->IsSalesDisplay()) + should_add = true; + break; + } + case ITEM_BROKER_TYPE_SHIELD:{ + if(item->IsShield()) + should_add = true; + break; + } + case ITEM_BROKER_TYPE_SLASHWEAPON:{ + if(item->IsSlashWeapon()) + should_add = true; + break; + } + case ITEM_BROKER_TYPE_SPELLSCROLL:{ + if(item->IsSpellScroll()) + should_add = true; + break; + } + case ITEM_BROKER_TYPE_TINKERED:{ + if(item->IsTinkered()) + should_add = true; + break; + } + case ITEM_BROKER_TYPE_TRADESKILL:{ + if(item->IsTradeskill()) + should_add = true; + break; + } + } + if(!should_add) + continue; + } + if(ltype != ITEM_BROKER_SLOT_ANY){ + should_add = false; + switch(ltype){ + case ITEM_BROKER_SLOT_AMMO:{ + should_add = item->HasSlot(EQ2_AMMO_SLOT); + break; + } + case ITEM_BROKER_SLOT_CHARM:{ + should_add = item->HasSlot(EQ2_CHARM_SLOT_1, EQ2_CHARM_SLOT_2); + break; + } + case ITEM_BROKER_SLOT_CHEST:{ + should_add = item->HasSlot(EQ2_CHEST_SLOT); + break; + } + case ITEM_BROKER_SLOT_CLOAK:{ + should_add = item->HasSlot(EQ2_CLOAK_SLOT); + break; + } + case ITEM_BROKER_SLOT_DRINK:{ + should_add = item->HasSlot(EQ2_DRINK_SLOT); + break; + } + case ITEM_BROKER_SLOT_EARS:{ + should_add = item->HasSlot(EQ2_EARS_SLOT_1, EQ2_EARS_SLOT_2); + break; + } + case ITEM_BROKER_SLOT_FEET:{ + should_add = item->HasSlot(EQ2_FEET_SLOT); + break; + } + case ITEM_BROKER_SLOT_FOOD:{ + should_add = item->HasSlot(EQ2_FOOD_SLOT); + break; + } + case ITEM_BROKER_SLOT_FOREARMS:{ + should_add = item->HasSlot(EQ2_FOREARMS_SLOT); + break; + } + case ITEM_BROKER_SLOT_HANDS:{ + should_add = item->HasSlot(EQ2_HANDS_SLOT); + break; + } + case ITEM_BROKER_SLOT_HEAD:{ + should_add = item->HasSlot(EQ2_HEAD_SLOT); + break; + } + case ITEM_BROKER_SLOT_LEGS:{ + should_add = item->HasSlot(EQ2_LEGS_SLOT); + break; + } + case ITEM_BROKER_SLOT_NECK:{ + should_add = item->HasSlot(EQ2_NECK_SLOT); + break; + } + case ITEM_BROKER_SLOT_PRIMARY:{ + should_add = item->HasSlot(EQ2_PRIMARY_SLOT); + break; + } + case ITEM_BROKER_SLOT_PRIMARY_2H:{ + should_add = item->HasSlot(EQ2_PRIMARY_SLOT) && item->IsWeapon() && item->weapon_info->wield_type == ITEM_WIELD_TYPE_TWO_HAND; + break; + } + case ITEM_BROKER_SLOT_RANGE_WEAPON:{ + should_add = item->HasSlot(EQ2_RANGE_SLOT); + break; + } + case ITEM_BROKER_SLOT_RING:{ + should_add = item->HasSlot(EQ2_LRING_SLOT, EQ2_RRING_SLOT); + break; + } + case ITEM_BROKER_SLOT_SECONDARY:{ + should_add = item->HasSlot(EQ2_SECONDARY_SLOT); + break; + } + case ITEM_BROKER_SLOT_SHOULDERS:{ + should_add = item->HasSlot(EQ2_SHOULDERS_SLOT); + break; + } + case ITEM_BROKER_SLOT_WAIST:{ + should_add = item->HasSlot(EQ2_WAIST_SLOT); + break; + } + case ITEM_BROKER_SLOT_WRIST:{ + should_add = item->HasSlot(EQ2_LWRIST_SLOT, EQ2_RWRIST_SLOT); + break; + } + } + if(!should_add) + continue; + } + + if(btype != 0xFFFFFFFF){ + vector::iterator itr; + bool stat_found = false; + should_add = false; + switch(btype){ + case ITEM_BROKER_STAT_TYPE_NONE:{ + if (item->item_stats.size() == 0) + should_add = true; + break; + } + case ITEM_BROKER_STAT_TYPE_DEF:{ + for (itr = item->item_stats.begin(); itr != item->item_stats.end() && !stat_found; itr++) { + if ((*itr)->stat_type_combined == ITEM_STAT_DEFLECTIONCHANCE) { + stat_found = true; + break; + } + } + if (stat_found) + should_add = true; + break; + } + case ITEM_BROKER_STAT_TYPE_STR:{ + for (itr = item->item_stats.begin(); itr != item->item_stats.end() && !stat_found; itr++) { + if ((*itr)->stat_type_combined == ITEM_STAT_STR) { + stat_found = true; + break; + } + } + if (stat_found) + should_add = true; + break; + } + case ITEM_BROKER_STAT_TYPE_STA:{ + for (itr = item->item_stats.begin(); itr != item->item_stats.end() && !stat_found; itr++) { + if ((*itr)->stat_type_combined == ITEM_STAT_STA) { + stat_found = true; + break; + } + } + if (stat_found) + should_add = true; + break; + } + case ITEM_BROKER_STAT_TYPE_AGI:{ + for (itr = item->item_stats.begin(); itr != item->item_stats.end() && !stat_found; itr++) { + if ((*itr)->stat_type_combined == ITEM_STAT_AGI) { + stat_found = true; + break; + } + } + if (stat_found) + should_add = true; + break; + } + case ITEM_BROKER_STAT_TYPE_WIS:{ + for (itr = item->item_stats.begin(); itr != item->item_stats.end() && !stat_found; itr++) { + if ((*itr)->stat_type_combined == ITEM_STAT_WIS) { + stat_found = true; + break; + } + } + if (stat_found) + should_add = true; + break; + } + case ITEM_BROKER_STAT_TYPE_INT:{ + for (itr = item->item_stats.begin(); itr != item->item_stats.end() && !stat_found; itr++) { + if ((*itr)->stat_type_combined == ITEM_STAT_INT) { + stat_found = true; + break; + } + } + if (stat_found) + should_add = true; + break; + } + case ITEM_BROKER_STAT_TYPE_HEALTH:{ + for (itr = item->item_stats.begin(); itr != item->item_stats.end() && !stat_found; itr++) { + if ((*itr)->stat_type_combined == ITEM_STAT_STR) { + stat_found = true; + break; + } + } + if (stat_found) + should_add = true; + break; + } + case ITEM_BROKER_STAT_TYPE_POWER:{ + for (itr = item->item_stats.begin(); itr != item->item_stats.end() && !stat_found; itr++) { + if ((*itr)->stat_type_combined == ITEM_STAT_STR) { + stat_found = true; + break; + } + } + if (stat_found) + should_add = true; + break; + } + case ITEM_BROKER_STAT_TYPE_HEAT:{ + for (itr = item->item_stats.begin(); itr != item->item_stats.end() && !stat_found; itr++) { + if ((*itr)->stat_type_combined == ITEM_STAT_VS_HEAT) { + stat_found = true; + break; + } + } + if (stat_found) + should_add = true; + break; + } + case ITEM_BROKER_STAT_TYPE_COLD:{ + for (itr = item->item_stats.begin(); itr != item->item_stats.end() && !stat_found; itr++) { + if ((*itr)->stat_type_combined == ITEM_STAT_VS_COLD) { + stat_found = true; + break; + } + } + if (stat_found) + should_add = true; + break; + } + case ITEM_BROKER_STAT_TYPE_MAGIC:{ + for (itr = item->item_stats.begin(); itr != item->item_stats.end() && !stat_found; itr++) { + if ((*itr)->stat_type_combined == ITEM_STAT_VS_MAGIC) { + stat_found = true; + break; + } + } + if (stat_found) + should_add = true; + break; + } + case ITEM_BROKER_STAT_TYPE_MENTAL:{ + for (itr = item->item_stats.begin(); itr != item->item_stats.end() && !stat_found; itr++) { + if ((*itr)->stat_type_combined == ITEM_STAT_VS_MENTAL) { + stat_found = true; + break; + } + } + if (stat_found) + should_add = true; + break; + } + case ITEM_BROKER_STAT_TYPE_DIVINE:{ + for (itr = item->item_stats.begin(); itr != item->item_stats.end() && !stat_found; itr++) { + if ((*itr)->stat_type_combined == ITEM_STAT_VS_DIVINE) { + stat_found = true; + break; + } + } + if (stat_found) + should_add = true; + break; + } + case ITEM_BROKER_STAT_TYPE_POISON:{ + for (itr = item->item_stats.begin(); itr != item->item_stats.end() && !stat_found; itr++) { + if ((*itr)->stat_type_combined == ITEM_STAT_VS_POISON) { + stat_found = true; + break; + } + } + if (stat_found) + should_add = true; + break; + } + case ITEM_BROKER_STAT_TYPE_DISEASE:{ + for (itr = item->item_stats.begin(); itr != item->item_stats.end() && !stat_found; itr++) { + if ((*itr)->stat_type_combined == ITEM_STAT_VS_DISEASE) { + stat_found = true; + break; + } + } + if (stat_found) + should_add = true; + break; + } + case ITEM_BROKER_STAT_TYPE_CRUSH:{ + for (itr = item->item_stats.begin(); itr != item->item_stats.end() && !stat_found; itr++) { + if ((*itr)->stat_type_combined == ITEM_STAT_DMG_CRUSH) { + stat_found = true; + break; + } + } + if (stat_found) + should_add = true; + break; + } + case ITEM_BROKER_STAT_TYPE_SLASH:{ + for (itr = item->item_stats.begin(); itr != item->item_stats.end() && !stat_found; itr++) { + if ((*itr)->stat_type_combined == ITEM_STAT_DMG_SLASH) { + stat_found = true; + break; + } + } + if (stat_found) + should_add = true; + break; + } + case ITEM_BROKER_STAT_TYPE_PIERCE:{ + for (itr = item->item_stats.begin(); itr != item->item_stats.end() && !stat_found; itr++) { + if ((*itr)->stat_type_combined == ITEM_STAT_DMG_PIERCE) { + stat_found = true; + break; + } + } + if (stat_found) + should_add = true; + break; + } + case ITEM_BROKER_STAT_TYPE_CRITICAL: { + /*for (itr = item->item_stats.begin(); itr != item->item_stats.end() && !stat_found; itr++) { + if ((*itr)->stat_type_combined == ITEM_STAT_STR) { + stat_found = true; + break; + } + } + if (stat_found) + should_add = true;*/ + LogWrite(ITEM__DEBUG, 0, "Item", "Scatman debugging :). This needs to be updated when fully support the new expansion"); + break; + } + case ITEM_BROKER_STAT_TYPE_DBL_ATTACK:{ + /*for (itr = item->item_stats.begin(); itr != item->item_stats.end() && !stat_found; itr++) { + if ((*itr)->stat_type_combined == ITEM_STAT_STR) { + stat_found = true; + break; + } + } + if (stat_found) + should_add = true;*/ + LogWrite(ITEM__DEBUG, 0, "Item", "Scatman debugging :). This needs to be updated when fully support the new expansion"); + break; + } + case ITEM_BROKER_STAT_TYPE_ABILITY_MOD:{ + /*for (itr = item->item_stats.begin(); itr != item->item_stats.end() && !stat_found; itr++) { + if ((*itr)->stat_type_combined == ITEM_STAT_STR) { + stat_found = true; + break; + } + } + if (stat_found) + should_add = true;*/ + LogWrite(ITEM__DEBUG, 0, "Item", "Scatman debugging :). This needs to be updated when fully support the new expansion"); + break; + } + case ITEM_BROKER_STAT_TYPE_POTENCY:{ + /*for (itr = item->item_stats.begin(); itr != item->item_stats.end() && !stat_found; itr++) { + if ((*itr)->stat_type_combined == ITEM_STAT_STR) { + stat_found = true; + break; + } + } + if (stat_found) + should_add = true;*/ + LogWrite(ITEM__DEBUG, 0, "Item", "Scatman debugging :). This needs to be updated when fully support the new expansion"); + break; + } + default: { + LogWrite(ITEM__ERROR, 0, "Item", "Unknown item broker stat type %u", btype); + LogWrite(ITEM__DEBUG, 0, "Item", "If you have a client before the new expansion this may be the reason. Please be patient while we update items to support the new client.", btype); + break; + } + } + if (!should_add) + continue; + } + + if(itemclass > 0){ + int64 tmpVal = ((int64)2) << (itemclass-1); + should_add = (item->generic_info.adventure_classes & tmpVal); + if(!should_add && !(item->generic_info.tradeskill_classes & tmpVal)) + continue; + } + if(chkname && item->lowername.find(chkname) >= 0xFFFFFFFF) + continue; + if(item->generic_info.adventure_default_level == 0 && item->generic_info.tradeskill_default_level == 0 && minlevel > 0 && maxlevel > 0){ + if(item->details.recommended_level < minlevel) + continue; + if(item->details.recommended_level > maxlevel) + continue; + } + else{ + if(minlevel > 0 && ((item->generic_info.adventure_default_level == 0 && item->generic_info.tradeskill_default_level == 0) || (item->generic_info.adventure_default_level > 0 && item->generic_info.adventure_default_level < minlevel) || (item->generic_info.tradeskill_default_level > 0 && item->generic_info.tradeskill_default_level < minlevel))) + continue; + if(maxlevel > 0 && ((item->generic_info.adventure_default_level > 0 && item->generic_info.adventure_default_level > maxlevel) || (item->generic_info.tradeskill_default_level > 0 && item->generic_info.tradeskill_default_level > maxlevel))) + continue; + } + if(mintier > 0 && item->details.tier < mintier) + continue; + if(maxtier > 0 && item->details.tier > maxtier) + continue; + if(minskill > 0 && item->generic_info.skill_min < minskill) + continue; + if(maxskill > 0 && item->generic_info.skill_min > maxskill) + continue; + ret->push_back(item); + } + } + return ret; +} + +vector* MasterItemList::GetItems(map criteria){ + string name, seller, adornment; + int32 itype = 0xFFFFFFFF; + int32 ltype = 0xFFFFFFFF; + int32 btype = 0xFFFFFFFF; + int64 minprice = 0; + int64 maxprice = 0; + int8 minskill = 0; + int8 maxskill = 0; + int8 mintier = 0; + int8 maxtier = 0; + int16 minlevel = 0; + int16 maxlevel = 0; + sint8 itemclass = 0; + if(criteria.count("ITEM") > 0) + name = criteria["ITEM"]; + if(criteria.count("MINSKILL") > 0) + minskill = (int8)ParseIntValue(criteria["MINSKILL"]); + if(criteria.count("MAXSKILL") > 0) + maxskill = (int8)ParseIntValue(criteria["MAXSKILL"]); + if(criteria.count("MINTIER") > 0) + mintier = (int8)ParseIntValue(criteria["MINTIER"]); + if(criteria.count("MAXTIER") > 0) + maxtier = (int8)ParseIntValue(criteria["MAXTIER"]); + if(criteria.count("MINLEVEL") > 0) + minlevel = (int16)ParseIntValue(criteria["MINLEVEL"]); + if(criteria.count("MAXLEVEL") > 0) + maxlevel = (int16)ParseIntValue(criteria["MAXLEVEL"]); + if(criteria.count("ITYPE") > 0) + itype = ParseIntValue(criteria["ITYPE"]); + if(criteria.count("LTYPE") > 0) + ltype = ParseIntValue(criteria["LTYPE"]); + if(criteria.count("BTYPE") > 0) + btype = ParseIntValue(criteria["BTYPE"]); + if(criteria.count("SKILLNAME") > 0) + itemclass = world.GetClassID(criteria["SKILLNAME"].c_str()); + return GetItems(name, itype, ltype, btype, minprice, maxprice, minskill, maxskill, seller, adornment, mintier, maxtier, minlevel, maxlevel, itemclass); +} + +void MasterItemList::ResetUniqueID(int32 new_id){ + next_unique_id = new_id; +} + +int32 MasterItemList::NextUniqueID(){ + next_unique_id++; + if(next_unique_id >= 0xFFFFFFF0) + next_unique_id = 1; + return next_unique_id; +} + +bool MasterItemList::IsBag(int32 item_id){ + Item* item = GetItem(item_id); + if(item && item->details.num_slots > 0) + return true; + else + return false; +} + + +Item* MasterItemList::GetItem(int32 id){ + Item* item = 0; + if(items.count(id) > 0) + item = items[id]; + return item; +} + +Item* MasterItemList::GetItemByName(const char* name) { + Item* item = 0; + map::iterator itr; + for (itr = items.begin(); itr != items.end(); itr++) { + Item* current_item = itr->second; + if (::ToLower(string(current_item->name.c_str())) == ::ToLower(string(name))) { + item = current_item; + break; + } + } + return item; +} + +ItemStatsValues* MasterItemList::CalculateItemBonuses(int32 item_id, Entity* entity){ + return CalculateItemBonuses(items[item_id], entity); +} + +ItemStatsValues* MasterItemList::CalculateItemBonuses(Item* item, Entity* entity, ItemStatsValues* values){ + if(item){ + if(!values){ + values = new ItemStatsValues; + memset(values, 0, sizeof(ItemStatsValues)); + } + for(int32 i=0;iitem_stats.size();i++){ + ItemStat* stat = item->item_stats[i]; + world.AddBonuses(values, stat->stat_type*100 + stat->stat_subtype, stat->value, entity); + } + return values; + } + return 0; +} + +void MasterItemList::RemoveAll(){ + map::iterator iter; + for(iter = items.begin();iter != items.end(); iter++){ + safe_delete(iter->second); + } + items.clear(); + if(lua_interface) + lua_interface->DestroyItemScripts(); +} + +void MasterItemList::AddItem(Item* item){ + items[item->details.item_id] = item; +} + +Item::Item(){ + item_script = ""; + sell_price = 0; + sell_status = 0; + max_sell_value = 0; + save_needed = true; + needs_deletion = false; + weapon_info = 0; + ranged_info = 0; + adornment_info = 0; + bag_info = 0; + food_info = 0; + bauble_info = 0; + thrown_info = 0; + skill_info = 0; + recipebook_info = 0; + itemset_info = 0; + armor_info = 0; + book_info = 0; + book_info_pages = 0; + houseitem_info = 0; + housecontainer_info = 0; + memset(&details, 0, sizeof(ItemCore)); + memset(&generic_info, 0, sizeof(Generic_Info)); + generic_info.condition = 100; +} + +Item::Item(Item* in_item){ + needs_deletion = false; + sell_price = in_item->sell_price; + sell_status = in_item->sell_status; + max_sell_value = in_item->max_sell_value; + save_needed = true; + SetItem(in_item); + details.unique_id = master_item_list.NextUniqueID(); + generic_info.condition = 100; + spell_id = in_item->spell_id; + spell_tier = in_item->spell_tier; +} + +Item::~Item(){ + for(int32 i=0;iGetItemScript()) + SetItemScript(old_item->GetItemScript()); + name = old_item->name; + lowername = old_item->lowername; + description = old_item->description; + memcpy(&generic_info, &old_item->generic_info, sizeof(Generic_Info)); + weapon_info = 0; + ranged_info = 0; + adornment_info = 0; + adorn0 = 0; + adorn1 = 0; + adorn2 = 0; + bag_info = 0; + food_info = 0; + bauble_info = 0; + thrown_info = 0; + skill_info = 0; + recipebook_info = 0; + itemset_info = 0; + armor_info = 0; + book_info = 0; + book_info_pages = 0; + houseitem_info = 0; + housecontainer_info = 0; + stack_count = old_item->stack_count; + generic_info.skill_req1 = old_item->generic_info.skill_req1; + generic_info.skill_req2 = old_item->generic_info.skill_req2; + memcpy(&details, &old_item->details, sizeof(ItemCore)); + weapon_type = old_item->GetWeaponType(); + switch(old_item->generic_info.item_type){ + case ITEM_TYPE_WEAPON:{ + weapon_info = new Weapon_Info; + memcpy(weapon_info, old_item->weapon_info, sizeof(Weapon_Info)); + break; + } + case ITEM_TYPE_RANGED:{ + ranged_info = new Ranged_Info; + memcpy(ranged_info, old_item->ranged_info, sizeof(Ranged_Info)); + break; + } + case ITEM_TYPE_SHIELD: + case ITEM_TYPE_ARMOR:{ + armor_info = new Armor_Info; + memcpy(armor_info, old_item->armor_info, sizeof(Armor_Info)); + break; + } + case ITEM_TYPE_BAG:{ + bag_info = new Bag_Info; + memcpy(bag_info, old_item->bag_info, sizeof(Bag_Info)); + break; + } + case ITEM_TYPE_FOOD:{ + food_info = new Food_Info; + memcpy(food_info, old_item->food_info, sizeof(Food_Info)); + break; + } + case ITEM_TYPE_BAUBLE:{ + bauble_info = new Bauble_Info; + memcpy(bauble_info, old_item->bauble_info, sizeof(Bauble_Info)); + break; + } + case ITEM_TYPE_SKILL:{ + skill_info = new Skill_Info; + memcpy(skill_info, old_item->skill_info, sizeof(Skill_Info)); + break; + } + case ITEM_TYPE_THROWN:{ + thrown_info = new Thrown_Info; + memcpy(thrown_info, old_item->thrown_info, sizeof(Thrown_Info)); + break; + } + case ITEM_TYPE_BOOK:{ + book_info = new Book_Info; + book_info->language = old_item->book_info->language; + book_info->author.data = old_item->book_info->author.data; + book_info->author.size = old_item->book_info->author.size; + book_info->title.data = old_item->book_info->title.data; + book_info->title.size = old_item->book_info->title.size; + + break; + } + case ITEM_TYPE_HOUSE:{ + houseitem_info = new HouseItem_Info; + memcpy(houseitem_info, old_item->houseitem_info, sizeof(HouseItem_Info)); + break; + } + case ITEM_TYPE_RECIPE:{ + // Recipe Book + recipebook_info = new RecipeBook_Info; + if (old_item->recipebook_info) { + recipebook_info->uses = old_item->recipebook_info->uses; + for (int32 i = 0; i < old_item->recipebook_info->recipes.size(); i++) + recipebook_info->recipes.push_back(old_item->recipebook_info->recipes.at(i)); + } + break; + } + + case ITEM_TYPE_ADORNMENT:{ + adornment_info = new Adornment_Info; + memcpy(adornment_info, old_item->adornment_info, sizeof(Adornment_Info)); + break; + } + case ITEM_TYPE_HOUSE_CONTAINER:{ + // House Containers + housecontainer_info = new HouseContainer_Info; + if (old_item->housecontainer_info) { + housecontainer_info->broker_commission = old_item->housecontainer_info->broker_commission; + housecontainer_info->fence_commission = old_item->housecontainer_info->fence_commission; + housecontainer_info->allowed_types = old_item->housecontainer_info->allowed_types; + housecontainer_info->num_slots = old_item->housecontainer_info->num_slots; + } + break; + } + } + creator = old_item->creator; + adornment = old_item->adornment; + item_sets.clear(); + for (int32 i = 0; iitem_sets.size(); i++){ + ItemSet* set = old_item->item_sets[i]; + if (set){ + ItemSet* set2 = new ItemSet; + set2->item_id = set->item_id; + set2->item_crc = set->item_crc; + set2->item_icon = set->item_icon; + set2->item_stack_size = set->item_stack_size; + set2->item_list_color = set->item_list_color; + item_sets.push_back(set2); + } + } + item_stats.clear(); + for(int32 i=0;iitem_stats.size();i++){ + ItemStat* stat = old_item->item_stats[i]; + if(stat){ + ItemStat* stat2 = new ItemStat; + stat2->stat_name = stat->stat_name; + stat2->stat_type = stat->stat_type; + stat2->stat_subtype = stat->stat_subtype; + stat2->value = stat->value; + stat2->stat_type_combined = stat->stat_type_combined; + item_stats.push_back(stat2); + } + } + item_string_stats.clear(); + for(int32 i=0;iitem_string_stats.size();i++){ + ItemStatString* stat = old_item->item_string_stats[i]; + if(stat){ + ItemStatString* stat2 = new ItemStatString; + stat2->stat_string.data = stat->stat_string.data; + stat2->stat_string.size = stat->stat_string.size; + item_string_stats.push_back(stat2); + } + } + item_level_overrides.clear(); + for(int32 i=0;iitem_level_overrides.size();i++){ + ItemLevelOverride* item_override = old_item->item_level_overrides[i]; + if(item_override){ + ItemLevelOverride* item_override2 = new ItemLevelOverride; + memcpy(item_override2, item_override, sizeof(ItemLevelOverride)); + item_level_overrides.push_back(item_override2); + } + } + item_effects.clear(); + for(int32 i=0;iitem_effects.size();i++){ + ItemEffect* effect = old_item->item_effects[i]; + if(effect){ + ItemEffect* effect_2 = new ItemEffect; + effect_2->effect = effect->effect; + effect_2->percentage = effect->percentage; + effect_2->subbulletflag = effect->subbulletflag; + item_effects.push_back(effect_2); + } + } + book_pages.clear(); + for (int32 i = 0; i < old_item->book_pages.size(); i++) { + BookPage* bookpage = old_item->book_pages[i]; + if (bookpage) { + BookPage* bookpage_2 = new BookPage; + bookpage_2->page = bookpage->page; + bookpage_2->page_text.data = bookpage->page_text.data; + bookpage_2->page_text.size = bookpage->page_text.size; + bookpage_2->valign = bookpage->valign; + bookpage_2->halign = bookpage->halign; + + + + + book_pages.push_back(bookpage_2); + } + } + slot_data.clear(); + slot_data = old_item->slot_data; + spell_id = old_item->spell_id; + spell_tier = old_item->spell_tier; +} + +bool Item::CheckClass(int8 adventure_class, int8 tradeskill_class) { + int64 adv_classes = ((int64)2) << (adventure_class - 1); + int64 ts_classes = ((int64)2) << (tradeskill_class - 1); + if( ((generic_info.adventure_classes & adv_classes) || generic_info.adventure_classes == 0) && ((generic_info.tradeskill_classes & ts_classes) || generic_info.tradeskill_classes == 0) ) + return true; + return false; +} + +bool Item::CheckLevel(int8 adventure_class, int8 tradeskill_class, int16 level) { + if ((level >= generic_info.adventure_default_level && adventure_class < 255) && (level >= generic_info.tradeskill_default_level && tradeskill_class < 255)) + return true; + return false; +} + +void Item::AddStat(ItemStat* in_stat){ + item_stats.push_back(in_stat); +} +void Item::AddSet(ItemSet* in_set){ + item_sets.push_back(in_set); +} +void Item::AddStatString(ItemStatString* in_stat){ + item_string_stats.push_back(in_stat); +} + +bool Item::IsNormal(){ + return generic_info.item_type == ITEM_TYPE_NORMAL; +} + +bool Item::IsWeapon(){ + return generic_info.item_type == ITEM_TYPE_WEAPON; +} + +bool Item::IsArmor(){ + return generic_info.item_type == ITEM_TYPE_ARMOR || generic_info.item_type == ITEM_TYPE_SHIELD; +} + +bool Item::IsRanged(){ + return generic_info.item_type == ITEM_TYPE_RANGED; +} + +bool Item::IsBag(){ + return generic_info.item_type == ITEM_TYPE_BAG; +} + +bool Item::IsFood(){ + return generic_info.item_type == ITEM_TYPE_FOOD; +} + +bool Item::IsBauble(){ + return generic_info.item_type == ITEM_TYPE_BAUBLE; +} + +bool Item::IsSkill(){ + return generic_info.item_type == ITEM_TYPE_SKILL; +} + +bool Item::IsHouseItem(){ + return generic_info.item_type == ITEM_TYPE_HOUSE; +} + +bool Item::IsHouseContainer(){ + return generic_info.item_type == ITEM_TYPE_HOUSE_CONTAINER; +} + +bool Item::IsShield(){ + return generic_info.item_type == ITEM_TYPE_SHIELD; +} + +bool Item::IsAdornment(){ + LogWrite(MISC__TODO, 1, "TODO", "Item Adornments\n\t(%s, function: %s, line #: %i)", __FILE__, __FUNCTION__, __LINE__); + return generic_info.item_type == ITEM_TYPE_ADORNMENT; +} + +bool Item::IsAmmo(){ + return HasSlot(EQ2_AMMO_SLOT); +} + +bool Item::HasAdorn0(){ + if (adorn0 > 0) + return true; + + return false; +} + +bool Item::HasAdorn1(){ + if (adorn1 > 0) + return true; + + return false; +} + +bool Item::HasAdorn2(){ + if (adorn2 > 0) + return true; + + return false; +} + + + + +bool Item::IsBook(){ + return generic_info.item_type == ITEM_TYPE_BOOK; +} + +bool Item::IsChainArmor(){ + return generic_info.item_type == ITEM_TYPE_ARMOR && (generic_info.skill_req1 == 2246237129UL || generic_info.skill_req2 == 2246237129UL); +} + +bool Item::IsClothArmor(){ + return generic_info.item_type == ITEM_TYPE_ARMOR && (generic_info.skill_req1 == 3539032716UL || generic_info.skill_req2 == 3539032716UL); +} + +bool Item::IsCollectable(){ + return generic_info.collectable == 1; +} + +bool Item::HasSlot(int8 slot, int8 slot2){ + for(int32 i=0;itype == 1; +} + +bool Item::IsFoodDrink(){ + return generic_info.item_type == ITEM_TYPE_FOOD && food_info && food_info->type == 0; +} + +bool Item::IsJewelry(){ + if(generic_info.item_type != ITEM_TYPE_ARMOR || (generic_info.skill_req1 != 2072844078 && generic_info.skill_req2 != 2072844078)) + return false; + for(int32 i=0;iuses = 0; + } + else if(IsBook() && !book_info){ + book_info = new Book_Info; + book_info->language = 0; + book_info->author.size = 0; + book_info->title.size = 0; + } + else if(IsHouseItem() && !houseitem_info){ + houseitem_info = new HouseItem_Info; + memset(houseitem_info, 0, sizeof(HouseItem_Info)); + } + else if(IsHouseContainer() && !housecontainer_info){ + housecontainer_info = new HouseContainer_Info; + housecontainer_info->allowed_types = 0; + housecontainer_info->broker_commission = 0; + housecontainer_info->fence_commission = 0; + housecontainer_info->num_slots = 0; + } +} +bool Item::CheckFlag2(int32 flag){ + int32 value = 0; + int32 flag_val = generic_info.item_flags2; + while (flag_val > 0){ + if (flag_val >= FLAGS2_32768) + value = FLAGS2_32768; + else if (flag_val >= FLAGS2_16384) + value = FLAGS2_16384; + else if (flag_val >= FLAGS2_8192) + value = FLAGS2_8192; + else if (flag_val >= FLAGS2_4096) + value = FLAGS2_4096; + else if (flag_val >= FLAGS2_2048) + value = FLAGS2_2048; + else if (flag_val >= FLAGS2_1024) + value = FLAGS2_1024; + else if (flag_val >= FLAGS2_512) + value = FLAGS2_512; + else if (flag_val >= FLAGS2_256) + value = FLAGS2_256; + else if (flag_val >= REFINED) + value = REFINED; + else if (flag_val >= ETHERAL) + value = ETHERAL; + else if (flag_val >= NO_REPAIR) + value = NO_REPAIR; + else if (flag_val >= REFORGED) + value = REFORGED; + else if (flag_val >= UNLOCKED) + value = UNLOCKED; + else if (flag_val >= APPEARANCE_ONLY) + value = APPEARANCE_ONLY; + else if (flag_val >= HEIRLOOM) + value = HEIRLOOM; + else if (flag_val >= ORNATE) + value = ORNATE; + if (value == flag) + return true; + else + flag_val -= value; + } + + return false; +} + +bool Item::CheckFlag(int32 flag){ + int32 value = 0; + int32 flag_val = generic_info.item_flags; + while(flag_val>0){ + if (flag_val >= FLAGS_32768) //change this + value = FLAGS_32768; + else if (flag_val >= FLAGS_16384) //change this + value = FLAGS_16384; + else if (flag_val >= LORE_EQUIP) //change this + value = LORE_EQUIP; + else if (flag_val >= STACK_LORE) //change this + value = STACK_LORE; + else if(flag_val >= EVIL_ONLY) + value = EVIL_ONLY; + else if(flag_val >= GOOD_ONLY) + value = GOOD_ONLY; + else if(flag_val >= CRAFTED) + value = CRAFTED; + else if(flag_val >= NO_DESTROY) + value = NO_DESTROY; + else if(flag_val >= NO_ZONE) + value = NO_ZONE; + else if(flag_val >= NO_VALUE) + value = NO_VALUE; + else if(flag_val >= NO_TRADE) + value = NO_TRADE; + else if(flag_val >= TEMPORARY) + value = TEMPORARY; + else if(flag_val >= LORE) + value = LORE; + else if(flag_val >= ARTIFACT) + value = ARTIFACT; + else if(flag_val >= ATTUNEABLE) + value = ATTUNEABLE; + else if(flag_val >= ATTUNED) + value = ATTUNED; + if(value == flag) + return true; + else + flag_val -= value; + } + return false; +} + +void Item::SetSlots(int32 slots){ + if(slots & PRIMARY_SLOT) + AddSlot(EQ2_PRIMARY_SLOT); + if(slots & SECONDARY_SLOT) + AddSlot(EQ2_SECONDARY_SLOT); + if(slots & HEAD_SLOT) + AddSlot(EQ2_HEAD_SLOT); + if(slots & CHEST_SLOT) + AddSlot(EQ2_CHEST_SLOT); + if(slots & SHOULDERS_SLOT) + AddSlot(EQ2_SHOULDERS_SLOT); + if(slots & FOREARMS_SLOT) + AddSlot(EQ2_FOREARMS_SLOT); + if(slots & HANDS_SLOT) + AddSlot(EQ2_HANDS_SLOT); + if(slots & LEGS_SLOT) + AddSlot(EQ2_LEGS_SLOT); + if(slots & FEET_SLOT) + AddSlot(EQ2_FEET_SLOT); + if(slots & LRING_SLOT) + AddSlot(EQ2_LRING_SLOT); + if(slots & RRING_SLOT) + AddSlot(EQ2_RRING_SLOT); + if(slots & EARS_SLOT_1) + AddSlot(EQ2_EARS_SLOT_1); + if(slots & EARS_SLOT_2) + AddSlot(EQ2_EARS_SLOT_2); + if(slots & NECK_SLOT) + AddSlot(EQ2_NECK_SLOT); + if(slots & LWRIST_SLOT) + AddSlot(EQ2_LWRIST_SLOT); + if(slots & RWRIST_SLOT) + AddSlot(EQ2_RWRIST_SLOT); + if(slots & RANGE_SLOT) + AddSlot(EQ2_RANGE_SLOT); + if(slots & AMMO_SLOT) + AddSlot(EQ2_AMMO_SLOT); + if(slots & WAIST_SLOT) + AddSlot(EQ2_WAIST_SLOT); + if(slots & CLOAK_SLOT) + AddSlot(EQ2_CLOAK_SLOT); + if(slots & CHARM_SLOT_1) + AddSlot(EQ2_CHARM_SLOT_1); + if(slots & CHARM_SLOT_2) + AddSlot(EQ2_CHARM_SLOT_2); + if(slots & FOOD_SLOT) + AddSlot(EQ2_FOOD_SLOT); + if(slots & DRINK_SLOT) + AddSlot(EQ2_DRINK_SLOT); + if(slots & TEXTURES_SLOT) + AddSlot(EQ2_TEXTURES_SLOT); +} + +void Item::AddStat(int8 type, int16 subtype, float value, char* name){ + char item_stat_combined_string[8] = {0}; + if(name && strlen(name) > 0 && type != 1){ + ItemStatString* stat = new ItemStatString; + stat->stat_string.data = string(name); + stat->stat_string.size = stat->stat_string.data.length(); + AddStatString(stat); + } + else{ + ItemStat* stat = new ItemStat; + if(name && strlen(name) > 0) + stat->stat_name = string(name); + stat->stat_type = type; + stat->stat_subtype = subtype; + stat->value = value; + snprintf(item_stat_combined_string, 7, "%u%02u", type, subtype); + stat->stat_type_combined = atoi(item_stat_combined_string); + AddStat(stat); + } +} +void Item::AddSet(int32 item_id, int32 item_crc, int16 item_icon, int32 item_stack_size, int32 item_list_color){ + ItemSet* set = new ItemSet; + set->item_id = item_id; + set->item_icon = item_icon; + set->item_crc = item_crc; + set->item_stack_size = item_stack_size; + set->item_list_color = item_list_color; + + AddSet(set); +} + +int16 Item::GetOverrideLevel(int8 adventure_class, int8 tradeskill_class){ + int16 ret = 0; + int8 tmp_class = 0; + bool found_class = false; + for(int32 i=0;iadventure_class; + if(tmp_class == PRIEST && (adventure_class >= CLERIC && adventure_class <= DEFILER)) + found_class = true; + else if(tmp_class == MAGE && (adventure_class >= SORCERER && adventure_class <= NECROMANCER)) + found_class = true; + else if(tmp_class == SCOUT && (adventure_class >= ROGUE && adventure_class <= ASSASSIN)) + found_class = true; + else if(tmp_class == adventure_class || tmp_class == COMMONER || (tmp_class == FIGHTER && (adventure_class >= WARRIOR && adventure_class <= PALADIN))) + found_class = true; + } + else if(tradeskill_class != 255){ + tmp_class = item_level_overrides[i]->tradeskill_class; + if(tmp_class == CRAFTSMAN && (tradeskill_class >= PROVISIONER && adventure_class <= CARPENTER)) + found_class = true; + else if(tmp_class == OUTFITTER && (tradeskill_class >= ARMORER && tradeskill_class <= TAILOR)) + found_class = true; + else if(tmp_class == SCHOLAR && (tradeskill_class >= JEWELER && tradeskill_class <= ALCHEMIST)) + found_class = true; + else if(tmp_class == tradeskill_class || tmp_class == ARTISAN) + found_class = true; + } + if(found_class){ + ret = item_level_overrides[i]->level; + break; + } + } + return ret; +} + +void Item::serialize(PacketStruct* packet, bool show_name, Player* player, int16 packet_type, int8 subtype, bool loot_item){ + int64 classes = 0; + Client *client; + int8 tmp_subtype = 0; + if (!packet || !player) + return; + client = player->GetZone()->GetClientBySpawn(player); + if (!client) + return; + if(creator.length() > 0){ + packet->setSubstructSubstructDataByName("header", "info_header", "creator_flag", 1); + packet->setSubstructSubstructDataByName("header", "info_header", "creator", creator.c_str()); + } + if(show_name) + packet->setSubstructSubstructDataByName("header", "info_header", "show_name", show_name); + if(packet_type == 0) + packet->setSubstructSubstructDataByName("header", "info_header", "packettype", GetItemPacketType(packet->GetVersion())); + else + packet->setSubstructSubstructDataByName("header", "info_header", "packettype", packet_type); + packet->setSubstructSubstructDataByName("header", "info_header", "packetsubtype", subtype); // should be substype + packet->setSubstructDataByName("header_info", "footer_type", 3); + packet->setSubstructDataByName("header_info", "item_id", details.item_id); + + if (!loot_item) + packet->setSubstructDataByName("header_info", "broker_item_id", details.item_id); + else + packet->setSubstructDataByName("header_info", "broker_item_id", 0xFFFFFFFFFFFFFFFF); + + if(details.unique_id == 0) + packet->setSubstructDataByName("header_info", "unique_id", details.item_id); + else + packet->setSubstructDataByName("header_info", "unique_id", details.unique_id); + packet->setSubstructDataByName("header_info", "icon", details.icon); + packet->setSubstructDataByName("header_info", "tier", details.tier); + packet->setSubstructDataByName("header_info", "flags", generic_info.item_flags); + packet->setSubstructDataByName("header_info", "flags2", generic_info.item_flags2); + if(item_stats.size() > 0){ + //packet->setSubstructArrayLengthByName("header_info", "stat_count", item_stats.size()); + int8 dropstat = 0; + int8 bluemod = 0; + for (int32 i = 0; i < item_stats.size(); i++){ + ItemStat* stat = item_stats[i]; + if (stat->stat_type == 9){ + bluemod += 1; + } + if (stat->stat_type == 6){ //Convert stats to proper client + //if (client->GetVersion() >= 63137){ //TEST + // tmp_subtype =stat->stat_subtype; + //} + if ((client->GetVersion() >= 63119) || client->GetVersion() == 61331){ //KA + tmp_subtype = world.GetItemStatKAValue(stat->stat_subtype); + } + else if (client->GetVersion() >= 57107){ //TOV + tmp_subtype = world.GetItemStatTOVValue(stat->stat_subtype); + } + else if (client->GetVersion() >= 1193){ //COE + tmp_subtype = world.GetItemStatCOEValue(stat->stat_subtype); + //tmp_subtype = stat->stat_subtype; + } + else if (client->GetVersion() >= 1096){ //DOV + tmp_subtype = world.GetItemStatDOVValue(stat->stat_subtype); + //tmp_subtype = stat->stat_subtype; //comment for normal use + } + } + else + tmp_subtype = stat->stat_subtype; + if (tmp_subtype == 255 ){ + + dropstat += 1; + + } + + } + packet->setSubstructArrayLengthByName("header_info", "stat_count", item_stats.size() - dropstat); + dropstat = 0; + for (int32 i = 0; i < item_stats.size(); i++) { + ItemStat* stat = item_stats[i]; + + + + if (stat->stat_type == 6){ //Convert stats to proper client + if ((client->GetVersion() >= 63119) || client->GetVersion() == 61331){ //KA + tmp_subtype = world.GetItemStatKAValue(stat->stat_subtype); + } + else if (client->GetVersion() >= 57107){ //TOV + tmp_subtype = world.GetItemStatTOVValue(stat->stat_subtype); + } + else if (client->GetVersion() >= 1193){ //COE + tmp_subtype = world.GetItemStatCOEValue(stat->stat_subtype); + //tmp_subtype = stat->stat_subtype; + } + else if (client->GetVersion() >= 1096){ //DOV + tmp_subtype = world.GetItemStatDOVValue(stat->stat_subtype); //comment out for testing + //tmp_subtype = stat->stat_subtype; //comment for normal use + } + } + else + tmp_subtype = stat->stat_subtype; + if (tmp_subtype == 255 ){ + + dropstat += 1; + //packet->setSubstructArrayLengthByName("header_info", "stat_count", item_stats.size()-dropstat); + } + else { + packet->setArrayDataByName("stat_type", stat->stat_type, i-dropstat); + packet->setArrayDataByName("stat_subtype", tmp_subtype, i-dropstat); + } + if (stat->stat_name.length() > 0) + packet->setArrayDataByName("stat_name", stat->stat_name.c_str(), i-dropstat); + /* SF client */ + + if ((client->GetVersion() >= 63119) || client->GetVersion() == 61331) { + if (stat->stat_type == 6){ + packet->setArrayDataByName("value", stat->value , i - dropstat);//63119 or when diety started (this is actually the modified stat + packet->setArrayDataByName("value2", stat->value, i - dropstat);//63119 temp will be replace by modified value (this is the unmodified stat + } + else { + packet->setArrayDataByName("value", (sint16)stat->value , i - dropstat, 0U, true); + packet->setArrayDataByName("value2", stat->value, i - dropstat);//63119 temp will be replace by modified value + } + } + else if (client->GetVersion() >= 1028) { + if (stat->stat_type == 6){ + packet->setArrayDataByName("value", stat->value , i - dropstat);//63119 or when diety started (this is actually the infused modified stat + packet->setArrayDataByName("value2", stat->value, i - dropstat);//63119 temp will be replace by modified value (this is the unmodified stat + } + else { + packet->setArrayDataByName("value", (sint16)stat->value , i - dropstat, 0U, true); + packet->setArrayDataByName("value2", stat->value, i - dropstat);//63119 temp will be replace by modified value + } + + } + else{ + packet->setArrayDataByName("value", (sint16)stat->value , i - dropstat); + packet->setArrayDataByName("value2", stat->value, i - dropstat);//63119 temp will be replace by modified value + } + } + } + if (item_string_stats.size() > 0 && !loot_item){ + if ((client->GetVersion() >= 63119) || client->GetVersion() == 61331) { + packet->setSubstructArrayLengthByName("header_info", "mod_count", item_string_stats.size()); + for (int32 i = 0; i < item_string_stats.size(); i++){ + ItemStatString* stat = item_string_stats[i]; + packet->setArrayDataByName("mod_string", &(stat->stat_string), i); + packet->setArrayDataByName("mod_need", 0, i); + } + } + + else if (client->GetVersion() >= 1096) { + packet->setSubstructArrayLengthByName("header_info", "stat_string_count", item_string_stats.size()); + for (int32 i = 0; i < item_string_stats.size(); i++){ + ItemStatString* stat = item_string_stats[i]; + packet->setArrayDataByName("stat_string", &(stat->stat_string), i); + + } + } + } + if (item_sets.size() > 0){ + packet->setArrayLengthByName("num_pieces", item_sets.size()); + for (int32 i = 0; i < item_sets.size(); i++){ + ItemSet* set = item_sets[i]; + packet->setArrayDataByName("item_id", set->item_id, i); + packet->setArrayDataByName("item_crc", set->item_crc, i); + packet->setArrayDataByName("item_icon", set->item_icon, i); + packet->setArrayDataByName("item_unknown1", set->item_stack_size, i); + + Item* item2 = master_item_list.GetItem(set->item_id); + if (item2) + packet->setArrayDataByName("item_name", item2->name.c_str(), i); + + packet->setArrayDataByName("item_unknown2", set->item_list_color, i); + + } + + + } + + + + + + if(!loot_item && item_effects.size() > 0){ + packet->setSubstructArrayLengthByName("footer", "num_effects", item_effects.size()); + for(int32 i=0;isetArrayDataByName("subbulletflag", effect->subbulletflag, i); + packet->setArrayDataByName("effect", &(effect->effect), i); + packet->setArrayDataByName("percentage", effect->percentage, i); + } + } + + if (packet->GetVersion() < 1096) { + packet->setSubstructDataByName("header_info", "adornment_id", 0xFFFFFFFF); // Send no ID for now + packet->setSubstructDataByName("header_info", "unknown3", 0xFFFFFFFF); + } + packet->setSubstructDataByName("header_info", "unknown21", 0x00000000); + packet->setSubstructDataByName("header_info", "condition", generic_info.condition); + packet->setSubstructDataByName("header_info", "weight", generic_info.weight); + if(generic_info.skill_req1 == 0) + packet->setSubstructDataByName("header_info", "skill_req1", 0xFFFFFFFF); + else + packet->setSubstructDataByName("header_info", "skill_req1", generic_info.skill_req1); + if(generic_info.skill_req2 == 0) + packet->setSubstructDataByName("header_info", "skill_req2", 0xFFFFFFFF); + else + packet->setSubstructDataByName("header_info", "skill_req2", generic_info.skill_req2); + if(generic_info.skill_min != 0) + packet->setSubstructDataByName("header_info", "skill_min", generic_info.skill_min); + if(generic_info.adventure_classes > 0 || generic_info.tradeskill_classes > 0 || item_level_overrides.size() > 0){ + //int64 classes = 0; + int16 tmp_level = 0; + map adv_class_levels; + map tradeskill_class_levels; + map::iterator itr; + int64 tmpVal = 0; + int8 temp = ASSASSIN; + // AoD + clients with beastlords + if (packet->GetVersion() >= 1142) + temp += 2; + + // Chaneler class, get a more accurate version + if (packet->GetVersion() >= 60000) + temp += 2; + + for(int32 i=0;i<=temp;i++){ + tmpVal = (int64)pow(2.0, (double)i); + if((generic_info.adventure_classes & tmpVal)){ + //classes += 2 << (i - 1); + classes += tmpVal; + tmp_level = GetOverrideLevel(i, 255); + if(tmp_level == 0) + adv_class_levels[i] = generic_info.adventure_default_level; + else + adv_class_levels[i] = tmp_level; + } + if(tmpVal == 0) { + if (packet->GetVersion() >= 60000) + classes = 576379072454289112; + else if (packet->GetVersion() >= 57048) + classes = 6281081087704; + else if (packet->GetVersion() >= 1142) + classes = 144095080877876952; + else + classes = 36024082983773912; + } + } + for(int i=ALCHEMIST + 1 - ARTISAN ;i>=0;i--){ + //tmpVal = 2 << i; + tmpVal = (int64)pow(2.0, (double)i); + if((generic_info.tradeskill_classes & tmpVal)){ + classes += pow(2, (i + ARTISAN )); + //classes += 2 << (i+ARTISAN-1); + tmp_level = GetOverrideLevel(i, 255); + if(tmp_level == 0) + tradeskill_class_levels[i] = generic_info.tradeskill_default_level; + else + tradeskill_class_levels[i] = tmp_level; + } + } + packet->setSubstructArrayLengthByName("header_info", "class_count", adv_class_levels.size() + tradeskill_class_levels.size()); + int i = 0; + for(itr = adv_class_levels.begin(); itr != adv_class_levels.end(); itr++, i++){ + packet->setArrayDataByName("adventure_class", itr->first, i); + packet->setArrayDataByName("tradeskill_class", 255, i); + packet->setArrayDataByName("level", itr->second*10, i); + } + for(itr = tradeskill_class_levels.begin(); itr != tradeskill_class_levels.end(); itr++, i++){ + packet->setArrayDataByName("adventure_class", 255, i); + packet->setArrayDataByName("tradeskill_class", itr->first, i); + packet->setArrayDataByName("level", itr->second, i); + } + packet->setSubstructDataByName("footer", "required_classes", classes); + } + else { + if (packet->GetVersion() >= 60000) + classes = 576379072454289112; + else if (packet->GetVersion() >= 57048) + classes = 6281081087704; + else if (packet->GetVersion() >= 1142) + classes = 144095080877876952; + else + classes = 36024082983773912; + packet->setSubstructDataByName("footer", "required_classes", classes); + } + + // Is this a copy and paste error??? + + + packet->setSubstructDataByName("footer", "required_classes2", classes); + + { + if (packet->GetVersion() >= 60000) + classes = 576379072454289112; + else if (packet->GetVersion() >= 57048) + classes = 6281081087704; + else if (packet->GetVersion() >= 1142) + classes = 144095080877876952; + else + classes = 36024082983773912; + + } + + packet->setSubstructDataByName("footer", "recommended_level", details.recommended_level); + if(generic_info.adventure_default_level > 0){ + packet->setSubstructDataByName("footer", "required_level", generic_info.adventure_default_level); + packet->setSubstructDataByName("footer", "footer_unknown2", 0);// remove defualt + } + else{ + packet->setSubstructDataByName("footer", "required_level", generic_info.tradeskill_default_level); + packet->setSubstructDataByName("footer", "footer_unknown2", 0);//remove default + } + if(slot_data.size() > 0){ + packet->setSubstructArrayLengthByName("header_info", "slot_count", slot_data.size()); + for(int32 i=0;isetArrayDataByName("slot", slot, i); + } + } + if(!loot_item){ + if (adornment_info) + LogWrite(ITEM__DEBUG, 0, "Items", "\ttype: %i, Duration: %i, item_types_: %i, slot_type: %i", generic_info.item_type, adornment_info->duration, adornment_info->item_types, adornment_info->slot_type); + + packet->setSubstructDataByName("header", "item_type", generic_info.item_type); + switch(generic_info.item_type){ + case ITEM_TYPE_WEAPON:{ + if(weapon_info){ + packet->setDataByName("wield_type", weapon_info->wield_type); + packet->setDataByName("damage_low1", weapon_info->damage_low1); + packet->setDataByName("damage_high1", weapon_info->damage_high1); + packet->setDataByName("damage_low2", weapon_info->damage_low2); + packet->setDataByName("damage_high2", weapon_info->damage_high2); + packet->setDataByName("damage_low3", weapon_info->damage_low3); + packet->setDataByName("damage_high3", weapon_info->damage_high3); + packet->setDataByName("damage_type", weapon_type); + packet->setDataByName("delay", weapon_info->delay); + packet->setDataByName("rating", weapon_info->rating); + } + break; + } + case ITEM_TYPE_RANGED:{ + if(ranged_info){ + packet->setDataByName("damage_low1", ranged_info->weapon_info.damage_low1); + packet->setDataByName("damage_high1", ranged_info->weapon_info.damage_high1); + packet->setDataByName("damage_low2", ranged_info->weapon_info.damage_low2); + packet->setDataByName("damage_high2", ranged_info->weapon_info.damage_high2); + packet->setDataByName("damage_low3", ranged_info->weapon_info.damage_low3); + packet->setDataByName("damage_high3", ranged_info->weapon_info.damage_high3); + packet->setDataByName("delay", ranged_info->weapon_info.delay); + packet->setDataByName("range_low", ranged_info->range_low); + packet->setDataByName("range_high", ranged_info->range_high); + packet->setDataByName("rating", ranged_info->weapon_info.rating); + } + break; + } + case ITEM_TYPE_SHIELD: + case ITEM_TYPE_ARMOR:{ + if(armor_info){ + packet->setDataByName("mitigation_low", armor_info->mitigation_low); + packet->setDataByName("mitigation_high", armor_info->mitigation_high); + } + break; + } + case ITEM_TYPE_BAG:{ + if(bag_info){ + int16 free_slots=bag_info->num_slots; + if(player){ + Item* bag = player->GetPlayerItemList()->GetItemFromUniqueID(details.unique_id, true); + if(bag && bag->IsBag()){ + vector* bag_items = player->GetPlayerItemList()->GetItemsInBag(bag); + if(bag_items->size() > bag->bag_info->num_slots){ + free_slots = 0; + packet->setArrayLengthByName("num_names", bag->bag_info->num_slots); + } + else{ + free_slots = bag->bag_info->num_slots - bag_items->size(); + packet->setArrayLengthByName("num_names", bag_items->size()); + } + vector::iterator itr; + int16 i = 0; + Item* tmp_bag_item = 0; + for(itr = bag_items->begin(); itr != bag_items->end();itr++){ + tmp_bag_item = *itr; + if(tmp_bag_item && tmp_bag_item->details.slot_id < bag->bag_info->num_slots){ + packet->setArrayDataByName("item_name", tmp_bag_item->name.c_str(), i); + i++; + } + } + safe_delete(bag_items); + } + } + packet->setDataByName("num_slots", bag_info->num_slots); + packet->setDataByName("num_empty", free_slots); + packet->setDataByName("weight_reduction", bag_info->weight_reduction); + packet->setDataByName("item_score", 2); + //packet->setDataByName("unknown5", 0x1e50a86f); + //packet->setDataByName("unknown6", 0x2c17f61d); + //1 armorer + //2 weaponsmith + //4 tailor + //16 jeweler + //32 sage + //64 alchemist + //120 all scholars + //250 all craftsman + //int8 blah[] = {0x00,0x00,0x01,0x01,0xb6,0x01,0x01}; + //int8 blah[] = {0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00}; + int8 blah[] = {0xd8,0x66,0x9b,0x6d,0xb6,0xfb,0x7f}; + for(int8 i=0;isetSubstructDataByName("footer", "footer_unknown_0", blah[i], 0, i); + + } + break; + } + case ITEM_TYPE_FOOD:{ + if(food_info){ + packet->setDataByName("food_type", food_info->type); + packet->setDataByName("level", food_info->level); + packet->setDataByName("duration", food_info->duration); + } + break; + } + case ITEM_TYPE_SKILL:{ + //Spell Books + if(skill_info->spell_id > 0){ + Spell* spell = master_spell_list.GetSpell(skill_info->spell_id, skill_info->spell_tier); + if(spell){ + if(player) { + packet->setSubstructDataByName("header_info", "footer_type", 0); + + spell->SetPacketInformation(packet, player->GetZone()->GetClientBySpawn(player)); + if (player->HasSpell(skill_info->spell_id, skill_info->spell_tier)) + packet->setDataByName("scribed", 1); + else + if (packet->GetVersion() >= 927){ + if (player->HasSpell(skill_info->spell_id, skill_info->spell_tier, true)) + packet->setAddToPacketByName("better_version", 1);// need to confirm + } + else + packet->setAddToPacketByName("better_version", 0); //if not scribed + packet->setDataByName("require_previous", 0); + + } + else { + + spell->SetPacketInformation(packet); + } + + //packet->setDataByName("unknown26", 0); + } + } + break; + } + case ITEM_TYPE_BAUBLE:{ + if(bauble_info){ + packet->setDataByName("cast", bauble_info->cast); + packet->setDataByName("recovery", bauble_info->recovery); + packet->setDataByName("duration", bauble_info->duration); + packet->setDataByName("recast", bauble_info->recast); + packet->setDataByName("display_slot_optional", bauble_info->display_slot_optional); + packet->setDataByName("display_cast_time", bauble_info->display_cast_time); + packet->setDataByName("display_bauble_type", bauble_info->display_bauble_type); + packet->setDataByName("effect_radius", bauble_info->effect_radius); + packet->setDataByName("max_aoe_targets", bauble_info->max_aoe_targets); + packet->setDataByName("display_until_cancelled", bauble_info->display_until_cancelled); + //packet->setDataByName("item_score", 1); + } + break; + } + case ITEM_TYPE_THROWN:{ + if(thrown_info){ + packet->setDataByName("range", thrown_info->range); + packet->setDataByName("damage_modifier", thrown_info->damage_modifier); + packet->setDataByName("hit_bonus", thrown_info->hit_bonus); + packet->setDataByName("damage_type", thrown_info->damage_type); + } + break; + } + case ITEM_TYPE_HOUSE:{ + if(houseitem_info){ + packet->setDataByName("status_rent_reduction", houseitem_info->status_rent_reduction); + packet->setDataByName("coin_rent_reduction", houseitem_info->coin_rent_reduction); + packet->setDataByName("house_only", houseitem_info->house_only); + } + break; + } + case ITEM_TYPE_BOOK:{ + if(book_info){ + packet->setDataByName("language", book_info->language); + packet->setMediumStringByName("author", book_info->author.data.c_str()); + packet->setMediumStringByName("title", book_info->title.data.c_str()); + } + if (packet->GetVersion() <= 1096) packet->setDataByName("item_type", 13); + + break; + } + case ITEM_TYPE_RECIPE:{ + // Recipe Books + if(recipebook_info){ + packet->setArrayLengthByName("num_recipes", recipebook_info->recipes.size()); + for(int32 i = 0; i < recipebook_info->recipes.size(); i++){ + packet->setArrayDataByName("recipe_name", recipebook_info->recipes.at(i).c_str(), i); + Recipe* recipe = master_recipe_list.GetRecipeByName(recipebook_info->recipes.at(i).c_str()); + if (recipe) { + packet->setArrayDataByName("recipe_id", recipe->GetID(), i); + packet->setArrayDataByName("recipe_icon", recipe->GetIcon(), i); + } + } + packet->setDataByName("uses", recipebook_info->uses); + if(player->GetRecipeBookList()->HasRecipeBook(details.item_id)) + packet->setDataByName("scribed", 1); + else + packet->setDataByName("scribed", 0); + } + break; + } + case ITEM_TYPE_ADORNMENT:{ + //Adornements + packet->setDataByName("item_types",adornment_info->item_types); + packet->setDataByName("duration", adornment_info->duration); // need to calcualte for remaining duration + packet->setDataByName("slot_type", adornment_info->slot_type); + packet->setDataByName("footer_set_name", "test footer set name"); + packet->setArrayLengthByName("footer_set_bonus_list_count", 1);// list of the bonus items + packet->setArrayDataByName("footer_set_bonus_items_needed", 2, 0); //this is nember of items needed for granteing that stat //name,value,array + packet->setSubArrayLengthByName("footer_set_bonus_stats_count", 2, 0);//name,value,array,subarray + packet->setSubArrayDataByName("set_stat_type", 5, 0,0); + packet->setSubArrayDataByName("set_stat_subtype", 1, 0, 0); + packet->setSubArrayDataByName("set_value", 25000, 0, 0); + + } + + case ITEM_TYPE_HOUSE_CONTAINER:{ + //House Containers + if(housecontainer_info){ + packet->setDataByName("allowed_types", housecontainer_info->allowed_types); + packet->setDataByName("num_slots", housecontainer_info->num_slots); + packet->setDataByName("broker_commission", housecontainer_info->broker_commission); + packet->setDataByName("fence_commission", housecontainer_info->fence_commission); + } + } + } + } + + LogWrite(MISC__TODO, 1, "TODO", "Item Set information\n\t(%s, function: %s, line #: %i)", __FILE__, __FUNCTION__, __LINE__); + if (IsBauble()) { + packet->setSubstructDataByName("footer", "stack_size", stack_count); + } + else { + packet->setSubstructDataByName("footer", "stack_size", stack_count); + } + packet->setSubstructDataByName("footer", "collectable", generic_info.collectable); + + + + + + packet->setSubstructDataByName("footer", "status_item", sell_status); + + + LogWrite(MISC__TODO, 1, "TODO", "Set collection_needed information properly\n\t(%s, function: %s, line #: %i)", __FILE__, __FUNCTION__, __LINE__); + + packet->setSubstructDataByName("footer", "collection_needed", player->GetCollectionList()->NeedsItem(this) ? 1 : 0); + + if(generic_info.offers_quest_id > 0){ + Quest* quest = master_quest_list.GetQuest(generic_info.offers_quest_id); + if(quest){ + packet->setSubstructDataByName("footer", "offers_quest", quest->GetName()); + packet->setSubstructDataByName("footer", "quest_color", player->GetArrowColor(quest->GetQuestLevel())); + } + } + if(generic_info.part_of_quest_id > 0){ + Quest* quest = master_quest_list.GetQuest(generic_info.part_of_quest_id); + if(quest){ + packet->setSubstructDataByName("footer", "part_of_quest", quest->GetName()); + packet->setSubstructDataByName("footer", "quest_color", player->GetArrowColor(quest->GetQuestLevel())); + } + } + if(generic_info.max_charges > 0){ + packet->setSubstructDataByName("footer", "charges", 1); + packet->setSubstructDataByName("footer", "total_charges", generic_info.max_charges); + packet->setSubstructDataByName("footer", "charges_left", details.count); + packet->setSubstructDataByName("footer", "display_charges", generic_info.display_charges); + } + if ((packet->GetVersion() >= 63119) || packet->GetVersion() == 61331){ + if (sell_status > 0){ + + } + } + //packet->setSubstructDataByName("footer", "status_item", 0); + + if (IsHarvest()){ + packet->setSubstructDataByName("footer", "crafting_flag", 1); + + + + } + + // Set these to 0 for now + if(packet->GetVersion() >= 1188){ + packet->setSubstructDataByName("footer", "locked_flag", 0); + packet->setSubstructDataByName("footer", "account_retricted", 0); + } + + // Adorns, set all to FF for now + if (packet->GetVersion() >= 1096) {// changed to 1096 for dov from 1188 + packet->setSubstructDataByName("footer", "adorn_slots", 0xFF, 0, 0); + packet->setSubstructDataByName("footer", "adorn_slots", 0xFF, 0, 1); + packet->setSubstructDataByName("footer", "adorn_slots", 0xFF, 0, 2); + packet->setSubstructDataByName("footer", "adorn_slots", 0xFF, 0, 3); + packet->setSubstructDataByName("footer", "adorn_slots", 0xFF, 0, 4); + packet->setSubstructDataByName("footer", "adorn_slots", 0xFF, 0, 5); + + } + if (packet->GetVersion() >= 1289) {// at some point after this there are 10 adornment slots all FF for now but will skip this if not needed for a version + + packet->setSubstructDataByName("footer", "adorn_slots", 0xFF, 0, 6); + packet->setSubstructDataByName("footer", "adorn_slots", 0xFF, 0, 7); + packet->setSubstructDataByName("footer", "adorn_slots", 0xFF, 0, 8); + packet->setSubstructDataByName("footer", "adorn_slots", 0xFF, 0, 9); + packet->setSubstructDataByName("footer", "adorn_slots", 0xFF, 0, 10); + } + + + packet->setSubstructDataByName("footer", "name", name.c_str()); + packet->setSubstructDataByName("footer", "description", description.c_str()); + + LogWrite(ITEM__PACKET, 0, "Items", "Dump/Print Packet in func: %s, line: %i", __FUNCTION__, __LINE__); + //packet->PrintPacket(); + +#if EQDEBUG >= 9 + packet->PrintPacket(); +#endif + +} + +PacketStruct* Item::PrepareItem(int16 version, bool merchant_item, bool loot_item){ + PacketStruct* packet = 0; + if(loot_item) + packet = configReader.getStruct("WS_LootItemGeneric", version); + else{ + switch(generic_info.item_type){ + case ITEM_TYPE_WEAPON:{ + if(merchant_item) + packet = configReader.getStruct("WS_MerchantItemWeapon", version); + else + packet = configReader.getStruct("WS_ItemWeapon", version); + break; + } + case ITEM_TYPE_RANGED:{ + if(merchant_item) + packet = configReader.getStruct("WS_MerchantItemRange", version); + else + packet = configReader.getStruct("WS_ItemRange", version); + break; + } + case ITEM_TYPE_SHIELD:{ + if (merchant_item) + packet = configReader.getStruct("WS_MerchantItemShield", version); + else + packet = configReader.getStruct("WS_ItemShield", version); + break; + } + case ITEM_TYPE_ARMOR:{ + if(merchant_item) + packet = configReader.getStruct("WS_MerchantItemArmor", version); + else + packet = configReader.getStruct("WS_ItemArmor", version); + break; + } + case ITEM_TYPE_BAG:{ + if(merchant_item) + packet = configReader.getStruct("WS_MerchantItemBag", version); + else + packet = configReader.getStruct("WS_ItemBag", version); + break; + } + case ITEM_TYPE_BOOK:{ + if(merchant_item) + packet = configReader.getStruct("WS_MerchantItemBook", version); + else + packet = configReader.getStruct("WS_ItemBook", version); + break; + } + case ITEM_TYPE_SKILL:{ + if(merchant_item) + packet = configReader.getStruct("WS_MerchantItemSkill", version); + else + packet = configReader.getStruct("WS_ItemSkill", version); + break; + } + case ITEM_TYPE_RECIPE:{ + if(merchant_item) + packet = configReader.getStruct("WS_MerchantItemRecipeBook", version); + else + packet = configReader.getStruct("WS_ItemRecipeBook", version); + break; + } + case ITEM_TYPE_FOOD:{ + if(merchant_item) + packet = configReader.getStruct("WS_MerchantItemFood", version); + else + packet = configReader.getStruct("WS_ItemFood", version); + break; + } + case ITEM_TYPE_BAUBLE:{ + if(merchant_item) + packet = configReader.getStruct("WS_MerchantItemBauble", version); + else + packet = configReader.getStruct("WS_ItemBauble", version); + break; + } + case ITEM_TYPE_ITEMCRATE:{ + if (merchant_item) + packet = configReader.getStruct("WS_MerchantItemSet", version); + else + packet = configReader.getStruct("WS_ItemSet", version); + break; + } + case ITEM_TYPE_HOUSE:{ + if(merchant_item) + packet = configReader.getStruct("WS_MerchantItemHouse", version); + else + packet = configReader.getStruct("WS_ItemHouse", version); + break; + } + case ITEM_TYPE_THROWN:{ + if(merchant_item) + packet = configReader.getStruct("WS_MerchantItemThrown", version); + else + packet = configReader.getStruct("WS_ItemThrown", version); + break; + } + case ITEM_TYPE_HOUSE_CONTAINER:{ + if(merchant_item) + packet = configReader.getStruct("WS_MerchantItemHouseContainer", version); + else + packet = configReader.getStruct("WS_ItemHouseContainer", version); + break; + } + case ITEM_TYPE_ADORNMENT:{ + if(merchant_item) + packet = configReader.getStruct("WS_MerchantAdornment", version); + else + packet = configReader.getStruct("WS_ItemAdornment", version); + break; + } + default:{ + if(merchant_item) + packet = configReader.getStruct("WS_MerchantItemGeneric", version); + else + packet = configReader.getStruct("WS_ItemGeneric", version); + } + } + } + if(!packet){ + LogWrite(ITEM__ERROR, 0, "Item", "Unhandled Item type: %i", (int)generic_info.item_type); + return 0; + } + return packet; +} + +EQ2Packet* Item::serialize(int16 version, bool show_name, Player* player, bool include_twice, int16 packet_type, int8 subtype, bool merchant_item, bool loot_item){ + PacketStruct* packet = PrepareItem(version, merchant_item, loot_item); + if(!packet) + return 0; + if(include_twice && IsBag() == false && IsBauble() == false && IsFood() == false) + serialize(packet, show_name, player, packet_type, 0x80, loot_item); + else + serialize(packet, show_name, player, packet_type, 0, loot_item); + if(merchant_item) + packet->setSubstructDataByName("header_info", "unique_id", 0xFFFFFFFF); + string* generic_string_data = packet->serializeString(); + + //packet->PrintPacket(); + //LogWrite(ITEM__DEBUG, 9, "Items", "generic_string_data:"); + //DumpPacket((uchar*)generic_string_data->c_str(), generic_string_data->length()); + + int32 size = generic_string_data->length(); + if(include_twice && IsBag() == false && IsBauble() == false && IsFood() == false) + size = (size*2)-13; + uchar* out_data = new uchar[size+1]; + uchar* out_ptr = out_data; + memcpy(out_ptr, (uchar*)generic_string_data->c_str(), generic_string_data->length()); + out_ptr += generic_string_data->length(); + if(include_twice && IsBag() == false && IsBauble() == false && IsFood() == false){ + memcpy(out_ptr, (uchar*)generic_string_data->c_str() + 13, generic_string_data->length() -13); + } + int32 size2 = size-4; + memcpy(out_data, &size2, sizeof(int32)); + EQ2Packet* outapp = new EQ2Packet(OP_ClientCmdMsg, out_data, size); + //DumpPacket(outapp); + safe_delete(packet); + safe_delete_array(out_data); + return outapp; +} + +void Item::SetAppearance(ItemAppearance* appearance){ + SetAppearance(appearance->type, appearance->red, appearance->green, appearance->blue, appearance->highlight_red, appearance->highlight_green, appearance->highlight_blue); +} + +void Item::SetAppearance(int16 type, int8 red, int8 green, int8 blue, int8 highlight_red, int8 highlight_green, int8 highlight_blue){ + generic_info.appearance_id = type; + generic_info.appearance_red = red; + generic_info.appearance_green = green; + generic_info.appearance_blue = blue; + generic_info.appearance_highlight_red = highlight_red; + generic_info.appearance_highlight_green = highlight_green; + generic_info.appearance_highlight_blue = highlight_blue; +} + +void Item::AddEffect(string effect, int8 percentage, int8 subbulletflag){ + ItemEffect* item_effect = new ItemEffect; + item_effect->subbulletflag = subbulletflag; + item_effect->effect.data = effect; + item_effect->effect.size = effect.length(); + item_effect->percentage = percentage; + item_effects.push_back(item_effect); +} +void Item::AddBookPage(int8 page, string page_text, int8 valign, int8 halign) { + BookPage * bookpage = new BookPage; + bookpage->page = page; + bookpage->page_text.data = page_text; + bookpage->page_text.size = page_text.length(); + bookpage->valign = valign; + bookpage->halign = halign; + book_pages.push_back(bookpage); +} +void Item::AddLevelOverride(ItemLevelOverride* level_override){ + AddLevelOverride(level_override->adventure_class, level_override->tradeskill_class, level_override->level); +} + +void Item::AddLevelOverride(int8 adventure_class, int8 tradeskill_class, int16 level){ + ItemLevelOverride* item_override = new ItemLevelOverride; + item_override->adventure_class = adventure_class; + item_override->tradeskill_class = tradeskill_class; + item_override->level = level; + item_level_overrides.push_back(item_override); +} + +void Item::AddSlot(int8 slot_id){ + slot_data.push_back(slot_id); +} + +void Item::SetWeaponType(int8 type){ + weapon_type = type; +} + +int8 Item::GetWeaponType(){ + return weapon_type; +} + +int32 Item::GetMaxSellValue(){ + return max_sell_value; +} + +void Item::SetMaxSellValue(int32 val){ + max_sell_value = val; +} + +void Item::SetItemScript(string name){ + item_script = name; +} + +const char* Item::GetItemScript(){ + if(item_script.length() > 0) + return item_script.c_str(); + return 0; +} + +int32 Item::CalculateRepairCost() { + if (generic_info.condition == 100) + return 0; + float repair_cost = (float)generic_info.adventure_default_level * (10.0 - ((float)generic_info.condition * 0.1)); + if (details.tier == ITEM_TAG_LEGENDARY) + repair_cost *= 4; + else if (details.tier == ITEM_TAG_FABLED) + repair_cost *= 8; + else if (details.tier == ITEM_TAG_MYTHICAL) + repair_cost *= 12; + return (int32)repair_cost; +} + +PlayerItemList::PlayerItemList(){ + packet_count = 0; + xor_packet = 0; + orig_packet = 0; + MPlayerItems.SetName("PlayerItemList::MPlayerItems"); +} + +PlayerItemList::~PlayerItemList(){ + safe_delete_array(xor_packet); + safe_delete_array(orig_packet); + map >::iterator bag_iter; + map::iterator itr; + for(bag_iter = items.begin(); bag_iter != items.end(); bag_iter++){ + for(itr = bag_iter->second.begin(); itr != bag_iter->second.end(); itr++){ + safe_delete(itr->second); + } + bag_iter->second.clear(); + } + items.clear(); + while (!overflowItems.empty()){ + safe_delete(overflowItems.back()); + overflowItems.pop_back(); + } +} + +map* PlayerItemList::GetAllItems(){ + map* ret = new map; + MPlayerItems.writelock(__FUNCTION__, __LINE__); + ret->insert(indexed_items.begin(), indexed_items.end()); + MPlayerItems.releasewritelock(__FUNCTION__, __LINE__); + return ret; +} + +Item* PlayerItemList::GetItemFromIndex(int32 index){ + Item* ret = 0; + MPlayerItems.readlock(__FUNCTION__, __LINE__); + if(indexed_items.count(index) > 0) + ret = indexed_items[index]; + MPlayerItems.releasereadlock(__FUNCTION__, __LINE__); + return ret; +} + +Item* PlayerItemList::GetItem(sint32 bag_slot, int16 slot){ + Item* ret = 0; + MPlayerItems.readlock(__FUNCTION__, __LINE__); + if(items.count(bag_slot) > 0 && items[bag_slot].count(slot) > 0) + ret = items[bag_slot][slot]; + MPlayerItems.releasereadlock(__FUNCTION__, __LINE__); + return ret; +} + +void PlayerItemList::AddItem(Item* item){ //is called with a slot already set + //quick check to verify item + if(!item) + return; + else{ + if(item->details.inv_slot_id != 0){ + Item* bag = GetItemFromUniqueID(item->details.inv_slot_id, true); + if(bag && bag->IsBag()){ + if(item->details.slot_id > bag->details.num_slots){ + LogWrite(ITEM__ERROR, 0, "Item", "Error Adding Item: Invalid slot for item unique id: %u", item->details.unique_id); + safe_delete(item); + return; + } + } + } + } + int32 max_index = indexed_items.size(); + int32 new_index = 0; + map::iterator itr; + MPlayerItems.writelock(__FUNCTION__, __LINE__); + for(itr = indexed_items.begin();itr != indexed_items.end(); itr++){ + if(itr->first > max_index) //just grab the highest index val for next loop + max_index = itr->first; + } + for(int32 i=0;i 0) + new_index = max_index; + + indexed_items[new_index] = item; + items[item->details.inv_slot_id][item->details.slot_id] = item; + MPlayerItems.releasewritelock(__FUNCTION__, __LINE__); +} + +Item* PlayerItemList::GetBag(int8 inventory_slot, bool lock){ + Item* bag = 0; + if(lock) + MPlayerItems.readlock(__FUNCTION__, __LINE__); + if(items.count(0) > 0 && items[0].count(inventory_slot) > 0 && items[0][inventory_slot]->IsBag()) + bag = items[0][inventory_slot]; + if(lock) + MPlayerItems.releasereadlock(__FUNCTION__, __LINE__); + return bag; +} + +Item* PlayerItemList::GetBankBag(int8 inventory_slot, bool lock){ + Item* bag = 0; + if(lock) + MPlayerItems.readlock(__FUNCTION__, __LINE__); + if(items.count(-3) > 0 && items[-3].count(inventory_slot) > 0 && items[-3][inventory_slot]->IsBag()) + bag = items[-3][inventory_slot]; + if(lock) + MPlayerItems.releasereadlock(__FUNCTION__, __LINE__); + return bag; +} + +int16 PlayerItemList::GetNumberOfFreeSlots(){ + int16 count = 0; + MPlayerItems.readlock(__FUNCTION__, __LINE__); + for(int8 i=0;idetails.num_slots > 0){ + if(items.count(bag->details.bag_id) > 0){ + for(int16 x=0;xdetails.num_slots;x++){ + if(items[bag->details.bag_id].count(x) == 0) + count++; + } + } + else + count += bag->bag_info->num_slots; //if the bag hasnt been used yet, add all the free slots + } + } + MPlayerItems.releasereadlock(__FUNCTION__, __LINE__); + return count; +} + +bool PlayerItemList::HasFreeBagSlot(){ + bool ret = false; + MPlayerItems.readlock(__FUNCTION__, __LINE__); + if(items.count(0) > 0){ + for(int8 i=0;i 0){ + for(int8 i=0;idetails.num_slots > 0){ + if(items.count(bag->details.bag_id) > 0){ + for(int16 x=0;xdetails.num_slots;x++){ + if(items[bag->details.bag_id].count(x) == 0){ + ret = true; + break; + } + } + } + else{ //if the bag hasnt been used yet, then all slots are free + ret = true; + break; + } + } + } + } + MPlayerItems.releasereadlock(__FUNCTION__, __LINE__); + return ret; +} + +bool PlayerItemList::GetFirstFreeBankSlot(sint32* bag_id, sint16* slot) { + bool ret = false; + MPlayerItems.readlock(__FUNCTION__, __LINE__); + if (items.count(-3) > 0) { + for (int8 i = 0; i < NUM_BANK_SLOTS; i++) { + if (items[-3].count(i) == 0) { + *bag_id = -3; + *slot = i; + ret = true; + break; + } + } + } + else { + *bag_id = -3; + *slot = 0; + ret = true; + } + + if(!ret) { + // Inventory slots were full so check bags + Item* bag = 0; + for(int8 i = 0; !ret && i < NUM_BANK_SLOTS; i++) { + // Check to see if the item in the inventory slot is a bag and it has slots + bag = GetBankBag(i, false); + if(bag && bag->details.num_slots > 0) { + // Item was a bag so lets loop through the slots and try to find an empty one + if(items.count(bag->details.bag_id) > 0) { + for(int16 x = 0; x < bag->details.num_slots; x++) { + if(items[bag->details.bag_id].count(x) == 0) { + // Found a free slot, get the bag id of this bag + *bag_id = bag->details.bag_id; + // Get the slot + *slot = x; + ret = true; + break; + } + } + } + else { + //if the bag hasnt been used yet, then all slots are free, so set the bag_id to this bag + // and the slot to 0 (the first slot) + *bag_id = bag->details.bag_id; + *slot = 0; + ret = true; + break; + } + } + } + } + MPlayerItems.releasereadlock(__FUNCTION__, __LINE__); + return ret; +} + +bool PlayerItemList::GetFirstFreeSlot(sint32* bag_id, sint16* slot) { + // Mostly copy and paste from the above function + bool ret = false; + // Try to place the item in the normal inventory slots first + MPlayerItems.readlock(__FUNCTION__, __LINE__); + if(items.count(0) > 0){ + for(int8 i=0; i < NUM_INV_SLOTS; i++) { + if(items[0].count(i) == 0) { + // Found an empty slot, store the slot id and set the return value + *bag_id = 0; + *slot = i; + ret = true; + break; + } + } + } + else { + // no items in the players inventory, set it to the first slot + *bag_id = 0; + *slot = 0; + ret = true; + } + + if(!ret) { + // Inventory slots were full so check bags + Item* bag = 0; + for(int8 i = 0; !ret && i < NUM_INV_SLOTS; i++) { + // Check to see if the item in the inventory slot is a bag and it has slots + bag = GetBag(i, false); + if(bag && bag->details.num_slots > 0) { + // Item was a bag so lets loop through the slots and try to find an empty one + if(items.count(bag->details.bag_id) > 0) { + for(int16 x = 0; x < bag->details.num_slots; x++) { + if(items[bag->details.bag_id].count(x) == 0) { + // Found a free slot, get the bag id of this bag + *bag_id = bag->details.bag_id; + // Get the slot + *slot = x; + ret = true; + break; + } + } + } + else { + //if the bag hasnt been used yet, then all slots are free, so set the bag_id to this bag + // and the slot to 0 (the first slot) + *bag_id = bag->details.bag_id; + *slot = 0; + ret = true; + break; + } + } + } + } + MPlayerItems.releasereadlock(__FUNCTION__, __LINE__); + return ret; +} + +Item* PlayerItemList::CanStack(Item* item, bool include_bank){ + if(!item) + return 0; + Item* ret = 0; + map >::iterator itr; + map::iterator slot_itr; + MPlayerItems.readlock(__FUNCTION__, __LINE__); + for(itr = items.begin(); itr != items.end(); itr++){ + if(include_bank || (!include_bank && itr->first >= 0)){ + for(slot_itr=itr->second.begin();slot_itr!=itr->second.end(); slot_itr++){ + if(slot_itr->second && slot_itr->second->details.item_id == item->details.item_id && ((slot_itr->second->details.count + item->details.count) <= slot_itr->second->stack_count)){ + ret = slot_itr->second; + break; + } + } + } + if(ret) + break; + } + MPlayerItems.releasereadlock(__FUNCTION__, __LINE__); + return ret; +} + +void PlayerItemList::Stack(Item* orig_item, Item* item){ + if(!orig_item || !item) + return; + orig_item->details.count += item->details.count; + orig_item->save_needed = true; +} + +bool PlayerItemList::AssignItemToFreeSlot(Item* item){ + if(item){ + Item* orig_item = CanStack(item); + if(orig_item){ + Stack(orig_item, item); + return true; + } + bool use_bag_freeslot = false; + if(item->IsBag()) + use_bag_freeslot = HasFreeBagSlot(); + MPlayerItems.writelock(__FUNCTION__, __LINE__); + if(!use_bag_freeslot){ + Item* bag = 0; + for(int8 i=0;idetails.num_slots > 0){ + for(int16 x=0;xdetails.num_slots;x++){ + if(items[bag->details.bag_id].count(x) == 0){ + item->details.inv_slot_id = bag->details.bag_id; + item->details.slot_id = x; + MPlayerItems.releasewritelock(__FUNCTION__, __LINE__); + AddItem(item); + return true; + } + } + } + } + } + //bags full, check inventory slots + for(int8 i=0;idetails.inv_slot_id = 0; + item->details.slot_id = i; + MPlayerItems.releasewritelock(__FUNCTION__, __LINE__); + AddItem(item); + return true; + } + } + MPlayerItems.releasewritelock(__FUNCTION__, __LINE__); + } + return false; +} + +void PlayerItemList::RemoveItem(Item* item, bool delete_item){ + MPlayerItems.writelock(__FUNCTION__, __LINE__); + if(items.count(item->details.inv_slot_id) > 0 && items[item->details.inv_slot_id].count(item->details.slot_id) > 0){ + items[item->details.inv_slot_id].erase(item->details.slot_id); + indexed_items[item->details.index] = 0; + } + if(item->IsBag() && item->details.inv_slot_id == 0 && item->details.slot_id < NUM_INV_SLOTS && items.count(item->details.bag_id) > 0){ + map::iterator itr; + for(itr = items[item->details.bag_id].begin(); itr != items[item->details.bag_id].end(); itr++){ + indexed_items[itr->second->details.index] = 0; + if(delete_item){ + safe_delete(itr->second); + } + } + items.erase(item->details.bag_id); + } + if(delete_item){ + safe_delete(item); + } + MPlayerItems.releasewritelock(__FUNCTION__, __LINE__); +} + +void PlayerItemList::DestroyItem(int16 index){ + MPlayerItems.writelock(__FUNCTION__, __LINE__); + Item* item = indexed_items[index]; + map::iterator itr; + if(item && item->IsBag() && item->details.inv_slot_id == 0 && item->details.slot_id < NUM_INV_SLOTS && items.count((sint32)item->details.bag_id) > 0){ //inventory + map* tmp_map = &(items[(sint32)item->details.bag_id]); + for(itr = tmp_map->begin(); itr != tmp_map->end(); itr++){ + indexed_items[itr->second->details.index] = 0; + if(itr->second != item){ + safe_delete(itr->second); + } + } + items.erase(item->details.bag_id); + } + if(items.count(item->details.inv_slot_id) > 0 && items[item->details.inv_slot_id].count(item->details.slot_id) > 0) + items[item->details.inv_slot_id].erase(item->details.slot_id); + indexed_items[index] = 0; + safe_delete(item); + MPlayerItems.releasewritelock(__FUNCTION__, __LINE__); +} + +void PlayerItemList::MoveItem(Item* item, sint32 inv_slot, int16 slot, bool erase_old){ + if(erase_old && items.count(item->details.inv_slot_id) > 0) + items[item->details.inv_slot_id].erase(item->details.slot_id); + items[inv_slot][slot] = item; + item->details.inv_slot_id = inv_slot; + item->details.slot_id = slot; + item->save_needed = true; +} + +int16 PlayerItemList::GetNumberOfItems(){ + int16 ret = 0; + MPlayerItems.readlock(__FUNCTION__, __LINE__); + if(items.size() > 0){ + map >::iterator itr; + sint32 bag_id = 0; + for(itr = items.begin(); itr != items.end(); itr++){ + bag_id = itr->first; + if(items.count(bag_id) > 0) + ret += items[bag_id].size(); + } + } + MPlayerItems.releasereadlock(__FUNCTION__, __LINE__); + return ret; +} + +bool PlayerItemList::MoveItem(sint32 to_bag_id, int16 from_index, sint8 to, int8 charges){ + MPlayerItems.writelock(__FUNCTION__, __LINE__); + Item* item_from = indexed_items[from_index]; + Item* item_to = 0; + if(item_from){ + if(to_bag_id > 0){ //bag item + Item* bag = GetItemFromUniqueID(to_bag_id, true, false); + if(bag && bag->details.num_slots > to) + item_to = items[to_bag_id][to]; + else{ + MPlayerItems.releasewritelock(__FUNCTION__, __LINE__); + return false; + } + } + else + item_to = items[to_bag_id][to]; + if(charges > 0) { + if (item_to && item_from->details.item_id == item_to->details.item_id){ + if(item_to->details.count > 0 && item_to->details.count < item_to->stack_count){ + int32 total_tmp_price = 0; + if((item_to->details.count + item_from->details.count) <= item_to->stack_count){ + total_tmp_price = (item_to->GetMaxSellValue()*item_to->details.count) + (item_from->GetMaxSellValue()*item_from->details.count); + item_to->details.count += item_from->details.count; + indexed_items[from_index] = 0; + items[item_from->details.inv_slot_id].erase(item_from->details.slot_id); + item_from->needs_deletion = true; + item_to->save_needed = true; + } + else{ + int8 diff = item_to->stack_count - item_to->details.count; + total_tmp_price = (item_to->GetMaxSellValue()*item_to->details.count) + (item_from->GetMaxSellValue()*diff); + item_to->details.count = item_to->stack_count; + item_from->details.count -= diff; + item_to->save_needed = true; + } + item_to->SetMaxSellValue(total_tmp_price/item_to->details.count); + MPlayerItems.releasewritelock(__FUNCTION__, __LINE__); + return true; + } + } + else { + if (item_from->details.count == charges) { + if (item_to) + MoveItem(item_to, item_from->details.inv_slot_id, item_from->details.slot_id); + + MoveItem(item_from, to_bag_id, to, item_to ? false:true); + MPlayerItems.releasewritelock(__FUNCTION__, __LINE__); + } + else { + if (item_to) { + MPlayerItems.releasewritelock(__FUNCTION__, __LINE__); + return false; + } + item_from->details.count -= charges; + Item* new_item = new Item(master_item_list.GetItem(item_from->details.item_id)); + new_item->details.count = charges; + new_item->details.slot_id = to; + new_item->details.inv_slot_id = to_bag_id; + MPlayerItems.releasewritelock(__FUNCTION__, __LINE__); + new_item->save_needed = true; + AddItem(new_item); + if (item_from->details.count == 0) + RemoveItem(item_from); + } + return true; + } + } + else if(item_to && item_to->IsBag() && item_to->details.num_slots > 0){ + // if item we are moving is a bag + if (item_from->IsBag() && item_from->details.num_slots > 0) { + for (int8 i = 0; i < item_from->details.num_slots; i++) { + // if there is something in the bag return, can't put bags with items into other bags + if (items[item_from->details.bag_id].count(i) != 0) { + MPlayerItems.releasewritelock(__FUNCTION__, __LINE__); + return false; + } + } + } + if(items.count(item_to->details.bag_id) > 0){ + for(int8 i=0;idetails.num_slots;i++){ + if(items[item_to->details.bag_id].count(i) == 0){ + MoveItem(item_from, item_to->details.bag_id, i); + MPlayerItems.releasewritelock(__FUNCTION__, __LINE__); + return true; + } + } + } + else{ + printf("7\n"); + MoveItem(item_from, item_to->details.bag_id, 0); + MPlayerItems.releasewritelock(__FUNCTION__, __LINE__); + return true; + } + } + if (item_to) + MoveItem(item_to, item_from->details.inv_slot_id, item_from->details.slot_id); + + MoveItem(item_from, to_bag_id, to, item_to ? false:true); + + MPlayerItems.releasewritelock(__FUNCTION__, __LINE__); + return true; + } + MPlayerItems.releasewritelock(__FUNCTION__, __LINE__); + return false; +} + +EQ2Packet* PlayerItemList::serialize(Player* player, int16 version){ + EQ2Packet* app = 0; + PacketStruct* packet = configReader.getStruct("WS_UpdateInventory",version); + Item* item = 0; + MPlayerItems.readlock(__FUNCTION__, __LINE__); + if(packet && indexed_items.size() > 0){ + int8 packet_size = 0; + int16 size = indexed_items.size(); + if (overflowItems.size() > 0) + size++; + PacketStruct* packet2 = configReader.getStruct("Substruct_Item", version); + packet_size = packet2->GetTotalPacketSize(); + safe_delete(packet2); + packet->setArrayLengthByName("item_count", size); + if(packet_count < size){ + if(!orig_packet){ + xor_packet = new uchar[packet_size * size]; + orig_packet = new uchar[packet_size * size]; + memset(xor_packet, 0, packet_size * size); + memset(orig_packet, 0, packet_size * size); + } + else{ + uchar* tmp = new uchar[packet_size * size]; + memset(tmp, 0, packet_size * size); + memcpy(tmp, orig_packet, packet_size * packet_count); + safe_delete_array(orig_packet); + orig_packet = tmp; + safe_delete_array(xor_packet); + xor_packet = new uchar[packet_size * size]; + } + packet_count = size; + } + + for(int16 i = 0; i < indexed_items.size(); i++){ + item = indexed_items[i]; + if (item && item->details.item_id > 0) + AddItemToPacket(packet, player, item, i); + } + + if (overflowItems.size() > 0) { + // We have overflow items, lets get the first one + item = overflowItems.at(0); + // Lets make sure the item is valid + if (item && item->details.item_id > 0) { + // Set the slot to 6 as that is what overflow requires to work + item->details.slot_id = 6; + // now add it to the packet + AddItemToPacket(packet, player, item, size - 1, true); + } + } + + LogWrite(ITEM__PACKET, 0, "Items", "Dump/Print Packet in func: %s, line: %i", __FUNCTION__, __LINE__); +#if EQDEBUG >= 9 + packet->PrintPacket(); +#endif + packet->setDataByName("equip_flag",0); + app = packet->serializeCountPacket(version, 1, orig_packet, xor_packet); + safe_delete(packet); + } + MPlayerItems.releasereadlock(__FUNCTION__, __LINE__); + return app; +} + +void PlayerItemList::AddItemToPacket(PacketStruct* packet, Player* player, Item* item, int16 i, bool overflow){ + Client *client; + int8 tmp_subtype = 0; + if (!packet || !player) + return; + client = player->GetZone()->GetClientBySpawn(player); + + + + int32 menu_data = 3; + + if(item->slot_data.size() > 0) + menu_data -= ITEM_MENU_TYPE_GENERIC; + if(item->details.num_slots > 0) + menu_data += ITEM_MENU_TYPE_BAG; + if (item->details.item_id == 21355) { + //menu_data += ITEM_MENU_TYPE_GENERIC; + //menu_data += ITEM_MENU_TYPE_EQUIP; + menu_data += ITEM_MENU_TYPE_BOOK; + //menu_data += ITEM_MENU_TYPE_BAG; + //menu_data += ITEM_MENU_TYPE_HOUSE; + //menu_data += ITEM_MENU_TYPE_TEST12; + //menu_data += ITEM_MENU_TYPE_SCRIBE; + //menu_data += ITEM_MENU_TYPE_TEST13; + //menu_data += ITEM_MENU_TYPE_INVALID; + //menu_data += ITEM_MENU_TYPE_TEST14; + //menu_data += ITEM_MENU_TYPE_BROKEN; + } + if (item->details.item_id == 21356) { + menu_data += ITEM_MENU_TYPE_TEST15; + menu_data += ITEM_MENU_TYPE_ATTUNED; + menu_data += ITEM_MENU_TYPE_ATTUNEABLE; + menu_data += ITEM_MENU_TYPE_BOOK; + menu_data += ITEM_MENU_TYPE_DISPLAY_CHARGES; + menu_data += ITEM_MENU_TYPE_TEST1; + menu_data += ITEM_MENU_TYPE_NAMEPET; + menu_data += ITEM_MENU_TYPE_TEST2; + menu_data += ITEM_MENU_TYPE_CONSUME; + menu_data += ITEM_MENU_TYPE_USE; + } + if (item->details.item_id == 21357) { + menu_data += ITEM_MENU_TYPE_CONSUME_OFF ; + menu_data += ITEM_MENU_TYPE_TEST3 ; + menu_data += ITEM_MENU_TYPE_TEST4 ; + menu_data += ITEM_MENU_TYPE_TEST5 ; + menu_data += ITEM_MENU_TYPE_TEST6 ; + menu_data += ITEM_MENU_TYPE_TEST7 ; + menu_data += ITEM_MENU_TYPE_TEST8 ; + menu_data += ITEM_MENU_TYPE_TEST9 ; + menu_data += ITEM_MENU_TYPE_DAMAGED ; + menu_data += ITEM_MENU_TYPE_BROKEN2 ; + menu_data += ITEM_MENU_TYPE_REDEEM ; + menu_data += ITEM_MENU_TYPE_TEST10 ; + menu_data += ITEM_MENU_TYPE_UNPACK ; + } + if(item->IsSkill()){ + Spell* spell = master_spell_list.GetSpell(item->skill_info->spell_id, item->skill_info->spell_tier); + if (spell && spell->ScribeAllowed(player)) + + menu_data += ITEM_MENU_TYPE_SCRIBE; + else + menu_data += ITEM_MENU_TYPE_INVALID; + } + if(item->IsRecipeBook()){ + //TODO: Add check to allow scribe + menu_data += ITEM_MENU_TYPE_SCRIBE; + } + if (item->generic_info.item_type == 10){ + menu_data += ITEM_MENU_TYPE_TEST1; + menu_data += ITEM_MENU_TYPE_HOUSE; + } + if (item->generic_info.item_type == 18){ + menu_data += ITEM_MENU_TYPE_UNPACK; + packet->setSubstructArrayDataByName("items", "unknown3", ITEM_MENU_TYPE2_UNPACK, 0, i); + } + + if(item->generic_info.condition == 0) + menu_data += ITEM_MENU_TYPE_BROKEN; + if(item->CheckFlag(ATTUNED) || item->CheckFlag(NO_TRADE)) + menu_data += ITEM_MENU_TYPE_ATTUNED; + else if(item->CheckFlag(ATTUNEABLE)) + menu_data += ITEM_MENU_TYPE_ATTUNEABLE; + if (item->generic_info.usable == 1) + menu_data += ITEM_MENU_TYPE_USE; + if (item->details.count > 0 && item->stack_count > 1) + menu_data += ITEM_MENU_TYPE_DISPLAY_CHARGES; + // Added the if (overflow) so mouseover examines work properly + if (overflow) + packet->setSubstructArrayDataByName("items", "unique_id", item->details.item_id, 0, i); + else + packet->setSubstructArrayDataByName("items", "unique_id", item->details.unique_id, 0, i); + packet->setSubstructArrayDataByName("items", "bag_id", item->details.bag_id, 0, i); + packet->setSubstructArrayDataByName("items", "inv_slot_id", item->details.inv_slot_id, 0, i); + packet->setSubstructArrayDataByName("items", "menu_type", menu_data, 0, i); + if (overflow) + packet->setSubstructArrayDataByName("items", "index", 0xFFFF, 0, i); + else + packet->setSubstructArrayDataByName("items", "index", i, 0, i); + item->details.index = i; + packet->setSubstructArrayDataByName("items", "icon", item->details.icon, 0, i); + packet->setSubstructArrayDataByName("items", "slot_id", item->details.slot_id, 0, i); + if (client->GetVersion() <= 1208) { + packet->setSubstructArrayDataByName("items", "count", (std::min)(item->details.count, (int16)255), 0, i); + } + else + packet->setSubstructArrayDataByName("items", "count", item->details.count, 0, i); + //packet->setSubstructArrayDataByName("items", "unknown4", 5, 0, i); + // need item level + packet->setSubstructArrayDataByName("items", "item_level", item->details.recommended_level , 0, i); + packet->setSubstructArrayDataByName("items", "tier", item->details.tier, 0, i); + packet->setSubstructArrayDataByName("items", "num_slots", item->details.num_slots, 0, i); + // need empty slots + packet->setSubstructArrayDataByName("items", "item_id", item->details.item_id, 0, i); + //need broker id + packet->setSubstructArrayDataByName("items", "name", item->name.c_str(), 0, i); + + + + + + +} + +bool PlayerItemList::AddOverflowItem(Item* item) { + bool ret = false; + MPlayerItems.writelock(__FUNCTION__, __LINE__); + if (item && item->details.item_id > 0 && overflowItems.size() < 255) { + item->details.slot_id = 6; + item->details.inv_slot_id = -2; + overflowItems.push_back(item); + ret = true; + } + MPlayerItems.releasewritelock(__FUNCTION__, __LINE__); + return ret; +} + +Item* PlayerItemList::GetOverflowItem() { + return overflowItems.at(0); +} + +void PlayerItemList::RemoveOverflowItem(Item* item) { + MPlayerItems.writelock(__FUNCTION__, __LINE__); + vector::iterator itr = std::find(overflowItems.begin(), overflowItems.end(), item); + overflowItems.erase(itr); + MPlayerItems.releasewritelock(__FUNCTION__, __LINE__); +} + +vector* PlayerItemList::GetOverflowItemList() { + vector* ret = new vector; + MPlayerItems.writelock(__FUNCTION__, __LINE__); + vector::iterator itr= ret->begin(); + ret->insert(itr, overflowItems.begin(), overflowItems.end()); + MPlayerItems.releasewritelock(__FUNCTION__, __LINE__); + return ret; +} + +bool PlayerItemList::HasItem(int32 id, bool include_bank){ + map >::iterator itr; + map::iterator slot_itr; + MPlayerItems.readlock(__FUNCTION__, __LINE__); + for(itr = items.begin(); itr != items.end(); itr++){ + if(include_bank || (!include_bank && itr->first >= 0)){ + for(slot_itr=itr->second.begin();slot_itr!=itr->second.end(); slot_itr++){ + if(slot_itr->second && slot_itr->second->details.item_id == id){ + MPlayerItems.releasereadlock(__FUNCTION__, __LINE__); + return true; + } + } + } + } + MPlayerItems.releasereadlock(__FUNCTION__, __LINE__); + return false; +} + +bool PlayerItemList::SharedBankAddAllowed(Item* item){ + if(!item || item->CheckFlag(NO_TRADE)) + return false; + MPlayerItems.readlock(__FUNCTION__, __LINE__); + if(item->IsBag() && items.count(item->details.bag_id) > 0){ + map::iterator itr; + for(itr = items[item->details.bag_id].begin(); itr != items[item->details.bag_id].end(); itr++){ + if(itr->second->CheckFlag(NO_TRADE)){ + MPlayerItems.releasereadlock(__FUNCTION__, __LINE__); + return false; + } + } + } + MPlayerItems.releasereadlock(__FUNCTION__, __LINE__); + return true; +} + +vector* PlayerItemList::GetItemsFromBagID(sint32 bag_id){ + vector* ret = new vector; + if(items.count(bag_id) > 0){ + MPlayerItems.readlock(__FUNCTION__, __LINE__); + map::iterator itr; + map::iterator itr2; + Item* item = 0; + for(itr = items[bag_id].begin(); itr != items[bag_id].end(); itr++){ + item = itr->second; + if(item) + ret->push_back(item); + } + MPlayerItems.releasereadlock(__FUNCTION__, __LINE__); + } + return ret; +} + +vector* PlayerItemList::GetItemsInBag(Item* bag){ + vector* ret_items = new vector; + MPlayerItems.readlock(__FUNCTION__, __LINE__); + if(bag && bag->IsBag() && items.count(bag->details.bag_id) > 0){ + map::iterator itr; + for(itr = items[bag->details.bag_id].begin(); itr != items[bag->details.bag_id].end(); itr++){ + ret_items->push_back(itr->second); + } + } + MPlayerItems.releasereadlock(__FUNCTION__, __LINE__); + return ret_items; +} + +Item* PlayerItemList::GetItemFromID(int32 id, int8 count, bool include_bank, bool lock){ + //first check for an exact count match + map >::iterator itr; + map::iterator slot_itr; + if(lock) + MPlayerItems.readlock(__FUNCTION__, __LINE__); + for(itr = items.begin(); itr != items.end(); itr++){ + if(include_bank || (!include_bank && itr->first >= 0)){ + for(slot_itr=itr->second.begin();slot_itr!=itr->second.end(); slot_itr++){ + if(slot_itr->second && slot_itr->second->details.item_id == id && (count == 0 || slot_itr->second->details.count == count)){ + if(lock) + MPlayerItems.releasereadlock(__FUNCTION__, __LINE__); + return slot_itr->second; + } + } + } + } + + //couldn't find an exact match, look for closest + Item* closest = 0; + for(itr = items.begin(); itr != items.end(); itr++){ + if(include_bank || (!include_bank && itr->first >= 0)){ + for(slot_itr=itr->second.begin();slot_itr!=itr->second.end(); slot_itr++){ + if(slot_itr->second && slot_itr->second->details.item_id == id && slot_itr->second->details.count > count && (closest == 0 || slot_itr->second->details.count < closest->details.count)) + closest = slot_itr->second; + } + } + } + if(lock) + MPlayerItems.releasereadlock(__FUNCTION__, __LINE__); + return closest; +} + +Item* PlayerItemList::GetItemFromUniqueID(int32 id, bool include_bank, bool lock){ + map >::iterator itr; + map::iterator slot_itr; + if(lock) + MPlayerItems.readlock(__FUNCTION__, __LINE__); + for(itr = items.begin(); itr != items.end(); itr++){ + if(include_bank || (!include_bank && itr->first >= 0)){ + for(slot_itr=itr->second.begin();slot_itr!=itr->second.end(); slot_itr++){ + if(slot_itr->second && slot_itr->second->details.unique_id == id){ + if(lock) + MPlayerItems.releasereadlock(__FUNCTION__, __LINE__); + return slot_itr->second; + } + } + } + } + if(lock) + MPlayerItems.releasereadlock(__FUNCTION__, __LINE__); + return 0; +} + +bool PlayerItemList::HasFreeBankSlot() { + bool ret = false; + MPlayerItems.readlock(__FUNCTION__, __LINE__); + if (items[-3].size() < 12) //12 slots in the bank + ret = true; + MPlayerItems.releasereadlock(__FUNCTION__, __LINE__); + return ret; +} + +int8 PlayerItemList::FindFreeBankSlot() { + int8 ret = 0; + MPlayerItems.readlock(__FUNCTION__, __LINE__); + for (int8 i = 0; i < 12; i++) { //12 slots in the bank + if (items[-3].count(i) == 0) { + ret = i; + break; + } + } + MPlayerItems.releasereadlock(__FUNCTION__, __LINE__); + return ret; +} + +EquipmentItemList::EquipmentItemList(){ + orig_packet = 0; + xor_packet = 0; + for(int8 i=0;idetails.unique_id == 0) + GetItem(slot)->details.unique_id = MasterItemList::NextUniqueID(); + MEquipmentItems.unlock(); + return true; + } + return false; +} + +int8 EquipmentItemList::GetNumberOfItems(){ + int8 ret = 0; + MEquipmentItems.lock(); + for(int8 i=0;idetails.inv_slot_id = 0; + item->details.slot_id = slot_id; + item->details.index = slot_id; + items[slot_id] = item; +} + +vector* EquipmentItemList::GetAllEquippedItems(){ + vector* ret = new vector; + MEquipmentItems.lock(); + for(int8 i=0;ipush_back(items[i]); + } + MEquipmentItems.unlock(); + return ret; +} + +Item* EquipmentItemList::GetItem(int8 slot_id){ + return items[slot_id]; +} + +EQ2Packet* EquipmentItemList::serialize(int16 version, Player* player){ + EQ2Packet* app = 0; + Item* item = 0; + PacketStruct* packet = configReader.getStruct("WS_UpdateInventory", version); + if(packet){ + int8 packet_size = 0; + PacketStruct* packet2 = configReader.getStruct("Substruct_Item", version); + packet_size = packet2->GetTotalPacketSize(); + safe_delete(packet2); + packet->setArrayLengthByName("item_count", NUM_SLOTS); + if(!orig_packet){ + xor_packet = new uchar[packet_size*NUM_SLOTS]; + orig_packet = new uchar[packet_size*NUM_SLOTS]; + memset(xor_packet, 0, packet_size*NUM_SLOTS); + memset(orig_packet, 0, packet_size*NUM_SLOTS); + } + MEquipmentItems.lock(); + int32 menu_data = 3; + for(int16 i=0;idetails.item_id > 0){ + if(item->slot_data.size() > 0) + menu_data -= ITEM_MENU_TYPE_GENERIC; + if(item->details.num_slots > 0) + menu_data += ITEM_MENU_TYPE_BAG; + if(item->IsSkill()) + menu_data += ITEM_MENU_TYPE_SCRIBE; + if(item->generic_info.condition == 0) + menu_data += ITEM_MENU_TYPE_BROKEN2; + else if (item->generic_info.condition <= 20) + menu_data += ITEM_MENU_TYPE_DAMAGED; + if(item->CheckFlag(ATTUNED) || item->CheckFlag(NO_TRADE)) + menu_data += ITEM_MENU_TYPE_ATTUNED; + else if(item->CheckFlag(ATTUNEABLE)) + menu_data += ITEM_MENU_TYPE_ATTUNEABLE; + if (item->generic_info.usable == 1) + menu_data += ITEM_MENU_TYPE_USE; + if (item->IsFood()) + { + menu_data += ITEM_MENU_TYPE_CONSUME; + if (player && ((item->IsFoodFood() && player->get_character_flag(CF_FOOD_AUTO_CONSUME)) || (item->IsFoodDrink() && player->get_character_flag(CF_DRINK_AUTO_CONSUME)))) + menu_data += ITEM_MENU_TYPE_CONSUME_OFF; + } + packet->setSubstructArrayDataByName("items", "unique_id", item->details.unique_id, 0, i); + packet->setSubstructArrayDataByName("items", "bag_id", item->details.bag_id, 0, i); + packet->setSubstructArrayDataByName("items", "inv_slot_id", item->details.inv_slot_id, 0, i); + if(item->details.count > 0 && item->stack_count > 1) + menu_data += ITEM_MENU_TYPE_DISPLAY_CHARGES; + packet->setSubstructArrayDataByName("items", "menu_type", menu_data, 0, i); + packet->setSubstructArrayDataByName("items", "icon", item->details.icon, 0, i); + packet->setSubstructArrayDataByName("items", "slot_id", item->details.slot_id, 0, i); + packet->setSubstructArrayDataByName("items", "count", item->details.count, 0, i); + // item level needed here + packet->setSubstructArrayDataByName("items", "tier", item->details.tier, 0, i); + packet->setSubstructArrayDataByName("items", "num_slots", item->details.num_slots, 0, i); + //empty slots needed here + packet->setSubstructArrayDataByName("items", "item_id", item->details.item_id, 0, i); + //broker id needed here + packet->setSubstructArrayDataByName("items", "name", item->name.c_str(), 0, i); + + //packet->setSubstructArrayDataByName("items", "unknown4", 10, 0, i); + + item->details.index = i; + } + packet->setSubstructArrayDataByName("items", "index", i, 0, i); + } + MEquipmentItems.unlock(); + packet->setDataByName("equip_flag", 1); + app = packet->serializeCountPacket(version, 1, orig_packet, xor_packet); + safe_delete(packet); + } + return app; +} +ItemStatsValues* EquipmentItemList::CalculateEquipmentBonuses(Entity* entity){ + ItemStatsValues* stats = new ItemStatsValues; + memset(stats, 0, sizeof(ItemStatsValues)); + entity->GetInfoStruct()->mitigation_base = 0; + MEquipmentItems.lock(); + for(int8 i=0;idetails.item_id > 0){ + master_item_list.CalculateItemBonuses(items[i], entity, stats); + if (items[i]->armor_info && !items[i]->IsShield()) + entity->GetInfoStruct()->mitigation_base += items[i]->armor_info->mitigation_high; + } + } + MEquipmentItems.unlock(); + return stats; +} +bool EquipmentItemList::HasItem(int32 id){ + MEquipmentItems.lock(); + for(int8 i=0;idetails.item_id == id){ + MEquipmentItems.unlock(); + return true; + } + } + MEquipmentItems.unlock(); + return false; +} +void EquipmentItemList::RemoveItem(int8 slot, bool delete_item){ + if(slot < NUM_SLOTS){ + MEquipmentItems.lock(); + if(delete_item){ + safe_delete(items[slot]); + } + items[slot] = 0; + MEquipmentItems.unlock(); + } +} + +Item* EquipmentItemList::GetItemFromUniqueID(int32 item_id){ + MEquipmentItems.lock(); + for(int8 i=0;idetails.unique_id == item_id){ + MEquipmentItems.unlock(); + return items[i]; + } + } + MEquipmentItems.unlock(); + return 0; +} + +Item* EquipmentItemList::GetItemFromItemID(int32 item_id) { + Item* item = 0; + MEquipmentItems.lock(); + for(int8 i = 0; i < NUM_SLOTS; i++) { + if(items[i] && items[i]->details.item_id == item_id) { + item = items[i]; + break; + } + } + MEquipmentItems.unlock(); + return item; +} + +bool EquipmentItemList::CanItemBeEquippedInSlot(Item* tmp, int8 slot){ + MEquipmentItems.lock(); + for(int8 i=0;tmp && islot_data.size();i++){ + if(tmp->slot_data[i] == slot){ + MEquipmentItems.unlock(); + return true; + } + } + MEquipmentItems.unlock(); + return false; +} +bool EquipmentItemList::CheckEquipSlot(Item* tmp, int8 slot){ + MEquipmentItems.lock(); + for(int8 i=0;tmp && islot_data.size();i++){ + if(tmp->slot_data[i] == slot){ + Item* tmp_item = GetItem(tmp->slot_data[i]); + if(!tmp_item || tmp_item->details.item_id == 0){ + MEquipmentItems.unlock(); + return true; + } + } + } + MEquipmentItems.unlock(); + return false; +} + +int8 EquipmentItemList::GetFreeSlot(Item* tmp, int8 slot_id){ + int8 slot = 0; + MEquipmentItems.lock(); + for(int8 i=0;tmp && islot_data.size();i++){ + slot = tmp->slot_data[i]; + if(slot_id == 255 || slot == slot_id){ + Item* tmp_item = GetItem(slot); + if(!tmp_item || tmp_item->details.item_id == 0){ + MEquipmentItems.unlock(); + return slot; + } + } + } + MEquipmentItems.unlock(); + return 255; +} + +int8 EquipmentItemList::GetSlotByItem(Item* item) { + int8 slot = 255; + for (int8 i = 0; i < NUM_SLOTS; i++) { + if (items[i] && items[i] == item) { + slot = i; + break; + } + } + return slot; +} \ No newline at end of file diff --git a/EQ2/source/WorldServer/Items/Items.h b/EQ2/source/WorldServer/Items/Items.h new file mode 100644 index 000000000..2f2089131 --- /dev/null +++ b/EQ2/source/WorldServer/Items/Items.h @@ -0,0 +1,1030 @@ +/* + EQ2Emulator: Everquest II Server Emulator + Copyright (C) 2007 EQ2EMulator Development Team (http://www.eq2emulator.net) + + This file is part of EQ2Emulator. + + EQ2Emulator is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + EQ2Emulator is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with EQ2Emulator. If not, see . +*/ +#ifndef __EQ2_ITEMS__ +#define __EQ2_ITEMS__ +#include +#include +#include "../../common/types.h" +#include "../../common/DataBuffer.h" +#include "../../common/MiscFunctions.h" +#include "../Commands/Commands.h" +#include "../../common/ConfigReader.h" + +using namespace std; +class MasterItemList; +class Player; +class Entity; +extern MasterItemList master_item_list; +#define EQ2_PRIMARY_SLOT 0 +#define EQ2_SECONDARY_SLOT 1 +#define EQ2_HEAD_SLOT 2 +#define EQ2_CHEST_SLOT 3 +#define EQ2_SHOULDERS_SLOT 4 +#define EQ2_FOREARMS_SLOT 5 +#define EQ2_HANDS_SLOT 6 +#define EQ2_LEGS_SLOT 7 +#define EQ2_FEET_SLOT 8 +#define EQ2_LRING_SLOT 9 +#define EQ2_RRING_SLOT 10 +#define EQ2_EARS_SLOT_1 11 +#define EQ2_EARS_SLOT_2 12 +#define EQ2_NECK_SLOT 13 +#define EQ2_LWRIST_SLOT 14 +#define EQ2_RWRIST_SLOT 15 +#define EQ2_RANGE_SLOT 16 +#define EQ2_AMMO_SLOT 17 +#define EQ2_WAIST_SLOT 18 +#define EQ2_CLOAK_SLOT 19 +#define EQ2_CHARM_SLOT_1 20 +#define EQ2_CHARM_SLOT_2 21 +#define EQ2_FOOD_SLOT 22 +#define EQ2_DRINK_SLOT 23 +#define EQ2_TEXTURES_SLOT 24 +#define EQ2_HAIR_SLOT 25 +#define EQ2_BEARD_SLOT 26 +#define EQ2_WINGS_SLOT 27 +#define EQ2_NAKED_CHEST_SLOT 28 +#define EQ2_NAKED_LEGS_SLOT 29 +#define EQ2_BACK_SLOT 30 + +#define PRIMARY_SLOT 1 +#define SECONDARY_SLOT 2 +#define HEAD_SLOT 4 +#define CHEST_SLOT 8 +#define SHOULDERS_SLOT 16 +#define FOREARMS_SLOT 32 +#define HANDS_SLOT 64 +#define LEGS_SLOT 128 +#define FEET_SLOT 256 +#define LRING_SLOT 512 +#define RRING_SLOT 1024 +#define EARS_SLOT_1 2048 +#define EARS_SLOT_2 4096 +#define NECK_SLOT 8192 +#define LWRIST_SLOT 16384 +#define RWRIST_SLOT 32768 +#define RANGE_SLOT 65536 +#define AMMO_SLOT 131072 +#define WAIST_SLOT 262144 +#define CLOAK_SLOT 524288 +#define CHARM_SLOT_1 1048576 +#define CHARM_SLOT_2 2097152 +#define FOOD_SLOT 4194304 +#define DRINK_SLOT 8388608 +#define TEXTURES_SLOT 16777216 +#define HAIR_SLOT 33554432 +#define BEARD_SLOT 67108864 +#define WINGS_SLOT 134217728 +#define NAKED_CHEST_SLOT 268435456 +#define NAKED_LEGS_SLOT 536870912 +#define BACK_SLOT 1073741824 + +#define NUM_BANK_SLOTS 12 +#define NUM_SHARED_BANK_SLOTS 8 +#define NUM_SLOTS 25 +#define NUM_INV_SLOTS 6 +#define INV_SLOT1 0 +#define INV_SLOT2 50 +#define INV_SLOT3 100 +#define INV_SLOT4 150 +#define INV_SLOT5 200 +#define INV_SLOT6 250 +#define BANK_SLOT1 1000 +#define BANK_SLOT2 1100 +#define BANK_SLOT3 1200 +#define BANK_SLOT4 1300 +#define BANK_SLOT5 1400 +#define BANK_SLOT6 1500 +#define BANK_SLOT7 1600 +#define BANK_SLOT8 1700 +#define ATTUNED 1 +#define ATTUNEABLE 2 +#define ARTIFACT 4 +#define LORE 8 +#define TEMPORARY 16 +#define NO_TRADE 32 +#define NO_VALUE 64 +#define NO_ZONE 128 +#define NO_DESTROY 256 +#define CRAFTED 512 +#define GOOD_ONLY 1024 +#define EVIL_ONLY 2048 +#define STACK_LORE 4096 +#define LORE_EQUIP 8192 +#define FLAGS_16384 16384 +#define FLAGS_32768 32768 + +#define ORNATE 1 +#define HEIRLOOM 2 +#define APPEARANCE_ONLY 4 +#define UNLOCKED 8 +#define REFORGED 16 +#define NO_REPAIR 32 +#define ETHERAL 64 +#define REFINED 128 +#define FLAGS2_256 256 //not used at this time +#define FLAGS2_512 512//not used at this time +#define FLAGS2_1024 1024//not used at this time +#define FLAGS2_2048 2048//not used at this time +#define FLAGS2_4096 4096//not used at this time +#define FLAGS2_8192 8192//not used at this time +#define FLAGS2_16384 16384//not used at this time +#define FLAGS2_32768 32768//not used at this time + + +#define ITEM_WIELD_TYPE_DUAL 1 +#define ITEM_WIELD_TYPE_SINGLE 2 +#define ITEM_WIELD_TYPE_TWO_HAND 4 + +#define ITEM_TYPE_NORMAL 0 +#define ITEM_TYPE_WEAPON 1 +#define ITEM_TYPE_RANGED 2 +#define ITEM_TYPE_ARMOR 3 +#define ITEM_TYPE_SHIELD 4 +#define ITEM_TYPE_BAG 5 +#define ITEM_TYPE_SKILL 6 +#define ITEM_TYPE_RECIPE 7 +#define ITEM_TYPE_FOOD 8 +#define ITEM_TYPE_BAUBLE 9 +#define ITEM_TYPE_HOUSE 10 +#define ITEM_TYPE_THROWN 11 +#define ITEM_TYPE_HOUSE_CONTAINER 12 +#define ITEM_TYPE_ADORNMENT 13 +#define ITEM_TYPE_GENERIC_ADORNMENT 14 +#define ITEM_TYPE_PROFILE 16 +#define ITEM_TYPE_PATTERN 17 +#define ITEM_TYPE_ARMORSET 18 +#define ITEM_TYPE_ITEMCRATE 18 +#define ITEM_TYPE_BOOK 19 +#define ITEM_TYPE_DECORATION 20 +#define ITEM_TYPE_DUNGEON_MAKER 21 +#define ITEM_TYPE_MARKETPLACE 22 + + +//DOV defines everything till 13 is the same +//#define ITEM_TYPE_BOOK 13 +//#define ITEM_TYPE_ADORNMENT 14 +//#define ITEM_TYPE_PATTERN 15 +//#define ITEM_TYPE_ARMORSET 16 + + + +#define ITEM_MENU_TYPE_GENERIC 1 //0 +#define ITEM_MENU_TYPE_EQUIP 2 //1 +#define ITEM_MENU_TYPE_BAG 4//2 +#define ITEM_MENU_TYPE_HOUSE 8 //3 Place +#define ITEM_MENU_TYPE_TEST12 16 //4 +#define ITEM_MENU_TYPE_SCRIBE 32//5 +#define ITEM_MENU_TYPE_TEST13 64//6 +#define ITEM_MENU_TYPE_INVALID 128//7 +#define ITEM_MENU_TYPE_TEST14 256//8 +#define ITEM_MENU_TYPE_BROKEN 512//9 +#define ITEM_MENU_TYPE_TEST15 1024//10 +#define ITEM_MENU_TYPE_ATTUNED 2048//11 +#define ITEM_MENU_TYPE_ATTUNEABLE 4096//12 +#define ITEM_MENU_TYPE_BOOK 8192//13 +#define ITEM_MENU_TYPE_DISPLAY_CHARGES 16384//14 +#define ITEM_MENU_TYPE_TEST1 32768//15 Possibly toogle decorator mode +#define ITEM_MENU_TYPE_NAMEPET 65536 //16 Right CLick Menu +#define ITEM_MENU_TYPE_TEST2 131072 //sets a purple background on item +#define ITEM_MENU_TYPE_CONSUME 262144//18 +#define ITEM_MENU_TYPE_USE 524288//19 +#define ITEM_MENU_TYPE_CONSUME_OFF 1048576//20 +#define ITEM_MENU_TYPE_TEST3 1310720// bad number combo of 2 bits +#define ITEM_MENU_TYPE_TEST4 2097152//21 +#define ITEM_MENU_TYPE_TEST5 4194304//22 infusable +#define ITEM_MENU_TYPE_TEST6 8388608 //drink option on menu +#define ITEM_MENU_TYPE_TEST7 16777216//24 +#define ITEM_MENU_TYPE_TEST8 33554432 // bit 25 use option in bags +#define ITEM_MENU_TYPE_TEST9 67108864//26 +#define ITEM_MENU_TYPE_DAMAGED 134217728 //27 +#define ITEM_MENU_TYPE_BROKEN2 268435456 //28 +#define ITEM_MENU_TYPE_REDEEM 536870912 //29 //READ?? +#define ITEM_MENU_TYPE_TEST10 1073741824 //30 +#define ITEM_MENU_TYPE_UNPACK 2147483648//31 * on items i found this unpack is used at same time as UNPACK below + +#define ITEM_MENU_TYPE2_TEST1 1 //0 auto consume on +#define ITEM_MENU_TYPE2_TEST2 2 //1 +#define ITEM_MENU_TYPE2_UNPACK 4//2 +#define ITEM_MENU_TYPE2_TEST4 8 //3 +#define ITEM_MENU_TYPE2_TEST5 16 //4 +#define ITEM_MENU_TYPE2_TEST6 32//5 +#define ITEM_MENU_TYPE2_TEST7 64//6 +#define ITEM_MENU_TYPE2_TEST8 128//7 +#define ITEM_MENU_TYPE2_TEST9 256//8 +#define ITEM_MENU_TYPE2_TEST10 512//9 +#define ITEM_MENU_TYPE2_TEST11 1024//10 +#define ITEM_MENU_TYPE2_TEST12 2048//11 +#define ITEM_MENU_TYPE2_TEST13 4096//12 +#define ITEM_MENU_TYPE2_TEST14 8192//13 +#define ITEM_MENU_TYPE2_TEST15 16384//14 +#define ITEM_MENU_TYPE2_TEST16 32768//15 + +#define ITEM_TAG_UNCOMMON 3 //tier tags +#define ITEM_TAG_TREASURED 4 +#define ITEM_TAG_LEGENDARY 7 +#define ITEM_TAG_FABLED 9 +#define ITEM_TAG_MYTHICAL 12 + +#define ITEM_BROKER_TYPE_ANY 0xFFFFFFFF +#define ITEM_BROKER_TYPE_ADORNMENT 134217728 +#define ITEM_BROKER_TYPE_AMMO 1024 +#define ITEM_BROKER_TYPE_ATTUNEABLE 16384 +#define ITEM_BROKER_TYPE_BAG 2048 +#define ITEM_BROKER_TYPE_BAUBLE 16777216 +#define ITEM_BROKER_TYPE_BOOK 128 +#define ITEM_BROKER_TYPE_CHAINARMOR 2097152 +#define ITEM_BROKER_TYPE_CLOAK 1073741824 +#define ITEM_BROKER_TYPE_CLOTHARMOR 524288 +#define ITEM_BROKER_TYPE_COLLECTABLE 67108864 +#define ITEM_BROKER_TYPE_CRUSHWEAPON 4 +#define ITEM_BROKER_TYPE_DRINK 131072 +#define ITEM_BROKER_TYPE_FOOD 4096 +#define ITEM_BROKER_TYPE_HOUSEITEM 512 +#define ITEM_BROKER_TYPE_JEWELRY 262144 +#define ITEM_BROKER_TYPE_LEATHERARMOR 1048576 +#define ITEM_BROKER_TYPE_LORE 8192 +#define ITEM_BROKER_TYPE_MISC 1 +#define ITEM_BROKER_TYPE_PIERCEWEAPON 8 +#define ITEM_BROKER_TYPE_PLATEARMOR 4194304 +#define ITEM_BROKER_TYPE_POISON 65536 +#define ITEM_BROKER_TYPE_POTION 32768 +#define ITEM_BROKER_TYPE_RECIPEBOOK 8388608 +#define ITEM_BROKER_TYPE_SALESDISPLAY 33554432 +#define ITEM_BROKER_TYPE_SHIELD 32 +#define ITEM_BROKER_TYPE_SLASHWEAPON 2 +#define ITEM_BROKER_TYPE_SPELLSCROLL 64 +#define ITEM_BROKER_TYPE_TINKERED 268435456 +#define ITEM_BROKER_TYPE_TRADESKILL 256 + +#define ITEM_BROKER_SLOT_ANY 0xFFFFFFFF +#define ITEM_BROKER_SLOT_AMMO 65536 +#define ITEM_BROKER_SLOT_CHARM 524288 +#define ITEM_BROKER_SLOT_CHEST 32 +#define ITEM_BROKER_SLOT_CLOAK 262144 +#define ITEM_BROKER_SLOT_DRINK 2097152 +#define ITEM_BROKER_SLOT_EARS 4096 +#define ITEM_BROKER_SLOT_FEET 1024 +#define ITEM_BROKER_SLOT_FOOD 1048576 +#define ITEM_BROKER_SLOT_FOREARMS 128 +#define ITEM_BROKER_SLOT_HANDS 256 +#define ITEM_BROKER_SLOT_HEAD 16 +#define ITEM_BROKER_SLOT_LEGS 512 +#define ITEM_BROKER_SLOT_NECK 8192 +#define ITEM_BROKER_SLOT_PRIMARY 1 +#define ITEM_BROKER_SLOT_PRIMARY_2H 2 +#define ITEM_BROKER_SLOT_RANGE_WEAPON 32768 +#define ITEM_BROKER_SLOT_RING 2048 +#define ITEM_BROKER_SLOT_SECONDARY 8 +#define ITEM_BROKER_SLOT_SHOULDERS 64 +#define ITEM_BROKER_SLOT_WAIST 131072 +#define ITEM_BROKER_SLOT_WRIST 16384 + +#define ITEM_BROKER_STAT_TYPE_NONE 0 +#define ITEM_BROKER_STAT_TYPE_DEF 2 +#define ITEM_BROKER_STAT_TYPE_STR 4 +#define ITEM_BROKER_STAT_TYPE_STA 8 +#define ITEM_BROKER_STAT_TYPE_AGI 16 +#define ITEM_BROKER_STAT_TYPE_WIS 32 +#define ITEM_BROKER_STAT_TYPE_INT 64 +#define ITEM_BROKER_STAT_TYPE_HEALTH 128 +#define ITEM_BROKER_STAT_TYPE_POWER 256 +#define ITEM_BROKER_STAT_TYPE_HEAT 512 +#define ITEM_BROKER_STAT_TYPE_COLD 1024 +#define ITEM_BROKER_STAT_TYPE_MAGIC 2048 +#define ITEM_BROKER_STAT_TYPE_MENTAL 4096 +#define ITEM_BROKER_STAT_TYPE_DIVINE 8192 +#define ITEM_BROKER_STAT_TYPE_POISON 16384 +#define ITEM_BROKER_STAT_TYPE_DISEASE 32768 +#define ITEM_BROKER_STAT_TYPE_CRUSH 65536 +#define ITEM_BROKER_STAT_TYPE_SLASH 131072 +#define ITEM_BROKER_STAT_TYPE_PIERCE 262144 +#define ITEM_BROKER_STAT_TYPE_CRITICAL 524288 +#define ITEM_BROKER_STAT_TYPE_DBL_ATTACK 1048576 +#define ITEM_BROKER_STAT_TYPE_ABILITY_MOD 2097152 +#define ITEM_BROKER_STAT_TYPE_POTENCY 4194304 + + + +#define OVERFLOW_SLOT 0xFFFFFFFE +#define SLOT_INVALID 0xFFFF + +#define ITEM_STAT_STR 0 +#define ITEM_STAT_STA 1 +#define ITEM_STAT_AGI 2 +#define ITEM_STAT_WIS 3 +#define ITEM_STAT_INT 4 + +#define ITEM_STAT_VS_PHYSICAL 200 +#define ITEM_STAT_VS_HEAT 201 //elemental +#define ITEM_STAT_VS_POISON 202 //noxious +#define ITEM_STAT_VS_MAGIC 203 //arcane +#define ITEM_STAT_VS_DROWNING 210 +#define ITEM_STAT_VS_FALLING 211 +#define ITEM_STAT_VS_PAIN 212 +#define ITEM_STAT_VS_MELEE 213 + +#define ITEM_STAT_VS_SLASH 204 +#define ITEM_STAT_VS_CRUSH 205 +#define ITEM_STAT_VS_PIERCE 206 +//#define ITEM_STAT_VS_HEAT 203 //just so no build error +#define ITEM_STAT_VS_COLD 207 +//#define ITEM_STAT_VS_MAGIC 205 //just so no build error +#define ITEM_STAT_VS_MENTAL 208 +#define ITEM_STAT_VS_DIVINE 209 +#define ITEM_STAT_VS_DISEASE 214 +//#define ITEM_STAT_VS_POISON 209 //just so no build error +//#define ITEM_STAT_VS_DROWNING 210 //just so no build error +//#define ITEM_STAT_VS_FALLING 211 //just so no build error +//#define ITEM_STAT_VS_PAIN 212 //just so no build error +//#define ITEM_STAT_VS_MELEE 213 //just so no build error + +#define ITEM_STAT_DMG_SLASH 300 +#define ITEM_STAT_DMG_CRUSH 301 +#define ITEM_STAT_DMG_PIERCE 302 +#define ITEM_STAT_DMG_HEAT 303 +#define ITEM_STAT_DMG_COLD 304 +#define ITEM_STAT_DMG_MAGIC 305 +#define ITEM_STAT_DMG_MENTAL 306 +#define ITEM_STAT_DMG_DIVINE 307 +#define ITEM_STAT_DMG_DISEASE 308 +#define ITEM_STAT_DMG_POISON 309 +#define ITEM_STAT_DMG_DROWNING 310 +#define ITEM_STAT_DMG_FALLING 311 +#define ITEM_STAT_DMG_PAIN 312 +#define ITEM_STAT_DMG_MELEE 313 + +#define ITEM_STAT_DEFLECTIONCHANCE 400 //just so no build error + +#define ITEM_STAT_HEALTH 500 +#define ITEM_STAT_POWER 501 +#define ITEM_STAT_CONCENTRATION 502 +#define ITEM_STAT_SAVAGERY 503 + +//this is the master stat list you should be using and names match what is in census. it is based off of DoV. the comment is what is displayed on items when examining +//the itemstats table will maintain the custom lists per expansion +// emu # is digits after the 6 + +#define ITEM_STAT_HPREGEN 600 //Health Regeneration +#define ITEM_STAT_MANAREGEN 601 //Power Regeneration +#define ITEM_STAT_HPREGENPPT 602 //Out-of-Combat Health Regeneration %%? +#define ITEM_STAT_MPREGENPPT 603 //Out-of-Combat Power Regeneration %%? +#define ITEM_STAT_COMBATHPREGENPPT 604 //In-Combat Health Regeneration %%? +#define ITEM_STAT_COMBATMPREGENPPT 605 //In-Combat Power Regeneration %%? +#define ITEM_STAT_MAXHP 606 //Max Health +#define ITEM_STAT_MAXHPPERC 607 +#define ITEM_STAT_MAXHPPERCFINAL 608 //% Max Mealth +#define ITEM_STAT_SPEED 609 //Out of Combat Run Speed +#define ITEM_STAT_SLOW 610 //Slow +#define ITEM_STAT_MOUNTSPEED 611 //Ground Mount Speed +#define ITEM_STAT_MOUNTAIRSPEED 612 //Mount Air Speed +#define ITEM_STAT_LEAPSPEED 613 +#define ITEM_STAT_LEAPTIME 614 +#define ITEM_STAT_GLIDEEFFICIENCY 615 +#define ITEM_STAT_OFFENSIVESPEED 616 //In Combat Run Speed +#define ITEM_STAT_ATTACKSPEED 617 //% Attack Speed +#define ITEM_STAT_SPELLWEAPONATTACKSPEED 618 +#define ITEM_STAT_MAXMANA 619 //Max Power +#define ITEM_STAT_MAXMANAPERC 620 //% Max Power +#define ITEM_STAT_MAXATTPERC 621 //All Attributes //is this a percent or is it a stat change +#define ITEM_STAT_BLURVISION 622 //Blurs Vision +#define ITEM_STAT_MAGICLEVELIMMUNITY 623 //Magic Level Immunity +#define ITEM_STAT_HATEGAINMOD 624 //% Hate Gain +#define ITEM_STAT_COMBATEXPMOD 625 //Combat XP Gain +#define ITEM_STAT_TRADESKILLEXPMOD 626 //Tradeskill XP Gain +#define ITEM_STAT_ACHIEVEMENTEXPMOD 627 //AA XP Gain +#define ITEM_STAT_SIZEMOD 628 //Size +#define ITEM_STAT_DPS 629 //%Damage Per Second +#define ITEM_STAT_SPELLWEAPONDPS 630 //%Damage Per Second +#define ITEM_STAT_STEALTH 631 //Stealth +#define ITEM_STAT_INVIS 632 //Invisibility +#define ITEM_STAT_SEESTEALTH 633 //See Stealth +#define ITEM_STAT_SEEINVIS 634 //See Invisible +#define ITEM_STAT_EFFECTIVELEVELMOD 635 //Effective Level +#define ITEM_STAT_RIPOSTECHANCE 636 //%Extra Riposte Chance +#define ITEM_STAT_PARRYCHANCE 637 //%Extra Parry Chance +#define ITEM_STAT_DODGECHANCE 638 //%Extra Dodge Chance +#define ITEM_STAT_AEAUTOATTACKCHANCE 639 //% AE Autoattck Chance +#define ITEM_STAT_SPELLWEAPONAEAUTOATTACKCHANCE 640 // +#define ITEM_STAT_MULTIATTACKCHANCE 641 //% Multi Attack Chance // inconsistant with db +#define ITEM_STAT_PVPDOUBLEATTACKCHANCE 642 +#define ITEM_STAT_SPELLWEAPONDOUBLEATTACKCHANCE 643 // missing in db +#define ITEM_STAT_PVPSPELLWEAPONDOUBLEATTACKCHANCE 644 +#define ITEM_STAT_SPELLMULTIATTACKCHANCE 645 //% Spell Multi Atttack Chance +#define ITEM_STAT_PVPSPELLDOUBLEATTACKCHANCE 646 +#define ITEM_STAT_FLURRY 647 //%Flurry +#define ITEM_STAT_SPELLWEAPONFLURRY 648 +#define ITEM_STAT_MELEEDAMAGEMULTIPLIER 649 //Melee Damage Multiplier +#define ITEM_STAT_EXTRAHARVESTCHANCE 650 //Extra Harvest Chance +#define ITEM_STAT_EXTRASHIELDBLOCKCHANCE 651 //Block Chance +#define ITEM_STAT_ITEMHPREGENPPT 652 //In-Combat Health Regeneration +#define ITEM_STAT_ITEMPPREGENPPT 653 //In-Combat Power Regeneration +#define ITEM_STAT_MELEECRITCHANCE 654 //% Crit Chance +#define ITEM_STAT_CRITAVOIDANCE 655 //% Crit Avoidance +#define ITEM_STAT_BENEFICIALCRITCHANCE 656 //% Beneficial Crit Chance +#define ITEM_STAT_CRITBONUS 657 //% Crit Bonus +#define ITEM_STAT_PVPCRITBONUS 658 +#define ITEM_STAT_POTENCY 659 //% Potency +#define ITEM_STAT_PVPPOTENCY 660 +#define ITEM_STAT_UNCONSCIOUSHPMOD 661 //Unconcious Health +#define ITEM_STAT_ABILITYREUSESPEED 662 //% Ability Reuse Speed +#define ITEM_STAT_ABILITYRECOVERYSPEED 663 //% Ability Recovery Speed +#define ITEM_STAT_ABILITYCASTINGSPEED 664 //% Ability Casting Speed +#define ITEM_STAT_SPELLREUSESPEED 665 //% Spell Reuse Speed +#define ITEM_STAT_MELEEWEAPONRANGE 666 //% Melee Weapon Range Increase +#define ITEM_STAT_RANGEDWEAPONRANGE 667 //% Ranged Weapon Range Increase +#define ITEM_STAT_FALLINGDAMAGEREDUCTION 668 //Fallling Damage Reduction +#define ITEM_STAT_RIPOSTEDAMAGE 669 //% Riposte Damage +#define ITEM_STAT_MINIMUMDEFLECTIONCHANCE 670 //% Minimum Block Chance +#define ITEM_STAT_MOVEMENTWEAVE 671 //Movement Weave +#define ITEM_STAT_COMBATHPREGEN 672 //Combat HP Regen +#define ITEM_STAT_COMBATMANAREGEN 673 //Combat Mana Regen +#define ITEM_STAT_CONTESTSPEEDBOOST 674 //Contest Only Speed +#define ITEM_STAT_TRACKINGAVOIDANCE 675 //Tracking avoidance +#define ITEM_STAT_STEALTHINVISSPEEDMOD 676 //Movement Bonus whie Stealthed or Invisible +#define ITEM_STAT_LOOT_COIN 677 //Loot Coin +#define ITEM_STAT_ARMORMITIGATIONINCREASE 678 //% Mitigation Increase +#define ITEM_STAT_AMMOCONSERVATION 679 // Ammo Conservation +#define ITEM_STAT_STRIKETHROUGH 680 //Strikethrough +#define ITEM_STAT_STATUSBONUS 681 //Status Bonus +#define ITEM_STAT_ACCURACY 682 //% Accuracy +#define ITEM_STAT_COUNTERSTRIKE 683 //CounterStrike +#define ITEM_STAT_SHIELDBASH 684 //Shield Bash +#define ITEM_STAT_WEAPONDAMAGEBONUS 685 //Weapon Damage Bonus +#define ITEM_STAT_WEAPONDAMAGEBONUSMELEEONLY 686 //additional chance to Riposte +#define ITEM_STAT_ADDITIONALRIPOSTECHANCE 687 //additional chance to Riposte +#define ITEM_STAT_CRITICALMITIGATION 688 //Critical Mitigation +#define ITEM_STAT_PVPTOUGHNESS 689 //Toughness +#define ITEM_STAT_PVPLETHALITY 690 // +#define ITEM_STAT_STAMINABONUS 691 //Stamina Bonus +#define ITEM_STAT_WISDOMMITBONUS 692 //Wisdom Mitigation Bonus +#define ITEM_STAT_HEALRECEIVE 693 //Applied Heals +#define ITEM_STAT_HEALRECEIVEPERC 694 //% Applied Heals +#define ITEM_STAT_PVPCRITICALMITIGATION 695 //PvP Critical Mitigation +#define ITEM_STAT_BASEAVOIDANCEBONUS 696 +#define ITEM_STAT_INCOMBATSAVAGERYREGEN 697 +#define ITEM_STAT_OUTOFCOMBATSAVAGERYREGEN 698 +#define ITEM_STAT_SAVAGERYREGEN 699 +#define ITEM_STAT_SAVAGERYGAINMOD 6100 +#define ITEM_STAT_MAXSAVAGERYLEVEL 6101 +#define ITEM_STAT_SPELLWEAPONDAMAGEBONUS 6102 +#define ITEM_STAT_INCOMBATDISSONANCEREGEN 6103 +#define ITEM_STAT_OUTOFCOMBATDISSONANCEREGEN 6104 +#define ITEM_STAT_DISSONANCEREGEN 6105 +#define ITEM_STAT_DISSONANCEGAINMOD 6106 +#define ITEM_STAT_AEAUTOATTACKAVOID 6107 +#define ITEM_STAT_AGNOSTICDAMAGEBONUS 6108 +#define ITEM_STAT_AGNOSTICHEALBONUS 6109 +#define ITEM_STAT_TITHEGAIN 6110 +#define ITEM_STAT_FERVER 6111 +#define ITEM_STAT_RESOLVE 6112 +#define ITEM_STAT_COMBATMITIGATION 6113 +#define ITEM_STAT_ABILITYMITIGATION 6114 +#define ITEM_STAT_MULTIATTACKAVOIDANCE 6115 +#define ITEM_STAT_DOUBLECASTAVOIDANCE 6116 +#define ITEM_STAT_ABILITYDOUBLECASTAVOIDANCE 6117 +#define ITEM_STAT_DAMAGEPERSECONDMITIGATION 6118 +#define ITEM_STAT_FERVERMITIGATION 6119 +#define ITEM_STAT_FLURRYAVOIDANCE 6120 +#define ITEM_STAT_WEAPONDAMAGEBONUSMITIGATION 6121 +#define ITEM_STAT_ABILITYDOUBLECASTCHANCE 6122 +#define ITEM_STAT_ABILITYMODIFIERMITIGATATION 6123 +#define ITEM_STAT_STATUSEARNED 6124 + + + + +#define ITEM_STAT_SPELL_DAMAGE 700 +#define ITEM_STAT_HEAL_AMOUNT 701 +#define ITEM_STAT_SPELL_AND_HEAL 702 +#define ITEM_STAT_COMBAT_ART_DAMAGE 703 +#define ITEM_STAT_SPELL_AND_COMBAT_ART_DAMAGE 704 +#define ITEM_STAT_TAUNT_AMOUNT 705 +#define ITEM_STAT_TAUNT_AND_COMBAT_ART_DAMAGE 706 +#define ITEM_STAT_ABILITY_MODIFIER 707 + +// Other stats not listed above (not sent from the server), never send these to the client +// using type 8 as it is not used by the client as far as we know +#define ITEM_STAT_DURABILITY_MOD 800 +#define ITEM_STAT_DURABILITY_ADD 801 +#define ITEM_STAT_PROGRESS_ADD 802 +#define ITEM_STAT_PROGRESS_MOD 803 +#define ITEM_STAT_SUCCESS_MOD 804 +#define ITEM_STAT_CRIT_SUCCESS_MOD 805 +#define ITEM_STAT_EX_DURABILITY_MOD 806 +#define ITEM_STAT_EX_DURABILITY_ADD 807 +#define ITEM_STAT_EX_PROGRESS_MOD 808 +#define ITEM_STAT_EX_PROGRESS_ADD 809 +#define ITEM_STAT_EX_SUCCESS_MOD 810 +#define ITEM_STAT_EX_CRIT_SUCCESS_MOD 811 +#define ITEM_STAT_EX_CRIT_FAILURE_MOD 812 +#define ITEM_STAT_RARE_HARVEST_CHANCE 813 +#define ITEM_STAT_MAX_CRAFTING 814 +#define ITEM_STAT_COMPONENT_REFUND 815 +#define ITEM_STAT_BOUNTIFUL_HARVEST 816 + +#define ITEM_STAT_UNCONTESTED_PARRY 850 +#define ITEM_STAT_UNCONTESTED_BLOCK 851 +#define ITEM_STAT_UNCONTESTED_DODGE 852 +#define ITEM_STAT_UNCONTESTED_RIPOSTE 853 + +#pragma pack(1) +struct ItemStatsValues{ + sint16 str; + sint16 sta; + sint16 agi; + sint16 wis; + sint16 int_; + sint16 vs_slash; + sint16 vs_crush; + sint16 vs_pierce; + sint16 vs_heat; + sint16 vs_cold; + sint16 vs_magic; + sint16 vs_mental; + sint16 vs_divine; + sint16 vs_disease; + sint16 vs_poison; + sint16 health; + sint16 power; + sint8 concentration; + sint16 ability_modifier; + sint16 criticalmitigation; + sint16 extrashieldblockchance; + sint16 beneficialcritchance; + sint16 critbonus; + sint16 potency; + sint16 hategainmod; + sint16 abilityreusespeed; + sint16 abilitycastingspeed; + sint16 abilityrecoveryspeed; + sint16 spellreusespeed; + sint16 spellmultiattackchance; + sint16 dps; + sint16 attackspeed; + sint16 multiattackchance; + sint16 flurry; + sint16 aeautoattackchance; + sint16 strikethrough; + sint16 accuracy; + sint16 offensivespeed; + float uncontested_parry; + float uncontested_block; + float uncontested_dodge; + float uncontested_riposte; + + +}; +struct ItemCore{ + int32 item_id; + sint32 soe_id; + int32 bag_id; + sint32 inv_slot_id; + sint16 slot_id; + int8 index; + int16 icon; + int16 count; + int8 tier; + int8 num_slots; + int32 unique_id; + int8 num_free_slots; + int16 recommended_level; +}; +#pragma pack() +struct ItemStat{ + string stat_name; + int8 stat_type; + sint16 stat_subtype; + int16 stat_type_combined; + float value; +}; +struct ItemSet{ + int32 item_id; + int32 item_crc; + int16 item_icon; + int16 item_stack_size; + int32 item_list_color; + +}; +struct Classifications{ + int32 classification_id; //classifications MJ + string classification_name; +}; +struct ItemLevelOverride{ + int8 adventure_class; + int8 tradeskill_class; + int16 level; +}; +struct ItemClass{ + int8 adventure_class; + int8 tradeskill_class; + int16 level; +}; +struct ItemAppearance{ + int16 type; + int8 red; + int8 green; + int8 blue; + int8 highlight_red; + int8 highlight_green; + int8 highlight_blue; +}; +class PlayerItemList; +class Item{ +public: + #pragma pack(1) + struct ItemStatString{ + EQ2_8BitString stat_string; + }; + struct Generic_Info{ + int8 show_name; + int8 creator_flag; + int16 item_flags; + int16 item_flags2; + int8 condition; + int32 weight; // num/10 + int32 skill_req1; + int32 skill_req2; + int16 skill_min; + int8 item_type; //0=normal, 1=weapon, 2=range, 3=armor, 4=shield, 5=bag, 6=scroll, 7=recipe, 8=food, 9=bauble, 10=house item, 11=thrown, 12=house container, 13=adormnet, 14=??, 16=profile, 17=patter set, 18=item set, 19=book, 20=decoration, 21=dungeon maker, 22=marketplace + int16 appearance_id; + int8 appearance_red; + int8 appearance_green; + int8 appearance_blue; + int8 appearance_highlight_red; + int8 appearance_highlight_green; + int8 appearance_highlight_blue; + int8 collectable; + int32 offers_quest_id; + int32 part_of_quest_id; + int16 max_charges; + int8 display_charges; + int64 adventure_classes; + int64 tradeskill_classes; + int16 adventure_default_level; + int16 tradeskill_default_level; + int8 usable; + int8 harvest; + }; + struct Armor_Info { + int16 mitigation_low; + int16 mitigation_high; + }; + struct Adornment_Info { + float duration; + int16 item_types; + int16 slot_type; + }; + struct Weapon_Info { + int16 wield_type; + int16 damage_low1; + int16 damage_high1; + int16 damage_low2; + int16 damage_high2; + int16 damage_low3; + int16 damage_high3; + int16 delay; + float rating; + }; + struct Shield_Info { + Armor_Info armor_info; + }; + struct Ranged_Info { + Weapon_Info weapon_info; + int16 range_low; + int16 range_high; + }; + struct Bag_Info { + int8 num_slots; + int16 weight_reduction; + }; + struct Food_Info{ + int8 type; //0=water, 1=food + int8 level; + float duration; + int8 satiation; + }; + struct Bauble_Info{ + int16 cast; + int16 recovery; + int32 duration; + float recast; + int8 display_slot_optional; + int8 display_cast_time; + int8 display_bauble_type; + float effect_radius; + int32 max_aoe_targets; + int8 display_until_cancelled; + }; + struct Book_Info{ + int8 language; + EQ2_16BitString author; + EQ2_16BitString title; + }; + struct Book_Info_Pages { + int8 page; + EQ2_16BitString page_text; + int8 page_text_valign; + int8 page_text_halign; + }; + struct Skill_Info{ + int32 spell_id; + int32 spell_tier; + }; + struct HouseItem_Info{ + int32 status_rent_reduction; + float coin_rent_reduction; + int8 house_only; + }; + struct HouseContainer_Info{ + int64 allowed_types; + int8 num_slots; + int8 broker_commission; + int8 fence_commission; + }; + struct RecipeBook_Info{ + vector recipes; + int8 uses; + }; + struct ItemSet_Info{ + int32 item_id; + int32 item_crc; + int16 item_icon; + int32 item_stack_size; + int32 item_list_color; + + }; + struct Thrown_Info{ + sint32 range; + sint32 damage_modifier; + float hit_bonus; + int32 damage_type; + }; + struct ItemEffect{ + EQ2_16BitString effect; + int8 percentage; + int8 subbulletflag; + }; + struct BookPage { + int8 page; + EQ2_16BitString page_text; + int8 valign; + int8 halign; + }; + #pragma pack() + Item(); + Item(Item* in_item); + ~Item(); + string lowername; + string name; + string description; + int16 stack_count; + int32 sell_price; + int32 sell_status; + int32 max_sell_value; + bool save_needed; + int8 weapon_type; + string adornment; + string creator; + int32 adorn0; + int32 adorn1; + int32 adorn2; + vectorclassifications; //classifications MJ + vector item_stats; + vector item_sets; + vector item_string_stats; + vector item_level_overrides; + vector item_effects; + vector book_pages; + Generic_Info generic_info; + Weapon_Info* weapon_info; + Ranged_Info* ranged_info; + Armor_Info* armor_info; + Adornment_Info* adornment_info; + Bag_Info* bag_info; + Food_Info* food_info; + Bauble_Info* bauble_info; + Book_Info* book_info; + Book_Info_Pages* book_info_pages; + HouseItem_Info* houseitem_info; + HouseContainer_Info* housecontainer_info; + Skill_Info* skill_info; + RecipeBook_Info* recipebook_info; + ItemSet_Info* itemset_info; + Thrown_Info* thrown_info; + vector slot_data; + ItemCore details; + int32 spell_id; + int8 spell_tier; + string item_script; + + void AddEffect(string effect, int8 percentage, int8 subbulletflag); + void AddBookPage(int8 page, string page_text,int8 valign, int8 halign); + int32 GetMaxSellValue(); + void SetMaxSellValue(int32 val); + void SetItem(Item* old_item); + int16 GetOverrideLevel(int8 adventure_class, int8 tradeskill_class); + void AddLevelOverride(int8 adventure_class, int8 tradeskill_class, int16 level); + void AddLevelOverride(ItemLevelOverride* class_); + bool CheckClassLevel(int8 adventure_class, int8 tradeskill_class, int16 level); + bool CheckClass(int8 adventure_class, int8 tradeskill_class); + bool CheckLevel(int8 adventure_class, int8 tradeskill_class, int16 level); + void SetAppearance(int16 type, int8 red, int8 green, int8 blue, int8 highlight_red, int8 highlight_green, int8 highlight_blue); + void SetAppearance(ItemAppearance* appearance); + void AddStat(ItemStat* in_stat); + void AddSet(ItemSet* in_set); + void AddStatString(ItemStatString* in_stat); + void AddStat(int8 type, int16 subtype, float value, char* name = 0); + void AddSet(int32 item_id, int32 item_crc, int16 item_icon, int32 item_stack_size, int32 item_list_color); + void SetWeaponType(int8 type); + int8 GetWeaponType(); + bool HasSlot(int8 slot, int8 slot2 = 255); + bool HasAdorn0(); + bool HasAdorn1(); + bool HasAdorn2(); + bool IsNormal(); + bool IsWeapon(); + bool IsArmor(); + bool IsRanged(); + bool IsBag(); + bool IsFood(); + bool IsBauble(); + bool IsSkill(); + bool IsHouseItem(); + bool IsHouseContainer(); + bool IsShield(); + bool IsAdornment(); + bool IsAmmo(); + bool IsBook(); + bool IsChainArmor(); + bool IsClothArmor(); + bool IsCollectable(); + bool IsCloak(); + bool IsCrushWeapon(); + bool IsFoodFood(); + bool IsFoodDrink(); + bool IsJewelry(); + bool IsLeatherArmor(); + bool IsMisc(); + bool IsPierceWeapon(); + bool IsPlateArmor(); + bool IsPoison(); + bool IsPotion(); + bool IsRecipeBook(); + bool IsSalesDisplay(); + bool IsSlashWeapon(); + bool IsSpellScroll(); + bool IsTinkered(); + bool IsTradeskill(); + bool IsThrown(); + bool IsHarvest(); + void SetItemScript(string name); + const char* GetItemScript(); + int32 CalculateRepairCost(); + + void SetItemType(int8 in_type); + void serialize(PacketStruct* packet, bool show_name = false, Player* player = 0, int16 packet_type = 0, int8 subtype = 0, bool loot_item = false); + EQ2Packet* serialize(int16 version, bool show_name = false, Player* player = 0, bool include_twice = true, int16 packet_type = 0, int8 subtype = 0, bool merchant_item = false, bool loot_item = false); + PacketStruct* PrepareItem(int16 version, bool merchant_item = false, bool loot_item = false); + bool CheckFlag(int32 flag); + bool CheckFlag2(int32 flag); + void AddSlot(int8 slot_id); + void SetSlots(int32 slots); + bool needs_deletion; +}; +class MasterItemList{ +public: + ~MasterItemList(); + map items; + + Item* GetItem(int32 id); + Item* GetItemByName(const char *name); + ItemStatsValues* CalculateItemBonuses(int32 item_id, Entity* entity = 0); + ItemStatsValues* CalculateItemBonuses(Item* desc, Entity* entity = 0, ItemStatsValues* values = 0); + vector* GetItems(string name, int32 itype, int32 ltype, int32 btype, int64 minprice, int64 maxprice, int8 minskill, int8 maxskill, string seller, string adornment, int8 mintier, int8 maxtier, int16 minlevel, int16 maxlevel, sint8 itemclass); + vector* GetItems(map criteria); + void AddItem(Item* item); + bool IsBag(int32 item_id); + void RemoveAll(); + static int32 NextUniqueID(); + static void ResetUniqueID(int32 new_id); + static int32 next_unique_id; +}; +class PlayerItemList { +public: + PlayerItemList(); + ~PlayerItemList(); +// int16 number; + map indexed_items; + map > items; +// map< int8, Item* > inv_items; +// map< int8, Item* > bank_items; + bool SharedBankAddAllowed(Item* item); + vector* GetItemsFromBagID(sint32 bag_id); + vector* GetItemsInBag(Item* bag); + Item* GetBag(int8 inventory_slot, bool lock = true); + bool HasItem(int32 id, bool include_bank = false); + Item* GetItemFromIndex(int32 index); + void MoveItem(Item* item, sint32 inv_slot, int16 slot, bool erase_old = true); + bool MoveItem(sint32 to_bag_id, int16 from_index, sint8 to, int8 charges); + Item* GetItemFromUniqueID(int32 item_id, bool include_bank = false, bool lock = true); + Item* GetItemFromID(int32 item_id, int8 count = 0, bool include_bank = false, bool lock = true); + bool AssignItemToFreeSlot(Item* item); + int16 GetNumberOfFreeSlots(); + int16 GetNumberOfItems(); + bool HasFreeSlot(); + bool HasFreeBagSlot(); + void DestroyItem(int16 index); + Item* CanStack(Item* item, bool include_bank = false); + + void RemoveItem(Item* item, bool delete_item = false); + void AddItem(Item* item); + + Item* GetItem(sint32 bag_slot, int16 slot); + + EQ2Packet* serialize(Player* player, int16 version); + uchar* xor_packet; + uchar* orig_packet; + map* GetAllItems(); + bool HasFreeBankSlot(); + int8 FindFreeBankSlot(); + + ///Get the first free slot and store them in the provided variables + ///Will contain the bag id of the first free spot + ///Will contain the slot id of the first free slot + ///True if a free slot was found + bool GetFirstFreeSlot(sint32* bag_id, sint16* slot); + + /// Get the first free slot in the bank and store it in the provided variables + /// Will contain the bag id of the first free bank slot + /// Will contain the slot id of the first free bank slot + /// True if a free bank slot was found + bool GetFirstFreeBankSlot(sint32* bag_id, sint16* slot); + + /// + Item* GetBankBag(int8 inventory_slot, bool lock = true); + + /// + bool AddOverflowItem(Item* item); + + Item* GetOverflowItem(); + + void RemoveOverflowItem(Item* item); + + vector* GetOverflowItemList(); + +private: + void AddItemToPacket(PacketStruct* packet, Player* player, Item* item, int16 i, bool overflow = false); + void Stack(Item* orig_item, Item* item); + Mutex MPlayerItems; + int16 packet_count; + vector overflowItems; +}; +class EquipmentItemList{ +public: + EquipmentItemList(); + EquipmentItemList(const EquipmentItemList& list); + ~EquipmentItemList(); + Item* items[NUM_SLOTS]; + + vector* GetAllEquippedItems(); + + bool HasItem(int32 id); + int8 GetNumberOfItems(); + Item* GetItemFromUniqueID(int32 item_id); + Item* GetItemFromItemID(int32 item_id); + void SetItem(int8 slot_id, Item* item); + void RemoveItem(int8 slot, bool delete_item = false); + Item* GetItem(int8 slot_id); + bool AddItem(int8 slot, Item* item); + bool CheckEquipSlot(Item* tmp, int8 slot); + bool CanItemBeEquippedInSlot(Item* tmp, int8 slot); + int8 GetFreeSlot(Item* tmp, int8 slot_id = 255); + int8 GetSlotByItem(Item* item); + ItemStatsValues* CalculateEquipmentBonuses(Entity* entity = 0); + EQ2Packet* serialize(int16 version, Player* player = 0); + uchar* xor_packet; + uchar* orig_packet; +private: + Mutex MEquipmentItems; +}; + +#endif + diff --git a/EQ2/source/WorldServer/Items/ItemsDB.cpp b/EQ2/source/WorldServer/Items/ItemsDB.cpp new file mode 100644 index 000000000..2bd615881 --- /dev/null +++ b/EQ2/source/WorldServer/Items/ItemsDB.cpp @@ -0,0 +1,1224 @@ +/* + EQ2Emulator: Everquest II Server Emulator + Copyright (C) 2007 EQ2EMulator Development Team (http://www.eq2emulator.net) + + This file is part of EQ2Emulator. + + EQ2Emulator is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + EQ2Emulator is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with EQ2Emulator. If not, see . +*/ +#ifdef WIN32 + #include + #include +#endif +#include +#include +#include "../../common/Log.h" +#include "../WorldDatabase.h" +#include "Items.h" +#include "../World.h" + +extern World world; + +void WorldDatabase::LoadDataFromRow(MYSQL_ROW row, Item* item) +{ + LogWrite(ITEM__DEBUG, 5, "Items", "\tSetting details for item ID: %u", strtoul(row[0], NULL, 0)); + item->details.item_id = strtoul(row[0], NULL, 0); + int8 size = strlen(row[1]); + + if(size > 63) + size = 63; + + item->name = string(row[1]); + item->lowername = ToLower(item->name); + item->details.icon = atoi(row[2]); + item->details.count = atoi(row[3]); + item->details.tier = atoi(row[4]); + item->generic_info.weight = atoi(row[5]); + + if(row[6] && strlen(row[6])) + item->description = string(row[6]); + + item->generic_info.show_name = atoi(row[7]); + + if(atoi(row[8])) + item->generic_info.item_flags += ATTUNEABLE; + + if(atoi(row[9])) + item->generic_info.item_flags += ARTIFACT; + + if(atoi(row[10])) + item->generic_info.item_flags += LORE; + + if(atoi(row[11])) + item->generic_info.item_flags += TEMPORARY; + + if(atoi(row[12])) + item->generic_info.item_flags += NO_TRADE; + + if(atoi(row[13])) + item->generic_info.item_flags += NO_VALUE; + + if(atoi(row[14])) + item->generic_info.item_flags += NO_ZONE; + + if(atoi(row[15])) + item->generic_info.item_flags += NO_DESTROY; + + if(atoi(row[16])) + item->generic_info.item_flags += CRAFTED; + + if(atoi(row[17])) + item->generic_info.item_flags += GOOD_ONLY; + + if(atoi(row[18])) + item->generic_info.item_flags += EVIL_ONLY; + + if(atoul(row[19]) == 0) + item->generic_info.skill_req1 = 0xFFFFFFFF; + else + item->generic_info.skill_req1 = atoul(row[19]); + + if(atoul(row[20]) == 0) + item->generic_info.skill_req2 = 0xFFFFFFFF; + else + item->generic_info.skill_req2 = atoul(row[20]); + + item->generic_info.skill_min = atoi(row[21]); + + if(atoul(row[23])>0) + item->SetSlots(atoul(row[23])); + + item->sell_price = atoul(row[24]); + item->stack_count = atoi(row[25]); + item->generic_info.collectable = atoi(row[26]); + item->generic_info.offers_quest_id = atoul(row[27]); + item->generic_info.part_of_quest_id = atoul(row[28]); + item->details.recommended_level = atoi(row[29]); + item->generic_info.adventure_default_level = atoi(row[30]); + item->generic_info.max_charges = atoi(row[31]); + item->generic_info.display_charges = atoi(row[32]); + item->generic_info.tradeskill_default_level = atoi(row[33]); + + #ifdef WIN32 + item->generic_info.adventure_classes = _strtoui64(row[34], NULL, 10); + item->generic_info.tradeskill_classes = _strtoui64(row[35], NULL, 10); + #else + item->generic_info.adventure_classes = strtoull(row[34], 0, 10); + item->generic_info.tradeskill_classes = strtoull(row[35], 0, 10); + #endif + + if(row[36] && strlen(row[36])){ + item->SetItemScript(row[36]); + LogWrite(ITEM__DEBUG, 5, "LUA", "\tLoading LUA Item Script: '%s'", item->item_script.c_str()); + } + + if(item->generic_info.max_charges > 0) + item->details.count = item->generic_info.max_charges; + + if(item->details.count == 0) + item->details.count = 1; + + item->generic_info.usable = atoi(row[37]); + item->details.soe_id = atoi(row[39]); +} + +// handle new database class til all functions are converted +void WorldDatabase::LoadDataFromRow(DatabaseResult* result, Item* item) +{ + LogWrite(ITEM__DEBUG, 5, "Items", "\tSetting details for item ID: %i", result->GetInt32Str("id")); + + item->details.item_id = result->GetInt32Str("id"); + int8 size = strlen(result->GetStringStr("name")); + + if(size > 63) + size = 63; + + item->name = string(result->GetStringStr("name")); + item->lowername = ToLower(item->name); + item->details.icon = result->GetInt16Str("icon"); + item->details.count = result->GetInt16Str("count"); + item->details.tier = result->GetInt8Str("tier"); + item->generic_info.weight = result->GetInt32Str("weight"); + + if( strlen(result->GetStringStr("description")) > 0 ) + item->description = string(result->GetStringStr("description")); + + item->generic_info.show_name = result->GetInt8Str("show_name"); + + if( result->GetInt8Str("attuneable") == 1 ) + item->generic_info.item_flags += ATTUNEABLE; + + if( result->GetInt8Str("artifact") == 1 ) + item->generic_info.item_flags += ARTIFACT; + + if( result->GetInt8Str("lore") == 1 ) + item->generic_info.item_flags += LORE; + + if( result->GetInt8Str("temporary") == 1 ) + item->generic_info.item_flags += TEMPORARY; + + if( result->GetInt8Str("notrade") == 1 ) + item->generic_info.item_flags += NO_TRADE; + + if( result->GetInt8Str("novalue") == 1 ) + item->generic_info.item_flags += NO_VALUE; + + if( result->GetInt8Str("nozone") == 1 ) + item->generic_info.item_flags += NO_ZONE; + + if( result->GetInt8Str("nodestroy") == 1 ) + item->generic_info.item_flags += NO_DESTROY; + + if( result->GetInt8Str("crafted") == 1 ) + item->generic_info.item_flags += CRAFTED; + + if( result->GetInt8Str("good_only") == 1 ) + item->generic_info.item_flags += GOOD_ONLY; + + if( result->GetInt8Str("evil_only") == 1 ) + item->generic_info.item_flags += EVIL_ONLY; + + // add more Flags/Flags2 here + + if (result->GetInt8Str("lore_equip") == 1) + item->generic_info.item_flags += LORE_EQUIP; + + if (result->GetInt8Str("flags_16384") == 1) + item->generic_info.item_flags += FLAGS_16384; + + if (result->GetInt8Str("flags_32768") == 1) + item->generic_info.item_flags += FLAGS_32768; + + if (result->GetInt8Str("ornate") == 1) + item->generic_info.item_flags2 += ORNATE; + + if (result->GetInt8Str("heirloom") == 1) + item->generic_info.item_flags2 += HEIRLOOM; + + if (result->GetInt8Str("appearance_only") == 1) + item->generic_info.item_flags2 += APPEARANCE_ONLY; + + if (result->GetInt8Str("unlocked") == 1) + item->generic_info.item_flags2 += UNLOCKED; + + if (result->GetInt8Str("reforged") == 1) + item->generic_info.item_flags2 += REFORGED; + + if (result->GetInt8Str("norepair") == 1) + item->generic_info.item_flags2 += NO_REPAIR; + + if (result->GetInt8Str("etheral") == 1) + item->generic_info.item_flags2 += ETHERAL; + + if (result->GetInt8Str("refined") == 1) + item->generic_info.item_flags2 += REFINED; + + if (result->GetInt8Str("flags2_256") == 1) + item->generic_info.item_flags2 += FLAGS2_256; + + + + if( result->GetInt32Str("skill_id_req") == 0 ) + item->generic_info.skill_req1 = 0xFFFFFFFF; + else + item->generic_info.skill_req1 = result->GetInt32Str("skill_id_req"); + + if( result->GetInt32Str("skill_id_req2") == 0 ) + item->generic_info.skill_req2 = 0xFFFFFFFF; + else + item->generic_info.skill_req2 = result->GetInt32Str("skill_id_req2"); + + item->generic_info.skill_min = result->GetInt16Str("skill_min"); + + if( result->GetInt32Str("slots") > 0) + item->SetSlots(result->GetInt32Str("slots")); + + item->sell_price = result->GetInt32Str("sell_price"); + item->sell_status = result->GetInt32Str("sell_status_amount"); + item->stack_count = result->GetInt16Str("stack_count"); + item->generic_info.collectable = result->GetInt8Str("collectable"); + item->generic_info.offers_quest_id = result->GetInt32Str("offers_quest_id"); + item->generic_info.part_of_quest_id = result->GetInt32Str("part_of_quest_id"); + item->details.recommended_level = result->GetInt16Str("recommended_level"); + item->generic_info.adventure_default_level = result->GetInt16Str("adventure_default_level"); + item->generic_info.max_charges = result->GetInt16Str("max_charges"); + item->generic_info.display_charges = result->GetInt8Str("display_charges"); + item->generic_info.tradeskill_default_level = result->GetInt16Str("tradeskill_default_level"); + +#ifdef WIN32 + item->generic_info.adventure_classes = result->GetInt64Str("adventure_classes"); + item->generic_info.tradeskill_classes = result->GetInt64Str("tradeskill_classes"); +#else + item->generic_info.adventure_classes = result->GetInt64Str("adventure_classes"); + item->generic_info.tradeskill_classes = result->GetInt64Str("tradeskill_classes"); +#endif + + if( !result->IsNullStr("lua_script") && strlen(result->GetStringStr("lua_script")) > 0 ) + { + item->SetItemScript(string(result->GetStringStr("lua_script"))); + LogWrite(ITEM__DEBUG, 5, "LUA", "--Loading LUA Item Script: '%s'", item->item_script.c_str()); + } + + if(item->generic_info.max_charges > 0) + item->details.count = item->generic_info.max_charges; + + if(item->details.count == 0) + item->details.count = 1; + + item->generic_info.usable = result->GetInt8Str("usable"); + item->details.soe_id = result->GetSInt32Str("soe_item_id"); + + item->generic_info.harvest = result->GetInt8Str("harvest"); +} + +int32 WorldDatabase::LoadSkillItems() +{ + Query query; + MYSQL_ROW row; + MYSQL_RES* result = query.RunQuery2(Q_SELECT, "SELECT item_id, spell_id, spell_tier FROM item_details_skill"); + int32 total = 0; + int32 id = 0; + + if(result) + { + while(result && (row = mysql_fetch_row(result))) + { + id = atoul(row[0]); + Item* item = master_item_list.GetItem(id); + + if(item) + { + LogWrite(ITEM__DEBUG, 5, "Items", "\tLoading Skill for item_id %u", id); + LogWrite(ITEM__DEBUG, 5, "Items", "\ttype: %i, spell: %i, tier: %i", ITEM_TYPE_SKILL, atoi(row[1]), atoi(row[2])); + item->SetItemType(ITEM_TYPE_SKILL); + item->skill_info->spell_id = atoul(row[1]); + item->skill_info->spell_tier = atoi(row[2]); + total++; + } + else + LogWrite(ITEM__ERROR, 0, "Items", "Error loading `item_details_skill`, ID: %i", id); + } + } + return total; +} + +int32 WorldDatabase::LoadShields() +{ + Query query; + MYSQL_ROW row; + MYSQL_RES* result = query.RunQuery2(Q_SELECT, "SELECT item_id, mitigation_low, mitigation_high FROM item_details_shield"); + int32 total = 0; + int32 id = 0; + + if(result) + { + while(result && (row = mysql_fetch_row(result))) + { + id = strtoul(row[0], NULL, 0); + Item* item = master_item_list.GetItem(id); + + if(item) + { + LogWrite(ITEM__DEBUG, 5, "Items", "\tItem Shield for item_id: %u", id); + LogWrite(ITEM__DEBUG, 5, "Items", "\ttype: %i, mit_low: %i, mit_high: %i", ITEM_TYPE_SHIELD, atoi(row[1]), atoi(row[2])); + item->SetItemType(ITEM_TYPE_SHIELD); + item->armor_info->mitigation_low = atoi(row[1]); + item->armor_info->mitigation_high = atoi(row[2]); + total++; + } + else + LogWrite(ITEM__ERROR, 0, "Items", "Error loading `item_details_shield`, ID: %i", id); + } + } + return total; +} +int32 WorldDatabase::LoadAdornments() +{ + Query query; + MYSQL_ROW row; + MYSQL_RES* result = query.RunQuery2(Q_SELECT, "SELECT item_id, duration, item_types,slot_type FROM item_details_adornments"); + int32 total = 0; + int32 id = 0; + + if (result) + { + while (result && (row = mysql_fetch_row(result))) + { + id = strtoul(row[0], NULL, 0); + Item* item = master_item_list.GetItem(id); + + if (item) + { + //LogWrite(ITEM__DEBUG, 0, "Items", "\tItem Adornment for item_id: %u", id); + //LogWrite(ITEM__DEBUG, 0, "Items", "\ttype: %i, Duration: %i, item_types_: %i, slot_type: %i", ITEM_TYPE_ADORNMENT, atoi(row[1]), atoi(row[2]), atoi(row[3])); + item->SetItemType(ITEM_TYPE_ADORNMENT); + item->adornment_info->duration = atof(row[1]); + item->adornment_info->item_types = atoi(row[2]); + item->adornment_info->slot_type = atoi(row[3]); + //LogWrite(ITEM__DEBUG, 0, "Items", "\ttype: %i, Duration: %i, item_types_: %i, slot_type: %i",item->generic_info.item_type, item->adornment_info->duration, item->adornment_info->item_types, item->adornment_info->slot_type); + total++; + } + else + LogWrite(ITEM__ERROR, 0, "Items", "Error loading `item_details_shield`, ID: %i", id); + } + } + return total; +} +int32 WorldDatabase::LoadClassifications() +{ + int32 total = 0; + int32 id = 0; + return total; +} + +int32 WorldDatabase::LoadBaubles() +{ + Query query; + MYSQL_ROW row; + MYSQL_RES* result = query.RunQuery2(Q_SELECT, "SELECT item_id, cast, recovery, duration, recast, display_slot_optional, display_cast_time, display_bauble_type, effect_radius, max_aoe_targets, display_until_cancelled FROM item_details_bauble"); + int32 total = 0; + int32 id = 0; + + if(result) + { + while(result && (row = mysql_fetch_row(result))) + { + id = strtoul(row[0], NULL, 0); + Item* item = master_item_list.GetItem(id); + + if(item) + { + LogWrite(ITEM__DEBUG, 5, "Items", "\tItem Bauble for item_id %u", id); + LogWrite(ITEM__DEBUG, 5, "Items", "\ttype: %i, %i, %i, %i, %i, %i, %i, %i, %i, %i, %i", ITEM_TYPE_BAUBLE, atoi(row[1]), atoi(row[2]), atoi(row[3]), atoi(row[4]), atoi(row[5]), atoi(row[6]), atof(row[7]), atoi(row[8]), atoi(row[9]), atoi(row[10])); + item->SetItemType(ITEM_TYPE_BAUBLE); + item->bauble_info->cast = atoi(row[1]); + item->bauble_info->recovery = atoi(row[2]); + item->bauble_info->duration = atoi(row[3]); + item->bauble_info->recast = atoi(row[4]); + item->bauble_info->display_slot_optional = atoi(row[5]); + item->bauble_info->display_cast_time = atoi(row[6]); + item->bauble_info->display_bauble_type = atoi(row[7]); + item->bauble_info->effect_radius = atof(row[8]); + item->bauble_info->max_aoe_targets = atoi(row[9]); + item->bauble_info->display_until_cancelled = atoi(row[10]); + total++; + } + else + LogWrite(ITEM__ERROR, 0, "Items", "Error loading `item_details_bauble`, ID: %i", id); + } + } + return total; +} + +int32 WorldDatabase::LoadBooks() +{ + DatabaseResult result; + int32 total = 0; + int32 id = 0; + + if( database_new.Select(&result, "SELECT item_id, language, author, title FROM item_details_book") ) + { + while( result.Next() ) + { + id = result.GetInt32Str("item_id"); + Item* item = master_item_list.GetItem(id); + + if(item) + { + LogWrite(ITEM__DEBUG, 5, "Items", "\tItem Book for item_id %u", id); + LogWrite(ITEM__DEBUG, 5, "Items", "\ttype: %i, %i, %s, %s", + ITEM_TYPE_BOOK, + result.GetInt8Str("language"), + result.GetStringStr("author"), + result.GetStringStr("title")); + + item->SetItemType(ITEM_TYPE_BOOK); + item->book_info->language = result.GetInt8Str("language"); + item->book_info->author.data = result.GetStringStr("author"); + item->book_info->author.size = item->book_info->author.data.length(); + item->book_info->title.data = result.GetStringStr("title"); + item->book_info->title.size = item->book_info->title.data.length(); + + total++; + } + else + LogWrite(ITEM__ERROR, 0, "Items", "Error loading `item_details_book`, ID: %i", id); + } + } + + return total; +} +int32 WorldDatabase::LoadItemsets() +{ + DatabaseResult result; + int32 total = 0; + int32 id = 0; + + if (database_new.Select(&result, "SELECT id, itemset_item_id, item_id, item_icon,item_stack_size,item_list_color,language_type FROM item_details_itemset")) + { + while (result.Next()) + { + id = result.GetInt32Str("itemset_item_id"); + Item* item = master_item_list.GetItem(id); + + if (item) + { + item->SetItemType(ITEM_TYPE_ITEMCRATE); + //int32 item_id = result.GetInt32Str("item_id"); + item->AddSet(result.GetInt32Str("item_id"),0, result.GetInt16Str("item_icon"), result.GetInt16Str("item_stack_size"), result.GetInt32Str("item_list_color")); + + + total++; + } + else + LogWrite(ITEM__ERROR, 0, "Item Set Crate Items", "Error loading `item_details_Items`, ID: %i", id); + } + } + + return total; +} +int32 WorldDatabase::LoadHouseItem() +{ + Query query; + MYSQL_ROW row; + MYSQL_RES* result = query.RunQuery2(Q_SELECT, "SELECT item_id, rent_reduction, status_rent_reduction, coin_rent_reduction, house_only FROM item_details_house"); + int32 total = 0; + int32 id = 0; + + if(result) + { + while(result && (row = mysql_fetch_row(result))) + { + id = strtoul(row[0], NULL, 0); + Item* item = master_item_list.GetItem(id); + + if(item) + { + LogWrite(ITEM__DEBUG, 5, "Items", "\tItem HouseItem for item_id %u", id); + LogWrite(ITEM__DEBUG, 5, "Items", "\ttype: %i, %i, %u, %.2f, %u", ITEM_TYPE_HOUSE, atoul(row[1]), atoi(row[2]), atof(row[3]), atoul(row[4])); + item->SetItemType(ITEM_TYPE_HOUSE); + item->houseitem_info->status_rent_reduction = atoi(row[2]); + item->houseitem_info->coin_rent_reduction = atof(row[3]); + item->houseitem_info->house_only = atoi(row[4]); + total++; + } + else + LogWrite(ITEM__ERROR, 0, "Items", "Error loading `item_details_house`, ID: %i", id); + } + } + return total; +} + +int32 WorldDatabase::LoadRecipeBookItems() +{ + Query query; + MYSQL_ROW row; + MYSQL_RES* result = query.RunQuery2(Q_SELECT, "SELECT item_id, name FROM item_details_recipe_items"); + int32 total = 0; + int32 id = 0; + + if (result) + { + while(result && (row = mysql_fetch_row(result))) + { + id = strtoul(row[0], NULL, 0); + Item* item = master_item_list.GetItem(id); + + if(item) + { + LogWrite(ITEM__DEBUG, 5, "Items", "\tRecipe Book for item_id %u", id); + LogWrite(ITEM__DEBUG, 5, "Items", "\tType: %i, '%s'", ITEM_TYPE_RECIPE, row[1]); + item->SetItemType(ITEM_TYPE_RECIPE); + item->recipebook_info->recipes.push_back(string(row[1])); + total++; + } + else + LogWrite(ITEM__ERROR, 0, "Items", "Error loading `item_details_recipe_items`, ID: %u", id); + } + } + return total; +} + +int32 WorldDatabase::LoadHouseContainers(){ + DatabaseResult result; + int32 total = 0; + int32 id = 0; + + if( database_new.Select(&result, "SELECT item_id, num_slots, allowed_types, broker_commission, fence_commission FROM item_details_house_container") ) + { + while (result.Next() ) + { + id = result.GetInt32Str("item_id"); + Item* item = master_item_list.GetItem(id); + + if (item) + { + LogWrite(ITEM__DEBUG, 5, "Items", "\tHouse Container for item_id %u", id); + LogWrite(ITEM__DEBUG, 5, "Items", "\tType: %i, '%i', '%u', '%i', '%i'", ITEM_TYPE_RECIPE, result.GetInt8Str("num_slots"), result.GetInt64Str("allowed_types"), result.GetInt8Str("broker_commission"), result.GetInt8Str("fence_commission")); + + item->SetItemType(ITEM_TYPE_HOUSE_CONTAINER); + item->housecontainer_info->num_slots = result.GetInt8Str("num_slots"); + item->housecontainer_info->allowed_types = result.GetInt64Str("allowed_types"); + item->housecontainer_info->broker_commission = result.GetInt8Str("broker_commission"); + item->housecontainer_info->fence_commission = result.GetInt8Str("fence_commission"); + + total++; + } + else + LogWrite(ITEM__ERROR, 0, "Items", "Error loading `item_details_house_container`, ID: %u", id); + } + } + return total; +} + +int32 WorldDatabase::LoadArmor() +{ + Query query; + MYSQL_ROW row; + MYSQL_RES* result = query.RunQuery2(Q_SELECT, "SELECT item_id, mitigation_low, mitigation_high FROM item_details_armor"); + int32 total = 0; + int32 id = 0; + + if(result) + { + while(result && (row = mysql_fetch_row(result))) + { + id = strtoul(row[0], NULL, 0); + Item* item = master_item_list.GetItem(id); + if(item) + { + LogWrite(ITEM__DEBUG, 5, "Items", "\tItem Armor for item_id %u", id); + LogWrite(ITEM__DEBUG, 5, "Items", "\ttype: %i, mit_low: %i, mit_high: %i", ITEM_TYPE_ARMOR, atoi(row[1]), atoi(row[2])); + item->SetItemType(ITEM_TYPE_ARMOR); + item->armor_info->mitigation_low = atoi(row[1]); + item->armor_info->mitigation_high = atoi(row[2]); + total++; + } + else + LogWrite(ITEM__ERROR, 0, "Items", "Error loading `item_details_armor`, ID: %i", id); + } + } + return total; +} + +int32 WorldDatabase::LoadBags() +{ + Query query; + MYSQL_ROW row; + MYSQL_RES* result = query.RunQuery2(Q_SELECT, "SELECT item_id, num_slots, weight_reduction FROM item_details_bag"); + int32 total = 0; + int32 id = 0; + if(result) + { + while(result && (row = mysql_fetch_row(result))) + { + id = strtoul(row[0], NULL, 0); + Item* item = master_item_list.GetItem(id); + + if(item) + { + LogWrite(ITEM__DEBUG, 5, "Items", "\tItem Bag for item_id %u", id); + LogWrite(ITEM__DEBUG, 5, "Items", "\ttype: %i, slots: %i, wt_red: %i", id, ITEM_TYPE_BAG, atoi(row[1]), atoi(row[2])); + item->SetItemType(ITEM_TYPE_BAG); + item->details.num_slots = atoi(row[1]); + item->details.num_free_slots = item->details.num_slots; + item->bag_info->num_slots = item->details.num_slots; + item->bag_info->weight_reduction = atoi(row[2]); + total++; + } + else + LogWrite(ITEM__ERROR, 0, "Items", "Error loading `item_details_bag`, ID: %i", id); + } + } + return total; +} + +int32 WorldDatabase::LoadFoods() +{ + Query query; + MYSQL_ROW row; + MYSQL_RES* result = query.RunQuery2(Q_SELECT, "SELECT item_id, type, level, duration, satiation FROM item_details_food"); + int32 total = 0; + int32 id = 0; + + if(result) + { + while(result && (row = mysql_fetch_row(result))) + { + id = strtoul(row[0], NULL, 0); + Item* item = master_item_list.GetItem(id); + + if(item) + { + LogWrite(ITEM__DEBUG, 5, "Items", "\tItem Food for item_id %u", id); + LogWrite(ITEM__DEBUG, 5, "Items", "\ttype: %i, lvl: %i, dur: %i, sat: %.2f, tier: %i", ITEM_TYPE_FOOD, atoi(row[1]), atoi(row[2]), atof(row[3]), atoi(row[4])); + item->SetItemType(ITEM_TYPE_FOOD); + item->food_info->type = atoi(row[1]); + item->food_info->level = atoi(row[2]); + item->food_info->duration = atof(row[3]); + item->food_info->satiation = atoi(row[4]); + item->details.tier = atoi(row[4]); + total++; + } + else + LogWrite(ITEM__ERROR, 0, "Items", "Error loading `item_details_food`, ID: %i", id); + } + } + return total; +} + +int32 WorldDatabase::LoadRangeWeapons() +{ + Query query; + MYSQL_ROW row; + MYSQL_RES* result = query.RunQuery2(Q_SELECT, "SELECT item_id, damage_low1, damage_high1, damage_low2, damage_high2, damage_low3, damage_high3, delay, damage_rating, range_low, range_high, damage_type FROM item_details_range"); + int32 total = 0; + int32 id = 0; + + if(result) + { + while(result && (row = mysql_fetch_row(result))) + { + id = strtoul(row[0], NULL, 0); + Item* item = master_item_list.GetItem(id); + + if(item) + { + LogWrite(ITEM__DEBUG, 5, "Items", "\tItem Ranged for item_id %u", id); + LogWrite(ITEM__DEBUG, 5, "Items", "\ttype: %i, %i, %i, %i, %i, %i, %i, %i, %.2f, %i, %i, %i", ITEM_TYPE_RANGED, atoi(row[1]), atoi(row[2]), atoi(row[3]), atoi(row[4]), atoi(row[5]), atoi(row[6]), atoi(row[7]), atof(row[8]), atoi(row[9]), atoi(row[10]), atoi(row[11])); + item->SetItemType(ITEM_TYPE_RANGED); + item->ranged_info->weapon_info.damage_low1 = atoi(row[1]); + item->ranged_info->weapon_info.damage_high1 = atoi(row[2]); + item->ranged_info->weapon_info.damage_low2 = atoi(row[3]); + item->ranged_info->weapon_info.damage_high2 = atoi(row[4]); + item->ranged_info->weapon_info.damage_low3 = atoi(row[5]); + item->ranged_info->weapon_info.damage_high3 = atoi(row[6]); + item->ranged_info->weapon_info.delay = atoi(row[7]); + item->ranged_info->weapon_info.rating = atof(row[8]); + item->ranged_info->range_low = atoi(row[9]); + item->ranged_info->range_high = atoi(row[10]); + item->SetWeaponType(atoi(row[11])); + total++; + } + else + LogWrite(ITEM__ERROR, 0, "Items", "Error loading `item_details_range`, ID: %i", id); + } + } + return total; +} + +int32 WorldDatabase::LoadThrownWeapons() +{ + Query query; + MYSQL_ROW row; + MYSQL_RES* result = query.RunQuery2(Q_SELECT, "SELECT item_id, range_bonus, damage_bonus, hit_bonus, damage_type FROM item_details_thrown"); + int32 total = 0; + int32 id = 0; + + if(result) + { + while(result && (row = mysql_fetch_row(result))) + { + id = strtoul(row[0], NULL, 0); + Item* item = master_item_list.GetItem(id); + + if(item) + { + LogWrite(ITEM__DEBUG, 5, "Items", "\tItem Thrown for item_id %u", id); + LogWrite(ITEM__DEBUG, 5, "Items", "\ttype: %i, %i, %u, %.2f, %u", ITEM_TYPE_THROWN, atoul(row[1]), atoi(row[2]), atof(row[3]), atoul(row[4])); + item->SetItemType(ITEM_TYPE_THROWN); + item->thrown_info->range = atoul(row[1]); + item->thrown_info->damage_modifier = atoul(row[2]); + item->thrown_info->hit_bonus = atof(row[3]); + item->thrown_info->damage_type = atoul(row[4]); + item->SetWeaponType(item->thrown_info->damage_type); + total++; + } + else + LogWrite(ITEM__ERROR, 0, "Items", "Error loading `item_details_thrown`, ID: %i", id); + } + } + return total; +} + +int32 WorldDatabase::LoadWeapons() +{ + Query query; + MYSQL_ROW row; + MYSQL_RES* result = query.RunQuery2(Q_SELECT, "SELECT item_id, wield_style, damage_low1, damage_high1, damage_low2, damage_high2, damage_low3, damage_high3, delay, damage_rating, damage_type FROM item_details_weapon"); + int32 total = 0; + int32 id = 0; + + if(result) + { + while(result && (row = mysql_fetch_row(result))) + { + id = strtoul(row[0], NULL, 0); + Item* item = master_item_list.GetItem(id); + + if(item) + { + LogWrite(ITEM__DEBUG, 5, "Items", "\tItem Weapon for item_id %u", id); + LogWrite(ITEM__DEBUG, 5, "Items", "\ttype: %i, %i, %i, %i, %i, %i, %i, %i, %i, %.2f, %i", ITEM_TYPE_WEAPON, atoi(row[1]), atoi(row[2]), atoi(row[3]), atoi(row[4]), atoi(row[5]), atoi(row[6]), atoi(row[7]), atoi(row[8]), atof(row[9]), atoi(row[10])); + item->SetItemType(ITEM_TYPE_WEAPON); + item->weapon_info->wield_type = atoi(row[1]); + item->weapon_info->damage_low1 = atoi(row[2]); + item->weapon_info->damage_high1 = atoi(row[3]); + item->weapon_info->damage_low2 = atoi(row[4]); + item->weapon_info->damage_high2 = atoi(row[5]); + item->weapon_info->damage_low3 = atoi(row[6]); + item->weapon_info->damage_high3 = atoi(row[7]); + item->weapon_info->delay = atoi(row[8]); + item->weapon_info->rating = atof(row[9]); + item->SetWeaponType(atoi(row[10])); + total++; + } + else + LogWrite(ITEM__ERROR, 0, "Items", "Error loading `item_weapons`, ID: %i", id); + } + } + return total; +} + +int32 WorldDatabase::LoadItemAppearances() +{ + Query query; + MYSQL_ROW row; + MYSQL_RES* result = query.RunQuery2(Q_SELECT, "SELECT item_id, equip_type, red, green, blue, highlight_red, highlight_green, highlight_blue FROM item_appearances ORDER BY item_id asc"); + int32 id = 0; + Item* item = 0; + int32 total = 0; + + if(result && mysql_num_rows(result) >0) + { + while(result && (row = mysql_fetch_row(result))) + { + if(id != strtoul(row[0], NULL, 0)) + { + id = strtoul(row[0], NULL, 0); + item = master_item_list.GetItem(id); + + if(item) + { + LogWrite(ITEM__DEBUG, 5, "Items", "\tItem Appearance for item_id %u", id); + LogWrite(ITEM__DEBUG, 5, "Items", "\tequip_type: %i, R: %i, G: %i, B: %i, HR: %i, HG: %i, HB: %i", atoi(row[1]), atoi(row[2]), atoi(row[3]), atoi(row[4]), atoi(row[5]), atoi(row[6]), atoi(row[7])); + item->SetAppearance(atoi(row[1]), atoi(row[2]), atoi(row[3]), atoi(row[4]), atoi(row[5]), atoi(row[6]), atoi(row[7])); + total++; + } + else + LogWrite(ITEM__ERROR, 0, "Items", "Error Loading item_appearances, ID: %i", id); + } + } + } + return total; +} + +int32 WorldDatabase::LoadItemEffects() +{ + Query query; + MYSQL_ROW row; + MYSQL_RES* result = query.RunQuery2(Q_SELECT, "SELECT item_id, effect, percentage, bullet FROM item_effects ORDER BY item_id, id"); + int32 id = 0; + Item* item = 0; + int32 total = 0; + + if(result && mysql_num_rows(result) >0) + { + while(result && (row = mysql_fetch_row(result))) + { + if(id != atoul(row[0])) + { + id = atoul(row[0]); + item = master_item_list.GetItem(id); + } + + if(item && row[1]) + { + LogWrite(ITEM__DEBUG, 5, "Items", "\tItem Effects for item_id %u", id); + LogWrite(ITEM__DEBUG, 5, "Items", "\tEffect: '%s', Percent: %i, Sub: %i", row[1], atoi(row[2]), atoi(row[3])); + item->AddEffect(row[1], atoi(row[2]), atoi(row[3])); + total++; + } + else + LogWrite(ITEM__ERROR, 0, "Items", "Error Loading item_effects, ID: %i", id); + } + } + return total; +} +int32 WorldDatabase::LoadBookPages() +{ + Query query; + MYSQL_ROW row; + MYSQL_RES* result = query.RunQuery2(Q_SELECT, "SELECT item_id, page, page_text, page_text_valign, page_text_halign FROM item_details_book_pages ORDER BY item_id, id"); + int32 id = 0; + Item* item = 0; + int32 total = 0; + + if (result && mysql_num_rows(result) > 0) + { + while (result && (row = mysql_fetch_row(result))) + { + if (id != atoul(row[0])) + { + id = atoul(row[0]); + item = master_item_list.GetItem(id); + } + + if (item && row[1]) + { + LogWrite(ITEM__DEBUG, 5, "Items", "\tBook Pages for item_id %u", id); + //LogWrite(ITEM__DEBUG, 5, "Items", "\tPages: '%s', Percent: %i, Sub: %i", row[1], atoi(row[2]), atoi(row[3])); + item->AddBookPage(atoi(row[1]), row[2], atoi(row[3]), atoi(row[4])); + total++; + } + else + LogWrite(ITEM__ERROR, 0, "Items", "Error Loading item_details_book_pages, ID: %i", id); + } + } + return total; +} +int32 WorldDatabase::LoadItemLevelOverride() +{ + Query query; + MYSQL_ROW row; + MYSQL_RES* result = query.RunQuery2(Q_SELECT, "SELECT item_id, adventure_class_id, tradeskill_class_id, level FROM item_levels_override ORDER BY item_id asc"); + int32 id = 0; + Item* item = 0; + int32 total = 0; + + if(result && mysql_num_rows(result) >0) + { + while(result && (row = mysql_fetch_row(result))) + { + if(id != strtoul(row[0], NULL, 0)) + { + id = strtoul(row[0], NULL, 0); + item = master_item_list.GetItem(id); + } + + if(item) + { + LogWrite(ITEM__DEBUG, 5, "Items", "\tLevel Override for item_id %u", id); + LogWrite(ITEM__DEBUG, 5, "Items", "\tAdv: %i, TS: %i, Lvl: %i", atoi(row[1]), atoi(row[2]), atoi(row[3])); + item->AddLevelOverride(atoi(row[1]), atoi(row[2]), atoi(row[3])); + total++; + } + else + LogWrite(ITEM__ERROR, 0, "Items", "Error loading `item_levels_override`, ID: %i", id); + } + } + return total; +} + +int32 WorldDatabase::LoadItemStats() +{ + Query query; + MYSQL_ROW row; + MYSQL_RES* result = query.RunQuery2(Q_SELECT, "SELECT item_id, type, subtype, value, text FROM item_stats ORDER BY item_id asc"); + int32 id = 0; + Item* item = 0; + int32 total = 0; + + if(result && mysql_num_rows(result) >0) + { + while(result && (row = mysql_fetch_row(result))) + { + if(id != strtoul(row[0], NULL, 0)) + { + id = strtoul(row[0], NULL, 0); + item = master_item_list.GetItem(id); + } + + if(item) + { + LogWrite(ITEM__DEBUG, 5, "Items", "\tItem Stats for item_id %u", id); + LogWrite(ITEM__DEBUG, 5, "Items", "\ttype: %i, sub: %i, val: %.2f, name: %s", atoi(row[1]), atoi(row[2]), atof(row[3]), row[4]); + item->AddStat(atoi(row[1]), atoi(row[2]), atof(row[3]), row[4]); + total++; + } + else + LogWrite(ITEM__ERROR, 0, "Items", "Error loading `item_stats`, ID: %i", id); + } + } + return total; +} + +void WorldDatabase::ReloadItemList() +{ + LogWrite(ITEM__DEBUG, 0, "Items", "Unloading Item List..."); + master_item_list.RemoveAll(); + LoadItemList(); +} + +void WorldDatabase::LoadItemList() +{ + DatabaseResult result; + + int32 t_now = Timer::GetUnixTimeStamp(); + int32 total = 0; + int32 normal_items = 0; + string item_type; + + if( !database_new.Select(&result, "SELECT * FROM items") ) + LogWrite(ITEM__ERROR, 0, "Items", "Cannot load items in %s, line: %i", __FUNCTION__, __LINE__); + else + { + while( result.Next() ) + { + item_type = result.GetStringStr("item_type"); + LogWrite(ITEM__DEBUG, 5, "Items", "\tLoading: %s (ID: %i, Type: %s)...", result.GetStringStr("name"), result.GetInt32Str("id"), item_type.c_str()); + + Item* item = new Item; + LoadDataFromRow(&result, item); + master_item_list.AddItem(item); + + if( strcmp(item_type.c_str(), "Normal") == 0 ) + { + item->SetItemType(ITEM_TYPE_NORMAL); + normal_items++; + } + total++; + } + } + + LogWrite(ITEM__DEBUG, 0, "Items", "\tLoaded %u Normal Items", normal_items); + LogWrite(ITEM__DEBUG, 0, "Items", "\tLoaded %u Baubles", LoadBaubles()); + LogWrite(ITEM__DEBUG, 0, "Items", "\tLoaded %u Bags", LoadBags()); + LogWrite(ITEM__DEBUG, 0, "Items", "\tLoaded %u Books", LoadBooks()); + LogWrite(ITEM__DEBUG, 0, "Items", "\tLoaded %u Item Sets", LoadItemsets()); + LogWrite(ITEM__DEBUG, 0, "Items", "\tLoaded %u House Items", LoadHouseItem()); + LogWrite(ITEM__DEBUG, 0, "Items", "\tLoaded %u Food Items", LoadFoods()); + LogWrite(ITEM__DEBUG, 0, "Items", "\tLoaded %u Weapons", LoadWeapons()); + LogWrite(ITEM__DEBUG, 0, "Items", "\tLoaded %u Ranged Weapons", LoadRangeWeapons()); + LogWrite(ITEM__DEBUG, 0, "Items", "\tLoaded %u Thrown Weapons", LoadThrownWeapons()); + LogWrite(ITEM__DEBUG, 0, "Items", "\tLoaded %u Armor Pieces", LoadArmor()); + LogWrite(ITEM__DEBUG, 0, "Items", "\tLoaded %u Shields", LoadShields()); + LogWrite(ITEM__DEBUG, 0, "Items", "\tLoaded %u Skill Items", LoadSkillItems()); + LogWrite(ITEM__DEBUG, 0, "Items", "\tLoaded %u Adornment Items", LoadAdornments()); + LogWrite(ITEM__DEBUG, 0, "Items", "\tLoaded %u Recipe Book Items", LoadRecipeBookItems()); + LogWrite(ITEM__DEBUG, 0, "Items", "\tLoaded %u House Containers", LoadHouseContainers()); + + LogWrite(ITEM__DEBUG, 0, "Items", "Loading Item Appearances..."); + LogWrite(ITEM__DEBUG, 0, "Items", "\tLoaded %u Item Appearances", LoadItemAppearances()); + + LogWrite(ITEM__DEBUG, 0, "Items", "Loading Item Stats..."); + LogWrite(ITEM__DEBUG, 0, "Items", "\tLoaded %u Item Stats", LoadItemStats()); + + LogWrite(ITEM__DEBUG, 0, "Items", "Loading Item Effects..."); + LogWrite(ITEM__DEBUG, 0, "Items", "\tLoaded %u Item Effects", LoadItemEffects()); + + LogWrite(ITEM__DEBUG, 0, "Items", "Loading Book Pages..."); + LogWrite(ITEM__DEBUG, 0, "Items", "\tLoaded %u Book Pages", LoadBookPages()); + + LogWrite(ITEM__DEBUG, 0, "Items", "Loading Item Level Overrides..."); + LogWrite(ITEM__DEBUG, 0, "Items", "\tLoaded %u Item Level Overrides", LoadItemLevelOverride()); + + LogWrite(ITEM__INFO, 0, "Items", "Loaded %u Total Item%s (took %u seconds)", total, ( total == 1 ) ? "" : "s", Timer::GetUnixTimeStamp() - t_now); +} + +int32 WorldDatabase::LoadNextUniqueItemID() +{ + Query query; + MYSQL_ROW row; + MYSQL_RES* result = query.RunQuery2(Q_SELECT, "SELECT max(id) FROM character_items"); + + if(result && (row = mysql_fetch_row(result))) + { + if(row[0]) + { + LogWrite(ITEM__DEBUG, 0, "Items", "%s: max(id): %u", __FUNCTION__, atoul(row[0])); + return strtoul(row[0], NULL, 0); + } + else + return 0; + } + else if(!result) + LogWrite(ITEM__ERROR, 0, "Items", "%s: Unable to load next unique item ID.", __FUNCTION__); + + return 0; +} + +void WorldDatabase::SaveItems(Client* client) +{ + LogWrite(ITEM__DEBUG, 3, "Items", "Save Items for Player %i", client->GetCharacterID()); + + map* items = client->GetPlayer()->GetItemList(); + map::iterator item_iter; + Item* item = 0; + + for(item_iter = items->begin(); item_iter != items->end(); item_iter++) + { + item = item_iter->second; + + if(item && item->save_needed) + { + LogWrite(ITEM__DEBUG, 5, "Items", "SaveItems: Acct: %u, Char: %u, Item: %u, NOT-EQUIPPED", client->GetAccountID(), client->GetCharacterID(), item); + SaveItem(client->GetAccountID(), client->GetCharacterID(), item, "NOT-EQUIPPED"); + item->save_needed = false; + } + } + safe_delete(items); + + vector* equipped_list = client->GetPlayer()->GetEquippedItemList(); + + for(int32 i=0;isize();i++) + { + item = equipped_list->at(i); + + if(item && item->save_needed) + { + SaveItem(client->GetAccountID(), client->GetCharacterID(), item, "EQUIPPED"); + item->save_needed = false; + } + } + safe_delete(equipped_list); + + vector* overflow = client->GetPlayer()->item_list.GetOverflowItemList(); + for (int32 i = 0; i < overflow->size(); i++){ + item = overflow->at(i); + if (item) { + sint16 slot = item->details.slot_id; + item->details.slot_id = i; + SaveItem(client->GetAccountID(), client->GetCharacterID(), item, "NOT-EQUIPPED"); + item->details.slot_id = slot; + } + } + safe_delete(overflow); +} + +void WorldDatabase::SaveItem(int32 account_id, int32 char_id, Item* item, const char* type) +{ + LogWrite(ITEM__DEBUG, 1, "Items", "Saving ItemID: %u (Type: %s) for account: %u, player: %u", item->details.item_id, type, account_id, char_id); + + Query query; + string update_item = string("REPLACE INTO character_items (id, type, char_id, slot, item_id, creator,adorn0,adorn1,adorn2, condition_, attuned, bag_id, count, max_sell_value, account_id, login_checksum) VALUES (%u, '%s', %u, %i, %u, '%s', %i, %i, %i, %i, %i, %i, %i, %u, %u, 0)"); + query.RunQuery2(Q_REPLACE, update_item.c_str(), item->details.unique_id, type, char_id, item->details.slot_id, item->details.item_id, + getSafeEscapeString(item->creator.c_str()).c_str(),item->adorn0,item->adorn1,item->adorn2, item->generic_info.condition, item->CheckFlag(ATTUNED) ? 1 : 0, item->details.inv_slot_id, item->details.count, item->GetMaxSellValue(), account_id); +} + +void WorldDatabase::DeleteItem(int32 char_id, Item* item, const char* type) +{ + Query query; + string delete_item; + + if(type) + { + LogWrite(ITEM__DEBUG, 1, "Items", "Deleting item_id %u (Type: %s) for player %u", item->details.item_id, type, char_id); + + delete_item = string("DELETE FROM character_items WHERE char_id = %u AND (id = %u OR bag_id = %u) AND type='%s'"); + query.RunQuery2(Q_DELETE, delete_item.c_str(), char_id, item->details.unique_id, item->details.unique_id, type); + } + else + { + LogWrite(ITEM__DEBUG, 0, "Items", "Deleting item_id %u for player %u", item->details.item_id, char_id); + + delete_item = string("DELETE FROM character_items WHERE char_id = %u AND (id = %u OR bag_id = %u)"); + query.RunQuery2(Q_DELETE, delete_item.c_str(), char_id, item->details.unique_id, item->details.unique_id); + } +} + +void WorldDatabase::LoadCharacterItemList(int32 account_id, int32 char_id, Player* player, int16 version) +{ + LogWrite(ITEM__DEBUG, 0, "Items", "Loading items for character '%s' (%u)", player->GetName(), char_id); + + Query query; + MYSQL_ROW row; + MYSQL_RES* result = query.RunQuery2(Q_SELECT, "SELECT type, id, slot, item_id, creator,adorn0,adorn1,adorn2, condition_, attuned, bag_id, count, max_sell_value FROM character_items where char_id = %u or (bag_id = -4 and account_id = %u) ORDER BY slot asc", char_id, account_id); + + if(result) + { + bool ret = true; + + while(result && (row = mysql_fetch_row(result))) + { + LogWrite(ITEM__DEBUG, 5, "Items", "\tLoading character item: %u, slot: %i", strtoul(row[1], NULL, 0), atoi(row[2])); + Item* master_item = master_item_list.GetItem(strtoul(row[3], NULL, 0)); + + if(master_item) + { + Item* item = new Item(master_item); + item->details.unique_id = strtoul(row[1], NULL, 0); + item->details.slot_id = atoi(row[2]); + + if(item->details.num_slots > 0) + item->details.bag_id = item->details.unique_id; + + item->save_needed = false; + + if(row[4]) + item->creator = string(row[4]);//creator + item->adorn0 = atoi(row[5]); //adorn0 + item->adorn1 = atoi(row[6]); //adorn1 + item->adorn2 = atoi(row[7]); //adorn2 + item->generic_info.condition = atoi(row[8]); //condition + + if(row[9] && atoi(row[9])>0) //attuned + { + if(item->CheckFlag(ATTUNEABLE)) + item->generic_info.item_flags -= ATTUNEABLE; + + if(!item->CheckFlag(NO_TRADE)) + item->generic_info.item_flags += NO_TRADE; + + item->generic_info.item_flags += ATTUNED; + } + + item->details.inv_slot_id = atol(row[10]); //bag_id + item->details.count = atoi(row[11]); //count + item->SetMaxSellValue(atoul(row[12])); //max sell value + + + if(strncasecmp(row[0], "EQUIPPED", 8)==0) + ret = player->GetEquipmentList()->AddItem(item->details.slot_id, item); + else if (strncasecmp(row[0], "APPEARANCE", 10) == 2) + ret = player->GetEquipmentList()->AddItem(item->details.slot_id, item); + else { + if (version < 1209 & item->details.count > 255) { + int stacks = item->details.count / 255; + int8 remainder = item->details.count % 255; + item->details.count = remainder; + if (item->details.inv_slot_id == -2) + player->item_list.AddOverflowItem(item); + else + player->item_list.AddItem(item); + + + for (int stack = 1; stack <= stacks; stack++) { + item->details.count = 255; + item->details.inv_slot_id = -2; + player->item_list.AddOverflowItem(item); + } + + + + + } + + else { + if (item->details.inv_slot_id == -2) + player->item_list.AddOverflowItem(item); + else + player->item_list.AddItem(item); + } + } + } + else + ret = false; + } + + if(!ret) + LogWrite(ITEM__ERROR, 0, "Items", "%s: Error Loading item(s) for Char ID: %u (%s)", __FUNCTION__, char_id, player->GetName()); + } +} + diff --git a/EQ2/source/WorldServer/Items/Items_CoE.h b/EQ2/source/WorldServer/Items/Items_CoE.h new file mode 100644 index 000000000..0cb566402 --- /dev/null +++ b/EQ2/source/WorldServer/Items/Items_CoE.h @@ -0,0 +1,782 @@ +/* + EQ2Emulator: Everquest II Server Emulator + Copyright (C) 2007 EQ2EMulator Development Team (http://www.eq2emulator.net) + + This file is part of EQ2Emulator. + + EQ2Emulator is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + EQ2Emulator is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with EQ2Emulator. If not, see . +*/ +#ifndef __EQ2_ITEMS__ +#define __EQ2_ITEMS__ +#include +#include +#include "../../common/types.h" +#include "../../common/DataBuffer.h" +#include "../../common/MiscFunctions.h" +#include "../Commands/Commands.h" +#include "../../common/ConfigReader.h" + +using namespace std; +class MasterItemList; +class Player; +extern MasterItemList master_item_list; +#define EQ2_PRIMARY_SLOT 0 +#define EQ2_SECONDARY_SLOT 1 +#define EQ2_HEAD_SLOT 2 +#define EQ2_CHEST_SLOT 3 +#define EQ2_SHOULDERS_SLOT 4 +#define EQ2_FOREARMS_SLOT 5 +#define EQ2_HANDS_SLOT 6 +#define EQ2_LEGS_SLOT 7 +#define EQ2_FEET_SLOT 8 +#define EQ2_LRING_SLOT 9 +#define EQ2_RRING_SLOT 10 +#define EQ2_EARS_SLOT_1 11 +#define EQ2_EARS_SLOT_2 12 +#define EQ2_NECK_SLOT 13 +#define EQ2_LWRIST_SLOT 14 +#define EQ2_RWRIST_SLOT 15 +#define EQ2_RANGE_SLOT 16 +#define EQ2_AMMO_SLOT 17 +#define EQ2_WAIST_SLOT 18 +#define EQ2_CLOAK_SLOT 19 +#define EQ2_CHARM_SLOT_1 20 +#define EQ2_CHARM_SLOT_2 21 +#define EQ2_FOOD_SLOT 22 +#define EQ2_DRINK_SLOT 23 +#define EQ2_TEXTURES_SLOT 24 +#define EQ2_UNKNOWN_SLOT 25 + +#define PRIMARY_SLOT 1 +#define SECONDARY_SLOT 2 +#define HEAD_SLOT 4 +#define CHEST_SLOT 8 +#define SHOULDERS_SLOT 16 +#define FOREARMS_SLOT 32 +#define HANDS_SLOT 64 +#define LEGS_SLOT 128 +#define FEET_SLOT 256 +#define LRING_SLOT 512 +#define RRING_SLOT 1024 +#define EARS_SLOT_1 2048 +#define EARS_SLOT_2 4096 +#define NECK_SLOT 8192 +#define LWRIST_SLOT 16384 +#define RWRIST_SLOT 32768 +#define RANGE_SLOT 65536 +#define AMMO_SLOT 131072 +#define WAIST_SLOT 262144 +#define CLOAK_SLOT 524288 +#define CHARM_SLOT_1 1048576 +#define CHARM_SLOT_2 2097152 +#define FOOD_SLOT 4194304 +#define DRINK_SLOT 8388608 +#define TEXTURES_SLOT 16777216 + +#define NUM_BANK_SLOTS 12 +#define NUM_SHARED_BANK_SLOTS 8 +#define NUM_SLOTS 25 +#define NUM_INV_SLOTS 6 +#define INV_SLOT1 0 +#define INV_SLOT2 50 +#define INV_SLOT3 100 +#define INV_SLOT4 150 +#define INV_SLOT5 200 +#define INV_SLOT6 250 +#define BANK_SLOT1 1000 +#define BANK_SLOT2 1100 +#define BANK_SLOT3 1200 +#define BANK_SLOT4 1300 +#define BANK_SLOT5 1400 +#define BANK_SLOT6 1500 +#define BANK_SLOT7 1600 +#define BANK_SLOT8 1700 +#define ATTUNED 1 +#define ATTUNEABLE 2 +#define ARTIFACT 4 +#define LORE 8 +#define TEMPORARY 16 +#define NO_TRADE 32 +#define NO_VALUE 64 +#define NO_ZONE 128 +#define NO_DESTROY 256 +#define CRAFTED 512 +#define GOOD_ONLY 1024 +#define EVIL_ONLY 2048 + +#define ITEM_WIELD_TYPE_DUAL 1 +#define ITEM_WIELD_TYPE_SINGLE 2 +#define ITEM_WIELD_TYPE_TWO_HAND 4 + +#define ITEM_TYPE_NORMAL 0 +#define ITEM_TYPE_WEAPON 1 +#define ITEM_TYPE_RANGED 2 +#define ITEM_TYPE_ARMOR 3 +#define ITEM_TYPE_SHIELD 4 +#define ITEM_TYPE_BAG 5 +#define ITEM_TYPE_SKILL 6 +#define ITEM_TYPE_RECIPE 7 +#define ITEM_TYPE_FOOD 8 +#define ITEM_TYPE_BAUBLE 9 +#define ITEM_TYPE_HOUSE 10 +#define ITEM_TYPE_THROWN 11 +#define ITEM_TYPE_HOUSE_CONTAINER 12 +#define ITEM_TYPE_BOOK 13 +#define ITEM_TYPE_ADORNMENT 14 +#define ITEM_TYPE_PATTERN 15 +#define ITEM_TYPE_ARMORSET 16 + +#define ITEM_MENU_TYPE_GENERIC 1 +#define ITEM_MENU_TYPE_EQUIP 2 +#define ITEM_MENU_TYPE_BAG 4 +#define ITEM_MENU_TYPE_HOUSE 8 +#define ITEM_MENU_TYPE_SCRIBE 32 +#define ITEM_MENU_TYPE_INVALID 128 +#define ITEM_MENU_TYPE_BROKEN 512 +#define ITEM_MENU_TYPE_ATTUNED 2048 +#define ITEM_MENU_TYPE_ATTUNEABLE 4096 +#define ITEM_MENU_TYPE_BOOK 8192 +#define ITEM_MENU_TYPE_DISPLAY_CHARGES 16384 +#define ITEM_MENU_TYPE_NAMEPET 65536 +#define ITEM_MENU_TYPE_USE 524288 +#define ITEM_MENU_TYPE_DRINK 8388608 +#define ITEM_MENU_TYPE_REDEEM 536870912 + +#define ITEM_TAG_UNCOMMON 3 //tier tags +#define ITEM_TAG_TREASURED 4 +#define ITEM_TAG_LEGENDARY 7 +#define ITEM_TAG_FABLED 9 +#define ITEM_TAG_MYTHICAL 12 + +#define ITEM_BROKER_TYPE_ANY 0xFFFFFFFF +#define ITEM_BROKER_TYPE_ADORNMENT 134217728 +#define ITEM_BROKER_TYPE_AMMO 1024 +#define ITEM_BROKER_TYPE_ATTUNEABLE 16384 +#define ITEM_BROKER_TYPE_BAG 2048 +#define ITEM_BROKER_TYPE_BAUBLE 16777216 +#define ITEM_BROKER_TYPE_BOOK 128 +#define ITEM_BROKER_TYPE_CHAINARMOR 2097152 +#define ITEM_BROKER_TYPE_CLOAK 1073741824 +#define ITEM_BROKER_TYPE_CLOTHARMOR 524288 +#define ITEM_BROKER_TYPE_COLLECTABLE 67108864 +#define ITEM_BROKER_TYPE_CRUSHWEAPON 4 +#define ITEM_BROKER_TYPE_DRINK 131072 +#define ITEM_BROKER_TYPE_FOOD 4096 +#define ITEM_BROKER_TYPE_HOUSEITEM 512 +#define ITEM_BROKER_TYPE_JEWELRY 262144 +#define ITEM_BROKER_TYPE_LEATHERARMOR 1048576 +#define ITEM_BROKER_TYPE_LORE 8192 +#define ITEM_BROKER_TYPE_MISC 1 +#define ITEM_BROKER_TYPE_PIERCEWEAPON 8 +#define ITEM_BROKER_TYPE_PLATEARMOR 4194304 +#define ITEM_BROKER_TYPE_POISON 65536 +#define ITEM_BROKER_TYPE_POTION 32768 +#define ITEM_BROKER_TYPE_RECIPEBOOK 8388608 +#define ITEM_BROKER_TYPE_SALESDISPLAY 33554432 +#define ITEM_BROKER_TYPE_SHIELD 32 +#define ITEM_BROKER_TYPE_SLASHWEAPON 2 +#define ITEM_BROKER_TYPE_SPELLSCROLL 64 +#define ITEM_BROKER_TYPE_TINKERED 268435456 +#define ITEM_BROKER_TYPE_TRADESKILL 256 + +#define ITEM_BROKER_SLOT_ANY 0xFFFFFFFF +#define ITEM_BROKER_SLOT_AMMO 65536 +#define ITEM_BROKER_SLOT_CHARM 524288 +#define ITEM_BROKER_SLOT_CHEST 32 +#define ITEM_BROKER_SLOT_CLOAK 262144 +#define ITEM_BROKER_SLOT_DRINK 2097152 +#define ITEM_BROKER_SLOT_EARS 4096 +#define ITEM_BROKER_SLOT_FEET 1024 +#define ITEM_BROKER_SLOT_FOOD 1048576 +#define ITEM_BROKER_SLOT_FOREARMS 128 +#define ITEM_BROKER_SLOT_HANDS 256 +#define ITEM_BROKER_SLOT_HEAD 16 +#define ITEM_BROKER_SLOT_LEGS 512 +#define ITEM_BROKER_SLOT_NECK 8192 +#define ITEM_BROKER_SLOT_PRIMARY 1 +#define ITEM_BROKER_SLOT_PRIMARY_2H 2 +#define ITEM_BROKER_SLOT_RANGE_WEAPON 32768 +#define ITEM_BROKER_SLOT_RING 2048 +#define ITEM_BROKER_SLOT_SECONDARY 8 +#define ITEM_BROKER_SLOT_SHOULDERS 64 +#define ITEM_BROKER_SLOT_WAIST 131072 +#define ITEM_BROKER_SLOT_WRIST 16384 + +#define ITEM_BROKER_STAT_TYPE_NONE 0 +#define ITEM_BROKER_STAT_TYPE_DEF 2 +#define ITEM_BROKER_STAT_TYPE_STR 4 +#define ITEM_BROKER_STAT_TYPE_STA 8 +#define ITEM_BROKER_STAT_TYPE_AGI 16 +#define ITEM_BROKER_STAT_TYPE_WIS 32 +#define ITEM_BROKER_STAT_TYPE_INT 64 +#define ITEM_BROKER_STAT_TYPE_HEALTH 128 +#define ITEM_BROKER_STAT_TYPE_POWER 256 +#define ITEM_BROKER_STAT_TYPE_HEAT 512 +#define ITEM_BROKER_STAT_TYPE_COLD 1024 +#define ITEM_BROKER_STAT_TYPE_MAGIC 2048 +#define ITEM_BROKER_STAT_TYPE_MENTAL 4096 +#define ITEM_BROKER_STAT_TYPE_DIVINE 8192 +#define ITEM_BROKER_STAT_TYPE_POISON 16384 +#define ITEM_BROKER_STAT_TYPE_DISEASE 32768 +#define ITEM_BROKER_STAT_TYPE_CRUSH 65536 +#define ITEM_BROKER_STAT_TYPE_SLASH 131072 +#define ITEM_BROKER_STAT_TYPE_PIERCE 262144 +#define ITEM_BROKER_STAT_TYPE_CRITICAL 524288 +#define ITEM_BROKER_STAT_TYPE_DBL_ATTACK 1048576 +#define ITEM_BROKER_STAT_TYPE_ABILITY_MOD 2097152 +#define ITEM_BROKER_STAT_TYPE_POTENCY 4194304 + + + +#define OVERFLOW_SLOT 0xFFFFFFFE +#define SLOT_INVALID 0xFFFF + +#define ITEM_STAT_STR 0 +#define ITEM_STAT_STA 1 +#define ITEM_STAT_AGI 2 +#define ITEM_STAT_WIS 3 +#define ITEM_STAT_INT 4 + +#define ITEM_STAT_VS_PHYSICAL 200 +#define ITEM_STAT_VS_ELEMENTAL 201 +#define ITEM_STAT_VS_NOXIOUS 202 +#define ITEM_STAT_VS_ARCANE 203 + +//#define ITEM_STAT_VS_SLASH 200 +//#define ITEM_STAT_VS_CRUSH 201 +//#define ITEM_STAT_VS_PIERCE 202 +//#define ITEM_STAT_VS_HEAT 203 +//#define ITEM_STAT_VS_COLD 204 +//#define ITEM_STAT_VS_MAGIC 205 +//#define ITEM_STAT_VS_MENTAL 206 +//#define ITEM_STAT_VS_DIVINE 207 +//#define ITEM_STAT_VS_DISEASE 208 +//#define ITEM_STAT_VS_POISON 209 +//#define ITEM_STAT_VS_DROWNING 210 +//#define ITEM_STAT_VS_FALLING 211 +//#define ITEM_STAT_VS_PAIN 212 +//#define ITEM_STAT_VS_MELEE 213 + + +#define ITEM_STAT_DMG_SLASH 300 +#define ITEM_STAT_DMG_CRUSH 301 +#define ITEM_STAT_DMG_PIERCE 302 +#define ITEM_STAT_DMG_HEAT 303 +#define ITEM_STAT_DMG_COLD 304 +#define ITEM_STAT_DMG_MAGIC 305 +#define ITEM_STAT_DMG_MENTAL 306 +#define ITEM_STAT_DMG_DIVINE 307 +#define ITEM_STAT_DMG_DISEASE 308 +#define ITEM_STAT_DMG_POISON 309 +#define ITEM_STAT_DMG_DROWNING 310 +#define ITEM_STAT_DMG_FALLING 311 +#define ITEM_STAT_DMG_PAIN 312 +#define ITEM_STAT_DMG_MELEE 313 + + +#define ITEM_STAT_HEALTH 500 +#define ITEM_STAT_POWER 501 +#define ITEM_STAT_CONCENTRATION 502 +#define ITEM_STAT_SAVAGERY 503 + + +#define ITEM_STAT_HPREGEN 600 +#define ITEM_STAT_MANAREGEN 601 +#define ITEM_STAT_HPREGENPPT 602 +#define ITEM_STAT_MPREGENPPT 603 +#define ITEM_STAT_COMBATHPREGENPPT 604 +#define ITEM_STAT_COMBATMPREGENPPT 605 +#define ITEM_STAT_MAXHP 606 +#define ITEM_STAT_MAXHPPERC 607 +#define ITEM_STAT_MAXHPPERCFINAL 608 +#define ITEM_STAT_SPEED 609 +#define ITEM_STAT_SLOW 610 +#define ITEM_STAT_MOUNTSPEED 611 +#define ITEM_STAT_MOUNTAIRSPEED 612 +#define ITEM_STAT_LEAPSPEED 613 +#define ITEM_STAT_LEAPTIME 614 +#define ITEM_STAT_GLIDEEFFICIENCY 615 +#define ITEM_STAT_OFFENSIVESPEED 616 +#define ITEM_STAT_ATTACKSPEED 617 +#define ITEM_STAT_SPELLWEAPONATTACKSPEED 618 +#define ITEM_STAT_MAXMANA 619 +#define ITEM_STAT_MAXMANAPERC 620 +#define ITEM_STAT_MAXATTPERC 621 +#define ITEM_STAT_BLURVISION 622 +#define ITEM_STAT_MAGICLEVELIMMUNITY 623 +#define ITEM_STAT_HATEGAINMOD 624 +#define ITEM_STAT_COMBATEXPMOD 625 +#define ITEM_STAT_TRADESKILLEXPMOD 626 +#define ITEM_STAT_ACHIEVEMENTEXPMOD 627 +#define ITEM_STAT_SIZEMOD 628 +#define ITEM_STAT_DPS 629 +#define ITEM_STAT_SPELLWEAPONDPS 630 +#define ITEM_STAT_STEALTH 631 +#define ITEM_STAT_INVIS 632 +#define ITEM_STAT_SEESTEALTH 633 +#define ITEM_STAT_SEEINVIS 634 +#define ITEM_STAT_EFFECTIVELEVELMOD 635 +#define ITEM_STAT_RIPOSTECHANCE 636 +#define ITEM_STAT_PARRYCHANCE 637 +#define ITEM_STAT_DODGECHANCE 638 +#define ITEM_STAT_AEAUTOATTACKCHANCE 639 +#define ITEM_STAT_SPELLWEAPONAEAUTOATTACKCHANCE 640 +#define ITEM_STAT_DOUBLEATTACKCHANCE 641 +#define ITEM_STAT_PVPDOUBLEATTACKCHANCE 642 +#define ITEM_STAT_SPELLWEAPONAEAUTOATTACKCHANCE 643 +#define ITEM_STAT_PVPSPELLWEAPONDOUBLEATTACKCHANCE 644 +#define ITEM_STAT_SPELLDOUBLEATTACKCHANCE 645 +#define ITEM_STAT_PVPSPELLDOUBLEATTACKCHANCE 646 +#define ITEM_STAT_FLURRY 647 +#define ITEM_STAT_SPELLWEAPONFLURRY 648 +#define ITEM_STAT_MELEEDAMAGEMULTIPLIER 649 +#define ITEM_STAT_EXTRAHARVESTCHANCE 650 +#define ITEM_STAT_EXTRASHIELDBLOCKCHANCE 651 +#define ITEM_STAT_ITEMHPREGENPPT 652 +#define ITEM_STAT_ITEMPPREGENPPT 653 +#define ITEM_STAT_MELEECRITCHANCE 654 +#define ITEM_STAT_CRITAVOIDANCE 655 +#define ITEM_STAT_BENEFICIALCRITCHANCE 656 +#define ITEM_STAT_CRITBONUS 657 +#define ITEM_STAT_PVPCRITBONUS 658 +#define ITEM_STAT_BASEMODIFIER 659 +#define ITEM_STAT_PVPBASEMODIFIER 660 +#define ITEM_STAT_UNCONSCIOUSHPMOD 661 +#define ITEM_STAT_SPELLTIMEREUSEPCT 662 +#define ITEM_STAT_SPELLTIMERECOVERYPCT 663 +#define ITEM_STAT_SPELLTIMECASTPCT 664 +#define ITEM_STAT_SPELLTIMEREUSESPELLONLY 665 +#define ITEM_STAT_MELEEWEAPONRANGE 666 +#define ITEM_STAT_RANGEDWEAPONRANGE 667 +#define ITEM_STAT_FALLINGDAMAGEREDUCTION 668 +#define ITEM_STAT_RIPOSTEDAMAGE 669 +#define ITEM_STAT_MINIMUMDEFLECTIONCHANCE 670 +#define ITEM_STAT_MOVEMENTWEAVE 671 +#define ITEM_STAT_COMBATHPREGEN 672 +#define ITEM_STAT_COMBATMANAREGEN 673 +#define ITEM_STAT_CONTESTSPEEDBOOST 674 +#define ITEM_STAT_TRACKINGAVOIDANCE 675 +#define ITEM_STAT_STEALTHINVISSPEEDMOD 676 +#define ITEM_STAT_LOOT_COIN 677 +#define ITEM_STAT_ARMORMITIGATIONINCREASE 678 +#define ITEM_STAT_AMMOCONSERVATION 679 +#define ITEM_STAT_STRIKETHROUGH 680 +#define ITEM_STAT_STATUSBONUS 681 +#define ITEM_STAT_ACCURACY 682 +#define ITEM_STAT_COUNTERSTRIKE 683 +#define ITEM_STAT_SHIELDBASH 684 +#define ITEM_STAT_WEAPONDAMAGEBONUS 685 +#define ITEM_STAT_WEAPONDAMAGEBONUSMELEEONLY 686 +#define ITEM_STAT_ADDITIONALRIPOSTECHANCE 687 +#define ITEM_STAT_CRITICALMITIGATION 688 +#define ITEM_STAT_PVPTOUGHNESS 689 +#define ITEM_STAT_PVPLETHALITY 690 +#define ITEM_STAT_STAMINABONUS 691 +#define ITEM_STAT_WISDOMMITBONUS 692 +#define ITEM_STAT_HEALRECEIVE 693 +#define ITEM_STAT_HEALRECEIVEPERC 694 +#define ITEM_STAT_PVPCRITICALMITIGATION 695 +#define ITEM_STAT_BASEAVOIDANCEBONUS 696 +#define ITEM_STAT_INCOMBATSAVAGERYREGEN 697 +#define ITEM_STAT_OUTOFCOMBATSAVAGERYREGEN 698 +#define ITEM_STAT_SAVAGERYREGEN 699 +#define ITEM_STAT_SAVAGERYGAINMOD 6100 +#define ITEM_STAT_MAXSAVAGERYLEVEL 6101 + +#define ITEM_STAT_SPELL_DAMAGE 700 +#define ITEM_STAT_HEAL_AMOUNT 701 +#define ITEM_STAT_SPELL_AND_HEAL 702 +#define ITEM_STAT_COMBAT_ART_DAMAGE 703 +#define ITEM_STAT_SPELL_AND_COMBAT_ART_DAMAGE 704 +#define ITEM_STAT_TAUNT_AMOUNT 705 +#define ITEM_STAT_TAUNT_AND_COMBAT_ART_DAMAGE 706 +#define ITEM_STAT_ABILITY_MODIFIER 707 + + + +#pragma pack(1) +struct ItemStatsValues{ + sint16 str; + sint16 sta; + sint16 agi; + sint16 wis; + sint16 int_; + sint16 vs_slash; + sint16 vs_crush; + sint16 vs_pierce; + sint16 vs_heat; + sint16 vs_cold; + sint16 vs_magic; + sint16 vs_mental; + sint16 vs_divine; + sint16 vs_disease; + sint16 vs_poison; + sint16 health; + sint16 power; + sint8 concentration; +}; +struct ItemCore{ + int32 item_id; + sint32 soe_id; + int32 bag_id; + sint32 inv_slot_id; + sint16 slot_id; + int8 index; + int16 icon; + int16 count; + int8 tier; + int8 num_slots; + int32 unique_id; + int8 num_free_slots; + int16 recommended_level; +}; +#pragma pack() +struct ItemStat{ + string stat_name; + int8 stat_type; + sint16 stat_subtype; + int16 stat_type_combined; + float value; +}; +struct ItemLevelOverride{ + int8 adventure_class; + int8 tradeskill_class; + int16 level; +}; +struct ItemClass{ + int8 adventure_class; + int8 tradeskill_class; + int16 level; +}; +struct ItemAppearance{ + int16 type; + int8 red; + int8 green; + int8 blue; + int8 highlight_red; + int8 highlight_green; + int8 highlight_blue; +}; +class PlayerItemList; +class Item{ +public: + #pragma pack(1) + struct ItemStatString{ + EQ2_8BitString stat_string; + }; + struct Generic_Info{ + int8 show_name; + int8 creator_flag; + int16 item_flags; + int8 condition; + int32 weight; // num/10 + int32 skill_req1; + int32 skill_req2; + int16 skill_min; + int8 item_type; //0=normal, 1=weapon, 2=range, 3=armor, 4=shield, 5=container, 6=spell scroll, 7=recipe book, 8=food/drink, 9=bauble, 10=house item, 11=ammo, 12=house container + int16 appearance_id; + int8 appearance_red; + int8 appearance_green; + int8 appearance_blue; + int8 appearance_highlight_red; + int8 appearance_highlight_green; + int8 appearance_highlight_blue; + int8 collectable; + int32 offers_quest_id; + int32 part_of_quest_id; + int16 max_charges; + int8 display_charges; + int64 adventure_classes; + int64 tradeskill_classes; + int16 adventure_default_level; + int16 tradeskill_default_level; + int8 usable; + }; + struct Armor_Info { + int16 mitigation_low; + int16 mitigation_high; + }; + struct Weapon_Info { + int16 wield_type; + int16 damage_low1; + int16 damage_high1; + int16 damage_low2; + int16 damage_high2; + int16 damage_low3; + int16 damage_high3; + int16 delay; + float rating; + }; + struct Shield_Info { + Armor_Info armor_info; + }; + struct Ranged_Info { + Weapon_Info weapon_info; + int16 range_low; + int16 range_high; + }; + struct Bag_Info { + int8 num_slots; + int16 weight_reduction; + }; + struct Food_Info{ + int8 type; //0=water, 1=food + int8 level; + float duration; + int8 satiation; + }; + struct Bauble_Info{ + int16 cast; + int16 recovery; + int32 duration; + float recast; + int8 display_slot_optional; + int8 display_cast_time; + int8 display_bauble_type; + float effect_radius; + int32 max_aoe_targets; + int8 display_until_cancelled; + }; + struct Book_Info{ + int8 language; + EQ2_16BitString author; + EQ2_16BitString title; + }; + struct Skill_Info{ + int32 spell_id; + int32 spell_tier; + }; + struct House_Info{ + int32 status_rent_reduction; + }; + struct HouseContainer_Info{ + int16 disallowed_types; + int16 allowed_types; + int8 num_slots; + }; + struct RecipeBook_Info{ + vector recipes; + int8 uses; + }; + struct Thrown_Info{ + sint32 range; + sint32 damage_modifier; + float hit_bonus; + int32 damage_type; + }; + struct ItemEffect{ + EQ2_16BitString effect; + int8 percentage; + int8 subbulletflag; + }; + #pragma pack() + Item(); + Item(Item* in_item); + ~Item(); + string lowername; + string name; + string description; + int8 stack_count; + int32 sell_price; + int32 max_sell_value; + bool save_needed; + int8 weapon_type; + string adornment; + string creator; + vector item_stats; + vector item_string_stats; + vector item_level_overrides; + vector item_effects; + Generic_Info generic_info; + Weapon_Info* weapon_info; + Ranged_Info* ranged_info; + Armor_Info* armor_info; + Bag_Info* bag_info; + Food_Info* food_info; + Bauble_Info* bauble_info; + Book_Info* book_info; + Skill_Info* skill_info; + RecipeBook_Info* recipebook_info; + Thrown_Info* thrown_info; + vector slot_data; + ItemCore details; + int32 spell_id; + int8 spell_tier; + string item_script; + + void AddEffect(string effect, int8 percentage, int8 subbulletflag); + int32 GetMaxSellValue(); + void SetMaxSellValue(int32 val); + void SetItem(Item* old_item); + int16 GetOverrideLevel(int8 adventure_class, int8 tradeskill_class); + void AddLevelOverride(int8 adventure_class, int8 tradeskill_class, int16 level); + void AddLevelOverride(ItemLevelOverride* class_); + bool CheckClassLevel(int8 adventure_class, int8 tradeskill_class, int16 level); + bool CheckClass(int8 adventure_class, int8 tradeskill_class); + bool CheckLevel(int8 adventure_class, int8 tradeskill_class, int16 level); + void SetAppearance(int16 type, int8 red, int8 green, int8 blue, int8 highlight_red, int8 highlight_green, int8 highlight_blue); + void SetAppearance(ItemAppearance* appearance); + void AddStat(ItemStat* in_stat); + void AddStatString(ItemStatString* in_stat); + void AddStat(int8 type, int16 subtype, float value, char* name = 0); + void SetWeaponType(int8 type); + int8 GetWeaponType(); + bool HasSlot(int8 slot, int8 slot2 = 255); + bool IsNormal(); + bool IsWeapon(); + bool IsArmor(); + bool IsRanged(); + bool IsBag(); + bool IsFood(); + bool IsBauble(); + bool IsSkill(); + bool IsHouseItem(); + bool IsHouseContainer(); + bool IsShield(); + bool IsAdornment(); + bool IsAmmo(); + bool IsBook(); + bool IsChainArmor(); + bool IsClothArmor(); + bool IsCollectable(); + bool IsCloak(); + bool IsCrushWeapon(); + bool IsFoodFood(); + bool IsFoodDrink(); + bool IsJewelry(); + bool IsLeatherArmor(); + bool IsMisc(); + bool IsPierceWeapon(); + bool IsPlateArmor(); + bool IsPoison(); + bool IsPotion(); + bool IsRecipeBook(); + bool IsSalesDisplay(); + bool IsSlashWeapon(); + bool IsSpellScroll(); + bool IsTinkered(); + bool IsTradeskill(); + bool IsThrown(); + void SetItemScript(string name); + const char* GetItemScript(); + int32 CalculateRepairCost(); + + void SetItemType(int8 in_type); + void serialize(PacketStruct* packet, bool show_name = false, Player* player = 0, int16 packet_type = 0, int8 subtype = 0, bool loot_item = false); + EQ2Packet* serialize(int16 version, bool show_name = false, Player* player = 0, bool include_twice = true, int16 packet_type = 0, int8 subtype = 0, bool merchant_item = false, bool loot_item = false); + PacketStruct* PrepareItem(int16 version, bool merchant_item = false, bool loot_item = false); + bool CheckFlag(int32 flag); + void AddSlot(int8 slot_id); + void SetSlots(int32 slots); + bool needs_deletion; +}; +class MasterItemList{ +public: + ~MasterItemList(); + map items; + + Item* GetItem(int32 id); + Item* GetItemByName(const char *name); + ItemStatsValues* CalculateItemBonuses(int32 item_id); + ItemStatsValues* CalculateItemBonuses(Item* desc, ItemStatsValues* values = 0); + vector* GetItems(string name, int32 itype, int32 ltype, int32 btype, int64 minprice, int64 maxprice, int8 minskill, int8 maxskill, string seller, string adornment, int8 mintier, int8 maxtier, int16 minlevel, int16 maxlevel, sint8 itemclass); + vector* GetItems(map criteria); + void AddItem(Item* item); + bool IsBag(int32 item_id); + void RemoveAll(); + static int32 NextUniqueID(); + static void ResetUniqueID(int32 new_id); + static int32 next_unique_id; +}; +class PlayerItemList { +public: + PlayerItemList(); + ~PlayerItemList(); +// int16 number; + map indexed_items; + map > items; +// map< int8, Item* > inv_items; +// map< int8, Item* > bank_items; + bool SharedBankAddAllowed(Item* item); + vector* GetItemsFromBagID(sint32 bag_id); + vector* GetItemsInBag(Item* bag); + Item* GetBag(int8 inventory_slot, bool lock = true); + bool HasItem(int32 id, bool include_bank = false); + Item* GetItemFromIndex(int32 index); + void MoveItem(Item* item, sint32 inv_slot, int16 slot, bool erase_old = true); + bool MoveItem(sint32 to_bag_id, int16 from_index, sint8 to, int8 charges); + Item* GetItemFromUniqueID(int32 item_id, bool include_bank = false, bool lock = true); + Item* GetItemFromID(int32 item_id, int8 count = 0, bool include_bank = false, bool lock = true); + bool AssignItemToFreeSlot(Item* item); + int16 GetNumberOfFreeSlots(); + int16 GetNumberOfItems(); + bool HasFreeSlot(); + bool HasFreeBagSlot(); + void DestroyItem(int16 index); + Item* CanStack(Item* item, bool include_bank = false); + + void RemoveItem(Item* item, bool delete_item = false); + void AddItem(Item* item); + + Item* GetItem(sint32 bag_slot, int16 slot); + + EQ2Packet* serialize(Player* player, int16 version); + uchar* xor_packet; + uchar* orig_packet; + map* GetAllItems(); + bool HasFreeBankSlot(); + int8 FindFreeBankSlot(); + +private: + void Stack(Item* orig_item, Item* item); + Mutex MPlayerItems; + int16 packet_count; +}; +class OverFlowItemList : public PlayerItemList { +public: + bool OverFlowSlotFull(); + int8 GetNextOverFlowSlot(); + bool AddItem(Item* item); + Item* GetOverFlowItem(); +}; +class EquipmentItemList{ +public: + EquipmentItemList(); + EquipmentItemList(const EquipmentItemList& list); + ~EquipmentItemList(); + Item* items[NUM_SLOTS]; + + vector* GetAllEquippedItems(); + + bool HasItem(int32 id); + int8 GetNumberOfItems(); + Item* GetItemFromUniqueID(int32 item_id); + Item* GetItemFromItemID(int32 item_id); + void SetItem(int8 slot_id, Item* item); + void RemoveItem(int8 slot, bool delete_item = false); + Item* GetItem(int8 slot_id); + bool AddItem(int8 slot, Item* item); + bool CheckEquipSlot(Item* tmp, int8 slot); + bool CanItemBeEquippedInSlot(Item* tmp, int8 slot); + int8 GetFreeSlot(Item* tmp, int8 slot_id = 255); + ItemStatsValues* CalculateEquipmentBonuses(); + EQ2Packet* serialize(int16 version); + uchar* xor_packet; + uchar* orig_packet; +private: + Mutex MEquipmentItems; +}; + +#endif + diff --git a/EQ2/source/WorldServer/Items/Items_DoV.h b/EQ2/source/WorldServer/Items/Items_DoV.h new file mode 100644 index 000000000..9bdce6798 --- /dev/null +++ b/EQ2/source/WorldServer/Items/Items_DoV.h @@ -0,0 +1,881 @@ +/* + EQ2Emulator: Everquest II Server Emulator + Copyright (C) 2007 EQ2EMulator Development Team (http://www.eq2emulator.net) + + This file is part of EQ2Emulator. + + EQ2Emulator is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + EQ2Emulator is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with EQ2Emulator. If not, see . +*/ +#ifndef __EQ2_ITEMS__ +#define __EQ2_ITEMS__ +#include +#include +#include "../../common/types.h" +#include "../../common/DataBuffer.h" +#include "../../common/MiscFunctions.h" +#include "../Commands/Commands.h" +#include "../../common/ConfigReader.h" + +using namespace std; +class MasterItemList; +class Player; +class Entity; +extern MasterItemList master_item_list; +#define EQ2_PRIMARY_SLOT 0 +#define EQ2_SECONDARY_SLOT 1 +#define EQ2_HEAD_SLOT 2 +#define EQ2_CHEST_SLOT 3 +#define EQ2_SHOULDERS_SLOT 4 +#define EQ2_FOREARMS_SLOT 5 +#define EQ2_HANDS_SLOT 6 +#define EQ2_LEGS_SLOT 7 +#define EQ2_FEET_SLOT 8 +#define EQ2_LRING_SLOT 9 +#define EQ2_RRING_SLOT 10 +#define EQ2_EARS_SLOT_1 11 +#define EQ2_EARS_SLOT_2 12 +#define EQ2_NECK_SLOT 13 +#define EQ2_LWRIST_SLOT 14 +#define EQ2_RWRIST_SLOT 15 +#define EQ2_RANGE_SLOT 16 +#define EQ2_AMMO_SLOT 17 +#define EQ2_WAIST_SLOT 18 +#define EQ2_CLOAK_SLOT 19 +#define EQ2_CHARM_SLOT_1 20 +#define EQ2_CHARM_SLOT_2 21 +#define EQ2_FOOD_SLOT 22 +#define EQ2_DRINK_SLOT 23 +#define EQ2_TEXTURES_SLOT 24 +#define EQ2_HAIR_SLOT 25 +#define EQ2_BEARD_SLOT 26 +#define EQ2_WINGS_SLOT 27 +#define EQ2_NAKED_CHEST_SLOT 28 +#define EQ2_NAKED_LEGS_SLOT 29 +#define EQ2_BACK_SLOT 30 + +#define PRIMARY_SLOT 1 +#define SECONDARY_SLOT 2 +#define HEAD_SLOT 4 +#define CHEST_SLOT 8 +#define SHOULDERS_SLOT 16 +#define FOREARMS_SLOT 32 +#define HANDS_SLOT 64 +#define LEGS_SLOT 128 +#define FEET_SLOT 256 +#define LRING_SLOT 512 +#define RRING_SLOT 1024 +#define EARS_SLOT_1 2048 +#define EARS_SLOT_2 4096 +#define NECK_SLOT 8192 +#define LWRIST_SLOT 16384 +#define RWRIST_SLOT 32768 +#define RANGE_SLOT 65536 +#define AMMO_SLOT 131072 +#define WAIST_SLOT 262144 +#define CLOAK_SLOT 524288 +#define CHARM_SLOT_1 1048576 +#define CHARM_SLOT_2 2097152 +#define FOOD_SLOT 4194304 +#define DRINK_SLOT 8388608 +#define TEXTURES_SLOT 16777216 +#define HAIR_SLOT 33554432 +#define BEARD_SLOT 67108864 +#define WINGS_SLOT 134217728 +#define NAKED_CHEST_SLOT 268435456 +#define NAKED_LEGS_SLOT 536870912 +#define BACK_SLOT 1073741824 + +#define NUM_BANK_SLOTS 12 +#define NUM_SHARED_BANK_SLOTS 8 +#define NUM_SLOTS 25 +#define NUM_INV_SLOTS 6 +#define INV_SLOT1 0 +#define INV_SLOT2 50 +#define INV_SLOT3 100 +#define INV_SLOT4 150 +#define INV_SLOT5 200 +#define INV_SLOT6 250 +#define BANK_SLOT1 1000 +#define BANK_SLOT2 1100 +#define BANK_SLOT3 1200 +#define BANK_SLOT4 1300 +#define BANK_SLOT5 1400 +#define BANK_SLOT6 1500 +#define BANK_SLOT7 1600 +#define BANK_SLOT8 1700 +#define ATTUNED 1 +#define ATTUNEABLE 2 +#define ARTIFACT 4 +#define LORE 8 +#define TEMPORARY 16 +#define NO_TRADE 32 +#define NO_VALUE 64 +#define NO_ZONE 128 +#define NO_DESTROY 256 +#define CRAFTED 512 +#define GOOD_ONLY 1024 +#define EVIL_ONLY 2048 + +#define ITEM_WIELD_TYPE_DUAL 1 +#define ITEM_WIELD_TYPE_SINGLE 2 +#define ITEM_WIELD_TYPE_TWO_HAND 4 + +#define ITEM_TYPE_NORMAL 0 +#define ITEM_TYPE_WEAPON 1 +#define ITEM_TYPE_RANGED 2 +#define ITEM_TYPE_ARMOR 3 +#define ITEM_TYPE_SHIELD 4 +#define ITEM_TYPE_BAG 5 +#define ITEM_TYPE_SKILL 6 +#define ITEM_TYPE_RECIPE 7 +#define ITEM_TYPE_FOOD 8 +#define ITEM_TYPE_BAUBLE 9 +#define ITEM_TYPE_HOUSE 10 +#define ITEM_TYPE_THROWN 11 +#define ITEM_TYPE_HOUSE_CONTAINER 12 +#define ITEM_TYPE_BOOK 13 +#define ITEM_TYPE_ADORNMENT 14 +#define ITEM_TYPE_PATTERN 15 +#define ITEM_TYPE_ARMORSET 16 + +#define ITEM_MENU_TYPE_GENERIC 1 +#define ITEM_MENU_TYPE_EQUIP 2 +#define ITEM_MENU_TYPE_BAG 4 +#define ITEM_MENU_TYPE_HOUSE 8 +#define ITEM_MENU_TYPE_SCRIBE 32 +#define ITEM_MENU_TYPE_INVALID 128 +#define ITEM_MENU_TYPE_BROKEN 512 +#define ITEM_MENU_TYPE_ATTUNED 2048 +#define ITEM_MENU_TYPE_ATTUNEABLE 4096 +#define ITEM_MENU_TYPE_BOOK 8192 +#define ITEM_MENU_TYPE_DISPLAY_CHARGES 16384 +#define ITEM_MENU_TYPE_NAMEPET 65536 +#define ITEM_MENU_TYPE_CONSUME 262144 +#define ITEM_MENU_TYPE_USE 524288 +#define ITEM_MENU_TYPE_DRINK 8388608 +#define ITEM_MENU_TYPE_REDEEM 536870912 + +#define ITEM_TAG_UNCOMMON 3 //tier tags +#define ITEM_TAG_TREASURED 4 +#define ITEM_TAG_LEGENDARY 7 +#define ITEM_TAG_FABLED 9 +#define ITEM_TAG_MYTHICAL 12 + +#define ITEM_BROKER_TYPE_ANY 0xFFFFFFFF +#define ITEM_BROKER_TYPE_ADORNMENT 134217728 +#define ITEM_BROKER_TYPE_AMMO 1024 +#define ITEM_BROKER_TYPE_ATTUNEABLE 16384 +#define ITEM_BROKER_TYPE_BAG 2048 +#define ITEM_BROKER_TYPE_BAUBLE 16777216 +#define ITEM_BROKER_TYPE_BOOK 128 +#define ITEM_BROKER_TYPE_CHAINARMOR 2097152 +#define ITEM_BROKER_TYPE_CLOAK 1073741824 +#define ITEM_BROKER_TYPE_CLOTHARMOR 524288 +#define ITEM_BROKER_TYPE_COLLECTABLE 67108864 +#define ITEM_BROKER_TYPE_CRUSHWEAPON 4 +#define ITEM_BROKER_TYPE_DRINK 131072 +#define ITEM_BROKER_TYPE_FOOD 4096 +#define ITEM_BROKER_TYPE_HOUSEITEM 512 +#define ITEM_BROKER_TYPE_JEWELRY 262144 +#define ITEM_BROKER_TYPE_LEATHERARMOR 1048576 +#define ITEM_BROKER_TYPE_LORE 8192 +#define ITEM_BROKER_TYPE_MISC 1 +#define ITEM_BROKER_TYPE_PIERCEWEAPON 8 +#define ITEM_BROKER_TYPE_PLATEARMOR 4194304 +#define ITEM_BROKER_TYPE_POISON 65536 +#define ITEM_BROKER_TYPE_POTION 32768 +#define ITEM_BROKER_TYPE_RECIPEBOOK 8388608 +#define ITEM_BROKER_TYPE_SALESDISPLAY 33554432 +#define ITEM_BROKER_TYPE_SHIELD 32 +#define ITEM_BROKER_TYPE_SLASHWEAPON 2 +#define ITEM_BROKER_TYPE_SPELLSCROLL 64 +#define ITEM_BROKER_TYPE_TINKERED 268435456 +#define ITEM_BROKER_TYPE_TRADESKILL 256 + +#define ITEM_BROKER_SLOT_ANY 0xFFFFFFFF +#define ITEM_BROKER_SLOT_AMMO 65536 +#define ITEM_BROKER_SLOT_CHARM 524288 +#define ITEM_BROKER_SLOT_CHEST 32 +#define ITEM_BROKER_SLOT_CLOAK 262144 +#define ITEM_BROKER_SLOT_DRINK 2097152 +#define ITEM_BROKER_SLOT_EARS 4096 +#define ITEM_BROKER_SLOT_FEET 1024 +#define ITEM_BROKER_SLOT_FOOD 1048576 +#define ITEM_BROKER_SLOT_FOREARMS 128 +#define ITEM_BROKER_SLOT_HANDS 256 +#define ITEM_BROKER_SLOT_HEAD 16 +#define ITEM_BROKER_SLOT_LEGS 512 +#define ITEM_BROKER_SLOT_NECK 8192 +#define ITEM_BROKER_SLOT_PRIMARY 1 +#define ITEM_BROKER_SLOT_PRIMARY_2H 2 +#define ITEM_BROKER_SLOT_RANGE_WEAPON 32768 +#define ITEM_BROKER_SLOT_RING 2048 +#define ITEM_BROKER_SLOT_SECONDARY 8 +#define ITEM_BROKER_SLOT_SHOULDERS 64 +#define ITEM_BROKER_SLOT_WAIST 131072 +#define ITEM_BROKER_SLOT_WRIST 16384 + +#define ITEM_BROKER_STAT_TYPE_NONE 0 +#define ITEM_BROKER_STAT_TYPE_DEF 2 +#define ITEM_BROKER_STAT_TYPE_STR 4 +#define ITEM_BROKER_STAT_TYPE_STA 8 +#define ITEM_BROKER_STAT_TYPE_AGI 16 +#define ITEM_BROKER_STAT_TYPE_WIS 32 +#define ITEM_BROKER_STAT_TYPE_INT 64 +#define ITEM_BROKER_STAT_TYPE_HEALTH 128 +#define ITEM_BROKER_STAT_TYPE_POWER 256 +#define ITEM_BROKER_STAT_TYPE_HEAT 512 +#define ITEM_BROKER_STAT_TYPE_COLD 1024 +#define ITEM_BROKER_STAT_TYPE_MAGIC 2048 +#define ITEM_BROKER_STAT_TYPE_MENTAL 4096 +#define ITEM_BROKER_STAT_TYPE_DIVINE 8192 +#define ITEM_BROKER_STAT_TYPE_POISON 16384 +#define ITEM_BROKER_STAT_TYPE_DISEASE 32768 +#define ITEM_BROKER_STAT_TYPE_CRUSH 65536 +#define ITEM_BROKER_STAT_TYPE_SLASH 131072 +#define ITEM_BROKER_STAT_TYPE_PIERCE 262144 +#define ITEM_BROKER_STAT_TYPE_CRITICAL 524288 +#define ITEM_BROKER_STAT_TYPE_DBL_ATTACK 1048576 +#define ITEM_BROKER_STAT_TYPE_ABILITY_MOD 2097152 +#define ITEM_BROKER_STAT_TYPE_POTENCY 4194304 + + + +#define OVERFLOW_SLOT 0xFFFFFFFE +#define SLOT_INVALID 0xFFFF + +#define ITEM_STAT_STR 0 +#define ITEM_STAT_STA 1 +#define ITEM_STAT_AGI 2 +#define ITEM_STAT_WIS 3 +#define ITEM_STAT_INT 4 + +#define ITEM_STAT_VS_PHYSICAL 200 +#define ITEM_STAT_VS_HEAT 201 //elemental +#define ITEM_STAT_VS_POISON 202 //noxious +#define ITEM_STAT_VS_MAGIC 203 //arcane +#define ITEM_STAT_VS_DROWNING 210 +#define ITEM_STAT_VS_FALLING 211 +#define ITEM_STAT_VS_PAIN 212 +#define ITEM_STAT_VS_MELEE 213 + +#define ITEM_STAT_VS_SLASH 204 +#define ITEM_STAT_VS_CRUSH 205 +#define ITEM_STAT_VS_PIERCE 206 +//#define ITEM_STAT_VS_HEAT 203 //just so no build error +#define ITEM_STAT_VS_COLD 207 +//#define ITEM_STAT_VS_MAGIC 205 //just so no build error +#define ITEM_STAT_VS_MENTAL 208 +#define ITEM_STAT_VS_DIVINE 209 +#define ITEM_STAT_VS_DISEASE 214 +//#define ITEM_STAT_VS_POISON 209 //just so no build error +//#define ITEM_STAT_VS_DROWNING 210 //just so no build error +//#define ITEM_STAT_VS_FALLING 211 //just so no build error +//#define ITEM_STAT_VS_PAIN 212 //just so no build error +//#define ITEM_STAT_VS_MELEE 213 //just so no build error + +#define ITEM_STAT_DMG_SLASH 300 +#define ITEM_STAT_DMG_CRUSH 301 +#define ITEM_STAT_DMG_PIERCE 302 +#define ITEM_STAT_DMG_HEAT 303 +#define ITEM_STAT_DMG_COLD 304 +#define ITEM_STAT_DMG_MAGIC 305 +#define ITEM_STAT_DMG_MENTAL 306 +#define ITEM_STAT_DMG_DIVINE 307 +#define ITEM_STAT_DMG_DISEASE 308 +#define ITEM_STAT_DMG_POISON 309 +#define ITEM_STAT_DMG_DROWNING 310 +#define ITEM_STAT_DMG_FALLING 311 +#define ITEM_STAT_DMG_PAIN 312 +#define ITEM_STAT_DMG_MELEE 313 + +#define ITEM_STAT_HEALTH 500 +#define ITEM_STAT_POWER 501 +#define ITEM_STAT_CONCENTRATION 502 + +#define ITEM_STAT_HPREGEN 600 +#define ITEM_STAT_MANAREGEN 601 +#define ITEM_STAT_HPREGENPPT 602 +#define ITEM_STAT_MPREGENPPT 603 +#define ITEM_STAT_COMBATHPREGENPPT 604 +#define ITEM_STAT_COMBATMPREGENPPT 605 +#define ITEM_STAT_MAXHP 606 +#define ITEM_STAT_MAXHPPERC 607 +#define ITEM_STAT_SPEED 608 +#define ITEM_STAT_SLOW 609 +#define ITEM_STAT_MOUNTSPEED 610 +#define ITEM_STAT_MOUNTAIRSPEED 611 +#define ITEM_STAT_OFFENSIVESPEED 612 +#define ITEM_STAT_ATTACKSPEED 613 +#define ITEM_STAT_MAXMANA 614 +#define ITEM_STAT_MAXMANAPERC 615 +#define ITEM_STAT_MAXATTPERC 616 +#define ITEM_STAT_BLURVISION 617 +#define ITEM_STAT_MAGICLEVELIMMUNITY 618 +#define ITEM_STAT_HATEGAINMOD 619 +#define ITEM_STAT_COMBATEXPMOD 620 +#define ITEM_STAT_TRADESKILLEXPMOD 621 +#define ITEM_STAT_ACHIEVEMENTEXPMOD 622 +#define ITEM_STAT_SIZEMOD 623 +#define ITEM_STAT_DPS 624 +#define ITEM_STAT_STEALTH 625 +#define ITEM_STAT_INVIS 626 +#define ITEM_STAT_SEESTEALTH 627 +#define ITEM_STAT_SEEINVIS 628 +#define ITEM_STAT_EFFECTIVELEVELMOD 629 +#define ITEM_STAT_RIPOSTECHANCE 630 +#define ITEM_STAT_PARRYCHANCE 631 +#define ITEM_STAT_DODGECHANCE 632 +#define ITEM_STAT_AEAUTOATTACKCHANCE 633 +#define ITEM_STAT_MULTIATTACKCHANCE 634 +#define ITEM_STAT_SPELLMULTIATTACKCHANCE 635 +#define ITEM_STAT_FLURRY 636 +#define ITEM_STAT_MELEEDAMAGEMULTIPLIER 637 +#define ITEM_STAT_EXTRAHARVESTCHANCE 638 +#define ITEM_STAT_EXTRASHIELDBLOCKCHANCE 639 +#define ITEM_STAT_ITEMHPREGENPPT 640 +#define ITEM_STAT_ITEMPPREGENPPT 641 +#define ITEM_STAT_MELEECRITCHANCE 642 +#define ITEM_STAT_CRITAVOIDANCE 643 +#define ITEM_STAT_BENEFICIALCRITCHANCE 644 +#define ITEM_STAT_CRITBONUS 645 +#define ITEM_STAT_POTENCY 646 +#define ITEM_STAT_UNCONSCIOUSHPMOD 647 +#define ITEM_STAT_ABILITYREUSESPEED 648 +#define ITEM_STAT_ABILITYRECOVERYSPEED 649 +#define ITEM_STAT_ABILITYCASTINGSPEED 650 +#define ITEM_STAT_SPELLREUSESPEED 651 +#define ITEM_STAT_MELEEWEAPONRANGE 652 +#define ITEM_STAT_RANGEDWEAPONRANGE 653 +#define ITEM_STAT_FALLINGDAMAGEREDUCTION 654 +#define ITEM_STAT_RIPOSTEDAMAGE 655 +#define ITEM_STAT_MINIMUMDEFLECTIONCHANCE 656 +#define ITEM_STAT_MOVEMENTWEAVE 657 +#define ITEM_STAT_COMBATHPREGEN 658 +#define ITEM_STAT_COMBATMANAREGEN 659 +#define ITEM_STAT_CONTESTSPEEDBOOST 660 +#define ITEM_STAT_TRACKINGAVOIDANCE 661 +#define ITEM_STAT_STEALTHINVISSPEEDMOD 662 +#define ITEM_STAT_LOOT_COIN 663 +#define ITEM_STAT_ARMORMITIGATIONINCREASE 664 +#define ITEM_STAT_AMMOCONSERVATION 665 +#define ITEM_STAT_STRIKETHROUGH 666 +#define ITEM_STAT_STATUSBONUS 667 +#define ITEM_STAT_ACCURACY 668 +#define ITEM_STAT_COUNTERSTRIKE 669 +#define ITEM_STAT_SHIELDBASH 670 +#define ITEM_STAT_WEAPONDAMAGEBONUS 671 +#define ITEM_STAT_ADDITIONALRIPOSTECHANCE 672 +#define ITEM_STAT_CRITICALMITIGATION 673 +#define ITEM_STAT_PVPTOUGHNESS 674 +#define ITEM_STAT_STAMINABONUS 675 +#define ITEM_STAT_WISDOMITBONUS 676 +#define ITEM_STAT_HEALRECEIVE 677 +#define ITEM_STAT_HEALRECEIVEPERC 678 +#define ITEM_STAT_PVPCRITICALMITIGATION 679 +#define ITEM_STAT_BASEAVOIDANCEBONUS 680 + + +//#define ITEM_STAT_HPREGEN 600 +//#define ITEM_STAT_MANAREGEN 601 +//#define ITEM_STAT_HPREGENPPT 602 +//#define ITEM_STAT_MPREGENPPT 603 +//#define ITEM_STAT_COMBATHPREGENPPT 604 +//#define ITEM_STAT_COMBATMPREGENPPT 605 +//#define ITEM_STAT_MAXHP 606 +//#define ITEM_STAT_MAXHPPERC 607 +//#define ITEM_STAT_SPEED 608 +//#define ITEM_STAT_SLOW 609 +//#define ITEM_STAT_MOUNTSPEED 610 +//#define ITEM_STAT_OFFENSIVESPEED 611 +//#define ITEM_STAT_ATTACKSPEED 612 +//#define ITEM_STAT_MAXMANA 613 +//#define ITEM_STAT_MAXMANAPERC 614 +//#define ITEM_STAT_MAXATTPERC 615 +//#define ITEM_STAT_BLURVISION 616 +//#define ITEM_STAT_MAGICLEVELIMMUNITY 617 +//#define ITEM_STAT_HATEGAINMOD 618 +//#define ITEM_STAT_COMBATEXPMOD 619 +//#define ITEM_STAT_TRADESKILLEXPMOD 620 +//#define ITEM_STAT_ACHIEVEMENTEXPMOD 621 +//#define ITEM_STAT_SIZEMOD 622 +//#define ITEM_STAT_UNKNOWN 623 +//#define ITEM_STAT_STEALTH 624 +//#define ITEM_STAT_INVIS 625 +//#define ITEM_STAT_SEESTEALTH 626 +//#define ITEM_STAT_SEEINVIS 627 +//#define ITEM_STAT_EFFECTIVELEVELMOD 628 +//#define ITEM_STAT_RIPOSTECHANCE 629 +//#define ITEM_STAT_PARRYCHANCE 630 +//#define ITEM_STAT_DODGECHANCE 631 +//#define ITEM_STAT_AEAUTOATTACKCHANCE 632 +//#define ITEM_STAT_DOUBLEATTACKCHANCE 633 +//#define ITEM_STAT_RANGEDDOUBLEATTACKCHANCE 634 +//#define ITEM_STAT_SPELLDOUBLEATTACKCHANCE 635 +//#define ITEM_STAT_FLURRY 636 +//#define ITEM_STAT_EXTRAHARVESTCHANCE 637 +//#define ITEM_STAT_EXTRASHIELDBLOCKCHANCE 638 +#define ITEM_STAT_DEFLECTIONCHANCE 400 //just so no build error +//#define ITEM_STAT_ITEMHPREGENPPT 640 +//#define ITEM_STAT_ITEMPPREGENPPT 641 +//#define ITEM_STAT_MELEECRITCHANCE 642 +//#define ITEM_STAT_RANGEDCRITCHANCE 643 +//#define ITEM_STAT_DMGSPELLCRITCHANCE 644 +//#define ITEM_STAT_HEALSPELLCRITCHANCE 645 +//#define ITEM_STAT_MELEECRITBONUS 646 +//#define ITEM_STAT_RANGEDCRITBONUS 647 +//#define ITEM_STAT_DMGSPELLCRITBONUS 648 +//#define ITEM_STAT_HEALSPELLCRITBONUS 649 +//#define ITEM_STAT_UNCONSCIOUSHPMOD 650 +//#define ITEM_STAT_SPELLTIMEREUSEPCT 651 +//#define ITEM_STAT_SPELLTIMERECOVERYPCT 652 +//#define ITEM_STAT_SPELLTIMECASTPCT 653 +//#define ITEM_STAT_MELEEWEAPONRANGE 654 +//#define ITEM_STAT_RANGEDWEAPONRANGE 655 +//#define ITEM_STAT_FALLINGDAMAGEREDUCTION 656 +//#define ITEM_STAT_SHIELDEFFECTIVENESS 657 +//#define ITEM_STAT_RIPOSTEDAMAGE 658 +//#define ITEM_STAT_MINIMUMDEFLECTIONCHANCE 659 +//#define ITEM_STAT_MOVEMENTWEAVE 660 +//#define ITEM_STAT_COMBATHPREGEN 661 +//#define ITEM_STAT_COMBATMANAREGEN 662 +//#define ITEM_STAT_CONTESTSPEEDBOOST 663 +//#define ITEM_STAT_TRACKINGAVOIDANCE 664 +//#define ITEM_STAT_STEALTHINVISSPEEDMOD 665 +//#define ITEM_STAT_LOOT_COIN 666 +//#define ITEM_STAT_ARMORMITIGATIONINCREASE 667 +//#define ITEM_STAT_AMMOCONSERVATION 668 +//#define ITEM_STAT_STRIKETHROUGH 669 +//#define ITEM_STAT_STATUSBONUS 670 +//#define ITEM_STAT_ACCURACY 671 +//#define ITEM_STAT_COUNTERSTRIKE 672 +//#define ITEM_STAT_SHIELDBASH 673 +//#define ITEM_STAT_WEAPONDAMAGEBONUS 674 +//#define ITEM_STAT_ADDITIONALRIPOSTECHANCE 675 +//#define ITEM_STAT_CRITICALMITIGATION 676 +//#define ITEM_STAT_COMBATARTDAMAGE 677 +//#define ITEM_STAT_SPELLDAMAGE 678 +//#define ITEM_STAT_HEALAMOUNT 679 +//#define ITEM_STAT_TAUNTAMOUNT 680 + +#define ITEM_STAT_SPELL_DAMAGE 700 +#define ITEM_STAT_HEAL_AMOUNT 701 +#define ITEM_STAT_SPELL_AND_HEAL 702 +#define ITEM_STAT_COMBAT_ART_DAMAGE 703 +#define ITEM_STAT_SPELL_AND_COMBAT_ART_DAMAGE 704 +#define ITEM_STAT_TAUNT_AMOUNT 705 +#define ITEM_STAT_TAUNT_AND_COMBAT_ART_DAMAGE 706 +#define ITEM_STAT_ABILITY_MODIFIER 707 + + + +#pragma pack(1) +struct ItemStatsValues{ + sint16 str; + sint16 sta; + sint16 agi; + sint16 wis; + sint16 int_; + sint16 vs_slash; + sint16 vs_crush; + sint16 vs_pierce; + sint16 vs_heat; + sint16 vs_cold; + sint16 vs_magic; + sint16 vs_mental; + sint16 vs_divine; + sint16 vs_disease; + sint16 vs_poison; + sint16 health; + sint16 power; + sint8 concentration; + sint16 ability_modifier; + sint16 criticalmitigation; + sint16 extrashieldblockchance; + sint16 beneficialcritchance; + sint16 critbonus; + sint16 potency; + sint16 hategainmod; + sint16 abilityreusespeed; + sint16 abilitycastingspeed; + sint16 abilityrecoveryspeed; + sint16 spellreusespeed; + sint16 spellmultiattackchance; + sint16 dps; + sint16 attackspeed; + sint16 multiattackchance; + sint16 aeautoattackchance; + sint16 strikethrough; + sint16 accuracy; + sint16 offensivespeed; +}; +struct ItemCore{ + int32 item_id; + sint32 soe_id; + int32 bag_id; + sint32 inv_slot_id; + sint16 slot_id; + int8 index; + int16 icon; + int16 count; + int8 tier; + int8 num_slots; + int32 unique_id; + int8 num_free_slots; + int16 recommended_level; +}; +#pragma pack() +struct ItemStat{ + string stat_name; + int8 stat_type; + sint16 stat_subtype; + int16 stat_type_combined; + float value; +}; +struct ItemLevelOverride{ + int8 adventure_class; + int8 tradeskill_class; + int16 level; +}; +struct ItemClass{ + int8 adventure_class; + int8 tradeskill_class; + int16 level; +}; +struct ItemAppearance{ + int16 type; + int8 red; + int8 green; + int8 blue; + int8 highlight_red; + int8 highlight_green; + int8 highlight_blue; +}; +class PlayerItemList; +class Item{ +public: + #pragma pack(1) + struct ItemStatString{ + EQ2_8BitString stat_string; + }; + struct Generic_Info{ + int8 show_name; + int8 creator_flag; + int16 item_flags; + int8 condition; + int32 weight; // num/10 + int32 skill_req1; + int32 skill_req2; + int16 skill_min; + int8 item_type; //0=normal, 1=weapon, 2=range, 3=armor, 4=shield, 5=bag, 6=scroll, 7=recipe, 8=food, 9=bauble, 10=house item, 11=thrown, 12=house container, 13=adormnet, 14=??, 16=profile, 17=patter set, 18=item set, 19=book, 20=decoration, 21=dungeon maker, 22=marketplace + int16 appearance_id; + int8 appearance_red; + int8 appearance_green; + int8 appearance_blue; + int8 appearance_highlight_red; + int8 appearance_highlight_green; + int8 appearance_highlight_blue; + int8 collectable; + int32 offers_quest_id; + int32 part_of_quest_id; + int16 max_charges; + int8 display_charges; + int64 adventure_classes; + int64 tradeskill_classes; + int16 adventure_default_level; + int16 tradeskill_default_level; + int8 usable; + }; + struct Armor_Info { + int16 mitigation_low; + int16 mitigation_high; + }; + struct Weapon_Info { + int16 wield_type; + int16 damage_low1; + int16 damage_high1; + int16 damage_low2; + int16 damage_high2; + int16 damage_low3; + int16 damage_high3; + int16 delay; + float rating; + }; + struct Shield_Info { + Armor_Info armor_info; + }; + struct Ranged_Info { + Weapon_Info weapon_info; + int16 range_low; + int16 range_high; + }; + struct Bag_Info { + int8 num_slots; + int16 weight_reduction; + }; + struct Food_Info{ + int8 type; //0=water, 1=food + int8 level; + float duration; + int8 satiation; + }; + struct Bauble_Info{ + int16 cast; + int16 recovery; + int32 duration; + float recast; + int8 display_slot_optional; + int8 display_cast_time; + int8 display_bauble_type; + float effect_radius; + int32 max_aoe_targets; + int8 display_until_cancelled; + }; + struct Book_Info{ + int8 language; + EQ2_16BitString author; + EQ2_16BitString title; + }; + struct Skill_Info{ + int32 spell_id; + int32 spell_tier; + }; + struct House_Info{ + int32 status_rent_reduction; + }; + struct HouseContainer_Info{ + int16 disallowed_types; + int16 allowed_types; + int8 num_slots; + }; + struct RecipeBook_Info{ + vector recipes; + int8 uses; + }; + struct Thrown_Info{ + sint32 range; + sint32 damage_modifier; + float hit_bonus; + int32 damage_type; + }; + struct ItemEffect{ + EQ2_16BitString effect; + int8 percentage; + int8 subbulletflag; + }; + #pragma pack() + Item(); + Item(Item* in_item); + ~Item(); + string lowername; + string name; + string description; + int8 stack_count; + int32 sell_price; + int32 max_sell_value; + bool save_needed; + int8 weapon_type; + string adornment; + string creator; + vector item_stats; + vector item_string_stats; + vector item_level_overrides; + vector item_effects; + Generic_Info generic_info; + Weapon_Info* weapon_info; + Ranged_Info* ranged_info; + Armor_Info* armor_info; + Bag_Info* bag_info; + Food_Info* food_info; + Bauble_Info* bauble_info; + Book_Info* book_info; + Skill_Info* skill_info; + RecipeBook_Info* recipebook_info; + Thrown_Info* thrown_info; + vector slot_data; + ItemCore details; + int32 spell_id; + int8 spell_tier; + string item_script; + + void AddEffect(string effect, int8 percentage, int8 subbulletflag); + int32 GetMaxSellValue(); + void SetMaxSellValue(int32 val); + void SetItem(Item* old_item); + int16 GetOverrideLevel(int8 adventure_class, int8 tradeskill_class); + void AddLevelOverride(int8 adventure_class, int8 tradeskill_class, int16 level); + void AddLevelOverride(ItemLevelOverride* class_); + bool CheckClassLevel(int8 adventure_class, int8 tradeskill_class, int16 level); + bool CheckClass(int8 adventure_class, int8 tradeskill_class); + bool CheckLevel(int8 adventure_class, int8 tradeskill_class, int16 level); + void SetAppearance(int16 type, int8 red, int8 green, int8 blue, int8 highlight_red, int8 highlight_green, int8 highlight_blue); + void SetAppearance(ItemAppearance* appearance); + void AddStat(ItemStat* in_stat); + void AddStatString(ItemStatString* in_stat); + void AddStat(int8 type, int16 subtype, float value, char* name = 0); + void SetWeaponType(int8 type); + int8 GetWeaponType(); + bool HasSlot(int8 slot, int8 slot2 = 255); + bool IsNormal(); + bool IsWeapon(); + bool IsArmor(); + bool IsRanged(); + bool IsBag(); + bool IsFood(); + bool IsBauble(); + bool IsSkill(); + bool IsHouseItem(); + bool IsHouseContainer(); + bool IsShield(); + bool IsAdornment(); + bool IsAmmo(); + bool IsBook(); + bool IsChainArmor(); + bool IsClothArmor(); + bool IsCollectable(); + bool IsCloak(); + bool IsCrushWeapon(); + bool IsFoodFood(); + bool IsFoodDrink(); + bool IsJewelry(); + bool IsLeatherArmor(); + bool IsMisc(); + bool IsPierceWeapon(); + bool IsPlateArmor(); + bool IsPoison(); + bool IsPotion(); + bool IsRecipeBook(); + bool IsSalesDisplay(); + bool IsSlashWeapon(); + bool IsSpellScroll(); + bool IsTinkered(); + bool IsTradeskill(); + bool IsThrown(); + void SetItemScript(string name); + const char* GetItemScript(); + int32 CalculateRepairCost(); + + void SetItemType(int8 in_type); + void serialize(PacketStruct* packet, bool show_name = false, Player* player = 0, int16 packet_type = 0, int8 subtype = 0, bool loot_item = false); + EQ2Packet* serialize(int16 version, bool show_name = false, Player* player = 0, bool include_twice = true, int16 packet_type = 0, int8 subtype = 0, bool merchant_item = false, bool loot_item = false); + PacketStruct* PrepareItem(int16 version, bool merchant_item = false, bool loot_item = false); + bool CheckFlag(int32 flag); + void AddSlot(int8 slot_id); + void SetSlots(int32 slots); + bool needs_deletion; +}; +class MasterItemList{ +public: + ~MasterItemList(); + map items; + + Item* GetItem(int32 id); + Item* GetItemByName(const char *name); + ItemStatsValues* CalculateItemBonuses(int32 item_id, Entity* entity = 0); + ItemStatsValues* CalculateItemBonuses(Item* desc, Entity* entity = 0, ItemStatsValues* values = 0); + vector* GetItems(string name, int32 itype, int32 ltype, int32 btype, int64 minprice, int64 maxprice, int8 minskill, int8 maxskill, string seller, string adornment, int8 mintier, int8 maxtier, int16 minlevel, int16 maxlevel, sint8 itemclass); + vector* GetItems(map criteria); + void AddItem(Item* item); + bool IsBag(int32 item_id); + void RemoveAll(); + static int32 NextUniqueID(); + static void ResetUniqueID(int32 new_id); + static int32 next_unique_id; +}; +class PlayerItemList { +public: + PlayerItemList(); + ~PlayerItemList(); +// int16 number; + map indexed_items; + map > items; +// map< int8, Item* > inv_items; +// map< int8, Item* > bank_items; + bool SharedBankAddAllowed(Item* item); + vector* GetItemsFromBagID(sint32 bag_id); + vector* GetItemsInBag(Item* bag); + Item* GetBag(int8 inventory_slot, bool lock = true); + bool HasItem(int32 id, bool include_bank = false); + Item* GetItemFromIndex(int32 index); + void MoveItem(Item* item, sint32 inv_slot, int16 slot, bool erase_old = true); + bool MoveItem(sint32 to_bag_id, int16 from_index, sint8 to, int8 charges); + Item* GetItemFromUniqueID(int32 item_id, bool include_bank = false, bool lock = true); + Item* GetItemFromID(int32 item_id, int8 count = 0, bool include_bank = false, bool lock = true); + bool AssignItemToFreeSlot(Item* item); + int16 GetNumberOfFreeSlots(); + int16 GetNumberOfItems(); + bool HasFreeSlot(); + bool HasFreeBagSlot(); + void DestroyItem(int16 index); + Item* CanStack(Item* item, bool include_bank = false); + + void RemoveItem(Item* item, bool delete_item = false); + void AddItem(Item* item); + + Item* GetItem(sint32 bag_slot, int16 slot); + + EQ2Packet* serialize(Player* player, int16 version); + uchar* xor_packet; + uchar* orig_packet; + map* GetAllItems(); + bool HasFreeBankSlot(); + int8 FindFreeBankSlot(); + + ///Get the first free slot and stor them in the provided variables + ///Will contain the bag id of the first free spot + ///Will contain the slot id of the first free slot + ///True if a free slot was found + bool GetFirstFreeSlot(sint32* bag_id, sint16* slot); +private: + void Stack(Item* orig_item, Item* item); + Mutex MPlayerItems; + int16 packet_count; +}; +class OverFlowItemList : public PlayerItemList { +public: + bool OverFlowSlotFull(); + int8 GetNextOverFlowSlot(); + bool AddItem(Item* item); + Item* GetOverFlowItem(); +}; +class EquipmentItemList{ +public: + EquipmentItemList(); + EquipmentItemList(const EquipmentItemList& list); + ~EquipmentItemList(); + Item* items[NUM_SLOTS]; + + vector* GetAllEquippedItems(); + + bool HasItem(int32 id); + int8 GetNumberOfItems(); + Item* GetItemFromUniqueID(int32 item_id); + Item* GetItemFromItemID(int32 item_id); + void SetItem(int8 slot_id, Item* item); + void RemoveItem(int8 slot, bool delete_item = false); + Item* GetItem(int8 slot_id); + bool AddItem(int8 slot, Item* item); + bool CheckEquipSlot(Item* tmp, int8 slot); + bool CanItemBeEquippedInSlot(Item* tmp, int8 slot); + int8 GetFreeSlot(Item* tmp, int8 slot_id = 255); + ItemStatsValues* CalculateEquipmentBonuses(Entity* entity = 0); + EQ2Packet* serialize(int16 version); + uchar* xor_packet; + uchar* orig_packet; +private: + Mutex MEquipmentItems; +}; + +#endif + diff --git a/EQ2/source/WorldServer/Items/Items_ToV.h b/EQ2/source/WorldServer/Items/Items_ToV.h new file mode 100644 index 000000000..4363249e1 --- /dev/null +++ b/EQ2/source/WorldServer/Items/Items_ToV.h @@ -0,0 +1,177 @@ +/* + EQ2Emulator: Everquest II Server Emulator + Copyright (C) 2007 EQ2EMulator Development Team (http://www.eq2emulator.net) + + This file is part of EQ2Emulator. + + EQ2Emulator is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + EQ2Emulator is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with EQ2Emulator. If not, see . +*/ + +//Item Stat defines for ToV Client + +//Stat type 6 (blue stats) +#define TOV_ITEM_STAT_HPREGEN 600 +#define TOV_ITEM_STAT_MANAREGEN 601 +#define TOV_ITEM_STAT_HPREGENPPT 602 +#define TOV_ITEM_STAT_MPREGENPPT 603 +#define TOV_ITEM_STAT_COMBATHPREGENPPT 604 +#define TOV_ITEM_STAT_COMBATMPREGENPPT 605 +#define TOV_ITEM_STAT_MAXHP 606 +#define TOV_ITEM_STAT_MAXHPPERC 607 +#define TOV_ITEM_STAT_MAXHPPERCFINAL 608 +#define TOV_ITEM_STAT_SPEED 609 +#define TOV_ITEM_STAT_SLOW 610 +#define TOV_ITEM_STAT_MOUNTSPEED 611 +#define TOV_ITEM_STAT_MOUNTAIRSPEED 612 +#define TOV_ITEM_STAT_LEAPSPEED 613 +#define TOV_ITEM_STAT_LEAPTIME 614 +#define TOV_ITEM_STAT_GLIDEEFFICIENCY 615 +#define TOV_ITEM_STAT_OFFENSIVESPEED 616 +#define TOV_ITEM_STAT_ATTACKSPEED 617 +#define TOV_ITEM_STAT_MAXMANA 618 +#define TOV_ITEM_STAT_MAXMANAPERC 619 +#define TOV_ITEM_STAT_MAXATTPERC 620 +#define TOV_ITEM_STAT_BLURVISION 621 +#define TOV_ITEM_STAT_MAGICLEVELIMMUNITY 622 +#define TOV_ITEM_STAT_HATEGAINMOD 623 +#define TOV_ITEM_STAT_COMBATEXPMOD 624 +#define TOV_ITEM_STAT_TRADESKILLEXPMOD 625 +#define TOV_ITEM_STAT_ACHIEVEMENTEXPMOD 626 +#define TOV_ITEM_STAT_SIZEMOD 627 +#define TOV_ITEM_STAT_DPS 628 +#define TOV_ITEM_STAT_STEALTH 629 +#define TOV_ITEM_STAT_INVIS 630 +#define TOV_ITEM_STAT_SEESTEALTH 631 +#define TOV_ITEM_STAT_SEEINVIS 632 +#define TOV_ITEM_STAT_EFFECTIVELEVELMOD 633 +#define TOV_ITEM_STAT_RIPOSTECHANCE 634 +#define TOV_ITEM_STAT_PARRYCHANCE 635 +#define TOV_ITEM_STAT_DODGECHANCE 636 +#define TOV_ITEM_STAT_AEAUTOATTACKCHANCE 637 +#define TOV_ITEM_STAT_MULTIATTACKCHANCE 638 //DOUBLEATTACKCHANCE +#define TOV_ITEM_STAT_SPELLMULTIATTACKCHANCE 639 +#define TOV_ITEM_STAT_FLURRY 640 +#define TOV_ITEM_STAT_MELEEDAMAGEMULTIPLIER 641 +#define TOV_ITEM_STAT_EXTRAHARVESTCHANCE 642 +#define TOV_ITEM_STAT_EXTRASHIELDBLOCKCHANCE 643 +#define TOV_ITEM_STAT_ITEMHPREGENPPT 644 +#define TOV_ITEM_STAT_ITEMPPREGENPPT 645 +#define TOV_ITEM_STAT_MELEECRITCHANCE 646 +#define TOV_ITEM_STAT_CRITAVOIDANCE 647 +#define TOV_ITEM_STAT_BENEFICIALCRITCHANCE 648 +#define TOV_ITEM_STAT_CRITBONUS 649 +#define TOV_ITEM_STAT_POTENCY 650 //BASEMODIFIER +#define TOV_ITEM_STAT_UNCONSCIOUSHPMOD 651 +#define TOV_ITEM_STAT_ABILITYREUSESPEED 652 //SPELLTIMEREUSEPCT +#define TOV_ITEM_STAT_ABILITYRECOVERYSPEED 653 //SPELLTIMERECOVERYPCT +#define TOV_ITEM_STAT_ABILITYCASTINGSPEED 654 //SPELLTIMECASTPCT +#define TOV_ITEM_STAT_SPELLREUSESPEED 655 //SPELLTIMEREUSESPELLONLY +#define TOV_ITEM_STAT_MELEEWEAPONRANGE 656 +#define TOV_ITEM_STAT_RANGEDWEAPONRANGE 657 +#define TOV_ITEM_STAT_FALLINGDAMAGEREDUCTION 658 +#define TOV_ITEM_STAT_RIPOSTEDAMAGE 659 +#define TOV_ITEM_STAT_MINIMUMDEFLECTIONCHANCE 660 +#define TOV_ITEM_STAT_MOVEMENTWEAVE 661 +#define TOV_ITEM_STAT_COMBATHPREGEN 662 +#define TOV_ITEM_STAT_COMBATMANAREGEN 663 +#define TOV_ITEM_STAT_CONTESTSPEEDBOOST 664 +#define TOV_ITEM_STAT_TRACKINGAVOIDANCE 665 +#define TOV_ITEM_STAT_STEALTHINVISSPEEDMOD 666 +#define TOV_ITEM_STAT_LOOT_COIN 667 +#define TOV_ITEM_STAT_ARMORMITIGATIONINCREASE 668 +#define TOV_ITEM_STAT_AMMOCONSERVATION 669 +#define TOV_ITEM_STAT_STRIKETHROUGH 670 +#define TOV_ITEM_STAT_STATUSBONUS 671 +#define TOV_ITEM_STAT_ACCURACY 672 +#define TOV_ITEM_STAT_COUNTERSTRIKE 673 +#define TOV_ITEM_STAT_SHIELDBASH 674 +#define TOV_ITEM_STAT_WEAPONDAMAGEBONUS 675 +#define TOV_ITEM_STAT_SPELLWEAPONDAMAGEBONUS 676 +#define TOV_ITEM_STAT_WEAPONDAMAGEBONUSMELEEONLY 677 +#define TOV_ITEM_STAT_ADDITIONALRIPOSTECHANCE 678 +#define TOV_ITEM_STAT_PVPTOUGHNESS 680 +#define TOV_ITEM_STAT_PVPLETHALITY 681 +#define TOV_ITEM_STAT_STAMINABONUS 682 +#define TOV_ITEM_STAT_WISDOMMITBONUS 683 +#define TOV_ITEM_STAT_HEALRECEIVE 684 +#define TOV_ITEM_STAT_HEALRECEIVEPERC 685 +#define TOV_ITEM_STAT_PVPCRITICALMITIGATION 686 +#define TOV_ITEM_STAT_BASEAVOIDANCEBONUS 687 +#define TOV_ITEM_STAT_INCOMBATSAVAGERYREGEN 688 +#define TOV_ITEM_STAT_OUTOFCOMBATSAVAGERYREGEN 689 +#define TOV_ITEM_STAT_SAVAGERYREGEN 690 +#define TOV_ITEM_STAT_SAVAGERYGAINMOD 691 +#define TOV_ITEM_STAT_MAXSAVAGERYLEVEL 692 +#define TOV_ITEM_STAT_INCOMBATDISSONANCEREGEN 693 +#define TOV_ITEM_STAT_OUTOFCOMBATDISSONANCEREGEN 694 +#define TOV_ITEM_STAT_DISSONANCEREGEN 695 +#define TOV_ITEM_STAT_DISSONANCEGAINMOD 696 +#define TOV_ITEM_STAT_AEAUTOATTACKAVOID 697 +//End of stat type 6 (blue stats) + + +//Item stat type 5 (health,power,savagery,dissonance,concentration) +#define TOV_ITEM_STAT_HEALTH 500 +#define TOV_ITEM_STAT_POWER 501 +#define TOV_ITEM_STAT_CONCENTRATION 502 +#define TOV_ITEM_STAT_SAVAGERY 503 +#define TOV_ITEM_STAT_DISSONANCE 504 +//End of stat type 5 + +//Item stat type 3 (damage mods) +#define TOV_ITEM_STAT_DMG_SLASH 300 +#define TOV_ITEM_STAT_DMG_CRUSH 301 +#define TOV_ITEM_STAT_DMG_PIERCE 302 +#define TOV_ITEM_STAT_DMG_HEAT 303 +#define TOV_ITEM_STAT_DMG_COLD 304 +#define TOV_ITEM_STAT_DMG_MAGIC 305 +#define TOV_ITEM_STAT_DMG_MENTAL 306 +#define TOV_ITEM_STAT_DMG_DIVINE 307 +#define TOV_ITEM_STAT_DMG_DISEASE 308 +#define TOV_ITEM_STAT_DMG_POISON 309 +#define TOV_ITEM_STAT_DMG_DROWNING 310 +#define TOV_ITEM_STAT_DMG_FALLING 311 +#define TOV_ITEM_STAT_DMG_PAIN 312 +#define TOV_ITEM_STAT_DMG_MELEE 313 +//End of item stat 3 + +#define TOV_ITEM_STAT_DEFLECTIONCHANCE 400 //just so no build error + +// Other stats not listed above (not sent from the server), never send these to the client +// using type 8 as it is not used by the client as far as we know +#define TOV_ITEM_STAT_DURABILITY_MOD 800 +#define TOV_ITEM_STAT_DURABILITY_ADD 801 +#define TOV_ITEM_STAT_PROGRESS_ADD 802 +#define TOV_ITEM_STAT_PROGRESS_MOD 803 +#define TOV_ITEM_STAT_SUCCESS_MOD 804 +#define TOV_ITEM_STAT_CRIT_SUCCESS_MOD 805 +#define TOV_ITEM_STAT_EX_DURABILITY_MOD 806 +#define TOV_ITEM_STAT_EX_DURABILITY_ADD 807 +#define TOV_ITEM_STAT_EX_PROGRESS_MOD 808 +#define TOV_ITEM_STAT_EX_PROGRESS_ADD 809 +#define TOV_ITEM_STAT_EX_SUCCESS_MOD 810 +#define TOV_ITEM_STAT_EX_CRIT_SUCCESS_MOD 811 +#define TOV_ITEM_STAT_EX_CRIT_FAILURE_MOD 812 +#define TOV_ITEM_STAT_RARE_HARVEST_CHANCE 813 +#define TOV_ITEM_STAT_MAX_CRAFTING 814 +#define TOV_ITEM_STAT_COMPONENT_REFUND 815 +#define TOV_ITEM_STAT_BOUNTIFUL_HARVEST 816 + +#define TOV_ITEM_STAT_STR 0 +#define TOV_ITEM_STAT_STA 1 +#define TOV_ITEM_STAT_AGI 2 +#define TOV_ITEM_STAT_WIS 3 +#define TOV_ITEM_STAT_INT 4 + + diff --git a/EQ2/source/WorldServer/Items/Loot.cpp b/EQ2/source/WorldServer/Items/Loot.cpp new file mode 100644 index 000000000..5884d58ae --- /dev/null +++ b/EQ2/source/WorldServer/Items/Loot.cpp @@ -0,0 +1,488 @@ +/* + EQ2Emulator: Everquest II Server Emulator + Copyright (C) 2007 EQ2EMulator Development Team (http://www.eq2emulator.net) + + This file is part of EQ2Emulator. + + EQ2Emulator is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + EQ2Emulator is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with EQ2Emulator. If not, see . +*/ +#include "Loot.h" +#include "../client.h" +#include "../../common/ConfigReader.h" +#include "../classes.h" +#include "../../common/debug.h" +#include "../zoneserver.h" +#include "../Skills.h" +#include "../classes.h" +#include "../World.h" +#include "../LuaInterface.h" +#include "../../common/Log.h" +#include "../Entity.h" +#include "../Rules/Rules.h" + +extern Classes classes; +extern ConfigReader configReader; +extern MasterSkillList master_skill_list; +extern RuleManager rule_manager; + + +// JA: storing loot-related functions here til I find them all :/ + +/* +void Combat::AddLooter(Entity* victim, Entity* attacker){ + MLooters.writelock(__FUNCTION__, __LINE__); + if(attacker->IsPlayer()){ + PlayerGroup* group = ((Player*)attacker)->GetGroup(); + if(group && group->members.size() > 0){ + deque::iterator itr; + for(itr = group->members.begin(); itr != group->members.end(); itr++) + looters[victim].push_back((*itr)->client->GetPlayer()); + } + else + looters[victim].push_back(attacker); + } + MLooters.releasewritelock(__FUNCTION__, __LINE__); +} + +void Combat::ClearLooters(Entity* spawn){ + MLooters.writelock(__FUNCTION__, __LINE__); + looters.erase(spawn); + MLooters.releasewritelock(__FUNCTION__, __LINE__); +} + +bool Combat::CheckLootAllowed(Entity* dead, Entity* spawn){ + if(!spawn || !dead || dead->GetHP() > 0) + return false; + bool ret = false; + MLooters.readlock(__FUNCTION__, __LINE__); + if(looters.count(dead) > 0){ + vector::iterator itr; + for(itr = looters[dead].begin(); itr != looters[dead].end(); itr++){ + if(*itr == spawn){ + ret = true; + break; + } + } + + } + MLooters.releasereadlock(__FUNCTION__, __LINE__); + return ret; +} + + + +bool Client::HandleLootItem(Entity* entity, Item* item){ + if(!item){ + SimpleMessage(CHANNEL_COLOR_YELLOW, "Unable to find item to loot!"); + return false; + } + if(player->item_list.HasFreeSlot() || player->item_list.CanStack(item)){ + if(player->item_list.AssignItemToFreeSlot(item)){ + int8 type = CHANNEL_COLOR_LOOT; + if(GetVersion() >= 973 && GetVersion() <= 1000) + type = CHANNEL_COLOR_NEW_LOOT; + else if(GetVersion() >= 973) + type = CHANNEL_COLOR_NEWEST_LOOT; + if(entity) + Message(type, "You loot \\aITEM %u 0:%s\\/a from the corpse of %s", item->details.item_id, item->name.c_str(), entity->GetName()); + else + Message(type, "You found a \\aITEM %u 0:%s\\/a", item->details.item_id, item->name.c_str()); + Guild* guild = player->GetGuild(); + if (guild && item->details.tier >= ITEM_TAG_LEGENDARY) { + char adjective[32]; + int8 type; + memset(adjective, 0, sizeof(adjective)); + if (item->details.tier >= ITEM_TAG_MYTHICAL) { + strncpy(adjective, "Mythical", sizeof(adjective) - 1); + type = GUILD_EVENT_LOOTS_MYTHICAL_ITEM; + } + else if (item->details.tier >= ITEM_TAG_FABLED) { + strncpy(adjective, "Fabled", sizeof(adjective) - 1); + type = GUILD_EVENT_LOOTS_FABELED_ITEM; + } + else { + strncpy(adjective, "Legendary", sizeof(adjective) - 1); + type = GUILD_EVENT_LOOTS_LEGENDARY_ITEM; + } + guild->AddNewGuildEvent(type, "%s has looted the %s \\aITEM %u 0:%s\\/a", Timer::GetUnixTimeStamp(), true, player->GetName(), adjective, item->details.item_id, item->name.c_str()); + guild->SendMessageToGuild(type, "%s has looted the %s \\aITEM %u 0:%s\\/a", player->GetName(), adjective, item->details.item_id, item->name.c_str()); + } + CheckPlayerQuestsItemUpdate(item); + return true; + } + else + SimpleMessage(CHANNEL_COLOR_RED, "Could not find free slot to place item."); + } + else + SimpleMessage(CHANNEL_COLOR_YELLOW, "Unable to loot item: Inventory is FULL."); + return false; +} + +bool Client::HandleLootItem(Entity* entity, int32 item_id){ + if(!entity) + return false; + return HandleLootItem(entity, entity->LootItem(item_id)); +} + +void Client::HandleLoot(EQApplicationPacket* app){ + PacketStruct* packet = configReader.getStruct("WS_LootType", GetVersion()); + if(packet){ + packet->LoadPacketData(app->pBuffer, app->size); + int32 loot_id = packet->getType_int32_ByName("loot_id"); + bool loot_all = (packet->getType_int8_ByName("loot_all") == 1); + safe_delete(packet); + int32 item_id = 0; + Item* item = 0; + Spawn* spawn = GetCurrentZone()->GetSpawnByID(loot_id); + if(player->HasPendingLootItems(loot_id)){ + Item* master_item = 0; + if(loot_all){ + vector* items = player->GetPendingLootItems(loot_id); + if(items){ + for(int32 i=0;loot_all && isize();i++){ + master_item = items->at(i); + if(master_item){ + item = new Item(master_item); + if(item){ + loot_all = HandleLootItem(0, item); + if(loot_all) + player->RemovePendingLootItem(loot_id, item->details.item_id); + } + } + } + safe_delete(items); + } + } + else{ + packet = configReader.getStruct("WS_LootItem", GetVersion()); + if(packet){ + packet->LoadPacketData(app->pBuffer, app->size); + item_id = packet->getType_int32_ByName("item_id"); + vector* items = player->GetPendingLootItems(loot_id); + if(items){ + for(int32 i=0;isize();i++){ + master_item = items->at(i); + if(master_item && master_item->details.item_id == item_id){ + item = new Item(master_item); + if(item && HandleLootItem(0, item)) + player->RemovePendingLootItem(loot_id, item->details.item_id); + break; + } + } + safe_delete(items); + } + safe_delete(packet); + } + } + EQ2Packet* outapp = player->SendInventoryUpdate(GetVersion()); + if(outapp) + QueuePacket(outapp); + Loot(0, player->GetPendingLootItems(loot_id), (Entity*)spawn); + } + else{ + if(spawn && spawn->IsEntity() && GetCurrentZone()->GetCombat()->CheckLootAllowed((Entity*)spawn, player)){ + if(loot_all){ + while(loot_all && ((item_id = ((Entity*)spawn)->GetLootItemID()) > 0)){ + loot_all = HandleLootItem((Entity*)spawn, item_id); + } + } + else{ + packet = configReader.getStruct("WS_LootItem", GetVersion()); + if(packet){ + packet->LoadPacketData(app->pBuffer, app->size); + item_id = packet->getType_int32_ByName("item_id"); + HandleLootItem((Entity*)spawn, item_id); + safe_delete(packet); + } + } + EQ2Packet* outapp = player->SendInventoryUpdate(GetVersion()); + if(outapp) + QueuePacket(outapp); + Loot((Entity*)spawn); + if(!((Entity*)spawn)->HasLoot()){ + CloseLoot(); + if(((Entity*)spawn)->IsNPC()) + GetCurrentZone()->RemoveDeadSpawn(spawn); + } + } + else{ + if(!spawn){ + LogWrite(WORLD__ERROR, 0, "World", "Unknown id of %u when looting!", loot_id); + SimpleMessage(CHANNEL_COLOR_YELLOW, "Unable to find spawn to loot!"); + } + else + SimpleMessage(CHANNEL_COLOR_YELLOW, "You are not unable to loot that at this time."); + } + } + } +} + + +void Client::SendPendingLoot(int32 total_coins, Entity* entity){ + if(entity) + Loot(total_coins, player->GetPendingLootItems(entity->GetID()), entity); +} + +void Client::CloseLoot(){ + PacketStruct* packet = configReader.getStruct("WS_CloseWindow", GetVersion()); + packet->setDataByName("window_id", 4); + EQ2Packet* outapp = packet->serialize(); +// DumpPacket(outapp); + QueuePacket(outapp); + safe_delete(packet); +} + +string Client::GetCoinMessage(int32 total_coins){ + if(total_coins == 0) + return " 0 Copper"; + char tmp[64] = {0}; + string message = ""; + int32 val = 0; + if(total_coins >= 1000000){ + val = total_coins / 1000000; + total_coins -= 1000000 * val; + sprintf(tmp, " %u Platinum", val); + message.append(tmp); + memset(tmp, 0, 64); + } + if(total_coins >= 10000){ + val = total_coins / 10000; + total_coins -= 10000 * val; + sprintf(tmp, " %u Gold", val); + message.append(tmp); + memset(tmp, 0, 64); + } + if(total_coins >= 100){ + val = total_coins / 100; + total_coins -= 100 * val; + sprintf(tmp, " %u Silver", val); + message.append(tmp); + memset(tmp, 0, 64); + } + if(total_coins > 0){ + sprintf(tmp, " %u Copper", (int32)total_coins); + message.append(tmp); + } + return message; +} + +void Client::Loot(int32 total_coins, vector* items, Entity* entity){ + if(!entity){ + CloseLoot(); + return; + } + if(total_coins > 0){ + player->AddCoins(total_coins); + //PlaySound("coin_cha_ching"); + string message = ""; + if(entity->GetHP() == 0){ + message = "You loot "; + entity->SetLootCoins(0); + } + else + message = "You receive "; + message.append(GetCoinMessage(total_coins)); + if(entity->GetHP() == 0) + message.append(" from the corpse of ").append(entity->GetName()); + int8 type = CHANNEL_COLOR_LOOT; + if(GetVersion() >= 973) + type = CHANNEL_COLOR_NEW_LOOT; + SimpleMessage(type, message.c_str()); + } + if(!items || items->size() == 0) + CloseLoot(); + PacketStruct* packet = configReader.getStruct("WS_UpdateLoot", GetVersion()); + if(packet){ + vector::iterator itr; + int32 packet_size = 0; + if(items && items->size() > 0){ + packet->setDataByName("loot_count", items->size()); + packet->setDataByName("display", 1); + } + packet->setDataByName("unknown2", 1); + packet->setDataByName("unknown3", 0x3C); + packet->setDataByName("loot_id", entity->GetID()); + EQ2Packet* tmpPacket = packet->serialize(); + packet_size += tmpPacket->size; + uchar* data = 0; + if(items && items->size() > 0){ + data = new uchar[items->size()*1000 + packet_size]; + memset(data, 0, items->size()*1000 + packet_size); + } + else{ + data = new uchar[packet_size]; + memset(data, 0, packet_size); + } + uchar* ptr = data; + memcpy(ptr, tmpPacket->pBuffer, tmpPacket->size); + ptr += tmpPacket->size; + safe_delete(tmpPacket); + Item* item = 0; + if(items && items->size() > 0){ + for(itr = items->begin(); itr != items->end(); itr++){ + item = *itr; + memcpy(ptr, &item->details.item_id, sizeof(int32)); + ptr += sizeof(int32); + packet_size += sizeof(int32); + + tmpPacket = item->serialize(GetVersion(), true, GetPlayer(), false, 1, 0, false, true); + if(GetVersion() >= 860){ + memcpy(ptr, tmpPacket->pBuffer + 11, tmpPacket->size - 11); + ptr += tmpPacket->size - 11; + packet_size += tmpPacket->size - 11; + } + else{ + memcpy(ptr, tmpPacket->pBuffer + 10, tmpPacket->size - 10); + ptr += tmpPacket->size - 10; + packet_size += tmpPacket->size - 10; + } + safe_delete(tmpPacket); + } + } + packet_size -= sizeof(int32); + memcpy(data, &packet_size, sizeof(int32)); + packet_size += sizeof(int32); + EQ2Packet* outapp = new EQ2Packet(OP_ClientCmdMsg, data, packet_size); + //DumpPacket(outapp); + QueuePacket(outapp); + safe_delete_array(data); + safe_delete(packet); + } +} + +void Client::Loot(Entity* entity){ + if(GetCurrentZone()->GetCombat()->CheckLootAllowed(entity, GetPlayer())){ + int32 total_coins = entity->GetLootCoins(); + entity->LockLoot(); + Loot(total_coins, entity->GetLootItems(), entity); + entity->UnlockLoot(); + } + else + SimpleMessage(CHANNEL_COLOR_YELLOW, "You are not allowed to loot at this time."); +} + + +bool Player::HasPendingLootItems(int32 id){ + return (pending_loot_items.count(id) > 0 && pending_loot_items[id].size() > 0); +} + +bool Player::HasPendingLootItem(int32 id, int32 item_id){ + return (pending_loot_items.count(id) > 0 && pending_loot_items[id].count(item_id) > 0); +} +vector* Player::GetPendingLootItems(int32 id){ + vector* ret = 0; + if(pending_loot_items.count(id) > 0){ + ret = new vector(); + map::iterator itr; + for(itr = pending_loot_items[id].begin(); itr != pending_loot_items[id].end(); itr++){ + if(master_item_list.GetItem(itr->first)) + ret->push_back(master_item_list.GetItem(itr->first)); + } + } + return ret; +} + +void Player::RemovePendingLootItem(int32 id, int32 item_id){ + if(pending_loot_items.count(id) > 0){ + pending_loot_items[id].erase(item_id); + if(pending_loot_items[id].size() == 0) + pending_loot_items.erase(id); + } +} + +void Player::RemovePendingLootItems(int32 id){ + if(pending_loot_items.count(id) > 0) + pending_loot_items.erase(id); +} + +void Player::AddPendingLootItems(int32 id, vector* items){ + if(items){ + Item* item = 0; + for(int32 i=0;isize();i++){ + item = items->at(i); + if(item) + pending_loot_items[id][item->details.item_id] = true; + } + } +}*/ + + +NPC* Entity::DropChest() { + // Check to see if treasure chests are disabled in the rules + if (rule_manager.GetGlobalRule(R_World, TreasureChestDisabled)->GetBool()) + return 0; + + NPC* chest = 0; + + chest = new NPC(); + chest->SetAttackable(0); + chest->SetShowLevel(0); + chest->SetShowName(1); + chest->SetTargetable(1); + + // Set the brain to a blank brain so it does nothing + chest->SetBrain(new BlankBrain(chest)); + // Set the x, y, z, heading, location (grid id) to that of the dead spawn + chest->SetX(GetX()); + chest->SetY(GetY()); + chest->SetZ(GetZ()); + // heading needs to be GetHeading() - 180 so the chest faces the proper way + chest->SetHeading(GetHeading() - 180); + chest->SetLocation(GetLocation()); + // Set the primary command to loot and the secondary to disarm + chest->AddPrimaryEntityCommand("loot", 10.0f, "loot", "", 0, 0); + chest->AddSecondaryEntityCommand("Disarm", 10.0f, "Disarm", "", 0, 0); + // 32 = loot icon for the mouse + chest->SetIcon(32); + // 1 = show the right click menu + chest->SetShowCommandIcon(1); + + int8 highest_tier = 0; + vector::iterator itr; + for (itr = GetLootItems()->begin(); itr != GetLootItems()->end(); ) { + if ((*itr)->details.tier >= ITEM_TAG_UNCOMMON) { + if ((*itr)->details.tier > highest_tier) + highest_tier = (*itr)->details.tier; + + // Add the item to the chest + chest->AddLootItem((*itr)->details.item_id, (*itr)->details.count); + // Remove the item from the corpse + itr = GetLootItems()->erase(itr); + } + else + itr++; + } + + /*4034 = small chest | 5864 = treasure chest | 5865 = ornate treasure chest | 4015 = exquisite chest*/ + if (highest_tier >= ITEM_TAG_FABLED) { + chest->SetModelType(4015); + chest->SetName("Exquisite Chest"); + } + else if (highest_tier >= ITEM_TAG_LEGENDARY) { + chest->SetModelType(5865); + chest->SetName("Ornate Chest"); + } + else if (highest_tier >= ITEM_TAG_TREASURED) { + chest->SetModelType(5864); + chest->SetName("Treasure Chest"); + } + else if (highest_tier >= ITEM_TAG_UNCOMMON) { + chest->SetModelType(4034); + chest->SetName("Small Chest"); + } + else + safe_delete(chest); + + return chest; +} \ No newline at end of file diff --git a/EQ2/source/WorldServer/Items/Loot.h b/EQ2/source/WorldServer/Items/Loot.h new file mode 100644 index 000000000..de4f56720 --- /dev/null +++ b/EQ2/source/WorldServer/Items/Loot.h @@ -0,0 +1,23 @@ +/* + EQ2Emulator: Everquest II Server Emulator + Copyright (C) 2007 EQ2EMulator Development Team (http://www.eq2emulator.net) + + This file is part of EQ2Emulator. + + EQ2Emulator is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + EQ2Emulator is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with EQ2Emulator. If not, see . +*/ +#ifndef __EQ2_LOOT__ +#define __EQ2_LOOT__ + +#endif diff --git a/EQ2/source/WorldServer/Items/LootDB.cpp b/EQ2/source/WorldServer/Items/LootDB.cpp new file mode 100644 index 000000000..4a8358d3e --- /dev/null +++ b/EQ2/source/WorldServer/Items/LootDB.cpp @@ -0,0 +1,153 @@ +/* + EQ2Emulator: Everquest II Server Emulator + Copyright (C) 2007 EQ2EMulator Development Team (http://www.eq2emulator.net) + + This file is part of EQ2Emulator. + + EQ2Emulator is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + EQ2Emulator is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with EQ2Emulator. If not, see . +*/ + +#include "../../common/Log.h" +#include "../WorldDatabase.h" +#include "../World.h" + +extern World world; + +void WorldDatabase::LoadLoot(ZoneServer* zone) +{ + // First, clear previous loot tables... + zone->ClearLootTables(); + + DatabaseResult result; + int32 count = 0; + + if (database_new.Select(&result, "SELECT id, name, mincoin, maxcoin, maxlootitems, lootdrop_probability, coin_probability FROM loottable")) { + LogWrite(LOOT__DEBUG, 0, "Loot", "--Loading LootTables..."); + LootTable* table = 0; + // Load loottable from DB + while(result.Next()) { + int32 id = result.GetInt32Str("id"); + + table = new LootTable; + table->name = result.GetStringStr("name"); + table->mincoin = result.GetInt32Str("mincoin"); + table->maxcoin = result.GetInt32Str("maxcoin"); + table->maxlootitems = result.GetInt16Str("maxlootitems"); + table->lootdrop_probability = result.GetFloatStr("lootdrop_probability"); + table->coin_probability = result.GetFloatStr("coin_probability"); + zone->AddLootTable(id, table); + + LogWrite(LOOT__DEBUG, 5, "Loot", "---Loading LootTable '%s' (id: %u)", table->name.c_str(), id); + LogWrite(LOOT__DEBUG, 5, "Loot", "---min_coin: %u, max_coin: %u, max_items: %i, prob: %.2f, coin_prob: %.2f", table->mincoin, table->maxcoin, table->maxlootitems, table->lootdrop_probability, table->coin_probability); + count++; + } + LogWrite(LOOT__DEBUG, 0, "Loot", "--Loaded %u loot table%s.", count, count == 1 ? "" : "s"); + } + + // Now, load Loot Drops for configured loot tables + if (database_new.Select(&result, "SELECT loot_table_id, item_id, item_charges, equip_item, probability FROM lootdrop")) { + count = 0; + LogWrite(LOOT__DEBUG, 0, "Loot", "--Loading LootDrops..."); + LootDrop* drop = 0; + + while(result.Next()) { + int32 id = result.GetInt32Str("loot_table_id"); + drop = new LootDrop; + drop->item_id = result.GetInt32Str("item_id"); + drop->item_charges = result.GetInt16Str("item_charges"); + drop->equip_item = (result.GetInt8Str("equip_item") == 1); + drop->probability = result.GetFloatStr("probability"); + zone->AddLootDrop(id, drop); + + LogWrite(LOOT__DEBUG, 5, "Loot", "---Loading LootDrop item_id %u (tableID: %u", drop->item_id, id); + LogWrite(LOOT__DEBUG, 5, "Loot", "---charges: %i, equip_item: %i, prob: %.2f", drop->item_charges, drop->equip_item, drop->probability); + count++; + } + LogWrite(LOOT__DEBUG, 0, "Loot", "--Loaded %u loot drop%s.", count, count == 1 ? "" : "s"); + } + + // Finally, load loot tables into spawns that are set to use these loot tables + if (database_new.Select(&result, "SELECT spawn_id, loottable_id FROM spawn_loot")) { + count = 0; + LogWrite(LOOT__DEBUG, 0, "Loot", "--Assigning loot table(s) to spawn(s)..."); + + while(result.Next()) { + int32 spawn_id = result.GetInt32Str("spawn_id"); + int32 table_id = result.GetInt32Str("loottable_id"); + zone->AddSpawnLootList(spawn_id, table_id); + LogWrite(LOOT__DEBUG, 5, "Loot", "---Adding loot table %u to spawn %u", table_id, spawn_id); + count++; + } + LogWrite(LOOT__DEBUG, 0, "Loot", "--Loaded %u spawn loot list%s.", count, count == 1 ? "" : "s"); + } + + // Load global loot lists + LoadGlobalLoot(zone); +} + +void WorldDatabase::LoadGlobalLoot(ZoneServer* zone) { + LogWrite(LOOT__INFO, 0, "Loot", "-Loading Global loot data..."); + DatabaseResult result; + int32 count = 0; + if (database_new.Select(&result, "SELECT type, loot_table, value1, value2, value3, value4 FROM loot_global")) { + while(result.Next()) { + const char* type = result.GetStringStr("type"); + int32 table_id = result.GetInt32Str("loot_table"); + if (strcmp(type, "Level") == 0) { + GlobalLoot* loot = new GlobalLoot(); + loot->minLevel = result.GetInt8Str("value1"); + loot->maxLevel = result.GetInt8Str("value2"); + loot->table_id = table_id; + + if (loot->minLevel > loot->maxLevel) + loot->maxLevel = loot->minLevel; + + zone->AddLevelLootList(loot); + LogWrite(LOOT__DEBUG, 5, "Loot", "---Loading Level %i loot table (id: %u)", loot->minLevel, table_id); + LogWrite(LOOT__DEBUG, 5, "Loot", "---minlevel: %i, maxlevel: %i", loot->minLevel, loot->maxLevel); + } + else if (strcmp(type, "Racial") == 0) { + GlobalLoot* loot = new GlobalLoot(); + int16 race_id = result.GetInt16Str("value1"); + loot->minLevel = result.GetInt8Str("value2"); + loot->maxLevel = result.GetInt8Str("value3"); + loot->table_id = table_id; + + if (loot->minLevel > loot->maxLevel) + loot->maxLevel = loot->minLevel; + + zone->AddRacialLootList(race_id, loot); + LogWrite(LOOT__DEBUG, 5, "Loot", "---Loading Racial %i loot table (id: %u)", race_id, table_id); + LogWrite(LOOT__DEBUG, 5, "Loot", "---minlevel: %i, maxlevel: %i", loot->minLevel, loot->maxLevel); + } + else if (strcmp(type, "Zone") == 0) { + GlobalLoot* loot = new GlobalLoot(); + int32 zoneID = result.GetInt32Str("value1"); + loot->minLevel = result.GetInt8Str("value2"); + loot->maxLevel = result.GetInt8Str("value3"); + loot->table_id = table_id; + + if (loot->minLevel > loot->maxLevel) + loot->maxLevel = loot->minLevel; + + zone->AddZoneLootList(zoneID, loot); + LogWrite(LOOT__DEBUG, 5, "Loot", "---Loading Zone %i loot table (id: %u)", zoneID, table_id); + LogWrite(LOOT__DEBUG, 5, "Loot", "---minlevel: %i, maxlevel: %i", loot->minLevel, loot->maxLevel); + } + count++; + } + + LogWrite(LOOT__DEBUG, 0, "Loot", "--Loaded %u Global loot list%s.", count, count == 1 ? "" : "s"); + } +} \ No newline at end of file diff --git a/EQ2/source/WorldServer/Languages.cpp b/EQ2/source/WorldServer/Languages.cpp new file mode 100644 index 000000000..ff2bcd83d --- /dev/null +++ b/EQ2/source/WorldServer/Languages.cpp @@ -0,0 +1,133 @@ +/* + EQ2Emulator: Everquest II Server Emulator + Copyright (C) 2007 EQ2EMulator Development Team (http://www.eq2emulator.net) + + This file is part of EQ2Emulator. + + EQ2Emulator is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + EQ2Emulator is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with EQ2Emulator. If not, see . +*/ + +#include +#include +#include "Languages.h" + +Language::Language(){ + id = 0; + memset(name, 0, sizeof(name)); + save_needed = false; +} + +Language::Language(Language* language){ + id = language->id; + strncpy(name, language->GetName(), sizeof(name)); + save_needed = language->save_needed; +} + +MasterLanguagesList::MasterLanguagesList(){ +} + +MasterLanguagesList::~MasterLanguagesList(){ + Clear(); +} + +void MasterLanguagesList::Clear(){ + languages_list.clear(); +} + +int32 MasterLanguagesList::Size(){ + return languages_list.size(); +} + +void MasterLanguagesList::AddLanguage(Language* language){ + assert(language); + languages_list.push_back(language); +} + +Language* MasterLanguagesList::GetLanguage(int32 id){ + list::iterator itr; + Language* language = 0; + Language* ret = 0; + for(itr = languages_list.begin(); itr != languages_list.end(); itr++){ + language = *itr; + if(language->GetID() == id){ + ret = language; + break; + } + } + return ret; +} + +Language* MasterLanguagesList::GetLanguageByName(const char* name){ + list::iterator itr; + Language* language = 0; + Language* ret = 0; + for(itr = languages_list.begin(); itr != languages_list.end(); itr++){ + language = *itr; + if(!language) + continue; + if(!strncmp(language->GetName(), name, strlen(name))){ + ret = language; + break; + } + } + return ret; +} + +list* MasterLanguagesList::GetAllLanguages(){ + return &languages_list; +} + +PlayerLanguagesList::PlayerLanguagesList(){ +} + +PlayerLanguagesList::~PlayerLanguagesList(){ +} + +void PlayerLanguagesList::Add(Language* language){ + player_languages_list.push_back(language); +} + +Language* PlayerLanguagesList::GetLanguage(int32 id){ + list::iterator itr; + Language* language = 0; + Language* ret = 0; + for(itr = player_languages_list.begin(); itr != player_languages_list.end(); itr++){ + language = *itr; + if(language->GetID() == id){ + ret = language; + break; + } + } + return ret; +} + +Language* PlayerLanguagesList::GetLanguageByName(const char* name){ + list::iterator itr; + Language* language = 0; + Language* ret = 0; + for(itr = player_languages_list.begin(); itr != player_languages_list.end(); itr++){ + language = *itr; + if(!language) + continue; + if(!strncmp(language->GetName(), name, strlen(name))){ + ret = language; + break; + } + } + return ret; +} + +list* PlayerLanguagesList::GetAllLanguages(){ + return &player_languages_list; +} diff --git a/EQ2/source/WorldServer/Languages.h b/EQ2/source/WorldServer/Languages.h new file mode 100644 index 000000000..a945b40a9 --- /dev/null +++ b/EQ2/source/WorldServer/Languages.h @@ -0,0 +1,75 @@ +/* + EQ2Emulator: Everquest II Server Emulator + Copyright (C) 2007 EQ2EMulator Development Team (http://www.eq2emulator.net) + + This file is part of EQ2Emulator. + + EQ2Emulator is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + EQ2Emulator is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with EQ2Emulator. If not, see . +*/ + +#ifndef LANGUAGES_H_ +#define LANGUAGES_H_ + +#include +#include +#include "../common/types.h" + +using namespace std; + +class Language { +public: + Language(); + Language(Language* language); + void SetID(int32 id) {this->id = id;} + void SetName(const char *name) {strncpy(this->name, name, sizeof(this->name));} + void SetSaveNeeded(bool save_needed) {this->save_needed = save_needed;} + + int32 GetID() {return id;} + const char* GetName() {return name;} + bool GetSaveNeeded() {return save_needed;} + +private: + int32 id; + char name[50]; + bool save_needed; +}; + +class MasterLanguagesList { +public: + MasterLanguagesList(); + ~MasterLanguagesList(); + void Clear(); + int32 Size(); + void AddLanguage(Language* language); + Language* GetLanguage(int32 id); + Language* GetLanguageByName(const char* name); + list* GetAllLanguages(); + +private: + list languages_list; +}; + +class PlayerLanguagesList { +public: + PlayerLanguagesList(); + ~PlayerLanguagesList(); + void Add(Language* language); + Language* GetLanguage(int32 id); + Language* GetLanguageByName(const char* name); + list* GetAllLanguages(); + +private: + list player_languages_list; +}; +#endif diff --git a/EQ2/source/WorldServer/LoginServer.cpp b/EQ2/source/WorldServer/LoginServer.cpp new file mode 100644 index 000000000..820218d04 --- /dev/null +++ b/EQ2/source/WorldServer/LoginServer.cpp @@ -0,0 +1,1031 @@ +/* + EQ2Emulator: Everquest II Server Emulator + Copyright (C) 2007 EQ2EMulator Development Team (http://www.eq2emulator.net) + + This file is part of EQ2Emulator. + + EQ2Emulator is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + EQ2Emulator is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with EQ2Emulator. If not, see . +*/ +#include "../common/debug.h" +#include "../common/Log.h" +#include +using namespace std; +#include +#include +#include +using namespace std; +#include +#include "../common/md5.h" +#include "../common/version.h" +#include "../common/GlobalHeaders.h" + +#ifdef WIN32 +#include +#include +#include + +#define snprintf _snprintf +#define vsnprintf _vsnprintf +#define strncasecmp _strnicmp +#define strcasecmp _stricmp +#else // Pyro: fix for linux +#include +#ifdef FREEBSD //Timothy Whitman - January 7, 2003 +#include +#endif +#include +#include +#include +#include +#include + +#include "../common/unix.h" + +#define SOCKET_ERROR -1 +#define INVALID_SOCKET -1 +extern int errno; +#endif + +#include "../common/servertalk.h" +#include "LoginServer.h" +#include "../common/packet_dump.h" +#include "net.h" +#include "zoneserver.h" +#include "WorldDatabase.h" +#include "Variables.h" +#include "World.h" +#include "../common/ConfigReader.h" +#include "Rules/Rules.h" + +extern sint32 numzones; +extern sint32 numclients; +extern NetConnection net; +extern LoginServer loginserver; +extern WorldDatabase database; +extern ZoneAuth zone_auth; +extern Variables variables; +extern ZoneList zone_list; +extern ClientList client_list; +extern volatile bool RunLoops; +volatile bool LoginLoopRunning = false; +extern ConfigReader configReader; +extern RuleManager rule_manager; + +bool AttemptingConnect = false; + +LoginServer::LoginServer(const char* iAddress, int16 iPort) { + LoginServerIP = ResolveIP(iAddress); + LoginServerPort = iPort; + statusupdate_timer = new Timer(LoginServer_StatusUpdateInterval); + tcpc = new TCPConnection(false); + pTryReconnect = true; + try_auto_update = true; + updates_always = false; + updates_verbose = false; + updates_auto_data = false; + updates_ask = false; + minLockedStatus = 100; + maxPlayers = -1; + minGameFullStatus = 100; + update_server_verified = false; + last_checked_time = 0; + UpdateServerPort = 0; + UpdateServerIP = 0; + update_server_completed = false; + data_waiting = 0; + zone_updates = 0; + loginEquip_updates = 0; +} + +LoginServer::~LoginServer() { + delete statusupdate_timer; + delete tcpc; +} + +void LoginServer::SendImmediateEquipmentUpdatesForChar(int32 char_id) { + LogWrite(WORLD__DEBUG, 5, "World", "Sending login equipment updates for char_id: %u", char_id); + + int16 count = 0; + if(!loginEquip_updates) + loginEquip_updates = database.GetEquipmentUpdates(char_id); + if(loginEquip_updates && loginEquip_updates->size() > 0) + { + map send_map; + int32 size = 0; + MutexMap::iterator itr = loginEquip_updates->begin(); + while(itr.Next()) + { + send_map[itr->first] = itr->second; + size += sizeof(EquipmentUpdate_Struct); + loginEquip_updates->erase(itr->first); + count++; + } + ServerPacket* outpack = new ServerPacket(ServerOP_LoginEquipment, size + sizeof(EquipmentUpdateList_Struct)+5); + EquipmentUpdateList_Struct* updates = (EquipmentUpdateList_Struct*)outpack->pBuffer; + updates->total_updates = count; + int32 pos = sizeof(EquipmentUpdateList_Struct); + map::iterator send_itr; + for(send_itr = send_map.begin(); send_itr != send_map.end(); send_itr++) + { + EquipmentUpdate_Struct* update = (EquipmentUpdate_Struct*)(outpack->pBuffer + pos); + update->id = send_itr->first; + update->world_char_id = send_itr->second.world_char_id; + update->equip_type = send_itr->second.equip_type; + update->red = send_itr->second.red; + update->green = send_itr->second.green; + update->blue = send_itr->second.blue; + update->highlight_red = send_itr->second.red; + update->highlight_green = send_itr->second.green; + update->highlight_blue = send_itr->second.blue; + update->slot = send_itr->second.slot; + pos += sizeof(EquipmentUpdate_Struct); + } + SendPacket(outpack); + outpack->Deflate(); + safe_delete(outpack); + } + if(loginEquip_updates && count) + loginEquip_updates->clear(); + if(loginEquip_updates && loginEquip_updates->size() == 0) + { + database.UpdateLoginEquipment(); + safe_delete(loginEquip_updates); + } + +} + +bool LoginServer::Process() { + if(last_checked_time > Timer::GetCurrentTime2()) + return true; + last_checked_time = Timer::GetCurrentTime2() + 50; + bool ret = true; + if (statusupdate_timer->Check()) { + this->SendStatus(); + } + + /************ Get all packets from packet manager out queue and process them ************/ + ServerPacket *pack = 0; + while((pack = tcpc->PopPacket())) + { + switch(pack->opcode) + { + case ServerOP_LSFatalError: + { + LogWrite(OPCODE__DEBUG, 1, "Opcode", "Opcode 0x%X (%i): ServerOP_LSFatalError", pack->opcode, pack->opcode); + + LogWrite(WORLD__ERROR, 0, "World", "Login Server returned a fatal error: %s\nDisabling reconnect.", pack->pBuffer); + pTryReconnect = false; + ret = false; + break; + } + case ServerOP_CharTimeStamp: + { + LogWrite(OPCODE__DEBUG, 1, "Opcode", "Opcode 0x%X (%i): ServerOP_CharTimeStamp", pack->opcode, pack->opcode); + + if(pack->size != sizeof(CharacterTimeStamp_Struct)) + break; + + CharacterTimeStamp_Struct* cts = (CharacterTimeStamp_Struct*) pack->pBuffer; + + // determine if the character exists and retrieve its latest timestamp from the world server + bool char_exist = false; + //int32 character_timestamp = database.GetCharacterTimeStamp(cts->char_id,cts->account_id,&char_exist); + + if(!char_exist) + { + //Character doesn't exist, get rid of it + SendDeleteCharacter ( cts ); + break; + } + + break; + } + case ServerOP_GetTableData:{ + LogWrite(OPCODE__DEBUG, 1, "Opcode", "Opcode 0x%X (%i): ServerOP_GetTableData", pack->opcode, pack->opcode); + + uchar* tmp = new uchar[pack->size]; + memcpy(tmp, pack->pBuffer, pack->size); + data_updates_waiting.push_back(tmp); + break; + } + case ServerOP_GetTableQuery:{ + LogWrite(OPCODE__DEBUG, 1, "Opcode", "Opcode 0x%X (%i): ServerOP_GetTableQuery", pack->opcode, pack->opcode); + + uchar* tmp = new uchar[pack->size]; + memcpy(tmp, pack->pBuffer, pack->size); + table_updates_waiting.push_back(tmp); + break; + } + case ServerOP_GetLatestTables:{ + LogWrite(OPCODE__DEBUG, 1, "Opcode", "Opcode 0x%X (%i): ServerOP_GetLatestTables", pack->opcode, pack->opcode); + + data_waiting = new uchar[pack->size]; + memcpy(data_waiting, pack->pBuffer, pack->size); + break; + } + + // Push Character Select "item appearances" to login_equipment table + case ServerOP_LoginEquipment:{ + LogWrite(OPCODE__DEBUG, 1, "Opcode", "Opcode 0x%X (%i): ServerOP_LoginEquipment", pack->opcode, pack->opcode); + + LogWrite(MISC__TODO, 0, "TODO", "Implement map > method to update Login.\n%s, %s, %i", __FILE__, __FUNCTION__, __LINE__); + + if( pack->size == sizeof(EquipmentUpdateRequest_Struct) ) + { + int16 max = ((EquipmentUpdateRequest_Struct*)pack->pBuffer)->max_per_batch; + int16 count = 0; + if(!loginEquip_updates) + loginEquip_updates = database.GetEquipmentUpdates(); + if(loginEquip_updates && loginEquip_updates->size() > 0) + { + map send_map; + int32 size = 0; + MutexMap::iterator itr = loginEquip_updates->begin(); + while(itr.Next() && count < max) + { + send_map[itr->first] = itr->second; + size += sizeof(EquipmentUpdate_Struct); + loginEquip_updates->erase(itr->first); + count++; + } + ServerPacket* outpack = new ServerPacket(ServerOP_LoginEquipment, size + sizeof(EquipmentUpdateList_Struct)+5); + EquipmentUpdateList_Struct* updates = (EquipmentUpdateList_Struct*)outpack->pBuffer; + updates->total_updates = count; + int32 pos = sizeof(EquipmentUpdateList_Struct); + map::iterator send_itr; + for(send_itr = send_map.begin(); send_itr != send_map.end(); send_itr++) + { + EquipmentUpdate_Struct* update = (EquipmentUpdate_Struct*)(outpack->pBuffer + pos); + update->id = send_itr->first; + update->world_char_id = send_itr->second.world_char_id; + update->equip_type = send_itr->second.equip_type; + update->red = send_itr->second.red; + update->green = send_itr->second.green; + update->blue = send_itr->second.blue; + update->highlight_red = send_itr->second.red; + update->highlight_green = send_itr->second.green; + update->highlight_blue = send_itr->second.blue; + update->slot = send_itr->second.slot; + pos += sizeof(EquipmentUpdate_Struct); + } + SendPacket(outpack); + outpack->Deflate(); + safe_delete(outpack); + } + if(loginEquip_updates && count < max) + loginEquip_updates->clear(); + if(loginEquip_updates && loginEquip_updates->size() == 0) + { + database.UpdateLoginEquipment(); + safe_delete(loginEquip_updates); + } + } + break; + } + + case ServerOP_ZoneUpdates:{ + LogWrite(OPCODE__DEBUG, 1, "Opcode", "Opcode 0x%X (%i): ServerOP_ZoneUpdates", pack->opcode, pack->opcode); + + if(pack->size == sizeof(ZoneUpdateRequest_Struct)){ + int16 max = ((ZoneUpdateRequest_Struct*)pack->pBuffer)->max_per_batch; + int16 count = 0; + if(!zone_updates) + zone_updates = database.GetZoneUpdates(); + if(zone_updates && zone_updates->size() > 0){ + map send_map; + int32 size = 0; + MutexMap::iterator itr = zone_updates->begin(); + while(itr.Next() && count < max){ + send_map[itr->first] = itr->second; + size += sizeof(ZoneUpdate_Struct) + itr->second.name.length() + itr->second.description.length(); + zone_updates->erase(itr->first); + count++; + } + ServerPacket* outpack = new ServerPacket(ServerOP_ZoneUpdates, size + sizeof(ZoneUpdateList_Struct)+5); + ZoneUpdateList_Struct* updates = (ZoneUpdateList_Struct*)outpack->pBuffer; + updates->total_updates = count; + int32 pos = sizeof(ZoneUpdateList_Struct); + map::iterator send_itr; + for(send_itr = send_map.begin(); send_itr != send_map.end(); send_itr++){ + ZoneUpdate_Struct* update = (ZoneUpdate_Struct*)(outpack->pBuffer + pos); + update->zone_id = send_itr->first; + update->zone_name_length = send_itr->second.name.length(); + update->zone_desc_length = send_itr->second.description.length(); + strcpy(update->data, send_itr->second.name.c_str()); + strcpy(update->data + send_itr->second.name.length(), send_itr->second.description.c_str()); + pos += sizeof(ZoneUpdate_Struct) + send_itr->second.name.length() + send_itr->second.description.length(); + } + SendPacket(outpack); + outpack->Deflate(); + safe_delete(outpack); + } + if(zone_updates && count < max) + zone_updates->clear(); + if(zone_updates && zone_updates->size() == 0){ + database.UpdateLoginZones(); + safe_delete(zone_updates); + } + } + break; + } + case ServerOP_CharacterCreate:{ + LogWrite(OPCODE__DEBUG, 1, "Opcode", "Opcode 0x%X (%i): ServerOP_CharacterCreate", pack->opcode, pack->opcode); + + int16 version = 1; + if(pack->pBuffer[0] > 0) + memcpy(&version, pack->pBuffer, sizeof(int16)); + //DumpPacket(pack->pBuffer,pack->size); + PacketStruct* packet = configReader.getStruct("CreateCharacter", version); + int8 resp = 0; + int32 acct_id = 0; + int32 char_id = 0; + if(packet && packet->LoadPacketData(pack->pBuffer+sizeof(int16),pack->size - sizeof(int16))){ + EQ2_16BitString name = packet->getType_EQ2_16BitString_ByName("name"); + resp = database.CheckNameFilter(name.data.c_str()); + acct_id = packet->getType_int32_ByName("account_id"); + LogWrite(WORLD__DEBUG, 0, "World", "Response: %i", (int)resp); + + sint16 lowestStatus = database.GetLowestCharacterAdminStatus(acct_id); + if(lowestStatus == -2) + resp = UNKNOWNERROR_REPLY2; + else if(resp == CREATESUCCESS_REPLY) + char_id = database.SaveCharacter(packet, acct_id); + } + else{ + LogWrite(WORLD__ERROR, 0, "World", "Invalid creation request!"); + resp = UNKNOWNERROR_REPLY; + } + // send name filter response data back to the login server + SendFilterNameResponse ( resp , acct_id , char_id ); + safe_delete(packet); + break; + } + case ServerOP_BasicCharUpdate: { + LogWrite(OPCODE__DEBUG, 1, "Opcode", "Opcode 0x%X (%i): ServerOP_BasicCharUpdate", pack->opcode, pack->opcode); + + if(pack->size != sizeof(CharDataUpdate_Struct)) + break; + + CharDataUpdate_Struct* cdu = (CharDataUpdate_Struct*) pack->pBuffer; + + switch(cdu->update_field) + { + case DELETE_UPDATE_FLAG: + { + LogWrite(WORLD__DEBUG, 0, "World", "Delete character request: %i %i",cdu->account_id,cdu->char_id ); + database.DeleteCharacter(cdu->account_id,cdu->char_id); + break; + } + } + break; + } + case ServerOP_UsertoWorldReq:{ + LogWrite(OPCODE__DEBUG, 0, "Opcode", "Opcode 0x%X (%i): ServerOP_UsertoWorldReq", pack->opcode, pack->opcode); + + UsertoWorldRequest_Struct* utwr = (UsertoWorldRequest_Struct*) pack->pBuffer; + /*int32 id = database.GetAccountIDFromLSID(utwr->lsaccountid); + sint16 status = database.CheckStatus(id); + */ + + int32 access_key = 0; + + // if it is a accepted login, we add the zone auth request + access_key = DetermineCharacterLoginRequest ( utwr ); + + if ( access_key != 0 ) + { + zone_auth.PurgeInactiveAuth(); + char* characterName = database.GetCharacterName( utwr->char_id ); + if(characterName != 0){ + ZoneAuthRequest* zar = new ZoneAuthRequest(utwr->lsaccountid,characterName,access_key); + zar->setFirstLogin ( true ); + zone_auth.AddAuth(zar); + safe_delete_array(characterName); + } + } + break; + } + case ServerOP_ResetDatabase:{ + LogWrite(OPCODE__DEBUG, 1, "Opcode", "Opcode 0x%X (%i): ServerOP_ResetDatabase", pack->opcode, pack->opcode); + + database.ResetDatabase(); + break; + } + case UpdateServerOP_Verified:{ + LogWrite(OPCODE__DEBUG, 1, "Opcode", "Opcode 0x%X (%i): UpdateServerOP_Verified", pack->opcode, pack->opcode); + + update_server_verified = true; + break; + } + case UpdateServerOP_DisplayMsg:{ + LogWrite(OPCODE__DEBUG, 1, "Opcode", "Opcode 0x%X (%i): UpdateServerOP_DisplayMsg", pack->opcode, pack->opcode); + + LogWrite(WORLD__WARNING, 0, "World", "\t%s", pack->pBuffer); + break; + } + case UpdateServerOP_Completed:{ + LogWrite(OPCODE__DEBUG, 1, "Opcode", "Opcode 0x%X (%i): UpdateServerOP_Completed", pack->opcode, pack->opcode); + + update_server_completed = true; + break; + } + + default: + { + LogWrite(WORLD__ERROR, 0, "World", "Unhandled opcode: %i", pack->opcode); + DumpPacket(pack); + } + } + safe_delete(pack); + } + return ret; +} + +// this should always be called in a new thread +#ifdef WIN32 +void AutoInitLoginServer(void *tmp) { +#else +void *AutoInitLoginServer(void *tmp) { +#endif + if (loginserver.GetState() == TCPS_Ready) { + InitLoginServer(); + } +#ifndef WIN32 + return 0; +#endif +} + +bool InitLoginServer() { + if (loginserver.GetState() != TCPS_Ready) { + LogWrite(WORLD__ERROR, 0, "World", "InitLoginServer() while already attempting connect."); + return false; + } + if (!net.LoginServerInfo) { + LogWrite(WORLD__ERROR, 0, "World", "Login server info not loaded."); + return false; + } + + AttemptingConnect = true; + int16 port; + char* address = net.GetLoginInfo(&port); + loginserver.Connect(address, port); + return true; +} + +void LoginServer::InitLoginServerVariables() +{ + minLockedStatus = rule_manager.GetGlobalRule(R_World, ServerLockedOverrideStatus)->GetSInt16(); + maxPlayers = rule_manager.GetGlobalRule(R_World, MaxPlayers)->GetSInt16(); + minGameFullStatus = rule_manager.GetGlobalRule(R_World, MaxPlayersOverrideStatus)->GetSInt16(); +} + +void LoginServer::ProcessDataUpdate(uchar* data){ + TableDataQuery data_query; + TableQuery table_queries; + data_query.DeSerialize(data); + string query; + + for(int32 i=0;iquery).append(")\0"); + char* new_query = new char[query.length() + 1]; + memset(new_query, 0, query.length() + 1); + memcpy(new_query, query.c_str(), query.length()); + table_queries.AddQuery(new_query); + } + + strcpy(table_queries.tablename, data_query.tablename); + table_queries.latest_version = data_query.version; + string queries = table_queries.GetQueriesString(); + char answer = 0; + + if(UpdatesAsk() || UpdatesVerbose()) + LogWrite(INIT__PATCHER_WARNING, 0, "Patcher", "Pending Queries:\n%s", queries.c_str()); + + if(!UpdatesAuto() && UpdatesAsk()) + { + LogWrite(INIT__PATCHER_WARNING, 0, "Patcher", "Update to the latest data version? ([Y]es, [N]o, [A]ll)"); + cin >> answer; + if(toupper(answer) == 'A') + UpdatesAuto(true); + } + if(UpdatesAuto() || (answer && toupper(answer) == 'Y')) + { + bool success = database.RunDatabaseQueries(&table_queries, false, true); + string table = string(data_query.tablename); + if(table != last_data_update_table) + { + if(success) + LogWrite(INIT__PATCHER_DEBUG, 0, "Patcher", "\tData Updated: '%s' = SUCCESS!", data_query.tablename); + else + LogWrite(INIT__PATCHER_ERROR, 0, "Patcher", "Data Updated: '%s' = FAILED!", data_query.tablename); + + last_data_update_table = table; + } + } +} + +void LoginServer::ProcessTableUpdate(uchar* data) { + TableQuery table_query; + table_query.DeSerialize(data); + string queries = table_query.GetQueriesString(); + char answer = 0; + if(UpdatesAsk() || UpdatesVerbose()) + { + LogWrite(INIT__PATCHER_DEBUG, 0, "Patcher", "\tUpdate Found for '%s'!", table_query.tablename); + LogWrite(INIT__PATCHER_DEBUG, 0, "Patcher", "\tNew Version: %i", table_query.latest_version); + LogWrite(INIT__PATCHER_DEBUG, 0, "Patcher", "\tYour Version: %i", table_query.your_version); + LogWrite(INIT__PATCHER_WARNING, 0, "Patcher", "Pending Query:\n%s", queries.c_str()); + } + if(!UpdatesAuto() && UpdatesAsk()) + { + LogWrite(INIT__PATCHER_WARNING, 0, "Patcher", "Update to the latest table version? ([Y]es, [N]o, [A]ll)"); + cin >> answer; + if(toupper(answer) == 'A') + UpdatesAuto(true); + } + if(UpdatesAuto() || (answer && toupper(answer) == 'Y')) + { + bool success = database.RunDatabaseQueries(&table_query, false); + if(success) + LogWrite(INIT__PATCHER_DEBUG, 0, "Patcher", "\tUpdate Table: '%s' = SUCCESS!", table_query.tablename); + else + LogWrite(INIT__PATCHER_ERROR, 0, "Patcher", "Update Table: '%s' = FAILED!", table_query.tablename); + } +} + +int32 LoginServer::ProcessTableUpdates(uchar* data) { + int32 ret = 0; + /*LatestTableVersions table_versions; + table_versions.DeSerialize(data); + int32 total_tables = table_versions.GetTotalTables(); + + int32 max_version = CURRENT_DATABASE_MAJORVERSION*100 + CURRENT_DATABASE_MINORVERSION; + LogWrite(INIT__PATCHER_DEBUG, 0, "Patcher", "--Max Version: %i", max_version); + + vector packet_requests; + ServerPacket* outpack = 0; + for(int32 i=0;ipBuffer; + strcpy(out_version->name, table_versions.GetTable(i).name); + out_version->max_table_version = max_version; + out_version->version = (int32)version; + out_version->last = 0; + packet_requests.push_back(outpack); + ret++; + } + } + if( ret ) + LogWrite(INIT__PATCHER_DEBUG, 0, "Patcher", "--Found Table Updates!"); + else + LogWrite(INIT__PATCHER_DEBUG, 0, "Patcher", "--No Table Updates, continuing..."); + + int32 total_packets = packet_requests.size(); + for(int32 i=0;ipBuffer; + out_version->last = 1; + } + SendPacket(outpack); + safe_delete(outpack); + }*/ + return ret; +} + +int32 LoginServer::ProcessDataUpdates(uchar* data) { + int32 ret = 0; + /*LatestTableVersions table_versions; + table_versions.DeSerialize(data); + int32 total_tables = table_versions.GetTotalTables(); + vector packet_requests; + ServerPacket* outpack = 0; + for(int32 i=0;i= 0 && version < table_versions.GetTable(i).data_version ) + { + ServerPacket* outpack = new ServerPacket(ServerOP_GetTableData, sizeof(TableVersion)); + TableVersion* out_version = (TableVersion*)outpack->pBuffer; + strcpy(out_version->name, table_versions.GetTable(i).name); + out_version->max_data_version = CURRENT_DATABASE_MAJORVERSION*100 + CURRENT_DATABASE_MINORVERSION; + out_version->data_version = (sint32)version; + out_version->last = 0; + memset(out_version->column_names, 0, 1000); + string columns = database.GetColumnNames(out_version->name); + if(columns.length() > 1) + strcpy(out_version->column_names, columns.c_str()); + packet_requests.push_back(outpack); + ret++; + } + } + } + if( ret ) + LogWrite(INIT__PATCHER_DEBUG, 0, "Patcher", "--Found Data Updates!"); + + int32 total_packets = packet_requests.size(); + for(int32 i=0;ipBuffer; + out_version->last = 1; + } + SendPacket(outpack); + safe_delete(outpack); + }*/ + return ret; +} + +bool LoginServer::CheckAndWait(Timer* timer){ + Timer::SetCurrentTime(); + if(timer->Check(false)){ + if(timer->GetDuration() == 5000){ + LogWrite(INIT__PATCHER_WARNING, 0, "Patcher", "Please wait..."); + timer->SetTimer(25000); + timer->Start(); + } + else + return false; + } + Sleep(10); + if(!loginserver.Process()) + tcpc->Disconnect(); + return Connected(); +} + +bool LoginServer::ConnectToUpdateServer(const char* iAddress, int16 iPort) +{ + if(!try_auto_update) + return true; + + char errbuf[TCPConnection_ErrorBufferSize]; + memset(errbuf, 0, TCPConnection_ErrorBufferSize); + + if (iAddress == 0) + { + LogWrite(INIT__PATCHER_ERROR, 0, "Patcher", "PatchServer::ConnectToUpdateServer: address == 0"); + return false; + } + else + { + if ((UpdateServerIP = ResolveIP(iAddress, errbuf)) == 0) + { + LogWrite(INIT__PATCHER_ERROR, 0, "Patcher", "LoginServer::ConnectToUpdateServer: Resolving IP address: '%s'", errbuf[0] == '\0' ? errbuf : " "); + return false; + } + } + + if (iPort != 0) + UpdateServerPort = iPort; + + if (UpdateServerIP == 0 || UpdateServerPort == 0) + { + LogWrite(INIT__PATCHER_ERROR, 0, "Patcher", "PatchServer::ConnectToUpdateServer: Connect info incomplete, cannot connect."); + return false; + } + + if (tcpc->Connect(UpdateServerIP, UpdateServerPort, errbuf)) + { + LogWrite(INIT__PATCHER_DEBUG, 0, "Patcher", "-Connected to Update Server: %s:%i", iAddress, UpdateServerPort); + SendInfo(); + + //wait for a max of 30 seconds to be verified by patcher + //display a message at 5 seconds + Timer waitTimer(5000); + waitTimer.Start(); + + LogWrite(INIT__PATCHER_DEBUG, 0, "Patcher", "-Checking for updates."); + GetLatestTables(); + + while(CheckAndWait(&waitTimer) && !update_server_verified); + database.CheckVersionTable(); + + if(!update_server_verified) + LogWrite(INIT__PATCHER_ERROR, 0, "Patcher", "Error while getting updates!"); + + if(update_server_verified) + { + update_server_completed = false; + waitTimer.SetTimer(5000); + waitTimer.Start(); + + while(CheckAndWait(&waitTimer) && !data_waiting); + + if(data_waiting) + { + int32 requests = ProcessTableUpdates(data_waiting); + + if(requests > 0) + LogWrite(INIT__PATCHER_DEBUG, 0, "Patcher", "--Found Table Updates."); + + uchar* data = 0; + waitTimer.SetTimer(30000); + waitTimer.Start(); + + if(requests > 0) + { + LogWrite(INIT__PATCHER_DEBUG, 0, "Patcher", "--Processing Table Updates."); + database.DisableConstraints(); + deque alter_table_updates_waiting; + + while((CheckAndWait(&waitTimer) && !update_server_completed) || table_updates_waiting.size() > 0) + { + if(table_updates_waiting.size() > 0) + { + data = table_updates_waiting.front(); + table_updates_waiting.pop_front(); + ProcessTableUpdate(data); + safe_delete(data); + waitTimer.SetTimer(30000); + waitTimer.Start(); + } + } + + if(!CheckAndWait(&waitTimer)) + LogWrite(INIT__PATCHER_ERROR, 0, "Patcher", "Timeout waiting for updates to complete! Try again later."); + else + LogWrite(INIT__PATCHER_DEBUG, 0, "Patcher", "--Table Update complete."); + + database.EnableConstraints(); + } + else + LogWrite(INIT__PATCHER_DEBUG, 0, "Patcher", "-No changes to DB Schema..."); + + requests = ProcessDataUpdates(data_waiting); + + if(requests > 0) + { + LogWrite(INIT__PATCHER_DEBUG, 0, "Patcher", "--Processing Data Updates."); + LogWrite(INIT__PATCHER_WARNING, 0, "Patcher", "** Data Updates are SLOW! Do not abort! **"); + + database.DisableConstraints(); + + deque alter_table_updates_waiting; + int32 count = 0; + + while((CheckAndWait(&waitTimer) && count < requests) || data_updates_waiting.size() > 0) + { + if(data_updates_waiting.size() > 0) + { + data = data_updates_waiting.front(); + data_updates_waiting.pop_front(); + ProcessDataUpdate(data); + count++; + safe_delete_array(data); + waitTimer.SetTimer(30000); + waitTimer.Start(); + } + } + + if(!CheckAndWait(&waitTimer)) + LogWrite(INIT__PATCHER_ERROR, 0, "Patcher", "Timeout waiting for updates to complete! Try again later."); + else + LogWrite(INIT__PATCHER_DEBUG, 0, "Patcher", "--Data Updates complete."); + + database.EnableConstraints(); + } + else + LogWrite(INIT__PATCHER_DEBUG, 0, "Patcher", "-No changes to DB Data..."); + + safe_delete_array(data_waiting); + } + try_auto_update = false; + } + + tcpc->Disconnect(); + return update_server_verified; + } + else + { + LogWrite(INIT__PATCHER_ERROR, 0, "Patcher", "PatchServer::ConnectToUpdateServer: '%s'", errbuf[0] == '\0' ? errbuf : " "); + return false; + } +} + +bool LoginServer::Connect(const char* iAddress, int16 iPort) { + if(!pTryReconnect) + return false; + + char errbuf[TCPConnection_ErrorBufferSize]; + memset(errbuf, 0, TCPConnection_ErrorBufferSize); + if (iAddress == 0) { + LogWrite(WORLD__ERROR, 0, "World", "LoginServer::Connect: address == 0"); + return false; + } + else { + if ((LoginServerIP = ResolveIP(iAddress, errbuf)) == 0) { + LogWrite(WORLD__ERROR, 0, "World", "LoginServer::Connect: Resolving IP address: '%s'", errbuf); + return false; + } + } + if (iPort != 0) + LoginServerPort = iPort; + + if (LoginServerIP == 0 || LoginServerPort == 0) { + LogWrite(WORLD__ERROR, 0, "World", "LoginServer::Connect: Connect info incomplete, cannot connect"); + return false; + } + + if (tcpc->Connect(LoginServerIP, LoginServerPort, errbuf)) { + LogWrite(WORLD__INFO, 0, "World", "Connected to LoginServer: %s: %i", iAddress, LoginServerPort); + SendInfo(); + SendStatus(); + return true; + } + else { + LogWrite(WORLD__ERROR, 0, "World", "LoginServer::Connect: '%s'", errbuf); + return false; + } +} +void LoginServer::GetLatestTables(){ + ServerPacket* pack = new ServerPacket(ServerOP_GetLatestTables, sizeof(GetLatestTables_Struct)); + GetLatestTables_Struct* data = (GetLatestTables_Struct*)pack->pBuffer; + data->table_version = CURRENT_DATABASE_MAJORVERSION*100 + CURRENT_DATABASE_MINORVERSION; + data->data_version = CURRENT_DATABASE_MAJORVERSION*100 + CURRENT_DATABASE_MINORVERSION; + SendPacket(pack); + delete pack; +} +void LoginServer::SendInfo() { + ServerPacket* pack = new ServerPacket; + pack->opcode = ServerOP_LSInfo; + pack->size = sizeof(ServerLSInfo_Struct); + pack->pBuffer = new uchar[pack->size]; + memset(pack->pBuffer, 0, pack->size); + ServerLSInfo_Struct* lsi = (ServerLSInfo_Struct*) pack->pBuffer; + strcpy(lsi->protocolversion, EQEMU_PROTOCOL_VERSION); + strcpy(lsi->serverversion, CURRENT_VERSION); + strcpy(lsi->name, net.GetWorldName()); + strcpy(lsi->account, net.GetWorldAccount()); + lsi->dbversion = CURRENT_DATABASE_MAJORVERSION*100 + CURRENT_DATABASE_MINORVERSION; +#ifdef _DEBUG + lsi->servertype = 4; +#endif + int8 tmppass[16]; + MD5::Generate((uchar*)net.GetWorldPassword(), strlen(net.GetWorldPassword()), tmppass); + char* ptr = lsi->password; + for(int i=0;i<15;i++){ + sprintf(ptr, "%02x", tmppass[i]); + ptr += 2; + } + //memcpy(lsi->password, tmppass, 16); + strcpy(lsi->address, net.GetWorldAddress()); + SendPacket(pack); + delete pack; +} + +void LoginServer::SendStatus() { + statusupdate_timer->Start(); + ServerPacket* pack = new ServerPacket; + pack->opcode = ServerOP_LSStatus; + pack->size = sizeof(ServerLSStatus_Struct); + pack->pBuffer = new uchar[pack->size]; + memset(pack->pBuffer, 0, pack->size); + ServerLSStatus_Struct* lss = (ServerLSStatus_Struct*) pack->pBuffer; + + if (net.world_locked) + lss->status = -2; + else if(loginserver.maxPlayers > -1 && numclients >= loginserver.maxPlayers) + lss->status = -3; + else + lss->status = 1; + + lss->num_zones = numzones; + lss->num_players = numclients; + lss->world_max_level = rule_manager.GetGlobalRule(R_Player, MaxLevel)->GetInt8(); + SendPacket(pack); + delete pack; +} + +void LoginServer::SendDeleteCharacter ( CharacterTimeStamp_Struct* cts ) { + ServerPacket* outpack = new ServerPacket(ServerOP_BasicCharUpdate, sizeof(CharDataUpdate_Struct)); + CharDataUpdate_Struct* cdu = (CharDataUpdate_Struct*)outpack->pBuffer; + cdu->account_id = cts->account_id; + cdu->char_id = cts->char_id; + cdu->update_field = DELETE_UPDATE_FLAG; + cdu->update_data = 1; + SendPacket(outpack); + safe_delete(outpack); +} + +void LoginServer::SendFilterNameResponse ( int8 resp, int32 acct_id , int32 char_id ) { + ServerPacket* outpack = new ServerPacket(ServerOP_CharacterCreate, sizeof(WorldCharNameFilterResponse_Struct)); + WorldCharNameFilterResponse_Struct* wcfr = (WorldCharNameFilterResponse_Struct*)outpack->pBuffer; + wcfr->response = resp; + wcfr->account_id = acct_id; + wcfr->char_id = char_id; + SendPacket(outpack); + safe_delete(outpack); +} + +int32 LoginServer::DetermineCharacterLoginRequest ( UsertoWorldRequest_Struct* utwr ) { + LogWrite(LOGIN__TRACE, 9, "Login", "Enter: %s", __FUNCTION__); + ServerPacket* outpack = new ServerPacket; + outpack->opcode = ServerOP_UsertoWorldResp; + outpack->size = sizeof(UsertoWorldResponse_Struct); + outpack->pBuffer = new uchar[outpack->size]; + memset(outpack->pBuffer, 0, outpack->size); + UsertoWorldResponse_Struct* utwrs = (UsertoWorldResponse_Struct*) outpack->pBuffer; + utwrs->lsaccountid = utwr->lsaccountid; + utwrs->char_id = utwr->char_id; + utwrs->ToID = utwr->FromID; + int32 timestamp = Timer::GetUnixTimeStamp(); + utwrs->access_key = timestamp; + + // set default response to 0 + utwrs->response = 0; + + sint16 lowestStatus = database.GetLowestCharacterAdminStatus( utwr->lsaccountid ); + + sint16 status = 0; + + if(lowestStatus == -2) + status = -1; + else + status = database.GetCharacterAdminStatus ( utwr->lsaccountid , utwr->char_id ); + + if(status < 100 && zone_list.ClientConnected(utwr->lsaccountid)) + status = -9; + if(status < 0){ + switch(status){ + case -10: + utwrs->response = PLAY_ERROR_CHAR_NOT_LOADED; + break; + case -9: + utwrs->response = 0;//PLAY_ERROR_ACCOUNT_IN_USE; + break; + case -8: + utwrs->response = PLAY_ERROR_LOADING_ERROR; + break; + case -1: + utwrs->response = PLAY_ERROR_ACCOUNT_BANNED; + break; + default: + utwrs->response = PLAY_ERROR_PROBLEM; + } + } + else if(net.world_locked == true){ + LogWrite(WORLD__INFO, 0, "World", "Login Lock Check (MinStatus: %i):, UserStatus: %i, CharID: %i",loginserver.minLockedStatus,status,utwr->char_id ); + + // has high enough status, allow it + if(status >= loginserver.minLockedStatus) + utwrs->response = 1; + } + else if(loginserver.maxPlayers > -1 && ((sint16)client_list.Count()) >= loginserver.maxPlayers) + { + LogWrite(WORLD__INFO, 0, "World", "Login GameFull Check (MinStatus: %i):, UserStatus: %i, CharID: %i",loginserver.minGameFullStatus,status,utwr->char_id ); + + // has high enough status, allow it + if(status >= loginserver.minGameFullStatus) + { + utwrs->response = 1; + } + else + utwrs->response = -3; // server full response is -3 + } + else + utwrs->response = 1; + + /*sint32 x = database.CommandRequirement("$MAXCLIENTS"); + if( (sint32)numplayers >= x && x != -1 && x != 255 && status < 80) + utwrs->response = -3; + + if(status == -1) + utwrs->response = -1; + if(status == -2) + utwrs->response = -2; + */ + //printf("Response is %i for %i\n",utwrs->response,id); + if((strcmp(net.GetWorldAddress(), utwr->ip_address)==0) && (strlen(net.GetInternalWorldAddress())>0)) + strcpy(utwrs->ip_address, net.GetInternalWorldAddress()); + else + strcpy(utwrs->ip_address, net.GetWorldAddress()); + utwrs->port = net.GetWorldPort(); + utwrs->worldid = utwr->worldid; + SendPacket(outpack); + delete outpack; + + LogWrite(LOGIN__TRACE, 9, "Login", "Exit: %s with timestamp=%u", __FUNCTION__, timestamp); + // depending on the response determined above, this could return 0 (for failure) + return timestamp; +} + diff --git a/EQ2/source/WorldServer/LoginServer.h b/EQ2/source/WorldServer/LoginServer.h new file mode 100644 index 000000000..6eae37a35 --- /dev/null +++ b/EQ2/source/WorldServer/LoginServer.h @@ -0,0 +1,110 @@ +/* + EQ2Emulator: Everquest II Server Emulator + Copyright (C) 2007 EQ2EMulator Development Team (http://www.eq2emulator.net) + + This file is part of EQ2Emulator. + + EQ2Emulator is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + EQ2Emulator is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with EQ2Emulator. If not, see . +*/ +#ifndef LOGINSERVER_H +#define LOGINSERVER_H + +#include "../common/servertalk.h" +#include "../common/linked_list.h" +#include "../common/timer.h" +#include "../common/queue.h" +#include "../common/Mutex.h" +#include "../common/TCPConnection.h" +#include +#include "MutexMap.h" + +#ifdef WIN32 + void AutoInitLoginServer(void *tmp); +#else + void *AutoInitLoginServer(void *tmp); +#endif +bool InitLoginServer(); + +class LoginServer{ +public: + LoginServer(const char* iAddress = 0, int16 iPort = 5999); + ~LoginServer(); + + bool Process(); + bool Connect(const char* iAddress = 0, int16 iPort = 0); + + bool ConnectToUpdateServer(const char* iAddress = 0, int16 iPort = 0); + + void SendInfo(); + void SendStatus(); + void GetLatestTables(); + + void SendPacket(ServerPacket* pack) { tcpc->SendPacket(pack); } + int8 GetState() { return tcpc->GetState(); } + bool Connected() { return tcpc->Connected(); } + int32 ProcessTableUpdates(uchar* data); + int32 ProcessDataUpdates(uchar* data); + void ProcessTableUpdate(uchar* data); + void ProcessDataUpdate(uchar* data); + bool CheckAndWait(Timer* timer); + bool UpdatesAuto(){ return updates_always; } + void UpdatesAuto(bool val){ updates_always = val; } + void UpdatesAsk(bool val){ updates_ask = val; } + bool UpdatesAsk(){ return updates_ask; } + void UpdatesVerbose(bool val){ updates_verbose = val; } + bool UpdatesVerbose(){ return updates_verbose; } + void UpdatesAutoData(bool val){ updates_auto_data = val; } + bool UpdatesAutoData(){ return updates_auto_data; } + + void SendFilterNameResponse ( int8 resp , int32 acct_id , int32 char_id ); + + void SendDeleteCharacter ( CharacterTimeStamp_Struct* cts ); + + int32 DetermineCharacterLoginRequest ( UsertoWorldRequest_Struct* utwr ); + + void InitLoginServerVariables(); + + sint16 minLockedStatus; + sint16 maxPlayers; + sint16 minGameFullStatus; + + void SendImmediateEquipmentUpdatesForChar(int32 char_id); + + bool CanReconnect() { return pTryReconnect; } + +private: + bool try_auto_update; + bool pTryReconnect; + TCPConnection* tcpc; + int32 LoginServerIP; + int32 UpdateServerIP; + int16 LoginServerPort; + int16 UpdateServerPort; + bool updates_ask; + bool updates_always; + bool updates_verbose; + bool updates_auto_data; + bool update_server_verified; + bool update_server_completed; + uchar* data_waiting; + string last_data_update_table; + deque table_updates_waiting; + deque data_updates_waiting; + MutexMap* zone_updates; + MutexMap* loginEquip_updates; + int32 last_checked_time; + + Timer* statusupdate_timer; +}; +#endif diff --git a/EQ2/source/WorldServer/LuaFunctions.cpp b/EQ2/source/WorldServer/LuaFunctions.cpp new file mode 100644 index 000000000..f359d9402 --- /dev/null +++ b/EQ2/source/WorldServer/LuaFunctions.cpp @@ -0,0 +1,9027 @@ +/* + EQ2Emulator: Everquest II Server Emulator + Copyright (C) 2007 EQ2EMulator Development Team (http://www.eq2emulator.net) + + This file is part of EQ2Emulator. + + EQ2Emulator is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + EQ2Emulator is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with EQ2Emulator. If not, see . +*/ +#include "LuaFunctions.h" +#include "Spawn.h" +#include "WorldDatabase.h" +#include "LuaInterface.h" +#include "../common/ConfigReader.h" +#include "client.h" +#include "World.h" +#include "Commands/Commands.h" +#include "races.h" +#include "classes.h" +#include "Variables.h" +#include "SpellProcess.h" +#include "../common/Log.h" +#include +#include "HeroicOp/HeroicOp.h" +#include "RaceTypes/RaceTypes.h" +#include "ClientPacketFunctions.h" + +extern WorldDatabase database; +extern LuaInterface* lua_interface; +extern ConfigReader configReader; +extern MasterQuestList master_quest_list; +extern MasterItemList master_item_list; +extern MasterSpellList master_spell_list; +extern World world; +extern Commands commands; +extern ZoneList zone_list; +extern Races races; +extern Classes classes; +extern Variables variables; +extern MasterSkillList master_skill_list; +extern MasterHeroicOPList master_ho_list; +extern MasterRaceTypeList race_types_list; +extern MasterLanguagesList master_languages_list; + +int EQ2Emu_lua_PlayFlavor(lua_State* state){ + if(!lua_interface) + return 0; + Spawn* spawn = lua_interface->GetSpawn(state); + string mp3_string = lua_interface->GetStringValue(state, 2); + string text_string = lua_interface->GetStringValue(state, 3); + string emote_string = lua_interface->GetStringValue(state, 4); + int32 key1 = lua_interface->GetInt32Value(state, 5); + int32 key2 = lua_interface->GetInt32Value(state, 6); + Spawn* player = lua_interface->GetSpawn(state, 7); + int8 language = lua_interface->GetInt8Value(state, 8); + if(spawn){ + const char* mp3 = 0; + const char* text = 0; + const char* emote = 0; + if(mp3_string.length() > 0) + mp3 = mp3_string.c_str(); + if(text_string.length() > 0) + text = text_string.c_str(); + if(emote_string.length() > 0) + emote = emote_string.c_str(); + Client* client = 0; + if(player && player->IsPlayer()) + client = spawn->GetZone()->GetClientBySpawn(player); + if(client){ + if(((Player*)player)->WasSentSpawn(spawn->GetID()) && !((Player*)player)->WasSpawnRemoved(spawn)) + spawn->GetZone()->PlayFlavor(client, spawn, mp3, text, emote, key1, key2, language); + } + else + spawn->GetZone()->PlayFlavor(spawn, mp3, text, emote, key1, key2, language); + } + return 0; +} + +int EQ2Emu_lua_PlaySound(lua_State* state){ + if(!lua_interface) + return 0; + Spawn* spawn = lua_interface->GetSpawn(state); + string sound_string = lua_interface->GetStringValue(state, 2); + float x = lua_interface->GetFloatValue(state, 3); + float y = lua_interface->GetFloatValue(state, 4); + float z = lua_interface->GetFloatValue(state, 5); + Spawn* player = lua_interface->GetSpawn(state, 6); + if(spawn && sound_string.length() > 0){ + Client* client = 0; + if(player && player->IsPlayer()) + client = spawn->GetZone()->GetClientBySpawn(player); + if(client) + spawn->GetZone()->PlaySoundFile(client, sound_string.c_str(), x, y, z); + else + spawn->GetZone()->PlaySoundFile(0, sound_string.c_str(), x, y, z); + + } + return 0; +} +int EQ2Emu_lua_SetRequiredQuest(lua_State* state){ + if(!lua_interface) + return 0; + Spawn* spawn = lua_interface->GetSpawn(state); + int32 quest_id = lua_interface->GetInt32Value(state, 2); + int16 quest_step = lua_interface->GetInt16Value(state, 3); + bool private_spawn = (lua_interface->GetInt8Value(state, 4) == 1); + bool continued_access = (lua_interface->GetInt8Value(state, 5) == 1); + int16 flag_override = lua_interface->GetInt16Value(state, 6); + + if (!spawn){ + lua_interface->LogError("LUA SetRequiredQuest command error: spawn is not valid"); + return 0; + } + + if(quest_id > 0){ + //Add this quest to the list of required quests for this spawn + spawn->SetQuestsRequired(quest_id, quest_step); + //If private spawn value set + if(private_spawn){ + //Set the spawn to be private when not granted access through this quest + spawn->AddAllowAccessSpawn(spawn); + spawn->SetPrivateQuestSpawn(true); + } + //This value allows access after a quest step, or the whole quest has been completed + if(continued_access) + spawn->SetQuestsRequiredContinuedAccess(true); + //This value will override vis_flags in the vis packet + if(flag_override > 0) + spawn->SetQuestsRequiredOverride(flag_override); + } + return 0; +} + +int EQ2Emu_lua_SpawnSetByDistance(lua_State* state){ + if(!lua_interface) + return 0; + Spawn* spawn = lua_interface->GetSpawn(state); + float max_distance = lua_interface->GetFloatValue(state, 2); + string variable = lua_interface->GetStringValue(state, 3); + string value = lua_interface->GetStringValue(state, 4); + if(max_distance > 0 && spawn && value.length() > 0 && variable.length() > 0 && spawn->GetZone()) + spawn->GetZone()->SpawnSetByDistance(spawn, max_distance, variable, value); + return 0; +} +int EQ2Emu_lua_PerformCameraShake(lua_State* state) { + + if (!lua_interface) + return 0; + Client* client = 0; + Spawn* player = lua_interface->GetSpawn(state); + if (player->GetZone()) + client = player->GetZone()->GetClientBySpawn(player); + + if (!client) { + lua_interface->LogError("LUA PerformCameraShake command error: could not find client"); + return 0; + } + int16 value1 = lua_interface->GetInt16Value(state, 2); + int16 value2 = lua_interface->GetInt16Value(state, 3); + PacketStruct* packet = configReader.getStruct("WS_PerformCameraShakeMsg", client->GetVersion()); + if (packet) { + packet->setDataByName("unknown1", value1); + packet->setDataByName("unknown2", value2); + client->QueuePacket(packet->serialize()); + safe_delete(packet); + } + return 0; +} +int EQ2Emu_lua_KillSpawn(lua_State* state) { + if(!lua_interface) + return 0; + Spawn* dead = lua_interface->GetSpawn(state); + Spawn* killer = lua_interface->GetSpawn(state, 2); + bool send_packet = (lua_interface->GetInt8Value(state, 3) == 1); + if(dead && dead->Alive() && dead->GetZone()) + dead->GetZone()->KillSpawn(dead, killer, send_packet); + return 0; +} + +int EQ2Emu_lua_KillSpawnByDistance(lua_State* state){ + if(!lua_interface) + return 0; + Spawn* spawn = lua_interface->GetSpawn(state); + float max_distance = lua_interface->GetFloatValue(state, 2); + bool include_players = lua_interface->GetInt8Value(state, 3); + bool send_packet = (lua_interface->GetInt8Value(state, 4) == 1); + if(max_distance > 0 && spawn && spawn->GetZone()) + spawn->GetZone()->KillSpawnByDistance(spawn, max_distance, include_players, send_packet); + return 0; +} + +int EQ2Emu_lua_Despawn(lua_State* state){ + if(!lua_interface) + return 0; + Spawn* spawn = lua_interface->GetSpawn(state); + int32 delay = lua_interface->GetInt32Value(state, 2); + if(spawn && spawn->GetZone()) + spawn->GetZone()->Despawn(spawn, delay); + return 0; +} + +int EQ2Emu_lua_SpawnSet(lua_State* state){ + if(!lua_interface) + return 0; + Spawn* spawn = lua_interface->GetSpawn(state); + string variable = lua_interface->GetStringValue(state, 2); + string value = lua_interface->GetStringValue(state, 3); + int32 type = commands.GetSpawnSetType(variable); + if(type != 0xFFFFFFFF && value.length() > 0 && spawn) + commands.SetSpawnCommand(0, spawn, type, value.c_str()); + return 0; +} + +int EQ2Emu_lua_GetSpawn(lua_State* state){ + if(!lua_interface) + return 0; + Spawn* spawn = lua_interface->GetSpawn(state); + int32 spawn_id = lua_interface->GetInt32Value(state, 2); + if(spawn && spawn_id > 0){ + Spawn* closest_spawn = spawn->GetZone()->GetClosestSpawn(spawn, spawn_id); + if(closest_spawn){ + lua_interface->SetSpawnValue(state, closest_spawn); + return 1; + } + } + return 0; +} + +int EQ2Emu_lua_GetVariableValue(lua_State* state) { + if (!lua_interface) + return 0; + string variable_name = lua_interface->GetStringValue(state); + Variable* var = variables.FindVariable(variable_name); + if (var) { + lua_interface->SetStringValue(state, var->GetValue()); + return 1; + } + return 0; +} + +int EQ2Emu_lua_GetCoinMessage(lua_State* state) { + if (!lua_interface) + return 0; + int32 total_coins = lua_interface->GetInt32Value(state); + if (total_coins == 0) { + lua_interface->SetStringValue(state, "0 copper"); + return 1; + } + char tmp[64] = {0}; + string message = ""; + int32 val = 0; + if (total_coins >= 1000000) { + val = total_coins / 1000000; + total_coins -= 1000000 * val; + sprintf(tmp, " %u Platinum", val); + message.append(tmp); + memset(tmp, 0, 64); + } + if (total_coins >= 10000) { + val = total_coins / 10000; + total_coins -= 10000 * val; + sprintf(tmp, " %u Gold", val); + message.append(tmp); + memset(tmp, 0, 64); + } + if (total_coins >= 100) { + val = total_coins / 100; + total_coins -= 100 * val; + sprintf(tmp, " %u Silver", val); + message.append(tmp); + memset(tmp, 0, 64); + } + if (total_coins > 0) { + sprintf(tmp, " %u Copper", (int32)total_coins); + message.append(tmp); + } + lua_interface->SetStringValue(state, message.c_str()); + return 1; +} + +int EQ2Emu_lua_GetSpawnByGroupID(lua_State* state) { + ZoneServer* zone = lua_interface->GetZone(state); + int32 group_id = lua_interface->GetInt32Value(state, 2); + + if (zone) { + Spawn* spawn = zone->GetSpawnGroup(group_id); + if (spawn) { + lua_interface->SetSpawnValue(state, spawn); + return 1; + } + } + return 0; +} + +int EQ2Emu_lua_GetSpawnByLocationID(lua_State* state) { + ZoneServer* zone = lua_interface->GetZone(state); + int32 location_id = lua_interface->GetInt32Value(state, 2); + if (zone) { + Spawn* spawn = zone->GetSpawnByLocationID(location_id); + if (spawn) { + lua_interface->SetSpawnValue(state, spawn); + return 1; + } + } + return 0; +} + +int EQ2Emu_lua_GetSpawnID(lua_State* state) { + Spawn* spawn = lua_interface->GetSpawn(state); + if (spawn) { + lua_interface->SetInt32Value(state, spawn->GetDatabaseID()); + return 1; + } + return 0; +} + +int EQ2Emu_lua_GetSpawnGroupID(lua_State* state) { + Spawn* spawn = lua_interface->GetSpawn(state); + if (spawn) { + lua_interface->SetInt32Value(state, spawn->GetSpawnGroupID()); + return 1; + } + return 0; +} + +int EQ2Emu_lua_GetSpawnLocationID(lua_State* state) { + Spawn* spawn = lua_interface->GetSpawn(state); + if (spawn) { + lua_interface->SetInt32Value(state, spawn->GetSpawnLocationID()); + return 1; + } + return 0; +} + +int EQ2Emu_lua_GetSpawnLocationPlacementID(lua_State* state) { + Spawn* spawn = lua_interface->GetSpawn(state); + if (spawn) { + lua_interface->SetInt32Value(state, spawn->GetSpawnLocationPlacementID()); + return 1; + } + return 0; +} + +int EQ2Emu_lua_GetFactionAmount(lua_State* state) { + Player* player = (Player*)lua_interface->GetSpawn(state); + int32 faction_id = lua_interface->GetInt32Value(state, 2); + if (player && player->IsPlayer() && faction_id > 0) { + lua_interface->SetInt32Value(state, player->GetFactions()->GetFactionValue(faction_id)); + return 1; + } + return 0; +} + +int EQ2Emu_lua_GetGender(lua_State* state) { + Spawn* spawn = lua_interface->GetSpawn(state); + if (spawn) { + lua_interface->SetInt32Value(state, spawn->GetGender()); + return 1; + } + return 0; +} + +int EQ2Emu_lua_GetTarget(lua_State* state) { + Spawn* spawn = lua_interface->GetSpawn(state); + if (spawn && spawn->IsEntity() && ((Entity*)spawn)->GetTarget()) { + lua_interface->SetSpawnValue(state, ((Entity*)spawn)->GetTarget()); + return 1; + } + return 0; +} + +int EQ2Emu_lua_PlayVoice(lua_State* state){ + if(!lua_interface) + return 0; + Spawn* spawn = lua_interface->GetSpawn(state); + string mp3_string = lua_interface->GetStringValue(state, 2); + int32 key1 = lua_interface->GetInt32Value(state, 3); + int32 key2 = lua_interface->GetInt32Value(state, 4); + Spawn* player = lua_interface->GetSpawn(state, 5); + if(spawn && mp3_string.length() > 0){ + Client* client = 0; + if(player && player->IsPlayer()) + client = spawn->GetZone()->GetClientBySpawn(player); + if(client){ + if(((Player*)player)->WasSentSpawn(spawn->GetID()) && !((Player*)player)->WasSpawnRemoved(spawn)) + spawn->GetZone()->PlayVoice(client, spawn, mp3_string.c_str(), key1, key2); + } + else + spawn->GetZone()->PlayVoice(spawn, mp3_string.c_str(), key1, key2); + } + return 0; +} + +int EQ2Emu_lua_GetCurrentZoneSafeLocation(lua_State* state){ + if(!lua_interface) + return 0; + Spawn* spawn = lua_interface->GetSpawn(state); + if(spawn){ + lua_interface->SetFloatValue(state, spawn->GetZone()->GetSafeX()); + lua_interface->SetFloatValue(state, spawn->GetZone()->GetSafeY()); + lua_interface->SetFloatValue(state, spawn->GetZone()->GetSafeZ()); + return 3; + } + return 0; +} + +int EQ2Emu_lua_AddLootItem(lua_State* state){ + if(!lua_interface) + return 0; + Spawn* spawn = lua_interface->GetSpawn(state); + if(spawn && spawn->IsEntity()){ + int32 item_id = lua_interface->GetInt32Value(state, 2); + int16 charges = lua_interface->GetInt16Value(state, 3); + if(charges == 0) + charges = 1; + ((Entity*)spawn)->AddLootItem(item_id, charges); + } + return 0; +} + +int EQ2Emu_lua_RemoveLootItem(lua_State* state){ + if(!lua_interface) + return 0; + Spawn* spawn = lua_interface->GetSpawn(state); + if(spawn && spawn->IsEntity()){ + int32 item_id = lua_interface->GetInt32Value(state, 2); + ((Entity*)spawn)->LootItem(item_id); + } + return 0; +} + +int EQ2Emu_lua_AddLootCoin(lua_State* state){ + if(!lua_interface) + return 0; + Spawn* spawn = lua_interface->GetSpawn(state); + if(spawn && spawn->IsEntity()){ + int32 val = lua_interface->GetInt32Value(state, 2); + ((Entity*)spawn)->AddLootCoins(val); + } + return 0; +} + +int EQ2Emu_lua_GiveLoot(lua_State* state){ + if(!lua_interface) + return 0; + Spawn* entity = lua_interface->GetSpawn(state); + Spawn* player = lua_interface->GetSpawn(state, 2); + if(entity && entity->IsEntity() && player && player->IsPlayer()){ + int32 coins = lua_interface->GetInt32Value(state, 3); + vector* items = 0; + int i=0; + int32 item_id = 0; + while((item_id = lua_interface->GetInt32Value(state, 4+i))){ + if(items == 0) + items = new vector; + if(master_item_list.GetItem(item_id)) + items->push_back(master_item_list.GetItem(item_id)); + i++; + } + Client* client = 0; + client = entity->GetZone()->GetClientBySpawn(player); + if(client){ + ((Player*)player)->AddPendingLootItems(entity->GetID(), items); + client->Loot(coins, ((Player*)player)->GetPendingLootItems(entity->GetID()), (Entity*)entity); + } + safe_delete(items); + } + return 0; +} + +int EQ2Emu_lua_HasPendingLootItem(lua_State* state){ + if(!lua_interface) + return 0; + Spawn* entity = lua_interface->GetSpawn(state); + Spawn* player = lua_interface->GetSpawn(state, 2); + int32 item_id = lua_interface->GetInt32Value(state, 3); + if(entity && entity->IsEntity() && player && player->IsPlayer() && item_id > 0){ + lua_interface->SetBooleanValue(state, ((Player*)player)->HasPendingLootItem(entity->GetID(), item_id)); + return 1; + } + return 0; +} + +int EQ2Emu_lua_HasPendingLoot(lua_State* state){ + if(!lua_interface) + return 0; + Spawn* entity = lua_interface->GetSpawn(state); + Spawn* player = lua_interface->GetSpawn(state, 2); + if(entity && entity->IsEntity() && player && player->IsPlayer()){ + lua_interface->SetBooleanValue(state, ((Player*)player)->HasPendingLootItems(entity->GetID())); + return 1; + } + return 0; +} + +int EQ2Emu_lua_CreateConversation(lua_State* state){ + if(!lua_interface) + return 0; + vector* conversation = new vector(); + lua_interface->SetConversationValue(state, conversation); + return 1; +} + +int EQ2Emu_lua_AddConversationOption(lua_State* state){ + if(!lua_interface) + return 0; + vector* conversation = lua_interface->GetConversation(state); + if(conversation){ + ConversationOption conv_option; + conv_option.option = lua_interface->GetStringValue(state, 2); + conv_option.function = lua_interface->GetStringValue(state, 3); + if(conv_option.option.length() > 0) + conversation->push_back(conv_option); + } + return 0; +} + +int EQ2Emu_lua_CloseConversation(lua_State* state){ + if(!lua_interface) + return 0; + Spawn* npc = lua_interface->GetSpawn(state); + Spawn* player = lua_interface->GetSpawn(state, 2); + if(npc && player && player->IsPlayer() && player->GetZone()){ + Client* client = player->GetZone()->GetClientBySpawn(player); + if(client){ + int32 conversation_id = client->GetConversationID(npc, 0); + client->CloseDialog(conversation_id); + } + } + return 0; +} + +int EQ2Emu_lua_CloseItemConversation(lua_State* state){ + if(!lua_interface) + return 0; + Item* item = lua_interface->GetItem(state); + Spawn* player = lua_interface->GetSpawn(state, 2); + if(item && player && player->IsPlayer() && player->GetZone()){ + Client* client = player->GetZone()->GetClientBySpawn(player); + if(client){ + int32 conversation_id = client->GetConversationID(0, item); + client->CloseDialog(conversation_id); + } + } + return 0; +} + +int EQ2Emu_lua_StartDialogConversation(lua_State* state) { + if (!lua_interface) + return 0; + vector* conversation = lua_interface->GetConversation(state); + Spawn* spawn = 0; + Item* item = 0; + int8 type = lua_interface->GetInt8Value(state, 2); + if (type == 1 || type == 3) + spawn = lua_interface->GetSpawn(state, 3); + else if (type == 2 || type == 4) + item = lua_interface->GetItem(state, 3); + Spawn* player = lua_interface->GetSpawn(state, 4); + string text = lua_interface->GetStringValue(state, 5); + string mp3 = lua_interface->GetStringValue(state, 6); + int32 key1 = lua_interface->GetInt32Value(state, 7); + int32 key2 = lua_interface->GetInt32Value(state, 8); + if (conversation && text.length() > 0 && (spawn || item) && player && player->IsPlayer()) { + Client* client = player->GetZone()->GetClientBySpawn(player); + if (client) { + if (spawn) { + // Need to do this so the function works the same as it did before + if (type == 1) + type++; + + if (mp3.length() > 0) + client->DisplayConversation((Entity*)spawn, type, conversation, const_cast(text.c_str()), mp3.c_str(), key1, key2); + else + client->DisplayConversation((Entity*)spawn, type, conversation, const_cast(text.c_str())); + } + else { + if (mp3.length() > 0) + client->DisplayConversation(item, conversation, const_cast(text.c_str()), type, mp3.c_str(), key1, key2); + else + client->DisplayConversation(item, conversation, const_cast(text.c_str()), type); + } + } + } + safe_delete(conversation); + return 0; +} + +/*int EQ2Emu_lua_StartItemConversation(lua_State* state){ + if(!lua_interface) + return 0; + vector* conversation = lua_interface->GetConversation(state); + Item* item = lua_interface->GetItem(state, 2); + Spawn* player = lua_interface->GetSpawn(state, 3); + string text = lua_interface->GetStringValue(state, 4); + string mp3 = lua_interface->GetStringValue(state, 5); + int32 key1 = lua_interface->GetInt32Value(state, 6); + int32 key2 = lua_interface->GetInt32Value(state, 7); + if(conversation && text.length() > 0 && item && player && player->IsPlayer()){ + Client* client = player->GetZone()->GetClientBySpawn(player); + if(client){ + if(mp3.length() > 0) + client->DisplayConversation(item, conversation, (char*)text.c_str(), mp3.c_str(), key1, key2); + else + client->DisplayConversation(item, conversation, (char*)text.c_str()); + } + safe_delete(conversation); + } + return 0; +}*/ + +int EQ2Emu_lua_StartConversation(lua_State* state){ + if(!lua_interface) + return 0; + vector* conversation = lua_interface->GetConversation(state); + Spawn* npc = lua_interface->GetSpawn(state, 2); + Spawn* player = lua_interface->GetSpawn(state, 3); + string text = lua_interface->GetStringValue(state, 4); + string mp3 = lua_interface->GetStringValue(state, 5); + int32 key1 = lua_interface->GetInt32Value(state, 6); + int32 key2 = lua_interface->GetInt32Value(state, 7); + if(conversation && text.length() > 0 && npc && npc->IsEntity() && player && player->IsPlayer()){ + Client* client = npc->GetZone()->GetClientBySpawn(player); + if(mp3.length() > 0) + client->DisplayConversation((Entity*)npc, 1, conversation, text.c_str(), mp3.c_str(), key1, key2); + else + client->DisplayConversation((Entity*)npc, 1, conversation, text.c_str()); + safe_delete(conversation); + } + return 0; +} + +int EQ2Emu_lua_SetPlayerProximityFunction(lua_State* state){ + if(!lua_interface) + return 0; + Spawn* spawn = lua_interface->GetSpawn(state); + float distance = lua_interface->GetFloatValue(state, 2); + string in_range_function = lua_interface->GetStringValue(state, 3); + string leaving_range_function = lua_interface->GetStringValue(state, 4); + if(spawn && !spawn->IsPlayer() && distance > 0 && in_range_function.length() > 0) + spawn->GetZone()->AddPlayerProximity(spawn, distance, in_range_function, leaving_range_function); + return 0; +} + +int EQ2Emu_lua_SetLocationProximityFunction(lua_State* state) { + ZoneServer* zone = lua_interface->GetZone(state); + float x = lua_interface->GetFloatValue(state, 2); + float y = lua_interface->GetFloatValue(state, 3); + float z = lua_interface->GetFloatValue(state, 4); + float max_variation = lua_interface->GetFloatValue(state, 5); + string in_range_function = lua_interface->GetStringValue(state, 6); + string leaving_range_function = lua_interface->GetStringValue(state, 7); + if (zone && in_range_function.length() > 0) + zone->AddLocationProximity(x, y, z, max_variation, in_range_function, leaving_range_function); + return 0; +} + +int EQ2Emu_lua_SetLootCoin(lua_State* state){ + if(!lua_interface) + return 0; + Spawn* spawn = lua_interface->GetSpawn(state); + if(spawn && spawn->IsEntity()){ + int32 val = lua_interface->GetInt32Value(state, 2); + ((Entity*)spawn)->SetLootCoins(val); + } + return 0; +} + +int EQ2Emu_lua_GetLootCoin(lua_State* state){ + if(!lua_interface) + return 0; + Spawn* spawn = lua_interface->GetSpawn(state); + if(spawn && spawn->IsEntity()){ + lua_interface->SetInt32Value(state, ((Entity*)spawn)->GetLootCoins()); + return 1; + } + return 0; +} + +int EQ2Emu_lua_MovementLoopAdd(lua_State* state){ + if(!lua_interface) + return 0; + Spawn* spawn = lua_interface->GetSpawn(state); + float x = lua_interface->GetFloatValue(state, 2); + float y = lua_interface->GetFloatValue(state, 3); + float z = lua_interface->GetFloatValue(state, 4); + float speed = lua_interface->GetFloatValue(state, 5); + int32 delay = lua_interface->GetInt32Value(state, 6); //this should be given as seconds, as it is converted to ms later + string function = lua_interface->GetStringValue(state, 7); + if(spawn){ + spawn->AddMovementLocation(x, y, z, speed, delay, function.c_str()); + spawn->GetZone()->AddMovementNPC(spawn); + } + lua_interface->ResetFunctionStack(state); + return 0; +} + +int EQ2Emu_lua_IsPlayer(lua_State* state){ + if(!lua_interface) + return 0; + Spawn* spawn = lua_interface->GetSpawn(state); + if(spawn){ + lua_interface->SetBooleanValue(state, spawn->IsPlayer()); + return 1; + } + return 0; +} + +int EQ2Emu_lua_FaceTarget(lua_State* state){ + if(!lua_interface) + return 0; + Spawn* spawn = lua_interface->GetSpawn(state); + Spawn* target = lua_interface->GetSpawn(state, 2); + if(spawn && target){ + if(spawn->IsEntity()) + // ((Entity*)spawn)->FaceTarget(target); + static_cast(spawn)->FaceTarget(target); + } + lua_interface->ResetFunctionStack(state); + return 0; +} + +int EQ2Emu_lua_MoveToLocation(lua_State* state){ + if(!lua_interface) + return 0; + Spawn* spawn = lua_interface->GetSpawn(state); + float x = lua_interface->GetFloatValue(state, 2); + float y = lua_interface->GetFloatValue(state, 3); + float z = lua_interface->GetFloatValue(state, 4); + float speed = lua_interface->GetFloatValue(state, 5); + string lua_function = lua_interface->GetStringValue(state, 6); + bool more_points = lua_interface->GetBooleanValue(state, 7); + + if(spawn) { + if (speed == 0) + speed = spawn->GetSpeed(); + + spawn->AddRunningLocation(x, y, z, speed, 0.0f, true, !more_points, lua_function); + } + lua_interface->ResetFunctionStack(state); + return 0; +} + +int EQ2Emu_lua_Say(lua_State* state){ + if(!lua_interface) + return 0; + Spawn* spawn = lua_interface->GetSpawn(state); + string message = lua_interface->GetStringValue(state, 2); + Spawn* player = lua_interface->GetSpawn(state, 3); + int32 language = lua_interface->GetInt32Value(state, 4); + if(spawn && message.length() > 0){ + Client* client = 0; + if(player && player->IsPlayer()) + client = spawn->GetZone()->GetClientBySpawn(player); + if(client) + spawn->GetZone()->HandleChatMessage(client, spawn, 0, CHANNEL_SAY, message.c_str(), 30, 0, true, language); + else + spawn->GetZone()->HandleChatMessage(spawn, 0, CHANNEL_SAY, message.c_str(), 30, 0, true, language); + } + lua_interface->ResetFunctionStack(state); + return 0; +} + +int EQ2Emu_lua_Shout(lua_State* state){ + if(!lua_interface) + return 0; + Spawn* spawn = lua_interface->GetSpawn(state); + string message = lua_interface->GetStringValue(state, 2); + Spawn* player = lua_interface->GetSpawn(state, 3); + if(spawn && message.length() > 0){ + Client* client = 0; + if(player && player->IsPlayer()) + client = spawn->GetZone()->GetClientBySpawn(player); + if(client) + spawn->GetZone()->HandleChatMessage(client, spawn, 0, CHANNEL_SHOUT, message.c_str(), 30); + else + spawn->GetZone()->HandleChatMessage(spawn, 0, CHANNEL_SHOUT, message.c_str(), 30); + } + lua_interface->ResetFunctionStack(state); + return 0; +} + +int EQ2Emu_lua_SayOOC(lua_State* state){ + if(!lua_interface) + return 0; + Spawn* spawn = lua_interface->GetSpawn(state); + string message = lua_interface->GetStringValue(state, 2); + Spawn* player = lua_interface->GetSpawn(state, 3); + if(spawn && message.length() > 0){ + Client* client = 0; + if(player && player->IsPlayer()) + client = spawn->GetZone()->GetClientBySpawn(player); + if(client) + spawn->GetZone()->HandleChatMessage(client, spawn, 0, CHANNEL_OOC, message.c_str(), 30); + else + spawn->GetZone()->HandleChatMessage(spawn, 0, CHANNEL_OOC, message.c_str(), 30); + } + lua_interface->ResetFunctionStack(state); + return 0; +} + +int EQ2Emu_lua_Emote(lua_State* state){ + if(!lua_interface) + return 0; + Spawn* spawn = lua_interface->GetSpawn(state); + string message = lua_interface->GetStringValue(state, 2); + Spawn* spawn2 = lua_interface->GetSpawn(state, 3); + Spawn* player = lua_interface->GetSpawn(state, 4); + char* to = 0; + if(spawn2) + to = spawn2->GetName(); + if(spawn && message.length() > 0){ + Client* client = 0; + if(player && player->IsPlayer()) + client = spawn->GetZone()->GetClientBySpawn(player); + if(client) + spawn->GetZone()->HandleChatMessage(client, spawn, to, CHANNEL_EMOTE, message.c_str(), 30); + else + spawn->GetZone()->HandleChatMessage(spawn, to, CHANNEL_EMOTE, message.c_str(), 30); + } + lua_interface->ResetFunctionStack(state); + return 0; +} + +int EQ2Emu_lua_SpellHeal(lua_State* state){ + if(!lua_interface) + return 0; + + LuaSpell* luaspell = lua_interface->GetCurrentSpell(state); + if(!luaspell) + return 0; + Spawn* caster = luaspell->caster; + string heal_type = lua_interface->GetStringValue(state);//power, heal ect + int32 min_heal = lua_interface->GetInt32Value(state, 2); + int32 max_heal = lua_interface->GetInt32Value(state, 3); + Spawn* target = lua_interface->GetSpawn(state, 4); + int8 crit_mod = lua_interface->GetInt32Value(state, 5); + bool no_calcs = lua_interface->GetInt32Value(state, 6) == 1; + lua_interface->ResetFunctionStack(state); + if(caster && caster->IsEntity()){ + bool success = false; + luaspell->resisted = false; + if (target) { + float distance = caster->GetDistance(target, true); + distance -= caster->appearance.pos.collision_radius / 10; + distance -= target->appearance.pos.collision_radius / 10; + if (((Entity*)caster)->SpellHeal(target, distance, luaspell, heal_type, min_heal, max_heal, crit_mod, no_calcs)) + success = true; + } + if (luaspell->targets.size() > 0) { + Spawn* target = 0; + ZoneServer* zone = luaspell->caster->GetZone(); + luaspell->MSpellTargets.readlock(__FUNCTION__, __LINE__); + for (int32 i = 0; i < luaspell->targets.size(); i++) { + if ((target = zone->GetSpawnByID(luaspell->targets[i]))) { + float distance = caster->GetDistance(target, true); + distance -= caster->appearance.pos.collision_radius/10; + distance -= target->appearance.pos.collision_radius/10; + ((Entity*)caster)->SpellHeal(target, distance, luaspell, heal_type, min_heal, max_heal, crit_mod, no_calcs); + } + } + luaspell->MSpellTargets.releasereadlock(__FUNCTION__, __LINE__); + success = true; + } + if (success) { + if(caster->GetZone()) + caster->GetZone()->TriggerCharSheetTimer(); + } + } + return 0; +} + + +int EQ2Emu_lua_SummonItem(lua_State* state){ + if(!lua_interface) + return 0; + Spawn* spawn = lua_interface->GetSpawn(state); + int32 item_id = lua_interface->GetInt32Value(state, 2); + bool send_messages = (lua_interface->GetInt8Value(state, 3) == 1); + string location = lua_interface->GetStringValue(state, 4); + + + if (spawn && spawn->IsPlayer()){ + Client* client = spawn->GetZone()->GetClientBySpawn(spawn); + if (client && item_id > 0){ + if (strncasecmp(location.c_str(), "bank", 4) == 0) + lua_interface->SetBooleanValue(state, client->AddItemToBank(item_id, 1)); + else + lua_interface->SetBooleanValue(state, client->AddItem(item_id, 1)); + if (send_messages) { + Item* item = master_item_list.GetItem(item_id); + if (item) { + client->Message(CHANNEL_COLOR_YELLOW, "You receive \\aITEM %u 0:%s\\/a.", item->details.item_id, item->name.c_str()); + string popup_text = "You receive " + item->name; + client->SendPopupMessage(10, popup_text.c_str(), "ui_harvested_normal", 3, 0xFF, 0xFF, 0xFF); + } + } + return 1; + } + } + lua_interface->SetBooleanValue(state, false); + return 1; +} + +int EQ2Emu_lua_RemoveItem(lua_State* state) { + Spawn* spawn = lua_interface->GetSpawn(state); + int32 item_id = lua_interface->GetInt32Value(state, 2); + Client *client; + Item *item; + + if (spawn && spawn->IsPlayer() && item_id > 0) { + if ((client = spawn->GetZone()->GetClientBySpawn(spawn))) { + if ((item = client->GetPlayer()->item_list.GetItemFromID(item_id))) { + if (client->RemoveItem(item, 1)) { + lua_interface->SetBooleanValue(state, true); + return 1; + } + } + } + } + + lua_interface->SetBooleanValue(state, false); + return 1; +} + +int EQ2Emu_lua_HasItem(lua_State* state) { + Spawn* player = lua_interface->GetSpawn(state); + int32 item_id = lua_interface->GetInt32Value(state, 2); + bool include_bank = lua_interface->GetInt8Value(state, 3); + if (player && player->IsPlayer()) { + bool hasItem = false; + hasItem = ((Player*)player)->item_list.HasItem(item_id, include_bank); + if (!hasItem) + hasItem = ((Player*)player)->GetEquipmentList()->HasItem(item_id); + lua_interface->SetBooleanValue(state, hasItem); + return 1; + } + lua_interface->SetBooleanValue(state, false); + return 1; +} + +int EQ2Emu_lua_Spawn(lua_State* state){ + if(!lua_interface) + return 0; + ZoneServer* zone = lua_interface->GetZone(state); + int32 spawn_id = lua_interface->GetInt32Value(state, 2); + bool restricted_npc = (lua_interface->GetInt8Value(state, 3) == 1); + float x = lua_interface->GetFloatValue(state, 4); + float y = lua_interface->GetFloatValue(state, 5); + float z = lua_interface->GetFloatValue(state, 6); + float heading = lua_interface->GetFloatValue(state, 7); + if(zone && spawn_id > 0 && (x != 0 || y != 0 || z != 0)){ + Spawn* spawn = zone->GetSpawn(spawn_id); + if(!spawn) + lua_interface->LogError("LUA Spawn command error: Could not find spawn with id of %u.", spawn_id); + else{ + spawn->SetX(x); + spawn->SetY(y); + spawn->SetZ(z); + spawn->SetLocation(zone->GetClosestLocation(spawn)); + spawn->SetHeading(heading); + if(restricted_npc) + spawn->AddAllowAccessSpawn(spawn); + zone->AddSpawn(spawn); + const char* spawn_script = world.GetSpawnScript(spawn_id); + if(spawn_script && lua_interface->GetSpawnScript(spawn_script) != 0){ + spawn->SetSpawnScript(string(spawn_script)); + zone->CallSpawnScript(spawn, SPAWN_SCRIPT_SPAWN); + } + lua_interface->SetSpawnValue(state, spawn); + return 1; + } + } + else{ + string output = "Invalid paramaters to LUA Spawn command: \n"; + if(!zone) + output = output.append("\t").append("Missing zone reference. \n"); + if(spawn_id == 0) + output = output.append("\t").append("Missing spawn_id."); + lua_interface->LogError("Error in EQ2Emu_lua_Zone - %s", output.c_str()); + } + return 0; +} + +int EQ2Emu_lua_GetZoneName(lua_State* state){ + if(!lua_interface) + return 0; + ZoneServer* zone = lua_interface->GetZone(state); + if(zone){ + lua_interface->SetStringValue(state, zone->GetZoneName()); + return 1; + } + return 0; +} + +int EQ2Emu_lua_GetZoneID(lua_State* state){ + if(!lua_interface) + return 0; + ZoneServer* zone = lua_interface->GetZone(state); + if(zone){ + lua_interface->SetInt32Value(state, zone->GetZoneID()); + return 1; + } + return 0; +} + +int EQ2Emu_lua_GetZone(lua_State* state){ + if(!lua_interface) + return 0; + int32 zone_id = lua_interface->GetInt32Value(state); + ZoneServer* zone = 0; + if(zone_id > 0) + zone = zone_list.Get(zone_id); + else{ + string zone_name = lua_interface->GetStringValue(state); + if(zone_name.length() > 0){ + zone = zone_list.Get(zone_name.c_str()); + } + else{ + Spawn* spawn = lua_interface->GetSpawn(state); + if(spawn) + zone = spawn->GetZone(); + } + } + if(zone){ + lua_interface->SetZoneValue(state, zone); + return 1; + } + return 0; +} + +int EQ2Emu_lua_AddHate(lua_State* state) { + Spawn* entity = lua_interface->GetSpawn(state); + Spawn* npc = lua_interface->GetSpawn(state, 2); + sint32 amount = lua_interface->GetSInt32Value(state, 3); + bool send_packet = lua_interface->GetInt8Value(state, 4) == 1 ? true : false; + LuaSpell* luaspell = lua_interface->GetCurrentSpell(state); + if (entity && entity->IsEntity() && amount != 0) { + if (luaspell) { + ZoneServer* zone = luaspell->caster->GetZone(); + luaspell->MSpellTargets.readlock(__FUNCTION__, __LINE__); + for (int32 i = 0; i < luaspell->targets.size(); i++) { + Spawn* spawn = zone->GetSpawnByID(luaspell->targets.at(i)); + if (spawn && spawn->IsNPC() && spawn->Alive() && spawn->GetZone()) { + ((NPC*)spawn)->AddHate((Entity*)entity, amount); + if (send_packet) + entity->GetZone()->SendThreatPacket(entity, npc, amount, luaspell->spell->GetName()); + } + } + luaspell->MSpellTargets.releasereadlock(__FUNCTION__, __LINE__); + } + else if (npc && npc->IsNPC() && npc->GetZone()) + ((NPC*)npc)->AddHate((Entity*)entity, amount); + } + return 0; +} + + +int EQ2Emu_lua_Zone(lua_State* state){ + if(!lua_interface) + return 0; + ZoneServer* zone = lua_interface->GetZone(state); + Spawn* player = lua_interface->GetSpawn(state, 2); + Client* client = 0; + if(player && player->IsPlayer()) + client = player->GetZone()->GetClientBySpawn(player); + float x = lua_interface->GetFloatValue(state, 3); + float y = lua_interface->GetFloatValue(state, 4); + float z = lua_interface->GetFloatValue(state, 5); + float heading = lua_interface->GetFloatValue(state, 6); + + if(zone && client) { + LogWrite(LUA__DEBUG, 0, "LUA", "LUA Zone Request by Player: '%s' (%u)", player->GetName(), player->GetID()); + LogWrite(LUA__DEBUG, 5, "LUA", "\tTo Zone: '%s' (%u)", zone->GetZoneName(), zone->GetZoneID()); + + if ( !client->CheckZoneAccess(zone->GetZoneName()) ) + { + LogWrite(LUA__WARNING, 0, "LUA", "CheckZoneAccess() FAILED! LUA Zone Request Denied!"); + return 0; + } + + if(x != 0 || y != 0 || z != 0){ + LogWrite(LUA__DEBUG, 5, "LUA", "\tTo Coordinates: %2f, %2f, %2f, %2f", x, y, z, heading); + player->SetX(x); + player->SetY(y); + player->SetZ(z); + player->SetHeading(heading); + client->Zone(zone->GetZoneName(), false); + } + else + client->Zone(zone->GetZoneName()); + } + else + lua_interface->SimpleLogError("Error in EQ2Emu_lua_Zone: invalid zone or spawn input."); + return 0; +} + +int EQ2Emu_lua_AddSpawnAccess(lua_State* state){ + if(!lua_interface) + return 0; + Spawn* spawn = lua_interface->GetSpawn(state); + Spawn* spawn2 = lua_interface->GetSpawn(state, 2); + if(spawn && spawn2) + spawn->AddAllowAccessSpawn(spawn2); + return 0; +} + +int EQ2Emu_lua_CastSpell(lua_State* state){ + if(!lua_interface) + return 0; + Spawn* target = lua_interface->GetSpawn(state); + int32 spell_id = lua_interface->GetInt32Value(state, 2); + int8 spell_tier = lua_interface->GetInt8Value(state, 3); + Spawn* caster = lua_interface->GetSpawn(state, 4); + + if (!target) { + lua_interface->LogError("LUA CastSpell command error: target is not a valid spawn"); + return 0; + } + + if (!target->IsEntity()) { + lua_interface->LogError("LUA CastSpell command error: target (%s) is not an entity", target->GetName()); + return 0; + } + + if (spell_id <= 0) { + lua_interface->LogError("LUA CastSpell command error: spell id is not valid"); + return 0; + } + + if (caster && !caster->IsEntity()) { + lua_interface->LogError("LUA CastSpell command error: caster (%s) is not an entity", caster->GetName()); + return 0; + } + + if (spell_tier == 0) + spell_tier = 1; + + if (!caster) + caster = target; + + target->GetZone()->ProcessSpell(master_spell_list.GetSpell(spell_id, spell_tier), (Entity*)caster, (Entity*)target); + return 0; +} + +int EQ2Emu_lua_SpellDamage(lua_State* state){ + if(!lua_interface) + return 0; + Spawn* target = lua_interface->GetSpawn(state); + int32 target_id = target->GetID(); + LuaSpell* luaspell = lua_interface->GetCurrentSpell(state); + if(!luaspell) + return 0; + Spawn* caster = luaspell->caster; + sint32 type = lua_interface->GetSInt32Value(state, 2); + int32 min_damage = lua_interface->GetInt32Value(state, 3); + int32 max_damage = lua_interface->GetInt32Value(state, 4); + int8 crit_mod = lua_interface->GetInt32Value(state, 5); + bool no_calcs = lua_interface->GetInt32Value(state, 6) == 1; + //lua_interface->ResetFunctionStack(state); + int32 class_id = lua_interface->GetInt32Value(state, 7); + vector faction_req; + vector race_req; + int32 class_req = 0; + int32 i = 0; + int8 f = 0; + int8 r = 0; + while ((class_id = lua_interface->GetInt32Value(state, 7 + i))) { + if (class_id < 100) { + class_req += pow(2.0, double(class_id - 1)); + } + else if (class_id > 100 && class_id < 1000) { + race_req.push_back(class_id); + r++; + } + else { + faction_req.push_back(class_id); + f++; + } + i++; + } + if(caster && caster->IsEntity()){ + bool race_match = false; + bool success = false; + luaspell->resisted = false; + if (luaspell->initial_target == target_id) { + int xxx = 0; + } + if (luaspell->targets.size() > 0 && (luaspell->initial_target != target_id)) { + ZoneServer* zone = luaspell->caster->GetZone(); + Spawn* target = 0; + luaspell->MSpellTargets.readlock(__FUNCTION__, __LINE__); + for (int32 i = 0; i < luaspell->targets.size(); i++) { + if ((target = zone->GetSpawnByID(luaspell->targets[i]))) { + + if (race_req.size() > 0) { + for (int8 i=0; i < race_req.size(); i++) { + + int32 xxx = target->GetLuaRaceId(); + if (target->GetLuaRaceId() == race_req[i]) { + race_match = true; + } + } + } + else + race_match = true; // if the race_req.size = 0 then there is no race requirement and the race_match will be true + if (race_match == true) { + float distance = caster->GetDistance(target, true); + distance -= caster->appearance.pos.collision_radius / 10; + distance -= target->appearance.pos.collision_radius / 10; + ((Entity*)caster)->SpellAttack(target, distance, luaspell, type, min_damage, max_damage, crit_mod, no_calcs); + } + } + } + success = true; + luaspell->MSpellTargets.releasereadlock(__FUNCTION__, __LINE__); + } + else if (target) { + + //check class and race/faction here + if (race_req.size() > 0) { + for (int8 i= 0; i < race_req.size(); i++) { + if (target->GetLuaRaceId() == race_req[i]) { + race_match = true; + } + } + } + else + race_match = true; // if the race_req.size = 0 then there is no race requirement and the race_match will be true + if (race_match == true) { + float distance = caster->GetDistance(target, true); + distance -= caster->appearance.pos.collision_radius / 10; + distance -= target->appearance.pos.collision_radius / 10; + if (((Entity*)caster)->SpellAttack(target, distance, luaspell, type, min_damage, max_damage, crit_mod, no_calcs)) + success = true; + } + } + if (success) { + Spell* spell = luaspell->spell; + if(caster->IsPlayer() && spell && spell->GetSpellData()->target_type == 1 && spell->GetSpellData()->spell_book_type == 1){ //offense combat art + ((Player*)caster)->InCombat(true); + if(caster->GetZone()) + caster->GetZone()->TriggerCharSheetTimer(); + } + } + } + return 0; +} +int EQ2Emu_lua_ModifyPower(lua_State* state){ + if(!lua_interface) + return 0; + Spawn* spawn = lua_interface->GetSpawn(state); + sint32 value = lua_interface->GetSInt32Value(state, 2); + lua_interface->ResetFunctionStack(state); + if(spawn && value != 0){ + if (spawn->GetPower() + value > spawn->GetTotalPower()) + spawn->SetPower(spawn->GetTotalPower()); + else + spawn->SetPower(spawn->GetPower() + value); + } + return 0; +} +int EQ2Emu_lua_ModifyHP(lua_State* state){ + if(!lua_interface) + return 0; + Spawn* spawn = lua_interface->GetSpawn(state); + sint32 value = lua_interface->GetSInt32Value(state, 2); + lua_interface->ResetFunctionStack(state); + if(spawn && value != 0){ + if (spawn->GetHP() + value > spawn->GetTotalHP()) + spawn->SetHP(spawn->GetTotalHP()); + else + spawn->SetHP(spawn->GetHP() + value); + } + return 0; +} +int EQ2Emu_lua_ModifyMaxPower(lua_State* state){ + if(!lua_interface) + return 0; + Spawn* spawn = lua_interface->GetSpawn(state); + sint32 value = lua_interface->GetSInt32Value(state, 2); + lua_interface->ResetFunctionStack(state); + if(spawn && value != 0){ + spawn->SetPower(spawn->GetPower() + value); + if(value > spawn->GetTotalHPBase()) + spawn->SetTotalPower(spawn->GetTotalPower() + value); + } + return 0; +} +int EQ2Emu_lua_ModifyMaxHP(lua_State* state){ + if(!lua_interface) + return 0; + Spawn* spawn = lua_interface->GetSpawn(state); + sint32 value = lua_interface->GetSInt32Value(state, 2); + lua_interface->ResetFunctionStack(state); + if(spawn && value != 0){ + spawn->SetHP(spawn->GetHP() + value); + if(value > spawn->GetTotalHPBase()) + spawn->SetTotalHP(spawn->GetTotalHP() + value); + } + return 0; +} +int EQ2Emu_lua_SetCurrentHP(lua_State* state){ + if(!lua_interface) + return 0; + Spawn* spawn = lua_interface->GetSpawn(state); + sint32 value = lua_interface->GetSInt32Value(state, 2); + lua_interface->ResetFunctionStack(state); + if(spawn && value > 0){ + spawn->SetHP(value); + if(value > spawn->GetTotalHPBase()) + spawn->SetTotalHP(value); + } + return 0; +} +int EQ2Emu_lua_SetMaxHP(lua_State* state){ + if(!lua_interface) + return 0; + Spawn* spawn = lua_interface->GetSpawn(state); + float value = lua_interface->GetFloatValue(state, 2); + lua_interface->ResetFunctionStack(state); + if (spawn && spawn->IsEntity() && value > 0) + ((Entity*)spawn)->AddSpellBonus(0, ITEM_STAT_HEALTH, value - spawn->GetTotalHP()); + + if (spawn->IsPlayer()) + ((Player*)spawn)->SetCharSheetChanged(true); + + return 0; +} + +int EQ2Emu_lua_SetMaxHPBase(lua_State* state){ + if(!lua_interface) + return 0; + Spawn* spawn = lua_interface->GetSpawn(state); + sint32 value = lua_interface->GetSInt32Value(state, 2); + lua_interface->ResetFunctionStack(state); + if(spawn && spawn->IsEntity() && value > 0) + ((Entity*)spawn)->SetTotalHPBase(value); + return 0; +} + +int EQ2Emu_lua_SetCurrentPower(lua_State* state){ + if(!lua_interface) + return 0; + Spawn* spawn = lua_interface->GetSpawn(state); + sint32 value = lua_interface->GetSInt32Value(state, 2); + lua_interface->ResetFunctionStack(state); + if(spawn && value > 0){ + spawn->SetPower(value); + if(value > spawn->GetTotalPowerBase()) + spawn->SetTotalPower(value); + } + return 0; +} +int EQ2Emu_lua_SetMaxPower(lua_State* state){ + if(!lua_interface) + return 0; + Spawn* spawn = lua_interface->GetSpawn(state); + sint32 value = lua_interface->GetSInt32Value(state, 2); + lua_interface->ResetFunctionStack(state); + if(spawn && spawn->IsEntity() && value > 0) + ((Entity*)spawn)->AddSpellBonus(0, ITEM_STAT_POWER, value - spawn->GetTotalPower()); + return 0; +} +int EQ2Emu_lua_SetMaxPowerBase(lua_State* state){ + if(!lua_interface) + return 0; + Spawn* spawn = lua_interface->GetSpawn(state); + sint32 value = lua_interface->GetSInt32Value(state, 2); + lua_interface->ResetFunctionStack(state); + if(spawn && spawn->IsEntity() && value > 0) + ((Entity*)spawn)->SetTotalPowerBase(value); + return 0; +} +int EQ2Emu_lua_SetPosition(lua_State* state){ + if(!lua_interface) + return 0; + Spawn* spawn = lua_interface->GetSpawn(state); + float x = lua_interface->GetFloatValue(state, 2); + float y = lua_interface->GetFloatValue(state, 3); + float z = lua_interface->GetFloatValue(state, 4); + float heading = lua_interface->GetFloatValue(state, 5); + lua_interface->ResetFunctionStack(state); + if(spawn){ + spawn->SetX(x); + spawn->SetY(y); + spawn->SetZ(z); + if (heading != 0) + spawn->SetHeading(heading); + spawn->SetSpawnOrigX(spawn->GetX()); + spawn->SetSpawnOrigY(spawn->GetY()); + spawn->SetSpawnOrigZ(spawn->GetZ()); + spawn->SetSpawnOrigHeading(spawn->GetHeading()); + if(spawn->IsPlayer()){ + Client* client = spawn->GetZone()->GetClientBySpawn(spawn); + if(client){ + EQ2Packet* packet = client->GetPlayer()->Move(x, y, z, client->GetVersion(), (heading == 0 ? -1.0f : (heading + 180.0f))); + client->QueuePacket(packet); + } + } + + } + return 0; +} +int EQ2Emu_lua_SetHeading(lua_State* state){ + if(!lua_interface) + return 0; + Spawn* spawn = lua_interface->GetSpawn(state); + float value = lua_interface->GetFloatValue(state, 2); + lua_interface->ResetFunctionStack(state); + if (spawn) { + spawn->SetHeading(value); + if (spawn->IsPlayer()) { + Client* client = spawn->GetZone()->GetClientBySpawn(spawn); + if (client) { + EQ2Packet* packet = client->GetPlayer()->Move(spawn->GetX(), spawn->GetY(), spawn->GetZ(), client->GetVersion(), value + 180.0f); + client->QueuePacket(packet); + } + } + } + return 0; +} +int EQ2Emu_lua_SetModelType(lua_State* state){ + if(!lua_interface) + return 0; + Spawn* spawn = lua_interface->GetSpawn(state); + int16 value = lua_interface->GetInt16Value(state, 2); + lua_interface->ResetFunctionStack(state); + if(spawn) + spawn->SetModelType(value); + return 0; +} +int EQ2Emu_lua_SetAdventureClass(lua_State* state){ + if(!lua_interface) + return 0; + Spawn* spawn = lua_interface->GetSpawn(state); + int8 value = lua_interface->GetInt8Value(state, 2); + lua_interface->ResetFunctionStack(state); + if(spawn){ + if(spawn->IsPlayer()) + ((Player*)spawn)->SetPlayerAdventureClass(value); + else + spawn->SetAdventureClass(value); + } + return 0; +} +int EQ2Emu_lua_SetTradeskillClass(lua_State* state){ + if(!lua_interface) + return 0; + Spawn* spawn = lua_interface->GetSpawn(state); + int8 value = lua_interface->GetInt8Value(state, 2); + lua_interface->ResetFunctionStack(state); + if(spawn) { + spawn->SetTradeskillClass(value); + if (spawn->IsEntity()) { + ((Entity*)spawn)->GetInfoStruct()->tradeskill_class1 = classes.GetTSBaseClass(spawn->GetTradeskillClass()); + ((Entity*)spawn)->GetInfoStruct()->tradeskill_class2 = classes.GetSecondaryTSBaseClass(spawn->GetTradeskillClass()); + ((Entity*)spawn)->GetInfoStruct()->tradeskill_class3 = spawn->GetTradeskillClass(); + } + if (spawn->IsPlayer()) + ((Player*)spawn)->SetCharSheetChanged(true); + } + return 0; +} +int EQ2Emu_lua_SetMount(lua_State* state){ + if(!lua_interface) + return 0; + Spawn* spawn = lua_interface->GetSpawn(state); + int16 value = lua_interface->GetInt16Value(state, 2); + if(spawn && spawn->IsEntity()){ + ((Entity*)spawn)->SetMount(value); + EQ2_Color color; + color.red = 255; + color.green = 255; + color.blue = 255; + ((Entity*)spawn)->SetMountColor(&color); + ((Entity*)spawn)->SetMountSaddleColor(&color); + } + return 0; +} +int EQ2Emu_lua_SetMountColor(lua_State* state){ + if(!lua_interface) + return 0; + Spawn* spawn = lua_interface->GetSpawn(state); + EQ2_Color mount_color; + EQ2_Color saddle_color; + mount_color.red = lua_interface->GetInt8Value(state, 2); + mount_color.green = lua_interface->GetInt8Value(state, 3); + mount_color.blue = lua_interface->GetInt8Value(state, 4); + saddle_color.red = lua_interface->GetInt8Value(state, 5); + saddle_color.green = lua_interface->GetInt8Value(state, 6); + saddle_color.blue = lua_interface->GetInt8Value(state, 7); + if(spawn && spawn->IsEntity()){ + ((Entity*)spawn)->SetMountColor(&mount_color); + ((Entity*)spawn)->SetMountSaddleColor(&saddle_color); + } + return 0; +} +int EQ2Emu_lua_GetMount(lua_State* state){ + if(!lua_interface) + return 0; + Spawn* spawn = lua_interface->GetSpawn(state); + if(spawn && spawn->IsEntity()){ + lua_interface->SetInt32Value(state, ((Entity*)spawn)->GetMount()); + return 1; + } + return 0; +} +int EQ2Emu_lua_GetRace(lua_State* state){ + if(!lua_interface) + return 0; + Spawn* spawn = lua_interface->GetSpawn(state); + if(spawn) + { + LogWrite(LUA__DEBUG, 0, "LUA", "%s - Race: %i", __FUNCTION__, spawn->GetRace()); + lua_interface->SetInt32Value(state, spawn->GetRace()); + return 1; + } + return 0; +} + +int EQ2Emu_lua_GetRaceName(lua_State* state){ + if(!lua_interface) + return 0; + Spawn* spawn = lua_interface->GetSpawn(state); + if(spawn) { + lua_interface->SetStringValue(state, races.GetRaceName(spawn->GetRace())); + return 1; + } + return 0; +} + +int EQ2Emu_lua_GetClass(lua_State* state) { + Spawn* spawn = lua_interface->GetSpawn(state); + if (spawn) { + lua_interface->SetInt32Value(state, spawn->GetAdventureClass()); + return 1; + } + return 0; +} + +int EQ2Emu_lua_GetClassName(lua_State* state) { + Spawn* spawn = lua_interface->GetSpawn(state); + if (spawn) { + lua_interface->SetStringValue(state, classes.GetClassName(spawn->GetAdventureClass())); + return 1; + } + return 0; +} + +int EQ2Emu_lua_SetSpeed(lua_State* state){ + if(!lua_interface) + return 0; + Spawn* spawn = lua_interface->GetSpawn(state); + float value = lua_interface->GetFloatValue(state, 2); + lua_interface->ResetFunctionStack(state); + if(spawn){ + spawn->SetSpeed(value); + if(spawn->IsPlayer()){ + Client* client = spawn->GetZone()->GetClientBySpawn(spawn); + if(client){ + PacketStruct* packet = configReader.getStruct("WS_SetControlGhost", client->GetVersion()); + if(packet){ + packet->setDataByName("spawn_id", 0xFFFFFFFF); + packet->setDataByName("speed", value); + packet->setDataByName("size", 0.51); + EQ2Packet* app = packet->serialize(); + client->QueuePacket(app); + safe_delete(packet); + } + } + } + } + return 0; +} + +int EQ2Emu_lua_AddSpellBonus(lua_State* state){ + if(!lua_interface) + return 0; + Spawn* spawn = lua_interface->GetSpawn(state); + const int16 type = lua_interface->GetInt16Value(state, 2); + const float value = lua_interface->GetFloatValue(state, 3); + LuaSpell* luaspell = lua_interface->GetCurrentSpell(state); + + int64 class_req = 0; + int32 class_id = 0; + vector faction_req; + vector race_req; + int32 i = 0; + int8 f = 0; + int8 r = 0; + while((class_id = lua_interface->GetInt32Value(state, 4 + i))) { + if (class_id < 100) { + class_req += pow(2.0, double(class_id - 1)); + } + else if (class_id > 100 && class_id < 1000) { + race_req.push_back(class_id); + r++; + } + else { + faction_req.push_back(class_id); + f++; + } + i++; + } + + if (value != 0 && type >= 0) { + if (luaspell && luaspell->spell && luaspell->caster) { + ZoneServer* zone = luaspell->caster->GetZone(); + luaspell->MSpellTargets.readlock(__FUNCTION__, __LINE__); + for (int32 i = 0; i < luaspell->targets.size(); i++) { + Spawn* target = zone->GetSpawnByID(luaspell->targets[i]); + if (target) { + if (target->IsPlayer()) { + ((Player*)target)->AddSpellBonus(luaspell, type, value, class_req, race_req, faction_req); + LogWrite(LUA__ERROR, 0, "LUA", "Applying Spell Bonus to Player '%s'. Is a Group Member.", ((Player*)target)->GetName()); + if (((Player*)target)->GetGroupMemberInfo()) + ((Player*)target)->UpdateGroupMemberInfo(); + ((Player*)target)->SetCharSheetChanged(true); + } + else if (target->IsNPC()) + ((NPC*)target)->AddSpellBonus(luaspell, type, value, class_req,race_req, faction_req); + else + lua_interface->SimpleLogError("Error applying spell bonus on non entity."); + } + } + luaspell->MSpellTargets.releasereadlock(__FUNCTION__, __LINE__); + if (!(luaspell->effect_bitmask & EFFECT_FLAG_SPELLBONUS)) + luaspell->effect_bitmask += EFFECT_FLAG_SPELLBONUS; + } + else if (spawn && spawn->IsEntity()) { + ((Entity*)spawn)->AddSpellBonus(luaspell, type, value, class_req, race_req, faction_req); + LogWrite(LUA__ERROR, 0, "LUA", "Applying Spell Bonus to Entity '%s'. Is a Group Member.", ((Entity*)spawn)->GetName()); + if(spawn->IsPlayer()) + ((Player*)spawn)->SetCharSheetChanged(true); + } + else + lua_interface->SimpleLogError("Unable to apply spell bonus in AddSpellBonus."); + } + else + lua_interface->SimpleLogError("Invalid parameters for AddSpellBonus."); + return 0; +} + +int EQ2Emu_lua_AddSpawnSpellBonus(lua_State* state){ + if(!lua_interface) + return 0; + + Spawn* spawn = lua_interface->GetSpawn(state); + int16 type = lua_interface->GetInt16Value(state, 2); + sint32 value = lua_interface->GetSInt32Value(state, 3); + LuaSpell* luaspell = lua_interface->GetCurrentSpell(state); + + if (!spawn) { + lua_interface->LogError("LUA AddSpawnSpellBonus command error: spawn is not valid"); + return 0; + } + + if (!spawn->IsEntity()) { + lua_interface->LogError("LUA AddSpawnSpellBonus command error: spawn is not an entity"); + return 0; + } + + if (value == 0) { + lua_interface->LogError("LUA AddSpawnSpellBonus command error: value must be set"); + return 0; + } + + if (!luaspell || !luaspell->spell) { + lua_interface->LogError("LUA AddSpawnSpellBonus command error: can only be used in a spell script"); + return 0; + } + + int32 class_req = 0; + vector faction_req; + vector race_req; + int32 class_id = 0; + int32 i = 0; + int8 f = 0; + int8 r = 0; + while ((class_id = lua_interface->GetInt32Value(state, 4 + i))) { + if (class_id < 100) { + class_req += pow(2.0, double(class_id - 1)); + } + else if (class_id > 100 && class_id < 1000) { + race_req.push_back(class_id); + r++; + } + else { + faction_req.push_back(class_id); + f++; + } + i++; + } + + + ((Entity*)spawn)->AddSpellBonus(luaspell, type, value, class_req,race_req,faction_req); + if (!(luaspell->effect_bitmask & EFFECT_FLAG_SPELLBONUS)) + luaspell->effect_bitmask += EFFECT_FLAG_SPELLBONUS; + if(spawn->IsPlayer()) + ((Player*)spawn)->SetCharSheetChanged(true); + + return 0; +} + +int EQ2Emu_lua_RemoveSpellBonus(lua_State* state){ + if(!lua_interface) + return 0; + Spawn* spawn = lua_interface->GetSpawn(state); + LuaSpell* luaspell = lua_interface->GetCurrentSpell(state); + if(luaspell && luaspell->spell) { + ZoneServer* zone = luaspell->caster->GetZone(); + Spawn* target = 0; + luaspell->MSpellTargets.readlock(__FUNCTION__, __LINE__); + for (int32 i = 0; i < luaspell->targets.size(); i++) { + target = zone->GetSpawnByID(luaspell->targets[i]); + if (target && target->IsEntity()) { + ((Entity*)target)->RemoveSpellBonus(luaspell); + if (target->IsPlayer()) + ((Player*)target)->SetCharSheetChanged(true); + } + } + luaspell->MSpellTargets.releasereadlock(__FUNCTION__, __LINE__); + } + else if (spawn && spawn->IsEntity()) { + ((Entity*)spawn)->RemoveSpellBonus(luaspell); + if (spawn->IsPlayer()) + ((Player*)spawn)->SetCharSheetChanged(true); + } + return 0; +} + +int EQ2Emu_lua_AddSkillBonus(lua_State* state) { + if(!lua_interface) + return 0; + Spawn* spawn = lua_interface->GetSpawn(state); + int32 skill_id = lua_interface->GetInt32Value(state, 2); + float value = lua_interface->GetFloatValue(state, 3); + LuaSpell* luaspell = lua_interface->GetCurrentSpell(state); + if (value != 0) { + int32 spell_id = 0; + if (luaspell && luaspell->spell && luaspell->caster) { + spell_id = luaspell->spell->GetSpellID(); + ZoneServer* zone = luaspell->caster->GetZone(); + Spawn* target = 0; + luaspell->MSpellTargets.readlock(__FUNCTION__, __LINE__); + for (int32 i = 0; i < luaspell->targets.size(); i++) { + target = zone->GetSpawnByID(luaspell->targets[i]); + if (target && target->Alive()) { + if (target->IsPlayer()) { + ((Player*)target)->AddSkillBonus(spell_id, skill_id, value); + Client* client = target->GetZone()->GetClientBySpawn(target); + if (client) { + EQ2Packet* packet = ((Player*)target)->GetSkills()->GetSkillPacket(client->GetVersion()); + if (packet) + client->QueuePacket(packet); + } + if (!(luaspell->effect_bitmask & EFFECT_FLAG_SKILLBONUS)) + luaspell->effect_bitmask += EFFECT_FLAG_SKILLBONUS; + } + else if (target->IsNPC()){ + ((NPC*)target)->AddSkillBonus(spell_id, skill_id, value); + if (!(luaspell->effect_bitmask & EFFECT_FLAG_SKILLBONUS)) + luaspell->effect_bitmask += EFFECT_FLAG_SKILLBONUS; + } + else + LogWrite(LUA__ERROR, 0, "LUA", "Error applying bonus buff on '%s'. Not a NPC or player.", target->GetName()); + } + } + luaspell->MSpellTargets.releasereadlock(__FUNCTION__, __LINE__); + } + else if (spawn) { + if (spawn->IsPlayer()) { + ((Player*)spawn)->AddSkillBonus(spell_id, skill_id, value); + Client* client = spawn->GetZone()->GetClientBySpawn(spawn); + if (client) { + EQ2Packet* packet = ((Player*)spawn)->GetSkills()->GetSkillPacket(client->GetVersion()); + if (packet) + client->QueuePacket(packet); + } + } + else if (spawn->IsNPC()) + ((NPC*)spawn)->AddSkillBonus(spell_id, skill_id, value); + else + LogWrite(LUA__ERROR, 0, "LUA", "Error applying skill bonus on '%s'. Not a NPC or player.", spawn->GetName()); + } + } + else + lua_interface->SimpleLogError("Invalid parameters for AddSkillBonus."); + return 0; +} + +int EQ2Emu_lua_RemoveSkillBonus(lua_State* state) { + if (!lua_interface) + return 0; + Spawn* spawn = lua_interface->GetSpawn(state); + LuaSpell* luaspell = lua_interface->GetCurrentSpell(state); + if (spawn && spawn->IsPlayer()) { + int32 spell_id = 0; + if(luaspell && luaspell->spell) { + spell_id = luaspell->spell->GetSpellID(); + ZoneServer* zone = luaspell->caster->GetZone(); + Spawn* target = 0; + luaspell->MSpellTargets.readlock(__FUNCTION__, __LINE__); + for (int32 i = 0; i < luaspell->targets.size(); i++) { + target = zone->GetSpawnByID(luaspell->targets[i]); + if (target) { + if (target->IsPlayer()) { + ((Player*)target)->RemoveSkillBonus(spell_id); + Client* client = target->GetZone()->GetClientBySpawn(target); + if (client) { + EQ2Packet* packet = ((Player*)target)->GetSkills()->GetSkillPacket(client->GetVersion()); + if (packet) + client->QueuePacket(packet); + } + } + else if (target->IsNPC()) + ((NPC*)target)->RemoveSkillBonus(spell_id); + else + LogWrite(LUA__ERROR, 0, "LUA", "Error removing skill bonus on '%s'. Not a NPC or player.", spawn->GetName()); + } + } + luaspell->MSpellTargets.releasereadlock(__FUNCTION__, __LINE__); + } + else if (spawn) { + if (spawn->IsPlayer()) { + ((Player*)spawn)->RemoveSkillBonus(spell_id); + Client* client = spawn->GetZone()->GetClientBySpawn(spawn); + if (client) { + EQ2Packet* packet = ((Player*)spawn)->GetSkills()->GetSkillPacket(client->GetVersion()); + if (packet) + client->QueuePacket(packet); + } + } + else if (spawn->IsNPC()) + ((NPC*)spawn)->RemoveSkillBonus(spell_id); + else + LogWrite(LUA__ERROR, 0, "LUA", "Error removing skill bonus on '%s'. Not a NPC or player.", spawn->GetName()); + } + } + return 0; +} + +int EQ2Emu_lua_AddControlEffect(lua_State* state) { + if(!lua_interface) + return 0; + Spawn* spawn = lua_interface->GetSpawn(state); + int8 type = lua_interface->GetInt32Value(state, 2); + bool only_add_spawn = lua_interface->GetInt8Value(state, 3) == 1; + LuaSpell* luaspell = lua_interface->GetCurrentSpell(state); + if (!only_add_spawn && luaspell && luaspell->spell && luaspell->caster && type != 0) { + ZoneServer* zone = luaspell->caster->GetZone(); + Spawn* target = 0; + luaspell->MSpellTargets.readlock(__FUNCTION__, __LINE__); + for (int32 i = 0; i < luaspell->targets.size(); i++) { + target = zone->GetSpawnByID(luaspell->targets[i]); + if (target && target->IsEntity()) { + if (type == CONTROL_EFFECT_TYPE_MEZ) { + ((Entity*)target)->AddMezSpell(luaspell); + if (!(luaspell->effect_bitmask & EFFECT_FLAG_MEZ)) + luaspell->effect_bitmask += EFFECT_FLAG_MEZ; + if (target->IsNPC()) + ((NPC*)target)->Brain()->AddHate(luaspell->caster, 5); + } + else if (type == CONTROL_EFFECT_TYPE_STIFLE) { + ((Entity*)target)->AddStifleSpell(luaspell); + if (!(luaspell->effect_bitmask & EFFECT_FLAG_STIFLE)) + luaspell->effect_bitmask += EFFECT_FLAG_STIFLE; + if (target->IsNPC()) + ((NPC*)target)->Brain()->AddHate(luaspell->caster, 5); + } + else if (type == CONTROL_EFFECT_TYPE_DAZE) { + ((Entity*)target)->AddDazeSpell(luaspell); + if (!(luaspell->effect_bitmask & EFFECT_FLAG_DAZE)) + luaspell->effect_bitmask += EFFECT_FLAG_DAZE; + if (target->IsNPC()) + ((NPC*)target)->Brain()->AddHate(luaspell->caster, 5); + } + else if (type == CONTROL_EFFECT_TYPE_STUN) { + if (!(luaspell->effect_bitmask & EFFECT_FLAG_STUN)) + luaspell->effect_bitmask += EFFECT_FLAG_STUN; + ((Entity*)target)->AddStunSpell(luaspell); + if (target->IsNPC()) + ((NPC*)target)->Brain()->AddHate(luaspell->caster, 5); + } + else if (type == CONTROL_EFFECT_TYPE_ROOT) { + if (!(luaspell->effect_bitmask & EFFECT_FLAG_ROOT)) + luaspell->effect_bitmask += EFFECT_FLAG_ROOT; + ((Entity*)target)->AddRootSpell(luaspell); + if (target->IsNPC()) + ((NPC*)target)->Brain()->AddHate(luaspell->caster, 5); + } + else if (type == CONTROL_EFFECT_TYPE_FEAR){ + if (!(luaspell->effect_bitmask & EFFECT_FLAG_FEAR)) + luaspell->effect_bitmask += EFFECT_FLAG_FEAR; + ((Entity*)target)->AddFearSpell(luaspell); + if (target->IsNPC()) + ((NPC*)target)->Brain()->AddHate(luaspell->caster, 5); + } + else if (type == CONTROL_EFFECT_TYPE_WALKUNDERWATER){ + ((Entity*)target)->AddWaterwalkSpell(luaspell); + if (!(luaspell->effect_bitmask & EFFECT_FLAG_WATERWALK)) + luaspell->effect_bitmask += EFFECT_FLAG_WATERWALK; + } + else if (type == CONTROL_EFFECT_TYPE_JUMPUNDERWATER){ + ((Entity*)target)->AddWaterjumpSpell(luaspell); + if (!(luaspell->effect_bitmask & EFFECT_FLAG_WATERJUMP)) + luaspell->effect_bitmask += EFFECT_FLAG_WATERJUMP; + } + else if (type == CONTROL_EFFECT_TYPE_SNARE) { + ((Entity*)target)->AddSnareSpell(luaspell); + if (!(luaspell->effect_bitmask & EFFECT_FLAG_SNARE)) + luaspell->effect_bitmask += EFFECT_FLAG_SNARE; + if (target->IsNPC()) + ((NPC*)target)->Brain()->AddHate(luaspell->caster, 5); + } + else if (type == CONTROL_EFFECT_TYPE_FLIGHT){ + ((Entity*)target)->AddFlightSpell(luaspell); + if (!(luaspell->effect_bitmask & EFFECT_FLAG_FLIGHT)) + luaspell->effect_bitmask += EFFECT_FLAG_FLIGHT; + } + else if (type == CONTROL_EFFECT_TYPE_GLIDE){ + ((Entity*)target)->AddGlideSpell(luaspell); + if (!(luaspell->effect_bitmask & EFFECT_FLAG_GLIDE)) + luaspell->effect_bitmask += EFFECT_FLAG_GLIDE; + } + else if (type == CONTROL_EFFECT_TYPE_SAFEFALL){ + ((Entity*)target)->AddSafefallSpell(luaspell); + if (!(luaspell->effect_bitmask & EFFECT_FLAG_SAFEFALL)) + luaspell->effect_bitmask += EFFECT_FLAG_SAFEFALL; + } + else + lua_interface->LogError("Unhandled control effect type of %u.", type); + } + else + lua_interface->LogError("Error applying control effect on non entity '%s'.", target->GetName()); + } + luaspell->MSpellTargets.releasereadlock(__FUNCTION__, __LINE__); + } + else if (only_add_spawn && spawn && spawn->IsEntity()) { + if (type == CONTROL_EFFECT_TYPE_MEZ){ + ((Entity*)spawn)->AddMezSpell(luaspell); + if (!(luaspell->effect_bitmask & EFFECT_FLAG_MEZ)) + luaspell->effect_bitmask += EFFECT_FLAG_MEZ; + } + else if (type == CONTROL_EFFECT_TYPE_STIFLE){ + ((Entity*)spawn)->AddStifleSpell(luaspell); + if (!(luaspell->effect_bitmask & EFFECT_FLAG_STIFLE)) + luaspell->effect_bitmask += EFFECT_FLAG_STIFLE; + } + else if (type == CONTROL_EFFECT_TYPE_DAZE){ + ((Entity*)spawn)->AddDazeSpell(luaspell); + if (!(luaspell->effect_bitmask & EFFECT_FLAG_DAZE)) + luaspell->effect_bitmask += EFFECT_FLAG_DAZE; + } + else if (type == CONTROL_EFFECT_TYPE_STUN){ + ((Entity*)spawn)->AddStunSpell(luaspell); + if (!(luaspell->effect_bitmask & EFFECT_FLAG_STUN)) + luaspell->effect_bitmask += EFFECT_FLAG_STUN; + } + else if (type == CONTROL_EFFECT_TYPE_ROOT){ + ((Entity*)spawn)->AddRootSpell(luaspell); + if (!(luaspell->effect_bitmask & EFFECT_FLAG_ROOT)) + luaspell->effect_bitmask += EFFECT_FLAG_ROOT; + } + else if (type == CONTROL_EFFECT_TYPE_FEAR){ + ((Entity*)spawn)->AddFearSpell(luaspell); + if (!(luaspell->effect_bitmask & EFFECT_FLAG_FEAR)) + luaspell->effect_bitmask += EFFECT_FLAG_FEAR; + } + else if (type == CONTROL_EFFECT_TYPE_WALKUNDERWATER){ + ((Entity*)spawn)->AddWaterwalkSpell(luaspell); + if (!(luaspell->effect_bitmask & EFFECT_FLAG_WATERWALK)) + luaspell->effect_bitmask += EFFECT_FLAG_WATERWALK; + } + else if (type == CONTROL_EFFECT_TYPE_JUMPUNDERWATER){ + ((Entity*)spawn)->AddWaterjumpSpell(luaspell); + if (!(luaspell->effect_bitmask & EFFECT_FLAG_WATERJUMP)) + luaspell->effect_bitmask += EFFECT_FLAG_WATERJUMP; + } + else if (type == CONTROL_EFFECT_TYPE_SNARE){ + ((Entity*)spawn)->AddSnareSpell(luaspell); + if (!(luaspell->effect_bitmask & EFFECT_FLAG_SNARE)) + luaspell->effect_bitmask += EFFECT_FLAG_SNARE; + } + else if (type == CONTROL_EFFECT_TYPE_FLIGHT){ + ((Entity*)spawn)->AddFlightSpell(luaspell); + if (!(luaspell->effect_bitmask & EFFECT_FLAG_FLIGHT)) + luaspell->effect_bitmask += EFFECT_FLAG_FLIGHT; + } + else if (type == CONTROL_EFFECT_TYPE_GLIDE){ + ((Entity*)spawn)->AddGlideSpell(luaspell); + if (!(luaspell->effect_bitmask & EFFECT_FLAG_GLIDE)) + luaspell->effect_bitmask += EFFECT_FLAG_GLIDE; + } + else if (type == CONTROL_EFFECT_TYPE_SAFEFALL){ + ((Entity*)spawn)->AddSafefallSpell(luaspell); + if (!(luaspell->effect_bitmask & EFFECT_FLAG_SAFEFALL)) + luaspell->effect_bitmask += EFFECT_FLAG_SAFEFALL; + } + else + lua_interface->LogError("Unhandled control effect type of %u.", type); + } + else + lua_interface->LogError("Error applying control effect on non entity '%s'.", spawn->GetName()); + return 0; +} + +int EQ2Emu_lua_RemoveControlEffect(lua_State* state) { + if(!lua_interface) + return 0; + Spawn* spawn = lua_interface->GetSpawn(state); + int8 type = lua_interface->GetInt8Value(state, 2); + bool only_remove_spawn = lua_interface->GetInt8Value(state, 3) == 1; + LuaSpell* luaspell = lua_interface->GetCurrentSpell(state); + if (spawn && spawn->IsEntity()) { + if (!only_remove_spawn && luaspell && luaspell->spell) { + ZoneServer* zone = luaspell->caster->GetZone(); + Spawn* target = 0; + luaspell->MSpellTargets.readlock(__FUNCTION__, __LINE__); + for (int32 i = 0; i < luaspell->targets.size(); i++) { + target = zone->GetSpawnByID(luaspell->targets[i]); + if (target) { + if (type == CONTROL_EFFECT_TYPE_MEZ) + ((Entity*)target)->RemoveMezSpell(luaspell); + else if (type == CONTROL_EFFECT_TYPE_STIFLE) + ((Entity*)target)->RemoveStifleSpell(luaspell); + else if (type == CONTROL_EFFECT_TYPE_DAZE) + ((Entity*)target)->RemoveDazeSpell(luaspell); + else if (type == CONTROL_EFFECT_TYPE_STUN) + ((Entity*)target)->RemoveStunSpell(luaspell); + else if (type == CONTROL_EFFECT_TYPE_ROOT) + ((Entity*)target)->RemoveRootSpell(luaspell); + else if (type == CONTROL_EFFECT_TYPE_FEAR) + ((Entity*)target)->RemoveFearSpell(luaspell); + else if (type == CONTROL_EFFECT_TYPE_WALKUNDERWATER) + ((Entity*)target)->RemoveWaterwalkSpell(luaspell); + else if (type == CONTROL_EFFECT_TYPE_JUMPUNDERWATER) + ((Entity*)target)->RemoveWaterjumpSpell(luaspell); + else if (type == CONTROL_EFFECT_TYPE_SNARE) + ((Entity*)target)->RemoveSnareSpell(luaspell); + else if (type == CONTROL_EFFECT_TYPE_FLIGHT) + ((Entity*)target)->RemoveFlightSpell(luaspell); + else if (type == CONTROL_EFFECT_TYPE_GLIDE) + ((Entity*)target)->RemoveGlideSpell(luaspell); + else if (type == CONTROL_EFFECT_TYPE_SAFEFALL) + ((Entity*)target)->RemoveGlideSpell(luaspell); + else + lua_interface->LogError("Unhandled control effect type of %u.", type); + } + } + luaspell->MSpellTargets.releasereadlock(__FUNCTION__, __LINE__); + } + else if (only_remove_spawn) { + if (type == CONTROL_EFFECT_TYPE_MEZ) + ((Entity*)spawn)->RemoveMezSpell(luaspell); + else if (type == CONTROL_EFFECT_TYPE_STIFLE) + ((Entity*)spawn)->RemoveStifleSpell(luaspell); + else if (type == CONTROL_EFFECT_TYPE_DAZE) + ((Entity*)spawn)->RemoveDazeSpell(luaspell); + else if (type == CONTROL_EFFECT_TYPE_STUN) + ((Entity*)spawn)->RemoveStunSpell(luaspell); + else if (type == CONTROL_EFFECT_TYPE_ROOT) + ((Entity*)spawn)->RemoveRootSpell(luaspell); + else if (type == CONTROL_EFFECT_TYPE_FEAR) + ((Entity*)spawn)->RemoveFearSpell(luaspell); + else if (type == CONTROL_EFFECT_TYPE_WALKUNDERWATER) + ((Entity*)spawn)->RemoveWaterwalkSpell(luaspell); + else if (type == CONTROL_EFFECT_TYPE_JUMPUNDERWATER) + ((Entity*)spawn)->RemoveWaterjumpSpell(luaspell); + else if (type == CONTROL_EFFECT_TYPE_SNARE) + ((Entity*)spawn)->RemoveSnareSpell(luaspell); + else if (type == CONTROL_EFFECT_TYPE_FLIGHT) + ((Entity*)spawn)->RemoveFlightSpell(luaspell); + else if (type == CONTROL_EFFECT_TYPE_GLIDE) + ((Entity*)spawn)->RemoveGlideSpell(luaspell); + else if (type == CONTROL_EFFECT_TYPE_SAFEFALL) + ((Entity*)spawn)->RemoveSafefallSpell(luaspell); + else + lua_interface->LogError("Unhandled control effect type of %u.", type); + } + } + return 0; +} + +int EQ2Emu_lua_SetIntBase(lua_State* state){ + if(!lua_interface) + return 0; + Spawn* spawn = lua_interface->GetSpawn(state); + int16 value = lua_interface->GetInt16Value(state, 2); + if(spawn && spawn->IsEntity()){ + ((Entity*)spawn)->GetInfoStruct()->intel_base = value; + if(spawn->IsPlayer()) + ((Player*)spawn)->SetCharSheetChanged(true); + } + return 0; +} + +int EQ2Emu_lua_SetAgiBase(lua_State* state){ + if(!lua_interface) + return 0; + Spawn* spawn = lua_interface->GetSpawn(state); + int16 value = lua_interface->GetInt16Value(state, 2); + if(spawn && spawn->IsEntity()){ + ((Entity*)spawn)->GetInfoStruct()->agi_base = value; + if(spawn->IsPlayer()) + ((Player*)spawn)->SetCharSheetChanged(true); + } + return 0; +} + +int EQ2Emu_lua_SetWisBase(lua_State* state){ + if(!lua_interface) + return 0; + Spawn* spawn = lua_interface->GetSpawn(state); + int16 value = lua_interface->GetInt16Value(state, 2); + if(spawn && spawn->IsEntity()){ + ((Entity*)spawn)->GetInfoStruct()->wis_base = value; + if(spawn->IsPlayer()) + ((Player*)spawn)->SetCharSheetChanged(true); + } + return 0; +} + +int EQ2Emu_lua_SetStaBase(lua_State* state){ + if(!lua_interface) + return 0; + Spawn* spawn = lua_interface->GetSpawn(state); + int16 value = lua_interface->GetInt16Value(state, 2); + if(spawn && spawn->IsEntity()){ + ((Entity*)spawn)->GetInfoStruct()->sta_base = value; + if(spawn->IsPlayer()) + ((Player*)spawn)->SetCharSheetChanged(true); + } + return 0; +} + +int EQ2Emu_lua_SetStrBase(lua_State* state){ + if(!lua_interface) + return 0; + Spawn* spawn = lua_interface->GetSpawn(state); + int16 value = lua_interface->GetInt16Value(state, 2); + if(spawn && spawn->IsEntity()){ + ((Entity*)spawn)->GetInfoStruct()->str_base = value; + if(spawn->IsPlayer()) + ((Player*)spawn)->SetCharSheetChanged(true); + } + return 0; +} + +int EQ2Emu_lua_SetInt(lua_State* state){ + if(!lua_interface) + return 0; + Spawn* spawn = lua_interface->GetSpawn(state); + sint32 value = lua_interface->GetSInt32Value(state, 2); + if(spawn && spawn->IsEntity()){ + ((Entity*)spawn)->AddSpellBonus(0, ITEM_STAT_INT, value); + if(spawn->IsPlayer()) + ((Player*)spawn)->SetCharSheetChanged(true); + } + return 0; +} + +int EQ2Emu_lua_SetWis(lua_State* state){ + if(!lua_interface) + return 0; + Spawn* spawn = lua_interface->GetSpawn(state); + float value = lua_interface->GetFloatValue(state, 2); + if(spawn && spawn->IsEntity()){ + ((Entity*)spawn)->AddSpellBonus(0, ITEM_STAT_WIS, value); + if(spawn->IsPlayer()) + ((Player*)spawn)->SetCharSheetChanged(true); + } + return 0; +} +int EQ2Emu_lua_SetSta(lua_State* state){ + if(!lua_interface) + return 0; + Spawn* spawn = lua_interface->GetSpawn(state); + float value = lua_interface->GetFloatValue(state, 2); + if(spawn && spawn->IsEntity()){ + ((Entity*)spawn)->AddSpellBonus(0, ITEM_STAT_STA, value); + if(spawn->IsPlayer()) + ((Player*)spawn)->SetCharSheetChanged(true); + } + return 0; +} +int EQ2Emu_lua_SetStr(lua_State* state){ + if(!lua_interface) + return 0; + Spawn* spawn = lua_interface->GetSpawn(state); + float value = lua_interface->GetFloatValue(state, 2); + if(spawn && spawn->IsEntity()){ + ((Entity*)spawn)->AddSpellBonus(0, ITEM_STAT_STR, value); + if(spawn->IsPlayer()) + ((Player*)spawn)->SetCharSheetChanged(true); + } + return 0; +} +int EQ2Emu_lua_SetAgi(lua_State* state){ + if(!lua_interface) + return 0; + Spawn* spawn = lua_interface->GetSpawn(state); + float value = lua_interface->GetFloatValue(state, 2); + if(spawn && spawn->IsEntity()){ + ((Entity*)spawn)->AddSpellBonus(0, ITEM_STAT_AGI, value); + if(spawn->IsPlayer()) + ((Player*)spawn)->SetCharSheetChanged(true); + } + return 0; +} + +int EQ2Emu_lua_GetCurrentHP(lua_State* state){ + if(!lua_interface) + return 0; + Spawn* spawn = lua_interface->GetSpawn(state); + if(spawn){ + lua_interface->SetInt32Value(state, spawn->GetHP()); + return 1; + } + return 0; +} +int EQ2Emu_lua_GetMaxHP(lua_State* state){ + if(!lua_interface) + return 0; + Spawn* spawn = lua_interface->GetSpawn(state); + if(spawn){ + lua_interface->SetInt32Value(state, spawn->GetTotalHP()); + return 1; + } + return 0; +} +int EQ2Emu_lua_GetMaxHPBase(lua_State* state){ + if(!lua_interface) + return 0; + Spawn* spawn = lua_interface->GetSpawn(state); + if(spawn){ + lua_interface->SetInt32Value(state, spawn->GetTotalHPBase()); + return 1; + } + return 0; +} +int EQ2Emu_lua_GetName(lua_State* state){ + if(!lua_interface) + return 0; + Spawn* spawn = lua_interface->GetSpawn(state); + if(spawn){ + lua_interface->SetStringValue(state, spawn->GetName()); + return 1; + } + return 0; +} + +int EQ2Emu_lua_GetLevel(lua_State* state) { + Spawn* spawn = lua_interface->GetSpawn(state); + if (spawn) { + lua_interface->SetInt32Value(state, spawn->GetLevel()); + return 1; + } + return 0; +} + +int EQ2Emu_lua_GetCurrentPower(lua_State* state){ + if(!lua_interface) + return 0; + Spawn* spawn = lua_interface->GetSpawn(state); + if(spawn){ + lua_interface->SetInt32Value(state, spawn->GetPower()); + return 1; + } + return 0; +} +int EQ2Emu_lua_GetMaxPower(lua_State* state){ + if(!lua_interface) + return 0; + Spawn* spawn = lua_interface->GetSpawn(state); + if(spawn){ + lua_interface->SetInt32Value(state, spawn->GetTotalPower()); + return 1; + } + return 0; +} +int EQ2Emu_lua_GetMaxPowerBase(lua_State* state){ + if(!lua_interface) + return 0; + Spawn* spawn = lua_interface->GetSpawn(state); + if(spawn){ + lua_interface->SetInt32Value(state, spawn->GetTotalPowerBase()); + return 1; + } + return 0; +} + +int EQ2Emu_lua_GetDistance(lua_State* state){ + if(!lua_interface) + return 0; + Spawn* spawn = lua_interface->GetSpawn(state); + Spawn* spawn2 = lua_interface->GetSpawn(state, 2); + bool include_radius = lua_interface->GetInt8Value(state, 3) == 1; + if(spawn && spawn2){ + float distance = spawn->GetDistance(spawn2); + if (include_radius) { + distance -= spawn->appearance.pos.collision_radius / 10; + distance -= spawn2->appearance.pos.collision_radius / 10; + } + + lua_interface->SetFloatValue(state, distance); + return 1; + } + return 0; +} + +int EQ2Emu_lua_GetX(lua_State* state){ + if(!lua_interface) + return 0; + Spawn* spawn = lua_interface->GetSpawn(state); + if(spawn){ + lua_interface->SetFloatValue(state, spawn->GetX()); + return 1; + } + return 0; +} + +int EQ2Emu_lua_GetY(lua_State* state){ + if(!lua_interface) + return 0; + Spawn* spawn = lua_interface->GetSpawn(state); + if(spawn){ + lua_interface->SetFloatValue(state, spawn->GetY()); + return 1; + } + return 0; +} + +int EQ2Emu_lua_GetZ(lua_State* state){ + if(!lua_interface) + return 0; + Spawn* spawn = lua_interface->GetSpawn(state); + if(spawn){ + lua_interface->SetFloatValue(state, spawn->GetZ()); + return 1; + } + return 0; +} + +int EQ2Emu_lua_GetHeading(lua_State* state){ + if(!lua_interface) + return 0; + Spawn* spawn = lua_interface->GetSpawn(state); + if(spawn){ + lua_interface->SetFloatValue(state, spawn->GetHeading()); + return 1; + } + return 0; +} + +int EQ2Emu_lua_GetModelType(lua_State* state){ + if(!lua_interface) + return 0; + Spawn* spawn = lua_interface->GetSpawn(state); + if(spawn){ + lua_interface->SetInt32Value(state, spawn->GetModelType()); + return 1; + } + return 0; +} + +int EQ2Emu_lua_GetSpeed(lua_State* state){ + if(!lua_interface) + return 0; + Spawn* spawn = lua_interface->GetSpawn(state); + if(spawn){ + lua_interface->SetFloatValue(state, spawn->GetSpeed()); + return 1; + } + return 0; +} +int EQ2Emu_lua_HasMoved(lua_State* state){ + if(!lua_interface) + return 0; + Spawn* spawn = lua_interface->GetSpawn(state); + if(spawn && spawn->IsEntity()){ + lua_interface->SetBooleanValue(state, ((Entity*)spawn)->HasMoved(false)); + return 1; + } + return 0; +} +int EQ2Emu_lua_GetInt(lua_State* state){ + if(!lua_interface) + return 0; + Spawn* spawn = lua_interface->GetSpawn(state); + if(spawn && spawn->IsEntity()){ + lua_interface->SetInt32Value(state, ((Entity*)spawn)->GetInt()); + return 1; + } + return 0; +} +int EQ2Emu_lua_GetWis(lua_State* state){ + if(!lua_interface) + return 0; + Spawn* spawn = lua_interface->GetSpawn(state); + if(spawn && spawn->IsEntity()){ + lua_interface->SetInt32Value(state, ((Entity*)spawn)->GetWis()); + return 1; + } + return 0; +} +int EQ2Emu_lua_GetSta(lua_State* state){ + if(!lua_interface) + return 0; + Spawn* spawn = lua_interface->GetSpawn(state); + if(spawn && spawn->IsEntity()){ + lua_interface->SetInt32Value(state, ((Entity*)spawn)->GetSta()); + return 1; + } + return 0; +} +int EQ2Emu_lua_GetStr(lua_State* state){ + if(!lua_interface) + return 0; + Spawn* spawn = lua_interface->GetSpawn(state); + if(spawn && spawn->IsEntity()){ + lua_interface->SetInt32Value(state, ((Entity*)spawn)->GetStr()); + return 1; + } + return 0; +} +int EQ2Emu_lua_GetAgi(lua_State* state){ + if(!lua_interface) + return 0; + Spawn* spawn = lua_interface->GetSpawn(state); + if(spawn && spawn->IsEntity()){ + lua_interface->SetInt32Value(state, ((Entity*)spawn)->GetAgi()); + return 1; + } + return 0; +} + +int EQ2Emu_lua_GetIntBase(lua_State* state){ + if(!lua_interface) + return 0; + Spawn* spawn = lua_interface->GetSpawn(state); + if(spawn && spawn->IsEntity()){ + lua_interface->SetInt32Value(state, ((Entity*)spawn)->GetIntBase()); + return 1; + } + return 0; +} + +int EQ2Emu_lua_GetWisBase(lua_State* state){ + if(!lua_interface) + return 0; + Spawn* spawn = lua_interface->GetSpawn(state); + if(spawn && spawn->IsEntity()){ + lua_interface->SetInt32Value(state, ((Entity*)spawn)->GetWisBase()); + return 1; + } + return 0; +} + +int EQ2Emu_lua_GetStaBase(lua_State* state){ + if(!lua_interface) + return 0; + Spawn* spawn = lua_interface->GetSpawn(state); + if(spawn && spawn->IsEntity()){ + lua_interface->SetInt32Value(state, ((Entity*)spawn)->GetStaBase()); + return 1; + } + return 0; +} + +int EQ2Emu_lua_GetStrBase(lua_State* state){ + if(!lua_interface) + return 0; + Spawn* spawn = lua_interface->GetSpawn(state); + if(spawn && spawn->IsEntity()){ + lua_interface->SetInt32Value(state, ((Entity*)spawn)->GetStrBase()); + return 1; + } + return 0; +} + +int EQ2Emu_lua_GetAgiBase(lua_State* state){ + if(!lua_interface) + return 0; + Spawn* spawn = lua_interface->GetSpawn(state); + if(spawn && spawn->IsEntity()){ + lua_interface->SetInt32Value(state, ((Entity*)spawn)->GetAgiBase()); + return 1; + } + return 0; +} + +int EQ2Emu_lua_SetStepComplete(lua_State* state){ + if(!lua_interface) + return 0; + Spawn* player = lua_interface->GetSpawn(state); + int32 quest_id = lua_interface->GetInt32Value(state, 2); + int32 step = lua_interface->GetInt32Value(state, 3); + if(player && player->IsPlayer() && quest_id > 0 && step > 0 && (((Player*)player)->player_quests.count(quest_id) > 0)){ + Client* client = player->GetZone()->GetClientBySpawn(player); + if(client) + client->AddPendingQuestUpdate(quest_id, step); + } + return 0; +} + +int EQ2Emu_lua_AddStepProgress(lua_State* state) { + Spawn* player = lua_interface->GetSpawn(state); + int32 quest_id = lua_interface->GetInt32Value(state, 2); + int32 step = lua_interface->GetInt32Value(state, 3); + int32 progress = lua_interface->GetInt32Value(state, 4); + if (player && player->IsPlayer() && quest_id > 0 && step > 0 && progress > 0 && (((Player*)player)->player_quests.count(quest_id) > 0)) { + Client* client = player->GetZone()->GetClientBySpawn(player); + if (client) + client->AddPendingQuestUpdate(quest_id, step, progress); + } + return 0; +} + +int EQ2Emu_lua_GetTaskGroupStep(lua_State* state){ + if(!lua_interface) + return 0; + Spawn* player = lua_interface->GetSpawn(state); + int32 quest_id = lua_interface->GetInt32Value(state, 2); + if(player && player->IsPlayer() && quest_id > 0 ){ + lua_interface->SetInt32Value(state, ((Player*)player)->GetTaskGroupStep(quest_id)); + return 1; + } + return 0; +} + +int EQ2Emu_lua_QuestStepIsComplete(lua_State* state){ + if(!lua_interface) + return 0; + Spawn* player = lua_interface->GetSpawn(state); + int32 quest_id = lua_interface->GetInt32Value(state, 2); + int32 step_id = lua_interface->GetInt32Value(state, 3); + if(player && player->IsPlayer() && quest_id > 0 ){ + lua_interface->SetBooleanValue(state, ((Player*)player)->GetQuestStepComplete(quest_id, step_id)); + return 1; + } + return 0; +} + +int EQ2Emu_lua_GetQuestStep(lua_State* state){ + if(!lua_interface) + return 0; + Spawn* player = lua_interface->GetSpawn(state); + int32 quest_id = lua_interface->GetInt32Value(state, 2); + if(player && player->IsPlayer() && quest_id > 0 ){ + lua_interface->SetInt32Value(state, ((Player*)player)->GetQuestStep(quest_id)); + return 1; + } + return 0; +} + +int EQ2Emu_lua_RegisterQuest(lua_State* state){ + if(!lua_interface) + return 0; + Quest* quest = lua_interface->GetQuest(state); + string name = lua_interface->GetStringValue(state, 2); + string type = lua_interface->GetStringValue(state, 3); + string zone = lua_interface->GetStringValue(state, 4); + int16 level = lua_interface->GetInt16Value(state, 5); + string description = lua_interface->GetStringValue(state, 6); + bool load = true; + if(!quest){ + lua_interface->SimpleLogError("Quest not given in RegisterQuest!"); + load = false; + } + if(load && name.length() == 0){ + lua_interface->SimpleLogError("Name not given in RegisterQuest!"); + load = false; + } + if(load && type.length() == 0){ + lua_interface->LogError("Type not given in RegisterQuest for '%s'!", name.c_str()); + load = false; + } + if(load && zone.length() == 0){ + lua_interface->LogError("Zone not given in RegisterQuest for '%s'!", name.c_str()); + load = false; + } + if(load && description.length() == 0){ + lua_interface->LogError("Description not given in RegisterQuest for '%s'!", name.c_str()); + load = false; + } + if(load && level == 0){ + lua_interface->LogError("Level not given in RegisterQuest for '%s'!", name.c_str()); + load = false; + } + if(load) + quest->RegisterQuest(name, type, zone, level, description); + return 0; +} + +int EQ2Emu_lua_SetQuestPrereqLevel(lua_State* state){ + if(!lua_interface) + return 0; + Quest* quest = lua_interface->GetQuest(state); + if(quest){ + int8 level = lua_interface->GetInt16Value(state, 2); + quest->SetPrereqLevel(level); + } + return 0; +} + +int EQ2Emu_lua_AddQuestPrereqQuest(lua_State* state){ + if(!lua_interface) + return 0; + Quest* quest = lua_interface->GetQuest(state); + if(quest){ + int32 quest_id = lua_interface->GetInt32Value(state, 2); + quest->AddPrereqQuest(quest_id); + } + return 0; +} + +int EQ2Emu_lua_AddQuestPrereqItem(lua_State* state){ + if(!lua_interface) + return 0; + Quest* quest = lua_interface->GetQuest(state); + if(quest){ + int32 item_id = lua_interface->GetInt32Value(state, 2); + int8 quantity = lua_interface->GetInt32Value(state, 3); + if(quantity == 0) + quantity = 1; + Item* master_item = master_item_list.GetItem(item_id); + if(master_item){ + Item* item = new Item(master_item); + item->details.count = quantity; + quest->AddPrereqItem(item); + } + } + return 0; +} +int EQ2Emu_lua_HasQuest(lua_State* state){ + if(!lua_interface) + return 0; + Spawn* player = lua_interface->GetSpawn(state); + int32 quest_id = lua_interface->GetInt32Value(state, 2); + if(player && player->IsPlayer() && quest_id > 0){ + lua_interface->SetBooleanValue(state, (((Player*)player)->player_quests.count(quest_id) > 0)); + return 1; + } + return 0; +} + +int EQ2Emu_lua_QuestReturnNPC(lua_State* state){ + if(!lua_interface) + return 0; + Quest* quest = lua_interface->GetQuest(state); + int32 spawn_id = lua_interface->GetInt32Value(state, 2); + if(quest && spawn_id > 0) + quest->SetQuestReturnNPC(spawn_id); + return 0; +} + +int EQ2Emu_lua_AddTimer(lua_State* state){ + if(!lua_interface) + return 0; + + Spawn* spawn = lua_interface->GetSpawn(state); + if (!spawn) { + lua_interface->LogError("LUA AddTimer command error: spawn is not valid"); + return 0; + } + + int32 time = lua_interface->GetInt32Value(state, 2); + if (time <= 0) { + lua_interface->LogError("LUA AddTimer command error: time is not set"); + return 0; + } + + string function = lua_interface->GetStringValue(state, 3); + if (function.length() == 0) { + lua_interface->LogError("LUA AddTimer command error: function is not set"); + return 0; + } + + int32 max_count = lua_interface->GetInt32Value(state, 4); + Spawn* player = lua_interface->GetSpawn(state, 5); + + SpawnScriptTimer* timer = new SpawnScriptTimer; + timer->timer = Timer::GetCurrentTime2() + time; + timer->function = function; + timer->spawn = spawn->GetID(); + timer->player = player ? player->GetID() : 0; + if(max_count == 0) + max_count = 1; + timer->max_count = max_count; + timer->current_count = 0; + spawn->GetZone()->AddSpawnScriptTimer(timer); + + return 0; +} + +int EQ2Emu_lua_GetQuest(lua_State* state){ + if(!lua_interface) + return 0; + Spawn* player = lua_interface->GetSpawn(state); + int32 quest_id = lua_interface->GetInt32Value(state, 2); + if(player && player->IsPlayer() && quest_id > 0){ + lua_interface->SetQuestValue(state, ((Player*)player)->player_quests[quest_id]); + return 1; + } + return 0; +} + +int EQ2Emu_lua_QuestIsComplete(lua_State* state){ + if(!lua_interface) + return 0; + Spawn* player = lua_interface->GetSpawn(state); + int32 quest_id = lua_interface->GetInt32Value(state, 2); + if(player && player->IsPlayer() && quest_id > 0 && (((Player*)player)->player_quests.count(quest_id) > 0)){ + Quest* quest = ((Player*)player)->player_quests[quest_id]; + if(quest) + lua_interface->SetBooleanValue(state, quest->GetCompleted()); + return 1; + } + return 0; +} + +int EQ2Emu_lua_HasCompletedQuest(lua_State* state){ + if(!lua_interface) + return 0; + Spawn* player = lua_interface->GetSpawn(state); + int32 quest_id = lua_interface->GetInt32Value(state, 2); + if(player && player->IsPlayer() && quest_id > 0){ + lua_interface->SetBooleanValue(state, (((Player*)player)->GetCompletedQuest(quest_id) != 0)); + return 1; + } + return 0; +} + +int EQ2Emu_lua_ProvidesQuest(lua_State* state){ + if(!lua_interface) + return 0; + Spawn* npc = lua_interface->GetSpawn(state); + int32 quest_id = lua_interface->GetInt32Value(state, 2); + if(npc && !npc->IsPlayer() && quest_id > 0) + npc->AddProvidedQuest(quest_id); + return 0; +} + +int EQ2Emu_lua_OfferQuest(lua_State* state){ + if(!lua_interface) + return 0; + Spawn* npc = lua_interface->GetSpawn(state); + Spawn* player = lua_interface->GetSpawn(state, 2); + int32 quest_id = lua_interface->GetInt32Value(state, 3); + + /* NPC is allowed to be null */ + if (player && player->IsPlayer() && quest_id > 0){ + Quest* master_quest = master_quest_list.GetQuest(quest_id); + if(master_quest){ + Client* client = player->GetZone()->GetClientBySpawn(player); + Quest* quest = new Quest(master_quest); + if(client && quest){ + client->AddPendingQuest(quest); + if (npc) + quest->SetQuestGiver(npc->GetDatabaseID()); + else + quest->SetQuestGiver(0); + } + } + } + return 0; +} + +int EQ2Emu_lua_AddQuestPrereqClass(lua_State* state){ + if(!lua_interface) + return 0; + Quest* quest = lua_interface->GetQuest(state); + if(quest){ + int8 class_id = lua_interface->GetInt8Value(state, 2); + quest->AddPrereqClass(class_id); + } + return 0; +} + +int EQ2Emu_lua_AddQuestPrereqRace(lua_State* state){ + if(!lua_interface) + return 0; + Quest* quest = lua_interface->GetQuest(state); + if(quest){ + int8 race = lua_interface->GetInt8Value(state, 2); + quest->AddPrereqRace(race); + } + return 0; +} + +int EQ2Emu_lua_AddQuestPrereqModelType(lua_State* state){ + if(!lua_interface) + return 0; + Quest* quest = lua_interface->GetQuest(state); + if(quest){ + int16 model_type = lua_interface->GetInt16Value(state, 2); + quest->AddPrereqModelType(model_type); + } + return 0; +} + +int EQ2Emu_lua_AddQuestPrereqTradeskillLevel(lua_State* state){ + if(!lua_interface) + return 0; + + Quest* quest = lua_interface->GetQuest(state); + if (!quest) { + lua_interface->LogError("LUA AddQuestPrereqTradeskillLevel command error: quest is not valid"); + return 0; + } + + int8 level = lua_interface->GetInt8Value(state, 2); + quest->SetPrereqTSLevel(level); + return 0; +} + +int EQ2Emu_lua_AddQuestPrereqTradeskillClass(lua_State* state){ + if(!lua_interface) + return 0; + + Quest* quest = lua_interface->GetQuest(state); + if (!quest) { + lua_interface->LogError("LUA AddQuestPrereqTradeskillClass command error: quest is not valid"); + return 0; + } + + int8 class_id = lua_interface->GetInt8Value(state, 2); + quest->AddPrereqTradeskillClass(class_id); + return 0; +} + +int EQ2Emu_lua_AddQuestPrereqFaction(lua_State* state){ + if(!lua_interface) + return 0; + Quest* quest = lua_interface->GetQuest(state); + if(quest){ + int32 faction_id = lua_interface->GetInt32Value(state, 2); + sint32 min = lua_interface->GetSInt32Value(state, 3); + sint32 max = lua_interface->GetSInt32Value(state, 4); + quest->AddPrereqFaction(faction_id, min, max); + } + return 0; +} + +int EQ2Emu_lua_AddQuestSelectableRewardItem(lua_State* state){ + if(!lua_interface) + return 0; + Quest* quest = lua_interface->GetQuest(state); + if(quest){ + int32 item_id = lua_interface->GetInt32Value(state, 2); + int8 quantity = lua_interface->GetInt8Value(state, 3); + if(quantity == 0) + quantity = 1; + Item* master_item = master_item_list.GetItem(item_id); + if(master_item){ + Item* item = new Item(master_item); + item->details.count = quantity; + quest->AddSelectableRewardItem(item); + } + } + return 0; +} + +int EQ2Emu_lua_AddQuestRewardItem(lua_State* state){ + if(!lua_interface) + return 0; + Quest* quest = lua_interface->GetQuest(state); + if(quest){ + int32 item_id = lua_interface->GetInt32Value(state, 2); + int8 quantity = lua_interface->GetInt32Value(state, 3); + if(quantity == 0) + quantity = 1; + Item* master_item = master_item_list.GetItem(item_id); + if(master_item){ + Item* item = new Item(master_item); + item->details.count = quantity; + quest->AddRewardItem(item); + } + } + return 0; +} + +int EQ2Emu_lua_AddQuestRewardCoin(lua_State* state){ + if(!lua_interface) + return 0; + Quest* quest = lua_interface->GetQuest(state); + if(quest){ + int32 copper = lua_interface->GetInt32Value(state, 2); + int32 silver = lua_interface->GetInt32Value(state, 3); + int32 gold = lua_interface->GetInt32Value(state, 4); + int32 plat = lua_interface->GetInt32Value(state, 5); + quest->AddRewardCoins(copper, silver, gold, plat); + } + return 0; +} + +int EQ2Emu_lua_AddQuestRewardFaction(lua_State* state){ + if(!lua_interface) + return 0; + Quest* quest = lua_interface->GetQuest(state); + int32 faction_id = lua_interface->GetInt32Value(state, 2); + sint32 amount = lua_interface->GetSInt32Value(state, 3); + if (quest && faction_id > 0 && amount != 0) + quest->AddRewardFaction(faction_id, amount); + return 0; +} + +int EQ2Emu_lua_SetQuestRewardStatus(lua_State* state){ + if(!lua_interface) + return 0; + Quest* quest = lua_interface->GetQuest(state); + if(quest){ + int32 status = lua_interface->GetInt32Value(state, 2); + quest->SetRewardStatus(status); + } + return 0; +} + +int EQ2Emu_lua_SetQuestRewardComment(lua_State* state){ + if(!lua_interface) + return 0; + Quest* quest = lua_interface->GetQuest(state); + if(quest){ + string comment = lua_interface->GetStringValue(state, 2); + quest->SetRewardComment(comment); + } + return 0; +} + +int EQ2Emu_lua_SetQuestRewardExp(lua_State* state){ + if(!lua_interface) + return 0; + Quest* quest = lua_interface->GetQuest(state); + if(quest){ + int32 exp = lua_interface->GetInt32Value(state, 2); + quest->SetRewardXP(exp); + } + return 0; +} + +int EQ2Emu_lua_AddQuestStep(lua_State* state) { + Quest* quest = lua_interface->GetQuest(state); + if (quest) { + int32 step = lua_interface->GetInt32Value(state, 2); + string description = lua_interface->GetStringValue(state, 3); + int32 quantity = lua_interface->GetInt32Value(state, 4); + float percentage = lua_interface->GetFloatValue(state, 5); + string str_taskgroup = lua_interface->GetStringValue(state, 6); + int16 icon = lua_interface->GetInt16Value(state, 7); + int32 usableitemid = lua_interface->GetInt32Value(state, 8); + const char* taskgroup = 0; + if(str_taskgroup.length() > 0) + taskgroup = str_taskgroup.c_str(); + QuestStep* quest_step = quest->AddQuestStep(step, QUEST_STEP_TYPE_NORMAL, description, 0, quantity, taskgroup, 0, 0, percentage, usableitemid); + if (quest_step && icon && quantity > 0) + quest_step->SetIcon(icon); + } + return 0; +} + +int EQ2Emu_lua_AddQuestStepKill(lua_State* state){ + if(!lua_interface) + return 0; + Quest* quest = lua_interface->GetQuest(state); + if(quest){ + int32 step = lua_interface->GetInt32Value(state, 2); + string description = lua_interface->GetStringValue(state, 3); + int32 quantity = lua_interface->GetInt32Value(state, 4); + float percentage = lua_interface->GetFloatValue(state, 5); + string str_taskgroup = lua_interface->GetStringValue(state, 6); + int16 icon = lua_interface->GetInt16Value(state, 7); + const char* taskgroup = 0; + if(str_taskgroup.length() > 0) + taskgroup = str_taskgroup.c_str(); + int32 npc_id = 0; + vector* ids = 0; + + Spawn* spawn = nullptr; + int i=0; + while((npc_id = lua_interface->GetInt32Value(state, 8+i))){ + if(ids == 0) + ids = new vector; + ids->push_back(npc_id); + i++; + } + QuestStep* quest_step = quest->AddQuestStep(step, QUEST_STEP_TYPE_KILL, description, ids, quantity, taskgroup, 0, 0, percentage,0); + if(quest_step && icon > 0 && quantity > 0) + quest_step->SetIcon(icon); + } + return 0; +} + +int EQ2Emu_lua_AddQuestStepChat(lua_State* state){ + if(!lua_interface) + return 0; + Quest* quest = lua_interface->GetQuest(state); + if(quest){ + int32 step = lua_interface->GetInt32Value(state, 2); + string description = lua_interface->GetStringValue(state, 3); + int32 quantity = lua_interface->GetInt32Value(state, 4); + string str_taskgroup = lua_interface->GetStringValue(state, 5); + int16 icon = lua_interface->GetInt16Value(state, 6); + const char* taskgroup = 0; + if(str_taskgroup.length() > 0) + taskgroup = str_taskgroup.c_str(); + int32 npc_id = 0; + vector* ids = 0; + int i=0; + while((npc_id = lua_interface->GetInt32Value(state, 7+i))){ + if(ids == 0) + ids = new vector; + ids->push_back(npc_id); + i++; + } + QuestStep* quest_step = quest->AddQuestStep(step, QUEST_STEP_TYPE_CHAT, description, ids, quantity, taskgroup); + if (quest_step && icon > 0) + quest_step->SetIcon(icon); + if(quest->GetPlayer()){ + Client* client = quest->GetPlayer()->GetZone()->GetClientBySpawn(quest->GetPlayer()); + quest->GetPlayer()->GetZone()->SendQuestUpdates(client); + } + } + return 0; +} + +int EQ2Emu_lua_AddQuestStepObtainItem(lua_State* state){ + if(!lua_interface) + return 0; + Quest* quest = lua_interface->GetQuest(state); + if(quest){ + int32 step = lua_interface->GetInt32Value(state, 2); + string description = lua_interface->GetStringValue(state, 3); + int32 quantity = lua_interface->GetInt32Value(state, 4); + float percentage = lua_interface->GetFloatValue(state, 5); + string str_taskgroup = lua_interface->GetStringValue(state, 6); + int16 icon = lua_interface->GetInt16Value(state, 7); + const char* taskgroup = 0; + if(str_taskgroup.length() > 0) + taskgroup = str_taskgroup.c_str(); + int32 item_id = 0; + vector* ids = 0; + int i=0; + while((item_id = lua_interface->GetInt32Value(state, 8+i))){ + if(ids == 0) + ids = new vector; + ids->push_back(item_id); + i++; + } + QuestStep* quest_step = quest->AddQuestStep(step, QUEST_STEP_TYPE_OBTAIN_ITEM, description, ids, quantity, taskgroup, 0, 0, percentage,0); + if (quest_step && icon > 0 && quantity > 0) + quest_step->SetIcon(icon); + } + return 0; +} + +int EQ2Emu_lua_AddQuestStepLocation(lua_State* state){ + if(!lua_interface) + return 0; + Quest* quest = lua_interface->GetQuest(state); + if(quest){ + int32 step = lua_interface->GetInt32Value(state, 2); + string description = lua_interface->GetStringValue(state, 3); + float max_variation = lua_interface->GetFloatValue(state, 4); + string str_taskgroup = lua_interface->GetStringValue(state, 5); + int16 icon = lua_interface->GetInt16Value(state, 6); + const char* taskgroup = 0; + if(str_taskgroup.length() > 0) + taskgroup = str_taskgroup.c_str(); + vector* locations = 0; + int i = 7; + while(true) { + Location loc; + loc.x = lua_interface->GetFloatValue(state, i); + loc.y = lua_interface->GetFloatValue(state, i + 1); + loc.z = lua_interface->GetFloatValue(state, i + 2); + if(loc.x == 0 && loc.y == 0 && loc.z == 0) + break; + if(locations == 0) + locations = new vector; + locations->push_back(loc); + i += 3; + } + QuestStep* quest_step = quest->AddQuestStep(step, QUEST_STEP_TYPE_LOCATION, description, 0, 1, taskgroup, locations, max_variation); + if (quest_step && icon > 0) + quest_step->SetIcon(icon); + } + return 0; +} +int EQ2Emu_lua_AddQuestUsableItem(lua_State* state){ + if (!lua_interface) + return 0; + Quest* quest = lua_interface->GetQuest(state); + if (quest){ + int32 step = lua_interface->GetInt32Value(state, 2); + string description = lua_interface->GetStringValue(state, 3); + float max_variation = lua_interface->GetFloatValue(state, 4); + string str_taskgroup = lua_interface->GetStringValue(state, 5); + int16 icon = lua_interface->GetInt16Value(state, 6); + const char* taskgroup = 0; + if (str_taskgroup.length() > 0) + taskgroup = str_taskgroup.c_str(); + vector* locations = 0; + int i = 7; + while (true) { + Location loc; + loc.x = lua_interface->GetFloatValue(state, i); + loc.y = lua_interface->GetFloatValue(state, i + 1); + loc.z = lua_interface->GetFloatValue(state, i + 2); + if (loc.x == 0 && loc.y == 0 && loc.z == 0) + break; + if (locations == 0) + locations = new vector; + locations->push_back(loc); + i += 3; + } + QuestStep* quest_step = quest->AddQuestStep(step, QUEST_STEP_TYPE_LOCATION, description, 0, 1, taskgroup, locations, max_variation); + if (quest_step && icon > 0) + quest_step->SetIcon(icon); + } + return 0; +} +int EQ2Emu_lua_AddQuestStepSpell(lua_State* state) { + Quest* quest = lua_interface->GetQuest(state); + if(quest) { + int32 step = lua_interface->GetInt32Value(state, 2); + string description = lua_interface->GetStringValue(state, 3); + int32 quantity = lua_interface->GetInt32Value(state, 4); + float percentage = lua_interface->GetFloatValue(state, 5); + string str_taskgroup = lua_interface->GetStringValue(state, 6); + int16 icon = lua_interface->GetInt16Value(state, 7); + const char* taskgroup = 0; + if (str_taskgroup.length() > 0) + taskgroup = str_taskgroup.c_str(); + int32 spell_id = 0; + vector* ids = 0; + int i = 0; + while ((spell_id = lua_interface->GetInt32Value(state, 8 + i))) { + if (ids == 0) + ids = new vector; + ids->push_back(spell_id); + i++; + } + QuestStep* quest_step = quest->AddQuestStep(step, QUEST_STEP_TYPE_SPELL, description, ids, quantity, taskgroup, 0, 0, percentage,0); + if(quest_step && icon > 0 && quantity > 0) + quest_step->SetIcon(icon); + } + return 0; +} + +int EQ2Emu_lua_AddQuestStepCraft(lua_State* state){ + if(!lua_interface) + return 0; + Quest* quest = lua_interface->GetQuest(state); + if(quest){ + int32 step = lua_interface->GetInt32Value(state, 2); + string description = lua_interface->GetStringValue(state, 3); + int32 quantity = lua_interface->GetInt32Value(state, 4); + float percentage = lua_interface->GetFloatValue(state, 5); + string str_taskgroup = lua_interface->GetStringValue(state, 6); + int16 icon = lua_interface->GetInt16Value(state, 7); + const char* taskgroup = 0; + if(str_taskgroup.length() > 0) + taskgroup = str_taskgroup.c_str(); + int32 item_id = 0; + vector* ids = 0; + int i=0; + while((item_id = lua_interface->GetInt32Value(state, 8+i))){ + if(ids == 0) + ids = new vector; + ids->push_back(item_id); + i++; + } + QuestStep* quest_step = quest->AddQuestStep(step, QUEST_STEP_TYPE_CRAFT, description, ids, quantity, taskgroup, 0, 0, percentage,0); + if (quest_step && icon > 0 && quantity > 0) + quest_step->SetIcon(icon); + } + return 0; +} + +int EQ2Emu_lua_AddQuestStepHarvest(lua_State* state){ + if(!lua_interface) + return 0; + Quest* quest = lua_interface->GetQuest(state); + if(quest){ + int32 step = lua_interface->GetInt32Value(state, 2); + string description = lua_interface->GetStringValue(state, 3); + int32 quantity = lua_interface->GetInt32Value(state, 4); + float percentage = lua_interface->GetFloatValue(state, 5); + string str_taskgroup = lua_interface->GetStringValue(state, 6); + int16 icon = lua_interface->GetInt16Value(state, 7); + const char* taskgroup = 0; + if(str_taskgroup.length() > 0) + taskgroup = str_taskgroup.c_str(); + int32 item_id = 0; + vector* ids = 0; + int i=0; + while((item_id = lua_interface->GetInt32Value(state, 8+i))){ + if(ids == 0) + ids = new vector; + ids->push_back(item_id); + i++; + } + QuestStep* quest_step = quest->AddQuestStep(step, QUEST_STEP_TYPE_HARVEST, description, ids, quantity, taskgroup, 0, 0, percentage,0); + if (quest_step && icon > 0 && quantity > 0) + quest_step->SetIcon(icon); + } + return 0; +} + +int EQ2Emu_lua_SetQuestCompleteAction(lua_State* state){ + if(!lua_interface) + return 0; + Quest* quest = lua_interface->GetQuest(state); + if(quest){ + string action = lua_interface->GetStringValue(state, 2); + if(action.length() > 0) + quest->SetCompleteAction(action); + } + return 0; +} + +int EQ2Emu_lua_AddQuestStepCompleteAction(lua_State* state){ + if(!lua_interface) + return 0; + Quest* quest = lua_interface->GetQuest(state); + if(quest){ + int32 step = lua_interface->GetInt32Value(state, 2); + string action = lua_interface->GetStringValue(state, 3); + if(step > 0 && action.length() > 0) + quest->AddCompleteAction(step, action); + } + return 0; +} + +int EQ2Emu_lua_AddQuestStepProgressAction(lua_State* state){ + if(!lua_interface) + return 0; + Quest* quest = lua_interface->GetQuest(state); + if(quest){ + int32 step = lua_interface->GetInt32Value(state, 2); + string action = lua_interface->GetStringValue(state, 3); + if(step > 0 && action.length() > 0) + quest->AddProgressAction(step, action); + } + return 0; +} + +int EQ2Emu_lua_UpdateQuestDescription(lua_State* state){ + if(!lua_interface) + return 0; + Quest* quest = lua_interface->GetQuest(state); + string description = lua_interface->GetStringValue(state, 2); + if(quest && description.length() > 0) + quest->SetDescription(description); + return 0; +} + +int EQ2Emu_lua_SetCompletedDescription(lua_State* state){ + if(!lua_interface) + return 0; + Quest* quest = lua_interface->GetQuest(state); + string description = lua_interface->GetStringValue(state, 2); + if(quest && description.length() > 0) + quest->SetCompletedDescription(description); + return 0; +} + +int EQ2Emu_lua_UpdateQuestTaskGroupDescription(lua_State* state){ + if(!lua_interface) + return 0; + Quest* quest = lua_interface->GetQuest(state); + int32 step = lua_interface->GetInt32Value(state, 2); + string description = lua_interface->GetStringValue(state, 3); + bool display_bullets = (lua_interface->GetInt8Value(state, 4) == 1); + if(quest && step > 0 && description.length() > 0){ + quest->SetTaskGroupDescription(step, description, display_bullets); + if(quest->GetPlayer()){ + Client* client = quest->GetPlayer()->GetZone()->GetClientBySpawn(quest->GetPlayer()); + if(client) + client->SendQuestUpdateStep(quest, step, false); + } + } + return 0; +} + +int EQ2Emu_lua_UpdateQuestStepDescription(lua_State* state){ + if(!lua_interface) + return 0; + Quest* quest = lua_interface->GetQuest(state); + int32 step = lua_interface->GetInt32Value(state, 2); + string description = lua_interface->GetStringValue(state, 3); + if(quest && step > 0 && description.length() > 0){ + quest->SetStepDescription(step, description); + if(quest->GetPlayer()){ + Client* client = quest->GetPlayer()->GetZone()->GetClientBySpawn(quest->GetPlayer()); + if(client) + client->SendQuestUpdateStep(quest, step); + } + } + return 0; +} + +int EQ2Emu_lua_UpdateQuestZone(lua_State* state) { + Quest* quest = lua_interface->GetQuest(state); + string zone = lua_interface->GetStringValue(state, 2); + if (quest && zone.length() > 0) + quest->SetZone(zone); + return 0; +} + +int EQ2Emu_lua_GiveQuestReward(lua_State* state){ + if(!lua_interface) + return 0; + Quest* quest = lua_interface->GetQuest(state); + Spawn* spawn = lua_interface->GetSpawn(state, 2); + if(quest && spawn){ + if(spawn->IsPlayer()){ + Client* client = spawn->GetZone()->GetClientBySpawn(spawn); + if(client) + client->AddPendingQuestReward(quest); + } + } + return 0; +} + +int EQ2Emu_lua_Harvest(lua_State* state){ + if(!lua_interface) + return 0; + Spawn* player = lua_interface->GetSpawn(state); + Spawn* node = lua_interface->GetSpawn(state, 2); + if(player && node && player->IsPlayer() && node->IsGroundSpawn()){ + Client* client = player->GetZone()->GetClientBySpawn(player); + if(client){ + + LogWrite(MISC__TODO, 1, "TODO", "Cancel harvest if skill insufficient; Func: %s, Line: %i", __FUNCTION__, __LINE__); + + ((GroundSpawn*)node)->ProcessHarvest(client); + if(((GroundSpawn*)node)->GetNumberHarvests() == 0) + player->GetZone()->RemoveSpawn(node, true); + } + } + else if(player && player->IsPlayer()){ + Client* client = player->GetZone()->GetClientBySpawn(player); + if(client) + client->Message(CHANNEL_COLOR_RED, "Invalid target for this spell."); + } + return 0; +} + +int EQ2Emu_lua_Bind(lua_State* state){ + if(!lua_interface) + return 0; + Spawn* spawn = lua_interface->GetSpawn(state); + int32 zone_id = lua_interface->GetInt32Value(state, 2); + float x = lua_interface->GetFloatValue(state, 3); + float y = lua_interface->GetFloatValue(state, 4); + float z = lua_interface->GetFloatValue(state, 5); + float h = lua_interface->GetFloatValue(state, 6); + + if (!spawn) { + lua_interface->LogError("LUA Bind command error: spawn is not valid"); + return 0; + } + + if (!spawn->IsPlayer()) { + lua_interface->LogError("LUA Bind command error: spawn is not a player"); + return 0; + } + + if (zone_id == 0) { + Client* client = spawn->GetZone()->GetClientBySpawn(spawn); + if (!client) { + lua_interface->LogError("LUA Bind command error: unable to get client from spawn"); + return 0; + } + + if (!client->Bind()) + client->SimpleMessage(CHANNEL_COLOR_RED, "Unable to set bind point."); + } + else { + Player* player = (Player*)spawn; + player->GetPlayerInfo()->SetBindZone(zone_id); + player->GetPlayerInfo()->SetBindX(x); + player->GetPlayerInfo()->SetBindY(y); + player->GetPlayerInfo()->SetBindZ(z); + player->GetPlayerInfo()->SetBindHeading(h); + } + + return 0; +} + +int EQ2Emu_lua_Gate(lua_State* state){ + if(!lua_interface) + return 0; + Spawn* spawn = lua_interface->GetSpawn(state); + if(spawn){ + if(spawn->IsPlayer()){ + Client* client = spawn->GetZone()->GetClientBySpawn(spawn); + if(client){ + if(!client->Gate()) + client->SimpleMessage(CHANNEL_COLOR_RED, "Unable to gate."); + } + } + } + return 0; +} + +int EQ2Emu_lua_IsBindAllowed(lua_State* state){ + if(!lua_interface) + return 0; + bool ret = false; + Spawn* spawn = lua_interface->GetSpawn(state); + if(spawn){ + if(spawn->IsPlayer()){ + Client* client = spawn->GetZone()->GetClientBySpawn(spawn); + if(client) + ret = client->BindAllowed(); + } + } + lua_interface->SetBooleanValue(state, ret); + return 1; +} + +int EQ2Emu_lua_IsGateAllowed(lua_State* state){ + if(!lua_interface) + return 0; + bool ret = false; + Spawn* spawn = lua_interface->GetSpawn(state); + if(spawn){ + if(spawn->IsPlayer()){ + Client* client = spawn->GetZone()->GetClientBySpawn(spawn); + if(client) + ret = client->GateAllowed(); + } + } + lua_interface->SetBooleanValue(state, ret); + return 1; +} + +int EQ2Emu_lua_IsAlive(lua_State* state) { + Spawn* spawn = lua_interface->GetSpawn(state); + if (spawn) { + lua_interface->SetBooleanValue(state, spawn->Alive()); + return 1; + } + return 0; +} + +int EQ2Emu_lua_IsInCombat(lua_State* state) { + if (!lua_interface) + return 0; + Spawn* spawn = lua_interface->GetSpawn(state); + if (spawn && spawn->IsEntity()) { + lua_interface->SetBooleanValue(state, ((Entity*)spawn)->EngagedInCombat()); + return 1; + } + return 0; +} + +int EQ2Emu_lua_SendMessage(lua_State* state) { + Spawn* spawn = lua_interface->GetSpawn(state); + string message = lua_interface->GetStringValue(state, 2); + string color_str = lua_interface->GetStringValue(state, 3); + int8 color = CHANNEL_COLOR_WHITE; + if (spawn && spawn->IsPlayer() && message.length() > 0) { + Client* client = spawn->GetZone()->GetClientBySpawn(spawn); + if (client) { + if (color_str.length() > 0) { + if (strncasecmp(color_str.c_str(), "red", 3) == 0) + color = CHANNEL_COLOR_RED; + else if (strncasecmp(color_str.c_str(), "yellow", 6) == 0) + color = CHANNEL_COLOR_YELLOW; + } + client->SimpleMessage(color, message.c_str()); + } + } + return 0; +} + +int EQ2Emu_lua_SendPopUpMessage(lua_State* state) { + Spawn* spawn = lua_interface->GetSpawn(state); + string message = lua_interface->GetStringValue(state, 2); + int8 red = lua_interface->GetInt8Value(state, 3); + int8 green = lua_interface->GetInt8Value(state, 4); + int8 blue = lua_interface->GetInt8Value(state, 5); + + if (!spawn) { + lua_interface->LogError("LUA SendPopUpMessage command error: Spawn is not valid."); + return 0; + } + + int32 words = ::CountWordsInString(message.c_str()); + if (words < 5) + words = 5; + Client* client = spawn->GetZone()->GetClientBySpawn(spawn); + if (client) + client->SendPopupMessage(10, message.c_str(), "ui_harvested_normal", words, red, green, blue); + return 0; +} + +int EQ2Emu_lua_SetServerControlFlag(lua_State* state) { + Spawn* spawn = lua_interface->GetSpawn(state); + int8 param = lua_interface->GetInt8Value(state, 2); + int8 param_value = lua_interface->GetInt8Value(state, 3); + int8 value = lua_interface->GetInt8Value(state, 4); + if (spawn && spawn->IsPlayer() && (param >= 1 && param <= 5)) { + Client* client = spawn->GetZone()->GetClientBySpawn(spawn); + if (client) { + PacketStruct* packet = configReader.getStruct("WS_ServerControlFlags", client->GetVersion()); + switch (param) { + case 1: { + packet->setDataByName("parameter1", param_value); + break; + } + case 2: { + packet->setDataByName("parameter2", param_value); + break; + } + case 3: { + packet->setDataByName("parameter3", param_value); + break; + } + case 4: { + packet->setDataByName("parameter4", param_value); + break; + } + case 5: { + packet->setDataByName("parameter5", param_value); + break; + } + } + packet->setDataByName("value", value); + client->QueuePacket(packet->serialize()); + safe_delete(packet); + } + } + return 0; +} + +int EQ2Emu_lua_ToggleTracking(lua_State* state) { + Spawn* spawn = lua_interface->GetSpawn(state); + if (spawn && spawn->IsPlayer()) { + if (((Player*)spawn)->GetIsTracking()) + spawn->GetZone()->AddPlayerTracking((Player*)spawn); + else + spawn->GetZone()->RemovePlayerTracking((Player*)spawn, TRACKING_STOP); + } + return 0; +} + +int EQ2Emu_lua_AddPrimaryEntityCommand(lua_State* state) { + Spawn* player = lua_interface->GetSpawn(state); + Spawn* spawn = lua_interface->GetSpawn(state, 2); + string name = lua_interface->GetStringValue(state, 3); + float distance = lua_interface->GetFloatValue(state, 4); + string command = lua_interface->GetStringValue(state, 5); + string error_text = lua_interface->GetStringValue(state, 6); + int16 cast_time = lua_interface->GetInt16Value(state, 7); + int32 spell_visual = lua_interface->GetInt32Value(state, 8); + if (spawn && player && player->IsPlayer() && name.length() > 0) { + if (distance == 0) + distance = 10.0f; + if (command.length() == 0) + command = name; + spawn->AddPrimaryEntityCommand(name.c_str(), distance, command.c_str(), error_text.c_str(), cast_time, spell_visual); + player->GetZone()->SendUpdateDefaultCommand(spawn, command.c_str(), distance); + } + return 0; +} + +int EQ2Emu_lua_AddSpellBookEntry(lua_State* state) { + if(!lua_interface) + return 0; + Spawn* player = lua_interface->GetSpawn(state); + int32 spellid = lua_interface->GetInt32Value(state, 2); + int16 tier = lua_interface->GetInt16Value(state, 3); + Spell* spell = master_spell_list.GetSpell(spellid, tier); + if (player && spell && player->IsPlayer()) { + Client* client = player->GetZone()->GetClientBySpawn(player); + if (client) { + if (!client->GetPlayer()->HasSpell(spellid, tier -1, true)) + { + Spell* spell = master_spell_list.GetSpell(spellid, tier); + client->GetPlayer()->AddSpellBookEntry(spellid, 1, client->GetPlayer()->GetFreeSpellBookSlot(spell->GetSpellData()->spell_book_type), spell->GetSpellData()->spell_book_type, spell->GetSpellData()->linked_timer, true); + client->GetPlayer()->UnlockSpell(spell); + client->SendSpellUpdate(spell); + } + else + { + Spell* spell = master_spell_list.GetSpell(spellid, tier) ; + int8 old_slot = client->GetPlayer()->GetSpellSlot(spell->GetSpellID()); + client->GetPlayer()->RemoveSpellBookEntry(spell->GetSpellID()); + client->GetPlayer()->AddSpellBookEntry(spell->GetSpellID(), spell->GetSpellTier(), old_slot, spell->GetSpellData()->spell_book_type, spell->GetSpellData()->linked_timer, true); + client->GetPlayer()->UnlockSpell(spell); + client->SendSpellUpdate(spell); + } + + + + //if (client ) { + // ((Player*)player)->AddSpellBookEntry(spell->GetSpellID(), spell->GetSpellTier(), ((Player*)player)->GetFreeSpellBookSlot(spell->GetSpellData()->spell_book_type), spell->GetSpellData()->spell_book_type, spell->GetSpellData()->linked_timer, true); + EQ2Packet* outapp = ((Player*)player)->GetSpellBookUpdatePacket(client->GetVersion()); + if (outapp) + client->QueuePacket(outapp); + } + } + return 0; + + + + + + + + +} + +int EQ2Emu_lua_HasFreeSlot(lua_State* state) { + if(!lua_interface) + return 0; + Spawn* player = lua_interface->GetSpawn(state); + if(player && player->IsPlayer()) { + lua_interface->SetBooleanValue(state, ((Player*)player)->item_list.HasFreeSlot()); + return 1; + } + return 0; +} + +int EQ2Emu_lua_Attack(lua_State* state) { + if (lua_interface) { + Spawn* npc = lua_interface->GetSpawn(state); + Spawn* player = lua_interface->GetSpawn(state, 2); + if (npc && player && npc->IsNPC() && player->IsPlayer()) + ((NPC*)npc)->AddHate((Entity*)player, 100); + } + return 0; +} + +int EQ2Emu_lua_ApplySpellVisual(lua_State* state) { + if (lua_interface) { + Spawn* target = lua_interface->GetSpawn(state); + int32 spell_visual = lua_interface->GetInt32Value(state, 2); + if (target && target->GetZone()) + target->GetZone()->SendCastSpellPacket(spell_visual, target); + } + return 0; +} + +int EQ2Emu_lua_HasCollectionsToHandIn(lua_State *state) { + Spawn *player; + + if (lua_interface) { + player = lua_interface->GetSpawn(state); + if (player && player->IsPlayer()) { + lua_interface->SetBooleanValue(state, ((Player *)player)->GetCollectionList()->HasCollectionsToHandIn()); + return 1; + } + } + + return 0; +} + +int EQ2Emu_lua_HandInCollections(lua_State *state) { + Spawn *player; + Client *client; + + if (lua_interface) { + player = lua_interface->GetSpawn(state); + if (player && ((Player *)player)->IsPlayer() && ((Player *)player)->GetCollectionList()->HasCollectionsToHandIn()) + if ((client = player->GetZone()->GetClientBySpawn(player))) + client->HandInCollections(); + } + + return 0; +} + +int EQ2Emu_lua_UseWidget(lua_State* state) { + Spawn* widget; + + if (lua_interface) { + widget = lua_interface->GetSpawn(state); + if (widget && widget->IsWidget()) + ((Widget*)widget)->HandleUse(NULL, ""); + } + + return 0; +} + +int EQ2Emu_lua_SetSpellList(lua_State* state) { + Spawn* spawn = 0; + int32 primary_list = 0; + int32 secondary_list = 0; + + if (lua_interface) { + spawn = lua_interface->GetSpawn(state); + primary_list = lua_interface->GetInt32Value(state, 2); + secondary_list = lua_interface->GetInt32Value(state, 3); + + if (!spawn->IsNPC()) { + lua_interface->LogError("LUA SetSpellList command error: Spawn was not a valid NPC"); + return 0; + } + + NPC* npc = (NPC*)spawn; + npc->SetPrimarySpellList(primary_list); + npc->SetSecondarySpellList(secondary_list); + npc->SetSpells(npc->GetZone()->GetNPCSpells(npc->GetPrimarySpellList(), npc->GetSecondarySpellList())); + } + return 0; +} + +int EQ2Emu_lua_GetPet(lua_State* state){ + if(!lua_interface) + return 0; + Spawn* spawn = lua_interface->GetSpawn(state); + if(spawn) { + if (spawn->IsEntity() && ((Entity*)spawn)->GetPet()) { + lua_interface->SetSpawnValue(state, ((Entity*)spawn)->GetPet()); + return 1; + } + } + return 0; +} + +int EQ2Emu_lua_GetCharmedPet(lua_State* state){ + if(!lua_interface) + return 0; + Spawn* spawn = lua_interface->GetSpawn(state); + if(spawn) { + if (spawn->IsEntity() && ((Entity*)spawn)->GetCharmedPet()) { + lua_interface->SetSpawnValue(state, ((Entity*)spawn)->GetCharmedPet()); + return 1; + } + } + return 0; +} + +int EQ2Emu_lua_GetDeityPet(lua_State* state){ + if(!lua_interface) + return 0; + Spawn* spawn = lua_interface->GetSpawn(state); + if(spawn) { + if (spawn->IsEntity() && ((Entity*)spawn)->GetDeityPet()) { + lua_interface->SetSpawnValue(state, ((Entity*)spawn)->GetDeityPet()); + return 1; + } + } + return 0; +} + +int EQ2Emu_lua_GetCosmeticPet(lua_State* state){ + if(!lua_interface) + return 0; + Spawn* spawn = lua_interface->GetSpawn(state); + if(spawn) { + if (spawn->IsEntity() && ((Entity*)spawn)->GetCosmeticPet()) { + lua_interface->SetSpawnValue(state, ((Entity*)spawn)->GetCosmeticPet()); + return 1; + } + } + return 0; +} +int EQ2Emu_lua_Charm(lua_State* state){ + if (!lua_interface) + return 0; + Spawn* owner = lua_interface->GetSpawn(state); + Spawn* pet = lua_interface->GetSpawn(state, 2); + LuaSpell* luaspell = lua_interface->GetCurrentSpell(state); + if (!luaspell) { + lua_interface->LogError("LUA Charm command error: Spell is not valid, charm can only be used in spell scripts."); + return 0; + } + + if (owner && pet && owner->IsEntity() && pet->IsNPC()) { + ((Entity*)owner)->SetCharmedPet((Entity*)pet); + pet->SetPet(true); + ((NPC*)pet)->SetPetType(PET_TYPE_CHARMED); + ((NPC*)pet)->SetOwner((Entity*)owner); + // If owner is player and player does not have a summoned pet set the players charsheet + if (owner->IsPlayer() && !((Entity*)owner)->GetPet()) { + Player* player = (Player*)owner; + player->GetInfoStruct()->pet_id = player->GetIDWithPlayerSpawn(pet); + strcpy(player->GetInfoStruct()->pet_name, pet->GetName()); + player->GetInfoStruct()->pet_movement = 2; + player->GetInfoStruct()->pet_behavior = 3; + player->GetInfoStruct()->pet_health_pct = 1.0f; + player->GetInfoStruct()->pet_power_pct = 1.0f; + // Make sure the values get sent to the client + player->SetCharSheetChanged(true); + } + // Clear the spawns script so the charmed mob doesn't try to do anything like random walks + pet->SetSpawnScript(""); + // Set faction to the same as the owner + pet->SetFactionID(owner->GetFactionID()); + + ((NPC*)pet)->SetPetSpellID(luaspell->spell->GetSpellData()->id); + ((NPC*)pet)->SetPetSpellTier(luaspell->spell->GetSpellData()->tier); + + // Clear hate list + ((NPC*)pet)->Brain()->ClearHate(); + + // Set the brain to a pet brain + ((NPC*)pet)->SetBrain(new CombatPetBrain((NPC*)pet)); + } + return 0; +} + +int EQ2Emu_lua_GetGroup(lua_State* state) { + if (!lua_interface) + return 0; + + Spawn* spawn = lua_interface->GetSpawn(state); + if (!spawn) { + lua_interface->LogError("LUA GetGroup command error: spawn is not valid"); + return 0; + } + + vector groupMembers; + if (!spawn->IsPlayer() && spawn->HasSpawnGroup()) { + groupMembers = *spawn->GetSpawnGroup(); + } + else if (spawn->IsPlayer() && ((Player*)spawn)->GetGroupMemberInfo()) { + world.GetGroupManager()->GroupLock(__FUNCTION__, __LINE__); + + deque::iterator itr; + deque* members = world.GetGroupManager()->GetGroupMembers(((Player*)spawn)->GetGroupMemberInfo()->group_id); + GroupMemberInfo* info = 0; + for(itr = members->begin(); itr != members->end(); itr++){ + info = *itr; + if(info->client) + groupMembers.push_back(info->client->GetPlayer()); + } + + world.GetGroupManager()->ReleaseGroupLock(__FUNCTION__, __LINE__); + } + else + return 0; + + lua_createtable(state, groupMembers.size(), 0); + int newTable = lua_gettop(state); + for(int32 i=0; i < groupMembers.size(); i++) { + lua_interface->SetSpawnValue(state, groupMembers.at(i)); + lua_rawseti(state, newTable, i + 1); + } + return 1; + +} + +int EQ2Emu_lua_CreateOptionWindow(lua_State* state) { + if (!lua_interface) + return 0; + vector* option_window = new vector(); + lua_interface->SetOptionWindowValue(state, option_window); + return 1; +} + +int EQ2Emu_lua_AddOptionWindowOption(lua_State* state) { + if (!lua_interface) + return 0; + vector* option_window = lua_interface->GetOptionWindow(state); + if (option_window) { + OptionWindowOption option_window_option; + option_window_option.optionName = lua_interface->GetStringValue(state, 2); + option_window_option.optionDescription = lua_interface->GetStringValue(state, 3); + option_window_option.optionIconSheet = lua_interface->GetInt32Value(state, 4); + option_window_option.optionIconID = lua_interface->GetInt16Value(state, 5); + option_window_option.optionCommand = lua_interface->GetStringValue(state, 6); + option_window_option.optionConfirmTitle = lua_interface->GetStringValue(state, 7); + if (option_window_option.optionName.length() > 0 && option_window_option.optionDescription.length() > 0) + option_window->push_back(option_window_option); + } + return 0; +} + +int EQ2Emu_lua_SendOptionWindow(lua_State* state) { + if (!lua_interface) + return 0; + + vector* option_window = lua_interface->GetOptionWindow(state); + Spawn* player = lua_interface->GetSpawn(state, 2); + string window_title = lua_interface->GetStringValue(state, 3); + string cancel_command = lua_interface->GetStringValue(state, 4); + Client* client = player->GetZone()->GetClientBySpawn(player); + if (option_window && window_title.length() > 0 && client) { + PacketStruct* packet = configReader.getStruct("WS_SelectTradeskill", client->GetVersion()); + if (!packet) + return 0; + + packet->setDataByName("title_text", window_title.c_str()); + if (cancel_command.length() > 0) + packet->setDataByName("command_text_cancel", cancel_command.c_str()); + + packet->setArrayLengthByName("num_selections", option_window->size()); + vector::iterator itr; + int8 i = 0; + for (itr = option_window->begin(); itr != option_window->end(); itr++) { + OptionWindowOption opt = *itr; + packet->setArrayDataByName("tradeskill_name", opt.optionName.c_str(), i); + packet->setArrayDataByName("tradeskill_description", opt.optionDescription.c_str(), i); + packet->setArrayDataByName("icon_sheet", opt.optionIconSheet, i); + packet->setArrayDataByName("icon_id", opt.optionIconID, i); + if (opt.optionCommand.length() > 0) + packet->setArrayDataByName("command_text", opt.optionCommand.c_str(), i); + if (opt.optionConfirmTitle.length() > 0) + packet->setArrayDataByName("confirm_window_title", opt.optionConfirmTitle.c_str(), i); + + i++; + } + client->QueuePacket(packet->serialize()); + safe_delete(option_window); + safe_delete(packet); + } + return 0; +} + +int EQ2Emu_lua_GetTradeskillClass(lua_State* state) { + if (!lua_interface) + return 0; + + Spawn* spawn = lua_interface->GetSpawn(state); + + if (spawn) { + lua_interface->SetInt32Value(state, spawn->GetTradeskillClass()); + return 1; + } + else + lua_interface->LogError("LUA GetTradeskillClass command error: Spawn was not valid"); + + return 0; +} + +int EQ2Emu_lua_GetTradeskillLevel(lua_State* state) { + if (!lua_interface) + return 0; + + Spawn* spawn = lua_interface->GetSpawn(state); + if (spawn) { + lua_interface->SetInt32Value(state, spawn->GetTSLevel()); + return 1; + } + else + lua_interface->LogError("LUA GetTradeskillLevel command error: Spawns was not valid"); + return 0; +} + +int EQ2Emu_lua_GetTradeskillClassName(lua_State* state) { + if (!lua_interface) + return 0; + + Spawn* spawn = lua_interface->GetSpawn(state); + if (spawn) { + int8 class_id = spawn->GetTradeskillClass(); + // Need to add 42 for the offset in the array + class_id += 44; + lua_interface->SetStringValue(state, classes.GetClassNameCase(class_id).c_str()); + return 1; + } + else + lua_interface->LogError("LUA GetTradeskillClassName command error: Spawn was not valid"); + return 0; +} + +int EQ2Emu_lua_SetTradeskillLevel(lua_State* state) { + if (!lua_interface) + return 0; + + Spawn* spawn = lua_interface->GetSpawn(state); + int16 level = lua_interface->GetInt8Value(state, 2); + if (spawn) { + if (spawn->IsPlayer()) + spawn->GetZone()->GetClientBySpawn(spawn)->ChangeTSLevel(spawn->GetTSLevel(), level); + else + spawn->SetTSLevel(level); + } + else + lua_interface->LogError("LUA SetTradeskillLevel command error: Spawn was not valid"); + return 0; +} + +int EQ2Emu_lua_SummonPet(lua_State* state) { + // Check to see if we have a valid lua_interface + if(!lua_interface) + return 0; + + // Get the spawn that is getting the pet + Spawn* spawn = lua_interface->GetSpawn(state); + // Get the DB ID of the pet + int32 pet_id = lua_interface->GetInt32Value(state, 2); + // The max level the pet can gain + int8 max_level = lua_interface->GetInt8Value(state, 3); + // Get the spell that this command was called from + LuaSpell* luaspell = lua_interface->GetCurrentSpell(state); + + // Check to make sure the spawn pointer is valid + if (!spawn) { + lua_interface->LogError("LUA SummonPet command error: Spawn is not valid"); + return 0; + } + + // Check to make sure the spawn is an entity + if (!spawn->IsEntity()) { + lua_interface->LogError("LUA SummonPet command error: Spawn is not an entity"); + return 0; + } + + // Check to make sure the spawn doesn't already have a pet of this type + if (((Entity*)spawn)->GetPet()) { + if (spawn->IsPlayer()) { + Client* client = spawn->GetZone()->GetClientBySpawn(spawn); + if (client) + client->SimpleMessage(CHANNEL_COLOR_YELLOW, "You already have a pet."); + } + + lua_interface->LogError("LUA SummonPet command error: spawn already has a pet of this type"); + return 0; + } + + // Check to see if the DB ID for the pet is set + if (pet_id == 0) { + lua_interface->LogError("LUA SummonPet command error: pet_id can not be set to 0"); + return 0; + } + + // Check to see if the pointer to the spell is valid + if (!luaspell) { + lua_interface->LogError("LUA SummonPet command error: valid spell not found, SummonPet can only be used in spell scripts"); + return 0; + } + + // Get a pointer to a spawn with the given DB ID and check if the pointer is valid + Spawn* pet = spawn->GetZone()->GetSpawn(pet_id); + if(!pet) { + lua_interface->LogError("LUA SummonPet command error: Could not find spawn with id of %u.", pet_id); + return 0; + } + + // Check to make sure the pet is an npc + if (!pet->IsNPC()) { + lua_interface->LogError("LUA SummonPet command error: id (%u) did not point to a npc", pet_id); + return 0; + } + + // Spawn the pet at the same location as the owner + pet->SetX(spawn->GetX()); + pet->SetY(spawn->GetY()); + pet->SetZ(spawn->GetZ()); + pet->SetLocation(spawn->GetLocation()); + pet->SetHeading(spawn->GetHeading()); + spawn->GetZone()->AddSpawn(pet); + + /* + const char* spawn_script = world.GetSpawnScript(pet_id); + if(spawn_script && lua_interface->GetSpawnScript(spawn_script) != 0){ + spawn->SetSpawnScript(string(spawn_script)); + zone->CallSpawnScript(spawn, SPAWN_SCRIPT_SPAWN); + }*/ + + // Get a random pet name + string random_pet_name; + int16 rand_index = MakeRandomInt(0, spawn->GetZone()->pet_names.size() - 1); + random_pet_name = spawn->GetZone()->pet_names.at(rand_index); + LogWrite(PET__DEBUG, 0, "Pets", "Randomize Pet Name: '%s' (rand: %i)", random_pet_name.c_str(), rand_index); + + // If player set various values for the char sheet (pet window) + if (spawn->IsPlayer()) { + Player* player = (Player*)spawn; + player->GetInfoStruct()->pet_id = player->GetIDWithPlayerSpawn(pet); + strcpy(player->GetInfoStruct()->pet_name, random_pet_name.c_str()); + player->GetInfoStruct()->pet_movement = 2; + player->GetInfoStruct()->pet_behavior = 3; + player->GetInfoStruct()->pet_health_pct = 1.0f; + player->GetInfoStruct()->pet_power_pct = 1.0f; + // Make sure the values get sent to the client + player->SetCharSheetChanged(true); + } + + // Set the pets name + pet->SetName(random_pet_name.c_str()); + // Set the level of the pet to the owners level or max level(if set) if owners level is greater + if (max_level > 0) + pet->SetLevel(spawn->GetLevel() >= max_level ? max_level : spawn->GetLevel()); + else + pet->SetLevel(spawn->GetLevel()); + // Set the max level this pet can reach + ((NPC*)pet)->SetMaxPetLevel(max_level); + // Set the faction of the pet to the same faction as the owner + pet->SetFactionID(spawn->GetFactionID()); + // Set the spawn as a pet + pet->SetPet(true); + // Give a pointer of the owner to the pet + ((NPC*)pet)->SetOwner((Entity*)spawn); + // Give a pointer of the pet to the owner + ((Entity*)spawn)->SetCombatPet((Entity*)pet); + // Set the pet type + ((NPC*)pet)->SetPetType(PET_TYPE_COMBAT); + // Set the spell id used to create this pet + ((NPC*)pet)->SetPetSpellID(luaspell->spell->GetSpellData()->id); + // Set the spell tier used to create this pet + ((NPC*)pet)->SetPetSpellTier(luaspell->spell->GetSpellData()->tier); + // Set the pets spawn type to 6 + pet->SetSpawnType(6); + // Set the pets brain + ((NPC*)pet)->SetBrain(new CombatPetBrain((NPC*)pet)); + // Check to see if the pet has a subtitle + if (strlen(pet->GetSubTitle()) > 0) { + // Add the players name to the front of the sub title + string pet_subtitle; + pet_subtitle.append(spawn->GetName()).append("'s ").append(pet->GetSubTitle()); + LogWrite(PET__DEBUG, 0, "Pets", "Pet Subtitle: '%s'", pet_subtitle.c_str()); + // Set the pets subtitle to the new one + pet->SetSubTitle(pet_subtitle.c_str()); + } + // Add the "Pet Options" entity command to the pet + pet->AddSecondaryEntityCommand("Pet Options", 10.0f, "petoptions", "", 0, 0); + // Set the pet as the return value for this function + lua_interface->SetSpawnValue(state, pet); + return 1; +} + +int EQ2Emu_lua_SummonDeityPet(lua_State* state){ + if(!lua_interface) + return 0; + Spawn* spawn = lua_interface->GetSpawn(state); + int32 pet_id = lua_interface->GetInt32Value(state, 2); + LuaSpell* luaspell = lua_interface->GetCurrentSpell(state); + + if (!spawn) { + lua_interface->LogError("LUA SummonDeityPet command error: Spawn is not valid"); + return 0; + } + + if (!spawn->IsEntity()) { + lua_interface->LogError("LUA SummonDeityPet command error: Spawn is not an entity"); + return 0; + } + + if (((Entity*)spawn)->GetDeityPet()) { + if (spawn->IsPlayer()) { + Client* client = spawn->GetZone()->GetClientBySpawn(spawn); + if (client) + client->SimpleMessage(CHANNEL_COLOR_YELLOW, "You already have a deity pet."); + } + + lua_interface->LogError("LUA SummonDeityPet command error: spawn already has a pet of this type"); + return 0; + } + + if (pet_id == 0) { + lua_interface->LogError("LUA SummonDeityPet command error: pet_id can not be set to 0"); + return 0; + } + + if (!luaspell) { + lua_interface->LogError("LUA SummonDeityPet command error: valid spell not found, SummonDeityPet can only be used in spell scripts"); + return 0; + } + + Spawn* pet = spawn->GetZone()->GetSpawn(pet_id); + if(!pet) { + lua_interface->LogError("LUA SummonDeityPet command error: Could not find spawn with id of %u.", pet_id); + return 0; + } + + if (!pet->IsNPC()) { + lua_interface->LogError("LUA SummonDeityPet command error: spawn with id of %u is not a npc", pet_id); + return 0; + } + + pet->SetX(spawn->GetX()); + pet->SetY(spawn->GetY()); + pet->SetZ(spawn->GetZ()); + pet->SetLocation(spawn->GetLocation()); + pet->SetHeading(spawn->GetHeading()); + spawn->GetZone()->AddSpawn(pet); + + string random_pet_name; + int16 rand_index = MakeRandomInt(0, spawn->GetZone()->pet_names.size() - 1); + random_pet_name = spawn->GetZone()->pet_names.at(rand_index); + LogWrite(PET__DEBUG, 0, "Pets", "Randomize Pet Name: '%s' (rand: %i)", random_pet_name.c_str(), rand_index); + + pet->SetName(random_pet_name.c_str()); + pet->SetLevel(spawn->GetLevel()); + pet->SetFactionID(spawn->GetFactionID()); + pet->SetPet(true); + ((NPC*)pet)->SetPetType(PET_TYPE_DEITY); + ((NPC*)pet)->SetOwner((Entity*)spawn); + ((Entity*)spawn)->SetDeityPet((Entity*)pet); + pet->SetSpawnType(6); + ((NPC*)pet)->SetBrain(new NonCombatPetBrain((NPC*)pet)); + ((NPC*)pet)->SetPetSpellID(luaspell->spell->GetSpellData()->id); + ((NPC*)pet)->SetPetSpellTier(luaspell->spell->GetSpellData()->tier); + + if (strlen(pet->GetSubTitle()) > 0) { + string pet_subtitle; + pet_subtitle.append(spawn->GetName()).append("'s ").append(pet->GetSubTitle()); + LogWrite(PET__DEBUG, 0, "Pets", "Pet Subtitle: '%s'", pet_subtitle.c_str()); + pet->SetSubTitle(pet_subtitle.c_str()); + } + + // deity and cosmetic pets are not attackable + pet->SetAttackable(false); + pet->AddSecondaryEntityCommand("Pet Options", 10.0f, "petoptions", "", 0, 0); + lua_interface->SetSpawnValue(state, pet); + return 1; +} + +int EQ2Emu_lua_SummonCosmeticPet(lua_State* state){ + if(!lua_interface) + return 0; + Spawn* spawn = lua_interface->GetSpawn(state); + int32 pet_id = lua_interface->GetInt32Value(state, 2); + LuaSpell* luaspell = lua_interface->GetCurrentSpell(state); + + if (!spawn) { + lua_interface->LogError("LUA SummonCosmeticPet command error: Spawn is not valid"); + return 0; + } + + if (!spawn->IsEntity()) { + lua_interface->LogError("LUA SummonCosmeticPet command error: Spawn is not an entity"); + return 0; + } + + if (((Entity*)spawn)->GetCosmeticPet()) { + if (spawn->IsPlayer()) { + Client* client = spawn->GetZone()->GetClientBySpawn(spawn); + if (client) + client->SimpleMessage(CHANNEL_COLOR_YELLOW, "You already have a cosmetic pet."); + } + + lua_interface->LogError("LUA SummonCosmeticPet command error: spawn already has a pet of this type"); + return 0; + } + + if (pet_id == 0) { + lua_interface->LogError("LUA SummonCosmeticPet command error: pet_id can not be set to 0"); + return 0; + } + + if (!luaspell) { + lua_interface->LogError("LUA SummonCosmeticPet command error: valid spell not found, SummonCosmeticPet can only be used in spell scripts"); + return 0; + } + + Spawn* pet = spawn->GetZone()->GetSpawn(pet_id); + if(!pet) { + lua_interface->LogError("LUA SummonCosmeticPet command error: Could not find spawn with id of %u.", pet_id); + return 0; + } + + if (!pet->IsNPC()) { + lua_interface->LogError("LUA SummonCosmeticPet command error: spawn with id of %u is not a npc", pet_id); + return 0; + } + + pet->SetX(spawn->GetX()); + pet->SetY(spawn->GetY()); + pet->SetZ(spawn->GetZ()); + pet->SetLocation(spawn->GetLocation()); + pet->SetHeading(spawn->GetHeading()); + spawn->GetZone()->AddSpawn(pet); + + string random_pet_name; + int16 rand_index = MakeRandomInt(0, spawn->GetZone()->pet_names.size() - 1); + random_pet_name = spawn->GetZone()->pet_names.at(rand_index); + LogWrite(PET__DEBUG, 0, "Pets", "Randomize Pet Name: '%s' (rand: %i)", random_pet_name.c_str(), rand_index); + + pet->SetName(random_pet_name.c_str()); + pet->SetLevel(spawn->GetLevel()); + pet->SetFactionID(spawn->GetFactionID()); + pet->SetPet(true); + ((NPC*)pet)->SetPetType(PET_TYPE_COSMETIC); + ((NPC*)pet)->SetOwner((Entity*)spawn); + ((Entity*)spawn)->SetCosmeticPet((Entity*)pet); + pet->SetSpawnType(6); + ((NPC*)pet)->SetBrain(new NonCombatPetBrain((NPC*)pet)); + ((NPC*)pet)->SetPetSpellID(luaspell->spell->GetSpellData()->id); + ((NPC*)pet)->SetPetSpellTier(luaspell->spell->GetSpellData()->tier); + + if (strlen(pet->GetSubTitle()) > 0) { + string pet_subtitle; + pet_subtitle.append(spawn->GetName()).append("'s ").append(pet->GetSubTitle()); + LogWrite(PET__DEBUG, 0, "Pets", "Pet Subtitle: '%s'", pet_subtitle.c_str()); + pet->SetSubTitle(pet_subtitle.c_str()); + } + + pet->SetAttackable(false); + pet->AddSecondaryEntityCommand("Pet Options", 10.0f, "petoptions", "", 0, 0); + lua_interface->SetSpawnValue(state, pet); + return 1; +} + +int EQ2Emu_lua_DismissPet(lua_State* state) { + if (!lua_interface) + return 0; + + Spawn* spawn = lua_interface->GetSpawn(state); + + if (!spawn) { + lua_interface->LogError("LUA DismissPet command error: spawn is not valid"); + return 0; + } + + if (!spawn->IsPet()) { + lua_interface->LogError("LUA DismissPet command error: spawn is not a pet"); + return 0; + } + + if (!((NPC*)spawn)->IsDismissing()) + ((NPC*)spawn)->GetOwner()->DismissPet((NPC*)spawn); + + return 0; +} + +int EQ2Emu_lua_SetQuestFeatherColor(lua_State* state){ + if(!lua_interface) + return 0; + + Quest* quest = lua_interface->GetQuest(state); + + if (!quest) { + lua_interface->LogError("LUA SetQuestFeatherColor command error: valid quest not found, SetQuestFeatherColor can only be called from a quest script"); + return 0; + } + + int8 feather_color = lua_interface->GetInt8Value(state, 2); + if(feather_color > 0) + quest->SetFeatherColor(feather_color); + + return 0; +} + +int EQ2Emu_lua_RemoveSpawnAccess(lua_State* state){ + if(!lua_interface) + return 0; + + Spawn* spawn = lua_interface->GetSpawn(state); + Spawn* spawn2 = lua_interface->GetSpawn(state, 2); + + if (!spawn) { + lua_interface->LogError("LUA RemoveSpawnAccess command error: first spawn is not valid"); + return 0; + } + + if (!spawn2) { + lua_interface->LogError("LUA RemoveSpawnAccess command error: second spawn is not valid"); + return 0; + } + + spawn->RemoveSpawnAccess(spawn2); + return 0; +} + +int EQ2Emu_lua_SpawnByLocationID(lua_State* state) { + if (!lua_interface) + return 0; + + ZoneServer* zone = lua_interface->GetZone(state); + int32 location_id = lua_interface->GetInt32Value(state, 2); + + if (!zone) { + lua_interface->LogError("LUA SpawnByLocationID command error: zone is not valid"); + return 0; + } + + if (location_id == 0) { + lua_interface->LogError("LUA SpawnByLocationID command error: location id can not be 0"); + return 0; + } + + SpawnLocation* location = zone->GetSpawnLocation(location_id); + if (!location) { + lua_interface->LogError("LUA SpawnByLocationID command error: no location found for the given ID (%u)", location_id); + return 0; + } + + Spawn* spawn = 0; + if (location->entities[0]) { + if(location->entities[0]->spawn_type == SPAWN_ENTRY_TYPE_NPC) + spawn = zone->AddNPCSpawn(location, location->entities[0]); + else if(location->entities[0]->spawn_type == SPAWN_ENTRY_TYPE_GROUNDSPAWN) + spawn = zone->AddGroundSpawn(location, location->entities[0]); + else if(location->entities[0]->spawn_type == SPAWN_ENTRY_TYPE_OBJECT) + spawn = zone->AddObjectSpawn(location, location->entities[0]); + else if(location->entities[0]->spawn_type == SPAWN_ENTRY_TYPE_WIDGET) + spawn = zone->AddWidgetSpawn(location, location->entities[0]); + else if(location->entities[0]->spawn_type == SPAWN_ENTRY_TYPE_SIGN) + spawn = zone->AddSignSpawn(location, location->entities[0]); + + if (spawn) { + const char* script = 0; + for (int x = 0; x < 3; x++) { + switch (x) { + case 0: + script = world.GetSpawnEntryScript(location->entities[0]->spawn_entry_id); + break; + case 1: + script = world.GetSpawnLocationScript(location->entities[0]->spawn_location_id); + break; + case 2: + script = world.GetSpawnScript(location->entities[0]->spawn_id); + break; + } + if (script && lua_interface->GetSpawnScript(script) != 0) { + spawn->SetSpawnScript(string(script)); + break; + } + } + + zone->CallSpawnScript(spawn, SPAWN_SCRIPT_SPAWN); + lua_interface->SetSpawnValue(state, spawn); + return 1; + } + else { + LogWrite(ZONE__ERROR, 0, "Zone", "Error adding spawn to zone"); + safe_delete(spawn); + } + } + + return 0; +} + +int EQ2Emu_lua_CastEntityCommand(lua_State* state) { + if (!lua_interface) + return 0; + + Spawn* caster = lua_interface->GetSpawn(state); + Spawn* target = lua_interface->GetSpawn(state, 2); + int32 id = lua_interface->GetInt32Value(state, 3); + string command = lua_interface->GetStringValue(state, 4); + + if (!caster) { + lua_interface->LogError("LUA CastEntityCommand command error: caster is not valid"); + return 0; + } + + if (!target) { + lua_interface->LogError("LUA CastEntityCommand command error: target is not valid"); + return 0; + } + + if (!caster->IsPlayer()) { + lua_interface->LogError("LUA CastEntityCommand command error: caster is not a player"); + return 0; + } + + EntityCommand* entity_command = caster->GetZone()->GetEntityCommand(id, command); + if (!entity_command) { + lua_interface->LogError("LUA CastEntityCommand command error: unable to get a valid EntityCommand with the given ID (%u) and name (%s)", id, command.c_str()); + return 0; + } + + Client* client = caster->GetZone()->GetClientBySpawn(caster); + if (!client) { + lua_interface->LogError("LUA CastEntityCommand command error: unable to get a valid client for the given caster"); + return 0; + } + + client->GetCurrentZone()->ProcessEntityCommand(entity_command, (Player*)caster, target); + + return 0; +} + +int EQ2Emu_lua_SetLuaBrain(lua_State* state) { + if (!lua_interface) + return 0; + + Spawn* spawn = lua_interface->GetSpawn(state); + + if (!spawn) { + lua_interface->LogError("LUA SetLuaBrain command error: spawn is not valid"); + return 0; + } + + if (!spawn->IsNPC()) { + lua_interface->LogError("LUA SetLuaBrain command error: spawn is not a npc"); + return 0; + } + + ((NPC*)spawn)->SetBrain(new LuaBrain((NPC*)spawn)); + + return 0; +} + +int EQ2Emu_lua_SetBrainTick(lua_State* state) { + if (!lua_interface) + return 0; + + Spawn* spawn = lua_interface->GetSpawn(state); + int16 tick = lua_interface->GetInt16Value(state, 2); + + if (!spawn) { + lua_interface->LogError("LUA SetBrainTick command error: spawn is not valid"); + return 0; + } + + if (!spawn->IsNPC()) { + lua_interface->LogError("LUA SetBrainTick command error: spawn is not a valid npc"); + return 0; + } + + if (tick < 20) { + lua_interface->LogError("LUA SetBrainTick command error: tick can not be set below 20 milliseconds"); + return 0; + } + + ((NPC*)spawn)->Brain()->SetTick(tick); + + return 0; +} + +int EQ2Emu_lua_SetFollowTarget(lua_State* state) { + if (!lua_interface) + return 0; + + Spawn* spawn = lua_interface->GetSpawn(state); + Spawn* target = lua_interface->GetSpawn(state, 2); + + if (!spawn) { + lua_interface->LogError("LUA SetFollowTarget command error: spawn is not valid"); + return 0; + } + + // Target can be null, setting follow target to 0 clears it and will cancel follow, so no need to check it + + spawn->SetFollowTarget(target); + return 0; +} + +int EQ2Emu_lua_GetFollowTarget(lua_State* state) { + if (!lua_interface) + return 0; + + Spawn* spawn = lua_interface->GetSpawn(state); + if (!spawn) { + lua_interface->LogError("LUA GetFollowTarget command error: spawn is not valid"); + return 0; + } + Spawn* target = spawn->GetFollowTarget(); + if (target) { + lua_interface->SetSpawnValue(state, target); + return 1; + } + + return 0; +} + +int EQ2Emu_lua_ToggleFollow(lua_State* state) { + if (!lua_interface) + return 0; + + Spawn* spawn = lua_interface->GetSpawn(state); + if (!spawn) { + lua_interface->LogError("LUA ToggleFollow command error: spawn is not valid"); + return 0; + } + + if (spawn->following) + spawn->following = false; + else + spawn->following = true; + + return 0; +} + +int EQ2Emu_lua_IsFollowing(lua_State* state) { + if (!lua_interface) + return 0; + + Spawn* spawn = lua_interface->GetSpawn(state); + if (!spawn) { + lua_interface->LogError("LUA IsFollowing command error: spawn is not valid"); + return 0; + } + + lua_interface->SetBooleanValue(state, spawn->following); + return 1; +} + +int EQ2Emu_lua_SetTempVariable(lua_State* state) { + // As this is unique among the rest of our lua functions as the 3rd param can be of multiple types + // I will attempt to explain how this function works for future refrence + + // Fist lets make sure lua_interface is valid, if not return out + if (!lua_interface) + return 0; + + // Next we grab the first 2 params same as we usually would + Spawn* spawn = lua_interface->GetSpawn(state); + string var = lua_interface->GetStringValue(state, 2); + + // DataType will let us know the value type so we can handle it correctly, we set these ourself so the values I used are made up + // 1 = Spawn + // 2 = Zone + // 3 = Item + // 4 = Quest + // 5 = String + // 6 = nil (null) + int8 dataType = 0; + + // Define pointers for each potential type + Spawn* spawnVal = 0; + ZoneServer* zone = 0; + Item* item = 0; + Quest* quest = 0; + string val; + + // Finally we get to grabbing the third param, we will first check to see if it is light user data + // which is custom data types, in this case it can be Spawn, Zone, Item, or Quest. Conversation and + // options window are also light user data be we do not handle those. + // We check with lua_islightuserdata(lua_State*, index) + if (lua_islightuserdata(state, 3)) { + // It is light user data so we will grab the param with lua_touserdata(lua_State*, index) + // and convert it to LUAUserData* + LUAUserData* data = (LUAUserData*)lua_touserdata(state, 3); + // Check to make sure the data we got is valid, if not give an error + if(!data || !data->IsCorrectlyInitialized()){ + lua_interface->LogError("LUA SetTempVariable command error while processing %s", lua_tostring(state, -1)); + } + // Check if data is a Spawn, if so set our Spawn pointer and the dataType variable + else if(data->IsSpawn()) { + spawnVal = data->spawn; + dataType = 1; + } + // Check if data is a Zone, if so set our Zone pointer and the dataType variable + else if (data->IsZone()) { + zone = data->zone; + dataType = 2; + } + // Check if data is a Item, if so set our Item pointer and the dataType variable + else if (data->IsItem()) { + item = data->item; + dataType = 3; + } + // Check if data is a Ques, if so set our Quest pointer and the dataType variable + else if (data->IsQuest()) { + quest = data->quest; + dataType = 4; + } + } + // Wasn't light user data, check if it is nil(null) + else if (lua_isnil(state, 3)) { + // It is nil (null) set the dataType variable, no need to set a pointer in this case + dataType = 6; + } + // Wasn't light user data or nil (null), must be a string + else { + // Set the string and dataType variable + val = lua_interface->GetStringValue(state, 3); + dataType = 5; + } + + // We now have all the params, lets check to make sure they are valid + if (!spawn) { + lua_interface->LogError("LUA SetTempVariable command error: spawn is not valid"); + return 0; + } + + if (var.length() == 0) { + lua_interface->LogError("LUA SetTempVariable command error: var must be set"); + return 0; + } + + if (dataType == 0) { + lua_interface->LogError("LUA SetTempVariable command error: unknown data type"); + return 0; + } + + // All params are valid, lets set the spawns temp variable, this is where dataType variable comes in. + // AddTempVariable has overloads for all the types of data we support, we need to make sure the third + // param gets sent to the correct list so we check the value of dataType to know where it should go. + switch (dataType) { + case 1: + // 1 = Spawn + spawn->AddTempVariable(var, spawnVal); + break; + case 2: + // 2 = Zone + spawn->AddTempVariable(var, zone); + break; + case 3: + // 3 = Item + spawn->AddTempVariable(var, item); + break; + case 4: + // 4 = Quest + spawn->AddTempVariable(var, quest); + break; + case 5: + // 5 = String + spawn->AddTempVariable(var, val); + break; + case 6: + // 6 = nil (null) so the variable is no longer set, lets remove it from the spawn + spawn->DeleteTempVariable(var); + break; + } + + // And we are done so return out + return 0; +} + +int EQ2Emu_lua_GetTempVariable(lua_State* state) { + if (!lua_interface) + return 0; + + Spawn* spawn = lua_interface->GetSpawn(state); + string var = lua_interface->GetStringValue(state, 2); + + if (!spawn) { + lua_interface->LogError("LUA GetTempVariable command error: spawn is not valid"); + return 0; + } + + if (var.length() == 0) { + lua_interface->LogError("LUA GetTempVariable command error: var must be set"); + return 0; + } + + // This will tell us the type of data this variable contains, uses the same values as the previous function + int8 type = spawn->GetTempVariableType(var); + + Spawn* spawn2 = 0; + ZoneServer* zone = 0; + Item* item = 0; + Quest* quest = 0; + + // Set the lua function return value based on the type of data the variable contains + switch(type) { + case 1: + spawn2 = spawn->GetTempVariableSpawn(var); + if (!spawn2) + return 0; + lua_interface->SetSpawnValue(state, spawn2); + break; + case 2: + zone = spawn->GetTempVariableZone(var); + if (!zone) + return 0; + lua_interface->SetZoneValue(state, zone); + break; + case 3: + item = spawn->GetTempVariableItem(var); + if (!item) + return 0; + lua_interface->SetItemValue(state, item); + break; + case 4: + quest = spawn->GetTempVariableQuest(var); + if (!quest) + return 0; + lua_interface->SetQuestValue(state, quest); + break; + case 5: + lua_interface->SetStringValue(state, spawn->GetTempVariable(var).c_str()); + break; + default: + // Not a valid type then the variable was not set so return out + return 0; + } + + // Return value was set so return out + return 1; +} + +int EQ2Emu_lua_GiveQuestItem(lua_State* state) +{ + if (!lua_interface) + return 0; + + Quest* quest = lua_interface->GetQuest(state); + Spawn* spawn = lua_interface->GetSpawn(state, 2); + string description = lua_interface->GetStringValue(state, 3); + int32 item_id = lua_interface->GetInt32Value(state, 4); + + if (!quest) { + lua_interface->LogError("LUA GiveQuestItem command error: quest is not valid"); + lua_interface->SetBooleanValue(state, false); + return 1; + } + + if (!spawn) { + lua_interface->LogError("LUA GiveQuestItem command error: spawn is not valid"); + lua_interface->SetBooleanValue(state, false); + return 1; + } + + if (!spawn->IsPlayer()) { + lua_interface->LogError("LUA GiveQuestItem command error: spawn must be a player"); + lua_interface->SetBooleanValue(state, false); + return 1; + } + + if (item_id == 0) { + lua_interface->LogError("LUA GiveQuestItem command error: item_id is not valid"); + lua_interface->SetBooleanValue(state, false); + return 1; + } + + Client* client = spawn->GetZone()->GetClientBySpawn(spawn); + if (!client) { + lua_interface->LogError("LUA GiveQuestItem command error: unable to get a valid client from the given spawn"); + lua_interface->SetBooleanValue(state, false); + return 1; + } + + Item* item = master_item_list.GetItem(item_id); + if (!item) { + lua_interface->LogError("LUA GiveQuestItem command error: unable to get an item from the given id (%u)", item_id); + lua_interface->SetBooleanValue(state, false); + return 1; + } + + PacketStruct* packet = configReader.getStruct("WS_QuestComplete", client->GetVersion()); + if (packet) { + packet->setDataByName("title", "Quest Reward!"); + packet->setDataByName("name", quest->GetName()); + packet->setDataByName("description", description.c_str()); + packet->setDataByName("level", quest->GetLevel()); + packet->setArrayLengthByName("num_rewards", 1); + packet->setArrayDataByName("reward_id", item->details.item_id); + + if (client->GetVersion() < 860) + packet->setItemArrayDataByName("item", item, (Player*)spawn, 0, 0, -1); + else if (client->GetVersion() < 1193) + packet->setItemArrayDataByName("item", item, (Player*)spawn); + else + packet->setItemArrayDataByName("item", item, (Player*)spawn, 0, 0, 2); + + client->QueuePacket(packet->serialize()); + safe_delete(packet); + + lua_interface->SetBooleanValue(state, client->AddItem(item_id, 1)); + client->Message(CHANNEL_COLOR_YELLOW, "You receive \\aITEM %u 0:%s\\/a.", item->details.item_id, item->name.c_str()); + return 1; + } + + lua_interface->SetBooleanValue(state, false); + return 1; +} + +int EQ2Emu_lua_SetQuestRepeatable(lua_State* state) { + if (!lua_interface) + return 0; + + Quest* quest = lua_interface->GetQuest(state); + if (!quest) { + lua_interface->LogError("LUA SetQuestRepeatable command error: quest is not valid"); + return 0; + } + + quest->SetRepeatable(true); + return 0; +} + +int EQ2Emu_lua_GetArchetypeName(lua_State* state) { + + if (!lua_interface) + return 0; + + Spawn* spawn = lua_interface->GetSpawn(state); + if (!spawn) { + lua_interface->LogError("LUA GetArchetypeName command error: spawn is not valid"); + return 0; + } + int8 base_class = classes.GetBaseClass(spawn->GetAdventureClass()); + string ret = classes.GetClassNameCase(base_class); + if(ret.length() > 0){ + lua_interface->SetStringValue(state, ret.c_str()); + return 1; + } + + return 0; +} + +int EQ2Emu_lua_AddWard(lua_State* state) { + if (!lua_interface) + return 0; + + int32 damage = lua_interface->GetInt32Value(state); + bool keepWard = (lua_interface->GetInt8Value(state, 2) == 1); + int8 wardType = lua_interface->GetInt8Value(state, 3); + int8 damageTypes = lua_interface->GetInt8Value(state, 4); + + LuaSpell* spell = lua_interface->GetCurrentSpell(state); + + bool ward_was_added = false; + + ZoneServer* zone = spell->caster->GetZone(); + spell->MSpellTargets.readlock(__FUNCTION__, __LINE__); + for (int32 i = 0; i < spell->targets.size(); i++) { + Spawn* target = zone->GetSpawnByID(spell->targets.at(i)); + if (!target) + continue; + if (target->IsEntity()) { + // If the ward is already active remove it + if (((Entity*)target)->GetWard(spell->spell->GetSpellID())) + ((Entity*)target)->RemoveWard(spell->spell->GetSpellID()); + + // Create new ward info + WardInfo* ward = new WardInfo; + ward->Spell = spell; + ward->BaseDamage = damage; + ward->DamageLeft = damage; + ward->keepWard = keepWard; + ward->WardType = wardType; + if (wardType == WARD_TYPE_MAGICAL) + ward->DamageType = damageTypes; + + // Add the ward to the entity + ((Entity*)target)->AddWard(spell->spell->GetSpellID(), ward); + ward_was_added = true; + } + } + spell->MSpellTargets.releasereadlock(__FUNCTION__, __LINE__); + + if (ward_was_added && spell->caster->IsPlayer()){ + spell->had_dmg_remaining = true; + ClientPacketFunctions::SendMaintainedExamineUpdate(spell->caster->GetZone()->GetClientBySpawn(spell->caster), spell->slot_pos, damage, 1); + } + + return 0; +} + +int EQ2Emu_lua_AddToWard(lua_State* state) { + if (!lua_interface) + return 0; + + int32 amount = lua_interface->GetInt32Value(state); + LuaSpell* spell = lua_interface->GetCurrentSpell(state); + WardInfo* ward = 0; + + ZoneServer* zone = spell->caster->GetZone(); + spell->MSpellTargets.readlock(__FUNCTION__, __LINE__); + if (zone->GetSpawnByID(spell->targets.at(0))->IsEntity()) { + Entity* target = (Entity*)zone->GetSpawnByID(spell->targets.at(0)); + ward = target->GetWard(spell->spell->GetSpellID()); + if (ward) { + ward->DamageLeft += amount; + if (ward->DamageLeft > ward->BaseDamage) + ward->DamageLeft = ward->BaseDamage; + + for (int32 i = 0; i < spell->targets.size(); i++) { + if (Spawn* spawn = zone->GetSpawnByID(spell->targets.at(i))) + zone->SendHealPacket(ward->Spell->caster, spawn, HEAL_PACKET_TYPE_REGEN_ABSORB, amount, ward->Spell->spell->GetName()); + } + } + } + spell->MSpellTargets.releasereadlock(__FUNCTION__, __LINE__); + + if (ward && spell->caster->IsPlayer()) + ClientPacketFunctions::SendMaintainedExamineUpdate(spell->caster->GetZone()->GetClientBySpawn(spell->caster), spell->slot_pos, ward->DamageLeft, 1); + + return 0; +} + +int EQ2Emu_lua_GetWardAmountLeft(lua_State* state) { + if (!lua_interface) + return 0; + + LuaSpell* spell = lua_interface->GetCurrentSpell(state); + if (!spell) { + lua_interface->LogError("LUA GetWardAmountLeft command error: this command can only be used in a spell script"); + return 0; + } + + if (spell->caster->GetZone()->GetSpawnByID(spell->targets.at(0))->IsEntity()) { + Entity* target = (Entity*)spell->caster->GetZone()->GetSpawnByID(spell->targets.at(0)); + WardInfo* ward = target->GetWard(spell->spell->GetSpellID()); + if (ward) { + lua_interface->SetInt32Value(state, ward->DamageLeft); + return 1; + } + } + return 0; +} + +int EQ2Emu_lua_RemoveWard(lua_State* state) { + if (!lua_interface) + return 0; + + LuaSpell* spell = lua_interface->GetCurrentSpell(state); + + ZoneServer* zone = spell->caster->GetZone(); + Spawn * target = 0; + spell->MSpellTargets.readlock(__FUNCTION__, __LINE__); + for (int32 i = 0; i < spell->targets.size(); i++) { + target = zone->GetSpawnByID(spell->targets.at(i)); + if (target && target->IsEntity()) { + ((Entity*)target)->RemoveWard(spell->spell->GetSpellID()); + } + } + spell->MSpellTargets.releasereadlock(__FUNCTION__, __LINE__); + + return 0; +} + +int EQ2Emu_lua_Interrupt(lua_State* state) +{ + + if (!lua_interface) + return 0; + + Spawn* caster = lua_interface->GetSpawn(state); // Second param in lua_interface->get functions defaults to 1 + Spawn* target = lua_interface->GetSpawn(state, 2); + LuaSpell* spell = lua_interface->GetCurrentSpell(state); + + if (!caster) + { + lua_interface->LogError("LUA Interrupt command error: caster is not a valid spawn"); + return 0; + } + + if(!target) + { + lua_interface->LogError("LUA Interrupt command error: target is not a valid spawn"); + return 0; + } + + if (!spell) { + lua_interface->LogError("LUA Interrupt command error: spell is not a valid spawn"); + return 0; + } + + if (!target->IsEntity() && !spell) + { + lua_interface->LogError("LUA Interrupt command error: Target is not an entity"); + return 0; + } + + if (!target && spell){ + spell->MSpellTargets.readlock(__FUNCTION__, __LINE__); + for (int8 i = 0; i < spell->targets.size(); i++){ + target = caster->GetZone()->GetSpawnByID(spell->targets.at(i)); + if (!target || !target->IsEntity()) + continue; + + ((Entity*)target)->GetZone()->GetSpellProcess()->Interrupted((Entity*)target, caster, SPELL_ERROR_INTERRUPTED); + } + spell->MSpellTargets.releasereadlock(__FUNCTION__, __LINE__); + } + else + caster->GetZone()->GetSpellProcess()->Interrupted((Entity*)target, caster, SPELL_ERROR_INTERRUPTED); + + return 0; +} + +int EQ2Emu_lua_Stealth(lua_State* state){ + if(!lua_interface) + return 0; + + int8 type = lua_interface->GetInt8Value(state); + Spawn* spawn = lua_interface->GetSpawn(state, 2); + LuaSpell* spell = lua_interface->GetCurrentSpell(state); + + if (!spell){ + lua_interface->LogError("LUA Stealth command error: must be used from spell script"); + return 0; + } + + ZoneServer* zone = spell->caster->GetZone(); + + if (spawn){ + if (spawn->IsEntity()){ + if (type == 1){ + ((Entity*)spawn)->AddStealthSpell(spell); + if (!(spell->effect_bitmask & EFFECT_FLAG_STEALTH)) + spell->effect_bitmask += EFFECT_FLAG_STEALTH; + } + else if (type == 2){ + ((Entity*)spawn)->AddInvisSpell(spell); + if (!(spell->effect_bitmask & EFFECT_FLAG_INVIS)) + spell->effect_bitmask += EFFECT_FLAG_INVIS; + } + return 0; + } + else{ + lua_interface->LogError("LUA Stealth command error: target override is not Entity"); + return 0; + } + } + else{ + spell->MSpellTargets.readlock(__FUNCTION__, __LINE__); + for (int32 i = 0; i < spell->targets.size(); i++){ + spawn = zone->GetSpawnByID(spell->targets.at(i)); + if (!spawn || !spawn->IsEntity()) + continue; + + if (type == 1){ + ((Entity*)spawn)->AddStealthSpell(spell); + if (!(spell->effect_bitmask & EFFECT_FLAG_STEALTH)) + spell->effect_bitmask += EFFECT_FLAG_STEALTH; + } + else if (type == 2){ + ((Entity*)spawn)->AddInvisSpell(spell); + if (!(spell->effect_bitmask & EFFECT_FLAG_INVIS)) + spell->effect_bitmask += EFFECT_FLAG_INVIS; + } + else{ + lua_interface->LogError("LUA Stealth command error: invalid stealth type given"); + break; + } + } + spell->MSpellTargets.releasereadlock(__FUNCTION__, __LINE__); + } + return 0; +} + +int EQ2Emu_lua_IsStealthed(lua_State* state){ + if(!lua_interface) + return 0; + Spawn* spawn = lua_interface->GetSpawn(state); + if (!spawn){ + lua_interface->LogError("LUA IsStealthed command error: spawn is not valid"); + return 0;} + + if(spawn->IsEntity()){ + lua_interface->SetBooleanValue(state, ((Entity*)spawn)->IsStealthed()); + return 1; + } + else + lua_interface->LogError("LUA IsStealthed command error: spawn is not entity"); + return 0; +} + +int EQ2Emu_lua_IsInvis(lua_State* state){ + if(!lua_interface) + return 0; + Spawn* spawn = lua_interface->GetSpawn(state); + if (!spawn){ + lua_interface->LogError("LUA IsInvis command error: spawn is not valid"); + return 0;} + + if(spawn->IsEntity()){ + lua_interface->SetBooleanValue(state, ((Entity*)spawn)->IsInvis()); + return 1; + } + else + lua_interface->LogError("LUA IsInvis command error: spawn is not entity"); + return 0; +} + +int EQ2Emu_lua_HasItemEquipped(lua_State* state){ + if(!lua_interface) + return 0; + Spawn* player = lua_interface->GetSpawn(state); + int32 item_id = lua_interface->GetInt32Value(state, 2); + if (!player->IsPlayer()){ + lua_interface->LogError("LUA HasItemEquipped command error: spawn is not player"); + return 0; + } + lua_interface->SetBooleanValue(state, ((Player*)player)->GetEquipmentList()->HasItem(item_id)); + return 1; +} + +int EQ2Emu_lua_GetEquippedItemBySlot(lua_State* state){ + if(!lua_interface) + return 0; + Spawn* player = lua_interface->GetSpawn(state); + int8 slot = lua_interface->GetInt8Value(state, 2); + + if(!player){ + lua_interface->LogError("LUA GetEquippedItemBySlot command error: spawn is not valid"); + return 0; + } + if(!player->IsPlayer()){ + lua_interface->LogError("LUA GetEquippedItemBySlot command error: spawn is not player"); + return 0; + } + Item* item = ((Player*)player)->GetEquipmentList()->GetItem(slot); + if(!item){ + lua_interface->LogError("LUA GetEquippedItemBySlot command error: item was not found in slot"); + return 0; + } + lua_interface->SetItemValue(state, item); + return 1; +} + +int EQ2Emu_lua_GetEquippedItemByID(lua_State* state){ + if(!lua_interface) + return 0; + Spawn* player = lua_interface->GetSpawn(state); + int32 id = lua_interface->GetInt32Value(state, 2); + + if(!player){ + lua_interface->LogError("LUA GetEquippedItemByID command error: spawn is not valid"); + return 0; + } + if(!player->IsPlayer()){ + lua_interface->LogError("LUA GetEquippedItemByID command error: spawn is not player"); + return 0; + } + Item* item = ((Player*)player)->GetEquipmentList()->GetItemFromItemID(id); + if(!item){ + lua_interface->LogError("LUA GetEquippedItemByID command error: equipped item with used id not found"); + return 0; + } + lua_interface->SetItemValue(state, item); + return 1; +} + +int EQ2Emu_lua_GetItemByID(lua_State* state){ + if(!lua_interface) + return 0; + Spawn* player = lua_interface->GetSpawn(state); + int32 id = lua_interface->GetInt32Value(state, 2); + int8 count = lua_interface->GetInt8Value(state, 3); + bool include_bank = lua_interface->GetInt8Value(state, 4); + + if(!player){ + lua_interface->LogError("LUA GetItemByID command error: spawn is not valid"); + return 0; + } + if(!player->IsPlayer()){ + lua_interface->LogError("LUA GetItemByID command error: spawn is not player"); + return 0; + } + if(!count) + count = 1; + Item* item = ((Player*)player)->GetPlayerItemList()->GetItemFromID(id, count, include_bank); + if(!item){ + lua_interface->LogError("LUA GetItemByID command error: item with used id not found"); + return 0; + } + lua_interface->SetItemValue(state, item); + return 1; +} + +int EQ2Emu_lua_PlayAnimation(lua_State* state){ + if(!lua_interface) + return 0; + Spawn* spawn = lua_interface->GetSpawn(state); + int32 anim = lua_interface->GetInt32Value(state, 2); + Spawn* spawn2 = lua_interface->GetSpawn(state, 3); + int8 type = lua_interface->GetInt8Value(state, 4); + + if(!spawn){ + lua_interface->LogError("LUA PlayAnimation command error: spawn is not valid"); + return 0; + } + + if(spawn2){ + if (spawn2->IsPlayer()){ + if(type != 1 && type != 2) + spawn->GetZone()->PlayAnimation(spawn, anim, spawn2); + else + spawn->GetZone()->PlayAnimation(spawn, anim, spawn2, type); + return 0; + } + else{ + lua_interface->LogError("LUA PlayAnimation command error: second spawn not a player"); + return 0; + } + } + else + spawn->GetZone()->PlayAnimation(spawn, anim); + return 0; +} + +int EQ2Emu_lua_IsPet(lua_State* state){ + if(!lua_interface) + return 0; + Spawn* spawn = lua_interface->GetSpawn(state); + if(!spawn){ + lua_interface->LogError("LUA IsPet command error: spawn is not valid"); + return 0; + } + lua_interface->SetBooleanValue(state, spawn->IsPet()); + return 1; +} + +int EQ2Emu_lua_GetOwner(lua_State* state){ + if(!lua_interface) + return 0; + Spawn* spawn = lua_interface->GetSpawn(state); + if(!spawn){ + lua_interface->LogError("LUA GetOwner command error: spawn is not valid"); + return 0; + } + if(!spawn->IsNPC()){ + lua_interface->LogError("LUA GetOwner command error: spawn is not a NPC"); + return 0; + } + if(((NPC*)spawn)->GetOwner()){ + lua_interface->SetSpawnValue(state, ((NPC*)spawn)->GetOwner()); + return 1; + } + return 0; +} + +int EQ2Emu_lua_SetTarget(lua_State* state){ + if(!lua_interface) + return 0; + Spawn* spawn = lua_interface->GetSpawn(state); + Spawn* target = lua_interface->GetSpawn(state, 2); + if(!spawn){ + lua_interface->LogError("LUA SetTarget command error: spawn is not valid"); + return 0; + } + if(!spawn){ + lua_interface->LogError("LUA SetTarget command error: target is not valid"); + return 0; + } + spawn->SetTarget(target); + return 0; +} + +int EQ2Emu_lua_SetInCombat(lua_State* state){ + if(!lua_interface) + return 0; + Spawn* spawn = lua_interface->GetSpawn(state); + bool val = lua_interface->GetBooleanValue(state, 2); + if(!spawn){ + lua_interface->LogError("LUA SetInCombat command error: spawn is not valid"); + return 0; + } + if(!spawn->IsEntity()){ + lua_interface->LogError("LUA SetInCombat command error: spawn is not an entity"); + return 0; + } + ((Entity*)spawn)->InCombat(val); + + if (val) { + spawn->ClearRunningLocations(); + spawn->CalculateRunningLocation(true); + } + return 0; +} + +int EQ2Emu_lua_CompareSpawns(lua_State* state){ + if(!lua_interface) + return 0; + Spawn* spawn1 = lua_interface->GetSpawn(state); + Spawn* spawn2 = lua_interface->GetSpawn(state, 2); + if(!spawn1){ + lua_interface->LogError("LUA CompareSpawns command error: first spawn is not valid"); + return 0; + } + if(!spawn2){ + lua_interface->LogError("LUA CompareSpawns command error: second spawn is not valid"); + return 0; + } + lua_interface->SetBooleanValue(state, (spawn1 == spawn2)); + return 1; +} + +int EQ2Emu_lua_Runback(lua_State* state){ + if(!lua_interface) + return 0; + Spawn* spawn = lua_interface->GetSpawn(state); + if(!spawn){ + lua_interface->LogError("LUA Runback command error: spawn is not valid"); + return 0; + } + if(!spawn->IsNPC()){ + lua_interface->LogError("LUA Runback command error: spawn is not an NPC"); + return 0; + } + ((NPC*)spawn)->Runback(); + return 0; +} + +int EQ2Emu_lua_GetRunbackDistance(lua_State* state){ + if(!lua_interface) + return 0; + Spawn* spawn = lua_interface->GetSpawn(state); + if(!spawn){ + lua_interface->LogError("LUA GetRunbackDistance command error: spawn is not valid"); + return 0; + } + if(!spawn->IsNPC()){ + lua_interface->LogError("LUA GetRunbackDistance command error: spawn is not an NPC"); + return 0; + } + lua_interface->SetFloatValue(state, ((NPC*)spawn)->GetRunbackDistance()); + return 1; +} + +int EQ2Emu_lua_IsCasting(lua_State* state){ + if(!lua_interface) + return 0; + Spawn* spawn = lua_interface->GetSpawn(state); + if(!spawn){ + lua_interface->LogError("LUA IsCasting command error: spawn is not valid"); + return 0; + } + if(!spawn->IsEntity()){ + lua_interface->LogError("LUA IsCasting command error: spawn is not an entity"); + return 0; + } + lua_interface->SetBooleanValue(state, ((Entity*)spawn)->IsCasting()); + return 1; +} + +int EQ2Emu_lua_IsMezzed(lua_State* state){ + if(!lua_interface) + return 0; + Spawn* spawn = lua_interface->GetSpawn(state); + if(!spawn){ + lua_interface->LogError("LUA IsMezzed command error: spawn is not valid"); + return 0; + } + if(!spawn->IsEntity()){ + lua_interface->LogError("LUA IsMezzed command error: spawn is not an entity"); + return 0; + } + lua_interface->SetBooleanValue(state, ((Entity*)spawn)->IsMezzed()); + return 1; +} + +int EQ2Emu_lua_IsStunned(lua_State* state){ + if(!lua_interface) + return 0; + Spawn* spawn = lua_interface->GetSpawn(state); + if(!spawn){ + lua_interface->LogError("LUA IsStunned command error: spawn is not valid"); + return 0; + } + if(!spawn->IsEntity()){ + lua_interface->LogError("LUA IsStunned command error: spawn is not an entity"); + return 0; + } + lua_interface->SetBooleanValue(state, ((Entity*)spawn)->IsStunned()); + return 1; +} + +int EQ2Emu_lua_IsMezzedOrStunned(lua_State* state){ + if(!lua_interface) + return 0; + Spawn* spawn = lua_interface->GetSpawn(state); + if(!spawn){ + lua_interface->LogError("LUA IsMezzedOrStunned command error: spawn is not valid"); + return 0; + } + if(!spawn->IsEntity()){ + lua_interface->LogError("LUA IsMezzedOrStunned command error: spawn is not an entity"); + return 0; + } + lua_interface->SetBooleanValue(state, ((Entity*)spawn)->IsMezzedOrStunned()); + return 1; +} + +int EQ2Emu_lua_ProcessSpell(lua_State* state){ + if(!lua_interface) + return 0; + Spawn* spawn = lua_interface->GetSpawn(state); + Spawn* target = lua_interface->GetSpawn(state, 2); + float distance = lua_interface->GetFloatValue(state, 3); + if(!spawn){ + lua_interface->LogError("LUA ProcessSpell command error: spawn is not valid"); + return 0; + } + if(!target){ + lua_interface->LogError("LUA ProcessSpell command error: spawn is not an entity"); + return 0; + } + if(!spawn->IsNPC()){ + lua_interface->LogError("LUA ProcessSpell command error: spawn is not an NPC"); + return 0; + } + if(!target->IsEntity()){ + lua_interface->LogError("LUA ProcessSpell command error: target is not an entity"); + return 0; + } + lua_interface->SetBooleanValue(state, ((NPC*)spawn)->Brain()->ProcessSpell(((Entity*)target), distance)); + return 1; +} + +int EQ2Emu_lua_ProcessMelee(lua_State* state){ + if(!lua_interface) + return 0; + Spawn* spawn = lua_interface->GetSpawn(state); + Spawn* target = lua_interface->GetSpawn(state, 2); + float distance = lua_interface->GetFloatValue(state, 3); + if(!spawn){ + lua_interface->LogError("LUA ProcessMelee command error: spawn is not valid"); + return 0; + } + if(!target){ + lua_interface->LogError("LUA ProcessMelee command error: target is not valid"); + return 0; + } + if(!spawn->IsNPC()){ + lua_interface->LogError("LUA ProcessMelee command error: spawn is not an NPC"); + return 0; + } + if(!target->IsEntity()){ + lua_interface->LogError("LUA ProcessMelee command error: target is not an entity"); + return 0; + } + ((NPC*)spawn)->Brain()->ProcessMelee(((Entity*)target), distance); + return 0; +} + +int EQ2Emu_lua_HasRecovered(lua_State* state){ + if(!lua_interface) + return 0; + Spawn* spawn = lua_interface->GetSpawn(state); + if(!spawn){ + lua_interface->LogError("LUA HasRecovered command error: spawn is not valid"); + return 0; + } + if(!spawn->IsNPC()){ + lua_interface->LogError("LUA HasRecovered command error: spawn is not an NPC"); + return 0; + } + lua_interface->SetBooleanValue(state, ((NPC*)spawn)->Brain()->HasRecovered()); + return 1; +} + +int EQ2Emu_lua_GetEncounterSize(lua_State* state){ + if(!lua_interface) + return 0; + Spawn* spawn = lua_interface->GetSpawn(state); + if(!spawn){ + lua_interface->LogError("LUA GetEncounterSize command error: spawn is not valid"); + return 0; + } + if(!spawn->IsNPC()){ + lua_interface->LogError("LUA GetEncounterSize command error: spawn is not an NPC"); + return 0; + } + lua_interface->SetInt32Value(state, ((NPC*)spawn)->Brain()->GetEncounterSize()); + return 1; +} + +int EQ2Emu_lua_GetMostHated(lua_State* state){ + if(!lua_interface) + return 0; + Spawn* spawn = lua_interface->GetSpawn(state); + if(!spawn){ + lua_interface->LogError("LUA GetMostHated command error: spawn is not valid"); + return 0; + } + if(!spawn->IsNPC()){ + lua_interface->LogError("LUA GetMostHated command error: spawn is not an NPC"); + return 0; + } + + Entity* hated = ((NPC*)spawn)->Brain()->GetMostHated(); + if (hated) { + lua_interface->SetSpawnValue(state, hated); + return 1; + } + + return 0; +} + +int EQ2Emu_lua_ClearHate(lua_State* state){ + if(!lua_interface) + return 0; + Spawn* spawn = lua_interface->GetSpawn(state); + Spawn* hated = lua_interface->GetSpawn(state, 2); + if(!spawn){ + lua_interface->LogError("LUA ClearHate command error: spawn is not valid"); + return 0; + } + if(!spawn->IsNPC()){ + lua_interface->LogError("LUA ClearHate command error: spawn is not NPC"); + return 0; + } + if(!hated){ + ((NPC*)spawn)->Brain()->ClearHate(); + return 0; + } + else + { + if(!hated->IsEntity()){ + lua_interface->LogError("LUA ClearHate command error: second param is not entity"); + return 0; + } + ((NPC*)spawn)->Brain()->ClearHate(((Entity*)hated)); + return 0; + } + return 0; +} + +int EQ2Emu_lua_ClearEncounter(lua_State* state){ + if(!lua_interface) + return 0; + Spawn* spawn = lua_interface->GetSpawn(state); + if(!spawn){ + lua_interface->LogError("LUA ClearEncounter command error: spawn is not valid"); + return 0; + } + if(!spawn->IsNPC()){ + lua_interface->LogError("LUA ClearEncounter command error: spawn is not an NPC"); + return 0; + } + ((NPC*)spawn)->Brain()->ClearEncounter(); + return 0; +} + +int EQ2Emu_lua_GetEncounter(lua_State* state) { + if (!lua_interface) + return 0; + + Spawn* spawn = lua_interface->GetSpawn(state); + if (!spawn) { + lua_interface->LogError("LUA GetEncounter command error: Spawn is not valid"); + return 0; + } + + if (!spawn->IsNPC()) { + lua_interface->LogError("LUA GetEncounter command error: spawn is not a NPC"); + return 0; + } + + // Temp list to store hate list + vector* encounterList = ((NPC*)spawn)->Brain()->GetEncounter(); + + if (encounterList->size() == 0) { + safe_delete(encounterList); + return 0; + } + + lua_createtable(state, encounterList->size(), 0); + int newTable = lua_gettop(state); + for(int32 i = 0; i < encounterList->size(); i++) { + Spawn* temp = spawn->GetZone()->GetSpawnByID(encounterList->at(i)); + if (temp) + lua_interface->SetSpawnValue(state, temp); + lua_rawseti(state, newTable, i + 1); + } + + safe_delete(encounterList); + return 1; +} + +int EQ2Emu_lua_GetHateList(lua_State* state) { + if (!lua_interface) + return 0; + + Spawn* spawn = lua_interface->GetSpawn(state); + if (!spawn) { + lua_interface->LogError("LUA GetHateList command error: spawn is not valid"); + return 0; + } + + if (!spawn->IsNPC()) { + lua_interface->LogError("LUA GetHateList command error: spawn is not a NPC"); + return 0; + } + + // Temp list to store hate list + vector* hateList = ((NPC*)spawn)->Brain()->GetHateList(); + + if (hateList->size() == 0) { + safe_delete(hateList); + return 0; + } + + lua_createtable(state, hateList->size(), 0); + int newTable = lua_gettop(state); + for(int32 i = 0; i < hateList->size(); i++) { + lua_interface->SetSpawnValue(state, hateList->at(i)); + lua_rawseti(state, newTable, i + 1); + } + + safe_delete(hateList); + return 1; +} + +int EQ2Emu_lua_HasGroup(lua_State* state) { + if (!lua_interface) + return 0; + + Spawn* spawn = lua_interface->GetSpawn(state); + if (!spawn) { + lua_interface->LogError("LUA HasGroup command error: spawn is not valid"); + return 0; + } + + if (spawn->IsPlayer()) { + if (((Player*)spawn)->GetGroupMemberInfo() && world.GetGroupManager()->GetGroupSize(((Player*)spawn)->GetGroupMemberInfo()->group_id) > 1) + lua_interface->SetBooleanValue(state, true); + else + lua_interface->SetBooleanValue(state, false); + + return 1; + } + else { + lua_interface->SetBooleanValue(state, spawn->HasSpawnGroup()); + return 1; + } +} + +int EQ2Emu_lua_SetCompleteFlag(lua_State* state) { + if (!lua_interface) + return 0; + Quest* quest = lua_interface->GetQuest(state); + + if (!quest) { + lua_interface->LogError("LUA SetCompleteFlag command error: quest is not valid"); + return 0; + } + + quest->SetCompletedFlag(true); + return 0; +} + +int EQ2Emu_lua_HasSpellEffect(lua_State* state) { + if (!lua_interface) + return 0; + + Spawn* spawn = lua_interface->GetSpawn(state); + int32 spellID = lua_interface->GetInt32Value(state, 2); + int8 tier = lua_interface->GetInt8Value(state, 3); + + if (!spawn) { + lua_interface->LogError("LUA HasSpellEffect command error: spawn is not valid"); + return 0; + } + + if (!spawn->IsEntity()) { + lua_interface->LogError("LUA HasSpellEffect command error: spawn is not an entity"); + return 0; + } + + if (spellID == 0) { + lua_interface->LogError("LUA HasSpellEffect command error: spell id is not valid"); + return 0; + } + + SpellEffects* effect = ((Entity*)spawn)->GetSpellEffect(spellID); + if (effect) { + if (tier > 0) { + // If a tier was passed chec to see if it is the same as the effect + if (tier == effect->tier) + lua_interface->SetBooleanValue(state, true); + else + lua_interface->SetBooleanValue(state, false); + + return 1; + } + else { + // Have an effect but no tier was passed so return true + lua_interface->SetBooleanValue(state, true); + } + + return 1; + } + + // no effect so return false + lua_interface->SetBooleanValue(state, false); + return 1; +} + +int EQ2Emu_lua_AddSpawnIDAccess(lua_State* state){ + if (!lua_interface) + return 0; + Spawn* spawn = lua_interface->GetSpawn(state); + int32 id = lua_interface->GetInt32Value(state, 2); + ZoneServer* zone = lua_interface->GetZone(state, 3); + Spawn* spawn2 = 0; + vector list; + + if(!spawn){ + lua_interface->LogError("LUA AddSpawnIDAccess command error: spawn is not valid"); + return 0; + } + //If zone not provided, use spawn's zone + if(!zone) + zone = spawn->GetZone(); + + list = zone->GetSpawnsByID(id); + if(list.size() == 0){ + lua_interface->LogError("LUA AddSpawnIDAccess command error: GetSpawnsByID returned no spawns"); + return 0; + } + + vector::iterator itr = list.begin(); + for (int8 i=0; i < list.size(); i++){ + spawn2 = itr[i]; + if(spawn2) + spawn2->AddAllowAccessSpawn(spawn); + } + + return 0; +} + +int EQ2Emu_lua_RemoveSpawnIDAccess(lua_State* state){ + if (!lua_interface) + return 0; + Spawn* spawn = lua_interface->GetSpawn(state); + int32 id = lua_interface->GetInt32Value(state, 2); + ZoneServer* zone = lua_interface->GetZone(state, 3); + Spawn* spawn2 = 0; + + if(!spawn){ + lua_interface->LogError("LUA RemoveSpawnIDAccess command error: spawn is not valid"); + return 0; + } + //If zone not provided, use spawn's zone + if(!zone) + zone = spawn->GetZone(); + + vector list = zone->GetSpawnsByID(id); + vector::iterator itr = list.begin(); + if(list.size() == 0){ + lua_interface->LogError("LUA RemoveSpawnIDAccess command error: GetSpawnsByID returned no spawns"); + return 0; + } + for (int8 i=0; i < list.size(); i++){ + spawn2 = itr[i]; + if(spawn2) + spawn2->RemoveSpawnAccess(spawn); + } + + return 0; +} + +int EQ2Emu_lua_SetQuestYellow(lua_State* state){ + if (!lua_interface) + return 0; + Quest* quest = lua_interface->GetQuest(state); + if (!quest){ + lua_interface->LogError("LUA SetQuestYellow command error: quest is not valid"); + return 0; + } + quest->SetYellowName(true); + return 0; +} + +int EQ2Emu_lua_CanReceiveQuest(lua_State* state){ + if (!lua_interface) + return 0; + Spawn* spawn = lua_interface->GetSpawn(state); + int32 quest_id = lua_interface->GetInt32Value(state, 2); + if (!spawn){ + lua_interface->LogError("LUA CanReceieveQuest command error: spawn is not valid"); + return 0; + } + if (!spawn->IsPlayer()){ + lua_interface->LogError("LUA CanReceieveQuest command error: spawn is not player"); + return 0; + } + lua_interface->SetBooleanValue(state, ((Player*)spawn)->CanReceiveQuest(quest_id)); + return 1; +} + +int EQ2Emu_lua_SetSuccessTimer(lua_State* state) { + if (!lua_interface) + return 0; + + Spawn* spawn = lua_interface->GetSpawn(state); + + if (!spawn) { + lua_interface->LogError("LUA SetSuccessTimer command error: spawn is not valid"); + return 0; + } + if (!spawn->IsPlayer()) { + lua_interface->LogError("LUA SetSuccessTimer command error: spawn is not a player"); + return 0; + } + + ZoneServer* zone = spawn->GetZone(); + if (!zone) { + lua_interface->LogError("LUA SetSuccessTimer command error: unable to get a valid zone for the given spawn"); + return 0; + } + + Instance_Type iType = zone->GetInstanceType(); + if (iType == SOLO_LOCKOUT_INSTANCE || + iType == GROUP_LOCKOUT_INSTANCE || + iType == RAID_LOCKOUT_INSTANCE || + iType == SOLO_PERSIST_INSTANCE || + iType == GROUP_PERSIST_INSTANCE || + iType == RAID_PERSIST_INSTANCE) { + InstanceData* data = ((Player*)spawn)->GetCharacterInstances()->FindInstanceByZoneID(spawn->GetZone()->GetZoneID()); + if (data) { + // Check to see if the timer has already been set, if it has return out. + if (Timer::GetUnixTimeStamp() <= data->last_success_timestamp + data->success_lockout_time) + return 0; + + + database.UpdateCharacterInstance(((Player*)spawn)->GetCharacterID(), string(spawn->GetZone()->GetZoneName()), spawn->GetZone()->GetInstanceID(), 1, Timer::GetUnixTimeStamp()); + data->last_success_timestamp = Timer::GetUnixTimeStamp(); + Client* client = spawn->GetZone()->GetClientBySpawn(spawn); + if (client) { + string time_msg = ""; + int32 time = data->success_lockout_time; + int16 hour; + int8 min; + int8 sec; + hour = time/3600; + time = time%3600; + min = time/60; + time = time%60; + sec = time; + + if (hour > 0) { + char temp[10]; + sprintf(temp, " %i", hour); + time_msg.append(temp); + time_msg.append(" hour"); + time_msg.append((hour > 1) ? "s" : ""); + } + if (min > 0) { + char temp[5]; + sprintf(temp, " %i", min); + time_msg.append(temp); + time_msg.append(" minute"); + time_msg.append((min > 1) ? "s" : ""); + } + // Only add seconds if minutes and hours are 0 + if (hour == 0 && min == 0 && sec > 0) { + char temp[5]; + sprintf(temp, " %i", sec); + time_msg.append(temp); + time_msg.append(" second"); + time_msg.append((sec > 1) ? "s" : ""); + } + + client->Message(CHANNEL_COLOR_YELLOW, "The success zone reuse timer for %s has been set. You can return in%s.", data->zone_name.c_str(), time_msg.c_str()); + } + } + else + lua_interface->LogError("LUA SetSuccessTimer command error: unable to get instance data for instance %u for player %s", spawn->GetZone()->GetInstanceID(), spawn->GetName()); + } + else + lua_interface->LogError("LUA SetSuccessTimer command error: current zone for given spawn is not a lockout or persistent instance"); + + + return 0; +} + +int EQ2Emu_lua_SetFailureTimer(lua_State* state) { + if (!lua_interface) + return 0; + + Spawn* spawn = lua_interface->GetSpawn(state); + + if (!spawn) { + lua_interface->LogError("LUA SetFailureTimer command error: spawn is not valid"); + return 0; + } + if (!spawn->IsPlayer()) { + lua_interface->LogError("LUA SetFailureTimer command error: spawn is not a player"); + return 0; + } + + ZoneServer* zone = spawn->GetZone(); + if (!zone) { + lua_interface->LogError("LUA SetFailureTimer command error: unable to get a valid zone for the given spawn"); + return 0; + } + + Instance_Type iType = zone->GetInstanceType(); + if (iType == SOLO_LOCKOUT_INSTANCE || + iType == GROUP_LOCKOUT_INSTANCE || + iType == RAID_LOCKOUT_INSTANCE || + iType == SOLO_PERSIST_INSTANCE || + iType == GROUP_PERSIST_INSTANCE || + iType == RAID_PERSIST_INSTANCE) { + InstanceData* data = ((Player*)spawn)->GetCharacterInstances()->FindInstanceByZoneID(spawn->GetZone()->GetZoneID()); + if (data) { + // Check to see if the timer has already been set, if it has return out. + if (Timer::GetUnixTimeStamp() <= data->last_failure_timestamp + data->failure_lockout_time) + return 0; + + database.UpdateCharacterInstance(((Player*)spawn)->GetCharacterID(), string(spawn->GetZone()->GetZoneName()), spawn->GetZone()->GetInstanceID(), 2, Timer::GetUnixTimeStamp()); + data->last_failure_timestamp = Timer::GetUnixTimeStamp(); + Client* client = spawn->GetZone()->GetClientBySpawn(spawn); + if (client) { + string time_msg = ""; + int32 time = data->failure_lockout_time; + int16 hour; + int8 min; + int8 sec; + hour = time / 3600; + time = time % 3600; + min = time / 60; + time = time % 60; + sec = time; + + if (hour > 0) { + char temp[10]; + sprintf(temp, " %i", hour); + time_msg.append(temp); + time_msg.append(" hour"); + time_msg.append((hour > 1) ? "s" : ""); + } + if (min > 0) { + char temp[5]; + sprintf(temp, " %i", min); + time_msg.append(temp); + time_msg.append(" minute"); + time_msg.append((min > 1) ? "s" : ""); + } + // Only add seconds if minutes and hours are 0 + if (hour == 0 && min == 0 && sec > 0) { + char temp[5]; + sprintf(temp, " %i", sec); + time_msg.append(temp); + time_msg.append(" second"); + time_msg.append((sec > 1) ? "s" : ""); + } + + client->Message(CHANNEL_COLOR_YELLOW, "The failure zone reuse timer for %s has been set. You can return in%s", data->zone_name.c_str(), time_msg.c_str()); + } + } + else + lua_interface->LogError("LUA SetFailureTimer command error: unable to get instance data for instance %u for player %s", spawn->GetZone()->GetInstanceID(), spawn->GetName()); + } + else + lua_interface->LogError("LUA SetFailureTimer command error: current zone for given spawn is not a lockout or persistent instance"); + + return 0; +} + +int EQ2Emu_lua_IsGroundSpawn(lua_State* state) { + if (!lua_interface) + return 0; + + Spawn* spawn = lua_interface->GetSpawn(state); + if (!spawn) { + lua_interface->LogError("LUA IsGroundSpawn command error: not a valid spawn"); + return 0; + } + + lua_interface->SetBooleanValue(state, spawn->IsGroundSpawn()); + return 1; +} + +int EQ2Emu_lua_CanHarvest(lua_State* state) { + if (!lua_interface) + return 0; + + Spawn* player = lua_interface->GetSpawn(state); + Spawn* ground = lua_interface->GetSpawn(state, 2); + + if (!player) { + lua_interface->LogError("LUA CanHarvest command error: not a valid spawn"); + return 0; + } + + if (!player->IsPlayer()) { + lua_interface->LogError("LUA CanHarvest command error: spawn is not a player"); + return 0; + } + + if (!ground) { + lua_interface->LogError("LUA CanHarvest command error: not a valid spawn"); + return 0; + } + + if (!ground->IsGroundSpawn()) { + lua_interface->LogError("LUA CanHarvest command error: spawn is not a ground spawn"); + return 0; + } + + vector* groundspawn_entries = player->GetZone()->GetGroundSpawnEntries(((GroundSpawn*)ground)->GetGroundSpawnEntryID()); + + if(!groundspawn_entries) { + lua_interface->LogError("LUA CanHarvest command error: No groundspawn entries assigned to groundspawn id: %u", ((GroundSpawn*)ground)->GetGroundSpawnEntryID()); + return 0; + } + + Skill* skill = 0; + string collection_skill = string(((GroundSpawn*)ground)->GetCollectionSkill()); + if (collection_skill == "Collecting") + skill = ((Player*)player)->GetSkillByName("Gathering"); + else + skill = ((Player*)player)->GetSkillByName(collection_skill.c_str()); + + if(!skill) { + lua_interface->LogError("LUA CanHarvest command error: Player '%s' lacks the skill: '%s'", player->GetName(), collection_skill.c_str()); + return 0; + } + + + + vector::iterator itr; + GroundSpawnEntry* entry = 0; + bool can_harvest = false; + sint32 min_skill = -1; + + // first, iterate through groundspawn_entries, discard tables player cannot use + for(itr = groundspawn_entries->begin(); itr != groundspawn_entries->end(); itr++) + { + entry = *itr; + + if (min_skill == -1 || entry->min_skill_level < min_skill) + min_skill = entry->min_skill_level; + // if player lacks skill, skip table + if( entry->min_skill_level > skill->current_val ) + continue; + // if bonus, but player lacks level, skip table + if(entry->bonus_table && (player->GetLevel() < entry->min_adventure_level)) + continue; + + can_harvest = true; + break; + } + + lua_interface->SetBooleanValue(state, can_harvest); + + // If false, send the message to the client + if (!can_harvest) { + Client* client = player->GetZone()->GetClientBySpawn(player); + if (client) { + string msg = "You do not have enough skill to "; + if(collection_skill == "Gathering" || collection_skill == "Collecting") + msg.append("gather"); + else if(collection_skill == "Mining") + msg.append("mine"); + else if(collection_skill == "Trapping") + msg.append("trap"); + else if(collection_skill == "Foresting") + msg.append("forest"); + else if(collection_skill == "Fishing") + msg.append("catch"); + + msg.append(" the %s. It requires %i %s skill, and your skill is %i."); + client->Message(CHANNEL_HARVESTING_WARNINGS, msg.c_str(), ground->GetName(), min_skill, skill->name.data.c_str(), skill->current_val); + // You do not have enough skill to catch the band of fish. It requires 20 Fishing skill, and your skill is 12. + } + } + return 1; +} + +int EQ2Emu_lua_HasRecipeBook(lua_State* state){ + if (!lua_interface) + return 0; + + Spawn* player = lua_interface->GetSpawn(state); + int32 recipe_id = lua_interface->GetInt32Value(state, 2); + + if(!player){ + lua_interface->LogError("LUA HasRecipeBook command error, Spawn is not valid"); + return 0; + } + if(!player->IsPlayer()){ + lua_interface->LogError("LUA HasRecipeBook command error, Spawn is not a player"); + return 0; + } + + bool ret = ((Player*)player)->HasRecipeBook(recipe_id); + lua_interface->SetBooleanValue(state, ret); + return 1; +} + +int EQ2Emu_lua_SummonDumbFirePet(lua_State* state) { + // Check to see if we have a valid lua_interface + if(!lua_interface) + return 0; + + // Get the spawn that is getting the pet + Spawn* spawn = lua_interface->GetSpawn(state); + Spawn* target = lua_interface->GetSpawn(state, 2); + // Get the DB ID of the pet + int32 pet_id = lua_interface->GetInt32Value(state, 3); + + float x = lua_interface->GetFloatValue(state, 4); + float y = lua_interface->GetFloatValue(state, 5); + float z = lua_interface->GetFloatValue(state, 6); + // Get the spell that this command was called from + LuaSpell* luaspell = lua_interface->GetCurrentSpell(state); + + // Check to make sure the spawn pointer is valid + if (!spawn) { + lua_interface->LogError("LUA SummonDumbFirePet command error: Spawn is not valid"); + return 0; + } + + // Check to make sure the spawn is an entity + if (!spawn->IsEntity()) { + lua_interface->LogError("LUA SummonDumbFirePet command error: Spawn is not an entity"); + return 0; + } + + if (!target) { + lua_interface->LogError("LUA SummonDumbFirePet command error: target is not valid"); + return 0; + } + + if (!target->IsEntity()) { + lua_interface->LogError("LUA SummonDumbFirePet command error: target is not an entity"); + return 0; + } + + // Check to see if the DB ID for the pet is set + if (pet_id == 0) { + lua_interface->LogError("LUA SummonDumbFirePet command error: pet_id can not be set to 0"); + return 0; + } + + // Check to see if the pointer to the spell is valid + if (!luaspell) { + lua_interface->LogError("LUA SummonDumbFirePet command error: valid spell not found, SummonPet can only be used in spell scripts"); + return 0; + } + + // Get a pointer to a spawn with the given DB ID and check if the pointer is valid + Spawn* pet = spawn->GetZone()->GetSpawn(pet_id); + if(!pet) { + lua_interface->LogError("LUA SummonDumbFirePet command error: Could not find spawn with id of %u.", pet_id); + return 0; + } + + // Check to make sure the pet is an npc + if (!pet->IsNPC()) { + lua_interface->LogError("LUA SummonDumbFirePet command error: id (%u) did not point to a npc", pet_id); + return 0; + } + + if (x == 0) + x = spawn->GetX(); + + if (y == 0) + y = spawn->GetY(); + + if (z == 0) + z = spawn->GetZ(); + + // Spawn the pet at the same location as the owner + pet->SetX(x); + pet->SetY(y); + pet->SetZ(z); + pet->SetLocation(spawn->GetLocation()); + pet->SetHeading(spawn->GetHeading()); + spawn->GetZone()->AddSpawn(pet); + + /* + const char* spawn_script = world.GetSpawnScript(pet_id); + if(spawn_script && lua_interface->GetSpawnScript(spawn_script) != 0){ + spawn->SetSpawnScript(string(spawn_script)); + zone->CallSpawnScript(spawn, SPAWN_SCRIPT_SPAWN); + }*/ + + // Get a random pet name + string random_pet_name; + int16 rand_index = MakeRandomInt(0, spawn->GetZone()->pet_names.size() - 1); + random_pet_name = spawn->GetZone()->pet_names.at(rand_index); + LogWrite(PET__DEBUG, 0, "Pets", "Randomize Pet Name: '%s' (rand: %i)", random_pet_name.c_str(), rand_index); + + // Set the pets name + pet->SetName(random_pet_name.c_str()); + // Set the level of the pet to the owners level + pet->SetLevel(spawn->GetLevel()); + // Set the faction of the pet to the same faction as the owner + pet->SetFactionID(spawn->GetFactionID()); + // Set the spawn as a pet + pet->SetPet(true); + // Give a pointer of the owner to the pet + ((NPC*)pet)->SetOwner((Entity*)spawn); + + // Set the pet type + ((NPC*)pet)->SetPetType(PET_TYPE_DUMBFIRE); + // Set the spell id used to create this pet + ((NPC*)pet)->SetPetSpellID(luaspell->spell->GetSpellData()->id); + // Set the spell tier used to create this pet + ((NPC*)pet)->SetPetSpellTier(luaspell->spell->GetSpellData()->tier); + // Set the pets spawn type to 6 + pet->SetSpawnType(6); + // Set the pets brain + ((NPC*)pet)->SetBrain(new DumbFirePetBrain((NPC*)pet, (Entity*)target, luaspell->spell->GetSpellDuration() * 100)); + // Check to see if the pet has a subtitle + if (strlen(pet->GetSubTitle()) > 0) { + // Add the players name to the front of the sub title + string pet_subtitle; + pet_subtitle.append(spawn->GetName()).append("'s ").append(pet->GetSubTitle()); + LogWrite(PET__DEBUG, 0, "Pets", "Pet Subtitle: '%s'", pet_subtitle.c_str()); + // Set the pets subtitle to the new one + pet->SetSubTitle(pet_subtitle.c_str()); + } + + // Set the pet as the return value for this function + lua_interface->SetSpawnValue(state, pet); + return 1; +} + +int EQ2Emu_lua_SpawnMove(lua_State* state){ + if(!lua_interface) + return 0; + Spawn* spawn = lua_interface->GetSpawn(state); + Spawn* player = lua_interface->GetSpawn(state, 2); + float max_distance = lua_interface->GetFloatValue(state, 3); + string type = lua_interface->GetStringValue(state, 4); + + if(!spawn || (spawn && spawn->IsPlayer())){ + lua_interface->LogError("LUA SpawnMove command error: first param spawn is not valid or is player"); + return 0; + } + + if(!player || (player && !player->IsPlayer())){ + lua_interface->LogError("LUA SpawnMove command error: second param is not player"); + return 0; + } + + Client* client = 0; + if(player->GetZone()) + client = player->GetZone()->GetClientBySpawn(player); + + if(!client){ + lua_interface->LogError("LUA SpawnMove command error: could not find client"); + return 0; + } + + //Set max_distance to default if not set or not proper value + if(max_distance <= 0) + max_distance = 500; + PacketStruct* packet = configReader.getStruct("WS_MoveObjectMode", client->GetVersion()); + if(packet){ + float unknown2_3 = 0; + int8 placement_mode = 0; + if(type == "wall"){ + placement_mode = 2; + unknown2_3 = 150; + } + else if(type == "ceiling") + placement_mode = 1; + packet->setDataByName("placement_mode", placement_mode); + packet->setDataByName("spawn_id", ((Player*)player)->GetIDWithPlayerSpawn(spawn)); + packet->setDataByName("model_type", spawn->GetModelType()); + packet->setDataByName("unknown", 1); //size + packet->setDataByName("unknown2", 1); //size 2 + packet->setDataByName("unknown2", .5, 1); //size 3 + packet->setDataByName("unknown2", 3, 2); + packet->setDataByName("unknown2", unknown2_3, 3); + packet->setDataByName("max_distance", max_distance); + packet->setDataByName("CoEunknown", 0xFFFFFFFF); + client->QueuePacket(packet->serialize()); + safe_delete(packet); + } + return 0; +} + +int EQ2Emu_lua_GetItemType(lua_State* state){ + if(!lua_interface) + return 0; + Item* item = lua_interface->GetItem(state); + + if(!item){ + lua_interface->LogError("LUA GetItemType command error: item pointer is not valid"); + return 0; + } + + lua_interface->SetInt32Value(state, item->generic_info.item_type); + return 1; +} + +int EQ2Emu_lua_AddTransportSpawn(lua_State* state){ + if(!lua_interface) + return 0; + + Spawn* spawn = lua_interface->GetSpawn(state); + + if(!spawn){ + lua_interface->LogError("LUA AddTransportSpawn command error: spawn is not valid"); + return 0; + } + + if(spawn->GetZone()) + spawn->GetZone()->AddTransportSpawn(spawn); + + return 0; +} + +int EQ2Emu_lua_GetSkillValue(lua_State* state) { + if (!lua_interface) + return 0; + + Skill* skill = lua_interface->GetSkill(state); + if (!skill) { + lua_interface->LogError("LUA GetSkillValue command error: skill is not valid"); + return 0; + } + + lua_interface->SetInt32Value(state, skill->current_val); + return 1; +} + +int EQ2Emu_lua_GetSkillMaxValue(lua_State* state) { + if (!lua_interface) + return 0; + + Skill* skill = lua_interface->GetSkill(state); + if (!skill) { + lua_interface->LogError("LUA GetSkillMaxValue command error: skill is not valid"); + return 0; + } + + lua_interface->SetInt32Value(state, skill->max_val); + return 1; +} + +int EQ2Emu_lua_GetSkillName(lua_State* state) { + if (!lua_interface) + return 0; + + Skill* skill = lua_interface->GetSkill(state); + if (!skill) { + lua_interface->LogError("LUA GetSkillName command error: skill is not valid"); + return 0; + } + + lua_interface->SetStringValue(state, skill->name.data.c_str()); + return 1; +} + +int EQ2Emu_lua_SetSkillMaxValue(lua_State* state) { + if (!lua_interface) + return 0; + + Skill* skill = lua_interface->GetSkill(state); + int16 value = lua_interface->GetInt16Value(state, 2); + if (!skill) { + lua_interface->LogError("LUA SetSkillMaxValue command error: skill is not valid"); + return 0; + } + + skill->max_val = value; + if (skill->max_val < skill->current_val) + skill->current_val = skill->max_val; + + return 0; +} + +int EQ2Emu_lua_SetSkillValue(lua_State* state) { + if (!lua_interface) + return 0; + + Skill* skill = lua_interface->GetSkill(state); + int16 value = lua_interface->GetInt16Value(state, 2); + if (!skill) { + lua_interface->LogError("LUA SetSkillValue command error: skill is not valid"); + return 0; + } + + if (value > skill->max_val) + skill->current_val = skill->max_val; + else + skill->current_val = value; + + return 0; +} + +int EQ2Emu_lua_GetSkill(lua_State* state) { + if (!lua_interface) + return 0; + + Spawn* spawn = lua_interface->GetSpawn(state); + string name = lua_interface->GetStringValue(state, 2); + + if (!spawn) { + lua_interface->LogError("LUA GetSkill command error: spawn is not valid"); + return 0; + } + + if (!spawn->IsEntity()) { + lua_interface->LogError("LUA GetSkill command error: spawn is not a valid entity"); + return 0; + } + + Skill* skill = ((Entity*)spawn)->GetSkillByName(name.c_str()); + if (skill) { + lua_interface->SetSkillValue(state, skill); + return 1; + } + + return 0; +} + +int EQ2Emu_lua_AddProc(lua_State* state) { + if (!lua_interface) + return 0; + + Spawn* spawn = lua_interface->GetSpawn(state); + int8 type = lua_interface->GetInt8Value(state, 2); + float chance = lua_interface->GetFloatValue(state, 3); + Item* item = lua_interface->GetItem(state, 4); + bool use_all_spelltargets = (lua_interface->GetInt8Value(state, 5) == 1); + LuaSpell* spell = 0; + + if (!spawn && (!spell || !use_all_spelltargets)) { + lua_interface->LogError("LUA AddProc command error: spawn is not valid"); + return 0; + } + + if ((!spell || use_all_spelltargets) && spawn && !spawn->IsEntity()) { + lua_interface->LogError("LUA AddProc command error: spawn is not a valid entity"); + return 0; + } + + if (!item) + spell = lua_interface->GetCurrentSpell(state); + + if (!item && !spell) { + lua_interface->LogError("LUA AddProc command error: can only use with an item provided or inside a spell script"); + return 0; + } + + if (spell && use_all_spelltargets){ + Spawn* target; + spell->MSpellTargets.readlock(__FUNCTION__, __LINE__); + for (int8 i = 0; i < spell->targets.size(); i++){ + target = spell->caster->GetZone()->GetSpawnByID(spell->targets.at(i)); + if (!target || !target->IsEntity()) + continue; + + ((Entity*)target)->AddProc(type, chance, item, spell); + } + spell->MSpellTargets.releasereadlock(__FUNCTION__, __LINE__); + } + else + ((Entity*)spawn)->AddProc(type, chance, item, spell); + + return 0; +} + +int EQ2Emu_lua_RemoveProc(lua_State* state) { + if (!lua_interface) + return 0; + + Spawn* spawn = lua_interface->GetSpawn(state); + Item* item = lua_interface->GetItem(state, 2); + LuaSpell* spell = 0; + + if (!spawn) { + lua_interface->LogError("LUA RemoveProc command error: spawn is not valid"); + return 0; + } + + if (!spawn->IsEntity()) { + lua_interface->LogError("LUA RemoveProc command error: spawn is not a valid entity"); + return 0; + } + + if (!item) + spell = lua_interface->GetCurrentSpell(state); + + if (!item && !spell) { + lua_interface->LogError("LUA RemoveProc command error: can only use with an item provided or inside a spell script"); + return 0; + } + + if (spell){ + Spawn* target; + spell->MSpellTargets.readlock(__FUNCTION__, __LINE__); + for (int8 i = 0; i < spell->targets.size(); i++){ + target = spell->caster->GetZone()->GetSpawnByID(spell->targets.at(i)); + if (!target || !target->IsEntity()) + continue; + + ((Entity*)target)->RemoveProc(item, spell); + } + spell->MSpellTargets.releasereadlock(__FUNCTION__, __LINE__); + spell->caster->RemoveProc(item, spell); + } + else + ((Entity*)spawn)->RemoveProc(item, spell); + + return 0; +} + +int EQ2Emu_lua_Knockback(lua_State* state) { + if (!lua_interface) + return 0; + + Spawn* target_spawn = lua_interface->GetSpawn(state); + Spawn* spawn = lua_interface->GetSpawn(state, 2); + int32 duration = lua_interface->GetInt32Value(state, 3); + float vertical = lua_interface->GetFloatValue(state, 4); + float horizontal = lua_interface->GetFloatValue(state, 5); + bool use_heading = lua_interface->GetInt8Value(state, 6) == 1 ? true : false; + LuaSpell* spell = lua_interface->GetCurrentSpell(state); + + if (!target_spawn) { + lua_interface->LogError("LUA Knockback command error: target_spawn is not valid"); + return 0; + } + + if (!spawn) { + lua_interface->LogError("LUA Knockback command error: spawn is not valid"); + return 0; + } + + if (spawn->IsPlayer() && (vertical != 0 || horizontal != 0)) { + Client* client = spawn->GetZone()->GetClientBySpawn(spawn); + PacketStruct* packet = configReader.getStruct("WS_PlayerKnockback", client->GetVersion()); + if (packet) { + packet->setDataByName("target_x", target_spawn->GetX()); + packet->setDataByName("target_y", target_spawn->GetY()); + packet->setDataByName("target_z", target_spawn->GetZ()); + packet->setDataByName("vertical_movement", vertical); + packet->setDataByName("horizontal_movement", horizontal); + if (use_heading) + packet->setDataByName("use_player_heading", 1); + + client->QueuePacket(packet->serialize()); + } + safe_delete(packet); + } + + return 0; +} + +int EQ2Emu_lua_IsEpic(lua_State* state) { + if (!lua_interface) + return 0; + + Spawn* spawn = lua_interface->GetSpawn(state); + if (!spawn) { + lua_interface->LogError("LUA IsEpic command error: spawn is not valid"); + return 0; + } + + lua_interface->SetBooleanValue(state, (spawn->GetHeroic() >= 2)); + return 1; +} + +int EQ2Emu_lua_ProcDamage(lua_State* state) { + if (!lua_interface) + return 0; + + Spawn* caster = lua_interface->GetSpawn(state); + Spawn* target = lua_interface->GetSpawn(state, 2); + string name = lua_interface->GetStringValue(state, 3); + int8 dmg_type = lua_interface->GetInt8Value(state, 4); + int32 low_damage = lua_interface->GetInt32Value(state, 5); + int32 high_damage = lua_interface->GetInt32Value(state, 6); + string success_msg = lua_interface->GetStringValue(state, 7); + string effect_msg = lua_interface->GetStringValue(state, 8); + + if (!caster) { + lua_interface->LogError("LUA ProcDamage command error: caster is not a valid spawn"); + return 0; + } + + if (!caster->IsEntity()) { + lua_interface->LogError("LUA ProcDamage command error: caster is not an entity"); + return 0; + } + + if (!target) { + lua_interface->LogError("LUA ProcDamage command error: target is not a valid spawn"); + return 0; + } + + if (!target->IsEntity()) { + lua_interface->LogError("LUA ProcDamage command error: target is not an entity"); + return 0; + } + + if (name.length() == 0) { + lua_interface->LogError("LUA ProcDamage command error: name is empty"); + return 0; + } + + ((Entity*)caster)->ProcAttack(target, dmg_type, low_damage, high_damage, name, success_msg, effect_msg); + return 0; +} + +int EQ2Emu_lua_GetSkillIDByName(lua_State* state) { + if(!lua_interface) + return 0; + + string name = lua_interface->GetStringValue(state); + + if(name.length() == 0){ + lua_interface->LogError("LUA GetSkillIDByName command error: name param was not set"); + return 0; + } + + Skill* skill = master_skill_list.GetSkillByName(name.c_str()); + if(!skill){ + lua_interface->LogError("LUA GetSkillIDByName command error: skill with name of %s not found", name.c_str()); + return 0; + } + + lua_interface->SetInt32Value(state, skill->skill_id); + return 1; +} + +int EQ2Emu_lua_IsHeroic(lua_State* state) { + if(!lua_interface) + return 0; + + Spawn* spawn = lua_interface->GetSpawn(state); + + if(!spawn){ + lua_interface->LogError("LUA IsHeroic command error: spawn is not valid"); + return 0; + } + + lua_interface->SetBooleanValue(state, spawn->GetHeroic() == 1); + return 1; +} + +int EQ2Emu_lua_LastSpellAttackHit(lua_State* state) { + if(!lua_interface) + return 0; + + LuaSpell* luaspell = lua_interface->GetCurrentSpell(state); + + if(!luaspell){ + lua_interface->LogError("LUA LastSpellAttackHit command error: this must be called from a spellscript"); + return 0; + } + + lua_interface->SetBooleanValue(state, luaspell->last_spellattack_hit); + return 1; +} +int EQ2Emu_lua_IsBehind(lua_State* state) { + if (!lua_interface) + return 0; + + Spawn* spawn = lua_interface->GetSpawn(state); + Spawn* target = lua_interface->GetSpawn(state, 2); + + if (!spawn) { + lua_interface->LogError("LUA IsBehind command error: spawn is not valid"); + return 0; + } + + if (!spawn->IsEntity()) { + lua_interface->LogError("LUA IsBehind command error: spawn is not an entity"); + return 0; + } + + if (!target) { + lua_interface->LogError("LUA IsBehind command error: target is not valid"); + return 0; + } + + lua_interface->SetBooleanValue(state, ((Entity*)spawn)->BehindTarget(target)); + return 1; +} + +int EQ2Emu_lua_IsFlanking(lua_State* state) { + if (!lua_interface) + return 0; + + Spawn* spawn = lua_interface->GetSpawn(state); + Spawn* target = lua_interface->GetSpawn(state, 2); + + if (!spawn) { + lua_interface->LogError("LUA IsFlanking command error: spawn is not valid"); + return 0; + } + + if (!spawn->IsEntity()) { + lua_interface->LogError("LUA IsFlanking command error: spawn is not an entity"); + return 0; + } + + if (!target) { + lua_interface->LogError("LUA IsFlanking command error: target is not valid"); + return 0; + } + + lua_interface->SetBooleanValue(state, ((Entity*)spawn)->FlankingTarget(target)); + return 1; +} + +int EQ2Emu_lua_GetItemCount(lua_State* state) { + if(!lua_interface) + return 0; + + Item* item = lua_interface->GetItem(state); + + if(!item){ + lua_interface->LogError("LUA GetItemCount command error: item not valid"); + return 0; + } + + lua_interface->SetInt32Value(state, item->details.count); + return 1; +} + +int EQ2Emu_lua_SetItemCount(lua_State* state) { + if(!lua_interface) + return 0; + + Item* item = lua_interface->GetItem(state); + Spawn* owner = lua_interface->GetSpawn(state, 2); + int16 new_count = lua_interface->GetInt32Value(state, 3); + + if(!item){ + lua_interface->LogError("LUA SetItemCount command error: item not valid"); + return 0; + } + + if(!owner){ + lua_interface->LogError("LUA SetItemCount command error: spawn not valid"); + return 0; + } + + if(!owner->IsPlayer()){ + lua_interface->LogError("LUA SetItemCount command error: spawn is not a player"); + return 0; + } + + if(item->stack_count < new_count){ + lua_interface->LogError("LUA SetItemCount command error: new item count cannot be more than max stack count"); + return 0; + } + + if(new_count > 0){ + item->details.count = new_count; + item->save_needed = true; + } + else if(((Player*)owner)->GetEquipmentList()->GetItem(item->details.slot_id) == item) + ((Player*)owner)->GetEquipmentList()->RemoveItem(item->details.slot_id, true); + else if(((Player*)owner)->GetPlayerItemList()->GetItemFromUniqueID(item->details.unique_id) == item) + ((Player*)owner)->GetPlayerItemList()->RemoveItem(item, true); + else + { + lua_interface->LogError("LUA SetItemCount command error: could not remove item from player"); + return 0; + } + + Client* client = owner->GetZone()->GetClientBySpawn(owner); + + if(!client) + return 0; + + ((Player*)owner)->SendInventoryUpdate(client->GetVersion()); + + EQ2Packet* app = ((Player*)owner)->GetEquipmentList()->serialize(client->GetVersion()); + if(app) + client->QueuePacket(app); + + return 0; +} + +int EQ2Emu_lua_AddSpellTimer(lua_State* state) { + if(!lua_interface) + return 0; + + int32 time = lua_interface->GetInt32Value(state); + string function = lua_interface->GetStringValue(state, 2); + Spawn* caster = lua_interface->GetSpawn(state, 3); + Spawn* target = lua_interface->GetSpawn(state, 4); + + LuaSpell* spell = lua_interface->GetCurrentSpell(state); + + if (time == 0) { + lua_interface->LogError("LUA AddSpellTimer command error: time must be set"); + return 0; + } + + if (function.length() == 0) { + lua_interface->LogError("LUA AddSpellTimer command error: function name must be set"); + return 0; + } + + if (!spell) { + lua_interface->LogError("LUA AddSpellTimer command error: spell not found, AddSpellTimer must be used in a spell script"); + return 0; + } + + SpellScriptTimer* timer = new SpellScriptTimer; + + /* //Google tells me memsetting a string is bad, manually setting just in case - Foof + #ifdef WIN32 + ZeroMemory(timer, sizeof(SpellScriptTimer)); + #else + bzero(timer, sizeof(SpellScriptTimer)); + #endif*/ + + timer->caster = 0; + timer->deleteWhenDone = false; + timer->target = 0; + + timer->time = Timer::GetCurrentTime2() + time; + timer->customFunction = function; + timer->spell = spell; + if (caster) + timer->caster = caster->GetID(); + if (target) + timer->target = target->GetID(); + + spell->caster->GetZone()->GetSpellProcess()->AddSpellScriptTimer(timer); + return 0; +} + +int EQ2Emu_lua_Resurrect(lua_State* state) { + if(!lua_interface) + return 0; + + float hp_perc = lua_interface->GetFloatValue(state); + float power_perc = lua_interface->GetFloatValue(state, 2); + bool send_window = lua_interface->GetInt32Value(state, 3) == 1; + Spawn* target = lua_interface->GetSpawn(state, 4); + string heal_name = lua_interface->GetStringValue(state, 5); + int8 crit_mod = lua_interface->GetInt32Value(state, 6); + bool no_calcs = lua_interface->GetInt32Value(state, 7) == 1; + + LuaSpell* spell = lua_interface->GetCurrentSpell(state); + if(!spell){ + lua_interface->LogError("LUA command error: this function must be used in a spellscript"); + return 0; + } + + Entity* caster = spell->caster; + if(!caster){ + lua_interface->LogError("LUA command error: could not find caster"); + return 0; + } + + Client* client = 0; + PendingResurrection* rez = 0; + ZoneServer* zone = spell->caster->GetZone(); + if(!target){ + spell->MSpellTargets.readlock(__FUNCTION__, __LINE__); + if(spell->targets.size() > 0){ + vector spell_targets = spell->targets; + for(int8 i=0; i < spell_targets.size(); i++){ + target = zone->GetSpawnByID(spell_targets.at(i)); + if(!target) + continue; + if(!target->IsPlayer()) + continue; + + client = target->GetZone()->GetClientBySpawn(target); + + if(!client) + continue; + + rez = client->GetCurrentRez(); + if(rez->active) + continue; + + client->GetResurrectMutex()->writelock(__FUNCTION__, __LINE__); + rez->active = true; + rez->caster = caster; + rez->expire_timer = new Timer; + int32 duration = spell->spell->GetSpellDuration(); + rez->expire_timer->Start(duration * 100); + rez->hp_perc = hp_perc; + rez->mp_perc = power_perc; + rez->range = spell->spell->GetSpellData()->range; + rez->spell_name = spell->spell->GetName(); + if(heal_name.length() > 0) + rez->heal_name = heal_name; + else + rez->heal_name = rez->spell_name; + rez->no_calcs = no_calcs; + rez->crit_mod = crit_mod; + rez->spell_visual = spell->spell->GetSpellData()->spell_visual; + if(send_window) + client->SendResurrectionWindow(); + else{ + target->GetZone()->ResurrectSpawn(target, client); + rez->should_delete = true; + } + client->GetResurrectMutex()->releasewritelock(__FUNCTION__, __LINE__); + } + } + spell->MSpellTargets.releasereadlock(__FUNCTION__, __LINE__); + } + else { + client = target->GetZone()->GetClientBySpawn(target); + + if(!client) + return 0; + + rez = client->GetCurrentRez(); + if(rez->active) + return 0; + + client->GetResurrectMutex()->writelock(__FUNCTION__, __LINE__); + rez->active = true; + rez->caster = caster; + rez->expire_timer = new Timer; + int32 duration = spell->spell->GetSpellDuration(); + rez->expire_timer->Start(duration * 100); + rez->hp_perc = hp_perc; + rez->mp_perc = power_perc; + rez->range = spell->spell->GetSpellData()->range; + rez->spell_name = spell->spell->GetName(); + if(heal_name.length() > 0) + rez->heal_name = heal_name; + else + rez->heal_name = rez->spell_name; + rez->no_calcs = no_calcs; + rez->crit_mod = crit_mod; + rez->spell_visual = spell->spell->GetSpellData()->spell_visual; + if(send_window) + client->SendResurrectionWindow(); + else{ + target->GetZone()->ResurrectSpawn(target, client); + rez->should_delete = true; + } + client->GetResurrectMutex()->releasewritelock(__FUNCTION__, __LINE__); + } + return 0; +} + +int EQ2Emu_lua_SetVision(lua_State* state) { + if (!lua_interface) + return 0; + + Spawn* spawn = lua_interface->GetSpawn(state); + int8 vision = lua_interface->GetInt8Value(state, 2); + LuaSpell* spell = lua_interface->GetCurrentSpell(state); + + if (!spawn) { + lua_interface->LogError("LUA SetVision command error: spawn is not valid"); + return 0; + } + + if (!spawn->IsEntity()) { + lua_interface->LogError("LUA SetVision command error: spawn is not an entity"); + return 0; + } + + if (spell && spell->targets.size() > 0) { + ZoneServer* zone = spell->caster->GetZone(); + for (int8 i = 0; i < spell->targets.size(); i++) { + Spawn* target = zone->GetSpawnByID(spell->targets.at(i)); + if (target->IsEntity()) { + ((Entity*)target)->GetInfoStruct()->vision = vision; + if (target->IsPlayer()) + ((Player*)target)->SetCharSheetChanged(true); + } + } + } + else { + ((Entity*)spawn)->GetInfoStruct()->vision = vision; + if (spawn->IsPlayer()) + ((Player*)spawn)->SetCharSheetChanged(true); + } + return 0; +} + +int EQ2Emu_lua_BlurVision(lua_State* state) { + if (!lua_interface) + return 0; + + Spawn* spawn = lua_interface->GetSpawn(state); + float intensity = lua_interface->GetFloatValue(state, 2); + LuaSpell* spell = lua_interface->GetCurrentSpell(state); + + if (!spawn) { + lua_interface->LogError("LUA BlurVision command error: spawn is not valid"); + return 0; + } + + if (!spawn->IsEntity()) { + lua_interface->LogError("LUA BlurVision command error: spawn is not an entity"); + return 0; + } + + if (spell && spell->targets.size() > 0) { + ZoneServer* zone = spell->caster->GetZone(); + for (int8 i = 0; i < spell->targets.size(); i++) { + Spawn* target = zone->GetSpawnByID(spell->targets.at(i)); + if (target && target->IsEntity()) { + ((Entity*)target)->GetInfoStruct()->drunk = intensity; + if (target->IsPlayer()) + ((Player*)target)->SetCharSheetChanged(true); + } + } + } + else { + ((Entity*)spawn)->GetInfoStruct()->drunk = intensity; + if (spawn->IsPlayer()) + ((Player*)spawn)->SetCharSheetChanged(true); + } + return 0; +} + +int EQ2Emu_lua_BreatheUnderwater(lua_State* state) { + if (!lua_interface) + return 0; + + Spawn* spawn = lua_interface->GetSpawn(state); + bool breatheUnderwater = lua_interface->GetBooleanValue(state, 2); + LuaSpell* spell = lua_interface->GetCurrentSpell(state); + + if (!spawn) { + lua_interface->LogError("LUA BreathUnderwater command error: spawn is not valid"); + return 0; + } + + if (!spawn->IsEntity()) { + lua_interface->LogError("LUA BreathUnderwater command error: spawn is not en entity"); + return 0; + } + + if (spell && spell->targets.size() > 0) { + ZoneServer* zone = spell->caster->GetZone(); + for (int8 i = 0; i < spell->targets.size(); i++) { + Spawn* target = zone->GetSpawnByID(spell->targets.at(i)); + if (target->IsEntity()) { + ((Entity*)target)->GetInfoStruct()->breathe_underwater = breatheUnderwater; + if (target->IsPlayer()) + ((Player*)target)->SetCharSheetChanged(true); + } + } + } + else { + ((Entity*)spawn)->GetInfoStruct()->breathe_underwater = breatheUnderwater; + if (spawn->IsPlayer()) + ((Player*)spawn)->SetCharSheetChanged(true); + } + return 0; +} + +int EQ2Emu_lua_GetItemSkillReq(lua_State* state) { + if(!lua_interface) + return 0; + + Item* item = lua_interface->GetItem(state); + int8 type = lua_interface->GetInt32Value(state, 2); + if(!item){ + lua_interface->LogError("LUA GetItemSkillReq command error: item not valid"); + return 0; + } + + if(type == 1) + lua_interface->SetInt32Value(state, item->generic_info.skill_req1); + else if (type == 2) + lua_interface->SetInt32Value(state, item->generic_info.skill_req2); + + return 1; +} + +int EQ2Emu_lua_SetSpeeedMultiplier(lua_State* state) { + if (!lua_interface) + return 0; + + Spawn* target = lua_interface->GetSpawn(state); + float val = lua_interface->GetFloatValue(state, 2); + LuaSpell* spell = lua_interface->GetCurrentSpell(state); + // Added from Gangrenous post + if (spell && spell->resisted) + return 0; + + if (spell && spell->spell && spell->targets.size() > 0) { + ZoneServer* zone = spell->caster->GetZone(); + for (int32 i = 0; i != spell->targets.size(); i++) { + Spawn* spawn = zone->GetSpawnByID(spell->targets.at(i)); + if (spawn && spawn->IsEntity()) { + ((Entity*)spawn)->SetSpeedMultiplier(val); + if (spawn->IsPlayer()) + ((Player*)spawn)->SetCharSheetChanged(true); + } + } + } + else { + if (target && target->IsEntity()) { + ((Entity*)target)->SetSpeedMultiplier(val); + if (target->IsPlayer()) + ((Player*)target)->SetCharSheetChanged(true); + } + } + + return 0; +} + +int EQ2Emu_lua_SetIllusion(lua_State* state) { + if (!lua_interface) + return 0; + + Spawn* spawn = lua_interface->GetSpawn(state); + int16 model = lua_interface->GetInt16Value(state, 2); + LuaSpell* spell = lua_interface->GetCurrentSpell(state); + + if (spell && spell->spell && spell->targets.size() > 0) { + ZoneServer* zone = spell->caster->GetZone(); + for (int32 i = 0; i < spell->targets.size(); i++) { + Spawn* target = zone->GetSpawnByID(spell->targets.at(i)); + if (target) + target->SetIllusionModel(model); + } + } + else { + if (!spawn) { + lua_interface->LogError("LUA SetIllusion command error: spawn is not valid"); + return 0; + } + + spawn->SetIllusionModel(model); + } + + return 0; +} + +int EQ2Emu_lua_ResetIllusion(lua_State* state) { + if (!lua_interface) + return 0; + + Spawn* spawn = lua_interface->GetSpawn(state); + LuaSpell* spell = lua_interface->GetCurrentSpell(state); + + if (spell && spell->spell && spell->targets.size() > 0) { + ZoneServer* zone = spell->caster->GetZone(); + for (int32 i = 0; i < spell->targets.size(); i++) { + Spawn* target = zone->GetSpawnByID(spell->targets.at(i)); + if (target) + target->SetIllusionModel(0); + } + } + else { + if (!spawn) { + lua_interface->LogError("LUA ResetIllusion command error: spawn is not valid"); + return 0; + } + + spawn->SetIllusionModel(0); + } + + return 0; +} + +int EQ2Emu_lua_AddThreatTransfer(lua_State* state) { + if (!lua_interface) + return 0; + + Spawn* caster = lua_interface->GetSpawn(state); + Spawn* target = lua_interface->GetSpawn(state, 2); + float chance = lua_interface->GetFloatValue(state, 3); + LuaSpell* spell = lua_interface->GetCurrentSpell(state); + + if (!caster) { + lua_interface->LogError("LUA AddThreatTransfer command error: caster is not a valid spawn"); + return 0; + } + + if (!caster->IsEntity()) { + lua_interface->LogError("LUA AddThreatTransfer command error: caster is not an entity"); + return 0; + } + + if (!target) { + lua_interface->LogError("LUA AddThreatTransfer command error: target is not a valid spawn"); + return 0; + } + + if (!target->IsEntity()) { + lua_interface->LogError("LUA AddThreatTransfer command error: target is not an entity"); + return 0; + } + + if (chance <= 0) { + lua_interface->LogError("LUA AddThreatTransfer command error: chance must be greater then 0%"); + return 0; + } + + if (!spell) { + lua_interface->LogError("LUA AddThreatTransfer command error: can only be used in a spell script"); + return 0; + } + + if (((Entity*)caster)->GetThreatTransfer()) { + return 0; + } + + ThreatTransfer* transfer = new ThreatTransfer; + transfer->Target = target->GetID(); + transfer->Amount = chance; + transfer->Spell = spell; + + ((Entity*)caster)->SetThreatTransfer(transfer); + return 0; +} + +int EQ2Emu_lua_RemoveThreatTransfer(lua_State* state) { + if (!lua_interface) + return 0; + + Spawn* spawn = lua_interface->GetSpawn(state); + LuaSpell* spell = lua_interface->GetCurrentSpell(state); + + if (!spawn) { + lua_interface->LogError("LUA RemoveThreatTransfer command error: spawn is not valid"); + return 0; + } + + if (!spell) { + lua_interface->LogError("LUA RemoveThreatTransfer command error: can only be used in a spell script"); + return 0; + } + + if (((Entity*)spawn)->GetThreatTransfer() && ((Entity*)spawn)->GetThreatTransfer()->Spell == spell) { + ThreatTransfer* transfer = ((Entity*)spawn)->GetThreatTransfer(); + safe_delete(transfer); + ((Entity*)spawn)->SetThreatTransfer(0); + } + + return 0; +} + +int EQ2Emu_lua_CureByType(lua_State* state) { + if(!lua_interface) + return 0; + + LuaSpell* spell = lua_interface->GetCurrentSpell(state); + if(!spell){ + lua_interface->LogError("LUA CureByType command error: can only be used in a spell script"); + return 0; + } + + int8 cure_count = lua_interface->GetInt8Value(state); + int8 cure_type = lua_interface->GetInt8Value(state, 2); + string cure_name = lua_interface->GetStringValue(state, 3); + int8 cure_level = lua_interface->GetInt8Value(state, 4); + Spawn* target = lua_interface->GetSpawn(state, 5); + + if(target){ + if(!target->IsEntity()){ + lua_interface->LogError("LUA CureByType command error: spawn override must be entity if used"); + return 0; + } + + if(((Entity*)target)->GetDetTypeCount(cure_type) > 0) + ((Entity*)target)->CureDetrimentByType(cure_count, cure_type, cure_name.length() > 0 ? cure_name : (string)spell->spell->GetName(), spell->caster, cure_level); + } + else { + ZoneServer* zone = spell->caster->GetZone(); + vector targets = spell->targets; + + spell->MSpellTargets.readlock(__FUNCTION__, __LINE__); + for(int8 i=0; iGetSpawnByID(targets.at(i)); + + if(!target || !target->IsEntity()) + continue; + + if(((Entity*)target)->GetDetTypeCount(cure_type) > 0) + ((Entity*)target)->CureDetrimentByType(cure_count, cure_type, cure_name.length() > 0 ? cure_name : (string)spell->spell->GetName(), spell->caster, cure_level); + } + spell->MSpellTargets.releasereadlock(__FUNCTION__, __LINE__); + } + return 0; +} + +int EQ2Emu_lua_CureByControlEffect(lua_State* state) { + if(!lua_interface) + return 0; + + LuaSpell* spell = lua_interface->GetCurrentSpell(state); + if(!spell){ + lua_interface->LogError("LUA CureByControlEffect command error: can only be used in a spell script"); + return 0; + } + + int8 cure_count = lua_interface->GetInt8Value(state); + int8 cure_type = lua_interface->GetInt8Value(state, 2); + string cure_name = lua_interface->GetStringValue(state, 3); + int8 cure_level = lua_interface->GetInt8Value(state, 4); + Spawn* target = lua_interface->GetSpawn(state, 5); + + if(target){ + if(!target->IsEntity()){ + lua_interface->LogError("LUA CureByControlEffect command error: spawn override must be entity if used"); + return 0; + } + + if(((Entity*)target)->GetDetCount() > 0) + ((Entity*)target)->CureDetrimentByControlEffect(cure_count, cure_type, cure_name.length() > 0 ? cure_name : (string)spell->spell->GetName(), spell->caster, cure_level); + } + else { + ZoneServer* zone = spell->caster->GetZone(); + vector targets = spell->targets; + + spell->MSpellTargets.readlock(__FUNCTION__, __LINE__); + for(int8 i=0; iGetSpawnByID(targets.at(i)); + + if(!target || !target->IsEntity()) + continue; + + if(((Entity*)target)->GetDetCount() > 0) + ((Entity*)target)->CureDetrimentByControlEffect(cure_count, cure_type, cure_name.length() > 0 ? cure_name : (string)spell->spell->GetName(), spell->caster, cure_level); + } + spell->MSpellTargets.releasereadlock(__FUNCTION__, __LINE__); + } + return 0; +} + +int EQ2Emu_lua_CancelSpell(lua_State* state) { + if (!lua_interface) + return 0; + + LuaSpell* spell = lua_interface->GetCurrentSpell(state); + + if (!spell) { + lua_interface->LogError("LUA CancelSpell command error: can only be use in a spell script"); + return 0; + } + + if (!spell->caster) { + lua_interface->LogError("LUA CancelSpell command error: unable to get the caster of the spell"); + return 0; + } + + if (!spell->caster->GetZone()) { + lua_interface->LogError("LUA CancelSpell command error: unable to get the zone of the caster"); + return 0; + } + + spell->caster->GetZone()->GetSpellProcess()->AddSpellCancel(spell); + + return 0; +} + +int EQ2Emu_lua_RemoveStealth(lua_State* state) { + if (!lua_interface) + return 0; + + Spawn* spawn = lua_interface->GetSpawn(state); + LuaSpell* spell = lua_interface->GetCurrentSpell(state); + + if (!spell){ + lua_interface->LogError("LUA RemoveStealth command error: must be used from spell script"); + return 0; + } + + if (spawn && spawn->IsEntity()) + ((Entity*)spawn)->RemoveStealthSpell(spell); + else{ + ZoneServer* zone = spell->caster->GetZone(); + spell->MSpellTargets.readlock(__FUNCTION__, __LINE__); + for (int32 i = 0; i < spell->targets.size(); i++){ + spawn = zone->GetSpawnByID(spell->targets.at(i)); + if (!spawn || !spawn->IsEntity()) + continue; + + ((Entity*)spawn)->RemoveStealthSpell(spell); + } + spell->MSpellTargets.releasereadlock(__FUNCTION__, __LINE__); + } + return 0; +} + +int EQ2Emu_lua_RemoveInvis(lua_State* state) { + if (!lua_interface) + return 0; + + Spawn* spawn = lua_interface->GetSpawn(state); + LuaSpell* spell = lua_interface->GetCurrentSpell(state); + + if (!spell){ + lua_interface->LogError("LUA RemoveInvis command error: must be used from spell script"); + return 0; + } + + if (spawn && spawn->IsEntity()) + ((Entity*)spawn)->RemoveInvisSpell(spell); + else{ + ZoneServer* zone = spell->caster->GetZone(); + spell->MSpellTargets.readlock(__FUNCTION__, __LINE__); + for (int32 i = 0; i < spell->targets.size(); i++){ + spawn = zone->GetSpawnByID(spell->targets.at(i)); + if (!spawn || !spawn->IsEntity()) + continue; + + ((Entity*)spawn)->RemoveInvisSpell(spell); + } + spell->MSpellTargets.releasereadlock(__FUNCTION__, __LINE__); + } + return 0; +} + +int EQ2Emu_lua_StartHeroicOpportunity(lua_State* state) { + if (!lua_interface) + return 0; + + Spawn* caster = lua_interface->GetSpawn(state); + int8 class_id = lua_interface->GetInt8Value(state, 2); + + if (!caster) { + lua_interface->LogError("LUA StartHeroicOpportunity command error: caster is not valid"); + return 0; + } + + if (!caster->IsPlayer()) { + lua_interface->LogError("LUA StartHeroicOpportunity command error: caster must be a player"); + return 0; + } + + Spawn* target = caster->GetTarget(); + if (!target) { + lua_interface->LogError("LUA StartHeroicOpportunity command error: target is not valid"); + return 0; + } + + Client* client = caster->GetZone()->GetClientBySpawn(caster); + if (!client) { + lua_interface->LogError("LUA StartHeroicOpportunity command error: unable to get a client for the given caster"); + return 0; + } + + HeroicOP* ho = master_ho_list.GetHeroicOP(class_id); + if (ho) { + ho->SetTarget(target->GetID()); + LogWrite(SPELL__ERROR, 0, "HO", "caster: %u", caster->GetID()); + LogWrite(SPELL__ERROR, 0, "HO", "target: %u", target->GetID()); + if (((Entity*)caster)->GetGroupMemberInfo()) { + if (caster->GetZone()->GetSpellProcess()->AddHO(client, ho)) { + world.GetGroupManager()->GroupLock(__FUNCTION__, __LINE__); + + deque::iterator itr; + deque* members = world.GetGroupManager()->GetGroupMembers(((Entity*)caster)->GetGroupMemberInfo()->group_id); + for (itr = members->begin(); itr != members->end(); itr++) { + if ((*itr)->client) + ClientPacketFunctions::SendHeroicOPUpdate((*itr)->client, ho); + } + + world.GetGroupManager()->ReleaseGroupLock(__FUNCTION__, __LINE__); + } + else + safe_delete(ho); + } + else { + if (caster->GetZone()->GetSpellProcess()->AddHO(client, ho)) { + ClientPacketFunctions::SendHeroicOPUpdate(client, ho); + } + else + safe_delete(ho); + } + } + + return 0; +} + +int EQ2Emu_lua_SetSpellTriggerCount(lua_State* state){ + if (!lua_interface) + return 0; + + LuaSpell* spell = lua_interface->GetCurrentSpell(state); + + if (!spell){ + lua_interface->LogError("LUA SetSpellTriggerCount command error: you must use this function in a spellscript!"); + return 0; + } + + int16 triggerCount = lua_interface->GetInt16Value(state); + bool cancel_after_triggers = (lua_interface->GetInt8Value(state, 2) == 1); + + if (!triggerCount){ + lua_interface->LogError("LUA SetSpellTriggerCount command error: used trigger value equals zero!"); + return 0; + } + + spell->num_triggers = triggerCount; + spell->had_triggers = true; + spell->cancel_after_all_triggers = cancel_after_triggers; + + return 0; +} + +int EQ2Emu_lua_GetSpellTriggerCount(lua_State* state){ + if (!lua_interface) + return 0; + + LuaSpell* spell = lua_interface->GetCurrentSpell(state); + + if (!spell){ + lua_interface->LogError("LUA GetSpellTriggerCount command error: you must use this function in a spellscript!"); + return 0; + } + + lua_interface->SetInt32Value(state, spell->num_triggers); + + return 1; +} + +int EQ2Emu_lua_RemoveTriggerFromSpell(lua_State* state){ + if (!lua_interface) + return 0; + + LuaSpell* spell = lua_interface->GetCurrentSpell(state); + + if (!spell){ + lua_interface->LogError("LUA RemoveTriggerFromSpell command error: you must use this function in a spellscript!"); + return 0; + } + + int16 remove_count = lua_interface->GetInt16Value(state); + + if (!remove_count) + remove_count = 1; + + if (remove_count >= spell->num_triggers){ + spell->num_triggers = 0; + if (spell->cancel_after_all_triggers) + spell->caster->GetZone()->GetSpellProcess()->AddSpellCancel(spell); + } + else{ + spell->num_triggers -= remove_count; + ClientPacketFunctions::SendMaintainedExamineUpdate(spell->caster->GetZone()->GetClientBySpawn(spell->caster), spell->slot_pos, spell->num_triggers, 0); + } + return 0; +} + +int EQ2Emu_lua_CopySpawnAppearance(lua_State* state){ + if (!lua_interface) + return 0; + + Spawn* spawn = lua_interface->GetSpawn(state); + Spawn* copy_spawn = lua_interface->GetSpawn(state, 2); + + if (!spawn){ + lua_interface->LogError("LUA CopySpawnAppearance command error: the first spawn used was not valid!"); + return 0; + } + + if (!copy_spawn){ + lua_interface->LogError("LUA CopySpawnAppearance command error: the second spawn used was not valid!"); + return 0; + } + + spawn->CopySpawnAppearance(copy_spawn); + return 0; +} + +int EQ2Emu_lua_AddImmunitySpell(lua_State* state){ + if (!lua_interface) + return 0; + + LuaSpell* spell = lua_interface->GetCurrentSpell(state); + int8 type = lua_interface->GetInt8Value(state); + Spawn* spawn = lua_interface->GetSpawn(state, 2); + + if (!spell){ + lua_interface->LogError("LUA AddImmunitySpell command error: This must be used in a spellscript"); + return 0; + } + + if (spawn){ + if (!spawn->IsEntity()){ + lua_interface->LogError("LUA AddImmunitySpell command error: The spawn provided is not an entity"); + return 0; + } + Entity* entity = ((Entity*)spawn); + switch (type){ + case IMMUNITY_TYPE_AOE: + entity->AddAOEImmunity(spell); + if (!(spell->effect_bitmask & EFFECT_FLAG_AOE_IMMUNE)) + spell->effect_bitmask += EFFECT_FLAG_AOE_IMMUNE; + break; + case IMMUNITY_TYPE_STUN: + entity->AddStunImmunity(spell); + if (!(spell->effect_bitmask & EFFECT_FLAG_STUN_IMMUNE)) + spell->effect_bitmask += EFFECT_FLAG_STUN_IMMUNE; + break; + case IMMUNITY_TYPE_ROOT: + entity->AddRootImmunity(spell); + if (!(spell->effect_bitmask & EFFECT_FLAG_ROOT_IMMUNE)) + spell->effect_bitmask += EFFECT_FLAG_ROOT_IMMUNE; + break; + case IMMUNITY_TYPE_DAZE: + entity->AddDazeImmunity(spell); + if (!(spell->effect_bitmask & EFFECT_FLAG_DAZE_IMMUNE)) + spell->effect_bitmask += EFFECT_FLAG_DAZE_IMMUNE; + break; + case IMMUNITY_TYPE_FEAR: + entity->AddFearImmunity(spell); + if (!(spell->effect_bitmask & EFFECT_FLAG_FEAR_IMMUNE)) + spell->effect_bitmask += EFFECT_FLAG_FEAR_IMMUNE; + break; + case IMMUNITY_TYPE_MEZ: + entity->AddMezImmunity(spell); + if (!(spell->effect_bitmask & EFFECT_FLAG_MEZ_IMMUNE)) + spell->effect_bitmask += EFFECT_FLAG_MEZ_IMMUNE; + break; + case IMMUNITY_TYPE_STIFLE: + entity->AddStifleImmunity(spell); + if (!(spell->effect_bitmask & EFFECT_FLAG_STIFLE_IMMUNE)) + spell->effect_bitmask += EFFECT_FLAG_STIFLE_IMMUNE; + break; + default: + lua_interface->LogError("LUA AddImmunitySpell command error: invalid immunity type"); + } + } + else { + bool should_break = false; + spell->MSpellTargets.readlock(__FUNCTION__, __LINE__); + for (int8 i = 0; i < spell->targets.size(); i++){ + spawn = spell->caster->GetZone()->GetSpawnByID(spell->targets.at(i)); + if (!spawn || !spawn->IsEntity()) + continue; + Entity* entity = ((Entity*)spawn); + switch (type){ + case IMMUNITY_TYPE_AOE: + entity->AddAOEImmunity(spell); + if (!(spell->effect_bitmask & EFFECT_FLAG_AOE_IMMUNE)) + spell->effect_bitmask += EFFECT_FLAG_AOE_IMMUNE; + break; + case IMMUNITY_TYPE_STUN: + entity->AddStunImmunity(spell); + if (!(spell->effect_bitmask & EFFECT_FLAG_STUN_IMMUNE)) + spell->effect_bitmask += EFFECT_FLAG_STUN_IMMUNE; + break; + case IMMUNITY_TYPE_ROOT: + entity->AddRootImmunity(spell); + if (!(spell->effect_bitmask & EFFECT_FLAG_ROOT_IMMUNE)) + spell->effect_bitmask += EFFECT_FLAG_ROOT_IMMUNE; + break; + case IMMUNITY_TYPE_DAZE: + entity->AddDazeImmunity(spell); + if (!(spell->effect_bitmask & EFFECT_FLAG_DAZE_IMMUNE)) + spell->effect_bitmask += EFFECT_FLAG_DAZE_IMMUNE; + break; + case IMMUNITY_TYPE_FEAR: + entity->AddFearImmunity(spell); + if (!(spell->effect_bitmask & EFFECT_FLAG_FEAR_IMMUNE)) + spell->effect_bitmask += EFFECT_FLAG_FEAR_IMMUNE; + break; + case IMMUNITY_TYPE_MEZ: + entity->AddMezImmunity(spell); + if (!(spell->effect_bitmask & EFFECT_FLAG_MEZ_IMMUNE)) + spell->effect_bitmask += EFFECT_FLAG_MEZ_IMMUNE; + break; + case IMMUNITY_TYPE_STIFLE: + entity->AddStifleImmunity(spell); + if (!(spell->effect_bitmask & EFFECT_FLAG_STIFLE_IMMUNE)) + spell->effect_bitmask += EFFECT_FLAG_STIFLE_IMMUNE; + break; + default: + lua_interface->LogError("LUA AddImmunitySpell command error: invalid immunity type"); + should_break = true; + } + if (should_break) + break; + } + spell->MSpellTargets.releasereadlock(__FUNCTION__, __LINE__); + } + + return 0; +} + +int EQ2Emu_lua_RemoveImmunitySpell(lua_State* state){ + if (!lua_interface) + return 0; + + LuaSpell* spell = lua_interface->GetCurrentSpell(state); + int8 type = lua_interface->GetInt8Value(state); + Spawn* spawn = lua_interface->GetSpawn(state, 2); + + if (!spell){ + lua_interface->LogError("LUA RemoveImmunitySpell command error: This must be used in a spellscript"); + return 0; + } + + if (spawn){ + if (!spawn->IsEntity()){ + lua_interface->LogError("LUA RemoveImmunitySpell command error: The spawn provided is not an entity"); + return 0; + } + Entity* entity = ((Entity*)spawn); + switch (type){ + case IMMUNITY_TYPE_AOE: + entity->RemoveAOEImmunity(spell); + break; + case IMMUNITY_TYPE_STUN: + entity->RemoveStunImmunity(spell); + break; + case IMMUNITY_TYPE_ROOT: + entity->RemoveRootImmunity(spell); + break; + case IMMUNITY_TYPE_DAZE: + entity->RemoveDazeImmunity(spell); + break; + case IMMUNITY_TYPE_FEAR: + entity->RemoveFearImmunity(spell); + break; + case IMMUNITY_TYPE_MEZ: + entity->RemoveMezImmunity(spell); + break; + case IMMUNITY_TYPE_STIFLE: + entity->RemoveStifleImmunity(spell); + break; + default: + lua_interface->LogError("LUA RemoveImmunitySpell command error: invalid immunity type"); + } + } + else { + bool should_break = false; + spell->MSpellTargets.readlock(__FUNCTION__, __LINE__); + for (int8 i = 0; i < spell->targets.size(); i++){ + spawn = spell->caster->GetZone()->GetSpawnByID(spell->targets.at(i)); + if (!spawn || !spawn->IsEntity()) + continue; + Entity* entity = ((Entity*)spawn); + switch (type){ + case IMMUNITY_TYPE_AOE: + entity->RemoveAOEImmunity(spell); + break; + case IMMUNITY_TYPE_STUN: + entity->RemoveStunImmunity(spell); + break; + case IMMUNITY_TYPE_ROOT: + entity->RemoveRootImmunity(spell); + break; + case IMMUNITY_TYPE_DAZE: + entity->RemoveDazeImmunity(spell); + break; + case IMMUNITY_TYPE_FEAR: + entity->RemoveFearImmunity(spell); + break; + case IMMUNITY_TYPE_MEZ: + entity->RemoveMezImmunity(spell); + break; + case IMMUNITY_TYPE_STIFLE: + entity->RemoveStifleImmunity(spell); + break; + default: + lua_interface->LogError("LUA RemoveImmunitySpell command error: invalid immunity type"); + should_break = true; + } + if (should_break) + break; + } + spell->MSpellTargets.releasereadlock(__FUNCTION__, __LINE__); + } + + return 0; +} + +int EQ2Emu_lua_SetSpellSnareValue(lua_State* state) { + if (!lua_interface) + return 0; + + LuaSpell* spell = lua_interface->GetCurrentSpell(state); + if (!spell) { + lua_interface->LogError("LUA SetSpellSnareValue command error: This can only be used in a spell script!"); + return 0; + } + + float snare = lua_interface->GetFloatValue(state); + Spawn* spawn = lua_interface->GetSpawn(state, 2); + + // convert the val to the speed multipler value (100 - val) + float val = 100.0 - snare; + val /= 100.0; + + if (spawn) { + if (!spawn->IsEntity()) { + lua_interface->LogError("LUA SetSpellSnareValue command error: spawn must be an entity."); + return 0; + } + + ((Entity*)spawn)->SetSnareValue(spell, val); + } + else { + spell->MSpellTargets.readlock(__FUNCTION__, __LINE__); + for (int8 i = 0; i < spell->targets.size(); i++){ + spawn = spell->caster->GetZone()->GetSpawnByID(spell->targets.at(i)); + if (!spawn || !spawn->IsEntity()) + continue; + + ((Entity*)spawn)->SetSnareValue(spell, val); + } + spell->MSpellTargets.releasereadlock(__FUNCTION__, __LINE__); + } + + return 0; +} + +int EQ2Emu_lua_CheckRaceType(lua_State* state) { + if (!lua_interface) + return 0; + + Spawn* spawn = lua_interface->GetSpawn(state); + int16 race_id = lua_interface->GetInt16Value(state, 2); + + if (!spawn) { + lua_interface->LogError("LUA CheckRaceType command error: spawn is not valid"); + return 0; + } + + if (race_id == 0) { + lua_interface->LogError("LUA CheckRaceType command error: race id must be set"); + return 0; + } + + lua_interface->SetBooleanValue(state, (race_id == race_types_list.GetRaceType(spawn->GetModelType()) || race_id == race_types_list.GetRaceBaseType(spawn->GetModelType()))); + return 1; +} + +int EQ2Emu_lua_GetRaceType(lua_State* state) { + if (!lua_interface) + return 0; + + Spawn* spawn = lua_interface->GetSpawn(state); + + if (!spawn) { + lua_interface->LogError("LUA GetRaceType command error: spawn is not valid"); + return 0; + } + + lua_interface->SetInt32Value(state, race_types_list.GetRaceType(spawn->GetModelType())); + return 1; +} + +int EQ2Emu_lua_GetRaceBaseType(lua_State* state) { + if (!lua_interface) + return 0; + + Spawn* spawn = lua_interface->GetSpawn(state); + + if (!spawn) { + lua_interface->LogError("LUA GetRaceBaseType command error: spawn is not valid"); + return 0; + } + + lua_interface->SetInt32Value(state, race_types_list.GetRaceBaseType(spawn->GetModelType())); + return 1; +} + +int EQ2Emu_lua_GetSpellName(lua_State* state) { + if (!lua_interface) + return 0; + + LuaSpell* spell = lua_interface->GetCurrentSpell(state); + + if (!spell){ + lua_interface->LogError("LUA GetSpellName command error: this function must be used from a spell script!"); + return 0; + } + + lua_interface->SetStringValue(state, spell->spell->GetName()); + return 1; +} + +int EQ2Emu_lua_GetQuestFlags(lua_State* state) { + if (!lua_interface) + return 0; + + Quest* quest = lua_interface->GetQuest(state); + if (!quest) { + lua_interface->LogError("LUA GetQuestFlags command error: quest is not valid."); + return 0; + } + + lua_interface->SetInt32Value(state, quest->GetQuestFlags()); + return 1; +} + +int EQ2Emu_lua_SetQuestFlags(lua_State* state) { + if (!lua_interface) + return 0; + + Quest* quest = lua_interface->GetQuest(state); + int32 flags = lua_interface->GetInt32Value(state, 2); + + if (!quest) { + lua_interface->LogError("LUA SetQuestFlags command error: quest is not valid."); + return 0; + } + + quest->SetQuestFlags(flags); + return 0; +} + +int EQ2Emu_lua_SetQuestTimer(lua_State* state) { + if (!lua_interface) + return 0; + + Quest* quest = lua_interface->GetQuest(state); + Spawn* player = lua_interface->GetSpawn(state, 2); + int32 step = lua_interface->GetInt32Value(state, 3); + int32 duration = lua_interface->GetInt32Value(state, 4); + string action = lua_interface->GetStringValue(state, 5); + + if (!quest) { + lua_interface->LogError("LUA SetQuestTimer command error: quest is not valid."); + return 0; + } + + if (!player) { + lua_interface->LogError("LUA SetQuestTimer command error: player is not a valid spawn."); + return 0; + } + + if (!player->IsPlayer()) { + lua_interface->LogError("LUA SetQuestTimer command error: player is not a valid player."); + return 0; + } + + if (step == 0) { + lua_interface->LogError("LUA SetQuestTimer command error: step must be set."); + return 0; + } + + if (duration == 0) { + lua_interface->LogError("LUA SetQuestTimer command error: duration must be set."); + return 0; + } + + if (action.length() == 0) { + lua_interface->LogError("LUA SetQuestTimer command error: failed action must be set."); + return 0; + } + + Client* client = player->GetZone()->GetClientBySpawn(player); + if (!client) { + lua_interface->LogError("LUA SetQuestTimer command error: failed to get a valid client pointer for the given player"); + return 0; + } + + quest->SetTimerStep(step); + quest->AddFailedAction(step, action); + quest->SetStepTimer(duration); + client->AddQuestTimer(quest->GetQuestID()); + + return 0; +} + +int EQ2Emu_lua_SetQuestTimerComplete(lua_State* state) { + if (!lua_interface) + return 0; + + Quest* quest = lua_interface->GetQuest(state); + Spawn* player = lua_interface->GetSpawn(state, 2); + + if (!quest) { + lua_interface->LogError("LUA SetQuestTimerComplete command error: quest is not valid."); + return 0; + } + + if (!player) { + lua_interface->LogError("LUA SetQuestTimerComplete command error: player is not a valid spawn."); + return 0; + } + + if (!player->IsPlayer()) { + lua_interface->LogError("LUA SetQuestTimerComplete command error: player is not a valid player."); + return 0; + } + + Client* client = player->GetZone()->GetClientBySpawn(player); + if (!client) { + lua_interface->LogError("LUA SetQuestTimerComplete command error: failed to get a valid client pointer for the given player"); + return 0; + } + + quest->SetTimerStep(0); + quest->SetStepTimer(0); + client->RemoveQuestTimer(quest->GetQuestID()); + + return 0; +} + +int EQ2Emu_lua_RemoveQuestStep(lua_State* state) { + if (!lua_interface) + return 0; + + Spawn* player = lua_interface->GetSpawn(state); + Quest* quest = lua_interface->GetQuest(state, 2); + int32 step = lua_interface->GetInt32Value(state, 3); + + if (!player) { + lua_interface->LogError("LUA RemoveQuestStep command error: player is not a valid spawn."); + return 0; + } + + if (!player->IsPlayer()) { + lua_interface->LogError("LUA RemoveQuestStep command error: player is not a valid player."); + return 0; + } + + if (!quest) { + lua_interface->LogError("LUA RemoveQuestStep command error: quest is not valid."); + return 0; + } + + if (step == 0) { + lua_interface->LogError("LUA RemoveQuestStep command error: step must be set."); + return 0; + } + + Client* client = player->GetZone()->GetClientBySpawn(player); + if (!client) { + lua_interface->LogError("LUA RemoveQuestStep command error: unable to get a valid client pointer from the given player."); + return 0; + } + + if (quest->RemoveQuestStep(step, client)) { + client->QueuePacket(quest->QuestJournalReply(client->GetVersion(), client->GetNameCRC(), (Player*)player, 0, 0, 0, true)); + client->GetCurrentZone()->SendQuestUpdates(client); + } + else + lua_interface->LogError("LUA RemoveQuestStep command error: unable to remove the step (%u) from the quest (%s).", step, quest->GetName()); + + return 0; +} + +int EQ2Emu_lua_ResetQuestStep(lua_State* state) { + if (!lua_interface) + return 0; + + Quest* quest = lua_interface->GetQuest(state, 1); + int32 step = lua_interface->GetInt32Value(state, 2); + string desc = lua_interface->GetStringValue(state, 3); + string task_group = lua_interface->GetStringValue(state, 4); + + if (!quest) { + lua_interface->LogError("LUA ResetQuestStep command error: quest is not valid."); + return 0; + } + + if (step == 0) { + lua_interface->LogError("LUA ResetQuestStep command error: step must be set."); + return 0; + } + + QuestStep* quest_step = quest->GetQuestStep(step); + if (!quest_step) { + lua_interface->LogError("LUA ResetQuestStep command error: unable to get a valid quest step."); + return 0; + } + + quest_step->SetStepProgress(0); + quest_step->SetTaskGroup(task_group); + quest_step->SetDescription(desc); + + return 0; +} + +int EQ2Emu_lua_AddQuestStepFailureAction(lua_State* state) { + if (!lua_interface) + return 0; + + Quest* quest = lua_interface->GetQuest(state); + int32 step = lua_interface->GetInt32Value(state, 2); + string action = lua_interface->GetStringValue(state, 3); + + if (!quest) { + lua_interface->LogError("LUA AddQuestStepFailureAction command error: quest is not valid."); + return 0; + } + + if (step == 0) { + lua_interface->LogError("LUA AddQuestStepFailureAction command error: step must be set."); + return 0; + } + + if (action.length() == 0) { + lua_interface->LogError("LUA AddQuestStepFailureAction command error: action must be set."); + return 0; + } + + quest->AddFailedAction(step, action); + return 0; +} + +int EQ2Emu_lua_SetStepFailed(lua_State* state) { + if (!lua_interface) + return 0; + + Spawn* player = lua_interface->GetSpawn(state); + int32 quest_id = lua_interface->GetInt32Value(state, 2); + int32 step = lua_interface->GetInt32Value(state, 3); + + if (!player) { + lua_interface->LogError("LUA SetStepFailed command error: player is not a valid spawn."); + return 0; + } + + if (!player->IsPlayer()) { + lua_interface->LogError("LUA SetStepFailed command error: player is not a valid player."); + return 0; + } + + if (quest_id == 0) { + lua_interface->LogError("LUA SetStepFailed command error: quest_id must be set."); + return 0; + } + + if (step == 0) { + lua_interface->LogError("LUA SetStepFailed command error: step must be set."); + return 0; + } + + Quest* quest = ((Player*)player)->GetQuest(quest_id); + if (!quest) { + lua_interface->LogError("LUA SetStepFailed command error: unable to get a valid quest from the given id (%u).", quest_id); + return 0; + } + + quest->StepFailed(step); + return 0; +} + +int EQ2Emu_lua_GetQuestCompleteCount(lua_State* state) { + if (!lua_interface) + return 0; + + Spawn* player = lua_interface->GetSpawn(state); + int32 quest_id = lua_interface->GetInt32Value(state, 2); + + if (!player) { + lua_interface->LogError("LUA GetQuestCompleteCount command error: player is not a valid spawn"); + return 0; + } + + if (!player->IsPlayer()) { + lua_interface->LogError("LUA GetQuestCompleteCount command error: player is not a valid player"); + return 0; + } + + if (quest_id == 0) { + lua_interface->LogError("LUA GetQuestCompleteCount command error: quest id is not valid"); + return 0; + } + + Quest* quest = ((Player*)player)->GetCompletedQuest(quest_id); + if (!quest) { + lua_interface->SetInt32Value(state, 0); + return 1; + } + + lua_interface->SetInt32Value(state, quest->GetCompleteCount()); + return 1; +} + +int EQ2Emu_lua_SetServerVariable(lua_State* state) { + if (!lua_interface) + return 0; + + string name = lua_interface->GetStringValue(state); + string value = lua_interface->GetStringValue(state, 2); + string comment = lua_interface->GetStringValue(state, 3); + + if (name.length() == 0) { + lua_interface->LogError("LUA SetServerVariable command error: name is not valid"); + return 0; + } + + if (value.length() == 0) { + lua_interface->LogError("LUA SetServerVariable command error: value is not valid"); + return 0; + } + + string varname = string("lua_").append(name); + Variable* var = variables.FindVariable(varname); + if (var) + var->SetValue(value.c_str()); + else { + var = new Variable(varname.c_str(), value.c_str(), comment.c_str()); + variables.AddVariable(var); + } + + database.SaveVariable(var->GetName(), var->GetValue(), var->GetComment()); + return 0; +} + +int EQ2Emu_lua_GetServerVariable(lua_State* state) { + if (!lua_interface) + return 0; + + string name = lua_interface->GetStringValue(state); + if (name.length() == 0) { + lua_interface->LogError("LUA GetServerVariable command error: name is not valid"); + return 0; + } + + string varname = string("lua_").append(name); + Variable* var = variables.FindVariable(varname); + if (var) + lua_interface->SetStringValue(state, var->GetValue()); + else + lua_interface->SetStringValue(state, "NULL"); + + return 1; +} + +int EQ2Emu_lua_HasLanguage(lua_State* state) { + if (!lua_interface) + return 0; + + Spawn* player = lua_interface->GetSpawn(state); + int32 language_id = lua_interface->GetInt32Value(state, 2); + + if (!player) { + lua_interface->LogError("LUA HasLanguage command error: player is not valid"); + return 0; + } + + if (!player->IsPlayer()) { + lua_interface->LogError("LUA HasLanguage command error: player is not a valid player"); + return 0; + } + + lua_interface->SetBooleanValue(state, ((Player*)player)->HasLanguage(language_id)); + return 1; +} + +int EQ2Emu_lua_AddLanguage(lua_State* state) { + if (!lua_interface) + return 0; + + Spawn* player = lua_interface->GetSpawn(state); + int32 language_id = lua_interface->GetInt32Value(state, 2); + + if (!player) { + lua_interface->LogError("LUA AddLanguage command error: player is not valid"); + return 0; + } + + if (!player->IsPlayer()) { + lua_interface->LogError("LUA AddLanguage command error: player is not a valid player"); + return 0; + } + + Language* language = master_languages_list.GetLanguage(language_id); + if (language) + ((Player*)player)->AddLanguage(language->GetID(), language->GetName(), true); + + return 0; +} + +int EQ2Emu_lua_IsNight(lua_State* state) { + if (!lua_interface) + return 0; + + ZoneServer* zone = lua_interface->GetZone(state); + if (!zone) { + lua_interface->LogError("LUA IsNight command error: zone is not valid"); + return 0; + } + + lua_interface->SetBooleanValue(state, zone->IsDusk()); + return 1; +} + +int EQ2Emu_lua_AddMultiFloorLift(lua_State* state) { + if (!lua_interface) + return 0; + + Spawn* spawn = lua_interface->GetSpawn(state); + + if (!spawn) { + lua_interface->LogError("LUA AddMultiFloorLift command error: spawn is not valid"); + return 0; + } + + if (!spawn->IsWidget()) { + lua_interface->LogError("LUA AddMultiFloorLift command error: spawn is not a widget"); + return 0; + } + + ((Widget*)spawn)->SetMultiFloorLift(true); + + if (spawn->GetZone()) + spawn->GetZone()->AddTransportSpawn(spawn); + + return 0; +} + +int EQ2Emu_lua_StartAutoMount(lua_State* state) { + if (!lua_interface) + return 0; + + Spawn* player = lua_interface->GetSpawn(state); + int32 path = lua_interface->GetInt32Value(state, 2); + + if (!player) { + lua_interface->LogError("LUA StartAutoMount command error: spawn is not valid"); + return 0; + } + + if (!player->IsPlayer()) { + lua_interface->LogError("LUA StartAutoMount command error: spawn is not a player"); + return 0; + } + + if (path == 0) { + lua_interface->LogError("LUA StartAutoMount command error: path must be greater then zero"); + return 0; + } + + Client* client = player->GetZone()->GetClientBySpawn(player); + if (!client) { + lua_interface->LogError("LUA StartAutoMount command error: unable to get a client from the given player"); + return 0; + } + + client->SetPendingFlightPath(path); + + ((Player*)player)->SetTempMount(((Entity*)player)->GetMount()); + ((Player*)player)->SetTempMountColor(((Entity*)player)->GetMountColor()); + ((Player*)player)->SetTempMountSaddleColor(((Entity*)player)->GetMountSaddleColor()); + + PacketStruct* packet = configReader.getStruct("WS_ReadyForTakeOff", client->GetVersion()); + if (packet) { + client->QueuePacket(packet->serialize()); + safe_delete(packet); + } + + return 0; +} + +int EQ2Emu_lua_EndAutoMount(lua_State* state) { + if (!lua_interface) + return 0; + + Spawn* player = lua_interface->GetSpawn(state); + if (!player) { + lua_interface->LogError("LUA EndAutoMount command error: spawn is not valid"); + return 0; + } + + if (!player->IsPlayer()) { + lua_interface->LogError("LUA EndAutoMount command error: spawn is not a player"); + return 0; + } + + Client* client = player->GetZone()->GetClientBySpawn(player); + if (!client) { + lua_interface->LogError("LUA EndAutoMount command error: unable to get a client from the given player"); + return 0; + } + client->EndAutoMount(); + + return 0; +} + +int EQ2Emu_lua_IsOnAutoMount(lua_State* state) { + if (!lua_interface) + return 0; + + Spawn* player = lua_interface->GetSpawn(state); + if (!player) { + lua_interface->LogError("LUA IsOnAutoMount command error: spawn in not valid"); + return 0; + } + + if (!player->IsPlayer()) { + lua_interface->LogError("LUA IsOnAutoMount command error: spawn is not a player"); + return 0; + } + + Client* client = player->GetZone()->GetClientBySpawn(player); + if (!client) { + lua_interface->LogError("LUA IsOnAutoMount command error: unable to get a client from the given player"); + return 0; + } + + lua_interface->SetBooleanValue(state, client->GetOnAutoMount()); + return 1; +} + +int EQ2Emu_lua_SetPlayerHistory(lua_State* state) { + if (!lua_interface) + return 0; + + Spawn* player = lua_interface->GetSpawn(state); + int32 event_id = lua_interface->GetInt32Value(state, 2); + int32 value = lua_interface->GetInt32Value(state, 3); + int32 value2 = lua_interface->GetInt32Value(state, 4); + + if (!player) { + lua_interface->LogError("LUA SetPlayerHistory command error: spawn is not valid"); + return 0; + } + + if (!player->IsPlayer()) { + lua_interface->LogError("LUA SetPlayerHistory command error: spawn is not a player"); + return 0; + } + + ((Player*)player)->UpdateLUAHistory(event_id, value, value2); + return 0; +} + +int EQ2Emu_lua_GetPlayerHistory(lua_State* state) { + if (!lua_interface) + return 0; + + Spawn* player = lua_interface->GetSpawn(state); + int32 event_id = lua_interface->GetInt32Value(state, 2); + + if (!player) { + lua_interface->LogError("LUA GetPlayerHistory command error: spawn is not valid"); + return 0; + } + + if (!player->IsPlayer()) { + lua_interface->LogError("LUA GetPlayerHistory command error: spawn is not a player"); + return 0; + } + + LUAHistory* hd = ((Player*)player)->GetLUAHistory(event_id); + if (!hd) + return 0; + + lua_interface->SetInt32Value(state, hd->Value); + lua_interface->SetInt32Value(state, hd->Value2); + return 2; +} + +int EQ2Emu_lua_SetGridID(lua_State* state) { + if (!lua_interface) + return 0; + + Spawn* spawn = lua_interface->GetSpawn(state); + int32 grid = lua_interface->GetInt32Value(state, 2); + + if (!spawn) { + lua_interface->LogError("LUA SetGridID command error: spawn is not valid"); + return 0; + } + + if (grid == 0) { + lua_interface->LogError("LUA SetGridID command error: grid is not valid"); + return 0; + } + + spawn->SetPos(&(spawn->appearance.pos.grid_id), grid); + return 0; +} + +int EQ2Emu_lua_SetRequiredHistory(lua_State* state){ + if (!lua_interface) + return 0; + + Spawn* spawn = lua_interface->GetSpawn(state); + int32 event_id = lua_interface->GetInt32Value(state, 2); + int32 value1 = lua_interface->GetInt32Value(state, 3); + int32 value2 = lua_interface->GetInt32Value(state, 4); + bool private_spawn = (lua_interface->GetInt8Value(state, 5) == 1); + int16 flag_override = lua_interface->GetInt16Value(state, 6); + + if (!spawn){ + lua_interface->LogError("LUA SetRequiredHistory command error: spawn is not valid"); + return 0; + } + + //Add this quest to the list of required quests for this spawn + spawn->SetRequiredHistory(event_id, value1, value2); + //If private spawn value set + if (private_spawn){ + //Set the spawn to be private when not granted access via history + spawn->AddAllowAccessSpawn(spawn); + spawn->SetPrivateQuestSpawn(true); + } + //This value will override vis_flags in the vis packet + if (flag_override > 0) + spawn->SetQuestsRequiredOverride(flag_override); + return 0; +} + +int EQ2Emu_lua_GetQuestStepProgress(lua_State* state) { + if (!lua_interface) + return 0; + + Spawn* player = lua_interface->GetSpawn(state); + int32 quest_id = lua_interface->GetInt32Value(state, 2); + int32 step_id = lua_interface->GetInt32Value(state, 3); + + if (!player) { + lua_interface->LogError("LUA GetQuestStepProgress command error: spawn is not valid"); + return 0; + } + + if (!player->IsPlayer()) { + lua_interface->LogError("LUA GetQuestStepProgress command error: spawn is not a player"); + return 0; + } + + lua_interface->SetInt32Value(state, ((Player*)player)->GetStepProgress(quest_id, step_id)); + + return 1; +} + +int EQ2Emu_lua_SetPlayerLevel(lua_State* state) { + if (!lua_interface) + return 0; + + Spawn* player = lua_interface->GetSpawn(state); + int8 level = lua_interface->GetInt8Value(state, 2); + + if (!player) { + lua_interface->LogError("LUA SetPlayerLevel command error: spawn is not valid"); + return 0; + } + + if (!player->IsPlayer()) { + lua_interface->LogError("LUA SetPlayerLevel command error: spawn is not a player"); + return 0; + } + + if (level == 0) { + lua_interface->LogError("LUA SetPlayerLevel command error: new level can't be 0"); + return 0; + } + + Client* client = player->GetZone()->GetClientBySpawn(player); + if (!client) { + lua_interface->LogError("LUA SetPlayerLevel command error: unable to get a client from the given spawn"); + return 0; + } + + client->ChangeLevel(client->GetPlayer()->GetLevel(), level); + client->GetPlayer()->SetXP(1); + client->GetPlayer()->SetNeededXP(); + + return 0; +} + +int EQ2Emu_lua_AddCoin(lua_State* state) { + if (!lua_interface) + return 0; + + Spawn* player = lua_interface->GetSpawn(state); + int32 amount = lua_interface->GetInt32Value(state, 2); + + if (!player) { + lua_interface->LogError("LUA AddCoin command error: spawn is not valid"); + return 0; + } + + if (!player->IsPlayer()){ + lua_interface->LogError("LUA AddCoin command error: spawn is not a player"); + return 0; + } + + if (amount == 0) { + lua_interface->LogError("LUA AddCoin command error: amount must be greater then 0"); + return 0; + } + + ((Player*)player)->AddCoins(amount); + return 0; +} + +int EQ2Emu_lua_RemoveCoin(lua_State* state) { + if (!lua_interface) + return 0; + + Spawn* player = lua_interface->GetSpawn(state); + int32 amount = lua_interface->GetInt32Value(state, 2); + + if (!player) { + lua_interface->LogError("LUA RemoveCoin command error: spawn is not valid"); + return 0; + } + + if (!player->IsPlayer()){ + lua_interface->LogError("LUA RemoveCoin command error: spawn is not a player"); + return 0; + } + + if (amount == 0) { + lua_interface->LogError("LUA RemoveCoin command error: amount must be greater then 0"); + return 0; + } + + lua_interface->SetBooleanValue(state, ((Player*)player)->RemoveCoins(amount)); + return 1; +} + +int EQ2Emu_lua_GetPlayersInZone(lua_State* state) { + if (!lua_interface) + return 0; + + ZoneServer* zone = lua_interface->GetZone(state); + if (!zone) { + lua_interface->LogError("LUA GetPlayersInZone command error: zone is not valid"); + return 0; + } + + vector players = zone->GetPlayers(); + if (players.size() == 0) + return 0; + + lua_createtable(state, players.size(), 0); + int newTable = lua_gettop(state); + for (int32 i = 0; i < players.size(); i++) { + lua_interface->SetSpawnValue(state, players.at(i)); + lua_rawseti(state, newTable, i + 1); + } + + return 1; +} + +int EQ2Emu_lua_SpawnGroupByID(lua_State* state){ + if (!lua_interface) + return 0; + + ZoneServer* zone = lua_interface->GetZone(state, 1); + if (!zone) { + lua_interface->LogError("LUA GetPlayersInZone command error: zone is not valid"); + return 0; + } + + int32 group_id = lua_interface->GetInt32Value(state, 2); + + //Map of + map* locs = zone->GetSpawnLocationsByGroup(group_id); + map::iterator itr; + + vector group; + + for (itr = locs->begin(); itr != locs->end(); itr++){ + SpawnLocation* location = zone->GetSpawnLocation(itr->second); + if (!location) { + lua_interface->LogError("LUA SpawnByLocationID command error: no location found for the given ID (%u)", itr->second); + return 0; + } + + Spawn* spawn = 0; + if (location->entities[0]) { + if (location->entities[0]->spawn_type == SPAWN_ENTRY_TYPE_NPC) + spawn = zone->AddNPCSpawn(location, location->entities[0]); + else if (location->entities[0]->spawn_type == SPAWN_ENTRY_TYPE_GROUNDSPAWN) + spawn = zone->AddGroundSpawn(location, location->entities[0]); + else if (location->entities[0]->spawn_type == SPAWN_ENTRY_TYPE_OBJECT) + spawn = zone->AddObjectSpawn(location, location->entities[0]); + else if (location->entities[0]->spawn_type == SPAWN_ENTRY_TYPE_WIDGET) + spawn = zone->AddWidgetSpawn(location, location->entities[0]); + else if (location->entities[0]->spawn_type == SPAWN_ENTRY_TYPE_SIGN) + spawn = zone->AddSignSpawn(location, location->entities[0]); + + if (spawn) { + const char* script = 0; + for (int x = 0; x < 3; x++) { + switch (x) { + case 0: + script = world.GetSpawnEntryScript(location->entities[0]->spawn_entry_id); + break; + case 1: + script = world.GetSpawnLocationScript(location->entities[0]->spawn_location_id); + break; + case 2: + script = world.GetSpawnScript(location->entities[0]->spawn_id); + break; + } + if (script && lua_interface->GetSpawnScript(script) != 0) { + spawn->SetSpawnScript(string(script)); + break; + } + } + + zone->CallSpawnScript(spawn, SPAWN_SCRIPT_SPAWN); + lua_interface->SetSpawnValue(state, spawn); + group.push_back(spawn); + } + else { + LogWrite(ZONE__ERROR, 0, "Zone", "Error adding spawn to zone"); + safe_delete(spawn); + } + } + } + + if (!group.empty()){ + lua_createtable(state, group.size(), 0); + int newTable = lua_gettop(state); + for (int32 i = 0; i < group.size(); i++) { + lua_interface->SetSpawnValue(state, group[i]); + lua_rawseti(state, newTable, i + 1); + } + } + else + lua_pushnil(state); + + return 1; +} + +int EQ2Emu_lua_SetSpawnAnimation(lua_State* state) { + if (!lua_interface) + return 0; + + Spawn* spawn = lua_interface->GetSpawn(state, 1); + int32 anim_id = lua_interface->GetInt32Value(state, 2); + int16 leeway = lua_interface->GetInt16Value(state, 3); + + if (!spawn) { + lua_interface->LogError("LUA SetSpawnAnimation command error: spawn is not valid"); + return 0; + } + + if (anim_id == 0) { + lua_interface->LogError("LUA SetSpawnAnimation command error: anim_id is not valid"); + return 0; + } + + if (leeway == 0) + leeway = 5000; + + spawn->SetSpawnAnim(anim_id); + spawn->SetSpawnAnimLeeway(leeway); + + return 0; +} + +int EQ2Emu_lua_GetClientVersion(lua_State* state) { + if (!lua_interface) + return 0; + + Spawn* player = lua_interface->GetSpawn(state); + if (!player) { + return 0; + } + + Client* client = player->GetZone()->GetClientBySpawn(player); + if (!client) { + return 0; + } + + + lua_interface->SetInt32Value(state, client->GetVersion()); + return 1; +} + +int EQ2Emu_lua_GetItemID(lua_State* state) { + if (!lua_interface) + return 0; + + Item* item = lua_interface->GetItem(state); + if (!item) { + lua_interface->LogError("LUA GetItemID command error: item is not valid"); + return 0; + } + + lua_interface->SetInt32Value(state, item->details.item_id); + return 1; +} + +int EQ2Emu_lua_IsEntity(lua_State* state) { + if (!lua_interface) + return 0; + + Spawn* spawn = lua_interface->GetSpawn(state); + if (!spawn) { + lua_interface->LogError("LUA IsEntity command error: spawn is not valid"); + return 0; + } + + lua_interface->SetBooleanValue(state, spawn->IsEntity()); + return 1; +} + +int EQ2Emu_lua_GetOrigX(lua_State* state) { + if (!lua_interface) + return 0; + + Spawn* spawn = lua_interface->GetSpawn(state); + if (!spawn) { + lua_interface->LogError("LUA GetOrigX command error: spawn is not valid"); + return 0; + } + + lua_interface->SetFloatValue(state, spawn->GetSpawnOrigX()); + return 1; +} + +int EQ2Emu_lua_GetOrigY(lua_State* state) { + if (!lua_interface) + return 0; + + Spawn* spawn = lua_interface->GetSpawn(state); + if (!spawn) { + lua_interface->LogError("LUA GetOrigY command error: spawn is not valid"); + return 0; + } + + lua_interface->SetFloatValue(state, spawn->GetSpawnOrigY()); + return 1; +} + +int EQ2Emu_lua_GetOrigZ(lua_State* state) { + if (!lua_interface) + return 0; + + Spawn* spawn = lua_interface->GetSpawn(state); + if (!spawn) { + lua_interface->LogError("LUA GetOrigZ command error: spawn is not valid"); + return 0; + } + + lua_interface->SetFloatValue(state, spawn->GetSpawnOrigZ()); + return 1; +} + +int EQ2Emu_lua_GetPCTOfHP(lua_State* state) { + if (!lua_interface) + return 0; + + Spawn* spawn = lua_interface->GetSpawn(state); + float pct = lua_interface->GetFloatValue(state, 2); + if (!spawn) { + lua_interface->LogError("LUA GetPCTOfHP command error: spawn is not valid"); + return 0; + } + + if (pct == 0) { + lua_interface->LogError("LUA GetPCTOfHP command error: pct is not valid"); + return 0; + } + + int32 amount = std::round(spawn->GetTotalHP() * (pct / 100)); + lua_interface->SetInt32Value(state, amount); + return 1; +} + +int EQ2Emu_lua_GetPCTOfPower(lua_State* state) { + if (!lua_interface) + return 0; + + Spawn* spawn = lua_interface->GetSpawn(state); + float pct = lua_interface->GetFloatValue(state, 2); + if (!spawn) { + lua_interface->LogError("LUA GetPCTOfPower command error: spawn is not valid"); + return 0; + } + + if (pct == 0) { + lua_interface->LogError("LUA GetPCTOfPower command error: pct is not valid"); + return 0; + } + + int32 amount = std::round(spawn->GetTotalPower() * (pct / 100)); + lua_interface->SetInt32Value(state, amount); + return 1; +} + +int EQ2Emu_lua_GetBoundZoneID(lua_State* state) { + if (!lua_interface) + return 0; + + Spawn* spawn = lua_interface->GetSpawn(state); + if (!spawn) { + lua_interface->LogError("LUA GetBoundZoneID command error: spawn is not valid"); + return 0; + } + + if (!spawn->IsPlayer()) { + lua_interface->LogError("LUA GetBoundZoneID command error: spawn is not a player"); + return 0; + } + + lua_interface->SetInt32Value(state, ((Player*)spawn)->GetPlayerInfo()->GetBindZoneID()); + return 1; +} + +int EQ2Emu_lua_Evac(lua_State* state) { + if (!lua_interface) + return 0; + + Spawn* target = lua_interface->GetSpawn(state); + + if (target) { + float x = target->GetZone()->GetSafeX(); + float y = target->GetZone()->GetSafeY(); + float z = target->GetZone()->GetSafeZ(); + float h = target->GetZone()->GetSafeHeading(); + + target->SetX(x); + target->SetY(y); + target->SetZ(z); + target->SetHeading(h); + + target->SetSpawnOrigX(target->GetX()); + target->SetSpawnOrigY(target->GetY()); + target->SetSpawnOrigZ(target->GetZ()); + target->SetSpawnOrigHeading(target->GetHeading()); + + if (target->IsPlayer()) { + Client* client = target->GetZone()->GetClientBySpawn(target); + if (client) { + PacketStruct* packet = configReader.getStruct("WS_TeleportWithinZone", client->GetVersion()); + if (packet) + { + packet->setDataByName("x", x); + packet->setDataByName("y", y); + packet->setDataByName("z", z); + client->QueuePacket(packet->serialize()); + safe_delete(packet); + } + } + } + } + else { + LuaSpell* spell = lua_interface->GetCurrentSpell(state); + ZoneServer* zone = spell->caster->GetZone(); + float x = spell->caster->GetZone()->GetSafeX(); + float y = spell->caster->GetZone()->GetSafeY(); + float z = spell->caster->GetZone()->GetSafeZ(); + float h = spell->caster->GetZone()->GetSafeHeading(); + + spell->MSpellTargets.readlock(__FUNCTION__, __LINE__); + for (int32 i = 0; i < spell->targets.size(); i++) { + Spawn* target2 = zone->GetSpawnByID(spell->targets.at(i)); + if (!target2) + continue; + + target2->SetX(x); + target2->SetY(y); + target2->SetZ(z); + target2->SetHeading(h); + + target2->SetSpawnOrigX(target2->GetX()); + target2->SetSpawnOrigY(target2->GetY()); + target2->SetSpawnOrigZ(target2->GetZ()); + target2->SetSpawnOrigHeading(target2->GetHeading()); + + if (target2->IsPlayer()) { + Client* client = target2->GetZone()->GetClientBySpawn(target2); + if (client) { + PacketStruct* packet = configReader.getStruct("WS_TeleportWithinZone", client->GetVersion()); + if (packet) + { + packet->setDataByName("x", x); + packet->setDataByName("y", y); + packet->setDataByName("z", z); + client->QueuePacket(packet->serialize()); + safe_delete(packet); + } + } + } + } + spell->MSpellTargets.releasereadlock(__FUNCTION__, __LINE__); + } +} \ No newline at end of file diff --git a/EQ2/source/WorldServer/LuaFunctions.h b/EQ2/source/WorldServer/LuaFunctions.h new file mode 100644 index 000000000..32c28b8f7 --- /dev/null +++ b/EQ2/source/WorldServer/LuaFunctions.h @@ -0,0 +1,408 @@ +/* + EQ2Emulator: Everquest II Server Emulator + Copyright (C) 2007 EQ2EMulator Development Team (http://www.eq2emulator.net) + + This file is part of EQ2Emulator. + + EQ2Emulator is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + EQ2Emulator is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with EQ2Emulator. If not, see . +*/ +#ifndef LUA_FUNCTIONS_H +#define LUA_FUNCTIONS_H + +#include "../LUA/lua.hpp" + +//Sets +int EQ2Emu_lua_SetCurrentHP(lua_State* state); +int EQ2Emu_lua_SetMaxHP(lua_State* state); +int EQ2Emu_lua_SetMaxHPBase(lua_State* state); +int EQ2Emu_lua_SetCurrentPower(lua_State* state); +int EQ2Emu_lua_SetMaxPower(lua_State* state); +int EQ2Emu_lua_SetMaxPowerBase(lua_State* state); +int EQ2Emu_lua_SetHeading(lua_State* state); +int EQ2Emu_lua_SetModelType(lua_State* state); +int EQ2Emu_lua_SetAdventureClass(lua_State* state); +int EQ2Emu_lua_SetTradeskillClass(lua_State* state); +int EQ2Emu_lua_SetMount(lua_State* state); +int EQ2Emu_lua_SetMountColor(lua_State* state); +int EQ2Emu_lua_SetSpeed(lua_State* state); +int EQ2Emu_lua_SetPosition(lua_State* state); +int EQ2Emu_lua_AddSpellBonus(lua_State* state); +int EQ2Emu_lua_RemoveSpellBonus(lua_State* state); +int EQ2Emu_lua_AddSkillBonus(lua_State* state); +int EQ2Emu_lua_RemoveSkillBonus(lua_State* state); +int EQ2Emu_lua_AddControlEffect(lua_State* state); +int EQ2Emu_lua_RemoveControlEffect(lua_State* state); +int EQ2Emu_lua_SetInt(lua_State* state); +int EQ2Emu_lua_SetWis(lua_State* state); +int EQ2Emu_lua_SetSta(lua_State* state); +int EQ2Emu_lua_SetStr(lua_State* state); +int EQ2Emu_lua_SetAgi(lua_State* state); +int EQ2Emu_lua_SetIntBase(lua_State* state); +int EQ2Emu_lua_SetWisBase(lua_State* state); +int EQ2Emu_lua_SetStaBase(lua_State* state); +int EQ2Emu_lua_SetStrBase(lua_State* state); +int EQ2Emu_lua_SetAgiBase(lua_State* state); +int EQ2Emu_lua_SetLootCoin(lua_State* state); +int EQ2Emu_lua_SetQuestYellow(lua_State* state); + +//Gets +int EQ2Emu_lua_GetLevel(lua_State* state); +int EQ2Emu_lua_GetCurrentHP(lua_State* state); +int EQ2Emu_lua_GetMaxHP(lua_State* state); +int EQ2Emu_lua_GetMaxHPBase(lua_State* state); +int EQ2Emu_lua_GetCurrentPower(lua_State* state); +int EQ2Emu_lua_GetName(lua_State* state); +int EQ2Emu_lua_GetMaxPower(lua_State* state); +int EQ2Emu_lua_GetMaxPowerBase(lua_State* state); +int EQ2Emu_lua_GetDistance(lua_State* state); +int EQ2Emu_lua_GetX(lua_State* state); +int EQ2Emu_lua_GetY(lua_State* state); +int EQ2Emu_lua_GetZ(lua_State* state); +int EQ2Emu_lua_GetHeading(lua_State* state); +int EQ2Emu_lua_GetModelType(lua_State* state); +int EQ2Emu_lua_GetRace(lua_State* state); +int EQ2Emu_lua_GetRaceName(lua_State* state); +int EQ2Emu_lua_GetMount(lua_State* state); +int EQ2Emu_lua_GetClass(lua_State* state); +int EQ2Emu_lua_GetClassName(lua_State* state); +int EQ2Emu_lua_GetArchetypeName(lua_State* state); +int EQ2Emu_lua_GetSpeed(lua_State* state); +int EQ2Emu_lua_HasMoved(lua_State* state); +int EQ2Emu_lua_GetInt(lua_State* state); +int EQ2Emu_lua_GetWis(lua_State* state); +int EQ2Emu_lua_GetSta(lua_State* state); +int EQ2Emu_lua_GetStr(lua_State* state); +int EQ2Emu_lua_GetAgi(lua_State* state); +int EQ2Emu_lua_GetIntBase(lua_State* state); +int EQ2Emu_lua_GetWisBase(lua_State* state); +int EQ2Emu_lua_GetStaBase(lua_State* state); +int EQ2Emu_lua_GetStrBase(lua_State* state); +int EQ2Emu_lua_GetAgiBase(lua_State* state); +int EQ2Emu_lua_GetLootCoin(lua_State* state); +int EQ2Emu_lua_GetSpawn(lua_State* state); +int EQ2Emu_lua_GetVariableValue(lua_State* state); +int EQ2Emu_lua_GetCoinMessage(lua_State* state); +int EQ2Emu_lua_GetSpawnByGroupID(lua_State* state); +int EQ2Emu_lua_GetSpawnByLocationID(lua_State* state); +int EQ2Emu_lua_GetSpawnID(lua_State* state); +int EQ2Emu_lua_GetSpawnGroupID(lua_State* state); +int EQ2Emu_lua_GetSpawnLocationID(lua_State* state); +int EQ2Emu_lua_GetSpawnLocationPlacementID(lua_State* state); +int EQ2Emu_lua_GetFactionAmount(lua_State* state); +int EQ2Emu_lua_GetGender(lua_State* state); +int EQ2Emu_lua_GetTarget(lua_State* state); +int EQ2Emu_lua_HasFreeSlot(lua_State* state); +int EQ2Emu_lua_HasItemEquipped(lua_State* state); +int EQ2Emu_lua_GetEquippedItemBySlot(lua_State* state); +int EQ2Emu_lua_GetEquippedItemByID(lua_State* state); +int EQ2Emu_lua_GetItemByID(lua_State* state); +int EQ2Emu_lua_GetItemType(lua_State* state); +int EQ2Emu_lua_GetSpellName(lua_State* state); + +//Misc +int EQ2Emu_lua_SpawnSet(lua_State* state); +int EQ2Emu_lua_KillSpawn(lua_State* state); +int EQ2Emu_lua_KillSpawnByDistance(lua_State* state); +int EQ2Emu_lua_SpawnSetByDistance(lua_State* state); +int EQ2Emu_lua_SetRequiredQuest(lua_State* state); +int EQ2Emu_lua_SetRequiredHistory(lua_State* state); +int EQ2Emu_lua_Despawn(lua_State* state); +int EQ2Emu_lua_AddHate(lua_State* state); +int EQ2Emu_lua_GetZone(lua_State* state); +int EQ2Emu_lua_GetZoneName(lua_State* state); +int EQ2Emu_lua_GetZoneID(lua_State* state); +int EQ2Emu_lua_Zone(lua_State* state); +int EQ2Emu_lua_ModifyPower(lua_State* state); +int EQ2Emu_lua_ModifyHP(lua_State* state); +int EQ2Emu_lua_ModifyTotalPower(lua_State* state); +int EQ2Emu_lua_ModifyTotalHP(lua_State* state); +int EQ2Emu_lua_SpellHeal(lua_State* state); +int EQ2Emu_lua_SummonItem(lua_State* state); +int EQ2Emu_lua_RemoveItem(lua_State* state); +int EQ2Emu_lua_HasItem(lua_State* state); +int EQ2Emu_lua_Spawn(lua_State* state); +int EQ2Emu_lua_AddSpawnAccess(lua_State* state); +int EQ2Emu_lua_CastSpell(lua_State* state); +int EQ2Emu_lua_SpellDamage(lua_State* state); +int EQ2Emu_lua_FaceTarget(lua_State* state); +int EQ2Emu_lua_MoveToLocation(lua_State* state); +int EQ2Emu_lua_Say(lua_State* state); +int EQ2Emu_lua_Shout(lua_State* state); +int EQ2Emu_lua_SayOOC(lua_State* state); +int EQ2Emu_lua_Emote(lua_State* state); +int EQ2Emu_lua_IsPlayer(lua_State* state); +int EQ2Emu_lua_MovementLoopAdd(lua_State* state); +int EQ2Emu_lua_GetCurrentZoneSafeLocation(lua_State* state); +int EQ2Emu_lua_PlayFlavor(lua_State* state); +int EQ2Emu_lua_PlaySound(lua_State* state); +int EQ2Emu_lua_PlayVoice(lua_State* state); +int EQ2Emu_lua_PlayAnimation(lua_State* state); +int EQ2Emu_lua_AddLootItem(lua_State* state); +int EQ2Emu_lua_RemoveLootItem(lua_State* state); +int EQ2Emu_lua_AddLootCoin(lua_State* state); +int EQ2Emu_lua_GiveLoot(lua_State* state); +int EQ2Emu_lua_HasPendingLoot(lua_State* state); +int EQ2Emu_lua_HasPendingLootItem(lua_State* state); +int EQ2Emu_lua_CreateConversation(lua_State* state); +int EQ2Emu_lua_AddConversationOption(lua_State* state); +int EQ2Emu_lua_StartConversation(lua_State* state); +int EQ2Emu_lua_StartDialogConversation(lua_State* state); +//int EQ2Emu_lua_StartItemConversation(lua_State* state); +int EQ2Emu_lua_CloseConversation(lua_State* state); +int EQ2Emu_lua_CloseItemConversation(lua_State* state); +int EQ2Emu_lua_SetPlayerProximityFunction(lua_State* state); +int EQ2Emu_lua_SetLocationProximityFunction(lua_State* state); +int EQ2Emu_lua_IsBindAllowed(lua_State* state); +int EQ2Emu_lua_IsGateAllowed(lua_State* state); +int EQ2Emu_lua_Bind(lua_State* state); +int EQ2Emu_lua_Gate(lua_State* state); +int EQ2Emu_lua_IsAlive(lua_State* state); +int EQ2Emu_lua_IsInCombat(lua_State* state); +int EQ2Emu_lua_SendMessage(lua_State* state); +int EQ2Emu_lua_SendPopUpMessage(lua_State* state); +int EQ2Emu_lua_SetServerControlFlag(lua_State* state); +int EQ2Emu_lua_ToggleTracking(lua_State* state); +int EQ2Emu_lua_AddPrimaryEntityCommand(lua_State* state); +int EQ2Emu_lua_AddSpellBookEntry(lua_State* state); +int EQ2Emu_lua_Attack(lua_State* state); +int EQ2Emu_lua_ApplySpellVisual(lua_State* state); +int EQ2Emu_lua_Interrupt(lua_State* state); +int EQ2Emu_lua_Stealth(lua_State* state); +int EQ2Emu_lua_IsStealthed(lua_State* state); +int EQ2Emu_lua_IsInvis(lua_State* state); +int EQ2Emu_lua_AddSpawnIDAccess(lua_State* state); +int EQ2Emu_lua_RemoveSpawnIDAccess(lua_State* state); +int EQ2Emu_lua_HasRecipeBook(lua_State* state); +int EQ2Emu_lua_SpawnMove(lua_State* state); +int EQ2Emu_lua_AddTransportSpawn(lua_State* state); +int EQ2Emu_lua_PerformCameraShake(lua_State* state); + +//Quest Stuff +int EQ2Emu_lua_SetStepComplete(lua_State* state); +int EQ2Emu_lua_AddStepProgress(lua_State* state); +int EQ2Emu_lua_GetTaskGroupStep(lua_State* state); +int EQ2Emu_lua_QuestStepIsComplete(lua_State* state); +int EQ2Emu_lua_GetQuestStep(lua_State* state); +int EQ2Emu_lua_RegisterQuest(lua_State* state); +int EQ2Emu_lua_OfferQuest(lua_State* state); +int EQ2Emu_lua_SetQuestPrereqLevel(lua_State* state); +int EQ2Emu_lua_AddQuestPrereqQuest(lua_State* state); +int EQ2Emu_lua_AddQuestPrereqItem(lua_State* state); +int EQ2Emu_lua_AddQuestPrereqFaction(lua_State* state); +int EQ2Emu_lua_AddQuestPrereqClass(lua_State* state); +int EQ2Emu_lua_AddQuestPrereqRace(lua_State* state); +int EQ2Emu_lua_AddQuestPrereqModelType(lua_State* state); +int EQ2Emu_lua_AddQuestPrereqTradeskillLevel(lua_State* state); +int EQ2Emu_lua_AddQuestPrereqTradeskillClass(lua_State* state); +int EQ2Emu_lua_AddQuestRewardItem(lua_State* state); +int EQ2Emu_lua_AddQuestSelectableRewardItem(lua_State* state); +int EQ2Emu_lua_AddQuestRewardCoin(lua_State* state); +int EQ2Emu_lua_AddQuestRewardFaction(lua_State* state); +int EQ2Emu_lua_SetQuestRewardStatus(lua_State* state); +int EQ2Emu_lua_SetQuestRewardComment(lua_State* state); +int EQ2Emu_lua_SetQuestRewardExp(lua_State* state); +int EQ2Emu_lua_AddQuestStep(lua_State* state); +int EQ2Emu_lua_AddQuestStepKill(lua_State* state); +int EQ2Emu_lua_AddQuestStepChat(lua_State* state); +int EQ2Emu_lua_AddQuestStepObtainItem(lua_State* state); +int EQ2Emu_lua_AddQuestStepLocation(lua_State* state); +int EQ2Emu_lua_AddQuestStepSpell(lua_State* state); +int EQ2Emu_lua_AddQuestStepCraft(lua_State* state); +int EQ2Emu_lua_AddQuestStepHarvest(lua_State* state); +int EQ2Emu_lua_AddQuestStepCompleteAction(lua_State* state); +int EQ2Emu_lua_AddQuestStepProgressAction(lua_State* state); +int EQ2Emu_lua_SetQuestCompleteAction(lua_State* state); +int EQ2Emu_lua_GiveQuestReward(lua_State* state); +int EQ2Emu_lua_UpdateQuestTaskGroupDescription(lua_State* state); +int EQ2Emu_lua_UpdateQuestStepDescription(lua_State* state); +int EQ2Emu_lua_UpdateQuestDescription(lua_State* state); +int EQ2Emu_lua_UpdateQuestZone(lua_State* state); +int EQ2Emu_lua_SetCompletedDescription(lua_State* state); +int EQ2Emu_lua_ProvidesQuest(lua_State* state); +int EQ2Emu_lua_HasQuest(lua_State* state); +int EQ2Emu_lua_HasCompletedQuest(lua_State* state); +int EQ2Emu_lua_QuestIsComplete(lua_State* state); +int EQ2Emu_lua_QuestReturnNPC(lua_State* state); +int EQ2Emu_lua_GetQuest(lua_State* state); +int EQ2Emu_lua_AddTimer(lua_State* state); +int EQ2Emu_lua_Harvest(lua_State* state); +int EQ2Emu_lua_SetCompleteFlag(lua_State* state); +int EQ2Emu_lua_CanReceiveQuest(lua_State* state); + +int EQ2Emu_lua_HasCollectionsToHandIn(lua_State *state); +int EQ2Emu_lua_HandInCollections(lua_State *state); + +int EQ2Emu_lua_UseWidget(lua_State* state); +int EQ2Emu_lua_SummonPet(lua_State* state); +int EQ2Emu_lua_Charm(lua_State* state); + +int EQ2Emu_lua_SetSpellList(lua_State* state); +int EQ2Emu_lua_GetPet(lua_State* state); +int EQ2Emu_lua_GetGroup(lua_State* state); + +int EQ2Emu_lua_CreateOptionWindow(lua_State* state); +int EQ2Emu_lua_AddOptionWindowOption(lua_State* state); +int EQ2Emu_lua_SendOptionWindow(lua_State* state); + +int EQ2Emu_lua_GetTradeskillClass(lua_State* state); +int EQ2Emu_lua_GetTradeskillLevel(lua_State* state); +int EQ2Emu_lua_GetTradeskillClassName(lua_State* state); +int EQ2Emu_lua_SetTradeskillLevel(lua_State* state); + +int EQ2Emu_lua_SummonDeityPet(lua_State* state); +int EQ2Emu_lua_SummonCosmeticPet(lua_State* state); +int EQ2Emu_lua_DismissPet(lua_State* state); +int EQ2Emu_lua_GetCharmedPet(lua_State* state); +int EQ2Emu_lua_GetDeityPet(lua_State* state); +int EQ2Emu_lua_GetCosmeticPet(lua_State* state); + +int EQ2Emu_lua_SetQuestFeatherColor(lua_State* state); +int EQ2Emu_lua_RemoveSpawnAccess(lua_State* state); +int EQ2Emu_lua_SpawnByLocationID(lua_State* state); +int EQ2Emu_lua_SpawnGroupByID(lua_State* state); +int EQ2Emu_lua_CastEntityCommand(lua_State* state); +int EQ2Emu_lua_SetLuaBrain(lua_State* state); +int EQ2Emu_lua_SetBrainTick(lua_State* state); +int EQ2Emu_lua_SetFollowTarget(lua_State* state); +int EQ2Emu_lua_GetFollowTarget(lua_State* state); +int EQ2Emu_lua_ToggleFollow(lua_State* state); +int EQ2Emu_lua_IsFollowing(lua_State* state); +int EQ2Emu_lua_SetTempVariable(lua_State* state); +int EQ2Emu_lua_GetTempVariable(lua_State* state); +int EQ2Emu_lua_GiveQuestItem(lua_State*state); +int EQ2Emu_lua_SetQuestRepeatable(lua_State* state); + +int EQ2Emu_lua_AddWard(lua_State* state); +int EQ2Emu_lua_AddToWard(lua_State* state); +int EQ2Emu_lua_RemoveWard(lua_State* state); +int EQ2Emu_lua_GetWardAmountLeft(lua_State* state); + +//Combat AI related +int EQ2Emu_lua_SetTarget(lua_State* state); +int EQ2Emu_lua_IsPet(lua_State* state); +int EQ2Emu_lua_GetOwner(lua_State* state); +int EQ2Emu_lua_SetInCombat(lua_State* state); +int EQ2Emu_lua_CompareSpawns(lua_State* state); +int EQ2Emu_lua_Runback(lua_State* state); +int EQ2Emu_lua_GetRunbackDistance(lua_State* state); +int EQ2Emu_lua_IsCasting(lua_State* state); +int EQ2Emu_lua_IsMezzed(lua_State* state); +int EQ2Emu_lua_IsStunned(lua_State* state); +int EQ2Emu_lua_IsMezzedOrStunned(lua_State* state); +int EQ2Emu_lua_ClearEncounter(lua_State* state); +int EQ2Emu_lua_ClearHate(lua_State* state); +int EQ2Emu_lua_GetMostHated(lua_State* state); +int EQ2Emu_lua_GetEncounterSize(lua_State* state); +int EQ2Emu_lua_HasRecovered(lua_State* state); +int EQ2Emu_lua_ProcessMelee(lua_State* state); +int EQ2Emu_lua_ProcessSpell(lua_State* state); +int EQ2Emu_lua_GetEncounter(lua_State* state); +int EQ2Emu_lua_GetHateList(lua_State* state); +int EQ2Emu_lua_HasGroup(lua_State* state); +int EQ2Emu_lua_HasSpellEffect(lua_State* state); + +int EQ2Emu_lua_SetSuccessTimer(lua_State* state); +int EQ2Emu_lua_SetFailureTimer(lua_State* state); +int EQ2Emu_lua_IsGroundSpawn(lua_State* state); +int EQ2Emu_lua_CanHarvest(lua_State* state); + +int EQ2Emu_lua_SummonDumbFirePet(lua_State* state); + +int EQ2Emu_lua_GetSkillValue(lua_State* state); +int EQ2Emu_lua_GetSkillMaxValue(lua_State* state); +int EQ2Emu_lua_GetSkillName(lua_State* state); +int EQ2Emu_lua_SetSkillMaxValue(lua_State* state); +int EQ2Emu_lua_SetSkillValue(lua_State* state); +int EQ2Emu_lua_GetSkill(lua_State* state); +int EQ2Emu_lua_GetSkillIDByName(lua_State* state); + +int EQ2Emu_lua_AddProc(lua_State* state); +int EQ2Emu_lua_RemoveProc(lua_State* state); +int EQ2Emu_lua_Knockback(lua_State* state); + +int EQ2Emu_lua_IsEpic(lua_State* state); +int EQ2Emu_lua_IsHeroic(lua_State* state); +int EQ2Emu_lua_ProcDamage(lua_State* state); +int EQ2Emu_lua_LastSpellAttackHit(lua_State* state); + +int EQ2Emu_lua_IsBehind(lua_State* state); +int EQ2Emu_lua_IsFlanking(lua_State* state); +int EQ2Emu_lua_AddSpellTimer(lua_State* state); +int EQ2Emu_lua_SetItemCount(lua_State* state); +int EQ2Emu_lua_GetItemCount(lua_State* state); +int EQ2Emu_lua_Resurrect(lua_State* state); +int EQ2Emu_lua_BreatheUnderwater(lua_State* state); +int EQ2Emu_lua_BlurVision(lua_State* state); +int EQ2Emu_lua_SetVision(lua_State* state); +int EQ2Emu_lua_GetItemSkillReq(lua_State* state); +int EQ2Emu_lua_SetSpeeedMultiplier(lua_State* state); +int EQ2Emu_lua_SetIllusion(lua_State* state); +int EQ2Emu_lua_ResetIllusion(lua_State* state); +int EQ2Emu_lua_AddThreatTransfer(lua_State* state); +int EQ2Emu_lua_RemoveThreatTransfer(lua_State* state); +int EQ2Emu_lua_CureByType(lua_State* state); +int EQ2Emu_lua_CureByControlEffect(lua_State* state); +int EQ2Emu_lua_AddSpawnSpellBonus(lua_State* state); +int EQ2Emu_lua_CancelSpell(lua_State* state); +int EQ2Emu_lua_RemoveStealth(lua_State* state); +int EQ2Emu_lua_RemoveInvis(lua_State* state); +int EQ2Emu_lua_StartHeroicOpportunity(lua_State* state); +int EQ2Emu_lua_CopySpawnAppearance(lua_State* state); +int EQ2Emu_lua_RemoveTriggerFromSpell(lua_State* state); +int EQ2Emu_lua_GetSpellTriggerCount(lua_State* state); +int EQ2Emu_lua_SetSpellTriggerCount(lua_State* state); +int EQ2Emu_lua_AddImmunitySpell(lua_State* state); +int EQ2Emu_lua_RemoveImmunitySpell(lua_State* state); +int EQ2Emu_lua_SetSpellSnareValue(lua_State* state); +int EQ2Emu_lua_CheckRaceType(lua_State* state); +int EQ2Emu_lua_GetRaceType(lua_State* state); +int EQ2Emu_lua_GetRaceBaseType(lua_State* state); +int EQ2Emu_lua_GetQuestFlags(lua_State* state); +int EQ2Emu_lua_SetQuestFlags(lua_State* state); +int EQ2Emu_lua_SetQuestTimer(lua_State* state); +int EQ2Emu_lua_RemoveQuestStep(lua_State* state); +int EQ2Emu_lua_ResetQuestStep(lua_State* state); +int EQ2Emu_lua_SetQuestTimerComplete(lua_State* state); +int EQ2Emu_lua_AddQuestStepFailureAction(lua_State* state); +int EQ2Emu_lua_SetStepFailed(lua_State* state); +int EQ2Emu_lua_GetQuestCompleteCount(lua_State* state); +int EQ2Emu_lua_SetServerVariable(lua_State* state); +int EQ2Emu_lua_GetServerVariable(lua_State* state); +int EQ2Emu_lua_HasLanguage(lua_State* state); +int EQ2Emu_lua_AddLanguage(lua_State* state); +int EQ2Emu_lua_IsNight(lua_State* state); +int EQ2Emu_lua_AddMultiFloorLift(lua_State* state); +int EQ2Emu_lua_StartAutoMount(lua_State* state); +int EQ2Emu_lua_EndAutoMount(lua_State* state); +int EQ2Emu_lua_IsOnAutoMount(lua_State* state); +int EQ2Emu_lua_SetPlayerHistory(lua_State* state); +int EQ2Emu_lua_GetPlayerHistory(lua_State* state); +int EQ2Emu_lua_SetGridID(lua_State* state); +int EQ2Emu_lua_GetQuestStepProgress(lua_State* state); +int EQ2Emu_lua_SetPlayerLevel(lua_State* state); +int EQ2Emu_lua_AddCoin(lua_State* state); +int EQ2Emu_lua_RemoveCoin(lua_State* state); +int EQ2Emu_lua_GetPlayersInZone(lua_State* state); +int EQ2Emu_lua_SetSpawnAnimation(lua_State* state); +int EQ2Emu_lua_GetClientVersion(lua_State* state); +int EQ2Emu_lua_GetItemID(lua_State* state); +int EQ2Emu_lua_IsEntity(lua_State* state); +int EQ2Emu_lua_GetOrigX(lua_State* state); +int EQ2Emu_lua_GetOrigY(lua_State* state); +int EQ2Emu_lua_GetOrigZ(lua_State* state); +int EQ2Emu_lua_GetPCTOfHP(lua_State* state); +int EQ2Emu_lua_GetPCTOfPower(lua_State* state); +int EQ2Emu_lua_GetBoundZoneID(lua_State* state); +int EQ2Emu_lua_Evac(lua_State* state); +#endif \ No newline at end of file diff --git a/EQ2/source/WorldServer/LuaInterface.cpp b/EQ2/source/WorldServer/LuaInterface.cpp new file mode 100644 index 000000000..c9fac9d60 --- /dev/null +++ b/EQ2/source/WorldServer/LuaInterface.cpp @@ -0,0 +1,1684 @@ +/* + EQ2Emulator: Everquest II Server Emulator + Copyright (C) 2007 EQ2EMulator Development Team (http://www.eq2emulator.net) + + This file is part of EQ2Emulator. + + EQ2Emulator is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + EQ2Emulator is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with EQ2Emulator. If not, see . +*/ +#include "LuaInterface.h" +#include "LuaFunctions.h" +#include "WorldDatabase.h" +#include "../common/Log.h" + +#ifndef WIN32 + #include + #include + #include + #include + #include +#else + #include +#endif + +extern WorldDatabase database; + + +LuaInterface::LuaInterface() { + shutting_down = false; + spawn_scripts_reloading = false; + MDebugClients.SetName("LuaInterface::MDebugClients"); + MSpells.SetName("LuaInterface::MSpells"); + MSpawnScripts.SetName("LuaInterface::MSpawnScripts"); + MZoneScripts.SetName("LuaInterface::MZoneScripts"); + MQuests.SetName("LuaInterface::MQuests"); + MLUAUserData.SetName("LuaInterface::MLUAUserData"); + MLUAMain.SetName("LuaInterface::MLUAMain"); + MItemScripts.SetName("LuaInterface::MItemScripts"); + user_data_timer = new Timer(20000); + user_data_timer->Start(); + spell_delete_timer = new Timer(5000); + spell_delete_timer->Start(); +} +#ifdef WIN32 +vector* LuaInterface::GetDirectoryListing(const char* directory) { + vector* ret = new vector; + WIN32_FIND_DATA fdata; + HANDLE dhandle; + char buf[MAX_PATH]; + snprintf(buf, sizeof(buf), "%s\\*", directory); + if((dhandle = FindFirstFile(buf, &fdata)) == INVALID_HANDLE_VALUE) { + safe_delete(ret); + return 0; + } + + ret->push_back(string(fdata.cFileName)); + + while(1) { + if(FindNextFile(dhandle, &fdata)) { + ret->push_back(string(fdata.cFileName)); + } + else{ + if(GetLastError() == ERROR_NO_MORE_FILES) { + break; + } else { + safe_delete(ret); + FindClose(dhandle); + return 0; + } + } + } + + if(FindClose(dhandle) == 0) { + safe_delete(ret); + return 0; + } + return ret; +} +#else +vector* LuaInterface::GetDirectoryListing(const char* directory) { + vector* ret = new vector; + DIR *dp; + struct dirent *ep; + dp = opendir (directory); + if (dp != NULL){ + while ((ep = readdir (dp))) + ret->push_back(string(ep->d_name)); + (void) closedir (dp); + } + else { + safe_delete(ret); + return 0; + } + + return ret; +} +#endif + +LuaInterface::~LuaInterface() { + shutting_down = true; + MLUAMain.lock(); + DestroySpells(); + DestroySpawnScripts(); + DestroyQuests(); + DestroyItemScripts(); + DestroyZoneScripts(); + DeleteUserDataPtrs(true); + DeletePendingSpells(true); + safe_delete(user_data_timer); + safe_delete(spell_delete_timer); +} + +void LuaInterface::Process() { + if(shutting_down) + return; + MLUAMain.lock(); + if(user_data_timer && user_data_timer->Check()) + DeleteUserDataPtrs(false); + if(spell_delete_timer && spell_delete_timer->Check()) + DeletePendingSpells(false); + MLUAMain.unlock(); +} + +void LuaInterface::DestroySpells() { + map::iterator itr; + MSpells.lock(); + for(itr = spells.begin(); itr != spells.end(); itr++){ + lua_close(itr->second->state); + safe_delete(itr->second); + } + spells.clear(); + MSpells.unlock(); +} + +void LuaInterface::DestroyQuests(bool reload) { + map::iterator itr; + MQuests.lock(); + for(itr = quest_states.begin(); itr != quest_states.end(); itr++){ + safe_delete(quests[itr->first]); + lua_close(itr->second); + } + quests.clear(); + quest_states.clear(); + map::iterator mutex_itr; + for(mutex_itr = quests_mutex.begin(); mutex_itr != quests_mutex.end(); mutex_itr++){ + safe_delete(mutex_itr->second); + } + quests_mutex.clear(); + if(reload) + database.LoadQuests(); + MQuests.unlock(); +} + +void LuaInterface::DestroyItemScripts() { + map >::iterator itr; + map::iterator state_itr; + Mutex* mutex = 0; + MItemScripts.writelock(__FUNCTION__, __LINE__); + for(itr = item_scripts.begin(); itr != item_scripts.end(); itr++){ + mutex = GetItemScriptMutex(itr->first.c_str()); + mutex->writelock(__FUNCTION__, __LINE__); + for(state_itr = itr->second.begin(); state_itr != itr->second.end(); state_itr++) + lua_close(state_itr->first); + mutex->releasewritelock(__FUNCTION__, __LINE__); + safe_delete(mutex); + } + item_scripts.clear(); + item_scripts_mutex.clear(); + MItemScripts.releasewritelock(__FUNCTION__, __LINE__); +} + +void LuaInterface::DestroySpawnScripts() { + map >::iterator itr; + map::iterator state_itr; + Mutex* mutex = 0; + MSpawnScripts.writelock(__FUNCTION__, __LINE__); + for(itr = spawn_scripts.begin(); itr != spawn_scripts.end(); itr++){ + mutex = GetSpawnScriptMutex(itr->first.c_str()); + mutex->writelock(__FUNCTION__, __LINE__); + for(state_itr = itr->second.begin(); state_itr != itr->second.end(); state_itr++) + lua_close(state_itr->first); + mutex->releasewritelock(__FUNCTION__, __LINE__); + safe_delete(mutex); + } + spawn_scripts.clear(); + spawn_scripts_mutex.clear(); + MSpawnScripts.releasewritelock(__FUNCTION__, __LINE__); +} + +void LuaInterface::DestroyZoneScripts() { + map >::iterator itr; + map::iterator state_itr; + Mutex* mutex = 0; + MZoneScripts.writelock(__FUNCTION__, __LINE__); + for (itr = zone_scripts.begin(); itr != zone_scripts.end(); itr++){ + mutex = GetZoneScriptMutex(itr->first.c_str()); + mutex->writelock(__FUNCTION__, __LINE__); + for(state_itr = itr->second.begin(); state_itr != itr->second.end(); state_itr++) + lua_close(state_itr->first); + mutex->releasewritelock(__FUNCTION__, __LINE__); + safe_delete(mutex); + } + zone_scripts.clear(); + zone_scripts_mutex.clear(); + MZoneScripts.releasewritelock(__FUNCTION__, __LINE__); +} + +void LuaInterface::ReloadSpells() { + DestroySpells(); + database.LoadSpellScriptData(); +} + +bool LuaInterface::LoadLuaSpell(const char* name) { + LuaSpell* spell = 0; + string lua_script = string(name); + if (lua_script.find(".lua") == string::npos) + lua_script.append(".lua"); + lua_State* state = LoadLuaFile(lua_script.c_str()); + if(state){ + spell = new LuaSpell; + spell->file_name = lua_script; + spell->state = state; + spell->spell = 0; + spell->caster = 0; + spell->initial_target = 0; + spell->resisted = false; + spell->interrupted = false; + spell->last_spellattack_hit = false; + spell->crit = false; + spell->MSpellTargets.SetName("LuaSpell.MSpellTargets"); + spell->cancel_after_all_triggers = false; + spell->num_triggers = 0; + spell->had_triggers = false; + spell->had_dmg_remaining = false; + spell->slot_pos = 0; + spell->damage_remaining = 0; + spell->effect_bitmask = 0; + + MSpells.lock(); + if (spells.count(lua_script) > 0) { + lua_close(spells[lua_script]->state); + safe_delete(spells[lua_script]); + } + spells[lua_script] = spell; + MSpells.unlock(); + + return true; + } + return false; +} + +bool LuaInterface::LoadLuaSpell(string name) { + return LoadLuaSpell(name.c_str()); +} + +bool LuaInterface::LoadItemScript(string name) { + return LoadItemScript(name.c_str()); +} + +bool LuaInterface::LoadItemScript(const char* name) { + bool ret = false; + if(name){ + lua_State* state = LoadLuaFile(name); + if(state){ + MItemScripts.writelock(__FUNCTION__, __LINE__); + item_scripts[name][state] = false; + MItemScripts.releasewritelock(__FUNCTION__, __LINE__); + ret = true; + } + } + return ret; +} + +bool LuaInterface::LoadSpawnScript(const char* name) { + bool ret = false; + if(name){ + lua_State* state = LoadLuaFile(name); + if(state){ + MSpawnScripts.writelock(__FUNCTION__, __LINE__); + spawn_scripts[name][state] = false; + MSpawnScripts.releasewritelock(__FUNCTION__, __LINE__); + ret = true; + } + } + return ret; +} + +bool LuaInterface::LoadZoneScript(const char* name) { + bool ret = false; + if (name) { + lua_State* state = LoadLuaFile(name); + if (state) { + MZoneScripts.writelock(__FUNCTION__, __LINE__); + zone_scripts[name][state] = false; + MZoneScripts.releasewritelock(__FUNCTION__, __LINE__); + ret = true; + } + } + return ret; +} + +void LuaInterface::ProcessErrorMessage(const char* message) { + MDebugClients.lock(); + vector delete_clients; + map::iterator itr; + for(itr = debug_clients.begin(); itr != debug_clients.end(); itr++){ + if((Timer::GetCurrentTime2() - itr->second) > 60000) + delete_clients.push_back(itr->first); + else + itr->first->Message(CHANNEL_COLOR_RED, "LUA Error: %s", message); + } + for(int32 i=0;iGetQuestID()) == 0){ + ret = new Mutex(); + quests_mutex[quest->GetQuestID()] = ret; + ret->SetName(string("Quest::").append(quest->GetName())); + } + else + ret = quests_mutex[quest->GetQuestID()]; + MQuests.unlock(); + return ret; +} + +void LuaInterface::CallQuestFunction(Quest* quest, const char* function, Spawn* player, int32 step_id) { + if(shutting_down) + return; + lua_State* state = 0; + if(quest){ + LogWrite(LUA__DEBUG, 0, "LUA", "Quest: %s, function: %s", quest->GetName(), function); + Mutex* mutex = GetQuestMutex(quest); + mutex->lock(); + if(quest_states.count(quest->GetQuestID()) > 0) + state = quest_states[quest->GetQuestID()]; + if(state){ + int8 arg_count = 3; + lua_getglobal(state, function); + SetQuestValue(state, quest); + Spawn* spawn = player->GetZone()->GetSpawnByDatabaseID(quest->GetQuestGiver()); + SetSpawnValue(state, spawn); + SetSpawnValue(state, player); + if(step_id != 0xFFFFFFFF){ + SetInt32Value(state, step_id); + arg_count++; + } + if(lua_pcall(state, arg_count, 0, 0) != 0){ + LogError("Error processing quest function '%s': %s ", function, lua_tostring(state, -1)); + lua_pop(state, 1); + mutex->unlock(); + return; + } + } + mutex->unlock(); + LogWrite(LUA__DEBUG, 0, "LUA", "Done!"); + } +} + +Quest* LuaInterface::LoadQuest(int32 id, const char* name, const char* type, const char* zone, int8 level, const char* description, char* script_name) { + if(shutting_down) + return 0; + lua_State* state = LoadLuaFile(script_name); + Quest* quest = 0; + if(state){ + quest = new Quest(id); + if (name) + quest->SetName(string(name)); + if (type) + quest->SetType(string(type)); + if (zone) + quest->SetZone(string(zone)); + quest->SetLevel(level); + if (description) + quest->SetDescription(string(description)); + lua_getglobal(state, "Init"); + SetQuestValue(state, quest); + if(lua_pcall(state, 1, 0, 0) != 0){ + LogError("Error processing Quest \"%s\" (%u): %s", name ? name : "unknown", id, lua_tostring(state, -1)); + lua_pop(state, 1); + safe_delete(quest); + return 0; + } + if(!quest->GetName()){ + safe_delete(quest); + return 0; + } + quest_states[id] = state; + quests[id] = quest; + } + return quest; +} + +bool LuaInterface::LoadSpawnScript(string name) { + return LoadSpawnScript(name.c_str()); +} + +bool LuaInterface::LoadZoneScript(string name) { + return LoadZoneScript(name.c_str()); +} + +void LuaInterface::AddSpawnPointers(LuaSpell* spell, bool first_cast, bool precast, const char* function, SpellScriptTimer* timer) { + if (function) + lua_getglobal(spell->state, function); + else if (precast) + lua_getglobal(spell->state, "precast"); + else if(first_cast) + lua_getglobal(spell->state, "cast"); + else + lua_getglobal(spell->state, "tick"); + + Spawn* temp_spawn = 0; + if (timer && timer->caster && spell->caster) + temp_spawn = spell->caster->GetZone()->GetSpawnByID(timer->caster); + + if (temp_spawn) + SetSpawnValue(spell->state, temp_spawn); + else if (spell->caster) + SetSpawnValue(spell->state, spell->caster); + + temp_spawn = 0; + + if (timer && timer->target && spell->caster) + temp_spawn = spell->caster->GetZone()->GetSpawnByID(timer->target); + + if (temp_spawn) + SetSpawnValue(spell->state, temp_spawn); + else { + if(spell->caster && spell->initial_target) + SetSpawnValue(spell->state, spell->caster->GetZone()->GetSpawnByID(spell->initial_target)); + else if(spell->caster && spell->caster->GetTarget()) + SetSpawnValue(spell->state, spell->caster->GetTarget()); + else + SetSpawnValue(spell->state, 0); + } +} + +LuaSpell* LuaInterface::GetCurrentSpell(lua_State* state) { + if(current_spells.count(state) > 0) + return current_spells[state]; + return 0; +} + +bool LuaInterface::CallSpellProcess(LuaSpell* spell, int8 num_parameters) { + if(shutting_down || !spell || !spell->caster) + return false; + current_spells[spell->state] = spell; + if(lua_pcall(spell->state, num_parameters, 0, 0) != 0){ + LogError("Error running %s", lua_tostring(spell->state, -1)); + lua_pop(spell->state, 1); + RemoveSpell(spell, false); + return false; + } + return true; +} + +void LuaInterface::RemoveSpawnScript(const char* name) { + lua_State* state = 0; + Mutex* mutex = GetSpawnScriptMutex(name); + while((state = GetSpawnScript(name, false))){ + mutex->writelock(__FUNCTION__, __LINE__); + lua_close(state); + spawn_scripts[name].erase(state); + mutex->releasewritelock(__FUNCTION__, __LINE__); + } + MSpawnScripts.writelock(__FUNCTION__, __LINE__); + spawn_scripts.erase(name); + MSpawnScripts.releasewritelock(__FUNCTION__, __LINE__); +} + +bool LuaInterface::CallItemScript(lua_State* state, int8 num_parameters) { + if(shutting_down) + return false; + if(!state || lua_pcall(state, num_parameters, 0, 0) != 0){ + if (state){ + const char* err = lua_tostring(state, -1); + LogError(err); + lua_pop(state, 1); + } + return false; + } + return true; +} + +bool LuaInterface::CallSpawnScript(lua_State* state, int8 num_parameters) { + if(shutting_down) + return false; + if(!state || lua_pcall(state, num_parameters, 0, 0) != 0){ + if (state){ + const char* err = lua_tostring(state, -1); + LogError(err); + lua_pop(state, 1); + } + return false; + } + return true; +} + +bool LuaInterface::CallZoneScript(lua_State* state, int8 num_parameters) { + if(shutting_down) + return false; + if (!state || lua_pcall(state, num_parameters, 0, 0) != 0) { + if (state){ + const char* err = lua_tostring(state, -1); + LogError(err); + lua_pop(state, 1); + } + return false; + } + return true; +} + +lua_State* LuaInterface::LoadLuaFile(const char* name) { + if(shutting_down) + return 0; + lua_State* state = luaL_newstate(); + luaL_openlibs(state); + if(luaL_dofile(state, name) == 0){ + RegisterFunctions(state); + return state; + } + else{ + LogError("Error loading %s (file name: '%s')", lua_tostring(state, -1), name); + lua_pop(state, 1); + lua_close(state); + } + return 0; +} + +void LuaInterface::RemoveSpell(LuaSpell* spell, bool call_remove_function, bool can_delete) { + if(shutting_down) + return; + if(call_remove_function){ + lua_getglobal(spell->state, "remove"); + LUASpawnWrapper* spawn_wrapper = new LUASpawnWrapper(); + spawn_wrapper->spawn = spell->caster; + AddUserDataPtr(spawn_wrapper); + lua_pushlightuserdata(spell->state, spawn_wrapper); + if(spell->caster && (spell->initial_target || spell->caster->GetTarget())){ + spawn_wrapper = new LUASpawnWrapper(); + if(!spell->initial_target) + spawn_wrapper->spawn = spell->caster->GetTarget(); + else + spawn_wrapper->spawn = spell->caster->GetZone()->GetSpawnByID(spell->initial_target); + AddUserDataPtr(spawn_wrapper); + lua_pushlightuserdata(spell->state, spawn_wrapper); + } + else + lua_pushlightuserdata(spell->state, 0); + + current_spells[spell->state] = spell; + lua_pcall(spell->state, 2, 0, 0); + } + if (can_delete) { + MSpellDelete.lock(); + spells_pending_delete[spell] = Timer::GetCurrentTime2() + 10000; + MSpellDelete.unlock(); + } +} + +void LuaInterface::RegisterFunctions(lua_State* state) { + lua_register(state, "SetHP", EQ2Emu_lua_SetCurrentHP); + lua_register(state, "SetMaxHP", EQ2Emu_lua_SetMaxHP); + lua_register(state, "SetMaxHPBase", EQ2Emu_lua_SetMaxHPBase); + lua_register(state, "SetPower", EQ2Emu_lua_SetCurrentPower); + lua_register(state, "SetMaxPower", EQ2Emu_lua_SetMaxPower); + lua_register(state, "SetMaxPowerBase", EQ2Emu_lua_SetMaxPowerBase); + lua_register(state, "SetPosition", EQ2Emu_lua_SetPosition); + lua_register(state, "SetHeading", EQ2Emu_lua_SetHeading); + lua_register(state, "SetModelType", EQ2Emu_lua_SetModelType); + lua_register(state, "SetAdventureClass", EQ2Emu_lua_SetAdventureClass); + lua_register(state, "SetTradeskillClass", EQ2Emu_lua_SetTradeskillClass); + lua_register(state, "SetMount", EQ2Emu_lua_SetMount); + lua_register(state, "SetMountColor", EQ2Emu_lua_SetMountColor); + lua_register(state, "GetMount", EQ2Emu_lua_GetMount); + lua_register(state, "GetRace", EQ2Emu_lua_GetRace); + lua_register(state, "GetRaceName", EQ2Emu_lua_GetRaceName); + lua_register(state, "GetClass", EQ2Emu_lua_GetClass); + lua_register(state, "GetClassName", EQ2Emu_lua_GetClassName); + lua_register(state, "GetArchetypeName", EQ2Emu_lua_GetArchetypeName); + lua_register(state, "SetSpeed", EQ2Emu_lua_SetSpeed); + lua_register(state, "ModifyPower", EQ2Emu_lua_ModifyPower); + lua_register(state, "ModifyHP", EQ2Emu_lua_ModifyHP); + + lua_register(state, "GetDistance", EQ2Emu_lua_GetDistance); + lua_register(state, "GetHeading", EQ2Emu_lua_GetHeading); + lua_register(state, "GetLevel", EQ2Emu_lua_GetLevel); + lua_register(state, "GetHP", EQ2Emu_lua_GetCurrentHP); + lua_register(state, "GetMaxHP", EQ2Emu_lua_GetMaxHP); + lua_register(state, "GetMaxHPBase", EQ2Emu_lua_GetMaxHPBase); + lua_register(state, "GetMaxPower", EQ2Emu_lua_GetMaxPower); + lua_register(state, "GetMaxPowerBase", EQ2Emu_lua_GetMaxPowerBase); + lua_register(state, "GetName", EQ2Emu_lua_GetName); + lua_register(state, "GetPower", EQ2Emu_lua_GetCurrentPower); + lua_register(state, "GetX", EQ2Emu_lua_GetX); + lua_register(state, "GetY", EQ2Emu_lua_GetY); + lua_register(state, "GetZ", EQ2Emu_lua_GetZ); + lua_register(state, "GetSpawnID", EQ2Emu_lua_GetSpawnID); + lua_register(state, "GetSpawnGroupID", EQ2Emu_lua_GetSpawnGroupID); + lua_register(state, "GetSpawnLocationID", EQ2Emu_lua_GetSpawnLocationID); + lua_register(state, "GetSpawnLocationPlacementID", EQ2Emu_lua_GetSpawnLocationPlacementID); + lua_register(state, "GetFactionAmount", EQ2Emu_lua_GetFactionAmount); + lua_register(state, "GetGender", EQ2Emu_lua_GetGender); + lua_register(state, "GetTarget", EQ2Emu_lua_GetTarget); + lua_register(state, "HasFreeSlot", EQ2Emu_lua_HasFreeSlot); + lua_register(state, "HasItemEquipped", EQ2Emu_lua_HasItemEquipped); + lua_register(state, "GetEquippedItemByID", EQ2Emu_lua_GetEquippedItemByID); + lua_register(state, "GetEquippedItemBySlot", EQ2Emu_lua_GetEquippedItemBySlot); + lua_register(state, "GetItemByID", EQ2Emu_lua_GetItemByID); + lua_register(state, "GetItemType", EQ2Emu_lua_GetItemType); + lua_register(state, "GetSpellName", EQ2Emu_lua_GetSpellName); + lua_register(state, "PerformCameraShake", EQ2Emu_lua_PerformCameraShake); + lua_register(state, "GetModelType", EQ2Emu_lua_GetModelType); + lua_register(state, "GetSpeed", EQ2Emu_lua_GetSpeed); + lua_register(state, "HasMoved", EQ2Emu_lua_HasMoved); + lua_register(state, "SpellDamage", EQ2Emu_lua_SpellDamage); + lua_register(state, "CastSpell", EQ2Emu_lua_CastSpell); + lua_register(state, "SpellHeal", EQ2Emu_lua_SpellHeal); + lua_register(state, "SummonItem", EQ2Emu_lua_SummonItem); + lua_register(state, "RemoveItem", EQ2Emu_lua_RemoveItem); + lua_register(state, "HasItem", EQ2Emu_lua_HasItem); + lua_register(state, "SpawnMob", EQ2Emu_lua_Spawn); + lua_register(state, "SummonPet", EQ2Emu_lua_SummonPet); + lua_register(state, "AddSpawnAccess", EQ2Emu_lua_AddSpawnAccess); + lua_register(state, "GetZone", EQ2Emu_lua_GetZone); + lua_register(state, "GetZoneName", EQ2Emu_lua_GetZoneName); + lua_register(state, "GetZoneID", EQ2Emu_lua_GetZoneID); + lua_register(state, "Zone", EQ2Emu_lua_Zone); + lua_register(state, "AddHate", EQ2Emu_lua_AddHate); + lua_register(state, "IsAlive", EQ2Emu_lua_IsAlive); + lua_register(state, "IsInCombat", EQ2Emu_lua_IsInCombat); + lua_register(state, "Attack", EQ2Emu_lua_Attack); + lua_register(state, "ApplySpellVisual", EQ2Emu_lua_ApplySpellVisual); + + lua_register(state, "IsPlayer", EQ2Emu_lua_IsPlayer); + lua_register(state, "FaceTarget", EQ2Emu_lua_FaceTarget); + lua_register(state, "MoveToLocation", EQ2Emu_lua_MoveToLocation); + lua_register(state, "Shout", EQ2Emu_lua_Shout); + lua_register(state, "Say", EQ2Emu_lua_Say); + lua_register(state, "SayOOC", EQ2Emu_lua_SayOOC); + lua_register(state, "Emote", EQ2Emu_lua_Emote); + lua_register(state, "MovementLoopAddLocation", EQ2Emu_lua_MovementLoopAdd); + lua_register(state, "GetCurrentZoneSafeLocation", EQ2Emu_lua_GetCurrentZoneSafeLocation); + lua_register(state, "AddTimer", EQ2Emu_lua_AddTimer); + lua_register(state, "Harvest", EQ2Emu_lua_Harvest); + + lua_register(state, "AddSpellBonus", EQ2Emu_lua_AddSpellBonus); + lua_register(state, "RemoveSpellBonus", EQ2Emu_lua_RemoveSpellBonus); + lua_register(state, "AddSkillBonus", EQ2Emu_lua_AddSkillBonus); + lua_register(state, "RemoveSkillBonus", EQ2Emu_lua_RemoveSkillBonus); + lua_register(state, "AddControlEffect", EQ2Emu_lua_AddControlEffect); + lua_register(state, "RemoveControlEffect", EQ2Emu_lua_RemoveControlEffect); + lua_register(state, "GetCurrentZoneSafeLocation", EQ2Emu_lua_GetCurrentZoneSafeLocation); + lua_register(state, "GetInt", EQ2Emu_lua_GetInt); + lua_register(state, "GetWis", EQ2Emu_lua_GetWis); + lua_register(state, "GetSta", EQ2Emu_lua_GetSta); + lua_register(state, "GetStr", EQ2Emu_lua_GetStr); + lua_register(state, "GetAgi", EQ2Emu_lua_GetAgi); + lua_register(state, "SetInt", EQ2Emu_lua_SetInt); + lua_register(state, "SetWis", EQ2Emu_lua_SetWis); + lua_register(state, "SetSta", EQ2Emu_lua_SetSta); + lua_register(state, "SetStr", EQ2Emu_lua_SetStr); + lua_register(state, "SetAgi", EQ2Emu_lua_SetAgi); + lua_register(state, "GetIntBase", EQ2Emu_lua_GetIntBase); + lua_register(state, "GetWisBase", EQ2Emu_lua_GetWisBase); + lua_register(state, "GetStaBase", EQ2Emu_lua_GetStaBase); + lua_register(state, "GetStrBase", EQ2Emu_lua_GetStrBase); + lua_register(state, "GetAgiBase", EQ2Emu_lua_GetAgiBase); + lua_register(state, "SetIntBase", EQ2Emu_lua_SetIntBase); + lua_register(state, "SetWisBase", EQ2Emu_lua_SetWisBase); + lua_register(state, "SetStaBase", EQ2Emu_lua_SetStaBase); + lua_register(state, "SetStrBase", EQ2Emu_lua_SetStrBase); + lua_register(state, "SetAgiBase", EQ2Emu_lua_SetAgiBase); + lua_register(state, "GetSpawn", EQ2Emu_lua_GetSpawn); + lua_register(state, "GetVariableValue", EQ2Emu_lua_GetVariableValue); + lua_register(state, "GetCoinMessage", EQ2Emu_lua_GetCoinMessage); + lua_register(state, "GetSpawnByGroupID", EQ2Emu_lua_GetSpawnByGroupID); + lua_register(state, "GetSpawnByLocationID", EQ2Emu_lua_GetSpawnByLocationID); + lua_register(state, "PlayFlavor", EQ2Emu_lua_PlayFlavor); + lua_register(state, "PlaySound", EQ2Emu_lua_PlaySound); + lua_register(state, "PlayVoice", EQ2Emu_lua_PlayVoice); + lua_register(state, "PlayAnimation", EQ2Emu_lua_PlayAnimation); + lua_register(state, "AddLootItem", EQ2Emu_lua_AddLootItem); + lua_register(state, "RemoveLootItem", EQ2Emu_lua_RemoveLootItem); + lua_register(state, "AddLootCoin", EQ2Emu_lua_AddLootCoin); + lua_register(state, "GiveLoot", EQ2Emu_lua_GiveLoot); + lua_register(state, "HasPendingLootItem", EQ2Emu_lua_HasPendingLootItem); + lua_register(state, "HasPendingLoot", EQ2Emu_lua_HasPendingLoot); + lua_register(state, "SetLootCoin", EQ2Emu_lua_SetLootCoin); + lua_register(state, "GetLootCoin", EQ2Emu_lua_GetLootCoin); + lua_register(state, "SetPlayerProximityFunction", EQ2Emu_lua_SetPlayerProximityFunction); + lua_register(state, "SetLocationProximityFunction", EQ2Emu_lua_SetLocationProximityFunction); + lua_register(state, "CreateConversation", EQ2Emu_lua_CreateConversation); + lua_register(state, "AddConversationOption", EQ2Emu_lua_AddConversationOption); + lua_register(state, "StartConversation", EQ2Emu_lua_StartConversation); + lua_register(state, "CloseConversation", EQ2Emu_lua_CloseConversation); + lua_register(state, "CloseItemConversation", EQ2Emu_lua_CloseItemConversation); + //lua_register(state, "StartItemConversation", EQ2Emu_lua_StartItemConversation); + lua_register(state, "StartDialogConversation", EQ2Emu_lua_StartDialogConversation); + lua_register(state, "SpawnSet", EQ2Emu_lua_SpawnSet); + lua_register(state, "SpawnSetByDistance", EQ2Emu_lua_SpawnSetByDistance); + lua_register(state, "SpawnMove", EQ2Emu_lua_SpawnMove); + lua_register(state, "KillSpawn", EQ2Emu_lua_KillSpawn); + lua_register(state, "KillSpawnByDistance", EQ2Emu_lua_KillSpawnByDistance); + lua_register(state, "Despawn", EQ2Emu_lua_Despawn); + lua_register(state, "IsBindAllowed", EQ2Emu_lua_IsBindAllowed); + lua_register(state, "IsGateAllowed", EQ2Emu_lua_IsGateAllowed); + lua_register(state, "Bind", EQ2Emu_lua_Bind); + lua_register(state, "Gate", EQ2Emu_lua_Gate); + lua_register(state, "SendMessage", EQ2Emu_lua_SendMessage); + lua_register(state, "SendPopUpMessage", EQ2Emu_lua_SendPopUpMessage); + lua_register(state, "SetServerControlFlag", EQ2Emu_lua_SetServerControlFlag); + lua_register(state, "ToggleTracking", EQ2Emu_lua_ToggleTracking); + lua_register(state, "AddPrimaryEntityCommand", EQ2Emu_lua_AddPrimaryEntityCommand); + lua_register(state, "AddSpellBookEntry", EQ2Emu_lua_AddSpellBookEntry); + lua_register(state, "Interrupt", EQ2Emu_lua_Interrupt); + lua_register(state, "Stealth", EQ2Emu_lua_Stealth); + lua_register(state, "IsInvis", EQ2Emu_lua_IsInvis); + lua_register(state, "IsStealthed", EQ2Emu_lua_IsStealthed); + lua_register(state, "AddSpawnIDAccess", EQ2Emu_lua_AddSpawnIDAccess); + lua_register(state, "RemoveSpawnIDAccess", EQ2Emu_lua_RemoveSpawnIDAccess); + lua_register(state, "HasRecipeBook", EQ2Emu_lua_HasRecipeBook); + + lua_register(state, "SetRequiredQuest", EQ2Emu_lua_SetRequiredQuest); + lua_register(state, "SetRequiredHistory", EQ2Emu_lua_SetRequiredHistory); + lua_register(state, "SetStepComplete", EQ2Emu_lua_SetStepComplete); + lua_register(state, "AddStepProgress", EQ2Emu_lua_AddStepProgress); + lua_register(state, "UpdateQuestTaskGroupDescription", EQ2Emu_lua_UpdateQuestTaskGroupDescription); + lua_register(state, "GetTaskGroupStep", EQ2Emu_lua_GetTaskGroupStep); + lua_register(state, "GetQuestStep", EQ2Emu_lua_GetQuestStep); + lua_register(state, "QuestStepIsComplete", EQ2Emu_lua_QuestStepIsComplete); + lua_register(state, "RegisterQuest", EQ2Emu_lua_RegisterQuest); + lua_register(state, "SetQuestPrereqLevel", EQ2Emu_lua_SetQuestPrereqLevel); + lua_register(state, "AddQuestPrereqQuest", EQ2Emu_lua_AddQuestPrereqQuest); + lua_register(state, "AddQuestPrereqItem", EQ2Emu_lua_AddQuestPrereqItem); + lua_register(state, "AddQuestPrereqFaction", EQ2Emu_lua_AddQuestPrereqFaction); + lua_register(state, "AddQuestPrereqRace", EQ2Emu_lua_AddQuestPrereqRace); + lua_register(state, "AddQuestPrereqModelType", EQ2Emu_lua_AddQuestPrereqModelType); + lua_register(state, "AddQuestPrereqClass", EQ2Emu_lua_AddQuestPrereqClass); + lua_register(state, "AddQuestPrereqTradeskillLevel", EQ2Emu_lua_AddQuestPrereqTradeskillLevel); + lua_register(state, "AddQuestPrereqTradeskillClass", EQ2Emu_lua_AddQuestPrereqTradeskillClass); + lua_register(state, "AddQuestSelectableRewardItem", EQ2Emu_lua_AddQuestSelectableRewardItem); + lua_register(state, "AddQuestRewardItem", EQ2Emu_lua_AddQuestRewardItem); + lua_register(state, "AddQuestRewardCoin", EQ2Emu_lua_AddQuestRewardCoin); + lua_register(state, "AddQuestRewardFaction", EQ2Emu_lua_AddQuestRewardFaction); + lua_register(state, "SetQuestRewardStatus", EQ2Emu_lua_SetQuestRewardStatus); + lua_register(state, "SetQuestRewardComment", EQ2Emu_lua_SetQuestRewardComment); + lua_register(state, "SetQuestRewardExp", EQ2Emu_lua_SetQuestRewardExp); + lua_register(state, "AddQuestStepKill", EQ2Emu_lua_AddQuestStepKill); + lua_register(state, "AddQuestStep", EQ2Emu_lua_AddQuestStep); + lua_register(state, "AddQuestStepChat", EQ2Emu_lua_AddQuestStepChat); + lua_register(state, "AddQuestStepObtainItem", EQ2Emu_lua_AddQuestStepObtainItem); + lua_register(state, "AddQuestStepLocation", EQ2Emu_lua_AddQuestStepLocation); + lua_register(state, "AddQuestStepSpell", EQ2Emu_lua_AddQuestStepSpell); + lua_register(state, "AddQuestStepCraft", EQ2Emu_lua_AddQuestStepCraft); + lua_register(state, "AddQuestStepHarvest", EQ2Emu_lua_AddQuestStepHarvest); + lua_register(state, "AddQuestStepCompleteAction", EQ2Emu_lua_AddQuestStepCompleteAction); + lua_register(state, "AddQuestStepProgressAction", EQ2Emu_lua_AddQuestStepProgressAction); + lua_register(state, "SetQuestCompleteAction", EQ2Emu_lua_SetQuestCompleteAction); + lua_register(state, "GiveQuestReward", EQ2Emu_lua_GiveQuestReward); + lua_register(state, "UpdateQuestStepDescription", EQ2Emu_lua_UpdateQuestStepDescription); + lua_register(state, "UpdateQuestDescription", EQ2Emu_lua_UpdateQuestDescription); + lua_register(state, "UpdateQuestZone", EQ2Emu_lua_UpdateQuestZone); + lua_register(state, "SetCompletedDescription", EQ2Emu_lua_SetCompletedDescription); + lua_register(state, "OfferQuest", EQ2Emu_lua_OfferQuest); + lua_register(state, "ProvidesQuest", EQ2Emu_lua_ProvidesQuest); + lua_register(state, "HasQuest", EQ2Emu_lua_HasQuest); + lua_register(state, "HasCompletedQuest", EQ2Emu_lua_HasCompletedQuest); + lua_register(state, "QuestIsComplete", EQ2Emu_lua_QuestIsComplete); + lua_register(state, "QuestReturnNPC", EQ2Emu_lua_QuestReturnNPC); + lua_register(state, "GetQuest", EQ2Emu_lua_GetQuest); + lua_register(state, "HasCollectionsToHandIn", EQ2Emu_lua_HasCollectionsToHandIn); + lua_register(state, "HandInCollections", EQ2Emu_lua_HandInCollections); + lua_register(state, "UseWidget", EQ2Emu_lua_UseWidget); + lua_register(state, "SetSpellList", EQ2Emu_lua_SetSpellList); + lua_register(state, "GetPet", EQ2Emu_lua_GetPet); + lua_register(state, "Charm", EQ2Emu_lua_Charm); + lua_register(state, "GetGroup", EQ2Emu_lua_GetGroup); + lua_register(state, "SetCompleteFlag", EQ2Emu_lua_SetCompleteFlag); + lua_register(state, "SetQuestYellow", EQ2Emu_lua_SetQuestYellow); + lua_register(state, "CanReceiveQuest", EQ2Emu_lua_CanReceiveQuest); + lua_register(state, "AddTransportSpawn", EQ2Emu_lua_AddTransportSpawn); + + // Option window + lua_register(state, "CreateOptionWindow", EQ2Emu_lua_CreateOptionWindow); + lua_register(state, "AddOptionWindowOption", EQ2Emu_lua_AddOptionWindowOption); + lua_register(state, "SendOptionWindow", EQ2Emu_lua_SendOptionWindow); + + lua_register(state, "GetTradeskillClass", EQ2Emu_lua_GetTradeskillClass); + lua_register(state, "GetTradeskillLevel", EQ2Emu_lua_GetTradeskillLevel); + lua_register(state, "GetTradeskillClassName", EQ2Emu_lua_GetTradeskillClassName); + lua_register(state, "SetTradeskillLevel", EQ2Emu_lua_SetTradeskillLevel); + + lua_register(state, "SummonDeityPet", EQ2Emu_lua_SummonDeityPet); + lua_register(state, "SummonCosmeticPet", EQ2Emu_lua_SummonCosmeticPet); + lua_register(state, "DismissPet", EQ2Emu_lua_DismissPet); + + lua_register(state, "GetCharmedPet", EQ2Emu_lua_GetCharmedPet); + lua_register(state, "GetDeityPet", EQ2Emu_lua_GetDeityPet); + lua_register(state, "GetCosmeticPet", EQ2Emu_lua_GetCosmeticPet); + + lua_register(state, "SetQuestFeatherColor", EQ2Emu_lua_SetQuestFeatherColor); + lua_register(state, "RemoveSpawnAccess", EQ2Emu_lua_RemoveSpawnAccess); + lua_register(state, "SpawnByLocationID", EQ2Emu_lua_SpawnByLocationID); + lua_register(state, "CastEntityCommand", EQ2Emu_lua_CastEntityCommand); + lua_register(state, "SetLuaBrain", EQ2Emu_lua_SetLuaBrain); + lua_register(state, "SetBrainTick", EQ2Emu_lua_SetBrainTick); + lua_register(state, "SetFollowTarget", EQ2Emu_lua_SetFollowTarget); + lua_register(state, "GetFollowTarget", EQ2Emu_lua_GetFollowTarget); + lua_register(state, "ToggleFollow", EQ2Emu_lua_ToggleFollow); + lua_register(state, "IsFollowing", EQ2Emu_lua_IsFollowing); + lua_register(state, "SetTempVariable", EQ2Emu_lua_SetTempVariable); + lua_register(state, "GetTempVariable", EQ2Emu_lua_GetTempVariable); + lua_register(state, "GiveQuestItem", EQ2Emu_lua_GiveQuestItem); + lua_register(state, "SetQuestRepeatable", EQ2Emu_lua_SetQuestRepeatable); + + lua_register(state, "AddWard", EQ2Emu_lua_AddWard); + lua_register(state, "AddToWard", EQ2Emu_lua_AddToWard); + lua_register(state, "RemoveWard", EQ2Emu_lua_RemoveWard); + lua_register(state, "GetWardAmountLeft", EQ2Emu_lua_GetWardAmountLeft); + + lua_register(state, "SetTarget", EQ2Emu_lua_SetTarget); + lua_register(state, "IsPet", EQ2Emu_lua_IsPet); + lua_register(state, "GetOwner", EQ2Emu_lua_GetOwner); + lua_register(state, "SetInCombat", EQ2Emu_lua_SetInCombat); + lua_register(state, "CompareSpawns", EQ2Emu_lua_CompareSpawns); + lua_register(state, "Runback", EQ2Emu_lua_Runback); + lua_register(state, "GetRunbackDistance", EQ2Emu_lua_GetRunbackDistance); + lua_register(state, "IsCasting", EQ2Emu_lua_IsCasting); + lua_register(state, "IsMezzed", EQ2Emu_lua_IsMezzed); + lua_register(state, "IsStunned", EQ2Emu_lua_IsStunned); + lua_register(state, "IsMezzedOrStunned", EQ2Emu_lua_IsMezzedOrStunned); + lua_register(state, "ProcessSpell", EQ2Emu_lua_ProcessSpell); + lua_register(state, "ProcessMelee", EQ2Emu_lua_ProcessMelee); + lua_register(state, "HasRecovered", EQ2Emu_lua_HasRecovered); + lua_register(state, "GetEncounterSize", EQ2Emu_lua_GetEncounterSize); + lua_register(state, "GetMostHated", EQ2Emu_lua_GetMostHated); + lua_register(state, "ClearHate", EQ2Emu_lua_ClearHate); + lua_register(state, "ClearEncounter", EQ2Emu_lua_ClearEncounter); + lua_register(state, "GetEncounter", EQ2Emu_lua_GetEncounter); + lua_register(state, "GetHateList", EQ2Emu_lua_GetHateList); + lua_register(state, "HasGroup", EQ2Emu_lua_HasGroup); + lua_register(state, "HasSpellEffect", EQ2Emu_lua_HasSpellEffect); + + lua_register(state, "SetSuccessTimer", EQ2Emu_lua_SetSuccessTimer); + lua_register(state, "SetFailureTimer", EQ2Emu_lua_SetFailureTimer); + lua_register(state, "IsGroundSpawn", EQ2Emu_lua_IsGroundSpawn); + lua_register(state, "CanHarvest", EQ2Emu_lua_CanHarvest); + lua_register(state, "SummonDumbFirePet", EQ2Emu_lua_SummonDumbFirePet); + + lua_register(state, "GetSkillValue", EQ2Emu_lua_GetSkillValue); + lua_register(state, "GetSkillMaxValue", EQ2Emu_lua_GetSkillMaxValue); + lua_register(state, "GetSkillName", EQ2Emu_lua_GetSkillName); + lua_register(state, "SetSkillMaxValue", EQ2Emu_lua_SetSkillMaxValue); + lua_register(state, "SetSkillValue", EQ2Emu_lua_SetSkillValue); + lua_register(state, "GetSkill", EQ2Emu_lua_GetSkill); + lua_register(state, "GetSkillIDByName", EQ2Emu_lua_GetSkillIDByName); + lua_register(state, "AddProc", EQ2Emu_lua_AddProc); + lua_register(state, "RemoveProc", EQ2Emu_lua_RemoveProc); + lua_register(state, "Knockback", EQ2Emu_lua_Knockback); + + lua_register(state, "IsEpic", EQ2Emu_lua_IsEpic); + lua_register(state, "IsHeroic", EQ2Emu_lua_IsHeroic); + lua_register(state, "ProcDamage", EQ2Emu_lua_ProcDamage); + lua_register(state, "LastSpellAttackHit", EQ2Emu_lua_LastSpellAttackHit); + lua_register(state, "IsBehind", EQ2Emu_lua_IsBehind); + lua_register(state, "IsFlanking", EQ2Emu_lua_IsFlanking); + lua_register(state, "AddSpellTimer", EQ2Emu_lua_AddSpellTimer); + lua_register(state, "GetItemCount", EQ2Emu_lua_GetItemCount); + lua_register(state, "SetItemCount", EQ2Emu_lua_SetItemCount); + lua_register(state, "Resurrect", EQ2Emu_lua_Resurrect); + lua_register(state, "BreatheUnderwater", EQ2Emu_lua_BreatheUnderwater); + lua_register(state, "BlurVision", EQ2Emu_lua_BlurVision); + lua_register(state, "SetVision", EQ2Emu_lua_SetVision); + lua_register(state, "GetItemSkillReq", EQ2Emu_lua_GetItemSkillReq); + lua_register(state, "SetSpeedMultiplier", EQ2Emu_lua_SetSpeeedMultiplier); + lua_register(state, "SetIllusion", EQ2Emu_lua_SetIllusion); + lua_register(state, "ResetIllusion", EQ2Emu_lua_ResetIllusion); + lua_register(state, "AddThreatTransfer", EQ2Emu_lua_AddThreatTransfer); + lua_register(state, "RemoveThreatTransfer", EQ2Emu_lua_RemoveThreatTransfer); + lua_register(state, "CureByType", EQ2Emu_lua_CureByType); + lua_register(state, "CureByControlEffect", EQ2Emu_lua_CureByControlEffect); + lua_register(state, "AddSpawnSpellBonus", EQ2Emu_lua_AddSpawnSpellBonus); + lua_register(state, "CancelSpell", EQ2Emu_lua_CancelSpell); + lua_register(state, "RemoveStealth", EQ2Emu_lua_RemoveStealth); + lua_register(state, "RemoveInvis", EQ2Emu_lua_RemoveInvis); + lua_register(state, "StartHeroicOpportunity", EQ2Emu_lua_StartHeroicOpportunity); + lua_register(state, "CopySpawnAppearance", EQ2Emu_lua_CopySpawnAppearance); + lua_register(state, "SetSpellTriggerCount", EQ2Emu_lua_SetSpellTriggerCount); + lua_register(state, "GetSpellTriggerCount", EQ2Emu_lua_GetSpellTriggerCount); + lua_register(state, "RemoveTriggerFromSpell", EQ2Emu_lua_RemoveTriggerFromSpell); + lua_register(state, "AddImmunitySpell", EQ2Emu_lua_AddImmunitySpell); + lua_register(state, "RemoveImmunitySpell", EQ2Emu_lua_RemoveImmunitySpell); + lua_register(state, "SetSpellSnareValue", EQ2Emu_lua_SetSpellSnareValue); + lua_register(state, "CheckRaceType", EQ2Emu_lua_CheckRaceType); + lua_register(state, "GetRaceType", EQ2Emu_lua_GetRaceType); + lua_register(state, "GetRaceBaseType", EQ2Emu_lua_GetRaceBaseType); + lua_register(state, "GetQuestFlags", EQ2Emu_lua_GetQuestFlags); + lua_register(state, "SetQuestFlags", EQ2Emu_lua_SetQuestFlags); + lua_register(state, "SetQuestTimer", EQ2Emu_lua_SetQuestTimer); + lua_register(state, "RemoveQuestStep", EQ2Emu_lua_RemoveQuestStep); + lua_register(state, "ResetQuestStep", EQ2Emu_lua_ResetQuestStep); + lua_register(state, "SetQuestTimerComplete", EQ2Emu_lua_SetQuestTimerComplete); + lua_register(state, "AddQuestStepFailureAction", EQ2Emu_lua_AddQuestStepFailureAction); + lua_register(state, "SetStepFailed", EQ2Emu_lua_SetStepFailed); + lua_register(state, "GetQuestCompleteCount", EQ2Emu_lua_GetQuestCompleteCount); + lua_register(state, "SetServerVariable", EQ2Emu_lua_SetServerVariable); + lua_register(state, "GetServerVariable", EQ2Emu_lua_GetServerVariable); + lua_register(state, "HasLanguage", EQ2Emu_lua_HasLanguage); + lua_register(state, "AddLanguage", EQ2Emu_lua_AddLanguage); + lua_register(state, "IsNight", EQ2Emu_lua_IsNight); + lua_register(state, "AddMultiFloorLift", EQ2Emu_lua_AddMultiFloorLift); + lua_register(state, "StartAutoMount", EQ2Emu_lua_StartAutoMount); + lua_register(state, "EndAutoMount", EQ2Emu_lua_EndAutoMount); + lua_register(state, "IsOnAutoMount", EQ2Emu_lua_IsOnAutoMount); + lua_register(state, "SetPlayerHistory", EQ2Emu_lua_SetPlayerHistory); + lua_register(state, "GetPlayerHistory", EQ2Emu_lua_GetPlayerHistory); + lua_register(state, "SetGridID", EQ2Emu_lua_SetGridID); + lua_register(state, "GetQuestStepProgress", EQ2Emu_lua_GetQuestStepProgress); + lua_register(state, "SetPlayerLevel", EQ2Emu_lua_SetPlayerLevel); + lua_register(state, "AddCoin", EQ2Emu_lua_AddCoin); + lua_register(state, "RemoveCoin", EQ2Emu_lua_RemoveCoin); + lua_register(state, "GetPlayersInZone", EQ2Emu_lua_GetPlayersInZone); + lua_register(state, "SpawnGroupByID", EQ2Emu_lua_SpawnGroupByID); + lua_register(state, "SetSpawnAnimation", EQ2Emu_lua_SetSpawnAnimation); + lua_register(state, "GetClientVersion", EQ2Emu_lua_GetClientVersion); + lua_register(state, "GetItemID", EQ2Emu_lua_GetItemID); + lua_register(state, "IsEntity", EQ2Emu_lua_IsEntity); + lua_register(state, "GetOrigX", EQ2Emu_lua_GetOrigX); + lua_register(state, "GetOrigY", EQ2Emu_lua_GetOrigY); + lua_register(state, "GetOrigZ", EQ2Emu_lua_GetOrigZ); + lua_register(state, "GetPCTOfHP", EQ2Emu_lua_GetPCTOfHP); + lua_register(state, "GetPCTOfPower", EQ2Emu_lua_GetPCTOfPower); + lua_register(state, "GetBoundZoneID", EQ2Emu_lua_GetBoundZoneID); + lua_register(state, "Evac", EQ2Emu_lua_Evac); +} + +void LuaInterface::LogError(const char* error, ...) { + va_list argptr; + char buffer[4096]; + + va_start(argptr, error); + vsnprintf(buffer, sizeof(buffer), error, argptr); + va_end(argptr); + SimpleLogError(buffer); +} + +void LuaInterface::SimpleLogError(const char* error) { + ProcessErrorMessage(error); + LogWrite(LUA__ERROR, 0, "LUA", "%s", error); +} + +void LuaInterface::ResetFunctionStack(lua_State* state) { + lua_settop(state, 0); +} + +void LuaInterface::AddUserDataPtr(LUAUserData* data) { + MLUAUserData.lock(); + user_data[data] = Timer::GetCurrentTime2() + 300000; //allow a function to use this pointer for 5 minutes + MLUAUserData.unlock(); +} + +void LuaInterface::DeletePendingSpells(bool all) { + MSpellDelete.lock(); + if(spells_pending_delete.size() > 0){ + int32 time = Timer::GetCurrentTime2(); + map::iterator itr; + vector tmp_deletes; + vector::iterator del_itr; + for(itr = spells_pending_delete.begin(); itr != spells_pending_delete.end(); itr++){ + if(all || time >= itr->second) + tmp_deletes.push_back(itr->first); + } + LuaSpell* spell = 0; + for(del_itr = tmp_deletes.begin(); del_itr != tmp_deletes.end(); del_itr++){ + spell = *del_itr; + spells_pending_delete.erase(spell); + safe_delete(spell); + } + } + MSpellDelete.unlock(); +} + +void LuaInterface::DeleteUserDataPtrs(bool all) { + MLUAUserData.lock(); + if(user_data.size() > 0){ + map::iterator itr; + int32 time = Timer::GetCurrentTime2(); + vector tmp_deletes; + vector::iterator del_itr; + for(itr = user_data.begin(); itr != user_data.end(); itr++){ + if(all || time >= itr->second) + tmp_deletes.push_back(itr->first); + } + LUAUserData* data = 0; + for(del_itr = tmp_deletes.begin(); del_itr != tmp_deletes.end(); del_itr++){ + data = *del_itr; + user_data.erase(data); + safe_delete(data); + } + } + MLUAUserData.unlock(); +} + +Spawn* LuaInterface::GetSpawn(lua_State* state, int8 arg_num) { + Spawn* ret = 0; + if (lua_islightuserdata(state, arg_num)){ + LUAUserData* data = (LUAUserData*)lua_touserdata(state, arg_num); + if(!data || !data->IsCorrectlyInitialized()){ + LogError("GetSpawn error while processing %s", lua_tostring(state, -1)); + } + else if(!data->IsSpawn()){ + lua_Debug ar; + lua_getstack (state, 1, &ar); + lua_getinfo(state, "Sln", &ar); + LogError("Invalid data type used for GetSpawn in %s (line %d)", ar.source, ar.currentline); + } + else + ret = data->spawn; + } + return ret; +} + +vector* LuaInterface::GetConversation(lua_State* state, int8 arg_num) { + vector* ret = 0; + if(lua_islightuserdata(state, arg_num)){ + LUAUserData* data = (LUAUserData*)lua_touserdata(state, arg_num); + if(!data || !data->IsCorrectlyInitialized()){ + LogError("GetConversation error while processing %s", lua_tostring(state, -1)); + } + else if(!data->IsConversationOption()){ + lua_Debug ar; + lua_getstack (state, 1, &ar); + lua_getinfo(state, "Sln", &ar); + LogError("Invalid data type used for GetConversation in %s (line %d)", ar.source, ar.currentline); + } + else + ret = data->conversation_options; + } + return ret; +} + +vector* LuaInterface::GetOptionWindow(lua_State* state, int8 arg_num) { + vector* ret = 0; + if(lua_islightuserdata(state, arg_num)){ + LUAUserData* data = (LUAUserData*)lua_touserdata(state, arg_num); + if(!data || !data->IsCorrectlyInitialized()){ + LogError("GetOptionWindow error while processing %s", lua_tostring(state, -1)); + } + else if(!data->IsOptionWindow()){ + lua_Debug ar; + lua_getstack (state, 1, &ar); + lua_getinfo(state, "Sln", &ar); + LogError("Invalid data type used for GetOptionWindow in %s (line %d)", ar.source, ar.currentline); + } + else + ret = data->option_window_option; + } + return ret; +} + +Quest* LuaInterface::GetQuest(lua_State* state, int8 arg_num) { + Quest* ret = 0; + if(lua_islightuserdata(state, arg_num)){ + LUAUserData* data = (LUAUserData*)lua_touserdata(state, arg_num); + if(!data || !data->IsCorrectlyInitialized()){ + LogError("GetQuest error while processing %s", lua_tostring(state, 0)); + } + else if(!data->IsQuest()){ + lua_Debug ar; + lua_getstack (state, 1, &ar); + lua_getinfo(state, "Sln", &ar); + LogError("Invalid data type used for GetQuest in %s (line %d)", ar.source, ar.currentline); + } + else + ret = data->quest; + } + return ret; +} + +Item* LuaInterface::GetItem(lua_State* state, int8 arg_num) { + Item* ret = 0; + if(lua_islightuserdata(state, arg_num)){ + LUAUserData* data = (LUAUserData*)lua_touserdata(state, arg_num); + if(!data || !data->IsCorrectlyInitialized()){ + LogError("GetItem error while processing %s", lua_tostring(state, 0)); + } + else if(!data->IsItem()){ + lua_Debug ar; + lua_getstack (state, 1, &ar); + lua_getinfo(state, "Sln", &ar); + LogError("Invalid data type used for GetItem in %s (line %d)", ar.source, ar.currentline); + } + else + ret = data->item; + } + return ret; +} + +Skill* LuaInterface::GetSkill(lua_State* state, int8 arg_num) { + Skill* ret = 0; + if (lua_islightuserdata(state, arg_num)) { + LUAUserData* data = (LUAUserData*)lua_touserdata(state, arg_num); + if(!data || !data->IsCorrectlyInitialized()){ + LogError("GetSkill error while processing %s", lua_tostring(state, 0)); + } + else if(!data->IsSkill()){ + lua_Debug ar; + lua_getstack (state, 1, &ar); + lua_getinfo(state, "Sln", &ar); + LogError("Invalid data type used for GetSkill in %s (line %d)", ar.source, ar.currentline); + } + else + ret = data->skill; + } + return ret; +} + +ZoneServer* LuaInterface::GetZone(lua_State* state, int8 arg_num) { + ZoneServer* ret = 0; + if(lua_islightuserdata(state, arg_num)){ + LUAUserData* data = (LUAUserData*)lua_touserdata(state, arg_num); + if(!data || !data->IsCorrectlyInitialized()){ + LogError("GetZone error while processing %s", lua_tostring(state, -1)); + } + else if(!data->IsZone()){ + lua_Debug ar; + lua_getstack (state, 1, &ar); + lua_getinfo(state, "Sln", &ar); + LogError("Invalid data type used for GetZone in %s (line %d)", ar.source, ar.currentline); + } + else + ret = data->zone; + } + return ret; +} + +sint32 LuaInterface::GetSInt32Value(lua_State* state, int8 arg_num) { + sint32 val = 0; + if(lua_isnumber(state, arg_num)){ + val = lua_tointeger(state, arg_num); + } + return val; +} + +int32 LuaInterface::GetInt32Value(lua_State* state, int8 arg_num) { + int32 val = 0; + if(lua_isnumber(state, arg_num)){ + val = (int32)lua_tonumber(state, arg_num); + } + return val; +} + +int16 LuaInterface::GetInt16Value(lua_State* state, int8 arg_num) { + int16 val = 0; + if(lua_isnumber(state, arg_num)){ + val = lua_tointeger(state, arg_num); + } + return val; +} + +int8 LuaInterface::GetInt8Value(lua_State* state, int8 arg_num) { + int8 val = 0; + if(lua_isnumber(state, arg_num)){ + val = lua_tointeger(state, arg_num); + } + return val; +} + +float LuaInterface::GetFloatValue(lua_State* state, int8 arg_num) { + float val = 0; + if(lua_isnumber(state, arg_num)) + val = (float)lua_tonumber(state, arg_num); + return val; +} + +string LuaInterface::GetStringValue(lua_State* state, int8 arg_num) { + string val; + if(lua_isstring(state, arg_num)){ + size_t size = 0; + const char* str = lua_tolstring(state, arg_num, &size); + if(str) + val = string(str); + } + return val; +} + +bool LuaInterface::GetBooleanValue(lua_State* state, int8 arg_num) { + return lua_toboolean(state, arg_num) == 1; +} + +void LuaInterface::SetStringValue(lua_State* state, const char* value) { + lua_pushstring(state, value); +} + +void LuaInterface::SetBooleanValue(lua_State* state, bool value) { + lua_pushboolean(state, value); +} + +void LuaInterface::SetFloatValue(lua_State* state, float value) { + lua_pushnumber(state, value); +} + +void LuaInterface::SetInt32Value(lua_State* state, int32 value) { + lua_pushinteger(state, value); +} + +void LuaInterface::SetSInt32Value(lua_State* state, sint32 value) { + lua_pushinteger(state, value); +} + +void LuaInterface::SetSpawnValue(lua_State* state, Spawn* spawn) { + LUASpawnWrapper* spawn_wrapper = new LUASpawnWrapper(); + spawn_wrapper->spawn = spawn; + AddUserDataPtr(spawn_wrapper); + lua_pushlightuserdata(state, spawn_wrapper); +} + +void LuaInterface::SetConversationValue(lua_State* state, vector* conversation) { + LUAConversationOptionWrapper* conv_wrapper = new LUAConversationOptionWrapper(); + conv_wrapper->conversation_options = conversation; + AddUserDataPtr(conv_wrapper); + lua_pushlightuserdata(state, conv_wrapper); +} + +void LuaInterface::SetOptionWindowValue(lua_State* state, vector* optionWindow) { + LUAOptionWindowWrapper* option_wrapper = new LUAOptionWindowWrapper(); + option_wrapper->option_window_option = optionWindow; + AddUserDataPtr(option_wrapper); + lua_pushlightuserdata(state, option_wrapper); +} + +void LuaInterface::SetItemValue(lua_State* state, Item* item) { + LUAItemWrapper* item_wrapper = new LUAItemWrapper(); + item_wrapper->item = item; + AddUserDataPtr(item_wrapper); + lua_pushlightuserdata(state, item_wrapper); +} + +void LuaInterface::SetSkillValue(lua_State* state, Skill* skill) { + LUASkillWrapper* skill_wrapper = new LUASkillWrapper(); + skill_wrapper->skill = skill; + AddUserDataPtr(skill_wrapper); + lua_pushlightuserdata(state, skill_wrapper); +} + +void LuaInterface::SetQuestValue(lua_State* state, Quest* quest) { + LUAQuestWrapper* quest_wrapper = new LUAQuestWrapper(); + quest_wrapper->quest = quest; + AddUserDataPtr(quest_wrapper); + lua_pushlightuserdata(state, quest_wrapper); +} + +void LuaInterface::SetZoneValue(lua_State* state, ZoneServer* zone) { + LUAZoneWrapper* zone_wrapper = new LUAZoneWrapper(); + zone_wrapper->zone = zone; + AddUserDataPtr(zone_wrapper); + lua_pushlightuserdata(state, zone_wrapper); +} + +LuaSpell* LuaInterface::GetSpell(const char* name) { + string lua_script = string(name); + if (lua_script.find(".lua") == string::npos) + lua_script.append(".lua"); + if(spells.count(lua_script) > 0) + { + LogWrite(LUA__DEBUG, 0, "LUA", "Found LUA Spell Script: '%s'", lua_script.c_str()); + LuaSpell* spell = spells[lua_script]; + LuaSpell* new_spell = new LuaSpell; + new_spell->state = spell->state; + new_spell->file_name = spell->file_name; + new_spell->timer = spell->timer; + new_spell->timer.Disable(); + new_spell->resisted = false; + new_spell->interrupted = false; + new_spell->crit = false; + new_spell->last_spellattack_hit = false; + new_spell->MSpellTargets.SetName("LuaSpell.MSpellTargets"); + new_spell->cancel_after_all_triggers = false; + new_spell->num_triggers = 0; + new_spell->had_triggers = false; + new_spell->had_dmg_remaining = false; + new_spell->slot_pos = 0; + new_spell->damage_remaining = 0; + new_spell->effect_bitmask = 0; + return new_spell; + } + else{ + LogWrite(LUA__ERROR, 0, "LUA", "Error LUA Spell Script: '%s'", name); + return 0; + } +} + +Mutex* LuaInterface::GetItemScriptMutex(const char* name) { + Mutex* mutex = 0; + if(item_scripts_mutex.count(name) > 0) + mutex = item_scripts_mutex[name]; + if(!mutex){ + mutex = new Mutex(); + item_scripts_mutex[name] = mutex; + } + return mutex; +} + +Mutex* LuaInterface::GetSpawnScriptMutex(const char* name) { + Mutex* mutex = 0; + if(spawn_scripts_mutex.count(string(name)) > 0) + mutex = spawn_scripts_mutex[name]; + if(!mutex){ + mutex = new Mutex(); + spawn_scripts_mutex[name] = mutex; + } + return mutex; +} + +Mutex* LuaInterface::GetZoneScriptMutex(const char* name) { + Mutex* mutex = 0; + if(zone_scripts_mutex.count(name) > 0) + mutex = zone_scripts_mutex[name]; + if(!mutex){ + mutex = new Mutex(); + zone_scripts_mutex[name] = mutex; + } + return mutex; +} + +void LuaInterface::UseItemScript(const char* name, lua_State* state, bool val) { + item_scripts[name][state] = val; +} + +void LuaInterface::UseSpawnScript(const char* name, lua_State* state, bool val) { + spawn_scripts[name][state] = val; +} + +void LuaInterface::UseZoneScript(const char* name, lua_State* state, bool val) { + zone_scripts[name][state] = val; +} + +lua_State* LuaInterface::GetItemScript(const char* name, bool create_new, bool use) { + map >::iterator itr; + map::iterator item_script_itr; + lua_State* ret = 0; + Mutex* mutex = 0; + if(item_scripts.count(name) > 0){ + mutex = GetItemScriptMutex(name); + mutex->readlock(__FUNCTION__, __LINE__); + for(item_script_itr = item_scripts[name].begin(); item_script_itr != item_scripts[name].end(); item_script_itr++){ + if(!item_script_itr->second){ //not in use + if(use) + item_script_itr->second = true; + ret = item_script_itr->first; + } + } + mutex->releasereadlock(__FUNCTION__, __LINE__); + } + if(!ret && create_new){ + if(name && LoadItemScript(name)) + ret = GetItemScript(name, create_new, use); + else{ + LogError("Error LUA Item Script '%s'", name); + return 0; + } + } + return ret; +} + +lua_State* LuaInterface::GetSpawnScript(const char* name, bool create_new, bool use) { + if (spawn_scripts_reloading) + return 0; + map >::iterator itr; + map::iterator spawn_script_itr; + lua_State* ret = 0; + Mutex* mutex = 0; + if(spawn_scripts.count(string(name)) > 0){ + mutex = GetSpawnScriptMutex(name); + mutex->readlock(__FUNCTION__, __LINE__); + for(spawn_script_itr = spawn_scripts[name].begin(); spawn_script_itr != spawn_scripts[name].end(); spawn_script_itr++){ + if(!spawn_script_itr->second){ //not in use + if(use) + spawn_script_itr->second = true; + ret = spawn_script_itr->first; + } + } + mutex->releasereadlock(__FUNCTION__, __LINE__); + } + if(!ret && create_new){ + if(name && LoadSpawnScript(name)) + ret = GetSpawnScript(name, create_new, use); + else{ + LogError("Error LUA Spawn Script '%s'", name); + return 0; + } + } + return ret; +} + +lua_State* LuaInterface::GetZoneScript(const char* name, bool create_new, bool use) { + map >::iterator itr; + map::iterator zone_script_itr; + lua_State* ret = 0; + Mutex* mutex = 0; + if(zone_scripts.count(name) > 0){ + mutex = GetZoneScriptMutex(name); + mutex->readlock(__FUNCTION__, __LINE__); + for(zone_script_itr = zone_scripts[name].begin(); zone_script_itr != zone_scripts[name].end(); zone_script_itr++){ + if(!zone_script_itr->second){ //not in use + if(use) + zone_script_itr->second = true; + ret = zone_script_itr->first; + } + } + mutex->releasereadlock(__FUNCTION__, __LINE__); + } + if(!ret && create_new){ + if(name && LoadZoneScript(name)) + ret = GetZoneScript(name); + else{ + LogError("Error LUA Zone Script '%s'", name); + return 0; + } + } + return ret; +} + +bool LuaInterface::RunItemScript(string script_name, const char* function_name, Item* item, Spawn* spawn) { + if(!item) + return false; + lua_State* state = GetItemScript(script_name.c_str(), true, true); + if(state){ + Mutex* mutex = GetItemScriptMutex(script_name.c_str()); + if(mutex) + mutex->readlock(__FUNCTION__, __LINE__); + else{ + LogError("Error getting lock for '%s'", script_name.c_str()); + UseItemScript(script_name.c_str(), state, false); + return false; + } + lua_getglobal(state, function_name); + lua_getglobal(state, function_name); + if (!lua_isfunction(state, lua_gettop(state))){ + lua_pop(state, 1); + mutex->releasereadlock(__FUNCTION__); + return false; + } + SetItemValue(state, item); + int8 num_parms = 1; + if(spawn){ + SetSpawnValue(state, spawn); + num_parms++; + } + if(!CallItemScript(state, num_parms)){ + if(mutex) + mutex->releasereadlock(__FUNCTION__, __LINE__); + UseItemScript(script_name.c_str(), state, false); + return false; + } + if(mutex) + mutex->releasereadlock(__FUNCTION__, __LINE__); + UseItemScript(script_name.c_str(), state, false); + return true; + } + else + return false; +} + + +bool LuaInterface::RunSpawnScript(string script_name, const char* function_name, Spawn* npc, Spawn* spawn, const char* message) { + if(!npc || spawn_scripts_reloading) + return false; + lua_State* state = GetSpawnScript(script_name.c_str(), true, true); + if(state){ + Mutex* mutex = GetSpawnScriptMutex(script_name.c_str()); + if(mutex) + mutex->readlock(__FUNCTION__, __LINE__); + else{ + LogError("Error getting lock for '%s'", script_name.c_str()); + UseSpawnScript(script_name.c_str(), state, false); + return false; + } + lua_getglobal(state, function_name); + if (!lua_isfunction(state, lua_gettop(state))){ + lua_pop(state, 1); + mutex->releasereadlock(__FUNCTION__); + return false; + } + SetSpawnValue(state, npc); + int8 num_parms = 1; + if(spawn){ + SetSpawnValue(state, spawn); + num_parms++; + } + if(message){ + SetStringValue(state, message); + num_parms++; + } + if(!CallSpawnScript(state, num_parms)){ + if(mutex) + mutex->releasereadlock(__FUNCTION__, __LINE__); + UseSpawnScript(script_name.c_str(), state, false); + return false; + } + if(mutex) + mutex->releasereadlock(__FUNCTION__, __LINE__); + UseSpawnScript(script_name.c_str(), state, false); + return true; + } + else + return false; +} + +bool LuaInterface::RunZoneScript(string script_name, const char* function_name, ZoneServer* zone, Spawn* spawn, int32 grid_id) { + if (!zone) + return false; + lua_State* state = GetZoneScript(script_name.c_str(), true, true); + if (state) { + Mutex* mutex = GetZoneScriptMutex(script_name.c_str()); + if (mutex) + mutex->readlock(__FUNCTION__, __LINE__); + else { + LogError("Error getting lock for '%s'", script_name.c_str()); + UseZoneScript(script_name.c_str(), state, false); + return false; + } + lua_getglobal(state, function_name); + if (!lua_isfunction(state, lua_gettop(state))){ + lua_pop(state, 1); + mutex->releasereadlock(__FUNCTION__); + return false; + } + SetZoneValue(state, zone); + int8 num_params = 1; + if (spawn) { + SetSpawnValue(state, spawn); + num_params++; + } + if (grid_id > 0) { + SetInt32Value(state, grid_id); + num_params++; + } + if (!CallZoneScript(state, num_params)) { + if (mutex) + mutex->releasereadlock(__FUNCTION__, __LINE__); + UseZoneScript(script_name.c_str(), state, false); + return false; + } + if (mutex) + mutex->releasereadlock(__FUNCTION__, __LINE__); + UseZoneScript(script_name.c_str(), state, false); + return true; + } + else + return false; +} + +void LuaInterface::AddPendingSpellDelete(LuaSpell* spell) { + MSpellDelete.lock(); + spells_pending_delete[spell] = Timer::GetCurrentTime2() + 10000; + MSpellDelete.unlock(); +} + +LUAUserData::LUAUserData(){ + correctly_initialized = false; + quest = 0; + conversation_options = 0; + spawn = 0; + zone = 0; + skill = 0; + option_window_option = 0; + item = 0; +} + +bool LUAUserData::IsCorrectlyInitialized(){ + return correctly_initialized; +} + +bool LUAUserData::IsConversationOption(){ + return false; +} + +bool LUAUserData::IsOptionWindow() { + return false; +} + +bool LUAUserData::IsSpawn(){ + return false; +} + +bool LUAUserData::IsQuest(){ + return false; +} + +bool LUAUserData::IsZone(){ + return false; +} + +bool LUAUserData::IsItem(){ + return false; +} + +bool LUAUserData::IsSkill() { + return false; +} + +LUAConversationOptionWrapper::LUAConversationOptionWrapper(){ + correctly_initialized = true; +} + +bool LUAConversationOptionWrapper::IsConversationOption(){ + return true; +} + +LUAOptionWindowWrapper::LUAOptionWindowWrapper() { + correctly_initialized = true; +} + +bool LUAOptionWindowWrapper::IsOptionWindow() { + return true; +} + +LUASpawnWrapper::LUASpawnWrapper(){ + correctly_initialized = true; +} + +bool LUASpawnWrapper::IsSpawn(){ + return true; +} + +LUAZoneWrapper::LUAZoneWrapper(){ + correctly_initialized = true; +} + +bool LUAZoneWrapper::IsZone(){ + return true; +} + +LUAQuestWrapper::LUAQuestWrapper(){ + correctly_initialized = true; +} + +bool LUAQuestWrapper::IsQuest(){ + return true; +} + +LUAItemWrapper::LUAItemWrapper(){ + correctly_initialized = true; +} + +bool LUAItemWrapper::IsItem(){ + return true; +} + +LUASkillWrapper::LUASkillWrapper() { + correctly_initialized = true; +} + +bool LUASkillWrapper::IsSkill() { + return true; +} \ No newline at end of file diff --git a/EQ2/source/WorldServer/LuaInterface.h b/EQ2/source/WorldServer/LuaInterface.h new file mode 100644 index 000000000..774b859fd --- /dev/null +++ b/EQ2/source/WorldServer/LuaInterface.h @@ -0,0 +1,282 @@ +/* + EQ2Emulator: Everquest II Server Emulator + Copyright (C) 2007 EQ2EMulator Development Team (http://www.eq2emulator.net) + + This file is part of EQ2Emulator. + + EQ2Emulator is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + EQ2Emulator is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with EQ2Emulator. If not, see . +*/ +#ifndef LUA_INTERFACE_H +#define LUA_INTERFACE_H + +#include "Spawn.h" +#include "Spells.h" +#include "../common/Mutex.h" +#include "Quests.h" +#include "zoneserver.h" +#include "client.h" + +#include "../LUA/lua.hpp" + +using namespace std; + +struct ConversationOption{ + string option; + string function; +}; + +struct OptionWindowOption { + string optionName; + string optionDescription; + string optionCommand; + int32 optionIconSheet; + int16 optionIconID; + string optionConfirmTitle; +}; + +//Bitmask Values +#define EFFECT_FLAG_STUN 1 +#define EFFECT_FLAG_ROOT 2 +#define EFFECT_FLAG_MEZ 4 +#define EFFECT_FLAG_STIFLE 8 +#define EFFECT_FLAG_DAZE 16 +#define EFFECT_FLAG_FEAR 32 +#define EFFECT_FLAG_SPELLBONUS 64 +#define EFFECT_FLAG_SKILLBONUS 128 +#define EFFECT_FLAG_STEALTH 256 +#define EFFECT_FLAG_INVIS 512 +#define EFFECT_FLAG_SNARE 1024 +#define EFFECT_FLAG_WATERWALK 2048 +#define EFFECT_FLAG_WATERJUMP 4096 +#define EFFECT_FLAG_FLIGHT 8192 +#define EFFECT_FLAG_GLIDE 16384 +#define EFFECT_FLAG_AOE_IMMUNE 32768 +#define EFFECT_FLAG_STUN_IMMUNE 65536 +#define EFFECT_FLAG_MEZ_IMMUNE 131072 +#define EFFECT_FLAG_DAZE_IMMUNE 262144 +#define EFFECT_FLAG_ROOT_IMMUNE 524288 +#define EFFECT_FLAG_STIFLE_IMMUNE 1048576 +#define EFFECT_FLAG_FEAR_IMMUNE 2097152 +#define EFFECT_FLAG_SAFEFALL 4194304 + +struct LuaSpell{ + Entity* caster; + int32 initial_target; + vector targets; + Spell* spell; + lua_State* state; + string file_name; + Timer timer; + int16 num_calls; + int16 num_triggers; + int8 slot_pos; + int32 damage_remaining; + bool resisted; + bool interrupted; + bool crit; + bool last_spellattack_hit; + bool cancel_after_all_triggers; + bool had_triggers; + bool had_dmg_remaining; + Mutex MSpellTargets; + int32 effect_bitmask; + +}; + +class LUAUserData{ +public: + LUAUserData(); + virtual ~LUAUserData(){}; + virtual bool IsCorrectlyInitialized(); + virtual bool IsConversationOption(); + virtual bool IsOptionWindow(); + virtual bool IsSpawn(); + virtual bool IsQuest(); + virtual bool IsZone(); + virtual bool IsItem(); + virtual bool IsSkill(); + bool correctly_initialized; + Item* item; + ZoneServer* zone; + Spawn* spawn; + vector* conversation_options; + vector* option_window_option; + Quest* quest; + Skill* skill; +}; + +class LUAConversationOptionWrapper : public LUAUserData{ +public: + LUAConversationOptionWrapper(); + bool IsConversationOption(); +}; + +class LUAOptionWindowWrapper : public LUAUserData { +public: + LUAOptionWindowWrapper(); + bool IsOptionWindow(); +}; + +class LUASpawnWrapper : public LUAUserData{ +public: + LUASpawnWrapper(); + bool IsSpawn(); +}; + +class LUAZoneWrapper : public LUAUserData{ +public: + LUAZoneWrapper(); + bool IsZone(); +}; + +class LUAQuestWrapper : public LUAUserData{ +public: + LUAQuestWrapper(); + bool IsQuest(); +}; + +class LUAItemWrapper : public LUAUserData{ +public: + LUAItemWrapper(); + bool IsItem(); +}; + +class LUASkillWrapper: public LUAUserData { +public: + LUASkillWrapper(); + bool IsSkill(); +}; + +class LuaInterface { +public: + LuaInterface(); + ~LuaInterface(); + bool LoadLuaSpell(const char* name); + bool LoadLuaSpell(string name); + bool LoadItemScript(string name); + bool LoadItemScript(const char* name); + bool LoadSpawnScript(string name); + bool LoadSpawnScript(const char* name); + bool LoadZoneScript(string name); + bool LoadZoneScript(const char* name); + void RemoveSpell(LuaSpell* spell, bool call_remove_function = true, bool can_delete = true); + Spawn* GetSpawn(lua_State* state, int8 arg_num = 1); + Item* GetItem(lua_State* state, int8 arg_num = 1); + Quest* GetQuest(lua_State* state, int8 arg_num = 1); + ZoneServer* GetZone(lua_State* state, int8 arg_num = 1); + Skill* GetSkill(lua_State* state, int8 arg_num = 1); + vector* GetConversation(lua_State* state, int8 arg_num = 1); + vector* GetOptionWindow(lua_State* state, int8 arg_num = 1); + int8 GetInt8Value(lua_State* state, int8 arg_num = 1); + int16 GetInt16Value(lua_State* state, int8 arg_num = 1); + int32 GetInt32Value(lua_State* state, int8 arg_num = 1); + sint32 GetSInt32Value(lua_State* state, int8 arg_num = 1); + float GetFloatValue(lua_State* state, int8 arg_num = 1); + string GetStringValue(lua_State* state, int8 arg_num = 1); + bool GetBooleanValue(lua_State*state, int8 arg_num = 1); + + void Process(); + + void SetInt32Value(lua_State* state, int32 value); + void SetSInt32Value(lua_State* state, sint32 value); + void SetFloatValue(lua_State* state, float value); + void SetBooleanValue(lua_State* state, bool value); + void SetStringValue(lua_State* state, const char* value); + void SetSpawnValue(lua_State* state, Spawn* spawn); + void SetSkillValue(lua_State* state, Skill* skill); + void SetItemValue(lua_State* state, Item* item); + void SetQuestValue(lua_State* state, Quest* quest); + void SetZoneValue(lua_State* state, ZoneServer* zone); + void SetConversationValue(lua_State* state, vector* conversation); + void SetOptionWindowValue(lua_State* state, vector* optionWindow); + + void AddSpawnPointers(LuaSpell* spell, bool first_cast, bool precast = false, const char* function = 0, SpellScriptTimer* timer = 0); + LuaSpell* GetCurrentSpell(lua_State* state); + bool CallSpellProcess(LuaSpell* spell, int8 num_parameters); + LuaSpell* GetSpell(const char* name); + void UseItemScript(const char* name, lua_State* state, bool val); + void UseSpawnScript(const char* name, lua_State* state, bool val); + void UseZoneScript(const char* name, lua_State* state, bool val); + lua_State* GetItemScript(const char* name, bool create_new = true, bool use = false); + lua_State* GetSpawnScript(const char* name, bool create_new = true, bool use = false); + lua_State* GetZoneScript(const char* name, bool create_new = true, bool use = false); + Quest* LoadQuest(int32 id, const char* name, const char* type, const char* zone, int8 level, const char* description, char* script_name); + + void RemoveSpawnScript(const char* name); + bool RunItemScript(string script_name, const char* function_name, Item* item, Spawn* spawn = 0); + bool CallItemScript(lua_State* state, int8 num_parameters); + bool RunSpawnScript(string script_name, const char* function_name, Spawn* npc, Spawn* spawn = 0, const char* message = 0); + bool CallSpawnScript(lua_State* state, int8 num_parameters); + bool RunZoneScript(string script_name, const char* function_name, ZoneServer* zone, Spawn* spawn = 0, int32 grid_id = 0); + bool CallZoneScript(lua_State* state, int8 num_parameters); + void ResetFunctionStack(lua_State* state); + void DestroySpells(); + void DestroySpawnScripts(); + void DestroyItemScripts(); + void ReloadSpells(); + void DestroyQuests(bool reload = false); + void DestroyZoneScripts(); + void SimpleLogError(const char* error); + void LogError(const char* error, ...); + + + void CallQuestFunction(Quest* quest, const char* function, Spawn* player, int32 step_id = 0xFFFFFFFF); + void RemoveDebugClients(Client* client); + void UpdateDebugClients(Client* client); + void ProcessErrorMessage(const char* message); + map GetDebugClients(){ return debug_clients; } + void AddUserDataPtr(LUAUserData* data); + void DeleteUserDataPtrs(bool all); + void DeletePendingSpells(bool all); + Mutex* GetSpawnScriptMutex(const char* name); + Mutex* GetItemScriptMutex(const char* name); + Mutex* GetZoneScriptMutex(const char* name); + Mutex* GetQuestMutex(Quest* quest); + + void SetSpawnScriptsReloading(bool val) { spawn_scripts_reloading = val; } + + void AddPendingSpellDelete(LuaSpell* spell); +private: + bool shutting_down; + bool spawn_scripts_reloading; + map spells_pending_delete; + Timer* user_data_timer; + Timer* spell_delete_timer; + map user_data; + map debug_clients; + map current_spells; + vector* GetDirectoryListing(const char* directory); + lua_State* LoadLuaFile(const char* name); + void RegisterFunctions(lua_State* state); + map spells; + map quests; + map quest_states; + map > item_scripts; + map > spawn_scripts; + map > zone_scripts; + map item_scripts_mutex; + map spawn_scripts_mutex; + map zone_scripts_mutex; + map quests_mutex; + Mutex MDebugClients; + Mutex MSpells; + Mutex MSpawnScripts; + Mutex MItemScripts; + Mutex MZoneScripts; + Mutex MQuests; + Mutex MLUAUserData; + Mutex MLUAMain; + Mutex MSpellDelete; +}; +#endif diff --git a/EQ2/source/WorldServer/MutexHelper.h b/EQ2/source/WorldServer/MutexHelper.h new file mode 100644 index 000000000..58c3aa75f --- /dev/null +++ b/EQ2/source/WorldServer/MutexHelper.h @@ -0,0 +1,202 @@ +/* + EQ2Emulator: Everquest II Server Emulator + Copyright (C) 2007 EQ2EMulator Development Team (http://www.eq2emulator.net) + + This file is part of EQ2Emulator. + + EQ2Emulator is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + EQ2Emulator is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with EQ2Emulator. If not, see . +*/ +#ifndef MUTEXHELPER_H +#define MUTEXHELPER_H + +#include "../common/timer.h" +#include "../common/Mutex.h" +#include +#include + +template +class IsPointer { +public: + static bool ValidPointer(T key){ + return false; + } + + static void Delete(T key){ + } +}; + +class Locker{ +public: + Locker(){ + #ifdef WIN32 + InitializeCriticalSection(&CSMutex); + #else + pthread_mutexattr_t attr; + pthread_mutexattr_init(&attr); + pthread_mutexattr_settype(&attr, PTHREAD_MUTEX_RECURSIVE_NP); + pthread_mutex_init(&CSMutex, &attr); + pthread_mutexattr_destroy(&attr); + #endif + } + Locker(const Locker& locker){ + #ifdef WIN32 + InitializeCriticalSection(&CSMutex); + #else + pthread_mutexattr_t attr; + pthread_mutexattr_init(&attr); + pthread_mutexattr_settype(&attr, PTHREAD_MUTEX_RECURSIVE_NP); + pthread_mutex_init(&CSMutex, &attr); + pthread_mutexattr_destroy(&attr); + #endif + } + ~Locker(){ + #ifdef WIN32 + DeleteCriticalSection(&CSMutex); + #else + // pthread_mutex_destroy(&CSMutex); + #endif + } + void lock(){ + #ifdef WIN32 + EnterCriticalSection(&CSMutex); + #else + pthread_mutex_lock(&CSMutex); + #endif + } + void unlock(){ + #ifdef WIN32 + LeaveCriticalSection(&CSMutex); + #else + pthread_mutex_unlock(&CSMutex); + #endif + } + +private: + #ifdef WIN32 + CRITICAL_SECTION CSMutex; + #else + pthread_mutex_t CSMutex; + #endif +}; + +template +class IsPointer { +public: + static bool ValidPointer(T* key){ + return true; + } + static void Delete(T* key){ + if(key){ + delete key; + key = 0; + } + } +}; + +template +class DeleteData{ +public: + + void SetData(int type, KeyT key, ValueT value, unsigned int time){ + this->type = type; + this->key = key; + this->value = value; + this->time = time; + } + + void DeleteKey(){ + IsPointer::Delete(key); + } + + void DeleteValue(){ + IsPointer::Delete(value); + } + + unsigned int GetTime(){ + return time; + } + + int GetType(){ + return type; + } +private: + int type; + KeyT key; + ValueT value; + unsigned int time; +}; + +template +class HandleDeletes { +public: + HandleDeletes(){ + access_count = 0; + next_delete_attempt = 0; + changing = false; + has_pending_deletes = false; + } + ~HandleDeletes(){ + CheckDeletes(true); + } + void AddPendingDelete(T value, unsigned int time){ + if(IsPointer::ValidPointer(value)){ + while(changing){ + Sleep(1); + } + ++access_count; + pending_deletes[value] = time; + has_pending_deletes = true; + --access_count; + } + } + + void CheckDeletes(bool force = false){ + while(changing){ + Sleep(1); + } + if(has_pending_deletes && (force || (Timer::GetCurrentTime2() > next_delete_attempt && access_count == 0))){ + changing = true; + while(access_count > 0){ + Sleep(1); + } + ++access_count; + next_delete_attempt = Timer::GetCurrentTime2(); + std::list deletes; + typename std::map::iterator pending_delete_itr; + for(pending_delete_itr = pending_deletes.begin(); pending_delete_itr != pending_deletes.end(); pending_delete_itr++){ + if(force || next_delete_attempt >= pending_delete_itr->second) + deletes.push_back(pending_delete_itr->first); + } + if(deletes.size() > 0){ + typename std::list::iterator delete_itr; + for(delete_itr = deletes.begin(); delete_itr != deletes.end(); delete_itr++){ + IsPointer::Delete(*delete_itr); + pending_deletes.erase(*delete_itr); + } + has_pending_deletes = (pending_deletes.size() > 0); + } + next_delete_attempt += 1000; + --access_count; + changing = false; + } + } + +private: + volatile bool changing; + volatile int access_count; + volatile unsigned int next_delete_attempt; + volatile bool has_pending_deletes; + std::map pending_deletes; +}; +#endif diff --git a/EQ2/source/WorldServer/MutexList.h b/EQ2/source/WorldServer/MutexList.h new file mode 100644 index 000000000..818c05054 --- /dev/null +++ b/EQ2/source/WorldServer/MutexList.h @@ -0,0 +1,277 @@ +/* + EQ2Emulator: Everquest II Server Emulator + Copyright (C) 2007 EQ2EMulator Development Team (http://www.eq2emulator.net) + + This file is part of EQ2Emulator. + + EQ2Emulator is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + EQ2Emulator is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with EQ2Emulator. If not, see . +*/ +#ifndef MUTEXLIST_H +#define MUTEXLIST_H +#include +#include "MutexHelper.h" + +#define MUTEXLIST_PENDING_ADD 1 +#define MUTEXLIST_PENDING_REMOVE 2 +#define MUTEXLIST_PENDING_DELETE 3 + +template +class MutexList{ +public: + MutexList(){ + pending_changing = false; + has_pending_data = false; + pending_clear = false; + changing = false; + access_count = 0; + access_pending = 0; + } + MutexList(const MutexList& list){ + pending_changing = false; + has_pending_data = false; + pending_clear = false; + changing = false; + access_count = 0; + access_pending = 0; + /*if(list.has_pending_data) + pending_data = list.pending_data; + current_data = list.current_data; */ + } + ~MutexList(){ + while(!update(true)){ + Sleep(1); + } + } + class iterator { + private: + typename std::list::iterator itr; // Current element + MutexList* list; + bool first_itr; + public: + iterator(){ + } + iterator(MutexList* list){ + if(list){ + this->list = list; + list->update(); + this->list->AddAccess(); + first_itr = true; + itr = list->current_data.begin(); + if(itr != list->current_data.end()) + value = *itr; + } + else + this->list = 0; + } + ~iterator(){ + if(list) + list->RemoveAccess(); + } + + bool HasNext(){ + return itr != list->current_data.end(); + } + + bool Next(){ + if(list->pending_clear) + return false; + if(first_itr) + first_itr = false; + else + itr++; + if(itr != list->current_data.end()){ + value = *itr; + if(list->PendingContains(value)) //pending delete + return Next(); + return true; + } + return false; + } + iterator* operator->() { + return this; + } + T value; +}; + void SetChanging(){ + ChangingLock.lock(); + changing = true; + ChangingLock.unlock(); + } + + void SetNotChanging(){ + ChangingLock.lock(); + changing = false; + ChangingLock.unlock(); + } + + void AddAccess(){ + AccessLock.lock(); + ++access_count; + AccessLock.unlock(); + } + + void RemoveAccess(){ + AccessLock.lock(); + --access_count; + AccessLock.unlock(); + } + + unsigned int size(bool include_pending = false){ + if(include_pending){ + update(); + return current_data.size() + pending_data.size(); + } + return current_data.size(); + } + iterator begin(){ + return iterator(this); + } + void clear(bool erase_all = false){ + pending_clear = true; + if(erase_all){ + AddAccess(); + PendingLock.lock(); + typename std::list::iterator itr; + for(itr = current_data.begin(); itr != current_data.end(); itr++){ + RemoveData(*itr); + } + PendingLock.unlock(); + RemoveAccess(); + } + update(); + } + + bool PendingContains(T key){ + if(!has_pending_data) + return false; + bool ret = false; + PendingLock.lock(); + ret = (pending_data.count(key) > 0 && pending_data[key] == false); + PendingLock.unlock(); + return ret; + } + + unsigned int count(T key){ + unsigned int ret = 0; + while(changing){ + Sleep(1); + } + AddAccess(); + bool retry = false; + if(!changing){ + typename std::list::iterator iter; + for(iter = current_data.begin(); iter != current_data.end(); iter++){ + if(*iter == key) + ret++; + } + } + else + retry = true; + RemoveAccess(); + if(retry) + return count(key); //only occurs whenever we change to changing state at the same time as a reading state + return ret; + } + + void RemoveData(T key, int32 erase_time = 0){ + handle_deletes.AddPendingDelete(key, Timer::GetCurrentTime2() + erase_time); + } + + void Remove(T key, bool erase = false, int32 erase_time = 0){ + while(changing){ + Sleep(1); + } + AddAccess(); + PendingLock.lock(); + pending_data[key] = false; + PendingLock.unlock(); + if(erase) + RemoveData(key, erase_time); + has_pending_data = true; + RemoveAccess(); + update(); + } + + void Add(T key){ + if(count(key) > 0) + return; + while(changing){ + Sleep(1); + } + AddAccess(); + PendingLock.lock(); + pending_data[key] = true; + PendingLock.unlock(); + has_pending_data = true; + RemoveAccess(); + update(); + } +private: + bool update(bool force = false){ + //if(access_count > 5) + // cout << "Possible error.\n"; + while(changing){ + Sleep(1); + } + if(pending_clear && access_count == 0){ + SetChanging(); + while(access_count > 0){ + Sleep(1); + } + AddAccess(); + PendingLock.lock(); + current_data.clear(); + has_pending_data = (pending_data.size() > 0); + PendingLock.unlock(); + pending_clear = false; + RemoveAccess(); + SetNotChanging(); + } + if(!pending_clear && has_pending_data && access_count == 0){ + SetChanging(); + while(access_count > 0){ + Sleep(1); + } + AddAccess(); + PendingLock.lock(); + typename std::map::iterator pending_itr; + for(pending_itr = pending_data.begin(); pending_itr != pending_data.end(); pending_itr++){ + if(pending_itr->second) + current_data.push_back(pending_itr->first); + else + current_data.remove(pending_itr->first); + } + pending_data.clear(); + PendingLock.unlock(); + has_pending_data = false; + RemoveAccess(); + SetNotChanging(); + } + handle_deletes.CheckDeletes(force); + return !pending_clear && !has_pending_data; + } + Locker PendingLock; + Locker AccessLock; + Locker ChangingLock; + volatile int access_count; + std::list current_data; + std::map pending_data; + HandleDeletes handle_deletes; + volatile int access_pending; + volatile bool pending_changing; + volatile bool changing; + volatile bool has_pending_data; + volatile bool pending_clear; +}; +#endif diff --git a/EQ2/source/WorldServer/MutexMap.h b/EQ2/source/WorldServer/MutexMap.h new file mode 100644 index 000000000..afa33b0d3 --- /dev/null +++ b/EQ2/source/WorldServer/MutexMap.h @@ -0,0 +1,304 @@ +/* + EQ2Emulator: Everquest II Server Emulator + Copyright (C) 2007 EQ2EMulator Development Team (http://www.eq2emulator.net) + + This file is part of EQ2Emulator. + + EQ2Emulator is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + EQ2Emulator is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with EQ2Emulator. If not, see . +*/ +#ifndef MUTEXMAP_H +#define MUTEXMAP_H +#include +#include "MutexHelper.h" + +#define MUTEXMAP_DELETE_TYPE_KEY 1 +#define MUTEXMAP_DELETE_TYPE_VALUE 2 + +template +class MutexMap{ +public: + MutexMap(){ + has_pending_data = false; + pending_clear = false; + changing = false; + access_count = 0; + has_pending_deletes = false; + next_delete_attempt = 0; + delete_all = false; + } + ~MutexMap(){ + update(true); + PendingLock.lock(); + pending_add.clear(); + pending_remove.clear(); + PendingLock.unlock(); + } + class iterator { + private: + typename std::map::iterator itr; // Current element + MutexMap* map; + bool first_itr; + public: + iterator(){ + } + iterator(MutexMap* map){ + this->map = map; + map->update(); + map->SetChanging(); + this->map->AddAccess(); + map->SetNotChanging(); + first_itr = true; + itr = map->current_data.begin(); + if(itr != map->current_data.end()){ + first = itr->first; + second = itr->second; + } + } + ~iterator(){ + map->RemoveAccess(); + } + + bool HasNext(){ + return itr != map->current_data.end(); + } + + bool Next(){ + if(map->pending_clear) + return false; + if(first_itr) + first_itr = false; + else + itr++; + if(itr != map->current_data.end()){ + first = itr->first; + second = itr->second; + map->PendingLock.lock(); + if(map->pending_remove.count(first) > 0){ + map->PendingLock.unlock(); + return Next(); + } + map->PendingLock.unlock(); + return true; + } + return false; + } + iterator* operator->() { + return this; + } + KeyT first; + ValueT second; + }; + int count(KeyT key, bool include_pending = false){ + while(changing){ + Sleep(1); + } + AddAccess(); + int ret = current_data.count(key); + if(include_pending){ + PendingLock.lock(); + ret += pending_add.count(key); + PendingLock.unlock(); + } + RemoveAccess(); + return ret; + } + void clear(bool delete_all = false){ + pending_clear = true; + if(delete_all){ + SetChanging(); + while(access_count > 0){ + Sleep(1); + } + AddAccess(); + PendingLock.lock(); + typename std::map::iterator itr; + for(itr = current_data.begin(); itr != current_data.end(); itr++){ + deleteData(itr->first, MUTEXMAP_DELETE_TYPE_VALUE); + } + PendingLock.unlock(); + RemoveAccess(); + SetNotChanging(); + } + update(); + } + unsigned int size(bool include_pending = false){ + if(include_pending) + return current_data.size() + pending_add.size(); + return current_data.size(); + } + void deleteData(KeyT key, int8 type, int32 erase_time = 0){ + DeleteData* del = new DeleteData(); + del->SetData(type, key, current_data[key], Timer::GetCurrentTime2() + erase_time); + pending_deletes[del] = true; + has_pending_deletes = true; + } + void erase(KeyT key, bool erase_key = false, bool erase_value = false, int32 erase_time = 0){ + while(changing){ + Sleep(1); + } + AddAccess(); + if(current_data.count(key) != 0){ + PendingLock.lock(); + pending_remove[key] = true; + if(erase_key || erase_value){ + int type = 0; + if(erase_key) + type = MUTEXMAP_DELETE_TYPE_KEY; + if(erase_value) + type += MUTEXMAP_DELETE_TYPE_VALUE; + deleteData(key, type, erase_time); + } + has_pending_data = true; + PendingLock.unlock(); + } + RemoveAccess(); + update(); + } + iterator begin(){ + return iterator(this); + } + void Put(KeyT key, ValueT value){ + while(changing){ + Sleep(1); + } + AddAccess(); + PendingLock.lock(); + pending_add[key] = value; + has_pending_data = true; + PendingLock.unlock(); + RemoveAccess(); + update(); + } + ValueT& Get(KeyT key){ + while(changing){ + Sleep(1); + } + AddAccess(); + if(current_data.count(key) > 0 || pending_add.count(key) == 0){ + RemoveAccess(); + return current_data[key]; + } + RemoveAccess(); + return pending_add[key]; + } +private: + void AddAccess(){ + AccessLock.lock(); + ++access_count; + AccessLock.unlock(); + } + + void RemoveAccess(){ + AccessLock.lock(); + --access_count; + AccessLock.unlock(); + } + + void SetChanging(){ + ChangingLock.lock(); + changing = true; + } + + void SetNotChanging(){ + changing = false; + ChangingLock.unlock(); + } + + void update(bool force = false){ + if(pending_clear && (force || access_count == 0)){ + SetChanging(); + while(access_count > 0){ + Sleep(1); + } + AddAccess(); + PendingLock.lock(); + current_data.clear(); + has_pending_data = (pending_add.size() > 0 || pending_remove.size() > 0); + pending_clear = false; + PendingLock.unlock(); + RemoveAccess(); + SetNotChanging(); + } + if(!pending_clear && has_pending_data && (force || access_count == 0)){ + SetChanging(); + while(access_count > 0){ + Sleep(1); + } + AddAccess(); + PendingLock.lock(); + typename std::map::iterator remove_itr; + for(remove_itr = pending_remove.begin(); remove_itr != pending_remove.end(); remove_itr++){ + current_data.erase(remove_itr->first); + } + typename std::map::iterator add_itr; + for(add_itr = pending_add.begin(); add_itr != pending_add.end(); add_itr++){ + current_data[add_itr->first] = add_itr->second; + } + pending_add.clear(); + pending_remove.clear(); + has_pending_data = false; + PendingLock.unlock(); + RemoveAccess(); + SetNotChanging(); + } + if(has_pending_deletes && (force || (Timer::GetCurrentTime2() > next_delete_attempt && access_count == 0))){ + SetChanging(); + while(access_count > 0){ + Sleep(1); + } + AddAccess(); + PendingLock.lock(); + unsigned int time = Timer::GetCurrentTime2(); + typename std::list*> deleteData; + typename std::map*, bool>::iterator remove_itr; + for(remove_itr = pending_deletes.begin(); remove_itr != pending_deletes.end(); remove_itr++){ + if(force || time >= remove_itr->first->GetTime()) + deleteData.push_back(remove_itr->first); + } + DeleteData* data = 0; + typename std::list*>::iterator remove_data_itr; + for(remove_data_itr = deleteData.begin(); remove_data_itr != deleteData.end(); remove_data_itr++){ + data = *remove_data_itr; + if((data->GetType() & MUTEXMAP_DELETE_TYPE_KEY) == MUTEXMAP_DELETE_TYPE_KEY){ + data->DeleteKey(); + } + if((data->GetType() & MUTEXMAP_DELETE_TYPE_VALUE) == MUTEXMAP_DELETE_TYPE_VALUE){ + data->DeleteValue(); + } + pending_deletes.erase(data); + delete data; + } + next_delete_attempt = Timer::GetCurrentTime2() + 1000; + PendingLock.unlock(); + RemoveAccess(); + SetNotChanging(); + has_pending_deletes = (pending_deletes.size() > 0); + } + } + Locker PendingLock; + Locker AccessLock; + Locker ChangingLock; + std::map current_data; + std::map pending_add; + std::map*, bool > pending_deletes; + std::map pending_remove; + volatile unsigned int next_delete_attempt; + volatile int access_count; + volatile bool delete_all; + volatile bool changing; + volatile bool has_pending_data; + volatile bool has_pending_deletes; + volatile bool pending_clear; +}; +#endif diff --git a/EQ2/source/WorldServer/MutexVector.h b/EQ2/source/WorldServer/MutexVector.h new file mode 100644 index 000000000..1ca3c28ff --- /dev/null +++ b/EQ2/source/WorldServer/MutexVector.h @@ -0,0 +1,202 @@ +/* + EQ2Emulator: Everquest II Server Emulator + Copyright (C) 2007 EQ2EMulator Development Team (http://www.eq2emulator.net) + + This file is part of EQ2Emulator. + + EQ2Emulator is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + EQ2Emulator is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with EQ2Emulator. If not, see . +*/ +#ifndef MUTEXVECTOR_H +#define MUTEXVECTOR_H +#include +#include "MutexHelper.h" + +#define MUTEXVECTOR_PENDING_ADD 1 +#define MUTEXVECTOR_PENDING_REMOVE 2 +#define MUTEXVECTOR_PENDING_DELETE 3 + +template +class MutexVector{ +public: + MutexVector(){ + has_pending_data = false; + pending_clear = false; + changing = false; + access_count = 0; + } + ~MutexVector(){ + + } + class iterator { + private: + typename std::vector::iterator itr; // Current element + MutexVector* vector; + bool first_itr; + public: + iterator(){ + } + iterator(MutexVector* vector){ + if(vector){ + this->vector = vector; + vector->update(); + ++this->vector->access_count; + first_itr = true; + itr = vector->current_data.begin(); + if(itr != vector->current_data.end()) + value = *itr; + } + else + this->vector = 0; + } + ~iterator(){ + if(vector) + --vector->access_count; + } + + bool HasNext(){ + return itr != vector->current_data.end(); + } + + bool Next(){ + if(vector->pending_clear) + return false; + if(first_itr) + first_itr = false; + else + itr++; + if(itr != vector->current_data.end()){ + value = *itr; + if(vector->pending_data.count(value) > 0 && vector->pending_data[value] == false) //pending delete + return Next(); + return true; + } + return false; + } + iterator* operator->() { + return this; + } + T value; +}; + void update(){ + //if(access_count > 5) + // cout << "Possible error.\n"; + while(changing){ + Sleep(1); + } + if(pending_clear && access_count == 0){ + changing = true; + while(access_count > 0){ + Sleep(1); + } + ++access_count; + current_data.clear(); + has_pending_data = (pending_data.size() > 0); + pending_clear = false; + --access_count; + changing = false; + } + if(!pending_clear && has_pending_data && access_count == 0){ + changing = true; + while(access_count > 0){ + Sleep(1); + } + ++access_count; + typename std::map::iterator pending_itr; + for(pending_itr = pending_data.begin(); pending_itr != pending_data.end(); pending_itr++){ + if(pending_itr->second) + current_data.push_back(pending_itr->first); + else{ + typename std::vector::iterator data_itr; + for(data_itr = current_data.begin(); data_itr != current_data.end(); data_itr++){ + if(*data_itr == pending_itr->first){ + current_data.erase(data_itr); + break; + } + } + } + } + pending_data.clear(); + has_pending_data = false; + --access_count; + changing = false; + } + handle_deletes.CheckDeletes(); + } + unsigned int size(bool include_pending = false){ + if(include_pending) + return current_data.size() + pending_data.size(); + return current_data.size(); + } + iterator begin(){ + return iterator(this); + } + void clear(){ + pending_clear = true; + update(); + } + + unsigned int count(T key){ + unsigned int ret = 0; + while(changing){ + Sleep(1); + } + ++access_count; + typename std::list::iterator iter; + for(iter = current_data.begin(); iter != current_data.end(); iter++){ + if(*iter == key) + ret++; + } + --access_count; + return ret; + } + + void Remove(T key, bool erase = false, unsigned int erase_time = 0){ + while(changing){ + Sleep(1); + } + ++access_count; + pending_data[key] = false; + if(erase) + handle_deletes.AddPendingDelete(key, erase_time); + has_pending_data = true; + --access_count; + update(); + } + + void Add(T key){ + while(changing){ + Sleep(1); + } + ++access_count; + pending_data[key] = true; + has_pending_data = true; + --access_count; + update(); + } + T Get(unsigned int index){ + while(changing){ + Sleep(1); + } + return current_data[index]; + } +private: + volatile int access_count; + std::vector current_data; + std::map pending_data; + HandleDeletes handle_deletes; + volatile bool changing; + volatile bool has_pending_data; + volatile bool pending_clear; +}; +#endif diff --git a/EQ2/source/WorldServer/NPC.cpp b/EQ2/source/WorldServer/NPC.cpp new file mode 100644 index 000000000..33e23ddc8 --- /dev/null +++ b/EQ2/source/WorldServer/NPC.cpp @@ -0,0 +1,857 @@ +/* + EQ2Emulator: Everquest II Server Emulator + Copyright (C) 2007 EQ2EMulator Development Team (http://www.eq2emulator.net) + + This file is part of EQ2Emulator. + + EQ2Emulator is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + EQ2Emulator is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with EQ2Emulator. If not, see . +*/ +#include "NPC.h" +#include "WorldDatabase.h" +#include +#include "client.h" +#include "World.h" +#include "races.h" +#include "../common/Log.h" +#include "NPC_AI.h" +#include "Appearances.h" +#include "SpellProcess.h" + +extern MasterSpellList master_spell_list; +extern ConfigReader configReader; +extern WorldDatabase database; +extern World world; +extern Races races; +extern Appearance master_appearance_list; + +NPC::NPC(){ + Initialize(); +} + +NPC::NPC(NPC* old_npc){ + Initialize(); + if(old_npc){ + if(old_npc->GetSizeOffset() > 0){ + int8 offset = old_npc->GetSizeOffset()+1; + sint32 tmp_size = old_npc->size + (rand()%offset - rand()%offset); + if(tmp_size < 0) + tmp_size = 1; + else if(tmp_size >= 0xFFFF) + tmp_size = 0xFFFF; + size = (int16)tmp_size; + } + else + size = old_npc->size; + SetMerchantID(old_npc->GetMerchantID()); + SetMerchantType(old_npc->GetMerchantType()); + SetPrimaryCommands(&old_npc->primary_command_list); + SetSecondaryCommands(&old_npc->secondary_command_list); + appearance_id = old_npc->appearance_id; + database_id = old_npc->database_id; + primary_command_list_id = old_npc->primary_command_list_id; + secondary_command_list_id = old_npc->secondary_command_list_id; + memcpy(GetInfoStruct(), old_npc->GetInfoStruct(), sizeof(InfoStruct)); + memcpy(&appearance, &old_npc->appearance, sizeof(AppearanceData)); + memcpy(&features, &old_npc->features, sizeof(CharFeatures)); + memcpy(&equipment, &old_npc->equipment, sizeof(EQ2_Equipment)); + if(appearance.min_level < appearance.max_level) + SetLevel(appearance.min_level + rand()%((appearance.max_level - appearance.min_level)+1)); + target = 0; + SetTotalHPBase(old_npc->GetTotalHPBase()); + SetTotalPowerBase(old_npc->GetTotalPowerBase()); + faction_id = old_npc->faction_id; + movement_interrupted = false; + SetQuestsRequired(old_npc->GetQuestsRequired()); + SetTransporterID(old_npc->GetTransporterID()); + + SetAttackType(old_npc->GetAttackType()); + SetAIStrategy(old_npc->GetAIStrategy()); + SetPrimarySpellList(old_npc->GetPrimarySpellList()); + SetSecondarySpellList(old_npc->GetSecondarySpellList()); + SetPrimarySkillList(old_npc->GetPrimarySkillList()); + SetSecondarySkillList(old_npc->GetSecondarySkillList()); + SetEquipmentListID(old_npc->GetEquipmentListID()); + SetAggroRadius(old_npc->GetAggroRadius()); + SetCastPercentage(old_npc->GetCastPercentage()); + SetRandomize(old_npc->GetRandomize()); + if(appearance.randomize > 0) + Randomize(this, appearance.randomize); + CalculateBonuses(); + SetHP(GetTotalHP()); + SetPower(GetTotalPower()); + ChangePrimaryWeapon(); + ChangeSecondaryWeapon(); + } +} + +NPC::~NPC(){ + ResetMovement(); + if(skills){ + map::iterator skill_itr; + for(skill_itr = skills->begin(); skill_itr != skills->end(); skill_itr++){ + safe_delete(skill_itr->second); + } + safe_delete(skills); + } + safe_delete(spells); + MutexMap::iterator sb_itr = skill_bonus_list.begin(); + while (sb_itr.Next()) + RemoveSkillBonus(sb_itr.first); + safe_delete(runback); + safe_delete(m_brain); +} + +void NPC::Initialize(){ + ai_strategy = 0; + attack_type = 0; + movement_index = 0; + resume_movement = true; + movement_start_time = 0; + spawn_type = 2; + movement_interrupted = false; + attack_resume_needed = false; + MMovementLoop.SetName("NPC::MMovementLoop"); + last_movement_update = Timer::GetCurrentTime2(); + aggro_radius = 0; + skills = 0; + spells = 0; + runback = 0; + owner = 0; + m_brain = new ::Brain(this); + MBrain.SetName("NPC::m_brain"); + m_runningBack = false; + m_runbackHeading = 0; + following = false; + SetFollowTarget(0); + m_petDismissing = false; +} + +EQ2Packet* NPC::serialize(Player* player, int16 version){ + opcode = EQOpcodeManager[GetOpcodeVersion(version)]->EmuToEQ(OP_EqCreateGhostCmd); + return spawn_serialize(player, version); +} + +void NPC::SetSkills(map* in_skills){ + if (skills) { + map::iterator skill_itr; + for(skill_itr = skills->begin(); skill_itr != skills->end(); skill_itr++){ + safe_delete(skill_itr->second); + } + + safe_delete(skills); + } + + skills = in_skills; +} + +void NPC::SetSpells(vector* in_spells){ + safe_delete(spells); + + spells = in_spells; +} + +void NPC::SetRunbackLocation(float x, float y, float z){ + safe_delete(runback); + runback = new MovementLocation; + runback->x = x; + runback->y = y; + runback->z = z; +} + +MovementLocation* NPC::GetRunbackLocation(){ + return runback; +} + +float NPC::GetRunbackDistance(){ + if(!runback) + return 0; + return GetDistance(runback->x, runback->y, runback->z); +} + +void NPC::Runback(){ + following = false; + m_runningBack = true; + ClearRunningLocations(); + FaceTarget(runback->x, runback->z); + SetSpeed(GetMaxSpeed()*2); + AddRunningLocation(runback->x, runback->y, runback->z, GetSpeed(), 0, false); + last_movement_update = Timer::GetCurrentTime2(); +} + +void NPC::ClearRunback(){ + safe_delete(runback); + m_runningBack = false; + m_runbackHeading = 0; + NeedsToResumeMovement(true); +} + +void NPC::InCombat(bool val){ + if (in_combat == val) + return; + + if(in_combat == false && val && GetZone()){ + LogWrite(NPC__DEBUG, 3, "NPC", "'%s' engaged in combat with '%s'", this->GetName(), ( GetTarget() ) ? GetTarget()->GetName() : "Unknown" ); + GetZone()->CallSpawnScript(this, SPAWN_SCRIPT_ATTACKED, GetTarget()); + SetTempActionState(0); // disable action states in combat + } + in_combat = val; + if(val){ + LogWrite(NPC__DEBUG, 3, "NPC", "'%s' engaged in combat with '%s'", this->GetName(), ( GetTarget() ) ? GetTarget()->GetName() : "Unknown" ); + SetLockedNoLoot(3); + AddIconValue(64); + // In combat so lets set the NPC's speed to its max speed + if (GetMaxSpeed() > 0) + SetSpeed(GetMaxSpeed()); + } + else{ + SetLockedNoLoot(1); + RemoveIconValue(64); + if (GetHP() > 0){ + SetTempActionState(-1); //re-enable action states on exiting combat + GetZone()->CallSpawnScript(this, SPAWN_SCRIPT_COMBAT_RESET); + // Stop all HO's attached to this NPC + GetZone()->GetSpellProcess()->KillHOBySpawnID(GetID()); + } + } + if(!MovementInterrupted() && val && GetSpeed() > 0 && movement_loop.size() > 0){ + CalculateRunningLocation(true); + } + if(val){ + // if not a pet and no current run back location set then set one to the current location + if(!IsPet() && !GetRunbackLocation()) { + SetRunbackLocation(GetX(), GetY(), GetZ()); + m_runbackHeading = appearance.pos.Dir1; + } + } + MovementInterrupted(val); +} + +bool NPC::HandleUse(Client* client, string type){ + if(!client || type.length() == 0 || appearance.show_command_icon == 0) + return false; + EntityCommand* entity_command = FindEntityCommand(type); + if (entity_command) { + client->GetCurrentZone()->ProcessEntityCommand(entity_command, client->GetPlayer(), client->GetPlayer()->GetTarget()); + return true; + } + return false; + /*Spell* spell = master_spell_list.GetSpellByName((char*)type.c_str()); + if(spell) + client->GetCurrentZone()->ProcessSpell(spell, client->GetPlayer(), client->GetPlayer()->GetTarget()); + else if(GetSpawnScript()) + client->GetCurrentZone()->CallSpawnScript(this, SPAWN_SCRIPT_CUSTOM, client->GetPlayer(), (char*)type.c_str()); + else + return false; + return true;*/ +} + + +bool NPC::CheckSameAppearance(string name, int16 id) +{ + // need to iterate through master_appearance_list finding if id contains name + return true; +} + + +void NPC::Randomize(NPC* npc, int32 flags) +{ + int8 random = 0; + int8 min_val = 0; + int8 max_val = 255; + + /* We need to check if gender is going to be randomized first because if the race is going to be + * randomized, we need to know its gender so we can choose the proper model. + * We also need to make sure the model gets set properly if the player chooses to randomize the gender + * and not the race. */ + int8 old_gender = npc->GetGender(); + + if (flags & RANDOMIZE_GENDER) + { + random = MakeRandomInt(1, 2); + LogWrite(NPC__DEBUG, 5, "NPCs", "Randomizing Gender: %i", random); + npc->SetGender(random); + } + + if ((flags & RANDOMIZE_RACE) || (flags & RANDOMIZE_GENDER && old_gender != npc->GetGender()) || (flags & RANDOMIZE_MODEL_TYPE)) + { + string race_string = ""; + int8 gender = npc->GetGender(); + + if (gender == 1 || gender == 2) + { + + if (flags & RANDOMIZE_RACE) + { + if(npc->GetAlignment() == 1) // Good + random = races.GetRaceNameGood(); + else if(npc->GetAlignment() < 0) // Evil + random = races.GetRaceNameEvil(); + else // All + random = MakeRandomInt(0, 20); + LogWrite(NPC__DEBUG, 5, "NPCs", "Randomizing Race: %s (%i)", races.GetRaceNameCase(random), random); + npc->SetRace(random); + } + + switch (npc->GetRace()) + { + case BARBARIAN: + // JA: If randomize has "4" (model) and race=0, barbarians show up in place of the real models. + // Started working on a solution (CheckSameAppearance) but cannot get it to work yet. + // Solution for now is to not randomize models for race=0. Set to race=255, or turn off model randomize + race_string = "/barbarian/barbarian"; + break; + case DARK_ELF: + race_string = "/darkelf/darkelf"; + break; + case DWARF: + race_string = "/dwarf/dwarf"; + break; + case ERUDITE: + race_string = "/erudite/erudite"; + break; + case FROGLOK: + race_string = "/froglok/froglok"; + break; + case GNOME: + race_string = "/gnome/gnome"; + break; + case HALF_ELF: + race_string = "/halfelf/halfelf"; + break; + case HALFLING: + race_string = "/halfling/halfling"; + break; + case HIGH_ELF: + race_string = "/highelf/highelf"; + break; + case HUMAN: + race_string = "/human/human"; + break; + case IKSAR: + race_string = "/iksar/iksar"; + break; + case KERRA: + race_string = "/kerra/kerra"; + break; + case OGRE: + race_string = "/ogre/ogre"; + break; + case RATONGA: + race_string = "/ratonga/ratonga"; + break; + case TROLL: + race_string = "/troll/troll"; + break; + case WOOD_ELF: + race_string = "/woodelf/woodelf"; + break; + case FAE: + race_string = "/fae/fae_light"; + break; + case ARASAI: + race_string = "/fae/fae_dark"; + break; + case SARNAK: + gender == 1 ? race_string = "01/sarnak_male/sarnak" : race_string = "01/sarnak_female/sarnak"; + break; + case VAMPIRE: + race_string = "/vampire/vampire"; + break; + case AERAKYN: + race_string = "/aerakyn/aerakyn"; + break; + } + + if (race_string.length() > 0) + { + string gender_string; + + gender == 1 ? gender_string = "male" : gender_string = "female"; + + vector* id_list = database.GetAppearanceIDsLikeName("ec/pc" + race_string + "_" + gender_string); + + if (id_list) + { + int32 index = MakeRandomInt(0, id_list->size() - 1); + npc->SetModelType(id_list->at(index)); + npc->SetSogaModelType(id_list->at(index)); + LogWrite(NPC__DEBUG, 5, "NPCs", "Randomizing Model Type: %i", npc->GetModelType()); + int16 wing_type = 0; + + if (npc->GetRace() == FAE) + { + vector* id_list_wings = database.GetAppearanceIDsLikeName("ec/pc/fae_wings/fae_wing"); + if (id_list_wings) { + wing_type = id_list_wings->at(MakeRandomInt(0, id_list_wings->size() - 1)); + safe_delete(id_list_wings); + } + } + else if (npc->GetRace() == ARASAI) + { + vector* id_list_wings = database.GetAppearanceIDsLikeName("ec/pc/fae_wings/fae_d_wing"); + if (id_list_wings) { + wing_type = id_list_wings->at(MakeRandomInt(0, id_list_wings->size() - 1)); + safe_delete(id_list_wings); + } + } + else if (npc->GetRace() == AERAKYN) + { + vector* id_list_wings = database.GetAppearanceIDsLikeName("ec/pc/aerakyn/aerakyn_male_wings"); + if (id_list_wings) { + wing_type = id_list_wings->at(MakeRandomInt(0, id_list_wings->size() - 1)); + safe_delete(id_list_wings); + } + } + if (wing_type > 0) + { + EQ2_Color color1; + EQ2_Color color2; + color1.red = MakeRandomInt(0, 255); + color1.green = MakeRandomInt(0, 255); + color1.blue = MakeRandomInt(0, 255); + color2.red = MakeRandomInt(0, 255); + color2.green = MakeRandomInt(0, 255); + color2.blue = MakeRandomInt(0, 255); + npc->SetWingColor1(color1); + npc->SetWingColor2(color2); + } + npc->SetWingType(wing_type); + safe_delete(id_list); + } + } + } + } + + if (flags & RANDOMIZE_FACIAL_HAIR_TYPE) { + vector* id_list = database.GetAppearanceIDsLikeName("accessories/hair/face"); + if (id_list) { + int32 index = MakeRandomInt(0, id_list->size() - 1); + npc->SetFacialHairType(id_list->at(index)); + npc->SetSogaFacialHairType(id_list->at(index)); + LogWrite(NPC__DEBUG, 5, "NPCs", "Randomizing Facial Hair: %i", npc->GetFacialHairType()); + safe_delete(id_list); + } + } + if (flags & RANDOMIZE_HAIR_TYPE) { + vector* id_list = database.GetAppearanceIDsLikeName("accessories/hair/hair"); + if (id_list) { + int32 index = MakeRandomInt(0, id_list->size() - 1); + npc->SetHairType(id_list->at(index)); + npc->SetSogaHairType(id_list->at(index)); + LogWrite(NPC__DEBUG, 5, "NPCs", "Randomizing Hair: %i", npc->GetHairType()); + safe_delete(id_list); + } + } + if (flags & RANDOMIZE_WING_TYPE) { + int16 wing_type = 0; + if (npc->GetRace() == FAE) { + vector* id_list_wings = database.GetAppearanceIDsLikeName("ec/pc/fae_wings/fae_wing"); + if (id_list_wings) { + wing_type = id_list_wings->at(MakeRandomInt(0, id_list_wings->size() - 1)); + safe_delete(id_list_wings); + } + } + else if (npc->GetRace() == ARASAI) { + vector* id_list_wings = database.GetAppearanceIDsLikeName("ec/pc/fae_wings/fae_d_wing"); + if (id_list_wings) { + wing_type = id_list_wings->at(MakeRandomInt(0, id_list_wings->size() - 1)); + safe_delete(id_list_wings); + } + } + else if (npc->GetRace() == AERAKYN) + { + vector* id_list_wings = database.GetAppearanceIDsLikeName("ec/pc/aerakyn/aerakyn_male_wings"); + if (id_list_wings) { + wing_type = id_list_wings->at(MakeRandomInt(0, id_list_wings->size() - 1)); + safe_delete(id_list_wings); + } + } + LogWrite(NPC__DEBUG, 5, "NPCs", "Randomizing Wing Type: %i", wing_type); + npc->SetWingType(wing_type); + } + + if (flags & RANDOMIZE_CHEEK_TYPE) { + for(int i=0;i<3;i++) { + random = MakeRandomFloat(-100, 100); + LogWrite(NPC__DEBUG, 5, "NPCs", "Randomizing Cheek[%i]: %i", i, random); + npc->features.cheek_type[i] = random; + } + } + if (flags & RANDOMIZE_CHIN_TYPE) { + for(int i=0;i<3;i++) { + random = MakeRandomFloat(-100, 100); + LogWrite(NPC__DEBUG, 5, "NPCs", "Randomizing Chin[%i]: %i", i, random); + npc->features.chin_type[i] = MakeRandomFloat(-100, 100); + } + } + if (flags & RANDOMIZE_EAR_TYPE) { + for(int i=0;i<3;i++) { + random = MakeRandomFloat(-100, 100); + LogWrite(NPC__DEBUG, 5, "NPCs", "Randomizing Ear[%i]: %i", i, random); + npc->features.ear_type[i] = MakeRandomFloat(-100, 100); + } + } + if (flags & RANDOMIZE_EYE_BROW_TYPE) { + for(int i=0;i<3;i++) { + random = MakeRandomFloat(-100, 100); + LogWrite(NPC__DEBUG, 5, "NPCs", "Randomizing Eyebrow[%i]: %i", i, random); + npc->features.eye_brow_type[i] = MakeRandomFloat(-100, 100); + } + } + if (flags & RANDOMIZE_EYE_TYPE) { + for(int i=0;i<3;i++) { + random = MakeRandomFloat(-100, 100); + LogWrite(NPC__DEBUG, 5, "NPCs", "Randomizing Eye[%i]: %i", i, random); + npc->features.eye_type[i] = MakeRandomFloat(-100, 100); + } + } + if (flags & RANDOMIZE_LIP_TYPE) { + for(int i=0;i<3;i++) { + random = MakeRandomFloat(-100, 100); + LogWrite(NPC__DEBUG, 5, "NPCs", "Randomizing Lip[%i]: %i", i, random); + npc->features.lip_type[i] = MakeRandomFloat(-100, 100); + } + } + if (flags & RANDOMIZE_NOSE_TYPE) { + for(int i=0;i<3;i++) { + random = MakeRandomFloat(-100, 100); + LogWrite(NPC__DEBUG, 5, "NPCs", "Randomizing Nose[%i]: %i", i, random); + npc->features.nose_type[i] = MakeRandomFloat(-100, 100); + } + } + + /* Randomize Colors */ + random = MakeRandomInt(0, 255); + if(random > 30) { + min_val = random - MakeRandomInt(0, 30); + max_val = random + MakeRandomInt(0, 30); + } + if(max_val > 255) + max_val = 255; + + LogWrite(NPC__DEBUG, 5, "NPCs", "Randomizing Color Ranges, random: %i, min: %i, max: %i", random, min_val, max_val); + + if (flags & RANDOMIZE_EYE_COLOR) { + npc->features.eye_color.red = MakeRandomInt(min_val, max_val); + npc->features.eye_color.green = MakeRandomInt(min_val, max_val); + npc->features.eye_color.blue = MakeRandomInt(min_val, max_val); + LogWrite(NPC__DEBUG, 5, "NPCs", "Randomizing Eye Color - R: %i, G: %i, B: %i", npc->features.eye_color.red, npc->features.eye_color.green, npc->features.eye_color.blue); + } + if (flags & RANDOMIZE_HAIR_COLOR1) { + npc->features.hair_color1.red = MakeRandomInt(min_val, max_val); + npc->features.hair_color1.green = MakeRandomInt(min_val, max_val); + npc->features.hair_color1.blue = MakeRandomInt(min_val, max_val); + LogWrite(NPC__DEBUG, 5, "NPCs", "Randomizing Hair Color 1 - R: %i, G: %i, B: %i", npc->features.hair_color1.red, npc->features.hair_color1.green, npc->features.hair_color1.blue); + } + if (flags & RANDOMIZE_HAIR_COLOR2) { + npc->features.hair_color2.red = MakeRandomInt(min_val, max_val); + npc->features.hair_color2.green = MakeRandomInt(min_val, max_val); + npc->features.hair_color2.blue = MakeRandomInt(min_val, max_val); + LogWrite(NPC__DEBUG, 5, "NPCs", "Randomizing Hair Color 2 - R: %i, G: %i, B: %i", npc->features.hair_color2.red, npc->features.hair_color2.green, npc->features.hair_color2.blue); + } + if (flags & RANDOMIZE_HAIR_HIGHLIGHT) { + npc->features.hair_highlight_color.red = MakeRandomInt(min_val, max_val); + npc->features.hair_highlight_color.green = MakeRandomInt(min_val, max_val); + npc->features.hair_highlight_color.blue = MakeRandomInt(min_val, max_val); + LogWrite(NPC__DEBUG, 5, "NPCs", "Randomizing Hair Highlight - R: %i, G: %i, B: %i", npc->features.hair_highlight_color.red, npc->features.hair_highlight_color.green, npc->features.hair_highlight_color.blue); + } + if (flags & RANDOMIZE_HAIR_FACE_COLOR) { + EQ2_Color color1; + color1.red = MakeRandomInt(min_val, max_val); + color1.green = MakeRandomInt(min_val, max_val); + color1.blue = MakeRandomInt(min_val, max_val); + LogWrite(NPC__DEBUG, 5, "NPCs", "Randomizing Facial Hair Color - R: %i, G: %i, B: %i", color1.red, color1.green, color1.blue); + npc->SetFacialHairColor(color1); + } + if (flags & RANDOMIZE_HAIR_FACE_HIGHLIGHT_COLOR) { + EQ2_Color color1; + color1.red = MakeRandomInt(min_val, max_val); + color1.green = MakeRandomInt(min_val, max_val); + color1.blue = MakeRandomInt(min_val, max_val); + LogWrite(NPC__DEBUG, 5, "NPCs", "Randomizing Facial Hair Highlight - R: %i, G: %i, B: %i", color1.red, color1.green, color1.blue); + npc->SetFacialHairHighlightColor(color1); + } + if (flags & RANDOMIZE_HAIR_TYPE_COLOR) { + EQ2_Color color1; + color1.red = MakeRandomInt(min_val, max_val); + color1.green = MakeRandomInt(min_val, max_val); + color1.blue = MakeRandomInt(min_val, max_val); + LogWrite(NPC__DEBUG, 5, "NPCs", "Randomizing Hair Type Color - R: %i, G: %i, B: %i", color1.red, color1.green, color1.blue); + npc->SetHairColor(color1); + } + if (flags & RANDOMIZE_HAIR_TYPE_HIGHLIGHT_COLOR) { + EQ2_Color color1; + color1.red = MakeRandomInt(min_val, max_val); + color1.green = MakeRandomInt(min_val, max_val); + color1.blue = MakeRandomInt(min_val, max_val); + LogWrite(NPC__DEBUG, 5, "NPCs", "Randomizing Hair Type Highlight - R: %i, G: %i, B: %i", color1.red, color1.green, color1.blue); + npc->SetHairHighlightColor(color1); + } + if (flags & RANDOMIZE_SKIN_COLOR) { + npc->features.skin_color.red = MakeRandomInt(min_val, max_val); + npc->features.skin_color.green = MakeRandomInt(min_val, max_val); + npc->features.skin_color.blue = MakeRandomInt(min_val, max_val); + LogWrite(NPC__DEBUG, 5, "NPCs", "Randomizing Skin Color - R: %i, G: %i, B: %i", npc->features.eye_color.red, npc->features.eye_color.green, npc->features.eye_color.blue); + } + if (flags & RANDOMIZE_WING_COLOR1) { + EQ2_Color color1; + color1.red = MakeRandomInt(min_val, max_val); + color1.green = MakeRandomInt(min_val, max_val); + color1.blue = MakeRandomInt(min_val, max_val); + LogWrite(NPC__DEBUG, 5, "NPCs", "Randomizing Wing Color 1 - R: %i, G: %i, B: %i", color1.red, color1.green, color1.blue); + npc->SetWingColor1(color1); + } + if (flags & RANDOMIZE_WING_COLOR2) { + EQ2_Color color1; + color1.red = MakeRandomInt(min_val, max_val); + color1.green = MakeRandomInt(min_val, max_val); + color1.blue = MakeRandomInt(min_val, max_val); + LogWrite(NPC__DEBUG, 5, "NPCs", "Randomizing Wing Color 2 - R: %i, G: %i, B: %i", color1.red, color1.green, color1.blue); + npc->SetWingColor2(color1); + } +} + +Skill* NPC::GetSkillByName(const char* name, bool check_update){ + if(skills && skills->count(name) > 0){ + Skill* ret = (*skills)[name]; + if(ret && check_update && ret->current_val < ret->max_val && (rand()%100) >= 90) + ret->current_val++; + return ret; + } + return 0; +} + +void NPC::SetAttackType(int8 type){ + attack_type = type; +} + +int8 NPC::GetAttackType(){ + return attack_type; +} + +void NPC::SetAIStrategy(int8 strategy){ + ai_strategy = strategy; +} + +int8 NPC::GetAIStrategy(){ + return ai_strategy; +} + +void NPC::SetPrimarySpellList(int32 id){ + primary_spell_list = id; +} + +int32 NPC::GetPrimarySpellList(){ + return primary_spell_list; +} + +void NPC::SetSecondarySpellList(int32 id){ + secondary_spell_list = id; +} + +int32 NPC::GetSecondarySpellList(){ + return secondary_spell_list; +} + +void NPC::SetPrimarySkillList(int32 id){ + primary_skill_list = id; +} + +int32 NPC::GetPrimarySkillList(){ + return primary_skill_list; +} + +void NPC::SetSecondarySkillList(int32 id){ + secondary_skill_list = id; +} + +int32 NPC::GetSecondarySkillList(){ + return secondary_skill_list; +} + +void NPC::SetEquipmentListID(int32 id){ + equipment_list_id = id; +} + +int32 NPC::GetEquipmentListID(){ + return equipment_list_id; +} + +Spell* NPC::GetNextSpell(float distance){ + int8 val = rand()%100; + if(ai_strategy == AI_STRATEGY_OFFENSIVE){ + if(val >= 20)//80% chance to cast offensive spell if Offensive AI + return GetNextSpell(distance, AI_STRATEGY_OFFENSIVE); + return GetNextSpell(distance, AI_STRATEGY_DEFENSIVE); + } + else if(ai_strategy == AI_STRATEGY_DEFENSIVE){ + if(val >= 20)//80% chance to cast defensive spell if Defensive AI + return GetNextSpell(distance, AI_STRATEGY_DEFENSIVE); + return GetNextSpell(distance, AI_STRATEGY_OFFENSIVE); + } + return GetNextSpell(distance, AI_STRATEGY_BALANCED); +} + +Spell* NPC::GetNextSpell(float distance, int8 type){ + Spell* ret = 0; + if(spells){ + if(distance < 0) + distance = 0; + Spell* tmpSpell = 0; + vector::iterator itr; + for(itr = spells->begin(); itr != spells->end(); itr++){ + tmpSpell = *itr; + if(!tmpSpell || (type == AI_STRATEGY_OFFENSIVE && tmpSpell->GetSpellData()->friendly_spell > 0)) + continue; + if (tmpSpell->GetSpellData()->cast_type == SPELL_CAST_TYPE_TOGGLE) + continue; + if(type == AI_STRATEGY_DEFENSIVE && tmpSpell->GetSpellData()->friendly_spell == 0) + continue; + if(distance <= tmpSpell->GetSpellData()->range && distance >= tmpSpell->GetSpellData()->min_range && GetPower() >= tmpSpell->GetPowerRequired(this)){ + ret = tmpSpell; + if((rand()%100) >= 70) //30% chance to stop after finding the first match, this will give the appearance of the NPC randomly choosing a spell to cast + break; + } + } + if(!ret && type != AI_STRATEGY_BALANCED) + ret = GetNextSpell(distance, AI_STRATEGY_BALANCED); //wasnt able to find a valid match, so find any spell that the NPC has + } + return ret; +} + +Spell* NPC::GetNextBuffSpell() { + Spell* ret = 0; + if (spells && GetZone()->GetSpellProcess()) { + Spell* tmpSpell = 0; + vector::iterator itr; + for (itr = spells->begin(); itr != spells->end(); itr++) { + tmpSpell = *itr; + if (tmpSpell && tmpSpell->GetSpellData() && tmpSpell->GetSpellData()->cast_type == SPELL_CAST_TYPE_TOGGLE) { + SpellEffects* effect = GetSpellEffect(tmpSpell->GetSpellID()); + if (effect) { + if (effect->tier < tmpSpell->GetSpellTier()) { + ret = tmpSpell; + break; + } + } + else { + ret = tmpSpell; + break; + } + } + } + } + return ret; +} + +void NPC::SetAggroRadius(float radius){ + aggro_radius = radius; +} + +float NPC::GetAggroRadius(){ + return aggro_radius; +} + +void NPC::SetCastPercentage(int8 percentage){ + cast_percentage = percentage; +} + +int8 NPC::GetCastPercentage(){ + return cast_percentage; +} + +void NPC::AddSkillBonus(int32 spell_id, int32 skill_id, float value) { + if (value != 0) { + SkillBonus* sb; + if (skill_bonus_list.count(spell_id) == 0) { + sb = new SkillBonus; + sb->spell_id = spell_id; + skill_bonus_list.Put(spell_id, sb); + } + else + sb = skill_bonus_list.Get(spell_id); + if (sb->skills[skill_id] == 0) { + SkillBonusValue* sbv = new SkillBonusValue; + sbv->skill_id = skill_id; + sbv->value = value; + sb->skills[skill_id] = sbv; + if (skills) { + map::iterator itr; + for (itr = skills->begin(); itr != skills->end(); itr++) { + Skill* skill = itr->second; + if (skill->skill_id == sbv->skill_id) { + skill->current_val += (int16)sbv->value; + skill->max_val += (int16)sbv->value; + } + } + } + } + } +} + +void NPC::RemoveSkillBonus(int32 spell_id) { + if (skill_bonus_list.count(spell_id) > 0) { + SkillBonus* sb = skill_bonus_list.Get(spell_id); + skill_bonus_list.erase(spell_id); + map::iterator itr; + for (itr = sb->skills.begin(); itr != sb->skills.end(); itr++) { + SkillBonusValue* sbv = itr->second; + if (skills) { + map::iterator skill_itr; + for (skill_itr = skills->begin(); skill_itr != skills->end(); skill_itr++) { + Skill* skill = skill_itr->second; + if (sbv->skill_id == skill->skill_id) { + skill->current_val -= (int16)sbv->value; + skill->max_val -= (int16)sbv->value; + } + } + } + safe_delete(sbv); + } + safe_delete(sb); + } +} + +void NPC::SetBrain(::Brain* brain) { + // Again, had to use the '::' to refer to the Brain class and not the function defined in the NPC class + MBrain.writelock(__FUNCTION__, __LINE__); + // Check to make sure the NPC the brain controls matches this npc + if (brain->GetBody() != this) { + LogWrite(NPC_AI__ERROR, 0, "NPC_AI", "Brain body does not match the npc we tried to assign the brain to."); + MBrain.releasewritelock(__FUNCTION__, __LINE__); + return; + } + + // Store the old brain in a temp pointer so we can delete it later + ::Brain* old_brain = m_brain; + // Set the brain for this NPC to the new brain + m_brain = brain; + // Release the lock + MBrain.releasewritelock(__FUNCTION__, __LINE__); + // Delete the old brain + safe_delete(old_brain); +} + +Entity* NPC::GetOwner() { + return (Entity*)GetZone()->GetSpawnByID(owner); +} + +void NPC::SetZone(ZoneServer* in_zone) { + Spawn::SetZone(in_zone); + if (in_zone){ + GetZone()->SetNPCEquipment(this); + SetSkills(GetZone()->GetNPCSkills(primary_skill_list, secondary_skill_list)); + SetSpells(GetZone()->GetNPCSpells(primary_spell_list, secondary_spell_list)); + } +} \ No newline at end of file diff --git a/EQ2/source/WorldServer/NPC.h b/EQ2/source/WorldServer/NPC.h new file mode 100644 index 000000000..015f34966 --- /dev/null +++ b/EQ2/source/WorldServer/NPC.h @@ -0,0 +1,179 @@ +/* + EQ2Emulator: Everquest II Server Emulator + Copyright (C) 2007 EQ2EMulator Development Team (http://www.eq2emulator.net) + + This file is part of EQ2Emulator. + + EQ2Emulator is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + EQ2Emulator is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with EQ2Emulator. If not, see . +*/ +#ifndef __EQ2_NPC__ +#define __EQ2_NPC__ +#include "Entity.h" +#include "MutexMap.h" + +#define AI_STRATEGY_BALANCED 1 +#define AI_STRATEGY_OFFENSIVE 2 +#define AI_STRATEGY_DEFENSIVE 3 + + +// Randomize Appearances +#define RANDOMIZE_GENDER 1 +#define RANDOMIZE_RACE 2 +#define RANDOMIZE_MODEL_TYPE 4 + +// Randomize appearance id (spawn_npcs table values) +#define RANDOMIZE_FACIAL_HAIR_TYPE 8 // was RANDOMIZE_FACIAL_HAIR +#define RANDOMIZE_HAIR_TYPE 16 // was RANDOMIZE_HAIR +//#define RANDOMIZE_LEGS_TYPE 32 // spare! +#define RANDOMIZE_WING_TYPE 64 + +// Randomize parameters (npc_appearances, sInt values) +#define RANDOMIZE_CHEEK_TYPE 128 +#define RANDOMIZE_CHIN_TYPE 256 +#define RANDOMIZE_EAR_TYPE 512 +#define RANDOMIZE_EYE_BROW_TYPE 1024 +#define RANDOMIZE_EYE_TYPE 2048 +#define RANDOMIZE_LIP_TYPE 4096 +#define RANDOMIZE_NOSE_TYPE 8192 + +// Randomize colors/hues (npc_appearances, RGB values) +#define RANDOMIZE_EYE_COLOR 16384 +#define RANDOMIZE_HAIR_COLOR1 32768 +#define RANDOMIZE_HAIR_COLOR2 65536 +#define RANDOMIZE_HAIR_HIGHLIGHT 131072 +#define RANDOMIZE_HAIR_FACE_COLOR 262144 // was RANDOMIZE_FACIAL_HAIR_COLOR +#define RANDOMIZE_HAIR_FACE_HIGHLIGHT_COLOR 524288 +#define RANDOMIZE_HAIR_TYPE_COLOR 1048576 // was RANDOMIZE_HAIR_COLOR +#define RANDOMIZE_HAIR_TYPE_HIGHLIGHT_COLOR 2097152 +#define RANDOMIZE_SKIN_COLOR 4194304 +#define RANDOMIZE_WING_COLOR1 8388608 +#define RANDOMIZE_WING_COLOR2 16777216 + +// All Flags On: 33554431 + +#define PET_TYPE_COMBAT 1 +#define PET_TYPE_CHARMED 2 +#define PET_TYPE_DEITY 3 +#define PET_TYPE_COSMETIC 4 +#define PET_TYPE_DUMBFIRE 5 + +class Brain; + +class NPC : public Entity { +public: + NPC(); + NPC(NPC* old_npc); + virtual ~NPC(); + void Initialize(); + EQ2Packet* serialize(Player* player, int16 version); + void SetAppearanceID(int32 id){ appearance_id = id; } + int32 GetAppearanceID(){ return appearance_id; } + bool IsNPC(){ return true; } + void InCombat(bool val); + bool HandleUse(Client* client, string type); + void SetRandomize(int32 value) {appearance.randomize = value;} + void AddRandomize(sint32 value) {appearance.randomize += value;} + int32 GetRandomize() {return appearance.randomize;} + bool CheckSameAppearance(string name, int16 id); + void Randomize(NPC* npc, int32 flags); + Skill* GetSkillByName(const char* name, bool check_update = false); + void SetAttackType(int8 type); + int8 GetAttackType(); + void SetAIStrategy(int8 strategy); + int8 GetAIStrategy(); + void SetPrimarySpellList(int32 id); + int32 GetPrimarySpellList(); + void SetSecondarySpellList(int32 id); + int32 GetSecondarySpellList(); + void SetPrimarySkillList(int32 id); + int32 GetPrimarySkillList(); + void SetSecondarySkillList(int32 id); + int32 GetSecondarySkillList(); + void SetEquipmentListID(int32 id); + int32 GetEquipmentListID(); + Spell* GetNextSpell(float distance); + virtual Spell* GetNextBuffSpell(); + void SetAggroRadius(float radius); + float GetAggroRadius(); + void SetCastPercentage(int8 percentage); + int8 GetCastPercentage(); + void SetSkills(map* in_skills); + void SetSpells(vector* in_spells); + void SetRunbackLocation(float x, float y, float z); + MovementLocation* GetRunbackLocation(); + float GetRunbackDistance(); + void Runback(); + void ClearRunback(); + void AddSkillBonus(int32 spell_id, int32 skill_id, float value); + virtual void RemoveSkillBonus(int32 spell_id); + virtual void SetZone(ZoneServer* zone); + + void SetOwner(Entity* owner) { if (owner) { this->owner = owner->GetID(); } else { owner = 0; } } + Entity* GetOwner(); + int8 GetPetType() { return m_petType; } + void SetPetType(int8 val) { m_petType = val; } + void SetPetSpellID(int32 val) { m_petSpellID = val; } + int32 GetPetSpellID() { return m_petSpellID; } + void SetPetSpellTier(int8 val) { m_petSpellTier = val; } + int8 GetPetSpellTier() { return m_petSpellTier; } + void SetMaxPetLevel(int8 val) { m_petMaxLevel = val; } + int8 GetMaxPetLevel() { return m_petMaxLevel; } + + void ProcessCombat(); + + /// Sets the brain this NPC should use + /// The brain this npc should use + void SetBrain(Brain* brain); + /// Gets the current brain this NPC uses + /// The Brain this NPC uses + ::Brain* Brain() { return m_brain; } + bool m_runningBack; + sint16 m_runbackHeading; + + bool IsDismissing() { return m_petDismissing; } + void SetDismissing(bool val) { m_petDismissing = val; } + +private: + MovementLocation* runback; + int8 cast_percentage; + float aggro_radius; + Spell* GetNextSpell(float distance, int8 type); + map* skills; + vector* spells; + int32 primary_spell_list; + int32 secondary_spell_list; + int32 primary_skill_list; + int32 secondary_skill_list; + int32 equipment_list_id; + int8 attack_type; + int8 ai_strategy; + int32 appearance_id; + int32 npc_id; + MutexMap skill_bonus_list; + int8 m_petType; + // m_petSpellID holds the spell id used to create this pet + int32 m_petSpellID; + int8 m_petSpellTier; + int32 owner; + int8 m_petMaxLevel; + + bool m_petDismissing; + + // Because I named the get function Brain() as well we need to use '::' to specify we are refering to + // the brain class and not the function defined above + ::Brain* m_brain; + Mutex MBrain; +}; +#endif + diff --git a/EQ2/source/WorldServer/NPC_AI.cpp b/EQ2/source/WorldServer/NPC_AI.cpp new file mode 100644 index 000000000..31e7b77fd --- /dev/null +++ b/EQ2/source/WorldServer/NPC_AI.cpp @@ -0,0 +1,618 @@ +/* + EQ2Emulator: Everquest II Server Emulator + Copyright (C) 2007 EQ2EMulator Development Team (http://www.eq2emulator.net) + + This file is part of EQ2Emulator. + + EQ2Emulator is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + EQ2Emulator is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with EQ2Emulator. If not, see . +*/ + +#include "NPC_AI.h" +#include "Combat.h" +#include "zoneserver.h" +#include "Spells.h" +#include "../common/Log.h" +#include "LuaInterface.h" +#include "World.h" + +extern LuaInterface* lua_interface; +extern World world; + +/* The NEW AI code */ + +Brain::Brain(NPC* npc) { + // Set the npc this brain will controll + m_body = npc; + // Set the default time between calls to think to 250 miliseconds (1/4 a second) + m_tick = 250; + m_lastTick = Timer::GetCurrentTime2(); + m_spellRecovery = 0; + m_playerInEncounter = false; + // Set up the mutex for the hate list + MHateList.SetName("Brain::m_hatelist"); + // Set up the mutex for the encounter list + MEncounter.SetName("Brain::m_encounter"); +} + +Brain::~Brain() { + +} + +void Brain::Think() { + + // Get the entity this NPC hates the most, + // GetMostHated() will handle dead spawns so no need to check the health in this function + Entity* target = GetMostHated(); + + // If mezzed, stunned or feared we can't do anything so skip + if (!m_body->IsMezzedOrStunned() || !m_body->IsFeared()) { + // Not mezzed or stunned + + // Get the distance to the runback location + float run_back_distance = m_body->GetRunbackDistance(); + + if (target) { + LogWrite(NPC_AI__DEBUG, 7, "NPC_AI", "%s has %s targeted.", m_body->GetName(), target->GetName()); + // NPC has an entity that it hates + + // If the NPC is not in combat then put them in combat + if (!m_body->EngagedInCombat()) { + m_body->ClearRunningLocations(); + m_body->CalculateRunningLocation(true); + m_body->InCombat(true); + } + + // Set the NPC's target to the most hated entity if it is not already. + if (m_body->GetTarget() != target) { + m_body->SetTarget(target); + m_body->FaceTarget(target); + } + + // Check to see if the NPC has exceeded the max chase distance + if (run_back_distance > MAX_CHASE_DISTANCE) { + LogWrite(NPC_AI__DEBUG, 7, "NPC_AI", "Run back distance is greater then max chase distance, run_back_distance = %f", run_back_distance); + // Over the max chase distance, Check to see if the target is is a client + Client* client = target->GetZone()->GetClientBySpawn(target); + if (client) + { + // Target is a client so send encounter break messages + if (m_body->HasSpawnGroup()) + client->SimpleMessage(CHANNEL_COLOR_WHITE, "This encounter will no longer give encounter rewards."); + else + client->Message(CHANNEL_COLOR_WHITE, "%s is no longer worth any experience or treasure.", m_body->GetName()); + } + // Clear the hate list for this NPC + ClearHate(); + // Clear the encounter list + ClearEncounter(); + } + else { + // Still within max chase distance lets to the combat stuff now + + float distance = m_body->GetDistance(target); + distance -= target->appearance.pos.collision_radius / 10; + distance -= m_body->appearance.pos.collision_radius / 10; + + if(!m_body->IsCasting() && (!HasRecovered() || !ProcessSpell(target, distance))) { + LogWrite(NPC_AI__DEBUG, 7, "NPC_AI", "%s is attempting melee on %s.", m_body->GetName(), target->GetName()); + m_body->FaceTarget(target); + ProcessMelee(target, distance); + } + } + } + else { + // Nothing in the hate list + + // Check to see if the NPC is still flagged as in combat for some reason + if (m_body->EngagedInCombat()) { + // If it is set the combat flag to false + m_body->InCombat(false); + + // Do not set a players pet to full health once they stop combat + if (!m_body->IsPet() || (m_body->IsPet() && !m_body->GetOwner()->IsPlayer())) + m_body->SetHP(m_body->GetTotalHP()); + } + + CheckBuffs(); + + // If run back distance is greater then 0 then run back + if (run_back_distance > 0) { + m_body->Runback(); + } + // If encounter size is greater then 0 then clear it + if (GetEncounterSize() > 0) + ClearEncounter(); + } + } +} + +sint32 Brain::GetHate(Entity* entity) { + // We will use this variable to return the value, default to 0 + sint32 ret = 0; + + // Lock the hate list, not altering it so do a read lock + MHateList.readlock(__FUNCTION__, __LINE__); + + // First check to see if the given entity is even in the hate list + if (m_hatelist.count(entity->GetID()) > 0) + // Entity in the hate list so get the hate value for the entity + ret = m_hatelist[entity->GetID()]; + + // Unlock the hate list + MHateList.releasereadlock(__FUNCTION__, __LINE__); + + // return the hate + return ret; +} + +void Brain::AddHate(Entity* entity, sint32 hate) { + // Lock the hate list, we are altering the list so use write lock + MHateList.writelock(__FUNCTION__, __LINE__); + + if (m_hatelist.count(entity->GetID()) > 0) + m_hatelist[entity->GetID()] += hate; + else + m_hatelist.insert(std::pair(entity->GetID(), hate)); + + if (entity->HatedBy.count(m_body->GetID()) == 0) + entity->HatedBy.insert(m_body->GetID()); + + // Unlock the list + MHateList.releasewritelock(__FUNCTION__, __LINE__); +} + +void Brain::ClearHate() { + // Lock the hate list, we are altering the list so use a write lock + MHateList.writelock(__FUNCTION__, __LINE__); + + map::iterator itr; + for (itr = m_hatelist.begin(); itr != m_hatelist.end(); itr++) { + Spawn* spawn = m_body->GetZone()->GetSpawnByID(itr->first); + if (spawn && spawn->IsEntity()) + ((Entity*)spawn)->HatedBy.erase(itr->first); + } + + // Clear the list + m_hatelist.clear(); + // Unlock the hate list + MHateList.releasewritelock(__FUNCTION__, __LINE__); +} + +void Brain::ClearHate(Entity* entity) { + // Lock the hate list, we could potentially modify the list so use write lock + MHateList.writelock(__FUNCTION__, __LINE__); + + // Check to see if the given entity is in the hate list + if (m_hatelist.count(entity->GetID()) > 0) + // Erase the entity from the hate list + m_hatelist.erase(entity->GetID()); + + entity->HatedBy.erase(m_body->GetID()); + + // Unlock the hate list + MHateList.releasewritelock(__FUNCTION__, __LINE__); +} + +Entity* Brain::GetMostHated() { + map::iterator itr; + int32 ret = 0; + sint32 hate = 0; + + // Lock the hate list, not going to alter it so use a read lock + MHateList.readlock(__FUNCTION__, __LINE__); + + if (m_hatelist.size() > 0) { + // Loop through the list looking for the entity that this NPC hates the most + for(itr = m_hatelist.begin(); itr != m_hatelist.end(); itr++) { + // Compare the hate value for the current iteration to our stored highest value + if(itr->second > hate) { + // New high value store the entity + ret = itr->first; + // Store the value to compare with the rest of the entities + hate = itr->second; + } + } + } + // Unlock the list + MHateList.releasereadlock(__FUNCTION__, __LINE__); + Entity* hated = (Entity*)GetBody()->GetZone()->GetSpawnByID(ret); + // Check the reult to see if it is still alive + if(hated && hated->GetHP() <= 0) { + // Entity we got was dead so remove it from the list + ClearHate(hated); + // Call this function again now that we removed the dead entity + hated = GetMostHated(); + } + + // Return our result + return hated; +} + +sint8 Brain::GetHatePercentage(Entity* entity) { + float percentage = 0.0; + MHateList.readlock(__FUNCTION__, __LINE__); + if (entity && m_hatelist.count(entity->GetID()) > 0 && m_hatelist[entity->GetID()] > 0) { + sint32 total_hate = 0; + map::iterator itr; + for (itr = m_hatelist.begin(); itr != m_hatelist.end(); itr++) + total_hate += itr->second; + percentage = m_hatelist[entity->GetID()] / total_hate; + } + MHateList.releasereadlock(__FUNCTION__, __LINE__); + + return (sint8)(percentage * 100); +} + +vector* Brain::GetHateList() { + vector* ret = new vector; + map::iterator itr; + + // Lock the list + MHateList.readlock(__FUNCTION__, __LINE__); + // Loop over the list storing the values into the new list + for (itr = m_hatelist.begin(); itr != m_hatelist.end(); itr++) { + Entity* ent = (Entity*)GetBody()->GetZone()->GetSpawnByID(itr->first); + if (ent) + ret->push_back(ent); + } + // Unlock the list + MHateList.releasereadlock(__FUNCTION__, __LINE__); + + // Return the copy of the list + return ret; +} + +void Brain::MoveCloser(Entity* target) { + if (target && m_body->GetFollowTarget() != target) + m_body->SetFollowTarget(target); + + if (m_body->GetFollowTarget() && !m_body->following) { + m_body->CalculateRunningLocation(true); + m_body->ClearRunningLocations(); + m_body->following = true; + } +} + +bool Brain::ProcessSpell(Entity* target, float distance) { + if(rand()%100 > m_body->GetCastPercentage() || m_body->IsStifled() || m_body->IsFeared()) + return false; + Spell* spell = m_body->GetNextSpell(distance); + if(spell){ + Spawn* spell_target = 0; + if(spell->GetSpellData()->friendly_spell == 1){ + vector* group = m_body->GetSpawnGroup(); + if(group && group->size() > 0){ + vector::iterator itr; + for(itr = group->begin(); itr != group->end(); itr++){ + if((!spell_target && (*itr)->GetHP() > 0 && (*itr)->GetHP() < (*itr)->GetTotalHP()) || (spell_target && (*itr)->GetHP() > 0 && spell_target->GetHP() > (*itr)->GetHP())) + spell_target = *itr; + } + } + if(!spell_target) + spell_target = m_body; + + safe_delete(group); + } + else + spell_target = target; + m_body->GetZone()->ProcessSpell(spell, m_body, spell_target); + m_spellRecovery = (int32)(Timer::GetCurrentTime2() + (spell->GetSpellData()->cast_time * 10) + (spell->GetSpellData()->recovery * 10) + 2000); + return true; + } + return false; +} + +bool Brain::CheckBuffs() { + if (!m_body->GetZone()->GetSpellProcess() || m_body->EngagedInCombat() || m_body->IsCasting() || m_body->IsMezzedOrStunned() || !m_body->Alive() || m_body->IsStifled() || !HasRecovered()) + return false; + + Spell* spell = m_body->GetNextBuffSpell(); + if (spell) { + m_body->CalculateRunningLocation(true); + m_body->GetZone()->ProcessSpell(spell, m_body, m_body); + m_spellRecovery = (int32)(Timer::GetCurrentTime2() + (spell->GetSpellData()->cast_time * 10) + (spell->GetSpellData()->recovery * 10) + 2000); + return true; + } + return false; +} + +void Brain::ProcessMelee(Entity* target, float distance) { + if(distance > MAX_COMBAT_RANGE) + MoveCloser(target); + else { + if (target) { + LogWrite(NPC_AI__DEBUG, 7, "NPC_AI", "%s is within melee range of %s.", m_body->GetName(), target->GetName()); + if (m_body->AttackAllowed(target)) { + LogWrite(NPC_AI__DEBUG, 7, "NPC_AI", "%s is allowed to attack %s.", m_body->GetName(), target->GetName()); + if (m_body->PrimaryWeaponReady() && !m_body->IsDazed() && !m_body->IsFeared()) { + LogWrite(NPC_AI__DEBUG, 7, "NPC_AI", "%s swings its primary weapon at %s.", m_body->GetName(), target->GetName()); + m_body->SetPrimaryLastAttackTime(Timer::GetCurrentTime2()); + m_body->MeleeAttack(target, distance, true); + m_body->GetZone()->CallSpawnScript(m_body, SPAWN_SCRIPT_AUTO_ATTACK_TICK, target); + } + if (m_body->SecondaryWeaponReady() && !m_body->IsDazed()) { + m_body->SetSecondaryLastAttackTime(Timer::GetCurrentTime2()); + m_body->MeleeAttack(target, distance, false); + } + } + } + } +} + +bool Brain::HasRecovered() { + if(m_spellRecovery > Timer::GetCurrentTime2()) + return false; + + m_spellRecovery = 0; + return true; +} + +void Brain::AddToEncounter(Entity* entity) { + + // If player pet then set the entity to the pets owner + if (entity->IsPet() && ((NPC*)entity)->GetOwner()->IsPlayer()) + entity = ((NPC*)entity)->GetOwner(); + + // If player or bot then get the group + int32 group_id = 0; + if (entity->IsPlayer() || entity->IsBot()) { + m_playerInEncounter = true; + if (entity->GetGroupMemberInfo()) + group_id = entity->GetGroupMemberInfo()->group_id; + } + + // Insert the entity into the encounter list, if there is a group add all group members as well + // TODO: add raid members + MEncounter.writelock(__FUNCTION__, __LINE__); + if (group_id > 0) { + world.GetGroupManager()->GroupLock(__FUNCTION__, __LINE__); + + deque::iterator itr; + deque* members = world.GetGroupManager()->GetGroupMembers(group_id); + for (itr = members->begin(); itr != members->end(); itr++) { + if ((*itr)->client) + m_encounter.push_back((*itr)->client->GetPlayer()->GetID()); + } + + world.GetGroupManager()->ReleaseGroupLock(__FUNCTION__, __LINE__); + } + else { + m_encounter.push_back(entity->GetID()); + } + MEncounter.releasewritelock(__FUNCTION__, __LINE__); +} + +bool Brain::CheckLootAllowed(Entity* entity) { + bool ret = false; + vector::iterator itr; + + // Check the encounter list to see if the given entity is in it, if so return true. + MEncounter.readlock(__FUNCTION__, __LINE__); + for (itr = m_encounter.begin(); itr != m_encounter.end(); itr++) { + if ((*itr) == entity->GetID()) { + // found the entity in the encounter list, set return value to true and break the loop + ret = true; + break; + } + } + MEncounter.releasereadlock(__FUNCTION__, __LINE__); + + return ret; +} + +int8 Brain::GetEncounterSize() { + int8 ret = 0; + + MEncounter.readlock(__FUNCTION__, __LINE__); + ret = (int8)m_encounter.size(); + MEncounter.releasereadlock(__FUNCTION__, __LINE__); + + return ret; +} + +vector* Brain::GetEncounter() { + vector* ret = new vector; + vector::iterator itr; + + // Lock the list + MEncounter.readlock(__FUNCTION__, __LINE__); + // Loop over the list storing the values into the new list + for (itr = m_encounter.begin(); itr != m_encounter.end(); itr++) + ret->push_back(*itr); + // Unlock the list + MEncounter.releasereadlock(__FUNCTION__, __LINE__); + + // Return the copy of the list + return ret; +} + +void Brain::ClearEncounter() { + MEncounter.writelock(__FUNCTION__, __LINE__); + m_encounter.clear(); + m_playerInEncounter = false; + MEncounter.releasewritelock(__FUNCTION__, __LINE__); +} + + +/* Example of how to extend the default AI */ + + +CombatPetBrain::CombatPetBrain(NPC* body) : Brain(body) { + // Make sure to have the " : Brain(body)" so it calls the parent class constructor + // to set up the AI properly +} + +CombatPetBrain::~CombatPetBrain() { + +} + +void CombatPetBrain::Think() { + // We are extending the base brain so make sure to call the parent Think() function. + // If we want to override then we could remove Brain::Think() + Brain::Think(); + + // All this Brain does is make the pet follow its owner, the combat comes from the default brain + + if (GetBody()->EngagedInCombat() || !GetBody()->IsPet() || GetBody()->IsMezzedOrStunned()) + return; + + LogWrite(NPC_AI__DEBUG, 7, "NPC_AI", "Pet AI code called for %s", GetBody()->GetName()); + + // If owner is a player and player has stay set then return out + if (GetBody()->GetOwner()->IsPlayer() && ((Player*)GetBody()->GetOwner())->GetInfoStruct()->pet_movement == 1) + return; + + // Set target to owner + Entity* target = GetBody()->GetOwner(); + GetBody()->SetTarget(target); + + // Get distance from the owner + float distance = GetBody()->GetDistance(target); + distance -= target->appearance.pos.collision_radius / 10; + distance -= GetBody()->appearance.pos.collision_radius / 10; + + // If out of melee range then move closer + if (distance > MAX_COMBAT_RANGE) + MoveCloser(target); +} + +/* Example of how to override the default AI */ + + +NonCombatPetBrain::NonCombatPetBrain(NPC* body) : Brain(body) { + // Make sure to have the " : Brain(body)" so it calls the parent class constructor + // to set up the AI properly +} + +NonCombatPetBrain::~NonCombatPetBrain() { + +} + +void NonCombatPetBrain::Think() { + // All this Brain does is make the pet follow its owner + + if (!GetBody()->IsPet() || GetBody()->IsMezzedOrStunned()) + return; + + LogWrite(NPC_AI__DEBUG, 7, "NPC_AI", "Pet AI code called for %s", GetBody()->GetName()); + + // Set target to owner + Entity* target = GetBody()->GetOwner(); + GetBody()->SetTarget(target); + + // Get distance from the owner + float distance = GetBody()->GetDistance(target); + distance -= target->appearance.pos.collision_radius / 10; + distance -= GetBody()->appearance.pos.collision_radius / 10; + + // If out of melee range then move closer + if (distance > MAX_COMBAT_RANGE) + MoveCloser(target); +} + +BlankBrain::BlankBrain(NPC* body) : Brain(body) { + // Make sure to have the " : Brain(body)" so it calls the parent class constructor + // to set up the AI properly + SetTick(50000); +} + +BlankBrain::~BlankBrain() { + +} + +void BlankBrain::Think() { + +} + +LuaBrain::LuaBrain(NPC* body) : Brain(body) { + +} + +LuaBrain::~LuaBrain() { +} + +void LuaBrain::Think() { + if (!lua_interface) + return; + + const char* script = GetBody()->GetSpawnScript(); + if(script) { + if (!lua_interface->RunSpawnScript(script, "Think", GetBody(), GetBody()->GetTarget())) { + lua_interface->LogError("LUA LuaBrain error: was unable to call the Think function in the spawn script (%s)", script); + } + } + else { + LogWrite(NPC_AI__ERROR, 0, "NPC_AI", "Lua brain set on a spawn that doesn't have a script..."); + } +} + +DumbFirePetBrain::DumbFirePetBrain(NPC* body, Entity* target, int32 expire_time) : Brain(body) { + m_expireTime = Timer::GetCurrentTime2() + expire_time; + AddHate(target, INT_MAX); +} + +DumbFirePetBrain::~DumbFirePetBrain() { + +} + +void DumbFirePetBrain::AddHate(Entity* entity, sint32 hate) { + if (!GetMostHated()) + Brain::AddHate(entity, hate); +} + +void DumbFirePetBrain::Think() { + + Entity* target = GetMostHated(); + + if (target) { + if (!GetBody()->IsMezzedOrStunned()) { + // If the NPC is not in combat then put them in combat + if (!GetBody()->EngagedInCombat()) { + GetBody()->ClearRunningLocations(); + GetBody()->CalculateRunningLocation(true); + GetBody()->InCombat(true); + } + + // Set the NPC's target to the most hated entity if it is not already. + if (GetBody()->GetTarget() != target) { + GetBody()->SetTarget(target); + GetBody()->FaceTarget(target); + } + + float distance = GetBody()->GetDistance(target); + distance -= target->appearance.pos.collision_radius / 10; + distance -= GetBody()->appearance.pos.collision_radius / 10; + + if(!GetBody()->IsCasting() && (!HasRecovered() || !ProcessSpell(target, distance))) { + LogWrite(NPC_AI__DEBUG, 7, "NPC_AI", "%s is attempting melee on %s.", GetBody()->GetName(), target->GetName()); + GetBody()->FaceTarget(target); + ProcessMelee(target, distance); + } + } + } + else { + // No hated target or time expired, kill this mob + if (GetBody()->GetHP() > 0) { + GetBody()->KillSpawn(GetBody()); + LogWrite(NPC_AI__DEBUG, 7, "NPC AI", "Dumbfire being killed because there is no target."); + } + } + + if (Timer::GetCurrentTime2() > m_expireTime) { + if (GetBody()->GetHP() > 0) { + GetBody()->KillSpawn(GetBody()); + LogWrite(NPC_AI__DEBUG, 7, "NPC AI", "Dumbfire being killed because timer expired."); + } + } +} \ No newline at end of file diff --git a/EQ2/source/WorldServer/NPC_AI.h b/EQ2/source/WorldServer/NPC_AI.h new file mode 100644 index 000000000..2fcaf1d31 --- /dev/null +++ b/EQ2/source/WorldServer/NPC_AI.h @@ -0,0 +1,187 @@ +/* + EQ2Emulator: Everquest II Server Emulator + Copyright (C) 2007 EQ2EMulator Development Team (http://www.eq2emulator.net) + + This file is part of EQ2Emulator. + + EQ2Emulator is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + EQ2Emulator is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with EQ2Emulator. If not, see . +*/ +#ifndef __NPC_AI_H__ +#define __NPC_AI_H__ +#include "NPC.h" +#include +#include + +using namespace std; + +class Brain { +public: + Brain(NPC* npc); + virtual ~Brain(); + + /// The main loop for the brain. This will do all the AI work + virtual void Think(); + + /* Timer related functions */ + + /// Gets the time between calls to Think() + /// Time in miliseconds between calls to Think() + int16 Tick() { return m_tick; } + /// Sets the time between calls to Think() + /// Time in miliseconds + void SetTick(int16 time) { m_tick = time; } + /// Gets the timestamp of the last call to Think() + /// Timestamp of the last call to Think() + int32 LastTick() { return m_lastTick; } + /// Sets the last tick to the given time + /// The time to set the last tick to + void SetLastTick(int32 time) { m_lastTick = time; } + + /* Hate related functions */ + + /// Gets the amount of hate this npc has towards the given entity + /// The entity to check + /// The amount of hate towards the given entity + sint32 GetHate(Entity* entity); + /// Add hate for the given entity to this NPC + /// The entity we are adding to this NPC's hate list + /// The amount of hate to add + virtual void AddHate(Entity* entity, sint32 hate); + /// Completely clears the hate list for this npc + void ClearHate(); + /// Removes the given entity from this NPC's hate list + /// Entity to remove from this NPC's hate list + void ClearHate(Entity* entity); + /// Get the entity this NPC hates the most + /// The entity this NPC hates the most + Entity* GetMostHated(); + /// Gets a percentage of hate owned by the given entity + /// Entity to get the percentage for + /// Percentage of hate as a sint8 + sint8 GetHatePercentage(Entity* entity); + + ///Gets a list of all the entities in the hate list + vector* GetHateList(); + + /* Combat related functions */ + + /// + /// + /// + virtual bool ProcessSpell(Entity* target, float distance); + /// + /// True if a buff starts casting + bool CheckBuffs(); + + /// Has the NPC make a melee attack + /// The target to attack + /// The current distance from the target + void ProcessMelee(Entity* target, float distance); + + /* Encounter related functions */ + + /// Adds the given entity and its group and raid members to the encounter list + /// Entity we are adding to the encounter list + void AddToEncounter(Entity* entity); + /// Checks to see if the given entity can loot the corpse + /// Entity trying to loot + /// True if the entity can loot + bool CheckLootAllowed(Entity* entity); + /// Gets the size of the encounter list + /// The size of the list as an int8 + int8 GetEncounterSize(); + /// Clears the encounter list + void ClearEncounter(); + /// Gets a copy of the encounter list + /// A copy of the encounter list as a vector* + vector* GetEncounter(); + /// Checks to see if a player is in the encounter + /// True if the encounter list contains a player + bool PlayerInEncounter() { return m_playerInEncounter; } + + /* Helper functions*/ + + /// Gets the NPC this brain controls + /// The NPC this brain controls + NPC* GetBody() { return m_body; } + /// Checks to see if the NPC can cast + /// True if the NPC can cast + bool HasRecovered(); + /// Tells the NPC to move closer to the given target + /// The target to move closer to + void MoveCloser(Entity* target); + +protected: + // m_body = the npc this brain controls + NPC* m_body; + // m_spellRecovery = time stamp for when the npc can cast again + int32 m_spellRecovery; + +private: + // MHateList = mutex to lock and unlock the hate list + Mutex MHateList; + // m_hatelist = the list that stores all the hate, + // entity is the entity this npc hates and the int32 is the value for how much we hate the entity + map m_hatelist; + // m_lastTick = the last time we ran this brain + int32 m_lastTick; + // m_tick = the amount of time between Think() calls in milliseconds + int16 m_tick; + // m_encounter = list of players (entities) that will get a reward (xp/loot) for killing this npc + vector m_encounter; + // MEncounter = mutex to lock and unlock the encounter list + Mutex MEncounter; + //m_playerInEncounter = true if a player is added to the encounter + bool m_playerInEncounter; +}; + +// Extension of the default brain for combat pets +class CombatPetBrain : public Brain { +public: + CombatPetBrain(NPC* body); + virtual ~CombatPetBrain(); + void Think(); +}; + +class NonCombatPetBrain : public Brain { +public: + NonCombatPetBrain(NPC* body); + virtual ~NonCombatPetBrain(); + void Think(); +}; + +class BlankBrain : public Brain { +public: + BlankBrain(NPC* body); + virtual ~BlankBrain(); + void Think(); +}; + +class LuaBrain : public Brain { +public: + LuaBrain(NPC* body); + virtual ~LuaBrain(); + void Think(); +}; + +class DumbFirePetBrain : public Brain { +public: + DumbFirePetBrain(NPC* body, Entity* target, int32 expire_time); + virtual ~DumbFirePetBrain(); + void Think(); + void AddHate(Entity* entity, sint32 hate); +private: + int32 m_expireTime; +}; +#endif diff --git a/EQ2/source/WorldServer/Object.cpp b/EQ2/source/WorldServer/Object.cpp new file mode 100644 index 000000000..1e2814b10 --- /dev/null +++ b/EQ2/source/WorldServer/Object.cpp @@ -0,0 +1,91 @@ +/* + EQ2Emulator: Everquest II Server Emulator + Copyright (C) 2007 EQ2EMulator Development Team (http://www.eq2emulator.net) + + This file is part of EQ2Emulator. + + EQ2Emulator is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + EQ2Emulator is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with EQ2Emulator. If not, see . +*/ +#include "World.h" +#include "Object.h" +#include "Spells.h" + +extern World world; +extern ConfigReader configReader; +extern MasterSpellList master_spell_list; + +Object::Object(){ + clickable = false; + zone_name = 0; + packet_num = 0; + appearance.activity_status = 64; + appearance.pos.state = 1; + appearance.encounter_level = 0; + spawn_type = 2; + m_deviceID = 0; +} +Object::~Object(){ + +} + +EQ2Packet* Object::serialize(Player* player, int16 version){ + opcode = EQOpcodeManager[GetOpcodeVersion(version)]->EmuToEQ(OP_EqCreateGhostCmd); + return spawn_serialize(player, version); +} + +void Object::HandleUse(Client* client, string command){ + vector* destinations = 0; + if(GetTransporterID() > 0) + destinations = GetZone()->GetTransporters(GetTransporterID()); + if(destinations) + client->ProcessTeleport(this, destinations, GetTransporterID()); + else if (client && command.length() > 0 && appearance.show_command_icon == 1 && MeetsSpawnAccessRequirements(client->GetPlayer())){ + EntityCommand* entity_command = FindEntityCommand(command); + if (entity_command) + client->GetCurrentZone()->ProcessEntityCommand(entity_command, client->GetPlayer(), client->GetPlayer()->GetTarget()); + } +} + +Object* Object::Copy(){ + Object* new_spawn = new Object(); + new_spawn->SetMerchantID(merchant_id); + new_spawn->SetMerchantType(merchant_type); + if(GetSizeOffset() > 0){ + int8 offset = GetSizeOffset()+1; + sint32 tmp_size = size + (rand()%offset - rand()%offset); + if(tmp_size < 0) + tmp_size = 1; + else if(tmp_size >= 0xFFFF) + tmp_size = 0xFFFF; + new_spawn->size = (int16)tmp_size; + } + else + new_spawn->size = size; + new_spawn->SetPrimaryCommands(&primary_command_list); + new_spawn->SetSecondaryCommands(&secondary_command_list); + new_spawn->database_id = database_id; + new_spawn->primary_command_list_id = primary_command_list_id; + new_spawn->secondary_command_list_id = secondary_command_list_id; + memcpy(&new_spawn->appearance, &appearance, sizeof(AppearanceData)); + new_spawn->faction_id = faction_id; + new_spawn->target = 0; + new_spawn->SetTotalHP(GetTotalHP()); + new_spawn->SetTotalPower(GetTotalPower()); + new_spawn->SetHP(GetHP()); + new_spawn->SetPower(GetPower()); + new_spawn->SetQuestsRequired(GetQuestsRequired()); + new_spawn->SetTransporterID(GetTransporterID()); + new_spawn->SetDeviceID(GetDeviceID()); + return new_spawn; +} diff --git a/EQ2/source/WorldServer/Object.h b/EQ2/source/WorldServer/Object.h new file mode 100644 index 000000000..1a6098b36 --- /dev/null +++ b/EQ2/source/WorldServer/Object.h @@ -0,0 +1,49 @@ +/* + EQ2Emulator: Everquest II Server Emulator + Copyright (C) 2007 EQ2EMulator Development Team (http://www.eq2emulator.net) + + This file is part of EQ2Emulator. + + EQ2Emulator is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + EQ2Emulator is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with EQ2Emulator. If not, see . +*/ +#ifndef __EQ2_OBJECT__ +#define __EQ2_OBJECT__ + +#include "Spawn.h" + +class Object : public Spawn{ +public: + Object(); + virtual ~Object(); + void SetClickable(bool click){ + clickable = click; + } + void SetZone(char* zone){ + zone_name = zone; + } + Object* Copy(); + bool IsObject(){ return true; } + void HandleUse(Client* client, string command); + bool clickable; + char* zone_name; + EQ2Packet* serialize(Player* player, int16 version); + + void SetDeviceID(int8 val) { m_deviceID = val; } + int8 GetDeviceID() { return m_deviceID; } + +private: + int8 m_deviceID; +}; +#endif + diff --git a/EQ2/source/WorldServer/Patch/buffer.cpp b/EQ2/source/WorldServer/Patch/buffer.cpp new file mode 100644 index 000000000..c675c57db --- /dev/null +++ b/EQ2/source/WorldServer/Patch/buffer.cpp @@ -0,0 +1,220 @@ +#include +#include +#include +#include "buffer.h" + +Buffer::Buffer() { + buf = NULL; + capacity = 0; + len = 0; +} + +Buffer::~Buffer() { + if (buf != NULL) + free(buf); +} + +unsigned int Buffer::GetLength() { + return len; +} + +int Buffer::IndexOf(char c) { + unsigned int i; + + for (i = 0; i < len; i++) { + if (buf[i] == c) + return (int)i; + } + + return -1; +} + +void Buffer::Clear() { + if (buf != NULL) { + free(buf); + buf = NULL; + } + capacity = 0; + len = 0; +} + +const char * Buffer::Peek() { + return buf; +} + +void Buffer::PeekReadPrimitive(void *buf, unsigned int size, bool peek) { + if (len >= size) { + memcpy(buf, this->buf, size); + if (!peek) { + memmove(this->buf, this->buf + size, len - size); + len -= size; + } + } +} + +uint32_t Buffer::PeekUInt32() { + uint32_t ret = 0; + + PeekReadPrimitive(&ret, sizeof(ret), true); + + return ret; +} + +unsigned int Buffer::Read(unsigned int len, char **dst) { + unsigned int actual = len; + + if (actual > this->len) + actual = this->len; + + *dst = (char *)malloc(actual); + if (*dst == NULL) + return 0; + + return Read(actual, *dst, actual); +} + +unsigned int Buffer::Read(unsigned int len, char *dst, unsigned int size) { + unsigned int actual = len; + + if (actual > size) + actual = size; + if (actual > this->len) + actual = this->len; + + memcpy(dst, buf, actual); + memmove(buf, buf + actual, this->len - actual); + this->len -= actual; + + return actual; +} + +uint32_t Buffer::ReadUInt32() { + uint32_t ret = 0; + + PeekReadPrimitive(&ret, sizeof(ret), false); + + return ret; +} + +bool Buffer::Write(const char *data, unsigned int len) { + unsigned int new_capacity; + char *new_buf; + + while (this->len + len > capacity) { + new_capacity = capacity == 0 ? 512 : capacity * 2; + new_buf = (char *)realloc(buf, new_capacity); + if (new_buf == NULL) + return false; + + capacity = new_capacity; + buf = new_buf; + } + + memcpy(buf + this->len, data, len); + this->len += len; + + return true; +} + +bool Buffer::Write(const char *data) { + return Write(data, (unsigned int)strlen(data)); +} + +bool Buffer::Write(const unsigned char *data, unsigned int len) { + return Write((const char *)data, len); +} + +bool Buffer::WriteInt8(int8_t data) { + char buf[sizeof(data)]; + + memcpy(buf, &data, sizeof(buf)); + return Write(buf, sizeof(buf)); +} + +bool Buffer::WriteUInt8(uint8_t data) { + char buf[sizeof(data)]; + + memcpy(buf, &data, sizeof(buf)); + return Write(buf, sizeof(buf)); +} + +bool Buffer::WriteInt16(int16_t data) { + char buf[sizeof(data)]; + + memcpy(buf, &data, sizeof(buf)); + return Write(buf, sizeof(buf)); +} + +bool Buffer::WriteUInt16(uint16_t data) { + char buf[sizeof(data)]; + + memcpy(buf, &data, sizeof(buf)); + return Write(buf, sizeof(buf)); +} + +bool Buffer::WriteInt32(int32_t data) { + char buf[sizeof(data)]; + + memcpy(buf, &data, sizeof(buf)); + return Write(buf, sizeof(buf)); +} + +bool Buffer::WriteUInt32(uint32_t data) { + char buf[sizeof(data)]; + + memcpy(buf, &data, sizeof(buf)); + return Write(buf, sizeof(buf)); +} + +bool Buffer::WriteInt64(int64_t data) { + char buf[sizeof(data)]; + + memcpy(buf, &data, sizeof(buf)); + return Write(buf, sizeof(buf)); +} + +bool Buffer::WriteUInt64(uint64_t data) { + char buf[sizeof(data)]; + + memcpy(buf, &data, sizeof(buf)); + return Write(buf, sizeof(buf)); +} + +bool Buffer::WriteChar(char data) { + return Write(&data, sizeof(data)); +} + +bool Buffer::WriteDouble(double data) { + char buf[sizeof(data)]; + + memcpy(buf, &data, sizeof(buf)); + return Write(buf, sizeof(buf)); +} + +bool Buffer::WriteAt(unsigned int index, const char *data, unsigned int len) { + unsigned int new_capacity; + char *new_buf; + + while (this->len + len > capacity) { + new_capacity = capacity == 0 ? 512 : capacity * 2; + new_buf = (char *)realloc(buf, new_capacity); + if (new_buf == NULL) + return false; + + capacity = new_capacity; + buf = new_buf; + } + + memmove(buf + index + len, buf + index, this->len - index); + memcpy(buf + index, data, len); + this->len += len; + + return true; +} + +bool Buffer::WriteAtUInt32(unsigned int index, uint32_t data) { + char buf[sizeof(data)]; + + memcpy(buf, &data, sizeof(buf)); + return WriteAt(index, buf, sizeof(buf)); +} diff --git a/EQ2/source/WorldServer/Patch/buffer.h b/EQ2/source/WorldServer/Patch/buffer.h new file mode 100644 index 000000000..96fe1525d --- /dev/null +++ b/EQ2/source/WorldServer/Patch/buffer.h @@ -0,0 +1,46 @@ +#pragma once + +#include + +class Buffer { +public: + Buffer(); + ~Buffer(); + + unsigned int GetLength(); + + int IndexOf(char c); + + void Clear(); + + const char * Peek(); + uint32_t PeekUInt32(); + + unsigned int Read(unsigned int len, char **dst); + unsigned int Read(unsigned int len, char *dst, unsigned int size); + uint32_t ReadUInt32(); + + bool Write(const char *data, unsigned int len); + bool Write(const char *data); + bool Write(const unsigned char *data, unsigned int len); + bool WriteUInt8(uint8_t data); + bool WriteInt8(int8_t data); + bool WriteUInt16(uint16_t data); + bool WriteInt16(int16_t data); + bool WriteUInt32(uint32_t data); + bool WriteInt32(int32_t data); + bool WriteUInt64(uint64_t data); + bool WriteInt64(int64_t data); + bool WriteChar(char data); + bool WriteDouble(double data); + + bool WriteAt(unsigned int index, const char *data, unsigned int len); + bool WriteAtUInt32(unsigned int index, uint32_t data); + +private: + char *buf; + unsigned int capacity; + unsigned int len; + + void PeekReadPrimitive(void *buf, unsigned int size, bool peek); +}; diff --git a/EQ2/source/WorldServer/Patch/patch.cpp b/EQ2/source/WorldServer/Patch/patch.cpp new file mode 100644 index 000000000..42e56b5f0 --- /dev/null +++ b/EQ2/source/WorldServer/Patch/patch.cpp @@ -0,0 +1,200 @@ +#include +#include +#include +#include +#include +#include "../../common/MiscFunctions.h" +#include "../../common/Log.h" +#include "buffer.h" +#include "../WorldDatabase.h" +#include "../../common/version.h" +#include "patch.h" + +using namespace std; + +extern WorldDatabase database; +extern PatchServer patch; + +static void TCPClientDisconnect(TCPClient *tcp) { +} + +static void TCPClientData(TCPClient *tcp, const char *data, unsigned int len) { + static FILE *f = NULL; + + if (f == NULL) { + if (len == 1) { + LogWrite(PATCHER__INFO, 0, "Patcher", "Server is up to date"); + patch.SetReading(false); + return; + } + + if (strncmp(data, "ERROR", 5) == 0) { + LogWrite(PATCHER__ERROR, 0, "Patcher", "There was an error downloading updates"); + tcp->Disconnect(); + patch.SetReading(false); + patch.SetQuitAfter(true); + return; + } + + if (strncmp(data, "SPEED", 5) == 0) { + LogWrite(PATCHER__ERROR, 0, "Patcher", "You have tried to download updates too quickly and are now locked out, try again later"); + tcp->Disconnect(); + patch.SetReading(false); + patch.SetQuitAfter(true); + return; + } + + if (strncmp(data, "LOCKOUT", 7) == 0) { + LogWrite(PATCHER__ERROR, 0, "Patcher", "You are locked out, try again later"); + tcp->Disconnect(); + patch.SetReading(false); + patch.SetQuitAfter(true); + return; + } + + if (strncmp(data, "UNKNOWN", 7) == 0) { + LogWrite(PATCHER__ERROR, 0, "Patcher", "An unknown error occured"); + tcp->Disconnect(); + patch.SetReading(false); + patch.SetQuitAfter(true); + return; + } + + f = fopen("eq2-updates.sql", "wb"); + if (f == NULL) { + LogWrite(PATCHER__ERROR, 0, "Patcher", "Failed to open 'eve-updates.sql' for writing: %s", strerror(errno)); + tcp->Disconnect(); + patch.SetReading(false); + patch.SetQuitAfter(true); + return; + } + + fprintf(f, "SET unique_checks=0;\n"); + fprintf(f, "SET foreign_key_checks=0;\n"); + LogWrite(PATCHER__INFO, 0, "Patcher", "Downloading updates"); + } + + if (memchr(data, '\0', len) == NULL) + fwrite(data, sizeof(*data), len, f); + else { + fwrite(data, sizeof(*data), len - 1, f); + fprintf(f, "SET foreign_key_checks=1;\n"); + fprintf(f, "SET unique_checks=1;\n"); + fclose(f); + f = NULL; + LogWrite(PATCHER__INFO, 0, "Patcher", "Updates finished downloading"); + + LogWrite(PATCHER__INFO, 0, "Patcher", "Executing updates"); + //database.BeginTransaction(); + if (!database.QueriesFromFile("eq2-updates.sql")) { + //database.RollbackTransaction(); + LogWrite(PATCHER__INFO, 0, "Patcher", "Failed to update database"); + } + else { + //database.CommitTransaction(); + LogWrite(PATCHER__INFO, 0, "Patcher", "Database updated"); + } + patch.SetReading(false); + } +} + +PatchServer::PatchServer() { + enabled = true; + reading = false; + quit_after = false; +} + +PatchServer::~PatchServer() { + Stop(); +} + +void PatchServer::SetHost(const char *host) { + tcp.SetHost(host); +} + +void PatchServer::SetPort(const char *port) { + tcp.SetPort(port); +} + +void PatchServer::SetEnabled(bool enabled) { + this->enabled = enabled; +} + +void PatchServer::SetReading(bool reading) { + this->reading = reading; +} + +void PatchServer::SetQuitAfter(bool quit_after) { + this->quit_after = quit_after; +} + +bool PatchServer::IsEnabled() { + return enabled; +} + +bool PatchServer::QuitAfter() { + return quit_after; +} + +bool PatchServer::Start() { + TCPClientCallbacks callbacks; + vector table_versions; + vector::iterator itr; + Buffer buffer; + + TCP::Start(); + + if (!enabled) { + LogWrite(PATCHER__INFO, 0, "Patcher", "Skipping check for database updates from the patch server"); + return true; + } + + callbacks.data = TCPClientData; + callbacks.disconnect = TCPClientDisconnect; + tcp.SetCallbacks(&callbacks); + + if (!tcp.Start()) { + LogWrite(PATCHER__ERROR, 0, "Patcher", "Failed to connect to patch server at %s:%s: %s", tcp.GetHost()[0] == '\0' ? "localhost" : tcp.GetHost(), tcp.GetPort(), tcp.GetError()); + return false; + } + + LogWrite(PATCHER__INFO, 0, "Patcher", "Connected to patch server at %s:%s", tcp.GetHost()[0] == '\0' ? "localhost" : tcp.GetHost(), tcp.GetPort()); + + if (!database.GetTableVersions(&table_versions)) + return false; + + int32 version = (CURRENT_DATABASE_MAJORVERSION * 100) + CURRENT_DATABASE_MINORVERSION; + buffer.WriteUInt32(version); + for (itr = table_versions.begin(); itr != table_versions.end(); itr++) { + buffer.WriteUInt8((*itr)->name_len); + buffer.Write((*itr)->name, (*itr)->name_len); + buffer.WriteUInt32((*itr)->version); + buffer.WriteUInt32((*itr)->data_version); + + free(*itr); + } + buffer.WriteAtUInt32(0, buffer.GetLength()); + + reading = true; + + return tcp.Queue(buffer.Peek(), buffer.GetLength()); +} + +void PatchServer::Stop() { + tcp.Stop(); + TCP::Stop(); +} + +bool PatchServer::Process() { + bool success = true; + + if (!enabled) + return true; + + while (success && reading) { + success = tcp.Process(0); + SleepMS(10); + } + + return success; +} diff --git a/EQ2/source/WorldServer/Patch/patch.h b/EQ2/source/WorldServer/Patch/patch.h new file mode 100644 index 000000000..ce902f06d --- /dev/null +++ b/EQ2/source/WorldServer/Patch/patch.h @@ -0,0 +1,28 @@ +#pragma once + +#include "tcp-client.h" + +class PatchServer { +public: + PatchServer(); + ~PatchServer(); + + void SetHost(const char *host); + void SetPort(const char *port); + void SetEnabled(bool enabled); + void SetReading(bool reading); + void SetQuitAfter(bool quit_after); + + bool IsEnabled(); + bool QuitAfter(); + + bool Start(); + void Stop(); + bool Process(); + +private: + TCPClient tcp; + bool enabled; + bool reading; + bool quit_after; +}; diff --git a/EQ2/source/WorldServer/Patch/tcp-client.cpp b/EQ2/source/WorldServer/Patch/tcp-client.cpp new file mode 100644 index 000000000..4a93a8640 --- /dev/null +++ b/EQ2/source/WorldServer/Patch/tcp-client.cpp @@ -0,0 +1,246 @@ +#include +#include "string.h" +#include "tcp-client.h" +#include "../../common/MiscFunctions.h" + +TCPClient::TCPClient() { + host[0] = '\0'; + port[0] = '\0'; + connected = false; + memset(&callbacks, 0, sizeof(callbacks)); + error[0] = '\0'; + fds.fd = SOCKET_INVALID; +// memset(&addr, 0, sizeof(addr)); +// addr_len = 0; + outgoing = NULL; + outgoing_size = 0; + outgoing_len = 0; +} + +TCPClient::~TCPClient() { + Stop(); +} + +void TCPClient::SetHost(const char *host) { + if (host == NULL) + this->host[0] = '\0'; + else + strlcpy(this->host, host, sizeof(this->host)); +} + +void TCPClient::SetPort(const char *port) { + strlcpy(this->port, port, sizeof(this->port)); +} + +void TCPClient::SetCallbacks(TCPClientCallbacks *callbacks) { + memcpy(&this->callbacks, callbacks, sizeof(this->callbacks)); +} + +const char * TCPClient::GetHost() { + return host; +} + +const char * TCPClient::GetPort() { + return port; +} + +bool TCPClient::IsConnected() { + return connected; +} + +bool TCPClient::HasError() { + return error[0] != '\0'; +} + +const char * TCPClient::GetError() { + return error; +} + +//struct sockaddr_storage * TCPClient::GetAddress() { +// return &addr; +//} + +bool TCPClient::Start() { + struct addrinfo hints, *server, *p; + socket_t fd; + int ret; + + if (connected) + return true; + + memset(&hints, 0, sizeof(hints)); + hints.ai_family = AF_INET; + hints.ai_socktype = SOCK_STREAM; + hints.ai_flags = AI_PASSIVE; + + //get list of networks + ret = getaddrinfo(host[0] == '\0' ? NULL : host, port, &hints, &server); + if (ret != 0) { + strlcpy(error, gai_strerror(ret), sizeof(error)); + return false; + } + + //loop through the addresses and bind to the first one we can + for (p = server; p != NULL; p = p->ai_next) { + fd = socket(p->ai_family, p->ai_socktype, p->ai_protocol); + if (fd == SOCKET_INVALID) { + TCP::StoreError(error, sizeof(error)); + continue; + } + + //connect to the server + if (connect(fd, p->ai_addr, (int)p->ai_addrlen) == SOCKET_ERROR) { + TCP::StoreError(error, sizeof(error)); + SOCKET_CLOSE(fd); + continue; + } + + break; + } + + connected = p != NULL; + + if (connected) { + fds.fd = fd; + fds.events = POLLIN | POLLOUT; + fds.revents = 0; +// memcpy(&addr, p->ai_addr, sizeof(addr)); +// addr_len = p->ai_addrlen; + error[0] = '\0'; + } + + freeaddrinfo(server); + + return connected; +} + +void TCPClient::Stop() { + if (connected) + DisconnectHelper(false); +} + +void TCPClient::DisconnectHelper(bool silent) { + if (!silent && callbacks.disconnect != NULL) + callbacks.disconnect(this); + + connected = false; + error[0] = '\0'; + + if (fds.fd != SOCKET_INVALID) + SOCKET_CLOSE(fds.fd); + +// memset(&addr, 0, sizeof(addr)); +// addr_len = 0; + + if (outgoing != NULL) { + free(outgoing); + outgoing = NULL; + } + outgoing_size = 0; + outgoing_len = 0; +} + +void TCPClient::Disconnect() { + DisconnectHelper(true); +} + +bool TCPClient::Read() { + char buf[4096]; + int count; + + count = recv(fds.fd, buf, sizeof(buf), 0); + + if (count == SOCKET_ERROR) { + TCP::StoreError(error, sizeof(error)); + return false; + } + + //disconnected + if (count == 0) { + DisconnectHelper(false); + return true; + } + + callbacks.data(this, buf, count); + + return true; +} + +bool TCPClient::Write() { + int count; + + count = send(fds.fd, outgoing, outgoing_len, 0); + if (count == SOCKET_ERROR) { + TCP::StoreError(error, sizeof(error)); + return false; + } + + outgoing_len -= count; + + return true; +} + +bool TCPClient::Process(unsigned int timeout) { + int count; + + if (!connected) + return false; + + count = poll(&fds, 1, timeout); + + if (count == SOCKET_ERROR) { + TCP::StoreError(error, sizeof(error)); + return false; + } + + if (fds.revents == 0) + return true; + + //socket is bad + if (fds.revents & POLLERR) { + DisconnectHelper(false); + return false; + } + + //hung up + if (fds.revents & POLLHUP) { + DisconnectHelper(false); + return false; + } + + //socket is ready for reading + if (fds.revents & POLLIN) { + if (!Read()) + return false; + } + + //socket is ready for writing + if (fds.revents & POLLOUT) { + if (outgoing_len > 0) { + if (!Write()) + return false; + } + } + + return true; +} + +bool TCPClient::Queue(const char *buf, unsigned int len) { + unsigned int new_size; + char *new_outgoing; + + while (outgoing_len + len > outgoing_size) { + new_size = outgoing_size == 0 ? 1024 : outgoing_size * 2; + new_outgoing = (char *)realloc(outgoing, new_size); + if (new_outgoing == NULL) + return false; + + outgoing = new_outgoing; + outgoing_size = new_size; + } + + memcpy(outgoing + outgoing_len, buf, len); + outgoing_len += len; + + return true; +} diff --git a/EQ2/source/WorldServer/Patch/tcp-client.h b/EQ2/source/WorldServer/Patch/tcp-client.h new file mode 100644 index 000000000..b555b5bbe --- /dev/null +++ b/EQ2/source/WorldServer/Patch/tcp-client.h @@ -0,0 +1,55 @@ +#pragma once + +#include "tcp.h" + +class TCPClient; + +typedef void(*TCPClientDisconnectCallback)(TCPClient *); +typedef void(*TCPClientDataCallback)(TCPClient *, const char *, unsigned int); + +typedef struct { + TCPClientDisconnectCallback disconnect; + TCPClientDataCallback data; +} TCPClientCallbacks; + +class TCPClient { +public: + TCPClient(); + ~TCPClient(); + + void SetHost(const char *host); + void SetPort(const char *port); + void SetCallbacks(TCPClientCallbacks *callbacks); + + const char * GetHost(); + const char * GetPort(); + bool IsConnected(); + bool HasError(); + + const char * GetError(); +// struct sockaddr_storage * GetAddress(); + + bool Start(); + void Stop(); + bool Process(unsigned int timeout); + + void Disconnect(); + bool Queue(const char *buf, unsigned int len); + +private: + char host[64]; + char port[16]; + bool connected; + TCPClientCallbacks callbacks; + char error[256]; + struct pollfd fds; +// struct sockaddr_storage addr; +// socklen_t addr_len; + char *outgoing; + unsigned int outgoing_size; + unsigned int outgoing_len; + + void DisconnectHelper(bool silent); + bool Read(); + bool Write(); +}; diff --git a/EQ2/source/WorldServer/Patch/tcp.cpp b/EQ2/source/WorldServer/Patch/tcp.cpp new file mode 100644 index 000000000..8ccc418ba --- /dev/null +++ b/EQ2/source/WorldServer/Patch/tcp.cpp @@ -0,0 +1,77 @@ +#include "stdio.h" +#include "string.h" +#if defined(_WIN32) +#else +# include +#endif +#include "tcp.h" + +#include "../../common/MiscFunctions.h" + +#if defined(_WIN32) +static int initialized = 0; +#endif + +bool TCP::Start() { +#if defined(_WIN32) + WSAData wsa; + + //each program only needs to do this once. so if mulitple TCP servers or + //clients are being used, we only need to initialize WinSock once + if (initialized == 0) { + if (WSAStartup(MAKEWORD(2, 2), &wsa) != 0) + return false; + } + + ++initialized; +#endif + + return true; +} + +void TCP::Stop() { +#if defined(_WIN32) + if (initialized > 0) { + if (--initialized == 0) + WSACleanup(); + } +#endif +} + +void TCP::StoreError(char *dst, unsigned int size) { +#if defined(_WIN32) + char *ptr; + + FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_ALLOCATE_BUFFER, NULL, WSAGetLastError(), MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), (LPTSTR)&ptr, 0, NULL); + strlcpy(dst, ptr, size); + LocalFree(ptr); + + ptr = strchr(dst, '\n'); + if (ptr != NULL) + *ptr = '\0'; +#else + strlcpy(dst, strerror(errno), size); +#endif +} + +bool TCP::GetIPAddressString(struct sockaddr_storage *addr, char *host, unsigned int host_size, char *port, unsigned int port_size) { + switch (addr->ss_family) { + case AF_INET: + inet_ntop(AF_INET, &(((struct sockaddr_in *)addr)->sin_addr), host, host_size); + if (port != NULL) + snprintf(port, port_size, "%u", ((struct sockaddr_in *)addr)->sin_port); + break; + case AF_INET6: + inet_ntop(AF_INET6, &(((struct sockaddr_in6 *)addr)->sin6_addr), host, host_size); + if (port != NULL) + snprintf(port, port_size, "%u", ((struct sockaddr_in6 *)addr)->sin6_port); + break; + default: + host[0] = '\0'; + if (port != NULL) + port[0] = '\0'; + break; + } + + return host[0] != '\0' && (port == NULL || port[0] != '\0'); +} diff --git a/EQ2/source/WorldServer/Patch/tcp.h b/EQ2/source/WorldServer/Patch/tcp.h new file mode 100644 index 000000000..c65d243cc --- /dev/null +++ b/EQ2/source/WorldServer/Patch/tcp.h @@ -0,0 +1,35 @@ +#pragma once + +#if defined(_WIN32) +# include +# include +# define SOCKET_INVALID INVALID_SOCKET +# define SOCKET_CLOSE(s) do {closesocket(s); (s) = SOCKET_INVALID;} while(0) +# define SOCKET_SOCKOPT_REUSEADDR_CAST(opt) (char *)(&(opt)) +# define poll WSAPoll +typedef SOCKET socket_t; +typedef BOOL sockopt_reuseaddr_t; +#else +# include +# include +# include +# include +# include +# include +# define SOCKET_INVALID (-1) +# define SOCKET_ERROR (-1) +# define SOCKET_CLOSE(s) do {close(s); (s) = SOCKET_INVALID;} while(0) +# define SOCKET_SOCKOPT_REUSEADDR_CAST(opt) (&(opt)) +typedef int socket_t; +typedef int sockopt_reuseaddr_t; +#endif + +class TCP { +public: + static bool Start(); + static void Stop(); + + static void StoreError(char *dst, unsigned int size); + + static bool GetIPAddressString(struct sockaddr_storage *addr, char *host, unsigned int host_size, char *port, unsigned int port_size); +}; diff --git a/EQ2/source/WorldServer/Player.cpp b/EQ2/source/WorldServer/Player.cpp new file mode 100644 index 000000000..b0d3235c0 --- /dev/null +++ b/EQ2/source/WorldServer/Player.cpp @@ -0,0 +1,5434 @@ +/* + EQ2Emulator: Everquest II Server Emulator + Copyright (C) 2007 EQ2EMulator Development Team (http://www.eq2emulator.net) + + This file is part of EQ2Emulator. + + EQ2Emulator is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + EQ2Emulator is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with EQ2Emulator. If not, see . +*/ +#include "Player.h" +#include "../common/MiscFunctions.h" +#include "World.h" +#include "WorldDatabase.h" +#include +#include "classes.h" +#include "LuaInterface.h" +#include "../common/Log.h" +#include "Rules/Rules.h" +#include "Titles.h" +#include "Languages.h" +#include "SpellProcess.h" +#include +#include "ClientPacketFunctions.h" + +extern Classes classes; +extern WorldDatabase database; +extern World world; +extern ConfigReader configReader; +extern MasterSkillList master_skill_list; +extern MasterSpellList master_spell_list; +extern MasterQuestList master_quest_list; +extern Variables variables; +extern LuaInterface* lua_interface; +extern MasterItemList master_item_list; +extern RuleManager rule_manager; +extern MasterTitlesList master_titles_list; +extern MasterLanguagesList master_languages_list; + +Player::Player(){ + group = 0; + appearance.pos.grid_id = 0; + spawn_index = 0; + info = 0; + movement_packet = 0; + last_movement_activity = 0; + //speed = 0; + packet_num = 0; + range_attack = false; + old_movement_packet = 0; + charsheet_changed = false; + quickbar_updated = false; + custNPC = false; + spawn_tmp_vis_xor_packet = 0; + spawn_tmp_pos_xor_packet = 0; + spawn_tmp_info_xor_packet = 0; + pending_collection_reward = 0; + pos_packet_speed = 0; + + LogWrite(MISC__TODO, 1, "TODO", "Add player commands here\n\t(%s, function: %s, line #: %i)", __FILE__, __FUNCTION__, __LINE__); + + appearance.display_name = 1; + appearance.show_command_icon = 1; + appearance.player_flag = 1; + appearance.targetable = 1; + appearance.show_level = 1; + spell_count = 0; + spell_orig_packet = 0; + spell_xor_packet = 0; + resurrecting = false; + spawn_id = 1; + spawn_type = 4; + player_spawn_id_map[1] = this; + player_spawn_reverse_id_map[this] = 1; + MPlayerQuests.SetName("Player::MPlayerQuests"); + test_time = 0; + returning_from_ld = false; + away_message = "Sorry, I am A.F.K. (Away From Keyboard)"; + AddSecondaryEntityCommand("Inspect", 10000, "inspect_player", "", 0, 0); + AddSecondaryEntityCommand("Who", 10000, "who", "", 0, 0); + // commented out commands a player canNOT use on themselves... move these to Client::HandleVerbRequest()? + //AddSecondaryEntityCommand("Assist", 10, "assist", "", 0, 0); + //AddSecondaryEntityCommand("Duel", 10, "duel", "", 0, 0); + //AddSecondaryEntityCommand("Duel Bet", 10, "duelbet", "", 0, 0); + //AddSecondaryEntityCommand("Trade", 10, "trade", "", 0, 0); + is_tracking = false; + guild = 0; + following = false; + combat_target = 0; + InitXPTable(); + pending_deletion = false; + spawn_vis_struct = 0; + spawn_pos_struct = 0; + spawn_info_struct = 0; + spawn_header_struct = 0; + spawn_footer_struct = 0; + widget_footer_struct = 0; + sign_footer_struct = 0; + pos_mutex.SetName("Player::pos_mutex"); + vis_mutex.SetName("Player::vis_mutex"); + info_mutex.SetName("Player::info_mutex"); + m_playerSpawnQuestsRequired.SetName("Player::player_spawn_quests_required"); + m_playerSpawnHistoryRequired.SetName("Player::player_spawn_history_required"); +} +Player::~Player(){ + for(int32 i=0;i*>::iterator itr; + for (itr = player_spawn_quests_required.begin(); itr != player_spawn_quests_required.end(); itr++){ + safe_delete(itr->second); + } + for (itr = player_spawn_history_required.begin(); itr != player_spawn_history_required.end(); itr++){ + safe_delete(itr->second); + } + + map > >::iterator itr1; + map >::iterator itr2; + vector::iterator itr3; + // Type + for (itr1 = m_characterHistory.begin(); itr1 != m_characterHistory.end(); itr1++) { + // Sub type + for (itr2 = itr1->second.begin(); itr2 != itr1->second.end(); itr2++) { + // vector of data + for (itr3 = itr2->second.begin(); itr3 != itr2->second.end(); itr3++) { + safe_delete(*itr3); + } + } + } + + map::iterator itr4; + for (itr4 = m_charLuaHistory.begin(); itr4 != m_charLuaHistory.end(); itr4++) { + safe_delete(itr4->second); + } + + safe_delete_array(movement_packet); + safe_delete_array(old_movement_packet); + safe_delete_array(spawn_tmp_info_xor_packet); + safe_delete_array(spawn_tmp_vis_xor_packet); + safe_delete_array(spawn_tmp_pos_xor_packet); + safe_delete_array(spell_xor_packet); + safe_delete_array(spell_orig_packet); + DestroyQuests(); + WritePlayerStatistics(); + RemovePlayerStatistics(); + DeleteMail(); + world.RemoveLottoPlayer(GetCharacterID()); + safe_delete(info); + player_spawn_index_map.clear(); + player_spawn_map.clear(); + player_spawn_reverse_id_map.clear(); + player_removed_spawns.clear(); + player_spawn_id_map.clear(); + + info_mutex.writelock(__FUNCTION__, __LINE__); + spawn_info_packet_list.clear(); + info_mutex.releasewritelock(__FUNCTION__, __LINE__); + vis_mutex.writelock(__FUNCTION__, __LINE__); + spawn_vis_packet_list.clear(); + vis_mutex.releasewritelock(__FUNCTION__, __LINE__); + pos_mutex.writelock(__FUNCTION__, __LINE__); + spawn_pos_packet_list.clear(); + pos_mutex.releasewritelock(__FUNCTION__, __LINE__); + + safe_delete(spawn_header_struct); + safe_delete(spawn_footer_struct); + safe_delete(sign_footer_struct); + safe_delete(widget_footer_struct); + safe_delete(spawn_info_struct); + safe_delete(spawn_vis_struct); + safe_delete(spawn_pos_struct); +} + +EQ2Packet* Player::serialize(Player* player, int16 version){ + opcode = EQOpcodeManager[GetOpcodeVersion(version)]->EmuToEQ(OP_EqCreateGhostCmd); + return spawn_serialize(player, version); +} + +EQ2Packet* Player::Move(float x, float y, float z, int16 version, float heading){ + PacketStruct* packet = configReader.getStruct("WS_MoveClient", version); + if(packet){ + packet->setDataByName("x", x); + packet->setDataByName("y", y); + packet->setDataByName("z", z); + packet->setDataByName("unknown", 1); // 1 seems to force the client to re-render the zone at the new location + packet->setDataByName("location", 0xFFFFFFFF); //added in 869 + if (heading != -1.0f) + packet->setDataByName("heading", heading); + EQ2Packet* outapp = packet->serialize(); + safe_delete(packet); + return outapp; + } + return 0; +} + +void Player::DestroyQuests(){ + MPlayerQuests.lock(); + map::iterator itr; + for(itr = completed_quests.begin(); itr != completed_quests.end(); itr++){ + safe_delete(itr->second); + } + completed_quests.clear(); + for(itr = player_quests.begin(); itr != player_quests.end(); itr++){ + safe_delete(itr->second); + } + player_quests.clear(); + for(itr = pending_quests.begin(); itr != pending_quests.end(); itr++){ + safe_delete(itr->second); + } + pending_quests.clear(); + MPlayerQuests.unlock(); +} + +PlayerInfo* Player::GetPlayerInfo(){ + if(info == 0) + info = new PlayerInfo(this); + return info; +} + +void PlayerInfo::CalculateXPPercentages(){ + if(info_struct->xp_needed > 0){ + float percentage = ((double)info_struct->xp / info_struct->xp_needed) * 1000; + info_struct->xp_yellow = (int16)percentage; + info_struct->xp_blue = (int16)(100-((ceil(percentage/100) - (percentage/100)) * 100)); + info_struct->xp_blue_vitality_bar = 0; + info_struct->xp_yellow_vitality_bar = 0; + if(player->GetXPVitality() > 0){ + float vitality_total = player->GetXPVitality()*10 + percentage; + vitality_total -= ((int)(percentage/100)*100); + if(vitality_total < 100){ //10% + info_struct->xp_blue_vitality_bar = info_struct->xp_blue + (int16)(player->GetXPVitality() *10); + } + else + info_struct->xp_yellow_vitality_bar = info_struct->xp_yellow + (int16)(player->GetXPVitality() *10); + } + } +} + +void PlayerInfo::CalculateTSXPPercentages(){ + if(info_struct->ts_xp_needed > 0){ + float percentage = ((double)info_struct->ts_xp / info_struct->ts_xp_needed) * 1000; + info_struct->tradeskill_exp_yellow = (int16)percentage; + info_struct->tradeskill_exp_blue = (int16)(100-((ceil(percentage/100) - (percentage/100)) * 100)); + /*info_struct->xp_blue_vitality_bar = 0; + info_struct->xp_yellow_vitality_bar = 0; + if(player->GetXPVitality() > 0){ + float vitality_total = player->GetXPVitality()*10 + percentage; + vitality_total -= ((int)(percentage/100)*100); + if(vitality_total < 100){ //10% + info_struct->xp_blue_vitality_bar = info_struct->xp_blue + (int16)(player->GetXPVitality() *10); + } + else + info_struct->xp_yellow_vitality_bar = info_struct->xp_yellow + (int16)(player->GetXPVitality() *10); + }*/ + } +} + +void PlayerInfo::SetHouseZone(int32 id){ + house_zone_id = id; +} + +void PlayerInfo::SetBindZone(int32 id){ + bind_zone_id = id; +} + +void PlayerInfo::SetBindX(float x){ + bind_x = x; +} + +void PlayerInfo::SetBindY(float y){ + bind_y = y; +} + +void PlayerInfo::SetBindZ(float z){ + bind_z = z; +} + +void PlayerInfo::SetBindHeading(float heading){ + bind_heading = heading; +} + +int32 PlayerInfo::GetHouseZoneID(){ + return house_zone_id; +} + +int32 PlayerInfo::GetBindZoneID(){ + return bind_zone_id; +} + +float PlayerInfo::GetBindZoneX(){ + return bind_x; +} + +float PlayerInfo::GetBindZoneY(){ + return bind_y; +} + +float PlayerInfo::GetBindZoneZ(){ + return bind_z; +} + +float PlayerInfo::GetBindZoneHeading(){ + return bind_heading; +} + +PacketStruct* PlayerInfo::serialize2(int16 version){ + player->CalculateBonuses(); + PacketStruct* packet = configReader.getStruct("WS_CharacterSheet", version); + if(packet){ + packet->setDataByName("deity", "None"); + packet->setDataByName("character_name", info_struct->name); + packet->setDataByName("race", info_struct->race); + packet->setDataByName("gender", info_struct->gender); + packet->setDataByName("class1", info_struct->class1); + packet->setDataByName("class2", info_struct->class2); + packet->setDataByName("class3", info_struct->class3); + packet->setDataByName("tradeskill_class1", info_struct->tradeskill_class1); + packet->setDataByName("tradeskill_class2", info_struct->tradeskill_class2); + packet->setDataByName("tradeskill_class3", info_struct->tradeskill_class3); + packet->setDataByName("level", info_struct->level); + packet->setDataByName("effective_level", info_struct->level); + packet->setDataByName("tradeskill_level", info_struct->tradeskill_level); + packet->setDataByName("account_age_base", info_struct->account_age_base); + for(int8 i=0;iaccount_age_bonus);i++) + packet->setDataByName("account_age_bonus", info_struct->account_age_bonus[i]); + packet->setDataByName("deity", info_struct->deity); + packet->setDataByName("current_hp", player->GetHP()); + packet->setDataByName("max_hp",player-> GetTotalHP()); + packet->setDataByName("base_hp", player->GetTotalHPBase()); + float bonus_health = floor( (float)(info_struct->sta * player->CalculateBonusMod())); + packet->setDataByName("bonus_health", bonus_health); + packet->setDataByName("stat_bonus_health", player->CalculateBonusMod()); + packet->setDataByName("current_power", player->GetPower()); + packet->setDataByName("max_power", player->GetTotalPower()); + packet->setDataByName("base_power", player->GetTotalPowerBase()); + packet->setDataByName("bonus_power", floor( (float)(player->GetPrimaryStat() * player->CalculateBonusMod()))); + packet->setDataByName("stat_bonus_power", player->CalculateBonusMod()); + packet->setDataByName("conc_used", info_struct->cur_concentration); + packet->setDataByName("conc_max", info_struct->max_concentration); + packet->setDataByName("attack", info_struct->cur_attack); + packet->setDataByName("attack_base", info_struct->attack_base); + packet->setDataByName("absorb", info_struct->absorb); + packet->setDataByName("mitigation_skill1", info_struct->mitigation_skill1); + packet->setDataByName("mitigation_skill2", info_struct->mitigation_skill2); + packet->setDataByName("mitigation_skill3", info_struct->mitigation_skill3); + CalculateXPPercentages(); + packet->setDataByName("exp_yellow", info_struct->xp_yellow); + packet->setDataByName("exp_blue", info_struct->xp_blue); + packet->setDataByName("tradeskill_exp_yellow", info_struct->tradeskill_exp_yellow); + packet->setDataByName("tradeskill_exp_blue", info_struct->tradeskill_exp_blue); + packet->setDataByName("flags", info_struct->flags); + packet->setDataByName("flags2", info_struct->flags2); + packet->setDataByName("str", info_struct->str); + packet->setDataByName("sta", info_struct->sta); + packet->setDataByName("agi", info_struct->agi); + packet->setDataByName("wis", info_struct->wis); + packet->setDataByName("int", info_struct->intel); + packet->setDataByName("str_base", info_struct->str_base); + packet->setDataByName("sta_base", info_struct->sta_base); + packet->setDataByName("agi_base", info_struct->agi_base); + packet->setDataByName("wis_base", info_struct->wis_base); + packet->setDataByName("int_base", info_struct->intel_base); + packet->setDataByName("mitigation_cur", info_struct->cur_mitigation); + packet->setDataByName("mitigation_max", info_struct->max_mitigation); + packet->setDataByName("mitigation_base", info_struct->mitigation_base); + packet->setDataByName("heat", info_struct->heat); + packet->setDataByName("cold", info_struct->cold); + packet->setDataByName("magic", info_struct->magic); + packet->setDataByName("mental", info_struct->mental); + packet->setDataByName("divine", info_struct->divine); + packet->setDataByName("disease", info_struct->disease); + packet->setDataByName("poison", info_struct->poison); + packet->setDataByName("heat_base", info_struct->heat_base); + packet->setDataByName("cold_base", info_struct->cold_base); + packet->setDataByName("magic_base", info_struct->magic_base); + packet->setDataByName("mental_base", info_struct->mental_base); + packet->setDataByName("divine_base", info_struct->divine_base); + packet->setDataByName("disease_base", info_struct->disease_base); + packet->setDataByName("poison_base", info_struct->poison_base); + packet->setDataByName("mitigation_cur2", info_struct->cur_mitigation); + packet->setDataByName("mitigation_max2", info_struct->max_mitigation); + packet->setDataByName("mitigation_base2", info_struct->mitigation_base); + packet->setDataByName("coins_copper", info_struct->coin_copper); + packet->setDataByName("coins_silver", info_struct->coin_silver); + packet->setDataByName("coins_gold", info_struct->coin_gold); + packet->setDataByName("coins_plat", info_struct->coin_plat); + packet->setDataByName("weight", info_struct->weight); + packet->setDataByName("max_weight", info_struct->max_weight); + packet->setDataByName("pet_name", info_struct->pet_name); + packet->setDataByName("status_points", info_struct->status_points); + string* bind_name = 0; + if(bind_zone_id > 0) + bind_name = database.GetZoneName(bind_zone_id); + if(bind_name){ + packet->setDataByName("bind_zone", bind_name->c_str()); + safe_delete(bind_name); + } + else + packet->setDataByName("bind_zone", "None"); + string* house_name = 0; + if(house_zone_id > 0) + house_name = database.GetZoneName(house_zone_id); + if(house_name){ + packet->setDataByName("house_zone", house_name->c_str()); + safe_delete(house_name); + } + else + packet->setDataByName("house_zone", "None"); + //packet->setDataByName("account_age_base", 14); + if(player->GetHPRegen() == 0) + player->SetHPRegen((int)(info_struct->level*.75)+(int)(info_struct->level/10)+3); + if(player->GetPowerRegen() == 0) + player->SetPowerRegen(info_struct->level+(int)(info_struct->level/10)+4); + packet->setDataByName("hp_regen", player->GetHPRegen()); + packet->setDataByName("power_regen", player->GetPowerRegen()); + /*packet->setDataByName("unknown11", -1, 0); + packet->setDataByName("unknown11", -1, 1); + packet->setDataByName("unknown13", 201, 0); + packet->setDataByName("unknown13", 201, 1); + packet->setDataByName("unknown13", 234, 2); + packet->setDataByName("unknown13", 201, 3); + packet->setDataByName("unknown13", 214, 4); + packet->setDataByName("unknown13", 234, 5); + packet->setDataByName("unknown13", 234, 6); + + packet->setDataByName("unknown14", 78); + */ + packet->setDataByName("adventure_exp_vitality", (int16)(player->GetXPVitality() *10)); + //packet->setDataByName("unknown15b", 9911); + packet->setDataByName("unknown15a", 78); + packet->setDataByName("xp_yellow_vitality_bar", info_struct->xp_yellow_vitality_bar); + packet->setDataByName("xp_blue_vitality_bar", info_struct->xp_blue_vitality_bar); + packet->setDataByName("tradeskill_exp_vitality", 100); + packet->setDataByName("unknown15c", 200); + + //packet->setDataByName("unknown15", 100, 10); + packet->setDataByName("unknown18", 16880, 1); + /*packet->setDataByName("unknown19", 1); + packet->setDataByName("unknown19", 3, 1); + packet->setDataByName("unknown19", 1074301064, 2); + packet->setDataByName("unknown19", 1, 3); + packet->setDataByName("unknown19", 3, 4); + packet->setDataByName("unknown19", 1074301064, 5); + packet->setDataByName("unknown19", 6, 6); + packet->setDataByName("unknown19", 14, 7); + packet->setDataByName("unknown19", 1083179008, 8);*/ + player->SetGroupInformation(packet); + packet->setDataByName("unknown20", 1, 107); + packet->setDataByName("unknown20", 1, 108); + packet->setDataByName("unknown20", 1, 109); + packet->setDataByName("unknown20", 1, 110); + packet->setDataByName("unknown20", 1, 111); + //packet->setDataByName("unknown20b", 255); + //packet->setDataByName("unknown20b", 255, 1); + //packet->setDataByName("unknown20b", 255, 2); + packet->setDataByName("unknown11", 123); + packet->setDataByName("unknown11", 234, 1); + + //packet->setDataByName("in_combat", 32768); + //make name flash red + /*packet->setDataByName("unknown20", 8); + packet->setDataByName("unknown20", 38, 70); + packet->setDataByName("unknown20", 17, 77); + packet->setDataByName("unknown20", 1, 112); //melee stats and such + packet->setDataByName("unknown20", 1, 113); + packet->setDataByName("unknown20", 1, 114); + packet->setDataByName("unknown20", 1, 115); + + packet->setDataByName("unknown20", 4294967295, 309); + packet->setDataByName("unknown22", 2, 4); + packet->setDataByName("unknown23", 2, 29); + */ + //packet->setDataByName("unknown20b", 1, i); // pet bar in here + // for(int i=0;i<19;i++) + // packet->setDataByName("unknown7", 257, i); + //packet->setDataByName("unknown21", info_struct->rain, 2); + packet->setDataByName("rain", info_struct->rain); + /*packet->setDataByName("unknown22", 3, 4); + packet->setDataByName("unknown23", 3, 161); + packet->setDataByName("unknown20", 103); + packet->setDataByName("unknown20", 1280, 70); + packet->setDataByName("unknown20", 9, 71); + packet->setDataByName("unknown20", 5, 72); + packet->setDataByName("unknown20", 4294967271, 73); + packet->setDataByName("unknown20", 5, 75); + packet->setDataByName("unknown20", 1051, 77); + packet->setDataByName("unknown20", 3, 78); + packet->setDataByName("unknown20", 6, 104); + packet->setDataByName("unknown20", 1, 105); + packet->setDataByName("unknown20", 20, 106); + packet->setDataByName("unknown20", 3, 107); + packet->setDataByName("unknown20", 1, 108); + packet->setDataByName("unknown20", 1, 109); + packet->setDataByName("unknown20", 4278190080, 494); + packet->setDataByName("unknown20b", 255); + packet->setDataByName("unknown20b", 255, 1); + packet->setDataByName("unknown20b", 255, 2); + packet->setDataByName("unknown20", 50, 75); + */ + packet->setDataByName("rain2", -102.24); + for(int i=0;i<45;i++){ + if(i < 30){ + packet->setSubstructDataByName("maintained_effects", "name", info_struct->maintained_effects[i].name, i, 0); + packet->setSubstructDataByName("maintained_effects", "target", info_struct->maintained_effects[i].target, i, 0); + packet->setSubstructDataByName("maintained_effects", "spell_id", info_struct->maintained_effects[i].spell_id, i, 0); + packet->setSubstructDataByName("maintained_effects", "slot_pos", info_struct->maintained_effects[i].slot_pos, i, 0); + packet->setSubstructDataByName("maintained_effects", "icon", info_struct->maintained_effects[i].icon, i, 0); + packet->setSubstructDataByName("maintained_effects", "icon_type", info_struct->maintained_effects[i].icon_backdrop, i, 0); + packet->setSubstructDataByName("maintained_effects", "conc_used", info_struct->maintained_effects[i].conc_used, i, 0); + packet->setSubstructDataByName("maintained_effects", "unknown3", 1, i, 0); + packet->setSubstructDataByName("maintained_effects", "total_time", info_struct->maintained_effects[i].total_time, i, 0); + packet->setSubstructDataByName("maintained_effects", "expire_timestamp", info_struct->maintained_effects[i].expire_timestamp, i, 0); + } + else if(version < 942)//version 942 added 15 additional spell effect slots + break; + packet->setSubstructDataByName("spell_effects", "spell_id", info_struct->spell_effects[i].spell_id, i, 0); + if(info_struct->spell_effects[i].spell_id > 0 && info_struct->spell_effects[i].spell_id < 0xFFFFFFFF) + packet->setSubstructDataByName("spell_effects", "unknown2", 514, i, 0); + packet->setSubstructDataByName("spell_effects", "total_time", info_struct->spell_effects[i].total_time, i, 0); + packet->setSubstructDataByName("spell_effects", "expire_timestamp", info_struct->spell_effects[i].expire_timestamp, i, 0); + packet->setSubstructDataByName("spell_effects", "icon", info_struct->spell_effects[i].icon, i, 0); + packet->setSubstructDataByName("spell_effects", "icon_type", info_struct->spell_effects[i].icon_backdrop, i, 0); + } + return packet; + } + return 0; +} + +EQ2Packet* PlayerInfo::serialize3(PacketStruct* packet, int16 version){ + if(packet){ + string* data = packet->serializeString(); + int32 size = data->length(); + //DumpPacket((uchar*)data->c_str(), size); + uchar* tmp = new uchar[size]; + if(!changes){ + orig_packet = new uchar[size]; + changes = new uchar[size]; + memcpy(orig_packet, (uchar*)data->c_str(), size); + size = Pack(tmp, (uchar*)data->c_str(), size, size, version); + } + else{ + memcpy(changes, (uchar*)data->c_str(), size); + Encode(changes, orig_packet, size); + size = Pack(tmp, changes, size, size, version); + //cout << "INFO HERE:\n"; + //DumpPacket(tmp, size); + } + EQ2Packet* ret_packet = new EQ2Packet(OP_UpdateCharacterSheetMsg, tmp, size+4); + safe_delete_array(tmp); + safe_delete(packet); + return ret_packet; + } + return 0; +} + +void PlayerInfo::SetAccountAge(int16 age){ + info_struct->account_age_base = age; +} + +EQ2Packet* PlayerInfo::serialize(int16 version){ + player->CalculateBonuses(); + PacketStruct* packet = configReader.getStruct("WS_CharacterSheet", version); + if(packet){ + packet->setDataByName("character_name", info_struct->name); + packet->setDataByName("unknown_1_1_MJ", 99);//unknown_1_1_MJ + packet->setDataByName("race", info_struct->race); + packet->setDataByName("gender", info_struct->gender); + packet->setDataByName("exiled", 0); // need exiled data + packet->setDataByName("class1", info_struct->class1); + packet->setDataByName("class2", info_struct->class2); + packet->setDataByName("class3", info_struct->class3); + packet->setDataByName("tradeskill_class1", info_struct->tradeskill_class1); + packet->setDataByName("tradeskill_class2", info_struct->tradeskill_class2); + packet->setDataByName("tradeskill_class3", info_struct->tradeskill_class3); + packet->setDataByName("level", info_struct->level); + packet->setDataByName("effective_level", info_struct->level); + packet->setDataByName("tradeskill_level", info_struct->tradeskill_level); + packet->setDataByName("unknown_1_2_MJ", 98); //unknown_1_2_MJ + packet->setDataByName("account_age_base", info_struct->account_age_base); + for(int8 i=0;iaccount_age_bonus);i++) + packet->setDataByName("account_age_bonus", info_struct->account_age_bonus[i]); + packet->setDataByName("deity", "None"); + packet->setDataByName("deity", info_struct->deity); + packet->setDataByName("last_name", player->GetLastName()); + packet->setDataByName("unknown_1_3_MJ", 97);//unknown_1_3_MJ + packet->setDataByName("current_hp", player->GetHP()); + packet->setDataByName("max_hp",player-> GetTotalHP()); + packet->setDataByName("base_hp", player->GetTotalHPBase()); + + packet->setDataByName("current_power", player->GetPower()); + packet->setDataByName("max_power", player->GetTotalPower()); + packet->setDataByName("base_power", player->GetTotalPowerBase()); + packet->setDataByName("conc_used", info_struct->cur_concentration); + packet->setDataByName("conc_max", info_struct->max_concentration); + if (player->GetHPRegen() == 0) + player->SetHPRegen((int)(info_struct->level*.75) + (int)(info_struct->level / 10) + 1); + if (player->GetPowerRegen() == 0) + player->SetPowerRegen(info_struct->level + (int)(info_struct->level / 10) + 4); + packet->setDataByName("hp_regen", player->GetHPRegen() + player->stats[ITEM_STAT_HPREGEN]); + packet->setDataByName("power_regen", player->GetPowerRegen() + player->stats[ITEM_STAT_MANAREGEN]); + packet->setDataByName("unknown_1_4a_MJ", 96); //-1// was unknown11 + packet->setDataByName("unknown_1_4b_MJ", 96); //-1 + packet->setDataByName("stat_bonus_health", player->CalculateBonusMod());//bonus health and bonus power getting same value? + packet->setDataByName("stat_bonus_power", player->CalculateBonusMod());//bonus health and bonus power getting same value? + float bonus_health = floor((float)(info_struct->sta * player->CalculateBonusMod())); + packet->setDataByName("bonus_health", bonus_health); + packet->setDataByName("bonus_power", floor((float)(player->GetPrimaryStat() * player->CalculateBonusMod()))); + packet->setDataByName("stat_bonus_damage", 95); //stat_bonus_damage + packet->setDataByName("mitigation_cur", info_struct->cur_mitigation);// confirmed DoV + packet->setDataByName("mitigation_base", info_struct->mitigation_base);// confirmed DoV + packet->setDataByName("mitigation_pct_pve", 392); // % calculation Mitigation % vs PvE 392 = 39.2%// confirmed DoV + packet->setDataByName("mitigation_pct_pvp", 559); // % calculation Mitigation % vs PvP 559 = 55.9%// confirmed DoV + packet->setDataByName("toughness", 0);//toughness// confirmed DoV + packet->setDataByName("toughness_resist_dmg_pvp", 0);//toughness_resist_dmg_pvp 73 = 7300% // confirmed DoV + packet->setDataByName("avoidance_pct", 0);//avoidance_pct 192 = 19.2% // confirmed DoV + packet->setDataByName("avoidance_base", info_struct->avoidance_base); // confirmed DoV + packet->setDataByName("avoidance", 71); + packet->setDataByName("unknown_1096_1_MJ", 90);//unknown_1096_1_MJ + packet->setDataByName("base_avoidance_pct", info_struct->base_avoidance_pct);// confirmed DoV + packet->setDataByName("unknown_1096_2_MJ", 89);//unknown_1096_2_MJ + packet->setDataByName("parry", info_struct->parry_base);// confirmed DoV + packet->setDataByName("unknown_1096_3_MJ", 88);//unknown_1096_3_MJ + packet->setDataByName("block", info_struct->block_base);// confirmed DoV + packet->setDataByName("unknown_1096_4_MJ", 87);//unknown_1096_4_MJ + packet->setDataByName("uncontested_block", info_struct->uncontested_block);// confirmed DoV + packet->setDataByName("unknown_1096_5_MJ", 86);//unknown_1096_5_MJ + packet->setDataByName("str", info_struct->str);// confirmed DoV + packet->setDataByName("sta", info_struct->sta);// confirmed DoV + packet->setDataByName("agi", info_struct->agi);// confirmed DoV + packet->setDataByName("wis", info_struct->wis);// confirmed DoV + packet->setDataByName("int", info_struct->intel);// confirmed DoV + packet->setDataByName("str_base", info_struct->str_base); // confirmed DoV + packet->setDataByName("sta_base", info_struct->sta_base);// confirmed DoV + packet->setDataByName("agi_base", info_struct->agi_base);// confirmed DoV + packet->setDataByName("wis_base", info_struct->wis_base);// confirmed DoV + packet->setDataByName("int_base", info_struct->intel_base);// confirmed DoV + packet->setDataByName("unknown_1096_6_MJ", 86);//unknown_1096_6_MJ + if (version <= 996) { + packet->setDataByName("heat", info_struct->heat); + packet->setDataByName("cold", info_struct->cold); + packet->setDataByName("magic", info_struct->magic); + packet->setDataByName("mental", info_struct->mental); + packet->setDataByName("divine", info_struct->divine); + packet->setDataByName("disease", info_struct->disease); + packet->setDataByName("poison", info_struct->poison); + packet->setDataByName("heat_base", info_struct->heat_base); + packet->setDataByName("cold_base", info_struct->cold_base); + packet->setDataByName("magic_base", info_struct->magic_base); + packet->setDataByName("mental_base", info_struct->mental_base); + packet->setDataByName("divine_base", info_struct->divine_base); + packet->setDataByName("disease_base", info_struct->disease_base); + packet->setDataByName("poison_base", info_struct->poison_base); + } + else { + packet->setDataByName("elemental", info_struct->heat);// confirmed DoV + packet->setDataByName("noxious", info_struct->poison);// confirmed DoV + packet->setDataByName("arcane", info_struct->magic);// confirmed DoV + packet->setDataByName("unknown_1096_7_MJ", 85);//unknown_1096_7_MJ + packet->setDataByName("elemental_base", info_struct->elemental_base);// confirmed DoV + packet->setDataByName("noxious_base", info_struct->noxious_base);// confirmed DoV + packet->setDataByName("arcane_base", info_struct->arcane_base);// confirmed DoV + } + packet->setDataByName("unknown_1096_8_MJ", 205);//unknown_1096_8_MJ + packet->setDataByName("elemental_absorb_pve", 0); //210 = 21.0% confirmed DoV + packet->setDataByName("noxious_absorb_pve", 0);//210 = 21.0% confirmed DoV + packet->setDataByName("arcane_absorb_pve", 0);//210 = 21.0% confirmed DoV + packet->setDataByName("unknown_1096_9_MJ", 240);//unknown_1096_9_MJ + packet->setDataByName("elemental_absorb_pvp", 0);//210 = 21.0% confirmed DoV + packet->setDataByName("noxious_absorb_pvp", 0);//210 = 21.0% confirmed DoV + packet->setDataByName("arcane_absorb_pvp", 0);//210 = 21.0% confirmed DoV + packet->setDataByName("unknown_1096_10_MJ", 280);//unknown_1096_10_MJ + packet->setDataByName("elemental_dmg_reduction", 0);// confirmed DoV + packet->setDataByName("noxious_dmg_reduction", 0);// confirmed DoV + packet->setDataByName("arcane_dmg_reduction", 0);// confirmed DoV + packet->setDataByName("unknown_1096_11_MJ", 320);//unknown_1096_11_MJ + packet->setDataByName("elemental_dmg_reduction_pct", 0);//210 = 21.0% confirmed DoV + packet->setDataByName("noxious_dmg_reduction_pct",0);//210 = 21.0% confirmed DoV + packet->setDataByName("arcane_dmg_reduction_pct", 0);//210 = 21.0% confirmed DoV + CalculateXPPercentages(); + packet->setDataByName("current_adv_xp", info_struct->xp); // confirmed DoV + packet->setDataByName("needed_adv_xp", info_struct->xp_needed);// confirmed DoV + packet->setDataByName("debt_adv_xp", 0);//95= 9500% //confirmed DoV + packet->setDataByName("current_trade_xp", info_struct->ts_xp);// confirmed DoV + packet->setDataByName("needed_trade_xp", info_struct->ts_xp_needed);// confirmed DoV + + packet->setDataByName("debt_trade_xp", 0);//95= 9500% //confirmed DoV + packet->setDataByName("server_bonus", 0);//confirmed DoV + packet->setDataByName("adventure_vet_bonus", 145);//confirmed DoV + packet->setDataByName("tradeskill_vet_bonus", 123);//confirmed DoV + packet->setDataByName("recruit_friend", 110);// 110 = 11000% //confirmed DoV + packet->setDataByName("recruit_friend_bonus", 0);//confirmed DoV + + packet->setDataByName("adventure_vitality", (int16)(player->GetXPVitality() * 10)); // a %% + packet->setDataByName("adventure_vitality_yellow_arrow", info_struct->xp_yellow_vitality_bar); //change info_struct to match struct + packet->setDataByName("adventure_vitality_blue_arrow", info_struct->xp_blue_vitality_bar); //change info_struct to match struct + + packet->setDataByName("tradeskill_vitality", 300); //300 = 30% + + packet->setDataByName("tradeskill_vitality_purple_arrow", 0);// dov confirmed + packet->setDataByName("tradeskill_vitality_blue_arrow", 0);// dov confirmed + packet->setDataByName("mentor_bonus", 50);//mentor_bonus //this converts wrong says mentor bonus enabled but earning 0 + + packet->setDataByName("assigned_aa", player->GetAssignedAA()); + packet->setDataByName("max_aa", rule_manager.GetGlobalRule(R_Player, MaxAA)->GetInt16()); + packet->setDataByName("unassigned_aa", 200);// player->GetUnassignedAA()); // dov confirmed + packet->setDataByName("aa_green_bar", 0);// dov confirmed + packet->setDataByName("adv_xp_to_aa_xp_slider", 0); // aa slider max // dov confirmed + packet->setDataByName("adv_xp_to_aa_xp_max", 100); // aa slider position // dov confirmed + packet->setDataByName("aa_blue_bar", 0);// dov confirmed + packet->setDataByName("bonus_achievement_xp", 0); // dov confirmed + packet->setDataByName("unknown_1096_12_MJ", 90); + packet->setDataByName("items_found", 62);// dov confirmed + packet->setDataByName("named_npcs_killed", 192);// dov confirmed + packet->setDataByName("quests_completed", 670);// dov confirmed + packet->setDataByName("exploration_events", 435);// dov confirmed + packet->setDataByName("completed_collections", 144);// dov confirmed + packet->setDataByName("unknown_1096_13_MJ", 80);//unknown_1096_13_MJ + packet->setDataByName("unknown_1096_14_MJ", 50);//unknown_1096_14_MJ + packet->setDataByName("coins_copper", info_struct->coin_copper);// dov confirmed + packet->setDataByName("coins_silver", info_struct->coin_silver);// dov confirmed + packet->setDataByName("coins_gold", info_struct->coin_gold);// dov confirmed + packet->setDataByName("coins_plat", info_struct->coin_plat);// dov confirmed + packet->setDataByName("unknown_1096_15_MJ", 50);//unknown_1096_15_MJ + //////Spell Effects go here, but are below + //////Dettrimental effects go here, but are below + packet->setDataByName("trauma_count", 45);// added with spells leave here for testing//dov confirmed + packet->setDataByName("arcane_count", 255);// added with spells leave here for testing//dov confirmed + packet->setDataByName("noxious_count", 47);// added with spells leave here for testing//dov confirmed + packet->setDataByName("elemental_count", 255);// added with spells leave here for testing//dov confirmed + packet->setDataByName("curse_count", 49);// added with spells leave here for testing//dov confirmed + packet->setDataByName("unknown_1096_17_MJ", 30);//unknown_1096_17_MJ + //////Maintained effects go here, but are below + packet->setDataByName("breath", 30); + packet->setDataByName("unknown_1096_18_MJ", 1000);//16880 + packet->setDataByName("melee_pri_dmg_min", player->GetPrimaryWeaponMinDamage());// dov confirmed + packet->setDataByName("melee_pri_dmg_max", player->GetPrimaryWeaponMaxDamage());// dov confirmed + packet->setDataByName("melee_sec_dmg_min", player->GetSecondaryWeaponMinDamage());// dov confirmed + packet->setDataByName("melee_sec_dmg_max", player->GetSecondaryWeaponMaxDamage());// dov confirmed // this is off when using 2 handed weapon + packet->setDataByName("ranged_dmg_min", player->GetRangedWeaponMinDamage());// dov confirmed + packet->setDataByName("ranged_dmg_max", player->GetRangedWeaponMaxDamage());// dov confirmed + if (info_struct->attackspeed > 0) { + packet->setDataByName("melee_pri_delay", (((float)player->GetPrimaryWeaponDelay() * 1.33) / player->CalculateAttackSpeedMod()) * .001);// dov confirmed + packet->setDataByName("melee_sec_delay", (((float)player->GetSecondaryWeaponDelay() * 1.33) / player->CalculateAttackSpeedMod()) *.001);// dov confirmed + packet->setDataByName("ranged_delay", (((float)player->GetRangeWeaponDelay() * 1.33) / player->CalculateAttackSpeedMod()) *.001);// dov confirmed + } + else { + packet->setDataByName("melee_pri_delay", (float)player->GetPrimaryWeaponDelay() * .001);// dov confirmed + packet->setDataByName("melee_sec_delay", (float)player->GetSecondaryWeaponDelay() * .001);// dov confirmed + packet->setDataByName("ranged_delay", (float)player->GetRangeWeaponDelay() * .001);// dov confirmed + } + packet->setDataByName("unknown_1096_18_MJ", 99);//unknown_1096_19a_MJ + packet->setDataByName("unknown_1096_18_MJ", 98);//unknown_1096_19b_MJ + packet->setDataByName("unknown_1096_18_MJ", 97);//unknown_1096_19c_MJ + packet->setDataByName("unknown_1096_18_MJ", 96);//unknown_1096_19d_MJ + packet->setDataByName("ability_mod_pve", info_struct->ability_modifier);// dov confirmed + packet->setDataByName("base_melee_crit", 85);//85 = 8500% dov confirmed + packet->setDataByName("base_spell_crit", 84);// dov confirmed + packet->setDataByName("base_taunt_crit", 83);// dov confirmed + packet->setDataByName("base_heal_crit", 82);// dov confirmed + packet->setDataByName("flags", info_struct->flags); + packet->setDataByName("flags2", info_struct->flags2); + //unknown_1096_20_MJ + //unknown_1096_21_MJ + //unknown_1096_22_MJ + //unknown_1096_23_MJ + packet->setDataByName("haste", info_struct->haste);// dov confirmed + //unknown_1096_24_MJ + //unknown_1096_25_MJ + //unknown_1096_26_MJ + packet->setDataByName("drunk", info_struct->drunk);// dov confirmed + //unknown_1096_27_MJ + packet->setDataByName("hate_mod", info_struct->hate_mod);// dov confirmed + packet->setDataByName("adventure_effects_bonus", 55);// NEED an adventure_effects_bonus// dov confirmed + packet->setDataByName("tradeskill_effects_bonus", 56);// NEED an tradeskill_effects_bonus// dov confirmed + //unknown_1096_28_MJ + packet->setDataByName("dps", info_struct->dps);// dov confirmed + //unknown_1096_29_MJ + packet->setDataByName("melee_ae", info_struct->melee_ae);// dov confirmed + packet->setDataByName("multi_attack", info_struct->multi_attack);// dov confirmed + packet->setDataByName("spell_multi_attack", info_struct->spell_multi_attack);// dov confirmed + //unknown_1096_30_MJ + packet->setDataByName("block_chance", info_struct->block_chance);// dov confirmed + //unknown_1096_31_MJ + packet->setDataByName("crit_chance", info_struct->crit_chance);// dov confirmed + //unknown_1096_32_MJ + packet->setDataByName("crit_bonus", info_struct->crit_bonus);// dov confirmed + packet->setDataByName("potency", player->stats[ITEM_STAT_POTENCY]);//info_struct->potency);// dov confirmed + //unknown_1096_33_MJ + packet->setDataByName("reuse_speed", info_struct->reuse_speed);// dov confirmed + packet->setDataByName("recovery_speed", info_struct->recovery_speed);// dov confirmed + packet->setDataByName("casting_speed", info_struct->casting_speed);// dov confirmed + packet->setDataByName("spell_reuse_speed", info_struct->spell_reuse_speed);// dov confirmed + //unknown_1096_34_MJ + packet->setDataByName("strikethrough", info_struct->strikethrough);//dov confirmed + //unknown_1096_35_MJ + packet->setDataByName("accuracy", info_struct->accuracy);//dov confirmed + //unknown_1096_36_MJ + packet->setDataByName("critical_mit", info_struct->critical_mitigation);//dov /confirmed + //unknown_1096_37_MJ + //toughness_resist_crit_pvp + //unknown_1096_38_MJ + packet->setDataByName("durability_mod", player->stats[ITEM_STAT_DURABILITY_MOD]);// dov confirmed + packet->setDataByName("durability_add", player->stats[ITEM_STAT_DURABILITY_ADD]);// dov confirmed + packet->setDataByName("progress_mod", player->stats[ITEM_STAT_PROGRESS_MOD]);// dov confirmed + packet->setDataByName("progress_add", player->stats[ITEM_STAT_PROGRESS_ADD]);// dov confirmed + packet->setDataByName("success_mod", player->stats[ITEM_STAT_SUCCESS_MOD]);// dov confirmed + packet->setDataByName("crit_success_mod", player->stats[ITEM_STAT_CRIT_SUCCESS_MOD]);// dov confirmed + + //unknown_1096_39_MJ + /////GRoup Members + //unknown_1096_40_MJ + //unknown_1096_41_MJ + packet->setDataByName("pet_id", info_struct->pet_id); + packet->setDataByName("pet_name", info_struct->pet_name); + //unknown_1096_42_MJ + packet->setDataByName("pet_health_pct", info_struct->pet_health_pct); + packet->setDataByName("pet_power_pct", info_struct->pet_power_pct); + //unknown_1096_43_MJ + packet->setDataByName("pet_movement", info_struct->pet_movement); + packet->setDataByName("pet_behavior", info_struct->pet_behavior); + packet->setDataByName("rain", info_struct->rain); + packet->setDataByName("rain2", info_struct->wind); //-102.24); + packet->setDataByName("status_points", 999999);// info_struct->status_points); + packet->setDataByName("guild_status", 888888); + //unknown_1096_44_MJ + string* house_name = 0; + if (house_zone_id > 0) + house_name = database.GetZoneName(house_zone_id); + if (house_name) { + packet->setDataByName("house_zone", house_name->c_str()); + safe_delete(house_name); + } + else + packet->setDataByName("house_zone", "abcdefghijklmnopqrst"); + //unknown_1096_45_MJ + string* bind_name = 0; + if (bind_zone_id > 0) + bind_name = database.GetZoneName(bind_zone_id); + if (bind_name) { + packet->setDataByName("bind_zone", bind_name->c_str()); + safe_delete(bind_name); + } + else + packet->setDataByName("bind_zone", "abcdefghijklmnopqrst"); + // + + + + + + + + + + + packet->setDataByName("rare_harvest_chance", player->stats[ITEM_STAT_RARE_HARVEST_CHANCE]); + packet->setDataByName("max_crafting", player->stats[ITEM_STAT_MAX_CRAFTING]); + packet->setDataByName("component_refund", player->stats[ITEM_STAT_COMPONENT_REFUND]); + packet->setDataByName("ex_durability_mod", player->stats[ITEM_STAT_EX_DURABILITY_MOD]); + packet->setDataByName("ex_durability_add", player->stats[ITEM_STAT_EX_DURABILITY_ADD]); + packet->setDataByName("ex_crit_success_mod", player->stats[ITEM_STAT_EX_CRIT_SUCCESS_MOD]); + packet->setDataByName("ex_crit_failure_mod", player->stats[ITEM_STAT_EX_CRIT_FAILURE_MOD]); + packet->setDataByName("ex_progress_mod", player->stats[ITEM_STAT_EX_PROGRESS_MOD]); + packet->setDataByName("ex_progress_add", player->stats[ITEM_STAT_EX_PROGRESS_ADD]); + packet->setDataByName("ex_success_mod", player->stats[ITEM_STAT_EX_SUCCESS_MOD]); + + packet->setDataByName("flurry", info_struct->flurry); + packet->setDataByName("unknown153", 153); + packet->setDataByName("bountiful_harvest", 0); // need bountiful harvest + + packet->setDataByName("unknown156", 156); + packet->setDataByName("unknown157", 157); + + packet->setDataByName("unknown159", 159); + packet->setDataByName("unknown160", 160); + + + packet->setDataByName("unknown163", 163); + + + packet->setDataByName("unknown168", 168); + packet->setDataByName("decrease_falling_dmg", 169); + + + + + packet->setDataByName("exp_yellow", info_struct->xp_yellow); + packet->setDataByName("exp_blue", info_struct->xp_blue); + packet->setDataByName("tradeskill_exp_yellow", info_struct->tradeskill_exp_yellow); + packet->setDataByName("tradeskill_exp_blue", info_struct->tradeskill_exp_blue); + + + + + packet->setDataByName("attack", info_struct->cur_attack); + packet->setDataByName("attack_base", info_struct->attack_base); + packet->setDataByName("absorb", info_struct->absorb); + packet->setDataByName("mitigation_skill1", info_struct->mitigation_skill1); + packet->setDataByName("mitigation_skill2", info_struct->mitigation_skill2); + packet->setDataByName("mitigation_skill3", info_struct->mitigation_skill3); + + + + + packet->setDataByName("mitigation_max", info_struct->max_mitigation); + + packet->setDataByName("savagery", 250); + packet->setDataByName("max_savagery", 500); + packet->setDataByName("savagery_level", 1); + packet->setDataByName("max_savagery_level", 5); + packet->setDataByName("dissonance", 5000); + packet->setDataByName("max_dissonance", 10000); + + packet->setDataByName("mitigation_cur2", info_struct->cur_mitigation); + packet->setDataByName("mitigation_max2", info_struct->max_mitigation); + packet->setDataByName("mitigation_base2", info_struct->mitigation_base); + + if (version < 1096) + packet->setDataByName("weight", info_struct->weight); + packet->setDataByName("max_weight", info_struct->max_weight); + packet->setDataByName("unknownint32a", 777777); + packet->setDataByName("unknownint32b", 666666); + packet->setDataByName("mitigation2_cur", 2367); + packet->setDataByName("uncontested_riposte", info_struct->uncontested_riposte); + packet->setDataByName("uncontested_dodge", info_struct->uncontested_dodge); + packet->setDataByName("uncontested_parry", info_struct->uncontested_parry); //???? + packet->setDataByName("uncontested_riposte_pve", 0); //???? + packet->setDataByName("uncontested_parry_pve", 0); //???? + packet->setDataByName("total_prestige_points", player->GetPrestigeAA()); + packet->setDataByName("unassigned_prestige_points", 25); // player->GetUnassignedPretigeAA()); + packet->setDataByName("total_tradeskill_points", 40); // player->GetTradeskillAA()); + packet->setDataByName("unassigned_tradeskill_points", 25);// player->GetUnassignedTradeskillAA()); + packet->setDataByName("total_tradeskill_prestige_points", player->GetTradeskillPrestigeAA()); + packet->setDataByName("unassigned_tradeskill_prestige_points", 25);// player->GetUnassignedTradeskillPrestigeAA()); + /*packet->setDataByName("unknown13", 201, 0); + packet->setDataByName("unknown13", 201, 1); + packet->setDataByName("unknown13", 234, 2); + packet->setDataByName("unknown13", 201, 3); + packet->setDataByName("unknown13", 214, 4); + packet->setDataByName("unknown13", 234, 5); + packet->setDataByName("unknown13", 234, 6); + + packet->setDataByName("unknown14", 78); + */ + + //packet->setDataByName("unknown23", 1, 146); + + //packet->setDataByName("unknown24", 0xFF, 42); + //packet->setDataByName("unknown24", 0xFF, 46); + + // unknown14c = percent aa exp to next level + packet->setDataByName("unknown14d", 100, 0); + packet->setDataByName("unknown20", 1084227584, 72); + //packet->setDataByName("unknown16", 0xFFFFFFFF, 4); + + + //packet->setDataByName("unknown15b", 9911); + + packet->setDataByName("unknown15c", 200); + + //packet->setDataByName("unknown15", 100, 10); + + /*packet->setDataByName("unknown19", 1); + packet->setDataByName("unknown19", 3, 1); + packet->setDataByName("unknown19", 1074301064, 2); + packet->setDataByName("unknown19", 1, 3); + packet->setDataByName("unknown19", 3, 4); + packet->setDataByName("unknown19", 1074301064, 5); + packet->setDataByName("unknown19", 6, 6); + packet->setDataByName("unknown19", 14, 7); + packet->setDataByName("unknown19", 1083179008, 8);*/ + player->SetGroupInformation(packet); + //packet->setDataByName("unknown20", 1, 107); + //packet->setDataByName("unknown20", 1, 108); + //packet->setDataByName("unknown20", 1, 109); + //packet->setDataByName("unknown20", 1, 110); + //packet->setDataByName("unknown20", 1, 111); + //packet->setDataByName("unknown20b", 255); + //packet->setDataByName("unknown20b", 255, 1); + //packet->setDataByName("unknown20b", 255, 2); + //packet->setDataByName("in_combat", 32768); + //make name flash red + /*packet->setDataByName("unknown20", 8); + packet->setDataByName("unknown20", 38, 70); + packet->setDataByName("unknown20", 17, 77); + packet->setDataByName("unknown20", 1, 112); //melee stats and such + packet->setDataByName("unknown20", 1, 113); + packet->setDataByName("unknown20", 1, 114); + packet->setDataByName("unknown20", 1, 115); + + packet->setDataByName("unknown20", 4294967295, 309); + packet->setDataByName("unknown22", 2, 4); + packet->setDataByName("unknown23", 2, 29); + */ + //packet->setDataByName("unknown20b", 1, i); // pet bar in here + // for(int i=0;i<19;i++) + // packet->setDataByName("unknown7", 257, i); + //packet->setDataByName("unknown21", info_struct->rain, 2); + + /*packet->setDataByName("unknown22", 3, 4); + packet->setDataByName("unknown23", 3, 161); + packet->setDataByName("unknown20", 103); + packet->setDataByName("unknown20", 1280, 70); + packet->setDataByName("unknown20", 9, 71); + packet->setDataByName("unknown20", 5, 72); + packet->setDataByName("unknown20", 4294967271, 73); + packet->setDataByName("unknown20", 5, 75); + packet->setDataByName("unknown20", 1051, 77); + packet->setDataByName("unknown20", 3, 78); + packet->setDataByName("unknown20", 6, 104); + packet->setDataByName("unknown20", 1, 105); + packet->setDataByName("unknown20", 20, 106); + packet->setDataByName("unknown20", 3, 107); + packet->setDataByName("unknown20", 1, 108); + packet->setDataByName("unknown20", 1, 109); + packet->setDataByName("unknown20", 4278190080, 494); + packet->setDataByName("unknown20b", 255); + packet->setDataByName("unknown20b", 255, 1); + packet->setDataByName("unknown20b", 255, 2); + packet->setDataByName("unknown20", 50, 75); + */ + + + + + + + + + /*packet->setDataByName("unknown199a", 843);// 25); + //packet->setDataByName("unknown199b", 844);// 30); + //packet->setDataByName("unknown199c", 845);// 45); + //packet->setDataByName("unknown199d", 846);// 55); + + + packet->setDataByName("unknown37", 537); + packet->setDataByName("unknown38", 538); + packet->setDataByName("unknown39", 539); + packet->setDataByName("unknown40", 540); + packet->setDataByName("unknown41", 541); + packet->setDataByName("unknown42", 542); + packet->setDataByName("unknown43", 543); + packet->setDataByName("unknown44", 544); + + packet->setDataByName("ability_mod_pvp", 542); + packet->setDataByName("unknown43", 543); + packet->setDataByName("unknown44", 544); + + + packet->setDataByName("unknown45", 645); + packet->setDataByName("unknown46", 646); + packet->setDataByName("unknown47", 647); + packet->setDataByName("unknown48", 648); + packet->setDataByName("unknown49", 649); + packet->setDataByName("unknown50", 650); + packet->setDataByName("unknown51", 651); + packet->setDataByName("unknown52", 652); + packet->setDataByName("unknown53", 653); + packet->setDataByName("unknown54", 654); + packet->setDataByName("unknown55", 655); + packet->setDataByName("unknown56", 656); + packet->setDataByName("unknown57", 657); + packet->setDataByName("unknown58", 658); + packet->setDataByName("unknown59", 659); + packet->setDataByName("unknown60", 660); + + */ + + + + packet->setDataByName("in_combat_movement_speed", 125); + + packet->setDataByName("increase_max_power", 127); + packet->setDataByName("increase_max_power2", 128); + //129 does not exist + /* packet->setDataByName("unknown130", 130); + packet->setDataByName("unknown132", 132); + packet->setDataByName("unknown133", 133); + + + packet->setDataByName("unknown137", 137); + packet->setDataByName("unknown138", 138); + packet->setDataByName("unknown139", 139); + + + packet->setDataByName("unknown141", 141); + packet->setDataByName("unknown142", 142); + + + + + packet->setDataByName("unknown144", 144); + + packet->setDataByName("unknown147", 147); + packet->setDataByName("unknown148", 148); + + packet->setDataByName("unknown170", 170); + packet->setDataByName("unknown171", 171); + packet->setDataByName("unknown172", 172); + packet->setDataByName("unknown173", 173); + packet->setDataByName("unknown174", 174); + packet->setDataByName("unknown175", 175); + packet->setDataByName("unknown176", 176); + packet->setDataByName("unknown177", 177); + packet->setDataByName("loot_coin", 178); + packet->setDataByName("mitigation_increase", 179); + packet->setDataByName("unknown180", 180); + + packet->setDataByName("unknown182", 182); + + packet->setDataByName("unknown184", 184); + packet->setDataByName("unknown185", 185); + packet->setDataByName("unknown186", 186); + packet->setDataByName("unknown187", 187); + packet->setDataByName("unknown188", 188); + packet->setDataByName("unknown189", 189); + packet->setDataByName("unknown190", 190); + packet->setDataByName("unknown191", 191); + packet->setDataByName("unknown192", 192); + packet->setDataByName("unknown193", 193); + packet->setDataByName("unknown194", 194); + packet->setDataByName("unknown195", 195); + packet->setDataByName("unknown196", 196); + packet->setDataByName("unknown197", 197); + packet->setDataByName("unknown198", 198); + packet->setDataByName("unknown199", 199); + packet->setDataByName("unknown200", 200); + packet->setDataByName("unknown201", 201); + packet->setDataByName("unknown202", 202); + packet->setDataByName("unknown203", 203); + packet->setDataByName("unknown204", 204); + packet->setDataByName("unknown205", 205); + packet->setDataByName("unknown206", 206); + packet->setDataByName("unknown207", 207); + packet->setDataByName("unknown208", 208); + packet->setDataByName("unknown209", 209); + packet->setDataByName("unknown210", 210); + packet->setDataByName("unknown211", 211); + packet->setDataByName("unknown212", 212); + packet->setDataByName("unknown213", 213); + packet->setDataByName("unknown214", 214); + packet->setDataByName("unknown215", 215); + packet->setDataByName("unknown216", 216); + packet->setDataByName("unknown217", 217); + packet->setDataByName("unknown218", 218); + packet->setDataByName("unknown219", 219); + packet->setDataByName("unknown220", 220); + packet->setDataByName("unknown221", 221); + packet->setDataByName("unknown222", 222); + packet->setDataByName("unknown223", 223); + packet->setDataByName("unknown224", 224); + packet->setDataByName("unknown225", 225); + packet->setDataByName("unknown226", 226); + packet->setDataByName("unknown227", 227); + packet->setDataByName("unknown228", 228); + packet->setDataByName("unknown229", 229); + packet->setDataByName("unknown230", 230); + packet->setDataByName("unknown231", 231); + packet->setDataByName("unknown232", 232); + packet->setDataByName("unknown233", 233); + packet->setDataByName("unknown234", 234); + packet->setDataByName("unknown235", 235); + packet->setDataByName("unknown236", 236); + packet->setDataByName("unknown237", 237); + packet->setDataByName("unknown238", 238); + packet->setDataByName("unknown239", 239); + packet->setDataByName("unknown240", 240); + + // Tradeskill stats + packet->setDataByName("unknown383", 383); + packet->setDataByName("unknown384", 384); + packet->setDataByName("unknown385", 385); + packet->setDataByName("unknown386", 386); + packet->setDataByName("unknown387", 387); + packet->setDataByName("unknown388", 388); + packet->setDataByName("unknown389", 389); + packet->setDataByName("unknown390", 390); + packet->setDataByName("unknown391", 391); + packet->setDataByName("unknown392", 392); + packet->setDataByName("unknown393", 393); + packet->setDataByName("unknown394", 394); + packet->setDataByName("unknown395", 395); + packet->setDataByName("unknown396", 396); + packet->setDataByName("unknown397", 397); + packet->setDataByName("unknown398", 398); + + + */ + + + + packet->setDataByName("vision", info_struct->vision); + packet->setDataByName("breathe_underwater", info_struct->breathe_underwater); + + + + + + int32 expireTimestamp = 0; + Spawn* maintained_target = 0; + player->GetSpellEffectMutex()->readlock(__FUNCTION__, __LINE__); + player->GetMaintainedMutex()->readlock(__FUNCTION__, __LINE__); + for(int i=0;i<45;i++){ + if(i < 30){ + maintained_target = player->GetZone()->GetSpawnByID(info_struct->maintained_effects[i].target); + packet->setSubstructDataByName("maintained_effects", "name", info_struct->maintained_effects[i].name, i, 0); + if (maintained_target) + packet->setSubstructDataByName("maintained_effects", "target", player->GetIDWithPlayerSpawn(maintained_target), i, 0); + packet->setSubstructDataByName("maintained_effects", "target_type", info_struct->maintained_effects[i].target_type, i, 0); + packet->setSubstructDataByName("maintained_effects", "spell_id", info_struct->maintained_effects[i].spell_id, i, 0); + packet->setSubstructDataByName("maintained_effects", "slot_pos", info_struct->maintained_effects[i].slot_pos, i, 0); + packet->setSubstructDataByName("maintained_effects", "icon", info_struct->maintained_effects[i].icon, i, 0); + packet->setSubstructDataByName("maintained_effects", "icon_type", info_struct->maintained_effects[i].icon_backdrop, i, 0); + packet->setSubstructDataByName("maintained_effects", "conc_used", info_struct->maintained_effects[i].conc_used, i, 0); + packet->setSubstructDataByName("maintained_effects", "unknown3", 1, i, 0); + packet->setSubstructDataByName("maintained_effects", "total_time", info_struct->maintained_effects[i].total_time, i, 0); + expireTimestamp = info_struct->maintained_effects[i].expire_timestamp; + if(expireTimestamp == 0xFFFFFFFF) + expireTimestamp = 0; + packet->setSubstructDataByName("maintained_effects", "expire_timestamp", expireTimestamp, i, 0); + } + else if(version < 942)//version 942 added 15 additional spell effect slots + break; + packet->setSubstructDataByName("spell_effects", "spell_id", info_struct->spell_effects[i].spell_id, i, 0); + /*if(info_struct->spell_effects[i].spell_id > 0 && info_struct->spell_effects[i].spell_id < 0xFFFFFFFF) + packet->setSubstructDataByName("spell_effects", "unknown2", 514, i, 0);*/ + packet->setSubstructDataByName("spell_effects", "total_time", info_struct->spell_effects[i].total_time, i, 0); + expireTimestamp = info_struct->spell_effects[i].expire_timestamp; + if(expireTimestamp == 0xFFFFFFFF) + expireTimestamp = 0; + packet->setSubstructDataByName("spell_effects", "expire_timestamp", expireTimestamp, i, 0); + packet->setSubstructDataByName("spell_effects", "icon", info_struct->spell_effects[i].icon, i, 0); + packet->setSubstructDataByName("spell_effects", "icon_type", info_struct->spell_effects[i].icon_backdrop, i, 0); + } + player->GetMaintainedMutex()->releasereadlock(__FUNCTION__, __LINE__); + player->GetSpellEffectMutex()->releasereadlock(__FUNCTION__, __LINE__); + + int8 det_count = 0; + //Send detriment counts as 255 if all dets of that type are incurable + det_count = player->GetTraumaCount(); + if(det_count > 0){ + if(!player->HasCurableDetrimentType(DET_TYPE_TRAUMA)) + det_count = 255; + } + packet->setDataByName("trauma_count", det_count); + + det_count = player->GetArcaneCount(); + if(det_count > 0){ + if(!player->HasCurableDetrimentType(DET_TYPE_ARCANE)) + det_count = 255; + } + packet->setDataByName("arcane_count", det_count); + + det_count = player->GetNoxiousCount(); + if(det_count > 0){ + if(!player->HasCurableDetrimentType(DET_TYPE_NOXIOUS)) + det_count = 255; + } + packet->setDataByName("noxious_count", det_count); + + det_count = player->GetElementalCount(); + if(det_count > 0){ + if(!player->HasCurableDetrimentType(DET_TYPE_ELEMENTAL)) + det_count = 255; + } + packet->setDataByName("elemental_count", det_count); + + det_count = player->GetCurseCount(); + if(det_count > 0){ + if(!player->HasCurableDetrimentType(DET_TYPE_CURSE)) + det_count = 255; + } + packet->setDataByName("curse_count", det_count); + + player->GetDetrimentMutex()->readlock(__FUNCTION__, __LINE__); + vector* det_list = player->GetDetrimentalSpellEffects(); + DetrimentalEffects det; + int32 i = 0; + for(i = 0; isize(); i++){ + det = det_list->at(i); + packet->setSubstructDataByName("detrimental_spell_effects", "spell_id", det.spell_id, i); + packet->setSubstructDataByName("detrimental_spell_effects", "total_time", det.total_time, i); + packet->setSubstructDataByName("detrimental_spell_effects", "icon", det.icon, i); + packet->setSubstructDataByName("detrimental_spell_effects", "icon_type", det.icon_backdrop, i); + expireTimestamp = det.expire_timestamp; + if(expireTimestamp == 0xFFFFFFFF) + expireTimestamp = 0; + packet->setSubstructDataByName("detrimental_spell_effects", "expire_timestamp", expireTimestamp, i); + packet->setSubstructDataByName("detrimental_spell_effects", "unknown2", 2, i); + if(i == 30){ + if(version < 942) + break; + } + else if(i == 45) + break; + } + if(version < 942){ + while(i<30){ + packet->setSubstructDataByName("detrimental_spell_effects", "spell_id", 0xFFFFFFFF, i); + i++; + } + } + else{ + while(i<45){ + packet->setSubstructDataByName("detrimental_spell_effects", "spell_id", 0xFFFFFFFF, i); + i++; + } + } + player->GetDetrimentMutex()->releasereadlock(__FUNCTION__, __LINE__); + + string* data = packet->serializeString(); + int32 size = data->length(); + //packet->PrintPacket(); + //DumpPacket((uchar*)data->c_str(), size); + uchar* tmp = new uchar[size]; + if(!changes){ + orig_packet = new uchar[size]; + changes = new uchar[size]; + memcpy(orig_packet, (uchar*)data->c_str(), size); + size = Pack(tmp, (uchar*)data->c_str(), size, size, version); + } + else{ + memcpy(changes, (uchar*)data->c_str(), size); + /*if (player->GetTempVariable("offset").length() > 0){ + changes[atoul(player->GetTempVariable("offset").c_str())] = 0xF4; + changes[atoul(player->GetTempVariable("offset").c_str()) + 1] = 0x01; + }*/ + Encode(changes, orig_packet, size); + size = Pack(tmp, changes, size, size, version); + //DumpPacket(tmp, size); + } + + PacketStruct* control_packet = configReader.getStruct("WS_SetControlGhost" , version); + if(control_packet){ + control_packet->setDataByName("spawn_id", 0xFFFFFFFF); + control_packet->setDataByName("speed", player->GetSpeed()); + control_packet->setDataByName("air_speed", player->GetAirSpeed()); + control_packet->setDataByName("size", 0.51); + Client* client = player->GetZone()->GetClientBySpawn(player); + if (client) + client->QueuePacket(control_packet->serialize()); + safe_delete(control_packet); + } + + EQ2Packet* ret_packet = new EQ2Packet(OP_UpdateCharacterSheetMsg, tmp, size+4); + safe_delete(packet); + safe_delete_array(tmp); + return ret_packet; + } + return 0; +} + +EQ2Packet* PlayerInfo::serializePet(int16 version) { + PacketStruct* packet = configReader.getStruct("WS_CharacterPet", version); + if(packet) { + Spawn* pet = 0; + pet = player->GetPet(); + if (!pet) + pet = player->GetCharmedPet(); + + if (pet) { + packet->setDataByName("current_hp", pet->GetHP()); + packet->setDataByName("max_hp", pet->GetTotalHP()); + packet->setDataByName("base_hp", pet->GetTotalHPBase()); + + packet->setDataByName("current_power", pet->GetPower()); + packet->setDataByName("max_power", pet->GetTotalPower()); + packet->setDataByName("base_power", pet->GetTotalPowerBase()); + + packet->setDataByName("spawn_id", info_struct->pet_id); + packet->setDataByName("spawn_id2", info_struct->pet_id); + + packet->setDataByName("name", info_struct->pet_name); + packet->setDataByName("no_pet", info_struct->pet_name); + + if (version >= 57000) { + packet->setDataByName("current_power3", pet->GetPower()); + packet->setDataByName("max_power3", pet->GetTotalPower()); + packet->setDataByName("health_pct_tooltip", (double)info_struct->pet_health_pct); + packet->setDataByName("health_pct_bar", (double)info_struct->pet_health_pct); + } + else { + packet->setDataByName("health_pct_tooltip", info_struct->pet_health_pct); + packet->setDataByName("health_pct_bar", info_struct->pet_health_pct); + } + packet->setDataByName("power_pct_tooltip", info_struct->pet_power_pct); + packet->setDataByName("power_pct_bar", info_struct->pet_power_pct); + packet->setDataByName("unknown5", 255); // Hate % maybe + packet->setDataByName("movement", info_struct->pet_movement); + packet->setDataByName("behavior", info_struct->pet_behavior); + } + else { + packet->setDataByName("current_hp", 0); + packet->setDataByName("max_hp", 0); + packet->setDataByName("base_hp", 0); + packet->setDataByName("current_power", 0); + packet->setDataByName("max_power", 0); + packet->setDataByName("base_power", 0); + + packet->setDataByName("spawn_id", 0); + packet->setDataByName("spawn_id2", 0xFFFFFFFF); + packet->setDataByName("name", ""); + packet->setDataByName("no_pet", "No Pet"); + packet->setDataByName("health_pct_tooltip", 0); + packet->setDataByName("health_pct_bar", 0); + packet->setDataByName("power_pct_tooltip", 0); + packet->setDataByName("power_pct_bar", 0); + packet->setDataByName("unknown5", 0); + packet->setDataByName("movement", 0); + packet->setDataByName("behavior", 0); + } + + + string* data = packet->serializeString(); + int32 size = data->length(); + uchar* tmp = new uchar[size]; + // if this is the first time sending this packet create the buffers + if(!pet_changes){ + pet_orig_packet = new uchar[size]; + pet_changes = new uchar[size]; + // copy the packet into the pet_orig_packet so we can xor against it in the future + memcpy(pet_orig_packet, (uchar*)data->c_str(), size); + // pack the packet, result ends up in tmp + size = Pack(tmp, (uchar*)data->c_str(), size, size, version); + } + else{ + // copy the packet into pet_changes + memcpy(pet_changes, (uchar*)data->c_str(), size); + // XOR's the packet to the original, stores the new packet in the orig packet (will xor against that for the next update) + // puts the xor packet into pet_changes. + Encode(pet_changes, pet_orig_packet, size); + // Pack the pet_changes packet, will put the packed size at the start, result ends up in tmp + size = Pack(tmp, pet_changes, size, size, version); + } + + // Create the packet that we will send + EQ2Packet* ret_packet = new EQ2Packet(OP_CharacterPet, tmp, size+4); + // Clean up + safe_delete_array(tmp); + safe_delete(packet); + // Return the packet that will be sent to the client + return ret_packet; + } + return 0; +} + +bool Player::DamageEquippedItems(int8 amount, Client* client) { + bool ret = false; + int8 item_type; + Item* item = 0; + for(int8 i=0;igeneric_info.item_type; + if (item->details.item_id > 0 && item_type != ITEM_TYPE_FOOD && item_type != ITEM_TYPE_BAUBLE && item_type != ITEM_TYPE_THROWN){ + ret = true; + if((item->generic_info.condition - amount) > 0) + item->generic_info.condition -= amount; + else + item->generic_info.condition = 0; + item->save_needed = true; + if (client) + client->QueuePacket(item->serialize(client->GetVersion(), false, this)); + } + } + } + return ret; +} + +vector Player::UnequipItem(int16 index, sint32 bag_id, int8 slot, int16 version){ + vector packets; + Item* item = equipment_list.items[index]; + if(item && bag_id == -999){ + int8 old_slot = item->details.slot_id; + if(item_list.AssignItemToFreeSlot(item)){ + database.DeleteItem(GetCharacterID(), item, "EQUIPPED"); + + if (item->GetItemScript() && lua_interface) + lua_interface->RunItemScript(item->GetItemScript(), "unequipped", item, this); + + item->save_needed = true; + EQ2Packet* outapp = item_list.serialize(this, version); + if(outapp){ + packets.push_back(outapp); + packets.push_back(item->serialize(version, false)); + EQ2Packet* bag_packet = SendBagUpdate(item->details.inv_slot_id, version); + if(bag_packet) + packets.push_back(bag_packet); + } + equipment_list.RemoveItem(index); + packets.push_back(equipment_list.serialize(version, this)); + SetCharSheetChanged(true); + SetEquipment(0, old_slot); + } + else{ + PacketStruct* packet = configReader.getStruct("WS_DisplayText", version); + if(packet){ + packet->setDataByName("color", CHANNEL_COLOR_YELLOW); + packet->setMediumStringByName("text", "Unable to unequip item: no free inventory locations."); + packet->setDataByName("unknown02", 0x00ff); + packets.push_back(packet->serialize()); + safe_delete(packet); + } + } + } + else if(item){ + Item* to_item = 0; + if(item_list.items.count(bag_id) > 0 && item_list.items[bag_id].count(slot) > 0) + to_item = item_list.items[bag_id][slot]; + if(to_item && GetEquipmentList()->CanItemBeEquippedInSlot(to_item, item->details.slot_id)){ + equipment_list.RemoveItem(index); + database.DeleteItem(GetCharacterID(), item, "EQUIPPED"); + database.DeleteItem(GetCharacterID(), to_item, "NOT-EQUIPPED"); + + if (item->GetItemScript() && lua_interface) + lua_interface->RunItemScript(item->GetItemScript(), "unequipped", item, this); + + if (to_item->GetItemScript() && lua_interface) + lua_interface->RunItemScript(item->GetItemScript(), "equipped", to_item, this); + + item_list.RemoveItem(to_item); + equipment_list.SetItem(item->details.slot_id, to_item); + to_item->save_needed = true; + packets.push_back(to_item->serialize(version, false)); + SetEquipment(to_item); + item->details.inv_slot_id = bag_id; + item->details.slot_id = slot; + item_list.AddItem(item); + item->save_needed = true; + packets.push_back(item->serialize(version, false)); + packets.push_back(equipment_list.serialize(version)); + packets.push_back(item_list.serialize(this, version)); + } + else if(to_item && to_item->IsBag() && to_item->details.num_slots > 0){ + bool free_slot = false; + for(int8 i=0;idetails.num_slots;i++){ + if(item_list.items[to_item->details.bag_id].count(i) == 0){ + SetEquipment(0, item->details.slot_id); + database.DeleteItem(GetCharacterID(), item, "EQUIPPED"); + + if (item->GetItemScript() && lua_interface) + lua_interface->RunItemScript(item->GetItemScript(), "unequipped", item, this); + + equipment_list.RemoveItem(index); + item->details.inv_slot_id = to_item->details.bag_id; + item->details.slot_id = i; + item_list.AddItem(item); + item->save_needed = true; + packets.push_back(equipment_list.serialize(version)); + packets.push_back(item->serialize(version, false)); + packets.push_back(to_item->serialize(version, false, this)); + packets.push_back(item_list.serialize(this, version)); + free_slot = true; + break; + } + } + if(!free_slot){ + PacketStruct* packet = configReader.getStruct("WS_DisplayText", version); + if(packet){ + packet->setDataByName("color", CHANNEL_COLOR_YELLOW); + packet->setMediumStringByName("text", "Unable to unequip item: no free space in the bag."); + packet->setDataByName("unknown02", 0x00ff); + packets.push_back(packet->serialize()); + safe_delete(packet); + } + } + } + else if(to_item){ + PacketStruct* packet = configReader.getStruct("WS_DisplayText", version); + if(packet){ + packet->setDataByName("color", CHANNEL_COLOR_YELLOW); + packet->setMediumStringByName("text", "Unable to swap items: that item cannot be equipped there."); + packet->setDataByName("unknown02", 0x00ff); + packets.push_back(packet->serialize()); + safe_delete(packet); + } + } + else{ + if((bag_id == 0 && slot < NUM_INV_SLOTS) || (bag_id == -3 && slot < NUM_BANK_SLOTS) || (bag_id == -4 && slot < NUM_SHARED_BANK_SLOTS)){ + if(bag_id == -4 && item->CheckFlag(NO_TRADE)){ + PacketStruct* packet = configReader.getStruct("WS_DisplayText", version); + if(packet){ + packet->setDataByName("color", CHANNEL_COLOR_YELLOW); + packet->setMediumStringByName("text", "Unable to unequip item: that item cannot be traded."); + packet->setDataByName("unknown02", 0x00ff); + packets.push_back(packet->serialize()); + safe_delete(packet); + } + } + else{ + SetEquipment(0, item->details.slot_id); + database.DeleteItem(GetCharacterID(), item, "EQUIPPED"); + + if (item->GetItemScript() && lua_interface) + lua_interface->RunItemScript(item->GetItemScript(), "unequipped", item, this); + + equipment_list.RemoveItem(index); + item->details.inv_slot_id = bag_id; + item->details.slot_id = slot; + item_list.AddItem(item); + item->save_needed = true; + packets.push_back(equipment_list.serialize(version)); + packets.push_back(item->serialize(version, false)); + packets.push_back(item_list.serialize(this, version)); + } + } + else{ + Item* bag = item_list.GetItemFromUniqueID(bag_id, true); + if(bag && bag->IsBag() && slot < bag->details.num_slots){ + SetEquipment(0, item->details.slot_id); + database.DeleteItem(GetCharacterID(), item, "EQUIPPED"); + + if (item->GetItemScript() && lua_interface) + lua_interface->RunItemScript(item->GetItemScript(), "unequipped", item, this); + + equipment_list.RemoveItem(index); + item->details.inv_slot_id = bag_id; + item->details.slot_id = slot; + item_list.AddItem(item); + item->save_needed = true; + packets.push_back(equipment_list.serialize(version)); + packets.push_back(item->serialize(version, false)); + packets.push_back(item_list.serialize(this, version)); + } + } + } + Item* bag = item_list.GetItemFromUniqueID(bag_id, true); + if(bag && bag->IsBag()) + packets.push_back(bag->serialize(version, false, this)); + } + return packets; +} + +map* Player::GetItemList(){ + return item_list.GetAllItems(); +} + +vector* Player::GetEquippedItemList(){ + return equipment_list.GetAllEquippedItems(); +} + +EQ2Packet* Player::SendBagUpdate(int32 bag_unique_id, int16 version){ + Item* bag = 0; + if(bag_unique_id > 0) + bag = item_list.GetItemFromUniqueID(bag_unique_id, true); + + if(bag && bag->IsBag()) + return bag->serialize(version, false, this); + return 0; +} + +void Player::SetEquippedItemAppearances(){ + vector* items = GetEquipmentList()->GetAllEquippedItems(); + if(items){ + for(int32 i=0;isize();i++) + SetEquipment(items->at(i)); + } + safe_delete(items); +} + +EQ2Packet* Player::SwapEquippedItems(int8 slot1, int8 slot2, int16 version){ + Item* item_from = equipment_list.items[slot1]; + Item* item_to = equipment_list.items[slot2]; + if(item_from && equipment_list.CanItemBeEquippedInSlot(item_from, slot2)){ + if(item_to){ + if(!equipment_list.CanItemBeEquippedInSlot(item_to, slot1)) + return 0; + item_to->details.slot_id = slot1; + item_to->save_needed = true; + } + item_from->save_needed = true; + item_from->details.slot_id = slot2; + return equipment_list.serialize(version); + } + return 0; +} +bool Player::CanEquipItem(Item* item) { + if (item) { + Client* client = GetZone()->GetClientBySpawn(this); + if (client) { + if (item->IsArmor() || item->IsWeapon() || item->IsFood() || item->IsRanged() || item->IsShield() || item->IsBauble() || item->IsAmmo() || item->IsThrown()) { + if ((item->generic_info.skill_req1 == 0 || item->generic_info.skill_req1 == 0xFFFFFFFF || skill_list.HasSkill(item->generic_info.skill_req1)) && (item->generic_info.skill_req2 == 0 || item->generic_info.skill_req2 == 0xFFFFFFFF || skill_list.HasSkill(item->generic_info.skill_req2))) { + int16 override_level = item->GetOverrideLevel(GetAdventureClass(), GetTradeskillClass()); + if (override_level > 0 && override_level <= GetLevel()) + return true; + if (item->CheckClass(GetAdventureClass(), GetTradeskillClass())) + if (item->CheckLevel(GetAdventureClass(), GetTradeskillClass(), GetLevel())) + return true; + else + client->Message(CHANNEL_COLOR_RED, "You must be at least level %u to equip \\aITEM %u 0:%s\\/a.", item->generic_info.adventure_default_level, item->details.item_id, item->name.c_str()); + else + client->Message(CHANNEL_COLOR_RED, "Your class may not equip \\aITEM %u 0:%s\\/a.", item->details.item_id, item->name.c_str()); + } + else + client->SimpleMessage(0, "You lack the skill required to equip this item."); + } + else + client->Message(0, "Item %s isn't equipable.", item->name.c_str()); + } + } + return false; +} + +vector Player::EquipItem(int16 index, int16 version, int8 slot_id){ + vector packets; + if(item_list.indexed_items.count(index) == 0) + return packets; + Item* item = item_list.indexed_items[index]; + if(item){ + if(slot_id != 255 && !item->HasSlot(slot_id)) + return packets; + int8 slot = equipment_list.GetFreeSlot(item, slot_id); + bool canEquip = CanEquipItem(item); + if (canEquip && item->CheckFlag(ATTUNEABLE)) { + PacketStruct* packet = configReader.getStruct("WS_ChoiceWindow", version); + char text[255]; + sprintf(text, "%s must be attuned before it can be equipped. Would you like to attune it now?", item->name.c_str()); + char accept_command[25]; + sprintf(accept_command, "attune_inv %i 1 0 -1", index); + packet->setDataByName("text", text); + packet->setDataByName("accept_text", "Attune"); + packet->setDataByName("accept_command", accept_command); + packet->setDataByName("cancel_text", "Cancel"); + // No clue if we even need the following 2 unknowns, just added them so the packet matches what live sends + packet->setDataByName("unknown2", 50); + packet->setDataByName("unknown4", 1); + packets.push_back(packet->serialize()); + safe_delete(packet); + return packets; + } + if(canEquip && slot == 255) + { + if(slot_id == 255) + slot = item->slot_data.at(0); + else + slot = slot_id; + packets = UnequipItem(slot, item->details.inv_slot_id, item->details.slot_id, version); + // If item is a 2handed weapon and something is in the secondary, unequip the secondary + if (item->IsWeapon() && item->weapon_info->wield_type == ITEM_WIELD_TYPE_TWO_HAND && equipment_list.GetItem(EQ2_SECONDARY_SLOT) != 0) { + vector tmp_packets = UnequipItem(EQ2_SECONDARY_SLOT, -999, 0, version); + //packets.reserve(packets.size() + tmp_packets.size()); + packets.insert(packets.end(), tmp_packets.begin(), tmp_packets.end()); + } + } + else if(canEquip && slot < 255) { + // If item is a 2handed weapon and something is in the secondary, unequip the secondary + if (item->IsWeapon() && item->weapon_info->wield_type == ITEM_WIELD_TYPE_TWO_HAND && equipment_list.GetItem(EQ2_SECONDARY_SLOT) != 0) { + vector tmp_packets = UnequipItem(EQ2_SECONDARY_SLOT, -999, 0, version); + //packets.reserve(packets.size() + tmp_packets.size()); + packets.insert(packets.end(), tmp_packets.begin(), tmp_packets.end()); + } + + database.DeleteItem(GetCharacterID(), item, "NOT-EQUIPPED"); + + if (item->GetItemScript() && lua_interface) + lua_interface->RunItemScript(item->GetItemScript(), "equipped", item, this); + + item_list.RemoveItem(item); + equipment_list.SetItem(slot, item); + item->save_needed = true; + packets.push_back(item->serialize(version, false)); + SetEquipment(item); + int32 bag_id = item->details.inv_slot_id; + if (item->generic_info.condition == 0) { + Client* client = GetZone()->GetClientBySpawn(this); + if (client) { + + LogWrite(MISC__TODO, 1, "TODO", "Send popup text in red 'Some of your equipment is broken!'\n\t(%s, function: %s, line #: %i)", __FILE__, __FUNCTION__, __LINE__); + + client->Message(CHANNEL_COLOR_RED, "Your \\aITEM %u %u:%s\\/a is worn out and will not be effective until repaired.", item->details.item_id, item->details.unique_id, item->name.c_str()); + } + } + packets.push_back(equipment_list.serialize(version, this)); + EQ2Packet* outapp = item_list.serialize(this, version); + if(outapp){ + packets.push_back(outapp); + EQ2Packet* bag_packet = SendBagUpdate(bag_id, version); + if(bag_packet) + packets.push_back(bag_packet); + } + SetCharSheetChanged(true); + } + } + return packets; +} +bool Player::AddItem(Item* item){ + if(item && item->details.item_id > 0){ + if(item_list.AssignItemToFreeSlot(item)){ + item->save_needed = true; + return true; + } + else if (item_list.AddOverflowItem(item)) + return true; + } + return false; +} +bool Player::AddItemToBank(Item* item) { + + if (item && item->details.item_id > 0) { + + sint32 bag = -3; + sint16 slot = -1; + if (item_list.GetFirstFreeBankSlot(&bag, &slot)) { + item->details.inv_slot_id = bag; + item->details.slot_id = slot; + item->save_needed = true; + item_list.AddItem(item); + + return true; + } + else if (item_list.AddOverflowItem(item)) + return true; + } + return false; +} +EQ2Packet* Player::SendInventoryUpdate(int16 version){ + return item_list.serialize(this, version); +} +EQ2Packet* Player::MoveInventoryItem(sint32 to_bag_id, int16 from_index, int8 new_slot, int8 charges, int16 version){ + Item* item = item_list.GetItemFromIndex(from_index); + int8 result = item_list.MoveItem(to_bag_id, from_index, new_slot, charges); + if(result == 1){ + if (item) { + if(!item->needs_deletion) + item->save_needed = true; + else if(item->needs_deletion){ + database.DeleteItem(GetCharacterID(), item, 0); + safe_delete(item); + } + } + return item_list.serialize(this, version); + } + else { + PacketStruct* packet = configReader.getStruct("WS_DisplayText", version); + if(packet){ + packet->setDataByName("color", CHANNEL_COLOR_YELLOW); + packet->setMediumStringByName("text", "Could not move item to that location."); + packet->setDataByName("unknown02", 0x00ff); + EQ2Packet* outapp = packet->serialize(); + safe_delete(packet); + return outapp; + } + } + return 0; +} + +int32 Player::GetCoinsCopper(){ + return GetInfoStruct()->coin_copper; +} + +int32 Player::GetCoinsSilver(){ + return GetInfoStruct()->coin_silver; +} + +int32 Player::GetCoinsGold(){ + return GetInfoStruct()->coin_gold; +} + +int32 Player::GetCoinsPlat(){ + return GetInfoStruct()->coin_plat; +} + +int32 Player::GetBankCoinsCopper(){ + return GetInfoStruct()->bank_coin_copper; +} + +int32 Player::GetBankCoinsSilver(){ + return GetInfoStruct()->bank_coin_silver; +} + +int32 Player::GetBankCoinsGold(){ + return GetInfoStruct()->bank_coin_gold; +} + +int32 Player::GetBankCoinsPlat(){ + return GetInfoStruct()->bank_coin_plat; +} + +vector* Player::GetQuickbar(){ + return &quickbar_items; +} + +bool Player::UpdateQuickbarNeeded(){ + return quickbar_updated; +} + +void Player::ResetQuickbarNeeded(){ + quickbar_updated = false; +} + +void Player::AddQuickbarItem(int32 bar, int32 slot, int32 type, int16 icon, int16 icon_type, int32 id, int8 tier, int32 unique_id, const char* text, bool update){ + RemoveQuickbarItem(bar, slot, false); + QuickBarItem* ability = new QuickBarItem; + ability->deleted = false; + ability->hotbar = bar; + ability->slot = slot; + ability->type = type; + ability->icon = icon; + ability->tier = tier; + ability->icon_type = icon_type; + ability->id = id; + if(unique_id == 0) + unique_id = database.NextUniqueHotbarID(); + ability->unique_id = unique_id; + if(type == QUICKBAR_TEXT_CMD && text){ + ability->text.data = string(text); + ability->text.size = ability->text.data.length(); + } + else + ability->text.size = 0; + quickbar_items.push_back(ability); + if(update) + quickbar_updated = true; +} + +void Player::RemoveQuickbarItem(int32 bar, int32 slot, bool update){ + vector::iterator itr; + QuickBarItem* qbi = 0; + for(itr=quickbar_items.begin();itr!=quickbar_items.end();itr++){ + qbi = *itr; + if(qbi && qbi->deleted == false && qbi->hotbar == bar && qbi->slot == slot){ + qbi->deleted = true; + break; + } + } + if(update) + quickbar_updated = true; +} + +void Player::ClearQuickbarItems(){ + quickbar_items.clear(); +} + +EQ2Packet* Player::GetQuickbarPacket(int16 version){ + PacketStruct* packet = configReader.getStruct("WS_QuickBarInit", version); + if(packet){ + vector::iterator itr; + packet->setArrayLengthByName("num_abilities", quickbar_items.size()); + int16 i=0; + for(itr=quickbar_items.begin();itr != quickbar_items.end(); itr++){ + QuickBarItem* ability = *itr; + if(!ability || ability->deleted) + continue; + packet->setArrayDataByName("hotbar", ability->hotbar, i); + packet->setArrayDataByName("slot", ability->slot, i); + packet->setArrayDataByName("type", ability->type, i); + packet->setArrayDataByName("icon", ability->icon, i); + packet->setArrayDataByName("icon_type", ability->icon_type, i); + packet->setArrayDataByName("id", ability->id, i); + packet->setArrayDataByName("unique_id", ability->tier, i); + packet->setArrayDataByName("text", &ability->text, i); + i++; + } + EQ2Packet* app = packet->serialize(); + safe_delete(packet); + return app; + } + return 0; +} + +void Player::AddSpellBookEntry(int32 spell_id, int8 tier, sint32 slot, int32 type, int32 timer, bool save_needed){ + SpellBookEntry* spell = new SpellBookEntry; + spell->status = 161; + spell->slot = slot; + spell->spell_id = spell_id; + spell->type = type; + spell->tier = tier; + spell->timer = timer; + spell->save_needed = save_needed; + spell->recast = 0; + spell->recast_available = 0; + MSpellsBook.lock(); + spells.push_back(spell); + MSpellsBook.unlock(); + + if (type == SPELL_BOOK_TYPE_NOT_SHOWN) + AddPassiveSpell(spell_id, tier); +} + +void Player::RemoveSpellBookEntry(int32 spell_id, bool remove_passives_from_list){ + MSpellsBook.lock(); + vector::iterator itr; + SpellBookEntry* spell = 0; + for(itr = spells.begin(); itr != spells.end(); itr++){ + spell = *itr; + if(spell->spell_id == spell_id){ + if (spell->type == SPELL_BOOK_TYPE_NOT_SHOWN) + RemovePassive(spell->spell_id, spell->tier, remove_passives_from_list); + spells.erase(itr); + break; + } + } + MSpellsBook.unlock(); +} + +int8 Player::GetSpellSlot(int32 spell_id){ + MSpellsBook.lock(); + vector::iterator itr; + SpellBookEntry* spell = 0; + for(itr = spells.begin(); itr != spells.end(); itr++){ + spell = *itr; + if(spell->spell_id == spell_id) + return spell->slot; + } + MSpellsBook.unlock(); + return 0; +} + +void Player::AddSkill(int32 skill_id, int16 current_val, int16 max_val, bool save_needed){ + Skill* master_skill = master_skill_list.GetSkill(skill_id); + Skill* skill = new Skill(master_skill); + skill->current_val = current_val; + skill->max_val = max_val; + if(save_needed) + skill->save_needed = true; + skill_list.AddSkill(skill); +} + +void Player::RemoveSkillFromDB(Skill* skill, bool save) { + skill_list.RemoveSkill(skill); + if (save) + database.DeleteCharacterSkill(GetCharacterID(), skill); +} + +int16 Player::GetSpellSlotMappingCount(){ + int16 ret = 0; + MSpellsBook.lock(); + for(int32 i=0;islot >= 0 && spell->spell_id > 0) + ret++; + } + MSpellsBook.unlock(); + return ret; +} + +int8 Player::GetSpellTier(int32 id){ + int8 ret = 0; + MSpellsBook.lock(); + for(int32 i=0;ispell_id == id){ + ret = spell->tier; + break; + } + } + MSpellsBook.unlock(); + return ret; +} + +int16 Player::GetSpellPacketCount(){ + int16 ret = 0; + MSpellsBook.lock(); + for(int32 i=0;ispell_id > 0) + ret++; + } + MSpellsBook.unlock(); + return ret; +} + +void Player::LockAllSpells() { + vector::iterator itr; + + MSpellsBook.writelock(__FUNCTION__, __LINE__); + for (itr = spells.begin(); itr != spells.end(); itr++) { + if ((*itr)->type != SPELL_BOOK_TYPE_TRADESKILL) + AddSpellStatus((*itr), SPELL_STATUS_LOCK, false); + } + + MSpellsBook.releasewritelock(__FUNCTION__, __LINE__); +} + +void Player::UnlockAllSpells(bool modify_recast) { + vector::iterator itr; + + MSpellsBook.writelock(__FUNCTION__, __LINE__); + for (itr = spells.begin(); itr != spells.end(); itr++) { + if ((*itr)->type != SPELL_BOOK_TYPE_TRADESKILL) + AddSpellStatus((*itr), SPELL_STATUS_LOCK, modify_recast); + } + + MSpellsBook.releasewritelock(__FUNCTION__, __LINE__); +} + +void Player::LockSpell(Spell* spell, int16 recast) { + vector::iterator itr; + SpellBookEntry* spell2; + MSpellsBook.writelock(__FUNCTION__, __LINE__); + for (itr = spells.begin(); itr != spells.end(); itr++) { + spell2 = *itr; + if (spell2->spell_id == spell->GetSpellID() /*|| (spell->GetSpellData()->linked_timer > 0 && spell->GetSpellData()->linked_timer == spell2->timer)*/) + RemoveSpellStatus(spell2, SPELL_STATUS_LOCK, true, recast); + } + MSpellsBook.releasewritelock(__FUNCTION__, __LINE__); +} + +void Player::UnlockSpell(Spell* spell) { + vector::iterator itr; + SpellBookEntry* spell2; + MSpellsBook.writelock(__FUNCTION__, __LINE__); + for (itr = spells.begin(); itr != spells.end(); itr++) { + spell2 = *itr; + if (spell2->spell_id == spell->GetSpellID() /*|| (spell->GetSpellData()->linked_timer > 0 && spell->GetSpellData()->linked_timer == spell2->timer)*/) + AddSpellStatus(spell2, SPELL_STATUS_LOCK); + } + MSpellsBook.releasewritelock(__FUNCTION__, __LINE__); +} + +void Player::LockTSSpells() { + vector::iterator itr; + + MSpellsBook.writelock(__FUNCTION__, __LINE__); + for (itr = spells.begin(); itr != spells.end(); itr++) { + if ((*itr)->type == SPELL_BOOK_TYPE_TRADESKILL) + RemoveSpellStatus(*itr, SPELL_STATUS_LOCK); + } + + MSpellsBook.releasewritelock(__FUNCTION__, __LINE__); + // Unlock all other types + UnlockAllSpells(); +} + +void Player::UnlockTSSpells() { + vector::iterator itr; + + MSpellsBook.writelock(__FUNCTION__, __LINE__); + for (itr = spells.begin(); itr != spells.end(); itr++) { + if ((*itr)->type == SPELL_BOOK_TYPE_TRADESKILL) + AddSpellStatus(*itr, SPELL_STATUS_LOCK); + } + + MSpellsBook.releasewritelock(__FUNCTION__, __LINE__); + // Lock all other types + LockAllSpells(); +} + +void Player::QueueSpell(Spell* spell) { + vector::iterator itr; + SpellBookEntry* spell2; + MSpellsBook.writelock(__FUNCTION__, __LINE__); + for (itr = spells.begin(); itr != spells.end(); itr++) { + spell2 = *itr; + if (spell2->spell_id == spell->GetSpellID()) + AddSpellStatus(spell2, SPELL_STATUS_QUEUE, false); + } + MSpellsBook.releasewritelock(__FUNCTION__, __LINE__); +} + +void Player::UnQueueSpell(Spell* spell) { + vector::iterator itr; + SpellBookEntry* spell2; + MSpellsBook.writelock(__FUNCTION__, __LINE__); + for (itr = spells.begin(); itr != spells.end(); itr++) { + spell2 = *itr; + if (spell2->spell_id == spell->GetSpellID()) + RemoveSpellStatus(spell2, SPELL_STATUS_QUEUE, false); + } + MSpellsBook.releasewritelock(__FUNCTION__, __LINE__); +} + +vector Player::GetSpellBookSpellsByTimer(int32 timerID) { + vector ret; + vector::iterator itr; + MSpellsBook.readlock(__FUNCTION__, __LINE__); + for (itr = spells.begin(); itr != spells.end(); itr++) { + if ((*itr)->timer == timerID) + ret.push_back(master_spell_list.GetSpell((*itr)->spell_id, (*itr)->tier)); + } + MSpellsBook.releasereadlock(__FUNCTION__, __LINE__); + return ret; +} + +void Player::ModifySpellStatus(SpellBookEntry* spell, sint16 value, bool modify_recast, int16 recast) { + if (modify_recast) { + spell->recast = recast; + spell->recast_available = Timer::GetCurrentTime2() + (recast * 100); + } + if (modify_recast || spell->recast_available <= Timer::GetCurrentTime2() || value == 4) + spell->status += value; // use set/remove spell status now +} +void Player::AddSpellStatus(SpellBookEntry* spell, sint16 value, bool modify_recast, int16 recast) { + if (modify_recast) { + spell->recast = recast; + spell->recast_available = Timer::GetCurrentTime2() + (recast * 100); + } + if (modify_recast || spell->recast_available <= Timer::GetCurrentTime2() || value == 4) + spell->status = spell->status | value; +} +void Player::RemoveSpellStatus(SpellBookEntry* spell, sint16 value, bool modify_recast, int16 recast) { + if (modify_recast) { + spell->recast = recast; + spell->recast_available = Timer::GetCurrentTime2() + (recast * 100); + } + if (modify_recast || spell->recast_available <= Timer::GetCurrentTime2() || value == 4) + spell->status = spell->status & ~value; + +} +void Player::SetSpellStatus(Spell* spell, int8 status){ + MSpellsBook.lock(); + vector::iterator itr; + SpellBookEntry* spell2 = 0; + for(itr = spells.begin(); itr != spells.end(); itr++){ + spell2 = *itr; + if(spell2->spell_id == spell->GetSpellData()->id){ + spell2->status = spell2->status | status; + break; + } + } + MSpellsBook.unlock(); +} + +vector* Player::GetSpellsSaveNeeded(){ + vector* ret = 0; + vector::iterator itr; + MSpellsBook.lock(); + SpellBookEntry* spell = 0; + for(itr = spells.begin(); itr != spells.end(); itr++){ + spell = *itr; + if(spell->save_needed){ + if(!ret) + ret = new vector; + ret->push_back(spell); + } + } + MSpellsBook.unlock(); + return ret; +} + +bool Player::HasSpell(int32 spell_id, int8 tier, bool include_higher_tiers){ + bool ret = false; + vector::iterator itr; + MSpellsBook.lock(); + SpellBookEntry* spell = 0; + for(itr = spells.begin(); itr != spells.end(); itr++){ + spell = *itr; + if(spell->spell_id == spell_id && (tier == 255 || spell->tier == tier || (include_higher_tiers && spell->tier > tier))){ + ret = true; + break; + } + } + MSpellsBook.unlock(); + return ret; +} + +sint32 Player::GetFreeSpellBookSlot(int32 type){ + sint32 ret = 0; + MSpellsBook.lock(); + vector::iterator itr; + SpellBookEntry* spell = 0; + for(itr = spells.begin(); itr != spells.end(); itr++){ + spell = *itr; + if(spell->type == type && spell->slot > ret) //get last slot (add 1 to it on return) + ret = spell->slot; + } + MSpellsBook.unlock(); + return ret+1; +} + +SpellBookEntry* Player::GetSpellBookSpell(int32 spell_id){ + MSpellsBook.lock(); + vector::iterator itr; + SpellBookEntry* ret = 0; + SpellBookEntry* spell = 0; + for(itr = spells.begin(); itr != spells.end(); itr++){ + spell = *itr; + if(spell->spell_id == spell_id){ + ret = spell; + break; + } + } + MSpellsBook.unlock(); + return ret; +} + +vector Player::GetSpellBookSpellIDBySkill(int32 skill_id) { + vector ret; + + MSpellsBook.readlock(__FUNCTION__, __LINE__); + vector::iterator itr; + Spell* spell = 0; + for(itr = spells.begin(); itr != spells.end(); itr++){ + spell = master_spell_list.GetSpell((*itr)->spell_id, (*itr)->tier); + if(spell && spell->GetSpellData()->mastery_skill == skill_id) + ret.push_back(spell->GetSpellData()->id); + } + MSpellsBook.releasereadlock(__FUNCTION__, __LINE__); + + return ret; +} + + +EQ2Packet* Player::GetSpellSlotMappingPacket(int16 version){ + PacketStruct* packet = configReader.getStruct("WS_SpellSlotMapping", version); + if(packet){ + int16 count = GetSpellSlotMappingCount(); + int16 ptr = 0; + if(count > 0){ + packet->setArrayLengthByName("spell_count", count); + MSpellsBook.lock(); + for(int32 i=0;islot < 0 || spell->spell_id == 0) + continue; + packet->setArrayDataByName("spell_id", spell->spell_id, ptr); + packet->setArrayDataByName("slot_id", (int16)spell->slot, ptr); + ptr++; + } + MSpellsBook.unlock(); + EQ2Packet* ret = packet->serialize(); + safe_delete(packet); + return ret; + } + safe_delete(packet); + } + return 0; +} + +EQ2Packet* Player::GetSpellBookUpdatePacket(int16 version){ + PacketStruct* packet = configReader.getStruct("WS_UpdateSpellBook", version); + if(packet){ + Spell* spell = 0; + SpellBookEntry* spell_entry = 0; + int16 count = GetSpellPacketCount(); + int16 ptr = 0; + // Get the packet size + PacketStruct* packet2 = configReader.getStruct("SubStruct_UpdateSpellBook", version); + int32 total_bytes = packet2->GetTotalPacketSize(); + safe_delete(packet2); + + if(count > 0){ + packet->setArrayLengthByName("spell_count", count); + if(count > spell_count){ + uchar* tmp = 0; + if(spell_orig_packet){ + tmp = new uchar[count*total_bytes]; + memset(tmp, 0, total_bytes*count); + memcpy(tmp, spell_orig_packet, spell_count*total_bytes); + safe_delete_array(spell_orig_packet); + safe_delete_array(spell_xor_packet); + spell_orig_packet = tmp; + } + else{ + spell_orig_packet = new uchar[count*total_bytes]; + memset(spell_orig_packet, 0, total_bytes*count); + } + spell_xor_packet = new uchar[count*total_bytes]; + memset(spell_xor_packet, 0, count*total_bytes); + spell_count = count; + } + MSpellsBook.lock(); + for(int32 i=0;ispell_id == 0) + continue; + spell = master_spell_list.GetSpell(spell_entry->spell_id, spell_entry->tier); + if(spell){ + packet->setSubstructArrayDataByName("spells", "spell_id", spell_entry->spell_id, 0, ptr); + packet->setSubstructArrayDataByName("spells", "type", spell_entry->type, 0, ptr); + packet->setSubstructArrayDataByName("spells", "recast_available", spell_entry->recast_available, 0, ptr); + packet->setSubstructArrayDataByName("spells", "recast_time", spell_entry->recast, 0, ptr); + packet->setSubstructArrayDataByName("spells", "status", spell_entry->status, 0, ptr); + packet->setSubstructArrayDataByName("spells", "icon", (spell->GetSpellIcon()*-1)-1, 0, ptr); + packet->setSubstructArrayDataByName("spells", "icon_type", spell->GetSpellIconBackdrop(), 0, ptr); + packet->setSubstructArrayDataByName("spells", "icon2", spell->GetSpellIconHeroicOp(), 0, ptr); + packet->setSubstructArrayDataByName("spells", "unique_id", (spell_entry->tier+1)*-1, 0, ptr); + packet->setSubstructArrayDataByName("spells", "charges", 255, 0, ptr); + + // Beastlord and Channeler spell support + if (spell->GetSpellData()->savage_bar == 1) + packet->setSubstructArrayDataByName("spells", "unknown6", 32, 0, ptr); // advantages + else if (spell->GetSpellData()->savage_bar == 2) + packet->setSubstructArrayDataByName("spells", "unknown6", 64, 0, ptr); // primal + else if (spell->GetSpellData()->savage_bar == 3) { + packet->setSubstructArrayDataByName("spells", "unknown6", 6, 1, ptr); // 6 = channeler + // Slot req for channelers + // bitmask for slots 1 = slot 1, 2 = slot 2, 4 = slot 3, 8 = slot 4, 16 = slot 5, 32 = slot 6, 64 = slot 7, 128 = slot 8 + packet->setSubstructArrayDataByName("spells", "savage_bar_slot", spell->GetSpellData()->savage_bar_slot, 0, ptr); + } + + ptr++; + } + } + MSpellsBook.unlock(); + + EQ2Packet* ret = packet->serializeCountPacket(version, 0, spell_orig_packet, spell_xor_packet); + //packet->PrintPacket(); + //DumpPacket(ret); + safe_delete(packet); + return ret; + } + safe_delete(packet); + } + return 0; +} + +PlayerInfo::~PlayerInfo(){ + RemoveOldPackets(); +} + +PlayerInfo::PlayerInfo(Player* in_player){ + orig_packet = 0; + changes = 0; + pet_orig_packet = 0; + pet_changes = 0; + player = in_player; + info_struct = player->GetInfoStruct(); + strcpy(info_struct->name, player->GetName()); + info_struct->class1 = classes.GetBaseClass(player->GetAdventureClass()); + info_struct->class2 = classes.GetSecondaryBaseClass(player->GetAdventureClass()); + info_struct->class3 = player->GetAdventureClass(); + info_struct->race = player->GetRace(); + info_struct->gender = player->GetGender(); + info_struct->level = player->GetLevel(); + info_struct->tradeskill_level = player->GetTSLevel(); // JA: added 2011.07.22 to address TODO below + info_struct->tradeskill_class1 = classes.GetTSBaseClass(player->GetTradeskillClass()); + info_struct->tradeskill_class2 = classes.GetSecondaryTSBaseClass(player->GetTradeskillClass()); + info_struct->tradeskill_class3 = player->GetTradeskillClass(); + + LogWrite(MISC__TODO, 1, "TODO", "Fix info_struct.tradeskill_level = player->GetArtLevel();\n\t(%s, function: %s, line #: %i)", __FILE__, __FUNCTION__, __LINE__); + + for(int i=0;i<45;i++){ + if(i<30){ + info_struct->maintained_effects[i].spell_id = 0xFFFFFFFF; + info_struct->maintained_effects[i].icon = 0xFFFF; + } + info_struct->spell_effects[i].spell_id = 0xFFFFFFFF; + } + house_zone_id = 0; + bind_zone_id = 0; + bind_x = 0; + bind_y = 0; + bind_z = 0; + bind_heading = 0; + boat_x_offset = 0; + boat_y_offset = 0; + boat_z_offset = 0; + boat_spawn = 0; +} + +MaintainedEffects* Player::GetFreeMaintainedSpellSlot(){ + MaintainedEffects* ret = 0; + InfoStruct* info = GetInfoStruct(); + GetMaintainedMutex()->readlock(__FUNCTION__, __LINE__); + for(int i=0;imaintained_effects[i].spell_id == 0xFFFFFFFF){ + ret = &info->maintained_effects[i]; + ret->spell_id = 0; + ret->slot_pos = i; + break; + } + } + GetMaintainedMutex()->releasereadlock(__FUNCTION__, __LINE__); + return ret; +} + +MaintainedEffects* Player::GetMaintainedSpell(int32 id){ + MaintainedEffects* ret = 0; + InfoStruct* info = GetInfoStruct(); + GetMaintainedMutex()->readlock(__FUNCTION__, __LINE__); + for(int i=0;imaintained_effects[i].spell_id == id){ + ret = &info->maintained_effects[i]; + break; + } + } + GetMaintainedMutex()->releasereadlock(__FUNCTION__, __LINE__); + return ret; +} + +MaintainedEffects* Player::GetMaintainedSpellBySlot(int8 slot){ + MaintainedEffects* ret = 0; + InfoStruct* info = GetInfoStruct(); + GetMaintainedMutex()->readlock(__FUNCTION__, __LINE__); + for(int i=0;imaintained_effects[i].slot_pos == slot){ + ret = &info->maintained_effects[i]; + break; + } + } + GetMaintainedMutex()->releasereadlock(__FUNCTION__, __LINE__); + return ret; +} + +MaintainedEffects* Player::GetMaintainedSpells() { + return GetInfoStruct()->maintained_effects; +} + +SpellEffects* Player::GetFreeSpellEffectSlot(){ + SpellEffects* ret = 0; + InfoStruct* info = GetInfoStruct(); + GetSpellEffectMutex()->readlock(__FUNCTION__, __LINE__); + for(int i=0;i<45;i++){ + if(info->spell_effects[i].spell_id == 0xFFFFFFFF){ + ret = &info->spell_effects[i]; + ret->spell_id = 0; + break; + } + } + GetSpellEffectMutex()->releasereadlock(__FUNCTION__, __LINE__); + return ret; +} + +SpellEffects* Player::GetSpellEffects() { + return GetInfoStruct()->spell_effects; +} + +void Player::ClearEverything(){ + player_removed_spawns.clear(); + player_spawn_map.clear(); + player_spawn_index_map.clear(); + player_spawn_id_map.clear(); + player_spawn_reverse_id_map.clear(); + map*>::iterator itr; + m_playerSpawnQuestsRequired.writelock(__FUNCTION__, __LINE__); + for (itr = player_spawn_quests_required.begin(); itr != player_spawn_quests_required.end(); itr++){ + safe_delete(itr->second); + } + player_spawn_quests_required.clear(); + m_playerSpawnQuestsRequired.releasewritelock(__FUNCTION__, __LINE__); + + m_playerSpawnHistoryRequired.writelock(__FUNCTION__, __LINE__); + for (itr = player_spawn_history_required.begin(); itr != player_spawn_history_required.end(); itr++){ + safe_delete(itr->second); + } + player_spawn_history_required.clear(); + m_playerSpawnHistoryRequired.releasewritelock(__FUNCTION__, __LINE__); + + vis_mutex.writelock(__FUNCTION__, __LINE__); + spawn_vis_packet_list.clear(); + vis_mutex.releasewritelock(__FUNCTION__, __LINE__); + + info_mutex.writelock(__FUNCTION__, __LINE__); + spawn_info_packet_list.clear(); + info_mutex.releasewritelock(__FUNCTION__, __LINE__); + + pos_mutex.writelock(__FUNCTION__, __LINE__); + spawn_pos_packet_list.clear(); + pos_mutex.releasewritelock(__FUNCTION__, __LINE__); +} + +bool Player::IsResurrecting(){ + return resurrecting; +} +void Player::SetResurrecting(bool val){ + resurrecting = val; +} +void Player::AddMaintainedSpell(LuaSpell* luaspell){ + if(!luaspell) + return; + + Spell* spell = luaspell->spell; + MaintainedEffects* effect = GetFreeMaintainedSpellSlot(); + int32 target_type = 0; + Spawn* spawn = 0; + + if(effect){ + GetMaintainedMutex()->writelock(__FUNCTION__, __LINE__); + strcpy(effect->name, spell->GetSpellData()->name.data.c_str()); + effect->target = luaspell->initial_target; + + spawn = luaspell->caster->GetZone()->GetSpawnByID(luaspell->initial_target); + if (spawn){ + if (spawn == this) + target_type = 0; + else if (GetPet() == spawn || GetCharmedPet() == spawn) + target_type = 1; + else + target_type = 2; + } + effect->target_type = target_type; + + effect->spell = luaspell; + luaspell->slot_pos = effect->slot_pos; + effect->spell_id = spell->GetSpellData()->id; + LogWrite(PLAYER__DEBUG, 5, "Player", "AddMaintainedSpell Spell ID: %u", spell->GetSpellData()->id); + effect->icon = spell->GetSpellData()->icon; + effect->icon_backdrop = spell->GetSpellData()->icon_backdrop; + effect->conc_used = spell->GetSpellData()->req_concentration / 256; + effect->total_time = spell->GetSpellDuration()/10; + effect->tier = spell->GetSpellData()->tier; + if (spell->GetSpellData()->duration_until_cancel) + effect->expire_timestamp = 0xFFFFFFFF; + else + effect->expire_timestamp = Timer::GetCurrentTime2() + (spell->GetSpellDuration()*100); + GetMaintainedMutex()->releasewritelock(__FUNCTION__, __LINE__); + charsheet_changed = true; + } +} +void Player::AddSpellEffect(LuaSpell* luaspell){ + if(!luaspell || !luaspell->caster) + return; + + Spell* spell = luaspell->spell; + SpellEffects* old_effect = GetSpellEffect(spell->GetSpellID(), luaspell->caster); + SpellEffects* effect = 0; + if (old_effect){ + GetZone()->RemoveTargetFromSpell(old_effect->spell, this); + RemoveSpellEffect(old_effect->spell); + } + effect = GetFreeSpellEffectSlot(); + + if(effect){ + GetSpellEffectMutex()->writelock(__FUNCTION__, __LINE__); + effect->spell = luaspell; + effect->spell_id = spell->GetSpellData()->id; + effect->caster = luaspell->caster; + effect->total_time = spell->GetSpellDuration()/10; + if (spell->GetSpellData()->duration_until_cancel) + effect->expire_timestamp = 0xFFFFFFFF; + else + effect->expire_timestamp = Timer::GetCurrentTime2() + (spell->GetSpellDuration()*100); + effect->icon = spell->GetSpellData()->icon; + effect->icon_backdrop = spell->GetSpellData()->icon_backdrop; + effect->tier = spell->GetSpellTier(); + GetSpellEffectMutex()->releasewritelock(__FUNCTION__, __LINE__); + charsheet_changed = true; + } +} + +void Player::RemoveMaintainedSpell(LuaSpell* luaspell){ + if(!luaspell) + return; + + bool found = false; + Client* client = GetZone()->GetClientBySpawn(this); + LuaSpell* old_spell = 0; + LuaSpell* current_spell = 0; + GetMaintainedMutex()->writelock(__FUNCTION__, __LINE__); + for(int i=0;i<30;i++){ + // If we already found the spell then we are bumping all other up one so there are no gaps in the ui + // This check needs to be first so found can never be true on the first iteration (i = 0) + if (found) { + old_spell = GetInfoStruct()->maintained_effects[i - 1].spell; + current_spell = GetInfoStruct()->maintained_effects[i].spell; + + //Update the maintained window uses_remaining and damage_remaining values + if (current_spell && current_spell->num_triggers > 0) + ClientPacketFunctions::SendMaintainedExamineUpdate(client, i - 1, current_spell->num_triggers, 0); + else if (current_spell && current_spell->damage_remaining > 0) + ClientPacketFunctions::SendMaintainedExamineUpdate(client, i - 1, current_spell->damage_remaining, 1); + else if (old_spell && old_spell->had_triggers) + ClientPacketFunctions::SendMaintainedExamineUpdate(client, i - 1, 0, 0); + else if (old_spell && old_spell->had_dmg_remaining) + ClientPacketFunctions::SendMaintainedExamineUpdate(client, i - 1, 0, 1); + + + GetInfoStruct()->maintained_effects[i].slot_pos = i - 1; + GetInfoStruct()->maintained_effects[i - 1] = GetInfoStruct()->maintained_effects[i]; + if (current_spell) + current_spell->slot_pos = i - 1; + } + // Compare spells, if we found a match set the found flag + if(GetInfoStruct()->maintained_effects[i].spell == luaspell) + found = true; + } + // if we found the spell in the array then we need to flag the char sheet as changed and set the last element to empty + if (found) { + memset(&GetInfoStruct()->maintained_effects[29], 0, sizeof(MaintainedEffects)); + GetInfoStruct()->maintained_effects[29].spell_id = 0xFFFFFFFF; + GetInfoStruct()->maintained_effects[29].icon = 0xFFFF; + charsheet_changed = true; + } + GetMaintainedMutex()->releasewritelock(__FUNCTION__, __LINE__); +} + +void Player::RemoveSpellEffect(LuaSpell* spell){ + bool found = false; + GetSpellEffectMutex()->writelock(__FUNCTION__, __LINE__); + for(int i=0;i<45;i++){ + if (found) { + GetInfoStruct()->spell_effects[i-1] = GetInfoStruct()->spell_effects[i]; + } + if(GetInfoStruct()->spell_effects[i].spell == spell) + found = true; + } + if (found) { + memset(&GetInfoStruct()->spell_effects[44], 0, sizeof(SpellEffects)); + GetInfoStruct()->spell_effects[44].spell_id = 0xFFFFFFFF; + changed = true; + info_changed = true; + AddChangedZoneSpawn(); + charsheet_changed = true; + } + GetSpellEffectMutex()->releasewritelock(__FUNCTION__, __LINE__); +} + +bool Player::HasActiveMaintainedSpell(Spell* spell, Spawn* target){ + GetMaintainedMutex()->readlock(__FUNCTION__, __LINE__); + for(int i=0;i<30;i++){ + if (GetInfoStruct()->maintained_effects[i].spell_id == spell->GetSpellData()->id){ + GetMaintainedMutex()->releasereadlock(__FUNCTION__, __LINE__); + return true; + } + } + GetMaintainedMutex()->releasereadlock(__FUNCTION__, __LINE__); + return false; +} + +bool Player::HasActiveSpellEffect(Spell* spell, Spawn* target){ + return false; +} + +void Player::PrepareIncomingMovementPacket(int32 len,uchar* data,int16 version) +{ + LogWrite(PLAYER__DEBUG, 7, "Player", "Enter: %s", __FUNCTION__); // trace + + // XML structs may be to slow to use in this portion of the code as a single + // client sends a LOT of these packets when they are moving. I have commented + // out all the code for xml structs, to switch to it just uncomment + // the code and comment the 2 if/else if/else blocks, both have a comment + // above them to let you know wich ones they are. + + //PacketStruct* update = configReader.getStruct("WS_PlayerPosUpdate", version); + int16 total_bytes; // = update->GetTotalPacketSize(); + + // Comment out this if/else if/else block if you switch to xml structs + if (version >= 1144) + total_bytes = sizeof(Player_Update1144); + else if (version >= 1096) + total_bytes = sizeof(Player_Update1096); + else + total_bytes = sizeof(Player_Update); + + + if (!movement_packet) + movement_packet = new uchar[total_bytes]; + else if (!old_movement_packet) + old_movement_packet = new uchar[total_bytes]; + if (movement_packet && old_movement_packet) + memcpy(old_movement_packet, movement_packet, total_bytes); + + Unpack(len, data, movement_packet, total_bytes); + + if(!movement_packet || !old_movement_packet) + return; + + Decode(movement_packet, old_movement_packet, total_bytes); + + //update->LoadPacketData(movement_packet, total_bytes); + + int32 activity; // = update->getType_int32_ByName("activity"); + int32 grid_id; // = update->getType_int32_ByName("grid_location"); + float direction1; // = update->getType_float_ByName("direction1"); + float direction2; // = update->getType_float_ByName("direction2");; + float speed; // = update->getType_float_ByName("speed");; + float side_speed; + float x; // = update->getType_float_ByName("x");; + float y; // = update->getType_float_ByName("y");; + float z; // = update->getType_float_ByName("z");; + float x_speed; + float y_speed; + float z_speed; + + // comment out this if/else if/else block if you use xml structs + if (version >= 1144) { + Player_Update1144* update = (Player_Update1144*)movement_packet; + activity = update->activity; + grid_id = update->grid_location; + direction1 = update->direction1; + direction2 = update->direction2; + speed = update->speed; + side_speed = update->side_speed; + x = update->x; + y = update->y; + z = update->z; + x_speed = update->speed_x; + y_speed = update->speed_y; + z_speed = update->speed_z; + + SetPitch(180 + update->pitch); + } + else if (version >= 1096) { + Player_Update1096* update = (Player_Update1096*)movement_packet; + activity = update->activity; + grid_id = update->grid_location; + direction1 = update->direction1; + direction2 = update->direction2; + speed = update->speed; + side_speed = update->side_speed; + x = update->x; + y = update->y; + z = update->z; + x_speed = update->speed_x; + y_speed = update->speed_y; + z_speed = update->speed_z; + + SetPitch(180 + update->pitch); + } + else { + Player_Update* update = (Player_Update*)movement_packet; + activity = update->activity; + grid_id = update->grid_location; + direction1 = update->direction1; + direction2 = update->direction2; + speed = update->speed; + side_speed = update->side_speed; + x = update->x; + y = update->y; + z = update->z; + x_speed = update->speed_x; + y_speed = update->speed_y; + z_speed = update->speed_z; + + SetPitch(180 + update->pitch); + } + + SetHeading((sint16)(direction1 * 64), (sint16)(direction2 * 64)); + if(activity != last_movement_activity) { + if(GetZone() && GetZone()->GetDrowningVictim(this) && (activity == UPDATE_ACTIVITY_RUNNING || activity == UPDATE_ACTIVITY_IN_WATER_ABOVE)) // not drowning anymore + GetZone()->RemoveDrowningVictim(this); + + if((activity == UPDATE_ACTIVITY_DROWNING || activity == UPDATE_ACTIVITY_DROWNING2) && GetZone() && !GetInvulnerable()) //drowning + GetZone()->AddDrowningVictim(this); + + if (activity == UPDATE_ACTIVITY_JUMPING || activity == UPDATE_ACTIVITY_FALLING) + SetInitialState(1024); + else if (GetInitialState() == 1024) + SetInitialState(16512); + + last_movement_activity = activity; + } + + //Player is riding a lift, update lift XYZ offsets and the lift's spawn pointer + if (activity & UPDATE_ACTIVITY_RIDING_BOAT) { + Spawn* boat = 0; + + float boat_x = x; + float boat_y = y; + float boat_z = z; + + if (GetBoatSpawn() == 0 && GetZone()) { + boat = GetZone()->GetClosestTransportSpawn(GetX(), GetY(), GetZ()); + SetBoatSpawn(boat); + } + + if (boat || (GetBoatSpawn() && GetZone())) { + if (!boat) + boat = GetZone()->GetSpawnByID(GetBoatSpawn()); + + if (boat && boat->IsWidget() && ((Widget*)boat)->GetMultiFloorLift()) { + boat_x -= boat->GetX(); + boat_y -= boat->GetY(); + boat_z -= boat->GetZ(); + + //appearance.pos.grid_id = grid_id; + } + } + + SetBoatX(boat_x); + SetBoatY(boat_y); + SetBoatZ(boat_z); + pos_packet_speed = speed; + grid_id = appearance.pos.grid_id; + } + else if(GetBoatSpawn() > 0) + SetBoatSpawn(0); + + if(!IsResurrecting() && !GetBoatSpawn()) + { + if (!IsRooted() && !IsMezzedOrStunned()) { + SetX(x); + SetY(y); + SetZ(z); + SetSpeedX(x_speed); + SetSpeedY(y_speed); + SetSpeedZ(z_speed); + SetSideSpeed(side_speed); + pos_packet_speed = speed; + } + else { + SetSpeedX(0); + SetSpeedY(0); + SetSpeedZ(0); + SetSideSpeed(0); + pos_packet_speed = 0; + } + } + + if(appearance.pos.grid_id != grid_id) + { + LogWrite(PLAYER__DEBUG, 0, "Player", "%s left grid %u and entered grid %u", appearance.name, appearance.pos.grid_id, grid_id); + const char* zone_script = world.GetZoneScript(GetZone()->GetZoneID()); + + if (zone_script && lua_interface) + { + lua_interface->RunZoneScript(zone_script, "enter_location", GetZone(), this, grid_id); + lua_interface->RunZoneScript(zone_script, "leave_location", GetZone(), this, appearance.pos.grid_id); + } + + appearance.pos.grid_id = grid_id; + } + if (activity == UPDATE_ACTIVITY_IN_WATER_ABOVE || activity == UPDATE_ACTIVITY_IN_WATER_BELOW) { + if (MakeRandomFloat(0, 100) < 25) + GetSkillByName("Swimming", true); + } + // don't have to uncomment the print packet but you MUST uncomment the safe_delete() for xml structs + //update->PrintPacket(); + //safe_delete(update); + + LogWrite(PLAYER__DEBUG, 7, "Player", "Exit: %s", __FUNCTION__); // trace +} + +int16 Player::GetLastMovementActivity(){ + return last_movement_activity; +} + +void Player::AddSpawnInfoPacketForXOR(int32 spawn_id, uchar* packet, int16 packet_size){ + spawn_info_packet_list[spawn_id] = string((char*)packet, packet_size); +} + +void Player::AddSpawnPosPacketForXOR(int32 spawn_id, uchar* packet, int16 packet_size){ + spawn_pos_packet_list[spawn_id] = string((char*)packet, packet_size); +} + +uchar* Player::GetSpawnPosPacketForXOR(int32 spawn_id){ + uchar* ret = 0; + if(spawn_pos_packet_list.count(spawn_id) == 1) + ret = (uchar*)spawn_pos_packet_list[spawn_id].c_str(); + return ret; +} +uchar* Player::GetSpawnInfoPacketForXOR(int32 spawn_id){ + uchar* ret = 0; + if(spawn_info_packet_list.count(spawn_id) == 1) + ret = (uchar*)spawn_info_packet_list[spawn_id].c_str(); + return ret; +} +void Player::AddSpawnVisPacketForXOR(int32 spawn_id, uchar* packet, int16 packet_size){ + spawn_vis_packet_list[spawn_id] = string((char*)packet, packet_size); +} + +uchar* Player::GetSpawnVisPacketForXOR(int32 spawn_id){ + uchar* ret = 0; + if(spawn_vis_packet_list.count(spawn_id) == 1) + ret = (uchar*)spawn_vis_packet_list[spawn_id].c_str(); + return ret; +} + +uchar* Player::GetTempInfoPacketForXOR(){ + return spawn_tmp_info_xor_packet; +} + +uchar* Player::GetTempVisPacketForXOR(){ + return spawn_tmp_vis_xor_packet; +} + +uchar* Player::GetTempPosPacketForXOR(){ + return spawn_tmp_pos_xor_packet; +} + +uchar* Player::SetTempInfoPacketForXOR(int16 size){ + spawn_tmp_info_xor_packet = new uchar[size]; + return spawn_tmp_info_xor_packet; +} + +uchar* Player::SetTempVisPacketForXOR(int16 size){ + spawn_tmp_vis_xor_packet = new uchar[size]; + return spawn_tmp_vis_xor_packet; +} + +uchar* Player::SetTempPosPacketForXOR(int16 size){ + spawn_tmp_pos_xor_packet = new uchar[size]; + return spawn_tmp_pos_xor_packet; +} + +bool Player::CheckPlayerInfo(){ + return info != 0; +} + +bool Player::NeedsSpawnResent(Spawn* spawn){ + return WasSentSpawn(spawn->GetID()) && WasSpawnRemoved(spawn); +} + +bool Player::WasSentSpawn(int32 spawn_id){ + bool ret; + info_mutex.readlock(__FUNCTION__, __LINE__); + ret = spawn_info_packet_list.count(spawn_id) == 1; + info_mutex.releasereadlock(__FUNCTION__, __LINE__); + return ret; +} + +PlayerSkillList* Player::GetSkills(){ + return &skill_list; +} + +void Player::InCombat(bool val, bool range) { + if (val) + GetInfoStruct()->flags |= (1 << (range?CF_RANGED_AUTO_ATTACK:CF_AUTO_ATTACK)); + else + GetInfoStruct()->flags &= ~(1 << (range?CF_RANGED_AUTO_ATTACK:CF_AUTO_ATTACK)); + + in_combat = val; + if(in_combat) + AddIconValue(64); + else + RemoveIconValue(64); + + charsheet_changed = true; +} + +void Player::SetCharSheetChanged(bool val){ + charsheet_changed = val; +} + +bool Player::GetCharSheetChanged(){ + return charsheet_changed; +} + +bool Player::AdventureXPEnabled(){ + return (GetInfoStruct()->flags & (1 << CF_COMBAT_EXPERIENCE_ENABLED)); +} + +bool Player::TradeskillXPEnabled() { + // TODO: need to identify the flag to togle tradeskill xp + return true; +} + +void Player::set_character_flag(int flag){ + LogWrite(PLAYER__DEBUG, 0, "Player", "Flag: %u", flag); + LogWrite(PLAYER__DEBUG, 0, "Player", "Flags before: %u, Flags2: %u", GetInfoStruct()->flags, GetInfoStruct()->flags2); + + if (flag > CF_MAXIMUM_FLAG) return; + if (flag < 32) GetInfoStruct()->flags |= (1 << flag); + else GetInfoStruct()->flags2 |= (1 << (flag - 32)); + charsheet_changed = true; + info_changed = true; + + LogWrite(PLAYER__DEBUG, 0, "Player", "Flags after: %u, Flags2: %u", GetInfoStruct()->flags, GetInfoStruct()->flags2); +} + +void Player::reset_character_flag(int flag){ + LogWrite(PLAYER__DEBUG, 0, "Player", "Flag: %u", flag); + LogWrite(PLAYER__DEBUG, 0, "Player", "Flags before: %u, Flags2: %u", GetInfoStruct()->flags, GetInfoStruct()->flags2); + + if (flag > CF_MAXIMUM_FLAG) return; + if (flag < 32) GetInfoStruct()->flags &= ~(1 << flag); + else GetInfoStruct()->flags2 &= ~(1 << (flag - 32)); + charsheet_changed = true; + info_changed = true; + + LogWrite(PLAYER__DEBUG, 0, "Player", "Flags after: %u, Flags2: %u", GetInfoStruct()->flags, GetInfoStruct()->flags2); +} + +void Player::toggle_character_flag(int flag){ + LogWrite(PLAYER__DEBUG, 0, "Player", "Flag: %u", flag); + LogWrite(PLAYER__DEBUG, 0, "Player", "Flags before: %u, Flags2: %u", GetInfoStruct()->flags, GetInfoStruct()->flags2); + + if (flag > CF_MAXIMUM_FLAG) return; + if (flag < 32) GetInfoStruct()->flags ^= (1 << flag); + else GetInfoStruct()->flags2 ^= (1 << (flag - 32)); + charsheet_changed = true; + info_changed = true; + + LogWrite(PLAYER__DEBUG, 0, "Player", "Flags after: %u, Flags2: %u", GetInfoStruct()->flags, GetInfoStruct()->flags2); +} + +bool Player::get_character_flag(int flag){ + bool ret = false; + + if (flag > CF_MAXIMUM_FLAG){ + LogWrite(PLAYER__DEBUG, 0, "Player", "Player::get_character_flag error: attempted to check flag %i", flag); + return ret; + } + if (flag < 32) ret = ((GetInfoStruct()->flags) >> flag & 1); + else ret = ((GetInfoStruct()->flags2) >> (flag - 32) & 1); + + return ret; +} + +float Player::GetXPVitality(){ + return GetInfoStruct()->xp_vitality; +} + +float Player::GetTSXPVitality() { + return GetInfoStruct()->tradeskill_xp_vitality; +} + +bool Player::DoubleXPEnabled(){ + return GetInfoStruct()->xp_vitality > 0; +} + +void Player::SetCharacterID(int32 new_id){ + char_id = new_id; +} + +int32 Player::GetCharacterID(){ + return char_id; +} + +float Player::CalculateXP(Spawn* victim){ + if(AdventureXPEnabled() == false || !victim) + return 0; + float multiplier = 0; + + float zone_xp_modifier = 1; // let's be safe!! + if( GetZone()->GetXPModifier() != 0 ) { + zone_xp_modifier = GetZone()->GetXPModifier(); + LogWrite(PLAYER__DEBUG, 5, "XP", "Zone XP Modifier = %.2f", zone_xp_modifier); + } + + switch(GetArrowColor(victim->GetLevel())){ + case ARROW_COLOR_GREEN: + multiplier = 3.25; + LogWrite(PLAYER__DEBUG, 5, "XP", "Green Arrow Multiplier = %.2f", multiplier); + break; + case ARROW_COLOR_BLUE: + multiplier = 3.5; + LogWrite(PLAYER__DEBUG, 5, "XP", "Blue Arrow Multiplier = %.2f", multiplier); + break; + case ARROW_COLOR_WHITE: + multiplier = 4; + LogWrite(PLAYER__DEBUG, 5, "XP", "White Arrow Multiplier = %.2f", multiplier); + break; + case ARROW_COLOR_YELLOW: + multiplier = 4.25; + LogWrite(PLAYER__DEBUG, 5, "XP", "Yellow Arrow Multiplier = %.2f", multiplier); + break; + case ARROW_COLOR_ORANGE: + multiplier = 4.5; + LogWrite(PLAYER__DEBUG, 5, "XP", "Orange Arrow Multiplier = %.2f", multiplier); + break; + case ARROW_COLOR_RED: + multiplier = 6; + LogWrite(PLAYER__DEBUG, 5, "XP", "Red Arrow Multiplier = %.2f", multiplier); + break; + } + float total = multiplier * 8; + LogWrite(PLAYER__DEBUG, 5, "XP", "Multiplier * 8 = %.2f", total); + + if(victim->GetEncounterLevel() > 6) { // no need to multiply by 1 if this is a normal mob + total *= (victim->GetEncounterLevel() - 5); + LogWrite(PLAYER__DEBUG, 5, "XP", "Encounter > 6, total = %.2f", total); + } + else if(victim->GetEncounterLevel() <= 5) { + total /= (7 - victim->GetEncounterLevel()); //1 down mobs are worth half credit, 2 down worth .25, etc + LogWrite(PLAYER__DEBUG, 5, "XP", "Encounter <= 5, total = %.2f", total); + } + + if(victim->GetHeroic() > 1) { + total *= victim->GetHeroic(); + LogWrite(PLAYER__DEBUG, 5, "XP", "Heroic, total = %.2f", total); + } + if(DoubleXPEnabled()) { + LogWrite(PLAYER__DEBUG, 5, "XP", "Calculating Double XP!"); + + float percent = (((float)(total))/GetNeededXP()) *100; + LogWrite(PLAYER__DEBUG, 5, "XP", "Percent of total / XP Needed * 100, percent = %.2f", percent); + + if(GetXPVitality() >= percent) { + GetInfoStruct()->xp_vitality -= percent; + total *= 2; + LogWrite(PLAYER__DEBUG, 5, "XP", "Vitality >= Percent, total = %.2f", total); + } + else { + total += ((GetXPVitality() / percent) *2)*total; + GetInfoStruct()->xp_vitality = 0; + LogWrite(PLAYER__DEBUG, 5, "XP", "Vitality < Percent, total = %.2f", total); + } + } + LogWrite(PLAYER__DEBUG, 5, "XP", "Final total = %.2f", (total * world.GetXPRate() * zone_xp_modifier)); + return total * world.GetXPRate() * zone_xp_modifier; +} + +float Player::CalculateTSXP(int8 level){ + if(TradeskillXPEnabled() == false) + return 0; + float multiplier = 0; + + float zone_xp_modifier = 1; // let's be safe!! + if( GetZone()->GetXPModifier() != 0 ) { + zone_xp_modifier = GetZone()->GetXPModifier(); + LogWrite(PLAYER__DEBUG, 5, "XP", "Zone XP Modifier = %.2f", zone_xp_modifier); + } + + sint16 diff = level - GetTSLevel(); + if(GetTSLevel() < 10) + diff *= 3; + else if(GetTSLevel() <= 20) + diff *= 2; + if(diff >= 9) + multiplier = 6; + else if(diff >= 5) + multiplier = 4.5; + else if(diff >= 1) + multiplier = 4.25; + else if(diff == 0) + multiplier = 4; + else if(diff <= -11) + multiplier = 0; + else if(diff <= -6) + multiplier = 3.25; + else //if(diff < 0) + multiplier = 3.5; + + + float total = multiplier * 8; + LogWrite(PLAYER__DEBUG, 5, "XP", "Multiplier * 8 = %.2f", total); + + if(DoubleXPEnabled()) { + LogWrite(PLAYER__DEBUG, 5, "XP", "Calculating Double XP!"); + + float percent = (((float)(total))/GetNeededTSXP()) *100; + LogWrite(PLAYER__DEBUG, 5, "XP", "Percent of total / XP Needed * 100, percent = %.2f", percent); + + if(GetTSXPVitality() >= percent) { + GetInfoStruct()->tradeskill_xp_vitality -= percent; + total *= 2; + LogWrite(PLAYER__DEBUG, 5, "XP", "Vitality >= Percent, total = %.2f", total); + } + else { + total += ((GetTSXPVitality() / percent) *2)*total; + GetInfoStruct()->tradeskill_xp_vitality = 0; + LogWrite(PLAYER__DEBUG, 5, "XP", "Vitality < Percent, total = %.2f", total); + } + } + LogWrite(PLAYER__DEBUG, 5, "XP", "Final total = %.2f", (total * world.GetXPRate() * zone_xp_modifier)); + return total * world.GetXPRate() * zone_xp_modifier; +} + +void Player::SetNeededXP(int32 val){ + GetInfoStruct()->xp_needed = val; +} + +void Player::SetNeededXP(){ + //GetInfoStruct()->xp_needed = GetLevel() * 100; + // Get xp needed to get to the next level + int16 level = GetLevel() + 1; + // If next level is beyond what we have in the map multiply the last value we have by how many levels we are over plus one + if (level > 95) + SetNeededXP(m_levelXPReq[95] * ((level - 95) + 1)); + else + SetNeededXP(m_levelXPReq[level]); +} + +void Player::SetXP(int32 val){ + GetInfoStruct()->xp = val; +} + +void Player::SetNeededTSXP(int32 val) { + GetInfoStruct()->ts_xp_needed = val; +} + +void Player::SetNeededTSXP() { + GetInfoStruct()->ts_xp_needed = GetTSLevel() * 100; +} + +void Player::SetTSXP(int32 val) { + GetInfoStruct()->ts_xp = val; +} + +int32 Player::GetXPDebt(){ + return GetInfoStruct()->xp_debt; +} + +int32 Player::GetNeededXP(){ + return GetInfoStruct()->xp_needed; +} + +int32 Player::GetXP(){ + return GetInfoStruct()->xp; +} + +int32 Player::GetNeededTSXP() { + return GetInfoStruct()->ts_xp_needed; +} + +int32 Player::GetTSXP() { + return GetInfoStruct()->ts_xp; +} + +bool Player::AddXP(int32 xp_amount){ + float current_xp_percent = ((float)GetXP()/(float)GetNeededXP())*100; + float miniding_min_percent = ((int)(current_xp_percent/10)+1)*10; + while((xp_amount + GetXP()) >= GetNeededXP()){ + if (!CheckLevelStatus(GetLevel() + 1)) { + GetZone()->GetClientBySpawn(this)->SimpleMessage(CHANNEL_COLOR_RED, "You do not have the required status to level up anymore!"); + return false; + } + xp_amount -= GetNeededXP() - GetXP(); + SetLevel(GetLevel() + 1); + SetXP(0); + SetNeededXP(); + } + SetXP(GetXP() + xp_amount); + GetPlayerInfo()->CalculateXPPercentages(); + current_xp_percent = ((float)GetXP()/(float)GetNeededXP())*100; + if(current_xp_percent >= miniding_min_percent){ + SetHP(GetTotalHP()); + SetPower(GetTotalPower()); + } + return true; +} + +bool Player::AddTSXP(int32 xp_amount){ + float current_xp_percent = ((float)GetTSXP()/(float)GetNeededTSXP())*100; + float miniding_min_percent = ((int)(current_xp_percent/10)+1)*10; + while((xp_amount + GetTSXP()) >= GetNeededTSXP()){ + if (!CheckLevelStatus(GetTSLevel() + 1)) { + GetZone()->GetClientBySpawn(this)->SimpleMessage(CHANNEL_COLOR_RED, "You do not have the required status to level up anymore!"); + return false; + } + xp_amount -= GetNeededTSXP() - GetTSXP(); + SetTSLevel(GetTSLevel() + 1); + SetTSXP(0); + SetNeededTSXP(); + } + SetTSXP(GetTSXP() + xp_amount); + GetPlayerInfo()->CalculateXPPercentages(); + current_xp_percent = ((float)GetTSXP()/(float)GetNeededTSXP())*100; + if(current_xp_percent >= miniding_min_percent){ + SetHP(GetTotalHP()); + SetPower(GetTotalPower()); + } + + if (GetTradeskillClass() == 0){ + SetTradeskillClass(1); + GetInfoStruct()->tradeskill_class1 = 1; + GetInfoStruct()->tradeskill_class2 = 1; + GetInfoStruct()->tradeskill_class3 = 1; + } + return true; +} + +void Player::CalculateLocation(){ + if(GetSpeed() > 0 ){ + if(GetHeading() >= 270 && GetHeading() <= 360){ + SetX(GetX() + (GetSpeed()*.5)*((360-GetHeading())/90)); + SetZ(GetZ() - (GetSpeed()*.5)*((GetHeading()-270)/90)); + } + else if(GetHeading() >= 180 && GetHeading() < 270){ + SetX(GetX() + (GetSpeed()*.5)*((GetHeading()-180)/90)); + SetZ(GetZ() + (GetSpeed()*.5)*((270-GetHeading())/90)); + } + else if(GetHeading() >= 90 && GetHeading() < 180){ + SetX(GetX() - (GetSpeed()*.5)*((180-GetHeading())/90)); + SetZ(GetZ() + (GetSpeed()*.5)*((GetHeading()-90)/90)); + } + else if(GetHeading() >= 0 && GetHeading() < 90){ + SetX(GetX() - (GetSpeed()*.5)*(GetHeading()/90)); + SetZ(GetZ() - (GetSpeed()*.5)*((90-GetHeading())/90)); + } + } +} + +Spawn* Player::GetSpawnByIndex(int16 index){ + if(player_spawn_map.count(index) > 0) + return player_spawn_map[index]; + else + return 0; +} + +int16 Player::GetIndexForSpawn(Spawn* spawn){ + if(player_spawn_index_map.count(spawn) > 0) + return player_spawn_index_map[spawn]; + else + return 0; +} + +bool Player::WasSpawnRemoved(Spawn* spawn){ + if(player_removed_spawns.count(spawn) > 0) + return true; + else + return false; +} + +void Player::RemoveSpawn(Spawn* spawn) +{ + LogWrite(PLAYER__DEBUG, 3, "Player", "Remove Spawn '%s' (%u)", spawn->GetName(), spawn->GetID()); + player_removed_spawns[spawn] = 1; + + int32 id = spawn->GetID(); + info_mutex.writelock(__FUNCTION__, __LINE__); + spawn_info_packet_list.erase(id); + info_mutex.releasewritelock(__FUNCTION__, __LINE__); + + pos_mutex.writelock(__FUNCTION__, __LINE__); + spawn_pos_packet_list.erase(id); + pos_mutex.releasewritelock(__FUNCTION__, __LINE__); + + vis_mutex.writelock(__FUNCTION__, __LINE__); + spawn_vis_packet_list.erase(id); + vis_mutex.releasewritelock(__FUNCTION__, __LINE__); +} + +vector Player::GetQuestIDs(){ + vector ret; + map::iterator itr; + MPlayerQuests.lock(); + for(itr = player_quests.begin(); itr != player_quests.end(); itr++){ + if(itr->second) + ret.push_back(itr->second->GetQuestID()); + } + MPlayerQuests.unlock(); + return ret; +} + +vector* Player::CheckQuestsItemUpdate(Item* item){ + vector* quest_updates = 0; + map::iterator itr; + MPlayerQuests.lock(); + for(itr = player_quests.begin(); itr != player_quests.end(); itr++){ + if(itr->second && itr->second->CheckQuestItemUpdate(item->details.item_id, item->details.count)){ + if(!quest_updates) + quest_updates = new vector(); + quest_updates->push_back(itr->second); + } + } + MPlayerQuests.unlock(); + return quest_updates; +} + +void Player::CheckQuestsCraftUpdate(Item* item, int32 qty){ + map::iterator itr; + vector* update_list = new vector; + MPlayerQuests.lock(); + for(itr = player_quests.begin(); itr != player_quests.end(); itr++){ + if(itr->second){ + if(item && qty > 0){ + if(itr->second->CheckQuestCraftUpdate(item->details.item_id, qty)){ + update_list->push_back(itr->second); + } + } + } + } + MPlayerQuests.unlock(); + if(update_list && update_list->size() > 0){ + Client* client = GetZone()->GetClientBySpawn(this); + if(client){ + for(int8 i=0;isize(); i++){ + client->SendQuestUpdate(update_list->at(i)); + client->SendQuestFailure(update_list->at(i)); + } + } + } + update_list->clear(); + safe_delete(update_list); +} + +void Player::CheckQuestsHarvestUpdate(Item* item, int32 qty){ + map::iterator itr; + vector* update_list = new vector; + MPlayerQuests.lock(); + for(itr = player_quests.begin(); itr != player_quests.end(); itr++){ + if(itr->second){ + if(item && qty > 0){ + if(itr->second->CheckQuestHarvestUpdate(item->details.item_id, qty)){ + update_list->push_back(itr->second); + } + } + } + } + MPlayerQuests.unlock(); + if(update_list && update_list->size() > 0){ + Client* client = GetZone()->GetClientBySpawn(this); + if(client){ + for(int8 i=0;isize(); i++){ + client->SendQuestUpdate(update_list->at(i)); + client->SendQuestFailure(update_list->at(i)); + } + } + } + update_list->clear(); + safe_delete(update_list); +} + +vector* Player::CheckQuestsSpellUpdate(Spell* spell) { + vector* quest_updates = 0; + map::iterator itr; + MPlayerQuests.lock(); + for (itr = player_quests.begin(); itr != player_quests.end(); itr++){ + if (itr->second && itr->second->CheckQuestSpellUpdate(spell)) { + if (!quest_updates) + quest_updates = new vector(); + quest_updates->push_back(itr->second); + } + } + MPlayerQuests.unlock(); + return quest_updates; +} + +PacketStruct* Player::GetQuestJournalPacket(bool all_quests, int16 version, int32 crc, int32 current_quest_id){ + PacketStruct* packet = configReader.getStruct("WS_QuestJournalUpdate", version); + Quest* quest = 0; + if(packet){ + int16 total_quests_num = 0; + int16 total_completed_quests = 0; + map total_quests = player_quests; + if(all_quests && completed_quests.size() > 0) + total_quests.insert(completed_quests.begin(), completed_quests.end()); + MPlayerQuests.lock(); + if(total_quests.size() > 0){ + map quest_types; + map::iterator itr; + int16 zone_id = 0; + for(itr = total_quests.begin(); itr != total_quests.end(); itr++){ + if(itr->first && itr->second){ + if(current_quest_id == 0 && itr->second->GetTurnedIn() == false) + current_quest_id = itr->first; + if(itr->second->GetTurnedIn()) + total_completed_quests++; + if(itr->second->GetType()){ + if(quest_types.count(itr->second->GetType()) == 0){ + quest_types[itr->second->GetType()] = zone_id; + zone_id++; + } + } + if(itr->second->GetZone()){ + if(quest_types.count(itr->second->GetType()) == 0){ + quest_types[itr->second->GetType()] = zone_id; + zone_id++; + } + } + total_quests_num++; + } + else + continue; + } + packet->setArrayLengthByName("num_quests", total_quests_num); + int16 i = 0; + for(itr = total_quests.begin(); itr != total_quests.end(); itr++){ + if(i == 0 && quest_types.size() > 0){ + packet->setArrayLengthByName("num_quest_zones", quest_types.size()); + map::iterator type_itr; + int16 x = 0; + for(type_itr = quest_types.begin(); type_itr != quest_types.end(); type_itr++){ + packet->setArrayDataByName("quest_zones_zone", type_itr->first.c_str(), x); + packet->setArrayDataByName("quest_zones_zone_id", type_itr->second, x); + x++; + } + } + if(itr->first == 0 || !itr->second) + continue; + if(!all_quests && !itr->second->GetUpdateRequired()) + continue; + quest = itr->second; + if(!quest->GetDeleted()) + packet->setArrayDataByName("active", 1, i); + packet->setArrayDataByName("name", quest->GetName(), i); + packet->setArrayDataByName("quest_type", quest->GetType(), i); + packet->setArrayDataByName("quest_zone", quest->GetZone(), i); + int8 display_status = QUEST_DISPLAY_STATUS_NORMAL; + if(itr->second->GetCompleted()) + packet->setArrayDataByName("completed", 1, i); + if(itr->second->GetTurnedIn()){ + packet->setArrayDataByName("turned_in", 1, i); + packet->setArrayDataByName("completed", 1, i); + packet->setArrayDataByName("visible", 1, i); + display_status += QUEST_DISPLAY_STATUS_COMPLETED; + packet->setArrayDataByName("unknown3", 1, i); + } + packet->setArrayDataByName("quest_id", quest->GetQuestID(), i); + packet->setArrayDataByName("day", quest->GetDay(), i); + packet->setArrayDataByName("month", quest->GetMonth(), i); + packet->setArrayDataByName("year", quest->GetYear(), i); + packet->setArrayDataByName("level", quest->GetQuestLevel(), i); + int8 difficulty = 0; + string category = quest->GetType(); + if(category == "Tradeskill") + difficulty = GetTSArrowColor(quest->GetQuestLevel()); + else + difficulty = GetArrowColor(quest->GetQuestLevel()); + packet->setArrayDataByName("difficulty", difficulty, i); + if (itr->second->GetEncounterLevel() > 4) + packet->setArrayDataByName("encounter_level", quest->GetEncounterLevel(), i); + else + packet->setArrayDataByName("encounter_level", 4, i); + if(version >= 931 && quest_types.count(quest->GetType()) > 0) + packet->setArrayDataByName("zonetype_id", quest_types[quest->GetType()], i); + if(version >= 931 && quest_types.count(quest->GetZone()) > 0) + packet->setArrayDataByName("zone_id", quest_types[quest->GetZone()], i); + if(version >= 931 && quest->GetVisible()){ + if (quest->GetCompletedFlag()) + display_status += QUEST_DISPLAY_STATUS_COMPLETE_FLAG; + else if (quest->IsRepeatable()) + display_status += QUEST_DISPLAY_STATUS_REPEATABLE; + if (quest->GetYellowName() || quest->CheckCategoryYellow()) + display_status += QUEST_DISPLAY_STATUS_YELLOW; + + if (quest->IsTracked()) + display_status += QUEST_DISPLAY_STATUS_CHECK; + else + display_status += QUEST_DISPLAY_STATUS_NO_CHECK; + + if (quest->IsHidden() && !quest->GetTurnedIn()) + display_status = QUEST_DISPLAY_STATUS_HIDDEN; + } + else + packet->setArrayDataByName("visible", quest->GetVisible(), i); + if (itr->second->IsRepeatable()) + packet->setArrayDataByName("repeatable", 1, i); + + packet->setArrayDataByName("visible", 0, i); + packet->setArrayDataByName("display_status", display_status, i); + i++; + } + //packet->setDataByName("unknown4", 0); + packet->setDataByName("visible_quest_id", current_quest_id); + } + MPlayerQuests.unlock(); + packet->setDataByName("player_crc", crc); + packet->setDataByName("player_name", GetName()); + packet->setDataByName("used_quests", total_quests_num - total_completed_quests); + packet->setDataByName("max_quests", 75); + + LogWrite(PLAYER__PACKET, 0, "Player", "Dump/Print Packet in func: %s, line: %i", __FUNCTION__, __LINE__); +#if EQDEBUG >= 9 + packet->PrintPacket(); +#endif + + } + return packet; +} + +PacketStruct* Player::GetQuestJournalPacket(Quest* quest, int16 version, int32 crc) { + if (!quest) + return 0; + + PacketStruct* packet = configReader.getStruct("WS_QuestJournalUpdate", version); + if (packet) { + + packet->setArrayLengthByName("num_quests", 1); + packet->setArrayLengthByName("num_quest_zones", 1); + packet->setArrayDataByName("quest_zones_zone", quest->GetType()); + packet->setArrayDataByName("quest_zones_zone_id", 0); + + if(!quest->GetDeleted()) + packet->setArrayDataByName("active", 1); + + packet->setArrayDataByName("name", quest->GetName()); + // don't see these two in the struct + packet->setArrayDataByName("quest_type", quest->GetType()); + packet->setArrayDataByName("quest_zone", quest->GetZone()); + + int8 display_status = QUEST_DISPLAY_STATUS_NORMAL; + if(quest->GetCompleted()) + packet->setArrayDataByName("completed", 1); + if(quest->GetTurnedIn()) { + packet->setArrayDataByName("turned_in", 1); + packet->setArrayDataByName("completed", 1); + packet->setArrayDataByName("visible", 1); + display_status += QUEST_DISPLAY_STATUS_COMPLETED; + packet->setArrayDataByName("unknown3", 1); + } + packet->setArrayDataByName("quest_id", quest->GetQuestID()); + packet->setArrayDataByName("day", quest->GetDay()); + packet->setArrayDataByName("month", quest->GetMonth()); + packet->setArrayDataByName("year", quest->GetYear()); + packet->setArrayDataByName("level", quest->GetQuestLevel()); + + int8 difficulty = 0; + string category = quest->GetType(); + if(category == "Tradeskill") + difficulty = GetTSArrowColor(quest->GetQuestLevel()); + else + difficulty = GetArrowColor(quest->GetQuestLevel()); + + packet->setArrayDataByName("difficulty", difficulty); + if (quest->GetEncounterLevel() > 4) + packet->setArrayDataByName("encounter_level", quest->GetEncounterLevel()); + else + packet->setArrayDataByName("encounter_level", 4); + + if (version >= 931) { + packet->setArrayDataByName("zonetype_id", 0); + packet->setArrayDataByName("zone_id", 0); + } + if(version >= 931 && quest->GetVisible()){ + if (quest->GetCompletedFlag()) + display_status += QUEST_DISPLAY_STATUS_COMPLETE_FLAG; + else if (quest->IsRepeatable()) + display_status += QUEST_DISPLAY_STATUS_REPEATABLE; + if (quest->GetYellowName() || quest->CheckCategoryYellow()) + display_status += QUEST_DISPLAY_STATUS_YELLOW; + + if (quest->IsTracked()) + display_status += QUEST_DISPLAY_STATUS_CHECK; + else + display_status += QUEST_DISPLAY_STATUS_NO_CHECK; + + if (quest->IsHidden() && !quest->GetTurnedIn()) + display_status = QUEST_DISPLAY_STATUS_HIDDEN; + } + else + packet->setArrayDataByName("visible", quest->GetVisible()); + if (quest->IsRepeatable()) + packet->setArrayDataByName("repeatable", 1); + + packet->setArrayDataByName("visible", 0); + packet->setArrayDataByName("display_status", display_status); + + packet->setDataByName("unknown3", 1); + packet->setDataByName("visible_quest_id", quest->GetQuestID()); + packet->setDataByName("player_crc", crc); + packet->setDataByName("player_name", GetName()); + packet->setDataByName("used_quests", player_quests.size()); + packet->setDataByName("unknown4a", 1); + packet->setDataByName("max_quests", 75); + } + + return packet; +} + +Quest* Player::SetStepComplete(int32 id, int32 step){ + Quest* ret = 0; + MPlayerQuests.lock(); + if(player_quests.count(id) > 0){ + if(player_quests[id]->SetStepComplete(step)) + ret = player_quests[id]; + } + MPlayerQuests.unlock(); + return ret; +} + +Quest* Player::AddStepProgress(int32 quest_id, int32 step, int32 progress) { + Quest* ret = 0; + MPlayerQuests.lock(); + if (player_quests.count(quest_id) > 0) { + if (player_quests[quest_id]->AddStepProgress(step, progress)) + ret = player_quests[quest_id]; + } + MPlayerQuests.unlock(); + return ret; +} + +int32 Player::GetStepProgress(int32 quest_id, int32 step_id) { + int32 ret = 0; + + MPlayerQuests.lock(); + if (player_quests.count(quest_id) > 0) + ret = player_quests[quest_id]->GetStepProgress(step_id); + MPlayerQuests.unlock(); + + return ret; +} + +void Player::RemoveQuest(int32 id, bool delete_quest){ + MPlayerQuests.lock(); + if(delete_quest){ + safe_delete(player_quests[id]); + } + player_quests.erase(id); + MPlayerQuests.unlock(); + SendQuestRequiredSpawns(id); +} + +vector* Player::CheckQuestsLocationUpdate(){ + vector* quest_updates = 0; + map::iterator itr; + MPlayerQuests.lock(); + for(itr = player_quests.begin(); itr != player_quests.end(); itr++){ + if(itr->second && itr->second->CheckQuestLocationUpdate(GetX(), GetY(), GetZ())){ + if(!quest_updates) + quest_updates = new vector(); + quest_updates->push_back(itr->second); + } + } + MPlayerQuests.unlock(); + return quest_updates; +} + +vector* Player::CheckQuestsFailures(){ + vector* quest_failures = 0; + map::iterator itr; + MPlayerQuests.lock(); + for(itr = player_quests.begin(); itr != player_quests.end(); itr++){ + if(itr->second && itr->second->GetQuestFailures()->size() > 0){ + if(!quest_failures) + quest_failures = new vector(); + quest_failures->push_back(itr->second); + } + } + MPlayerQuests.unlock(); + return quest_failures; +} + +vector* Player::CheckQuestsKillUpdate(Spawn* spawn, bool update){ + vector* quest_updates = 0; + map::iterator itr; + MPlayerQuests.lock(); + for(itr = player_quests.begin(); itr != player_quests.end(); itr++){ + if(itr->second && itr->second->CheckQuestKillUpdate(spawn, update)){ + if(!quest_updates) + quest_updates = new vector(); + quest_updates->push_back(itr->second); + } + } + MPlayerQuests.unlock(); + return quest_updates; +} + +vector* Player::CheckQuestsChatUpdate(Spawn* spawn){ + vector* quest_updates = 0; + map::iterator itr; + MPlayerQuests.lock(); + for(itr = player_quests.begin(); itr != player_quests.end(); itr++){ + if(itr->second && itr->second->CheckQuestChatUpdate(spawn->GetDatabaseID())){ + if(!quest_updates) + quest_updates = new vector(); + quest_updates->push_back(itr->second); + } + } + MPlayerQuests.unlock(); + return quest_updates; +} + +int16 Player::GetTaskGroupStep(int32 quest_id){ + Quest* quest = 0; + int16 step = 0; + MPlayerQuests.lock(); + if(player_quests.count(quest_id) > 0){ + quest = player_quests[quest_id]; + step = quest->GetTaskGroupStep(); + } + MPlayerQuests.unlock(); + return step; +} + +bool Player::GetQuestStepComplete(int32 quest_id, int32 step_id){ + bool ret = false; + MPlayerQuests.lock(); + if(player_quests.count(quest_id) > 0){ + Quest* quest = player_quests[quest_id]; + ret = quest->GetQuestStepCompleted(step_id); + } + MPlayerQuests.unlock(); + return ret; +} + +int16 Player::GetQuestStep(int32 quest_id){ + Quest* quest = 0; + int16 step = 0; + MPlayerQuests.lock(); + if(player_quests.count(quest_id) > 0){ + quest = player_quests[quest_id]; + step = quest->GetQuestStep(); + } + MPlayerQuests.unlock(); + return step; +} + +void Player::LockQuests(){ + MPlayerQuests.lock(); +} + +void Player::UnlockQuests(){ + MPlayerQuests.unlock(); +} + +map* Player::GetPlayerQuests(){ + return &player_quests; +} + +map* Player::GetCompletedPlayerQuests(){ + return &completed_quests; +} + +Quest* Player::GetCompletedQuest(int32 quest_id){ + if(completed_quests.count(quest_id) > 0) + return completed_quests[quest_id]; + return 0; +} + +Quest* Player::GetQuest(int32 quest_id){ + if(player_quests.count(quest_id) > 0) + return player_quests[quest_id]; + return 0; +} + +void Player::AddCompletedQuest(Quest* quest){ + completed_quests[quest->GetQuestID()] = quest; + quest->SetSaveNeeded(true); + quest->SetTurnedIn(true); + if(quest->GetCompletedDescription()) + quest->SetDescription(string(quest->GetCompletedDescription())); + quest->SetUpdateRequired(true); +} + +bool Player::CheckQuestRemoveFlag(Spawn* spawn){ + if(current_quest_flagged.count(spawn) > 0){ + current_quest_flagged.erase(spawn); + return true; + } + return false; +} + +bool Player::CheckQuestRequired(Spawn* spawn){ + if(spawn) + return spawn->MeetsSpawnAccessRequirements(this); + return false; +} + +int8 Player::CheckQuestFlag(Spawn* spawn){ + int8 ret = 0; + + if (!spawn) { + LogWrite(PLAYER__ERROR, 0, "Player", "CheckQuestFlag() called with an invalid spawn"); + return ret; + } + + if(spawn->HasProvidedQuests()){ + vector* quests = spawn->GetProvidedQuests(); + Quest* quest = 0; + for(int32 i=0;isize();i++){ + MPlayerQuests.lock(); + if(player_quests.count(quests->at(i)) > 0){ + if(player_quests[quests->at(i)]->GetCompleted() && player_quests[quests->at(i)]->GetQuestReturnNPC() == spawn->GetDatabaseID()){ + ret = 2; + MPlayerQuests.unlock(); + break; + } + } + MPlayerQuests.unlock(); + if (CanReceiveQuest(quests->at(i))){ + MPlayerQuests.lock(); + quest = master_quest_list.GetQuest(quests->at(i)); + MPlayerQuests.unlock(); + if(quest){ + int8 color = quest->GetFeatherColor(); + // purple + if (color == 1) + ret = 16; + // green + else if (color == 2) + ret = 32; + // blue + else if (color == 3) + ret = 64; + // normal + else + ret = 1; + safe_delete(quest); + break; + } + } + } + } + map::iterator itr; + MPlayerQuests.lock(); + for(itr = player_quests.begin(); itr != player_quests.end(); itr++){ + if(itr->second->CheckQuestChatUpdate(spawn->GetDatabaseID(), false)) + ret = 2; + } + MPlayerQuests.unlock(); + if(ret > 0) + current_quest_flagged[spawn] = true; + return ret; +} + +bool Player::CanReceiveQuest(int32 quest_id){ + bool passed = true; + int32 x; + MPlayerQuests.lock(); + Quest* quest = master_quest_list.GetQuest(quest_id); + MPlayerQuests.unlock(); + if (!quest) + passed = false; + //check if quest is already completed, and not repeatable + else if (GetCompletedQuest(quest_id) && !quest->IsRepeatable()) + passed = false; + //check if the player already has this quest + else if (player_quests.count(quest_id) > 0) + passed = false; + //Check Prereq Adv Levels + else if (quest->GetPrereqLevel() > GetLevel()) + passed = false; + else if (quest->GetPrereqMaxLevel() > 0){ + if (GetLevel() > quest->GetPrereqMaxLevel()) + passed = false; + } + //Check Prereq TS Levels + else if (quest->GetPrereqTSLevel() > GetTSLevel()) + passed = false; + else if (quest->GetPrereqMaxTSLevel() > 0){ + if (GetTSLevel() > quest->GetPrereqMaxLevel()) + passed = false; + } + + + // Check quest pre req + vector* prereq_quests = quest->GetPrereqQuests(); + if(passed && prereq_quests && prereq_quests->size() > 0){ + for(int32 x=0;xsize();x++){ + if(completed_quests.count(prereq_quests->at(x)) == 0){ + passed = false; + break; + } + } + } + + //Check Prereq Classes + vector* prereq_classes = quest->GetPrereqClasses(); + if(passed && prereq_classes && prereq_classes->size() > 0){ + for(int32 x=0;xsize();x++){ + if(prereq_classes->at(x) == GetAdventureClass()){ + passed = true; + break; + } + else + passed = false; + } + } + + //Check Prereq TS Classes + vector* prereq_tsclasses = quest->GetPrereqTradeskillClasses(); + if(passed && prereq_tsclasses && prereq_tsclasses->size() > 0){ + for( x=0;xsize();x++){ + if(prereq_tsclasses->at(x) == GetTradeskillClass()){ + passed = true; + break; + } + else + passed = false; + } + } + + + // Check model prereq + vector* prereq_model_types = quest->GetPrereqModelTypes(); + if(passed && prereq_model_types && prereq_model_types->size() > 0){ + for(x=0;xsize();x++){ + if(prereq_model_types->at(x) == GetModelType()){ + passed = true; + break; + } + else + passed = false; + } + } + + + // Check faction pre req + vector* prereq_factions = quest->GetPrereqFactions(); + if(passed && prereq_factions && prereq_factions->size() > 0){ + sint32 val = 0; + for(x=0;xsize();x++){ + val = GetFactions()->GetFactionValue(prereq_factions->at(x).faction_id); + if(val >= prereq_factions->at(x).min && (prereq_factions->at(x).max == 0 || val <= prereq_factions->at(x).max)){ + passed = true; + break; + } + else + passed = false; + } + } + + LogWrite(MISC__TODO, 1, "TODO", "Check prereq items\n\t(%s, function: %s, line #: %i)", __FILE__, __FUNCTION__, __LINE__); + + // Check race pre req + vector* prereq_races = quest->GetPrereqRaces(); + if(passed && prereq_races && prereq_races->size() > 0){ + for(x=0;xsize();x++){ + if(prereq_races->at(x) == GetRace()){ + passed = true; + break; + } + else + passed = false; + } + } + + safe_delete(quest); + return passed; +} + +void Player::ClearRemovedSpawn(Spawn* spawn){ + if(player_removed_spawns.count(spawn) > 0) + player_removed_spawns.erase(spawn); +} + +bool Player::ShouldSendSpawn(Spawn* spawn){ + // Added a try catch to attempt to prevent a zone crash when an invalid spawn is passed to this function. + // Think invalid spawns are coming from the mutex list, if spawn is invalid return false. + try + { + if((WasSentSpawn(spawn->GetID()) == false || NeedsSpawnResent(spawn)) && (!spawn->IsPrivateSpawn() || spawn->AllowedAccess(this))) + return true; + } + catch (...) + { + LogWrite(SPAWN__ERROR, 0, "Spawn", "Invalid spawn passes to player->ShouldSendSpawn()"); + } + return false; +} + +int8 Player::GetArrowColor(int8 spawn_level){ + int8 color = 0; + sint16 diff = spawn_level - GetLevel(); + if(GetLevel() < 10) + diff *= 3; + else if(GetLevel() <= 20) + diff *= 2; + if(diff >= 9) + color = ARROW_COLOR_RED; + else if(diff >= 5) + color = ARROW_COLOR_ORANGE; + else if(diff >= 1) + color = ARROW_COLOR_YELLOW; + else if(diff == 0) + color = ARROW_COLOR_WHITE; + else if(diff <= -11) + color = ARROW_COLOR_GRAY; + else if(diff <= -6) + color = ARROW_COLOR_GREEN; + else //if(diff < 0) + color = ARROW_COLOR_BLUE; + return color; +} + +int8 Player::GetTSArrowColor(int8 level){ + int8 color = 0; + sint16 diff = level - GetTSLevel(); + if(GetLevel() < 10) + diff *= 3; + else if(GetLevel() <= 20) + diff *= 2; + if(diff >= 9) + color = ARROW_COLOR_RED; + else if(diff >= 5) + color = ARROW_COLOR_ORANGE; + else if(diff >= 1) + color = ARROW_COLOR_YELLOW; + else if(diff == 0) + color = ARROW_COLOR_WHITE; + else if(diff <= -11) + color = ARROW_COLOR_GRAY; + else if(diff <= -6) + color = ARROW_COLOR_GREEN; + else //if(diff < 0) + color = ARROW_COLOR_BLUE; + return color; +} + +void Player::AddCoins(int64 val){ + int32 tmp = 0; + UpdatePlayerStatistic(STAT_PLAYER_TOTAL_WEALTH, (GetCoinsCopper() + (GetCoinsSilver() * 100) + (GetCoinsGold() * 10000) + (GetCoinsPlat() * 1000000)) + val, true); + if(val >= 1000000){ + tmp = val / 1000000; + val -= tmp*1000000; + GetInfoStruct()->coin_plat += tmp; + } + if(val >= 10000){ + tmp = val / 10000; + val -= tmp*10000; + GetInfoStruct()->coin_gold += tmp; + } + if(val >= 100){ + tmp = val / 100; + val -= tmp*100; + GetInfoStruct()->coin_silver += tmp; + } + GetInfoStruct()->coin_copper += val; + if(GetInfoStruct()->coin_copper >= 100){ + tmp = GetInfoStruct()->coin_copper/100; + GetInfoStruct()->coin_copper -= 100 * tmp; + GetInfoStruct()->coin_silver += tmp; + } + if(GetInfoStruct()->coin_silver >= 100){ + tmp = GetInfoStruct()->coin_silver/100; + GetInfoStruct()->coin_silver -= 100 * tmp; + GetInfoStruct()->coin_gold += tmp; + } + if(GetInfoStruct()->coin_gold >= 100){ + tmp = GetInfoStruct()->coin_gold/100; + GetInfoStruct()->coin_gold -= 100 * tmp; + GetInfoStruct()->coin_plat += tmp; + } + charsheet_changed = true; +} + +bool Player::RemoveCoins(int64 val){ + int64 total_coins = GetInfoStruct()->coin_plat*1000000; + total_coins += GetInfoStruct()->coin_gold*10000; + total_coins += GetInfoStruct()->coin_silver*100; + total_coins += GetInfoStruct()->coin_copper; + if(total_coins >= val){ + total_coins -= val; + GetInfoStruct()->coin_plat = 0; + GetInfoStruct()->coin_gold = 0; + GetInfoStruct()->coin_silver = 0; + GetInfoStruct()->coin_copper = 0; + AddCoins(total_coins); + return true; + } + return false; +} + +bool Player::HasCoins(int64 val) { + int64 total_coins = GetInfoStruct()->coin_plat*1000000; + total_coins += GetInfoStruct()->coin_gold*10000; + total_coins += GetInfoStruct()->coin_silver*100; + total_coins += GetInfoStruct()->coin_copper; + if(total_coins >= val) + return true; + + return false; +} + +bool Player::HasPendingLootItems(int32 id){ + return (pending_loot_items.count(id) > 0 && pending_loot_items[id].size() > 0); +} + +bool Player::HasPendingLootItem(int32 id, int32 item_id){ + return (pending_loot_items.count(id) > 0 && pending_loot_items[id].count(item_id) > 0); +} +vector* Player::GetPendingLootItems(int32 id){ + vector* ret = 0; + if(pending_loot_items.count(id) > 0){ + ret = new vector(); + map::iterator itr; + for(itr = pending_loot_items[id].begin(); itr != pending_loot_items[id].end(); itr++){ + if(master_item_list.GetItem(itr->first)) + ret->push_back(master_item_list.GetItem(itr->first)); + } + } + return ret; +} + +void Player::RemovePendingLootItem(int32 id, int32 item_id){ + if(pending_loot_items.count(id) > 0){ + pending_loot_items[id].erase(item_id); + if(pending_loot_items[id].size() == 0) + pending_loot_items.erase(id); + } +} + +void Player::RemovePendingLootItems(int32 id){ + if(pending_loot_items.count(id) > 0) + pending_loot_items.erase(id); +} + +void Player::AddPendingLootItems(int32 id, vector* items){ + if(items){ + Item* item = 0; + for(int32 i=0;isize();i++){ + item = items->at(i); + if(item) + pending_loot_items[id][item->details.item_id] = true; + } + } +} + +void Player::AddPlayerStatistic(int32 stat_id, sint32 stat_value, int32 stat_date) { + if (statistics.count(stat_id) == 0) { + Statistic* stat = new Statistic; + stat->stat_id = stat_id; + stat->stat_value = stat_value; + stat->stat_date = stat_date; + stat->save_needed = false; + statistics[stat_id] = stat; + } +} + +void Player::UpdatePlayerStatistic(int32 stat_id, sint32 stat_value, bool overwrite) { + if (statistics.count(stat_id) == 0) + AddPlayerStatistic(stat_id, 0, 0); + Statistic* stat = statistics[stat_id]; + overwrite == true ? stat->stat_value = stat_value : stat->stat_value += stat_value; + stat->stat_date = Timer::GetUnixTimeStamp(); + stat->save_needed = true; +} + +void Player::WritePlayerStatistics() { + map::iterator stat_itr; + for (stat_itr = statistics.begin(); stat_itr != statistics.end(); stat_itr++) { + Statistic* stat = stat_itr->second; + if (stat->save_needed) { + stat->save_needed = false; + database.WritePlayerStatistic(this, stat); + } + } +} + +sint64 Player::GetPlayerStatisticValue(int32 stat_id) { + if (stat_id >= 0 && statistics.count(stat_id) > 0) + return statistics[stat_id]->stat_value; + return 0; +} + +void Player::RemovePlayerStatistics() { + map::iterator stat_itr; + for (stat_itr = statistics.begin(); stat_itr != statistics.end(); stat_itr++) + safe_delete(stat_itr->second); + statistics.clear(); +} + +void Player::SetGroup(PlayerGroup* new_group){ + group = new_group; +} + +/*PlayerGroup* Player::GetGroup(){ + return group; +}*/ + +bool Player::IsGroupMember(Entity* player) { + bool ret = false; + if (GetGroupMemberInfo() && player) { + //world.GetGroupManager()->GroupLock(__FUNCTION__, __LINE__); + ret = world.GetGroupManager()->IsInGroup(GetGroupMemberInfo()->group_id, player); + + /*deque::iterator itr; + deque* members = world.GetGroupManager()->GetGroupMembers(GetGroupMemberInfo()->group_id); + for (itr = members->begin(); itr != members->end(); itr++) { + GroupMemberInfo* gmi = *itr; + if (gmi->client && gmi->client->GetPlayer() == player) { + ret = true; + break; + } + } + + world.GetGroupManager()->ReleaseGroupLock(__FUNCTION__, __LINE__);*/ + } + return ret; +} + + + + + +void Player::SetGroupInformation(PacketStruct* packet){ + int8 det_count = 0; + Entity* member = 0; + + world.GetGroupManager()->GroupLock(__FUNCTION__, __LINE__); + if (GetGroupMemberInfo()) { + deque* members = world.GetGroupManager()->GetGroupMembers(GetGroupMemberInfo()->group_id); + deque::iterator itr; + GroupMemberInfo* info = 0; + int x = 0; + + for (itr = members->begin(); itr != members->end(); itr++) { + info = *itr; + + if (info == GetGroupMemberInfo()) { + if (info->leader) + packet->setDataByName("group_leader_id", 0xFFFFFFFF); // If this player is the group leader then fill this element with FF FF FF FF + + continue; + } + else { + if (info->leader) + packet->setDataByName("group_leader_id", x); // If leader is some one else then fill with the slot number they are in + } + + member = info->member; + + if (member && member->GetZone() == GetZone()) { + packet->setSubstructDataByName("group_members", "unknown3", 1, x); + packet->setSubstructDataByName("group_members", "spawn_id", GetIDWithPlayerSpawn(member), x); + + if (member->HasPet()) { + if (member->GetPet()) + packet->setSubstructDataByName("group_members", "pet_id", GetIDWithPlayerSpawn(member->GetPet()), x); + else + packet->setSubstructDataByName("group_members", "pet_id", GetIDWithPlayerSpawn(member->GetCharmedPet()), x); + } + else + packet->setSubstructDataByName("group_members", "pet_id", 0xFFFFFFFF, x); + + //Send detriment counts as 255 if all dets of that type are incurable + det_count = member->GetTraumaCount(); + if (det_count > 0) { + if(!member->HasCurableDetrimentType(DET_TYPE_TRAUMA)) + det_count = 255; + } + packet->setSubstructDataByName("group_members", "trauma_count", det_count, x); + + det_count = member->GetArcaneCount(); + if (det_count > 0) { + if (!member->HasCurableDetrimentType(DET_TYPE_ARCANE)) + det_count = 255; + } + packet->setSubstructDataByName("group_members", "arcane_count", det_count, x); + + det_count = member->GetNoxiousCount(); + if (det_count > 0) { + if (!member->HasCurableDetrimentType(DET_TYPE_NOXIOUS)) + det_count = 255; + } + packet->setSubstructDataByName("group_members", "noxious_count", det_count, x); + + det_count = member->GetElementalCount(); + if (det_count > 0) { + if (!member->HasCurableDetrimentType(DET_TYPE_ELEMENTAL)) + det_count = 255; + } + packet->setSubstructDataByName("group_members", "elemental_count", det_count, x); + + det_count = member->GetCurseCount(); + if (det_count > 0) { + if (!member->HasCurableDetrimentType(DET_TYPE_CURSE)) + det_count = 255; + } + packet->setSubstructDataByName("group_members", "curse_count", det_count, x); + } + else { + packet->setSubstructDataByName("group_members", "unknown3", 2, x); + packet->setSubstructDataByName("group_members", "pet_id", 0xFFFFFFFF, x); + //packet->setSubstructDataByName("group_members", "unknown5", 1, x, 1); // unknown5 > 1 = name is blue + } + + packet->setSubstructDataByName("group_members", "name", info->name.c_str(), x); + packet->setSubstructDataByName("group_members", "hp_current", info->hp_current, x); + packet->setSubstructDataByName("group_members", "hp_max", info->hp_max, x); + packet->setSubstructDataByName("group_members", "power_current", info->power_current, x); + packet->setSubstructDataByName("group_members", "power_max", info->power_max, x); + packet->setSubstructDataByName("group_members", "level_current", info->level_current, x); + packet->setSubstructDataByName("group_members", "level_max", info->level_max, x); + packet->setSubstructDataByName("group_members", "zone", info->zone.c_str(), x); + packet->setSubstructDataByName("group_members", "race_id", info->race_id, x); + packet->setSubstructDataByName("group_members", "class_id", info->class_id, x); + + x++; + } + } + //packet->PrintPacket(); + world.GetGroupManager()->ReleaseGroupLock(__FUNCTION__, __LINE__); +} + +PlayerItemList* Player::GetPlayerItemList(){ + return &item_list; +} + +void Player::ResetSavedSpawns(){ + player_removed_spawns.clear(); + + vis_mutex.writelock(__FUNCTION__, __LINE__); + spawn_vis_packet_list.clear(); + vis_mutex.releasewritelock(__FUNCTION__, __LINE__); + + info_mutex.writelock(__FUNCTION__, __LINE__); + spawn_info_packet_list.clear(); + info_mutex.releasewritelock(__FUNCTION__, __LINE__); + + pos_mutex.writelock(__FUNCTION__, __LINE__); + spawn_pos_packet_list.clear(); + pos_mutex.releasewritelock(__FUNCTION__, __LINE__); + + player_spawn_reverse_id_map.clear(); + player_spawn_id_map.clear(); + player_spawn_map.clear(); + player_spawn_index_map.clear(); + m_playerSpawnQuestsRequired.writelock(__FUNCTION__, __LINE__); + player_spawn_quests_required.clear(); + m_playerSpawnQuestsRequired.releasewritelock(__FUNCTION__, __LINE__); + info->RemoveOldPackets(); + safe_delete_array(movement_packet); + safe_delete_array(old_movement_packet); +} + +void Player::SetReturningFromLD(bool val){ + returning_from_ld = val; +} + +bool Player::IsReturningFromLD(){ + return returning_from_ld; +} + +void Player::AddFriend(const char* name, bool save){ + if(name){ + if(save) + friend_list[name] = 1; + else + friend_list[name] = 0; + } +} + +bool Player::IsFriend(const char* name){ + if(name && friend_list.count(name) > 0 && friend_list[name] < 2) + return true; + return false; +} + +void Player::RemoveFriend(const char* name){ + if(friend_list.count(name) > 0) + friend_list[name] = 2; +} + +map* Player::GetFriends(){ + return &friend_list; +} + +void Player::AddIgnore(const char* name, bool save){ + if(name){ + if(save) + ignore_list[name] = 1; + else + ignore_list[name] = 0; + } +} + +bool Player::IsIgnored(const char* name){ + if(name && ignore_list.count(name) > 0 && ignore_list[name] < 2) + return true; + return false; +} + +void Player::RemoveIgnore(const char* name){ + if(name && ignore_list.count(name) > 0) + ignore_list[name] = 2; +} + +map* Player::GetIgnoredPlayers(){ + return &ignore_list; +} + +bool Player::CheckLevelStatus(int16 new_level) { + int16 LevelCap = rule_manager.GetGlobalRule(R_Player, MaxLevel)->GetInt16(); + int16 LevelCapOverrideStatus = rule_manager.GetGlobalRule(R_Player, MaxLevelOverrideStatus)->GetInt16(); + if ( (LevelCap < new_level) && (LevelCapOverrideStatus > GetZone()->GetClientBySpawn(this)->GetAdminStatus()) ) + return false; + return true; +} + +Skill* Player::GetSkillByName(const char* name, bool check_update){ + Skill* ret = skill_list.GetSkillByName(name); + if(check_update) + skill_list.CheckSkillIncrease(ret); + return ret; +} + +void Player::SetRangeAttack(bool val){ + range_attack = val; +} + +bool Player::GetRangeAttack(){ + return range_attack; +} + +bool Player::AddMail(Mail* mail) { + bool ret = false; + if (mail) { + mail_list.Put(mail->mail_id, mail); + ret = true; + } + return ret; +} + +MutexMap* Player::GetMail() { + return &mail_list; +} + +Mail* Player::GetMail(int32 mail_id) { + Mail* mail = 0; + if (mail_list.count(mail_id) > 0) + mail = mail_list.Get(mail_id); + return mail; +} + +void Player::DeleteMail(bool from_database) { + MutexMap::iterator itr = mail_list.begin(); + while (itr.Next()) + DeleteMail(itr->first, from_database); + mail_list.clear(); +} + +void Player::DeleteMail(int32 mail_id, bool from_database) { + if (mail_list.count(mail_id) > 0) { + if (from_database) + database.DeletePlayerMail(mail_list.Get(mail_id)); + mail_list.erase(mail_id); + } +} + +ZoneServer* Player::GetGroupMemberInZone(int32 zone_id) { + //if ( GetGroup() == NULL ) + return NULL; + + /*GroupMemberInfo* info = 0; + for(int32 i=0;imembers.size(); i++){ + info = GetGroup()->members[i]; + if(info == group_member_info) + continue; + + // if the client exists, they are attached to a player, + // the player is currently in an instance, which has the same zone id (for that instance type) + if ( info->client != NULL && info->client->GetPlayer() != NULL && + info->client->GetPlayer()->GetZone()->GetInstanceID() > 0 && + info->client->GetPlayer()->GetZone()->GetZoneID() == zone_id ) + { + return info->client->GetPlayer()->GetZone(); + } + } + + // no member is in an instance with this zone id + return NULL;*/ +} + + +/* CharacterInstances */ + +CharacterInstances::CharacterInstances() { + m_instanceList.SetName("Mutex::m_instanceList"); +} + +CharacterInstances::~CharacterInstances() { + RemoveInstances(); +} + +void CharacterInstances::AddInstance(int32 db_id, int32 instance_id, int32 last_success_timestamp, int32 last_failure_timestamp, int32 success_lockout_time, int32 failure_lockout_time, int32 zone_id, int8 zone_instancetype, string zone_name) { + InstanceData data; + data.db_id = db_id; + data.instance_id = instance_id; + data.zone_id = zone_id; + data.zone_instance_type = zone_instancetype; + data.zone_name = zone_name; + data.last_success_timestamp = last_success_timestamp; + data.last_failure_timestamp = last_failure_timestamp; + data.success_lockout_time = success_lockout_time; + data.failure_lockout_time = failure_lockout_time; + instanceList.push_back(data); +} + +void CharacterInstances::RemoveInstances() { + instanceList.clear(); +} + +bool CharacterInstances::RemoveInstanceByZoneID(int32 zone_id) { + vector::iterator itr; + m_instanceList.writelock(__FUNCTION__, __LINE__); + for(itr = instanceList.begin(); itr != instanceList.end(); itr++) { + InstanceData* data = &(*itr); + if (data->zone_id == zone_id) { + instanceList.erase(itr); + m_instanceList.releasewritelock(__FUNCTION__, __LINE__); + return true; + } + } + m_instanceList.releasewritelock(__FUNCTION__, __LINE__); + return false; +} + +bool CharacterInstances::RemoveInstanceByInstanceID(int32 instance_id) { + vector::iterator itr; + m_instanceList.writelock(__FUNCTION__, __LINE__); + for(itr = instanceList.begin(); itr != instanceList.end(); itr++) { + InstanceData* data = &(*itr); + if (data->instance_id == instance_id) { + instanceList.erase(itr); + m_instanceList.releasewritelock(__FUNCTION__, __LINE__); + return true; + } + } + m_instanceList.releasewritelock(__FUNCTION__, __LINE__); + return false; +} + +InstanceData* CharacterInstances::FindInstanceByZoneID(int32 zone_id) { + m_instanceList.readlock(__FUNCTION__, __LINE__); + for(int32 i = 0; i < instanceList.size(); i++) { + InstanceData* data = &instanceList.at(i); + if (data->zone_id == zone_id) { + m_instanceList.releasereadlock(__FUNCTION__, __LINE__); + return data; + } + } + m_instanceList.releasereadlock(__FUNCTION__, __LINE__); + + return 0; +} + +InstanceData* CharacterInstances::FindInstanceByDBID(int32 db_id) { + m_instanceList.readlock(__FUNCTION__, __LINE__); + for(int32 i = 0; i < instanceList.size(); i++) { + InstanceData* data = &instanceList.at(i); + if (data->db_id == db_id) { + m_instanceList.releasereadlock(__FUNCTION__, __LINE__); + return data; + } + } + m_instanceList.releasereadlock(__FUNCTION__, __LINE__); + + return 0; +} + +InstanceData* CharacterInstances::FindInstanceByInstanceID(int32 instance_id) { + m_instanceList.readlock(__FUNCTION__, __LINE__); + for(int32 i = 0; i < instanceList.size(); i++) { + InstanceData* data = &instanceList.at(i); + if (data->instance_id == instance_id) { + m_instanceList.releasereadlock(__FUNCTION__, __LINE__); + return data; + } + } + m_instanceList.releasereadlock(__FUNCTION__, __LINE__); + + return 0; +} +vector CharacterInstances::GetLockoutInstances() { + vector ret; + m_instanceList.readlock(__FUNCTION__, __LINE__); + for (int32 i = 0; i < instanceList.size(); i++) { + InstanceData* data = &instanceList.at(i); + if (data->zone_instance_type == SOLO_LOCKOUT_INSTANCE || data->zone_instance_type == GROUP_LOCKOUT_INSTANCE || data->zone_instance_type == RAID_LOCKOUT_INSTANCE) + ret.push_back(*data); + } + m_instanceList.releasereadlock(__FUNCTION__, __LINE__); + return ret; +} + +vector CharacterInstances::GetPersistentInstances() { + vector ret; + m_instanceList.readlock(__FUNCTION__, __LINE__); + for (int32 i = 0; i < instanceList.size(); i++) { + InstanceData* data = &instanceList.at(i); + if (data->zone_instance_type == SOLO_PERSIST_INSTANCE || data->zone_instance_type == GROUP_PERSIST_INSTANCE || data->zone_instance_type == RAID_PERSIST_INSTANCE) + ret.push_back(*data); + } + m_instanceList.releasereadlock(__FUNCTION__, __LINE__); + return ret; +} + +void CharacterInstances::ProcessInstanceTimers(Player* player) { + + // Only need to check persistent instances here, lockout should be handled by zone shutting down + + // Check instance id, if > 0 check timers, if timers expired set instance id to 0 and update the db `character_instance` to instance id 0, + // delete instance from `instances` if no more characters assigned to it + + m_instanceList.readlock(__FUNCTION__, __LINE__); + for (int32 i = 0; i < instanceList.size(); i++) { + InstanceData* data = &instanceList.at(i); + + // Check to see if we have a valid instance and if it is persistant + if (data->instance_id > 0) { + + if (data->zone_instance_type == SOLO_PERSIST_INSTANCE || data->zone_instance_type == GROUP_PERSIST_INSTANCE || data->zone_instance_type == RAID_PERSIST_INSTANCE) { + // Check max duration (last success + success time) + if (Timer::GetUnixTimeStamp() >= (data->last_success_timestamp + data->success_lockout_time)) { + // Max duration has passed, instance has expired lets remove the player from it, + // this will also delete the instace if all players have been removed from it + database.DeleteCharacterFromInstance(player->GetCharacterID(), data->instance_id); + data->instance_id = 0; + } + } + + if (data->zone_instance_type == SOLO_LOCKOUT_INSTANCE || data->zone_instance_type == GROUP_LOCKOUT_INSTANCE || data->zone_instance_type == RAID_LOCKOUT_INSTANCE) { + // Need to check lockout instance ids to ensure they are still valid. + if (!database.VerifyInstanceID(player->GetCharacterID(), data->instance_id)) + data->instance_id = 0; + } + } + } + m_instanceList.releasereadlock(__FUNCTION__, __LINE__); + + /*for(int32 i=0;isize();i++) + { + bool valuesUpdated = false; + InstanceData data = instanceList->at(i); + if ( data.grant_reenter_time_left > 0 ) + { + if ( ( data.grant_reenter_time_left - msDiff ) < 1 ) + data.grant_reenter_time_left = 0; + else + data.grant_reenter_time_left -= msDiff; + + valuesUpdated = true; + } + if ( data.grant_reset_time_left > 0 ) + { + if ( ( data.grant_reset_time_left - msDiff ) < 1 ) + data.grant_reset_time_left = 0; + else + data.grant_reset_time_left -= msDiff; + + valuesUpdated = true; + } + if ( data.lockout_time > 0 ) + { + if ( ( data.lockout_time - msDiff ) < 1 ) + { + data.lockout_time = 0; + // this means that their timer ran out and we need to clear it from db and player + RemoveInstanceByInstanceID(data.instance_id); + database.DeleteCharacterFromInstance(player->GetCharacterID(),data.instance_id); + } + else + data.lockout_time -= msDiff; + + valuesUpdated = true; + } + + if ( valuesUpdated ) + database.UpdateCharacterInstanceTimers(player->GetCharacterID(),data.instance_id,data.lockout_time,data.grant_reset_time_left,data.grant_reenter_time_left); + }*/ +} + +int32 CharacterInstances::GetInstanceCount() { + return instanceList.size(); +} + +void Player::SetPlayerAdventureClass(int8 new_class){ + SetAdventureClass(new_class); + GetInfoStruct()->class1 = classes.GetBaseClass(new_class); + GetInfoStruct()->class2 = classes.GetSecondaryBaseClass(new_class); + GetInfoStruct()->class3 = new_class; + charsheet_changed = true; + if(GetZone()) + GetZone()->TriggerCharSheetTimer(); +} + +void Player::AddSkillBonus(int32 spell_id, int32 skill_id, float value) { + GetSkills()->AddSkillBonus(spell_id, skill_id, value); +} + +SkillBonus* Player::GetSkillBonus(int32 spell_id) { + return GetSkills()->GetSkillBonus(spell_id); +} + +void Player::RemoveSkillBonus(int32 spell_id) { + GetSkills()->RemoveSkillBonus(spell_id); +} + +bool Player::HasFreeBankSlot() { + return item_list.HasFreeBankSlot(); +} + +int8 Player::FindFreeBankSlot() { + return item_list.FindFreeBankSlot(); +} + +void Player::AddTitle(int32 title_id, const char *name, int8 prefix, bool save_needed){ + Title* new_title = new Title; + new_title->SetID(title_id); + new_title->SetName(name); + new_title->SetPrefix(prefix); + player_titles_list.Add(new_title); +} +void Player::AddAAEntry(int16 template_id, int8 tab_id, int32 aa_id, int16 order,int8 treeid) { + + + +} +void Player::AddLanguage(int32 id, const char *name, bool save_needed){ + // Check to see if the player already has the language + if (HasLanguage(id)) + return; + + // Doesn't already have the language so add it + Language* new_language = new Language; + new_language->SetID(id); + new_language->SetName(name); + player_languages_list.Add(new_language); + + if (save_needed) + database.SaveCharacterLang(GetCharacterID(), id); +} + +bool Player::HasLanguage(int32 id){ + list* languages = player_languages_list.GetAllLanguages(); + list::iterator itr; + Language* language = 0; + bool ret = false; + for(itr = languages->begin(); itr != languages->end(); itr++){ + language = *itr; + if(language->GetID() == id){ + ret = true; + break; + } + } + return ret; +} + +bool Player::HasLanguage(const char* name){ + list* languages = player_languages_list.GetAllLanguages(); + list::iterator itr; + Language* language = 0; + bool ret = false; + for(itr = languages->begin(); itr != languages->end(); itr++){ + language = *itr; + if(!strncmp(language->GetName(), name, strlen(name))){ + ret = true; + break; + } + } + return ret; +} + +void Player::AddPassiveSpell(int32 id, int8 tier) +{ + // Add the spell to the list of passives this player currently has + // list is used for quickly going over only the passive spells the + // player has instead of going through all their spells. + passive_spells.push_back(id); + + Client* client = GetZone()->GetClientBySpawn(this); + + // Don not apply passives if the client is null, zoning, or reviving + if (client == NULL || client->IsZoning() || IsResurrecting()) + return; + + Spell* spell = 0; + spell = master_spell_list.GetSpell(id, tier); + if (spell) { + SpellProcess* spellProcess = 0; + // Get the current zones spell process + spellProcess = GetZone()->GetSpellProcess(); + // Cast the spell, CastPassives() bypasses the spell queue + spellProcess->CastPassives(spell, this); + } +} + +void Player::ApplyPassiveSpells() +{ + Spell* spell = 0; + SpellBookEntry* spell2 = 0; + vector::iterator itr; + SpellProcess* spellProcess = 0; + spellProcess = GetZone()->GetSpellProcess(); + + for (itr = passive_spells.begin(); itr != passive_spells.end(); itr++) + { + spell2 = GetSpellBookSpell((*itr)); + spell = master_spell_list.GetSpell(spell2->spell_id, spell2->tier); + if (spell) { + spellProcess->CastPassives(spell, this); + } + } +} + +void Player::RemovePassive(int32 id, int8 tier, bool remove_from_list) +{ + Spell* spell = 0; + spell = master_spell_list.GetSpell(id, tier); + if (spell) { + SpellProcess* spellProcess = 0; + spellProcess = GetZone()->GetSpellProcess(); + spellProcess->CastPassives(spell, this, true); + + if (remove_from_list) { + vector::iterator remove; + remove = find(passive_spells.begin(), passive_spells.end(), id); + if (remove != passive_spells.end()) + passive_spells.erase(remove); + } + + database.DeleteCharacterSpell(GetCharacterID(), spell->GetSpellID()); + } +} + +void Player::RemoveAllPassives() +{ + vector::iterator itr; + for (itr = passive_spells.begin(); itr != passive_spells.end(); itr++) + RemoveSpellBookEntry((*itr), false); + + passive_spells.clear(); +} + +void Player::ResetPetInfo() { + GetInfoStruct()->pet_id = 0xFFFFFFFF; + strcpy(GetInfoStruct()->pet_name, "No Pet"); + GetInfoStruct()->pet_movement = 0; + GetInfoStruct()->pet_behavior = 0; + GetInfoStruct()->pet_health_pct = 0.0f; + GetInfoStruct()->pet_power_pct = 0.0f; + // Make sure the values get sent to the client + SetCharSheetChanged(true); +} + +bool Player::HasRecipeBook(int32 recipe_id){ + return recipebook_list.HasRecipeBook(recipe_id); +} + +bool Player::DiscoveredLocation(int32 locationID) { + bool ret = false; + + // No discovery type entry then return false + if (m_characterHistory.count(HISTORY_TYPE_DISCOVERY) == 0) + return false; + + // Is a discovery type entry but not a location subtype return false + if (m_characterHistory[HISTORY_TYPE_DISCOVERY].count(HISTORY_SUBTYPE_LOCATION) == 0) + return false; + + vector::iterator itr; + + for (itr = m_characterHistory[HISTORY_TYPE_DISCOVERY][HISTORY_SUBTYPE_LOCATION].begin(); itr != m_characterHistory[HISTORY_TYPE_DISCOVERY][HISTORY_SUBTYPE_LOCATION].end(); itr++) { + if ((*itr)->Value == locationID) { + ret = true; + break; + } + } + + return ret; +} + +void Player::UpdatePlayerHistory(int8 type, int8 subtype, int32 value, int32 value2) { + switch (type) { + case HISTORY_TYPE_NONE: + HandleHistoryNone(subtype, value, value2); + break; + case HISTORY_TYPE_DEATH: + HandleHistoryDeath(subtype, value, value2); + break; + case HISTORY_TYPE_DISCOVERY: + HandleHistoryDiscovery(subtype, value, value2); + break; + case HISTORY_TYPE_XP: + HandleHistoryXP(subtype, value, value2); + break; + default: + // Not a valid history event so return out before trying to save into the db + return; + } +} + +void Player::HandleHistoryNone(int8 subtype, int32 value, int32 value2) { +} + +void Player::HandleHistoryDeath(int8 subtype, int32 value, int32 value2) { +} + +void Player::HandleHistoryDiscovery(int8 subtype, int32 value, int32 value2) { + switch (subtype) { + case HISTORY_SUBTYPE_NONE: + break; + case HISTORY_SUBTYPE_ADVENTURE: + break; + case HISTORY_SUBTYPE_TRADESKILL: + break; + case HISTORY_SUBTYPE_QUEST: + break; + case HISTORY_SUBTYPE_AA: + break; + case HISTORY_SUBTYPE_ITEM: + break; + case HISTORY_SUBTYPE_LOCATION: { + HistoryData* hd = new HistoryData; + hd->Value = value; + hd->Value2 = value2; + hd->EventDate = Timer::GetUnixTimeStamp(); + strcpy(hd->Location, GetZone()->GetZoneName()); + + m_characterHistory[HISTORY_TYPE_DISCOVERY][HISTORY_SUBTYPE_LOCATION].push_back(hd); + break; + } + default: + // Invalid subtype, default to NONE + break; + } +} + +void Player::HandleHistoryXP(int8 subtype, int32 value, int32 value2) { + switch (subtype) { + case HISTORY_SUBTYPE_NONE: + break; + case HISTORY_SUBTYPE_ADVENTURE: { + HistoryData* hd = new HistoryData; + hd->Value = value; + hd->Value2 = value2; + hd->EventDate = Timer::GetUnixTimeStamp(); + strcpy(hd->Location, GetZone()->GetZoneName()); + + m_characterHistory[HISTORY_TYPE_XP][HISTORY_SUBTYPE_ADVENTURE].push_back(hd); + } + break; + case HISTORY_SUBTYPE_TRADESKILL: + break; + case HISTORY_SUBTYPE_QUEST: + break; + case HISTORY_SUBTYPE_AA: + break; + case HISTORY_SUBTYPE_ITEM: + break; + case HISTORY_SUBTYPE_LOCATION: + break; + default: + // Invalid subtype, default to NONE + break; + } +} + +void Player::LoadPlayerHistory(int8 type, int8 subtype, HistoryData* hd) { + m_characterHistory[type][subtype].push_back(hd); +} + +void Player::SaveHistory() { + LogWrite(PLAYER__DEBUG, 0, "Player", "Saving History for Player: '%s'", GetName()); + + map > >::iterator itr; + map >::iterator itr2; + vector::iterator itr3; + for (itr = m_characterHistory.begin(); itr != m_characterHistory.end(); itr++) { + for (itr2 = itr->second.begin(); itr2 != itr->second.end(); itr2++) { + for (itr3 = itr2->second.begin(); itr3 != itr2->second.end(); itr3++) { + database.SaveCharacterHistory(this, itr->first, itr2->first, (*itr3)->Value, (*itr3)->Value2, (*itr3)->Location, (*itr3)->EventDate); + } + } + } +} + +void Player::InitXPTable() { + m_levelXPReq[2] = 600; + m_levelXPReq[3] = 800; + m_levelXPReq[4] = 1000; + m_levelXPReq[5] = 1400; + m_levelXPReq[6] = 1800; + m_levelXPReq[7] = 2200; + m_levelXPReq[8] = 2600; + m_levelXPReq[9] = 3000; + m_levelXPReq[10] = 3400; + m_levelXPReq[11] = 3800; + m_levelXPReq[12] = 4200; + m_levelXPReq[13] = 4600; + m_levelXPReq[14] = 5000; + m_levelXPReq[15] = 5500; + m_levelXPReq[16] = 6000; + m_levelXPReq[17] = 6500; + m_levelXPReq[18] = 7000; + m_levelXPReq[19] = 7500; + m_levelXPReq[20] = 8000; + m_levelXPReq[21] = 8500; + m_levelXPReq[22] = 9000; + m_levelXPReq[23] = 9500; + m_levelXPReq[24] = 10000; + m_levelXPReq[25] = 10500; + m_levelXPReq[26] = 11000; + m_levelXPReq[27] = 11750; + m_levelXPReq[28] = 12500; + m_levelXPReq[29] = 13250; + m_levelXPReq[30] = 14000; + m_levelXPReq[31] = 14750; + m_levelXPReq[32] = 15500; + m_levelXPReq[33] = 16250; + m_levelXPReq[34] = 17000; + m_levelXPReq[35] = 17750; + m_levelXPReq[36] = 18500; + m_levelXPReq[37] = 19250; + m_levelXPReq[38] = 20000; + m_levelXPReq[39] = 20750; + m_levelXPReq[40] = 21500; + m_levelXPReq[41] = 22250; + m_levelXPReq[42] = 23000; + m_levelXPReq[43] = 24000; + m_levelXPReq[44] = 25000; + m_levelXPReq[45] = 26000; + m_levelXPReq[46] = 27000; + m_levelXPReq[47] = 28000; + m_levelXPReq[48] = 29250; + m_levelXPReq[49] = 30500; + m_levelXPReq[50] = 32000; + m_levelXPReq[51] = 33750; + m_levelXPReq[52] = 35750; + m_levelXPReq[53] = 38000; + m_levelXPReq[54] = 40500; + m_levelXPReq[55] = 42500; + m_levelXPReq[56] = 45500; + m_levelXPReq[57] = 48500; + m_levelXPReq[58] = 51500; + m_levelXPReq[59] = 54500; + m_levelXPReq[60] = 57500; + m_levelXPReq[61] = 60500; + m_levelXPReq[62] = 63500; + m_levelXPReq[63] = 66500; + m_levelXPReq[64] = 70000; + m_levelXPReq[65] = 73500; + m_levelXPReq[66] = 77000; + m_levelXPReq[67] = 80500; + m_levelXPReq[68] = 84000; + m_levelXPReq[69] = 87500; + m_levelXPReq[70] = 91000; + m_levelXPReq[71] = 94500; + m_levelXPReq[72] = 98000; + m_levelXPReq[73] = 101500; + m_levelXPReq[74] = 105000; + m_levelXPReq[75] = 108500; + m_levelXPReq[76] = 116500; + m_levelXPReq[77] = 132500; + m_levelXPReq[78] = 152500; + m_levelXPReq[79] = 172500; + m_levelXPReq[80] = 192500; + m_levelXPReq[81] = 212500; + m_levelXPReq[82] = 232500; + m_levelXPReq[83] = 252500; + m_levelXPReq[84] = 272500; + m_levelXPReq[85] = 292500; + m_levelXPReq[86] = 312500; + m_levelXPReq[87] = 332500; + m_levelXPReq[88] = 352500; + m_levelXPReq[89] = 372500; + m_levelXPReq[90] = 392500; + m_levelXPReq[91] = 863550; + m_levelXPReq[92] = 949905; + m_levelXPReq[93] = 1044895; + m_levelXPReq[94] = 1149385; + m_levelXPReq[95] = 1264323; +} + +void Player::SendQuestRequiredSpawns(int32 quest_id){ + bool locked = true; + m_playerSpawnQuestsRequired.readlock(__FUNCTION__, __LINE__); + Quest* quest = GetQuest(quest_id); + if (player_spawn_quests_required.size() > 0 ) { + ZoneServer* zone = GetZone(); + Client* client = zone->GetClientBySpawn(this); + if (!client){ + m_playerSpawnQuestsRequired.releasereadlock(__FUNCTION__, __LINE__); + return; + } + int xxx = player_spawn_quests_required.count(quest_id); + if (player_spawn_quests_required.count(quest_id) > 0){ + vector spawns = *player_spawn_quests_required[quest_id]; + m_playerSpawnQuestsRequired.releasereadlock(__FUNCTION__, __LINE__); + Spawn* spawn = 0; + vector::iterator itr; + for (itr = spawns.begin(); itr != spawns.end();){ + spawn = zone->GetSpawnByID(*itr); + if (spawn) + zone->SendSpawnChanges(spawn, client, false, true); + else { + itr = spawns.erase(itr); + continue; + } + itr++; + } + locked = false; + } + } + if (locked) + m_playerSpawnQuestsRequired.releasereadlock(__FUNCTION__, __LINE__); +} + +void Player::SendHistoryRequiredSpawns(int32 event_id){ + bool locked = true; + m_playerSpawnHistoryRequired.readlock(__FUNCTION__, __LINE__); + if (player_spawn_history_required.size() > 0) { + ZoneServer* zone = GetZone(); + Client* client = zone->GetClientBySpawn(this); + if (!client){ + m_playerSpawnHistoryRequired.releasereadlock(__FUNCTION__, __LINE__); + return; + } + if (player_spawn_history_required.count(event_id) > 0){ + vector spawns = *player_spawn_history_required[event_id]; + m_playerSpawnHistoryRequired.releasereadlock(__FUNCTION__, __LINE__); + Spawn* spawn = 0; + vector::iterator itr; + for (itr = spawns.begin(); itr != spawns.end();){ + spawn = zone->GetSpawnByID(*itr); + if (spawn) + zone->SendSpawnChanges(spawn, client, false, true); + else { + itr = spawns.erase(itr); + continue; + } + itr++; + } + locked = false; + } + } + if (locked) + m_playerSpawnHistoryRequired.releasereadlock(__FUNCTION__, __LINE__); +} + +void Player::AddQuestRequiredSpawn(Spawn* spawn, int32 quest_id){ + if(!spawn || !quest_id) + return; + m_playerSpawnQuestsRequired.writelock(__FUNCTION__, __LINE__); + if(player_spawn_quests_required.count(quest_id) == 0) + player_spawn_quests_required[quest_id] = new vector; + vector* quest_spawns = player_spawn_quests_required[quest_id]; + int32 current_spawn = 0; + for(int32 i=0;isize();i++){ + current_spawn = quest_spawns->at(i); + if (current_spawn == spawn->GetID()){ + m_playerSpawnQuestsRequired.releasewritelock(__FUNCTION__, __LINE__); + return; + } + } + player_spawn_quests_required[quest_id]->push_back(spawn->GetID()); + m_playerSpawnQuestsRequired.releasewritelock(__FUNCTION__, __LINE__); +} + +void Player::AddHistoryRequiredSpawn(Spawn* spawn, int32 event_id){ + if (!spawn || !event_id) + return; + m_playerSpawnHistoryRequired.writelock(__FUNCTION__, __LINE__); + if (player_spawn_history_required.count(event_id) == 0) + player_spawn_history_required[event_id] = new vector; + vector* history_spawns = player_spawn_history_required[event_id]; + vector::iterator itr = find(history_spawns->begin(), history_spawns->end(), spawn->GetID()); + if (itr == history_spawns->end()) + history_spawns->push_back(spawn->GetID()); + m_playerSpawnHistoryRequired.releasewritelock(__FUNCTION__, __LINE__); +} + +int32 PlayerInfo::GetBoatSpawn(){ + return boat_spawn; +} + +void PlayerInfo::SetBoatSpawn(Spawn* spawn){ + if(spawn) + boat_spawn = spawn->GetID(); + else + boat_spawn = 0; +} + +void PlayerInfo::RemoveOldPackets(){ + safe_delete_array(changes); + safe_delete_array(orig_packet); + safe_delete_array(pet_changes); + safe_delete_array(pet_orig_packet); +} + +PlayerControlFlags::PlayerControlFlags(){ + MControlFlags.SetName("PlayerControlFlags::MControlFlags"); + MFlagChanges.SetName("PlayerControlFlags::MFlagChanges"); + flags_changed = false; + flag_changes.clear(); + current_flags.clear(); +} + +PlayerControlFlags::~PlayerControlFlags(){ + flag_changes.clear(); + current_flags.clear(); +} + +bool PlayerControlFlags::ControlFlagsChanged(){ + bool ret; + MFlagChanges.writelock(__FUNCTION__, __LINE__); + ret = flags_changed; + MFlagChanges.releasewritelock(__FUNCTION__, __LINE__); + return ret; +} + +void PlayerControlFlags::SetPlayerControlFlag(int8 param, int8 param_value, bool is_active){ + if (!param || !param_value) + return; + + bool active_changed = false; + MControlFlags.writelock(__FUNCTION__, __LINE__); + active_changed = (current_flags[param][param_value] != is_active); + if (active_changed){ + current_flags[param][param_value] = is_active; + MFlagChanges.writelock(__FUNCTION__, __LINE__); + flag_changes[param][param_value] = is_active ? 1 : 0; + flags_changed = true; + MFlagChanges.releasewritelock(__FUNCTION__, __LINE__); + } + MControlFlags.releasewritelock(__FUNCTION__, __LINE__); +} + +void PlayerControlFlags::SendControlFlagUpdates(Client* client){ + if (!client) + return; + + map* ptr = 0; + map >::iterator itr; + map::iterator itr2; + + MFlagChanges.writelock(__FUNCTION__, __LINE__); + for (itr = flag_changes.begin(); itr != flag_changes.end(); itr++){ + ptr = &itr->second; + for (itr2 = ptr->begin(); itr2 != ptr->end(); itr2++){ + ClientPacketFunctions::SendServerControlFlags(client, itr->first, itr2->first, itr2->second); + } + } + flag_changes.clear(); + flags_changed = false; + MFlagChanges.releasewritelock(__FUNCTION__, __LINE__); +} + +bool Player::ControlFlagsChanged(){ + return control_flags.ControlFlagsChanged(); +} + +void Player::SetPlayerControlFlag(int8 param, int8 param_value, bool is_active){ + control_flags.SetPlayerControlFlag(param, param_value, is_active); +} + +void Player::SendControlFlagUpdates(Client* client){ + control_flags.SendControlFlagUpdates(client); +} + +void Player::LoadLUAHistory(int32 event_id, LUAHistory* history) { + if (m_charLuaHistory.count(event_id) > 0) { + LogWrite(PLAYER__ERROR, 0, "Player", "Attempted to added a dupicate event (%u) to character LUA history", event_id); + safe_delete(history); + return; + } + + m_charLuaHistory[event_id] = history; +} + +void Player::SaveLUAHistory() { + LogWrite(PLAYER__DEBUG, 0, "Player", "Saving LUA History for Player: '%s'", GetName()); + + map::iterator itr; + for (itr = m_charLuaHistory.begin(); itr != m_charLuaHistory.end(); itr++) { + if (itr->second->SaveNeeded) { + database.SaveCharacterLUAHistory(this, itr->first, itr->second->Value, itr->second->Value2); + itr->second->SaveNeeded = false; + } + } +} + +void Player::UpdateLUAHistory(int32 event_id, int32 value, int32 value2) { + LUAHistory* hd = 0; + + if (m_charLuaHistory.count(event_id) > 0) + hd = m_charLuaHistory[event_id]; + else { + hd = new LUAHistory; + m_charLuaHistory[event_id] = hd; + } + + hd->Value = value; + hd->Value2 = value2; + hd->SaveNeeded = true; + SendHistoryRequiredSpawns(event_id); +} + +LUAHistory* Player::GetLUAHistory(int32 event_id) { + LUAHistory* ret = 0; + + if (m_charLuaHistory.count(event_id) > 0) + ret = m_charLuaHistory[event_id]; + + return ret; +} + diff --git a/EQ2/source/WorldServer/Player.h b/EQ2/source/WorldServer/Player.h new file mode 100644 index 000000000..a469bcea0 --- /dev/null +++ b/EQ2/source/WorldServer/Player.h @@ -0,0 +1,939 @@ +/* + EQ2Emulator: Everquest II Server Emulator + Copyright (C) 2007 EQ2EMulator Development Team (http://www.eq2emulator.net) + + This file is part of EQ2Emulator. + + EQ2Emulator is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + EQ2Emulator is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with EQ2Emulator. If not, see . +*/ +#ifndef __EQ2_PLAYER__ +#define __EQ2_PLAYER__ + +#include "Entity.h" +#include "Items/Items.h" +#include "Factions.h" +#include "Skills.h" +#include "Quests.h" +#include "MutexMap.h" +#include "Guilds/Guild.h" +#include "Collections/Collections.h" +#include "Recipes/Recipe.h" +#include "Titles.h" +#include "Languages.h" +#include "Achievements/Achievements.h" +#include +#include + +#define CF_COMBAT_EXPERIENCE_ENABLED 0 +#define CF_ENABLE_CHANGE_LASTNAME 1 +#define CF_FOOD_AUTO_CONSUME 2 +#define CF_DRINK_AUTO_CONSUME 3 +#define CF_AUTO_ATTACK 4 +#define CF_RANGED_AUTO_ATTACK 5 +#define CF_QUEST_EXPERIENCE_ENABLED 6 +#define CF_CHASE_CAMERA_MAYBE 7 +#define CF_100 8 +#define CF_200 9 +#define CF_IS_SITTING 10 /*CAN'T CAST OR ATTACK*/ +#define CF_800 11 +#define CF_ANONYMOUS 12 +#define CF_ROLEPLAYING 13 +#define CF_AFK 14 +#define CF_LFG 15 +#define CF_LFW 16 +#define CF_HIDE_HOOD 17 +#define CF_HIDE_HELM 18 +#define CF_SHOW_ILLUSION 19 +#define CF_ALLOW_DUEL_INVITES 20 +#define CF_ALLOW_TRADE_INVITES 21 +#define CF_ALLOW_GROUP_INVITES 22 +#define CF_ALLOW_RAID_INVITES 23 +#define CF_ALLOW_GUILD_INVITES 24 +#define CF_2000000 25 +#define CF_4000000 26 +#define CF_DEFENSE_SKILLS_AT_MAX_QUESTIONABLE 27 +#define CF_SHOW_GUILD_HERALDRY 28 +#define CF_SHOW_CLOAK 29 +#define CF_IN_PVP 30 +#define CF_IS_HATED 31 +#define CF2_1 32 +#define CF2_2 33 +#define CF2_4 34 +#define CF2_ALLOW_LON_INVITES 35 +#define CF2_SHOW_RANGED 36 +#define CF2_ALLOW_VOICE_INVITES 37 +#define CF2_CHARACTER_BONUS_EXPERIENCE_ENABLED 38 +#define CF2_80 39 +#define CF2_100 40 /* hide achievments*/ +#define CF2_200 41 +#define CF2_400 42 +#define CF2_800 43 /* enable facebook updates*/ +#define CF2_1000 44 /* enable twitter updates*/ +#define CF2_2000 45 /* enable eq2 player updates */ +#define CF2_4000 46 /*eq2 players, link to alt chars */ +#define CF2_8000 47 +#define CF2_10000 48 +#define CF2_20000 49 +#define CF2_40000 50 +#define CF2_80000 51 +#define CF2_100000 52 +#define CF2_200000 53 +#define CF2_400000 54 +#define CF2_800000 55 +#define CF2_1000000 56 +#define CF2_2000000 57 +#define CF2_4000000 58 +#define CF2_8000000 59 +#define CF2_10000000 60 +#define CF2_20000000 61 +#define CF2_40000000 62 +#define CF2_80000000 63 +#define CF_MAXIMUM_FLAG 63 +#define CF_HIDE_STATUS 49 /* !!FORTESTING ONLY!! */ +#define CF_GM_HIDDEN 50 /* !!FOR TESTING ONLY!! */ + +#define UPDATE_ACTIVITY_FALLING 0 +#define UPDATE_ACTIVITY_RUNNING 128 +#define UPDATE_ACTIVITY_RIDING_BOAT 256 +#define UPDATE_ACTIVITY_JUMPING 1024 +#define UPDATE_ACTIVITY_IN_WATER_ABOVE 6144 +#define UPDATE_ACTIVITY_IN_WATER_BELOW 6272 +#define UPDATE_ACTIVITY_SITING 6336 +#define UPDATE_ACTIVITY_DROWNING 14464 +#define UPDATE_ACTIVITY_DROWNING2 14336 + +#define NUM_MAINTAINED_EFFECTS 30 +#define NUM_SPELL_EFFECTS 45 + +/* Character History Type Defines */ +#define HISTORY_TYPE_NONE 0 +#define HISTORY_TYPE_DEATH 1 +#define HISTORY_TYPE_DISCOVERY 2 +#define HISTORY_TYPE_XP 3 + +/* Spell Status */ +#define SPELL_STATUS_QUEUE 4 +#define SPELL_STATUS_LOCK 66 + +/* Character History Sub Type Defines */ +#define HISTORY_SUBTYPE_NONE 0 +#define HISTORY_SUBTYPE_ADVENTURE 1 +#define HISTORY_SUBTYPE_TRADESKILL 2 +#define HISTORY_SUBTYPE_QUEST 3 +#define HISTORY_SUBTYPE_AA 4 +#define HISTORY_SUBTYPE_ITEM 5 +#define HISTORY_SUBTYPE_LOCATION 6 + + +/// Character history data, should match the `character_history` table in the DB +struct HistoryData { + int32 Value; + int32 Value2; + char Location[200]; + int32 EventID; + int32 EventDate; +}; + +/// History set through the LUA system +struct LUAHistory { + int32 Value; + int32 Value2; + bool SaveNeeded; +}; + +struct SpellBookEntry{ + int32 spell_id; + int8 tier; + int32 type; + sint32 slot; + int32 recast_available; + int8 status; + int16 recast; + int32 timer; + bool save_needed; +}; + +#define QUICKBAR_NORMAL 1 +#define QUICKBAR_INV_SLOT 2 +#define QUICKBAR_MACRO 3 +#define QUICKBAR_TEXT_CMD 4 +#define QUICKBAR_ITEM 6 + +#define EXP_DISABLED_STATE 0 +#define EXP_ENABLED_STATE 1 +#define MELEE_COMBAT_STATE 16 +#define RANGE_COMBAT_STATE 32 + +struct QuickBarItem{ + bool deleted; + int32 hotbar; + int32 slot; + int32 type; + int16 icon; + int16 icon_type; + int32 id; + int8 tier; + int32 unique_id; + EQ2_16BitString text; +}; + +struct LoginAppearances { + bool deleted; + int16 equip_type; + int8 red; + int8 green; + int8 blue; + int8 h_red; + int8 h_green; + int8 h_blue; + bool update_needed; +}; + +class PlayerLoginAppearance { +public: + PlayerLoginAppearance() { appearanceList = new map; } + ~PlayerLoginAppearance() { } + + void AddEquipmentToUpdate(int8 slot_id, LoginAppearances* equip) + { + //LoginAppearances data; + //data.equip_type = equip->equip_type; + //appearanceList[slot_id] = data; + } + + void DeleteEquipmentFromUpdate(int8 slot_id, LoginAppearances* equip) + { + //LoginAppearances data; + //data.deleted = equip->deleted; + //data.update_needed = true; + //appearanceList[slot_id] = data; + } + + void RemoveEquipmentUpdates() + { + appearanceList->clear(); + safe_delete(appearanceList); + } + +private: + map* appearanceList; +}; + + +struct InstanceData{ + int32 db_id; + int32 instance_id; + int32 zone_id; + int8 zone_instance_type; + string zone_name; + int32 last_success_timestamp; + int32 last_failure_timestamp; + int32 success_lockout_time; + int32 failure_lockout_time; +}; + +class CharacterInstances { +public: + CharacterInstances(); + ~CharacterInstances(); + + ///Adds an instance data to the player with the given data + ///The unique id for this record in the database + ///The id of the instance + ///The success timestamp + ///The failure timestamp + ///The lockout time, in secs, for completing the instance + ///The lockout time, in secs, for failing the instance + ///The id of the zone + ///The type of instance of the zone + ///The name of the zone + void AddInstance(int32 db_id, int32 instance_id, int32 last_success_timestamp, int32 last_failure_timestamp, int32 success_lockout_time, int32 failure_lockout_time, int32 zone_id, int8 zone_instancetype, string zone_name); + + ///Clears all instance data + void RemoveInstances(); + + ///Removes the instace with the given zone id + ///The zone id of the instance to remove + ///True if the instance was found and removed + bool RemoveInstanceByZoneID(int32 zone_id); + + ///Removes the instance with the given instance id + ///the instance id of the instance to remove + ///True if instance was found and removed + bool RemoveInstanceByInstanceID(int32 instance_id); + + ///Gets the instance with the given zone id + ///The zone id of the instance to get + ///InstanceData* of the instance record for the given zone id + InstanceData* FindInstanceByZoneID(int32 zone_id); + + ///Gets the instance with the given database id + ///The database id of the instance to get + ///InstanceData* of the instance record for the given database id + InstanceData* FindInstanceByDBID(int32 db_id); + + ///Gets the instance with the given instance id + ///The instance id of the instance to get + ///InstanceData* of the instance record for the given instance id + InstanceData* FindInstanceByInstanceID(int32 instance_id); + + ///Gets a list of all the lockout instances + vector GetLockoutInstances(); + + ///Gets a list of all the persistent instances + vector GetPersistentInstances(); + + ///Check the timers for the instances + ///player we are checking the timers for + void ProcessInstanceTimers(Player* player); + + ///Gets the total number of instances + int32 GetInstanceCount(); +private: + vector instanceList; + Mutex m_instanceList; +}; + +class Player; +struct PlayerGroup; +struct GroupMemberInfo; +struct Statistic; +struct Mail; +class PlayerInfo { +public: + ~PlayerInfo(); + PlayerInfo(Player* in_player); + + EQ2Packet* serialize(int16 version); + PacketStruct* serialize2(int16 version); + EQ2Packet* serialize3(PacketStruct* packet, int16 version); + EQ2Packet* serializePet(int16 version); + void CalculateXPPercentages(); + void CalculateTSXPPercentages(); + void SetHouseZone(int32 id); + void SetBindZone(int32 id); + void SetBindX(float x); + void SetBindY(float y); + void SetBindZ(float z); + void SetBindHeading(float heading); + void SetAccountAge(int16 days); + int32 GetHouseZoneID(); + int32 GetBindZoneID(); + float GetBindZoneX(); + float GetBindZoneY(); + float GetBindZoneZ(); + float GetBindZoneHeading(); + float GetBoatX() { return boat_x_offset; } + float GetBoatY() { return boat_y_offset; } + float GetBoatZ() { return boat_z_offset; } + int32 GetBoatSpawn(); + void SetBoatX(float x) { boat_x_offset = x; } + void SetBoatY(float y) { boat_y_offset = y; } + void SetBoatZ(float z) { boat_z_offset = z; } + void SetBoatSpawn(Spawn* boat); + void RemoveOldPackets(); + +private: + int32 house_zone_id; + int32 bind_zone_id; + float bind_x; + float bind_y; + float bind_z; + float bind_heading; + uchar* changes; + uchar* orig_packet; + uchar* pet_changes; + uchar* pet_orig_packet; + InfoStruct* info_struct; + Player* player; + float boat_x_offset; + float boat_y_offset; + float boat_z_offset; + int32 boat_spawn; +}; + +class PlayerControlFlags{ +public: + PlayerControlFlags(); + ~PlayerControlFlags(); + + void SetPlayerControlFlag(int8 param, int8 param_value, bool is_active); + bool ControlFlagsChanged(); + void SendControlFlagUpdates(Client* client); +private: + bool flags_changed; + map > flag_changes; + map > current_flags; + Mutex MControlFlags; + Mutex MFlagChanges; +}; + +class Player : public Entity{ +public: + Player(); + virtual ~Player(); + EQ2Packet* serialize(Player* player, int16 version); + //int8 GetMaxArtLevel(){ return info->GetInfo()->max_art_level; } + //int8 GetArtLevel(){ return info->GetInfo()->art_level; } + + + PlayerInfo* GetPlayerInfo(); + void SetCharSheetChanged(bool val); + bool GetCharSheetChanged(); + void AddFriend(const char* name, bool save); + bool IsFriend(const char* name); + void RemoveFriend(const char* name); + map* GetFriends(); + void AddIgnore(const char* name, bool save); + bool IsIgnored(const char* name); + void RemoveIgnore(const char* name); + map* GetIgnoredPlayers(); + + // JA: POI Discoveries + map >* GetPlayerDiscoveredPOIs(); + void AddPlayerDiscoveredPOI(int32 location_id); + // + + EQ2Packet* Move(float x, float y, float z, int16 version, float heading = -1.0f); + + /*void SetMaxArtLevel(int8 new_max){ + max_art_level = new_max; + } + void SetArtLevel(int8 new_lvl){ + art_level = new_lvl; + }*/ + bool WasSentSpawn(int32 spawn_id); + bool NeedsSpawnResent(Spawn* spawn); + void SetSideSpeed(float side_speed, bool updateFlags = true) { + SetPos(&appearance.pos.SideSpeed, side_speed, updateFlags); + } + float GetSideSpeed() { + return appearance.pos.SideSpeed; + } + void AddMaintainedSpell(LuaSpell* spell); + void AddSpellEffect(LuaSpell* spell); + void RemoveMaintainedSpell(LuaSpell* spell); + void RemoveSpellEffect(LuaSpell* spell); + bool HasActiveMaintainedSpell(Spell* spell, Spawn* target); + bool HasActiveSpellEffect(Spell* spell, Spawn* target); + void AddQuickbarItem(int32 bar, int32 slot, int32 type, int16 icon, int16 icon_type, int32 id, int8 tier, int32 unique_id, const char* text, bool update = true); + void RemoveQuickbarItem(int32 bar, int32 slot, bool update = true); + void MoveQuickbarItem(int32 id, int32 new_slot); + void ClearQuickbarItems(); + PlayerItemList* GetPlayerItemList(); + PlayerItemList item_list; + PlayerSkillList skill_list; + Skill* GetSkillByName(const char* name, bool check_update = false); + PlayerSkillList* GetSkills(); + bool DamageEquippedItems(int8 amount = 10, Client* client = 0); + vector EquipItem(int16 index, int16 version, int8 slot_id = 255); + bool CanEquipItem(Item* item); + void SetEquippedItemAppearances(); + vector UnequipItem(int16 index, sint32 bag_id, int8 slot, int16 version); + EQ2Packet* SwapEquippedItems(int8 slot1, int8 slot2, int16 version); + EQ2Packet* RemoveInventoryItem(int8 bag_slot, int8 slot); + EQ2Packet* SendInventoryUpdate(int16 version); + EQ2Packet* SendBagUpdate(int32 bag_unique_id, int16 version); + void SendQuestRequiredSpawns(int32 quest_id); + void SendHistoryRequiredSpawns(int32 event_id); + map* GetItemList(); + map* GetBankItemList(); + vector* GetEquippedItemList(); + Quest* SetStepComplete(int32 quest_id, int32 step); + Quest* AddStepProgress(int32 quest_id, int32 step, int32 progress); + int32 GetStepProgress(int32 quest_id, int32 step_id); + bool AddItem(Item* item); + bool AddItemToBank(Item* item); + int16 GetSpellSlotMappingCount(); + int16 GetSpellPacketCount(); + Quest* GetQuest(int32 quest_id); + bool GetQuestStepComplete(int32 quest_id, int32 step_id); + int16 GetQuestStep(int32 quest_id); + int16 GetTaskGroupStep(int32 quest_id); + int8 GetSpellTier(int32 id); + void SetSpellStatus(Spell* spell, int8 status); + void RemoveSpellStatus(Spell* spell, int8 status); + EQ2Packet* GetSpellBookUpdatePacket(int16 version); + EQ2Packet* GetSpellSlotMappingPacket(int16 version); + int32 GetCharacterID(); + void SetCharacterID(int32 new_id); + EQ2Packet* GetQuickbarPacket(int16 version); + vector* GetQuickbar(); + bool UpdateQuickbarNeeded(); + void ResetQuickbarNeeded(); + void set_character_flag(int flag); + void reset_character_flag(int flag); + void toggle_character_flag(int flag); + bool get_character_flag(int flag); + void AddCoins(int64 val); + bool RemoveCoins(int64 val); + /// Checks to see if the player has the given amount of coins + /// Amount of coins to check + /// True if the player has enough coins + bool HasCoins(int64 val); + void AddSkill(int32 skill_id, int16 current_val, int16 max_val, bool save_needed = false); + void RemoveSkillFromDB(Skill* skill, bool save = false); + void AddSpellBookEntry(int32 spell_id, int8 tier, sint32 slot, int32 type, int32 timer, bool save_needed = false); + SpellBookEntry* GetSpellBookSpell(int32 spell_id); + vector* GetSpellsSaveNeeded(); + sint32 GetFreeSpellBookSlot(int32 type); + /// Get a vector of spell ids for all spells in the spell book for the given skill + /// The id of the skill to check + /// A vector of int32's of the spell id's + vector GetSpellBookSpellIDBySkill(int32 skill_id); + EQ2Packet* MoveInventoryItem(sint32 to_bag_id, int16 from_index, int8 new_slot, int8 charges, int16 version = 1); + bool IsPlayer(){ return true; } + MaintainedEffects* GetFreeMaintainedSpellSlot(); + MaintainedEffects* GetMaintainedSpell(int32 id); + MaintainedEffects* GetMaintainedSpellBySlot(int8 slot); + MaintainedEffects* GetMaintainedSpells(); + SpellEffects* GetFreeSpellEffectSlot(); + SpellEffects* GetSpellEffects(); + int32 GetCoinsCopper(); + int32 GetCoinsSilver(); + int32 GetCoinsGold(); + int32 GetCoinsPlat(); + int32 GetBankCoinsCopper(); + int32 GetBankCoinsSilver(); + int32 GetBankCoinsGold(); + int32 GetBankCoinsPlat(); + float GetXPVitality(); + float GetTSXPVitality(); + bool AdventureXPEnabled(); + bool TradeskillXPEnabled(); + void SetNeededXP(int32 val); + void SetNeededXP(); + void SetXP(int32 val); + void SetNeededTSXP(int32 val); + void SetNeededTSXP(); + void SetTSXP(int32 val); + int32 GetNeededXP(); + int32 GetXPDebt(); + int32 GetXP(); + int32 GetNeededTSXP(); + int32 GetTSXP(); + bool AddXP(int32 xp_amount); + bool AddTSXP(int32 xp_amount); + bool DoubleXPEnabled(); + float CalculateXP(Spawn* victim); + float CalculateTSXP(int8 level); + void InCombat(bool val, bool range = false); + void PrepareIncomingMovementPacket(int32 len, uchar* data, int16 version); + uchar* GetMovementPacketData(){ + return movement_packet; + } + void AddSpawnInfoPacketForXOR(int32 spawn_id, uchar* packet, int16 packet_size); + uchar* GetSpawnInfoPacketForXOR(int32 spawn_id); + void AddSpawnVisPacketForXOR(int32 spawn_id, uchar* packet, int16 packet_size); + uchar* GetSpawnVisPacketForXOR(int32 spawn_id); + void AddSpawnPosPacketForXOR(int32 spawn_id, uchar* packet, int16 packet_size); + uchar* GetSpawnPosPacketForXOR(int32 spawn_id); + uchar* GetTempInfoPacketForXOR(); + uchar* GetTempVisPacketForXOR(); + uchar* GetTempPosPacketForXOR(); + uchar* SetTempInfoPacketForXOR(int16 size); + uchar* SetTempVisPacketForXOR(int16 size); + uchar* SetTempPosPacketForXOR(int16 size); + bool CheckPlayerInfo(); + void CalculateLocation(); + void SetSpawnDeleteTime(int32 id, int32 time); + int32 GetSpawnDeleteTime(int32 id); + void ClearEverything(); + bool IsResurrecting(); + void SetResurrecting(bool val); + int8 GetArrowColor(int8 spawn_level); + int8 GetTSArrowColor(int8 level); + Spawn* GetSpawnByIndex(int16 index); + int16 GetIndexForSpawn(Spawn* spawn); + bool WasSpawnRemoved(Spawn* spawn); + void RemoveSpawn(Spawn* spawn); + void ClearRemovedSpawn(Spawn* spawn); + bool ShouldSendSpawn(Spawn* spawn); + + map* GetPlayerSpawnMap(){ + return &player_spawn_map; + } + map* GetPlayerSpawnIndexMap(){ + return &player_spawn_index_map; + } + Spawn* GetSpawnWithPlayerID(int32 id){ + if (player_spawn_id_map.count(id) > 0) + return player_spawn_id_map[id]; + return 0; + } + int32 GetIDWithPlayerSpawn(Spawn* spawn){ + if (player_spawn_reverse_id_map.count(spawn) > 0) + return player_spawn_reverse_id_map[spawn]; + return 0; + } + PacketStruct* GetQuestJournalPacket(bool all_quests, int16 version, int32 crc, int32 current_quest_id); + void RemoveQuest(int32 id, bool delete_quest); + vector* CheckQuestsChatUpdate(Spawn* spawn); + vector* CheckQuestsItemUpdate(Item* item); + vector* CheckQuestsLocationUpdate(); + vector* CheckQuestsKillUpdate(Spawn* spawn,bool update = true); + vector* CheckQuestsSpellUpdate(Spell* spell); + void CheckQuestsCraftUpdate(Item* item, int32 qty); + void CheckQuestsHarvestUpdate(Item* item, int32 qty); + vector* CheckQuestsFailures(); + bool CheckQuestRemoveFlag(Spawn* spawn); + int8 CheckQuestFlag(Spawn* spawn); + bool CheckQuestRequired(Spawn* spawn); + void AddQuestRequiredSpawn(Spawn* spawn, int32 quest_id); + void AddHistoryRequiredSpawn(Spawn* spawn, int32 event_id); + int16 spawn_index; + int32 spawn_id; + map player_spawn_index_map; + map player_spawn_map; + map player_spawn_id_map; + map player_spawn_reverse_id_map; + map*> player_spawn_quests_required; + map*> player_spawn_history_required; + Mutex m_playerSpawnQuestsRequired; + Mutex m_playerSpawnHistoryRequired; + Quest* GetCompletedQuest(int32 quest_id); + void AddCompletedQuest(Quest* quest); + map pending_quests; + map player_quests; + map* GetPlayerQuests(); + map* GetCompletedPlayerQuests(); + void LockQuests(); + void UnlockQuests(); + void SetFactionValue(int32 faction_id, sint32 value){ + factions.SetFactionValue(faction_id, value); + } + PlayerFaction* GetFactions(){ + return &factions; + } + vector GetQuestIDs(); + map macro_icons; + + bool HasPendingLootItems(int32 id); + bool HasPendingLootItem(int32 id, int32 item_id); + vector* GetPendingLootItems(int32 id); + void RemovePendingLootItem(int32 id, int32 item_id); + void RemovePendingLootItems(int32 id); + void AddPendingLootItems(int32 id, vector* items); + bool HasSpell(int32 spell_id, int8 tier = 255, bool include_higher_tiers = false); + bool HasRecipeBook(int32 recipe_id); + void AddPlayerStatistic(int32 stat_id, sint32 stat_value, int32 stat_date); + void UpdatePlayerStatistic(int32 stat_id, sint32 stat_value, bool overwrite = false); + sint64 GetPlayerStatisticValue(int32 stat_id); + void WritePlayerStatistics(); + + + + //PlayerGroup* GetGroup(); + void SetGroup(PlayerGroup* group); + bool IsGroupMember(Entity* player); + void SetGroupInformation(PacketStruct* packet); + + + + void ResetSavedSpawns(); + bool IsReturningFromLD(); + void SetReturningFromLD(bool val); + bool CheckLevelStatus(int16 new_level); + int16 GetLastMovementActivity(); + void DestroyQuests(); + string GetAwayMessage() const { return away_message; } + void SetAwayMessage(string val) { away_message = val; } + void SetRangeAttack(bool val); + bool GetRangeAttack(); + ZoneServer* GetGroupMemberInZone(int32 zone_id); + bool AddMail(Mail* mail); + MutexMap* GetMail(); + Mail* GetMail(int32 mail_id); + void DeleteMail(bool from_database = false); + void DeleteMail(int32 mail_id, bool from_database = false); + CharacterInstances* GetCharacterInstances() { return &character_instances; } + void SetIsTracking(bool val) { is_tracking = val; } + bool GetIsTracking() const { return is_tracking; } + void SetBiography(string new_biography) { biography = new_biography; } + string GetBiography() const { return biography; } + void SetPlayerAdventureClass(int8 new_class); + void SetGuild(Guild* new_guild) { guild = new_guild; } + Guild* GetGuild() { return guild; } + void AddSkillBonus(int32 spell_id, int32 skill_id, float value); + SkillBonus* GetSkillBonus(int32 spell_id); + virtual void RemoveSkillBonus(int32 spell_id); + bool HasFreeBankSlot(); + int8 FindFreeBankSlot(); + PlayerCollectionList * GetCollectionList() { return &collection_list; } + PlayerRecipeList * GetRecipeList() { return &recipe_list; } + PlayerRecipeBookList * GetRecipeBookList() { return &recipebook_list; } + PlayerAchievementList * GetAchievementList() { return &achievement_list; } + PlayerAchievementUpdateList * GetAchievementUpdateList() { return &achievement_update_list; } + void SetPendingCollectionReward(Collection *collection) { pending_collection_reward = collection; } + Collection * GetPendingCollectionReward() { return pending_collection_reward; } + void RemoveSpellBookEntry(int32 spell_id, bool remove_passives_from_list = true); + int8 GetSpellSlot(int32 spell_id); + void AddTitle(int32 title_id, const char *name, int8 prefix, bool save_needed = false); + void AddAAEntry(int16 template_id, int8 tab_id, int32 aa_id, int16 order, int8 treeid); + PlayerTitlesList* GetPlayerTitles() { return &player_titles_list; } + void AddLanguage(int32 id, const char *name, bool save_needed = false); + PlayerLanguagesList* GetPlayerLanguages() { return &player_languages_list; } + bool HasLanguage(int32 id); + bool HasLanguage(const char* name); + bool CanReceiveQuest(int32 quest_id); + float GetBoatX() { if (info) return info->GetBoatX(); return 0; } + float GetBoatY() { if (info) return info->GetBoatY(); return 0; } + float GetBoatZ() { if (info) return info->GetBoatZ(); return 0; } + int32 GetBoatSpawn() { if (info) return info->GetBoatSpawn(); return 0; } + void SetBoatX(float x) { if (info) info->SetBoatX(x); } + void SetBoatY(float y) { if (info) info->SetBoatY(y); } + void SetBoatZ(float z) { if (info) info->SetBoatZ(z); } + void SetBoatSpawn(Spawn* boat) { if (info) info->SetBoatSpawn(boat); } + Mutex* GetGroupBuffMutex(); + void SetPendingDeletion(bool val) { pending_deletion = val; } + bool GetPendingDeletion() { return pending_deletion; } + float GetPosPacketSpeed() { return pos_packet_speed; } + bool ControlFlagsChanged(); + void SetPlayerControlFlag(int8 param, int8 param_value, bool is_active); + void SendControlFlagUpdates(Client* client); + + /// Casts all the passive spells for the player, only call after zoning is complete. + void ApplyPassiveSpells(); + + /// Removes all passive spell effects from the player and clears the passive list + void RemoveAllPassives(); + + /// Gets the current recipie ID + int32 GetCurrentRecipe() { return current_recipe; } + + /// Sets the current recipie ID + /// Id of the new recipe + void SetCurrentRecipe(int32 val) { current_recipe = val; } + + /// Reset the pet window info + void ResetPetInfo(); + + void ProcessCombat(); + + /* Character history stuff */ + + /// Adds a new history event to the player + /// The history type + /// The history sub type + /// The first history value + /// The second history value + void UpdatePlayerHistory(int8 type, int8 subtype, int32 value, int32 value2 = 0); + + /// Checks to see if the player has discovered the location + /// The ID of the location to check + /// True if the player has discovered the location + bool DiscoveredLocation(int32 locationID); + + /// Load the players history from the database + /// The history type + /// The history sub type + /// The history data + void LoadPlayerHistory(int8 type, int8 subtype, HistoryData* hd); + + /// Save the player's history to the database + void SaveHistory(); + + + /* New functions for spell locking and unlocking*/ + /// Lock all Spells, Combat arts, and Abilities (not trade skill spells) + void LockAllSpells(); + + /// Unlocks all Spells, Combat arts, and Abilities (not trade skill spells) + void UnlockAllSpells(bool modify_recast = false); + + /// Locks the given spell as well as all spells with a shared timer + void LockSpell(Spell* spell, int16 recast); + + /// Unlocks the given spell as well as all spells with shared timers + void UnlockSpell(Spell* spell); + + /// Locks all ts spells and unlocks all normal spells + void LockTSSpells(); + + /// Unlocks all ts spells and locks all normal spells + void UnlockTSSpells(); + + /// Queue the given spell + void QueueSpell(Spell* spell); + + /// Unqueue the given spell + void UnQueueSpell(Spell* spell); + + ///Get all the spells the player has with the given id + vector GetSpellBookSpellsByTimer(int32 timerID); + + PacketStruct* GetQuestJournalPacket(Quest* quest, int16 version, int32 crc); + + void SetSpawnInfoStruct(PacketStruct* packet) { safe_delete(spawn_info_struct); spawn_info_struct = packet; } + void SetSpawnVisStruct(PacketStruct* packet) { safe_delete(spawn_vis_struct); spawn_vis_struct = packet; } + void SetSpawnPosStruct(PacketStruct* packet) { safe_delete(spawn_pos_struct); spawn_pos_struct = packet; } + void SetSpawnHeaderStruct(PacketStruct* packet) { safe_delete(spawn_header_struct); spawn_header_struct = packet; } + void SetSpawnFooterStruct(PacketStruct* packet) { safe_delete(spawn_footer_struct); spawn_footer_struct = packet; } + void SetSignFooterStruct(PacketStruct* packet) { safe_delete(sign_footer_struct); sign_footer_struct = packet; } + void SetWidgetFooterStruct(PacketStruct* packet) { safe_delete(widget_footer_struct); widget_footer_struct = packet; } + + PacketStruct* GetSpawnInfoStruct() { return spawn_info_struct; } + PacketStruct* GetSpawnVisStruct() { return spawn_vis_struct; } + PacketStruct* GetSpawnPosStruct() { return spawn_pos_struct; } + PacketStruct* GetSpawnHeaderStruct() { return spawn_header_struct; } + PacketStruct* GetSpawnFooterStruct() { return spawn_footer_struct; } + PacketStruct* GetSignFooterStruct() { return sign_footer_struct; } + PacketStruct* GetWidgetFooterStruct() { return widget_footer_struct; } + + Mutex info_mutex; + Mutex pos_mutex; + Mutex vis_mutex; + + void SetTempMount(int32 id) { tmp_mount_model = id; } + int32 GetTempMount() { return tmp_mount_model; } + + void SetTempMountColor(EQ2_Color* color) { tmp_mount_color = *color; } + EQ2_Color GetTempMountColor() { return tmp_mount_color; } + + void SetTempMountSaddleColor(EQ2_Color* color) { tmp_mount_saddle_color = *color; } + EQ2_Color GetTempMountSaddleColor() { return tmp_mount_saddle_color; } + + + void LoadLUAHistory(int32 event_id, LUAHistory* history); + void SaveLUAHistory(); + void UpdateLUAHistory(int32 event_id, int32 value, int32 value2); + LUAHistory* GetLUAHistory(int32 event_id); + + + + + + + + + AppearanceData SavedApp; + CharFeatures SavedFeatures; + bool custNPC; + Entity* custNPCTarget; + // bot index, spawn id + map SpawnedBots; + +private: + bool range_attack; + int16 last_movement_activity; + bool returning_from_ld; + PlayerGroup* group; + + float test_x; + float test_y; + float test_z; + int32 test_time; + map > pending_loot_items; + Mutex MSpellsBook; + Mutex MRecipeBook; + Mutex MPlayerQuests; + map current_quest_flagged; + PlayerFaction factions; + map completed_quests; + map player_removed_spawns; + bool charsheet_changed; + map spawn_vis_packet_list; + map spawn_info_packet_list; + map spawn_pos_packet_list; + uchar* movement_packet; + uchar* old_movement_packet; + uchar* spell_orig_packet; + uchar* spell_xor_packet; + int16 spell_count; + //float speed; + int16 target_id; + Spawn* combat_target; + int32 char_id; + bool quickbar_updated; + bool resurrecting; + PlayerInfo* info; + vector spells; + vector quickbar_items; + map statistics; + void RemovePlayerStatistics(); + map friend_list; + map ignore_list; + bool pending_deletion; + float pos_packet_speed; + PlayerControlFlags control_flags; + + // JA: POI Discoveries + map > players_poi_list; + + // Jabantiz: Passive spell list, just stores spell id's + vector passive_spells; + + /// Adds a new passive spell to the list + /// Spell id to add + /// Tier of spell to add + void AddPassiveSpell(int32 id, int8 tier); + + /// Removes a passive spell from the list + /// Spell id to remove + /// Tier of spell to remove + /// Remove the spell from this players passive list, default true + void RemovePassive(int32 id, int8 tier, bool remove_from_list = true); + + CharacterInstances character_instances; + string away_message; + string biography; + MutexMap mail_list; + bool is_tracking; + Guild* guild; + PlayerCollectionList collection_list; + Collection * pending_collection_reward; + PlayerTitlesList player_titles_list; + PlayerRecipeList recipe_list; + PlayerLanguagesList player_languages_list; + PlayerRecipeBookList recipebook_list; + PlayerAchievementList achievement_list; + PlayerAchievementUpdateList achievement_update_list; + // Need to keep track of the recipe the player is crafting as not all crafting packets have this info + int32 current_recipe; + + void HandleHistoryNone(int8 subtype, int32 value, int32 value2); + void HandleHistoryDeath(int8 subtype, int32 value, int32 value2); + void HandleHistoryDiscovery(int8 subtype, int32 value, int32 value2); + void HandleHistoryXP(int8 subtype, int32 value, int32 value2); + + /// + void ModifySpellStatus(SpellBookEntry* spell, sint16 value, bool modify_recast = true, int16 recast = 0); + void AddSpellStatus(SpellBookEntry* spell, sint16 value, bool modify_recast = true, int16 recast = 0); + void RemoveSpellStatus(SpellBookEntry* spell, sint16 value, bool modify_recast = true, int16 recast = 0); + void InitXPTable(); + map m_levelXPReq; + + //The following variables are for serializing spawn packets + PacketStruct* spawn_pos_struct; + PacketStruct* spawn_info_struct; + PacketStruct* spawn_vis_struct; + PacketStruct* spawn_header_struct; + PacketStruct* spawn_footer_struct; + PacketStruct* sign_footer_struct; + PacketStruct* widget_footer_struct; + uchar* spawn_tmp_vis_xor_packet; + uchar* spawn_tmp_pos_xor_packet; + uchar* spawn_tmp_info_xor_packet; + + // Character history, map > > + map > > m_characterHistory; + + map m_charLuaHistory; + + int32 tmp_mount_model; + EQ2_Color tmp_mount_color; + EQ2_Color tmp_mount_saddle_color; +}; +#pragma pack() +#endif diff --git a/EQ2/source/WorldServer/PlayerGroups.cpp b/EQ2/source/WorldServer/PlayerGroups.cpp new file mode 100644 index 000000000..6d53c6887 --- /dev/null +++ b/EQ2/source/WorldServer/PlayerGroups.cpp @@ -0,0 +1,719 @@ +/* +EQ2Emulator: Everquest II Server Emulator +Copyright (C) 2007 EQ2EMulator Development Team (http://www.eq2emulator.net) + +This file is part of EQ2Emulator. + +EQ2Emulator is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +EQ2Emulator is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with EQ2Emulator. If not, see . +*/ + +#include "PlayerGroups.h" +#include "../common/Log.h" +#include "World.h" +#include "Spells.h" +#include "LuaInterface.h" +#include "Bots/Bot.h" + +extern ZoneList zone_list; + +/******************************************************** PlayerGroup ********************************************************/ + +PlayerGroup::PlayerGroup(int32 id) { + m_id = id; +} + +PlayerGroup::~PlayerGroup() { + Disband(); +} + +bool PlayerGroup::AddMember(Entity* member) { + // Check to make sure the entity we are adding is valid + if (!member) { + LogWrite(GROUP__ERROR, 0, "Group", "New member is null"); + return false; + } + + // Make sure entity we are adding isn't already in a group by checking if it has a GroupMemberInfo pointer + if (member->GetGroupMemberInfo()) { + LogWrite(GROUP__ERROR, 0, "Group", "New member (%s) already has a group", member->GetName()); + return false; + } + + // Create a new GroupMemberInfo and assign it to the new member + GroupMemberInfo* gmi = new GroupMemberInfo; + gmi->group_id = m_id; + gmi->member = member; + gmi->leader = false; + if (member->IsPlayer()) + gmi->client = member->GetZone()->GetClientBySpawn(member); + else + gmi->client = 0; + + member->SetGroupMemberInfo(gmi); + member->UpdateGroupMemberInfo(); + m_members.push_back(gmi); + + SendGroupUpdate(); + return true; +} + +bool PlayerGroup::RemoveMember(Entity* member) { + GroupMemberInfo* gmi = member->GetGroupMemberInfo(); + if (!gmi) { + return false; + } + + bool ret = false; + + member->SetGroupMemberInfo(0); + deque::iterator erase_itr = m_members.end(); + deque::iterator itr; + for (itr = m_members.begin(); itr != m_members.end(); itr++) { + if (gmi == *itr) + erase_itr = itr; + if ((*itr)->client) + (*itr)->client->GetPlayer()->SetCharSheetChanged(true); + } + if (erase_itr != m_members.end()) { + ret = true; + m_members.erase(erase_itr); + } + + safe_delete(gmi); + if (member->IsBot()) + ((Bot*)member)->Camp(); + + return ret; +} + +void PlayerGroup::Disband() { + deque::iterator itr; + for (itr = m_members.begin(); itr != m_members.end(); itr++) { + if ((*itr)->member) { + (*itr)->member->SetGroupMemberInfo(0); + if ((*itr)->member->IsBot()) + ((Bot*)(*itr)->member)->Camp(); + } + if ((*itr)->client) + (*itr)->client->GetPlayer()->SetCharSheetChanged(true); + + safe_delete(*itr); + } + + m_members.clear(); +} + +void PlayerGroup::SendGroupUpdate(Client* exclude) { + deque::iterator itr; + for (itr = m_members.begin(); itr != m_members.end(); itr++) { + GroupMemberInfo* gmi = *itr; + if (gmi->client && gmi->client != exclude && !gmi->client->IsZoning()) + gmi->client->GetPlayer()->SetCharSheetChanged(true); + } +} + +void PlayerGroup::SimpleGroupMessage(const char* message) { + deque::iterator itr; + for(itr = m_members.begin(); itr != m_members.end(); itr++) { + GroupMemberInfo* info = *itr; + if(info->client) + info->client->SimpleMessage(CHANNEL_GROUP, message); + } +} + +void PlayerGroup::GroupChatMessage(Spawn* from, const char* message) { + deque::iterator itr; + for(itr = m_members.begin(); itr != m_members.end(); itr++) { + GroupMemberInfo* info = *itr; + if(info->client && info->client->GetCurrentZone()) + info->client->GetCurrentZone()->HandleChatMessage(info->client, from, 0, CHANNEL_GROUP_SAY, message, 0); + } +} + +void PlayerGroup::MakeLeader(Entity* new_leader) { + deque::iterator itr; + for (itr = m_members.begin(); itr != m_members.end(); itr++) { + GroupMemberInfo* info = *itr; + if (info->leader) { + info->leader = false; + break; + } + } + + new_leader->GetGroupMemberInfo()->leader = true; + SendGroupUpdate(); +} + + + +/******************************************************** PlayerGroupManager ********************************************************/ + +PlayerGroupManager::PlayerGroupManager() { + m_nextGroupID = 1; + + MGroups.SetName("PlayerGroupManager::m_groups"); + MPendingInvites.SetName("PlayerGroupManager::m_pendingInvites"); +} + +PlayerGroupManager::~PlayerGroupManager() { + MPendingInvites.writelock(__FUNCTION__, __LINE__); + m_pendingInvites.clear(); + MPendingInvites.releasewritelock(__FUNCTION__, __LINE__); + + MGroups.writelock(__FUNCTION__, __LINE__); + map::iterator itr; + for (itr = m_groups.begin(); itr != m_groups.end(); itr++) + safe_delete(itr->second); + + m_groups.clear(); + MGroups.releasewritelock(__FUNCTION__, __LINE__); +} + +bool PlayerGroupManager::AddGroupMember(int32 group_id, Entity* member) { + bool ret = false; + MGroups.writelock(__FUNCTION__, __LINE__); + + if (m_groups.count(group_id) > 0) { + PlayerGroup* group = m_groups[group_id]; + ret = group->AddMember(member); + } + + MGroups.releasewritelock(__FUNCTION__, __LINE__); + + return ret; +} + +bool PlayerGroupManager::RemoveGroupMember(int32 group_id, Entity* member) { + bool ret = false; + bool remove = false; + Client* client = 0; + MGroups.writelock(__FUNCTION__, __LINE__); + + if (m_groups.count(group_id) > 0) { + PlayerGroup* group = m_groups[group_id]; + + LogWrite(MISC__TODO, 0, "TODO", "Update PlayerGroupManager::RemoveGroupMember() to support removing buffs from NPC group members"); + if (member->IsPlayer()) + client = member->GetGroupMemberInfo()->client; + + ret = group->RemoveMember(member); + + // If only 1 person left in the group set a flag to remove the group + if (group->Size() == 1) + remove = true; + } + + MGroups.releasewritelock(__FUNCTION__, __LINE__); + + if (client) + RemoveGroupBuffs(group_id, client); + + // Call RemoveGroup outside the locks as it uses the same locks + if (remove) + RemoveGroup(group_id); + + return ret; +} + +void PlayerGroupManager::NewGroup(Entity* leader) { + MGroups.writelock(__FUNCTION__, __LINE__); + + // Highly doubt this will ever be needed but putting it in any way, basically bump the id and ensure + // no active group is currently using this id, if we hit the max for an int32 then reset the id to 1 + while (m_groups.count(m_nextGroupID) > 0) { + // If m_nextGroupID is at its max then reset it to 1, else increment it + if (m_nextGroupID == 4294967295) + m_nextGroupID = 1; + else + m_nextGroupID++; + } + + // Create a new group with the valid ID we got from above + PlayerGroup* new_group = new PlayerGroup(m_nextGroupID); + // Add the leader to the group + new_group->AddMember(leader); + + leader->GetGroupMemberInfo()->leader = true; + + // Add the new group to the list + m_groups[m_nextGroupID] = new_group; + + MGroups.releasewritelock(__FUNCTION__, __LINE__); +} + +void PlayerGroupManager::RemoveGroup(int32 group_id) { + MGroups.writelock(__FUNCTION__, __LINE__); + + // Check to see if the id is in the list + if (m_groups.count(group_id) > 0) { + // Get a pointer to the group + PlayerGroup* group = m_groups[group_id]; + // Erase the group from the list + m_groups.erase(group_id); + // Delete the group + safe_delete(group); + } + + MGroups.releasewritelock(__FUNCTION__, __LINE__); +} + +int8 PlayerGroupManager::Invite(Player* leader, Entity* member) { + int8 ret = 255; // Should be changed, if it is not then we have an unknown error + + // Lock the pending invite list so we can work with it + MPendingInvites.writelock(__FUNCTION__, __LINE__); + + if (!member) + ret = 6; // failure, not a valid target + else if (member->IsNPC() && (!member->IsBot() /*|| !member->IsMec()*/)) + ret = 6; + else if (leader == member) + ret = 5; // failure, can't invite yourself + else if (member->GetGroupMemberInfo()) + ret = 1; // failure, member already in a group + // Check to see if the target of the invite already has a pending invite + else if (m_pendingInvites.count(member->GetName()) > 0) + ret = 2; // Target already has an invite + // Check to see if the player that invited is already in a group + else if (leader->GetGroupMemberInfo()) { + // Read lock the group list so we can get the size of the inviters group + MGroups.readlock(__FUNCTION__, __LINE__); + int32 group_size = m_groups[leader->GetGroupMemberInfo()->group_id]->Size(); + MGroups.releasereadlock(__FUNCTION__, __LINE__); + + // Check to see if the group is full + if (m_groups[leader->GetGroupMemberInfo()->group_id]->Size() >= 6) + ret = 3; // Group full + // Group isn't full so add the member to the pending invite list + else { + m_pendingInvites[member->GetName()] = leader->GetName(); + ret = 0; // Success + } + } + // Inviter is not in a group + else { + // Check to see if the inviter has a pending invite himself + if (m_pendingInvites.count(leader->GetName()) > 0) + ret = 4; // inviter already has a pending group invite + // No pending invites for the inviter add both the inviter and the target of the invite to the list + else { + m_pendingInvites[leader->GetName()] = leader->GetName(); + m_pendingInvites[member->GetName()] = leader->GetName(); + ret = 0; // success + } + } + // Release the lock on pending invites + MPendingInvites.releasewritelock(__FUNCTION__, __LINE__); + + /* testing purposes only */ + if (ret == 0 && member->IsNPC()) + AcceptInvite(member); + + return ret; +} + +int8 PlayerGroupManager::AcceptInvite(Entity* member) { + int8 ret = 3; // default to unknown error + + MPendingInvites.writelock(__FUNCTION__, __LINE__); + + if (m_pendingInvites.count(member->GetName()) > 0) { + string leader = m_pendingInvites[member->GetName()]; + Client* client_leader = zone_list.GetClientByCharName(leader); + + if (client_leader) { + if (m_pendingInvites.count(leader) > 0) { + NewGroup(client_leader->GetPlayer()); + m_pendingInvites.erase(leader); + } + + // Remove from invite list and add to the group + m_pendingInvites.erase(member->GetName()); + AddGroupMember(client_leader->GetPlayer()->GetGroupMemberInfo()->group_id, member); + ret = 0; // success + } + else { + // Was unable to find the leader, remove from the invite list + m_pendingInvites.erase(member->GetName()); + ret = 2; // failure, can't find leader + } + } + else + ret = 1; // failure, no pending invite + + MPendingInvites.releasewritelock(__FUNCTION__, __LINE__); + + return ret; +} + +void PlayerGroupManager::DeclineInvite(Entity* member) { + MPendingInvites.writelock(__FUNCTION__, __LINE__); + + if (m_pendingInvites.count(member->GetName()) > 0) { + string leader = m_pendingInvites[member->GetName()]; + m_pendingInvites.erase(member->GetName()); + if (m_pendingInvites.count(leader) > 0) + m_pendingInvites.erase(leader); + } + + MPendingInvites.releasewritelock(__FUNCTION__, __LINE__); +} + +bool PlayerGroupManager::IsGroupIDValid(int32 group_id) { + bool ret = false; + MGroups.readlock(__FUNCTION__, __LINE__); + ret = m_groups.count(group_id) > 0; + MGroups.releasereadlock(__FUNCTION__, __LINE__); + return ret; +} + +void PlayerGroupManager::SendGroupUpdate(int32 group_id, Client* exclude) { + MGroups.writelock(__FUNCTION__, __LINE__); + + if (m_groups.count(group_id) > 0) { + m_groups[group_id]->SendGroupUpdate(exclude); + } + + MGroups.releasewritelock(__FUNCTION__, __LINE__); +} + +deque* PlayerGroupManager::GetGroupMembers(int32 group_id) { + if (m_groups.count(group_id) > 0) + return m_groups[group_id]->GetMembers(); + + return 0; +} + +void PlayerGroupManager::ClearPendingInvite(Entity* member) { + MPendingInvites.writelock(__FUNCTION__, __LINE__); + + if (m_pendingInvites.count(member->GetName()) > 0) + m_pendingInvites.erase(member->GetName()); + + MPendingInvites.releasewritelock(__FUNCTION__, __LINE__); +} + +void PlayerGroupManager::RemoveGroupBuffs(int32 group_id, Client* client) { + SpellEffects* se = 0; + Spell* spell = 0; + LuaSpell* luaspell = 0; + EQ2Packet* packet = 0; + Entity* pet = 0; + Player* player = 0; + Entity* charmed_pet = 0; + PlayerGroup* group = 0; + + MGroups.readlock(__FUNCTION__, __LINE__); + if (m_groups.count(group_id) > 0) + group = m_groups[group_id]; + + if (group && client) { + /* first remove all spell effects this group member has on them from other group members */ + player = client->GetPlayer(); + se = player->GetSpellEffects(); + for (int i = 0; i < NUM_SPELL_EFFECTS; i++) { + if (se[i].spell_id != 0xFFFFFFFF) { + //If the client is the caster, don't remove the spell + if (se[i].caster == player) + continue; + + luaspell = se[i].spell; + spell = luaspell->spell; + /* is this a friendly group spell? */ + if (spell && spell->GetSpellData()->group_spell && spell->GetSpellData()->friendly_spell) { + + //Remove all group buffs not cast by this player + player->RemoveSpellEffect(luaspell); + player->RemoveSpellBonus(luaspell); + player->RemoveSkillBonus(spell->GetSpellID()); + + //Also remove group buffs from pets + pet = 0; + charmed_pet = 0; + if (player->HasPet()){ + pet = player->GetPet(); + pet = player->GetCharmedPet(); + } + if (pet){ + pet->RemoveSpellEffect(luaspell); + pet->RemoveSpellBonus(luaspell); + } + if (charmed_pet){ + charmed_pet->RemoveSpellEffect(luaspell); + charmed_pet->RemoveSpellBonus(luaspell); + } + } + } + } + packet = client->GetPlayer()->GetSkills()->GetSkillPacket(client->GetVersion()); + if (packet) + client->QueuePacket(packet); + } + MGroups.releasereadlock(__FUNCTION__, __LINE__); +} + +int32 PlayerGroupManager::GetGroupSize(int32 group_id) { + int32 ret = 0; + MGroups.readlock(__FUNCTION__, __LINE__); + + if (m_groups.count(group_id) > 0) + ret = m_groups[group_id]->Size(); + + MGroups.releasereadlock(__FUNCTION__, __LINE__); + + return ret; +} + +void PlayerGroupManager::SendGroupQuests(int32 group_id, Client* client) { + GroupMemberInfo* info = 0; + MGroups.readlock(__FUNCTION__, __LINE__); + if (m_groups.count(group_id) > 0) { + deque* members = m_groups[group_id]->GetMembers(); + deque::iterator itr; + for (itr = members->begin(); itr != members->end(); itr++) { + info = *itr; + if (info->client) { + LogWrite(PLAYER__DEBUG, 0, "Player", "Send Quest Journal..."); + info->client->SendQuestJournal(false, client); + client->SendQuestJournal(false, info->client); + } + } + } + MGroups.releasereadlock(__FUNCTION__, __LINE__); +} + +void PlayerGroupManager::SimpleGroupMessage(int32 group_id, const char* message) { + MGroups.readlock(__FUNCTION__, __LINE__); + + if (m_groups.count(group_id) > 0) + m_groups[group_id]->SimpleGroupMessage(message); + + MGroups.releasereadlock(__FUNCTION__, __LINE__); +} + +void PlayerGroupManager::GroupMessage(int32 group_id, const char* message, ...) { + va_list argptr; + char buffer[4096]; + buffer[0] = 0; + va_start(argptr, message); + vsnprintf(buffer, sizeof(buffer), message, argptr); + va_end(argptr); + SimpleGroupMessage(group_id, buffer); +} + +void PlayerGroupManager::GroupChatMessage(int32 group_id, Spawn* from, const char* message) { + MGroups.readlock(__FUNCTION__, __LINE__); + + if (m_groups.count(group_id) > 0) + m_groups[group_id]->GroupChatMessage(from, message); + + MGroups.releasereadlock(__FUNCTION__, __LINE__); +} + +void PlayerGroupManager::MakeLeader(int32 group_id, Entity* new_leader) { + MGroups.writelock(__FUNCTION__, __LINE__); + + if (m_groups.count(group_id) > 0) + m_groups[group_id]->MakeLeader(new_leader); + + MGroups.releasewritelock(__FUNCTION__, __LINE__); +} + +void PlayerGroupManager::UpdateGroupBuffs() { + map::iterator itr; + deque::iterator member_itr; + deque::iterator target_itr; + map::iterator itr_skills; + MaintainedEffects* me = nullptr; + LuaSpell* luaspell = nullptr; + Spell* spell = nullptr; + Entity* group_member = nullptr; + SkillBonus* sb = nullptr; + EQ2Packet* packet = nullptr; + int32 i = 0; + PlayerGroup* group = nullptr; + Player* caster = nullptr; + vector new_target_list; + Client* client = nullptr; + bool has_effect = false; + vector* sb_list = nullptr; + BonusValues* bv = nullptr; + Entity* pet = nullptr; + Entity* charmed_pet = nullptr; + + + + for (itr = m_groups.begin(); itr != m_groups.end(); itr++) { + group = itr->second; + + /* loop through the group members and see if any of them have any maintained spells that are group buffs and friendly. + if so, update the list of targets and apply/remove effects as needed */ + + for (member_itr = group->GetMembers()->begin(); member_itr != group->GetMembers()->end(); member_itr++) { + if ((*member_itr)->client) + caster = (*member_itr)->client->GetPlayer(); + else caster = 0; + + if (!caster) + continue; + + if (!caster->GetMaintainedSpellBySlot(0)) + continue; + + // go through the player's maintained spells + me = caster->GetMaintainedSpells(); + caster->GetMaintainedMutex()->readlock(__FUNCTION__, __LINE__); + for (i = 0; i < NUM_MAINTAINED_EFFECTS; i++){ + if (me[i].spell_id == 0xFFFFFFFF) + continue; + luaspell = me[i].spell; + spell = luaspell->spell; + + if (spell && spell->GetSpellData()->group_spell && spell->GetSpellData()->friendly_spell && + (spell->GetSpellData()->target_type == SPELL_TARGET_GROUP_AE || spell->GetSpellData()->target_type == SPELL_TARGET_RAID_AE)) { + + luaspell->MSpellTargets.writelock(__FUNCTION__, __LINE__); + + for (target_itr = group->GetMembers()->begin(); target_itr != group->GetMembers()->end(); target_itr++) { + group_member = (*target_itr)->member; + + if (!group_member) + continue; + + if (group_member == caster) + continue; + + client = (*target_itr)->client; + + has_effect = false; + + if (group_member->GetSpellEffect(spell->GetSpellID(), caster)) + has_effect = true; + + // Check if player is within range of the caster + if (group_member->GetZone() != caster->GetZone() || caster->GetDistance(group_member) > spell->GetSpellData()->radius){ + if (has_effect){ + group_member->RemoveSpellEffect(luaspell); + group_member->RemoveSpellBonus(luaspell); + group_member->RemoveSkillBonus(spell->GetSpellID()); + if (client) { + packet = ((Player*)group_member)->GetSkills()->GetSkillPacket(client->GetVersion()); + if (packet) + client->QueuePacket(packet); + } + //Also remove group buffs from pet + if (group_member->HasPet()){ + pet = group_member->GetPet(); + charmed_pet = group_member->GetCharmedPet(); + if (pet){ + pet->RemoveSpellEffect(luaspell); + pet->RemoveSpellBonus(luaspell); + } + if (charmed_pet){ + charmed_pet->RemoveSpellEffect(luaspell); + charmed_pet->RemoveSpellBonus(luaspell); + } + } + } + continue; + } + + //this group member is a target of the spell + new_target_list.push_back(group_member->GetID()); + + if (has_effect) + continue; + + + pet = 0; + charmed_pet = 0; + + if (group_member->HasPet()){ + pet = group_member->GetPet(); + charmed_pet = group_member->GetCharmedPet(); + } + + group_member->AddSpellEffect(luaspell); + if (pet) + pet->AddSpellEffect(luaspell); + if (charmed_pet) + charmed_pet->AddSpellEffect(luaspell); + + + //add group member to list of targets for caster's spell if true + new_target_list.push_back(group_member->GetID()); + if (pet) + new_target_list.push_back(pet->GetID()); + if (charmed_pet) + new_target_list.push_back(charmed_pet->GetID()); + + + // look for a spell bonus on caster's spell + sb_list = caster->GetAllSpellBonuses(luaspell); + for (int32 x = 0; x < sb_list->size(); x++){ + bv = sb_list->at(x); + group_member->AddSpellBonus(luaspell, bv->type, bv->value, bv->class_req, bv->race_req, bv->faction_req); + if (pet) + pet->AddSpellBonus(luaspell, bv->type, bv->value, bv->class_req, bv->race_req, bv->faction_req); + if (charmed_pet) + charmed_pet->AddSpellBonus(luaspell, bv->type, bv->value, bv->class_req, bv->race_req, bv->faction_req); + } + + sb_list->clear(); + safe_delete(sb_list); + + // look for a skill bonus on the caster's spell + sb = caster->GetSkillBonus(me[i].spell_id); + if (sb) { + for (itr_skills = sb->skills.begin(); itr_skills != sb->skills.end(); itr_skills++) + group_member->AddSkillBonus(sb->spell_id, (*itr_skills).second->skill_id, (*itr_skills).second->value); + } + + if (client) { + packet = ((Player*)group_member)->GetSkills()->GetSkillPacket(client->GetVersion()); + if (packet) + client->QueuePacket(packet); + } + } + + new_target_list.push_back(caster->GetID()); + luaspell->targets.swap(new_target_list); + luaspell->MSpellTargets.releasewritelock(__FUNCTION__, __LINE__); + new_target_list.clear(); + } + } + caster->GetMaintainedMutex()->releasereadlock(__FUNCTION__, __LINE__); + } + } +} + +bool PlayerGroupManager::IsInGroup(int32 group_id, Entity* member) { + bool ret = false; + + MGroups.readlock(__FUNCTION__, __LINE__); + + if (m_groups.count(group_id) > 0) { + deque* members = m_groups[group_id]->GetMembers(); + for (int8 i = 0; i < members->size(); i++) { + if (member == members->at(i)->member) { + ret = true; + break; + } + } + } + + MGroups.releasereadlock(__FUNCTION__, __LINE__); + + return ret; +} \ No newline at end of file diff --git a/EQ2/source/WorldServer/PlayerGroups.h b/EQ2/source/WorldServer/PlayerGroups.h new file mode 100644 index 000000000..7c7e17736 --- /dev/null +++ b/EQ2/source/WorldServer/PlayerGroups.h @@ -0,0 +1,191 @@ +/* +EQ2Emulator: Everquest II Server Emulator +Copyright (C) 2007 EQ2EMulator Development Team (http://www.eq2emulator.net) + +This file is part of EQ2Emulator. + +EQ2Emulator is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +EQ2Emulator is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with EQ2Emulator. If not, see . +*/ + +#ifndef __PLAYERGROUPS_H__ +#define __PLAYERGROUPS_H__ + +#include +#include + +#include "../common/types.h" +#include "Entity.h" + +using namespace std; + +/// All the generic info for the group window, plus a client pointer for players +struct GroupMemberInfo { + int32 group_id; + string name; + string zone; + sint32 hp_current; + sint32 hp_max; + sint32 power_current; + sint32 power_max; + int16 level_current; + int16 level_max; + int8 race_id; + int8 class_id; + bool leader; + Client* client; + Entity* member; +}; + +/// Represents a players group in game +class PlayerGroup { +public: + PlayerGroup(int32 id); + ~PlayerGroup(); + + /// Adds a new member to the players group + /// Entity to add to the group, can be a Player or NPC + /// True if the member was added + bool AddMember(Entity* member); + + /// Removes a member from the players group + /// Entity to remove from the player group + /// True if the member was removed + bool RemoveMember(Entity* member); + + /// Removes all members from the group and destroys the group + void Disband(); + + /// Sends updates to all the clients in the group + /// Client to exclude from the update + void SendGroupUpdate(Client* exclude = 0); + + /// Gets the total number of members in the group + /// int32, number of members in the group + int32 Size() { return m_members.size(); } + + /// Gets a pointer to the list of members + /// deque pointer + deque* GetMembers() { return &m_members; } + + + void SimpleGroupMessage(const char* message); + void GroupChatMessage(Spawn* from, const char* message); + void MakeLeader(Entity* new_leader); + +private: + int32 m_id; // ID of this group + deque m_members; // List of members in this group + +}; + +/// Responsible for managing all the player groups in the world +class PlayerGroupManager { +public: + PlayerGroupManager(); + ~PlayerGroupManager(); + + /// Adds a member to a group + /// ID of the group to add a member to + /// Entity* to add to the group + /// True if the member was added to the group + bool AddGroupMember(int32 group_id, Entity* member); + + /// Removes a member from a group + /// ID of the group to remove a member from + /// Entity* to remove from the group + /// True if the member was removed from the group + bool RemoveGroupMember(int32 group_id, Entity* member); + + /// Creates a new group with the provided Entity* as the leader + /// The Entity* that will be the leader of the group + void NewGroup(Entity* leader); + + /// Removes the group from the group manager + /// ID of the group to remove + void RemoveGroup(int32 group_id); + + /// Handles a player inviting another player or NPC to a group + /// Player that sent the invite + /// Player or NPC that is the target of the invite + /// Error code if invite was unsuccessful, 0 if successful + int8 Invite(Player* leader, Entity* member); + + /// Handles accepting of a group invite + /// Entity* that is accepting the invite + /// Error code if accepting the invite failed, 0 if successful + int8 AcceptInvite(Entity* member); + + /// Handles declining of a group invite + /// Entity* that is declining the invite + void DeclineInvite(Entity* member); + + /// Checks to see if there is a group with the given id in the group manager + /// ID to check for + /// True if a group with the given ID is found + bool IsGroupIDValid(int32 group_id); + + /// Send updates to all the clients in the group + /// ID of the group to send updates to + /// Client* to exclude from the update, usually the one that triggers the update + void SendGroupUpdate(int32 group_id, Client* exclude = 0); + + /// + /// Gets the group members for the given group, be sure to call GroupLock() before calling this and ReleaseGroupLock() after you + /// are done with the list. This is for reading purposes only, the list should never be altered using this function + /// + /// ID of the group who's members we want + /// deque pointer of the members in the group + deque* GetGroupMembers(int32 group_id); + + /// Read locks the group list, no changes to the list should be made when using this + /// Name of the function called from, used for better debugging in the event of a deadlock + /// Line number that this was called from, used for better debugging in the event of a deadlock + void GroupLock(const char* function = 0, int32 line = 0U) { MGroups.readlock(function, line); } + + /// Releases the readlock acquired from GroupLock() + /// Name of the function called from, used for better debugging in the event of a deadlock + /// Line number that this was called from, used for better debugging in the event of a deadlock + void ReleaseGroupLock(const char* function = 0, int32 line = 0U) { MGroups.releasereadlock(function, line); } + + void ClearPendingInvite(Entity* member); + + void RemoveGroupBuffs(int32 group_id, Client* client); + + int32 GetGroupSize(int32 group_id); + + void SendGroupQuests(int32 group_id, Client* client); + + void SimpleGroupMessage(int32 group_id, const char* message); + void GroupMessage(int32 group_id, const char* message, ...); + void GroupChatMessage(int32 group_id, Spawn* from, const char* message); + void MakeLeader(int32 group_id, Entity* new_leader); + void UpdateGroupBuffs(); + + bool IsInGroup(int32 group_id, Entity* member); + + // TODO: Any function below this comment + bool IsSpawnInGroup(int32 group_id, string name); // used in follow + Player* GetGroupLeader(int32 group_id); + +private: + int32 m_nextGroupID; // Used to generate a new unique id for new groups + + map m_groups; // int32 is the group id, PlayerGroup* is a pointer to the actual group + map m_pendingInvites; // First string is the person invited to the group, second string is the leader of the group + + Mutex MGroups; // Mutex for the group map (m_groups) + Mutex MPendingInvites; // Mutex for the pending invites map (m_pendingInvites) +}; + +#endif \ No newline at end of file diff --git a/EQ2/source/WorldServer/Quests.cpp b/EQ2/source/WorldServer/Quests.cpp new file mode 100644 index 000000000..35cb65525 --- /dev/null +++ b/EQ2/source/WorldServer/Quests.cpp @@ -0,0 +1,1742 @@ +/* + EQ2Emulator: Everquest II Server Emulator + Copyright (C) 2007 EQ2EMulator Development Team (http://www.eq2emulator.net) + + This file is part of EQ2Emulator. + + EQ2Emulator is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + EQ2Emulator is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with EQ2Emulator. If not, see . +*/ +#include "Quests.h" +#include "../common/ConfigReader.h" +#include "Player.h" +#include "LuaInterface.h" +#include "Spells.h" +#include "../common/Log.h" + +#ifdef WIN32 + #include +#else + #include +#endif + +extern LuaInterface* lua_interface; +extern ConfigReader configReader; +extern MasterFactionList master_faction_list; + +QuestStep::QuestStep(int32 in_id, int8 in_type, string in_description, vector* in_ids, int32 in_quantity, const char* in_task_group, vector* in_locations, float in_max_variation, float in_percentage, int32 in_usableitemid){ + type = in_type; + description = in_description; + ids = in_ids; + if(in_task_group) + task_group = string(in_task_group); + locations = in_locations; + max_variation = in_max_variation; + quantity = in_quantity; + step_progress = 0; + icon = 11; + id = in_id; + updated = false; + percentage = in_percentage; + usableitemid = in_usableitemid; +} + +QuestStep::QuestStep(QuestStep* old_step){ + type = old_step->type; + description = old_step->description; + task_group = old_step->task_group; + quantity = old_step->quantity; + max_variation = old_step->max_variation; + step_progress = 0; + if(type != QUEST_STEP_TYPE_LOCATION) { + locations = 0; + if (old_step->ids){ + ids = new vector; + for(int32 i=0;iids->size();i++) + ids->push_back(old_step->ids->at(i)); + } + else + ids = 0; + } + else { // location step + ids = 0; + if (old_step->locations) { + locations = new vector; + for(int32 i=0; i < old_step->locations->size(); i++) + locations->push_back(old_step->locations->at(i)); + } + else + locations = 0; + } + icon = old_step->icon; + id = old_step->id; + updated = false; + percentage = old_step->percentage; + usableitemid = old_step->usableitemid; +} + +QuestStep::~QuestStep(){ + safe_delete(ids); + safe_delete(locations); +} + +bool QuestStep::WasUpdated(){ + return updated; +} + +void QuestStep::WasUpdated(bool val){ + updated = val; +} + +float QuestStep::GetPercentage(){ + return percentage; +} + +int32 QuestStep::GetStepID(){ + return id; +} +int32 QuestStep::GetItemID() { + return usableitemid; +} +void QuestStep::SetComplete(){ + step_progress = quantity; + updated = true; +} + +bool QuestStep::Complete(){ + return step_progress >= quantity; +} + +int8 QuestStep::GetStepType(){ + return type; +} + +bool QuestStep::CheckStepKillUpdate(int32 id){ + bool ret = false; + if(ids){ + for(int32 i=0;isize();i++){ + if(ids->at(i) == id){ + ret = true; + break; + } + } + } + return ret; +} + +bool QuestStep::CheckStepChatUpdate(int32 id){ + bool ret = false; + if(ids){ + for(int32 i=0;isize();i++){ + if(ids->at(i) == id){ + ret = true; + break; + } + } + } + return ret; +} + +int16 QuestStep::GetIcon(){ + return icon; +} + +void QuestStep::SetIcon(int16 in_icon){ + icon = in_icon; +} + +const char* QuestStep::GetUpdateName(){ + if(update_name.length() > 0) + return update_name.c_str(); + return 0; +} + +void QuestStep::SetUpdateName(const char* name){ + update_name = string(name); +} + +const char* QuestStep::GetUpdateTargetName(){ + if(update_target_name.length() > 0) + return update_target_name.c_str(); + return 0; +} + +void QuestStep::SetUpdateTargetName(const char* name){ + update_target_name = string(name); +} + +bool QuestStep::CheckStepItemUpdate(int32 id){ + bool ret = false; + if(ids){ + for(int32 i=0;isize();i++){ + if(ids->at(i) == id){ + ret = true; + break; + } + } + } + return ret; +} + +bool QuestStep::CheckStepLocationUpdate(float char_x, float char_y, float char_z){ + bool ret = false; + if (locations) { + for (int32 i=0; i < locations->size(); i++) { + float total_diff = 0; + Location loc = locations->at(i); + float diff = loc.x - char_x; //Check X + if(diff < 0) + diff *= -1; + if(diff <= max_variation) { + total_diff += diff; + + diff = loc.z - char_z; //Check Z (we check Z first because it is far more likely to be a much greater variation than y) + if(diff < 0) + diff *= -1; + if(diff <= max_variation) { + total_diff += diff; + if(total_diff <= max_variation) { //Check Total + + diff = loc.y - char_y; //Check Y + if(diff < 0) + diff *= -1; + if(diff <= max_variation) { + total_diff += diff; + if(total_diff <= max_variation) { //Check Total + ret = true; + break; + } + } + } + } + } + } + } + return ret; +} + +bool QuestStep::CheckStepSpellUpdate(int32 id){ + bool ret = false; + if (ids) { + for (int32 i = 0; i < ids->size(); i++) { + if (ids->at(i) == id) { + ret = true; + break; + } + } + } + return ret; +} + +void QuestStep::SetStepProgress(int32 val){ + step_progress = val; +} + +int32 QuestStep::AddStepProgress(int32 val){ + updated = true; + if (val > (quantity - step_progress)){ + step_progress += (quantity - step_progress); + return (quantity - step_progress); + } + else + step_progress += val; + return val; +} + +int32 QuestStep::GetStepProgress() { + return step_progress; +} + +void QuestStep::ResetTaskGroup(){ + task_group = ""; +} + +const char* QuestStep::GetTaskGroup(){ + if(task_group.length() > 0) + return task_group.c_str(); + return 0; +} + +const char* QuestStep::GetDescription(){ + if(description.length() > 0) + return description.c_str(); + return 0; +} + +void QuestStep::SetDescription(string desc){ + description = desc; +} + +int16 QuestStep::GetQuestCurrentQuantity(){ + return (int16)step_progress; +} + +int16 QuestStep::GetQuestNeededQuantity(){ + return (int16)quantity; +} + +Quest::Quest(int32 in_id){ + id = in_id; + reward_status = 0; + quest_giver = 0; + deleted = false; + turned_in = false; + update_needed = true; + player = 0; + return_id = 0; + task_group_num = 1; + prereq_level = 1; + prereq_tslevel = 0; + prereq_max_level = 0; + prereq_max_tslevel = 0; + reward_coins = 0; + reward_coins_max = 0; + completed_flag = false; + enc_level = 0; + reward_exp = 0; + reward_tsexp = 0; + m_featherColor = 0; + m_repeatable = false; + yellow_name = false; + m_hidden = false; + generated_coin = 0; + m_questFlags = 0; + m_timestamp = 0; + m_completeCount = 0; + MQuestSteps.SetName("Quest::MQuestSteps"); + MCompletedActions.SetName("Quest::MCompletedActions"); + MProgressActions.SetName("Quest::MProgressActions"); + MFailedActions.SetName("Quest::failed_Actions"); +} + +Quest::Quest(Quest* old_quest){ + task_group_num = 1; + name = old_quest->name; + type = old_quest->type; + zone = old_quest->zone; + level = old_quest->level; + enc_level = old_quest->enc_level; + description = old_quest->description; + prereq_level = old_quest->prereq_level; + prereq_tslevel = old_quest->prereq_tslevel; + prereq_max_level = old_quest->prereq_max_level; + prereq_max_tslevel = old_quest->prereq_max_tslevel; + prereq_quests = old_quest->prereq_quests; + prereq_classes = old_quest->prereq_classes; + prereq_tradeskillclass = old_quest->prereq_tradeskillclass; + prereq_races = old_quest->prereq_races; + prereq_factions = old_quest->prereq_factions; + reward_coins = old_quest->reward_coins; + reward_coins_max = old_quest->reward_coins_max; + reward_factions = old_quest->reward_factions; + reward_status = old_quest->reward_status; + reward_comment = old_quest->reward_comment; + reward_exp = old_quest->reward_exp; + reward_tsexp = old_quest->reward_tsexp; + generated_coin = old_quest->generated_coin; + completed_flag = old_quest->completed_flag; + yellow_name = old_quest->yellow_name; + m_questFlags = old_quest->m_questFlags; + id = old_quest->id; + + vector quest_steps; + for(int32 i=0;iquest_steps.size();i++) + AddQuestStep(new QuestStep(old_quest->quest_steps[i])); + for(int32 i=0;iprereq_items.size();i++) + AddPrereqItem(new Item(old_quest->prereq_items[i])); + for(int32 i=0;ireward_items.size();i++) + AddRewardItem(new Item(old_quest->reward_items[i])); + for(int32 i=0;iselectable_reward_items.size();i++) + AddSelectableRewardItem(new Item(old_quest->selectable_reward_items[i])); + complete_actions = old_quest->complete_actions; + progress_actions = old_quest->progress_actions; + failed_actions = old_quest->failed_actions; + time_t raw; + struct tm *newtime; + time(&raw); + newtime = localtime(&raw); + day = newtime->tm_mday; + month = newtime->tm_mon + 1; + year = newtime->tm_year - 100; + visible = 1; + step_updates.clear(); + step_failures.clear(); + completed_description = old_quest->completed_description; + deleted = old_quest->deleted; + update_needed = old_quest->update_needed; + turned_in = old_quest->turned_in; + quest_giver = old_quest->quest_giver; + player = old_quest->player; + return_id = old_quest->return_id; + m_featherColor = old_quest->m_featherColor; + m_repeatable = old_quest->IsRepeatable(); + m_hidden = false; + m_timestamp = 0; + m_completeCount = old_quest->GetCompleteCount(); + MQuestSteps.SetName("Quest::MQuestSteps"); + MProgressActions.SetName("Quest::MProgressActions"); + MCompletedActions.SetName("Quest::MCompletedActions"); +} + +Quest::~Quest(){ + for(int32 i=0;iGetStepID() == step_id){ + ret = quest_steps[i]; + break; + } + } + MQuestSteps.unlock(); + return ret; +} + +vector* Quest::GetQuestSteps(){ + return &quest_steps; +} + +vector* Quest::GetQuestUpdates(){ + return &step_updates; +} + +vector* Quest::GetQuestFailures(){ + return &step_failures; +} + + +bool Quest::CheckQuestKillUpdate(Spawn* spawn, bool update){ + QuestStep* step = 0; + bool ret = false; + int32 id = spawn->GetDatabaseID(); + int32 prog_added = 0; + MQuestSteps.lock(); + for(int32 i=0;iGetStepType() == QUEST_STEP_TYPE_KILL && !step->Complete() && step->CheckStepKillUpdate(id)){ + if (update == true) { + bool passed = true; + if (step->GetPercentage() < 100) + passed = (step->GetPercentage() > MakeRandomFloat(0, 100)); + if (passed) { + //Call the progress action function with the total amount of progress actually granted + prog_added = step->AddStepProgress(1); + if (lua_interface && progress_actions[step->GetStepID()].length() > 0 && prog_added > 0) + lua_interface->CallQuestFunction(this, progress_actions[step->GetStepID()].c_str(), player, prog_added); + step_updates.push_back(step); + step->SetUpdateName(spawn->GetName()); + ret = true; + } + else + step_failures.push_back(step); + } + else { + ret = true; + } + } + } + MQuestSteps.unlock(); + if(ret && update) + SetSaveNeeded(true); + return ret; +} + +int16 Quest::GetTaskGroupStep(){ + int16 ret = task_group_order.size(); + map::iterator itr; + MQuestSteps.lock(); + for(itr = task_group_order.begin(); itr != task_group_order.end(); itr++){ + if(task_group.count(itr->second) > 0){ + vector tmp_steps = task_group[itr->second]; + bool complete = true; + for(int32 i=0;iComplete() == false) + complete = false; + } + if(!complete){ + if(itr->first < ret) + ret = itr->first; + } + } + } + MQuestSteps.unlock(); + return ret; +} + +bool Quest::SetStepComplete(int32 step){ + QuestStep* quest_step = 0; + bool ret = false; + MQuestSteps.lock(); + for(int32 i=0;iGetStepID() == step){ + quest_step->SetComplete(); + step_updates.push_back(quest_step); + ret = true; + break; + } + } + MQuestSteps.unlock(); + if (ret) { + SetSaveNeeded(true); + } + + return ret; +} + +bool Quest::AddStepProgress(int32 step_id, int32 progress) { + QuestStep* quest_step = 0; + bool ret = false; + int32 prog_added = 0; + MQuestSteps.lock(); + for (int32 i = 0; i < quest_steps.size(); i++) { + quest_step = quest_steps[i]; + if (quest_step && quest_step->GetStepID() == step_id) { + bool passed = true; + if(quest_step->GetPercentage() < 100 && quest_step->GetPercentage() != 0) + passed = (quest_step->GetPercentage() > MakeRandomFloat(0, 100)); + if(passed) { + //Call the progress action function with the total amount of progress actually granted + prog_added = quest_step->AddStepProgress(progress); + if(lua_interface && progress_actions[step_id].length() > 0 && prog_added > 0) + lua_interface->CallQuestFunction(this, progress_actions[step_id].c_str(), player, prog_added); + step_updates.push_back(quest_step); + ret = true; + break; + } + else { + step_failures.push_back(quest_step); + break; + } + } + } + MQuestSteps.unlock(); + if(ret) + SetSaveNeeded(true); + return ret; +} + +int32 Quest::GetStepProgress(int32 step_id) { + QuestStep* quest_step = 0; + int32 ret = 0; + + MQuestSteps.lock(); + for (int32 i = 0; i < quest_steps.size(); i++) { + quest_step = quest_steps[i]; + if (quest_step && quest_step->GetStepID() == step_id) { + ret = quest_step->GetStepProgress(); + break; + } + } + MQuestSteps.unlock(); + + return ret; +} + +bool Quest::GetQuestStepCompleted(int32 step_id){ + bool ret = false; + QuestStep* quest_step = 0; + MQuestSteps.lock(); + for(int32 i=0;iGetStepID() == step_id && quest_step->Complete()){ + ret = true; + break; + } + } + MQuestSteps.unlock(); + return ret; +} + +int16 Quest::GetQuestStep(){ + int16 ret = 0; + QuestStep* step = 0; + MQuestSteps.lock(); + for(int32 i=0;iComplete()){ + ret = step->GetStepID(); + break; + } + } + MQuestSteps.unlock(); + return ret; +} + +bool Quest::QuestStepIsActive(int16 quest_step_id) { + bool ret = false; + QuestStep* step = 0; + MQuestSteps.lock(); + for (int32 i = 0; i < quest_steps.size(); i++) { + step = quest_steps[i]; + if (step->GetStepID() == quest_step_id && !step->Complete()) { + ret = true; + break; + } + } + MQuestSteps.unlock(); + return ret; +} + +bool Quest::CheckQuestChatUpdate(int32 id, bool update){ + QuestStep* step = 0; + bool ret = false; + int32 prog_added = 0; + MQuestSteps.lock(); + for(int32 i=0;iGetStepType() == QUEST_STEP_TYPE_CHAT && !step->Complete() && step->CheckStepChatUpdate(id)){ + if(update){ + //Call the progress action function with the total amount of progress actually granted + prog_added = step->AddStepProgress(1); + if(lua_interface && progress_actions[step->GetStepID()].length() > 0 && prog_added > 0) + lua_interface->CallQuestFunction(this, progress_actions[step->GetStepID()].c_str(), player, prog_added); + step_updates.push_back(step); + } + ret = true; + } + } + MQuestSteps.unlock(); + if(ret) + SetSaveNeeded(true); + return ret; +} + +bool Quest::CheckQuestItemUpdate(int32 id, int8 quantity){ + QuestStep* step = 0; + bool ret = false; + int32 prog_added = 0; + MQuestSteps.lock(); + for(int32 i=0;iGetStepType() == QUEST_STEP_TYPE_OBTAIN_ITEM && !step->Complete() && step->CheckStepItemUpdate(id)){ + bool passed = true; + if(step->GetPercentage() < 100) + passed = (step->GetPercentage() > MakeRandomFloat(0, 100)); + if(passed){ + //Call the progress action function with the total amount of progress actually granted + prog_added = step->AddStepProgress(quantity); + if(lua_interface && progress_actions[step->GetStepID()].length() > 0 && prog_added > 0) + lua_interface->CallQuestFunction(this, progress_actions[step->GetStepID()].c_str(), player, prog_added); + step_updates.push_back(step); + ret = true; + } + else + step_failures.push_back(step); + } + } + MQuestSteps.unlock(); + if(ret) + SetSaveNeeded(true); + return ret; +} + +bool Quest::CheckQuestCraftUpdate(int32 id, int32 quantity){ + QuestStep* step = 0; + bool ret = false; + int32 prog_added = 0; + MQuestSteps.lock(); + for(int32 i=0;iGetStepType() == QUEST_STEP_TYPE_CRAFT && !step->Complete()){ + vector* id_list = step->GetUpdateIDs(); + for(int32 i=0;isize(); i++){ + int32 update_id = id_list->at(i); + if(update_id == id){ + bool passed = true; + if(step->GetPercentage() < 100) + passed = (step->GetPercentage() > MakeRandomFloat(0, 100)); + if(passed){ + //Call the progress action function with the total amount of progress actually granted + prog_added = step->AddStepProgress(quantity); + if(lua_interface && progress_actions[step->GetStepID()].length() > 0 && prog_added > 0) + lua_interface->CallQuestFunction(this, progress_actions[step->GetStepID()].c_str(), player, prog_added); + step_updates.push_back(step); + } + else + step_failures.push_back(step); + ret = true; + } + } + } + } + MQuestSteps.unlock(); + if(ret) + SetSaveNeeded(true); + return ret; +} + +bool Quest::CheckQuestHarvestUpdate(int32 id, int32 quantity){ + QuestStep* step = 0; + bool ret = false; + int32 prog_added = 0; + MQuestSteps.lock(); + for(int32 i=0;iGetStepType() == QUEST_STEP_TYPE_HARVEST && !step->Complete()){ + vector* id_list = step->GetUpdateIDs(); + for(int32 i=0;isize(); i++){ + int32 update_id = id_list->at(i); + if(update_id == id){ + bool passed = true; + if(step->GetPercentage() < 100) + passed = (step->GetPercentage() > MakeRandomFloat(0, 100)); + if(passed){ + //Call the progress action function with the total amount of progress actually granted + prog_added = step->AddStepProgress(quantity); + if(lua_interface && progress_actions[step->GetStepID()].length() > 0 && prog_added > 0) + lua_interface->CallQuestFunction(this, progress_actions[step->GetStepID()].c_str(), player, prog_added); + step_updates.push_back(step); + } + else + step_failures.push_back(step); + ret = true; + } + } + } + } + MQuestSteps.unlock(); + if(ret) + SetSaveNeeded(true); + return ret; +} + +bool Quest::CheckQuestLocationUpdate(float char_x, float char_y, float char_z){ + QuestStep* step = 0; + bool ret = false; + int32 prog_added = 0; + MQuestSteps.lock(); + for(int32 i=0;iGetStepType() == QUEST_STEP_TYPE_LOCATION && !step->Complete() && step->CheckStepLocationUpdate(char_x, char_y, char_z)){ + //Call the progress action function with the total amount of progress actually granted + prog_added = step->AddStepProgress(1); + if(lua_interface && progress_actions[step->GetStepID()].length() > 0 && prog_added > 0) + lua_interface->CallQuestFunction(this, progress_actions[step->GetStepID()].c_str(), player, prog_added); + step_updates.push_back(step); + ret = true; + } + } + MQuestSteps.unlock(); + if(ret) + SetSaveNeeded(true); + return ret; +} + +bool Quest::CheckQuestSpellUpdate(Spell* spell){ + QuestStep* step = 0; + bool ret = false; + int32 id = spell->GetSpellID(); + int32 prog_added = 0; + MQuestSteps.lock(); + for (int32 i = 0; i < quest_steps.size(); i++) { + step = quest_steps[i]; + if(step && step->GetStepType() == QUEST_STEP_TYPE_SPELL && !step->Complete() && step->CheckStepSpellUpdate(id)){ + bool passed = true; + if(step->GetPercentage() < 100) + passed = (step->GetPercentage() > MakeRandomFloat(0, 100)); + if(passed) { + //Call the progress action function with the total amount of progress actually granted + prog_added = step->AddStepProgress(1); + if(lua_interface && progress_actions[step->GetStepID()].length() > 0 && prog_added > 0) + lua_interface->CallQuestFunction(this, progress_actions[step->GetStepID()].c_str(), player, prog_added); + step_updates.push_back(step); + //step->SetUpdateName(spawn->GetName()); + ret = true; + } + else + step_failures.push_back(step); + } + } + MQuestSteps.unlock(); + if (ret) + SetSaveNeeded(true); + return ret; +} + +void Quest::SetQuestID(int32 in_id){ + id = in_id; +} + +EQ2Packet* Quest::OfferQuest(int16 version, Player* player){ + PacketStruct* packet = configReader.getStruct("WS_OfferQuest", version); + if(packet){ + packet->setDataByName("reward", "Quest Reward!"); + packet->setDataByName("title", name.c_str()); + packet->setDataByName("description", description.c_str()); + if(type == "Tradeskill") + packet->setDataByName("quest_difficulty", player->GetTSArrowColor(level)); + else + packet->setDataByName("quest_difficulty", player->GetArrowColor(level)); + packet->setDataByName("encounter_level", enc_level); + packet->setDataByName("unknown0", 255); + if (version >= 1188) + packet->setDataByName("unknown4b", 1); + else + packet->setDataByName("unknown", 5); + packet->setDataByName("level", level); + if(reward_coins > 0){ + packet->setDataByName("min_coin", reward_coins); + if (reward_coins_max) + packet->setDataByName("max_coin", reward_coins_max); + } + packet->setDataByName("status_points", reward_status); + if(reward_comment.length() > 0) + packet->setDataByName("text", reward_comment.c_str()); + if(reward_items.size() > 0){ + packet->setArrayLengthByName("num_rewards", reward_items.size()); + Item* item = 0; + for(int32 i=0;isetArrayDataByName("reward_id", item->details.item_id, i); + if(version < 860) + packet->setItemArrayDataByName("item", item, player, i, 0, -1); + else if (version < 1193) + packet->setItemArrayDataByName("item", item, player, i); + else + packet->setItemArrayDataByName("item", item, player, i, 0, 2); + } + } + if(selectable_reward_items.size() > 0){ + packet->setArrayLengthByName("num_select_rewards", selectable_reward_items.size()); + Item* item = 0; + for(int32 i=0;isetArrayDataByName("select_reward_id", item->details.item_id, i); + if(version < 860) + packet->setItemArrayDataByName("select_item", item, player, i, 0, -1); + else if (version < 1193) + packet->setItemArrayDataByName("select_item", item, player, i); + else + packet->setItemArrayDataByName("select_item", item, player, i, 0, 2); + } + } + map* reward_factions = GetRewardFactions(); + if (reward_factions && reward_factions->size() > 0) { + packet->setArrayLengthByName("num_factions", reward_factions->size()); + map::iterator itr; + int16 index = 0; + for (itr = reward_factions->begin(); itr != reward_factions->end(); itr++) { + int32 faction_id = itr->first; + sint32 amount = itr->second; + const char* faction_name = master_faction_list.GetFactionNameByID(faction_id); + if (faction_name) { + packet->setArrayDataByName("faction_name", const_cast(faction_name), index); + packet->setArrayDataByName("amount", amount, index); + } + index++; + } + } + char accept[35] = {0}; + char decline[35] = {0}; + sprintf(accept, "q_accept_pending_quest %u", id); + sprintf(decline, "q_deny_pending_quest %u", id); + packet->setDataByName("accept_command", accept); + packet->setDataByName("decline_command", decline); + EQ2Packet* outapp = packet->serialize(); +#if EQDEBUG >= 9 + DumpPacket(outapp); +#endif + safe_delete(packet); + return outapp; + } + return 0; +} + +int32 Quest::GetQuestID(){ + return id; +} + +int8 Quest::GetQuestLevel(){ + return level; +} + +int8 Quest::GetVisible(){ + return visible; +} + +EQ2Packet* Quest::QuestJournalReply(int16 version, int32 player_crc, Player* player, QuestStep* updateStep, int8 update_count, bool old_completed_quest, bool quest_failure, bool display_quest_helper) { + PacketStruct* packet = configReader.getStruct("WS_QuestJournalReply", version); + if (packet) { + packet->setDataByName("quest_id", id); + packet->setDataByName("player_crc", player_crc); + packet->setDataByName("name", name.c_str()); + packet->setDataByName("description", description.c_str()); + packet->setDataByName("zone", zone.c_str()); + packet->setDataByName("type", type.c_str()); + packet->setDataByName("complete_header", "To complete this quest, I must do the following tasks:"); + packet->setDataByName("day", day); + packet->setDataByName("month", month); + packet->setDataByName("year", year); + packet->setDataByName("level", level); + /* To get the quest timer to work you need to set unknown, index 4 to 1 and the time stamp + to the current time + the time in seconds you want to show in the journal*/ + if (m_timestamp > 0) { + packet->setDataByName("unknown", 1, 4); + packet->setDataByName("time_stamp", m_timestamp); + } + + int8 difficulty = 0; + if (type == "Tradeskill") + difficulty = player->GetTSArrowColor(level); + else + difficulty = player->GetArrowColor(level); + packet->setDataByName("difficulty", difficulty); + if (enc_level > 4) + packet->setDataByName("encounter_level", enc_level); + else + packet->setDataByName("encounter_level", 4); + packet->setDataByName("unknown2b", 4); + int16 task_groups_completed = 0; + int16 total_task_groups = 0; + vector primary_order; + vector secondary_order; + packet->setDataByName("unknown8", 1, 1); + packet->setSubstructArrayDataByName("reward_data", "unknown8", 1, 1); + packet->setDataByName("unknown8b", 255); + + if (version >= 1096) { + packet->setDataByName("deletable", 1); + packet->setDataByName("shareable", 1); + } + else { + packet->setDataByName("unknown3", 1, 5); + packet->setDataByName("unknown3", 1, 6); + } + + int8 map_data_count = 0; + + packet->setDataByName("bullets", 1); + if (old_completed_quest) { + if (version >= 1096) { + packet->setDataByName("complete", 1); + packet->setDataByName("complete2", 1); + packet->setDataByName("complete3", 1); + } + else { + packet->setDataByName("unknown3", 1); + packet->setDataByName("unknown3", 1, 1); + packet->setDataByName("unknown3", 1, 2); + packet->setDataByName("unknown3", 1, 5); + packet->setDataByName("unknown3", 1, 6); + } + } + else if (version >= 1096 && GetCompleted()) { + packet->setDataByName("complete", 1); + packet->setDataByName("complete2", 1); + packet->setDataByName("complete3", 1); + packet->setDataByName("num_task_groups", 1); + packet->setArrayDataByName("task_group", completed_description.c_str()); + packet->setArrayDataByName("unknown4", 0xFFFFFFFF); + packet->setDataByName("onscreen_update", 1); + packet->setDataByName("update_task_number", 1); + packet->setDataByName("onscreen_update", 1); + packet->setDataByName("onscreen_update_text", completed_description.c_str()); + if (updateStep) + packet->setDataByName("onscreen_update_icon", updateStep->GetIcon()); + else + packet->setDataByName("onscreen_update_icon", 0); + // Is Heritage or db entry for classic eq quest turn in sound + packet->setDataByName("classic_eq_sound", 0); + // No clue what this does, set it to mach live packets + packet->setDataByName("unknown12b", 1, 0); + } + else { + map task_group_names; + map::iterator order_itr; + vector* steps = 0; + MQuestSteps.lock(); + for (order_itr = task_group_order.begin(); order_itr != task_group_order.end(); order_itr++) { + //The following is kind of crazy, but necessary to order the quests with completed ones first. This is to make the packet like live's packet + //for(itr = task_group.begin(); itr != task_group.end(); itr++){ + bool complete = true; + if (task_group.count(order_itr->second) > 0) { + steps = &(task_group[order_itr->second]); + for (int32 i = 0; i < steps->size(); i++) { + if (steps->at(i)->Complete() == false) + complete = false; + } + if (complete) { + for (int32 i = 0; i < steps->size(); i++) { + if (i == 0) + task_group_names[steps->at(i)] = order_itr->second; + primary_order.push_back(steps->at(i)); + } + task_groups_completed++; + total_task_groups++; + } + else { + for (int32 i = 0; i < steps->size(); i++) { + if (i == 0) + task_group_names[steps->at(i)] = order_itr->second; + secondary_order.push_back(steps->at(i)); + } + total_task_groups++; + } + } + } + packet->setDataByName("task_groups_completed", task_groups_completed); + packet->setArrayLengthByName("num_task_groups", total_task_groups); + if (IsTracked() /*display_quest_helper*/ && task_groups_completed < total_task_groups) + packet->setDataByName("display_quest_helper", 1); + int16 index = 0; + QuestStep* step = 0; + for (int32 i = 0; i < primary_order.size(); i++) { + if (primary_order[i]->GetTaskGroup()) { + if (task_group_names.count(primary_order[i]) > 0) + packet->setArrayDataByName("task_group", primary_order[i]->GetTaskGroup(), index); + else + continue; + packet->setSubArrayLengthByName("num_tasks", task_group[primary_order[i]->GetTaskGroup()].size(), index); + packet->setSubArrayLengthByName("num_updates", task_group[primary_order[i]->GetTaskGroup()].size(), index); + map_data_count += task_group[primary_order[i]->GetTaskGroup()].size(); + if (task_group[primary_order[i]->GetTaskGroup()].size() > 0) + packet->setDataByName("bullets", 1); + for (int32 x = 0; x < task_group[primary_order[i]->GetTaskGroup()].size(); x++) { + step = task_group[primary_order[i]->GetTaskGroup()].at(x); + if (!step) + continue; + if (step->GetDescription()) + packet->setSubArrayDataByName("task", step->GetDescription(), index, x); + packet->setSubArrayDataByName("task_completed", 1, index, x); + packet->setSubArrayDataByName("index", x, index, x); + packet->setSubArrayDataByName("update_currentval", step->GetQuestCurrentQuantity(), index, x); + packet->setSubArrayDataByName("update_maxval", step->GetQuestNeededQuantity(), index, x); + if (step->GetUpdateTargetName()) + packet->setSubArrayDataByName("update_target_name", step->GetUpdateTargetName(), index, x); + packet->setSubArrayDataByName("icon", step->GetIcon(), index, x); + if (updateStep && step == updateStep) { + packet->setDataByName("update", 1); + // packet->setDataByName("unknown5d", 1); + if (!quest_failure) + packet->setDataByName("onscreen_update", 1); + packet->setDataByName("onscreen_update_count", update_count); + packet->setDataByName("onscreen_update_icon", step->GetIcon()); + if (step->GetUpdateName()) + packet->setDataByName("onscreen_update_text", step->GetUpdateName()); + else if (step->GetDescription()) + packet->setDataByName("onscreen_update_text", step->GetDescription()); + packet->setDataByName("update_task_number", x); + packet->setDataByName("update_taskgroup_number", index); + } + packet->setArrayDataByName("unknown4", 0xFFFFFFFF, x); + } + index++; + } + else { + if (task_group_names.count(primary_order[i]) > 0) { + step = primary_order[i]; + if (updateStep && step == updateStep) { + packet->setDataByName("update", 1); + // packet->setDataByName("unknown5d", 1); + if (!quest_failure) + packet->setDataByName("onscreen_update", 1); + packet->setDataByName("onscreen_update_count", update_count); + packet->setDataByName("onscreen_update_icon", step->GetIcon()); + if (step->GetUpdateName()) + packet->setDataByName("onscreen_update_text", step->GetUpdateName()); + else if (step->GetDescription()) + packet->setDataByName("onscreen_update_text", step->GetDescription()); + packet->setDataByName("update_task_number", i); + packet->setDataByName("update_taskgroup_number", index); + } + packet->setArrayDataByName("task_group", primary_order[i]->GetDescription(), index); + index++; + } + } + } + for (int32 i = 0; i < secondary_order.size(); i++) { + if (secondary_order[i]->GetTaskGroup()) { + if (task_group_names.count(secondary_order[i]) > 0) + packet->setArrayDataByName("task_group", secondary_order[i]->GetTaskGroup(), index); + else + continue; + packet->setSubArrayLengthByName("num_tasks", task_group[secondary_order[i]->GetTaskGroup()].size(), index); + packet->setSubArrayLengthByName("num_updates", task_group[secondary_order[i]->GetTaskGroup()].size(), index); + map_data_count += task_group[secondary_order[i]->GetTaskGroup()].size(); + if (task_group[secondary_order[i]->GetTaskGroup()].size() > 0) + packet->setDataByName("bullets", 1); + for (int32 x = 0; x < task_group[secondary_order[i]->GetTaskGroup()].size(); x++) { + step = task_group[secondary_order[i]->GetTaskGroup()].at(x); + if (!step) + continue; + if (step->GetDescription()) + packet->setSubArrayDataByName("task", step->GetDescription(), index, x); + if (step->Complete()) + packet->setSubArrayDataByName("task_completed", 1, index, x); + else + packet->setSubArrayDataByName("task_completed", 0, index, x); + packet->setSubArrayDataByName("index", x, index, x); + packet->setSubArrayDataByName("update_currentval", step->GetQuestCurrentQuantity(), index, x); + packet->setSubArrayDataByName("update_maxval", step->GetQuestNeededQuantity(), index, x); + packet->setSubArrayDataByName("icon", step->GetIcon(), index, x); + if (step->GetUpdateTargetName()) + packet->setSubArrayDataByName("update_target_name", step->GetUpdateTargetName(), index, x); + if (updateStep && step == updateStep) { + packet->setDataByName("update", 1); + if (!quest_failure) + packet->setDataByName("onscreen_update", 1); + packet->setDataByName("onscreen_update_count", update_count); + packet->setDataByName("onscreen_update_icon", step->GetIcon()); + if (step->GetUpdateName()) + packet->setDataByName("onscreen_update_text", step->GetUpdateName()); + else if (step->GetDescription()) + packet->setDataByName("onscreen_update_text", step->GetDescription()); + if (quest_failure) + packet->setDataByName("onscreen_update_text2", "failed"); + packet->setDataByName("update_task_number", x); + packet->setDataByName("update_taskgroup_number", index); + } + packet->setArrayDataByName("unknown4", 0xFFFFFFFF, x); + } + index++; + } + else { + if (task_group_names.count(secondary_order[i]) > 0) { + step = secondary_order[i]; + if (updateStep && step == updateStep) { + packet->setDataByName("update", 1); + if (!quest_failure) + packet->setDataByName("onscreen_update", 1); + packet->setDataByName("onscreen_update_count", update_count); + packet->setDataByName("onscreen_update_icon", step->GetIcon()); + if (step->GetUpdateName()) + packet->setDataByName("onscreen_update_text", step->GetUpdateName()); + else if (step->GetDescription()) + packet->setDataByName("onscreen_update_text", step->GetDescription()); + packet->setDataByName("update_task_number", i); + packet->setDataByName("update_taskgroup_number", index); + } + if (task_group_names.size() == 1) { + packet->setSubArrayLengthByName("num_tasks", 1, index); + packet->setSubArrayDataByName("task", secondary_order[i]->GetDescription(), index); + packet->setDataByName("bullets", 0); + } + else + packet->setArrayDataByName("task_group", secondary_order[i]->GetDescription(), index); + index++; + } + } + } + + for (int16 i = 0; i < total_task_groups; i++) + packet->setArrayDataByName("unknown4", 0xFFFFFFFF, i); + + if (step->GetItemID() > 0) { + packet->setArrayLengthByName("usable_item_count", 1); + Item* item = player->GetPlayerItemList()->GetItemFromID(step->GetItemID(), 1); + if (item) { + packet->setArrayDataByName("item_id", item->details.item_id, 0); + packet->setArrayDataByName("item_unique_id", item->details.unique_id, 0); + packet->setArrayDataByName("item_icon", item->details.icon, 0); + packet->setArrayDataByName("unknown2", 0xFFFFFFFF, 0);//item->details.item_id, 0); + + } + } + } + MQuestSteps.unlock(); + + + string reward_str = ""; + if (version >= 1096) + reward_str = "reward_data_"; + string tmp = reward_str + "reward"; + packet->setDataByName(tmp.c_str(), "Quest Reward!"); + if (reward_coins > 0) { + tmp = reward_str + "min_coin"; + packet->setDataByName(tmp.c_str(), reward_coins); + tmp = reward_str + "max_coin"; + packet->setDataByName(tmp.c_str(), reward_coins_max); + } + tmp = reward_str + "status_points"; + packet->setDataByName(tmp.c_str(), reward_status); + if (reward_comment.length() > 0) { + tmp = reward_str + "text"; + packet->setDataByName(tmp.c_str(), reward_comment.c_str()); + } + if (reward_items.size() > 0) { + tmp = reward_str + "num_rewards"; + packet->setArrayLengthByName(tmp.c_str(), reward_items.size()); + Item* item = 0; + for (int32 i = 0; i < reward_items.size(); i++) { + item = reward_items[i]; + packet->setArrayDataByName("reward_id", item->details.item_id, i); + if (version < 860) + packet->setItemArrayDataByName("item", item, player, i, 0, -1); + else if (version < 1193) + packet->setItemArrayDataByName("item", item, player, i); + else + packet->setItemArrayDataByName("item", item, player, i, 0, 2); + } + } + if (selectable_reward_items.size() > 0) { + tmp = reward_str + "num_select_rewards"; + packet->setArrayLengthByName(tmp.c_str(), selectable_reward_items.size()); + Item* item = 0; + for (int32 i = 0; i < selectable_reward_items.size(); i++) { + item = selectable_reward_items[i]; + packet->setArrayDataByName("select_reward_id", item->details.item_id, i); + if (version < 860) + packet->setItemArrayDataByName("select_item", item, player, i, 0, -1); + else if (version < 1193) + packet->setItemArrayDataByName("select_item", item, player, i); + else + packet->setItemArrayDataByName("select_item", item, player, i, 0, 2); + } + } + map* reward_factions = GetRewardFactions(); + if (reward_factions && reward_factions->size() > 0) { + tmp = reward_str + "num_factions"; + packet->setArrayLengthByName(tmp.c_str(), reward_factions->size()); + map::iterator itr; + int16 index = 0; + for (itr = reward_factions->begin(); itr != reward_factions->end(); itr++) { + int32 faction_id = itr->first; + sint32 amount = itr->second; + const char* faction_name = master_faction_list.GetFactionNameByID(faction_id); + if (faction_name) { + packet->setArrayDataByName("faction_name", const_cast(faction_name), index); + packet->setArrayDataByName("amount", amount, index); + } + index++; + } + } + + //packet->setArrayLengthByName("map_data_array_size", map_data_count); + + EQ2Packet* outapp = packet->serialize(); + //packet->PrintPacket(); + //DumpPacket(outapp); + safe_delete(packet); + return outapp; + } + + return 0; +} + +bool Quest::AddQuestStep(QuestStep* step){ + bool ret = true; + MQuestSteps.lock(); + if(quest_step_map.count(step->GetStepID()) == 0){ + quest_steps.push_back(step); + quest_step_reverse_map[step] = step->GetStepID(); + quest_step_map[step->GetStepID()] = step; + if(step->GetTaskGroup()){ + string tmp_task_group = string(step->GetTaskGroup()); + if(task_group.count(tmp_task_group) == 0){ + task_group_order[task_group_num] = tmp_task_group; + task_group_num++; + } + task_group[tmp_task_group].push_back(step); + } + else{ + string tmp_task_group = string(step->GetDescription()); + if(task_group.count(tmp_task_group) == 0){ + task_group_order[task_group_num] = tmp_task_group; + task_group_num++; + } + task_group[tmp_task_group].push_back(step); + } + } + else{ + LogWrite(QUEST__ERROR, 0, "Quest", "Quest Warning in '%s': step %u used multiple times!", GetName(), step->GetStepID()); + ret = false; + } + MQuestSteps.unlock(); + return ret; +} + +bool Quest::RemoveQuestStep(int32 step, Client* client) { + bool ret = true; + MQuestSteps.writelock(__FUNCTION__, __LINE__); + if (quest_step_map.count(step) > 0) { + QuestStep* quest_step = quest_step_map[step]; + if (quest_step) { + client->QueuePacket(QuestJournalReply(client->GetVersion(), client->GetNameCRC(), client->GetPlayer(), quest_step, 0, 0, true)); + int32 step2 = step - 1; + QuestStep* reset_step = quest_step_map[step2]; + reset_step->SetStepProgress(0); + MCompletedActions.lock(); + complete_actions.erase(step); + MCompletedActions.unlock(); + string tmp_task_group = string(quest_step->GetTaskGroup()); + if(task_group.count(tmp_task_group) > 0) { + task_group.erase(tmp_task_group); + int task_num = 0; + map::iterator itr; + for (itr = task_group_order.begin(); itr != task_group_order.end(); itr++) { + if (itr->second == tmp_task_group) { + task_num = itr->first; + break; + } + } + if (task_num > 0) { + task_group_order.erase(task_num); + task_group_num--; + } + } + + // Remove the step from the various maps before we delete it + quest_step_map.erase(step); + quest_step_reverse_map.erase(quest_step); + vector::iterator itr; + for (itr = quest_steps.begin(); itr != quest_steps.end(); itr++) { + if ((*itr) == quest_step) { + quest_steps.erase(itr); + break; + } + } + safe_delete(quest_step); + } + else { + LogWrite(QUEST__ERROR, 0, "Quest", "Unable to get a valid step (%u) for quest %s", step, GetName()); + ret = false; + } + } + else { + LogWrite(QUEST__ERROR, 0, "Quest", "Unable to remove step (%u) for quest %s", step, GetName()); + ret = false; + } + MQuestSteps.releasewritelock(__FUNCTION__, __LINE__); + return ret; +} + +QuestStep* Quest::AddQuestStep(int32 id, int8 in_type, string in_description, vector* in_ids, int32 in_quantity, const char* in_task_group, vector* in_locations, float in_max_variation, float in_percentage,int32 in_usableitemid){ + QuestStep* step = new QuestStep(id, in_type, in_description, in_ids, in_quantity, in_task_group, in_locations, in_max_variation, in_percentage, in_usableitemid); + if(!AddQuestStep(step)){ + safe_delete(step); + return 0; + } + return step; +} + +void Quest::AddPrereqClass(int8 class_id){ + prereq_classes.push_back(class_id); +} + +void Quest::AddPrereqTradeskillClass(int8 class_id) { + prereq_tradeskillclass.push_back(class_id); +} + +void Quest::AddPrereqModelType(int16 model_type){ + prereq_model_types.push_back(model_type); +} + +void Quest::AddPrereqRace(int8 race){ + prereq_races.push_back(race); +} + +void Quest::SetPrereqLevel(int8 lvl){ + prereq_level = lvl; +} + +void Quest::SetPrereqTSLevel(int8 lvl) { + prereq_tslevel = lvl; +} + +void Quest::AddPrereqQuest(int32 quest_id){ + prereq_quests.push_back(quest_id); +} + +void Quest::AddPrereqFaction(int32 faction_id, sint32 min, sint32 max){ + QuestFactionPrereq faction; + faction.faction_id = faction_id; + faction.min = min; + faction.max = max; + prereq_factions.push_back(faction); +} + +void Quest::AddPrereqItem(Item* item){ + prereq_items.push_back(item); +} + +void Quest::AddSelectableRewardItem(Item* item){ + selectable_reward_items.push_back(item); +} + +void Quest::AddRewardItem(Item* item){ + reward_items.push_back(item); +} + +void Quest::AddRewardCoins(int32 copper, int32 silver, int32 gold, int32 plat){ + reward_coins = copper + (silver*100) + (gold*10000) + ((int64)plat*1000000); +} + +void Quest::AddRewardCoinsMax(int64 coins){ + reward_coins_max = coins; +} + +void Quest::AddRewardFaction(int32 faction_id, sint32 amount){ + reward_factions[faction_id] = amount; +} + +void Quest::SetRewardStatus(int32 amount){ + reward_status = amount; +} + +void Quest::SetRewardComment(string comment){ + reward_comment = comment; +} + +void Quest::SetRewardXP(int32 xp){ + reward_exp = xp; +} + +vector* Quest::GetPrereqClasses(){ + return &prereq_classes; +} + +vector* Quest::GetPrereqTradeskillClasses(){ + return &prereq_tradeskillclass; +} + +vector* Quest::GetPrereqFactions(){ + return &prereq_factions; +} + +vector* Quest::GetPrereqRaces(){ + return &prereq_races; +} + +vector* Quest::GetPrereqModelTypes(){ + return &prereq_model_types; +} + +int8 Quest::GetPrereqLevel(){ + return prereq_level; +} + +int8 Quest::GetPrereqTSLevel() { + return prereq_tslevel; +} + +vector* Quest::GetPrereqQuests(){ + return &prereq_quests; +} + +vector* Quest::GetPrereqItems(){ + return &prereq_items; +} + +vector* Quest::GetRewardItems(){ + return &reward_items; +} + +vector* Quest::GetSelectableRewardItems(){ + return &selectable_reward_items; +} + +map* Quest::GetRewardFactions() { + return &reward_factions; +} + +void Quest::SetTaskGroupDescription(int32 step, string desc, bool display_bullets){ + MQuestSteps.lock(); + if(step <= task_group_num && task_group_order.count(step) > 0){ + string old_desc = task_group_order[step]; + if(display_bullets) + task_group[desc] = task_group[old_desc]; + else{ + if(task_group[old_desc].size() > 0){ + task_group[desc].push_back(task_group[old_desc].at(0)); + task_group[desc].at(0)->ResetTaskGroup(); + task_group[desc].at(0)->SetDescription(desc); + } + } + task_group.erase(old_desc); + task_group_order[step] = desc; + } + MQuestSteps.unlock(); +} + +void Quest::SetStepDescription(int32 step, string desc){ + MQuestSteps.lock(); + for(int32 i=0;iGetStepID() == step){ + quest_steps[i]->SetDescription(desc); + break; + } + } + MQuestSteps.unlock(); +} + +void Quest::SetDescription(string desc){ + description = desc; +} + +void Quest::SetCompletedDescription(string desc){ + completed_description = desc; +} + +const char* Quest::GetCompletedDescription(){ + if(completed_description.size() > 0) + return completed_description.c_str(); + return 0; +} + +void Quest::AddCompleteAction(int32 step, string action){ + MCompletedActions.lock(); + complete_actions[step] = action; + MCompletedActions.unlock(); +} + +void Quest::AddProgressAction(int32 step, string action){ + MProgressActions.lock(); + progress_actions[step] = action; + MProgressActions.unlock(); +} + +void Quest::AddFailedAction(int32 step, string action) { + MFailedActions.writelock(__FUNCTION__, __LINE__); + failed_actions[step] = action; + MFailedActions.releasewritelock(__FUNCTION__, __LINE__); +} + +void Quest::SetCompleteAction(string action){ + complete_action = action; +} + +const char* Quest::GetCompleteAction(){ + if(complete_action.length() > 0) + return complete_action.c_str(); + return 0; +} + +const char* Quest::GetCompleteAction(int32 step){ + const char* ret = 0; + MCompletedActions.lock(); + if(complete_actions.count(step) > 0) + ret = complete_actions[step].c_str(); + MCompletedActions.unlock(); + return ret; +} + +void Quest::SetQuestReturnNPC(int32 id){ + return_id = id; +} + +int32 Quest::GetQuestReturnNPC(){ + return return_id; +} + +void Quest::SetQuestGiver(int32 id){ + quest_giver = id; + if(return_id == 0) + return_id = id; +} + +bool Quest::GetCompleted(){ + bool ret = true; + for(int32 i=0;iComplete() == false){ + ret = false; + break; + } + } + return ret; +} + +bool Quest::CheckCategoryYellow(){ + bool ret = false; + string category = GetType(); + + //Check for these category names, return true to set category as yellow in the quest journal + if (category == "Signature" || category == "Heritage" || category == "Hallmark" || category == "Deity" || category == "Miscellaneaous" || category == "Language" || category == "Lore and Legend" || category == "World Event" || category == "Tradeskill") + ret = true; + return ret; +} + +Player* Quest::GetPlayer(){ + return player; +} + +void Quest::SetPlayer(Player* in_player){ + player = in_player; +} + +void Quest::SetGeneratedCoin(int64 coin){ + generated_coin = coin; +} + +int32 Quest::GetQuestGiver(){ + return quest_giver; +} + +int64 Quest::GetCoinsReward(){ + return reward_coins; +} + +int64 Quest::GetCoinsRewardMax(){ + return reward_coins_max; +} + +int64 Quest::GetGeneratedCoin(){ + return generated_coin; +} + +int32 Quest::GetExpReward(){ + return reward_exp; +} + +void Quest::GiveQuestReward(Player* player){ + if(reward_coins > 0) + player->AddCoins(reward_coins); + reward_items.clear(); +} + +bool Quest::GetDeleted(){ + return deleted; +} + +void Quest::SetDeleted(bool val){ + deleted = val; +} + +bool Quest::GetUpdateRequired(){ + return update_needed; +} + +void Quest::SetUpdateRequired(bool val){ + update_needed = val; +} + +void Quest::SetTurnedIn(bool val){ + turned_in = val; + visible = 0; +} + +bool Quest::GetTurnedIn(){ + return turned_in; +} + +void Quest::SetName(string in_name) { + name = in_name; +} + +void Quest::SetType(string in_type) { + type = in_type; +} + +void Quest::SetLevel(int8 in_level) { + level = in_level; +} + +void Quest::SetCompletedFlag(bool val) { + completed_flag = val; + SetUpdateRequired(true); +} + +void Quest::SetStepTimer(int32 duration) { + m_timestamp = duration == 0 ? 0 : Timer::GetUnixTimeStamp() + duration; +} + +void Quest::StepFailed(int32 step) { + if(lua_interface && failed_actions.count(step) > 0 && failed_actions[step].length() > 0) + lua_interface->CallQuestFunction(this, failed_actions[step].c_str(), player); +} + +MasterQuestList::MasterQuestList(){ + MQuests.SetName("MasterQuestList::MQuests"); +} + +void MasterQuestList::Reload(){ + MQuests.lock(); + quests.clear(); //deletes taken care of in LuaInterface + if(lua_interface) + lua_interface->DestroyQuests(true); + MQuests.unlock(); +} + +void MasterQuestList::LockQuests(){ + MQuests.lock(); +} + +void MasterQuestList::UnlockQuests(){ + MQuests.unlock(); +} diff --git a/EQ2/source/WorldServer/Quests.h b/EQ2/source/WorldServer/Quests.h new file mode 100644 index 000000000..cf50dbef5 --- /dev/null +++ b/EQ2/source/WorldServer/Quests.h @@ -0,0 +1,407 @@ +/* + EQ2Emulator: Everquest II Server Emulator + Copyright (C) 2007 EQ2EMulator Development Team (http://www.eq2emulator.net) + + This file is part of EQ2Emulator. + + EQ2Emulator is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + EQ2Emulator is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with EQ2Emulator. If not, see . +*/ +#ifndef QUESTS_H +#define QUESTS_H + +#include +#include +#include "Items/Items.h" + +#define QUEST_STEP_TYPE_KILL 1 +#define QUEST_STEP_TYPE_CHAT 2 +#define QUEST_STEP_TYPE_OBTAIN_ITEM 3 +#define QUEST_STEP_TYPE_LOCATION 4 +#define QUEST_STEP_TYPE_SPELL 5 +#define QUEST_STEP_TYPE_NORMAL 6 +#define QUEST_STEP_TYPE_CRAFT 7 +#define QUEST_STEP_TYPE_HARVEST 8 + +#define QUEST_DISPLAY_STATUS_HIDDEN 0 +#define QUEST_DISPLAY_STATUS_NO_CHECK 1 +#define QUEST_DISPLAY_STATUS_YELLOW 2 +#define QUEST_DISPLAY_STATUS_COMPLETED 4 +#define QUEST_DISPLAY_STATUS_REPEATABLE 8 +#define QUEST_DISPLAY_STATUS_UNKNOWN1 16 +#define QUEST_DISPLAY_STATUS_COMPLETE_FLAG 32 +#define QUEST_DISPLAY_STATUS_UNKNOWN2 64 +#define QUEST_DISPLAY_STATUS_CHECK 128 + +// Almost all quests have these values, but they don't see to effect anything +#define QUEST_DISPLAY_STATUS_NORMAL QUEST_DISPLAY_STATUS_UNKNOWN1 + QUEST_DISPLAY_STATUS_UNKNOWN2 + +struct QuestFactionPrereq{ + int32 faction_id; + sint32 min; + sint32 max; +}; + +struct Location { + int32 id; + float x; + float y; + float z; +}; + +class QuestStep{ +public: + QuestStep(int32 in_id, int8 in_type, string in_description, vector* in_ids, int32 in_quantity, const char* in_task_group, vector* in_locations, float in_max_variation, float in_percentage, int32 in_usableitemid); + QuestStep(QuestStep* old_step); + ~QuestStep(); + bool CheckStepKillUpdate(int32 id); + bool CheckStepChatUpdate(int32 id); + bool CheckStepItemUpdate(int32 id); + bool CheckStepLocationUpdate(float char_x, float char_y, float char_z); + bool CheckStepSpellUpdate(int32 id); + int32 AddStepProgress(int32 val); + void SetStepProgress(int32 val); + int32 GetStepProgress(); + int8 GetStepType(); + bool Complete(); + void SetComplete(); + void ResetTaskGroup(); + const char* GetTaskGroup(); + const char* GetDescription(); + void SetDescription(string desc); + int16 GetQuestCurrentQuantity(); + int16 GetQuestNeededQuantity(); + vector* GetUpdateIDs() { return ids; } + int16 GetIcon(); + void SetIcon(int16 in_icon); + const char* GetUpdateTargetName(); + void SetUpdateTargetName(const char* name); + const char* GetUpdateName(); + void SetUpdateName(const char* name); + int32 GetStepID(); + int32 GetItemID(); + bool WasUpdated(); + void WasUpdated(bool val); + float GetPercentage(); + + void SetTaskGroup(string val) { task_group = val; } + +private: + bool updated; + int32 id; + string update_name; + string update_target_name; + int16 icon; + int8 type; + string description; + vector* ids; + int32 quantity; + string task_group; + vector* locations; + float max_variation; + float percentage; + int32 usableitemid; + int32 step_progress; +}; +class Player; +class Spell; + +class Quest{ +public: + Quest(int32 in_id); + Quest(Quest* old_quest); + ~Quest(); + EQ2Packet* OfferQuest(int16 version, Player* player); + EQ2Packet* QuestJournalReply(int16 version, int32 player_crc, Player* player, QuestStep* updateStep = 0, int8 update_count = 1, bool old_completed_quest=false, bool quest_failure = false, bool display_quest_helper = true); + + void RegisterQuest(string in_name, string in_type, string in_zone, int8 in_level, string in_desc); + + void SetPrereqLevel(int8 lvl); + void SetPrereqTSLevel(int8 lvl); + void SetPrereqMaxLevel(int8 lvl) {prereq_max_level = lvl;} + void SetPrereqMaxTSLevel(int8 lvl) {prereq_max_tslevel = lvl;} + void AddPrereqClass(int8 class_id); + void AddPrereqTradeskillClass(int8 class_id); + void AddPrereqModelType(int16 model_type); + void AddPrereqRace(int8 race); + void AddPrereqQuest(int32 quest_id); + void AddPrereqFaction(int32 faction_id, sint32 min, sint32 max = 0); + void AddPrereqItem(Item* item); + + void AddRewardItem(Item* item); + void AddSelectableRewardItem(Item* item); + void AddRewardCoins(int32 copper, int32 silver, int32 gold, int32 plat); + void AddRewardCoinsMax(int64 coins); + void AddRewardFaction(int32 faction_id, sint32 amount); + void SetRewardStatus(int32 amount); + void SetRewardComment(string comment); + void SetRewardXP(int32 xp); + void SetRewardTSXP(int32 xp) { reward_tsexp = xp; } + + bool AddQuestStep(QuestStep* step); + QuestStep* AddQuestStep(int32 id, int8 in_type, string in_description, vector* in_ids, int32 in_quantity, const char* in_task_group = 0, vector* in_locations = 0, float in_max_variation = 0, float in_percentage = 0,int32 in_usableitemid = 0); + bool SetStepComplete(int32 step); + bool AddStepProgress(int32 step_id, int32 progress); + int16 GetQuestStep(); + int32 GetStepProgress(int32 step_id); + int16 GetTaskGroupStep(); + bool QuestStepIsActive(int16 quest_step_id); + bool CheckQuestKillUpdate(Spawn* spawn, bool update = true); + bool CheckQuestChatUpdate(int32 id, bool update = true); + bool CheckQuestItemUpdate(int32 id, int8 quantity = 1); + bool CheckQuestLocationUpdate(float char_x, float char_y, float char_z); + bool CheckQuestSpellUpdate(Spell* spell); + bool CheckQuestCraftUpdate(int32 id, int32 quantity = 1); + bool CheckQuestHarvestUpdate(int32 id, int32 quantity = 1); + + int8 GetQuestLevel(); + int8 GetVisible(); + int32 GetQuestID(); + void SetQuestID(int32 in_id); + int8 GetPrereqLevel(); + int8 GetPrereqTSLevel(); + int8 GetPrereqMaxLevel() {return prereq_max_level;} + int8 GetPrereqMaxTSLevel() {return prereq_max_tslevel;} + vector* GetPrereqFactions(); + vector* GetPrereqRaces(); + vector* GetPrereqModelTypes(); + vector* GetPrereqClasses(); + vector* GetPrereqTradeskillClasses(); + vector* GetPrereqQuests(); + vector* GetPrereqItems(); + vector* GetRewardItems(); + vector* GetSelectableRewardItems(); + map* GetRewardFactions(); + void GiveQuestReward(Player* player); + void AddCompleteAction(int32 step, string action); + void AddProgressAction(int32 step, string action); + void SetName(string in_name); + void SetType(string in_type); + void SetLevel(int8 in_level); + void SetEncounterLevel(int8 level) {enc_level = level;} + void SetDescription(string desc); + void SetStepDescription(int32 step, string desc); + void SetTaskGroupDescription(int32 step, string desc, bool display_bullets); + + int64 GetCoinsReward(); + int64 GetCoinsRewardMax(); + int64 GetGeneratedCoin(); + void SetGeneratedCoin(int64 coin); + int8 GetLevel(); + int8 GetEncounterLevel() { return enc_level; } + const char* GetName(); + const char* GetDescription(); + const char* GetType(); + void SetZone(string in_zone); + const char* GetZone(); + int8 GetDay(); + int8 GetMonth(); + int8 GetYear(); + int32 GetStatusPoints(); + void SetDay(int8 value); + void SetMonth(int8 value); + void SetYear(int8 value); + vector* GetQuestUpdates(); + vector* GetQuestFailures(); + vector* GetQuestSteps(); + bool GetQuestStepCompleted(int32 step_id); + QuestStep* GetQuestStep(int32 step_id); + void SetCompleteAction(string action); + const char* GetCompleteAction(); + const char* GetCompleteAction(int32 step); + void SetQuestGiver(int32 id); + int32 GetQuestGiver(); + void SetQuestReturnNPC(int32 id); + int32 GetQuestReturnNPC(); + Player* GetPlayer(); + void SetPlayer(Player* in_player); + bool GetCompleted(); + void SetCompletedDescription(string desc); + const char* GetCompletedDescription(); + int32 GetExpReward(); + int32 GetTSExpReward() { return reward_tsexp; } + bool GetDeleted(); + void SetDeleted(bool val); + bool GetUpdateRequired(); + void SetUpdateRequired(bool val); + void SetTurnedIn(bool val); + bool GetTurnedIn(); + bool GetSaveNeeded(){ return needs_save; } + void SetSaveNeeded(bool val){ needs_save = val; } + + void SetFeatherColor(int8 val) { m_featherColor = val; } + int8 GetFeatherColor() { return m_featherColor; } + + void SetRepeatable(bool val) { m_repeatable = val; } + bool IsRepeatable() { return m_repeatable; } + + void SetTracked(bool val) { m_tracked = val; } + bool IsTracked() { return m_tracked && !m_hidden; } + void SetCompletedFlag(bool val); + bool GetCompletedFlag() {return completed_flag;} + bool GetYellowName() {return yellow_name;} + void SetYellowName(bool val) {yellow_name = val;} + bool CheckCategoryYellow(); + + ///Sets the custom flags for use in lua + ///Value to set the flags to + void SetQuestFlags(int32 flags) { m_questFlags = flags; SetSaveNeeded(true); } + + ///Gets the custom lua flags + ///The current flags (int32) + int32 GetQuestFlags() { return m_questFlags; } + + ///Checks to see if the quest is hidden + ///True if the quest is hidden + bool IsHidden() { return m_hidden; } + + ///Sets the quest hidden flag + ///Value to set the hidden flag to + void SetHidden(bool val) { m_hidden = val; SetSaveNeeded(true); } + + ///Gets the step timer + ///Unix timestamp (int32) + int32 GetStepTimer() { return m_timestamp; } + + ///Sets the step timer + ///How long to set the timer for, in seconds + void SetStepTimer(int32 duration); + + ///Sets the step that the timer is for + ///Step to set the timer for + void SetTimerStep(int32 step) { m_timerStep = step; } + + ///Gets the step that the timer is for + int32 GetTimerStep() { return m_timerStep; } + + ///Adds a lua call back function for when the step fails + ///The step to add the call back for + ///The lua callback function + void AddFailedAction(int32 step, string action); + + ///Fail the given step + ///The step to fail + void StepFailed(int32 step); + + ///Removes the given step from the quest + ///The step id to remove + ///The client who has this quest + ///True if able to remove the quest + bool RemoveQuestStep(int32 step, Client* client); + + int16 GetCompleteCount() { return m_completeCount; } + void SetCompleteCount(int16 val) { m_completeCount = val; } + void IncrementCompleteCount() { m_completeCount += 1; } + +protected: + bool needs_save; + Mutex MQuestSteps; + Mutex MCompletedActions; + Mutex MProgressActions; + Mutex MFailedActions; + bool turned_in; + bool update_needed; + bool deleted; + + string completed_description; + + map complete_actions; + map progress_actions; + map failed_actions; + int8 day; //only here to make our lives easier + int8 month; + int8 year; + int8 visible; + + int32 id; + string name; + string type; + string zone; + int8 level; + int8 enc_level; + string description; + string complete_action; + + Player* player; + vector prereq_factions; + int8 prereq_level; + int8 prereq_tslevel; + int8 prereq_max_level; + int8 prereq_max_tslevel; + vector prereq_model_types; + vector prereq_races; + vector prereq_classes; + vector prereq_tradeskillclass; + vector prereq_quests; + vector prereq_items; + vector reward_items; + vector selectable_reward_items; + int64 reward_coins; + int64 reward_coins_max; + int64 generated_coin; + map reward_factions; + int32 reward_status; + string reward_comment; + int32 reward_exp; + int32 reward_tsexp; + vector step_updates; + vector step_failures; + map quest_step_map; + map quest_step_reverse_map; + vector quest_steps; + map task_group_order; + int16 task_group_num; + map > task_group; + int32 quest_giver; + int32 return_id; + int8 m_featherColor; + bool m_repeatable; + bool m_tracked; + bool completed_flag; + bool yellow_name; + int32 m_questFlags; + bool m_hidden; + + int32 m_timestamp; // timer for a quest step + int32 m_timerStep; // used for the fail action when timer expires + + int16 m_completeCount; +}; + +class MasterQuestList{ +public: + MasterQuestList(); + Quest* GetQuest(int32 id){ + if(quests.count(id) > 0) + return new Quest(quests[id]); + else + return 0; + } + + map* GetQuests(){ + return &quests; + } + + void AddQuest(int32 id, Quest* quest){ + quests[id] = quest; + } + void Reload(); + void LockQuests(); + void UnlockQuests(); + +private: + Mutex MQuests; + map quests; +}; + +#endif diff --git a/EQ2/source/WorldServer/RaceTypes/RaceTypes.cpp b/EQ2/source/WorldServer/RaceTypes/RaceTypes.cpp new file mode 100644 index 000000000..52eddc489 --- /dev/null +++ b/EQ2/source/WorldServer/RaceTypes/RaceTypes.cpp @@ -0,0 +1,74 @@ +/* + EQ2Emulator: Everquest II Server Emulator + Copyright (C) 2007 EQ2EMulator Development Team (http://www.eq2emulator.net) + + This file is part of EQ2Emulator. + + EQ2Emulator is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + EQ2Emulator is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with EQ2Emulator. If not, see . +*/ + +#include "RaceTypes.h" + +MasterRaceTypeList::MasterRaceTypeList() { + +} + +MasterRaceTypeList::~MasterRaceTypeList() { + +} + +void MasterRaceTypeList::AddRaceType(int16 model_id, int16 raceType_id) { + if (m_raceList.count(model_id) == 0) + m_raceList[model_id] = raceType_id; +} + +int16 MasterRaceTypeList::GetRaceType(int16 model_id) { + int16 ret = 0; + + if (m_raceList.count(model_id) > 0) + ret = m_raceList[model_id]; + + return ret; +} + +int16 MasterRaceTypeList::GetRaceBaseType(int16 model_id) { + int16 ret = 0; + + if (m_raceList.count(model_id) == 0) + return ret; + + int16 race = m_raceList[model_id]; + if (race >= DRAGONKIND && race < FAY) + ret = DRAGONKIND; + else if (race >= FAY && race < MAGICAL) + ret = FAY; + else if (race >= MAGICAL && race < MECHANIMAGICAL) + ret = MAGICAL; + else if (race >= MECHANIMAGICAL && race < NATURAL) + ret = MECHANIMAGICAL; + else if (race >= NATURAL && race < PLANAR) + ret = NATURAL; + else if (race >= PLANAR && race < PLANT) + ret = PLANAR; + else if (race >= PLANT && race < SENTIENT) + ret = PLANT; + else if (race >= SENTIENT && race < UNDEAD) + ret = SENTIENT; + else if (race >= UNDEAD && race < WERE) + ret = UNDEAD; + else if (race >= WERE) + ret = WERE; + + return ret; +} \ No newline at end of file diff --git a/EQ2/source/WorldServer/RaceTypes/RaceTypes.h b/EQ2/source/WorldServer/RaceTypes/RaceTypes.h new file mode 100644 index 000000000..218a5c70a --- /dev/null +++ b/EQ2/source/WorldServer/RaceTypes/RaceTypes.h @@ -0,0 +1,309 @@ +/* + EQ2Emulator: Everquest II Server Emulator + Copyright (C) 2007 EQ2EMulator Development Team (http://www.eq2emulator.net) + + This file is part of EQ2Emulator. + + EQ2Emulator is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + EQ2Emulator is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with EQ2Emulator. If not, see . +*/ + +#ifndef __RACETYPES_H__ +#define __RACETYPES_H__ + +#include "../../common/types.h" +#include + +#define DRAGONKIND 101 +#define DRAGON 102 +#define DRAKE 103 +#define DRAKOTA 104 +#define DROAG 105 +#define FAEDRAKE 106 +//FLYINGSNAKE Defined in natural as well, think is a better fit there then here +#define SOKOKAR 107 +#define WURM 108 +#define WYRM 109 +#define WYVERN 110 + +#define FAY 111 +#define ARASAI_NPC 112 +#define BIXIE 113 +#define BROWNIE 114 +#define DRYAD 115 +#define FAE_NPC 116 +#define FAIRY 117 +#define SIREN 118 +#define SPIRIT 119 +#define SPRITE 120 +#define TREANT 121 //L&L 8 +#define WISP 122 + +#define MAGICAL 123 +#define AMORPH 124 +#define CONSTRUCT 125 +#define ANIMATION 126 +#define BONEGOLEM 127 +#define BOVOCH 128 +#define CARRIONGOLEM 129 +#define CLAYGOLEM 130 +#define CUBE 131 +#define DERVISH 132 +#define DEVOURER 133 +#define GARGOYLE 134 +#define GOLEM 135 +#define GOO 136 +#define HARPY 137 +#define IMP 138 +#define LIVINGSTATUE 139 +#define MANNEQUIN 140 +#define MIMIC 141 +#define MOPPET 142 +#define NAGA 143 +#define NAYAD 144 +#define OOZE 145 +#define RUMBLER 146 +#define RUSTMONSTER 147 +#define SATYR 148 +#define SCARECROW 149 +#define SPHEROID 150 +#define TENTACLETERROR 151 +#define TOME 152 +#define UNICORN 153 +#define WOODELEMENTAL 154 + +#define MECHANIMAGICAL 155 +#define CLOCKWORK 156 +#define IRONGUARDIAN 157 + +#define NATURAL 158 +#define ANIMAL 159 +#define AQUATIC 160 +#define AVIAN 161 +#define CANINE 162 +#define EQUINE 163 +#define FELINE 164 +#define INSECT 165 +#define PRIMATE 166 +#define REPTILE 167 +#define ANEMONE 168 +#define APOPHELI 169 +#define ARMADILLO 170 +#define BADGER 171 +#define BARRACUDA 172 +#define BASILISK 173 +#define BAT 174 +#define BEAR 175 +#define BEAVER 176 +#define BEETLE 177 +#define BOVINE 178 +#define BRONTOTHERIUM 179 +#define BRUTE 180 +#define CAMEL 181 +#define CAT 182 +#define CENTIPEDE 183 +#define CERBERUS 184 +#define CHIMERA 185 +#define CHOKIDAI 186 +#define COBRA 187 +#define COCKATRICE 188 +#define CRAB 189 +#define CROCODILE 190 +#define DEER 191 +#define DRAGONFLY 192 +#define DUCK 193 +#define EEL 194 +#define ELEPHANT 195 +#define FLYINGSNAKE 196 +#define FROG 197 +#define GOAT 198 +#define GORILLA 199 +#define GRIFFIN 200 +#define HAWK 201 +#define HIVEQUEEN 202 +#define HORSE 203 +#define HYENA 204 +#define KHOALRAT 205 +#define KYBUR 206 +#define LEECH 207 +#define LEOPARD 208 +#define LION 209 +#define LIZARD 210 +#define MAMMOTH 211 +#define MANTARAY 212 +#define MOLERAT 213 +#define MONKEY 214 +#define MYTHICAL 215 +#define OCTOPUS 216 +#define OWLBEAR 217 +#define PIG 218 +#define PIRANHA 219 +#define RAPTOR 220 +#define RAT 221 +#define RHINOCEROS 222 +#define ROCKCRAWLER 223 +#define SABERTOOTH 224 +#define SCORPION 225 +#define SEATURTLE 226 +#define SHARK 227 +#define SHEEP 228 +#define SLUG 229 +#define SNAKE 230 +#define SPIDER 231 +#define STIRGE 232 +#define SWORDFISH 233 +#define TIGER 234 +#define TURTLE 235 +#define VERMIN 236 +#define VULRICH 237 +#define WOLF 238 +#define YETI 239 + +#define PLANAR 240 +#define ABOMINATION 241 +#define AIRELEMENTAL 242 +#define AMYGDALAN 243 +#define AVATAR 244 +#define CYCLOPS 245 +#define DEMON 246 +#define DJINN 247 +#define EARTHELEMENTAL 248 +#define EFREETI 249 +#define ELEMENTAL 250 +#define ETHEREAL 251 +#define ETHERPINE 252 +#define EVILEYE 253 +#define FIREELEMENTAL 254 +#define GAZER 255 +#define GEHEIN 256 +#define GEONID 257 +#define GIANT 258 //L&L 5 +#define SALAMANDER 259 +#define SHADOWEDMAN 260 +#define SPHINX 261 +#define SPORE 262 +#define SUCCUBUS 263 +#define VALKYRIE 264 +#define VOIDBEAST 265 +#define WATERELEMENTAL 266 +#define WRAITH 267 + +#define PLANT 268 +#define CARNIVOROUSPLANT 269 +#define CATOPLEBAS 270 +#define MANTRAP 271 +#define ROOTABOMINATION 272 +#define ROOTHORROR 273 +#define SUCCULENT 274 + +#define SENTIENT 275 +#define ASHLOK 276 +#define AVIAK 277 +#define BARBARIAN_NPC 278 +#define BIRDMAN 279 +#define BOARFIEND 280 +#define BUGBEAR 281 +#define BURYNAI 282 +#define CENTAUR 283 ////L&L 4 +#define COLDAIN 284 +#define DAL 285 +#define DARKELF_NPC 286 +#define DIZOK 287 +#define DRACHNID 288 +#define DRAFLING 289 +#define DROLVARG 290 +#define DWARF_NPC 291 +#define ERUDITE_NPC 292 +#define ETTIN 293 +#define FREEBLOOD_NPC 294 +#define FROGLOK_NPC 295 +#define FROSTFELLELF 296 +#define FUNGUSMAN 297 +#define GNOLL 298 //L&L 1 +#define GNOME_NPC 299 +#define GOBLIN 300 //L&L 3 +#define GRUENGACH 301 +#define HALFELF_NPC 302 // Not on the list from wikia but all other races were here so added them +#define HALFLING_NPC 303 +#define HIGHELF_NPC 304 // Not on the list from wikia but all other races were here so added them +#define HOLGRESH 305 +#define HOOLUK 306 +#define HUAMEIN 307 +#define HUMAN_NPC 308 +#define HUMANOID 309 +#define IKSAR_NPC 310 +#define KERIGDAL 311 +#define KERRAN_NPC 312 +#define KOBOLD 313 +#define LIZARDMAN 314 +#define MINOTAUR 315 +#define OGRE_NPC 316 +#define ORC 317 //L&L 2 +#define OTHMIR 318 +#define RATONGA_NPC 319 +#define RAVASECT 320 +#define RENDADAL 321 +#define ROEKILLIK 322 +#define SARNAK_NPC 323 +#define SKORPIKIS 324 +#define SPIROC 325 +#define TROGLODYTE 326 +#define TROLL_NPC 327 +#define ULTHORK 328 +#define VULTAK 329 +#define WOODELF_NPC 330 +#define WRAITHGUARD 331 +#define YHALEI 332 + +#define UNDEAD 333 +#define GHOST 334 +#define GHOUL 335 +#define GUNTHAK 336 +#define HORROR 337 +#define MUMMY 338 +#define SHINREEORCS 339 +#define SKELETON 340 //L&L 6 +#define SPECTRE 341 +#define VAMPIRE_NPC 342 +#define ZOMBIE 343 //L&L 7 + +#define WERE 344 +#define AHROUNWEREWOLVES 345 +#define LYKULAKWEREWOLVES 346 +#define WEREWOLF 347 + + +class MasterRaceTypeList { +public: + MasterRaceTypeList(); + ~MasterRaceTypeList(); + + /// Add a race type define to the list + /// The id of the model + /// The id of the race type + void AddRaceType(int16 model_id, int16 raceType_id); + + /// Gets the race type for the given model + /// The model id to get the race type for + int16 GetRaceType(int16 model_id); + + /// Gets the base race type for the given model + /// The model id to get the base race type for + int16 GetRaceBaseType(int16 model_id); + +private: + // model id, race type id + map m_raceList; +}; + +#endif \ No newline at end of file diff --git a/EQ2/source/WorldServer/RaceTypes/RaceTypesDB.cpp b/EQ2/source/WorldServer/RaceTypes/RaceTypesDB.cpp new file mode 100644 index 000000000..e0957f558 --- /dev/null +++ b/EQ2/source/WorldServer/RaceTypes/RaceTypesDB.cpp @@ -0,0 +1,43 @@ +/* + EQ2Emulator: Everquest II Server Emulator + Copyright (C) 2007 EQ2EMulator Development Team (http://www.eq2emulator.net) + + This file is part of EQ2Emulator. + + EQ2Emulator is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + EQ2Emulator is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with EQ2Emulator. If not, see . +*/ + +#include "../WorldDatabase.h" +#include "../../common/Log.h" +#include "RaceTypes.h" + +extern MasterRaceTypeList race_types_list; + +void WorldDatabase::LoadRaceTypes() { + DatabaseResult result; + + if(database_new.Select(&result, "SELECT `model_type`, `race_id` FROM `race_types`")) { + int32 count = 0; + + while (result.Next()) { + int16 race_id = result.GetInt16Str("race_id"); + if (race_id > 0) { + race_types_list.AddRaceType(result.GetInt32Str("model_id"), race_id); + count++; + } + } + + LogWrite(WORLD__INFO, 0, "World", "- Loaded %u Race Types", count); + } +} \ No newline at end of file diff --git a/EQ2/source/WorldServer/Recipes/Recipe.cpp b/EQ2/source/WorldServer/Recipes/Recipe.cpp new file mode 100644 index 000000000..54aec4cc6 --- /dev/null +++ b/EQ2/source/WorldServer/Recipes/Recipe.cpp @@ -0,0 +1,661 @@ +/* + EQ2Emulator: Everquest II Server Emulator + Copyright (C) 2007 EQ2EMulator Development Team (http://www.eq2emulator.net) + + This file is part of EQ2Emulator. + + EQ2Emulator is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + EQ2Emulator is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with EQ2Emulator. If not, see . +*/ +#include +#include "../../common/debug.h" +#include "../../common/Log.h" +#include "../../common/database.h" +#include "Recipe.h" +#include "../../common/ConfigReader.h" +#include "../Items/Items.h" + +extern ConfigReader configReader; +extern MasterItemList master_item_list; + +Recipe::Recipe() { + id = 0; + book_id = 0; + memset(name, 0, sizeof(name)); + memset(book_name, 0, sizeof(book_name)); + memset(book, 0, sizeof(book)); + memset(device, 0, sizeof(device)); + level = 0; + tier = 0; + icon = 0; + skill = 0; + technique = 0; + knowledge = 0; + classes = 0; + unknown2 = 0; + unknown3 = 0; + unknown4 = 0; +} + +Recipe::~Recipe() { + map::iterator itr; + for (itr = products.begin(); itr != products.end(); itr++) + safe_delete(itr->second); +} + +Recipe::Recipe(Recipe *in){ + assert(in); + id = in->GetID(); + book_id = in->GetBookID(); + strncpy(name, in->GetName(), sizeof(name)); + strncpy(book_name, in->GetBookName(), sizeof(book_name)); + strncpy(book, in->GetBook(), sizeof(book)); + strncpy(device, in->GetDevice(), sizeof(device)); + level = in->GetLevel(); + tier = in->GetTier(); + icon = in->GetIcon(); + skill = in->GetSkill(); + technique = in->GetTechnique(); + knowledge = in->GetKnowledge(); + classes = in->GetClasses(); + unknown2 = in->GetUnknown2(); + unknown3 = in->GetUnknown3(); + unknown4 = in->GetUnknown4(); +} + +MasterRecipeList::MasterRecipeList() { + m_recipes.SetName("MasterRecipeList::recipes"); +} + +MasterRecipeList::~MasterRecipeList() { + ClearRecipes(); +} + +bool MasterRecipeList::AddRecipe(Recipe *recipe) { + bool ret = false; + int32 id; + + assert(recipe); + + id = recipe->GetID(); + m_recipes.writelock(__FUNCTION__, __LINE__); + if (recipes.count(id) == 0) { + recipes[id] = recipe; + ret = true; + } + m_recipes.releasewritelock(__FUNCTION__, __LINE__); + + return ret; +} + +Recipe * MasterRecipeList::GetRecipe(int32 recipe_id) { + Recipe *ret = 0; + + m_recipes.readlock(__FUNCTION__, __LINE__); + if (recipes.count(recipe_id) > 0) + ret = recipes[recipe_id]; + m_recipes.releasereadlock(__FUNCTION__, __LINE__); + + return ret; +} + +Recipe* MasterRecipeList::GetRecipeByName(const char* name) { + Recipe* ret = 0; + map::iterator itr; + + m_recipes.readlock(__FUNCTION__, __LINE__); + for (itr = recipes.begin(); itr != recipes.end(); itr++) { + if (::ToLower(string(name)) == ::ToLower(string(itr->second->GetName()))) { + ret = itr->second; + break; + } + } + m_recipes.releasereadlock(__FUNCTION__, __LINE__); + + return ret; +} + +void MasterRecipeList::ClearRecipes() { + map::iterator itr; + + m_recipes.writelock(__FUNCTION__, __LINE__); + for (itr = recipes.begin(); itr != recipes.end(); itr++) + safe_delete(itr->second); + recipes.clear(); + m_recipes.releasewritelock(__FUNCTION__, __LINE__); +} + +int32 MasterRecipeList::Size() { + int32 ret; + + m_recipes.readlock(__FUNCTION__, __LINE__); + ret = (int32)recipes.size(); + m_recipes.releasereadlock(__FUNCTION__, __LINE__); + + return ret; +} + +vector* MasterRecipeList::GetRecipes(const char* book_name) { + vector* ret = new vector; + map::iterator itr; + + m_recipes.writelock(__FUNCTION__, __LINE__); + for (itr = recipes.begin(); itr != recipes.end(); itr++) { + if (::ToLower(string(book_name)) == ::ToLower(string(itr->second->GetBook()))) + ret->push_back(itr->second); + } + m_recipes.releasewritelock(__FUNCTION__, __LINE__); + + return ret; +} + +PlayerRecipeList::PlayerRecipeList(){ +} + +PlayerRecipeList::~PlayerRecipeList(){ + ClearRecipes(); +} + +bool PlayerRecipeList::AddRecipe(Recipe *recipe){ + assert(recipe); + + if(recipes.count(recipe->GetID()) == 0){ + recipes[recipe->GetID()] = recipe; + return true; + } + return false; +} + +Recipe * PlayerRecipeList::GetRecipe(int32 recipe_id){ + if (recipes.count(recipe_id) > 0) + return recipes[recipe_id]; + return 0; +} + +void PlayerRecipeList::ClearRecipes(){ + map::iterator itr; + + for (itr = recipes.begin(); itr != recipes.end(); itr++) + safe_delete(itr->second); + recipes.clear(); +} + +MasterRecipeBookList::MasterRecipeBookList(){ + m_recipeBooks.SetName("MasterRecipeBookList::recipeBooks"); +} + +MasterRecipeBookList::~MasterRecipeBookList(){ + ClearRecipeBooks(); +} + +bool MasterRecipeBookList::AddRecipeBook(Recipe *recipe){ + bool ret = false; + int32 id = 0; + + assert(recipe); + + id = recipe->GetBookID(); + m_recipeBooks.writelock(__FUNCTION__, __LINE__); + if(recipeBooks.count(id) == 0){ + recipeBooks[id] = recipe; + ret = true; + } + m_recipeBooks.releasewritelock(__FUNCTION__, __LINE__); + return ret; +} + +Recipe * MasterRecipeBookList::GetRecipeBooks(int32 recipebook_id){ + Recipe *ret = 0; + + m_recipeBooks.readlock(__FUNCTION__, __LINE__); + if (recipeBooks.count(recipebook_id) > 0) + ret = recipeBooks[recipebook_id]; + m_recipeBooks.releasereadlock(__FUNCTION__, __LINE__); + + return ret; +} + +void MasterRecipeBookList::ClearRecipeBooks(){ + map::iterator itr; + + m_recipeBooks.writelock(__FUNCTION__, __LINE__); + for (itr = recipeBooks.begin(); itr != recipeBooks.end(); itr++) + safe_delete(itr->second); + recipeBooks.clear(); + m_recipeBooks.releasewritelock(__FUNCTION__, __LINE__); +} + +int32 MasterRecipeBookList::Size(){ + int32 ret = 0; + + m_recipeBooks.readlock(__FUNCTION__, __LINE__); + ret = (int32)recipeBooks.size(); + m_recipeBooks.releasereadlock(__FUNCTION__, __LINE__); + + return ret; +} + +EQ2Packet* MasterRecipeList::GetRecipePacket(int32 recipe_id, Client* client, bool display, int8 packet_type){ + Recipe *recipe = GetRecipe(recipe_id); + if(recipe){ + LogWrite(TRADESKILL__DEBUG, 5, "Recipes", "Recipe ID: %u Recipe Name: %s", recipe->GetID(), recipe->GetName()); + return recipe->SerializeRecipe(client, recipe, display, packet_type); + } + return 0; +} + +PlayerRecipeBookList::PlayerRecipeBookList(){ +} + +PlayerRecipeBookList::~PlayerRecipeBookList(){ + ClearRecipeBooks(); +} + +bool PlayerRecipeBookList::AddRecipeBook(Recipe *recipe){ + assert(recipe); + + if(recipeBooks.count(recipe->GetBookID()) == 0){ + recipeBooks[recipe->GetBookID()] = recipe; + return true; + } + return false; +} + +Recipe * PlayerRecipeBookList::GetRecipeBook(int32 recipebook_id){ + if(recipeBooks.count(recipebook_id) > 0) + return recipeBooks[recipebook_id]; + return 0; +} + +bool PlayerRecipeBookList::HasRecipeBook(int32 book_id) { + if (recipeBooks.count(book_id) > 0) + return true; + return false; +} + +void PlayerRecipeBookList::ClearRecipeBooks(){ + map::iterator itr; + + for(itr = recipeBooks.begin(); itr != recipeBooks.end(); itr++) + safe_delete(itr->second); + recipeBooks.clear(); +} + +EQ2Packet * Recipe::SerializeRecipe(Client *client, Recipe *recipe, bool display, int8 packet_type, int8 subpacket_type, const char *struct_name){ + int16 version = 1; + Item* item = 0; + RecipeProducts* rp = 0; + vector::iterator itr; + int8 i = 0; + int32 firstID = 0; + int32 primary_comp_id = 0; + if(client) + version = client->GetVersion(); + if(!struct_name) + struct_name = "WS_ExamineRecipeInfo"; + PacketStruct *packet = configReader.getStruct(struct_name, version); + if(display) + packet->setSubstructDataByName("info_header", "show_name", 1); + else + packet->setSubstructDataByName("info_header", "show_popup", 1); + if(packet_type > 0) + packet->setSubstructDataByName("info_header", "packettype", packet_type*256 + 0xFE); + else + if(version == 1096) + packet->setSubstructDataByName("info_header", "packettype",0x35FE); + if (version == 1208) + packet->setSubstructDataByName("info_header", "packettype", 0x45FE); + if(version >= 57048) + packet->setSubstructDataByName("info_header", "packettype",0x48FE); + if(subpacket_type == 0) + subpacket_type = 0x02; + packet->setSubstructDataByName("info_header", "packetsubtype", subpacket_type); + + packet->setSubstructDataByName("recipe_info", "id", recipe->GetID()); + packet->setSubstructDataByName("recipe_info", "unknown", 3); + packet->setSubstructDataByName("recipe_info", "level", recipe->GetLevel()); + packet->setSubstructDataByName("recipe_info", "technique", recipe->GetTechnique()); + packet->setSubstructDataByName("recipe_info", "skill_level", 50); //50 + packet->setSubstructDataByName("recipe_info", "knowledge", recipe->GetKnowledge()); + packet->setSubstructDataByName("recipe_info", "device", recipe->GetDevice()); + packet->setSubstructDataByName("recipe_info", "icon", recipe->GetIcon()); + packet->setSubstructDataByName("recipe_info", "unknown3", 1); + packet->setSubstructDataByName("recipe_info", "adventure_id", 0xFF); + packet->setSubstructDataByName("recipe_info", "tradeskill_id", client ? client->GetPlayer()->GetTradeskillClass() : 0); + packet->setSubstructDataByName("recipe_info", "unknown4", 100); + packet->setSubstructDataByName("recipe_info", "unknown4aa", 1); + packet->setSubstructDataByName("recipe_info", "unknown5a", 20); + packet->setSubstructDataByName("recipe_info", "product_classes", recipe->GetClasses()); + packet->setSubstructDataByName("recipe_info", "show_previous", 15); + packet->setSubstructDataByName("recipe_info", "previous1_icon", 186); + packet->setSubstructDataByName("recipe_info", "previous1_name", "previous1_name"); + packet->setSubstructDataByName("recipe_info", "previous1_qty", 1); + packet->setSubstructDataByName("recipe_info", "previous1_item_id", 4142); + packet->setSubstructDataByName("recipe_info", "previous1_item_crc", -853046774); + packet->setSubstructDataByName("recipe_info", "previous2_icon", 186); + packet->setSubstructDataByName("recipe_info", "previous2_name", "previous2_name"); + packet->setSubstructDataByName("recipe_info", "previous2_qty", 1); + packet->setSubstructDataByName("recipe_info", "previous2_item_id", 4142); + packet->setSubstructDataByName("recipe_info", "previous2_item_crc", -853046774); + packet->setSubstructDataByName("recipe_info", "previous3_icon", 186); + packet->setSubstructDataByName("recipe_info", "previous3_name", "previous3_name"); + packet->setSubstructDataByName("recipe_info", "previous3_qty", 1); + packet->setSubstructDataByName("recipe_info", "previous3_item_id", 4142); + packet->setSubstructDataByName("recipe_info", "previous3_item_crc", -853046774); + packet->setSubstructDataByName("recipe_info", "firstbar_icon", 186); + packet->setSubstructDataByName("recipe_info", "firstbar_name", "firstbar_name"); + packet->setSubstructDataByName("recipe_info", "firstbar_qty", 1); + packet->setSubstructDataByName("recipe_info", "firstbar_item_id", 4142); + packet->setSubstructDataByName("recipe_info", "firstbar_item_crc", -853046774); + packet->setSubstructDataByName("recipe_info", "secondbar_icon", 186); + packet->setSubstructDataByName("recipe_info", "secondbar_name", "secondbar_name"); + packet->setSubstructDataByName("recipe_info", "secondbar_qty", 1); + packet->setSubstructDataByName("recipe_info", "secondbar_item_id", 4142); + packet->setSubstructDataByName("recipe_info", "secondbar_item_crc", -853046774); + packet->setSubstructDataByName("recipe_info", "thirdbar_icon", 198); + packet->setSubstructDataByName("recipe_info", "thirdbar_name", "thirdbar_name"); + packet->setSubstructDataByName("recipe_info", "thirdbar_qty", 1); + packet->setSubstructDataByName("recipe_info", "thirdbar_item_id", 12098); + + packet->setSubstructDataByName("recipe_info", "thirdbar_item_crc", -2065846136); + item = master_item_list.GetItemByName(recipe->GetName()); + if(item) { + packet->setSubstructDataByName("recipe_info", "product_icon", item->details.icon); //item->details.icon); + packet->setSubstructDataByName("recipe_info", "product_name", item->name.c_str()); //item->name); + packet->setSubstructDataByName("recipe_info", "product_qty", 1); + packet->setSubstructDataByName("recipe_info", "product_item_id", item->details.item_id); //item->details.item_id); + packet->setSubstructDataByName("recipe_info", "product_item_crc", 0); //item->details.item_crc); + } + rp = recipe->products[0]; + if (rp->byproduct_id > 0) { + item = 0; + item = master_item_list.GetItem(rp->byproduct_id); + if (item) { + packet->setSubstructDataByName("recipe_info", "byproduct_icon", item->details.icon);//11 + packet->setSubstructDataByName("recipe_info", "byproduct_id", item->details.item_id); + } + } + + + //string xxx = recipe-> + //item = master_item_list.GetItemByName (recipe->GetBuild1ComponentTitle()); + // Reset item to 0 + item = 0; + + // Check to see if we have a primary component (slot = 0) + if (recipe->components.count(0) > 0) { + vector rc = recipe->components[0]; + for (itr = rc.begin(); itr != rc.end(); itr++, i++) { + if (firstID == 0) + firstID = *itr; + + item = master_item_list.GetItem(*itr); + item = 0; + item = client->GetPlayer()->item_list.GetItemFromID((*itr)); + if (item) { + packet->setSubstructDataByName("recipe_info", "primary_qty_avail", item->details.count); + packet->setSubstructDataByName("recipe_info", "primary_comp", recipe->primary_build_comp_title); + } + } + // store the id of the primary comp + primary_comp_id = firstID; + // Set the default item id to the first component id + item = 0; + item = client->GetPlayer()->item_list.GetItemFromID(firstID); + if (item) { + + } + // Reset the variables we will reuse + i = 0; + firstID = 0; + item = 0; + } + else { + LogWrite(TRADESKILL__ERROR, 0, "Recipes", "Recipe has no primary component"); + + } + + + int8 total_build_components = 0; + if (recipe->components.count(1) > 0) + total_build_components++; + if (recipe->components.count(2)) + total_build_components++; + if (recipe->components.count(3)) + total_build_components++; + if (recipe->components.count(4)) + total_build_components++; + + + if (total_build_components > 0) { + packet->setSubstructArrayLengthByName("recipe_info", "num_comps", total_build_components); + for (int8 index = 0; index < 4; index++) { + + if (recipe->components.count(index + 1) == 0) + continue; + + //packet->setArrayDataByName("build_slot", index, index); + + vector rc = recipe->components[index + 1]; + + //packet->setSubArrayLengthByName("num_build_choices", rc.size(), index); + for (itr = rc.begin(); itr != rc.end(); itr++, i++) { + if (firstID == 0) + firstID = *itr; + string comp_title; + int8 comp_qty; + if (index == 0) { + comp_title = recipe->build1_comp_title; + comp_qty = recipe->build_comp_qty; + item = master_item_list.GetItem(*itr); + packet->setArrayDataByName("build_comp", comp_title.c_str(), index ); + packet->setArrayDataByName("build_comp_qty", comp_qty, index ); + item = master_item_list.GetItem(*itr); + item = 0; + item = client->GetPlayer()->item_list.GetItemFromID((*itr)); + if (item) { + packet->setArrayDataByName("build_comp_qty_avail", item->details.count, index ); + + } + } + else if (index == 1) { + comp_title = recipe->build2_comp_title; + comp_qty = recipe->build2_comp_qty; + item = master_item_list.GetItem(*itr); + packet->setArrayDataByName("build_comp", comp_title.c_str(), index ); + packet->setArrayDataByName("build_comp_qty", comp_qty, index ); + item = master_item_list.GetItem(*itr); + item = 0; + item = client->GetPlayer()->item_list.GetItemFromID((*itr)); + if (item) { + packet->setArrayDataByName("build_comp_qty_avail", item->details.count, index ); + + } + } + else if (index == 2) { + comp_title = recipe->build3_comp_title; + comp_qty = recipe->build3_comp_qty; + item = master_item_list.GetItem(*itr); + packet->setArrayDataByName("build_comp", comp_title.c_str(), index ); + packet->setArrayDataByName("build_comp_qty", comp_qty, index ); + item = master_item_list.GetItem(*itr); + item = 0; + item = client->GetPlayer()->item_list.GetItemFromID((*itr)); + if (item) { + packet->setArrayDataByName("build_comp_qty_avail", item->details.count, index ); + + } + } + else if (index == 3) { + comp_title = recipe->build4_comp_title; + comp_qty = recipe->build4_comp_qty; + item = master_item_list.GetItem(*itr); + packet->setArrayDataByName("build_comp", comp_title.c_str(), index ); + packet->setArrayDataByName("build_comp_qty", comp_qty, index ); + item = master_item_list.GetItem(*itr); + item = 0; + item = client->GetPlayer()->item_list.GetItemFromID((*itr)); + if (item) { + packet->setArrayDataByName("build_comp_qty_avail", item->details.count, index ); + + } + } + + + //item = master_item_list.GetItem(*itr); + //packet->setArrayDataByName("build_comp", comp_title.c_str(), index -1); + //packet->setArrayDataByName("build_comp_qty", comp_qty, index - 1); + //item = master_item_list.GetItem(*itr); + //item = 0; + //item = client->GetPlayer()->item_list.GetItemFromID((*itr)); + //if (item) { + // packet->setArrayDataByName("build_comp_qty_avail", item->details.count, index - 1); + + //} + + + item = 0; + item = client->GetPlayer()->item_list.GetItemFromID((*itr)); + if (item) { + //packet->setSubArrayDataByName("build_total_quantity", item->details.count, index, i); + } + } + + // Set the default item id to the first component id + //packet->setArrayDataByName("build_item_selected", 1, index); + //packet->setArrayDataByName("build_selected_item_id", firstID, index); + item = 0; + item = client->GetPlayer()->item_list.GetItemFromID(firstID); + int8 qty = 0; + if (item) { + qty = (int8)item->details.count; + if (qty > 0 && firstID == primary_comp_id) + qty -= 1; + } + + if (index == 0) { + // packet->setArrayDataByName("build_title", recipe->GetBuild1ComponentTitle(), index); + //packet->setArrayDataByName("build_qty", recipe->GetBuild1ComponentQuantity(), index); + if (item) { + // packet->setArrayDataByName("build_selected_item_qty", min(qty, recipe->GetBuild1ComponentQuantity()), index); + } + } + else if (index == 1) { + // packet->setArrayDataByName("build_title", recipe->GetBuild2ComponentTitle(), index); + // packet->setArrayDataByName("build_qty", recipe->GetBuild2ComponentQuantity(), index); + if (item) { + // packet->setArrayDataByName("build_selected_item_qty", min(qty, recipe->GetBuild2ComponentQuantity()), index); + } + } + else if (index == 2) { + // packet->setArrayDataByName("build_title", recipe->GetBuild3ComponentTitle(), index); + // packet->setArrayDataByName("build_qty", recipe->GetBuild3ComponentQuantity(), index); + if (item) { + // packet->setArrayDataByName("build_selected_item_qty", min(qty, recipe->GetBuild3ComponentQuantity()), index); + } + } + else { + // packet->setArrayDataByName("build_title", recipe->GetBuild4ComponentTitle(), index); + // packet->setArrayDataByName("build_qty", recipe->GetBuild4ComponentQuantity(), index); + if (item) { + //packet->setArrayDataByName("build_selected_item_qty", min(qty, recipe->GetBuild4ComponentQuantity()), index); + } + } + + // Reset the variables we will reuse + i = 0; + firstID = 0; + item = 0; + } + + } + + + + + //packet->setArrayDataByName("build_comp", "build_comp1", 0); + //packet->setArrayDataByName("build_comp_qty", 1, 0); + //packet->setArrayDataByName("build_comp_qty_avail", 24, 0); + + //packet->setArrayDataByName("build_comp", "build_comp2", 1); + //packet->setArrayDataByName("build_comp_qty", 1, 1); + //packet->setArrayDataByName("build_comp_qty_avail", 16, 1); + + //packet->setArrayDataByName("build_comp", "build_comp3", 2); + //packet->setArrayDataByName("build_comp_qty", 1, 2); + //packet->setArrayDataByName("build_comp_qty_avail", 15, 2); + + // Check to see if we have a fuel component (slot = 5) + if (recipe->components.count(5) > 0) { + vector rc = recipe->components[5]; + //packet->setArrayLengthByName("num_fuel_choices", rc.size()); + for (itr = rc.begin(); itr != rc.end(); itr++, i++) { + if (firstID == 0) + firstID = *itr; + + item = master_item_list.GetItem(*itr); + //packet->setSubstructDataByName("recipe_info", "fuel_comp_qty_avail", item->details.count); + item = 0; + item = client->GetPlayer()->item_list.GetItemFromID((*itr)); + if (item) { + packet->setSubstructDataByName("recipe_info", "fuel_comp_qty_avail", item->details.count); + } + } + + // Set the default item id to the first component id + //packet->setDataByName("fuel_selected_item_id", firstID); + //packet->setDataByName("fuel_item_selected", 1); + item = 0; + item = client->GetPlayer()->item_list.GetItemFromID(firstID); + if (item) { + // packet->setDataByName("fuel_selected_item_qty", min(recipe->GetFuelComponentQuantity(), (int8)item->details.count)); + } + //packet->setDataByName("fuel_title", recipe->GetFuelComponentTitle()); + //packet->setDataByName("fuel_qty", recipe->GetFuelComponentQuantity()); + + // Reset the variables we will reuse + i = 0; + firstID = 0; + item = 0; + } + else { + LogWrite(TRADESKILL__ERROR, 0, "Recipes", "Recipe has no fuel component"); + + } + + + + + packet->setSubstructDataByName("recipe_info", "fuel_comp", recipe->fuel_comp_title); + packet->setSubstructDataByName("recipe_info", "fuel_comp_qty", recipe->fuel_comp_qty); + //packet->setSubstructDataByName("recipe_info", "fuel_comp_qty_avail", 10); + packet->setSubstructDataByName("recipe_info", "build_comp_qty_avail_flag", 1); + packet->setSubstructDataByName("recipe_info", "unknown6", 4, 0); + packet->setSubstructDataByName("recipe_info", "min_product", 1); + packet->setSubstructDataByName("recipe_info", "max_product", 1); + packet->setSubstructDataByName("recipe_info", "available_flag", 4); + packet->setSubstructDataByName("recipe_info", "not_commissionable", 1); + packet->setSubstructDataByName("recipe_info", "recipe_name", recipe->GetName()); + packet->setSubstructDataByName("recipe_info", "recipe_description", "The art of sculpting metal into a candelabra."); + //packet->PrintPacket(); + EQ2Packet* data = packet->serialize(); + EQ2Packet* app = new EQ2Packet(OP_ClientCmdMsg, data->pBuffer, data->size); + safe_delete(packet); + safe_delete(data); + //DumpPacket(app); + return app; +} + +void Recipe::AddBuildComp(int32 itemID, int8 slot) { + components[slot].push_back(itemID); +} diff --git a/EQ2/source/WorldServer/Recipes/Recipe.h b/EQ2/source/WorldServer/Recipes/Recipe.h new file mode 100644 index 000000000..64c08ed04 --- /dev/null +++ b/EQ2/source/WorldServer/Recipes/Recipe.h @@ -0,0 +1,230 @@ +/* + EQ2Emulator: Everquest II Server Emulator + Copyright (C) 2007 EQ2EMulator Development Team (http://www.eq2emulator.net) + + This file is part of EQ2Emulator. + + EQ2Emulator is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + EQ2Emulator is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with EQ2Emulator. If not, see . +*/ +#ifndef RECIPE_H_ +#define RECIPE_H_ + +#include "../../common/types.h" +#include "../../common/Mutex.h" +#include +#include + +using namespace std; + +struct RecipeProducts { + int32 product_id; + int32 byproduct_id; + int8 product_qty; + int8 byproduct_qty; +}; + +class Recipe { +public: + Recipe(); + Recipe(Recipe *in); + virtual ~Recipe(); + + EQ2Packet *SerializeRecipe(Client *client, Recipe *recipe, bool display, int8 packet_type = 0, int8 sub_packet_type = 0, const char *struct_name = 0); + void SetID(int32 id) {this->id = id;} + void SetBookID(int32 book_id) {this->book_id = book_id;} + void SetName(const char *name) {strncpy(this->name, name, sizeof(this->name));} + void SetBookName(const char *book_name) {strncpy(this->book_name, book_name, sizeof(this->book_name));} + void SetBook(const char *book) {strncpy(this->book, book, sizeof(this->book));} + void SetDevice(const char *device) {strncpy(this->device, device, sizeof(this->device));} + void SetLevel(int8 level) {this->level = level;} + void SetTier(int8 tier) {this->tier = tier;} + void SetIcon(int16 icon) {this->icon = icon;} + void SetSkill(int32 skill) {this->skill = skill;} + void SetTechnique(int32 technique) {this->technique = technique;} + void SetKnowledge(int32 knowledge) {this->knowledge = knowledge;} + void SetClasses(int32 classes) {this->classes = classes;} + void SetUnknown2(int32 unknown2) {this->unknown2 = unknown2;} + void SetUnknown3(int32 unknown3) {this->unknown3 = unknown3;} + void SetUnknown4(int32 unknown4) {this->unknown4 = unknown4;} + void SetProductID(int32 itemID) { product_item_id = itemID; } + void SetProductQuantity(int8 qty) { product_qty = qty; } + void SetProductName(const char* productName) { strncpy(product_name, productName, sizeof(product_name)); } + void SetBuildComponentTitle(const char* title) { strncpy(build1_comp_title, title, sizeof(build1_comp_title)); } + void SetBuild2ComponentTitle(const char* title) { strncpy(build2_comp_title, title, sizeof(build2_comp_title)); } + void SetBuild3ComponentTitle(const char* title) { strncpy(build3_comp_title, title, sizeof(build3_comp_title)); } + void SetBuild4ComponentTitle(const char* title) { strncpy(build4_comp_title, title, sizeof(build4_comp_title)); } + void SetFuelComponentTitle(const char* title) { strncpy(fuel_comp_title, title, sizeof(fuel_comp_title)); } + void SetPrimaryComponentTitle(const char* title) { strncpy(primary_build_comp_title, title, sizeof(primary_build_comp_title)); } + void SetBuild1ComponentQuantity(int8 qty) { build_comp_qty = qty; } + void SetBuild2ComponentQuantity(int8 qty) { build2_comp_qty = qty; } + void SetBuild3ComponentQuantity(int8 qty) { build3_comp_qty = qty; } + void SetBuild4ComponentQuantity(int8 qty) { build4_comp_qty = qty; } + void SetFuelComponentQuantity(int8 qty) { fuel_comp_qty = qty; } + + int32 GetID() {return id;} + int32 GetBookID() {return book_id;} + const char * GetName() {return name;} + const char * GetBookName() {return book_name;} + const char * GetBook() {return book;} + const char * GetDevice() {return device;} + int8 GetLevel() {return level;} + int8 GetTier() {return tier;} + int16 GetIcon() {return icon;} + int32 GetSkill() {return skill;} + int32 GetTechnique() {return technique;} + int32 GetKnowledge() {return knowledge;} + int32 GetClasses() {return classes;} + int32 GetUnknown2() {return unknown2;} + int32 GetUnknown3() {return unknown3;} + int32 GetUnknown4() {return unknown4;} + + int32 GetProductID() { return product_item_id; } + const char* GetProductTitle() { return product_name; } + int8 GetProductQuantity() { return product_qty; } + const char* GetPrimaryBuildComponentTitle() { return primary_build_comp_title; } + const char* GetBuild1ComponentTitle() { return build1_comp_title; } + const char* GetBuild2ComponentTitle() { return build2_comp_title; } + const char* GetBuild3ComponentTitle() { return build3_comp_title; } + const char* GetBuild4ComponentTitle() { return build4_comp_title; } + const char* GetFuelComponentTitle() { return fuel_comp_title; } + int8 GetBuild1ComponentQuantity() { return build_comp_qty; } + int8 GetBuild2ComponentQuantity() { return build2_comp_qty; } + int8 GetBuild3ComponentQuantity() { return build3_comp_qty; } + int8 GetBuild4ComponentQuantity() { return build4_comp_qty; } + int8 GetFuelComponentQuantity() { return fuel_comp_qty; } + + ///Add a build component to this recipe + ///Item id of the component + ///Slot id for this component + void AddBuildComp(int32 itemID, int8 slot); + + // int8 = slot, vector = itemid + map > components; + + // int8 = stage, RecipeProducts = products/byproducts for this stage + map products; + + int8 GetHighestStage() { return highestStage; } + void SetHighestStage(int8 val) { highestStage = val; } + +private: + int32 id; + int32 book_id; + char name[256]; + char book_name[256]; + char book[256]; + char device[30]; + int8 level; + int8 tier; + int16 icon; + int32 skill; + int32 technique; + int32 knowledge; + int32 classes; + int32 unknown2; + int32 unknown3; + int32 unknown4; + + int32 product_item_id; + char product_name[256]; + int8 product_qty; + char primary_build_comp_title[256]; + char build1_comp_title[256]; + char build2_comp_title[256]; + char build3_comp_title[256]; + char build4_comp_title[256]; + char fuel_comp_title[256]; + int8 build_comp_qty; + int8 build2_comp_qty; + int8 build3_comp_qty; + int8 build4_comp_qty; + int8 fuel_comp_qty; + int8 highestStage; + +}; + +class MasterRecipeList { +public: + MasterRecipeList(); + virtual ~MasterRecipeList(); + + bool AddRecipe(Recipe *recipe); + Recipe * GetRecipe(int32 recipe_id); + void ClearRecipes(); + int32 Size(); + EQ2Packet* GetRecipePacket(int32 recipe_id, Client *client = 0, bool display = false, int8 packet_type = 0); + + /// Gets all the recipes for the given book name + /// Book name to get recipes for + /// A vector of all the recipes for the given book + vector* GetRecipes(const char* book_name); + + /// Gets a recipe with the given name + /// The name of the recipe to get + /// Recipe* whos name matches the given name + Recipe* GetRecipeByName(const char* name); + +private: + Mutex m_recipes; + map recipes; +}; + +class MasterRecipeBookList { +public: + MasterRecipeBookList(); + virtual ~MasterRecipeBookList(); + + bool AddRecipeBook(Recipe *recipe); + Recipe * GetRecipeBooks(int32 recipe_id); + void ClearRecipeBooks(); + int32 Size(); + +private: + Mutex m_recipeBooks; + map recipeBooks; +}; + +class PlayerRecipeList { +public: + PlayerRecipeList(); + virtual ~PlayerRecipeList(); + + bool AddRecipe(Recipe *recipe); + Recipe * GetRecipe(int32 recipe_id); + void ClearRecipes(); + int32 Size(); + + map * GetRecipes() {return &recipes;} + +private: + map recipes; +}; + +class PlayerRecipeBookList { +public: + PlayerRecipeBookList(); + virtual ~PlayerRecipeBookList(); + + bool AddRecipeBook(Recipe *recipe); + bool HasRecipeBook(int32 book_id); + Recipe * GetRecipeBook(int32 recipe_id); + void ClearRecipeBooks(); + int32 Size(); + + map * GetRecipeBooks() {return &recipeBooks;} + +private: + map recipeBooks; +}; +#endif diff --git a/EQ2/source/WorldServer/Recipes/RecipeDB.cpp b/EQ2/source/WorldServer/Recipes/RecipeDB.cpp new file mode 100644 index 000000000..783fa1a63 --- /dev/null +++ b/EQ2/source/WorldServer/Recipes/RecipeDB.cpp @@ -0,0 +1,264 @@ +/* + EQ2Emulator: Everquest II Server Emulator + Copyright (C) 2007 EQ2EMulator Development Team (http://www.eq2emulator.net) + + This file is part of EQ2Emulator. + + EQ2Emulator is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + EQ2Emulator is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with EQ2Emulator. If not, see . +*/ +#ifdef WIN32 + #include + #include +#endif +#include +#include +#include "../../common/Log.h" +#include "../WorldDatabase.h" +#include "Recipe.h" + +extern MasterRecipeList master_recipe_list; +extern MasterRecipeBookList master_recipebook_list; + +void WorldDatabase::LoadRecipes() { + Recipe *recipe; + Query query; + MYSQL_ROW row; + MYSQL_RES *res; + + res = query.RunQuery2(Q_SELECT, "SELECT `recipe_id`,`tier`,`level`,`icon`,`skill_level`,`technique`,`knowledge`,`name`,`book`,`device`,`product_classes`,`unknown2`,`unknown3`,`unknown4`, " + "`product_item_id`, `product_name`, `product_qty`, `primary_comp_title`, `build_comp_title`, `build2_comp_title`, `build3_comp_title`, `build4_comp_title`, " + "`build_comp_qty`, `build2_comp_qty`, `build3_comp_qty`, `build4_comp_qty`, `fuel_comp_title`, `fuel_comp_qty`\n" + "FROM `recipes`"); + if (res) { + while ((row = mysql_fetch_row(res))) { + recipe = new Recipe(); + recipe->SetID(atoul(row[0])); + recipe->SetTier(atoi(row[1])); + recipe->SetLevel(atoi(row[2])); + recipe->SetIcon(atoi(row[3])); + recipe->SetSkill(atoul(row[4])); + recipe->SetTechnique(atoul(row[5])); + recipe->SetKnowledge(atoul(row[6])); + recipe->SetName(row[7]); + recipe->SetBook(row[8]); + recipe->SetDevice(row[9]); + recipe->SetClasses(atoul(row[10])); + recipe->SetUnknown2(atoul(row[11])); + recipe->SetUnknown3(atoul(row[12])); + recipe->SetUnknown4(atoul(row[13])); + + LogWrite(TRADESKILL__DEBUG, 5, "Recipes", "Loading recipe: %s (%u)", recipe->GetName(), recipe->GetID()); + + recipe->SetProductID(atoul(row[14])); + recipe->SetProductName(row[15]); + recipe->SetProductQuantity(atoi(row[16])); + recipe->SetPrimaryComponentTitle(row[17]); + recipe->SetBuildComponentTitle(row[18]); + if (row[19] != NULL) + recipe->SetBuild2ComponentTitle(row[19]); + if (row[20] != NULL) + recipe->SetBuild3ComponentTitle(row[20]); + if (row[21] != NULL) + recipe->SetBuild4ComponentTitle(row[21]); + recipe->SetBuild1ComponentQuantity(atoi(row[22])); + if (row[23] != NULL) + recipe->SetBuild2ComponentQuantity(atoi(row[23])); + if (row[24] != NULL) + recipe->SetBuild3ComponentQuantity(atoi(row[24])); + if (row[25] != NULL) + recipe->SetBuild4ComponentQuantity(atoi(row[25])); + recipe->SetFuelComponentTitle(row[26]); + recipe->SetFuelComponentQuantity(atoi(row[27])); + + LogWrite(TRADESKILL__DEBUG, 7, "Recipes", "Loading recipe: %s (%u)", recipe->GetName(), recipe->GetID()); + + if (!master_recipe_list.AddRecipe(recipe)) { + LogWrite(TRADESKILL__ERROR, 0, "Recipes", "Error adding recipe '%s' - duplicate ID: %u", recipe->GetName(), recipe->GetID()); + safe_delete(recipe); + continue; + } + } + } + LoadRecipeComponents(); + LoadRecipeProducts(); + + LogWrite(TRADESKILL__DEBUG, 0, "Recipes", "\tLoaded %u recipes", master_recipe_list.Size()); +} + +void WorldDatabase::LoadRecipeBooks(){ + Recipe *recipe; + Query query; + MYSQL_ROW row; + MYSQL_RES *res; + + res = query.RunQuery2(Q_SELECT, "SELECT id, name FROM items WHERE item_type='Recipe'"); + if (res){ + while ((row = mysql_fetch_row(res))){ + recipe = new Recipe(); + recipe->SetBookID(atoul(row[0])); + recipe->SetBookName(row[1]); + + LogWrite(TRADESKILL__DEBUG, 5, "Recipes", "Loading Recipe Books: %s (%u)", recipe->GetBookName(), recipe->GetBookID()); + + if (!master_recipebook_list.AddRecipeBook(recipe)){ + LogWrite(TRADESKILL__ERROR, 0, "Recipes", "Error adding Recipe Book '%s' - duplicate ID: %u", recipe->GetBookName(), recipe->GetBookID()); + safe_delete(recipe); + continue; + } + } + } + LogWrite(TRADESKILL__DEBUG, 0, "Recipes", "\tLoaded %u Recipe Books ", master_recipebook_list.Size()); +} + +void WorldDatabase::LoadPlayerRecipes(Player *player){ + Recipe *recipe; + Query query; + MYSQL_ROW row; + MYSQL_RES *res; + int16 total = 0; + + assert(player); + + res = query.RunQuery2(Q_SELECT, "SELECT recipe_id, highest_stage FROM character_recipes WHERE char_id = %u", player->GetCharacterID()); + if (res) { + while ((row = mysql_fetch_row(res))){ + recipe = new Recipe(master_recipe_list.GetRecipe(atoul(row[0]))); + recipe->SetHighestStage(atoi(row[1])); + + LogWrite(TRADESKILL__DEBUG, 5, "Recipes", "Loading recipe: %s (%u) for player: %s (%u)", recipe->GetName(), recipe->GetID(), player->GetName(), player->GetCharacterID()); + + if (!player->GetRecipeList()->AddRecipe(recipe)){ + LogWrite(TRADESKILL__ERROR, 0, "Recipes", "Error adding recipe %u to player '%s' - duplicate ID", recipe->GetID(), player->GetName()); + safe_delete(recipe); + continue; + } + total++; + } + LogWrite(TRADESKILL__DEBUG, 0, "Recipes", "Loaded %u recipes for player: %s (%u)", total, player->GetName(), player->GetCharacterID()); + } +} + +int32 WorldDatabase::LoadPlayerRecipeBooks(int32 char_id, Player *player) { + assert(player); + + LogWrite(TRADESKILL__DEBUG, 0, "Recipes", "Loading Character Recipe Books for player '%s' ...", player->GetName()); + Query query; + MYSQL_ROW row; + MYSQL_RES *res; + int32 count = 0; + int32 old_id = 0; + int32 new_id = 0; + Recipe* recipe; + + res = query.RunQuery2(Q_SELECT, "SELECT recipebook_id FROM character_recipe_books WHERE char_id = %u", char_id); + if (res && mysql_num_rows(res) > 0) { + while (res && (row = mysql_fetch_row(res))){ + count++; + new_id = atoul(row[0]); + if(new_id == old_id) + continue; + + Item* item = master_item_list.GetItem(new_id); + if (!item) + continue; + + recipe = new Recipe(); + recipe->SetBookID(new_id); + recipe->SetBookName(item->name.c_str()); + + LogWrite(TRADESKILL__DEBUG, 5, "Recipes", "Loading Recipe Books: %s (%u)", recipe->GetBookName(), recipe->GetBookID()); + + if (!player->GetRecipeBookList()->AddRecipeBook(recipe)) { + LogWrite(TRADESKILL__ERROR, 0, "Recipes", "Error adding player Recipe Book '%s' - duplicate ID: %u", recipe->GetBookName(), recipe->GetBookID()); + safe_delete(recipe); + continue; + } + old_id = new_id; + } + } + return count; +} + +void WorldDatabase::SavePlayerRecipeBook(Player* player, int32 recipebook_id){ + Query query; + query.RunQuery2(Q_INSERT, "INSERT INTO character_recipe_books (char_id, recipebook_id) VALUES(%u, %u)", player->GetCharacterID(), recipebook_id); + if(query.GetErrorNumber() && query.GetError() && query.GetErrorNumber() < 0xFFFFFFFF) + LogWrite(TRADESKILL__ERROR, 0, "Recipes", "Error in SavePlayerRecipeBook query '%s' : %s", query.GetQuery(), query.GetError()); +} + +void WorldDatabase::SavePlayerRecipe(Player* player, int32 recipe_id) { + Query query; + query.RunQuery2(Q_INSERT, "INSERT INTO character_recipes (char_id, recipe_id) VALUES (%u, %u)", player->GetCharacterID(), recipe_id); + if(query.GetErrorNumber() && query.GetError() && query.GetErrorNumber() < 0xFFFFFFFF) + LogWrite(TRADESKILL__ERROR, 0, "Recipes", "Error in SavePlayerRecipeBook query '%s' : %s", query.GetQuery(), query.GetError()); +} + +void WorldDatabase::LoadRecipeComponents() { + Query query; + MYSQL_ROW row; + MYSQL_RES* result = query.RunQuery2(Q_SELECT, "SELECT `recipe_id`, `item_id`, `slot_id` FROM `recipe_components` ORDER BY `recipe_id` asc"); + int32 id = 0; + Recipe* recipe = 0; + if (result && mysql_num_rows(result) > 0) { + while (result && (row = mysql_fetch_row(result))) { + if (id != strtoul(row[0], NULL, 0)) { + id = strtoul(row[0], NULL, 0); + recipe = master_recipe_list.GetRecipe(id); + } + if (recipe) { + recipe->AddBuildComp(atoi(row[1]), atoi(row[2])); + } + else + LogWrite(TRADESKILL__ERROR, 0, "Recipes", "Error loading `recipe_build_comps`, Recipe ID: %u", id); + } + } +} + +void WorldDatabase::LoadRecipeProducts() { + Query query; + MYSQL_ROW row; + MYSQL_RES* result = query.RunQuery2(Q_SELECT, "SELECT `recipe_id`, `stage`, `product_id`, `byproduct_id`, `product_qty`, `byproduct_qty` FROM `recipe_products` ORDER BY `recipe_id` ASC"); + int32 id = 0; + Recipe* recipe = 0; + if (result && mysql_num_rows(result) > 0) { + while (result && (row = mysql_fetch_row(result))) { + if (id != strtoul(row[0], NULL, 0)) { + id = strtoul(row[0], NULL, 0); + recipe = master_recipe_list.GetRecipe(id); + } + if (recipe) { + int8 stage = atoi(row[1]); + RecipeProducts* rp = new RecipeProducts; + rp->product_id = atoul(row[2]); + rp->byproduct_id = atoul(row[3]); + rp->product_qty = atoi(row[4]); + rp->byproduct_qty = atoi(row[5]); + recipe->products[stage] = rp; + } + else + LogWrite(TRADESKILL__ERROR, 0, "Recipes", "Error loading `recipe_products`, Recipe ID: %u", id); + } + } +} + +void WorldDatabase::UpdatePlayerRecipe(Player* player, int32 recipe_id, int8 highest_stage) { + Query query; + query.RunQuery2(Q_UPDATE, "UPDATE `character_recipes` SET `highest_stage` = %i WHERE `char_id` = %u AND `recipe_id` = %u", highest_stage, player->GetCharacterID(), recipe_id); +} + +/* +ALTER TABLE `character_recipes` + ADD COLUMN `highest_stage` TINYINT(3) UNSIGNED NOT NULL DEFAULT '0' AFTER `recipe_id`; + +*/ \ No newline at end of file diff --git a/EQ2/source/WorldServer/Rules/Rules.cpp b/EQ2/source/WorldServer/Rules/Rules.cpp new file mode 100644 index 000000000..15828e1cd --- /dev/null +++ b/EQ2/source/WorldServer/Rules/Rules.cpp @@ -0,0 +1,400 @@ +/* + EQ2Emulator: Everquest II Server Emulator + Copyright (C) 2007 EQ2EMulator Development Team (http://www.eq2emulator.net) + + This file is part of EQ2Emulator. + + EQ2Emulator is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + EQ2Emulator is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with EQ2Emulator. If not, see . +*/ + +#include +#include "../../common/debug.h" +#include "../../common/Log.h" +#include "../../common/database.h" +#include "Rules.h" + +extern RuleManager rule_manager; + +Rule::Rule() { + category = 0; + type = 0; + strncpy(value, "", sizeof(value)); + strncpy(combined, "NONE", sizeof(combined)); +} + +Rule::Rule(int32 category, int32 type, const char *value, const char *combined) { + this->category = category; + this->type = type; + strncpy(this->value, value, sizeof(this->value)); + strncpy(this->combined, combined, sizeof(this->combined)); +} + +Rule::Rule (Rule *rule_in) { + category = rule_in->GetCategory(); + type = rule_in->GetType(); + strncpy(value, rule_in->GetValue(), sizeof(value)); + strncpy(combined, rule_in->GetCombined(), sizeof(combined)); +} + +Rule::~Rule() { +} + +RuleSet::RuleSet() { + id = 0; + memset(name, 0, sizeof(name)); + m_rules.SetName("RuleSet::rules"); +} + +RuleSet::RuleSet(RuleSet *in_rule_set) { + assert(in_rule_set); + + map > * in_rules = in_rule_set->GetRules(); + map >::iterator itr; + map::iterator itr2; + Rule * rule; + + m_rules.SetName("RuleSet::rules"); + id = in_rule_set->GetID(); + strncpy(name, in_rule_set->GetName(), sizeof(name)); + for (itr = in_rules->begin(); itr != in_rules->end(); itr++) { + for (itr2 = itr->second.begin(); itr2 != itr->second.end(); itr2++) { + rule = itr2->second; + rules[rule->GetCategory()][rule->GetType()] = new Rule(rule); + } + } +} + +RuleSet::~RuleSet() { + ClearRules(); +} + +void RuleSet::CopyRulesInto(RuleSet *in_rule_set) { + assert(in_rule_set); + + map > * in_rules = in_rule_set->GetRules(); + map >::iterator itr; + map::iterator itr2; + Rule * rule; + + ClearRules(); + m_rules.writelock(__FUNCTION__, __LINE__); + for (itr = in_rules->begin(); itr != in_rules->end(); itr++) { + for (itr2 = itr->second.begin(); itr2 != itr->second.end(); itr2++) { + rule = itr2->second; + rules[rule->GetCategory()][rule->GetType()] = new Rule(rule); + } + } + m_rules.releasewritelock(__FUNCTION__, __LINE__); +} + +void RuleSet::AddRule(Rule *rule) { + int32 category, type; + + assert(rule); + + category = rule->GetCategory(); + type = rule->GetType(); + m_rules.writelock(__FUNCTION__, __LINE__); + if (rules[category].count(type) == 0) + rules[category][type] = rule; + else + rules[category][type]->SetValue(rule->GetValue()); + m_rules.releasewritelock(__FUNCTION__, __LINE__); +} + +Rule * RuleSet::GetRule(int32 category, int32 type) { + Rule *ret = 0; + + m_rules.readlock(__FUNCTION__, __LINE__); + if (rules[category].count(type) > 0) + ret = rules[category][type]; + m_rules.releasereadlock(__FUNCTION__, __LINE__); + + if (!ret) + ret = rule_manager.GetBlankRule(); + + LogWrite(RULESYS__DEBUG, 5, "Rules", "Rule: %s, Value: %s", ret->GetCombined(), ret->GetValue()); + return ret; +} + +Rule * RuleSet::GetRule(const char *category, const char *type) { + map >::iterator itr; + map::iterator itr2; + char combined[256]; + Rule *ret = 0; + + snprintf(combined, sizeof(combined), "%s:%s", category, type); + // Zero terminate ([max - 1] = 0) to prevent a warning/error + combined[255] = 0; + + m_rules.readlock(__FUNCTION__, __LINE__); + for (itr = rules.begin(); itr != rules.end(); itr++) { + for (itr2 = itr->second.begin(); itr2 != itr->second.end(); itr2++) { + if (!strcmp(itr2->second->GetCombined(), combined)) { + ret = itr2->second; + break; + } + } + } + m_rules.releasereadlock(__FUNCTION__, __LINE__); + + return ret; +} + +void RuleSet::ClearRules() { + map >::iterator itr; + map::iterator itr2; + + m_rules.writelock(__FUNCTION__, __LINE__); + for (itr = rules.begin(); itr != rules.end(); itr++) { + for (itr2 = itr->second.begin(); itr2 != itr->second.end(); itr2++) + safe_delete(itr2->second); + } + rules.clear(); + m_rules.releasewritelock(__FUNCTION__, __LINE__); +} + +RuleManager::RuleManager() { + m_rule_sets.SetName("RuleManager::rule_sets"); + m_global_rule_set.SetName("RuleManager::global_rule_set"); + m_zone_rule_sets.SetName("RuleManager::zone_rule_sets"); + + #define RULE_INIT(category, type, value) rules[category][type] = new Rule(category, type, value, #category ":" #type) + + /* CLIENT */ + RULE_INIT(R_Client, ShowWelcomeScreen, "0"); + RULE_INIT(R_Client, GroupSpellsTimer, "1000"); + + /* FACTION */ + RULE_INIT(R_Faction, AllowFactionBasedCombat, "1"); + + /* GUILD */ + RULE_INIT(R_Guild, MaxLevel, "50"); + RULE_INIT(R_Guild, MaxPlayers, "-1"); + + /* PLAYER */ + RULE_INIT(R_Player, MaxLevel, "50"); + RULE_INIT(R_Player, MaxLevelOverrideStatus, "100"); + RULE_INIT(R_Player, VitalityAmount, ".5"); + RULE_INIT(R_Player, VitalityFrequency, "3600"); + RULE_INIT(R_Player, XPMultiplier, "1.0"); + RULE_INIT(R_Player, TSXPMultiplier, "1.0"); + RULE_INIT(R_Player, MaxAA, "320"); + RULE_INIT(R_Player, MaxClassAA, "100"); + RULE_INIT(R_Player, MaxSubclassAA, "100"); + RULE_INIT(R_Player, MaxShadowsAA, "70"); + RULE_INIT(R_Player, MaxHeroicAA, "50"); + RULE_INIT(R_Player, MaxTradeskillAA, "40"); + RULE_INIT(R_Player, MaxPrestigeAA, "25"); + RULE_INIT(R_Player, MaxTradeskillPrestigeAA, "25"); + RULE_INIT(R_Player, MinLastNameLevel, "20"); + RULE_INIT(R_Player, MaxLastNameLength, "20"); + RULE_INIT(R_Player, MinLastNameLength, "4"); + + /* PVP */ + RULE_INIT(R_PVP, AllowPVP, "0"); + + /* SPAWN */ + RULE_INIT(R_Spawn, SpeedMultiplier, "300"); // note: this value was 1280 until 6/1/2009, then was 600 til Sep 2009, when it became 300...? + RULE_INIT(R_Spawn, SpeedRatio, "0"); // was 1280/7.5 and 600/7.5 until it became 300. + + /* TIMER */ + + /* UI */ + RULE_INIT(R_UI, MaxWhoResults, "20"); + RULE_INIT(R_UI, MaxWhoOverrideStatus, "200"); + + /* WORLD */ + RULE_INIT(R_World, DefaultStartingZoneID, "1"); + RULE_INIT(R_World, EnablePOIDiscovery, "0"); + RULE_INIT(R_World, GamblingTokenItemID, "2"); + RULE_INIT(R_World, GuildAutoJoin, "0"); + RULE_INIT(R_World, GuildAutoJoinID, "1"); + RULE_INIT(R_World, GuildAutoJoinDefaultRankID, "7"); + RULE_INIT(R_World, MaxPlayers, "-1"); + RULE_INIT(R_World, MaxPlayersOverrideStatus, "100"); + RULE_INIT(R_World, ServerLocked, "0"); + RULE_INIT(R_World, ServerLockedOverrideStatus, "10"); + RULE_INIT(R_World, SyncZonesWithLogin, "1"); + RULE_INIT(R_World, SyncEquipWithLogin, "1"); + RULE_INIT(R_World, UseBannedIPsTable, "0"); + RULE_INIT(R_World, LinkDeadTimer, "120000"); // default: 2 minutes + RULE_INIT(R_World, RemoveDisconnectedClientsTimer, "30000"); // default: 30 seconds + RULE_INIT(R_World, PlayerCampTimer, "20"); // default: 20 seconds + RULE_INIT(R_World, GMCampTimer, "1"); // default: 1 second + RULE_INIT(R_World, AutoAdminPlayers, "0"); // default: No + RULE_INIT(R_World, AutoAdminGMs, "0"); // default: No + RULE_INIT(R_World, AutoAdminStatusValue, "10"); // default: 10 (CSR) + RULE_INIT(R_World, DuskTime, "20:00"); // default: 8pm + RULE_INIT(R_World, DawnTime, "8:00"); // default: 8am + RULE_INIT(R_World, ThreadedLoad, "0"); // default: no threaded loading + RULE_INIT(R_World, TradeskillSuccessChance, "87.0"); // default: 87% chance of success while crafting + RULE_INIT(R_World, TradeskillCritSuccessChance, "2.0"); // default: 2% chance of critical success while crafting + RULE_INIT(R_World, TradeskillFailChance, "10.0"); // default: 10% chance of failure while crafting + RULE_INIT(R_World, TradeskillCritFailChance, "1.0"); // default: 1% chance of critical failure while crafting + RULE_INIT(R_World, TradeskillEventChance, "15.0"); // default: 15% chance of a tradeskill event while crafting + RULE_INIT(R_World, EditorURL, "www.eq2emulator.net"); // default: www.eq2emulator.net + RULE_INIT(R_World, EditorIncludeID, "0"); // default: 0 (0 = disabled, 1 = enabled) + RULE_INIT(R_World, EditorOfficialServer, "0"); // default: 0 (0 = disabled, 1 = enabled) + RULE_INIT(R_World, IRCEnabled, "0"); // default: 0 (0 = disabled, 1 = enabled) + RULE_INIT(R_World, IRCGlobalEnabled, "0"); // default: 0 (0 = disabled, 1 = enabled) + RULE_INIT(R_World, IRCAddress, "irc.eq2emulator.net"); // default: irc.eq2emulator.net + RULE_INIT(R_World, IRCPort, "6667"); // default: 6667 + RULE_INIT(R_World, IRCChan, "#EQ2Emu"); // default: #EQ2Emu + RULE_INIT(R_World, SavePaperdollImage, "1"); // default: true + RULE_INIT(R_World, SaveHeadshotImage, "1"); // default: true + RULE_INIT(R_World, SendPaperdollImagesToLogin, "1"); // default: true + RULE_INIT(R_World, TreasureChestDisabled, "0"); // default: false + //INSERT INTO `ruleset_details`(`id`, `ruleset_id`, `rule_category`, `rule_type`, `rule_value`, `description`) VALUES (NULL, '1', 'R_World', '', '', '') + + /* ZONE */ + RULE_INIT(R_Zone, MaxPlayers, "100"); + RULE_INIT(R_Zone, MinZoneLevelOverrideStatus, "1"); + RULE_INIT(R_Zone, MinZoneAccessOverrideStatus, "100"); + RULE_INIT(R_Zone, WeatherEnabled, "1"); // default: 1 (0 = disabled, 1 = enabled) + RULE_INIT(R_Zone, WeatherType, "0"); // default: 1 (0 = normal, 1 = dynamic, 2 = random, 3 = chaotic) + RULE_INIT(R_Zone, MinWeatherSeverity, "0.0"); // default: 0.0 or no weather + RULE_INIT(R_Zone, MaxWeatherSeverity, "1.0"); // default: 1.0 or hard rain (range 0.0 - 1.0, rain starts at 0.75) + RULE_INIT(R_Zone, WeatherChangeFrequency, "300"); // default: 5 minutes + RULE_INIT(R_Zone, WeatherChangePerInterval, "0.02"); // default: 0.02 (slight changes) + RULE_INIT(R_Zone, WeatherChangeChance, "20"); // default: 20% (in whole percents) + RULE_INIT(R_Zone, WeatherDynamicMaxOffset, "0.08"); // default: 0.08 - dynamic weather changes can only change this max amount + RULE_INIT(R_Zone, SpawnUpdateTimer, "50"); // default: 50ms - how often to check for spawn update sends + RULE_INIT(R_Zone, CheckAttackNPC, "2000"); // default: 2 seconds, how often to for NPCs to attack eachother + RULE_INIT(R_Zone, CheckAttackPlayer, "2000"); // default: 2 seconds, how often to check for NPCs to attack players + RULE_INIT(R_Zone, HOTime, "10.0"); // default: 10 seconds, time to complete the HO wheel before it expires + + /* ZONE TIMERS */ + RULE_INIT(R_Zone, RegenTimer, "6000"); + RULE_INIT(R_Zone, ClientSaveTimer, "60000"); + RULE_INIT(R_Zone, DefaultZoneShutdownTimer, "300000"); + RULE_INIT(R_Zone, WeatherTimer, "60000"); // default: 1 minute + RULE_INIT(R_Zone, SpawnDeleteTimer, "30000"); // default: 30 seconds, how long a spawn pointer is held onto after being removed from the world before deleting it + #undef RULE_INIT +} + +RuleManager::~RuleManager() { + map >::iterator itr; + map::iterator itr2; + + for (itr = rules.begin(); itr != rules.end(); itr++) { + for (itr2 = itr->second.begin(); itr2 != itr->second.end(); itr2++) + safe_delete(itr2->second); + } + + ClearRuleSets(); + ClearZoneRuleSets(); +} + +void RuleManager::LoadCodedDefaultsIntoRuleSet(RuleSet *rule_set) { + map >::iterator itr; + map::iterator itr2; + + assert(rule_set); + + for (itr = rules.begin(); itr != rules.end(); itr++) { + for (itr2 = itr->second.begin(); itr2 != itr->second.end(); itr2++) + rule_set->AddRule(new Rule(itr2->second)); + } +} + +bool RuleManager::AddRuleSet(RuleSet *rule_set) { + bool ret = false; + int32 id; + + assert(rule_set); + + id = rule_set->GetID(); + m_rule_sets.writelock(__FUNCTION__, __LINE__); + if (rule_sets.count(id) == 0) { + rule_sets[id] = rule_set; + ret = true; + } + m_rule_sets.releasewritelock(__FUNCTION__, __LINE__); + + return ret; +} + +int32 RuleManager::GetNumRuleSets() { + int32 ret; + + m_rule_sets.readlock(__FUNCTION__, __LINE__); + ret = rule_sets.size(); + m_rule_sets.releasereadlock(__FUNCTION__, __LINE__); + + return ret; +} + +void RuleManager::ClearRuleSets() { + map::iterator itr; + + m_rule_sets.writelock(__FUNCTION__, __LINE__); + for (itr = rule_sets.begin(); itr != rule_sets.end(); itr++) + safe_delete(itr->second); + rule_sets.clear(); + m_rule_sets.releasewritelock(__FUNCTION__, __LINE__); +} + +bool RuleManager::SetGlobalRuleSet(int32 rule_set_id) { + if (rule_sets.count(rule_set_id) == 0) + return false; + + global_rule_set.CopyRulesInto(rule_sets[rule_set_id]); + return true; +} + +Rule * RuleManager::GetGlobalRule(int32 category, int32 type) { + return global_rule_set.GetRule(category, type); +} + +bool RuleManager::SetZoneRuleSet(int32 zone_id, int32 rule_set_id) { + bool ret = true; + RuleSet *rule_set; + + m_rule_sets.readlock(__FUNCTION__, __LINE__); + if (rule_sets.count(rule_set_id) == 0) + ret = false; + + rule_set = rule_sets[rule_set_id]; + if (ret) { + m_zone_rule_sets.writelock(__FUNCTION__, __LINE__); + zone_rule_sets[zone_id] = rule_set; + m_zone_rule_sets.releasewritelock(__FUNCTION__, __LINE__); + } + m_rule_sets.releasereadlock(__FUNCTION__, __LINE__); + + return ret; +} + +Rule * RuleManager::GetZoneRule(int32 zone_id, int32 category, int32 type) { + Rule *ret = 0; + + /* we never want to return null so MAKE SURE the rule exists. if this assertion fails then the server admin must fix the problem */ + assert(rules.count(category) > 0); + assert(rules[category].count(type) > 0); + + /* first try to get the zone rule */ + m_zone_rule_sets.readlock(__FUNCTION__, __LINE__); + if (zone_rule_sets.count(zone_id) > 0) + ret = zone_rule_sets[zone_id]->GetRule(category, type); + m_zone_rule_sets.releasereadlock(__FUNCTION__, __LINE__); + + return ret ? ret : rules[category][type]; +} + +void RuleManager::ClearZoneRuleSets() { + m_zone_rule_sets.writelock(__FUNCTION__, __LINE__); + zone_rule_sets.clear(); + m_zone_rule_sets.releasewritelock(__FUNCTION__, __LINE__); +} \ No newline at end of file diff --git a/EQ2/source/WorldServer/Rules/Rules.h b/EQ2/source/WorldServer/Rules/Rules.h new file mode 100644 index 000000000..6003854d9 --- /dev/null +++ b/EQ2/source/WorldServer/Rules/Rules.h @@ -0,0 +1,244 @@ +/* + EQ2Emulator: Everquest II Server Emulator + Copyright (C) 2007 EQ2EMulator Development Team (http://www.eq2emulator.net) + + This file is part of EQ2Emulator. + + EQ2Emulator is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + EQ2Emulator is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with EQ2Emulator. If not, see . +*/ +#ifndef RULES_H_ +#define RULES_H_ + +#include +#include +#include "../../common/Mutex.h" +#include "../../common/types.h" + +using namespace std; + +enum RuleCategory { + R_Client, + R_Faction, + R_Guild, + R_Player, + R_PVP, + R_Spawn, + R_UI, + R_World, + R_Zone +}; + +enum RuleType { + /* CLIENT */ + ShowWelcomeScreen, + + /* FACTION */ + AllowFactionBasedCombat, + + /* GUILD */ + /* PLAYER */ + MaxLevel, + MaxLevelOverrideStatus, + MaxPlayers, + MaxPlayersOverrideStatus, + VitalityAmount, + VitalityFrequency, + MaxAA, + MaxClassAA, + MaxSubclassAA, + MaxShadowsAA, + MaxHeroicAA, + MaxTradeskillAA, + MaxPrestigeAA, + MaxTradeskillPrestigeAA, + MaxDragonAA, + MinLastNameLevel, + MaxLastNameLength, + MinLastNameLength, + + /* PVP */ + AllowPVP, + + /* SPAWN */ + SpeedMultiplier, + SpeedRatio, + + /* UI */ + MaxWhoResults, + MaxWhoOverrideStatus, + + /* WORLD */ + DefaultStartingZoneID, + EnablePOIDiscovery, + GamblingTokenItemID, + GuildAutoJoin, + GuildAutoJoinID, + GuildAutoJoinDefaultRankID, + ServerLocked, + ServerLockedOverrideStatus, + SyncZonesWithLogin, + SyncEquipWithLogin, + UseBannedIPsTable, + LinkDeadTimer, + RemoveDisconnectedClientsTimer, + PlayerCampTimer, + GMCampTimer, + AutoAdminPlayers, + AutoAdminGMs, + AutoAdminStatusValue, + DuskTime, + DawnTime, + ThreadedLoad, + TradeskillSuccessChance, + TradeskillCritSuccessChance, + TradeskillFailChance, + TradeskillCritFailChance, + TradeskillEventChance, + EditorURL, + EditorIncludeID, + EditorOfficialServer, + IRCEnabled, + IRCGlobalEnabled, + IRCAddress, + IRCPort, + IRCChan, + GroupSpellsTimer, + SavePaperdollImage, + SaveHeadshotImage, + SendPaperdollImagesToLogin, + TreasureChestDisabled, + + /* ZONE */ + MinZoneLevelOverrideStatus, + MinZoneAccessOverrideStatus, + XPMultiplier, + TSXPMultiplier, + WeatherEnabled, + WeatherType, + MinWeatherSeverity, + MaxWeatherSeverity, + WeatherChangeFrequency, + WeatherChangePerInterval, + WeatherDynamicMaxOffset, + WeatherChangeChance, + SpawnUpdateTimer, + CheckAttackPlayer, + CheckAttackNPC, + HOTime, + + /* ZONE TIMERS */ + RegenTimer, + ClientSaveTimer, + DefaultZoneShutdownTimer, + WeatherTimer, + SpawnDeleteTimer +}; + +class Rule { +public: + Rule(); + Rule(int32 category, int32 type, const char *value, const char *combined); + Rule (Rule *rule_in); + virtual ~Rule(); + + void SetValue(const char *value) {strncpy(this->value, value, sizeof(this->value));} + + int32 GetCategory() {return category;} + int32 GetType() {return type;} + const char * GetValue() {return value;} + const char * GetCombined() {return combined;} + + int8 GetInt8() {return (int8)atoul(value);} + int16 GetInt16() {return (int16)atoul(value);} + int32 GetInt32() {return (int32)atoul(value);} + int64 GetInt64() {return (int64)atoi64(value);} + sint8 GetSInt8() {return (sint8)atoi(value);} + sint16 GetSInt16() {return (sint16)atoi(value);} + sint32 GetSInt32() {return (sint32)atoi(value);} + sint64 GetSInt64() {return (sint64)atoi64(value);} + bool GetBool() {return atoul(value) > 0 ? true : false;} + float GetFloat() {return atof(value);} + char GetChar() {return value[0];} + const char * GetString() {return value;} + +private: + int32 category; + int32 type; + char value[64]; + char combined[256]; +}; + +class RuleSet { +public: + RuleSet(); + RuleSet(RuleSet *in_rule_set); + virtual ~RuleSet(); + + void CopyRulesInto(RuleSet *in_rule_set); + + void SetID(int32 id) {this->id = id;} + void SetName(const char *name) {strncpy(this->name, name, sizeof(this->name));} + + int32 GetID() {return id;} + const char *GetName() {return name;} + + void AddRule(Rule *rule); + Rule * GetRule(int32 category, int32 type); + Rule * GetRule(const char *category, const char *type); + void ClearRules(); + + map > * GetRules() {return &rules;} + +private: + int32 id; + char name[64]; + Mutex m_rules; + map > rules; +}; + +class RuleManager { +public: + RuleManager(); + virtual ~RuleManager(); + + void LoadCodedDefaultsIntoRuleSet(RuleSet *rule_set); + + bool AddRuleSet(RuleSet *rule_set); + int32 GetNumRuleSets(); + void ClearRuleSets(); + + Rule * GetBlankRule() {return &blank_rule;} + + bool SetGlobalRuleSet(int32 rule_set_id); + Rule * GetGlobalRule(int32 category, int32 type); + + bool SetZoneRuleSet(int32 zone_id, int32 rule_set_id); + Rule * GetZoneRule(int32 zone_id, int32 category, int32 type); + void ClearZoneRuleSets(); + + RuleSet * GetGlobalRuleSet() {return &global_rule_set;} + map > * GetRules() {return &rules;} + +private: + Mutex m_rule_sets; + Mutex m_global_rule_set; + Mutex m_zone_rule_sets; + Rule blank_rule; /* READ ONLY */ + map > rules; /* all of the rules loaded with their defaults (FROM THE CODE). map> */ + map rule_sets; /* all of the possible rule sets from the database. map */ + RuleSet global_rule_set; /* the global rule set, first fill it the defaults from the code, then over ride from the database */ + map zone_rule_sets; /* references to a zone's rule set. map */ +}; + +#endif \ No newline at end of file diff --git a/EQ2/source/WorldServer/Rules/RulesDB.cpp b/EQ2/source/WorldServer/Rules/RulesDB.cpp new file mode 100644 index 000000000..83e036695 --- /dev/null +++ b/EQ2/source/WorldServer/Rules/RulesDB.cpp @@ -0,0 +1,103 @@ +/* + EQ2Emulator: Everquest II Server Emulator + Copyright (C) 2007 EQ2EMulator Development Team (http://www.eq2emulator.net) + + This file is part of EQ2Emulator. + + EQ2Emulator is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + EQ2Emulator is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with EQ2Emulator. If not, see . +*/ + +#include +#include "../../common/Log.h" +#include "../WorldDatabase.h" + +extern RuleManager rule_manager; + +void WorldDatabase::LoadGlobalRuleSet() { + Query query; + MYSQL_ROW row; + MYSQL_RES *res; + int32 rule_set_id = 0; + + res = query.RunQuery2(Q_SELECT, "SELECT `variable_value`\n" + "FROM `variables`\n" + "WHERE `variable_name`='default_ruleset_id'"); + if (res && (row = mysql_fetch_row(res))) + { + rule_set_id = atoul(row[0]); + LogWrite(RULESYS__DEBUG, 5, "Rules", "\t\tLoading Global Ruleset id %i", rule_set_id); + } + + if (rule_set_id > 0 && !rule_manager.SetGlobalRuleSet(rule_set_id)) + LogWrite(RULESYS__ERROR, 0, "Rules", "Error loading global rule set. A rule set with ID %u does not exist.", rule_set_id); +} + +void WorldDatabase::LoadRuleSets() { + RuleSet *rule_set; + Query query; + MYSQL_ROW row; + MYSQL_RES *res; + + /* first load the coded defaults in */ + rule_manager.LoadCodedDefaultsIntoRuleSet(rule_manager.GetGlobalRuleSet()); + + res = query.RunQuery2(Q_SELECT, "SELECT `ruleset_id`,`ruleset_name`\n" + "FROM `rulesets`\n" + "WHERE `ruleset_active`>0"); + if (res) { + while ((row = mysql_fetch_row(res))) { + rule_set = new RuleSet(); + rule_set->SetID(atoul(row[0])); + rule_set->SetName(row[1]); + if (rule_manager.AddRuleSet(rule_set)) + { + LogWrite(RULESYS__DEBUG, 5, "Rules", "\t\tLoading rule set '%s' (%u)", rule_set->GetName(), rule_set->GetID()); + LoadRuleSetDetails(rule_set); + } + else { + LogWrite(RULESYS__ERROR, 0, "Rules", "Unable to add rule set '%s'. A ruleset with ID %u already exists.", rule_set->GetName(), rule_set->GetID()); + safe_delete(rule_set); + } + } + } + + LogWrite(RULESYS__DEBUG, 3, "Rules", "--Loaded %u Rule Sets", rule_manager.GetNumRuleSets()); + + LoadGlobalRuleSet(); +} + +void WorldDatabase::LoadRuleSetDetails(RuleSet *rule_set) { + Rule *rule; + Query query; + MYSQL_ROW row; + MYSQL_RES *res; + + assert(rule_set); + + rule_set->CopyRulesInto(rule_manager.GetGlobalRuleSet()); + res = query.RunQuery2(Q_SELECT, "SELECT `rule_category`,`rule_type`,`rule_value`\n" + "FROM `ruleset_details`\n" + "WHERE `ruleset_id`=%u", + rule_set->GetID()); + if (res) { + while ((row = mysql_fetch_row(res))) { + if (!(rule = rule_set->GetRule(row[0], row[1]))) { + LogWrite(RULESYS__ERROR, 0, "Rules", "Unknown rule with category '%s' and type '%s'", row[0], row[1]); + continue; + } + LogWrite(RULESYS__DEBUG, 5, "Rules", "---Setting rule category '%s', type '%s' to value: %s", row[0], row[1], row[2]); + rule->SetValue(row[2]); + } + } +} diff --git a/EQ2/source/WorldServer/Sign.cpp b/EQ2/source/WorldServer/Sign.cpp new file mode 100644 index 000000000..a14403968 --- /dev/null +++ b/EQ2/source/WorldServer/Sign.cpp @@ -0,0 +1,303 @@ +/* +EQ2Emulator: Everquest II Server Emulator +Copyright (C) 2007 EQ2EMulator Development Team (http://www.eq2emulator.net) + +This file is part of EQ2Emulator. + +EQ2Emulator is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +EQ2Emulator is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with EQ2Emulator. If not, see . +*/ +#include "Sign.h" + +#include "../common/ConfigReader.h" +#include "WorldDatabase.h" +#include "World.h" +#include "../common/Log.h" + +extern World world; +extern ConfigReader configReader; +extern WorldDatabase database; +extern ZoneList zone_list; +extern MasterSpellList master_spell_list; + +Sign::Sign(){ + widget_id = 0; + widget_x = 0; + widget_y = 0; + widget_z = 0; + appearance.pos.state = 1; + appearance.encounter_level = 0; + spawn_type = 2; + appearance.activity_status = 64; + sign_type = 0; + zone_x = 0; + zone_y = 0; + zone_z = 0; + zone_heading = 0; + sign_distance = 0; + include_location = false; + include_heading = false; + zone_id = 0; +} + +Sign::~Sign(){ + +} + +int32 Sign::GetWidgetID(){ + return widget_id; +} + +EQ2Packet* Sign::serialize(Player* player, int16 version){ + opcode = EQOpcodeManager[GetOpcodeVersion(version)]->EmuToEQ(OP_EqCreateSignWidgetCmd); + return spawn_serialize(player, version); +} + +void Sign::SetWidgetID(int32 val){ + widget_id = val; +} + +void Sign::SetWidgetX(float val){ + widget_x = val; +} + +float Sign::GetWidgetX(){ + return widget_x; +} + +void Sign::SetWidgetY(float val){ + widget_y = val; +} + +float Sign::GetWidgetY(){ + return widget_y; +} + +void Sign::SetWidgetZ(float val){ + widget_z = val; +} + +float Sign::GetWidgetZ(){ + return widget_z; +} + +void Sign::SetSignIcon(int8 val){ + appearance.icon = val; +} + +void Sign::SetIncludeLocation(bool val){ + include_location = val; +} +bool Sign::GetIncludeLocation(){ + return include_location; +} +void Sign::SetIncludeHeading(bool val){ + include_heading = val; +} +bool Sign::GetIncludeHeading(){ + return include_heading; +} + +Sign* Sign::Copy(){ + Sign* new_spawn = new Sign(); + if(GetSizeOffset() > 0){ + int8 offset = GetSizeOffset()+1; + sint32 tmp_size = size + (rand()%offset - rand()%offset); + if(tmp_size < 0) + tmp_size = 1; + else if(tmp_size >= 0xFFFF) + tmp_size = 0xFFFF; + new_spawn->size = (int16)tmp_size; + } + else + new_spawn->size = size; + new_spawn->SetMerchantID(merchant_id); + new_spawn->SetMerchantType(merchant_type); + new_spawn->SetPrimaryCommands(&primary_command_list); + new_spawn->primary_command_list_id = primary_command_list_id; + new_spawn->SetSecondaryCommands(&secondary_command_list); + new_spawn->secondary_command_list_id = secondary_command_list_id; + new_spawn->database_id = database_id; + memcpy(&new_spawn->appearance, &appearance, sizeof(AppearanceData)); + new_spawn->SetWidgetID(widget_id); + new_spawn->SetWidgetX(widget_x); + new_spawn->SetWidgetY(widget_y); + new_spawn->SetWidgetZ(widget_z); + new_spawn->SetSignType(sign_type); + new_spawn->SetSignZoneX(zone_x); + new_spawn->SetSignZoneY(zone_y); + new_spawn->SetSignZoneZ(zone_z); + new_spawn->SetSignZoneHeading(zone_heading); + new_spawn->SetSignZoneID(GetSignZoneID()); + new_spawn->SetSignTitle(GetSignTitle()); + new_spawn->SetSignDescription(GetSignDescription()); + new_spawn->SetSignDistance(sign_distance); + new_spawn->SetIncludeHeading(include_heading); + new_spawn->SetIncludeLocation(include_location); + new_spawn->SetTransporterID(GetTransporterID()); + return new_spawn; +} + +int32 Sign::GetSignZoneID(){ + return zone_id; +} + +void Sign::SetSignZoneID(int32 val){ + zone_id = val; +} + +const char* Sign::GetSignTitle(){ + if(title.length() > 0) + return title.c_str(); + else + return 0; +} + +void Sign::SetSignTitle(const char* val){ + if(val) + title = string(val); +} + +const char* Sign::GetSignDescription(){ + if(description.length() > 0) + return description.c_str(); + else + return 0; +} + +void Sign::SetSignDescription(const char* val){ + if(val) + description = string(val); +} + +int8 Sign::GetSignType(){ + return sign_type; +} + +void Sign::SetSignType(int8 val){ + sign_type = val; +} + +float Sign::GetSignZoneX(){ + return zone_x; +} +void Sign::SetSignZoneX(float val){ + zone_x = val; +} +float Sign::GetSignZoneY(){ + return zone_y; +} +void Sign::SetSignZoneY(float val){ + zone_y = val; +} +float Sign::GetSignZoneZ(){ + return zone_z; +} +void Sign::SetSignZoneZ(float val){ + zone_z = val; +} +float Sign::GetSignZoneHeading(){ + return zone_heading; +} +void Sign::SetSignZoneHeading(float val){ + zone_heading = val; +} +float Sign::GetSignDistance(){ + return sign_distance; +} +void Sign::SetSignDistance(float val){ + sign_distance = val; +} +void Sign::HandleUse(Client* client, string command) +{ + vector* destinations = 0; + + //The following check disables the use of doors and other widgets if the player does not meet the quest requirements + //If this is from a script ignore this check (client will be null) + if (client) { + bool meets_quest_reqs = MeetsSpawnAccessRequirements(client->GetPlayer()); + if (!meets_quest_reqs && (GetQuestsRequiredOverride() & 2) == 0) + return; + else if (meets_quest_reqs && appearance.show_command_icon != 1) + return; + } + + if( GetTransporterID() > 0 ) + destinations = GetZone()->GetTransporters(GetTransporterID()); + + if( destinations ) + { + client->ProcessTeleport(this, destinations, GetTransporterID()); + } + else if( sign_type == SIGN_TYPE_ZONE && GetSignZoneID() > 0 ) + { + if( GetSignDistance() == 0 || client->GetPlayer()->GetDistance(this) <= GetSignDistance() ) + { + string* name = database.GetZoneName(GetSignZoneID()); + + if( name ) + { + if( !client->CheckZoneAccess(name->c_str()) ) + return; + + // determine if the coordinates should be set (returns false if they should) + // clearer, if the sign has x,y,z,heading coordinates, use them otherwise I assume we use the zones safe coords(?) + bool zone_coords_invalid = ( zone_x == 0 && zone_y == 0 && zone_z == 0 && zone_heading == 0 ); + + // I really hate double-negatives. Seriously? + if ( !zone_coords_invalid ) + { + LogWrite(SIGN__DEBUG, 0, "Sign", "Sign has valid zone-to coordinates (%.2f, %.2f, %.2f, %.2f)", zone_x, zone_y, zone_z, zone_heading); + client->GetPlayer()->SetX(zone_x); + client->GetPlayer()->SetY(zone_y); + client->GetPlayer()->SetZ(zone_z); + client->GetPlayer()->SetHeading(zone_heading); + } + else // alert client we couldnt set the coordinates + { + LogWrite(SIGN__WARNING, 0, "Sign", "Sign has no zone-to coordinates set, using zones safe coords."); + client->SimpleMessage(CHANNEL_COLOR_YELLOW, "Invalid zone in coords, taking you to a safe point."); + } + + // Test if where we're going is an Instanced zone + if ( !client->TryZoneInstance(GetSignZoneID(), zone_coords_invalid) ) + { + LogWrite(SIGN__DEBUG, 0, "Sign", "Sending client to instance of zone_id: %u", GetSignZoneID()); + client->Zone(name->c_str(), zone_coords_invalid); + } + + safe_delete(name); + } + else + { + LogWrite(SIGN__WARNING, 0, "Sign", "Unable to find zone with ID: %u", GetSignZoneID()); + client->Message(CHANNEL_COLOR_YELLOW, "Unable to find zone with ID: %u", GetSignZoneID()); + } + } + else + { + client->SimpleMessage(CHANNEL_COLOR_YELLOW, "You are too far away!"); + } + } + else if (client && command.length() > 0) + { + EntityCommand* entity_command = FindEntityCommand(command); + + if (entity_command) + { + LogWrite(SIGN__DEBUG, 0, "Sign", "ActivateQuestRequired Sign - Command: '%s'", entity_command->command.c_str()); + client->GetCurrentZone()->ProcessEntityCommand(entity_command, client->GetPlayer(), client->GetPlayer()->GetTarget()); + } + } + +} diff --git a/EQ2/source/WorldServer/Sign.h b/EQ2/source/WorldServer/Sign.h new file mode 100644 index 000000000..85b7f0fbd --- /dev/null +++ b/EQ2/source/WorldServer/Sign.h @@ -0,0 +1,88 @@ +/* + EQ2Emulator: Everquest II Server Emulator + Copyright (C) 2007 EQ2EMulator Development Team (http://www.eq2emulator.net) + + This file is part of EQ2Emulator. + + EQ2Emulator is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + EQ2Emulator is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with EQ2Emulator. If not, see . +*/ + +#ifndef __EQ2_SIGN__ +#define __EQ2_SIGN__ +#include "Spawn.h" + +#define SIGN_TYPE_GENERIC 0 +#define SIGN_TYPE_ZONE 1 + +using namespace std; + +class Sign : public Spawn{ +public: + Sign(); + virtual ~Sign(); + bool IsSign(){ return true; } + int32 GetWidgetID(); + void SetWidgetID(int32 val); + void SetWidgetX(float val); + float GetWidgetX(); + void SetWidgetY(float val); + float GetWidgetY(); + void SetWidgetZ(float val); + float GetWidgetZ(); + void SetSignIcon(int8 val); + Sign* Copy(); + EQ2Packet* serialize(Player *player, int16 version); + void HandleUse(Client* client, string command); + int8 GetSignType(); + void SetSignType(int8 val); + float GetSignZoneX(); + void SetSignZoneX(float val); + float GetSignZoneY(); + void SetSignZoneY(float val); + float GetSignZoneZ(); + void SetSignZoneZ(float val); + float GetSignZoneHeading(); + void SetSignZoneHeading(float val); + float GetSignDistance(); + void SetSignDistance(float val); + int32 GetSignZoneID(); + void SetSignZoneID(int32 val); + const char* GetSignTitle(); + void SetSignTitle(const char* val); + const char* GetSignDescription(); + void SetSignDescription(const char* val); + void SetIncludeLocation(bool val); + bool GetIncludeLocation(); + void SetIncludeHeading(bool val); + bool GetIncludeHeading(); + +private: + string description; + string title; + int8 sign_type; + float widget_x; + float widget_y; + float widget_z; + int32 widget_id; + float zone_x; + float zone_y; + float zone_z; + float zone_heading; + int32 zone_id; + float sign_distance; + bool include_location; + bool include_heading; +}; + +#endif diff --git a/EQ2/source/WorldServer/Skills.cpp b/EQ2/source/WorldServer/Skills.cpp new file mode 100644 index 000000000..be276090e --- /dev/null +++ b/EQ2/source/WorldServer/Skills.cpp @@ -0,0 +1,481 @@ +/* + EQ2Emulator: Everquest II Server Emulator + Copyright (C) 2007 EQ2EMulator Development Team (http://www.eq2emulator.net) + + This file is part of EQ2Emulator. + + EQ2Emulator is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + EQ2Emulator is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with EQ2Emulator. If not, see . +*/ +#include "Skills.h" +#include "Spawn.h" +#include "../common/Log.h" + +extern ConfigReader configReader; + +MasterSkillList::MasterSkillList(){ +} + +MasterSkillList::~MasterSkillList(){ + map::iterator itr; + for(itr = skills.begin(); itr != skills.end(); itr++){ + safe_delete(itr->second); + } + map::iterator itr2; + for(itr2 = populate_packets.begin(); itr2 != populate_packets.end(); itr2++){ + safe_delete(itr2->second); + } +} + +Skill::Skill(){ + skill_id = 0; + current_val = 0; + previous_val = 0; + max_val = 0; + skill_type = 0; + display = 0; + save_needed = false; +} + +Skill::Skill(Skill* skill){ + skill_id = skill->skill_id; + current_val = skill->current_val; + previous_val = skill->current_val; + max_val = skill->max_val; + skill_type = skill->skill_type; + display = skill->display; + short_name = skill->short_name; + name = skill->name; + description = skill->description; + save_needed = false; +} + +map* MasterSkillList::GetAllSkills(){ + return &skills; +} + +Skill* MasterSkillList::GetSkill(int32 skill_id){ + if(skills.count(skill_id) > 0) + return skills[skill_id]; + else + return 0; +} + +Skill* MasterSkillList::GetSkillByName(const char* skill_name) { + Skill* skill = 0; + map::iterator itr; + for (itr = skills.begin(); itr != skills.end(); itr++) { + Skill* current_skill = itr->second; + if (::ToLower(string(current_skill->name.data.c_str())) == ::ToLower(string(skill_name))) { + skill = current_skill; + break; + } + } + return skill; +} + +int16 MasterSkillList::GetSkillCount(){ + return skills.size(); +} + +void MasterSkillList::AddSkill(Skill* skill){ + if(skill) + skills[skill->skill_id] = skill; +} + +EQ2Packet* MasterSkillList::GetPopulateSkillsPacket(int16 version){ + EQ2Packet* ret = 0; + int16 packet_version = configReader.GetStructVersion("WS_SkillMap", version); + if(populate_packets.count(packet_version) > 0) + ret = populate_packets[packet_version]; + else{ + PacketStruct* packet = configReader.getStruct("WS_SkillMap", packet_version); + int32 count = skills.size(); + Skill* skill = 0; + int32 i = 0; + packet->setArrayLengthByName("skill_count", count); + map::iterator itr; + for(itr = skills.begin(); itr != skills.end(); itr++, i++){ + skill = itr->second; + packet->setArrayDataByName("skill_id", skill->skill_id, i); + packet->setArrayDataByName("short_name", &skill->short_name, i); + packet->setArrayDataByName("name", &skill->name, i); + packet->setArrayDataByName("description", &skill->description, i); + } + populate_packets[packet_version] = packet->serialize(); + safe_delete(packet); + ret = populate_packets[packet_version]; + } + if(ret) + return ret->Copy(); //need to return a copy as the packet is deleted after the client confirms it and we want to keep the packet to prevent constant generation of the same data + else + return ret; +} + +PlayerSkillList::PlayerSkillList(){ + xor_packet = 0; + orig_packet = 0; + packet_count = 0; + has_updates = false; + MSkillUpdates.SetName("PlayerSkillList::MSkillUpdates"); +} + +PlayerSkillList::~PlayerSkillList(){ + map::iterator itr; + for(itr = skills.begin(); itr != skills.end(); itr++){ + safe_delete(itr->second); + } + MutexMap::iterator sb_itr = skill_bonus_list.begin(); + while (sb_itr.Next()) + RemoveSkillBonus(sb_itr.first); + safe_delete_array(xor_packet); + safe_delete_array(orig_packet); +} + +void PlayerSkillList::AddSkill(Skill* new_skill){ + skills[new_skill->skill_id] = new_skill; +} + +void PlayerSkillList::RemoveSkill(Skill* skill) { + if (skill) + skills.erase(skill->skill_id); +} + +map* PlayerSkillList::GetAllSkills(){ + return &skills; +} + +void PlayerSkillList::SetSkillCapsByType(int8 type, int16 value){ + map::iterator itr; + for(itr = skills.begin(); itr != skills.end(); itr++){ + if(itr->second && itr->second->skill_type == type) + SetSkillCap(itr->second, value); + } +} + +void PlayerSkillList::IncreaseSkillCapsByType(int8 type, int16 value){ + map::iterator itr; + for(itr = skills.begin(); itr != skills.end(); itr++){ + if(itr->second && itr->second->skill_type == type) + IncreaseSkillCap(itr->second, value); + } +} + +void PlayerSkillList::IncreaseAllSkillCaps(int16 value){ + map::iterator itr; + for(itr = skills.begin(); itr != skills.end(); itr++){ + IncreaseSkillCap(itr->second, value); + } +} + +bool PlayerSkillList::HasSkill(int32 skill_id){ + return (skills.count(skill_id) > 0); +} + +Skill* PlayerSkillList::GetSkill(int32 skill_id){ + if(skills.count(skill_id) > 0) + return skills[skill_id]; + else + return 0; +} + +void PlayerSkillList::IncreaseSkill(Skill* skill, int16 amount){ + if(skill){ + AddSkillUpdateNeeded(skill); + skill->previous_val = skill->current_val; + skill->current_val += amount; + if(skill->current_val > skill->max_val) + skill->max_val = skill->current_val; + skill->save_needed = true; + } +} + +void PlayerSkillList::IncreaseSkill(int32 skill_id, int16 amount){ + IncreaseSkill(GetSkill(skill_id), amount); +} + +void PlayerSkillList::DecreaseSkill(Skill* skill, int16 amount){ + if(skill){ + skill->previous_val = skill->current_val; + if((skill->current_val - amount) < 0) + skill->current_val = 0; + else + skill->current_val -= amount; + skill->save_needed = true; + AddSkillUpdateNeeded(skill); + } +} + +void PlayerSkillList::DecreaseSkill(int32 skill_id, int16 amount){ + DecreaseSkill(GetSkill(skill_id), amount); +} + +void PlayerSkillList::SetSkill(Skill* skill, int16 value){ + if(skill){ + skill->previous_val = skill->current_val; + skill->current_val = value; + if(skill->current_val > skill->max_val) + skill->max_val = skill->current_val; + skill->save_needed = true; + AddSkillUpdateNeeded(skill); + } +} + +void PlayerSkillList::SetSkill(int32 skill_id, int16 value){ + SetSkill(GetSkill(skill_id), value); +} + +void PlayerSkillList::IncreaseSkillCap(Skill* skill, int16 amount){ + if(skill){ + skill->max_val += amount; + skill->save_needed = true; + } +} + +void PlayerSkillList::IncreaseSkillCap(int32 skill_id, int16 amount){ + IncreaseSkillCap(GetSkill(skill_id), amount); +} + +void PlayerSkillList::DecreaseSkillCap(Skill* skill, int16 amount){ + if(skill){ + if((skill->max_val - amount) < 0) + skill->max_val = 0; + else + skill->max_val -= amount; + if(skill->current_val > skill->max_val){ + skill->previous_val = skill->current_val; + skill->current_val = skill->max_val; + AddSkillUpdateNeeded(skill); + } + skill->save_needed = true; + } +} + +void PlayerSkillList::DecreaseSkillCap(int32 skill_id, int16 amount){ + DecreaseSkillCap(GetSkill(skill_id), amount); +} + +void PlayerSkillList::SetSkillCap(Skill* skill, int16 value){ + if(skill){ + skill->max_val = value; + if(skill->current_val > skill->max_val){ + skill->previous_val = skill->current_val; + skill->current_val = skill->max_val; + AddSkillUpdateNeeded(skill); + } + skill->save_needed = true; + } +} + +void PlayerSkillList::SetSkillCap(int32 skill_id, int16 value){ + SetSkillCap(GetSkill(skill_id), value); +} + +int16 PlayerSkillList::CalculateSkillValue(int32 skill_id, int16 current_val){ + if (current_val > 5) { + int16 new_val = current_val; + MutexMap::iterator itr = skill_bonus_list.begin(); + while (itr.Next()) { + SkillBonus* sb = itr.second; + map::iterator sbv_itr; + for (sbv_itr = sb->skills.begin(); sbv_itr != sb->skills.end(); sbv_itr++) { + SkillBonusValue* sbv = sbv_itr->second; + if (sbv->skill_id == skill_id) + new_val += (int16)sbv->value; + } + } + return new_val; + } +} + +int16 PlayerSkillList::CalculateSkillMaxValue(int32 skill_id, int16 max_val) { + int16 new_val = max_val; + MutexMap::iterator itr = skill_bonus_list.begin(); + while (itr.Next()) { + SkillBonus* sb = itr->second; + map::iterator sbv_itr; + for (sbv_itr = sb->skills.begin(); sbv_itr != sb->skills.end(); sbv_itr++) { + SkillBonusValue* sbv = sbv_itr->second; + if (sbv->skill_id == skill_id) + new_val += (int16)sbv->value; + } + } + return new_val; +} + +EQ2Packet* PlayerSkillList::GetSkillPacket(int16 version){ + PacketStruct* packet = configReader.getStruct("WS_UpdateSkillBook", version); + if(packet){ + if(packet_count < skills.size()){ + if(!orig_packet){ + int16 size = 21*skills.size()+8; + xor_packet = new uchar[size]; + orig_packet = new uchar[size]; + memset(xor_packet, 0, size); + memset(orig_packet, 0, size); + } + else{ + int16 size = 21*skills.size()+8; + uchar* tmp = new uchar[size]; + memset(tmp, 0, size); + memcpy(tmp, orig_packet, 21*packet_count+8); + safe_delete_array(orig_packet); + orig_packet = tmp; + safe_delete_array(xor_packet); + xor_packet = new uchar[size]; + } + packet_count = skills.size(); + } + packet->setArrayLengthByName("skill_count", skills.size()); + map::iterator itr; + Skill* skill = 0; + int32 i=0; + for(itr = skills.begin(); itr != skills.end(); itr++){ + skill = itr->second; + if(skill){ + + int16 skill_max_with_bonuses = CalculateSkillMaxValue(skill->skill_id, skill->max_val); + int16 skill_with_bonuses = int(CalculateSkillValue(skill->skill_id, skill->current_val)); + if (skill->skill_id == 613995491) { + int x_current = skill->current_val; + int x_previous = skill->previous_val; + int x_max = skill->max_val; + int x_delta2 = skill_max_with_bonuses - skill->max_val; + int xxx = 1; + } + + packet->setArrayDataByName("skill_id", skill->skill_id, i); + packet->setArrayDataByName("type", skill->skill_type, i); + packet->setArrayDataByName("current_val", skill->current_val, i); + packet->setArrayDataByName("base_val", skill->current_val, i);// skill-> + packet->setArrayDataByName("skill_delta", 0, i);// skill_with_bonuses- skill->current_val + packet->setArrayDataByName("skill_delta2", skill_max_with_bonuses - skill->max_val, i);// skill_max_with_bonuses - skill->max_val, i); + packet->setArrayDataByName("max_val", skill->max_val, i); + packet->setArrayDataByName("display_minval", skill->display, i); + packet->setArrayDataByName("display_maxval", skill->display, i); + i++; + } + } + EQ2Packet* ret = packet->serializeCountPacket(version, 1, orig_packet, xor_packet); + //packet->PrintPacket(); + //DumpPacket(ret); + safe_delete(packet); + return ret; + } + return 0; +} + +bool PlayerSkillList::CheckSkillIncrease(Skill* skill){ + if(!skill || skill->current_val >= skill->max_val) + return false; + // Assuming that skills will be used more at higher levels, increase chances are: + // skill val of 1 ~ 20% chance, value of 100 ~ 10%, value of 400 ~ 4% + int8 percent = (int8)(((float)((float)100/(float)(50 + skill->current_val)))*10); + if(rand()%100 < percent){ // skill increase + IncreaseSkill(skill, 1); + return true; + } + else + return false; +} + +Skill* PlayerSkillList::GetSkillByName(const char* name){ + if(name_skill_map.size() == 0){ + map::iterator itr; + Skill* skill = 0; + for(itr = skills.begin(); itr != skills.end(); itr++){ + skill = itr->second; + name_skill_map[skill->name.data] = skill; + } + } + if(name_skill_map.count(name) > 0) + return name_skill_map[name]; + else + return 0; +} + +vector* PlayerSkillList::GetSaveNeededSkills(){ + vector* ret = new vector; + map::iterator itr; + for(itr = skills.begin(); itr != skills.end(); itr++){ + if(itr->second->save_needed){ + ret->push_back(itr->second); + itr->second->save_needed = false; + } + } + return ret; +} + +void PlayerSkillList::AddSkillUpdateNeeded(Skill* skill){ + MSkillUpdates.writelock(__FUNCTION__, __LINE__); + skill_updates.push_back(skill); + has_updates = true; + MSkillUpdates.releasewritelock(__FUNCTION__, __LINE__); +} + +vector* PlayerSkillList::GetSkillUpdates(){ + vector* ret = 0; + vector::iterator itr; + MSkillUpdates.writelock(__FUNCTION__, __LINE__); + if(skill_updates.size() > 0){ + ret = new vector(); + ret->insert(ret->begin(), skill_updates.begin(), skill_updates.end()); + skill_updates.clear(); + } + has_updates = false; + MSkillUpdates.releasewritelock(__FUNCTION__, __LINE__); + return ret; +} + +bool PlayerSkillList::HasSkillUpdates(){ + return has_updates; +} + +void PlayerSkillList::AddSkillBonus(int32 spell_id, int32 skill_id, float value) { + if (value != 0) { + SkillBonus* sb; + if (skill_bonus_list.count(spell_id) == 0) { + sb = new SkillBonus; + sb->spell_id = spell_id; + skill_bonus_list.Put(spell_id, sb); + } + else + sb = skill_bonus_list.Get(spell_id); + if (sb->skills[skill_id] == 0) { + SkillBonusValue* sbv = new SkillBonusValue; + sbv->skill_id = skill_id; + sbv->value = value; + sb->skills[skill_id] = sbv; + } + } +} + +SkillBonus* PlayerSkillList::GetSkillBonus(int32 spell_id) { + SkillBonus *ret = 0; + + if (skill_bonus_list.count(spell_id) > 0) + ret = skill_bonus_list.Get(spell_id); + + return ret; +} + +void PlayerSkillList::RemoveSkillBonus(int32 spell_id) { + if (skill_bonus_list.count(spell_id) > 0) { + SkillBonus* sb = skill_bonus_list.Get(spell_id); + skill_bonus_list.erase(spell_id); + map::iterator itr; + for (itr = sb->skills.begin(); itr != sb->skills.end(); itr++) + safe_delete(itr->second); + safe_delete(sb); + } +} diff --git a/EQ2/source/WorldServer/Skills.h b/EQ2/source/WorldServer/Skills.h new file mode 100644 index 000000000..52c5333fb --- /dev/null +++ b/EQ2/source/WorldServer/Skills.h @@ -0,0 +1,127 @@ +/* + EQ2Emulator: Everquest II Server Emulator + Copyright (C) 2007 EQ2EMulator Development Team (http://www.eq2emulator.net) + + This file is part of EQ2Emulator. + + EQ2Emulator is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + EQ2Emulator is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with EQ2Emulator. If not, see . +*/ +#ifndef __EQ2_SKILLS_H__ +#define __EQ2_SKILLS_H__ + +#include +#include "../common/ConfigReader.h" +#include "../common/types.h" +#include "MutexMap.h" + +/* Each SkillBonus is comprised of multiple possible skill bonus values. This is so one spell can modify + more than one skill */ +struct SkillBonusValue { + int32 skill_id; + float value; +}; + +struct SkillBonus { + int32 spell_id; + map skills; +}; + + +class Skill{ +public: + Skill(); + Skill(Skill* skill); + int32 skill_id; + int16 current_val; + int16 previous_val; + int16 max_val; + int32 skill_type; + int8 display; + EQ2_16BitString short_name; + EQ2_16BitString name; + EQ2_16BitString description; + bool save_needed; +}; + +class MasterSkillList{ +public: + MasterSkillList(); + ~MasterSkillList(); + void AddSkill(Skill* skill); + int16 GetSkillCount(); + EQ2Packet* GetPopulateSkillsPacket(int16 version); + map* GetAllSkills(); + Skill* GetSkill(int32 skill_id); + Skill* GetSkillByName(const char* skill_name); + +private: + map skills; + map populate_packets; +}; + +class PlayerSkillList{ +public: + PlayerSkillList(); + ~PlayerSkillList(); + void RemoveSkill(Skill* skill); + void AddSkill(Skill* new_skill); + bool CheckSkillIncrease(Skill* skill); + Skill* GetSkillByName(const char* name); + bool HasSkill(int32 skill_id); + Skill* GetSkill(int32 skill_id); + + void IncreaseSkill(Skill* skill, int16 amount); + void IncreaseSkill(int32 skill_id, int16 amount); + void DecreaseSkill(Skill* skill, int16 amount); + void DecreaseSkill(int32 skill_id, int16 amount); + void SetSkill(Skill* skill, int16 value); + void SetSkill(int32 skill_id, int16 value); + + void IncreaseSkillCap(Skill* skill, int16 amount); + void IncreaseSkillCap(int32 skill_id, int16 amount); + void DecreaseSkillCap(Skill* skill, int16 amount); + void DecreaseSkillCap(int32 skill_id, int16 amount); + void SetSkillCap(Skill* skill, int16 value); + void SetSkillCap(int32 skill_id, int16 value); + void IncreaseAllSkillCaps(int16 value); + void IncreaseSkillCapsByType(int8 type, int16 value); + void SetSkillCapsByType(int8 type, int16 value); + void AddSkillUpdateNeeded(Skill* skill); + + void AddSkillBonus(int32 spell_id, int32 skill_id, float value); + SkillBonus* GetSkillBonus(int32 spell_id); + void RemoveSkillBonus(int32 spell_id); + + int16 CalculateSkillValue(int32 skill_id, int16 current_val); + int16 CalculateSkillMaxValue(int32 skill_id, int16 max_val); + EQ2Packet* GetSkillPacket(int16 version); + vector* GetSaveNeededSkills(); + vector* GetSkillUpdates(); + map* GetAllSkills(); + bool HasSkillUpdates(); + +private: + volatile bool has_updates; + Mutex MSkillUpdates; + int16 packet_count; + uchar* orig_packet; + uchar* xor_packet; + map skills; + map name_skill_map; + vector skill_updates; + MutexMap skill_bonus_list; +}; + +#endif + diff --git a/EQ2/source/WorldServer/Spawn.cpp b/EQ2/source/WorldServer/Spawn.cpp new file mode 100644 index 000000000..15391f29b --- /dev/null +++ b/EQ2/source/WorldServer/Spawn.cpp @@ -0,0 +1,2545 @@ +/* + EQ2Emulator: Everquest II Server Emulator + Copyright (C) 2007 EQ2EMulator Development Team (http://www.eq2emulator.net) + + This file is part of EQ2Emulator. + + EQ2Emulator is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + EQ2Emulator is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with EQ2Emulator. If not, see . +*/ +#include "Spawn.h" +#include +#include "../common/timer.h" +#include +#include +#include "Entity.h" +#include "Widget.h" +#include "Sign.h" +#include "../common/MiscFunctions.h" +#include "../common/Log.h" +#include "Rules/Rules.h" +#include "World.h" +#include "LuaInterface.h" +#include "Zone/SPGrid.h" +#include "Bots/Bot.h" + +extern ConfigReader configReader; +extern RuleManager rule_manager; +extern World world; + +Spawn::Spawn(){ + group_id = 0; + size_offset = 0; + merchant_id = 0; + memset(&appearance, 0, sizeof(appearance)); + memset(&basic_info, 0, sizeof(BasicInfoStruct)); + appearance.encounter_level =6; + size = 32; + appearance.pos.collision_radius = 32; + id = Spawn::NextID(); + oversized_packet = 0xFF; + zone = 0; + spawn_location_id = 0; + spawn_entry_id = 0; + spawn_location_spawns_id = 0; + respawn = 0; + expire_time = 0; + expire_offset = 0; + x_offset = 0; + y_offset = 0; + z_offset = 0; + database_id = 0; + packet_num = 1; + changed = false; + vis_changed = false; + position_changed = false; + send_spawn_changes = true; + info_changed = false; + appearance.pos.Speed1 = 0; + last_attacker = 0; + faction_id = 0; + running_to = 0; + tmp_visual_state = -1; + tmp_action_state = -1; + transporter_id = 0; + invulnerable = false; + spawn_group_list = 0; + MSpawnGroup = 0; + movement_locations = 0; + MMovementLocations = 0; + target = 0; + primary_command_list_id = 0; + secondary_command_list_id = 0; + is_pet = false; + m_followTarget = 0; + following = false; + req_quests_continued_access = false; + req_quests_override = 0; + req_quests_private = false; + m_illusionModel = 0; + Cell_Info.CurrentCell = nullptr; + Cell_Info.CellListIndex = -1; + m_addedToWorldTimestamp = 0; + m_spawnAnim = 0; + m_spawnAnimLeeway = 0; + m_Update.SetName("Spawn::m_Update"); + m_requiredHistory.SetName("Spawn::m_requiredHistory"); + m_requiredQuests.SetName("Spawn::m_requiredQuests"); + last_heading_angle = 0.0; +} + +Spawn::~Spawn(){ + for(int32 i=0;iwritelock(__FUNCTION__, __LINE__); + if(movement_locations){ + while(movement_locations->size()){ + safe_delete(movement_locations->front()); + movement_locations->pop_front(); + } + safe_delete(movement_locations); + } + if (MMovementLocations) + MMovementLocations->releasewritelock(__FUNCTION__, __LINE__); + safe_delete(MMovementLocations); + + MMovementLoop.lock(); + for (int32 i = 0; i < movement_loop.size(); i++) + safe_delete(movement_loop.at(i)); + MMovementLoop.unlock(); + + map* >::iterator rq_itr; + m_requiredQuests.writelock(__FUNCTION__, __LINE__); + for (rq_itr = required_quests.begin(); rq_itr != required_quests.end(); rq_itr++){ + safe_delete(rq_itr->second); + } + m_requiredQuests.releasewritelock(__FUNCTION__, __LINE__); +} + +void Spawn::InitializeHeaderPacketData(Player* player, PacketStruct* header, int16 index) { + header->setDataByName("index", index); + + if (GetSpawnAnim() > 0 && Timer::GetCurrentTime2() < (GetAddedToWorldTimestamp() + GetSpawnAnimLeeway())) { + if (header->GetVersion() >= 57080) + header->setDataByName("spawn_anim", GetSpawnAnim()); + else + header->setDataByName("spawn_anim", (int16)GetSpawnAnim()); + } + else { + if (header->GetVersion() >= 57080) + header->setDataByName("spawn_anim", 0xFFFFFFFF); + else + header->setDataByName("spawn_anim", 0xFFFF); + } + + if (primary_command_list.size() > 0){ + if (primary_command_list.size() > 1) { + header->setArrayLengthByName("command_list", primary_command_list.size()); + for (int32 i = 0; i < primary_command_list.size(); i++) { + header->setArrayDataByName("command_list_name", primary_command_list[i]->name.c_str(), i); + header->setArrayDataByName("command_list_max_distance", primary_command_list[i]->distance, i); + header->setArrayDataByName("command_list_error", primary_command_list[i]->error_text.c_str(), i); + header->setArrayDataByName("command_list_command", primary_command_list[i]->command.c_str(), i); + } + } + header->setMediumStringByName("default_command", primary_command_list[0]->command.c_str()); + header->setDataByName("max_distance", primary_command_list[0]->distance); + } + if (spawn_group_list && MSpawnGroup){ + MSpawnGroup->readlock(__FUNCTION__, __LINE__); + header->setArrayLengthByName("group_size", spawn_group_list->size()); + vector::iterator itr; + int i = 0; + for (itr = spawn_group_list->begin(); itr != spawn_group_list->end(); itr++, i++){ + header->setArrayDataByName("group_spawn_id", player->GetIDWithPlayerSpawn((*itr)), i); + } + MSpawnGroup->releasereadlock(__FUNCTION__, __LINE__); + } + + header->setDataByName("spawn_id", player->GetIDWithPlayerSpawn(this)); + header->setDataByName("crc", id); + header->setDataByName("time_stamp", Timer::GetCurrentTime2()); +} + +void Spawn::InitializeVisPacketData(Player* player, PacketStruct* vis_packet) { + int16 version = vis_packet->GetVersion(); + + if (IsPlayer()) + appearance.pos.grid_id = 0xFFFFFFFF; + if (appearance.targetable == 1 || appearance.show_level == 1 || appearance.display_name == 1){ + if (!IsGroundSpawn()){ + int8 arrow_color = ARROW_COLOR_WHITE; + sint8 npc_con = player->GetFactions()->GetCon(faction_id); + if (appearance.attackable == 1) + arrow_color = player->GetArrowColor(GetLevel()); + vis_packet->setDataByName("arrow_color", arrow_color); + vis_packet->setDataByName("locked_no_loot", appearance.locked_no_loot); + if (player->GetArrowColor(GetLevel()) == ARROW_COLOR_GRAY) + if (npc_con == -4) + npc_con = -3; + vis_packet->setDataByName("npc_con", npc_con); + if (appearance.attackable == 1 && IsNPC() && (player->GetFactions()->GetCon(faction_id) <= -4 || ((NPC*)this)->Brain()->GetHate(player) > 1)) + vis_packet->setDataByName("npc_hate", ((NPC*)this)->Brain()->GetHatePercentage(player)); + int8 quest_flag = player->CheckQuestFlag(this); + if (version < 1188 && quest_flag >= 16) + quest_flag = 1; + vis_packet->setDataByName("quest_flag",quest_flag); + if( player->CheckQuestsKillUpdate(this, false)){ + vis_packet->setDataByName("name_quest_icon", 1); + } + } + } + + int8 vis_flags = 0; + if (MeetsSpawnAccessRequirements(player)){ + if (appearance.attackable == 1) + vis_flags += 64; //attackable icon + if (appearance.show_level == 1) + vis_flags += 32; + if (appearance.display_name == 1) + vis_flags += 16; + if (IsPlayer() || appearance.targetable == 1) + vis_flags += 4; + if (appearance.show_command_icon == 1) + vis_flags += 2; + } + else{ + //Check to see if there's an override value set + if (req_quests_override > 0) + vis_flags = req_quests_override & 0xFF; + } + + vis_packet->setDataByName("vis_flags", vis_flags); + + if (MeetsSpawnAccessRequirements(player)) + vis_packet->setDataByName("hand_flag", appearance.display_hand_icon); + else { + if ((req_quests_override & 256) > 0) + vis_packet->setDataByName("hand_flag", 1); + } + +} + +void Spawn::InitializeFooterPacketData(Player* player, PacketStruct* footer) { + if (IsWidget()){ + Widget* widget = (Widget*)this; + if (widget->GetMultiFloorLift()) { + footer->setDataByName("widget_x", widget->GetX()); + footer->setDataByName("widget_y", widget->GetY()); + footer->setDataByName("widget_z", widget->GetZ()); + } + else { + footer->setDataByName("widget_x", widget->GetWidgetX()); + footer->setDataByName("widget_y", widget->GetWidgetY()); + footer->setDataByName("widget_z", widget->GetWidgetZ()); + } + footer->setDataByName("widget_id", widget->GetWidgetID()); + footer->setDataByName("unknown3c", 6); + } + else if (IsSign()){ + Sign* sign = (Sign*)this; + footer->setDataByName("widget_id", sign->GetWidgetID()); + footer->setDataByName("widget_x", sign->GetWidgetX()); + footer->setDataByName("widget_y", sign->GetWidgetY()); + footer->setDataByName("widget_z", sign->GetWidgetZ()); + footer->setDataByName("unknown2b", 6); + if (sign->GetSignTitle()) + footer->setMediumStringByName("title", sign->GetSignTitle()); + if (sign->GetSignDescription()) + footer->setMediumStringByName("description", sign->GetSignDescription()); + footer->setDataByName("sign_distance", sign->GetSignDistance()); + footer->setDataByName("show", 1); + } + + footer->setMediumStringByName("name", appearance.name); + footer->setMediumStringByName("guild", appearance.sub_title); + footer->setMediumStringByName("prefix", appearance.prefix_title); + footer->setMediumStringByName("suffix", appearance.suffix_title); + footer->setMediumStringByName("last_name", appearance.last_name); + if (appearance.attackable == 0 && GetLevel() > 0) + footer->setDataByName("spawn_type", 1); + else if (appearance.attackable == 0) + footer->setDataByName("spawn_type", 6); + else + footer->setDataByName("spawn_type", 3); +} + +EQ2Packet* Spawn::spawn_serialize(Player* player, int16 version){ + // If spawn is NPC AND is pet && owner is a player && owner is the player passed to this function && player's char sheet pet id is 0 + if (IsNPC() && ((NPC*)this)->IsPet() && ((NPC*)this)->GetOwner()->IsPlayer() && player == ((NPC*)this)->GetOwner() && player->GetInfoStruct()->pet_id == 0) { + ((Player*)((NPC*)this)->GetOwner())->GetInfoStruct()->pet_id = player->spawn_id; + player->SetCharSheetChanged(true); + } + + int16 index; + if (player->player_spawn_index_map.count(this) > 0) { + index = player->player_spawn_index_map[this]; + player->player_spawn_map[index] = this; + } + else { + player->spawn_index++; + if(player->spawn_index == 255) + player->spawn_index++; //just so we dont have to worry about overloading + index = player->spawn_index; + player->player_spawn_index_map[this] = index; + player->player_spawn_map[index] = this; + } + + // Jabantiz - [Bug] Client Crash on Revive + if (player->player_spawn_reverse_id_map.count(this) == 0) { + int32 spawn_id = ++player->spawn_id; + player->player_spawn_id_map[spawn_id] = this; + player->player_spawn_reverse_id_map[this] = spawn_id; + } + + PacketStruct* header = player->GetSpawnHeaderStruct(); + header->ResetData(); + InitializeHeaderPacketData(player, header, index); + + PacketStruct* footer; + if(IsWidget()) + footer = player->GetWidgetFooterStruct(); + else if(IsSign()) + footer = player->GetSignFooterStruct(); + else + footer = player->GetSpawnFooterStruct(); + + footer->ResetData(); + InitializeFooterPacketData(player, footer); + + PacketStruct* vis_struct = player->GetSpawnVisStruct(); + PacketStruct* info_struct = player->GetSpawnInfoStruct(); + PacketStruct* pos_struct = player->GetSpawnPosStruct(); + + player->vis_mutex.writelock(__FUNCTION__, __LINE__); + vis_struct->ResetData(); + InitializeVisPacketData(player, vis_struct); + + player->info_mutex.writelock(__FUNCTION__, __LINE__); + info_struct->ResetData(); + InitializeInfoPacketData(player, info_struct); + + player->pos_mutex.writelock(__FUNCTION__, __LINE__); + pos_struct->ResetData(); + InitializePosPacketData(player, pos_struct); + + string* vis_data= vis_struct->serializeString(); + string* pos_data = pos_struct->serializeString(); + string* info_data = info_struct->serializeString(); + + int16 part2_size = pos_data->length() + vis_data->length() + info_data->length(); + uchar* part2 = new uchar[part2_size]; + + player->AddSpawnPosPacketForXOR(id, (uchar*)pos_data->c_str(), pos_data->length()); + player->AddSpawnVisPacketForXOR(id, (uchar*)vis_data->c_str(), vis_data->length()); + player->AddSpawnInfoPacketForXOR(id, (uchar*)info_data->c_str(), info_data->length()); + + uchar* ptr = part2; + memcpy(ptr, pos_data->c_str(), pos_data->length()); + ptr += pos_data->length(); + memcpy(ptr, vis_data->c_str(), vis_data->length()); + ptr += vis_data->length(); + memcpy(ptr, info_data->c_str(), info_data->length()); + player->pos_mutex.releasewritelock(__FUNCTION__, __LINE__); + player->info_mutex.releasewritelock(__FUNCTION__, __LINE__); + player->vis_mutex.releasewritelock(__FUNCTION__, __LINE__); + + string* part1 = header->serializeString(); + string* part3 = footer->serializeString(); + + uchar tmp[900]; + part2_size = Pack(tmp, part2, part2_size, 900, version); + int32 total_size = part1->length() + part2_size + part3->length() + 3; + + + uchar* final_packet = new uchar[total_size + 4]; + ptr = final_packet; + memcpy(ptr, &total_size, sizeof(total_size)); + ptr += sizeof(total_size); + + memcpy(ptr, &oversized_packet, sizeof(oversized_packet)); + ptr += sizeof(oversized_packet); + + memcpy(ptr, &opcode, sizeof(opcode)); + ptr += sizeof(opcode); + + memcpy(ptr, part1->c_str(), part1->length()); + ptr += part1->length(); + + memcpy(ptr, tmp, part2_size); + ptr += part2_size; + + memcpy(ptr, part3->c_str(), part3->length()); + delete[] part2; + + EQ2Packet* ret = new EQ2Packet(OP_ClientCmdMsg, final_packet, total_size + 4); + delete[] final_packet; + + return ret; +} + +uchar* Spawn::spawn_info_changes(Player* player, int16 version){ + int16 index = player->player_spawn_index_map[this]; + + PacketStruct* packet = player->GetSpawnInfoStruct(); + + player->info_mutex.writelock(__FUNCTION__, __LINE__); + packet->ResetData(); + InitializeInfoPacketData(player, packet); + string* data = packet->serializeString(); + int32 size = data->length(); + uchar* xor_info_packet = player->GetTempInfoPacketForXOR(); + if (!xor_info_packet) + xor_info_packet = player->SetTempInfoPacketForXOR(size); + uchar* orig_packet = player->GetSpawnInfoPacketForXOR(id); + if(orig_packet){ + memcpy(xor_info_packet, (uchar*)data->c_str(), size); + Encode(xor_info_packet, orig_packet, size); + } + uchar* tmp = new uchar[size + 10]; + size = Pack(tmp, xor_info_packet, size, size, version); + player->info_mutex.releasewritelock(__FUNCTION__, __LINE__); + + int32 orig_size = size; + size-=sizeof(int32); + size+=CheckOverLoadSize(index); + info_packet_size = size + CheckOverLoadSize(size); + + uchar* tmp2 = new uchar[info_packet_size]; + uchar* ptr = tmp2; + ptr += DoOverLoad(size, ptr); + ptr += DoOverLoad(index, ptr); + memcpy(ptr, tmp+sizeof(int32), orig_size - sizeof(int32)); + delete[] tmp; + return tmp2; +} + +uchar* Spawn::spawn_vis_changes(Player* player, int16 version){ + PacketStruct* vis_struct = player->GetSpawnVisStruct(); + int16 index = player->player_spawn_index_map[this]; + + player->vis_mutex.writelock(__FUNCTION__, __LINE__); + uchar* orig_packet = player->GetSpawnVisPacketForXOR(id); + vis_struct->ResetData(); + InitializeVisPacketData(player, vis_struct); + string* data = vis_struct->serializeString(); + int32 size = data->length(); + uchar* xor_vis_packet = player->GetTempVisPacketForXOR(); + if (!xor_vis_packet) + xor_vis_packet = player->SetTempVisPacketForXOR(size); + if(orig_packet){ + memcpy(xor_vis_packet, (uchar*)data->c_str(), size); + Encode(xor_vis_packet, orig_packet, size); + } + uchar* tmp = new uchar[size + 10]; + size = Pack(tmp, xor_vis_packet, size, size, version); + player->vis_mutex.releasewritelock(__FUNCTION__, __LINE__); + + int32 orig_size = size; + size-=sizeof(int32); + size+=CheckOverLoadSize(index); + vis_packet_size = size + CheckOverLoadSize(size); + uchar* tmp2 = new uchar[vis_packet_size]; + uchar* ptr = tmp2; + ptr += DoOverLoad(size, ptr); + ptr += DoOverLoad(index, ptr); + memcpy(ptr, tmp+sizeof(int32), orig_size - sizeof(int32)); + delete[] tmp; + return tmp2; +} + +uchar* Spawn::spawn_pos_changes(Player* player, int16 version){ + int16 index = player->GetIndexForSpawn(this); + + PacketStruct* packet = player->GetSpawnPosStruct(); + + player->pos_mutex.writelock(__FUNCTION__, __LINE__); + uchar* orig_packet = player->GetSpawnPosPacketForXOR(id); + packet->ResetData(); + InitializePosPacketData(player, packet); + string* data = packet->serializeString(); + int32 size = data->length(); + uchar* xor_pos_packet = player->GetTempPosPacketForXOR(); + if (!xor_pos_packet) + xor_pos_packet = player->SetTempPosPacketForXOR(size); + if(orig_packet){ + memcpy(xor_pos_packet, (uchar*)data->c_str(), size); + Encode(xor_pos_packet, orig_packet, size); + } + uchar* tmp; + if (IsPlayer()) + tmp = new uchar[size + 14]; + else + tmp = new uchar[size + 10]; + size = Pack(tmp, xor_pos_packet, size, size, version); + player->pos_mutex.releasewritelock(__FUNCTION__, __LINE__); + + + int32 orig_size = size; + // Needed for CoE+ clients + if (version >= 1188) + size += 1; + + if(IsPlayer()) + size += 4; + size-=sizeof(int32); + size+=CheckOverLoadSize(index); + + pos_packet_size = size + CheckOverLoadSize(size); + uchar* tmp2 = new uchar[pos_packet_size]; + uchar* ptr = tmp2; + ptr += DoOverLoad(size, ptr); + ptr += DoOverLoad(index, ptr); + + // extra byte in coe+ clients, 0 for NPC's 1 for Players + int8 x = 0; + if(IsPlayer()){ + if (version >= 1188) { + // set x to 1 and add it to the packet + x = 1; + memcpy(ptr, &x, sizeof(int8)); + ptr += sizeof(int8); + } + int32 now = Timer::GetCurrentTime2(); + memcpy(ptr, &now, sizeof(int32)); + ptr += sizeof(int32); + } + else if (version >= 1188) { + // add x to packet + memcpy(ptr, &x, sizeof(int8)); + ptr += sizeof(int8); + } + memcpy(ptr, tmp+sizeof(int32), orig_size - sizeof(int32)); + delete[] tmp; + return tmp2; +} + +EQ2Packet* Spawn::player_position_update_packet(Player* player, int16 version){ + if(!player || player->IsPlayer() == false){ + LogWrite(SPAWN__ERROR, 0, "Spawn", "Error: Called player_position_update_packet without player!"); + return 0; + } + else if(IsPlayer() == false){ + LogWrite(SPAWN__ERROR, 0, "Spawn", "Error: Called player_position_update_packet from spawn!"); + return 0; + } + + static const int8 info_size = 1; + static const int8 vis_size = 1; + m_Update.writelock(__FUNCTION__, __LINE__); + uchar* pos_changes = spawn_pos_changes(player, version); + int32 tmp_pos_packet_size = pos_packet_size; + m_Update.releasewritelock(__FUNCTION__, __LINE__); + + int32 size = info_size + tmp_pos_packet_size + vis_size + 11; + static const int8 oversized = 255; + int16 opcode_val = EQOpcodeManager[GetOpcodeVersion(version)]->EmuToEQ(OP_EqUpdateGhostCmd); + uchar* tmp = new uchar[size]; + memset(tmp, 0, size); + uchar* ptr = tmp; + size -=4; + memcpy(ptr, &size, sizeof(int32)); + size +=4; + ptr += sizeof(int32); + memcpy(ptr, &oversized, sizeof(int8)); + ptr += sizeof(int8); + memcpy(ptr, &opcode_val, sizeof(int16)); + ptr += sizeof(int16); + ptr += sizeof(int32); + ptr += info_size; + memcpy(ptr, pos_changes, tmp_pos_packet_size); + EQ2Packet* ret_packet = new EQ2Packet(OP_ClientCmdMsg, tmp, size); + delete[] tmp; + delete[] pos_changes; + return ret_packet; +} + +EQ2Packet* Spawn::spawn_update_packet(Player* player, int16 version, bool override_changes, bool override_vis_changes){ + if(!player || player->IsPlayer() == false){ + LogWrite(SPAWN__ERROR, 0, "Spawn", "Error: Called spawn_update_packet without player!"); + return 0; + } + else if((IsPlayer() && info_changed == false && vis_changed == false) || (info_changed == false && vis_changed == false && position_changed == false)){ + if(!override_changes && !override_vis_changes) + return 0; + } + + static const uchar null_byte = 0; + + uchar* info_changes = 0; + uchar* pos_changes = 0; + uchar* vis_changes = 0; + static const int8 oversized = 255; + int16 opcode_val = EQOpcodeManager[GetOpcodeVersion(version)]->EmuToEQ(OP_EqUpdateGhostCmd); + + int16 tmp_info_packet_size; + int16 tmp_vis_packet_size; + int16 tmp_pos_packet_size; + //We need to lock these variables up to make this thread safe + m_Update.writelock(__FUNCTION__, __LINE__); + //These variables are set in the spawn_info_changes, pos and vis changes functions + info_packet_size = 1; + pos_packet_size = 1; + vis_packet_size = 1; + + if (info_changed || override_changes) + info_changes = spawn_info_changes(player, version); + if ((position_changed || override_changes) && IsPlayer() == false) + pos_changes = spawn_pos_changes(player, version); + if (vis_changed || override_changes || override_vis_changes) + vis_changes = spawn_vis_changes(player, version); + + tmp_info_packet_size = info_packet_size; + tmp_pos_packet_size = pos_packet_size; + tmp_vis_packet_size = vis_packet_size; + m_Update.releasewritelock(__FUNCTION__, __LINE__); + + int32 size = info_packet_size + pos_packet_size + vis_packet_size + 11; + uchar* tmp = new uchar[size]; + memset(tmp, 0, size); + uchar* ptr = tmp; + size -=4; + memcpy(ptr, &size, sizeof(int32)); + size +=4; + ptr += sizeof(int32); + memcpy(ptr, &oversized, sizeof(int8)); + ptr += sizeof(int8); + memcpy(ptr, &opcode_val, sizeof(int16)); + ptr += sizeof(int16); + if (IsPlayer() == false){ //this isnt sent for player updates, it is sent on position update + //int32 time = Timer::GetCurrentTime2(); + packet_num = Timer::GetCurrentTime2(); + memcpy(ptr, &packet_num, sizeof(int32)); + } + ptr += sizeof(int32); + + memcpy(ptr, info_changes ? info_changes : &null_byte, tmp_info_packet_size); + ptr += info_packet_size; + memcpy(ptr, pos_changes ? pos_changes : &null_byte, tmp_pos_packet_size); + ptr += pos_packet_size; + memcpy(ptr, vis_changes ? vis_changes : &null_byte, tmp_vis_packet_size); + + EQ2Packet* ret_packet = new EQ2Packet(OP_ClientCmdMsg, tmp, size); + delete[] tmp; + safe_delete_array(info_changes); + safe_delete_array(vis_changes); + safe_delete_array(pos_changes); + return ret_packet; +} + +EQ2Packet* Spawn::serialize(Player* player, int16 version){ + return 0; +} + +Spawn* Spawn::GetTarget(){ + Spawn* ret = 0; + + // only attempt to get a spawn if we had a target stored + if (target != 0) + { + ret = GetZone()->GetSpawnByID(target); + + if (!ret) + target = 0; + } + + return ret; +} + +void Spawn::SetTarget(Spawn* spawn){ + SetInfo(&target, spawn ? spawn->GetID() : 0); +} + +Spawn* Spawn::GetLastAttacker() { + Spawn* ret = 0; + ret = GetZone()->GetSpawnByID(last_attacker); + if (!ret) + last_attacker = 0; + return ret; +} + +void Spawn::SetLastAttacker(Spawn* spawn){ + last_attacker = spawn->GetID(); +} + +void Spawn::SetInvulnerable(bool val){ + invulnerable = val; +} + +bool Spawn::GetInvulnerable(){ + return invulnerable; +} + +bool Spawn::TakeDamage(int32 damage){ + if(invulnerable) + return false; + if (IsEntity()) { + if (((Entity*)this)->IsMezzed()) + ((Entity*)this)->RemoveAllMezSpells(); + + if (damage == 0) + return true; + } + + int32 hp = GetHP(); + if(damage >= hp) { + SetHP(0); + if (IsPlayer()) { + ((Player*)this)->InCombat(false); + ((Player*)this)->SetRangeAttack(false); + GetZone()->TriggerCharSheetTimer(); // force char sheet updates now + } + } + else { + SetHP(hp - damage); + // if player flag the char sheet as changed so the ui updates properly + if (IsPlayer()) + ((Player*)this)->SetCharSheetChanged(true); + } + return true; +} + +void Spawn::TakeDamage(Spawn* attacker, int32 damage){ + if (TakeDamage(damage)) + GetZone()->CallSpawnScript(this, SPAWN_SCRIPT_HEALTHCHANGED, attacker); + SetLastAttacker(attacker); +} + +ZoneServer* Spawn::GetZone(){ + return zone; +} + +void Spawn::SetZone(ZoneServer* in_zone){ + zone = in_zone; +} + + +/*** HIT POINT ***/ +void Spawn::SetHP(sint32 new_val, bool setUpdateFlags){ + if(new_val == 0){ + ClearRunningLocations(); + CalculateRunningLocation(true); + } + if(new_val > basic_info.max_hp) + SetInfo(&basic_info.max_hp, new_val, setUpdateFlags); + SetInfo(&basic_info.cur_hp, new_val, setUpdateFlags); + if(/*IsPlayer() &&*/ GetZone() && basic_info.cur_hp > 0 && basic_info.cur_hp < basic_info.max_hp) + GetZone()->AddDamagedSpawn(this); + + if (IsEntity() && ((Entity*)this)->GetGroupMemberInfo()) { + ((Entity*)this)->UpdateGroupMemberInfo(); + if (IsPlayer()) + world.GetGroupManager()->SendGroupUpdate(((Entity*)this)->GetGroupMemberInfo()->group_id, GetZone()->GetClientBySpawn(this)); + else + world.GetGroupManager()->SendGroupUpdate(((Entity*)this)->GetGroupMemberInfo()->group_id); + } + + if (IsNPC() && ((NPC*)this)->IsPet() && ((NPC*)this)->GetOwner()->IsPlayer()) { + Player* player = (Player*)((NPC*)this)->GetOwner(); + if (player->GetPet() && player->GetCharmedPet()) { + if (this == player->GetPet()) { + player->GetInfoStruct()->pet_health_pct = (float)basic_info.cur_hp / (float)basic_info.max_hp; + player->SetCharSheetChanged(true); + } + } + else { + player->GetInfoStruct()->pet_health_pct = (float)basic_info.cur_hp / (float)basic_info.max_hp; + player->SetCharSheetChanged(true); + } + } +} +void Spawn::SetTotalHP(sint32 new_val){ + if(basic_info.hp_base == 0) + SetTotalHPBase(new_val); + SetInfo(&basic_info.max_hp, new_val); + + if(GetZone() && basic_info.cur_hp > 0 && basic_info.cur_hp < basic_info.max_hp) + GetZone()->AddDamagedSpawn(this); + + if (IsEntity() && ((Entity*)this)->GetGroupMemberInfo()) { + ((Entity*)this)->UpdateGroupMemberInfo(); + if (IsPlayer()) + world.GetGroupManager()->SendGroupUpdate(((Entity*)this)->GetGroupMemberInfo()->group_id, GetZone()->GetClientBySpawn(this)); + else + world.GetGroupManager()->SendGroupUpdate(((Entity*)this)->GetGroupMemberInfo()->group_id); + } + + if (IsNPC() && ((NPC*)this)->IsPet() && ((NPC*)this)->GetOwner()->IsPlayer()) { + Player* player = (Player*)((NPC*)this)->GetOwner(); + if (player->GetPet() && player->GetCharmedPet()) { + if (this == player->GetPet()) { + player->GetInfoStruct()->pet_health_pct = (float)basic_info.cur_hp / (float)basic_info.max_hp; + player->SetCharSheetChanged(true); + } + } + else { + player->GetInfoStruct()->pet_health_pct = (float)basic_info.cur_hp / (float)basic_info.max_hp; + player->SetCharSheetChanged(true); + } + } +} +void Spawn::SetTotalHPBase(sint32 new_val) +{ + SetInfo(&basic_info.hp_base, new_val); + + if(GetZone() && basic_info.cur_hp > 0 && basic_info.cur_hp < basic_info.max_hp) + GetZone()->AddDamagedSpawn(this); + + if (IsEntity() && ((Entity*)this)->GetGroupMemberInfo()) { + ((Entity*)this)->UpdateGroupMemberInfo(); + if (IsPlayer()) + world.GetGroupManager()->SendGroupUpdate(((Entity*)this)->GetGroupMemberInfo()->group_id, GetZone()->GetClientBySpawn(this)); + else + world.GetGroupManager()->SendGroupUpdate(((Entity*)this)->GetGroupMemberInfo()->group_id); + } +} +sint32 Spawn::GetHP() +{ + return basic_info.cur_hp; +} +sint32 Spawn::GetTotalHP() +{ + return basic_info.max_hp; +} +sint32 Spawn::GetTotalHPBase() +{ + return basic_info.hp_base; +} + + +/*** POWER ***/ +void Spawn::SetPower(sint32 power, bool setUpdateFlags){ + if(power > basic_info.max_power) + SetInfo(&basic_info.max_power, power, setUpdateFlags); + SetInfo(&basic_info.cur_power, power, setUpdateFlags); + if(/*IsPlayer() &&*/ GetZone() && basic_info.cur_power < basic_info.max_power) + GetZone()->AddDamagedSpawn(this); + + if (IsEntity() && ((Entity*)this)->GetGroupMemberInfo()) { + ((Entity*)this)->UpdateGroupMemberInfo(); + if (IsPlayer()) + world.GetGroupManager()->SendGroupUpdate(((Entity*)this)->GetGroupMemberInfo()->group_id, GetZone()->GetClientBySpawn(this)); + else + world.GetGroupManager()->SendGroupUpdate(((Entity*)this)->GetGroupMemberInfo()->group_id); + } + + if (IsNPC() && ((NPC*)this)->IsPet() && ((NPC*)this)->GetOwner()->IsPlayer()) { + Player* player = (Player*)((NPC*)this)->GetOwner(); + if (player->GetPet() && player->GetCharmedPet()) { + if (this == player->GetPet()) { + player->GetInfoStruct()->pet_power_pct = (float)basic_info.cur_power / (float)basic_info.max_power; + player->SetCharSheetChanged(true); + } + } + else { + player->GetInfoStruct()->pet_power_pct = (float)basic_info.cur_power / (float)basic_info.max_power; + player->SetCharSheetChanged(true); + } + } +} +void Spawn::SetTotalPower(sint32 new_val) +{ + if(basic_info.power_base == 0) + SetTotalPowerBase(new_val); + SetInfo(&basic_info.max_power, new_val); + + if(GetZone() && basic_info.cur_power < basic_info.max_power) + GetZone()->AddDamagedSpawn(this); + + if (IsEntity() && ((Entity*)this)->GetGroupMemberInfo()) { + ((Entity*)this)->UpdateGroupMemberInfo(); + if (IsPlayer()) + world.GetGroupManager()->SendGroupUpdate(((Entity*)this)->GetGroupMemberInfo()->group_id, GetZone()->GetClientBySpawn(this)); + else + world.GetGroupManager()->SendGroupUpdate(((Entity*)this)->GetGroupMemberInfo()->group_id); + } + + if (IsNPC() && ((NPC*)this)->IsPet() && ((NPC*)this)->GetOwner()->IsPlayer()) { + Player* player = (Player*)((NPC*)this)->GetOwner(); + if (player->GetPet() && player->GetCharmedPet()) { + if (this == player->GetPet()) { + player->GetInfoStruct()->pet_power_pct = (float)basic_info.cur_power / (float)basic_info.max_power; + player->SetCharSheetChanged(true); + } + } + else { + player->GetInfoStruct()->pet_power_pct = (float)basic_info.cur_power / (float)basic_info.max_power; + player->SetCharSheetChanged(true); + } + } +} +void Spawn::SetTotalPowerBase(sint32 new_val) +{ + SetInfo(&basic_info.power_base, new_val); + + if(GetZone() && basic_info.cur_power < basic_info.max_power) + GetZone()->AddDamagedSpawn(this); + + if (IsEntity() && ((Entity*)this)->GetGroupMemberInfo()) { + ((Entity*)this)->UpdateGroupMemberInfo(); + if (IsPlayer()) + world.GetGroupManager()->SendGroupUpdate(((Entity*)this)->GetGroupMemberInfo()->group_id, GetZone()->GetClientBySpawn(this)); + else + world.GetGroupManager()->SendGroupUpdate(((Entity*)this)->GetGroupMemberInfo()->group_id); + } +} +sint32 Spawn::GetPower() +{ + return basic_info.cur_power; +} +sint32 Spawn::GetTotalPower(){ + return basic_info.max_power; +} +sint32 Spawn::GetTotalPowerBase() +{ + return basic_info.power_base; +} + + +/*** SAVAGERY ***/ +void Spawn::SetSavagery(sint32 savagery, bool setUpdateFlags) +{ + /* JA: extremely limited functionality until we better understand Savagery */ + if(savagery > basic_info.max_savagery) + SetInfo(&basic_info.max_savagery, savagery, setUpdateFlags); + + SetInfo(&basic_info.cur_savagery, savagery, setUpdateFlags); +} +void Spawn::SetTotalSavagery(sint32 new_val) +{ + /* JA: extremely limited functionality until we better understand Savagery */ + if(basic_info.savagery_base == 0) + SetTotalSavageryBase(new_val); + + SetInfo(&basic_info.max_savagery, new_val); +} +void Spawn::SetTotalSavageryBase(sint32 new_val){ + SetInfo(&basic_info.savagery_base, new_val); + + if (IsEntity() && ((Entity*)this)->GetGroupMemberInfo()) { + ((Entity*)this)->UpdateGroupMemberInfo(); + if (IsPlayer()) + world.GetGroupManager()->SendGroupUpdate(((Entity*)this)->GetGroupMemberInfo()->group_id, GetZone()->GetClientBySpawn(this)); + else + world.GetGroupManager()->SendGroupUpdate(((Entity*)this)->GetGroupMemberInfo()->group_id); + } +} +sint32 Spawn::GetTotalSavagery() +{ + return basic_info.max_savagery; +} +sint32 Spawn::GetSavagery() +{ + return basic_info.cur_savagery; +} + + +/*** DISSONANCE ***/ +void Spawn::SetDissonance(sint32 dissonance, bool setUpdateFlags) +{ + /* JA: extremely limited functionality until we better understand Dissonance */ + if(dissonance > basic_info.max_dissonance) + SetInfo(&basic_info.max_dissonance, dissonance, setUpdateFlags); + + SetInfo(&basic_info.cur_dissonance, dissonance, setUpdateFlags); +} +void Spawn::SetTotalDissonance(sint32 new_val) +{ + /* JA: extremely limited functionality until we better understand Dissonance */ + if(basic_info.dissonance_base == 0) + SetTotalDissonanceBase(new_val); + + SetInfo(&basic_info.max_dissonance, new_val); + +} +void Spawn::SetTotalDissonanceBase(sint32 new_val) +{ + SetInfo(&basic_info.dissonance_base, new_val); + + if (IsEntity() && ((Entity*)this)->GetGroupMemberInfo()) { + ((Entity*)this)->UpdateGroupMemberInfo(); + if (IsPlayer()) + world.GetGroupManager()->SendGroupUpdate(((Entity*)this)->GetGroupMemberInfo()->group_id, GetZone()->GetClientBySpawn(this)); + else + world.GetGroupManager()->SendGroupUpdate(((Entity*)this)->GetGroupMemberInfo()->group_id); + } +} +sint32 Spawn::GetTotalDissonance() +{ + return basic_info.max_dissonance; +} +sint32 Spawn::GetDissonance() +{ + return basic_info.cur_dissonance; +} + +/* --< Alternate Advancement Points >-- */ +void Spawn::SetAssignedAA(sint16 new_val) +{ + SetInfo(&basic_info.assigned_aa, new_val); +} + +void Spawn::SetUnassignedAA(sint16 new_val) +{ + SetInfo(&basic_info.unassigned_aa, new_val); +} + +void Spawn::SetTradeskillAA(sint16 new_val) +{ + SetInfo(&basic_info.tradeskill_aa, new_val); +} + +void Spawn::SetUnassignedTradeskillAA(sint16 new_val) +{ + SetInfo(&basic_info.unassigned_tradeskill_aa, new_val); +} + +void Spawn::SetPrestigeAA(sint16 new_val) +{ + SetInfo(&basic_info.prestige_aa, new_val); +} + +void Spawn::SetUnassignedPrestigeAA(sint16 new_val) +{ + SetInfo(&basic_info.unassigned_prestige_aa, new_val); +} + +void Spawn::SetTradeskillPrestigeAA(sint16 new_val) +{ + SetInfo(&basic_info.tradeskill_prestige_aa, new_val); +} + +void Spawn::SetUnassignedTradeskillPrestigeAA(sint16 new_val) +{ + SetInfo(&basic_info.unassigned_tradeskill_prestige_aa, new_val); +} + + +sint16 Spawn::GetAssignedAA() +{ + return basic_info.assigned_aa; +} + +sint16 Spawn::GetUnassignedAA() +{ + return basic_info.unassigned_aa; +} + +sint16 Spawn::GetTradeskillAA() +{ + return basic_info.tradeskill_aa; +} + +sint16 Spawn::GetUnassignedTradeskillAA() +{ + return basic_info.unassigned_tradeskill_aa; +} + +sint16 Spawn::GetPrestigeAA() +{ + return basic_info.prestige_aa; +} + +sint16 Spawn::GetUnassignedPretigeAA() +{ + return basic_info.unassigned_prestige_aa; +} + +sint16 Spawn::GetTradeskillPrestigeAA() +{ + return basic_info.tradeskill_prestige_aa; +} + +sint16 Spawn::GetUnassignedTradeskillPrestigeAA() +{ + return basic_info.unassigned_tradeskill_prestige_aa; +} + +float Spawn::GetDistance(float x1, float y1, float z1, float x2, float y2, float z2){ + x1 = x1 - x2; + y1 = y1 - y2; + z1 = z1 - z2; + return sqrt(x1*x1 + y1*y1 + z1*z1); +} + +float Spawn::GetDistance(float x, float y, float z, bool ignore_y){ + if(ignore_y) + return GetDistance(x, y, z, GetX(), y, GetZ()); + else + return GetDistance(x, y, z, GetX(), GetY(), GetZ()); +} + +float Spawn::GetDistance(Spawn* spawn, bool ignore_y){ + float ret = 0; + if(spawn) + ret = GetDistance(spawn->GetX(), spawn->GetY(), spawn->GetZ(), ignore_y); + return ret; +} + +int32 Spawn::GetRespawnTime(){ + return respawn; +} + +void Spawn::SetRespawnTime(int32 time){ + respawn = time; +} + +int32 Spawn::GetExpireOffsetTime(){ + return expire_offset; +} + +void Spawn::SetExpireOffsetTime(int32 time){ + expire_offset = time; +} + +int32 Spawn::GetSpawnLocationID(){ + return spawn_location_id; +} + +void Spawn::SetSpawnLocationID(int32 id){ + spawn_location_id = id; +} + +int32 Spawn::GetSpawnEntryID(){ + return spawn_entry_id; +} + +void Spawn::SetSpawnEntryID(int32 id){ + spawn_entry_id = id; +} + +int32 Spawn::GetSpawnLocationPlacementID(){ + return spawn_location_spawns_id; +} + +void Spawn::SetSpawnLocationPlacementID(int32 id){ + spawn_location_spawns_id = id; +} + +const char* Spawn::GetSpawnScript(){ + if(spawn_script.length() > 0) + return spawn_script.c_str(); + else + return 0; +} + +void Spawn::SetSpawnScript(string name){ + spawn_script = name; +} + +void Spawn::SetPrimaryCommand(const char* name, const char* command, float distance){ + EntityCommand* entity_command = CreateEntityCommand(name, distance, command, "", 0, 0); + if(primary_command_list.size() > 0 && primary_command_list[0]){ + safe_delete(primary_command_list[0]); + primary_command_list[0] = entity_command; + } + else + primary_command_list.push_back(entity_command); +} + +void Spawn::SetSecondaryCommands(vector* commands){ + if(commands && commands->size() > 0){ + vector::iterator itr; + if(secondary_command_list.size() > 0){ + for(itr = secondary_command_list.begin(); itr != secondary_command_list.end(); itr++){ + safe_delete(*itr); + } + secondary_command_list.clear(); + } + EntityCommand* command = 0; + for(itr = commands->begin(); itr != commands->end(); itr++){ + command = CreateEntityCommand(*itr); + secondary_command_list.push_back(command); + } + } +} + +void Spawn::SetPrimaryCommands(vector* commands){ + if(commands && commands->size() > 0){ + vector::iterator itr; + if(primary_command_list.size() > 0){ + for(itr = primary_command_list.begin(); itr != primary_command_list.end(); itr++){ + safe_delete(*itr); + } + primary_command_list.clear(); + } + EntityCommand* command = 0; + for(itr = commands->begin(); itr != commands->end(); itr++){ + command = CreateEntityCommand(*itr); + primary_command_list.push_back(command); + } + } +} + +EntityCommand* Spawn::FindEntityCommand(string command) { + EntityCommand* entity_command = 0; + if (primary_command_list.size() > 0) { + vector::iterator itr; + for (itr = primary_command_list.begin(); itr != primary_command_list.end(); itr++) { + if ((*itr)->command == command) { + entity_command = *itr; + break; + } + } + } + if (!entity_command && secondary_command_list.size() > 0) { + vector::iterator itr; + for (itr = secondary_command_list.begin(); itr != secondary_command_list.end(); itr++) { + if ((*itr)->command == command) { + entity_command = *itr; + break; + } + } + } + return entity_command; +} + +void Spawn::SetSizeOffset(int8 offset){ + size_offset = offset; +} + +int8 Spawn::GetSizeOffset(){ + return size_offset; +} + +void Spawn::SetMerchantID(int32 val){ + merchant_id = val; +} + +int32 Spawn::GetMerchantID(){ + return merchant_id; +} + +void Spawn::SetMerchantType(int8 val){ + merchant_type = val; +} + +int8 Spawn::GetMerchantType(){ + return merchant_type; +} + +void Spawn::SetQuestsRequired(map* >* quests){ + if(quests){ + map* >::iterator itr; + for(itr = quests->begin(); itr != quests->end(); itr++){ + vector* quest_steps = itr->second; + for (int32 i = 0; i < quest_steps->size(); i++) + SetQuestsRequired(itr->first, quest_steps->at(i)); + } + } +} + +void Spawn::SetQuestsRequired(int32 quest_id, int16 quest_step){ + m_requiredQuests.writelock(__FUNCTION__, __LINE__); + if (required_quests.count(quest_id) == 0) + required_quests[quest_id] = new vector; + else{ + for (int32 i = 0; i < required_quests[quest_id]->size(); i++){ + if (required_quests[quest_id]->at(i) == quest_step){ + m_requiredQuests.releasewritelock(__FUNCTION__, __LINE__); + return; + } + } + } + required_quests[quest_id]->push_back(quest_step); + m_requiredQuests.releasewritelock(__FUNCTION__, __LINE__); +} + +void Spawn::SetRequiredHistory(int32 event_id, int32 value1, int32 value2){ + LUAHistory set_value; + set_value.Value = value1; + set_value.Value2 = value2; + set_value.SaveNeeded = false; + m_requiredHistory.writelock(__FUNCTION__, __LINE__); + required_history[event_id] = set_value; + m_requiredHistory.releasewritelock(__FUNCTION__, __LINE__); +} + +map* >* Spawn::GetQuestsRequired(){ + return &required_quests; +} + +void Spawn::SetTransporterID(int32 id){ + transporter_id = id; +} + +int32 Spawn::GetTransporterID(){ + return transporter_id; +} + +void Spawn::InitializePosPacketData(Player* player, PacketStruct* packet){ + int16 version = packet->GetVersion(); + packet->setDataByName("pos_grid_id", appearance.pos.grid_id); + bool include_heading = true; + if (IsWidget() && ((Widget*)this)->GetIncludeHeading() == false) + include_heading = false; + else if (IsSign() && ((Sign*)this)->GetIncludeHeading() == false) + include_heading = false; + else if (IsGroundSpawn()) + include_heading = false; + + if (include_heading){ + packet->setDataByName("pos_heading1", appearance.pos.Dir1); + packet->setDataByName("pos_heading2", appearance.pos.Dir2); + } + + packet->setDataByName("pos_collision_radius", appearance.pos.collision_radius > 0 ? appearance.pos.collision_radius : 32); + if (version <= 910) { + packet->setDataByName("pos_size", size > 0 ? size : 32); + packet->setDataByName("pos_size_multiplier", 32); //32 is normal + } + else { + if (IsPlayer()) { + if (this != player) + packet->setDataByName("pos_size", 49152); + + packet->setDataByName("pos_size_ratio", 1); + packet->setDataByName("pos_size_multiplier_ratio", 1); // used for growth with players + } + else { + packet->setDataByName("pos_size_ratio", size > 0 ? (((float)size) / 32) : 1); + packet->setDataByName("pos_size_multiplier_ratio", 1); + } + } + packet->setDataByName("pos_state", appearance.pos.state); + + bool include_location = true; + if (IsWidget() && ((Widget*)this)->GetIncludeLocation() == false) + include_location = false; + else if (IsSign() && ((Sign*)this)->GetIncludeLocation() == false) + include_location = false; + + if (include_location){ + if (IsWidget() && ((Widget*)this)->GetMultiFloorLift()) { + Widget* widget = (Widget*)this; + float x = appearance.pos.X - widget->GetWidgetX(); + float y = appearance.pos.Y - widget->GetWidgetY(); + float z = appearance.pos.Z - widget->GetWidgetZ(); + + packet->setDataByName("pos_x", x); + packet->setDataByName("pos_y", y); + packet->setDataByName("pos_z", z); + } + else { + packet->setDataByName("pos_x", appearance.pos.X); + packet->setDataByName("pos_y", appearance.pos.Y); + packet->setDataByName("pos_z", appearance.pos.Z); + } + if (IsSign()) + packet->setDataByName("pos_unknown6", 3, 2); + } + + if (IsPlayer()) { + packet->setDataByName("pos_x_velocity", static_cast(GetSpeedX() * 32)); + packet->setDataByName("pos_y_velocity", static_cast(GetSpeedY() * 32)); + packet->setDataByName("pos_z_velocity", static_cast(GetSpeedZ() * 32)); + } + + if (IsWidget() && ((Widget*)this)->GetMultiFloorLift()) { + Widget* widget = (Widget*)this; + + float x; + float y; + float z; + + if (IsRunning()){ + x = appearance.pos.X2 - widget->GetWidgetX(); + y = appearance.pos.Y2 - widget->GetWidgetY(); + z = appearance.pos.Z2- widget->GetWidgetZ(); + } + else { + x = appearance.pos.X - widget->GetWidgetX(); + y = appearance.pos.Y - widget->GetWidgetY(); + z = appearance.pos.Z - widget->GetWidgetZ(); + } + + packet->setDataByName("pos_next_x", x); + packet->setDataByName("pos_next_y", y); + packet->setDataByName("pos_next_z", z); + + packet->setDataByName("pos_x3", x); + packet->setDataByName("pos_y3", y); + packet->setDataByName("pos_z3", z); + } + else { + packet->setDataByName("pos_next_x", appearance.pos.X2); + packet->setDataByName("pos_next_y", appearance.pos.Y2); + packet->setDataByName("pos_next_z", appearance.pos.Z2); + + packet->setDataByName("pos_x3", appearance.pos.X3); + packet->setDataByName("pos_y3", appearance.pos.Y3); + packet->setDataByName("pos_z3", appearance.pos.Z3); + } + //packet->setDataByName("pos_unknown2", 4, 2); + + int16 speed_multiplier = rule_manager.GetGlobalRule(R_Spawn, SpeedMultiplier)->GetInt16(); // was 1280, 600 and now 300... investigating why + //float speed_ratio = rule_manager.GetGlobalRule(R_Spawn, SpeedRatio)->GetFloat(); // was 7.5 for 1280 and 600, then 0 for 300... investigating why + + if (IsPlayer()) { + Player* player = static_cast(this); + + packet->setDataByName("pos_speed", player->GetPosPacketSpeed() * speed_multiplier); + packet->setDataByName("pos_side_speed", player->GetSideSpeed() * speed_multiplier); + } + else { + packet->setDataByName("pos_speed", GetSpeed() * speed_multiplier); + } + + + + if (IsNPC() || IsPlayer()) { + packet->setDataByName("pos_move_type", 25); + } + else if (IsWidget() || IsSign()) { + packet->setDataByName("pos_move_type", 11); + } + else if(IsGroundSpawn()) { + packet->setDataByName("pos_move_type", 16); + } + + if (!IsPlayer()) + packet->setDataByName("pos_movement_mode", 2); + + if(version <= 910) + packet->setDataByName("pos_unknown10", 0xFFFF, 1); + else + packet->setDataByName("pos_unknown10", 0xFFFF); + if(version <= 910) + packet->setDataByName("pos_unknown10", 0xFFFF, 2); + else + packet->setDataByName("pos_unknown10", 0XFFFF, 1); + packet->setDataByName("pos_pitch1", appearance.pos.Pitch1); + packet->setDataByName("pos_pitch2", appearance.pos.Pitch2); + packet->setDataByName("pos_roll", appearance.pos.Roll); +} + +void Spawn::InitializeInfoPacketData(Player* spawn, PacketStruct* packet){ + int16 version = packet->GetVersion(); + if(appearance.targetable == 1 || appearance.show_level == 1 || appearance.display_name == 1){ + appearance.locked_no_loot = 1; //for now + if(!IsObject() && !IsGroundSpawn() && !IsWidget() && !IsSign()){ + int8 percent = 0; + if(GetHP() > 0) + percent = (int8)(((float)GetHP()/GetTotalHP()) * 100); + if(percent < 100){ + packet->setDataByName("hp_remaining", 100 ^ percent); + } + else + packet->setDataByName("hp_remaining", 0); + if(GetTotalPower() > 0){ + percent = (int8)(((float)GetPower()/GetTotalPower()) * 100); + if(percent > 0) + packet->setDataByName("power_percent", percent); + else + packet->setDataByName("power_percent", 0); + } + } + } + packet->setDataByName("level", (int8)GetLevel()); + packet->setDataByName("unknown4", (int8)GetLevel()); + packet->setDataByName("difficulty", appearance.encounter_level); //6); + packet->setDataByName("heroic_flag", appearance.heroic_flag); + if(!IsObject() && !IsGroundSpawn() && !IsWidget() && !IsSign()) + packet->setDataByName("interaction_flag", 12); //this makes NPCs head turn to look at you + if (version >= 1188 && (IsPlayer() || IsBot())) + packet->setDataByName("spawn_type", 0); + else + packet->setDataByName("spawn_type", spawn_type); + packet->setDataByName("class", appearance.adventure_class); + + int16 model_type = appearance.model_type; + if (GetIllusionModel() != 0) { + if (IsPlayer()) { + if (((Player*)this)->get_character_flag(CF_SHOW_ILLUSION)) { + model_type = GetIllusionModel(); + } + } + else + model_type = GetIllusionModel(); + } + + packet->setDataByName("model_type", model_type); + if(appearance.soga_model_type == 0) + packet->setDataByName("soga_model_type", model_type); + else + packet->setDataByName("soga_model_type", appearance.soga_model_type); + + if(GetTempActionState() >= 0) + packet->setDataByName("action_state", GetTempActionState()); + else + packet->setDataByName("action_state", appearance.action_state); + if(GetTempVisualState() >= 0) + packet->setDataByName("visual_state", GetTempVisualState()); + else + packet->setDataByName("visual_state", appearance.visual_state); + packet->setDataByName("emote_state", appearance.emote_state); + packet->setDataByName("mood_state", appearance.mood_state); + packet->setDataByName("gender", appearance.gender); + packet->setDataByName("race", appearance.race); + packet->setDataByName("gender", appearance.gender); + if(IsEntity()){ + Entity* entity = ((Entity*)this); + packet->setDataByName("combat_voice", entity->GetCombatVoice()); + packet->setDataByName("emote_voice", entity->GetEmoteVoice()); + for(int i=0;i<25;i++){ + if(i == 2){ //don't send helm if hidden flag + if(IsPlayer()){ + if(((Player*)this)->get_character_flag(CF_HIDE_HELM)){ + packet->setDataByName("equipment_types", 0, i); + packet->setColorByName("equipment_colors", 0, i); + packet->setColorByName("equipment_highlights", 0, i); + continue; + } + } + if (IsBot()) { + if (!((Bot*)this)->ShowHelm) { + packet->setDataByName("equipment_types", 0, i); + packet->setColorByName("equipment_colors", 0, i); + packet->setColorByName("equipment_highlights", 0, i); + continue; + } + } + } + else if(i == 19){ //don't send cloak if hidden + if(IsPlayer()){ + if(!((Player*)this)->get_character_flag(CF_SHOW_CLOAK)){ + packet->setDataByName("equipment_types", 0, i); + packet->setColorByName("equipment_colors", 0, i); + packet->setColorByName("equipment_highlights", 0, i); + continue; + } + } + if (IsBot()) { + if (!((Bot*)this)->ShowCloak) { + packet->setDataByName("equipment_types", 0, i); + packet->setColorByName("equipment_colors", 0, i); + packet->setColorByName("equipment_highlights", 0, i); + continue; + } + } + } + packet->setDataByName("equipment_types", entity->equipment.equip_id[i], i); + packet->setColorByName("equipment_colors", entity->equipment.color[i], i); + packet->setColorByName("equipment_highlights", entity->equipment.highlight[i], i); + } + packet->setDataByName("mount_type", entity->GetMount()); + + // find the visual flags + int8 vis_flag = 0; + //Invis + crouch flag check + if (entity->IsStealthed()) + vis_flag += (INFO_VIS_FLAG_INVIS + INFO_VIS_FLAG_CROUCH); + //Invis flag check + else if (entity->IsInvis()) + vis_flag += INFO_VIS_FLAG_INVIS; + //Mount flag check + if (entity->GetMount() > 0) + vis_flag += INFO_VIS_FLAG_MOUNTED; + //Hide hood check + if ((IsPlayer() && ((Player*)this)->get_character_flag(CF_HIDE_HOOD)) || appearance.hide_hood) + vis_flag += INFO_VIS_FLAG_HIDE_HOOD; + + packet->setDataByName("visual_flag", vis_flag); + packet->setColorByName("mount_saddle_color", entity->GetMountSaddleColor()); + packet->setColorByName("mount_color", entity->GetMountColor()); + packet->setDataByName("hair_type_id", entity->features.hair_type); + packet->setDataByName("chest_type_id", entity->features.chest_type); + packet->setDataByName("wing_type_id", entity->features.wing_type); + packet->setDataByName("legs_type_id", entity->features.legs_type); + packet->setDataByName("soga_hair_type_id", entity->features.soga_hair_type); + packet->setDataByName("facial_hair_type_id", entity->features.hair_face_type); + packet->setDataByName("soga_facial_hair_type_id", entity->features.soga_hair_face_type); + for(int i=0;i<3;i++){ + packet->setDataByName("eye_type", entity->features.eye_type[i], i); + packet->setDataByName("ear_type", entity->features.ear_type[i], i); + packet->setDataByName("eye_brow_type", entity->features.eye_brow_type[i], i); + packet->setDataByName("cheek_type", entity->features.cheek_type[i], i); + packet->setDataByName("lip_type", entity->features.lip_type[i], i); + packet->setDataByName("chin_type", entity->features.chin_type[i], i); + packet->setDataByName("nose_type", entity->features.nose_type[i], i); + packet->setDataByName("soga_eye_type", entity->features.soga_eye_type[i], i); + packet->setDataByName("soga_ear_type", entity->features.soga_ear_type[i], i); + packet->setDataByName("soga_eye_brow_type", entity->features.soga_eye_brow_type[i], i); + packet->setDataByName("soga_cheek_type", entity->features.soga_cheek_type[i], i); + packet->setDataByName("soga_lip_type", entity->features.soga_lip_type[i], i); + packet->setDataByName("soga_chin_type", entity->features.soga_chin_type[i], i); + packet->setDataByName("soga_nose_type", entity->features.soga_nose_type[i], i); + } + packet->setColorByName("skin_color", entity->features.skin_color); + packet->setColorByName("eye_color", entity->features.eye_color); + packet->setColorByName("hair_type_color", entity->features.hair_type_color); + packet->setColorByName("hair_type_highlight_color", entity->features.hair_type_highlight_color); + packet->setColorByName("hair_face_color", entity->features.hair_face_color); + packet->setColorByName("hair_face_highlight_color", entity->features.hair_face_highlight_color); + packet->setColorByName("hair_highlight", entity->features.hair_highlight_color); + packet->setColorByName("wing_color1", entity->features.wing_color1); + packet->setColorByName("wing_color2", entity->features.wing_color2); + packet->setColorByName("hair_color1", entity->features.hair_color1); + packet->setColorByName("hair_color2", entity->features.hair_color2); + packet->setColorByName("soga_skin_color", entity->features.soga_skin_color); + packet->setColorByName("soga_eye_color", entity->features.soga_eye_color); + packet->setColorByName("soga_hair_color1", entity->features.soga_hair_color1); + packet->setColorByName("soga_hair_color2", entity->features.soga_hair_color2); + packet->setColorByName("soga_hair_type_color", entity->features.soga_hair_type_color); + packet->setColorByName("soga_hair_type_highlight_color", entity->features.soga_hair_type_highlight_color); + packet->setColorByName("soga_hair_face_color", entity->features.soga_hair_face_color); + packet->setColorByName("soga_hair_face_highlight_color", entity->features.soga_hair_face_highlight_color); + packet->setColorByName("soga_hair_highlight", entity->features.soga_hair_highlight_color); + + packet->setDataByName("body_age", entity->features.body_age); + } + else{ + EQ2_Color empty; + empty.red = 255; + empty.blue = 255; + empty.green = 255; + packet->setColorByName("skin_color", empty); + packet->setColorByName("eye_color", empty); + packet->setColorByName("soga_skin_color", empty); + packet->setColorByName("soga_eye_color", empty); + } + if(appearance.icon == 0){ + if(appearance.attackable == 1) + appearance.icon = 0; + else if(appearance.encounter_level > 0) + appearance.icon = 4; + else + appearance.icon = 6; + } + + // If Coe+ clients modify the values before we send + // if not then just send the value we have. + int8 temp_icon = appearance.icon; + + //Check if we need to add the hand icon.. + if ((temp_icon & 6) != 6 && appearance.display_hand_icon) { + temp_icon |= 6; + } + + //Icon value 28 for boats, set this without modifying the value + if (version >= 1188 && temp_icon != 28) { + if ((temp_icon & 64) > 0) { + temp_icon -= 64; // remove the DoV value; + temp_icon += 128; // add the CoE value + } + if ((temp_icon & 32) > 0) { + temp_icon -= 32; // remove the DoV value; + temp_icon += 64; // add the CoE value + } + if ((temp_icon & 4) > 0) { + temp_icon -= 4; // remove DoV value + temp_icon += 8; // add the CoE icon + } + if ((temp_icon & 6) > 0) { + temp_icon -= 10; // remove DoV value + temp_icon += 12; // add the CoE icon + } + } + packet->setDataByName("icon", temp_icon);//appearance.icon); + + int16 temp_activity_status = 0; + if (version >= 1188) { + if ((appearance.activity_status & ACTIVITY_STATUS_ROLEPLAYING) > 0) + temp_activity_status += ACTIVITY_STATUS_ROLEPLAYING_1188; + + if ((appearance.activity_status & ACTIVITY_STATUS_ANONYMOUS) > 0) + temp_activity_status += ACTIVITY_STATUS_ANONYMOUS_1188; + + if ((appearance.activity_status & ACTIVITY_STATUS_LINKDEAD) > 0) + temp_activity_status += ACTIVITY_STATUS_LINKDEAD_1188; + + if ((appearance.activity_status & ACTIVITY_STATUS_CAMPING) > 0) + temp_activity_status += ACTIVITY_STATUS_CAMPING_1188; + + if ((appearance.activity_status & ACTIVITY_STATUS_LFG) > 0) + temp_activity_status += ACTIVITY_STATUS_LFG_1188; + + if ((appearance.activity_status & ACTIVITY_STATUS_LFW) > 0) + temp_activity_status += ACTIVITY_STATUS_LFW_1188; + + if ((appearance.activity_status & ACTIVITY_STATUS_SOLID) > 0) + temp_activity_status += ACTIVITY_STATUS_SOLID_1188; + + if ((appearance.activity_status & ACTIVITY_STATUS_IMMUNITY_GAINED) > 0) + temp_activity_status += ACTIVITY_STATUS_IMMUNITY_GAINED_1188; + + if ((appearance.activity_status & ACTIVITY_STATUS_IMMUNITY_REMAINING) > 0) + temp_activity_status += ACTIVITY_STATUS_IMMUNITY_REMAINING_1188; + } + else + temp_activity_status = appearance.activity_status; + + packet->setDataByName("activity_status", temp_activity_status); //appearance.activity_status); + + // If player and player has a follow target + if (IsPlayer()) { + if (((Player*)this)->GetFollowTarget()) + packet->setDataByName("follow_target", ((((Player*)this)->GetIDWithPlayerSpawn(((Player*)this)->GetFollowTarget()) * -1) - 1)); + else + packet->setDataByName("follow_target", 0); + } + if (GetTarget() && GetTarget()->GetTargetable()) + packet->setDataByName("target_id", ((spawn->GetIDWithPlayerSpawn(GetTarget()) * -1) - 1)); + else + packet->setDataByName("target_id", 0); + + //Send spell effects for target window + if(IsEntity()){ + InfoStruct* info = ((Entity*)this)->GetInfoStruct(); + int8 i = 0; + int16 backdrop = 0; + int16 spell_icon = 0; + int32 spell_id = 0; + LuaSpell* spell = 0; + ((Entity*)this)->GetSpellEffectMutex()->readlock(__FUNCTION__, __LINE__); + while(i < 30){ + //Change value of spell id for this packet if spell exists + spell_id = info->spell_effects[i].spell_id; + if(spell_id > 0) + spell_id = 0xFFFFFFFF - spell_id; + else + spell_id = 0; + packet->setSubstructDataByName("spell_effects", "spell_id", spell_id, i); + + //Change value of spell icon for this packet if spell exists + spell_icon = info->spell_effects[i].icon; + if(spell_icon > 0){ + if(!(spell_icon == 0xFFFF)) + spell_icon = 0xFFFF - spell_icon; + } + else + spell_icon = 0; + packet->setSubstructDataByName("spell_effects", "spell_icon", spell_icon, i); + + //Change backdrop values to match values in this packet + backdrop = info->spell_effects[i].icon_backdrop; + switch(backdrop){ + case 312: + backdrop = 33080; + break; + case 313: + backdrop = 33081; + break; + case 314: + backdrop = 33082; + break; + case 315: + backdrop = 33083; + break; + case 316: + backdrop = 33084; + break; + case 317: + backdrop = 33085; + break; + case (318 || 319): + backdrop = 33086; + break; + default: + break; + } + + packet->setSubstructDataByName("spell_effects", "spell_icon_backdrop", backdrop, i); + spell = info->spell_effects[i].spell; + if (spell) + packet->setSubstructDataByName("spell_effects", "spell_triggercount", spell->num_triggers, i); + i++; + } + ((Entity*)this)->GetSpellEffectMutex()->releasereadlock(__FUNCTION__, __LINE__); + } +} + +void Spawn::MoveToLocation(Spawn* spawn, float distance, bool immediate){ + if(!spawn) + return; + SetRunningTo(spawn); + FaceTarget(spawn); + if(immediate) + ClearRunningLocations(); + AddRunningLocation(spawn->GetX(), spawn->GetY(), spawn->GetZ(), GetSpeed(), distance); +} + +void Spawn::ProcessMovement(){ + if(IsPlayer()){ + //Check if player is riding a boat, if so update pos (boat's current location + XYZ offsets) + Player* player = ((Player*)this); + int32 boat_id = player->GetBoatSpawn(); + Spawn* boat = 0; + if(boat_id > 0) + boat = GetZone()->GetSpawnByID(boat_id); + if(boat){ + SetX(boat->GetX() + player->GetBoatX()); + SetY(boat->GetY() + player->GetBoatY()); + SetZ(boat->GetZ() + player->GetBoatZ()); + } + return; + } + + if (GetHP() <= 0 && !IsWidget()) + return; + + MMovementLoop.lock(); + Spawn* followTarget = GetZone()->GetSpawnByID(m_followTarget); + if (!followTarget && m_followTarget > 0) + m_followTarget = 0; + if (following && followTarget) { + + // Need to clear m_followTarget before the zoneserver deletes it + if (followTarget->GetHP() <= 0) { + followTarget = 0; + MMovementLoop.unlock(); + return; + } + + if (!IsEntity() || (!((Entity*)this)->IsCasting() && !((Entity*)this)->IsMezzedOrStunned() && !((Entity*)this)->IsRooted())) { + if (GetBaseSpeed() > 0) { + CalculateRunningLocation(); + } + else { + float speed = 4.0f; + if (IsEntity()) + speed = ((Entity*)this)->GetMaxSpeed(); + SetSpeed(speed); + } + MovementLocation* loc = GetCurrentRunningLocation(); + if (GetDistance(followTarget, true) <= MAX_COMBAT_RANGE || (loc && loc->x == GetX() && loc->y == GetY() && loc->z == GetZ())) { + ClearRunningLocations(); + CalculateRunningLocation(true); + } + else if (loc) { + float distance = GetDistance(loc->x, loc->y, loc->z, followTarget->GetX(), followTarget->GetY(), followTarget->GetZ()); + if (distance > MAX_COMBAT_RANGE) { + MoveToLocation(followTarget, MAX_COMBAT_RANGE); + CalculateRunningLocation(); + } + } + else { + MoveToLocation(followTarget, MAX_COMBAT_RANGE); + CalculateRunningLocation(); + } + } + } + + // Movement loop is only for scripted paths + else if(!EngagedInCombat() && !NeedsToResumeMovement() && movement_loop.size() > 0 && movement_index < movement_loop.size() && (!IsNPC() || !((NPC*)this)->m_runningBack)){ + // Get the target location + MovementData* data = movement_loop[movement_index]; + // need to resume our movement + if(resume_movement){ + if (movement_locations){ + while (movement_locations->size()){ + safe_delete(movement_locations->front()); + movement_locations->pop_front(); + } + movement_locations->clear(); + } + + data = movement_loop[movement_index]; + SetSpeed(data->speed); + if(!IsWidget()) + FaceTarget(data->x, data->z); + // 0 delay at target location, need to set multiple locations + if(data->delay == 0 && movement_loop.size() > 0) { + int16 tmp_index = movement_index+1; + MovementData* data2 = 0; + if(tmp_index < movement_loop.size()) + data2 = movement_loop[tmp_index]; + else + data2 = movement_loop[0]; + AddRunningLocation(data->x, data->y, data->z, data->speed, 0, true, false); + AddRunningLocation(data2->x, data2->y, data2->z, data2->speed); + } + // delay at target location, only need to set 1 location + else + AddRunningLocation(data->x, data->y, data->z, data->speed); + movement_start_time = 0; + resume_movement = false; + } + // If we are not moving or we have arrived at our destination + else if(!IsRunning() || (data && data->x == GetX() && data->y == GetY() && data->z == GetZ())){ + // If we were moving remove the last running location (the point we just arrived at) + if(IsRunning()) + RemoveRunningLocation(); + + // If this waypoint has a delay and we just arrived here (movement_start_time == 0) + if(data->delay > 0 && movement_start_time == 0){ + // Set the current time + movement_start_time = Timer::GetCurrentTime2(); + // If this waypoint had a lua function then call it + if(data->lua_function.length() > 0) + GetZone()->CallSpawnScript(this, SPAWN_SCRIPT_CUSTOM, 0, data->lua_function.c_str()); + } + // If this waypoint has no delay or we have waited the required time (current time >= delay + movement_start_time) + else if(data->delay == 0 || (data->delay > 0 && Timer::GetCurrentTime2() >= (data->delay+movement_start_time))) { + // if no delay at this waypoint but a lua function for it then call the function + if(data->delay == 0 && data->lua_function.length() > 0) + GetZone()->CallSpawnScript(this, SPAWN_SCRIPT_CUSTOM, 0, data->lua_function.c_str()); + // Advance the current movement loop index + if((int16)(movement_index+1) < movement_loop.size()) + movement_index++; + else + movement_index = 0; + // Get the next target location + data = movement_loop[movement_index]; + // set the speed for that location + SetSpeed(data->speed); + + if(!IsWidget()) + // turn towards the location + FaceTarget(data->x, data->z); + // If 0 delay at location get and set data for the point after it + if(data->delay == 0 && movement_loop.size() > 0){ + while (movement_locations->size()){ + safe_delete(movement_locations->front()); + movement_locations->pop_front(); + } + // clear current target locations + movement_locations->clear(); + // get the data for the location after out new location + int16 tmp_index = movement_index+1; + MovementData* data2 = 0; + if(tmp_index < movement_loop.size()) + data2 = movement_loop[tmp_index]; + else + data2 = movement_loop[0]; + // set the first location (adds it to movement_locations that we just cleared) + AddRunningLocation(data->x, data->y, data->z, data->speed, 0, true, false); + // set the location after that + AddRunningLocation(data2->x, data2->y, data2->z, data2->speed); + } + // there is a delay at the next location so we only need to set it + else + AddRunningLocation(data->x, data->y, data->z, data->speed); + + // reset this timer to 0 now that we are moving again + movement_start_time = 0; + } + } + // moving and not at target location yet + else if(GetBaseSpeed() > 0) + CalculateRunningLocation(); + // not moving, have a target location but not at it yet + else if (data) { + SetSpeed(data->speed); + AddRunningLocation(data->x, data->y, data->z, data->speed); + } + } + else if (IsRunning()) { + CalculateRunningLocation(); + } + else if (IsNPC() && !IsRunning() && !EngagedInCombat() && ((NPC*)this)->GetRunbackLocation()) { + // Is an npc that is not moving and not engaged in combat but has a run back location set then clear the runback location + LogWrite(NPC_AI__DEBUG, 7, "NPC_AI", "Clear runback location for %s", GetName()); + SetPos(&appearance.pos.Dir1, ((NPC*)this)->m_runbackHeading, false); + SetPos(&appearance.pos.Dir2, ((NPC*)this)->m_runbackHeading, true); + ((NPC*)this)->ClearRunback(); + resume_movement = true; + NeedsToResumeMovement(false); + } + MMovementLoop.unlock(); +} + +void Spawn::ResetMovement(){ + MMovementLoop.lock(); + vector::iterator itr; + for(itr = movement_loop.begin(); itr != movement_loop.end(); itr++){ + safe_delete(*itr); + } + MMovementLoop.unlock(); + resume_movement = true; + movement_index = 0; +} + +void Spawn::AddMovementLocation(float x, float y, float z, float speed, int16 delay, const char* lua_function){ + + LogWrite(LUA__DEBUG, 5, "LUA", "AddMovementLocation: x: %.2f, y: %.2f, z: %.2f, speed: %.2f, delay: %i, lua: %s", + x, y, z, speed, delay, string(lua_function).c_str()); + + MovementData* data = new MovementData; + data->x = x; + data->y = y; + data->z = z; + data->speed = speed; + data->delay = delay*1000; + if(lua_function) + data->lua_function = string(lua_function); + MMovementLoop.lock(); + movement_loop.push_back(data); + MMovementLoop.unlock(); +} + +bool Spawn::IsRunning(){ + if(movement_locations && movement_locations->size() > 0) + return true; + else + return false; +} + +void Spawn::RunToLocation(float x, float y, float z, float following_x, float following_y, float following_z){ + if(!IsWidget()) + FaceTarget(x, z); + SetPos(&appearance.pos.X2, x); + SetPos(&appearance.pos.Y2, y); + SetPos(&appearance.pos.Z2, z); + if(following_x == 0 && following_y == 0 && following_z == 0){ + SetPos(&appearance.pos.X3, x); + SetPos(&appearance.pos.Y3, y); + SetPos(&appearance.pos.Z3, z); + } + else{ + SetPos(&appearance.pos.X3, following_x); + SetPos(&appearance.pos.Y3, following_y); + SetPos(&appearance.pos.Z3, following_z); + } +} + +MovementLocation* Spawn::GetCurrentRunningLocation(){ + MovementLocation* ret = 0; + if(movement_locations && movement_locations->size() > 0){ + MMovementLocations->readlock(__FUNCTION__, __LINE__); + ret = movement_locations->front(); + MMovementLocations->releasereadlock(__FUNCTION__, __LINE__); + } + return ret; +} + +MovementLocation* Spawn::GetLastRunningLocation(){ + MovementLocation* ret = 0; + if(movement_locations && movement_locations->size() > 0){ + MMovementLocations->readlock(__FUNCTION__, __LINE__); + ret = movement_locations->back(); + MMovementLocations->releasereadlock(__FUNCTION__, __LINE__); + } + return ret; +} + +void Spawn::AddRunningLocation(float x, float y, float z, float speed, float distance_away, bool attackable, bool finished_adding_locations, string lua_function){ + if(speed == 0) + return; + MovementLocation* current_location = 0; + float distance = GetDistance(x, y, z, distance_away != 0); + if(distance_away != 0){ + distance -= distance_away; + x = x - (GetX() - x)*distance_away/distance; + z = z - (GetZ() - z)*distance_away/distance; + } + if(!movement_locations){ + movement_locations = new deque(); + MMovementLocations = new Mutex(); + } + MovementLocation* data = new MovementLocation; + data->x = x; + data->y = y; + data->z = z; + data->speed = speed; + data->attackable = attackable; + data->lua_function = lua_function; + MMovementLocations->writelock(__FUNCTION__, __LINE__); + if(movement_locations->size() > 0) + current_location = movement_locations->back(); + if(!current_location){ + SetSpawnOrigX(GetX()); + SetSpawnOrigY(GetY()); + SetSpawnOrigZ(GetZ()); + SetSpawnOrigHeading(GetHeading()); + } + movement_locations->push_back(data); + if(finished_adding_locations){ + current_location = movement_locations->front(); + SetSpeed(current_location->speed); + if(movement_locations->size() > 1){ + data = movement_locations->at(1); + RunToLocation(current_location->x, current_location->y, current_location->z, data->x, data->y, data->z); + } + else + RunToLocation(current_location->x, current_location->y, current_location->z, 0, 0, 0); + } + MMovementLocations->releasewritelock(__FUNCTION__, __LINE__); +} + +bool Spawn::RemoveRunningLocation(){ + bool ret = false; + if(movement_locations){ + MMovementLocations->writelock(__FUNCTION__, __LINE__); + if(movement_locations->size() > 0){ + delete movement_locations->front(); + movement_locations->pop_front(); + ret = true; + } + MMovementLocations->releasewritelock(__FUNCTION__, __LINE__); + } + return ret; +} + +void Spawn::ClearRunningLocations(){ + while(RemoveRunningLocation()){} +} + +bool Spawn::CalculateChange(){ + bool remove_needed = false; + if(movement_locations && MMovementLocations){ + MovementLocation* data = 0; + MMovementLocations->readlock(__FUNCTION__, __LINE__); + if(movement_locations->size() > 0){ + // Target location + data = movement_locations->front(); + // If no target or we are at the target location need to remove this point + if(!data || (data->x == GetX() && data->y == GetY() && data->z == GetZ())) + remove_needed = true; + if(data){ + if(NeedsToResumeMovement()){ + resume_movement = true; + NeedsToResumeMovement(false); + } + if(!data->attackable) + SetHeading(GetSpawnOrigHeading()); + } + } + MMovementLocations->releasereadlock(__FUNCTION__, __LINE__); + if(remove_needed) { + if (data && data->lua_function.length() > 0) + GetZone()->CallSpawnScript(this, SPAWN_SCRIPT_CUSTOM, 0, data->lua_function.c_str()); + + RemoveRunningLocation(); + //CalculateChange(); + } + else if(data){ + // Speed is per second so we need a time_step (amount of time since the last update) to modify movement by + float time_step = (Timer::GetCurrentTime2() - last_movement_update) * 0.001; // * 0.001 is the same as / 1000, float muliplications is suppose to be faster though + + // Get current location + float nx = GetX(); + float ny = GetY(); + float nz = GetZ(); + + // Get Forward vecotr + float tar_vx = data->x - nx; + float tar_vy = data->y - ny; + float tar_vz = data->z - nz; + + // Multiply speed by the time_step to get how much should have changed over the last tick + float speed = GetSpeed() * time_step; + + // Normalize the forward vector and multiply by speed, this gives us our change in coords, just need to add them to our current coords + float len = sqrtf(tar_vx * tar_vx + tar_vy * tar_vy + tar_vz * tar_vz); + tar_vx = (tar_vx / len) * speed; + tar_vy = (tar_vy / len) * speed; + tar_vz = (tar_vz / len) * speed; + + // Distance less then 0.5 just set the npc to the target location + if (GetDistance(data->x, data->y, data->z, IsWidget() ? false : true) <= 0.5f) { + SetX(data->x, false); + SetY(data->y, false); + SetZ(data->z, false); + } + else { + SetX(nx + tar_vx, false); + SetY(ny + tar_vy, false); + SetZ(nz + tar_vz, false); + } + + if (GetZone()->Grid != nullptr) { + Cell* newCell = GetZone()->Grid->GetCell(GetX(), GetZ()); + if (newCell != Cell_Info.CurrentCell) { + GetZone()->Grid->RemoveSpawnFromCell(this); + GetZone()->Grid->AddSpawn(this, newCell); + } + + int32 newGrid = GetZone()->Grid->GetGridID(this); + if (newGrid != appearance.pos.grid_id) + SetPos(&(appearance.pos.grid_id), newGrid); + } + } + } + return remove_needed; +} + +void Spawn::CalculateRunningLocation(bool stop){ + bool removed = CalculateChange(); + if(stop) { + //following = false; + SetPos(&appearance.pos.X2, GetX()); + SetPos(&appearance.pos.Y2, GetY()); + SetPos(&appearance.pos.Z2, GetZ()); + SetPos(&appearance.pos.X3, GetX()); + SetPos(&appearance.pos.Y3, GetY()); + SetPos(&appearance.pos.Z3, GetZ()); + } + else if (removed && movement_locations->size() > 0) { + MovementLocation* current_location = movement_locations->at(0); + if (movement_locations->size() > 1) { + MovementLocation* data = movement_locations->at(1); + RunToLocation(current_location->x, current_location->y, current_location->z, data->x, data->y, data->z); + } + else + RunToLocation(current_location->x, current_location->y, current_location->z, 0, 0, 0); + } +} + +void Spawn::FaceTarget(float x, float z){ + float angle; + + double diff_x=x - GetX(); + double diff_z=z - GetZ(); + + if(diff_z==0){ + if(diff_x > 0) + angle = 90; + else + angle = 270; + } + else + angle = ((atan(diff_x / diff_z)) * 180) / 3.14159265358979323846; + + if(angle < 0) + angle = angle + 360; + else + angle = angle + 180; + + if(diff_x < 0) + angle = angle + 180; + + if (last_heading_angle == angle) return; + + SetHeading(angle); +} + +void Spawn::FaceTarget(Spawn* target){ + if(!target) + return; + FaceTarget(target->GetX(), target->GetZ()); + if(GetHP() > 0 && target->IsPlayer() && !EngagedInCombat()){ + GetZone()->AddHeadingTimer(this); + SetTempActionState(0); + } +} + +bool Spawn::MeetsSpawnAccessRequirements(Player* player){ + bool ret = false; + Quest* quest = 0; + //Check if we meet all quest requirements first.. + m_requiredQuests.readlock(__FUNCTION__, __LINE__); + if (player && required_quests.size() > 0) { + map* >::iterator itr; + for (itr = required_quests.begin(); itr != required_quests.end(); itr++) { + player->AddQuestRequiredSpawn(this, itr->first); + vector* quest_steps = itr->second; + for (int32 i = 0; i < quest_steps->size(); i++) { + quest = player->GetQuest(itr->first); + if (req_quests_continued_access) { + if (quest) { + if (quest->GetQuestStepCompleted(quest_steps->at(i))) { + ret = true; + break; + } + } + else if (player->GetCompletedQuest(itr->first)) { + ret = true; + break; + } + } + if (quest && quest->QuestStepIsActive(quest_steps->at(i))) { + ret = true; + break; + } + } + } + } + else + ret = true; + m_requiredQuests.releasereadlock(__FUNCTION__, __LINE__); + if (!ret) + return ret; + + //Now check if the player meets all history requirements + m_requiredHistory.readlock(__FUNCTION__, __LINE__); + if (required_history.size() > 0){ + map::iterator itr; + for (itr = required_history.begin(); itr != required_history.end(); itr++){ + player->AddHistoryRequiredSpawn(this, itr->first); + LUAHistory* player_history = player->GetLUAHistory(itr->first); + if (player_history){ + if (player_history->Value != itr->second.Value || player_history->Value2 != itr->second.Value2) + ret = false; + } + else + ret = false; + if (!ret) + break; + } + } + m_requiredHistory.releasereadlock(__FUNCTION__, __LINE__); + return ret; +} + +vector* Spawn::GetSpawnGroup(){ + vector* ret_list = 0; + if(spawn_group_list){ + ret_list = new vector(); + if(MSpawnGroup) + MSpawnGroup->readlock(__FUNCTION__, __LINE__); + ret_list->insert(ret_list->begin(), spawn_group_list->begin(), spawn_group_list->end()); + if(MSpawnGroup) + MSpawnGroup->releasereadlock(__FUNCTION__, __LINE__); + } + return ret_list; +} + +bool Spawn::HasSpawnGroup() { + return spawn_group_list && spawn_group_list->size() > 0; +} + +bool Spawn::IsInSpawnGroup(Spawn* spawn) { + bool ret = false; + if (HasSpawnGroup() && spawn) { + vector::iterator itr; + for (itr = spawn_group_list->begin(); itr != spawn_group_list->end(); itr++) { + if ((*itr) == spawn) { + ret = true; + break; + } + } + } + return ret; +} + +void Spawn::AddSpawnToGroup(Spawn* spawn){ + if(!spawn) + return; + if(!spawn_group_list){ + spawn_group_list = new vector(); + spawn_group_list->push_back(this); + safe_delete(MSpawnGroup); + MSpawnGroup = new Mutex(); + MSpawnGroup->SetName("Spawn::MSpawnGroup"); + } + vector::iterator itr; + MSpawnGroup->writelock(__FUNCTION__, __LINE__); + for(itr = spawn_group_list->begin(); itr != spawn_group_list->end(); itr++){ + if((*itr) == spawn){ + MSpawnGroup->releasewritelock(__FUNCTION__, __LINE__); + return; + } + } + spawn_group_list->push_back(spawn); + spawn->SetSpawnGroupList(spawn_group_list, MSpawnGroup); + MSpawnGroup->releasewritelock(__FUNCTION__, __LINE__); +} + + +void Spawn::SetSpawnGroupList(vector* list, Mutex* mutex){ + spawn_group_list = list; + MSpawnGroup = mutex; +} + +void Spawn::RemoveSpawnFromGroup(bool erase_all){ + SetSpawnGroupID(0); + bool del = false; + if(MSpawnGroup){ + MSpawnGroup->writelock(__FUNCTION__, __LINE__); + if(spawn_group_list){ + vector::iterator itr; + Spawn* spawn = 0; + if(spawn_group_list->size() == 1) + erase_all = true; + for(itr = spawn_group_list->begin(); itr != spawn_group_list->end(); itr++){ + spawn = *itr; + if (spawn) { + if(!erase_all){ + if(spawn == this){ + spawn_group_list->erase(itr); + MSpawnGroup->releasewritelock(__FUNCTION__, __LINE__); + spawn_group_list = 0; + MSpawnGroup = 0; + return; + } + } + else{ + if (spawn != this) + spawn->SetSpawnGroupList(0, 0); + } + } + } + if (erase_all) + spawn_group_list->clear(); + del = (spawn_group_list->size() == 0); + } + MSpawnGroup->releasewritelock(__FUNCTION__, __LINE__); + if (del){ + safe_delete(MSpawnGroup); + safe_delete(spawn_group_list); + } + } +} + +void Spawn::SetSpawnGroupID(int32 id){ + group_id = id; +} + +int32 Spawn::GetSpawnGroupID(){ + return group_id; +} + +void Spawn::AddChangedZoneSpawn(){ + if(send_spawn_changes && GetZone()) + GetZone()->AddChangedSpawn(this); +} + +void Spawn::RemoveSpawnAccess(Spawn* spawn) { + if (allowed_access.count(spawn->GetID()) > 0) { + allowed_access.erase(spawn->GetID()); + GetZone()->HidePrivateSpawn(this); + } +} + +void Spawn::SetFollowTarget(Spawn* spawn) { + if (spawn && spawn != this) { + m_followTarget = spawn->GetID(); + } + else { + m_followTarget = 0; + if (following) + following = false; + } +} + +void Spawn::AddTempVariable(string var, string val) { + m_tempVariableTypes[var] = 5; + m_tempVariables[var] = val; +} + +void Spawn::AddTempVariable(string var, Spawn* val) { + m_tempVariableTypes[var] = 1; + m_tempVariableSpawn[var] = val->GetID(); +} + +void Spawn::AddTempVariable(string var, ZoneServer* val) { + m_tempVariableTypes[var] = 2; + m_tempVariableZone[var] = val; +} + +void Spawn::AddTempVariable(string var, Item* val) { + m_tempVariableTypes[var] = 3; + m_tempVariableItem[var] = val; +} + +void Spawn::AddTempVariable(string var, Quest* val) { + m_tempVariableTypes[var] = 4; + m_tempVariableQuest[var] = val; +} + +string Spawn::GetTempVariable(string var) { + string ret = ""; + + if (m_tempVariables.count(var) > 0) + ret = m_tempVariables[var]; + + return ret; +} + +Spawn* Spawn::GetTempVariableSpawn(string var) { + Spawn* ret = 0; + + if (m_tempVariableSpawn.count(var) > 0) + ret = GetZone()->GetSpawnByID(m_tempVariableSpawn[var]); + + return ret; +} + +ZoneServer* Spawn::GetTempVariableZone(string var) { + ZoneServer* ret = 0; + + if (m_tempVariableZone.count(var) > 0) + ret = m_tempVariableZone[var]; + + return ret; +} + +Item* Spawn::GetTempVariableItem(string var) { + Item* ret = 0; + + if (m_tempVariableItem.count(var) > 0) + ret = m_tempVariableItem[var]; + + return ret; +} + +Quest* Spawn::GetTempVariableQuest(string var) { + Quest* ret = 0; + + if (m_tempVariableQuest.count(var) > 0) + ret = m_tempVariableQuest[var]; + + return ret; +} + +int8 Spawn::GetTempVariableType(string var) { + int8 ret = 0; + + if (m_tempVariableTypes.count(var) > 0) + ret = m_tempVariableTypes[var]; + + return ret; +} + +void Spawn::DeleteTempVariable(string var) { + int8 type = GetTempVariableType(var); + + switch (type) { + case 1: + m_tempVariableSpawn.erase(var); + break; + case 2: + m_tempVariableZone.erase(var); + break; + case 3: + m_tempVariableItem.erase(var); + break; + case 4: + m_tempVariableQuest.erase(var); + break; + case 5: + m_tempVariables.erase(var); + break; + } + + m_tempVariableTypes.erase(var); +} + +Spawn* Spawn::GetRunningTo() { + return GetZone()->GetSpawnByID(running_to); +} + +Spawn* Spawn::GetFollowTarget() { + return GetZone()->GetSpawnByID(m_followTarget); +} + +void Spawn::CopySpawnAppearance(Spawn* spawn){ + if (!spawn) + return; + + //This function copies the appearace of the provided spawn to this one + if (spawn->IsEntity() && IsEntity()){ + memcpy(&((Entity*)this)->features, &((Entity*)spawn)->features, sizeof(CharFeatures)); + memcpy(&((Entity*)this)->equipment, &((Entity*)spawn)->equipment, sizeof(EQ2_Equipment)); + } + + SetSize(spawn->GetSize()); + SetModelType(spawn->GetModelType()); +} \ No newline at end of file diff --git a/EQ2/source/WorldServer/Spawn.h b/EQ2/source/WorldServer/Spawn.h new file mode 100644 index 000000000..7c36dec13 --- /dev/null +++ b/EQ2/source/WorldServer/Spawn.h @@ -0,0 +1,1020 @@ +/* + EQ2Emulator: Everquest II Server Emulator + Copyright (C) 2007 EQ2EMulator Development Team (http://www.eq2emulator.net) + + This file is part of EQ2Emulator. + + EQ2Emulator is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + EQ2Emulator is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with EQ2Emulator. If not, see . +*/ +#ifndef __EQ2_SPAWN__ +#define __EQ2_SPAWN__ + +#include "../common/types.h" +#include "../common/EQPacket.h" +#include "../common/EQ2_Common_Structs.h" +#include "../common/MiscFunctions.h" +#include "../common/opcodemgr.h" +#include "../common/timer.h" +#include "Commands/Commands.h" +#include "SpawnLists.h" +#include +#include "../common/ConfigReader.h" +#include "Items/Items.h" +#include "../common/Mutex.h" +#include + +#define DAMAGE_PACKET_TYPE_SIPHON_SPELL 0x41 +#define DAMAGE_PACKET_TYPE_SIPHON_SPELL2 0x49 +#define DAMAGE_PACKET_TYPE_MULTIPLE_DAMAGE 0x80 +#define DAMAGE_PACKET_TYPE_SIMPLE_DAMAGE 0xC0 +#define DAMAGE_PACKET_TYPE_SPELL_DAMAGE 0xC1 +#define DAMAGE_PACKET_TYPE_SIMPLE_CRIT_DMG 0xC4 +#define DAMAGE_PACKET_TYPE_SPELL_CRIT_DMG 0xC5 +#define DAMAGE_PACKET_TYPE_SPELL_DAMAGE2 0xC8 +#define DAMAGE_PACKET_TYPE_SPELL_DAMAGE3 0xC9 +#define DAMAGE_PACKET_TYPE_RANGE_DAMAGE 0xE2 +#define DAMAGE_PACKET_TYPE_RANGE_SPELL_DMG 0xE3 +#define DAMAGE_PACKET_TYPE_RANGE_SPELL_DMG2 0xEA + +#define DAMAGE_PACKET_RESULT_NO_DAMAGE 0 +#define DAMAGE_PACKET_RESULT_SUCCESSFUL 1 +#define DAMAGE_PACKET_RESULT_MISS 4 +#define DAMAGE_PACKET_RESULT_DODGE 8 +#define DAMAGE_PACKET_RESULT_PARRY 12 +#define DAMAGE_PACKET_RESULT_RIPOSTE 16 +#define DAMAGE_PACKET_RESULT_BLOCK 20 +#define DAMAGE_PACKET_RESULT_DEATH_BLOW 24 +#define DAMAGE_PACKET_RESULT_INVULNERABLE 28 +#define DAMAGE_PACKET_RESULT_RESIST 36 +#define DAMAGE_PACKET_RESULT_REFLECT 40 +#define DAMAGE_PACKET_RESULT_IMMUNE 44 +#define DAMAGE_PACKET_RESULT_DEFLECT 48 +#define DAMAGE_PACKET_RESULT_COUNTER 52 +#define DAMAGE_PACKET_RESULT_COUNTER_STRIKE 60 +#define DAMAGE_PACKET_RESULT_BASH 64 + +#define DAMAGE_PACKET_DAMAGE_TYPE_SLASH 0 +#define DAMAGE_PACKET_DAMAGE_TYPE_CRUSH 1 +#define DAMAGE_PACKET_DAMAGE_TYPE_PIERCE 2 +#define DAMAGE_PACKET_DAMAGE_TYPE_HEAT 3 +#define DAMAGE_PACKET_DAMAGE_TYPE_COLD 4 +#define DAMAGE_PACKET_DAMAGE_TYPE_MAGIC 5 +#define DAMAGE_PACKET_DAMAGE_TYPE_MENTAL 6 +#define DAMAGE_PACKET_DAMAGE_TYPE_DIVINE 7 +#define DAMAGE_PACKET_DAMAGE_TYPE_DISEASE 8 +#define DAMAGE_PACKET_DAMAGE_TYPE_POISON 9 +#define DAMAGE_PACKET_DAMAGE_TYPE_DROWN 10 +#define DAMAGE_PACKET_DAMAGE_TYPE_FALLING 11 +#define DAMAGE_PACKET_DAMAGE_TYPE_PAIN 12 + +#define HEAL_PACKET_TYPE_SIMPLE_HEAL 0 +#define HEAL_PACKET_TYPE_CRIT_HEAL 1 +#define HEAL_PACKET_TYPE_ABSORB 2 +#define HEAL_PACKET_TYPE_REGEN_ABSORB 4 +#define HEAL_PACKET_TYPE_SIMPLE_MANA 8 +#define HEAL_PACKET_TYPE_CRIT_MANA 9 +#define HEAL_PACKET_TYPE_SAVAGERY 16 +#define HEAL_PACKET_TYPE_CRIT_SAVAGERY 17 +#define HEAL_PACKET_TYPE_REPAIR 64 +#define HEAL_PACKET_TYPE_CRIT_REPAIR 65 + +#define ARROW_COLOR_GRAY 0 // 3 +#define ARROW_COLOR_GREEN 1 // 1 +#define ARROW_COLOR_BLUE 2 +#define ARROW_COLOR_WHITE 3 // 3 +#define ARROW_COLOR_YELLOW 4 // 4 +#define ARROW_COLOR_ORANGE 5 // 5 +#define ARROW_COLOR_RED 6 + +#define ACTIVITY_STATUS_ROLEPLAYING 1 +#define ACTIVITY_STATUS_ANONYMOUS 2 +#define ACTIVITY_STATUS_LINKDEAD 4 +#define ACTIVITY_STATUS_CAMPING 8 +#define ACTIVITY_STATUS_LFG 16 +#define ACTIVITY_STATUS_LFW 32 +#define ACTIVITY_STATUS_SOLID 64 //used by zone objects to remain solid +#define ACTIVITY_STATUS_IMMUNITY_GAINED 8192 +#define ACTIVITY_STATUS_IMMUNITY_REMAINING 16384 + +#define ACTIVITY_STATUS_AFK_1188 1 +#define ACTIVITY_STATUS_ROLEPLAYING_1188 2 +#define ACTIVITY_STATUS_ANONYMOUS_1188 4 +#define ACTIVITY_STATUS_LINKDEAD_1188 8 +#define ACTIVITY_STATUS_CAMPING_1188 16 +#define ACTIVITY_STATUS_LFG_1188 32 +#define ACTIVITY_STATUS_LFW_1188 64 +#define ACTIVITY_STATUS_SOLID_1188 128 //used by zone objects to remain solid +#define ACTIVITY_STATUS_MENTORING_1188 4096 +#define ACTIVITY_STATUS_IMMUNITY_GAINED_1188 16384 +#define ACTIVITY_STATUS_IMMUNITY_REMAINING_1188 32768 + +#define POS_STATE_KNEELING 64 +#define POS_STATE_SOLID 128 //used by most mobs to remaind solid (cant walk through them) +#define POS_STATE_NOTARGET_CURSOR 256 //cant target and no cursor is displayed +#define POS_STATE_CROUCHING 512 + +#define MERCHANT_TYPE_NO_BUY 1 +#define MERCHANT_TYPE_NO_BUY_BACK 2 +#define MERCHANT_TYPE_SPELLS 4 +#define MERCHANT_TYPE_CRAFTING 8 +#define MERCHANT_TYPE_REPAIR 16 +#define MERCHANT_TYPE_LOTTO 32 + +#define INFO_VIS_FLAG_INVIS 1 +#define INFO_VIS_FLAG_HIDE_HOOD 2 +#define INFO_VIS_FLAG_MOUNTED 4 +#define INFO_VIS_FLAG_CROUCH 8 + +using namespace std; +class Spell; +class ZoneServer; +class Quest; +struct LUAHistory; +struct Cell; + +struct CellInfo { + Cell* CurrentCell; + int CellListIndex; +}; + +struct MovementData{ + float x; + float y; + float z; + float speed; + int32 delay; + string lua_function; +}; + +struct BasicInfoStruct{ + sint32 cur_hp; + sint32 max_hp; + sint32 hp_base; + sint32 cur_power; + sint32 max_power; + sint32 power_base; + sint32 cur_savagery; + sint32 max_savagery; + sint32 savagery_base; + sint32 cur_dissonance; + sint32 max_dissonance; + sint32 dissonance_base; + sint16 assigned_aa; + sint16 unassigned_aa; + sint16 tradeskill_aa; + sint16 unassigned_tradeskill_aa; + sint16 prestige_aa; + sint16 unassigned_prestige_aa; + sint16 tradeskill_prestige_aa; + sint16 unassigned_tradeskill_prestige_aa; +}; + +struct MovementLocation{ + float x; + float y; + float z; + float speed; + //int32 start_time; + //int32 end_time; + bool attackable; + string lua_function; +}; + +class Spawn { +public: + Spawn(); + virtual ~Spawn(); + + template void Set(Field* field, Value value, bool setUpdateFlags = true){ + if (setUpdateFlags) { + changed = true; + AddChangedZoneSpawn(); + } + *field = value; + } + template void Set(Field* field, const char* value, bool setUpdateFlags = true){ + if (setUpdateFlags) { + changed = true; + AddChangedZoneSpawn(); + } + strcpy(field, value); + } + template void SetPos(Field* field, Value value, bool setUpdateFlags = true){ + if(setUpdateFlags){ + position_changed = true; + } + Set(field, value, setUpdateFlags); + } + template void SetInfo(Field* field, Value value, bool setUpdateFlags = true){ + if(setUpdateFlags){ + info_changed = true; + } + Set(field, value); + } + template void SetVis(Field* field, Value value, bool setUpdateFlags = true){ + if(setUpdateFlags) + vis_changed = true; + Set(field, value); + } + template void SetPos(Field* field, char* value, bool setUpdateFlags = true){ + if(setUpdateFlags){ + position_changed = true; + } + Set(field, value, setUpdateFlags); + } + template void SetInfo(Field* field, char* value, bool setUpdateFlags = true){ + if(setUpdateFlags){ + info_changed = true; + } + Set(field, value); + } + EntityCommand* CreateEntityCommand(EntityCommand* old_command){ + EntityCommand* entity_command = new EntityCommand; + entity_command->name = old_command->name; + entity_command->distance = old_command->distance; + entity_command->command = old_command->command; + entity_command->error_text = old_command->error_text; + entity_command->cast_time = old_command->cast_time; + entity_command->spell_visual = old_command->spell_visual; + return entity_command; + } + EntityCommand* CreateEntityCommand(const char* name, float distance, const char* command, const char* error_text, int16 cast_time, int32 spell_visual){ + EntityCommand* entity_command = new EntityCommand; + entity_command->name = name; + entity_command->distance = distance; + entity_command->command = command; + entity_command->error_text = error_text; + entity_command->cast_time = cast_time; + entity_command->spell_visual = spell_visual; + return entity_command; + } + void AddChangedZoneSpawn(); + void AddPrimaryEntityCommand(const char* name, float distance, const char* command, const char* error_text, int16 cast_time, int32 spell_visual){ + primary_command_list.push_back(CreateEntityCommand(name, distance, command, error_text, cast_time, spell_visual)); + } + void AddSecondaryEntityCommand(const char* name, float distance, const char* command, const char* error_text, int16 cast_time, int32 spell_visual){ + secondary_command_list.push_back(CreateEntityCommand(name, distance, command, error_text, cast_time, spell_visual)); + } + int8 GetLockedNoLoot(){ + return appearance.locked_no_loot; + } + int16 GetEmoteState(){ + return appearance.emote_state; + } + int8 GetHideHood(){ + return appearance.hide_hood; + } + void SetLockedNoLoot(int8 new_val, bool updateFlags = true){ + SetVis(&appearance.locked_no_loot, new_val, updateFlags); + } + void SetHandFlag(int8 new_val, bool updateFlags = true){ + SetVis(&appearance.display_hand_icon, new_val, updateFlags); + } + void SetHideHood(int8 new_val, bool updateFlags = true){ + SetInfo(&appearance.hide_hood, new_val, updateFlags); + } + void SetEmoteState(int8 new_val, bool updateFlags = true){ + SetInfo(&appearance.emote_state, new_val, updateFlags); + } + void SetName(const char* new_name, bool updateFlags = true){ + SetInfo(appearance.name, new_name, updateFlags); + } + void SetPrefixTitle(const char* new_prefix_title, bool updateFlags = true) { + SetInfo(appearance.prefix_title, new_prefix_title, updateFlags); + } + void SetSuffixTitle(const char* new_suffix_title, bool updateFlags = true) { + SetInfo(appearance.suffix_title, new_suffix_title, updateFlags); + } + void SetSubTitle(const char* new_sub_title, bool updateFlags = true) { + SetInfo(appearance.sub_title, new_sub_title, updateFlags); + } + void SetLastName(const char* new_last_name, bool updateFlags = true) { + SetInfo(appearance.last_name, new_last_name, updateFlags); + } + void SetAdventureClass(int8 new_class, bool updateFlags = true) { + SetInfo(&appearance.adventure_class, new_class, updateFlags); + } + void SetTradeskillClass(int8 new_class, bool updateFlags = true) { + SetInfo(&appearance.tradeskill_class, new_class, updateFlags); + } + void SetSize(int16 new_size, bool updateFlags = true) { + SetPos(&size, new_size, updateFlags); + } + void SetSpeedX(float speed_x, bool updateFlags = true) { + SetPos(&appearance.pos.SpeedX, speed_x, updateFlags); + } + void SetSpeedY(float speed_y, bool updateFlags = true) { + SetPos(&appearance.pos.SpeedY, speed_y, updateFlags); + } + void SetSpeedZ(float speed_z, bool updateFlags = true) { + SetPos(&appearance.pos.SpeedZ, speed_z, updateFlags); + } + void SetX(float x, bool updateFlags = true){ + SetPos(&appearance.pos.X, x, updateFlags); + } + void SetY(float y, bool updateFlags = true){ + SetPos(&appearance.pos.Y, y, updateFlags); + } + void SetZ(float z, bool updateFlags = true){ + SetPos(&appearance.pos.Z, z, updateFlags); + } + void SetHeading(sint16 dir1, sint16 dir2, bool updateFlags = true){ + SetPos(&appearance.pos.Dir1, dir1, updateFlags); + SetPos(&appearance.pos.Dir2, dir2, updateFlags); + } + void SetHeading(float heading, bool updateFlags = true){ + last_heading_angle = heading; + if (heading != 180) + heading = (heading - 180) * 64; + SetPos(&appearance.pos.Dir1, (sint16)heading, updateFlags); + SetPos(&appearance.pos.Dir2, (sint16)heading, updateFlags); + } + void SetPitch(sint16 pitch1, sint16 pitch2, bool updateFlags = true){ + SetPos(&appearance.pos.Pitch1, (sint16)pitch1, updateFlags); + SetPos(&appearance.pos.Pitch2, (sint16)pitch2, updateFlags); + } + void SetPitch(float pitch, bool updateFlags = true){ + if (pitch == 0){ + SetPos(&appearance.pos.Pitch1, (sint16)0, updateFlags); + SetPos(&appearance.pos.Pitch2, (sint16)0, updateFlags); + return; + } + if (pitch != 180) + pitch = (pitch - 180) * 64; + SetPos(&appearance.pos.Pitch1, (sint16)pitch, updateFlags); + SetPos(&appearance.pos.Pitch2, (sint16)pitch, updateFlags); + } + void SetRoll(float roll, bool updateFlags = true){ + if (roll == 0){ + SetPos(&appearance.pos.Roll, (sint16)0, updateFlags); + return; + } + else if (roll != 180) + roll = (roll - 180) * 64; + SetPos(&appearance.pos.Roll, (sint16)roll, updateFlags); + } + void SetVisualState(int16 state, bool updateFlags = true){ + SetInfo(&appearance.visual_state, state, updateFlags); + } + void SetActionState(int16 state, bool updateFlags = true){ + SetInfo(&appearance.action_state, state, updateFlags); + } + void SetMoodState(int16 state, bool updateFlags = true){ + SetInfo(&appearance.mood_state, state, updateFlags); + } + void SetInitialState(int16 state, bool updateFlags = true){ + SetPos(&appearance.pos.state, state, updateFlags); + } + void SetActivityStatus(int16 state, bool updateFlags = true){ + SetInfo(&appearance.activity_status, state, updateFlags); + } + void SetCollisionRadius(int32 radius, bool updateFlags = true){ + SetPos(&appearance.pos.collision_radius, radius, updateFlags); + } + int16 GetCollisionRadius(){ + return appearance.pos.collision_radius; + } + int16 GetVisualState(){ + return appearance.visual_state; + } + int16 GetActionState(){ + return appearance.action_state; + } + int16 GetMoodState(){ + return appearance.mood_state; + } + int16 GetInitialState(){ + return appearance.pos.state; + } + int16 GetActivityStatus(){ + return appearance.activity_status; + } + int32 GetPrimaryCommandListID(){ + return primary_command_list_id; + } + int32 GetSecondaryCommandListID(){ + return secondary_command_list_id; + } + void SetID(int32 in_id){ + Set(&id, in_id); + } + void SetEncounterLevel(int8 enc_level, bool setUpdateFlags = true){ + SetInfo(&appearance.encounter_level, enc_level, setUpdateFlags); + } + void SetLevel(int16 level, bool setUpdateFlags = true){ + SetInfo(&appearance.level, level, setUpdateFlags); + } + void SetTSLevel(int16 tradeskill_level, bool setUpdateFlags = true){ + SetInfo(&appearance.tradeskill_level, tradeskill_level, setUpdateFlags); + } + void SetGender(int8 gender, bool setUpdateFlags = true){ + SetInfo(&appearance.gender, gender, setUpdateFlags); + } + void SetShowName(int8 new_val, bool setUpdateFlags = true){ + SetVis(&appearance.display_name, new_val, setUpdateFlags); + } + void SetShowLevel(int8 new_val, bool setUpdateFlags = true){ + SetVis(&appearance.show_level, new_val, setUpdateFlags); + } + void SetHeroic(int8 new_val, bool setUpdateFlags = true){ + SetInfo(&appearance.heroic_flag, new_val, setUpdateFlags); + } + void SetTargetable(int8 new_val, bool setUpdateFlags = true){ + SetVis(&appearance.targetable, new_val, setUpdateFlags); + } + void SetShowCommandIcon(int8 new_val, bool setUpdateFlags = true){ + SetVis(&appearance.show_command_icon, new_val, setUpdateFlags); + } + void SetShowHandIcon(int8 new_val, bool setUpdateFlags = true){ + SetVis(&appearance.display_hand_icon, new_val, setUpdateFlags); + } + void SetAttackable(int8 new_val, bool setUpdateFlags = true){ + SetInfo(&appearance.attackable, new_val, setUpdateFlags); + } + void SetLocation(int32 id, bool setUpdateFlags = true){ + SetPos(&appearance.pos.grid_id, id, setUpdateFlags); + } + void SetRace(int8 race, bool setUpdateFlags = true){ + SetInfo(&appearance.race, race, setUpdateFlags); + } + void SetIcon(int8 icon, bool setUpdateFlags = true){ + SetInfo(&appearance.icon, icon, setUpdateFlags); + } + void AddIconValue(int8 val){ + if(!(appearance.icon & val)) + SetIcon(appearance.icon+val); + } + void RemoveIconValue(int8 val){ + if((appearance.icon & val)) + SetIcon(appearance.icon-val); + } + int8 GetIconValue(){ + return appearance.icon; + } + virtual void SetSpeed(float speed){ + SetPos(&appearance.pos.Speed1, (int8)speed); + } + virtual float GetSpeed(){ + return (float)appearance.pos.Speed1; + } + virtual float GetBaseSpeed(){ + return (float)appearance.pos.Speed1; + } + void SetSpawnType(int8 new_type){ + SetInfo(&spawn_type, new_type); + } + int8 GetSpawnType(){ + return spawn_type; + } + void SetDatabaseID(int32 new_id){ + database_id = new_id; + } + int32 GetDatabaseID(){ + return database_id; + } + int8 GetShowHandIcon(){ + return appearance.display_hand_icon; + } + int32 GetLocation(){ + return appearance.pos.grid_id; + } + int8 GetAttackable(){ + return appearance.attackable; + } + int8 GetShowName(){ + return appearance.display_name; + } + int8 GetShowLevel(){ + return appearance.show_level; + } + int8 GetHeroic(){ + return appearance.heroic_flag; + } + int8 GetTargetable(){ + return appearance.targetable; + } + int8 GetShowCommandIcon(){ + return appearance.show_command_icon; + } + char* GetName(){ + return appearance.name; + } + char* GetPrefixTitle(){ + return appearance.prefix_title; + } + char* GetSuffixTitle(){ + return appearance.suffix_title; + } + char* GetSubTitle() { + return appearance.sub_title; + } + char* GetLastName() { + return appearance.last_name; + } + int8 GetAdventureClass() { + return appearance.adventure_class; + } + int8 GetTradeskillClass() { + return appearance.tradeskill_class; + } + float GetDestinationX(){ + return appearance.pos.X2; + } + float GetX() { + return appearance.pos.X; + } + float GetSpeedX() { + return appearance.pos.SpeedX; + } + float GetSpeedY() { + return appearance.pos.SpeedY; + } + float GetSpeedZ() { + return appearance.pos.SpeedZ; + } + float GetDestinationY(){ + return appearance.pos.Y2; + } + float GetY(){ + return appearance.pos.Y; + } + float GetDestinationZ(){ + return appearance.pos.Z2; + } + float GetZ(){ + return appearance.pos.Z; + } + float GetHeading(){ + float heading = 0; + if(appearance.pos.Dir1 != 0){ + heading = ((float)appearance.pos.Dir1)/((float)64); + if(heading >= 180) + heading -= 180; + else + heading += 180; + } + return heading; + } + float GetPitch(){ + float pitch = 0; + if(appearance.pos.Pitch1 != 0){ + pitch = ((float)appearance.pos.Pitch1)/((float)64); + if(pitch >= 180) + pitch -= 180; + else + pitch += 180; + } + return pitch; + } + float GetRoll(){ + float roll = 0; + if(appearance.pos.Roll != 0){ + roll = ((float)appearance.pos.Roll)/((float)64); + if(roll >= 180) + roll -= 180; + else + roll += 180; + } + return roll; + } + int32 GetID(){ + return id; + } + float GetDistance(Spawn* spawn, bool ignore_y = false); + float GetDistance(float x, float y, float z, bool ignore_y = false); + float GetDistance(float x1, float y1, float z1, float x2, float y2, float z2); + int8 GetEncounterLevel(){ + return appearance.encounter_level; + } + sint32 GetTotalPower(); + sint32 GetPower(); + sint32 GetTotalHP(); + sint32 GetHP(); + sint32 GetTotalHPBase(); + sint32 GetTotalPowerBase(); + + sint32 GetTotalSavagery(); + sint32 GetSavagery(); + sint32 GetTotalDissonance(); + sint32 GetDissonance(); + sint32 GetTotalSavageryBase(); + sint32 GetTotalDissonanceBase(); + sint16 GetAssignedAA(); + sint16 GetUnassignedAA(); + sint16 GetTradeskillAA(); + sint16 GetUnassignedTradeskillAA(); + sint16 GetPrestigeAA(); + sint16 GetUnassignedPretigeAA(); + sint16 GetTradeskillPrestigeAA(); + sint16 GetUnassignedTradeskillPrestigeAA(); + + void SetTotalPower(sint32 new_val); + void SetTotalHP(sint32 new_val); + void SetTotalSavagery(sint32 new_val); + void SetTotalDissonance(sint32 new_val); + void SetTotalPowerBase(sint32 new_val); + void SetTotalHPBase(sint32 new_val); + void SetTotalSavageryBase(sint32 new_val); + void SetTotalDissonanceBase(sint32 new_val); + void SetPower(sint32 power, bool setUpdateFlags = true); + void SetHP(sint32 new_val, bool setUpdateFlags = true); + void SetSavagery(sint32 savagery, bool setUpdateFlags = true); + void SetDissonance(sint32 dissonance, bool setUpdateFlags = true); + void SetAssignedAA(sint16 new_val); + void SetUnassignedAA(sint16 new_val); + void SetTradeskillAA(sint16 new_val); + void SetUnassignedTradeskillAA(sint16 new_val); + void SetPrestigeAA(sint16 new_val); + void SetUnassignedPrestigeAA(sint16 new_val); + void SetTradeskillPrestigeAA(sint16 new_val); + void SetUnassignedTradeskillPrestigeAA(sint16 new_val); + void SetPrivateQuestSpawn(bool val) {req_quests_private = val;} + void SetQuestsRequiredOverride(int16 val) {req_quests_override = val;} + void SetQuestsRequiredContinuedAccess(bool val) {req_quests_continued_access = val;} + bool GetPrivateQuestSpawn() {return req_quests_private;} + int16 GetQuestsRequiredOverride() {return req_quests_override;} + bool GetQuestsRequiredContinuedAccess() {return req_quests_continued_access;} + + bool Alive(){ return GetHP() > 0; } + int16 GetLevel(){ + return appearance.level; + } + int16 GetTSLevel(){ + return appearance.tradeskill_level; + } + int8 GetGender(){ + return appearance.gender; + } + int8 GetRace(){ + return appearance.race; + } + int8 GetLuaRaceId() { + return appearance.lua_race_id; + } + int32 GetSize(){ + return size; + } + int32 GetDeviation(){ + return deviation; + } + void SetDeviation(int32 in_dev){ + deviation = in_dev; + } + float GetSpawnOrigHeading(){ + return appearance.pos.SpawnOrigHeading; + } + void SetSpawnOrigHeading(float val){ + appearance.pos.SpawnOrigHeading = val; + } + float GetSpawnOrigX(){ + return appearance.pos.SpawnOrigX; + } + float GetSpawnOrigY(){ + return appearance.pos.SpawnOrigY; + } + float GetSpawnOrigZ(){ + return appearance.pos.SpawnOrigZ; + } + float GetSpawnOrigPitch(){ + return appearance.pos.SpawnOrigPitch; + } + float GetSpawnOrigRoll(){ + return appearance.pos.SpawnOrigRoll; + } + void SetSpawnOrigX(float val){ + appearance.pos.SpawnOrigX = val; + } + void SetSpawnOrigY(float val){ + appearance.pos.SpawnOrigY = val; + } + void SetSpawnOrigZ(float val){ + appearance.pos.SpawnOrigZ = val; + } + void SetSpawnOrigRoll(float val){ + appearance.pos.SpawnOrigRoll = val; + } + void SetSpawnOrigPitch(float val){ + appearance.pos.SpawnOrigPitch = val; + } + void SetSogaModelType(int16 new_val, bool setUpdateFlags = true){ + SetInfo(&appearance.soga_model_type, new_val, setUpdateFlags); + } + void SetModelType(int16 model_type, bool setUpdateFlags = true){ + SetInfo(&appearance.model_type, model_type, setUpdateFlags); + SetInfo(&appearance.soga_model_type, model_type, setUpdateFlags); + } + int16 GetSogaModelType(){ + return appearance.soga_model_type; + } + int16 GetModelType(){ + return appearance.model_type; + } + void SetPrimaryCommand(const char* name, const char* command, float distance = 10); + void SetPrimaryCommands(vector* commands); + void SetSecondaryCommands(vector* commands); + vector* GetPrimaryCommands() {return &primary_command_list;} + vector* GetSecondaryCommands() {return &secondary_command_list;} + EntityCommand* FindEntityCommand(string command); + virtual EQ2Packet* serialize(Player* player, int16 version); + EQ2Packet* spawn_serialize(Player* player, int16 version); + EQ2Packet* spawn_update_packet(Player* player, int16 version, bool override_changes = false, bool override_vis_changes = false); + EQ2Packet* player_position_update_packet(Player* player, int16 version); + uchar* spawn_info_changes(Player* spawn, int16 version); + uchar* spawn_pos_changes(Player* spawn, int16 version); + uchar* spawn_vis_changes(Player* spawn, int16 version); + + virtual bool EngagedInCombat(){ return false; } + virtual bool IsObject(){ return false; } + virtual bool IsGroundSpawn(){ return false; } + virtual bool IsNPC(){ return false; } + virtual bool IsEntity(){ return false; } + virtual bool IsPlayer(){ return false; } + virtual bool IsWidget(){ return false; } + virtual bool IsSign(){ return false; } + virtual bool IsBot() { return false; } + + bool HasInfoChanged(){ return info_changed; } + bool HasPositionChanged(){ return position_changed; } + bool HasTarget(){ return target ? true : false; } + + int32 GetRespawnTime(); + void SetRespawnTime(int32 time); + int32 GetExpireTime() { return expire_time; } + void SetExpireTime(int32 new_expire_time) { expire_time = new_expire_time; } + int32 GetExpireOffsetTime(); + void SetExpireOffsetTime(int32 time); + int32 GetSpawnLocationID(); + void SetSpawnLocationID(int32 id); + int32 GetSpawnEntryID(); + void SetSpawnEntryID(int32 id); + int32 GetSpawnLocationPlacementID(); + void SetSpawnLocationPlacementID(int32 id); + float GetXOffset() { return x_offset; } + void SetXOffset(float new_x_offset) { x_offset = new_x_offset; } + float GetYOffset() { return y_offset; } + void SetYOffset(float new_y_offset) { y_offset = new_y_offset; } + float GetZOffset() { return z_offset; } + void SetZOffset(float new_z_offset) { z_offset = new_z_offset; } + + Spawn* GetTarget(); + void SetTarget(Spawn* spawn); + Spawn* GetLastAttacker(); + void SetLastAttacker(Spawn* spawn); + bool TakeDamage(int32 damage); + void TakeDamage(Spawn* attacker, int32 damage); + ZoneServer* GetZone(); + virtual void SetZone(ZoneServer* in_zone); + void SetFactionID(int32 val) { faction_id = val; } + int32 GetFactionID(){ + return faction_id; + } + static int32 NextID() { + static CriticalSection id_lock; + id_lock.lock(); + int32 ret = ++next_id; + if (next_id == 0xFFFFFFFE) + next_id = 1; + else if ((next_id - 255) % 256 == 0) { //we dont want it to end in 255, it will confuse/crash the client + id_lock.unlock(); + return NextID(); + } + + id_lock.unlock(); + return ret; + } + void AddProvidedQuest(int32 val){ + quest_ids.push_back(val); + } + vector* GetProvidedQuests(){ + return &quest_ids; + } + bool HasProvidedQuests(){ + return (quest_ids.size() > 0); + } + void SetSpawnScript(string name); + const char* GetSpawnScript(); + + vector* GetSpawnGroup(); + bool HasSpawnGroup(); + bool IsInSpawnGroup(Spawn* spawn); + void SendSpawnChanges(bool val){ send_spawn_changes = val; } + void SetSpawnGroupID(int32 id); + int32 GetSpawnGroupID(); + void AddSpawnToGroup(Spawn* spawn); + void SetSpawnGroupList(vector* list, Mutex* mutex); + void RemoveSpawnFromGroup(bool erase_all = false); + + void SetRunningTo(Spawn* spawn){ running_to = spawn->GetID(); } + Spawn* GetRunningTo(); + void SetTempVisualState(int val, bool update = true) { SetInfo(&tmp_visual_state, val, update); } + int GetTempVisualState(){ return tmp_visual_state; } + void SetTempActionState(int val, bool update = true) { SetInfo(&tmp_action_state, val, update); } + int GetTempActionState(){ return tmp_action_state; } + void AddAllowAccessSpawn(Spawn* spawn){ allowed_access[spawn->GetID()] = 1; } + void RemoveSpawnAccess(Spawn* spawn); + bool IsPrivateSpawn(){ return allowed_access.size() > 0 ;} + bool AllowedAccess(Spawn* spawn){ return allowed_access.count(spawn->GetID()) > 0; } + void MakeSpawnPublic() { allowed_access.clear(); } + void SetSizeOffset(int8 offset); + int8 GetSizeOffset(); + void SetMerchantID(int32 val); + int32 GetMerchantID(); + void SetMerchantType(int8 val); + int8 GetMerchantType(); + void SetQuestsRequired(map* >* quests); + void SetQuestsRequired(int32 quest_id, int16 quest_step); + void SetRequiredHistory(int32 event_id, int32 value1, int32 value2); + map* >* GetQuestsRequired(); + void SetTransporterID(int32 id); + int32 GetTransporterID(); + bool MeetsSpawnAccessRequirements(Player* player); + + void InitializePosPacketData(Player* player, PacketStruct* packet); + void InitializeInfoPacketData(Player* player, PacketStruct* packet); + void InitializeVisPacketData(Player* player, PacketStruct* packet); + void InitializeHeaderPacketData(Player* player, PacketStruct* packet, int16 index); + void InitializeFooterPacketData(Player* player, PacketStruct* packet); + + void MoveToLocation(Spawn* spawn, float distance, bool immediate = true); + void AddMovementLocation(float x, float y, float z, float speed, int16 delay, const char* lua_function); + void ProcessMovement(); + void ResetMovement(); + bool IsRunning(); + void CalculateRunningLocation(bool stop = false); + void RunToLocation(float x, float y, float z, float following_x = 0, float following_y = 0, float following_z = 0); + + MovementLocation* GetCurrentRunningLocation(); + MovementLocation* GetLastRunningLocation(); + bool CalculateChange(); + void AddRunningLocation(float x, float y, float z, float speed, float distance_away = 0, bool attackable = true, bool finished_adding_locations = true, string lua_function = ""); + bool RemoveRunningLocation(); + void ClearRunningLocations(); + + void CopySpawnAppearance(Spawn* spawn); + + bool MovementInterrupted(){ return movement_interrupted; } + void MovementInterrupted(bool val) { movement_interrupted = val; } + bool NeedsToResumeMovement(){ return attack_resume_needed; } + void NeedsToResumeMovement(bool val) { attack_resume_needed = val; } + bool HasMovementLoop(){ return movement_loop.size() > 0; } + Timer* GetRunningTimer(); + void FaceTarget(float x, float z); + void FaceTarget(Spawn* target); + void SetInvulnerable(bool val); + bool GetInvulnerable(); + bool changed; + bool position_changed; + bool info_changed; + bool vis_changed; + int16 size; + int32 faction_id; + int8 oversized_packet; //0xff + int16 opcode; + int32 id; + int8 unknown1; + int32 unknown2; + int32 primary_command_list_id; + int32 secondary_command_list_id; + vector primary_command_list; + vector secondary_command_list; + int32 group_id; + int8 group_len; + vector* spawn_group_list; + AppearanceData appearance; + int32 last_movement_update; + bool following; + bool IsPet() { return is_pet; } + void SetPet(bool val) { is_pet = val; } + Mutex m_requiredQuests; + Mutex m_requiredHistory; + + void SetFollowTarget(Spawn* spawn); + Spawn* GetFollowTarget(); + + /// Sets a user defined variable + /// Variable we are setting + /// Value to set the variable to + void AddTempVariable(string var, string val); + + void AddTempVariable(string var, Spawn* val); + void AddTempVariable(string var, ZoneServer* val); + void AddTempVariable(string var, Quest* val); + void AddTempVariable(string var, Item* val); + /// Gets the value for the given variable + /// Variable to check + /// The value for the given variable, "" if variable was not set + string GetTempVariable(string var); + + Spawn* GetTempVariableSpawn(string var); + ZoneServer* GetTempVariableZone(string var); + Item* GetTempVariableItem(string var); + Quest* GetTempVariableQuest(string var); + int8 GetTempVariableType(string var); + void DeleteTempVariable(string var); + + void SetIllusionModel(int16 val, bool setUpdateFlags = true) { + SetInfo(&m_illusionModel, val, setUpdateFlags); + } + int16 GetIllusionModel() { return m_illusionModel; } + + CellInfo Cell_Info; + + + int32 GetSpawnAnim() { return m_spawnAnim; } + void SetSpawnAnim(int32 value) { m_spawnAnim = value; } + int32 GetAddedToWorldTimestamp() { return m_addedToWorldTimestamp; } + void SetAddedToWorldTimestamp(int32 value) { m_addedToWorldTimestamp = value; } + int16 GetSpawnAnimLeeway() { return m_spawnAnimLeeway; } + void SetSpawnAnimLeeway(int16 value) { m_spawnAnimLeeway = value; } + +protected: + bool send_spawn_changes; + bool invulnerable; + bool attack_resume_needed; + bool resume_movement; + bool movement_interrupted; + int32 running_timer_begin; + int32 running_timer_end; + vector movement_loop; + bool running_timer_updated; + int16 movement_index; + int32 movement_start_time; + Mutex MMovementLoop; + map allowed_access; + vector quest_ids; + int32 database_id; + int32 packet_num; + int32 target; + int8 spawn_type; + int32 last_attacker; + int32 merchant_id; + int8 merchant_type; + int32 transporter_id; + map* > required_quests; + map required_history; + EquipmentItemList equipment_list; + +private: + deque* movement_locations; + Mutex* MMovementLocations; + Mutex* MSpawnGroup; + int8 size_offset; + int tmp_visual_state; + int tmp_action_state; + int32 running_to; + string spawn_script; + static int32 next_id; + ZoneServer* zone; + int32 spawn_location_id; + int32 spawn_entry_id; + int32 spawn_location_spawns_id; + int32 respawn; + int32 expire_time; + int32 expire_offset; + float x_offset; + float y_offset; + float z_offset; + int32 deviation; + BasicInfoStruct basic_info; + //string data; + bool is_pet; + // m_followTarget = spawn to follow around + int32 m_followTarget; + bool req_quests_private; + int16 req_quests_override; + bool req_quests_continued_access; + float last_heading_angle; + + map m_tempVariableTypes; + map m_tempVariableSpawn; + map m_tempVariableZone; + map m_tempVariableItem; + map m_tempVariableQuest; + // m_tempVariables = stores user defined variables from lua, will not persist through a zone + map m_tempVariables; + + int16 m_illusionModel; + + int32 m_spawnAnim; + int32 m_addedToWorldTimestamp; + int16 m_spawnAnimLeeway; + + int16 pos_packet_size; + int16 info_packet_size; + int16 vis_packet_size; + Mutex m_Update; +}; + +#endif + diff --git a/EQ2/source/WorldServer/SpawnLists.h b/EQ2/source/WorldServer/SpawnLists.h new file mode 100644 index 000000000..e88b015d6 --- /dev/null +++ b/EQ2/source/WorldServer/SpawnLists.h @@ -0,0 +1,88 @@ +/* + EQ2Emulator: Everquest II Server Emulator + Copyright (C) 2007 EQ2EMulator Development Team (http://www.eq2emulator.net) + + This file is part of EQ2Emulator. + + EQ2Emulator is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + EQ2Emulator is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with EQ2Emulator. If not, see . +*/ +#ifndef EQ2_SPAWN_LISTS +#define EQ2_SPAWN_LISTS +#include "../common/types.h" +#include + +#define SPAWN_ENTRY_TYPE_NPC 0 +#define SPAWN_ENTRY_TYPE_OBJECT 1 +#define SPAWN_ENTRY_TYPE_WIDGET 2 +#define SPAWN_ENTRY_TYPE_SIGN 3 +#define SPAWN_ENTRY_TYPE_GROUNDSPAWN 4 + +struct EntityCommand{ + string name; + float distance; + string error_text; + string command; + int16 cast_time; + int32 spell_visual; +}; +struct SpawnEntry{ + int32 spawn_entry_id; + int32 spawn_location_id; + int8 spawn_type; + int32 spawn_id; + float spawn_percentage; + int32 respawn; + int32 expire_time; + int32 expire_offset; +}; +class SpawnLocation{ +public: + SpawnLocation(){ + x = 0; + y = 0; + z = 0; + heading = 0; + total_percentage = 0; + x_offset = 0; + y_offset = 0; + z_offset = 0; + placement_id = 0; + pitch = 0; + roll = 0; + grid_id = 0; + conditional = 0; + } + ~SpawnLocation(){ + for(int32 i=0;i entities; + float x; + float y; + float z; + float heading; + float x_offset; + float y_offset; + float z_offset; + int32 placement_id; + float pitch; + float roll; + float total_percentage; + int32 grid_id; + string script; + int8 conditional; +}; +#endif + diff --git a/EQ2/source/WorldServer/SpellProcess.cpp b/EQ2/source/WorldServer/SpellProcess.cpp new file mode 100644 index 000000000..051ff9863 --- /dev/null +++ b/EQ2/source/WorldServer/SpellProcess.cpp @@ -0,0 +1,2153 @@ +/* + EQ2Emulator: Everquest II Server Emulator + Copyright (C) 2007 EQ2EMulator Development Team (http://www.eq2emulator.net) + + This file is part of EQ2Emulator. + + EQ2Emulator is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + EQ2Emulator is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with EQ2Emulator. If not, see . +*/ +#include "SpellProcess.h" +#include "../common/Log.h" +#include "Tradeskills/Tradeskills.h" +#include "ClientPacketFunctions.h" + +extern MasterSpellList master_spell_list; +extern MasterSkillList master_skill_list; +extern ConfigReader configReader; +extern LuaInterface* lua_interface; +extern Commands commands; +extern World world; + +SpellProcess::SpellProcess(){ + last_checked_time = 0; + MSpellProcess.SetName("SpellProcess::MSpellProcess"); + MRemoveTargetList.SetName("SpellProcess::MRemoveTargetList"); + MSoloHO.SetName("SpellProcess::m_soloHO"); + MGroupHO.SetName("SpellProcess:m_groupHO"); + MSpellCancelList.SetName("SpellProcess::SpellCancelList"); +} + +SpellProcess::~SpellProcess(){ + RemoveAllSpells(); +} + +void SpellProcess::RemoveAllSpells(){ + MSpellProcess.lock(); + ClearSpellScriptTimerList(); + + MutexList::iterator active_spells_itr = active_spells.begin(); + while(active_spells_itr.Next()){ + DeleteCasterSpell(active_spells_itr->value); + } + + active_spells_itr = active_spells.begin(); + while(active_spells_itr.Next()){ + active_spells.Remove(active_spells_itr->value, true); + } + active_spells.clear(); + + InterruptStruct* interrupt = 0; + MutexList::iterator interrupt_list_itr = interrupt_list.begin(); + while(interrupt_list_itr.Next()){ + interrupt = interrupt_list_itr->value; + CheckInterrupt(interrupt); + interrupt_list.Remove(interrupt_list_itr->value, true); + } + interrupt_list.clear(); + + MutexList::iterator cast_timers_itr = cast_timers.begin(); + while(cast_timers_itr.Next()){ + safe_delete(cast_timers_itr->value->timer); + safe_delete(cast_timers_itr->value->spell); + cast_timers.Remove(cast_timers_itr->value, true); + } + cast_timers.clear(); + + MutexList::iterator recast_timers_itr = recast_timers.begin(); + while(recast_timers_itr.Next()){ + recast_timers.Remove(recast_timers_itr->value, true); + } + + MRemoveTargetList.writelock(__FUNCTION__, __LINE__); + remove_target_list.clear(); + MRemoveTargetList.releasewritelock(__FUNCTION__, __LINE__); + + map::iterator solo_ho_itr; + MSoloHO.writelock(__FUNCTION__, __LINE__); + for (solo_ho_itr = m_soloHO.begin(); solo_ho_itr != m_soloHO.end(); solo_ho_itr++) + safe_delete(solo_ho_itr->second); + m_soloHO.clear(); + MSoloHO.releasewritelock(__FUNCTION__, __LINE__); + + map::iterator group_ho_itr; + MGroupHO.writelock(__FUNCTION__, __LINE__); + for (group_ho_itr = m_groupHO.begin(); group_ho_itr != m_groupHO.end(); group_ho_itr++) + safe_delete(group_ho_itr->second); + m_groupHO.clear(); + MGroupHO.releasewritelock(__FUNCTION__, __LINE__); + + recast_timers.clear(); + spell_que.clear(); + + MSpellCancelList.writelock(__FUNCTION__, __LINE__); + SpellCancelList.clear(); + MSpellCancelList.releasewritelock(__FUNCTION__, __LINE__); + + MSpellProcess.unlock(); +} + +void SpellProcess::Process(){ + if(last_checked_time > Timer::GetCurrentTime2()) + return; + last_checked_time = Timer::GetCurrentTime2() + 50; + MSpellProcess.lock(); + CheckSpellScriptTimers(); + if(active_spells.size(true) > 0){ + LuaSpell* spell = 0; + MutexList::iterator itr = active_spells.begin(); + map >::iterator remove_itr; + vector::iterator target_itr; + vector::iterator remove_target_itr; + while(itr.Next()){ + spell = itr->value; + if (!spell->spell->GetSpellData()->duration_until_cancel && spell->timer.Check()){ + spell->num_calls++; + // ProcessSpell(spell, flase) will atempt to call the tick() function in the lua script + // if there is no tick function it will return false, this will cause the server to crash in the event + // of a spell that has a duration but is not a "until canceled" spell or a spell with a tick (tradeskill buffs) + // to counter this check to see if the spell has a call_frequency > 0 before we call ProcessSpell() + if (spell->spell->GetSpellData()->call_frequency > 0 && !ProcessSpell(spell, false)) + active_spells.Remove(spell, true, 2000); + else if ((spell->timer.GetDuration() * spell->num_calls) >= spell->spell->GetSpellData()->duration1 * 100) + DeleteCasterSpell(spell); + } + else + CheckRemoveTargetFromSpell(spell); + } + } + if (SpellCancelList.size() > 0){ + MSpellCancelList.writelock(__FUNCTION__, __LINE__); + vector::iterator itr = SpellCancelList.begin(); + while (itr != SpellCancelList.end()){ + DeleteCasterSpell(*itr); + itr++; + } + SpellCancelList.clear(); + MSpellCancelList.releasewritelock(__FUNCTION__, __LINE__); + } + if(interrupt_list.size(true) > 0){ + InterruptStruct* interrupt = 0; + MutexList::iterator itr = interrupt_list.begin(); + while(itr.Next()){ + interrupt = itr->value; + CheckInterrupt(interrupt); + safe_delete(interrupt); + } + interrupt_list.clear(); + } + if(cast_timers.size(true) > 0){ + CastTimer* cast_timer = 0; + MutexList::iterator itr = cast_timers.begin(); + while (itr.Next()) { + cast_timer = itr->value; + if (cast_timer) { + if (cast_timer->timer->Check(false)) { + if (cast_timer->spell) { + Client* client = cast_timer->zone->GetClientBySpawn(cast_timer->spell->caster); + if (client) { + PacketStruct* packet = configReader.getStruct("WS_FinishCastSpell", client->GetVersion()); + if (packet) { + packet->setMediumStringByName("spell_name", cast_timer->spell->spell->GetSpellData()->name.data.c_str()); + client->QueuePacket(packet->serialize()); + safe_delete(packet); + } + } + if (cast_timer->spell && cast_timer->spell->caster) + cast_timer->spell->caster->IsCasting(false); + cast_timer->delete_timer = true; + CastProcessedSpell(cast_timer->spell); + } + else if (cast_timer->entity_command) { + if (cast_timer->timer->Check(false)) { + cast_timer->delete_timer = true; + CastProcessedEntityCommand(cast_timer->entity_command, cast_timer->caster); + } + } + } + if (cast_timer->delete_timer) { + safe_delete(cast_timer->timer); + cast_timers.Remove(cast_timer, true); + } + } + } + } + if (recast_timers.size(true) > 0) { + RecastTimer* recast_timer = 0; + MutexList::iterator itr = recast_timers.begin(); + vector::iterator remove_recast_itr; + while(itr.Next()){ + recast_timer = itr->value; + if(recast_timer->timer->Check(false)){ + UnlockSpell(recast_timer->client, recast_timer->spell); + safe_delete(recast_timer->timer); + recast_timers.Remove(recast_timer, true); + } + } + } + if(spell_que.size(true) > 0){ + MutexMap::iterator itr = spell_que.begin(); + while(itr.Next()){ + if(itr->first->IsCasting() == false && IsReady(itr->second, itr->first)){ + RemoveSpellFromQueue(itr->second, itr->first); + ProcessSpell(itr->first->GetZone(), itr->second, itr->first, itr->first->GetTarget()); + } + } + } + + // Check solo HO timers + MSoloHO.writelock(__FUNCTION__, __LINE__); + if (m_soloHO.size() > 0) { + map::iterator itr = m_soloHO.begin(); + map::iterator delete_itr; + while (itr != m_soloHO.end()) { + if (itr->second->GetWheel() && Timer::GetCurrentTime2() >= (itr->second->GetStartTime() + (itr->second->GetTotalTime() * 1000))) { + itr->second->SetComplete(1); + ClientPacketFunctions::SendHeroicOPUpdate(itr->first, itr->second); + safe_delete(itr->second); + delete_itr = itr; + itr++; + m_soloHO.erase(delete_itr); + } + else + itr++; + } + } + MSoloHO.releasewritelock(__FUNCTION__, __LINE__); + + // Check group HO timers + MGroupHO.writelock(__FUNCTION__, __LINE__); + if (m_groupHO.size() > 0) { + map::iterator itr = m_groupHO.begin(); + map::iterator delete_itr; + while (itr != m_groupHO.end()) { + if (itr->second->GetWheel() && Timer::GetCurrentTime2() >= (itr->second->GetStartTime() + (itr->second->GetTotalTime() * 1000))) { + itr->second->SetComplete(1); + + world.GetGroupManager()->GroupLock(__FUNCTION__, __LINE__); + deque::iterator itr2; + deque* members = world.GetGroupManager()->GetGroupMembers(itr->first); + for (itr2 = members->begin(); itr2 != members->end(); itr2++) { + if ((*itr2)->client) + ClientPacketFunctions::SendHeroicOPUpdate((*itr2)->client, itr->second); + } + world.GetGroupManager()->ReleaseGroupLock(__FUNCTION__, __LINE__); + + safe_delete(itr->second); + delete_itr = itr; + itr++; + m_groupHO.erase(delete_itr); + } + else + itr++; + } + } + MGroupHO.releasewritelock(__FUNCTION__, __LINE__); + + MSpellProcess.unlock(); +} +bool SpellProcess::IsReady(Spell* spell, Entity* caster){ + if(caster->IsCasting()) + return false; + bool ret = true; + RecastTimer* recast_timer = 0; + MutexList::iterator itr = recast_timers.begin(); + while(itr.Next()){ + recast_timer = itr->value; + if(recast_timer->spell == spell && recast_timer->caster == caster){ + ret = false; + break; + } + } + return ret; +} +void SpellProcess::CheckRecast(Spell* spell, Entity* caster, float timer_override, bool check_linked_timers) { + if(spell && caster && spell->GetSpellData()->recast > 0){ + RecastTimer* timer = new RecastTimer; + timer->caster = caster; + if(caster->IsPlayer()) + timer->client = caster->GetZone()->GetClientBySpawn(caster); + else + timer->client = 0; + timer->spell = spell; + if(timer_override == 0) + timer->timer = new Timer((int32)(spell->GetSpellData()->recast*1000)); + else + timer->timer = new Timer((int32)(timer_override*1000)); + recast_timers.Add(timer); + if(caster->IsPlayer()){ + if(timer_override == 0) + ((Player*)caster)->LockSpell(spell, (int16)(spell->GetSpellData()->recast * 10)); + else + ((Player*)caster)->LockSpell(spell, timer_override * 10); + + if (check_linked_timers && spell->GetSpellData()->linked_timer > 0) { + vector linkedSpells = ((Player*)caster)->GetSpellBookSpellsByTimer(spell->GetSpellData()->linked_timer); + for (int8 i = 0; i < linkedSpells.size(); i++) { + Spell* spell2 = linkedSpells.at(i); + if (spell2) + CheckRecast(spell2, caster, timer_override, false); + } + } + } + } +} +void SpellProcess::CheckInterrupt(InterruptStruct* interrupt){ + if(!interrupt || !interrupt->interrupted || !interrupt->interrupted->IsEntity()) + return; + Entity* entity = (Entity*)interrupt->interrupted; + Client* client = entity->GetZone()->GetClientBySpawn(entity); + if(client) + SendFinishedCast(GetLuaSpell(entity), client); + RemoveSpellTimersFromSpawn(entity, false); + entity->IsCasting(false); + entity->GetZone()->SendInterruptPacket(entity, interrupt->spell); + if(interrupt->error_code > 0) + entity->GetZone()->SendSpellFailedPacket(client, interrupt->error_code); +} + +bool SpellProcess::DeleteCasterSpell(Spawn* caster, Spell* spell){ + + bool ret = false; + // need to use size(true) to get pending updates to the list as well + if (caster && spell && active_spells.size() > 0) { + LuaSpell* lua_spell = 0; + MutexList::iterator itr = active_spells.begin(); + while (itr.Next()){ + lua_spell = itr->value; + if (lua_spell->spell == spell && lua_spell->caster == caster) { + ret = DeleteCasterSpell(lua_spell); + break; + } + } + } + return ret; +} + +bool SpellProcess::DeleteCasterSpell(LuaSpell* spell){ + bool ret = false; + Spawn* target = 0; + if(spell) { + if (active_spells.count(spell) > 0) + active_spells.Remove(spell); + if (spell->caster) { + if (spell->spell->GetSpellData()->cast_type == SPELL_CAST_TYPE_TOGGLE){ + CheckRecast(spell->spell, spell->caster); + if (spell->caster && spell->caster->IsPlayer()) + SendSpellBookUpdate(spell->caster->GetZone()->GetClientBySpawn(spell->caster)); + } + spell->caster->RemoveMaintainedSpell(spell); + CheckRemoveTargetFromSpell(spell, false); + ZoneServer* zone = spell->caster->GetZone(); + spell->MSpellTargets.readlock(__FUNCTION__, __LINE__); + for (int32 i = 0; i < spell->targets.size(); i++) { + target = zone->GetSpawnByID(spell->targets.at(i)); + if(target && target->IsEntity()){ + ((Entity*)target)->RemoveSpellEffect(spell); + if(spell->spell->GetSpellData()->det_type > 0 && (spell->spell->GetSpellDuration() > 0 || spell->spell->GetSpellData()->duration_until_cancel)) + ((Entity*)target)->RemoveDetrimentalSpell(spell); + } + else{ + spell->caster->RemoveSpellEffect(spell); + if(spell->spell->GetSpellData()->det_type > 0 && (spell->spell->GetSpellDuration() > 0 || spell->spell->GetSpellData()->duration_until_cancel)) + spell->caster->RemoveDetrimentalSpell(spell); + } + if(target && target->IsPlayer() && spell->spell->GetSpellData()->fade_message.length() > 0){ + Client* client = target->GetZone()->GetClientBySpawn(target); + if(client){ + string fade_message = spell->spell->GetSpellData()->fade_message; + if(fade_message.find("%t") != string::npos) + fade_message.replace(fade_message.find("%t"), 2, target->GetName()); + client->Message(CHANNEL_COLOR_SPELL_FADE, fade_message.c_str()); + } + } + } + spell->MSpellTargets.releasereadlock(__FUNCTION__, __LINE__); + ret = true; + } + if(lua_interface) + lua_interface->RemoveSpell(spell, true, SpellScriptTimersHasSpell(spell)); + } + return ret; +} + +bool SpellProcess::ProcessSpell(LuaSpell* spell, bool first_cast, const char* function, SpellScriptTimer* timer) { + bool ret = false; + if(lua_interface && !spell->interrupted){ + lua_interface->AddSpawnPointers(spell, first_cast, false, function, timer); + vector* data = spell->spell->GetLUAData(); + for(int32 i=0;isize();i++){ + switch(data->at(i)->type){ + case 0:{ + lua_interface->SetSInt32Value(spell->state, data->at(i)->int_value); + break; + } + case 1:{ + lua_interface->SetFloatValue(spell->state, data->at(i)->float_value); + break; + } + case 2:{ + lua_interface->SetBooleanValue(spell->state, data->at(i)->bool_value); + break; + } + case 3:{ + lua_interface->SetStringValue(spell->state, data->at(i)->string_value.c_str()); + break; + } + default:{ + LogWrite(SPELL__ERROR, 0, "Spell", "Error: Unknown LUA Type '%i' in SpellProcess::ProcessSpell for Spell '%s'", (int)data->at(i)->type, spell->spell->GetName()); + return false; + } + } + } + ret = lua_interface->CallSpellProcess(spell, 2 + data->size()); + } + return ret; +} + +bool SpellProcess::CastPassives(Spell* spell, Entity* caster, bool remove) { + + LuaSpell* lua_spell = 0; + + if(lua_interface) + lua_spell = lua_interface->GetSpell(spell->GetSpellData()->lua_script.c_str()); + + if(!lua_spell) + { + string lua_script = spell->GetSpellData()->lua_script; + lua_script.append(".lua"); + lua_spell = 0; + + if(lua_interface) + lua_spell = lua_interface->GetSpell(lua_script.c_str()); + + if(!lua_spell) { + LogWrite(SPELL__ERROR, 0, "Spell", "Failed to get a LuaSpell for %s (%u)", spell->GetName(), spell->GetSpellID()); + return false; + } + else + spell->GetSpellData()->lua_script = lua_script; + } + + lua_spell->caster = caster; + lua_spell->spell = spell; + lua_spell->initial_target = caster->GetID(); + GetSpellTargets(lua_spell); + + if (!remove) + return CastProcessedSpell(lua_spell, true); + + lua_interface->RemoveSpell(lua_spell, true, SpellScriptTimersHasSpell(lua_spell)); + return true; +} + +void SpellProcess::SendStartCast(LuaSpell* spell, Client* client){ + if(client){ + PacketStruct* packet = configReader.getStruct("WS_StartCastSpell", client->GetVersion()); + if(packet){ + packet->setDataByName("cast_time", spell->spell->GetSpellData()->cast_time*.01); + packet->setMediumStringByName("spell_name", spell->spell->GetSpellData()->name.data.c_str()); + EQ2Packet* outapp = packet->serialize(); + //DumpPacket(outapp); + client->QueuePacket(outapp); + safe_delete(packet); + } + } +} + +void SpellProcess::SendFinishedCast(LuaSpell* spell, Client* client){ + if(client && spell && spell->spell){ + UnlockAllSpells(client); + if(spell->resisted && spell->spell->GetSpellData()->recast > 0) + CheckRecast(spell->spell, client->GetPlayer(), 0.5); // half sec recast on resisted spells + else if (!spell->interrupted && spell->spell->GetSpellData()->cast_type != SPELL_CAST_TYPE_TOGGLE) + CheckRecast(spell->spell, client->GetPlayer()); + PacketStruct* packet = configReader.getStruct("WS_FinishCastSpell", client->GetVersion()); + if(packet){ + packet->setMediumStringByName("spell_name", spell->spell->GetSpellData()->name.data.c_str()); + client->QueuePacket(packet->serialize()); + safe_delete(packet); + } + SendSpellBookUpdate(client); + } + if (spell) { + if (!spell->interrupted) { + TakePower(spell); + TakeHP(spell); + TakeSavagery(spell); + AddDissonance(spell); + AddConcentration(spell); + if (client && spell->spell && !spell->spell->GetSpellData()->friendly_spell) + client->GetPlayer()->InCombat(true); + if(client && spell->caster) + client->CheckPlayerQuestsSpellUpdate(spell->spell); + } + } +} + +void SpellProcess::LockAllSpells(Client* client){ + if(client){ + client->GetPlayer()->LockAllSpells(); + SendSpellBookUpdate(client); + } +} + +void SpellProcess::UnlockAllSpells(Client* client){ + if(client) + client->GetPlayer()->UnlockAllSpells(); +} + +void SpellProcess::UnlockSpell(Client* client, Spell* spell){ + if(client && client->GetPlayer() && spell) { + client->GetPlayer()->UnlockSpell(spell); + SendSpellBookUpdate(client); + } +} + +bool SpellProcess::CheckPower(LuaSpell* spell){ + int16 req = 0; + if(spell->caster){ + req = spell->spell->GetPowerRequired(spell->caster); + if(spell->caster->GetPower() >= req) + return true; + } + return false; +} + +bool SpellProcess::TakePower(LuaSpell* spell){ + int16 req = 0; + if(spell->caster){ + req = spell->spell->GetPowerRequired(spell->caster); + if(spell->caster->GetPower() >= req){ + spell->caster->SetPower(spell->caster->GetPower() - req); + if(spell->caster->IsPlayer()) + spell->caster->GetZone()->TriggerCharSheetTimer(); + return true; + } + } + return false; +} + +bool SpellProcess::CheckHP(LuaSpell* spell) { + int16 req = 0; + if(spell->caster){ + req = spell->spell->GetHPRequired(spell->caster); + if(spell->caster->GetHP() >= req) + return true; + } + return false; +} + +bool SpellProcess::TakeHP(LuaSpell* spell) { + int16 req = 0; + if(spell->caster && spell->caster->IsPlayer()){ + req = spell->spell->GetHPRequired(spell->caster); + if(spell->caster->GetHP() >= req){ + spell->caster->SetHP(spell->caster->GetHP() - req); + if(spell->caster->IsPlayer()) + spell->caster->GetZone()->TriggerCharSheetTimer(); + return true; + } + } + return false; +} + +bool SpellProcess::CheckConcentration(LuaSpell* spell) { + if (spell && spell->caster) { + int8 req = spell->spell->GetSpellData()->req_concentration / 256; + int8 current_avail = 5 - spell->caster->GetConcentrationCurrent(); + if (current_avail >= req) + return true; + } + return false; +} + +bool SpellProcess::AddConcentration(LuaSpell* spell) { + if (spell && spell->caster) { + int8 req = spell->spell->GetSpellData()->req_concentration / 256; + int8 current_avail = 5 - spell->caster->GetConcentrationCurrent(); + if (current_avail >= req) { + spell->caster->GetInfoStruct()->cur_concentration += req; + if (spell->caster->IsPlayer()) + spell->caster->GetZone()->TriggerCharSheetTimer(); + LogWrite(SPELL__DEBUG, 0, "Spell", "Concentration is now %u on %s", spell->caster->GetInfoStruct()->cur_concentration, spell->caster->GetName()); + return true; + } + } + return false; +} + +bool SpellProcess::CheckSavagery(LuaSpell* spell) { + if (spell && spell->caster) { + int16 req = spell->spell->GetSavageryRequired(spell->caster); + if(spell->caster->GetSavagery() >= req) + return true; + } + return false; +} + +bool SpellProcess::TakeSavagery(LuaSpell* spell) { + int16 req = 0; + if(spell && spell->caster && spell->caster->IsPlayer()){ + req = spell->spell->GetSavageryRequired(spell->caster); + if(spell->caster->GetSavagery() >= req){ + spell->caster->SetSavagery(spell->caster->GetSavagery() - req); + if(spell->caster->IsPlayer()) + spell->caster->GetZone()->TriggerCharSheetTimer(); + return true; + } + } + return false; +} + +bool SpellProcess::CheckDissonance(LuaSpell* spell) { + if (spell && spell->caster) { + int16 req = spell->spell->GetDissonanceRequired(spell->caster); + if(spell->caster->GetDissonance() <= req) + return true; + } + return false; +} + +bool SpellProcess::AddDissonance(LuaSpell* spell) { + int16 req = 0; + if(spell && spell->caster && spell->caster->IsPlayer()){ + req = spell->spell->GetDissonanceRequired(spell->caster); + if(spell->caster->GetDissonance() >= req){ + spell->caster->SetDissonance(spell->caster->GetDissonance() - req); + if(spell->caster->IsPlayer()) + spell->caster->GetZone()->TriggerCharSheetTimer(); + return true; + } + } + return false; +} + +void SpellProcess::AddSpellToQueue(Spell* spell, Entity* caster){ + if(caster && caster->IsPlayer() && spell){ + spell_que.Put(caster, spell); + ((Player*)caster)->QueueSpell(spell); + Client* client = caster->GetZone()->GetClientBySpawn(caster); + if(client) + SendSpellBookUpdate(client); + } +} + +void SpellProcess::RemoveSpellFromQueue(Spell* spell, Entity* caster){ + if(caster && caster->IsPlayer() && spell){ + spell_que.erase(caster); + ((Player*)caster)->UnQueueSpell(spell); + Client* client = caster->GetZone()->GetClientBySpawn(caster); + if(client) + SendSpellBookUpdate(client); + } +} + +void SpellProcess::RemoveSpellFromQueue(Entity* caster, bool hostile_only) { + if (caster && spell_que.count(caster) > 0) { + Spell* spell = spell_que.Get(caster); + if (spell) { + bool remove = true; + if (hostile_only && spell->GetSpellData()->target_type != SPELL_TARGET_ENEMY) + remove = false; + if (remove) { + spell_que.erase(caster); + ((Player*)caster)->UnQueueSpell(spell); + Client* client = caster->GetZone()->GetClientBySpawn(caster); + if (client) + SendSpellBookUpdate(client); + } + } + } +} + +void SpellProcess::CheckSpellQueue(Entity* caster){ + if(caster && caster->IsPlayer()){ + if(spell_que.count(caster) > 0) + RemoveSpellFromQueue(spell_que.Get(caster), caster); + } +} + +void SpellProcess::CheckSpellQueue(Spell* spell, Entity* caster){ + if(caster->IsPlayer()){ + bool add = true; + bool remove = false; + if(spell_que.count(caster) > 0){ + remove = true; + if(spell_que.Get(caster) == spell) + add = false; + } + if(remove) + RemoveSpellFromQueue(spell, caster); + if(add) + AddSpellToQueue(spell, caster); + } +} + +void SpellProcess::SendSpellBookUpdate(Client* client){ + if(client){ + EQ2Packet* app = client->GetPlayer()->GetSpellBookUpdatePacket(client->GetVersion()); + if(app) + client->QueuePacket(app); + } +} + +LuaSpell* SpellProcess::GetLuaSpell(Entity* caster){ + LuaSpell* spell = 0; + if(caster && cast_timers.size() > 0){ + CastTimer* cast_timer = 0; + MutexList::iterator itr = cast_timers.begin(); + while(itr.Next()){ + cast_timer = itr->value; + if(cast_timer && cast_timer->spell && cast_timer->spell->caster == caster){ + spell = cast_timer->spell; + break; + } + } + } + return spell; +} + +Spell* SpellProcess::GetSpell(Entity* caster){ + Spell* spell = 0; + if(cast_timers.size() > 0){ + CastTimer* cast_timer = 0; + MutexList::iterator itr = cast_timers.begin(); + while(itr.Next()){ + cast_timer = itr->value; + if(cast_timer && cast_timer->spell && cast_timer->spell->caster == caster){ + spell = cast_timer->spell->spell; + break; + } + } + } + return spell; +} + +Spawn* SpellProcess::GetSpellTarget(Entity* caster){ + Spawn* target = 0; + if(cast_timers.size() > 0){ + CastTimer* cast_timer = 0; + MutexList::iterator itr = cast_timers.begin(); + while(itr.Next()){ + cast_timer = itr->value; + if(cast_timer && cast_timer->spell->caster == caster){ + target = caster->GetZone()->GetSpawnByID(cast_timer->spell->initial_target); + break; + } + } + } + return target; +} + +void SpellProcess::ProcessSpell(ZoneServer* zone, Spell* spell, Entity* caster, Spawn* target, bool lock, bool harvest_spell) +{ + if(spell && caster) + { + + Client* client = 0; + int8 target_type = spell->GetSpellData()->target_type; + //int16 version = 0; + + LuaSpell* lua_spell = 0; + + if(lua_interface) + lua_spell = lua_interface->GetSpell(spell->GetSpellData()->lua_script.c_str()); + + if(!lua_spell) + { + string lua_script = spell->GetSpellData()->lua_script; + lua_script.append(".lua"); + + if(lua_interface) + lua_spell = lua_interface->GetSpell(lua_script.c_str()); + + if(!lua_spell) + return; + else + spell->GetSpellData()->lua_script = lua_script; + } + + if (!target) + target = caster; + + lua_spell->caster = caster; + lua_spell->spell = spell; + int32 target_id = target->GetID(); + lua_spell->initial_target = target_id; + + if (!harvest_spell) + GetSpellTargets(lua_spell); + else{ + lua_spell->MSpellTargets.writelock(__FUNCTION__, __LINE__); + lua_spell->targets.push_back(target_id); + lua_spell->MSpellTargets.releasewritelock(__FUNCTION__, __LINE__); + } + + + if (target_id == lua_spell->initial_target) + { + LogWrite(SPELL__DEBUG, 1, "Spell", "%s is casting %s on %s.", caster->GetName(), spell->GetName(), ( target ) ? target->GetName() : "No Target" ); + } + else + { + LogWrite(SPELL__DEBUG, 1, "Spell", "%s: Casting on %s through %s as target.", spell->GetName(), caster->GetZone()->GetSpawnByID(lua_spell->initial_target)->GetName(), target->GetName()); + } + + target = lua_spell->caster->GetZone()->GetSpawnByID(lua_spell->initial_target); + + if(caster->IsPlayer() && zone) + { + client = zone->GetClientBySpawn(caster); + //version = client->GetVersion(); + } + + //If this spell is the toggle cast type and is being toggled off, do this now + if (spell->GetSpellData()->cast_type == SPELL_CAST_TYPE_TOGGLE) + { + bool ret_val = DeleteCasterSpell(caster, spell); + + if (ret_val) + { + int8 actual_concentration = spell->GetSpellData()->req_concentration / 256; + + if (actual_concentration > 0) + { + caster->GetInfoStruct()->cur_concentration -= actual_concentration; + if (caster->IsPlayer()) + caster->GetZone()->TriggerCharSheetTimer(); + } + + safe_delete(lua_spell); + return; + } + } + + // If a player is casting the spell AND spell is a tradeskill spell + if (client && spell->GetSpellData()->spell_book_type == SPELL_BOOK_TYPE_TRADESKILL) + { + // If the player is currently crafting + if (client->IsCrafting()) + { + Tradeskill* tradeskill = 0; + zone->GetTradeskillMgr()->ReadLock(__FUNCTION__, __LINE__); + tradeskill = zone->GetTradeskillMgr()->GetTradeskill(client); + + // Can not cast a crafting spell that doesn't match the current crafting technique + if (spell->GetSpellData()->mastery_skill != tradeskill->recipe->GetTechnique()) + { + // send a message to the client, used chat_relationship to match other tradeskill messages, not sure if it is accurate though + client->Message(CHANNEL_COLOR_CHAT_RELATIONSHIP, "You are not using %s on this recipe.", master_skill_list.GetSkill(spell->GetSpellData()->mastery_skill)->name.data.c_str()); + + // Write a spell debug message on why we couldn't cast + LogWrite(SPELL__DEBUG, 1, "Spell", "%s could not cast tradeskill spell (%s), skills did not match. spell mastery skill = %u, tradeskill technique = %u", caster->GetName(), spell->GetName(), spell->GetSpellData()->mastery_skill, tradeskill->recipe->GetTechnique()); + + // make sure to release the lock before we return out + zone->GetTradeskillMgr()->ReleaseReadLock(__FUNCTION__, __LINE__); + safe_delete(lua_spell); + return; + } + // need to make sure the lock is released if the if passed + zone->GetTradeskillMgr()->ReleaseReadLock(__FUNCTION__, __LINE__); + } + else // If the player is not currently crafting + { + LogWrite(SPELL__DEBUG, 1, "Spell", "%s cannot cast a tradeskill spell (%s) while not crafting.", caster->GetName(), spell->GetName()); + zone->SendSpellFailedPacket(client, SPELL_ERROR_ONLY_WHEN_CRAFTING); + safe_delete(lua_spell); + return; + } + } + + if ((caster->IsMezzed() && !spell->CastWhileMezzed()) || (caster->IsStunned() && !spell->CastWhileStunned())) + { + LogWrite(SPELL__DEBUG, 1, "Spell", "%s cannot cast (mezzed or stunned).", caster->GetName()); + zone->SendSpellFailedPacket(client, SPELL_ERROR_CANNOT_CAST_STUNNED); + safe_delete(lua_spell); + return; + } + + if (caster->IsStifled() && !spell->CastWhileStifled()) + { + LogWrite(SPELL__DEBUG, 1, "Spell", "%s cannot cast (stifled).", caster->GetName()); + zone->SendSpellFailedPacket(client, SPELL_ERROR_CANNOT_CAST_STIFFLED); + safe_delete(lua_spell); + return; + } + + if (caster->IsFeared() && !spell->CastWhileFeared()) + { + LogWrite(SPELL__DEBUG, 1, "Spell", "%s cannot cast (feared).", caster->GetName()); + zone->SendSpellFailedPacket(client, SPELL_ERROR_CANNOT_CAST_FEARED); + safe_delete(lua_spell); + return; + } + + if(caster->IsPlayer() && !IsReady(spell, caster)) + { + LogWrite(SPELL__DEBUG, 1, "Spell", "Queuing spell for %s.", caster->GetName()); + CheckSpellQueue(spell, caster); + safe_delete(lua_spell); + return; + } + + if (target_type != SPELL_TARGET_SELF && target_type != SPELL_TARGET_GROUP_AE && target_type != SPELL_TARGET_NONE && spell->GetSpellData()->max_aoe_targets == 0) + { + LogWrite(SPELL__DEBUG, 1, "Spell", "%s: Not Self, Not Group AE, Not None, Max Targets = 0", spell->GetName()); + + if (!target) + { + LogWrite(SPELL__DEBUG, 1, "Spell", "%s: No target.", spell->GetName()); + zone->SendSpellFailedPacket(client, SPELL_ERROR_NO_ELIGIBLE_TARGET); + safe_delete(lua_spell); + return; + } + + if(caster->GetDistance(target) > spell->GetSpellData()->range) + { + LogWrite(SPELL__DEBUG, 1, "Spell", "%s: Too far.", spell->GetName()); + zone->SendSpellFailedPacket(client, SPELL_ERROR_TOO_FAR_AWAY); + safe_delete(lua_spell); + return; + } + + if (caster->GetDistance(target) < spell->GetSpellData()->min_range) + { + LogWrite(SPELL__DEBUG, 1, "Spell", "%s: Too close.", spell->GetName()); + zone->SendSpellFailedPacket(client, SPELL_ERROR_TOO_CLOSE); + safe_delete(lua_spell); + return; + } + } + + if(target_type == SPELL_TARGET_SELF && spell->GetSpellData()->max_aoe_targets == 0) + { + if (harvest_spell) + { + LogWrite(SPELL__DEBUG, 1, "Spell", "%s: Harvest, Target Self, Max Targets = 0", spell->GetName()); + + if (!target || !target->IsGroundSpawn()) + { + LogWrite(SPELL__DEBUG, 1, "Spell", "%s: No target or not groundspawn.", spell->GetName()); + zone->SendSpellFailedPacket(client, SPELL_ERROR_NO_ELIGIBLE_TARGET); + safe_delete(lua_spell); + return; + } + } + else + { + LogWrite(SPELL__DEBUG, 1, "Spell", "%s: Target '%s' is Caster '%s'.", spell->GetName(), ( target ) ? target->GetName() : "None", caster->GetName()); + target = caster; + } + } + + // Is enemy spell AND direct-damage (no AE) + if (target_type == SPELL_TARGET_ENEMY && spell->GetSpellData()->max_aoe_targets == 0) + { + LogWrite(SPELL__DEBUG, 1, "Spell", "%s: Target Enemy (%s) and Max AE Targets = 0.", spell->GetName(), target->GetName()); + + if (spell->GetSpellData()->friendly_spell && target->IsPlayer() ) + { + LogWrite(SPELL__DEBUG, 1, "Spell", "%s: Is Friendly, Target is Player (%s).", spell->GetName(), target->GetName()); + + if (!target->IsEntity()) + { + LogWrite(SPELL__DEBUG, 1, "Spell", "%s: No target.", spell->GetName()); + zone->SendSpellFailedPacket(client, SPELL_ERROR_NO_ELIGIBLE_TARGET); + safe_delete(lua_spell); + return; + } + /*if (target->appearance.attackable) { + zone->SendSpellFailedPacket(client, SPELL_ERROR_NOT_A_FRIEND); + return; + }*/ + } + else if (spell->GetSpellData()->friendly_spell && target->IsNPC() && target->appearance.attackable) + { + LogWrite(SPELL__DEBUG, 1, "Spell", "%s: Is Not Friendly (friendly and NPC)", spell->GetName()); + + if (target->IsPet()) + { + if (((NPC*)target)->GetOwner()->IsNPC()) + { + zone->SendSpellFailedPacket(client, SPELL_ERROR_NOT_A_FRIEND); + safe_delete(lua_spell); + return; + } + } + else if (target->IsBot() && (caster->IsPlayer() || caster->IsBot())) { + // Needed so bots or player can cast friendly spells on bots + } + else + { + zone->SendSpellFailedPacket(client, SPELL_ERROR_NOT_A_FRIEND); + safe_delete(lua_spell); + return; + } + } + else if (spell->GetSpellData()->friendly_spell && target->IsNPC() && caster->IsNPC()) { + // TODO: faction checks? some other checks to prevent an npc casting a friendly spell on another npc + LogWrite(SPELL__DEBUG, 1, "Spell", "%s: NPC Cast", spell->GetName()); + } + else + { + LogWrite(SPELL__DEBUG, 1, "Spell", "%s: Is Not Friendly (catch all)", spell->GetName()); + + if (!target->IsEntity()) + { + LogWrite(SPELL__DEBUG, 1, "Spell", "%s: No target.", spell->GetName()); + zone->SendSpellFailedPacket(client, SPELL_ERROR_NO_ELIGIBLE_TARGET); + safe_delete(lua_spell); + return; + } + + if (caster == target || (!target->IsPlayer() && !target->appearance.attackable)) + { + LogWrite(SPELL__DEBUG, 1, "Spell", "%s: Not an Enemy (Target: %s).", spell->GetName(), target->GetName()); + zone->SendSpellFailedPacket(client, SPELL_ERROR_NOT_AN_ENEMY); + safe_delete(lua_spell); + return; + } + + if (!target->Alive()) + { + LogWrite(SPELL__DEBUG, 1, "Spell", "%s: Target is not alive (Target: %s).", spell->GetName(), target->GetName()); + zone->SendSpellFailedPacket(client, SPELL_ERROR_NOT_ALIVE); + safe_delete(lua_spell); + return; + } + + if (target->GetInvulnerable()) + { + LogWrite(SPELL__DEBUG, 1, "Spell", "%s: Target is invulnerable (Target: %s).", spell->GetName(), target->GetName()); + zone->SendSpellFailedPacket(client, SPELL_ERROR_TARGET_INVULNERABLE); + safe_delete(lua_spell); + return; + } + + if ((target->IsPlayer() || target->IsBot()) && (caster->IsPlayer() || caster->IsBot())) + { + LogWrite(SPELL__DEBUG, 1, "Spell", "%s: Target (%s) is player and not attackable.", spell->GetName(), target->GetName()); + zone->SendSpellFailedPacket(client, SPELL_ERROR_NOT_AN_ENEMY); + safe_delete(lua_spell); + return; + } + + if (target->IsPet() && ((NPC*)target)->GetOwner() && ((NPC*)target)->GetOwner() == caster) { + LogWrite(SPELL__DEBUG, 1, "Spell", "%s: Target (%s) is casters pet and not attackable by caster.", spell->GetName(), target->GetName()); + zone->SendSpellFailedPacket(client, SPELL_ERROR_NOT_AN_ENEMY); + safe_delete(lua_spell); + return; + } + } + } + + if (lua_spell->targets.size() == 0 && spell->GetSpellData()->max_aoe_targets == 0) + { + LogWrite(SPELL__ERROR, 0, "Spell", "SpellProcess::ProcessSpell Unable to find any spell targets for spell '%s'.", spell->GetName()); + safe_delete(lua_spell); + return; + } + + if(target_type == SPELL_TARGET_ENEMY_CORPSE || target_type == SPELL_TARGET_GROUP_CORPSE) + { + if(target->Alive()) + { + zone->SendSpellFailedPacket(client, SPELL_ERROR_NOT_DEAD); + safe_delete(lua_spell); + return; + } + if(target->IsPlayer() && zone->GetClientBySpawn(target)->GetCurrentRez()->active){ + zone->SendSpellFailedPacket(client, SPELL_ERROR_ALREADY_CAST); + safe_delete(lua_spell); + return; + } + } + + if(!CheckPower(lua_spell)) + { + zone->SendSpellFailedPacket(client, SPELL_ERROR_NOT_ENOUGH_POWER); + safe_delete(lua_spell); + return; + } + + if (!CheckHP(lua_spell)) + { + zone->SendSpellFailedPacket(client, SPELL_ERROR_NOT_ENOUGH_HEALTH); + safe_delete(lua_spell); + return; + } + + if (!CheckSavagery(lua_spell)) + { + zone->SendSpellFailedPacket(client, SPELL_ERROR_NOT_ENOUGH_SAVAGERY); + safe_delete(lua_spell); + return; + } + + if (!CheckDissonance(lua_spell)) + { + zone->SendSpellFailedPacket(client, SPELL_ERROR_NOT_ENOUGH_DISSONANCE); + safe_delete(lua_spell); + return; + } + + if (!CheckConcentration(lua_spell)) + { + zone->SendSpellFailedPacket(client, SPELL_ERROR_NOT_ENOUGH_CONC); + safe_delete(lua_spell); + return; + } + + // Precast in lua + if (lua_interface) { + bool result = false; + lua_interface->AddSpawnPointers(lua_spell, false, true); + if (lua_pcall(lua_spell->state, 2, 2, 0) == 0) { + result = lua_interface->GetBooleanValue(lua_spell->state, 1); + int8 error = lua_interface->GetInt8Value(lua_spell->state, 2) == 0 ? SPELL_ERROR_CANNOT_PREPARE : lua_interface->GetInt8Value(lua_spell->state, 2); + lua_interface->ResetFunctionStack(lua_spell->state); + + if (!result) { + zone->SendSpellFailedPacket(client, error); + safe_delete(lua_spell); + return; + } + } + else { + LogWrite(SPELL__DEBUG, 1, "Spell", "No precast function found for %s", lua_spell->spell->GetName()); + lua_interface->ResetFunctionStack(lua_spell->state); + } + } + else + LogWrite(SPELL__DEBUG, 1, "Spell", "Unable to do precast check as there was no lua_interface"); + + //Apply casting speed mod + spell->ModifyCastTime(caster); + + LockAllSpells(client); + + //cancel stealth effects on cast + if(caster->IsStealthed() || caster->IsInvis()) + caster->CancelAllStealth(); + + SendStartCast(lua_spell, client); + + if(spell->GetSpellData()->cast_time > 0) + { + CastTimer* cast_timer = new CastTimer; + cast_timer->entity_command = 0; + cast_timer->spell = lua_spell; + cast_timer->spell->caster = caster; + cast_timer->delete_timer = false; + cast_timer->timer = new Timer(spell->GetSpellData()->cast_time * 10); + cast_timer->zone = zone; + cast_timers.Add(cast_timer); + if(caster) + caster->IsCasting(true); + } + else + { + if(!CastProcessedSpell(lua_spell)) + { + safe_delete(lua_spell); + return; + } + } + + if(caster) + caster->GetZone()->SendCastSpellPacket(lua_spell, caster); + + } +} + +void SpellProcess::ProcessEntityCommand(ZoneServer* zone, EntityCommand* entity_command, Entity* caster, Spawn* target, bool lock) { + if (zone && entity_command && caster && target && !target->IsPlayer()) { + Client* client = zone->GetClientBySpawn(caster); + if (caster->GetDistance(target) > entity_command->distance) { + zone->SendSpellFailedPacket(client, SPELL_ERROR_TOO_FAR_AWAY); + return; + } + if (entity_command->cast_time > 0) { + PacketStruct* packet = configReader.getStruct("WS_StartCastSpell", client->GetVersion()); + if (packet) { + LockAllSpells(client); + packet->setDataByName("cast_time", entity_command->cast_time * 0.01); + packet->setMediumStringByName("spell_name", entity_command->name.c_str()); + EQ2Packet* outapp = packet->serialize(); + client->QueuePacket(outapp); + safe_delete(packet); + + CastTimer* cast_timer = new CastTimer; + cast_timer->caster = client; + cast_timer->entity_command = entity_command; + cast_timer->spell = 0; + cast_timer->delete_timer = false; + cast_timer->timer = new Timer(entity_command->cast_time * 10); + cast_timer->zone = zone; + cast_timers.Add(cast_timer); + caster->IsCasting(true); + } + } + else if (!CastProcessedEntityCommand(entity_command, client)) + return; + if (entity_command && entity_command->spell_visual > 0) + caster->GetZone()->SendCastEntityCommandPacket(entity_command, caster->GetID(), target->GetID()); + } +} + +bool SpellProcess::CastProcessedSpell(LuaSpell* spell, bool passive){ + if(!spell || !spell->caster || !spell->spell || spell->interrupted) + return false; + Client* client = 0; + if(spell->caster && spell->caster->IsPlayer()) + client = spell->caster->GetZone()->GetClientBySpawn(spell->caster); + if (spell->spell->GetSpellData()->max_aoe_targets > 0 && spell->targets.size() == 0) { + GetSpellTargetsTrueAOE(spell); + if (spell->targets.size() == 0) { + spell->caster->GetZone()->SendSpellFailedPacket(client, SPELL_ERROR_NO_TARGETS_IN_RANGE); + return false; + } + } + MutexList::iterator itr = active_spells.begin(); + bool processedSpell = false; + LuaSpell* replace_spell = 0; + // Check to see if we already casted this spell and it is in the active_spells list + /*while (itr.Next()) { + LuaSpell* luaspell = itr.value; + // Check to see if this is the same spell by comparing caster, spell id, and spell tier + if (luaspell->caster == spell->caster && luaspell->spell->GetSpellID() == spell->spell->GetSpellID() && luaspell->spell->GetSpellTier() == spell->spell->GetSpellTier() && luaspell->targets.size() == spell->targets.size()) { + vector::iterator itr; + vector::iterator itr2; + bool all_match = true; + // compare the target vector to make sure this is the same spell + for (itr = luaspell->targets.begin(); itr != luaspell->targets.end(); itr++) { + bool match = false; + for (itr2 = spell->targets.begin(); itr2 != spell->targets.end(); itr2++) { + if ((*itr) == (*itr2)) { + match = true; + break; + } + } + if (!match) { + all_match = false; + break; + } + } + if (all_match) { + // set a pointer to replace the spell in the active spell list so we don't have to run this loop again + replace_spell = luaspell; + // if friendly skip the calling of the lua function as they have already been called for the previous version of this spell + if (spell->spell->GetSpellData()->friendly_spell == 1) + processedSpell = true; + + break; + } + } + }*/ + if (!processedSpell) + processedSpell = ProcessSpell(spell); + + // Quick hack to prevent a crash on spells that zones the caster (Gate) + if (!spell->caster) + return true; + + ZoneServer* zone = spell->caster->GetZone(); + Spawn* target = 0; + if(processedSpell){ + for (int32 i = 0; i < spell->targets.size(); i++) { + target = zone->GetSpawnByID(spell->targets[i]); + if (!target) + continue; + + if (client && client->IsZoning()) + continue; + + if(spell->spell->GetSpellData()->success_message.length() > 0){ + if(client){ + string success_message = spell->spell->GetSpellData()->success_message; + if(success_message.find("%t") != string::npos) + success_message.replace(success_message.find("%t"), 2, spell->caster->GetName()); + client->Message(CHANNEL_COLOR_SPELL, success_message.c_str()); + } + } + if(spell->spell->GetSpellData()->effect_message.length() > 0){ + string effect_message = spell->spell->GetSpellData()->effect_message; + if(effect_message.find("%t") < 0xFFFFFFFF) + effect_message.replace(effect_message.find("%t"), 2, target->GetName()); + if (effect_message.find("%c") != string::npos) + effect_message.replace(effect_message.find("%c"), 2, spell->caster->GetName()); + spell->caster->GetZone()->SimpleMessage(CHANNEL_COLOR_SPELL_EFFECT, effect_message.c_str(), target, 50); + } + target->GetZone()->CallSpawnScript(target, SPAWN_SCRIPT_CASTED_ON, spell->caster, spell->spell->GetName()); + } + } + else{ + if (!passive) + SendFinishedCast(spell, client); + return false; + } + if(!spell->resisted && (spell->spell->GetSpellDuration() > 0 || spell->spell->GetSpellData()->duration_until_cancel)) { + for (int32 i = 0; i < spell->targets.size(); i++) { + + //LogWrite(SPELL__ERROR, 0, "Spell", "No precast function found for %s", ((Entity*)target)->GetName()); + target = zone->GetSpawnByID(spell->targets.at(i)); + + if (i == 0 && !spell->spell->GetSpellData()->not_maintained) { + spell->caster->AddMaintainedSpell(spell); + //((Entity*)target)->AddMaintainedSpell(spell); + LogWrite(SPELL__ERROR, 0, "AddMaintained", "%s", ((Entity*)target)->GetName()); + } + + SpellEffects* effect = ((Entity*)target)->GetSpellEffect(spell->spell->GetSpellID()); + if (effect && effect->tier > spell->spell->GetSpellTier()) { + if(client) { + spell->caster->GetZone()->SendSpellFailedPacket(client, SPELL_ERROR_TAKE_EFFECT_MOREPOWERFUL); + client->SimpleMessage(CHANNEL_COLOR_YELLOW, "The spell did not take hold as the target already has a better spell of this type."); + } + } + else{ + ((Entity*)target)->AddSpellEffect(spell); + if(spell->spell->GetSpellData()->det_type > 0) + ((Entity*)target)->AddDetrimentalSpell(spell); + } + } + + if (replace_spell) { + active_spells.Remove(replace_spell); + active_spells.Add(spell); + } + else { + active_spells.Add(spell); + } + + if (spell->num_triggers > 0) + ClientPacketFunctions::SendMaintainedExamineUpdate(client, spell->slot_pos, spell->num_triggers, 0); + if (spell->damage_remaining > 0) + ClientPacketFunctions::SendMaintainedExamineUpdate(client, spell->slot_pos, spell->damage_remaining, 1); + + spell->caster->GetZone()->TriggerCharSheetTimer(); + } + spell->num_calls = 1; + if(!spell->resisted && spell->spell->GetSpellData()->duration1 > 0){ + spell->timer.Start(); + if(spell->spell->GetSpellData()->call_frequency > 0) + spell->timer.SetTimer(spell->spell->GetSpellData()->call_frequency*100); + else + spell->timer.SetTimer(spell->spell->GetSpellData()->duration1*100); + if (active_spells.count(spell) > 0) { + active_spells.Add(spell); + } + } + + // if the caster is a player and the spell is a tradeskill spell check for a tradeskill event + if (client && spell->spell->GetSpellData()->spell_book_type == SPELL_BOOK_TYPE_TRADESKILL) + client->GetCurrentZone()->GetTradeskillMgr()->CheckTradeskillEvent(client, spell->spell->GetSpellData()->icon); + + if (spell->spell->GetSpellData()->friendly_spell && zone->GetSpawnByID(spell->initial_target)) + spell->caster->CheckProcs(PROC_TYPE_BENEFICIAL, zone->GetSpawnByID(spell->initial_target)); + // Check HO's + if (client) { + MSoloHO.writelock(__FUNCTION__, __LINE__); + MGroupHO.writelock(__FUNCTION__, __LINE__); + if (m_soloHO.count(client) > 0) { + bool match = false; + LogWrite(SPELL__ERROR, 0, "HO", "target = %u", m_soloHO[client]->GetTarget()); + spell->MSpellTargets.readlock(__FUNCTION__, __LINE__); + for (int8 i = 0; i < spell->targets.size(); i++) { + LogWrite(SPELL__ERROR, 0, "HO", "%u", spell->targets.at(i)); + if (spell->targets.at(i) == m_soloHO[client]->GetTarget()) { + match = true; + LogWrite(SPELL__ERROR, 0, "HO", "match found"); + break; + } + } + spell->MSpellTargets.releasereadlock(__FUNCTION__, __LINE__); + if (match && m_soloHO[client]->UpdateHeroicOP(spell->spell->GetSpellIconHeroicOp())) { + ClientPacketFunctions::SendHeroicOPUpdate(client, m_soloHO[client]); + if (m_soloHO[client]->GetComplete() > 0) { + Spell* ho_spell = master_spell_list.GetSpell(m_soloHO[client]->GetWheel()->spell_id, 1); + if (ho_spell) + client->GetCurrentZone()->ProcessSpell(ho_spell, client->GetPlayer(), spell->caster->GetZone()->GetSpawnByID(m_soloHO[client]->GetTarget())); + else + LogWrite(SPELL__ERROR, 0, "HO", "Invalid spell for a HO, spell id = %u", m_soloHO[client]->GetWheel()->spell_id); + + safe_delete(m_soloHO[client]); + m_soloHO.erase(client); + } + } + } + else if (client->GetPlayer()->GetGroupMemberInfo() && m_groupHO.count(client->GetPlayer()->GetGroupMemberInfo()->group_id)) { + int32 group_id = client->GetPlayer()->GetGroupMemberInfo()->group_id; + spell->MSpellTargets.readlock(__FUNCTION__, __LINE__); + if (spell->targets.at(0) == m_groupHO[group_id]->GetTarget() && m_groupHO[group_id]->UpdateHeroicOP(spell->spell->GetSpellIconHeroicOp())) { + spell->MSpellTargets.releasereadlock(__FUNCTION__, __LINE__); + + world.GetGroupManager()->GroupLock(__FUNCTION__, __LINE__); + deque::iterator itr; + deque* members = world.GetGroupManager()->GetGroupMembers(group_id); + for (itr = members->begin(); itr != members->end(); itr++) { + if ((*itr)->client) + ClientPacketFunctions::SendHeroicOPUpdate((*itr)->client, m_groupHO[group_id]); + } + world.GetGroupManager()->ReleaseGroupLock(__FUNCTION__, __LINE__); + + if (m_groupHO[group_id]->GetComplete() > 0) { + Spell* ho_spell = master_spell_list.GetSpell(m_groupHO[group_id]->GetWheel()->spell_id, 1); + if (ho_spell) + client->GetCurrentZone()->ProcessSpell(ho_spell, client->GetPlayer(), spell->caster->GetZone()->GetSpawnByID(spell->targets.at(0))); + else + LogWrite(SPELL__ERROR, 0, "HO", "Invalid spell for a HO, spell id = %u", m_groupHO[group_id]->GetWheel()->spell_id); + + safe_delete(m_groupHO[group_id]); + m_groupHO.erase(group_id); + } + } + else + spell->MSpellTargets.releasereadlock(__FUNCTION__, __LINE__); + } + MGroupHO.releasewritelock(__FUNCTION__, __LINE__); + MSoloHO.releasewritelock(__FUNCTION__, __LINE__); + } + + if (spell->spell->GetSpellData()->friendly_spell == 1 && spell->initial_target) + spell->caster->CheckProcs(PROC_TYPE_BENEFICIAL, spell->caster->GetZone()->GetSpawnByID(spell->initial_target)); + + if (!passive) + SendFinishedCast(spell, client); + + return true; +} + +bool SpellProcess::CastProcessedEntityCommand(EntityCommand* entity_command, Client* client) { + bool ret = false; + if (entity_command && client) { + UnlockAllSpells(client); + client->GetPlayer()->IsCasting(false); + if (entity_command->cast_time == 0) { + client->GetPlayer()->GetZone()->CallSpawnScript(client->GetPlayer()->GetTarget(), SPAWN_SCRIPT_CASTED_ON, client->GetPlayer(), entity_command->command.c_str()); + ret = true;; + } + if (!ret) { + PacketStruct* packet = configReader.getStruct("WS_FinishCastSpell", client->GetVersion()); + if (packet) { + packet->setMediumStringByName("spell_name", entity_command->name.c_str()); + client->QueuePacket(packet->serialize()); + safe_delete(packet); + SendSpellBookUpdate(client); + client->GetPlayer()->GetZone()->CallSpawnScript(client->GetPlayer()->GetTarget(), SPAWN_SCRIPT_CASTED_ON, client->GetPlayer(), entity_command->command.c_str()); + ret = true; + } + } + if (ret) { + EQ2_16BitString command; + command.data = entity_command->command; + command.size = entity_command->command.length(); + int32 handler = commands.GetCommandHandler(command.data.c_str()); + if (handler != 0xFFFFFFFF && handler < 999) + commands.Process(handler, &command, client); + } + } + return ret; +} + +void SpellProcess::Interrupted(Entity* caster, Spawn* interruptor, int16 error_code, bool cancel, bool from_movement) +{ + if(caster) + { + LogWrite(SPELL__DEBUG, 0, "Spell", "'%s' is Interrupting spell of '%s'...", interruptor ? interruptor->GetName() : "unknown", caster->GetName()); + LuaSpell* spell = GetLuaSpell(caster); + + if (spell && ((from_movement && !spell->spell->GetSpellData()->cast_while_moving) || (!from_movement && spell->spell->GetSpellData()->interruptable) || + cancel)) + { + Spawn* target = GetSpellTarget(caster); + InterruptStruct* interrupt = new InterruptStruct; + interrupt->interrupted = caster; + interrupt->spell = spell; + interrupt->target = target; + interrupt->error_code = error_code; + spell->interrupted = true; + interrupt_list.Add(interrupt); + + Client* client = 0; + if(interruptor && interruptor->IsPlayer()) + { + client = interruptor->GetZone()->GetClientBySpawn(interruptor); + client->Message(CHANNEL_COLOR_SPELL_INTERRUPT, "You interrupt %s's ability to cast!", interruptor->GetName()); + } + + } + } +} + +void SpellProcess::RemoveSpellTimersFromSpawn(Spawn* spawn, bool remove_all, bool delete_recast){ + int32 i = 0; + if(cast_timers.size() > 0){ + CastTimer* cast_timer = 0; + MutexList::iterator itr = cast_timers.begin(); + while(itr.Next()){ + cast_timer = itr->value; + if(cast_timer && cast_timer->spell && cast_timer->spell->caster == spawn){ + cast_timer->spell->caster = 0; + cast_timer->delete_timer = true; + } + } + } + if(remove_all){ + LuaSpell* spell = 0; + MutexList::iterator itr = active_spells.begin(); + while(itr.Next()){ + spell = itr->value; + if (!spell) + continue; + if (spell->spell->GetSpellData()->persist_though_death) + continue; + if(spell->caster == spawn){ + DeleteCasterSpell(spell); + continue; + } + spell->MSpellTargets.readlock(__FUNCTION__, __LINE__); + for (i = 0; i < spell->targets.size(); i++){ + if (spawn->GetID() == spell->targets.at(i)){ + if (spawn->IsEntity()) + ((Entity*)spawn)->RemoveSpellEffect(spell); + RemoveTargetFromSpell(spell, spawn); + break; + } + } + spell->MSpellTargets.releasereadlock(__FUNCTION__, __LINE__); + } + if(recast_timers.size() > 0 && delete_recast){ + RecastTimer* recast_timer = 0; + MutexList::iterator itr = recast_timers.begin(); + while(itr.Next()){ + recast_timer = itr->value; + if(recast_timer && recast_timer->caster == spawn){ + safe_delete(recast_timer->timer); + recast_timers.Remove(recast_timer, true); + } + } + } + if(spell_que.size() > 0 && spawn->IsEntity()){ + spell_que.erase((Entity*)spawn); + } + if(interrupt_list.size() > 0){ + InterruptStruct* interrupt = 0; + MutexList::iterator itr = interrupt_list.begin(); + while(itr.Next()){ + interrupt = itr->value; + if(interrupt && interrupt->interrupted == spawn){ + interrupt_list.Remove(interrupt); + } + } + } + } +} + +void SpellProcess::GetSpellTargets(LuaSpell* luaspell) +{ + if (luaspell && luaspell->spell && luaspell->caster && luaspell->spell->GetSpellData()->max_aoe_targets == 0) + { + int8 target_type = luaspell->spell->GetSpellData()->target_type; + Spawn* caster = luaspell->caster; + Spawn* target = caster->GetZone()->GetSpawnByID(luaspell->initial_target); + SpellData* data = luaspell->spell->GetSpellData(); + bool implied = false; + Spawn* secondary_target = nullptr; + + //implied target check -- only use this for players + if (target && (target_type == SPELL_TARGET_ENEMY || target_type == SPELL_TARGET_ENEMY_CORPSE || target_type == SPELL_TARGET_GROUP_CORPSE || target_type == SPELL_TARGET_OTHER_GROUP_AE)) + { + if (caster->IsPlayer() && target->HasTarget()) + { + secondary_target = target->GetTarget(); + if (secondary_target) { + // check if spell is friendly + if (data->friendly_spell) { + //if target is NPC (and not a bot) on friendly spell, check to see if target is friendly + if (target->IsNPC() && !target->IsBot()) { + if (!target->IsPet() || (target->IsPet() && ((NPC*)target)->GetOwner()->IsNPC())) { + if (secondary_target->IsPlayer()) { + implied = true; + } + else if (secondary_target->IsPet() && ((NPC*)secondary_target)->GetOwner()->IsPlayer()) + implied = true; + } + } + } // if spell is not friendly + else { // check if there is an implied target for this non-friendly spell + if (target->IsPlayer() || (target->IsPet() && ((NPC*)target)->GetOwner()->IsPlayer())) { + if (secondary_target->IsNPC()) { + if (!secondary_target->IsPet() || (secondary_target->IsPet() && ((NPC*)secondary_target)->GetOwner()->IsNPC())) { + implied = true; + } + } + } + } // end friendly spell check + } + } + else if (caster->IsPlayer()) { + if (data->friendly_spell) { + if (target->IsNPC() && !target->IsBot()) { + if (!target->IsPet() || (target->IsPet() && ((NPC*)target)->GetOwner()->IsNPC())) { + target = caster; + luaspell->initial_target = caster->GetID(); + } + } + } + } + } + else if (target_type == SPELL_TARGET_GROUP_AE || target_type == SPELL_TARGET_RAID_AE) { + target = caster; + luaspell->initial_target = caster->GetID(); + } + else if (target_type == SPELL_TARGET_SELF){ + target = caster; + luaspell->initial_target = caster->GetID(); + } + + //if using implied target, target = the implied target + if (implied) + { + target = secondary_target; + luaspell->initial_target = secondary_target->GetID(); + } + + luaspell->MSpellTargets.writelock(__FUNCTION__, __LINE__); + // Group AE type NOTE: Add support for RAID AE to affect raid members once raids have been completed + if (target_type == SPELL_TARGET_GROUP_AE || target_type == SPELL_TARGET_RAID_AE) + { + // is friendly + if (data->friendly_spell) + { + // caster is an Entity + if (luaspell->caster->IsEntity()) + { + // entity caster is in a player group + if (((Entity*)caster)->GetGroupMemberInfo()) + { + world.GetGroupManager()->GroupLock(__FUNCTION__, __LINE__); + + // get group members + deque* members = world.GetGroupManager()->GetGroupMembers(((Entity*)caster)->GetGroupMemberInfo()->group_id); + deque::iterator itr; + + // iterate through list of group members + for (itr = members->begin(); itr != members->end(); itr++) + { + // get group member player info + Entity* group_member = (*itr)->member; + + // if the group member is in the casters zone, and is alive + if (group_member->GetZone() == luaspell->caster->GetZone() && group_member->Alive()){ + luaspell->targets.push_back(group_member->GetID()); + if (group_member->HasPet()){ + Entity* pet = group_member->GetPet(); + if (!pet) + pet = group_member->GetCharmedPet(); + if (pet) + luaspell->targets.push_back(pet->GetID()); + } + } + } + + world.GetGroupManager()->ReleaseGroupLock(__FUNCTION__, __LINE__); + } + else + luaspell->targets.push_back(caster->GetID()); // else caster is not in a group, thus alone + } + else if (caster->IsNPC()) // caster is NOT a player + { + // caster is NPC and in a spawn group with other NPCs + vector* group = ((NPC*)caster)->GetSpawnGroup(); + if (group) + { + vector::iterator itr; + + for (itr = group->begin(); itr != group->end(); itr++) + { + Spawn* group_member = *itr; + + if (group_member->IsNPC() && group_member->Alive()){ + luaspell->targets.push_back(group_member->GetID()); + if (((Entity*)group_member)->HasPet()){ + Entity* pet = ((Entity*)group_member)->GetPet(); + if (pet) + luaspell->targets.push_back(pet->GetID()); + pet = ((Entity*)group_member)->GetCharmedPet(); + if (pet) + luaspell->targets.push_back(pet->GetID()); + } + } + } + } + else + luaspell->targets.push_back(caster->GetID()); + + safe_delete(group); + } // end is player + } // end is friendly + } // end is Group AE + + else if (target_type == SPELL_TARGET_SELF && caster) + luaspell->targets.push_back(caster->GetID()); // if spell is SELF, return caster + + else if (target_type == SPELL_TARGET_CASTER_PET && caster && caster->IsEntity() && ((Entity*)caster)->HasPet()) { + if (((Entity*)caster)->GetPet()) + luaspell->targets.push_back(((Entity*)caster)->GetPet()->GetID()); + if (((Entity*)caster)->GetCharmedPet()) + luaspell->targets.push_back(((Entity*)caster)->GetCharmedPet()->GetID()); + } + + else if (target_type == SPELL_TARGET_ENEMY && target && target->Alive()) // if target is enemy, and is alive + { + // if friendly spell + if (data->friendly_spell > 0) + { + // if caster is a player + if (caster->IsPlayer()) + { + // if spell can affect raid, only group members or is a group spell + if (data->can_effect_raid > 0 || data->affect_only_group_members > 0 || data->group_spell > 0) + { + // if caster is in a group, and target is a player and targeted player is a group member + if (((Player*)caster)->GetGroupMemberInfo() && (target->IsPlayer() || target->IsBot()) && ((Player*)caster)->IsGroupMember((Entity*)target)) + luaspell->targets.push_back(target->GetID()); // return the target + else + luaspell->targets.push_back(caster->GetID()); // else return the caster + } + else if (target->IsPlayer() || target->IsBot()) // else it is not raid, group only or group spell + luaspell->targets.push_back(target->GetID()); // return target for single spell + else + luaspell->targets.push_back(caster->GetID()); // and if no target, cast on self + } + else if (caster->IsNPC()) // caster is an NPC + { + // if NPC's spell can affect raid, only group members or is a group spell + if (data->can_effect_raid > 0 || data->affect_only_group_members > 0 || data->group_spell > 0) + { + if (caster->IsBot() && (target->IsBot() || target->IsPlayer())) { + GroupMemberInfo* gmi = ((Entity*)caster)->GetGroupMemberInfo(); + if (gmi && target->IsEntity() && world.GetGroupManager()->IsInGroup(gmi->group_id, (Entity*)target)) { + luaspell->targets.push_back(target->GetID()); // return the target + } + else + luaspell->targets.push_back(caster->GetID()); // else return the caster + } + // if NPC caster is in a group, and target is a player and targeted player is a group member + else if (((NPC*)caster)->HasSpawnGroup() && target->IsNPC() && ((NPC*)caster)->IsInSpawnGroup((NPC*)target)) + luaspell->targets.push_back(target->GetID()); // return the target + else + luaspell->targets.push_back(caster->GetID()); // else return the caster + } + else if (target->IsNPC()) + luaspell->targets.push_back(target->GetID()); // return target for single spell + else { + if (caster->IsBot() && (target->IsBot() || target->IsPlayer())) + luaspell->targets.push_back(target->GetID()); + else + luaspell->targets.push_back(caster->GetID()); // and if no target, cast on self + } + } // end is player + } // end is friendly + + else if (data->group_spell > 0) // is not friendly, but is a group spell + { + // target is non-player + if (target->IsNPC()) + { + // Check to see if the npc is a spawn group by getting the group and checikng if valid + vector* group = ((NPC*)target)->GetSpawnGroup(); + if (group) + { + vector::iterator itr; + + // iterate through spawn group members + for (itr = group->begin(); itr != group->end(); itr++) + { + Spawn* group_member = *itr; + + // if NPC group member is (still) an NPC (wtf?) and is alive, send the NPC group member back as a successful target of non-friendly spell + if (group_member->IsNPC() && group_member->Alive() && group_member != target && !((Entity*)group_member)->IsAOEImmune()) + luaspell->targets.push_back(group_member->GetID()); + + // note: this should generate some hate towards the caster + } + } // end is spawngroup + else + luaspell->targets.push_back(target->GetID()); // return single target NPC for non-friendly spell + + safe_delete(group); + } // end is NPC + + else if (target->IsPlayer() && caster->IsNPC()) // the NPC is casting on a player + { + // player is in a group + if (((Player*)target)->GetGroupMemberInfo()) + { + world.GetGroupManager()->GroupLock(__FUNCTION__, __LINE__); + + deque::iterator itr; + deque* members = world.GetGroupManager()->GetGroupMembers(((Player*)target)->GetGroupMemberInfo()->group_id); + + // iterate through players group members + for (itr = members->begin(); itr != members->end(); itr++) + { + Entity* group_member = (*itr)->member; + + // if the group member is in the same zone as caster, and group member is alive, and group member is within distance + if (group_member->GetZone() == caster->GetZone() && group_member->Alive() && caster->GetDistance(group_member) <= data->range + && (group_member == target || !group_member->IsAOEImmune())) + luaspell->targets.push_back(group_member->GetID()); // add as target + } + + world.GetGroupManager()->ReleaseGroupLock(__FUNCTION__, __LINE__); + } + else + luaspell->targets.push_back(target->GetID()); // player not in group + } // end is caster player or npc + } + else + luaspell->targets.push_back(target->GetID()); // is not friendly nor a group spell + } + //Rez spells + else if(target_type == SPELL_TARGET_ENEMY_CORPSE){ + //is friendly + if(data->friendly_spell){ + //target is player + if(target->IsPlayer()){ + luaspell->targets.push_back(target->GetID()); + } + } + } + else if(target_type == SPELL_TARGET_GROUP_CORPSE){ + //is friendly + if(data->friendly_spell){ + //target is player + if(target && target->IsPlayer()){ + //if target has group + if(((Player*)target)->GetGroupMemberInfo()) { + world.GetGroupManager()->GroupLock(__FUNCTION__, __LINE__); + + deque::iterator itr; + deque* members = world.GetGroupManager()->GetGroupMembers(((Player*)target)->GetGroupMemberInfo()->group_id); + Entity* group_member = 0; + for(itr = members->begin(); itr != members->end(); itr++) { + group_member = (*itr)->member; + //Check if group member is in the same zone in range of the spell and dead + if(group_member->GetZone() == target->GetZone() && !group_member->Alive() && target->GetDistance(group_member) <= data->radius){ + luaspell->targets.push_back(group_member->GetID()); + } + } + + world.GetGroupManager()->ReleaseGroupLock(__FUNCTION__, __LINE__); + } + else + luaspell->targets.push_back(target->GetID()); + } + } + } + luaspell->MSpellTargets.releasewritelock(__FUNCTION__, __LINE__); + } + + if (luaspell && luaspell->targets.size() > 20) + LogWrite(SPELL__WARNING, 0, "Spell", "Warning in %s: Size of targets array is %u", __FUNCTION__, luaspell->targets.size()); +} + +void SpellProcess::GetSpellTargetsTrueAOE(LuaSpell* luaspell) { + if (luaspell && luaspell->caster && luaspell->spell && luaspell->spell->GetSpellData()->max_aoe_targets > 0) { + if (luaspell->caster->HasTarget() && luaspell->caster->GetTarget() != luaspell->caster){ + //Check if the caster has an implied target + if (luaspell->caster->GetDistance(luaspell->caster->GetTarget()) <= luaspell->spell->GetSpellData()->radius) + luaspell->initial_target = luaspell->caster->GetTarget()->GetID(); + } + int32 ignore_target = 0; + vector spawns = luaspell->caster->GetZone()->GetAttackableSpawnsByDistance(luaspell->caster, luaspell->spell->GetSpellData()->radius); + luaspell->MSpellTargets.writelock(__FUNCTION__, __LINE__); + for (int8 i = 0; i < spawns.size(); i++) { + Spawn* spawn = spawns.at(i); + if (i == 0){ + if (luaspell->initial_target && luaspell->caster->GetID() != luaspell->initial_target){ + //this is the "Direct" target and aoe can't be avoided + luaspell->targets.push_back(luaspell->initial_target); + ignore_target = luaspell->initial_target; + } + if (luaspell->targets.size() >= luaspell->spell->GetSpellData()->max_aoe_targets) + break; + } + //If we have already added this spawn, check the next spawn in the list + if (spawn && spawn->GetID() == ignore_target){ + i++; + if (i < spawns.size()) + spawn = spawns.at(i); + else + break; + } + if (spawn){ + //If this spawn is immune to aoe, continue + if (((Entity*)spawn)->IsAOEImmune()) + continue; + luaspell->targets.push_back(spawn->GetID()); + } + + if (luaspell->targets.size() >= luaspell->spell->GetSpellData()->max_aoe_targets) + break; + } + luaspell->MSpellTargets.releasewritelock(__FUNCTION__, __LINE__); + } + if (luaspell->targets.size() > 20) + LogWrite(SPELL__DEBUG, 0, "Spell", "Warning in SpellProcess::GetSpellTargetsTrueAOE Size of targets array is %u", luaspell->targets.size()); +} + +void SpellProcess::AddSpellScriptTimer(SpellScriptTimer* timer) { + MSpellScriptTimers.writelock(__FUNCTION__, __LINE__); + m_spellScriptList.push_back(timer); + MSpellScriptTimers.releasewritelock(__FUNCTION__, __LINE__); +} + +void SpellProcess::RemoveSpellScriptTimer(SpellScriptTimer* timer) { + vector::iterator itr; + MSpellScriptTimers.writelock(__FUNCTION__, __LINE__); + for (itr = m_spellScriptList.begin(); itr != m_spellScriptList.end(); itr++) { + if ((*itr) == timer) { + if ((*itr) && (*itr)->deleteWhenDone && lua_interface) { + lua_interface->AddPendingSpellDelete(timer->spell); + } + m_spellScriptList.erase(itr); + break; + } + } + MSpellScriptTimers.releasewritelock(__FUNCTION__, __LINE__); +} + +void SpellProcess::CheckSpellScriptTimers() { + vector::iterator itr; + vector temp_list; + + MSpellScriptTimers.readlock(__FUNCTION__, __LINE__); + for (itr = m_spellScriptList.begin(); itr != m_spellScriptList.end(); itr++) { + if (Timer::GetCurrentTime2() >= (*itr)->time) { + temp_list.push_back((*itr)); + ProcessSpell((*itr)->spell, false, (*itr)->customFunction.c_str(), (*itr)); + } + } + MSpellScriptTimers.releasereadlock(__FUNCTION__, __LINE__); + + for (itr = temp_list.begin(); itr != temp_list.end(); itr++) { + RemoveSpellScriptTimer(*itr); + safe_delete(*itr); + } +} + +bool SpellProcess::SpellScriptTimersHasSpell(LuaSpell* spell) { + bool ret = false; + vector::iterator itr; + + MSpellScriptTimers.readlock(__FUNCTION__, __LINE__); + for (itr = m_spellScriptList.begin(); itr != m_spellScriptList.end(); itr++) { + SpellScriptTimer* timer = *itr; + if (timer && timer->spell == spell) { + ret = true; + break; + } + } + MSpellScriptTimers.releasereadlock(__FUNCTION__, __LINE__); + + return ret; +} + +void SpellProcess::ClearSpellScriptTimerList() { + vector::iterator itr; + MSpellScriptTimers.writelock(__FUNCTION__, __LINE__); + + for(itr = m_spellScriptList.begin(); itr != m_spellScriptList.end(); itr++) { + if ((*itr) && (*itr)->deleteWhenDone && lua_interface) + lua_interface->AddPendingSpellDelete((*itr)->spell); + + safe_delete((*itr)); + } + + m_spellScriptList.clear(); + MSpellScriptTimers.releasewritelock(__FUNCTION__, __LINE__); +} + +void SpellProcess::RemoveTargetFromSpell(LuaSpell* spell, Spawn* target){ + if (!spell || !target) + return; + + MRemoveTargetList.writelock(__FUNCTION__, __LINE__); + if (!remove_target_list[spell]) + remove_target_list[spell] = new vector; + remove_target_list[spell]->push_back(target); + MRemoveTargetList.releasewritelock(__FUNCTION__, __LINE__); +} + +void SpellProcess::CheckRemoveTargetFromSpell(LuaSpell* spell, bool allow_delete){ + if (!spell) + return; + + if (remove_target_list.size() > 0){ + map*>::iterator remove_itr; + vector::iterator remove_target_itr; + vector::iterator target_itr; + vector* targets; + vector* remove_targets = 0; + Spawn* remove_spawn = 0; + bool should_delete = false; + + MRemoveTargetList.writelock(__FUNCTION__, __LINE__); + for (remove_itr = remove_target_list.begin(); remove_itr != remove_target_list.end(); remove_itr++){ + if (remove_itr->first == spell){ + targets = &spell->targets; + remove_targets = remove_itr->second; + if (remove_targets && targets){ + for (remove_target_itr = remove_targets->begin(); remove_target_itr != remove_targets->end(); remove_target_itr++){ + remove_spawn = (*remove_target_itr); + if (remove_spawn){ + spell->MSpellTargets.writelock(__FUNCTION__, __LINE__); + for (target_itr = targets->begin(); target_itr != targets->end(); target_itr++){ + if (remove_spawn->GetID() == (*target_itr)){ + targets->erase(target_itr); + if (remove_spawn->IsEntity()) + ((Entity*)remove_spawn)->RemoveEffectsFromLuaSpell(spell); + break; + } + } + spell->MSpellTargets.releasewritelock(__FUNCTION__, __LINE__); + if (targets->size() == 0 && allow_delete){ + should_delete = true; + break; + } + } + } + } + break; + } + } + remove_target_list.erase(spell); + if (remove_targets) + remove_targets->clear(); + safe_delete(remove_targets); + MRemoveTargetList.releasewritelock(__FUNCTION__, __LINE__); + if (should_delete) + DeleteCasterSpell(spell); + } +} + +bool SpellProcess::AddHO(Client* client, HeroicOP* ho) { + bool ret = true; + + if (client && ho) { + MSoloHO.writelock(__FUNCTION__, __LINE__); + if (m_soloHO.count(client) > 0) { + if (m_soloHO[client]->GetWheel()) { + ret = false; + } + else { + safe_delete(m_soloHO[client]); + m_soloHO[client] = ho; + } + } + else + m_soloHO[client] = ho; + MSoloHO.releasewritelock(__FUNCTION__, __LINE__); + } + + return ret; +} + +bool SpellProcess::AddHO(int32 group_id, HeroicOP* ho) { + bool ret = true; + + if (group_id > 0 && ho) { + MGroupHO.writelock(__FUNCTION__, __LINE__); + if (m_groupHO.count(group_id) > 0) { + if (m_groupHO[group_id]->GetWheel()) { + ret = false; + } + else { + safe_delete(m_groupHO[group_id]); + m_groupHO[group_id] = ho; + } + } + else + m_groupHO[group_id] = ho; + MGroupHO.releasewritelock(__FUNCTION__, __LINE__); + } + + return ret; +} + +void SpellProcess::KillHOBySpawnID(int32 spawn_id) { + // Check solo HO's + MSoloHO.writelock(__FUNCTION__, __LINE__); + map::iterator itr = m_soloHO.begin(); + map::iterator delete_itr; + while (itr != m_soloHO.end()) { + if (itr->second->GetTarget() == spawn_id) { + itr->second->SetComplete(1); + ClientPacketFunctions::SendHeroicOPUpdate(itr->first, itr->second); + delete_itr = itr; + safe_delete(itr->second); + itr++; + m_soloHO.erase(delete_itr); + } + else + itr++; + } + MSoloHO.releasewritelock(__FUNCTION__, __LINE__); + + // Check Group HO's + MGroupHO.writelock(__FUNCTION__, __LINE__); + map::iterator itr2 = m_groupHO.begin(); + map::iterator delete_itr2; + while (itr2 != m_groupHO.end()) { + if (itr2->second->GetTarget() == spawn_id) { + itr2->second->SetComplete(1); + + world.GetGroupManager()->GroupLock(__FUNCTION__ , __LINE__); + deque::iterator itr3; + deque* members = world.GetGroupManager()->GetGroupMembers(itr2->first); + for (itr3 = members->begin(); itr3 != members->end(); itr3++) { + if ((*itr3)->client) + ClientPacketFunctions::SendHeroicOPUpdate((*itr3)->client, itr2->second); + } + world.GetGroupManager()->ReleaseGroupLock(__FUNCTION__, __LINE__); + + delete_itr2 = itr2; + safe_delete(itr2->second); + itr2++; + m_groupHO.erase(delete_itr2); + } + else + itr2++; + } + MGroupHO.releasewritelock(__FUNCTION__, __LINE__); +} + +void SpellProcess::AddSpellCancel(LuaSpell* spell){ + MSpellCancelList.writelock(__FUNCTION__, __LINE__); + SpellCancelList.push_back(spell); + MSpellCancelList.releasewritelock(__FUNCTION__, __LINE__); +} \ No newline at end of file diff --git a/EQ2/source/WorldServer/SpellProcess.h b/EQ2/source/WorldServer/SpellProcess.h new file mode 100644 index 000000000..f3aff2c0e --- /dev/null +++ b/EQ2/source/WorldServer/SpellProcess.h @@ -0,0 +1,404 @@ +/* + EQ2Emulator: Everquest II Server Emulator + Copyright (C) 2007 EQ2EMulator Development Team (http://www.eq2emulator.net) + + This file is part of EQ2Emulator. + + EQ2Emulator is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + EQ2Emulator is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with EQ2Emulator. If not, see . +*/ +#ifndef __EQ2_SPELL_PROCESS__ +#define __EQ2_SPELL_PROCESS__ +#include "client.h" +#include "Spells.h" +#include "zoneserver.h" +#include "LuaInterface.h" +#include "MutexMap.h" +#include "MutexList.h" +#include "World.h" +#include "HeroicOp/HeroicOp.h" + +#define MODIFY_HEALTH 1 +#define MODIFY_FOCUS 2 +#define MODIFY_DEFENSE 3 +#define MODIFY_POWER 4 +#define MODIFY_SPEED 5 +#define MODIFY_INT 6 +#define MODIFY_WIS 7 +#define MODIFY_STR 8 +#define MODIFY_AGI 9 +#define MODIFY_STA 10 +#define MODIFY_COLD_RESIST 11 +#define MODIFY_HEAT_RESIST 12 +#define MODIFY_DISEASE_RESIST 13 +#define MODIFY_POISON_RESIST 14 +#define MODIFY_MAGIC_RESIST 15 +#define MODIFY_MENTAL_RESIST 16 +#define MODIFY_DIVINE_RESIST 17 +#define MODIFY_ATTACK 18 +#define MODIFY_MITIGATION 19 +#define MODIFY_AVOIDANCE 20 +#define MODIFY_CONCENTRATION 21 +#define MODIFY_EXP 22 +#define MODIFY_FACTION 23 +#define CHANGE_SIZE 24 +#define CHANGE_RACE 25 +#define CHANGE_LOCATION 26 +#define CHANGE_ZONE 27 +#define CHANGE_PREFIX_TITLE 28 +#define CHANGE_DEITY 29 +#define CHANGE_LAST_NAME 30 +#define MODIFY_HASTE 31 +#define MODIFY_SKILL 32 +#define CHANGE_TARGET 33 +#define CHANGE_LEVEL 34 +#define MODIFY_SPELL_CAST_TIME 35 +#define MODIFY_SPELL_POWER_REQ 36 +#define MODIFY_SPELL_HEALTH_REQ 37 +#define MODIFY_SPELL_RECOVERY 38 +#define MODIFY_SPELL_RECAST_TIME 39 +#define MODIFY_SPELL_RADIUS 40 +#define MODIFY_SPELL_AOE_TARGETS 41 +#define MODIFY_SPELL_RANGE 42 +#define MODIFY_SPELL_DURATION 43 +#define MODIFY_SPELL_RESISTIBILITY 44 +#define MODIFY_DAMAGE 45 +#define MODIFY_DELAY 46 +#define MODIFY_TRADESKILL_EXP 47 +#define ADD_MOUNT 48 +#define REMOVE_MOUNT 49 +#define MODIFY_SPELL_CRIT_CHANCE 50 +#define MODIFY_CRIT_CHANCE 51 +#define SUMMON_ITEM 52 +#define MODIFY_JUMP 53 +#define MODIFY_FALL_SPEED 54 +#define INFLICT_DAMAGE 55 +#define ADD_DOT 56 +#define REMOVE_DOT 57 +#define HEAL_TARGET 58 +#define HEAL_AOE 59 +#define INFLICT_AOE_DAMAGE 60 +#define HEAL_GROUP_AOE 61 +#define ADD_AOE_DOT 62 +#define REMOVE_AOE_DOT 63 +#define ADD_HOT 64 +#define REMOVE_HOT 65 +#define MODIFY_AGGRO_RANGE 66 +#define BLIND_TARGET 67 +#define UNBLIND_TARGET 68 +#define KILL_TARGET 69 +#define RESURRECT_TARGET 70 +#define CHANGE_SUFFIX_TITLE 71 +#define SUMMON_PET 72 +#define MODIFY_HATE 73 +#define ADD_REACTIVE_HEAL 74 +#define MODIFY_POWER_REGEN 75 +#define MODIFY_HP_REGEN 76 +#define FEIGN_DEATH 77 +#define MODIFY_VISION 78 +#define INVISIBILITY 79 +#define CHARM_TARGET 80 +#define MODIFY_TRADESKILL_DURABILITY 81 +#define MODIFY_TRADESKILL_PROGRESS 82 + + +#define ACTIVE_SPELL_NORMAL 0 +#define ACTIVE_SPELL_ADD 1 +#define ACTIVE_SPELL_REMOVE 2 + +#define GET_VALUE_BAD_VALUE 0xFFFFFFFF +struct InterruptStruct{ + Spawn* interrupted; + Spawn* target; + LuaSpell* spell; + int16 error_code; +}; +struct CastTimer{ + Client* caster; + EntityCommand* entity_command; + LuaSpell* spell; + Timer* timer; + ZoneServer* zone; + bool delete_timer; +}; +struct CastSpell{ + Entity* caster; + Spawn* target; + int32 spell_id; + ZoneServer* zone; +}; +struct RecastTimer{ + Entity* caster; + Client* client; + Spell* spell; + Timer* timer; +}; + +/// Handles all spell casts for a zone, only 1 SpellProcess per zone +class SpellProcess{ +public: + SpellProcess(); + ~SpellProcess(); + + /// Remove all spells from the SpellProcess + void RemoveAllSpells(); + + /// Main loop, handles everything (interupts, cast time, recast, ...) + void Process(); + + /// Interrupts the caster (creates the InterruptStruct and adds it to a list) + /// Entity being interrupted + /// Spawn that interrupted the caster + /// The error code + /// Bool if the spell was cancelled not interrupted + void Interrupted(Entity* caster, Spawn* interruptor, int16 error_code, bool cancel = false, bool from_movement = false); + + /// Does all the checks and actually casts the spell + /// The current ZoneServer + /// The Spell to cast + /// The Entity casting the spell + /// The target(Spawn) of the spell + /// ??? not currently used + /// Is this a harvest spell? + void ProcessSpell(ZoneServer* zone, Spell* spell, Entity* caster, Spawn* target = 0, bool lock = true, bool harvest_spell = false); + + /// Cast an EntityCommand (right click menu) + /// The current ZoneServer + /// the EntityCommand to cast + /// The Entity casting the EntityCommand + /// The target(Spawn*) of the EntityCommand + /// ??? not currently used + void ProcessEntityCommand(ZoneServer* zone, EntityCommand* entity_command, Entity* caster, Spawn* target, bool lock = true); + + /// Checks to see if the caster has enough power and takes it + /// LuaSpell to check and take power for (LuaSpell contains the caster) + /// True if caster had enough power + bool TakePower(LuaSpell* spell); + + /// Check to see if the caster has enough power to cast the spell + /// LuaSpell to check (LuaSpell contains the caster) + /// True if the caster has enough power + bool CheckPower(LuaSpell* spell); + + /// Check to see if the caster has enough hp and take it + /// LuaSpell to check and take hp for (LuaSpell contains the caster) + /// True if the caster had enough hp + bool TakeHP(LuaSpell* spell); + + /// Check to see if the caster has enough hp to cast the spell + /// LuaSpell to check (LuaSpell contains the caster) + /// True if the caster had enough hp + bool CheckHP(LuaSpell* spell); + + /// Check to see if the caster has enough concentration available to cast the spell + /// LuaSpell to check (LuaSpell contains the caster) + /// True if the caster has enough concentration + bool CheckConcentration(LuaSpell* spell); + + bool CheckSavagery(LuaSpell* spell); + bool TakeSavagery(LuaSpell* spell); + bool CheckDissonance(LuaSpell* spell); + bool AddDissonance(LuaSpell* spell); + + /// Check to see if the caster has enough concentration available and add to the casters concentration + /// LuaSpell to check (LuaSpell contains the caster) + /// True of the caster had enough concentration + bool AddConcentration(LuaSpell* spell); + + /// Cast the spell, calls ProcessSpell for the given LuaSpell, as well as sends the messages for the spells and calls the casted on function in the targets spawn script + /// LuaSpell to cast + /// Is this a passive spell being cast? + /// True if the spell was casted + bool CastProcessedSpell(LuaSpell* spell, bool passive = false); + + /// Cast the EntityCommand, calls ProcessEntityCommand for the given EntityCommand, as well as sends the messages for the command and calls the casted on function in the targets spawn script + /// EntityCommand to cast + /// Client casting the entity command + /// True if the spell was casted + bool CastProcessedEntityCommand(EntityCommand* entity_command, Client* client); + + /// Sends the start cast packet for the given client + /// LuaSpell being cast + /// The client casting the spell + void SendStartCast(LuaSpell* spell, Client* client); + + /// Send finish cast packet and take power/hp or add conc, also checks for quest updates + /// LuaSpell that just finished casting + /// Client that just finished casting, null if not a player + void SendFinishedCast(LuaSpell* spell, Client* client); + + /// Locks all the spells for the given client (shades them all gray) + /// Client to lock the spells for + void LockAllSpells(Client* client); + + /// Unlock all the spells for the given client + /// Client to unlock the spells for + void UnlockAllSpells(Client* client); + + /// Unlock a single spell for the given client + /// The client to unlock the spell for + /// The spell to unlock + void UnlockSpell(Client* client, Spell* spell); + + /// Remove the given spell for the given caster from the SpellProcess + /// The spawn to remove the spell for + /// The spell to remove + bool DeleteCasterSpell(Spawn* caster, Spell* spell); + + /// Remove the given spell from the ZpellProcess + /// LuaSpell to remove + bool DeleteCasterSpell(LuaSpell* spell); + + /// Interrupt the spell + /// InterruptStruct that contains all the info + void CheckInterrupt(InterruptStruct* interrupt); + + /// Removes the timers for the given spawn + /// Spawn to remove the timers for + /// Remove all timers (cast, recast, active, queue, interrupted)? If false only cast timers are removed + void RemoveSpellTimersFromSpawn(Spawn* spawn, bool remove_all = false, bool delete_recast = true); + + /// Sets the recast timer for the spell + /// The spell to set the recast for + /// The entity to set the recast for + /// Change the recast timer of the spell + /// Set the recast on all other spells the player has with the same timer + void CheckRecast(Spell* spell, Entity* caster, float timer_override = 0, bool check_linked_timers = true); + + /// Add a spell to the queue for the player + /// Spell to add + /// Entity's queue to add the spell to, if not a player function does nothing + void AddSpellToQueue(Spell* spell, Entity* caster); + + /// Removes a spell from the queue for the player + /// Spell to remove from the queue + /// Entity's queue to remove the spell from, if not a player function does nothing + void RemoveSpellFromQueue(Spell* spell, Entity* caster); + + /// Clear the queue, or clear only hostile spells from the queue + /// Entity to clear the queue for, if not player function does nothing + /// Set to true to only remove hostile spells, default is false + void RemoveSpellFromQueue(Entity* caster, bool hostile_only = false); + + /// Clear the queue for the given caster + /// Entity to clear the queue for, is not player function does nothing + void CheckSpellQueue(Entity* caster); + + /// Check the given enities queue for the spell, if found remove, if not found add + /// Spell to check for + /// Entity's queue to check, if not player function does nothing + void CheckSpellQueue(Spell* spell, Entity* caster); + + /// Checks to see if the entity can cast the spell + /// The spell being cast + /// The entity casting the spell + bool IsReady(Spell* spell, Entity* caster); + + /// Send the spell book update packet to the given client + /// Client to send the packet to + void SendSpellBookUpdate(Client* client); + + /// Gets the target of the currently casting spell for the given entity + /// Entity whos spell we are checking + /// Spawn* - the spells target + Spawn* GetSpellTarget(Entity* caster); + + /// Gets the currently casting spell for the given entity + /// Entity to get the spell for + /// Spell* for the currently casting spell + Spell* GetSpell(Entity* caster); + + /// Gets the currently casting LuaSpell for the given entity + /// Entity to get the LuaSpell for + /// LuaSpell* for the currently casting spell + LuaSpell* GetLuaSpell(Entity* caster); + + /// Gets the targets for the spell and adds them to the LuaSpell targets array + /// LuaSpell to get the targets for + static void GetSpellTargets(LuaSpell* luaspell); + + /// Gets targets for a true aoe spell (not an encounter ae) and adds them to the LuaSpell targets array + /// LuaSpell to get the targets for + static void GetSpellTargetsTrueAOE(LuaSpell* luaspell); + + /// Applies or removes passive spells, bypasses the spell queue and treats the spell as an insta cast spell + /// The passive spell to apply or remove + /// The Entity to apply or remove the passive spell to + /// Tells the function to remove the spell effects of this passive, default is false + bool CastPassives(Spell* spell, Entity* caster, bool remove = false); + + /// Adds a spell script timer to the list + /// Timer to add + void AddSpellScriptTimer(SpellScriptTimer* timer); + + /// Removes a spell script timer from the list + /// Timer to remove + void RemoveSpellScriptTimer(SpellScriptTimer* timer); + + /// Checks the spell script timers + void CheckSpellScriptTimers(); + + /// Checks to see if the list has the spell + bool SpellScriptTimersHasSpell(LuaSpell* spell); + + void ClearSpellScriptTimerList(); + + MutexList* GetActiveSpells() { return &active_spells; } + + void RemoveTargetFromSpell(LuaSpell* spell, Spawn* target); + void CheckRemoveTargetFromSpell(LuaSpell* spell, bool allow_delete = true); + + /// Adds a solo HO to the SpellProcess + /// The client who is starting the HO + /// The HO that is being started + bool AddHO(Client* client, HeroicOP* ho); + + /// Adds a group HO to the SpellProcess + /// ID of the group that is starting the HO + /// The HO that is being started + bool AddHO(int32 group_id, HeroicOP* ho); + + /// Stops the HO that targets the given spawn + /// ID of the spawn targeted by the HO we want to stop + void KillHOBySpawnID(int32 spawn_id); + + void AddSpellCancel(LuaSpell* spell); + +private: + /// Sends the spell data to the lua script + /// LuaSpell to call the lua script for + /// No clue, not currently used + /// True if the spell script was called successfully + bool ProcessSpell(LuaSpell* spell, bool first_cast = true, const char* function = 0, SpellScriptTimer* timer = 0); + Mutex MSpellProcess; + MutexMap spell_que; + MutexList active_spells; + MutexList cast_timers; + MutexListinterrupt_list; + MutexList recast_timers; + int32 last_checked_time; + vector m_spellScriptList; + Mutex MSpellScriptTimers; + map*> remove_target_list; + Mutex MRemoveTargetList; + vector SpellCancelList; + Mutex MSpellCancelList; + + Mutex MSoloHO; + Mutex MGroupHO; + map m_soloHO; + map m_groupHO; +}; + +#endif + diff --git a/EQ2/source/WorldServer/Spells.cpp b/EQ2/source/WorldServer/Spells.cpp new file mode 100644 index 000000000..b7b996dee --- /dev/null +++ b/EQ2/source/WorldServer/Spells.cpp @@ -0,0 +1,1391 @@ +/* + EQ2Emulator: Everquest II Server Emulator + Copyright (C) 2007 EQ2EMulator Development Team (http://www.eq2emulator.net) + + This file is part of EQ2Emulator. + + EQ2Emulator is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + EQ2Emulator is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with EQ2Emulator. If not, see . +*/ +#include "Spells.h" +#include "../common/ConfigReader.h" +#include "WorldDatabase.h" +#include "../common/Log.h" +#include "Traits/Traits.h" +#include "AltAdvancement/AltAdvancement.h" +#include + +extern ConfigReader configReader; +extern WorldDatabase database; +extern MasterTraitList master_trait_list; +extern MasterAAList master_aa_list; +extern MasterSpellList master_spell_list; + +Spell::Spell(){ + spell = new SpellData; + heal_spell = false; + buff_spell = false; + damage_spell = false; + control_spell = false; + offense_spell = false; + MSpellInfo.SetName("Spell::MSpellInfo"); +} + +Spell::Spell(SpellData* in_spell){ + spell = in_spell; + heal_spell = false; + buff_spell = false; + damage_spell = false; + control_spell = false; + offense_spell = false; + MSpellInfo.SetName("Spell::MSpellInfo"); +} + +Spell::~Spell(){ + vector::iterator itr1; + for(itr1=levels.begin();itr1!=levels.end();itr1++) { + safe_delete(*itr1); + } + vector::iterator itr2; + for(itr2=effects.begin();itr2!=effects.end();itr2++) { + safe_delete(*itr2); + } + vector::iterator itr3; + for(itr3=lua_data.begin();itr3!=lua_data.end();itr3++) { + safe_delete(*itr3); + } + safe_delete(spell); +} + +void Spell::AddSpellLuaData(int8 type, int int_value, int int_value2, float float_value, float float_value2, bool bool_value, string string_value, string string_value2, string helper){ + LUAData* data = new LUAData; + data->type = type; + data->int_value = int_value; + data->int_value2 = int_value2; + data->float_value = float_value; + data->float_value2 = float_value2; + data->bool_value = bool_value; + data->string_value = string_value; + data->string_value2 = string_value2; + data->string_helper = helper; + + MSpellInfo.lock(); + lua_data.push_back(data); + MSpellInfo.unlock(); +} + +void Spell::AddSpellLuaDataInt(int value, int value2, string helper) { + LUAData *data = new LUAData; + + data->type = 0; + data->int_value = value; + data->int_value2 = value2; + data->float_value = 0; + data->float_value2 = 0; + data->bool_value = false; + data->string_helper = helper; + + MSpellInfo.lock(); + lua_data.push_back(data); + MSpellInfo.unlock(); +} + +void Spell::AddSpellLuaDataFloat(float value, float value2, string helper) { + LUAData *data = new LUAData; + + data->type = 1; + data->int_value = 0; + data->int_value2 = 0; + data->float_value = value; + data->float_value2 = value2; + data->bool_value = false; + data->string_helper = helper; + + MSpellInfo.lock(); + lua_data.push_back(data); + MSpellInfo.unlock(); +} + +void Spell::AddSpellLuaDataBool(bool value, string helper) { + LUAData *data = new LUAData; + + data->type = 2; + data->int_value = 0; + data->float_value = 0; + data->bool_value = value; + data->string_helper = helper; + + MSpellInfo.lock(); + lua_data.push_back(data); + MSpellInfo.unlock(); +} + +void Spell::AddSpellLuaDataString(string value, string value2,string helper) { + LUAData *data = new LUAData; + + data->type = 3; + data->int_value = 0; + data->int_value2 = 0; + data->float_value = 0; + data->float_value2 = 0; + data->bool_value = false; + data->string_value = value; + data->string_value2 = value2; + data->string_helper = helper; + + MSpellInfo.lock(); + lua_data.push_back(data); + MSpellInfo.unlock(); +} + +int16 Spell::GetLevelRequired(Client* client){ + int16 ret = 0xFFFF; + if(!client) + return ret; + LevelArray* level = 0; + vector::iterator itr; + for(itr = levels.begin(); itr != levels.end(); itr++){ + level = *itr; + if(level && level->adventure_class == client->GetPlayer()->GetAdventureClass()){ + ret = level->spell_level/10; + break; + } + } + return ret; +} +void Spell::SetAAPacketInformation(PacketStruct* packet, AltAdvanceData* data, Client* client, bool display_tier) { + int8 current_tier = client->GetPlayer()->GetSpellTier(spell->id); + Spell* next_spell; + SpellData* spell2; + if (data->maxRank > current_tier) { + next_spell = master_spell_list.GetSpell(spell->id, current_tier + 1); + spell2 = next_spell->GetSpellData(); + } + SpellDisplayEffect* effect2; + + //next_spell->effects[1]->description; + + + int xxx = 0; + + int16 hp_req = 0; + int16 power_req = 0; + + if (current_tier > 0) { + packet->setSubstructDataByName("spell_info", "current_id", spell->id); + packet->setSubstructDataByName("spell_info", "current_icon", spell->icon); + packet->setSubstructDataByName("spell_info", "current_icon2", spell->icon_heroic_op); // fix struct element name eventually + packet->setSubstructDataByName("spell_info", "current_icontype", spell->icon_backdrop); // fix struct element name eventually + + if (packet->GetVersion() >= 63119) { + packet->setSubstructDataByName("spell_info", "current_version", 0x04); + packet->setSubstructDataByName("spell_info", "current_sub_version", 0x24); + } + else if (packet->GetVersion() >= 58617) { + packet->setSubstructDataByName("spell_info", "current_version", 0x03); + packet->setSubstructDataByName("spell_info", "current_sub_version", 0x131A); + } + else { + packet->setSubstructDataByName("spell_info", "current_version", 0x00); + packet->setSubstructDataByName("spell_info", "current_sub_version", 0xD9); + } + + packet->setSubstructDataByName("spell_info", "current_type", spell->type); + packet->setSubstructDataByName("spell_info", "unknown_MJ1d", 1); //63119 test + packet->setSubstructDataByName("spell_info", "current_class_skill", spell->class_skill); + packet->setSubstructDataByName("spell_info", "current_mastery_skill", spell->mastery_skill); + packet->setSubstructDataByName("spell_info", "duration_flag", spell->duration_until_cancel); + + + if (client && spell->type != 2) { + sint8 spell_text_color = client->GetPlayer()->GetArrowColor(GetLevelRequired(client)); + if (spell_text_color != ARROW_COLOR_WHITE && spell_text_color != ARROW_COLOR_RED && spell_text_color != ARROW_COLOR_GRAY) + spell_text_color = ARROW_COLOR_WHITE; + spell_text_color -= 6; + if (spell_text_color < 0) + spell_text_color *= -1; + packet->setSubstructDataByName("spell_info", "current_spell_text_color", (xxx == 1 ? 0xFFFFFFFF : spell_text_color)); + } + else { + packet->setSubstructDataByName("spell_info", "current_spell_text_color", (xxx == 1 ? 0xFFFFFFFF : 3)); + } + packet->setSubstructDataByName("spell_info", "current_spell_text_color", (xxx == 1 ? 0xFFFFFFFF : 3)); + packet->setSubstructDataByName("spell_info", "current_tier", (spell->tier)); + + if (spell->type != 2) { + packet->setArrayLengthByName("current_num_levels", 0); + for (int32 i = 0; i < levels.size(); i++) { + packet->setArrayDataByName("spell_info_aa_adventure_class", levels[i]->adventure_class, i); + packet->setArrayDataByName("spell_info_aa_tradeskill_class", levels[i]->tradeskill_class, i); + packet->setArrayDataByName("spell_info_aa_spell_level", levels[i]->spell_level, i); + } + } + //packet->setSubstructDataByName("spell_info","unknown9", 20); + + if (client) { + hp_req = GetHPRequired(client->GetPlayer()); + power_req = GetPowerRequired(client->GetPlayer()); + + // might need version checks around these? + if (client->GetVersion() >= 1193) + { + int16 savagery_req = GetSavageryRequired(client->GetPlayer()); // dunno why we need to do this + packet->setSubstructDataByName("spell_info", "current_savagery_req", savagery_req); + packet->setSubstructDataByName("spell_info", "current_savagery_upkeep", spell->savagery_upkeep); + } + if (client->GetVersion() >= 57048) + { + int16 dissonance_req = GetDissonanceRequired(client->GetPlayer()); // dunno why we need to do this + packet->setSubstructDataByName("spell_info", "dissonance_req", dissonance_req); + packet->setSubstructDataByName("spell_info", "dissonance_upkeep", spell->dissonance_upkeep); + } + } + packet->setSubstructDataByName("spell_info", "current_health_req", hp_req); + packet->setSubstructDataByName("spell_info", "current_health_upkeep", spell->hp_upkeep); + packet->setSubstructDataByName("spell_info", "current_power_req", power_req); + packet->setSubstructDataByName("spell_info", "current_power_upkeep", spell->power_upkeep); + packet->setSubstructDataByName("spell_info", "current_req_concentration", spell->req_concentration); + //unknown1 savagery??? + packet->setSubstructDataByName("spell_info", "current_cast_time", spell->cast_time); + packet->setSubstructDataByName("spell_info", "current_recovery", spell->recovery); + packet->setSubstructDataByName("spell_info", "current_recast", spell->recast); + packet->setSubstructDataByName("spell_info", "current_radius", spell->radius); + packet->setSubstructDataByName("spell_info", "current_max_aoe_targets", spell->max_aoe_targets); + packet->setSubstructDataByName("spell_info", "current_friendly_spell", spell->friendly_spell); + // rumber of reagents with array + + + + + + + + + + packet->setSubstructArrayLengthByName("spell_info", "current_num_effects", (xxx == 1 ? 0 : effects.size())); + for (int32 i = 0; i < effects.size(); i++) { + packet->setArrayDataByName("current_subbulletflag", effects[i]->subbullet, i); + string effect_message; + if (effects[i]->description.length() > 0) { + effect_message = effects[i]->description; + if (effect_message.find("%LM") < 0xFFFFFFFF) { + int string_index = effect_message.find("%LM"); + int data_index = stoi(effect_message.substr(string_index + 3, 2)); + float value; + if (lua_data[data_index]->type == 1) + value = lua_data[data_index]->float_value * client->GetPlayer()->GetLevel(); + else + value = lua_data[data_index]->int_value * client->GetPlayer()->GetLevel(); + string strValue = to_string(value); + strValue.erase(strValue.find_last_not_of('0') + 1, std::string::npos); + effect_message.replace(effect_message.find("%LM"), 5, strValue); + } + // Magic damage min + if (effect_message.find("%DML") < 0xFFFFFFFF) { + int string_index = effect_message.find("%DML"); + int data_index = stoi(effect_message.substr(string_index+4, 2)); + float value; + if (lua_data[data_index]->type == 1) + value = lua_data[data_index]->float_value * client->GetPlayer()->GetLevel(); + else + value = lua_data[data_index]->int_value * client->GetPlayer()->GetLevel(); + value *= ((client->GetPlayer()->GetInfoStruct()->potency / 100) + 1); + int32 mod = (int32)min(client->GetPlayer()->GetInfoStruct()->ability_modifier, (float)(value / 2)); + value += mod; + string damage = to_string((int)round(value)); + effect_message.replace(effect_message.find("%DML"), 6, damage); + } + // Magic damage max + if (effect_message.find("%DMH") < 0xFFFFFFFF) { + int string_index = effect_message.find("%DMH"); + int data_index = stoi(effect_message.substr(string_index+4, 2)); + float value; + if (lua_data[data_index]->type == 1) + value = lua_data[data_index]->float_value * client->GetPlayer()->GetLevel(); + else + value = lua_data[data_index]->int_value * client->GetPlayer()->GetLevel(); + value *= ((client->GetPlayer()->GetInfoStruct()->potency / 100) + 1); + int32 mod = (int32)min(client->GetPlayer()->GetInfoStruct()->ability_modifier, (float)(value / 2)); + value += mod; + string damage = to_string((int)round(value)); + effect_message.replace(effect_message.find("%DMH"), 6, damage); + } + // level based Magic damage min + if (effect_message.find("%LDML") < 0xFFFFFFFF) { + int string_index = effect_message.find("%LDML"); + int data_index = stoi(effect_message.substr(string_index+5, 2)); + float value; + if (lua_data[data_index]->type == 1) + value = lua_data[data_index]->float_value * client->GetPlayer()->GetLevel(); + else + value = lua_data[data_index]->int_value * client->GetPlayer()->GetLevel(); + value *= ((client->GetPlayer()->GetInfoStruct()->potency / 100) + 1); + int32 mod = (int32)min(client->GetPlayer()->GetInfoStruct()->ability_modifier, (float)(value / 2)); + value += mod; + string damage = to_string((int)round(value)); + effect_message.replace(effect_message.find("%LDML"), 7, damage); + } + // level based Magic damage max + if (effect_message.find("%LDMH") < 0xFFFFFFFF) { + int string_index = effect_message.find("%LDMH"); + int data_index = stoi(effect_message.substr(string_index+5, 2)); + float value; + if (lua_data[data_index]->type == 1) + value = lua_data[data_index]->float_value * client->GetPlayer()->GetLevel(); + else + value = lua_data[data_index]->int_value * client->GetPlayer()->GetLevel(); + value *= ((client->GetPlayer()->GetInfoStruct()->potency / 100) + 1); + int32 mod = (int32)min(client->GetPlayer()->GetInfoStruct()->ability_modifier, (float)(value / 2)); + value += mod; + string damage = to_string((int)round(value)); + effect_message.replace(effect_message.find("%LDMH"), 7, damage); + } + //GetZone()->SimpleMessage(CHANNEL_COLOR_SPELL_EFFECT, effect_message.c_str(), victim, 50); + packet->setArrayDataByName("current_effect", effect_message.c_str(), i); + } + packet->setArrayDataByName("current_percentage", effects[i]->percentage, i); + } + if (display_tier == true) + packet->setSubstructDataByName("spell_info", "current_display_spell_tier", 1);// spell2->display_spell_tier); + else + packet->setSubstructDataByName("spell_info", "current_display_spell_tier", 1);// 0); + + packet->setSubstructDataByName("spell_info", "current_unknown_1", 1);// 0); + //unkown1_1 + packet->setSubstructDataByName("spell_info", "current_minimum_range", spell->min_range); + packet->setSubstructDataByName("spell_info", "current_range", spell->range); + packet->setSubstructDataByName("spell_info", "current_duration_1", spell->duration1); + packet->setSubstructDataByName("spell_info", "current_duration_2", spell->duration2); + + packet->setSubstructDataByName("spell_info", "current_duration_flag", spell->duration_until_cancel); + packet->setSubstructDataByName("spell_info", "current_target", spell->target_type); + + + + + + packet->setSubstructDataByName("spell_info", "current_can_effect_raid", spell->can_effect_raid); + packet->setSubstructDataByName("spell_info", "current_affect_only_group_members", spell->affect_only_group_members); + packet->setSubstructDataByName("spell_info", "current_group_spell", spell->group_spell); + packet->setSubstructDataByName("spell_info", "current_resistibility", spell->resistibility); + packet->setSubstructDataByName("spell_info", "current_name", &(spell->name)); + packet->setSubstructDataByName("spell_info", "current_description", &(spell->description)); + + } + + if (current_tier + 1 <= data->maxRank) { + packet->setSubstructDataByName("spell_info", "next_id", spell2->id); + packet->setSubstructDataByName("spell_info", "next_icon", spell2->icon); + packet->setSubstructDataByName("spell_info", "next_icon2", spell2->icon_heroic_op); // fix struct element name eventually + packet->setSubstructDataByName("spell_info", "next_icontype", spell2->icon_backdrop); // fix struct element name eventually + + if (packet->GetVersion() >= 63119) { + packet->setSubstructDataByName("spell_info", "next_aa_spell_info2", "version", 0x04); + packet->setSubstructDataByName("spell_info", "next_aa_spell_info2", "sub_version", 0x24); + } + else if (packet->GetVersion() >= 58617) { + packet->setSubstructDataByName("spell_info", "next_version", 0x03); + packet->setSubstructDataByName("spell_info", "next_sub_version", 0x131A); + } + else { + packet->setSubstructDataByName("spell_info", "next_version", 0x00); + packet->setSubstructDataByName("spell_info", "next_sub_version", 0xD9); + } + + packet->setSubstructDataByName("spell_info", "next_type", spell2->type); + packet->setSubstructDataByName("spell_info", "next_unknown_MJ1d", 1); //63119 test + packet->setSubstructDataByName("spell_info", "next_class_skill", spell2->class_skill); + packet->setSubstructDataByName("spell_info", "next_mastery_skill", spell2->mastery_skill); + packet->setSubstructDataByName("spell_info", "next_duration_flag", spell2->duration_until_cancel); + if (client && spell->type != 2) { + sint8 spell_text_color = client->GetPlayer()->GetArrowColor(GetLevelRequired(client)); + if (spell_text_color != ARROW_COLOR_WHITE && spell_text_color != ARROW_COLOR_RED && spell_text_color != ARROW_COLOR_GRAY) + spell_text_color = ARROW_COLOR_WHITE; + spell_text_color -= 6; + if (spell_text_color < 0) + spell_text_color *= -1; + packet->setSubstructDataByName("spell_info", "next_spell_text_color", spell_text_color); + } + else + packet->setSubstructDataByName("spell_info", "next_spell_text_color", 3); + if (spell->type != 2) { + packet->setArrayLengthByName("num_levels", levels.size()); + for (int32 i = 0; i < levels.size(); i++) { + packet->setArrayDataByName("spell_info_aa_adventure_class2", levels[i]->adventure_class, i); + packet->setArrayDataByName("spell_info_aa_tradeskill_class2", levels[i]->tradeskill_class, i); + packet->setArrayDataByName("spell_info_aa_spell_level2", levels[i]->spell_level, i); + } + } + //packet->setSubstructDataByName("spell_info","unknown9", 20); + hp_req = 0; + power_req = 0; + if (client) { + hp_req = GetHPRequired(client->GetPlayer()); + power_req = GetPowerRequired(client->GetPlayer()); + + // might need version checks around these? + if (client->GetVersion() >= 1193) + { + int16 savagery_req = GetSavageryRequired(client->GetPlayer()); // dunno why we need to do this + packet->setSubstructDataByName("spell_info", "next_savagery_req", savagery_req); + packet->setSubstructDataByName("spell_info", "next_savagery_upkeep", spell->savagery_upkeep); + } + if (client->GetVersion() >= 57048) + { + int16 dissonance_req = GetDissonanceRequired(client->GetPlayer()); // dunno why we need to do this + packet->setSubstructDataByName("spell_info", "next_dissonance_req", dissonance_req); + packet->setSubstructDataByName("spell_info", "next_dissonance_upkeep", spell->dissonance_upkeep); + } + } + packet->setSubstructDataByName("spell_info", "next_target", spell->target_type); + packet->setSubstructDataByName("spell_info", "next_recovery", spell->recovery); + packet->setSubstructDataByName("spell_info", "next_health_upkeep", spell->hp_upkeep); + packet->setSubstructDataByName("spell_info", "next_health_req", hp_req); + packet->setSubstructDataByName("spell_info", "next_tier", spell->tier); + packet->setSubstructDataByName("spell_info", "next_power_req", power_req); + packet->setSubstructDataByName("spell_info", "next_power_upkeep", spell->power_upkeep); + + packet->setSubstructDataByName("spell_info", "next_cast_time", spell->cast_time); + packet->setSubstructDataByName("spell_info", "next_recast", spell->recast); + packet->setSubstructDataByName("spell_info", "next_radius", spell->radius); + packet->setSubstructDataByName("spell_info", "next_req_concentration", spell->req_concentration); + //packet->setSubstructDataByName("spell_info","req_concentration2", 2); + packet->setSubstructDataByName("spell_info", "next_max_aoe_targets", spell->max_aoe_targets); + packet->setSubstructDataByName("spell_info", "next_friendly_spell", spell->friendly_spell); + packet->setSubstructArrayLengthByName("spell_info", "next_num_effects", next_spell->effects.size()); + for (int32 i = 0; i < next_spell->effects.size(); i++) { + packet->setArrayDataByName("next_subbulletflag", next_spell->effects[i]->subbullet, i); + string effect_message; + if (next_spell->effects[i]->description.length() > 0) { + effect_message = next_spell->effects[i]->description; + if (effect_message.find("%LM") < 0xFFFFFFFF) { + int string_index = effect_message.find("%LM"); + int data_index = stoi(effect_message.substr(string_index + 3, 2)); + float value; + if (next_spell->lua_data[data_index]->type == 1) + value = next_spell->lua_data[data_index]->float_value * client->GetPlayer()->GetLevel(); + else + value = next_spell->lua_data[data_index]->int_value * client->GetPlayer()->GetLevel(); + string strValue = to_string(value); + strValue.erase(strValue.find_last_not_of('0') + 1, std::string::npos); + effect_message.replace(effect_message.find("%LM"), 5, strValue); + } + // Magic damage min + if (effect_message.find("%DML") < 0xFFFFFFFF) { + int string_index = effect_message.find("%DML"); + int data_index = stoi(effect_message.substr(string_index + 4, 2)); + float value; + if (next_spell->lua_data[data_index]->type == 1) + value = next_spell->lua_data[data_index]->float_value * client->GetPlayer()->GetLevel(); + else + value = next_spell->lua_data[data_index]->int_value * client->GetPlayer()->GetLevel(); + value *= ((client->GetPlayer()->GetInfoStruct()->potency / 100) + 1); + int32 mod = (int32)min(client->GetPlayer()->GetInfoStruct()->ability_modifier, (float)(value / 2)); + value += mod; + string damage = to_string((int)round(value)); + damage.erase(damage.find_last_not_of('0') + 1, std::string::npos); + effect_message.replace(effect_message.find("%DML"), 6, damage); + } + // Magic damage max + if (effect_message.find("%DMH") < 0xFFFFFFFF) { + int string_index = effect_message.find("%DMH"); + int data_index = stoi(effect_message.substr(string_index + 4, 2)); + float value; + if (next_spell->lua_data[data_index]->type == 1) + value = next_spell->lua_data[data_index]->float_value * client->GetPlayer()->GetLevel(); + else + value = next_spell->lua_data[data_index]->int_value * client->GetPlayer()->GetLevel(); + value *= ((client->GetPlayer()->GetInfoStruct()->potency / 100) + 1); + int32 mod = (int32)min(client->GetPlayer()->GetInfoStruct()->ability_modifier, (float)(value / 2)); + value += mod; + string damage = to_string((int)round(value)); + damage.erase(damage.find_last_not_of('0') + 1, std::string::npos); + effect_message.replace(effect_message.find("%DMH"), 6, damage); + } + // level based Magic damage min + if (effect_message.find("%LDML") < 0xFFFFFFFF) { + int string_index = effect_message.find("%LDML"); + int data_index = stoi(effect_message.substr(string_index + 5, 2)); + float value; + if (next_spell->lua_data[data_index]->type == 1) + value = next_spell->lua_data[data_index]->float_value * client->GetPlayer()->GetLevel(); + else + value = next_spell->lua_data[data_index]->int_value * client->GetPlayer()->GetLevel(); + value *= ((client->GetPlayer()->GetInfoStruct()->potency / 100) + 1); + int32 mod = (int32)min(client->GetPlayer()->GetInfoStruct()->ability_modifier, (float)(value / 2)); + value += mod; + string damage = to_string((int)round(value)); + effect_message.replace(effect_message.find("%LDML"), 7, damage); + } + // level based Magic damage max + if (effect_message.find("%LDMH") < 0xFFFFFFFF) { + int string_index = effect_message.find("%LDMH"); + int data_index = stoi(effect_message.substr(string_index + 5, 2)); + float value; + if (next_spell->lua_data[data_index]->type == 1) + value = next_spell->lua_data[data_index]->float_value * client->GetPlayer()->GetLevel(); + else + value = next_spell->lua_data[data_index]->int_value * client->GetPlayer()->GetLevel(); + value *= ((client->GetPlayer()->GetInfoStruct()->potency / 100) + 1); + int32 mod = (int32)min(client->GetPlayer()->GetInfoStruct()->ability_modifier, (float)(value / 2)); + value += mod; + string damage = to_string((int)round(value)); + effect_message.replace(effect_message.find("%LDMH"), 7, damage); + } + //GetZone()->SimpleMessage(CHANNEL_COLOR_SPELL_EFFECT, effect_message.c_str(), victim, 50); + packet->setArrayDataByName("next_effect", effect_message.c_str(), i); + } + + packet->setArrayDataByName("next_percentage", next_spell->effects[i]->percentage, i); + + } + if (display_tier == true) + packet->setSubstructDataByName("spell_info", "next_display_spell_tier", 1);// spell->display_spell_tier); + else + packet->setSubstructDataByName("spell_info", "next_display_spell_tier", 1);//0 + packet->setSubstructDataByName("spell_info", "next_unknown_1", 1);//0 + packet->setSubstructDataByName("spell_info", "next_range", spell2->range); + packet->setSubstructDataByName("spell_info", "next_duration_1", spell2->duration1); + packet->setSubstructDataByName("spell_info", "next_duration_2", spell2->duration2); + + packet->setSubstructDataByName("spell_info", "next_can_effect_raid", spell2->can_effect_raid); + packet->setSubstructDataByName("spell_info", "next_affect_only_group_members", spell2->affect_only_group_members); + packet->setSubstructDataByName("spell_info", "next_group_spell", spell2->group_spell); + packet->setSubstructDataByName("spell_info", "next_resistibility", spell2->resistibility); + packet->setSubstructDataByName("spell_info", "next_name", &(spell2->name)); + packet->setSubstructDataByName("spell_info", "next_description", &(spell2->description)); + + } +} + void Spell::SetPacketInformation(PacketStruct* packet, Client* client, bool display_tier) { + packet->setSubstructDataByName("spell_info", "id", spell->id); + packet->setSubstructDataByName("spell_info", "icon", spell->icon); + packet->setSubstructDataByName("spell_info", "icon2", spell->icon_heroic_op); // fix struct element name eventually + packet->setSubstructDataByName("spell_info", "icontype", spell->icon_backdrop); // fix struct element name eventually + + if (packet->GetVersion() >= 63119) { + packet->setSubstructDataByName("spell_info", "version", 0x04); + packet->setSubstructDataByName("spell_info", "sub_version", 0x24); + } + else if (packet->GetVersion() >= 60114) { + packet->setSubstructDataByName("spell_info", "version", 0x03); + packet->setSubstructDataByName("spell_info", "sub_version", 4890); + } + else { + packet->setSubstructDataByName("spell_info", "version", 0x11); + packet->setSubstructDataByName("spell_info", "sub_version", 0x14); + } + + packet->setSubstructDataByName("spell_info", "type", spell->type); + packet->setSubstructDataByName("spell_info", "unknown_MJ1d", 1); //63119 test + packet->setSubstructDataByName("spell_info", "class_skill", spell->class_skill); + packet->setSubstructDataByName("spell_info", "mastery_skill", spell->mastery_skill); + packet->setSubstructDataByName("spell_info", "duration_flag", spell->duration_until_cancel); + if (client && spell->type != 2) { + sint8 spell_text_color = client->GetPlayer()->GetArrowColor(GetLevelRequired(client)); + if (spell_text_color != ARROW_COLOR_WHITE && spell_text_color != ARROW_COLOR_RED && spell_text_color != ARROW_COLOR_GRAY) + spell_text_color = ARROW_COLOR_WHITE; + spell_text_color -= 6; + if (spell_text_color < 0) + spell_text_color *= -1; + packet->setSubstructDataByName("spell_info", "spell_text_color", spell_text_color); + } + else + packet->setSubstructDataByName("spell_info", "spell_text_color", 3); + if (spell->type != 2) { + packet->setSubstructArrayLengthByName("spell_info", "num_levels", levels.size()); + for (int32 i = 0; i < levels.size(); i++) { + packet->setArrayDataByName("adventure_class", levels[i]->adventure_class, i); + packet->setArrayDataByName("tradeskill_class", levels[i]->tradeskill_class, i); + packet->setArrayDataByName("spell_level", levels[i]->spell_level, i); + } + } + packet->setSubstructDataByName("spell_info", "unknown9", 20); + int16 hp_req = 0; + int16 power_req = 0; + if (client) { + hp_req = GetHPRequired(client->GetPlayer()); + power_req = GetPowerRequired(client->GetPlayer()); + + // might need version checks around these? + if (client->GetVersion() >= 1193) + { + int16 savagery_req = GetSavageryRequired(client->GetPlayer()); // dunno why we need to do this + packet->setSubstructDataByName("spell_info", "savagery_req", savagery_req); + packet->setSubstructDataByName("spell_info", "savagery_upkeep", spell->savagery_upkeep); + } + if (client->GetVersion() >= 57048) + { + int16 dissonance_req = GetDissonanceRequired(client->GetPlayer()); // dunno why we need to do this + packet->setSubstructDataByName("spell_info", "dissonance_req", dissonance_req); + packet->setSubstructDataByName("spell_info", "dissonance_upkeep", spell->dissonance_upkeep); + } + } + packet->setSubstructDataByName("spell_info", "target", spell->target_type); + packet->setSubstructDataByName("spell_info", "recovery", spell->recovery); + packet->setSubstructDataByName("spell_info", "health_upkeep", spell->hp_upkeep); + packet->setSubstructDataByName("spell_info", "health_req", hp_req); + packet->setSubstructDataByName("spell_info", "tier", spell->tier); + packet->setSubstructDataByName("spell_info", "power_req", power_req); + packet->setSubstructDataByName("spell_info", "power_upkeep", spell->power_upkeep); + + packet->setSubstructDataByName("spell_info", "cast_time", spell->cast_time); + packet->setSubstructDataByName("spell_info", "recast", spell->recast); + packet->setSubstructDataByName("spell_info", "radius", spell->radius); + packet->setSubstructDataByName("spell_info", "req_concentration", spell->req_concentration); + //packet->setSubstructDataByName("spell_info","req_concentration2", 2); + packet->setSubstructDataByName("spell_info", "max_aoe_targets", spell->max_aoe_targets); + packet->setSubstructDataByName("spell_info", "friendly_spell", spell->friendly_spell); + packet->setSubstructArrayLengthByName("spell_info", "num_effects", effects.size()); + for (int32 i = 0; i < effects.size(); i++) { + + packet->setArrayDataByName("subbulletflag", effects[i]->subbullet, i); + string effect_message; + if (effects[i]->description.length() > 0) { + effect_message = effects[i]->description; + if (effect_message.find("%LM") < 0xFFFFFFFF) { + int string_index = effect_message.find("%LM"); + int data_index = stoi(effect_message.substr(string_index + 3, 2)); + float value; + if (lua_data[data_index]->type == 1) + value = lua_data[data_index]->float_value * client->GetPlayer()->GetLevel(); + else + value = lua_data[data_index]->int_value * client->GetPlayer()->GetLevel(); + string strValue = to_string(value); + strValue.erase(strValue.find_last_not_of('0') + 1, std::string::npos); + effect_message.replace(effect_message.find("%LM"), 5, strValue); + } + // Magic damage min + if (effect_message.find("%DML") < 0xFFFFFFFF) { + int string_index = effect_message.find("%DML"); + int data_index = stoi(effect_message.substr(string_index + 4, 2)); + float value; + if (lua_data[data_index]->type == 1) + value = lua_data[data_index]->float_value * client->GetPlayer()->GetLevel(); + else + value = lua_data[data_index]->int_value * client->GetPlayer()->GetLevel(); + value *= ((client->GetPlayer()->GetInfoStruct()->potency / 100) + 1); + int32 mod = (int32)min(client->GetPlayer()->GetInfoStruct()->ability_modifier, (float)(value / 2)); + value += mod; + string damage = to_string((int)round(value)); + effect_message.replace(effect_message.find("%DML"), 6, damage); + } + // Magic damage max + if (effect_message.find("%DMH") < 0xFFFFFFFF) { + int string_index = effect_message.find("%DMH"); + int data_index = stoi(effect_message.substr(string_index + 4, 2)); + float value; + if (lua_data[data_index]->type == 1) + value = lua_data[data_index]->float_value * client->GetPlayer()->GetLevel(); + else + value = lua_data[data_index]->int_value * client->GetPlayer()->GetLevel(); + value *= ((client->GetPlayer()->GetInfoStruct()->potency / 100) + 1); + int32 mod = (int32)min(client->GetPlayer()->GetInfoStruct()->ability_modifier, (float)(value / 2)); + value += mod; + string damage = to_string((int)round(value)); + effect_message.replace(effect_message.find("%DMH"), 6, damage); + } + // level based Magic damage min + if (effect_message.find("%LDML") < 0xFFFFFFFF) { + int string_index = effect_message.find("%LDML"); + int data_index = stoi(effect_message.substr(string_index + 5, 2)); + float value; + if (lua_data[data_index]->type == 1) + value = lua_data[data_index]->float_value * client->GetPlayer()->GetLevel(); + else + value = lua_data[data_index]->int_value * client->GetPlayer()->GetLevel(); + value *= ((client->GetPlayer()->GetInfoStruct()->potency / 100) + 1); + int32 mod = (int32)min(client->GetPlayer()->GetInfoStruct()->ability_modifier, (float)(value / 2)); + value += mod; + string damage = to_string((int)round(value)); + effect_message.replace(effect_message.find("%LDML"), 7, damage); + } + // level based Magic damage max + if (effect_message.find("%LDMH") < 0xFFFFFFFF) { + int string_index = effect_message.find("%LDMH"); + int data_index = stoi(effect_message.substr(string_index + 5, 2)); + float value; + if (lua_data[data_index]->type == 1) + value = lua_data[data_index]->float_value * client->GetPlayer()->GetLevel(); + else + value = lua_data[data_index]->int_value * client->GetPlayer()->GetLevel(); + value *= ((client->GetPlayer()->GetInfoStruct()->potency / 100) + 1); + int32 mod = (int32)min(client->GetPlayer()->GetInfoStruct()->ability_modifier, (float)(value / 2)); + value += mod; + string damage = to_string((int)round(value)); + effect_message.replace(effect_message.find("%LDMH"), 7, damage); + } + //GetZone()->SimpleMessage(CHANNEL_COLOR_SPELL_EFFECT, effect_message.c_str(), victim, 50); + } + packet->setArrayDataByName("effect", effect_message.c_str(), i); + packet->setArrayDataByName("percentage", effects[i]->percentage, i); + } + if (display_tier == true) + packet->setSubstructDataByName("spell_info", "display_spell_tier", spell->display_spell_tier); + else + packet->setSubstructDataByName("spell_info", "display_spell_tier", 0); + packet->setSubstructDataByName("spell_info", "range", spell->range); + packet->setSubstructDataByName("spell_info", "duration1", spell->duration1); + packet->setSubstructDataByName("spell_info", "duration2", spell->duration2); + + packet->setSubstructDataByName("spell_info", "can_effect_raid", spell->can_effect_raid); + packet->setSubstructDataByName("spell_info", "affect_only_group_members", spell->affect_only_group_members); + packet->setSubstructDataByName("spell_info", "group_spell", spell->group_spell); + packet->setSubstructDataByName("spell_info", "resistibility", spell->resistibility); + packet->setSubstructDataByName("spell_info", "name", &(spell->name)); + packet->setSubstructDataByName("spell_info", "description", &(spell->description)); + //packet->PrintPacket(); +} +EQ2Packet* Spell::SerializeSpecialSpell(Client* client, bool display, int8 packet_type, int8 sub_packet_type){ + return SerializeSpell(client, display, false, packet_type, sub_packet_type, "WS_ExamineSpecialSpellInfo"); +} + +EQ2Packet* Spell::SerializeAASpell(Client* client,int8 tier, AltAdvanceData* data, bool display, bool trait_display, int8 packet_type, int8 sub_packet_type, const char* struct_name){ + if (!client) + return 0; + int16 version = 1; + if (client) + version = client->GetVersion(); + if (!struct_name) + struct_name = "WS_ExamineAASpellInfo"; + PacketStruct* packet = configReader.getStruct(struct_name, version); + if (display) + packet->setSubstructDataByName("info_header", "show_name", 1);//1 + else + if (!trait_display) + packet->setSubstructDataByName("info_header", "show_popup", 1);//1 + else + packet->setSubstructDataByName("info_header", "show_popup", 0); + + if (packet_type > 0) + packet->setSubstructDataByName("info_header", "packettype", packet_type * 256 + 0xFE); + else + packet->setSubstructDataByName("info_header", "packettype", 0x4FFE);// 0x45FE GetItemPacketType(version)); + //packet->setDataByName("unknown2",5); + //packet->setDataByName("unknown7", 1); + //packet->setDataByName("unknown9", 20); + //packet->setDataByName("unknown10", 1, 2); + if (sub_packet_type == 0) + sub_packet_type = 0x83; + packet->setSubstructDataByName("info_header", "packetsubtype", 4);// sub_packet_type); + packet->setSubstructDataByName("spell_info", "aa_id", data->spellID); + packet->setSubstructDataByName("spell_info", "aa_tab_id", data->group); + packet->setSubstructDataByName("spell_info", "aa_icon", data->icon); + packet->setSubstructDataByName("spell_info", "aa_icon2", data->icon2); + packet->setSubstructDataByName("spell_info", "aa_current_rank", tier); // how to get this info to here? + packet->setSubstructDataByName("spell_info", "aa_max_rank", data->maxRank); + packet->setSubstructDataByName("spell_info", "aa_rank_cost", data->rankCost); + packet->setSubstructDataByName("spell_info", "aa_unknown_2", 20); + packet->setSubstructDataByName("spell_info", "aa_name", &(spell->name)); + packet->setSubstructDataByName("spell_info", "aa_description", &(spell->description)); + + + + + //packet->setDataByName("unknown3",2); + //packet->setDataByName("unknown7", 50); + if (sub_packet_type == 0x81) + SetAAPacketInformation(packet, data, client); + else + SetAAPacketInformation(packet,data, client, true); + packet->setSubstructDataByName("spell_info", "uses_remaining", 0xFFFF); + packet->setSubstructDataByName("spell_info", "damage_remaining", 0xFFFF); + //packet->PrintPacket(); + // This adds the second portion to the spell packet. Could be used for bonuses etc.? + string* data1 = packet->serializeString(); + uchar* data2 = (uchar*)data1->c_str(); + uchar* ptr2 = data2; + int32 size = data1->length();// *2; + ////uchar* data3 = new uchar[size]; + ////memcpy(data3, data2, data1->length()); + ////uchar* ptr = data3; + ////size -= 17; + ////memcpy(ptr, &size, sizeof(int32)); + ////size += 3; + ////ptr += data1->length(); + ////ptr2 += 14; + ////memcpy(ptr, ptr2, data1->length() - 14); + + EQ2Packet* outapp = new EQ2Packet(OP_ClientCmdMsg, data2, size); + //DumpPacket(outapp); + //safe_delete_array(data3); + safe_delete(packet); + return outapp; + /*PacketStruct* packet = configReader.getStruct("WS_ExamineAASpellInfo", client->GetVersion()); + packet->setSubstructDataByName("info_header", "show_name", 0); + packet->setSubstructDataByName("info_header", "show_popup", 0); + packet->setSubstructDataByName("info_header", "packettype", packet_type); + packet->setSubstructDataByName("info_header", "packetsubtype", sub_packet_type); + packet->setSubstructDataByName("Spell_info", "aa_id", data->spellID); + packet->setSubstructDataByName("Spell_info", "aa_tab_id", data->group); + packet->setSubstructDataByName("Spell_info", "aa_icon", data->icon); + packet->setSubstructDataByName("Spell_info", "aa_icon2", data->icon2); + packet->setSubstructDataByName("Spell_info", "current_rank", 0); // how to get this info to here? + packet->setSubstructDataByName("Spell_info", "max_rank", data->maxRank); + packet->setSubstructDataByName("Spell_info", "rank_cost", data->rankCost); + packet->setSubstructDataByName("spell_info", "unknown2", 20); + // Spell info + packet->setSubstructDataByName("spell_info", "id", spell->id); + packet->setSubstructDataByName("spell_info", "icon", spell->icon); + packet->setSubstructDataByName("spell_info", "icon2", spell->icon_heroic_op); // fix struct element name eventually + packet->setSubstructDataByName("spell_info", "icontype", spell->icon_backdrop); // fix struct element name eventually + + if (packet->GetVersion() >= 63119) { + packet->setSubstructDataByName("spell_info", "version", 0x04); + packet->setSubstructDataByName("spell_info", "sub_version", 0x24); + } + else if (packet->GetVersion() >= 1193) { + packet->setSubstructDataByName("spell_info", "version", 0x00); + packet->setSubstructDataByName("spell_info", "sub_version", 0xD9); + } + else { + packet->setSubstructDataByName("spell_info", "version", 0x11); + packet->setSubstructDataByName("spell_info", "sub_version", 0x14); + } + + packet->setSubstructDataByName("spell_info", "type", spell->type); + packet->setSubstructDataByName("spell_info", "unknown_MJ1d", 1); //63119 test + packet->setSubstructDataByName("spell_info", "class_skill", spell->class_skill); + packet->setSubstructDataByName("spell_info", "mastery_skill", spell->mastery_skill); + packet->setSubstructDataByName("spell_info", "duration_flag", spell->duration_until_cancel); + if (client && spell->type != 2) { + sint8 spell_text_color = client->GetPlayer()->GetArrowColor(GetLevelRequired(client)); + if (spell_text_color != ARROW_COLOR_WHITE && spell_text_color != ARROW_COLOR_RED && spell_text_color != ARROW_COLOR_GRAY) + spell_text_color = ARROW_COLOR_WHITE; + spell_text_color -= 6; + if (spell_text_color < 0) + spell_text_color *= -1; + packet->setSubstructDataByName("spell_info", "spell_text_color", spell_text_color); + } + else + packet->setSubstructDataByName("spell_info", "spell_text_color", 3); + if (spell->type != 2) { + packet->setSubstructArrayLengthByName("spell_info", "num_levels", levels.size()); + for (int32 i = 0; i < levels.size(); i++) { + packet->setArrayDataByName("adventure_class", levels[i]->adventure_class, i); + packet->setArrayDataByName("tradeskill_class", levels[i]->tradeskill_class, i); + packet->setArrayDataByName("spell_level", levels[i]->spell_level, i); + } + } + //packet->setSubstructDataByName("spell_info", "unknown9", 20); + int16 hp_req = 0; + int16 power_req = 0; + if (client) { + hp_req = GetHPRequired(client->GetPlayer()); + power_req = GetPowerRequired(client->GetPlayer()); + + // might need version checks around these? + if (client->GetVersion() >= 1193) + { + int16 savagery_req = GetSavageryRequired(client->GetPlayer()); // dunno why we need to do this + packet->setSubstructDataByName("spell_info", "savagery_req", savagery_req); + packet->setSubstructDataByName("spell_info", "savagery_upkeep", spell->savagery_upkeep); + } + if (client->GetVersion() >= 57048) + { + int16 dissonance_req = GetDissonanceRequired(client->GetPlayer()); // dunno why we need to do this + packet->setSubstructDataByName("spell_info", "dissonance_req", dissonance_req); + packet->setSubstructDataByName("spell_info", "dissonance_upkeep", spell->dissonance_upkeep); + } + } + packet->setSubstructDataByName("spell_info", "tier", spell->tier); + packet->setSubstructDataByName("spell_info", "health_req", hp_req); + packet->setSubstructDataByName("spell_info", "health_upkeep", spell->hp_upkeep); + packet->setSubstructDataByName("spell_info", "power_req", power_req); + packet->setSubstructDataByName("spell_info", "power_upkeep", spell->power_upkeep); + packet->setSubstructDataByName("spell_info", "req_concentration", spell->req_concentration); + //packet->setDataByName("req_concentration2", 2); + packet->setSubstructDataByName("spell_info", "cast_time", spell->cast_time); + packet->setSubstructDataByName("spell_info", "recovery", spell->recovery); + packet->setSubstructDataByName("spell_info", "recast", spell->recast); + packet->setSubstructDataByName("spell_info", "radius", spell->radius); + packet->setSubstructDataByName("spell_info", "max_aoe_targets", spell->max_aoe_targets); + packet->setSubstructDataByName("spell_info", "friendly_spell", spell->friendly_spell); + //reageants?? + packet->setSubstructArrayLengthByName("spell_info", "num_effects", effects.size()); + for (int32 i = 0; i < effects.size(); i++) { + packet->setArrayDataByName("subbulletflag", effects[i]->subbullet, i); + packet->setArrayDataByName("effect", effects[i]->description.c_str(), i); + packet->setArrayDataByName("percentage", effects[i]->percentage, i); + } + //if (display_tier == true) + packet->setSubstructDataByName("spell_info", "display_spell_tier", spell->display_spell_tier); + //else + // packet->setSubstructDataByName("spell_info", "display_spell_tier", 0); + + // minimum range?? + packet->setSubstructDataByName("spell_info", "range", spell->range); + packet->setSubstructDataByName("spell_info", "duration1", spell->duration1); + packet->setSubstructDataByName("spell_info", "duration2", spell->duration2); + //unknown9 ?? + //duration flag?? + packet->setSubstructDataByName("spell_info", "target", spell->target_type); + packet->setSubstructDataByName("spell_info", "can_effect_raid", spell->can_effect_raid); + packet->setSubstructDataByName("spell_info", "affect_only_group_members", spell->affect_only_group_members); + packet->setSubstructDataByName("spell_info", "group_spell", spell->group_spell); + packet->setSubstructDataByName("spell_info", "resistibility", spell->resistibility); + //unknown11 ?? + //hit_bonus ?? + //unknown12 ?? + packet->setSubstructDataByName("spell_info", "name", &(spell->name)); + packet->setSubstructDataByName("spell_info", "description", &(spell->description)); + EQ2Packet* packetdata = packet->serialize(); + //EQ2Packet* app = new EQ2Packet(OP_AdventureList, packetdata->pBuffer, packetdata->size); + EQ2Packet* app = new EQ2Packet(OP_ClientCmdMsg, packetdata->pBuffer, packetdata->size); + packet->PrintPacket(); + //DumpPacket(app); + safe_delete(packet); + safe_delete(data); + return app; + */ +} + +EQ2Packet* Spell::SerializeSpell(Client* client, bool display, bool trait_display, int8 packet_type, int8 sub_packet_type, const char* struct_name){ + int16 version = 1; + if(client) + version = client->GetVersion(); + if(!struct_name) + struct_name = "WS_ExamineSpellInfo"; + PacketStruct* packet = configReader.getStruct(struct_name, version); + if(display) + packet->setSubstructDataByName("info_header", "show_name", 1); + else + if (!trait_display) + packet->setSubstructDataByName("info_header", "show_popup", 1); + else + packet->setSubstructDataByName("info_header", "show_popup", 0); + + if(packet_type > 0) + packet->setSubstructDataByName("info_header", "packettype", packet_type*256 + 0xFE); + else + packet->setSubstructDataByName("info_header", "packettype", GetItemPacketType(version)); + //packet->setDataByName("unknown2",5); + //packet->setDataByName("unknown7", 1); + //packet->setDataByName("unknown9", 20); + //packet->setDataByName("unknown10", 1, 2); + if(sub_packet_type == 0) + sub_packet_type = 0x83; + packet->setSubstructDataByName("info_header", "packetsubtype", sub_packet_type); + //packet->setDataByName("unknown3",2); + //packet->setDataByName("unknown7", 50); + if(sub_packet_type == 0x81) + SetPacketInformation(packet, client); + else + SetPacketInformation(packet, client, true); + packet->setSubstructDataByName("spell_info", "uses_remaining", 0xFFFF); + packet->setSubstructDataByName("spell_info", "damage_remaining", 0xFFFF); + //packet->PrintPacket(); + // This adds the second portion to the spell packet. Could be used for bonuses etc.? + int8 offset = 0; + if (packet->GetVersion() == 60114) { + offset = 28; + } + else { + offset = 14; + } + string* data1 = packet->serializeString(); + uchar* data2 = (uchar*)data1->c_str(); + uchar* ptr2 = data2; + int32 size = data1->length() * 2; + uchar* data3 = new uchar[size]; + memcpy(data3, data2, data1->length()); + uchar* ptr = data3; + size -=offset+3; + memcpy(ptr, &size, sizeof(int32)); + size +=3; + ptr += data1->length(); + ptr2 += offset; + memcpy(ptr, ptr2, data1->length() - offset); + + EQ2Packet* outapp = new EQ2Packet(OP_ClientCmdMsg, data3, size); + //DumpPacket(outapp); + safe_delete_array(data3); + safe_delete(packet); + return outapp; +} + +void Spell::AddSpellEffect(int8 percentage, int8 subbullet, string description){ + SpellDisplayEffect* effect = new SpellDisplayEffect; + effect->description = description; + effect->subbullet = subbullet; + effect->percentage = percentage; + MSpellInfo.lock(); + effects.push_back(effect); + MSpellInfo.unlock(); +} + +int16 Spell::GetHPRequired(Spawn* spawn){ + int16 hp_req = spell->hp_req; + if(spawn && spell->hp_req_percent > 0){ + double result = ((double)spell->hp_req_percent/100)*spawn->GetTotalHP(); + if(result >= (((int16)result) + .5)) + result++; + hp_req = (int16)result; + } + return hp_req; +} + +int16 Spell::GetPowerRequired(Spawn* spawn){ + int16 power_req; + if (spell->power_by_level == true) { + power_req =round( (spell->power_req) * spawn->GetLevel()); + } + else { + power_req = round(spell->power_req); + } + if(spawn && spell->power_req_percent > 0){ + double result = ((double)spell->power_req_percent/100)*spawn->GetTotalPower(); + if(result >= (((int16)result) + .5)) + result++; + power_req = (int16)result; + } + return power_req; +} + +int16 Spell::GetSavageryRequired(Spawn* spawn){ + int16 savagery_req = spell->savagery_req; + if(spawn && spell->savagery_req_percent > 0){ + double result = ((double)spell->savagery_req_percent/100)*spawn->GetTotalSavagery(); + if(result >= (((int16)result) + .5)) + result++; + savagery_req = (int16)result; + } + return savagery_req; +} + +int16 Spell::GetDissonanceRequired(Spawn* spawn){ + int16 dissonance_req = spell->dissonance_req; + if(spawn && spell->dissonance_req_percent > 0){ + double result = ((double)spell->dissonance_req_percent/100)*spawn->GetTotalDissonance(); + if(result >= (((int16)result) + .5)) + result++; + dissonance_req = (int16)result; + } + return dissonance_req; +} + +int32 Spell::GetSpellDuration(){ + if(spell->duration1 == spell->duration2) + return spell->duration1; + + int32 difference = 0; + int32 lower = 0; + if(spell->duration2 > spell->duration1){ + difference = spell->duration2 - spell->duration1; + lower = spell->duration1; + } + else{ + difference = spell->duration1 - spell->duration2; + lower = spell->duration2; + } + int32 duration = (rand()%difference) + lower; + return duration; +} + +const char* Spell::GetName(){ + return spell->name.data.c_str(); +} + +const char* Spell::GetDescription(){ + return spell->description.data.c_str(); +} + +void Spell::AddSpellLevel(int8 adventure_class, int8 tradeskill_class, int16 level){ + LevelArray* lvl = new LevelArray; + lvl->adventure_class = adventure_class; + lvl->tradeskill_class = tradeskill_class; + lvl->spell_level = level; + MSpellInfo.lock(); + levels.push_back(lvl); + MSpellInfo.unlock(); +} + +int32 Spell::GetSpellID(){ + if (spell) + return spell->id; + return 0; +} + +int8 Spell::GetSpellTier(){ + if (spell) + return spell->tier; + return 0; +} + +vector* Spell::GetLUAData(){ + return &lua_data; +} +SpellData* Spell::GetSpellData(){ + return spell; +} + +int16 Spell::GetSpellIcon(){ + if (spell) + return spell->icon; + return 0; +} + +int16 Spell::GetSpellIconBackdrop(){ + if (spell) + return spell->icon_backdrop; + return 0; +} + +int16 Spell::GetSpellIconHeroicOp(){ + if (spell) + return spell->icon_heroic_op; + return 0; +} + +bool Spell::IsHealSpell(){ + return heal_spell; +} + +bool Spell::IsBuffSpell(){ + return buff_spell; +} + +bool Spell::IsDamageSpell(){ + return damage_spell; +} +bool Spell::IsControlSpell(){ + return control_spell; +} + +bool Spell::IsOffenseSpell(){ + return offense_spell; +} + +void Spell::ModifyCastTime(Entity* caster){ + int16 cast_time = spell->cast_time; + float cast_speed = caster->GetInfoStruct()->casting_speed; + if (cast_time > 0){ + if (cast_speed > 0) // casting speed can only reduce up to half a cast time + spell->cast_time *= max((float) 0.5, (float) (1 / (1 + (cast_speed * .01)))); + else if (cast_speed < 0) // not sure if casting speed debuff is capped on live or not, capping at 1.5 * the normal rate for now + spell->cast_time *= min((float) 1.5, (float) (1 + (1 - (1 / (1 + (cast_speed * -.01)))))); + } +} + +vector * Spell::GetSpellEffects(){ + MSpellInfo.lock(); + vector * ret = &effects; + MSpellInfo.unlock(); + return ret; +} + +vector * Spell::GetSpellLevels(){ + MSpellInfo.lock(); + vector * ret = &levels; + MSpellInfo.unlock(); + return ret; +} + +bool Spell::ScribeAllowed(Player* player){ + bool ret = false; + if(player){ + MSpellInfo.lock(); + for(int32 i=0;!ret && iGetLevel(); + int16 spelllevels = levels[i]->spell_level; + bool advlev = player->GetAdventureClass() == levels[i]->adventure_class; + bool tslev = player->GetTradeskillClass() == levels[i]->tradeskill_class; + bool levelmatch = player->GetLevel() >= levels[i]->spell_level; + if((player->GetAdventureClass() == levels[i]->adventure_class || player->GetTradeskillClass() == levels[i]->tradeskill_class) && player->GetLevel() >= levels[i]->spell_level/10) + ret = true; + } + MSpellInfo.unlock(); + } + return ret; +} + +MasterSpellList::MasterSpellList(){ + MMasterSpellList.SetName("MasterSpellList::MMasterSpellList"); +} + +MasterSpellList::~MasterSpellList(){ + DestroySpells(); +} +void MasterSpellList::DestroySpells(){ + + spell_errors.clear(); + + MMasterSpellList.lock(); + map >::iterator iter; + map::iterator iter2; + for(iter = spell_list.begin();iter != spell_list.end(); iter++){ + for(iter2 = iter->second.begin();iter2 != iter->second.end(); iter2++){ + safe_delete(iter2->second); + } + } + spell_list.clear(); + MMasterSpellList.unlock(); +} +void MasterSpellList::AddSpell(int32 id, int8 tier, Spell* spell){ + MMasterSpellList.lock(); + spell_list[id][tier] = spell; + spell_name_map[spell->GetName()] = spell; + spell_soecrc_map[spell->GetSpellData()->soe_spell_crc] = spell; + MMasterSpellList.unlock(); +} + +Spell* MasterSpellList::GetSpell(int32 id, int8 tier){ + if (spell_list.count(id) > 0 && spell_list[id].count(tier) > 0) + return spell_list[id][tier]; + return 0; +} + +Spell* MasterSpellList::GetSpellByName(const char* name){ + if(spell_name_map.count(name) > 0) + return spell_name_map[name]; + return 0; +} + +Spell* MasterSpellList::GetSpellByCRC(int32 spell_crc){ + if(spell_soecrc_map.count(spell_crc) > 0) + return spell_soecrc_map[spell_crc]; + return 0; +} + +EQ2Packet* MasterSpellList::GetSpellPacket(int32 id, int8 tier, Client* client, bool display, int8 packet_type){ + Spell* spell = GetSpell(id, tier); + if(spell) + return spell->SerializeSpell(client, display, packet_type); + return 0; +} +EQ2Packet* MasterSpellList::GetAASpellPacket(int32 id, int8 tier, Client* client, bool display, int8 packet_type) { + Spell* spell = GetSpell(id, (tier == 0 ? 1 : tier)); + //Spell* spell2= GetSpell(id, (tier +1)); + AltAdvanceData* data = master_aa_list.GetAltAdvancement(id); + if (spell) + return spell->SerializeAASpell(client,tier, data, display,false, packet_type); + return 0; +} + +EQ2Packet* MasterSpellList::GetSpecialSpellPacket(int32 id, int8 tier, Client* client, bool display, int8 packet_type){ + Spell* spell = GetSpell(id, tier); + if(spell) + return spell->SerializeSpecialSpell(client, display, packet_type, 0x81); + return 0; +} + +vector* MasterSpellList::GetSpellListByAdventureClass(int8 class_id, int16 max_level, int8 max_tier){ + vector* ret = new vector; + Spell* spell = 0; + vector* levels = 0; + LevelArray* level = 0; + vector::iterator level_itr; + MMasterSpellList.lock(); + map >::iterator iter; + map::iterator iter2; + max_level *= 10; //convert to client level format, which is 10 times higher + for(iter = spell_list.begin();iter != spell_list.end(); iter++){ + for(iter2 = iter->second.begin();iter2 != iter->second.end(); iter2++){ + spell = iter2->second; + if(iter2->first <= max_tier && spell){ + levels = spell->GetSpellLevels(); + for(level_itr = levels->begin(); level_itr != levels->end(); level_itr++){ + level = *level_itr; + if(level->spell_level <= max_level && level->adventure_class == class_id){ + ret->push_back(spell); + break; + } + } + } + } + } + MMasterSpellList.unlock(); + return ret; +} + +vector* MasterSpellList::GetSpellListByTradeskillClass(int8 class_id, int16 max_level, int8 max_tier){ + vector* ret = new vector; + Spell* spell = 0; + vector* levels = 0; + LevelArray* level = 0; + vector::iterator level_itr; + MMasterSpellList.lock(); + map >::iterator iter; + map::iterator iter2; + for(iter = spell_list.begin();iter != spell_list.end(); iter++){ + for(iter2 = iter->second.begin();iter2 != iter->second.end(); iter2++){ + spell = iter2->second; + if(iter2->first <= max_tier && spell){ + levels = spell->GetSpellLevels(); + for(level_itr = levels->begin(); level_itr != levels->end(); level_itr++){ + level = *level_itr; + if(level->spell_level <= max_level && level->tradeskill_class == class_id){ + ret->push_back(spell); + break; + } + } + } + } + } + MMasterSpellList.unlock(); + return ret; +} + +void MasterSpellList::Reload(){ + master_trait_list.DestroyTraits(); + DestroySpells(); + database.LoadSpells(); + database.LoadSpellErrors(); + database.LoadTraits(); +} + +int16 MasterSpellList::GetSpellErrorValue(int16 version, int8 error_index) { + version = GetClosestVersion(version); + + if (spell_errors[version].count(error_index) == 0) { + LogWrite(SPELL__ERROR, 0, "Spells", "No spell error entry. (version = %i, error_index = %i)", version, error_index); + // 1 will give the client a pop up message of "Cannot cast" and a chat message of "[BUG] Cannot cast. Unknown failure casting spell." + return 1; + } + return spell_errors[version][error_index]; +} + +void MasterSpellList::AddSpellError(int16 version, int8 error_index, int16 error_value) { + if (spell_errors[version].count(error_index) == 0) + spell_errors[version][error_index] = error_value; +} + +int16 MasterSpellList::GetClosestVersion(int16 version) { + int16 ret = 0; + map >::iterator itr; + // Get the closest version in the list that is less then or equal to the given version + for (itr = spell_errors.begin(); itr != spell_errors.end(); itr++) { + if (itr->first <= version) { + if (itr->first > ret) + ret = itr->first; + } + } + + return ret; +} + +bool Spell::CastWhileStunned(){ + return (spell->casting_flags & CASTING_FLAG_STUNNED) == CASTING_FLAG_STUNNED; +} + +bool Spell::CastWhileMezzed(){ + return (spell->casting_flags & CASTING_FLAG_MEZZED) == CASTING_FLAG_MEZZED; +} + +bool Spell::CastWhileStifled(){ + return (spell->casting_flags & CASTING_FLAG_STIFLED) == CASTING_FLAG_STIFLED; +} + +bool Spell::CastWhileFeared(){ + return (spell->casting_flags & CASTING_FLAG_FEARED) == CASTING_FLAG_FEARED; +} diff --git a/EQ2/source/WorldServer/Spells.h b/EQ2/source/WorldServer/Spells.h new file mode 100644 index 000000000..e91756986 --- /dev/null +++ b/EQ2/source/WorldServer/Spells.h @@ -0,0 +1,390 @@ +/* + EQ2Emulator: Everquest II Server Emulator + Copyright (C) 2007 EQ2EMulator Development Team (http://www.eq2emulator.net) + + This file is part of EQ2Emulator. + + EQ2Emulator is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + EQ2Emulator is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with EQ2Emulator. If not, see . +*/ +#ifndef __EQ2_SPELLS__ +#define __EQ2_SPELLS__ +#include +#include +#include "../common/types.h" +#include "../common/EQPacket.h" +#include "../common/MiscFunctions.h" +#include "client.h" +#include "../common/Mutex.h" +#include "AltAdvancement/AltAdvancement.h" + +#define SPELL_TARGET_SELF 0 +#define SPELL_TARGET_ENEMY 1 +#define SPELL_TARGET_GROUP_AE 2 +#define SPELL_TARGET_CASTER_PET 3 +#define SPELL_TARGET_ENEMY_PET 4 +#define SPELL_TARGET_ENEMY_CORPSE 5 +#define SPELL_TARGET_GROUP_CORPSE 6 +#define SPELL_TARGET_NONE 7 +#define SPELL_TARGET_RAID_AE 8 +#define SPELL_TARGET_OTHER_GROUP_AE 9 + + +#define SPELL_BOOK_TYPE_SPELL 0 +#define SPELL_BOOK_TYPE_COMBAT_ART 1 +#define SPELL_BOOK_TYPE_ABILITY 2 +#define SPELL_BOOK_TYPE_TRADESKILL 3 +#define SPELL_BOOK_TYPE_NOT_SHOWN 4 + +#define SPELL_CAST_TYPE_NORMAL 0 +#define SPELL_CAST_TYPE_TOGGLE 1 + + +#define SPELL_ERROR_NOT_ENOUGH_KNOWLEDGE 1 +#define SPELL_ERROR_INTERRUPTED 2 +#define SPELL_ERROR_TAKE_EFFECT_MOREPOWERFUL 3 +#define SPELL_ERROR_TAKE_EFFECT_SAMESPELL 4 +#define SPELL_ERROR_CANNOT_CAST_DEAD 5 +#define SPELL_ERROR_NOT_ALIVE 6 +#define SPELL_ERROR_NOT_DEAD 7 +#define SPELL_ERROR_CANNOT_CAST_SITTING 8 +#define SPELL_ERROR_CANNOT_CAST_UNCON 9 +#define SPELL_ERROR_ALREADY_CASTING 10 +#define SPELL_ERROR_RECOVERING 11 +#define SPELL_ERROR_NON_COMBAT_ONLY 12 +#define SPELL_ERROR_CANNOT_CAST_STUNNED 13 +#define SPELL_ERROR_CANNOT_CAST_STIFFLED 14 +#define SPELL_ERROR_CANNOT_CAST_CHARMED 15 +#define SPELL_ERROR_NOT_WHILE_MOUNTED 16 +#define SPELL_ERROR_NOT_WHILE_FLYING 17 +#define SPELL_ERROR_NOT_WHILE_CLIMBING 18 +#define SPELL_ERROR_NOT_READY 19 +#define SPELL_ERROR_CANT_SEE_TARGET 20 +#define SPELL_ERROR_INCORRECT_STANCE 21 +#define SPELL_ERROR_CANNOT_CAST_FEIGNDEATH 22 +#define SPELL_ERROR_INVENTORY_FULL 23 +#define SPELL_ERROR_NOT_ENOUGH_COIN 24 +#define SPELL_ERROR_NOT_ALLOWED_HERE 25 +#define SPELL_ERROR_NOT_WHILE_CRAFTING 26 +#define SPELL_ERROR_ONLY_WHEN_CRAFTING 27 +#define SPELL_ERROR_ITEM_NOT_ATTUNED 28 +#define SPELL_ERROR_ITEM_WORN_OUT 29 +#define SPELL_ERROR_MUST_EQUIP_WEAPON 30 +#define SPELL_ERROR_WEAPON_BROKEN 31 +#define SPELL_ERROR_CANNOT_CAST_FEARED 32 +#define SPELL_ERROR_TARGET_IMMUNE_HOSTILE 33 +#define SPELL_ERROR_TARGET_IMMUNE_BENEFICIAL 34 +#define SPELL_ERROR_NO_TAUNT_SPELLS 35 +#define SPELL_ERROR_CANNOT_USE_IN_BATTLEGROUNDS 36 +#define SPELL_ERROR_CANNOT_PREPARE 37 +#define SPELL_ERROR_NO_ELIGIBLE_TARGET 38 +#define SPELL_ERROR_NO_TARGETS_IN_RANGE 39 +#define SPELL_ERROR_TOO_CLOSE 40 +#define SPELL_ERROR_TOO_FAR_AWAY 41 +#define SPELL_ERROR_TARGET_TOO_WEAK 42 +#define SPELL_ERROR_TARGET_TOO_POWERFUL 43 +#define SPELL_ERROR_WONT_WORK_ON_TARGET 44 +#define SPELL_ERROR_TARGET_INVULNERABLE 45 +#define SPELL_ERROR_TARGET_IMMUNE 46 +#define SPELL_ERROR_TARGET_ENGAGED 47 +#define SPELL_ERROR_TARGET_NOT_GROUPED 48 +#define SPELL_ERROR_TARGET_IN_USE 49 +#define SPELL_ERROR_TARGET_GROUP_HAS_SPELL 50 +#define SPELL_ERROR_TARGET_ALREADY_ENGAGED 51 +#define SPELL_ERROR_CANNOT_ENGAGE 52 +#define SPELL_ERROR_NOT_A_FRIEND 53 +#define SPELL_ERROR_NOT_AN_ENEMY 54 +#define SPELL_ERROR_TARGET_INVENTORY_FULL 55 +#define SPELL_ERROR_FINISH_DUELING_FIRST 56 +#define SPELL_ERROR_ILLEGAL_TARGET_ATTACK 57 +#define SPELL_ERROR_NOT_WHILE_MENTORING_PVP 58 +#define SPELL_ERROR_NOT_WHILE_MENTORING_BENEFICIAL 59 +#define SPELL_ERROR_ILLEGAL_TARGET_HEAL_OUTSIDE_LEVEL_RANGE 60 +#define SPELL_ERROR_NOTHING_TO_CURE 61 +#define SPELL_ERROR_NOT_ENOUGH_POWER 62 +#define SPELL_ERROR_NOT_ENOUGH_HEALTH 63 +#define SPELL_ERROR_NOT_ENOUGH_CONC 64 +#define SPELL_ERROR_MISSING_COMPONENT 65 +#define SPELL_ERROR_OUT_OF_CHARGES 66 +#define SPELL_ERROR_LACK_AMMO 67 +#define SPELL_ERROR_NO_RANGED_EQUIPPED 68 +#define SPELL_ERROR_RANGED_NEEDS_REPAIR 69 +#define SPELL_ERROR_LACK_WEAPON_TYPE 70 +#define SPELL_ERROR_NOT_ENOUGH_SAVAGERY 71 +#define SPELL_ERROR_ALREADY_PREPARED 72 +#define SPELL_ERROR_ALREADY_HAVE_SPELL 73 +#define SPELL_ERROR_NOT_SMART_ENOUGH 74 // "You lack the intellectual capacity to prepare another spell." +#define SPELL_ERROR_NO_HOSTILE_SPELLS 75 +#define SPELL_ERROR_NO_BENEFICIAL_SPELLS 76 +#define SPELL_ERROR_CANNOT_MOUNT_NOW_SITTING 77 +#define SPELL_ERROR_CANNOT_MOUNT_NOW_DEAD 78 +#define SPELL_ERROR_CANNOT_MOUNT_NOW_CLIMBING 79 +#define SPELL_ERROR_CANNOT_MOUNT_NOW_FORM 80 +#define SPELL_ERROR_CANNOT_MOUNT_NOW_WATER_TO_DEEP 81 +#define SPELL_ERROR_ALREADY_CAST 82 +#define SPELL_ERROR_LOTTERY_IN_PROGRESS 83 +#define SPELL_ERROR_NOT_IN_PVP 84 +#define SPELL_ERROR_NOT_ENOUGH_DISSONANCE 85 +#define SPELL_ERROR_NOT_CANNOT_CAST_BUG_UNKNOWN_FAILURE 86 +#define SPELL_ERROR_NOT_CANNOT_CAST_BUG_SPELL_TEMPLATE 87 +#define SPELL_ERROR_NOT_PREPARED_BUG 88 +#define SPELL_ERROR_NOT_CANNOT_CAST_BUG_NO_GAME_WORLD 89 +#define SPELL_ERROR_NOT_CANNOT_CAST_BUG_NO_OWNER 90 +#define SPELL_ERROR_NOT_CANNOT_CAST_BUG_OWNER_TYPE 91 +#define SPELL_ERROR_NOT_CANNOT_CAST_BUG_NO_CASTER 92 +#define SPELL_ERROR_NO_RESPONSE_10 93 +#define SPELL_ERROR_BUG_PARTIAL_INTERUPT 94 +#define SPELL_ERROR_NO_RESPONSE_15 95 +#define SPELL_ERROR_BUG_TARGET_RESISTED 96 +#define SPELL_ERROR_BUG_TARGET_REFLECTED 97 +#define SPELL_ERROR_NO_RESPONSE_18 98 +#define SPELL_ERROR_NO_RESPONSE_35 99 +#define SPELL_ERROR_BUG_UNKNOWN_43 100 +#define SPELL_ERROR_BUG_UNKNOWN_44 101 +#define SPELL_ERROR_BUG_UNKNOWN_47 102 +#define SPELL_ERROR_TARGET_IMMUNE_HEALED_WITH_REPAIRS 103 +#define SPELL_ERROR_NOT_WHILE_MENTORING 104 +#define SPELL_ERROR_BUG_NO_EFFECTS_LANDED 105 +#define SPELL_ERROR_TOO_MUCH_DISSONANCE 106 +#define SPELL_ERROR_BUG_INVALID_SPELL_INDEX 107 +#define SPELL_ERROR_CANNOT_CAST_NOT_FOUND_95 108 +#define SPELL_ERROR_BUG_CONTAINMENT_TYPE 109 +#define SPELL_ERROR_BUG_SLOT_FULL 110 +#define SPELL_ERROR_CANNOT_CAST_NO_SPELL_101 111 +#define SPELL_ERROR_RECOVERING_ITEM_ABILITY 112 +#define SPELL_ERROR_NO_RESPONSE_110 113 +#define SPELL_ERROR_ALREADY_CAST_ON_TARGET 114 + +#define CASTING_FLAG_MEZZED 1 +#define CASTING_FLAG_STIFLED 2 +#define CASTING_FLAG_STUNNED 4 +#define CASTING_FLAG_FEARED 8 + +// Spell type is for AI so code knows what a spell is +#define SPELL_TYPE_UNSET 1 +#define SPELL_TYPE_DD 2 +#define SPELL_TYPE_DOT 3 +#define SPELL_TYPE_HEAL 4 +#define SPELL_TYPE_HOT_WARD 5 +#define SPELL_TYPE_DEBUFF 6 +#define SPELL_TYPE_BUFF 7 +#define SPELL_TYPE_COMBATBUFF 8 +#define SPELL_TYPE_TAUNT 9 +#define SPELL_TYPE_DETAUNT 10 +#define SPELL_TYPE_REZ 11 +#define SPELL_TYPE_CURE 12 + + +struct LUAData{ + int8 type; + sint32 int_value; + bool bool_value; + float float_value; + string string_value; + string string_value2; + sint32 int_value2; + float float_value2; + string string_helper; +}; +struct SpellScriptTimer { + LuaSpell* spell; + string customFunction; + int32 time; + int32 caster; + int32 target; + bool deleteWhenDone; +}; +struct LevelArray{ + int8 adventure_class; + int8 tradeskill_class; + int16 spell_level; +}; +struct SpellDisplayEffect{ + int8 percentage; + int8 subbullet; + string description; +}; +struct SpellData{ + int32 spell_book_type; + int32 id; + sint16 icon; + int16 icon_heroic_op; + int16 icon_backdrop; + int16 type; + int32 class_skill; + int32 mastery_skill; + int8 ts_loc_index; + int8 num_levels; + int8 tier; + int16 hp_req; + int16 hp_upkeep; + float power_req; + bool power_by_level; + int16 power_upkeep; + int16 savagery_req; + int16 savagery_upkeep; + int16 dissonance_req; + int16 dissonance_upkeep; + int8 target_type; + int16 cast_time; + float recovery; + float recast; + int32 linked_timer; + float radius; + int16 max_aoe_targets; + int8 friendly_spell; + int16 req_concentration; + float range; + int32 duration1; + int32 duration2; + float resistibility; + bool duration_until_cancel; + int8 power_req_percent; + int8 hp_req_percent; + int8 savagery_req_percent; + int8 dissonance_req_percent; + EQ2_8BitString name; + EQ2_16BitString description; + string success_message; + string fade_message; + int8 cast_type; + string lua_script; + int32 call_frequency; + bool interruptable; + int32 spell_visual; + string effect_message; + float min_range; + int8 can_effect_raid; + int8 affect_only_group_members; + int8 group_spell; + float hit_bonus; + int8 display_spell_tier; + int8 is_active; + int8 det_type; + bool incurable; + int8 control_effect_type; + int32 casting_flags; + bool cast_while_moving; + bool persist_though_death; + bool not_maintained; + bool is_aa; + int8 savage_bar; + int8 savage_bar_slot; + int32 soe_spell_crc; + int8 spell_type; +}; +class Spell{ +public: + ~Spell(); + Spell(); + Spell(SpellData* in_spell); + EQ2Packet* SerializeSpell(Client* client, bool display, bool trait_display = false, int8 packet_type = 0, int8 sub_packet_type = 0, const char* struct_name = 0); + EQ2Packet* SerializeSpecialSpell(Client* client, bool display, int8 packet_type = 0, int8 sub_packet_type = 0); + EQ2Packet* SerializeAASpell(Client* client,int8 tier, AltAdvanceData* data, bool display, bool trait_display = false, int8 packet_type = 0, int8 sub_packet_type = 0, const char* struct_name = 0); + void AddSpellLevel(int8 adventure_class, int8 tradeskill_class, int16 level); + void AddSpellEffect(int8 percentage, int8 subbullet, string description); + void AddSpellLuaData(int8 type, int int_value, int int_value2, float float_value, float float_value2, bool bool_value, string string_value,string string_value2, string helper); + void AddSpellLuaDataInt(int value, int value2, string helper); + void AddSpellLuaDataFloat(float value, float value2, string helper); + void AddSpellLuaDataBool(bool value, string helper); + void AddSpellLuaDataString(string value, string value2, string helper); + int32 GetSpellID(); + void SetPacketInformation(PacketStruct* packet, Client* client = 0, bool display_tier = false); + void SetAAPacketInformation(PacketStruct* packet, AltAdvanceData* data, Client* client = 0, bool display_tier = false); + int8 GetSpellTier(); + int32 GetSpellDuration(); + int16 GetSpellIcon(); + int16 GetSpellIconBackdrop(); + int16 GetSpellIconHeroicOp(); + int16 GetLevelRequired(Client* client); + int16 GetHPRequired(Spawn* spawn); + int16 GetPowerRequired(Spawn* spawn); + int16 GetSavageryRequired(Spawn* spawn); + int16 GetDissonanceRequired(Spawn* spawn); + SpellData* GetSpellData(); + bool ScribeAllowed(Player* player); + vector* GetLUAData(); + vector * GetSpellLevels(); + vector * GetSpellEffects(); + const char* GetName(); + const char* GetDescription(); + bool IsHealSpell(); + bool IsBuffSpell(); + bool IsDamageSpell(); + bool IsControlSpell(); + bool IsOffenseSpell(); + void ModifyCastTime(Entity* caster); + bool CastWhileStunned(); + bool CastWhileMezzed(); + bool CastWhileStifled(); + bool CastWhileFeared(); + + + + vector effects; + vector lua_data; +private: + bool heal_spell; + bool buff_spell; + bool damage_spell; + bool control_spell; + bool offense_spell; + + SpellData* spell; + + //vector effects; + vector levels; + Mutex MSpellInfo; +}; +class MasterSpellList{ +public: + MasterSpellList(); + ~MasterSpellList(); + void DestroySpells(); + map spell_name_map; + map > spell_list; + map spell_soecrc_map; + Spell* GetSpell(int32 id, int8 tier); + vector* GetSpellListByAdventureClass(int8 class_id, int16 max_level, int8 max_tier); + vector* GetSpellListByTradeskillClass(int8 class_id, int16 max_level, int8 max_tier); + Spell* GetSpellByName(const char* name); + Spell* GetSpellByCRC(int32 spell_crc); + void Reload(); + EQ2Packet* GetSpellPacket(int32 id, int8 tier, Client* client = 0, bool display = false, int8 packet_type = 0); + EQ2Packet* GetAASpellPacket(int32 id, int8 group, Client* client, bool display, int8 packet_type); + EQ2Packet* GetSpecialSpellPacket(int32 id, int8 tier, Client* client = 0, bool display = false, int8 packet_type = 0); + void AddSpell(int32 id, int8 tier, Spell* spell); + Mutex MMasterSpellList; + + /// Gets the correct spell error value for the given version + /// Client version + /// ID of the error + /// The int16 value for the given error and version + int16 GetSpellErrorValue(int16 version, int8 error_index); + + /// Adds a spell error to the list + /// Client version for the error + /// ID for the error + /// Value for the error + void AddSpellError(int16 version, int8 error_index, int16 error_value); + +private: + /// Helper function that gets the closest version in the spell_errors map that is less then or equal to the given version + /// Client version + /// int16 version that is closest to the given version + int16 GetClosestVersion(int16 version); + // map > + map > spell_errors; +}; +#endif + diff --git a/EQ2/source/WorldServer/Titles.cpp b/EQ2/source/WorldServer/Titles.cpp new file mode 100644 index 000000000..36c6efbed --- /dev/null +++ b/EQ2/source/WorldServer/Titles.cpp @@ -0,0 +1,120 @@ +/* + EQ2Emulator: Everquest II Server Emulator + Copyright (C) 2007 EQ2EMulator Development Team (http://www.eq2emulator.net) + + This file is part of EQ2Emulator. + + EQ2Emulator is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + EQ2Emulator is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with EQ2Emulator. If not, see . +*/ + +#include +#include +#include "Titles.h" +#include "../common/MiscFunctions.h" + +Title::Title(){ + id = 0; + memset(name, 0, sizeof(name)); + prefix = 0; + save_needed = false; +} + +Title::Title(Title* title){ + id = title->id; + strncpy(name, title->GetName(), sizeof(name)); + prefix = title->prefix; + save_needed = title->save_needed; +} + +Title::~Title(){ +} + +MasterTitlesList::MasterTitlesList(){ +} + +MasterTitlesList::~MasterTitlesList(){ + Clear(); +} + +void MasterTitlesList::Clear(){ + map::iterator itr; + for(itr = titles_list.begin(); itr != titles_list.end(); itr++) + safe_delete(itr->second); + titles_list.clear(); +} + +void MasterTitlesList::AddTitle(Title* title){ + assert(title); + if(titles_list.count(title->GetID()) == 0) + titles_list[title->GetID()] = title; +} + +int32 MasterTitlesList::Size(){ + return titles_list.size(); +} + +Title* MasterTitlesList::GetTitle(int32 id){ + if(titles_list.count(id) > 0) + return titles_list[id]; + else + return 0; +} + +Title* MasterTitlesList::GetTitleByName(const char* title_name){ + Title* title = 0; + map::iterator itr; + for(itr = titles_list.begin(); itr != titles_list.end(); itr++){ + Title* current_title = itr->second; + if(::ToLower(string(current_title->GetName())) == ::ToLower(string(title_name))){ + title = current_title; + break; + } + } + return title; +} + +map* MasterTitlesList::GetAllTitles(){ + return &titles_list; +} + +PlayerTitlesList::PlayerTitlesList(){ +} + +PlayerTitlesList::~PlayerTitlesList(){ + list::iterator itr; + for (itr = player_titles_list.begin(); itr != player_titles_list.end(); itr++) + safe_delete(*itr); +} + +Title* PlayerTitlesList::GetTitle(int32 index){ + list::iterator itr; + Title* title = 0; + Title* ret = 0; + for(itr = player_titles_list.begin(); itr != player_titles_list.end(); itr++){ + title = *itr; + if(title->GetID() == index){ + ret = title; + break; + } + } + return ret; +} + +list* PlayerTitlesList::GetAllTitles(){ + return &player_titles_list; +} + +void PlayerTitlesList::Add(Title* title){ + player_titles_list.push_back(title); +} \ No newline at end of file diff --git a/EQ2/source/WorldServer/Titles.h b/EQ2/source/WorldServer/Titles.h new file mode 100644 index 000000000..fbe07476a --- /dev/null +++ b/EQ2/source/WorldServer/Titles.h @@ -0,0 +1,78 @@ +/* + EQ2Emulator: Everquest II Server Emulator + Copyright (C) 2007 EQ2EMulator Development Team (http://www.eq2emulator.net) + + This file is part of EQ2Emulator. + + EQ2Emulator is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + EQ2Emulator is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with EQ2Emulator. If not, see . +*/ +#ifndef TITLES_H_ +#define TITLES_H_ + +#include +#include +#include +#include "../common/Mutex.h" +#include "../common/types.h" + +using namespace std; + +class Title { +public: + Title(); + Title(Title* title); + ~Title(); + void SetID(int32 id) {this->id = id;} + void SetName(const char *name) {strncpy(this->name, name, sizeof(this->name));} + void SetPrefix(int8 prefix) {this->prefix = prefix;} + void SetSaveNeeded(bool save_needed) {this->save_needed = save_needed;} + + int32 GetID() {return id;} + const char* GetName() {return name;} + int8 GetPrefix() {return prefix;} + bool GetSaveNeeded() {return save_needed;} + +private: + int32 id; + int8 prefix; + char name[256]; + bool save_needed; +}; + +class MasterTitlesList { +public: + MasterTitlesList(); + ~MasterTitlesList(); + void Clear(); + int32 Size(); + void AddTitle(Title* title); + Title* GetTitle(int32 id); + Title* GetTitleByName(const char* title_name); + map* GetAllTitles(); + +private: + map titles_list; +}; + +class PlayerTitlesList { +public: + PlayerTitlesList(); + ~PlayerTitlesList(); + Title* GetTitle(int32 index); + list* GetAllTitles(); + void Add(Title* title); +private: + list player_titles_list; +}; +#endif \ No newline at end of file diff --git a/EQ2/source/WorldServer/Trade.cpp b/EQ2/source/WorldServer/Trade.cpp new file mode 100644 index 000000000..339538ed6 --- /dev/null +++ b/EQ2/source/WorldServer/Trade.cpp @@ -0,0 +1,530 @@ +#include "Trade.h" +#include "Items/Items.h" +#include "Entity.h" +#include "Bots/Bot.h" +#include "../common/Log.h" + +extern ConfigReader configReader; +extern MasterItemList master_item_list; + +Trade::Trade(Entity* trader1, Entity* trader2) { + this->trader1 = trader1; + this->trader2 = trader2; + + trader1_accepted = false; + trader2_accepted = false; + + trader1_coins = 0; + trader2_coins = 0; + + + OpenTradeWindow(); +} + +Trade::~Trade() { + +} + +int8 Trade::AddItemToTrade(Entity* character, Item* item, int8 quantity, int8 slot) { + LogWrite(PLAYER__ERROR, 0, "Trade", "Player (%s) adding item (%u) to slot %u of the trade window", character->GetName(), item->details.item_id, slot); + if (slot == 255) + slot = GetNextFreeSlot(character); + + if (slot < 0 || slot > 11) { + LogWrite(PLAYER__ERROR, 0, "Trade", "Player (%s) tried to add an item to an invalid trade slot (%u)", character->GetName(), slot); + return 255; + } + + Entity* other = GetTradee(character); + int8 result = CheckItem(character, item, other->IsBot()); + + if (result == 0) { + if (character == trader1) { + Trader1ItemAdd(item, quantity, slot); + // Only trader2 can be a bot so only + // need to do the bot check here + if (trader2->IsBot()) { + ((Bot*)trader2)->TradeItemAdded(item); + } + } + else if (character == trader2) + Trader2ItemAdd(item, quantity, slot); + else { + LogWrite(PLAYER__ERROR, 0, "Trade", "Player (%s) tried to add an item to a trade but was neither trader1 or trader2", character->GetName()); + return 255; + } + } + + SendTradePacket(); + return result; +} + +int8 Trade::CheckItem(Entity* trader, Item* item, bool other_is_bot) { + int8 ret = 0; + map* list = 0; + map::iterator itr; + + if (trader == trader1) + list = &trader1_items; + else if (trader == trader2) + list = &trader2_items; + + if (list) { + if (trader->IsPlayer()) { + // Check to see if the item is already in the trade + for (itr = list->begin(); itr != list->end(); itr++) { + if (itr->second.item->details.unique_id == item->details.unique_id) { + ret = 1; + break; + } + } + + // Only allow heirloom and no-trade items to be traded with a bot + if (!other_is_bot) { + if (item->CheckFlag(NO_TRADE)) + ret = 2; + if (item->CheckFlag2(HEIRLOOM)) + ret = 3; + } + } + } + + return ret; +} + +void Trade::RemoveItemFromTrade(Entity* character, int8 slot) { + map* list = 0; + + if (character == trader1) + list = &trader1_items; + else if (character == trader2) + list = &trader2_items; + + if (list) { + if (list->count(slot) > 0) { + list->erase(slot); + SendTradePacket(); + } + else + LogWrite(PLAYER__ERROR, 0, "Trade", "Player (%s) tried to remove an item from a trade slot that was empty ", character->GetName()); + } +} + +void Trade::AddCoinToTrade(Entity* character, int64 amount) { + if (!character->IsPlayer()) + return; + + if (character == trader1) { + trader1_coins += amount; + if (!((Player*)character)->HasCoins(trader1_coins)) { + trader1_coins -= amount; + LogWrite(PLAYER__ERROR, 0, "Trade", "Player (%s) tried to add more coins then they had ", character->GetName()); + } + } + else if (character == trader2) { + trader2_coins += amount; + if (!((Player*)character)->HasCoins(trader2_coins)) { + trader2_coins -= amount; + LogWrite(PLAYER__ERROR, 0, "Trade", "Player (%s) tried to add more coins then they had ", character->GetName()); + } + } + + SendTradePacket(); +} + +void Trade::RemoveCoinFromTrade(Entity* character, int64 amount) { + if (character == trader1) + trader1_coins = (amount >= trader1_coins) ? 0 : trader1_coins - amount; + else if (character == trader2) + trader2_coins = (amount >= trader2_coins) ? 0 : trader2_coins - amount; + + SendTradePacket(); +} + +Entity* Trade::GetTradee(Entity* character) { + if (character == trader1) + return trader2; + else if (character == trader2) + return trader1; + + return 0; +} + +bool Trade::SetTradeAccepted(Entity* character) { + if (character == trader1) + trader1_accepted = true; + else if (character == trader2) + trader2_accepted = true; + else + return false; + + Entity* other = GetTradee(character); + if (other) { + if (other->IsPlayer()) { + Client* client = other->GetZone()->GetClientBySpawn(other); + PacketStruct* packet = configReader.getStruct("WS_PlayerTrade", client->GetVersion()); + if (packet) { + packet->setDataByName("spawn_id", client->GetPlayer()->GetIDWithPlayerSpawn(character)); + packet->setDataByName("type", 16); + client->QueuePacket(packet->serialize()); + safe_delete(packet); + } + } + else if (other->IsBot()) { + Client* client = character->GetZone()->GetClientBySpawn(character); + if (trader1_coins > 0) { + CancelTrade(other); + if (client) + client->SimpleMessage(CHANNEL_ERROR, "Bots can't take coins so the trade was canceled."); + + return true; + } + else { + if (!((Bot*)other)->CheckTradeItems(&trader1_items)) { + CancelTrade(other); + if (client) + client->SimpleMessage(CHANNEL_ERROR, "There was an item the bot could not equip so the trade was canceled."); + + return true; + } + else + trader2_accepted = true; + } + } + + if (HasAcceptedTrade(other)) { + CompleteTrade(); + return true; + } + } + + return false; +} + +bool Trade::HasAcceptedTrade(Entity* character) { + if (character == trader1) + return trader1_accepted; + else if (character == trader2) + return trader2_accepted; + + return false; +} + +void Trade::CancelTrade(Entity* character) { + Entity* other = GetTradee(character); + if (other){ + if (other->IsPlayer()) { + Client* client = other->GetZone()->GetClientBySpawn(other); + PacketStruct* packet = configReader.getStruct("WS_PlayerTrade", client->GetVersion()); + if (packet) { + packet->setDataByName("spawn_id", client->GetPlayer()->GetIDWithPlayerSpawn(character)); + packet->setDataByName("type", 2); + client->QueuePacket(packet->serialize()); + safe_delete(packet); + } + } + else if (other->IsBot()) + ((Bot*)other)->FinishTrade(); + } + + trader1->trade = 0; + trader2->trade = 0; +} + +void Trade::Trader1ItemAdd(Item* item, int8 quantity, int8 slot) { + trader1_items[slot].item = item; + trader1_items[slot].quantity = quantity; +} + +void Trade::Trader2ItemAdd(Item* item, int8 quantity, int8 slot) { + trader2_items[slot].item = item; + trader2_items[slot].quantity = quantity; +} + +void Trade::CompleteTrade() { + map::iterator itr; + map trader1_item_ids; + map::iterator itr2; + string log_string = "TradeComplete:\n"; + + if (trader1->IsPlayer()) { + Player* player = (Player*)trader1; + Client* client = player->GetZone()->GetClientBySpawn(player); + if (client) { + log_string += "Trader1 = "; + log_string += trader1->GetName(); + log_string += "(" + to_string(client->GetCharacterID()) + ")\n"; + log_string += "Coins: " + to_string(trader1_coins) + "\n"; + log_string += "Items:\n"; + player->RemoveCoins(trader1_coins); + for (itr = trader1_items.begin(); itr != trader1_items.end(); itr++) { + // client->RemoveItem can delete the item so we need to store the item id's and quantity to give to trader2 + trader1_item_ids[itr->second.item->details.item_id] = itr->second.quantity; + log_string += itr->second.item->name + " (" + to_string(itr->second.item->details.item_id) + ") x" + to_string(itr->second.quantity) + "\n"; + client->RemoveItem(itr->second.item, itr->second.quantity); + } + + player->AddCoins(trader2_coins); + for (itr = trader2_items.begin(); itr != trader2_items.end(); itr++) { + client->AddItem(itr->second.item->details.item_id, itr->second.quantity); + } + + PacketStruct* packet = configReader.getStruct("WS_PlayerTrade", client->GetVersion()); + if (packet) { + packet->setDataByName("spawn_id", client->GetPlayer()->GetIDWithPlayerSpawn(trader2)); + packet->setDataByName("type", 24); + client->QueuePacket(packet->serialize()); + safe_delete(packet); + } + } + } + // trader1 is the player who starts the trade, will never be a bot, if trader1 is not a player something went horribly wrong. + + + if (trader2->IsPlayer()) { + Player* player = (Player*)trader2; + Client* client = player->GetZone()->GetClientBySpawn(player); + if (client) { + log_string += "Trader2 = "; + log_string += trader2->GetName(); + log_string += "(" + to_string(client->GetCharacterID()) + ")\n"; + log_string += "Coins: " + to_string(trader2_coins) + "\n"; + log_string += "Items:\n"; + player->RemoveCoins(trader2_coins); + for (itr = trader2_items.begin(); itr != trader2_items.end(); itr++) { + log_string += itr->second.item->name + " (" + to_string(itr->second.item->details.item_id) + ") x" + to_string(itr->second.quantity) + "\n"; + client->RemoveItem(itr->second.item, itr->second.quantity); + } + + player->AddCoins(trader1_coins); + for (itr2 = trader1_item_ids.begin(); itr2 != trader1_item_ids.end(); itr2++) { + client->AddItem(itr2->first, itr2->second); + } + + PacketStruct* packet = configReader.getStruct("WS_PlayerTrade", client->GetVersion()); + if (packet) { + packet->setDataByName("spawn_id", client->GetPlayer()->GetIDWithPlayerSpawn(trader1)); + packet->setDataByName("type", 24); + client->QueuePacket(packet->serialize()); + safe_delete(packet); + } + } + } + else if (trader2->IsBot()) { + Bot* bot = (Bot*)trader2; + log_string += "Trader2 is a bot"; + for (itr = trader2_items.begin(); itr != trader2_items.end(); itr++) { + bot->RemoveItem(itr->second.item); + } + + for (itr2 = trader1_item_ids.begin(); itr2 != trader1_item_ids.end(); itr2++) { + bot->GiveItem(itr2->first); + } + bot->FinishTrade(); + } + + LogWrite(PLAYER__INFO, 0, "Trade", log_string.c_str()); + + trader1->trade = 0; + trader2->trade = 0; +} + +void Trade::OpenTradeWindow() { + if (trader1->IsPlayer()) { + Client* client = trader1->GetZone()->GetClientBySpawn(trader1); + PacketStruct* packet = configReader.getStruct("WS_PlayerTrade", client->GetVersion()); + if (packet) { + packet->setDataByName("spawn_id", client->GetPlayer()->GetIDWithPlayerSpawn(trader2)); + packet->setDataByName("type", 1); + client->QueuePacket(packet->serialize()); + safe_delete(packet); + } + } + + if (trader2->IsPlayer()) { + Client* client = trader2->GetZone()->GetClientBySpawn(trader2); + PacketStruct* packet = configReader.getStruct("WS_PlayerTrade", client->GetVersion()); + if (packet) { + packet->setDataByName("spawn_id", client->GetPlayer()->GetIDWithPlayerSpawn(trader1)); + packet->setDataByName("type", 1); + client->QueuePacket(packet->serialize()); + safe_delete(packet); + } + } +} + +void Trade::SendTradePacket() { + if (trader1->IsPlayer()) { + Client* client = trader1->GetZone()->GetClientBySpawn(trader1); + + PacketStruct* packet = configReader.getStruct("WS_PlayerTrade", client->GetVersion()); + if (packet) { + packet->setDataByName("spawn_id", client->GetPlayer()->GetIDWithPlayerSpawn(trader2)); + packet->setDataByName("type", 1); + + int8 size = (int8)(trader1_items.size()); + int8 i = 0; + map::iterator itr; + + packet->setArrayLengthByName("your_item_count", size); + for (itr = trader1_items.begin(); itr != trader1_items.end(); itr++) { + packet->setArrayDataByName("your_item_unknown1", 1, i); + packet->setArrayDataByName("your_item_unknown2", 1, i); + packet->setArrayDataByName("your_item_slot", itr->first, i); + packet->setArrayDataByName("your_item_id", itr->second.item->details.item_id, i); + packet->setArrayDataByName("your_item_quantity", itr->second.quantity, i); + packet->setArrayDataByName("your_item_icon", itr->second.item->details.icon, i); + packet->setArrayDataByName("your_item_background", 0, i); // No clue on this value yet + i++; + } + int32 plat = 0; + int32 gold = 0; + int32 silver = 0; + int32 copper = 0; + + CalculateCoins(trader1_coins, plat, gold, silver, copper); + packet->setDataByName("your_copper", copper); + packet->setDataByName("your_silver", silver); + packet->setDataByName("your_gold", gold); + packet->setDataByName("your_plat", plat); + + + size = (int8)(trader2_items.size()); + i = 0; + + packet->setArrayLengthByName("their_item_count", size); + for (itr = trader2_items.begin(); itr != trader2_items.end(); itr++) { + packet->setArrayDataByName("their_item_unknown1", 1, i); + packet->setArrayDataByName("their_item_unknown2", 1, i); + packet->setArrayDataByName("their_item_slot", itr->first, i); + packet->setArrayDataByName("their_item_id", itr->second.item->details.item_id, i); + packet->setArrayDataByName("their_item_quantity", itr->second.quantity, i); + packet->setArrayDataByName("their_item_icon", itr->second.item->details.icon, i); + packet->setArrayDataByName("their_item_background", 0, i); // No clue on this value yet + i++; + } + + plat = 0; + gold = 0; + silver = 0; + copper = 0; + + CalculateCoins(trader2_coins, plat, gold, silver, copper); + packet->setDataByName("their_copper", copper); + packet->setDataByName("their_silver", silver); + packet->setDataByName("their_gold", gold); + packet->setDataByName("their_plat", plat); + + LogWrite(PLAYER__ERROR, 0, "Trade", "packet sent"); + client->QueuePacket(packet->serialize()); + safe_delete(packet); + } + } + + if (trader2->IsPlayer()) { + Client* client = trader2->GetZone()->GetClientBySpawn(trader2); + PacketStruct* packet = configReader.getStruct("WS_PlayerTrade", client->GetVersion()); + if (packet) { + packet->setDataByName("spawn_id", client->GetPlayer()->GetIDWithPlayerSpawn(trader1)); + packet->setDataByName("type", 1); + + int8 size = (int8)(trader2_items.size()); + int8 i = 0; + map::iterator itr; + + packet->setArrayLengthByName("your_item_count", size); + for (itr = trader2_items.begin(); itr != trader2_items.end(); itr++) { + packet->setArrayDataByName("your_item_unknown1", 1, i); + packet->setArrayDataByName("your_item_unknown2", 1, i); + packet->setArrayDataByName("your_item_slot", itr->first, i); + packet->setArrayDataByName("your_item_id", itr->second.item->details.item_id, i); + packet->setArrayDataByName("your_item_quantity", itr->second.quantity, i); + packet->setArrayDataByName("your_item_icon", itr->second.item->details.icon, i); + packet->setArrayDataByName("your_item_background", 0, i); // No clue on this value yet + i++; + } + int32 plat = 0; + int32 gold = 0; + int32 silver = 0; + int32 copper = 0; + + CalculateCoins(trader2_coins, plat, gold, silver, copper); + packet->setDataByName("your_copper", copper); + packet->setDataByName("your_silver", silver); + packet->setDataByName("your_gold", gold); + packet->setDataByName("your_plat", plat); + + size = (int8)(trader1_items.size()); + i = 0; + + packet->setArrayLengthByName("their_item_count", size); + for (itr = trader1_items.begin(); itr != trader1_items.end(); itr++) { + packet->setArrayDataByName("their_item_unknown1", 1, i); + packet->setArrayDataByName("their_item_unknown2", 1, i); + packet->setArrayDataByName("their_item_slot", itr->first, i); + packet->setArrayDataByName("their_item_id", itr->second.item->details.item_id, i); + packet->setArrayDataByName("their_item_quantity", itr->second.quantity, i); + packet->setArrayDataByName("their_item_icon", itr->second.item->details.icon, i); + packet->setArrayDataByName("their_item_background", 0, i); // No clue on this value yet + i++; + } + + plat = 0; + gold = 0; + silver = 0; + copper = 0; + + CalculateCoins(trader1_coins, plat, gold, silver, copper); + packet->setDataByName("their_copper", copper); + packet->setDataByName("their_silver", silver); + packet->setDataByName("their_gold", gold); + packet->setDataByName("their_plat", plat); + + client->QueuePacket(packet->serialize()); + safe_delete(packet); + } + } +} + +void Trade::CalculateCoins(int64 val, int32& plat, int32& gold, int32& silver, int32& copper) { + int32 tmp = 0; + if (val >= 1000000) { + tmp = val / 1000000; + val -= tmp * 1000000; + plat = tmp; + } + if (val >= 10000) { + tmp = val / 10000; + val -= tmp * 10000; + gold = tmp; + } + if (val >= 100) { + tmp = val / 100; + val -= tmp * 100; + silver = tmp; + } + if (val > 0) { + copper = val; + } +} + +int8 Trade::GetNextFreeSlot(Entity* character) { + map* list = 0; + + if (character == trader1) + list = &trader1_items; + else if (character == trader2) + list = &trader2_items; + else + return 255; + + int8 ret = 255; + for (int8 index = 0; index < 12; index++) { + if (list->count(index) == 0) { + ret = index; + break; + } + } + + return ret; +} \ No newline at end of file diff --git a/EQ2/source/WorldServer/Trade.h b/EQ2/source/WorldServer/Trade.h new file mode 100644 index 000000000..82f022f2e --- /dev/null +++ b/EQ2/source/WorldServer/Trade.h @@ -0,0 +1,51 @@ +#pragma once + +#include "../common/types.h" +#include + +class Item; +class Entity; + +struct TradeItemInfo { + Item* item; + int32 quantity; +}; + +class Trade { +public: + Trade(Entity* trader1, Entity* trader2); + ~Trade(); + + int8 AddItemToTrade(Entity* character, Item* item, int8 quantity, int8 slot); + void RemoveItemFromTrade(Entity* character, int8 slot); + void AddCoinToTrade(Entity* character, int64 amount); + void RemoveCoinFromTrade(Entity* character, int64 amount); + Entity* GetTradee(Entity* character); + + bool SetTradeAccepted(Entity* character); + bool HasAcceptedTrade(Entity* character); + void CancelTrade(Entity* character); + + int8 CheckItem(Entity* trader, Item* item, bool other_is_bot); + +private: + + + void Trader1ItemAdd(Item* item, int8 quantity, int8 slot); + void Trader2ItemAdd(Item* item, int8 quantity, int8 slot); + void CompleteTrade(); + void OpenTradeWindow(); + void SendTradePacket(); + void CalculateCoins(int64 val, int32& plat, int32& gold, int32& silver, int32& copper); + int8 GetNextFreeSlot(Entity* character); + + Entity* trader1; + map trader1_items; + int64 trader1_coins; + bool trader1_accepted; + + Entity* trader2; + map trader2_items; + int64 trader2_coins; + bool trader2_accepted; +}; \ No newline at end of file diff --git a/EQ2/source/WorldServer/Tradeskills/Tradeskills.cpp b/EQ2/source/WorldServer/Tradeskills/Tradeskills.cpp new file mode 100644 index 000000000..c56e38726 --- /dev/null +++ b/EQ2/source/WorldServer/Tradeskills/Tradeskills.cpp @@ -0,0 +1,486 @@ +/* + EQ2Emulator: Everquest II Server Emulator + Copyright (C) 2007 EQ2EMulator Development Team (http://www.eq2emulator.net) + + This file is part of EQ2Emulator. + + EQ2Emulator is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + EQ2Emulator is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with EQ2Emulator. If not, see . +*/ +#include "Tradeskills.h" +#include "../client.h" +#include "../../common/ConfigReader.h" +#include "../classes.h" +//#include "../../common/debug.h" +#include "../../common/Log.h" +//#include "../zoneserver.h" +//#include "../Skills.h" +//#include "../classes.h" +#include "../World.h" +//#include "../LuaInterface.h" +#include "../ClientPacketFunctions.h" +#include "../WorldDatabase.h" +#include "../Rules/Rules.h" + +extern Classes classes; +extern ConfigReader configReader; +extern MasterSkillList master_skill_list; +extern MasterRecipeList master_recipe_list; +extern MasterTradeskillEventsList master_tradeskillevent_list; +extern WorldDatabase database; +extern RuleManager rule_manager; + +TradeskillMgr::TradeskillMgr() { + m_tradeskills.SetName("TradeskillMgr::tradeskillsList"); + // % chance for each was made up by me (Jabantiz) and may need some tweaking + // 2% for crit fail + m_success = rule_manager.GetGlobalRule(R_World, TradeskillSuccessChance)->GetFloat(); + m_critSuccess = rule_manager.GetGlobalRule(R_World, TradeskillCritSuccessChance)->GetFloat(); + m_fail = rule_manager.GetGlobalRule(R_World, TradeskillFailChance)->GetFloat(); + m_critFail = rule_manager.GetGlobalRule(R_World, TradeskillCritFailChance)->GetFloat(); + m_eventChance = rule_manager.GetGlobalRule(R_World, TradeskillEventChance)->GetFloat(); + + if ((m_success + m_critSuccess + m_fail + m_critFail) != 100.0f) { + LogWrite(TRADESKILL__ERROR, 0, "Tradeskills", "Success, crit success, fail, and crit fail MUST add up to 100, reverting to defaults..."); + m_success = 87.0f; + m_critSuccess = 2.0f; + m_fail = 10.0f; + m_critFail = 1.0f; + } +} + +TradeskillMgr::~TradeskillMgr() { + m_tradeskills.writelock(__FUNCTION__, __LINE__); + + map::iterator itr; + for (itr = tradeskillList.begin(); itr != tradeskillList.end(); itr++) + safe_delete(itr->second); + + tradeskillList.clear(); + + m_tradeskills.releasewritelock(__FUNCTION__, __LINE__); +} + +void TradeskillMgr::Process() { + m_tradeskills.writelock(__FUNCTION__, __LINE__); + map::iterator itr = tradeskillList.begin(); + while (itr != tradeskillList.end()) { + Tradeskill* tradeskill = 0; + tradeskill = itr->second; + if (!tradeskill) + continue; + if (Timer::GetCurrentTime2() >= tradeskill->nextUpdateTime) { + Client* client = itr->first; + sint32 progress = 0; + sint32 durability = 0; + /* + Following was grabbed from + http://eq2.stratics.com/content/guides/padasher_crafting_2.php + old but the base fail/succes should still be the same + + -100 Durability / -50 Progress (Critical Failure) + -50 Durability / 0 Progress (Failure) + -10 Durability / +50 Progress (Standard tick) + +10 Durability / + 100 Progress (Critical Success) + */ + float roll = MakeRandomFloat(0, 100); + int8 effect = 0; //1 is critical success, 2 is success, 3 is failure, and 4 is critical failure. + + float success = m_success; + float crit_success = m_critSuccess; + float fail = m_fail; + float crit_fail = m_critFail; + + // Modify the % chance for success based off of stats + fail -= client->GetPlayer()->stats[ITEM_STAT_SUCCESS_MOD]; + success += client->GetPlayer()->stats[ITEM_STAT_SUCCESS_MOD]; + + // add values together for the if + crit_success += crit_fail; + fail += crit_success; + success += fail; + + // Crit fail + if (roll <= crit_fail) { + progress = -50; + durability = -100; + effect = 4; + client->SimpleMessage(CHANNEL_COLOR_YELLOW, "Critical failure!"); + } + // Crit success + else if (roll > crit_fail && roll <= crit_success) { + progress = 100; + durability = 10; + effect = 1; + client->SimpleMessage(CHANNEL_COLOR_YELLOW, "Critical success!"); + } + // Fail + else if (roll > crit_success && roll <= fail) { + progress = 0; + durability = -50; + effect = 3; + } + // Success + else if (roll > fail && roll <= success) { + progress = 50; + durability = -10; + effect = 2; + } + else { + // Just a debug, should never end up in this, if we do write out a log but treat as a success for the player + LogWrite(TRADESKILL__ERROR, 0, "Tradeskills", "Process roll was not within valid range. roll = %f, crit fail = %f, crit success = %f, fail = %f, success = %f", roll, crit_fail, crit_success, fail, success); + progress = 50; + durability = -10; + effect = 2; + } + + // Check to see if there was an event, if there was give out the rewards/penalties for it + if (tradeskill->CurrentEvent) { + if (tradeskill->eventCountered) { + progress += tradeskill->CurrentEvent->SuccessProgress; + durability += tradeskill->CurrentEvent->SuccessDurability; + } + else { + progress += tradeskill->CurrentEvent->FailProgress; + durability += tradeskill->CurrentEvent->FailDurability; + } + } + + // Modify the progress/durability by the players stats + progress += client->GetPlayer()->stats[ITEM_STAT_PROGRESS_ADD]; + durability += client->GetPlayer()->stats[ITEM_STAT_DURABILITY_ADD]; + + tradeskill->currentDurability += durability; + tradeskill->currentProgress += progress; + + PacketStruct* packet = configReader.getStruct("WS_UpdateCreateItem", client->GetVersion()); + if (packet) { + packet->setDataByName("spawn_id", client->GetPlayer()->player_spawn_reverse_id_map[tradeskill->table]); + packet->setDataByName("effect", effect); + packet->setDataByName("total_durability", tradeskill->currentDurability); + packet->setDataByName("total_progress", tradeskill->currentProgress); + packet->setDataByName("durability_change", durability); + packet->setDataByName("progress_change", progress); + + if (tradeskill->currentProgress >= 1000) + packet->setDataByName("progress_level", 4); + else if (tradeskill->currentProgress >= 800) + packet->setDataByName("progress_level", 3); + else if (tradeskill->currentProgress >= 600) + packet->setDataByName("progress_level", 2); + else if (tradeskill->currentProgress >= 400) + packet->setDataByName("progress_level", 1); + else + packet->setDataByName("progress_level", 0); + + // Reset the tradeskill event + tradeskill->CurrentEvent = 0; + tradeskill->eventChecked = false; + tradeskill->eventCountered = false; + + // 15% chance for an event (change this to a rule probably) + + int eventRoll = MakeRandomFloat(0, 100); + if (eventRoll <= m_eventChance) { + // Get a vector of all possible events for this crafting technique + vector* events = master_tradeskillevent_list.GetEventByTechnique(tradeskill->recipe->GetTechnique()); + if (events) { + // Get the size of the vector + int size = events->size(); + // Get a random number from 0 to size - 1 to use as an index + int index = MakeRandomInt(0, size - 1); + // use the index to get an event + TradeskillEvent* TSEvent = events->at(index); + if (TSEvent) { + // Now that we got a random event set it in the packet + packet->setDataByName("reaction_icon", TSEvent->Icon); + packet->setDataByName("reaction_name", TSEvent->Name); + + // Set the current tradeskill event + tradeskill->CurrentEvent = TSEvent; + } + } + } + + client->QueuePacket(packet->serialize()); + safe_delete(packet); + } + + if (tradeskill->currentProgress >= 1000) { + itr++; + StopCrafting(client, false); + continue; + } + else + tradeskill->nextUpdateTime = Timer::GetCurrentTime2() + 4000; + } + itr++; + } + m_tradeskills.releasewritelock(__FUNCTION__, __LINE__); +} + +void TradeskillMgr::BeginCrafting(Client* client, vector components) { + Recipe* recipe = master_recipe_list.GetRecipe(client->GetPlayer()->GetCurrentRecipe()); + + if (!recipe) { + LogWrite(TRADESKILL__ERROR, 0, "Recipe", "Recipe (%u) not found in TradeskillMgr::BeginCrafting()", client->GetPlayer()->GetCurrentRecipe()); + ClientPacketFunctions::StopCrafting(client); + return; + } + + ClientPacketFunctions::SendItemCreationUI(client, recipe); + Tradeskill* tradeskill = new Tradeskill; + tradeskill->player = client->GetPlayer(); + tradeskill->table = client->GetPlayer()->GetTarget(); + tradeskill->recipe = recipe; + tradeskill->currentDurability = 1000; + tradeskill->currentProgress = 0; + tradeskill->nextUpdateTime = Timer::GetCurrentTime2() + 500; + tradeskill->usedComponents = components; + tradeskill->CurrentEvent = 0; + tradeskill->eventChecked = false; + tradeskill->eventCountered = false; + m_tradeskills.writelock(__FUNCTION__, __LINE__); + tradeskillList.insert(make_pair(client, tradeskill)); + m_tradeskills.releasewritelock(__FUNCTION__, __LINE__); + + // Unlock TS Spells and lock all others + client->GetPlayer()->UnlockTSSpells(); + + // TODO: use the vecotr to lock inventory slots + /*vector::iterator itr; + for (itr = components.begin(); itr != components.end(); itr++) { + Item* item = *itr; + //client->GetPlayer()->SendInventoryUpdate + item->details.inv_slot_id; + }*/ +} + +void TradeskillMgr::StopCrafting(Client* client, bool lock) { + + if (lock) + m_tradeskills.writelock(__FUNCTION__, __LINE__); + + if (tradeskillList.count(client) == 0) { + if (lock) + m_tradeskills.releasewritelock(__FUNCTION__, __LINE__); + return; + } + + Tradeskill* tradeskill = 0; + tradeskill = tradeskillList[client]; + + //TODO: unlock inventory slots, give the product to the player, give tradeskill xp + ClientPacketFunctions::StopCrafting(client); + + int32 dur = tradeskill->currentDurability; + int32 progress = tradeskill->currentProgress; + Recipe* recipe = tradeskill->recipe; + vector::iterator itr; + Item* item = 0; + int32 item_id = 0; + int8 i = 0; + int8 qty = 0; + + // cycle through the list of used items and remove them + for (itr = tradeskill->usedComponents.begin(); itr != tradeskill->usedComponents.end(); itr++, i++) { + // get the quantity to remove, first item in the vectore is always the primary, last is always the fuel + if (i == 0) + qty = 1; + else if (i == 1 && i != tradeskill->usedComponents.size() - 1) + qty = recipe->GetBuild1ComponentQuantity(); + else if (i == 2 && i != tradeskill->usedComponents.size() - 1) + qty = recipe->GetBuild2ComponentQuantity(); + else if (i == 3 && i != tradeskill->usedComponents.size() - 1) + qty = recipe->GetBuild3ComponentQuantity(); + else if (i == 4 && i != tradeskill->usedComponents.size() - 1) + qty = recipe->GetBuild4ComponentQuantity(); + else if (i == 5 || i == tradeskill->usedComponents.size() - 1) + qty = recipe->GetFuelComponentQuantity(); + + // Get the item in the players inventory and remove or reduce the quantity + item = client->GetPlayer()->item_list.GetItemFromID(*itr); + if (item->details.count <= qty) + client->GetPlayer()->item_list.RemoveItem(item); + else { + item->details.count -= qty; + item->save_needed = true; + } + } + + item = 0; + qty = recipe->GetFuelComponentQuantity(); + item_id = recipe->components[5][0]; + if (progress >= 400 && progress < 600) { + if (client->GetPlayer()->GetRecipeList()->GetRecipe(recipe->GetID())->GetHighestStage() < 1) { + client->GetPlayer()->GetRecipeList()->GetRecipe(recipe->GetID())->SetHighestStage(1); + database.UpdatePlayerRecipe(client->GetPlayer(), recipe->GetID(), 1); + } + if (recipe->products.count(1) > 0) { + item_id = recipe->products[1]->product_id; + qty = recipe->products[1]->product_qty; + } + } + else if ((dur < 200 && progress >= 600) || (dur >= 200 && progress >= 600 && progress < 800)) { + if (client->GetPlayer()->GetRecipeList()->GetRecipe(recipe->GetID())->GetHighestStage() < 2) { + client->GetPlayer()->GetRecipeList()->GetRecipe(recipe->GetID())->SetHighestStage(2); + database.UpdatePlayerRecipe(client->GetPlayer(), recipe->GetID(), 2); + } + if (recipe->products.count(2) > 0) { + item_id = recipe->products[2]->product_id; + qty = recipe->products[2]->product_qty; + } + } + else if ((dur >= 200 && dur < 800 && progress >= 800) || (dur >= 800 && progress >= 800 && progress < 1000)) { + if (client->GetPlayer()->GetRecipeList()->GetRecipe(recipe->GetID())->GetHighestStage() < 3) { + client->GetPlayer()->GetRecipeList()->GetRecipe(recipe->GetID())->SetHighestStage(3); + database.UpdatePlayerRecipe(client->GetPlayer(), recipe->GetID(), 3); + } + if (recipe->products.count(3) > 0) { + item_id = recipe->products[3]->product_id; + qty = recipe->products[3]->product_qty; + } + } + else if (dur >= 800 && progress >= 1000) { + if (client->GetPlayer()->GetRecipeList()->GetRecipe(recipe->GetID())->GetHighestStage() < 4) { + client->GetPlayer()->GetRecipeList()->GetRecipe(recipe->GetID())->SetHighestStage(4); + database.UpdatePlayerRecipe(client->GetPlayer(), recipe->GetID(), 4); + } + if (recipe->products.count(4) > 0) { + item_id = recipe->products[4]->product_id; + qty = recipe->products[4]->product_qty; + } + } + item = new Item(master_item_list.GetItem(item_id)); + if (!item) { + LogWrite(TRADESKILL__ERROR, 0, "Tradeskills", "Item (%u) not found.", item_id); + } + else { + item->details.count = qty; + // use CHANNEL_COLOR_CHAT_RELATIONSHIP as that is the same value (4) as it is in a log for this message + client->Message(CHANNEL_COLOR_CHAT_RELATIONSHIP, "You created \\aITEM %u 0:%s\\/a.", item->details.item_id, item->name.c_str()); + client->AddItem(item); + //Check for crafting quest updates + int8 update_amt = 0; + if(item->stack_count > 1) + update_amt = 1; + else + update_amt = qty; + client->GetPlayer()->CheckQuestsCraftUpdate(item, update_amt); + } + + float xp = client->GetPlayer()->CalculateTSXP(recipe->GetLevel()); + if (xp > 0) { + int16 level = client->GetPlayer()->GetTSLevel(); + if (client->GetPlayer()->AddTSXP((int32)xp)) { + client->Message(CHANNEL_COLOR_EXP, "You gain %u Tradeskill XP!", (int32)xp); + LogWrite(PLAYER__DEBUG, 0, "Player", "Player: %s earned %u tradeskill experience.", client->GetPlayer()->GetName(), (int32)xp); + if(client->GetPlayer()->GetTSLevel() != level) + client->ChangeTSLevel(level, client->GetPlayer()->GetTSLevel()); + client->GetPlayer()->SetCharSheetChanged(true); + } + } + + tradeskillList.erase(client); + safe_delete(tradeskill); + + if (lock) + m_tradeskills.releasewritelock(__FUNCTION__, __LINE__); + + // Lock TS spells and unlock all others + client->GetPlayer()->LockTSSpells(); +} + +bool TradeskillMgr::IsClientCrafting(Client* client) { + bool ret = false; + + m_tradeskills.readlock(__FUNCTION__, __LINE__); + ret = tradeskillList.count(client) > 0; + m_tradeskills.releasereadlock(__FUNCTION__, __LINE__); + + return ret; +} + +void TradeskillMgr::CheckTradeskillEvent(Client* client, int16 icon) { + // Check to see if the given client is crafting + if (!IsClientCrafting(client)) + return; + + m_tradeskills.writelock(__FUNCTION__, __LINE__); + // check to see if the client currently has an event and if it does if we had already tried to counter it this round + if (tradeskillList[client]->CurrentEvent == 0 || tradeskillList[client]->eventChecked) { + // No current event, or we already tried to counter it, return out + m_tradeskills.releasewritelock(__FUNCTION__, __LINE__); + return; + } + + // set the eventChecked flag so we don't try to counter it again + tradeskillList[client]->eventChecked = true; + // compare the event icon with the given spell icon to see if we countered it and store the result for the update + bool countered = (icon == tradeskillList[client]->CurrentEvent->Icon); + tradeskillList[client]->eventCountered = countered; + + // send the success or fail message to the client + client->Message(CHANNEL_COLOR_WHITE, "You %s %s.", countered ? "successfully countered" : "failed to counter", tradeskillList[client]->CurrentEvent->Name); + + // unlock the list and send the result packet + m_tradeskills.releasewritelock(__FUNCTION__, __LINE__); + ClientPacketFunctions::CounterReaction(client, countered); +} + +Tradeskill* TradeskillMgr::GetTradeskill(Client* client) { + if (tradeskillList.count(client) == 0) + return 0; + + return tradeskillList[client]; +} + +MasterTradeskillEventsList::MasterTradeskillEventsList() { + m_eventList.SetName("MasterTradeskillEventsList::eventList"); +} + +MasterTradeskillEventsList::~MasterTradeskillEventsList() { + m_eventList.writelock(__FUNCTION__, __LINE__); + map >::iterator itr; + vector::iterator ts_itr; + for (itr = eventList.begin(); itr != eventList.end(); itr++){ + for (ts_itr = itr->second.begin(); ts_itr != itr->second.end(); ts_itr++){ + safe_delete(*ts_itr); + } + } + eventList.clear(); + m_eventList.releasewritelock(__FUNCTION__, __LINE__); +} + +void MasterTradeskillEventsList::AddEvent(TradeskillEvent* tradeskillEvent) { + m_eventList.writelock(__FUNCTION__, __LINE__); + eventList[tradeskillEvent->Technique].push_back(tradeskillEvent); + m_eventList.releasewritelock(__FUNCTION__, __LINE__); +} + +vector* MasterTradeskillEventsList::GetEventByTechnique(int32 technique) { + if (eventList.count(technique) == 0) + return 0; + + return &eventList[technique]; +} + +int32 MasterTradeskillEventsList::Size() { + int32 count = 0; + m_eventList.readlock(__FUNCTION__, __LINE__); + map >::iterator itr; + for (itr = eventList.begin(); itr != eventList.end(); itr++) + count += itr->second.size(); + m_eventList.releasereadlock(__FUNCTION__, __LINE__); + return count; +} \ No newline at end of file diff --git a/EQ2/source/WorldServer/Tradeskills/Tradeskills.h b/EQ2/source/WorldServer/Tradeskills/Tradeskills.h new file mode 100644 index 000000000..24703e116 --- /dev/null +++ b/EQ2/source/WorldServer/Tradeskills/Tradeskills.h @@ -0,0 +1,145 @@ +/* + EQ2Emulator: Everquest II Server Emulator + Copyright (C) 2007 EQ2EMulator Development Team (http://www.eq2emulator.net) + + This file is part of EQ2Emulator. + + EQ2Emulator is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + EQ2Emulator is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with EQ2Emulator. If not, see . +*/ +#ifndef __EQ2_TRADESKILLS__ +#define __EQ2_TRADESKILLS__ + +#include "../../common/types.h" +#include "../../common/Mutex.h" +#include "../Items/Items.h" +#include +class Player; +class Spawn; +class Recipe; +class Client; + +struct TradeskillEvent +{ + char Name[250]; + int16 Icon; + int32 Technique; + int16 SuccessProgress; + int16 SuccessDurability; + int16 SuccessHP; + int16 SuccessPower; + int32 SuccessSpellID; + int32 SuccessItemID; + sint16 FailProgress; + sint16 FailDurability; + sint16 FailHP; + sint16 FailPower; +}; + +struct Tradeskill +{ + Player* player; + Spawn* table; + Recipe* recipe; + int32 currentProgress; + int32 currentDurability; + int32 nextUpdateTime; + vector usedComponents; + TradeskillEvent* CurrentEvent; + bool eventChecked; + bool eventCountered; +}; + +class TradeskillMgr +{ +public: + TradeskillMgr(); + ~TradeskillMgr(); + + /// Determines if an update is needed if so send one and stop crafting if finished + void Process(); + + /// Starts the actual crafting process + /// Client that is crafting + /// List of items the player is using to craft + void BeginCrafting(Client* client, vector components); + + /// Stops the crafting process + /// Client that stopped crafting + /// Does the list need a mutex lock? default = true + void StopCrafting(Client* client, bool lock = true); + + /// Checks to see if the given client is crafting + /// The client to check + /// True if the client is crafting + bool IsClientCrafting(Client* client); + + /// Get the tradeskill struct for the given client + /// The client to get the tradeskill struct for + /// Pointer to the clients tradeskill struct, or 0 if they don't have one + Tradeskill* GetTradeskill(Client* client); + + /// Check to see if we countered the tradeskill event + /// The client to check for + /// The icon of the spell we casted + void CheckTradeskillEvent(Client* client, int16 icon); + + /// Lock the tradeskill list for reading, should never need to write to the tradeskill list outside of the TradeskillMgr class + /// Function name that called this lock + /// Line number this lock was called from + void ReadLock(const char* function = (const char*)0, int32 line = 0) { m_tradeskills.readlock(function, line); } + + /// Releases the red lock on the tradeskill list + /// Function name that is releasing the lock + /// Line number that is releasing the lock + void ReleaseReadLock(const char* function = (const char*)0, int32 line = 0) { m_tradeskills.releasereadlock(function, line); } +private: + /// Sends the creation window + /// Client to send the window to + /// The recipe being crafted + void SendItemCreationUI(Client* client, Recipe* recipe); + map tradeskillList; + Mutex m_tradeskills; + + float m_critFail; + float m_critSuccess; + float m_fail; + float m_success; + float m_eventChance; +}; + +class MasterTradeskillEventsList +{ +public: + MasterTradeskillEventsList(); + ~MasterTradeskillEventsList(); + + /// Adds a tradeskill event to the master list + /// The event to add + void AddEvent(TradeskillEvent* tradeskillEvent); + + /// Gets a list of tradeskill events for the given technique + /// The skill id of the technique + /// Vector of TradeskillEvent* for the given technique + vector* GetEventByTechnique(int32 technique); + + /// Get the size of the event list + /// int32 containing the size of the list + int32 Size(); + +private: + Mutex m_eventList; + map > eventList; +}; + +#endif diff --git a/EQ2/source/WorldServer/Tradeskills/TradeskillsDB.cpp b/EQ2/source/WorldServer/Tradeskills/TradeskillsDB.cpp new file mode 100644 index 000000000..f5c3e7f58 --- /dev/null +++ b/EQ2/source/WorldServer/Tradeskills/TradeskillsDB.cpp @@ -0,0 +1,64 @@ +/* + EQ2Emulator: Everquest II Server Emulator + Copyright (C) 2007 EQ2EMulator Development Team (http://www.eq2emulator.net) + + This file is part of EQ2Emulator. + + EQ2Emulator is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + EQ2Emulator is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with EQ2Emulator. If not, see . +*/ +#ifdef WIN32 + #include + #include +#endif +#include +#include +#include "../../common/Log.h" +#include "../WorldDatabase.h" +#include "Tradeskills.h" + +extern MasterTradeskillEventsList master_tradeskillevent_list; + +void WorldDatabase::LoadTradeskillEvents() { + TradeskillEvent* TSEvent = 0; + Query query; + MYSQL_ROW row; + MYSQL_RES *res; + + res = query.RunQuery2(Q_SELECT, "SELECT `name`,`icon`,`technique`,`success_progress`,`success_durability`,`success_hp`,`success_power`,`success_spell_id`,`success_item_id`,`fail_progress`,`fail_durability`,`fail_hp`, `fail_power`\n" + "FROM `tradeskillevents`"); + if (res) { + while ((row = mysql_fetch_row(res))) { + TSEvent = new TradeskillEvent; + + strncpy(TSEvent->Name, row[0], sizeof(TSEvent->Name)); + TSEvent->Icon = atoi(row[1]); + TSEvent->Technique = atoul(row[2]); + TSEvent->SuccessProgress = atoi(row[3]); + TSEvent->SuccessDurability = atoi(row[4]); + TSEvent->SuccessHP = atoi(row[5]); + TSEvent->SuccessPower = atoi(row[6]); + TSEvent->SuccessSpellID = atoul(row[7]); + TSEvent->SuccessItemID = atoul(row[8]); + TSEvent->FailProgress = atoi(row[9]); + TSEvent->FailDurability = atoi(row[10]); + TSEvent->FailHP = atoi(row[11]); + TSEvent->FailPower = atoi(row[12]); + + LogWrite(TRADESKILL__DEBUG, 7, "Tradeskills", "Loading tradeskill event: %s", TSEvent->Name); + master_tradeskillevent_list.AddEvent(TSEvent); + } + } + + LogWrite(TRADESKILL__DEBUG, 0, "Tradeskills", "\tLoaded %u tradeskill events", master_tradeskillevent_list.Size()); +} \ No newline at end of file diff --git a/EQ2/source/WorldServer/Tradeskills/TradeskillsPackets.cpp b/EQ2/source/WorldServer/Tradeskills/TradeskillsPackets.cpp new file mode 100644 index 000000000..51b89a316 --- /dev/null +++ b/EQ2/source/WorldServer/Tradeskills/TradeskillsPackets.cpp @@ -0,0 +1,408 @@ +/* + EQ2Emulator: Everquest II Server Emulator + Copyright (C) 2007 EQ2EMulator Development Team (http://www.eq2emulator.net) + + This file is part of EQ2Emulator. + + EQ2Emulator is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + EQ2Emulator is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with EQ2Emulator. If not, see . +*/ + +#include +#include "../ClientPacketFunctions.h" +#include "../client.h" +#include "../../common/ConfigReader.h" +#include "../../common/PacketStruct.h" +#include "../Recipes/Recipe.h" +#include "../../common/Log.h" +#include "../Spells.h" +#include "../../common/MiscFunctions.h" + +extern ConfigReader configReader; +extern MasterRecipeList master_recipe_list; +extern MasterSpellList master_spell_list; + +void ClientPacketFunctions::SendCreateFromRecipe(Client* client, int32 recipeID) { + + // if recipeID is 0 we are repeating the last recipe, if not set the players current recipe to the new one + if (recipeID == 0) + recipeID = client->GetPlayer()->GetCurrentRecipe(); + else + client->GetPlayer()->SetCurrentRecipe(recipeID); + + // Get the recipe + Recipe* recipe = master_recipe_list.GetRecipe(recipeID); + if (!recipe) { + LogWrite(TRADESKILL__ERROR, 0, "Recipes", "Error loading recipe (%u) in ClientPacketFunctions::SendCreateFromRecipe()", recipeID); + return; + } + + // Create the packet + PacketStruct* packet = configReader.getStruct("WS_CreateFromRecipe", client->GetVersion()); + if (!packet) { + LogWrite(TRADESKILL__ERROR, 0, "Recipes", "Error loading WS_CreateFromRecipe in ClientPacketFunctions::SendCreateFromRecipe()"); + return; + } + vector::iterator itr; + int8 i = 0; + int32 firstID = 0; + int32 primary_comp_id = 0; + Item* item = 0; + + // Recipe and crafting table info + packet->setDataByName("crafting_station", recipe->GetDevice()); + packet->setDataByName("recipe_name", recipe->GetName()); + packet->setDataByName("tier", recipe->GetTier()); + + // Product info + item = master_item_list.GetItem(recipe->GetProductID()); + packet->setDataByName("product_name", item->name.c_str()); + packet->setDataByName("icon", item->details.icon); + packet->setDataByName("product_qty", recipe->GetProductQuantity()); + packet->setDataByName("primary_title", recipe->GetPrimaryBuildComponentTitle()); + packet->setDataByName("primary_qty", 1); + + // Reset item to 0 + item = 0; + + // Check to see if we have a primary component (slot = 0) + if (recipe->components.count(0) > 0) { + vector rc = recipe->components[0]; + packet->setArrayLengthByName("num_primary_choices", rc.size()); + for (itr = rc.begin(); itr != rc.end(); itr++, i++) { + if (firstID == 0) + firstID = *itr; + + item = master_item_list.GetItem(*itr); + + packet->setArrayDataByName("primary_component", item->name.c_str(), i); + packet->setArrayDataByName("primary_item_id", (*itr), i); + packet->setArrayDataByName("primary_icon", item->details.icon, i); + item = 0; + item = client->GetPlayer()->item_list.GetItemFromID((*itr)); + if (item) + packet->setArrayDataByName("primary_total_quantity", item->details.count, i); + } + // store the id of the primary comp + primary_comp_id = firstID; + // Set the default item id to the first component id + packet->setDataByName("primary_item_selected", 1); + packet->setDataByName("primary_default_selected_id", firstID); + item = 0; + item = client->GetPlayer()->item_list.GetItemFromID(firstID); + if (item) + packet->setDataByName("primary_selected_item_qty", min((int8)1, (int8)item->details.count)); + + // Reset the variables we will reuse + i = 0; + firstID = 0; + item = 0; + } + else { + LogWrite(TRADESKILL__ERROR, 0, "Recipes", "Recipe has no primary component"); + return; + } + + // Check to see if we have build components (slot = 1 - 4) + int8 total_build_components = 0; + if (recipe->components.count(1) > 0) + total_build_components++; + if (recipe->components.count(2)) + total_build_components++; + if (recipe->components.count(3)) + total_build_components++; + if (recipe->components.count(4)) + total_build_components++; + + if (total_build_components > 0) { + packet->setArrayLengthByName("num_build_components", total_build_components); + for (int8 index = 0; index < 4; index++) { + + if (recipe->components.count(index + 1) == 0) + continue; + + packet->setArrayDataByName("build_slot", index, index); + + vector rc = recipe->components[index + 1]; + + packet->setSubArrayLengthByName("num_build_choices", rc.size(), index); + for (itr = rc.begin(); itr != rc.end(); itr++, i++) { + if (firstID == 0) + firstID = *itr; + + item = master_item_list.GetItem(*itr); + + packet->setSubArrayDataByName("build_component", item->name.c_str(), index, i); + packet->setSubArrayDataByName("build_item_id", (*itr), index, i); + packet->setSubArrayDataByName("build_icon", item->details.icon, index, i); + + item = 0; + item = client->GetPlayer()->item_list.GetItemFromID((*itr)); + if (item) + packet->setSubArrayDataByName("build_total_quantity", item->details.count, index, i); + } + + // Set the default item id to the first component id + packet->setArrayDataByName("build_item_selected", 1, index); + packet->setArrayDataByName("build_selected_item_id", firstID, index); + item = 0; + item = client->GetPlayer()->item_list.GetItemFromID(firstID); + int8 qty = 0; + if (item) { + qty = (int8)item->details.count; + if (qty > 0 && firstID == primary_comp_id) + qty -= 1; + } + + if (index == 0) { + packet->setArrayDataByName("build_title", recipe->GetBuild1ComponentTitle(), index); + packet->setArrayDataByName("build_qty", recipe->GetBuild1ComponentQuantity(), index); + if (item) + packet->setArrayDataByName("build_selected_item_qty", min(qty, recipe->GetBuild1ComponentQuantity()), index); + } + else if (index == 1) { + packet->setArrayDataByName("build_title", recipe->GetBuild2ComponentTitle(), index); + packet->setArrayDataByName("build_qty", recipe->GetBuild2ComponentQuantity(), index); + if (item) + packet->setArrayDataByName("build_selected_item_qty", min(qty, recipe->GetBuild2ComponentQuantity()), index); + } + else if (index == 2) { + packet->setArrayDataByName("build_title", recipe->GetBuild3ComponentTitle(), index); + packet->setArrayDataByName("build_qty", recipe->GetBuild3ComponentQuantity(), index); + if (item) + packet->setArrayDataByName("build_selected_item_qty", min(qty, recipe->GetBuild3ComponentQuantity()), index); + } + else { + packet->setArrayDataByName("build_title", recipe->GetBuild4ComponentTitle(), index); + packet->setArrayDataByName("build_qty", recipe->GetBuild4ComponentQuantity(), index); + if (item) + packet->setArrayDataByName("build_selected_item_qty", min(qty, recipe->GetBuild4ComponentQuantity()), index); + } + + // Reset the variables we will reuse + i = 0; + firstID = 0; + item = 0; + } + } + + // Check to see if we have a fuel component (slot = 5) + if (recipe->components.count(5) > 0) { + vector rc = recipe->components[5]; + packet->setArrayLengthByName("num_fuel_choices", rc.size()); + for (itr = rc.begin(); itr != rc.end(); itr++, i++) { + if (firstID == 0) + firstID = *itr; + + item = master_item_list.GetItem(*itr); + + packet->setArrayDataByName("fuel_component", item->name.c_str(), i); + packet->setArrayDataByName("fuel_item_id", (*itr), i); + packet->setArrayDataByName("fuel_icon", item->details.icon, i); + item = 0; + item = client->GetPlayer()->item_list.GetItemFromID((*itr)); + if (item) + packet->setArrayDataByName("fuel_total_quantity", item->details.count, i); + } + + // Set the default item id to the first component id + packet->setDataByName("fuel_selected_item_id", firstID); + packet->setDataByName("fuel_item_selected", 1); + item = 0; + item = client->GetPlayer()->item_list.GetItemFromID(firstID); + if (item) + packet->setDataByName("fuel_selected_item_qty", min(recipe->GetFuelComponentQuantity(), (int8)item->details.count)); + packet->setDataByName("fuel_title",recipe->GetFuelComponentTitle()); + packet->setDataByName("fuel_qty",recipe->GetFuelComponentQuantity()); + + // Reset the variables we will reuse + i = 0; + firstID = 0; + item = 0; + } + else { + LogWrite(TRADESKILL__ERROR, 0, "Recipes", "Recipe has no fuel component"); + return; + } + + packet->setDataByName("unknown1", recipeID); + packet->setDataByName("unknown8", 1); // Possible array for amount you can craft + packet->setDataByName("unknown8", 1, 1); // amounts you can craft + //packet->PrintPacket(); + // Send the packet + client->QueuePacket(packet->serialize()); + safe_delete(packet); +} + +void ClientPacketFunctions::SendItemCreationUI(Client* client, Recipe* recipe) { + // Check for valid recipe + if (!recipe) { + LogWrite(TRADESKILL__ERROR, 0, "Recipes", "Recipe = null in ClientPacketFunctions::SendItemCreationUI()"); + return; + } + + // Load the packet + PacketStruct* packet = configReader.getStruct("WS_ShowItemCreation", client->GetVersion()); + if (!packet) { + LogWrite(TRADESKILL__ERROR, 0, "Recipes", "Error loading WS_ShowItemCreation in ClientPacketFunctions::SendItemCreationUI()"); + return; + } + + int16 item_version = GetItemPacketType(packet->GetVersion()); + + Item* item = 0; + RecipeProducts* rp = 0; + + packet->setDataByName("max_possible_durability", 1000); + packet->setDataByName("max_possible_progress", 1000); + + // All the packets I have looked at these unknowns are always the same + // so hardcoding them until they are identified. + packet->setDataByName("unknown2", 1045220557, 0); + packet->setDataByName("unknown2", 1061997773, 1); + + // Highest stage the player has been able to complete + // TODO: store this for the player, for now use 0 (none known) + packet->setDataByName("progress_levels_known", client->GetPlayer()->GetRecipeList()->GetRecipe(recipe->GetID())->GetHighestStage()); + + packet->setArrayLengthByName("num_process", 4); + for (int8 i = 0; i < 4; i++) { + + // Don't like this code but need to change the IfVariableNotSet value on unknown3 element + // to point to the currect progress_needed + vector dataStructs = packet->GetDataStructs(); + vector::iterator itr; + for (itr = dataStructs.begin(); itr != dataStructs.end(); itr++) { + DataStruct* data = *itr; + char tmp[20] = {0}; + sprintf(tmp,"_%i",i); + string name = "unknown3"; + name.append(tmp); + if (strcmp(data->GetName(), name.c_str()) == 0) { + name = "progress_needed"; + name.append(tmp); + data->SetIfNotSetVariable(name.c_str()); + } + } + if (i == 1) + packet->setArrayDataByName("progress_needed", 400, i); + else if (i == 2) + packet->setArrayDataByName("progress_needed", 600, i); + else if (i == 3) + packet->setArrayDataByName("progress_needed", 800, i); + + // get the product for this stage, if none found default to fuel + if (recipe->products.count(i) > 0) + rp = recipe->products[i]; + if (!rp) { + rp = new RecipeProducts; + rp->product_id = recipe->components[5].front(); + rp->product_qty = recipe->GetFuelComponentQuantity(); + rp->byproduct_id = 0; + rp->byproduct_qty = 0; + recipe->products[i] = rp; + } + item = master_item_list.GetItem(rp->product_id); + if (!item) { + LogWrite(TRADESKILL__ERROR, 0, "Recipe", "Error loading item (%u) in ClientPacketFunctions::SendItemCreationUI()", rp->product_id); + return; + } + + packet->setArrayDataByName("item_name", item->name.c_str(), i); + packet->setArrayDataByName("item_icon", item->details.icon, i); + if(client->GetVersion() < 860) + packet->setItemArrayDataByName("item", item, client->GetPlayer(), i, 0, -1); + else if (client->GetVersion() < 1193) + packet->setItemArrayDataByName("item", item, client->GetPlayer(), i); + else + packet->setItemArrayDataByName("item", item, client->GetPlayer(), i, 0, 2); + + if (rp->byproduct_id > 0) { + item = 0; + item = master_item_list.GetItem(rp->byproduct_id); + if (item) { + packet->setArrayDataByName("item_byproduct_name", item->name.c_str(), i); + packet->setArrayDataByName("item_byproduct_icon", item->details.icon, i); + } + } + + packet->setArrayDataByName("packettype", item_version, i); + packet->setArrayDataByName("packetsubtype", 0xFF, i); + + item = 0; + rp = 0; + } + packet->setDataByName("product_progress_needed", 1000); + + rp = recipe->products[4]; + item = master_item_list.GetItem(rp->product_id); + + packet->setDataByName("product_item_name", item->name.c_str()); + packet->setDataByName("product_item_icon", item->details.icon); + + if(client->GetVersion() < 860) + packet->setItemByName("product_item", item, client->GetPlayer(), 0, -1); + else if (client->GetVersion() < 1193) + packet->setItemByName("product_item", item, client->GetPlayer()); + else + packet->setItemByName("product_item", item, client->GetPlayer(), 0, 2); + + //packet->setItemByName("product_item", item, client->GetPlayer()); + + if (rp->byproduct_id > 0) { + item = 0; + item = master_item_list.GetItem(rp->byproduct_id); + if (item) { + packet->setDataByName("product_byproduct_name", item->name.c_str()); + packet->setDataByName("product_byproduct_icon", item->details.icon); + } + } + + packet->setDataByName("packettype", item_version); + packet->setDataByName("packetsubtype", 0xFF); + + // Start of basic work to get the skills to show on the tradeskill window + // not even close to accurate but skills do get put on the ui + int8 index = 0; + int8 size = 0; + vector::iterator itr; + vector spells = client->GetPlayer()->GetSpellBookSpellIDBySkill(recipe->GetTechnique()); + for (itr = spells.begin(); itr != spells.end(); itr++) { + size++; + Spell* spell = master_spell_list.GetSpell(*itr,1); + if (size > 6) { + // only 6 slots for skills on the ui + break; + } + packet->setDataByName("skill_id", *itr ,spell->GetSpellData()->ts_loc_index -1); + } + + + EQ2Packet* outapp = packet->serialize(); + //DumpPacket(outapp); + client->QueuePacket(outapp); + safe_delete(packet); +} + +void ClientPacketFunctions::StopCrafting(Client* client) { + client->QueuePacket(new EQ2Packet(OP_StopItemCreationMsg, 0, 0)); +} + +void ClientPacketFunctions::CounterReaction(Client* client, bool countered) { + PacketStruct* packet = configReader.getStruct("WS_TSEventReaction", client->GetVersion()); + if (packet) { + packet->setDataByName("counter_reaction", countered ? 1 : 0); + client->QueuePacket(packet->serialize()); + } + safe_delete(packet); +} diff --git a/EQ2/source/WorldServer/Traits/Traits.cpp b/EQ2/source/WorldServer/Traits/Traits.cpp new file mode 100644 index 000000000..edea58372 --- /dev/null +++ b/EQ2/source/WorldServer/Traits/Traits.cpp @@ -0,0 +1,492 @@ +/* +EQ2Emulator: Everquest II Server Emulator +Copyright (C) 2007 EQ2EMulator Development Team (http://www.eq2emulator.net) + +This file is part of EQ2Emulator. + +EQ2Emulator is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +EQ2Emulator is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with EQ2Emulator. If not, see . +*/ + +#include "Traits.h" +#include "../../common/ConfigReader.h" +#include "../../common/Log.h" +#include "../Spells.h" +#include "../WorldDatabase.h" +#include + +extern ConfigReader configReader; +extern MasterSpellList master_spell_list; +extern WorldDatabase database; + +MasterTraitList::MasterTraitList(){ + MMasterTraitList.SetName("MasterTraitList::TraitList"); +} + +MasterTraitList::~MasterTraitList(){ + DestroyTraits(); +} + +void MasterTraitList::AddTrait(TraitData* data){ + MMasterTraitList.writelock(__FUNCTION__, __LINE__); + TraitList.push_back(data); + MMasterTraitList.releasewritelock(__FUNCTION__, __LINE__); +} + +int MasterTraitList::Size(){ + return TraitList.size(); +} + +EQ2Packet* MasterTraitList::GetTraitListPacket (Client* client) +{ + if (!client) { + LogWrite(SPELL__ERROR, 0, "Traits", "GetTraitListPacket called with an invalid client"); + return 0; + } + // Sort the Data + if (Size() == 0) + return NULL; + + map > > SortedTraitList; + map > >::iterator itr; + map >::iterator itr2; + vector::iterator itr3; + + map > ClassTraining; + map > RaceTraits; + map > InnateRaceTraits; + map > FocusEffects; + + MMasterTraitList.readlock(__FUNCTION__, __LINE__); + + for (int i=0; i < Size(); i++) { + + // Sort Character Traits + if (TraitList[i]->classReq == 255 && TraitList[i]->raceReq == 255 && !TraitList[i]->isFocusEffect && TraitList[i]->isTrait) { + + itr = SortedTraitList.lower_bound(TraitList[i]->group); + if (itr != SortedTraitList.end() && !(SortedTraitList.key_comp()(TraitList[i]->group, itr->first))) { + + itr2 = (itr->second).lower_bound(TraitList[i]->level); + if (itr2 != (itr->second).end() && !((itr->second).key_comp()(TraitList[i]->level, itr2->first))) { + ((itr->second)[itr2->first]).push_back(TraitList[i]); + //LogWrite(SPELL__INFO, 0, "Traits", "Added Trait: %u Tier %i", TraitList[i]->spellID, TraitList[i]->tier); + } + else { + vector tempVec; + tempVec.push_back(TraitList[i]); + (itr->second).insert(make_pair(TraitList[i]->level, tempVec)); + //LogWrite(SPELL__INFO, 0, "Traits", "Added Trait: %u Tier %i", TraitList[i]->spellID, TraitList[i]->tier); + } + } + else { + map > tempMap; + vector tempVec; + tempVec.push_back(TraitList[i]); + tempMap.insert(make_pair(TraitList[i]->level, tempVec)); + SortedTraitList.insert(make_pair(TraitList[i]->group, tempMap)); + //LogWrite(SPELL__INFO, 0, "Traits", "Added Trait: %u Tier %i", TraitList[i]->spellID, TraitList[i]->tier); + } + } + // Sort Class Training + if (TraitList[i]->classReq == client->GetPlayer()->GetAdventureClass() && TraitList[i]->isTraining) { + itr2 = ClassTraining.lower_bound(TraitList[i]->level); + if (itr2 != ClassTraining.end() && !(ClassTraining.key_comp()(TraitList[i]->level, itr2->first))) { + (itr2->second).push_back(TraitList[i]); + } + else { + vector tempVec; + tempVec.push_back(TraitList[i]); + ClassTraining.insert(make_pair(TraitList[i]->level, tempVec)); + } + } + // Sort Racial Abilities + if (TraitList[i]->raceReq == client->GetPlayer()->GetRace() && !TraitList[i]->isInate && !TraitList[i]->isTraining) { + itr2 = RaceTraits.lower_bound(TraitList[i]->group); + if (itr2 != RaceTraits.end() && !(RaceTraits.key_comp()(TraitList[i]->group, itr2->first))) { + (itr2->second).push_back(TraitList[i]); + } + else { + vector tempVec; + tempVec.push_back(TraitList[i]); + RaceTraits.insert(make_pair(TraitList[i]->group, tempVec)); + } + } + // Sort Innate Racial Abilities + if (TraitList[i]->raceReq == client->GetPlayer()->GetRace() && TraitList[i]->isInate) { + itr2 = InnateRaceTraits.lower_bound(TraitList[i]->group); + if (itr2 != InnateRaceTraits.end() && !(InnateRaceTraits.key_comp()(TraitList[i]->group, itr2->first))) { + (itr2->second).push_back(TraitList[i]); + } + else { + vector tempVec; + tempVec.push_back(TraitList[i]); + InnateRaceTraits.insert(make_pair(TraitList[i]->group, tempVec)); + } + } + // Sort Focus Effects + if ((TraitList[i]->classReq == client->GetPlayer()->GetAdventureClass() || TraitList[i]->classReq == 255) && TraitList[i]->isFocusEffect) { + int8 j = 0; + itr2 = FocusEffects.lower_bound(TraitList[i]->group); + if (itr2 != FocusEffects.end() && !(FocusEffects.key_comp()(TraitList[i]->group, itr2->first))) { + + (itr2->second).push_back(TraitList[i]); + //LogWrite(SPELL__INFO, 0, "Traits", "Added Focus Effect: %u Tier: %i", TraitList[i]->spellID, TraitList[i]->tier); + j++; + } + else { + vector tempVec; + tempVec.push_back(TraitList[i]); + FocusEffects.insert(make_pair(TraitList[i]->group, tempVec)); + //LogWrite(SPELL__INFO, 0, "Traits", "Added Focus Effect: %u Tier %i", TraitList[i]->spellID, TraitList[i]->tier); + } + } + } + + MMasterTraitList.releasereadlock(__FUNCTION__, __LINE__); + + int16 version = 1; + int8 count = 0; + int8 index = 0; + int8 num_traits = 0; + int8 traits_size = 0; + int8 num_focuseffects = 0; + char sTrait [20]; + char temp [20]; + + version = client->GetVersion(); + + // Jabantiz: Get the value for num_traits in the struct (num_traits refers to the number of rows not the total number of traits) + for (itr = SortedTraitList.begin(); itr != SortedTraitList.end(); itr++) { + num_traits += (itr->second).size(); + } + + PacketStruct* packet = configReader.getStruct("WS_TraitsList", version); + packet->setArrayLengthByName("num_traits", num_traits); + + for (itr = SortedTraitList.begin(); itr != SortedTraitList.end(); itr++) { + + for (itr2 = itr->second.begin(); itr2 != itr->second.end(); itr2++, index++) { + traits_size += (itr2->second).size(); + count = 0; + Spell* tmp_spell = 0; + packet->setArrayDataByName("trait_level", (*itr2).first, index); + packet->setArrayDataByName("trait_line", 255, index); + //LogWrite(SPELL__INFO, 0, "AA", "Character Traits Size...%i ", traits_size); + for (itr3 = itr2->second.begin(); itr3 != itr2->second.end(); itr3++, count++) { + // Jabantiz: cant have more then 5 traits per line + if (count > 4) + break; + + strcpy(sTrait, "trait"); + itoa(count, temp, 10); + strcat(sTrait, temp); + + strcpy(temp, sTrait); + strcat(sTrait, "_icon"); + tmp_spell = master_spell_list.GetSpell((*itr3)->spellID, (*itr3)->tier); + if (tmp_spell) + packet->setArrayDataByName(sTrait, tmp_spell->GetSpellIcon(), index); + else + LogWrite(SPELL__ERROR, 0, "Traits", "Could not find SpellID %u and Tier %i in Master Spell List (line: %i)", (*itr3)->spellID, (*itr3)->tier, __LINE__); + + strcpy(sTrait, temp); + strcat(sTrait, "_icon2"); + packet->setArrayDataByName(sTrait, 65535, index); + + strcpy(sTrait, temp); + strcat(sTrait, "_id"); + packet->setArrayDataByName(sTrait, (*itr3)->spellID, index); + + strcpy(sTrait, temp); + strcat(sTrait, "_name"); + if (tmp_spell) + packet->setArrayDataByName(sTrait, tmp_spell->GetName(), index); + else + LogWrite(SPELL__ERROR, 0, "Traits", "Could not find SpellID %u and Tier %i in Master Spell List (line: %i)", (*itr3)->spellID, (*itr3)->tier, __LINE__); + + strcpy(sTrait, temp); + strcat(sTrait, "_unknown2"); + packet->setArrayDataByName(sTrait, 1, index); + + strcpy(sTrait, temp); + strcat(sTrait, "_unknown"); + packet->setArrayDataByName(sTrait, 1, index); + + if (client->GetPlayer()->HasSpell((*itr3)->spellID, (*itr3)->tier)) + packet->setArrayDataByName("trait_line", count, index); + } + // Jabantiz: If less then 5 fill the rest of the line with FF FF FF FF FF FF FF FF FF FF FF FF + while (count < 5) { + strcpy(sTrait, "trait"); + itoa(count, temp, 10); + strcat(sTrait, temp); + strcpy(temp, sTrait); + strcat(sTrait, "_icon"); + packet->setArrayDataByName(sTrait, 65535, index); // FF FF + strcpy(sTrait, temp); + strcat(sTrait, "_icon2"); + packet->setArrayDataByName(sTrait, 65535, index); // FF FF + strcpy(sTrait, temp); + strcat(sTrait, "_id"); + packet->setArrayDataByName(sTrait, 0xFFFFFFFF, index); + strcpy(sTrait, temp); + strcat(sTrait, "_unknown"); + packet->setArrayDataByName(sTrait, 0xFFFFFFFF, index); + strcpy(sTrait, temp); + strcat(sTrait, "_name"); + packet->setArrayDataByName(sTrait, "", index); + count++; + } + } + } + + // Class Training portion of the packet + packet->setArrayLengthByName("num_trainings", ClassTraining.size()); + index = 0; + for (itr2 = ClassTraining.begin(); itr2 != ClassTraining.end(); itr2++, index++) { + count = 0; + Spell* tmp_spell = 0; + packet->setArrayDataByName("training_level", itr2->first, index); + packet->setArrayDataByName("training_line", 255, index); + + for (itr3 = itr2->second.begin(); itr3 != itr2->second.end(); itr3++, count++) { + // Jabantiz: cant have more then 5 traits per line + if (count > 4) + break; + if (client->GetPlayer()->HasSpell((*itr3)->spellID, (*itr3)->tier)) { + packet->setArrayDataByName("training_line", count, index); + } + strcpy(sTrait, "training"); + itoa(count, temp, 10); + strcat(sTrait, temp); + + strcpy(temp, sTrait); + strcat(sTrait, "_icon"); + tmp_spell = master_spell_list.GetSpell((*itr3)->spellID, (*itr3)->tier); + + if (tmp_spell) + packet->setArrayDataByName(sTrait, tmp_spell->GetSpellIcon(), index); + else + LogWrite(SPELL__ERROR, 0, "Training", "Could not find SpellID %u and Tier %i in Master Spell List (line: %i)", (*itr3)->spellID, (*itr3)->tier, __LINE__); + + strcpy(sTrait, temp); + strcat(sTrait, "_icon2"); + if (tmp_spell) + packet->setArrayDataByName(sTrait, tmp_spell->GetSpellIconBackdrop(), index); + else + LogWrite(SPELL__ERROR, 0, "Training", "Could not find SpellID %u and Tier %i in Master Spell List (line: %i)", (*itr3)->spellID, (*itr3)->tier, __LINE__); + + strcpy(sTrait, temp); + strcat(sTrait, "_id"); + packet->setArrayDataByName(sTrait, (*itr3)->spellID, index); + + strcpy(sTrait, temp); + strcat(sTrait, "_unknown"); + packet->setArrayDataByName(sTrait,0xFFFFFFFF , index); + + strcpy(sTrait, temp); + strcat(sTrait, "_unknown2"); + packet->setArrayDataByName(sTrait, 1, index); + + strcpy(sTrait, temp); + strcat(sTrait, "_name"); + if (tmp_spell) + packet->setArrayDataByName(sTrait, tmp_spell->GetName(), index); + else + LogWrite(SPELL__ERROR, 0, "Training", "Could not find SpellID %u and Tier %i in Master Spell List (line: %i)", (*itr3)->spellID, (*itr3)->tier, __LINE__); + + if (client->GetPlayer()->HasSpell((*itr3)->spellID, (*itr3)->tier)) + packet->setArrayDataByName("training_line", count, index); + } + // Jabantiz: If less then 5 fill the rest of the line with FF FF FF FF FF FF FF FF FF FF FF FF + while (count < 5) { + strcpy(sTrait, "training"); + itoa(count, temp, 10); + strcat(sTrait, temp); + strcpy(temp, sTrait); + strcat(sTrait, "_icon"); + packet->setArrayDataByName(sTrait, 65535, index); // FF FF + strcpy(sTrait, temp); + strcat(sTrait, "_icon2"); + packet->setArrayDataByName(sTrait, 65535, index); // FF FF + strcpy(sTrait, temp); + strcat(sTrait, "_id"); + packet->setArrayDataByName(sTrait, 0xFFFFFFFF, index); + strcpy(sTrait, temp); + strcat(sTrait, "_unknown"); + packet->setArrayDataByName(sTrait, 0xFFFFFFFF, index); + strcpy(sTrait, temp); + strcat(sTrait, "_name"); + packet->setArrayDataByName(sTrait, "", index); + count++; + } + } + // Racial Traits + packet->setArrayLengthByName("num_sections", RaceTraits.size()); + index = 0; + string tempStr; + int8 num_selections = 0; + for (itr2 = RaceTraits.begin(); itr2 != RaceTraits.end(); itr2++, index++) { + count = 0; + Spell* tmp_spell = 0; + switch (itr2->first) + { + case TRAITS_ATTRIBUTES: + tempStr = "Attributes"; + break; + case TRAITS_COMBAT: + tempStr = "Combat"; + break; + case TRAITS_NONCOMBAT: + tempStr = "Noncombat"; + break; + case TRAITS_POOLS: + tempStr = "Pools"; + break; + case TRAITS_RESIST: + tempStr = "Resist"; + break; + case TRAITS_TRADESKILL: + tempStr = "Tradeskill"; + break; + default: + tempStr = "Unknown"; + break; + } + packet->setArrayDataByName("section_name", tempStr.c_str(), index); + packet->setSubArrayLengthByName("num_traditions", (itr2->second).size(), index); + + for (itr3 = itr2->second.begin(); itr3 != itr2->second.end(); itr3++, count++) { + if (client->GetPlayer()->HasSpell((*itr3)->spellID, (*itr3)->tier)) { + num_selections++; + packet->setSubArrayDataByName("tradition_selected", 1, index, count); + } + else { + packet->setSubArrayDataByName("tradition_selected", 0, index, count); + } + tmp_spell = master_spell_list.GetSpell((*itr3)->spellID, (*itr3)->tier); + if (tmp_spell){ + packet->setSubArrayDataByName("tradition_icon", tmp_spell->GetSpellIcon(), index, count); + packet->setSubArrayDataByName("tradition_icon2", tmp_spell->GetSpellIconBackdrop(), index, count); + packet->setSubArrayDataByName("tradition_id", (*itr3)->spellID, index, count); + packet->setSubArrayDataByName("tradition_name", tmp_spell->GetName(), index, count); + packet->setSubArrayDataByName("tradition_unknown_58617_MJ1", 1, index, count); + } + else + LogWrite(SPELL__ERROR, 0, "Traits", "Could not find SpellID %u and Tier %i in Master Spell List (line: %i)", (*itr3)->spellID, (*itr3)->tier, __LINE__); + } + } + int8 num_available_selections = client->GetPlayer()->GetLevel() / 10; + if (num_selections < num_available_selections) + packet->setDataByName("allow_select", num_available_selections - num_selections); + else + packet->setDataByName("allow_select", 0); + + // Innate Racial Traits + index = 0; + + // total number of Innate traits + num_traits = 0; + for (itr2 = InnateRaceTraits.begin(); itr2 != InnateRaceTraits.end(); itr2++) { + num_traits += (itr2->second).size(); + } + packet->setArrayLengthByName("num_abilities", num_traits); + for (itr2 = InnateRaceTraits.begin(); itr2 != InnateRaceTraits.end(); itr2++) { + for (itr3 = itr2->second.begin(); itr3 != itr2->second.end(); itr3++, index++) { + Spell* innate_spell = master_spell_list.GetSpell((*itr3)->spellID, (*itr3)->tier); + if (innate_spell) { + packet->setArrayDataByName("ability_icon", innate_spell->GetSpellIcon(), index); + packet->setArrayDataByName("ability_icon2", innate_spell->GetSpellIconBackdrop(), index); + packet->setArrayDataByName("ability_id", (*itr3)->spellID, index); + packet->setArrayDataByName("ability_name", innate_spell->GetName(), index); + } + else + LogWrite(SPELL__ERROR, 0, "Traits", "Could not find SpellID %u and Tier %i in Master Spell List (line: %i)", (*itr3)->spellID, (*itr3)->tier, __LINE__); + } + } + + if (client->GetVersion() >= 1188) { + // total number of Focus Effects + num_selections = 0; + num_focuseffects = 0; + index = 0; + for (itr2 = FocusEffects.begin(); itr2 != FocusEffects.end(); itr2++) { + num_focuseffects += (itr2->second).size(); + } + packet->setArrayLengthByName("num_focuseffects", num_focuseffects); + for (itr2 = FocusEffects.begin(); itr2 != FocusEffects.end(); itr2++) { + for (itr3 = itr2->second.begin(); itr3 != itr2->second.end(); itr3++, index++) { + Spell* spell = master_spell_list.GetSpell((*itr3)->spellID, (*itr3)->tier); + if (client->GetPlayer()->HasSpell((*itr3)->spellID, (*itr3)->tier)) { + num_selections++; + packet->setArrayDataByName("focus_selected", 1, index); + } + else { + packet->setArrayDataByName("focus_selected", 0, index); + } + if (spell) { + packet->setArrayDataByName("focus_unknown2", 1, index); + packet->setArrayDataByName("focus_icon", spell->GetSpellIcon(), index); + packet->setArrayDataByName("focus_icon2", spell->GetSpellIconBackdrop(), index); + packet->setArrayDataByName("focus_spell_crc", (*itr3)->spellID, index); + packet->setArrayDataByName("focus_name", spell->GetName(), index); + packet->setArrayDataByName("focus_unknown_58617_MJ1", 1, index); + } + else + LogWrite(SPELL__ERROR, 0, "Traits", "Could not find SpellID %u and Tier %i in Master Spell List (line: %i)", (*itr3)->spellID, (*itr3)->tier, __LINE__); + } + } + num_available_selections = client->GetPlayer()->GetLevel() / 9; + if (num_selections < num_available_selections) + packet->setDataByName("focus_allow_select", num_available_selections - num_selections); + else + packet->setDataByName("focus_allow_select", 0); + } + LogWrite(SPELL__PACKET, 0, "Traits", "Dump/Print Packet in func: %s, line: %i", __FUNCTION__, __LINE__); +#if EQDEBUG >= 9 + packet->PrintPacket(); +#endif + EQ2Packet* data = packet->serialize(); + EQ2Packet* outapp = new EQ2Packet(OP_ClientCmdMsg, data->pBuffer, data->size); + //DumpPacket(outapp); + safe_delete(packet); + safe_delete(data); + return outapp; +} + +// Jabantiz: Probably a better way to do this but can't think of it right now +TraitData* MasterTraitList::GetTrait(int32 spellID) { + vector::iterator itr; + TraitData* data = NULL; + + MMasterTraitList.readlock(__FUNCTION__, __LINE__); + for (itr = TraitList.begin(); itr != TraitList.end(); itr++) { + if ((*itr)->spellID == spellID) { + data = (*itr); + break; + } + } + MMasterTraitList.releasereadlock(__FUNCTION__, __LINE__); + + return data; +} + +void MasterTraitList::DestroyTraits(){ + MMasterTraitList.writelock(__FUNCTION__, __LINE__); + vector::iterator itr; + for (itr = TraitList.begin(); itr != TraitList.end(); itr++) + safe_delete((*itr)); + TraitList.clear(); + MMasterTraitList.releasewritelock(__FUNCTION__, __LINE__); +} diff --git a/EQ2/source/WorldServer/Traits/Traits.h b/EQ2/source/WorldServer/Traits/Traits.h new file mode 100644 index 000000000..31213f657 --- /dev/null +++ b/EQ2/source/WorldServer/Traits/Traits.h @@ -0,0 +1,79 @@ +/* +EQ2Emulator: Everquest II Server Emulator +Copyright (C) 2007 EQ2EMulator Development Team (http://www.eq2emulator.net) + +This file is part of EQ2Emulator. + +EQ2Emulator is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +EQ2Emulator is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with EQ2Emulator. If not, see . +*/ + +#ifndef __Traits__ +#define __Traits__ + +#include +#include "../../common/types.h" +#include "../../common/EQPacket.h" +#include "../client.h" + +struct TraitData +{ + int32 spellID ; + int8 level; + int8 classReq; + int8 raceReq; + bool isTrait; + bool isInate; + bool isFocusEffect; + bool isTraining; + int8 tier; + int8 group; +}; + +#define TRAITS_ATTRIBUTES 0 +#define TRAITS_COMBAT 1 +#define TRAITS_NONCOMBAT 2 +#define TRAITS_POOLS 3 +#define TRAITS_RESIST 4 +#define TRAITS_TRADESKILL 5 + +class MasterTraitList +{ +public: + MasterTraitList(); + ~MasterTraitList(); + + /// Sorts the traits for the given client and creats and sends the trait packet. + /// The Client calling this function + /// EQ2Packet* + EQ2Packet* GetTraitListPacket(Client* client); + + /// Add trait data to the global list. + /// The trait data to add. + void AddTrait(TraitData* data); + + /// Get the total number of traits in the global list. + int Size(); + + /// Get the trait data for the given spell. + /// Spell ID to get trait data for. + TraitData* GetTrait(int32 spellID); + + /// Empties the master trait list + void DestroyTraits(); +private: + vector TraitList; + Mutex MMasterTraitList; +}; + +#endif \ No newline at end of file diff --git a/EQ2/source/WorldServer/Variables.h b/EQ2/source/WorldServer/Variables.h new file mode 100644 index 000000000..45d247286 --- /dev/null +++ b/EQ2/source/WorldServer/Variables.h @@ -0,0 +1,92 @@ +/* + EQ2Emulator: Everquest II Server Emulator + Copyright (C) 2007 EQ2EMulator Development Team (http://www.eq2emulator.net) + + This file is part of EQ2Emulator. + + EQ2Emulator is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + EQ2Emulator is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with EQ2Emulator. If not, see . +*/ +#ifndef EQ2_VARIABLES_H +#define EQ2_VARIABLES_H +#include +#include + +class Variable{ +public: + Variable (const char* name, const char* value, const char* comment){ + variableName = string(name); + variableValue = string(value); + if(comment) + variableComment = string(comment); + } + + const char* GetName() { return variableName.c_str(); } + const char* GetValue() { return variableValue.c_str(); } + const char* GetComment() { return variableComment.c_str(); } + string GetNameValuePair(){ return string(variableName).append(" ").append(variableValue); } + void SetValue(const char* value){ + if(value) + variableValue = string(value); + } +private: + string variableName; + string variableValue; + string variableComment; +}; + +class Variables +{ +public: + ~Variables(){ + ClearVariables(); + } + void AddVariable ( Variable* var ) + { + variables[string(var->GetName())] = var; + } + + void ClearVariables() + { + if(variables.size() == 0) + return; + + map::iterator map_list; + for( map_list = variables.begin(); map_list != variables.end(); map_list++ ) { + safe_delete(map_list->second); + } + variables.clear(); + } + + Variable* FindVariable ( string name ) + { + if(variables.count(name) > 0) + return variables[name]; + return 0; + } + + vector* GetVariables(string partial_name){ + vector* ret = new vector(); + map::iterator itr; + for(itr = variables.begin(); itr != variables.end(); itr++){ + if(itr->first.find(partial_name) < 0xFFFFFFFF) + ret->push_back(itr->second); + } + return ret; + } + +private: + map variables; + +}; +#endif diff --git a/EQ2/source/WorldServer/VisualStates.h b/EQ2/source/WorldServer/VisualStates.h new file mode 100644 index 000000000..538ba5f48 --- /dev/null +++ b/EQ2/source/WorldServer/VisualStates.h @@ -0,0 +1,127 @@ +/* + EQ2Emulator: Everquest II Server Emulator + Copyright (C) 2007 EQ2EMulator Development Team (http://www.eq2emulator.net) + + This file is part of EQ2Emulator. + + EQ2Emulator is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + EQ2Emulator is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with EQ2Emulator. If not, see . +*/ +#include + +using namespace std; + +// Visual States must use a hash table because of the large amount that exists and the large spacing +// between their ID's. String and character arrays could not be used for the first iterator because +// it would require the same pointer to access it from the hash table, which is obviously not possible +// since the text is from the client. + +// maximum amount of iterations it will attempt to find a entree +#define HASH_SEARCH_MAX 20 + +class VisualState +{ +public: + VisualState(int inID, char* inName){ + if(!inName) + return; + name = string(inName); + id = inID; + } + + int GetID() { return id; } + const char* GetName() { return name.c_str(); } + string GetNameString() { return name; } + +private: + int id; + string name; +}; + +class Emote{ +public: + Emote(char* in_name, int in_visual_state, char* in_message, char* in_targeted_message){ + if(!in_name) + return; + name = string(in_name); + visual_state = in_visual_state; + if(in_message) + message = string(in_message); + if(in_targeted_message) + targeted_message = string(in_targeted_message); + } + int GetVisualState() { return visual_state; } + const char* GetName() { return name.c_str(); } + const char* GetMessage() { return message.c_str(); } + const char* GetTargetedMessage() { return targeted_message.c_str(); } + + string GetNameString() { return name; } + string GetMessageString() { return message; } + string GetTargetedMessageString() { return targeted_message; } +private: + int visual_state; + string name; + string message; + string targeted_message; +}; + +class VisualStates +{ +public: + ~VisualStates(){ + Reset(); + } + + void Reset(){ + ClearVisualStates(); + ClearEmotes(); + } + + void ClearEmotes(){ + map::iterator map_list; + for(map_list = emoteMap.begin(); map_list != emoteMap.end(); map_list++ ) + safe_delete(map_list->second); + emoteMap.clear(); + } + + void ClearVisualStates(){ + map::iterator map_list; + for(map_list = visualStateMap.begin(); map_list != visualStateMap.end(); map_list++ ) + safe_delete(map_list->second); + visualStateMap.clear(); + } + + void InsertVisualState(VisualState* vs){ + visualStateMap[vs->GetNameString()] = vs; + } + + VisualState* FindVisualState(string var){ + if(visualStateMap.count(var) > 0) + return visualStateMap[var]; + return 0; + } + + void InsertEmote(Emote* emote){ + emoteMap[emote->GetNameString()] = emote; + } + + Emote* FindEmote(string var){ + if(emoteMap.count(var) > 0) + return emoteMap[var]; + return 0; + } +private: + map visualStateMap; + map emoteMap; +}; + diff --git a/EQ2/source/WorldServer/Widget.cpp b/EQ2/source/WorldServer/Widget.cpp new file mode 100644 index 000000000..9a94ea817 --- /dev/null +++ b/EQ2/source/WorldServer/Widget.cpp @@ -0,0 +1,409 @@ +/* + EQ2Emulator: Everquest II Server Emulator + Copyright (C) 2007 EQ2EMulator Development Team (http://www.eq2emulator.net) + + This file is part of EQ2Emulator. + + EQ2Emulator is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + EQ2Emulator is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with EQ2Emulator. If not, see . +*/ + +#include "Widget.h" +#include "../common/ConfigReader.h" +#include "Spells.h" +#include "World.h" +#include "../common/Log.h" +#include "ClientPacketFunctions.h" + +extern World world; +extern ConfigReader configReader; +extern MasterSpellList master_spell_list; + +Widget::Widget(){ + widget_id = 0; + widget_x = 0; + widget_y = 0; + widget_z = 0; + action_spawn = 0; + action_spawn_id = 0; + linked_spawn = 0; + linked_spawn_id = 0; + appearance.pos.state = 1; + appearance.encounter_level = 0; + spawn_type = 2; + appearance.activity_status = 64; + include_location = true; + include_heading = true; + is_open = false; + widget_type = 0; + open_heading = -1; + closed_heading = -1; + open_y = 0; + open_x = 0; + open_z = 0; + close_x = 0; + close_z = 0; + movement_index = 0; + movement_interrupted = false; + resume_movement = true; + attack_resume_needed = false; + multi_floor_lift = false; + MMovementLoop.SetName("Widget::MMovementLoop"); + last_movement_update = Timer::GetCurrentTime2(); +} +Widget::~Widget(){ + +} + +int32 Widget::GetWidgetID(){ + return widget_id; +} + +EQ2Packet* Widget::serialize(Player* player, int16 version){ + opcode = EQOpcodeManager[GetOpcodeVersion(version)]->EmuToEQ(OP_EqCreateWidgetCmd); + return spawn_serialize(player, version); +} + +void Widget::SetWidgetID(int32 val){ + widget_id = val; +} + +void Widget::SetWidgetX(float val){ + widget_x = val; +} + +float Widget::GetWidgetX(){ + return widget_x; +} + +void Widget::SetWidgetY(float val){ + widget_y = val; +} + +float Widget::GetWidgetY(){ + return widget_y; +} + +void Widget::SetWidgetZ(float val){ + widget_z = val; +} + +float Widget::GetWidgetZ(){ + return widget_z; +} + +void Widget::SetWidgetIcon(int8 val){ + appearance.icon = val; +} +void Widget::SetOpenDuration(int16 val){ + open_duration = val; +} +int16 Widget::GetOpenDuration(){ + return open_duration; +} + +Widget* Widget::Copy(){ + Widget* new_spawn = new Widget(); + if(GetOpenY() > 0) + appearance.pos.state = 0; + if(GetSizeOffset() > 0){ + int8 offset = GetSizeOffset()+1; + sint32 tmp_size = size + (rand()%offset - rand()%offset); + if(tmp_size < 0) + tmp_size = 1; + else if(tmp_size >= 0xFFFF) + tmp_size = 0xFFFF; + new_spawn->size = (int16)tmp_size; + } + else + new_spawn->size = size; + new_spawn->SetMerchantID(merchant_id); + new_spawn->SetMerchantType(merchant_type); + new_spawn->SetPrimaryCommands(&primary_command_list); + new_spawn->primary_command_list_id = primary_command_list_id; + new_spawn->SetSecondaryCommands(&secondary_command_list); + new_spawn->secondary_command_list_id = secondary_command_list_id; + new_spawn->database_id = database_id; + memcpy(&new_spawn->appearance, &appearance, sizeof(AppearanceData)); + new_spawn->SetWidgetID(widget_id); + new_spawn->SetWidgetX(widget_x); + new_spawn->SetWidgetY(widget_y); + new_spawn->SetWidgetZ(widget_z); + new_spawn->SetIncludeHeading(include_heading); + new_spawn->SetIncludeLocation(include_location); + new_spawn->SetOpenY(open_y); + new_spawn->SetCloseY(close_y); + new_spawn->SetOpenDuration(open_duration); + if(GetOpenSound()) + new_spawn->SetOpenSound(GetOpenSound()); + if(GetCloseSound()) + new_spawn->SetCloseSound(GetCloseSound()); + new_spawn->SetOpenHeading(open_heading); + new_spawn->SetClosedHeading(closed_heading); + new_spawn->SetWidgetType(widget_type); + new_spawn->SetActionSpawnID(action_spawn_id); + new_spawn->SetLinkedSpawnID(linked_spawn_id); + new_spawn->SetTransporterID(GetTransporterID()); + new_spawn->SetHouseID(GetHouseID()); + new_spawn->SetCloseX(GetCloseX()); + new_spawn->SetCloseZ(GetCloseZ()); + new_spawn->SetOpenX(GetOpenX()); + new_spawn->SetOpenZ(GetOpenZ()); + new_spawn->SetMultiFloorLift(multi_floor_lift); + return new_spawn; +} + +void Widget::SetIncludeLocation(bool val){ + include_location = val; +} +bool Widget::GetIncludeLocation(){ + return include_location; +} +void Widget::SetIncludeHeading(bool val){ + include_heading = val; +} +bool Widget::GetIncludeHeading(){ + return include_heading; +} +float Widget::GetOpenHeading(){ + return open_heading; +} +void Widget::SetOpenHeading(float val){ + open_heading = val; +} +float Widget::GetClosedHeading(){ + return closed_heading; +} +void Widget::SetClosedHeading(float val){ + closed_heading = val; +} +float Widget::GetOpenY(){ + return open_y; +} +void Widget::SetOpenY(float val){ + open_y = val; +} +float Widget::GetCloseY(){ + return close_y; +} +void Widget::SetCloseY(float val){ + close_y = val; +} +bool Widget::IsOpen(){ + return is_open; +} +int8 Widget::GetWidgetType(){ + return widget_type; +} +void Widget::SetWidgetType(int8 val){ + widget_type = val; +} +int32 Widget::GetActionSpawnID(){ + return action_spawn_id; +} +void Widget::SetActionSpawnID(int32 id){ + action_spawn_id = id; +} +int32 Widget::GetLinkedSpawnID(){ + return linked_spawn_id; +} +void Widget::SetLinkedSpawnID(int32 id){ + linked_spawn_id = id; +} +const char* Widget::GetOpenSound(){ + if(open_sound.length() > 0) + return open_sound.c_str(); + else + return 0; +} +void Widget::SetOpenSound(const char* name){ + open_sound = string(name); +} +const char* Widget::GetCloseSound(){ + if(close_sound.length() > 0) + return close_sound.c_str(); + else + return 0; +} +void Widget::SetCloseSound(const char* name){ + close_sound = string(name); +} + +void Widget::HandleTimerUpdate(){ + if(widget_type == WIDGET_TYPE_LIFT) + return; //This Widget is a lift, return. + else if (widget_type == WIDGET_TYPE_DOOR && is_open) + HandleUse(0, ""); +} + +void Widget::OpenDoor(){ + if(GetOpenHeading() >= 0) + SetHeading(GetOpenHeading()); + float openX = GetOpenX(); + float openY = GetOpenY(); + float openZ = GetOpenZ(); + if(openX != 0 || openY != 0 || openZ != 0 ) { + float x = GetX(); + float y = GetY(); + float z = GetZ(); + + if(openX != 0) + x = openX; + if(openY != 0) + y = openY; + if(openZ != 0) + z = openZ; + + AddRunningLocation(x, y, z, 4); + + float diff = GetDistance(GetX(), GetY(), GetZ(), x, y, z); + if(diff < 0) + diff*=-1; + GetZone()->AddWidgetTimer(this, diff / 4); + } + if (widget_type != WIDGET_TYPE_LIFT) + SetActivityStatus(0); + is_open = true; + if(open_duration > 0) + GetZone()->AddWidgetTimer(this, open_duration); +} + +void Widget::CloseDoor(){ + if(GetClosedHeading() > 0) + SetHeading(GetClosedHeading()); + else if(GetOpenHeading() >= 0) + SetHeading(GetSpawnOrigHeading()); + + if (widget_type != WIDGET_TYPE_LIFT) + SetActivityStatus(64); + + if (GetCloseX() != 0 || GetCloseY() != 0 || GetCloseZ() != 0 || GetOpenX() != 0 || GetOpenY() != 0 || GetOpenZ() != 0) { + float x = GetSpawnOrigX(); + float y = GetSpawnOrigY(); + float z = GetSpawnOrigZ(); + + if (GetCloseX() != 0) + x = GetCloseX(); + if (GetCloseY() != 0) + y = GetCloseY(); + if (GetCloseZ() != 0) + z = GetCloseZ(); + + AddRunningLocation(x, y, z, 4); + + float diff = GetDistance(GetX(), GetY(), GetZ(), x, y, z); + + if (diff < 0) + diff *= -1; + GetZone()->AddWidgetTimer(this, diff / 4); + } + + is_open = false; +} + +void Widget::ProcessUse(){ + if(widget_type == WIDGET_TYPE_LIFT && GetZone()->HasWidgetTimer(this)) //this door is a lift and in use, wait until it gets to the + return; + if(is_open) //close + CloseDoor(); + else //open + OpenDoor(); + if(is_open){ + if(GetOpenSound()) + GetZone()->PlaySoundFile(0, GetOpenSound(), widget_x, widget_y, widget_z); + } + else + if(GetCloseSound()) + GetZone()->PlaySoundFile(0, GetCloseSound(), widget_x, widget_y, widget_z); +} + +void Widget::HandleUse(Client* client, string command){ + vector* destinations = 0; + //The following check disables the use of doors and other widgets if the player does not meet the quest requirements + //If this is from a script ignore this check (client will be null) + if (client) { + bool meets_quest_reqs = MeetsSpawnAccessRequirements(client->GetPlayer()); + if (!meets_quest_reqs && (GetQuestsRequiredOverride() & 2) == 0) + return; + else if (meets_quest_reqs && appearance.show_command_icon != 1) + return; + } + + if (client && GetTransporterID() > 0) + destinations = GetZone()->GetTransporters(GetTransporterID()); + if (destinations) + client->ProcessTeleport(this, destinations, GetTransporterID()); + else if (widget_type == WIDGET_TYPE_DOOR || widget_type == WIDGET_TYPE_LIFT){ + Widget* widget = this; + if (!action_spawn && action_spawn_id > 0){ + Spawn* spawn = GetZone()->GetSpawnByDatabaseID(action_spawn_id); + if (spawn && spawn->IsWidget()) + action_spawn = (Widget*)spawn; + } + if (!linked_spawn && linked_spawn_id > 0){ + Spawn* spawn = GetZone()->GetSpawnByDatabaseID(linked_spawn_id); + if (spawn && spawn->IsWidget()) + linked_spawn = (Widget*)spawn; + } + if (linked_spawn){ + widget = linked_spawn; + ProcessUse(); //fire the first door, then fire the linked door below + } + else if (action_spawn) { + widget = action_spawn; + if (!widget->linked_spawn && widget->linked_spawn_id > 0) { + Spawn* spawn = GetZone()->GetSpawnByDatabaseID(widget->linked_spawn_id); + if (spawn && spawn->IsWidget()) + widget->linked_spawn = (Widget*)spawn; + } + + if (widget->linked_spawn) + widget->linked_spawn->ProcessUse(); + } + widget->ProcessUse(); + } + else if (client && m_houseID > 0 && strncasecmp("access", command.c_str(), 6) == 0) { + // Used a door to enter a house + HouseZone* hz = world.GetHouseZone(m_houseID); + int32 id = client->GetPlayer()->GetIDWithPlayerSpawn(this); + PlayerHouse* ph = 0; + if (hz) + ph = world.GetPlayerHouseByHouseID(client->GetPlayer()->GetCharacterID(), hz->id); + if (ph) { + ClientPacketFunctions::SendBaseHouseWindow(client, hz, ph, id); + } + else { + if (hz) + ClientPacketFunctions::SendHousePurchace(client, hz, id); + } + } + else if (client && strncasecmp("access", command.c_str(), 6) == 0 && GetZone()->GetInstanceType() > 0) { + // Used a door within a house + PlayerHouse* ph = world.GetPlayerHouseByInstanceID(GetZone()->GetInstanceID()); + if (ph) { + HouseZone* hz = world.GetHouseZone(ph->house_id); + if (hz) { + int32 id = client->GetPlayer()->GetIDWithPlayerSpawn(this); + ClientPacketFunctions::SendBaseHouseWindow(client, hz, ph, id); + } + } + } + else if (client && m_houseID > 0 && strncasecmp("visit", command.c_str(), 6) == 0) { + ClientPacketFunctions::SendHouseVisitWindow(client, world.GetAllPlayerHousesByHouseID(m_houseID)); + } + else if (client && command.length() > 0) { + EntityCommand* entity_command = FindEntityCommand(command); + if (entity_command) + client->GetCurrentZone()->ProcessEntityCommand(entity_command, client->GetPlayer(), client->GetPlayer()->GetTarget()); + } +} \ No newline at end of file diff --git a/EQ2/source/WorldServer/Widget.h b/EQ2/source/WorldServer/Widget.h new file mode 100644 index 000000000..cc3a04b5d --- /dev/null +++ b/EQ2/source/WorldServer/Widget.h @@ -0,0 +1,115 @@ +/* + EQ2Emulator: Everquest II Server Emulator + Copyright (C) 2007 EQ2EMulator Development Team (http://www.eq2emulator.net) + + This file is part of EQ2Emulator. + + EQ2Emulator is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + EQ2Emulator is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with EQ2Emulator. If not, see . +*/ +#ifndef __EQ2_WIDGET__ +#define __EQ2_WIDGET__ +#include "Spawn.h" +#include "client.h" +using namespace std; +#define WIDGET_TYPE_GENERIC 0 +#define WIDGET_TYPE_DOOR 1 +#define WIDGET_TYPE_LIFT 2 +class Widget : public Spawn{ +public: + Widget(); + virtual ~Widget(); + bool IsWidget(){ return true; } + int32 GetWidgetID(); + void SetWidgetID(int32 val); + void SetWidgetX(float val); + float GetWidgetX(); + void SetWidgetY(float val); + float GetWidgetY(); + void SetWidgetZ(float val); + float GetWidgetZ(); + void SetIncludeLocation(bool val); + bool GetIncludeLocation(); + void SetIncludeHeading(bool val); + bool GetIncludeHeading(); + void SetWidgetIcon(int8 val); + Widget* Copy(); + EQ2Packet* serialize(Player* player, int16 version); + void HandleTimerUpdate(); + void OpenDoor(); + void CloseDoor(); + void HandleUse(Client* client, string command); + float GetOpenHeading(); + void SetOpenHeading(float val); + float GetClosedHeading(); + void SetClosedHeading(float val); + float GetOpenY(); + void SetOpenY(float val); + float GetCloseY(); + void SetCloseY(float val); + float GetOpenX(){return open_x;} + float GetOpenZ(){return open_z;} + float GetCloseX(){return close_x;} + float GetCloseZ(){return close_z;} + void SetOpenX(float x){open_x = x;} + void SetOpenZ(float z){open_z = z;} + void SetCloseX(float x){close_x = x;} + void SetCloseZ(float z){close_z = z;} + int8 GetWidgetType(); + void SetWidgetType(int8 val); + bool IsOpen(); + int32 GetActionSpawnID(); + void SetActionSpawnID(int32 id); + int32 GetLinkedSpawnID(); + void SetLinkedSpawnID(int32 id); + const char* GetOpenSound(); + void SetOpenSound(const char* name); + const char* GetCloseSound(); + void SetCloseSound(const char* name); + void SetOpenDuration(int16 val); + int16 GetOpenDuration(); + void ProcessUse(); + void SetHouseID(int32 val) { m_houseID = val; } + int32 GetHouseID() { return m_houseID; } + + void SetMultiFloorLift(bool val) { multi_floor_lift = val; } + bool GetMultiFloorLift() { return multi_floor_lift; } + +private: + int8 widget_type; + bool include_location; + bool include_heading; + float widget_x; + float widget_y; + float widget_z; + int32 widget_id; + float open_heading; + float closed_heading; + float open_y; + float close_y; + Widget* action_spawn; + int32 action_spawn_id; + Widget* linked_spawn; + int32 linked_spawn_id; + bool is_open; + string open_sound; + string close_sound; + int16 open_duration; + int32 m_houseID; + float open_x; + float open_z; + float close_x; + float close_z; + bool multi_floor_lift; +}; +#endif diff --git a/EQ2/source/WorldServer/World.cpp b/EQ2/source/WorldServer/World.cpp new file mode 100644 index 000000000..2ed9e915e --- /dev/null +++ b/EQ2/source/WorldServer/World.cpp @@ -0,0 +1,2094 @@ +/* + EQ2Emulator: Everquest II Server Emulator + Copyright (C) 2007 EQ2EMulator Development Team (http://www.eq2emulator.net) + + This file is part of EQ2Emulator. + + EQ2Emulator is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + EQ2Emulator is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with EQ2Emulator. If not, see . +*/ +#include +#include "World.h" +#include "Items/Items.h" +#include "Items/Items_ToV.h" +#include "Items/Items_DoV.h" +#include "Spells.h" +#include "client.h" +#include "WorldDatabase.h" +#include "../common/debug.h" +#include "races.h" +#include "classes.h" +#include "VisualStates.h" +#include "Appearances.h" +#include "Skills.h" +#include "LoginServer.h" +#include "Quests.h" +#include "Factions.h" +#include "Guilds/Guild.h" +#include "Collections/Collections.h" +#include "Achievements/Achievements.h" +#include "Recipes/Recipe.h" +#include "Rules/Rules.h" +#include "IRC/IRC.h" +#include "../common/Log.h" +#include "Traits/Traits.h" +#include "Chat/Chat.h" +#include "Tradeskills/Tradeskills.h" +#include "AltAdvancement/AltAdvancement.h" +#include "LuaInterface.h" +#include "HeroicOp/HeroicOp.h" +#include "RaceTypes/RaceTypes.h" + +MasterQuestList master_quest_list; +MasterItemList master_item_list; +MasterSpellList master_spell_list; +MasterTraitList master_trait_list; +MasterHeroicOPList master_ho_list; +MasterSkillList master_skill_list; +MasterFactionList master_faction_list; +MasterCollectionList master_collection_list; +MasterAchievementList master_achievement_list; +MasterRecipeList master_recipe_list; +MasterRecipeBookList master_recipebook_list; +MasterTradeskillEventsList master_tradeskillevent_list; +MasterAAList master_aa_list; +MasterRaceTypeList race_types_list; +MasterAANodeList master_tree_nodes; +ClientList client_list; +ZoneList zone_list; +ZoneAuth zone_auth; +int32 Spawn::next_id = 1; +int32 WorldDatabase::next_id = 0; +Commands commands; +Variables variables; +VisualStates visual_states; +Appearances master_appearance_list; +Classes classes; +Races races; +mapEQOpcodeManager; +map EQOpcodeVersions; +WorldDatabase database; +GuildList guild_list; +IRC irc; +Chat chat; + +extern ConfigReader configReader; +extern LoginServer loginserver; +extern World world; +extern RuleManager rule_manager; + +World::World() : save_time_timer(300000), time_tick_timer(3000), vitality_timer(3600000), player_stats_timer(60000), server_stats_timer(60000), /*remove_grouped_player(30000),*/ guilds_timer(60000), lotto_players_timer(500) { + save_time_timer.Start(); + time_tick_timer.Start(); + vitality_timer.Start(); + player_stats_timer.Start(); + server_stats_timer.Start(); + //remove_grouped_player.Start(); + guilds_timer.Start(); + lotto_players_timer.Start(); + xp_rate = -1; + ts_xp_rate = -1; + vitality_frequency = 0xFFFFFFFF; + vitality_amount = -1; + last_checked_time = 0; + items_loaded = false; + spells_loaded = false; + achievments_loaded = false; + merchant_inventory_items.clear(); + MHouseZones.SetName("World::m_houseZones"); + MPlayerHouses.SetName("World::m_playerHouses"); +} + +World::~World(){ + // At this point the log system is already shut down so no calls to LogWrite are allowed in any of the functions called by this deconstructor + DeleteSpawns(); + if(database.GetStatus() == database.Connected) + WriteServerStatistics(); + RemoveServerStatistics(); + DeleteMerchantsInfo(); + MutexMap::iterator itr = lotto_players.begin(); + while (itr.Next()) + safe_delete(itr->second); + map::iterator itr2; + for (itr2 = m_houseZones.begin(); itr2 != m_houseZones.end(); itr2++) + safe_delete(itr2->second); + m_houseZones.clear(); + + tov_itemstat_conversion.clear(); +} + +void World::init(){ + WorldDatabase::next_id = database.GetMaxHotBarID(); + + LogWrite(COMMAND__DEBUG, 1, "Command", "-Loading Commands..."); + database.LoadCommandList(); + LogWrite(COMMAND__DEBUG, 1, "Command", "-Load Commands complete!"); + + LogWrite(FACTION__DEBUG, 1, "Faction", "-Loading Factions..."); + database.LoadFactionList(); + LogWrite(FACTION__DEBUG, 1, "Faction", "-Load Factions complete!..."); + + LogWrite(SKILL__DEBUG, 1, "Skill", "-Loading Skills..."); + database.LoadSkills(); + LogWrite(SKILL__DEBUG, 1, "Skill", "-Load Skills complete..."); + + LogWrite(WORLD__DEBUG, 1, "World", "-Loading `variables`..."); + database.LoadGlobalVariables(); + LogWrite(WORLD__DEBUG, 1, "World", "-Load `variables` complete!"); + + LogWrite(WORLD__DEBUG, 1, "World", "-Loading `appearances`..."); + database.LoadAppearanceMasterList(); + LogWrite(WORLD__DEBUG, 1, "World", "-Load `appearances` complete!"); + + LogWrite(WORLD__DEBUG, 1, "World", "-Loading `visual_states`..."); + database.LoadVisualStates(); + LogWrite(WORLD__DEBUG, 1, "World", "-Load `visual states` complete!"); + + LogWrite(WORLD__DEBUG, 1, "World", "-Setting system parameters..."); + Variable* var = variables.FindVariable("gametime"); + const char* time_string = 0; + char default_time[] = "0/0/3800 8:30"; + + if(var) + time_string = var->GetValue(); + + if(!time_string) + time_string = default_time; + int year, month, day, hour, minute; + sscanf (time_string, "%d/%d/%d %d:%d", &month, &day, &year, &hour, &minute); + LogWrite(WORLD__DEBUG, 3, "World", "--Setting World Time to %s...", time_string); + world_time.month = month; + world_time.day = day; + world_time.year = year; + world_time.hour = hour; + world_time.minute = minute; + + LogWrite(WORLD__DEBUG, 3, "World", "--Loading Vitality Information..."); + LoadVitalityInformation(); + + LogWrite(WORLD__DEBUG, 3, "World", "--Loading Server Statistics..."); + database.LoadServerStatistics(); + + LogWrite(WORLD__DEBUG, 3, "World", "--Setting Server Start Time..."); + UpdateServerStatistic(STAT_SERVER_START_TIME, Timer::GetUnixTimeStamp(), true); + + LogWrite(WORLD__DEBUG, 3, "World", "--Resetting Accepted Connections to 0..."); + UpdateServerStatistic(STAT_SERVER_ACCEPTED_CONNECTION, 0, true); + + LogWrite(WORLD__DEBUG, 3, "World", "--Resetting Active Zones to 0..."); + UpdateServerStatistic(STAT_SERVER_NUM_ACTIVE_ZONES, 0, true); + + // Clear all online players at server startup + LogWrite(WORLD__DEBUG, 3, "World", "--Resetting characters online flags..."); + database.ToggleCharacterOnline(); + LogWrite(WORLD__DEBUG, 1, "World", "-Set system parameters complete!"); + + LogWrite(RULESYS__DEBUG, 1, "Rules", "-Loading Rule Sets..."); + database.LoadRuleSets(); + LogWrite(RULESYS__DEBUG, 1, "Rules", "-Load Rule Sets complete!"); + + LogWrite(CHAT__DEBUG, 1, "IRC", "-Starting IRC thread..."); + LoadItemBlueStats(); + //PopulateTOVStatMap(); + group_buff_updates.Start(rule_manager.GetGlobalRule(R_Client, GroupSpellsTimer)->GetInt32()); + irc.Start(); +} + + + + + +PacketStruct* World::GetWorldTime(int16 version){ + PacketStruct* packet = configReader.getStruct("WS_GameWorldTime", version); + if(packet){ + packet->setDataByName("year", world_time.year); + packet->setDataByName("month", world_time.month); + packet->setDataByName("day", world_time.day); + packet->setDataByName("hour", world_time.hour); + packet->setDataByName("minute", world_time.minute); + packet->setDataByName("unknown", 250); + packet->setDataByName("unix_time", Timer::GetUnixTimeStamp()); + packet->setDataByName("unknown2", 1); + } + return packet; +} + +float World::GetXPRate(){ + if(xp_rate >= 0) + return xp_rate; + + xp_rate = rule_manager.GetGlobalRule(R_Player, XPMultiplier)->GetFloat(); + LogWrite(WORLD__DEBUG, 0, "World", "Setting Global XP Rate to: %.2f", xp_rate); + return xp_rate; +} + +float World::GetTSXPRate() +{ + if(ts_xp_rate >= 0) + return ts_xp_rate; + + ts_xp_rate = rule_manager.GetGlobalRule(R_Player, TSXPMultiplier)->GetFloat(); + LogWrite(WORLD__DEBUG, 0, "World", "Setting Global Tradeskill XP Rate to: %.2f", ts_xp_rate); + return ts_xp_rate; +} + +void World::Process(){ + if(last_checked_time > Timer::GetCurrentTime2()) + return; + last_checked_time = Timer::GetCurrentTime2() + 1000; + if(save_time_timer.Check()) + database.SaveWorldTime(&world_time); + if(time_tick_timer.Check()) + WorldTimeTick(); + if(vitality_timer.Check()) + UpdateVitality(); + if (player_stats_timer.Check()) + WritePlayerStatistics(); + if (server_stats_timer.Check()) + WriteServerStatistics(); + /*if(remove_grouped_player.Check()) + CheckRemoveGroupedPlayer();*/ + if (group_buff_updates.Check()) + GetGroupManager()->UpdateGroupBuffs(); + if (guilds_timer.Check()) + SaveGuilds(); + if (lotto_players_timer.Check()) + CheckLottoPlayers(); +} + +vector* World::GetClientVariables(){ + return variables.GetVariables("cl_"); +} + +void World::LoadVitalityInformation() +{ + int32 timestamp = Timer::GetUnixTimeStamp(); + int32 diff = 0; + + // fetch vitalitytimer value from `variables` table + Variable* timer_var = variables.FindVariable("vitalitytimer"); + + if(timer_var) + { + try + { + diff = timestamp - atoul(timer_var->GetValue()); + diff *= 1000; //convert seconds to milliseconds + } + catch(...) + { + LogWrite(WORLD__ERROR, 0, "World", "Error parsing vitalitytimer, value: %s", timer_var->GetValue()); + } + } + + // Now using Rules System to set vitality parameters + vitality_amount = rule_manager.GetGlobalRule(R_Player, VitalityAmount)->GetFloat(); + vitality_frequency = rule_manager.GetGlobalRule(R_Player, VitalityFrequency)->GetInt32(); + + vitality_frequency *= 1000; //convert seconds to milliseconds + + if(diff >= vitality_frequency) + UpdateVitality(); //update now + else + vitality_timer.SetTimer(vitality_frequency - diff); +} + +void World::UpdateVitality() +{ + // push new vitalitytimer to `variables` table + database.UpdateVitality(Timer::GetUnixTimeStamp(), vitality_amount); + + if(vitality_timer.GetDuration() != vitality_frequency) + vitality_timer.SetTimer(vitality_frequency); + + zone_list.UpdateVitality(vitality_amount); +} + + +void ZoneList::UpdateVitality(float amount) +{ + list::iterator zone_iter; + ZoneServer* tmp = 0; + MZoneList.readlock(__FUNCTION__, __LINE__); + + for(zone_iter=zlist.begin(); zone_iter!=zlist.end(); zone_iter++) + { + tmp = *zone_iter; + if(tmp) + tmp->UpdateVitality(amount); + } + + MZoneList.releasereadlock(__FUNCTION__, __LINE__); +} + + +void World::WorldTimeTick(){ + world_time.minute++; + //I know it looks complicated, but the nested ifs are to avoid checking all of them every 3 seconds + if(world_time.minute >= 60){ // >= in case of bad time from db + world_time.minute = 0; + world_time.hour++; + if(world_time.hour >= 24){ + world_time.hour = 0; + world_time.day++; + if(world_time.day>=30){ + world_time.day = 0; + world_time.month++; + if(world_time.month >= 12){ + world_time.month = 0; + world_time.year++; + } + } + } + } +} + + +ZoneList::ZoneList() { + MZoneList.SetName("ZoneList::MZoneList"); +} + +ZoneList::~ZoneList() { + list::iterator zone_iter; + ZoneServer* zs = 0; + for(zone_iter=zlist.begin(); zone_iter!=zlist.end();){ + zs = *zone_iter; + zone_iter = zlist.erase(zone_iter); + safe_delete(zs); + } +} + +void ZoneList::CheckFriendList(Client* client) { + LogWrite(WORLD__DEBUG, 0, "World", "Sending FriendList..."); + MClientList.lock(); + map::iterator itr; + for(itr = client_map.begin(); itr != client_map.end(); itr++){ + if(itr->second != client && itr->second){ + if(itr->second->GetPlayer()->IsFriend(client->GetPlayer()->GetName())){ + itr->second->SendFriendList(); + itr->second->Message(CHANNEL_COLOR_CHAT_RELATIONSHIP, "Friend: %s has logged in.", client->GetPlayer()->GetName()); + } + } + } + MClientList.unlock(); +} + +void ZoneList::CheckFriendZoned(Client* client){ + MClientList.lock(); + map::iterator itr; + for(itr = client_map.begin(); itr != client_map.end(); itr++){ + if(itr->second != client && itr->second){ + if(itr->second->GetPlayer()->IsFriend(client->GetPlayer()->GetName())){ + itr->second->SendFriendList(); + } + } + } + MClientList.unlock(); +} + +bool ZoneList::HandleGlobalChatMessage(Client* from, char* to, int16 channel, const char* message, const char* channel_name){ + if (!from) { + LogWrite(WORLD__ERROR, 0, "World", "HandleGlobalChatMessage() called with an invalid client"); + return false; + } + + if(channel == CHANNEL_TELL){ + Client* find_client = zone_list.GetClientByCharName(to); + if(!find_client || find_client->GetPlayer()->IsIgnored(from->GetPlayer()->GetName())) + return false; + else if(find_client == from) + { + from->Message(CHANNEL_COLOR_RED,"You must be very lonely...(ERROR: Cannot send tell to self)"); + } + else + { + PacketStruct* packet = configReader.getStruct("WS_HearChat", from->GetVersion()); + if(packet){ + packet->setMediumStringByName("from", from->GetPlayer()->GetName()); + packet->setMediumStringByName("to", find_client->GetPlayer()->GetName()); + packet->setDataByName("channel", CHANNEL_TELL); + packet->setDataByName("from_spawn_id", 0xFFFFFFFF); + packet->setDataByName("to_spawn_id", 0xFFFFFFFF); + packet->setDataByName("unknown2", 1, 1); + packet->setDataByName("show_bubble", 1); + packet->setDataByName("understood", 1); + packet->setDataByName("time", 2); + packet->setMediumStringByName("message", message); + if(channel_name) + packet->setMediumStringByName("channel_name", channel_name); + EQ2Packet* outpacket = packet->serialize(); + //DumpPacket(outpacket); + find_client->QueuePacket(outpacket->Copy()); + from->QueuePacket(outpacket); + safe_delete(packet); + } + if (find_client->GetPlayer()->get_character_flag(CF_AFK)) { + PacketStruct* packet2 = configReader.getStruct("WS_HearChat", from->GetVersion()); + if (packet2) { + packet2->setMediumStringByName("from", find_client->GetPlayer()->GetName()); + packet2->setMediumStringByName("to", from->GetPlayer()->GetName()); + packet2->setDataByName("channel", CHANNEL_TELL); + packet2->setDataByName("from_spawn_id", 0xFFFFFFFF); + packet2->setDataByName("to_spawn_id", 0xFFFFFFFF); + packet2->setDataByName("unknown2", 1, 1); + packet2->setDataByName("show_bubble", 1); + packet2->setDataByName("understood", 1); + packet2->setDataByName("time", 2); + packet2->setMediumStringByName("message", find_client->GetPlayer()->GetAwayMessage().c_str()); + if (channel_name) + packet2->setMediumStringByName("channel_name", channel_name); + EQ2Packet* outpacket = packet2->serialize(); + from->QueuePacket(outpacket->Copy()); + find_client->QueuePacket(outpacket); + safe_delete(packet2); + } + } + } + } + else if(channel == CHANNEL_GROUP) { + GroupMemberInfo* gmi = from->GetPlayer()->GetGroupMemberInfo(); + if(gmi) + world.GetGroupManager()->GroupMessage(gmi->group_id, message); + } + else{ + list::iterator zone_iter; + ZoneServer* zs = 0; + MZoneList.readlock(__FUNCTION__, __LINE__); + for(zone_iter=zlist.begin(); zone_iter!=zlist.end();zone_iter++){ + zs = *zone_iter; + if(zs) + zs->HandleChatMessage(from->GetPlayer(), to, channel, message, 0, channel_name); + } + MZoneList.releasereadlock(__FUNCTION__, __LINE__); + } + return true; +} + +void ZoneList::LoadSpellProcess(){ + list::iterator zone_iter; + ZoneServer* zone = 0; + MZoneList.readlock(__FUNCTION__, __LINE__); + for (zone_iter=zlist.begin(); zone_iter!=zlist.end();zone_iter++){ + zone = *zone_iter; + if (zone) + zone->LoadSpellProcess(); + } + MZoneList.releasereadlock(__FUNCTION__, __LINE__); +} + +void ZoneList::DeleteSpellProcess(){ + list::iterator zone_iter; + ZoneServer* zone = 0; + MZoneList.readlock(__FUNCTION__, __LINE__); + for (zone_iter=zlist.begin(); zone_iter!=zlist.end();zone_iter++){ + zone = *zone_iter; + if (zone) + zone->DeleteSpellProcess(); + } + MZoneList.releasereadlock(__FUNCTION__, __LINE__); +} + +void ZoneList::HandleGlobalBroadcast(const char* message) { + list::iterator zone_iter; + ZoneServer* zone = 0; + MZoneList.readlock(__FUNCTION__, __LINE__); + for (zone_iter=zlist.begin(); zone_iter!=zlist.end();zone_iter++){ + zone = *zone_iter; + if (zone) + zone->HandleBroadcast(message); + } + MZoneList.releasereadlock(__FUNCTION__, __LINE__); +} + +void ZoneList::HandleGlobalAnnouncement(const char* message) { + list::iterator zone_iter; + ZoneServer* zone = 0; + MZoneList.readlock(__FUNCTION__, __LINE__); + for (zone_iter=zlist.begin(); zone_iter!=zlist.end();zone_iter++){ + zone = *zone_iter; + if (zone) + zone->HandleAnnouncement(message); + } + MZoneList.releasereadlock(__FUNCTION__, __LINE__); +} + +int32 ZoneList::Count(){ + return zlist.size(); +} + +void ZoneList::Add(ZoneServer* zone) { + MZoneList.writelock(__FUNCTION__, __LINE__); + zlist.push_back(zone); + MZoneList.releasewritelock(__FUNCTION__, __LINE__); +} +void ZoneList::Remove(ZoneServer* zone) { + MZoneList.writelock(__FUNCTION__, __LINE__); + zlist.remove(zone); + MZoneList.releasewritelock(__FUNCTION__, __LINE__); +} +ZoneServer* ZoneList::Get(const char* zone_name, bool loadZone) { + list::iterator zone_iter; + ZoneServer* tmp = 0; + ZoneServer* ret = 0; + MZoneList.readlock(__FUNCTION__, __LINE__); + for(zone_iter=zlist.begin(); zone_iter!=zlist.end(); zone_iter++){ + tmp = *zone_iter; + if (!tmp->isZoneShuttingDown() && !tmp->IsInstanceZone() && strlen(zone_name) == strlen(tmp->GetZoneName()) && + strncasecmp(tmp->GetZoneName(), zone_name, strlen(zone_name))==0){ + if(tmp->NumPlayers() < 30 || tmp->IsCityZone()) + ret = tmp; + break; + } + } + + MZoneList.releasereadlock(__FUNCTION__, __LINE__); + + if(!ret ) + { + if ( loadZone ) + { + ret = new ZoneServer(zone_name); + database.LoadZoneInfo(ret); + ret->Init(); + } + } + return ret; +} + +ZoneServer* ZoneList::Get(int32 id, bool loadZone) { + list::iterator zone_iter; + ZoneServer* tmp = 0; + ZoneServer* ret = 0; + MZoneList.readlock(__FUNCTION__, __LINE__); + for(zone_iter=zlist.begin(); zone_iter!=zlist.end(); zone_iter++){ + tmp = *zone_iter; + if(!tmp->isZoneShuttingDown() && !tmp->IsInstanceZone() && tmp->GetZoneID() == id){ + if(tmp->NumPlayers() < 30 || tmp->IsCityZone()) + ret = tmp; + break; + } + } + MZoneList.releasereadlock(__FUNCTION__, __LINE__); + if(ret) + tmp = ret; + else if (loadZone) { + string* zonename = database.GetZoneName(id); + if(zonename){ + tmp = new ZoneServer(zonename->c_str()); + database.LoadZoneInfo(tmp); + tmp->Init(); + safe_delete(zonename); + } + } + return tmp; +} + + +void ZoneList::SendZoneList(Client* client) { + list::iterator zone_iter; + ZoneServer* tmp = 0; + MZoneList.readlock(__FUNCTION__, __LINE__); + int zonesListed = 0; + for(zone_iter=zlist.begin(); zone_iter!=zlist.end(); zone_iter++){ + tmp = *zone_iter; + if ( zonesListed > 20 ) + { + client->Message(CHANNEL_COLOR_YELLOW,"Reached max zone list of 20."); + break; + } + zonesListed++; + client->Message(CHANNEL_COLOR_YELLOW,"Zone(ID): %s(%i), Instance ID: %i, Description: %s.",tmp->GetZoneName(),tmp->GetZoneID(), + tmp->GetInstanceID(),tmp->GetZoneDescription()); + } + MZoneList.releasereadlock(__FUNCTION__, __LINE__); +} + +ZoneServer* ZoneList::GetByInstanceID(int32 id, int32 zone_id) { + list::iterator zone_iter; + ZoneServer* tmp = 0; + ZoneServer* ret = 0; + MZoneList.readlock(__FUNCTION__, __LINE__); + if ( id > 0 ) + { + for(zone_iter=zlist.begin(); zone_iter!=zlist.end(); zone_iter++){ + tmp = *zone_iter; + if(tmp->GetInstanceID() == id){ + ret = tmp; + break; + } + } + } + MZoneList.releasereadlock(__FUNCTION__, __LINE__); + if(ret) + tmp = ret; + else if ( zone_id > 0 ){ + string* zonename = database.GetZoneName(zone_id); + if(zonename){ + tmp = new ZoneServer(zonename->c_str()); + + // the player is trying to preload an already existing instance but it isn't loaded + if ( id > 0 ) + tmp->SetupInstance(id); + + database.LoadZoneInfo(tmp); + tmp->Init(); + safe_delete(zonename); + } + } + return tmp; +} + +ZoneServer* ZoneList::GetByLowestPopulation(int32 zone_id) { + ZoneServer* ret = 0; + ZoneServer* zone = 0; + int32 clients = 0; + list::iterator itr; + MZoneList.readlock(__FUNCTION__, __LINE__); + if (zone_id) { + for (itr = zlist.begin(); itr != zlist.end(); itr++) { + zone = *itr; + if (zone) { + // check the zone id's + if (zone->GetZoneID() == zone_id) { + // check this zones client count + if (clients == 0 || zone->GetClientCount() < clients) { + ret = zone; + clients = zone->GetClientCount(); + } + } + } + } + } + MZoneList.releasereadlock(__FUNCTION__, __LINE__); + + return ret; +} + +bool ZoneList::ClientConnected(int32 account_id){ + bool ret = false; + map::iterator itr; + MClientList.lock(); + for(itr=client_map.begin(); itr != client_map.end(); itr++){ + if(itr->second && itr->second->GetAccountID() == account_id && (itr->second->GetPlayer()->GetActivityStatus() & ACTIVITY_STATUS_LINKDEAD) == 0){ + ret = true; + break; + } + else if(!itr->second){ + client_map.erase(itr); + if(client_map.size() > 0){ + itr=client_map.begin(); + if(itr == client_map.end()){ + if(itr->second && itr->second->GetAccountID() == account_id && (itr->second->GetPlayer()->GetActivityStatus() & ACTIVITY_STATUS_LINKDEAD) == 0) + ret = true; + break; + } + } + else + break; + } + } + MClientList.unlock(); + return ret; +} + +void ZoneList::ReloadClientQuests(){ + list::iterator zone_iter; + ZoneServer* tmp = 0; + MZoneList.readlock(__FUNCTION__, __LINE__); + for(zone_iter=zlist.begin(); zone_iter!=zlist.end(); zone_iter++){ + tmp = *zone_iter; + if(tmp) + tmp->ReloadClientQuests(); + } + MZoneList.releasereadlock(__FUNCTION__, __LINE__); +} + +void ZoneList::ProcessWhoQuery(vector* queries, ZoneServer* zone, vector* players, bool isGM){ + Entity* player = 0; + bool add_player = true; + bool found_match = false; + int8 lower = 0; + int8 upper = 0; + vector tmpPlayers; + vector::iterator spawn_iter; + if(!zone->isZoneShuttingDown()){ + tmpPlayers = zone->GetPlayers(); + for(spawn_iter = tmpPlayers.begin(); spawn_iter!=tmpPlayers.end(); spawn_iter++){ + player = *spawn_iter; + add_player = true; + Client* find_client = zone_list.GetClientByCharName(player->GetName()); + if (find_client == NULL) continue; + int flags = find_client->GetPlayer()->GetInfoStruct()->flags; + int flags2 = find_client->GetPlayer()->GetInfoStruct()->flags2; + for(int32 i=0;add_player && queries && isize();i++){ + found_match = false; + if(queries->at(i) == "ALL") + continue; + if(queries->at(i).length() > 3 && classes.GetClassID(queries->at(i).c_str()) > 0){ + if(player->GetAdventureClass() != classes.GetClassID(queries->at(i).c_str())) + add_player = false; + found_match = true; + } + else if(queries->at(i).length() > 2 && races.GetRaceID(queries->at(i).c_str()) > 0){ + if(player->GetRace() != races.GetRaceID(queries->at(i).c_str())) + add_player = false; + found_match = true; + } + if(!found_match && queries->at(i) == "GOOD"){ + if(player->GetDeity() != 1) + add_player = false; + found_match = true; + } + else if(!found_match && queries->at(i) == "EVIL"){ + if(player->GetDeity() == 1) + add_player = false; + found_match = true; + } + if((queries->at(i) == "GUIDE") && (find_client->GetAdminStatus() > 0) && ((find_client->GetAdminStatus() >> 4) < 5)) + found_match = true; + else if((queries->at(i) == "GM") && ((find_client->GetAdminStatus() >> 4) > 4)) + found_match = true; + else if((queries->at(i) == "LFG") && (flags & (1 << CF_LFG))) + found_match = true; + else if((queries->at(i) == "LFW") && (flags & (1 << CF_LFW))) + found_match = true; + else if((queries->at(i) == "ROLEPLAYING") && (flags & (1 << CF_ROLEPLAYING))) + found_match = true; + else if(strspn(queries->at(i).c_str(),"0123456789") == queries->at(i).length()){ + try{ + if(lower == 0) + lower = atoi(queries->at(i).c_str()); + else + upper = atoi(queries->at(i).c_str()); + } + catch(...){} + found_match = true; + } + if(!found_match){ + string name = string(player->GetName()); + name = ToUpper(name); + if(name.find(queries->at(i)) == name.npos) + add_player = false; + } + } + if(lower > 0 && upper > 0){ + if(player->GetLevel() < lower || player->GetLevel() > upper) + add_player = false; + } + else if(lower > 0){ + if(player->GetLevel() != lower) + add_player = false; + } + if((flags2 & (1 << (CF_GM_HIDDEN - 32))) && !isGM) { + add_player = false; + found_match = true; + } + if(add_player) + players->push_back(player); + } + } +} + +void ZoneList::ProcessWhoQuery(const char* query, Client* client){ + list::iterator zone_iter; + vector players; + vector::iterator spawn_iter; + Entity* player = 0; + //for now display all clients + bool all = false; + vector* queries = 0; + bool isGM = ((client->GetAdminStatus() >> 4) > 4); + if(query){ + string query_string = string(query); + query_string = ToUpper(query_string); + queries = SplitString(query_string, ' '); + } + if(queries && queries->size() > 0 && queries->at(0) == "ALL") + all = true; + if(all){ + MZoneList.readlock(__FUNCTION__, __LINE__); + for(zone_iter=zlist.begin(); zone_iter!=zlist.end(); zone_iter++){ + ZoneServer* tmp = *zone_iter; + ProcessWhoQuery(queries, tmp, &players, isGM); + } + MZoneList.releasereadlock(__FUNCTION__, __LINE__); + } + else{ + ProcessWhoQuery(queries, client->GetCurrentZone(), &players, isGM); + } + + PacketStruct* packet = configReader.getStruct("WS_WhoQueryReply", client->GetVersion()); + if(packet){ + packet->setDataByName("account_id", client->GetAccountID()); + packet->setDataByName("unknown", 0xFFFFFFFF); + int8 num_characters = players.size(); + int8 max_who_results = 10; + int8 max_who_results_status_override = 100; + + Variable* var = variables.FindVariable("max_who_results_status_override"); + if ( var ){ + max_who_results_status_override = atoi(var->GetValue()); + } + + // AdnaeDMorte + if ( client->GetAdminStatus() >= max_who_results_status_override ){ + client->Message(CHANNEL_COLOR_RED, "** ADMIN-MODE ** "); + } + + Variable* var1 = variables.FindVariable("max_who_results"); + if ( var1 ){ + max_who_results = atoi(var1->GetValue()); + } + + if(num_characters > max_who_results && client->GetAdminStatus() < max_who_results_status_override){ + num_characters = max_who_results; + packet->setDataByName("response", 3); //response 1 = error message, 3 == capped + } + else + packet->setDataByName("response", 2); + packet->setArrayLengthByName("num_characters", num_characters); + packet->setDataByName("unknown10", 1); + int i=0; + for(spawn_iter = players.begin(); spawn_iter!=players.end(); spawn_iter++, i++){ + if(i == num_characters) + break; + player = *spawn_iter; + Client* find_client = zone_list.GetClientByCharName(player->GetName()); + int flags = find_client->GetPlayer()->GetInfoStruct()->flags; + int flags2 = find_client->GetPlayer()->GetInfoStruct()->flags2; + packet->setArrayDataByName("char_name", player->GetName(), i); + packet->setArrayDataByName("level", player->GetLevel(), i); + packet->setArrayDataByName("admin_level", ((flags2 & (1 << (CF_HIDE_STATUS - 32))) && !isGM)?0:(find_client->GetAdminStatus() >> 4), i); + packet->setArrayDataByName("class", player->GetAdventureClass(), i); + packet->setArrayDataByName("unknown4", 0xFF, i); //probably tradeskill class + packet->setArrayDataByName("flags", (((flags >> CF_ANONYMOUS) & 1) << 0 ) | + (((flags >> CF_LFG) & 1) << 1 ) | + (((flags >> CF_ANONYMOUS) & 1) << 2 ) | + /*(((flags >> CF_HIDDEN) & 1) << 3 ) |*/ + (((flags >> CF_ROLEPLAYING) & 1) << 4 ) | + (((flags >> CF_AFK) & 1) << 5 ) | + (((flags >> CF_LFW) & 1) << 6 ) /*| + (((flags >> CF_NOTA) & 1) << 7 )*/, i); + packet->setArrayDataByName("race", player->GetRace(), i); + if(player->GetZone() && player->GetZone()->GetZoneDescription()) + packet->setArrayDataByName("zone", player->GetZone()->GetZoneDescription(), i); + if(player->appearance.sub_title) { + int32 sub_title_length = strlen(player->appearance.sub_title); + char tmp_title[255]; + int32 index = 0; + int32 index_tmp = 0; + while (index < sub_title_length) { + if (player->appearance.sub_title[index] != '<' && player->appearance.sub_title[index] != '>') { + memcpy(tmp_title + index_tmp, player->appearance.sub_title + index, 1); + index_tmp++; + } + index++; + } + tmp_title[index_tmp] = '\0'; + packet->setArrayDataByName("guild", tmp_title, i); + } + } + client->QueuePacket(packet->serialize()); + safe_delete(packet); + } +} + +bool ZoneList::DepopFinished(){ + list::iterator zone_iter; + MZoneList.readlock(__FUNCTION__, __LINE__); + bool finished_depop = true; + for(zone_iter=zlist.begin(); zone_iter!=zlist.end(); zone_iter++){ + if(!(*zone_iter)->FinishedDepop()) + finished_depop = false; + } + MZoneList.releasereadlock(__FUNCTION__, __LINE__); + return finished_depop; +} + +void ZoneList::Depop(){ + list::iterator zone_iter; + MZoneList.readlock(__FUNCTION__, __LINE__); + for(zone_iter=zlist.begin(); zone_iter!=zlist.end(); zone_iter++){ + (*zone_iter)->Depop(); + } + MZoneList.releasereadlock(__FUNCTION__, __LINE__); +} + +void ZoneList::Repop(){ + list::iterator zone_iter; + MZoneList.readlock(__FUNCTION__, __LINE__); + for(zone_iter=zlist.begin(); zone_iter!=zlist.end(); zone_iter++){ + (*zone_iter)->Depop(false, true); + } + MZoneList.releasereadlock(__FUNCTION__, __LINE__); +} + +void ZoneList::ReloadSpawns() { + MZoneList.readlock(__FUNCTION__, __LINE__); + + list::iterator itr; + for (itr = zlist.begin(); itr != zlist.end(); itr++) + (*itr)->ReloadSpawns(); + + MZoneList.releasereadlock(__FUNCTION__, __LINE__); +} + +bool World::ReportBug(string data, char* player_name, int32 account_id, const char* spawn_name, int32 spawn_id, int32 zone_id){ + //loginserver + vector list; + int32 offset = 0; + int32 old_offset = 0; + while((offset = data.find(7, old_offset+1)) < 0xFFFFFFFF){ + if(old_offset > 0) + list.push_back(data.substr(old_offset+1, offset-old_offset-1)); + else + list.push_back(data.substr(old_offset, offset)); + old_offset = offset; + } + if(list.size() < 7){ + string output = "Invalid bug list:\n"; + for(int32 i=0;ipBuffer; + strncpy(report->category, list[0].c_str(), list[0].length() > 63 ? 63 : list[0].length()); + strncpy(report->subcategory, list[1].c_str(), list[1].length() > 63 ? 63 : list[1].length()); + strncpy(report->causes_crash, list[2].c_str(), list[2].length() > 63 ? 63 : list[2].length()); + strncpy(report->reproducible, list[3].c_str(), list[3].length() > 63 ? 63 : list[3].length()); + strncpy(report->summary, list[4].c_str(), list[4].length() > 127 ? 127 : list[4].length()); + strncpy(report->description, list[5].c_str(), list[5].length() > 1999 ? 1999 : list[5].length()); + strncpy(report->version, list[6].c_str(), list[6].length() > 31 ? 31 : list[6].length()); + strncpy(report->player, player_name, strlen(player_name) > 63 ? 63 : strlen(player_name)); + strncpy(report->spawn_name, spawn_name, strlen(spawn_name) > 63 ? 63 : strlen(spawn_name)); + report->spawn_id = spawn_id; + report->account_id = account_id; + report->zone_id = zone_id; + loginserver.SendPacket(outpack); + database.SaveBugReport(report->category, report->subcategory, report->causes_crash, report->reproducible, report->summary, report->description, report->version, report->player, account_id, spawn_name, spawn_id, zone_id); + safe_delete(outpack); + return true; +} + +void ZoneList::WritePlayerStatistics() { + list::iterator zone_itr; + MZoneList.readlock(__FUNCTION__, __LINE__); + for (zone_itr = zlist.begin(); zone_itr != zlist.end(); zone_itr++) + (*zone_itr)->WritePlayerStatistics(); + MZoneList.releasereadlock(__FUNCTION__, __LINE__); +} + +void ZoneList::ShutDownZones(){ + LogWrite(WORLD__INFO, 0, "World", "Shutting down all zones, please wait..."); + list::iterator zone_itr; + int32 size = 0; + MZoneList.readlock(__FUNCTION__, __LINE__); + for (zone_itr = zlist.begin(); zone_itr != zlist.end(); zone_itr++){ + (*zone_itr)->Shutdown(); + } + size = zlist.size(); + MZoneList.releasereadlock(__FUNCTION__, __LINE__); + while(size > 0){ + Sleep(10); + MZoneList.readlock(__FUNCTION__, __LINE__); + size = zlist.size(); + MZoneList.releasereadlock(__FUNCTION__, __LINE__); + } + LogWrite(WORLD__INFO, 0, "World", "Zone shutdown complete"); +} + +void ZoneList::ReloadMail() { + map::iterator itr; + MClientList.writelock(__FUNCTION__, __LINE__); + for (itr = client_map.begin(); itr != client_map.end(); itr++) { + itr->second->GetPlayer()->DeleteMail(); + database.LoadPlayerMail(itr->second); + } + MClientList.releasewritelock(__FUNCTION__, __LINE__); +} + +void World::AddSpawnScript(int32 id, const char* name){ + MSpawnScripts.lock(); + if(name) + spawn_scripts[id] = string(name); + MSpawnScripts.unlock(); +} + +void World::AddSpawnEntryScript(int32 id, const char* name){ + MSpawnScripts.lock(); + if(name) + spawnentry_scripts[id] = string(name); + MSpawnScripts.unlock(); +} + +void World::AddSpawnLocationScript(int32 id, const char* name){ + MSpawnScripts.lock(); + if(name) + spawnlocation_scripts[id] = string(name); + MSpawnScripts.unlock(); +} + +void World::AddZoneScript(int32 id, const char* name) { + MZoneScripts.lock(); + if (name) + zone_scripts[id] = string(name); + MZoneScripts.unlock(); +} + +const char* World::GetSpawnScript(int32 id){ + LogWrite(SPAWN__TRACE, 1, "Spawn", "Enter %s", __FUNCTION__); + const char* ret = 0; + MSpawnScripts.lock(); + if(spawn_scripts.count(id) > 0) + ret = spawn_scripts[id].c_str(); + MSpawnScripts.unlock(); + LogWrite(SPAWN__TRACE, 1, "Spawn", "Exit %s", __FUNCTION__); + return ret; +} + +const char* World::GetSpawnEntryScript(int32 id){ + LogWrite(SPAWN__TRACE, 1, "Spawn", "Enter %s", __FUNCTION__); + const char* ret = 0; + MSpawnScripts.lock(); + if(spawnentry_scripts.count(id) > 0) + ret = spawnentry_scripts[id].c_str(); + MSpawnScripts.unlock(); + LogWrite(SPAWN__TRACE, 1, "Spawn", "Exit %s", __FUNCTION__); + return ret; +} + +const char* World::GetSpawnLocationScript(int32 id){ + LogWrite(SPAWN__TRACE, 1, "Spawn", "Enter %s", __FUNCTION__); + const char* ret = 0; + MSpawnScripts.lock(); + if(spawnlocation_scripts.count(id) > 0) + ret = spawnlocation_scripts[id].c_str(); + MSpawnScripts.unlock(); + LogWrite(SPAWN__TRACE, 1, "Spawn", "Exit %s", __FUNCTION__); + return ret; +} + +const char* World::GetZoneScript(int32 id) { + const char* ret = 0; + MZoneScripts.lock(); + if (zone_scripts.count(id) > 0) + ret = zone_scripts[id].c_str(); + MZoneScripts.unlock(); + return ret; +} + +void World::ResetSpawnScripts(){ + MSpawnScripts.lock(); + spawn_scripts.clear(); + spawnentry_scripts.clear(); + spawnlocation_scripts.clear(); + MSpawnScripts.unlock(); +} + +void World::ResetZoneScripts() { + MZoneScripts.lock(); + zone_scripts.clear(); + MZoneScripts.unlock(); +} + + + +vector* World::GetMerchantItemList(int32 merchant_id, int8 merchant_type, Player* player) +{ + vector* ret = 0; + MMerchantList.lock(); + + if(merchant_info.count(merchant_id) > 0) + { + MerchantInfo* info = merchant_info[merchant_id]; + vector::iterator itr; + int32 inventory_id = 0; + Item* item = 0; + + for(int i=info->inventory_ids.size()-1;i>=0;i--) + { + inventory_id = info->inventory_ids[i]; + + if(merchant_inventory_items.count(inventory_id) > 0) + { + for(itr = merchant_inventory_items[inventory_id].begin(); itr != merchant_inventory_items[inventory_id].end(); itr++) + { + if(!ret) + ret = new vector; + + item = master_item_list.GetItem((*itr).item_id); + + // if NOT spell merchant, OR + // skill req is any skill, OR player has the skill, AND + // skill req2 is any skill, OR player has the skill2 + if(item && ( (merchant_type & MERCHANT_TYPE_SPELLS) == 0 || ( (item->generic_info.skill_req1 == 0xFFFFFFFF || player->GetSkills()->HasSkill(item->generic_info.skill_req1)) && (item->generic_info.skill_req2 == 0xFFFFFFFF || player->GetSkills()->HasSkill(item->generic_info.skill_req2)) ) ) ) + (*ret).push_back(*itr); + } + } + } + } + MMerchantList.unlock(); + return ret; +} + +vector* World::GetMerchantList(int32 merchant_id){ + vector* ret = 0; + MMerchantList.lock(); + if(merchant_info.count(merchant_id) > 0){ + MerchantInfo* info = merchant_info[merchant_id]; + map::iterator itr; + int32 inventory_id = 0; + for(int i=info->inventory_ids.size()-1;i>=0;i--){ + inventory_id = info->inventory_ids[i]; + if(merchant_inventory_items.count(inventory_id) > 0){ + ret = &merchant_inventory_items[inventory_id]; + } + } + } + MMerchantList.unlock(); + return ret; +} + +void World::AddMerchantItem(int32 inventory_id, MerchantItemInfo ItemInfo){ + MMerchantList.lock(); + merchant_inventory_items[inventory_id].push_back(ItemInfo); + MMerchantList.unlock(); +} + +void World::DeleteMerchantItems(){ + MMerchantList.lock(); + merchant_inventory_items.clear(); + MMerchantList.unlock(); +} + +void World::RemoveMerchantItem(int32 inventory_id, int32 item_id){ + MMerchantList.lock(); + if(merchant_inventory_items.count(inventory_id) > 0) { + vector::iterator itr; + for(itr = merchant_inventory_items[inventory_id].begin(); itr != merchant_inventory_items[inventory_id].end(); itr++){ + if ((*itr).item_id == item_id) { + merchant_inventory_items[inventory_id].erase(itr); + break; + } + } + } + MMerchantList.unlock(); +} + +int16 World::GetMerchantItemQuantity(int32 merchant_id, int32 item_id){ + int16 amount = 0; + int32 inventory_id = GetInventoryID(merchant_id, item_id); + if(inventory_id > 0){ + MMerchantList.lock(); + vector::iterator itr; + for(itr = merchant_inventory_items[inventory_id].begin(); itr != merchant_inventory_items[inventory_id].end(); itr++){ + if ((*itr).item_id == item_id) + amount = (*itr).quantity; + } + MMerchantList.unlock(); + } + return amount; +} + +int32 World::GetInventoryID(int32 merchant_id, int32 item_id){ + int32 ret = 0; + MMerchantList.lock(); + if(merchant_info.count(merchant_id) > 0){ + MerchantInfo* info = merchant_info[merchant_id]; + vector::iterator itr; + int32 inventory_id = 0; + for(int i=info->inventory_ids.size()-1;i>=0;i--){ + inventory_id = info->inventory_ids[i]; + if(merchant_inventory_items.count(inventory_id) > 0){ + for(itr = merchant_inventory_items[inventory_id].begin(); itr != merchant_inventory_items[inventory_id].end(); itr++){ + if((*itr).item_id == item_id){ + ret = inventory_id; + break; + } + } + if(ret > 0) + break; + } + } + } + MMerchantList.unlock(); + return ret; +} + +void World::DecreaseMerchantQuantity(int32 merchant_id, int32 item_id, int16 amount){ + int16 total_left = GetMerchantItemQuantity(merchant_id, item_id); + if(total_left > 0 && total_left < 0xFFFF){ + int32 inventory_id = GetInventoryID(merchant_id, item_id); + if(inventory_id > 0){ + MMerchantList.lock(); + vector::iterator itr; + for(itr = merchant_inventory_items[inventory_id].begin(); itr != merchant_inventory_items[inventory_id].end(); itr++){ + if ((*itr).item_id == item_id) { + if(total_left <= amount) { + merchant_inventory_items[inventory_id].erase(itr); + amount = 0; + break; + } + else + (*itr).quantity -= amount; + amount = (*itr).quantity; + } + } + + MMerchantList.unlock(); + } + } +} + +MerchantInfo* World::GetMerchantInfo(int32 merchant_id){ + MerchantInfo* ret = 0; + MMerchantList.lock(); + if(merchant_info.count(merchant_id) > 0) + ret = merchant_info[merchant_id]; + MMerchantList.unlock(); + return ret; +} + +void World::AddMerchantInfo(int32 merchant_id, MerchantInfo* info){ + MMerchantList.lock(); + if(merchant_info.count(merchant_id) > 0){ + safe_delete(merchant_info[merchant_id]); + } + merchant_info[merchant_id] = info; + MMerchantList.unlock(); +} + +map* World::GetMerchantInfo() { + return &merchant_info; +} + +void World::DeleteMerchantsInfo(){ + MMerchantList.lock(); + map::iterator itr; + for(itr = merchant_info.begin(); itr != merchant_info.end(); itr++){ + safe_delete(itr->second); + } + merchant_info.clear(); + MMerchantList.unlock(); +} + + + + + +void World::DeleteSpawns(){ + //reloading = true; + //ClearLootTables(); + /* + map::iterator npc_list_iter; + for(npc_list_iter=npc_list.begin();npc_list_iter!=npc_list.end();npc_list_iter++) { + safe_delete(npc_list_iter->second); + } + npc_list.clear(); + map::iterator object_list_iter; + for(object_list_iter=object_list.begin();object_list_iter!=object_list.end();object_list_iter++) { + safe_delete(object_list_iter->second); + } + object_list.clear(); + map::iterator groundspawn_list_iter; + for(groundspawn_list_iter=groundspawn_list.begin();groundspawn_list_iter!=groundspawn_list.end();groundspawn_list_iter++) { + safe_delete(groundspawn_list_iter->second); + } + groundspawn_list.clear(); + map::iterator widget_list_iter; + for(widget_list_iter=widget_list.begin();widget_list_iter!=widget_list.end();widget_list_iter++) { + safe_delete(widget_list_iter->second); + } + widget_list.clear(); + map::iterator sign_list_iter; + for(sign_list_iter=sign_list.begin();sign_list_iter!=sign_list.end();sign_list_iter++) { + safe_delete(sign_list_iter->second); + } + sign_list.clear();*/ + map::iterator appearance_list_iter; + for(appearance_list_iter=npc_appearance_list.begin();appearance_list_iter!=npc_appearance_list.end();appearance_list_iter++) { + safe_delete(appearance_list_iter->second); + } + npc_appearance_list.clear(); + + /* + map* >::iterator command_list_iter; + for(command_list_iter=entity_command_list.begin();command_list_iter!=entity_command_list.end();command_list_iter++) { + vector* v = command_list_iter->second; + if(v){ + for(int32 i=0;isize();i++){ + safe_delete(v->at(i)); + } + safe_delete(v); + } + } + entity_command_list.clear(); + */ + + //DeleteGroundSpawnItems(); + //DeleteTransporters(); + //DeleteTransporterMaps(); +} + +void World::ReloadGuilds() { + guild_list.GetGuilds()->clear(true); + database.LoadGuilds(); +} + +int8 World::GetClassID(const char* name){ + return classes.GetClassID(name); +} + +void World::WritePlayerStatistics() { + zone_list.WritePlayerStatistics(); +} + +void World::WriteServerStatistics() { + map::iterator itr; + Statistic* stat = 0; + for (itr = server_statistics.begin(); itr != server_statistics.end(); itr++) { + stat = itr->second; + if (stat->save_needed) { + stat->save_needed = false; + database.WriteServerStatistic(stat); + } + } + database.WriteServerStatisticsNeededQueries(); +} + +void World::AddServerStatistic(int32 stat_id, sint32 stat_value, int32 stat_date) { + if (server_statistics.count(stat_id) == 0) { + Statistic* stat = new Statistic; + stat->stat_id = stat_id; + stat->stat_value = stat_value; + stat->stat_date = stat_date; + stat->save_needed = false; + server_statistics[stat_id] = stat; + } +} + +void World::UpdateServerStatistic(int32 stat_id, sint32 stat_value, bool overwrite) { + if (server_statistics.count(stat_id) == 0) + AddServerStatistic(stat_id, stat_value, 0); + Statistic* stat = server_statistics[stat_id]; + overwrite == true ? stat->stat_value = stat_value : stat->stat_value += stat_value; + stat->stat_date = Timer::GetUnixTimeStamp(); + stat->save_needed = true; +} + +sint32 World::GetServerStatisticValue(int32 stat_id) { + if (server_statistics.count(stat_id) > 0) + return server_statistics[stat_id]->stat_value; + return 0; +} + +void World::RemoveServerStatistics() { + map::iterator stat_itr; + for (stat_itr = server_statistics.begin(); stat_itr != server_statistics.end(); stat_itr++) + safe_delete(stat_itr->second); + server_statistics.clear(); +} + +void World::SendGroupQuests(PlayerGroup* group, Client* client){ + return; + /*if(!group) + return; + GroupMemberInfo* info = 0; + MGroups.readlock(__FUNCTION__, __LINE__); + deque::iterator itr; + for(itr = group->members.begin(); itr != group->members.end(); itr++){ + info = *itr; + if(info->client){ + LogWrite(PLAYER__DEBUG, 0, "Player", "Send Quest Journal..."); + info->client->SendQuestJournal(false, client); + client->SendQuestJournal(false, info->client); + } + } + MGroups.releasereadlock(__FUNCTION__, __LINE__);*/ +} + +/*void World::CheckRemoveGroupedPlayer(){ + map::iterator itr; + GroupMemberInfo* found = 0; + MGroups.readlock(__FUNCTION__, __LINE__); + for(itr = group_removal_pending.begin(); itr != group_removal_pending.end(); itr++){ + if(itr->second < Timer::GetCurrentTime2()){ + found = itr->first; + break; + } + } + MGroups.releasereadlock(__FUNCTION__, __LINE__); + if(found){ + if(!found->client || (found->client && found->client->IsConnected() == false)) + DeleteGroupMember(found); + else{ + MGroups.writelock(__FUNCTION__, __LINE__); + group_removal_pending.erase(found); + MGroups.releasewritelock(__FUNCTION__, __LINE__); + } + } +}*/ + +void World::RejoinGroup(Client* client){ + /*map::iterator itr; + GroupMemberInfo* found = 0; + string name = string(client->GetPlayer()->GetName()); + MGroups.readlock(__FUNCTION__, __LINE__); + PlayerGroup* group = 0; + for(int i = player_groups.size()-1;!found && i >= 0;i--){ + group = player_groups[i]; + for(int x=group->members.size()-1;x>=0; x--){ + if(group->members[x]->name == name){ + found = group->members[x]; + break; + } + } + } + MGroups.releasereadlock(__FUNCTION__, __LINE__); + if(found){ + found->client = client; + client->GetPlayer()->SetGroup(found->group); + client->GetPlayer()->SetGroupMemberInfo(found); + }*/ +} + + +void World::AddBonuses(ItemStatsValues* values, int16 type, sint32 value, Entity* entity){ + if(values){ + switch(type){ + case ITEM_STAT_STR:{ + values->str += value; + break; + } + case ITEM_STAT_STA:{ + values->sta += value; + break; + } + case ITEM_STAT_AGI:{ + values->agi += value; + break; + } + case ITEM_STAT_WIS:{ + values->wis += value; + break; + } + case ITEM_STAT_INT:{ + values->int_ += value; + break; + } + case ITEM_STAT_VS_SLASH:{ + values->vs_slash += value; + break; + } + case ITEM_STAT_VS_CRUSH:{ + values->vs_crush += value; + break; + } + case ITEM_STAT_VS_PIERCE:{ + values->vs_pierce += value; + break; + } + case ITEM_STAT_VS_HEAT:{ + values->vs_heat += value; + break; + } + case ITEM_STAT_VS_COLD:{ + values->vs_cold += value; + break; + } + case ITEM_STAT_VS_MAGIC:{ + values->vs_magic += value; + break; + } + case ITEM_STAT_VS_MENTAL:{ + values->vs_mental += value; + break; + } + case ITEM_STAT_VS_DIVINE:{ + values->vs_divine += value; + break; + } + case ITEM_STAT_VS_DISEASE:{ + values->vs_disease += value; + break; + } + case ITEM_STAT_VS_POISON:{ + values->vs_poison += value; + break; + } + case ITEM_STAT_HEALTH:{ + values->health += value; + break; + } + case ITEM_STAT_POWER:{ + values->power += value; + break; + } + case ITEM_STAT_CONCENTRATION:{ + values->concentration += value; + break; + } + case ITEM_STAT_ABILITY_MODIFIER:{ + values->ability_modifier += value; + break; + } + case ITEM_STAT_CRITICALMITIGATION:{ + values->criticalmitigation += value; + break; + } + case ITEM_STAT_EXTRASHIELDBLOCKCHANCE:{ + values->extrashieldblockchance += value; + break; + } + case ITEM_STAT_BENEFICIALCRITCHANCE:{ + values->beneficialcritchance += value; + break; + } + case ITEM_STAT_CRITBONUS:{ + values->critbonus += value; + break; + } + /*case ITEM_STAT_POTENCY:{ + values->potency += value; + break; + }*/ + case ITEM_STAT_HATEGAINMOD:{ + values->hategainmod += value; + break; + } + case ITEM_STAT_ABILITYREUSESPEED:{ + values->abilityreusespeed += value; + break; + } + case ITEM_STAT_ABILITYCASTINGSPEED:{ + values->abilitycastingspeed += value; + break; + } + case ITEM_STAT_ABILITYRECOVERYSPEED:{ + values->abilityrecoveryspeed += value; + break; + } + case ITEM_STAT_SPELLREUSESPEED:{ + values->spellreusespeed += value; + break; + } + case ITEM_STAT_SPELLMULTIATTACKCHANCE:{ + values->spellmultiattackchance += value; + break; + } + case ITEM_STAT_DPS:{ + values->dps += value; + break; + } + case ITEM_STAT_ATTACKSPEED:{ + values->attackspeed += value; + break; + } + case ITEM_STAT_MULTIATTACKCHANCE:{ + values->multiattackchance += value; + break; + } + case ITEM_STAT_AEAUTOATTACKCHANCE:{ + values->aeautoattackchance += value; + break; + } + case ITEM_STAT_STRIKETHROUGH:{ + values->strikethrough += value; + break; + } + case ITEM_STAT_ACCURACY:{ + values->accuracy += value; + break; + } + /*case ITEM_STAT_OFFENSIVESPEED:{ + values->offensivespeed += value; + break; + }*/ + default: { + if (entity) + entity->stats[type] += value; + break; + } + } + } +} + +void World::CreateGuild(const char* guild_name, Client* leader, int32 group_id) { + deque::iterator itr; + GroupMemberInfo* gmi; + Guild *guild; + + assert(guild_name); + + guild = new Guild(); + guild->SetName(guild_name); + guild->SetFormedDate(Timer::GetUnixTimeStamp()); + database.LoadGuildDefaultRanks(guild); + database.LoadGuildDefaultEventFilters(guild); + database.SaveGuild(guild, true); + database.SaveGuildEvents(guild); + database.SaveGuildRanks(guild); + database.SaveGuildEventFilters(guild); + database.SaveGuildRecruiting(guild); + guild_list.AddGuild(guild); + if (leader && !leader->GetPlayer()->GetGuild()) + guild->AddNewGuildMember(leader, 0, GUILD_RANK_LEADER); + database.SaveGuildMembers(guild); + if (leader && group_id > 0) { + GetGroupManager()->GroupLock(__FUNCTION__, __LINE__); + + deque* members = GetGroupManager()->GetGroupMembers(group_id); + for (itr = members->begin(); itr != members->end(); itr++) { + gmi = *itr; + if (gmi->client && gmi->client != leader && !gmi->client->GetPlayer()->GetGuild()) + guild->InvitePlayer(gmi->client, leader->GetPlayer()->GetName()); + } + + GetGroupManager()->ReleaseGroupLock(__FUNCTION__, __LINE__); + } +} + +void World::SaveGuilds() { + MutexMap* guilds = guild_list.GetGuilds(); + MutexMap::iterator itr = guilds->begin(); + while (itr.Next()) { + Guild* guild = itr.second; + if (guild->GetSaveNeeded()) + database.SaveGuild(guild); + if (guild->GetMemberSaveNeeded()) + database.SaveGuildMembers(guild); + if (guild->GetEventsSaveNeeded()) + database.SaveGuildEvents(guild); + if (guild->GetRanksSaveNeeded()) + database.SaveGuildRanks(guild); + if (guild->GetEventFiltersSaveNeeded()) + database.SaveGuildEventFilters(guild); + if (guild->GetPointsHistorySaveNeeded()) + database.SaveGuildPointsHistory(guild); + if (guild->GetRecruitingSaveNeeded()) + database.SaveGuildRecruiting(guild); + } +} + +void World::PickRandomLottoDigits(int32* digits) { + if (digits) { + for (int32 i = 0; i < 6; i++) { + bool found = true; + int32 num = 0; + while (found) { + num = ((int32)rand() % 36) + 1; + for (int32 j = 0; j < 6; j++) { + if (digits[j] == num) + break; + if (j == 5) + found = false; + } + } + digits[i] = num; + } + } +} + +void World::AddLottoPlayer(int32 character_id, int32 end_time) { + LottoPlayer* lp; + if (lotto_players.count(character_id) == 0) { + lp = new LottoPlayer; + lotto_players.Put(character_id, lp); + } + else + lp = lotto_players.Get(character_id); + lp->end_time = end_time; + lp->num_matches = 0; + lp->set = false; +} + +void World::RemoveLottoPlayer(int32 character_id) { + if (lotto_players.count(character_id) > 0) + lotto_players.erase(character_id, false, true); +} + +void World::SetLottoPlayerNumMatches(int32 character_id, int8 num_matches) { + if (lotto_players.count(character_id) > 0) { + lotto_players.Get(character_id)->num_matches = num_matches; + lotto_players.Get(character_id)->set = true; + } +} + +void World::CheckLottoPlayers() { + MutexMap::iterator itr = lotto_players.begin(); + while (itr.Next()) { + LottoPlayer* lp = itr->second; + if (Timer::GetCurrentTime2() >= lp->end_time && lp->set) { + int8 num_matches = lp->num_matches; + LogWrite(PLAYER__DEBUG, 0, "Player", "Num matches: %u", lp->num_matches); + Client* client = zone_list.GetClientByCharID(itr->first); + if (client && num_matches >= 2) { + if (num_matches == 2) { + client->SimpleMessage(CHANNEL_COLOR_YELLOW, "You receive 10 silver."); + client->SendPopupMessage(0, "Congratulations! You have won 10 silver!", "", 2, 0xFF, 0xFF, 0x99); + client->GetPlayer()->AddCoins(1000); + client->GetPlayer()->GetZone()->SendCastSpellPacket(869, client->GetPlayer()); + } + else if (num_matches == 3) { + client->SimpleMessage(CHANNEL_COLOR_YELLOW, "You receive 50 silver."); + client->SendPopupMessage(0, "Congratulations! You have won 50 silver!", "", 2, 0xFF, 0xFF, 0x99); + client->GetPlayer()->AddCoins(5000); + client->GetPlayer()->GetZone()->SendCastSpellPacket(870, client->GetPlayer()); + } + else if (num_matches == 4) { + client->SimpleMessage(CHANNEL_COLOR_YELLOW, "You receive 2 gold 50 silver."); + client->SendPopupMessage(0, "Congratulations! You have won 2 gold 50 silver!", "", 2, 0xFF, 0xFF, 0x99); + client->GetPlayer()->AddCoins(25000); + client->GetPlayer()->GetZone()->SendCastSpellPacket(871, client->GetPlayer()); + } + else if (num_matches == 5) { + client->SimpleMessage(CHANNEL_COLOR_YELLOW, "You receive 25 gold."); + client->SendPopupMessage(0, "Congratulations! You have won 25 gold!", "", 2, 0xFF, 0xFF, 0x99); + client->GetPlayer()->AddCoins(250000); + client->GetPlayer()->GetZone()->SendCastSpellPacket(872, client->GetPlayer()); + } + else if (num_matches == 6) { + Variable* var = variables.FindVariable("gambling_current_jackpot"); + if (var) { + int64 jackpot = 0; + try { + jackpot = atoul(var->GetValue()); + } + catch (...) { + jackpot = 10000; + } + char coin_message[128]; + char message[512]; + char announcement[512]; + memset(coin_message, 0, sizeof(coin_message)); + memset(message, 0, sizeof(message)); + memset(announcement, 0, sizeof(announcement)); + sprintf(coin_message, "%s", client->GetCoinMessage(jackpot).c_str()); + sprintf(message, "Congratulations! You have won %s!", coin_message); + sprintf(announcement, "%s as won the jackpot containing a total of %s!", client->GetPlayer()->GetName(), coin_message); + client->Message(CHANNEL_COLOR_YELLOW, "You receive %s.", coin_message); + client->SendPopupMessage(0, message, "", 2, 0xFF, 0xFF, 0x99); + zone_list.HandleGlobalAnnouncement(announcement); + client->GetPlayer()->AddCoins(jackpot); + client->GetPlayer()->GetZone()->SendCastSpellPacket(843, client->GetPlayer()); + client->GetPlayer()->GetZone()->SendCastSpellPacket(1413, client->GetPlayer()); + } + } + } + RemoveLottoPlayer(itr->first); + } + } +} + +void World::AddHouseZone(int32 id, string name, int64 cost_coins, int32 cost_status, int64 upkeep_coins, int32 upkeep_status, int8 vault_slots, int8 alignment, int8 guild_level, int32 zone_id, int32 exit_zone_id, float exit_x, float exit_y, float exit_z, float exit_heading) { + MHouseZones.writelock(__FUNCTION__, __LINE__); + if (m_houseZones.count(id) == 0) { + HouseZone* hz = new HouseZone; + //ZeroMemory(hz, sizeof(HouseZone)); + hz->id = id; + hz->name = name; + hz->cost_coin = cost_coins; + hz->cost_status = cost_status; + hz->upkeep_coin = upkeep_coins; + hz->upkeep_status = upkeep_status; + hz->vault_slots = vault_slots; + hz->alignment = alignment; + hz->guild_level = guild_level; + hz->zone_id = zone_id; + hz->exit_zone_id = exit_zone_id; + hz->exit_x = exit_x; + hz->exit_y = exit_y; + hz->exit_z = exit_z; + hz->exit_heading = exit_heading; + m_houseZones[id] = hz; + } + else { + LogWrite(WORLD__ERROR, 0, "Housing", "Duplicate house id (%u) for %s", id, name.c_str()); + } + MHouseZones.releasewritelock(__FUNCTION__, __LINE__); +} + +HouseZone* World::GetHouseZone(int32 id) { + HouseZone* ret = 0; + + MHouseZones.readlock(__FUNCTION__, __LINE__); + if (m_houseZones.count(id) > 0) + ret = m_houseZones[id]; + MHouseZones.releasereadlock(__FUNCTION__, __LINE__); + + return ret; +} + +void World::AddPlayerHouse(int32 char_id, int32 house_id, int64 unique_id, int32 instance_id, int32 upkeep_due, int64 escrow_coins, int32 escrow_status, string player_name) { + MPlayerHouses.writelock(__FUNCTION__, __LINE__); + if (m_playerHouses.count(house_id) == 0 || m_playerHouses[house_id].count(char_id) == 0) { + PlayerHouse* ph = new PlayerHouse; + ph->house_id = house_id; + ph->unique_id = unique_id; + ph->instance_id = instance_id; + ph->escrow_coins = escrow_coins; + ph->escrow_status = escrow_status; + ph->upkeep_due = upkeep_due; + ph->player_name = player_name; + + m_playerHouses[house_id][char_id] = ph; + } + MPlayerHouses.releasewritelock(__FUNCTION__, __LINE__); +} + +PlayerHouse* World::GetPlayerHouseByHouseID(int32 char_id, int32 house_id) { + PlayerHouse* ret = 0; + + MPlayerHouses.readlock(__FUNCTION__, __LINE__); + if (m_playerHouses.count(house_id) > 0 && m_playerHouses[house_id].count(char_id) > 0) + ret = m_playerHouses[house_id][char_id]; + MPlayerHouses.releasereadlock(__FUNCTION__, __LINE__); + + return ret; +} + +PlayerHouse* World::GetPlayerHouseByUniqueID(int64 unique_id) { + PlayerHouse* ret = 0; + + MPlayerHouses.readlock(__FUNCTION__, __LINE__); + map >::iterator itr; + for (itr = m_playerHouses.begin(); itr != m_playerHouses.end(); itr++) { + map::iterator itr2; + for (itr2 = itr->second.begin(); itr2 != itr->second.end(); itr2++) { + if (itr2->second->unique_id == unique_id) { + ret = itr2->second; + break; + } + } + if (ret) + break; + } + MPlayerHouses.releasereadlock(__FUNCTION__, __LINE__); + + return ret; +} + +PlayerHouse* World::GetPlayerHouseByInstanceID(int32 instance_id) { + PlayerHouse* ret = 0; + + MPlayerHouses.readlock(__FUNCTION__, __LINE__); + map >::iterator itr; + for (itr = m_playerHouses.begin(); itr != m_playerHouses.end(); itr++) { + map::iterator itr2; + for (itr2 = itr->second.begin(); itr2 != itr->second.end(); itr2++) { + if (itr2->second->instance_id == instance_id) { + ret = itr2->second; + break; + } + } + if (ret) + break; + } + MPlayerHouses.releasereadlock(__FUNCTION__, __LINE__); + + return ret; +} + +vector World::GetAllPlayerHouses(int32 char_id) { + vector ret; + + MPlayerHouses.readlock(__FUNCTION__, __LINE__); + map >::iterator itr; + for (itr = m_playerHouses.begin(); itr != m_playerHouses.end(); itr++) { + if (itr->second.count(char_id) > 0) + ret.push_back(itr->second[char_id]); + } + MPlayerHouses.releasereadlock(__FUNCTION__, __LINE__); + + return ret; +} + +vector World::GetAllPlayerHousesByHouseID(int32 house_id) { + vector ret; + + MPlayerHouses.readlock(__FUNCTION__, __LINE__); + if (m_houseZones.count(house_id) > 0) { + map::iterator itr; + for (itr = m_playerHouses[house_id].begin(); itr != m_playerHouses[house_id].end(); itr++) + ret.push_back(itr->second); + } + MPlayerHouses.releasereadlock(__FUNCTION__, __LINE__); + + return ret; +} + + + +void World::PopulateTOVStatMap() { + //This function populates a map that converts changed CoE to ToV stats + tov_itemstat_conversion[0] = TOV_ITEM_STAT_HPREGEN; + tov_itemstat_conversion[1] = TOV_ITEM_STAT_MANAREGEN; + tov_itemstat_conversion[2] = TOV_ITEM_STAT_HPREGENPPT; + tov_itemstat_conversion[3] = TOV_ITEM_STAT_MPREGENPPT; + tov_itemstat_conversion[4] = TOV_ITEM_STAT_COMBATHPREGENPPT; + tov_itemstat_conversion[5] = TOV_ITEM_STAT_COMBATMPREGENPPT; + tov_itemstat_conversion[6] = TOV_ITEM_STAT_MAXHP; + tov_itemstat_conversion[7] = TOV_ITEM_STAT_MAXHPPERC; + tov_itemstat_conversion[8] = TOV_ITEM_STAT_MAXHPPERCFINAL; + tov_itemstat_conversion[9] = TOV_ITEM_STAT_SPEED; + tov_itemstat_conversion[10] = TOV_ITEM_STAT_SLOW; + tov_itemstat_conversion[11] = TOV_ITEM_STAT_MOUNTSPEED; + tov_itemstat_conversion[12] = TOV_ITEM_STAT_MOUNTAIRSPEED; + tov_itemstat_conversion[13] = TOV_ITEM_STAT_LEAPSPEED; + tov_itemstat_conversion[14] = TOV_ITEM_STAT_LEAPTIME; + tov_itemstat_conversion[15] = TOV_ITEM_STAT_GLIDEEFFICIENCY; + tov_itemstat_conversion[16] = TOV_ITEM_STAT_OFFENSIVESPEED; + tov_itemstat_conversion[17] = TOV_ITEM_STAT_ATTACKSPEED; + tov_itemstat_conversion[18] = 698; + tov_itemstat_conversion[19] = TOV_ITEM_STAT_MAXMANA; + tov_itemstat_conversion[20] = TOV_ITEM_STAT_MAXMANAPERC; + tov_itemstat_conversion[21] = TOV_ITEM_STAT_MAXATTPERC; + tov_itemstat_conversion[22] = TOV_ITEM_STAT_BLURVISION; + tov_itemstat_conversion[23] = TOV_ITEM_STAT_MAGICLEVELIMMUNITY; + tov_itemstat_conversion[24] = TOV_ITEM_STAT_HATEGAINMOD; + tov_itemstat_conversion[25] = TOV_ITEM_STAT_COMBATEXPMOD; + tov_itemstat_conversion[26] = TOV_ITEM_STAT_TRADESKILLEXPMOD; + tov_itemstat_conversion[27] = TOV_ITEM_STAT_ACHIEVEMENTEXPMOD ; + tov_itemstat_conversion[28] = TOV_ITEM_STAT_SIZEMOD; + tov_itemstat_conversion[29] = TOV_ITEM_STAT_DPS; + tov_itemstat_conversion[30] = 698; + tov_itemstat_conversion[31] = TOV_ITEM_STAT_STEALTH; + tov_itemstat_conversion[32] = TOV_ITEM_STAT_INVIS; + tov_itemstat_conversion[33] = TOV_ITEM_STAT_SEESTEALTH; + tov_itemstat_conversion[34] = TOV_ITEM_STAT_SEEINVIS; + tov_itemstat_conversion[35] = TOV_ITEM_STAT_EFFECTIVELEVELMOD; + tov_itemstat_conversion[36] = TOV_ITEM_STAT_RIPOSTECHANCE; + tov_itemstat_conversion[37] = TOV_ITEM_STAT_PARRYCHANCE; + tov_itemstat_conversion[38] = TOV_ITEM_STAT_DODGECHANCE; + tov_itemstat_conversion[39] = TOV_ITEM_STAT_AEAUTOATTACKCHANCE; + tov_itemstat_conversion[40] = 698; + tov_itemstat_conversion[41] = TOV_ITEM_STAT_MULTIATTACKCHANCE; + tov_itemstat_conversion[42] = 698; + tov_itemstat_conversion[43] = 698; + tov_itemstat_conversion[44] = 698; + tov_itemstat_conversion[45] = TOV_ITEM_STAT_SPELLMULTIATTACKCHANCE; + tov_itemstat_conversion[46] = 698; + tov_itemstat_conversion[47] = TOV_ITEM_STAT_FLURRY; + tov_itemstat_conversion[48] = 698; + tov_itemstat_conversion[49] = TOV_ITEM_STAT_MELEEDAMAGEMULTIPLIER; + tov_itemstat_conversion[50] = TOV_ITEM_STAT_EXTRAHARVESTCHANCE; + tov_itemstat_conversion[51] = TOV_ITEM_STAT_EXTRASHIELDBLOCKCHANCE; + tov_itemstat_conversion[52] = TOV_ITEM_STAT_ITEMHPREGENPPT; + tov_itemstat_conversion[53] = TOV_ITEM_STAT_ITEMPPREGENPPT; + tov_itemstat_conversion[54] = TOV_ITEM_STAT_MELEECRITCHANCE; + tov_itemstat_conversion[55] = TOV_ITEM_STAT_CRITAVOIDANCE; + tov_itemstat_conversion[56] = TOV_ITEM_STAT_BENEFICIALCRITCHANCE; + tov_itemstat_conversion[57] = TOV_ITEM_STAT_CRITBONUS; + tov_itemstat_conversion[58] = 698; + tov_itemstat_conversion[59] = TOV_ITEM_STAT_POTENCY; + tov_itemstat_conversion[60] = 698; + tov_itemstat_conversion[61] = TOV_ITEM_STAT_UNCONSCIOUSHPMOD; + tov_itemstat_conversion[62] = TOV_ITEM_STAT_ABILITYREUSESPEED; + tov_itemstat_conversion[63] = TOV_ITEM_STAT_ABILITYRECOVERYSPEED; + tov_itemstat_conversion[64] = TOV_ITEM_STAT_ABILITYCASTINGSPEED; + tov_itemstat_conversion[65] = TOV_ITEM_STAT_SPELLREUSESPEED; + tov_itemstat_conversion[66] = TOV_ITEM_STAT_MELEEWEAPONRANGE; + tov_itemstat_conversion[67] = TOV_ITEM_STAT_RANGEDWEAPONRANGE; + tov_itemstat_conversion[68] = TOV_ITEM_STAT_FALLINGDAMAGEREDUCTION; + tov_itemstat_conversion[69] = TOV_ITEM_STAT_RIPOSTEDAMAGE; + tov_itemstat_conversion[70] = TOV_ITEM_STAT_MINIMUMDEFLECTIONCHANCE; + tov_itemstat_conversion[71] = TOV_ITEM_STAT_MOVEMENTWEAVE; + tov_itemstat_conversion[72] = TOV_ITEM_STAT_COMBATHPREGEN; + tov_itemstat_conversion[73] = TOV_ITEM_STAT_COMBATMANAREGEN; + tov_itemstat_conversion[74] = TOV_ITEM_STAT_CONTESTSPEEDBOOST; + tov_itemstat_conversion[75] = TOV_ITEM_STAT_TRACKINGAVOIDANCE; + tov_itemstat_conversion[76] = TOV_ITEM_STAT_STEALTHINVISSPEEDMOD; + tov_itemstat_conversion[77] = TOV_ITEM_STAT_LOOT_COIN; + tov_itemstat_conversion[78] = TOV_ITEM_STAT_ARMORMITIGATIONINCREASE; + tov_itemstat_conversion[79] = TOV_ITEM_STAT_AMMOCONSERVATION; + tov_itemstat_conversion[80] = TOV_ITEM_STAT_STRIKETHROUGH; + tov_itemstat_conversion[81] = TOV_ITEM_STAT_STATUSBONUS; + tov_itemstat_conversion[82] = TOV_ITEM_STAT_ACCURACY; + tov_itemstat_conversion[83] = TOV_ITEM_STAT_COUNTERSTRIKE; + tov_itemstat_conversion[84] = TOV_ITEM_STAT_SHIELDBASH; + tov_itemstat_conversion[85] = TOV_ITEM_STAT_WEAPONDAMAGEBONUS; + tov_itemstat_conversion[86] = 698; + tov_itemstat_conversion[87] = TOV_ITEM_STAT_WEAPONDAMAGEBONUSMELEEONLY; + tov_itemstat_conversion[88] = TOV_ITEM_STAT_ADDITIONALRIPOSTECHANCE; + tov_itemstat_conversion[89] = TOV_ITEM_STAT_PVPTOUGHNESS; + tov_itemstat_conversion[90] = TOV_ITEM_STAT_PVPLETHALITY; + tov_itemstat_conversion[91] = TOV_ITEM_STAT_STAMINABONUS; + tov_itemstat_conversion[92] = TOV_ITEM_STAT_WISDOMMITBONUS; + tov_itemstat_conversion[93] = TOV_ITEM_STAT_HEALRECEIVE; + tov_itemstat_conversion[94] = TOV_ITEM_STAT_HEALRECEIVEPERC; + tov_itemstat_conversion[95] = TOV_ITEM_STAT_PVPCRITICALMITIGATION; + tov_itemstat_conversion[96] = TOV_ITEM_STAT_BASEAVOIDANCEBONUS; + tov_itemstat_conversion[97] = TOV_ITEM_STAT_INCOMBATSAVAGERYREGEN; + tov_itemstat_conversion[98] = TOV_ITEM_STAT_OUTOFCOMBATSAVAGERYREGEN; + tov_itemstat_conversion[99] = TOV_ITEM_STAT_SAVAGERYREGEN; + tov_itemstat_conversion[100] = TOV_ITEM_STAT_SAVAGERYGAINMOD; + tov_itemstat_conversion[101] = TOV_ITEM_STAT_MAXSAVAGERYLEVEL; +} + +int32 World::LoadItemBlueStats() { + Query query; + MYSQL_ROW row; + int32 count = 0; + MYSQL_RES* result = query.RunQuery2(Q_SELECT, "SELECT version_range1,version_range2,emu_stat,name,stat from itemstats"); + + if (result && mysql_num_rows(result) > 0) { + while (result && (row = mysql_fetch_row(result))) { + count++; + + if (atoi(row[0]) >= 63119) //KA + ka_itemstat_conversion[atoi(row[2])] = atoi(row[4]); + else if (atoi(row[0]) >= 57101) // ToV + tov_itemstat_conversion[atoi(row[2])] = atoi(row[4]); + else if (atoi(row[0]) >= 1193) // CoE + coe_itemstat_conversion[atoi(row[2])] = atoi(row[4]); + else if (atoi(row[0]) >= 1096) // DoV + dov_itemstat_conversion[atoi(row[2])] = atoi(row[4]); + } + } + return count; +} + +sint16 World::GetItemStatTOVValue(sint16 subtype) { + return (tov_itemstat_conversion[subtype] - 600); +} +sint16 World::GetItemStatDOVValue(sint16 subtype) { + return (dov_itemstat_conversion[subtype] - 600); +} +sint16 World::GetItemStatCOEValue(sint16 subtype) { + return (coe_itemstat_conversion[subtype] - 600); +} +sint16 World::GetItemStatKAValue(sint16 subtype) { + return (ka_itemstat_conversion[subtype] - 600); +} + + +#ifdef WIN32 +ulong World::GetCurrentThreadID(){ + return GetCurrentThreadId(); +} + +int64 World::GetThreadUsageCPUTime(){ + HANDLE handle = GetCurrentThread(); + int64 lpCreationTime; + int64 lpExitTime; + int64 lpKernelTime; + int64 lpUserTime; + if(GetThreadTimes(handle, (FILETIME*)&lpCreationTime, (FILETIME*)&lpExitTime, (FILETIME*)&lpKernelTime, (FILETIME*)&lpUserTime)) + return lpKernelTime + lpUserTime; + return 0; +} +#else + +#endif diff --git a/EQ2/source/WorldServer/World.h b/EQ2/source/WorldServer/World.h new file mode 100644 index 000000000..ca91d2da7 --- /dev/null +++ b/EQ2/source/WorldServer/World.h @@ -0,0 +1,578 @@ +/* + EQ2Emulator: Everquest II Server Emulator + Copyright (C) 2007 EQ2EMulator Development Team (http://www.eq2emulator.net) + + This file is part of EQ2Emulator. + + EQ2Emulator is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + EQ2Emulator is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with EQ2Emulator. If not, see . +*/ +#ifndef EQ2_WORLD_H +#define EQ2_WORLD_H + +#include +#include +#include +#include +#include "SpawnLists.h" +#include "zoneserver.h" +#include "NPC.h" +#include "Widget.h" +#include "Object.h" +#include "GroundSpawn.h" +#include "Sign.h" +#include "Variables.h" +#include "MutexList.h" + +#include "PlayerGroups.h" + +using namespace std; +struct MerchantInfo{ + vector inventory_ids; + /*int32 faction_id; + sint32 faction_min; + sint32 faction_max; + float low_buy_multiplier; + float high_buy_multiplier; + float low_sell_multiplier; + float high_sell_multiplier;*/ +}; + +struct MerchantItemInfo{ + int32 item_id; + int16 quantity; + int32 price_item_id; + int32 price_item2_id; + int16 price_item_qty; + int16 price_item2_qty; + int32 price_status; + int64 price_coins; + int32 price_stationcash; +}; + +struct LootTable{ + string name; + int32 mincoin; + int32 maxcoin; + int16 maxlootitems; + float lootdrop_probability; + float coin_probability; +}; + +struct LootDrop{ + int32 item_id; + int16 item_charges; + bool equip_item; + float probability; +}; + +struct GroundSpawnEntry { + int16 min_skill_level; + int16 min_adventure_level; + int8 bonus_table; + float harvest1; + float harvest3; + float harvest5; + float harvest_imbue; + float harvest_rare; + float harvest10; + int32 harvest_coin; +}; + +struct GroundSpawnEntryItem { + int32 item_id; + int8 is_rare; + int32 grid_id; +}; + +struct TransportDestination{ + int32 unique_id; + int8 type; + string display_name; + string message; + int32 destination_zone_id; + float destination_x; + float destination_y; + float destination_z; + float destination_heading; + int32 cost; + int8 min_level; + int8 max_level; + int32 req_quest; + int16 req_quest_step; + int32 req_quest_complete; + + int32 map_x; + int32 map_y; + int32 faction_id; + int32 faction_value; +}; + +struct LocationTransportDestination{ + int32 unique_id; + string message; + int32 destination_zone_id; + float destination_x; + float destination_y; + float destination_z; + float destination_heading; + float trigger_x; + float trigger_y; + float trigger_z; + float trigger_radius; + int32 cost; + int32 faction_id; + int32 faction_value; +}; + +//ideally we wouldn't need to store this information as we could get it from the Client object, +//however since the client object disconnects from the server when zoning we can't count on it being available + +/*struct PlayerGroup; +struct GroupOptions{ + int8 loot_method; + int8 loot_items_rarity; + int8 auto_split; + int8 default_yell; + int8 group_autolock; + int8 solo_autolock; +}; +struct GroupMemberInfo{ + string name; + string zone; + sint32 hp_current; + sint32 hp_max; + sint32 power_current; + sint32 power_max; + int16 level_current; + int16 level_max; + int8 race_id; + int8 class_id; + Client* client; + PlayerGroup* group; +}; + +struct PlayerGroup{ + deque members; + GroupOptions options; +};*/ + +struct LottoPlayer { + int32 end_time; + int8 num_matches; + bool set; +}; + +struct HouseZone { + int32 id; + string name; + int64 cost_coin; + int32 cost_status; + int64 upkeep_coin; + int32 upkeep_status; + int8 vault_slots; + int8 alignment; + int8 guild_level; + int32 zone_id; + int32 exit_zone_id; + float exit_x; + float exit_y; + float exit_z; + float exit_heading; +}; + +struct PlayerHouse { + int32 house_id; + int64 unique_id; + int32 instance_id; + int32 upkeep_due; + int64 escrow_coins; + int32 escrow_status; + string player_name; +}; + +// Constants for STATs counters + +// Server Utilization +#define STAT_SERVER_OS_TYPE 1 // what OS this server is running on +#define STAT_SERVER_CPU_TYPE 2 // cpu type/speed (ie., Intel P4 3.0GHz) +#define STAT_SERVER_CPU_CURRENT 3 // current CPU usage by EQ2World.exe process +#define STAT_SERVER_CPU_PEAK 4 // highest CPU usage by EQ2World.exe this session +#define STAT_SERVER_PHYSICAL_RAM_TOTAL 5 // total RAM in server +#define STAT_SERVER_PHYSICAL_RAM_CURRENT 6 // current RAM usage by EQ2World.exe +#define STAT_SERVER_PHYSICAL_RAM_PEAK 7 // highest RAM usage by EQ2World.exe this session +#define STAT_SERVER_VIRTUAL_RAM_TOTAL 8 // total vRAM in server +#define STAT_SERVER_VIRTUAL_RAM_CURRENT 9 // current vRAM usage by EQ2World.exe +#define STAT_SERVER_VIRTUAL_RAM_PEAK 10 // highest vRAM usage by EQ2World.exe this session +#define STAT_SERVER_DISK_USAGE 11 // size of /eq2emulator folder and contents +#define STAT_SERVER_THREAD_COUNT 12 // thread count of EQ2World.exe process +#define STAT_SERVER_AVG_LATENCY 13 // network latency between world and loginserver + +// Server Stats +#define STAT_SERVER_CREATED 100 // unix_timestamp of date server first came online +#define STAT_SERVER_START_TIME 101 // unix_timestamp of date/time server booted up +#define STAT_SERVER_ACCEPTED_CONNECTION 102 // successful connections since server startup +#define STAT_SERVER_MOST_CONNECTIONS 103 // most players online in history of server +#define STAT_SERVER_NUM_ACCOUNTS 104 // total number of unique accounts +#define STAT_SERVER_NUM_CHARACTERS 105 // total number of player characters +#define STAT_SERVER_AVG_CHAR_LEVEL 106 // average level of player characters +#define STAT_SERVER_NUM_ACTIVE_ZONES 107 // number of currently running/loaded zones +#define STAT_SERVER_NUM_ACTIVE_INSTANCES 108 // number of active zones that are "instances" + +// Player PvE counters +#define STAT_PLAYER_TOTAL_NPC_KILLS 1000 // total NPC kills by player +#define STAT_PLAYER_TOTAL_DEATHS 1001 // total non-PvP deaths of player +#define STAT_PLAYER_KVD_RATIO 1002 // kill-versus-death ratio of player +#define STAT_PLAYER_HIGHEST_MELEE_HIT 1003 // players highest melee hit to date +#define STAT_PLAYER_HIGHEST_MAGIC_HIT 1004 // players highest magic hit to date +#define STAT_PLAYER_HIGHEST_HO_HIT 1005 // players highest heroic opportunity hit +#define STAT_PLAYER_TOTAL_STATUS 1006 // player total status +#define STAT_PLAYER_TOTAL_WEALTH 1007 // player total wealth +#define STAT_PLAYER_QUESTS_COMPLETED 1008 // total quests completed +#define STAT_PLAYER_RECIPES_KNOWN 1009 // total recipes player knows +#define STAT_PLAYER_TOTAL_CRAFTED_ITEMS 1010 // total items crafted by player +#define STAT_PLAYER_ITEMS_DISCOVERED 1011 // total items discovered by player +#define STAT_PLAYER_RARES_HARVESTED 1012 // total rare harvests by player +#define STAT_PLAYER_ITEMS_HARVESTED 1013 // total rare harvests by player +#define STAT_PLAYER_MASTER_ABILITIES 1014 // total master abilities player has +#define STAT_PLAYER_HIGHEST_FALLING_HIT 1015 // player's highest damage amount taken from falling + +// Player PvP counters +#define STAT_PLAYER_TOTAL_PVP_KILLS 1100 // total PVP kills by player +#define STAT_PLAYER_PVP_KILL_STREAK 1101 // longest PVP kill streak of player +#define STAT_PLAYER_TOTAL_PVP_DEATHS 1102 // total PVP deaths of player +#define STAT_PLAYER_PVP_DEATH_STREAK 1103 // longest PVP death streak of player +#define STAT_PLAYER_PVP_KVD_RATIO 1104 // PVP kill-versus-death ratio of player +#define STAT_PLAYER_TOTAL_ARENA_KILLS 1105 // total Arena kills of player + +// MOST stats for players +#define STAT_PLAYER_MOST_NPC_KILLS 1200 // IPvP: Player with most NPC kills +#define STAT_PLAYER_MOST_NPC_DEATHS 1201 // IPvP: Player with most non-PVP deaths +#define STAT_PLAYER_MOST_PVP_KILLS 1202 // IPvP: Player with most PvP kills +#define STAT_PLAYER_MOST_PVP_DEATHS 1203 // IPvP: Player with most PvP deaths +#define STAT_PLAYER_MOST_ARENA_KILLS 1204 // IPvP: Player with most Arena kills +#define STAT_PLAYER_MOST_STATUS 1205 // IPvP: Player with most Status +#define STAT_PLAYER_MOST_WEALTH 1206 // IPvP: Player with most Wealth + +// HIGHEST stats for players +#define STAT_PLAYER_HIGHEST_NPC_KVD_RATIO 1300 // IPvP: Player with highest NPC kill-versus-death ratio +#define STAT_PLAYER_HIGHEST_PVP_KILL_STREAK 1301 // IPvP: Player with longest PvP kill streak +#define STAT_PLAYER_HIGHEST_PVP_DEATH_STREAK 1302 // IPvP: Player with longest PvP death streak +#define STAT_PLAYER_HIGHEST_PVP_KVD_RATIO 1303 // IPvP: Player with highest PvP kill-versus-death ratio +#define STAT_PLAYER_HIGHEST_HP 1304 // IPvP: Player with highest HP on server +#define STAT_PLAYER_HIGHEST_POWER 1305 // IPvP: Player with highest Power on server +#define STAT_PLAYER_HIGHEST_RESISTS 1306 // IPvP: Player with highest Resists on server + + +struct Statistic { + int32 stat_id; + sint32 stat_value; + int32 stat_date; + bool save_needed; +}; + + +// Player EVENT defines +// Some EVENTs are single occurrance (S), while others are cummulative throughout the life of the player (C) +#define PLAYER_EVENT_NEW_ADV_LEVEL 2000 // (C) player achieves a new adventure level +#define PLAYER_EVENT_NEW_TS_LEVEL 2001 // (C) player achieves a new tradeskill level +#define PLAYER_EVENT_NEW_AA 2002 // (C) player earns AA pt +#define PLAYER_EVENT_NEW_ACHIEVEMENT 2003 // (C) player new achievement +#define PLAYER_EVENT_LAST_DEATH 2004 // (S) player was last killed +#define PLAYER_EVENT_LAST_KILL 2005 // (S) player last killed spawn_id +#define PLAYER_EVENT_DISCOVER_POI 2006 // (C) player discovers location_id + +// These maybe should be World stat events, since it is about 1 player discovering a new item? +#define PLAYER_EVENT_DISCOVER_ITEM 2007 // (C) player discovers item_id +#define PLAYER_EVENT_DISCOVER_RECIPE 2008 // (C) player discovers recipe_id + + +struct PlayerHistory { + int32 history_zone; + int32 history_id; + sint32 history_value; + int32 history_date; + bool save_needed; +}; + +struct GlobalLoot { + int8 minLevel; + int8 maxLevel; + int32 table_id; +}; + +#define TRANSPORT_TYPE_LOCATION 0 +#define TRANSPORT_TYPE_ZONE 1 +#define TRANSPORT_TYPE_GENERIC 2 + +class ZoneList { + public: + ZoneList(); + ~ZoneList(); + + void Add(ZoneServer* zone); + void Remove(ZoneServer* zone); + ZoneServer* Get(int32 id, bool loadZone = true); + ZoneServer* Get(const char* zone_name, bool loadZone=true); + ZoneServer* GetByInstanceID(int32 id, int32 zone_id=0); + + /// Get the instance for the given zone id with the lowest population + /// The id of the zone to look up + /// ZoneServer* of an active zone with the given id + ZoneServer* GetByLowestPopulation(int32 zone_id); + + void AddClientToMap(string name, Client* client){ + name = ToLower(name); + MClientList.lock(); + client_map[name] = client; + MClientList.unlock(); + } + void CheckFriendList(Client* client); + void CheckFriendZoned(Client* client); + + // move to Chat/Chat.h? + bool HandleGlobalChatMessage(Client* from, char* to, int16 channel, const char* message, const char* channel_name = 0); + void HandleGlobalBroadcast(const char* message); + void HandleGlobalAnnouncement(const char* message); + // + + int32 Count(); + Client* GetClientByCharName(string name){ + name = ToLower(name); + Client* ret = 0; + MClientList.lock(); + if(client_map.count(name) > 0) + ret = client_map[name]; + MClientList.unlock(); + return ret; + } + Client* GetClientByCharID(int32 id) { + Client* ret = 0; + MClientList.lock(); + map::iterator itr; + for (itr = client_map.begin(); itr != client_map.end(); itr++) { + if (itr->second->GetCharacterID() == id) { + ret = itr->second; + break; + } + } + MClientList.unlock(); + return ret; + } + Client* GetClientByEQStream(EQStream* eqs) { + Client* ret = 0; + if (eqs) { + MClientList.lock(); + map::iterator itr; + for (itr = client_map.begin(); itr != client_map.end(); itr++) { + if (itr->second->getConnection() == eqs) { + ret = itr->second; + break; + } + } + MClientList.unlock(); + } + return ret; + } + void UpdateVitality(float amount); + void RemoveClientFromMap(string name, Client* client){ + name = ToLower(name); + MClientList.lock(); + if(client_map.count(name) > 0 && client_map[name] == client) + client_map.erase(name); + MClientList.unlock(); + } + bool ClientConnected(int32 account_id); + void ReloadClientQuests(); + bool DepopFinished(); + void Depop(); + void Repop(); + void DeleteSpellProcess(); + void LoadSpellProcess(); + void ProcessWhoQuery(const char* query, Client* client); + void ProcessWhoQuery(vector* queries, ZoneServer* zone, vector* players, bool isGM); + void SendZoneList(Client* client); + void WritePlayerStatistics(); + void ShutDownZones(); + void ReloadMail(); + void ReloadSpawns(); + +private: + Mutex MClientList; + Mutex MZoneList; + map removed_zoneservers; + map client_map; + list zlist; +}; +class World { +public: + World(); + ~World(); + int8 GetClassID(const char* name); + void Process(); + void init(); + PacketStruct* GetWorldTime(int16 version); + void WorldTimeTick(); + float GetXPRate(); + float GetTSXPRate(); + void LoadVitalityInformation(); + void UpdateVitality(); + WorldTime* GetWorldTimeStruct(){ + return &world_time; + } + ulong GetCurrentThreadID(); + int64 GetThreadUsageCPUTime(); + + // These 2 functions are never used. What was their purpose? Should they be removed? + void AddNPCAppearance(int32 id, AppearanceData* appearance){ npc_appearance_list[id] = appearance; } + AppearanceData* GetNPCAppearance(int32 id) { return npc_appearance_list[id]; } + + void ReloadGuilds(); + bool ReportBug(string data, char* player_name, int32 account_id, const char* spawn_name, int32 spawn_id, int32 zone_id); + void AddSpawnScript(int32 id, const char* name); + void AddSpawnEntryScript(int32 id, const char* name); + void AddSpawnLocationScript(int32 id, const char* name); + void AddZoneScript(int32 id, const char* name); + const char* GetSpawnScript(int32 id); + const char* GetSpawnEntryScript(int32 id); + const char* GetSpawnLocationScript(int32 id); + const char* GetZoneScript(int32 id); + void ResetSpawnScripts(); + void ResetZoneScripts(); + int16 GetMerchantItemQuantity(int32 merchant_id, int32 item_id); + void DecreaseMerchantQuantity(int32 merchant_id, int32 item_id, int16 amount); + int32 GetInventoryID(int32 merchant_id, int32 item_id); + void AddMerchantItem(int32 inventory_id, MerchantItemInfo ItemInfo); + void RemoveMerchantItem(int32 inventory_id, int32 item_id); + vector* GetMerchantList(int32 merchant_id); + vector* GetMerchantItemList(int32 merchant_id, int8 merchant_type, Player* player); + MerchantInfo* GetMerchantInfo(int32 merchant_id); + map* GetMerchantInfo(); + void AddMerchantInfo(int32 merchant_id, MerchantInfo* multiplier); + void DeleteMerchantsInfo(); + void DeleteMerchantItems(); + void DeleteSpawns(); + vector* GetClientVariables(); + void WritePlayerStatistics(); + void WriteServerStatistics(); + void AddServerStatistic(int32 stat_id, sint32 stat_value, int32 stat_date); + void UpdateServerStatistic(int32 stat_id, sint32 stat_value, bool overwrite = false); + sint32 GetServerStatisticValue(int32 stat_id); + void RemoveServerStatistics(); + + //PlayerGroup* AddGroup(Client* leader); + //void AddGroupMember(PlayerGroup* group, Client* member); + //void RemoveGroupMember(Client* member, bool immediate = false); + //void DisbandGroup(PlayerGroup* group, bool lock = true); + void SendGroupQuests(PlayerGroup* group, Client* client); + //void UpdateGroupBuffs(); + //void RemoveGroupBuffs(PlayerGroup *group, Client *client); + //void SetPendingGroup(char* name, char* leader); + //void GroupMessage(PlayerGroup* group, const char* message, ...); + //void SimpleGroupMessage(PlayerGroup* group, const char* message); + //void GroupChatMessage(PlayerGroup* group, Spawn* from, const char* message); + //const char* GetPendingGroup(string name); + //void GroupReadLock(); + //void GroupReadUnLock(); + //void CheckRemoveGroupedPlayer(); + //void SendGroupUpdate(PlayerGroup* group, Client* exclude = 0); + void RejoinGroup(Client* client); + //bool MakeLeader(Client* leader, string new_leader); + + void AddBonuses(ItemStatsValues* values, int16 type, sint32 value, Entity* entity); + void CreateGuild(const char* guild_name, Client* leader = 0, int32 group_id = 0); + void SaveGuilds(); + void PickRandomLottoDigits(int32* digits); + void AddLottoPlayer(int32 character_id, int32 end_time); + void RemoveLottoPlayer(int32 character_id); + void SetLottoPlayerNumMatches(int32 character_id, int8 num_matches); + void CheckLottoPlayers(); + void PopulateTOVStatMap(); + int32 LoadItemBlueStats(); + sint16 GetItemStatTOVValue(sint16 subtype); + sint16 GetItemStatDOVValue(sint16 subtype); + sint16 GetItemStatCOEValue(sint16 subtype); + sint16 GetItemStatKAValue(sint16 subtype); + sint16 GetItemStatTESTValue(sint16 subtype); + + vector biography; + + volatile bool items_loaded; + volatile bool spells_loaded; + volatile bool achievments_loaded; + + void AddHouseZone(int32 id, string name, int64 cost_coins, int32 cost_status, int64 upkeep_coins, int32 upkeep_status, int8 vault_slots, int8 alignment, int8 guild_level, int32 zone_id, int32 exit_zone_id, float exit_x, float exit_y, float exit_z, float exit_heading); + HouseZone* GetHouseZone(int32 id); + + void AddPlayerHouse(int32 char_id, int32 house_id, int64 unique_id, int32 instance_id, int32 upkeep_due, int64 escrow_coins, int32 escrow_status, string player_name); + PlayerHouse* GetPlayerHouseByHouseID(int32 char_id, int32 house_id); + PlayerHouse* GetPlayerHouseByUniqueID(int64 unique_id); + PlayerHouse* GetPlayerHouseByInstanceID(int32 instance_id); + vector GetAllPlayerHouses(int32 char_id); + vector GetAllPlayerHousesByHouseID(int32 house_id); + + PlayerGroupManager* GetGroupManager() { return &m_playerGroupManager; } + +private: + //void RemovePlayerFromGroup(PlayerGroup* group, GroupMemberInfo* info, bool erase = true); + //void DeleteGroupMember(GroupMemberInfo* info); + + Mutex MMerchantList; + Mutex MSpawnScripts; + Mutex MZoneScripts; + //Mutex MGroups; + + map merchant_info; + map > merchant_inventory_items; + int32 vitality_frequency; + float vitality_amount; + float xp_rate; + float ts_xp_rate; // JA + WorldTime world_time; + + map npc_appearance_list; + + map spawn_scripts; + map spawnentry_scripts; + map spawnlocation_scripts; + map zone_scripts; + //vector player_groups; + //map group_removal_pending; + //map pending_groups; + map server_statistics; + MutexMap lotto_players; + int32 last_checked_time; + Timer save_time_timer; + Timer time_tick_timer; + Timer vitality_timer; + Timer player_stats_timer; + Timer server_stats_timer; + //Timer remove_grouped_player; + Timer guilds_timer; + Timer lotto_players_timer; + Timer group_buff_updates; + + map m_houseZones; + // Map > + map > m_playerHouses; + Mutex MHouseZones; + Mutex MPlayerHouses; + + map tov_itemstat_conversion; + map dov_itemstat_conversion; + map coe_itemstat_conversion; + map ka_itemstat_conversion; + + PlayerGroupManager m_playerGroupManager; +}; +#endif diff --git a/EQ2/source/WorldServer/WorldDatabase.cpp b/EQ2/source/WorldServer/WorldDatabase.cpp new file mode 100644 index 000000000..2452f8ea2 --- /dev/null +++ b/EQ2/source/WorldServer/WorldDatabase.cpp @@ -0,0 +1,6474 @@ +/* +EQ2Emulator: Everquest II Server Emulator +Copyright (C) 2007 EQ2EMulator Development Team (http://www.eq2emulator.net) + +This file is part of EQ2Emulator. + +EQ2Emulator is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +EQ2Emulator is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with EQ2Emulator. If not, see . +*/ + +#include +#include +#include +#include +#include +#include +#include "WorldDatabase.h" +#include "../common/debug.h" +#include "../common/packet_dump.h" +#include "../common/GlobalHeaders.h" +#include "Items/Items.h" +#include "Factions.h" +#include "World.h" +#include "Variables.h" +#include "VisualStates.h" +#include "Appearances.h" +#include "Skills.h" +#include "Quests.h" +#include "LuaInterface.h" +#include "classes.h" +#include "../common/Log.h" +#include "Rules/Rules.h" +#include "Titles.h" +#include "Languages.h" +#include "Traits/Traits.h" + +extern Classes classes; +extern Commands commands; +extern MasterTitlesList master_titles_list; +extern MasterItemList master_item_list; +extern MasterSpellList master_spell_list; +extern MasterTraitList master_trait_list; +extern MasterFactionList master_faction_list; +extern World world; +extern Variables variables; +extern VisualStates visual_states; +extern Appearances master_appearance_list; +extern MasterSkillList master_skill_list; +extern MasterQuestList master_quest_list; +extern LuaInterface* lua_interface; +extern ZoneList zone_list; +extern GuildList guild_list; +extern MasterCollectionList master_collection_list; +extern RuleManager rule_manager; +extern MasterLanguagesList master_languages_list; + +WorldDatabase::WorldDatabase(){ +} + +WorldDatabase::~WorldDatabase(){ +} + +bool WorldDatabase::ConnectNewDatabase() { + /* + TESTS + + database_new.Connect(); + DatabaseResult result; + database_new.Select(&result, "select name from characters where id=1"); + if (result.Next()) { + printf("'%s'\n", result.GetStringStr("name")); + printf("'%s'\n", result.GetStringStr("nameBAD")); + printf("'%s'\n", result.GetString(3)); + } + return true; + */ + + return database_new.Connect(); +} + + + +void WorldDatabase::DeleteBuyBack(int32 char_id, int32 item_id, int16 quantity, int32 price) { + LogWrite(MERCHANT__DEBUG, 0, "Merchant", "Deleting Buyback - Player: %u, Item ID: %u, Qty: %i, Price: %u", char_id, item_id, quantity, price); + + Query query; + query.RunQuery2(Q_DELETE, "DELETE FROM character_buyback WHERE char_id = %u AND item_id = %u AND quantity = %i AND price = %u", char_id, item_id, quantity, price); +} + +void WorldDatabase::LoadBuyBacks(Client* client) { + LogWrite(MERCHANT__DEBUG, 0, "Merchant", "Loading Buyback - Player: %u", client->GetCharacterID()); + + Query query; + MYSQL_ROW row; + MYSQL_RES* result = query.RunQuery2(Q_SELECT, "SELECT id, item_id, quantity, price FROM character_buyback where char_id = %u ORDER BY id desc limit 10", client->GetCharacterID()); + int8 count = 0; + int32 last_id = 0; + if(result) + { + while(result && (row = mysql_fetch_row(result))) + { + LogWrite(MERCHANT__DEBUG, 5, "Merchant", "AddBuyBack: item: %u, qty: %i, price: %u", atoul(row[1]), atoi(row[2]), atoul(row[3])); + last_id = atoul(row[0]); + client->AddBuyBack(last_id, atoul(row[1]), atoi(row[2]), atoul(row[3]), false); + count++; + } + if(count >= 10) + { + LogWrite(MERCHANT__DEBUG, 0, "Merchant", "Deleting excess Buyback from Player: %u", client->GetCharacterID()); + Query query2; + query2.RunQuery2(Q_DELETE, "DELETE FROM character_buyback WHERE char_id = %u AND id < %u", client->GetCharacterID(), last_id); + } + } +} + +void WorldDatabase::SaveBuyBacks(Client* client) +{ + LogWrite(MERCHANT__DEBUG, 3, "Merchant", "Saving Buybacks - Player: %u", client->GetCharacterID()); + + deque* buybacks = client->GetBuyBacks(); + + if(buybacks && buybacks->size() > 0) + { + BuyBackItem* item = 0; + deque::iterator itr; + + for(itr = buybacks->begin(); itr != buybacks->end(); itr++) + { + item = *itr; + + if(item && item->save_needed) + { + LogWrite(MERCHANT__DEBUG, 5, "Merchant", "SaveBuyBack: char: %u, item: %u, qty: %i, price: %u", client->GetCharacterID(), item->item_id, item->quantity, item->price); + SaveBuyBack(client->GetCharacterID(), item->item_id, item->quantity, item->price); + item->save_needed = false; + } + } + } +} + +void WorldDatabase::SaveBuyBack(int32 char_id, int32 item_id, int16 quantity, int32 price) +{ + LogWrite(MERCHANT__DEBUG, 3, "Merchant", "Saving Buyback - Player: %u, Item ID: %u, Qty: %i, Price: %u", char_id, item_id, quantity, price); + + Query query; + string insert = string("INSERT INTO character_buyback (char_id, item_id, quantity, price) VALUES (%u, %u, %i, %u) "); + query.RunQuery2(Q_INSERT, insert.c_str(), char_id, item_id, quantity, price); +} + +int32 WorldDatabase::LoadCharacterSpells(int32 char_id, Player* player) +{ + LogWrite(SPELL__DEBUG, 0, "Spells", "Loading Character Spells for player %s...", player->GetName()); + + Query query; + MYSQL_ROW row; + MYSQL_RES* result = query.RunQuery2(Q_SELECT, "SELECT spell_id, tier, knowledge_slot, spell_book_type, linked_timer_id FROM character_spells, spells where character_spells.spell_id = spells.id and character_spells.char_id = %u ORDER BY spell_id, tier desc", char_id); + int32 old_spell_id = 0; + int32 new_spell_id = 0; + int32 count = 0; + + if(result && mysql_num_rows(result) >0) + { + while(result && (row = mysql_fetch_row(result))) + { + count++; + new_spell_id = atoul(row[0]); + + if(new_spell_id == old_spell_id) + continue; + + LogWrite(SPELL__DEBUG, 5, "Spells", "\tLoading SpellID: %u, tier: %i, slot: %i, type: %u linked_timer_id: %u", new_spell_id, atoi(row[1]), atoi(row[2]), atoul(row[3]), atoul(row[4])); + + player->AddSpellBookEntry(new_spell_id, atoi(row[1]), atoi(row[2]), atoul(row[3]), atoul(row[4])); + old_spell_id = new_spell_id; + } + } + + return count; +} + +void WorldDatabase::SavePlayerSpells(Client* client) +{ + if(!client) + return; + + LogWrite(SPELL__DEBUG, 3, "Spells", "Saving Spell(s) for Player: '%s'", client->GetPlayer()->GetName()); + vector* spells = client->GetPlayer()->GetSpellsSaveNeeded(); + + if(spells) + { + vector::iterator itr; + SpellBookEntry* spell = 0; + + for(itr = spells->begin(); itr != spells->end(); itr++) + { + spell = *itr; + Query query; + LogWrite(SPELL__DEBUG, 5, "Spells", "\tSaving SpellID: %u, tier: %i, slot: %i", spell->spell_id, spell->tier, spell->slot); + query.RunQuery2(Q_INSERT, "INSERT INTO character_spells (char_id, spell_id, tier) SELECT %u, %u, %i ON DUPLICATE KEY UPDATE tier = %i", + client->GetPlayer()->GetCharacterID(), spell->spell_id, spell->tier, spell->tier); + spell->save_needed = false; + } + safe_delete(spells); + } +} + +int32 WorldDatabase::LoadCharacterSkills(int32 char_id, Player* player) +{ + Query query; + MYSQL_ROW row; + int32 count = 0; + MYSQL_RES* result = query.RunQuery2(Q_SELECT, "SELECT skill_id, current_val, max_val FROM character_skills, skills where character_skills.skill_id = skills.id and character_skills.char_id = %u", char_id); + + if(result && mysql_num_rows(result) >0) + { + while(result && (row = mysql_fetch_row(result))) + { + count++; + LogWrite(SKILL__DEBUG, 5, "Skills", "Loading SkillID: %u, cur_val: %i, max_val: %l", strtoul(row[0], NULL, 0), atoi(row[1]), atoi(row[2])); + player->AddSkill(strtoul(row[0], NULL, 0), atoi(row[1]), atoi(row[2])); + } + } + return count; +} + +void WorldDatabase::DeleteCharacterSkill(int32 char_id, Skill* skill) +{ + if (char_id > 0 && skill) + { + LogWrite(SKILL__DEBUG, 0, "Skills", "Deleting Skill '%s' (%u) from char_id: %u", skill->name.data.c_str(), skill->skill_id, char_id); + Query query; + query.RunQuery2(Q_DELETE, "DELETE FROM `character_skills` WHERE `char_id`=%u AND `skill_id`=%u", char_id, skill->skill_id); + } +} + +int32 WorldDatabase::LoadSkills() +{ + int32 total = 0; + Query query; + MYSQL_ROW row; + MYSQL_RES* result = query.RunQuery2(Q_SELECT, "SELECT id, short_name, name, description, skill_type, display FROM skills"); + + if(result) + { + if (mysql_num_rows(result) >0) + { + Skill* skill = 0; + + while(result && (row = mysql_fetch_row(result))) + { + skill = new Skill(); + skill->skill_id = strtoul(row[0], NULL, 0); + skill->short_name.data = string(row[1]); + skill->short_name.size = skill->short_name.data.length(); + skill->name.data = string(row[2]); + skill->name.size = skill->name.data.length(); + skill->description.data = string(row[3]); + skill->description.size = skill->description.data.length(); + skill->skill_type = strtoul(row[4], NULL, 0); + skill->display = atoi(row[5]); + master_skill_list.AddSkill(skill); + total++; + LogWrite(SKILL__DEBUG, 5, "Skill", "---Loading Skill: %s (%u)", skill->name.data.c_str(), skill->skill_id); + LogWrite(SKILL__DEBUG, 7, "Skill", "---short_name: %s, type: %i, display: %i", skill->short_name.data.c_str(), skill->skill_type, skill->display); + } + } + } + LogWrite(SKILL__DEBUG, 3, "Skill", "--Loaded %u Skill(s)", total); + return total; +} + +map >* WorldDatabase::LoadCharacterMacros(int32 char_id) +{ + Query query; + MYSQL_ROW row; + int32 total = 0; + MYSQL_RES* result = query.RunQuery2(Q_SELECT, "SELECT macro_number, macro_name, macro_icon, macro_text FROM character_macros where char_id = %u ORDER BY macro_number, id", char_id); + + if(result && mysql_num_rows(result) >0) + { + map >* macros = new map >; + + while(result && (row = mysql_fetch_row(result))) + { + MacroData* data = new MacroData; + data->name = row[1]; + data->icon = atoi(row[2]); + data->text = row[3]; + (*macros)[atoi(row[0])].push_back(data); + total++; + LogWrite(PLAYER__DEBUG, 5, "Player", "\tLoading macro: %i. %s for player: %u", atoi(row[0]), row[1], char_id); + } + LogWrite(PLAYER__DEBUG, 0, "Player", "\tLoaded %u macro%s", total, total == 1 ? "" : "s"); + return macros; + } + return 0; +} + +void WorldDatabase::UpdateCharacterMacro(int32 char_id, int8 number, const char* name, int16 icon, vector* updates) +{ + LogWrite(PLAYER__DEBUG, 0, "Player", "Update player id %u macro: %i", char_id, number); + + Query query; + Query query2; + query.RunQuery2(Q_DELETE, "delete FROM character_macros where char_id = %u and macro_number = %i", char_id, number); + + if(name && updates && updates->size() > 0) + { + for(int8 i=0;isize();i++) + { + query2.RunQuery2(Q_INSERT, "insert into character_macros (char_id, macro_number, macro_name, macro_icon, macro_text) values(%u, %i, '%s', %i, '%s')", char_id, number, getSafeEscapeString(name).c_str(), icon, getSafeEscapeString(updates->at(i).c_str()).c_str()); + LogWrite(PLAYER__DEBUG, 5, "Player", "\tAdding macro: %s, %s (Player: %u)", name, updates->at(i).c_str(), char_id); + } + } +} + +//we use our timestamp just in case db is on another server, otherwise times might be off +void WorldDatabase::UpdateVitality(int32 timestamp, float amount){ + Query query; + + LogWrite(PLAYER__DEBUG, 3, "Player", "Reset Vitality > 100: %f", amount); + query.RunQuery2(Q_UPDATE, "update character_details set xp_vitality=100 where (xp_vitality + %f) > 100", amount); + + LogWrite(PLAYER__DEBUG, 3, "Player", "Update Vitality <= 100: %f", amount); + query.RunQuery2(Q_UPDATE, "update character_details set xp_vitality=(xp_vitality+%f) where (xp_vitality + %f) <= 100", amount, amount); + + LogWrite(PLAYER__DEBUG, 3, "Player", "Update Vitality Timer: %u", timestamp); + query.RunQuery2(Q_UPDATE, "update variables set variable_value=%u where variable_name='vitalitytimer'", timestamp); +} + +void WorldDatabase::SaveVariable(const char* name, const char* value, const char* comment){ + + LogWrite(WORLD__DEBUG, 0, "Variables", "Saving Variable: %s = %s", name, value); + Query query; + if(comment){ + query.RunQuery2(Q_REPLACE, "replace into variables (variable_name, variable_value, comment) values('%s', '%s', '%s')", + getSafeEscapeString(name).c_str(), getSafeEscapeString(value).c_str(), getSafeEscapeString(comment).c_str()); + } + else{ + query.RunQuery2(Q_REPLACE, "replace into variables (variable_name, variable_value) values('%s', '%s')", + getSafeEscapeString(name).c_str(), getSafeEscapeString(value).c_str()); + } +} + +void WorldDatabase::LoadGlobalVariables(){ + variables.ClearVariables ( ); + int32 total = 0; + Query query; + MYSQL_ROW row; + MYSQL_RES* result = query.RunQuery2(Q_SELECT, "SELECT variable_name, variable_value, comment FROM variables"); + + while(result && (row = mysql_fetch_row(result))) + { + Variable* newVar = new Variable(row[0], row[1], row[2]); + variables.AddVariable(newVar); + total++; + LogWrite(WORLD__DEBUG, 5, "World", "---Loading variable: '%s' = '%s'", row[0], row[1]); + } + LogWrite(WORLD__DEBUG, 3, "World", "--Loaded %u variables", total); +} + + +void WorldDatabase::LoadAppearanceMasterList() +{ + DatabaseResult result; + int32 total = 0; + int32 appearance_id; + int16 appearance_version; + + master_appearance_list.ClearAppearances(); + + database_new.Select(&result, "SELECT appearance_id, `name`, min_client_version FROM appearances ORDER BY appearance_id"); + + while( result.Next() ) + { + appearance_id = result.GetInt32Str("appearance_id"); + const char *appearance_name = result.GetStringStr("name"); + appearance_version = result.GetInt16Str("min_client_version"); + Appearance* a = new Appearance(appearance_id, appearance_name, appearance_version); + + master_appearance_list.InsertAppearance(a); + + total++; + LogWrite(WORLD__DEBUG, 5, "World", "---Loading appearances: '%s' (%i)", appearance_name, appearance_id); + } + LogWrite(WORLD__DEBUG, 3, "World", "--Loaded %u appearances", total); +} + + +void WorldDatabase::LoadVisualStates() +{ + visual_states.Reset(); + int32 total = 0; + Query query; + Query query2; + MYSQL_ROW row; + + MYSQL_RES* result = query.RunQuery2(Q_SELECT, "SELECT visual_state_id, name FROM visual_states"); + while(result && (row = mysql_fetch_row(result))) + { + VisualState* vs = new VisualState(atoi(row[0]), row[1]); + visual_states.InsertVisualState(vs); + total++; + LogWrite(WORLD__DEBUG, 5, "World", "---Loading visual state: '%s' (%i)", row[1], atoi(row[0])); + } + LogWrite(WORLD__DEBUG, 3, "World", "--Loaded %u visual states", total); + + total = 0; + result = query2.RunQuery2(Q_SELECT, "SELECT name, visual_state_id, message, targeted_message FROM emotes"); + while(result && (row = mysql_fetch_row(result))) + { + Emote* emote = new Emote(row[0], atoi(row[1]), row[2], row[3]); + visual_states.InsertEmote(emote); + total++; + LogWrite(WORLD__DEBUG, 5, "World", "---Loading emote state: '%s' (%i)", row[1], atoi(row[0])); + } + LogWrite(WORLD__DEBUG, 3, "World", "--Loaded %u emote state(s)", total); +} + +void WorldDatabase::LoadSubCommandList() +{ + int32 total = 0; + Query query; + MYSQL_ROW row; + MYSQL_RES* result = query.RunQuery2(Q_SELECT, "SELECT command, subcommand, handler, required_status FROM commands where length(subcommand) > 0 ORDER BY handler asc"); + while(result && (row = mysql_fetch_row(result))) + { + commands.GetRemoteCommands()->CheckAddSubCommand(string(row[0]), EQ2_RemoteCommandString(row[1], (int32)strtoul(row[2], NULL, 0), atoi(row[3]))); + total++; + LogWrite(COMMAND__DEBUG, 5, "Command", "---Loading Command: '%s', sub '%s', handler, %u status %i", row[0], row[1], atoul(row[2]), atoi(row[3])); + } + LogWrite(COMMAND__DEBUG, 3, "Command", "--Loaded %i Subcommand(s)", total); +} + +void WorldDatabase::LoadCommandList() +{ + Query query; + MYSQL_ROW row; + MYSQL_RES* result = query.RunQuery2(Q_SELECT, "SELECT command, handler, required_status FROM commands where length(subcommand) = 0 ORDER BY handler asc"); + int16 index = 0; + + while(result && (row = mysql_fetch_row(result))) + { + int32 handler = strtoul(row[1], NULL, 0); + while(handler>index && handler != 999) + { + LogWrite(COMMAND__DEBUG, 5, "Command", "---Loading Remote Commands: handler %u, index %u", handler, index); + commands.GetRemoteCommands()->addZero(); + index++; + } + LogWrite(COMMAND__DEBUG, 5, "Command", "---Loading Commands: handler %u, index %u", handler, index); + commands.GetRemoteCommands()->addCommand(EQ2_RemoteCommandString(row[0], handler, atoi(row[2]))); + index++; + } + LogWrite(COMMAND__DEBUG, 3, "Command", "--Loaded %i Command%s", index, index > 0 ? "s" : ""); + LoadSubCommandList(); +} + +int32 WorldDatabase::LoadNPCSpells(ZoneServer* zone){ + Query query; + MYSQL_ROW row; + int32 count = 0; + MYSQL_RES* result = query.RunQuery2(Q_SELECT, "SELECT spell_list_id, spell_id, spell_tier FROM spawn_npc_spells where spell_list_id > 0"); + while(result && (row = mysql_fetch_row(result))){ + zone->AddNPCSpell(atoul(row[0]), atoul(row[1]), atoi(row[2])); + count++; + + LogWrite(NPC__DEBUG, 5, "NPC", "---Loading NPC Spell List: %u, spell id: %u, tier: %i", atoul(row[0]), atoul(row[1]), atoi(row[2])); + + } + return count; +} + +int32 WorldDatabase::LoadNPCSkills(ZoneServer* zone){ + Query query; + MYSQL_ROW row; + int32 count = 0; + MYSQL_RES* result = query.RunQuery2(Q_SELECT, "SELECT skill_list_id, skill_id, starting_value FROM spawn_npc_skills"); + while(result && (row = mysql_fetch_row(result))){ + zone->AddNPCSkill(atoul(row[0]), atoul(row[1]), atoi(row[2])); + count++; + + LogWrite(NPC__DEBUG, 5, "NPC", "---Loading NPC Skill List: %u, skill id: %u, value: %i", atoul(row[0]), atoul(row[1]), atoi(row[2])); + + } + return count; +} + +int32 WorldDatabase::LoadNPCEquipment(ZoneServer* zone){ + Query query; + MYSQL_ROW row; + int32 count = 0; + MYSQL_RES* result = query.RunQuery2(Q_SELECT, "SELECT equipment_list_id, item_id FROM spawn_npc_equipment"); + while(result && (row = mysql_fetch_row(result))){ + zone->AddNPCEquipment(atoul(row[0]), atoul(row[1])); + count++; + + LogWrite(NPC__DEBUG, 5, "NPC", "---Loading NPC Equipment List: %u, item: %u", atoul(row[0]), atoul(row[1])); + + } + return count; +} + +int8 WorldDatabase::GetAppearanceType(string type){ + int8 ret = 255; + if (type == "soga_hair_face_highlight_color") + ret = APPEARANCE_SOGA_HFHC; + else if (type == "soga_hair_type_highlight_color") + ret = APPEARANCE_SOGA_HTHC; + else if (type == "soga_hair_face_color") + ret = APPEARANCE_SOGA_HFC; + else if (type == "soga_hair_type_color") + ret = APPEARANCE_SOGA_HTC; + else if (type == "soga_hair_highlight") + ret = APPEARANCE_SOGA_HH; + else if (type == "soga_hair_color1") + ret = APPEARANCE_SOGA_HC1; + else if (type == "soga_hair_color2") + ret = APPEARANCE_SOGA_HC2; + else if (type == "hair_type_color") + ret = APPEARANCE_HTC; + else if (type == "soga_skin_color") + ret = APPEARANCE_SOGA_SC; + else if (type == "soga_eye_color") + ret = APPEARANCE_SOGA_EC; + else if (type == "hair_type_highlight_color") + ret = APPEARANCE_HTHC; + else if (type == "hair_face_highlight_color") + ret = APPEARANCE_HFHC; + else if (type == "hair_face_color") + ret = APPEARANCE_HFC; + else if (type == "hair_highlight") + ret = APPEARANCE_HH; + else if (type == "hair_color1") + ret = APPEARANCE_HC1; + else if (type == "wing_color1") + ret = APPEARANCE_WC1; + else if (type == "hair_color2") + ret = APPEARANCE_HC2; + else if (type == "wing_color2") + ret = APPEARANCE_WC2; + else if (type == "skin_color") + ret = APPEARANCE_SC; + else if (type == "eye_color") + ret = APPEARANCE_EC; + else if (type == "soga_eye_brow_type") + ret = APPEARANCE_SOGA_EBT; + else if (type == "soga_cheek_type") + ret = APPEARANCE_SOGA_CHEEKT; + else if (type == "soga_nose_type") + ret = APPEARANCE_SOGA_NT; + else if (type == "soga_chin_type") + ret = APPEARANCE_SOGA_CHINT; + else if (type == "soga_lip_type") + ret = APPEARANCE_SOGA_LT; + else if (type == "eye_brow_type") + ret = APPEARANCE_EBT; + else if (type == "soga_ear_type") + ret = APPEARANCE_SOGA_EART; + else if (type == "soga_eye_type") + ret = APPEARANCE_SOGA_EYET; + else if (type == "cheek_type") + ret = APPEARANCE_CHEEKT; + else if (type == "nose_type") + ret = APPEARANCE_NT; + else if (type == "chin_type") + ret = APPEARANCE_CHINT; + else if (type == "ear_type") + ret = APPEARANCE_EART; + else if (type == "eye_type") + ret = APPEARANCE_EYET; + else if (type == "lip_type") + ret = APPEARANCE_LT; + else if (type == "shirt_color") + ret = APPEARANCE_SHIRT; + else if (type == "unknown_chest_color") + ret = APPEARANCE_UCC; + else if (type == "pants_color") + ret = APPEARANCE_PANTS; + else if (type == "unknown_legs_color") + ret = APPEARANCE_ULC; + else if (type == "unknown9") + ret = APPEARANCE_U9; + else if (type == "body_size") + ret = APPEARANCE_BODY_SIZE; + else if (type == "soga_wing_color1") + ret = APPEARANCE_SOGA_WC1; + else if (type == "soga_wing_color2") + ret = APPEARANCE_SOGA_WC2; + else if (type == "soga_shirt_color") + ret = APPEARANCE_SOGA_SHIRT; + else if (type == "soga_unknown_chest_color") + ret = APPEARANCE_SOGA_UCC; + else if (type == "soga_pants_color") + ret = APPEARANCE_SOGA_PANTS; + else if (type == "soga_unknown_legs_color") + ret = APPEARANCE_SOGA_ULC; + else if (type == "soga_unknown13") + ret = APPEARANCE_SOGA_U13; + else if (type == "body_age") + ret = APPEARANCE_BODY_AGE; + return ret; +} + +int32 WorldDatabase::LoadAppearances(ZoneServer* zone, Client* client){ + Query query, query2; + MYSQL_ROW row; + int32 count = 0, spawn_id = 0, new_spawn_id = 0; + Entity* entity = 0; + if(client) + entity = client->GetPlayer(); + map appearance_types; + map > appearance_colors; + EQ2_Color color; + color.red = 0; + color.green = 0; + color.blue = 0; + string type; + MYSQL_RES* result = 0; + if(!client) + result = query.RunQuery2(Q_SELECT, "SELECT distinct `type` FROM npc_appearance where length(type) > 0"); + else + result = query.RunQuery2(Q_SELECT, "SELECT distinct `type` FROM char_colors where length(type) > 0 and char_id=%u", client->GetCharacterID()); + while(result && (row = mysql_fetch_row(result))){ + type = string(row[0]); + appearance_types[type] = GetAppearanceType(type); + if(appearance_types[type] == 255) + LogWrite(WORLD__ERROR, 0, "Appearance", "Unknown appearance type '%s' in LoadAppearances.", type.c_str()); + } + + MYSQL_RES* result2 = 0; + if(!client) + result2 = query2.RunQuery2(Q_SELECT, "SELECT `type`, spawn_id, signed_value, red, green, blue FROM npc_appearance where length(type) > 0 ORDER BY spawn_id"); + else + result2 = query2.RunQuery2(Q_SELECT, "SELECT `type`, char_id, signed_value, red, green, blue FROM char_colors where length(type) > 0 and char_id=%u", client->GetCharacterID()); + while(result2 && (row = mysql_fetch_row(result2))){ + if(!client){ + new_spawn_id = atoul(row[1]); + if(spawn_id != new_spawn_id){ + entity = zone->GetNPC(new_spawn_id, true); + if(!entity) + continue; + if(spawn_id > 0) + count++; + spawn_id = new_spawn_id; + } + } + if(appearance_types[row[0]] < APPEARANCE_SOGA_EBT){ + color.red = atoi(row[3]); + color.green = atoi(row[4]); + color.blue = atoi(row[5]); + } + switch(appearance_types[row[0]]){ + case APPEARANCE_SOGA_HFHC:{ + entity->features.soga_hair_face_highlight_color = color; + break; + } + case APPEARANCE_SOGA_HTHC:{ + entity->features.soga_hair_type_highlight_color = color; + break; + } + case APPEARANCE_SOGA_HFC:{ + entity->features.soga_hair_face_color = color; + break; + } + case APPEARANCE_SOGA_HTC:{ + entity->features.soga_hair_type_color = color; + break; + } + case APPEARANCE_SOGA_HH:{ + entity->features.soga_hair_highlight_color = color; + break; + } + case APPEARANCE_SOGA_HC1:{ + entity->features.soga_hair_color1 = color; + break; + } + case APPEARANCE_SOGA_HC2:{ + entity->features.soga_hair_color2 = color; + break; + } + case APPEARANCE_SOGA_SC:{ + entity->features.soga_skin_color = color; + break; + } + case APPEARANCE_SOGA_EC:{ + entity->features.soga_eye_color = color; + break; + } + case APPEARANCE_HTHC:{ + entity->features.hair_type_highlight_color = color; + break; + } + case APPEARANCE_HFHC:{ + entity->features.hair_face_highlight_color = color; + break; + } + case APPEARANCE_HTC:{ + entity->features.hair_type_color = color; + break; + } + case APPEARANCE_HFC:{ + entity->features.hair_face_color = color; + break; + } + case APPEARANCE_HH:{ + entity->features.hair_highlight_color = color; + break; + } + case APPEARANCE_HC1:{ + entity->features.hair_color1 = color; + break; + } + case APPEARANCE_HC2:{ + entity->features.hair_color2 = color; + break; + } + case APPEARANCE_WC1:{ + entity->features.wing_color1 = color; + break; + } + case APPEARANCE_WC2:{ + entity->features.wing_color2 = color; + break; + } + case APPEARANCE_SC:{ + entity->features.skin_color = color; + break; + } + case APPEARANCE_EC:{ + entity->features.eye_color = color; + break; + } + case APPEARANCE_SOGA_EBT:{ + for(int i=0;i<3;i++) + entity->features.soga_eye_brow_type[i] = atoi(row[3+i]); + break; + } + case APPEARANCE_SOGA_CHEEKT:{ + for(int i=0;i<3;i++) + entity->features.soga_cheek_type[i] = atoi(row[3+i]); + break; + } + case APPEARANCE_SOGA_NT:{ + for(int i=0;i<3;i++) + entity->features.soga_nose_type[i] = atoi(row[3+i]); + break; + } + case APPEARANCE_SOGA_CHINT:{ + for(int i=0;i<3;i++) + entity->features.soga_chin_type[i] = atoi(row[3+i]); + break; + } + case APPEARANCE_SOGA_LT:{ + for(int i=0;i<3;i++) + entity->features.soga_lip_type[i] = atoi(row[3+i]); + break; + } + case APPEARANCE_SOGA_EART:{ + for(int i=0;i<3;i++) + entity->features.soga_ear_type[i] = atoi(row[3+i]); + break; + } + case APPEARANCE_SOGA_EYET:{ + for(int i=0;i<3;i++) + entity->features.soga_eye_type[i] = atoi(row[3+i]); + break; + } + case APPEARANCE_EBT:{ + for(int i=0;i<3;i++) + entity->features.eye_brow_type[i] = atoi(row[3+i]); + break; + } + case APPEARANCE_CHEEKT:{ + for(int i=0;i<3;i++) + entity->features.cheek_type[i] = atoi(row[3+i]); + break; + } + case APPEARANCE_NT:{ + for(int i=0;i<3;i++) + entity->features.nose_type[i] = atoi(row[3+i]); + break; + } + case APPEARANCE_CHINT:{ + for(int i=0;i<3;i++) + entity->features.chin_type[i] = atoi(row[3+i]); + break; + } + case APPEARANCE_EART:{ + for(int i=0;i<3;i++) + entity->features.ear_type[i] = atoi(row[3+i]); + break; + } + case APPEARANCE_EYET:{ + for(int i=0;i<3;i++) + entity->features.eye_type[i] = atoi(row[3+i]); + break; + } + case APPEARANCE_LT:{ + for(int i=0;i<3;i++) + entity->features.lip_type[i] = atoi(row[3+i]); + break; + } + case APPEARANCE_SHIRT:{ + entity->features.shirt_color = color; + break; + } + case APPEARANCE_UCC:{ + break; + } + case APPEARANCE_PANTS:{ + entity->features.pants_color = color; + break; + } + case APPEARANCE_ULC:{ + break; + } + case APPEARANCE_U9:{ + break; + } + case APPEARANCE_BODY_SIZE:{ + entity->features.body_size = color.red; + break; + } + case APPEARANCE_SOGA_WC1:{ + break; + } + case APPEARANCE_SOGA_WC2:{ + break; + } + case APPEARANCE_SOGA_SHIRT:{ + break; + } + case APPEARANCE_SOGA_UCC:{ + break; + } + case APPEARANCE_SOGA_PANTS:{ + break; + } + case APPEARANCE_SOGA_ULC:{ + break; + } + case APPEARANCE_SOGA_U13:{ + break; + } + case APPEARANCE_BODY_AGE: { + entity->features.body_age = color.red; + break; + } + } + } + return count; +} + +void WorldDatabase::LoadNPCs(ZoneServer* zone){ + Query query; + MYSQL_ROW row; + NPC* npc = 0; + int32 id = 0; + int32 total = 0; + MYSQL_RES* result = query.RunQuery2(Q_SELECT,"SELECT npc.spawn_id, s.name, npc.min_level, npc.max_level, npc.enc_level, s.race, s.model_type, npc.class_, npc.gender, s.command_primary, s.command_secondary, s.show_name, npc.min_group_size, npc.max_group_size, npc.hair_type_id, npc.facial_hair_type_id, npc.wing_type_id, npc.chest_type_id, npc.legs_type_id, npc.soga_hair_type_id, npc.soga_facial_hair_type_id, s.attackable, s.show_level, s.targetable, s.show_command_icon, s.display_hand_icon, s.hp, s.power, s.size, s.collision_radius, npc.action_state, s.visual_state, npc.mood_state, npc.initial_state, npc.activity_status, s.faction_id, s.sub_title, s.merchant_id, s.merchant_type, s.size_offset, npc.attack_type, npc.ai_strategy+0, npc.spell_list_id, npc.secondary_spell_list_id, npc.skill_list_id, npc.secondary_skill_list_id, npc.equipment_list_id, npc.str, npc.sta, npc.wis, npc.intel, npc.agi, npc.heat, npc.cold, npc.magic, npc.mental, npc.divine, npc.disease, npc.poison, npc.aggro_radius, npc.cast_percentage, npc.randomize, npc.soga_model_type, npc.heroic_flag, npc.alignment, npc.elemental, npc.arcane, npc.noxious, s.savagery, s.dissonance, npc.hide_hood, npc.emote_state, s.prefix, s.suffix, s.last_name\n" + "FROM spawn s\n" + "INNER JOIN spawn_npcs npc\n" + "ON s.id = npc.spawn_id\n" + "INNER JOIN spawn_location_entry le\n" + "ON npc.spawn_id = le.spawn_id\n" + "INNER JOIN spawn_location_placement lp\n" + "ON le.spawn_location_id = lp.spawn_location_id\n" + "WHERE lp.zone_id = %u\n" + "GROUP BY s.id", + zone->GetZoneID()); + while(result && (row = mysql_fetch_row(result))){ + /*npc->SetAppearanceID(atoi(row[12])); + AppearanceData* appearance = world.GetNPCAppearance(npc->GetAppearanceID()); + if(appearance) + memcpy(&npc->appearance, appearance, sizeof(AppearanceData)); + */ + id = atoul(row[0]); + if(zone->GetNPC(id, true)) + continue; + npc = new NPC(); + npc->SetDatabaseID(id); + strcpy(npc->appearance.name, row[1]); + vector* primary_command_list = zone->GetEntityCommandList(atoul(row[9])); + vector* secondary_command_list = zone->GetEntityCommandList(atoul(row[10])); + if(primary_command_list){ + npc->SetPrimaryCommands(primary_command_list); + npc->primary_command_list_id = atoul(row[9]); + } + if(secondary_command_list){ + npc->SetSecondaryCommands(secondary_command_list); + npc->secondary_command_list_id = atoul(row[10]); + } + npc->appearance.min_level = atoi(row[2]); + npc->appearance.max_level = atoi(row[3]); + npc->appearance.level = atoi(row[2]); + npc->appearance.encounter_level = atoi(row[4]); + npc->appearance.race = atoi(row[5]); + //npc->appearance.lua_race_id = atoi(row[75]); + if (atoi(row[74]) > 0) { + int16 xxx = atoi(row[75]); + int8 yyy = 0; + } + npc->appearance.model_type = atoi(row[6]); + npc->appearance.soga_model_type = atoi(row[62]); + npc->appearance.adventure_class = atoi(row[7]); + npc->appearance.gender = atoi(row[8]); + npc->appearance.display_name = atoi(row[11]); + npc->features.hair_type = atoi(row[14]); + npc->features.hair_face_type = atoi(row[15]); + npc->features.wing_type = atoi(row[16]); + npc->features.chest_type = atoi(row[17]); + npc->features.legs_type = atoi(row[18]); + npc->features.soga_hair_type = atoi(row[19]); + npc->features.soga_hair_face_type = atoi(row[20]); + npc->appearance.attackable = atoi(row[21]); + npc->appearance.show_level = atoi(row[22]); + npc->appearance.targetable = atoi(row[23]); + npc->appearance.show_command_icon = atoi(row[24]); + npc->appearance.display_hand_icon = atoi(row[25]); + npc->appearance.hide_hood = atoi(row[70]); + npc->appearance.randomize = atoi(row[61]); + npc->SetTotalHP(atoul(row[26])); + npc->SetTotalPower(atoul(row[27])); + npc->SetHP(npc->GetTotalHP()); + npc->SetPower(npc->GetTotalPower()); + if(npc->GetTotalHP() == 0){ + npc->SetTotalHP(15*npc->GetLevel() + 1); + npc->SetHP(15*npc->GetLevel() + 1); + } + if(npc->GetTotalPower() == 0){ + npc->SetTotalPower(15*npc->GetLevel() + 1); + npc->SetPower(15*npc->GetLevel() + 1); + } + npc->size = atoi(row[28]); + npc->appearance.pos.collision_radius = atoi(row[29]); + npc->appearance.action_state = atoi(row[30]); + npc->appearance.visual_state = atoi(row[31]); + npc->appearance.mood_state = atoi(row[32]); + npc->appearance.emote_state = atoi(row[71]); + npc->appearance.pos.state = atoi(row[33]); + npc->appearance.activity_status = atoi(row[34]); + npc->faction_id = atoul(row[35]); + if(row[36]){ + if(strlen(row[36]) < sizeof(npc->appearance.sub_title)) + strcpy(npc->appearance.sub_title, row[36]); + else + strncpy(npc->appearance.sub_title, row[36], sizeof(npc->appearance.sub_title)); + } + npc->SetMerchantID(atoul(row[37])); + npc->SetMerchantType(atoi(row[38])); + npc->SetSizeOffset(atoi(row[39])); + npc->SetAttackType(atoi(row[40])); + npc->SetAIStrategy(atoi(row[41])); + npc->SetPrimarySpellList(atoul(row[42])); + npc->SetSecondarySpellList(atoul(row[43])); + npc->SetPrimarySkillList(atoul(row[44])); + npc->SetSecondarySkillList(atoul(row[45])); + npc->SetEquipmentListID(atoul(row[46])); + + InfoStruct* info = npc->GetInfoStruct(); + info->str_base = atoi(row[47]); + info->sta_base = atoi(row[48]); + info->wis_base = atoi(row[49]); + info->intel_base = atoi(row[50]); + info->agi_base = atoi(row[51]); + info->heat_base = atoi(row[52]); + info->cold_base = atoi(row[53]); + info->magic_base = atoi(row[54]); + info->mental_base = atoi(row[55]); + info->divine_base = atoi(row[56]); + info->disease_base = atoi(row[57]); + info->poison_base = atoi(row[58]); + info->alignment = atoi(row[64]); + npc->SetAggroRadius(atof(row[59])); + npc->SetCastPercentage(atoi(row[60])); + npc->appearance.heroic_flag = atoi(row[63]); + + info->elemental_base = atoi(row[65]); + info->arcane_base = atoi(row[66]); + info->noxious_base = atoi(row[67]); + npc->SetTotalSavagery(atoul(row[68])); + npc->SetTotalDissonance(atoul(row[69])); + npc->SetSavagery(npc->GetTotalSavagery()); + npc->SetDissonance(npc->GetTotalDissonance()); + if(npc->GetTotalSavagery() == 0){ + npc->SetTotalSavagery(15*npc->GetLevel() + 1); + npc->SetSavagery(15*npc->GetLevel() + 1); + } + if(npc->GetTotalDissonance() == 0){ + npc->SetTotalDissonance(15*npc->GetLevel() + 1); + npc->SetDissonance(15*npc->GetLevel() + 1); + } + npc->SetPrefixTitle(row[72]); + npc->SetSuffixTitle(row[73]); + npc->SetLastName(row[74]); + + zone->AddNPC(id, npc); + total++; + LogWrite(NPC__DEBUG, 5, "NPC", "---Loading NPC: '%s' (%u)", npc->appearance.name, id); + } + LogWrite(NPC__INFO, 0, "NPC", "--Loaded %i NPC(s).", total); + LogWrite(NPC__INFO, 0, "NPC", "--Loaded %i NPC Spell(s).", LoadNPCSpells(zone)); + LogWrite(NPC__INFO, 0, "NPC", "--Loaded %i NPC Skill(s).", LoadNPCSkills(zone)); + LogWrite(NPC__INFO, 0, "NPC", "--Loaded %i NPC Equipment Piece(s).", LoadNPCEquipment(zone)); + LogWrite(NPC__INFO, 0, "NPC", "--Loaded %i NPC Appearance(s).", LoadAppearances(zone)); + LogWrite(NPC__INFO, 0, "NPC", "--Loaded %i NPC Equipment Appearance(s).", LoadNPCAppearanceEquipmentData(zone)); +} + +void WorldDatabase::LoadSigns(ZoneServer* zone){ + Query query; + MYSQL_ROW row; + Sign* sign = 0; + int32 id = 0; + int32 total = 0; + MYSQL_RES* result = query.RunQuery2(Q_SELECT, "SELECT ss.spawn_id, s.name, s.model_type, s.size, s.show_command_icon, ss.widget_id, ss.widget_x, ss.widget_y, ss.widget_z, s.command_primary, s.command_secondary, s.collision_radius, ss.icon, ss.type, ss.title, ss.description, ss.sign_distance, ss.zone_id, ss.zone_x, ss.zone_y, ss.zone_z, ss.zone_heading, ss.include_heading, ss.include_location, s.transport_id, s.size_offset, s.display_hand_icon, s.visual_state\n" + "FROM spawn s\n" + "INNER JOIN spawn_signs ss\n" + "ON s.id = ss.spawn_id\n" + "INNER JOIN spawn_location_entry le\n" + "ON ss.spawn_id = le.spawn_id\n" + "INNER JOIN spawn_location_placement lp\n" + "ON le.spawn_location_id = lp.spawn_location_id\n" + "WHERE lp.zone_id = %u\n" + "GROUP BY s.id", + zone->GetZoneID()); + + while(result && (row = mysql_fetch_row(result))){ + id = atoul(row[0]); + if(zone->GetSign(id, true)) + continue; + sign = new Sign(); + sign->SetDatabaseID(id); + strcpy(sign->appearance.name, row[1]); + sign->appearance.model_type = atoi(row[2]); + sign->SetSize(atoi(row[3])); + sign->appearance.show_command_icon = atoi(row[4]); + sign->SetWidgetID(atoul(row[5])); + sign->SetWidgetX(atof(row[6])); + sign->SetWidgetY(atof(row[7])); + sign->SetWidgetZ(atof(row[8])); + vector* primary_command_list = zone->GetEntityCommandList(atoul(row[9])); + if(primary_command_list){ + sign->SetPrimaryCommands(primary_command_list); + sign->primary_command_list_id = atoul(row[9]); + } + + vector* secondary_command_list = zone->GetEntityCommandList(atoul(row[10])); + if (secondary_command_list){ + sign->SetSecondaryCommands(secondary_command_list); + sign->secondary_command_list_id = atoul(row[10]); + } + + sign->appearance.pos.collision_radius = atoi(row[11]); + sign->SetSignIcon(atoi(row[12])); + if(strncasecmp(row[13],"Generic", 7) == 0) + sign->SetSignType(SIGN_TYPE_GENERIC); + else if(strncasecmp(row[13],"Zone", 4) == 0) + sign->SetSignType(SIGN_TYPE_ZONE); + sign->SetSignTitle(row[14]); + sign->SetSignDescription(row[15]); + sign->SetSignDistance(atof(row[16])); + sign->SetSignZoneID(atoul(row[17])); + sign->SetSignZoneX(atof(row[18])); + sign->SetSignZoneY(atof(row[19])); + sign->SetSignZoneZ(atof(row[20])); + sign->SetSignZoneHeading(atof(row[21])); + sign->SetIncludeHeading(atoi(row[22]) == 1); + sign->SetIncludeLocation(atoi(row[23]) == 1); + sign->SetTransporterID(atoul(row[24])); + sign->SetSizeOffset(atoi(row[25])); + sign->appearance.display_hand_icon = atoi(row[26]); + sign->SetVisualState(atoi(row[27])); + zone->AddSign(id, sign); + total++; + + LogWrite(SIGN__DEBUG, 5, "Sign", "---Loading Sign: '%s' (%u).", sign->appearance.name, id); + + } + LogWrite(SIGN__DEBUG, 0, "Sign", "--Loaded %i Sign(s)", total); +} + +void WorldDatabase::LoadWidgets(ZoneServer* zone){ + Query query; + MYSQL_ROW row; + Widget* widget = 0; + int32 id = 0; + int32 total = 0; + MYSQL_RES* result = query.RunQuery2(Q_SELECT, "SELECT sw.spawn_id, s.name, s.model_type, s.size, s.show_command_icon, sw.widget_id, sw.widget_x, sw.widget_y, sw.widget_z, s.command_primary, s.command_secondary, s.collision_radius, sw.include_heading, sw.include_location, sw.icon, sw.type, sw.open_heading, sw.open_y, sw.action_spawn_id, sw.open_sound_file, sw.close_sound_file, sw.open_duration, sw.closed_heading, sw.linked_spawn_id, sw.close_y, s.transport_id, s.size_offset, sw.house_id, sw.open_x, sw.open_z, sw.close_x, sw.close_z, s.display_hand_icon\n" + "FROM spawn s\n" + "INNER JOIN spawn_widgets sw\n" + "ON s.id = sw.spawn_id\n" + "INNER JOIN spawn_location_entry le\n" + "ON sw.spawn_id = le.spawn_id\n" + "INNER JOIN spawn_location_placement lp\n" + "ON le.spawn_location_id = lp.spawn_location_id\n" + "WHERE lp.zone_id = %u\n" + "GROUP BY s.id", + zone->GetZoneID()); + while(result && (row = mysql_fetch_row(result))){ + id = atoul(row[0]); + if(zone->GetWidget(id, true)) + continue; + widget = new Widget(); + widget->SetDatabaseID(id); + strcpy(widget->appearance.name, row[1]); + widget->appearance.model_type = atoi(row[2]); + widget->SetSize(atoi(row[3])); + widget->appearance.show_command_icon = atoi(row[4]); + widget->SetWidgetID(atoul(row[5])); + widget->SetWidgetX(atof(row[6])); + widget->SetWidgetY(atof(row[7])); + widget->SetWidgetZ(atof(row[8])); + vector* primary_command_list = zone->GetEntityCommandList(atoul(row[9])); + if(primary_command_list){ + widget->SetPrimaryCommands(primary_command_list); + widget->primary_command_list_id = atoul(row[9]); + } + + vector* secondary_command_list = zone->GetEntityCommandList(atoul(row[10])); + if (secondary_command_list) { + widget->SetSecondaryCommands(secondary_command_list); + widget->secondary_command_list_id = atoul(row[10]); + } + + widget->appearance.pos.collision_radius = atoi(row[11]); + widget->SetIncludeHeading(atoi(row[12]) == 1); + widget->SetIncludeLocation(atoi(row[13]) == 1); + widget->SetWidgetIcon(atoi(row[14])); + if (strncasecmp(row[15], "Generic", 7) == 0) + widget->SetWidgetType(WIDGET_TYPE_GENERIC); + else if (strncasecmp(row[15], "Door", 4) == 0) + widget->SetWidgetType(WIDGET_TYPE_DOOR); + else if (strncasecmp(row[15], "Lift", 4) == 0) + widget->SetWidgetType(WIDGET_TYPE_LIFT); + widget->SetOpenHeading(atof(row[16])); + widget->SetOpenY(atof(row[17])); + widget->SetActionSpawnID(atoul(row[18])); + if(row[19] && strlen(row[19]) > 5) + widget->SetOpenSound(row[19]); + if(row[20] && strlen(row[20]) > 5) + widget->SetCloseSound(row[20]); + widget->SetOpenDuration(atoi(row[21])); + widget->SetClosedHeading(atof(row[22])); + widget->SetLinkedSpawnID(atoul(row[23])); + widget->SetCloseY(atof(row[24])); + widget->SetTransporterID(atoul(row[25])); + widget->SetSizeOffset(atoi(row[26])); + widget->SetHouseID(atoul(row[27])); + widget->SetOpenX(atof(row[28])); + widget->SetOpenZ(atof(row[29])); + widget->SetCloseX(atof(row[30])); + widget->SetCloseZ(atof(row[31])); + widget->appearance.display_hand_icon = atoi(row[32]); + zone->AddWidget(id, widget); + total++; + + LogWrite(WIDGET__DEBUG, 5, "Widget", "---Loading Widget: '%s' (%u).", widget->appearance.name, id); + + } + LogWrite(WIDGET__DEBUG, 0, "Widget", "--Loaded %i Widget(s)", total); +} + +void WorldDatabase::LoadObjects(ZoneServer* zone){ + Query query; + MYSQL_ROW row; + Object* object = 0; + int32 id = 0; + int32 total = 0; + MYSQL_RES* result = query.RunQuery2(Q_SELECT, "SELECT so.spawn_id, s.name, s.race, s.model_type, s.command_primary, s.command_secondary, s.targetable, s.size, s.show_name, s.visual_state, s.attackable, s.show_level, s.show_command_icon, s.display_hand_icon, s.faction_id, s.collision_radius, s.transport_id, s.size_offset, so.device_id\n" + "FROM spawn s\n" + "INNER JOIN spawn_objects so\n" + "ON s.id = so.spawn_id\n" + "INNER JOIN spawn_location_entry le\n" + "ON so.spawn_id = le.spawn_id\n" + "INNER JOIN spawn_location_placement lp\n" + "ON le.spawn_location_id = lp.spawn_location_id\n" + "WHERE lp.zone_id = %u\n" + "GROUP BY s.id", + zone->GetZoneID()); + + while(result && (row = mysql_fetch_row(result))){ + id = atoul(row[0]); + if(zone->GetObject(id, true)) + continue; + object = new Object(); + object->SetDatabaseID(id); + strcpy(object->appearance.name, row[1]); + vector* primary_command_list = zone->GetEntityCommandList(atoul(row[4])); + vector* secondary_command_list = zone->GetEntityCommandList(atoul(row[5])); + if(primary_command_list){ + object->SetPrimaryCommands(primary_command_list); + object->primary_command_list_id = atoul(row[4]); + } + if(secondary_command_list){ + object->SetSecondaryCommands(secondary_command_list); + object->secondary_command_list_id = atoul(row[5]); + } + object->appearance.race = atoi(row[2]); + object->appearance.model_type = atoi(row[3]); + object->appearance.targetable = atoi(row[6]); + object->size = atoi(row[7]); + object->appearance.display_name = atoi(row[8]); + object->appearance.visual_state = atoi(row[9]); + object->appearance.attackable = atoi(row[10]); + object->appearance.show_level = atoi(row[11]); + object->appearance.show_command_icon = atoi(row[12]); + object->appearance.display_hand_icon = atoi(row[13]); + object->faction_id = atoul(row[14]); + object->appearance.pos.collision_radius = atoi(row[15]); + object->SetTransporterID(atoul(row[16])); + object->SetSizeOffset(atoi(row[17])); + object->SetDeviceID(atoi(row[18])); + zone->AddObject(id, object); + total++; + + LogWrite(OBJECT__DEBUG, 5, "Object", "---Loading Object: '%s' (%u)", object->appearance.name, id); + + } + LogWrite(OBJECT__DEBUG, 0, "Object", "--Loaded %i Object(s)", total); +} + +void WorldDatabase::LoadGroundSpawns(ZoneServer* zone){ + Query query; + MYSQL_ROW row; + GroundSpawn* spawn = 0; + int32 id = 0; + int32 total = 0; + MYSQL_RES* result = query.RunQuery2(Q_SELECT, "SELECT sg.spawn_id, s.name, s.race, s.model_type, s.command_primary, s.command_secondary, s.targetable, s.size, s.show_name, s.visual_state, s.attackable, s.show_level, s.show_command_icon, s.display_hand_icon, s.faction_id, s.collision_radius, sg.number_harvests, sg.num_attempts_per_harvest, sg.groundspawn_id, sg.collection_skill, s.size_offset\n" + "FROM spawn s\n" + "INNER JOIN spawn_ground sg\n" + "ON s.id = sg.spawn_id\n" + "INNER JOIN spawn_location_entry le\n" + "ON sg.spawn_id = le.spawn_id\n" + "INNER JOIN spawn_location_placement lp\n" + "ON le.spawn_location_id = lp.spawn_location_id\n" + "WHERE lp.zone_id = %u\n" + "GROUP BY s.id", + zone->GetZoneID()); + while(result && (row = mysql_fetch_row(result))){ + id = atoul(row[0]); + if(zone->GetGroundSpawn(id, true)) + continue; + spawn = new GroundSpawn(); + spawn->SetDatabaseID(id); + strcpy(spawn->appearance.name, row[1]); + vector* primary_command_list = zone->GetEntityCommandList(atoul(row[4])); + vector* secondary_command_list = zone->GetEntityCommandList(atoul(row[5])); + if(primary_command_list){ + spawn->SetPrimaryCommands(primary_command_list); + spawn->primary_command_list_id = atoul(row[4]); + } + if(secondary_command_list){ + spawn->SetSecondaryCommands(secondary_command_list); + spawn->secondary_command_list_id = atoul(row[5]); + } + spawn->appearance.race = atoi(row[2]); + spawn->appearance.model_type = atoi(row[3]); + spawn->appearance.targetable = atoi(row[6]); + spawn->size = atoi(row[7]); + spawn->appearance.display_name = atoi(row[8]); + spawn->appearance.visual_state = atoi(row[9]); + spawn->appearance.attackable = atoi(row[10]); + spawn->appearance.show_level = atoi(row[11]); + spawn->appearance.show_command_icon = atoi(row[12]); + spawn->appearance.display_hand_icon = atoi(row[13]); + spawn->faction_id = atoul(row[14]); + spawn->appearance.pos.collision_radius = atoi(row[15]); + spawn->SetNumberHarvests(atoi(row[16])); + spawn->SetAttemptsPerHarvest(atoi(row[17])); + spawn->SetGroundSpawnEntryID(atoul(row[18])); + spawn->SetCollectionSkill(row[19]); + spawn->SetSizeOffset(atoi(row[20])); + zone->AddGroundSpawn(id, spawn); + total++; + LogWrite(GROUNDSPAWN__DEBUG, 5, "GSpawn", "---Loading GroundSpawn: '%s' (%u)", spawn->appearance.name, id); + } + LogWrite(GROUNDSPAWN__DEBUG, 0, "GSpawn", "--Loaded %i GroundSpawn(s)", total); +} + +void WorldDatabase::LoadGroundSpawnItems(ZoneServer* zone) { + Query query; + MYSQL_ROW row; + int32 total = 0; + MYSQL_RES* result = query.RunQuery2(Q_SELECT, "SELECT groundspawn_id, item_id, is_rare, grid_id FROM groundspawn_items;"); + while(result && (row = mysql_fetch_row(result))) + { + zone->AddGroundSpawnItem(atoul(row[0]), atoul(row[1]), atoi(row[2]), atoul(row[3])); + LogWrite(GROUNDSPAWN__DEBUG, 5, "GSpawn", "---Loading GroundSpawn Items: ID: %u\n", atoul(row[0])); + LogWrite(GROUNDSPAWN__DEBUG, 5, "GSpawn", "---item: %ul, rare: %i, grid: %ul", atoul(row[1]), atoi(row[2]), atoul(row[3])); + total++; + } + LogWrite(GROUNDSPAWN__DEBUG, 0, "GSpawn", "--Loaded %i GroundSpawn Item%s.", total, total == 1 ? "" : "s"); +} + +void WorldDatabase::LoadGroundSpawnEntries(ZoneServer* zone) { + Query query; + MYSQL_ROW row; + int32 total = 0; + MYSQL_RES* result = query.RunQuery2(Q_SELECT, "SELECT groundspawn_id, min_skill_level, min_adventure_level, bonus_table, harvest1, harvest3, harvest5, harvest_imbue, harvest_rare, harvest10, harvest_coin FROM groundspawns WHERE enabled = 1;"); + while(result && (row = mysql_fetch_row(result))) + { + // this is getting ridonkulous... + LogWrite(GROUNDSPAWN__DEBUG, 5, "GSpawn", "---Loading GroundSpawn ID: %u\n" \ + "---min_skill_level: %i, min_adventure_level: %i, bonus_table: %i\n" \ + "---harvest1: %.2f, harvest3: %.2f, harvest5: %.2f\n" \ + "---harvest_imbue: %.2f, harvest_rare: %.2f, harvest10: %.2f\n" \ + "---harvest_coin: %u", atoul(row[0]), atoi(row[1]), atoi(row[2]), atoi(row[3]), atof(row[4]), atof(row[5]), atof(row[6]), atof(row[7]), atof(row[8]), atof(row[9]), atoul(row[10])); + + zone->AddGroundSpawnEntry(atoul(row[0]), atoi(row[1]), atoi(row[2]), atoi(row[3]), atof(row[4]), atof(row[5]), atof(row[6]), atof(row[7]), atof(row[8]), atof(row[9]), atoul(row[10])); + total++; + } + LogWrite(GROUNDSPAWN__DEBUG, 0, "GSpawn", "--Loaded %i GroundSpawn Entr%s.", total, total == 1 ? "y" : "ies"); + LoadGroundSpawnItems(zone); +} + +bool WorldDatabase::LoadCharacterStats(int32 id, int32 account_id, Client* client) +{ + DatabaseResult result; + + if( database_new.Select(&result, "SELECT * FROM character_details WHERE char_id = %i LIMIT 0, 1", id) ) + { + LogWrite(PLAYER__DEBUG, 0, "Player", "Loading character_details for '%s' (char_id: %u)", client->GetPlayer()->GetName(), id); + + while( result.Next() ) + { + InfoStruct* info = client->GetPlayer()->GetInfoStruct(); + + client->GetPlayer()->SetHP(result.GetSInt32Str("hp")); + client->GetPlayer()->SetPower(result.GetSInt32Str("power")); + info->max_concentration = result.GetInt8Str("max_concentration"); + info->attack_base = result.GetInt16Str("attack"); + info->mitigation_base = result.GetInt16Str("mitigation"); + info->avoidance_base = result.GetInt16Str("avoidance"); + info->parry_base = result.GetInt16Str("parry"); + info->deflection_base = result.GetInt16Str("deflection"); + info->block_base = result.GetInt16Str("block"); + info->str_base = result.GetInt16Str("str"); + info->sta_base = result.GetInt16Str("sta"); + info->agi_base = result.GetInt16Str("agi"); + info->wis_base = result.GetInt16Str("wis"); + info->intel_base = result.GetInt16Str("intel"); + // old resist types + info->heat_base = result.GetInt16Str("heat"); + info->cold_base = result.GetInt16Str("cold"); + info->magic_base = result.GetInt16Str("magic"); + info->mental_base = result.GetInt16Str("mental"); + info->divine_base = result.GetInt16Str("divine"); + info->disease_base = result.GetInt16Str("disease"); + info->poison_base = result.GetInt16Str("poison"); + // + info->coin_copper = result.GetInt32Str("coin_copper"); + info->coin_silver = result.GetInt32Str("coin_silver"); + info->coin_gold = result.GetInt32Str("coin_gold"); + info->coin_plat = result.GetInt32Str("coin_plat"); + strcpy(info->pet_name, result.GetStringStr("pet_name")); + strcpy(info->biography, result.GetStringStr("biography")); + info->status_points = result.GetInt32Str("status_points"); + client->GetPlayer()->GetPlayerInfo()->SetBindZone(result.GetInt32Str("bind_zone_id")); + client->GetPlayer()->GetPlayerInfo()->SetBindX(result.GetFloatStr("bind_x")); + client->GetPlayer()->GetPlayerInfo()->SetBindY(result.GetFloatStr("bind_y")); + client->GetPlayer()->GetPlayerInfo()->SetBindZ(result.GetFloatStr("bind_z")); + client->GetPlayer()->GetPlayerInfo()->SetBindHeading(result.GetFloatStr("bind_heading")); + client->GetPlayer()->GetPlayerInfo()->SetHouseZone(result.GetInt32Str("house_zone_id")); + client->GetPlayer()->SetTotalHP(result.GetSInt32Str("max_hp")); + client->GetPlayer()->SetTotalPower(result.GetSInt32Str("max_power")); + client->GetPlayer()->SetAssignedAA(result.GetInt16Str("assigned_aa")); + client->GetPlayer()->SetUnassignedAA(result.GetInt16Str("unassigned_aa")); + client->GetPlayer()->SetTradeskillAA(result.GetInt16Str("tradeskill_aa")); + client->GetPlayer()->SetUnassignedTradeskillAA(result.GetInt16Str("unassigned_tradeskill_aa")); + client->GetPlayer()->SetPrestigeAA(result.GetInt16Str("prestige_aa")); + client->GetPlayer()->SetUnassignedPrestigeAA(result.GetInt16Str("unassigned_prestige_aa")); + client->GetPlayer()->SetTradeskillPrestigeAA(result.GetInt16Str("tradeskill_prestige_aa")); + client->GetPlayer()->SetUnassignedTradeskillPrestigeAA(result.GetInt16Str("unassigned_tradeskill_prestige_aa")); + info->xp = result.GetInt32Str("xp"); + info->xp_needed = result.GetInt32Str("xp_needed"); + if(info->xp_needed == 0) + client->GetPlayer()->SetNeededXP(); + info->xp_debt = result.GetInt32Str("xp_debt"); + info->xp_vitality = result.GetFloatStr("xp_vitality"); + info->ts_xp = result.GetInt32Str("tradeskill_xp"); + info->ts_xp_needed = result.GetInt32Str("tradeskill_xp_needed"); + if (info->ts_xp_needed == 0) + client->GetPlayer()->SetNeededTSXP(); + info->tradeskill_xp_vitality = result.GetFloatStr("tradeskill_xp_vitality"); + client->GetPlayer()->SetTotalHPBase(client->GetPlayer()->GetTotalHP()); + client->GetPlayer()->SetTotalPowerBase(client->GetPlayer()->GetTotalPower()); + info->bank_coin_copper = result.GetInt32Str("bank_copper"); + info->bank_coin_silver = result.GetInt32Str("bank_silver"); + info->bank_coin_gold = result.GetInt32Str("bank_gold"); + info->bank_coin_plat = result.GetInt32Str("bank_plat"); + client->GetPlayer()->SetCombatVoice(result.GetInt16Str("combat_voice")); + client->GetPlayer()->SetEmoteVoice(result.GetInt16Str("emote_voice")); + client->GetPlayer()->SetBiography(result.GetStringStr("biography")); + client->GetPlayer()->GetInfoStruct()->flags = result.GetInt32Str("flags"); + client->GetPlayer()->GetInfoStruct()->flags2 = result.GetInt32Str("flags2"); + client->GetPlayer()->SetLastName(result.GetStringStr("last_name")); + + // new resist types + info->elemental_base = result.GetInt16Str("elemental"); + info->arcane_base = result.GetInt16Str("arcane"); + info->noxious_base = result.GetInt16Str("noxious"); + // new savagery and dissonance + client->GetPlayer()->SetSavagery(result.GetSInt16Str("savagery")); + client->GetPlayer()->SetDissonance(result.GetSInt16Str("dissonance")); + client->GetPlayer()->SetTotalSavageryBase(client->GetPlayer()->GetTotalSavagery()); + client->GetPlayer()->SetTotalDissonanceBase(client->GetPlayer()->GetTotalDissonance()); + } + + return true; + } + else + { + LogWrite(PLAYER__ERROR, 0, "Player", "Error loading character_details for '%s' (char_id: %u)", client->GetPlayer()->GetName(), id); + return false; + } +} + +bool WorldDatabase::loadCharacter(const char* ch_name, int32 account_id, Client* client){ + Query query, query4; + MYSQL_ROW row, row4; + int32 id = 0; + query.escaped_name = getEscapeString(ch_name); + MYSQL_RES* result = query.RunQuery2(Q_SELECT, "SELECT id, current_zone_id, x, y, z, heading, admin_status, race, model_type, class, deity, level, gender, tradeskill_class, tradeskill_level, wing_type, hair_type, chest_type, legs_type, soga_wing_type, soga_hair_type, soga_chest_type, soga_legs_type, 0xFFFFFFFF - crc32(name), facial_hair_type, soga_facial_hair_type,instance_id,last_saved, DATEDIFF(curdate(), created_date) as accage FROM characters where name='%s' and account_id=%i AND deleted = 0", query.escaped_name, account_id); + // no character found + if ( result == NULL ) { + LogWrite(PLAYER__ERROR, 0, "Player", "Error loading character for '%s'", ch_name); + return false; + } + + if (mysql_num_rows(result) == 1){ + row = mysql_fetch_row(result); + + id = strtoul(row[0], NULL, 0); + LogWrite(PLAYER__DEBUG, 0, "Player", "Loading character for '%s' (char_id: %u)", ch_name, id); + + client->SetCharacterID(id); + client->GetPlayer()->SetCharacterID(id); + client->SetAccountID(account_id); + client->GetPlayer()->SetName(ch_name); + client->GetPlayer()->SetX(atof(row[2])); + client->GetPlayer()->SetY(atof(row[3])); + client->GetPlayer()->SetZ(atof(row[4])); + client->GetPlayer()->SetHeading(atof(row[5])); + client->SetAdminStatus(atoi(row[6])); + client->GetPlayer()->SetRace(atoi(row[7])); + client->GetPlayer()->SetModelType(atoi(row[8])); + client->GetPlayer()->SetAdventureClass(atoi(row[9])); + client->GetPlayer()->SetDeity(atoi(row[10])); + client->GetPlayer()->SetLevel(atoi(row[11])); + client->GetPlayer()->SetGender(atoi(row[12])); + client->GetPlayer()->SetTradeskillClass(atoi(row[13])); + client->GetPlayer()->SetTSLevel(atoi(row[14])); + + LogWrite(MISC__TODO, 1, "TODO", "Fix client->GetPlayer()->SetArtLevel(atoi(row[14]));\n\t(%s, function: %s, line #: %i)", __FILE__, __FUNCTION__, __LINE__); + + client->GetPlayer()->features.wing_type = atoi(row[15]); + client->GetPlayer()->features.hair_type = atoi(row[16]); + client->GetPlayer()->features.chest_type = atoi(row[17]); + client->GetPlayer()->features.legs_type = atoi(row[18]); + + LogWrite(MISC__TODO, 1, "TODO", "Fix SOGA appearances here\n\t(%s, function: %s, line #: %i)", __FILE__, __FUNCTION__, __LINE__); + + client->GetPlayer()->features.wing_type = atoi(row[19]); + client->GetPlayer()->features.soga_hair_type = atoi(row[20]); + client->GetPlayer()->features.soga_chest_type = atoi(row[21]); + client->GetPlayer()->features.soga_legs_type = atoi(row[22]); + client->SetNameCRC(atoul(row[23])); + client->GetPlayer()->features.hair_face_type = atoi(row[24]); + client->GetPlayer()->features.soga_hair_face_type = atoi(row[25]); + int32 instanceid = atoi(row[26]); + int32 zoneid = atoul(row[1]); +/* +JA Notes on SOGA: I think there are many more settings to add than were commented out here, +because I can load a SOGA model player, but some features are missing (Barbarian WOAD, Skin tons, etc) +SOGA chars looked ok in LoginServer screen tho... odd. +*/ + + // load character instances here + if ( LoadCharacterInstances(client) ) + client->UpdateCharacterInstances(); + + if ( instanceid > 0 ) + client->SetCurrentZoneByInstanceID(instanceid, zoneid); + else + client->SetCurrentZone(zoneid); + + + + int32 lastsavedtime = atoi(row[27]); + client->SetLastSavedTimeStamp(lastsavedtime); + + if (row[28]) + client->GetPlayer()->GetPlayerInfo()->SetAccountAge(atoi(row[28])); + + LoadCharacterFriendsIgnoreList(client->GetPlayer()); + MYSQL_RES* result4 = query4.RunQuery2(Q_SELECT, "SELECT `guild_id` FROM `guild_members` WHERE `char_id`=%u", id); + if (result4 && (row4 = mysql_fetch_row(result4))) { + Guild* guild = guild_list.GetGuild(atoul(row4[0])); + if (guild) { + client->GetPlayer()->SetGuild(guild); + string subtitle; + subtitle.append("<").append(guild->GetName()).append(">"); + client->GetPlayer()->SetSubTitle(subtitle.c_str()); + } + } + + LoadCharacterHistory(id, client->GetPlayer()); + LoadCharacterLUAHistory(id, client->GetPlayer()); + LoadPlayerStatistics(client->GetPlayer(), id); + LoadPlayerCollections(client->GetPlayer()); + LoadPlayerRecipes(client->GetPlayer()); + //LoadPlayerAchievements(client->GetPlayer()); + LoadPlayerAchievementsUpdates(client->GetPlayer()); + LoadAppearances(client->GetCurrentZone(), client); + return LoadCharacterStats(id, account_id, client); + } + + // should not be here... + LogWrite(PLAYER__ERROR, 0, "Player", "Error loading character for '%s'", ch_name); + return false; +} + +bool WorldDatabase::InsertCharacterStats(int32 character_id, int8 class_id, int8 race_id){ + Query query1; + Query query2; + Query query3; + Query query4; + Query query5; + + /* Blank record */ + query1.RunQuery2(Q_INSERT, "INSERT INTO `character_details` (`char_id`) VALUES (%u)", character_id); + + /* Using the class id and race id */ + query2.RunQuery2(Q_UPDATE, "UPDATE character_details c, starting_details s SET c.max_hp = s.max_hp, c.hp = s.max_hp, c.max_power = s.max_power, c.power = s.max_power, c.str = s.str, c.sta = s.sta, c.agi = s.agi, c.wis = s.wis, c.intel = s.intel,c.heat = s.heat, c.cold = s.cold, c.magic = s.magic, c.mental = s.mental, c.divine = s.divine, c.disease = s.disease, c.poison = s.poison, c.coin_copper = s.coin_copper, c.coin_silver = s.coin_silver, c.coin_gold = s.coin_gold, c.coin_plat = s.coin_plat, c.status_points = s.status_points WHERE s.race_id = %d AND class_id = %d AND char_id = %u", race_id, class_id, character_id); + if (query2.GetAffectedRows() > 0) + return true; + + /* Using the class id and race id = 255 */ + query3.RunQuery2(Q_UPDATE, "UPDATE character_details c, starting_details s SET c.max_hp = s.max_hp, c.hp = s.max_hp, c.max_power = s.max_power, c.power = s.max_power, c.str = s.str, c.sta = s.sta, c.agi = s.agi, c.wis = s.wis, c.intel = s.intel,c.heat = s.heat, c.cold = s.cold, c.magic = s.magic, c.mental = s.mental, c.divine = s.divine, c.disease = s.disease, c.poison = s.poison, c.coin_copper = s.coin_copper, c.coin_silver = s.coin_silver, c.coin_gold = s.coin_gold, c.coin_plat = s.coin_plat, c.status_points = s.status_points WHERE s.race_id = 255 AND class_id = %d AND char_id = %u", class_id, character_id); + if (query3.GetAffectedRows() > 0) + return true; + + /* Using class id = 255 and the race id */ + query4.RunQuery2(Q_UPDATE, "UPDATE character_details c, starting_details s SET c.max_hp = s.max_hp, c.hp = s.max_hp, c.max_power = s.max_power, c.power = s.max_power, c.str = s.str, c.sta = s.sta, c.agi = s.agi, c.wis = s.wis, c.intel = s.intel,c.heat = s.heat, c.cold = s.cold, c.magic = s.magic, c.mental = s.mental, c.divine = s.divine, c.disease = s.disease, c.poison = s.poison, c.coin_copper = s.coin_copper, c.coin_silver = s.coin_silver, c.coin_gold = s.coin_gold, c.coin_plat = s.coin_plat, c.status_points = s.status_points WHERE s.race_id = %d AND class_id = 255 AND char_id = %u", race_id, character_id); + if (query4.GetAffectedRows() > 0) + return true; + + /* Using class id = 255 and race id = 255 */ + query5.RunQuery2(Q_UPDATE, "UPDATE character_details c, starting_details s SET c.max_hp = s.max_hp, c.hp = s.max_hp, c.max_power = s.max_power, c.power = s.max_power, c.str = s.str, c.sta = s.sta, c.agi = s.agi, c.wis = s.wis, c.intel = s.intel,c.heat = s.heat, c.cold = s.cold, c.magic = s.magic, c.mental = s.mental, c.divine = s.divine, c.disease = s.disease, c.poison = s.poison, c.coin_copper = s.coin_copper, c.coin_silver = s.coin_silver, c.coin_gold = s.coin_gold, c.coin_plat = s.coin_plat, c.status_points = s.status_points WHERE s.race_id = 255 AND class_id = 255 AND char_id = %u", character_id); + if (query5.GetAffectedRows() > 0) + return true; + + return false; +} + +int32 WorldDatabase::GetCharacterTimeStamp(int32 character_id, int32 account_id,bool* char_exists){ + Query query; + MYSQL_RES* result = query.RunQuery2(Q_SELECT, "SELECT unix_timestamp FROM characters where id=%i and account_id=%i",character_id,account_id); + if(result && mysql_num_rows(result) > 0) { + MYSQL_ROW row; + row = mysql_fetch_row(result); + *char_exists = true; + return atoi(row[0]); // Return timestamp + } + else + LogWrite(WORLD__ERROR, 0, "World", "Error in GetCharacterTimeStamp query '%s': %s", query.GetQuery(), query.GetError()); + + *char_exists = false; + return 0; +} + +int32 WorldDatabase::GetCharacterTimeStamp(int32 character_id) { + Query query; + MYSQL_ROW row; + MYSQL_RES *result = query.RunQuery2(Q_SELECT, "SELECT unix_timestamp FROM characters WHERE id=%u", character_id); + int32 ret = 0; + + if (result && (row = mysql_fetch_row(result))) + ret = atoul(row[0]); + + return ret; +} + +bool WorldDatabase::UpdateCharacterTimeStamp(int32 account_id, int32 character_id, int32 timestamp_update){ + Query query; + string update_charts = string("update characters set unix_timestamp=%i where id=%i and account_id=%i"); + query.RunQuery2(Q_UPDATE, update_charts.c_str(),timestamp_update,character_id,account_id); + if(!query.GetAffectedRows()) + { + LogWrite(WORLD__ERROR, 0, "World", "Error in UpdateCharacterTimeStamp query '%s': %s", query.GetQuery(), query.GetError()); + return false; + } + + return true; +} + +//gets the name FROM the db with the right letters in caps +string WorldDatabase::GetPlayerName(char* name){ + Query query; + string ret = ""; + MYSQL_RES* result = query.RunQuery2(Q_SELECT, "SELECT name FROM characters where name='%s'", getSafeEscapeString(name).c_str()); + if(result && mysql_num_rows(result) > 0) { + MYSQL_ROW row; + row = mysql_fetch_row(result); + if(row[0]) + ret = string(row[0]); + } + return ret; +} + +int32 WorldDatabase::GetCharacterID(const char* name) { + int32 id = 0; + Query query; + if (name) { + MYSQL_RES* result = query.RunQuery2(Q_SELECT, "SELECT `id` FROM `characters` WHERE `name`='%s'", name); + if (result && mysql_num_rows(result) > 0) { + MYSQL_ROW row; + row = mysql_fetch_row(result); + id = atoul(row[0]); + } + } + return id; +} + +int32 WorldDatabase::GetCharacterCurrentZoneID(int32 character_id) { + int32 id = 0; + Query query; + MYSQL_RES* result = query.RunQuery2(Q_SELECT, "SELECT `current_zone_id` FROM `characters` WHERE `id`=%u", character_id); + if (result && mysql_num_rows(result) > 0) { + MYSQL_ROW row; + row = mysql_fetch_row(result); + id = atoul(row[0]); + } + return id; +} + +int32 WorldDatabase::GetCharacterAccountID(int32 character_id) { + int32 id = 0; + Query query; + MYSQL_RES* result = query.RunQuery2(Q_SELECT, "SELECT `account_id` FROM `characters` WHERE `id`=%u", character_id); + if (result && mysql_num_rows(result) > 0) { + MYSQL_ROW row; + row = mysql_fetch_row(result); + id = atoul(row[0]); + } + return id; +} + +sint16 WorldDatabase::GetHighestCharacterAdminStatus(int32 account_id){ + Query query; + MYSQL_RES* result = query.RunQuery2(Q_SELECT, "SELECT max(admin_status) FROM characters where account_id=%i ",account_id); + if(result && mysql_num_rows(result) > 0) { + MYSQL_ROW row; + row = mysql_fetch_row(result); + if ( row[0] != NULL ) + return atoi(row[0]); // Return characters status + else + return 0; + } + + return 0; +} + +sint16 WorldDatabase::GetLowestCharacterAdminStatus(int32 account_id){ + Query query; + MYSQL_RES* result = query.RunQuery2(Q_SELECT, "SELECT min(admin_status) FROM characters where account_id=%i ",account_id); + if(result && mysql_num_rows(result) > 0) { + MYSQL_ROW row; + row = mysql_fetch_row(result); + if ( row[0] != NULL ) + return atoi(row[0]); // Return characters status + else + return 0; + } + + return 0; +} + +sint16 WorldDatabase::GetCharacterAdminStatus(char* character_name){ + Query query; + MYSQL_RES* result = query.RunQuery2(Q_SELECT, "SELECT admin_status FROM characters where name='%s'", getSafeEscapeString(character_name).c_str()); + if(result && mysql_num_rows(result) > 0) { + MYSQL_ROW row; + row = mysql_fetch_row(result); + return atoi(row[0]); // Return characters level + } + else + LogWrite(WORLD__ERROR, 0, "World", "Error in GetCharacterAdminStatus query '%s': %s", query.GetQuery(), query.GetError()); + + return -10; +} + +sint16 WorldDatabase::GetCharacterAdminStatus(int32 account_id , int32 char_id){ + Query query; + MYSQL_RES* result = query.RunQuery2(Q_SELECT, "SELECT admin_status FROM characters where account_id=%i and id=%i",account_id,char_id); + if(result && mysql_num_rows(result) > 0) { + MYSQL_ROW row; + row = mysql_fetch_row(result); + return atoi(row[0]); // Return characters status + } + else{ + Query query2; + result = query2.RunQuery2(Q_SELECT, "SELECT count(id) FROM characters where account_id=%i and id=%i",account_id,char_id); + if(result && mysql_num_rows(result) > 0) { + MYSQL_ROW row; + row = mysql_fetch_row(result); + if(atoi(row[0]) == 0) //old character, needs to be deleted FROM login server + return -10; + return -8; + } + else + LogWrite(WORLD__ERROR, 0, "World", "Error in GetCharacterAdminStatus query '%s': %s", query.GetQuery(), query.GetError()); + } + return PLAY_ERROR_PROBLEM; +} + +bool WorldDatabase::UpdateAdminStatus(char* character_name, sint16 flag){ + Query query; + string update_status = string("update characters set admin_status=%i where name='%s'"); + query.RunQuery2(Q_UPDATE, update_status.c_str(),flag,character_name); + if(!query.GetAffectedRows()) + { + LogWrite(WORLD__ERROR, 0, "World", "Error in UpdateAdminStatus query '%s': %s", query.GetQuery(), query.GetError()); + return false; + } + + return true; +} + +void WorldDatabase::SaveCharacterFloats(int32 char_id, const char* type, float float1, float float2, float float3){ + Query query; + string create_char = string("insert into char_colors (char_id, type, red, green, blue, signed_value) values(%i,'%s',%i,%i,%i, 1)"); + query.RunQuery2(Q_INSERT, create_char.c_str(), char_id, type, (sint8)(float1*100), (sint8)(float2*100), (sint8)(float3*100)); + if(query.GetError() && strlen(query.GetError()) > 0){ + LogWrite(WORLD__ERROR, 0, "World", "Error in SaveCharacterFloats query '%s': %s", query.GetQuery(), query.GetError()); + } +} + +void WorldDatabase::SaveCharacterColors(int32 char_id, const char* type, EQ2_Color color){ + Query query; + string create_char = string("insert into char_colors (char_id, type, red, green, blue) values(%i,'%s',%i,%i,%i)"); + query.RunQuery2(Q_INSERT, create_char.c_str(), char_id, type, color.red, color.green, color.blue); + if(query.GetError() && strlen(query.GetError()) > 0){ + LogWrite(WORLD__ERROR, 0, "World", "Error in SaveCharacterColors query '%s': %s", query.GetQuery(), query.GetError()); + } +} + +void WorldDatabase::SaveNPCAppearanceEquipment(int32 spawn_id, int8 slot_id, int16 type, int8 red, int8 green, int8 blue, int8 hred, int8 hgreen, int8 hblue){ + Query query; + string appearance = string("INSERT INTO npc_appearance_equip (spawn_id, slot_id, equip_type, red, green, blue, highlight_red, highlight_green, highlight_blue) values (%i, %i, %i, %i, %i, %i, %i, %i, %i) ON DUPLICATE KEY UPDATE equip_type=%i, red=%i, green=%i, blue=%i, highlight_red=%i, highlight_green=%i, highlight_blue=%i"); + query.RunQuery2(Q_INSERT, appearance.c_str(), spawn_id, slot_id, type, red, green, blue, hred, hgreen, hblue, type, red, green, blue, hred, hgreen, hblue); + if(query.GetError() && strlen(query.GetError()) > 0){ + LogWrite(WORLD__ERROR, 0, "World", "Error in SaveNPCAppearanceEquipment query '%s': %s", query.GetQuery(), query.GetError()); + } +} + +int32 WorldDatabase::LoadNPCAppearanceEquipmentData(ZoneServer* zone){ + Query query; + MYSQL_ROW row; + + int32 spawn_id = 0, new_spawn_id = 0, count = 0; + NPC* npc = 0; + int8 slot = 0; + MYSQL_RES* result = query.RunQuery2(Q_SELECT, "SELECT spawn_id, slot_id, equip_type, red, green, blue, highlight_red, highlight_green, highlight_blue FROM npc_appearance_equip ORDER BY spawn_id"); + while(result && (row = mysql_fetch_row(result))){ + new_spawn_id = atoul(row[0]); + if(new_spawn_id != spawn_id){ + npc = zone->GetNPC(new_spawn_id, true); + if(!npc) + continue; + if(spawn_id > 0) + count++; + spawn_id = new_spawn_id; + } + slot = atoi(row[1]); + if(slot < NUM_SLOTS){ + npc->equipment.equip_id[slot] = atoi(row[2]); + npc->equipment.color[slot].red = atoi(row[3]); + npc->equipment.color[slot].green = atoi(row[4]); + npc->equipment.color[slot].blue = atoi(row[5]); + npc->equipment.highlight[slot].red = atoi(row[6]); + npc->equipment.highlight[slot].green = atoi(row[7]); + npc->equipment.highlight[slot].blue = atoi(row[8]); + } + } + if(query.GetError() && strlen(query.GetError()) > 0) + LogWrite(WORLD__ERROR, 0, "World", "Error in LoadNPCAppearanceEquipmentData query '%s': %s", query.GetQuery(), query.GetError()); + return count; +} + +int16 WorldDatabase::GetAppearanceID(string name){ + int32 id = 0; + Query query; + MYSQL_ROW row; + query.escaped_name = getEscapeString(name.c_str()); + MYSQL_RES* result = query.RunQuery2(Q_SELECT, "SELECT appearance_id FROM appearances where name='%s'", query.escaped_name); + if(result && mysql_num_rows(result) == 1){ + row = mysql_fetch_row(result); + id = atoi(row[0]); + } + return id; +} + +vector* WorldDatabase::GetAppearanceIDsLikeName(string name, bool filtered) { + vector* ids = 0; + Query query; + MYSQL_ROW row; + query.escaped_name = getEscapeString(name.c_str()); + MYSQL_RES* result; + if (filtered) + result = query.RunQuery2(Q_SELECT, "SELECT `appearance_id` FROM `appearances` WHERE `name` RLIKE '%s' AND `name` NOT RLIKE 'ghost' AND `name` NOT RLIKE 'headless' AND `name` NOT RLIKE 'elemental' AND `name` NOT RLIKE 'test' AND `name` NOT RLIKE 'zombie' AND `name` NOT RLIKE 'vampire'", query.escaped_name); + else + result = query.RunQuery2(Q_SELECT, "SELECT `appearance_id` FROM `appearances` WHERE `name` RLIKE '%s' AND `name` NOT RLIKE 'ghost' AND `name`", query.escaped_name); + while (result && (row = mysql_fetch_row(result))) { + if (!ids) + ids = new vector; + ids->push_back(atoi(row[0])); + } + return ids; +} + +string WorldDatabase::GetAppearanceName(int16 appearance_id) { + Query query; + MYSQL_ROW row; + string name; + MYSQL_RES* result = query.RunQuery2(Q_SELECT, "SELECT `name` FROM `appearances` WHERE `appearance_id`=%u", appearance_id); + if (result && (row = mysql_fetch_row(result))) + name = string(row[0]); + return name; +} + +void WorldDatabase::UpdateRandomize(int32 spawn_id, sint32 value) { + Query query; + query.RunQuery2(Q_UPDATE, "UPDATE `spawn_npcs` SET `randomize`=`randomize` + %i WHERE `spawn_id`=%u", value, spawn_id); +} + +int32 WorldDatabase::SaveCharacter(PacketStruct* create, int32 loginID){ + Query query; + int8 race_id = create->getType_int8_ByName("race"); + int8 class_id = create->getType_int8_ByName("class");//Normal server + //int8 class_id = 0; //CLassic Server Only + int8 gender_id = create->getType_int8_ByName("gender"); + sint16 auto_admin_status = 0; + + // fetch rules related to setting auto-admin status for server + bool auto_admin_players = rule_manager.GetGlobalRule(R_World, AutoAdminPlayers)->GetBool(); + bool auto_admin_gm = rule_manager.GetGlobalRule(R_World, AutoAdminGMs)->GetBool(); + + /* + The way I think this is supposed to work :) is if any of your chars are already GM, and AutoAdminGMs rule is true, + set the new character's admin_status to your highest status for any character active on your loginID. + - If status > 0, new character > 0 + - If status = 0, new character = 0 + - If status < 0, new character < 0, too... even if auto_admin_gm is true + + If we're not a GM (status = 0) but AutoAdminPlayers rule is true, + set the new character's admin_status to the default set in AutoAdminStatusValue rule. + + Else, if both rules are False, set everyone to 0 like normal. + + */ + + auto_admin_status = GetHighestCharacterAdminStatus(loginID); + + if( auto_admin_status > 0 && auto_admin_gm ) + LogWrite(WORLD__WARNING, 0, "World", "New character '%s' granted GM status (%i) from accountID: %i", create->getType_EQ2_16BitString_ByName("name").data.c_str(), auto_admin_status, loginID); + else if( auto_admin_players ) + { + auto_admin_status = rule_manager.GetGlobalRule(R_World, AutoAdminStatusValue)->GetSInt16(); + LogWrite(WORLD__DEBUG, 0, "World", "New character '%s' granted AutoAdminPlayer status: %i", create->getType_EQ2_16BitString_ByName("name").data.c_str(), auto_admin_status); + } + else + auto_admin_status = 0; + + string create_char = string("Insert into characters (account_id, server_id, name, race, class, gender, deity, body_size, body_age, soga_wing_type, soga_chest_type, soga_legs_type, soga_hair_type, soga_model_type, legs_type, chest_type, wing_type, hair_type, model_type, facial_hair_type, soga_facial_hair_type, created_date, last_saved, admin_status) values(%i, %i, '%s', %i, %i, %i, %i, %f, %f, %i, %i, %i, %i, %i, %i, %i, %i, %i, %i, %i, %i, now(), unix_timestamp(), %i)"); + + query.RunQuery2(Q_INSERT, create_char.c_str(), + loginID, + create->getType_int32_ByName("server_id"), + create->getType_EQ2_16BitString_ByName("name").data.c_str(), + race_id, + class_id, + gender_id, + create->getType_int8_ByName("deity"), + create->getType_float_ByName("body_size"), + create->getType_float_ByName("body_age"), + GetAppearanceID(create->getType_EQ2_16BitString_ByName("soga_wing_file").data), + GetAppearanceID(create->getType_EQ2_16BitString_ByName("soga_chest_file").data), + GetAppearanceID(create->getType_EQ2_16BitString_ByName("soga_legs_file").data), + GetAppearanceID(create->getType_EQ2_16BitString_ByName("soga_hair_file").data), + GetAppearanceID(create->getType_EQ2_16BitString_ByName("soga_race_file").data), + GetAppearanceID(create->getType_EQ2_16BitString_ByName("legs_file").data), + GetAppearanceID(create->getType_EQ2_16BitString_ByName("chest_file").data), + GetAppearanceID(create->getType_EQ2_16BitString_ByName("wing_file").data), + GetAppearanceID(create->getType_EQ2_16BitString_ByName("hair_file").data), + GetAppearanceID(create->getType_EQ2_16BitString_ByName("race_file").data), + GetAppearanceID(create->getType_EQ2_16BitString_ByName("face_file").data), + GetAppearanceID(create->getType_EQ2_16BitString_ByName("soga_face_file").data), + auto_admin_status); + + if(query.GetError() && strlen(query.GetError()) > 0) + { + LogWrite(PLAYER__ERROR, 0, "Player", "Error in SaveCharacter query '%s': %s", query.GetQuery(), query.GetError()); + return 0; + } + + int32 last_insert_id = query.GetLastInsertedID(); + int32 char_id = last_insert_id; + UpdateStartingFactions(char_id, create->getType_int8_ByName("starting_zone")); + UpdateStartingZone(char_id, class_id, race_id, create->getType_int8_ByName("starting_zone")); + UpdateStartingItems(char_id, class_id, race_id); + UpdateStartingSkills(char_id, class_id, race_id); + UpdateStartingSpells(char_id, class_id, race_id); + UpdateStartingSkillbar(char_id, class_id, race_id); + UpdateStartingTitles(char_id, class_id, race_id, gender_id); + InsertCharacterStats(char_id, class_id, race_id); + + AddNewPlayerToServerGuild(loginID, char_id); + + SaveCharacterColors(char_id,"skin_color", create->getType_EQ2_Color_ByName("skin_color")); + SaveCharacterColors(char_id,"eye_color", create->getType_EQ2_Color_ByName("eye_color")); + SaveCharacterColors(char_id,"hair_color1", create->getType_EQ2_Color_ByName("hair_color1")); + SaveCharacterColors(char_id,"hair_color2", create->getType_EQ2_Color_ByName("hair_color2")); + SaveCharacterColors(char_id,"hair_highlight", create->getType_EQ2_Color_ByName("hair_highlight")); + SaveCharacterColors(char_id,"hair_type_color", create->getType_EQ2_Color_ByName("hair_type_color")); + SaveCharacterColors(char_id,"hair_type_highlight_color", create->getType_EQ2_Color_ByName("hair_type_highlight_color")); + SaveCharacterColors(char_id,"hair_face_color", create->getType_EQ2_Color_ByName("hair_face_color")); + SaveCharacterColors(char_id,"hair_face_highlight_color", create->getType_EQ2_Color_ByName("hair_face_highlight_color")); + SaveCharacterColors(char_id,"wing_color1", create->getType_EQ2_Color_ByName("wing_color1")); + SaveCharacterColors(char_id,"wing_color2", create->getType_EQ2_Color_ByName("wing_color2")); + SaveCharacterColors(char_id,"shirt_color", create->getType_EQ2_Color_ByName("shirt_color")); + SaveCharacterColors(char_id,"unknown_chest_color", create->getType_EQ2_Color_ByName("unknown_chest_color")); + SaveCharacterColors(char_id,"pants_color", create->getType_EQ2_Color_ByName("pants_color")); + SaveCharacterColors(char_id,"unknown_legs_color", create->getType_EQ2_Color_ByName("unknown_legs_color")); + SaveCharacterColors(char_id,"unknown9", create->getType_EQ2_Color_ByName("unknown9")); + SaveCharacterFloats(char_id,"eye_type", create->getType_float_ByName("eyes2",0), create->getType_float_ByName("eyes2",1), create->getType_float_ByName("eyes2",2)); + SaveCharacterFloats(char_id,"ear_type", create->getType_float_ByName("ears",0), create->getType_float_ByName("ears",1), create->getType_float_ByName("ears",2)); + SaveCharacterFloats(char_id,"eye_brow_type", create->getType_float_ByName("eye_brows",0), create->getType_float_ByName("eye_brows",1), create->getType_float_ByName("eye_brows",2)); + SaveCharacterFloats(char_id,"cheek_type", create->getType_float_ByName("cheeks",0), create->getType_float_ByName("cheeks",1), create->getType_float_ByName("cheeks",2)); + SaveCharacterFloats(char_id,"lip_type", create->getType_float_ByName("lips",0), create->getType_float_ByName("lips",1), create->getType_float_ByName("lips",2)); + SaveCharacterFloats(char_id,"chin_type", create->getType_float_ByName("chin",0), create->getType_float_ByName("chin",1), create->getType_float_ByName("chin",2)); + SaveCharacterFloats(char_id,"nose_type", create->getType_float_ByName("nose",0), create->getType_float_ByName("nose",1), create->getType_float_ByName("nose",2)); + SaveCharacterFloats(char_id,"body_size", create->getType_float_ByName("body_size",0), 0, 0); + + SaveCharacterColors(char_id,"soga_skin_color", create->getType_EQ2_Color_ByName("soga_skin_color")); + SaveCharacterColors(char_id,"soga_eye_color", create->getType_EQ2_Color_ByName("soga_eye_color")); + SaveCharacterColors(char_id,"soga_hair_color1", create->getType_EQ2_Color_ByName("soga_hair_color1")); + SaveCharacterColors(char_id,"soga_hair_color2", create->getType_EQ2_Color_ByName("soga_hair_color2")); + SaveCharacterColors(char_id,"soga_hair_highlight", create->getType_EQ2_Color_ByName("soga_hair_highlight")); + SaveCharacterColors(char_id,"soga_hair_type_color", create->getType_EQ2_Color_ByName("soga_hair_type_color")); + SaveCharacterColors(char_id,"soga_hair_type_highlight_color", create->getType_EQ2_Color_ByName("soga_hair_type_highlight_color")); + SaveCharacterColors(char_id,"soga_hair_face_color", create->getType_EQ2_Color_ByName("soga_hair_face_color")); + SaveCharacterColors(char_id,"soga_hair_face_highlight_color", create->getType_EQ2_Color_ByName("soga_hair_face_highlight_color")); + SaveCharacterColors(char_id,"soga_wing_color1", create->getType_EQ2_Color_ByName("soga_wing_color1")); + SaveCharacterColors(char_id,"soga_wing_color2", create->getType_EQ2_Color_ByName("soga_wing_color2")); + SaveCharacterColors(char_id,"soga_shirt_color", create->getType_EQ2_Color_ByName("soga_shirt_color")); + SaveCharacterColors(char_id,"soga_unknown_chest_color", create->getType_EQ2_Color_ByName("soga_unknown_chest_color")); + SaveCharacterColors(char_id,"soga_pants_color", create->getType_EQ2_Color_ByName("soga_pants_color")); + SaveCharacterColors(char_id,"soga_unknown_legs_color", create->getType_EQ2_Color_ByName("soga_unknown_legs_color")); + SaveCharacterColors(char_id,"soga_unknown13", create->getType_EQ2_Color_ByName("soga_unknown13")); + SaveCharacterFloats(char_id,"soga_eye_type", create->getType_float_ByName("soga_eyes2",0), create->getType_float_ByName("soga_eyes2",1), create->getType_float_ByName("soga_eyes2",2)); + SaveCharacterFloats(char_id,"soga_ear_type", create->getType_float_ByName("soga_ears",0), create->getType_float_ByName("soga_ears",1), create->getType_float_ByName("soga_ears",2)); + SaveCharacterFloats(char_id,"soga_eye_brow_type", create->getType_float_ByName("soga_eye_brows",0), create->getType_float_ByName("soga_eye_brows",1), create->getType_float_ByName("soga_eye_brows",2)); + SaveCharacterFloats(char_id,"soga_cheek_type", create->getType_float_ByName("soga_cheeks",0), create->getType_float_ByName("soga_cheeks",1), create->getType_float_ByName("soga_cheeks",2)); + SaveCharacterFloats(char_id,"soga_lip_type", create->getType_float_ByName("soga_lips",0), create->getType_float_ByName("soga_lips",1), create->getType_float_ByName("soga_lips",2)); + SaveCharacterFloats(char_id,"soga_chin_type", create->getType_float_ByName("soga_chin",0), create->getType_float_ByName("soga_chin",1), create->getType_float_ByName("soga_chin",2)); + SaveCharacterFloats(char_id,"soga_nose_type", create->getType_float_ByName("soga_nose",0), create->getType_float_ByName("soga_nose",1), create->getType_float_ByName("soga_nose",2)); + + return char_id; +} + +int8 WorldDatabase::CheckNameFilter(const char* name) { + // the minimum 4 is enforced by the client too + if(!name || strlen(name) < 4 || strlen(name) > 15) // Even 20 char length is long... + return BADNAMELENGTH_REPLY; + uchar* checkname = (uchar*)name; + for (int32 i = 0; i < strlen(name); i++) + { + if(!alpha_check(checkname[i])) + return NAMEINVALID_REPLY; + } + Query query; + LogWrite(WORLD__DEBUG, 0, "World", "Name check on: %s", name); + MYSQL_RES* result = query.RunQuery2(Q_SELECT, "SELECT count(*) FROM characters WHERE name='%s'",name); + if(result && mysql_num_rows(result) > 0) { + MYSQL_ROW row; + row = mysql_fetch_row(result); + if(row[0] != 0 && atoi(row[0]) > 0) + return NAMETAKEN_REPLY; + } + else + LogWrite(WORLD__ERROR, 0, "World", "Error in CheckNameFilter (name exist check) (Name query '%s': %s", query.GetQuery(), query.GetError()); + + Query query3; + LogWrite(WORLD__DEBUG, 0, "World", "Name check on: %s (Bots table)", name); + MYSQL_RES* result3 = query3.RunQuery2(Q_SELECT, "SELECT count(*) FROM bots WHERE name='%s'", name); + if (result3 && mysql_num_rows(result3) > 0) { + MYSQL_ROW row; + row = mysql_fetch_row(result3); + if (row[0] != 0 && atoi(row[0]) > 0) + return NAMETAKEN_REPLY; + } + else + LogWrite(WORLD__ERROR, 0, "World", "Error in CheckNameFilter (name exist check, bot table) (Name query '%s': %s", query3.GetQuery(), query3.GetError()); + + + + Query query2; + MYSQL_RES* result2 = query2.RunQuery2(Q_SELECT, "SELECT count(*) FROM name_filter WHERE '%s' like name",name); + if(result2 && mysql_num_rows(result2) > 0) { + MYSQL_ROW row; + row = mysql_fetch_row(result2); + if(row[0] != 0 && atoi(row[0]) > 0) + return NAMEFILTER_REPLY; + else if(row[0] != 0 && atoi(row[0]) == 0) + return CREATESUCCESS_REPLY; + } + else + LogWrite(WORLD__ERROR, 0, "World", "Error in CheckNameFilter (name_filter check) query '%s': %s", query.GetQuery(), query.GetError()); + + return UNKNOWNERROR_REPLY; +} + +char* WorldDatabase::GetCharacterName(int32 character_id){ + + LogWrite(WORLD__TRACE, 9, "World", "Enter: %s", __FUNCTION__); + + Query query; + char* name = 0; + MYSQL_RES* result = query.RunQuery2(Q_SELECT, "SELECT name FROM characters where id=%u",character_id); + if(result && mysql_num_rows(result) > 0) { + MYSQL_ROW row; + row = mysql_fetch_row(result); + if(row[0] && strlen(row[0]) > 0) + { + name = new char[strlen(row[0])+1]; + memset(name,0, strlen(row[0])+1); + strcpy(name, row[0]); + } + } + else + LogWrite(WORLD__ERROR, 0, "World", "Error in GetCharacterName query '%s': %s", query.GetQuery(), query.GetError()); + + LogWrite(WORLD__TRACE, 9, "World", "Exit: %s", __FUNCTION__); + return name; +} + +int8 WorldDatabase::GetCharacterLevel(int32 character_id){ + Query query; + MYSQL_RES* result = query.RunQuery2(Q_SELECT, "SELECT level FROM characters where id=%u",character_id); + if(result && mysql_num_rows(result) > 0) { + MYSQL_ROW row; + row = mysql_fetch_row(result); + return atoi(row[0]); // Return characters level + } + else + LogWrite(WORLD__ERROR, 0, "World", "Error in GetCharacterLevel query '%s': %s", query.GetQuery(), query.GetError()); + + return 0; +} + +int16 WorldDatabase::GetCharacterModelType(int32 character_id){ + Query query; + MYSQL_RES* result = query.RunQuery2(Q_SELECT, "SELECT model_type FROM characters where id=%u",character_id); + if(result && mysql_num_rows(result) > 0) { + MYSQL_ROW row; + row = mysql_fetch_row(result); + return atoi(row[0]); // Return characters race + } + else + LogWrite(WORLD__ERROR, 0, "World", "Error in GetCharacterModelType query '%s': %s", query.GetQuery(), query.GetError()); + + return 0; +} + +int8 WorldDatabase::GetCharacterClass(int32 character_id){ + Query query; + MYSQL_RES* result = query.RunQuery2(Q_SELECT, "SELECT class FROM characters where id=%u",character_id); + if(result && mysql_num_rows(result) > 0) { + MYSQL_ROW row; + row = mysql_fetch_row(result); + return atoi(row[0]); // Return characters class + } + else + LogWrite(WORLD__ERROR, 0, "World", "Error in GetCharacterClass query '%s': %s", query.GetQuery(), query.GetError()); + + return 0; +} + +int8 WorldDatabase::GetCharacterGender(int32 character_id){ + Query query; + MYSQL_RES* result = query.RunQuery2(Q_SELECT, "SELECT gender FROM characters where id=%u",character_id); + if(result && mysql_num_rows(result) > 0) { + MYSQL_ROW row; + row = mysql_fetch_row(result); + return atoi(row[0]); // Return characters gender + } + else + LogWrite(WORLD__ERROR, 0, "World", "Error in GetCharacterGender query '%s': %s", query.GetQuery(), query.GetError()); + + return 0; +} + +void WorldDatabase::DeleteCharacterQuest(int32 quest_id, int32 char_id, bool repeated_quest) { + if (repeated_quest) { + if (!database_new.Query("UPDATE `character_quests` SET `given_date` = `completed_date` WHERE `char_id` = %u AND `quest_id` = %u", char_id, quest_id)) + LogWrite(DATABASE__ERROR, 0, "DBNew", "Error (%u) in DeleteCharacterQuest query:\n%s", database_new.GetError(), database_new.GetErrorMsg()); + } + else { + if (!database_new.Query("DELETE FROM `character_quests` WHERE `char_id` = %u AND `quest_id` = %u", char_id, quest_id)) + LogWrite(DATABASE__ERROR, 0, "DBNew", "Error (%u) in DeleteCharacterQuest query:\n%s", database_new.GetError(), database_new.GetErrorMsg()); + } + + if (!database_new.Query("DELETE FROM `character_quest_progress` WHERE `char_id` = %u AND `quest_id` = %u", char_id, quest_id)) + LogWrite(DATABASE__ERROR, 0, "DBNew", "Error (%u) in DeleteCharacterQuest query:\n%s", database_new.GetError(), database_new.GetErrorMsg()); +} + +void WorldDatabase::SaveCharacterSkills(Client* client){ + vector* skills = client->GetPlayer()->GetSkills()->GetSaveNeededSkills(); + if(skills){ + Query query; + if(skills->size() > 0){ + Skill* skill = 0; + for(int32 i=0;isize();i++){ + skill = skills->at(i); + query.RunQuery2(Q_REPLACE, "replace into character_skills (char_id, skill_id, current_val, max_val) values(%u, %u, %i, %i)", client->GetCharacterID(), skill->skill_id, skill->current_val, skill->max_val); + } + if(query.GetErrorNumber() && query.GetError() && query.GetErrorNumber() < 0xFFFFFFFF) + LogWrite(WORLD__ERROR, 0, "World", "Error in SaveCharacterSkills query '%s': %s", query.GetQuery(), query.GetError()); + } + safe_delete(skills); + } +} + +void WorldDatabase::SaveCharacterQuests(Client* client){ + Query query; + map::iterator itr; + master_quest_list.LockQuests(); //prevent reloading until we are done + client->GetPlayer()->LockQuests(); //prevent all quest modifications until we are done + map* quests = client->GetPlayer()->GetPlayerQuests(); + for(itr = quests->begin(); itr != quests->end(); itr++){ + if(client->GetCurrentQuestID() == itr->first){ + query.RunQuery2(Q_UPDATE, "update character_quests set current_quest = 0 where char_id = %u", client->GetCharacterID()); + query.RunQuery2(Q_UPDATE, "update character_quests set current_quest = 1 where char_id = %u and quest_id = %u", client->GetCharacterID(), itr->first); + } + if(itr->second->GetSaveNeeded()){ + query.RunQuery2(Q_INSERT, "insert ignore into character_quests (char_id, quest_id, given_date, quest_giver) values(%u, %u, now(), %u)", client->GetCharacterID(), itr->first, itr->second->GetQuestGiver()); + query.RunQuery2(Q_UPDATE, "update character_quests set tracked = %i, quest_flags = %u, hidden = %i, complete_count = %u where char_id = %u and quest_id = %u", itr->second->IsTracked() ? 1 : 0, itr->second->GetQuestFlags(), itr->second->IsHidden() ? 1 : 0, itr->second->GetCompleteCount(), client->GetCharacterID(), itr->first); + SaveCharacterQuestProgress(client, itr->second); + itr->second->SetSaveNeeded(false); + } + } + if(query.GetErrorNumber() && query.GetError() && query.GetErrorNumber() < 0xFFFFFFFF) + LogWrite(WORLD__ERROR, 0, "World", "Error in SaveCharacterQuests query '%s': %s", query.GetQuery(), query.GetError()); + quests = client->GetPlayer()->GetCompletedPlayerQuests(); + for(itr = quests->begin(); itr != quests->end(); itr++){ + if(itr->second->GetSaveNeeded()){ + query.RunQuery2(Q_DELETE, "delete FROM character_quest_progress where char_id = %u and quest_id = %u", client->GetCharacterID(), itr->first); + + /* incase the quest is completed before the quest could be inserted in the PlayerQuests loop, we first try to insert it. If it already exists then we can just update + * the completed_date */ + query.RunQuery2(Q_INSERT, "INSERT INTO character_quests (char_id, quest_id, quest_giver, current_quest, given_date, completed_date, complete_count) values (%u,%u,%u,0, now(),now(), %u) ON DUPLICATE KEY UPDATE completed_date = now(), complete_count = %u, current_quest = 0", client->GetCharacterID(), itr->first, itr->second->GetQuestGiver(), itr->second->GetCompleteCount(), itr->second->GetCompleteCount()); + itr->second->SetSaveNeeded(false); + } + } + client->GetPlayer()->UnlockQuests(); + master_quest_list.UnlockQuests(); + +} + +void WorldDatabase::SaveCharRepeatableQuest(Client* client, int32 quest_id, int16 quest_complete_count) { + if (!database_new.Query("UPDATE `character_quests` SET `given_date` = now(), complete_count = %u WHERE `char_id` = %u AND `quest_id` = %u", quest_complete_count, client->GetCharacterID(), quest_id)) + LogWrite(DATABASE__ERROR, 0, "DBNew", "DB Error %u\n%s", database_new.GetError(), database_new.GetErrorMsg()); +} + +void WorldDatabase::SaveCharacterQuestProgress(Client* client, Quest* quest){ + Query query; + vector* steps = quest->GetQuestSteps(); + vector::iterator itr; + QuestStep* step = 0; + if(steps){ + for(itr = steps->begin(); itr != steps->end(); itr++){ + step = *itr; + if(step && step->GetQuestCurrentQuantity() > 0) + query.RunQuery2(Q_REPLACE, "replace into character_quest_progress (char_id, quest_id, step_id, progress) values(%u, %u, %u, %i)", client->GetCharacterID(), quest->GetQuestID(), step->GetStepID(), step->GetQuestCurrentQuantity()); + } + } + if(query.GetErrorNumber() && query.GetError() && query.GetErrorNumber() < 0xFFFFFFFF) + LogWrite(WORLD__ERROR, 0, "World", "Error in SaveCharacterQuestProgress query '%s': %s", query.GetQuery(), query.GetError()); +} + +void WorldDatabase::LoadCharacterQuestProgress(Client* client){ + Query query; + MYSQL_RES* result = query.RunQuery2(Q_SELECT, "SELECT character_quest_progress.quest_id, step_id, progress FROM character_quest_progress, character_quests where character_quest_progress.char_id=%u and character_quest_progress.quest_id = character_quests.quest_id and character_quest_progress.char_id = character_quests.char_id ORDER BY character_quest_progress.quest_id",client->GetCharacterID()); + if(result && mysql_num_rows(result) > 0) { + MYSQL_ROW row; + Quest* quest = 0; + int32 quest_id = 0; + map* progress_map = new map(); + while(result && (row = mysql_fetch_row(result))){ + if(quest_id != atoul(row[0])){ + if(quest_id > 0){ + quest = client->GetPlayer()->GetQuest(quest_id); + if(quest) + client->SetPlayerQuest(quest, progress_map); + } + quest_id = atoul(row[0]); + progress_map->clear(); + } + (*progress_map)[atoul(row[1])] = atoul(row[2]); + } + if(progress_map->size() > 0){ + quest = client->GetPlayer()->GetQuest(quest_id); + if(quest) + client->SetPlayerQuest(quest, progress_map); + } + safe_delete(progress_map); + } + else if(query.GetErrorNumber() && query.GetError() && query.GetErrorNumber() < 0xFFFFFFFF) + LogWrite(WORLD__ERROR, 0, "World", "Error in LoadCharacterQuestProgress query '%s': %s", query.GetQuery(), query.GetError()); +} + +void WorldDatabase::LoadCharacterQuests(Client* client){ + LogWrite(PLAYER__DEBUG, 0, "Player", "Loading Character Quests..."); + Query query; + MYSQL_RES* result = query.RunQuery2(Q_SELECT, "SELECT quest_id, DAY(given_date), MONTH(given_date), YEAR(given_date), DAY(completed_date), MONTH(completed_date), YEAR(completed_date), quest_giver, tracked, quest_flags, hidden, UNIX_TIMESTAMP(given_date), UNIX_TIMESTAMP(completed_date), complete_count FROM character_quests WHERE char_id=%u ORDER BY current_quest", client->GetCharacterID()); + if(result && mysql_num_rows(result) > 0) { + MYSQL_ROW row; + Quest* quest = 0; + while(result && (row = mysql_fetch_row(result))){ + quest = master_quest_list.GetQuest(atoul(row[0])); + if(quest) { + + LogWrite(PLAYER__DEBUG, 5, "Player", "\tLoading quest_id: %u", atoul(row[0])); + bool addQuest = true; + + if(row[4] && atoi(row[4]) > 0){ + quest->SetTurnedIn(true); + if(row[4]) + quest->SetDay(atoi(row[4])); + if(row[5]) + quest->SetMonth(atoi(row[5])); + if(row[6] && atoi(row[6]) > 2000) + quest->SetYear(atoi(row[6]) - 2000); + client->GetPlayer()->AddCompletedQuest(quest); + + // Added timestamps to quickly compare given and completed dates + int32 given_timestamp = atoul(row[11]); + int32 completed_timestamp = atoul(row[12]); + + // If given timestamp is greater then completed then this is a repeatable quest we are working on + // so get a fresh quest object to add as an active quest + if (given_timestamp > completed_timestamp) + quest = master_quest_list.GetQuest(atoul(row[0])); + else + addQuest = false; + + quest->SetCompleteCount(atoi(row[13])); + } + + if (addQuest) { + if(row[1]) + quest->SetDay(atoi(row[1])); + if(row[2]) + quest->SetMonth(atoi(row[2])); + if(row[3] && atoi(row[3]) > 2000) + quest->SetYear(atoi(row[3]) - 2000); + quest->SetQuestGiver(atoul(row[7])); + quest->SetTracked(atoi(row[8]) == 1 ? true : false); + quest->SetQuestFlags(atoul(row[9])); + quest->SetHidden(atoi(row[10]) == 1 ? true : false); + client->AddPlayerQuest(quest, false, false); + } + quest->SetSaveNeeded(false); + + // Changed this to call reload with step = 0 for all quests and not + // just quests with quest flags to allow customized set up if needed + if (lua_interface) + lua_interface->CallQuestFunction(quest, "Reload", client->GetPlayer(), 0); + } + } + LoadCharacterQuestProgress(client); + } +} + +void WorldDatabase::LoadCharacterFriendsIgnoreList(Player* player) { + if (player) { + Query query; + MYSQL_ROW row; + MYSQL_RES* result = query.RunQuery2(Q_SELECT, "SELECT `name`, `type` FROM `character_social` WHERE `char_id`=%u", player->GetCharacterID()); + while (result && (row = mysql_fetch_row(result))) { + if (strncmp(row[1], "FRIEND", 6) == 0) + player->AddFriend(row[0], false); + else + player->AddIgnore(row[0], false); + } + } +} + +void WorldDatabase::LoadZoneInfo(ZoneServer* zone){ + Query query; + int32 ruleset_id; + char* escaped = getEscapeString(zone->GetZoneName()); + MYSQL_RES* result = query.RunQuery2(Q_SELECT, "SELECT id, file, description, underworld, safe_x, safe_y, safe_z, min_status, min_level, max_level, instance_type+0, shutdown_timer, zone_motd, default_reenter_time, default_reset_time, default_lockout_time, force_group_to_zone, safe_heading, xp_modifier, ruleset_id, expansion_id, weather_allowed FROM zones where name='%s'",escaped); + if(result && mysql_num_rows(result) > 0) { + MYSQL_ROW row; + row = mysql_fetch_row(result); + zone->SetZoneName(escaped); + zone->SetZoneID(strtoul(row[0], NULL, 0)); + zone->SetZoneFile(row[1]); + zone->SetZoneDescription(row[2]); + zone->SetUnderWorld(atof(row[3])); + zone->SetSafeX(atof(row[4])); + zone->SetSafeY(atof(row[5])); + zone->SetSafeZ(atof(row[6])); + zone->SetMinimumStatus(atoi(row[7])); + zone->SetMinimumLevel(atoi(row[8])); + zone->SetMaximumLevel(atoi(row[9])); + int8 type = (atoi(row[10]) == 0) ? 0 : atoi(row[10]) - 1; + zone->SetInstanceType(type); + zone->SetShutdownTimer(atoul(row[11])); + + char* zone_motd = row[12]; + if (zone_motd && strlen(zone_motd) > 0) + zone->SetZoneMOTD(string(zone_motd)); + + zone->SetDefaultReenterTime(atoi(row[13])); + zone->SetDefaultResetTime(atoi(row[14])); + zone->SetDefaultLockoutTime(atoi(row[15])); + zone->SetForceGroupZoneOption(atoi(row[16])); + zone->SetSafeHeading(atof(row[17])); + zone->SetXPModifier(atof(row[18])); + + if ((ruleset_id = atoul(row[19])) > 0 && !rule_manager.SetZoneRuleSet(zone->GetZoneID(), ruleset_id)) + LogWrite(ZONE__ERROR, 0, "Zones", "Error setting rule set for zone '%s' (%u). A rule set with ID %u does not exist.", zone->GetZoneName(), zone->GetZoneID(), ruleset_id); + + // check data_version to see if client has proper expansion to enter a zone + zone->SetMinimumVersion(GetMinimumClientVersion(atoi(row[20]))); + zone->SetWeatherAllowed(atoi(row[21]) == 0 ? false : true); + + if (zone->IsInstanceZone()) + { + if ( zone->GetInstanceID() < 1 ) + zone->SetupInstance(CreateNewInstance(zone->GetZoneID())); + else + zone->SetupInstance(zone->GetInstanceID()); + } + } + safe_delete_array(escaped); +} + +void WorldDatabase::LoadZoneInfo(ZoneInfo* zone_info) { + Query query; + int32 ruleset_id; + MYSQL_RES* result = query.RunQuery2(Q_SELECT, "SELECT name, file, description, underworld, safe_x, safe_y, safe_z, min_status, min_level, max_level, instance_type, shutdown_timer, zone_motd, default_reenter_time, default_reset_time, default_lockout_time, force_group_to_zone, lua_script, xp_modifier, ruleset_id, expansion_id, always_loaded, city_zone, start_zone, zone_type, weather_allowed FROM zones WHERE id = %u", zone_info->id); + if (result && mysql_num_rows(result) > 0) { + MYSQL_ROW row; + row = mysql_fetch_row(result); + strncpy(zone_info->name, row[0], sizeof(zone_info->name)); + strncpy(zone_info->file, row[1], sizeof(zone_info->file)); + strncpy(zone_info->description, row[2], sizeof(zone_info->description)); + zone_info->underworld = atof(row[3]); + zone_info->safe_x = atof(row[4]); + zone_info->safe_y = atof(row[5]); + zone_info->safe_z = atof(row[6]); + zone_info->min_status = atoi(row[7]); + zone_info->min_level = atoi(row[8]); + zone_info->max_level = atoi(row[9]); + zone_info->instance_type = (atoi(row[10]) == 0) ? 0 : atoi(row[10]) - 1; + zone_info->shutdown_timer = atoul(row[11]); + row[12] == NULL ? strncpy(zone_info->zone_motd, "", sizeof(zone_info->zone_motd)) : strncpy(zone_info->zone_motd, row[12], sizeof(zone_info->zone_motd)); + zone_info->default_reenter_time = atoi(row[13]); + zone_info->default_reset_time = atoi(row[14]); + zone_info->default_lockout_time = atoi(row[15]); + zone_info->force_group_to_zone = atoi(row[16]); + row[17] == NULL ? strncpy(zone_info->lua_script, "", sizeof(zone_info->lua_script)) : strncpy(zone_info->lua_script, row[17], sizeof(zone_info->lua_script)); + zone_info->xp_modifier = atof(row[18]); + zone_info->ruleset_id = atoul(row[19]); + if ((ruleset_id = atoul(row[19])) > 0 && !rule_manager.SetZoneRuleSet(zone_info->id, ruleset_id)) + LogWrite(ZONE__ERROR, 0, "Zones", "Error setting rule set for zone '%s' (%u). A rule set with ID %u does not exist.", zone_info->name, zone_info->id, ruleset_id); + + zone_info->expansion_id = atoi(row[20]); + zone_info->min_version = GetMinimumClientVersion(zone_info->expansion_id); + zone_info->always_loaded = atoi(row[21]); + zone_info->city_zone = atoi(row[22]); + zone_info->start_zone = atoi(row[23]); + row[24] == NULL ? strncpy(zone_info->zone_type, "", sizeof(zone_info->zone_type)) : strncpy(zone_info->zone_type, row[24], sizeof(zone_info->zone_type)); + zone_info->weather_allowed = atoi(row[25]); + } +} + +void WorldDatabase::SaveZoneInfo(int32 zone_id, const char* field, sint32 value) { + Query query; + query.RunQuery2(Q_UPDATE, "UPDATE `zones` SET `%s`=%i WHERE `id`=%u", field, value, zone_id); +} + +void WorldDatabase::SaveZoneInfo(int32 zone_id, const char* field, float value) { + Query query; + query.RunQuery2(Q_UPDATE, "UPDATE `zones` SET `%s`=%f WHERE `id`=%u", field, value, zone_id); +} + +void WorldDatabase::SaveZoneInfo(int32 zone_id, const char* field, const char* value) { + Query query; + query.RunQuery2(Q_UPDATE, "UPDATE `zones` SET `%s`='%s' WHERE `id`=%u", field, const_cast(getEscapeString(value)), zone_id); +} + +int32 WorldDatabase::GetZoneID(const char* name) { + int32 zone_id = 0; + Query query; + MYSQL_RES* result = query.RunQuery2(Q_SELECT, "SELECT `id` FROM zones WHERE `name`='%s'", name); + if (result && mysql_num_rows(result) > 0) { + MYSQL_ROW row; + row = mysql_fetch_row(result); + zone_id = atoi(row[0]); + } + return zone_id; +} + +bool WorldDatabase::GetZoneRequirements(const char* zoneName, sint16* minStatus, int16* minLevel, int16* maxLevel, int16* minVersion) { + Query query; + char* escaped = getEscapeString(zoneName); + MYSQL_RES* result = query.RunQuery2(Q_SELECT, "SELECT min_status, min_level, max_level, expansion_id FROM zones where name='%s'",escaped); + if(result && mysql_num_rows(result) > 0) { + MYSQL_ROW row; + row = mysql_fetch_row(result); + sint16 status = (sint16)atoi(row[0]); + int16 levelMin = (int16)atoi(row[1]); + int16 levelMax = (int16)atoi(row[2]); + int8 expansion_id = (int8)atoi(row[3]); + + *minStatus = status; + *minLevel = levelMin; + *maxLevel = levelMax; + + if( expansion_id >= 40 ) // lowest client we support is RoK - exp04 + *minVersion = GetMinimumClientVersion(expansion_id); + else + *minVersion = 0; + + safe_delete_array(escaped); + return true; + } + safe_delete_array(escaped); + + return false; +} + +int16 WorldDatabase::GetMinimumClientVersion(int8 expansion_id) +{ + /* + 1 n/a Classic Expansion + 2 adv01 Bloodline Chronicles + 3 adv02 Splitpaw Saga + 10 exp01 Desert of Flames + 20 exp02 Kingdom of Sky + 21 adv04 Fallen Dynasty + 30 exp03 Echoes of Faydwer + 40 exp04 Rise of Kunark + 50 exp05 The Shadow Odyssey + 60 exp06 Sentinel's Fate + 61 halas Halas Reborn + 70 exp07 Destiny of Velious + 80 exp08 Age of Discovery + */ + + int16 minVer = 0; + + // TODO: eventually replace this with reading values from eq2expansions table + switch(expansion_id) + { + case 40: // ROK + { + minVer = 843; + break; + } + case 50: // TSO + { + minVer = 908; + break; + } + case 60: // SF + { + minVer = 1008; + break; + } + case 61: // Halas + { + minVer = 1045; + break; + } + case 70: // DoV + { + minVer = 1096; + break; + } + case 80: // AoD + { + minVer = 1144; + break; + } + case 90: // CoE + { + minVer = 1188; + break; + } + } + + return minVer; +} + +// returns Expansion Name depending on the connected client's data version +string WorldDatabase::GetExpansionIDByVersion(int16 version) +{ + /* + 0 n/a Classic Expansion + 0 adv01 Bloodline Chronicles + 0 adv02 Splitpaw Saga + 0 exp01 Desert of Flames + 0 exp02 Kingdom of Sky + 0 adv04 Fallen Dynasty + 0 exp03 Echoes of Faydwer + 843 exp04 Rise of Kunark + 908 exp05 The Shadow Odyssey + 1008 exp06 Sentinel's Fate + 1045 halas Halas Reborn + 1096 exp07 Destiny of Velious + 1142 exp08 Age of Discovery + 1188 exp09 Chains of Eternity + 9999 (and beyond) + */ + string ret = ""; + + if( version >= 9999 ) + ret = "Unknown"; + else if( version >= 1188 ) + ret = "Chains of Eternity"; + else if( version >= 1142 ) + ret = "Age of Discovery"; + else if( version >= 1096 ) + ret = "Destiny of Velious"; + else if( version >= 1045 ) + ret = "Halas Reborn"; + else if( version >= 1008 ) + ret = "Sentinel's Fate"; + else if( version >= 908 ) + ret = "The Shadow Odyssey"; + else if( version >= 843 ) + ret = "Rise of Kunark"; + else + ret = "Any"; + + return ret; +} + + +void WorldDatabase::LoadSpecialZones(){ + Query query; + ZoneServer* zone = 0; + MYSQL_RES* result = query.RunQuery2(Q_SELECT, "SELECT id, name, always_loaded, city_zone FROM zones where always_loaded = 1 or city_zone = 1"); + if(result && mysql_num_rows(result) > 0) { + MYSQL_ROW row; + while(result && (row = mysql_fetch_row(result))){ + zone = new ZoneServer(row[1]); + LoadZoneInfo(zone); + zone->Init(); + + zone->SetAlwaysLoaded(atoi(row[2]) == 1); + zone->SetCityZone(atoi(row[3]) == 1); + } + } +} + +bool WorldDatabase::SpawnGroupRemoveAssociation(int32 group1, int32 group2){ + Query query; + query.RunQuery2(Q_DELETE, "delete FROM spawn_location_group_associations where (group_id1 = %u and group_id2 = %u) or (group_id1 = %u and group_id2 = %u)", group1, group2, group2, group1); + if(query.GetErrorNumber() && query.GetError() && query.GetErrorNumber() < 0xFFFFFFFF){ + LogWrite(WORLD__ERROR, 0, "World", "Error in SpawnGroupRemoveSpawn query '%s': %s", query.GetQuery(), query.GetError()); + return false; + } + return true; +} + +bool WorldDatabase::SpawnGroupAddAssociation(int32 group1, int32 group2){ + Query query; + query.RunQuery2(Q_INSERT, "insert ignore into spawn_location_group_associations (group_id1, group_id2) values(%u, %u)", group1, group2); + if(query.GetErrorNumber() && query.GetError() && query.GetErrorNumber() < 0xFFFFFFFF){ + LogWrite(WORLD__ERROR, 0, "World", "Error in SpawnGroupAddAssociation query '%s': %s", query.GetQuery(), query.GetError()); + return false; + } + return true; +} + +bool WorldDatabase::SpawnGroupAddSpawn(Spawn* spawn, int32 group_id){ + Query query; + query.RunQuery2(Q_INSERT, "insert ignore into spawn_location_group (group_id, placement_id) values(%u, %u)", group_id, spawn->GetSpawnLocationPlacementID()); + if(query.GetErrorNumber() && query.GetError() && query.GetErrorNumber() < 0xFFFFFFFF){ + LogWrite(WORLD__ERROR, 0, "World", "Error in SpawnGroupAddSpawn query '%s': %s", query.GetQuery(), query.GetError()); + return false; + } + return true; +} + +bool WorldDatabase::SpawnGroupRemoveSpawn(Spawn* spawn, int32 group_id){ + Query query; + query.RunQuery2(Q_DELETE, "delete FROM spawn_location_group where group_id = %u and placement_id = %u", group_id, spawn->GetSpawnLocationPlacementID()); + if(query.GetErrorNumber() && query.GetError() && query.GetErrorNumber() < 0xFFFFFFFF){ + LogWrite(WORLD__ERROR, 0, "World", "Error in SpawnGroupRemoveSpawn query '%s': %s", query.GetQuery(), query.GetError()); + return false; + } + MYSQL_RES* result = query.RunQuery2(Q_SELECT, "SELECT count(group_id) FROM spawn_location_group where group_id = %u", group_id); + if(result && mysql_num_rows(result) > 0) { + MYSQL_ROW row; + if((row = mysql_fetch_row(result))){ + if(atoul(row[0]) == 0) + DeleteSpawnGroup(group_id); + } + } + if(query.GetErrorNumber() && query.GetError() && query.GetErrorNumber() < 0xFFFFFFFF){ + LogWrite(WORLD__ERROR, 0, "World", "Error in SpawnGroupRemoveSpawn query '%s': %s", query.GetQuery(), query.GetError()); + return false; + } + return true; +} + +int32 WorldDatabase::CreateSpawnGroup(Spawn* spawn, string name) +{ + int32 group_id = 0; + Query query; + + // JA: As of 0.7.1, DB Milestone 2, Content Team needs to use group_id's from Raw Data, so start any manual group_id's > 100,000 + query.RunQuery2(Q_INSERT, "INSERT INTO spawn_location_group (group_id, placement_id, name) SELECT IF(ISNULL(MAX(group_id))=1, 100000, MAX(group_id)+1), %u, '%s' FROM spawn_location_group", spawn->GetSpawnLocationPlacementID(), getSafeEscapeString(name.c_str()).c_str()); + if(query.GetErrorNumber() && query.GetError() && query.GetErrorNumber() < 0xFFFFFFFF) + return 0; + + MYSQL_RES* result = query.RunQuery2(Q_SELECT, "SELECT max(group_id) FROM spawn_location_group"); + if(result && mysql_num_rows(result) > 0) + { + MYSQL_ROW row; + + if((row = mysql_fetch_row(result))) + { + if(row[0]) + group_id = atoul(row[0]); + } + } + + return group_id; +} + +void WorldDatabase::DeleteSpawnGroup(int32 id){ + Query query; + query.RunQuery2(Q_DELETE, "delete FROM spawn_location_group where group_id = %u", id); +} + +bool WorldDatabase::SetGroupSpawnChance(int32 id, float chance){ + Query query; + query.RunQuery2(Q_UPDATE, "replace into spawn_location_group_chances (group_id, percentage) values(%u, %f)", id, chance); + if(query.GetErrorNumber() && query.GetError() && query.GetErrorNumber() < 0xFFFFFFFF){ + LogWrite(WORLD__ERROR, 0, "World", "Error in SetGroupSpawnChance query '%s': %s", query.GetQuery(), query.GetError()); + return false; + } + return true; +} + +int32 WorldDatabase::LoadSpawnGroupChances(ZoneServer* zone){ + Query query; + int32 count = 0; + MYSQL_RES* result = query.RunQuery2(Q_SELECT, "SELECT slgc.group_id, slgc.percentage FROM spawn_location_group_chances slgc, spawn_location_group slg, spawn_location_placement slp where slgc.group_id = slg.group_id and slg.placement_id = slp.id and slp.zone_id = %u", zone->GetZoneID()); + if(result && mysql_num_rows(result) > 0) { + MYSQL_ROW row; + int32 group_id = 0; + float percent = 0; + while(result && (row = mysql_fetch_row(result))){ + group_id = atoul(row[0]); + percent = atof(row[1]); + zone->AddSpawnGroupChance(group_id, percent); + count++; + } + } + return count; +} + +int32 WorldDatabase::LoadSpawnLocationGroupAssociations(ZoneServer* zone){ + Query query; + int32 count = 0; + MYSQL_RES* result = query.RunQuery2(Q_SELECT, "SELECT distinct slga.group_id1, slga.group_id2 FROM spawn_location_group_associations slga, spawn_location_group slg, spawn_location_placement slp where (slg.group_id = slga.group_id1 or slg.group_id = slga.group_id2) and slg.placement_id = slp.id and slp.zone_id = %u", zone->GetZoneID()); + if(result && mysql_num_rows(result) > 0) { + MYSQL_ROW row; + while(result && (row = mysql_fetch_row(result))){ + zone->AddSpawnGroupAssociation(atoul(row[0]), atoul(row[1])); + count++; + } + } + return count; +} + +int32 WorldDatabase::LoadSpawnLocationGroups(ZoneServer* zone){ + Query query; + int32 count = 0; + MYSQL_RES* result = query.RunQuery2(Q_SELECT, "SELECT slg.group_id, slg.placement_id, slp.spawn_location_id FROM spawn_location_group slg, spawn_location_placement slp WHERE slg.placement_id = slp.id and slp.zone_id = %u", zone->GetZoneID()); + if(result && mysql_num_rows(result) > 0) { + MYSQL_ROW row; + int32 placement_id = 0; + int32 group_id = 0; + int32 spawn_location_id = 0; + while(result && (row = mysql_fetch_row(result))){ + group_id = atoul(row[0]); + placement_id = atoul(row[1]); + spawn_location_id = atoul(row[2]); + zone->AddSpawnGroupLocation(group_id, placement_id, spawn_location_id); + count++; + } + } + return count; +} + +int32 WorldDatabase::ProcessSpawnLocations(ZoneServer* zone, const char* sql_query, int8 type){ + int32 number = 0; + Query query; + MYSQL_RES* result = query.RunQuery2(Q_SELECT, sql_query, zone->GetZoneID()); + if(result && mysql_num_rows(result) > 0) { + MYSQL_ROW row; + int32 spawn_location_id = 0xFFFFFFFF; + SpawnLocation* spawn_location = 0; + while(result && (row = mysql_fetch_row(result))){ + if((spawn_location_id == 0xFFFFFFFF) || atoul(row[0]) != spawn_location_id){ + if(spawn_location){ + zone->AddSpawnLocation(spawn_location_id, spawn_location); + number++; + } + spawn_location = new SpawnLocation(); + } + SpawnEntry* entry = new SpawnEntry; + spawn_location_id = atoul(row[0]); + entry->spawn_location_id = spawn_location_id; + entry->spawn_entry_id = atoul(row[1]); + entry->spawn_type = type; + entry->spawn_id = atoul(row[9]); + entry->spawn_percentage = atof(row[10]); + entry->respawn = atoul(row[11]); + entry->expire_time = atoul(row[14]); + entry->expire_offset = atoul(row[15]); + spawn_location->x = atof(row[2]); + spawn_location->y = atof(row[3]); + spawn_location->z = atof(row[4]); + spawn_location->x_offset = atof(row[5]); + spawn_location->y_offset = atof(row[6]); + spawn_location->z_offset = atof(row[7]); + spawn_location->heading = atof(row[8]); + spawn_location->pitch = atof(row[16]); + spawn_location->roll = atof(row[17]); + spawn_location->conditional = atoi(row[18]); + spawn_location->total_percentage += entry->spawn_percentage; + spawn_location->grid_id = strtoul(row[12], NULL, 0); + spawn_location->placement_id = strtoul(row[13], NULL, 0); + spawn_location->AddSpawn(entry); + } + if(spawn_location){ + zone->AddSpawnLocation(spawn_location_id, spawn_location); + number++; + } + } + return number; +} + +void WorldDatabase::ResetDatabase(){ + Query query; + query.RunQuery2("delete FROM table_versions where name != 'table_versions'", Q_DELETE); +} + +void WorldDatabase::EnableConstraints(){ + Query query; + query.RunQuery2("/*!40101 SET SQL_MODE=@OLD_SQL_MODE */", Q_DBMS); + query.RunQuery2("/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */", Q_DBMS); +} + +void WorldDatabase::DisableConstraints(){ + Query query; + query.RunQuery2("/*!40101 SET NAMES utf8 */", Q_DBMS); + query.RunQuery2("/*!40101 SET SQL_MODE=''*/", Q_DBMS); + query.RunQuery2("/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */", Q_DBMS); + query.RunQuery2("/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */", Q_DBMS); +} + +void WorldDatabase::LoadSpawns(ZoneServer* zone) +{ + Query query; + int32 npcs = 0, objects = 0, widgets = 0, signs = 0, ground_spawns = 0, spawn_groups = 0, spawn_group_associations = 0, spawn_group_chances = 0; + + LogWrite(SPAWN__TRACE, 0, "Spawn", "Enter LoadSpawns"); + + npcs = ProcessSpawnLocations(zone, "SELECT sln.id, sle.id, slp.x, slp.y, slp.z, slp.x_offset, slp.y_offset, slp.z_offset, slp.heading, sle.spawn_id, sle.spawnpercentage, slp.respawn, slp.grid_id, slp.id, slp.expire_timer, slp.expire_offset, slp.pitch, slp.roll, sle.condition FROM spawn_location_placement slp, spawn_location_name sln, spawn_location_entry sle, spawn_npcs sn where sn.spawn_id = sle.spawn_id and sln.id = sle.spawn_location_id and sln.id = slp.spawn_location_id and slp.zone_id=%i ORDER BY sln.id, sle.id", SPAWN_ENTRY_TYPE_NPC); + objects = ProcessSpawnLocations(zone, "SELECT sln.id, sle.id, slp.x, slp.y, slp.z, slp.x_offset, slp.y_offset, slp.z_offset, slp.heading, sle.spawn_id, sle.spawnpercentage, slp.respawn, slp.grid_id, slp.id, slp.expire_timer, slp.expire_offset, slp.pitch, slp.roll, sle.condition FROM spawn_location_placement slp, spawn_location_name sln, spawn_location_entry sle, spawn_objects so where so.spawn_id = sle.spawn_id and sln.id = sle.spawn_location_id and sln.id = slp.spawn_location_id and slp.zone_id=%i ORDER BY sln.id, sle.id", SPAWN_ENTRY_TYPE_OBJECT); + widgets = ProcessSpawnLocations(zone, "SELECT sln.id, sle.id, slp.x, slp.y, slp.z, slp.x_offset, slp.y_offset, slp.z_offset, slp.heading, sle.spawn_id, sle.spawnpercentage, slp.respawn, slp.grid_id, slp.id, slp.expire_timer, slp.expire_offset, slp.pitch, slp.roll, sle.condition FROM spawn_location_placement slp, spawn_location_name sln, spawn_location_entry sle, spawn_widgets sw where sw.spawn_id = sle.spawn_id and sln.id = sle.spawn_location_id and sln.id = slp.spawn_location_id and slp.zone_id=%i ORDER BY sln.id, sle.id", SPAWN_ENTRY_TYPE_WIDGET); + signs = ProcessSpawnLocations(zone, "SELECT sln.id, sle.id, slp.x, slp.y, slp.z, slp.x_offset, slp.y_offset, slp.z_offset, slp.heading, sle.spawn_id, sle.spawnpercentage, slp.respawn, slp.grid_id, slp.id, slp.expire_timer, slp.expire_offset, slp.pitch, slp.roll, sle.condition FROM spawn_location_placement slp, spawn_location_name sln, spawn_location_entry sle, spawn_signs ss where ss.spawn_id = sle.spawn_id and sln.id = sle.spawn_location_id and sln.id = slp.spawn_location_id and slp.zone_id=%i ORDER BY sln.id, sle.id", SPAWN_ENTRY_TYPE_SIGN); + ground_spawns = ProcessSpawnLocations(zone, "SELECT sln.id, sle.id, slp.x, slp.y, slp.z, slp.x_offset, slp.y_offset, slp.z_offset, slp.heading, sle.spawn_id, sle.spawnpercentage, slp.respawn, slp.grid_id, slp.id, slp.expire_timer, slp.expire_offset, slp.pitch, slp.roll, sle.condition FROM spawn_location_placement slp, spawn_location_name sln, spawn_location_entry sle, spawn_ground sg where sg.spawn_id = sle.spawn_id and sln.id = sle.spawn_location_id and sln.id = slp.spawn_location_id and slp.zone_id=%i ORDER BY sln.id, sle.id", SPAWN_ENTRY_TYPE_GROUNDSPAWN); + spawn_groups = LoadSpawnLocationGroups(zone); + spawn_group_associations = LoadSpawnLocationGroupAssociations(zone); + spawn_group_chances = LoadSpawnGroupChances(zone); + LogWrite(SPAWN__INFO, 0, "Spawn", "Loaded for zone '%s' (%u):\n\t%u NPC(s), %u Object(s), %u Widget(s)\n\t%u Sign(s), %u Ground Spawn(s), %u Spawn Group(s)\n\t%u Spawn Group Association(s), %u Spawn Group Chance(s)", zone->GetZoneName(), zone->GetZoneID(), npcs, objects, widgets, signs, ground_spawns, spawn_groups, spawn_group_associations, spawn_group_chances); + + LogWrite(SPAWN__TRACE, 0, "Spawn", "Exit LoadSpawns"); + +} + +bool WorldDatabase::UpdateSpawnLocationSpawns(Spawn* spawn){ + Query query; + query.RunQuery2(Q_UPDATE, "update spawn_location_placement set x=%f, y=%f, z=%f, heading=%f, x_offset=%f, y_offset=%f, z_offset=%f, respawn=%u, expire_timer=%u, expire_offset=%u, grid_id=%u, pitch=%f, roll=%f where id = %u", + spawn->GetX(), spawn->GetY(), spawn->GetZ(), spawn->GetHeading(), spawn->GetXOffset(), spawn->GetYOffset(), spawn->GetZOffset(), spawn->GetRespawnTime(), spawn->GetExpireTime(), spawn->GetExpireOffsetTime(), spawn->appearance.pos.grid_id, spawn->GetPitch(), spawn->GetRoll(), spawn->GetSpawnLocationPlacementID()); + if(query.GetErrorNumber() && query.GetError() && query.GetErrorNumber() < 0xFFFFFFFF){ + LogWrite(WORLD__ERROR, 0, "World", "Error in UpdateSpawnLocationSpawns query '%s': %s", query.GetQuery(), query.GetError()); + return false; + } + return true; +} + +vector* WorldDatabase::GetSpawnNameList(const char* in_name){ + Query query; + string names = ""; + vector* ret = 0; + string name = getSafeEscapeString(in_name); + MYSQL_RES* result = query.RunQuery2(Q_SELECT, "SELECT concat(spawn.id, ', ', name) FROM spawn where name like '%%%s%%'", name.c_str()); + if(result && mysql_num_rows(result) > 0){ + ret = new vector; + MYSQL_ROW row; + int8 num = 0; + while(result && (row = mysql_fetch_row(result))){ + if(num >= 10) + break; + ret->push_back(string(row[0])); + num++; + } + char total[60] = {0}; + if(mysql_num_rows(result) > 10) + sprintf(total, "Total number of results: %u (Limited to 10)", (int32)mysql_num_rows(result)); + else + sprintf(total, "Total number of results: %u", (int32)mysql_num_rows(result)); + ret->push_back(string(total)); + } + return ret; +} +string WorldDatabase::GetZoneName(char* zone_description){ + string ret; + Query query; + MYSQL_RES* result = query.RunQuery2(Q_SELECT, "SELECT name FROM zones where description = '%s'", getSafeEscapeString(zone_description).c_str()); + if(result && mysql_num_rows(result) > 0){ + MYSQL_ROW row = mysql_fetch_row(result); + ret = string(row[0]); + } + return ret; +} + +void WorldDatabase::LoadRevivePoints(vector* revive_points, int32 zone_id){ + if(revive_points && revive_points->size() > 0){ + LogWrite(WORLD__ERROR, 0, "World", "Revive points have already been loaded for this zone!"); + return; + } + else if(!revive_points || zone_id == 0){ + LogWrite(WORLD__ERROR, 0, "World", "LoadRevivePoints called with null variables!"); + return; + } + Query query; + MYSQL_RES* result = query.RunQuery2(Q_SELECT, "SELECT respawn_zone_id, location_name, safe_x, safe_y, safe_z, heading FROM revive_points where zone_id=%u ORDER BY id asc", zone_id); + if(revive_points && result && mysql_num_rows(result) > 0){ + MYSQL_ROW row; + int32 id = 0; + RevivePoint* point = 0; + while(result && (row=mysql_fetch_row(result))){ + point = new RevivePoint; + point->id = id; + point->zone_id = atoul(row[0]); + point->location_name = string(row[1]); + point->x = atof(row[2]); + point->y = atof(row[3]); + point->z = atof(row[4]); + point->heading = atof(row[5]); + revive_points->push_back(point); + id++; + } + } +} + +int32 WorldDatabase::GetNextSpawnIDInZone(int32 zone_id) +{ + Query query; + int32 ret = 0; + MYSQL_RES* result = query.RunQuery2(Q_SELECT, "SELECT MAX(id) FROM spawn where id LIKE '%i____'", zone_id); + if(result && mysql_num_rows(result) > 0) { + MYSQL_ROW row; + row = mysql_fetch_row(result); + if(row[0]) + ret = atoi(row[0]) + 1; + } + if( ret == 0 ) + ret = zone_id * 10000; // there are no spawns for that zone yet, to start with the first ID + + LogWrite(WORLD__DEBUG, 0, "World", "Next Spawn ID for Zone %i: %u", zone_id, ret); + return ret; + +} + + +bool WorldDatabase::SaveSpawnInfo(Spawn* spawn){ + Query query; + string name = getSafeEscapeString(spawn->GetName()); + string suffix = getSafeEscapeString(spawn->GetSuffixTitle()); + string prefix = getSafeEscapeString(spawn->GetPrefixTitle()); + string last_name = getSafeEscapeString(spawn->GetLastName()); + if(spawn->GetDatabaseID() == 0){ + + int32 new_spawn_id = GetNextSpawnIDInZone(spawn->GetZone()->GetZoneID()); + + query.RunQuery2(Q_INSERT, "insert into spawn (id, name, race, model_type, size, targetable, show_name, command_primary, command_secondary, visual_state, attackable, show_level, show_command_icon, display_hand_icon, faction_id, collision_radius, hp, power, prefix, suffix, last_name) values(%u, '%s', %i, %i, %i, %i, %i, %u, %u, %i, %i, %i, %i, %i, %u, %i, %u, %u, '%s', '%s', '%s')", + new_spawn_id, name.c_str(), spawn->GetRace(), spawn->GetModelType(), spawn->GetSize(), spawn->appearance.targetable, spawn->appearance.display_name, spawn->GetPrimaryCommandListID(), spawn->GetSecondaryCommandListID(), spawn->GetVisualState(), spawn->appearance.attackable, spawn->appearance.show_level, spawn->appearance.show_command_icon, spawn->appearance.display_hand_icon, 0, spawn->appearance.pos.collision_radius, spawn->GetTotalHP(), spawn->GetTotalPower(), prefix.c_str(), suffix.c_str(), last_name.c_str()); + + if( new_spawn_id > 0 ) + spawn->SetDatabaseID(new_spawn_id); // use the new zone_id range + else if( query.GetLastInsertedID() > 0 ) + spawn->SetDatabaseID(query.GetLastInsertedID()); // else fall back to last_inserted_id + else + return false; // else, hang your head in shame as you are an utter failure + + if(spawn->IsNPC()){ + query.RunQuery2(Q_INSERT, "insert into spawn_npcs (spawn_id, min_level, max_level, enc_level, class_, gender, min_group_size, max_group_size, hair_type_id, facial_hair_type_id, wing_type_id, chest_type_id, legs_type_id, soga_hair_type_id, soga_facial_hair_type_id, soga_model_type, heroic_flag, action_state, mood_state, initial_state, activity_status, hide_hood, emote_state) values(%u, %i, %i, %i, %i, %i, %i, %i, %i, %i, %i, %i, %i, %i, %i, %i, %i, %i, %i, %i, %i, %i, %i)", + spawn->GetDatabaseID(), spawn->GetLevel(), spawn->GetLevel(), spawn->appearance.encounter_level, spawn->GetAdventureClass(), spawn->GetGender(), 0, 0, ((NPC*)spawn)->features.hair_type, ((NPC*)spawn)->features.hair_face_type, + ((NPC*)spawn)->features.wing_type, ((NPC*)spawn)->features.chest_type, ((NPC*)spawn)->features.legs_type, ((NPC*)spawn)->features.soga_hair_type, ((NPC*)spawn)->features.soga_hair_face_type, spawn->appearance.soga_model_type, spawn->appearance.heroic_flag, spawn->GetActionState(), spawn->GetMoodState(), spawn->GetInitialState(), spawn->GetActivityStatus(), spawn->appearance.hide_hood, spawn->appearance.emote_state); + } + else if(spawn->IsObject()){ + query.RunQuery2(Q_INSERT, "insert into spawn_objects (spawn_id) values(%u)", spawn->GetDatabaseID()); + } + else if(spawn->IsWidget()){ + + } + else if(spawn->IsSign()){ + query.RunQuery2(Q_INSERT, "insert into spawn_signs (spawn_id, description) values(%u, 'change me')", spawn->GetDatabaseID()); + + } + else if (spawn->IsGroundSpawn()) { + query.RunQuery2(Q_INSERT, "insert into spawn_ground (spawn_id) values(%u)", spawn->GetDatabaseID()); + } + } + else{ + if(spawn->IsNPC()){ + query.RunQuery2(Q_UPDATE, "update spawn_npcs, spawn set name='%s', min_level=%i, max_level=%i, enc_level=%i, race=%i, model_type=%i, class_=%i, gender=%i, show_name=%i, attackable=%i, show_level=%i, targetable=%i, show_command_icon=%i, display_hand_icon=%i, hair_type_id=%i, facial_hair_type_id=%i, wing_type_id=%i, chest_type_id=%i, legs_type_id=%i, soga_hair_type_id=%i, soga_facial_hair_type_id=%i, soga_model_type=%i, size=%i, hp=%u, heroic_flag=%i, power=%u, collision_radius=%i, command_primary=%u, command_secondary=%u, visual_state=%i, action_state=%i, mood_state=%i, initial_state=%i, activity_status=%i, alignment=%i, faction_id=%u, hide_hood=%i, emote_state=%i, suffix ='%s', prefix='%s', last_name='%s' where spawn_npcs.spawn_id = spawn.id and spawn.id = %u", + name.c_str(), spawn->GetLevel(), spawn->GetLevel(), spawn->appearance.encounter_level, spawn->GetRace(), spawn->GetModelType(), + spawn->GetAdventureClass(), spawn->GetGender(), spawn->appearance.display_name, spawn->appearance.attackable, spawn->appearance.show_level, spawn->appearance.targetable, spawn->appearance.show_command_icon, spawn->appearance.display_hand_icon, ((NPC*)spawn)->features.hair_type, + ((NPC*)spawn)->features.hair_face_type, ((NPC*)spawn)->features.wing_type, ((NPC*)spawn)->features.chest_type, ((NPC*)spawn)->features.legs_type, ((NPC*)spawn)->features.soga_hair_type, ((NPC*)spawn)->features.soga_hair_face_type, spawn->appearance.soga_model_type, spawn->GetSize(), + spawn->GetTotalHP(), spawn->appearance.heroic_flag, spawn->GetTotalPower(), spawn->GetCollisionRadius(), spawn->GetPrimaryCommandListID(), + spawn->GetSecondaryCommandListID(), spawn->GetVisualState(), spawn->GetActionState(), spawn->GetMoodState(), spawn->GetInitialState(), + spawn->GetActivityStatus(), ((NPC*)spawn)->GetAlignment(), spawn->GetFactionID(), spawn->appearance.hide_hood, spawn->appearance.emote_state, + suffix.c_str(), prefix.c_str(), last_name.c_str(), spawn->GetDatabaseID()); + } + else if(spawn->IsObject()){ + query.RunQuery2(Q_UPDATE, "update spawn_objects, spawn set name='%s', model_type=%i, show_name=%i, targetable=%i, size=%i, command_primary=%u, command_secondary=%u, visual_state=%i, attackable=%i, show_level=%i, show_command_icon=%i, display_hand_icon=%i, collision_radius=%i, hp = %u, power = %u, device_id = %i where spawn_objects.spawn_id = spawn.id and spawn.id = %u", + name.c_str(), spawn->GetModelType(), spawn->appearance.display_name, spawn->appearance.targetable, spawn->GetSize(), spawn->GetPrimaryCommandListID(), spawn->GetSecondaryCommandListID(), spawn->GetVisualState(), spawn->appearance.attackable, spawn->appearance.show_level, spawn->appearance.show_command_icon, spawn->appearance.display_hand_icon, + spawn->GetCollisionRadius(), spawn->GetTotalHP(), spawn->GetTotalPower(), ((Object*)spawn)->GetDeviceID(), spawn->GetDatabaseID()); + } + else if(spawn->IsWidget()){ + + } + else if(spawn->IsSign()){ + + } + } + if(query.GetErrorNumber() && query.GetError() && query.GetErrorNumber() < 0xFFFFFFFF){ + LogWrite(SPAWN__ERROR, 0, "Spawn", "Error in SaveSpawnInfo query '%s': %s", query.GetQuery(), query.GetError()); + return false; + } + return true; +} + +bool WorldDatabase::SaveCombinedSpawnLocation(ZoneServer* zone, Spawn* in_spawn, const char* name){ + vector* spawns = in_spawn->GetSpawnGroup(); + if(spawns && spawns->size() > 0){ + vector::iterator itr; + map::iterator freq_itr; + Spawn* spawn = 0; + map database_spawns; + int32 total = 0; + float x_offset = GetSpawnLocationPlacementOffsetX(in_spawn->GetSpawnLocationID()); + float y_offset = GetSpawnLocationPlacementOffsetY(in_spawn->GetSpawnLocationID()); + float z_offset = GetSpawnLocationPlacementOffsetZ(in_spawn->GetSpawnLocationID()); + int32 spawn_location_id = GetNextSpawnLocation(); + if(!name) + name = "Combine SpawnGroup Generated"; + if(!CreateNewSpawnLocation(spawn_location_id, name)){ + safe_delete(spawns); + return false; + } + for(itr = spawns->begin();itr!=spawns->end();itr++){ + spawn = *itr; + if (spawn) { + RemoveSpawnFromSpawnLocation(spawn); + spawn->SetSpawnLocationID(spawn_location_id); + bool add = true; + for (freq_itr = database_spawns.begin(); freq_itr != database_spawns.end(); freq_itr++) { + if (spawn->GetDatabaseID() == freq_itr->first->GetDatabaseID()) { + freq_itr->second++; + total++; + add = false; + } + } + if (add) { + database_spawns[spawn] = 1; + total++; + } + } + } + for(freq_itr = database_spawns.begin(); freq_itr != database_spawns.end(); freq_itr++){ + int8 percent = (freq_itr->second*100)/total; + if(!SaveSpawnEntry(freq_itr->first, name, percent, x_offset, y_offset, z_offset, freq_itr->first == in_spawn, false)){ + safe_delete(spawns); + return false; + } + } + for(itr=spawns->begin();itr!=spawns->end();itr++){ + spawn = *itr; + zone->RemoveSpawn(spawn); + } + safe_delete(spawns); + } + else{ + safe_delete(spawns); + return false; + } + return true; +} + +bool WorldDatabase::SaveSpawnEntry(Spawn* spawn, const char* spawn_location_name, int8 percent, float x_offset, float y_offset, float z_offset, bool save_zonespawn, bool create_spawnlocation){ + Query query; + Query query2; + int32 count = 0; + if(create_spawnlocation){ + count = GetSpawnLocationCount(spawn->GetSpawnLocationID()); + if(count == 0){ + if(!CreateNewSpawnLocation(spawn->GetSpawnLocationID(), spawn_location_name)) + return false; + } + } + query.RunQuery2(Q_INSERT, "insert into spawn_location_entry (spawn_id, spawn_location_id, spawnpercentage) values(%u, %u, %i)", spawn->GetDatabaseID(), spawn->GetSpawnLocationID(), percent); + + if(query.GetErrorNumber() && query.GetError() && query.GetErrorNumber() < 0xFFFFFFFF){ + LogWrite(SPAWN__ERROR, 0, "Spawn", "Error in SaveSpawnEntry query '%s': %s", query.GetQuery(), query.GetError()); + return false; + } + if(save_zonespawn){ + query2.RunQuery2(Q_INSERT, "insert into spawn_location_placement (zone_id, spawn_location_id, x, y, z, x_offset, y_offset, z_offset, heading, grid_id) values(%u, %u, %f, %f, %f, %f, %f, %f, %f, %u)", spawn->GetZone()->GetZoneID(), spawn->GetSpawnLocationID(), spawn->GetX(), spawn->GetY(), spawn->GetZ(),x_offset, y_offset, z_offset, spawn->GetHeading(), spawn->appearance.pos.grid_id); + if(query2.GetErrorNumber() && query2.GetError() && query2.GetErrorNumber() < 0xFFFFFFFF){ + LogWrite(SPAWN__ERROR, 0, "Spawn", "Error in SaveSpawnEntry query '%s': %s", query2.GetQuery(), query2.GetError()); + return false; + } + } + return true; +} + +float WorldDatabase::GetSpawnLocationPlacementOffsetX(int32 location_id) { + Query query; + MYSQL_ROW row; + float ret = 0; + MYSQL_RES* result = query.RunQuery2(Q_SELECT, "SELECT `x_offset` FROM `spawn_location_placement` WHERE `spawn_location_id`=%u", location_id); + if (result && (row = mysql_fetch_row(result))) { + if (row[0]) + ret = atof(row[0]); + } + return ret; +} + +float WorldDatabase::GetSpawnLocationPlacementOffsetY(int32 location_id) { + Query query; + MYSQL_ROW row; + float ret = 0; + MYSQL_RES* result = query.RunQuery2(Q_SELECT, "SELECT `y_offset` FROM `spawn_location_placement` WHERE `spawn_location_id`=%u", location_id); + if (result && (row = mysql_fetch_row(result))) { + if (row[0]) + ret = atof(row[0]); + } + return ret; +} + +float WorldDatabase::GetSpawnLocationPlacementOffsetZ(int32 location_id) { + Query query; + MYSQL_ROW row; + float ret = 0; + MYSQL_RES* result = query.RunQuery2(Q_SELECT, "SELECT `z_offset` FROM `spawn_location_placement` WHERE `spawn_location_id`=%u", location_id); + if (result && (row = mysql_fetch_row(result))) { + if (row[0]) + ret = atof(row[0]); + } + return ret; +} + +bool WorldDatabase::CreateNewSpawnLocation(int32 id, const char* name){ + Query query; + if(!name) + name = "Unknown Spawn Location Name"; + string str_name = getSafeEscapeString(name); + query.RunQuery2(Q_INSERT, "insert into spawn_location_name (id, name) values(%u, '%s')", id, str_name.c_str()); + if(query.GetErrorNumber() && query.GetError() && query.GetErrorNumber() < 0xFFFFFFFF){ + LogWrite(SPAWN__ERROR, 0, "Spawn", "Error in CreateNewSpawnLocation query '%s': %s", query.GetQuery(), query.GetError()); + return false; + } + return true; +} + +int32 WorldDatabase::GetSpawnLocationCount(int32 location, Spawn* spawn){ + Query query; + int32 ret = 0; + MYSQL_RES* result = 0; + if(spawn) + result = query.RunQuery2(Q_SELECT, "SELECT count(id) FROM spawn_location_entry where spawn_location_id=%u and spawn_id=%u", location, spawn->GetDatabaseID()); + if(result && mysql_num_rows(result) > 0){ + MYSQL_ROW row; + while(result && (row = mysql_fetch_row(result)) && row[0]){ + ret = strtoul(row[0], NULL, 0); + } + } + return ret; +} + +int32 WorldDatabase::GetNextSpawnLocation(){ + Query query; + int32 ret = 0; + MYSQL_RES* result = query.RunQuery2(Q_SELECT, "SELECT max(id) FROM spawn_location_name"); + if(result && mysql_num_rows(result) > 0){ + MYSQL_ROW row; + while(result && (row = mysql_fetch_row(result)) && row[0]){ + ret = strtoul(row[0], NULL, 0); + } + } + ret++; + return ret; +} + +bool WorldDatabase::RemoveSpawnFromSpawnLocation(Spawn* spawn){ + Query query; + Query query2; + int32 count = GetSpawnLocationCount(spawn->GetSpawnLocationID(), spawn); + + query.RunQuery2(Q_DELETE, "delete FROM spawn_location_placement where spawn_location_id=%u", spawn->GetSpawnLocationID()); + if(count == 1) + query.RunQuery2(Q_DELETE, "delete FROM spawn_location_name where id=%u", spawn->GetSpawnLocationID()); + + query2.RunQuery2(Q_DELETE, "delete FROM spawn_location_entry where spawn_id=%u and spawn_location_id = %u", spawn->GetDatabaseID(), spawn->GetSpawnLocationID()); + if(query.GetErrorNumber() && query.GetError() && query.GetErrorNumber() < 0xFFFFFFFF){ + LogWrite(WORLD__ERROR, 0, "World", "Error in RemoveSpawnFromSpawnLocation query '%s': %s", query.GetQuery(), query.GetError()); + return false; + } + else if(query2.GetErrorNumber() && query2.GetError() && query2.GetErrorNumber() < 0xFFFFFFFF){ + LogWrite(SPAWN__ERROR, 0, "Spawn", "Error in RemoveSpawnFromSpawnLocation query '%s': %s", query2.GetQuery(), query.GetError()); + return false; + } + return true; +} + +map* WorldDatabase::GetZoneList(const char* name, bool is_admin) +{ + Query query; + map* ret = 0; + string zone_name = getSafeEscapeString(name); + MYSQL_RES* result = query.RunQuery2(Q_SELECT, "SELECT `id`, `name` FROM zones WHERE `name` RLIKE '%s' %s", zone_name.c_str(), (is_admin)?"":" LIMIT 0,10"); + if(result && mysql_num_rows(result) > 0) + { + ret = new map; + MYSQL_ROW row; + while(result && (row = mysql_fetch_row(result))) + { + zone_name = row[1]; + (*ret)[atoi(row[0])] = zone_name; + } + } + + return ret; +} + +void WorldDatabase::UpdateStartingFactions(int32 char_id, int8 choice){ + Query query; + query.RunQuery2(Q_INSERT, "insert into character_factions (char_id, faction_id, faction_level) select %u, faction_id, value FROM starting_factions where starting_city=%i", char_id, choice); +} + +string WorldDatabase::GetStartingZoneName(int8 choice){ + Query query; + string zone_name = ""; + MYSQL_RES* result = query.RunQuery2(Q_SELECT, "SELECT name FROM zones where start_zone = %u", choice); + if(result && mysql_num_rows(result) > 0){ + MYSQL_ROW row; + while(result && (row = mysql_fetch_row(result))){ + zone_name = string(row[0]); + } + } + return zone_name; +} + +void WorldDatabase::UpdateStartingZone(int32 char_id, int8 class_id, int8 race_id, int8 choice) +{ + Query query; + + LogWrite(PLAYER__DEBUG, 0, "Player", "Adding default zone for race: %i, class: %i for char_id: %u (choice: %i)", race_id, class_id, char_id, choice); + + // first, check to see if there is a starting_zones record for this race/class/choice combo (now using extended Archetype/BaseClass/Class combos + MYSQL_RES* result = query.RunQuery2(Q_SELECT, "SELECT `name` FROM starting_zones sz, zones z WHERE sz.zone_id = z.id AND class_id IN (%i, %i, %i, 255) AND race_id IN (%i, 255) AND choice IN (%i, 255)", + classes.GetBaseClass(class_id), classes.GetSecondaryBaseClass(class_id), class_id, race_id, choice); + + // TODO: verify client version so clients do not crash trying to enter zones they do not own (paks) + if(result && mysql_num_rows(result) > 0) + { + string zone_name = "ERROR"; + MYSQL_ROW row; + + if( result && (row = mysql_fetch_row(result)) ) + zone_name = string(row[0]); + query.RunQuery2(Q_UPDATE, "UPDATE characters c, zones z, starting_zones sz SET c.current_zone_id = z.id, c.x = z.safe_x, c.y = z.safe_y, c.z = z.safe_z, c.starting_city = %i WHERE z.id = sz.zone_id AND sz.class_id IN (%i, %i, %i, 255) AND sz.race_id IN (%i, 255) AND sz.choice IN (%i, 255) AND c.id = %u", + choice, classes.GetBaseClass(class_id), classes.GetSecondaryBaseClass(class_id), class_id, race_id, choice, char_id); + + if(query.GetErrorNumber() && query.GetError() && query.GetErrorNumber() < 0xFFFFFFFF){ + LogWrite(PLAYER__ERROR, 0, "Player", "Error in UpdateStartingZone custom starting_zones, query: '%s': %s", query.GetQuery(), query.GetError()); + return; + } + + if(query.GetAffectedRows() > 0) + { + LogWrite(PLAYER__DEBUG, 0, "Player", "Setting New Character Starting Zone to '%s' FROM starting_zones table.", zone_name.c_str()); + return; + } + } + else + { + // there was no matching starting_zone value, so use default 'choice' starting city + query.RunQuery2(Q_UPDATE, "UPDATE characters c, zones z SET c.current_zone_id = z.id, c.x = z.safe_x, c.y = z.safe_y, c.z = z.safe_z, c.starting_city = %i WHERE z.start_zone = %i and c.id = %u", + choice, choice, char_id); + + if(query.GetErrorNumber() && query.GetError() && query.GetErrorNumber() < 0xFFFFFFFF) + { + LogWrite(PLAYER__ERROR, 0, "Player", "Error in UpdateStartingZone player choice, query: '%s': %s", query.GetQuery(), query.GetError()); + return; + } + + if(query.GetAffectedRows() > 0) + { + LogWrite(PLAYER__DEBUG, 0, "Player", "Setting New Character Starting Zone to '%s' FROM player choice.", GetStartingZoneName(choice).c_str()); + return; + } + } + + // if we are here, it's a bad thing. zone tables have no start_city values to match client 'choice', so throw the player into zone according to R_World::DefaultStartingZoneID rule. + // shout a few warnings so the admin fixes this asap! + int16 default_zone_id = rule_manager.GetGlobalRule(R_World, DefaultStartingZoneID)->GetInt16(); + + LogWrite(WORLD__WARNING, 0, "World", "No Starting City defined for player choice: %i! BAD! BAD! BAD! Defaulting player to zone %i.", choice, default_zone_id); + + query.RunQuery2(Q_UPDATE, "UPDATE characters c, zones z SET c.current_zone_id = z.id, c.x = z.safe_x, c.y = z.safe_y, c.z = z.safe_z, c.heading = z.safe_heading, c.starting_city = 1 WHERE z.id = %i and c.id = %u", default_zone_id, char_id); + + if(query.GetErrorNumber() && query.GetError() && query.GetErrorNumber() < 0xFFFFFFFF) + { + LogWrite(PLAYER__ERROR, 0, "Player", "Error in UpdateStartingZone default zone %i, query: '%s': %s", default_zone_id, query.GetQuery(), query.GetError()); + return; + } + + if(query.GetAffectedRows() > 0) + LogWrite(PLAYER__DEBUG, 0, "Player", "Setting New Character Starting Zone to '%s' due to no valid options!", GetZoneName(1)->c_str()); + + return; +} + +void WorldDatabase::UpdateStartingItems(int32 char_id, int8 class_id, int8 race_id, bool base_class){ + LogWrite(PLAYER__DEBUG, 0, "Player", "Adding default items for race: %i, class: %i for char_id: %u", race_id, class_id, char_id); + Query query; + Query query2; + vector items; + vector bags; + map total_slots; + map slots_left; + map equip_slots; + map item_list; + int32 item_id = 0; + Item* item = 0; + StartingItem* starting_item = 0; + //first get a list of the starting items for the character + MYSQL_RES* result = 0; + /*if(!base_class) + result = query2.RunQuery2(Q_SELECT, "SELECT `type`, item_id, creator, condition_, attuned, count FROM starting_items where (class_id=%i and race_id=%i) or (class_id=%i and race_id=255) or (class_id=255 and race_id=%i) or (class_id=255 and race_id=255) ORDER BY id", class_id, race_id, class_id, race_id); + else + result = query2.RunQuery2(Q_SELECT, "SELECT `type`, item_id, creator, condition_, attuned, count FROM starting_items where (class_id=%i and race_id=%i) or (class_id=%i and race_id=255) ORDER BY id", class_id, race_id, class_id);*/ + result = query2.RunQuery2(Q_SELECT, "SELECT `type`, item_id, creator, condition_, attuned, count FROM starting_items WHERE class_id IN (%i, %i, %i, 255) AND race_id IN (%i, 255) ORDER BY id", classes.GetBaseClass(class_id), classes.GetSecondaryBaseClass(class_id), class_id, race_id); + if(result && mysql_num_rows(result) > 0){ + MYSQL_ROW row; + while(result && (row = mysql_fetch_row(result))){ + item_id = atoul(row[1]); + item = master_item_list.GetItem(item_id); + if(item){ + starting_item = &(item_list[item]); + starting_item->type = (row[0]) ? string(row[0]) : ""; + starting_item->item_id = atoul(row[1]); + starting_item->creator = (row[2]) ? string(row[2]) : ""; + starting_item->condition = atoi(row[3]); + starting_item->attuned = atoi(row[4]); + starting_item->count = atoi(row[5]); + item = master_item_list.GetItem(starting_item->item_id); + if(item){ + if(bags.size() < NUM_INV_SLOTS && item->IsBag() && item->details.num_slots > 0) + bags.push_back(item); + else + items.push_back(item); + } + } + } + } + slots_left[0] = NUM_INV_SLOTS; + //next create the bags in the inventory + for(int8 i=0;idetails.num_slots; + total_slots[query.GetLastInsertedID()] = item->details.num_slots; + slots_left[0]--; + } + map::iterator itr; + int32 inv_slot = 0; + int8 slot = 0; + //finally process the rest of the items, placing them in the first available slot + for(int32 x=0;xsecond > 0){ + if(itr->first == 0 && slots_left.size() > 1) //we want items to go into bags first, then inventory after bags are full + continue; + inv_slot = itr->first; + slot = total_slots[itr->first] - itr->second; + itr->second--; + if(itr->second == 0) + slots_left.erase(itr); + break; + } + } + query.RunQuery2(Q_INSERT, "insert into character_items (char_id, type, slot, item_id, creator, condition_, attuned, bag_id, count) values(%u, '%s', %i, %u, '%s', %i, %i, %u, %i)", + char_id, item_list[item].type.c_str(), slot, item_list[item].item_id, getSafeEscapeString(item_list[item].creator.c_str()).c_str(), item_list[item].condition, item_list[item].attuned, inv_slot, item_list[item].count); + } + else{ //EQUIPPED Items + for(int8 i=0;islot_data.size();i++){ + if(equip_slots.count(item->slot_data[i]) == 0){ + equip_slots[item->slot_data[i]] = true; + query.RunQuery2(Q_INSERT, "insert into character_items (char_id, type, slot, item_id, creator, condition_, attuned, bag_id, count) values(%u, '%s', %i, %u, '%s', %i, %i, %u, %i)", + char_id, item_list[item].type.c_str(), item->slot_data[i], item_list[item].item_id, getSafeEscapeString(item_list[item].creator.c_str()).c_str(), item_list[item].condition, item_list[item].attuned, 0, item_list[item].count); + break; + } + } + } + } +} + +void WorldDatabase::UpdateStartingSkills(int32 char_id, int8 class_id, int8 race_id) +{ + Query query; + LogWrite(PLAYER__DEBUG, 0, "Player", "Adding default skills for race: %i, class: %i for char_id: %u", race_id, class_id, char_id); + query.RunQuery2(Q_INSERT, "INSERT IGNORE INTO character_skills (char_id, skill_id, current_val, max_val) SELECT %u, skill_id, current_val, max_val FROM starting_skills WHERE class_id IN (%i, %i, %i, 255) AND race_id IN (%i, 255)", + char_id, classes.GetBaseClass(class_id), classes.GetSecondaryBaseClass(class_id), class_id, race_id); +} + +void WorldDatabase::UpdateStartingSpells(int32 char_id, int8 class_id, int8 race_id){ + Query query; + LogWrite(PLAYER__DEBUG, 0, "Player", "Adding default spells for race: %i, class: %i for char_id: %u", race_id, class_id, char_id); + query.RunQuery2(Q_INSERT, "INSERT IGNORE INTO character_spells (char_id, spell_id, tier, knowledge_slot) SELECT %u, spell_id, tier, knowledge_slot FROM starting_spells WHERE class_id IN (%i, %i, %i, 255) AND race_id IN (%i, 255)", + char_id, classes.GetBaseClass(class_id), classes.GetSecondaryBaseClass(class_id), class_id, race_id); +} + +void WorldDatabase::UpdateStartingSkillbar(int32 char_id, int8 class_id, int8 race_id){ + Query query; + LogWrite(PLAYER__DEBUG, 0, "Player", "Adding default skillbar for race: %i, class: %i for char_id: %u", race_id, class_id, char_id); + query.RunQuery2(Q_INSERT, "INSERT IGNORE INTO character_skillbar (char_id, type, hotbar, spell_id, slot, text_val) SELECT %u, type, hotbar, spell_id, slot, text_val FROM starting_skillbar WHERE class_id IN (%i, %i, %i, 255) AND race_id IN (%i, 255)", + char_id, classes.GetBaseClass(class_id), classes.GetSecondaryBaseClass(class_id), class_id, race_id); +} + +void WorldDatabase::UpdateStartingTitles(int32 char_id, int8 class_id, int8 race_id, int8 gender_id) { + Query query; + LogWrite(PLAYER__DEBUG, 0, "Player", "Adding default titles for race: %i, class: %i, gender: %i for char_id: %u", race_id, class_id, gender_id, char_id); + query.RunQuery2(Q_INSERT, "INSERT IGNORE INTO character_titles (char_id, title_id) SELECT %u, title_id FROM starting_titles WHERE class_id IN (%i, %i, %i, 255) AND race_id IN (%i, 255) and gender_id IN (%i, 255)", + char_id, classes.GetBaseClass(class_id), classes.GetSecondaryBaseClass(class_id), class_id, race_id, gender_id); +} + +string WorldDatabase::GetZoneDescription(int32 id){ + Query query; + string ret = ""; + MYSQL_RES* result = query.RunQuery2(Q_SELECT, "SELECT description FROM zones where id = %u", id); + if(result && mysql_num_rows(result) > 0){ + MYSQL_ROW row; + row = mysql_fetch_row(result); + ret = string(row[0]); + } + return ret; +} + +string* WorldDatabase::GetZoneName(int32 id){ + string* ret = new string; + if (zone_names.count(id) > 0){ + ret->assign(zone_names[id]); + return ret; + } + Query query; + MYSQL_RES* result = query.RunQuery2(Q_SELECT, "SELECT `name` FROM zones where `id` = %u", id); + if(result && mysql_num_rows(result) > 0){ + MYSQL_ROW row; + row = mysql_fetch_row(result); + zone_names[id] = row[0]; + ret->assign(zone_names[id]); + } + return ret; +} + +bool WorldDatabase::VerifyZone(const char* name){ + Query query; + char* escaped = getEscapeString(name); + MYSQL_RES* result = query.RunQuery2(Q_SELECT, "SELECT name FROM zones where name='%s'",escaped); + safe_delete_array(escaped); + if(result && mysql_num_rows(result) > 0) + return true; + else + return false; +} + +int8 WorldDatabase::GetInstanceTypeByZoneID(int32 zoneID) +{ + DatabaseResult result; + int8 ret = 0; + + LogWrite(INSTANCE__DEBUG, 0, "Instance", "Getting instances for zone_id %u", zoneID); + + if( !database_new.Select(&result, "SELECT instance_type+0 FROM zones WHERE id = %u", zoneID) ) + { + LogWrite(INSTANCE__ERROR, 0, "Instance", "Error in GetInstanceTypeByZoneID() '%s': %i", database_new.GetErrorMsg(), database_new.GetError()); + return ret; + } + + if( result.GetNumRows() > 0 ) + { + result.Next(); + ret = (result.GetInt8Str("instance_type+0") == 0) ? 0 : result.GetInt8Str("instance_type+0") - 1; + LogWrite(INSTANCE__DEBUG, 0, "Instance", "Found instance type %i for zone_id %u", ret, zoneID); + } + else + LogWrite(INSTANCE__DEBUG, 0, "Instance", "No instances found for zone_id %u", zoneID); + + return ret; +} + +void WorldDatabase::Save(Client* client){ + Query query; + Player* player = client->GetPlayer(); + if(!player->CheckPlayerInfo()) + return; + + int32 instance_id = 0; + if ( client->GetCurrentZone ( ) != NULL ) + instance_id = client->GetCurrentZone()->GetInstanceID(); + + int32 zone_id = 0; + if(client->GetCurrentZone()) + zone_id = client->GetCurrentZone()->GetZoneID(); + query.RunQuery2(Q_UPDATE, "update characters set current_zone_id=%u, x=%f, y=%f, z=%f, heading=%f, level=%i,instance_id=%i,last_saved=%i, `class`=%i, `tradeskill_level`=%i, `tradeskill_class`=%i where id = %u", zone_id, player->GetX(), player->GetY(), player->GetZ(), player->GetHeading(), player->GetLevel(), instance_id, client->GetLastSavedTimeStamp(), client->GetPlayer()->GetAdventureClass(), client->GetPlayer()->GetTSLevel(), client->GetPlayer()->GetTradeskillClass(), client->GetCharacterID()); + query.RunQuery2(Q_UPDATE, "update character_details set hp=%u, power=%u, str=%i, sta=%i, agi=%i, wis=%i, intel=%i, heat=%i, cold=%i, magic=%i, mental=%i, divine=%i, disease=%i, poison=%i, coin_copper=%u, coin_silver=%u, coin_gold=%u, coin_plat=%u, max_hp = %u, max_power=%u, xp = %u, xp_needed = %u, xp_debt = %u, xp_vitality = %f, tradeskill_xp = %u, tradeskill_xp_needed = %u, tradeskill_xp_vitality = %f, bank_copper = %u, bank_silver = %u, bank_gold = %u, bank_plat = %u, bind_zone_id=%u, bind_x = %f, bind_y = %f, bind_z = %f, bind_heading = %f, house_zone_id=%u, combat_voice = %i, emote_voice = %i, biography='%s', flags=%u, flags2=%u, last_name='%s' where char_id = %u", + player->GetHP(), player->GetPower(), player->GetStrBase(), player->GetStaBase(), player->GetAgiBase(), player->GetWisBase(), player->GetIntBase(), player->GetHeatResistanceBase(), player->GetColdResistanceBase(), player->GetMagicResistanceBase(), + player->GetMentalResistanceBase(), player->GetDivineResistanceBase(), player->GetDiseaseResistanceBase(), player->GetPoisonResistanceBase(), player->GetCoinsCopper(), player->GetCoinsSilver(), player->GetCoinsGold(), player->GetCoinsPlat(), player->GetTotalHPBase(), player->GetTotalPowerBase(), player->GetXP(), player->GetNeededXP(), player->GetXPDebt(), player->GetXPVitality(), player->GetTSXP(), player->GetNeededTSXP(), player->GetTSXPVitality(), player->GetBankCoinsCopper(), + player->GetBankCoinsSilver(), player->GetBankCoinsGold(), player->GetBankCoinsPlat(), client->GetPlayer()->GetPlayerInfo()->GetBindZoneID(), client->GetPlayer()->GetPlayerInfo()->GetBindZoneX(), client->GetPlayer()->GetPlayerInfo()->GetBindZoneY(), client->GetPlayer()->GetPlayerInfo()->GetBindZoneZ(), client->GetPlayer()->GetPlayerInfo()->GetBindZoneHeading(), client->GetPlayer()->GetPlayerInfo()->GetHouseZoneID(), + client->GetPlayer()->GetCombatVoice(), client->GetPlayer()->GetEmoteVoice(), getSafeEscapeString(client->GetPlayer()->GetBiography().c_str()).c_str(), player->GetFlags(), player->GetFlags2(), client->GetPlayer()->GetLastName(), client->GetCharacterID()); + map::iterator itr; + map* friends = player->GetFriends(); + if(friends && friends->size() > 0){ + for(itr = friends->begin(); itr != friends->end(); itr++){ + if(itr->second == 1){ + query.RunQuery2(Q_INSERT, "insert ignore into character_social (char_id, name, type) values(%u, '%s', 'FRIEND')", client->GetCharacterID(), getSafeEscapeString(itr->first.c_str()).c_str()); + itr->second = 0; + } + else if(itr->second == 2){ + query.RunQuery2(Q_DELETE, "delete FROM character_social where char_id = %u and name = '%s'", client->GetCharacterID(), getSafeEscapeString(itr->first.c_str()).c_str()); + itr->second = 3; + } + } + } + map* ignored = player->GetIgnoredPlayers(); + if(ignored && ignored->size() > 0){ + for(itr = ignored->begin(); itr != ignored->end(); itr++){ + if(itr->second == 1){ + query.RunQuery2(Q_INSERT, "insert ignore into character_social (char_id, name, type) values(%u, '%s', 'IGNORE')", client->GetCharacterID(), getSafeEscapeString(itr->first.c_str()).c_str()); + itr->second = 0; + } + else if(itr->second == 2){ + query.RunQuery2(Q_DELETE, "delete FROM character_social where char_id = %u and name = '%s'", client->GetCharacterID(), getSafeEscapeString(itr->first.c_str()).c_str()); + itr->second = 3; + } + } + } + SavePlayerFactions(client); + SaveCharacterQuests(client); + SaveCharacterSkills(client); + SavePlayerSpells(client); + SavePlayerMail(client); + SavePlayerCollections(client); + + LogWrite(PLAYER__INFO, 3, "Player", "Player '%s (%u) data saved.", player->GetName(), player->GetCharacterID()); +} + +void WorldDatabase::LoadEntityCommands(ZoneServer* zone) { + int32 total = 0; + int32 id = 0; + EntityCommand* command = 0; + + DatabaseResult result; + if (!database_new.Select(&result, "SELECT `command_list_id`, `command_text`, `distance`, `command`, `error_text`, `cast_time`, `spell_visual` FROM `entity_commands` ORDER BY `id`")) { + LogWrite(DATABASE__ERROR, 0, "DBNew", "MySQL Error %u: %s", database_new.GetError(), database_new.GetErrorMsg()); + return; + } + + while (result.Next()) { + command = new EntityCommand; + + id = result.GetInt32(0); + command->name = result.GetString(1); + command->distance = result.GetFloat(2); + command->command = result.GetString(3); + command->error_text = result.GetString(4); + command->cast_time = result.GetInt16(5); + command->spell_visual = result.GetInt32(6); + + zone->SetEntityCommandList(id, command); + LogWrite(COMMAND__DEBUG, 5, "Command", "---Loading Command: '%s' (%s)", command->name.c_str(), command->command.c_str()); + + total++; + } + LogWrite(COMMAND__DEBUG, 0, "Command", "--Loaded %i entity command(s)", total); +} + +void WorldDatabase::LoadFactionAlliances() +{ + LogWrite(FACTION__DEBUG, 1, "Faction", "-Loading faction alliances..."); + int32 total = 0; + int32 fTotal = 0; + int32 hTotal = 0; + Query query; + MYSQL_RES* result = query.RunQuery2(Q_SELECT, "SELECT faction_id, friend_faction, hostile_faction FROM faction_alliances"); + + if(result && mysql_num_rows(result) > 0) + { + MYSQL_ROW row; + int32 faction_id = 0; + int32 friendly_id = 0; + int32 hostile_id = 0; + + while(result && (row = mysql_fetch_row(result))) + { + faction_id = atoul(row[0]); + friendly_id = atoul(row[1]); + hostile_id = atoul(row[2]); + + if(friendly_id > 0) + { + master_faction_list.AddFriendlyFaction(faction_id, friendly_id); + fTotal++; + LogWrite(FACTION__DEBUG, 5, "Faction", "---Faction %i is friendly towards %i", faction_id, friendly_id); + } + if(hostile_id > 0) + { + master_faction_list.AddHostileFaction(faction_id, hostile_id); + hTotal++; + LogWrite(FACTION__DEBUG, 5, "Faction", "---Faction %i is hostile towards %i", faction_id, hostile_id); + } + total++; + } + } + LogWrite(FACTION__DEBUG, 3, "Faction", "--Loaded %u Alliances: %i friendly, %i hostile", total, fTotal, hTotal); +} + +bool WorldDatabase::UpdateSpawnScriptData(int32 spawn_id, int32 spawn_location_id, int32 spawnentry_id, const char* name){ + bool ret = false; + if((spawn_id > 0 || spawn_location_id > 0 || spawnentry_id > 0) && name){ + Query query; + int32 row_id = 0; + if(spawn_id > 0){ + query.RunQuery2(Q_DELETE, "DELETE FROM spawn_scripts where spawn_id=%u", spawn_id); + query.RunQuery2(Q_INSERT, "INSERT into spawn_scripts (spawn_id, lua_script) values(%u, '%s')", spawn_id, getSafeEscapeString(name).c_str()); + if(query.GetErrorNumber() && query.GetError() && query.GetErrorNumber() < 0xFFFFFFFF) + LogWrite(LUA__ERROR, 0, "LUA", "Error in UpdateSpawnScriptData, Query: %s, Error: %s", query.GetQuery(), query.GetError()); + else{ + row_id = query.GetLastInsertedID(); + if(row_id > 0) + world.AddSpawnScript(row_id, name); + ret = true; + } + } + else if(spawn_location_id > 0){ + query.RunQuery2(Q_DELETE, "DELETE FROM spawn_scripts where spawn_location_id=%u", spawn_location_id); + query.RunQuery2(Q_INSERT, "INSERT into spawn_scripts (spawn_location_id, lua_script) values(%u, '%s')", spawn_location_id, getSafeEscapeString(name).c_str()); + if(query.GetErrorNumber() && query.GetError() && query.GetErrorNumber() < 0xFFFFFFFF) + LogWrite(LUA__ERROR, 0, "LUA", "Error in UpdateSpawnScriptData, Query: %s, Error: %s", query.GetQuery(), query.GetError()); + else{ + row_id = query.GetLastInsertedID(); + if(row_id > 0) + world.AddSpawnLocationScript(row_id, name); + ret = true; + } + } + else if(spawnentry_id > 0){ + query.RunQuery2(Q_DELETE, "DELETE FROM spawn_scripts where spawnentry_id=%u", spawnentry_id); + query.RunQuery2(Q_INSERT, "INSERT into spawn_scripts (spawnentry_id, lua_script) values(%u, '%s')", spawnentry_id, getSafeEscapeString(name).c_str()); + if(query.GetErrorNumber() && query.GetError() && query.GetErrorNumber() < 0xFFFFFFFF) + LogWrite(LUA__ERROR, 0, "LUA", "Error in UpdateSpawnScriptData, Query: %s, Error: %s", query.GetQuery(), query.GetError()); + else{ + row_id = query.GetLastInsertedID(); + if(row_id > 0) + world.AddSpawnEntryScript(row_id, name); + ret = true; + } + } + } + return ret; +} + +void WorldDatabase::LoadSpawnScriptData() { + int32 total = 0; + Query query; + MYSQL_RES* result = query.RunQuery2(Q_SELECT, "SELECT spawn_id, spawnentry_id, spawn_location_id, lua_script FROM spawn_scripts"); + if(result && mysql_num_rows(result) > 0) + { + MYSQL_ROW row; + int32 spawn_id = 0; + int32 spawnentry_id = 0; + int32 spawn_location_id = 0; + + while(result && (row = mysql_fetch_row(result))) + { + spawn_id = atoul(row[0]); + spawnentry_id = atoul(row[1]); + spawn_location_id = atoul(row[2]); + string spawn_script = string(row[3]); + + if(spawnentry_id > 0) + { + world.AddSpawnEntryScript(spawnentry_id, row[3]); + total++; + } + else if(spawn_location_id > 0) + { + world.AddSpawnLocationScript(spawn_location_id, row[3]); + total++; + } + else if(spawn_id > 0) + { + world.AddSpawnScript(spawn_id, row[3]); + total++; + } + else { + if(row[3]) + LogWrite(LUA__ERROR, 0, "LUA", "Invalid Entry in spawn_scripts table for lua_script '%s' (spawn_id, spawnentry_id and spawn_location_id are all 0)", row[3]); + else + LogWrite(LUA__ERROR, 0, "LUA", "Invalid Entry in spawn_scripts table."); + } + if( spawn_id || spawnentry_id || spawn_location_id ) { + + LogWrite(LUA__DEBUG, 5, "LUA", "SpawnScript %s loaded.", spawn_script.c_str()); + + } + + spawn_id = 0; + spawnentry_id = 0; + spawn_location_id = 0; + } + } + LogWrite(LUA__DEBUG, 0, "LUA", "\tLoaded %u SpawnScript%s", total, total == 1 ? "" : "s"); +} + +void WorldDatabase::LoadZoneScriptData() { + Query query; + int32 total = 0; + MYSQL_RES* result = query.RunQuery2(Q_SELECT, "SELECT `id`, `lua_script` FROM `zones`"); + if (result && mysql_num_rows(result) > 0) { + MYSQL_ROW row; + while(result && (row = mysql_fetch_row(result))) { + if (row[1]) { + int32 zone_id = atoul(row[0]); + string zone_script = string(row[1]); + if (zone_id > 0 && zone_script.length() > 0) { + + LogWrite(LUA__DEBUG, 5, "LUA", "ZoneScript: %s loaded.", zone_script.c_str()); + + world.AddZoneScript(zone_id, zone_script.c_str()); + total++; + } + } + } + } + LogWrite(LUA__DEBUG, 0, "LUA", "\tLoaded %u ZoneScript%s", total, total == 1 ? "" : "s"); +} + +int32 WorldDatabase::LoadSpellScriptData() { + Query query; + MYSQL_ROW row; + int32 count; + MYSQL_RES* result = query.RunQuery2(Q_SELECT, "SELECT `lua_script` FROM `spells`"); // WHERE is_active = 1 + + while (result && (row = mysql_fetch_row(result))) { + if (row[0] && strlen(row[0]) > 0) { + if (lua_interface->LoadLuaSpell(row[0])) + LogWrite(SPELL__DEBUG, 5, "Spells", "SpellScript: %s loaded.", row[0]); + } + } + + count = mysql_num_rows(result); + LogWrite(SPELL__DEBUG, 0, "Spells", "\tLoaded %i SpellScript%s", count, count == 1 ? "" : "s"); + + return count; +} + +void WorldDatabase::LoadFactionList() { + int32 total = 0; + Query query; + MYSQL_RES* result = query.RunQuery2(Q_SELECT, "SELECT id, name, type, description, default_level, negative_change, positive_change FROM factions"); + if(result && mysql_num_rows(result) > 0) { + MYSQL_ROW row; + Faction* faction = 0; + while(result && (row = mysql_fetch_row(result))){ + faction = new Faction; + faction->id = atoul(row[0]); + faction->name = string(row[1]); + faction->type = string(row[2]); + faction->description = string(row[3]); + faction->default_value = atoi(row[4]); + faction->negative_change = atoi(row[5]); + faction->positive_change = atoi(row[6]); + master_faction_list.AddFaction(faction); + total++; + LogWrite(FACTION__DEBUG, 5, "Faction", "---Loading Faction '%s' (%u)", faction->name.c_str(), faction->id); + } + } + LogWrite(FACTION__DEBUG, 3, "Faction", "--Loaded %u Faction%s", total, total == 1 ? "" : "s"); + LoadFactionAlliances(); +} + +void WorldDatabase::SavePlayerFactions(Client* client){ + LogWrite(PLAYER__DEBUG, 3, "Player", "Saving Player Factions..."); + Query query; + map* factions = client->GetPlayer()->GetFactions()->GetFactionValues(); + map::iterator itr; + for(itr = factions->begin(); itr != factions->end(); itr++) + query.RunQuery2(Q_INSERT, "insert into character_factions (char_id, faction_id, faction_level) values(%u, %u, %i) ON DUPLICATE KEY UPDATE faction_level=%i", client->GetCharacterID(), itr->first, itr->second, itr->second); +} + +bool WorldDatabase::LoadPlayerFactions(Client* client) { + LogWrite(PLAYER__DEBUG, 0, "Player", "Loading Player Factions..."); + Query query; + MYSQL_RES* result = query.RunQuery2(Q_SELECT, "SELECT faction_id, faction_level FROM character_factions where char_id=%i", client->GetCharacterID()); + if(result && mysql_num_rows(result) > 0) { + MYSQL_ROW row; + while(result && (row = mysql_fetch_row(result))){ + client->GetPlayer()->GetFactions()->SetFactionValue(atoul(row[0]), atol(row[1])); + } + } + if(query.GetErrorNumber()) + return false; + + return true; +} + +void WorldDatabase::SavePlayerMail(Mail* mail) { + Query query_update; + Query query_insert; + if (mail) { + query_update.RunQuery2(Q_UPDATE, "UPDATE `character_mail` SET `already_read`=%u, `coin_copper`=%u, `coin_silver`=%u, `coin_gold`=%u, `coin_plat`=%u WHERE `id`=%u", mail->already_read, mail->coin_copper, mail->coin_silver, mail->coin_gold, mail->coin_plat, mail->mail_id); + if (query_update.GetAffectedRows() == 0) + query_insert.RunQuery2(Q_UPDATE, "INSERT INTO `character_mail` (`player_to_id`, `player_from`, `subject`, `mail_body`, `already_read`, `mail_type`, `coin_copper`, `coin_silver`, `coin_gold`, `coin_plat`, `stack`, `postage_cost`, `attachment_cost`, `char_item_id`, `time_sent`, `expire_time`) VALUES (%u, '%s', '%s', '%s', %u, %u, %u, %u, %u, %u, %u, %u, %u, %u, %u, %u)", mail->player_to_id, mail->player_from.c_str(), getSafeEscapeString(mail->subject.c_str()).c_str(), getSafeEscapeString(mail->mail_body.c_str()).c_str(), mail->already_read, mail->mail_type, mail->coin_copper, mail->coin_silver, mail->coin_gold, mail->coin_plat, mail->stack, mail->postage_cost, mail->attachment_cost, mail->char_item_id, mail->time_sent, mail->expire_time); + mail->save_needed = false; + } +} + +void WorldDatabase::SavePlayerMail(Client* client) { + if (client) { + MutexMap* mail_list = client->GetPlayer()->GetMail(); + MutexMap::iterator itr = mail_list->begin(); + while (itr.Next()) { + Mail* mail = itr->second; + if (mail->save_needed) + SavePlayerMail(mail); + } + } +} + +void WorldDatabase::LoadPlayerMail(Client* client, bool new_only) { + LogWrite(PLAYER__DEBUG, 0, "Player", "Loading Player Mail..."); + if (client) { + Query query; + MYSQL_RES* result; + if (new_only) + result = query.RunQuery2(Q_SELECT, "SELECT `id`, `player_to_id`, `player_from`, `subject`, `mail_body`, `already_read`, `mail_type`, `coin_copper`, `coin_silver`, `coin_gold`, `coin_plat`, `stack`, `postage_cost`, `attachment_cost`, `char_item_id`, `time_sent`, `expire_time` FROM `character_mail` WHERE `player_to_id`=%u AND `unread`=1", client->GetCharacterID()); + else + result = query.RunQuery2(Q_SELECT, "SELECT `id`, `player_to_id`, `player_from`, `subject`, `mail_body`, `already_read`, `mail_type`, `coin_copper`, `coin_silver`, `coin_gold`, `coin_plat`, `stack`, `postage_cost`, `attachment_cost`, `char_item_id`, `time_sent`, `expire_time` FROM `character_mail` WHERE `player_to_id`=%u", client->GetCharacterID()); + if (result && mysql_num_rows(result) > 0) { + MYSQL_ROW row; + client->SimpleMessage(CHANNEL_COLOR_MAIL, "You've got mail! :)"); + while (result && (row = mysql_fetch_row(result))) { + Mail* mail = new Mail; + mail->mail_id = atoul(row[0]); + mail->player_to_id = atoul(row[1]); + mail->player_from = string(row[2]); + mail->subject = string(row[3]); + if (row[4]) + mail->mail_body = string(row[4]); + mail->already_read = atoi(row[5]); + mail->mail_type = atoi(row[6]); + mail->coin_copper = atoul(row[7]); + mail->coin_silver = atoul(row[8]); + mail->coin_gold = atoul(row[9]); + mail->coin_plat = atoul(row[10]); + mail->stack = atoi(row[11]); + mail->postage_cost = atoul(row[12]); + mail->attachment_cost = atoul(row[13]); + mail->char_item_id = atoul(row[14]); + mail->time_sent = atoul(row[15]); + mail->expire_time = atoul(row[16]); + mail->save_needed = false; + client->GetPlayer()->AddMail(mail); + + LogWrite(PLAYER__DEBUG, 5, "Player", "Loaded Mail ID %i, to: %i, from: %s", atoul(row[0]), atoul(row[1]), string(row[2]).c_str()); + + } + } + } +} + +void WorldDatabase::DeletePlayerMail(Mail* mail) { + Query query; + if (mail) + query.RunQuery2(Q_DELETE, "DELETE FROM `character_mail` WHERE `id`=%u", mail->mail_id); + LogWrite(PLAYER__DEBUG, 0, "Player", "Delete Player Mail..."); +} + +vector* WorldDatabase::GetAllPlayerIDs() { + Query query; + vector* ids = 0; + MYSQL_RES* result = query.RunQuery2(Q_SELECT, "SELECT `id` FROM `characters`"); + MYSQL_ROW row; + while (result && (row = mysql_fetch_row(result))) { + if (ids == 0) + ids = new vector; + ids->push_back(atoul(row[0])); + } + return ids; +} + +void WorldDatabase::GetPetNames(ZoneServer* zone) +{ + DatabaseResult result; + int32 total = 0; + + if( database_new.Select(&result, "SELECT pet_name FROM spawn_pet_names") ) + { + while(result.Next()) + { + zone->pet_names.push_back(result.GetStringStr("pet_name")); + total++; + LogWrite(PET__DEBUG, 5, "Pet", "---Loading Pet Name: '%s'", result.GetStringStr("pet_name")); + } + LogWrite(PET__DEBUG, 0, "Pet", "--Loaded %u Pet Names", total); + } +} + +int32 WorldDatabase::CheckTableVersions(char* tablename) { + Query query; + char* escaped_name = getEscapeString(tablename); + LogWrite(INIT__PATCHER_DEBUG, 1, "Patcher", "\tChecking current version for table: %s", tablename); + MYSQL_RES* result = query.RunQuery2(Q_SELECT, "SELECT version FROM table_versions WHERE name='%s';", escaped_name); + int32 ret_version = 0; + if(result && mysql_num_rows(result) > 0) + { + MYSQL_ROW row; + row = mysql_fetch_row(result); + ret_version = atoul(row[0]); + } + safe_delete_array(escaped_name); + return ret_version; +} + +bool WorldDatabase::RunDatabaseQueries(TableQuery* queries, bool output_result, bool data){ + for(int16 i=0;inum_queries;i++){ + Query query; + if(string(queries->GetQuery(i)).length() > 5) + query.RunQuery2(string(queries->GetQuery(i)), Q_UPDATE); + if(query.GetErrorNumber() && query.GetError() && query.GetErrorNumber() < 0xFFFFFFFF) + { + if(output_result) + LogWrite(INIT__PATCHER_ERROR, 0, "Patcher", "FAILED!"); + LogWrite(INIT__PATCHER_ERROR, 0, "Patcher", "Error in updating tables query '%s': %s", query.GetQuery(), query.GetError()); + return false; + } + } + if(output_result) + LogWrite(INIT__PATCHER_DEBUG, 0, "Patcher", "SUCCESS!"); + if(data) + UpdateDataTableVersion(queries->tablename, queries->latest_version); + else + UpdateTableVersion(queries->tablename, queries->latest_version); + return true; +} + +void WorldDatabase::UpdateDataTableVersion(char* name, int32 version){ + Query query; + char* escaped_name = getEscapeString(name); + query.RunQuery2(Q_UPDATE, "update table_versions set download_version=%u where name='%s'", version, escaped_name); + if(query.GetErrorNumber() && query.GetError() && query.GetErrorNumber() < 0xFFFFFFFF) + { + LogWrite(INIT__PATCHER_ERROR, 0, "Patcher", "Error in updating version table query '%s': %s", query.GetQuery(), query.GetError()); + } + safe_delete_array(escaped_name); +} + +void WorldDatabase::UpdateTableVersion(char* name, int32 version){ + Query query; + char* escaped_name = getEscapeString(name); + query.RunQuery2(Q_UPDATE, "INSERT into table_versions (name, version) values('%s', %u) ON DUPLICATE KEY UPDATE version=%u", escaped_name, version, version); + if(query.GetErrorNumber() && query.GetError() && query.GetErrorNumber() < 0xFFFFFFFF) + { + LogWrite(WORLD__ERROR, 0, "Patcher", "Error in updating version table query '%s': %s", query.GetQuery(), query.GetError()); + } + safe_delete_array(escaped_name); +} + +bool WorldDatabase::CheckVersionTable() { + Query query; + + // todo: suppress SQL errors while this command is running, because ERROR is normal on a new DB creation (Zcoretri) + MYSQL_RES* result = query.RunQuery2(Q_SELECT, "SHOW COLUMNS FROM table_versions"); + if(result && mysql_num_rows(result) > 0) { + LogWrite(INIT__PATCHER_DEBUG, 0, "Patcher", "--DB Schema exists! Checking for updates..."); + return true; + } + else { + LogWrite(INIT__PATCHER_ERROR, 0, "Patcher", "Version Table NOT Found! Creating..."); + Query query2; + query2.RunQuery2(Q_UPDATE, "CREATE TABLE `table_versions` (`id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT, `name` VARCHAR(64) NOT NULL DEFAULT '',`version` INT(10) UNSIGNED NOT NULL DEFAULT '0',`download_version` INT(10) UNSIGNED NOT NULL DEFAULT '0',PRIMARY KEY (`id`),UNIQUE KEY `UniqueName` (`name`)) ENGINE=INNODB DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci;"); + + LogWrite(INIT__PATCHER_DEBUG, 0, "Patcher", "--Setting table_version = 1..."); + Query query3; + query3.RunQuery2(Q_INSERT, "INSERT INTO table_versions (name, version) VALUES ('table_versions', 1)"); + } + return false; +} + +sint32 WorldDatabase::GetLatestDataTableVersion(char* name){ + Query query; + char* escaped_name = getEscapeString(name); + MYSQL_RES* result = query.RunQuery2(Q_SELECT, "SELECT download_version FROM table_versions where name='%s'", escaped_name); + sint32 ret_version = 0; + if(result && mysql_num_rows(result) > 0) { + MYSQL_ROW row; + row = mysql_fetch_row(result); + ret_version = atol(row[0]); + } + safe_delete_array(escaped_name); + return ret_version; +} + +int32 WorldDatabase::GetMaxHotBarID(){ + Query query; + MYSQL_RES* result = query.RunQuery2(Q_SELECT, "SELECT max(id) FROM character_skillbar"); + int32 ret = 0; + if(result && mysql_num_rows(result) > 0) { + MYSQL_ROW row; + row = mysql_fetch_row(result); + if(row && row[0]) + ret = strtoul(row[0], NULL, 0); + } + return ret; +} + +void WorldDatabase::SaveQuickBar(int32 char_id, vector* quickbar_items){ + vector::iterator itr; + QuickBarItem* qbi = 0; + for(itr = quickbar_items->begin(); itr != quickbar_items->end(); itr++){ + qbi = *itr; + if(!qbi) + continue; + if(qbi->deleted == false){ + Query query; + if(qbi->text.size > 0){ + query.RunQuery2(Q_REPLACE, "replace into character_skillbar (id, hotbar, slot, char_id, spell_id, type, text_val, tier) values(%u, %u, %u, %u, %u, %i, '%s', %i)", + qbi->unique_id, qbi->hotbar, qbi->slot, char_id, qbi->id, qbi->type, getSafeEscapeString(qbi->text.data.c_str()).c_str(), qbi->tier); + } + else{ + query.RunQuery2(Q_REPLACE, "replace into character_skillbar (id, hotbar, slot, char_id, spell_id, type, text_val, tier) values(%u, %u, %u, %u, %u, %i, 'Unused', %i)", + qbi->unique_id, qbi->hotbar, qbi->slot, char_id, qbi->id, qbi->type, qbi->tier); + } + } + else{ + Query query; + query.RunQuery2(Q_DELETE, "delete FROM character_skillbar where hotbar=%u and slot=%u and char_id=%u", qbi->hotbar, qbi->slot, char_id); + } + } +} + +map >* WorldDatabase::LoadSpellClasses(){ + map >* ret = new map >(); + Query query; + MYSQL_RES* result = query.RunQuery2(Q_SELECT, "SELECT spell_id, adventure_class_id, tradeskill_class_id, level FROM spell_classes"); + MYSQL_ROW row; + LevelArray* level = 0; + while(result && (row = mysql_fetch_row(result))){ + level = new LevelArray(); + level->adventure_class = atoi(row[1]); + level->tradeskill_class = atoi(row[2]); + level->spell_level = atoi(row[3]); + (*ret)[atoul(row[0])].push_back(level); + } + return ret; +} + +void WorldDatabase::LoadTraits(){ + Query query; + MYSQL_ROW row; + TraitData* trait; + + MYSQL_RES* result = query.RunQuery2(Q_SELECT, "SELECT `spell_id`, `level`, `class_req`, `race_req`, `isTrait`,`isInate`, `isFocusEffect`, `isTraining`,`tier`, `group` FROM spell_traits"); + while (result && (row = mysql_fetch_row(result))){ + trait = new TraitData; + int8 i = 0; + trait->spellID = strtoul(row[0], NULL, 0); + trait->level = atoi(row[(++i)]); + trait->classReq = atoi(row[(++i)]); + trait->raceReq = atoi(row[(++i)]); + trait->isTrait = (atoi(row[(++i)]) == 0) ? false : true; + trait->isInate = (atoi(row[(++i)]) == 0) ? false : true; + trait->isFocusEffect = (atoi(row[(++i)]) == 0) ? false : true; + trait->isTraining = (atoi(row[(++i)]) == 0) ? false : true; + trait->tier = atoi(row[(++i)]); + trait->group = atoi(row[(++i)]); + + master_trait_list.AddTrait(trait); + } + + LogWrite(SPELL__INFO, 0, "Traits", "Loaded %u Trait(s)", master_trait_list.Size()); +} + +void WorldDatabase::LoadSpells() +{ + DatabaseResult result; + Spell *spell; + SpellData *data; + int32 t_now = Timer::GetUnixTimeStamp(); + int32 total = 0; + map >* level_data = LoadSpellClasses(); + + if( !database_new.Select(&result, "SELECT s.`id`, ts.spell_id, ts.index, `name`, `description`, `type`, `class_skill`, `mastery_skill`, `tier`, `is_aa`,`hp_req`, `power_req`,`power_by_level`, `cast_time`, `recast`, `radius`, `max_aoe_targets`, `req_concentration`, `range`, `duration1`, `duration2`, `resistibility`, `hp_upkeep`, `power_upkeep`, `duration_until_cancel`, `target_type`, `recovery`, `power_req_percent`, `hp_req_percent`, `icon`, `icon_heroic_op`, `icon_backdrop`, `success_message`, `fade_message`, `cast_type`, `lua_script`, `call_frequency`, `interruptable`, `spell_visual`, `effect_message`, `min_range`, `can_effect_raid`, `affect_only_group_members`, `hit_bonus`, `display_spell_tier`, `friendly_spell`, `group_spell`, `spell_book_type`, spell_type+0, s.is_active, savagery_req, savagery_req_percent, savagery_upkeep, dissonance_req, dissonance_req_percent, dissonance_upkeep, linked_timer_id, det_type, incurable, control_effect_type, cast_while_moving, casting_flags, persist_through_death, not_maintained, savage_bar, savage_bar_slot, soe_spell_crc " + "FROM (spells s, spell_tiers st) " + "LEFT JOIN spell_ts_ability_index ts " + "ON s.`id` = ts.spell_id " + "WHERE s.id = st.spell_id AND s.is_active = 1 " + "ORDER BY s.`id`, `tier`") ) + { + // error + } + else + { + while( result.Next() ) + { + data = new SpellData; + int32 spell_id = result.GetInt32Str("id"); + string spell_name = result.GetStringStr("name"); + + /* General Spell info */ + data->id = spell_id; + data->soe_spell_crc = result.GetInt32Str("soe_spell_crc"); + data->tier = result.GetInt8Str("tier"); + data->ts_loc_index = result.GetInt8Str("index"); + data->name.data = spell_name.c_str(); + data->name.size = data->name.data.length(); + data->description.data = result.GetStringStr("description"); + data->description.size = data->description.data.length(); + data->icon = result.GetSInt16Str("icon"); + data->icon_heroic_op = result.GetInt16Str("icon_heroic_op"); + data->icon_backdrop = result.GetInt16Str("icon_backdrop"); + data->spell_visual = result.GetInt32Str("spell_visual"); + data->type = result.GetInt16Str("type"); + data->target_type = result.GetInt8Str("target_type"); + data->cast_type = result.GetInt8Str("cast_type"); + data->spell_book_type = result.GetInt32Str("spell_book_type"); + data->det_type = result.GetInt8Str("det_type"); + data->incurable = (result.GetInt8Str("incurable") == 1); + data->control_effect_type = result.GetInt8Str("control_effect_type"); + data->casting_flags = result.GetInt32Str("casting_flags"); + data->savage_bar = result.GetInt8Str("savage_bar"); + data->savage_bar_slot = result.GetInt8Str("savage_bar_slot"); + data->spell_type = result.IsNullStr("spell_type+0") ? 0 : result.GetInt8Str("spell_type+0"); + + + /* Toggles */ + data->interruptable = ( result.GetInt8Str("interruptable") == 1); + data->duration_until_cancel = ( result.GetInt8Str("duration_until_cancel") == 1); + data->can_effect_raid = result.GetInt8Str("can_effect_raid"); + data->affect_only_group_members = result.GetInt8Str("affect_only_group_members"); + data->display_spell_tier = result.GetInt8Str("display_spell_tier"); + data->friendly_spell = result.GetInt8Str("friendly_spell"); + data->group_spell = result.GetInt8Str("group_spell"); + data->is_active = result.GetInt8Str("is_active"); + data->persist_though_death = ( result.GetInt8Str("persist_through_death") == 1); + data->cast_while_moving = ( result.GetInt8Str("cast_while_moving") == 1); + data->not_maintained = ( result.GetInt8Str("not_maintained") == 1); + data->is_aa = (result.GetInt8Str("is_aa") == 1); + + /* Skill Requirements */ + data->class_skill = result.GetInt32Str("class_skill"); + data->mastery_skill = result.GetInt32Str("mastery_skill"); + // no min_class_skill_req? + + /* Cost */ + data->req_concentration = result.GetInt16Str("req_concentration"); + data->hp_req = result.GetInt16Str("hp_req"); + data->hp_upkeep = result.GetInt16Str("hp_upkeep"); + data->hp_req_percent = result.GetInt8Str("hp_req_percent"); + data->power_req = result.GetFloatStr("power_req"); + + + + + + data->power_by_level = ( result.GetInt8Str("power_by_level") == 0)? false : true; + data->power_upkeep = result.GetInt16Str("power_upkeep"); + data->power_req_percent = result.GetInt8Str("power_req_percent"); + data->savagery_req = result.GetInt16Str("savagery_req"); + data->savagery_upkeep = result.GetInt16Str("savagery_upkeep"); + data->savagery_req_percent = result.GetInt8Str("savagery_req_percent"); + data->dissonance_req = result.GetInt16Str("dissonance_req"); + data->dissonance_upkeep = result.GetInt16Str("dissonance_upkeep"); + data->dissonance_req_percent = result.GetInt8Str("dissonance_req_percent"); + + /* Spell Parameters */ + data->call_frequency = result.GetInt32Str("call_frequency"); + data->cast_time = result.GetInt16Str("cast_time"); + data->duration1 = result.GetInt32Str("duration1"); + data->duration2 = result.GetInt32Str("duration2"); + data->hit_bonus = result.GetFloatStr("hit_bonus"); + data->max_aoe_targets = result.GetInt16Str("max_aoe_targets"); + data->min_range = result.GetFloatStr("min_range"); + data->radius = result.GetFloatStr("radius"); + data->range = result.GetFloatStr("range"); + data->recast = result.GetFloatStr("recast"); + data->recovery = result.GetFloatStr("recovery"); + data->resistibility = result.GetFloatStr("resistibility"); + data->linked_timer = result.GetInt32Str("linked_timer_id"); + + /* Cast Messaging */ + string message = result.GetStringStr("success_message"); + if( message.length() > 0 ) + data->success_message = message; + + message = result.GetStringStr("fade_message"); + if( message.length() > 0 ) + data->fade_message = string(message); + + message = result.GetStringStr("effect_message"); + if( message.length() > 0 ) + data->effect_message = string(message); + + string lua_script = result.GetStringStr("lua_script"); + if( lua_script.length() > 0 ) + data->lua_script = string(lua_script); + + + /* Load spell level data */ + spell = new Spell(data); + + if(level_data && level_data->count(data->id) > 0) + { + vector* level_array = &((*level_data)[data->id]); + + for(int8 i=0; isize(); i++) + { + spell->AddSpellLevel(level_array->at(i)->adventure_class, level_array->at(i)->tradeskill_class, level_array->at(i)->spell_level*10); + } + } + + + /* Add spell to master list */ + master_spell_list.AddSpell(data->id, data->tier, spell); + total++; + + if( lua_script.length() > 0 ) + LogWrite(SPELL__DEBUG, 5, "Spells", "\t%i. %s (Tier: %i) - '%s'", spell_id, spell_name.c_str(), data->tier, lua_script.c_str()); + else if(data->is_active) + LogWrite(SPELL__WARNING, 1, "Spells", "\tSpell %s (%u, Tier: %i) set 'Active', but missing LUAScript", spell_name.c_str(), spell_id, data->tier); + + } // end while + } // end else + + LogWrite(SPELL__DEBUG, 0, "Spells", "Loading Spell Effects..."); + LoadSpellEffects(); + + LogWrite(SPELL__DEBUG, 0, "Spells", "Loading Spell LUA Data..."); + LoadSpellLuaData(); + + if(lua_interface) + { + LogWrite(SPELL__DEBUG, 0, "Spells", "Loading Spells Scripts..."); + LoadSpellScriptData(); + } + + if (level_data) { + map >::iterator map_itr; + vector::iterator level_itr; + + for(map_itr = level_data->begin(); map_itr != level_data->end(); map_itr++) + { + for(level_itr = map_itr->second.begin(); level_itr != map_itr->second.end(); level_itr++) + { + safe_delete(*level_itr); + } + } + } + + safe_delete(level_data); + + LogWrite(SPELL__INFO, 0, "Spells", "Loaded %u Spell%s (took %u seconds)", total, total == 1 ? "" : "s", Timer::GetUnixTimeStamp() - t_now); +} + +void WorldDatabase::LoadSpellLuaData(){ + Spell *spell; + Query query; + MYSQL_ROW row; + int32 total = 0; + MYSQL_RES *result = query.RunQuery2(Q_SELECT, "SELECT `spell_id`,`tier`,`value_type`,`value`,`value2`,`dynamic_helper` " + "FROM `spell_data` " + "ORDER BY `index_field`"); + + while (result && (row = mysql_fetch_row(result))) { + if ((spell = master_spell_list.GetSpell(atoul(row[0]), atoi(row[1]))) && row[2] && row[3] && row[4] && row[4]) { + + LogWrite(SPELL__DEBUG, 5, "Spells", "\tLoading Spell LUA Data for spell_id: %u", atoul(row[0])); + + if (!strcmp(row[2], "INT")) + spell->AddSpellLuaDataInt(atoi(row[3]), atoi(row[4]), string(row[5])); + else if (!strcmp(row[2], "FLOAT")) + spell->AddSpellLuaDataFloat(atof(row[3]), atof(row[4]),string(row[5])); + else if (!strcmp(row[2], "BOOL")) + spell->AddSpellLuaDataBool(!(strncasecmp(row[3], "true", 4)), string(row[5])); + else if (!strcmp(row[2], "STRING")) + spell->AddSpellLuaDataString(string(row[3]), string(row[4]), string(row[5])); + else + LogWrite(SPELL__ERROR, 0, "Spells", "Invalid Lua Spell data '%s' for Spell ID: %u", row[2], spell->GetSpellID()); + total++; + } + } + LogWrite(SPELL__DEBUG, 0, "Spells", "\tLoaded %i Spell LUA Data entr%s.", total, total == 1 ? "y" : "ies"); +} + +void WorldDatabase::LoadSpellEffects() { + Spell *spell; + Query query; + MYSQL_ROW row; + int32 total = 0; + MYSQL_RES *result = query.RunQuery2(Q_SELECT, "SELECT `spell_id`,`tier`,`percentage`,`bullet`,`description` " + "FROM `spell_display_effects` " + "ORDER BY `spell_id`,`id` ASC"); + + while (result && (row = mysql_fetch_row(result))) { + if ((spell = master_spell_list.GetSpell(atoul(row[0]), atoi(row[1]))) && row[4]) { + + LogWrite(SPELL__DEBUG, 5, "Spells", "\tLoading Spell Effects for spell_id: %u", atoul(row[0])); + + spell->AddSpellEffect(atoi(row[2]), atoi(row[3]), row[4]); + total++; + } + } + LogWrite(SPELL__DEBUG, 0, "Spells", "\tLoaded %u Spell Effect%s.", total, total == 1 ? "" : "s"); +} + +int32 WorldDatabase::LoadPlayerSkillbar(Client* client){ + client->GetPlayer()->ClearQuickbarItems(); + Query query; + MYSQL_RES* result = query.RunQuery2(Q_SELECT, "SELECT id, type, spell_id, slot, text_val, hotbar, tier FROM character_skillbar where char_id = %u", client->GetCharacterID()); + MYSQL_ROW row; + int32 count = 0; + while(result && (row = mysql_fetch_row(result))){ + count++; + int8 tier = atoi(row[6]); + Spell* spell = master_spell_list.GetSpell(atoul(row[2]), tier); + if(spell) + client->GetPlayer()->AddQuickbarItem(atoul(row[5]), atoul(row[3]), atoul(row[1]), spell->GetSpellIcon(), spell->GetSpellIconBackdrop(), spell->GetSpellID(), spell->GetSpellTier(), atoul(row[0]), row[4], false); + else if(atoul(row[1]) == QUICKBAR_MACRO) + client->GetPlayer()->AddQuickbarItem(atoul(row[5]), atoul(row[3]), atoul(row[1]), client->GetPlayer()->macro_icons[atoul(row[2])], 0xFFFF, atoul(row[2]), 0, atoul(row[0]), row[4], false); + else + client->GetPlayer()->AddQuickbarItem(atoul(row[5]), atoul(row[3]), atoul(row[1]), 0, 0, atoul(row[2]), 0, atoul(row[0]), row[4], false); + } + return count; +} + +bool WorldDatabase::DeleteCharacter(int32 account_id, int32 character_id){ + Guild *guild; + + if((guild = guild_list.GetGuild(GetGuildIDByCharacterID(character_id)))) + guild->RemoveGuildMember(character_id); + + Query query; + query.RunQuery2(Q_DELETE, "DELETE FROM characters WHERE id=%u AND account_id=%u", character_id, account_id); + if(!query.GetAffectedRows()) + { + //No error just in case ppl try doing stupid stuff + return false; + } + else{ //successfull, so the character did exist with that character_id and account_id + // new DB constraints should handle all these deletes, and more... commenting out for now + /*query.RunQuery2(Q_DELETE, "delete FROM character_details where char_id=%u", character_id); + query.RunQuery2(Q_DELETE, "delete FROM character_factions where char_id=%u", character_id); + query.RunQuery2(Q_DELETE, "delete FROM character_items where char_id=%u", character_id); + query.RunQuery2(Q_DELETE, "delete FROM character_skillbar where char_id=%u", character_id); + query.RunQuery2(Q_DELETE, "delete FROM character_skills where char_id=%u", character_id); + query.RunQuery2(Q_DELETE, "delete FROM character_spells where char_id=%u", character_id); + query.RunQuery2(Q_DELETE, "delete FROM char_colors where char_id=%u", character_id);*/ + } + return true; +} + +void WorldDatabase::DeleteCharacterSpell(int32 character_id, int32 spell_id) { + if (character_id > 0 && spell_id > 0) { + Query query; + query.RunQuery2(Q_DELETE, "DELETE FROM character_spells WHERE char_id=%u AND spell_id=%u", character_id, spell_id); + } +} + +bool WorldDatabase::GetItemResultsToClient (Client* client, const char* varSearch, int maxResults) { + Query query; + MYSQL_ROW row; + int results = 0; + + if( maxResults > 10 && client->GetAdminStatus ( ) < 100 ) + maxResults = 10; + else if( maxResults > 20 ) + maxResults = 20; + + client->Message(CHANNEL_COLOR_YELLOW, "Item Search Results"); + client->Message(CHANNEL_COLOR_YELLOW, "ResultNum) [ItemID] ItemName"); + string itemsearch_query = string("SELECT id, name FROM items where name like '%%%s%%' limit %i"); + + MYSQL_RES* result = query.RunQuery2(Q_SELECT, itemsearch_query.c_str(),getSafeEscapeString(varSearch).c_str(),maxResults); + while(result && (row = mysql_fetch_row(result))){ + results++; + client->Message(CHANNEL_COLOR_YELLOW, "%i) [%s] %s",results,row[0],row[1]); + } + + if(results == 0) + { + client->Message(CHANNEL_COLOR_YELLOW, "No Items Found."); + return false; + } + + client->Message(CHANNEL_COLOR_YELLOW, "%i Items Found.",results); + return true; +} + +void WorldDatabase::SaveWorldTime(WorldTime* time){ + Query query; + query.RunQuery2(Q_REPLACE, "replace into variables (variable_name, variable_value) values('gametime', '%i/%i/%i %i:%i')", time->month, time->day, time->year, time->hour, time->minute); +} + +void WorldDatabase::SaveBugReport(const char* category, const char* subcategory, const char* causes_crash, const char* reproducible, const char* summary, const char* description, const char* version, const char* player, int32 account_id, const char* spawn_name, int32 spawn_id, int32 zone_id){ + Query query; + string bug_report = string("insert into bugs (category, subcategory, causes_crash, reproducible, summary, description, version, player, account_id, spawn_name, spawn_id, zone_id) values('%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', %u, '%s', %u, %u)"); + query.RunQuery2(Q_INSERT, bug_report.c_str(), getSafeEscapeString(category).c_str(), getSafeEscapeString(subcategory).c_str(), + getSafeEscapeString(causes_crash).c_str(), getSafeEscapeString(reproducible).c_str(), getSafeEscapeString(summary).c_str(), + getSafeEscapeString(description).c_str(), getSafeEscapeString(version).c_str(), getSafeEscapeString(player).c_str(), account_id, + getSafeEscapeString(spawn_name).c_str(), spawn_id, zone_id); + FixBugReport(); + FixBugReport(); + FixBugReport(); +} + +void WorldDatabase::FixBugReport(){ + Query query; + string bug_report = string("update bugs set description = REPLACE(description,SUBSTRING(description,INSTR(description,'%'), 3),char(CONV(SUBSTRING(description,INSTR(description,'%')+1, 2), 16, 10))), summary = REPLACE(summary,SUBSTRING(summary,INSTR(summary,'%'), 3),char(CONV(SUBSTRING(summary,INSTR(summary,'%')+1, 2), 16, 10)))"); + query.RunQuery2(bug_report.c_str(), Q_UPDATE); +} + +int32 WorldDatabase::LoadQuests(){ + Query query; + MYSQL_ROW row; + MYSQL_RES* result = query.RunQuery2(Q_SELECT, "SELECT `quest_id`, `name`, `type`, `zone`, `level`, `enc_level`, `description`, `lua_script`, `completed_text`, `spawn_id` FROM `quests`"); + Quest* quest = 0; + char* name = 0; + char* type = 0; + char* zone = 0; + int8 level = 0; + int8 enc_level = 0; + char* description = 0; + char* script = 0; + int32 total = 0; + int32 id = 0; + char* completed_description = 0; + int32 return_npc_id = 0; + if(result){ + while(result && (row = mysql_fetch_row(result))){ + id = atoul(row[0]); + name = row[1]; + type = row[2]; + zone = row[3]; + level = atoul(row[4]); + enc_level = atoul(row[5]); + description = row[6]; + script = row[7]; + completed_description = row[8]; + return_npc_id = atoi(row[9]); + if(lua_interface) { + quest = lua_interface->LoadQuest(id, name, type, zone, level, description, script); + } + if(quest){ + + LogWrite(QUEST__DEBUG, 5, "Quests", "\tLoading Quest: '%s' (%u)", name, id); + + LoadQuestDetails(quest); + quest->SetCompletedDescription(string(completed_description)); + quest->SetQuestReturnNPC(return_npc_id); + quest->SetEncounterLevel(enc_level); + total++; + master_quest_list.AddQuest(id, quest); + } + } + } + LogWrite(QUEST__DEBUG, 0, "Quest", "\tLoaded %i Quest(s)", total); + return total; +} + +void WorldDatabase::LoadQuestDetails(Quest* quest) { + Query query; + MYSQL_ROW row; + MYSQL_RES* result = query.RunQuery2(Q_SELECT, "SELECT `type`, `subtype`, `value`, `faction_id`, `quantity` FROM `quest_details` WHERE `quest_id`=%u", quest->GetQuestID()); + string type; + string subtype; + sint64 value; + int32 faction_id; + int32 quantity; + while (result && (row = mysql_fetch_row(result))) { + type = string(row[0]); + subtype = string(row[1]); + value = atoi(row[2]); + faction_id = atoi(row[3]); + quantity = atoi(row[4]); + + + LogWrite(QUEST__DEBUG, 5, "Quests", "\t- Type: %s, SubType: %s, Val: %u, Faction: %u, Qty: %u", type.c_str(), subtype.c_str(), value, faction_id, quantity); + + + if (type == "Prereq") { + if (subtype == "Class") + quest->AddPrereqClass(value); + else if (subtype == "Faction") + quest->AddPrereqFaction(faction_id, value); + else if (subtype == "Item") { + Item* master_item = master_item_list.GetItem(value); + if (master_item) { + Item* item = new Item(master_item); + quest->AddPrereqItem(item); + } + } + else if (subtype == "AdvLevel") + quest->SetPrereqLevel(value); + else if (subtype == "Quest") + quest->AddPrereqQuest(value); + else if (subtype == "Race") + quest->AddPrereqRace(value); + else if (subtype == "TSClass") + quest->AddPrereqTradeskillClass(value); + else if (subtype == "TSLevel") + quest->SetPrereqTSLevel(value); + else if (subtype == "MaxTSLevel") + quest->SetPrereqMaxTSLevel(value); + else if (subtype == "MaxAdvLevel") + quest->SetPrereqMaxLevel(value); + } + else if (type == "Reward") { + if (subtype == "Item") { + Item* master_item = master_item_list.GetItem(value); + if (master_item) { + Item* item = new Item(master_item); + item->details.count = quantity; + quest->AddRewardItem(item); + } + } + else if (subtype == "Selectable") { + Item* master_item = master_item_list.GetItem(value); + if (master_item) { + Item* item = new Item(master_item); + item->details.count = quantity; + quest->AddSelectableRewardItem(item); + } + } + else if (subtype == "Coin") { + int32 copper = 0; + int32 silver = 0; + int32 gold = 0; + int32 plat = 0; + if (value >= 1000000) { + plat = value / 1000000; + value -= 1000000 * plat; + } + if (value >= 10000) { + gold = value / 10000; + value -= 10000 * gold; + } + if (value >= 100) { + silver = value / 100; + value -= 100 * silver; + } + if (value > 0) + copper = value; + quest->AddRewardCoins(copper, silver, gold, plat); + } + else if (subtype == "MaxCoin") { + quest->AddRewardCoinsMax(value); + } + else if (subtype == "Faction") + quest->AddRewardFaction(faction_id, value); + else if (subtype == "Experience") + quest->SetRewardXP(value); + else if (subtype == "TSExperience") + quest->SetRewardTSXP(value); + } + } +} + +void WorldDatabase::LoadMerchantInformation() { + LogWrite(MERCHANT__DEBUG, 0, "Merchant", "\tClearing Merchant Inventory..."); + world.DeleteMerchantItems(); + + LogWrite(MERCHANT__DEBUG, 0, "Merchant", "\tLoading Merchant Inventory..."); + LoadMerchantInventory(); + + Query query; + MYSQL_ROW row; + MYSQL_RES* result = query.RunQuery2(Q_SELECT, "SELECT merchant_id, inventory_id FROM merchants ORDER BY merchant_id"); + int32 total = 0; + int32 last_merchant_id = 0; + int32 id = 0; + MerchantInfo* merchant = 0; + if(result) { + while(result && (row = mysql_fetch_row(result))) { + id = atoul(row[0]); + + LogWrite(MERCHANT__DEBUG, 5, "Merchant", "\tMerchantID: %u, InventoryID: %u", id, atoul(row[1])); + + if(id != last_merchant_id) { + if(merchant) + world.AddMerchantInfo(last_merchant_id, merchant); + merchant = new MerchantInfo; + last_merchant_id = id; + total++; + } + merchant->inventory_ids.push_back(atoul(row[1])); + } + if(merchant) + world.AddMerchantInfo(last_merchant_id, merchant); + } + LogWrite(MERCHANT__DEBUG, 0, "Merchant", "\tLoaded %i Merchant List(s)", total); +} + +void WorldDatabase::LoadMerchantInventory(){ + Query query; + MYSQL_ROW row; + MYSQL_RES* result = query.RunQuery2(Q_SELECT, "SELECT inventory_id, item_id, quantity, price_item_id, price_item_qty, price_item2_id, price_item2_qty, price_status, price_coins, price_stationcash FROM merchant_inventory ORDER BY inventory_id"); + int32 total = 0; + int32 id; + + if(result) { + while(result && (row = mysql_fetch_row(result))) { + MerchantItemInfo ItemInfo; + id = atoul(row[0]); + ItemInfo.item_id = atoul(row[1]); + ItemInfo.quantity = atoi(row[2]); + ItemInfo.price_item_id = atoul(row[3]); + ItemInfo.price_item_qty = atoi(row[4]); + ItemInfo.price_item2_id = atoul(row[5]); + ItemInfo.price_item2_qty = atoi(row[6]); + ItemInfo.price_status = atoul(row[7]); + ItemInfo.price_coins = atoul(row[8]); + ItemInfo.price_stationcash = atoul(row[9]); + LogWrite(MERCHANT__DEBUG, 5, "Merchant", "\tInventoryID: %u, ItemID: %u, Qty: %u", id, ItemInfo.item_id, ItemInfo.quantity); + world.AddMerchantItem(id, ItemInfo); + total++; + } + } + LogWrite(MERCHANT__DEBUG, 0, "Merchant", "\tLoaded %i Merchant Inventory Item(s)", total); +} + +string WorldDatabase::GetMerchantDescription(int32 merchant_id) { + Query query; + MYSQL_ROW row; + string description; + MYSQL_RES* result = query.RunQuery2(Q_SELECT, "SELECT `description` FROM `merchants` WHERE `merchant_id`=%u", merchant_id); + if (result && (row = mysql_fetch_row(result))) + description = string(row[0]); + return description; +} + +void WorldDatabase::LoadTransporters(ZoneServer* zone){ + int32 total = 0; + zone->DeleteGlobalTransporters(); + Query query; + MYSQL_ROW row; + MYSQL_RES* result = query.RunQuery2(Q_SELECT, "SELECT transport_id, transport_type, display_name, message, destination_zone_id, destination_x, destination_y, destination_z, destination_heading, trigger_location_zone_id, trigger_location_x, trigger_location_y, trigger_location_z, trigger_radius, cost, id, min_level, max_level, quest_req, quest_step_req, quest_completed, map_x, map_y FROM transporters ORDER BY transport_id"); + if(result){ + while(result && (row = mysql_fetch_row(result))){ + LogWrite(TRANSPORT__DEBUG, 5, "Transport", "---Loading Transporter ID: %u, transport_type: %s", row[0], row[1]); + LogWrite(TRANSPORT__DEBUG, 7, "Transport", "---display_name: %s, message: %s", row[2], row[3]); + LogWrite(TRANSPORT__DEBUG, 7, "Transport", "---destination_zone_id: %s", row[4]); + LogWrite(TRANSPORT__DEBUG, 7, "Transport", "---destination_x: %s, destination_y: %s, destination_z: %s, destination_heading: %s", row[5], row[6], row[7], row[8]); + LogWrite(TRANSPORT__DEBUG, 7, "Transport", "---trigger_location_zone_id: %s", row[9]); + LogWrite(TRANSPORT__DEBUG, 7, "Transport", "---trigger_location_x: %s, trigger_location_y: %s, trigger_location_z: %s", row[10], row[11], row[12], row[13]); + LogWrite(TRANSPORT__DEBUG, 7, "Transport", "---trigger_radius: %s, cost: %s, id: %s", row[14], row[15]); + string name = ""; + if(row[2]) + name = string(row[2]); + string message = ""; + if(row[3]) + message = string(row[3]); + if(row[1] && strcmp(row[1], "Zone") == 0) + zone->AddTransporter(atoul(row[0]), TRANSPORT_TYPE_ZONE, name, message, atoul(row[4]), atof(row[5]), atof(row[6]), atof(row[7]), atof(row[8]), atoul(row[14]), atoul(row[15]), atoi(row[16]), atoi(row[17]), atoul(row[18]), atoi(row[19]), atoul(row[20]), atoul(row[21]), atoul(row[22])); + else if(row[1] && strcmp(row[1], "Location") == 0) + zone->AddLocationTransporter(atoul(row[9]), message, atof(row[10]), atof(row[11]), atof(row[12]), atof(row[13]), atoul(row[4]), atof(row[5]), atof(row[6]), atof(row[7]), atof(row[8]), atoul(row[14]), atoul(row[15])); + else + zone->AddTransporter(atoul(row[0]), TRANSPORT_TYPE_GENERIC, "", message, atoul(row[4]), atof(row[5]), atof(row[6]), atof(row[7]), atof(row[8]), atoul(row[14]), atoul(row[15]), atoi(row[16]), atoi(row[17]), atoul(row[18]), atoi(row[19]), atoul(row[20]), atoul(row[21]), atoul(row[22])); + total++; + } + } + LogWrite(TRANSPORT__DEBUG, 0, "Transport", "--Loaded %i Transporter(s)", total); + LoadTransportMaps(zone); +} + +void WorldDatabase::LoadFogInit(string zone, PacketStruct* packet) +{ + LogWrite(WORLD__TRACE, 9, "World", "Enter: %s", __FUNCTION__); + + if(!packet || zone.length() == 0) + return; + Query query; + MYSQL_ROW row; + MYSQL_RES* result = query.RunQuery2(Q_SELECT, "SELECT highest, lowest, zone_name, explored_map_name, unexplored_map_name, bounds1_x, bounds1_z, bounds2_x, bounds2_z, bounds3_x, bounds3_z, bounds4_x, bounds4_z, explored_key, unexplored_key, map_id FROM map_data where zone_name like '%s%%'", getSafeEscapeString(&zone).c_str()); + if(result){ + int count = mysql_num_rows(result); + int i=0; + int64 explored_key; + int64 unexplored_key; + packet->setArrayLengthByName("num_maps", count); + while(result && (row = mysql_fetch_row(result))){ + packet->setDataByName("highest_z", atof(row[0])); + packet->setDataByName("lowest_z", atof(row[1])); + packet->setDataByName("map_id", atoul(row[15])); + packet->setArrayDataByName("unknown7", 1600, i); + packet->setArrayDataByName("unknown8", 1200, i); + packet->setArrayDataByName("zone_name", row[2], i); + packet->setArrayDataByName("explored_map_name", row[3], i); + packet->setArrayDataByName("unexplored_map_name", row[4], i); + packet->setArrayDataByName("map_bounds1_x", atof(row[5]), i); + packet->setArrayDataByName("map_bounds1_z", atof(row[6]), i); + packet->setArrayDataByName("map_bounds2_x", atof(row[7]), i); + packet->setArrayDataByName("map_bounds2_z", atof(row[8]), i); + packet->setArrayDataByName("map_bounds3_x", atof(row[9]), i); + packet->setArrayDataByName("map_bounds3_z", atof(row[10]), i); + packet->setArrayDataByName("map_bounds4_x", atof(row[11]), i); + packet->setArrayDataByName("map_bounds4_z", atof(row[12]), i); +#ifdef WIN32 + explored_key = _strtoui64(row[13], NULL, 10); + unexplored_key = _strtoui64(row[14], NULL, 10); +#else + explored_key = strtoull(row[13], 0, 10); + unexplored_key = strtoull(row[14], 0, 10); +#endif + packet->setArrayDataByName("explored_key", explored_key, i); + packet->setArrayDataByName("unexplored_key", unexplored_key, i); + i++; + } + } + LogWrite(WORLD__TRACE, 9, "World", "Exit: %s", __FUNCTION__); +} + +string WorldDatabase::GetColumnNames(char* name){ + Query query; + MYSQL_ROW row; + string columns = ""; + MYSQL_RES* result = query.RunQuery2(Q_SELECT, "show columns FROM %s", name); + if(result && mysql_num_rows(result) > 0){ + int16 i = 0; + while((row = mysql_fetch_row(result))){ + if(strcmp(row[0], "table_data_version") != 0){ + if(i>0) + columns.append(","); + columns.append(row[0]); + i++; + } + } + } + columns.append(""); + return columns; +} + +void WorldDatabase::ToggleCharacterOnline() { + Query query; + query.RunQuery2(Q_UPDATE, "UPDATE characters SET is_online = 0;"); +} + +void WorldDatabase::ToggleCharacterOnline(Client* client, int8 toggle) { + if (client) { + Query query; + Player* player = client->GetPlayer(); + //if(!player->CheckPlayerInfo()) + // return; + if (player) + { + LogWrite(PLAYER__DEBUG, 0, "Player", "Toggling Character %s", toggle ? "ONLINE!" : "OFFLINE!"); + query.RunQuery2(Q_UPDATE, "UPDATE characters SET is_online=%i WHERE id = %u;", toggle, client->GetCharacterID()); + } + } +} + +void WorldDatabase::LoadPlayerStatistics(Player* player, int32 char_id) { + Query query; + MYSQL_ROW row; + MYSQL_RES* result = query.RunQuery2(Q_SELECT, "SELECT stat_id, stat_value, stat_date FROM statistics WHERE char_id=%i", char_id); + while (result && (row = mysql_fetch_row(result))) { + int32 stat_id = atoi(row[0]); + sint32 stat_value = atoi(row[1]); + int32 stat_date = atoi(row[2]); + player->AddPlayerStatistic(stat_id, stat_value, stat_date); + } +} + +void WorldDatabase::WritePlayerStatistic(Player *player, Statistic* stat) { + if (player && stat) { + Query query; + query.RunQuery2(Q_INSERT, "INSERT INTO statistics (char_id, guild_id, stat_id, stat_value, stat_date) VALUES(%i, %i, %i, %i, %i) ON DUPLICATE KEY UPDATE stat_value = %i, stat_date = %i;", + player->GetCharacterID(), 0, stat->stat_id, stat->stat_value, stat->stat_date, + stat->stat_value, stat->stat_date); + } +} + +void WorldDatabase::LoadServerStatistics() +{ + Query query; + MYSQL_ROW row; + MYSQL_RES* result = query.RunQuery2(Q_SELECT, "SELECT stat_id, stat_value, stat_date FROM statistics WHERE char_id=0 AND guild_id=0"); + while (result && (row = mysql_fetch_row(result))) { + int32 stat_id = atoi(row[0]); + sint32 stat_value = atoi(row[1]); + int32 stat_date = atoi(row[2]); + world.AddServerStatistic(stat_id, stat_value, stat_date); + LogWrite(INIT__DEBUG, 5, "Stats", "Loading Stat ID %i, value: %i", stat_id, stat_value); + } +} + +void WorldDatabase::WriteServerStatistic(Statistic* stat) { + if (stat) { + Query query; + query.RunQuery2(Q_INSERT, "INSERT INTO statistics (char_id, guild_id, stat_id, stat_value, stat_date) VALUES(0, 0, %i, %i, %i) ON DUPLICATE KEY UPDATE stat_value = %i, stat_date = %i;", + stat->stat_id, stat->stat_value, stat->stat_date, + stat->stat_value, stat->stat_date); + } +} + +void WorldDatabase::WriteServerStatistic(int32 stat_id, sint32 stat_value) { + Query query; + query.RunQuery2(Q_INSERT, "INSERT INTO statistics (char_id, guild_id, stat_id, stat_value, stat_date) VALUES(0, 0, %i, %i, %i) ON DUPLICATE KEY UPDATE stat_value = %i, stat_date = %i;", + stat_id, stat_value, Timer::GetUnixTimeStamp(), + stat_value, Timer::GetUnixTimeStamp()); +} + +void WorldDatabase::WriteServerStatisticsNeededQueries() { + Query query1, query2, query3; + MYSQL_ROW row1, row2, row3; + + // Number of unique accounts + MYSQL_RES* result1 = query1.RunQuery2(Q_SELECT, "SELECT COUNT(DISTINCT account_id) FROM characters"); + if (result1 && (row1 = mysql_fetch_row(result1)) && row1[0] != NULL) + WriteServerStatistic(STAT_SERVER_NUM_ACCOUNTS, atoi(row1[0])); + else + WriteServerStatistic(STAT_SERVER_NUM_ACCOUNTS, 0); + + // Number of characters + MYSQL_RES* result2 = query2.RunQuery2(Q_SELECT, "SELECT COUNT(id) FROM characters"); + if (result2 && (row2 = mysql_fetch_row(result2)) && row2[0] != NULL) + WriteServerStatistic(STAT_SERVER_NUM_CHARACTERS, atoi(row2[0])); + else + WriteServerStatistic(STAT_SERVER_NUM_CHARACTERS, 0); + + // Average character level + MYSQL_RES* result3 = query3.RunQuery2(Q_SELECT, "SELECT ROUND(AVG(level)) FROM characters"); + if (result3 && (row3 = mysql_fetch_row(result3)) && row3[0] != NULL) + WriteServerStatistic(STAT_SERVER_AVG_CHAR_LEVEL, atoi(row3[0])); + else + WriteServerStatistic(STAT_SERVER_AVG_CHAR_LEVEL, 0); +} + +map* WorldDatabase::GetInstanceRemovedSpawns(int32 instance_id, int8 type) +{ + DatabaseResult result; + map* ret = NULL; + + LogWrite(SPAWN__TRACE, 1, "Spawn", "Enter %s", __FUNCTION__); + + LogWrite(INSTANCE__DEBUG, 0, "Instance", "Loading removed spawns for instance_id: %u, spawn_type: %i", instance_id, type); + + if( !database_new.Select(&result, "SELECT spawn_location_entry_id, respawn_time FROM instance_spawns_removed WHERE instance_id = %i AND spawn_type = %i", instance_id, type) ) + { + LogWrite(INSTANCE__ERROR, 0, "Instance", "Error in GetInstanceRemovedSpawns() '%s': %i", database_new.GetErrorMsg(), database_new.GetError()); + return ret; + } + else + { + if( result.GetNumRows() > 0 ) + { + ret = new map; + + while( result.Next() ) + { + int32 spawn_location_entry_id = result.GetInt32Str("spawn_location_entry_id"); + /* + respawnTime == 0 - never respawn + respawnTime = 1 - spawn now + respawnTime > 1 (continue timer) + */ + int32 respawntime = result.GetInt32Str("respawn_time"); + + LogWrite(INSTANCE__DEBUG, 5, "Instance", "Found spawn point: %u, respawn time: %i", spawn_location_entry_id, respawntime); + + ret->insert(make_pair(spawn_location_entry_id, respawntime)); + } + } + else + LogWrite(INSTANCE__DEBUG, 0, "Instance", "No removed spawns found for instance_id: %u, spawn_type: %i", instance_id, type); + + } + + LogWrite(SPAWN__TRACE, 1, "Spawn", "Exit %s", __FUNCTION__); + + return ret; +} + +bool WorldDatabase::CheckVectorForValue(vector* vector, int32 value) { + if ( vector != NULL ) + { + for(int32 i=0;isize();i++) + { + int32 compare = vector->at(i); + if ( compare == value ) + return true; + } + } + + return false; +} + +int32 WorldDatabase::CheckSpawnRemoveInfo(map* inmap, int32 spawn_location_entry_id) +{ + LogWrite(SPAWN__TRACE, 0, "Spawn", "Enter %s", __FUNCTION__); + + map::iterator iter; + + if ( inmap != NULL ) + { + for(iter=inmap->begin();iter!=inmap->end();iter++) + { + if ( iter->first == spawn_location_entry_id ) + return (int32)iter->second; + } + } + + return 1; +} + +int32 WorldDatabase::AddCharacterInstance(int32 char_id, int32 instance_id, string zone_name, int8 instance_type, int32 last_success, int32 last_failure, int32 success_lockout, int32 failure_lockout) +{ + int32 ret = 0; + if( !database_new.Query("INSERT INTO character_instances (char_id, instance_id, instance_zone_name, instance_type, last_success_timestamp, last_failure_timestamp, success_lockout_time, failure_lockout_time) VALUES (%u, %u, '%s', %i, %u, %u, %u, %u) ", char_id, instance_id, database_new.EscapeStr(zone_name).c_str(), instance_type, last_success, last_failure, success_lockout, failure_lockout) ) + { + LogWrite(INSTANCE__ERROR, 0, "Instance", "Error in AddCharacterInstance() '%s': %i", database_new.GetErrorMsg(), database_new.GetError()); + return 0; + } + ret = database_new.LastInsertID(); + + LogWrite(INSTANCE__DEBUG, 0, "Instance", "Adding character %u to instance: %u", char_id, instance_id); + //LogWrite(INSTANCE__DEBUG, 1, "Instance", "-- Reenter: %u, Reset: %u, Lockout: %u", grant_reenter_time_left, grant_reset_time_left, lockout_time); + + return ret; +} + +bool WorldDatabase::UpdateCharacterInstanceTimers(int32 char_id, int32 instance_id, int32 lockout_time, int32 reset_time, int32 reenter_time ) +{ + if ( lockout_time > 0 && reset_time > 0 && reenter_time > 0 ) + database_new.Query("UPDATE character_instances SET lockout_time = %i, grant_reset_time_left = %i, grant_reenter_time_left = %i WHERE char_id = %i AND instance_id = %i", lockout_time, reset_time, reenter_time, char_id, instance_id); + else if ( lockout_time > 0 && reset_time > 0 ) + database_new.Query("UPDATE character_instances SET lockout_time = %i, grant_reset_time_left = %i WHERE char_id = %i AND instance_id = %i", lockout_time, reset_time, char_id, instance_id); + else if ( reset_time > 0 && reenter_time > 0 ) + database_new.Query("UPDATE character_instances SET grant_reset_time_left = %i, grant_reenter_time_left = %i WHERE char_id = %i AND instance_id = %i",reset_time, reenter_time, char_id, instance_id); + else if ( lockout_time > 0 && reenter_time > 0 ) + database_new.Query("UPDATE character_instances SET lockout_time = %i, grant_reenter_time_left = %i WHERE char_id = %i AND instance_id = %i", lockout_time, reenter_time, char_id, instance_id); + else if ( lockout_time > 0 ) + database_new.Query("UPDATE character_instances SET lockout_time = %i WHERE char_id = %i AND instance_id = %i", lockout_time, char_id, instance_id); + else if ( reset_time > 0 ) + database_new.Query("UPDATE character_instances SET grant_reset_time_left = %i WHERE char_id = %i AND instance_id = %i", reset_time, char_id, instance_id); + else if ( reenter_time > 0 ) + database_new.Query("UPDATE character_instances SET grant_reenter_time_left = %i WHERE char_id = %i AND instance_id = %i", reenter_time, char_id, instance_id); + + if( database_new.GetError() ) + { + LogWrite(INSTANCE__ERROR, 0, "Instance", "Error in UpdateCharacterInstanceTimers() '%s': %i", database_new.GetErrorMsg(), database_new.GetError()); + return false; + } + else + { + if ( database_new.AffectedRows() > 0 ) + { + LogWrite(INSTANCE__DEBUG, 0, "Instance", "Updating instance timers for character %u to instance: %u", char_id, instance_id); + LogWrite(INSTANCE__DEBUG, 1, "Instance", "-- Reenter: %u, Reset: %u, Lockout: %u", reenter_time, reset_time, lockout_time); + return true; + } + else + return false; + } +} + +bool WorldDatabase::UpdateCharacterInstance(int32 char_id, string zone_name, int32 instance_id, int8 type, int32 timestamp) { + // type = 1 = success timestamp + // type = 2 = failure timestamp + if (instance_id > 0) { + if (type == 1) { + database_new.Query("UPDATE character_instances SET instance_id = %u, last_success_timestamp = %u WHERE char_id = %u AND instance_zone_name = '%s'", instance_id, timestamp, char_id, database_new.EscapeStr(zone_name).c_str()); + } + else if (type == 2) { + database_new.Query("UPDATE character_instances SET instance_id = %u, last_failure_timestamp = %u WHERE char_id = %u AND instance_zone_name = '%s'", instance_id, timestamp, char_id, database_new.EscapeStr(zone_name).c_str()); + } + else { + database_new.Query("UPDATE character_instances SET instance_id = %u WHERE char_id = %u AND instance_zone_name = '%s'", instance_id, char_id, database_new.EscapeStr(zone_name).c_str()); + } + } + else { + if (type == 1) { + database_new.Query("UPDATE character_instances SET last_success_timestamp = %u WHERE char_id = %u AND instance_zone_name = '%s'", timestamp, char_id, database_new.EscapeStr(zone_name).c_str()); + } + else if (type == 2) { + database_new.Query("UPDATE character_instances SET last_failure_timestamp = %u WHERE char_id = %u AND instance_zone_name = '%s'", timestamp, char_id, database_new.EscapeStr(zone_name).c_str()); + } + } + + if (database_new.GetError()) { + LogWrite(INSTANCE__ERROR, 0, "Instance", "Error in UpdateCharacterInstance() '%s': %i", database_new.GetErrorMsg(), database_new.GetError()); + return false; + } + + return true; +} + +bool WorldDatabase::VerifyInstanceID(int32 char_id, int32 instance_id) { + DatabaseResult result; + database_new.Select(&result, "SELECT COUNT(id) as num_instances FROM instances WHERE id = %u", instance_id); + + if (result.Next() && result.GetInt32Str("num_instances") == 0) { + DeleteCharacterFromInstance(char_id, instance_id); + return false; + } + + return true; +} + +bool WorldDatabase::UpdateInstancedSpawnRemoved(int32 spawn_location_entry_id, int32 spawn_type, int32 respawn_time, int32 instance_id ) +{ + LogWrite(INSTANCE__DEBUG, 0, "Instance", "Updating removed spawns for instance_id: %u", instance_id); + LogWrite(INSTANCE__DEBUG, 1, "Instance", "-- Spawn Location Entry ID: %u, Type: %u, Respawn: %u", spawn_location_entry_id, spawn_type, respawn_time); + + if( !database_new.Query("UPDATE instance_spawns_removed SET respawn_time = %i WHERE spawn_location_entry_id = %i AND spawn_type = %i AND instance_id = %i", respawn_time, spawn_location_entry_id, spawn_type, instance_id) ) + { + LogWrite(INSTANCE__ERROR, 0, "Instance", "Error in UpdateInstancedSpawnRemoved() '%s': %i", database_new.GetErrorMsg(), database_new.GetError()); + return false; + } + + if ( database_new.AffectedRows() > 0 ) + { + LogWrite(INSTANCE__DEBUG, 0, "Instance", "Updated removed spawns for instance_id: %u", instance_id); + return true; + } + else + return false; +} + +int32 WorldDatabase::CreateNewInstance(int32 zone_id) +{ + int32 ret = 0; + + LogWrite(INSTANCE__DEBUG, 0, "Instance", "Creating new instance for zone: %u ", zone_id); + + if( !database_new.Query("INSERT INTO instances (zone_id) VALUES (%u)", zone_id) ) + LogWrite(INSTANCE__ERROR, 0, "Instance", "Error in CreateNewInstance() '%s': %i", database_new.GetErrorMsg(), database_new.GetError()); + else + ret = database_new.LastInsertID(); + + if( ret > 0 ) + LogWrite(INSTANCE__DEBUG, 0, "Instance", "Created new instance_id %u for zone: %u ", ret, zone_id); + + return ret; +} + +int32 WorldDatabase::CreateInstanceSpawnRemoved(int32 spawn_location_entry_id, int32 spawn_type, int32 respawn_time, int32 instance_id ) +{ + int32 ret = 0; + + LogWrite(INSTANCE__DEBUG, 3, "Instance", "Creating new instance spawn removed entries for instance_id: %u ", instance_id); + LogWrite(INSTANCE__DEBUG, 5, "Instance", "-- Spawn Location Entry ID: %u, Type: %u, Respawn: %u", spawn_location_entry_id, spawn_type, respawn_time); + + if( !database_new.Query("INSERT INTO instance_spawns_removed (spawn_location_entry_id, spawn_type, instance_id, respawn_time) values(%u, %u, %u, %u)", spawn_location_entry_id, spawn_type, instance_id, respawn_time) ) + LogWrite(INSTANCE__ERROR, 0, "Instance", "Error in CreateInstanceSpawnRemoved() query '%s': %i", database_new.GetErrorMsg(), database_new.GetError()); + else + ret = database_new.LastInsertID(); + + // potentially spammy, if it calls for every spawn added. Set to level 3 or 5? + if( ret > 0 ) + LogWrite(INSTANCE__DEBUG, 5, "Instance", "Created new spawn removed entry: %u for instance_id %u", ret, instance_id); + + return ret; +} + +bool WorldDatabase::DeleteInstance(int32 instance_id) +{ + if( !database_new.Query("DELETE FROM instances WHERE id = %u", instance_id) ) + { + LogWrite(INSTANCE__ERROR, 0, "Instance", "Error in DeleteInstance() '%s': %i", database_new.GetErrorMsg(), database_new.GetError()); + return false; + } + + /* JA: should not need this delete with FK/Constraints + if( !database_new.Query("DELETE FROM instance_spawns_removed WHERE instance_id = %u", instance_id) ) + { + LogWrite(INSTANCE__ERROR, 0, "Instance", "Error in DeleteInstance() '%s': %i", database_new.GetErrorMsg(), database_new.GetError()); + return false; + } + */ + + // Remove the instance from the character_instances table + database_new.Query("UPDATE `character_instances` SET `instance_id` = 0 WHERE `instance_id` = %u", instance_id); + + LogWrite(INSTANCE__DEBUG, 0, "Instance", "Deleted instance_id %u", instance_id); + + return true; +} + +bool WorldDatabase::DeleteInstanceSpawnRemoved(int32 instance_id, int32 spawn_location_entry_id) +{ + if( !database_new.Query("DELETE FROM instance_spawns_removed WHERE instance_id = %u AND spawn_location_entry_id = %u", instance_id, spawn_location_entry_id) ) + { + LogWrite(INSTANCE__ERROR, 0, "Instance", "Error in DeleteInstanceSpawnRemoved() '%s': %i", database_new.GetErrorMsg(), database_new.GetError()); + return false; + } + + LogWrite(INSTANCE__DEBUG, 0, "Instance", "Deleted removed spawn: %u for instance_id %u", spawn_location_entry_id, instance_id); + + return true; +} + +bool WorldDatabase::DeleteCharacterFromInstance(int32 char_id, int32 instance_id) +{ + LogWrite(INSTANCE__DEBUG, 0, "Instance", "Delete character %u from instance_id %u.", char_id, instance_id); + + if( !database_new.Query("UPDATE `character_instances` SET `instance_id` = 0 WHERE `instance_id` = %u AND `char_id` = %u", instance_id, char_id) ) + { + LogWrite(INSTANCE__ERROR, 0, "Instance", "Error in DeleteCharacterFromInstance() '%s': %i", database_new.GetErrorMsg(), database_new.GetError()); + return false; + } + + if ( database_new.AffectedRows() == 0 ) // didn't find an instance to delete + { + LogWrite(INSTANCE__DEBUG, 1, "Instance", "No instance_id %u for character %u to delete.", instance_id, char_id); + return false; + } + else + { + // delete entire instance if the last player has left + DatabaseResult result; + database_new.Select(&result, "SELECT count(id) as num_instances FROM character_instances where instance_id = %u",instance_id); + + if(result.Next() && result.GetInt32Str("num_instances") == 0) + { + LogWrite(INSTANCE__DEBUG, 0, "Instance", "No characters in instance: Delete instance_id %u.", instance_id); + DeleteInstance(instance_id); + } + } + + return true; +} + +bool WorldDatabase::LoadCharacterInstances(Client* client) +{ + DatabaseResult result; + DatabaseResult result2; + + bool addedInstance = false; + + database_new.Select(&result, "SELECT `id`, `instance_id`, `instance_zone_name`, `instance_type`, `last_success_timestamp`, `last_failure_timestamp`, `success_lockout_time`, `failure_lockout_time` FROM `character_instances` WHERE `char_id` = %u", client->GetCharacterID()); + + if( result.GetNumRows() > 0 ) + { + while( result.Next() ) + { + int32 zone_id = 0; + int32 instance_id = result.GetInt32Str("instance_id"); + // If `instance_id` is greater then 0 then get the zone id with it, else get the zone id from the zone name + if (instance_id != 0) { + if (database_new.Select(&result2, "SELECT `zone_id` FROM `instances` WHERE `id` = %u", instance_id)) { + if (result2.Next()) + zone_id = result2.GetInt32Str("zone_id"); + } + } + if (zone_id == 0) + zone_id = GetZoneID(result.GetStringStr("instance_zone_name")); + + client->GetPlayer()->GetCharacterInstances()->AddInstance( + result.GetInt32Str("id"), + instance_id, + result.GetInt32Str("last_success_timestamp"), + result.GetInt32Str("last_failure_timestamp"), + result.GetInt32Str("success_lockout_time"), + result.GetInt32Str("failure_lockout_time"), + zone_id, + result.GetInt8Str("instance_type"), + string(result.GetStringStr("instance_zone_name")) + ); + addedInstance = true; + } + } + + return addedInstance; +} + +void WorldDatabase::UpdateLoginEquipment() +{ + LogWrite(INIT__LOGIN_DEBUG, 0, "Login", "Updating `character_items` CRC in %s", __FUNCTION__); + + database_new.Query("UPDATE character_items SET login_checksum = CRC32(CRC32(type) + CRC32(slot) + CRC32(item_id)) WHERE `type` = 'EQUIPPED' AND ( slot <= 8 OR slot = 19 )"); +} + +MutexMap* WorldDatabase::GetEquipmentUpdates() +{ + DatabaseResult result; + MutexMap* ret = 0; + LoginEquipmentUpdate update; + int32 count = 0; + + LogWrite(INIT__LOGIN_DEBUG, 0, "Login", "Looking for Login Appearance Updates..."); + + // TODO: Someday store the equipment colors in character_items, for custom colorization of gear (?) + if( database_new.Select(&result, "SELECT ci.id, ci.char_id, ia.equip_type, ia.red, green, ia.blue, ia.highlight_red, ia.highlight_green, ia.highlight_blue, ci.slot FROM characters c JOIN character_items ci ON c.id = ci.char_id JOIN item_appearances ia ON ci.item_id = ia.item_id WHERE c.deleted = 0 AND ci.type = 'EQUIPPED' AND ( ci.slot <= 8 OR ci.slot = 19 ) AND ci.login_checksum <> CRC32(CRC32(`ci`.`type`) + CRC32(ci.slot) + CRC32(ci.item_id)) ORDER BY ci.char_id, ci.slot") ) + { + while( result.Next() ) + { + LogWrite(INIT__LOGIN_DEBUG, 5, "Login", "Found update for char_id %i!", result.GetInt32Str("char_id")); + + if(!ret) + ret = new MutexMap(); + + update.world_char_id = result.GetInt32Str("char_id"); + update.equip_type = result.GetInt16Str("equip_type"); + update.red = result.GetInt8Str("red"); + update.green = result.GetInt8Str("green"); + update.blue = result.GetInt8Str("blue"); + update.highlight_red = result.GetInt8Str("highlight_red"); + update.highlight_green = result.GetInt8Str("highlight_green"); + update.highlight_blue = result.GetInt8Str("highlight_blue"); + update.slot = result.GetInt8Str("slot"); + ret->Put(result.GetInt32Str("id"), update); + count++; + + } + } + + if(count) + LogWrite(INIT__LOGIN_DEBUG, 0, "Login", "Found %i Login Appearance Update%s...", count, count == 1 ? "" : "s"); + + return ret; +} + + +MutexMap* WorldDatabase::GetEquipmentUpdates(int32 char_id) +{ + DatabaseResult result; + MutexMap* ret = 0; + LoginEquipmentUpdate update; + int32 count = 0; + + LogWrite(INIT__LOGIN_DEBUG, 0, "Login", "Looking for Login Appearance Updates for char_id: %u", char_id); + + // TODO: Someday store the equipment colors in character_items, for custom colorization of gear (?) + if( database_new.Select(&result, "SELECT ci.id, ci.char_id, ia.equip_type, ia.red, green, ia.blue, ia.highlight_red, ia.highlight_green, ia.highlight_blue, ci.slot FROM characters c JOIN character_items ci ON c.id = ci.char_id JOIN item_appearances ia ON ci.item_id = ia.item_id WHERE c.deleted = 0 AND ci.type = 'EQUIPPED' AND ( ci.slot <= 8 OR ci.slot = 19 ) AND ci.login_checksum <> CRC32(CRC32(ci.type) + CRC32(ci.slot) + CRC32(ci.item_id)) AND ci.char_id = %u ORDER BY ci.slot", char_id) ) + { + while( result.Next() ) + { + LogWrite(INIT__LOGIN_DEBUG, 5, "Login", "Found update for char_id %i!", result.GetInt32Str("char_id")); + + if(!ret) + ret = new MutexMap(); + + update.world_char_id = char_id; + update.equip_type = result.GetInt16Str("equip_type"); + update.red = result.GetInt8Str("red"); + update.green = result.GetInt8Str("green"); + update.blue = result.GetInt8Str("blue"); + update.highlight_red = result.GetInt8Str("highlight_red"); + update.highlight_green = result.GetInt8Str("highlight_green"); + update.highlight_blue = result.GetInt8Str("highlight_blue"); + update.slot = result.GetInt8Str("slot"); + ret->Put(result.GetInt32Str("id"), update); + count++; + } + } + + if(count) + LogWrite(INIT__LOGIN_DEBUG, 0, "Login", "Found %i Login Appearance Update%s...", count, count == 1 ? "" : "s"); + + return ret; +} + + +void WorldDatabase::UpdateLoginZones() { + Query query; + LogWrite(INIT__LOGIN_DEBUG, 0, "Login", "Updating `zones` CRC in %s", __FUNCTION__); + query.RunQuery2("UPDATE zones SET login_checksum = CRC32(CRC32(id) + CRC32(`name`) + CRC32(`file`) + CRC32(description))", Q_UPDATE); +} + +MutexMap* WorldDatabase::GetZoneUpdates() { + LogWrite(INIT__LOGIN_DEBUG, 0, "Login", "Looking for Login Zone Updates..."); + MutexMap* ret = 0; + LoginZoneUpdate update; + Query query; + MYSQL_ROW row; + int32 count = 0; + MYSQL_RES* result = query.RunQuery2(Q_SELECT, "SELECT id, name, description FROM zones where login_checksum != crc32(crc32(id) + crc32(name) + crc32(file) + crc32(description))"); + while(result && (row = mysql_fetch_row(result))) { + if(row[0] && row[1]) { + + LogWrite(INIT__LOGIN_DEBUG, 5, "Login", "Found update for zone_id %i!", atoi(row[0])); + + if(!ret) + ret = new MutexMap(); + update.name = string(row[1]); + if(row[2]) + update.description = string(row[2]); + else + update.description = ""; + ret->Put(atoi(row[0]), update); + count++; + } + } + if(count) + LogWrite(INIT__LOGIN_DEBUG, 0, "Login", "Found %i Login Zone Update%s...", count, count == 1 ? "" : "s"); + return ret; +} + +void WorldDatabase::LoadLocationGrids(ZoneServer* zone) { + if (zone) { + Query query; + MYSQL_ROW row; + MYSQL_RES* result = query.RunQuery2(Q_SELECT, "SELECT `id`, `grid_id`, `name`, `include_y`, `discovery` FROM `locations` WHERE `zone_id`=%u", zone->GetZoneID()); + while (result && (row = mysql_fetch_row(result))) { + LocationGrid* grid = new LocationGrid; + grid->id = atoul(row[0]); + grid->grid_id = atoul(row[1]); + grid->name = string(row[2]); + grid->include_y = (atoi(row[3]) == 1); + grid->discovery = (atoi(row[4]) == 1); + if (LoadLocationGridLocations(grid)) + zone->AddLocationGrid(grid); + else + safe_delete(grid); + } + } +} + +bool WorldDatabase::LoadLocationGridLocations(LocationGrid* grid) { + bool ret = false; + if (grid) { + Query query; + MYSQL_ROW row; + MYSQL_RES* result = query.RunQuery2(Q_SELECT, "SELECT `id`, `x`, `y`, `z` FROM `location_details` WHERE `location_id`=%u", grid->id); + if (result->row_count >= 3) { + while (result && (row = mysql_fetch_row(result))) { + Location* location = new Location; + location->id = atoul(row[0]); + location->x = atof(row[1]); + location->y = atof(row[2]); + location->z = atof(row[3]); + grid->locations.Add(location); + } + ret = true; + } + else + LogWrite(WORLD__ERROR, 0, "World", "Grid '%s' only has %u location(s). A minimum of 3 is needed.", grid->name.c_str(), result->row_count); + } + return ret; +} + +int32 WorldDatabase::CreateLocation(int32 zone_id, int32 grid_id, const char* name, bool include_y) { + int32 ret = 0; + if (name && strlen(name) > 0) { + Query query; + query.RunQuery2(Q_INSERT, "INSERT INTO `locations` (`zone_id`, `grid_id`, `name`, `include_y`) VALUES (%u, %u, '%s', %u)", zone_id, grid_id, name, include_y == true ? 1 : 0); + ret = query.GetLastInsertedID(); + } + return ret; +} + +bool WorldDatabase::AddLocationPoint(int32 location_id, float x, float y, float z) { + bool ret = false; + if (LocationExists(location_id)) { + Query query; + query.RunQuery2(Q_INSERT, "INSERT INTO `location_details` (`location_id`, `x`, `y`, `z`) VALUES (%u, %f, %f, %f)", location_id, x, y, z); + ret = true; + } + return ret; +} + +bool WorldDatabase::DeleteLocation(int32 location_id) { + bool ret = false; + if (LocationExists(location_id)) { + Query query; + query.RunQuery2(Q_DELETE, "DELETE FROM `locations` WHERE `id`=%u", location_id); + ret = true; + } + return ret; +} + +bool WorldDatabase::DeleteLocationPoint(int32 location_point_id) { + Query query; + query.RunQuery2(Q_DELETE, "DELETE FROM `location_details` WHERE `id`=%u", location_point_id); + return true; +} + +void WorldDatabase::ListLocations(Client* client) { + if (client) { + Query query; + MYSQL_ROW row; + client->SimpleMessage(CHANNEL_COLOR_YELLOW, "Listing all locations:"); + MYSQL_RES* result = query.RunQuery2(Q_SELECT, "SELECT `id`, `zone_id`, `grid_id`, `name` FROM `locations`"); + while (result && (row = mysql_fetch_row(result))) { + int32 id = atoul(row[0]); + int32 zone_id = atoul(row[1]); + int32 grid_id = atoul(row[2]); + const char* name = row[3]; + client->Message(CHANNEL_COLOR_YELLOW, "%u) Zone ID: %u Grid ID:%u Name: '%s'", id, zone_id, grid_id, name); + } + } +} + +void WorldDatabase::ListLocationPoints(Client* client, int32 location_id) { + if (client) { + if (LocationExists(location_id)) { + Query query; + client->Message(CHANNEL_COLOR_YELLOW, "Listing all points for location ID %u:", location_id); + MYSQL_RES* result = query.RunQuery2(Q_SELECT, "SELECT `id`, `x`, `y`, `z` FROM `location_details` WHERE `location_id`=%u", location_id); + MYSQL_ROW row; + while (result && (row = mysql_fetch_row(result))) { + int32 id = atoul(row[0]); + float x = atof(row[1]); + float y = atof(row[2]); + float z = atof(row[3]); + client->Message(CHANNEL_COLOR_YELLOW, "%u) (%f, %f, %f)", id, x, y, z); + } + } + else + client->Message(CHANNEL_COLOR_YELLOW, "A location with ID %u does not exist", location_id); + } +} + +bool WorldDatabase::LocationExists(int32 location_id) { + bool ret = false; + Query query; + MYSQL_RES* result = query.RunQuery2(Q_SELECT, "SELECT COUNT(id) FROM `locations` WHERE `id`=%u", location_id); + MYSQL_ROW row; + if (result && (row = mysql_fetch_row(result))) { + if (atoul(row[0]) > 0) + ret = true; + } + return ret; +} + +bool WorldDatabase::GetTableVersions(vector* table_versions) { + DatabaseResult result; + TableVersion *table_version; + bool success; + + //don't treat 1146 (table not found) as an error since the patch server will create it + database_new.SetIgnoredErrno(1146); + + success = database_new.Select(&result, "SELECT `name`,`version`,`download_version`\n" + "FROM `table_versions`\n"); + + database_new.RemoveIgnoredErrno(1146); + + if (!success) + return false; + + while (result.Next()) { + table_version = (TableVersion *)malloc(sizeof(*table_version)); + table_version->name_len = (unsigned int)strlcpy(table_version->name, result.GetString(0), sizeof(table_version->name)); + table_version->version = result.GetInt32(1); + table_version->data_version = result.GetInt32(2); + + table_versions->push_back(table_version); + } + + return true; +} + +bool WorldDatabase::QueriesFromFile(const char * file) { + return database_new.QueriesFromFile(file); +} + +bool WorldDatabase::CheckBannedIPs(const char* loginIP) +{ + // til you build the table, all IPs are allowed + return false; +} + +void WorldDatabase::LoadTitles(){ + int32 index = 0; + Query query; + MYSQL_ROW row; + MYSQL_RES* result = query.RunQuery2(Q_SELECT, "SELECT id, title, prefix FROM titles"); + if(result && mysql_num_rows(result) > 0){ + Title* title = 0; + while(result && (row = mysql_fetch_row(result))){ + LogWrite(WORLD__DEBUG, 5, "World", "\tLoading Title '%s' (%u), Prefix: %i, Index: %u", row[1], atoul(row[0]), atoi(row[2]), index); + title = new Title; + title->SetID(index); + title->SetName(row[1]); + title->SetPrefix(atoi(row[2])); + master_titles_list.AddTitle(title); + index++; + } + } + LogWrite(WORLD__DEBUG, 0, "World", "\tLoaded %u Title%s", index, index == 1 ? "" : "s"); +} + +int32 WorldDatabase::LoadCharacterTitles(int32 char_id, Player *player){ + LogWrite(WORLD__DEBUG, 0, "World", "Loading Titles for player '%s'...", player->GetName()); + Query query; + MYSQL_ROW row; + int32 index = 0; + MYSQL_RES* result = query.RunQuery2(Q_SELECT, "SELECT title_id, title, prefix FROM character_titles, titles WHERE character_titles.title_id = titles.id AND character_titles.char_id = %u", char_id); + if(result && mysql_num_rows(result) > 0){ + while(result && (row = mysql_fetch_row(result))){ + LogWrite(WORLD__DEBUG, 5, "World", "\tLoading Title ID: %u, Title: '%s' Index: %u", atoul(row[0]), row[1], index); + player->AddTitle(index, row[1], atoi(row[2])); + index++; + } + } + return index; +} + +sint16 WorldDatabase::GetCharPrefixIndex(int32 char_id, Player *player){ + LogWrite(PLAYER__DEBUG, 0, "Player", "Getting current title index for player '%s'...", player->GetName()); + Query query; + MYSQL_ROW row; + sint16 ret = -1; + MYSQL_RES* result = query.RunQuery2(Q_SELECT, "SELECT prefix_title FROM character_details WHERE char_id = %u", char_id); + if(result && mysql_num_rows(result) > 0) + while(result && (row = mysql_fetch_row(result))){ + ret = atoi(row[0]); + LogWrite(PLAYER__DEBUG, 5, "Player", "\tPrefix Index: %i", ret); + } + return ret; +} + +sint16 WorldDatabase::GetCharSuffixIndex(int32 char_id, Player *player){ + LogWrite(PLAYER__DEBUG, 0, "Player", "Getting current title index for player '%s'...", player->GetName()); + Query query; + MYSQL_ROW row; + sint16 ret = -1; + MYSQL_RES* result = query.RunQuery2(Q_SELECT, "SELECT suffix_title FROM character_details WHERE char_id = %u", char_id); + if(result && mysql_num_rows(result) > 0) + while(result && (row = mysql_fetch_row(result))){ + ret = atoi(row[0]); + LogWrite(PLAYER__DEBUG, 5, "Player", "\tSuffix Index: %i", ret); + } + return ret; +} + +void WorldDatabase::SaveCharPrefixIndex(sint16 index, int32 char_id, Client *client){ + Query query; + query.RunQuery2(Q_UPDATE, "UPDATE character_details SET prefix_title = %i WHERE char_id = %u", index, client->GetCharacterID()); + LogWrite(PLAYER__DEBUG, 0, "Player", "Saving Prefix Index %i for player '%s'...", index, client->GetPlayer()->GetName()); +} + +void WorldDatabase::SaveCharSuffixIndex(sint16 index, int32 char_id, Client *client){ + Query query; + query.RunQuery2(Q_SELECT, "UPDATE character_details SET suffix_title = %i WHERE char_id = %u", index, client->GetCharacterID()); + LogWrite(PLAYER__DEBUG, 0, "Player", "Saving Suffix Index %i for player '%s'...", index, client->GetPlayer()->GetName()); +} + +void WorldDatabase::LoadLanguages() +{ + int32 count = 0; + Query query; + MYSQL_ROW row; + + MYSQL_RES* result = query.RunQuery2(Q_SELECT, "SELECT id, language FROM languages"); + + if(result && mysql_num_rows(result) > 0) + { + Language* language = 0; + + while(result && (row = mysql_fetch_row(result))) + { + LogWrite(WORLD__DEBUG, 5, "World", "\tLoading language '%s' , ID: %u", row[1], atoul(row[0])); + language = new Language; + language->SetID(atoul(row[0])); + language->SetName(row[1]); + master_languages_list.AddLanguage(language); + count++; + } + } + LogWrite(WORLD__DEBUG, 0, "World", "\tLoaded %u Language%s", count, count == 1 ? "" : "s"); +} + +int32 WorldDatabase::LoadCharacterLanguages(int32 char_id, Player *player) +{ + LogWrite(WORLD__DEBUG, 0, "World", "Loading Languages for player '%s'...", player->GetName()); + Query query; + MYSQL_ROW row; + int32 count = 0; + MYSQL_RES* result = query.RunQuery2(Q_SELECT, "SELECT language_id, language FROM character_languages, languages WHERE character_languages.language_id = languages.id AND character_languages.char_id = %u", char_id); + + if(result && mysql_num_rows(result) > 0) + { + while(result && (row = mysql_fetch_row(result))) + { + LogWrite(WORLD__DEBUG, 5, "World", "\tLoading Language ID: %u, Language: '%s'", atoul(row[0]), row[1]); + player->AddLanguage(atoul(row[0]), row[1]); + count++; + } + } + return count; +} + +int16 WorldDatabase::GetCharacterCurrentLang(int32 char_id, Player *player) +{ + LogWrite(PLAYER__DEBUG, 0, "Player", "Getting current language for player '%s'...", player->GetName()); + Query query; + MYSQL_ROW row; + int16 ret = 0; + MYSQL_RES* result = query.RunQuery2(Q_SELECT, "SELECT current_language FROM character_details WHERE char_id = %u", char_id); + + if(result && mysql_num_rows(result) > 0) + while(result && (row = mysql_fetch_row(result))) + { + ret = atoi(row[0]); + LogWrite(PLAYER__DEBUG, 5, "Player", "\tLanguage ID: %i", ret); + } + return ret; +} + +void WorldDatabase::SaveCharacterCurrentLang(int32 id, int32 char_id, Client *client) +{ + Query query; + query.RunQuery2(Q_UPDATE, "UPDATE character_details SET current_language = %i WHERE char_id = %u", id, char_id); + LogWrite(PLAYER__DEBUG, 3, "Player", "Saving current language ID %i for player '%s'...", id, client->GetPlayer()->GetName()); +} + +void WorldDatabase::SaveCharacterLang(int32 char_id, int32 lang_id) { + if (!database_new.Query("INSERT INTO character_languages (char_id, language_id) VALUES (%u, %u)", char_id, lang_id)) + LogWrite(DATABASE__ERROR, 0, "DBNew", "MySQL Error %u: %s", database_new.GetError(), database_new.GetErrorMsg()); +} + +// JA - this is not used yet, lots more to consider for storing player history +void WorldDatabase::LoadCharacterHistory(int32 char_id, Player *player) +{ + DatabaseResult result; + + // Use -1 on type and subtype to turn the enum into an int and make it a 0 index + if (!database_new.Select(&result, "SELECT type-1, subtype-1, value, value2, location, event_id, event_date FROM character_history WHERE char_id = %u", char_id)) { + LogWrite(DATABASE__ERROR, 0, "DBNew", "MySQL Error %u: %s", database_new.GetError(), database_new.GetErrorMsg()); + return; + } + + while (result.Next()) { + + int8 type = result.GetInt8(0); + int8 subtype = result.GetInt8(1); + + HistoryData* hd = new HistoryData; + hd->Value = result.GetInt32(2); + hd->Value2 = result.GetInt32(3); + strcpy(hd->Location, result.GetString(4)); + // skipped event id as use for it has not been determined yet + hd->EventDate = result.GetInt32(6); + + player->LoadPlayerHistory(type, subtype, hd); + } +} + +void WorldDatabase::LoadSpellErrors() { + Query query; + MYSQL_ROW row; + MYSQL_RES* result = query.RunQuery2(Q_SELECT, "SELECT `version`, `error_index`, `value` FROM `spell_error_versions`"); + + if (result && mysql_num_rows(result) > 0) { + while ((row = mysql_fetch_row(result))) { + master_spell_list.AddSpellError(atoi(row[0]), atoi(row[1]), atoi(row[2])); + } + } +} + +void WorldDatabase::SaveCharacterHistory(Player* player, int8 type, int8 subtype, int32 value, int32 value2, char* location, int32 event_date) { + LogWrite(PLAYER__INFO, 1, "Player", "Saving character history, type = %i subtype = %i", type, subtype); + string str_type; + string str_subtype; + switch (type) { + case HISTORY_TYPE_NONE: + str_type = "None"; + break; + case HISTORY_TYPE_DEATH: + str_type = "Death"; + break; + case HISTORY_TYPE_DISCOVERY: + str_type = "Discovery"; + break; + case HISTORY_TYPE_XP: + str_type = "XP"; + break; + default: + LogWrite(PLAYER__ERROR, 0, "Player", "WorldDatabase::SaveCharacterHistory() - Invalid history type given (%i), character history NOT saved.", type); + return; + } + switch (subtype) { + case HISTORY_SUBTYPE_NONE: + str_subtype = "None"; + break; + case HISTORY_SUBTYPE_ADVENTURE: + str_subtype = "Adventure"; + break; + case HISTORY_SUBTYPE_TRADESKILL: + str_subtype = "Tradeskill"; + break; + case HISTORY_SUBTYPE_QUEST: + str_subtype = "Quest"; + break; + case HISTORY_SUBTYPE_AA: + str_subtype = "AA"; + break; + case HISTORY_SUBTYPE_ITEM: + str_subtype = "Item"; + break; + case HISTORY_SUBTYPE_LOCATION: + str_subtype = "Location"; + break; + default: + LogWrite(PLAYER__ERROR, 0, "Player", "WorldDatabase::SaveCharacterHistory() - Invalid history sub type given (%i), character history NOT saved.", subtype); + return; + } + + Query query; + query.RunQuery2(Q_REPLACE, "replace into character_history (char_id, type, subtype, value, value2, location, event_date) values (%u, '%s', '%s', %i, %i, '%s', %u)", + player->GetCharacterID(), str_type.c_str(), str_subtype.c_str(), value, value2, location, event_date); +} + +void WorldDatabase::LoadTransportMaps(ZoneServer* zone) { + int32 total = 0; + + LogWrite(TRANSPORT__DEBUG, 0, "Transport", "-Loading Transporter Maps..."); + zone->DeleteTransporterMaps(); + + Query query; + MYSQL_ROW row; + MYSQL_RES* result = query.RunQuery2(Q_SELECT, "SELECT `transport_id`, `map_name` FROM `transport_maps`"); + if(result) { + while(result && (row = mysql_fetch_row(result))){ + zone->AddTransportMap(atoul(row[0]), string(row[1])); + total++; + } + } + LogWrite(TRANSPORT__DEBUG, 0, "Transport", "--Loaded %i Transporter Maps", total); +} + +bool WorldDatabase::LoadSign(ZoneServer* zone, int32 spawn_id) { + Sign* sign = 0; + int32 id = 0; + DatabaseResult result; + database_new.Select(&result, "SELECT ss.spawn_id, s.name, s.model_type, s.size, s.show_command_icon, ss.widget_id, ss.widget_x, ss.widget_y, ss.widget_z, s.command_primary, s.command_secondary, s.collision_radius, ss.icon, ss.type, ss.title, ss.description, ss.sign_distance, ss.zone_id, ss.zone_x, ss.zone_y, ss.zone_z, ss.zone_heading, ss.include_heading, ss.include_location, s.transport_id, s.size_offset, s.display_hand_icon, s.visual_state\n" + "FROM spawn s\n" + "INNER JOIN spawn_signs ss\n" + "ON ss.spawn_id = s.id\n" + "WHERE s.id = %u\n", + spawn_id); + + if (result.GetNumRows() > 0 && result.Next()) { + id = result.GetInt32(0); + sign = new Sign(); + sign->SetDatabaseID(id); + strcpy(sign->appearance.name, result.GetString(1)); + sign->appearance.model_type = result.GetInt16(2); + sign->SetSize(result.GetInt16(3)); + sign->appearance.show_command_icon = result.GetInt8(4); + sign->SetWidgetID(result.GetInt32(5)); + sign->SetWidgetX(result.GetFloat(6)); + sign->SetWidgetY(result.GetFloat(7)); + sign->SetWidgetZ(result.GetFloat(8)); + vector* primary_command_list = zone->GetEntityCommandList(result.GetInt32(9)); + if(primary_command_list){ + sign->SetPrimaryCommands(primary_command_list); + sign->primary_command_list_id = result.GetInt32(9); + } + + vector* secondary_command_list = zone->GetEntityCommandList(result.GetInt32(10)); + if (secondary_command_list) { + sign->SetSecondaryCommands(secondary_command_list); + sign->secondary_command_list_id = result.GetInt32(10); + } + + sign->appearance.pos.collision_radius = result.GetInt16(11); + sign->SetSignIcon(result.GetInt8(12)); + if(strncasecmp(result.GetString(13), "Generic", 7) == 0) + sign->SetSignType(SIGN_TYPE_GENERIC); + else if(strncasecmp(result.GetString(13), "Zone", 4) == 0) + sign->SetSignType(SIGN_TYPE_ZONE); + sign->SetSignTitle(result.GetString(14)); + sign->SetSignDescription(result.GetString(15)); + sign->SetSignDistance(result.GetFloat(16)); + sign->SetSignZoneID(result.GetInt32(17)); + sign->SetSignZoneX(result.GetFloat(18)); + sign->SetSignZoneY(result.GetFloat(19)); + sign->SetSignZoneZ(result.GetFloat(20)); + sign->SetSignZoneHeading(result.GetFloat(21)); + sign->SetIncludeHeading(result.GetInt8(22) == 1); + sign->SetIncludeLocation(result.GetInt8(23) == 1); + sign->SetTransporterID(result.GetInt32(24)); + sign->SetSizeOffset(result.GetInt8(25)); + sign->appearance.display_hand_icon = result.GetInt8(26); + sign->SetVisualState(result.GetInt16(27)); + zone->AddSign(id, sign); + + + LogWrite(SIGN__DEBUG, 0, "Sign", "Loaded Sign: '%s' (%u).", sign->appearance.name, spawn_id); + return true; + } + LogWrite(SIGN__DEBUG, 0, "Sign", "Unable to find a sign for spawn id of %u", spawn_id); + return false; +} + +bool WorldDatabase::LoadWidget(ZoneServer* zone, int32 spawn_id) { + Widget* widget = 0; + int32 id = 0; + DatabaseResult result; + + database_new.Select(&result, "SELECT sw.spawn_id, s.name, s.model_type, s.size, s.show_command_icon, sw.widget_id, sw.widget_x, sw.widget_y, sw.widget_z, s.command_primary, s.command_secondary, s.collision_radius, sw.include_heading, sw.include_location, sw.icon, sw.type, sw.open_heading, sw.open_y, sw.action_spawn_id, sw.open_sound_file, sw.close_sound_file, sw.open_duration, sw.closed_heading, sw.linked_spawn_id, sw.close_y, s.transport_id, s.size_offset, sw.house_id, sw.open_x, sw.open_z, sw.close_x, sw.close_z, s.display_hand_icon\n" + "FROM spawn s\n" + "INNER JOIN spawn_widgets sw\n" + "ON sw.spawn_id = s.id\n" + "WHERE s.id = %u", + spawn_id); + + if (result.GetNumRows() > 0 && result.Next()) { + id = result.GetInt32(0); + widget = new Widget(); + widget->SetDatabaseID(id); + strcpy(widget->appearance.name, result.GetString(1)); + widget->appearance.model_type = result.GetInt16(2); + widget->SetSize(result.GetInt16(3)); + widget->appearance.show_command_icon = result.GetInt8(4); + widget->SetWidgetID(result.GetInt32(5)); + widget->SetWidgetX(result.GetFloat(6)); + widget->SetWidgetY(result.GetFloat(7)); + widget->SetWidgetZ(result.GetFloat(8)); + vector* primary_command_list = zone->GetEntityCommandList(result.GetInt32(9)); + if(primary_command_list){ + widget->SetPrimaryCommands(primary_command_list); + widget->primary_command_list_id = result.GetInt32(9); + } + + vector* secondary_command_list = zone->GetEntityCommandList(result.GetInt32(10)); + if (secondary_command_list) { + widget->SetSecondaryCommands(secondary_command_list); + widget->secondary_command_list_id = result.GetInt32(10); + } + + widget->appearance.pos.collision_radius = result.GetInt16(11); + widget->SetIncludeHeading(result.GetInt8(12) == 1); + widget->SetIncludeLocation(result.GetInt8(13) == 1); + widget->SetWidgetIcon(result.GetInt8(14)); + if(strncasecmp(result.GetString(15),"Generic", 7) == 0) + widget->SetWidgetType(WIDGET_TYPE_GENERIC); + else if(strncasecmp(result.GetString(15),"Door", 4) == 0) + widget->SetWidgetType(WIDGET_TYPE_DOOR); + widget->SetOpenHeading(result.GetFloat(16)); + widget->SetOpenY(result.GetFloat(17)); + widget->SetActionSpawnID(result.GetInt32(18)); + if(!result.IsNull(19) && strlen(result.GetString(19)) > 5) + widget->SetOpenSound(result.GetString(19)); + if(!result.IsNull(20) && strlen(result.GetString(20)) > 5) + widget->SetCloseSound(result.GetString(20)); + widget->SetOpenDuration(result.GetInt16(21)); + widget->SetClosedHeading(result.GetFloat(22)); + widget->SetLinkedSpawnID(result.GetInt32(23)); + widget->SetCloseY(result.GetFloat(24)); + widget->SetTransporterID(result.GetInt32(25)); + widget->SetSizeOffset(result.GetInt8(26)); + widget->SetHouseID(result.GetInt32(27)); + widget->SetOpenX(result.GetFloat(28)); + widget->SetOpenZ(result.GetFloat(29)); + widget->SetCloseX(result.GetFloat(30)); + widget->SetCloseZ(result.GetFloat(31)); + widget->appearance.display_hand_icon = result.GetInt8(32); + zone->AddWidget(id, widget); + + LogWrite(WIDGET__DEBUG, 0, "Widget", "Loaded Widget: '%s' (%u).", widget->appearance.name, spawn_id); + return true; + } + + LogWrite(WIDGET__DEBUG, 0, "Widget", "Unable to find a widget for spawn id of %u", spawn_id); + return false; +} + +bool WorldDatabase::LoadObject(ZoneServer* zone, int32 spawn_id) { + Object* object = 0; + int32 id = 0; + DatabaseResult result; + + database_new.Select(&result, "SELECT so.spawn_id, s.name, s.race, s.model_type, s.command_primary, s.command_secondary, s.targetable, s.size, s.show_name, s.visual_state, s.attackable, s.show_level, s.show_command_icon, s.display_hand_icon, s.faction_id, s.collision_radius, s.transport_id, s.size_offset, so.device_id\n" + "FROM spawn s\n" + "INNER JOIN spawn_objects so\n" + "ON so.spawn_id = s.id\n" + "WHERE s.id = %u", + spawn_id); + + if (result.GetNumRows() > 0 && result.Next()) { + id = result.GetInt32(0); + object = new Object(); + object->SetDatabaseID(id); + strcpy(object->appearance.name, result.GetString(1)); + vector* primary_command_list = zone->GetEntityCommandList(result.GetInt32(4)); + vector* secondary_command_list = zone->GetEntityCommandList(result.GetInt32(5)); + if(primary_command_list){ + object->SetPrimaryCommands(primary_command_list); + object->primary_command_list_id = result.GetInt32(4); + } + if(secondary_command_list){ + object->SetSecondaryCommands(secondary_command_list); + object->secondary_command_list_id = result.GetInt32(5); + } + object->appearance.race = result.GetInt8(2); + object->appearance.model_type = result.GetInt16(3); + object->appearance.targetable = result.GetInt8(6); + object->size = result.GetInt16(7); + object->appearance.display_name = result.GetInt8(8); + object->appearance.visual_state = result.GetInt16(9); + object->appearance.attackable = result.GetInt8(10); + object->appearance.show_level = result.GetInt8(11); + object->appearance.show_command_icon = result.GetInt8(12); + object->appearance.display_hand_icon = result.GetInt8(13); + object->faction_id = result.GetInt32(14); + object->appearance.pos.collision_radius = result.GetInt16(15); + object->SetTransporterID(result.GetInt32(16)); + object->SetSizeOffset(result.GetInt8(17)); + object->SetDeviceID(result.GetInt8(18)); + zone->AddObject(id, object); + + LogWrite(OBJECT__DEBUG, 0, "Object", "Loaded Object: '%s' (%u).", object->appearance.name, spawn_id); + return true; + } + + LogWrite(OBJECT__DEBUG, 0, "Object", "Unable to find an object for spawn id of %u", spawn_id); + return false; +} + +bool WorldDatabase::LoadGroundSpawn(ZoneServer* zone, int32 spawn_id) { + GroundSpawn* spawn = 0; + int32 id = 0; + DatabaseResult result; + + database_new.Select(&result, "SELECT sg.spawn_id, s.name, s.race, s.model_type, s.command_primary, s.command_secondary, s.targetable, s.size, s.show_name, s.visual_state, s.attackable, s.show_level, s.show_command_icon, s.display_hand_icon, s.faction_id, s.collision_radius, sg.number_harvests, sg.num_attempts_per_harvest, sg.groundspawn_id, sg.collection_skill, s.size_offset\n" + "FROM spawn s\n" + "INNER JOIN spawn_ground sg\n" + "ON sg.spawn_id = s.id\n" + "WHERE s.id = %u", + spawn_id); + + if (result.GetNumRows() > 0 && result.Next()) { + id = result.GetInt32(0); + spawn = new GroundSpawn(); + spawn->SetDatabaseID(id); + strcpy(spawn->appearance.name, result.GetString(1)); + vector* primary_command_list = zone->GetEntityCommandList(result.GetInt32(4)); + vector* secondary_command_list = zone->GetEntityCommandList(result.GetInt32(5)); + if(primary_command_list){ + spawn->SetPrimaryCommands(primary_command_list); + spawn->primary_command_list_id = result.GetInt32(4); + } + if(secondary_command_list){ + spawn->SetSecondaryCommands(secondary_command_list); + spawn->secondary_command_list_id = result.GetInt32(5); + } + spawn->appearance.race = result.GetInt8(2); + spawn->appearance.model_type = result.GetInt16(3); + spawn->appearance.targetable = result.GetInt8(6); + spawn->size = result.GetInt16(7); + spawn->appearance.display_name = result.GetInt8(8); + spawn->appearance.visual_state = result.GetInt16(9); + spawn->appearance.attackable = result.GetInt8(10); + spawn->appearance.show_level = result.GetInt8(11); + spawn->appearance.show_command_icon = result.GetInt8(12); + spawn->appearance.display_hand_icon = result.GetInt8(13); + spawn->faction_id = result.GetInt32(14); + spawn->appearance.pos.collision_radius = result.GetInt16(15); + spawn->SetNumberHarvests(result.GetInt8(16)); + spawn->SetAttemptsPerHarvest(result.GetInt8(17)); + spawn->SetGroundSpawnEntryID(result.GetInt32(18)); + spawn->SetCollectionSkill(result.GetString(19)); + spawn->SetSizeOffset(result.GetInt8(20)); + zone->AddGroundSpawn(id, spawn); + + if (!zone->GetGroundSpawnEntries(spawn->GetGroundSpawnEntryID())) + LoadGroundSpawnEntry(zone, spawn->GetGroundSpawnEntryID()); + + LogWrite(GROUNDSPAWN__DEBUG, 0, "GSpawn", "Loaded Ground Spawn: '%s' (%u).", spawn->appearance.name, spawn_id); + return true; + } + + LogWrite(GROUNDSPAWN__DEBUG, 0, "GSpawn", "Unable to find a ground spawn for spawn id of %u", spawn_id); + return false; +} + +void WorldDatabase::LoadGroundSpawnItems(ZoneServer* zone, int32 entry_id) { + DatabaseResult result; + + database_new.Select(&result, "SELECT item_id, is_rare, grid_id\n" + "FROM groundspawn_items\n" + "WHERE groundspawn_id = %u", + entry_id); + + if (result.GetNumRows() > 0 && result.Next()) { + zone->AddGroundSpawnItem(entry_id, result.GetInt32(0), result.GetInt8(1), result.GetInt32(2)); + LogWrite(GROUNDSPAWN__DEBUG, 5, "GSpawn", "---Loading GroundSpawn Items: ID: %u\n", entry_id); + LogWrite(GROUNDSPAWN__DEBUG, 5, "GSpawn", "---item: %ul, rare: %i, grid: %ul", result.GetInt32(0), result.GetInt8(1), result.GetInt32(2)); + } +} + +void WorldDatabase::LoadGroundSpawnEntry(ZoneServer* zone, int32 entry_id) { + DatabaseResult result; + + database_new.Select(&result, "SELECT min_skill_level, min_adventure_level, bonus_table, harvest1, harvest3, harvest5, harvest_imbue, harvest_rare, harvest10, harvest_coin\n" + "FROM groundspawns\n" + "WHERE enabled = 1 AND groundspawn_id = %u", + entry_id); + + if (result.GetNumRows() > 0 && result.Next()) { + // this is getting ridonkulous... + LogWrite(GROUNDSPAWN__DEBUG, 5, "GSpawn", "---Loading GroundSpawn ID: %u\n" \ + "---min_skill_level: %i, min_adventure_level: %i, bonus_table: %i\n" \ + "---harvest1: %.2f, harvest3: %.2f, harvest5: %.2f\n" \ + "---harvest_imbue: %.2f, harvest_rare: %.2f, harvest10: %.2f\n" \ + "---harvest_coin: %u", entry_id, result.GetInt16(0), result.GetInt16(1), result.GetInt8(2), result.GetFloat(3), result.GetFloat(4), result.GetFloat(5), result.GetFloat(6), result.GetFloat(7), result.GetFloat(8), result.GetInt32(9)); + + zone->AddGroundSpawnEntry(entry_id, result.GetInt16(0), result.GetInt16(1), result.GetInt8(2), result.GetFloat(3), result.GetFloat(4), result.GetFloat(5), result.GetFloat(6), result.GetFloat(7), result.GetFloat(8), result.GetInt32(9)); + LoadGroundSpawnItems(zone, entry_id); + } +} + +bool WorldDatabase::LoadNPC(ZoneServer* zone, int32 spawn_id) { + NPC* npc = nullptr; + int32 id = 0; + DatabaseResult result; + + database_new.Select(&result, "SELECT npc.spawn_id, s.name, npc.min_level, npc.max_level, npc.enc_level, s.race, s.model_type, npc.class_, npc.gender, s.command_primary, s.command_secondary, s.show_name, npc.min_group_size, npc.max_group_size, npc.hair_type_id, npc.facial_hair_type_id, npc.wing_type_id, npc.chest_type_id, npc.legs_type_id, npc.soga_hair_type_id, npc.soga_facial_hair_type_id, s.attackable, s.show_level, s.targetable, s.show_command_icon, s.display_hand_icon, s.hp, s.power, s.size, s.collision_radius, npc.action_state, s.visual_state, npc.mood_state, npc.initial_state, npc.activity_status, s.faction_id, s.sub_title, s.merchant_id, s.merchant_type, s.size_offset, npc.attack_type, npc.ai_strategy+0, npc.spell_list_id, npc.secondary_spell_list_id, npc.skill_list_id, npc.secondary_skill_list_id, npc.equipment_list_id, npc.str, npc.sta, npc.wis, npc.intel, npc.agi, npc.heat, npc.cold, npc.magic, npc.mental, npc.divine, npc.disease, npc.poison, npc.aggro_radius, npc.cast_percentage, npc.randomize, npc.soga_model_type, npc.heroic_flag, npc.alignment, npc.elemental, npc.arcane, npc.noxious, s.savagery, s.dissonance, npc.hide_hood, npc.emote_state, s.prefix, s.suffix, s.last_name\n" + "FROM spawn s\n" + "INNER JOIN spawn_npcs npc\n" + "ON npc.spawn_id = s.id\n" + "WHERE s.id = %u", + spawn_id); + + if (result.GetNumRows() > 0 && result.Next()) { + id = result.GetInt32(0); + npc = new NPC(); + npc->SetDatabaseID(id); + strcpy(npc->appearance.name, result.GetString(1)); + vector* primary_command_list = zone->GetEntityCommandList(result.GetInt32(9)); + vector* secondary_command_list = zone->GetEntityCommandList(result.GetInt32(10)); + if(primary_command_list){ + npc->SetPrimaryCommands(primary_command_list); + npc->primary_command_list_id = result.GetInt32(9); + } + if(secondary_command_list){ + npc->SetSecondaryCommands(secondary_command_list); + npc->secondary_command_list_id = result.GetInt32(10); + } + npc->appearance.min_level = result.GetInt8(2); + npc->appearance.max_level = result.GetInt8(3); + npc->appearance.level = result.GetInt8(2); + npc->appearance.encounter_level = result.GetInt8(4); + npc->appearance.race = result.GetInt8(5); + + //npc->appearance.lua_race_id = result.GetInt16(74); + npc->appearance.model_type = result.GetInt16(6); + npc->appearance.soga_model_type = result.GetInt16(62); + npc->appearance.adventure_class = result.GetInt8(7); + npc->appearance.gender = result.GetInt8(8); + npc->appearance.display_name = result.GetInt8(11); + npc->features.hair_type = result.GetInt16(14); + npc->features.hair_face_type = result.GetInt16(15); + npc->features.wing_type = result.GetInt16(16); + npc->features.chest_type = result.GetInt16(17); + npc->features.legs_type = result.GetInt16(18); + npc->features.soga_hair_type = result.GetInt16(19); + npc->features.soga_hair_face_type = result.GetInt16(20); + npc->appearance.attackable = result.GetInt8(21); + npc->appearance.show_level = result.GetInt8(22); + npc->appearance.targetable = result.GetInt8(23); + npc->appearance.show_command_icon = result.GetInt8(24); + npc->appearance.display_hand_icon = result.GetInt8(25); + npc->appearance.hide_hood = result.GetInt8(70); + npc->appearance.randomize = result.GetInt32(61); + npc->SetTotalHP(result.GetInt32(26)); + npc->SetTotalPower(result.GetInt32(27)); + npc->SetHP(npc->GetTotalHP()); + npc->SetPower(npc->GetTotalPower()); + if(npc->GetTotalHP() == 0){ + npc->SetTotalHP(15*npc->GetLevel() + 1); + npc->SetHP(15*npc->GetLevel() + 1); + } + if(npc->GetTotalPower() == 0){ + npc->SetTotalPower(15*npc->GetLevel() + 1); + npc->SetPower(15*npc->GetLevel() + 1); + } + npc->size = result.GetInt16(28); + npc->appearance.pos.collision_radius = result.GetInt16(29); + npc->appearance.action_state = result.GetInt16(30); + npc->appearance.visual_state = result.GetInt16(31); + npc->appearance.mood_state = result.GetInt16(32); + npc->appearance.emote_state = result.GetInt16(71); + npc->appearance.pos.state = result.GetInt16(33); + npc->appearance.activity_status = result.GetInt16(34); + npc->faction_id = result.GetInt32(35); + if(!result.IsNull(36)){ + if(strlen(result.GetString(36)) < sizeof(npc->appearance.sub_title)) + strcpy(npc->appearance.sub_title, result.GetString(36)); + else + strncpy(npc->appearance.sub_title, result.GetString(36), sizeof(npc->appearance.sub_title)); + } + npc->SetMerchantID(result.GetInt32(37)); + npc->SetMerchantType(result.GetInt8(38)); + npc->SetSizeOffset(result.GetInt8(39)); + npc->SetAttackType(result.GetInt8(40)); + npc->SetAIStrategy(result.GetInt8(41)); + npc->SetPrimarySpellList(result.GetInt32(42)); + npc->SetSecondarySpellList(result.GetInt32(43)); + npc->SetPrimarySkillList(result.GetInt32(44)); + npc->SetSecondarySkillList(result.GetInt32(45)); + npc->SetEquipmentListID(result.GetInt32(46)); + + InfoStruct* info = npc->GetInfoStruct(); + info->str_base = result.GetInt16(47); + info->sta_base = result.GetInt16(48); + info->wis_base = result.GetInt16(49); + info->intel_base = result.GetInt16(50); + info->agi_base = result.GetInt16(51); + info->heat_base = result.GetInt16(52); + info->cold_base = result.GetInt16(53); + info->magic_base = result.GetInt16(54); + info->mental_base = result.GetInt16(55); + info->divine_base = result.GetInt16(56); + info->disease_base = result.GetInt16(57); + info->poison_base = result.GetInt16(58); + info->alignment = result.GetInt8(64); + npc->SetAggroRadius(result.GetFloat(59)); + npc->SetCastPercentage(result.GetInt8(60)); + npc->appearance.heroic_flag = result.GetInt8(63); + + info->elemental_base = result.GetInt16(65); + info->arcane_base = result.GetInt16(66); + info->noxious_base = result.GetInt16(67); + npc->SetTotalSavagery(result.GetInt32(68)); + npc->SetTotalDissonance(result.GetInt32(69)); + npc->SetSavagery(npc->GetTotalSavagery()); + npc->SetDissonance(npc->GetTotalDissonance()); + if(npc->GetTotalSavagery() == 0){ + npc->SetTotalSavagery(15*npc->GetLevel() + 1); + npc->SetSavagery(15*npc->GetLevel() + 1); + } + if(npc->GetTotalDissonance() == 0){ + npc->SetTotalDissonance(15*npc->GetLevel() + 1); + npc->SetDissonance(15*npc->GetLevel() + 1); + } + npc->SetPrefixTitle(result.GetString(72)); + npc->SetSuffixTitle(result.GetString(73)); + npc->SetLastName(result.GetString(74)); + + zone->AddNPC(id, npc); + + //skipped spells/skills/equipment as it is all loaded, the following rely on a spawn to load + LoadAppearance(zone, spawn_id); + LoadNPCAppearanceEquipmentData(zone, spawn_id); + + LogWrite(NPC__DEBUG, 0, "NPC", "Loaded NPC: '%s' (%u).", npc->appearance.name, spawn_id); + return true; + } + + LogWrite(NPC__DEBUG, 0, "NPC", "Unable to find a npc for spawn id of %u", spawn_id); + return false; +} + +void WorldDatabase::LoadAppearance(ZoneServer* zone, int32 spawn_id) { + Entity* entity = zone->GetNPC(spawn_id); + if (!entity) + return; + + DatabaseResult result, result2; + map appearance_types; + map > appearance_colors; + EQ2_Color color; + color.red = 0; + color.green = 0; + color.blue = 0; + string type; + + database_new.Select(&result2, "SELECT distinct `type`\n" + "FROM npc_appearance\n" + "WHERE length(`type`) > 0 AND `spawn_id` = %u", + spawn_id); + + while(result2.Next()) { + type = string(result2.GetString(0)); + appearance_types[type] = GetAppearanceType(type); + if(appearance_types[type] == 255) + LogWrite(WORLD__ERROR, 0, "Appearance", "Unknown appearance type '%s' in LoadAppearances.", type.c_str()); + } + + database_new.Select(&result, "SELECT `type`, `signed_value`, `red`, `green`, `blue`\n" + "FROM npc_appearance\n" + "WHERE length(`type`) > 0 AND `spawn_id` = %u", + spawn_id); + + while(result.Next()) { + if(appearance_types[result.GetString(0)] < APPEARANCE_SOGA_EBT){ + color.red = result.GetInt8(2); + color.green = result.GetInt8(3); + color.blue = result.GetInt8(4); + } + switch(appearance_types[result.GetString(0)]){ + case APPEARANCE_SOGA_HFHC:{ + entity->features.soga_hair_face_highlight_color = color; + break; + } + case APPEARANCE_SOGA_HTHC:{ + entity->features.soga_hair_type_highlight_color = color; + break; + } + case APPEARANCE_SOGA_HFC:{ + entity->features.soga_hair_face_color = color; + break; + } + case APPEARANCE_SOGA_HTC:{ + entity->features.soga_hair_type_color = color; + break; + } + case APPEARANCE_SOGA_HH:{ + entity->features.soga_hair_highlight_color = color; + break; + } + case APPEARANCE_SOGA_HC1:{ + entity->features.soga_hair_color1 = color; + break; + } + case APPEARANCE_SOGA_HC2:{ + entity->features.soga_hair_color2 = color; + break; + } + case APPEARANCE_SOGA_SC:{ + entity->features.soga_skin_color = color; + break; + } + case APPEARANCE_SOGA_EC:{ + entity->features.soga_eye_color = color; + break; + } + case APPEARANCE_HTHC:{ + entity->features.hair_type_highlight_color = color; + break; + } + case APPEARANCE_HFHC:{ + entity->features.hair_face_highlight_color = color; + break; + } + case APPEARANCE_HTC:{ + entity->features.hair_type_color = color; + break; + } + case APPEARANCE_HFC:{ + entity->features.hair_face_color = color; + break; + } + case APPEARANCE_HH:{ + entity->features.hair_highlight_color = color; + break; + } + case APPEARANCE_HC1:{ + entity->features.hair_color1 = color; + break; + } + case APPEARANCE_HC2:{ + entity->features.hair_color2 = color; + break; + } + case APPEARANCE_WC1:{ + entity->features.wing_color1 = color; + break; + } + case APPEARANCE_WC2:{ + entity->features.wing_color2 = color; + break; + } + case APPEARANCE_SC:{ + entity->features.skin_color = color; + break; + } + case APPEARANCE_EC:{ + entity->features.eye_color = color; + break; + } + case APPEARANCE_SOGA_EBT:{ + for(int i=0;i<3;i++) + entity->features.soga_eye_brow_type[i] = result.GetInt8(2+i); + break; + } + case APPEARANCE_SOGA_CHEEKT:{ + for(int i=0;i<3;i++) + entity->features.soga_cheek_type[i] = result.GetInt8(2+i); + break; + } + case APPEARANCE_SOGA_NT:{ + for(int i=0;i<3;i++) + entity->features.soga_nose_type[i] = result.GetInt8(2+i); + break; + } + case APPEARANCE_SOGA_CHINT:{ + for(int i=0;i<3;i++) + entity->features.soga_chin_type[i] = result.GetInt8(2+i); + break; + } + case APPEARANCE_SOGA_LT:{ + for(int i=0;i<3;i++) + entity->features.soga_lip_type[i] = result.GetInt8(2+i); + break; + } + case APPEARANCE_SOGA_EART:{ + for(int i=0;i<3;i++) + entity->features.soga_ear_type[i] = result.GetInt8(2+i); + break; + } + case APPEARANCE_SOGA_EYET:{ + for(int i=0;i<3;i++) + entity->features.soga_eye_type[i] = result.GetInt8(2+i); + break; + } + case APPEARANCE_EBT:{ + for(int i=0;i<3;i++) + entity->features.eye_brow_type[i] = result.GetInt8(2+i); + break; + } + case APPEARANCE_CHEEKT:{ + for(int i=0;i<3;i++) + entity->features.cheek_type[i] = result.GetInt8(2+i); + break; + } + case APPEARANCE_NT:{ + for(int i=0;i<3;i++) + entity->features.nose_type[i] = result.GetInt8(2+i); + break; + } + case APPEARANCE_CHINT:{ + for(int i=0;i<3;i++) + entity->features.chin_type[i] = result.GetInt8(2+i); + break; + } + case APPEARANCE_EART:{ + for(int i=0;i<3;i++) + entity->features.ear_type[i] = result.GetInt8(2+i); + break; + } + case APPEARANCE_EYET:{ + for(int i=0;i<3;i++) + entity->features.eye_type[i] = result.GetInt8(2+i); + break; + } + case APPEARANCE_LT:{ + for(int i=0;i<3;i++) + entity->features.lip_type[i] = result.GetInt8(2+i); + break; + } + case APPEARANCE_SHIRT:{ + entity->features.shirt_color = color; + break; + } + case APPEARANCE_UCC:{ + break; + } + case APPEARANCE_PANTS:{ + entity->features.pants_color = color; + break; + } + case APPEARANCE_ULC:{ + break; + } + case APPEARANCE_U9:{ + break; + } + case APPEARANCE_BODY_SIZE:{ + entity->features.body_size = color.red; + break; + } + case APPEARANCE_SOGA_WC1:{ + break; + } + case APPEARANCE_SOGA_WC2:{ + break; + } + case APPEARANCE_SOGA_SHIRT:{ + break; + } + case APPEARANCE_SOGA_UCC:{ + break; + } + case APPEARANCE_SOGA_PANTS:{ + break; + } + case APPEARANCE_SOGA_ULC:{ + break; + } + case APPEARANCE_SOGA_U13:{ + break; + } + } + } +} + +void WorldDatabase::LoadNPCAppearanceEquipmentData(ZoneServer* zone, int32 spawn_id) { + NPC* npc = zone->GetNPC(spawn_id); + if(!npc) { + LogWrite(NPC__ERROR, 0, "NPC", "Unable to get a valid npc (%u) in %s", spawn_id, __FUNCTION__); + return; + } + + DatabaseResult result; + int8 slot = 0; + + if (!database_new.Select(&result, "SELECT slot_id, equip_type, red, green, blue, highlight_red, highlight_green, highlight_blue\n" + "FROM npc_appearance_equip\n" + "WHERE spawn_id = %u\n", + spawn_id)) + { + + LogWrite(DATABASE__ERROR, 0, "DBNew", "MySQL Error %u: %s", database_new.GetError(), database_new.GetErrorMsg()); + return; + } + + while (result.Next()) { + slot = result.GetInt8(0); + if(slot < NUM_SLOTS) { + npc->equipment.equip_id[slot] = result.GetInt16(1); + npc->equipment.color[slot].red = result.GetInt8(2); + npc->equipment.color[slot].green = result.GetInt8(3); + npc->equipment.color[slot].blue = result.GetInt8(4); + npc->equipment.highlight[slot].red = result.GetInt8(5); + npc->equipment.highlight[slot].green = result.GetInt8(6); + npc->equipment.highlight[slot].blue = result.GetInt8(7); + } + } +} + +void WorldDatabase::SaveCharacterPicture(int32 characterID, int8 type, uchar* picture, int32 picture_size) { + stringstream ss_hex; + stringstream ss_query; + ss_hex.flags(ios::hex); + for (int32 i = 0; i < picture_size; i++) + ss_hex << setfill('0') << setw(2) << (int32)picture[i]; + + ss_query << "INSERT INTO `character_pictures` (`char_id`, `pic_type`, `picture`) VALUES (" << characterID << ", " << (int32)type << ", '" << ss_hex.str() << "') ON DUPLICATE KEY UPDATE `picture` = '" << ss_hex.str() << "'"; + + if (!database_new.Query(ss_query.str().c_str())) + LogWrite(DATABASE__ERROR, 0, "DBNew", "MySQL Error %u: %s", database_new.GetError(), database_new.GetErrorMsg()); +} + +void WorldDatabase::LoadZoneFlightPaths(ZoneServer* zone) { + DatabaseResult result; + int32 total = 0; + + if (!database_new.Select(&result, "SELECT id, speed, flying, early_dismount FROM flight_paths WHERE zone_id = %u", zone->GetZoneID())) { + LogWrite(DATABASE__ERROR, 0, "DBNew", "MySQL Error %u: %s", database_new.GetError(), database_new.GetErrorMsg()); + return; + } + + while (result.Next()) { + FlightPathInfo* info = new FlightPathInfo; + int32 id = result.GetInt32(0); + info->speed = result.GetFloat(1); + info->flying = result.GetInt8(2) == 1 ? true : false; + info->dismount = result.GetInt8(3) == 1 ? true : false; + + zone->AddFlightPath(id, info); + total++; + } + + LogWrite(ZONE__DEBUG, 0, "Zone", "Loaded %u flight paths for %s", total, zone->GetZoneDescription()); + LoadZoneFlightPathLocations(zone); +} + +void WorldDatabase::LoadZoneFlightPathLocations(ZoneServer* zone) { + DatabaseResult result; + int32 total = 0; + + if (!database_new.Select(&result, "SELECT loc.flight_path, loc.x, loc.y, loc.z FROM flight_paths_locations loc\n" + "INNER JOIN flight_paths path\n" + "ON loc.flight_path = path.id\n" + "WHERE path.zone_id = %u\n" + "ORDER BY loc.id", + zone->GetZoneID())) + { + LogWrite(DATABASE__ERROR, 0, "DBNew", "MySQL Error %u: %s", database_new.GetError(), database_new.GetErrorMsg()); + return; + } + + while (result.Next()) { + FlightPathLocation* loc = new FlightPathLocation; + int32 id = result.GetInt32(0); + loc->X = result.GetFloat(1); + loc->Y = result.GetFloat(2); + loc->Z = result.GetFloat(3); + + zone->AddFlightPathLocation(id, loc); + total++; + } + + LogWrite(ZONE__DEBUG, 0, "Zone", "Loaded %u flight path locations for %s", total, zone->GetZoneDescription()); +} + +void WorldDatabase::SaveCharacterLUAHistory(Player* player, int32 event_id, int32 value, int32 value2) { + if (!database_new.Query("REPLACE INTO character_lua_history (char_id, event_id, value, value2) VALUES (%u, %u, %u, %u)", player->GetCharacterID(), event_id, value, value2)) + LogWrite(DATABASE__ERROR, 0, "DBNew", "MySQL Error %u: %s", database_new.GetError(), database_new.GetErrorMsg()); +} + +void WorldDatabase::LoadCharacterLUAHistory(int32 char_id, Player* player) { + DatabaseResult result; + int32 total = 0; + + if (!database_new.Select(&result, "SELECT event_id, value, value2 FROM character_lua_history WHERE char_id = %u", char_id)) { + LogWrite(DATABASE__ERROR, 0, "DBNew", "MySQL Error %u: %s", database_new.GetError(), database_new.GetErrorMsg()); + return; + } + + while (result.Next()) { + int32 id = result.GetInt32(0); + LUAHistory* hd = new LUAHistory; + hd->Value = result.GetInt32(1); + hd->Value2 = result.GetInt32(2); + hd->SaveNeeded = false; + player->LoadLUAHistory(id, hd); + total++; + } + + LogWrite(PLAYER__DEBUG, 0, "Player", "Loaded %u LUA history for %s", total, player->GetName()); +} \ No newline at end of file diff --git a/EQ2/source/WorldServer/WorldDatabase.h b/EQ2/source/WorldServer/WorldDatabase.h new file mode 100644 index 000000000..bcf0354d7 --- /dev/null +++ b/EQ2/source/WorldServer/WorldDatabase.h @@ -0,0 +1,567 @@ +/* + EQ2Emulator: Everquest II Server Emulator + Copyright (C) 2007 EQ2EMulator Development Team (http://www.eq2emulator.net) + + This file is part of EQ2Emulator. + + EQ2Emulator is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + EQ2Emulator is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with EQ2Emulator. If not, see . +*/ +#ifndef EQ2WORLD_EMU_DATABASE_H +#define EQ2WORLD_EMU_DATABASE_H + +#ifdef WIN32 + #include + #include +#endif +#include +#include +#include +#include +#include + +#include "../common/database.h" +#include "../common/types.h" +#include "../common/MiscFunctions.h" +#include "../common/Mutex.h" +#include "../common/DatabaseNew.h" +#include "client.h" +#include "Object.h" +#include "Widget.h" +#include "Sign.h" +#include "NPC.h" +#include "zoneserver.h" +#include "Collections/Collections.h" +#include "Achievements/Achievements.h" +#include "Recipes/Recipe.h" +#include "../common/PacketStruct.h" +#include "Spells.h" +#include "Titles.h" +#include "Rules/Rules.h" +#include "Languages.h" + +using namespace std; + +#define APPEARANCE_SOGA_HFHC 0 +#define APPEARANCE_SOGA_HTHC 1 +#define APPEARANCE_SOGA_HFC 2 +#define APPEARANCE_SOGA_HTC 3 +#define APPEARANCE_SOGA_HH 4 +#define APPEARANCE_SOGA_HC1 5 +#define APPEARANCE_SOGA_HC2 6 +#define APPEARANCE_SOGA_SC 7 +#define APPEARANCE_SOGA_EC 8 +#define APPEARANCE_HTHC 9 +#define APPEARANCE_HFHC 10 +#define APPEARANCE_HTC 11 +#define APPEARANCE_HFC 12 +#define APPEARANCE_HH 13 +#define APPEARANCE_HC1 14 +#define APPEARANCE_HC2 15 +#define APPEARANCE_WC1 16 +#define APPEARANCE_WC2 17 +#define APPEARANCE_SC 18 +#define APPEARANCE_EC 19 +#define APPEARANCE_SHIRT 20 +#define APPEARANCE_UCC 21 +#define APPEARANCE_PANTS 22 +#define APPEARANCE_ULC 23 +#define APPEARANCE_U9 24 +#define APPEARANCE_BODY_SIZE 25 +#define APPEARANCE_SOGA_WC1 26 +#define APPEARANCE_SOGA_WC2 27 +#define APPEARANCE_SOGA_SHIRT 28 +#define APPEARANCE_SOGA_UCC 29 +#define APPEARANCE_SOGA_PANTS 30 +#define APPEARANCE_SOGA_ULC 31 +#define APPEARANCE_SOGA_U13 32 +#define APPEARANCE_SOGA_EBT 33 +#define APPEARANCE_SOGA_CHEEKT 34 +#define APPEARANCE_SOGA_NT 35 +#define APPEARANCE_SOGA_CHINT 36 +#define APPEARANCE_SOGA_LT 37 +#define APPEARANCE_SOGA_EART 38 +#define APPEARANCE_SOGA_EYET 39 +#define APPEARANCE_EBT 40 +#define APPEARANCE_CHEEKT 41 +#define APPEARANCE_NT 42 +#define APPEARANCE_CHINT 43 +#define APPEARANCE_EART 44 +#define APPEARANCE_EYET 45 +#define APPEARANCE_LT 46 +#define APPEARANCE_BODY_AGE 47 + + +struct StartingItem{ + string type; + int32 item_id; + string creator; + int8 condition; + int8 attuned; + int16 count; +}; + +class Bot; + +class WorldDatabase : public Database { +public: + WorldDatabase(); + ~WorldDatabase(); + + bool ConnectNewDatabase(); + string* GetZoneName(int32 id); + string GetZoneDescription(int32 id); + int32 LoadCharacterSkills(int32 char_id, Player* player); + void DeleteCharacterSkill(int32 char_id, Skill* skill); + void DeleteCharacterSpell(int32 character_id, int32 spell_id); + int32 LoadCharacterSpells(int32 char_id, Player* player); + int32 LoadItemBlueStats(); + void SaveQuickBar(int32 char_id, vector* quickbar_items); + void SavePlayerSpells(Client* client); + int32 LoadSkills(); + void LoadCommandList(); + map >* LoadCharacterMacros(int32 char_id); + void UpdateCharacterMacro(int32 char_id, int8 number, const char* name, int16 icon, vector* updates); + void SaveWorldTime(WorldTime* time); + + bool SaveSpawnInfo(Spawn* spawn); + int32 GetNextSpawnIDInZone(int32 zone_id); + bool SaveSpawnEntry(Spawn* spawn, const char* spawn_location_name, int8 percent, float x_offset, float y_offset, float z_offset, bool save_zonespawn = true, bool create_spawnlocation = true); + float GetSpawnLocationPlacementOffsetX(int32 location_id); + float GetSpawnLocationPlacementOffsetY(int32 location_id); + float GetSpawnLocationPlacementOffsetZ(int32 location_id); + int32 GetNextSpawnLocation(); + bool CreateNewSpawnLocation(int32 id, const char* name); + bool RemoveSpawnFromSpawnLocation(Spawn* spawn); + int32 GetSpawnLocationCount(int32 location, Spawn* spawn = 0); + vector* GetSpawnNameList(const char* in_name); + void LoadSubCommandList(); + void LoadGlobalVariables(); + void UpdateVitality(int32 timestamp, float amount); + void SaveVariable(const char* name, const char* value, const char* comment); + void LoadVisualStates(); + void LoadAppearanceMasterList(); + void Save(Client* client); + void SaveItems(Client* client); + void SaveItem(int32 account_id, int32 char_id, Item* item, const char* type); + void DeleteBuyBack(int32 char_id, int32 item_id, int16 quantity, int32 price); + void LoadBuyBacks(Client* client); + void SaveBuyBacks(Client* client); + void SaveBuyBack(int32 char_id, int32 item_id, int16 quantity, int32 price); + void DeleteItem(int32 char_id, Item* item, const char* type); + void SaveCharacterColors(int32 char_id, const char* type, EQ2_Color color); + void SaveCharacterFloats(int32 char_id, const char* type, float float1, float float2, float float3); + int16 GetAppearanceID(string name); + vector* GetAppearanceIDsLikeName(string name, bool filtered = true); + string GetAppearanceName(int16 appearance_id); + void UpdateRandomize(int32 spawn_id, sint32 value); + int32 SaveCharacter(PacketStruct* create, int32 loginID); + int32 LoadNPCAppearanceEquipmentData(ZoneServer* zone); + void SaveNPCAppearanceEquipment(int32 spawn_id, int8 slot_id, int16 type, int8 red=0, int8 green=0, int8 blue=0, int8 hred=0, int8 hgreen=0, int8 hblue=0); + void LoadSpecialZones(); + void SaveCharacterSkills(Client* client); + void SaveCharacterQuests(Client* client); + void SaveCharacterQuestProgress(Client* client, Quest* quest); + void DeleteCharacterQuest(int32 quest_id, int32 char_id, bool repeated_quest = false); + void LoadCharacterQuests(Client* client); + void LoadPlayerAA(Player *player); + void LoadCharacterQuestProgress(Client* client); + void LoadCharacterFriendsIgnoreList(Player* player); + void LoadZoneInfo(ZoneServer* zone); + void LoadZoneInfo(ZoneInfo* zone_info); + int32 GetZoneID(const char* name); + void SaveZoneInfo(int32 zone_id, const char* field, sint32 value); + void SaveZoneInfo(int32 zone_id, const char* field, float value); + void SaveZoneInfo(int32 zone_id, const char* field, const char* value); + bool GetZoneRequirements(const char* zoneName,sint16* minStatus, int16* minLevel, int16* maxLevel, int16* minVersion); + int16 GetMinimumClientVersion(int8 expansion_id); + string GetExpansionIDByVersion(int16 version); + int32 CheckTableVersions(char* tablename); + bool RunDatabaseQueries(TableQuery* queries, bool output_result = true, bool data = false); + void UpdateTableVersion(char* name, int32 version); + void UpdateDataTableVersion(char* name, int32 version); + void UpdateStartingFactions(int32 char_id, int8 choice); + string GetStartingZoneName(int8 choice); + void UpdateStartingZone(int32 char_id, int8 class_id, int8 race_id, int8 choice); + void UpdateStartingItems(int32 char_id, int8 class_id, int8 race_id, bool base_class = false); + void UpdateStartingSkills(int32 char_id, int8 class_id, int8 race_id); + void UpdateStartingSpells(int32 char_id, int8 class_id, int8 race_id); + void UpdateStartingSkillbar(int32 char_id, int8 class_id, int8 race_id); + void UpdateStartingTitles(int32 char_id, int8 class_id, int8 race_id, int8 gender_id); + bool UpdateSpawnLocationSpawns(Spawn* spawn); + bool CheckVersionTable(); + void LoadFactionAlliances(); + void LoadFactionList(); + bool LoadPlayerFactions(Client* client); + void SavePlayerFactions(Client* client); + void LoadSpawnScriptData(); + void LoadZoneScriptData(); + int32 LoadSpellScriptData(); + bool UpdateSpawnScriptData(int32 spawn_id, int32 spawn_location_id, int32 spawnentry_id, const char* name); + map* GetZoneList(const char* name, bool is_admin = false); + bool VerifyZone(const char* name); + int8 GetInstanceTypeByZoneID(int32 zoneID); + /*void loadNPCAppearance(int32 appearance_id); + void LoadNPCAppearances();*/ + void ResetDatabase(); + void EnableConstraints(); + void DisableConstraints(); + bool SaveCombinedSpawnLocation(ZoneServer* zone, Spawn* spawn, const char* name); + int32 ProcessSpawnLocations(ZoneServer* zone, const char* sql_query, int8 type); + int32 LoadSpawnLocationGroupAssociations(ZoneServer* zone); + int32 LoadSpawnLocationGroups(ZoneServer* zone); + int32 LoadSpawnGroupChances(ZoneServer* zone); + bool SpawnGroupAddAssociation(int32 group1, int32 group2); + bool SpawnGroupRemoveAssociation(int32 group1, int32 group2); + bool SpawnGroupAddSpawn(Spawn* spawn, int32 group_id); + bool SpawnGroupRemoveSpawn(Spawn* spawn, int32 group_id); + int32 CreateSpawnGroup(Spawn* spawn, string name); + void DeleteSpawnGroup(int32 id); + bool SetGroupSpawnChance(int32 id, float chance); + void LoadGroundSpawnEntries(ZoneServer* zone); + void LoadGroundSpawnItems(ZoneServer* zone); + void LoadSpawns(ZoneServer* zone); + int8 GetAppearanceType(string type); + void LoadNPCs(ZoneServer* zone); + int32 LoadAppearances(ZoneServer* zone, Client* client = 0); + int32 LoadNPCSpells(ZoneServer* zone); + int32 LoadNPCSkills(ZoneServer* zone); + int32 LoadNPCEquipment(ZoneServer* zone); + void LoadObjects(ZoneServer* zone); + void LoadGroundSpawns(ZoneServer* zone); + void LoadWidgets(ZoneServer* zone); + void LoadSigns(ZoneServer* zone); + void ReloadItemList(); + void LoadItemList(); + int32 LoadItemStats(); + int32 LoadItemAppearances(); + int32 LoadItemLevelOverride(); + int32 LoadItemEffects(); + int32 LoadBookPages(); + int32 LoadNextUniqueItemID(); + int32 LoadSkillItems(); + int32 LoadRangeWeapons(); + int32 LoadThrownWeapons(); + int32 LoadBaubles(); + int32 LoadBooks(); + int32 LoadItemsets(); + int32 LoadHouseItem(); + int32 LoadRecipeBookItems(); + int32 LoadArmor(); + int32 LoadAdornments(); + int32 LoadClassifications(); + int32 LoadShields(); + int32 LoadBags(); + int32 LoadFoods(); + int32 LoadWeapons(); + int32 LoadRanged(); + int32 LoadHouseContainers(); + + map >* LoadSpellClasses(); + void LoadTransporters(ZoneServer* zone); + void LoadTransportMaps(ZoneServer* zone); + void LoadDataFromRow(MYSQL_ROW row, Item* item); // JA - eventually get rid of this function when all DB calls are converted + void LoadDataFromRow(DatabaseResult *result, Item* item); + void LoadCharacterItemList(int32 account_id, int32 char_id, Player* player, int16); + bool loadCharacter(const char* name, int32 account_id, Client* client); + bool LoadCharacterStats(int32 id, int32 account_id, Client* client); + bool InsertCharacterStats(int32 character_id, int8 class_id, int8 race_id); + bool UpdateCharacterTimeStamp(int32 account_id, int32 character_id, int32 timestamp); + string GetPlayerName(char* name); + int32 GetCharacterTimeStamp(int32 character_id, int32 account_id,bool* char_exists); + int32 GetCharacterTimeStamp(int32 character_id); + sint32 GetLatestDataTableVersion(char* name); + sint16 GetLowestCharacterAdminStatus(int32 account_id); + sint16 GetHighestCharacterAdminStatus(int32 account_id); + sint16 GetCharacterAdminStatus(char* character_name); + sint16 GetCharacterAdminStatus(int32 account_id , int32 char_id); + bool UpdateAdminStatus(char* character_name, sint16 flag); + void LoadMerchantInformation(); + void LoadMerchantInventory(); + string GetMerchantDescription(int32 merchant_id); + void LoadPlayerStatistics(Player* player, int32 char_id); + void WritePlayerStatistic(Player* player, Statistic* stat); + void LoadServerStatistics(); + void WriteServerStatistic(Statistic* stat); + void WriteServerStatistic(int32 stat_id, sint32 stat_value); + void WriteServerStatisticsNeededQueries(); + void SavePlayerMail(Mail* mail); + void SavePlayerMail(Client* client); + void LoadPlayerMail(Client* client, bool new_only = false); + void DeletePlayerMail(Mail* mail); + vector* GetAllPlayerIDs(); + void GetPetNames(ZoneServer* zone); + //void LoadMerchantMultipliers(); + + char* GetCharacterName(int32 character_id); + int8 GetCharacterLevel(int32 character_id); + int16 GetCharacterModelType(int32 character_id); + int8 GetCharacterClass(int32 character_id); + int8 GetCharacterGender(int32 character_id); + int32 GetCharacterID(const char* name); + int32 GetCharacterCurrentZoneID(int32 character_id); + int32 GetCharacterAccountID(int32 character_id); + void LoadEntityCommands(ZoneServer* zone); + void LoadSpells(); + void LoadSpellEffects(); + void LoadSpellLuaData(); + void LoadTraits(); + int32 LoadPlayerSkillbar(Client* client); + string GetColumnNames(char* name); + + string GetZoneName(char* zone_description); + bool GetItemResultsToClient (Client* client, const char* varSearch, int maxResults=20); + void LoadRevivePoints(vector* revive_points, int32 zone_id); + void SaveBugReport(const char* category, const char* subcategory, const char* causes_crash, const char* reproducible, const char* summary, const char* description, const char* version, const char* player, int32 account_id, const char* spawn_name, int32 spawn_id, int32 zone_id); + void FixBugReport(); + + int32 LoadQuests(); + void LoadQuestDetails(Quest* quest); + + bool DeleteCharacter(int32 account_id, int32 character_id); + + int32 GetMaxHotBarID(); + + int8 CheckNameFilter(const char* name); + static int32 NextUniqueHotbarID(){ + next_id++; + return next_id; + } + void LoadFogInit(string zone, PacketStruct* packet); + static int32 next_id; + + void ToggleCharacterOnline(); + void ToggleCharacterOnline(Client* client, int8 toggle); + + // Zone Instance DB Functions + map* GetInstanceRemovedSpawns(int32 instance_id, int8 type); + int32 CreateNewInstance(int32 zone_id); + //int32 AddCharacterInstance(int32 char_id, int32 instance_id, int32 grant_reenter_time_left=0, int32 grant_reset_time_left=0, int32 lockout_time=0); + int32 AddCharacterInstance(int32 char_id, int32 instance_id, string zone_name, int8 instance_type, int32 last_success, int32 last_failure, int32 success_lockout, int32 failure_lockout); + bool UpdateCharacterInstanceTimers(int32 char_id, int32 instance_id, int32 lockout_time=0, int32 reset_time=0, int32 reenter_time=0 ); + bool UpdateCharacterInstance(int32 char_id, string zone_name, int32 instance_id, int8 type = 0, int32 timestamp = 0); + bool VerifyInstanceID(int32 char_id, int32 instance_id); + bool CheckVectorForValue(vector* vector, int32 value); + int32 CheckSpawnRemoveInfo(map* inmap, int32 spawn_location_entry_id); + bool UpdateInstancedSpawnRemoved(int32 spawn_location_entry_id, int32 spawn_type, int32 respawn_time, int32 instance_id ); + int32 CreateInstanceSpawnRemoved(int32 spawn_location_entry_id, int32 spawn_type, int32 respawn_time, int32 instance_id ); + bool DeleteInstance(int32 instance_id); + bool DeleteInstanceSpawnRemoved(int32 instance_id, int32 spawn_location_entry_id); + bool DeleteCharacterFromInstance(int32 char_id, int32 instance_id); + bool LoadCharacterInstances(Client* client); + // + + MutexMap* GetEquipmentUpdates(); + MutexMap* GetEquipmentUpdates(int32 char_id); + void UpdateLoginEquipment(); + MutexMap* GetZoneUpdates(); + void UpdateLoginZones(); + void LoadLocationGrids(ZoneServer* zone); + bool LoadLocationGridLocations(LocationGrid* grid); + int32 CreateLocation(int32 zone_id, int32 grid_id, const char* name, bool include_y); + bool AddLocationPoint(int32 location_id, float x, float y, float z); + bool DeleteLocation(int32 location_id); + bool DeleteLocationPoint(int32 location_point_id); + void ListLocations(Client* client); + void ListLocationPoints(Client* client, int32 location_id); + bool LocationExists(int32 location_id); + + + bool GetTableVersions(vector *table_versions); + bool QueriesFromFile(const char *file); + + + /* Achievements */ + void LoadAchievements(); + int32 LoadAchievementRequirements(Achievement *achievement); + int32 LoadAchievementRewards(Achievement *achievement); + void LoadPlayerAchievements(Player *player); + int32 LoadPlayerAchievementsUpdates(Player *player); + int32 LoadPlayerAchievementsUpdateItems(AchievementUpdate *update, int32 player_id); + + /* Alternate Advancement */ + void LoadAltAdvancements(); + void LoadTreeNodes(); + + /* Collections */ + void LoadCollections(); + int32 LoadCollectionItems(Collection *collection); + int32 LoadCollectionRewards(Collection *collection); + void LoadPlayerCollections(Player *player); + void LoadPlayerCollectionItems(Player *player, Collection *collection); + void SavePlayerCollections(Client *client); + void SavePlayerCollection(Client *client, Collection *collection); + void SavePlayerCollectionItems(Client *client, Collection *collection); + void SavePlayerCollectionItem(Client *client, Collection *collection, int32 item_id); + + /* Commands */ + map* GetSpawnTemplateListByName(const char* name); + map* GetSpawnTemplateListByID(int32 location_id); + int32 SaveSpawnTemplate(int32 placement_id, const char* template_name); + bool RemoveSpawnTemplate(int32 template_id); + int32 CreateSpawnFromTemplateByID(Client* client, int32 template_id); + int32 CreateSpawnFromTemplateByName(Client* client, const char* template_name); + bool SaveZoneSafeCoords(int32 zone_id, float x, float y, float z, float heading); + bool SaveSignZoneToCoords(int32 spawn_id, float x, float y, float z, float heading); + + /* Guilds */ + void LoadGuilds(); + int32 LoadGuildMembers(Guild* guild); + void LoadGuildEvents(Guild* guild); + void LoadGuildRanks(Guild* guild); + void LoadGuildEventFilters(Guild* guild); + void LoadGuildPointsHistory(Guild* guild, GuildMember* guild_member); + void LoadGuildRecruiting(Guild* guild); + void SaveGuild(Guild* guild, bool new_guild = false); + void SaveGuildMembers(Guild* guild); + void SaveGuildEvents(Guild* guild); + void SaveGuildRanks(Guild* guild); + void SaveGuildEventFilters(Guild* guild); + void SaveGuildPointsHistory(Guild* guild); + void SaveGuildRecruiting(Guild* guild); + void DeleteGuild(Guild* guild); + void DeleteGuildMember(Guild* guild, int32 character_id); + void DeleteGuildEvent(Guild* guild, int64 event_id); + void DeleteGuildPointHistory(Guild* guild, int32 character_id, PointHistory* point_history); + void ArchiveGuildEvent(Guild* guild, GuildEvent* guild_event); + void SaveHiddenGuildEvent(Guild* guild, GuildEvent* guild_event); + void LoadGuildDefaultRanks(Guild* guild); + void LoadGuildDefaultEventFilters(Guild* guild); + bool AddNewPlayerToServerGuild(int32 account_id, int32 char_id); + int32 GetGuildIDByCharacterID(int32 char_id); + + /* Chat */ + void LoadChannels(); + + /* Recipes */ + void LoadRecipes(); + void LoadRecipeBooks(); + void LoadPlayerRecipes(Player *player); + int32 LoadPlayerRecipeBooks(int32 char_id, Player *player); + void SavePlayerRecipeBook(Player* player, int32 recipebook_id); + void LoadRecipeComponents(); + void LoadRecipeProducts(); + void UpdatePlayerRecipe(Player* player, int32 recipe_id, int8 highest_rank); + void SavePlayerRecipe(Player* player, int32 recipe_id); + + /* Tradeskills */ + void LoadTradeskillEvents(); + + /* Rules */ + void LoadGlobalRuleSet(); + void LoadRuleSets(); + void LoadRuleSetDetails(RuleSet *rule_set); + + /* Titles */ + void LoadTitles(); + int32 LoadCharacterTitles(int32 char_id, Player *player); + sint16 GetCharPrefixIndex(int32 char_id, Player *player); + sint16 GetCharSuffixIndex(int32 char_id, Player *player); + void SaveCharPrefixIndex(sint16 index, int32 char_id, Client *client); + void SaveCharSuffixIndex(sint16 index, int32 char_id, Client *client); + + /* Languages */ + void LoadLanguages(); + int32 LoadCharacterLanguages(int32 char_id, Player *player); + int16 GetCharacterCurrentLang(int32 char_id, Player *player); + void SaveCharacterCurrentLang(int32 id, int32 char_id, Client *client); + + /// Saves the given language for the given player + /// Character ID to save the language to + /// Language ID to save to the character + void SaveCharacterLang(int32 char_id, int32 lang_id); + + /* Tradeskills */ + + /* Character History */ + void SaveCharacterHistory(Player* player, int8 type, int8 subtype, int32 value, int32 value2, char* location, int32 event_date); + + /* Housing */ + void LoadHouseZones(); + int64 AddPlayerHouse(int32 char_id, int32 house_id, int32 instance_id, int32 upkeep_due); + void RemovePlayerHouse(int32 char_id, int32 house_id); + void LoadPlayerHouses(); + + /* World */ + bool CheckBannedIPs(const char* loginIP); + + /* Heroic OP */ + void LoadHOStarters(); + void LoadHOWheel(); + + /* Race Types */ + void LoadRaceTypes(); + + /* Loot */ + void LoadLoot(ZoneServer* zone); + void LoadGlobalLoot(ZoneServer* zone); + + void LoadCharacterHistory(int32 char_id, Player *player); + void LoadSpellErrors(); + + /* Load single spawns */ + bool LoadSign(ZoneServer* zone, int32 spawn_id); + bool LoadWidget(ZoneServer* zone, int32 spawn_id); + bool LoadObject(ZoneServer* zone, int32 spawn_id); + bool LoadGroundSpawn(ZoneServer* zone, int32 spawn_id); + void LoadGroundSpawnEntry(ZoneServer* zone, int32 entry_id); + void LoadGroundSpawnItems(ZoneServer* zone, int32 entry_id); + bool LoadNPC(ZoneServer* zone, int32 spawn_id); + void LoadAppearance(ZoneServer* zone, int32 spawn_id); + void LoadNPCAppearanceEquipmentData(ZoneServer* zone, int32 spawn_id); + + /* Save character Pictures */ + /// Saves the pictures that clients send to the server + /// The ID of the character + /// The type of image this is, 0 = paperdoll, 1 = headshot + /// The raw png data + void SaveCharacterPicture(int32 characterID, int8 type, uchar* picture, int32 picture_size); + + /* Quests */ + /// Updates the given date for the quest in the DB for a repeatable quest + /// Client to save the quest for + /// ID of the quest to save + /// Number of times the quest has already been completed + void SaveCharRepeatableQuest(Client* client, int32 quest_id, int16 quest_complete_count); + + + /* Zone Flight Paths */ + void LoadZoneFlightPaths(ZoneServer* zone); + void LoadZoneFlightPathLocations(ZoneServer* zone); + + /* Character LUA History */ + void SaveCharacterLUAHistory(Player* player, int32 event_id, int32 value, int32 value2); + void LoadCharacterLUAHistory(int32 char_id, Player* player); + + /* Bots - BotDB.cpp */ + int32 CreateNewBot(int32 char_id, string name, int8 race, int8 advClass, int8 gender, int16 model_id, int32& index); + void SaveBotAppearance(Bot* bot); + void SaveBotColors(int32 bot_id, const char* type, EQ2_Color color); + void SaveBotFloats(int32 bot_id, const char* type, float float1, float float2, float float3); + bool LoadBot(int32 char_id, int32 bot_index, Bot* bot); + void LoadBotAppearance(Bot* bot); + void SaveBotItem(int32 bot_id, int32 item_id, int8 slot); + void LoadBotEquipment(Bot* bot); + string GetBotList(int32 char_id); + void DeleteBot(int32 char_id, int32 bot_index); + void SetBotStartingItems(Bot* bot, int8 class_id, int8 race_id); + +private: + DatabaseNew database_new; + map zone_names; + string skills; + int32 max_zonename; + char** zonename_array; +}; +#endif + diff --git a/EQ2/source/WorldServer/WorldTCPConnection.h b/EQ2/source/WorldServer/WorldTCPConnection.h new file mode 100644 index 000000000..545cd9bbc --- /dev/null +++ b/EQ2/source/WorldServer/WorldTCPConnection.h @@ -0,0 +1,33 @@ +/* + EQ2Emulator: Everquest II Server Emulator + Copyright (C) 2007 EQ2EMulator Development Team (http://www.eq2emulator.net) + + This file is part of EQ2Emulator. + + EQ2Emulator is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + EQ2Emulator is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with EQ2Emulator. If not, see . +*/ +#ifndef WorldTCPCONNECTION_H +#define WorldTCPCONNECTION_H +class WorldTCPConnection +{ +public: + WorldTCPConnection() { } + virtual ~WorldTCPConnection() { } + virtual void SendEmoteMessage(const char* to, int32 to_guilddbid, sint16 to_minstatus, int32 type, const char* message, ...) { } + virtual void SendEmoteMessageRaw(const char* to, int32 to_guilddbid, sint16 to_minstatus, int32 type, const char* message) { } + + virtual inline bool IsConsole() { return false; } +}; + +#endif diff --git a/EQ2/source/WorldServer/Zone/SPGrid.cpp b/EQ2/source/WorldServer/Zone/SPGrid.cpp new file mode 100644 index 000000000..305acaec1 --- /dev/null +++ b/EQ2/source/WorldServer/Zone/SPGrid.cpp @@ -0,0 +1,480 @@ +/* +EQ2Emulator: Everquest II Server Emulator +Copyright (C) 2007 EQ2EMulator Development Team (http://www.eq2emulator.net) + +This file is part of EQ2Emulator. +EQ2Emulator is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +EQ2Emulator is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with EQ2Emulator. If not, see . +*/ + +#include "SPGrid.h" +#include "../../common/Log.h" +#include + +SPGrid::SPGrid(string file, int32 cellSize) { + m_ZoneFile = file; + m_CellSize = cellSize; + m_MinX = 0; + m_MinZ = 0; + m_MaxX = 0; + m_MaxZ = 0; + m_NumCellsX = 0; + m_NumCellsZ = 0; + m_NumFaceCellsX = 0; + m_NumFaceCellsZ = 0; +} + +SPGrid::~SPGrid() { + vector::iterator CellItr; + map >::iterator MapItr; + vector::iterator FaceItr; + + // Loop through the vector of cells + /*for (CellItr = m_Cells.begin(); CellItr != m_Cells.end(); CellItr++) { + // Loop through the map of vertices on this cell + for (MapItr = (*CellItr).FaceList.begin(); MapItr != (*CellItr).FaceList.end(); MapItr++) { + // Loop through the vector of faces in the map and delete the pointers + for (FaceItr = (*MapItr).second.begin(); FaceItr != (*MapItr).second.end(); FaceItr++) { + safe_delete((*FaceItr)); + } + } + }*/ +} + +bool SPGrid::Init() { + // Make sure we have a zone file + if (m_ZoneFile.empty()) { + LogWrite(ZONE__ERROR, 0, "SPGrid", "SPGrid::Init() m_ZoneFile is empty."); + return false; + } + + // Make sure we have a cell size + if (m_CellSize == 0) + m_CellSize = CELLSIZEDEFAULT; + + // Open the map file for this zone + string filePath = "Maps/" + m_ZoneFile + ".EQ2Map"; + FILE* file = fopen(filePath.c_str(), "rb"); + if (file == nullptr) { + LogWrite(ZONE__WARNING, 0, "SPGrid", "SPGrid::Init() unable to open the map file for %s. (zoneserver will continue to run fine without it)", m_ZoneFile.c_str()); + return false; + } + + // Read the string for the zone file name this was created for + int8 strSize; + char name[256]; + fread(&strSize, sizeof(int8), 1, file); + LogWrite(ZONE__DEBUG, 0, "SPGrid", "strSize = %u", strSize); + + size_t len = fread(&name, sizeof(char), strSize, file); + name[len] = '\0'; + LogWrite(ZONE__DEBUG, 0, "SPGrid", "name = %s", name); + + // Make sure file contents are for the correct zone + if (string(name) != m_ZoneFile) { + fclose(file); + LogWrite(ZONE__ERROR, 0, "SPGrid", "SPGrid::Init() map contents (%s) do not match its name (%s).", &name, m_ZoneFile.c_str()); + return false; + } + + // Read the min bounds + fread(&m_MinX, sizeof(float), 1, file); + fread(&m_MinZ, sizeof(float), 1, file); + LogWrite(ZONE__DEBUG, 0, "SPGrid", "minx = %f, minz = %f", m_MinX, m_MinZ); + + // Read the max bounds + fread(&m_MaxX, sizeof(float), 1, file); + fread(&m_MaxZ, sizeof(float), 1, file); + LogWrite(ZONE__DEBUG, 0, "SPGrid", "maxx = %f, maxz = %f", m_MaxX, m_MaxZ); + + // Calculate how many cells we need + // in both the X and Z direction + float width = m_MaxX - m_MinX; + float height = m_MaxZ - m_MinZ; + m_NumCellsX = ceil(width / m_CellSize); + m_NumCellsZ = ceil(height / m_CellSize); + LogWrite(ZONE__DEBUG, 0, "SPGrid", "CellSize = %u, x cells = %u, z cells = %u", m_CellSize, m_NumCellsX, m_NumCellsZ); + + // Allocate all the cells + m_Cells.resize(m_NumCellsZ * m_NumCellsX); + + m_NumFaceCellsX = ceil(width / FACECELLSIZEDEFAULT); + m_NumFaceCellsZ = ceil(height / FACECELLSIZEDEFAULT); + m_FaceCells.resize(m_NumFaceCellsX * m_NumFaceCellsZ); + + // Read the number of grids + int32 NumGrids; + fread(&NumGrids, sizeof(int32), 1, file); + LogWrite(ZONE__DEBUG, 0, "SPGrid", "NumGrids = %u", NumGrids); + + // Loop through the grids loading the face list + for (int32 i = 0; i < NumGrids; i++) { + // Read the grid id + int32 GridID; + fread(&GridID, sizeof(int32), 1, file); + LogWrite(ZONE__DEBUG, 0, "SPGrid", "GridID = %u", GridID); + + // Read the number of vertices + int32 NumFaces; + fread(&NumFaces, sizeof(int32), 1, file); + LogWrite(ZONE__DEBUG, 0, "SPGrid", "NumFaces = %u", NumFaces); + + // Loop through the vertices list reading + // 3 at a time to creat a triangle (face) + for (int32 y = 0; y < NumFaces; ) { + + // Each vertex need an x,y,z coordinate and + // we will be reading 3 to create the face + float x1, x2, x3; + float y1, y2, y3; + float z1, z2, z3; + + // Read the first vertex + fread(&x1, sizeof(float), 1, file); + fread(&y1, sizeof(float), 1, file); + fread(&z1, sizeof(float), 1, file); + y++; + + // Read the second vertex + fread(&x2, sizeof(float), 1, file); + fread(&y2, sizeof(float), 1, file); + fread(&z2, sizeof(float), 1, file); + y++; + + // Read the third (final) vertex + fread(&x3, sizeof(float), 1, file); + fread(&y3, sizeof(float), 1, file); + fread(&z3, sizeof(float), 1, file); + y++; + + // Create the face and add it to the grid + Face* face = new Face; + face->Vertex1[0] = x1; + face->Vertex1[1] = y1; + face->Vertex1[2] = z1; + + face->Vertex2[0] = x2; + face->Vertex2[1] = y2; + face->Vertex2[2] = z2; + + face->Vertex3[0] = x3; + face->Vertex3[1] = y3; + face->Vertex3[2] = z3; + + AddFace(face, GridID); + } + } + + fclose(file); + + /*map >::iterator itr; + vector::iterator itr2; + for (int32 i = 0; i < m_Cells.size(); i++) { + Cell& cell = m_Cells[i]; + + for (itr = cell.FaceList.begin(); itr != cell.FaceList.end(); itr++) { + float min_x = 0.0f; + float min_y = 0.0f; + float min_z = 0.0f; + float max_x = 0.0f; + float max_y = 0.0f; + float max_z = 0.0f; + + for (itr2 = (*itr).second.begin(); itr2 != (*itr).second.end(); itr2++) { + Face* face = (*itr2); + if (min_x == 0.0f || face->Vertex1[0] < min_x) + min_x = face->Vertex1[0]; + if (face->Vertex2[0] < min_x) + min_x = face->Vertex2[0]; + if (face->Vertex3[0] < min_x) + min_x = face->Vertex3[0]; + + if (min_y == 0.0f || face->Vertex1[1] < min_y) + min_y = face->Vertex1[1]; + if (face->Vertex2[1] < min_y) + min_y = face->Vertex2[1]; + if (face->Vertex3[1] < min_y) + min_y = face->Vertex3[1]; + + if (min_z == 0.0f || face->Vertex1[2] < min_z) + min_z = face->Vertex1[2]; + if (face->Vertex2[2] < min_z) + min_z = face->Vertex2[2]; + if (face->Vertex3[2] < min_z) + min_z = face->Vertex3[2]; + + // Max bounds + if (max_x == 0.0f || face->Vertex1[0] > max_x) + max_x = face->Vertex1[0]; + if (face->Vertex2[0] > max_x) + max_x = face->Vertex2[0]; + if (face->Vertex3[0] > max_x) + max_x = face->Vertex3[0]; + + if (max_y == 0.0f || face->Vertex1[1] > max_y) + max_y = face->Vertex1[1]; + if (face->Vertex2[1] > max_y) + max_y = face->Vertex2[1]; + if (face->Vertex3[1] > max_y) + max_y = face->Vertex3[1]; + + if (max_z == 0.0f || face->Vertex1[2] > max_z) + max_z = face->Vertex1[2]; + if (face->Vertex2[2] > max_z) + max_z = face->Vertex2[2]; + if (face->Vertex3[2] > max_z) + max_z = face->Vertex3[2]; + } + + GridBounds* bounds = new GridBounds; + bounds->MinBounds[0] = min_x; + bounds->MinBounds[1] = min_y; + bounds->MinBounds[2] = min_z; + + bounds->MaxBounds[0] = max_x; + bounds->MaxBounds[1] = max_y; + bounds->MaxBounds[2] = max_z; + + cell.GridBounds[(*itr).first] = bounds; + } + }*/ + + return true; +} + +Cell* SPGrid::GetCell(int32 x, int32 z) { + if (x >= m_NumCellsX) + x = m_NumCellsX - 1; + + if (z >= m_NumCellsZ) + z = m_NumCellsZ - 1; + + return &m_Cells[z * m_NumCellsX + x]; +} + +Cell* SPGrid::GetCell(float x, float z) { + // As cell grid coordinates are all positive we need to + // modify the coordinates by subtracting the min bounds + float newX = x - m_MinX; + float newZ = z - m_MinZ; + + // Get the cell coordinates by doing int division + // with the modified coordinates and the cell size + int32 CellX = (int32)(newX / m_CellSize); + int32 CellZ = (int32)(newZ / m_CellSize); + + return GetCell(CellX, CellZ); +} + +FaceCell* SPGrid::GetFaceCell(int32 x, int32 z) { + if (x >= m_NumFaceCellsX) + x = m_NumFaceCellsX - 1; + + if (z >= m_NumFaceCellsZ) + z = m_NumFaceCellsZ - 1; + + return &m_FaceCells[z * m_NumFaceCellsX + x]; +} + +FaceCell* SPGrid::GetFaceCell(float x, float z) { + // As cell grid coordinates are all positive we need to + // modify the coordinates by subtracting the min bounds + float newX = x - m_MinX; + float newZ = z - m_MinZ; + + // Get the cell coordinates by doing int division + // with the modified coordinates and the cell size + int32 CellX = (int32)(newX / FACECELLSIZEDEFAULT); + int32 CellZ = (int32)(newZ / FACECELLSIZEDEFAULT); + + return GetFaceCell(CellX, CellZ); +} + +void SPGrid::AddFace(Face* face, int32 grid) { + // As each face has three vertices we will need to check the cell + // for all of them and add the face to each cell that it is within + + // Get the cell at the first vertex position (X and Z, Y is vertical in EQ2) + // as this is the first check we will add it to this cell and compare it + // to the other two cells we get for the other two verticies + FaceCell* cell = GetFaceCell(face->Vertex1[0], face->Vertex1[2]); + cell->FaceList[grid].push_back(face); + + // Get the cells for the other two verticies and compare + FaceCell* cell2 = GetFaceCell(face->Vertex2[0], face->Vertex2[2]); + FaceCell* cell3 = GetFaceCell(face->Vertex3[0], face->Vertex3[2]); + + // If cell 2 is not the same cell as the original cell then add the face to cell2 + if (cell2 != cell) + cell2->FaceList[grid].push_back(face); + + // If cell 3 is not the same as the original cell AND not the same as cell 2 then add the face to cell 3 + if (cell3 != cell && cell3 != cell2) + cell3->FaceList[grid].push_back(face); +} + +float rayIntersectsTriangle(float *p, float *d, float *v0, float *v1, float *v2); + +int32 SPGrid::GetGridID(Spawn * spawn) { + FaceCell* cell = GetFaceCell(spawn->GetX(), spawn->GetZ()); + + + /*if (cell->GridBounds.size() == 1) + return cell->FaceList.begin()->first;*/ + + // Create the starting point for the trace + float point[3]; + point[0] = spawn->GetX(); + point[1] = spawn->GetY() + 3.0f; // Small bump to make sure we are above ground when we do the trace + point[2] = spawn->GetZ(); + + // Create the direction for the trace, as we want what + // is below it will just be -1 in the y direction + float direction[3]; + direction[0] = 0.0f; + direction[1] = -1.0f; + direction[2] = 0.0f; + + float MinDistance = 0.0f; + int32 Grid = 0; + + /*map::iterator itr; + for (itr = cell->GridBounds.begin(); itr != cell->GridBounds.end(); itr++) { + GridBounds* bounds = (*itr).second; + + if (point[0] >= bounds->MinBounds[0] && point[1] >= bounds->MinBounds[1] && point[2] >= bounds->MinBounds[2] + && point[0] <= bounds->MaxBounds[0] && point[1] <= bounds->MaxBounds[1] && point[2] <= bounds->MaxBounds[2]) { + + vector::iterator itr2; + for (itr2 = cell->FaceList[(*itr).first].begin(); itr2 != cell->FaceList[(*itr).first].end(); itr2++) { + Face* face = *itr2; + float distance; + if ((distance = rayIntersectsTriangle(point, direction, face->Vertex1, face->Vertex2, face->Vertex3)) != 0) { + if (MinDistance == 0.0f || distance < MinDistance) { + MinDistance = distance; + Grid = (*itr).first; + } + } + } + } + }*/ + map >::iterator mapitr; + for (mapitr = cell->FaceList.begin(); mapitr != cell->FaceList.end(); mapitr++) { + vector::iterator itr; + for (itr = (*mapitr).second.begin(); itr != (*mapitr).second.end(); itr++) { + Face* face = *itr; + float distance; + if ((distance = rayIntersectsTriangle(point, direction, face->Vertex1, face->Vertex2, face->Vertex3)) != 0) { + if (MinDistance == 0.0f || distance < MinDistance) { + MinDistance = distance; + Grid = (*mapitr).first; + } + } + } + } + + return Grid; +} + +void SPGrid::AddSpawn(Spawn * spawn) { + Cell* cell = GetCell(spawn->GetX(), spawn->GetZ()); + AddSpawn(spawn, cell); +} + +void SPGrid::AddSpawn(Spawn * spawn, Cell * cell) { + cell->SpawnList.push_back(spawn); + spawn->Cell_Info.CurrentCell = cell; + spawn->Cell_Info.CellListIndex = cell->SpawnList.size() - 1; +} + +void SPGrid::RemoveSpawnFromCell(Spawn * spawn) { + if (spawn->Cell_Info.CurrentCell) { + + vector& spawns = spawn->Cell_Info.CurrentCell->SpawnList; + + // Only do the vector swap if the vector has more than 1 spawn in it + if (spawns.size() > 1) { + // Swap the last spawn in this list to our position and update its stored index to match its new index + spawns[spawn->Cell_Info.CellListIndex] = spawns.back(); + spawns[spawn->Cell_Info.CellListIndex]->Cell_Info.CellListIndex = spawn->Cell_Info.CellListIndex; + } + + // Remove the last spawn from the list which should now be the spawn passed as a parameter + spawns.pop_back(); + + // Reset the spawns CellInfo to default values now that it is no longer in a cell + spawn->Cell_Info.CellListIndex = -1; + spawn->Cell_Info.CurrentCell = nullptr; + } +} + +/********************************************************************** + + Math functions/macros to test a ray intersection in 3D space + +**********************************************************************/ + +/* a = b - c */ +#define vector(a,b,c) \ + (a)[0] = (b)[0] - (c)[0]; \ + (a)[1] = (b)[1] - (c)[1]; \ + (a)[2] = (b)[2] - (c)[2]; + +#define crossProduct(a,b,c) \ + (a)[0] = (b)[1] * (c)[2] - (c)[1] * (b)[2]; \ + (a)[1] = (b)[2] * (c)[0] - (c)[2] * (b)[0]; \ + (a)[2] = (b)[0] * (c)[1] - (c)[0] * (b)[1]; + +#define innerProduct(v,q) \ + ((v)[0] * (q)[0] + \ + (v)[1] * (q)[1] + \ + (v)[2] * (q)[2]) + +// all parameters should be vectors (float[3]) +float rayIntersectsTriangle(float *p, float *d, float *v0, float *v1, float *v2) { + + float e1[3], e2[3], h[3], s[3], q[3]; + float a, f, u, v; + vector(e1, v1, v0); + vector(e2, v2, v0); + + crossProduct(h, d, e2); + a = innerProduct(e1, h); + + if (a > -0.00001 && a < 0.00001) + return 0; + + f = 1 / a; + vector(s, p, v0); + u = f * (innerProduct(s, h)); + + if (u < 0.0 || u > 1.0) + return 0; + + crossProduct(q, s, e1); + v = f * innerProduct(d, q); + + if (v < 0.0 || u + v > 1.0) + return 0; + + // at this stage we can compute t to find out where + // the intersection point is on the line + float t = f * innerProduct(e2, q); + + if (t > 0.00001) // ray intersection + return t; + + else // this means that there is a line intersection + // but not a ray intersection + return 0; +} diff --git a/EQ2/source/WorldServer/Zone/SPGrid.h b/EQ2/source/WorldServer/Zone/SPGrid.h new file mode 100644 index 000000000..a3c56c24b --- /dev/null +++ b/EQ2/source/WorldServer/Zone/SPGrid.h @@ -0,0 +1,106 @@ +/* +EQ2Emulator: Everquest II Server Emulator +Copyright (C) 2007 EQ2EMulator Development Team (http://www.eq2emulator.net) + +This file is part of EQ2Emulator. +EQ2Emulator is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +EQ2Emulator is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with EQ2Emulator. If not, see . +*/ + +#pragma once + +#include +#include +#include "../../common/types.h" + +class Spawn; + +#define CELLSIZEDEFAULT 150 +#define FACECELLSIZEDEFAULT 15 + +struct Face { + float Vertex1[3]; + float Vertex2[3]; + float Vertex3[3]; +}; + +/*struct GridBounds { + int32 Grid; + float MinBounds[3]; + float MaxBounds[3]; +};*/ + +struct Cell { + std::vector SpawnList; + //std::map > FaceList; + //std::map GridBounds; +}; + +struct FaceCell { + std::map > FaceList; +}; + +class SPGrid { +public: + SPGrid(string file, int32 cellSize); + ~SPGrid(); + + // Sets up the spacial partioning grid + bool Init(); + + // Get cell based on cell coordinates + Cell* GetCell(int32 x, int32 z); + + // Get cell based on world coordinates + Cell* GetCell(float x, float z); + + // Adds a face to the cells it needs to be in and sets its GridID + void AddFace(Face* face, int32 grid); + + // Checks the faces below the given spawn to determine the GridID + int32 GetGridID(Spawn* spawn); + + // Calculate a cell from spawn's position and add the spawn to it + void AddSpawn(Spawn* spawn); + + // Adds the spawn to a specific spell + void AddSpawn(Spawn* spawn, Cell* cell); + + // Removes the spawn from the cell it is currently in + void RemoveSpawnFromCell(Spawn* spawn); + + // Get cell based on cell coordinates + FaceCell* GetFaceCell(int32 x, int32 z); + + // Get cell based on world coordinates + FaceCell* GetFaceCell(float x, float z); +private: + // 1-D array for cells as it is better performance wise then 2-D + std::vector m_Cells; + + std::vector m_FaceCells; + + string m_ZoneFile; + int32 m_CellSize; + + float m_MinX; + float m_MinZ; + float m_MaxX; + float m_MaxZ; + + int32 m_NumCellsX; + int32 m_NumCellsZ; + + int32 m_NumFaceCellsX; + int32 m_NumFaceCellsZ; +}; \ No newline at end of file diff --git a/EQ2/source/WorldServer/classes.cpp b/EQ2/source/WorldServer/classes.cpp new file mode 100644 index 000000000..c4b702d8b --- /dev/null +++ b/EQ2/source/WorldServer/classes.cpp @@ -0,0 +1,197 @@ +/* + EQ2Emulator: Everquest II Server Emulator + Copyright (C) 2007 EQ2EMulator Development Team (http://www.eq2emulator.net) + + This file is part of EQ2Emulator. + + EQ2Emulator is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + EQ2Emulator is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with EQ2Emulator. If not, see . +*/ +#include "../common/debug.h" +#include "../common/Log.h" +#include "classes.h" +#include "../common/MiscFunctions.h" +#include + +Classes::Classes(){ + class_map["COMMONER"] = 0; + class_map["FIGHTER"] = 1; + class_map["WARRIOR"] = 2; + class_map["GUARDIAN"] = 3; + class_map["BERSERKER"] = 4; + class_map["BRAWLER"] = 5; + class_map["MONK"] = 6; + class_map["BRUISER"] = 7; + class_map["CRUSADER"] = 8; + class_map["SHADOWKNIGHT"] = 9; + class_map["PALADIN"] = 10; + class_map["PRIEST"] = 11; + class_map["CLERIC"] = 12; + class_map["TEMPLAR"] = 13; + class_map["INQUISITOR"] = 14; + class_map["DRUID"] = 15; + class_map["WARDEN"] = 16; + class_map["FURY"] = 17; + class_map["SHAMAN"] = 18; + class_map["MYSTIC"] = 19; + class_map["DEFILER"] = 20; + class_map["MAGE"] = 21; + class_map["SORCERER"] = 22; + class_map["WIZARD"] = 23; + class_map["WARLOCK"] = 24; + class_map["ENCHANTER"] = 25; + class_map["ILLUSIONIST"] = 26; + class_map["COERCER"] = 27; + class_map["SUMMONER"] = 28; + class_map["CONJUROR"] = 29; + class_map["NECROMANCER"] = 30; + class_map["SCOUT"] = 31; + class_map["ROGUE"] = 32; + class_map["SWASHBUCKLER"] = 33; + class_map["BRIGAND"] = 34; + class_map["BARD"] = 35; + class_map["TROUBADOR"] = 36; + class_map["DIRGE"] = 37; + class_map["PREDATOR"] = 38; + class_map["RANGER"] = 39; + class_map["ASSASSIN"] = 40; + class_map["ANIMALIST"] = 41; + class_map["BEASTLORD"] = 42; + class_map["SHAPER"] = 43; + class_map["CHANNELER"] = 44; + class_map["ARTISAN"] = 45; + class_map["CRAFTSMAN"] = 46; + class_map["PROVISIONER"] = 47; + class_map["WOODWORKER"] = 48; + class_map["CARPENTER"] = 49; + class_map["OUTFITTER"] = 50; + class_map["ARMORER"] = 51; + class_map["WEAPONSMITH"] = 52; + class_map["TAILOR"] = 53; + class_map["SCHOLAR"] = 54; + class_map["JEWELER"] = 55; + class_map["SAGE"] = 56; + class_map["ALCHEMIST"] = 57; +} + +int8 Classes::GetBaseClass(int8 class_id) { + int8 ret = 0; + if(class_id>=WARRIOR && class_id <= PALADIN) + ret = FIGHTER; + if((class_id>=CLERIC && class_id <= DEFILER) || (class_id == SHAPER || class_id == CHANNELER)) + ret = PRIEST; + if(class_id>=SORCERER && class_id <= NECROMANCER) + ret = MAGE; + if(class_id>=ROGUE && class_id <= BEASTLORD) + ret = SCOUT; + LogWrite(WORLD__DEBUG, 5, "World", "%s returning base class ID: %i", __FUNCTION__, ret); + return ret; +} + +int8 Classes::GetSecondaryBaseClass(int8 class_id){ + int8 ret = 0; + if(class_id==GUARDIAN || class_id == BERSERKER) + ret = WARRIOR; + if(class_id==MONK || class_id == BRUISER) + ret = BRAWLER; + if(class_id==SHADOWKNIGHT || class_id == PALADIN) + ret = CRUSADER; + if(class_id==TEMPLAR || class_id == INQUISITOR) + ret = CLERIC; + if(class_id==WARDEN || class_id == FURY) + ret = DRUID; + if(class_id==MYSTIC || class_id == DEFILER) + ret = SHAMAN; + if(class_id==WIZARD || class_id == WARLOCK) + ret = SORCERER; + if(class_id==ILLUSIONIST || class_id == COERCER) + ret = ENCHANTER; + if(class_id==CONJUROR || class_id == NECROMANCER) + ret = SUMMONER; + if(class_id==SWASHBUCKLER || class_id == BRIGAND) + ret = ROGUE; + if(class_id==TROUBADOR || class_id == DIRGE) + ret = BARD; + if(class_id==RANGER || class_id == ASSASSIN) + ret = PREDATOR; + if(class_id==BEASTLORD) + ret = ANIMALIST; + if(class_id == CHANNELER) + ret = SHAPER; + LogWrite(WORLD__DEBUG, 5, "World", "%s returning secondary class ID: %i", __FUNCTION__, ret); + return ret; +} + +int8 Classes::GetTSBaseClass(int8 class_id) { + class_id += 42; + int8 ret = 0; + if(class_id >= ARTISAN) + ret = ARTISAN; + + LogWrite(WORLD__DEBUG, 5, "World", "%s returning base tradeskill class ID: %i", __FUNCTION__, ret - 44); + return ret - 44; +} + +int8 Classes::GetSecondaryTSBaseClass(int8 class_id) { + class_id += 42; + int8 ret = 0; + if (class_id == ARTISAN) + ret = ARTISAN; + if (class_id >= CRAFTSMAN && class_id < OUTFITTER) + ret = CRAFTSMAN; + if (class_id >= OUTFITTER && class_id < SCHOLAR) + ret = OUTFITTER; + if (class_id >= SCHOLAR) + ret = SCHOLAR; + + LogWrite(WORLD__DEBUG, 5, "World", "%s returning secondary tradeskill class ID: %i", __FUNCTION__, ret - 44); + return ret - 44; +} + +sint8 Classes::GetClassID(const char* name){ + string class_name = string(name); + class_name = ToUpper(class_name); + if(class_map.count(class_name) == 1) { + LogWrite(WORLD__DEBUG, 5, "World", "%s returning class ID: %i for class name %s", __FUNCTION__, class_map[class_name], class_name.c_str()); + return class_map[class_name]; + } + LogWrite(WORLD__WARNING, 0, "World", "Could not find class_id in function: %s (return -1)", __FUNCTION__); + return -1; +} + +const char* Classes::GetClassName(int8 class_id){ + map::iterator itr; + for(itr = class_map.begin(); itr != class_map.end(); itr++){ + if(itr->second == class_id) { + LogWrite(WORLD__DEBUG, 5, "World", "%s returning class name: %s for class_id %i", __FUNCTION__, itr->first.c_str(), class_id); + return itr->first.c_str(); + } + } + LogWrite(WORLD__WARNING, 0, "World", "Could not find class name in function: %s (return 0)", __FUNCTION__); + return 0; +} + +string Classes::GetClassNameCase(int8 class_id) { + map::iterator itr; + for (itr = class_map.begin(); itr != class_map.end(); itr++){ + if (itr->second == class_id) { + string class_name = itr->first; + class_name[0] = itr->first[0]; + transform(itr->first.begin() + 1, itr->first.end(), class_name.begin() + 1, ::tolower); + LogWrite(WORLD__DEBUG, 5, "World", "%s returning class name: %s for class_id %i", __FUNCTION__, class_name.c_str(), class_id); + return class_name; + } + } + LogWrite(WORLD__WARNING, 0, "World", "Could not find class name in function: %s (return blank)", __FUNCTION__); + return ""; +} diff --git a/EQ2/source/WorldServer/classes.h b/EQ2/source/WorldServer/classes.h new file mode 100644 index 000000000..f6b4cfa82 --- /dev/null +++ b/EQ2/source/WorldServer/classes.h @@ -0,0 +1,116 @@ +/* + EQ2Emulator: Everquest II Server Emulator + Copyright (C) 2007 EQ2EMulator Development Team (http://www.eq2emulator.net) + + This file is part of EQ2Emulator. + + EQ2Emulator is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + EQ2Emulator is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with EQ2Emulator. If not, see . +*/ +#ifndef CLASSES_CH +#define CLASSES_CH +#include "../common/types.h" +#include +using namespace std; + +#define COMMONER 0 +#define FIGHTER 1 +#define WARRIOR 2 +#define GUARDIAN 3 +#define BERSERKER 4 +#define BRAWLER 5 +#define MONK 6 +#define BRUISER 7 +#define CRUSADER 8 +#define SHADOWKNIGHT 9 +#define PALADIN 10 +#define PRIEST 11 +#define CLERIC 12 +#define TEMPLAR 13 +#define INQUISITOR 14 +#define DRUID 15 +#define WARDEN 16 +#define FURY 17 +#define SHAMAN 18 +#define MYSTIC 19 +#define DEFILER 20 +#define MAGE 21 +#define SORCERER 22 +#define WIZARD 23 +#define WARLOCK 24 +#define ENCHANTER 25 +#define ILLUSIONIST 26 +#define COERCER 27 +#define SUMMONER 28 +#define CONJUROR 29 +#define NECROMANCER 30 +#define SCOUT 31 +#define ROGUE 32 +#define SWASHBUCKLER 33 +#define BRIGAND 34 +#define BARD 35 +#define TROUBADOR 36 +#define DIRGE 37 +#define PREDATOR 38 +#define RANGER 39 +#define ASSASSIN 40 +#define ANIMALIST 41 +#define BEASTLORD 42 +#define SHAPER 43 +#define CHANNELER 44 + +//Tradeskills +// 0 - transmuting/tinkering +#define ARTISAN 45 // 1 +#define CRAFTSMAN 46 // 2 +#define PROVISIONER 47 // 3 +#define WOODWORKER 48 // 4 +#define CARPENTER 49 // 5 +#define OUTFITTER 50 // 6 +#define ARMORER 51 // 7 +#define WEAPONSMITH 52 // 8 +#define TAILOR 53 // 9 +#define SCHOLAR 54 // 10 +#define JEWELER 55 // 11 +#define SAGE 56 // 12 +#define ALCHEMIST 57 // 13 +//43 - artisan + //44 - craftsman + //45 - provisioner + //46 - Woodworker + //47 - carpenter + //48 - armorer + //49 - weaponsmith + //50 - tailor + //51 - + //52 - jeweler + //53 - sage + //54 - alch + +class Classes { +public: + Classes(); + char* GetEQClassName(int8 class_, int8 level); + const char* GetClassName(int8 class_id); + string GetClassNameCase(int8 class_id); + sint8 GetClassID(const char* name); + int8 GetBaseClass(int8 class_id); + int8 GetSecondaryBaseClass(int8 class_id); + int8 GetTSBaseClass(int8 class_id); + int8 GetSecondaryTSBaseClass(int8 class_id); + +private: + map class_map; +}; +#endif + diff --git a/EQ2/source/WorldServer/client.cpp b/EQ2/source/WorldServer/client.cpp new file mode 100644 index 000000000..5abeb4b0e --- /dev/null +++ b/EQ2/source/WorldServer/client.cpp @@ -0,0 +1,7887 @@ +/* +EQ2Emulator: Everquest II Server Emulator +Copyright (C) 2007 EQ2EMulator Development Team (http://www.eq2emulator.net) + +This file is part of EQ2Emulator. + +EQ2Emulator is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +EQ2Emulator is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with EQ2Emulator. If not, see . +*/ +#include "../common/debug.h" +#include "../common/Log.h" +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include "Player.h" +#include "Commands/Commands.h" +#include "ClientPacketFunctions.h" +#include "../common/ConfigReader.h" +#include "Guilds/Guild.h" +#include "Variables.h" +#include "Rules/Rules.h" +#include "Titles.h" +#include "IRC/IRC.h" +#include "Chat/Chat.h" + +//#include "Quests.h" + +#ifdef WIN32 +#include +#include +#define snprintf _snprintf +#define vsnprintf _vsnprintf +#define strncasecmp _strnicmp +#define strcasecmp _stricmp +#else +#include +#ifdef FREEBSD +#include +#endif +#include +#include +#include +#endif + +#include "client.h" +#include "../common/emu_opcodes.h" +#include "../common/packet_dump.h" +#include "WorldDatabase.h" +#include "races.h" +#include "classes.h" +#include "LoginServer.h" +#include "World.h" +#include "../common/EQ2_Common_Structs.h" +#include "net.h" +#include "../common/MiscFunctions.h" +#include "Items/Items.h" +#include "Skills.h" +#include "LuaInterface.h" +#include "Quests.h" +#include "Collections/Collections.h" +#include "Achievements/Achievements.h" +#include "Traits/Traits.h" +#include "Recipes/Recipe.h" +#include "Tradeskills/Tradeskills.h" +#include "AltAdvancement/AltAdvancement.h" +#include "Bots/Bot.h" + +extern WorldDatabase database; +extern const char* ZONE_NAME; +extern LoginServer loginserver; +extern sint32 numclients; +extern NetConnection net; +extern Commands commands; +extern ClientList client_list; +extern ZoneList zone_list; +extern ZoneAuth zone_auth; +extern MasterItemList master_item_list; +extern MasterSkillList master_skill_list; +extern MasterSpellList master_spell_list; +extern MasterTraitList master_trait_list; +extern MasterQuestList master_quest_list; +extern MasterFactionList master_faction_list; +extern MasterRecipeList master_recipe_list; +extern volatile bool RunLoops; +extern ConfigReader configReader; +extern LuaInterface* lua_interface; +extern World world; +extern Variables variables; +extern Classes classes; +extern Races races; +extern GuildList guild_list; +extern MasterCollectionList master_collection_list; +extern MasterAchievementList master_achievement_list; +extern RuleManager rule_manager; +extern IRC irc; +extern Chat chat; +extern MasterAAList master_aa_list; +extern MasterAAList master_tree_nodes; + +using namespace std; + +Client::Client(EQStream* ieqs) : pos_update(125), quest_pos_timer(2000), lua_debug_timer(30000){ + eqs = ieqs; + ip = eqs->GetrIP(); + port = ntohs(eqs->GetrPort()); + merchant_transaction = nullptr; + SetMailTransaction(nullptr); + timestamp_flag = 0; + current_quest_id = 0; + last_update_time = 0; + quest_updates = false; + + //autobootup_timeout = new Timer(10000); + //autobootup_timeout->Disable(); + + CLE_keepalive_timer = new Timer(15000); + connect = new Timer(1000); + connect->Disable(); + zoneID = 0; + account_name[0] = 0; + account_id = 0; + pwaitingforbootup = 0; + current_zone = 0; + connected_to_zone = false; + connected = false; + camp_timer = 0; + disconnect_timer = 0; + client_zoning = false; + player_pos_changed = false; + ++numclients; + if (world.GetServerStatisticValue(STAT_SERVER_MOST_CONNECTIONS) < numclients) + world.UpdateServerStatistic(STAT_SERVER_MOST_CONNECTIONS, numclients, true); + remove_from_list = false; + new_client_login = false; + UpdateWindowTitle(0); + num_active_failures = 0; + player = new Player(); + combine_spawn = 0; + lua_debug = false; + ready_for_spawns = false; + ready_for_updates = false; + lua_debug_timer.Disable(); + transport_spawn = 0; + MBuyBack.SetName("Client::MBuyBack"); + MPendingQuestAccept.SetName("Client::MPendingQuestAccept"); + MDeletePlayer.SetName("Client::MDeletePlayer"); + MQuestPendingUpdates.SetName("Client::MQuestPendingUpdates"); + search_items = 0; + version = 0; + next_conversation_id = 0; + pending_guild_invite.guild = 0; + pending_guild_invite.invited_by = 0; + m_recipeListSent = false; + m_resurrect.SetName("Client::m_resurrect"); + current_rez.expire_timer = 0; + current_rez.should_delete = true; + pending_last_name = 0; + should_target = false; + initial_spawns_sent = false; + MQuestTimers.SetName("Client::quest_timers"); + memset(&incoming_paperdoll, 0, sizeof(incoming_paperdoll)); + on_auto_mount = false; + should_load_spells = true; +} + +Client::~Client() { + if(current_zone && player){ + if(player->GetGroupMemberInfo() && (player->GetActivityStatus() & ACTIVITY_STATUS_LINKDEAD) > 0) + world.GetGroupManager()->RemoveGroupMember(player->GetGroupMemberInfo()->group_id, player); + world.GetGroupManager()->ClearPendingInvite(player); + } + if(lua_interface) + lua_interface->RemoveDebugClients(this); + + if (player) + zone_list.RemoveClientFromMap(player->GetName(), this); + + //let the stream factory know were done with this stream + if(eqs){ + eqs->Close(); + try{ + eqs->ReleaseFromUse(); + } + catch(...){} + } + eqs = NULL; + + //safe_delete(autobootup_timeout); + + safe_delete(disconnect_timer); + safe_delete(camp_timer); + safe_delete(CLE_keepalive_timer); + safe_delete(connect); + --numclients; + + MDeletePlayer.writelock(__FUNCTION__, __LINE__); + if (player && !player->GetPendingDeletion()) + safe_delete(player); + MDeletePlayer.releasewritelock(__FUNCTION__, __LINE__); + + safe_delete(search_items); + safe_delete(current_rez.expire_timer); + safe_delete(pending_last_name); + safe_delete_array(incoming_paperdoll.image_bytes); + + UpdateWindowTitle(0); +} + +void Client::QueuePacket(EQ2Packet* app){ + if(eqs){ + if(!eqs->CheckActive()){ + client_list.Remove(this); + eqs = 0; + } + } + if(app && eqs && version > 0) + eqs->EQ2QueuePacket(app); + else{ + safe_delete(app); + } + +} + +void Client::PopulateSkillMap(){ + EQ2Packet* app = master_skill_list.GetPopulateSkillsPacket(GetVersion()); + if(app) + QueuePacket(app); + else{ + LogWrite(WORLD__ERROR, 0, "World", "Unable to send populate skills packet for version: %i!", GetVersion()); + Disconnect(); //the client cant proceed without the skill packet, might as well kick it now + } + +} + +void Client::SendLoginInfo() { + if(firstlogin) { + LogWrite(WORLD__DEBUG, 0, "World", "Increment Server_Accepted_Connection + 1"); + world.UpdateServerStatistic(STAT_SERVER_ACCEPTED_CONNECTION, 1); + LogWrite(CCLIENT__DEBUG, 0, "Client", "Populate Skill Map..."); + PopulateSkillMap(); + + // JA: Check client version and move player to valid zone if current client does not support last saved zone (loading SF client on DoV saved zone) IT CAN HAPPEN! + LogWrite(MISC__TODO, 1, "TODO", "Check client version at login, move char if invalid zone file"); + } + + LogWrite(CCLIENT__DEBUG, 0, "Client", "Toggle Character Online..."); + database.ToggleCharacterOnline(this, 1); + + LogWrite(CCLIENT__DEBUG, 0, "Client", "Loading Character Skills for player '%s'...", player->GetName()); + int32 count = database.LoadCharacterSkills(GetCharacterID(), player); + if(count == 0) { + LogWrite(CCLIENT__WARNING, 0, "Client", "No character skills found!"); + database.UpdateStartingSkills(GetCharacterID(), player->GetAdventureClass(), player->GetRace()); + database.LoadCharacterSkills(GetCharacterID(), player); + } + + count = database.LoadCharacterTitles(GetCharacterID(), player); + if(count == 0) { + LogWrite(CCLIENT__DEBUG, 0, "Client", "No character titles found!"); + LogWrite(CCLIENT__DEBUG, 0, "Client", "Initializing starting values - Titles"); + database.UpdateStartingTitles(GetCharacterID(), player->GetAdventureClass(), player->GetRace(), player->GetGender()); + } + + count = database.LoadCharacterLanguages(GetCharacterID(), player); + if(count == 0) + LogWrite(CCLIENT__DEBUG, 0, "Client", "No character languages loaded!"); + + count = database.LoadCharacterSpells(GetCharacterID(), player); + if(count == 0) { + LogWrite(CCLIENT__DEBUG, 0, "Client", "No character spells found!"); + database.UpdateStartingSpells(GetCharacterID(), player->GetAdventureClass(), player->GetRace()); + database.LoadCharacterSpells(GetCharacterID(), player); + } + count = database.LoadPlayerRecipeBooks(GetCharacterID(), player); + if(count == 0) + LogWrite(CCLIENT__DEBUG, 0, "Client", "No character recipe books found!"); + + ClientPacketFunctions::SendLoginAccepted( this ); + + //ClientPacketFunctions::SendAbilities ( this ); + ClientPacketFunctions::SendCommandNamePacket ( this ); + + ClientPacketFunctions::SendQuickBarInit ( this ); + + // we only need to send the MOTD if it is the first time the person is logging in. + if(firstlogin){ + ClientPacketFunctions::SendMOTD ( this ); + ClientPacketFunctions::SendCharacterMacros(this); + zone_list.CheckFriendList(this); + } + + database.LoadCharacterItemList(GetAccountID(), GetCharacterID(), player, GetVersion()); + if (firstlogin && player->item_list.GetNumberOfItems() == 0 && player->GetEquipmentList()->GetNumberOfItems() == 0) //re-add starting items if missing + { + LogWrite(CCLIENT__WARNING, 0, "Client", "Player has no items - reloading starting items: '%s' (%u)", player->GetName(), GetCharacterID()); + database.UpdateStartingItems(GetCharacterID(), player->GetAdventureClass(), player->GetRace()); + database.LoadCharacterItemList(GetAccountID(), GetCharacterID(), player, GetVersion()); + } + database.LoadPlayerFactions(this); + database.LoadCharacterQuests(this); + database.LoadPlayerMail(this); + LogWrite(CCLIENT__DEBUG, 0, "Client", "Send Quest Journal..."); + SendQuestJournal(true); + master_aa_list.DisplayAA(this, 0, 3); + SendCollectionList(); + SendBiography(); + + map::iterator itr; + Quest* quest = 0; + for (itr = player->player_quests.begin(); itr != player->player_quests.end(); itr++) { + quest = itr->second; + if (quest->IsTracked()) { + quest->SetTracked(false); + QueuePacket(itr->second->QuestJournalReply(version, GetNameCRC(), player)); + quest->SetTracked(true); + QueuePacket(itr->second->QuestJournalReply(version, GetNameCRC(), player)); + } + } + + // SendAchievementsList(); + + /*Guild* guild = player->GetGuild(); + if (guild) { + guild->UpdateGuildMemberInfo(GetPlayer()); + if (firstlogin) + guild->SendGuildMOTD(this); + guild->SendGuildUpdate(this); + guild->SendGuildMember(GetPlayer(), firstlogin); + guild->SendGuildEventList(this); + guild->SendGuildBankEventList(this); + guild->SendAllGuildEvents(this); + guild->SendGuildMemberList(this); + }*/ + + LogWrite(CCLIENT__DEBUG, 0, "Client", "Loading Faction Updates..."); + EQ2Packet* outapp = player->GetFactions()->FactionUpdate(GetVersion()); + if(outapp){ + LogWrite(CCLIENT__PACKET, 0, "Client", "Dump/Print Packet in func: %s, line: %i", __FUNCTION__, __LINE__); + //DumpPacket(outapp); + QueuePacket(outapp); + } + + LogWrite(CCLIENT__DEBUG, 0, "Client", "Send Command List..."); + ClientPacketFunctions::SendCommandList( this ); + + LogWrite(CCLIENT__DEBUG, 0, "Client", "Send Language Updates..."); + SendLanguagesUpdate(database.GetCharacterCurrentLang(GetCharacterID(), player)); + + ClientPacketFunctions::SendInstanceList(this); + + SendZoneInfo(); + /*Spell* spell = 0; + vector::iterator itr; + for(itr = player->GetQuickbar()->begin(); itr != player->GetQuickbar()->end(); itr++){ + if((*itr)->type == 1){ + spell = master_spell_list.GetSpell((*itr)->id); + if(spell) + QueuePacket(spell->serialize(this, false, 0x20)); + } + }*/ +} + +void Client::SendPlayerDeathWindow() +{ + LogWrite(CCLIENT__DEBUG, 0, "Client", "SendPlayerDeathWindow"); + vector* results=GetCurrentZone()->GetRevivePoints(this); + vector::iterator itr; + + if (results && results->size()>0) + { + PacketStruct* packet=configReader.getStruct("WS_DeathWindow", GetVersion()); + if (packet) + { + packet->setArrayLengthByName("location_count", results->size()); + RevivePoint* point = 0; + int32 i=0; + + for (itr=results->begin();itr!=results->end();itr++, i++) + { + point = *itr; + if(point) + { + packet->setArrayDataByName("location_id", point->id, i); + //zone_name = database.GetZoneName(point->zone_id); + string zone_name = database.GetZoneDescription(point->zone_id); + if(zone_name.length() > 0) + packet->setArrayDataByName("zone_name", zone_name.c_str(), i); + packet->setArrayDataByName("location_name", point->location_name.c_str(), i); + packet->setArrayDataByName("distance", GetPlayer()->GetDistance(point->x, point->y, point->z), i); + } + + if(point->id == 0xFFFFFFFF)//tmp location + safe_delete(point); + } + // done with the revive points so lets free up the pointer + safe_delete(results); +#if EQDEBUG >= 3 + LogWrite(CCLIENT__DEBUG, 0, "Client", "WS_DeathWindow Packet:"); + packet->PrintPacket(); +#endif + EQ2Packet* outapp = packet->serialize(); + QueuePacket(outapp); + safe_delete(packet); + } + } + +} + +void Client::DisplayDeadWindow() +{ + LogWrite(ZONE__DEBUG, 0, "Zone", "DisplayDeadWindow()"); + + player->SetHP(0); + player->SetPower(0); + GetCurrentZone()->TriggerCharSheetTimer(); + + PacketStruct* packet = configReader.getStruct("WS_ServerControlFlags", GetVersion()); + if(packet) + { + packet->setDataByName("parameter1", 8); + packet->setDataByName("value", 1); + QueuePacket(packet->serialize()); + packet->setDataByName("parameter1", 16); + QueuePacket(packet->serialize()); + safe_delete(packet); + } + + packet = configReader.getStruct("WS_ServerUpdateTarget", GetVersion()); + if(packet) + { + packet->setDataByName("spawn_id", 0xFFFFFFFF); + QueuePacket(packet->serialize()); + safe_delete(packet); + } + + SendPlayerDeathWindow(); + +} + +void Client::HandlePlayerRevive(int32 point_id) +{ + PacketStruct* packet = configReader.getStruct("WS_ServerControlFlags", GetVersion()); + if(packet) + { + packet->setDataByName("parameter1", 8); + QueuePacket(packet->serialize()); + packet->setDataByName("parameter1", 16); + QueuePacket(packet->serialize()); + safe_delete(packet); + } + + SimpleMessage(CHANNEL_COLOR_REVIVE, "You regain consciousness!"); + packet = configReader.getStruct("WS_Resurrected", GetVersion()); + if(packet) + { + QueuePacket(packet->serialize()); + safe_delete(packet); + } + + float x, y, z, heading; + RevivePoint* revive_point = 0; + if(point_id != 0xFFFFFFFF) + revive_point = GetCurrentZone()->GetRevivePoint(point_id); + + string zone_desc; + const char* location_name = "Unknown"; + + //revive at zone safe coords + if(!revive_point) + { + LogWrite(CCLIENT__WARNING, 0, "Client", "No Revive Point! Spawning player at safe coordinates!"); + x = GetCurrentZone()->GetSafeX(); + y = GetCurrentZone()->GetSafeY(); + z = GetCurrentZone()->GetSafeZ(); + heading = GetCurrentZone()->GetSafeHeading(); + zone_desc = GetCurrentZone()->GetZoneDescription(); + location_name = "Zone Safe Point"; + Zone(GetCurrentZone()->GetZoneName(), false); + } + else + { + LogWrite(CCLIENT__DEBUG, 0, "Client", "Sending player to chosen Revive Point."); + x = revive_point->x; + y = revive_point->y; + z = revive_point->z; + heading = revive_point->heading; + zone_desc = database.GetZoneDescription(revive_point->zone_id); + location_name = revive_point->location_name.c_str(); + Zone(GetCurrentZone()->GetZoneName(), false); + } + + player->SetResurrecting(true); + player->SetX(x); + player->SetY(y); + player->SetZ(z); + player->SetHeading(heading); + player->SetHP(player->GetTotalHP()); + player->SetPower(player->GetTotalPower()); + + LogWrite(CCLIENT__DEBUG, 0, "Client", "Attempt Revive @ %s, %.2f, %.2f, %.2f, %.2f, HP: %i, Pow: %i, %s", + zone_desc.c_str(), + player->GetX(), + player->GetY(), + player->GetZ(), + player->GetHeading(), + player->GetHP(), + player->GetPower(), + location_name); + + //player->ClearEverything(); + Save(); + + if(revive_point && revive_point->zone_id != GetCurrentZone()->GetZoneID() && revive_point->zone_id != 0) + { + string* zone_name = database.GetZoneName(revive_point->zone_id); + if(!zone_name || zone_name->length() == 0) + { + LogWrite(CCLIENT__WARNING, 0, "Client", "Unable to zone player to revive zone ID '%u', using current zone's safe coords.", revive_point->zone_id); + x = GetCurrentZone()->GetSafeX(); + y = GetCurrentZone()->GetSafeY(); + z = GetCurrentZone()->GetSafeZ(); + heading = GetCurrentZone()->GetSafeHeading(); + location_name = "Zone Safe Point"; + } + else + { + LogWrite(CCLIENT__DEBUG, 0, "Client", "Sending player to revive zone ID '%u', using current zone's safe coords.", revive_point->zone_id); + location_name = revive_point->location_name.c_str(); + player->ClearEverything(); + Zone(zone_name->c_str(), false); + } + safe_delete(zone_name); + } + + zone_desc = GetCurrentZone()->GetZoneDescription(); + Message(CHANNEL_COLOR_REVIVE, "Reviving in %s at %s.", zone_desc.c_str(), location_name); + player->SetSpawnType(4); + packet = configReader.getStruct("WS_CancelMoveObjectMode", GetVersion()); + if(packet) + { + QueuePacket(packet->serialize()); + safe_delete(packet); + } + + packet = configReader.getStruct("WS_TeleportWithinZone", GetVersion()); + if(packet) + { + packet->setDataByName("x", x); + packet->setDataByName("y", y); + packet->setDataByName("z", z); + QueuePacket(packet->serialize()); + safe_delete(packet); + } + + packet = configReader.getStruct("WS_SetControlGhost", GetVersion()); + if(packet) + { + packet->setDataByName("spawn_id", 0xFFFFFFFF); + packet->setDataByName("unknown2", 255); + QueuePacket(packet->serialize()); + safe_delete(packet); + } + + packet = configReader.getStruct("WS_SetPOVGhostCmd", GetVersion()); + if(packet) + { + packet->setDataByName("spawn_id", 0xFFFFFFFF); + QueuePacket(packet->serialize()); + safe_delete(packet); + } + + GetCurrentZone()->RemoveSpawn(player, false); + + m_resurrect.writelock(__FUNCTION__, __LINE__); + if(current_rez.active) + current_rez.should_delete = true; + m_resurrect.releasewritelock(__FUNCTION__, __LINE__); +} + +void Client::SendCharInfo(){ + EQ2Packet* app; + + + player->SetEquippedItemAppearances(); + + ClientPacketFunctions::SendCharacterData ( this ); + + SendCharPOVGhost(); + + PacketStruct* packet = configReader.getStruct("WS_SetControlGhost",GetVersion()); + if(packet){ + packet->setDataByName("spawn_id", player->GetIDWithPlayerSpawn(player)); + packet->setDataByName("size", .56); + packet->setDataByName("unknown2", 255); + EQ2Packet* app = packet->serialize(); + QueuePacket(app); + safe_delete(packet); + } + + //SendAchievementsList(); + ClientPacketFunctions::SendCharacterSheet(this); + ClientPacketFunctions::SendTraitList(this);// moved from below + //ClientPacketFunctions::SendAbilities(this); + + ClientPacketFunctions::SendSkillBook(this); + if (!player->IsResurrecting()) { + ClientPacketFunctions::SendUpdateSpellBook(this); + } + else { + player->SetResurrecting(false); + } + ClientPacketFunctions::SendLoginCommandMessages(this); + + GetCurrentZone()->AddSpawn(player); + + //SendCollectionList(); + Guild* guild = player->GetGuild(); + if (guild) + guild->GuildMemberLogin(this, firstlogin); + + app = player->item_list.serialize(GetPlayer(), GetVersion()); + if(app){ + LogWrite(CCLIENT__PACKET, 0, "Client", "Dump/Print Packet in func: %s, line: %i", __FUNCTION__, __LINE__); + //DumpPacket(app); + QueuePacket(app); + } + app = player->GetEquipmentList()->serialize(GetVersion()); + if(app){ + QueuePacket(app); + } + + vector* items = player->item_list.GetItemsFromBagID(-3); // bank items + if(items && items->size() > 0){ + for(int32 i=0;isize();i++){ + EQ2Packet* outapp = items->at(i)->serialize(GetVersion(), false, GetPlayer()); + + LogWrite(CCLIENT__PACKET, 0, "Client", "Dump/Print Packet in func: %s, line: %i", __FUNCTION__, __LINE__); + //DumpPacket(outapp); + QueuePacket(outapp); + } + } + + if (firstlogin && (app = chat.GetWorldChannelList(this)) != NULL) + QueuePacket(app); + + safe_delete(items); + items = player->item_list.GetItemsFromBagID(-4); //shared bank items + if(items && items->size() > 0){ + for(int32 i=0;isize();i++) + QueuePacket(items->at(i)->serialize(GetVersion(), false, GetPlayer())); + } + safe_delete(items); + SendTitleUpdate(); + + GetPlayer()->ChangePrimaryWeapon(); + GetPlayer()->ChangeSecondaryWeapon(); + GetPlayer()->ChangeRangedWeapon(); + database.LoadBuyBacks(this); + master_aa_list.DisplayAA(this, 0, 0); + + string zone_motd = GetCurrentZone()->GetZoneMOTD(); + if (zone_motd.length() > 0 && zone_motd[0] != ' ') { + string zone_motd_send = "Zone MOTD: " + zone_motd; + SimpleMessage(CHANNEL_COLOR_WHITE, zone_motd_send.c_str()); + } + const char* zone_script = world.GetZoneScript(GetCurrentZone()->GetZoneID()); + if (zone_script && lua_interface) + lua_interface->RunZoneScript(zone_script, "player_entry", GetCurrentZone(), GetPlayer()); + this->client_zoning = false; + if(player->GetHP() < player->GetTotalHP() || player->GetPower() < player->GetTotalPower()) + GetCurrentZone()->AddDamagedSpawn(player); + + if (firstlogin && rule_manager.GetGlobalRule(R_World, IRCGlobalEnabled)->GetBool()) + Message(CHANNEL_BROADCAST, "This server has a global IRC channel, join the world channel %s to use", rule_manager.GetGlobalRule(R_World, IRCChan)->GetString()); + + if (firstlogin) + firstlogin = false; + + player->ClearProcs(); + items = player->GetEquippedItemList(); + if (items && items->size() > 0) { + for(int32 i = 0; i < items->size(); i++) { + Item* item = items->at(i); + if (item && item->GetItemScript() && lua_interface) + lua_interface->RunItemScript(item->GetItemScript(), "equipped", item, player); + } + } + + //Allow this player to change their last name if they meet the level requirement + if (!player->get_character_flag(CF_ENABLE_CHANGE_LASTNAME) && player->GetLevel() >= rule_manager.GetGlobalRule(R_Player, MinLastNameLevel)->GetInt8()) + player->set_character_flag(CF_ENABLE_CHANGE_LASTNAME); + + safe_delete(items); + + if (!player->Alive()) + DisplayDeadWindow(); +} + +void Client::SendZoneSpawns(){ + //Allows us to place spawns almost anywhere + uchar blah[] ={0x00,0x3C,0x1C,0x46,0x00,0x3C,0x1C,0x46,0x00,0x3C,0x1C,0x46}; + EQ2Packet* app = new EQ2Packet(OP_MoveableObjectPlacementCriteri, blah, sizeof(blah)); + QueuePacket(app); + + ClientPacketFunctions::SendSkillSlotMappings(this); + ClientPacketFunctions::SendGameWorldTime ( this ); + GetCurrentZone()->StartZoneInitialSpawnThread(this); +} + +void Client::SendCharPOVGhost(){ + PacketStruct* set_pov = configReader.getStruct("WS_SetPOVGhostCmd",GetVersion()); + if(set_pov){ + set_pov->setDataByName("spawn_id", player->GetIDWithPlayerSpawn(player)); + EQ2Packet* app_pov = set_pov->serialize(); + QueuePacket(app_pov); + safe_delete(set_pov); + } + +} + +void Client::SendZoneInfo(){ + ZoneServer* zone = GetCurrentZone(); + if(zone){ + EQ2Packet* packet = zone->GetZoneInfoPacket(this); + QueuePacket(packet); + PacketStruct* fog_packet = configReader.getStruct("WS_FogInit", GetVersion()); + + LogWrite(CCLIENT__PACKET, 0, "Client", "Dump/Print Packet in func: %s, line: %i", __FUNCTION__, __LINE__); +#if EQDEBUG >= 9 + fog_packet->PrintPacket(); +#endif + + if(fog_packet){ + database.LoadFogInit(zone->GetZoneFile(), fog_packet); + QueuePacket(fog_packet->serialize()); + safe_delete(fog_packet); + } + + zone->SendFlightPathsPackets(this); + } + /* + uchar blah[] ={0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0x00,0x01,0x00,0x00,0x00,0x00 + ,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 + ,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF + ,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF + ,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00 + ,0x00,0x00,0x00,0x00,0x10,0x49,0x2B,0x62,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 + ,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 + ,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 + ,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 + ,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 + ,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 + ,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 + ,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 + ,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 + ,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 + ,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 + ,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 + ,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 + ,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 + ,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 + ,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 + ,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 + ,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 + ,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 + ,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 + ,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 + ,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 + ,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 + ,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 + ,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 + ,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 + ,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 + ,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 + ,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 + ,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 + ,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0x00}; + EQ2Packet* appA = new EQ2Packet(OP_GuildUpdateMsg, blah, sizeof(blah)); + QueuePacket(appA); + + uchar blahA[] ={0x45,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x00,0x00,0x00 + ,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 + ,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 + ,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00 + ,0x00,0x10,0xE2,0x10,0x6C,0x00,0x00,0x00,0x00}; + EQ2Packet* appB = new EQ2Packet(OP_KeymapDataMsg, blahA, sizeof(blahA)); + QueuePacket(appB); + */ + + LogWrite(CCLIENT__DEBUG, 0, "Client", "SendFriendList"); + SendFriendList(); + LogWrite(CCLIENT__DEBUG, 0, "Client", "SendIgnoreList"); + SendIgnoreList(); +} + +void Client::SendDefaultGroupOptions(){ +/* +0 - loot method +1 - loot items rarity +2 - Auto split coin +4 - default yell method +6 - group autolock +7 - solo autolock +*/ + uchar blah7[] = {0x01,0x01,0x01,0x01,0x00,0x00,0x00}; + EQ2Packet* app7 = new EQ2Packet(OP_DefaultGroupOptionsMsg, blah7, sizeof(blah7)); + QueuePacket(app7); + +} + +bool Client::HandlePacket(EQApplicationPacket *app) { + bool ret = true; + + LogWrite(PACKET__DEBUG, 9, "Packet", "[EQDEBUG] Received Packet:"); +#if EQDEBUG >= 9 + DumpPacket(app, true); +#endif + + EmuOpcode opcode = app->GetOpcode(); + +#if EQDEBUG >= 9 + const char* name = app->GetOpcodeName(); + if(name) + cout << name; + else + cout << "Unknown"; + cout << " Packet: OPCode: 0x" << hex << setw(2) << setfill('0') << app->GetOpcode() << dec << ", size: " << setw(5) << setfill(' ') << app->Size() << endl; + DumpPacket(app); +#endif + + switch(opcode){ + case OP_LoginByNumRequestMsg:{ + LogWrite(OPCODE__DEBUG, 0, "Opcode", "Opcode 0x%X (%i): OP_LoginByNumRequestMsg", opcode, opcode); + + PacketStruct* request; + request = configReader.getStruct("LoginByNumRequest", 1); + if (request && request->LoadPacketData(app->pBuffer,app->size)) { + // test the original location of Version for clients older than 1212 + version = request->getType_int16_ByName("version"); + + if (version >= 1212 || EQOpcodeManager.count(GetOpcodeVersion(version)) == 0) { + // must be new client data version method, re-fetch the packet + safe_delete(request); + request = configReader.getStruct("LoginByNumRequest", 1212); + + if (request && request->LoadPacketData(app->pBuffer, app->size)) { + // Xinux suggests using an INT16 here. Our first new version = 57000 + version = request->getType_int16_ByName("version"); + } + else { + LogWrite(LOGIN__ERROR, 0, "Login", "Nasty Horrible things happening. Tell a dev asap! Version: %i", version); + break; + } + } + + if (EQOpcodeManager.count(GetOpcodeVersion(version)) == 0) { + LogWrite(WORLD__ERROR, 0, "World", "Incompatible version: %i", version); + ClientPacketFunctions::SendLoginDenied( this ); + return false; + } + + int32 account_id = request->getType_int32_ByName("account_id"); + int32 access_code = request->getType_int32_ByName("access_code"); + + ZoneAuthRequest* zar = zone_auth.GetAuth(account_id, access_code); + + if(zar) + { + firstlogin = zar->isFirstLogin ( ); + LogWrite(ZONE__INFO, 0, "ZoneAuth", "Access Key: %u, Character Name: %s, Account ID: %u", zar->GetAccessKey(), zar->GetCharacterName(), zar->GetAccountID()); + if(database.loadCharacter(zar->GetCharacterName(), zar->GetAccountID(), this)){ + version = request->getType_int16_ByName("version"); + MDeletePlayer.writelock(__FUNCTION__, __LINE__); + Client* client = zone_list.GetClientByCharName(player->GetName()); + if(client){ + if(client->getConnection()) + client->getConnection()->SendDisconnect(); + if(client->GetCurrentZone() && !client->IsZoning()){ + //swap players, allowing the client to resume his LD'd player (ONLY if same version of the client) + if(client->GetVersion() == version){ + Player* current_player = GetPlayer(); + SetPlayer(client->GetPlayer()); + client->SetPlayer(current_player); + client->GetPlayer()->SetPendingDeletion(true); + + GetPlayer()->SetPendingDeletion(false); + GetPlayer()->ResetSavedSpawns(); + GetPlayer()->SetReturningFromLD(true); + GetPlayer()->GetZone()->RemoveDelayedSpawnRemove(GetPlayer()); + } + client->GetCurrentZone()->RemoveClientImmediately(client); + } + } + MDeletePlayer.releasewritelock(__FUNCTION__, __LINE__); + if(!GetCurrentZone()){ + LogWrite(ZONE__ERROR, 0, "Zone", "Error loading zone for character: %s", player->GetName()); + ClientPacketFunctions::SendLoginDenied( this ); + } + else if(EQOpcodeManager.count(GetOpcodeVersion(version)) > 0 && getConnection()){ + getConnection()->SetClientVersion(version); + connected_to_zone = true; + client_list.Remove(this); //remove from master client list + new_client_login = true; + GetCurrentZone()->AddClient(this); //add to zones client list + world.RejoinGroup(this); + zone_list.AddClientToMap(player->GetName(), this); + } + else{ + LogWrite(WORLD__ERROR, 0, "World", "Incompatible version: %i", version); + ClientPacketFunctions::SendLoginDenied( this ); + + return false; + } + } + else{ + LogWrite(WORLD__ERROR, 0, "World", "Could not load character '%s' with account id of: %u", zar->GetCharacterName(), zar->GetAccountID()); + ClientPacketFunctions::SendLoginDenied( this ); + } + zone_auth.RemoveAuth(zar); + } + else + { + LogWrite(WORLD__ERROR, 0, "World", "Invalid ZoneAuthRequest, disconnecting client."); + Disconnect(); + } + } + safe_delete(request); + break; + } + case OP_SysClient: { + LogWrite(OPCODE__DEBUG, 1, "Opcode", "Opcode 0x%X (%i): OP_SysClient", opcode, opcode); + LogWrite(CCLIENT__DEBUG, 0, "Client", "Client '%s' (%u) is ready for spawn updates.", GetPlayer()->GetName(), GetPlayer()->GetCharacterID()); + ready_for_updates = true; + break; + } + case OP_MapRequest:{ + LogWrite(OPCODE__DEBUG, 1, "Opcode", "Opcode 0x%X (%i): OP_MapRequest", opcode, opcode); + PacketStruct* packet = configReader.getStruct("WS_MapRequest", GetVersion()); + if(packet && app->size > 2 && GetCurrentZone()){ + packet->LoadPacketData(app->pBuffer, app->size); + PacketStruct* fog_packet = configReader.getStruct("WS_FogInit", GetVersion()); + if(fog_packet){ + LogWrite(PACKET__DEBUG, 0, "Packet", "In OP_MapRequest: Fog Packet"); + database.LoadFogInit(packet->getType_EQ2_16BitString_ByName("zone").data, fog_packet); + fog_packet->setDataByName("unknown1", 1); + fog_packet->setDataByName("unknown3", 1); + + LogWrite(CCLIENT__PACKET, 0, "Client", "Dump/Print Packet in func: %s, line: %i", __FUNCTION__, __LINE__); + //fog_packet->PrintPacket(); + QueuePacket(fog_packet->serialize()); + safe_delete(fog_packet); + } + safe_delete(packet); + } + break; + } + case OP_RequestCampMsg: { + LogWrite(OPCODE__DEBUG, 1, "Opcode", "Opcode 0x%X (%i): OP_RequestCampMsg", opcode, opcode); + + PacketStruct* request = configReader.getStruct("WS_RequestCamp", GetVersion()); + if (request && request->LoadPacketData(app->pBuffer, app->size)) { + LogWrite(CCLIENT__DEBUG, 0, "CClient", "Client '%s' (%u) is camping...", GetPlayer()->GetName(), GetPlayer()->GetCharacterID()); + LogWrite(CCLIENT__DEBUG, 0, "CClient", "WS_RequestCamp - quit: %i, camp_desktop: %i, camp_char_select: %i, (to) char_name: %s", + request->getType_int8_ByName("quit"), + request->getType_int8_ByName("camp_desktop"), + request->getType_int16_ByName("camp_char_select"), + (request->getType_EQ2_16BitString_ByName("char_name").data.length() > 0) ? request->getType_EQ2_16BitString_ByName("char_name").data.c_str() : ""); + + //DumpPacket(app->pBuffer, app->size); + //request->PrintPacket(); + + if (!camp_timer) { + int16 camp_time = 20; // default if rule cannot be found + if (GetAdminStatus() >= 100) + camp_time = rule_manager.GetGlobalRule(R_World, GMCampTimer)->GetInt16(); + else + camp_time = rule_manager.GetGlobalRule(R_World, PlayerCampTimer)->GetInt16(); + + PacketStruct* response = configReader.getStruct("WS_Camp", GetVersion()); + if (response) { + bool disconnect = false; + if (request->getType_int8_ByName("camp_desktop") == 1 && request->getType_int8_ByName("quit") == 1) { + // Command: /camp desktop + // Command: /quit + response->setDataByName("camp_desktop", 1); + disconnect = true; + } + else { + // Command: /camp + response->setDataByName("camp_desktop", request->getType_int8_ByName("camp_desktop")); + response->setDataByName("camp_char_select", request->getType_int16_ByName("camp_char_select")); + response->setDataByName("seconds", camp_time); + } + + camp_timer = new Timer(camp_time * 1000); + camp_timer->Enable(); + + if (request->getType_EQ2_16BitString_ByName("char_name").data.length() > 0) { + // /camp {char_name} + response->setDataByName("char_name", request->getType_EQ2_16BitString_ByName("char_name").data.c_str()); + } + else if (request->getType_int8_ByName("camp_desktop") == 0 && request->getType_int16_ByName("camp_char_select") == 0) { + // /camp (go back to char selection screen) + response->setDataByName("char_name", " "); + response->setDataByName("camp_char_select", 1); + } + + LogWrite(CCLIENT__DEBUG, 0, "CClient", "WS_Camp - seconds: %i, camp_desktop: %i, camp_char_select: %i, (to) char_name: %s", + response->getType_int8_ByName("seconds"), + response->getType_int8_ByName("camp_desktop"), + response->getType_int8_ByName("camp_char_select"), + (response->getType_EQ2_16BitString_ByName("char_name").data.length() > 0) ? response->getType_EQ2_16BitString_ByName("char_name").data.c_str() : ""); + + // JA: trying to recognize /camp vs LD (see ZoneServer::ClientProcess()) + if ((player->GetActivityStatus() & ACTIVITY_STATUS_CAMPING) == 0) + player->SetActivityStatus(player->GetActivityStatus() + ACTIVITY_STATUS_CAMPING); + //response->PrintPacket(); + QueuePacket(response->serialize()); + safe_delete(response); + if (disconnect) + Disconnect(); + } + } + } + safe_delete(request); + break; + } + case OP_StoodMsg:{ + LogWrite(OPCODE__DEBUG, 1, "Opcode", "Opcode 0x%X (%i): OP_StoodMsg", opcode, opcode); + if(camp_timer) + { + // JA: clear camping flag + if( (player->GetActivityStatus() & ACTIVITY_STATUS_CAMPING) > 0 ) + player->SetActivityStatus(player->GetActivityStatus() - ACTIVITY_STATUS_CAMPING); + safe_delete(camp_timer); + EQ2Packet* outapp = new EQ2Packet(OP_CampAbortedMsg, 0, 0); + QueuePacket(outapp); + } + player->SetTempVisualState(0); + break; + } + case OP_StandMsg:{ + LogWrite(OPCODE__DEBUG, 1, "Opcode", "Opcode 0x%X (%i): OP_StandMsg", opcode, opcode); + if(camp_timer) + { + // JA: clear camping flag + if( (player->GetActivityStatus() & ACTIVITY_STATUS_CAMPING) > 0 ) + player->SetActivityStatus(player->GetActivityStatus() - ACTIVITY_STATUS_CAMPING); + safe_delete(camp_timer); + EQ2Packet* outapp = new EQ2Packet(OP_CampAbortedMsg, 0, 0); + QueuePacket(outapp); + } + player->SetTempVisualState(539); + break; + } + case OP_SitMsg: { + LogWrite(OPCODE__DEBUG, 1, "Opcode", "Opcode 0x%X (%i): OP_SitMsg", opcode, opcode); + player->SetTempVisualState(538); + break; + } + case OP_SatMsg: { + LogWrite(OPCODE__DEBUG, 1, "Opcode", "Opcode 0x%X (%i): OP_SatMsg", opcode, opcode); + player->SetTempVisualState(540); + break; + } + case OP_QuestJournalOpenMsg: + case OP_QuestJournalInspectMsg:{ + LogWrite(OPCODE__DEBUG, 1, "Opcode", "Opcode 0x%X (%i): OP_QuestJournalOpenMsg, OP_QuestJournalInspectMsg", opcode, opcode); + if(app->size < sizeof(int32)) + break; + int32 quest_id = 0; + memcpy(&quest_id, app->pBuffer, sizeof(int32)); + Quest* quest = GetActiveQuest(quest_id); + if(quest) + QueuePacket(quest->QuestJournalReply(GetVersion(), GetNameCRC(), player)); + else{ + quest = player->GetCompletedQuest(quest_id); + if(quest) + QueuePacket(quest->QuestJournalReply(GetVersion(), GetNameCRC(), player, 0, 1, true)); + } + break; + } + case OP_QuestJournalSetVisibleMsg:{ + LogWrite(OPCODE__DEBUG, 1, "Opcode", "Opcode 0x%X (%i): OP_QuestJournalSetVisibleMsg", opcode, opcode); + PacketStruct* packet = configReader.getStruct("WS_QuestJournalVisible", GetVersion()); + if (packet && packet->LoadPacketData(app->pBuffer, app->size)) { + int32 quest_id = packet->getType_int32_ByName("quest_id"); + bool hidden = packet->getType_int8_ByName("visible") == 1 ? false : true; + map* player_quests = player->GetPlayerQuests(); + if (player_quests) { + if (player_quests->count(quest_id) > 0) + player_quests->at(quest_id)->SetHidden(hidden); + else + LogWrite(CCLIENT__ERROR, 0, "Client", "OP_QuestJournalSetVisibleMsg error: Player does not have quest with id of %u", quest_id); + } + else + LogWrite(CCLIENT__ERROR, 0, "Client", "OP_QuestJournalSetVisibleMsg error: Unable to get player(%s) quests", player->GetName()); + + safe_delete(packet); + } + break; + } + case OP_MacroUpdateMsg:{ + LogWrite(OPCODE__DEBUG, 1, "Opcode", "Opcode 0x%X (%i): OP_MacroUpdateMsg", opcode, opcode); + PacketStruct* macro_update=configReader.getStruct("WS_MacroUpdate",GetVersion()); + if(macro_update && macro_update->LoadPacketData(app->pBuffer, app->size)){ + vector* update = new vector; + int8 number = macro_update->getType_int8_ByName("number"); + int16 icon = macro_update->getType_int16_ByName("icon"); + string name = macro_update->getType_EQ2_8BitString_ByName("name").data; + int8 count = macro_update->getType_int8_ByName("macro_count"); + for(int8 i=0;ipush_back(macro_update->getType_EQ2_16BitString_ByName(tmp_command).data); + } + if(name.length() == 0) + database.UpdateCharacterMacro(GetCharacterID(), number, 0, icon, update); + else + database.UpdateCharacterMacro(GetCharacterID(), number, name.c_str(), icon, update); + safe_delete(update); + safe_delete(macro_update); + } + break; + } + case OP_DialogSelectMsg:{ + LogWrite(OPCODE__DEBUG, 1, "Opcode", "Opcode 0x%X (%i): OP_DialogSelectMsg", opcode, opcode); + PacketStruct* packet = configReader.getStruct("WS_DialogSelect", GetVersion()); + if(packet){ + packet->LoadPacketData(app->pBuffer, app->size); + int32 conversation_id = packet->getType_int32_ByName("conversation_id"); + int32 response_index = packet->getType_int32_ByName("response"); + if(GetCurrentZone()){ + Spawn* spawn = conversation_spawns[conversation_id]; + Item* item = conversation_items[conversation_id]; + if (conversation_map.count(conversation_id) > 0 && conversation_map[conversation_id].count(response_index) > 0) { + if (spawn) + GetCurrentZone()->CallSpawnScript(spawn, SPAWN_SCRIPT_CONVERSATION, player, conversation_map[conversation_id][response_index].c_str()); + else if (item && lua_interface && item->GetItemScript()) + lua_interface->RunItemScript(item->GetItemScript(), conversation_map[conversation_id][response_index].c_str(), item, player); + } + else + CloseDialog(conversation_id); + } + safe_delete(packet); + } + break; + } + case OP_PositionMoveableObject:{ + LogWrite(OPCODE__DEBUG, 1, "Opcode", "Opcode 0x%X (%i): OP_PositionMoveableObject", opcode, opcode); + PacketStruct* place_object=configReader.getStruct("WS_PlaceMoveableObject",GetVersion()); + if(place_object && place_object->LoadPacketData(app->pBuffer, app->size)){ + Spawn* spawn = GetPlayer()->GetSpawnWithPlayerID(place_object->getType_int32_ByName("spawn_id")); + if(!spawn){ + SimpleMessage(CHANNEL_COLOR_YELLOW, "Unable to find spawn."); + break; + } + spawn->SetX(place_object->getType_float_ByName("x")); + spawn->SetY(place_object->getType_float_ByName("y")); + spawn->SetZ(place_object->getType_float_ByName("z")); + spawn->SetHeading(place_object->getType_float_ByName("heading") + 180); + spawn->SetSpawnOrigX(spawn->GetX()); + spawn->SetSpawnOrigY(spawn->GetY()); + spawn->SetSpawnOrigZ(spawn->GetZ()); + spawn->SetSpawnOrigHeading(spawn->GetHeading()); + + if(spawn->GetSpawnLocationID() > 0 && database.UpdateSpawnLocationSpawns(spawn)) + SimpleMessage(CHANNEL_COLOR_YELLOW, "Successfully saved spawn information."); + else if(spawn->GetSpawnLocationID() > 0) + SimpleMessage(CHANNEL_COLOR_YELLOW, "Error saving spawn information, see console window for details."); + safe_delete(place_object); + } + break; + } + case OP_CampAbortedMsg:{ + LogWrite(OPCODE__DEBUG, 1, "Opcode", "Opcode 0x%X (%i): OP_CampAbortedMsg", opcode, opcode); + if(camp_timer) + { + // JA: clear camping flag + if( (player->GetActivityStatus() & ACTIVITY_STATUS_CAMPING) > 0 ) + player->SetActivityStatus(player->GetActivityStatus() - ACTIVITY_STATUS_CAMPING); + safe_delete(camp_timer); + EQ2Packet* outapp = new EQ2Packet(OP_CampAbortedMsg, 0, 0); + QueuePacket(outapp); + } + break; + } + case OP_DoneLoadingZoneResourcesMsg:{ + LogWrite(OPCODE__DEBUG, 1, "Opcode", "Opcode 0x%X (%i): OP_DoneLoadingZoneResourcesMsg", opcode, opcode); + SendZoneSpawns(); + break; + } + case OP_DefaultGroupOptionsRequestMsg:{ + LogWrite(OPCODE__DEBUG, 1, "Opcode", "Opcode 0x%X (%i): OP_DefaultGroupOptionsRequestMsg", opcode, opcode); + SendDefaultGroupOptions(); + break; + } + case OP_DoneLoadingEntityResourcesMsg:{ + LogWrite(OPCODE__DEBUG, 1, "Opcode", "Opcode 0x%X (%i): OP_DoneLoadingEntityResourcesMsg", opcode, opcode); + if(!IsReadyForSpawns()) + SetReadyForSpawns(true); + SendCharInfo(); + pos_update.Start(); + quest_pos_timer.Start(); + break; + } + case OP_LootItemsRequestMsg:{ + LogWrite(OPCODE__DEBUG, 1, "Opcode", "Opcode 0x%X (%i): OP_LootItemsRequestMsg", opcode, opcode); + HandleLoot(app); + break; + } + case OP_KnowledgeWindowSlotMappingMsg:{ + LogWrite(OPCODE__DEBUG, 1, "Opcode", "Opcode 0x%X (%i): OP_KnowledgeWindowSlotMappingMsg", opcode, opcode); + PacketStruct* packet = configReader.getStruct("WS_SpellSlotMapping", GetVersion()); + if(packet){ + if(packet->LoadPacketData(app->pBuffer, app->size)){ + int num_updates = packet->getType_int16_ByName("spell_count"); + int32 spell_id = 0; + int16 slot_id = 0; + char tmp_spell_id[15]; + char tmp_slot[15]; + for(int i=0;igetType_int32_ByName(tmp_spell_id); + if(spell_id > 0){ + slot_id = packet->getType_int16_ByName(tmp_slot); + SpellBookEntry* spell = player->GetSpellBookSpell(spell_id); + if(spell && spell->slot != slot_id){ + spell->slot = slot_id; + spell->save_needed = true; + } + } + } + } + safe_delete(packet); + } + //SendKnowledgeWindowSlot(); + break; + } + case OP_ReadyToZoneMsg:{ + LogWrite(OPCODE__DEBUG, 1, "Opcode", "Opcode 0x%X (%i): OP_ReadyToZoneMsg", opcode, opcode); + if(client_zoning) + LogWrite(WORLD__INFO, 0, "World", "OP_ReadyToZone: Player %s zoning to %s", player->GetName(), GetCurrentZone()->GetZoneName()); + else + LogWrite(WORLD__ERROR, 0, "World", "OP_ReadyToZone: Player %s attempting to zone without server authorization.", player->GetName()); + Disconnect(); + break; + } + case OP_ClientFellMsg:{ + LogWrite(OPCODE__DEBUG, 1, "Opcode", "Opcode 0x%X (%i): OP_ClientFellMsg (ouch!)", opcode, opcode); + PacketStruct* request = configReader.getStruct("WS_ClientFell", GetVersion()); + if(request && request->LoadPacketData(app->pBuffer, app->size)){ + float height = request->getType_float_ByName("height"); + /*int32 spawn_id = request->getType_int32_ByName("spawn_id"); + if(GetPlayer()->GetSpawnWithPlayerID(spawn_id) != GetPlayer()){ + cout << "Error: " << GetPlayer()->GetName() << " called ClientFell with an invalid ID of: " << spawn_id << endl; + break; + }*/ + float safe_height = 13.0f; + Skill* skill = GetPlayer()->GetSkillByName("Safe Fall", true); + if(skill) + safe_height += (skill->current_val + 1)/5; + + if (height > safe_height) { + int16 damage = (int16)ceil((height-safe_height)*125); + if(height >= 80) + damage = 30000; + //cout << "Detected fall height:" << height << " damage:" << damage << endl; + if (damage > 0){ + GetPlayer()->TakeDamage(damage); + if (GetPlayer()->GetPlayerStatisticValue(STAT_PLAYER_HIGHEST_FALLING_HIT) < damage) + GetPlayer()->UpdatePlayerStatistic(STAT_PLAYER_HIGHEST_FALLING_HIT, damage, true); + if(!GetPlayer()->GetInvulnerable()) + GetPlayer()->SetCharSheetChanged(true); + GetCurrentZone()->SendDamagePacket(0, GetPlayer(), DAMAGE_PACKET_TYPE_SIMPLE_DAMAGE, GetPlayer()->GetInvulnerable() ? DAMAGE_PACKET_RESULT_INVULNERABLE : DAMAGE_PACKET_RESULT_SUCCESSFUL, DAMAGE_PACKET_DAMAGE_TYPE_FALLING, damage, 0); + if(GetPlayer()->GetHP() == 0) { + GetCurrentZone()->KillSpawn(GetPlayer(), 0); + } + } + } + safe_delete(request); + } + break; + } + case OP_MapFogDataUpdateMsg:{ + + LogWrite(OPCODE__DEBUG, 1, "Opcode", "Opcode 0x%X (%i): OP_MapFogDataUpdateMsg", opcode, opcode); + LogWrite(MISC__TODO, 3, "TODO", "Handle (OP_MapFogDataUpdateMsg), ignoring it for now\n\t(%s, function: %s, line #: %i)", __FILE__, __FUNCTION__, __LINE__); + break; + } + case OP_SelectZoneTeleporterDestinatio:{ + LogWrite(OPCODE__DEBUG, 1, "Opcode", "Opcode 0x%X (%i): OP_SelectZoneTeleporterDestinatio", opcode, opcode); + ProcessTeleportLocation(app); + break; + } + case OP_SendLatestRequestMsg:{ + LogWrite(OPCODE__DEBUG, 1, "Opcode", "Opcode 0x%X (%i): OP_SendLatestRequestMsg", opcode, opcode); + uchar blah25[] = {0x01}; + EQ2Packet* app25 = new EQ2Packet(OP_ClearDataMsg, blah25, sizeof(blah25)); + QueuePacket(app25); + break; + } + case OP_ShowCreateFromRecipeUIMsg:{ + LogWrite(OPCODE__DEBUG, 1, "Opcode", "Opcode 0x%X (%i): OP_ShowCreateFromRecipeUIMsg", opcode, opcode); + break; + /*uchar blah[] ={0x09,0x0e,0x00,0x51,0x75,0x65,0x65,0x6e,0x27,0x73,0x20,0x43,0x6f,0x6c,0x6f,0x6e + ,0x79,0x00,0x00,0x00,0x00,0x40,0x40,0xff,0xff,0xff}; + EQ2Packet* app = new EQ2Packet(OP_EncounterBrokenMsg, blah, sizeof(blah)); + QueuePacket(app); + + uchar blah2[] = {0x00,0x00,0xff,0xff,0xff,0xff}; + app = new EQ2Packet(OP_CreateCharFromCBBRequestMsg, blah2, sizeof(blah2)); + QueuePacket(app); + + uchar blah3[] ={0x09,0x17,0x00,0x5c,0x23,0x46,0x46,0x45,0x34,0x30,0x30,0x20,0x51,0x75,0x65,0x65 + ,0x6e,0x27,0x73,0x20,0x43,0x6f,0x6c,0x6f,0x6e,0x79,0x00,0x00,0x00,0x00,0xa0,0x40 + ,0xff,0xff,0xff}; + app = new EQ2Packet(OP_CreateCharFromCBBRequestMsg, blah3, sizeof(blah3)); + QueuePacket(app); + + uchar blah4[] ={0x0b,0x00,0x21,0x00,0x00,0x00,0x1d,0x81,0x42,0x17,0x81,0x42,0x17,0x81,0x42,0x17 + ,0x81,0x42,0x17,0x81,0x42,0x17,0x81,0x42,0x17,0x81,0x42,0x17,0x81,0x42,0x17,0x81 + ,0x42,0x17,0x81,0x42,0x17,0x81,0x42}; + app = new EQ2Packet(OP_UpdateSpellBookMsg, blah4, sizeof(blah4)); + QueuePacket(app); + uchar blah5[] ={0x00,0x00}; + app = new EQ2Packet(OP_RecipeDetailsMsg, blah5, sizeof(blah5)); + QueuePacket(app); + break;*/ + //player->GetPlayerInfo()->GetInfo()->cur_power = 100; + //EQ2Packet* app = player->GetPlayerInfo()->serialize(1); + //QueuePacket(app); + } + case OP_BeginItemCreationMsg: { + LogWrite(OPCODE__DEBUG, 1, "Opcode", "Opcode 0x%X (%i): OP_BeginItemCreationMsg", opcode, opcode); + //DumpPacket(app->pBuffer, app->size); + PacketStruct* packet = configReader.getStruct("WS_BeginItemCreation", GetVersion()); + if (packet) { + packet->LoadPacketData(app->pBuffer, app->size); + int32 item = 0; + vector items; + char tmp_item_id[20]; + item = packet->getType_int32_ByName("primary_component_id"); + if (item > 0) + items.push_back(item); + item = 0; + int8 build_components = packet->getType_int8_ByName("num_build_components"); + for (int8 i = 0; i < build_components; i++) { + memset(tmp_item_id, 0, 20); + sprintf(tmp_item_id, "component_id_%i", i); + item = packet->getType_int32_ByName(tmp_item_id); + if (item > 0) + items.push_back(item); + + item = 0; + } + + item = packet->getType_int32_ByName("fuel_id"); + if (item > 0) + items.push_back(item); + + GetCurrentZone()->GetTradeskillMgr()->BeginCrafting(this, items); + + safe_delete(packet); + } + break; + } + case OP_StopItemCreationMsg: { + LogWrite(OPCODE__DEBUG, 1, "Opcode", "Opcode 0x%X (%i): OP_StopItemCreationMsg", opcode, opcode); + //DumpPacket(app->pBuffer, app->size); + GetCurrentZone()->GetTradeskillMgr()->StopCrafting(this); + break; + } + //case OP_SignalMsg:{ + // LogWrite(OPCODE__DEBUG, 1, "Opcode", "Opcode 0x%X (%i): OP_SignalMsg", opcode, opcode); + // //if(app->size == 25 && app->pBuffer[0] == 0x17 && app->pBuffer[24] == 0x79) + // // GetPlayer()->ModifySpellStatus(0, 66, true); + // if(connected && player->GetHP() == 0) + // DisplayDeadWindow(); + // break; + // } + case OP_EntityVerbsRequestMsg:{ + LogWrite(OPCODE__DEBUG, 1, "Opcode", "Opcode 0x%X (%i): OP_EntityVerbsRequestMsg", opcode, opcode); + HandleVerbRequest(app); + break; + } + case OP_EntityVerbsVerbMsg:{ + LogWrite(OPCODE__DEBUG, 1, "Opcode", "Opcode 0x%X (%i): OP_EntityVerbsVerbMsg", opcode, opcode); + PacketStruct* packet = configReader.getStruct("WS_EntityVerbsVerb", GetVersion()); + if(packet){ + packet->LoadPacketData(app->pBuffer, app->size); + int32 spawn_id = packet->getType_int32_ByName("spawn_id"); + player->SetTarget(player->GetSpawnWithPlayerID(spawn_id)); + Spawn* spawn = player->GetTarget(); + if (spawn && !spawn->IsNPC() && !spawn->IsPlayer()){ + string command = packet->getType_EQ2_16BitString_ByName("command").data; + if (EntityCommandPrecheck(spawn, command.c_str())){ + if (spawn->IsGroundSpawn()) + ((GroundSpawn*)spawn)->HandleUse(this, command); + else if (spawn->IsObject()) + ((Object*)spawn)->HandleUse(this, command); + else if (spawn->IsWidget()) + ((Widget*)spawn)->HandleUse(this, command); + else if (spawn->IsSign()) + ((Sign*)spawn)->HandleUse(this, command); + } + } + else{ + EQ2_16BitString command = packet->getType_EQ2_16BitString_ByName("command"); + if(command.size > 0){ + string command_name = command.data; + if(command_name.find(" ") < 0xFFFFFFFF) + command_name = command_name.substr(0, command_name.find(" ")); + int32 handler = commands.GetCommandHandler(command_name.c_str()); + if(handler != 0xFFFFFFFF){ + if(command.data == command_name){ + command.data = ""; + command.size = 0; + } + else{ + command.data = command.data.substr(command.data.find(" ")+1); + command.size = command.data.length(); + } + commands.Process(handler, &command, this); + } + else{ + if(spawn && spawn->IsNPC()){ + if (EntityCommandPrecheck(spawn, command.data.c_str())){ + if (!((NPC*)spawn)->HandleUse(this, command.data)){ + LogWrite(WORLD__ERROR, 0, "World", "Unhandled command in OP_EntityVerbsVerbMsg: %s", command.data.c_str()); + } + } + } + else + LogWrite(WORLD__ERROR, 0, "World", "Unknown command in OP_EntityVerbsVerbMsg: %s", command.data.c_str()); + } + } + } + safe_delete(packet); + } + break; + } + case OP_SkillInfoRequest:{ + LogWrite(OPCODE__DEBUG, 1, "Opcode", "Opcode 0x%X (%i): OP_SkillInfoRequest", opcode, opcode); + HandleSkillInfoRequest(app); + break; + } + case OP_UpdateTargetMsg:{ + LogWrite(OPCODE__DEBUG, 1, "Opcode", "Opcode 0x%X (%i): OP_UpdateTargetMsg", opcode, opcode); + int16 index = 0; + memcpy(&index, app->pBuffer, sizeof(int16)); + if (index == 0xFFFF) + GetPlayer()->SetTarget(0); + else + GetPlayer()->SetTarget(GetPlayer()->GetSpawnByIndex(index)); + if(GetPlayer()->GetTarget()) + GetCurrentZone()->CallSpawnScript(GetPlayer()->GetTarget(), SPAWN_SCRIPT_TARGETED, GetPlayer()); + //player->SetTarget((int16*)app->pBuffer); + break; + } + case OP_ExamineInfoRequestMsg:{ + LogWrite(OPCODE__DEBUG, 1, "Opcode", "Opcode 0x%X (%i): OP_ExamineInfoRequestMsg", opcode, opcode); + HandleExamineInfoRequest(app); + break; + } + case OP_QuickbarUpdateMsg: + //case OP_QuickbarAddMsg: + { + LogWrite(OPCODE__DEBUG, 1, "Opcode", "Opcode 0x%X (%i): OP_QuickbarUpdateMsg, OP_QuickbarAddMsg", opcode, opcode); + HandleQuickbarUpdateRequest(app); + break; + } + case OP_PredictionUpdateMsg:{ + LogWrite(OPCODE__DEBUG, 1, "Opcode", "Opcode 0x%X (%i): OP_PredictionUpdateMsg", opcode, opcode); + EQ2Packet* app = new EQ2Packet(OP_PredictionUpdateMsg, 0, 0); + QueuePacket(app); + break; + } + case OP_RemoteCmdMsg:{ + LogWrite(OPCODE__DEBUG, 1, "Opcode", "Opcode 0x%X (%i): OP_RemoteCmdMsg", opcode, opcode); + if(app->size > 0){ + EQ2_CommandString remote(app->pBuffer, app->size); + + LogWrite(PACKET__DEBUG, 1, "Packet", "RemoteCmdMsg Packet dump:"); +#if EQDEBUG >= 9 + DumpPacket(app); +#endif + commands.Process(remote.handler, &remote.command, this); + } + else //bad client, disconnect + Disconnect(); + break; + } + case OP_CancelSpellCast:{ + LogWrite(OPCODE__DEBUG, 1, "Opcode", "Opcode 0x%X (%i): OP_CancelSpellCast", opcode, opcode); + current_zone->Interrupted(player, 0, 0, true); + SimpleMessage(CHANNEL_COLOR_SPELL_INTERRUPT, "You stop casting."); + break; + } + case OP_UpdatePositionMsg:{ + LogWrite(OPCODE__DEBUG, 7, "Opcode", "Opcode 0x%X (%i): OP_UpdatePositionMsg", opcode, opcode); + int8 offset = 13; + if(app->pBuffer[0]==0xFF) + offset +=2; + if (app->size>offset) { + if(player->IsCasting()){ + float distance = 0; + float x = player->GetX(); + float y = player->GetY(); + float z = player->GetZ(); + player->PrepareIncomingMovementPacket(app->size - offset, app->pBuffer + offset, version); + distance = player->GetDistance(x, y, z, false); + if (distance > .5) + current_zone->Interrupted(player, 0, SPELL_ERROR_INTERRUPTED, false, true); + } + else + player->PrepareIncomingMovementPacket(app->size - offset, app->pBuffer + offset, version); + player_pos_changed = true; + LogWrite(CCLIENT__PACKET, 0, "Client", "Dump/Print Packet in func: %s, line: %i", __FUNCTION__, __LINE__); + //DumpPacket(app); + } + break; + } + case OP_MailSendMessageMsg: { + LogWrite(OPCODE__DEBUG, 1, "Opcode", "Opcode 0x%X (%i): OP_MailSendMessageMsg", opcode, opcode); + HandleSentMail(app); + break; + } + case OP_StopTrackingMsg: { + LogWrite(OPCODE__DEBUG, 1, "Opcode", "Opcode 0x%X (%i): OP_StopTrackingMsg", opcode, opcode); + player->GetZone()->RemovePlayerTracking(player, TRACKING_STOP); + break; + } + case OP_BeginTrackingMsg: { + LogWrite(OPCODE__DEBUG, 1, "Opcode", "Opcode 0x%X (%i): OP_BeginTrackingMsg", opcode, opcode); + PacketStruct* packet = configReader.getStruct("WS_BeginTracking", GetVersion()); + if (packet) { + packet->LoadPacketData(app->pBuffer, app->size); + int32 spawn_id = packet->getType_int32_ByName("spawn_id"); + Spawn* spawn = player->GetSpawnWithPlayerID(spawn_id); + if (spawn) { + AddWaypoint(spawn->GetName(), WAYPOINT_CATEGORY_TRACKING, spawn_id); + BeginWaypoint(spawn->GetName(), spawn->GetX(), spawn->GetY(), spawn->GetZ()); + player->GetZone()->RemovePlayerTracking(player, TRACKING_CLOSE_WINDOW); + } + safe_delete(packet); + } + break; + } + case OP_BioUpdateMsg: { + LogWrite(OPCODE__DEBUG, 1, "Opcode", "Opcode 0x%X (%i): OP_BioUpdateMsg", opcode, opcode); + PacketStruct* packet = configReader.getStruct("WS_BioUpdate", GetVersion()); + if (packet) { + packet->LoadPacketData(app->pBuffer, app->size); + player->SetBiography(packet->getType_EQ2_16BitString_ByName("biography").data); + safe_delete(packet); + } + break; + } + case OP_RewardPackMsg: { + LogWrite(OPCODE__DEBUG, 1, "Opcode", "Opcode 0x%X (%i): OP_RewardPackMsg", opcode, opcode); + + /* This logging is still here because I remember another system using this packet and just want to make sure we can figure out that it's being sent + when we come across it (scatman) */ + const char* name = app->GetOpcodeName(); + if(name) + LogWrite(WORLD__DEBUG, 0, "World", "%s Received OP_RewardPackMsg %04i", name, app->GetRawOpcode()); + else + LogWrite(WORLD__DEBUG, 0, "World", "Received OP_RewardPackMsg %04i", app->GetRawOpcode()); + //DumpPacket(app); + PacketStruct* packet = configReader.getStruct("WS_RewardPackMsg", GetVersion()); + if (packet) { + packet->LoadPacketData(app->pBuffer, app->size); + string recruiter_name = packet->getType_EQ2_16BitString_ByName("recruiter_name").data; + + /* Player has contacted a guild recruiter */ + if (recruiter_name.length() > 0) { + Guild* guild = guild_list.GetGuild(packet->getType_int32_ByName("guild_id")); + Client* recruiter = zone_list.GetClientByCharName(recruiter_name); + if (recruiter && guild) { + Message(CHANNEL_COLOR_GUILD_EVENT, "Contact request sent to %s of %s.", recruiter->GetPlayer()->GetName(), guild->GetName()); + recruiter->Message(CHANNEL_COLOR_GUILD_EVENT, "%s [%u %s], [0 Unskilled] (%s) is requesting to speak to YOU about joining the guild.", player->GetName(), player->GetLevel(), classes.GetClassNameCase(player->GetAdventureClass()).c_str(), races.GetRaceNameCase(player->GetRace())); + recruiter->PlaySound("ui_guild_page"); + } + } + /* New picture taken for guild recruiting */ + else { + //DumpPacket(app->pBuffer, app->size); + int32 guild_id = 0; + int16 picture_data_size = 0; + unsigned char* recruiter_picture_data = 0; + memcpy(&guild_id, app->pBuffer + 4, sizeof(int32)); + memcpy(&picture_data_size, app->pBuffer + 15, sizeof(int16)); + Guild* guild = guild_list.GetGuild(guild_id); + if (guild) { + GuildMember* gm = guild->GetGuildMember(player); + if (gm) { + safe_delete_array(gm->recruiter_picture_data); + recruiter_picture_data = new unsigned char[picture_data_size]; + for (int16 i = 0; i < picture_data_size; i++) + memcpy(recruiter_picture_data + i, app->pBuffer + 17 + i, 2); + gm->recruiter_picture_data = recruiter_picture_data; + gm->recruiter_picture_data_size = picture_data_size; + guild->SetMemberSaveNeeded(true); + } + } + } + safe_delete(packet); + } + break; + } + case OP_PetOptions: { + LogWrite(OPCODE__DEBUG, 1, "Opcode", "Opcode 0x%X (%i): OP_PetOptions", opcode, opcode); + Spawn* target = player->GetTarget(); + PacketStruct* packet = configReader.getStruct("WS_PetOptions", GetVersion()); + if (packet && target && (target == player->GetPet() || target == player->GetCharmedPet() || target == player->GetDeityPet() || target == player->GetCosmeticPet())) { + bool change = false; + packet->LoadPacketData(app->pBuffer, app->size); + + string name = packet->getType_EQ2_16BitString_ByName("pet_name").data; + if (strlen(name.c_str()) != 0) { + target->SetName(name.c_str()); + strcpy(player->GetInfoStruct()->pet_name, name.c_str()); + GetCurrentZone()->SendUpdateTitles(target); + change = true; + } + + // Check protect self setting and update if needed + if (packet->getType_int8_ByName("protect_self") == 1) { + if ((player->GetInfoStruct()->pet_behavior & 2) == 0) { + player->GetInfoStruct()->pet_behavior += 2; + change = true; + } + } + else { + if ((player->GetInfoStruct()->pet_behavior & 2) != 0) { + player->GetInfoStruct()->pet_behavior -= 2; + change = true; + } + } + + // Check protect master setting and update if needed + if (packet->getType_int8_ByName("protect_master") == 1) { + if ((player->GetInfoStruct()->pet_behavior & 1) == 0) { + player->GetInfoStruct()->pet_behavior += 1; + change = true; + } + } + else { + if ((player->GetInfoStruct()->pet_behavior & 1) != 0) { + player->GetInfoStruct()->pet_behavior -= 1; + change = true; + } + } + + // Check stay/follow setting and update if needed + if (packet->getType_int8_ByName("stay_follow_toggle") == 1) { + if (player->GetInfoStruct()->pet_movement != 2) { + player->GetInfoStruct()->pet_movement = 2; + change = true; + } + } + else { + if (player->GetInfoStruct()->pet_movement != 1) { + player->GetInfoStruct()->pet_movement = 1; + change = true; + } + } + + // Ranged/Melee settings are not implemented yet + + if (change) + player->SetCharSheetChanged(true); + + safe_delete(packet); + } + break; + } + case OP_RecipeBook:{ + LogWrite(OPCODE__DEBUG, 1, "Opcode", "Opcode 0x%X (%i): OP_RecipeBook", opcode, opcode); + SendRecipeList(); + break; + } + case OP_BuyPlayerHouseMsg: { + LogWrite(OPCODE__DEBUG, 1, "Opcode", "Opcode 0x%X (%i): OP_BuyPlayerHouseMsg", opcode, opcode); + DumpPacket(app); + + PacketStruct* packet = configReader.getStruct("WS_BuyHouse", GetVersion()); + if (packet) { + packet->LoadPacketData(app->pBuffer, app->size); + HouseZone* hz = world.GetHouseZone(packet->getType_int64_ByName("house_id")); + if (hz) { + ZoneServer* instance_zone = zone_list.GetByInstanceID(0,hz->zone_id); + int32 upkeep_due = Timer::GetUnixTimeStamp() + 604800; // 604800 = 7 days + int64 unique_id = database.AddPlayerHouse(GetPlayer()->GetCharacterID(), hz->id, instance_zone->GetInstanceID(), upkeep_due); + world.AddPlayerHouse(GetPlayer()->GetCharacterID(), hz->id, unique_id, instance_zone->GetInstanceID(), upkeep_due, 0, 0, GetPlayer()->GetName()); + } + } + + safe_delete(packet); + break; + } + case OP_EnterHouseMsg: { + LogWrite(OPCODE__DEBUG, 1, "Opcode", "Opcode 0x%X (%i): OP_EnterHouseMsg", opcode, opcode); + DumpPacket(app); + PacketStruct* packet = configReader.getStruct("WS_EnterHouse", GetVersion()); + if (packet) { + packet->LoadPacketData(app->pBuffer, app->size); + PlayerHouse* ph = world.GetPlayerHouseByUniqueID(packet->getType_int64_ByName("house_id")); + if (ph) { + HouseZone* hz = world.GetHouseZone(ph->house_id); + if (hz) { + ZoneServer* house = zone_list.GetByInstanceID(ph->instance_id, hz->zone_id); + if (house) { + Zone(house, true); + } + } + } + } + + safe_delete(packet); + break; + } + case OP_PayHouseUpkeepMsg: { + LogWrite(OPCODE__DEBUG, 1, "Opcode", "Opcode 0x%X (%i): OP_PayHouseUpkeepMsg", opcode, opcode); + DumpPacket(app); + PacketStruct* packet = configReader.getStruct("WS_PayUpkeep", GetVersion()); + if (packet) { + packet->LoadPacketData(app->pBuffer, app->size); + + } + + safe_delete(packet); + break; + } + case OP_ExitHouseMsg: { + LogWrite(OPCODE__DEBUG, 1, "Opcode", "Opcode 0x%X (%i): OP_ExitHouseMsg", opcode, opcode); + int32 instance_id = GetCurrentZone()->GetInstanceID(); + if (instance_id > 0) { + PlayerHouse* ph = world.GetPlayerHouseByInstanceID(instance_id); + if (ph) { + HouseZone* hz = world.GetHouseZone(ph->house_id); + if (hz) { + ZoneServer* new_zone = zone_list.Get(hz->exit_zone_id); + + // determine if this is an instanced zone that already exists + ZoneServer* instance_zone = GetPlayer()->GetGroupMemberInZone(hz->exit_zone_id); + if(instance_zone || new_zone){ + GetPlayer()->SetX(hz->exit_x); + GetPlayer()->SetY(hz->exit_y); + GetPlayer()->SetZ(hz->exit_z); + GetPlayer()->SetHeading(hz->exit_heading); + if ( instance_zone ) + Zone(instance_zone->GetInstanceID(),false,true); + else + Zone(new_zone, false); + } + } + } + } + DumpPacket(app); + break; + } + case OP_QuestJournalWaypointMsg: { + //DumpPacket(app); + LogWrite(OPCODE__DEBUG, 1, "Opcode", "Opcode 0x%X (%i): OP_QuestJournalWaypointMsg", opcode, opcode); + PacketStruct* packet = configReader.getStruct("WS_QuestJournalWaypoint", GetVersion()); + if (packet) { + packet->LoadPacketData(app->pBuffer, app->size); + int32 quests = packet->getType_int32_ByName("num_quests"); + + if( quests > 100 ) // just picking a number higher than max allowed + { + LogWrite(CCLIENT__ERROR, 0, "Client", "num_quests = %u - quantity too high, aborting load.", quests); + break; + } + + LogWrite(CCLIENT__DEBUG, 0, "Client", "num_quests = %u", quests); + + for (int32 i = 0; i < quests; i++) { + int32 id = packet->getType_int32_ByName("quest_id_0", i); + if( id == 0 ) + continue; + LogWrite(CCLIENT__DEBUG, 5, "Client", "quest_id = %u", id); + bool tracked = packet->getType_int8_ByName("quest_tracked_0", i) == 1 ? true : false; + if (player->player_quests.count(id) > 0) { + player->player_quests[id]->SetTracked(tracked); + player->player_quests[id]->SetSaveNeeded(true); + } + } + + safe_delete(packet); + } + + break; + } + case OP_PaperdollImage: { + PacketStruct* packet = configReader.getStruct("WS_PaperdollImage", version); + if (packet && packet->LoadPacketData(app->pBuffer, app->size)) { + + //First check if this is a new image... delete an existing partial image if one exists + int8 packet_index = packet->getType_int8_ByName("packetIndex"); + if (packet_index == 0){ + safe_delete_array(incoming_paperdoll.image_bytes); + incoming_paperdoll.last_received_packet_index = 0; + incoming_paperdoll.current_size_bytes = 0; + } + //return if this packet is not the one we are expecting... + else if (packet_index != incoming_paperdoll.last_received_packet_index + 1) { + safe_delete(packet); + break; + } + + //Check how many packets we're supposed to be receiving for this/these images + incoming_paperdoll.image_num_packets = packet->getType_int8_ByName("totalNumPackets"); + + //Check the image type, if this is a new type in the same series of packets we have a new image + int8 img_type = packet->getType_int8_ByName("image_type"); + if (packet_index != 0 && img_type != incoming_paperdoll.image_type){ + //We have a new image. Save the old data and clear before continuing + SavePlayerImages(); + } + incoming_paperdoll.image_type = img_type; + + //Get the size of the image data in this packet + sint64 image_size = packet->getType_int32_ByName("imageSize"); + if (image_size <= 0 || image_size > 1048576) { + //If this packet is saying that the array is size <= 0 or > 1 MiB return out... it shouldn't be those sizes ever + safe_delete(packet); + break; + } + + //Create a new array + int32 new_image_size = image_size; + uchar* new_image = new uchar[incoming_paperdoll.current_size_bytes + new_image_size]; + if (incoming_paperdoll.image_bytes){ + memcpy(new_image, incoming_paperdoll.image_bytes, incoming_paperdoll.current_size_bytes); + safe_delete_array(incoming_paperdoll.image_bytes); + } + + //variable i should be the index in the packet of the first PNG file byte + vector* d_structs = packet->getStructs(); + vector::iterator itr; + int32 i = 0; + for (itr = d_structs->begin(); itr != d_structs->end(); itr++){ + DataStruct* ds = (*itr); + if (strcmp(ds->GetName(), "pngData_0") != 0) + i += ds->GetDataSizeInBytes(); + else + break; + } + + //Return if this packet is bad and we would read out of bounds + if (app->size - i < new_image_size) { + safe_delete(packet); + safe_delete_array(new_image); + break; + } + + uchar* tmp = new_image + incoming_paperdoll.current_size_bytes; + memcpy(tmp, app->pBuffer + i, new_image_size); + + incoming_paperdoll.current_size_bytes += new_image_size; + incoming_paperdoll.image_bytes = new_image; + + //Check if this is the last packet we're expecting for this image. Create a final image if so + if (incoming_paperdoll.image_num_packets == 1 || + incoming_paperdoll.last_received_packet_index + 2 == incoming_paperdoll.image_num_packets){ + SavePlayerImages(); + } + + incoming_paperdoll.last_received_packet_index = packet_index; + } + safe_delete(packet); + + break; + } + + case OP_ReadyForTakeOffMsg: + { + LogWrite(OPCODE__DEBUG, 1, "Opcode", "Opcode 0x%X (%i): OP_ReadyForTakeOffMsg", opcode, opcode); + + int32 index = GetCurrentZone()->GetFlightPathIndex(GetPendingFlightPath()); + if (GetPendingFlightPath() > 0) { + if (index != -1) { + PacketStruct* packet = configReader.getStruct("WS_ClearForTakeOff", GetVersion()); + if (packet) { + packet->setDataByName("spawn_id", GetPlayer()->GetIDWithPlayerSpawn(GetPlayer())); + packet->setDataByName("path_id", index); + packet->setDataByName("speed", GetCurrentZone()->GetFlightPathSpeed(GetPendingFlightPath())); + QueuePacket(packet->serialize()); + safe_delete(packet); + + on_auto_mount = true; + } + } + else { + LogWrite(CCLIENT__ERROR, 0, "Client", "OP_ReadyForTakeOffMsg recieved but unable to get an index for path (%u) in zone (%u)", GetPendingFlightPath(), GetCurrentZone()->GetZoneID()); + Message(CHANNEL_ERROR, "Unable to get index for path (%u) in zone (%u)", GetPendingFlightPath(), GetCurrentZone()->GetZoneID()); + EndAutoMount(); + } + + SetPendingFlightPath(0); + + } + else + LogWrite(CCLIENT__ERROR, 0, "Client", "OP_ReadyForTakeOffMsg recieved but there is no pending flight path..."); + + break; + } + + case OP_EarlyLandingRequestMsg: + { + LogWrite(OPCODE__DEBUG, 1, "Opcode", "Opcode 0x%X (%i): OP_EarlyLandingRequestMsg", opcode, opcode); + + EndAutoMount(); + + break; + } + + case OP_SubmitCharCust: + { + LogWrite(OPCODE__DEBUG, 1, "Opcode", "Opcode 0x%X (%i): OP_SubmitCharCust", opcode, opcode); + PacketStruct* packet = configReader.getStruct("WS_SubmitCharCust", version); + if (packet && packet->LoadPacketData(app->pBuffer, app->size)) { + int8 type = packet->getType_int8_ByName("type"); + if (type == 0) { + if (player->custNPC) { + player->custNPCTarget->CustomizeAppearance(packet); + current_zone->SendSpawnChanges(player->custNPCTarget); + } + else { + player->CustomizeAppearance(packet); + current_zone->SendSpawnChanges(player); + } + } + } + + if (player->custNPC) { + memcpy(&player->appearance, &player->SavedApp, sizeof(AppearanceData)); + memcpy(&player->features, &player->SavedFeatures, sizeof(CharFeatures)); + + if (player->custNPCTarget->IsBot()) + database.SaveBotAppearance((Bot*)player->custNPCTarget); + + player->custNPC = false; + player->custNPCTarget = 0; + player->changed = true; + player->info_changed = true; + current_zone->SendSpawnChanges(player, this); + } + + break; + } + + default:{ + LogWrite(OPCODE__DEBUG, 1, "Opcode", "Opcode 0x%X (%i): Unknown in %s", opcode, opcode, __FILE__); + const char* name = app->GetOpcodeName(); + if(name) + LogWrite(OPCODE__DEBUG, 1, "Opcode", "%s Received %04X (%i)", name, app->GetRawOpcode(), app->GetRawOpcode()); + else + LogWrite(OPCODE__DEBUG, 1, "Opcode", "Received %04X (%i)", app->GetRawOpcode(), app->GetRawOpcode()); + + //DumpPacket(app); + + } + } + if (!eqs || !eqs->CheckActive()) { + return false; + } + + return ret; +} + +bool Client::HandleLootItem(Entity* entity, Item* item){ + if(!item){ + SimpleMessage(CHANNEL_COLOR_YELLOW, "Unable to find item to loot!"); + return false; + } + if(player->item_list.HasFreeSlot() || player->item_list.CanStack(item)){ + if(player->item_list.AssignItemToFreeSlot(item)){ + int8 type = CHANNEL_COLOR_LOOT; + if(GetVersion() >= 973 && GetVersion() <= 1000) + type = CHANNEL_COLOR_NEW_LOOT; + else if(GetVersion() >= 973) + type = CHANNEL_COLOR_NEWEST_LOOT; + if(entity) + Message(type, "You loot \\aITEM %u 0:%s\\/a from the corpse of %s", item->details.item_id, item->name.c_str(), entity->GetName()); + else + Message(type, "You found a \\aITEM %u 0:%s\\/a", item->details.item_id, item->name.c_str()); + Guild* guild = player->GetGuild(); + if (guild && item->details.tier >= ITEM_TAG_LEGENDARY) { + char adjective[32]; + int8 type; + memset(adjective, 0, sizeof(adjective)); + if (item->details.tier >= ITEM_TAG_MYTHICAL) { + strncpy(adjective, "Mythical", sizeof(adjective) - 1); + type = GUILD_EVENT_LOOTS_MYTHICAL_ITEM; + } + else if (item->details.tier >= ITEM_TAG_FABLED) { + strncpy(adjective, "Fabled", sizeof(adjective) - 1); + type = GUILD_EVENT_LOOTS_FABELED_ITEM; + } + else { + strncpy(adjective, "Legendary", sizeof(adjective) - 1); + type = GUILD_EVENT_LOOTS_LEGENDARY_ITEM; + } + guild->AddNewGuildEvent(type, "%s has looted the %s \\aITEM %u 0:%s\\/a", Timer::GetUnixTimeStamp(), true, player->GetName(), adjective, item->details.item_id, item->name.c_str()); + guild->SendMessageToGuild(type, "%s has looted the %s \\aITEM %u 0:%s\\/a", player->GetName(), adjective, item->details.item_id, item->name.c_str()); + } + CheckPlayerQuestsItemUpdate(item); + return true; + } + else + SimpleMessage(CHANNEL_COLOR_RED, "Could not find free slot to place item."); + } + else + SimpleMessage(CHANNEL_COLOR_YELLOW, "Unable to loot item: Inventory is FULL."); + + return false; +} + +bool Client::HandleLootItem(Entity* entity, int32 item_id){ + if(!entity) { + return false; + } + + return HandleLootItem(entity, entity->LootItem(item_id)); +} + +void Client::HandleLoot(EQApplicationPacket* app){ + PacketStruct* packet = configReader.getStruct("WS_LootType", GetVersion()); + if(packet){ + packet->LoadPacketData(app->pBuffer, app->size); + int32 loot_id = packet->getType_int32_ByName("loot_id"); + bool loot_all = (packet->getType_int8_ByName("loot_all") == 1); + safe_delete(packet); + int32 item_id = 0; + Item* item = 0; + Spawn* spawn = GetCurrentZone()->GetSpawnByID(loot_id); + if(player->HasPendingLootItems(loot_id)){ + Item* master_item = 0; + if(loot_all){ + vector* items = player->GetPendingLootItems(loot_id); + if(items){ + for(int32 i=0;loot_all && isize();i++){ + master_item = items->at(i); + if(master_item){ + item = new Item(master_item); + if(item){ + loot_all = HandleLootItem(0, item); + if(loot_all) + player->RemovePendingLootItem(loot_id, item->details.item_id); + } + } + } + safe_delete(items); + } + } + else{ + packet = configReader.getStruct("WS_LootItem", GetVersion()); + if(packet){ + packet->LoadPacketData(app->pBuffer, app->size); + item_id = packet->getType_int32_ByName("item_id"); + vector* items = player->GetPendingLootItems(loot_id); + if(items){ + for(int32 i=0;isize();i++){ + master_item = items->at(i); + if(master_item && master_item->details.item_id == item_id){ + item = new Item(master_item); + if(item && HandleLootItem(0, item)) + player->RemovePendingLootItem(loot_id, item->details.item_id); + break; + } + } + safe_delete(items); + } + safe_delete(packet); + } + } + EQ2Packet* outapp = player->SendInventoryUpdate(GetVersion()); + if(outapp) + QueuePacket(outapp); + Loot(0, player->GetPendingLootItems(loot_id), (Entity*)spawn); + } + else{ + if(spawn && spawn->IsNPC() && ((NPC*)spawn)->Brain()->CheckLootAllowed(player)){ + if(loot_all){ + while(loot_all && ((item_id = ((Entity*)spawn)->GetLootItemID()) > 0)){ + loot_all = HandleLootItem((Entity*)spawn, item_id); + } + } + else{ + packet = configReader.getStruct("WS_LootItem", GetVersion()); + if(packet){ + packet->LoadPacketData(app->pBuffer, app->size); + item_id = packet->getType_int32_ByName("item_id"); + HandleLootItem((Entity*)spawn, item_id); + safe_delete(packet); + } + } + EQ2Packet* outapp = player->SendInventoryUpdate(GetVersion()); + if(outapp) + QueuePacket(outapp); + Loot((Entity*)spawn); + if(!((Entity*)spawn)->HasLoot()){ + CloseLoot(); + if(((Entity*)spawn)->IsNPC()) + GetCurrentZone()->RemoveDeadSpawn(spawn); + } + } + else{ + if(!spawn){ + LogWrite(WORLD__ERROR, 0, "World", "Unknown id of %u when looting!", loot_id); + SimpleMessage(CHANNEL_COLOR_YELLOW, "Unable to find spawn to loot!"); + } + else + SimpleMessage(CHANNEL_COLOR_YELLOW, "You are not unable to loot that at this time."); + } + } + } + +} + +void Client::HandleSkillInfoRequest(EQApplicationPacket* app){ + PacketStruct* request = 0; + // cout << "Request: \n"; + // DumpPacket(app); + switch(app->pBuffer[0]){ + case 0:{ //items + request = configReader.getStruct("WS_SkillInfoItemRequest", GetVersion()); + if(request){ + request->LoadPacketData(app->pBuffer, app->size); + Item* item = GetPlayer()->GetEquipmentList()->GetItemFromUniqueID(request->getType_int32_ByName("unique_id")); + if(!item) + item = GetPlayer()->item_list.GetItemFromUniqueID(request->getType_int32_ByName("unique_id"), true); + if(item){ + PacketStruct* response = configReader.getStruct("WS_SkillInfoItemResponse", GetVersion()); + if(response){ + response->setDataByName("request_type", request->getType_int32_ByName("request_type")); + response->setDataByName("unique_id", request->getType_int32_ByName("unique_id")); + response->setSmallStringByName("name", item->name.c_str()); + EQ2Packet* app2 = response->serialize(); + //DumpPacket(app2); + QueuePacket(app2); + safe_delete(response); + } + } + } + break; + } + case 2:{//spells + request = configReader.getStruct("WS_SkillInfoSpellRequest", GetVersion()); + if(request){ + request->LoadPacketData(app->pBuffer, app->size); + int32 id = request->getType_int32_ByName("id"); + int8 tier = request->getType_int32_ByName("unique_id"); //on live this is really unique_id, but I'm going to make it tier instead :) + Spell* spell = master_spell_list.GetSpell(id, tier); + PacketStruct* response = configReader.getStruct("WS_SkillInfoResponse", GetVersion()); + if(response){ + response->setDataByName("request_type", 2); + response->setDataByName("unique_id", tier); + response->setDataByName("id", id); + if(spell) + response->setSmallStringByName("name", spell->GetName()); + else + response->setSmallStringByName("name", "Unknown Spell"); + EQ2Packet* app2 = response->serialize(); + // DumpPacket(app2); + QueuePacket(app2); + safe_delete(response); + } + } + break; + } + default:{ + LogWrite(WORLD__ERROR, 0, "World", "Unknown SkillInfoRequest type of %i", (int)app->pBuffer[0]); + } + } + safe_delete(request); + +} + +void Client::HandleExamineInfoRequest(EQApplicationPacket* app){ + PacketStruct* request = 0; + + //LogWrite(CCLIENT__DEBUG, 0, "Client", "Request2:"); + //DumpPacket(app); + + int8 type = app->pBuffer[0]; + if(type == 3){ + Spell* spell = 0; + bool trait_display; + request = configReader.getStruct("WS_ExamineInfoRequest", GetVersion()); + if(!request) { + return; + } + request->LoadPacketData(app->pBuffer, app->size); + int32 id = request->getType_int32_ByName("id"); + int32 tier = request->getType_int32_ByName("tier"); + int32 trait_tier = request->getType_int32_ByName("unknown_id"); + //printf("Type: (%i) Tier: (%u) Unknown ID: (%u) Item ID: (%u)\n",type,tier,trait_tier,id); + + if (trait_tier != 0xFFFFFFFF){ + spell = master_spell_list.GetSpell(id, trait_tier); + if (!spell) { + spell = master_spell_list.GetSpell(id, trait_tier +1); + } + trait_display = true; + } + else{ + spell = master_spell_list.GetSpell(id, tier ); + trait_display = false; + } + + if(spell && sent_spell_details.count(id) == 0){ + sent_spell_details[id] = true; + EQ2Packet* app = spell->SerializeSpell(this, false, trait_display); + //DumpPacket(app); + QueuePacket(app); + } + } + else if(type == 0){ + request = configReader.getStruct("WS_ExamineInfoItemRequest", GetVersion()); + if(!request) { + return; + } + request->LoadPacketData(app->pBuffer, app->size); + int32 id = request->getType_int32_ByName("id"); + Item* item = GetPlayer()->item_list.GetItemFromUniqueID(id, true); + if(!item) + item = GetPlayer()->GetEquipmentList()->GetItemFromUniqueID(id); + if(!item) + item = master_item_list.GetItem(id); + if(item){// && sent_item_details.count(id) == 0){ + sent_item_details[id] = true; + EQ2Packet* app = item->serialize(GetVersion(), false, GetPlayer()); + //DumpPacket(app); + QueuePacket(app); + } + else{ + LogWrite(WORLD__ERROR, 0, "World", "HandleExamineInfoRequest: Unknown Item ID = %u", id); + DumpPacket(app); + } + } + else if(type == 1){ + request = configReader.getStruct("WS_ExamineInfoItemRequest", GetVersion()); + if(!request) { + return; + } + request->LoadPacketData(app->pBuffer, app->size); + int32 id = request->getType_int32_ByName("id"); + int32 unique_id = request->getType_int32_ByName("unique_id"); + + Item* item = GetPlayer()->item_list.GetItemFromUniqueID(unique_id, true); + if (!item) + item = GetPlayer()->GetEquipmentList()->GetItemFromUniqueID(unique_id); + if (!item) + item = master_item_list.GetItem(id); + if (item){ + sent_item_details[id] = true; + EQ2Packet* app = item->serialize(GetVersion(), false, GetPlayer()); + //DumpPacket(app); + QueuePacket(app); + } + else{ + LogWrite(WORLD__ERROR, 0, "World", "HandleExamineInfoRequest: Unknown Item ID = %u", id); + DumpPacket(app); + } + } + else if(type == 2){ + request = configReader.getStruct("WS_ExamineInfoItemLinkRequest", GetVersion()); + if(!request) { + return; + } + + request->LoadPacketData(app->pBuffer, app->size); + int32 id = request->getType_int32_ByName("item_id"); + //int32 unknown_0 = request->getType_int32_ByName("unknown",0); + //int32 unknown_1 = request->getType_int32_ByName("unknown",1); + //int8 unknown2 = request->getType_int8_ByName("unknown2"); + //int32 unique_id = request->getType_int32_ByName("unique_id"); + //int16 unknown5 = request->getType_sint16_ByName("unknown5"); + //printf("Type: (%i) Unknown_0: (%u) Unknown_1: (%u) Unknown2: (%i) Unique ID: (%u) Unknown5: (%i) Item ID: (%u)\n",type,unknown_0,unknown_1,unknown2,unique_id,unknown5,id); + Item* item = master_item_list.GetItem(id); + if(item){ + //only display popup for non merchant links + EQ2Packet* app = item->serialize(GetVersion(), (request->getType_int32_ByName("unique_id") != 0xFFFFFFFF), GetPlayer(), true, 0, 0, true); + //DumpPacket(app); + QueuePacket(app); + } + else{ + LogWrite(WORLD__ERROR, 0, "World", "HandleExamineInfoRequest: Unknown Item ID = %u", id); + DumpPacket(app); + } + } + else if(type == 4){ //spell effect + request = configReader.getStruct("WS_ExamineSpellEffectRequest", GetVersion()); + if(!request) { + return; + } + request->LoadPacketData(app->pBuffer, app->size); + int32 id = request->getType_int32_ByName("id"); + //int16 unknown5 = request->getType_sint16_ByName("unknown5"); + SpellEffects* effect = player->GetSpellEffect(id); + //printf("Type: (%i) Unknown5: (%i) Item ID: (%u)\n",type,unknown5,id); + if(effect){ + int8 tier = effect->tier; + Spell* spell = master_spell_list.GetSpell(id, tier); + if(spell && sent_spell_details.count(id) == 0){ + sent_spell_details[id] = true; + EQ2Packet* app = spell->SerializeSpecialSpell(this, false, 0x00, 0x81); + //DumpPacket(app); + QueuePacket(app); + } + } + } + else if(type == 5){ // recipe info + request = configReader.getStruct("WS_ExamineInfoRequest", GetVersion()); + if(!request) + return; + request->LoadPacketData(app->pBuffer, app->size); + int32 id = request->getType_int32_ByName("unknown_id"); + Recipe *recipe = master_recipe_list.GetRecipe(id); + if(recipe){ + EQ2Packet* app = recipe->SerializeRecipe(this, recipe, false, GetItemPacketType(GetVersion()), 0x02); + //DumpPacket(app); + QueuePacket(app); + } + + } + else if(type == 6){ // AA spell info + Spell* spell = 0; + //Spell* spell2 = 0; + //AltAdvanceData* data = 0; + request = configReader.getStruct("WS_ExamineInfoRequest", GetVersion()); + if(!request) + return; + request->LoadPacketData(app->pBuffer, app->size); + int32 id = request->getType_int32_ByName("id"); + int32 tier = GetPlayer()->GetSpellTier(id); + LogWrite(WORLD__INFO, 0, "World", "Examine Info Request->Unique ID: %u Tier: %u ", id, tier); + //data = master_aa_list.GetAltAdvancement(id); + //LogWrite(WORLD__INFO, 0, "World", "SOE Spell CRC: %u", data->spell_crc); + //spell = master_spell_list.GetSpellByCRC(data->spell_crc); + spell = master_spell_list.GetSpell(id, 1); + //if (spell && sent_spell_details.count(spell->GetSpellID()) == 0) { + sent_spell_details[spell->GetSpellID()] = true; + // EQ2Packet* app = spell->SerializeAASpell(this,tier, data, false, GetItemPacketType(GetVersion()), 0x04); + EQ2Packet* app = master_spell_list.GetAASpellPacket(id, tier, this, false, 0x4F);//0x45 change version to match client + /////////////////////////////////////////GetAASpellPacket(int32 id, int8 tier, Client* client, bool display, int8 packet_type) { + //DumpPacket(app); + LogWrite(WORLD__INFO, 0, "WORLD", "Examine Info Request-> Spell ID: %u", spell->GetSpellID()); + QueuePacket(app); + //} + } + else{ + LogWrite(WORLD__ERROR, 0, "World", "Unknown examine request: %i", (int)type); + DumpPacket(app); + } + safe_delete(request); + +} + +void Client::HandleQuickbarUpdateRequest(EQApplicationPacket* app){ + PacketStruct* request = configReader.getStruct("WS_QuickBarUpdateRequest", GetVersion()); + if(request){ + request->LoadPacketData(app->pBuffer, app->size); + int32 id = request->getType_int32_ByName("id"); + int32 bar = request->getType_int32_ByName("hotbar_number"); + int32 slot = request->getType_int32_ByName("hotkey_slot"); + int32 type = request->getType_int32_ByName("type"); + int8 tier = request->getType_int32_ByName("unique_id"); + EQ2_16BitString text = request->getType_EQ2_16BitString_ByName("text"); + Spell* spell = 0; + if(type == 0xFFFFFFFF) + GetPlayer()->RemoveQuickbarItem(bar, slot); + else{ + if(type == QUICKBAR_NORMAL) + spell = master_spell_list.GetSpell(id, tier); + if(spell) + GetPlayer()->AddQuickbarItem(bar, slot, type, spell->GetSpellIcon(), spell->GetSpellIconBackdrop(), id, tier, 0, text.data.c_str()); + else + GetPlayer()->AddQuickbarItem(bar, slot, type, 0, 0, id, 0, 0, text.data.c_str()); + } + + safe_delete(request); + } + +} + +bool Client::Process(bool zone_process) { + if(!eqs) { + return false; + } + if((connected_to_zone && !zone_process) || (!connected_to_zone && zone_process)) { + return true; + } + + if(new_client_login){ + LogWrite(CCLIENT__DEBUG, 0, "Client", "SendLoginInfo to new client..."); + SendLoginInfo(); + new_client_login = false; + } + bool ret = true; + sockaddr_in to; + + memset((char *) &to, 0, sizeof(to)); + to.sin_family = AF_INET; + to.sin_port = port; + to.sin_addr.s_addr = ip; + + /************ Get all packets from packet manager out queue and process them ************/ + EQApplicationPacket *app = 0; + if(eqs && !eqs->CheckActive()){ + num_active_failures++; + + LogWrite(CCLIENT__DEBUG, 7, "Client", "%s, num_active_failures = %i", __FUNCTION__, num_active_failures); + + if(num_active_failures > 100) { + return false; + } + return true; + } + while(ret && eqs && (app = eqs->PopPacket())) { + ret = HandlePacket(app); + + LogWrite(CCLIENT__DEBUG, 5, "Client", "Func: %s, Line: %i, Opcode: '%s'", __FUNCTION__, __LINE__, app->GetOpcodeName()); + + delete app; + } + if (GetCurrentZone() && GetCurrentZone()->GetSpawnByID(GetPlayer()->GetID()) && should_load_spells) { + player->ApplyPassiveSpells(); + //database.LoadCharacterActiveSpells(player); + player->UnlockAllSpells(true); + + should_load_spells = false; + } + + if(quest_updates) { + LogWrite(CCLIENT__DEBUG, 1, "Client", "%s, ProcessQuestUpdates", __FUNCTION__, __LINE__); + ProcessQuestUpdates(); + } + if(last_update_time > 0 && last_update_time < (Timer::GetCurrentTime2() - 300)) { + LogWrite(CCLIENT__DEBUG, 1, "Client", "%s, CheckQuestQueue", __FUNCTION__, __LINE__); + CheckQuestQueue(); + } + if(pos_update.Check() && player_pos_changed){ + //GetPlayer()->CalculateLocation(); + GetCurrentZone()->SendPlayerPositionChanges(GetPlayer()); + player_pos_changed = false; + GetCurrentZone()->CheckTransporters(this); + } + if(lua_interface && lua_debug && lua_debug_timer.Check()) + lua_interface->UpdateDebugClients(this); + if(quest_pos_timer.Check()) + CheckPlayerQuestsLocationUpdate(); + if(camp_timer && camp_timer->Check() && getConnection()){ + getConnection()->SendDisconnect(false); + safe_delete(camp_timer); + disconnect_timer = new Timer(2000); + disconnect_timer->Start(); + } + if(player->GetSkills()->HasSkillUpdates()){ + vector* skills = player->GetSkills()->GetSkillUpdates(); + if(skills){ + Skill* skill = 0; + vector::iterator itr; + for(itr = skills->begin(); itr != skills->end(); itr++){ + skill = *itr; + SkillChanged(skill, skill->previous_val, skill->current_val); + } + safe_delete(skills); + } + } + if(disconnect_timer && disconnect_timer->Check()){ + safe_delete(disconnect_timer); + ret = false; + } + m_resurrect.writelock(__FUNCTION__, __LINE__); + if(current_rez.should_delete || (current_rez.expire_timer && current_rez.expire_timer->Check(false))){ + safe_delete(current_rez.expire_timer); + current_rez.expire_timer = 0; + current_rez.active = false; + current_rez.caster = 0; + current_rez.crit = false; + current_rez.crit_mod = 0; + current_rez.expire_timer = 0; + current_rez.heal_name = ""; + current_rez.hp_perc = 0; + current_rez.mp_perc = 0; + current_rez.no_calcs = false; + current_rez.range = 0; + current_rez.should_delete = false; + current_rez.spell_name = ""; + current_rez.spell_visual = 0; + current_rez.subspell = 0; + } + m_resurrect.releasewritelock(__FUNCTION__, __LINE__); + + // Quest timers + Quest* failed_step = 0; + MQuestTimers.writelock(__FUNCTION__, __LINE__); + if (quest_timers.size() > 0) { + vector::iterator itr; + map* player_quests = player->GetPlayerQuests(); + for (itr = quest_timers.begin(); itr != quest_timers.end(); itr++) { + if (player_quests->count(*itr) > 0 && player_quests->at(*itr)->GetStepTimer() != 0) { + Quest* quest = player_quests->at(*itr); + if (Timer::GetUnixTimeStamp() >= quest->GetStepTimer()) { + failed_step = quest; + break; + } + } + else { + quest_timers.erase(itr); + break; + } + } + } + MQuestTimers.releasewritelock(__FUNCTION__, __LINE__); + + if (failed_step) + failed_step->StepFailed(failed_step->GetTimerStep()); + + if (player->ControlFlagsChanged()) + player->SendControlFlagUpdates(this); + + if (!eqs || (eqs && !eqs->CheckActive())) + ret = false; + + if(!ret) + Save(); + + return ret; +} + +ClientList::ClientList() { + MClients.SetName("ClientList::MClients"); + +} + +ClientList::~ClientList() { +} + +void ClientList::ReloadQuests() { + list::iterator client_iter; + Client* client = 0; + MClients.readlock(__FUNCTION__, __LINE__); + for(client_iter=client_list.begin(); client_iter!=client_list.end(); client_iter++){ + client = *client_iter; + if(client) + client->ReloadQuests(); + } + MClients.releasereadlock(__FUNCTION__, __LINE__); + +} + +int32 ClientList::Count(){ + return client_list.size(); +} + +void ClientList::Add(Client* client) { + MClients.writelock(__FUNCTION__, __LINE__); + client_list.push_back(client); + MClients.releasewritelock(__FUNCTION__, __LINE__); + +} + +Client* ClientList::FindByAccountID(int32 account_id) { + list::iterator client_iter; + Client* client = 0; + Client* ret = 0; + MClients.readlock(__FUNCTION__, __LINE__); + for(client_iter=client_list.begin(); client_list.size() > 0 && client_iter!=client_list.end(); client_iter++){ + client = *client_iter; + if (client->GetAccountID() == account_id) { + ret = client; + break; + } + } + MClients.releasereadlock(__FUNCTION__, __LINE__); + + return ret; +} + +Client* ClientList::FindByName(char* charName) { + list::iterator client_iter; + Client* client = 0; + Client* ret = 0; + MClients.readlock(__FUNCTION__, __LINE__); + for(client_iter=client_list.begin(); client_list.size() > 0 && client_iter!=client_list.end(); client_iter++){ + client = *client_iter; + if (!client || !client->GetPlayer()) + continue; + + if (!strncmp(client->GetPlayer()->GetName(),charName,strlen(charName))) { + ret = client; + break; + } + } + MClients.releasereadlock(__FUNCTION__, __LINE__); + + return ret; +} + +Client* ClientList::Get(int32 ip, int16 port) { + list::iterator client_iter; + Client* client = 0; + Client* ret = 0; + MClients.readlock(__FUNCTION__, __LINE__); + for(client_iter=client_list.begin(); client_list.size() > 0 && client_iter!=client_list.end(); client_iter++){ + client = *client_iter; + if(client->GetIP() == ip && client->GetPort() == port){ + ret = client; + break; + } + } + MClients.releasereadlock(__FUNCTION__, __LINE__); + + return ret; +} + +void ClientList::Process() { + + list::iterator client_iter; + list::iterator erase_iter; + Client* client = 0; + MClients.readlock(__FUNCTION__, __LINE__); + erase_iter = client_list.end(); + for(client_iter=client_list.begin(); client_iter!=client_list.end();client_iter++){ + client = *client_iter; + // have a sanity check because the client list can sometimes obtain null client pointers + if (!client || (!client->Process() || client->remove_from_list)) { + erase_iter = client_iter; + break; + } + } + MClients.releasereadlock(__FUNCTION__, __LINE__); + if(erase_iter != client_list.end()){ + client = *erase_iter; + MClients.writelock(__FUNCTION__, __LINE__); + client_list.erase(erase_iter); + MClients.releasewritelock(__FUNCTION__, __LINE__); + if(client && !client->remove_from_list){ + struct in_addr in; + in.s_addr = client->GetIP(); + LogWrite(WORLD__INFO, 0, "World", "Removing client from ip: %s port: %i", inet_ntoa(in), client->GetPort()); + safe_delete(client); + } + } + +} + +void ClientList::RemoveConnection(EQStream* eqs){ + Client *client; + + if(eqs){ + list::iterator client_iter; + MClients.readlock(__FUNCTION__, __LINE__); + for(client_iter=client_list.begin(); client_iter!=client_list.end(); client_iter++){ + client = *client_iter; + if(client->getConnection() == eqs) + client->Disconnect(false); + } + MClients.releasereadlock(__FUNCTION__, __LINE__); + } + +} + +bool ClientList::ContainsStream(EQStream* eqs){ + if(!eqs) { + return false; + } + list::iterator client_iter; + bool ret = false; + MClients.readlock(__FUNCTION__, __LINE__); + for(client_iter=client_list.begin(); client_iter!=client_list.end(); client_iter++){ + if((*client_iter)->getConnection() && (*client_iter)->getConnection()->GetRemotePort() == eqs->GetRemotePort() && (*client_iter)->getConnection()->GetRemoteIP() == eqs->GetRemoteIP()){ + ret = true; + break; + } + } + MClients.releasereadlock(__FUNCTION__, __LINE__); + + return ret; +} + +void ClientList::Remove(Client* client, bool remove_data) { + client->remove_from_list = true; + if(remove_data){ + safe_delete(client); + } + +} + +void Client::SetCurrentZone(int32 id){ + if(current_zone){ + //current_zone->GetCombat()->RemoveHate(player); + current_zone->RemoveSpawn(player, false); + } + SetCurrentZone(zone_list.Get(id)); + +} + +void Client::SetCurrentZoneByInstanceID(int32 id,int32 zoneid){ + if(current_zone){ + //current_zone->GetCombat()->RemoveHate(player); + current_zone->RemoveSpawn(player, false); + } + SetCurrentZone(zone_list.GetByInstanceID(id,zoneid)); + +} + +ZoneServer* Client::GetCurrentZone(){ + return current_zone; +} + +void Client::SimpleMessage(int8 color, const char* message){ + PacketStruct* command_packet = configReader.getStruct("WS_DisplayText", GetVersion()); + if(command_packet){ + command_packet->setDataByName("color", color); + command_packet->setMediumStringByName("text", message); + command_packet->setDataByName("unknown02", 0x00ff); + EQ2Packet* outapp = command_packet->serialize(); + QueuePacket(outapp); + safe_delete(command_packet); + } + +} + +void Client::SendSpellUpdate(Spell* spell){ + PacketStruct* packet = configReader.getStruct("WS_SpellGainedMsg", GetVersion()); + if(packet){ + int8 xxx = spell->GetSpellData()->is_aa; + packet->setDataByName("spell_type", spell->GetSpellData()->type); + packet->setDataByName("spell_id", spell->GetSpellID()); + packet->setDataByName("unique_id", spell->GetSpellTier()); + packet->setDataByName("spell_name", spell->GetName()); + packet->setDataByName("unknown", xxx); + packet->setDataByName("display_spell_tier", 1); + packet->setDataByName("unknown3", 1); + packet->setDataByName("tier", spell->GetSpellTier()); + packet->setDataByName("icon", spell->GetSpellIcon()); + packet->setDataByName("icon_type", spell->GetSpellIconBackdrop()); + packet->setDataByName("unknown5", 0xFFFFFFFF); + //packet->PrintPacket(); + + EQ2Packet* outapp = packet->serialize(); + //DumpPacket(outapp); + QueuePacket(outapp); + safe_delete(packet); + } + +} + +void Client::Message(int8 type, const char* message, ...) { + va_list argptr; + char buffer[4096]; + + va_start(argptr, message); + vsnprintf(buffer, sizeof(buffer), message, argptr); + va_end(argptr); + SimpleMessage(type, buffer); + +} + +void Client::Disconnect(bool send_disconnect) +{ + LogWrite(CCLIENT__DEBUG, 0, "CClient", "Client Disconnect..."); + + SetConnected(false); + + if(send_disconnect && getConnection()) + getConnection()->SendDisconnect(true); + + this->Save(); + this->GetPlayer()->WritePlayerStatistics(); + + eqs = 0; +} + +bool Client::Summon(const char* search_name){ + Spawn* target = 0; + if(search_name || GetPlayer()->GetTarget()){ + Client* search_client = 0; + if(search_name){ + target = GetCurrentZone()->FindSpawn(GetPlayer(), search_name); + if(target && target->IsPlayer()) + search_client = GetCurrentZone()->GetClientBySpawn(target); + if(!target){ + search_client = zone_list.GetClientByCharName(string(search_name)); + if(search_client) + target = search_client->GetPlayer(); + } + } + else + target = GetPlayer()->GetTarget(); + if(target && target != GetPlayer()){ + target->SetX(GetPlayer()->GetX()); + target->SetY(GetPlayer()->GetY()); + target->SetZ(GetPlayer()->GetZ()); + target->SetHeading(GetPlayer()->GetHeading()); + if(!target->IsPlayer()){ + target->SetSpawnOrigX(target->GetX()); + target->SetSpawnOrigY(target->GetY()); + target->SetSpawnOrigZ(target->GetZ()); + target->SetSpawnOrigHeading(target->GetHeading()); + } + target->SetLocation(GetPlayer()->GetLocation()); + } + else if(target) + Message(CHANNEL_COLOR_RED,"Error: You cannot summon yourself!"); + if(search_client && search_client != this){ + search_client->Message(CHANNEL_COLOR_YELLOW, "You have been summoned by '%s'!", GetPlayer()->GetName()); + Message(CHANNEL_COLOR_YELLOW, "Summoning '%s'...", search_client->GetPlayer()->GetName()); + if(search_client->GetCurrentZone() != GetCurrentZone()) + search_client->Zone(GetCurrentZone()->GetZoneName(), false); + else{ + EQ2Packet* app = search_client->GetPlayer()->Move(GetPlayer()->GetX(), GetPlayer()->GetY(), GetPlayer()->GetZ(), search_client->GetVersion()); + if(app) + search_client->QueuePacket(app); + } + } + } + + if(!target) + return false; + else + return true; +} + +bool Client::TryZoneInstance(int32 zoneID, bool zone_coords_valid) { + ZoneServer* instance_zone = NULL; + int8 instanceType = 0; + + // determine if this is a group instanced zone that already exists + instance_zone = GetPlayer()->GetGroupMemberInZone(zoneID); + + if ( instance_zone != NULL ) + Zone(instance_zone->GetInstanceID(),zone_coords_valid, true); + else if ( (instanceType = database.GetInstanceTypeByZoneID(zoneID) ) > 0 ) + { + // best to check if we already have our own instance! + InstanceData* data = GetPlayer()->GetCharacterInstances()->FindInstanceByZoneID(zoneID); + if (data) { + // If lockout instances check to see if we are locked out + if (instanceType == SOLO_LOCKOUT_INSTANCE || instanceType == GROUP_LOCKOUT_INSTANCE || instanceType == RAID_LOCKOUT_INSTANCE) { + int32 time = 0; + // Check success timer + if (data->last_success_timestamp > 0) { + if (Timer::GetUnixTimeStamp() < data->last_success_timestamp + data->success_lockout_time) { + // Timer has not expired yet can't re enter + LogWrite(INSTANCE__DEBUG, 0, "Instance", "Success lockout not expired for character %s in zone %u", GetPlayer()->GetName(), zoneID); + time = (data->last_success_timestamp + data->success_lockout_time) - Timer::GetUnixTimeStamp(); + } + } + + // Check failure timer + if (data->last_failure_timestamp > 0) { + if (Timer::GetUnixTimeStamp() < data->last_failure_timestamp + data->failure_lockout_time) { + // Timer has not expired yet + LogWrite(INSTANCE__DEBUG, 0, "Instance", "Failure lockout not expired for character %s in zone %u", GetPlayer()->GetName(), zoneID); + time = (data->last_failure_timestamp + data->failure_lockout_time) - Timer::GetUnixTimeStamp(); + } + } + + // Time > 0 then we are locked out, make the message and send it and return true + if (time > 0) { + string time_msg = ""; + int16 hour; + int8 min; + int8 sec; + hour = time / 3600; + time = time % 3600; + min = time / 60; + time = time % 60; + sec = time; + + if (hour > 0) { + char temp[10]; + sprintf(temp, " %i", hour); + time_msg.append(temp); + time_msg.append(" hour"); + time_msg.append((hour > 1) ? "s" : ""); + } + if (min > 0) { + char temp[5]; + sprintf(temp, " %i", min); + time_msg.append(temp); + time_msg.append(" minute"); + time_msg.append((min > 1) ? "s" : ""); + } + // Only add seconds if minutes and hours are 0 + if (hour == 0 && min == 0 && sec > 0) { + char temp[5]; + sprintf(temp, " %i", sec); + time_msg.append(temp); + time_msg.append(" second"); + time_msg.append((sec > 1) ? "s" : ""); + } + + Message(CHANNEL_COLOR_YELLOW, "You may not enter again for%s.", time_msg.c_str()); + return true; + } + } + + // Need to update `character_instances` table with new timestamps (for persistent) and instance id's + instance_zone = zone_list.GetByInstanceID(data->instance_id,zoneID); + + // if we got an instance_zone and the instance_id from the data is 0 or data instance id is not the same as the zone instance id then update values + if (instance_zone && (data->instance_id == 0 || data->instance_id != instance_zone->GetInstanceID())) { + if (instanceType == SOLO_PERSIST_INSTANCE || instanceType == GROUP_PERSIST_INSTANCE || instanceType == RAID_PERSIST_INSTANCE) { + database.UpdateCharacterInstance(GetCharacterID(), string(instance_zone->GetZoneName()), instance_zone->GetInstanceID(), 1, Timer::GetUnixTimeStamp()); + data->last_success_timestamp = Timer::GetUnixTimeStamp(); + } + else + database.UpdateCharacterInstance(GetCharacterID(), string(instance_zone->GetZoneName()), instance_zone->GetInstanceID()); + + data->instance_id = instance_zone->GetInstanceID(); + } + } + else { + switch(instanceType) + { + case SOLO_LOCKOUT_INSTANCE: + case GROUP_LOCKOUT_INSTANCE: + case RAID_LOCKOUT_INSTANCE: + { + instance_zone = zone_list.GetByInstanceID(0,zoneID); + if (instance_zone) { + // once lockout instance zone shuts down you can't renenter if you have a lockout or if you don't you get a new zone + // so delete `instances` entry for the zone when it shuts down. + int32 db_id = database.AddCharacterInstance(GetPlayer()->GetCharacterID(), instance_zone->GetInstanceID(), string(instance_zone->GetZoneName()), instance_zone->GetInstanceType(), 0, 0, instance_zone->GetDefaultLockoutTime(), instance_zone->GetDefaultReenterTime()); + + if (db_id > 0) + GetPlayer()->GetCharacterInstances()->AddInstance(db_id, instance_zone->GetInstanceID(), 0, 0, instance_zone->GetDefaultLockoutTime(), instance_zone->GetDefaultReenterTime(), zoneID, instance_zone->GetInstanceType(), string(instance_zone->GetZoneName())); + } + break; + } + case SOLO_PERSIST_INSTANCE: + case GROUP_PERSIST_INSTANCE: + case RAID_PERSIST_INSTANCE: + { + instance_zone = zone_list.GetByInstanceID(0,zoneID); + if (instance_zone) { + int32 db_id = database.AddCharacterInstance(GetPlayer()->GetCharacterID(), instance_zone->GetInstanceID(), string(instance_zone->GetZoneName()), instance_zone->GetInstanceType(), Timer::GetUnixTimeStamp(), 0, instance_zone->GetDefaultLockoutTime(), instance_zone->GetDefaultReenterTime()); + + if (db_id > 0) + GetPlayer()->GetCharacterInstances()->AddInstance(db_id, instance_zone->GetInstanceID(), Timer::GetUnixTimeStamp(), 0, instance_zone->GetDefaultLockoutTime(), instance_zone->GetDefaultReenterTime(), zoneID, instance_zone->GetInstanceType(), string(instance_zone->GetZoneName())); + } + break; + } + case PUBLIC_INSTANCE: + case TRADESKILL_INSTANCE: + { + // if its public/tradeskill, look for a public already setup + instance_zone = zone_list.GetByLowestPopulation(zoneID); + if (instance_zone) { + // Check the current population against the max population, if greater or equal start a new version + if (instance_zone->GetClientCount() >= rule_manager.GetGlobalRule(R_Zone, MaxPlayers)->GetInt32()) + instance_zone = zone_list.GetByInstanceID(0, zoneID); + } + else + instance_zone = zone_list.GetByInstanceID(0, zoneID); + + break; + } + + case PERSONAL_HOUSE_INSTANCE: + case GUILD_HOUSE_INSTANCE: + { + // Because of the way housing works (need to load a specific instance id supplied in a packet) we can't + // use this function without some rework, so it will all be handled in Client::HandlePacket() + // with the OP_EnterHouseMsg opcode + break; + } + + case QUEST_INSTANCE: + { + instance_zone = zone_list.GetByInstanceID(0, zoneID); + break; + /* + ALTER TABLE `zones` CHANGE COLUMN `instance_type` `instance_type` ENUM('NONE','GROUP_LOCKOUT_INSTANCE','GROUP_PERSIST_INSTANCE','RAID_LOCKOUT_INSTANCE','RAID_PERSIST_INSTANCE','SOLO_LOCKOUT_INSTANCE','SOLO_PERSIST_INSTANCE','TRADESKILL_INSTANCE','PUBLIC_INSTANCE','PERSONAL_HOUSE_INSTANCE','GUILD_HOUSE_INSTANCE','QUEST_INSTANCE') NOT NULL DEFAULT 'NONE' COLLATE 'latin1_general_ci' AFTER `start_zone`; + */ + } + + default: + { + // NONE + } + + } + + } + + if ( instance_zone != NULL ) + Zone(instance_zone, zone_coords_valid ); + } + + + if ( instance_zone != NULL ) + return true; + else + return false; +} + +bool Client::GotoSpawn(const char* search_name){ + Spawn* target = 0; + if(search_name || GetPlayer()->GetTarget()){ + Client* search_client = 0; + if(search_name){ + target = GetCurrentZone()->FindSpawn(GetPlayer(), search_name); + if(!target){ + search_client = zone_list.GetClientByCharName(search_name); + if(search_client) + target = search_client->GetPlayer(); + } + } + else + target = GetPlayer()->GetTarget(); + if(target && target != GetPlayer()){ + GetPlayer()->SetX(target->GetX()); + GetPlayer()->SetY(target->GetY()); + GetPlayer()->SetZ(target->GetZ()); + GetPlayer()->SetHeading(target->GetHeading()); + GetPlayer()->SetLocation(target->GetLocation()); + Message(CHANNEL_COLOR_YELLOW, "Warping to '%s'", target->GetName()); + } + else if(target) + Message(CHANNEL_COLOR_RED,"Error: You cannot goto yourself!"); + if(search_client && search_client->GetCurrentZone() != GetCurrentZone()) + Zone(search_client->GetCurrentZone()->GetZoneName(), false); + else if(target){ + EQ2Packet* app = GetPlayer()->Move(target->GetX(), target->GetY(), target->GetZ(), GetVersion()); + if(app) + QueuePacket(app); + } + } + + if(!target) + return false; + else + return true; +} + +bool Client::CheckZoneAccess(const char* zoneName) { + + LogWrite(CCLIENT__DEBUG, 0, "Client", "Zone access check for %s (%u), client: %u",zoneName, database.GetZoneID(zoneName), GetVersion()); + + ZoneServer* zone = zone_list.Get(zoneName,false); + + // JA: implemented /zone lock|unlock commands (2012.07.28) + if( zone && zone->GetZoneLockState() ) + { + LogWrite(CCLIENT__DEBUG, 0, "Client", "Zone currently LOCKED: '%s' (%ul)", zoneName, zone->GetZoneID()); + Message(CHANNEL_COLOR_RED, "This zone is locked, and you don't have the key! (%s).", zoneName); + return false; + } + + sint16 zoneMinStatus = 0; + int16 zoneMinLevel = 0; + int16 zoneMaxLevel = 0; + int16 zoneMinVersion = 0; + if ( !zone ) + { + LogWrite(CCLIENT__DEBUG, 0, "Client", "Grabbing zone requirements for %s", zoneName); + bool success = database.GetZoneRequirements(zoneName, &zoneMinStatus, &zoneMinLevel, &zoneMaxLevel, &zoneMinVersion); + + if ( !success ) { // couldn't even find the zone, this shouldn't happen though.. + return true; + } + } + else + { + zoneMinStatus = zone->GetMinimumStatus(); + zoneMinLevel = zone->GetMinimumLevel(); + zoneMaxLevel = zone->GetMaximumLevel(); + zoneMinVersion = zone->GetMinimumVersion(); + } + + LogWrite(CCLIENT__DEBUG, 0, "Client", "Access Requirements: status %i, level %i - %i, req >= %i version", zoneMinStatus, zoneMinLevel, zoneMaxLevel, zoneMinVersion); + + // use ZoneLevelOverrideStatus in both min_level and max_level checks + sint16 ZoneLevelOverrideStatus = rule_manager.GetGlobalRule(R_Zone, MinZoneLevelOverrideStatus)->GetSInt16(); + + if ( (zoneMinVersion > 0) && (GetVersion() < zoneMinVersion) ) + { + LogWrite(CCLIENT__DEBUG, 0, "Client", "Zone MinVersion of %i challenge...", zoneMinVersion); + Message(CHANNEL_COLOR_RED, "You do not have the required expansion pack to enter here (%s).", database.GetExpansionIDByVersion(zoneMinVersion).c_str()); + LogWrite(CCLIENT__DEBUG, 0, "Client", "Client denied access to zone '%s' (version req: %i)", zoneName, zoneMinVersion); + return false; + } + + + if ( (zoneMinLevel > 1) && (player->GetLevel() < zoneMinLevel) ) + { + if( ZoneLevelOverrideStatus && ZoneLevelOverrideStatus > GetAdminStatus() ) + { + LogWrite(CCLIENT__DEBUG, 0, "Client", "Player denied access to zone '%s' (level req: %i)", zoneName, player->GetLevel()); + Message(CHANNEL_COLOR_RED, "Your level is too low to enter here (%s)", zoneMinLevel); + return false; + } + } + + if ( (zoneMaxLevel > 1) && (player->GetLevel() > zoneMaxLevel) ) + { + if( ZoneLevelOverrideStatus && ZoneLevelOverrideStatus > GetAdminStatus() ) + { + LogWrite(CCLIENT__DEBUG, 0, "Client", "Player denied access to zone '%s' (level req: %i)", zoneName, player->GetLevel()); + Message(CHANNEL_COLOR_RED, "Your level is too high to enter here (%s)", zoneMaxLevel); + return false; + } + } + + if ( (zoneMinStatus > 0) && (GetAdminStatus() < zoneMinStatus) ) + { + LogWrite(CCLIENT__DEBUG, 0, "Client", "Zone MinStatus of %i challenge...", zoneMinStatus); + + sint16 ZoneAccessOverrideStatus = rule_manager.GetGlobalRule(R_Zone, MinZoneAccessOverrideStatus)->GetSInt16(); + if( ZoneAccessOverrideStatus && ZoneAccessOverrideStatus > GetAdminStatus() ) + { + LogWrite(CCLIENT__DEBUG, 0, "Client", "Player denied access to zone '%s' (status req: %i)", zoneName, GetAdminStatus()); + Message(CHANNEL_COLOR_RED, "You do not have permission to enter here (%i).", zoneMinStatus); + return false; + } + } + return true; +} + +void Client::Zone(int32 instanceid, bool set_coords, bool byInstanceID) { + Zone(zone_list.GetByInstanceID(instanceid), set_coords); + +} + +void Client::Zone(ZoneServer* new_zone, bool set_coords){ + if(!new_zone) { + LogWrite(CCLIENT__DEBUG, 0, "Client", "Zone Request Denied! No 'new_zone' value"); + return; + } + + client_zoning = true; + LogWrite(CCLIENT__DEBUG, 0, "Client", "%s: Setting player Resurrecting to 'true'", __FUNCTION__); + player->SetResurrecting(true); + + LogWrite(CCLIENT__DEBUG, 0, "Client", "%s: Removing player from fighting...", __FUNCTION__); + //GetCurrentZone()->GetCombat()->RemoveHate(player); + + // Remove players pet from zone if there is one + player->DismissPet((NPC*)player->GetPet()); + player->DismissPet((NPC*)player->GetCharmedPet()); + player->DismissPet((NPC*)player->GetDeityPet()); + player->DismissPet((NPC*)player->GetCosmeticPet()); + + + LogWrite(CCLIENT__DEBUG, 0, "Client", "%s: Removing player from current zone...", __FUNCTION__); + GetCurrentZone()->RemoveSpawn(player, false); + + LogWrite(CCLIENT__DEBUG, 0, "Client", "%s: Setting zone to '%s'...", __FUNCTION__, new_zone->GetZoneName()); + SetCurrentZone(new_zone); + + if(player->GetGroupMemberInfo()) + { + LogWrite(CCLIENT__DEBUG, 0, "Client", "%s: Player in group, updating group info...", __FUNCTION__); + player->UpdateGroupMemberInfo(); + world.GetGroupManager()->SendGroupUpdate(player->GetGroupMemberInfo()->group_id, this); + } + + UpdateTimeStampFlag(ZONE_UPDATE_FLAG); + + if(set_coords) + { + LogWrite(CCLIENT__DEBUG, 0, "Client", "%s: Zoning player to coordinates x: %2f, y: %2f, z: %2f, heading: %2f in zone '%s'...", + __FUNCTION__, + GetCurrentZone()->GetSafeX(), + GetCurrentZone()->GetSafeY(), + GetCurrentZone()->GetSafeZ(), + GetCurrentZone()->GetSafeHeading(), + new_zone->GetZoneName() + ); + player->SetX(GetCurrentZone()->GetSafeX()); + player->SetY(GetCurrentZone()->GetSafeY()); + player->SetZ(GetCurrentZone()->GetSafeZ()); + player->SetHeading(GetCurrentZone()->GetSafeHeading()); + } + + LogWrite(CCLIENT__DEBUG, 0, "Client", "%s: Saving Player info...", __FUNCTION__); + Save(); + + char* new_zone_ip = 0; + struct in_addr in; + in.s_addr = this->GetIP(); + if(strncmp(inet_ntoa(in), "192.168",7)==0 && strlen(net.GetInternalWorldAddress()) > 0) + new_zone_ip = net.GetInternalWorldAddress(); + else + new_zone_ip = net.GetWorldAddress(); + LogWrite(CCLIENT__DEBUG, 0, "Client", "%s: New Zone IP '%s'...", __FUNCTION__, new_zone_ip); + + int32 key = Timer::GetUnixTimeStamp(); + LogWrite(CCLIENT__DEBUG, 0, "Client", "%s: Sending ZoneChangeMsg...", __FUNCTION__); + ClientPacketFunctions::SendZoneChange(this, new_zone_ip, net.GetWorldPort(), key); + + LogWrite(CCLIENT__DEBUG, 0, "Client", "%s: Sending to zone_auth.AddAuth...", __FUNCTION__); + zone_auth.AddAuth(new ZoneAuthRequest(GetAccountID(), player->GetName(), key)); + +} + +void Client::Zone(const char* new_zone, bool set_coords) +{ + LogWrite(CCLIENT__DEBUG, 0, "Client", "Zone Request to '%s'", new_zone); + Zone(zone_list.Get(new_zone), set_coords); +} + +float Client::DistanceFrom(Client* client){ + float ret = 0; + if(client && client != this){ + ret = pow(player->GetX() - client->player->GetX(), 2) + pow(player->GetY() - client->player->GetY(), 2) + pow(player->GetZ() - client->player->GetZ(), 2); + ret = sqrt(ret); + } + + return ret; +} + +void Client::DetermineCharacterUpdates ( ) { + ServerPacket* outpack = new ServerPacket(ServerOP_BasicCharUpdate, sizeof(CharDataUpdate_Struct)); + CharDataUpdate_Struct* cdu = (CharDataUpdate_Struct*)outpack->pBuffer; + cdu->account_id = GetAccountID ( ); + cdu->char_id = GetCharacterID ( ); + int32 timestamp = Timer::GetUnixTimeStamp(); + int8 flag = GetTimeStampFlag( ); + if(flag&LEVEL_UPDATE_FLAG) + { + cdu->update_field = LEVEL_UPDATE_FLAG; + cdu->update_data = player->GetLevel ( ); + loginserver.SendPacket(outpack); + } + //if(flag&CLASS_UPDATE_FLAG && player->GetLevel() >= 20)// Perseverance only + if(flag&CLASS_UPDATE_FLAG) + { + cdu->update_field = CLASS_UPDATE_FLAG; + cdu->update_data = player->GetAdventureClass(); + loginserver.SendPacket(outpack); + } + if(flag&GENDER_UPDATE_FLAG) + { + cdu->update_field = GENDER_UPDATE_FLAG; + cdu->update_data = player->GetGender ( ); + loginserver.SendPacket(outpack); + } + if(flag&DELETE_UPDATE_FLAG) { + LogWrite(MISC__TODO, 1, "TODO", "Delete update req in func: %s, line: %i", __FUNCTION__, __LINE__); + } + + safe_delete(outpack); // Zone, armor and name use a different structure + + if(flag&RACE_UPDATE_FLAG) + { + outpack = new ServerPacket(ServerOP_RaceUpdate, sizeof(RaceUpdate_Struct)); + RaceUpdate_Struct* ru = (RaceUpdate_Struct*)outpack->pBuffer; + ru->account_id = GetAccountID ( ); + ru->char_id = GetCharacterID ( ); + ru->race = player->GetRace ( ); + ru->model_type = player->GetModelType ( ); + loginserver.SendPacket ( outpack ); + safe_delete(outpack); + } + + if(flag&ZONE_UPDATE_FLAG){ + ServerPacket* outpack = new ServerPacket(ServerOP_ZoneUpdate, CHARZONESTRUCT_MAXSIZE); + memset(outpack->pBuffer, 0, CHARZONESTRUCT_MAXSIZE); + CharZoneUpdate_Struct* czu = (CharZoneUpdate_Struct*)outpack->pBuffer; + czu->account_id = GetAccountID(); + czu->char_id = GetCharacterID(); + czu->zone_id = GetCurrentZone()->GetZoneID(); + const char* zone_file = GetCurrentZone()->GetZoneFile(); + czu->zone_length = strlen(zone_file); + if(czu->zone_length > 64) + czu->zone_length = 64; + strncpy(czu->new_zone, zone_file, czu->zone_length); + loginserver.SendPacket(outpack); + safe_delete(outpack); + } + if(flag&ARMOR_UPDATE_FLAG) { + LogWrite(MISC__TODO, 1, "TODO", "Armor update req in func: %s, line: %i", __FUNCTION__, __LINE__); + } + if(flag&NAME_UPDATE_FLAG) { + LogWrite(MISC__TODO, 1, "TODO", "Name update req in func: %s, line: %i", __FUNCTION__, __LINE__); + } + + database.UpdateCharacterTimeStamp(GetAccountID ( ),GetCharacterID ( ),timestamp); + +} + +void Client::Save(){ + if(current_zone){ + DetermineCharacterUpdates(); + + UpdateCharacterInstances(); + + database.Save(this); + if(GetPlayer()->UpdateQuickbarNeeded()){ + database.SaveQuickBar(GetCharacterID(), GetPlayer()->GetQuickbar()); + GetPlayer()->ResetQuickbarNeeded(); + } + database.SaveItems(this); + database.SaveBuyBacks(this); + + GetPlayer()->SaveHistory(); + GetPlayer()->SaveLUAHistory(); + } + +} + +void Client::UpdateCharacterInstances() { + if (GetPlayer() != NULL) + GetPlayer()->GetCharacterInstances()->ProcessInstanceTimers(GetPlayer()); + + /*if ( GetPlayer() != NULL ) + { + // determine the last timestamp then get a new one, determine the difference in the timestamp + // to use for applying the update to each instances timer + int32 lastSaveTS = GetLastSavedTimeStamp(); + int32 newSaveTS = Timer::GetUnixTimeStamp(); + int32 diffTS = newSaveTS - lastSaveTS; + + // update instance timers + GetPlayer()->GetCharacterInstances().ProcessInstanceTimers(GetPlayer(),diffTS); + + // update with the new timestamp and save the db + this->SetLastSavedTimeStamp(newSaveTS); + }*/ + +} + +void Client::HandleVerbRequest(EQApplicationPacket* app){ + PacketStruct* packet = configReader.getStruct("WS_EntityVerbsRequest", GetVersion()); + if(packet){ + packet->LoadPacketData(app->pBuffer, app->size); + int32 spawn_id = packet->getType_int32_ByName("spawn_id"); + PacketStruct* out = configReader.getStruct("WS_EntityVerbsResponse", GetVersion()); + Spawn* spawn = GetPlayer()->GetSpawnWithPlayerID(spawn_id); + vector commands; + vector delete_commands; + if(out && spawn){ + for(int32 i=0;iprimary_command_list.size();i++) + commands.push_back(spawn->primary_command_list[i]); + for(int32 i=0;isecondary_command_list.size();i++) + commands.push_back(spawn->secondary_command_list[i]); + if(spawn->IsPlayer()){ + if(player->IsFriend(spawn->GetName())) + delete_commands.push_back(player->CreateEntityCommand("remove from friends list", 10000, "friend_remove", "", 0, 0)); + else + delete_commands.push_back(player->CreateEntityCommand("add to friends list", 10000, "friend_add", "", 0, 0)); + if(player->IsIgnored(spawn->GetName())) + delete_commands.push_back(player->CreateEntityCommand("remove from ignore list", 10000, "ignore_remove", "", 0, 0)); + else + delete_commands.push_back(player->CreateEntityCommand("add to ignore list", 10000, "ignore_add", "", 0, 0)); + if(((Player*)spawn)->GetGroupMemberInfo()) { + if(player->IsGroupMember((Player*)spawn) && player->GetGroupMemberInfo()->leader) { //group leader + delete_commands.push_back(player->CreateEntityCommand("kick from group", 10000, "kickfromgroup", "", 0, 0)); + delete_commands.push_back(player->CreateEntityCommand("make group leader", 10000, "makeleader", "", 0, 0)); + } + } + else if(!player->GetGroupMemberInfo() || (player->GetGroupMemberInfo()->leader && world.GetGroupManager()->GetGroupSize(player->GetGroupMemberInfo()->group_id) < 6)) + delete_commands.push_back(player->CreateEntityCommand("invite to group", 10000, "invite", "", 0, 0)); + commands.insert(commands.end(), delete_commands.begin(), delete_commands.end()); + } + out->setDataByName("spawn_id", spawn_id); + out->setArrayLengthByName("num_verbs", commands.size()); + + for(int32 i=0;isetArrayDataByName("command", commands[i]->command.c_str(), i); + out->setArrayDataByName("distance", commands[i]->distance, i); + if(commands[i]->error_text.length() == 0) + out->setArrayAddToPacketByName("error", false, i); + else{ + out->setArrayDataByName("display_error", 1, i); + out->setArrayDataByName("error", commands[i]->error_text.c_str(), i); + } + out->setArrayDataByName("display_text", commands[i]->name.c_str(), i); + } + EQ2Packet* outapp = out->serialize(); + //DumpPacket(outapp); + QueuePacket(outapp); + safe_delete(out); + for(int32 i=0;i previous_value ? "better" : "worse", skill->name.data.c_str(), new_value, skill->max_val); + char tmp[200] = {0}; + sprintf(tmp, "\\#6EFF6EYou get %s at \12\\#C8FFC8%s\\#6EFF6E! (%i/%i)", new_value > previous_value ? "better" : "worse", skill->name.data.c_str(), new_value, skill->max_val); + SendPopupMessage(6, tmp, new_value > previous_value ? "skill_up" : "skill_down", 2.75, 0xFF, 0xFF, 0xFF); + EQ2Packet* app = GetPlayer()->skill_list.GetSkillPacket(GetVersion()); + if(app) + QueuePacket(app); + +} + +void Client::SendPopupMessage(int8 unknown, const char* text, const char* type, float size, int8 red, int8 green, int8 blue) +{ + /* JA notes on the unknown: + 2 = ding glimmer + 16 = Achievement Unlocked + 6 no longer does anything + */ + + PacketStruct* packet = configReader.getStruct("WS_OnScreenMsg", GetVersion()); + if(packet){ + packet->setDataByName("unknown", unknown); + packet->setMediumStringByName("text", text); + if (type && strlen(type) > 0) + packet->setMediumStringByName("message_type", type); + packet->setDataByName("size", size); + packet->setDataByName("red", red); + packet->setDataByName("green", green); + packet->setDataByName("blue", blue); + QueuePacket(packet->serialize()); + safe_delete(packet); + } + +} + +void Client::ChangeLevel(int16 old_level, int16 new_level){ + if (new_level < 1) { + SimpleMessage(CHANNEL_COLOR_RED, "You cannot be lower than level 1!"); + return; + } + + if(player->GetLevel() != new_level){ + player->SetLevel(new_level); + if (player->GetGroupMemberInfo()) { + player->UpdateGroupMemberInfo(); + world.GetGroupManager()->SendGroupUpdate(player->GetGroupMemberInfo()->group_id); + } + } + + if (new_level > old_level) + player->UpdatePlayerHistory(HISTORY_TYPE_XP, HISTORY_SUBTYPE_ADVENTURE, new_level, player->GetAdventureClass()); + + if (player->GetPet()) { + NPC* pet = (NPC*)player->GetPet(); + if (pet->GetMaxPetLevel() == 0 || new_level <= pet->GetMaxPetLevel()) { + pet->SetLevel(new_level); + PacketStruct* command_packet=configReader.getStruct("WS_CannedEmote", GetVersion()); + if (command_packet){ + command_packet->setDataByName("spawn_id", player->GetIDWithPlayerSpawn(pet)); + command_packet->setDataByName("anim_type",1753); + QueuePacket(command_packet->serialize()); + safe_delete(command_packet); + } + } + } + + PacketStruct* level_update = configReader.getStruct("WS_LevelChanged", GetVersion()); + if(level_update){ + level_update->setDataByName("old_level", old_level); + level_update->setDataByName("new_level", new_level); + QueuePacket(level_update->serialize()); + safe_delete(level_update); + GetCurrentZone()->StartZoneSpawnsForLevelThread(this); + //GetCurrentZone()->SendAllSpawnsForLevelChange(this); + } + + PacketStruct* command_packet=configReader.getStruct("WS_CannedEmote", GetVersion()); + if (command_packet){ + command_packet->setDataByName("spawn_id", player->GetIDWithPlayerSpawn(player)); + command_packet->setDataByName("anim_type",1753); + QueuePacket(command_packet->serialize()); + safe_delete(command_packet); + } + + if (!player->get_character_flag(CF_ENABLE_CHANGE_LASTNAME) && new_level >= rule_manager.GetGlobalRule(R_Player, MinLastNameLevel)->GetInt8()) + player->set_character_flag(CF_ENABLE_CHANGE_LASTNAME); + + player->GetSkills()->IncreaseAllSkillCaps(5 * (new_level - old_level)); + SendNewSpells(player->GetAdventureClass()); + SendNewSpells(classes.GetBaseClass(player->GetAdventureClass())); + SendNewSpells(classes.GetSecondaryBaseClass(player->GetAdventureClass())); + + + GetPlayer()->ChangePrimaryWeapon(); + GetPlayer()->ChangeSecondaryWeapon(); + GetPlayer()->ChangeRangedWeapon(); + GetPlayer()->GetInfoStruct()->level = new_level; + // GetPlayer()->SetLevel(new_level); + + LogWrite(MISC__TODO, 1, "TODO", "Get new HP/POWER/stat based on default values from DB\n\t(%s, function: %s, line #: %i)", __FILE__, __FUNCTION__, __LINE__); + + GetPlayer()->SetTotalHPBase(new_level*new_level*2+40); + GetPlayer()->SetTotalPowerBase((sint32)(new_level*new_level*2.1+45)); + GetPlayer()->CalculateBonuses(); + GetPlayer()->SetHP(GetPlayer()->GetTotalHP()); + GetPlayer()->SetPower(GetPlayer()->GetTotalPower()); + GetPlayer()->GetInfoStruct()->agi_base = new_level*2+15; + GetPlayer()->GetInfoStruct()->intel_base = new_level*2+15; + GetPlayer()->GetInfoStruct()->wis_base = new_level*2+15; + GetPlayer()->GetInfoStruct()->str_base = new_level*2+15; + GetPlayer()->GetInfoStruct()->sta_base = new_level*2+15; + GetPlayer()->GetInfoStruct()->cold_base = (int16)(new_level*1.5+10); + GetPlayer()->GetInfoStruct()->heat_base = (int16)(new_level*1.5+10); + GetPlayer()->GetInfoStruct()->disease_base = (int16)(new_level*1.5+10); + GetPlayer()->GetInfoStruct()->mental_base = (int16)(new_level*1.5+10); + GetPlayer()->GetInfoStruct()->magic_base = (int16)(new_level*1.5+10); + GetPlayer()->GetInfoStruct()->divine_base = (int16)(new_level*1.5+10); + GetPlayer()->GetInfoStruct()->poison_base = (int16)(new_level*1.5+10); + GetPlayer()->SetHPRegen((int)(new_level*.75)+(int)(new_level/10)+3); + GetPlayer()->SetPowerRegen(new_level+(int)(new_level/10)+4); + GetPlayer()->GetInfoStruct()->poison_base = (int16)(new_level*1.5+10); + UpdateTimeStampFlag ( LEVEL_UPDATE_FLAG ); + GetPlayer()->SetCharSheetChanged(true); + + Message(CHANNEL_COLOR_EXP,"You are now level %i!", new_level); + LogWrite(WORLD__DEBUG, 0, "World", "Player: %s leveled from %u to %u", GetPlayer()->GetName(), old_level, new_level); + GetPlayer()->GetSkills()->SetSkillCapsByType(1, 5*new_level); + GetPlayer()->GetSkills()->SetSkillCapsByType(3, 5*new_level); + GetPlayer()->GetSkills()->SetSkillCapsByType(6, 5*new_level); + GetPlayer()->GetSkills()->SetSkillCapsByType(13, 5*new_level); + + Guild* guild = GetPlayer()->GetGuild(); + if (guild) { + int8 event_type = 0; + if (new_level < 10) + event_type = GUILD_EVENT_GAINS_ADV_LEVEL_1_10; + else if (new_level == 10) + event_type = GUILD_EVENT_GAINS_ADV_LEVEL_10; + else if (new_level < 20) + event_type = GUILD_EVENT_GAINS_ADV_LEVEL_11_20; + else if (new_level == 20) + event_type = GUILD_EVENT_GAINS_ADV_LEVEL_20; + else if (new_level < 30) + event_type = GUILD_EVENT_GAINS_ADV_LEVEL_21_30; + else if (new_level == 30) + event_type = GUILD_EVENT_GAINS_ADV_LEVEL_30; + else if (new_level < 40) + event_type = GUILD_EVENT_GAINS_ADV_LEVEL_31_40; + else if (new_level == 40) + event_type = GUILD_EVENT_GAINS_ADV_LEVEL_40; + else if (new_level < 50) + event_type = GUILD_EVENT_GAINS_ADV_LEVEL_41_50; + else if (new_level == 50) + event_type = GUILD_EVENT_GAINS_ADV_LEVEL_50; + else if (new_level < 60) + event_type = GUILD_EVENT_GAINS_ADV_LEVEL_51_60; + else if (new_level == 60) + event_type = GUILD_EVENT_GAINS_ADV_LEVEL_60; + else if (new_level < 70) + event_type = GUILD_EVENT_GAINS_ADV_LEVEL_61_70; + else if (new_level == 70) + event_type = GUILD_EVENT_GAINS_ADV_LEVEL_70; + else if (new_level < 80) + event_type = GUILD_EVENT_GAINS_ADV_LEVEL_71_80; + else if (new_level == 80) + event_type = GUILD_EVENT_GAINS_ADV_LEVEL_80; + guild->AddNewGuildEvent(event_type, "%s has gained an adventure level and is now a level %u %s.", Timer::GetUnixTimeStamp(), true, GetPlayer()->GetName(), new_level, classes.GetClassNameCase(GetPlayer()->GetAdventureClass()).c_str()); + guild->SendMessageToGuild(event_type, "%s has gained an adventure level and is now a level %u %s.", GetPlayer()->GetName(), new_level, classes.GetClassNameCase(GetPlayer()->GetAdventureClass()).c_str()); + guild->UpdateGuildMemberInfo(GetPlayer()); + guild->SendGuildMember(GetPlayer()); + guild->SendGuildMemberList(); + } + + // Need to send the trait list every time the players level changes + // Also need to force the char sheet update or else there can be a large delay from when you level + // to when you are actually able to select traits. + QueuePacket(GetPlayer()->GetPlayerInfo()->serialize(GetVersion())); + QueuePacket(master_trait_list.GetTraitListPacket(this)); + master_aa_list.DisplayAA(this, 0, 0); + + if (GetPlayer()->SpawnedBots.size() > 0) { + map::iterator itr; + for (itr = GetPlayer()->SpawnedBots.begin(); itr != GetPlayer()->SpawnedBots.end(); itr++) { + Spawn* bot = GetCurrentZone()->GetSpawnByID(itr->second); + if (bot && bot->IsBot()) + ((Bot*)bot)->ChangeLevel(old_level, new_level); + } + } +} + +void Client::ChangeTSLevel(int16 old_level, int16 new_level){ + if (new_level < 1) { + SimpleMessage(CHANNEL_COLOR_RED, "You cannot be lower than level 1!"); + return; + } + if ((player->GetTSLevel() >= 9 && player->GetTradeskillClass() == 1) || (player->GetTSLevel() >= 19 && (player->GetTradeskillClass() == 1 || player->GetTradeskillClass() == 2 || player->GetTradeskillClass() == 6 || player->GetTradeskillClass() == 10))) { + SimpleMessage(CHANNEL_COLOR_YELLOW, "You can not gain levels until you select your next class!"); + return; + } + + if (new_level > old_level) + player->UpdatePlayerHistory(HISTORY_TYPE_XP, HISTORY_SUBTYPE_TRADESKILL, new_level, player->GetTradeskillClass()); + + if(player->GetTSLevel() != new_level){ + player->SetTSLevel(new_level); + if (player->GetGroupMemberInfo()) { + player->UpdateGroupMemberInfo(); + world.GetGroupManager()->SendGroupUpdate(player->GetGroupMemberInfo()->group_id); + } + } + // Only tradeskill skills should increace, and then only those related to your class + // player->GetSkills()->IncreaseAllSkillCaps(5 * (new_level - old_level)); + PacketStruct* level_update = configReader.getStruct("WS_LevelChanged", GetVersion()); + if(level_update){ + level_update->setDataByName("old_level", old_level); + level_update->setDataByName("new_level", new_level); + level_update->setDataByName("type", 1); + QueuePacket(level_update->serialize()); + safe_delete(level_update); + } + // Need to make tradeskill versions of the following + //SendNewSpells(player->GetAdventureClass()); + //SendNewSpells(classes.GetBaseClass(player->GetAdventureClass())); + //SendNewSpells(classes.GetSecondaryBaseClass(player->GetAdventureClass())); + PacketStruct* command_packet=configReader.getStruct("WS_CannedEmote", GetVersion()); + if (command_packet){ + command_packet->setDataByName("spawn_id", GetPlayer()->GetIDWithPlayerSpawn(GetPlayer())); + command_packet->setDataByName("anim_type",1753); + QueuePacket(command_packet->serialize()); + safe_delete(command_packet); + } + GetPlayer()->GetInfoStruct()->tradeskill_level = new_level; + GetPlayer()->SetTSLevel(new_level); + + + UpdateTimeStampFlag ( LEVEL_UPDATE_FLAG ); + GetPlayer()->SetCharSheetChanged(true); + Message(CHANNEL_COLOR_WHITE,"Your tradeskill level is now %i!", new_level); + LogWrite(WORLD__DEBUG, 0, "World", "Player: %s leveled from %u to %u", GetPlayer()->GetName(), old_level, new_level); + //GetPlayer()->GetSkills()->SetSkillCapsByType(1, 5*new_level); + //GetPlayer()->GetSkills()->SetSkillCapsByType(3, 5*new_level); + //GetPlayer()->GetSkills()->SetSkillCapsByType(6, 5*new_level); + //GetPlayer()->GetSkills()->SetSkillCapsByType(13, 5*new_level); + Guild* guild = GetPlayer()->GetGuild(); + if (guild) { + int8 event_type = 0; + if (new_level < 10) + event_type = GUILD_EVENT_GAINS_TS_LEVEL_1_10; + else if (new_level == 10) + event_type = GUILD_EVENT_GAINS_TS_LEVEL_10; + else if (new_level < 20) + event_type = GUILD_EVENT_GAINS_TS_LEVEL_11_20; + else if (new_level == 20) + event_type = GUILD_EVENT_GAINS_TS_LEVEL_20; + else if (new_level < 30) + event_type = GUILD_EVENT_GAINS_TS_LEVEL_21_30; + else if (new_level == 30) + event_type = GUILD_EVENT_GAINS_TS_LEVEL_30; + else if (new_level < 40) + event_type = GUILD_EVENT_GAINS_TS_LEVEL_31_40; + else if (new_level == 40) + event_type = GUILD_EVENT_GAINS_TS_LEVEL_40; + else if (new_level < 50) + event_type = GUILD_EVENT_GAINS_TS_LEVEL_41_50; + else if (new_level == 50) + event_type = GUILD_EVENT_GAINS_TS_LEVEL_50; + else if (new_level < 60) + event_type = GUILD_EVENT_GAINS_TS_LEVEL_51_60; + else if (new_level == 60) + event_type = GUILD_EVENT_GAINS_TS_LEVEL_60; + else if (new_level < 70) + event_type = GUILD_EVENT_GAINS_TS_LEVEL_61_70; + else if (new_level == 70) + event_type = GUILD_EVENT_GAINS_TS_LEVEL_70; + else if (new_level < 80) + event_type = GUILD_EVENT_GAINS_TS_LEVEL_71_80; + else if (new_level == 80) + event_type = GUILD_EVENT_GAINS_TS_LEVEL_80; + guild->AddNewGuildEvent(event_type, "%s has gained a tradeskill level and is now a level %u %s.", Timer::GetUnixTimeStamp(), true, GetPlayer()->GetName(), new_level, classes.GetClassNameCase(GetPlayer()->GetTradeskillClass() + 42).c_str()); + guild->SendMessageToGuild(event_type, "%s has gained a tradeskill level and is now a level %u %s.", GetPlayer()->GetName(), new_level, classes.GetClassNameCase(GetPlayer()->GetTradeskillClass() + 42).c_str()); + guild->UpdateGuildMemberInfo(GetPlayer()); + guild->SendGuildMember(GetPlayer()); + guild->SendGuildMemberList(); + } + + // Need to send the trait list every time the players level changes + // Also need to force the char sheet update or else there can be a large delay from when you level + // to when you are actually able to select traits. + QueuePacket(GetPlayer()->GetPlayerInfo()->serialize(GetVersion())); + QueuePacket(master_trait_list.GetTraitListPacket(this)); +} + +void Client::SendPendingLoot(int32 total_coins, Entity* entity){ + if(entity) + Loot(total_coins, player->GetPendingLootItems(entity->GetID()), entity); +} + +void Client::CloseLoot(){ + PacketStruct* packet = configReader.getStruct("WS_CloseWindow", GetVersion()); + packet->setDataByName("window_id", 4); + EQ2Packet* outapp = packet->serialize(); + //DumpPacket(outapp); + QueuePacket(outapp); + safe_delete(packet); +} + +string Client::GetCoinMessage(int32 total_coins){ + if(total_coins == 0) { + return " 0 Copper"; + } + char tmp[64] = {0}; + string message = ""; + int32 val = 0; + if(total_coins >= 1000000){ + val = total_coins / 1000000; + total_coins -= 1000000 * val; + sprintf(tmp, " %u Platinum", val); + message.append(tmp); + memset(tmp, 0, 64); + } + if(total_coins >= 10000){ + val = total_coins / 10000; + total_coins -= 10000 * val; + sprintf(tmp, " %u Gold", val); + message.append(tmp); + memset(tmp, 0, 64); + } + if(total_coins >= 100){ + val = total_coins / 100; + total_coins -= 100 * val; + sprintf(tmp, " %u Silver", val); + message.append(tmp); + memset(tmp, 0, 64); + } + if(total_coins > 0){ + sprintf(tmp, " %u Copper", (int32)total_coins); + message.append(tmp); + } + + return message; +} + +void Client::Loot(int32 total_coins, vector* items, Entity* entity){ + if(!entity){ + CloseLoot(); + return; + } + if(total_coins > 0){ + player->AddCoins(total_coins); + //PlaySound("coin_cha_ching"); + string message = ""; + if(entity->GetHP() == 0){ + message = "You loot "; + entity->SetLootCoins(0); + } + else + message = "You receive "; + message.append(GetCoinMessage(total_coins)); + if(entity->GetHP() == 0) + message.append(" from the corpse of ").append(entity->GetName()); + int8 type = CHANNEL_COLOR_LOOT; + if (GetVersion() >= 1208) + type = CHANNEL_LOOT; + else if(GetVersion() >= 973) + type = CHANNEL_COLOR_NEW_LOOT; + + + SimpleMessage(type, message.c_str()); + } + if(!items || items->size() == 0) + CloseLoot(); + PacketStruct* packet = configReader.getStruct("WS_UpdateLoot", GetVersion()); + if(packet){ + vector::iterator itr; + int32 packet_size = 0; + if(items && items->size() > 0){ + packet->setDataByName("loot_count", items->size()); + packet->setDataByName("display", 1); + } + packet->setDataByName("unknown2", 1); + if (version >= 1096) + packet->setDataByName("unknown3", 0x78); + else + packet->setDataByName("unknown3", 0x3C); + + packet->setDataByName("loot_id", entity->GetID()); + EQ2Packet* tmpPacket = packet->serialize(); + packet_size += tmpPacket->size; + uchar* data = 0; + if(items && items->size() > 0){ + data = new uchar[items->size()*1000 + packet_size]; + memset(data, 0, items->size()*1000 + packet_size); + } + else{ + data = new uchar[packet_size]; + memset(data, 0, packet_size); + } + uchar* ptr = data; + memcpy(ptr, tmpPacket->pBuffer, tmpPacket->size); + ptr += tmpPacket->size; + safe_delete(tmpPacket); + Item* item = 0; + if(items && items->size() > 0){ + for(itr = items->begin(); itr != items->end(); itr++){ + item = *itr; + memcpy(ptr, &item->details.item_id, sizeof(int32)); + ptr += sizeof(int32); + packet_size += sizeof(int32); + + tmpPacket = item->serialize(GetVersion(), true, GetPlayer(), false, 1, 0, false, true); + + int8 offset = 0; + if (GetVersion() >= 1188) { + offset = 13; + } + else if (GetVersion() >= 860){ + offset = 11; + } + else{ + offset = 10; + } + + memcpy(ptr, tmpPacket->pBuffer + offset, tmpPacket->size - offset); + ptr += tmpPacket->size - offset; + packet_size += tmpPacket->size - offset; + + safe_delete(tmpPacket); + } + } + packet_size -= sizeof(int32); + memcpy(data, &packet_size, sizeof(int32)); + packet_size += sizeof(int32); + EQ2Packet* outapp = new EQ2Packet(OP_ClientCmdMsg, data, packet_size); + //DumpPacket(outapp); + QueuePacket(outapp); + safe_delete_array(data); + safe_delete(packet); + } + +} + +void Client::Loot(Entity* entity){ + if(entity->IsNPC() && ((NPC*)entity)->Brain()->CheckLootAllowed(GetPlayer())){ + int32 total_coins = entity->GetLootCoins(); + entity->LockLoot(); + Loot(total_coins, entity->GetLootItems(), entity); + entity->UnlockLoot(); + + int32 state = 0; + // Check for the chest and set the action state + /*4034 = small chest | 5864 = treasure chest | 5865 = ornate treasure chest | 4015 = exquisite chest*/ + if (entity->GetModelType() == 4034) { + // small chest, open with copper coins + state = 11899; + } + else if (entity->GetModelType() == 5864) { + // treasure chest, open with silver coins + state = 11901; + } + else if (entity->GetModelType() == 5865) { + // ornate chest, open with gold coins + state = 11900; + } + else if (entity->GetModelType() == 4015) { + // exquisite chest, open with gold coins and jewels as well as a glow effect + state = 11898; + } + + // We set the visual state with out updating so those not in range will see it opened when it is finally sent to them, + // for those in range the SendStateCommand will cause it to animate open. + entity->SetVisualState(state, false); + GetCurrentZone()->SendStateCommand(entity, state); + } + else + SimpleMessage(CHANNEL_COLOR_YELLOW, "You are not allowed to loot at this time."); + +} + +Spawn* Client::GetBanker(){ + return banker; +} + +void Client::SetBanker(Spawn* in_banker){ + banker = in_banker; + +} + +void Client::Bank(Spawn* banker, bool cancel){ + if(banker && banker->primary_command_list.size() > 0 && banker->primary_command_list[0]->command == "bank"){ + if(!cancel) + SetBanker(banker); + else + SetBanker(0); + PacketStruct* packet = configReader.getStruct("WS_UpdateBank", GetVersion()); + if(packet){ + packet->setDataByName("spawn_id", GetPlayer()->GetIDWithPlayerSpawn(banker)); + int64 coins = GetPlayer()->GetInfoStruct()->bank_coin_copper + GetPlayer()->GetInfoStruct()->bank_coin_silver * 100 + + GetPlayer()->GetInfoStruct()->bank_coin_gold * 10000 + (int64)GetPlayer()->GetInfoStruct()->bank_coin_plat * 1000000; + int32 coins1, coins2; + coins1 = ((int32*)&coins)[0]; + coins2 = ((int32*)&coins)[1]; + packet->setDataByName("bank_coins", coins1); + packet->setDataByName("bank_coins2", coins2); + packet->setDataByName("copper", GetPlayer()->GetInfoStruct()->coin_copper); + packet->setDataByName("silver", GetPlayer()->GetInfoStruct()->coin_silver); + packet->setDataByName("gold", GetPlayer()->GetInfoStruct()->coin_gold); + packet->setDataByName("plat", GetPlayer()->GetInfoStruct()->coin_plat); + if(!cancel) + packet->setDataByName("display", 1); + QueuePacket(packet->serialize()); + safe_delete(packet); + } + } + +} + +void Client::BankWithdrawal(int64 amount){ + bool cheater = false; + if(GetBanker() && amount > 0){ + string withdrawal = ""; + char withdrawal_data[512] = {0}; + int32 tmp = 0; + if(amount >= 1000000){ + tmp = amount/1000000; + if(tmp > GetPlayer()->GetBankCoinsPlat()) + cheater = true; + else{ + GetPlayer()->GetInfoStruct()->bank_coin_plat -= tmp; + GetPlayer()->GetInfoStruct()->coin_plat += tmp; + amount -= (int64)tmp *1000000; + sprintf(withdrawal_data, "%u Platinum ", tmp); + withdrawal.append(withdrawal_data); + memset(withdrawal_data, 0, sizeof(withdrawal_data)); + } + } + if(!cheater && amount >= 10000){ + tmp = amount/10000; + if(tmp > GetPlayer()->GetBankCoinsGold()) + cheater = true; + else{ + GetPlayer()->GetInfoStruct()->bank_coin_gold -= tmp; + if ((GetPlayer()->GetInfoStruct()->coin_gold + tmp) > 100) { + GetPlayer()->GetInfoStruct()->coin_gold = (GetPlayer()->GetInfoStruct()->coin_gold + tmp) - 100; + GetPlayer()->GetInfoStruct()->coin_plat += 1; + } + else + GetPlayer()->GetInfoStruct()->coin_gold += tmp; + amount -= tmp *10000; + sprintf(withdrawal_data, "%u Gold ", tmp); + withdrawal.append(withdrawal_data); + memset(withdrawal_data, 0, sizeof(withdrawal_data)); + } + } + if(!cheater && amount >= 100){ + tmp = amount/100; + if(tmp > GetPlayer()->GetBankCoinsSilver()) + cheater = true; + else{ + GetPlayer()->GetInfoStruct()->bank_coin_silver -= tmp; + if ((GetPlayer()->GetInfoStruct()->coin_silver + tmp) > 100) { + GetPlayer()->GetInfoStruct()->coin_silver = (GetPlayer()->GetInfoStruct()->coin_silver + tmp) - 100; + GetPlayer()->GetInfoStruct()->coin_gold += 1; + } + else + GetPlayer()->GetInfoStruct()->coin_silver += tmp; + amount -= tmp *100; + sprintf(withdrawal_data, "%u Silver ", tmp); + withdrawal.append(withdrawal_data); + memset(withdrawal_data, 0, sizeof(withdrawal_data)); + } + } + if(!cheater){ + if(amount > 0){ + sprintf(withdrawal_data, "%u Copper ", (int32)amount); + withdrawal.append(withdrawal_data); + GetPlayer()->GetInfoStruct()->bank_coin_copper -= amount; + if ((GetPlayer()->GetInfoStruct()->coin_copper + amount) > 100) { + GetPlayer()->GetInfoStruct()->coin_copper = (GetPlayer()->GetInfoStruct()->coin_copper + amount) - 100; + GetPlayer()->GetInfoStruct()->coin_silver += 1; + } + else + GetPlayer()->GetInfoStruct()->coin_copper += amount; + } + if(withdrawal.length() > 0){ + withdrawal.append("withdrawn "); + sprintf(withdrawal_data, "(%u Plat %u Gold %u Silver %u Copper in the bank now.)", GetPlayer()->GetInfoStruct()->bank_coin_plat, + GetPlayer()->GetInfoStruct()->bank_coin_gold, GetPlayer()->GetInfoStruct()->bank_coin_silver, GetPlayer()->GetInfoStruct()->bank_coin_copper); + withdrawal.append(withdrawal_data); + SimpleMessage(CHANNEL_COLOR_REVIVE, withdrawal.c_str()); + } + } + else + Message(CHANNEL_COLOR_RED, "Stop trying to cheat!"); + player->SetCharSheetChanged(true); + Bank(banker); + } + +} + +void Client::BankDeposit(int64 amount){ + bool cheater = false; + if(GetBanker() && amount > 0){ + int32 tmp = 0; + char deposit_data[512] = {0}; + string deposit = ""; + if(amount >= 1000000){ + tmp = amount/1000000; + if(tmp > GetPlayer()->GetCoinsPlat()) + cheater = true; + else{ + GetPlayer()->GetInfoStruct()->bank_coin_plat += tmp; + GetPlayer()->GetInfoStruct()->coin_plat -= tmp; + amount -= (int64)tmp *1000000; + sprintf(deposit_data, "%u Platinum ", tmp); + deposit.append(deposit_data); + memset(deposit_data, 0, sizeof(deposit_data)); + } + } + if(!cheater && amount >= 10000){ + tmp = amount/10000; + if(tmp > GetPlayer()->GetCoinsGold()) + cheater = true; + else{ + if ((GetPlayer()->GetInfoStruct()->bank_coin_gold + tmp) > 100) { + GetPlayer()->GetInfoStruct()->bank_coin_gold = (GetPlayer()->GetInfoStruct()->bank_coin_gold + tmp) - 100; + GetPlayer()->GetInfoStruct()->bank_coin_plat += 1; + } + else + GetPlayer()->GetInfoStruct()->bank_coin_gold += tmp; + GetPlayer()->GetInfoStruct()->coin_gold -= tmp; + amount -= tmp *10000; + sprintf(deposit_data, "%u Gold ", tmp); + deposit.append(deposit_data); + memset(deposit_data, 0, sizeof(deposit_data)); + } + } + if(!cheater && amount >= 100){ + tmp = amount/100; + if(tmp > GetPlayer()->GetCoinsSilver()) + cheater = true; + else{ + if ((GetPlayer()->GetInfoStruct()->bank_coin_silver + tmp) > 100) { + GetPlayer()->GetInfoStruct()->bank_coin_silver = (GetPlayer()->GetInfoStruct()->bank_coin_silver + tmp) - 100; + GetPlayer()->GetInfoStruct()->bank_coin_gold += 1; + } + else + GetPlayer()->GetInfoStruct()->bank_coin_silver += tmp; + GetPlayer()->GetInfoStruct()->coin_silver -= tmp; + amount -= tmp *100; + sprintf(deposit_data, "%u Silver ", tmp); + deposit.append(deposit_data); + memset(deposit_data, 0, sizeof(deposit_data)); + } + } + if(!cheater){ + if(amount > 0){ + sprintf(deposit_data, "%u Copper ", (int32)amount); + deposit.append(deposit_data); + if ((GetPlayer()->GetInfoStruct()->bank_coin_copper + amount) > 100) { + GetPlayer()->GetInfoStruct()->bank_coin_copper = (GetPlayer()->GetInfoStruct()->bank_coin_copper + amount) - 100; + GetPlayer()->GetInfoStruct()->bank_coin_silver += 1; + } + else + GetPlayer()->GetInfoStruct()->bank_coin_copper += amount; + GetPlayer()->GetInfoStruct()->coin_copper -= amount; + } + if(deposit.length() > 0){ + deposit.append("deposited "); + sprintf(deposit_data, "(%u Plat %u Gold %u Silver %u Copper in the bank now.)", GetPlayer()->GetInfoStruct()->bank_coin_plat, + GetPlayer()->GetInfoStruct()->bank_coin_gold, GetPlayer()->GetInfoStruct()->bank_coin_silver, GetPlayer()->GetInfoStruct()->bank_coin_copper); + deposit.append(deposit_data); + SimpleMessage(CHANNEL_COLOR_REVIVE, deposit.c_str()); + } + } + else + Message(CHANNEL_COLOR_RED, "Stop trying to cheat!"); + player->SetCharSheetChanged(true); + Bank(banker); + } + +} + +void Client::AddPendingQuestReward(Quest* quest){ + MQuestPendingUpdates.writelock(__FUNCTION__, __LINE__); + quest_pending_reward.push_back(quest); + quest_updates = true; + MQuestPendingUpdates.releasewritelock(__FUNCTION__, __LINE__); + +} + +void Client::AddPendingQuestUpdate(int32 quest_id, int32 step_id, int32 progress){ + MQuestPendingUpdates.writelock(__FUNCTION__, __LINE__); + quest_pending_updates[quest_id][step_id] = progress; + quest_updates = true; + MQuestPendingUpdates.releasewritelock(__FUNCTION__, __LINE__); + +} + +void Client::ProcessQuestUpdates(){ + if(quest_pending_updates.size() > 0){ + map > tmp_quest_updates; + MQuestPendingUpdates.writelock(__FUNCTION__, __LINE__); + tmp_quest_updates.insert(quest_pending_updates.begin(), quest_pending_updates.end()); + quest_pending_updates.clear(); + MQuestPendingUpdates.releasewritelock(__FUNCTION__, __LINE__); + map >::iterator quest_itr; + map::iterator step_itr; + for(quest_itr = tmp_quest_updates.begin(); quest_itr != tmp_quest_updates.end(); quest_itr++){ + for(step_itr = quest_itr->second.begin(); step_itr != quest_itr->second.end(); step_itr++){ + if(step_itr->second == 0xFFFFFFFF){ + SetStepComplete(quest_itr->first, step_itr->first); + player->SendQuestRequiredSpawns(quest_itr->first); + } + else + AddStepProgress(quest_itr->first, step_itr->first, step_itr->second); + } + } + } + if(quest_pending_reward.size() > 0){ + vector::iterator itr; + vector tmp_quest_rewards; + MQuestPendingUpdates.writelock(__FUNCTION__, __LINE__); + tmp_quest_rewards.insert(tmp_quest_rewards.begin(), quest_pending_reward.begin(), quest_pending_reward.end()); + quest_pending_reward.clear(); + MQuestPendingUpdates.releasewritelock(__FUNCTION__, __LINE__); + for(itr = tmp_quest_rewards.begin(); itr != tmp_quest_rewards.end(); itr++){ + GiveQuestReward(*itr); + } + } + quest_updates = false; + +} + +void Client::CheckQuestQueue(){ + MQuestQueue.writelock(); + last_update_time = 0; + vector::iterator itr; + QueuedQuest* queued_quest = 0; + for(itr = quest_queue.begin(); itr != quest_queue.end(); itr++){ + queued_quest = *itr; + SendQuestUpdateStepImmediately(queued_quest->quest, queued_quest->step, queued_quest->display_quest_helper); + safe_delete(queued_quest); + } + quest_queue.clear(); + MQuestQueue.releasewritelock(); + +} + +void Client::SetStepComplete(int32 quest_id, int32 step){ + Quest* quest = player->SetStepComplete(quest_id, step); + if(quest){ + SendQuestUpdate(quest); + GetCurrentZone()->SendQuestUpdates(this); + } + +} + +void Client::AddStepProgress(int32 quest_id, int32 step, int32 progress) { + Quest* quest = player->AddStepProgress(quest_id, step, progress); + if (quest) { + SendQuestUpdate(quest); + GetCurrentZone()->SendQuestUpdates(this); + } +} + +void Client::CheckPlayerQuestsKillUpdate(Spawn* spawn){ + vector* quest_updates = player->CheckQuestsKillUpdate(spawn); + if(quest_updates){ + for(int32 i=0;isize();i++) + SendQuestUpdate(quest_updates->at(i)); + } + safe_delete(quest_updates); + vector* quest_failures = player->CheckQuestsFailures(); + if(quest_failures){ + for(int32 i=0;isize();i++) + SendQuestFailure(quest_failures->at(i)); + } + safe_delete(quest_failures); + +} + +void Client::CheckPlayerQuestsChatUpdate(Spawn* spawn){ + vector* quest_updates = player->CheckQuestsChatUpdate(spawn); + if(quest_updates){ + for(int32 i=0;isize();i++) + SendQuestUpdate(quest_updates->at(i)); + GetCurrentZone()->SendQuestUpdates(this); + } + safe_delete(quest_updates); +} + +void Client::CheckPlayerQuestsItemUpdate(Item* item){ + vector* quest_updates = player->CheckQuestsItemUpdate(item); + if(quest_updates){ + for(int32 i=0;isize();i++) + SendQuestUpdate(quest_updates->at(i)); + } + safe_delete(quest_updates); + vector* quest_failures = player->CheckQuestsFailures(); + if(quest_failures){ + for(int32 i=0;isize();i++) + SendQuestFailure(quest_failures->at(i)); + } + safe_delete(quest_failures); +} + +void Client::CheckPlayerQuestsLocationUpdate(){ + vector* quest_updates = player->CheckQuestsLocationUpdate(); + if(quest_updates){ + for(int32 i=0;isize();i++) + SendQuestUpdate(quest_updates->at(i)); + } + safe_delete(quest_updates); +} + +void Client::CheckPlayerQuestsSpellUpdate(Spell* spell){ + vector* quest_updates = player->CheckQuestsSpellUpdate(spell); + if(quest_updates) { + for(int32 i = 0; i < quest_updates->size(); i++) + SendQuestUpdate(quest_updates->at(i)); + } + safe_delete(quest_updates); + vector* quest_failures = player->CheckQuestsFailures(); + if(quest_failures){ + for(int32 i = 0; i< quest_failures->size(); i++) + SendQuestFailure(quest_failures->at(i)); + } + safe_delete(quest_failures); +} + +void Client::AddPendingQuest(Quest* quest){ + player->pending_quests[quest->GetQuestID()] = quest; + EQ2Packet* outapp = quest->OfferQuest(GetVersion(), player); + //DumpPacket(outapp); + QueuePacket(outapp); +} + +Quest* Client::GetActiveQuest(int32 quest_id){ + if(player->player_quests.count(quest_id) > 0) { + LogWrite(CCLIENT__DEBUG, 0, "Client", "Found %u active quests for char_id: %u", player->player_quests.count(quest_id), player->GetCharacterID()); + + return player->player_quests[quest_id]; + } + + return 0; +} + +Quest* Client::GetPendingQuest(int32 id){ + if(player->pending_quests.count(id) > 0) { + LogWrite(CCLIENT__DEBUG, 0, "Client", "Found %u pending quests for char_id: %u", player->pending_quests.count(id), player->GetCharacterID()); + + return player->pending_quests[id]; + } + + return 0; +} + +void Client::RemovePendingQuest(Quest* quest){ + player->pending_quests.erase(quest->GetQuestID()); + +} + +void Client::SetPlayerQuest(Quest* quest, map* progress){ + if(!quest || !progress) { + return; + } + map::iterator itr; + QuestStep* step = 0; + player->SetZone(GetCurrentZone()); + for(itr = progress->begin(); itr != progress->end(); itr++){ + step = quest->GetQuestStep(itr->first); + if(step && itr->second > 0){ + step->SetStepProgress(itr->second); + if(lua_interface && step->GetQuestCurrentQuantity() >= step->GetQuestNeededQuantity()) + lua_interface->CallQuestFunction(quest, "Reload", player, step->GetStepID()); + } + } + +} + +void Client::AddPlayerQuest(Quest* quest, bool call_accepted, bool send_packets){ + if(player->player_quests.count(quest->GetQuestID()) > 0) { + if (player->player_quests[quest->GetQuestID()]->GetQuestFlags() > 0) + quest->SetQuestFlags(player->player_quests[quest->GetQuestID()]->GetQuestFlags()); + + RemovePlayerQuest(quest->GetQuestID(), false, false); + } + player->player_quests[quest->GetQuestID()] = quest; + quest->SetPlayer(player); + current_quest_id = quest->GetQuestID(); + if(send_packets && quest->GetQuestGiver() > 0) + GetCurrentZone()->SendSpawnChanges(quest->GetQuestGiver(), this, false, true); + if(lua_interface && call_accepted) + lua_interface->CallQuestFunction(quest, "Accepted", player); + if(send_packets) { + LogWrite(CCLIENT__DEBUG, 0, "Client", "Send Quest Journal..."); + //SendQuestJournal(); + SendQuestJournalUpdate(quest); + + // sent twice to match live + quest->SetTracked(false); + QueuePacket(quest->QuestJournalReply(GetVersion(), GetNameCRC(), player)); + quest->SetTracked(true); + QueuePacket(quest->QuestJournalReply(GetVersion(), GetNameCRC(), player)); + } + //This isn't during a load screen, so update spawns with required quests + if(call_accepted) + player->SendQuestRequiredSpawns(quest->GetQuestID()); + +} + +void Client::RemovePlayerQuest(int32 id, bool send_update, bool delete_quest){ + if(current_quest_id == id) + current_quest_id = 0; + if(player->player_quests.count(id) > 0){ + if(delete_quest){ + player->player_quests[id]->SetDeleted(true); + database.DeleteCharacterQuest(id, GetCharacterID(), player->GetCompletedPlayerQuests()->count(id) > 0); + } + if(send_update && player->player_quests[id]->GetQuestGiver() > 0) + GetCurrentZone()->SendSpawnChanges(player->player_quests[id]->GetQuestGiver(), this, false, true); + if(send_update) { + LogWrite(CCLIENT__DEBUG, 0, "Client", "Send Quest Journal..."); + SendQuestJournal(); + } + player->RemoveQuest(id, delete_quest); + if(send_update) { + LogWrite(CCLIENT__DEBUG, 0, "Client", "Send Quest Journal..."); + SendQuestJournal(); + } + } + +} + +void Client::SendQuestUpdateStepImmediately(Quest* quest, int32 step, bool display_quest_helper){ + if(quest){ + QuestStep* quest_step = quest->GetQuestStep(step); + if(quest_step){ + QueuePacket(quest->QuestJournalReply(GetVersion(), GetNameCRC(), player, quest_step, 1, false, false, display_quest_helper)); + quest_step->WasUpdated(false); + } + } + +} + +void Client::SendQuestUpdateStep(Quest* quest, int32 step, bool display_quest_helper){ + QueuedQuest* item = new QueuedQuest; + item->quest = quest; + item->step = step; + item->display_quest_helper = display_quest_helper; + MQuestQueue.writelock(); + quest_queue.push_back(item); + last_update_time = Timer::GetCurrentTime2(); + MQuestQueue.releasewritelock(); + +} + +void Client::SendQuestFailure(Quest* quest){ + vector* failures = quest->GetQuestFailures(); + if(failures){ + QuestStep* step = 0; + for(int32 i=0;isize();i++){ + step = failures->at(i); + QueuePacket(quest->QuestJournalReply(GetVersion(), GetNameCRC(), player, step, 1, false, true)); + LogWrite(CCLIENT__DEBUG, 0, "Client", "Send Quest Journal..."); + SendQuestJournal(); + } + failures->clear(); + } + +} + +void Client::SendQuestUpdate(Quest* quest){ + vector* updates = quest->GetQuestUpdates(); + if(updates){ + QuestStep* step = 0; + for(int32 i=0;isize();i++){ + step = updates->at(i); + if(lua_interface && step->Complete() && quest->GetCompleteAction(step->GetStepID())) + lua_interface->CallQuestFunction(quest, quest->GetCompleteAction(step->GetStepID()), player); + if(step->WasUpdated()){ + SendQuestJournal(); + QueuePacket(quest->QuestJournalReply(GetVersion(), GetNameCRC(), player, step)); + } + LogWrite(CCLIENT__DEBUG, 0, "Client", "Send Quest Journal..."); + + } + if(lua_interface && quest->GetCompleted() && quest->GetCompleteAction()) + lua_interface->CallQuestFunction(quest, quest->GetCompleteAction(), player); + if(quest->GetCompleted()){ + if (quest->GetQuestReturnNPC() > 0) + GetCurrentZone()->SendSpawnChanges(quest->GetQuestReturnNPC(), this, false, true); + if (quest->GetCompletedFlag()) + quest->SetCompletedFlag(false); + } + + updates->clear(); + } + +} + +void Client::SendQuestJournal(bool all_quests, Client* client){ + if(!client) + client = this; + PacketStruct* packet = player->GetQuestJournalPacket(all_quests, GetVersion(), GetNameCRC(), current_quest_id); + if(packet){ + EQ2Packet* outapp = packet->serialize(); + //DumpPacket(outapp); + client->QueuePacket(outapp); + safe_delete(packet); + } +} + +void Client::SendQuestJournalUpdate(Quest* quest) { + PacketStruct* packet = player->GetQuestJournalPacket(quest, GetVersion(), GetNameCRC()); + if (packet) { + QueuePacket(packet->serialize()); + safe_delete(packet); + } +} + +void Client::ReloadQuests(){ + vector ids = player->GetQuestIDs(); + Quest* quest = 0; + for(int32 i=0;i::iterator itr; + vector* items = 0; + Quest* quest = 0; + MPendingQuestAccept.lock(); + for(itr = pending_quest_accept.begin(); itr != pending_quest_accept.end(); itr++){ + quest = *itr; + items = quest->GetSelectableRewardItems(); + if(items && items->size() > 0){ + for(int32 i=0;isize();i++){ + if(items->at(i)->details.item_id == item_id){ + found_quest = true; + break; + } + } + } + else if(item_id == 0) + found_quest = true; + if(found_quest){ + pending_quest_accept.erase(itr); + break; + } + } + MPendingQuestAccept.unlock(); + + if(found_quest) + return quest; + return 0; +} + +void Client::AcceptQuestReward(Quest* quest, int32 item_id){ + int8 num_slots_needed = 0; + int16 free_slots = player->item_list.GetNumberOfFreeSlots(); + Item* master_item = 0; + if(item_id > 0){ + num_slots_needed++; + master_item = master_item_list.GetItem(item_id); + } + vector* items = quest->GetRewardItems(); + if(items && items->size() > 0) + num_slots_needed += items->size(); + if(free_slots >= num_slots_needed || (player->item_list.HasFreeBagSlot() && master_item && master_item->IsBag() && master_item->bag_info->num_slots >= items->size())){ + if(master_item) + AddItem(item_id); + if(items && items->size() > 0){ + for(int32 i=0;isize();i++) + AddItem(new Item(items->at(i))); + } + EQ2Packet* outapp = player->SendInventoryUpdate(GetVersion()); + if(outapp) + QueuePacket(outapp); + map* reward_factions = quest->GetRewardFactions(); + map::iterator itr; + for (itr = reward_factions->begin(); itr != reward_factions->end(); itr++) { + int32 faction_id = itr->first; + sint32 amount = itr->second; + if (amount > 0) + player->GetFactions()->IncreaseFaction(faction_id, amount); + else + player->GetFactions()->DecreaseFaction(faction_id, (amount * -1)); + } + } + else{ + MPendingQuestAccept.lock(); + pending_quest_accept.push_back(quest); + MPendingQuestAccept.unlock(); + SimpleMessage(CHANNEL_COLOR_RED, "You do not have enough free slots! Free some slots and try again."); + DisplayQuestComplete(quest); + } + +} + +void Client::DisplayQuestComplete(Quest* quest){ + PacketStruct* packet = configReader.getStruct("WS_QuestComplete", GetVersion()); + if(packet){ + packet->setDataByName("title", "Quest Reward!"); + packet->setDataByName("name", quest->GetName()); + packet->setDataByName("description", quest->GetDescription()); + packet->setDataByName("level", quest->GetLevel()); + packet->setDataByName("encounter_level", quest->GetEncounterLevel()); + int8 difficulty = 0; + if((string)quest->GetType() == "Tradeskill") + difficulty = player->GetTSArrowColor(quest->GetLevel()); + else + difficulty = player->GetArrowColor(quest->GetLevel()); + packet->setDataByName("difficulty", difficulty); + int64 rewarded_coin = 0; + if (quest->GetCoinsReward() > 0){ + if (quest->GetCoinsRewardMax() > 0) + rewarded_coin = MakeRandomInt(quest->GetCoinsReward(), quest->GetCoinsRewardMax()); + else + rewarded_coin = quest->GetCoinsReward(); + } + quest->SetGeneratedCoin(rewarded_coin); + packet->setDataByName("max_coin", rewarded_coin); + packet->setDataByName("min_coin", rewarded_coin); + packet->setDataByName("status_points", quest->GetStatusPoints()); + vector* items2 = quest->GetSelectableRewardItems(); + vector* items = quest->GetRewardItems(); + if(items){ + packet->setArrayLengthByName("num_rewards", items->size()); + for(int32 i=0;isize();i++){ + packet->setArrayDataByName("reward_id", items->at(i)->details.item_id, i); + if(version < 860) + packet->setItemArrayDataByName("item", items->at(i), player, i, 0, -1); + else if (version < 1193) + packet->setItemArrayDataByName("item", items->at(i), player, i); + else + packet->setItemArrayDataByName("item", items->at(i), player, i, 0, 2); + } + } + if(items2 && items2->size() > 0){ + packet->setArrayLengthByName("num_select_rewards", items2->size()); + for(int32 i=0;isize();i++){ + packet->setArrayDataByName("select_reward_id", items2->at(i)->details.item_id, i); + if(version < 860) + packet->setItemArrayDataByName("select_item", items2->at(i), player, i, 0, -1); + else if (version < 1193) + packet->setItemArrayDataByName("select_item", items2->at(i), player, i); + else + packet->setItemArrayDataByName("select_item", items2->at(i), player, i, 0, 2); + } + } + map* reward_factions = quest->GetRewardFactions(); + if (reward_factions && reward_factions->size() > 0) { + packet->setArrayLengthByName("num_factions", reward_factions->size()); + map::iterator itr; + int16 index = 0; + for (itr = reward_factions->begin(); itr != reward_factions->end(); itr++) { + int32 faction_id = itr->first; + sint32 amount = itr->second; + const char* faction_name = master_faction_list.GetFactionNameByID(faction_id); + if (faction_name) { + packet->setArrayDataByName("faction_name", const_cast(faction_name), index); + packet->setArrayDataByName("amount", amount, index); + } + index++; + } + } + EQ2Packet* outapp = packet->serialize(); + // DumpPacket(outapp); + QueuePacket(outapp); + safe_delete(packet); + } + +} + +void Client::DisplayRandomizeFeatures(int32 flags) { + SimpleMessage(CHANNEL_COLOR_WHITE, "Showing Active Randomize Features:"); + if(flags > 0) { + if (flags & RANDOMIZE_GENDER) + SimpleMessage(CHANNEL_COLOR_WHITE, "- Gender"); + if (flags & RANDOMIZE_RACE) + SimpleMessage(CHANNEL_COLOR_WHITE, "- Race"); + if (flags & RANDOMIZE_MODEL_TYPE) + SimpleMessage(CHANNEL_COLOR_WHITE, "- Model"); + if (flags & RANDOMIZE_FACIAL_HAIR_TYPE) + SimpleMessage(CHANNEL_COLOR_WHITE, "- Facial Hair"); + if (flags & RANDOMIZE_HAIR_TYPE) + SimpleMessage(CHANNEL_COLOR_WHITE, "- Hair"); + if (flags & RANDOMIZE_WING_TYPE) + SimpleMessage(CHANNEL_COLOR_WHITE, "- Wing"); + if (flags & RANDOMIZE_CHEEK_TYPE) + SimpleMessage(CHANNEL_COLOR_WHITE, "- Cheek"); + if (flags & RANDOMIZE_CHIN_TYPE) + SimpleMessage(CHANNEL_COLOR_WHITE, "- Chin"); + if (flags & RANDOMIZE_EAR_TYPE) + SimpleMessage(CHANNEL_COLOR_WHITE, "- Ear"); + if (flags & RANDOMIZE_EYE_BROW_TYPE) + SimpleMessage(CHANNEL_COLOR_WHITE, "- Eyebrow"); + if (flags & RANDOMIZE_EYE_TYPE) + SimpleMessage(CHANNEL_COLOR_WHITE, "- Eye"); + if (flags & RANDOMIZE_LIP_TYPE) + SimpleMessage(CHANNEL_COLOR_WHITE, "- Lip"); + if (flags & RANDOMIZE_NOSE_TYPE) + SimpleMessage(CHANNEL_COLOR_WHITE, "- Nose"); + if (flags & RANDOMIZE_EYE_COLOR) + SimpleMessage(CHANNEL_COLOR_WHITE, "- Eye Color"); + if (flags & RANDOMIZE_HAIR_COLOR1) + SimpleMessage(CHANNEL_COLOR_WHITE, "- Hair Color1"); + if (flags & RANDOMIZE_HAIR_COLOR2) + SimpleMessage(CHANNEL_COLOR_WHITE, "- Hair Color2"); + if (flags & RANDOMIZE_HAIR_HIGHLIGHT) + SimpleMessage(CHANNEL_COLOR_WHITE, "- Hair Color Highlights"); + if (flags & RANDOMIZE_HAIR_FACE_COLOR) + SimpleMessage(CHANNEL_COLOR_WHITE, "- Facial Hair Color"); + if (flags & RANDOMIZE_HAIR_FACE_HIGHLIGHT_COLOR) + SimpleMessage(CHANNEL_COLOR_WHITE, "- Facial Hair Color Highlights"); + if (flags & RANDOMIZE_HAIR_TYPE_COLOR) + SimpleMessage(CHANNEL_COLOR_WHITE, "- Hair Type Color"); + if (flags & RANDOMIZE_HAIR_TYPE_HIGHLIGHT_COLOR) + SimpleMessage(CHANNEL_COLOR_WHITE, "- Hair Type Highlights"); + if (flags & RANDOMIZE_SKIN_COLOR) + SimpleMessage(CHANNEL_COLOR_WHITE, "- Skin Color"); + if (flags & RANDOMIZE_WING_COLOR1) + SimpleMessage(CHANNEL_COLOR_WHITE, "- Wing Color1"); + if (flags & RANDOMIZE_WING_COLOR2) + SimpleMessage(CHANNEL_COLOR_WHITE, "- Wing Color2"); + } + else + { + SimpleMessage(CHANNEL_COLOR_WHITE, "- No Randomization Set."); + } + +} + +void Client::GiveQuestReward(Quest* quest){ + current_quest_id = 0; + MPendingQuestAccept.lock(); + pending_quest_accept.push_back(quest); + MPendingQuestAccept.unlock(); + + quest->IncrementCompleteCount(); + player->AddCompletedQuest(quest); + + LogWrite(CCLIENT__DEBUG, 0, "Client", "Send Quest Journal..."); + SendQuestJournal(); + player->RemoveQuest(quest->GetQuestID(), false); + DisplayQuestComplete(quest); + if(quest->GetExpReward() > 0){ + int16 level = player->GetLevel(); + int32 xp = quest->GetExpReward(); + if (player->AddXP(xp)) { + Message(CHANNEL_COLOR_EXP, "You gain %u experience!",(int32)xp); + if(player->GetLevel() != level) + ChangeLevel(level, player->GetLevel()); + player->SetCharSheetChanged(true); + } + } + if(quest->GetTSExpReward() > 0){ + int8 ts_level = player->GetTSLevel(); + int32 xp = quest->GetTSExpReward(); + if (player->AddTSXP(xp)) { + Message(CHANNEL_COLOR_EXP, "You gain %u tradeskill experience!", (int32)xp); + if(player->GetTSLevel() != ts_level) + ChangeTSLevel(ts_level, player->GetTSLevel()); + player->SetCharSheetChanged(true); + } + } + int64 total_coins = quest->GetGeneratedCoin(); + if(total_coins > 0){ + player->AddCoins(total_coins); + PlaySound("coin_cha_ching"); + char tmp[64] = {0}; + string message = "You receive "; + int32 val = 0; + if(total_coins >= 1000000){ + val = total_coins / 1000000; + total_coins -= 1000000 * val; + sprintf(tmp, "%u Platinum ", val); + message.append(tmp); + memset(tmp, 0, 64); + } + if(total_coins >= 10000){ + val = total_coins / 10000; + total_coins -= 10000 * val; + sprintf(tmp, "%u Gold ", val); + message.append(tmp); + memset(tmp, 0, 64); + } + if(total_coins >= 100){ + val = total_coins / 100; + total_coins -= 100 * val; + sprintf(tmp, "%u Silver ", val); + message.append(tmp); + memset(tmp, 0, 64); + } + if(total_coins > 0){ + sprintf(tmp, "%u Copper ", (int32)total_coins); + message.append(tmp); + } + message.append("for completing ").append(quest->GetName()); + int8 type = CHANNEL_COLOR_LOOT; + if(GetVersion() >= 973) + type = CHANNEL_COLOR_NEW_LOOT; + SimpleMessage(type, message.c_str()); + } + if(quest->GetQuestGiver() > 0) + GetCurrentZone()->SendSpawnChanges(quest->GetQuestGiver(), this, false, true); + RemovePlayerQuest(quest->GetQuestID(), true, false); + +} + +void Client::DisplayConversation(int32 conversation_id, int32 spawn_id, vector* conversations, const char* text, const char* mp3, int32 key1, int32 key2){ + PacketStruct* packet = configReader.getStruct("WS_DialogOpen", GetVersion()); + if(packet){ + packet->setDataByName("conversation_id", conversation_id); + packet->setDataByName("text", text); + packet->setDataByName("unknown2", 1); + conversation_map[conversation_id].clear(); + if (conversations) { + packet->setArrayLengthByName("num_responses", conversations->size()); + for(int32 i=0;isize();i++){ + packet->setArrayDataByName("response", conversations->at(i).option.c_str(), i); + if(conversations->at(i).function.length() > 0) + conversation_map[conversation_id][i] = conversations->at(i).function; + } + } + packet->setDataByName("spawn_id", spawn_id); + if(mp3){ + packet->setDataByName("voice", mp3); + packet->setDataByName("key1", key1); + packet->setDataByName("key2", key2); + } + QueuePacket(packet->serialize()); + safe_delete(packet); + } + +} + +void Client::DisplayConversation(Item* item, vector* conversations, const char* text, int8 type, const char* mp3, int32 key1, int32 key2){ + if(!item || !text || !conversations || conversations->size() == 0) { + return; + } + int32 conversation_id = GetConversationID(0, item); + if(conversation_id == 0){ + next_conversation_id++; + conversation_id = next_conversation_id; + } + conversation_items[conversation_id] = item; + if (type == 4) + DisplayConversation(conversation_id, player->GetIDWithPlayerSpawn(player), conversations, text, mp3, key1, key2); + else + DisplayConversation(conversation_id, 0xFFFFFFFF, conversations, text, mp3, key1, key2); + +} + +void Client::DisplayConversation(Entity* npc, int8 type, vector* conversations, const char* text, const char* mp3, int32 key1, int32 key2){ + if(!npc || !(type == 1 || type == 2 || type == 3) || !text /*|| !conversations || conversations->size() == 0*/) { + return; + } + int32 conversation_id = GetConversationID(npc, 0); + if(conversation_id == 0){ + next_conversation_id++; + conversation_id = next_conversation_id; + } + conversation_spawns[conversation_id] = npc; + + /* NPCs can start two different types of conversations. + * Type 1: The chat type with bubbles. + * Type 2: The dialog type with the blue box. */ + if (type == 1) + DisplayConversation(conversation_id, player->GetIDWithPlayerSpawn(npc), conversations, text, mp3, key1, key2); + else if (type == 2) + DisplayConversation(conversation_id, 0xFFFFFFFF, conversations, text, mp3, key1, key2); + else //if (type == 3) + DisplayConversation(conversation_id, player->GetIDWithPlayerSpawn(player), conversations, text, mp3, key1, key2); + +} + +void Client::CloseDialog(int32 conversation_id){ + PacketStruct* packet = configReader.getStruct("WS_ServerDialogClose", GetVersion()); + if(packet){ + packet->setDataByName("conversation_id", conversation_id); + QueuePacket(packet->serialize()); + safe_delete(packet); + } + conversation_items.erase(conversation_id); + conversation_spawns.erase(conversation_id); + +} + +int32 Client::GetConversationID(Spawn* spawn, Item* item){ + int32 conversation_id = 0; + if(spawn){ + map::iterator itr; + for(itr = conversation_spawns.begin(); itr != conversation_spawns.end(); itr++){ + if(itr->second == spawn){ + conversation_id = itr->first; + break; + } + } + } + else if(item){ + map::iterator itr; + for(itr = conversation_items.begin(); itr != conversation_items.end(); itr++){ + if(itr->second == item){ + conversation_id = itr->first; + break; + } + } + } + + return conversation_id; +} + +Spawn* Client::GetCombineSpawn(){ + return combine_spawn; +} + +bool Client::ShouldTarget(){ + return should_target; +} + +void Client::TargetSpawn(Spawn* spawn){ + should_target = false; + PacketStruct* packet = configReader.getStruct("WS_ServerUpdateTarget", GetVersion()); + if(packet){ + packet->setDataByName("spawn_id", GetPlayer()->GetIDWithPlayerSpawn(spawn)); + QueuePacket(packet->serialize()); + safe_delete(packet); + } + +} + +void Client::CombineSpawns(float radius, Spawn* spawn){ + combine_spawn = spawn; + spawn->RemoveSpawnFromGroup(true); + if(!GetCurrentZone()->AddCloseSpawnsToSpawnGroup(combine_spawn, radius)) + SimpleMessage(CHANNEL_COLOR_YELLOW, "One or more spawns are in a spawn group and cannot be combined until they are removed from their group."); + GetCurrentZone()->RepopSpawns(this, combine_spawn); + should_target = true; + +} + +void Client::AddCombineSpawn(Spawn* spawn){ + if(combine_spawn && combine_spawn != spawn && spawn){ + combine_spawn->AddSpawnToGroup(spawn); + spawn->AddSpawnToGroup(combine_spawn); + GetCurrentZone()->RepopSpawns(this, combine_spawn); + } + else if(spawn) + combine_spawn = spawn; + should_target = true; + +} + +void Client::RemoveCombineSpawn(Spawn* spawn){ + if(combine_spawn && spawn) + spawn->RemoveSpawnFromGroup(); + if(combine_spawn == spawn) + combine_spawn->RemoveSpawnFromGroup(true); + GetCurrentZone()->RepopSpawns(this, combine_spawn); + if(combine_spawn == spawn) + combine_spawn = 0; + +} + +void Client::SaveCombineSpawns(const char* name){ + if(!combine_spawn) { + return; + } + vector* spawns = combine_spawn->GetSpawnGroup(); + if(!spawns) { + return; + } + int32 count = spawns->size(); + safe_delete(spawns); + if(count == 1) + SimpleMessage(CHANNEL_COLOR_YELLOW, "Error: You only have a single Spawn in the group!"); + else if(database.SaveCombinedSpawnLocation(GetCurrentZone(), combine_spawn, name)){ + Message(CHANNEL_COLOR_YELLOW, "Successfully combined %u spawns into spawn location: %u", count, combine_spawn->GetSpawnLocationID()); + GetCurrentZone()->RemoveSpawn(combine_spawn); + } + else + SimpleMessage(CHANNEL_COLOR_YELLOW, "Error saving spawn group, check console for details."); + combine_spawn = 0; + +} + +bool Client::AddItem(int32 item_id, int16 quantity){ + Item* master_item = master_item_list.GetItem(item_id); + Item* item = 0; + if(master_item) + item = new Item(master_item); + if(item){ + if(quantity > 0 ) + item->details.count = quantity; + return AddItem(item); + } + else + Message(CHANNEL_COLOR_RED, "Could not find item with id of: %i", item_id); + + return false; +} + +bool Client::AddItem(Item* item){ + if(!item) { + return false; + } + if(item->IsBag()) + item->details.bag_id = item->details.unique_id; + if(player->AddItem(item)){ + EQ2Packet* outapp = player->SendInventoryUpdate(GetVersion()); + if(outapp){ + QueuePacket(outapp); + //resend bag desc with new item name added + outapp = player->SendBagUpdate(item->details.inv_slot_id, GetVersion()); + if(outapp) + QueuePacket(outapp); + /*EQ2Packet* app = item->serialize(client->GetVersion(), false); + DumpPacket(app); + client->QueuePacket(app); + */ + } + CheckPlayerQuestsItemUpdate(item); + if(item->GetItemScript() && lua_interface) + lua_interface->RunItemScript(item->GetItemScript(), "obtained", item, player); + } + else{ + SimpleMessage(CHANNEL_COLOR_RED, "Could not find free slot to place item."); + safe_delete(item); + return false; + } + + return true; +} + +bool Client::AddItemToBank(int32 item_id, int16 quantity) { + Item* master_item = master_item_list.GetItem(item_id); + Item* item = 0; + if (master_item) + item = new Item(master_item); + if (item) { + if (quantity > 0) + item->details.count = quantity; + return AddItemToBank(item); + } + else + Message(CHANNEL_COLOR_RED, "Could not find item with id of: %i", item_id); + + return false; +} +bool Client::AddItemToBank(Item* item) { + if (!item) { + return false; + } + if (item->IsBag()) + item->details.bag_id = item->details.unique_id; + if (player->AddItemToBank(item)) { + EQ2Packet* outapp = player->SendInventoryUpdate(GetVersion()); + if (outapp) { + QueuePacket(outapp); + //resend bag desc with new item name added + outapp = player->SendBagUpdate(item->details.inv_slot_id, GetVersion()); + if (outapp) + QueuePacket(outapp); + /*EQ2Packet* app = item->serialize(client->GetVersion(), false); + DumpPacket(app); + client->QueuePacket(app); + */ + } + CheckPlayerQuestsItemUpdate(item); + if (item->GetItemScript() && lua_interface) + lua_interface->RunItemScript(item->GetItemScript(), "obtained", item, player); + } + else { + SimpleMessage(CHANNEL_COLOR_RED, "Could not find free slot to place item."); + safe_delete(item); + return false; + } + + return true; +} +bool Client::RemoveItem(Item *item, int16 quantity) { + EQ2Packet *outapp; + bool delete_item = false; + + assert(item); + + if (quantity > 0 && !item->IsBag() && item->details.count > quantity) { + item->details.count -= quantity; + item->save_needed = true; + } + else { + database.DeleteItem(character_id, item, 0); + player->GetPlayerItemList()->RemoveItem(item, false); + delete_item = true; + } + + if ((outapp = player->SendInventoryUpdate(version))) { + QueuePacket(outapp); + if (item->GetItemScript() && lua_interface) + lua_interface->RunItemScript(item->GetItemScript(), "removed", item, player); + if (delete_item) + safe_delete(item); + return true; + } + + return false; +} + +void Client::SetLuaDebugClient(bool val){ + if(val) + lua_debug_timer.Start(); + lua_debug = val; + if(lua_interface && !val){ + lua_interface->RemoveDebugClients(this); + lua_debug_timer.Disable(); + } + +} + +void Client::SetMerchantTransaction(Spawn* spawn){ + merchant_transaction = spawn; + +} + +Spawn* Client::GetMerchantTransaction(){ + return merchant_transaction; +} + +void Client::SetMailTransaction(Spawn* spawn) { + mail_transaction = spawn; + mail_window.coin_copper = 0; + mail_window.coin_silver = 0; + mail_window.coin_gold = 0; + mail_window.coin_plat = 0; + mail_window.char_item_id = 0; + +} + +Spawn* Client::GetMailTransaction() { + return mail_transaction; +} + +void Client::PlaySound(const char* name){ + if(name){ + PacketStruct* packet = configReader.getStruct("WS_PlaySound", GetVersion()); + if(packet){ + packet->setMediumStringByName("name", name); + QueuePacket(packet->serialize()); + safe_delete(packet); + } + } + +} + +float Client::CalculateBuyMultiplier(int32 merchant_id){ + /*MerchantFactionMultiplier* multiplier = world.GetMerchantMultiplier(merchant_id); + if(multiplier){ + sint32 faction_val = player->GetFactions()->GetFactionValue(multiplier->faction_id); + float diff_low = faction_val - multiplier->faction_min; + if(diff_low < 0) + diff_low*=-1; + float total_diff = multiplier->faction_max - multiplier->faction_min; + if(total_diff < 0) + total_diff*=-1; + float buy_multiplier = multiplier->high_buy_multiplier - multiplier->low_buy_multiplier; + float total1 = (diff_low/total_diff); + float final_buy_multiplier = total1*buy_multiplier + total1*multiplier->low_buy_multiplier; + return final_buy_multiplier; + }*/ + + return 1; +} + +float Client::CalculateSellMultiplier(int32 merchant_id){ + /*MerchantFactionMultiplier* multiplier = world.GetMerchantMultiplier(merchant_id); + if(multiplier){ + sint32 faction_val = player->GetFactions()->GetFactionValue(multiplier->faction_id); + float diff_low = faction_val - multiplier->faction_min; + if(diff_low < 0) + diff_low*=-1; + float total_diff = multiplier->faction_max - multiplier->faction_min; + if(total_diff < 0) + total_diff*=-1; + float sell_multiplier = multiplier->high_sell_multiplier - multiplier->low_sell_multiplier; + float total1 = (diff_low/total_diff); + float final_sell_multiplier = total1*sell_multiplier + total1*multiplier->low_sell_multiplier; + return final_sell_multiplier; + }*/ + + return 1; +} + +void Client::SellItem(int32 item_id, int16 quantity, int32 unique_id){ + Spawn* spawn = GetMerchantTransaction(); + Guild* guild = GetPlayer()->GetGuild(); + if(spawn && spawn->GetMerchantID() > 0){ + int32 total_sell_price = 0; + int32 total_status_sell_price = 0; //for status + float multiplier = CalculateBuyMultiplier(spawn->GetMerchantID()); + int32 sell_price = 0; + int32 status_sell_price = 0; //for status + Item* master_item = master_item_list.GetItem(item_id); + Item* item = 0; + if (unique_id == 0) + item = player->item_list.GetItemFromID(item_id, quantity); + else + item = player->item_list.GetItemFromUniqueID(unique_id); + + if(!item) + player->item_list.GetItemFromID(item_id); + if(item && master_item){ + int32 sell_price = (int32)(master_item->sell_price * multiplier); + if(sell_price > item->sell_price) + sell_price = item->sell_price; + if(quantity > item->details.count) + quantity = item->details.count; + total_sell_price = sell_price * quantity; + + //------------------------------For Selling Status Items + status_sell_price = (int32)(master_item->sell_status * multiplier); + if (status_sell_price > item->sell_status ) + status_sell_price = item->sell_status; + if (quantity > item->details.count) + quantity = item->details.count; + if (player->GetGuild()){ + total_status_sell_price = status_sell_price * quantity; + player->GetInfoStruct()->status_points += total_status_sell_price; + guild->UpdateGuildStatus(GetPlayer(), total_status_sell_price / 10); + guild->SendGuildMemberList(); + guild->AddEXPCurrent((total_status_sell_price / 10), true); + } + if(quantity > 1) + Message(CHANNEL_COLOR_MERCHANT, "You sell %i \\aITEM %u 0:%s\\/a to %s for %s.", quantity, master_item->details.item_id, master_item->name.c_str(), spawn->GetName(), GetCoinMessage(total_sell_price).c_str()); + else + Message(CHANNEL_COLOR_MERCHANT, "You sell \\aITEM %u 0:%s\\/a to %s for %s.", master_item->details.item_id, master_item->name.c_str(), spawn->GetName(), GetCoinMessage(total_sell_price).c_str()); + player->AddCoins(total_sell_price); + AddBuyBack(unique_id, item_id, quantity, sell_price); + if(quantity >= item->details.count) { + database.DeleteItem(GetCharacterID(), item, 0); + player->item_list.DestroyItem(item->details.index); + } + else{ + item->details.count -= quantity; + item->save_needed = true; + } + EQ2Packet* outapp = player->SendInventoryUpdate(GetVersion()); + if(outapp) + QueuePacket(outapp); + if(!(spawn->GetMerchantType() & MERCHANT_TYPE_NO_BUY)) + SendSellMerchantList(); + if(!(spawn->GetMerchantType() & MERCHANT_TYPE_NO_BUY_BACK)) + SendBuyBackList(); + } + } + +} + +void Client::BuyBack(int32 item_id, int16 quantity){ + Spawn* spawn = GetMerchantTransaction(); + if(spawn && spawn->GetMerchantID() > 0){ + deque::iterator itr; + BuyBackItem* buyback = 0; + BuyBackItem* closest = 0; + MBuyBack.readlock(__FUNCTION__, __LINE__); + for(itr = buy_back_items.begin(); itr != buy_back_items.end(); itr++){ + buyback = *itr; + if(buyback->unique_id == item_id){ + closest = buyback; + quantity = buyback->quantity; + break; + } + } + MBuyBack.releasereadlock(__FUNCTION__, __LINE__); + if(closest){ + Item* item = 0; + Item* master_item = master_item_list.GetItem(closest->item_id); + if(master_item){ + item = new Item(master_item); + if(closest->quantity >= quantity) + item->details.count = quantity; + else + item->details.count = closest->quantity; + } + if(!player->item_list.HasFreeSlot() && !player->item_list.CanStack(item)) + SimpleMessage(CHANNEL_COLOR_RED, "You do not have any slots available for this item."); + else if(player->RemoveCoins(closest->quantity*closest->price)){ + bool removed = false; + if(closest->quantity == quantity){ + MBuyBack.writelock(__FUNCTION__, __LINE__); + for(itr = buy_back_items.begin(); itr != buy_back_items.end(); itr++){ + if(*itr == closest){ + buy_back_items.erase(itr); + removed = true; + break; + } + } + MBuyBack.releasewritelock(__FUNCTION__, __LINE__); + } + else{ + closest->quantity -= quantity; + closest->save_needed = true; + } + AddItem(item); + //EQ2Packet* outapp = player->SendInventoryUpdate(GetVersion()); + //if(outapp) + //QueuePacket(outapp); + if(removed){ + database.DeleteBuyBack(GetCharacterID(), closest->item_id, closest->quantity, closest->price); + safe_delete(closest); + } + if(!(spawn->GetMerchantType() & MERCHANT_TYPE_NO_BUY)) + SendSellMerchantList(); + if(!(spawn->GetMerchantType() & MERCHANT_TYPE_NO_BUY_BACK)) + SendBuyBackList(); + } + else + SimpleMessage(CHANNEL_COLOR_RED, "You cannot afford this item."); + } + } + +} + +void Client::BuyItem(int32 item_id, int16 quantity){ + // Get the merchant we are buying from + Spawn* spawn = GetMerchantTransaction(); + // Make sure the spawn has a merchant list + if(spawn && spawn->GetMerchantID() > 0){ + int32 total_buy_price = 0; + float multiplier = CalculateBuyMultiplier(spawn->GetMerchantID()); + int32 sell_price = 0; + Item* master_item = master_item_list.GetItem(item_id); + Item* item = 0; + int16 total_available = 0; + + vector* temp; + vector::iterator itr; + MerchantItemInfo* ItemInfo = 0; + temp = world.GetMerchantList(spawn->GetMerchantID()); + + for (itr = temp->begin(); itr != temp->end(); itr++) { + if ((*itr).item_id == item_id) { + ItemInfo = &(*itr); + break; + } + } + + if(master_item && ItemInfo){ + if (spawn->GetMerchantType() & MERCHANT_TYPE_LOTTO) { + quantity = 1; + total_available = 0xFFFF; + sell_price = master_item->sell_price; + } + else { + total_available = world.GetMerchantItemQuantity(spawn->GetMerchantID(), item_id); + sell_price = (int32)(master_item->sell_price * multiplier); + if(quantity > total_available) + quantity = total_available; + } + total_buy_price = sell_price * quantity; + item = new Item(master_item); + item->details.count = quantity; + if(!player->item_list.HasFreeSlot() && !player->item_list.CanStack(item)){ + SimpleMessage(CHANNEL_COLOR_RED, "You do not have any slots available for this item."); + safe_delete(item); + } + else { + // Price not set in the merchant_inventory table, use the old method + if (ItemInfo->price_item_id == 0 && ItemInfo->price_item2_id == 0 && ItemInfo->price_status == 0 && ItemInfo->price_stationcash == 0 && ItemInfo->price_coins == 0) { + if(player->RemoveCoins(total_buy_price)){ + item->SetMaxSellValue(sell_price); + if(quantity > 1) + Message(CHANNEL_COLOR_MERCHANT, "You buy %i \\aITEM %u 0:%s\\/a from %s for%s.", quantity, master_item->details.item_id, master_item->name.c_str(), spawn->GetName(), GetCoinMessage(total_buy_price).c_str()); + else + Message(CHANNEL_COLOR_MERCHANT, "You buy \\aITEM %u 0:%s\\/a from %s for%s.", master_item->details.item_id, master_item->name.c_str(), spawn->GetName(), GetCoinMessage(total_buy_price).c_str()); + AddItem(item); + CheckPlayerQuestsItemUpdate(item); + if(item && total_available < 0xFFFF){ + world.DecreaseMerchantQuantity(spawn->GetMerchantID(), item_id, quantity); + SendBuyMerchantList(); + } + //EQ2Packet* outapp = player->SendInventoryUpdate(GetVersion()); + //if(outapp) + // QueuePacket(outapp); + if(!(spawn->GetMerchantType() & MERCHANT_TYPE_NO_BUY) && !(spawn->GetMerchantType() & MERCHANT_TYPE_LOTTO)) + SendSellMerchantList(); + if (spawn->GetMerchantType() & MERCHANT_TYPE_LOTTO) + PlayLotto(total_buy_price, item->details.item_id); + } + else{ + Message(CHANNEL_COLOR_RED, "You do not have enough coin to purchase \\aITEM %u 0:%s\\/a.", master_item->details.item_id, master_item->name.c_str()); + GetCurrentZone()->SendSpellFailedPacket(this, SPELL_ERROR_NOT_ENOUGH_COIN); + PlaySound("buy_failed"); + } + } + else { + // Price set in merchant_inventory table + + // Check if the player has enough status, coins and staion cash to buy the item before checking the items + // TODO: need to add support for station cash + if (player->GetInfoStruct()->status_points >= ItemInfo->price_status && player->HasCoins(ItemInfo->price_coins * quantity)) { + // Check items + int16 item_quantity = 0; + // Default these to true in case price_item_id or price_item2_id was never set + bool hasItem1 = true; + bool hasItem2 = true; + Item* tempItem1 = 0; + Item* tempItem2 = 0; + if (ItemInfo->price_item_id != 0) { + // Same item for whatever reason lets add the quantities together + if (ItemInfo->price_item_id == ItemInfo->price_item2_id) + item_quantity = ItemInfo->price_item_qty + ItemInfo->price_item2_qty; + else + item_quantity = ItemInfo->price_item_qty; + + tempItem1 = player->item_list.GetItemFromID(ItemInfo->price_item_id); + if (tempItem1) { + if (tempItem1->details.count < item_quantity) + hasItem1 = false; + } + else { + hasItem1 = false; + } + } + + // Check item2, if item_quantity is greater then item1 quantity then item2 is the same item + // as item1 and we already checked for it so we can skip this check + if (ItemInfo->price_item2_id != 0 && item_quantity <= ItemInfo->price_item_qty) { + tempItem2 = player->item_list.GetItemFromID(ItemInfo->price_item2_id); + if (tempItem2) { + if (tempItem2->details.count < ItemInfo->price_item2_qty) + hasItem2 = false; + } + else { + hasItem2 = false; + } + } + // if we have every thing then remove the price and give the item + if (hasItem1 && hasItem2) { + player->GetInfoStruct()->status_points -= ItemInfo->price_status; + // TODO: station cash + + // The update that would normally be sent after modifing the players inventory is automatically sent in AddItem wich is called later + // so there is no need to send it more then that one time + if (tempItem1) { + if (tempItem1->details.count > item_quantity) { + tempItem1->details.count -= item_quantity; + tempItem1->save_needed = true; + } + else { + database.DeleteItem(GetCharacterID(), tempItem1, 0); + player->item_list.DestroyItem(tempItem1->details.index); + } + } + if (tempItem2) { + if (tempItem2->details.count > ItemInfo->price_item2_qty) { + tempItem2->details.count -= ItemInfo->price_item2_qty; + tempItem2->save_needed = true; + } + else { + database.DeleteItem(GetCharacterID(), tempItem2, 0); + player->item_list.DestroyItem(tempItem2->details.index); + } + } + + + // Checked to see if we had enough coins already so don't need to check the return type on RemoveCoins as it will always be true + player->RemoveCoins(ItemInfo->price_coins * quantity); + item->SetMaxSellValue(sell_price); + if(quantity > 1) + Message(CHANNEL_COLOR_MERCHANT, "You buy %i \\aITEM %u 0:%s\\/a from %s for%s.", quantity, master_item->details.item_id, master_item->name.c_str(), spawn->GetName(), GetCoinMessage(ItemInfo->price_coins * quantity).c_str()); + else + Message(CHANNEL_COLOR_MERCHANT, "You buy \\aITEM %u 0:%s\\/a from %s for%s.", master_item->details.item_id, master_item->name.c_str(), spawn->GetName(), GetCoinMessage(ItemInfo->price_coins * quantity).c_str()); + AddItem(item); + CheckPlayerQuestsItemUpdate(item); + if(item && total_available < 0xFFFF){ + world.DecreaseMerchantQuantity(spawn->GetMerchantID(), item_id, quantity); + SendBuyMerchantList(); + } + if(!(spawn->GetMerchantType() & MERCHANT_TYPE_NO_BUY) && !(spawn->GetMerchantType() & MERCHANT_TYPE_LOTTO)) + SendSellMerchantList(); + if (spawn->GetMerchantType() & MERCHANT_TYPE_LOTTO) + PlayLotto(total_buy_price, item->details.item_id); + + } + else{ + Message(CHANNEL_COLOR_RED, "You do not have enough coin to purchase \\aITEM %u 0:%s\\/a.", master_item->details.item_id, master_item->name.c_str()); + GetCurrentZone()->SendSpellFailedPacket(this, SPELL_ERROR_NOT_ENOUGH_COIN); + PlaySound("buy_failed"); + } + } + else{ + Message(CHANNEL_COLOR_RED, "You do not have enough coin to purchase \\aITEM %u 0:%s\\/a.", master_item->details.item_id, master_item->name.c_str()); + GetCurrentZone()->SendSpellFailedPacket(this, SPELL_ERROR_NOT_ENOUGH_COIN); + PlaySound("buy_failed"); + } + } + } + } + } + +} + +void Client::RepairItem(int32 item_id) { + Spawn* spawn = GetMerchantTransaction(); + if (spawn) { + Item* item = player->item_list.GetItemFromID(item_id); + if (!item) + item = player->GetEquipmentList()->GetItemFromItemID(item_id); + if (item) { + int32 repair_cost = item->CalculateRepairCost(); + if (player->RemoveCoins((int32)repair_cost)) { + item->generic_info.condition = 100; + item->save_needed = true; + QueuePacket(player->GetEquipmentList()->serialize(GetVersion())); + QueuePacket(player->SendInventoryUpdate(GetVersion())); + QueuePacket(item->serialize(version, false, player)); + Message(CHANNEL_COLOR_MERCHANT, "You give %s %s to repair your \\aITEM %u 0:%s\\/a.", spawn->GetName(), GetCoinMessage(repair_cost).c_str(), item->details.item_id, item->name.c_str()); + PlaySound("coin_cha_ching"); + if (spawn->GetMerchantType() & MERCHANT_TYPE_REPAIR) + SendRepairList(); + } + else { + LogWrite(MISC__TODO, 1, "TODO", " Send pop up that says 'Not enough coin.'\n\t(%s, function: %s, line #: %i)", __FILE__, __FUNCTION__, __LINE__); + Message(CHANNEL_COLOR_MERCHANT, "You do not have enough coin to repair \\aITEM %u 0:%s\\/a.", item->details.item_id, item->name.c_str()); + PlaySound("buy_failed"); + } + } + } + +} + +void Client::RepairAllItems() { + Spawn* spawn = GetMerchantTransaction(); + if (spawn) { + vector* repairable_items = GetRepairableItems(); + if (repairable_items && repairable_items->size() > 0) { + vector::iterator itr; + int64 total_cost = 0; + for (itr = repairable_items->begin(); itr != repairable_items->end(); itr++) + total_cost += (*itr)->CalculateRepairCost(); + if (player->RemoveCoins((int32)total_cost)) { + Message(CHANNEL_COLOR_MERCHANT, "You give %s to repair all of your items.", GetCoinMessage((int32)total_cost).c_str()); + for (itr = repairable_items->begin(); itr != repairable_items->end(); itr++) { + Item* item = *itr; + if (item) { + item->generic_info.condition = 100; + item->save_needed = true; + QueuePacket(item->serialize(version, false, player)); + Message(CHANNEL_COLOR_YELLOW, "Repaired: \\aITEM %u 0:%s\\/a.", item->details.item_id, item->name.c_str()); + } + } + QueuePacket(player->GetEquipmentList()->serialize(GetVersion())); + QueuePacket(player->SendInventoryUpdate(GetVersion())); + PlaySound("coin_cha_ching"); + if (spawn->GetMerchantType() & MERCHANT_TYPE_REPAIR) + SendRepairList(); + } + else { + LogWrite(MISC__TODO, 1, "TODO", "Send pop up that says 'Not enough coin.'\n\t(%s, function: %s, line #: %i)", __FILE__, __FUNCTION__, __LINE__); + SimpleMessage(CHANNEL_COLOR_MERCHANT, "You do not have enough coin to repair all of your items."); + PlaySound("buy_failed"); + } + } + safe_delete(repairable_items); + } + +} + +void Client::SendAchievementsList() +{ + /*map *achievements = player->GetAchievementList()->GetAchievements(); + map::iterator itr; + Achievement *achievement; + vector *requirements = 0; + vector::iterator itr2; + AchievementRequirements *requirement; + vector *rewards = 0; + vector::iterator itr3; + AchievementRewards *reward; + PacketStruct *packet; + int16 i = 0; + int16 j = 0; + int16 k = 0; + + if (!(packet = configReader.getStruct("WS_CharacterAchievements", version))) { + return; + } + + packet->setArrayLengthByName("num_achievements" , achievements->size()); + for (itr = achievements->begin(); itr != achievements->end(); itr++) { + achievement = itr->second; + packet->setArrayDataByName("achievement_id", achievement->GetID(), i); + packet->setArrayDataByName("title", achievement->GetTitle(), i); + packet->setArrayDataByName("uncompleted_text", achievement->GetUncompletedText(), i); + packet->setArrayDataByName("completed_text", achievement->GetCompletedText(), i); + packet->setArrayDataByName("category", achievement->GetCategory(), i); + packet->setArrayDataByName("expansion", achievement->GetExpansion(), i); + packet->setArrayDataByName("icon", achievement->GetIcon(), i); + packet->setArrayDataByName("point_value", achievement->GetPointValue(), i); + packet->setArrayDataByName("qty_req", achievement->GetQtyReq(), i); + packet->setArrayDataByName("hide_achievement", achievement->GetHide(), i); + packet->setArrayDataByName("unknown3", achievement->GetUnknown3a(), i); + packet->setArrayDataByName("unknown3", achievement->GetUnknown3b(), i); + requirements = achievement->GetRequirements(); + rewards = achievement->GetRewards(); + j = 0; + k = 0; + packet->setSubArrayLengthByName("num_items", requirements->size(), i, j); + for (itr2 = requirements->begin(); itr2 != requirements->end(); itr2++) { + requirement = *itr2; + packet->setSubArrayDataByName("item_name", requirement->name.c_str(), i, j); + packet->setSubArrayDataByName("item_qty_req", requirement->qty_req, i, j); + j++; + } + packet->setSubArrayLengthByName("num_rewards", achievement->GetRewards()->size(), i, k); + for (itr3 = rewards->begin(); itr3 != rewards->end(); itr3++) { + reward = *itr3; + packet->setSubArrayDataByName("reward_item", reward->reward.c_str(), i, k); + k++; + } + i++; + } + + //packet->PrintPacket(); + EQ2Packet* data = packet->serialize(); + EQ2Packet* app = new EQ2Packet(OP_ClientCmdMsg, data->pBuffer, data->size); + safe_delete(packet); + safe_delete(data); + //DumpPacket(app); + QueuePacket(app);*/ + + QueuePacket(master_achievement_list.GetAchievementPacket()->Copy()); + SendAchievementUpdate(true); +} + +void Client::SendAchievementUpdate(bool first_login) { + map *updates = player->GetAchievementUpdateList()->GetAchievementUpdates(); + map::iterator itr; + AchievementUpdate *update; + vector *update_items = 0; + vector::iterator itr2; + AchievementUpdateItems *update_item; + + int16 i = 0; + int16 j = 0; + + PacketStruct *packet; + + if (!(packet = configReader.getStruct("WS_AchievementUpdate", version))) { + return; + } + + packet->setDataByName("unknown1", first_login ? 1 : 0); + packet->setArrayLengthByName("num_achievements", updates->size()); + for (itr = updates->begin(); itr != updates->end(); itr++) { + update = itr->second; + packet->setArrayDataByName("achievement_id", update->GetID(), i); + packet->setArrayDataByName("completed_date", update->GetCompletedDate(), i); + update_items = update->GetUpdateItems(); + j = 0; + packet->setSubArrayLengthByName("num_items", update_items->size(), i); + for (itr2 = update_items->begin(); itr2 != update_items->end(); itr2++) { + update_item = *itr2; + packet->setSubArrayDataByName("item_update", update_item->item_update, i, j); + j++; + } + i++; + } + + //packet->PrintPacket(); + EQ2Packet* data = packet->serialize(); + EQ2Packet* app = new EQ2Packet(OP_ClientCmdMsg, data->pBuffer, data->size); + safe_delete(packet); + safe_delete(data); + //DumpPacket(app); + QueuePacket(app); +} + +void Client::SendBuyMerchantList(bool sell){ + Spawn* spawn = GetMerchantTransaction(); + if(spawn && spawn->GetMerchantID() > 0){ + vector* items = world.GetMerchantItemList(spawn->GetMerchantID(), spawn->GetMerchantType(), player); + if(items){ + PacketStruct* packet = configReader.getStruct("WS_UpdateMerchant", GetVersion()); + if(packet){ + float multiplier = CalculateBuyMultiplier(spawn->GetMerchantID()); + packet->setDataByName("spawn_id", player->GetIDWithPlayerSpawn(spawn)); + packet->setArrayLengthByName("num_items", items->size()); + vector::iterator itr; + sint8 item_difficulty = 0; + int32 sell_price = 0; + int i = 0; + int tmp_level = 0; + for(itr = items->begin(); itr != items->end(); itr++, i++){ + MerchantItemInfo ItemInfo = *itr; + Item* item = master_item_list.GetItem(ItemInfo.item_id); + if (!item) + continue; + + packet->setArrayDataByName("item_name", item->name.c_str(), i); + packet->setArrayDataByName("item_id", item->details.item_id, i); + packet->setArrayDataByName("stack_size", item->stack_count, i); + packet->setArrayDataByName("icon", item->details.icon, i); + if(item->generic_info.adventure_default_level > 0) + tmp_level = item->generic_info.adventure_default_level; + else + tmp_level = item->generic_info.tradeskill_default_level; + packet->setArrayDataByName("level", tmp_level, i); + packet->setArrayDataByName("tier", item->details.tier, i); + packet->setArrayDataByName("item_id2", item->details.item_id, i); + item_difficulty = player->GetArrowColor(tmp_level); + if(item_difficulty != ARROW_COLOR_WHITE && item_difficulty != ARROW_COLOR_RED && item_difficulty != ARROW_COLOR_GRAY) + item_difficulty = ARROW_COLOR_WHITE; + item_difficulty -= 6; + if(item_difficulty < 0) + item_difficulty*=-1; + packet->setArrayDataByName("item_difficulty", item_difficulty, i); + packet->setArrayDataByName("quantity", ItemInfo.quantity, i); + packet->setArrayDataByName("unknown5", 255, i); + packet->setArrayDataByName("stack_size2", item->stack_count, i); + if (GetVersion() <= 1096) + packet->setArrayDataByName("description", item->description.c_str(), i); + // If no price set in the merchant_inventory table then use the old method + if (ItemInfo.price_item_id == 0 && ItemInfo.price_item2_id == 0 && ItemInfo.price_coins == 0 && ItemInfo.price_status == 0 && ItemInfo.price_stationcash == 0) { + sell_price = (int32)(item->sell_price * multiplier); + packet->setArrayDataByName("price", sell_price, i); + } + else { + int8 count = 0; + if (ItemInfo.price_item_id != 0 && ItemInfo.price_item_qty != 0) + count++; + if (ItemInfo.price_item2_id != 0 && ItemInfo.price_item2_qty != 0) + count++; + if (count != 0) { + packet->setSubArrayLengthByName("num_tokens", count, i); + int8 index = 0; + Item* token = 0; + if (ItemInfo.price_item_id != 0) { + token = master_item_list.GetItem(ItemInfo.price_item_id); + if (item) { + packet->setSubArrayDataByName("token_icon", token->details.icon, i, index); + packet->setSubArrayDataByName("token_qty", ItemInfo.price_item_qty, i, index); + packet->setSubArrayDataByName("token_id", ItemInfo.price_item_id, i, index); + packet->setSubArrayDataByName("token_name", token->name.c_str(), i, index); + } + token = 0; + index++; + } + if (ItemInfo.price_item2_id != 0) { + token = master_item_list.GetItem(ItemInfo.price_item2_id); + if (item) { + packet->setSubArrayDataByName("token_icon", token->details.icon, i, index); + packet->setSubArrayDataByName("token_qty", ItemInfo.price_item2_qty, i, index); + packet->setSubArrayDataByName("token_id", ItemInfo.price_item2_id, i, index); + packet->setSubArrayDataByName("token_name", token->name.c_str(), i, index); + } + } + } + packet->setArrayDataByName("price", ItemInfo.price_coins, i); + packet->setArrayDataByName("status", ItemInfo.price_status, i); + packet->setArrayDataByName("station_cash", ItemInfo.price_stationcash, i); + } + } + if (sell) + packet->setDataByName("type", 130); + else + packet->setDataByName("type", 2); + EQ2Packet* outapp = packet->serialize(); + // DumpPacket(outapp); + QueuePacket(outapp); + safe_delete(packet); + } + safe_delete(items); + } + else { + // Need to send an empty packet in the event there is no item list, otherwise the + // last item list sent to the player will show for this merchant + PacketStruct* packet = configReader.getStruct("WS_UpdateMerchant", GetVersion()); + if (packet) { + packet->setDataByName("spawn_id", player->GetIDWithPlayerSpawn(spawn)); + + if (sell) + packet->setDataByName("type", 130); + else + packet->setDataByName("type", 2); + + EQ2Packet* outapp = packet->serialize(); + QueuePacket(outapp); + safe_delete(packet); + } + } + } + +} + +void Client::SendSellMerchantList(bool sell){ + Spawn* spawn = GetMerchantTransaction(); + if(spawn && spawn->GetMerchantID() > 0){ + map* items = player->GetItemList(); + if(items){ + PacketStruct* packet = configReader.getStruct("WS_UpdateMerchant", GetVersion()); + if(packet){ + vector sellable_items; + map::iterator test_itr; + for(test_itr = items->begin(); test_itr != items->end(); test_itr++){ + if(test_itr->second && !test_itr->second->CheckFlag(NO_VALUE)) + sellable_items.push_back(test_itr->second); + } + packet->setDataByName("spawn_id", player->GetIDWithPlayerSpawn(spawn)); + packet->setArrayLengthByName("num_items", sellable_items.size()); + vector::iterator itr; + Item* item = 0; + sint8 item_difficulty = 0; + float multiplier = CalculateSellMultiplier(spawn->GetMerchantID()); + int32 sell_price = 0; + Item* master_item = 0; + int i = 0; + int tmp_level = 0; + for(itr = sellable_items.begin(); itr != sellable_items.end(); itr++, i++){ + item = *itr; + master_item = master_item_list.GetItem(item->details.item_id); + if(master_item) + sell_price = (int32)(master_item->sell_price * multiplier); + else + sell_price = 0; + if(sell_price > item->sell_price) + sell_price = item->sell_price; + packet->setArrayDataByName("item_name", item->name.c_str(), i); + string thename = item->name; + + packet->setArrayDataByName("price", sell_price, i); + if (player->GetGuild()){ + packet->setArrayDataByName("status", 0, i);//additive to status 2 maybe for server bonus etc + packet->setArrayDataByName("status2", item->sell_status, i); //this one is the main status + } + packet->setArrayDataByName("item_id", item->details.item_id, i); + packet->setArrayDataByName("unique_item_id", (item->details.unique_id, i)); + packet->setArrayDataByName("stack_size", item->details.count, i); + packet->setArrayDataByName("icon", item->details.icon, i); + if(item->generic_info.adventure_default_level > 0) + tmp_level = item->generic_info.adventure_default_level; + else + tmp_level = item->generic_info.tradeskill_default_level; + packet->setArrayDataByName("level", item->details.recommended_level, i); + packet->setArrayDataByName("tier", item->details.tier, i); + packet->setArrayDataByName("item_id2", item->details.item_id, i); + item_difficulty = player->GetArrowColor(tmp_level); + if(item_difficulty != ARROW_COLOR_WHITE && item_difficulty != ARROW_COLOR_RED && item_difficulty != ARROW_COLOR_GRAY) + item_difficulty = ARROW_COLOR_WHITE; + item_difficulty -= 6; + if(item_difficulty < 0) + item_difficulty*=-1; + packet->setArrayDataByName("item_difficulty", item_difficulty, i); + if(item->details.count == 1) + packet->setArrayDataByName("quantity", 0xFFFF, i); + else + packet->setArrayDataByName("quantity", item->details.count, i); + packet->setArrayDataByName("stack_size2", item->details.count, i); + if (GetVersion() <= 1096) + packet->setArrayDataByName("description", item->description.c_str(), i); + } + if (sell) + packet->setDataByName("type", 129); + else + packet->setDataByName("type", 1); + packet->setDataByName("unknown8a", 16256,6); + packet->setDataByName("unknown8a", 16256, 10); + //packet->PrintPacket(); + EQ2Packet* outapp = packet->serialize(); + //DumpPacket(outapp); + QueuePacket(outapp); + safe_delete(packet); + } + safe_delete(items); + } + } + +} + +void Client::SendBuyBackList(bool sell){ + Spawn* spawn = GetMerchantTransaction(); + if(spawn && spawn->GetMerchantID() > 0){ + deque::iterator itr; + int i = 0; + Item* master_item = 0; + BuyBackItem* buyback = 0; + PacketStruct* packet = configReader.getStruct("WS_UpdateMerchant", GetVersion()); + if(packet){ + packet->setDataByName("spawn_id", player->GetIDWithPlayerSpawn(spawn)); + packet->setArrayLengthByName("num_items", buy_back_items.size()); + sint8 item_difficulty = 0; + MBuyBack.readlock(__FUNCTION__, __LINE__); + int tmp_level = 0; + for(itr = buy_back_items.begin(); itr != buy_back_items.end(); itr++, i++){ + buyback = *itr; + master_item = master_item_list.GetItem(buyback->item_id); + if(master_item){ + packet->setArrayDataByName("item_name", master_item->name.c_str(), i); + packet->setArrayDataByName("price", buyback->price, i); + packet->setArrayDataByName("item_id", master_item->details.item_id, i); + packet->setArrayDataByName("unique_item_id", buyback->unique_id, i); + packet->setArrayDataByName("stack_size", buyback->quantity, i); + packet->setArrayDataByName("icon", master_item->details.icon, i); + if(master_item->generic_info.adventure_default_level > 0) + tmp_level = master_item->generic_info.adventure_default_level; + else + tmp_level = master_item->generic_info.tradeskill_default_level; + packet->setArrayDataByName("level", tmp_level, i); + packet->setArrayDataByName("tier", master_item->details.tier, i); + packet->setArrayDataByName("item_id2", master_item->details.item_id, i); + item_difficulty = player->GetArrowColor(tmp_level); + if(item_difficulty != ARROW_COLOR_WHITE && item_difficulty != ARROW_COLOR_RED && item_difficulty != ARROW_COLOR_GRAY) + item_difficulty = ARROW_COLOR_WHITE; + item_difficulty -= 6; + if(item_difficulty < 0) + item_difficulty*=-1; + packet->setArrayDataByName("item_difficulty", item_difficulty, i); + if(buyback->quantity == 1) + packet->setArrayDataByName("quantity", 0xFFFF, i); + else + packet->setArrayDataByName("quantity", buyback->quantity, i); + packet->setArrayDataByName("stack_size2", buyback->quantity, i); + if (GetVersion() <= 1096) + packet->setArrayDataByName("description", master_item->description.c_str(), i); + } + } + MBuyBack.releasereadlock(__FUNCTION__, __LINE__); + if (sell) + packet->setDataByName("type", 640); + else + packet->setDataByName("type", 512); + EQ2Packet* outapp = packet->serialize(); + // DumpPacket(outapp); + QueuePacket(outapp); + safe_delete(packet); + } + } + +} + +void Client::SendRepairList() { + Spawn* spawn = GetMerchantTransaction(); + if (spawn) { + vector* repairable_items = GetRepairableItems(); + PacketStruct* packet = configReader.getStruct("WS_UpdateMerchant", GetVersion()); + if (packet) { + packet->setDataByName("spawn_id", player->GetIDWithPlayerSpawn(spawn)); + packet->setArrayLengthByName("num_items", repairable_items->size()); + Item* item = 0; + sint8 item_difficulty = 0; + int32 i = 0; + vector::iterator itr; + for (itr = repairable_items->begin(); itr != repairable_items->end(); itr++, i++) { + item = *itr; + packet->setArrayDataByName("item_name", item->name.c_str(), i); + packet->setArrayDataByName("price", item->CalculateRepairCost(), i); + packet->setArrayDataByName("item_id", item->details.item_id, i); + packet->setArrayDataByName("stack_size", item->details.count, i); + packet->setArrayDataByName("icon", item->details.icon, i); + /*if (item->generic_info.adventure_default_level > 0) + tmp_level = item->generic_info.adventure_default_level; + else + tmp_level = item->generic_info.tradeskill_default_level; + packet->setArrayDataByName("level", tmp_level, i);*/ + packet->setArrayDataByName("level", item->generic_info.adventure_default_level, i); + packet->setArrayDataByName("tier", item->details.tier, i); + packet->setArrayDataByName("item_id2", item->details.item_id, i); + item_difficulty = player->GetArrowColor(item->generic_info.adventure_default_level); + if(item_difficulty != ARROW_COLOR_WHITE && item_difficulty != ARROW_COLOR_RED && item_difficulty != ARROW_COLOR_GRAY) + item_difficulty = ARROW_COLOR_WHITE; + item_difficulty -= 6; + if(item_difficulty < 0) + item_difficulty*=-1; + packet->setArrayDataByName("item_difficulty", item_difficulty, i); + if(item->details.count == 1) + packet->setArrayDataByName("quantity", 0xFFFF, i); + else + packet->setArrayDataByName("quantity", item->details.count, i); + packet->setArrayDataByName("stack_size2", item->details.count, i); + if (GetVersion() <= 1096) + packet->setArrayDataByName("description", item->description.c_str(), i); + } + packet->setDataByName("type", 96); + EQ2Packet* outapp = packet->serialize(); + QueuePacket(outapp); + safe_delete(packet); + } + safe_delete(repairable_items); + } + +} + +void Client::ShowLottoWindow() { + Spawn* spawn = GetMerchantTransaction(); + if (spawn) { + + int32 item_id = rule_manager.GetGlobalRule(R_World, GamblingTokenItemID)->GetInt32(); + if( !item_id ) + { + LogWrite(WORLD__ERROR, 0, "World", "No GamblingTokenItemID rule set!"); + SimpleMessage(CHANNEL_COLOR_RED, "The server admin has not setup a lotto item ticket."); + + return; + } + else if( item_id == 0 ) + { + LogWrite(WORLD__ERROR, 0, "World", "Error! Invalid GamblingTokenItemID value!"); + + return; + } + + Item* item = master_item_list.GetItem(item_id); + if (!item) { + LogWrite(WORLD__ERROR, 0, "World", "The 'GamblingTokenItemID' rule value %u is not a valid item id.", item_id); + + return; + } + + LogWrite(WORLD__DEBUG, 0, "World", "GamblingTokenItemID = '%s' (%u)", item->name.c_str(), item_id); + + PacketStruct* packet = configReader.getStruct("WS_UpdateMerchant", GetVersion()); + if (packet) { + packet->setDataByName("spawn_id", player->GetIDWithPlayerSpawn(spawn)); + packet->setArrayLengthByName("num_items", 1); + packet->setArrayDataByName("item_name", item->name.c_str()); + packet->setArrayDataByName("price", item->sell_price); + packet->setArrayDataByName("item_id", item->details.item_id); + packet->setArrayDataByName("stack_size", item->details.count); + packet->setArrayDataByName("icon", item->details.icon); + packet->setArrayDataByName("level", item->generic_info.adventure_default_level); + packet->setArrayDataByName("tier", item->details.tier); + packet->setArrayDataByName("item_id2", item->details.item_id); + int8 item_difficulty = player->GetArrowColor(item->generic_info.adventure_default_level); + if(item_difficulty != ARROW_COLOR_WHITE && item_difficulty != ARROW_COLOR_RED && item_difficulty != ARROW_COLOR_GRAY) + item_difficulty = ARROW_COLOR_WHITE; + item_difficulty -= 6; + if(item_difficulty < 0) + item_difficulty*=-1; + packet->setArrayDataByName("item_difficulty", item_difficulty); + //if(item->details.count == 1) + packet->setArrayDataByName("quantity", 0xFFFF); + //else + // packet->setArrayDataByName("quantity", item->details.count); + packet->setArrayDataByName("stack_size2", item->details.count); + packet->setArrayDataByName("description", item->description.c_str()); + packet->setDataByName("type", 0x00000102); + QueuePacket(packet->serialize()); + safe_delete(packet); + } + } + +} + +void Client::PlayLotto(int32 price, int32 ticket_item_id) { + PacketStruct* packet = configReader.getStruct("WS_Lottery", GetVersion()); + if (packet) { + world.AddLottoPlayer(GetCharacterID(), Timer::GetCurrentTime2() + 4500); + int32 rolls[6] = {0}; + int32 lottery_digits[6] = {0}; + int8 num_matches = 0; + int64 jackpot = 0; + Item* item = GetPlayer()->item_list.GetItemFromID(ticket_item_id); + if (!item) { + return; + } + database.DeleteItem(GetCharacterID(), item, 0); + GetPlayer()->item_list.RemoveItem(item, true); + QueuePacket(GetPlayer()->SendInventoryUpdate(GetVersion())); + Variable* winning_numbers = variables.FindVariable("gambling_winning_numbers"); + if (!winning_numbers) { + winning_numbers = new Variable("gambling_winning_numbers", "231205182236", "Current Gigglegibber Gambling Game winning numbers"); + variables.AddVariable(winning_numbers); + database.SaveVariable(winning_numbers->GetName(), winning_numbers->GetValue(), winning_numbers->GetComment()); + } + if (strlen(winning_numbers->GetValue()) != 12) { + winning_numbers->SetValue("231205182236"); + database.SaveVariable(winning_numbers->GetName(), winning_numbers->GetValue(), winning_numbers->GetComment()); + } + try { + for (int32 i = 0; i < 12; i+=2) { + char num[4]; + strncpy(num, winning_numbers->GetValue() + i, 2); + lottery_digits[i / 2] = atoi(num); + } + } + catch (...) { + LogWrite(WORLD__ERROR, 0, "World", "Error parsing 'gambling_winning_numbers' variable"); + + return; + } + Variable* jackpot_var = variables.FindVariable("gambling_current_jackpot"); + if (!jackpot_var) { + jackpot_var = new Variable("gambling_current_jackpot", "10000", "Current Gigglegibber Gambling Game Jackpot"); + variables.AddVariable(jackpot_var); + database.SaveVariable(jackpot_var->GetName(), jackpot_var->GetValue(), jackpot_var->GetComment()); + } + try { + jackpot = atoul(jackpot_var->GetValue()); + if (jackpot < 10000) + jackpot = 10000; + } + catch (...) { + jackpot = 10000; + } + char new_jackpot[128] = {0}; + sprintf(new_jackpot, "%llu", jackpot + price); + jackpot_var->SetValue(new_jackpot); + database.SaveVariable(jackpot_var->GetName(), jackpot_var->GetValue(), jackpot_var->GetComment()); + world.PickRandomLottoDigits(rolls); + packet->setDataByName("roll_digit1", rolls[0]); + packet->setDataByName("roll_digit2", rolls[1]); + packet->setDataByName("roll_digit3", rolls[2]); + packet->setDataByName("roll_digit4", rolls[3]); + packet->setDataByName("roll_digit5", rolls[4]); + packet->setDataByName("roll_digit6", rolls[5]); + packet->setDataByName("lottery_digit1", lottery_digits[0]); + packet->setDataByName("lottery_digit2", lottery_digits[1]); + packet->setDataByName("lottery_digit3", lottery_digits[2]); + packet->setDataByName("lottery_digit4", lottery_digits[3]); + packet->setDataByName("lottery_digit5", lottery_digits[4]); + packet->setDataByName("lottery_digit6", lottery_digits[5]); + QueuePacket(packet->serialize()); + safe_delete(packet); + for (int32 i = 0; i < 6; i++) { + for (int32 j = 0; j < 6; j++) { + if (rolls[i] == lottery_digits[j]) { + num_matches++; + break; + } + } + } + char new_jackpot_str[16]; + memset(new_jackpot_str, 0, sizeof(new_jackpot_str)); + world.SetLottoPlayerNumMatches(GetCharacterID(), num_matches); + if (num_matches == 6) { + world.PickRandomLottoDigits(lottery_digits); + for (int32 i = 0; i < 12; i+=2) + sprintf(new_jackpot_str + i, "%02d", lottery_digits[i / 2]); + winning_numbers->SetValue(new_jackpot_str); + jackpot_var->SetValue("10000"); + database.SaveVariable(winning_numbers->GetName(), winning_numbers->GetValue(), winning_numbers->GetComment()); + database.SaveVariable(jackpot_var->GetName(), jackpot_var->GetValue(), jackpot_var->GetComment()); + } + } + +} + +void Client::SendGuildCreateWindow() { + Spawn* spawn = GetPlayer()->GetTarget(); + if (spawn) { + PacketStruct* packet = configReader.getStruct("WS_UpdateMerchant", GetVersion()); + if (packet) { + packet->setDataByName("spawn_id", player->GetIDWithPlayerSpawn(spawn)); + packet->setArrayLengthByName("num_items", 0); + packet->setDataByName("type", 0x00008000); + QueuePacket(packet->serialize()); + safe_delete(packet); + } + } + +} + +void Client::AddBuyBack(int32 unique_id, int32 item_id, int16 quantity, int32 price, bool save_needed){ + BuyBackItem* item = new BuyBackItem; + item->item_id = item_id; + item->unique_id = unique_id; + item->price = price; + item->quantity = quantity; + item->save_needed = save_needed; + MBuyBack.writelock(__FUNCTION__, __LINE__); + buy_back_items.push_back(item); + if(buy_back_items.size() > 10){ + safe_delete(buy_back_items.front()); + buy_back_items.pop_front(); + } + MBuyBack.releasewritelock(__FUNCTION__, __LINE__); + +} + +deque* Client::GetBuyBacks(){ + return &buy_back_items; +} + +vector* Client::GetRepairableItems() { + vector* repairable_items = new vector; + vector* equipped_items = player->GetEquipmentList()->GetAllEquippedItems(); + map* items = player->GetItemList(); + if (equipped_items && equipped_items->size() > 0) { + for (int32 i = 0; i < equipped_items->size(); i++) { + Item* item = equipped_items->at(i); + if (item && item->generic_info.condition < 100) + repairable_items->push_back(item); + } + } + if (items && items->size() > 0) { + map::iterator itr; + for (itr = items->begin(); itr != items->end(); itr++) { + Item* item = itr->second; + if (item && item->generic_info.condition < 100) + repairable_items->push_back(item); + } + } + safe_delete(equipped_items); + safe_delete(items); + + return repairable_items; +} + +void Client::SendMailList() { + int32 kiosk_id = player->GetIDWithPlayerSpawn(GetMailTransaction()); + if (kiosk_id > 0) { + PacketStruct* p = configReader.getStruct("WS_GetMailHeader", GetVersion()); + if (p) { + MutexMap* mail_list = player->GetMail(); + MutexMap::iterator itr = mail_list->begin(); + int16 i = 0; + p->setDataByName("kiosk_id", kiosk_id); + p->setArrayLengthByName("num_messages", (int16)mail_list->size()); + while (itr.Next()) { + Mail* mail = itr->second; + p->setArrayDataByName("mail_id", mail->mail_id, i); + p->setArrayDataByName("player_to_id", mail->player_to_id, i); + p->setArrayDataByName("player_from", mail->player_from.c_str(), i); + p->setArrayDataByName("subject", mail->subject.c_str(), i); + p->setArrayDataByName("unknown1", 0x0000, i); + p->setArrayDataByName("already_read", mail->already_read, i); + p->setArrayDataByName("mail_deletion", mail->expire_time - mail->time_sent, i); + p->setArrayDataByName("mail_type", mail->mail_type, i); + p->setArrayDataByName("mail_expire", 0xFFFFFFFF, i); + p->setArrayDataByName("unknown1a", 0xFFFFFFFF, i); + p->setArrayDataByName("coin_copper", mail->coin_copper, i); + p->setArrayDataByName("coin_silver", mail->coin_silver, i); + p->setArrayDataByName("coin_gold", mail->coin_gold, i); + p->setArrayDataByName("coin_plat", mail->coin_plat, i); + p->setArrayDataByName("num_items", mail->stack, i); + p->setArrayDataByName("packettype", GetItemPacketType(GetVersion())); + p->setArrayDataByName("packetsubtype", 0xFF, i); + + p->setArrayDataByName("unknown2", 0, i); + //p->setArrayDataByName("item_id", 5, i, 0); + //Item* item = master_item_list.GetItem(5); + //if (item) + // printf("%s\n", item->name.c_str()); + //else + // printf("no item\n"); + //p->setItemArrayDataByName("item", master_item_list.GetItem(5), i, 0); + i++; + } + + // GMs send mail for free! + if( GetAdminStatus() > 0 ) + { + p->setDataByName("postage_cost", 0); + p->setDataByName("attachment_cost", 0); + } + else + { + p->setDataByName("postage_cost", 10); + p->setDataByName("attachment_cost", 50); + } + p->setDataByName("unknown3", 0x01F4); + p->setDataByName("unknown4", 0x01000000); + QueuePacket(p->serialize()); + safe_delete(p); + } + } + else + SimpleMessage(CHANNEL_COLOR_MAIL, "You are currently not in a mail transaction."); + +} + +void Client::DisplayMailMessage(int32 mail_id) { + Mail* mail = player->GetMail(mail_id); + if (mail) { + int32 kiosk_id = player->GetIDWithPlayerSpawn(GetMailTransaction()); + if (kiosk_id > 0) { + PacketStruct* update = configReader.getStruct("WS_UpdatePlayerMail", GetVersion()); + if (update) { + update->setDataByName("action", 0x03); + update->setDataByName("packettype", GetItemPacketType(GetVersion())); + update->setDataByName("packetsubtype", 0xFF); + QueuePacket(update->serialize()); + safe_delete(update); + } + PacketStruct* packet = configReader.getStruct("WS_MailGetMessage", GetVersion()); + if (packet) { + packet->setDataByName("kiosk_id", kiosk_id); + packet->setDataByName("mail_id", mail->mail_id); + packet->setDataByName("player_to_id", mail->player_to_id); + packet->setDataByName("player_from", mail->player_from.c_str()); + packet->setDataByName("subject", mail->subject.c_str()); + packet->setDataByName("mail_body", mail->mail_body.c_str()); + packet->setDataByName("unknown1", 1); + packet->setDataByName("unknown2", 0); + packet->setDataByName("lock_report_button", 1); + packet->setDataByName("unknown3", 0xFFFFFFFF); + packet->setDataByName("unknown3a", 0xFFFFFFFF); + packet->setDataByName("coin_copper", mail->coin_copper); + packet->setDataByName("coin_silver", mail->coin_silver); + packet->setDataByName("coin_gold", mail->coin_gold); + packet->setDataByName("coin_plat", mail->coin_plat); + packet->setDataByName("stack", mail->stack); + packet->setDataByName("packettype", GetItemPacketType(GetVersion())); + packet->setDataByName("packetsubtype", 0xFF); + packet->setDataByName("unknown4", 0); + packet->setDataByName("unknown5", 0); + packet->setDataByName("unknown6", 0); + packet->setDataByName("unknown7", 0); + mail->already_read = true; + mail->save_needed = true; + QueuePacket(packet->serialize()); + safe_delete(packet); + //SendMailList(); + } + } + else + SimpleMessage(CHANNEL_COLOR_MAIL, "You are currently not in a mail transaction."); + } + +} + +/* This is called when the client sends a mail message. This determines whether or not the mail can be sent and must send the reply + packet back to the client before the mail actually sent. */ +void Client::HandleSentMail(EQApplicationPacket* app) { + PacketStruct* packet = configReader.getStruct("WS_MailSendMessage", GetVersion()); + if (packet) { + packet->LoadPacketData(app->pBuffer, app->size); + string player_to = packet->getType_EQ2_16BitString_ByName("player_to").data; + PacketStruct* reply_packet = configReader.getStruct("WS_MailSendMessageReply", GetVersion()); + vector* ids = 0; + if (reply_packet) { + int8 reply_type = MAIL_SEND_RESULT_UNKNOWN_ERROR; + if (player_to.length() == 0) + reply_type = MAIL_SEND_RESULT_EMPTY_TO_LIST; + else if (player_to.compare(string(GetPlayer()->GetName())) == 0) + reply_type = MAIL_SEND_RESULT_CANNOT_SEND_TO_SELF; + else if (GetAdminStatus() == 0 && !player->RemoveCoins(10)) + reply_type = MAIL_SEND_RESULT_NOT_ENOUGH_COIN; + else { + if (player_to.compare("") == 0) { + if (mail_window.coin_copper + mail_window.coin_silver + mail_window.coin_gold + mail_window.coin_plat == 0) + ids = database.GetAllPlayerIDs(); + else + SimpleMessage(CHANNEL_COLOR_MAIL, "You may not mail gifts to multiple players."); + } + else { + ids = new vector; + ids->push_back(database.GetCharacterID(player_to.c_str())); + } + if (ids) { + for (int32 i = 0; i < ids->size(); i++) { + int32 player_to_id = ids->at(i); + if (player_to_id > 0) { + reply_type = MAIL_SEND_RESULT_SUCCESS; + Mail* mail = new Mail; + mail->mail_id = 0; + mail->player_to_id = player_to_id; + mail->player_from = string(GetPlayer()->GetName()); + mail->subject = packet->getType_EQ2_16BitString_ByName("subject").data; + mail->mail_body = packet->getType_EQ2_16BitString_ByName("mail_body").data; + mail->already_read = 0; + mail->mail_type = MAIL_TYPE_REGULAR; + mail->coin_copper = mail_window.coin_copper; + mail->coin_silver = mail_window.coin_silver; + mail->coin_gold = mail_window.coin_gold; + mail->coin_plat = mail_window.coin_plat; + mail->stack = 0; + + // GM's send mail for free! + if( GetAdminStatus() > 0 ) + { + mail->postage_cost = 0; + mail->attachment_cost = 0; + } + else + { + mail->postage_cost = 10; + mail->attachment_cost = 50; + } + mail->char_item_id = 0; + mail->time_sent = Timer::GetUnixTimeStamp(); + mail->expire_time = mail->time_sent + 2592000; //30 days in seconds + //int16 packettype = packet->getType_int16_ByName("packettype"); + //int8 packetsubtype = packet->getType_int8_ByName("packetsubtype"); + /*int32 postage_cost = packet->getType_int32_ByName("postage_cost"); + int32 attachment_cost = packet->getType_int32_ByName("attachment_cost"); + if (postage_cost > 0 || attachment_cost > 0) + PlaySoundA("coin_cha_ching");*/ + mail->save_needed = false; + Client* to_client = zone_list.GetClientByCharID(player_to_id); + if (to_client) { + to_client->GetPlayer()->AddMail(mail); + to_client->SimpleMessage(CHANNEL_COLOR_MAIL, "You've got mail! :)"); + } + database.SavePlayerMail(mail); + mail_window.coin_copper = 0; + mail_window.coin_silver = 0; + mail_window.coin_gold = 0; + mail_window.coin_plat = 0; + } + else + reply_type = MAIL_SEND_RESULT_UNKNOWN_PLAYER; + } + } + } + string players_to = ""; + if (ids) { + for (int32 i = 0; i < ids->size(); i++) { + if (ids->at(i) != 0) + players_to.append(database.GetCharacterName(ids->at(i))); + if (i < (ids->size() - 1)) + players_to.append(", "); + } + } + reply_packet->setDataByName("player_to", players_to.c_str()); + reply_packet->setDataByName("reply_type", reply_type); + QueuePacket(reply_packet->serialize()); + safe_delete(reply_packet); + safe_delete(ids); + } + safe_delete(packet); + } + +} + +void Client::DeleteMail(int32 mail_id, bool from_database) { + + player->DeleteMail(mail_id, from_database); + +} + +bool Client::AddMailCoin(int32 copper, int32 silver, int32 gold, int32 plat) { + + bool ret = false; + if (GetMailTransaction()) { + PacketStruct* packet = configReader.getStruct("WS_UpdatePlayerMail", GetVersion()); + if (packet) { + if (copper > 0) { + if (player->RemoveCoins(copper)) { + mail_window.coin_copper += copper; + Message(CHANNEL_COLOR_MAIL, "You add %u copper to the mail window.", copper); + ret = true; + } + } + else if (silver > 0) { + if (player->RemoveCoins(silver * 100)) { + mail_window.coin_silver += silver; + Message(CHANNEL_COLOR_MAIL, "You add %u silver to the mail window.", silver); + ret = true; + } + } + else if (gold > 0) { + if (player->RemoveCoins(gold * 10000)) { + mail_window.coin_gold += gold; + Message(CHANNEL_COLOR_MAIL, "You add %u gold to the mail window.", gold); + ret = true; + } + } + else if (plat > 0) { + if (player->RemoveCoins(plat * 1000000)) { + mail_window.coin_plat += plat; + Message(CHANNEL_COLOR_MAIL, "You add %u platinum to the mail window.", plat); + ret = true; + } + } + if (ret) { + packet->setDataByName("coin_copper", mail_window.coin_copper); + packet->setDataByName("coin_silver", mail_window.coin_silver); + packet->setDataByName("coin_gold", mail_window.coin_gold); + packet->setDataByName("coin_plat", mail_window.coin_plat); + packet->setDataByName("stack", 0); + packet->setDataByName("packettype", GetItemPacketType(version)); + packet->setDataByName("packetsubtype", 0xFF); + packet->setDataByName("unknown2", 0); + //packet->PrintPacket(); + QueuePacket(packet->serialize()); + } + else + SimpleMessage(CHANNEL_COLOR_MAIL, "You don't have that much money."); + safe_delete(packet); + } + } + else + SimpleMessage(CHANNEL_COLOR_MAIL, "You are currently not in a mail transaction."); + + return ret; +} + +bool Client::RemoveMailCoin(int32 copper, int32 silver, int32 gold, int32 plat) { + bool ret = false; + if (GetMailTransaction()) { + PacketStruct* packet = configReader.getStruct("WS_UpdatePlayerMail", GetVersion()); + if (packet) { + if (copper > 0) { + player->AddCoins(copper); + mail_window.coin_copper -= copper; + Message(CHANNEL_COLOR_MAIL, "You remove %u copper from the mail window.", copper); + ret = true; + } + else if (silver > 0) { + player->AddCoins(silver * 100); + mail_window.coin_silver -= silver; + Message(CHANNEL_COLOR_MAIL, "You remove %u silver from the mail window.", silver); + ret = true; + } + else if (gold > 0) { + player->AddCoins(gold * 10000); + mail_window.coin_gold -= gold; + Message(CHANNEL_COLOR_MAIL, "You remove %u gold from the mail window.", gold); + ret = true; + } + else if (plat > 0) { + player->AddCoins(plat * 1000000); + mail_window.coin_plat -= plat; + Message(CHANNEL_COLOR_MAIL, "You remove %u platinum from the mail window.", plat); + ret = true; + } + if (ret) { + packet->setDataByName("coin_copper", mail_window.coin_copper); + packet->setDataByName("coin_silver", mail_window.coin_silver); + packet->setDataByName("coin_gold", mail_window.coin_gold); + packet->setDataByName("coin_plat", mail_window.coin_plat); + packet->setDataByName("stack", 0); + packet->setDataByName("packettype", 0x2BFE); + packet->setDataByName("packetsubtype", 0xFF); + packet->setDataByName("unknown2", 0); + QueuePacket(packet->serialize()); + } + safe_delete(packet); + } + } + else + SimpleMessage(CHANNEL_COLOR_MAIL, "You are currently not in a mail transaction."); + + return ret; +} + +void Client::TakeMailAttachments(int32 mail_id) { + if (GetMailTransaction()) { + Mail* mail = player->GetMail(mail_id); + if (mail) { + int64 amount = 0; + if (mail->coin_copper > 0) { + amount += mail->coin_copper; + mail->coin_copper = 0; + } + if (mail->coin_silver > 0) { + amount += mail->coin_silver * 100; + mail->coin_silver = 0; + } + if (mail->coin_gold > 0) { + amount += mail->coin_gold * 10000; + mail->coin_gold = 0; + } + if (mail->coin_plat > 0) { + amount += mail->coin_plat * 1000000; + mail->coin_plat = 0; + } + if (mail->char_item_id > 0) { + LogWrite(MISC__TODO, 1, "TODO", "Items by Mail\n\t(%s, function: %s, line #: %i)", __FILE__, __FUNCTION__, __LINE__); + } + /* Can't find the right packet to send to update the player's mail. This packet below updates the mail the player is sending, not + the mail the player is getting attachments from. There is an opcode OP_MailRemoveAttachFromMailMsg with opcode 328 but i can't + find it in any packet logs.*/ + /*PacketStruct* packet = configReader.getStruct("WS_UpdatePlayerMail", GetVersion()); + if (packet) { + packet->setDataByName("unknown", 0x03); + packet->setDataByName("coin_copper", mail->coin_copper); + packet->setDataByName("coin_silver", mail->coin_silver); + packet->setDataByName("coin_gold", mail->coin_gold); + packet->setDataByName("coin_plat", mail->coin_plat); + packet->setDataByName("stack", 0); + packet->setDataByName("packettype", 0x2BFE); + packet->setDataByName("packetsubtype", 0xFF); + packet->setDataByName("unknown2", 0); + packet->setDataByName("unknown3", 0x00000001);//0x00000016 + DumpPacket(packet->serialize()); + QueuePacket(packet->serialize()); + safe_delete(packet); + }*/ + database.SavePlayerMail(mail); + if (amount > 0) + player->AddCoins(amount); + SendMailList(); + } + } + else + SimpleMessage(CHANNEL_COLOR_MAIL, "You are currently not in a mail transaction."); + +} + +void Client::CancelSendMail() { + SimpleMessage(CHANNEL_COLOR_MAIL, "You cancel sending a letter."); + player->AddCoins(mail_window.coin_copper + (mail_window.coin_silver * 100) + (mail_window.coin_gold * 10000) + (mail_window.coin_plat * 1000000)); + mail_window.coin_copper = 0; + mail_window.coin_silver = 0; + mail_window.coin_gold = 0; + mail_window.coin_plat = 0; + mail_window.char_item_id = 0; + +} + +bool Client::GateAllowed(){ + ZoneServer* zone = zone_list.Get(player->GetPlayerInfo()->GetBindZoneID()); + + LogWrite(MISC__TODO, 1, "TODO", "possibly add a check here to see if a player is allowed to gate from this spot, allow for now\nfile: %s, func: %s, line: %i", __FILE__, __FUNCTION__, __LINE__); + + if(zone) + return true; + return false; +} + +bool Client::BindAllowed(){ + + LogWrite(MISC__TODO, 1, "TODO", "possibly add a check here to see if a player is allowed to bind in this spot, allow anywhere for now\nfile: %s, func: %s, line: %i", __FILE__, __FUNCTION__, __LINE__); + + return true; +} + +bool Client::Bind(){ + player->GetPlayerInfo()->SetBindZone(GetCurrentZone()->GetZoneID()); + player->GetPlayerInfo()->SetBindX(player->GetX()); + player->GetPlayerInfo()->SetBindY(player->GetY()); + player->GetPlayerInfo()->SetBindZ(player->GetZ()); + player->GetPlayerInfo()->SetBindHeading(player->GetHeading()); + + return true; +} + +bool Client::Gate(){ + if (player->GetPlayerInfo()->GetBindZoneID() == 0) + return false; + + ZoneServer* zone = zone_list.Get(player->GetPlayerInfo()->GetBindZoneID()); + if(zone){ + player->SetX(player->GetPlayerInfo()->GetBindZoneX()); + player->SetY(player->GetPlayerInfo()->GetBindZoneY()); + player->SetZ(player->GetPlayerInfo()->GetBindZoneZ()); + player->SetHeading(player->GetPlayerInfo()->GetBindZoneHeading()); + Zone(zone, false); + + return true; + } + + return false; +} + +void Client::ProcessTeleport(Spawn* spawn, vector* destinations, int32 transport_id){ + if(!destinations || !spawn) { + return; + } + + bool has_map = false; + if (transport_id > 0) + has_map = GetCurrentZone()->TransportHasMap(transport_id); + + transport_spawn = spawn; + vector transport_list; + vector::iterator itr; + TransportDestination* destination = 0; + for(itr = destinations->begin(); itr != destinations->end(); itr++){ + destination = *itr; + if(has_map || (destination->type == TRANSPORT_TYPE_ZONE && ((destination->destination_zone_id != GetCurrentZone()->GetZoneID()) || GetPlayer()->GetDistance(destination->destination_x, destination->destination_y, destination->destination_z) > 100))) + transport_list.push_back(destination); + } + if(transport_list.size() == 0 && destination){ + if(destination->destination_zone_id == 0 || destination->destination_zone_id == GetCurrentZone()->GetZoneID()){ + EQ2Packet* app = GetPlayer()->Move(destination->destination_x, destination->destination_y, destination->destination_z, GetVersion()); + if(app) + QueuePacket(app); + } + else{ + ZoneServer* new_zone = zone_list.Get(destination->destination_zone_id); + + // determine if this is an instanced zone that already exists + ZoneServer* instance_zone = GetPlayer()->GetGroupMemberInZone(destination->destination_zone_id); + + if(instance_zone || new_zone){ + GetPlayer()->SetX(destination->destination_x); + GetPlayer()->SetY(destination->destination_y); + GetPlayer()->SetZ(destination->destination_z); + GetPlayer()->SetHeading(destination->destination_heading); + if ( instance_zone ) + Zone(instance_zone->GetInstanceID(),false,true); + else + Zone(new_zone, false); + } + } + if(destination->message.length() > 0) + SimpleMessage(CHANNEL_COLOR_YELLOW, destination->message.c_str()); + } + else if(transport_list.size() > 0){ + PlaySound("mariner_bell"); + + PacketStruct* packet = configReader.getStruct("WS_TeleportList", GetVersion()); + if(packet){ + packet->setDataByName("spawn_id", GetPlayer()->GetIDWithPlayerSpawn(spawn)); + + // Put all the destinations the player can go in a new vector + vector destinations; + for (int32 i = 0; i < transport_list.size(); i++) { + destination = transport_list.at(i); + + // Check min level + if (destination->min_level > 0 && GetPlayer()->GetLevel() < destination->min_level) + continue; + // Check max level + if (destination->max_level > 0 && GetPlayer()->GetLevel() > destination->max_level) + continue; + // Check quest complete + if (destination->req_quest_complete > 0 && GetPlayer()->GetCompletedQuest(destination->req_quest_complete) == 0) + continue; + // Check req quest and step + if (destination->req_quest > 0 && destination->req_quest_step > 0 && GetPlayer()->GetQuestStep(destination->req_quest) != destination->req_quest_step) + continue; + // If we have a map and our current location is the same as the detination and player is within 20 units from the transport set the "current" elements but don't addt to the destination list + if (has_map && (destination->destination_zone_id == GetCurrentZone()->GetZoneID() && GetPlayer()->GetDistance(destination->destination_x, destination->destination_y, destination->destination_z) < 20)) { + packet->setDataByName("current_zone", destination->display_name.c_str()); + packet->setDataByName("current_map_x", destination->map_x); + packet->setDataByName("current_map_y", destination->map_y); + } + else { + destinations.push_back(destination); + } + } + + // Use the new vector to create the packet + destination = 0; + packet->setArrayLengthByName("num_destinations", destinations.size()); + for(int32 i = 0; i < destinations.size(); i++) { + destination = destinations.at(i); + + packet->setArrayDataByName("unique_id", destination->unique_id, i); + packet->setArrayDataByName("display_name", destination->display_name.c_str(), i); + packet->setArrayDataByName("zone_name", destination->display_name.c_str(), i); + packet->setArrayDataByName("zone_file_name", destination->display_name.c_str(), i); + packet->setArrayDataByName("cost", destination->cost, i); + + if (has_map) { + packet->setArrayDataByName("map_x", destination->map_x, i); + packet->setArrayDataByName("map_y", destination->map_y, i); + } + + } + + if (has_map) + packet->setDataByName("map_name", GetCurrentZone()->GetTransportMap(transport_id).c_str()); + EQ2Packet* app = packet->serialize(); + //DumpPacket(app); + if (destinations.size() > 0) + QueuePacket(app); + safe_delete(packet); + } + } + +} + +void Client::ProcessTeleportLocation(EQApplicationPacket* app){ + PacketStruct* packet = configReader.getStruct("WS_TeleportDestination", GetVersion()); + if(packet){ + if(packet->LoadPacketData(app->pBuffer, app->size)){ + Spawn* spawn = GetPlayer()->GetSpawnWithPlayerID(packet->getType_int32_ByName("spawn_id")); + int32 unique_id = packet->getType_int32_ByName("unique_id"); + string zone_name = packet->getType_EQ2_16BitString_ByName("zone_name").data; + int32 cost = packet->getType_int32_ByName("cost"); + vector* destinations = 0; + TransportDestination* destination = 0; + if(spawn && spawn == transport_spawn && spawn->GetTransporterID() > 0) + destinations = GetCurrentZone()->GetTransporters(spawn->GetTransporterID()); + if(destinations){ + vector::iterator itr; + for(itr = destinations->begin(); itr != destinations->end(); itr++){ + if((*itr)->unique_id == unique_id && (*itr)->display_name == zone_name && (*itr)->cost == cost){ + destination=*itr; + break; + } + } + } + if(!destination) + SimpleMessage(CHANNEL_COLOR_RED, "Error processing transport."); + else{ + if(cost == 0 || player->RemoveCoins(cost)){ + if(destination->destination_zone_id == 0 || destination->destination_zone_id == GetCurrentZone()->GetZoneID()){ + EQ2Packet* outapp = GetPlayer()->Move(destination->destination_x, destination->destination_y, destination->destination_z, GetVersion()); + if(outapp) + QueuePacket(outapp); + } + else{ + GetPlayer()->SetX(destination->destination_x); + GetPlayer()->SetY(destination->destination_y); + GetPlayer()->SetZ(destination->destination_z); + GetPlayer()->SetHeading(destination->destination_heading); + + // Test if where we're going is an Instanced zone + if (!TryZoneInstance(destination->destination_zone_id, false)) { + LogWrite(INSTANCE__DEBUG, 0, "Instance", "Attempting to zone normally"); + ZoneServer* new_zone = zone_list.Get(destination->destination_zone_id); + Zone(new_zone, false); + } + } + if(destination->message.length() > 0) + SimpleMessage(CHANNEL_COLOR_YELLOW, destination->message.c_str()); + } + else + SimpleMessage(CHANNEL_COLOR_RED, "You do not have enough money to use this transport."); + } + } + safe_delete(packet); + } + +} + +void Client::SendNewSpells(int8 class_id){ + if(class_id > 0){ + vector* spells = master_spell_list.GetSpellListByAdventureClass(class_id, player->GetLevel(), 1); + vector::iterator itr; + Spell* spell = 0; + bool send_updates = false; + for(itr = spells->begin(); itr != spells->end(); itr++){ + spell = *itr; + if(spell && !player->HasSpell(spell->GetSpellID(), spell->GetSpellTier(), true) && spell->GetSpellData()->lua_script.length() > 0){ + send_updates = true; + SendSpellUpdate(spell); + player->AddSpellBookEntry(spell->GetSpellID(), spell->GetSpellTier(), player->GetFreeSpellBookSlot(spell->GetSpellData()->spell_book_type), spell->GetSpellData()->spell_book_type, spell->GetSpellData()->linked_timer, true); + player->UnlockSpell(spell); + } + } + if(send_updates){ + EQ2Packet* outapp = player->GetSpellBookUpdatePacket(GetVersion()); + if(outapp) + QueuePacket(outapp); + } + safe_delete(spells); + } + +} + +void Client::SetItemSearch(vector* items){ + if(items){ + safe_delete(search_items); + search_items = items; + } + +} + +vector* Client::GetSearchItems(){ + return search_items; +} + +void Client::SearchStore(int32 page){ + if(search_items){ + PacketStruct* packet = configReader.getStruct("WS_BrokerItems", GetVersion()); + if(packet){ + int32 x = page*8; + if(search_items->size() > 8){ + if((search_items->size() - x) > 8) + packet->setArrayLengthByName("num_items", 8); + else + packet->setArrayLengthByName("num_items", search_items->size() - x); + } + else + packet->setArrayLengthByName("num_items", search_items->size()); + if(search_items->size() > 0){ + packet->setArrayLengthByName("num_sellers", 1); + packet->setArrayDataByName("seller_seller_id", 1); + packet->setArrayDataByName("seller_name", "EQ2EmuDevs"); + packet->setDataByName("per_page", 8); + packet->setDataByName("num_pages", search_items->size()/8+1); + packet->setDataByName("page", page); + Item* item = 0; + int32 limit = search_items->size() > 8 ? 8 : search_items->size(); + for(int32 i=0;i= search_items->size()) + break; + item = search_items->at(x); + packet->setArrayDataByName("item_id", item->details.item_id, i); + packet->setArrayDataByName("item_id2", item->details.item_id, i); + packet->setArrayDataByName("icon", item->details.icon, i); + //packet->setArrayDataByName("unknown2b", i, i); + packet->setArrayDataByName("item_seller_id", 1, i); + if(item->stack_count == 0) + packet->setArrayDataByName("quantity", 1, i); + else + packet->setArrayDataByName("quantity", item->stack_count, i); + packet->setArrayDataByName("stack_size", item->stack_count, i); + packet->setArrayDataByName("item_name", item->name.c_str(), i); + packet->setArrayDataByName("req_level", item->generic_info.adventure_default_level, i); + //QueuePacket(item->serialize(GetVersion(), false, GetPlayer())); + } + } + /*EQ2Packet* outapp = packet->serialize(); + DumpPacket(outapp); + QueuePacket(outapp);*/ + QueuePacket(packet->serialize()); + safe_delete(packet); + } + } + +} + +void Client::SetReadyForSpawns(bool val){ + ready_for_spawns = val; + if(GetPlayer()->GetActivityStatus() > 0){ + GetPlayer()->SetActivityStatus(0); + if (GetPlayer()->GetGroupMemberInfo()) { + world.GetGroupManager()->GroupMessage(GetPlayer()->GetGroupMemberInfo()->group_id, "%s has returned from Linkdead.", GetPlayer()->GetName()); + } + } + zone_list.CheckFriendZoned(this); + +} + +void Client::SendChatRelationship(int8 type, const char* name){ + if(!name) { + return; + } + PacketStruct* packet = configReader.getStruct("WS_ChatRelationship", GetVersion()); + if(packet){ + packet->setDataByName("account_id", GetAccountID()); + packet->setDataByName("type", type); + packet->setArrayLengthByName("num_names", 1); + packet->setArrayDataByName("name", name); + if(type == 0){ + Client* client = zone_list.GetClientByCharName(name); + if(client){ + packet->setArrayDataByName("location", client->GetCurrentZone()->GetZoneName()); + packet->setArrayDataByName("class_name", classes.GetClassName(client->GetPlayer()->GetAdventureClass())); + } + } + QueuePacket(packet->serialize()); + safe_delete(packet); + } + +} + +void Client::SendFriendList(){ + PacketStruct* packet = configReader.getStruct("WS_ChatRelationship", GetVersion()); + if(packet){ + packet->setDataByName("account_id", GetAccountID()); + map::iterator itr; + map* friends = player->GetFriends(); + if(friends && friends->size() > 0){ + Client* client = 0; + vector names; + for(itr = friends->begin(); itr != friends->end(); itr++){ + if(itr->second == 2) + continue; + names.push_back(itr->first); + } + packet->setArrayLengthByName("num_names", names.size()); + for(int32 i=0;isetArrayDataByName("name", names[i].c_str(), i); + if(client){ + packet->setArrayDataByName("location", client->GetCurrentZone()->GetZoneName(), i); + packet->setArrayDataByName("class_name", classes.GetClassName(client->GetPlayer()->GetAdventureClass()), i); + } + } + } + QueuePacket(packet->serialize()); + safe_delete(packet); + } + +} + +void Client::SendIgnoreList(){ + PacketStruct* packet = configReader.getStruct("WS_ChatRelationship", GetVersion()); + if(packet){ + packet->setDataByName("account_id", GetAccountID()); + packet->setDataByName("type", 2); + map::iterator itr; + map* ignored = player->GetIgnoredPlayers(); + if(ignored && ignored->size() > 0){ + vector names; + for(itr = ignored->begin(); itr != ignored->end(); itr++){ + if(itr->second == 2) + continue; + names.push_back(itr->first); + } + packet->setArrayLengthByName("num_names", names.size()); + for(int32 i=0;isetArrayDataByName("name", names[i].c_str(), i); + } + QueuePacket(packet->serialize()); + safe_delete(packet); + } + +} + +void Client::AddWaypoint(const char* waypoint_name, int8 waypoint_category, int32 spawn_id) { + if (waypoint_name) { + PacketStruct* packet = configReader.getStruct("WS_WaypointUpdate", GetVersion()); + if (packet) { + packet->setArrayLengthByName("num_updates", 1); + packet->setArrayDataByName("waypoint_name", waypoint_name, 0); + packet->setArrayDataByName("waypoint_category", waypoint_category, 0); + packet->setArrayDataByName("spawn_id", spawn_id, 0); + packet->setArrayDataByName("waypoint_category2", waypoint_category, 0); + packet->setArrayDataByName("spawn_id2", spawn_id, 0); + QueuePacket(packet->serialize()); + safe_delete(packet); + } + } + +} + +void Client::BeginWaypoint(const char* waypoint_name, float x, float y, float z) { + if (waypoint_name) { + PacketStruct* packet = configReader.getStruct("WS_GlowPath", GetVersion()); + if (packet) { + packet->setArrayLengthByName("num_points", 1); + packet->setArrayDataByName("x", x, 0); + packet->setArrayDataByName("y", y, 0); + packet->setArrayDataByName("z", z, 0); + packet->setDataByName("waypoint_x", x); + packet->setDataByName("waypoint_y", y); + packet->setDataByName("waypoint_z", z); + packet->setDataByName("waypoint_name", waypoint_name); + packet->setDataByName("unknown", 0); + QueuePacket(packet->serialize()); + safe_delete(packet); + } + } + +} + +void Client::InspectPlayer(Player* player_to_inspect) { + if (player_to_inspect) { + PacketStruct* packet = configReader.getStruct("WS_InspectPlayer", GetVersion()); + if (packet) { + packet->setDataByName("unknown", 0); + packet->setSmallStringByName("name", player_to_inspect->GetName()); + packet->setDataByName("race", player_to_inspect->GetRace()); + packet->setDataByName("gender", player_to_inspect->GetGender()); + packet->setDataByName("adventure_level", player_to_inspect->GetLevel()); + + LogWrite(MISC__TODO, 1, "TODO", "Put mentored level here (adventure_level_effective)\nfile: %s, func: %s, line: %i", __FILE__, __FUNCTION__, __LINE__); + + packet->setDataByName("adventure_level_effective", player_to_inspect->GetLevel()); + packet->setDataByName("adventure_class", player_to_inspect->GetAdventureClass()); + packet->setDataByName("tradeskill_level", player_to_inspect->GetTSLevel()); + packet->setDataByName("tradeskill_class", player_to_inspect->GetTradeskillClass()); + packet->setDataByName("health", player_to_inspect->GetHP()); + packet->setDataByName("health_max", player_to_inspect->GetTotalHP()); + packet->setDataByName("health_base", player_to_inspect->GetTotalHPBase()); + packet->setDataByName("power", player_to_inspect->GetPower()); + packet->setDataByName("power_max", player_to_inspect->GetTotalPower()); + packet->setDataByName("power_base", player_to_inspect->GetTotalPowerBase()); + packet->setDataByName("mitigation", 0); + packet->setDataByName("unknown1", 0); + packet->setDataByName("avoidance", 0); + packet->setDataByName("unknown2", 0); + packet->setDataByName("mitigation_percentage", 0); + packet->setDataByName("strength", player_to_inspect->GetStr()); + packet->setDataByName("strength_base", player_to_inspect->GetStrBase()); + packet->setDataByName("stamina", player_to_inspect->GetSta()); + packet->setDataByName("stamina_base", player_to_inspect->GetStaBase()); + packet->setDataByName("agility", player_to_inspect->GetAgi()); + packet->setDataByName("agility_base", player_to_inspect->GetAgiBase()); + packet->setDataByName("wisdom", player_to_inspect->GetWis()); + packet->setDataByName("wisdom_base", player_to_inspect->GetWisBase()); + packet->setDataByName("intelligence", player_to_inspect->GetInt()); + packet->setDataByName("intelligence_base", player_to_inspect->GetIntBase()); + packet->setDataByName("unknown4", 0); + packet->setDataByName("unknown5", 0); + packet->setDataByName("unknown6", 0); + packet->setDataByName("unknown7", 0); + packet->setDataByName("unknown8", 0); + packet->setDataByName("unknown9", 0); + packet->setDataByName("unknown10", 0); + packet->setDataByName("unknown11", 0); + packet->setDataByName("unknown12", 0); + packet->setDataByName("heat_resist", player_to_inspect->GetHeatResistance()); + packet->setDataByName("heat_resist_base", player_to_inspect->GetHeatResistanceBase()); + packet->setDataByName("heat_resist_percentage", 0); + packet->setDataByName("cold_resist", player_to_inspect->GetColdResistance()); + packet->setDataByName("cold_resist_base", player_to_inspect->GetColdResistanceBase()); + packet->setDataByName("cold_resist_percentage", 0); + packet->setDataByName("magic_resist", player_to_inspect->GetMagicResistance()); + packet->setDataByName("magic_resist_base", player_to_inspect->GetMagicResistanceBase()); + packet->setDataByName("magic_resist_percentage", 0); + packet->setDataByName("mental_resist", player_to_inspect->GetMentalResistance()); + packet->setDataByName("mental_resist_base", player_to_inspect->GetMentalResistanceBase()); + packet->setDataByName("mental_resist_percentage", 0); + packet->setDataByName("divine_resist", player_to_inspect->GetDivineResistance()); + packet->setDataByName("divine_resist_base", player_to_inspect->GetDivineResistanceBase()); + packet->setDataByName("divine_resist_percentage", 0); + packet->setDataByName("disease_resist", player_to_inspect->GetDiseaseResistance()); + packet->setDataByName("disease_resist_base", player_to_inspect->GetDiseaseResistanceBase()); + packet->setDataByName("disease_resist_percentage", 0); + packet->setDataByName("poison_resist", player_to_inspect->GetPoisonResistance()); + packet->setDataByName("poison_resist_base", player_to_inspect->GetPoisonResistanceBase()); + packet->setDataByName("poison_resist_percentage", 0); + packet->setArrayLengthByName("num_chars", 0x01FF); + string biography = player_to_inspect->GetBiography(); + for (size_t i = 0; i < biography.length(); i++) + packet->setArrayDataByName("biography_char", biography[i], i); + + LogWrite(MISC__TODO, 0, "TODO", "Why is inspect player weapons commented out? in func: %s, line: %i", __FUNCTION__, __LINE__); + /*Item* pw = player_to_inspect->GetEquipmentList()->GetItem(0); + if (pw) + packet->setItemByName("primary", pw, player_to_inspect, 0); + Item* sw = player_to_inspect->GetEquipmentList()->GetItem(1); + if (sw) + packet->setItemByName("secondary", sw, player_to_inspect, 0);*/ + //DumpPacket(packet->serialize()); + QueuePacket(packet->serialize()); + safe_delete(packet); + } + } + +} + +void Client::SetPendingGuildInvite(Guild* guild, Player* invited_by) { + pending_guild_invite.guild = guild; + pending_guild_invite.invited_by = invited_by; +} + +void Client::ShowClaimWindow() { + PacketStruct* packet = configReader.getStruct("WS_PromoFlagsDetails", GetVersion()); + if (packet) { + map* items = &master_item_list.items; + map::iterator itr; + int32 i = 0; + if (items->size() > 10) + packet->setArrayLengthByName("num_claim_items", 10); + else + packet->setArrayLengthByName("num_claim_items", items->size()); + for (itr = items->begin(); itr != items->end(); itr++) { + if (i == 10) + break; + Item* item = itr->second; + packet->setArrayDataByName("id", i, i); + packet->setArrayDataByName("not_yet_claimed", 1, i); + packet->setArrayDataByName("num_remaining", 5, i); + packet->setArrayDataByName("one_per_character", 1, i); + packet->setArrayDataByName("claimed_on_this_char", 0, i); + packet->setArrayDataByName("item_name", item->name.c_str(), i); + packet->setArrayDataByName("text", "If you ever see this text, let Scatman know, thanks! :)", i); + packet->setArrayDataByName("category", "Scott's Shit", i); + packet->setArrayDataByName("icon", item->details.icon, i); + packet->setArrayDataByName("item_id", item->details.item_id, i); + i++; + } + QueuePacket(packet->serialize()); + safe_delete(packet); + } + +} + +void Client::ShowGuildSearchWindow() { + PacketStruct* packet = configReader.getStruct("WS_GuildRecruiting", GetVersion()); + if (packet) { + MutexMap* guilds = guild_list.GetGuilds(); + MutexMap::iterator itr = guilds->begin(); + packet->setArrayLengthByName("num_guilds", guilds->size()); + int32 i = 0; + while (itr.Next()) { + Guild* guild = itr.second; + packet->setArrayDataByName("guild_id", guild->GetID(), i); + packet->setArrayDataByName("guild_name", guild->GetName(), i); + packet->setArrayDataByName("recruiting_short_description", guild->GetRecruitingShortDesc().c_str(), i); + packet->setArrayDataByName("descriptive_tag1", guild->GetRecruitingDescTag(0), i); + packet->setArrayDataByName("descriptive_tag2", guild->GetRecruitingDescTag(1), i); + packet->setArrayDataByName("descriptive_tag3", guild->GetRecruitingDescTag(2), i); + packet->setArrayDataByName("descriptive_tag4", guild->GetRecruitingDescTag(3), i); + packet->setArrayDataByName("playstyle", guild->GetRecruitingPlayStyle(), i); + packet->setArrayDataByName("looking_for", guild->GetRecruitingLookingForPacketValue(), i); //tradeskillers, fighters, new + packet->setArrayDataByName("unknown7", 0x02, i); + packet->setArrayDataByName("min_level", guild->GetRecruitingMinLevel(), i); + i++; + } + QueuePacket(packet->serialize()); + safe_delete(packet); + } + +} + +void Client::ShowDressingRoom(Item *item, sint32 crc) { + PacketStruct *packet; + vector *slot_data; + vector::iterator itr; + int32 slots = 0; + + assert(item); + + if (!(packet = configReader.getStruct("WS_DressingRoom", GetVersion()))) { + return; + } + + slot_data = &item->slot_data; + for (itr = slot_data->begin(); itr != slot_data->end(); itr++) { + if (version >= 1188) + slots = *itr; + else + slots += (int8)pow(2.0, *itr); + } + + packet->setDataByName("slot", slots); + packet->setDataByName("appearance_id", item->generic_info.appearance_id); + if(slots == 2){ + packet->setDataByName("rgb", item->generic_info.appearance_red, 2); + packet->setDataByName("rgb", item->generic_info.appearance_blue, 0); + } + else{ + packet->setDataByName("rgb", item->generic_info.appearance_red, 0); + packet->setDataByName("rgb", item->generic_info.appearance_blue, 2); + } + packet->setDataByName("rgb", item->generic_info.appearance_green, 1); + if(slots == 4){ + packet->setDataByName("highlight_rgb", item->generic_info.appearance_highlight_red, 2); + packet->setDataByName("highlight_rgb", item->generic_info.appearance_highlight_green, 1); + packet->setDataByName("highlight_rgb", item->generic_info.appearance_highlight_blue, 0); + } + else if(slots == 7){ + packet->setDataByName("highlight_rgb", item->generic_info.appearance_highlight_red, 1); + packet->setDataByName("highlight_rgb", item->generic_info.appearance_highlight_green, 0); + packet->setDataByName("highlight_rgb", item->generic_info.appearance_highlight_blue, 2); + } + else{ + packet->setDataByName("highlight_rgb", item->generic_info.appearance_highlight_red, 0); + packet->setDataByName("highlight_rgb", item->generic_info.appearance_highlight_green, 1); + packet->setDataByName("highlight_rgb", item->generic_info.appearance_highlight_blue, 2); + } + packet->setDataByName("icon", item->details.icon); + packet->setDataByName("item_id", item->details.item_id); + packet->setDataByName("item_crc", crc); + packet->setDataByName("unknown2", 0xFFFFFFFF); + packet->setDataByName("unknown4", 0xFFFFFFFF); + packet->setDataByName("unknown5", 0xFF, 9); + packet->setDataByName("unknown5", 0xFF, 10); + QueuePacket(packet->serialize()); + safe_delete(packet); + +} + +void Client::SendCollectionList() { + map *collections = player->GetCollectionList()->GetCollections(); + map::iterator itr; + vector *collection_items; + Collection *collection; + struct CollectionItem *collection_item; + PacketStruct *packet = 0; + int16 i = 0, j; + + if (!(packet = configReader.getStruct("WS_CollectionUpdate", version))) + return; + + packet->setArrayLengthByName("num_collections", collections->size()); + for (itr = collections->begin(); itr != collections->end(); itr++) { + collection = itr->second; + collection_items = collection->GetCollectionItems(); + + packet->setArrayDataByName("unknown", 1, i); + packet->setArrayDataByName("collection_name", collection->GetName(), i); + packet->setArrayDataByName("collection_category", collection->GetCategory(), i); + packet->setArrayDataByName("completed", collection->GetCompleted(), i); + packet->setArrayDataByName("collection_id", collection->GetID(), i); + packet->setArrayDataByName("level", collection->GetLevel(), i); + packet->setArrayDataByName("ready_to_turn_in", collection->GetIsReadyToTurnIn(), i); + packet->setSubArrayLengthByName("num_items", collection_items->size(), i); + + for (j = 0; j < collection_items->size(); j++) { + collection_item = collection_items->at(j); + Item* item = master_item_list.GetItem(collection_item->item); + if (item) { + packet->setSubArrayDataByName("item_icon", item->details.icon, i, j); + if (version < 955) + packet->setSubArrayDataByName("item_name", item->name.c_str(), i, j); + else + packet->setSubArrayDataByName("item_id", item->details.item_id, i, j); + } + packet->setSubArrayDataByName("item_flag", collection_item->found, i, j); + } + i++; + } + + packet->setDataByName("new_collection_flag", 1); + + QueuePacket(packet->serialize()); + safe_delete(packet); + +} + +bool Client::SendCollectionsForItem(Item *item) { + map collections_to_send; + map *collections; + map::iterator itr; + vector *collection_items; + Collection *collection; + struct CollectionItem *collection_item; + PacketStruct *packet; + int16 i; + + assert(item); + + /* get any collections required by this item that the player already has */ + collections = player->GetCollectionList()->GetCollections(); + for (itr = collections->begin(); itr != collections->end(); itr++) { + collection = itr->second; + if (!collection->GetCompleted() && !collection->GetIsReadyToTurnIn() && collection->NeedsItem(item)) { + LogWrite(COLLECTION__DEBUG, 0, "Collect", "Adding collection from player list %u\n", collection->GetID()); + collections_to_send[collection->GetID()] = collection; + } + } + + /* get any collections required by this item that the player does not have and send it to the client */ + collections = master_collection_list.GetCollections(); + for (itr = collections->begin(); itr != collections->end(); itr++) { + collection = itr->second; + if (collection->NeedsItem(item) && !player->GetCollectionList()->GetCollection(collection->GetID())) { + if (!(packet = configReader.getStruct("WS_CollectionUpdate", version))) { + return false; + } + + packet->setArrayLengthByName("num_collections", 1); + packet->setArrayDataByName("unknown", 1, 0); + packet->setArrayDataByName("collection_name", collection->GetName(), 0); + packet->setArrayDataByName("collection_category", collection->GetCategory(), 0); + packet->setArrayDataByName("completed", 0, 0); + packet->setArrayDataByName("collection_id", collection->GetID(), 0); + packet->setArrayDataByName("level", collection->GetLevel(), 0); + packet->setArrayDataByName("ready_to_turn_in", 0, 0); + packet->setArrayDataByName("unknown3", 0x28, 0); + + collection_items = collection->GetCollectionItems(); + packet->setSubArrayLengthByName("num_items", collection_items->size(), 0); + for (i = 0; i < collection_items->size(); i++) { + collection_item = collection_items->at(i); + Item* item2 = master_item_list.GetItem(collection_item->item); + if (item2) { + packet->setSubArrayDataByName("item_icon", item2->details.icon, 0, i); + if (version < 955) + packet->setSubArrayDataByName("item_name", item2->name.c_str(), 0, i); + else + packet->setSubArrayDataByName("item_id", item2->details.item_id, 0, i); + packet->setSubArrayDataByName("item_flag", collection_item->found, 0, i); + } + } + packet->setDataByName("new_collection_flag", 0); + + QueuePacket(packet->serialize()); + safe_delete(packet); + + LogWrite(COLLECTION__DEBUG, 0, "Collect", "Adding collection from master list %u\n", collection->GetID()); + collections_to_send[collection->GetID()] = collection; + } + } + + /* send the client a list of collections that should be filtered for this item */ + if (collections_to_send.size() > 0) { + if (!(packet = configReader.getStruct("WS_CollectionFilter", version))) { + return false; + } + + i = 0; + packet->setArrayLengthByName("num_filters", collections_to_send.size()); + for (itr = collections_to_send.begin(); itr != collections_to_send.end(); itr++) { + collection = itr->second; + + packet->setArrayDataByName("collection_id", collection->GetID(), i); + packet->setArrayDataByName("collection_item_num", collection->GetCollectionItemByItemID(item->details.item_id)->index, i); + i++; + } + + packet->setDataByName("item_icon", item->details.icon); + packet->setDataByName("item_name", item->name.c_str()); + packet->setDataByName("item_id", item->details.item_id); + packet->setDataByName("unknown3", player->GetCollectionList()->Size()); + + QueuePacket(packet->serialize()); + safe_delete(packet); + } + + return collections_to_send.size() > 0; +} + +void Client::HandleCollectionAddItem(int32 collection_id, Item *item) { + Collection *collection; + struct CollectionItem *collection_item; + PacketStruct *packet; + char tmp[200] = {0}; + + assert(item); + + /* first try to get the collection from the player's collection list. if it's not found, get it from the master list */ + if ((collection = player->GetCollectionList()->GetCollection(collection_id))) { + + /* get the item struct that represents the item for this collection */ + if (!(collection_item = collection->GetCollectionItemByItemID(item->details.item_id))) { + SendCollectionList(); + LogWrite(COLLECTION__ERROR, 0, "Collect", "Error in Client::HandleCollectionAddItem. Could not find item '%s' required by collection '%s'", item->name.c_str(), collection->GetName()); + return; + } + + /* sanity check */ + if (collection_item->found) { + SendCollectionList(); + LogWrite(COLLECTION__ERROR, 0, "Collect", "Error in Client::HandleCollectionAddItem. Player '%s' has already found item '%s' for collection '%s'", player->GetName(), item->name.c_str(), collection->GetName()); + return; + } + } + else if ((collection = master_collection_list.GetCollection(collection_id))) { + collection = new Collection(collection); + + /* get the item struct that represents the item for this collection */ + if (!(collection_item = collection->GetCollectionItemByItemID(item->details.item_id))) { + SendCollectionList(); + LogWrite(COLLECTION__ERROR, 0, "Collect", "Error in Client::HandleCollectionAddItem. Could not find item '%s' required by collection '%s'", item->name.c_str(), collection->GetName()); + safe_delete(collection); + return; + } + + /* add the new collection to the player's collection list */ + if (!player->GetCollectionList()->AddCollection(collection)) { + SendCollectionList(); + LogWrite(COLLECTION__ERROR, 0, "Collect", "Error in Client::HandleCollectionAddItem. Player '%s' already has collection '%s'", player->GetName(), collection->GetName()); + safe_delete(collection); + return; + } + } + else { + LogWrite(COLLECTION__ERROR, 0, "Collect", "Error in Client::HandleCollectionAddItem. Could not find collection with id %u", collection_id); + return; + } + + collection_item->found = 1; + collection->SetSaveNeeded(true); + + if (!(packet = configReader.getStruct("WS_CollectionItem", version))) { + SendCollectionList(); + LogWrite(COLLECTION__ERROR, 0, "Collect", "Error in Client::HandleCollectionAddItem. Could not find struct 'WS_CollectionItem'"); + return; + } + + packet->setDataByName("collection_id", collection_id); + packet->setDataByName("collection_item_num", collection_item->index); + packet->setDataByName("add", 1); + QueuePacket(packet->serialize()); + Item* item2 = master_item_list.GetItem(collection_item->item); + if (item2) { + Message(CHANNEL_COLOR_YELLOW, "You added: %s to %s", item2->name.c_str(), collection->GetName()); + sprintf(tmp, "You added: %s to %s", item2->name.c_str(), collection->GetName()); + SendPopupMessage(5, tmp, "quest_item", 3.5, 0x64, 0xFF, 0xFF); + } + safe_delete(packet); + + RemoveItem(item, 1); + SendCollectionList(); + +} + +void Client::DisplayCollectionComplete(Collection *collection) { + vector *reward_items; + vector *selectable_reward_items; + struct CollectionRewardItem *reward_item; + PacketStruct *packet; + int32 i; + + assert(collection); + + if (!(packet = configReader.getStruct("WS_QuestComplete", version))) { + return; + } + + reward_items = collection->GetRewardItems(); + selectable_reward_items = collection->GetSelectableRewardItems(); + + packet->setDataByName("title", "Quest Reward!"); + packet->setDataByName("name", collection->GetName()); + packet->setDataByName("description", collection->GetCategory()); + packet->setDataByName("level", collection->GetLevel()); + packet->setDataByName("max_coin", collection->GetRewardCoin()); + packet->setDataByName("min_coin", collection->GetRewardCoin()); + //packet->setDataByName("status_points", quest->GetStatusPoints()); + packet->setArrayLengthByName("num_rewards", reward_items->size()); + for (i = 0; i < reward_items->size(); i++) { + reward_item = reward_items->at(i); + packet->setArrayDataByName("reward_id", reward_item->item->details.item_id, i); + if (version < 860) + packet->setItemArrayDataByName("item",reward_item->item, player, i, 0, -1); + else if (version < 1193) + packet->setItemArrayDataByName("item",reward_item->item, player, i); + else + packet->setItemArrayDataByName("item",reward_item->item, player, i, 0, 2); + } + packet->setArrayLengthByName("num_select_rewards", selectable_reward_items->size()); + for(i = 0; i < selectable_reward_items->size(); i++) { + reward_item = selectable_reward_items->at(i); + packet->setArrayDataByName("select_reward_id", reward_item->item->details.item_id, i); + if(version < 860) + packet->setItemArrayDataByName("select_item", reward_item->item, player, i, 0, -1); + else if (version < 1193) + packet->setItemArrayDataByName("select_item", reward_item->item, player, i); + else + packet->setItemArrayDataByName("select_item", reward_item->item, player, i, 0, 2); + } + + QueuePacket(packet->serialize()); + safe_delete(packet); + +} + +void Client::HandInCollections() { + map *collections; + map::iterator itr; + Collection *collection; + + /* only show 1 collection reward dialog at a time */ + if (player->GetPendingCollectionReward()) { + return; + } + + collections = player->GetCollectionList()->GetCollections(); + + /* we only want to display 1 collection reward dialog at a time. so once we find one to display, send it and return. once the player accepts the reward + for this collection, this function gets called again and the process repeats until there are no more collections to hand in */ + for (itr = collections->begin(); itr != collections->end(); itr++) { + collection = itr->second; + if (collection->GetIsReadyToTurnIn()) { + player->SetPendingCollectionReward(collection); + DisplayCollectionComplete(collection); + + return; + } + } + +} + +void Client::AcceptCollectionRewards(Collection *collection, int32 selectable_item_id) { + vector *reward_items; + vector::iterator itr; + struct CollectionRewardItem *reward_item; + int16 num_slots_needed; + int16 num_slots; + + assert(collection); + + reward_items = collection->GetRewardItems(); + num_slots_needed = (int16)reward_items->size(); + if (selectable_item_id > 0) + num_slots_needed++; + + num_slots = player->GetPlayerItemList()->GetNumberOfFreeSlots(); + if (num_slots < num_slots_needed) { + SimpleMessage(CHANNEL_COLOR_RED, "You do not have enough free slots. Free up some slots and try again"); + HandInCollections(); + + return; + } + + /* add manditory items */ + for (itr = reward_items->begin(); itr != reward_items->end(); itr++) { + reward_item = *itr; + AddItem(reward_item->item->details.item_id, reward_item->quantity); + } + + /* find and add the selectable item if there's one */ + if (selectable_item_id > 0) { + reward_items = collection->GetSelectableRewardItems(); + for (itr = reward_items->begin(); itr != reward_items->end(); itr++) { + reward_item = *itr; + if (reward_item->item->details.item_id == selectable_item_id) { + AddItem(reward_item->item->details.item_id, reward_item->quantity); + break; + } + } + } + + if (collection->GetRewardXP() > 0) { + player->AddXP((int32)collection->GetRewardXP()); + SimpleMessage(CHANNEL_COLOR_YELLOW, "You gain experience!"); + } + if (collection->GetRewardCoin() > 0) { + player->AddCoins(collection->GetRewardCoin()); + Message(CHANNEL_COLOR_YELLOW, "You receive %s", GetCoinMessage(collection->GetRewardCoin()).c_str()); + } + + collection->SetCompleted(true); + //update achievements for completeing collection here + collection->SetSaveNeeded(true); + SendCollectionList(); + + /* reset the pending collection reward and check for my collections that the player needs to hand in */ + player->SetPendingCollectionReward(0); + HandInCollections(); + +} + +void Client::SendRecipeList() { + PacketStruct* packet = 0; + if (GetRecipeListSent()) { + return; + } + + if (!(packet = configReader.getStruct("WS_RecipeList", version))) { + return; + } + map *recipes = player->GetRecipeList()->GetRecipes(); + map::iterator itr; + Recipe *recipe; + int16 i = 0; + + packet->setArrayLengthByName("num_recipes", recipes->size()); + for (itr = recipes->begin(); itr != recipes->end(); itr++){ + recipe = itr->second; + packet->setArrayDataByName("id", recipe->GetID(), i); + packet->setArrayDataByName("tier", recipe->GetTier(), i); + packet->setArrayDataByName("level", recipe->GetLevel(), i); + packet->setArrayDataByName("icon", recipe->GetIcon(), i); + packet->setArrayDataByName("classes", recipe->GetClasses(), i); + packet->setArrayDataByName("skill", recipe->GetSkill(), i); + packet->setArrayDataByName("technique", recipe->GetTechnique(), i); + packet->setArrayDataByName("knowledge", recipe->GetKnowledge(), i); + packet->setArrayDataByName("unknown2", recipe->GetUnknown2(), i); + packet->setArrayDataByName("recipe_name", recipe->GetName(), i); + packet->setArrayDataByName("recipe_book", recipe->GetBook(), i); + packet->setArrayDataByName("unknown3", recipe->GetUnknown3(), i); + i++; + } + //packet->PrintPacket(); + //DumpPacket(packet->serialize()); + QueuePacket(packet->serialize()); + safe_delete(packet); + + SetRecipeListSent(true); +} + +void Client::ShowRecipeBook() { + PacketStruct* packet = 0; + Spawn* target = 0; + if (!(target = player->GetTarget())) { + SimpleMessage(CHANNEL_COLOR_YELLOW, "You do not have a tradeskill device targeted"); + return; + } + if (!target->IsObject()) { + return; + } + + if (!(packet = configReader.getStruct("WS_ShowRecipeBook", version))) { + return; + } + + packet->setDataByName("device", target->GetName()); + packet->setDataByName("unknown1", 1); + + if (((Object*)target)->GetDeviceID() > 0) { + int32 deviceID = (int32)pow(2.0, (double)((Object*)target)->GetDeviceID()); + //LogWrite(TRADESKILL__ERROR, 0, "Tradeskills", "GetDeviceID() = %u, deviceID = %u", ((Object*)target)->GetDeviceID(), deviceID); + packet->setDataByName("unknown2", 8); + packet->setDataByName("unknown3", deviceID); + } + + //packet->PrintPacket(); + QueuePacket(packet->serialize()); + safe_delete(packet); +} + +void Client::SendTitleUpdate(){ + list *titles = player->GetPlayerTitles()->GetAllTitles(); + list::iterator itr; + Title *title; + int16 i = 0; + sint16 prefix_index = database.GetCharPrefixIndex(GetCharacterID(), player); + sint16 suffix_index = database.GetCharSuffixIndex(GetCharacterID(), player); + PacketStruct* packet = configReader.getStruct("WS_TitleUpdate", GetVersion()); + if(packet){ + packet->setArrayLengthByName("num_titles", titles->size()); + for(itr = titles->begin(); itr != titles->end(); itr++){ + title = *itr; + packet->setArrayDataByName("title", title->GetName(), i); + packet->setArrayDataByName("prefix", title->GetPrefix(), i); + i++; + } + packet->setDataByName("current_prefix", prefix_index); + packet->setDataByName("current_suffix", suffix_index); + + LogWrite(CCLIENT__PACKET, 0, "Client", "Dump/Print Packet in func: %s, line: %i", __FUNCTION__, __LINE__); +#if EQDEBUG >= 9 + packet->PrintPacket(); +#endif + + QueuePacket(packet->serialize()); + safe_delete(packet); + SendUpdateTitles(prefix_index, suffix_index); + } +} + +void Client::SendUpdateTitles(sint16 prefix, sint16 suffix){ + Title* suffix_title = 0; + Title* prefix_title = 0; + if (suffix != -1){ + suffix_title = player->GetPlayerTitles()->GetTitle(suffix); + strcpy(player->appearance.suffix_title, suffix_title->GetName()); + } + else + memset(player->appearance.suffix_title, 0, strlen(player->appearance.suffix_title)); + if (prefix != -1){ + prefix_title = player->GetPlayerTitles()->GetTitle(prefix); + strcpy(player->appearance.prefix_title, prefix_title->GetName()); + } + else + memset(player->appearance.prefix_title, 0, strlen(player->appearance.prefix_title)); + + current_zone->SendUpdateTitles(this, suffix_title, prefix_title); +} + +void Client::SendLanguagesUpdate(int32 id){ + list *languages = player->GetPlayerLanguages()->GetAllLanguages(); + list::iterator itr; + Language* language; + int32 i = 0; + PacketStruct* packet = configReader.getStruct("WS_Languages", GetVersion()); + if(packet){ + packet->setArrayLengthByName("num_languages", languages->size()); + for(itr = languages->begin(); itr != languages->end(); itr++){ + language = *itr; + packet->setArrayDataByName("language_id", language->GetID(), i); + i++; + } + packet->setDataByName("current_language", id); + + LogWrite(CCLIENT__PACKET, 0, "Client", "Dump/Print Packet in func: %s, line: %i", __FUNCTION__, __LINE__); +#if EQDEBUG >= 9 + packet->PrintPacket(); +#endif + QueuePacket(packet->serialize()); + safe_delete(packet); + } +} + +void Client::SendPetOptionsWindow(const char* pet_name, int8 type) { + PacketStruct* packet = configReader.getStruct("WS_PetOptions", GetVersion()); + if (packet) { + if (pet_name) + packet->setDataByName("pet_name", pet_name); + if (player->GetInfoStruct()->pet_behavior & 1) + packet->setDataByName("protect_master", 1); + if (player->GetInfoStruct()->pet_behavior & 2) + packet->setDataByName("protect_self", 1); + if (player->GetInfoStruct()->pet_movement == 2) + packet->setDataByName("stay_follow_toggle", 1); + + packet->setDataByName("pet_type", type); + + QueuePacket(packet->serialize()); + } + + safe_delete(packet); +} + +bool Client::IsCrafting() { + return current_zone->GetTradeskillMgr()->IsClientCrafting(this); +} + +void Client::SendBiography() { + PacketStruct* packet = configReader.getStruct("WS_BioUpdate", GetVersion()); + if (packet) { + if (strlen(player->GetInfoStruct()->biography) > 0) + packet->setDataByName("biography",player->GetInfoStruct()->biography); + + QueuePacket(packet->serialize()); + } + + safe_delete(packet); +} + +PendingResurrection* Client::GetCurrentRez() { + return ¤t_rez; +} + +Mutex* Client::GetResurrectMutex() { + return &m_resurrect; +} + +void Client::SendResurrectionWindow() { + Spawn* caster = current_rez.caster; + if(!caster || !player) + return; + + PacketStruct* packet = configReader.getStruct("WS_ChoiceWindow", GetVersion()); + if(!packet) + return; + + char* tmp = new char[512]; + sprintf(tmp, "%s would like to cast '%s' on you. Do you accept?", caster->GetName(), current_rez.spell_name.c_str()); + + packet->setMediumStringByName("text", tmp); + packet->setMediumStringByName("accept_text", "Yes"); + packet->setMediumStringByName("cancel_text", "No"); + + sprintf(tmp, "accept_resurrection %u", player->GetID()); + packet->setMediumStringByName("accept_command", tmp); + + sprintf(tmp, "decline_resurrection %u", player->GetID()); + packet->setMediumStringByName("cancel_command", tmp); + packet->setDataByName("time", current_rez.expire_timer->GetRemainingTime() / 1000); + QueuePacket(packet->serialize()); + safe_delete(packet); + safe_delete_array(tmp); +} + +void Client::AcceptResurrection() { + Spawn* caster = current_rez.caster; + if(!player || !caster) + return; + + if(player->Alive()) + return; + + if((caster->GetZone() != player->GetZone()) || (current_rez.range > 0 && player->GetDistance(caster) > current_rez.range)){ + SimpleMessage(CHANNEL_COLOR_YELLOW, "The caster must be nearby to complete the spell."); + SendResurrectionWindow(); + return; + } + + player->GetZone()->ResurrectSpawn(player, this); + current_rez.should_delete = true; +} + +void Client::SetPendingLastName(string last_name) { + pending_last_name = new string; + pending_last_name->assign(last_name); +} + +string* Client::GetPendingLastName() { + return pending_last_name; +} + +void Client::RemovePendingLastName() { + safe_delete(pending_last_name); +} + +void Client::SendLastNameConfirmation() { + if (!pending_last_name) + return; + + PacketStruct* packet = configReader.getStruct("WS_ChoiceWindow", GetVersion()); + if (packet){ + char* text = new char[128]; + sprintf(text, "Are you sure you want your last name to be \"%s\"?" , pending_last_name->c_str()); + packet->setDataByName("text", text); + packet->setDataByName("accept_text", "Yes"); + packet->setDataByName("accept_command", "confirmedlastname"); + packet->setDataByName("cancel_text", "No"); + packet->setDataByName("unknown2", 50); + packet->setDataByName("unknown4", 1); + packet->setDataByName("unknown5", 1); + QueuePacket(packet->serialize()); + safe_delete(packet); + safe_delete_array(text); + } +} + +void Client::AddQuestTimer(int32 quest_id) { + MQuestTimers.writelock(__FUNCTION__, __LINE__); + quest_timers.push_back(quest_id); + MQuestTimers.releasewritelock(__FUNCTION__, __LINE__); +} + +void Client::RemoveQuestTimer(int32 quest_id) { + MQuestTimers.writelock(__FUNCTION__, __LINE__); + vector::iterator itr; + for (itr = quest_timers.begin(); itr != quest_timers.end(); itr++) { + if ((*itr) == quest_id) { + quest_timers.erase(itr); + break; + } + } + MQuestTimers.releasewritelock(__FUNCTION__, __LINE__); +} + +void Client::SavePlayerImages() { + LogWrite(CCLIENT__DEBUG, 0, "Client", "Saving %s image for player %s (%u)", (incoming_paperdoll.image_type == PAPERDOLL_TYPE_FULL ? "paperdoll" : "headshot"), GetPlayer()->GetName(), GetCharacterID()); + + // Save the paperdoll image if the server allows it + if (incoming_paperdoll.image_type == PAPERDOLL_TYPE_FULL && rule_manager.GetGlobalRule(R_World, SavePaperdollImage)->GetBool()) + database.SaveCharacterPicture(GetCharacterID(), incoming_paperdoll.image_type, incoming_paperdoll.image_bytes, incoming_paperdoll.current_size_bytes); + + if (incoming_paperdoll.image_type == PAPERDOLL_TYPE_HEAD) { + // Save the head shot if the server allows it + if (rule_manager.GetGlobalRule(R_World, SaveHeadshotImage)->GetBool()) + database.SaveCharacterPicture(GetCharacterID(), incoming_paperdoll.image_type, incoming_paperdoll.image_bytes, incoming_paperdoll.current_size_bytes); + + // Send the head shot to the login server + if (rule_manager.GetGlobalRule(R_World, SendPaperdollImagesToLogin)->GetBool()) { + int32 size = incoming_paperdoll.current_size_bytes + CHARPICSTRUCT_MINSIZE; + ServerPacket* packet = new ServerPacket(ServerOP_CharacterPicture, size); + memset(packet->pBuffer, 0, size); + + CharPictureUpdate_Struct* pic = (CharPictureUpdate_Struct*)packet->pBuffer; + pic->account_id = GetAccountID(); + pic->char_id = GetCharacterID(); + pic->pic_size = (int16)incoming_paperdoll.current_size_bytes; + memcpy(pic->pic, incoming_paperdoll.image_bytes, incoming_paperdoll.current_size_bytes); + + loginserver.SendPacket(packet); + safe_delete(packet); + } + } + safe_delete_array(incoming_paperdoll.image_bytes); + incoming_paperdoll.current_size_bytes = 0; +} + +void Client::EndAutoMount() { + PacketStruct* packet = configReader.getStruct("WS_ServerControlFlags", GetVersion()); + if (packet) { + packet->setDataByName("parameter1", 128); + packet->setDataByName("parameter2", 64); + packet->setDataByName("value", 1); + QueuePacket(packet->serialize()); + safe_delete(packet); + } + + packet = configReader.getStruct("WS_ServerControlFlags", GetVersion()); + if (packet) { + packet->setDataByName("parameter3", 4); + packet->setDataByName("parameter5", 2); + packet->setDataByName("value", 0); + QueuePacket(packet->serialize()); + safe_delete(packet); + } + + packet = configReader.getStruct("WS_ClearForLanding", GetVersion()); + if (packet) { + packet->setDataByName("spawn_id", GetPlayer()->GetIDWithPlayerSpawn(GetPlayer())); + QueuePacket(packet->serialize()); + safe_delete(packet); + } + + on_auto_mount = false; + + player->SetMount(((Player*)player)->GetTempMount()); + EQ2_Color mount_color = player->GetTempMountColor(); + EQ2_Color saddle_color = player->GetTempMountSaddleColor(); + player->SetMountColor(&mount_color); + player->SetMountSaddleColor(&saddle_color); + player->SetTempMount(0); +} + +bool Client::EntityCommandPrecheck(Spawn* spawn, const char* command){ + const char* spawn_script = spawn->GetSpawnScript(); + bool should_use_spawn = true; + if (spawn_script){ + lua_State* state = lua_interface->GetSpawnScript(spawn_script); + if (state){ + Mutex* state_mutex = lua_interface->GetSpawnScriptMutex(spawn_script); + if (state_mutex) + state_mutex->writelock(__FUNCTION__, __LINE__); + lua_getglobal(state, "can_use_command"); + if (lua_isfunction(state, -1)){ + lua_interface->SetSpawnValue(state, spawn); + lua_interface->SetSpawnValue(state, GetPlayer()); + lua_interface->SetStringValue(state, command ? command : ""); + if (lua_pcall(state, 3, 1, 0) == 0){ + should_use_spawn = lua_interface->GetBooleanValue(state, 1); + } + } + lua_interface->ResetFunctionStack(state); + if (state_mutex) + state_mutex->releasewritelock(__FUNCTION__, __LINE__); + } + } + return should_use_spawn; +} \ No newline at end of file diff --git a/EQ2/source/WorldServer/client.h b/EQ2/source/WorldServer/client.h new file mode 100644 index 000000000..1c5acaf99 --- /dev/null +++ b/EQ2/source/WorldServer/client.h @@ -0,0 +1,499 @@ +/* + EQ2Emulator: Everquest II Server Emulator + Copyright (C) 2007 EQ2EMulator Development Team (http://www.eq2emulator.net) + + This file is part of EQ2Emulator. + + EQ2Emulator is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + EQ2Emulator is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with EQ2Emulator. If not, see . +*/ +#ifndef CLIENT_H +#define CLIENT_H + +#include "../common/EQStream.h" +#include +#include "../common/timer.h" +#include "zoneserver.h" +#include "Player.h" +#include "Quests.h" + +using namespace std; +#define CLIENT_TIMEOUT 60000 +struct TransportDestination; +struct ConversationOption; + +#define MAIL_SEND_RESULT_SUCCESS 0 +#define MAIL_SEND_RESULT_UNKNOWN_PLAYER 1 +#define MAIL_SEND_RESULT_CANNOT_SEND_TO_PLAYER 2 +#define MAIL_SEND_RESULT_GIFT_WRONG_SERVER 3 /* Cannot send gifts across worlds */ +#define MAIL_SEND_RESULT_CANNOT_SEND_TO_SELF 4 +#define MAIL_SEND_RESULT_MAILBOX_FULL 5 +#define MAIL_SEND_RESULT_NOT_ENOUGH_COIN 6 +#define MAIL_SEND_RESULT_ITEM_IN_BAG 7 /* Cannot send non-empty bags as gifts */ +#define MAIL_SEND_RESULT_NOT_IN_GUILD 8 +#define MAIL_SEND_RESULT_GUILD_ACCESS_DENIED 9 +#define MAIL_SEND_RESULT_GIFTS_TO_GUILD 10 /* Cannot send gifts to entire guild */ +#define MAIL_SEND_RESULT_EMPTY_TO_LIST 11 /* Empty recipient list */ +#define MAIL_SEND_RESULT_TRIAL_PLAYERS 12 /* Cannot send mail to trial players */ +#define MAIL_SEND_RESULT_MAIL_WRONG_SERVER 13 /* Cannot send mail across worlds */ +#define MAIL_SEND_RESULT_UNKNOWN_ERROR 14 + +#define MAIL_TYPE_REGULAR 0 +#define MAIL_TYPE_SPAM 1 +#define MAIL_TYPE_GM 2 + +struct QueuedQuest{ + Quest* quest; + int32 step; + bool display_quest_helper; +}; + +struct BuyBackItem{ + int32 item_id; + int32 unique_id; + int16 quantity; + int32 price; + bool save_needed; +}; + +struct MacroData{ + string name; + string text; + int16 icon; +}; + +struct Mail { + int32 mail_id; + int32 player_to_id; + string player_from; + string subject; + string mail_body; + int8 already_read; + int8 mail_type; + int32 coin_copper; + int32 coin_silver; + int32 coin_gold; + int32 coin_plat; + int16 stack; + int32 postage_cost; + int32 attachment_cost; + int32 char_item_id; + int32 time_sent; + int32 expire_time; + int8 save_needed; +}; + +struct MailWindow { + int32 coin_copper; + int32 coin_silver; + int32 coin_gold; + int32 coin_plat; + int32 char_item_id; +}; + +struct PendingGuildInvite { + Guild* guild; + Player* invited_by; +}; + +struct PendingResurrection { + Spawn* caster; + Timer* expire_timer; + string spell_name; + string heal_name; + bool active; + float hp_perc; + float mp_perc; + float range; + int8 crit_mod; + bool no_calcs; + int32 subspell; + bool crit; + bool should_delete; + int32 spell_visual; +}; + +#define PAPERDOLL_TYPE_FULL 0 +#define PAPERDOLL_TYPE_HEAD 1 + +struct IncomingPaperdollImage { + uchar* image_bytes; + int32 current_size_bytes; + int8 image_num_packets; + int8 last_received_packet_index; + int8 image_type; +}; + +class Client { +public: + Client(EQStream* ieqs); + ~Client(); + + bool Process(bool zone_process = false); + void Disconnect(bool send_disconnect = true); + void SetConnected(bool val){ connected = val; } + bool IsConnected(){ return connected; } + bool IsReadyForSpawns(){ return ready_for_spawns; } + bool IsReadyForUpdates() { return ready_for_updates; } + bool IsZoning(){ return client_zoning; } + void SetReadyForSpawns(bool val); + void QueuePacket(EQ2Packet* app); + void SendLoginInfo(); + void SimpleMessage(int8 color, const char* message); + void Message(int8 type, const char* message, ...); + void SendSpellUpdate(Spell* spell); + void Zone(ZoneServer* new_zone, bool set_coords = true); + void Zone(const char* new_zone, bool set_coords = true); + void Zone(int32 zoneid, bool set_coords = true); + void Zone(int32 instanceid, bool set_coords = true, bool byInstanceID=false); + void SendZoneInfo(); + void SendZoneSpawns(); + void HandleVerbRequest(EQApplicationPacket* app); + void SendCharInfo(); + void SendLoginDeniedBadVersion(); + void SendCharPOVGhost(); + void SendPlayerDeathWindow(); + float DistanceFrom(Client* client); + void SendDefaultGroupOptions(); + bool HandleLootItem(Entity* entity, int32 item_id); + bool HandleLootItem(Entity* entity, Item* item); + void HandleLoot(EQApplicationPacket* app); + void HandleSkillInfoRequest(EQApplicationPacket* app); + void HandleExamineInfoRequest(EQApplicationPacket* app); + void HandleQuickbarUpdateRequest(EQApplicationPacket* app); + void SendPopupMessage(int8 unknown, const char* text, const char* type, float size, int8 red, int8 green, int8 blue); + void PopulateSkillMap(); + void ChangeLevel(int16 old_level, int16 new_level); + void ChangeTSLevel(int16 old_level, int16 new_level); + bool Summon(const char* search_name); + bool TryZoneInstance(int32 zoneID, bool zone_coords_valid=false); + bool GotoSpawn(const char* search_name); + void DisplayDeadWindow(); + void HandlePlayerRevive(int32 point_id); + void Bank(Spawn* banker, bool cancel = false); + void BankWithdrawal(int64 amount); + void BankDeposit(int64 amount); + Spawn* GetBanker(); + void SetBanker(Spawn* in_banker); + bool AddItem(int32 item_id, int16 quantity = 0); + bool AddItem(Item* item); + bool AddItemToBank(int32 item_id, int16 quantity = 0); + bool AddItemToBank(Item* item); + bool RemoveItem(Item *item, int16 quantity); + void ProcessTeleport(Spawn* spawn, vector* destinations, int32 transport_id = 0); + void ProcessTeleportLocation(EQApplicationPacket* app); + + void UpdateCharacterInstances(); + void SetLastSavedTimeStamp(int32 unixts) { last_saved_timestamp = unixts; } + int32 GetLastSavedTimeStamp() { return last_saved_timestamp; } + + bool CheckZoneAccess(const char* zoneName); + + ZoneServer* GetCurrentZone(); + void SetCurrentZoneByInstanceID(int32 id, int32 zoneid); + //void SetCurrentZoneByInstanceID(instanceid, zoneid); + void SetCurrentZone(int32 id); + void SetCurrentZone(ZoneServer* zone) { + current_zone = zone; + player->SetZone(zone); + } + Player* GetPlayer(){ return player; } + EQStream* getConnection(){ return eqs; } + + inline int32 GetIP() { return ip; } + inline int16 GetPort() { return port; } + inline int32 WaitingForBootup() { return pwaitingforbootup; } + inline int32 GetCharacterID() { return character_id; } + inline int32 GetAccountID() { return account_id; } + inline const char* GetAccountName() { return account_name; } + inline sint16 GetAdminStatus() { return admin_status; } + inline int16 GetVersion() { return version; } + void SetNameCRC(int32 val){ name_crc = val; } + int32 GetNameCRC(){ return name_crc; } + + + void SetVersion(int16 new_version){ version = new_version; } + void SetAccountID(int32 in_accountid) { account_id = in_accountid; } + void SetCharacterID(int32 in_characterid) { character_id = in_characterid; } + void SetAdminStatus(sint16 in_status) { admin_status = in_status; } + + + void DetermineCharacterUpdates ( ); + + void UpdateTimeStampFlag ( int8 flagType ) + { + if(! (timestamp_flag & flagType ) ) + timestamp_flag |= flagType; + } + + int8 GetTimeStampFlag ( ) { return timestamp_flag; } + bool UpdateQuickbarNeeded(); + void Save(); + bool remove_from_list; + void CloseLoot(); + void SendPendingLoot(int32 total_coins, Entity* entity); + void Loot(int32 total_coins, vector* items, Entity* entity); + void Loot(Entity* entity); + void CheckPlayerQuestsKillUpdate(Spawn* spawn); + void CheckPlayerQuestsChatUpdate(Spawn* spawn); + void CheckPlayerQuestsItemUpdate(Item* item); + void CheckPlayerQuestsSpellUpdate(Spell* spell); + void CheckPlayerQuestsLocationUpdate(); + void AddPendingQuest(Quest* quest); + Quest* GetPendingQuest(int32 id); + void RemovePendingQuest(Quest* quest); + void SetPlayerQuest(Quest* quest, map* progress); + void AddPlayerQuest(Quest* quest, bool call_accepted = true, bool send_packets = true); + void RemovePlayerQuest(int32 id, bool send_update = true, bool delete_quest = true); + void SendQuestJournal(bool all_quests = false, Client* client = 0); + void SendQuestUpdate(Quest* quest); + void SendQuestFailure(Quest* quest); + void SendQuestUpdateStep(Quest* quest, int32 step, bool display_quest_helper = true); + void SendQuestUpdateStepImmediately(Quest* quest, int32 step, bool display_quest_helper = true); + void DisplayQuestComplete(Quest* quest); + void DisplayRandomizeFeatures(int32 features); + void AcceptQuestReward(Quest* quest, int32 item_id); + Quest* GetPendingQuestAcceptance(int32 item_id); + Quest* GetActiveQuest(int32 quest_id); + void DisplayConversation(int32 conversation_id, int32 spawn_id, vector* conversations, const char* text, const char* mp3, int32 key1, int32 key2); + void DisplayConversation(Item* item, vector* conversations, const char* text, int8 type, const char* mp3 = 0, int32 key1 = 0, int32 key2 = 0); + void DisplayConversation(Entity* npc, int8 type, vector* conversations, const char* text, const char* mp3 = 0, int32 key1 = 0, int32 key2 = 0); + void CloseDialog(int32 conversation_id); + int32 GetConversationID(Spawn* spawn, Item* item); + void CombineSpawns(float radius, Spawn* spawn); + void AddCombineSpawn(Spawn* spawn); + void RemoveCombineSpawn(Spawn* spawn); + void SaveCombineSpawns(const char* name = 0); + Spawn* GetCombineSpawn(); + bool ShouldTarget(); + void TargetSpawn(Spawn* spawn); + void ReloadQuests(); + int32 GetCurrentQuestID(){ return current_quest_id; } + void SetLuaDebugClient(bool val); + void SetMerchantTransaction(Spawn* spawn); + Spawn* GetMerchantTransaction(); + void SetMailTransaction(Spawn* spawn); + Spawn* GetMailTransaction(); + void PlaySound(const char* name); + void SendBuyMerchantList(bool sell = false); + void SendSellMerchantList(bool sell = false); + void SendBuyBackList(bool sell = false); + void SendRepairList(); + void ShowLottoWindow(); + void PlayLotto(int32 price, int32 ticket_item_id); + void SendGuildCreateWindow(); + float CalculateBuyMultiplier(int32 merchant_id); + float CalculateSellMultiplier(int32 merchant_id); + void BuyItem(int32 item_id, int16 quantity); + void SellItem(int32 item_id, int16 quantity, int32 unique_id = 0); + void BuyBack(int32 item_id, int16 quantity); + void RepairItem(int32 item_id); + void RepairAllItems(); + void AddBuyBack(int32 unique_id, int32 item_id, int16 quantity, int32 price, bool save_needed = true); + deque* GetBuyBacks(); + vector* GetRepairableItems(); + void SendMailList(); + void DisplayMailMessage(int32 mail_id); + void HandleSentMail(EQApplicationPacket* app); + void DeleteMail(int32 mail_id, bool from_database = false); + bool AddMailCoin(int32 copper, int32 silver = 0, int32 gold = 0, int32 plat = 0); + bool RemoveMailCoin(int32 copper, int32 silver = 0, int32 gold = 0, int32 plat = 0); + void TakeMailAttachments(int32 mail_id); + void CancelSendMail(); + bool GateAllowed(); + bool BindAllowed(); + bool Bind(); + bool Gate(); + void SendChatRelationship(int8 type, const char* name); + void SendFriendList(); + void SendIgnoreList(); + void SendNewSpells(int8 class_id); + string GetCoinMessage(int32 total_coins); + void SetItemSearch(vector* items); + vector* GetSearchItems(); + void SearchStore(int32 page); + void SetPlayer(Player* new_player){ + player = new_player; + } + void AddPendingQuestReward(Quest* quest); + void AddPendingQuestUpdate(int32 quest_id, int32 step_id, int32 progress = 0xFFFFFFFF); + void ProcessQuestUpdates(); + void AddWaypoint(const char* waypoint_name, int8 waypoint_category, int32 spawn_id); + void BeginWaypoint(const char* waypoint_name, float x, float y, float z); + void InspectPlayer(Player* player_to_inspect); + void SetPendingGuildInvite(Guild* guild, Player* invited_by = 0); + PendingGuildInvite* GetPendingGuildInvite() {return &pending_guild_invite;} + void ShowClaimWindow(); + void ShowGuildSearchWindow(); + void CheckQuestQueue(); + void ShowDressingRoom(Item *item, sint32 crc); + void SendCollectionList(); + bool SendCollectionsForItem(Item *item); + void HandleCollectionAddItem(int32 collection_id, Item *item); + void DisplayCollectionComplete(Collection *collection); + void HandInCollections(); + void AcceptCollectionRewards(Collection *collection, int32 selectable_item_id = 0); + void SendRecipeList(); + void SendTitleUpdate(); + void SendUpdateTitles(sint16 prefix, sint16 suffix); + void SendLanguagesUpdate(int32 id); + void SendAchievementsList(); + void SendAchievementUpdate(bool first_login = false); + + ///Send the pet options window to the client + ///Type of pet, 1 = combat 0 = non combat + void SendPetOptionsWindow(const char* pet_name, int8 type = 1); + void SendBiography(); + + bool IsCrafting(); + + void SetRecipeListSent(bool val) {m_recipeListSent = val; } + bool GetRecipeListSent() { return m_recipeListSent; } + void ShowRecipeBook(); + PendingResurrection* GetCurrentRez(); + void SendResurrectionWindow(); + void AcceptResurrection(); + Mutex m_resurrect; + Mutex* GetResurrectMutex(); + void SetPendingLastName(string last_name); + void RemovePendingLastName(); + string* GetPendingLastName(); + void SendLastNameConfirmation(); + + void SetInitialSpawnsSent(bool val) { initial_spawns_sent = val; } + + bool GetInitialSpawnsSent() { return initial_spawns_sent; } + + void SendQuestJournalUpdate(Quest* quest); + + void AddQuestTimer(int32 quest_id); + + void RemoveQuestTimer(int32 quest_id); + + void SetPendingFlightPath(int32 val) { pending_flight_path = val; } + int32 GetPendingFlightPath() { return pending_flight_path; } + + void EndAutoMount(); + bool GetOnAutoMount() { return on_auto_mount; } + +private: + void SavePlayerImages(); + void SkillChanged(Skill* skill, int16 previous_value, int16 new_value); + void GiveQuestReward(Quest* quest); + void SetStepComplete(int32 quest_id, int32 step); + void AddStepProgress(int32 quest_id, int32 step, int32 progress); + map > quest_pending_updates; + vector quest_queue; + vector quest_pending_reward; + volatile bool quest_updates; + Mutex MQuestPendingUpdates; + Mutex MQuestQueue; + Mutex MDeletePlayer; + vector* search_items; + Spawn* transport_spawn; + Mutex MBuyBack; + deque buy_back_items; + Spawn* merchant_transaction; + Spawn* mail_transaction; + Mutex MPendingQuestAccept; + vector pending_quest_accept; + bool lua_debug; + bool should_target; + Spawn* combine_spawn; + int8 num_active_failures; + int32 next_conversation_id; + map conversation_spawns; + map conversation_items; + map > conversation_map; + int32 current_quest_id; + Spawn* banker; + map sent_spell_details; + map sent_item_details; + Player* player; + int16 version; + int8 timestamp_flag; + int32 ip; + int16 port; + int32 account_id; + int32 character_id; + sint16 admin_status; // -2 Banned, -1 Suspended, 0 User, etc. + char account_name[64]; + char zone_name[64]; + int32 zoneID; + int32 instanceID; + Timer* autobootup_timeout; + int32 pwaitingforbootup; + int32 last_update_time; + + int32 last_saved_timestamp; + + Timer* CLE_keepalive_timer; + Timer* connect; + Timer* camp_timer; + Timer* disconnect_timer; + bool connected; + bool ready_for_spawns; + bool ready_for_updates; + bool seencharsel; + bool connected_to_zone; + bool client_zoning; + bool firstlogin; + bool new_client_login; + Timer pos_update; + Timer quest_pos_timer; + Timer lua_debug_timer; + bool player_pos_changed; + bool HandlePacket(EQApplicationPacket *app); + EQStream* eqs; + bool quickbar_changed; + ZoneServer* current_zone; + int32 name_crc; + MailWindow mail_window; + PendingGuildInvite pending_guild_invite; + PendingResurrection current_rez; + string* pending_last_name; + IncomingPaperdollImage incoming_paperdoll; + + bool m_recipeListSent; + bool initial_spawns_sent; + bool should_load_spells; + + // int32 = quest id + vector quest_timers; + Mutex MQuestTimers; + + int32 pending_flight_path; + + bool on_auto_mount; + bool EntityCommandPrecheck(Spawn* spawn, const char* command); +}; + +class ClientList { +public: + ClientList(); + ~ClientList(); + bool ContainsStream(EQStream* eqs); + void Add(Client* client); + Client* Get(int32 ip, int16 port); + Client* FindByAccountID(int32 account_id); + Client* FindByName(char* charname); + void Remove(Client* client, bool delete_data = false); + void RemoveConnection(EQStream* eqs); + void Process(); + int32 Count(); + void ReloadQuests(); +private: + Mutex MClients; + list client_list; +}; +#endif diff --git a/EQ2/source/WorldServer/makefile b/EQ2/source/WorldServer/makefile new file mode 100644 index 000000000..375af8eac --- /dev/null +++ b/EQ2/source/WorldServer/makefile @@ -0,0 +1,100 @@ + + +# Programs +CC = gcc +CXX = g++ +LINKER = g++ + + +# Configuration +Build_Dir = build +Source_Dir = .. +#Conf_Dir = ../../conf +#Content_Dir = ../../../../vgocontent +APP = eq2world + + +# LUA flags +Lua_C_Flags = -DLUA_COMPAT_ALL -DLUA_USE_LINUX +Lua_W_Flags = -Wall + + +# World flags +C_Flags = `mysql_config --cflags` -march=native -pipe -pthread -std=c++0x +LD_Flags = `mysql_config --libs` -rdynamic -lm -Wl,-E -ldl -lreadline +W_Flags = -Wall -Wno-reorder +D_Flags = -DEQ2 -DWORLD -D_GNU_SOURCE + + +# Setup Debug or Release build +ifeq ($(BUILD),debug) + # "Debug" build - minimum optimization, and debugging symbols + C_Flags += -O -ggdb + D_Flags += -DDEBUG + Current_Build_Dir := $(Build_Dir)/debug + App_Filename = $(APP)_debug +else + # "Release" build - optimization, and no debug symbols + C_Flags += -O2 -s -DNDEBUG + Current_Build_Dir := $(Build_Dir)/release + App_Filename = $(APP) +endif + + +# File lists +World_Source = $(wildcard $(Source_Dir)/WorldServer/*.cpp) $(wildcard $(Source_Dir)/WorldServer/*/*.cpp) +World_Objects = $(patsubst %.cpp,$(Current_Build_Dir)/%.o,$(subst $(Source_Dir)/,,$(World_Source))) +Common_Source = $(wildcard $(Source_Dir)/common/*.cpp) +Common_Objects = $(patsubst %.cpp,$(Current_Build_Dir)/%.o,$(subst $(Source_Dir)/,,$(Common_Source))) +Lua_Source = $(wildcard $(Source_Dir)/LUA/*.c) +Lua_Objects = $(patsubst %.c,$(Current_Build_Dir)/%.o,$(subst $(Source_Dir)/,,$(Lua_Source))) + + +# Receipes +all: $(APP) + +$(APP): $(Common_Objects) $(World_Objects) $(Lua_Objects) + @echo Linking... + @$(LINKER) $(W_Flags) $^ $(LD_Flags) -o $(App_Filename) + @test -e $(APP) || /bin/true + #@ln -s $(App_Filename) $(APP) || /bin/true + @echo Finished building world. + +$(Current_Build_Dir)/LUA/%.o: $(Source_Dir)/LUA/%.c + @mkdir -p $(dir $@) + $(CC) -c $(Lua_C_Flags) $(Lua_W_Flags) $< -o $@ + +$(Current_Build_Dir)/%.o: $(Source_Dir)/%.cpp + @mkdir -p $(dir $@) + $(CXX) -c $(C_Flags) $(D_Flags) $(W_Flags) $< -o $@ + +#setup: +# @test ! -e volumes.phys && ln -s $(Conf_Dir)/volumes.phys . || /bin/true +# @test ! -e vgemu-structs.xml && ln -s $(Conf_Dir)/vgemu-structs.xml . || /bin/true +# @$(foreach folder,$(wildcard $(Content_Dir)/scripts/*),test -d $(Content_Dir)/scripts && test ! -e $(notdir $(folder)) && ln -s $(folder) . || /bin/true) +# @echo "Symlinks have been created." +# @cp -n $(Conf_Dir)/vgemu-world.xml . +# @echo "You need to edit your config file: vgemu-world.xml" + +release: + @$(MAKE) "BUILD=release" + +debug: + @$(MAKE) "BUILD=debug" + +clean: + rm -rf $(filter-out %Lua,$(foreach folder,$(wildcard $(Current_Build_Dir)/*),$(folder))) $(App_Filename) $(APP) + +cleanlua: + rm -rf $(Current_Build_Dir)/Lua + +cleanall: + rm -rf $(Build_Dir) $(App_Filename) $(APP) + +#cleansetup: +# rm volumes.phys vgemu-structs.xml $(foreach folder,$(wildcard $(Content_Dir)/scripts/*),$(notdir $(folder))) + +#docs: docs-world + +#docs-world: +# @cd ../../doc; doxygen Doxyfile-World diff --git a/EQ2/source/WorldServer/makefile.a64 b/EQ2/source/WorldServer/makefile.a64 new file mode 100644 index 000000000..8be999ec3 --- /dev/null +++ b/EQ2/source/WorldServer/makefile.a64 @@ -0,0 +1,209 @@ +#These are the build commands for Lua +SYSCFLAGS="-DLUA_COMPAT_ALL -DLUA_USE_LINUX" +LUABUILDCMD=gcc -O2 -Wall -c $(SYSCFLAGS) +LUADIR=LUA +BUILDLUA=@echo Building Lua 5.3.4...; cd $(LUADIR); \ +$(LUABUILDCMD) lapi.c; \ +$(LUABUILDCMD) lauxlib.c; \ +$(LUABUILDCMD) lbaselib.c; \ +$(LUABUILDCMD) lbitlib.c; \ +$(LUABUILDCMD) lcode.c; \ +$(LUABUILDCMD) lcorolib.c; \ +$(LUABUILDCMD) lctype.c; \ +$(LUABUILDCMD) ldblib.c; \ +$(LUABUILDCMD) ldebug.c; \ +$(LUABUILDCMD) ldo.c; \ +$(LUABUILDCMD) ldump.c; \ +$(LUABUILDCMD) lfunc.c; \ +$(LUABUILDCMD) lgc.c; \ +$(LUABUILDCMD) linit.c; \ +$(LUABUILDCMD) liolib.c; \ +$(LUABUILDCMD) llex.c; \ +$(LUABUILDCMD) lmathlib.c; \ +$(LUABUILDCMD) lmem.c; \ +$(LUABUILDCMD) loadlib.c; \ +$(LUABUILDCMD) lobject.c; \ +$(LUABUILDCMD) lopcodes.c; \ +$(LUABUILDCMD) loslib.c; \ +$(LUABUILDCMD) lparser.c; \ +$(LUABUILDCMD) lstate.c; \ +$(LUABUILDCMD) lstring.c; \ +$(LUABUILDCMD) lstrlib.c; \ +$(LUABUILDCMD) ltable.c; \ +$(LUABUILDCMD) ltablib.c; \ +$(LUABUILDCMD) ltm.c; \ +$(LUABUILDCMD) lundump.c; \ +$(LUABUILDCMD) lutf8lib.c; \ +$(LUABUILDCMD) lvm.c; \ +$(LUABUILDCMD) lzio.c; \ +$(LUABUILDCMD) lua.hpp; \ +ar rs liblua5-3-4.a *.o; \ +echo Finished with Lua. + +#ar rs liblua5-3-4.a lapi.o lauxlib.o lbaselib.o lbitlib.o lcode.o lcorolib.o lctype.o ldblib.o ldebug.o ldo.o ldump.o lfunc.o lgc.o linit.o liolib.o llex.o lmathlib.o lmem.o loadlib.o lobject.o lopcodes.o loslib.o lparser.o lstate.o lstring.o lstrlib.o ltable.o ltablib.o ltm.o lundump.o lutf8lib.o lvm.o lzio.o; \ + +APP=eq2world +SRC= ../common/Condition.o \ + ../common/ConfigReader.o \ + ../common/CRC16.o \ + ../common/Crypto.o \ + ../common/DatabaseNew.o \ + ../common/DatabaseResult.o \ + ../common/dbcore.o \ + ../common/emu_opcodes.o \ + ../common/EQEMuError.o \ + ../common/Log.o \ + ../common/md5.o \ + ../common/misc.o \ + ../common/MiscFunctions.o \ + ../common/Mutex.o \ + ../common/opcodemgr.o \ + ../common/packet_dump.o \ + ../common/packet_functions.o \ + ../common/PacketStruct.o \ + ../common/RC4.o \ + ../common/TCPConnection.o \ + ../common/timer.o \ + ../common/unix.o \ + ../common/xmlParser.o \ + ../common/debug.o \ + ../common/database.o \ + ../common/EQStream.o \ + ../common/EQStreamFactory.o \ + ../common/EQPacket.o \ + Achievements/Achievements.o \ + Achievements/AchievementsDB.o \ + AltAdvancement/AltAdvancement.o \ + AltAdvancement/AltAdvancementDB.o \ + Chat/Chat.o \ + Chat/ChatDB.o \ + Chat/ChatChannel.o \ + classes.o \ + client.o \ + ClientPacketFunctions.o \ + Collections/Collections.o \ + Collections/CollectionsDB.o \ + Combat.o \ + Commands/Commands.o \ + Commands/CommandsDB.o \ + Commands/ConsoleCommands.o \ + Entity.o \ + Factions.o \ + GroundSpawn.o \ + Guilds/Guild.o \ + Guilds/GuildDB.o \ + HeroicOp/HeroicOp.o \ + HeroicOp/HeroicOpDB.o \ + HeroicOp/HeroicOpPackets.o \ + Housing/HousingDB.o \ + Housing/HousingPackets.o \ + IRC/IRC.o \ + IRC/IRCChannel.o \ + IRC/IRCMessage.o \ + IRC/IRCServer.o \ + Items/Items.o \ + Items/ItemsDB.o \ + Items/Loot.o \ + Items/LootDB.o \ + Languages.o \ + LoginServer.o \ + LuaFunctions.o \ + LuaInterface.o \ + net.o \ + NPC.o \ + NPC_AI.o \ + Object.o \ + Patch/buffer.o \ + Patch/patch.o \ + Patch/tcp.o \ + Patch/tcp-client.o \ + Player.o \ + PlayerGroups.o \ + Quests.o \ + races.o \ + RaceTypes/RaceTypes.o \ + RaceTypes/RaceTypesDB.o \ + Recipes/Recipe.o \ + Recipes/RecipeDB.o \ + Rules/Rules.o \ + Rules/RulesDB.o \ + Sign.o \ + Skills.o \ + Spawn.o \ + Spells.o \ + SpellProcess.o \ + Titles.o \ + Tradeskills/Tradeskills.o \ + Tradeskills/TradeskillsDB.o \ + Tradeskills/TradeskillsPackets.o \ + Traits/Traits.o \ + Widget.o \ + World.o \ + WorldDatabase.o \ + Zone/SPGrid.o \ + zoneserver.o + + +CXXFLAGS=-std=c++0x +CFLAGS=`mysql_config --cflags` -march=native -pipe -pthread +LDFLAGS=`mysql_config --libs` -I$(LUADIR) -L$(LUADIR) -llua5-3-4 -rdynamic +WFLAGS=-Wall -Wno-reorder +DFLAGS=-DEQ2 -DWORLD +CC=g++ +LINKER=g++ + +#Switch for Debug or Release build +ifeq ($(BUILD),release) +# "Release" build - optimization, and no debug symbols +CFLAGS += -O2 -s -DNDEBUG +else +# "Debug" build - minimum optimization, and debugging symbols +CFLAGS += -O -ggdb +endif + +all: $(APP) + +$(APP): $(SRC) + $(BUILDLUA) + @echo Linking...; $(LINKER) $(CFLAGS) $(WFLAGS) $(DFLAGS) $(CXXFLAGS) $(OBJS) $^ $(LDFLAGS) -o $@ -lm -Wl,-E -ldl -lreadline + @echo Finished building world. + +%.o: %.cpp + $(CC) -c $(CFLAGS) $(CXXFLAGS) $(WFLAGS) $(DFLAGS) $< -o $@ + +.obj/%.o: $(COMMON)/%.cpp $(COMMON)/%.h + mkdir -p .obj + $(CC) $(CFLAGS) $(WFLAGS) $(DFLAGS) $(CXXFLAGS) -c $< -o $@ + +debug: + @$(MAKE) "BUILD=debug" + +release: + @$(MAKE) "BUILD=release" + +clean: + rm -f $(SRC) $(APP) + + + + + +#CFLAGS=`mysql_config --cflags` -I../LUA/include +#LIB=`mysql_config --libs` -L../LUA -llua5.1 +#COPTS=$(WFLAGS) -g -march=athlon64 -O -pthread -pipe -DFX -D_GNU_SOURCE -DINVERSEXY $(DFLAGS) $(CFLAGS) +#LINKOPTS=-rdynamic -L. -lstdc++ -lm -lz $(LIB) -ldl +#all: $(APP) + +#$(APP): $(SF) +# @$(LINKER) $(COPTS) $(OBJS) $^ $(LINKOPTS) -o $@ + +#clean: +# @rm -f $(SF) $(APP) + +#%.o: %.cpp +# @$(CC) -c $(COPTS) $< -o $@ + +#.obj/%.o: ../common/%.cpp ../common/%.h +# @mkdir -p .obj +# @$(CC) $(COPTS) -c $< -o $@ + diff --git a/EQ2/source/WorldServer/net.cpp b/EQ2/source/WorldServer/net.cpp new file mode 100644 index 000000000..080527008 --- /dev/null +++ b/EQ2/source/WorldServer/net.cpp @@ -0,0 +1,989 @@ +/* + EQ2Emulator: Everquest II Server Emulator + Copyright (C) 2007 EQ2EMulator Development Team (http://www.eq2emulator.net) + + This file is part of EQ2Emulator. + + EQ2Emulator is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + EQ2Emulator is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with EQ2Emulator. If not, see . +*/ +#include "../common/debug.h" +#include "../common/Log.h" + +#include +using namespace std; +#include +#include +#include +#include + +#include + +#include "../common/queue.h" +#include "../common/timer.h" +#include "../common/EQStreamFactory.h" +#include "../common/EQStream.h" +#include "net.h" + +#include "Variables.h" +#include "WorldDatabase.h" +#include "../common/seperator.h" +#include "../common/version.h" +#include "../common/EQEMuError.h" +#include "../common/opcodemgr.h" +#include "../common/Common_Defines.h" + +#include "LoginServer.h" +#include "Commands/Commands.h" +#include "Factions.h" +#include "World.h" +#include "../common/ConfigReader.h" +#include "Skills.h" +#include "LuaInterface.h" +#include "Guilds/Guild.h" +#include "Commands/ConsoleCommands.h" +#include "Traits/Traits.h" +#include "IRC/IRC.h" + +#ifdef WIN32 + #include + #define snprintf _snprintf + #define vsnprintf _vsnprintf + #define strncasecmp _strnicmp + #define strcasecmp _stricmp + #include +#else + #include + #include "../common/unix.h" +#endif + +#ifdef PROFILER +#define SHINY_PROFILER TRUE +#include "../Profiler/src/Shiny.h" +#endif + +NetConnection net; +World world; +EQStreamFactory eqsf(LoginStream); +LoginServer loginserver; +LuaInterface* lua_interface = new LuaInterface(); +#include "MutexList.h" + +#include "Rules/Rules.h" +#include "Titles.h" +#include "Languages.h" +#include "Achievements/Achievements.h" + +#include "Patch/patch.h" + +volatile bool RunLoops = true; +sint32 numclients = 0; +sint32 numzones = 0; +extern ClientList client_list; +extern ZoneList zone_list; +extern MasterFactionList master_faction_list; +extern WorldDatabase database; +extern MasterSpellList master_spell_list; +extern MasterTraitList master_trait_list; +extern MasterSkillList master_skill_list; +extern MasterItemList master_item_list; +extern GuildList guild_list; +extern Variables variables; +extern IRC irc; +ConfigReader configReader; +int32 MasterItemList::next_unique_id = 0; +int last_signal = 0; +RuleManager rule_manager; +MasterTitlesList master_titles_list; +MasterLanguagesList master_languages_list; +extern MasterAchievementList master_achievement_list; +extern map EQOpcodeVersions; +PatchServer patch; + +ThreadReturnType ItemLoad (void* tmp); +ThreadReturnType AchievmentLoad (void* tmp); +ThreadReturnType SpellLoad (void* tmp); + +int main(int argc, char** argv) { +#ifdef PROFILER + PROFILE_FUNC(); +#endif + LogParseConfigs(); + WelcomeHeader(); + + int32 t_total = Timer::GetUnixTimeStamp(); + + LogStart(); + + LogWrite(INIT__INFO, 0, "Init", "Starting EQ2Emulator WorldServer..."); + //int32 server_startup = time(NULL); + + //remove this when all database calls are using the new database class + if (!database.Init()) { + LogStop(); + return EXIT_FAILURE; + } + + if (!database.ConnectNewDatabase()) + return EXIT_FAILURE; + + #ifdef _DEBUG + _CrtSetDbgFlag( _CRTDBG_ALLOC_MEM_DF | _CRTDBG_LEAK_CHECK_DF); + #endif + + if (signal(SIGINT, CatchSignal) == SIG_ERR) { + LogWrite(INIT__ERROR, 0, "Init", "Could not set signal handler"); + return 0; + } + if (signal(SIGSEGV, CatchSignal) == SIG_ERR) { + LogWrite(INIT__ERROR, 0, "Init", "Could not set signal handler"); + return 0; + } + if (signal(SIGILL, CatchSignal) == SIG_ERR) { + LogWrite(INIT__ERROR, 0, "Init", "Could not set signal handler"); + return 0; + } + #ifndef WIN32 + if (signal(SIGPIPE, SIG_IGN) == SIG_ERR) { + LogWrite(INIT__ERROR, 0, "Init", "Could not set signal handler"); + return 0; + } + #endif + + LogWrite(WORLD__DEBUG, 0, "World", "Randomizing World..."); + srand(time(NULL)); + + net.ReadLoginINI(); + if(loginserver.UpdatesAuto() || loginserver.UpdatesAsk() || loginserver.UpdatesAutoData()){ + LogWrite(INIT__PATCHER_INFO, 0, "Patcher", "Connecting to DB PatchServer..."); + // Old DB patch server + /*int16 updateport = 0; + char* updateaddress = net.GetUpdateServerInfo(&updateport); + loginserver.ConnectToUpdateServer(updateaddress, updateport); + LogWrite(INIT__PATCHER_INFO, 0, "Patcher", "DB Update check completed...");*/ + + + //New patch server + if (!patch.IsEnabled()) + LogWrite(INIT__PATCHER_INFO, 0, "Patcher", "Not checking patch server for updates"); + else { + bool success = patch.Start(); + if (success) + success = patch.Process(); + patch.Stop(); + //if (patch.QuitAfter()) + //looping = false; + } + } + + // JA: Grouping all System (core) data loads together for timing purposes + LogWrite(WORLD__INFO, 0, "World", "Loading System Data..."); + int32 t_now = Timer::GetUnixTimeStamp(); + + LogWrite(WORLD__DEBUG, 1, "World", "-Loading opcodes..."); + EQOpcodeVersions = database.GetVersions(); + map::iterator version_itr; + int16 version1 = 0; + for (version_itr = EQOpcodeVersions.begin(); version_itr != EQOpcodeVersions.end(); version_itr++) { + version1 = version_itr->first; + EQOpcodeManager[version1] = new RegularOpcodeManager(); + map eq = database.GetOpcodes(version1); + if(!EQOpcodeManager[version1]->LoadOpcodes(&eq)) { + LogWrite(INIT__ERROR, 0, "Init", "Loading opcodes failed. Make sure you have sourced the opcodes.sql file!"); + return false; + } + } + + LogWrite(WORLD__DEBUG, 1, "World", "-Loading structs..."); + if(!configReader.LoadFile("CommonStructs.xml") || !configReader.LoadFile("WorldStructs.xml") || !configReader.LoadFile("SpawnStructs.xml") || !configReader.LoadFile("ItemStructs.xml")) { + LogWrite(INIT__ERROR, 0, "Init", "Loading structs failed. Make sure you have CommonStructs.xml, WorldStructs.xml, SpawnStructs.xml, and ItemStructs.xml in the working directory!"); + return false; + } + + world.init(); + + bool threadedLoad = rule_manager.GetGlobalRule(R_World, ThreadedLoad)->GetBool(); + + LogWrite(WORLD__DEBUG, 1, "World", "-Loading EQ2 time of day..."); + loginserver.InitLoginServerVariables(); + + LogWrite(WORLD__INFO, 0, "World", "Loaded System Data (took %u seconds)", Timer::GetUnixTimeStamp() - t_now); + // JA: End System Data loading functions + + if (threadedLoad) { + LogWrite(WORLD__WARNING, 0, "Threaded", "Using Threaded loading of static data..."); +#ifdef WIN32 + _beginthread(ItemLoad, 0, &world); + _beginthread(SpellLoad, 0, &world); + //_beginthread(AchievmentLoad, 0, &world); +#else + pthread_t thread; + pthread_create(&thread, NULL, ItemLoad, &world); + pthread_detach(thread); + pthread_t thread2; + pthread_create(&thread2, NULL, SpellLoad, &world); + pthread_detach(thread2); + //pthread_t thread3; + //pthread_create(&thread3, NULL, AchievmentLoad, &world); + //pthread_detach(thread3); +#endif + } + + + // Called as a function so we can use /reload spawns any time + /*LogWrite(SPAWN__INFO, 0, "Spawn", "Initializing Spawn Subsystem..."); + t_now = Timer::GetUnixTimeStamp(); + world.LoadSpawnInformation(); + LogWrite(SPAWN__INFO, 0, "Spawn", "Initialize Spawn Subsystem complete (took %u seconds)", Timer::GetUnixTimeStamp() - t_now);*/ + + // JA temp logger + LogWrite(MISC__TODO, 0, "Reformat", "JA: This is as far as I got reformatting the console logs."); + + if (!threadedLoad) { + // JA: Load all Item info + LogWrite(ITEM__INFO, 0, "Items", "Loading Items..."); + database.LoadItemList(); + MasterItemList::ResetUniqueID(database.LoadNextUniqueItemID()); + } + + if (!threadedLoad) { + // JA: Load all Spell info + LogWrite(SPELL__INFO, 0, "Spells", "Loading Spells..."); + database.LoadSpells(); + + LogWrite(SPELL__INFO, 0, "Spells", "Loading Spell Errors..."); + database.LoadSpellErrors(); + + // Jabantiz: Load traits + LogWrite(WORLD__INFO, 0, "Traits", "Loading Traits..."); + database.LoadTraits(); + } + + if (!threadedLoad) { + // JA: Load all Quest info + LogWrite(QUEST__INFO, 0, "Quests", "Loading Quests..."); + database.LoadQuests(); + } + + if (!threadedLoad) { + LogWrite(COLLECTION__INFO, 0, "Collect", "Loading Collections..."); + database.LoadCollections(); + } + + LogWrite(GUILD__INFO, 0, "Guilds", "Loading Guilds..."); + database.LoadGuilds(); + + LogWrite(TRADESKILL__INFO, 0, "Recipes", "Loading Recipe Books..."); + database.LoadRecipeBooks(); + LogWrite(TRADESKILL__INFO, 0, "Recipes", "Loading Recipes..."); + database.LoadRecipes(); + LogWrite(TRADESKILL__INFO, 0, "Tradeskills", "Loading Tradeskill Events..."); + database.LoadTradeskillEvents(); + + if (!threadedLoad) { + LogWrite(ACHIEVEMENT__INFO, 0, "Achievements", "Loading Achievements..."); + //database.LoadAchievements(); + //master_achievement_list.CreateMasterAchievementListPacket(); + } + + LogWrite(SPELL__INFO, 0, "AA", "Loading Alternate Advancements..."); + database.LoadAltAdvancements(); + LogWrite(SPELL__INFO, 0, "AA", "Loading AA Tree Nodes..."); + database.LoadTreeNodes(); + LogWrite(WORLD__INFO, 0, "Titles", "Loading Titles..."); + database.LoadTitles(); + LogWrite(WORLD__INFO, 0, "Languages", "Loading Languages..."); + database.LoadLanguages(); + + LogWrite(CHAT__INFO, 0, "Chat", "Loading channels..."); + database.LoadChannels(); + + if (!threadedLoad) { + LogWrite(MERCHANT__INFO, 0, "Merchants", "Loading Merchants..."); + database.LoadMerchantInformation(); + } + + LogWrite(LUA__INFO, 0, "LUA", "Loading Spawn Scripts..."); + database.LoadSpawnScriptData(); + + LogWrite(LUA__INFO, 0, "LUA", "Loading Zone Scripts..."); + database.LoadZoneScriptData(); + + LogWrite(WORLD__INFO, 0, "World", "Loading House Zone Data..."); + database.LoadHouseZones(); + database.LoadPlayerHouses(); + + LogWrite(WORLD__INFO, 0, "World", "Loading Heroic OP Data..."); + database.LoadHOStarters(); + database.LoadHOWheel(); + + LogWrite(WORLD__INFO, 0, "World", "Loading Race Types Data..."); + database.LoadRaceTypes(); + + if (threadedLoad) { + LogWrite(WORLD__INFO, 0, "World", "Waiting for load threads to finish."); + while (!world.items_loaded || !world.spells_loaded /*|| !world.achievments_loaded*/) + Sleep(10); + LogWrite(WORLD__INFO, 0, "World", "Load threads finished."); + } + + LogWrite(WORLD__INFO, 0, "World", "Total World startup time: %u seconds.", Timer::GetUnixTimeStamp() - t_total); + + if (eqsf.Open(net.GetWorldPort())) { + if (strlen(net.GetWorldAddress()) == 0) + LogWrite(NET__INFO, 0, "Net", "World server listening on port %i", net.GetWorldPort()); + else + LogWrite(NET__INFO, 0, "Net", "World server listening on: %s:%i", net.GetWorldAddress(), net.GetWorldPort()); + + if(strlen(net.GetInternalWorldAddress())>0) + LogWrite(NET__INFO, 0, "Net", "World server listening on: %s:%i", net.GetInternalWorldAddress(), net.GetWorldPort()); + } + else { + LogWrite(NET__ERROR, 0, "Net", "Failed to open port %i.", net.GetWorldPort()); + return 1; + } + + Timer InterserverTimer(INTERSERVER_TIMER); // does MySQL pings and auto-reconnect + InterserverTimer.Trigger(); + Timer* TimeoutTimer = new Timer(5000); + TimeoutTimer->Start(); + EQStream* eqs = 0; + UpdateWindowTitle(0); + LogWrite(ZONE__INFO, 0, "Zone", "Starting static zones..."); + database.LoadSpecialZones(); + map connecting_clients; + map::iterator cc_itr; + + // Check to see if a global channel is enabled, if so try to connect to it + if (rule_manager.GetGlobalRule(R_World, IRCGlobalEnabled)->GetBool()) { + LogWrite(CHAT__INFO, 0, "IRC", "Starting global IRC server..."); + // Set the irc nick name to: ServerName[IRCBot] + string world_name = net.GetWorldName(); + // Remove all white spaces from the server name + world_name.erase(std::remove(world_name.begin(), world_name.end(), ' '), world_name.end()); + string nick = world_name + string("[IRCBot]"); + // Connect the global server + irc.ConnectToGlobalServer(rule_manager.GetGlobalRule(R_World, IRCAddress)->GetString(), rule_manager.GetGlobalRule(R_World, IRCPort)->GetInt16(), nick.c_str()); + } + + // JohnAdams - trying to make multi-char console input + LogWrite(WORLD__DEBUG, 0, "Thread", "Starting console command thread..."); + #ifdef WIN32 + _beginthread(EQ2ConsoleListener, 0, NULL); + #else + /*pthread_t thread; + pthread_create(&thread, NULL, &EQ2ConsoleListener, NULL); + pthread_detach(thread);*/ + #endif + // + + // just before starting loops, announce how to get console help + LogWrite(WORLD__INFO, 0, "Console", "Type 'help' or '?' and press enter for menu options."); + while(RunLoops) { + Timer::SetCurrentTime(); + +#ifndef NO_CATCH + try + { +#endif + while ((eqs = eqsf.Pop())) { + struct in_addr in; + in.s_addr = eqs->GetRemoteIP(); + LogWrite(NET__DEBUG, 0, "Net", "New client from ip: %s port: %i", inet_ntoa(in), ntohs(eqs->GetRemotePort())); + + // JA: Check for BannedIPs + if (rule_manager.GetGlobalRule(R_World, UseBannedIPsTable)->GetInt8() == 1) + { + LogWrite(WORLD__DEBUG, 0, "World", "Checking inbound connection %s against BannedIPs table", inet_ntoa(in)); + if (database.CheckBannedIPs(inet_ntoa(in))) + { + LogWrite(WORLD__DEBUG, 0, "World", "Connection from %s FAILED banned IPs check. Closing connection.", inet_ntoa(in)); + eqs->Close(); // JA: If the inbound IP is on the banned table, close the EQStream. + } + } + + if(eqs && eqs->CheckActive() && client_list.ContainsStream(eqs) == false){ + LogWrite(NET__DEBUG, 0, "Net", "Adding new client..."); + Client* client = new Client(eqs); + client_list.Add(client); + } + else if(eqs && !client_list.ContainsStream(eqs)){ + LogWrite(NET__DEBUG, 0, "Net", "Adding client to waiting list..."); + connecting_clients[eqs] = Timer::GetCurrentTime2(); + } + } + if(connecting_clients.size() > 0){ + for(cc_itr = connecting_clients.begin(); cc_itr!=connecting_clients.end(); cc_itr++){ + if(cc_itr->first && cc_itr->first->CheckActive() && client_list.ContainsStream(cc_itr->first) == false){ + LogWrite(NET__DEBUG, 0, "Net", "Removing client from waiting list..."); + Client* client = new Client(cc_itr->first); + client_list.Add(client); + connecting_clients.erase(cc_itr); + break; + } + else if(Timer::GetCurrentTime2() >= (cc_itr->second + 10000)){ + connecting_clients.erase(cc_itr); + break; + } + } + } + world.Process(); + client_list.Process(); + loginserver.Process(); + if(TimeoutTimer->Check()){ + eqsf.CheckTimeout(); + } + if (InterserverTimer.Check()) { + InterserverTimer.Start(); + database.ping(); + + if (net.LoginServerInfo && loginserver.Connected() == false && loginserver.CanReconnect()) { + LogWrite(WORLD__DEBUG, 0, "Thread", "Starting autoinit loginserver thread..."); +#ifdef WIN32 + _beginthread(AutoInitLoginServer, 0, NULL); +#else + pthread_t thread; + pthread_create(&thread, NULL, &AutoInitLoginServer, NULL); + pthread_detach(thread); +#endif + } + } +#ifndef NO_CATCH + } + catch(...) { + LogWrite(WORLD__ERROR, 0, "World", "Exception caught in net main loop!"); + } +#endif + if (numclients == 0) { + Sleep(10); + continue; + } + Sleep(1); + } + LogWrite(WORLD__DEBUG, 0, "World", "The world is ending!"); + + LogWrite(WORLD__DEBUG, 0, "IRC", "Shutting IRC down"); + irc.SetRunning(false); + + LogWrite(WORLD__DEBUG, 0, "World", "Shutting down zones..."); + zone_list.ShutDownZones(); + + LogWrite(WORLD__DEBUG, 0, "World", "Shutting down LUA interface..."); + safe_delete(lua_interface); + safe_delete(TimeoutTimer); + eqsf.Close(); + map::iterator opcode_itr; + for(opcode_itr=EQOpcodeManager.begin();opcode_itr!=EQOpcodeManager.end();opcode_itr++){ + safe_delete(opcode_itr->second); + } + CheckEQEMuErrorAndPause(); + +#ifdef PROFILER + PROFILER_UPDATE(); + PROFILER_OUTPUT(); +#endif + + LogWrite(WORLD__INFO, 0, "World", "Exiting... we hope you enjoyed your flight."); + LogStop(); + return 0; +} + +ThreadReturnType ItemLoad (void* tmp) +{ + LogWrite(WORLD__WARNING, 0, "Thread", "Item Loading Thread started."); +#ifdef WIN32 + SetThreadPriority(GetCurrentThread(), THREAD_PRIORITY_NORMAL); +#endif + if (tmp == 0) { + ThrowError("ItemLoad(): tmp = 0!"); + THREAD_RETURN(NULL); + } + World* world = (World*) tmp; + WorldDatabase db; + db.Init(); + db.ConnectNewDatabase(); + + LogWrite(ITEM__INFO, 0, "Items", "Loading Items..."); + db.LoadItemList(); + MasterItemList::ResetUniqueID(db.LoadNextUniqueItemID()); + + // Relies on the item list so needs to be in the item thread + LogWrite(COLLECTION__INFO, 0, "Collect", "Loading Collections..."); + db.LoadCollections(); + + LogWrite(MERCHANT__INFO, 0, "Merchants", "Loading Merchants..."); + db.LoadMerchantInformation(); + + LogWrite(QUEST__INFO, 0, "Quests", "Loading Quests..."); + db.LoadQuests(); + + world->items_loaded = true; + LogWrite(WORLD__WARNING, 0, "Thread", "Item Loading Thread completed."); + + mysql_thread_end(); + THREAD_RETURN(NULL); +} + +ThreadReturnType SpellLoad (void* tmp) +{ + LogWrite(WORLD__WARNING, 0, "Thread", "Spell Loading Thread started."); +#ifdef WIN32 + SetThreadPriority(GetCurrentThread(), THREAD_PRIORITY_NORMAL); +#endif + if (tmp == 0) { + ThrowError("ItemLoad(): tmp = 0!"); + THREAD_RETURN(NULL); + } + World* world = (World*) tmp; + WorldDatabase db; + db.Init(); + db.ConnectNewDatabase(); + LogWrite(SPELL__INFO, 0, "Spells", "Loading Spells..."); + db.LoadSpells(); + + LogWrite(SPELL__INFO, 0, "Spells", "Loading Spell Errors..."); + db.LoadSpellErrors(); + + LogWrite(WORLD__INFO, 0, "Traits", "Loading Traits..."); + db.LoadTraits(); + + world->spells_loaded = true; + LogWrite(WORLD__WARNING, 0, "Thread", "Spell Loading Thread completed."); + + mysql_thread_end(); + THREAD_RETURN(NULL); +} + +ThreadReturnType AchievmentLoad (void* tmp) +{ + LogWrite(WORLD__WARNING, 0, "Thread", "Achievement Loading Thread started."); +#ifdef WIN32 + SetThreadPriority(GetCurrentThread(), THREAD_PRIORITY_NORMAL); +#endif + if (tmp == 0) { + ThrowError("ItemLoad(): tmp = 0!"); + THREAD_RETURN(NULL); + } + World* world = (World*) tmp; + WorldDatabase db; + db.Init(); + db.ConnectNewDatabase(); + + LogWrite(ACHIEVEMENT__INFO, 0, "Achievements", "Loading Achievements..."); + int32 t_now = Timer::GetUnixTimeStamp(); + db.LoadAchievements(); + master_achievement_list.CreateMasterAchievementListPacket(); + LogWrite(ACHIEVEMENT__INFO, 0, "Achievements", "Achievements loaded (took %u seconds)", Timer::GetUnixTimeStamp() - t_now); + + world->achievments_loaded = true; + LogWrite(WORLD__WARNING, 0, "Thread", "Achievement Loading Thread completed."); + + mysql_thread_end(); + THREAD_RETURN(NULL); +} + +ThreadReturnType EQ2ConsoleListener(void* tmp) +{ + char cmd[300]; + size_t i = 0; + size_t len; + + while( RunLoops ) + { + // Read in single line from "stdin" + memset( cmd, 0, sizeof( cmd ) ); + if( fgets( cmd, 300, stdin ) == NULL ) + continue; + + if( !RunLoops ) + break; + + len = strlen(cmd); + for( i = 0; i < len; ++i ) + { + if(cmd[i] == '\n' || cmd[i] == '\r') + cmd[i] = '\0'; + } + + ProcessConsoleInput(cmd); + } + THREAD_RETURN(NULL); +} + +#include +void CatchSignal(int sig_num) { + // In rare cases this can be called after the log system is shut down causing a deadlock or crash + // when the world shuts down, if this happens again comment out the LogWrite and uncomment the printf + if (last_signal != sig_num){ + static Mutex lock; + static ofstream signal_out; + + lock.lock(); + if (!signal_out.is_open()) + signal_out.open("signal_catching.log", ios::trunc); + if (signal_out){ + signal_out << "Caught signal " << sig_num << "\n"; + signal_out.flush(); + } + printf("Caught signal %i\n", sig_num); + lock.unlock(); + + last_signal = sig_num; + RunLoops = false; + } +} + +bool NetConnection::ReadLoginINI() { + char buf[201], type[201]; + int items[3] = {0, 0}; + FILE *f; + + if (!(f = fopen (MAIN_INI_FILE, "r"))) { + LogWrite(INIT__ERROR, 0, "Init", "File '%s' could not be opened", MAIN_INI_FILE); + return false; + } + do { + if (fgets (buf, 200, f) == NULL || feof(f)) + { + LogWrite(INIT__ERROR, 0, "Init", "[LoginServer] block not found in '%s'.", MAIN_INI_FILE); + fclose (f); + return false; + } + } + while (strncasecmp (buf, "[LoginServer]\n", 14) != 0 && strncasecmp (buf, "[LoginServer]\r\n", 15) != 0); + + while (!feof (f)) + { +#ifdef WIN32 + if (fscanf (f, "%[^=]=%[^\n]\r\n", type, buf) == 2) +#else + if (fscanf (f, "%[^=]=%[^\r\n]\n", type, buf) == 2) +#endif + { + if (!strncasecmp (type, "worldname", 9)) { + snprintf(worldname, sizeof(worldname), "%s", buf); + items[1] = 1; + if(strlen(worldname)<4) + LogWrite(INIT__ERROR, 0, "Init", "Invalid worldname, please edit LoginServer.ini. Server name must be at least 4 characters."); + } + if (!strncasecmp (type, "account", 7)) { + strncpy(worldaccount, buf, 30); + } + if (!strncasecmp (type, "logstats", 8)) { + if (strcasecmp(buf, "true") == 0 || (buf[0] == '1' && buf[1] == 0)) + net.UpdateStats = true; + } + if (!strncasecmp (type, "password", 8)) { + strncpy (worldpassword, buf, 30); + for(int i=strlen(worldpassword);i>=0;i--){ + if(worldpassword[i] == ' ' || worldpassword[i] == '\n' || worldpassword[i] == '\t' || worldpassword[i] == '\r') + worldpassword[i] = '\0'; + } + } + if (!strncasecmp (type, "locked", 6)) { + if (strcasecmp(buf, "true") == 0 || (buf[0] == '1' && buf[1] == 0)) + world_locked = true; + } + if (!strncasecmp (type, "worldaddress", 12)) { + if (strlen(buf) >= 3) { + strncpy (worldaddress, buf, 250); + } + } + if (!strncasecmp(type, "autotableupdates", 16)) { + if(strlen(buf) >= 3 && !strncasecmp(buf, "ask", 3)) + loginserver.UpdatesAsk(true); + else if(strlen(buf) >= 6 && !strncasecmp(buf, "always", 6)) + loginserver.UpdatesAuto(true); + } + if (!strncasecmp (type, "autotableverbose", 16)) { + if(strlen(buf) >= 4 && !strncasecmp(buf, "true", 4)) + loginserver.UpdatesVerbose(true); + } + if (!strncasecmp (type, "autotabledata", 13)) { + if(strlen(buf) >= 4 && !strncasecmp(buf, "true", 4)) + loginserver.UpdatesAutoData(true); + } + if (!strncasecmp (type, "internalworldaddress", 20)) { + if (strlen(buf) >= 3) { + strncpy(internalworldaddress, buf, 20); + } + } + if (!strncasecmp (type, "worldport", 9)) { + if(Seperator::IsNumber(buf) && atoi(buf) > 0 && atoi(buf) < 0xFFFF) + worldport = atoi(buf); + } + if ((!strcasecmp (type, "loginserver")) || (!strcasecmp (type, "loginserver1"))) { + strncpy (loginaddress[0], buf, 100); + items[0] = 1; + } + if ((!strcasecmp(type, "loginport")) || (!strcasecmp(type, "loginport1"))) { + if (Seperator::IsNumber(buf) && atoi(buf) > 0 && atoi(buf) < 0xFFFF) { + loginport[0] = atoi(buf); + } + } + if (!strcasecmp (type, "loginserver2")) { + strncpy (loginaddress[1], buf, 250); + } + if (!strcasecmp(type, "loginport2")) { + if (Seperator::IsNumber(buf) && atoi(buf) > 0 && atoi(buf) < 0xFFFF) { + loginport[1] = atoi(buf); + } + } + if (!strcasecmp (type, "loginserver3")) { + strncpy (loginaddress[2], buf, 250); + } + if (!strcasecmp(type, "loginport3")) { + if (Seperator::IsNumber(buf) && atoi(buf) > 0 && atoi(buf) < 0xFFFF) { + loginport[2] = atoi(buf); + } + } + } + } + + if (!items[0] || !items[1]) + { + LogWrite(INIT__ERROR, 0, "Init", "Incomplete LoginServer.INI file."); + fclose (f); + return false; + } + + /* + if (strcasecmp(worldname, "Unnamed server") == 0) { + cout << "LoginServer.ini: server unnamed, disabling uplink" << endl; + fclose (f); + return false; + } + */ + + fclose(f); + f=fopen (MAIN_INI_FILE, "r"); + do { + if (fgets (buf, 200, f) == NULL || feof(f)) + { + LogWrite(INIT__ERROR, 0, "Init", "[WorldServer] block not found in %s", MAIN_INI_FILE); + fclose (f); + return true; + } + + } + while (strncasecmp (buf, "[WorldServer]\n", 14) != 0 && strncasecmp (buf, "[WorldServer]\r\n", 15) != 0); + + while (!feof (f)) + { +#ifdef WIN32 + if (fscanf (f, "%[^=]=%[^\n]\r\n", type, buf) == 2) +#else + if (fscanf (f, "%[^=]=%[^\r\n]\n", type, buf) == 2) +#endif + { + + if (!strcasecmp(type, "Defaultstatus")) { + if (Seperator::IsNumber(buf) && atoi(buf) > 0 && atoi(buf) < 0xFFFF) { + DEFAULTSTATUS = atoi(buf); + } + } + } + } + fclose (f); + + f=fopen (MAIN_INI_FILE, "r"); + do { + if (fgets (buf, 200, f) == NULL || feof(f)) + { + LogWrite(INIT__ERROR, 0, "Init", "[UpdateServer] block not found in %s", MAIN_INI_FILE); + fclose (f); + return true; + } + + } + while (strncasecmp (buf, "[UpdateServer]\n", 15) != 0 && strncasecmp (buf, "[UpdateServer]\r\n", 16) != 0); + + while (!feof (f)) + { +#ifdef WIN32 + if (fscanf (f, "%[^=]=%[^\n]\r\n", type, buf) == 2) +#else + if (fscanf (f, "%[^=]=%[^\r\n]\n", type, buf) == 2) +#endif + { + if (!strcasecmp(type, "updateserveraddress")) { + strncpy (updateaddress, buf, 250); + patch.SetHost(buf); + } + if (!strcasecmp(type, "updateserverport")) { + updateport=atoi(buf); + patch.SetPort(buf); + } + } + } + fclose (f); + + LogWrite(INIT__DEBUG, 0, "Init", "%s read...", MAIN_INI_FILE); + LoginServerInfo=1; + return true; +} + +char* NetConnection::GetUpdateServerInfo(int16* oPort) { + if (oPort == 0) + return 0; + if (updateaddress[0] == 0) + return 0; + + *oPort = updateport; + return updateaddress; +} + +char* NetConnection::GetLoginInfo(int16* oPort) { + if (oPort == 0) + return 0; + if (loginaddress[0][0] == 0) + return 0; + + int8 tmp[3] = { 0, 0, 0 }; + int8 count = 0; + + for (int i=0; i<3; i++) { + if (loginaddress[i][0]) + tmp[count++] = i; + } + + int x = rand() % count; + + *oPort = loginport[tmp[x]]; + return loginaddress[tmp[x]]; +} + +void UpdateWindowTitle(char* iNewTitle) { + + char tmp[500]; + if (iNewTitle) { + snprintf(tmp, sizeof(tmp), "World: %s", iNewTitle); + } + else { + snprintf(tmp, sizeof(tmp), "%s, Version: %s: %i Clients(s) in %i Zones(s)", EQ2EMU_MODULE, CURRENT_VERSION, numclients, numzones); + } + // Zero terminate ([max - 1] = 0) the string to prevent a warning + tmp[499] = 0; + #ifdef WIN32 + SetConsoleTitle(tmp); + #else + printf("%c]0;%s%c", '\033', tmp, '\007'); + #endif +} + +ZoneAuthRequest::ZoneAuthRequest(int32 account_id, char* name, int32 access_key) { +accountid = account_id; +character_name = string(name); +accesskey = access_key; +timestamp = Timer::GetUnixTimeStamp(); +firstlogin = false; +} + +ZoneAuthRequest::~ZoneAuthRequest ( ) +{ +} + +void ZoneAuth::AddAuth(ZoneAuthRequest *zar) { + LogWrite(NET__DEBUG, 0, "Net", "AddAuth: %u Key: %u", zar->GetAccountID(), zar->GetAccessKey()); + list.Insert(zar); +} + +ZoneAuthRequest* ZoneAuth::GetAuth(int32 account_id, int32 access_key) { + LinkedListIterator iterator(list); + + iterator.Reset(); + while(iterator.MoreElements()) { + if (iterator.GetData()->GetAccountID() == account_id && iterator.GetData()->GetAccessKey() == access_key) { + ZoneAuthRequest* tmp = iterator.GetData(); + return tmp; + } + iterator.Advance(); + } + return 0; + +} + +void ZoneAuth::PurgeInactiveAuth() { + LinkedListIterator iterator(list); + + iterator.Reset(); + int32 current_time = Timer::GetUnixTimeStamp(); + while(iterator.MoreElements()) { + if ((iterator.GetData()->GetTimeStamp()+60) < current_time) { + iterator.RemoveCurrent(); + } + iterator.Advance(); + } +} + +void ZoneAuth::RemoveAuth(ZoneAuthRequest *zar) { + LinkedListIterator iterator(list); + + iterator.Reset(); + while(iterator.MoreElements()) { + if (iterator.GetData() == zar) { + iterator.RemoveCurrent(); + break; + } + iterator.Advance(); + } +} + +void WelcomeHeader() +{ + #ifdef _WIN32 + HANDLE console = GetStdHandle(STD_OUTPUT_HANDLE); + SetConsoleTextAttribute(console, FOREGROUND_WHITE_BOLD); + #endif + printf("Module: %s, Version: %s", EQ2EMU_MODULE, CURRENT_VERSION); + #ifdef _WIN32 + SetConsoleTextAttribute(console, FOREGROUND_YELLOW_BOLD); + #endif + printf("\n\nCopyright (C) 2007-2011 EQ2Emulator. http://eq2emulator.net/ \n\n"); + printf("EQ2Emulator is free software: you can redistribute it and/or modify\n"); + printf("it under the terms of the GNU General Public License as published by\n"); + printf("the Free Software Foundation, either version 3 of the License, or\n"); + printf("(at your option) any later version.\n\n"); + printf("EQ2Emulator is distributed in the hope that it will be useful,\n"); + printf("but WITHOUT ANY WARRANTY; without even the implied warranty of\n"); + printf("MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n"); + printf("GNU General Public License for more details.\n\n"); + #ifdef _WIN32 + SetConsoleTextAttribute(console, FOREGROUND_GREEN_BOLD); + #endif + printf(" /$$$$$$$$ /$$$$$$ /$$$$$$ /$$$$$$$$ \n"); + printf("| $$_____/ /$$__ $$ /$$__ $$| $$_____/ \n"); + printf("| $$ | $$ \\ $$|__/ \\ $$| $$ /$$$$$$/$$$$ /$$ /$$\n"); + printf("| $$$$$ | $$ | $$ /$$$$$$/| $$$$$ | $$_ $$_ $$| $$ | $$\n"); + printf("| $$__/ | $$ | $$ /$$____/ | $$__/ | $$ \\ $$ \\ $$| $$ | $$\n"); + printf("| $$ | $$/$$ $$| $$ | $$ | $$ | $$ | $$| $$ | $$\n"); + printf("| $$$$$$$$| $$$$$$/| $$$$$$$$| $$$$$$$$| $$ | $$ | $$| $$$$$$/\n"); + printf("|________/ \\____ $$$|________/|________/|__/ |__/ |__/ \\______/ \n"); + printf(" \\__/ \n\n"); + #ifdef _WIN32 + SetConsoleTextAttribute(console, FOREGROUND_MAGENTA_BOLD); + #endif + printf(" Website : http://eq2emulator.net \n"); + printf(" Forums : http://eq2emulator.net/phpBB3/ \n"); + printf(" Contributors: http://eq2emulator.net/wiki/index.php/Developer:Contributors \n"); + printf(" SVN : http://svn.eq2emulator.net/svn/eq2server \n\n"); + #ifdef _WIN32 + SetConsoleTextAttribute(console, FOREGROUND_WHITE_BOLD); + #endif + printf("For more detailed logging, modify 'Level' param the log_config.xml file.\n\n"); + #ifdef _WIN32 + SetConsoleTextAttribute(console, FOREGROUND_WHITE); + #endif + + fflush(stdout); +} diff --git a/EQ2/source/WorldServer/net.h b/EQ2/source/WorldServer/net.h new file mode 100644 index 000000000..3feb2866a --- /dev/null +++ b/EQ2/source/WorldServer/net.h @@ -0,0 +1,132 @@ +/* + EQ2Emulator: Everquest II Server Emulator + Copyright (C) 2007 EQ2EMulator Development Team (http://www.eq2emulator.net) + + This file is part of EQ2Emulator. + + EQ2Emulator is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + EQ2Emulator is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with EQ2Emulator. If not, see . +*/ +#ifndef __EQ2_NET__ +#define __EQ2_NET__ +#ifndef WIN32 + #include + #include + #include + #include + #include + #include + #include +#else + #include + #include + #include + #include +#endif + +#include "../common/linked_list.h" +#include "../common/types.h" + +ThreadReturnType EQ2ConsoleListener(void *tmp); +void CatchSignal(int sig_num); +void UpdateWindowTitle(char* iNewTitle); +void WelcomeHeader(); + +#define PORT 9000 +#define LOGIN_PORT 9100 + +class NetConnection +{ +public: + NetConnection() { + world_locked = false; + for (int i=0; i<3; i++) { + memset(loginaddress[i], 0, sizeof(loginaddress[i])); + loginport[i] = LOGIN_PORT; + } + listening_socket = 0; + updateport = 0; + memset(worldname, 0, sizeof(worldname)); + memset(updateaddress, 0, sizeof(updateaddress)); + memset(worldaccount, 0, sizeof(worldaccount)); + memset(worldpassword, 0, sizeof(worldpassword)); + memset(worldaddress, 0, sizeof(worldaddress)); + memset(internalworldaddress, 0, sizeof(internalworldaddress)); + worldport = PORT; + DEFAULTSTATUS=0; + LoginServerInfo = 0;//ReadLoginINI(); + UpdateStats = false; + } + ~NetConnection() { } + + bool ReadLoginINI(); + bool LoginServerInfo; + bool UpdateStats; + char* GetLoginInfo(int16* oPort); + char* GetUpdateServerInfo(int16* oPort); + inline char* GetLoginAddress(int8 i) { return loginaddress[i]; } + inline int16 GetLoginPort(int8 i) { return loginport[i]; } + inline char* GetWorldName() { return worldname; } + inline char* GetWorldAccount() { return worldaccount; } + inline char* GetWorldPassword() { return worldpassword; } + inline char* GetWorldAddress() { return worldaddress; } + inline char* GetInternalWorldAddress() { return internalworldaddress; } + inline int16 GetWorldPort() { return worldport; } + inline int8 GetDefaultStatus() { return DEFAULTSTATUS; } + bool world_locked; +private: + int listening_socket; + char loginaddress[3][255]; + char updateaddress[255]; + int16 loginport[3]; + int16 updateport; + char worldname[201]; + char worldaccount[31]; + char worldpassword[31]; + char worldaddress[255]; + char internalworldaddress[21]; + int16 worldport; + int8 DEFAULTSTATUS; + +}; + +class ZoneAuthRequest +{ +public: + ZoneAuthRequest(int32 account_id, char* name, int32 access_key); + ~ZoneAuthRequest( ); + int32 GetAccountID() { return accountid; } + const char* GetCharacterName() { return character_name.c_str(); } + int32 GetAccessKey() { return accesskey; } + int32 GetTimeStamp() { return timestamp; } + void setFirstLogin(bool value) { firstlogin = value; } + bool isFirstLogin() { return firstlogin; } +private: + int32 accountid; + string character_name; + int32 accesskey; + int32 timestamp; + bool firstlogin; +}; + +class ZoneAuth +{ +public: + void AddAuth(ZoneAuthRequest* zar); + ZoneAuthRequest* GetAuth(int32 account_id, int32 access_key); + void PurgeInactiveAuth(); + void RemoveAuth(ZoneAuthRequest* zar); +private: + LinkedList list; +}; +#endif diff --git a/EQ2/source/WorldServer/races.cpp b/EQ2/source/WorldServer/races.cpp new file mode 100644 index 000000000..d2c7eb307 --- /dev/null +++ b/EQ2/source/WorldServer/races.cpp @@ -0,0 +1,147 @@ +/* + EQ2Emulator: Everquest II Server Emulator + Copyright (C) 2007 EQ2EMulator Development Team (http://www.eq2emulator.net) + + This file is part of EQ2Emulator. + + EQ2Emulator is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + EQ2Emulator is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with EQ2Emulator. If not, see . +*/ +#include "../common/debug.h" +#include "races.h" +#include "../common/MiscFunctions.h" + +Races::Races(){ + race_map["BARBARIAN"] = 0; + race_map["DARKELF"] = 1; + race_map["DWARF"] = 2; + race_map["ERUDITE"] = 3; + race_map["FROGLOK"] = 4; + race_map["GNOME"] = 5; + race_map["HALFELF"] = 6; + race_map["HALFLING"] = 7; + race_map["HIGHELF"] = 8; + race_map["HUMAN"] = 9; + race_map["IKSAR"] = 10; + race_map["KERRA"] = 11; + race_map["OGRE"] = 12; + race_map["RATONGA"] = 13; + race_map["TROLL"] = 14; + race_map["WOODELF"] = 15; + race_map["FAE_LIGHT"] = 16; + race_map["FAE_DARK"] = 17; + race_map["SARNAK"] = 18; + race_map["VAMPIRE"] = 19; + race_map["AERAKYN"] = 20; + + race_map_friendly[0] = "Barbarian"; + race_map_friendly[1] = "Dark Elf"; + race_map_friendly[2] = "Dwarf"; + race_map_friendly[3] = "Erudite"; + race_map_friendly[4] = "Froglok"; + race_map_friendly[5] = "Gnome"; + race_map_friendly[6] = "Half Elf"; + race_map_friendly[7] = "Halfling"; + race_map_friendly[8] = "High Elf"; + race_map_friendly[9] = "Human"; + race_map_friendly[10] = "Iksar"; + race_map_friendly[11] = "Kerra"; + race_map_friendly[12] = "Ogre"; + race_map_friendly[13] = "Ratonga"; + race_map_friendly[14] = "Troll"; + race_map_friendly[15] = "Wood Elf"; + race_map_friendly[16] = "Fae"; + race_map_friendly[17] = "Arasai"; + race_map_friendly[18] = "Sarnak"; + race_map_friendly[19] = "Vampire"; + race_map_friendly[20] = "Aerakyn"; + + // "Neutral" races are in both lists - this is for /randomize RACE + race_map_good[0] = "DWARF"; + race_map_good[1] = "FAE_LIGHT"; + race_map_good[2] = "FROGLOK"; + race_map_good[3] = "HALFLING"; + race_map_good[4] = "HIGHELF"; + race_map_good[5] = "WOODELF"; + race_map_good[6] = "BARBARIAN"; + race_map_good[7] = "ERUDITE"; + race_map_good[8] = "GNOME"; + race_map_good[9] = "HALFELF"; + race_map_good[10] = "HUMAN"; + race_map_good[11] = "KERRA"; + race_map_good[12] = "VAMPIRE"; + race_map_good[13] = "AERAKYN"; + + race_map_evil[0] = "FAE_DARK"; + race_map_evil[1] = "DARKELF"; + race_map_evil[2] = "IKSAR"; + race_map_evil[3] = "OGRE"; + race_map_evil[4] = "RATONGA"; + race_map_evil[5] = "SARNAK"; + race_map_evil[6] = "TROLL"; + race_map_evil[7] = "BARBARIAN"; + race_map_evil[8] = "ERUDITE"; + race_map_evil[9] = "GNOME"; + race_map_evil[10] = "HALFELF"; + race_map_evil[11] = "HUMAN"; + race_map_evil[12] = "KERRA"; + race_map_evil[13] = "VAMPIRE"; + race_map_evil[14] = "AERAKYN"; +} + +sint8 Races::GetRaceID(const char* name){ + string race_name = string(name); + race_name = ToUpper(race_name); + if(race_map.count(race_name) == 1) + return race_map[race_name]; + else + return -1; +} + +const char* Races::GetRaceName(int8 race_id){ + map::iterator itr; + for(itr = race_map.begin(); itr != race_map.end(); itr++){ + if(itr->second == race_id) + return itr->first.c_str(); + } + return 0; +} + +const char* Races::GetRaceNameCase(int8 race_id) { + map::iterator itr; + for(itr = race_map_friendly.begin(); itr != race_map_friendly.end(); itr++){ + if(itr->first == race_id) + return itr->second.c_str(); + } + return 0; +} + +int8 Races::GetRaceNameGood() { + int8 random = MakeRandomInt(0,13); // 12 good races + map::iterator itr; + for(itr = race_map_good.begin(); itr != race_map_good.end(); itr++){ + if(itr->first == random) + return GetRaceID(itr->second.c_str()); + } + return 9; // default to Human race if error finding another +} + +int8 Races::GetRaceNameEvil() { + int8 random = MakeRandomInt(0,14); // 13 evil races + map::iterator itr; + for(itr = race_map_evil.begin(); itr != race_map_evil.end(); itr++){ + if(itr->first == random) + return GetRaceID(itr->second.c_str()); + } + return 9; // default to Human race if error finding another +} diff --git a/EQ2/source/WorldServer/races.h b/EQ2/source/WorldServer/races.h new file mode 100644 index 000000000..1764959bd --- /dev/null +++ b/EQ2/source/WorldServer/races.h @@ -0,0 +1,62 @@ +/* + EQ2Emulator: Everquest II Server Emulator + Copyright (C) 2007 EQ2EMulator Development Team (http://www.eq2emulator.net) + + This file is part of EQ2Emulator. + + EQ2Emulator is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + EQ2Emulator is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with EQ2Emulator. If not, see . +*/ +#ifndef RACES_H +#define RACES_H +#include "../common/types.h" +#include +using namespace std; + +#define BARBARIAN 0 +#define DARK_ELF 1 +#define DWARF 2 +#define ERUDITE 3 +#define FROGLOK 4 +#define GNOME 5 +#define HALF_ELF 6 +#define HALFLING 7 +#define HIGH_ELF 8 +#define HUMAN 9 +#define IKSAR 10 +#define KERRA 11 +#define OGRE 12 +#define RATONGA 13 +#define TROLL 14 +#define WOOD_ELF 15 +#define FAE 16 +#define ARASAI 17 +#define SARNAK 18 +#define VAMPIRE 19 +#define AERAKYN 20 + +class Races { +public: + Races(); + const char* GetRaceName(int8 race_id); + const char* GetRaceNameCase(int8 race_id); + int8 GetRaceNameGood(); + int8 GetRaceNameEvil(); + sint8 GetRaceID(const char* name); +private: + map race_map; + map race_map_friendly; + map race_map_good; + map race_map_evil; +}; +#endif diff --git a/EQ2/source/WorldServer/zoneserver.cpp b/EQ2/source/WorldServer/zoneserver.cpp new file mode 100644 index 000000000..119f085be --- /dev/null +++ b/EQ2/source/WorldServer/zoneserver.cpp @@ -0,0 +1,6994 @@ +/* +EQ2Emulator: Everquest II Server Emulator +Copyright (C) 2007 EQ2EMulator Development Team (http://www.eq2emulator.net) + +This file is part of EQ2Emulator. +EQ2Emulator is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +EQ2Emulator is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with EQ2Emulator. If not, see . +*/ + +#include "../common/debug.h" +#include +using namespace std; +#include +#include "../common/misc.h" +#include +#include +#include +#include "Commands/Commands.h" + +#ifdef WIN32 +#include +#include +#else +#include +#ifdef FREEBSD //Timothy Whitman - January 7, 2003 +#include +#endif +#include +#include +#include +#include +#include + +#include "../common/unix.h" + +#define SOCKET_ERROR -1 +#define INVALID_SOCKET -1 + +extern int errno; +#endif + +#include "../common/servertalk.h" +#include "../common/packet_dump.h" +#include "WorldDatabase.h" +#include "races.h" +#include "classes.h" +#include "../common/seperator.h" +#include "../common/md5.h" +#include "../common/EQStream.h" +#include "../common/EQStreamFactory.h" +#include "../common/opcodemgr.h" +#include "zoneserver.h" +#include "client.h" +#include "LoginServer.h" +#include "World.h" +#include +#include +#include "LuaInterface.h" +#include "Factions.h" +#include "VisualStates.h" +#include "ClientPacketFunctions.h" +#include "SpellProcess.h" +#include "../common/Log.h" +#include "Rules/Rules.h" +#include "Chat/Chat.h" +#include "Tradeskills/Tradeskills.h" +#include "RaceTypes/RaceTypes.h" +#include +#include + +#include "Zone/SPGrid.h" +#include "Bots/Bot.h" + +#ifdef WIN32 +#define snprintf _snprintf +#define vsnprintf _vsnprintf +#define strncasecmp _strnicmp +#define strcasecmp _stricmp +#endif + +// int32 numplayers = 0; // never used? +// extern bool GetZoneLongName(char* short_name, char** long_name); // never used? +// extern bool holdzones; // never used? +// extern volatile bool RunLoops; // never used in the zone server? +// extern Classes classes; // never used in the zone server? + +extern WorldDatabase database; +extern sint32 numzones; +extern ClientList client_list; +extern LoginServer loginserver; +extern ZoneList zone_list; +extern World world; +extern ConfigReader configReader; +extern Commands commands; +extern LuaInterface* lua_interface; +extern MasterFactionList master_faction_list; +extern VisualStates visual_states; +extern RuleManager rule_manager; +extern Chat chat; +extern MasterRaceTypeList race_types_list; +extern MasterSpellList master_spell_list; // temp - remove later +extern MasterSkillList master_skill_list; + + +int32 MinInstanceID = 1000; + +// JA: Moved most default values to Rules and risky initializers to ZoneServer::Init() - 2012.12.07 +ZoneServer::ZoneServer(const char* name) { + depop_zone = false; + repop_zone = false; + respawns_allowed = true; + instanceID = 0; + strcpy(zone_name, name); + zoneID = 0; + rain = 0; + cityzone = false; + always_loaded = false; + locked = false; // JA: implementing /zone lock|unlock commands + pNumPlayers = 0; + LoadingData = true; + zoneShuttingDown = false; + ++numzones; + revive_points = 0; + zone_motd = ""; + finished_depop = true; + initial_spawn_threads_active = 0; + minimumStatus = 0; + minimumLevel = 0; + maximumLevel = 0; + minimumVersion = 0; + weather_current_severity = 0; + weather_signaled = false; + xp_mod = 0; + isDusk = false; + dusk_hour = 0; + dusk_minute = 0; + dawn_hour = 0; + dawn_minute = 0; + reloading_spellprocess = false; + MMasterZoneLock = new CriticalSection(MUTEX_ATTRIBUTE_RECURSIVE); + + Grid = nullptr; + + reloading = true; +} + +ZoneServer::~ZoneServer() { + zoneShuttingDown = true; //ensure other threads shut down too + //allow other threads to properly shut down + while (spawnthread_active || initial_spawn_threads_active > 0){ + if (spawnthread_active) + LogWrite(ZONE__DEBUG, 7, "Zone", "Zone shutdown waiting on spawn thread"); + if (initial_spawn_threads_active > 0) + LogWrite(ZONE__DEBUG, 7, "Zone", "Zone shutdown waiting on initial spawn thread"); + Sleep(10); + } + LogWrite(ZONE__INFO, 0, "Zone", "Initiating zone shutdown of '%s'", zone_name); + changed_spawns.clear(); + transport_spawns.clear(); + safe_delete(spellProcess); + safe_delete(tradeskillMgr); + MMasterZoneLock->lock(); + MMasterSpawnLock.writelock(__FUNCTION__, __LINE__); + DeleteData(true); + RemoveLocationProximities(); + RemoveLocationGrids(); + DelayedSpawnRemoval(true); + DeleteSpawns(true); + + DeleteGlobalSpawns(); + + DeleteFlightPaths(); + + MMasterSpawnLock.releasewritelock(__FUNCTION__, __LINE__); + MMasterZoneLock->unlock(); + safe_delete(MMasterZoneLock); + world.UpdateServerStatistic(STAT_SERVER_NUM_ACTIVE_ZONES, -1); + + // If lockout, public, tradeskill, or quest instance delete from db when zone shuts down + if (InstanceType == SOLO_LOCKOUT_INSTANCE || InstanceType == GROUP_LOCKOUT_INSTANCE || InstanceType == RAID_LOCKOUT_INSTANCE || + InstanceType == PUBLIC_INSTANCE || InstanceType == TRADESKILL_INSTANCE || InstanceType == QUEST_INSTANCE) { + LogWrite(INSTANCE__DEBUG, 0, "Instance", "Non persistent instance shutting down, deleting instance"); + database.DeleteInstance(instanceID); + } + + if (Grid != nullptr) + delete Grid; + + LogWrite(ZONE__INFO, 0, "Zone", "Completed zone shutdown of '%s'", zone_name); + --numzones; + UpdateWindowTitle(0); + zone_list.Remove(this); +} + +void ZoneServer::Init() +{ + LogWrite(ZONE__INFO, 0, "Zone", "Loading new Zone '%s'", zone_name); + zone_list.Add(this); + + spellProcess = new SpellProcess(); + tradeskillMgr = new TradeskillMgr(); + + /* Dynamic Timers */ + regenTimer.Start(rule_manager.GetGlobalRule(R_Zone, RegenTimer)->GetInt32()); + client_save.Start(rule_manager.GetGlobalRule(R_Zone, ClientSaveTimer)->GetInt32()); + shutdownTimer.Disable(); + spawn_range.Start(rule_manager.GetGlobalRule(R_Zone, CheckAttackPlayer)->GetInt32()); + aggro_timer.Start(rule_manager.GetGlobalRule(R_Zone, CheckAttackNPC)->GetInt32()); + + /* Weather stuff */ + InitWeather(); + + /* Static Timers */ + // JA - haven't decided yet if these should remain hard-coded. Changing them could break EQ2Emu functionality + spawn_check_add.Start(1000); + spawn_check_remove.Start(30000); + spawn_expire_timer.Start(10000); + respawn_timer.Start(10000); + // there was never a starter for these? + widget_timer.Start(5000); + + tracking_timer.Start(5000); + + movement_timer.Start(100); + location_prox_timer.Start(1000); + location_grid_timer.Start(1000); + + charsheet_changes.Start(500); + + // Send game time packet every in game hour (180 sec) + sync_game_time_timer.Start(180000); + + // Get the dusk and dawn time from the rule manager and store it in the correct variables + sscanf (rule_manager.GetGlobalRule(R_World, DuskTime)->GetString(), "%d:%d", &dusk_hour, &dusk_minute); + sscanf (rule_manager.GetGlobalRule(R_World, DawnTime)->GetString(), "%d:%d", &dawn_hour, &dawn_minute); + + spawn_update.Start(rule_manager.GetGlobalRule(R_Zone, SpawnUpdateTimer)->GetInt16()); + LogWrite(ZONE__DEBUG, 0, "Zone", "SpawnUpdateTimer: %ims", rule_manager.GetGlobalRule(R_Zone, SpawnUpdateTimer)->GetInt16()); + + spawn_delete_timer = rule_manager.GetGlobalRule(R_Zone, SpawnDeleteTimer)->GetInt32(); + LogWrite(ZONE__DEBUG, 0, "Zone", "SpawnDeleteTimer: %ums", spawn_delete_timer); + + LogWrite(ZONE__DEBUG, 0, "Zone", "Loading zone flight paths"); + database.LoadZoneFlightPaths(this); + + world.UpdateServerStatistic(STAT_SERVER_NUM_ACTIVE_ZONES, 1); + UpdateWindowTitle(0); + + if (Grid == nullptr) { + Grid = new SPGrid(string(GetZoneFile()), 0); + if (Grid->Init()) + LogWrite(ZONE__DEBUG, 0, "SPGrid", "ZoneServer::Init() successfully initialized the grid"); + else { + LogWrite(ZONE__DEBUG, 0, "SPGrid", "ZoneServer::Init() failed to initialize the grid... poor tron..."); + delete Grid; + Grid = nullptr; + } + } + else + LogWrite(ZONE__ERROR, 0, "SPGrid", "ZoneServer::Init() Grid is not null in init, wtf!"); + + MMasterSpawnLock.SetName("ZoneServer::MMasterSpawnLock"); + m_npc_faction_list.SetName("ZoneServer::npc_faction_list"); + m_enemy_faction_list.SetName("ZoneServer::enemy_faction_list"); + m_reverse_enemy_faction_list.SetName("ZoneServer::reverse_enemy_faction_list"); + MDeadSpawns.SetName("ZoneServer::dead_spawns"); + MTransportSpawns.SetName("ZoneServer::transport_spawns"); + MSpawnList.SetName("ZoneServer::spawn_list"); + MTransporters.SetName("ZoneServer::m_transportMaps"); + MSpawnGroupAssociation.SetName("ZoneServer::spawn_group_associations"); + MSpawnGroupLocations.SetName("ZoneServer::spawn_group_locations"); + MSpawnLocationGroups.SetName("ZoneServer::spawn_location_groups"); + MSpawnGroupChances.SetName("ZoneServer::spawn_group_chances"); + MTransportLocations.SetName("ZoneServer::transporter_locations"); + MSpawnLocationList.SetName("ZoneServer::spawn_location_list"); + MSpawnDeleteList.SetName("ZoneServer::spawn_delete_list"); + MSpawnScriptTimers.SetName("ZoneServer::spawn_script_timers"); + MRemoveSpawnScriptTimersList.SetName("ZoneServer::remove_spawn_script_timers_list"); + MClientList.SetName("ZoneServer::clients"); + MWidgetTimers.SetName("ZoneServer::widget_timers"); +#ifdef WIN32 + _beginthread(ZoneLoop, 0, this); + _beginthread(SpawnLoop, 0, this); +#else + pthread_t thread; + pthread_create(&thread, NULL, ZoneLoop, this); + pthread_detach(thread); + pthread_t thread2; + pthread_create(&thread2, NULL, SpawnLoop, this); + pthread_detach(thread2); +#endif +} + +void ZoneServer::InitWeather() +{ + weather_enabled = rule_manager.GetGlobalRule(R_Zone, WeatherEnabled)->GetBool(); + if( weather_enabled && isWeatherAllowed()) + { + string tmp; + // set up weather system when zone starts up + weather_type = rule_manager.GetGlobalRule(R_Zone, WeatherType)->GetInt8(); + switch(weather_type) + { + case 3: tmp = "Chaotic"; break; + case 2: tmp = "Random"; break; + case 1: tmp = "Dynamic"; break; + default: tmp = "Normal"; break; + } + LogWrite(ZONE__DEBUG, 0, "Zone", "%s: Setting up '%s' weather", zone_name, tmp.c_str()); + + weather_frequency = rule_manager.GetGlobalRule(R_Zone, WeatherChangeFrequency)->GetInt32(); + LogWrite(ZONE__DEBUG, 1, "Zone", "%s: Change weather every %u seconds", zone_name, weather_frequency); + + weather_change_chance = rule_manager.GetGlobalRule(R_Zone, WeatherChangeChance)->GetInt8(); + LogWrite(ZONE__DEBUG, 1, "Zone", "%s: Chance of weather change: %i%%", zone_name, weather_change_chance); + + weather_min_severity = rule_manager.GetGlobalRule(R_Zone, MinWeatherSeverity)->GetFloat(); + weather_max_severity = rule_manager.GetGlobalRule(R_Zone, MaxWeatherSeverity)->GetFloat(); + LogWrite(ZONE__DEBUG, 1, "Zone", "%s: Weather Severity min/max is %.2f - %.2f", zone_name, weather_min_severity, weather_max_severity); + // Allow a random roll to determine if weather should start out severe or calm + if( MakeRandomInt(1, 100) > 50) + { + weather_pattern = 1; // default weather to increase in severity initially + weather_current_severity = weather_min_severity; + } + else + { + weather_pattern = 0; // default weather to decrease in severity initially + weather_current_severity = weather_max_severity; + } + LogWrite(ZONE__DEBUG, 1, "Zone", "%s: Weather Severity set to %.2f, pattern: %i", zone_name, weather_current_severity, weather_pattern); + + weather_change_amount = rule_manager.GetGlobalRule(R_Zone, WeatherChangePerInterval)->GetFloat(); + LogWrite(ZONE__DEBUG, 1, "Zone", "%s: Weather change by %.2f each interval", zone_name, weather_change_amount); + + if( weather_type > 0 ) + { + weather_dynamic_offset = rule_manager.GetGlobalRule(R_Zone, WeatherDynamicMaxOffset)->GetFloat(); + LogWrite(ZONE__DEBUG, 1, "Zone", "%s: Weather Max Offset changes no more than %.2f each interval", zone_name, weather_dynamic_offset); + } + else + weather_dynamic_offset = 0; + + SetRain(weather_current_severity); + weather_last_changed_time = Timer::GetUnixTimeStamp(); + weatherTimer.Start(rule_manager.GetGlobalRule(R_Zone, WeatherTimer)->GetInt32()); + } +} +void ZoneServer::DeleteSpellProcess(){ + //Just get a lock to make sure we aren't already looping the spawnprocess or clientprocess if this is different than the calling thread + MMasterSpawnLock.writelock(__FUNCTION__, __LINE__); + MMasterZoneLock->lock(); + reloading_spellprocess = true; + + // Remove spells from NPC's + Spawn* spawn = 0; + map::iterator itr; + MSpawnList.readlock(__FUNCTION__, __LINE__); + for (itr = spawn_list.begin(); itr != spawn_list.end(); itr++) { + spawn = itr->second; + if(spawn && spawn->IsNPC()) + ((NPC*)spawn)->SetSpells(0); + } + MSpawnList.releasereadlock(__FUNCTION__, __LINE__); + + MMasterZoneLock->unlock(); + MMasterSpawnLock.releasewritelock(__FUNCTION__, __LINE__); + DismissAllPets(); + safe_delete(spellProcess); +} + +void ZoneServer::LoadSpellProcess(){ + spellProcess = new SpellProcess(); + reloading_spellprocess = false; + + // Reload NPC's spells + Spawn* spawn = 0; + map::iterator itr; + MSpawnList.readlock(__FUNCTION__, __LINE__); + for (itr = spawn_list.begin(); itr != spawn_list.end(); itr++) { + spawn = itr->second; + if(spawn && spawn->IsNPC()) + ((NPC*)spawn)->SetSpells(GetNPCSpells(((NPC*)spawn)->GetPrimarySpellList(), ((NPC*)spawn)->GetSecondarySpellList())); + } + MSpawnList.releasereadlock(__FUNCTION__, __LINE__); +} + +void ZoneServer::LockAllSpells(Player* player) { + if (player && spellProcess) { + Client* client = GetClientBySpawn(player); + if (client) + spellProcess->LockAllSpells(client); + } +} + +void ZoneServer::UnlockAllSpells(Player* player) { + if (player && spellProcess) { + Client* client = GetClientBySpawn(player); + if (client) + spellProcess->UnlockAllSpells(client); + } +} + +void ZoneServer::DeleteFactionLists() { + map *>::iterator faction_itr; + map *>::iterator spawn_itr; + + m_enemy_faction_list.writelock(__FUNCTION__, __LINE__); + for (faction_itr = enemy_faction_list.begin(); faction_itr != enemy_faction_list.end(); faction_itr++) + safe_delete(faction_itr->second); + enemy_faction_list.clear(); + m_enemy_faction_list.releasewritelock(__FUNCTION__, __LINE__); + + m_reverse_enemy_faction_list.writelock(__FUNCTION__, __LINE__); + for (faction_itr = reverse_enemy_faction_list.begin(); faction_itr != reverse_enemy_faction_list.end(); faction_itr++) + safe_delete(faction_itr->second); + reverse_enemy_faction_list.clear(); + m_reverse_enemy_faction_list.releasewritelock(__FUNCTION__, __LINE__); + + m_npc_faction_list.writelock(__FUNCTION__, __LINE__); + for (spawn_itr = npc_faction_list.begin(); spawn_itr != npc_faction_list.end(); spawn_itr++) + safe_delete(spawn_itr->second); + npc_faction_list.clear(); + m_npc_faction_list.releasewritelock(__FUNCTION__, __LINE__); +} + +void ZoneServer::DeleteData(bool boot_clients){ + Spawn* spawn = 0; + vector tmp_player_list; // changed to a vector from a MutexList as this is a local variable and don't need mutex stuff for the list + + // Clear spawn groups + spawn_group_map.clear(); + + // Loop through the spawn list and set the spawn for deletion + map::iterator itr; + MSpawnList.readlock(__FUNCTION__, __LINE__); + for (itr = spawn_list.begin(); itr != spawn_list.end(); itr++) { + spawn = itr->second; + if(spawn){ + if(!boot_clients && spawn->IsPlayer()) + tmp_player_list.push_back(spawn); + else if(spawn->IsPlayer()){ + Client* client = GetClientBySpawn(spawn); + if(client) + client->Disconnect(); + } + else{ + RemoveHeadingTimer(spawn); // called in RemoveSpawnSupportFunctions() + RemoveSpawnSupportFunctions(spawn); + AddPendingDelete(spawn); + } + } + } + MSpawnList.releasereadlock(__FUNCTION__, __LINE__); + + // Quick hack to prevent a deadlock, RemoveSpawnSupportFunctions() will cancel spells and result in zone->GetSpawnByID() + // being called which read locks the spawn list and caused a dead lock as the above mutex's were write locked + MSpawnList.writelock(__FUNCTION__, __LINE__); + // Clear the spawn list, this was in the mutex above, moved it down so the above mutex could be a read lock + spawn_list.clear(); + + // Moved this up so we only read lock the list once in this list + vector::iterator spawn_iter2; + for (spawn_iter2 = tmp_player_list.begin(); spawn_iter2 != tmp_player_list.end(); spawn_iter2++) { + spawn_list[(*spawn_iter2)->GetID()] = (*spawn_iter2); + } + MSpawnList.releasewritelock(__FUNCTION__, __LINE__); + + // Clear player proximities + RemovePlayerProximity(0, true); + + spawn_range_map.clear(true); + if(boot_clients) { + // Refactor + vector::iterator itr; + + MClientList.writelock(__FUNCTION__, __LINE__); + for (itr = clients.begin(); itr != clients.end(); itr++) + safe_delete(*itr); + + clients.clear(); + MClientList.releasewritelock(__FUNCTION__, __LINE__); + } + + // Clear and delete spawn locations + MSpawnLocationList.writelock(__FUNCTION__, __LINE__); + map::iterator spawn_location_iter; + for (spawn_location_iter = spawn_location_list.begin(); spawn_location_iter != spawn_location_list.end(); spawn_location_iter++) + safe_delete(spawn_location_iter->second); + + spawn_location_list.clear(); + MSpawnLocationList.releasewritelock(__FUNCTION__, __LINE__); + + // If we allow clients to stay in the zone we need to preserve the revive_points, otherwise if the player dies they will crash + if(revive_points && boot_clients){ + vector::iterator revive_iter; + for(revive_iter=revive_points->begin(); revive_iter != revive_points->end(); revive_iter++){ + safe_delete(*revive_iter); + } + safe_delete(revive_points); + } + + MSpawnGroupAssociation.writelock(__FUNCTION__, __LINE__); + map*>::iterator assoc_itr; + for (assoc_itr = spawn_group_associations.begin(); assoc_itr != spawn_group_associations.end(); assoc_itr++) + safe_delete(assoc_itr->second); + + spawn_group_associations.clear(); + MSpawnGroupAssociation.releasewritelock(__FUNCTION__, __LINE__); + + MSpawnGroupLocations.writelock(__FUNCTION__, __LINE__); + map*>::iterator loc_itr; + for (loc_itr = spawn_group_locations.begin(); loc_itr != spawn_group_locations.end(); loc_itr++) + safe_delete(loc_itr->second); + + spawn_group_locations.clear(); + MSpawnGroupLocations.releasewritelock(__FUNCTION__, __LINE__); + + MSpawnLocationGroups.writelock(__FUNCTION__, __LINE__); + map*>::iterator group_itr; + for (group_itr = spawn_location_groups.begin(); group_itr != spawn_location_groups.end(); group_itr++) + safe_delete(group_itr->second); + + spawn_location_groups.clear(); + MSpawnLocationGroups.releasewritelock(__FUNCTION__, __LINE__); + + // Clear lists that need more then just a Clear() + DeleteFactionLists(); + DeleteSpawnScriptTimers(0, true); + DeleteSpawnScriptTimers(); + ClearDeadSpawns(); + + // Clear lists + heading_timers.clear(); + movement_spawns.clear(); + respawn_timers.clear(); + transport_spawns.clear(); + quick_database_id_lookup.clear(); + + MWidgetTimers.writelock(__FUNCTION__, __LINE__); + widget_timers.clear(); + MWidgetTimers.releasewritelock(__FUNCTION__, __LINE__); + + map::iterator struct_itr; + for (struct_itr = versioned_info_structs.begin(); struct_itr != versioned_info_structs.end(); struct_itr++) + safe_delete(struct_itr->second); + versioned_info_structs.clear(); + + for (struct_itr = versioned_pos_structs.begin(); struct_itr != versioned_pos_structs.end(); struct_itr++) + safe_delete(struct_itr->second); + versioned_pos_structs.clear(); + + for (struct_itr = versioned_vis_structs.begin(); struct_itr != versioned_vis_structs.end(); struct_itr++) + safe_delete(struct_itr->second); + versioned_vis_structs.clear(); +} + +void ZoneServer::RemoveLocationProximities() { + MutexList::iterator itr = location_proximities.begin(); + while(itr.Next()){ + safe_delete(itr->value); + } + location_proximities.clear(); +} + +RevivePoint* ZoneServer::GetRevivePoint(int32 id){ + vector::iterator revive_iter; + for(revive_iter=revive_points->begin(); revive_iter != revive_points->end(); revive_iter++){ + if((*revive_iter)->id == id) + return *revive_iter; + } + return 0; +} + +vector* ZoneServer::GetRevivePoints(Client* client) +{ + vector* points = new vector; + RevivePoint* closest_point = 0; + + // we should not check for revive points if this is null + if ( revive_points != NULL ) + { + LogWrite(ZONE__DEBUG, 0, "Zone", "Got revive point in %s!", __FUNCTION__); + + float closest = 100000; + float test_closest = 0; + RevivePoint* test_point = 0; + vector::iterator revive_iter; + for(revive_iter=revive_points->begin(); revive_iter != revive_points->end(); revive_iter++) + { + test_point = *revive_iter; + if(test_point) + { + LogWrite(ZONE__DEBUG, 0, "Zone", "Test Point Found!"); + test_closest = client->GetPlayer()->GetDistance(test_point->x, test_point->y, test_point->z); + + // should this be changed to list all revive points within max distance or just the closest + if(test_closest < closest) + { + LogWrite(ZONE__DEBUG, 0, "Zone", "test_closest: %.2f, closest: %.2f", test_closest, closest); + closest = test_closest; + closest_point = test_point; + if(closest <= MAX_REVIVEPOINT_DISTANCE) + points->push_back(closest_point); + } + } + } + } + + if(closest_point && points->size() == 0 && closest_point->zone_id == GetZoneID()) + { + LogWrite(ZONE__WARNING, 0, "Zone", "Nearest Revive Point too far away. Add another!"); + client->SimpleMessage(CHANNEL_COLOR_YELLOW, "The closest revive point is quite far away, you might want to ask the server admin for a closer one."); + points->push_back(closest_point); + } + else if(points->size() == 0) + { + LogWrite(ZONE__WARNING, 0, "Zone", "No Revive Points set for zoneID %u. Add some!", GetZoneID()); + client->SimpleMessage(CHANNEL_COLOR_YELLOW, "There are no revive points for this zone, you might want to ask the server admin for one."); + closest_point = new RevivePoint; + closest_point->heading = GetSafeHeading(); + closest_point->id = 0xFFFFFFFF; + closest_point->location_name = "Zone Safe Point"; + closest_point->zone_id = GetZoneID(); + closest_point->x = GetSafeX(); + closest_point->y = GetSafeY(); + closest_point->z = GetSafeZ(); + points->push_back(closest_point); + } + return points; +} + +void ZoneServer::TriggerCharSheetTimer(){ + charsheet_changes.Trigger(); +} + +void ZoneServer::RegenUpdate(){ + if(damaged_spawns.size(true) == 0) + return; + + Spawn* spawn = 0; + MutexList::iterator spawn_iter = damaged_spawns.begin(); + while(spawn_iter.Next()){ + spawn = GetSpawnByID(spawn_iter->value); + if(spawn && (((spawn->GetHP() < spawn->GetTotalHP()) && spawn->GetHP()>0) || (spawn->GetPower() < spawn->GetTotalPower()))){ + if(spawn->IsEntity()) + ((Entity*)spawn)->DoRegenUpdate(); + if(spawn->IsPlayer()){ + Client* client = GetClientBySpawn(spawn); + if(client && client->IsConnected()) + client->QueuePacket(client->GetPlayer()->GetPlayerInfo()->serialize(client->GetVersion())); + } + } + else + RemoveDamagedSpawn(spawn); + //Spawn no longer valid, remove it from the list + if (!spawn) + damaged_spawns.Remove(spawn_iter->value); + } +} + +void ZoneServer::ClearDeadSpawns(){ + MDeadSpawns.writelock(__FUNCTION__, __LINE__); + dead_spawns.clear(); + MDeadSpawns.releasewritelock(__FUNCTION__, __LINE__); +} + +void ZoneServer::ProcessDepop(bool respawns_allowed, bool repop) { + vector::iterator client_itr; + Client* client = 0; + Spawn* spawn = 0; + PacketStruct* packet = 0; + int16 packet_version = 0; + spawn_expire_timers.clear(); + + MClientList.readlock(__FUNCTION__, __LINE__); + for (client_itr = clients.begin(); client_itr != clients.end(); client_itr++) { + client = *client_itr; + if(!client) + continue; + client->GetPlayer()->SetTarget(0); + if(repop) + client->SimpleMessage(CHANNEL_COLOR_YELLOW, "Zone Repop in progress..."); + else{ + client->SimpleMessage(CHANNEL_COLOR_YELLOW, "Zone Depop in progress..."); + if(respawns_allowed) + client->SimpleMessage(CHANNEL_COLOR_YELLOW, "Spawns will respawn according to their respawn timers."); + } + if(!packet || packet_version != client->GetVersion()){ + safe_delete(packet); + packet_version = client->GetVersion(); + packet = configReader.getStruct("WS_DestroyGhostCmd", packet_version); + } + map::iterator itr; + MSpawnList.readlock(__FUNCTION__, __LINE__); + for (itr = spawn_list.begin(); itr != spawn_list.end(); itr++) { + spawn = itr->second; + if(spawn && !spawn->IsPlayer()){ + SendRemoveSpawn(client, spawn, packet); + } + } + MSpawnList.releasereadlock(__FUNCTION__, __LINE__); + } + MClientList.releasereadlock(__FUNCTION__, __LINE__); + + DeleteTransporters(); + safe_delete(packet); + if(!repop && respawns_allowed){ + spawn_range_map.clear(true); + MutexList tmp_player_list; // Local variable, never be on another thread so probably don't need the extra mutex code that comes with a MutexList + ClearDeadSpawns(); + + map::iterator itr; + MSpawnList.writelock(__FUNCTION__, __LINE__); + for (itr = spawn_list.begin(); itr != spawn_list.end(); itr++) { + spawn = itr->second; + if (spawn) { + if(spawn->GetRespawnTime() > 0 && spawn->GetSpawnLocationID() > 0) + respawn_timers.Put(spawn->GetSpawnLocationID(), Timer::GetCurrentTime2() + spawn->GetRespawnTime()*1000); + if(spawn->IsPlayer()) + tmp_player_list.Add(spawn); + else { + RemoveSpawnSupportFunctions(spawn); + AddPendingDelete(spawn); + } + } + } + spawn_list.clear(); + //add back just the clients + MutexList::iterator spawn_iter2 = tmp_player_list.begin(); + while(spawn_iter2.Next()) { + spawn_list[spawn_iter2->value->GetID()] = spawn_iter2->value; + } + MSpawnList.releasewritelock(__FUNCTION__, __LINE__); + } + else + DeleteData(false); + + if(repop) + LoadingData = true; +} + +void ZoneServer::Depop(bool respawns, bool repop) { + respawns_allowed = respawns; + repop_zone = repop; + finished_depop = false; + depop_zone = true; +} + +bool ZoneServer::AddCloseSpawnsToSpawnGroup(Spawn* spawn, float radius){ + if(!spawn) + return false; + + Spawn* close_spawn = 0; + bool ret = true; + map::iterator itr; + MSpawnList.readlock(__FUNCTION__, __LINE__); + for (itr = spawn_list.begin(); itr != spawn_list.end(); itr++) { + close_spawn = itr->second; + if(close_spawn && close_spawn != spawn && !close_spawn->IsPlayer() && close_spawn->GetDistance(spawn) <= radius){ + if((spawn->IsNPC() && close_spawn->IsNPC()) || (spawn->IsGroundSpawn() && close_spawn->IsGroundSpawn()) || (spawn->IsObject() && close_spawn->IsObject()) || (spawn->IsWidget() && close_spawn->IsWidget()) || (spawn->IsSign() && close_spawn->IsSign())){ + if(close_spawn->GetSpawnGroupID() == 0){ + spawn->AddSpawnToGroup(close_spawn); + close_spawn->AddSpawnToGroup(spawn); + } + else + ret = false; + } + } + } + MSpawnList.releasereadlock(__FUNCTION__, __LINE__); + return ret; +} + +void ZoneServer::RepopSpawns(Client* client, Spawn* in_spawn){ + vector* spawns = in_spawn->GetSpawnGroup(); + PacketStruct* packet = configReader.getStruct("WS_DestroyGhostCmd", client->GetVersion());; + if(spawns){ + if(!packet) + return; + + Spawn* spawn = 0; + vector::iterator itr; + for(itr = spawns->begin(); itr != spawns->end(); itr++){ + spawn = *itr; + SendRemoveSpawn(client, spawn, packet); + } + } + safe_delete(spawns); + SendRemoveSpawn(client, in_spawn, packet); + spawn_check_add.Trigger(); + safe_delete(packet); +} + +bool ZoneServer::CheckNPCAttacks(NPC* npc, Spawn* victim, Client* client){ + if(!npc || !victim) + return true; + + if(client){ + if(client->IsConnected() && client->GetPlayer()->GetFactions()->ShouldAttack(npc->GetFactionID()) && npc->AttackAllowed((Entity*)victim, false)){ + if(!npc->EngagedInCombat() && client->GetPlayer()->GetArrowColor(npc->GetLevel()) != ARROW_COLOR_GRAY){ + if(victim->IsEntity()) { + if (npc->HasSpawnGroup()) { + vector* groupVec = npc->GetSpawnGroup(); + for (int32 i = 0; i < groupVec->size(); i++) { + Spawn* group_member = groupVec->at(i); + if (group_member && !group_member->EngagedInCombat() && group_member->Alive()) { + CallSpawnScript(group_member, SPAWN_SCRIPT_AGGRO, victim); + ((NPC*)group_member)->AddHate((Entity*)victim, 50); + } + } + safe_delete(groupVec); + } + else + { + npc->AddHate((Entity*)victim, 50); + } + } + else { + if (npc->HasSpawnGroup()) { + vector* groupVec = npc->GetSpawnGroup(); + for (int32 i = 0; i < groupVec->size(); i++) { + Spawn* group_member = groupVec->at(i); + if (group_member && !group_member->EngagedInCombat() && group_member->Alive()) { + CallSpawnScript(group_member, SPAWN_SCRIPT_AGGRO, victim); + ((NPC*)group_member)->InCombat(true); + } + } + safe_delete(groupVec); + } + else + npc->InCombat(true); + } + } + } + } + else{ + if(!npc->EngagedInCombat()){ + if(victim->IsEntity()) { + if (npc->HasSpawnGroup()) { + vector* groupVec = npc->GetSpawnGroup(); + for (int32 i = 0; i < groupVec->size(); i++) { + Spawn* group_member = groupVec->at(i); + if (group_member && !group_member->EngagedInCombat() && group_member->Alive()) { + CallSpawnScript(group_member, SPAWN_SCRIPT_AGGRO, victim); + ((NPC*)group_member)->AddHate((Entity*)victim, 50); + } + } + safe_delete(groupVec); + } + else + { + npc->AddHate((Entity*)victim, 50); + } + } + else { + if (npc->HasSpawnGroup()) { + vector* groupVec = npc->GetSpawnGroup(); + for (int32 i = 0; i < groupVec->size(); i++) { + Spawn* group_member = groupVec->at(i); + if (group_member && !group_member->EngagedInCombat() && group_member->Alive()) { + CallSpawnScript(group_member, SPAWN_SCRIPT_AGGRO, victim); + ((NPC*)group_member)->InCombat(true); + } + } + } + else + { + npc->InCombat(true); + } + } + } + } + return true; +} + +bool ZoneServer::CheckEnemyList(NPC* npc) { + vector *factions; + vector::iterator faction_itr; + vector *spawns; + vector::iterator spawn_itr; + map attack_spawns; + map reverse_attack_spawns; + map::iterator itr; + int32 faction_id = npc->GetFactionID(); + float distance; + + if (faction_id == 0) + return true; + + m_enemy_faction_list.readlock(__FUNCTION__, __LINE__); + if (enemy_faction_list.count(faction_id) > 0) { + factions = enemy_faction_list[faction_id]; + + for (faction_itr = factions->begin(); faction_itr != factions->end(); faction_itr++) { + m_npc_faction_list.readlock(__FUNCTION__, __LINE__); + if (npc_faction_list.count(*faction_itr) > 0) { + spawns = npc_faction_list[*faction_itr]; + spawn_itr = spawns->begin(); + + for (spawn_itr = spawns->begin(); spawn_itr != spawns->end(); spawn_itr++) { + Spawn* spawn = GetSpawnByID(*spawn_itr); + if (spawn) { + if ((distance = spawn->GetDistance(npc)) <= npc->GetAggroRadius()) + attack_spawns[distance] = spawn; + } + } + } + m_npc_faction_list.releasereadlock(__FUNCTION__, __LINE__); + } + } + m_enemy_faction_list.releasereadlock(__FUNCTION__, __LINE__); + + m_reverse_enemy_faction_list.readlock(__FUNCTION__, __LINE__); + if (reverse_enemy_faction_list.count(faction_id) > 0) { + factions = reverse_enemy_faction_list[faction_id]; + + for (faction_itr = factions->begin(); faction_itr != factions->end(); faction_itr++) { + m_npc_faction_list.readlock(__FUNCTION__, __LINE__); + if (npc_faction_list.count(*faction_itr) > 0) { + spawns = npc_faction_list[*faction_itr]; + spawn_itr = spawns->begin(); + + for (spawn_itr = spawns->begin(); spawn_itr != spawns->end(); spawn_itr++) { + Spawn* spawn = GetSpawnByID(*spawn_itr); + if (spawn) { + if ((distance = spawn->GetDistance(npc)) <= npc->GetAggroRadius()) + reverse_attack_spawns[distance] = spawn; + } + } + } + m_npc_faction_list.releasereadlock(__FUNCTION__, __LINE__); + } + } + m_reverse_enemy_faction_list.releasereadlock(__FUNCTION__, __LINE__); + + if (attack_spawns.size() > 0) { + for (itr = attack_spawns.begin(); itr != attack_spawns.end(); itr++) + CheckNPCAttacks(npc, itr->second); + } + if (reverse_attack_spawns.size() > 0) { + for (itr = reverse_attack_spawns.begin(); itr != reverse_attack_spawns.end(); itr++) + CheckNPCAttacks((NPC*)itr->second, npc); + } + + return attack_spawns.size() == 0; +} + +void ZoneServer::RemoveDeadEnemyList(Spawn *spawn) +{ + int32 faction_id = spawn->GetFactionID(); + vector *spawns; + vector::iterator itr; + + LogWrite(ZONE__DEBUG, 7, "Zone", "Processing RemoveDeadEnemyList..."); + + m_npc_faction_list.writelock(__FUNCTION__, __LINE__); + if (npc_faction_list.count(faction_id) > 0) { + spawns = npc_faction_list[faction_id]; + + for (itr = spawns->begin(); itr != spawns->end(); itr++) { + if (*itr == spawn->GetID()) { + spawns->erase(itr); + break; + } + } + } + m_npc_faction_list.releasewritelock(__FUNCTION__, __LINE__); +} + +void ZoneServer::AddEnemyList(NPC* npc){ + int32 faction_id = npc->GetFactionID(); + vector *hostile_factions; + vector::iterator itr; + + if(faction_id <= 9) + return; + + if(!rule_manager.GetGlobalRule(R_Faction, AllowFactionBasedCombat)->GetBool()) { + LogWrite(FACTION__WARNING, 0, "Faction", "Faction Combat is DISABLED via R_Faction::AllowFactionBasedCombat rule!"); + return; + } + + m_npc_faction_list.readlock(__FUNCTION__, __LINE__); + if (npc_faction_list.count(faction_id) == 0) { + if(faction_id > 10) { + if ((hostile_factions = master_faction_list.GetHostileFactions(faction_id)) != NULL) { + itr = hostile_factions->begin(); + + for (itr = hostile_factions->begin(); itr != hostile_factions->end(); itr++) { + m_enemy_faction_list.writelock(__FUNCTION__, __LINE__); + if (enemy_faction_list.count(faction_id) == 0) + enemy_faction_list[faction_id] = new vector; + enemy_faction_list[faction_id]->push_back(*itr); + m_enemy_faction_list.releasewritelock(__FUNCTION__, __LINE__); + + m_reverse_enemy_faction_list.writelock(__FUNCTION__, __LINE__); + if(reverse_enemy_faction_list.count(*itr) == 0) + reverse_enemy_faction_list[*itr] = new vector; + reverse_enemy_faction_list[*itr]->push_back(faction_id); + m_reverse_enemy_faction_list.releasewritelock(__FUNCTION__, __LINE__); + } + } + } + + /*m_enemy_faction_list.writelock(__FUNCTION__, __LINE__); + if(enemy_faction_list.count(1) == 0) + enemy_faction_list[1] = new vector; + enemy_faction_list[1]->push_back(faction_id); + m_enemy_faction_list.releasewritelock(__FUNCTION__, __LINE__);*/ + } + m_npc_faction_list.releasereadlock(__FUNCTION__, __LINE__); + + m_npc_faction_list.writelock(__FUNCTION__, __LINE__); + if(npc_faction_list.count(faction_id) == 0) + npc_faction_list[faction_id] = new vector; + npc_faction_list[faction_id]->push_back(npc->GetID()); + m_npc_faction_list.releasewritelock(__FUNCTION__, __LINE__); +} + +void ZoneServer::CheckSpawnRange(Client* client, Spawn* spawn, bool initial_login){ + if(client && spawn && (initial_login || client->IsConnected())) { + if(spawn != client->GetPlayer()) { + if(spawn_range_map.count(client) == 0) + spawn_range_map.Put(client, new MutexMap()); + spawn_range_map.Get(client)->Put(spawn->GetID(), spawn->GetDistance(client->GetPlayer())); + if(!initial_login && client && spawn->IsNPC() && spawn_range_map.Get(client)->Get(spawn->GetID()) <= ((NPC*)spawn)->GetAggroRadius() && !client->GetPlayer()->GetInvulnerable()) + CheckNPCAttacks((NPC*)spawn, client->GetPlayer(), client); + } + + if(!initial_login && player_proximities.size() > 0 && player_proximities.count(spawn->GetID()) > 0) + CheckPlayerProximity(spawn, client); + } +} + +void ZoneServer::CheckSpawnRange(Spawn* spawn){ + vector::iterator client_itr; + Client* client = 0; + + MClientList.readlock(__FUNCTION__, __LINE__); + for (client_itr = clients.begin(); client_itr != clients.end(); client_itr++) { + client = *client_itr; + if(client && client->IsReadyForSpawns()) + CheckSpawnRange(client, spawn); + } + MClientList.releasereadlock(__FUNCTION__, __LINE__); +} + +void ZoneServer::PrepareSpawnID(Player* player, Spawn* spawn){ + player->spawn_id++; + player->player_spawn_id_map[player->spawn_id] = spawn; + player->player_spawn_reverse_id_map[spawn] = player->spawn_id; +} + +void ZoneServer::CheckSendSpawnToClient(Client* client, bool initial_login) { + if (!client) { + LogWrite(ZONE__ERROR, 0, "Zone", "CheckSendSpawnToClient called with an invalid client"); + return; + } + + if (initial_login){ + SetSpawnStructs(client); + } + else if (!client->GetInitialSpawnsSent()) + return; + + Spawn* spawn = 0; + map* > closest_spawns; + if(spawn_range_map.count(client) > 0) { + if(initial_login || client->IsConnected()) { + MutexMap::iterator spawn_iter = spawn_range_map.Get(client)->begin(); + while(spawn_iter.Next()) { + spawn = GetSpawnByID(spawn_iter->first); + if(spawn && spawn->GetPrivateQuestSpawn()) { + if(!spawn->IsPrivateSpawn()) + spawn->AddAllowAccessSpawn(spawn); + if(spawn->MeetsSpawnAccessRequirements(client->GetPlayer())) { + if(spawn->IsPrivateSpawn() && !spawn->AllowedAccess(client->GetPlayer())) + spawn->AddAllowAccessSpawn(client->GetPlayer()); + } + else if(spawn->AllowedAccess(client->GetPlayer())) + spawn->RemoveSpawnAccess(client->GetPlayer()); + } + if(spawn && spawn != client->GetPlayer() && client->GetPlayer()->ShouldSendSpawn(spawn)) { + if((!initial_login && spawn_iter->second <= SEND_SPAWN_DISTANCE) || (initial_login && (spawn_iter->second <= 40 || spawn->IsWidget()))) { + if(closest_spawns.count(spawn_iter->second) == 0) + closest_spawns[spawn_iter->second] = new vector(); + closest_spawns[spawn_iter->second]->push_back(spawn); + PrepareSpawnID(client->GetPlayer(), spawn); + } + } + } + } + vector::iterator spawn_iter2; + map* >::iterator itr; + for(itr = closest_spawns.begin(); itr != closest_spawns.end(); itr++) { + for(spawn_iter2 = itr->second->begin(); spawn_iter2 != itr->second->end(); spawn_iter2++) { + spawn = *spawn_iter2; + client->GetPlayer()->ClearRemovedSpawn(spawn); + SendSpawn(spawn, client); + if(client->ShouldTarget() && client->GetCombineSpawn() == spawn) + client->TargetSpawn(spawn); + } + delete itr->second; + } + } + + if (initial_login) + client->SetInitialSpawnsSent(true); +} + +void ZoneServer::CheckSendSpawnToClient(){ + vector::iterator itr; + Client* client = 0; + + MClientList.readlock(__FUNCTION__, __LINE__); + for (itr = clients.begin(); itr != clients.end(); itr++) { + client = *itr; + if(client->IsReadyForSpawns()) + CheckSendSpawnToClient(client); + } + MClientList.releasereadlock(__FUNCTION__, __LINE__); +} + +void ZoneServer::CheckRemoveSpawnFromClient(Spawn* spawn) { + vector::iterator itr; + Client* client = 0; + PacketStruct* packet = 0; + int16 packet_version = 0; + + MClientList.readlock(__FUNCTION__, __LINE__); + for (itr = clients.begin(); itr != clients.end(); itr++) { + client = *itr; + if(client){ + if(!packet || packet_version != client->GetVersion()){ + safe_delete(packet); + packet_version = client->GetVersion(); + packet = configReader.getStruct("WS_DestroyGhostCmd", packet_version); + } + + if(spawn && spawn != client->GetPlayer() && client->GetPlayer()->WasSentSpawn(spawn->GetID()) && client->GetPlayer()->WasSpawnRemoved(spawn) == false && (spawn_range_map.Get(client)->Get(spawn->GetID()) > REMOVE_SPAWN_DISTANCE && !spawn->IsWidget())){ + SendRemoveSpawn(client, spawn, packet); + } + + } + } + MClientList.releasereadlock(__FUNCTION__, __LINE__); + safe_delete(packet); +} + +bool ZoneServer::CombatProcess(Spawn* spawn) { + bool ret = true; + + if (spawn && spawn->IsEntity()) + ((Entity*)spawn)->ProcessCombat(); + + return ret; +} + +void ZoneServer::AddDelayedSpawnRemove(Spawn* spawn, int32 time) { + // this prevents a crash when a zone shuts down with a client in it + if (zoneShuttingDown) + return; + + if (delayed_spawn_remove_list.count(spawn->GetID(), true) == 0) + delayed_spawn_remove_list.Put(spawn->GetID(), Timer::GetCurrentTime2() + time); +} + +void ZoneServer::RemoveDelayedSpawnRemove(Spawn* spawn) { + if (delayed_spawn_remove_list.count(spawn->GetID(), true) > 0) + delayed_spawn_remove_list.erase(spawn->GetID()); +} + +void ZoneServer::DelayedSpawnRemoval(bool force_delete_all) { + if (delayed_spawn_remove_list.size(true) > 0) { + MutexMap::iterator itr = delayed_spawn_remove_list.begin(); + int32 current_time = Timer::GetCurrentTime2(); + Spawn* spawn = 0; + // Cycle through all spawns scheduled for removal + while (itr.Next()) { + // If it is time for removal, or a force delete of all, then remove the spawn + if (force_delete_all || current_time >= itr->second) { + spawn = GetSpawnByID(itr->first); + delayed_spawn_remove_list.erase(itr->first); + if (spawn) { + if (spawn->IsEntity()) { + // Remove pets + ((Entity*)spawn)->DismissPet((NPC*)((Entity*)spawn)->GetPet()); + ((Entity*)spawn)->DismissPet((NPC*)((Entity*)spawn)->GetCharmedPet()); + ((Entity*)spawn)->DismissPet((NPC*)((Entity*)spawn)->GetDeityPet()); + ((Entity*)spawn)->DismissPet((NPC*)((Entity*)spawn)->GetCosmeticPet()); + } + + if (spawn->IsPlayer()) + RemoveSpawn(spawn, false); + else + RemoveSpawn(spawn); + } + } + } + } +} + +void ZoneServer::AddPendingDelete(Spawn* spawn) { + MSpawnDeleteList.writelock(__FUNCTION__, __LINE__); + if(spawn_delete_list.count(spawn) == 0) + spawn_delete_list.insert(make_pair(spawn, Timer::GetCurrentTime2() + spawn_delete_timer)); //give other threads up to 30 seconds to stop using this spawn reference + MSpawnDeleteList.releasewritelock(__FUNCTION__, __LINE__); +} + +void ZoneServer::DeleteSpawns(bool delete_all) { + MSpawnDeleteList.writelock(__FUNCTION__, __LINE__); + if(spawn_delete_list.size() > 0){ + map::iterator itr; + map::iterator erase_itr; + int32 current_time = Timer::GetCurrentTime2(); + Spawn* spawn = 0; + for (itr = spawn_delete_list.begin(); itr != spawn_delete_list.end(); ) { + if (delete_all || current_time >= itr->second){ + spawn = itr->first; + erase_itr = itr++; + spawn_delete_list.erase(erase_itr); + safe_delete(spawn); + } + else + itr++; + } + } + MSpawnDeleteList.releasewritelock(__FUNCTION__, __LINE__); +} + +void ZoneServer::AddDamagedSpawn(Spawn* spawn){ + if (spawn) + damaged_spawns.Add(spawn->GetID()); +} + +void ZoneServer::RemoveDamagedSpawn(Spawn* spawn){ + if (spawn) + damaged_spawns.Remove(spawn->GetID()); +} + +bool ZoneServer::Process() +{ + MMasterZoneLock->lock(); //Changing this back to a recursive lock to fix a possible /reload spells crash with multiple zones running - Foof +#ifndef NO_CATCH + try + { +#endif + if(LoadingData){ + while(zoneID == 0){ //this is loaded by world + Sleep(10); + } + + if (reloading) { + LogWrite(COMMAND__DEBUG, 0, "Command", "-Loading Entity Commands..."); + database.LoadEntityCommands(this); + LogWrite(NPC__INFO, 0, "NPC", "-Loading NPC data..."); + database.LoadNPCs(this); + LogWrite(NPC__INFO, 0, "NPC", "-Load NPC data complete!"); + + LogWrite(OBJECT__INFO, 0, "Object", "-Loading Object data..."); + database.LoadObjects(this); + LogWrite(OBJECT__INFO, 0, "Object", "-Load Object data complete!"); + + LogWrite(SIGN__INFO, 0, "Sign", "-Loading Sign data..."); + database.LoadSigns(this); + LogWrite(SIGN__INFO, 0, "Sign", "-Load Sign data complete!"); + + LogWrite(WIDGET__INFO, 0, "Widget", "-Loading Widget data..."); + database.LoadWidgets(this); + LogWrite(WIDGET__INFO, 0, "Widget", "-Load Widget data complete!"); + + LogWrite(GROUNDSPAWN__INFO, 0, "GSpawn", "-Loading Groundspawn data..."); + database.LoadGroundSpawns(this); + database.LoadGroundSpawnEntries(this); + LogWrite(GROUNDSPAWN__INFO, 0, "GSpawn", "-Load Groundspawn data complete!"); + + LogWrite(PET__INFO, 0, "Pet", "-Loading Pet data..."); + database.GetPetNames(this); + LogWrite(PET__INFO, 0, "Pet", "-Load Pet data complete!"); + + LogWrite(LOOT__INFO, 0, "Loot", "-Loading Spawn loot data..."); + database.LoadLoot(this); + LogWrite(LOOT__INFO, 0, "Loot", "-Loading Spawn loot data complete!"); + + LogWrite(TRANSPORT__INFO, 0, "Transport", "-Loading Transporters..."); + database.LoadTransporters(this); + LogWrite(TRANSPORT__INFO, 0, "Transport", "-Loading Transporters complete!"); + reloading = false; + } + + MSpawnGroupAssociation.writelock(__FUNCTION__, __LINE__); + spawn_group_associations.clear(); + MSpawnGroupAssociation.releasewritelock(__FUNCTION__, __LINE__); + + MSpawnGroupLocations.writelock(__FUNCTION__, __LINE__); + spawn_group_locations.clear(); + MSpawnGroupLocations.releasewritelock(__FUNCTION__, __LINE__); + + MSpawnLocationGroups.writelock(__FUNCTION__, __LINE__); + spawn_location_groups.clear(); + MSpawnLocationGroups.releasewritelock(__FUNCTION__, __LINE__); + + MSpawnGroupChances.writelock(__FUNCTION__, __LINE__); + spawn_group_chances.clear(); + MSpawnGroupChances.releasewritelock(__FUNCTION__, __LINE__); + + DeleteTransporters(); + ReloadTransporters(); + + database.LoadSpawns(this); + ProcessSpawnLocations(); + + if (!revive_points) + revive_points = new vector; + else { + while (!revive_points->empty()){ + safe_delete(revive_points->back()); + revive_points->pop_back(); + } + } + database.LoadRevivePoints(revive_points, GetZoneID()); + + LoadingData = false; + + spawn_range.Trigger(); + spawn_check_add.Trigger(); + + RemoveLocationGrids(); + database.LoadLocationGrids(this); + + const char* zone_script = world.GetZoneScript(this->GetZoneID()); + if(lua_interface && zone_script) { + RemoveLocationProximities(); + lua_interface->RunZoneScript(zone_script, "init_zone_script", this); + } + } + + if(shutdownTimer.Enabled() && shutdownTimer.Check()) + zoneShuttingDown = true; + + if (reloading_spellprocess){ + MMasterZoneLock->unlock(); + return !zoneShuttingDown; + } + + // Remove LD Player whos LD timer has expired + if (!zoneShuttingDown) + DelayedSpawnRemoval(false); + + // client loop + if(charsheet_changes.Check()) + SendCharSheetChanges(); + + // Client loop + ClientProcess(); + + if(spellProcess) + spellProcess->Process(); + if (tradeskillMgr) + tradeskillMgr->Process(); + + // Client loop + if(client_save.Check()) + SaveClients(); + + // Possibility to do a client loop + if(weather_enabled && weatherTimer.Check()) + ProcessWeather(); + + // client related loop, move to main thread? + if(!zoneShuttingDown) + ProcessDrowning(); + + // client than location_proximities loop, move to main thread + if (location_prox_timer.Check() && !zoneShuttingDown) + CheckLocationProximity(); + + // client than location_grid loop, move to main thread + if (location_grid_timer.Check() && !zoneShuttingDown) + CheckLocationGrids(); + + if (sync_game_time_timer.Check() && !zoneShuttingDown) + SendTimeUpdateToAllClients(); + + if(lua_interface) + lua_interface->Process(); + + int hour = world.GetWorldTimeStruct()->hour; + int minute = world.GetWorldTimeStruct()->minute; + + if (!isDusk && (hour >= 19 || hour < 8)) {//((hour > dusk_hour || hour < dawn_hour) || ((dusk_hour == hour && minute >= dusk_minute) || (hour == dawn_hour && minute < dawn_minute)))) { + isDusk = true; + const char* zone_script = world.GetZoneScript(GetZoneID()); + if (lua_interface && zone_script) + lua_interface->RunZoneScript(zone_script, "dusk", this); + + ProcessSpawnConditional(SPAWN_CONDITIONAL_NIGHT); + } + else if (isDusk && hour >= 8 && hour < 19) {//((hour > dawn_hour && hour < dusk_hour) || ((hour == dawn_hour && minute >= dawn_minute) || (hour == dusk_hour && minute < dusk_minute)))) { + isDusk = false; + const char* zone_script = world.GetZoneScript(GetZoneID()); + if (lua_interface && zone_script) + lua_interface->RunZoneScript(zone_script, "dawn", this); + + ProcessSpawnConditional(SPAWN_CONDITIONAL_DAY); + } + + // damaged spawns loop, spawn related, move to spawn thread? + if(regenTimer.Check()) + RegenUpdate(); + + // heading_timers loop + if(!zoneShuttingDown) + CheckHeadingTimers(); + + // respawn_timers loop + if(respawn_timer.Check() && !zoneShuttingDown) + CheckRespawns(); + + // spawn_expire_timers loop + if (spawn_expire_timer.Check() && !zoneShuttingDown) + CheckSpawnExpireTimers(); + + // widget_timers loop + if(widget_timer.Check() && !zoneShuttingDown) + CheckWidgetTimers(); + + // spawn_script_timers loop + if(!zoneShuttingDown) + CheckSpawnScriptTimers(); + + // Check to see if a dead spawn needs to be removed + CheckDeadSpawnRemoval(); +#ifndef NO_CATCH + } + catch(...) + { + LogWrite(ZONE__ERROR, 0, "Zone", "Exception while running '%s'", GetZoneName()); + zoneShuttingDown = true; + MMasterZoneLock->unlock(); + return false; + } +#endif + MMasterZoneLock->unlock(); + return (zoneShuttingDown == false); +} + +bool ZoneServer::SpawnProcess(){ + if(depop_zone) { + depop_zone = false; + ProcessDepop(respawns_allowed, repop_zone); + finished_depop = true; + } + + MMasterSpawnLock.writelock(__FUNCTION__, __LINE__); + // If the zone is loading data or shutting down don't do anything + if(!LoadingData && !zoneShuttingDown && !reloading_spellprocess) { + + + // send spawn changes, changed_spawns loop + if(spawn_update.Check() && !zoneShuttingDown) { //check for changed spawns every {Rule:SpawnUpdateTimer} milliseconds (default: 200ms) + SendSpawnChanges(); + } + + // Set some bool's for timers + bool movement = movement_timer.Check(); + bool spawnRange = spawn_range.Check(); + bool checkRemove = spawn_check_remove.Check(); + bool aggroCheck = aggro_timer.Check(); + vector pending_spawn_list_remove; + + // Loop through the spawn list + map::iterator itr; + MSpawnList.readlock(__FUNCTION__, __LINE__); + // Loop throught the list to set up spawns to be sent to clients + for (itr = spawn_list.begin(); itr != spawn_list.end(); itr++) { + // if zone is shutting down kill the loop + if (zoneShuttingDown) + break; + + Spawn* spawn = itr->second; + if (spawn) { + // Checks the range to all clients in the zone + if (spawnRange) + CheckSpawnRange(spawn); + + // Checks to see if the spawn needs to be removed from a client + if (checkRemove) + CheckRemoveSpawnFromClient(spawn); + } + } + MSpawnList.releasereadlock(__FUNCTION__, __LINE__); + + // Broke the spawn loop into 2 so spawns are sent to the client faster, send the spawns to clients now then resume the spawn loop + + // client loop, move to main thread? + // moved this back to the spawn thread as on the main thread during a depop, done on the spawn thread, spawns would start to pop again + // might be an issue with other functions moved from the spawn thread to the main thread? + if(spawn_check_add.Check() && !zoneShuttingDown) + CheckSendSpawnToClient(); + + MSpawnList.readlock(__FUNCTION__, __LINE__); + for (itr = spawn_list.begin(); itr != spawn_list.end(); itr++) { + // Break the loop if the zone is shutting down + if (zoneShuttingDown) + break; + + Spawn* spawn = itr->second; + if (spawn) { + // Process spawn movement + if (movement) { + spawn->ProcessMovement(); + // update last_movement_update for all spawns (used for time_step) + spawn->last_movement_update = Timer::GetCurrentTime2(); + } + + // Makes NPC's KOS to other NPC's or players + if (aggroCheck) + ProcessAggroChecks(spawn); + + // Process combat for the spawn + CombatProcess(spawn); + } + else { + // unable to get a valid spawn, lets add the id to another list to remove from the spawn list after this loop is finished + pending_spawn_list_remove.push_back(itr->first); + } + + } + MSpawnList.releasereadlock(__FUNCTION__, __LINE__); + + // Check to see if there are any spawn id's that need to be removed from the spawn list, if so remove them all + if (pending_spawn_list_remove.size() > 0) { + MSpawnList.writelock(__FUNCTION__, __LINE__); + vector::iterator itr2; + for (itr2 = pending_spawn_list_remove.begin(); itr2 != pending_spawn_list_remove.end(); itr2++) + spawn_list.erase(*itr2); + + pending_spawn_list_remove.clear(); + MSpawnList.releasewritelock(__FUNCTION__, __LINE__); + } + + // Check to see if there are spawns waiting to be added to the spawn list, if so add them all + if (pending_spawn_list_add.size() > 0) { + MSpawnList.writelock(__FUNCTION__, __LINE__); + MPendingSpawnListAdd.writelock(__FUNCTION__, __LINE__); + list::iterator itr2; + for (itr2 = pending_spawn_list_add.begin(); itr2 != pending_spawn_list_add.end(); itr2++) { + Spawn* spawn = *itr2; + if (spawn) + spawn_list[spawn->GetID()] = spawn; + } + + pending_spawn_list_add.clear(); + MPendingSpawnListAdd.releasewritelock(__FUNCTION__, __LINE__); + MSpawnList.releasewritelock(__FUNCTION__, __LINE__); + } + + + // Do other loops for spawns + // tracking, client loop with spawn loop for each client that is tracking, change to a spawn_range_map loop instead of using the main spawn list? + //if (tracking_timer.Check()) + //ProcessTracking(); // probably doesn't work as spawn loop iterator is never set + + + // Delete unused spawns, do this last + if(!zoneShuttingDown) + DeleteSpawns(false); + + // Nothing should come after this + + + //LogWrite(PLAYER__ERROR, 0, "Debug", "Spawn loop time %u", Timer::GetCurrentTime2() - time); + } + + MMasterSpawnLock.releasewritelock(__FUNCTION__, __LINE__); + + return (zoneShuttingDown == false); +} + +void ZoneServer::CheckDeadSpawnRemoval() { + MDeadSpawns.writelock(__FUNCTION__, __LINE__); + if(dead_spawns.size() > 0){ + vector tmp_dead_list; + int32 current_time = Timer::GetCurrentTime2(); + Spawn* spawn = 0; + map::iterator itr = dead_spawns.begin(); + map::iterator itr_delete; + while (itr != dead_spawns.end()) { + spawn = GetSpawnByID(itr->first); + if (spawn) { + if(current_time >= itr->second) + tmp_dead_list.push_back(spawn); + itr++; + } + else { + itr_delete = itr++; + dead_spawns.erase(itr_delete); + } + } + for(int i=tmp_dead_list.size()-1;i>=0;i--){ + spawn = tmp_dead_list[i]; + if (!spawn->IsPlayer()) + { + dead_spawns.erase(spawn->GetID()); + RemoveSpawn(spawn, true, true, false); + } + } + } + MDeadSpawns.releasewritelock(__FUNCTION__, __LINE__); +} + +void ZoneServer::CheckRespawns(){ + vector tmp_respawn_list; + MutexMap::iterator itr = respawn_timers.begin(); + while(itr.Next()){ + if(Timer::GetCurrentTime2() >= itr->second) + tmp_respawn_list.push_back(itr->first); + } + for(int i=tmp_respawn_list.size()-1;i>=0;i--){ + if ( IsInstanceZone() ) + { + if ( database.DeleteInstanceSpawnRemoved(GetInstanceID(),tmp_respawn_list[i]) ) + { + } + else + { + } + } + + ProcessSpawnLocation(tmp_respawn_list[i], true); + respawn_timers.erase(tmp_respawn_list[i]); + } +} + +void ZoneServer::CheckSpawnExpireTimers() { + MutexMap::iterator itr = spawn_expire_timers.begin(); + while (itr.Next()) { + Spawn* spawn = GetSpawnByID(itr->first); + if (spawn) { + if (Timer::GetCurrentTime2() >= itr.second) { + spawn_expire_timers.erase(itr.first); + Despawn(spawn, spawn->GetRespawnTime()); + } + } + else + spawn_expire_timers.erase(itr->first); + } +} + +void ZoneServer::AddSpawnExpireTimer(Spawn* spawn, int32 expire_time, int32 expire_offset) { + if (spawn) { + int32 actual_expire_time = expire_time; + if (expire_offset > 0) { + int32 low = expire_time; + int32 high = expire_time + expire_offset; + if (expire_offset < expire_time) + low = expire_time - expire_offset; + int32 range = (high - low) + 1; + actual_expire_time = (low + (int32)((range * rand()) / (RAND_MAX + 1.0))); + } + actual_expire_time *= 1000; + spawn_expire_timers.Put(spawn->GetID(), Timer::GetCurrentTime2() + actual_expire_time); + } +} + +void ZoneServer::SaveClient(Client* client){ + client->Save(); +} + +void ZoneServer::SaveClients(){ + vector::iterator itr; + Client* client = 0; + + MClientList.readlock(__FUNCTION__, __LINE__); + for (itr = clients.begin(); itr != clients.end(); itr++) { + client = *itr; + if(client->IsConnected()){ + SaveClient(client); + } + } + MClientList.releasereadlock(__FUNCTION__, __LINE__); +} + +void ZoneServer::SendSpawnVisualState(Spawn* spawn, int16 type){ + if(!spawn) + return; + + vector::iterator itr; + spawn->SetTempVisualState(type); + Client* client = 0; + + MClientList.readlock(__FUNCTION__, __LINE__); + for (itr = clients.begin(); itr != clients.end(); itr++) { + client = *itr; + if(client && client->GetPlayer() != spawn) + AddChangedSpawn(spawn); + } + MClientList.releasereadlock(__FUNCTION__, __LINE__); +} + +void ZoneServer::SendSpawnChanges(int32 spawn_id, Client* client, bool override_changes, bool override_vis_changes){ + Spawn* spawn = GetSpawnByDatabaseID(spawn_id); + if(spawn && (spawn->changed || override_changes || override_vis_changes)) + SendSpawnChanges(spawn, client, override_changes, override_vis_changes); +} + +void ZoneServer::SendSpawnChanges(Spawn* spawn, Client* client, bool override_changes, bool override_vis_changes){ + if(client && client->IsReadyForUpdates() && client->GetPlayer()->WasSentSpawn(spawn->GetID()) && !client->GetPlayer()->WasSpawnRemoved(spawn) && client->GetPlayer()->GetDistance(spawn) < REMOVE_SPAWN_DISTANCE){ + EQ2Packet* outapp = spawn->spawn_update_packet(client->GetPlayer(), client->GetVersion(), override_changes, override_vis_changes); + if(outapp) + client->QueuePacket(outapp); + } +} + +void ZoneServer::SendSpawnChanges(Spawn* spawn){ + if(spawn && spawn->changed){ + if(!spawn->IsPlayer() || (spawn->IsPlayer() && (spawn->info_changed || spawn->vis_changed))){ + vector::iterator itr; + Client* client = 0; + + MClientList.readlock(__FUNCTION__, __LINE__); + for (itr = clients.begin(); itr != clients.end(); itr++) { + client = *itr; + SendSpawnChanges(spawn, client); + } + MClientList.releasereadlock(__FUNCTION__, __LINE__); + } + spawn->changed = false; + spawn->info_changed = false; + if(spawn->IsPlayer() == false) + spawn->position_changed = false; + spawn->vis_changed = false; + } +} + +Spawn* ZoneServer::FindSpawn(Player* searcher, const char* name){ + if(!searcher || !name) + return 0; + + Spawn* spawn = 0; + vector find_spawn_list; + vector::iterator fspawn_iter; + int8 name_size = strlen(name); + map::iterator itr; + MSpawnList.readlock(__FUNCTION__, __LINE__); + for (itr = spawn_list.begin(); itr != spawn_list.end(); itr++) { + spawn = itr->second; + if(spawn && !strncasecmp(spawn->GetName(), name, name_size)) + find_spawn_list.push_back(spawn); + } + MSpawnList.releasereadlock(__FUNCTION__, __LINE__); + Spawn* closest = 0; + float distance = 0; + float test_distance = 0; + for(fspawn_iter=find_spawn_list.begin(); fspawn_iter!=find_spawn_list.end(); fspawn_iter++){ + spawn = *fspawn_iter; + if(spawn && ((((test_distance = searcher->GetDistance(spawn)) < distance)) || !closest)){ + distance = test_distance; + closest = spawn; + } + } + return closest; +} + +void ZoneServer::AddChangedSpawn(Spawn* spawn){ + if(!spawn || (spawn->IsPlayer() && !spawn->info_changed && !spawn->vis_changed)) + return; + if (changed_spawns.count(spawn->GetID()) == 0) + changed_spawns.Add(spawn->GetID()); +} + +void ZoneServer::RemoveChangedSpawn(Spawn* spawn){ + if (spawn) + changed_spawns.Remove(spawn->GetID()); +} + +void ZoneServer::AddDrowningVictim(Player* player){ + Client* client = GetClientBySpawn(player); + if(client && drowning_victims.count(client) == 0) + drowning_victims.Put(client, Timer::GetCurrentTime2()); +} + +void ZoneServer::RemoveDrowningVictim(Player* player){ + Client* client = GetClientBySpawn(player); + if(client) + drowning_victims.erase(client); +} + +Client* ZoneServer::GetDrowningVictim(Player* player){ + Client* client = GetClientBySpawn(player); + if(client && drowning_victims.count(client) > 0) + return(client); + return 0; +} + +void ZoneServer::ProcessDrowning(){ + vector dead_list; + if(drowning_victims.size(true) > 0){ + sint32 damage = 0; + int32 current_time = Timer::GetCurrentTime2(); + MutexMap::iterator itr = drowning_victims.begin(); + while(itr.Next()){ + if(current_time >= itr->second) { + Client* client = itr->first; + Player* player = client->GetPlayer(); + drowning_victims.Get(client) = Timer::GetCurrentTime2() + 2000; + damage = player->GetTotalHP()/20 + player->GetHPRegen(); + player->TakeDamage(damage); + if(player->GetHP() == 0) + dead_list.push_back(client); + player->SetCharSheetChanged(true); + SendCharSheetChanges(client); + SendDamagePacket(0, player, DAMAGE_PACKET_TYPE_SIMPLE_DAMAGE, DAMAGE_PACKET_RESULT_SUCCESSFUL, DAMAGE_PACKET_DAMAGE_TYPE_DROWN, damage, 0); + client->SimpleMessage(CHANNEL_COLOR_YELLOW, "You are drowning!"); + } + } + } + if(dead_list.size() > 0){ + vector::iterator itr; + for(itr = dead_list.begin(); itr != dead_list.end(); itr++){ + RemoveDrowningVictim((*itr)->GetPlayer()); + KillSpawn((*itr)->GetPlayer(), 0); + (*itr)->SimpleMessage(CHANNEL_COLOR_WHITE, "You are sleeping with the fishes! Glug, glug..."); + } + } +} + +void ZoneServer::SendSpawnChanges(){ + Spawn* spawn = 0; + MutexList::iterator spawn_iter = changed_spawns.begin(); + while(spawn_iter.Next()){ + spawn = GetSpawnByID(spawn_iter->value); + if(spawn && spawn->changed){ + if(!spawn->IsPlayer() || (spawn->IsPlayer() && (spawn->info_changed || spawn->vis_changed))){ + SendSpawnChanges(spawn); + } + } + if (!spawn) + changed_spawns.Remove(spawn_iter->value); + } + changed_spawns.clear(); +} + +void ZoneServer::SendPlayerPositionChanges(Player* player){ + if(player){ + player->position_changed = false; + Client* client = 0; + vector::iterator client_itr; + + MClientList.readlock(__FUNCTION__, __LINE__); + for (client_itr = clients.begin(); client_itr != clients.end(); client_itr++) { + client = *client_itr; + if(player != client->GetPlayer() && client->GetPlayer()->WasSentSpawn(player->GetID()) && client->GetPlayer()->WasSpawnRemoved(player) == false){ + EQ2Packet* outapp = player->player_position_update_packet(client->GetPlayer(), client->GetVersion()); + if(outapp) + client->QueuePacket(outapp); + } + } + MClientList.releasereadlock(__FUNCTION__, __LINE__); + } +} + +void ZoneServer::SendCharSheetChanges(){ + vector::iterator client_itr; + + MClientList.readlock(__FUNCTION__, __LINE__); + for (client_itr = clients.begin(); client_itr != clients.end(); client_itr++) + SendCharSheetChanges(*client_itr); + MClientList.releasereadlock(__FUNCTION__, __LINE__); +} + +void ZoneServer::SendCharSheetChanges(Client* client){ + if(client && client->IsConnected() && client->GetPlayer()->GetCharSheetChanged()){ + client->GetPlayer()->SetCharSheetChanged(false); + ClientPacketFunctions::SendCharacterSheet(client); + } +} + +int32 ZoneServer::CalculateSpawnGroup(SpawnLocation* spawnlocation, bool respawn) +{ + int32 group = 0; + list* groups_at_location = GetSpawnGroupsByLocation(spawnlocation->placement_id); + + LogWrite(SPAWN__TRACE, 0, "Spawn", "Enter %s", __FUNCTION__); + + if(groups_at_location){ + list::iterator group_location_itr; + float chance = 0; + float total_chance = 0; + map tmp_chances; + set* associated_groups = 0; + for (group_location_itr = groups_at_location->begin(); group_location_itr != groups_at_location->end(); group_location_itr++) { + if(tmp_chances.count(*group_location_itr) > 0) + continue; + associated_groups = GetAssociatedGroups(*group_location_itr); + if(associated_groups){ + set::iterator group_itr; + for (group_itr = associated_groups->begin(); group_itr != associated_groups->end(); group_itr++) { + chance = GetSpawnGroupChance(*group_itr); + if(chance > 0){ + total_chance += chance; + tmp_chances[*group_itr] = chance; + } + else + tmp_chances[*group_itr] = 0; + } + } + else{ //single group, no associations + chance = GetSpawnGroupChance(*group_location_itr); + total_chance += chance; + tmp_chances[*group_location_itr] = chance; + } + } + if(tmp_chances.size() > 1){ + //set the default for any chances not set + map::iterator itr2; + for(itr2 = tmp_chances.begin(); itr2 != tmp_chances.end(); itr2++){ + if(itr2->second == 0){ + total_chance += 100/tmp_chances.size(); + tmp_chances[itr2->first] = (float)(100 / tmp_chances.size()); + } + } + } + if(tmp_chances.size() > 1){ + float roll = (float)(rand()%((int32)total_chance)); + map::iterator itr3; + for (itr3 = tmp_chances.begin(); itr3 != tmp_chances.end(); itr3++){ + if(itr3->second >= roll){ + group = itr3->first; + break; + } + else + roll -= itr3->second; + } + } + else if(tmp_chances.size() == 1) + group = tmp_chances.begin()->first; + } + if(group > 0){ + map* locations = GetSpawnLocationsByGroup(group); + if(locations){ + map::iterator itr; + Spawn* spawn = 0; + Spawn* leader = 0; + + MSpawnLocationList.readlock(__FUNCTION__, __LINE__); + for (itr = locations->begin(); itr != locations->end(); itr++) { + if(spawn_location_list.count(itr->second) > 0){ + spawn = ProcessSpawnLocation(spawn_location_list[itr->second], respawn); + if(!leader && spawn) + leader = spawn; + if(leader) + leader->AddSpawnToGroup(spawn); + if(spawn){ + //if(spawn_group_map.count(group) == 0) + // spawn_group_map.Put(group, new MutexList()); + MutexList* groupList = &spawn_group_map.Get(group); + groupList->Add(spawn->GetID()); + spawn->SetSpawnGroupID(group); + } + } + } + MSpawnLocationList.releasereadlock(__FUNCTION__, __LINE__); + } + } + + LogWrite(SPAWN__TRACE, 0, "Spawn", "Exit %s", __FUNCTION__); + + return group; +} + +void ZoneServer::ProcessSpawnLocation(int32 location_id, bool respawn) +{ + LogWrite(SPAWN__TRACE, 0, "Spawn", "Enter %s", __FUNCTION__); + + MSpawnLocationList.readlock(__FUNCTION__, __LINE__); + + if(spawn_location_list.count(location_id) > 0) + { + if(respawn) //see if there are any spawns still in game associated with this spawn's group, if so, dont spawn this + { + list* groups = GetSpawnGroupsByLocation(spawn_location_list[location_id]->placement_id); + + if(groups) + { + set* associated_groups = 0; + bool should_spawn = true; + list::iterator itr; + for (itr = groups->begin(); itr != groups->end(); itr++) { + associated_groups = GetAssociatedGroups(*itr); + + if(associated_groups) + { + set::iterator assoc_itr; + for (assoc_itr = associated_groups->begin(); assoc_itr != associated_groups->end(); assoc_itr++) { + if(spawn_group_map.count(*assoc_itr) > 0 && spawn_group_map.Get(*assoc_itr).size() > 0) + should_spawn = false; + } + } + } + + if(should_spawn) + CalculateSpawnGroup(spawn_location_list[location_id]); + + LogWrite(SPAWN__TRACE, 0, "Spawn", "Exit %s", __FUNCTION__); + return; + } + } + + LogWrite(SPAWN__TRACE, 0, "Spawn", "Exit %s", __FUNCTION__); + + ProcessSpawnLocation(spawn_location_list[location_id], respawn); + } + MSpawnLocationList.releasereadlock(__FUNCTION__, __LINE__); +} + +Spawn* ZoneServer::ProcessSpawnLocation(SpawnLocation* spawnlocation, bool respawn) +{ + LogWrite(SPAWN__TRACE, 0, "Spawn", "Enter %s", __FUNCTION__); + + if(!spawnlocation) + return 0; + + Spawn* spawn = 0; + float rand_number = MakeRandomFloat(0, spawnlocation->total_percentage); + + for(int32 i=0;ientities.size();i++) + { + if(spawnlocation->entities[i]->spawn_percentage == 0) + continue; + + if (spawnlocation->conditional > 0) { + if ((spawnlocation->conditional & SPAWN_CONDITIONAL_DAY) == SPAWN_CONDITIONAL_DAY && isDusk) + continue; + + if ((spawnlocation->conditional & SPAWN_CONDITIONAL_NIGHT) == SPAWN_CONDITIONAL_NIGHT && !isDusk) + continue; + + if ((spawnlocation->conditional & SPAWN_CONDITIONAL_DAY) == SPAWN_CONDITIONAL_NOT_RAINING && rain >= 0.75f) + continue; + + if ((spawnlocation->conditional & SPAWN_CONDITIONAL_DAY) == SPAWN_CONDITIONAL_RAINING && rain < 0.75f) + continue; + } + + if(spawnlocation->entities[i]->spawn_percentage >= rand_number){ + if(spawnlocation->entities[i]->spawn_type == SPAWN_ENTRY_TYPE_NPC) + spawn = AddNPCSpawn(spawnlocation, spawnlocation->entities[i]); + else if(spawnlocation->entities[i]->spawn_type == SPAWN_ENTRY_TYPE_GROUNDSPAWN) + spawn = AddGroundSpawn(spawnlocation, spawnlocation->entities[i]); + else if(spawnlocation->entities[i]->spawn_type == SPAWN_ENTRY_TYPE_OBJECT) + spawn = AddObjectSpawn(spawnlocation, spawnlocation->entities[i]); + else if(spawnlocation->entities[i]->spawn_type == SPAWN_ENTRY_TYPE_WIDGET) + spawn = AddWidgetSpawn(spawnlocation, spawnlocation->entities[i]); + else if(spawnlocation->entities[i]->spawn_type == SPAWN_ENTRY_TYPE_SIGN) + spawn = AddSignSpawn(spawnlocation, spawnlocation->entities[i]); + + if (!spawn) + { + LogWrite(ZONE__ERROR, 0, "Zone", "Error adding spawn to zone"); + safe_delete(spawn); + continue; + } + + const char* script = 0; + + for(int x=0;x<3;x++) + { + switch(x) + { + case 0: + script = world.GetSpawnEntryScript(spawnlocation->entities[i]->spawn_entry_id); + break; + case 1: + script = world.GetSpawnLocationScript(spawnlocation->entities[i]->spawn_location_id); + break; + case 2: + script = world.GetSpawnScript(spawnlocation->entities[i]->spawn_id); + break; + } + + if(script && lua_interface && lua_interface->GetSpawnScript(script) != 0) + { + spawn->SetSpawnScript(string(script)); + break; + } + } + + if (spawn) + { + if(respawn) + CallSpawnScript(spawn, SPAWN_SCRIPT_RESPAWN); + else + CallSpawnScript(spawn, SPAWN_SCRIPT_SPAWN); + } + break; + } + else + rand_number -= spawnlocation->entities[i]->spawn_percentage; + } + + LogWrite(SPAWN__TRACE, 0, "Spawn", "Exit %s", __FUNCTION__); + + return spawn; +} + + +Spawn* ZoneServer::ProcessInstanceSpawnLocation(SpawnLocation* spawnlocation, map* instNPCs, map* instGroundSpawns, map* instObjSpawns, map* instWidgetSpawns, map* instSignSpawns, bool respawn) +{ + if(!spawnlocation) + return 0; + + LogWrite(SPAWN__TRACE, 0, "Spawn", "Enter %s", __FUNCTION__); + + Spawn* spawn = 0; + float rand_number = MakeRandomFloat(0, spawnlocation->total_percentage); + + for(int32 i=0;ientities.size();i++) + { + if(spawnlocation->entities[i]->spawn_percentage == 0) + continue; + + int32 spawnTime = 0; + + if(spawnlocation->entities[i]->spawn_percentage >= rand_number) + { + if(spawnlocation->entities[i]->spawn_type == SPAWN_ENTRY_TYPE_NPC && + (spawnTime = database.CheckSpawnRemoveInfo(instNPCs,spawnlocation->entities[i]->spawn_location_id)) > 0) + spawn = AddNPCSpawn(spawnlocation, spawnlocation->entities[i]); + else if(spawnlocation->entities[i]->spawn_type == SPAWN_ENTRY_TYPE_GROUNDSPAWN && + (spawnTime = database.CheckSpawnRemoveInfo(instGroundSpawns,spawnlocation->entities[i]->spawn_location_id)) > 0) + spawn = AddGroundSpawn(spawnlocation, spawnlocation->entities[i]); + else if(spawnlocation->entities[i]->spawn_type == SPAWN_ENTRY_TYPE_OBJECT && + (spawnTime = database.CheckSpawnRemoveInfo(instObjSpawns,spawnlocation->entities[i]->spawn_location_id)) > 0) + spawn = AddObjectSpawn(spawnlocation, spawnlocation->entities[i]); + else if(spawnlocation->entities[i]->spawn_type == SPAWN_ENTRY_TYPE_WIDGET && + (spawnTime = database.CheckSpawnRemoveInfo(instWidgetSpawns,spawnlocation->entities[i]->spawn_location_id)) > 0) + spawn = AddWidgetSpawn(spawnlocation, spawnlocation->entities[i]); + else if(spawnlocation->entities[i]->spawn_type == SPAWN_ENTRY_TYPE_SIGN && + (spawnTime = database.CheckSpawnRemoveInfo(instSignSpawns,spawnlocation->entities[i]->spawn_location_id)) > 0) + spawn = AddSignSpawn(spawnlocation, spawnlocation->entities[i]); + + const char* script = 0; + + for(int x=0;x<3;x++) + { + switch(x) + { + case 0: + script = world.GetSpawnEntryScript(spawnlocation->entities[i]->spawn_entry_id); + break; + case 1: + script = world.GetSpawnLocationScript(spawnlocation->entities[i]->spawn_location_id); + break; + case 2: + script = world.GetSpawnScript(spawnlocation->entities[i]->spawn_id); + break; + } + + if(spawn && script && lua_interface->GetSpawnScript(script) != 0) + { + spawn->SetSpawnScript(string(script)); + break; + } + } + + if(spawn) + { + if (respawn) + CallSpawnScript(spawn, SPAWN_SCRIPT_RESPAWN); + else + CallSpawnScript(spawn, SPAWN_SCRIPT_SPAWN); + + if ( spawnTime > 1 ) + { + spawn->SetRespawnTime(spawnTime); + } + } + break; + } + else + rand_number -= spawnlocation->entities[i]->spawn_percentage; + } + + LogWrite(SPAWN__TRACE, 0, "Spawn", "Exit %s", __FUNCTION__); + + return spawn; +} + +void ZoneServer::ProcessSpawnLocations() +{ + LogWrite(SPAWN__TRACE, 0, "Spawn", "Enter %s", __FUNCTION__); + + map* instNPCs = NULL; + map* instGroundSpawns = NULL; + map* instObjSpawns = NULL; + map* instWidgetSpawns = NULL; + map* instSignSpawns = NULL; + + if ( this->IsInstanceZone() ) + { + LogWrite(SPAWN__DEBUG, 0, "Spawn", "Processing Instance Removed Spawns..."); + instNPCs = database.GetInstanceRemovedSpawns(this->GetInstanceID() , SPAWN_ENTRY_TYPE_NPC ); + instGroundSpawns = database.GetInstanceRemovedSpawns(this->GetInstanceID() , SPAWN_ENTRY_TYPE_GROUNDSPAWN ); + instObjSpawns = database.GetInstanceRemovedSpawns(this->GetInstanceID() , SPAWN_ENTRY_TYPE_OBJECT ); + instWidgetSpawns = database.GetInstanceRemovedSpawns(this->GetInstanceID() , SPAWN_ENTRY_TYPE_WIDGET ); + instSignSpawns = database.GetInstanceRemovedSpawns(this->GetInstanceID() , SPAWN_ENTRY_TYPE_SIGN ); + } + + map processed_spawn_locations; + map::iterator itr; + MSpawnLocationList.readlock(__FUNCTION__, __LINE__); + for (itr = spawn_location_list.begin(); itr != spawn_location_list.end(); itr++) { + LogWrite(SPAWN__TRACE, 0, "Spawn", "while spawn_location_list itr (#%u)", spawn_location_list.size()); + + if(itr->second && processed_spawn_locations.count(itr->second->placement_id) > 0) //if we processed one spawn in a spawn group, we processed them all for that group + continue; + + if(itr->second && spawn_location_groups.count(itr->second->placement_id) > 0) + { + int32 group_id = CalculateSpawnGroup(itr->second); + + if(group_id) + { + LogWrite(SPAWN__TRACE, 0, "Spawn", "is group_id"); + set* associated_groups = GetAssociatedGroups(group_id); + + if(associated_groups) + { + LogWrite(SPAWN__TRACE, 0, "Spawn", "is associated_groups"); + vector* associated_locations = GetAssociatedLocations(associated_groups); + + if(associated_locations) + { + LogWrite(SPAWN__TRACE, 0, "Spawn", "is associated_locations"); + for(int32 i=0;isize();i++) + { + LogWrite(SPAWN__DEBUG, 5, "Spawn", "Loading processed_spawn_locations..."); + processed_spawn_locations[associated_locations->at(i)] = true; + } + + safe_delete(associated_locations); + } + } + } + } + else + { + if ( this->IsInstanceZone() ) + { + LogWrite(SPAWN__DEBUG, 5, "Spawn", "ProcessInstanceSpawnLocation (%u)...", itr->second->placement_id); + ProcessInstanceSpawnLocation(itr->second,instNPCs,instGroundSpawns,instObjSpawns,instWidgetSpawns,instSignSpawns); + } + else + { + LogWrite(SPAWN__DEBUG, 5, "Spawn", "ProcessSpawnLocation (%u)...", itr->second->placement_id); + ProcessSpawnLocation(itr->second); + } + } + } + MSpawnLocationList.releasereadlock(__FUNCTION__, __LINE__); + + safe_delete(instNPCs); + safe_delete(instGroundSpawns); + safe_delete(instObjSpawns); + safe_delete(instWidgetSpawns); + safe_delete(instSignSpawns); + + LogWrite(SPAWN__TRACE, 0, "Spawn", "Exit %s", __FUNCTION__); +} + +void ZoneServer::AddLoot(NPC* npc){ + vector loot_tables = GetSpawnLootList(npc->GetDatabaseID(), GetZoneID(), npc->GetLevel(), race_types_list.GetRaceType(npc->GetModelType())); + if(loot_tables.size() > 0){ + vector* loot_drops = 0; + vector::iterator loot_drop_itr; + LootTable* table = 0; + vector::iterator loot_list_itr; + float chancecoin = 0; + float chancetable = 0; + float chancedrop = 0; + float chancetally = 0; + float droptally = 0; + // the following loop,loops through each table + for(loot_list_itr = loot_tables.begin(); loot_list_itr != loot_tables.end(); loot_list_itr++){ + table = GetLootTable(*loot_list_itr); + if(table && table->maxcoin > 0){ + chancecoin = rand()%100; + if(table->coin_probability >= chancecoin){ + if(table->maxcoin > table->mincoin) + npc->AddLootCoins(table->mincoin + rand()%(table->maxcoin - table->mincoin)); + } + } + int numberchances = 1; + + //if (table->lootdrop_probability == 100){ } + //else + //chancetally += table->lootdrop_probability; + int maxchance = 0; + if (table) { + maxchance = table->maxlootitems; + for (numberchances; numberchances <= maxchance; numberchances++) { + chancetable = static_cast (rand()) / (static_cast (RAND_MAX / 100)); + //LogWrite(PLAYER__DEBUG, 0, "Player", "Table Chance: '%f'", chancetable); + float droppercenttotal = 0; + //-------------------------------------------------------------------------------------------------------------------------------------------------------------- + if (table->lootdrop_probability == 100 || table->lootdrop_probability >= chancetable) { + + //LogWrite(PLAYER__DEBUG, 0, "Player", "Probability:%f Table Chance: '%f'", table->lootdrop_probability, chancetable); + loot_drops = GetLootDrops(*loot_list_itr); + if (loot_drops) { + LootDrop* drop = 0; + int16 count = 0; + + std::shuffle(loot_drops->begin(), loot_drops->end(), std::default_random_engine(Timer::GetCurrentTime2())); + + int16 IC = 0; + for (loot_drop_itr = loot_drops->begin(); loot_drop_itr != loot_drops->end(); loot_drop_itr++) { + drop = *loot_drop_itr; + droppercenttotal += drop->probability; + } + + + int droplistsize = loot_drops->size(); + float chancedroptally = 0; + chancedrop = static_cast (rand()) / (static_cast (RAND_MAX / 100)); + for (loot_drop_itr = loot_drops->begin(); loot_drop_itr != loot_drops->end(); loot_drop_itr++) { + drop = *loot_drop_itr; + + if (npc->HasLootItemID(drop->item_id)) + continue; + + if (droppercenttotal >= 100) + droppercenttotal = 100; + chancedroptally += 100 / droppercenttotal * drop->probability; + //chancedrop = static_cast (rand()) / (static_cast (RAND_MAX / 100)); + //LogWrite(PLAYER__DEBUG, 0, "Player", "Loot drop: '%i' Chance: %f Prob tally: %f min: %f", drop, chancedrop, chancedroptally, chancedroptally - drop->probability); + if ((chancedroptally == 100) || ((chancedroptally >= chancedrop) && (chancedroptally - (100 / droppercenttotal * drop->probability)) <= chancedrop)) { + + //LogWrite(PLAYER__DEBUG, 0, "Player", "Loot drop: '%i' Chance: %f Prob: %f We have a loot drop winner", drop, chancedrop, chancedroptally); + count++; + npc->AddLootItem(drop->item_id, drop->item_charges); + //LogWrite(PLAYER__DEBUG, 0, "Player", "loot Count: '%i'",count); + //LogWrite(MISC__TODO, 1, "TODO", "Auto-Equip new looted items\n\t(%s, function: %s, line #: %i)", __FILE__, __FUNCTION__, __LINE__); + //if(drop->equip_item) + + } + if (table->maxlootitems > 0 && count >= table->maxlootitems) + break; + } + } + } + } + } + } + } +} + +void ZoneServer::DeterminePosition(SpawnLocation* spawnlocation, Spawn* spawn){ + if(!spawn || !spawnlocation) + return; + + int offset = 0; + if(spawnlocation->x_offset > 0){ + //since rand() deals with integers only, we are going to divide by 1000 later so that we can use fractions of integers + offset = (int)((spawnlocation->x_offset*1000)+1); + spawn->SetX(spawnlocation->x + ((float)(rand()%offset - rand()%offset))/1000); + } + else + spawn->SetX(spawnlocation->x); + if(spawnlocation->y_offset > 0){ + //since rand() deals with integers only, we are going to divide by 1000 later so that we can use fractions of integers + offset = (int)((spawnlocation->y_offset*1000)+1); + spawn->SetY(spawnlocation->y + ((float)(rand()%offset - rand()%offset))/1000); + } + else + spawn->SetY(spawnlocation->y); + if(spawnlocation->z_offset > 0){ + //since rand() deals with integers only, we are going to divide by 1000 later so that we can use fractions of integers + offset = (int)((spawnlocation->z_offset*1000)+1); + spawn->SetZ(spawnlocation->z + ((float)(rand()%offset - rand()%offset))/1000); + } + else + spawn->SetZ(spawnlocation->z); + spawn->SetHeading(spawnlocation->heading); + spawn->SetPitch(spawnlocation->pitch); + spawn->SetRoll(spawnlocation->roll); + spawn->SetSpawnOrigX(spawn->GetX()); + spawn->SetSpawnOrigY(spawn->GetY()); + spawn->SetSpawnOrigZ(spawn->GetZ()); + spawn->SetSpawnOrigHeading(spawn->GetHeading()); + spawn->SetSpawnOrigPitch(spawnlocation->pitch); + spawn->SetSpawnOrigRoll(spawnlocation->roll); + spawn->appearance.pos.grid_id = spawnlocation->grid_id; + spawn->SetSpawnLocationPlacementID(spawnlocation->placement_id); +} + +NPC* ZoneServer::AddNPCSpawn(SpawnLocation* spawnlocation, SpawnEntry* spawnentry){ + LogWrite(SPAWN__TRACE, 1, "Spawn", "Enter %s", __FUNCTION__); + NPC* npc = GetNewNPC(spawnentry->spawn_id); + if(npc){ + DeterminePosition(spawnlocation, npc); + npc->SetSpawnLocationID(spawnentry->spawn_location_id); + npc->SetSpawnEntryID(spawnentry->spawn_entry_id); + npc->SetRespawnTime(spawnentry->respawn); + npc->SetExpireTime(spawnentry->expire_time); + if (spawnentry->expire_time > 0) + AddSpawnExpireTimer(npc, spawnentry->expire_time, spawnentry->expire_offset); + AddLoot(npc); + AddSpawn(npc); + } + LogWrite(SPAWN__TRACE, 1, "Spawn", "Exit %s", __FUNCTION__); + return npc; +} + +vector* ZoneServer::GetAssociatedLocations(set* groups){ + vector* ret = 0; + LogWrite(SPAWN__TRACE, 1, "Spawn", "Enter %s", __FUNCTION__); + if(groups){ + int32 group_id = 0; + set::iterator group_itr; + for (group_itr = groups->begin(); group_itr != groups->end(); group_itr++) { + if(!ret) + ret = new vector(); + group_id = *group_itr; + + MSpawnGroupLocations.readlock(__FUNCTION__, __LINE__); + if(spawn_group_locations.count(group_id) > 0){ + map::iterator itr; + for (itr = spawn_group_locations[group_id]->begin(); itr != spawn_group_locations[group_id]->end(); itr++) { + ret->push_back(itr->first); + } + } + MSpawnGroupLocations.releasereadlock(__FUNCTION__, __LINE__); + } + } + LogWrite(SPAWN__TRACE, 1, "Spawn", "Exit %s", __FUNCTION__); + return ret; +} + +set* ZoneServer::GetAssociatedGroups(int32 group_id) { + set* ret = 0; + MSpawnGroupAssociation.readlock(__FUNCTION__, __LINE__); + LogWrite(SPAWN__TRACE, 1, "Spawn", "Enter %s", __FUNCTION__); + if(spawn_group_associations.count(group_id) > 0) + ret = spawn_group_associations[group_id]; + LogWrite(SPAWN__TRACE, 1, "Spawn", "Exit %s", __FUNCTION__); + MSpawnGroupAssociation.releasereadlock(__FUNCTION__, __LINE__); + return ret; +} + +map* ZoneServer::GetSpawnLocationsByGroup(int32 group_id) { + map* ret = 0; + + MSpawnGroupLocations.readlock(__FUNCTION__, __LINE__); + if(spawn_group_locations.count(group_id) > 0) + ret = spawn_group_locations[group_id]; + MSpawnGroupLocations.releasereadlock(__FUNCTION__, __LINE__); + + return ret; +} + +list* ZoneServer::GetSpawnGroupsByLocation(int32 location_id){ + list* ret = 0; + + MSpawnLocationGroups.readlock(__FUNCTION__, __LINE__); + if(spawn_location_groups.count(location_id) > 0) + ret = spawn_location_groups[location_id]; + MSpawnLocationGroups.releasereadlock(__FUNCTION__, __LINE__); + + return ret; +} + +float ZoneServer::GetSpawnGroupChance(int32 group_id){ + float ret = -1; + + MSpawnGroupChances.readlock(__FUNCTION__, __LINE__); + if(spawn_group_chances.count(group_id) > 0) + ret = spawn_group_chances[group_id]; + MSpawnGroupChances.releasereadlock(__FUNCTION__, __LINE__); + + return ret; +} + +void ZoneServer::AddSpawnGroupChance(int32 group_id, float percent){ + MSpawnGroupChances.writelock(__FUNCTION__, __LINE__); + spawn_group_chances[group_id] = percent; + MSpawnGroupChances.releasewritelock(__FUNCTION__, __LINE__); +} + +void ZoneServer::AddSpawnGroupAssociation(int32 group_id1, int32 group_id2) { + MSpawnGroupAssociation.writelock(__FUNCTION__, __LINE__); + //Check if we already have containers for these group ids, if not create them + if (spawn_group_associations.count(group_id1) == 0) + spawn_group_associations[group_id1] = new set; + if (spawn_group_associations.count(group_id2) == 0) + spawn_group_associations[group_id2] = new set; + + //Associate groups 1 and 2 now + set* group_1 = spawn_group_associations.find(group_id1)->second; + set* group_2 = spawn_group_associations.find(group_id2)->second; + group_1->insert(group_id2); + group_2->insert(group_id1); + + //Associate the remaining groups together + set::iterator itr; + for (itr = group_1->begin(); itr != group_1->end(); itr++){ + group_2->insert(*itr); + map*>::iterator assoc_itr = spawn_group_associations.find(*itr); + if (assoc_itr != spawn_group_associations.end()) + assoc_itr->second->insert(group_id2); + else { + set* new_set = new set; + spawn_group_associations[*itr] = new_set; + new_set->insert(group_id2); + } + } + for (itr = group_2->begin(); itr != group_2->end(); itr++){ + group_1->insert(*itr); + map*>::iterator assoc_itr = spawn_group_associations.find(*itr); + if (assoc_itr != spawn_group_associations.end()) + assoc_itr->second->insert(group_id1); + else { + set* new_set = new set; + spawn_group_associations[*itr] = new_set; + new_set->insert(group_id1); + } + } + MSpawnGroupAssociation.releasewritelock(__FUNCTION__, __LINE__); +} + +void ZoneServer::AddSpawnGroupLocation(int32 group_id, int32 location_id, int32 spawn_location_id) { + MSpawnGroupLocations.writelock(__FUNCTION__, __LINE__); + if(spawn_group_locations.count(group_id) == 0) + spawn_group_locations[group_id] = new map(); + (*spawn_group_locations[group_id])[location_id] = spawn_location_id; + MSpawnGroupLocations.releasewritelock(__FUNCTION__, __LINE__); + + MSpawnLocationGroups.writelock(__FUNCTION__, __LINE__); + if(spawn_location_groups.count(location_id) == 0) + spawn_location_groups[location_id] = new list(); + spawn_location_groups[location_id]->push_back(group_id); + MSpawnLocationGroups.releasewritelock(__FUNCTION__, __LINE__); + + MSpawnGroupAssociation.writelock(__FUNCTION__, __LINE__); + if(spawn_group_associations.count(group_id) == 0) + spawn_group_associations[group_id] = new set(); + spawn_group_associations[group_id]->insert(group_id); + MSpawnGroupAssociation.releasewritelock(__FUNCTION__, __LINE__); +} + +void ZoneServer::CallSpawnScript(Spawn* npc, int8 type, Spawn* spawn, const char* message){ + LogWrite(SPAWN__TRACE, 0, "Spawn", "Enter %s", __FUNCTION__); + if(!npc) + return; + + const char* script = npc->GetSpawnScript(); + if(lua_interface && script){ + switch(type){ + case SPAWN_SCRIPT_SPAWN:{ + lua_interface->RunSpawnScript(script, "spawn", npc); + break; + } + case SPAWN_SCRIPT_RESPAWN:{ + lua_interface->RunSpawnScript(script, "respawn", npc); + break; + } + case SPAWN_SCRIPT_ATTACKED:{ + lua_interface->RunSpawnScript(script, "attacked", npc, spawn); + break; + } + case SPAWN_SCRIPT_TARGETED:{ + lua_interface->RunSpawnScript(script, "targeted", npc, spawn); + break; + } + case SPAWN_SCRIPT_HAILED:{ + lua_interface->RunSpawnScript(script, "hailed", npc, spawn); + break; + } + case SPAWN_SCRIPT_HAILED_BUSY:{ + lua_interface->RunSpawnScript(script, "hailed_busy", npc, spawn); + break; + } + case SPAWN_SCRIPT_DEATH:{ + lua_interface->RunSpawnScript(script, "death", npc, spawn); + break; + } + case SPAWN_SCRIPT_KILLED:{ + lua_interface->RunSpawnScript(script, "killed", npc, spawn); + break; + } + case SPAWN_SCRIPT_AGGRO:{ + lua_interface->RunSpawnScript(script, "aggro", npc, spawn); + break; + } + case SPAWN_SCRIPT_HEALTHCHANGED:{ + lua_interface->RunSpawnScript(script, "healthchanged", npc, spawn); + break; + } + case SPAWN_SCRIPT_RANDOMCHAT:{ + lua_interface->RunSpawnScript(script, "randomchat", npc, 0, message); + break; + } + case SPAWN_SCRIPT_CUSTOM: + case SPAWN_SCRIPT_TIMER: + case SPAWN_SCRIPT_CONVERSATION:{ + lua_interface->RunSpawnScript(script, message, npc, spawn); + break; + } + case SPAWN_SCRIPT_CASTED_ON: { + lua_interface->RunSpawnScript(script, "casted_on", npc, spawn, message); + break; + } + case SPAWN_SCRIPT_AUTO_ATTACK_TICK: { + lua_interface->RunSpawnScript(script, "auto_attack_tick", npc, spawn); + break; + } + case SPAWN_SCRIPT_COMBAT_RESET: { + lua_interface->RunSpawnScript(script, "CombatReset", npc); + break; + } + case SPAWN_SCRIPT_GROUP_DEAD: { + lua_interface->RunSpawnScript(script, "group_dead", npc, spawn); + break; + } + case SPAWN_SCRIPT_HEAR_SAY: { + lua_interface->RunSpawnScript(script, "hear_say", npc, spawn, message); + break; + } + } + } + LogWrite(SPAWN__TRACE, 0, "Spawn", "Exit %s", __FUNCTION__); +} + +void ZoneServer::DeleteTransporters() { + MTransportLocations.writelock(__FUNCTION__, __LINE__); + transporter_locations.clear(); //world takes care of actually deleting the data + MTransportLocations.releasewritelock(__FUNCTION__, __LINE__); +} + +void ZoneServer::ReloadTransporters(){ + MutexList* locations = GetLocationTransporters(GetZoneID()); + if(locations){ + MutexList::iterator itr = locations->begin(); + while(itr.Next()) + AddTransporter(itr->value); + } +} + +void ZoneServer::CheckTransporters(Client* client) { + MTransportLocations.readlock(__FUNCTION__, __LINE__); + if(transporter_locations.size() > 0){ + LocationTransportDestination* loc = 0; + list::iterator itr; + for (itr = transporter_locations.begin(); itr != transporter_locations.end(); itr++) { + loc = *itr; + if(client->GetPlayer()->GetDistance(loc->trigger_x, loc->trigger_y, loc->trigger_z) <= loc->trigger_radius){ + if(loc->destination_zone_id == 0 || loc->destination_zone_id == GetZoneID()){ + EQ2Packet* packet = client->GetPlayer()->Move(loc->destination_x, loc->destination_y, loc->destination_z, client->GetVersion()); + if(packet) + client->QueuePacket(packet); + } + else{ + ZoneServer* new_zone = zone_list.Get(loc->destination_zone_id); + if(new_zone){ + client->GetPlayer()->SetX(loc->destination_x); + client->GetPlayer()->SetY(loc->destination_y); + client->GetPlayer()->SetZ(loc->destination_z); + client->GetPlayer()->SetHeading(loc->destination_heading); + client->Zone(new_zone, false); + } + } + break; + } + } + } + MTransportLocations.releasereadlock(__FUNCTION__, __LINE__); +} + +void ZoneServer::AddTransporter(LocationTransportDestination* loc) { + MTransportLocations.writelock(__FUNCTION__, __LINE__); + transporter_locations.push_back(loc); + MTransportLocations.releasewritelock(__FUNCTION__, __LINE__); +} + +Sign* ZoneServer::AddSignSpawn(SpawnLocation* spawnlocation, SpawnEntry* spawnentry){ + LogWrite(SPAWN__TRACE, 0, "Spawn", "Enter %s", __FUNCTION__); + Sign* sign = GetNewSign(spawnentry->spawn_id); + if(sign){ + DeterminePosition(spawnlocation, sign); + sign->SetSpawnLocationID(spawnentry->spawn_location_id); + sign->SetSpawnEntryID(spawnentry->spawn_entry_id); + sign->SetRespawnTime(spawnentry->respawn); + sign->SetExpireTime(spawnentry->expire_time); + if (spawnentry->expire_time > 0) + AddSpawnExpireTimer(sign, spawnentry->expire_time, spawnentry->expire_offset); + + + AddSpawn(sign); + } + LogWrite(SPAWN__TRACE, 0, "Spawn", "Exit %s", __FUNCTION__); + return sign; +} + +Widget* ZoneServer::AddWidgetSpawn(SpawnLocation* spawnlocation, SpawnEntry* spawnentry){ + LogWrite(SPAWN__TRACE, 0, "Spawn", "Enter %s", __FUNCTION__); + Widget* widget = GetNewWidget(spawnentry->spawn_id); + if(widget){ + DeterminePosition(spawnlocation, widget); + widget->SetSpawnLocationID(spawnentry->spawn_location_id); + widget->SetSpawnEntryID(spawnentry->spawn_entry_id); + if(!widget->GetIncludeLocation()){ + widget->SetX(widget->GetWidgetX()); + if(widget->GetCloseY() != 0) + widget->SetY(widget->GetCloseY()); + widget->SetZ(widget->GetWidgetZ()); + } + widget->SetRespawnTime(spawnentry->respawn); + widget->SetExpireTime(spawnentry->expire_time); + widget->SetSpawnOrigHeading(widget->GetHeading()); + if (spawnentry->expire_time > 0) + AddSpawnExpireTimer(widget, spawnentry->expire_time, spawnentry->expire_offset); + AddSpawn(widget); + } + LogWrite(SPAWN__TRACE, 0, "Spawn", "Exit %s", __FUNCTION__); + return widget; +} + +Object* ZoneServer::AddObjectSpawn(SpawnLocation* spawnlocation, SpawnEntry* spawnentry){ + LogWrite(SPAWN__TRACE, 0, "Spawn", "Enter %s", __FUNCTION__); + Object* object = GetNewObject(spawnentry->spawn_id); + if(object){ + DeterminePosition(spawnlocation, object); + object->SetSpawnLocationID(spawnentry->spawn_location_id); + object->SetSpawnEntryID(spawnentry->spawn_entry_id); + object->SetRespawnTime(spawnentry->respawn); + object->SetExpireTime(spawnentry->expire_time); + if (spawnentry->expire_time > 0) + AddSpawnExpireTimer(object, spawnentry->expire_time, spawnentry->expire_offset); + AddSpawn(object); + } + LogWrite(SPAWN__TRACE, 0, "Spawn", "Exit %s", __FUNCTION__); + return object; +} + +GroundSpawn* ZoneServer::AddGroundSpawn(SpawnLocation* spawnlocation, SpawnEntry* spawnentry){ + LogWrite(SPAWN__TRACE, 0, "Spawn", "Enter %s", __FUNCTION__); + GroundSpawn* spawn = GetNewGroundSpawn(spawnentry->spawn_id); + if(spawn){ + DeterminePosition(spawnlocation, spawn); + spawn->SetSpawnLocationID(spawnentry->spawn_location_id); + spawn->SetSpawnEntryID(spawnentry->spawn_entry_id); + spawn->SetRespawnTime(spawnentry->respawn); + spawn->SetExpireTime(spawnentry->expire_time); + if (spawnentry->expire_time > 0) + AddSpawnExpireTimer(spawn, spawnentry->expire_time, spawnentry->expire_offset); + AddSpawn(spawn); + } + LogWrite(SPAWN__TRACE, 0, "Spawn", "Exit %s", __FUNCTION__); + return spawn; +} + +void ZoneServer::AddSpawn(Spawn* spawn) { + spawn->SetZone(this); + spawn->position_changed = false; + spawn->info_changed = false; + spawn->vis_changed = false; + spawn->changed = false; + if(!spawn->IsPlayer() || (spawn->IsPlayer() && !((Player*)spawn)->IsReturningFromLD())) { + // Write locking the spawn list here will cause deadlocks, so instead add it to a temp list that the + // main spawn thread will put into the spawn_list when ever it has a chance. + MPendingSpawnListAdd.writelock(__FUNCTION__, __LINE__); + pending_spawn_list_add.push_back(spawn); + MPendingSpawnListAdd.releasewritelock(__FUNCTION__, __LINE__); + } + else + ((Player*)spawn)->SetReturningFromLD(false); + spawn_range.Trigger(); + spawn_check_add.Trigger(); + if(spawn->IsNPC()) + AddEnemyList((NPC*)spawn); + if(spawn->IsPlayer() && ((Player*)spawn)->GetGroupMemberInfo()) + world.GetGroupManager()->SendGroupUpdate(((Player*)spawn)->GetGroupMemberInfo()->group_id, GetClientBySpawn(spawn)); + if (spawn->IsPlayer()) { + ((Player*)spawn)->GetInfoStruct()->rain = rain; + ((Player*)spawn)->SetCharSheetChanged(true); + } + + if (Grid != nullptr) { + Grid->AddSpawn(spawn); + } + + spawn->SetAddedToWorldTimestamp(Timer::GetCurrentTime2()); +} + +void ZoneServer::AddClient(Client* client){ + MClientList.writelock(__FUNCTION__, __LINE__); + clients.push_back(client); + MClientList.releasewritelock(__FUNCTION__, __LINE__); + + connected_clients.Add(client); +} + +void ZoneServer::RemoveClient(Client* client) +{ + Guild *guild; + + if(client) + { + LogWrite(ZONE__DEBUG, 0, "Zone", "Sending login equipment appearance updates..."); + loginserver.SendImmediateEquipmentUpdatesForChar(client->GetPlayer()->GetCharacterID()); + + if (!client->IsZoning()) + { + if ((guild = client->GetPlayer()->GetGuild()) != NULL) + guild->GuildMemberLogoff(client->GetPlayer()); + + chat.LeaveAllChannels(client); + } + + int32 LD_Timer = rule_manager.GetGlobalRule(R_World, LinkDeadTimer)->GetInt32(); + int32 DisconnectClientTimer = rule_manager.GetGlobalRule(R_World, RemoveDisconnectedClientsTimer)->GetInt32(); + + if(!zoneShuttingDown && !client->IsZoning()) + { + GroupMemberInfo* gmi = client->GetPlayer()->GetGroupMemberInfo(); + if (gmi) { + int32 size = world.GetGroupManager()->GetGroupSize(gmi->group_id); + if (size > 1) { + bool send_left_message = size > 2; + world.GetGroupManager()->RemoveGroupMember(gmi->group_id, client->GetPlayer()); + if (send_left_message) + world.GetGroupManager()->GroupMessage(gmi->group_id, "%s has left the group.", client->GetPlayer()->GetName()); + } + } + if( (client->GetPlayer()->GetActivityStatus() & ACTIVITY_STATUS_LINKDEAD) > 0) + { + LogWrite(ZONE__DEBUG, 0, "Zone", "Removing client '%s' (%u) due to LD/Exit...", client->GetPlayer()->GetName(), client->GetPlayer()->GetCharacterID()); + //AddDelayedSpawnRemove(client->GetPlayer(), LD_Timer); + //connected_clients.Remove(client, true, LD_Timer + DisconnectClientTimer); + } + else + { + LogWrite(ZONE__DEBUG, 0, "Zone", "Removing client '%s' (%u) due to Camp/Quit...", client->GetPlayer()->GetName(), client->GetPlayer()->GetCharacterID()); + } + + client->GetPlayer()->DismissPet((NPC*)client->GetPlayer()->GetPet()); + client->GetPlayer()->DismissPet((NPC*)client->GetPlayer()->GetCharmedPet()); + client->GetPlayer()->DismissPet((NPC*)client->GetPlayer()->GetDeityPet()); + client->GetPlayer()->DismissPet((NPC*)client->GetPlayer()->GetCosmeticPet()); + + RemoveSpawn(client->GetPlayer(), false); + connected_clients.Remove(client, true, DisconnectClientTimer); + //} + } + else + { + LogWrite(ZONE__DEBUG, 0, "Zone", "Removing client '%s' (%u) due to some client zoning...", client->GetPlayer()->GetName(), client->GetPlayer()->GetCharacterID()); + connected_clients.Remove(client, true, DisconnectClientTimer); // changed from a hardcoded 30000 (30 sec) to the DisconnectClientTimer rule + } + + map::iterator itr; + for (itr = client->GetPlayer()->SpawnedBots.begin(); itr != client->GetPlayer()->SpawnedBots.end(); itr++) { + Spawn* spawn = GetSpawnByID(itr->second); + if (spawn && spawn->IsBot()) + ((Bot*)spawn)->Camp(); + } + + LogWrite(ZONE__DEBUG, 0, "Zone", "Calling clients.Remove(client)..."); + MClientList.writelock(__FUNCTION__, __LINE__); + clients.erase(find(clients.begin(), clients.end(), client)); + MClientList.releasewritelock(__FUNCTION__, __LINE__); + + LogWrite(ZONE__INFO, 0, "Zone", "Scheduling client '%s' for removal.", client->GetPlayer()->GetName()); + LogWrite(MISC__TODO, 1, "TODO", "Put Player Online Status updates in a timer eventually\n\t(%s, function: %s, line #: %i)", __FILE__, __FUNCTION__, __LINE__); + database.ToggleCharacterOnline(client, 0); + } +} + +void ZoneServer::RemoveClientImmediately(Client* client) { + Guild *guild; + + if(client) + { + loginserver.SendImmediateEquipmentUpdatesForChar(client->GetPlayer()->GetCharacterID()); + if(connected_clients.count(client) > 0) + { + if (!client->IsZoning() && (guild = client->GetPlayer()->GetGuild())) + guild->GuildMemberLogoff(client->GetPlayer()); + + MClientList.writelock(__FUNCTION__, __LINE__); + clients.erase(find(clients.begin(), clients.end(), client)); + MClientList.releasewritelock(__FUNCTION__, __LINE__); + //clients.Remove(client); + LogWrite(ZONE__INFO, 0, "Zone", "Removing connection for client '%s'.", client->GetPlayer()->GetName()); + connected_clients.Remove(client, true); + } + else + { + MClientList.writelock(__FUNCTION__, __LINE__); + clients.erase(find(clients.begin(), clients.end(), client)); + MClientList.releasewritelock(__FUNCTION__, __LINE__); + //clients.Remove(client, true); + } + + LogWrite(MISC__TODO, 1, "TODO", "Put Player Online Status updates in a timer eventually\n\t(%s, function: %s, line #: %i)", __FILE__, __FUNCTION__, __LINE__); + database.ToggleCharacterOnline(client, 0); + } +} + +void ZoneServer::ClientProcess() +{ + if(connected_clients.size(true) == 0) + { + if(!IsCityZone() && !AlwaysLoaded() && !shutdownTimer.Enabled()) + { + LogWrite(ZONE__INFO, 0, "Zone", "Starting zone shutdown timers..."); + shutdownTimer.Start(); + } + return; + } + + shutdownTimer.Disable(); + Client* client = 0; + MutexList::iterator iterator = connected_clients.begin(); + + while(iterator.Next()) + { + client = iterator->value; +#ifndef NO_CATCH + try + { +#endif + if(zoneShuttingDown || !client->Process(true)) + { + if(!zoneShuttingDown && !client->IsZoning()) + { + LogWrite(ZONE__DEBUG, 0, "Zone", "Client is disconnecting in %s (camping = %s)", __FUNCTION__, (client->GetPlayer()->GetActivityStatus() & ACTIVITY_STATUS_CAMPING) == 0 ? "false" : "true"); + + if( (client->GetPlayer()->GetActivityStatus() & ACTIVITY_STATUS_CAMPING) == 0 ) + { + //only set LD flag if we're disconnecting but not camping/quitting + client->GetPlayer()->SetActivityStatus(client->GetPlayer()->GetActivityStatus() + ACTIVITY_STATUS_LINKDEAD); + if(client->GetPlayer()->GetGroupMemberInfo()) + { + LogWrite(ZONE__DEBUG, 0, "Zone", "Telling client's group they are disconnecting"); + world.GetGroupManager()->GroupMessage(client->GetPlayer()->GetGroupMemberInfo()->group_id, "%s has gone Linkdead.", client->GetPlayer()->GetName()); + } + } + + } + client_spawn_map.Put(client->GetPlayer(), 0); + client->Disconnect(); + RemoveClient(client); + } +#ifndef NO_CATCH + } + catch(...) + { + LogWrite(ZONE__ERROR, 0, "Zone", "Exception caught when in ZoneServer::ClientProcess() for zone '%s'!\n%s, %i", GetZoneName(), __FUNCTION__, __LINE__); + try{ + if(!client->IsZoning()) + { + if( (client->GetPlayer()->GetActivityStatus() & ACTIVITY_STATUS_CAMPING) == 0 ) + { + client->GetPlayer()->SetActivityStatus(client->GetPlayer()->GetActivityStatus() + ACTIVITY_STATUS_LINKDEAD); + if(client->GetPlayer()->GetGroupMemberInfo()) + world.GetGroupManager()->GroupMessage(client->GetPlayer()->GetGroupMemberInfo()->group_id, "%s has gone Linkdead.", client->GetPlayer()->GetName()); + } + } + client_spawn_map.Put(client->GetPlayer(), 0); + client->Disconnect(); + RemoveClient(client); + } + catch(...){ + LogWrite(ZONE__ERROR, 0, "Zone", "Exception caught when in ZoneServer::ClientProcess(), second try\n%s, %i", __FUNCTION__, __LINE__); + } + } +#endif + } +} + +void ZoneServer::SimpleMessage(int8 type, const char* message, Spawn* from, float distance){ + Client* client = 0; + vector::iterator client_itr; + + MClientList.readlock(__FUNCTION__, __LINE__); + for (client_itr = clients.begin(); client_itr != clients.end(); client_itr++) { + client = *client_itr; + if(from && client && client->IsConnected() && from->GetDistance(client->GetPlayer()) <= distance){ + client->SimpleMessage(type, message); + } + } + MClientList.releasereadlock(__FUNCTION__, __LINE__); +} + +void ZoneServer::HandleChatMessage(Client* client, Spawn* from, const char* to, int16 channel, const char* message, float distance, const char* channel_name, bool show_bubble, int32 language){ + if((!distance || from->GetDistance(client->GetPlayer()) <= distance) && (!from || !client->GetPlayer()->IsIgnored(from->GetName()))){ + PacketStruct* packet = configReader.getStruct("WS_HearChat", client->GetVersion()); + if(packet){ + if(from) + packet->setMediumStringByName("from", from->GetName()); + if(client->GetPlayer() != from) + packet->setMediumStringByName("to", client->GetPlayer()->GetName()); + packet->setDataByName("channel", channel); + if(from && ((from == client->GetPlayer()) || (client->GetPlayer()->WasSentSpawn(from->GetID()) && !client->GetPlayer()->WasSpawnRemoved(from)))) + packet->setDataByName("from_spawn_id", client->GetPlayer()->GetIDWithPlayerSpawn(from)); + else + packet->setDataByName("from_spawn_id", 0xFFFFFFFF); + packet->setDataByName("to_spawn_id", 0xFFFFFFFF); + packet->setMediumStringByName("message", message); + packet->setDataByName("language", language); + + if (language > 0 && !client->GetPlayer()->HasLanguage(language)) + packet->setDataByName("understood", 0); + else + packet->setDataByName("understood", 1); + + show_bubble == true ? packet->setDataByName("show_bubble", 1) : packet->setDataByName("show_bubble", 0); + if(channel_name) + packet->setMediumStringByName("channel_name", channel_name); + client->QueuePacket(packet->serialize()); + safe_delete(packet); + } + } +} + +void ZoneServer::HandleChatMessage(Spawn* from, const char* to, int16 channel, const char* message, float distance, const char* channel_name, bool show_bubble, int32 language){ + vector::iterator client_itr; + Client* client = 0; + + MClientList.readlock(__FUNCTION__, __LINE__); + for (client_itr = clients.begin(); client_itr != clients.end(); client_itr++) { + client = *client_itr; + if(client && client->IsConnected()) + HandleChatMessage(client, from, to, channel, message, distance, channel_name, show_bubble, language); + } + MClientList.releasereadlock(__FUNCTION__, __LINE__); +} + +void ZoneServer::HandleBroadcast(const char* message) { + vector::iterator client_itr; + Client* client = 0; + + MClientList.readlock(__FUNCTION__, __LINE__); + for (client_itr = clients.begin(); client_itr != clients.end(); client_itr++) { + client = *client_itr; + if(client && client->IsConnected()) + client->SimpleMessage(CHANNEL_BROADCAST, message); + } + MClientList.releasereadlock(__FUNCTION__, __LINE__); +} + +void ZoneServer::HandleAnnouncement(const char* message) { + vector::iterator client_itr; + Client* client = 0; + int32 words = ::CountWordsInString(message); + if (words < 5) + words = 5; + + MClientList.readlock(__FUNCTION__, __LINE__); + for (client_itr = clients.begin(); client_itr != clients.end(); client_itr++) { + client = *client_itr; + if(client && client->IsConnected()) { + client->SimpleMessage(CHANNEL_BROADCAST, message); + client->SendPopupMessage(10, message, "ui_harvest_normal", words, 0xFF, 0xFF, 0x00); + } + } + MClientList.releasereadlock(__FUNCTION__, __LINE__); +} + +void ZoneServer::SendTimeUpdate(Client* client){ + if(client){ + PacketStruct* packet = world.GetWorldTime(client->GetVersion()); + if(packet){ + client->QueuePacket(packet->serialize()); + safe_delete(packet); + } + } +} + +void ZoneServer::SendTimeUpdateToAllClients(){ + Client* client = 0; + vector::iterator client_itr; + + MClientList.readlock(__FUNCTION__, __LINE__); + for (client_itr = clients.begin(); client_itr != clients.end(); client_itr++) { + client = *client_itr; + if(client && client->IsConnected()) + SendTimeUpdate(client); + } + MClientList.releasereadlock(__FUNCTION__, __LINE__); +} + +void ZoneServer::UpdateVitality(float amount){ + Client* client = 0; + vector::iterator client_itr; + + MClientList.readlock(__FUNCTION__, __LINE__); + for (client_itr = clients.begin(); client_itr != clients.end(); client_itr++) { + client = *client_itr; + if(client && client->GetPlayer()->GetInfoStruct()->xp_vitality < 100){ + if((client->GetPlayer()->GetInfoStruct()->xp_vitality + amount) > 100) + client->GetPlayer()->GetInfoStruct()->xp_vitality = 100; + else + client->GetPlayer()->GetInfoStruct()->xp_vitality += amount; + client->GetPlayer()->SetCharSheetChanged(true); + } + } + MClientList.releasereadlock(__FUNCTION__, __LINE__); +} + +void ZoneServer::SendSpawn(Spawn* spawn, Client* client){ + EQ2Packet* outapp = spawn->serialize(client->GetPlayer(), client->GetVersion()); + + if(outapp) + client->QueuePacket(outapp); + /* + vis flags: + 2 = show icon + 4 = targetable + 16 = show name + 32 = show level/border + activity_status: + 4 - linkdead + 8 - camping + 16 - LFG + 32 - LFW + 2048 - mentoring + 4096 - displays shield + 8192 - immunity gained + 16384 - immunity remaining + attackable_status + 1 - no_hp_bar + 4 - not attackable + npc_con + -4 = scowls + -3 = threatening + -2 = dubiously + -1 = apprehensively + 0 = indifferent + 1 = amiably + 2 = kindly + 3 = warmly + 4 = ally + quest_flag + 1 = new quest + 2 = update and new quest + 3 = update + */ +} + +Client* ZoneServer::GetClientBySpawn(Spawn* spawn){ + return client_spawn_map.Get(spawn); +} + +Client* ZoneServer::GetClientByName(char* name) { + Client* ret = 0; + vector::iterator itr; + + MClientList.readlock(__FUNCTION__, __LINE__); + for (itr = clients.begin(); itr != clients.end(); itr++) { + if ((*itr)->GetPlayer()) { + if (strncmp((*itr)->GetPlayer()->GetName(), name, strlen(name)) == 0) { + ret = *itr; + break; + } + } + } + MClientList.releasereadlock(__FUNCTION__, __LINE__); + return ret; +} + +void ZoneServer::AddMovementNPC(Spawn* spawn){ + if (spawn) + movement_spawns.Put(spawn->GetID(), 1); +} + +void ZoneServer::RemoveMovementNPC(Spawn* spawn){ + if (spawn) + remove_movement_spawns.Add(spawn->GetID()); +} + +void ZoneServer::ProcessMovement(){ + Spawn* spawn = 0; + MutexMap::iterator itr = movement_spawns.begin(); + while(itr.Next()){ + spawn = GetSpawnByID(itr->first); + if(spawn) { + if(spawn->IsNPC() && !spawn->MovementInterrupted()) + spawn->ProcessMovement(); + } + else + movement_spawns.erase(itr->first); + } + MutexList::iterator remove_itr = remove_movement_spawns.begin(); + while(remove_itr.Next()){ + movement_spawns.erase(remove_itr->value); + } + remove_movement_spawns.clear(); +} + +void ZoneServer::PlayFlavor(Client* client, Spawn* spawn, const char* mp3, const char* text, const char* emote, int32 key1, int32 key2, int8 language){ + if(!client || !spawn) + return; + + PacketStruct* packet = configReader.getStruct("WS_PlayFlavor", client->GetVersion()); + if(packet){ + packet->setDataByName("spawn_id", client->GetPlayer()->GetIDWithPlayerSpawn(spawn)); + packet->setDataByName("unknown1", 0xFFFFFFFF); + packet->setDataByName("unknown5", 1, 1); + packet->setDataByName("unknown5", 1, 6); + if(mp3){ + packet->setMediumStringByName("mp3", mp3); + packet->setDataByName("key", key1); + packet->setDataByName("key", key2, 1); + } + packet->setMediumStringByName("name", spawn->GetName()); + if(text) + packet->setMediumStringByName("text", text); + if(emote) + packet->setMediumStringByName("emote", emote); + if (language != 0) + packet->setDataByName("language", language); + + //We should probably add Common = language id 0 or 0xFF so admins can customize more.. + if (language == 0 || client->GetPlayer()->HasLanguage(language)) + packet->setDataByName("understood", 1); + + EQ2Packet* app = packet->serialize(); + //DumpPacket(app); + client->QueuePacket(app); + safe_delete(packet); + } +} + +void ZoneServer::PlayVoice(Client* client, Spawn* spawn, const char* mp3, int32 key1, int32 key2){ + if(!client || !spawn) + return; + + PacketStruct* packet = configReader.getStruct("WS_PlayVoice", client->GetVersion()); + if(packet){ + packet->setDataByName("spawn_id", client->GetPlayer()->GetIDWithPlayerSpawn(spawn)); + packet->setMediumStringByName("mp3", mp3); + packet->setDataByName("key", key1); + packet->setDataByName("key", key2, 1); + client->QueuePacket(packet->serialize()); + safe_delete(packet); + } +} + +void ZoneServer::PlayFlavor(Spawn* spawn, const char* mp3, const char* text, const char* emote, int32 key1, int32 key2, int8 language){ + if(!spawn) + return; + + Client* client = 0; + vector::iterator client_itr; + + MClientList.readlock(__FUNCTION__, __LINE__); + for (client_itr = clients.begin(); client_itr != clients.end(); client_itr++) { + client = *client_itr; + if(!client || !client->IsConnected() || !client->GetPlayer()->WasSentSpawn(spawn->GetID()) || client->GetPlayer()->WasSpawnRemoved(spawn) || client->GetPlayer()->GetDistance(spawn) > 30) + continue; + PlayFlavor(client, spawn, mp3, text, emote, key1, key2, language); + } + MClientList.releasereadlock(__FUNCTION__, __LINE__); +} + +void ZoneServer::PlayVoice(Spawn* spawn, const char* mp3, int32 key1, int32 key2){ + if(!spawn || !mp3) + return; + + Client* client = 0; + vector::iterator client_itr; + + MClientList.readlock(__FUNCTION__, __LINE__); + for (client_itr = clients.begin(); client_itr != clients.end(); client_itr++) { + client = *client_itr; + if(!client || !client->IsConnected() || !client->GetPlayer()->WasSentSpawn(spawn->GetID()) || client->GetPlayer()->WasSpawnRemoved(spawn)) + continue; + PlayVoice(client, spawn, mp3, key1, key2); + } + MClientList.releasereadlock(__FUNCTION__, __LINE__); +} + +void ZoneServer::PlaySoundFile(Client* client, const char* name, float origin_x, float origin_y, float origin_z){ + if(!name) + return; + + PacketStruct* packet = 0; + if(client){ + packet = configReader.getStruct("WS_Play3DSound", client->GetVersion()); + if(packet){ + packet->setMediumStringByName("name", name); + packet->setDataByName("x", origin_x); + packet->setDataByName("y", origin_y); + packet->setDataByName("z", origin_z); + packet->setDataByName("unknown1", 1); + packet->setDataByName("unknown2", 2.5); + packet->setDataByName("unknown3", 15); + client->QueuePacket(packet->serialize()); + safe_delete(packet); + } + } + else{ + EQ2Packet* outapp = 0; + int16 packet_version = 0; + vector::iterator client_itr; + + MClientList.readlock(__FUNCTION__, __LINE__); + for (client_itr = clients.begin(); client_itr != clients.end(); client_itr++) { + client = *client_itr; + if(client && (!packet || packet_version != client->GetVersion())){ + safe_delete(packet); + safe_delete(outapp); + packet_version = client->GetVersion(); + packet = configReader.getStruct("WS_Play3DSound", packet_version); + if(packet){ + packet->setMediumStringByName("name", name); + packet->setDataByName("x", origin_x); + packet->setDataByName("y", origin_y); + packet->setDataByName("z", origin_z); + packet->setDataByName("unknown1", 1); + packet->setDataByName("unknown2", 2.5); + packet->setDataByName("unknown3", 15); + outapp = packet->serialize(); + } + } + if(outapp && client && client->IsConnected()) + client->QueuePacket(outapp->Copy()); + } + MClientList.releasereadlock(__FUNCTION__, __LINE__); + safe_delete(packet); + safe_delete(outapp); + } +} + +void ZoneServer::AddHeadingTimer(Spawn* spawn){ + heading_timers.Put(spawn, Timer::GetCurrentTime2() + 30000); +} + +void ZoneServer::RemoveHeadingTimer(Spawn* spawn){ + heading_timers.erase(spawn); +} + +void ZoneServer::CheckHeadingTimers(){ + if(heading_timers.size() > 0){ + MutexMap::iterator itr = heading_timers.begin(); + Spawn* spawn = 0; + int32 current_time = Timer::GetCurrentTime2(); + while(itr.Next()){ + if(current_time >= itr->second){ + spawn = itr->first; + spawn->SetHeading(spawn->GetSpawnOrigHeading()); + spawn->SetTempActionState(-1); + heading_timers.erase(itr->first); + } + } + } +} + +bool ZoneServer::HasWidgetTimer(Spawn* widget){ + bool ret = false; + if (widget) { + int32 id = widget->GetID(); + map::iterator itr; + MWidgetTimers.readlock(__FUNCTION__, __LINE__); + for (itr = widget_timers.begin(); itr != widget_timers.end(); itr++) { + if(itr->first == id){ + ret = true; + break; + } + } + MWidgetTimers.releasereadlock(__FUNCTION__, __LINE__); + } + return ret; +} + +void ZoneServer::CheckWidgetTimers(){ + vector remove_list; + map::iterator itr; + + MWidgetTimers.readlock(__FUNCTION__, __LINE__); + for (itr = widget_timers.begin(); itr != widget_timers.end(); itr++) { + if(Timer::GetCurrentTime2() >= itr->second){ + /*Spawn* widget = GetSpawnByID(itr->first); + if (widget && widget->IsWidget()) + ((Widget*)widget)->HandleTimerUpdate();*/ + + remove_list.push_back(itr->first); + } + } + MWidgetTimers.releasereadlock(__FUNCTION__, __LINE__); + + for (int32 i = 0; i < remove_list.size(); i++) { + Spawn* widget = GetSpawnByID(remove_list[i]); + if (widget && widget->IsWidget()) + ((Widget*)widget)->HandleTimerUpdate(); + } + + MWidgetTimers.writelock(__FUNCTION__, __LINE__); + for(int32 i=0;iIsWidget()) { + MWidgetTimers.writelock(__FUNCTION__, __LINE__); + widget_timers[widget->GetID()] = ((int32)(time * 1000)) + Timer::GetCurrentTime2(); + MWidgetTimers.releasewritelock(__FUNCTION__, __LINE__); + } +} + +Spawn* ZoneServer::GetSpawnGroup(int32 id){ + Spawn* ret = 0; + Spawn* spawn = 0; + map::iterator itr; + MSpawnList.readlock(__FUNCTION__, __LINE__); + for (itr = spawn_list.begin(); itr != spawn_list.end(); itr++) { + spawn = itr->second; + if(spawn){ + if(spawn->GetSpawnGroupID() == id){ + ret = spawn; + break; + } + } + } + MSpawnList.releasereadlock(__FUNCTION__, __LINE__); + return ret; +} + +Spawn* ZoneServer::GetSpawnByLocationID(int32 location_id) { + Spawn* ret = 0; + Spawn* current_spawn = 0; + map::iterator itr; + MSpawnList.readlock(__FUNCTION__, __LINE__); + for (itr = spawn_list.begin(); itr != spawn_list.end(); itr++) { + current_spawn = itr->second; + if (current_spawn && current_spawn->GetSpawnLocationID() == location_id) { + ret = current_spawn; + break; + } + } + MSpawnList.releasereadlock(__FUNCTION__, __LINE__); + return ret; +} + +Spawn* ZoneServer::GetSpawnByDatabaseID(int32 id){ + Spawn* ret = 0; + if(quick_database_id_lookup.count(id) > 0) + ret = GetSpawnByID(quick_database_id_lookup.Get(id)); + else{ + Spawn* spawn = 0; + map::iterator itr; + MSpawnList.readlock(__FUNCTION__, __LINE__); + for (itr = spawn_list.begin(); itr != spawn_list.end(); itr++){ + spawn = itr->second; + if(spawn){ + if(spawn->GetDatabaseID() == id){ + quick_database_id_lookup.Put(id, spawn->GetID()); + ret = spawn; + break; + } + } + } + MSpawnList.releasereadlock(__FUNCTION__, __LINE__); + } + return ret; +} + +Spawn* ZoneServer::GetSpawnByID(int32 id) { + Spawn* ret = 0; + MSpawnList.readlock(__FUNCTION__, __LINE__); + if (spawn_list.count(id) > 0) + ret = spawn_list[id]; + MSpawnList.releasereadlock(__FUNCTION__, __LINE__); + return ret; +} + +bool ZoneServer::SendRemoveSpawn(Client* client, Spawn* spawn, PacketStruct* packet, bool delete_spawn) +{ + if(!client || !spawn) + return false; + + int16 index = client->GetPlayer()->GetIndexForSpawn(spawn); + int32 cur_id = client->GetPlayer()->GetIDWithPlayerSpawn(spawn); + if(packet && index > 0 && client->GetPlayer()->WasSpawnRemoved(spawn) == false) + { + LogWrite(ZONE__DEBUG, 7, "Zone", "Processing SendRemoveSpawn for spawn index %u...", index); + packet->setDataByName("spawn_index", index); + client->GetPlayer()->GetPlayerSpawnMap()->erase(index); + client->GetPlayer()->GetPlayerSpawnIndexMap()->erase(spawn); + client->GetPlayer()->player_spawn_id_map.erase(cur_id); + client->GetPlayer()->player_spawn_reverse_id_map.erase(spawn); + client->GetPlayer()->RemoveSpawn(spawn); // sets it as removed + + if(delete_spawn) + packet->setDataByName("delete", 1); + + client->QueuePacket(packet->serialize()); + return true; + } + return false; +} + +void ZoneServer::SetSpawnCommand(Spawn* spawn, int8 type, char* value, Client* client){ + //commands + LogWrite(MISC__TODO, 1, "TODO", "%s does nothing!\n%s, %i", __FUNCTION__, __FILE__, __LINE__); +} + +void ZoneServer::SetSpawnCommand(int32 spawn_id, int8 type, char* value, Client* client){ + LogWrite(MISC__TODO, 1, "TODO", "%s does nothing!\n%s, %i", __FUNCTION__, __FILE__, __LINE__); +} + +void ZoneServer::ApplySetSpawnCommand(Client* client, Spawn* target, int8 type, char* value){ + // This will apply the /spawn set command to all the spawns in the zone with the same DB ID, we do not want to set + // location values (x, y, z, heading, grid) for all spawns in the zone with the same DB ID, only the targeted spawn + if(type == SPAWN_SET_VALUE_SPAWNENTRY_SCRIPT || type == SPAWN_SET_VALUE_SPAWNLOCATION_SCRIPT || (type >= SPAWN_SET_VALUE_X && type <= SPAWN_SET_VALUE_LOCATION) || + type == SPAWN_SET_VALUE_PITCH || type == SPAWN_SET_VALUE_ROLL) + return; + + Spawn* tmp = 0; + if(target->IsNPC()) + tmp = GetNPC(target->GetDatabaseID()); + else if(target->IsObject()) + tmp = GetObject(target->GetDatabaseID()); + else if(target->IsGroundSpawn()) + tmp = GetGroundSpawn(target->GetDatabaseID()); + else if(target->IsSign()) + tmp = GetSign(target->GetDatabaseID()); + else if(target->IsWidget()) + tmp = GetWidget(target->GetDatabaseID()); + if(tmp && type == SPAWN_SET_VALUE_SPAWN_SCRIPT) + tmp->SetSpawnScript(value); + else if(tmp) + commands.SetSpawnCommand(client, tmp, type, value); // set the master spawn + Spawn* spawn = 0; + + // this check needs to be here otherwise every spawn with 0 will be set + if ( target->GetDatabaseID ( ) > 0 ) + { + map::iterator itr; + MSpawnList.readlock(__FUNCTION__, __LINE__); + for (itr = spawn_list.begin(); itr != spawn_list.end(); itr++) { + spawn = itr->second; + if(spawn && spawn->GetDatabaseID() == target->GetDatabaseID()){ + if(type == SPAWN_SET_VALUE_SPAWN_SCRIPT) + spawn->SetSpawnScript(value); + else + commands.SetSpawnCommand(client, spawn, type, value); + } + } + MSpawnList.releasereadlock(__FUNCTION__, __LINE__); + } +} + +void ZoneServer::DeleteSpawnScriptTimers(Spawn* spawn, bool all){ + MSpawnScriptTimers.writelock(__FUNCTION__, __LINE__); + MRemoveSpawnScriptTimersList.writelock(__FUNCTION__, __LINE__); + if(spawn_script_timers.size() > 0){ + set::iterator itr; + SpawnScriptTimer* timer = 0; + for (itr = spawn_script_timers.begin(); itr != spawn_script_timers.end(); itr++) { + timer = *itr; + if((all || timer->spawn == spawn->GetID()) && remove_spawn_script_timers_list.count(timer) == 0) + remove_spawn_script_timers_list.insert(timer); + } + + if(all) + spawn_script_timers.clear(); + } + MRemoveSpawnScriptTimersList.releasewritelock(__FUNCTION__, __LINE__); + MSpawnScriptTimers.releasewritelock(__FUNCTION__, __LINE__); +} + +void ZoneServer::DeleteSpawnScriptTimers() { + MSpawnScriptTimers.writelock(__FUNCTION__, __LINE__); + MRemoveSpawnScriptTimersList.writelock(__FUNCTION__, __LINE__); + if(remove_spawn_script_timers_list.size() > 0){ + set::iterator itr; + SpawnScriptTimer* timer = 0; + + for (itr = remove_spawn_script_timers_list.begin(); itr != remove_spawn_script_timers_list.end(); itr++) { + timer = *itr; + spawn_script_timers.erase(timer); + safe_delete(timer); + } + remove_spawn_script_timers_list.clear(); + } + MRemoveSpawnScriptTimersList.releasewritelock(__FUNCTION__, __LINE__); + MSpawnScriptTimers.releasewritelock(__FUNCTION__, __LINE__); +} + +void ZoneServer::CheckSpawnScriptTimers(){ + DeleteSpawnScriptTimers(); + SpawnScriptTimer* timer = 0; + vector call_timers; + MSpawnScriptTimers.readlock(__FUNCTION__, __LINE__); + MRemoveSpawnScriptTimersList.writelock(__FUNCTION__, __LINE__); + if(spawn_script_timers.size() > 0){ + int32 current_time = Timer::GetCurrentTime2(); + set::iterator itr; + for (itr = spawn_script_timers.begin(); itr != spawn_script_timers.end(); itr++) { + timer = *itr; + if(timer->current_count < timer->max_count && current_time >= timer->timer){ + timer->current_count++; + call_timers.push_back(timer); + } + if(timer->current_count >= timer->max_count && remove_spawn_script_timers_list.count(timer) == 0) + remove_spawn_script_timers_list.insert(timer); + } + } + MRemoveSpawnScriptTimersList.releasewritelock(__FUNCTION__, __LINE__); + MSpawnScriptTimers.releasereadlock(__FUNCTION__, __LINE__); + if(call_timers.size() > 0){ + vector::iterator itr; + for(itr = call_timers.begin(); itr != call_timers.end(); itr++){ + timer = *itr; + CallSpawnScript(GetSpawnByID(timer->spawn), SPAWN_SCRIPT_TIMER, timer->player > 0 ? GetSpawnByID(timer->player) : 0, timer->function.c_str()); + } + } +} + +void ZoneServer::KillSpawnByDistance(Spawn* spawn, float max_distance, bool include_players, bool send_packet){ + Spawn* test_spawn = 0; + map::iterator itr; + MSpawnList.readlock(__FUNCTION__, __LINE__); + for (itr = spawn_list.begin(); itr != spawn_list.end(); itr++) { + test_spawn = itr->second; + if(test_spawn && test_spawn->IsEntity() && test_spawn != spawn && (!test_spawn->IsPlayer() || include_players)){ + if(test_spawn->GetDistance(spawn) < max_distance) + KillSpawn(test_spawn, spawn, send_packet); + } + } + MSpawnList.releasereadlock(__FUNCTION__, __LINE__); +} + +void ZoneServer::SpawnSetByDistance(Spawn* spawn, float max_distance, string field, string value){ + Spawn* test_spawn = 0; + int32 type = commands.GetSpawnSetType(field); + if(type == 0xFFFFFFFF) + return; + + map::iterator itr; + MSpawnList.readlock(__FUNCTION__, __LINE__); + for (itr = spawn_list.begin(); itr != spawn_list.end(); itr++) { + test_spawn = itr->second; + if(test_spawn && test_spawn != spawn && !test_spawn->IsPlayer()){ + if(test_spawn->GetDistance(spawn) < max_distance){ + commands.SetSpawnCommand(0, test_spawn, type, value.c_str()); + } + } + } + MSpawnList.releasereadlock(__FUNCTION__, __LINE__); +} + +void ZoneServer::AddSpawnScriptTimer(SpawnScriptTimer* timer){ + MSpawnScriptTimers.writelock(__FUNCTION__, __LINE__); + spawn_script_timers.insert(timer); + MSpawnScriptTimers.releasewritelock(__FUNCTION__, __LINE__); +} + +/* +void ZoneServer::RemoveFromRangeMap(Client* client){ + spawn_range_map.erase(client); +} +*/ + +void ZoneServer::RemoveSpawn(Spawn* spawn, bool delete_spawn, bool respawn, bool lock) +{ + LogWrite(ZONE__DEBUG, 3, "Zone", "Processing RemoveSpawn function..."); + + if (Grid != nullptr) { + Grid->RemoveSpawnFromCell(spawn); + } + + RemoveSpawnSupportFunctions(spawn); + RemoveDeadEnemyList(spawn); + if (lock) + MDeadSpawns.writelock(__FUNCTION__, __LINE__); + if (dead_spawns.count(spawn->GetID()) > 0) + dead_spawns.erase(spawn->GetID()); + if (lock) + MDeadSpawns.releasewritelock(__FUNCTION__, __LINE__);; + + if (spawn_expire_timers.count(spawn->GetID()) > 0) + spawn_expire_timers.erase(spawn->GetID()); + + RemoveDelayedSpawnRemove(spawn); + + if(respawn && !spawn->IsPlayer() && spawn->GetRespawnTime() > 0 && spawn->GetSpawnLocationID() > 0) + { + LogWrite(ZONE__DEBUG, 3, "Zone", "Handle NPC Respawn for '%s'.", spawn->GetName()); + + // handle instance spawn db info + // we don't care if a NPC or a client kills the spawn, we could have events that cause NPCs to kill NPCs. + if(spawn->GetZone()->GetInstanceID() > 0 && spawn->GetSpawnLocationID() > 0) + { + LogWrite(ZONE__DEBUG, 3, "Zone", "Handle NPC Respawn in an Instance."); + // use respawn time to either insert/update entry (likely insert in this situation) + if ( spawn->IsNPC() ) + { + database.CreateInstanceSpawnRemoved(spawn->GetSpawnLocationID(),SPAWN_ENTRY_TYPE_NPC, + spawn->GetRespawnTime(),spawn->GetZone()->GetInstanceID()); + } + else if ( spawn->IsObject ( ) ) + { + database.CreateInstanceSpawnRemoved(spawn->GetSpawnLocationID(),SPAWN_ENTRY_TYPE_OBJECT, + spawn->GetRespawnTime(),spawn->GetZone()->GetInstanceID()); + } + } + else + respawn_timers.Put(spawn->GetSpawnLocationID(), Timer::GetCurrentTime2() + spawn->GetRespawnTime()*1000); + } + + PacketStruct* packet = 0; + int16 packet_version = 0; + Client* client = 0; + + // Clear the pointer in the spawn list, spawn thread will remove the key + MSpawnList.readlock(__FUNCTION__, __LINE__); + spawn_list[spawn->GetID()] = 0; + MSpawnList.releasereadlock(__FUNCTION__, __LINE__); + + vector::iterator client_itr; + + MClientList.readlock(__FUNCTION__, __LINE__); + for (client_itr = clients.begin(); client_itr != clients.end(); client_itr++) { + client = *client_itr; + + if (client) { + if(client->IsConnected() && (!packet || packet_version != client->GetVersion())) + { + safe_delete(packet); + packet_version = client->GetVersion(); + packet = configReader.getStruct("WS_DestroyGhostCmd", packet_version); + } + + if(client->GetPlayer()->HasTarget() && client->GetPlayer()->GetTarget() == spawn) + client->GetPlayer()->SetTarget(0); + + SendRemoveSpawn(client, spawn, packet, delete_spawn); + if(spawn_range_map.count(client) > 0) + spawn_range_map.Get(client)->erase(spawn->GetID()); + } + } + MClientList.releasereadlock(__FUNCTION__, __LINE__); + + safe_delete(packet); + + // Do we really need the mutex locks and check to dead_spawns as we remove it from dead spawns at the start of this function + if (lock) + MDeadSpawns.readlock(__FUNCTION__, __LINE__); + if(delete_spawn && dead_spawns.count(spawn->GetID()) == 0) + AddPendingDelete(spawn); + if (lock) + MDeadSpawns.releasereadlock(__FUNCTION__, __LINE__); + + LogWrite(ZONE__DEBUG, 3, "Zone", "Done processing RemoveSpawn function..."); +} + +Spawn* ZoneServer::GetClosestSpawn(Spawn* spawn, int32 spawn_id){ + Spawn* closest_spawn = 0; + Spawn* test_spawn = 0; + float closest_distance = 1000000; + float test_distance = 0; + + map::iterator itr; + MSpawnList.readlock(__FUNCTION__, __LINE__); + for (itr = spawn_list.begin(); itr != spawn_list.end(); itr++) { + test_spawn = itr->second; + if(test_spawn && test_spawn->GetDatabaseID() == spawn_id){ + test_distance = test_spawn->GetDistance(spawn); + if(test_distance < closest_distance){ + closest_distance = test_distance; + closest_spawn = test_spawn; + } + } + } + MSpawnList.releasereadlock(__FUNCTION__, __LINE__); + + return closest_spawn; +} + +int32 ZoneServer::GetClosestLocation(Spawn* spawn){ + Spawn* closest_spawn = 0; + Spawn* test_spawn = 0; + float closest_distance = 1000000; + float test_distance = 0; + + map::iterator itr; + MSpawnList.readlock(__FUNCTION__, __LINE__); + for (itr = spawn_list.begin(); itr != spawn_list.end(); itr++) { + test_spawn = itr->second; + if(test_spawn){ + test_distance = test_spawn->GetDistance(spawn); + if(test_distance < closest_distance){ + closest_distance = test_distance; + closest_spawn = test_spawn; + if(closest_distance < 10) + break; + } + } + } + MSpawnList.releasereadlock(__FUNCTION__, __LINE__); + + if(closest_spawn) + return closest_spawn->GetLocation(); + return 0; +} + +void ZoneServer::SendQuestUpdates(Client* client, Spawn* spawn){ + if(!client) + return; + + if(spawn){ + if(client->GetPlayer()->WasSentSpawn(spawn->GetID()) && !client->GetPlayer()->WasSpawnRemoved(spawn)) + SendSpawnChanges(spawn, client, false, true); + } + else{ + map::iterator itr; + MSpawnList.readlock(__FUNCTION__, __LINE__); + for (itr = spawn_list.begin(); itr != spawn_list.end(); itr++) { + spawn = itr->second; + + if (spawn) { + spawn->m_requiredQuests.readlock(__FUNCTION__, __LINE__); + if (spawn && client->GetPlayer()->WasSentSpawn(spawn->GetID()) && !client->GetPlayer()->WasSpawnRemoved(spawn) && (client->GetPlayer()->CheckQuestRemoveFlag(spawn) || client->GetPlayer()->CheckQuestFlag(spawn) != 0 || (spawn->GetQuestsRequired()->size() > 0 && client->GetPlayer()->CheckQuestRequired(spawn)))) + SendSpawnChanges(spawn, client, false, true); + spawn->m_requiredQuests.releasereadlock(__FUNCTION__, __LINE__); + } + } + MSpawnList.releasereadlock(__FUNCTION__, __LINE__); + } +} + +void ZoneServer::SendAllSpawnsForLevelChange(Client* client){ + Spawn* spawn = 0; + if(spawn_range_map.count(client) > 0) { + MutexMap::iterator itr = spawn_range_map.Get(client)->begin(); + while(itr.Next()) { + spawn = GetSpawnByID(itr->first); + if(spawn && client->GetPlayer()->WasSentSpawn(spawn->GetID()) && !client->GetPlayer()->WasSpawnRemoved(spawn)) { + SendSpawnChanges(spawn, client, false, true); + // Attempt to slow down the packet spam sent to the client + Sleep(5); + } + } + } +} + +void ZoneServer::StartZoneSpawnsForLevelThread(Client* client){ + if(zoneShuttingDown) + return; + +#ifdef WIN32 + _beginthread(SendLevelChangedSpawns, 0, client); +#else + pthread_t thread; + pthread_create(&thread, NULL, SendLevelChangedSpawns, client); + pthread_detach(thread); +#endif +} + +void ZoneServer::ReloadClientQuests(){ + Client* client = 0; + vector::iterator client_itr; + + MClientList.readlock(__FUNCTION__, __LINE__); + for (client_itr = clients.begin(); client_itr != clients.end(); client_itr++) { + client = *client_itr; + if(client) + client->ReloadQuests(); + } + MClientList.releasereadlock(__FUNCTION__, __LINE__); +} + +void ZoneServer::SendCalculatedXP(Player* player, Spawn* victim){ + if (player && victim) { + if (player->GetGroupMemberInfo()) { + world.GetGroupManager()->GroupLock(__FUNCTION__, __LINE__); + + deque* members = world.GetGroupManager()->GetGroupMembers(player->GetGroupMemberInfo()->group_id); + deque::iterator itr; + for (itr = members->begin(); itr != members->end(); itr++) { + GroupMemberInfo* gmi = *itr; + if (gmi->client) { + Player* group_member = gmi->client->GetPlayer(); + float xp = group_member->CalculateXP(victim) / members->size(); + if (xp > 0) { + int16 level = group_member->GetLevel(); + if (group_member->AddXP((int32)xp)) { + gmi->client->Message(CHANNEL_COLOR_EXP, "You gain %u experience!", (int32)xp); + LogWrite(PLAYER__DEBUG, 0, "Player", "Player: %s earned %u experience (GroupID %u)", group_member->GetName(), (int32)xp, player->GetGroupMemberInfo()->group_id); + if(group_member->GetLevel() != level) + gmi->client->ChangeLevel(level, group_member->GetLevel()); + group_member->SetCharSheetChanged(true); + } + } + } + } + + world.GetGroupManager()->ReleaseGroupLock(__FUNCTION__, __LINE__); + } + else { + float xp = player->CalculateXP(victim); + if (xp > 0) { + Client* client = GetClientBySpawn(player); + if(!client) + return; + int16 level = player->GetLevel(); + if (player->AddXP((int32)xp)) { + client->Message(CHANNEL_COLOR_EXP, "You gain %u XP!", (int32)xp); + LogWrite(PLAYER__DEBUG, 0, "Player", "Player: %s earned %u experience.", player->GetName(), (int32)xp); + if(player->GetLevel() != level) + client->ChangeLevel(level, player->GetLevel()); + player->SetCharSheetChanged(true); + } + } + } + } +} + +void ZoneServer::ProcessFaction(Spawn* spawn, Client* client) +{ + if(client && !spawn->IsPlayer() && spawn->GetFactionID() > 10) + { + bool update_result = false; + Faction* faction = 0; + vector* factions = 0; + Player* player = client->GetPlayer(); + + if(player->GetFactions()->ShouldDecrease(spawn->GetFactionID())) + { + update_result = player->GetFactions()->DecreaseFaction(spawn->GetFactionID()); + faction = master_faction_list.GetFaction(spawn->GetFactionID()); + + if(faction && update_result) + client->Message(CHANNEL_COLOR_FACTION, "Your faction standing with %s got worse.", faction->name.c_str()); + else if(faction) + client->Message(CHANNEL_COLOR_FACTION, "Your faction standing with %s could not possibly get any worse.", faction->name.c_str()); + + factions = master_faction_list.GetHostileFactions(spawn->GetFactionID()); + + if(factions) + { + vector::iterator itr; + + for(itr = factions->begin(); itr != factions->end(); itr++) + { + if(player->GetFactions()->ShouldIncrease(*itr)) + { + update_result = player->GetFactions()->IncreaseFaction(*itr); + faction = master_faction_list.GetFaction(*itr); + + if(faction && update_result) + client->Message(CHANNEL_COLOR_FACTION, "Your faction standing with %s got better.", faction->name.c_str()); + else if(faction) + client->Message(CHANNEL_COLOR_FACTION, "Your faction standing with %s could not possibly get any better.", faction->name.c_str()); + } + } + } + } + + factions = master_faction_list.GetFriendlyFactions(spawn->GetFactionID()); + + if(factions) + { + vector::iterator itr; + + for(itr = factions->begin(); itr != factions->end(); itr++) + { + if(player->GetFactions()->ShouldDecrease(*itr)) + { + update_result = player->GetFactions()->DecreaseFaction(*itr); + faction = master_faction_list.GetFaction(*itr); + + if(faction && update_result) + client->Message(CHANNEL_COLOR_FACTION, "Your faction standing with %s got worse.", faction->name.c_str()); + else if(faction) + client->Message(CHANNEL_COLOR_FACTION, "Your faction standing with %s could not possibly get any worse.", faction->name.c_str()); + } + } + } + + EQ2Packet* outapp = client->GetPlayer()->GetFactions()->FactionUpdate(client->GetVersion()); + + if(outapp) + client->QueuePacket(outapp); + } +} + +void ZoneServer::Despawn(Spawn* spawn, int32 timer){ + if(!spawn || spawn->IsPlayer()) + return; + + RemoveSpawnSupportFunctions(spawn); + if(spawn->IsEntity()) + ((Entity*)spawn)->InCombat(false); + if(timer == 0) + timer = 1; + AddDeadSpawn(spawn, timer); +} + +void ZoneServer::KillSpawn(Spawn* dead, Spawn* killer, bool send_packet, int8 damage_type, int16 kill_blow_type) +{ + MDeadSpawns.readlock(__FUNCTION__, __LINE__); + if(!dead || this->dead_spawns.count(dead->GetID()) > 0) { + MDeadSpawns.releasereadlock(__FUNCTION__, __LINE__); + return; + } + MDeadSpawns.releasereadlock(__FUNCTION__, __LINE__); + + PacketStruct* packet = 0; + Client* client = 0; + vector* encounter = 0; + bool killer_in_encounter = false; + + if(dead->IsEntity()) + { + ((Entity*)dead)->InCombat(false); + dead->SetInitialState(16512, false); // This will make aerial npc's fall after death + dead->SetHP(0); + dead->SetSpawnType(3); + dead->appearance.attackable = 0; + + + // Remove hate towards dead from all npc's in the zone + ClearHate((Entity*)dead); + + // Check kill and death procs + if (killer && dead != killer){ + if (dead->IsEntity()) + ((Entity*)dead)->CheckProcs(PROC_TYPE_DEATH, killer); + if (killer->IsEntity()) + ((Entity*)killer)->CheckProcs(PROC_TYPE_KILL, dead); + } + + //Check if caster is alive after death proc called, incase of deathsave + if (dead->Alive()) + return; + + RemoveSpellTimersFromSpawn(dead, true, !dead->IsPlayer()); + + if(dead->IsPlayer()) + { + ((Player*)dead)->UpdatePlayerStatistic(STAT_PLAYER_TOTAL_DEATHS, 1); + client = GetClientBySpawn(dead); + + if(client) { + + if(client->GetPlayer()->DamageEquippedItems(10, client)) + client->QueuePacket(client->GetPlayer()->GetEquipmentList()->serialize(client->GetVersion())); + + client->DisplayDeadWindow(); + } + } + else if (dead->IsNPC()) { + encounter = ((NPC*)dead)->Brain()->GetEncounter(); + } + + } + + dead->SetActionState(0); + dead->SetTempActionState(0); + + // If dead is an npc get the encounter and loop through it giving out the rewards, no rewards for pets + if (dead->IsNPC() && !dead->IsPet() && !dead->IsBot()) { + Spawn* spawn = 0; + int8 size = encounter->size(); + // Needs npc to have access to the encounter list for who is allowed to loot + NPC* chest = 0; + + if (!((NPC*)dead)->Brain()->PlayerInEncounter()) { + ((NPC*)dead)->SetLootCoins(0); + ((NPC*)dead)->GetLootItems()->clear(); + } + + // If dead has loot attempt to drop a chest + if (((NPC*)dead)->HasLoot()) { + chest = ((NPC*)dead)->DropChest(); + } + + + for (int8 i = 0; i < encounter->size(); i++) { + spawn = GetSpawnByID(encounter->at(i)); + // set a flag to let us know if the killer is in the encounter + if (!killer_in_encounter && spawn == killer) + killer_in_encounter = true; + + if (spawn && spawn->IsPlayer()) { + // Update players total kill count + ((Player*)spawn)->UpdatePlayerStatistic(STAT_PLAYER_TOTAL_NPC_KILLS, 1); + + // If this was an epic mob kill send the announcement for this player + if (dead->GetEncounterLevel() >= 10) + SendEpicMobDeathToGuild((Player*)spawn, dead); + + // Clear hostile spells from the players spell queue + spellProcess->RemoveSpellFromQueue((Player*)spawn, true); + + // Get the client of the player + client = GetClientBySpawn(spawn); + // valid client? + if(client) { + // Check for quest kill updates + client->CheckPlayerQuestsKillUpdate(dead); + // If the dead mob is not a player and if it had a faction with an ID greater or equal to 10 the send faction changes + if(!dead->IsPlayer() && dead->GetFactionID() > 10) + ProcessFaction(dead, client); + + // Send xp...this is currently wrong fix it + if (spawn != dead && ((Player*)spawn)->GetArrowColor(dead->GetLevel()) >= ARROW_COLOR_GREEN) { + //SendCalculatedXP((Player*)spawn, dead); + + float xp = ((Player*)spawn)->CalculateXP(dead) / size; + if (xp > 0) { + int16 level = spawn->GetLevel(); + if (((Player*)spawn)->AddXP((int32)xp)) { + client->Message(CHANNEL_COLOR_EXP, "You gain %u XP!", (int32)xp); + LogWrite(PLAYER__DEBUG, 0, "Player", "Player: %s earned %u experience.", spawn->GetName(), (int32)xp); + if(spawn->GetLevel() != level) + client->ChangeLevel(level, spawn->GetLevel()); + ((Player*)spawn)->SetCharSheetChanged(true); + } + } + } + } + } + + // If a chest is being dropped add this spawn to the chest's encounter so they can loot it + if (chest) + chest->Brain()->AddToEncounter((Entity*)spawn); + } + + // If a chest is being dropped add it to the world and set the timer to remove it. + if (chest) { + AddSpawn(chest); + AddDeadSpawn(chest, 0xFFFFFFFF); + LogWrite(LOOT__DEBUG, 0, "Loot", "Adding a chest to the world..."); + } + } + + // Reset client pointer + client = 0; + + // Killer was not in the encounter, give them the faction hit but no xp + if (!killer_in_encounter) { + // make sure the killer is a player and the dead spawn had a faction and wasn't a player + if (killer && killer->IsPlayer()) { + if (!dead->IsPlayer() && dead->GetFactionID() > 10) { + client = GetClientBySpawn(killer); + if (client) + ProcessFaction(dead, client); + } + + // Clear hostile spells from the killers spell queue + spellProcess->RemoveSpellFromQueue((Player*)killer, true); + } + } + + // Reset client pointer + client = 0; + + + vector* group = dead->GetSpawnGroup(); + if (group && group->size() == 1) + CallSpawnScript(dead, SPAWN_SCRIPT_GROUP_DEAD, killer); + safe_delete(group); + + + // Remove the support functions for the dead spawn + RemoveSpawnSupportFunctions(dead); + + // Erase the expire timer if it has one + if (spawn_expire_timers.count(dead->GetID()) > 0) + spawn_expire_timers.erase(dead->GetID()); + + // If dead is an npc or object call the spawn scrip and handle instance stuff + if(dead->IsNPC() || dead->IsObject()) + { + // handle instance spawn db info + // we don't care if a NPC or a client kills the spawn, we could have events that cause NPCs to kill NPCs. + if(dead->GetZone()->GetInstanceID() > 0 && dead->GetSpawnLocationID() > 0) + { + // use respawn time to either insert/update entry (likely insert in this situation) + if(dead->IsNPC()) + database.CreateInstanceSpawnRemoved(dead->GetSpawnLocationID(),SPAWN_ENTRY_TYPE_NPC, dead->GetRespawnTime(),dead->GetZone()->GetInstanceID()); + else if ( dead->IsObject ( ) ) + database.CreateInstanceSpawnRemoved(dead->GetSpawnLocationID(),SPAWN_ENTRY_TYPE_OBJECT, dead->GetRespawnTime(),dead->GetZone()->GetInstanceID()); + } + + // Call the spawn scripts death() function + CallSpawnScript(dead, SPAWN_SCRIPT_DEATH, killer); + } + + int32 victim_id = dead->GetID(); + int32 attacker_id = 0xFFFFFFFF; + + if(killer) + attacker_id = killer->GetID(); + + if(send_packet) + { + vector::iterator client_itr; + MClientList.readlock(__FUNCTION__, __LINE__); + for (client_itr = clients.begin(); client_itr != clients.end(); client_itr++) { + client = *client_itr; + if(!client->GetPlayer()->WasSentSpawn(victim_id) || (attacker_id != 0xFFFFFFFF && !client->GetPlayer()->WasSentSpawn(attacker_id)) ) + continue; + else if(client->GetPlayer()->WasSpawnRemoved(dead) || (attacker_id != 0xFFFFFFFF && client->GetPlayer()->WasSpawnRemoved(killer))) + continue; + else if(killer && killer->GetDistance(client->GetPlayer()) > HEAR_SPAWN_DISTANCE) + continue; + + packet = configReader.getStruct("WS_HearDeath", client->GetVersion()); + if(packet) + { + if(killer) + packet->setDataByName("attacker", client->GetPlayer()->GetIDWithPlayerSpawn(killer)); + else + packet->setDataByName("attacker", 0xFFFFFFFF); + + packet->setDataByName("defender", client->GetPlayer()->GetIDWithPlayerSpawn(dead)); + packet->setDataByName("damage_type", damage_type); + packet->setDataByName("blow_type", kill_blow_type); + + client->QueuePacket(packet->serialize()); + LogWrite(COMBAT__DEBUG, 0, "Combat", "Zone Killing '%s'", dead->GetName()); + safe_delete(packet); + } + } + MClientList.releasereadlock(__FUNCTION__, __LINE__); + } + + + int32 pop_timer = 0xFFFFFFFF; + if(killer && killer->IsNPC()) + { + // Call the spawn scripts killed() function + CallSpawnScript(killer, SPAWN_SCRIPT_KILLED, dead); + + if(!dead->IsPlayer()) + { + LogWrite(MISC__TODO, 1, "TODO", "Whenever pets are added, check for pet kills\n\t(%s, function: %s, line #: %i)", __FILE__, __FUNCTION__, __LINE__); + // Set the time for the corpse to linger to 5 sec + //pop_timer = 5000; + // commented out the timer so in the event the killer is not a player (pet, guard, something else i haven't thought of) + // the corpse doesn't vanish sooner then it should if it had loot for the players. AddDeadSpawn() will set timers based on if + // the corpse has loot or not if the timer value (pop_timer) is 0xFFFFFFFF + } + } + + // If the dead spawns was not a player add it to the dead spawn list + if (!dead->IsPlayer() && !dead->IsBot()) + AddDeadSpawn(dead, pop_timer); + + // if dead was a player clear hostile spells from its spell queue + if (dead->IsPlayer()) + spellProcess->RemoveSpellFromQueue((Player*)dead, true); + + if (dead->IsNPC()) + ((NPC*)dead)->Brain()->ClearHate(); + + // ResetPetInfo() is called in DismissPet(), might not need to be here + + // Players pet is killed, clear the pet info from char sheet + /*if (dead->IsNPC() && ((NPC*)dead)->IsPet() && ((NPC*)dead)->GetOwner()->IsPlayer()) + ((Player*)((NPC*)dead)->GetOwner())->ResetPetInfo();*/ + + safe_delete(encounter); +} + +void ZoneServer::SendDamagePacket(Spawn* attacker, Spawn* victim, int8 type1, int8 type2, int8 damage_type, int16 damage, const char* spell_name){ + //Scat: was set but never being used anywhere. i see references to 0xFFFFFFFF below so could be old code not used anymore + //int32 attacker_id = 0xFFFFFFFF; + //if(attacker) + // attacker_id = attacker->GetID(); + PacketStruct* packet = 0; + Client* client = 0; + if(attacker && victim && victim->IsPlayer() && victim->GetTarget() == 0){ + client = GetClientBySpawn(victim); + if(client) + client->TargetSpawn(attacker); + } + + vector::iterator client_itr; + MClientList.readlock(__FUNCTION__, __LINE__); + for (client_itr = clients.begin(); client_itr != clients.end(); client_itr++) { + client = *client_itr; + if(!client || (client->GetPlayer() != attacker && client->GetPlayer() != victim && ((attacker && client->GetPlayer()->WasSentSpawn(attacker->GetID()) == false) || (victim && client->GetPlayer()->WasSentSpawn(victim->GetID()) == false)))) + continue; + if((attacker && client->GetPlayer()->WasSpawnRemoved(attacker)) || (victim && client->GetPlayer()->WasSpawnRemoved(victim))) + continue; + if(attacker && attacker->GetDistance(client->GetPlayer()) > 50) + continue; + if(victim && victim->GetDistance(client->GetPlayer()) > 50) + continue; + switch(type1){ + case DAMAGE_PACKET_TYPE_SIPHON_SPELL: + case DAMAGE_PACKET_TYPE_SIPHON_SPELL2: + packet = configReader.getStruct("WS_HearSiphonSpellDamage", client->GetVersion()); + break; + case DAMAGE_PACKET_TYPE_MULTIPLE_DAMAGE: + packet = configReader.getStruct("WS_HearMultipleDamage", client->GetVersion()); + break; + case DAMAGE_PACKET_TYPE_SIMPLE_CRIT_DMG: + case DAMAGE_PACKET_TYPE_SIMPLE_DAMAGE: + packet = configReader.getStruct("WS_HearSimpleDamage", client->GetVersion()); + break; + case DAMAGE_PACKET_TYPE_SPELL_DAMAGE2: + case DAMAGE_PACKET_TYPE_SPELL_DAMAGE3: + case DAMAGE_PACKET_TYPE_SPELL_CRIT_DMG: + case DAMAGE_PACKET_TYPE_SPELL_DAMAGE: + packet = configReader.getStruct("WS_HearSpellDamage", client->GetVersion()); + if (packet) + packet->setSubstructDataByName("header", "unknown", 5); + break; + case DAMAGE_PACKET_TYPE_RANGE_DAMAGE: + packet = configReader.getStruct("WS_HearRangeDamage", client->GetVersion()); + break; + case DAMAGE_PACKET_TYPE_RANGE_SPELL_DMG: + case DAMAGE_PACKET_TYPE_RANGE_SPELL_DMG2: + packet = configReader.getStruct("WS_HearRangeDamage", client->GetVersion()); + break; + default: + LogWrite(ZONE__ERROR, 0, "Zone", "Unknown Damage Packet type: %i in ZoneServer::SendDamagePacket.", type1); + MClientList.releasereadlock(__FUNCTION__, __LINE__); + return; + } + + if(packet){ + packet->setSubstructDataByName("header", "packet_type", type1); + packet->setSubstructDataByName("header", "result_type", type2); + if(!attacker) + packet->setSubstructDataByName("header", "attacker", 0xFFFFFFFF); + else + packet->setSubstructDataByName("header", "attacker", client->GetPlayer()->GetIDWithPlayerSpawn(attacker)); + packet->setSubstructDataByName("header", "defender", client->GetPlayer()->GetIDWithPlayerSpawn(victim)); + packet->setDataByName("damage_type", damage_type); + packet->setDataByName("damage", damage); + if(spell_name) + packet->setSmallStringByName("spell_name", spell_name); + EQ2Packet* app = packet->serialize(); + //DumpPacket(app); + client->QueuePacket(app); + safe_delete(packet); + packet = 0; + } + } + MClientList.releasereadlock(__FUNCTION__, __LINE__); +} + +void ZoneServer::SendHealPacket(Spawn* caster, Spawn* target, int16 heal_type, int32 heal_amt, const char* spell_name){ + Client* client = 0; + vector::iterator client_itr; + + MClientList.readlock(__FUNCTION__, __LINE__); + for (client_itr = clients.begin(); client_itr != clients.end(); client_itr++) { + client = *client_itr; + if(!client || (client->GetPlayer() != caster && ((caster && client->GetPlayer()->WasSentSpawn(caster->GetID()) == false) || (target && client->GetPlayer()->WasSentSpawn(target->GetID()) == false)))) + continue; + if((caster && client->GetPlayer()->WasSpawnRemoved(caster)) || (caster && client->GetPlayer()->WasSpawnRemoved(target))) + continue; + if(caster && caster->GetDistance(client->GetPlayer()) > 50) + continue; + if(target && target->GetDistance(client->GetPlayer()) > 50) + continue; + + + PacketStruct* packet = configReader.getStruct("WS_HearHeal", client->GetVersion()); + if (packet) { + packet->setDataByName("caster", client->GetPlayer()->GetIDWithPlayerSpawn(caster)); + packet->setDataByName("target", client->GetPlayer()->GetIDWithPlayerSpawn(target)); + packet->setDataByName("heal_amt", heal_amt); + packet->setDataByName("spellname", spell_name); + packet->setDataByName("type", heal_type); + packet->setDataByName("unknown2", 1); + EQ2Packet* app = packet->serialize(); + client->QueuePacket(app); + safe_delete(packet); + } + } + MClientList.releasereadlock(__FUNCTION__, __LINE__); +} + +void ZoneServer::SendThreatPacket(Spawn* caster, Spawn* target, int32 threat_amt, const char* spell_name) { + Client* client = 0; + + vector::iterator client_itr; + + MClientList.readlock(__FUNCTION__, __LINE__); + for (client_itr = clients.begin(); client_itr != clients.end(); client_itr++) { + client = *client_itr; + if(!client || (client->GetPlayer() != caster && ((caster && client->GetPlayer()->WasSentSpawn(caster->GetID()) == false) || (target && client->GetPlayer()->WasSentSpawn(target->GetID()) == false)))) + continue; + if((caster && client->GetPlayer()->WasSpawnRemoved(caster)) || (caster && client->GetPlayer()->WasSpawnRemoved(target))) + continue; + if(caster && caster->GetDistance(client->GetPlayer()) > 50) + continue; + if(target && target->GetDistance(client->GetPlayer()) > 50) + continue; + + PacketStruct* packet = configReader.getStruct("WS_HearThreatCmd", client->GetVersion()); + if (packet) { + packet->setDataByName("spell_name", spell_name); + packet->setDataByName("spawn_id", client->GetPlayer()->GetIDWithPlayerSpawn(caster)); + packet->setDataByName("target", client->GetPlayer()->GetIDWithPlayerSpawn(target)); + packet->setDataByName("threat_amount", threat_amt); + + client->QueuePacket(packet->serialize()); + } + safe_delete(packet); + } + MClientList.releasereadlock(__FUNCTION__, __LINE__); +} + +void ZoneServer::SendSpellFailedPacket(Client* client, int16 error){ + if(!client) + return; + + PacketStruct* packet = configReader.getStruct("WS_DisplaySpellFailed", client->GetVersion()); + if(packet){ + /* Temp solution, need to modify the error code before this function and while we still have access to the spell/combat art */ + error = master_spell_list.GetSpellErrorValue(client->GetVersion(), error); + + packet->setDataByName("error_code", error); + //packet->PrintPacket(); + client->QueuePacket(packet->serialize()); + safe_delete(packet); + } +} + +void ZoneServer::SendInterruptPacket(Spawn* interrupted, LuaSpell* spell){ + if(!interrupted || !spell) + return; + + EQ2Packet* outapp = 0; + PacketStruct* packet = 0; + Client* client = 0; + vector::iterator client_itr; + + MClientList.readlock(__FUNCTION__, __LINE__); + for (client_itr = clients.begin(); client_itr != clients.end(); client_itr++) { + client = *client_itr; + if(!client || !client->GetPlayer()->WasSentSpawn(interrupted->GetID()) || client->GetPlayer()->WasSpawnRemoved(interrupted)) + continue; + packet = configReader.getStruct("WS_Interrupt", client->GetVersion()); + if(packet){ + packet->setDataByName("spawn_id", client->GetPlayer()->GetIDWithPlayerSpawn(interrupted)); + packet->setArrayLengthByName("num_targets", spell->targets.size()); + for (int32 i = 0; i < spell->targets.size(); i++) + packet->setArrayDataByName("target_id", client->GetPlayer()->GetIDWithPlayerSpawn(client->GetPlayer()->GetZone()->GetSpawnByID(spell->targets[i])), i); + packet->setDataByName("spell_id", spell->spell->GetSpellID()); + outapp = packet->serialize(); + client->QueuePacket(outapp); + safe_delete(packet); + } + } + MClientList.releasereadlock(__FUNCTION__, __LINE__); + safe_delete(packet); +} + +void ZoneServer::SendCastSpellPacket(LuaSpell* spell, Entity* caster){ + EQ2Packet* outapp = 0; + PacketStruct* packet = 0; + Client* client = 0; + if(!caster || !spell || !spell->spell || spell->interrupted) + return; + + vector::iterator client_itr; + + MClientList.readlock(__FUNCTION__, __LINE__); + for (client_itr = clients.begin(); client_itr != clients.end(); client_itr++) { + client = *client_itr; + if(!client) + continue; + packet = configReader.getStruct("WS_HearCastSpell", client->GetVersion()); + if(packet){ + packet->setDataByName("spawn_id", client->GetPlayer()->GetIDWithPlayerSpawn(caster)); + packet->setArrayLengthByName("num_targets", spell->targets.size()); + for (int32 i = 0; i < spell->targets.size(); i++) + packet->setArrayDataByName("target", client->GetPlayer()->GetIDWithPlayerSpawn(spell->caster->GetZone()->GetSpawnByID(spell->targets[i])), i); + packet->setDataByName("spell_visual", spell->spell->GetSpellData()->spell_visual); //result + packet->setDataByName("cast_time", spell->spell->GetSpellData()->cast_time*.01); //delay + packet->setDataByName("spell_id", spell->spell->GetSpellID()); + packet->setDataByName("spell_level", 1); + packet->setDataByName("spell_tier", spell->spell->GetSpellData()->tier); + outapp = packet->serialize(); + client->QueuePacket(outapp); + safe_delete(packet); + } + } + MClientList.releasereadlock(__FUNCTION__, __LINE__); + safe_delete(packet); +} + +void ZoneServer::SendCastSpellPacket(int32 spell_visual, Spawn* target) { + if (target) { + vector::iterator client_itr; + + MClientList.readlock(__FUNCTION__, __LINE__); + for (client_itr = clients.begin(); client_itr != clients.end(); client_itr++) { + Client* client = *client_itr; + if (!client) + continue; + PacketStruct* packet = configReader.getStruct("WS_HearCastSpell", client->GetVersion()); + if (packet) { + packet->setDataByName("spawn_id", 0xFFFFFFFF); + packet->setArrayLengthByName("num_targets", 1); + packet->setArrayDataByName("target", client->GetPlayer()->GetIDWithPlayerSpawn(target)); + packet->setDataByName("spell_id", 0xFFFFFFFF); + packet->setDataByName("spell_visual", spell_visual); + packet->setDataByName("cast_time", 0); + packet->setDataByName("spell_id", 0); + packet->setDataByName("spell_level", 0); + packet->setDataByName("spell_tier", 0); + client->QueuePacket(packet->serialize()); + safe_delete(packet); + } + } + MClientList.releasereadlock(__FUNCTION__, __LINE__); + } +} + +void ZoneServer::SendCastEntityCommandPacket(EntityCommand* entity_command, int32 spawn_id, int32 target_id) { + if (entity_command) { + Spawn* spawn = GetSpawnByID(spawn_id); + Spawn* target = GetSpawnByID(target_id); + if (!spawn || !target) + return; + + Client* client = 0; + vector::iterator client_itr; + + MClientList.readlock(__FUNCTION__, __LINE__); + for (client_itr = clients.begin(); client_itr != clients.end(); client_itr++) { + client = *client_itr; + if (!client || !client->GetPlayer()->WasSentSpawn(spawn_id) || client->GetPlayer()->WasSpawnRemoved(spawn) || !client->GetPlayer()->WasSentSpawn(target_id) || client->GetPlayer()->WasSpawnRemoved(target)) + continue; + PacketStruct* packet = configReader.getStruct("WS_HearCastSpell", client->GetVersion()); + if (packet) { + packet->setDataByName("spawn_id", client->GetPlayer()->GetIDWithPlayerSpawn(spawn)); + packet->setArrayLengthByName("num_targets", 1); + packet->setArrayDataByName("target", client->GetPlayer()->GetIDWithPlayerSpawn(target)); + packet->setDataByName("num_targets", 1); + packet->setDataByName("spell_visual", entity_command->spell_visual); //result + packet->setDataByName("cast_time", entity_command->cast_time * 0.01); //delay + packet->setDataByName("spell_id", 1); + packet->setDataByName("spell_level", 1); + packet->setDataByName("spell_tier", 1); + EQ2Packet* outapp = packet->serialize(); + client->QueuePacket(outapp); + safe_delete(packet); + } + } + MClientList.releasereadlock(__FUNCTION__, __LINE__); + } +} + +void ZoneServer::StartZoneInitialSpawnThread(Client* client){ + if(zoneShuttingDown) + return; + +#ifdef WIN32 + _beginthread(SendInitialSpawns, 0, client); +#else + pthread_t thread; + pthread_create(&thread, NULL, SendInitialSpawns, client); + pthread_detach(thread); +#endif +} + +void ZoneServer::SendZoneSpawns(Client* client){ + initial_spawn_threads_active++; + + map::iterator itr; + MSpawnList.readlock(__FUNCTION__, __LINE__); + for (itr = spawn_list.begin(); itr != spawn_list.end(); itr++) { + Spawn* spawn = itr->second; + if (spawn) { + CheckSpawnRange(client, spawn, true); + } + } + MSpawnList.releasereadlock(__FUNCTION__, __LINE__); + + CheckSendSpawnToClient(client, true); + client->SetConnected(true); + ClientPacketFunctions::SendFinishedEntitiesList(client); + initial_spawn_threads_active--; +} + +vector ZoneServer::GetPlayers(){ + vector ret; + Client* client = 0; + vector::iterator client_itr; + + MClientList.readlock(__FUNCTION__, __LINE__); + for (client_itr = clients.begin(); client_itr != clients.end(); client_itr++) { + client = *client_itr; + ret.push_back(client->GetPlayer()); + } + MClientList.releasereadlock(__FUNCTION__, __LINE__); + + return ret; +} + +int16 ZoneServer::SetSpawnTargetable(Spawn* spawn, float distance){ + Spawn* test_spawn = 0; + int16 ret_val = 0; + map::iterator itr; + MSpawnList.readlock(__FUNCTION__, __LINE__); + for (itr = spawn_list.begin(); itr != spawn_list.end(); itr++) { + test_spawn = itr->second; + if(test_spawn){ + if(test_spawn->GetDistance(spawn) <= distance){ + test_spawn->SetTargetable(1); + ret_val++; + } + } + } + MSpawnList.releasereadlock(__FUNCTION__, __LINE__); + return ret_val; +} + +int16 ZoneServer::SetSpawnTargetable(int32 spawn_id){ + Spawn* spawn = 0; + int16 ret_val = 0; + map::iterator itr; + MSpawnList.readlock(__FUNCTION__, __LINE__); + for (itr = spawn_list.begin(); itr != spawn_list.end(); itr++) { + spawn = itr->second; + if(spawn){ + if(spawn->GetDatabaseID() == spawn_id){ + spawn->SetTargetable(1); + ret_val++; + } + } + } + MSpawnList.releasereadlock(__FUNCTION__, __LINE__); + return ret_val; +} + +EQ2Packet* ZoneServer::GetZoneInfoPacket(Client* client){ + client_spawn_map.Put(client->GetPlayer(), client); + PacketStruct* packet = configReader.getStruct("WS_ZoneInfo", client->GetVersion()); + packet->setSmallStringByName("server1",net.GetWorldName()); + packet->setSmallStringByName("server2",net.GetWorldName()); + packet->setDataByName("unknown1", 1, 1);//1, 1 + int32 expansions = EXPANSION_UNKNOWN + EXPANSION_DOF + EXPANSION_KOS + EXPANSION_EOF + EXPANSION_ROK + EXPANSION_TSO + EXPANSION_DOV; + //packet->setDataByName("expansions_enabled", 82313211);//expansions 63181 + //packet->setDataByName("expansions_enabled", 552075103);//expansions 63182 + packet->setDataByName("expansions_enabled", 4294967295);//expansions 1096 //612499455 works + if (client->GetVersion() >= 1193) { + packet->setDataByName("unknown3", 4294967295, 0); // DOV and down + packet->setDataByName("unknown3", 4294967295, 1); //COE and up + packet->setDataByName("unknown3", 4294967295, 2); + } + else + packet->setDataByName("unknown3", 4294967295, 0); // DOV and down + + packet->setSmallStringByName("auction_website", "eq2emulator.net"); + packet->setDataByName("auction_port", 80); + packet->setSmallStringByName("upload_page", "test_upload.m"); + packet->setSmallStringByName("upload_key", "dsya987yda9"); + packet->setSmallStringByName("zone", GetZoneFile()); + packet->setSmallStringByName("zone2", GetZoneName()); + packet->setSmallStringByName("zone_desc", GetZoneDescription()); + packet->setSmallStringByName("char_name", client->GetPlayer()->GetName()); + + packet->setDataByName("x", client->GetPlayer()->GetX()); + packet->setDataByName("y", client->GetPlayer()->GetY()); + packet->setDataByName("z", client->GetPlayer()->GetZ()); + + // unknown3 can prevent screen shots from being taken if + //packet->setDataByName("unknown3", 2094661567, 1); // Screenshots allowed with this value + //packet->setDataByName("unknown3", 3815767999, 1); // Screenshots disabled with this value + //packet->setDataByName("unknown3", 1, 2); + + /*if (client->GetVersion() >= 63587) { + packet->setArrayLengthByName("num_exp_feature_bytes", 9); + packet->setArrayDataByName("exp_feature_bytes", 95, 0);//kos and dof + packet->setArrayDataByName("exp_feature_bytes", 255, 1);//eof rok tso sf dov coe tov + packet->setArrayDataByName("exp_feature_bytes", 247, 2);//aom tot ka exp14 + packet->setArrayDataByName("exp_feature_bytes", 32, 3);//rum cellar + packet->setArrayDataByName("exp_feature_bytes", 140, 4); + packet->setArrayDataByName("exp_feature_bytes", 62, 5); + packet->setArrayDataByName("exp_feature_bytes", 0, 6); + packet->setArrayDataByName("exp_feature_bytes", 45, 7); + packet->setArrayDataByName("exp_feature_bytes", 128, 8); + + packet->setArrayLengthByName("num_unknown3b_bytes", 9); + packet->setArrayDataByName("unknown3b_bytes", 95, 0); + packet->setArrayDataByName("unknown3b_bytes", 255, 1); + packet->setArrayDataByName("unknown3b_bytes", 247, 2); + packet->setArrayDataByName("unknown3b_bytes", 237, 3); + packet->setArrayDataByName("unknown3b_bytes", 143, 4); + packet->setArrayDataByName("unknown3b_bytes", 255, 5); + packet->setArrayDataByName("unknown3b_bytes", 255, 6); + packet->setArrayDataByName("unknown3b_bytes", 255, 7); + packet->setArrayDataByName("unknown3b_bytes", 128, 8); + } + else if (client->GetVersion() >= 63214) { + packet->setArrayLengthByName("num_exp_feature_bytes", 9); + packet->setArrayDataByName("exp_feature_bytes", 95, 0);//kos and dof + packet->setArrayDataByName("exp_feature_bytes", 255, 1);//eof rok tso sf dov coe tov + packet->setArrayDataByName("exp_feature_bytes", 247, 2);//aom tot ka exp14 + packet->setArrayDataByName("exp_feature_bytes", 32, 3);//rum cellar + packet->setArrayDataByName("exp_feature_bytes", 140, 4); + packet->setArrayDataByName("exp_feature_bytes", 62, 5); + packet->setArrayDataByName("exp_feature_bytes", 0, 6); + packet->setArrayDataByName("exp_feature_bytes", 45, 7); + packet->setArrayDataByName("exp_feature_bytes", 128, 8); + + packet->setArrayLengthByName("num_unknown3b_bytes", 9); + packet->setArrayDataByName("unknown3b_bytes", 95, 0); + packet->setArrayDataByName("unknown3b_bytes", 255, 1); + packet->setArrayDataByName("unknown3b_bytes", 247, 2); + packet->setArrayDataByName("unknown3b_bytes", 237, 3); + packet->setArrayDataByName("unknown3b_bytes", 143, 4); + packet->setArrayDataByName("unknown3b_bytes", 255, 5); + packet->setArrayDataByName("unknown3b_bytes", 255, 6); + packet->setArrayDataByName("unknown3b_bytes", 255, 7); + packet->setArrayDataByName("unknown3b_bytes", 128, 8); + }*/ + if (client->GetVersion() >= 64644) { + packet->setDataByName("unknown3a", 12598924); + packet->setDataByName("unknown3b", 3992452959); + packet->setDataByName("unknown3c", 4294967183); + packet->setDataByName("unknown2a", 9); + packet->setDataByName("unknown2b", 9); + } + else if (client->GetVersion() >= 63181) { + packet->setDataByName("unknown3a", 750796556);//63182 73821356 + packet->setDataByName("unknown3b", 3991404383);// 63182 3991404383 + packet->setDataByName("unknown3c", 4278189967);// 63182 4278189967 + packet->setDataByName("unknown2a", 8);// 63182 + packet->setDataByName("unknown2b", 8);// 63182 + + } + else{ + //packet->setDataByName("unknown3", 872447025,0);//63181 + //packet->setDataByName("unknown3", 3085434875,1);// 63181 + //packet->setDataByName("unknown3", 2147483633,2);// 63181 + } + + packet->setDataByName("year", world.GetWorldTimeStruct()->year); + packet->setDataByName("month", world.GetWorldTimeStruct()->month); + packet->setDataByName("day", world.GetWorldTimeStruct()->day); + packet->setDataByName("hour", world.GetWorldTimeStruct()->hour); + packet->setDataByName("minute", world.GetWorldTimeStruct()->minute); + packet->setDataByName("unknown", 0); + packet->setDataByName("unknown7", 1); + packet->setDataByName("unknown7", 1, 1); + + packet->setDataByName("unknown9", 13); + //packet->setDataByName("unknown10", 25188959);4294967295 + //packet->setDataByName("unknown10", 25190239); + packet->setDataByName("unknown10", 25191524);//25191524 + packet->setDataByName("unknown10b", 1); + packet->setDataByName("permission_level",3);// added on 63182 for now till we figur it out 0=none,1=visitor,2=friend,3=trustee,4=owner + packet->setDataByName("num_adv", 9); + + packet->setArrayDataByName("adv_name", "adv02_dun_drowned_caverns", 0); + packet->setArrayDataByName("adv_id", 6, 0); + packet->setArrayDataByName("adv_name", "adv02_dun_sundered_splitpaw_hub", 1); + packet->setArrayDataByName("adv_id", 5, 1); + packet->setArrayDataByName("adv_name", "exp03_rgn_butcherblock", 2); + packet->setArrayDataByName("adv_id", 8, 2); + packet->setArrayDataByName("adv_name", "exp03_rgn_greater_faydark", 3); + packet->setArrayDataByName("adv_id", 7, 3); + packet->setArrayDataByName("adv_name", "mod01_dun_crypt_of_thaen", 4); + packet->setArrayDataByName("adv_id", 3, 4); + packet->setArrayDataByName("adv_name", "mod01_dun_tombs_of_night", 5); + packet->setArrayDataByName("adv_id", 4, 5); + packet->setArrayDataByName("adv_name", "nektulos_mini01", 6); + packet->setArrayDataByName("adv_id", 0, 6); + packet->setArrayDataByName("adv_name", "nektulos_mini02", 7); + packet->setArrayDataByName("adv_id", 1, 7); + packet->setArrayDataByName("adv_name", "nektulos_mini03", 8); + packet->setArrayDataByName("adv_id", 2, 8); + + + + + LogWrite(MISC__TODO, 0, "TODO", "Put cl_ client commands back in variables (not Rules) so they can be dynamically maintained"); + vector* variables = world.GetClientVariables(); + packet->setArrayLengthByName("num_client_setup", variables->size()); + for(int i=variables->size()-1;i>=0;i--) + packet->setArrayDataByName("client_cmds", variables->at(i)->GetNameValuePair().c_str(), i); + safe_delete(variables); + //packet->setDataByName("unknown8", ); story? + // AA Tabs for 1193+ clients + if (client->GetVersion() >= 1193) { + packet->setArrayLengthByName("tab_count", 48); + int8 i = 0; + packet->setArrayDataByName("tab_index", i, i); + packet->setArrayDataByName("tab_name", ":es24a58bd8fcaac8c2:All", i); + + i++; + packet->setArrayDataByName("tab_index", i, i); + packet->setArrayDataByName("tab_name", ":410385c727bd47a6:Racial Innate", i); + + i++; + packet->setArrayDataByName("tab_index", i, i); + packet->setArrayDataByName("tab_name", ":410385c75a96e23c:Tradeskill Advancement", i); + + i++; + packet->setArrayDataByName("tab_index", i, i); + packet->setArrayDataByName("tab_name", ":410385c744f1fd99:Focus Effects", i); + + i++; + packet->setArrayDataByName("tab_index", i, i); + packet->setArrayDataByName("tab_name", ":410385c71edd2a66:Heroic", i); + + i++; + packet->setArrayDataByName("tab_index", i, i); + packet->setArrayDataByName("tab_name", ":410385c76ee6239f:Shadows", i); + + i++; + packet->setArrayDataByName("tab_index", i, i); + packet->setArrayDataByName("tab_name", ":410385c7e678b977:Prestige", i); + + i++; + packet->setArrayDataByName("tab_index", i, i); + packet->setArrayDataByName("tab_name", ":410385c77ee422d7:Animalist", i); + + i++; + packet->setArrayDataByName("tab_index", i, i); + packet->setArrayDataByName("tab_name", ":410385c7f165af77:Bard", i); + + i++; + packet->setArrayDataByName("tab_index", i, i); + packet->setArrayDataByName("tab_name", ":410385c7421b9375:Brawler", i); + + i++; + packet->setArrayDataByName("tab_index", i, i); + packet->setArrayDataByName("tab_name", ":410385c7a03ae7d1:Cleric", i); + + i++; + packet->setArrayDataByName("tab_index", i, i); + packet->setArrayDataByName("tab_name", ":410385c7c9605e9f:Crusader", i); + + i++; + packet->setArrayDataByName("tab_index", i, i); + packet->setArrayDataByName("tab_name", ":410385c7f9424168:Druid", i); + + i++; + packet->setArrayDataByName("tab_index", i, i); + packet->setArrayDataByName("tab_name", ":410385c79cb9556c:Enchanter", i); + + i++; + packet->setArrayDataByName("tab_index", i, i); + packet->setArrayDataByName("tab_name", ":410385c70c8b6aa4:Predator", i); + + i++; + packet->setArrayDataByName("tab_index", i, i); + packet->setArrayDataByName("tab_name", ":410385c73a43b6dd:Rogue", i); + + i++; + packet->setArrayDataByName("tab_index", i, i); + packet->setArrayDataByName("tab_name", ":410385c759fe7d15:Sorcerer", i); + + i++; + packet->setArrayDataByName("tab_index", i, i); + packet->setArrayDataByName("tab_name", ":410385c7ad610aca:Summoner", i); + + i++; + packet->setArrayDataByName("tab_index", i, i); + packet->setArrayDataByName("tab_name", ":410385c71e056728:Warrior", i); + + i++; + packet->setArrayDataByName("tab_index", i, i); + packet->setArrayDataByName("tab_name", ":410385c7ba864c0b:Assassin", i); + + i++; + packet->setArrayDataByName("tab_index", i, i); + packet->setArrayDataByName("tab_name", ":410385c7b8116aad:Beastlord", i); + + i++; + packet->setArrayDataByName("tab_index", i, i); + packet->setArrayDataByName("tab_name", ":410385c7f53feb7b:Berserker", i); + + i++; + packet->setArrayDataByName("tab_index", i, i); + packet->setArrayDataByName("tab_name", ":410385c73d8a70e2:Brigand", i); + + i++; + packet->setArrayDataByName("tab_index", i, i); + packet->setArrayDataByName("tab_name", ":410385c770c766d6:Bruiser", i); + + i++; + packet->setArrayDataByName("tab_index", i, i); + packet->setArrayDataByName("tab_name", ":410385c79226984b:Coercer", i); + + i++; + packet->setArrayDataByName("tab_index", i, i); + packet->setArrayDataByName("tab_name", ":410385c70c58bb30:Conjurer", i); + + i++; + packet->setArrayDataByName("tab_index", i, i); + packet->setArrayDataByName("tab_name", ":410385c73dfe68d0:Defiler", i); + + i++; + packet->setArrayDataByName("tab_index", i, i); + packet->setArrayDataByName("tab_name", ":410385c792919a6b:Dirge", i); + + i++; + packet->setArrayDataByName("tab_index", i, i); + packet->setArrayDataByName("tab_name", ":410385c7062e5f55:Fury", i); + + i++; + packet->setArrayDataByName("tab_index", i, i); + packet->setArrayDataByName("tab_name", ":410385c762c1fdfc:Guardian", i); + + i++; + packet->setArrayDataByName("tab_index", i, i); + packet->setArrayDataByName("tab_name", ":410385c78addfbf4:Illusionist", i); + + i++; + packet->setArrayDataByName("tab_index", i, i); + packet->setArrayDataByName("tab_name", ":410385c7ece054a7:Inquisitor", i); + + i++; + packet->setArrayDataByName("tab_index", i, i); + packet->setArrayDataByName("tab_name", ":410385c7d550d2e7:Monk", i); + + i++; + packet->setArrayDataByName("tab_index", i, i); + packet->setArrayDataByName("tab_name", ":410385c743cfeaa2:Mystic", i); + + i++; + packet->setArrayDataByName("tab_index", i, i); + packet->setArrayDataByName("tab_name", ":410385c7f63c9c8c:Necromancer", i); + + i++; + packet->setArrayDataByName("tab_index", i, i); + packet->setArrayDataByName("tab_name", ":410385c70c5de0ae:Paladin", i); + + i++; + packet->setArrayDataByName("tab_index", i, i); + packet->setArrayDataByName("tab_name", ":410385c79bc97b3a:Ranger", i); + + i++; + packet->setArrayDataByName("tab_index", i, i); + packet->setArrayDataByName("tab_name", ":410385c78fbd2256:Shadowknight", i); + + i++; + packet->setArrayDataByName("tab_index", i, i); + packet->setArrayDataByName("tab_name", ":410385c7781cc625:Shaman", i); + + i++; + packet->setArrayDataByName("tab_index", i, i); + packet->setArrayDataByName("tab_name", ":410385c77eecdcdb:Swashbuckler", i); + + i++; + packet->setArrayDataByName("tab_index", i, i); + packet->setArrayDataByName("tab_name", ":410385c7648d181e:Templar", i); + + i++; + packet->setArrayDataByName("tab_index", i, i); + packet->setArrayDataByName("tab_name", ":410385c78df47d77:Troubador", i); + + i++; + packet->setArrayDataByName("tab_index", i, i); + packet->setArrayDataByName("tab_name", ":410385c7c78ce0b8:Warden", i); + + i++; + packet->setArrayDataByName("tab_index", i, i); + packet->setArrayDataByName("tab_name", ":410385c76290dcfa:Warlock", i); + + i++; + packet->setArrayDataByName("tab_index", i, i); + packet->setArrayDataByName("tab_name", ":410385c7d1d52cf5:Wizard", i); + + i++; + packet->setArrayDataByName("tab_index", i, i); + packet->setArrayDataByName("tab_name", ":410385c71c8f6f4d:Shaper", i); + + i++; + packet->setArrayDataByName("tab_index", i, i); + packet->setArrayDataByName("tab_name", ":410385c72f6e354d:Channeler", i); + + i++; + packet->setArrayDataByName("tab_index", i, i); + packet->setArrayDataByName("tab_name", ":410385c7df8bd37d:Dragon", i); + } + packet->setDataByName("unknown_mj", 1);//int8 + packet->setDataByName("unknown_mj1", 335544320);//int32 + packet->setDataByName("unknown_mj2", 4);//int32 + packet->setDataByName("unknown_mj3", 3962504088);//int32 + packet->setDataByName("unknown_mj4", 3985947216);//int32 + packet->setDataByName("unknown_mj5", 1);//int32 + packet->setDataByName("unknown_mj6", 386);//int32 + packet->setDataByName("unknown_mj7", 4294967295);//int32 + packet->setDataByName("unknown_mj8", 2716312211);//int32 + packet->setDataByName("unknown_mj9", 1774338333);//int32 + packet->setDataByName("unknown_mj10", 1);//int32 + packet->setDataByName("unknown_mj11", 391);//int32 + packet->setDataByName("unknown_mj12", 4294967295);//int32 + packet->setDataByName("unknown_mj13", 3168965163);//int32 + packet->setDataByName("unknown_mj14", 4117025286);//int32 + packet->setDataByName("unknown_mj15", 1);//int32 + packet->setDataByName("unknown_mj16", 394);//int32 + packet->setDataByName("unknown_mj17", 4294967295);//int32 + packet->setDataByName("unknown_mj18", 1790669110);//int32 + packet->setDataByName("unknown_mj19", 107158108);//int32 + packet->setDataByName("unknown_mj20", 1);//int32 + packet->setDataByName("unknown_mj21", 393);//int32 + packet->setDataByName("unknown_mj22", 4294967295);//int32 + + EQ2Packet* outapp = packet->serialize(); + //packet->PrintPacket(); + //DumpPacket(outapp); + safe_delete(packet); + return outapp; +} + +void ZoneServer::SendUpdateDefaultCommand(Spawn* spawn, const char* command, float distance){ + Client* client = 0; + PacketStruct* packet = 0; + vector::iterator client_itr; + + MClientList.readlock(__FUNCTION__, __LINE__); + for (client_itr = clients.begin(); client_itr != clients.end(); client_itr++) { + client = *client_itr; + if(client && client->GetPlayer()->WasSentSpawn(spawn->GetID()) && client->GetPlayer()->WasSpawnRemoved(spawn) == false){ + packet = configReader.getStruct("WS_SetDefaultCommand", client->GetVersion()); + if(packet){ + packet->setDataByName("spawn_id", client->GetPlayer()->GetIDWithPlayerSpawn(spawn)); + packet->setMediumStringByName("command_name", command); + packet->setDataByName("distance", distance); + client->QueuePacket(packet->serialize()); + safe_delete(packet); + } + } + spawn->SetPrimaryCommand(command, command, distance); + } + MClientList.releasereadlock(__FUNCTION__, __LINE__); +} + +void ZoneServer::CheckPlayerProximity(Spawn* spawn, Client* client){ + if(player_proximities.count(spawn->GetID()) > 0){ + PlayerProximity* prox = player_proximities.Get(spawn->GetID()); + if(prox->clients_in_proximity.count(client) == 0 && spawn_range_map.count(client) > 0 && spawn_range_map.Get(client)->count(spawn->GetID()) > 0 && spawn_range_map.Get(client)->Get(spawn->GetID()) < prox->distance){ + prox->clients_in_proximity[client] = true; + CallSpawnScript(spawn, SPAWN_SCRIPT_CUSTOM, client->GetPlayer(), prox->in_range_lua_function.c_str()); + } + else if(prox->clients_in_proximity.count(client) > 0 && spawn_range_map.count(client) > 0 && spawn_range_map.Get(client)->count(spawn->GetID()) > 0 && spawn_range_map.Get(client)->Get(spawn->GetID()) > prox->distance){ + if(prox->leaving_range_lua_function.length() > 0) + CallSpawnScript(spawn, SPAWN_SCRIPT_CUSTOM, client->GetPlayer(), prox->leaving_range_lua_function.c_str()); + prox->clients_in_proximity.erase(client); + } + } +} + +void ZoneServer::AddPlayerProximity(Spawn* spawn, float distance, string in_range_function, string leaving_range_function){ + RemovePlayerProximity(spawn); + PlayerProximity* prox = new PlayerProximity; + prox->distance = distance; + prox->in_range_lua_function = in_range_function; + prox->leaving_range_lua_function = leaving_range_function; + player_proximities.Put(spawn->GetID(), prox); +} + +void ZoneServer::RemovePlayerProximity(Client* client){ + PlayerProximity* prox = 0; + MutexMap::iterator itr = player_proximities.begin(); + while(itr.Next()){ + prox = itr->second; + if(prox->clients_in_proximity.count(client) > 0) + prox->clients_in_proximity.erase(client); + } +} + +void ZoneServer::RemovePlayerProximity(Spawn* spawn, bool all){ + if(all){ + MutexMap::iterator itr = player_proximities.begin(); + while(itr.Next()){ + player_proximities.erase(itr->first, false, true, 10000); + } + } + else if(player_proximities.count(spawn->GetID()) > 0){ + player_proximities.erase(spawn->GetID(), false, true, 10000); + } +} + +void ZoneServer::AddLocationProximity(float x, float y, float z, float max_variation, string in_range_function, string leaving_range_function) { + LocationProximity* prox = new LocationProximity; + prox->x = x; + prox->y = y; + prox->z = z; + prox->max_variation = max_variation; + prox->in_range_lua_function = in_range_function; + prox->leaving_range_lua_function = leaving_range_function; + location_proximities.Add(prox); +} + +void ZoneServer::CheckLocationProximity() { + const char* zone_script = world.GetZoneScript(this->GetZoneID()); + if (!zone_script) + return; + + if (location_proximities.size() > 0 && connected_clients.size() > 0) { + Client* client = 0; + MutexList::iterator iterator = connected_clients.begin(); + while(iterator.Next()){ + client = iterator->value; + if (client->IsConnected() && client->IsReadyForSpawns() && !client->IsZoning()) { + try { + MutexList::iterator itr = location_proximities.begin(); + LocationProximity* prox = 0; + while(itr.Next()){ + prox = itr->value; + bool in_range = false; + float char_x = client->GetPlayer()->GetX(); + float char_y = client->GetPlayer()->GetY(); + float char_z = client->GetPlayer()->GetZ(); + float x = prox->x; + float y = prox->y; + float z = prox->z; + float max_variation = prox->max_variation; + float total_diff = 0; + float diff = x - char_x; //Check X + if(diff < 0) + diff *= -1; + if(diff <= max_variation) { + total_diff += diff; + diff = z - char_z; //Check Z (we check Z first because it is far more likely to be a much greater variation than y) + if(diff < 0) + diff *= -1; + if(diff <= max_variation) { + total_diff += diff; + if(total_diff <= max_variation) { //Check Total + diff = y - char_y; //Check Y + if(diff < 0) + diff *= -1; + if(diff <= max_variation) { + total_diff += diff; + if(total_diff <= max_variation) { + in_range = true; + if(lua_interface && prox->in_range_lua_function.length() > 0 && prox->clients_in_proximity.count(client) == 0) { //Check Total + prox->clients_in_proximity[client] = true; + lua_interface->RunZoneScript(zone_script, prox->in_range_lua_function.c_str(), this, client->GetPlayer()); + } + } + } + } + } + } + if (!in_range) { + if(lua_interface && prox->leaving_range_lua_function.length() > 0 && prox->clients_in_proximity.count(client) > 0) { + lua_interface->RunZoneScript(zone_script, prox->leaving_range_lua_function.c_str(), this, client->GetPlayer()); + prox->clients_in_proximity.erase(client); + } + } + } + } + catch (...) { + LogWrite(ZONE__ERROR, 0, "Zone", "Except caught in ZoneServer::CheckLocationProximity"); + return; + } + } + } + } +} + +void ZoneServer::CheckLocationGrids() { + if (connected_clients.size() > 0 && location_grids.size() > 0) { + MutexList::iterator client_itr = connected_clients.begin(); + while (client_itr.Next()) { + Client* client = client_itr.value; + if (!client) + continue; + Player* player = client->GetPlayer(); + float x = player->GetX(); + float y = player->GetY(); + float z = player->GetZ(); + int32 grid_id = player->appearance.pos.grid_id; + MutexList::iterator location_grid_itr = location_grids.begin(); + while (location_grid_itr.Next()) { + LocationGrid* grid = location_grid_itr.value; + if (grid->locations.size() > 0 || /*(grid->grid_id == grid_id ||*/ grid->players.count(player) > 0) { + float x_small = 0; + float x_large = 0; + float y_small = 0; + float y_large = 0; + float z_small = 0; + float z_large = 0; + bool first = true; + bool in_grid = false; + MutexList::iterator location_itr = grid->locations.begin(); + while (location_itr.Next()) { + Location* location = location_itr.value; + if (first) { + x_small = location->x; + x_large = location->x; + if (grid->include_y) { + y_small = location->y; + y_large = location->y; + } + z_small = location->z; + z_large = location->z; + first = false; + } + else { + if (location->x < x_small) + x_small = location->x; + else if (location->x > x_large) + x_large = location->x; + if (grid->include_y) { + if (location->y < y_small) + y_small = location->y; + else if (location->y > y_large) + y_large = location->y; + } + if (location->z < z_small) + z_small = location->z; + else if (location->z > z_large) + z_large = location->z; + } + } + if (grid->include_y && (x >= x_small && x <= x_large && y >= y_small && y <= y_large && z >= z_small && z <= z_large)) + in_grid = true; + else if (x >= x_small && x <= x_large && z >= z_small && z <= z_large) + in_grid = true; + if (in_grid && grid->players.count(player) == 0) { + grid->players.Put(player, true); + + bool show_enter_location_popup = true; + bool discovery_enabled = rule_manager.GetGlobalRule(R_World, EnablePOIDiscovery)->GetBool(); + + if( grid->discovery && discovery_enabled && !player->DiscoveredLocation(grid->id) ) + { + // check if player has already discovered this location + + // if not, process new discovery + char tmp[200] = {0}; + sprintf(tmp, "\\#FFE400You have discovered\12\\#FFF283%s", grid->name.c_str()); + client->SendPopupMessage(11, tmp, "ui_discovery", 2.25, 0xFF, 0xFF, 0xFF); + LogWrite(ZONE__DEBUG, 0, "Zone", "Player '%s' discovered location '%s' (%u)", player->GetName(), grid->name.c_str(), grid->id); + + player->UpdatePlayerHistory(HISTORY_TYPE_DISCOVERY, HISTORY_SUBTYPE_LOCATION, grid->id); + show_enter_location_popup = false; + + // else, print standard location entry + } + + if( show_enter_location_popup ) + { + LogWrite(ZONE__DEBUG, 0, "Zone", "Player '%s' entering location '%s' (%u)", player->GetName(), grid->name.c_str(), grid->id); + client->SendPopupMessage(10, grid->name.c_str(), 0, 2.5, 255, 255, 0); + } + } + else if (!in_grid && grid->players.count(player) > 0) { + LogWrite(ZONE__DEBUG, 0, "Zone", "Player '%s' leaving location '%s' (%u)", player->GetName(), grid->name.c_str(), grid->id); + grid->players.erase(player); + } + } + } + } + } +} + +// Called from a command (client, main zone thread) and the main zone thread +// so no need for a mutex container +void ZoneServer::AddLocationGrid(LocationGrid* grid) { + if (grid) + location_grids.Add(grid); +} + +void ZoneServer::RemoveLocationGrids() { + MutexList::iterator itr = location_grids.begin(); + while (itr.Next()) + itr.value->locations.clear(true); + location_grids.clear(true); +} + +void ZoneServer::RemoveSpellTimersFromSpawn(Spawn* spawn, bool remove_all, bool delete_recast){ + if(spellProcess) + spellProcess->RemoveSpellTimersFromSpawn(spawn, remove_all, delete_recast); +} + +void ZoneServer::Interrupted(Entity* caster, Spawn* interruptor, int16 error_code, bool cancel, bool from_movement){ + if(spellProcess) + spellProcess->Interrupted(caster, interruptor, error_code, cancel, from_movement); +} + +Spell* ZoneServer::GetSpell(Entity* caster){ + Spell* spell = 0; + if(spellProcess) + spell = spellProcess->GetSpell(caster); + return spell; +} + +void ZoneServer::ProcessSpell(Spell* spell, Entity* caster, Spawn* target, bool lock, bool harvest_spell){ + if(spellProcess) + spellProcess->ProcessSpell(this, spell, caster, target, lock, harvest_spell); +} + +void ZoneServer::ProcessEntityCommand(EntityCommand* entity_command, Entity* caster, Spawn* target, bool lock) { + if (spellProcess) + spellProcess->ProcessEntityCommand(this, entity_command, caster, target, lock); +} + +void ZoneServer::RemoveSpawnSupportFunctions(Spawn* spawn) { + if(!spawn) + return; + + LogWrite(ZONE__DEBUG, 7, "Zone", "Processing RemoveSpawnSupportFunctions..."); + + if(spawn->IsEntity()) + RemoveSpellTimersFromSpawn((Entity*)spawn, true); + + RemoveDamagedSpawn(spawn); + spawn->SendSpawnChanges(false); + RemoveChangedSpawn(spawn); + + // Everything inside this if will be nuked during a reload in other spots, no need to do it twice + if (!reloading) { + RemoveDeadEnemyList(spawn); + + spawn->changed = true; + spawn->info_changed = true; + spawn->vis_changed = true; + spawn->position_changed = true; + SendSpawnChanges(spawn); + + if (spawn->GetSpawnGroupID() > 0) { + int32 group_id = spawn->GetSpawnGroupID(); + spawn->RemoveSpawnFromGroup(); + if (spawn_group_map.count(group_id) > 0) + spawn_group_map.Get(group_id).Remove(spawn->GetID()); + } + + if (!spawn->IsPlayer()) { + if(quick_database_id_lookup.count(spawn->GetDatabaseID()) > 0) + quick_database_id_lookup.erase(spawn->GetDatabaseID()); + } + + RemoveHeadingTimer(spawn); + DeleteSpawnScriptTimers(spawn); + RemovePlayerProximity(spawn); + } + + // We don't use RemoveMovementNPC() here as it caused a hell of a delay during reloads + // instead we remove it from the list directly + if (spawn->IsNPC()) + movement_spawns.erase(spawn->GetID()); +} + +void ZoneServer::HandleEmote(Client* originator, string name) { + if (!originator) { + LogWrite(ZONE__ERROR, 0, "Zone", "HandleEmote called with an invalid client"); + return; + } + + Client* client = 0; + Emote* emote = visual_states.FindEmote(name); + if(!emote){ + originator->Message(CHANNEL_COLOR_YELLOW, "Unable to find emote '%s'. If this should be a valid emote be sure to submit a /bug report.", name.c_str()); + return; + } + PacketStruct* packet = 0; + char* emoteResponse = 0; + vector::iterator client_itr; + + MClientList.readlock(__FUNCTION__, __LINE__); + for (client_itr = clients.begin(); client_itr != clients.end(); client_itr++) { + client = *client_itr; + if(!client || (client && client->GetPlayer()->IsIgnored(originator->GetPlayer()->GetName()))) + continue; + packet = configReader.getStruct("WS_CannedEmote", client->GetVersion()); + if(packet){ + packet->setDataByName("spawn_id" , client->GetPlayer()->GetIDWithPlayerSpawn(originator->GetPlayer())); + if(!emoteResponse){ + string message; + if(originator->GetPlayer()->GetTarget() && originator->GetPlayer()->GetTarget()->GetID() != originator->GetPlayer()->GetID()){ + message = emote->GetTargetedMessageString(); + if(message.find("%t") < 0xFFFFFFFF) + message.replace(message.find("%t"), 2, originator->GetPlayer()->GetTarget()->GetName()); + } + if(message.length() == 0) + message = emote->GetMessageString(); + if(message.find("%g1") < 0xFFFFFFFF){ + if(originator->GetPlayer()->GetGender() == 1) + message.replace(message.find("%g1"), 3, "his"); + else + message.replace(message.find("%g1"), 3, "her"); + } + if(message.find("%g2") < 0xFFFFFFFF){ + if(originator->GetPlayer()->GetGender() == 1) + message.replace(message.find("%g2"), 3, "him"); + else + message.replace(message.find("%g2"), 3, "her"); + } + if(message.find("%g3") < 0xFFFFFFFF){ + if(originator->GetPlayer()->GetGender() == 1) + message.replace(message.find("%g3"), 3, "he"); + else + message.replace(message.find("%g3"), 3, "she"); + } + if(message.length() > 0){ + emoteResponse = new char[message.length() + strlen(originator->GetPlayer()->GetName()) + 10]; + sprintf(emoteResponse,"%s %s", originator->GetPlayer()->GetName(), message.c_str()); + } + else{ + originator->Message(CHANNEL_COLOR_YELLOW, "%s is not properly configured, be sure to submit a /bug report.", name.c_str()); + safe_delete(packet); + break; + } + } + packet->setMediumStringByName("emote_msg", emoteResponse); + packet->setDataByName("anim_type", emote->GetVisualState()); + client->QueuePacket(packet->serialize()); + safe_delete(packet); + safe_delete_array(emoteResponse); + } + } + MClientList.releasereadlock(__FUNCTION__, __LINE__); +} + + +void ZoneServer::SetupInstance(int32 createdInstanceID) { + if ( createdInstanceID == 0 ) // if this happens that isn't good! + instanceID = ++MinInstanceID; + else // db should pass the good ID + instanceID = createdInstanceID; +} + +void ZoneServer::RemoveDeadSpawn(Spawn* spawn){ + AddDeadSpawn(spawn, 0); +} + +void ZoneServer::AddDeadSpawn(Spawn* spawn, int32 timer){ + MDeadSpawns.writelock(__FUNCTION__, __LINE__); + if (dead_spawns.count(spawn->GetID()) > 0) + dead_spawns[spawn->GetID()] = Timer::GetCurrentTime2() + timer; + else if(timer != 0xFFFFFFFF) + dead_spawns.insert(make_pair(spawn->GetID(), Timer::GetCurrentTime2() + timer)); + else{ + if(spawn->IsEntity() && ((Entity*)spawn)->HasLoot()){ + dead_spawns.insert(make_pair(spawn->GetID(), Timer::GetCurrentTime2() + (15000 * spawn->GetLevel() + 240000))); + SendUpdateDefaultCommand(spawn, "loot", 10); + } + else + dead_spawns.insert(make_pair(spawn->GetID(), Timer::GetCurrentTime2() + 10000)); + } + MDeadSpawns.releasewritelock(__FUNCTION__, __LINE__); +} + +void ZoneServer::WritePlayerStatistics() { + MutexList::iterator client_itr = connected_clients.begin(); + while(client_itr.Next()) + client_itr->value->GetPlayer()->WritePlayerStatistics(); +} + +void ZoneServer::AddPlayerTracking(Player* player) { + if (player && !player->GetIsTracking() && players_tracking.count(player->GetDatabaseID()) == 0) { + Client* client = GetClientBySpawn(player); + if (client) { + PacketStruct* packet = configReader.getStruct("WS_TrackingUpdate", client->GetVersion()); + if (packet) { + player->SetIsTracking(true); + players_tracking.Put(client->GetCharacterID(), player); + packet->setDataByName("mode", TRACKING_START); + packet->setDataByName("type", TRACKING_TYPE_ENTITIES); + client->QueuePacket(packet->serialize()); + safe_delete(packet); + } + } + } +} + +void ZoneServer::RemovePlayerTracking(Player* player, int8 mode) { + if (player && player->GetIsTracking()) { + Client* client = GetClientBySpawn(player); + if (client) { + PacketStruct* packet = configReader.getStruct("WS_TrackingUpdate", client->GetVersion()); + if (packet) { + player->SetIsTracking(false); + players_tracking.erase(client->GetCharacterID()); + packet->setDataByName("mode", mode); + packet->setDataByName("type", TRACKING_TYPE_ENTITIES); + client->QueuePacket(packet->serialize()); + safe_delete(packet); + } + } + } +} + +void ZoneServer::ProcessTracking() { + MutexMap::iterator itr = players_tracking.begin(); + while (itr.Next()) + ProcessTracking(GetClientBySpawn(itr->second)); +} + +void ZoneServer::ProcessTracking(Client* client) { + if (!client) + return; + + Player* player = client->GetPlayer(); + if (player && player->GetIsTracking()) { + MutexMap::iterator spawn_itr; + PacketStruct* packet = configReader.getStruct("WS_TrackingUpdate", client->GetVersion()); + if (packet) { + packet->setDataByName("mode", TRACKING_UPDATE); + packet->setDataByName("type", TRACKING_TYPE_ENTITIES); + vector spawns_tracked; + while (spawn_itr.Next()) { + Spawn* spawn = spawn_itr->second; + float distance = player->GetDistance(spawn); + if (spawn->IsEntity() && distance <= 80 && spawn != player) { + TrackedSpawn* ts = new TrackedSpawn; + ts->spawn = spawn; + ts->distance = distance; + + /* Add spawns in ascending order from closest to furthest */ + if (spawns_tracked.empty()) + spawns_tracked.push_back(ts); + else { + vector::iterator tracked_itr; + bool added = false; + for (tracked_itr = spawns_tracked.begin(); tracked_itr != spawns_tracked.end(); tracked_itr++) { + TrackedSpawn* cur_ts = *tracked_itr; + if (ts->distance <= cur_ts->distance) { + spawns_tracked.insert(tracked_itr, ts); + added = true; + break; + } + } + if (!added) + spawns_tracked.push_back(ts); + } + } + } + packet->setArrayLengthByName("num_spawns", spawns_tracked.size()); + for (int32 i = 0; i < spawns_tracked.size(); i++) { + TrackedSpawn* ts = spawns_tracked[i]; + + LogWrite(ZONE__DEBUG, 0, "Zone", "%s (%f)", ts->spawn->GetName(), ts->distance); + + packet->setArrayDataByName("spawn_id", player->GetIDWithPlayerSpawn(ts->spawn), i); + packet->setArrayDataByName("spawn_name", ts->spawn->GetName(), i); + if (ts->spawn->IsPlayer()) + packet->setArrayDataByName("spawn_type", TRACKING_SPAWN_TYPE_PC, i); + else + packet->setArrayDataByName("spawn_type", TRACKING_SPAWN_TYPE_NPC, i); + packet->setArrayDataByName("spawn_con_color", player->GetArrowColor(ts->spawn->GetLevel()), i); + } + packet->setArrayLengthByName("num_array1", 0); + //for (int32 i = 0; i < spawns_tracked.size(); i++) { + //} + packet->setArrayLengthByName("num_spawns2", spawns_tracked.size()); + for (int32 i = 0; i < spawns_tracked.size(); i++) { + TrackedSpawn* ts = spawns_tracked[i]; + packet->setArrayDataByName("list_spawn_id", player->GetIDWithPlayerSpawn(ts->spawn), i); + packet->setArrayDataByName("list_number", i, i); + } + client->QueuePacket(packet->serialize()); + safe_delete(packet); + for (int32 i = 0; i < spawns_tracked.size(); i++) + safe_delete(spawns_tracked[i]); + } + } +} + +void ZoneServer::SendEpicMobDeathToGuild(Player* killer, Spawn* victim) { + if (killer && victim) { + + LogWrite(MISC__TODO, 1, "TODO" , "Check if player is in raid\n\t(%s, function: %s, line #: %i)", __FILE__, __FUNCTION__, __LINE__); + + if (killer->GetGroupMemberInfo()) { + world.GetGroupManager()->GroupLock(__FUNCTION__, __LINE__); + + deque::iterator itr; + deque* members = world.GetGroupManager()->GetGroupMembers(killer->GetGroupMemberInfo()->group_id); + for (itr = members->begin(); itr != members->end(); itr++) { + GroupMemberInfo* gmi = *itr; + if (gmi->client) { + Player* group_member = gmi->client->GetPlayer(); + if (group_member->GetGuild()) { + Guild* guild = group_member->GetGuild(); + string message = Guild::GetEpicMobDeathMessage(group_member->GetName(), victim->GetName()); + guild->AddNewGuildEvent(GUILD_EVENT_KILLS_EPIC_MONSTER, message.c_str(), Timer::GetUnixTimeStamp()); + guild->SendMessageToGuild(GUILD_EVENT_KILLS_EPIC_MONSTER, message.c_str()); + } + } + } + + world.GetGroupManager()->ReleaseGroupLock(__FUNCTION__, __LINE__); + } + else if (killer->GetGuild()) { + Guild* guild = killer->GetGuild(); + string message = Guild::GetEpicMobDeathMessage(killer->GetName(), victim->GetName()); + guild->AddNewGuildEvent(GUILD_EVENT_KILLS_EPIC_MONSTER, message.c_str(), Timer::GetUnixTimeStamp()); + guild->SendMessageToGuild(GUILD_EVENT_KILLS_EPIC_MONSTER, message.c_str()); + } + } +} + +void ZoneServer::ProcessAggroChecks(Spawn* spawn) { + // If faction based combat is not allowed then no need to run the loops so just return out + if(!rule_manager.GetGlobalRule(R_Faction, AllowFactionBasedCombat)->GetBool()) + return; + + if (spawn && spawn->IsNPC() && spawn->Alive()) + CheckEnemyList((NPC*)spawn); +} + +void ZoneServer::SendUpdateTitles(Client *client, Title *suffix, Title *prefix) { + assert(client); + SendUpdateTitles(client->GetPlayer(), suffix, prefix); +} + +void ZoneServer::SendUpdateTitles(Spawn *spawn, Title *suffix, Title *prefix) { + if (!spawn) + return; + + vector::iterator itr; + PacketStruct *packet; + Client* current_client; + + MClientList.readlock(__FUNCTION__, __LINE__); + for (itr = clients.begin(); itr != clients.end(); itr++) { + current_client = *itr; + + if (!(packet = configReader.getStruct("WS_UpdateTitle", current_client->GetVersion()))) + break; + + packet->setDataByName("player_id", current_client->GetPlayer()->GetIDWithPlayerSpawn(spawn)); + packet->setDataByName("player_name", spawn->GetName()); + packet->setDataByName("unknown1", 1, 1); + if(suffix) + packet->setDataByName("suffix_title", suffix->GetName()); + else + packet->setDataByName("suffix_title", spawn->GetSuffixTitle()); + if(prefix) + packet->setDataByName("prefix_title", prefix->GetName()); + else + packet->setDataByName("prefix_title", spawn->GetPrefixTitle()); + packet->setDataByName("last_name", spawn->GetLastName()); + packet->setDataByName("sub_title", spawn->GetSubTitle()); + current_client->QueuePacket(packet->serialize()); + safe_delete(packet); + } + MClientList.releasereadlock(__FUNCTION__, __LINE__); +} + +void ZoneServer::AddTransportSpawn(Spawn* spawn){ + if(!spawn) + return; + MTransportSpawns.writelock(__FUNCTION__, __LINE__); + transport_spawns.push_back(spawn->GetID()); + MTransportSpawns.releasewritelock(__FUNCTION__, __LINE__); +} + +Spawn* ZoneServer::GetClosestTransportSpawn(float x, float y, float z){ + Spawn* spawn = 0; + Spawn* closest_spawn = 0; + float closest_distance = 0.0; + MTransportSpawns.writelock(__FUNCTION__, __LINE__); + vector::iterator itr = transport_spawns.begin(); + while(itr != transport_spawns.end()){ + spawn = GetSpawnByID(*itr); + if(spawn){ + if(closest_distance == 0.0){ + closest_spawn = spawn; + closest_distance = spawn->GetDistance(x, y, z); + } + else if(spawn->GetDistance(x, y, z) < closest_distance){ + closest_spawn = spawn; + closest_distance = spawn->GetDistance(x, y, z); + } + itr++; + } + else + itr = transport_spawns.erase(itr); + } + MTransportSpawns.releasewritelock(__FUNCTION__, __LINE__); + + return closest_spawn; +} + +void ZoneServer::SetRain(float val) { + rain = val; + vector::iterator itr; + + MClientList.readlock(__FUNCTION__, __LINE__); + for (itr = clients.begin(); itr != clients.end(); itr++) { + Client* client = *itr; + client->GetPlayer()->GetInfoStruct()->rain = val; + client->GetPlayer()->SetCharSheetChanged(true); + if( val >= 0.75 && !weather_signaled ) + { + client->SimpleMessage(CHANNEL_COLOR_WHITE, "It starts to rain."); + } + else if( val < 0.75 && weather_signaled ) + { + client->SimpleMessage(CHANNEL_COLOR_WHITE, "It stops raining."); + } + } + MClientList.releasereadlock(__FUNCTION__, __LINE__); + + if (val >= 0.75 && !weather_signaled) { + weather_signaled = true; + ProcessSpawnConditional(SPAWN_CONDITIONAL_RAINING); + } + else if (val < 0.75 && weather_signaled) { + weather_signaled = false; + ProcessSpawnConditional(SPAWN_CONDITIONAL_NOT_RAINING); + } +} + +void ZoneServer::SetWind(float val) { + vector::iterator itr; + + MClientList.readlock(__FUNCTION__, __LINE__); + for (itr = clients.begin(); itr != clients.end(); itr++) { + Client* client = *itr; + client->GetPlayer()->GetInfoStruct()->wind = val; + client->GetPlayer()->SetCharSheetChanged(true); + } + MClientList.releasereadlock(__FUNCTION__, __LINE__); +} + +void ZoneServer::ProcessWeather() +{ + // if the global rule to disable weather is set, or if the `weather_allowed` field in the zone record == 0, do not process weather + if( !weather_enabled || !isWeatherAllowed() ) + return; + + LogWrite(ZONE__DEBUG, 1, "Zone", "%s: Processing weather changes", zone_name); + float new_weather = 0; + float weather_offset = 0; + bool change_weather = false; + + // check to see if it is time to change the weather according to weather_frequency (time between changes) + if( weather_last_changed_time <= (Timer::GetUnixTimeStamp() - weather_frequency) ) + { + LogWrite(ZONE__DEBUG, 2, "Zone", "%s: Checking for weather changes", zone_name); + // reset last changed time (frequency check) + weather_last_changed_time = Timer::GetUnixTimeStamp(); + + // this is the chance a weather change occurs at all at the expired interval + int8 weather_random = MakeRandomInt(1, 100); + LogWrite(ZONE__DEBUG, 2, "Zone", "%s: Chance to change weather: %i%%, rolled: %i%% - Change weather: %s", zone_name, weather_change_chance, weather_random, weather_random <= weather_change_chance ? "True" : "False"); + + if( weather_random <= weather_change_chance ) + { + change_weather = true; + weather_offset = weather_change_amount; + + if( weather_type == 3 ) // chaotic weather patterns, random weather between min/max + { + new_weather = MakeRandomFloat(weather_min_severity, weather_max_severity); + LogWrite(ZONE__DEBUG, 3, "Zone", "%s: Chaotic weather severity changed to %.2f", zone_name, new_weather); + weather_pattern = 2; + } + else if( weather_type == 2 ) // random weather patterns, combination of normal + dynamic + max_offset + { + weather_offset = MakeRandomFloat(weather_change_amount, weather_dynamic_offset); + LogWrite(ZONE__DEBUG, 3, "Zone", "%s: Random weather severity changed by %.2f", zone_name, weather_offset); + + int8 weather_alter = weather_change_chance / 10; // the divide is to prevent too many direction changes in a cycle + weather_random = MakeRandomInt(1, 100); // chance that the weather changes direction (weather_pattern) + + if( weather_random <= weather_alter ) + weather_pattern = ( weather_pattern == 0 ) ? 1 : 0; + } + else if( weather_type == 1 ) // dynamic weather patterns, weather may not reach min/max + { + int8 weather_alter = weather_change_chance / 10; // the divide is to prevent too many direction changes in a cycle + weather_random = MakeRandomInt(1, 100); // chance that the weather changes direction (weather_pattern) + + if( weather_random <= weather_alter ) + { + weather_pattern = ( weather_pattern == 0 ) ? 1 : 0; + LogWrite(ZONE__DEBUG, 3, "Zone", "%s: Dynamic weather pattern changed to %i", zone_name, weather_pattern); + } + } + else // normal weather patterns, weather starts at min, goes to max, then back down again + { + // do nothing (processed below) + LogWrite(ZONE__DEBUG, 3, "Zone", "%s: Normal weather severity changed by %.2f", zone_name, weather_offset); + } + + // when all done, change the weather + if( change_weather ) + { + if( weather_pattern == 1 ) + { + // weather is getting worse, til it reaches weather_max_severity + new_weather = ( weather_current_severity <= weather_max_severity ) ? weather_current_severity + weather_offset : weather_max_severity; + LogWrite(ZONE__DEBUG, 3, "Zone", "%s: Increased weather severity by %.2f", zone_name, weather_offset); + + if(new_weather > weather_max_severity) + { + new_weather = weather_max_severity - weather_offset; + weather_pattern = 0; + } + } + else if( weather_pattern == 0 ) + { + // weather is clearing up, til it reaches weather_min_severity + new_weather = ( weather_current_severity >= weather_min_severity ) ? weather_current_severity - weather_offset : weather_min_severity; + LogWrite(ZONE__DEBUG, 3, "Zone", "%s: Decreased weather severity by %.2f", zone_name, weather_offset); + + if(new_weather < weather_min_severity) + { + new_weather = weather_min_severity + weather_offset; + weather_pattern = 1; + } + } + + LogWrite(ZONE__DEBUG, 1, "Zone", "%s: Weather change triggered from %.2f to %.2f", zone_name, weather_current_severity, new_weather); + this->SetRain(new_weather); + weather_current_severity = new_weather; + } + } + } + else + LogWrite(ZONE__DEBUG, 1, "Zone", "%s: Not time to change weather yet", zone_name); +} + +void ZoneServer::HidePrivateSpawn(Spawn* spawn) { + if (!spawn->IsPrivateSpawn()) + return; + + Client* client = 0; + Player* player = 0; + PacketStruct* packet = 0; + MutexList::iterator itr = connected_clients.begin(); + while (itr->Next()) { + client = itr->value; + player = client->GetPlayer(); + if (player->WasSentSpawn(spawn->GetID()) && !player->WasSpawnRemoved(spawn)) { + packet = configReader.getStruct("WS_DestroyGhostCmd", client->GetVersion()); + SendRemoveSpawn(client, spawn, packet); + if(spawn_range_map.count(client) > 0) + spawn_range_map.Get(client)->erase(spawn->GetID()); + + if(player->GetTarget() == spawn) + player->SetTarget(0); + } + } +} + +SpawnLocation* ZoneServer::GetSpawnLocation(int32 id) { + SpawnLocation* ret = 0; + MSpawnLocationList.readlock(__FUNCTION__, __LINE__); + if (spawn_location_list.count(id) > 0) + ret = spawn_location_list[id]; + MSpawnLocationList.releasereadlock(__FUNCTION__, __LINE__); + return ret; +} + +void ZoneServer::PlayAnimation(Spawn* spawn, int32 visual_state, Spawn* spawn2, int8 hide_type){ + Client* client = 0; + PacketStruct* packet = 0; + Spawn* exclude_spawn = 0; + if (!spawn) + return; + if (spawn2){ + if(hide_type == 1){ + client = GetClientBySpawn(spawn2); + if(client){ + packet = configReader.getStruct("WS_CannedEmote", client->GetVersion()); + packet->setDataByName("spawn_id", client->GetPlayer()->GetIDWithPlayerSpawn(spawn)); + packet->setDataByName("anim_type", visual_state); + client->QueuePacket(packet->serialize()); + } + return; + } + if(hide_type == 2) + exclude_spawn = spawn2; + } + + vector::iterator client_itr; + + MClientList.readlock(__FUNCTION__, __LINE__); + for (client_itr = clients.begin(); client_itr != clients.end(); client_itr++) { + client = *client_itr; + if(spawn->GetDistance(client->GetPlayer()) > 50) + continue; + if(exclude_spawn == client->GetPlayer()) + continue; + + packet = configReader.getStruct("WS_CannedEmote", client->GetVersion()); + if (packet) { + packet->setDataByName("spawn_id", client->GetPlayer()->GetIDWithPlayerSpawn(spawn)); + packet->setDataByName("anim_type", visual_state); + client->QueuePacket(packet->serialize()); + safe_delete(packet); + } + } + MClientList.releasereadlock(__FUNCTION__, __LINE__); +} + +vector ZoneServer::GetSpawnsByID(int32 id) { + vector tmp_list; + Spawn* spawn; + + map::iterator itr; + MSpawnList.readlock(__FUNCTION__, __LINE__); + for (itr = spawn_list.begin(); itr != spawn_list.end(); itr++) { + spawn = itr->second; + if (spawn && (spawn->GetDatabaseID() == id)) + tmp_list.push_back(spawn); + } + MSpawnList.releasereadlock(__FUNCTION__, __LINE__); + + return tmp_list; +} + +vector ZoneServer::GetAttackableSpawnsByDistance(Spawn* caster, float distance) { + vector ret; + Spawn* spawn = 0; + map::iterator itr; + MSpawnList.readlock(__FUNCTION__, __LINE__); + for (itr = spawn_list.begin(); itr != spawn_list.end(); itr++) { + spawn = itr->second; + if (spawn && spawn->IsNPC() && spawn->appearance.attackable > 0 && spawn != caster && spawn->Alive() && spawn->GetDistance(caster, true) <= distance) + ret.push_back(spawn); + } + MSpawnList.releasereadlock(__FUNCTION__, __LINE__); + return ret; +} + +void ZoneServer::ResurrectSpawn(Spawn* spawn, Client* client) { + if(!client || !spawn) + return; + PendingResurrection* rez = client->GetCurrentRez(); + if(!rez || !rez->caster) + return; + + PacketStruct* packet = 0; + float power_perc = rez->mp_perc; + float health_perc = rez->hp_perc; + Spawn* caster_spawn = rez->caster; + sint32 heal_amt = 0; + sint32 power_amt = 0; + bool no_calcs = rez->no_calcs; + int8 crit_mod = rez->crit_mod; + Entity* caster = 0; + InfoStruct* info = 0; + bool crit = false; + string heal_spell = rez->heal_name; + int16 heal_packet_type = 0; + int16 power_packet_type = 0; + + //Calculations for how much to heal the spawn + if(health_perc > 0) + heal_amt = (spawn->GetTotalHP() * (health_perc / 100)); + if(power_perc > 0) + power_amt = (spawn->GetTotalPower() * (power_perc / 100)); + + if(caster_spawn->IsEntity()){ + caster = ((Entity*)caster_spawn); + info = caster->GetInfoStruct(); + } + + if(!no_calcs && caster){ + //Potency Mod + heal_amt *= ((caster->stats[ITEM_STAT_POTENCY] / 100) + 1); + power_amt *= ((caster->stats[ITEM_STAT_POTENCY] / 100) + 1); + + //Ability Mod + heal_amt += (int32)min((int32)info->ability_modifier, (int32)(heal_amt / 2)); + power_amt += (int32)min((int32)info->ability_modifier, (int32)(power_amt / 2)); + + if(!crit_mod || crit_mod == 1){ + if(crit_mod == 1) + crit = true; + else { + // Crit Roll + float chance = (float)max((float)0, (float)info->crit_chance); + crit = (MakeRandomFloat(0, 100) <= chance); + } + if(crit){ + //Apply total crit multiplier with crit bonus + heal_amt *= ((info->crit_bonus / 100) + 1.3); + power_amt *= ((info->crit_bonus / 100) + 1.3); + } + } + } + + //Set this rez as a crit to be passed to subspell (not yet used) + rez->crit = true; + + //Set Heal amt to 1 if 0 now so the player has health + if(heal_amt == 0) + heal_amt = 1; + + if(heal_amt > spawn->GetTotalHP()) + heal_amt = spawn->GetTotalHP(); + if(power_amt > spawn->GetTotalPower()) + power_amt = spawn->GetTotalPower(); + + spawn->SetHP(heal_amt); + if(power_amt > 0) + spawn->SetPower(power_amt); + + if(client && caster){ + EQ2Packet* move = ((Player*)spawn)->Move(caster->GetX(), caster->GetY(), caster->GetZ(), client->GetVersion()); + if(move) + client->QueuePacket(move); + } + + if(crit){ + power_packet_type = HEAL_PACKET_TYPE_CRIT_MANA; + heal_packet_type = HEAL_PACKET_TYPE_CRIT_HEAL; + } + else { + power_packet_type = HEAL_PACKET_TYPE_SIMPLE_MANA; + heal_packet_type = HEAL_PACKET_TYPE_SIMPLE_HEAL; + } + + SendHealPacket(caster, spawn, heal_packet_type, heal_amt, heal_spell.c_str()); + if(power_amt > 0) + SendHealPacket(caster, spawn, power_packet_type, power_amt, heal_spell.c_str()); + + //The following code sets the spawn as alive + if(dead_spawns.count(spawn->GetID()) > 0) + dead_spawns.erase(spawn->GetID()); + + if(spawn->IsPlayer()){ + spawn->SetSpawnType(4); + client = GetClientBySpawn(spawn); + if(client){ + packet = configReader.getStruct("WS_Resurrected", client->GetVersion()); + if(packet){ + client->QueuePacket(packet->serialize()); + } + packet = configReader.getStruct("WS_ServerControlFlags", client->GetVersion()); + if(packet) + { + packet->setDataByName("parameter1", 8); + client->QueuePacket(packet->serialize()); + packet->setDataByName("parameter1", 16); + client->QueuePacket(packet->serialize()); + } + + safe_delete(packet); + client->SimpleMessage(CHANNEL_COLOR_REVIVE, "You regain consciousness!"); + } + } + spawn->SendSpawnChanges(true); + spawn->SetTempActionState(-1); + spawn->appearance.attackable = 1; +} + +void ZoneServer::SendDispellPacket(Entity* caster, Spawn* target, string dispell_name, string spell_name, int8 dispell_type){ + if(!caster || !target) + return; + + Client* client = 0; + Player* player = 0; + PacketStruct* packet = 0; + vector::iterator client_itr; + + MClientList.readlock(__FUNCTION__, __LINE__); + for (client_itr = clients.begin(); client_itr != clients.end(); client_itr++){ + client = *client_itr; + if(!client || !(player = client->GetPlayer()) || (player != caster && ((caster && player->WasSentSpawn(caster->GetID()) == false) || (target && player->WasSentSpawn(target->GetID()) == false)))) + continue; + if((caster && player->WasSpawnRemoved(caster)) || (caster && player->WasSpawnRemoved(target))) + continue; + if(caster && caster->GetDistance(player) > 50) + continue; + if(target && target->GetDistance(player) > 50) + continue; + + packet = configReader.getStruct("WS_HearDispell", client->GetVersion()); + if(packet){ + packet->setDataByName("spell_name", spell_name.c_str()); + packet->setDataByName("dispell_name", dispell_name.c_str()); + packet->setDataByName("caster", player->GetIDWithPlayerSpawn(caster)); + packet->setDataByName("target", player->GetIDWithPlayerSpawn(target)); + packet->setDataByName("type", dispell_type); + client->QueuePacket(packet->serialize()); + } + safe_delete(packet); + } + MClientList.releasereadlock(__FUNCTION__, __LINE__); +} + +void ZoneServer::DismissAllPets() { + Spawn* spawn = 0; + map::iterator itr; + MSpawnList.readlock(__FUNCTION__, __LINE__); + for (itr = spawn_list.begin(); itr != spawn_list.end(); itr++) { + spawn = itr->second; + if (spawn && spawn->IsPet() && ((NPC*)spawn)->GetOwner()) + ((NPC*)spawn)->GetOwner()->DismissPet((NPC*)spawn); + } + MSpawnList.releasereadlock(__FUNCTION__, __LINE__); +} + +void ZoneServer::RemoveTargetFromSpell(LuaSpell* spell, Spawn* target){ + if (spellProcess) + spellProcess->RemoveTargetFromSpell(spell, target); +} + +void ZoneServer::ClearHate(Entity* entity) { + Spawn* spawn = 0; + map::iterator itr; + MSpawnList.readlock(__FUNCTION__, __LINE__); + for (itr = spawn_list.begin(); itr != spawn_list.end(); itr++) { + spawn = itr->second; + if (spawn && spawn->IsNPC() && ((NPC*)spawn)->Brain()) + ((NPC*)spawn)->Brain()->ClearHate(entity); + } + MSpawnList.releasereadlock(__FUNCTION__, __LINE__); +} + +ThreadReturnType ZoneLoop(void* tmp) { +#ifdef WIN32 + SetThreadPriority(GetCurrentThread(), THREAD_PRIORITY_NORMAL); +#endif + if (tmp == 0) { + ThrowError("ZoneLoop(): tmp = 0!"); + THREAD_RETURN(NULL); + } + ZoneServer* zs = (ZoneServer*) tmp; + while (zs->Process()) { + if(zs->GetClientCount() == 0) + Sleep(1000); + else + Sleep(10); + } + zs->Process(); //run loop once more to clean up some functions + safe_delete(zs); + THREAD_RETURN(NULL); +} + +ThreadReturnType SpawnLoop(void* tmp) { +#ifdef WIN32 + SetThreadPriority(GetCurrentThread(), THREAD_PRIORITY_NORMAL); +#endif + if (tmp == 0) { + ThrowError("SpawnLoop(): tmp = 0!"); + THREAD_RETURN(NULL); + } + ZoneServer* zs = (ZoneServer*) tmp; +#ifndef NO_CATCH + try { +#endif + zs->spawnthread_active = true; + while (zs->SpawnProcess()) { + if(zs->GetClientCount() == 0) + Sleep(1000); + else + Sleep(20); + } + zs->spawnthread_active = false; +#ifndef NO_CATCH + } + catch(...) { + LogWrite(ZONE__ERROR, 0, "Zone", "Error Processing SpawnLoop, shutting down zone '%s'...", zs->GetZoneName()); + try{ + zs->Shutdown(); + } + catch(...){ + LogWrite(ZONE__ERROR, 0, "Zone", "Error Processing SpawnLoop while shutting down zone '%s'...", zs->GetZoneName()); + } + } +#endif + THREAD_RETURN(NULL); +} + +ThreadReturnType SendInitialSpawns(void* tmp) { +#ifdef WIN32 + SetThreadPriority(GetCurrentThread(), THREAD_PRIORITY_ABOVE_NORMAL); +#endif + if (tmp == 0) { + ThrowError("SendInitialSpawns(): tmp = 0!"); + THREAD_RETURN(NULL); + } + Client* client = (Client*) tmp; + client->GetCurrentZone()->SendZoneSpawns(client); + THREAD_RETURN(NULL); +} + +ThreadReturnType SendLevelChangedSpawns(void* tmp) { +#ifdef WIN32 + SetThreadPriority(GetCurrentThread(), THREAD_PRIORITY_NORMAL); +#endif + if (tmp == 0) { + ThrowError("SendLevelChangedSpawns(): tmp = 0!"); + THREAD_RETURN(NULL); + } + Client* client = (Client*)tmp; + client->GetCurrentZone()->SendAllSpawnsForLevelChange(client); + THREAD_RETURN(NULL); +} + +void ZoneServer::SetSpawnStructs(Client* client) { + int16 client_ver = client->GetVersion(); + Player* player = client->GetPlayer(); + + //Save a copy of the correct spawn substructs for the client's player, save here a copy if we don't have one + PacketStruct* pos = configReader.getStruct("Substruct_SpawnPositionStruct", client_ver); + player->SetSpawnPosStruct(pos); + if (versioned_pos_structs.count(pos->GetVersion()) == 0) + versioned_pos_structs[pos->GetVersion()] = new PacketStruct(pos, true); + + PacketStruct* vis = configReader.getStruct("Substruct_SpawnVisualizationInfoStruct", client_ver); + player->SetSpawnVisStruct(vis); + if (versioned_vis_structs.count(vis->GetVersion()) == 0) + versioned_vis_structs[vis->GetVersion()] = new PacketStruct(vis, true); + + PacketStruct* info = configReader.getStruct("Substruct_SpawnInfoStruct", client_ver); + player->SetSpawnInfoStruct(info); + if (versioned_info_structs.count(info->GetVersion()) == 0) + versioned_info_structs[info->GetVersion()] = new PacketStruct(info, true); + + PacketStruct* header = configReader.getStruct("WS_SpawnStruct_Header", client_ver); + player->SetSpawnHeaderStruct(header); + + PacketStruct* footer = configReader.getStruct("WS_SpawnStruct_Footer", client_ver); + player->SetSpawnFooterStruct(footer); + + PacketStruct* sfooter = configReader.getStruct("WS_SignWidgetSpawnStruct_Footer", client_ver); + player->SetSignFooterStruct(sfooter); + + PacketStruct* wfooter = configReader.getStruct("WS_WidgetSpawnStruct_Footer", client_ver); + player->SetWidgetFooterStruct(wfooter); +} + +Spawn* ZoneServer::GetSpawn(int32 id){ + Spawn* ret = 0; + + if(GetNPC(id)) + ret = GetNewNPC(id); + else if(this->GetObject(id)) + ret = GetNewObject(id); + else if(GetWidget(id)) + ret = GetNewWidget(id); + else if(GetSign(id)) + ret = GetNewSign(id); + else if(GetGroundSpawn(id)) + ret = GetNewGroundSpawn(id); + // Unable to find the spawn in the list lets attempt to add it if we are not currently reloading + else if (!reloading && database.LoadNPC(this, id)) { + if (GetNPC(id)) + ret = GetNewNPC(id); + else + LogWrite(NPC__ERROR, 0, "NPC", "Database inserted npc (%u) but was still unable to retrieve it!", id); + } + else if (!reloading && database.LoadObject(this, id)) { + if (this->GetObject(id)) + ret = GetNewObject(id); + else + LogWrite(OBJECT__ERROR, 0, "Object", "Database inserted object (%u) but was still unable to retrieve it!", id); + } + else if (!reloading && database.LoadWidget(this, id)) { + if (GetWidget(id)) + ret = GetNewWidget(id); + else + LogWrite(WIDGET__ERROR, 0, "Widget", "Database inserted widget (%u) but was still unable to retrieve it!", id); + } + else if (!reloading && database.LoadSign(this, id)) { + if (GetSign(id)) + ret = GetNewSign(id); + else + LogWrite(SIGN__ERROR, 0, "Sign", "Database inserted sign (%u) but was still unable to retrieve it!", id); + } + else if (!reloading && database.LoadGroundSpawn(this, id)) { + if (GetGroundSpawn(id)) + ret = GetNewGroundSpawn(id); + else + LogWrite(GROUNDSPAWN__ERROR, 0, "GSpawn", "Database inserted ground spawn (%u) but was still unable to retrieve it!", id); + } + + if(ret) + ret->SetID(Spawn::NextID()); + return ret; +} + + + + +vector* ZoneServer::GetEntityCommandList(int32 id){ + if(entity_command_list.count(id) > 0) + return entity_command_list[id]; + else + return 0; +} + +void ZoneServer::SetEntityCommandList(int32 id, EntityCommand* command) { + if (entity_command_list.count(id) == 0) + entity_command_list[id] = new vector; + + entity_command_list[id]->push_back(command); +} + +EntityCommand* ZoneServer::GetEntityCommand(int32 id, string name) { + EntityCommand* ret = 0; + if (entity_command_list.count(id) == 0) + return ret; + + vector::iterator itr; + for (itr = entity_command_list[id]->begin(); itr != entity_command_list[id]->end(); itr++) { + if ((*itr)->name == name) { + ret = (*itr); + break; + } + } + + return ret; +} + +void ZoneServer::ClearEntityCommands() { + if (entity_command_list.size() > 0) { + map* >::iterator itr; + for (itr = entity_command_list.begin(); itr != entity_command_list.end(); itr++) { + vector* entity_commands = itr->second; + if (entity_commands && entity_commands->size() > 0) { + vector::iterator v_itr; + for (v_itr = entity_commands->begin(); v_itr != entity_commands->end(); v_itr++) + safe_delete(*v_itr); + entity_commands->clear(); + } + safe_delete(entity_commands); + } + entity_command_list.clear(); + } +} + +void ZoneServer::AddNPCSpell(int32 list_id, int32 spell_id, int8 tier){ + npc_spell_list[list_id][spell_id] = tier; +} + +vector* ZoneServer::GetNPCSpells(int32 primary_list, int32 secondary_list){ + vector* ret = 0; + if(npc_spell_list.count(primary_list) > 0){ + ret = new vector(); + map::iterator itr; + Spell* tmpSpell = 0; + for(itr = npc_spell_list[primary_list].begin(); itr != npc_spell_list[primary_list].end(); itr++){ + tmpSpell = master_spell_list.GetSpell(itr->first, itr->second); + if(tmpSpell) + ret->push_back(tmpSpell); + } + } + if(npc_spell_list.count(secondary_list) > 0){ + if(!ret) + ret = new vector(); + map::iterator itr; + Spell* tmpSpell = 0; + for(itr = npc_spell_list[secondary_list].begin(); itr != npc_spell_list[secondary_list].end(); itr++){ + tmpSpell = master_spell_list.GetSpell(itr->first, itr->second); + if(tmpSpell) + ret->push_back(tmpSpell); + } + } + if(ret && ret->size() == 0){ + safe_delete(ret); + ret = 0; + } + return ret; +} + +void ZoneServer::AddNPCSkill(int32 list_id, int32 skill_id, int16 value){ + npc_skill_list[list_id][skill_id] = value; +} + +map* ZoneServer::GetNPCSkills(int32 primary_list, int32 secondary_list){ + map* ret = 0; + if(npc_skill_list.count(primary_list) > 0){ + ret = new map(); + map::iterator itr; + Skill* tmpSkill = 0; + for(itr = npc_skill_list[primary_list].begin(); itr != npc_skill_list[primary_list].end(); itr++){ + tmpSkill = master_skill_list.GetSkill(itr->first); + if(tmpSkill){ + tmpSkill = new Skill(tmpSkill); + tmpSkill->current_val = itr->second; + tmpSkill->max_val = tmpSkill->current_val+5; + (*ret)[tmpSkill->name.data] = tmpSkill; + } + } + } + if(npc_skill_list.count(secondary_list) > 0){ + if(!ret) + ret = new map(); + map::iterator itr; + Skill* tmpSkill = 0; + for(itr = npc_skill_list[secondary_list].begin(); itr != npc_skill_list[secondary_list].end(); itr++){ + tmpSkill = master_skill_list.GetSkill(itr->first); + if(tmpSkill){ + tmpSkill = new Skill(tmpSkill); + tmpSkill->current_val = itr->second; + tmpSkill->max_val = tmpSkill->current_val+5; + (*ret)[tmpSkill->name.data] = tmpSkill; + } + } + } + if(ret && ret->size() == 0){ + safe_delete(ret); + ret = 0; + } + return ret; +} + +void ZoneServer::AddNPCEquipment(int32 list_id, int32 item_id){ + npc_equipment_list[list_id].push_back(item_id); +} + +void ZoneServer::SetNPCEquipment(NPC* npc) { + if(npc_equipment_list.count(npc->GetEquipmentListID()) > 0){ + Item* tmpItem = 0; + int8 slot = 0; + vector::iterator itr; + for(itr = npc_equipment_list[npc->GetEquipmentListID()].begin(); itr != npc_equipment_list[npc->GetEquipmentListID()].end(); itr++){ + tmpItem = master_item_list.GetItem(*itr); + if(tmpItem){ + slot = npc->GetEquipmentList()->GetFreeSlot(tmpItem); + if(slot < 255){ + tmpItem = new Item(tmpItem); + npc->GetEquipmentList()->SetItem(slot, tmpItem); + } + } + } + } +} + +void ZoneServer::AddNPC(int32 id, NPC* npc) { + npc_list[id] = npc; +} + +void ZoneServer::AddWidget(int32 id, Widget* widget) { + widget_list[id] = widget; +} + +Widget* ZoneServer::GetWidget(int32 id, bool override_loading) { + if((!reloading || override_loading) && widget_list.count(id) > 0) + return widget_list[id]; + else + return 0; +} + +Widget* ZoneServer::GetNewWidget(int32 id) { + if(!reloading && widget_list.count(id) > 0) + return widget_list[id]->Copy(); + else + return 0; +} + + +void ZoneServer::LoadGroundSpawnEntries(){ + MGroundSpawnItems.lock(); + database.LoadGroundSpawnEntries(this); + MGroundSpawnItems.unlock(); +} + +void ZoneServer::LoadGroundSpawnItems() { +} + +void ZoneServer::AddGroundSpawnEntry(int32 groundspawn_id, int16 min_skill_level, int16 min_adventure_level, int8 bonus_table, float harvest1, float harvest3, float harvest5, float harvest_imbue, float harvest_rare, float harvest10, int32 harvest_coin) { + GroundSpawnEntry* entry = new GroundSpawnEntry; + entry->min_skill_level = min_skill_level; + entry->min_adventure_level = min_adventure_level; + entry->bonus_table = bonus_table; + entry->harvest1 = harvest1; + entry->harvest3 = harvest3; + entry->harvest5 = harvest5; + entry->harvest_imbue = harvest_imbue; + entry->harvest_rare = harvest_rare; + entry->harvest10 = harvest10; + entry->harvest_coin = harvest_coin; + groundspawn_entries[groundspawn_id].push_back(entry); +} + +void ZoneServer::AddGroundSpawnItem(int32 groundspawn_id, int32 item_id, int8 is_rare, int32 grid_id) { + GroundSpawnEntryItem* entry = new GroundSpawnEntryItem; + entry->item_id = item_id; + entry->is_rare = is_rare; + entry->grid_id = grid_id; + groundspawn_items[groundspawn_id].push_back(entry); + +} + +vector* ZoneServer::GetGroundSpawnEntries(int32 id){ + vector* ret = 0; + MGroundSpawnItems.lock(); + if(groundspawn_entries.count(id) > 0) + ret = &groundspawn_entries[id]; + MGroundSpawnItems.unlock(); + return ret; +} + +vector* ZoneServer::GetGroundSpawnEntryItems(int32 id){ + vector* ret = 0; + if(groundspawn_items.count(id) > 0) + ret = &groundspawn_items[id]; + return ret; +} + +// TODO - mis-named, should be DeleteGroundSpawnEntries() but this is ok for now :) +void ZoneServer::DeleteGroundSpawnItems() +{ + MGroundSpawnItems.lock(); + + map >::iterator groundspawnentry_map_itr; + vector::iterator groundspawnentry_itr; + for(groundspawnentry_map_itr = groundspawn_entries.begin(); groundspawnentry_map_itr != groundspawn_entries.end(); groundspawnentry_map_itr++) + { + for(groundspawnentry_itr = groundspawnentry_map_itr->second.begin(); groundspawnentry_itr != groundspawnentry_map_itr->second.end(); groundspawnentry_itr++) + { + safe_delete(*groundspawnentry_itr); + } + } + groundspawn_entries.clear(); + + map >::iterator groundspawnitem_map_itr; + vector::iterator groundspawnitem_itr; + for(groundspawnitem_map_itr = groundspawn_items.begin(); groundspawnitem_map_itr != groundspawn_items.end(); groundspawnitem_map_itr++) + { + for(groundspawnitem_itr = groundspawnitem_map_itr->second.begin(); groundspawnitem_itr != groundspawnitem_map_itr->second.end(); groundspawnitem_itr++) + { + safe_delete(*groundspawnitem_itr); + } + } + groundspawn_items.clear(); + + MGroundSpawnItems.unlock(); +} + +void ZoneServer::AddGroundSpawn(int32 id, GroundSpawn* spawn) { + groundspawn_list[id] = spawn; +} + +GroundSpawn* ZoneServer::GetGroundSpawn(int32 id, bool override_loading) { + if((!reloading || override_loading) && groundspawn_list.count(id) > 0) + return groundspawn_list[id]; + else + return 0; +} + +GroundSpawn* ZoneServer::GetNewGroundSpawn(int32 id) { + if(!reloading && groundspawn_list.count(id) > 0) + return groundspawn_list[id]->Copy(); + else + return 0; +} + +void ZoneServer::AddLootTable(int32 id, LootTable* table){ + loot_tables[id] = table; +} + +void ZoneServer::AddLootDrop(int32 id, LootDrop* drop){ + loot_drops[id].push_back(drop); +} + +void ZoneServer::AddSpawnLootList(int32 spawn_id, int32 id){ + spawn_loot_list[spawn_id].push_back(id); +} + +void ZoneServer::AddLevelLootList(GlobalLoot* loot) { + level_loot_list.push_back(loot); +} + +void ZoneServer::AddRacialLootList(int16 racial_id, GlobalLoot* loot) { + racial_loot_list[racial_id].push_back(loot); +} + +void ZoneServer::AddZoneLootList(int32 zone, GlobalLoot* loot) { + zone_loot_list[zone].push_back(loot); +} + +void ZoneServer::ClearLootTables(){ + map::iterator table_itr; + for(table_itr = loot_tables.begin(); table_itr != loot_tables.end(); table_itr++){ + safe_delete(table_itr->second); + } + + map >::iterator drop_itr; + vector::iterator drop_itr2; + for(drop_itr = loot_drops.begin(); drop_itr != loot_drops.end(); drop_itr++){ + for(drop_itr2 = drop_itr->second.begin(); drop_itr2 != drop_itr->second.end(); drop_itr2++){ + safe_delete(*drop_itr2); + } + } + + vector::iterator level_itr; + for (level_itr = level_loot_list.begin(); level_itr != level_loot_list.end(); level_itr++) { + safe_delete(*level_itr); + } + + + map >::iterator race_itr; + vector::iterator race_itr2; + for (race_itr = racial_loot_list.begin(); race_itr != racial_loot_list.end(); race_itr++) { + for (race_itr2 = race_itr->second.begin(); race_itr2 != race_itr->second.end(); race_itr2++) { + safe_delete(*race_itr2); + } + } + + map >::iterator zone_itr; + vector::iterator zone_itr2; + for(zone_itr = zone_loot_list.begin(); zone_itr != zone_loot_list.end(); zone_itr++) { + for (zone_itr2 = zone_itr->second.begin(); zone_itr2 != zone_itr->second.end(); zone_itr2++) { + safe_delete(*zone_itr2); + } + } + + loot_tables.clear(); + loot_drops.clear(); + spawn_loot_list.clear(); + level_loot_list.clear(); + racial_loot_list.clear(); + zone_loot_list.clear(); +} + +vector ZoneServer::GetSpawnLootList(int32 spawn_id, int32 zone_id, int8 spawn_level, int16 racial_id) { + vector ret; + if(reloading) + return ret; + + if (spawn_loot_list.count(spawn_id) > 0) + ret.insert(ret.end(), spawn_loot_list[spawn_id].begin(), spawn_loot_list[spawn_id].end()); + + if (level_loot_list.size() > 0) { + vector::iterator itr; + for (itr = level_loot_list.begin(); itr != level_loot_list.end(); itr++) { + GlobalLoot* loot = *itr; + if (loot->minLevel == 0 && loot->maxLevel == 0) + ret.push_back(loot->table_id); + else { + if (spawn_level >= loot->minLevel && spawn_level <= loot->maxLevel) + ret.push_back(loot->table_id); + } + } + } + + if (racial_loot_list.count(racial_id) > 0) { + vector::iterator itr; + for (itr = racial_loot_list[racial_id].begin(); itr != racial_loot_list[racial_id].end(); itr++) { + GlobalLoot* loot = *itr; + if (loot->minLevel == 0 && loot->maxLevel == 0) + ret.push_back(loot->table_id); + else { + if (spawn_level >= loot->minLevel && spawn_level <= loot->maxLevel) + ret.push_back(loot->table_id); + } + } + } + + if (zone_loot_list.count(zone_id) > 0) { + vector::iterator itr; + for (itr = zone_loot_list[zone_id].begin(); itr != zone_loot_list[zone_id].end(); itr++) { + GlobalLoot* loot = *itr; + if (loot->minLevel == 0 && loot->maxLevel == 0) + ret.push_back(loot->table_id); + else { + if (spawn_level >= loot->minLevel && spawn_level <= loot->maxLevel) + ret.push_back(loot->table_id); + } + } + } + + return ret; +} + +vector* ZoneServer::GetLootDrops(int32 table_id){ + if(!reloading && loot_drops.count(table_id) > 0) + return &(loot_drops[table_id]); + else + return 0; +} + +LootTable* ZoneServer::GetLootTable(int32 table_id){ + return loot_tables[table_id]; +} + +void ZoneServer::AddLocationTransporter(int32 zone_id, string message, float trigger_x, float trigger_y, float trigger_z, float trigger_radius, int32 destination_zone_id, float destination_x, float destination_y, float destination_z, float destination_heading, int32 cost, int32 unique_id){ + LocationTransportDestination* loc = new LocationTransportDestination; + loc->message = message; + loc->trigger_x = trigger_x; + loc->trigger_y = trigger_y; + loc->trigger_z = trigger_z; + loc->trigger_radius = trigger_radius; + loc->destination_zone_id = destination_zone_id; + loc->destination_x = destination_x; + loc->destination_y = destination_y; + loc->destination_z = destination_z; + loc->destination_heading = destination_heading; + loc->cost = cost; + loc->unique_id = unique_id; + MTransporters.lock(); + if(location_transporters.count(zone_id) == 0) + location_transporters[zone_id] = new MutexList(); + location_transporters[zone_id]->Add(loc); + MTransporters.unlock(); +} + +void ZoneServer::AddTransporter(int32 transport_id, int8 type, string name, string message, int32 destination_zone_id, float destination_x, float destination_y, float destination_z, float destination_heading, int32 cost, int32 unique_id, int8 min_level, int8 max_level, int32 quest_req, int16 quest_step_req, int32 quest_complete, int32 map_x, int32 map_y){ + TransportDestination* transport = new TransportDestination; + transport->type = type; + transport->display_name = name; + transport->message = message; + transport->destination_zone_id = destination_zone_id; + transport->destination_x = destination_x; + transport->destination_y = destination_y; + transport->destination_z = destination_z; + transport->destination_heading = destination_heading; + transport->cost = cost; + transport->unique_id = unique_id; + + transport->min_level = min_level; + transport->max_level = max_level; + transport->req_quest = quest_req; + transport->req_quest_step = quest_step_req; + transport->req_quest_complete = quest_complete; + + transport->map_x = map_x; + transport->map_y = map_y; + + MTransporters.lock(); + transporters[transport_id].push_back(transport); + MTransporters.unlock(); +} + +vector* ZoneServer::GetTransporters(int32 transport_id){ + vector* ret = 0; + MTransporters.lock(); + if(transporters.count(transport_id) > 0) + ret = &transporters[transport_id]; + MTransporters.unlock(); + return ret; +} + +MutexList* ZoneServer::GetLocationTransporters(int32 zone_id){ + MutexList* ret = 0; + MTransporters.lock(); + if(location_transporters.count(zone_id) > 0) + ret = location_transporters[zone_id]; + MTransporters.unlock(); + return ret; +} + +void ZoneServer::DeleteGlobalTransporters(){ + MTransporters.lock(); + map >::iterator itr; + vector::iterator transport_vector_itr; + for(itr = transporters.begin(); itr != transporters.end(); itr++){ + for(transport_vector_itr = itr->second.begin(); transport_vector_itr != itr->second.end(); transport_vector_itr++){ + safe_delete(*transport_vector_itr); + } + } + map* >::iterator itr2; + for(itr2 = location_transporters.begin(); itr2 != location_transporters.end(); itr2++){ + itr2->second->clear(true); + delete itr2->second; + } + transporters.clear(); + location_transporters.clear(); + MTransporters.unlock(); +} + +void ZoneServer::DeleteGlobalSpawns() { + ClearLootTables(); + + map::iterator npc_list_iter; + for(npc_list_iter=npc_list.begin();npc_list_iter!=npc_list.end();npc_list_iter++) { + safe_delete(npc_list_iter->second); + } + npc_list.clear(); + map::iterator object_list_iter; + for(object_list_iter=object_list.begin();object_list_iter!=object_list.end();object_list_iter++) { + safe_delete(object_list_iter->second); + } + object_list.clear(); + map::iterator groundspawn_list_iter; + for(groundspawn_list_iter=groundspawn_list.begin();groundspawn_list_iter!=groundspawn_list.end();groundspawn_list_iter++) { + safe_delete(groundspawn_list_iter->second); + } + groundspawn_list.clear(); + map::iterator widget_list_iter; + for(widget_list_iter=widget_list.begin();widget_list_iter!=widget_list.end();widget_list_iter++) { + safe_delete(widget_list_iter->second); + } + widget_list.clear(); + map::iterator sign_list_iter; + for(sign_list_iter=sign_list.begin();sign_list_iter!=sign_list.end();sign_list_iter++) { + safe_delete(sign_list_iter->second); + } + sign_list.clear(); + + /*map::iterator appearance_list_iter; + for(appearance_list_iter=npc_appearance_list.begin();appearance_list_iter!=npc_appearance_list.end();appearance_list_iter++) { + safe_delete(appearance_list_iter->second); + } + npc_appearance_list.clear();*/ + + + ClearEntityCommands(); + + DeleteGroundSpawnItems(); + DeleteGlobalTransporters(); + DeleteTransporterMaps(); +} + +void ZoneServer::AddTransportMap(int32 id, string name) { + MTransportMaps.writelock(__FUNCTION__, __LINE__); + m_transportMaps[id] = name; + MTransportMaps.releasewritelock(__FUNCTION__, __LINE__); +} + +bool ZoneServer::TransportHasMap(int32 id) { + bool ret = false; + + MTransportMaps.readlock(__FUNCTION__, __LINE__); + ret = m_transportMaps.count(id) > 0; + MTransportMaps.releasereadlock(__FUNCTION__, __LINE__); + + return ret; +} + +string ZoneServer::GetTransportMap(int32 id) { + string ret; + + MTransportMaps.readlock(__FUNCTION__, __LINE__); + if (m_transportMaps.count(id) > 0) + ret = m_transportMaps[id]; + MTransportMaps.releasereadlock(__FUNCTION__, __LINE__); + + return ret; +} + +void ZoneServer::DeleteTransporterMaps() { + MTransportMaps.writelock(__FUNCTION__, __LINE__); + m_transportMaps.clear(); + MTransportMaps.releasewritelock(__FUNCTION__, __LINE__); +} + +void ZoneServer::ReloadSpawns() { + if (reloading) + return; + + reloading = true; + // Let every one in the zone know what is happening + HandleBroadcast("Reloading all spawns for this zone."); + DeleteGlobalSpawns(); + Depop(false, true); +} + +void ZoneServer::SendStateCommand(Spawn* spawn, int32 state) { + vector::iterator itr; + + MClientList.readlock(__FUNCTION__, __LINE__); + for (itr = clients.begin(); itr != clients.end(); itr++) { + Client* client = *itr; + if (client && client->GetPlayer()->WasSentSpawn(spawn->GetID()) && !client->GetPlayer()->WasSpawnRemoved(spawn)) + ClientPacketFunctions::SendStateCommand(client, client->GetPlayer()->GetIDWithPlayerSpawn(spawn), state); + } + MClientList.releasereadlock(__FUNCTION__, __LINE__); +} + +void ZoneServer::AddFlightPath(int32 id, FlightPathInfo* info) { + if (m_flightPaths.count(id) > 0) { + LogWrite(ZONE__ERROR, 0, "Zone", "Duplicate flight path (%u)", id); + safe_delete(info); + return; + } + + m_flightPaths[id] = info; +} + +void ZoneServer::AddFlightPathLocation(int32 id, FlightPathLocation* location) { + if (m_flightPaths.count(id) == 0) { + LogWrite(ZONE__ERROR, 0, "Zone", "There is no flight info for this route (%u)", id); + safe_delete(location); + return; + } + + m_flightPathRoutes[id].push_back(location); +} + +void ZoneServer::DeleteFlightPaths() { + map >::iterator itr; + vector::iterator itr2; + map::iterator itr3; + + for (itr = m_flightPathRoutes.begin(); itr != m_flightPathRoutes.end(); itr++) { + for (itr2 = itr->second.begin(); itr2 != itr->second.end(); itr2++) { + safe_delete(*itr2); + } + + itr->second.clear(); + } + m_flightPathRoutes.clear(); + + for (itr3 = m_flightPaths.begin(); itr3 != m_flightPaths.end(); itr3++) { + safe_delete(itr3->second); + } + m_flightPaths.clear(); +} + +void ZoneServer::SendFlightPathsPackets(Client* client) { + // Only send a packet if there are flight paths + if (m_flightPathRoutes.size() > 0) { + PacketStruct* packet = configReader.getStruct("WS_FlightPathsMsg", client->GetVersion()); + if (packet) { + + int32 num_routes = m_flightPaths.size(); + packet->setArrayLengthByName("number_of_routes", num_routes); + packet->setArrayLengthByName("number_of_routes2", num_routes); + packet->setArrayLengthByName("number_of_routes3", num_routes); + packet->setArrayLengthByName("number_of_routes4", num_routes); + + map::iterator itr; + int32 i = 0; + for (itr = m_flightPaths.begin(); itr != m_flightPaths.end(); itr++, i++) { + packet->setArrayDataByName("route_length", m_flightPathRoutes[itr->first].size(), i); + packet->setArrayDataByName("ground_mount", itr->second->flying ? 0 : 1, i); + packet->setArrayDataByName("allow_dismount", itr->second->dismount ? 1 : 0, i); + + + packet->setSubArrayLengthByName("route_length2", m_flightPathRoutes[itr->first].size(), i); + vector::iterator itr2; + int32 j = 0; + for (itr2 = m_flightPathRoutes[itr->first].begin(); itr2 != m_flightPathRoutes[itr->first].end(); itr2++, j++) { + packet->setSubArrayDataByName("x", (*itr2)->X, i, j); + packet->setSubArrayDataByName("y", (*itr2)->Y, i, j); + packet->setSubArrayDataByName("z", (*itr2)->Z, i, j); + } + } + + client->QueuePacket(packet->serialize()); + safe_delete(packet); + } + } +} + +int32 ZoneServer::GetFlightPathIndex(int32 id) { + int32 index = 0; + map::iterator itr; + for (itr = m_flightPaths.begin(); itr != m_flightPaths.end(); itr++, index++) { + if (itr->first == id) + return index; + } + + return -1; +} + +float ZoneServer::GetFlightPathSpeed(int32 id) { + float speed = 1; + + if (m_flightPaths.count(id) > 0) + speed = m_flightPaths[id]->speed; + + return speed; +} + +void ZoneServer::ProcessSpawnConditional(int8 condition) { + MSpawnLocationList.readlock(__FUNCTION__, __LINE__); + MSpawnList.readlock(__FUNCTION__, __LINE__); + map::iterator itr; + for (itr = spawn_list.begin(); itr != spawn_list.end(); itr++) { + SpawnLocation* loc = spawn_location_list[itr->second->GetSpawnLocationID()]; + if (loc && loc->conditional > 0) { + if ((loc->conditional & condition) != condition) { + Despawn(itr->second, 0); + } + } + } + MSpawnList.releasereadlock(__FUNCTION__, __LINE__); + + map::iterator itr2; + for (itr2 = spawn_location_list.begin(); itr2 != spawn_location_list.end(); itr2++) { + SpawnLocation* loc = itr2->second; + if (loc && loc->conditional > 0 && ((loc->conditional & condition) == condition)) + if (GetSpawnByLocationID(loc->placement_id) == NULL) + ProcessSpawnLocation(loc); + } + + MSpawnLocationList.releasereadlock(__FUNCTION__, __LINE__); +} \ No newline at end of file diff --git a/EQ2/source/WorldServer/zoneserver.h b/EQ2/source/WorldServer/zoneserver.h new file mode 100644 index 000000000..39ed43336 --- /dev/null +++ b/EQ2/source/WorldServer/zoneserver.h @@ -0,0 +1,1004 @@ +/* + EQ2Emulator: Everquest II Server Emulator + Copyright (C) 2007 EQ2EMulator Development Team (http://www.eq2emulator.net) + + This file is part of EQ2Emulator. + + EQ2Emulator is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + EQ2Emulator is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with EQ2Emulator. If not, see . +*/ +#ifndef ZONESERVER_H +#define ZONESERVER_H + +#include "../common/linked_list.h" +#include "../common/timer.h" +#include "../common/queue.h" +#include "../common/servertalk.h" +#include "../common/TCPConnection.h" +#include "WorldTCPConnection.h" +#include "../common/Mutex.h" +#include "../common/md5.h" +#include "../common/DataBuffer.h" +#include "net.h" +#include "Player.h" +#include "Combat.h" +#include +#include +#include +#include "MutexList.h" +#include "MutexMap.h" +#include "MutexVector.h" +#include "NPC.h" +#include "Widget.h" +#include "Object.h" +#include "GroundSpawn.h" +#include "Sign.h" + +extern NetConnection net; // needs to be here or compile errors in commands.cpp +class SpellProcess; +class TradeskillMgr; +class Bot; + +#define EXPANSION_UNKNOWN 1 +#define EXPANSION_UNKNOWN2 64 +#define EXPANSION_UNKNOWN3 128 +#define EXPANSION_UNKNOWN4 256 +#define EXPANSION_UNKNOWN5 512 +#define EXPANSION_DOF 1024 +#define EXPANSION_KOS 2048 +#define EXPANSION_EOF 4096 +#define EXPANSION_ROK 8192 +#define EXPANSION_TSO 16384 +#define EXPANSION_DOV 65536 // This enables DoV and CoE AA tree's lower values disable both trees +// Can't verify these 3 values +// 32768 - SF +// 131072 - AoD + +#define SPAWN_SCRIPT_SPAWN 0 +#define SPAWN_SCRIPT_RESPAWN 1 +#define SPAWN_SCRIPT_ATTACKED 2 +#define SPAWN_SCRIPT_TARGETED 3 +#define SPAWN_SCRIPT_HAILED 4 +#define SPAWN_SCRIPT_DEATH 5 +#define SPAWN_SCRIPT_KILLED 6 +#define SPAWN_SCRIPT_AGGRO 7 +#define SPAWN_SCRIPT_HEALTHCHANGED 8 +#define SPAWN_SCRIPT_RANDOMCHAT 9 +#define SPAWN_SCRIPT_CONVERSATION 10 +#define SPAWN_SCRIPT_TIMER 11 +#define SPAWN_SCRIPT_CUSTOM 12 +#define SPAWN_SCRIPT_HAILED_BUSY 13 +#define SPAWN_SCRIPT_CASTED_ON 14 +#define SPAWN_SCRIPT_AUTO_ATTACK_TICK 15 +#define SPAWN_SCRIPT_COMBAT_RESET 16 +#define SPAWN_SCRIPT_GROUP_DEAD 17 +#define SPAWN_SCRIPT_HEAR_SAY 18 + +#define SPAWN_CONDITIONAL_NONE 0 +#define SPAWN_CONDITIONAL_DAY 1 +#define SPAWN_CONDITIONAL_NIGHT 2 +#define SPAWN_CONDITIONAL_NOT_RAINING 4 +#define SPAWN_CONDITIONAL_RAINING 8 + +#define MAX_REVIVEPOINT_DISTANCE 1000 + +/* JA: TODO Turn into R_World Rules */ +#define SEND_SPAWN_DISTANCE 150 /* when spawns appear visually to the client */ +#define HEAR_SPAWN_DISTANCE 30 /* max distance a client can be from a spawn to 'hear' it */ +#define MAX_CHASE_DISTANCE 80 +#define REMOVE_SPAWN_DISTANCE 180 + +#define TRACKING_STOP 0 +#define TRACKING_START 1 +#define TRACKING_UPDATE 2 +#define TRACKING_CLOSE_WINDOW 3 + +#define TRACKING_TYPE_ENTITIES 1 +#define TRACKING_TYPE_HARVESTABLES 2 + +#define TRACKING_SPAWN_TYPE_PC 0 +#define TRACKING_SPAWN_TYPE_NPC 1 + +#define WAYPOINT_CATEGORY_GROUP 0 +#define WAYPOINT_CATEGORY_QUESTS 1 +#define WAYPOINT_CATEGORY_PEOPLE 2 +#define WAYPOINT_CATEGORY_PLACES 3 +#define WAYPOINT_CATEGORY_USER 4 +#define WAYPOINT_CATEGORY_DIRECTIONS 5 +#define WAYPOINT_CATEGORY_TRACKING 6 +#define WAYPOINT_CATEGORY_HOUSES 7 +#define WAYPOINT_CATEGORY_MAP 8 + +struct PlayerProximity{ + float distance; + string in_range_lua_function; + string leaving_range_lua_function; + map clients_in_proximity; +}; + +struct LocationProximity { + float x; + float y; + float z; + float max_variation; + string in_range_lua_function; + string leaving_range_lua_function; + map clients_in_proximity; +}; + +struct LocationGrid { + int32 id; + int32 grid_id; + string name; + bool include_y; + bool discovery; + MutexList locations; + MutexMap players; +}; + +struct TrackedSpawn { + Spawn* spawn; + float distance; +}; + +class Widget; +class Client; +class Sign; +class Object; +class GroundSpawn; +struct GroundSpawnEntry; +struct GroundSpawnEntryItem; +struct LootTable; +struct LootDrop; +struct GlobalLoot; +struct TransportDestination; +struct LocationTransportDestination; + +#ifdef WIN32 + void ZoneLoop(void *tmp); + void SpawnLoop(void *tmp); + void SendInitialSpawns(void *tmp); + void SendLevelChangedSpawns(void*tmp); +#else + void *ZoneLoop(void *tmp); + void *SpawnLoop(void *tmp); + void *SendInitialSpawns(void *tmp); + void *SendLevelChangedSpawns(void *tmp); +#endif +using namespace std; +struct RevivePoint{ + int32 id; + int32 zone_id; //usually this zone, but not always + string location_name; + float x; + float y; + float z; + float heading; +}; + +struct SpawnScriptTimer { + int32 timer; + int32 spawn; + int32 player; + string function; + int32 current_count; + int32 max_count; +}; + +enum Instance_Type { + NONE, + GROUP_LOCKOUT_INSTANCE, + GROUP_PERSIST_INSTANCE, + RAID_LOCKOUT_INSTANCE, + RAID_PERSIST_INSTANCE, + SOLO_LOCKOUT_INSTANCE, + SOLO_PERSIST_INSTANCE, + TRADESKILL_INSTANCE, // allows anyone to enter, server searches for the first instance that is available + PUBLIC_INSTANCE, // same as tradeskill, except dead spawns are tracked + PERSONAL_HOUSE_INSTANCE, + GUILD_HOUSE_INSTANCE, + QUEST_INSTANCE +}; + +struct FlightPathInfo { + float speed; + bool flying; + bool dismount; +}; + +struct FlightPathLocation { + float X; + float Y; + float Z; +}; + +class SPGrid; + +// need to attempt to clean this up and add xml comments, remove unused code, find a logical way to sort the functions maybe by get/set/process/add etc... +class ZoneServer { +public: + ZoneServer(const char* file); + ~ZoneServer(); + + void Init(); + bool Process(); + bool SpawnProcess(); + + void LoadRevivePoints(vector* revive_points); + vector* GetRevivePoints(Client* client); + RevivePoint* GetRevivePoint(int32 id); + + void AddClient(Client* client); + + void SimpleMessage(int8 type, const char* message, Spawn* from, float distance); + void HandleChatMessage(Spawn* from, const char* to, int16 channel, const char* message, float distance = 0, const char* channel_name = 0, bool show_bubble = true, int32 language = 0); + void HandleChatMessage(Client* client, Spawn* from, const char* to, int16 channel, const char* message, float distance = 0, const char* channel_name = 0, bool show_bubble = true, int32 language = 0); + void HandleBroadcast(const char* message); + void HandleAnnouncement(const char* message); + + int16 SetSpawnTargetable(Spawn* spawn, float distance); + int16 SetSpawnTargetable(int32 spawn_id); + void ApplySetSpawnCommand(Client* client, Spawn* target, int8 type, char* value); + void SetSpawnCommand(Spawn* spawn, int8 type, char* value, Client* client = 0); + void SetSpawnCommand(int32 spawn_id, int8 type, char* value, Client* client = 0); + void AddLoot(NPC* npc); + + NPC* AddNPCSpawn(SpawnLocation* spawnlocation, SpawnEntry* spawnentry); + Object* AddObjectSpawn(SpawnLocation* spawnlocation, SpawnEntry* spawnentry); + GroundSpawn* AddGroundSpawn(SpawnLocation* spawnlocation, SpawnEntry* spawnentry); + Widget* AddWidgetSpawn(SpawnLocation* spawnlocation, SpawnEntry* spawnentry); + Sign* AddSignSpawn(SpawnLocation* spawnlocation, SpawnEntry* spawnentry); + void AddSpawn(Spawn* spawn); + void RemoveDeadEnemyList(Spawn* spawn); + void RemoveDeadSpawn(Spawn* spawn); + + void AddSpawnGroupLocation(int32 group_id, int32 location_id, int32 spawn_location_id); + void AddSpawnGroupAssociation(int32 group_id1, int32 group_id2); + + void AddSpawnGroupChance(int32 group_id, float percent); + + void RemoveSpawn(Spawn* spawn, bool delete_spawn = true, bool respawn = true, bool lock = true); + void ProcessSpawnLocations(); + void SendQuestUpdates(Client* client, Spawn* spawn = 0); + + EQ2Packet* GetZoneInfoPacket(Client* client); + Spawn* FindSpawn(Player* searcher, const char* name); + void CallSpawnScript(Spawn* npc, int8 type, Spawn* spawn = 0, const char* message = 0); + void SendSpawnVisualState(Spawn* spawn, int16 type); + void SendSpellFailedPacket(Client* client, int16 error); + void SendInterruptPacket(Spawn* interrupted, LuaSpell* spell); + void HandleEmote(Client* originator, string name); + Client* GetClientBySpawn(Spawn* spawn); + Spawn* GetSpawnByDatabaseID(int32 id); + Spawn* GetSpawnByID(int32 id); + + void PlaySoundFile(Client* client, const char* name, float origin_x, float origin_y, float origin_z); + void SendZoneSpawns(Client* client); + void StartZoneInitialSpawnThread(Client* client); + void SendSpawnChanges(); + void SendSpawnChanges(Spawn* spawn); + void SendSpawnChanges(Spawn* spawn, Client* client, bool override_changes = false, bool override_vis_changes = false); + void SendSpawnChanges(int32 spawn_id, Client* client, bool override_changes = false, bool override_vis_changes = false); + void SendPlayerPositionChanges(Player* player); + + void UpdateVitality(float amount); + + vector GetPlayers(); + + void KillSpawn(Spawn* dead, Spawn* killer, bool send_packet = true, int8 damage_type = 0, int16 kill_blow_type = 0); + + void SendDamagePacket(Spawn* attacker, Spawn* victim, int8 type1, int8 type2, int8 damage_type, int16 damage, const char* spell_name); + void SendHealPacket(Spawn* caster, Spawn* target, int16 type, int32 heal_amt, const char* spell_name); + + void SendCastSpellPacket(LuaSpell* spell, Entity* caster); + void SendCastSpellPacket(int32 spell_visual, Spawn* target); + void SendCastEntityCommandPacket(EntityCommand* entity_command, int32 spawn_id, int32 target_id); + void TriggerCharSheetTimer(); + + /// Sends the game time packet to all connected clients + void SendTimeUpdateToAllClients(); + void AddWidgetTimer(Spawn* widget, float time); + bool HasWidgetTimer(Spawn* widget); + + void AddHeadingTimer(Spawn* spawn); + + void Despawn(Spawn* spawn, int32 timer); + + void RepopSpawns(Client* client, Spawn* spawn); + bool AddCloseSpawnsToSpawnGroup(Spawn* spawn, float radius); + void Depop(bool respawns = false, bool repop = false); + + Spawn* GetSpawnGroup(int32 id); + + void AddEnemyList(NPC* npc); + + void ReloadClientQuests(); + void SendAllSpawnsForLevelChange(Client* client); + + void AddLocationGrid(LocationGrid* grid); + void RemoveLocationGrids(); + + void DeleteTransporters(); + + void CheckTransporters(Client* client); + + void WritePlayerStatistics(); + + volatile bool spawnthread_active; + volatile bool combatthread_active; + volatile int8 initial_spawn_threads_active; + volatile bool client_thread_active; + void AddChangedSpawn(Spawn* spawn); + + void AddDamagedSpawn(Spawn* spawn); + + void AddDrowningVictim(Player* player); + void RemoveDrowningVictim(Player* player); + Client* GetDrowningVictim(Player* player); + + void DeleteSpellProcess(); + void LoadSpellProcess(); + void LockAllSpells(Player* player); + void UnlockAllSpells(Player* player); + void RemoveSpellTimersFromSpawn(Spawn* spawn, bool remove_all, bool delete_recast = true); + void Interrupted(Entity* caster, Spawn* interruptor, int16 error_code, bool cancel = false, bool from_movement = false); + Spell* GetSpell(Entity* caster); + void ProcessSpell(Spell* spell, Entity* caster, Spawn* target = 0, bool lock = true, bool harvest_spell = false); + void ProcessEntityCommand(EntityCommand* entity_command, Entity* caster, Spawn* target, bool lock = true); + void AddPlayerTracking(Player* player); + void RemovePlayerTracking(Player* player, int8 mode); + + void SendUpdateTitles(Client *client, Title *suffix = 0, Title *prefix = 0); + void SendUpdateTitles(Spawn *spawn, Title *suffix = 0, Title *prefix = 0); + + void RemoveTargetFromSpell(LuaSpell* spell, Spawn* target); + + /// Schedules a spawn for removal + /// The spawn to remove + /// The delay before removing the spawn + void AddDelayedSpawnRemove(Spawn* spawn, int32 time); + + /// Removes a spawn from scheduled removal (used mainly for players returning from LD) + /// The spawn to remove from the scheduled removal + void RemoveDelayedSpawnRemove(Spawn* spawn); + + /// Set the rain levl in the zone + /// Level of rain in the zone 0.0 - 1.1 (rain starts at 0.76) + void SetRain(float val); + + /// Sets the wind direction + /// Direction in degrees to set the wind + void SetWind(float val); + + /// Handles zone-wide weather changes + void ProcessWeather(); + + Spawn* GetClosestTransportSpawn(float x, float y, float z); + + void ResurrectSpawn(Spawn* spawn, Client* client); + + void HidePrivateSpawn(Spawn* spawn); + Client* GetClientByName(char* name); + + /// Gets spawns for a true AoE spell + vector GetAttackableSpawnsByDistance(Spawn* spawn, float distance); + + void StartZoneSpawnsForLevelThread(Client* client); + + void SendDispellPacket(Entity* caster, Spawn* target, string dispell_name, string spell_name, int8 dispell_type); + + void SetupInstance(int32 createdInstanceID=0); + void SendUpdateDefaultCommand(Spawn* spawn, const char* command, float distance); + + map* GetSpawnLocationsByGroup(int32 group_id); + + SPGrid* Grid; + + /**************************************************** + Following functions are only used for LUA commands + ****************************************************/ + + int32 GetClosestLocation(Spawn* spawn); + Spawn* GetClosestSpawn(Spawn* spawn, int32 spawn_id); + SpawnLocation* GetSpawnLocation(int32 id); + void PlayFlavor(Client* client, Spawn* spawn, const char* mp3, const char* text, const char* emote, int32 key1, int32 key2, int8 language); + void PlayVoice(Client* client, Spawn* spawn, const char* mp3, int32 key1, int32 key2); + void PlayFlavor(Spawn* spawn, const char* mp3, const char* text, const char* emote, int32 key1, int32 key2, int8 language); + void PlayVoice(Spawn* spawn, const char* mp3, int32 key1, int32 key2); + void SendThreatPacket(Spawn* caster, Spawn* target, int32 threat_amt, const char* spell_name); + void KillSpawnByDistance(Spawn* spawn, float max_distance, bool include_players = false, bool send_packet = false); + void SpawnSetByDistance(Spawn* spawn, float max_distance, string field, string value); + void AddSpawnScriptTimer(SpawnScriptTimer* timer); + Spawn* GetSpawnByLocationID(int32 location_id); + void AddMovementNPC(Spawn* spawn); + void AddPlayerProximity(Spawn* spawn, float distance, string in_range_function, string leaving_range_function); + void AddLocationProximity(float x, float y, float z, float max_variation, string in_range_function, string leaving_range_function); + void PlayAnimation(Spawn* spawn, int32 visual_state, Spawn* spawn2 = 0, int8 type = 1); + void AddTransportSpawn(Spawn* spawn); + vector GetSpawnsByID(int32 id); + bool IsDusk() { return isDusk; } // never used, probably meant for lua though + + + /**************************************************** + Following functions are all contained in the header + ****************************************************/ + + inline const char* GetZoneName() { return zone_name; } + void SetZoneName(char* new_zone) { + if( strlen(new_zone) >= sizeof zone_name ) + return; + strcpy(zone_name, new_zone); + } + inline const char* GetZoneFile() { return zone_file; } + void SetZoneFile(char* zone) { + if( strlen(zone) >= sizeof zone_file ) + return; + strcpy(zone_file, zone); + } + inline const char* GetZoneDescription() { return zone_description; } + void SetZoneDescription(char* desc) { + if( strlen(desc) >= sizeof zone_description ) + return; + strcpy(zone_description, desc); + } + + void SetUnderWorld(float under){ underworld = under; } + inline int32 GetZoneID() { return zoneID; } + void SetZoneID(int32 new_id){ zoneID = new_id; } + + inline bool IsCityZone() { return cityzone; } + inline bool AlwaysLoaded() { return always_loaded; } + void SetCityZone(bool val) { cityzone = val; } + void SetAlwaysLoaded(bool val) { always_loaded = val; } + inline int32& NumPlayers() { return pNumPlayers; } + void SetMinimumStatus(sint16 minStatus) { minimumStatus = minStatus; } + sint16 GetMinimumStatus() { return minimumStatus; } + void SetMinimumLevel(int16 minLevel) { minimumLevel = minLevel; } + void SetMaximumLevel(int16 maxLevel) { maximumLevel = maxLevel; } + void SetMinimumVersion(int16 minVersion) { minimumVersion = minVersion; } + int16 GetMinimumLevel() { return minimumLevel; } + int16 GetMaximumLevel() { return maximumLevel; } + int16 GetMinimumVersion() { return minimumVersion; } + inline bool GetZoneLockState() { return locked; } // JA: /zone lock|unlock + void SetZoneLockState(bool lock_state) { locked = lock_state; } // JA: /zone lock|unlock + int32 GetInstanceID() { return instanceID; } + bool IsInstanceZone() { return isInstance; } + + void SetShutdownTimer(int val){ + shutdownTimer.SetTimer(val*1000); + } + + void AddSpawnLocation(int32 id, SpawnLocation* spawnlocation) { + MSpawnLocationList.writelock(__FUNCTION__, __LINE__); + if (spawn_location_list.count(id) > 0) + safe_delete(spawn_location_list[id]); + spawn_location_list[id] = spawnlocation; + MSpawnLocationList.releasewritelock(__FUNCTION__, __LINE__); + } + + void SetInstanceType(int16 type) { InstanceType = (Instance_Type)type; if(type>0)isInstance=true; else isInstance=false; } + Instance_Type GetInstanceType() { return InstanceType; } + float GetSafeX(){ return safe_x; } + float GetSafeY(){ return safe_y; } + float GetSafeZ(){ return safe_z; } + float GetSafeHeading() { return safe_heading; } + void SetSafeX(float val){ safe_x = val; } + void SetSafeY(float val){ safe_y = val; } + void SetSafeZ(float val){ safe_z = val; } + void SetSafeHeading(float val) { safe_heading = val; } + float GetXPModifier() { return xp_mod; } + void SetXPModifier(float val) { xp_mod = val; } + void SetZoneMOTD(string z_motd) { zone_motd = z_motd; } + string GetZoneMOTD() { return zone_motd; } + bool isZoneShuttingDown ( ) { return zoneShuttingDown; } + void Shutdown(){ zoneShuttingDown = true; } + int32 GetClientCount(){ return clients.size(); } + int32 GetDefaultLockoutTime() { return def_lockout_time; } + int32 GetDefaultReenterTime() { return def_reenter_time; } + int32 GetDefaultResetTime() { return def_reset_time; } + int8 GetForceGroupZoneOption() { return group_zone_option; } + void SetDefaultLockoutTime(int32 val) { def_lockout_time = val; } + void SetDefaultReenterTime(int32 val) { def_reenter_time = val; } + void SetDefaultResetTime(int32 val) { def_reset_time = val; } + void SetForceGroupZoneOption(int8 val) { group_zone_option = val; } + SpellProcess* GetSpellProcess() {return spellProcess;} + bool FinishedDepop(){ return finished_depop; } + + /// Returns the Tradeskill Manager for this zone + TradeskillMgr* GetTradeskillMgr() { return tradeskillMgr; } + + + // had to add these to access weather from Commands + bool isWeatherEnabled() { return weather_enabled; } + void SetWeatherEnabled(bool val) { weather_enabled = val; } + bool isWeatherAllowed() { return weather_allowed; } + void SetWeatherAllowed(bool val) { weather_allowed = val; } + int8 GetWeatherType() { return weather_type; } + void SetWeatherType(int8 val) { weather_type = val; } + int32 GetWeatherFrequency() { return weather_frequency; } + void SetWeatherFrequency(int32 val) { weather_frequency = val; } + float GetWeatherMinSeverity() { return weather_min_severity; } + void SetWeatherMinSeverity(float val) { weather_min_severity = val; } + float GetWeatherMaxSeverity() { return weather_max_severity; } + void SetWeatherMaxSeverity(float val) { weather_max_severity = val; } + float GetWeatherChangeAmount() { return weather_change_amount; } + void SetWeatherChangeAmount(float val) { weather_change_amount = val; } + float GetWeatherDynamicOffset() { return weather_dynamic_offset; } + void SetWeatherDynamicOffset(float val) { weather_dynamic_offset = val; } + int8 GetWeatherChance() { return weather_change_chance; } + void SetWeatherChance(int8 val) { weather_change_chance = val; } + float GetCurrentWeather() { return weather_current_severity; } + void SetCurrentWeather(float val) { weather_current_severity = val; } + int8 GetWeatherPattern() { return weather_pattern; } + void SetWeatherPattern(int8 val) { weather_pattern = val; } + void SetWeatherLastChangedTime(int32 val) { weather_last_changed_time = val; } + + void RemoveClientImmediately(Client* client); + + void ClearHate(Entity* entity); + + + + /**************************************************** + Following functions are pending deletion, left in for + now just to make sure one won't be of future use. + ****************************************************/ + //void RemoveFromRangeMap(Client* client); // never used? + //void AddSpawnAssociatedGroup(vector* ret, int32 group_id); // never used, not even any code for it + //inline const char* GetCAddress() { return clientaddress; } // never used? + //inline int16 GetCPort() { return clientport; } // never used? + //inline bool IsBootingUp() { return BootingUp; } // never used? + //int32 GetShutdownTimer() {return shutdownTimer.GetTimerTime();} // never used + //float GetUnderWorld(){ return underworld; } // function never used but variable is + + // Following were private + + //char clientaddress[250]; // never used + //int16 clientport; // never used + //bool BootingUp; // never used + //bool authenticated; // never used? + //int16 next_index; // never used + + + + + + + + + + + + + + + + + + void AddFlightPath(int32 id, FlightPathInfo* info); + void AddFlightPathLocation(int32 id, FlightPathLocation* location); + void DeleteFlightPaths(); + void SendFlightPathsPackets(Client* client); + int32 GetFlightPathIndex(int32 id); + float GetFlightPathSpeed(int32 id); + + + void SendSpawn(Spawn* spawn, Client* client); // moved from private to public for bots + + void ProcessSpawnConditional(int8 condition); + +private: + /* Private Functions */ + void AddTransporter(LocationTransportDestination* loc); + void CheckDeadSpawnRemoval(); + void DeleteData(bool boot_clients = true); + void DeleteFactionLists(); + void ProcessDepop(bool respawns_allowed = false, bool repop = false); + + /* + Following functions were public but never used outside the zone server so moved them to private + */ + void ClientProcess(); // never used outside zone server + void RemoveClient(Client* client); // never used outside zone server + void DeterminePosition(SpawnLocation* spawnlocation, Spawn* spawn); // never used outside zone server + void AddDeadSpawn(Spawn* spawn, int32 timer = 0xFFFFFFFF); // never used outside zone server + int32 CalculateSpawnGroup(SpawnLocation* spawnlocation, bool respawn = false); // never used outside zone server + float GetSpawnGroupChance(int32 group_id); // never used outside zone server + vector* GetAssociatedLocations(set* groups); // never used outside zone server + set* GetAssociatedGroups(int32 group_id); // never used outside zone server + list* GetSpawnGroupsByLocation(int32 location_id); // never used outside zone server + void ProcessSpawnLocation(int32 location_id, bool respawn = false); // never used outside zone server + Spawn* ProcessSpawnLocation(SpawnLocation* spawnlocation, bool respawn = false); // never used outside zone server + Spawn* ProcessInstanceSpawnLocation(SpawnLocation* spawnlocation, map* instNPCs, map* instGroundSpawns, map* instObjSpawns, map* instWidgetSpawns, map* instSignSpawns, bool respawn = false); // never used outside zone server + void SendCharSheetChanges(); // never used outside zone server + void SendCharSheetChanges(Client* client); // never used outside zone server + void SaveClients(); // never used outside zone server + void CheckSendSpawnToClient(); // never used outside zone server + void CheckSendSpawnToClient(Client* client, bool initial_login = false); // never used outside zone server + bool SendRemoveSpawn(Client* client, Spawn* spawn, PacketStruct* packet = 0, bool delete_spawn = false); // never used outside zone server + void CheckRemoveSpawnFromClient(Spawn* spawn); // never used outside zone server + void SaveClient(Client* client); // never used outside zone server + void ProcessFaction(Spawn* spawn, Client* client); // never used outside zone server + void RegenUpdate(); // never used outside zone server + void SendCalculatedXP(Player* player, Spawn* victim); // never used outside zone server, might not be used at all any more + void SendTimeUpdate(Client* client); // never used outside zone server + void CheckWidgetTimers(); // never used outside zone server + void CheckRespawns(); // never used outside zone server + void CheckSpawnExpireTimers(); // never used outside zone server + void AddSpawnExpireTimer(Spawn* spawn, int32 expire_time, int32 expire_offset = 0); // never used outside zone server + void CheckSpawnRange(Client* client, Spawn* spawn, bool initial_login = false); // never used outside zone server + void CheckSpawnRange(Spawn* spawn); // never used outside zone server + void DeleteSpawnScriptTimers(Spawn* spawn, bool all = false); // never used outside zone server + void DeleteSpawnScriptTimers(); // never used outside zone server + void CheckSpawnScriptTimers(); // never used outside zone server + void CheckHeadingTimers(); // never used outside zone server + void RemoveHeadingTimer(Spawn* spawn); // never used outside zone server + void ProcessMovement(); // never used outside zone server + void PrepareSpawnID(Player* player, Spawn* spawn); // never used outside zone server + void RemoveMovementNPC(Spawn* spawn); // never used outside zone server + bool CheckNPCAttacks(NPC* npc, Spawn* victim, Client* client = 0); // never used outside zone server + bool CheckEnemyList(NPC* npc); // never used outside zone server + void RemovePlayerProximity(Spawn* spawn, bool all = false); // never used outside zone server + void RemovePlayerProximity(Client* client); // never used outside zone server + void CheckPlayerProximity(Spawn* spawn, Client* client); // never used outside zone server + void RemoveLocationProximities(); // never used outside zone server + void CheckLocationProximity(); // never used outside zone server + void CheckLocationGrids(); // never used outside zone server + void RemoveSpawnSupportFunctions(Spawn* spawn); // never used outside zone server + void ReloadTransporters(); // never used outside zone server + void DeleteSpawns(bool delete_all); // never used outside zone server + void AddPendingDelete(Spawn* spawn); // never used outside zone server + void ClearDeadSpawns(); // never used outside zone server + void RemoveChangedSpawn(Spawn* spawn); // never used outside zone server + void ProcessDrowning(); // never used outside zone server + void RemoveDamagedSpawn(Spawn* spawn); // never used outside zone server + void ProcessTracking(); // never used outside zone server + void ProcessTracking(Client* client); // never used outside zone server + void SendEpicMobDeathToGuild(Player* killer, Spawn* victim); // never used outside zone server + void ProcessAggroChecks(Spawn* spawn); // never used outside zone server + /// Checks to see if it is time to remove a spawn and removes it + /// Forces all spawns scheduled to be removed regardless of time + void DelayedSpawnRemoval(bool force_delete_all); // never used outside zone server + bool CombatProcess(Spawn* spawn); // never used outside zone server + void InitWeather(); // never used outside zone server + ///Dismiss all pets in the zone, useful when the spell process needs to be reloaded + void DismissAllPets(); // never used outside zone server + + void SetSpawnStructs(Client* client); + + /* Mutex Lists */ + MutexList changed_spawns; // int32 = spawn id + vector clients; + MutexList connected_clients; // probably remove this list so we are not maintaining 2 client lists + MutexList damaged_spawns; // int32 = spawn id + MutexList location_proximities; + MutexList location_grids; + MutexList remove_movement_spawns; // int32 = spawn id + set spawn_script_timers; + Mutex MSpawnScriptTimers; + set remove_spawn_script_timers_list; + Mutex MRemoveSpawnScriptTimersList; + list transporter_locations; + + /* Mutex Maps */ + MutexMap client_spawn_map; // ok + MutexMap delayed_spawn_remove_list; // 1st int32 = spawn id, 2nd int32 = time + MutexMap drowning_victims; + MutexMap heading_timers; + MutexMap movement_spawns; // 1st int32 = spawn id + MutexMap player_proximities; // 1st int32 = spawn id + MutexMap players_tracking; + MutexMap quick_database_id_lookup; // 1st int32 = database id, 2nd int32 = spawn id + MutexMap respawn_timers; + map spawn_delete_list; + MutexMap spawn_expire_timers; // 1st int32 = spawn id + map* > spawn_group_associations; + map spawn_group_chances; + map* > spawn_group_locations; + MutexMap > spawn_group_map; // MutexList is a list of spawn id's + map* > spawn_location_groups; + map spawn_location_list; + MutexMap* > spawn_range_map; // int32 in the MutexMap* = spawn id, float = distance + Mutex MWidgetTimers; + map widget_timers; // 1st int32 = spawn id + + /* Mutexs */ + Mutex m_enemy_faction_list; + Mutex m_npc_faction_list; + Mutex m_reverse_enemy_faction_list; + Mutex MDeadSpawns; + CriticalSection* MMasterZoneLock; //This needs to be a recursive lock to fix a possible /reload spells crash with multiple zones loaded - Foof + Mutex MMasterSpawnLock; + Mutex MPendingSpawnListAdd; + Mutex MSpawnList; + Mutex MTransportSpawns; + Mutex MSpawnGroupAssociation; + Mutex MSpawnGroupLocations; + Mutex MSpawnLocationGroups; + Mutex MSpawnGroupChances; + Mutex MTransportLocations; + Mutex MSpawnLocationList; + Mutex MSpawnDeleteList; + Mutex MClientList; + + /* Maps */ + map dead_spawns; + map* > enemy_faction_list; + map* > npc_faction_list; + map* > reverse_enemy_faction_list; + map spawn_list; + map m_flightPaths; + map > m_flightPathRoutes; + + /* Lists */ + list pending_spawn_list_add; + + /* Vectors */ + vector* revive_points; + vector transport_spawns; + + /* Classes */ + SpellProcess* spellProcess; + TradeskillMgr* tradeskillMgr; + + /* Timers */ + Timer aggro_timer; + Timer charsheet_changes; + Timer client_save; + Timer location_prox_timer; + Timer location_grid_timer; + Timer movement_timer; + Timer regenTimer; + Timer respawn_timer; + Timer shutdownTimer; + Timer spawn_check_add; + Timer spawn_check_remove; + Timer spawn_expire_timer; + Timer spawn_range; + Timer spawn_update; + Timer sync_game_time_timer; + Timer tracking_timer; + Timer weatherTimer; + Timer widget_timer; + + /* Enums */ + Instance_Type InstanceType; + + /* Variables */ + volatile bool finished_depop; + volatile bool depop_zone; + volatile bool repop_zone; + volatile bool respawns_allowed; + volatile bool LoadingData; + bool reloading_spellprocess; + bool zoneShuttingDown; + bool cityzone; + bool always_loaded; + bool isInstance; + + int32 pNumPlayers; + sint16 minimumStatus; + int16 minimumLevel; + int16 maximumLevel; + int16 minimumVersion; + char zone_name[64]; + char zone_file[64]; + char zone_description[255]; + float underworld; + float safe_x; + float safe_y; + float safe_z; + float safe_heading; + float xp_mod; + volatile int32 zoneID; + bool locked; // JA: implementing /zone lock|unlock commands + int32 instanceID; + string zone_motd; + int32 def_reenter_time; + int32 def_reset_time; + int32 def_lockout_time; + int8 group_zone_option; + float rain; + bool isDusk; + int dusk_hour; + int dawn_hour; + int dusk_minute; + int dawn_minute; + int32 spawn_delete_timer; + map versioned_pos_structs; + map versioned_info_structs; + map versioned_vis_structs; + + /* Weather Stuff */ + bool weather_enabled; // false = disabled, true = enabled + int8 weather_type; // 0 = normal, 1 = dynamic, 2 = random, 3 = chaotic + int32 weather_frequency; // how often weather changes + float weather_min_severity; // minimum weather severity in a zone + float weather_max_severity; // maximum weather severity in a zone + float weather_change_amount; // how much does the weather change each interval (normal weather conditions) + float weather_dynamic_offset; // max amount the weather change each interval (dynamic weather conditions) + int8 weather_change_chance; // percentage chance the weather will change + int8 weather_pattern; // 0 = decreasing severity, 1 = increasing severity, 2 = random severity + int32 weather_last_changed_time; // last time weather changed (used with weather_frequency) + float weather_current_severity; // current weather conditions in a zone + bool weather_allowed; // from zones.weather_allowed field in database + bool weather_signaled; // whether or not we told the client "it begins to rain" + + + + + + + + + bool reloading; + map* > entity_command_list; + map > npc_spell_list; + map > npc_skill_list; + map > npc_equipment_list; + map npc_list; + map object_list; + map sign_list; + map widget_list; + map > groundspawn_entries; + map > groundspawn_items; + Mutex MGroundSpawnItems; + map groundspawn_list; + map loot_tables; + map > loot_drops; + map > spawn_loot_list; + vector level_loot_list; + map > racial_loot_list; + map > zone_loot_list; + map > transporters; + map* > location_transporters; + Mutex MTransporters; + Mutex MTransportMaps; + // Map + map m_transportMaps; + +public: + Spawn* GetSpawn(int32 id); + + /* Entity Commands */ + map*>* GetEntityCommandListAll() {return &entity_command_list;} + vector* GetEntityCommandList(int32 id); + void SetEntityCommandList(int32 id, EntityCommand* command); + void ClearEntityCommands(); + EntityCommand* GetEntityCommand(int32 id, string name); + + /* NPC's */ + void AddNPC(int32 id, NPC* npc); + NPC* GetNPC(int32 id, bool override_loading = false) { + if((!reloading || override_loading) && npc_list.count(id) > 0) + return npc_list[id]; + else + return 0; + } + NPC* GetNewNPC(int32 id) { + if(!reloading && npc_list.count(id) > 0) + return new NPC(npc_list[id]); + else + return 0; + } + + /* NPC Spells */ + void AddNPCSpell(int32 list_id, int32 spell_id, int8 tier); + vector* GetNPCSpells(int32 primary_list, int32 secondary_list); + + /* NPC Skills */ + void AddNPCSkill(int32 list_id, int32 skill_id, int16 value); + map* GetNPCSkills(int32 primary_list, int32 secondary_list); + + /* NPC Equipment */ + void AddNPCEquipment(int32 list_id, int32 item_id); + void SetNPCEquipment(NPC* npc); + + /* Objects */ + void AddObject(int32 id, Object* object){ object_list[id] = object; } + Object* GetObject(int32 id, bool override_loading = false) { + if((!reloading || override_loading) && object_list.count(id) > 0) + return object_list[id]; + else + return 0; + } + Object* GetNewObject(int32 id) { + if(!reloading && object_list.count(id) > 0) + return object_list[id]->Copy(); + else + return 0; + } + + /* Signs */ + void AddSign(int32 id, Sign* sign){ sign_list[id] = sign; } + Sign* GetSign(int32 id, bool override_loading = false) { + if((!reloading || override_loading) && sign_list.count(id) > 0) + return sign_list[id]; + else + return 0; + } + Sign* GetNewSign(int32 id) { + if(!reloading && sign_list.count(id) > 0) + return sign_list[id]->Copy(); + else + return 0; + } + + /* Widgets */ + void AddWidget(int32 id, Widget* widget); + Widget* GetWidget(int32 id, bool override_loading = false); + Widget* GetNewWidget(int32 id); + + /* Groundspawns */ + // JA: groundspawn revamp + void AddGroundSpawnEntry(int32 groundspawn_id, int16 min_skill_level, int16 min_adventure_level, int8 bonus_table, float harvest1, float harvest3, float harvest5, float harvest_imbue, float harvest_rare, float harvest10, int32 harvest_coin); + void AddGroundSpawnItem(int32 groundspawn_id, int32 item_id, int8 is_rare, int32 grid_id); + vector* GetGroundSpawnEntries(int32 id); + vector* GetGroundSpawnEntryItems(int32 id); + void LoadGroundSpawnEntries(); + void LoadGroundSpawnItems(); + // + void DeleteGroundSpawnItems(); + + void AddGroundSpawn(int32 id, GroundSpawn* spawn); + GroundSpawn* GetGroundSpawn(int32 id, bool override_loading = false); + GroundSpawn* GetNewGroundSpawn(int32 id); + + /* Pet names */ + vector pet_names; + + /* Loot */ + void AddLootTable(int32 id, LootTable* table); + void AddLootDrop(int32 id, LootDrop* drop); + void AddSpawnLootList(int32 spawn_id, int32 id); + void AddLevelLootList(GlobalLoot* loot); + void AddRacialLootList(int16 racial_id, GlobalLoot* loot); + void AddZoneLootList(int32 zone, GlobalLoot* loot); + void ClearLootTables(); + vector GetSpawnLootList(int32 spawn_id, int32 zone_id, int8 spawn_level, int16 racial_id); + vector* GetLootDrops(int32 table_id); + LootTable* GetLootTable(int32 table_id); + + /* Transporters */ + void AddLocationTransporter(int32 zone_id, string message, float trigger_x, float trigger_y, float trigger_z, float trigger_radius, int32 destination_zone_id, float destination_x, float destination_y, float destination_z, float destination_heading, int32 cost, int32 unique_id); + void AddTransporter(int32 transport_id, int8 type, string name, string message, int32 destination_zone_id, float destination_x, float destination_y, float destination_z, float destination_heading, int32 cost, int32 unique_id, int8 min_level, int8 max_level, int32 quest_req, int16 quest_step_req, int32 quest_complete, int32 map_x, int32 map_y); + vector* GetTransporters(int32 transport_id); + MutexList* GetLocationTransporters(int32 zone_id); + void DeleteGlobalTransporters(); + /// + ///The transport id + ///Name of the map + void AddTransportMap(int32 id, string name); + + ///Checks to see if the transport has a map + ///The transport id we want to check + ///True if the transport id has a map + bool TransportHasMap(int32 id); + + ///Gets the map name for the given transport id + ///The transport id that we want a map for + ///Map name + string GetTransportMap(int32 id); + + ///Clears the list of transporter maps + void DeleteTransporterMaps(); + + + void DeleteGlobalSpawns(); + + void ReloadSpawns(); + + void SendStateCommand(Spawn* spawn, int32 state); +}; + +#endif diff --git a/EQ2/source/common/CRC16.cpp b/EQ2/source/common/CRC16.cpp new file mode 100644 index 000000000..f7b43adf4 --- /dev/null +++ b/EQ2/source/common/CRC16.cpp @@ -0,0 +1,328 @@ +/* + EQ2Emulator: Everquest II Server Emulator + Copyright (C) 2007 EQ2EMulator Development Team (http://www.eq2emulator.net) + + This file is part of EQ2Emulator. + + EQ2Emulator is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + EQ2Emulator is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with EQ2Emulator. If not, see . +*/ +#include + +unsigned long IntArray[]={ +0x00000000, +0x77073096, +0xEE0E612C, +0x990951BA, +0x076DC419, +0x706AF48F, +0xE963A535, +0x9E6495A3, +0x0EDB8832, +0x79DCB8A4, +0xE0D5E91E, +0x97D2D988, +0x09B64C2B, +0x7EB17CBD, +0xE7B82D07, +0x90BF1D91, +0x1DB71064, +0x6AB020F2, +0xF3B97148, +0x84BE41DE, +0x1ADAD47D, +0x6DDDE4EB, +0xF4D4B551, +0x83D385C7, +0x136C9856, +0x646BA8C0, +0xFD62F97A, +0x8A65C9EC, +0x14015C4F, +0x63066CD9, +0xFA0F3D63, +0x8D080DF5, +0x3B6E20C8, +0x4C69105E, +0xD56041E4, +0xA2677172, +0x3C03E4D1, +0x4B04D447, +0xD20D85FD, +0xA50AB56B, +0x35B5A8FA, +0x42B2986C, +0xDBBBC9D6, +0xACBCF940, +0x32D86CE3, +0x45DF5C75, +0xDCD60DCF, +0xABD13D59, +0x26D930AC, +0x51DE003A, +0xC8D75180, +0xBFD06116, +0x21B4F4B5, +0x56B3C423, +0xCFBA9599, +0xB8BDA50F, +0x2802B89E, +0x5F058808, +0xC60CD9B2, +0xB10BE924, +0x2F6F7C87, +0x58684C11, +0xC1611DAB, +0xB6662D3D, +0x76DC4190, +0x01DB7106, +0x98D220BC, +0xEFD5102A, +0x71B18589, +0x06B6B51F, +0x9FBFE4A5, +0xE8B8D433, +0x7807C9A2, +0x0F00F934, +0x9609A88E, +0xE10E9818, +0x7F6A0DBB, +0x086D3D2D, +0x91646C97, +0xE6635C01, +0x6B6B51F4, +0x1C6C6162, +0x856530D8, +0xF262004E, +0x6C0695ED, +0x1B01A57B, +0x8208F4C1, +0xF50FC457, +0x65B0D9C6, +0x12B7E950, +0x8BBEB8EA, +0xFCB9887C, +0x62DD1DDF, +0x15DA2D49, +0x8CD37CF3, +0xFBD44C65, +0x4DB26158, +0x3AB551CE, +0xA3BC0074, +0xD4BB30E2, +0x4ADFA541, +0x3DD895D7, +0xA4D1C46D, +0xD3D6F4FB, +0x4369E96A, +0x346ED9FC, +0xAD678846, +0xDA60B8D0, +0x44042D73, +0x33031DE5, +0xAA0A4C5F, +0xDD0D7CC9, +0x5005713C, +0x270241AA, +0xBE0B1010, +0xC90C2086, +0x5768B525, +0x206F85B3, +0xB966D409, +0xCE61E49F, +0x5EDEF90E, +0x29D9C998, +0xB0D09822, +0xC7D7A8B4, +0x59B33D17, +0x2EB40D81, +0xB7BD5C3B, +0xC0BA6CAD, +0xEDB88320, +0x9ABFB3B6, +0x03B6E20C, +0x74B1D29A, +0xEAD54739, +0x9DD277AF, +0x04DB2615, +0x73DC1683, +0xE3630B12, +0x94643B84, +0x0D6D6A3E, +0x7A6A5AA8, +0xE40ECF0B, +0x9309FF9D, +0x0A00AE27, +0x7D079EB1, +0xF00F9344, +0x8708A3D2, +0x1E01F268, +0x6906C2FE, +0xF762575D, +0x806567CB, +0x196C3671, +0x6E6B06E7, +0xFED41B76, +0x89D32BE0, +0x10DA7A5A, +0x67DD4ACC, +0xF9B9DF6F, +0x8EBEEFF9, +0x17B7BE43, +0x60B08ED5, +0xD6D6A3E8, +0xA1D1937E, +0x38D8C2C4, +0x4FDFF252, +0xD1BB67F1, +0xA6BC5767, +0x3FB506DD, +0x48B2364B, +0xD80D2BDA, +0xAF0A1B4C, +0x36034AF6, +0x41047A60, +0xDF60EFC3, +0xA867DF55, +0x316E8EEF, +0x4669BE79, +0xCB61B38C, +0xBC66831A, +0x256FD2A0, +0x5268E236, +0xCC0C7795, +0xBB0B4703, +0x220216B9, +0x5505262F, +0xC5BA3BBE, +0xB2BD0B28, +0x2BB45A92, +0x5CB36A04, +0xC2D7FFA7, +0xB5D0CF31, +0x2CD99E8B, +0x5BDEAE1D, +0x9B64C2B0, +0xEC63F226, +0x756AA39C, +0x026D930A, +0x9C0906A9, +0xEB0E363F, +0x72076785, +0x05005713, +0x95BF4A82, +0xE2B87A14, +0x7BB12BAE, +0x0CB61B38, +0x92D28E9B, +0xE5D5BE0D, +0x7CDCEFB7, +0x0BDBDF21, +0x86D3D2D4, +0xF1D4E242, +0x68DDB3F8, +0x1FDA836E, +0x81BE16CD, +0xF6B9265B, +0x6FB077E1, +0x18B74777, +0x88085AE6, +0xFF0F6A70, +0x66063BCA, +0x11010B5C, +0x8F659EFF, +0xF862AE69, +0x616BFFD3, +0x166CCF45, +0xA00AE278, +0xD70DD2EE, +0x4E048354, +0x3903B3C2, +0xA7672661, +0xD06016F7, +0x4969474D, +0x3E6E77DB, +0xAED16A4A, +0xD9D65ADC, +0x40DF0B66, +0x37D83BF0, +0xA9BCAE53, +0xDEBB9EC5, +0x47B2CF7F, +0x30B5FFE9, +0xBDBDF21C, +0xCABAC28A, +0x53B39330, +0x24B4A3A6, +0xBAD03605, +0xCDD70693, +0x54DE5729, +0x23D967BF, +0xB3667A2E, +0xC4614AB8, +0x5D681B02, +0x2A6F2B94, +0xB40BBE37, +0xC30C8EA1, +0x5A05DF1B, +0x2D02EF8D, +}; + +unsigned long CRC16(const unsigned char *buf, int size, int key) +{ + unsigned long ecx = key; //mov ecx, [esp+arg_8] + unsigned long eax = ecx; //mov eax, ecx + unsigned long edi; + + eax = ~ eax; //not eax + eax&=0xFF; //and eax, 0FFh + eax=IntArray[eax]; //mov eax, dword_0_10115D38[eax*4] IntArray + eax ^= 0x00FFFFFF; //xor eax, 0FFFFFFh + int edx = ecx; //mov edx, ecx + edx = edx >> 8; //sar edx, 8 + edx = edx ^ eax; //xor edx, eax + eax = eax >> 8; //sar eax, 8 + edx &= 0xFF; //and edx, 0FFh + eax &= 0x00FFFFFF; //and eax, 0FFFFFFh + eax ^= IntArray[edx]; //xor eax, dword_0_10115D38[edx*4] + edx = ecx; //mov edx, ecx + edx = edx >> 0x10; //sar edx, 10h + edx ^= eax; //xor edx, eax + eax = eax >> 8; //sar eax, 8 + edx &= 0xFF; //and edx, 0FFh + int esi = IntArray[edx]; //mov esi, dword_0_10115D38[edx*4] + edx = size; //mov edx, [esp+4+arg_4] + eax &= 0x00FFFFFF; //and eax, 0FFFFFFh + eax ^= esi; //xor eax, esi + ecx = ecx >> 0x18; //sar ecx, 18h + ecx ^= eax; //xor ecx, eax + ecx &= 0xFF; //and ecx, 0FFh + esi = IntArray[ecx]; //mov esi, dword_0_10115D38[ecx*4] + ecx = (int)*buf; //mov ecx, [esp+4+arg_0] + eax = eax >> 8; //sar eax, 8 + eax &= 0x00FFFFFF; //and eax, 0FFFFFFh + eax ^= esi; //xor eax, esi + for(int x = 0; x < size; x++) + { //eax is the crc, ecx is the current part of the buffer + int edx = 0; //xor edx, edx + edx = buf[x] & 0x00FF; //mov dl, [ecx] + + edx ^= eax; //xor edx, eax + eax = eax >> 8; //sar eax, 8 + edx &= 0xFF; //and edx, 0FFh + edi = IntArray[edx]; //mov edi, dword_0_10115D38[edx*4] + eax &= 0x00FFFFFF; //and eax, 0FFFFFFh + eax ^= edi; //xor eax, edi + } + return ~eax; +} diff --git a/EQ2/source/common/CRC16.h b/EQ2/source/common/CRC16.h new file mode 100644 index 000000000..7aacd3614 --- /dev/null +++ b/EQ2/source/common/CRC16.h @@ -0,0 +1,25 @@ +/* + EQ2Emulator: Everquest II Server Emulator + Copyright (C) 2007 EQ2EMulator Development Team (http://www.eq2emulator.net) + + This file is part of EQ2Emulator. + + EQ2Emulator is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + EQ2Emulator is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with EQ2Emulator. If not, see . +*/ +#ifndef _CRC16_H +#define _CRC16_H + +unsigned long CRC16(const unsigned char *buf, int size, int key); + +#endif diff --git a/EQ2/source/common/Common_Defines.h b/EQ2/source/common/Common_Defines.h new file mode 100644 index 000000000..d6b3d6453 --- /dev/null +++ b/EQ2/source/common/Common_Defines.h @@ -0,0 +1,36 @@ +/* + EQ2Emulator: Everquest II Server Emulator + Copyright (C) 2007 EQ2EMulator Development Team (http://www.eq2emulator.net) + + This file is part of EQ2Emulator. + + EQ2Emulator is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + EQ2Emulator is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with EQ2Emulator. If not, see . +*/ +#define BASEDIR "./" + +#ifndef DB_INI_FILE + #ifdef LOGIN + #define DB_INI_FILE BASEDIR "login_db.ini" + #else + #define DB_INI_FILE BASEDIR "world_db.ini" + #endif +#endif + +#ifndef MAIN_INI_FILE + #define MAIN_INI_FILE BASEDIR "LoginServer.ini" +#endif + +#ifndef OPCODES_FILE + #define OPCODES_FILE BASEDIR "opcodes.conf" +#endif diff --git a/EQ2/source/common/Condition.cpp b/EQ2/source/common/Condition.cpp new file mode 100644 index 000000000..4b9d23c3a --- /dev/null +++ b/EQ2/source/common/Condition.cpp @@ -0,0 +1,132 @@ +/* + EQ2Emulator: Everquest II Server Emulator + Copyright (C) 2007 EQ2EMulator Development Team (http://www.eq2emulator.net) + + This file is part of EQ2Emulator. + + EQ2Emulator is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + EQ2Emulator is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with EQ2Emulator. If not, see . +*/ +#include "debug.h" +#include "Condition.h" + +#ifdef WIN32 +#else +#include +#include +#include +#endif + +#ifdef WIN32 +/* + + Windows does not support condition variables by default. + So we use a simple hack of sleeping in wait() and doing + nothing anywhere else. + + some possible places to look for ways to do this: + http://www.cs.wustl.edu/~schmidt/win32-cv-1.html + + http://sources.redhat.com/pthreads-win32/ + http://sources.redhat.com/cgi-bin/cvsweb.cgi/pthreads/pthread_cond_signal.c?rev=1.7&content-type=text/x-cvsweb-markup&cvsroot=pthreads-win32 + +*/ + +#define CONDITION_HACK_GRANULARITY 4 + + +Condition::Condition() +{ +} + +void Condition::Signal() +{ +} + +void Condition::SignalAll() +{ +} + +void Condition::Wait() +{ + Sleep(CONDITION_HACK_GRANULARITY); +} + +Condition::~Condition() +{ +} + + +#else //!WIN32 + +Condition::Condition() +{ + pthread_cond_init(&cond,NULL); + pthread_mutex_init(&mutex,NULL); +} + +void Condition::Signal() +{ + pthread_mutex_lock(&mutex); + pthread_cond_signal(&cond); + pthread_mutex_unlock(&mutex); +} + +void Condition::SignalAll() +{ + pthread_mutex_lock(&mutex); + pthread_cond_broadcast(&cond); + pthread_mutex_unlock(&mutex); +} + +void Condition::Wait() +{ + pthread_mutex_lock(&mutex); + pthread_cond_wait(&cond,&mutex); + pthread_mutex_unlock(&mutex); +} + +/* +I commented this specifically because I think it might be very +difficult to write a windows counterpart to it, so I would like +to discourage its use until we can confirm that it can be reasonably +implemented on windows. + +bool Condition::TimedWait(unsigned long usec) +{ +struct timeval now; +struct timespec timeout; +int retcode=0; + pthread_mutex_lock(&mutex); + gettimeofday(&now,NULL); + now.tv_usec+=usec; + timeout.tv_sec = now.tv_sec + (now.tv_usec/1000000); + timeout.tv_nsec = (now.tv_usec%1000000) *1000; + //cout << "now=" << now.tv_sec << "."<. +*/ +#ifndef __CONDITION_H +#define __CONDITION_H + +#ifndef WIN32 +#include +#endif + +//Sombody, someday needs to figure out how to implement a condition +//system on windows... + + +class Condition { + private: +#ifndef WIN32 + pthread_cond_t cond; + pthread_mutex_t mutex; +#endif + public: + Condition(); + void Signal(); + void SignalAll(); + void Wait(); +// bool TimedWait(unsigned long usec); + ~Condition(); +}; + +#endif + + diff --git a/EQ2/source/common/ConfigReader.cpp b/EQ2/source/common/ConfigReader.cpp new file mode 100644 index 000000000..d4be10fdf --- /dev/null +++ b/EQ2/source/common/ConfigReader.cpp @@ -0,0 +1,286 @@ +/* + EQ2Emulator: Everquest II Server Emulator + Copyright (C) 2007 EQ2EMulator Development Team (http://www.eq2emulator.net) + + This file is part of EQ2Emulator. + + EQ2Emulator is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + EQ2Emulator is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with EQ2Emulator. If not, see . +*/ +#include "ConfigReader.h" +#include "Log.h" + +ConfigReader::~ConfigReader(){ + MStructs.lock(); + DestroyStructs(); + MStructs.unlock(); +} +PacketStruct* ConfigReader::getStructByVersion(const char* name, int16 version){ + PacketStruct* packet = 0; + PacketStruct* newpacket = 0; + MStructs.lock(); + vector* struct_versions = structs[string(name)]; + if(struct_versions){ + vector::iterator iter; + for(iter = struct_versions->begin(); iter != struct_versions->end(); iter++){ + packet = *iter; + if(packet && packet->GetVersion() == version){ + newpacket = new PacketStruct(packet, version); + break; + } + } + } + MStructs.unlock(); + if(!newpacket) + LogWrite(PACKET__ERROR, 0, "Packet", "Could not find struct named '%s' with version: %i", name, version); + return newpacket; +} +void ConfigReader::ReloadStructs(){ + MStructs.lock(); + DestroyStructs(); + for(int32 i=0;i*>::iterator struct_iterator; + for(struct_iterator=structs.begin();struct_iterator!=structs.end();struct_iterator++) { + vector* versions = struct_iterator->second; + vector::iterator version_iter; + if(versions){ + for(version_iter = versions->begin(); version_iter != versions->end(); version_iter++){ + safe_delete(*version_iter); + } + } + safe_delete(versions); + } + structs.clear(); +} +PacketStruct* ConfigReader::getStruct(const char* name, int16 version){ + PacketStruct* latest_version = 0; + PacketStruct* new_latest_version = 0; + MStructs.lock(); + vector* struct_versions = structs[string(name)]; + if(struct_versions){ + vector::iterator iter; + for(iter = struct_versions->begin(); iter != struct_versions->end(); iter++){ + if(!latest_version || ( (*iter)->GetVersion() > latest_version->GetVersion() && (*iter)->GetVersion() <= version) ) + latest_version = *iter; + } + if(latest_version) + new_latest_version = new PacketStruct(latest_version, version); + + } + MStructs.unlock(); + if(!new_latest_version) + LogWrite(PACKET__ERROR, 0, "Packet", "Could not find struct named '%s'", name); + return new_latest_version; +} +int16 ConfigReader::GetStructVersion(const char* name, int16 version){ + MStructs.lock(); + vector* struct_versions = structs[string(name)]; + int16 ret = 0; + if(struct_versions){ + vector::iterator iter; + PacketStruct* latest_version = 0; + for(iter = struct_versions->begin(); iter != struct_versions->end(); iter++){ + if(!latest_version || ( (*iter)->GetVersion() > latest_version->GetVersion() && (*iter)->GetVersion() <= version) ) + latest_version = *iter; + } + if(latest_version) + ret = latest_version->GetVersion(); + } + MStructs.unlock(); + return ret; +} +void ConfigReader::addStruct(const char* name, int16 version, PacketStruct* new_struct){ + string strname(name); + vector* struct_versions = structs[strname]; + if(struct_versions) + struct_versions->push_back(new_struct); + else{ + struct_versions = new vector; + struct_versions->push_back(new_struct); + structs[strname] = struct_versions; + } +} +bool ConfigReader::LoadFile(const char* name){ + load_files.push_back(name); + return processXML_Elements(name); +} +bool ConfigReader::processXML_Elements(const char* fileName){ + XMLNode xMainNode=XMLNode::openFileHelper(fileName,"EQ2Emulator"); + if(xMainNode.isEmpty()) + return false; + for(int i=0;iSetName(struct_name); + if(opcode_type) + new_struct->SetOpcodeType(opcode_type); + if(opcode_name){ + if(!new_struct->SetOpcode(opcode_name)){ + safe_delete(new_struct); + continue; + } + } + new_struct->SetVersion(version); + loadDataStruct(new_struct, xMainNode.getChildNode("Struct", i)); + addStruct(struct_name, version, new_struct); + } + return true; +} +void ConfigReader::loadDataStruct(PacketStruct* packet, XMLNode parentNode, bool array_packet){ + for(int x=0;xGetVersion()); + if(substruct_packet){ + vector::iterator itr; + vector* structs = substruct_packet->getStructs(); + DataStruct* ds = 0; + int i = 0; + char tmp[10] = {0}; + for(i=0;ibegin();itr!=structs->end();itr++) { + ds = *itr; + string new_name; + if(array_packet) + new_name = string(name).append("_").append(ds->GetStringName()); + else + new_name = string(name).append("_").append(ds->GetStringName()).append("_").append(tmp); + + DataStruct* ds2 = new DataStruct(new_name.c_str(), ds->GetType(),ds->GetLength(), ds->GetType2()); + + if(!array_packet && strlen(ds->GetArraySizeVariable()) > 1) + ds2->SetArraySizeVariable(string(name).append("_").append(ds->GetArraySizeVariable()).append("_").append(tmp).c_str()); + ds2->SetOversized(ds->GetOversized()); + ds2->SetOversizedByte(ds->GetOversizedByte()); + ds2->SetDefaultValue(ds->GetDefaultValue()); + ds2->SetMaxArraySize(ds->GetMaxArraySize()); + ds2->SetIfSetVariable(ds->GetIfSetVariable()); + ds2->SetIfNotSetVariable(ds->GetIfNotSetVariable()); + ds2->SetIfEqualsVariable(ds->GetIfEqualsVariable()); + ds2->SetIfNotEqualsVariable(ds->GetIfNotEqualsVariable()); + packet->add(ds2); + } + } + if(!array_packet){ + i--; + substruct_packet->renameSubstructArray(name, i); + //ds2->SetArraySizeVariable((char*)string(name).append("_").append(ds->GetArraySizeVariable()).append("_").append(tmp).c_str()); + packet->addPacketArrays(substruct_packet); + } + + safe_delete(substruct_packet); + } + continue; + } + else if(type && strncasecmp(type,"Array", 5)==0 && array_size){ + PacketStruct* new_packet = new PacketStruct; + new_packet->SetName(name); + new_packet->IsSubPacket(true); + new_packet->SetVersion(packet->GetVersion()); + loadDataStruct(new_packet, parentNode.getChildNode("Data", x), true); + packet->add(new_packet); + } + if(!name || !type) + { + LogWrite(MISC__WARNING, 0, "Misc", "Ignoring invalid Data Element, all elements must include at least an ElementName and Type!"); + LogWrite(MISC__WARNING, 0, "Misc", "\tStruct: '%s', version: %i", parentNode.getAttribute("Name"), parentNode.getAttribute("ClientVersion")); + continue; + } + DataStruct* ds = new DataStruct(name, type, num_size, type2); + int8 oversized_value = 0; + int8 oversized_byte_value = 255; + if(oversized){ + try{ + oversized_value = atoi(oversized); + } + catch(...){} + } + if(oversized_byte){ + try{ + oversized_byte_value = atoi(oversized_byte); + } + catch(...){} + } + ds->SetOversizedByte(oversized_byte_value); + ds->SetOversized(oversized_value); + ds->SetMaxArraySize(max_array_size); + if(array_size) + ds->SetArraySizeVariable(array_size); + ds->SetDefaultValue(byte_val); + ds->SetIfSetVariable(if_variable); + ds->SetIfNotSetVariable(if_not_variable); + ds->SetIfEqualsVariable(if_equals_variable); + ds->SetIfNotEqualsVariable(if_not_equals_variable); + packet->add(ds); + } +} + diff --git a/EQ2/source/common/ConfigReader.h b/EQ2/source/common/ConfigReader.h new file mode 100644 index 000000000..cd34ae555 --- /dev/null +++ b/EQ2/source/common/ConfigReader.h @@ -0,0 +1,52 @@ +/* + EQ2Emulator: Everquest II Server Emulator + Copyright (C) 2007 EQ2EMulator Development Team (http://www.eq2emulator.net) + + This file is part of EQ2Emulator. + + EQ2Emulator is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + EQ2Emulator is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with EQ2Emulator. If not, see . +*/ +#ifndef __CONFIG_READER__ +#define __CONFIG_READER__ +#include +#include "PacketStruct.h" +#include +#include +#include +#include "xmlParser.h" +#include "Mutex.h" + +using namespace std; + +class ConfigReader{ +public: + ~ConfigReader(); + + void addStruct(const char* name, int16 version, PacketStruct* new_struct); + PacketStruct* getStruct(const char* name, int16 version); + PacketStruct* getStructByVersion(const char* name, int16 version); + void loadDataStruct(PacketStruct* packet, XMLNode parentNode, bool array_packet = false); + bool processXML_Elements(const char* fileName); + int16 GetStructVersion(const char* name, int16 version); + void DestroyStructs(); + void ReloadStructs(); + bool LoadFile(const char* name); +private: + Mutex MStructs; + vector load_files; + map*> structs; + //vector structs; +}; +#endif + diff --git a/EQ2/source/common/Crypto.cpp b/EQ2/source/common/Crypto.cpp new file mode 100644 index 000000000..d918f5257 --- /dev/null +++ b/EQ2/source/common/Crypto.cpp @@ -0,0 +1,43 @@ +/* + EQ2Emulator: Everquest II Server Emulator + Copyright (C) 2007 EQ2EMulator Development Team (http://www.eq2emulator.net) + + This file is part of EQ2Emulator. + + EQ2Emulator is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + EQ2Emulator is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with EQ2Emulator. If not, see . +*/ +#include "Crypto.h" +#include +#include "../common/packet_dump.h" + +using namespace std; +void test(); +int64 Crypto::RSADecrypt(uchar* text, int16 size){ + int64 ret = 0; + uchar* buffer = new uchar[8]; + for(int i=7;i>=0;i--) + buffer[7-i] = text[i]; + memcpy(&ret, buffer, 8); + safe_delete_array(buffer); + return ret; +} + +void Crypto::RC4Decrypt(uchar* text, int32 size){ + client->Cypher(text, size); +} + +void Crypto::RC4Encrypt(uchar* text, int32 size){ + server->Cypher(text, size); +} + diff --git a/EQ2/source/common/Crypto.h b/EQ2/source/common/Crypto.h new file mode 100644 index 000000000..2fc31a677 --- /dev/null +++ b/EQ2/source/common/Crypto.h @@ -0,0 +1,64 @@ +/* + EQ2Emulator: Everquest II Server Emulator + Copyright (C) 2007 EQ2EMulator Development Team (http://www.eq2emulator.net) + + This file is part of EQ2Emulator. + + EQ2Emulator is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + EQ2Emulator is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with EQ2Emulator. If not, see . +*/ +#ifndef _CRYPTO_H +#define _CRYPTO_H +#include +#include "RC4.h" +#include "../common/types.h" + +using namespace std; +class Crypto { +public: + ~Crypto(){ safe_delete(client); safe_delete(server); } + Crypto() { rc4_key = 0; encrypted = false; client = 0; server = 0; }; + + static int64 RSADecrypt(uchar* text, int16 size); + void RC4Encrypt(uchar* text, int32 size); + void RC4Decrypt(uchar* text, int32 size); + int64 getRC4Key() { return rc4_key; } + void setRC4Key(int64 key) { + rc4_key = key; + if(key > 0){ + encrypted = true; + client = new RC4(~key); + server = new RC4(key); + uchar temp[20]; + client->Cypher(temp, 20); + server->Cypher(temp, 20); + } + else{ + encrypted = false; + safe_delete(client); + safe_delete(server); + } + } + bool isEncrypted(){ return encrypted; } + void setEncrypted(bool in_val){ encrypted = in_val; } + + +private: + RC4* server; + RC4* client; + bool encrypted; + int64 rc4_key; +}; + +#endif + diff --git a/EQ2/source/common/DataBuffer.h b/EQ2/source/common/DataBuffer.h new file mode 100644 index 000000000..f40486d5b --- /dev/null +++ b/EQ2/source/common/DataBuffer.h @@ -0,0 +1,207 @@ +/* + EQ2Emulator: Everquest II Server Emulator + Copyright (C) 2007 EQ2EMulator Development Team (http://www.eq2emulator.net) + + This file is part of EQ2Emulator. + + EQ2Emulator is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + EQ2Emulator is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with EQ2Emulator. If not, see . +*/ +#ifndef __EQ2_DATABUFFER_ +#define __EQ2_DATABUFFER_ +#include +#include "../common/types.h" +#include "../common/EQPacket.h" +#include "../common/EQ2_Common_Structs.h" + +#ifdef WORLD + #include "../WorldServer/SpawnLists.h" +#endif + +using namespace std; + +class DataBuffer{ +public: + bool changed; + uchar* getData(){ return (uchar*)buffer.c_str(); } + int32 getDataSize(){ return buffer.length(); } + string* getDataString(){ return &buffer; } + void CreateEQ2Color(EQ2_Color& color){ + CreateEQ2Color(&color); + } + uchar* GetLoadBuffer(){ + return load_buffer; + } + int32 GetLoadPos(){ + return load_pos; + } + int32 GetLoadLen(){ + return load_len; + } + void SetLoadPos(int32 new_pos){ + load_pos = new_pos; + } + void CreateEQ2Color(EQ2_Color* color){ + int8 rgb[3]; + float* tmp = 0; + for(int i=0;i<3;i++){ + tmp = (float*)(load_buffer + load_pos); + rgb[i] = (int8)((*tmp)*255); + load_pos += sizeof(float); + } + color->red = rgb[0]; + color->green = rgb[1]; + color->blue = rgb[2]; + } + + template void MakeEQ2_Int8(Type& output){ + MakeEQ2_Int8(&output); + } + template void MakeEQ2_Int8(Type* output){ + float* tmp = (float*)(load_buffer + load_pos); + if(*tmp < 0) + *tmp *= -1; + sint8 result = (sint8)((*tmp)*100); + memcpy(output, &result, sizeof(sint8)); + load_pos += sizeof(float); + } + void InitializeGetData(){ + get_buffer = (uchar*)buffer.c_str(); + get_len = buffer.length(); + get_pos = 0; + } + void InitializeLoadData(uchar* input, int32 size){ + buffer = string((char*)input, size); + load_buffer = (uchar*)buffer.c_str(); + load_len = size; + load_pos = 0; + } + template void LoadDataString(String& output){ + LoadDataString(&output); + } + template void LoadDataString(String* output){ + if((sizeof(output->size) + load_pos) <= load_len){ + memcpy(&output->size, load_buffer + load_pos, sizeof(output->size)); + load_pos += sizeof(output->size); + } + if((output->size + load_pos) <= load_len){ + output->data = string((char*)(load_buffer + load_pos), output->size); + load_pos += output->size; + } + } + template void LoadData(Type& output){ + LoadData(&output); + } + template void LoadData(Type* output, int32 array_size){ + if(array_size<=1){ + LoadData(output); + } + else{ + for(int32 i=0;i void LoadData(Type* output){ + if((sizeof(Type) + load_pos) <= load_len){ + memcpy(output, load_buffer + load_pos, sizeof(Type)); + load_pos += sizeof(Type); + } + } + template void LoadData(Type& output, int32 array_size){ + LoadData(&output, array_size); + } + void LoadSkip(int8 bytes){ + load_pos += bytes; + } + template void LoadSkip(Type& skip){ + LoadSkip(&skip); + } + template void LoadSkip(Type* skip){ + load_pos += sizeof(Type); + } + template void GetData(Type* output){ + if((sizeof(Type) + get_pos) <= get_len){ + *output = (Type*)get_buffer; + get_pos += sizeof(output); + } + } + void AddZeros(int16 num){ + int8* data = new int8[num]; + memset(data, 0, num); + AddData(*data); + safe_delete_array(data); + } + template void StructAddData(Type input, int16 size, string* datastring){ + if(datastring) + datastring->append((char*)&input, size); + else + buffer.append((char*)&input, size); + } + template void StructAddData(Type input, int32 array_size, int16 size, string* datastring){ + if(array_size>0){ + for(int32 i=0;i void AddData(Type input, string* datastring = 0){ + if(!datastring) + datastring = &buffer; + datastring->append((char*)&input, sizeof(input)); + } + template void AddData(Type input, int32 array_size, string* datastring = 0){ + if(array_size>0){ + for(int32 i=0;i void AddDataString(String* input, string* datastring = 0){ + AddDataString(*input, datastring); + } + template void AddDataString(String input, string* datastring = 0){ + input.size = input.data.length(); + if(!datastring) + datastring = &buffer; + datastring->append((char*)&input.size, sizeof(input.size)); + datastring->append(input.data); + } + void AddCharArray(char* array, string* datastring = 0){ + if(!datastring) + datastring = &buffer; + datastring->append(array); + } + void AddCharArray(char* array, int16 size, string* datastring = 0){ + if(!datastring) + datastring = &buffer; + datastring->append(array, size); + } + void AddData(string data, string* datastring = 0){ + if(!datastring) + datastring = &buffer; + datastring->append(data); + } + void Clear() { buffer.clear(); } +private: + string buffer; + uchar* get_buffer; + uchar* load_buffer; + int32 get_len; + int32 get_pos; + int32 load_len; + int32 load_pos; +}; +#endif + diff --git a/EQ2/source/common/DatabaseNew.cpp b/EQ2/source/common/DatabaseNew.cpp new file mode 100644 index 000000000..ff9a29fc9 --- /dev/null +++ b/EQ2/source/common/DatabaseNew.cpp @@ -0,0 +1,368 @@ +/* + EQ2Emulator: Everquest II Server Emulator + Copyright (C) 2007 EQ2EMulator Development Team (http://www.eq2emulator.net) + + This file is part of EQ2Emulator. + + EQ2Emulator is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + EQ2Emulator is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with EQ2Emulator. If not, see . +*/ +#include +#include +#include +#include +#include "Log.h" +#include "DatabaseNew.h" + +//increase this if large queries are being run frequently to make less calls to malloc() +#define QUERY_INITIAL_SIZE 512 + +#if defined WORLD +#define DB_INI "world_db.ini" +#elif defined LOGIN +#define DB_INI "login_db.ini" +#elif defined PARSER +#define DB_INI "parser_db.ini" +#endif + +DatabaseNew::DatabaseNew() { + mysql_init(&mysql); + MMysql.SetName("DatabaseNew::mysql"); +} + +DatabaseNew::~DatabaseNew() { + mysql_close(&mysql); +#if MYSQL_VERSION_ID >= 50003 + mysql_library_end(); +#else + mysql_server_end(); +#endif +} + +bool DatabaseNew::Connect() { + char line[256], *key, *val; + char host[256], user[64], password[64], database[64]; + bool found_section = false; + FILE *f; + + if ((f = fopen(DB_INI, "r")) == NULL) { + LogWrite(DATABASE__ERROR, 0, "Database", "Unable to read %s\n", DB_INI); + return false; + } + + memset(host, 0, sizeof(host)); + memset(user, 0, sizeof(user)); + memset(password, 0, sizeof(password)); + memset(database, 0, sizeof(database)); + + while (fgets(line, sizeof(line), f) != NULL) { + if (line[0] == '#' || line[0] == '\n' || line[0] == '\r') + continue; + + if (!found_section) { + if (strncasecmp(line, "[Database]", 10) == 0) + found_section = true; + } + else { + if ((key = strtok(line, "=")) != NULL) { + if ((val = strtok(NULL, "\r\n")) != NULL) { + if (strncasecmp(line, "host", 4) == 0) + strncpy(host, val, sizeof(host) - 1); + else if (strncasecmp(line, "user", 4) == 0) + strncpy(user, val, sizeof(user) - 1); + else if (strncasecmp(line, "password", 8) == 0) + strncpy(password, val, sizeof(password) - 1); + else if (strncasecmp(line, "database", 8) == 0) + strncpy(database, val, sizeof(database) - 1); + } + } + } + } + + fclose(f); + + if (host[0] == '\0') { + LogWrite(DATABASE__ERROR, 0, "Database", "Unknown 'host' in '%s'\n", DB_INI); + return false; + } + if (user[0] == '\0') { + LogWrite(DATABASE__ERROR, 0, "Database", "Unknown 'user' in '%s'\n", DB_INI); + return false; + } + if (password[0] == '\0') { + LogWrite(DATABASE__ERROR, 0, "Database", "Unknown 'password' in '%s'\n", DB_INI); + return false; + } + if (database[0] == '\0') { + LogWrite(DATABASE__ERROR, 0, "Database", "Unknown 'database' in '%s'\n", DB_INI); + return false; + } + + return Connect(host, user, password, database); +} + +bool DatabaseNew::Connect(const char *host, const char *user, const char *password, const char *database) { + return Connect(host, user, password, database, 3306); +} + +bool DatabaseNew::Connect(const char *host, const char *user, const char *password, const char *database, unsigned int port) { + if (mysql_real_connect(&mysql, host, user, password, database, port, NULL, 0) == NULL) { + LogWrite(DATABASE__ERROR, 0, "Database", "Unable to connect to MySQL server at %s:%u: %s\n", host, port, mysql_error(&mysql)); + return false; + } + + return true; +} + +bool DatabaseNew::Query(const char *query, ...) { + char *buf; + size_t size = QUERY_INITIAL_SIZE; + int num_chars; + va_list args; + bool ret = true; + + MMysql.writelock(__FUNCTION__, __LINE__); + while (true) { + if ((buf = (char *)malloc(size)) == NULL) { + LogWrite(DATABASE__ERROR, 0, "Database", "Out of memory trying to allocate database query of %u bytes\n", size); + MMysql.releasewritelock(__FUNCTION__, __LINE__); + return false; + } + + va_start(args, query); + num_chars = vsnprintf(buf, size, query, args); + va_end(args); + + if (num_chars > -1 && (size_t)num_chars < size) + break; + + if (num_chars > -1) + size = num_chars + 1; + else + size *= 2; + + free(buf); + } + + if (mysql_real_query(&mysql, buf, (unsigned long)num_chars) != 0) { + if (!IsIgnoredErrno(mysql_errno(&mysql))) { + LogWrite(DATABASE__ERROR, 0, "Database", "Error %i running MySQL query: %s\n%s\n", mysql_errno(&mysql), mysql_error(&mysql), buf); + ret = false; + } + } + free(buf); + + MMysql.releasewritelock(__FUNCTION__, __LINE__); + return ret; +} + +bool DatabaseNew::Select(DatabaseResult *result, const char *query, ...) { + char *buf; + size_t size = QUERY_INITIAL_SIZE; + int num_chars; + va_list args; + MYSQL_RES *res; + bool ret = true; + + MMysql.writelock(__FUNCTION__, __LINE__); + while (true) { + if ((buf = (char *)malloc(size)) == NULL) { + LogWrite(DATABASE__ERROR, 0, "Database", "Out of memory trying to allocate database query of %u bytes\n", size); + MMysql.releasewritelock(__FUNCTION__, __LINE__); + return false; + } + + va_start(args, query); + num_chars = vsnprintf(buf, size, query, args); + va_end(args); + + if (num_chars > -1 && (size_t)num_chars < size) + break; + + if (num_chars > -1) + size = num_chars + 1; + else + size *= 2; + + free(buf); + } + + if (mysql_real_query(&mysql, buf, (unsigned long)num_chars) != 0) { + if (!IsIgnoredErrno(mysql_errno(&mysql))) { + LogWrite(DATABASE__ERROR, 0, "Database", "Error %i running MySQL query: %s\n%s\n", mysql_errno(&mysql), mysql_error(&mysql), buf); + ret = false; + } + } + + if (ret && !IsIgnoredErrno(mysql_errno(&mysql))) { + res = mysql_store_result(&mysql); + + if (res != NULL) + ret = result->StoreResult(res); + else { + LogWrite(DATABASE__ERROR, 0, "Database", "Error storing MySql query result (%d): %s\n%s", mysql_errno(&mysql), mysql_error(&mysql), buf); + ret = false; + } + } + + free(buf); + + MMysql.releasewritelock(__FUNCTION__, __LINE__); + return ret; +} + +int32 DatabaseNew::LastInsertID() +{ + return (int32)mysql_insert_id(&mysql); +} + +long DatabaseNew::AffectedRows() +{ + return mysql_affected_rows(&mysql); +} + +char * DatabaseNew::Escape(const char *str, size_t len) { + char *buf = (char *)malloc(len * 2 + 1); + + if (buf == NULL) { + LogWrite(DATABASE__ERROR, 0, "Database", "Out of memory trying to allocate %u bytes in %s:%u\n", len * 2 + 1, __FUNCTION__, __LINE__); + return NULL; + } + + mysql_real_escape_string(&mysql, buf, str, len); + return buf; +} + +char * DatabaseNew::Escape(const char *str) { + return Escape(str, strlen(str)); +} + +string DatabaseNew::EscapeStr(const char *str, size_t len) { + char *buf = (char *)malloc(len * 2 + 1); + string ret; + + if (buf == NULL) { + LogWrite(DATABASE__ERROR, 0, "Database", "Out of memory trying to allocate %u bytes in %s:%u\n", len * 2 + 1, __FUNCTION__, __LINE__); + return NULL; + } + + mysql_real_escape_string(&mysql, buf, str, len); + ret.append(buf); + free(buf); + + return ret; +} + +string DatabaseNew::EscapeStr(const char *str) { + return EscapeStr(str, strlen(str)); +} + +string DatabaseNew::EscapeStr(string str) { + return EscapeStr(str.c_str(), str.length()); +} + +bool DatabaseNew::QueriesFromFile(const char * file) { + bool success = true; + long size; + char *buf; + int ret; + MYSQL_RES *res; + FILE *f; + + f = fopen(file, "rb"); + if (f == NULL) { + LogWrite(DATABASE__ERROR, 0, "Database", "Unable to open '%s' for reading: %s", file, strerror(errno)); + return false; + } + + fseek(f, 0, SEEK_END); + size = ftell(f); + fseek(f, 0, SEEK_SET); + + buf = (char *)malloc(size + 1); + if (buf == NULL) { + fclose(f); + LogWrite(DATABASE__ERROR, 0, "Database", "Out of memory trying to allocate %u bytes in %s:%u\n", size + 1, __FUNCTION__, __LINE__); + return false; + } + + if (fread(buf, sizeof(*buf), size, f) != (size_t)size) { + LogWrite(DATABASE__ERROR, 0, "Database", "Failed to read from '%s': %s", file, strerror(errno)); + fclose(f); + free(buf); + return false; + } + + buf[size] = '\0'; + fclose(f); + + mysql_set_server_option(&mysql, MYSQL_OPTION_MULTI_STATEMENTS_ON); + ret = mysql_real_query(&mysql, buf, size); + free(buf); + + if (ret != 0) { + LogWrite(DATABASE__ERROR, 0, "Database", "Error running MySQL queries from file '%s' (%d): %s", file, mysql_errno(&mysql), mysql_error(&mysql)); + success = false; + } + else { + //all results must be processed + do { + res = mysql_store_result(&mysql); + if (res != NULL) + mysql_free_result(res); + ret = mysql_next_result(&mysql); + + if (ret > 0) { + LogWrite(DATABASE__ERROR, 0, "Database", "Error running MySQL queries from file '%s' (%d): %s", file, mysql_errno(&mysql), mysql_error(&mysql)); + success = false; + } + + } while (ret == 0); + } + mysql_set_server_option(&mysql, MYSQL_OPTION_MULTI_STATEMENTS_OFF); + + return success; +} + +void DatabaseNew::SetIgnoredErrno(unsigned int db_errno) { + vector::iterator itr; + + for (itr = ignored_errnos.begin(); itr != ignored_errnos.end(); itr++) { + if ((*itr) == db_errno) + return; + } + + ignored_errnos.push_back(db_errno); +} + +void DatabaseNew::RemoveIgnoredErrno(unsigned int db_errno) { + vector::iterator itr; + + for (itr = ignored_errnos.begin(); itr != ignored_errnos.end(); itr++) { + if ((*itr) == db_errno) { + ignored_errnos.erase(itr); + break; + } + } +} + +bool DatabaseNew::IsIgnoredErrno(unsigned int db_errno) { + vector::iterator itr; + + for (itr = ignored_errnos.begin(); itr != ignored_errnos.end(); itr++) { + if ((*itr) == db_errno) + return true; + } + + return false; +} diff --git a/EQ2/source/common/DatabaseNew.h b/EQ2/source/common/DatabaseNew.h new file mode 100644 index 000000000..c6d9eb471 --- /dev/null +++ b/EQ2/source/common/DatabaseNew.h @@ -0,0 +1,48 @@ +#ifndef COMMON_DATABASE_H_ +#define COMMON_DATABASE_H_ + +#include +#include "DatabaseResult.h" + +using namespace std; + +class DatabaseNew { +public: + DatabaseNew(); + virtual ~DatabaseNew(); + + unsigned int GetError() {return mysql_errno(&mysql);} + const char * GetErrorMsg() {return mysql_error(&mysql);} + + bool Connect(); + bool Connect(const char *host, const char *user, const char *password, const char *database); + bool Connect(const char *host, const char *user, const char *password, const char *database, unsigned int port); + + bool Query(const char *query, ...); + bool Select(DatabaseResult *result, const char *query, ...); + + int32 LastInsertID(); + long AffectedRows(); + + //these two must free() the return char* after it's used in a query + char * Escape(const char *str, size_t len); + char * Escape(const char *str); + + //does not need free() + string EscapeStr(const char *str, size_t len); + string EscapeStr(const char *str); + string EscapeStr(string str); + + bool QueriesFromFile(const char *file); + void SetIgnoredErrno(unsigned int db_errno); + void RemoveIgnoredErrno(unsigned int db_errno); + bool IsIgnoredErrno(unsigned int db_errno); + +private: + MYSQL mysql; + Mutex MMysql; + + vector ignored_errnos; +}; + +#endif diff --git a/EQ2/source/common/DatabaseResult.cpp b/EQ2/source/common/DatabaseResult.cpp new file mode 100644 index 000000000..d3d9c2ae5 --- /dev/null +++ b/EQ2/source/common/DatabaseResult.cpp @@ -0,0 +1,260 @@ +/* + EQ2Emulator: Everquest II Server Emulator + Copyright (C) 2007 EQ2EMulator Development Team (http://www.eq2emulator.net) + + This file is part of EQ2Emulator. + + EQ2Emulator is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + EQ2Emulator is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with EQ2Emulator. If not, see . +*/ +#include +#include +#include "Log.h" +#include "DatabaseResult.h" + +//enforced by MySQL...couldn't find a #define in their headers though +#define FIELD_NAME_MAX 64 + +//return this instead of NULL for certain functions to prevent crashes from coding errors +static const char *empty_str = ""; + +DatabaseResult::DatabaseResult() { + result = NULL; + field_names = NULL; + num_fields = 0; + row = 0; +} + +DatabaseResult::~DatabaseResult() { + unsigned int i; + + if (result != NULL) + mysql_free_result(result); + + if (field_names != NULL) { + for (i = 0; i < num_fields; i++) + free(field_names[i]); + free(field_names); + } +} + +bool DatabaseResult::StoreResult(MYSQL_RES *res) { + unsigned int i, j; + MYSQL_FIELD *field; + + //clear any previously stored result + if (result != NULL) + mysql_free_result(result); + + //clear any field names from a previous result + if (field_names != NULL) { + for (i = 0; i < num_fields; i++) + free(field_names[i]); + free(field_names); + } + + //store the new result + result = res; + num_fields = mysql_num_fields(res); + + //allocate enough space for each field's name + if ((field_names = (char **)malloc(sizeof(char *) * num_fields)) == NULL) { + LogWrite(DATABASE__ERROR, 0, "Database Result", "Unable to allocate %u bytes when storing database result and fetching field names\nNumber of fields=%u\n", sizeof(char *) * num_fields, num_fields); + mysql_free_result(result); + result = NULL; + num_fields = 0; + return false; + } + + //store each field's name + i = 0; + while ((field = mysql_fetch_field(result)) != NULL) { + if ((field_names[i] = (char *)calloc(field->name_length + 1, sizeof(char))) == NULL) { + LogWrite(DATABASE__ERROR, 0, "Database Result", "Unable to allocate %u bytes when storing databse result and copying field name %s\n", field->name_length + 1, field->name); + mysql_free_result(result); + result = NULL; + for (j = 0; j < i; j++) + free(field_names[j]); + free(field_names); + field_names = NULL; + num_fields = 0; + return false; + } + + strncpy(field_names[i], field->name, field->name_length); + i++; + } + + return true; +} + +const char * DatabaseResult::GetFieldValue(unsigned int index) { + if (index >= num_fields) { + LogWrite(DATABASE__ERROR, 0, "Database Result", "Attempt to access field at index %u but there %s only %u field%s", index, num_fields == 1 ? "is" : "are", num_fields, num_fields == 1 ? "" : "s"); + return NULL; + } + + return row[index]; +} + +const char * DatabaseResult::GetFieldValueStr(const char *field_name) { + unsigned int i; + + for (i = 0; i < num_fields; i++) { + if (strncmp(field_name, field_names[i], FIELD_NAME_MAX) == 0) + return row[i]; + } + + LogWrite(DATABASE__ERROR, 0, "Database Result", "Unknown field name '%s'", field_name); + return NULL; +} + +bool DatabaseResult::Next() { + return (result != NULL && (row = mysql_fetch_row(result)) != NULL); +} + +bool DatabaseResult::IsNull(unsigned int index) { + const char *value = GetFieldValue(index); + return value == NULL; +} + +bool DatabaseResult::IsNullStr(const char *field_name) { + const char *value = GetFieldValueStr(field_name); + return value == NULL; +} + +int8 DatabaseResult::GetInt8(unsigned int index) { + const char *value = GetFieldValue(index); + return value == NULL ? 0 : atoi(value); +} + +int8 DatabaseResult::GetInt8Str(const char *field_name) { + const char *value = GetFieldValueStr(field_name); + return value == NULL ? 0 : atoi(value); +} + +sint8 DatabaseResult::GetSInt8(unsigned int index) { + const char *value = GetFieldValue(index); + return value == NULL ? 0 : atoi(value); +} + +sint8 DatabaseResult::GetSInt8Str(const char *field_name) { + const char *value = GetFieldValueStr(field_name); + return value == NULL ? 0 : atoi(value); +} + +int16 DatabaseResult::GetInt16(unsigned int index) { + const char *value = GetFieldValue(index); + return value == NULL ? 0 : atoi(value); +} + +int16 DatabaseResult::GetInt16Str(const char *field_name) { + const char *value = GetFieldValueStr(field_name); + return value == NULL ? 0 : atoi(value); +} + +sint16 DatabaseResult::GetSInt16(unsigned int index) { + const char *value = GetFieldValue(index); + return value == NULL ? 0 : atoi(value); +} + +sint16 DatabaseResult::GetSInt16Str(const char *field_name) { + const char *value = GetFieldValueStr(field_name); + return value == NULL ? 0 : atoi(value); +} + +int32 DatabaseResult::GetInt32(unsigned int index) { + const char *value = GetFieldValue(index); + return value == NULL ? 0U : strtoul(value, NULL, 10); +} + +int32 DatabaseResult::GetInt32Str(const char *field_name) { + const char *value = GetFieldValueStr(field_name); + return value == NULL ? 0U : strtoul(value, NULL, 10); +} + +sint32 DatabaseResult::GetSInt32(unsigned int index) { + const char *value = GetFieldValue(index); + return value == NULL ? 0 : atoi(value); +} + +sint32 DatabaseResult::GetSInt32Str(const char *field_name) { + const char *value = GetFieldValueStr(field_name); + return value == NULL ? 0 : atoi(value); +} + +uint64 DatabaseResult::GetInt64(unsigned int index) { + const char *value = GetFieldValue(index); +#ifdef _WIN32 + return value == NULL ? 0UL : _strtoui64(value, NULL, 10); +#else + return value == NULL ? 0UL : strtoull(value, NULL, 10); +#endif +} + +uint64 DatabaseResult::GetInt64Str(const char *field_name) { + const char *value = GetFieldValueStr(field_name); +#ifdef _WIN32 + return value == NULL ? 0UL : _strtoui64(value, NULL, 10); +#else + return value == NULL ? 0UL : strtoull(value, NULL, 10); +#endif +} + +sint64 DatabaseResult::GetSInt64(unsigned int index) { + const char *value = GetFieldValue(index); +#ifdef _WIN32 + return value == NULL ? 0L : _strtoi64(value, NULL, 10); +#else + return value == NULL ? 0L : strtoll(value, NULL, 10); +#endif +} + +sint64 DatabaseResult::GetSInt64Str(const char *field_name) { + const char *value = GetFieldValueStr(field_name); +#ifdef _WIN32 + return value == NULL ? 0L : _strtoi64(value, NULL, 10); +#else + return value == NULL ? 0L : strtoll(value, NULL, 10); +#endif +} + +float DatabaseResult::GetFloat(unsigned int index) { + const char *value = GetFieldValue(index); + return value == NULL ? 0.0F : atof(value); +} + +float DatabaseResult::GetFloatStr(const char *field_name) { + const char *value = GetFieldValueStr(field_name); + return value == NULL ? 0.0F : atof(value); +} + +char DatabaseResult::GetChar(unsigned int index) { + const char *value = GetFieldValue(index); + return value == NULL ? '\0' : value[0]; +} + +char DatabaseResult::GetCharStr(const char *field_name) { + const char *value = GetFieldValueStr(field_name); + return value == NULL ? '\0' : value[0]; +} + +const char * DatabaseResult::GetString(unsigned int index) { + const char *value = GetFieldValue(index); + return value == NULL ? empty_str : value; +} + +const char * DatabaseResult::GetStringStr(const char *field_name) { + const char *value = GetFieldValueStr(field_name); + return value == NULL ? empty_str : value; +} diff --git a/EQ2/source/common/DatabaseResult.h b/EQ2/source/common/DatabaseResult.h new file mode 100644 index 000000000..830bae96e --- /dev/null +++ b/EQ2/source/common/DatabaseResult.h @@ -0,0 +1,55 @@ +#ifndef COMMON_DATABASERESULT_H_ +#define COMMON_DATABASERESULT_H_ + +#include "types.h" +#ifdef _WIN32 +#include //#include when we/if we go to winsock2 :/ +#endif +#include + +class DatabaseResult { +public: + DatabaseResult(); + virtual ~DatabaseResult(); + + bool StoreResult(MYSQL_RES *res); + bool Next(); + + bool IsNull(unsigned int index); + bool IsNullStr(const char *field_name); + int8 GetInt8(unsigned int index); + int8 GetInt8Str(const char *field_name); + sint8 GetSInt8(unsigned int index); + sint8 GetSInt8Str(const char *field_name); + int16 GetInt16(unsigned int index); + int16 GetInt16Str(const char *field_name); + sint16 GetSInt16(unsigned int index); + sint16 GetSInt16Str(const char *field_name); + int32 GetInt32(unsigned int index); + int32 GetInt32Str(const char *field_name); + sint32 GetSInt32(unsigned int index); + sint32 GetSInt32Str(const char *field_name); + int64 GetInt64(unsigned int index); + int64 GetInt64Str(const char *field_name); + sint64 GetSInt64(unsigned int index); + sint64 GetSInt64Str(const char *field_name); + float GetFloat(unsigned int index); + float GetFloatStr(const char *field_name); + char GetChar(unsigned int index); + char GetCharStr(const char *field_name); + const char * GetString(unsigned int index); + const char * GetStringStr(const char *field_name); + + unsigned int GetNumRows() {return result == NULL ? 0 : (unsigned int)mysql_num_rows(result);} + +private: + MYSQL_RES *result; + MYSQL_ROW row; + char **field_names; + unsigned int num_fields; + + const char * GetFieldValue(unsigned int index); + const char * GetFieldValueStr(const char *field_name); +}; + +#endif diff --git a/EQ2/source/common/EQ2_Common_Structs.h b/EQ2/source/common/EQ2_Common_Structs.h new file mode 100644 index 000000000..9d856cd0d --- /dev/null +++ b/EQ2/source/common/EQ2_Common_Structs.h @@ -0,0 +1,289 @@ +/* + EQ2Emulator: Everquest II Server Emulator + Copyright (C) 2007 EQ2EMulator Development Team (http://www.eq2emulator.net) + + This file is part of EQ2Emulator. + + EQ2Emulator is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + EQ2Emulator is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with EQ2Emulator. If not, see . +*/ +#ifndef _EQ2COMMON_STRUCTS_ +#define _EQ2COMMON_STRUCTS_ + +#define SPAWN_PACKET_SIZE 895 +#define EQUIPMENT_L_WEAPON_INDEX 0 //chars left hand weapon +#define EQUIPMENT_R_WEAPON_INDEX 1 //chars right hand weapon +#define EQUIPMENT_HELMET 2 + +#pragma pack(1) +struct KeyGen_Struct{ + int32 size; +}; +struct KeyGen_End_Struct{ + int32 exponent_len; + int8 exponent; +}; +struct LoginByNumRequest_Struct{ + int32 account_id; + int32 access_code; + int16 version; + int32 unknown2[5]; +}; +struct LS_LoginResponse{ + int8 reply_code; // 0 granted, 1 denied + int16 unknown01; + int8 unknown02; + sint32 unknown03; // -1 denied, 0 granted + sint32 unknown04; + sint32 unknown05; + sint32 unknown06; + int8 unknown07; + int8 unknown08; + int8 unknown09; + int8 unknown10; + sint32 unknown11; + int32 accountid; + int16 unknown12; +}; +#pragma pack() +struct EQ2_EquipmentItem{ + int16 type; + EQ2_Color color; + EQ2_Color highlight; +}; +struct EQ2_Equipment{ + int16 equip_id[25]; + EQ2_Color color[25]; + EQ2_Color highlight[25]; +}; +#pragma pack(1) +struct CharFeatures{ + int16 hair_type; + int16 hair_face_type; + int16 wing_type; + int16 chest_type; + int16 legs_type; + sint8 eye_type[3]; + sint8 ear_type[3]; + sint8 eye_brow_type[3]; + sint8 cheek_type[3]; + sint8 lip_type[3]; + sint8 chin_type[3]; + sint8 nose_type[3]; + sint8 body_size; + sint8 body_age; + sint8 soga_eye_type[3]; + sint8 soga_ear_type[3]; + sint8 soga_eye_brow_type[3]; + sint8 soga_cheek_type[3]; + int16 soga_chest_type; + int16 soga_legs_type; + sint8 soga_lip_type[3]; + sint8 soga_chin_type[3]; + sint8 soga_nose_type[3]; + int16 soga_hair_type; + int16 soga_hair_face_type; + int16 combat_voice; + int16 emote_voice; + int16 mount_model_type; + + EQ2_Color mount_saddle_color; + EQ2_Color mount_color; + EQ2_Color skin_color; + EQ2_Color eye_color; + EQ2_Color hair_type_color; + EQ2_Color hair_type_highlight_color; + EQ2_Color hair_face_color; + EQ2_Color hair_face_highlight_color; + EQ2_Color hair_highlight_color; + EQ2_Color wing_color1; + EQ2_Color wing_color2; + EQ2_Color shirt_color; + EQ2_Color pants_color; + EQ2_Color hair_color1; + EQ2_Color hair_color2; + EQ2_Color soga_skin_color; + EQ2_Color soga_eye_color; + EQ2_Color soga_hair_color1; + EQ2_Color soga_hair_color2; + EQ2_Color soga_hair_type_color; + EQ2_Color soga_hair_type_highlight_color; + EQ2_Color soga_hair_face_color; + EQ2_Color soga_hair_face_highlight_color; + EQ2_Color soga_hair_highlight_color; +}; +struct PositionData{ + int32 grid_id; + sint8 Speed1; + sint8 Speed2; + sint16 Dir1; + sint16 Dir2; + sint16 Pitch1; + sint16 Pitch2; + sint16 Roll; + float X; + float Y; + float Z; + float X2; + float Y2; + float Z2; + float X3; + float Y3; + float Z3; + float SpawnOrigX; + float SpawnOrigY; + float SpawnOrigZ; + float SpawnOrigHeading; + float SpawnOrigPitch; + float SpawnOrigRoll; + float SpeedX; + float SpeedY; + float SpeedZ; + float SideSpeed; + int16 collision_radius; + int16 state; +}; +struct AppearanceData { + PositionData pos; + int16 model_type; + int16 soga_model_type; + int16 activity_status; + int16 visual_state; + int16 action_state; + int16 mood_state; + int16 emote_state; + int8 attackable; + int8 icon; + int8 hide_hood; + int8 show_level; + int8 locked_no_loot; + int8 quest_flag; + int8 heroic_flag; + int8 show_command_icon; + int8 display_hand_icon; + int8 player_flag; + int8 targetable; + int8 display_name; + char sub_title[255]; //Guild + int32 display_hp;//0 = 100 percent + int32 power_left; //bar not shown if >=100 + int8 adventure_class; + int8 tradeskill_class; + int8 level; + int8 tradeskill_level; + int8 min_level; + int8 max_level; + int8 encounter_level; + int16 visible; // 02 = normal, 15 = shadow + char name[128]; //size around here somewhere + char last_name[64]; + char prefix_title[128]; + char suffix_title[128]; + int8 race; + int8 gender; + int32 randomize; + int8 lua_race_id; +}; +struct Player_Update{ +/*0000*/ int32 activity; +/*0004*/ float unknown2; // 1 +/*0008*/ float direction1; +/*0012*/ float unknown3[8]; +/*0044*/ float speed; +/*0048*/ float side_speed; +/*0052*/ float unknown4; +/*0056*/ float orig_x; +/*0060*/ float orig_y; +/*0064*/ float orig_z; +/*0068*/ float orig_x2; +/*0072*/ float orig_y2; +/*0076*/ float orig_z2; +/*0080*/ float unknown5[3]; +/*0092*/ int32 unknown6; +/*0096*/ float unknown7[3]; +/*0108*/ int32 unknown8; +/*0112*/ int32 grid_location; +/*0116*/ float x; +/*0120*/ float y; +/*0124*/ float z; +/*0128*/ float direction2; +/*0132*/ float pitch; +/*0136*/ float unknown10; +/*0140*/ float speed_x; +/*0144*/ float speed_y; +/*0148*/ float speed_z; +}; +struct Player_Update1096{ +/*0000*/ int32 activity; +/*0004*/ float unknown2; // 1 +/*0008*/ float direction1; +/*0012*/ float unknown3[8]; +/*0044*/ float unk_speed; +/*0048*/ float speed; +/*0052*/ float side_speed; +/*0056*/ float unknown4; +/*0060*/ float orig_x; +/*0064*/ float orig_y; +/*0068*/ float orig_z; +/*0072*/ float orig_x2; +/*0076*/ float orig_y2; +/*0080*/ float orig_z2; +/*0092*/ float unknown5[3]; +/*0096*/ int32 unknown6; +/*0108*/ float unknown7[3]; +/*0112*/ int32 unknown8; +/*0116*/ int32 grid_location; +/*0120*/ float x; +/*0124*/ float y; +/*0128*/ float z; +/*0132*/ float direction2; +/*0136*/ float pitch; +/*0140*/ float unknown10; +/*0144*/ float speed_x; +/*0148*/ float speed_y; +/*0152*/ float speed_z; +}; + +struct Player_Update1144{ +/*0000*/ int32 activity; +/*0004*/ float unknown2; // 1 +/*0008*/ float direction1; +/*0012*/ float unknown3[12]; +/*0044*/ float unk_speed; +/*0048*/ float speed; +/*0052*/ float side_speed; +/*0056*/ float unknown4; +/*0060*/ float orig_x; +/*0064*/ float orig_y; +/*0068*/ float orig_z; +/*0072*/ float orig_x2; +/*0076*/ float orig_y2; +/*0080*/ float orig_z2; +/*0092*/ float unknown5[3]; +/*0096*/ int32 unknown6; +/*0108*/ float unknown7[3]; +/*0112*/ int32 unknown8; +/*0116*/ int32 grid_location; +/*0120*/ float x; +/*0124*/ float y; +/*0128*/ float z; +/*0132*/ float direction2; +/*0136*/ float pitch; +/*0140*/ float unknown10; +/*0144*/ float speed_x; +/*0148*/ float speed_y; +/*0152*/ float speed_z; +}; +#pragma pack() +#endif + diff --git a/EQ2/source/common/EQEMuError.cpp b/EQ2/source/common/EQEMuError.cpp new file mode 100644 index 000000000..323463ac1 --- /dev/null +++ b/EQ2/source/common/EQEMuError.cpp @@ -0,0 +1,131 @@ +/* + EQ2Emulator: Everquest II Server Emulator + Copyright (C) 2007 EQ2EMulator Development Team (http://www.eq2emulator.net) + + This file is part of EQ2Emulator. + + EQ2Emulator is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + EQ2Emulator is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with EQ2Emulator. If not, see . +*/ +#ifdef WIN32 +#include +#include +#endif +#include "EQEMuError.h" +#include "linked_list.h" +#include "Mutex.h" +#include "MiscFunctions.h" +#include +#include +#ifdef WIN32 + #include +#endif + +void CatchSignal(int sig_num); + +const char* EQEMuErrorText[EQEMuError_MaxErrorID] = { "ErrorID# 0, No Error", + "MySQL Error #1405 or #2001 means your mysql server rejected the username and password you presented it.", + "MySQL Error #2003 means you were unable to connect to the mysql server.", + "MySQL Error #2005 means you there are too many connections on the mysql server. The server is overloaded.", + "MySQL Error #2007 means you the server is out of memory. The server is overloaded.", + }; + +LinkedList* EQEMuErrorList; +Mutex* MEQEMuErrorList; +AutoDelete< LinkedList > ADEQEMuErrorList(&EQEMuErrorList); +AutoDelete ADMEQEMuErrorList(&MEQEMuErrorList); + +const char* GetErrorText(int32 iError) { + if (iError >= EQEMuError_MaxErrorID) + return "ErrorID# out of range"; + else + return EQEMuErrorText[iError]; +} + +void AddEQEMuError(eEQEMuError iError, bool iExitNow) { + if (!iError) + return; + if (!EQEMuErrorList) { + EQEMuErrorList = new LinkedList; + MEQEMuErrorList = new Mutex; + } + LockMutex lock(MEQEMuErrorList); + + LinkedListIterator iterator(*EQEMuErrorList); + iterator.Reset(); + while (iterator.MoreElements()) { + if (iterator.GetData()[0] == 1) { + if (*((eEQEMuError*) &(iterator.GetData()[1])) == iError) + return; + } + iterator.Advance(); + } + + char* tmp = new char[6]; + tmp[0] = 1; + tmp[5] = 0; + *((int32*) &tmp[1]) = iError; + EQEMuErrorList->Append(tmp); + + if (iExitNow) + CatchSignal(2); +} + +void AddEQEMuError(char* iError, bool iExitNow) { + if (!iError) + return; + if (!EQEMuErrorList) { + EQEMuErrorList = new LinkedList; + MEQEMuErrorList = new Mutex; + } + LockMutex lock(MEQEMuErrorList); + char* tmp = strcpy(new char[strlen(iError) + 1], iError); + EQEMuErrorList->Append(tmp); + + if (iExitNow) + CatchSignal(2); +} + +int32 CheckEQEMuError() { + if (!EQEMuErrorList) + return 0; + int32 ret = 0; + char* tmp = 0; + bool HeaderPrinted = false; + LockMutex lock(MEQEMuErrorList); + + while ((tmp = EQEMuErrorList->Pop() )) { + if (!HeaderPrinted) { + fprintf(stdout, "===============================\nRuntime errors:\n\n"); + HeaderPrinted = true; + } + if (tmp[0] == 1) { + fprintf(stdout, "%s\n", GetErrorText(*((int32*) &tmp[1]))); + } + else { + fprintf(stdout, "%s\n\n", tmp); + } + safe_delete(tmp); + ret++; + } + return ret; +} + +void CheckEQEMuErrorAndPause() { + if (CheckEQEMuError()) { + fprintf(stdout, "Hit any key to exit\n"); + getchar(); + } +} + + diff --git a/EQ2/source/common/EQEMuError.h b/EQ2/source/common/EQEMuError.h new file mode 100644 index 000000000..03b364cc1 --- /dev/null +++ b/EQ2/source/common/EQEMuError.h @@ -0,0 +1,39 @@ +/* + EQ2Emulator: Everquest II Server Emulator + Copyright (C) 2007 EQ2EMulator Development Team (http://www.eq2emulator.net) + + This file is part of EQ2Emulator. + + EQ2Emulator is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + EQ2Emulator is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with EQ2Emulator. If not, see . +*/ +#ifndef EQEMuError_H +#define EQEMuError_H + +#include "../common/types.h" + +enum eEQEMuError { EQEMuError_NoError, + EQEMuError_Mysql_1405, + EQEMuError_Mysql_2003, + EQEMuError_Mysql_2005, + EQEMuError_Mysql_2007, + EQEMuError_MaxErrorID }; + +void AddEQEMuError(eEQEMuError iError, bool iExitNow = false); +void AddEQEMuError(char* iError, bool iExitNow = false); +int32 CheckEQEMuError(); +void CheckEQEMuErrorAndPause(); + +#endif + + diff --git a/EQ2/source/common/EQPacket.cpp b/EQ2/source/common/EQPacket.cpp new file mode 100644 index 000000000..b024556db --- /dev/null +++ b/EQ2/source/common/EQPacket.cpp @@ -0,0 +1,590 @@ +/* + EQ2Emulator: Everquest II Server Emulator + Copyright (C) 2007 EQ2EMulator Development Team (http://www.eq2emulator.net) + + This file is part of EQ2Emulator. + + EQ2Emulator is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + EQ2Emulator is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with EQ2Emulator. If not, see . +*/ +#include "debug.h" +#include +#include +#include +#include +#include "EQPacket.h" +#include "misc.h" +#include "op_codes.h" +#include "CRC16.h" +#include "opcodemgr.h" +#include "packet_dump.h" +#include +#include "Log.h" + +using namespace std; +extern mapEQOpcodeManager; + +uint8 EQApplicationPacket::default_opcode_size=2; + +EQPacket::EQPacket(const uint16 op, const unsigned char *buf, uint32 len) +{ + this->opcode=op; + this->pBuffer=NULL; + this->size=0; + version = 0; + setTimeInfo(0,0); + if (len>0) { + this->size=len; + pBuffer= new unsigned char[this->size]; + if (buf) { + memcpy(this->pBuffer,buf,this->size); + } else { + memset(this->pBuffer,0,this->size); + } + } +} +int8 EQ2Packet::PreparePacket(int16 MaxLen){ + int16 OpcodeVersion = GetOpcodeVersion(version); + + // stops a crash for incorrect version + if(EQOpcodeManager.count(OpcodeVersion) == 0) + { + LogWrite(PACKET__ERROR, 0, "Packet", "Version %i is not listed in the opcodes table.",version); + return -1; + } + + packet_prepared = true; + + int16 login_opcode = EQOpcodeManager[OpcodeVersion]->EmuToEQ(login_op); + int8 offset = 0; + //one of the int16s is for the seq, other is for the EQ2 opcode and compressed flag (OP_Packet is the header, not the opcode) + int32 new_size = size + sizeof(int16) + sizeof(int8); + bool oversized = false; + if(login_opcode != 2){ + new_size+=sizeof(int8); //for opcode + if(login_opcode >= 255){ + new_size += sizeof(int16); + oversized = true; + } + else + login_opcode = ntohs(login_opcode); + } + uchar* new_buffer = new uchar[new_size]; + memset(new_buffer,0,new_size); + uchar* ptr = new_buffer + sizeof(int16); // sequence is first + if(login_opcode != 2){ + if(oversized){ + ptr += sizeof(int8); //compressed flag + int8 addon = 0xff; + memcpy(ptr, &addon, sizeof(int8)); + ptr += sizeof(int8); + } + memcpy(ptr, &login_opcode, sizeof(int16)); + ptr += sizeof(int16); + } + else{ + memcpy(ptr, &login_opcode, sizeof(int8)); + ptr += sizeof(int8); + } + memcpy(ptr, pBuffer, size); + safe_delete_array(pBuffer); + pBuffer = new_buffer; + offset = new_size - size - 1; + size = new_size; + return offset; +} +uint32 EQProtocolPacket::serialize(unsigned char *dest, int8 offset) const +{ + if (opcode>0xff) { + *(uint16 *)dest=opcode; + } else { + *(dest)=0; + *(dest+1)=opcode; + } + memcpy(dest+2,pBuffer+offset,size-offset); + + return size+2; +} + +uint32 EQApplicationPacket::serialize(unsigned char *dest) const +{ + if (app_opcode_size==1) + *(unsigned char *)dest=opcode; + else + *(uint16 *)dest=opcode; + + memcpy(dest+app_opcode_size,pBuffer,size); + + return size+app_opcode_size; +} + +EQPacket::~EQPacket() +{ + safe_delete_array(pBuffer); + pBuffer=NULL; +} + +void EQPacket::DumpRawHeader(uint16 seq, FILE *to) const +{ + if (timestamp.tv_sec) { + char temp[20]; + strftime(temp,20,"%F %T",localtime((const time_t *)×tamp.tv_sec)); + fprintf(to, "%s.%06lu ",temp,timestamp.tv_usec); + } + if (src_ip) { + string sIP,dIP;; + sIP=long2ip(src_ip); + dIP=long2ip(dst_ip); + fprintf(to, "[%s:%d->%s:%d]\n",sIP.c_str(),src_port,dIP.c_str(),dst_port); + } + if (seq != 0xffff) + fprintf(to, "[Seq=%u] ",seq); + string name; + int16 OpcodeVersion = GetOpcodeVersion(version); + if(EQOpcodeManager.count(OpcodeVersion) > 0) + name = EQOpcodeManager[OpcodeVersion]->EQToName(opcode); + fprintf(to, "[OpCode 0x%04x (%s) Size=%u]\n",opcode,name.c_str(),size); +} +const char* EQPacket::GetOpcodeName(){ + int16 OpcodeVersion = GetOpcodeVersion(version); + if(EQOpcodeManager.count(OpcodeVersion) > 0) + return EQOpcodeManager[OpcodeVersion]->EQToName(opcode); + else + return NULL; +} +void EQPacket::DumpRawHeaderNoTime(uint16 seq, FILE *to) const +{ + if (src_ip) { + string sIP,dIP;; + sIP=long2ip(src_ip); + dIP=long2ip(dst_ip); + fprintf(to, "[%s:%d->%s:%d] ",sIP.c_str(),src_port,dIP.c_str(),dst_port); + } + if (seq != 0xffff) + fprintf(to, "[Seq=%u] ",seq); + + string name; + int16 OpcodeVersion = GetOpcodeVersion(version); + if(EQOpcodeManager.count(OpcodeVersion) > 0) + name = EQOpcodeManager[OpcodeVersion]->EQToName(opcode); + + fprintf(to, "[OpCode 0x%04x (%s) Size=%u]\n",opcode,name.c_str(),size); +} + +void EQPacket::DumpRaw(FILE *to) const +{ + DumpRawHeader(); + if (pBuffer && size) + dump_message_column(pBuffer, size, " ", to); + fprintf(to, "\n"); +} + +EQProtocolPacket::EQProtocolPacket(const unsigned char *buf, uint32 len, int in_opcode) +{ + uint32 offset = 0; + if(in_opcode>=0) + opcode = in_opcode; + else{ + offset=2; + opcode=ntohs(*(const uint16 *)buf); + } + + if (len-offset) { + pBuffer= new unsigned char[len-offset]; + size=len-offset; + if(buf) + memcpy(pBuffer,buf+offset,len-offset); + else + memset(pBuffer,0,size); + + } else { + pBuffer=NULL; + size=0; + } + version = 0; + eq2_compressed = false; + packet_prepared = false; + packet_encrypted = false; + sent_time = 0; + attempt_count = 0; + sequence = 0; +} + +bool EQ2Packet::AppCombine(EQ2Packet* rhs){ + bool result = false; + uchar* tmpbuffer = 0; + bool over_sized_packet = false; + int32 new_size = 0; + //bool whee = false; +// DumpPacket(this); +// DumpPacket(rhs); + /*if(rhs->size >= 255){ + DumpPacket(this); + DumpPacket(rhs); + whee = true; + }*/ + if (opcode==OP_AppCombined && ((size + rhs->size + 3) < 512)){ + int16 tmp_size = rhs->size - 2; + if(tmp_size >= 255){ + new_size = size+tmp_size+3; + over_sized_packet = true; + } + else + new_size = size+tmp_size+1; + tmpbuffer = new uchar[new_size]; + uchar* ptr = tmpbuffer; + memcpy(ptr, pBuffer, size); + ptr += size; + if(over_sized_packet){ + memset(ptr, 255, sizeof(int8)); + ptr += sizeof(int8); + tmp_size = htons(tmp_size); + memcpy(ptr, &tmp_size, sizeof(int16)); + ptr += sizeof(int16); + } + else{ + memcpy(ptr, &tmp_size, sizeof(int8)); + ptr += sizeof(int8); + } + memcpy(ptr, rhs->pBuffer+2, rhs->size-2); + delete[] pBuffer; + size = new_size; + pBuffer=tmpbuffer; + safe_delete(rhs); + result=true; + } + else if((size + rhs->size + 6) < 512){ + int32 tmp_size = size - 2; + int32 tmp_size2 = rhs->size - 2; + opcode=OP_AppCombined; + bool over_sized_packet2 = false; + new_size = size; + if(tmp_size >= 255){ + new_size += 5; + over_sized_packet = true; + } + else + new_size += 3; + if(tmp_size2 >= 255){ + new_size += tmp_size2+3; + over_sized_packet2 = true; + } + else + new_size += tmp_size2+1; + tmpbuffer = new uchar[new_size]; + tmpbuffer[2]=0; + tmpbuffer[3]=0x19; + uchar* ptr = tmpbuffer+4; + if(over_sized_packet){ + memset(ptr, 255, sizeof(int8)); + ptr += sizeof(int8); + tmp_size = htons(tmp_size); + memcpy(ptr, &tmp_size, sizeof(int16)); + ptr += sizeof(int16); + } + else{ + memcpy(ptr, &tmp_size, sizeof(int8)); + ptr += sizeof(int8); + } + memcpy(ptr, pBuffer+2, size-2); + ptr += (size-2); + if(over_sized_packet2){ + memset(ptr, 255, sizeof(int8)); + ptr += sizeof(int8); + tmp_size2 = htons(tmp_size2); + memcpy(ptr, &tmp_size2, sizeof(int16)); + ptr += sizeof(int16); + } + else{ + memcpy(ptr, &tmp_size2, sizeof(int8)); + ptr += sizeof(int8); + } + memcpy(ptr, rhs->pBuffer+2, rhs->size-2); + size = new_size; + delete[] pBuffer; + pBuffer=tmpbuffer; + safe_delete(rhs); + result=true; + } + /*if(whee){ + DumpPacket(this); + cout << "fsdfsdf"; + }*/ + //DumpPacket(this); + return result; +} + +bool EQProtocolPacket::combine(const EQProtocolPacket *rhs) +{ + bool result=false; + //if(dont_combine) + // return false; + //if (opcode==OP_Combined && size+rhs->size+5<256) { + if (opcode==OP_Combined && (rhs->size+3)<=255 && (rhs->size+3+size)<512) { + unsigned char *tmpbuffer=new unsigned char [size+rhs->size+3]; + memcpy(tmpbuffer,pBuffer,size); + uint32 offset=size; + tmpbuffer[offset++]=rhs->Size(); + offset+=rhs->serialize(tmpbuffer+offset); + size=offset; + delete[] pBuffer; + pBuffer=tmpbuffer; + result=true; + } else if( ((size+3) < 255) && ((rhs->size+3)<255) ) { + unsigned char *tmpbuffer=new unsigned char [size+rhs->size+6]; + uint32 offset=0; + tmpbuffer[offset++]=Size(); + offset+=serialize(tmpbuffer+offset); + tmpbuffer[offset++]=rhs->Size(); + offset+=rhs->serialize(tmpbuffer+offset); + size=offset; + delete[] pBuffer; + pBuffer=tmpbuffer; + opcode=OP_Combined; + result=true; + } + return result; +} + +EQApplicationPacket::EQApplicationPacket(const unsigned char *buf, uint32 len, uint8 opcode_size) +{ +uint32 offset=0; + app_opcode_size=(opcode_size==0) ? EQApplicationPacket::default_opcode_size : opcode_size; + + if (app_opcode_size==1) { + opcode=*(const unsigned char *)buf; + offset++; + } else { + opcode=*(const uint16 *)buf; + offset+=2; + } + + if ((len-offset)>0) { + pBuffer=new unsigned char[len-offset]; + memcpy(pBuffer,buf+offset,len-offset); + size=len-offset; + } else { + pBuffer=NULL; + size=0; + } + + emu_opcode = OP_Unknown; +} + +bool EQApplicationPacket::combine(const EQApplicationPacket *rhs) +{ +cout << "CALLED AP COMBINE!!!!\n"; + return false; +} + +void EQApplicationPacket::SetOpcode(EmuOpcode emu_op) { + if(emu_op == OP_Unknown) { + opcode = 0; + emu_opcode = OP_Unknown; + return; + } + + opcode = EQOpcodeManager[GetOpcodeVersion(version)]->EmuToEQ(emu_op); + + if(opcode == OP_Unknown) { + LogWrite(PACKET__DEBUG, 0, "Packet", "Unable to convert Emu opcode %s (%d) into an EQ opcode.", OpcodeNames[emu_op], emu_op); + } + + //save the emu opcode we just set. + emu_opcode = emu_op; +} + +const EmuOpcode EQApplicationPacket::GetOpcodeConst() const { + if(emu_opcode != OP_Unknown) { + return(emu_opcode); + } + if(opcode == 10000) { + return(OP_Unknown); + } + + EmuOpcode emu_op; + emu_op = EQOpcodeManager[GetOpcodeVersion(version)]->EQToEmu(opcode); + if(emu_op == OP_Unknown) { + LogWrite(PACKET__DEBUG, 1, "Packet", "Unable to convert EQ opcode 0x%.4X (%i) to an emu opcode (%s)", opcode, opcode, __FUNCTION__); + } + + return(emu_op); +} + +EQApplicationPacket *EQProtocolPacket::MakeApplicationPacket(uint8 opcode_size) const { + EQApplicationPacket *res = new EQApplicationPacket; + res->app_opcode_size=(opcode_size==0) ? EQApplicationPacket::default_opcode_size : opcode_size; + if (res->app_opcode_size==1) { + res->pBuffer= new unsigned char[size+1]; + memcpy(res->pBuffer+1,pBuffer,size); + *(res->pBuffer)=htons(opcode)&0xff; + res->opcode=opcode&0xff; + res->size=size+1; + } else { + res->pBuffer= new unsigned char[size]; + memcpy(res->pBuffer,pBuffer,size); + res->opcode=opcode; + res->size=size; + } + res->copyInfo(this); + return(res); +} +bool EQProtocolPacket::ValidateCRC(const unsigned char *buffer, int length, uint32 Key) +{ +bool valid=false; + // OP_SessionRequest, OP_SessionResponse, OP_OutOfSession are not CRC'd + if (buffer[0]==0x00 && (buffer[1]==OP_SessionRequest || buffer[1]==OP_SessionResponse || buffer[1]==OP_OutOfSession)) { + valid=true; + } else if(buffer[2] == 0x00 && buffer[3] == 0x19){ + valid = true; + } + else { + uint16 comp_crc=CRC16(buffer,length-2,Key); + uint16 packet_crc=ntohs(*(const uint16 *)(buffer+length-2)); +#ifdef EQN_DEBUG + if (packet_crc && comp_crc != packet_crc) { + cout << "CRC mismatch: comp=" << hex << comp_crc << ", packet=" << packet_crc << dec << endl; + } +#endif + valid = (!packet_crc || comp_crc == packet_crc); + } + return valid; +} + +uint32 EQProtocolPacket::Decompress(const unsigned char *buffer, const uint32 length, unsigned char *newbuf, uint32 newbufsize) +{ +uint32 newlen=0; +uint32 flag_offset=0; + newbuf[0]=buffer[0]; + if (buffer[0]==0x00) { + flag_offset=2; + newbuf[1]=buffer[1]; + } else + flag_offset=1; + + if (length>2 && buffer[flag_offset]==0x5a) { + LogWrite(PACKET__DEBUG, 0, "Packet", "In Decompress 1"); + newlen=Inflate(const_cast(buffer+flag_offset+1),length-(flag_offset+1)-2,newbuf+flag_offset,newbufsize-flag_offset)+2; + newbuf[newlen++]=buffer[length-2]; + newbuf[newlen++]=buffer[length-1]; + } else if (length>2 && buffer[flag_offset]==0xa5) { + LogWrite(PACKET__DEBUG, 0, "Packet", "In Decompress 2"); + memcpy(newbuf+flag_offset,buffer+flag_offset+1,length-(flag_offset+1)); + newlen=length-1; + } else { + memcpy(newbuf,buffer,length); + newlen=length; + } + + return newlen; +} + +uint32 EQProtocolPacket::Compress(const unsigned char *buffer, const uint32 length, unsigned char *newbuf, uint32 newbufsize) { +uint32 flag_offset=1,newlength; + //dump_message_column(buffer,length,"Before: "); + newbuf[0]=buffer[0]; + if (buffer[0]==0) { + flag_offset=2; + newbuf[1]=buffer[1]; + } + if (length>30) { + newlength=Deflate(const_cast(buffer+flag_offset),length-flag_offset,newbuf+flag_offset+1,newbufsize); + *(newbuf+flag_offset)=0x5a; + newlength+=flag_offset+1; + } else { + memmove(newbuf+flag_offset+1,buffer+flag_offset,length-flag_offset); + *(newbuf+flag_offset)=0xa5; + newlength=length+1; + } + //dump_message_column(newbuf,length,"After: "); + + return newlength; +} + +void EQProtocolPacket::ChatDecode(unsigned char *buffer, int size, int DecodeKey) +{ + if (buffer[1]!=0x01 && buffer[0]!=0x02 && buffer[0]!=0x1d) { + int Key=DecodeKey; + unsigned char *test=(unsigned char *)malloc(size); + buffer+=2; + size-=2; + + int i; + for (i = 0 ; i+4 <= size ; i+=4) + { + int pt = (*(int*)&buffer[i])^(Key); + Key = (*(int*)&buffer[i]); + *(int*)&test[i]=pt; + } + unsigned char KC=Key&0xFF; + for ( ; i < size ; i++) + { + test[i]=buffer[i]^KC; + } + memcpy(buffer,test,size); + free(test); + } +} + +void EQProtocolPacket::ChatEncode(unsigned char *buffer, int size, int EncodeKey) +{ + if (buffer[1]!=0x01 && buffer[0]!=0x02 && buffer[0]!=0x1d) { + int Key=EncodeKey; + char *test=(char*)malloc(size); + int i; + buffer+=2; + size-=2; + for ( i = 0 ; i+4 <= size ; i+=4) + { + int pt = (*(int*)&buffer[i])^(Key); + Key = pt; + *(int*)&test[i]=pt; + } + unsigned char KC=Key&0xFF; + for ( ; i < size ; i++) + { + test[i]=buffer[i]^KC; + } + memcpy(buffer,test,size); + free(test); + } +} + + + +void DumpPacketHex(const EQApplicationPacket* app) +{ + DumpPacketHex(app->pBuffer, app->size); +} + +void DumpPacketAscii(const EQApplicationPacket* app) +{ + DumpPacketAscii(app->pBuffer, app->size); +} +void DumpPacket(const EQProtocolPacket* app) { + DumpPacketHex(app->pBuffer, app->size); +} +void DumpPacket(const EQApplicationPacket* app, bool iShowInfo) { + if (iShowInfo) { + cout << "Dumping Applayer: 0x" << hex << setfill('0') << setw(4) << app->GetOpcode() << dec; + cout << " size:" << app->size << endl; + } + DumpPacketHex(app->pBuffer, app->size); +// DumpPacketAscii(app->pBuffer, app->size); +} + +void DumpPacketBin(const EQApplicationPacket* app) { + DumpPacketBin(app->pBuffer, app->size); +} + + diff --git a/EQ2/source/common/EQPacket.h b/EQ2/source/common/EQPacket.h new file mode 100644 index 000000000..be28a93a7 --- /dev/null +++ b/EQ2/source/common/EQPacket.h @@ -0,0 +1,204 @@ +/* + EQ2Emulator: Everquest II Server Emulator + Copyright (C) 2007 EQ2EMulator Development Team (http://www.eq2emulator.net) + + This file is part of EQ2Emulator. + + EQ2Emulator is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + EQ2Emulator is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with EQ2Emulator. If not, see . +*/ +#ifndef _EQPACKET_H +#define _EQPACKET_H + +#include "types.h" +#include +#include + +#ifdef WIN32 + #include + #include +#else + #include + #include +#endif + +#include "emu_opcodes.h" +#include "op_codes.h" +#include "packet_dump.h" + +class OpcodeManager; + +class EQStream; + +class EQPacket { + friend class EQStream; +public: + unsigned char *pBuffer; + uint32 size; + uint32 src_ip,dst_ip; + uint16 src_port,dst_port; + uint32 priority; + timeval timestamp; + int16 version; + ~EQPacket(); + void DumpRawHeader(uint16 seq=0xffff, FILE *to = stdout) const; + void DumpRawHeaderNoTime(uint16 seq=0xffff, FILE *to = stdout) const; + void DumpRaw(FILE *to = stdout) const; + const char* GetOpcodeName(); + + void setVersion(int16 new_version){ version = new_version; } + void setSrcInfo(uint32 sip, uint16 sport) { src_ip=sip; src_port=sport; } + void setDstInfo(uint32 dip, uint16 dport) { dst_ip=dip; dst_port=dport; } + void setTimeInfo(uint32 ts_sec, uint32 ts_usec) { timestamp.tv_sec=ts_sec; timestamp.tv_usec=ts_usec; } + void copyInfo(const EQPacket *p) { src_ip=p->src_ip; src_port=p->src_port; dst_ip=p->dst_ip; dst_port=p->dst_port; timestamp.tv_sec=p->timestamp.tv_sec; timestamp.tv_usec=p->timestamp.tv_usec; } + uint32 Size() const { return size+2; } + +//no reason to have this method in zone or world + + uint16 GetRawOpcode() const { return(opcode); } + + + inline bool operator<(const EQPacket &rhs) { + return (timestamp.tv_sec < rhs.timestamp.tv_sec || (timestamp.tv_sec==rhs.timestamp.tv_sec && timestamp.tv_usec < rhs.timestamp.tv_usec)); + } + void SetProtocolOpcode(int16 new_opcode){ + opcode = new_opcode; + } + +protected: + uint16 opcode; + + EQPacket(const uint16 op, const unsigned char *buf, const uint32 len); + EQPacket(const EQPacket &p) { version = 0; } + EQPacket() { opcode=0; pBuffer=NULL; size=0; version = 0;} + +}; + +class EQApplicationPacket; + +class EQProtocolPacket : public EQPacket { +public: + EQProtocolPacket(uint16 op, const unsigned char *buf, uint32 len) : EQPacket(op,buf,len) { + eq2_compressed = false; + packet_prepared = false; + packet_encrypted = false; + sequence = 0; + sent_time = 0; + attempt_count = 0; + } + EQProtocolPacket(const unsigned char *buf, uint32 len, int in_opcode = -1); + bool combine(const EQProtocolPacket *rhs); + uint32 serialize (unsigned char *dest, int8 offset = 0) const; + static bool ValidateCRC(const unsigned char *buffer, int length, uint32 Key); + static uint32 Decompress(const unsigned char *buffer, const uint32 length, unsigned char *newbuf, uint32 newbufsize); + static uint32 Compress(const unsigned char *buffer, const uint32 length, unsigned char *newbuf, uint32 newbufsize); + static void ChatDecode(unsigned char *buffer, int size, int DecodeKey); + static void ChatEncode(unsigned char *buffer, int size, int EncodeKey); + EQProtocolPacket *Copy() { + EQProtocolPacket* new_packet = new EQProtocolPacket(opcode,pBuffer,size); + new_packet->eq2_compressed = this->eq2_compressed; + new_packet->packet_prepared = this->packet_prepared; + new_packet->packet_encrypted = this->packet_encrypted; + return new_packet; + } + EQApplicationPacket *MakeApplicationPacket(uint8 opcode_size=0) const; + bool eq2_compressed; + bool packet_prepared; + bool packet_encrypted; + int32 sent_time; + int8 attempt_count; + int32 sequence; + +private: + EQProtocolPacket(const EQProtocolPacket &p) { } + //bool dont_combine; +}; +class EQ2Packet : public EQProtocolPacket { +public: + EQ2Packet(const EmuOpcode in_login_op, const unsigned char *buf, uint32 len) : EQProtocolPacket(OP_Packet,buf,len){ + login_op = in_login_op; + eq2_compressed = false; + packet_prepared = false; + packet_encrypted = false; + } + bool AppCombine(EQ2Packet* rhs); + EQ2Packet* Copy() { + EQ2Packet* new_packet = new EQ2Packet(login_op,pBuffer,size); + new_packet->eq2_compressed = this->eq2_compressed; + new_packet->packet_prepared = this->packet_prepared; + new_packet->packet_encrypted = this->packet_encrypted; + return new_packet; + } + int8 PreparePacket(int16 MaxLen); + EmuOpcode login_op; +}; +class EQApplicationPacket : public EQPacket { + friend class EQProtocolPacket; + friend class EQStream; +public: + EQApplicationPacket() : EQPacket(0,NULL,0) { emu_opcode = OP_Unknown; app_opcode_size=default_opcode_size; } + EQApplicationPacket(const EmuOpcode op) : EQPacket(0,NULL,0) { SetOpcode(op); app_opcode_size=default_opcode_size; } + EQApplicationPacket(const EmuOpcode op, const uint32 len) : EQPacket(0,NULL,len) { SetOpcode(op); app_opcode_size=default_opcode_size; } + EQApplicationPacket(const EmuOpcode op, const unsigned char *buf, const uint32 len) : EQPacket(0,buf,len) { SetOpcode(op); app_opcode_size=default_opcode_size; } + bool combine(const EQApplicationPacket *rhs); + uint32 serialize (unsigned char *dest) const; + uint32 Size() const { return size+app_opcode_size; } + EQApplicationPacket *Copy() const { + EQApplicationPacket *it = new EQApplicationPacket; + try { + it->pBuffer= new unsigned char[size]; + memcpy(it->pBuffer,pBuffer,size); + it->size=size; + it->opcode = opcode; + it->emu_opcode = emu_opcode; + it->version = version; + return(it); + } + catch( bad_alloc &ba ) + { + cout << ba.what() << endl; + if( NULL != it ) + delete it; + } + return NULL; + } + + void SetOpcodeSize(uint8 s) { app_opcode_size=s; } + void SetOpcode(EmuOpcode op); + const EmuOpcode GetOpcodeConst() const; + inline const EmuOpcode GetOpcode() const { return(GetOpcodeConst()); } + //caching version of get + inline const EmuOpcode GetOpcode() { EmuOpcode r = GetOpcodeConst(); emu_opcode = r; return(r); } + + static uint8 default_opcode_size; + +protected: + //this is just a cache so we dont look it up several times on Get() + EmuOpcode emu_opcode; + +private: + //this constructor should only be used by EQProtocolPacket, as it + //assumes the first two bytes of buf are the opcode. + EQApplicationPacket(const unsigned char *buf, uint32 len, uint8 opcode_size=0); + EQApplicationPacket(const EQApplicationPacket &p) { emu_opcode = OP_Unknown; app_opcode_size=default_opcode_size; } + + uint8 app_opcode_size; +}; + +void DumpPacketHex(const EQApplicationPacket* app); +void DumpPacket(const EQProtocolPacket* app); +void DumpPacketAscii(const EQApplicationPacket* app); +void DumpPacket(const EQApplicationPacket* app, bool iShowInfo = false); +void DumpPacketBin(const EQApplicationPacket* app); + +#endif diff --git a/EQ2/source/common/EQStream.cpp b/EQ2/source/common/EQStream.cpp new file mode 100644 index 000000000..3aa4e5ec4 --- /dev/null +++ b/EQ2/source/common/EQStream.cpp @@ -0,0 +1,1333 @@ +/* + EQ2Emulator: Everquest II Server Emulator + Copyright (C) 2007 EQ2EMulator Development Team (http://www.eq2emulator.net) + + This file is part of EQ2Emulator. + + EQ2Emulator is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + EQ2Emulator is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with EQ2Emulator. If not, see . +*/ +#ifdef WIN32 +#include + #include +#endif +#include "debug.h" +#include +#include +#include +#include +#include +#include +#ifdef WIN32 + #include +#else + #include + #include + #include + #include + #include + #include + #include +#endif +#include "EQPacket.h" +#include "EQStream.h" +#include "EQStreamFactory.h" +#include "misc.h" +#include "Mutex.h" +#include "op_codes.h" +#include "CRC16.h" +#include "packet_dump.h" +#ifdef LOGIN + #include "../LoginServer/login_structs.h" +#endif +#include "EQ2_Common_Structs.h" +#include "Log.h" + +uint16 EQStream::MaxWindowSize=2048; + +void EQStream::init() { + timeout_delays = 0; + active_users = 0; + Session=0; + Key=0; + MaxLen=0; + NextInSeq=0; + NextOutSeq=0; + CombinedAppPacket=NULL; + MaxAckReceived=-1; + NextAckToSend=-1; + LastAckSent=-1; + LastSeqSent=-1; + MaxSends=5; + LastPacket=Timer::GetCurrentTime2(); + oversize_buffer=NULL; + oversize_length=0; + oversize_offset=0; + Factory = NULL; + RateThreshold=RATEBASE/250; + DecayRate=DECAYBASE/250; + BytesWritten=0; + crypto->setRC4Key(0); +} + +EQStream::EQStream(sockaddr_in addr){ + crypto = new Crypto(); + resend_que_timer = new Timer(1000); + combine_timer = new Timer(250); //250 milliseconds + combine_timer->Start(); + resend_que_timer->Start(); + init(); + remote_ip=addr.sin_addr.s_addr; + remote_port=addr.sin_port; + State=CLOSED; + StreamType=UnknownStream; + compressed=true; + encoded=false; + app_opcode_size=2; + #ifdef WIN32 + ZeroMemory(&stream, sizeof(z_stream)); + #else + bzero(&stream, sizeof(z_stream)); + #endif + stream.zalloc = (alloc_func)0; + stream.zfree = (free_func)0; + stream.opaque = (voidpf)0; + deflateInit2(&stream, 9, Z_DEFLATED, 13, 9, Z_DEFAULT_STRATEGY); + //deflateInit(&stream, 5); + compressed_offset = 0; + client_version = 0; + received_packets = 0; + sent_packets = 0; +} + +EQProtocolPacket* EQStream::ProcessEncryptedData(uchar* data, int32 size, int16 opcode){ + //cout << "B4:\n"; + //DumpPacket(data, size); + /*if(size >= 2 && data[0] == 0 && data[1] == 0){ + cout << "Attempting to fix packet!\n"; + //Have to fix bad packet from client or it will screw up encryption :P + size--; + data++; + }*/ + crypto->RC4Decrypt(data,size); + int8 offset = 0; + if(data[0] == 0xFF && size > 2){ + offset = 3; + memcpy(&opcode, data+sizeof(int8), sizeof(int16)); + } + else{ + offset = 1; + memcpy(&opcode, data, sizeof(int8)); + } + //cout << "After:\n"; + //DumpPacket(data, size); + return new EQProtocolPacket(opcode, data+offset, size - offset); +} + +EQProtocolPacket* EQStream::ProcessEncryptedPacket(EQProtocolPacket *p){ + EQProtocolPacket* ret = NULL; + if(p->opcode == OP_Packet && p->size > 2) + ret = ProcessEncryptedData(p->pBuffer+2, p->size-2, p->opcode); + else + ret = ProcessEncryptedData(p->pBuffer, p->size, p->opcode); + return ret; +} + +bool EQStream::HandleEmbeddedPacket(EQProtocolPacket *p, int16 offset, int16 length){ + if(p && p->size >= ((uint32)(offset+2))){ + if(p->pBuffer[offset] == 0 && p->pBuffer[offset+1] == 0x19){ + if(length == 0) + length = p->size-2-offset; + else + length-=2; +#ifdef LE_DEBUG + LogWrite(PACKET__DEBUG, 0, "Packet", "Creating OP_AppCombined Packet!"); +#endif + EQProtocolPacket *subp=new EQProtocolPacket(OP_AppCombined, p->pBuffer+2+offset, length); + subp->copyInfo(p); + ProcessPacket(subp); + safe_delete(subp); + return true; + } + else if(p->pBuffer[offset] == 0 && p->pBuffer[offset+1] == 0){ + if(length == 0) + length = p->size-1-offset; + else + length--; +#ifdef LE_DEBUG + LogWrite(PACKET__DEBUG, 0, "Packet", "Creating Opcode 0 Packet!"); + DumpPacket(p->pBuffer+1+offset, length); +#endif + EQProtocolPacket* newpacket = ProcessEncryptedData(p->pBuffer+1+offset, length, OP_Packet); + if(newpacket){ +#ifdef LE_DEBUG + LogWrite(PACKET__DEBUG, 0, "Packet", "Result: "); + DumpPacket(newpacket); +#endif + EQApplicationPacket *ap = newpacket->MakeApplicationPacket(2); + InboundQueuePush(ap); + safe_delete(newpacket); + } + else + LogWrite(PACKET__ERROR, 0, "Packet", "No Packet!"); + return true; + } + } + return false; +} + +void EQStream::ProcessPacket(EQProtocolPacket *p) +{ + uint32 processed=0,subpacket_length=0; + if (p) { + + if (p->opcode!=OP_SessionRequest && p->opcode!=OP_SessionResponse && !Session) { +#ifdef EQN_DEBUG + LogWrite(PACKET__ERROR, 0, "Packet", "*** Session not initialized, packet ignored "); + //p->DumpRaw(); +#endif + return; + } + //cout << "Received " << (int)p->opcode << ":\n"; + //DumpPacket(p->pBuffer, p->size); + switch (p->opcode) { + case OP_Combined: { + processed=0; + int8 offset = 0; + int count = 0; +#ifdef LE_DEBUG + LogWrite(PACKET__DEBUG, 0, "Packet", "OP_Combined: "); + DumpPacket(p); +#endif + while(processedsize) { + if ((subpacket_length=(unsigned char)*(p->pBuffer+processed))==0xff) { + subpacket_length=ntohs(*(uint16 *)(p->pBuffer+processed+1)); + offset = 3; + } + else + offset = 1; + count++; +#ifdef LE_DEBUG + LogWrite(PACKET__DEBUG, 0, "Packet", "OP_Combined Packet %i (%u) (%u): ", count, subpacket_length, processed); +#endif + EQProtocolPacket *subp=new EQProtocolPacket(p->pBuffer+processed+offset,subpacket_length); + subp->copyInfo(p); +#ifdef LE_DEBUG + LogWrite(PACKET__DEBUG, 0, "Packet", "Opcode %i:", subp->opcode); + DumpPacket(subp); +#endif + ProcessPacket(subp); +#ifdef LE_DEBUG + DumpPacket(subp); +#endif + delete subp; + processed+=subpacket_length+offset; + } + break; + } + case OP_AppCombined: { + processed=0; + EQProtocolPacket* newpacket = 0; + int8 offset = 0; +#ifdef LE_DEBUG + LogWrite(PACKET__DEBUG, 0, "Packet", "OP_AppCombined: "); + DumpPacket(p); +#endif + int count = 0; + while(processedsize) { + count++; + if ((subpacket_length=(unsigned char)*(p->pBuffer+processed))==0xff) { + subpacket_length=ntohs(*(uint16 *)(p->pBuffer+processed+1)); + offset = 3; + } else + offset = 1; + if(crypto->getRC4Key()==0 && p->size >= 70){ + processRSAKey(p); + } + else if(crypto->isEncrypted()){ +#ifdef LE_DEBUG + LogWrite(PACKET__DEBUG, 0, "Packet", "OP_AppCombined Packet %i (%u) (%u): ", count, subpacket_length, processed); + DumpPacket(p->pBuffer+processed+offset, subpacket_length); +#endif + if(!HandleEmbeddedPacket(p, processed + offset, subpacket_length)){ +#ifdef LE_DEBUG + LogWrite(PACKET__DEBUG, 0, "Packet", "OP_AppCombined Here:"); +#endif + newpacket = ProcessEncryptedData(p->pBuffer+processed + offset, subpacket_length, OP_AppCombined); + if(newpacket){ +#ifdef LE_DEBUG + LogWrite(PACKET__DEBUG, 0, "Packet", "Opcode %i:", newpacket->opcode); + DumpPacket(newpacket); +#endif + EQApplicationPacket* ap = newpacket->MakeApplicationPacket(2); +#ifdef LE_DEBUG + LogWrite(PACKET__DEBUG, 0, "Packet", "OP_AppCombined Here2:"); + DumpPacket(ap); +#endif + InboundQueuePush(ap); + safe_delete(newpacket); + } + } + } + processed+=subpacket_length+offset; + } + } + break; + case OP_Packet: { + uint16 seq=ntohs(*(uint16 *)(p->pBuffer)); + sint8 check=CompareSequence(NextInSeq,seq); + if (check>0) { +#ifdef EQN_DEBUG + LogWrite(PACKET__DEBUG, 1, "Packet", "*** Future packet: Expecting Seq=%i, but got Seq=%i", NextInSeq, seq); + LogWrite(PACKET__DEBUG, 1, "Packet", "[Start]"); + p->DumpRawHeader(seq); + LogWrite(PACKET__DEBUG, 1, "Packet", "[End]"); +#endif + OutOfOrderpackets[seq] = p->Copy(); + SendOutOfOrderAck(seq); + } else if (check<0) { +#ifdef EQN_DEBUG + LogWrite(PACKET__DEBUG, 1, "Packet", "*** Duplicate packet: Expecting Seq=%i, but got Seq=%i", NextInSeq, seq); + LogWrite(PACKET__DEBUG, 1, "Packet", "[Start]"); + p->DumpRawHeader(seq); + LogWrite(PACKET__DEBUG, 1, "Packet", "[End]"); +#endif + OutOfOrderpackets[seq] = p->Copy(); + SendOutOfOrderAck(seq); + } else { + SetNextAckToSend(seq); + NextInSeq++; + if(HandleEmbeddedPacket(p)) + break; + if(crypto->getRC4Key()==0 && p && p->size >= 70){ + processRSAKey(p); + } + else if(crypto->isEncrypted() && p){ + EQProtocolPacket* newpacket = ProcessEncryptedPacket(p); + if(newpacket){ + EQApplicationPacket *ap = newpacket->MakeApplicationPacket(2); + InboundQueuePush(ap); + safe_delete(newpacket); + } + } + } + } + break; + case OP_Fragment: { + uint16 seq=ntohs(*(uint16 *)(p->pBuffer)); + sint8 check=CompareSequence(NextInSeq,seq); + if (check>0) { +#ifdef EQN_DEBUG + LogWrite(PACKET__DEBUG, 1, "Packet", "*** Future packet2: Expecting Seq=%i, but got Seq=%i", NextInSeq, seq); + LogWrite(PACKET__DEBUG, 1, "Packet", "[Start]"); + //p->DumpRawHeader(seq); + LogWrite(PACKET__DEBUG, 1, "Packet", "[End]"); +#endif + OutOfOrderpackets[seq] = p->Copy(); + //SendOutOfOrderAck(seq); + } else if (check<0) { +#ifdef EQN_DEBUG + LogWrite(PACKET__DEBUG, 1, "Packet", "*** Duplicate packet2: Expecting Seq=%i, but got Seq=%i", NextInSeq, seq); + LogWrite(PACKET__DEBUG, 1, "Packet", "[Start]"); + //p->DumpRawHeader(seq); + LogWrite(PACKET__DEBUG, 1, "Packet", "[End]"); +#endif + //OutOfOrderpackets[seq] = p->Copy(); + SendOutOfOrderAck(seq); + } else { + SetNextAckToSend(seq); + NextInSeq++; + if (oversize_buffer) { + memcpy(oversize_buffer+oversize_offset,p->pBuffer+2,p->size-2); + oversize_offset+=p->size-2; + //cout << "Oversized is " << oversize_offset << "/" << oversize_length << " (" << (p->size-2) << ") Seq=" << seq << endl; + if (oversize_offset==oversize_length) { + if (*(p->pBuffer+2)==0x00 && *(p->pBuffer+3)==0x19) { + EQProtocolPacket *subp=new EQProtocolPacket(oversize_buffer,oversize_offset); + subp->copyInfo(p); + ProcessPacket(subp); + delete subp; + } else { + + if(crypto->isEncrypted() && p && p->size > 2){ + EQProtocolPacket* p2 = ProcessEncryptedData(oversize_buffer, oversize_offset, p->opcode); + EQApplicationPacket *ap = p2->MakeApplicationPacket(2); + ap->copyInfo(p); + InboundQueuePush(ap); + safe_delete(p2); + } + } + delete[] oversize_buffer; + oversize_buffer=NULL; + oversize_offset=0; + } + } else if (!oversize_buffer) { + oversize_length=ntohl(*(uint32 *)(p->pBuffer+2)); + oversize_buffer=new unsigned char[oversize_length]; + memcpy(oversize_buffer,p->pBuffer+6,p->size-6); + oversize_offset=p->size-6; + //cout << "Oversized is " << oversize_offset << "/" << oversize_length << " (" << (p->size-6) << ") Seq=" << seq << endl; + } + } + } + break; + case OP_KeepAlive: { +#ifndef COLLECTOR + NonSequencedPush(new EQProtocolPacket(p->opcode,p->pBuffer,p->size)); +#endif + } + break; + case OP_Ack: { + uint16 seq=ntohs(*(uint16 *)(p->pBuffer)); + SetMaxAckReceived(seq); + } + break; + case OP_SessionRequest: { + if(GetState() == ESTABLISHED){//reset state + SetState(CLOSED); + break; + } + init(); + SessionRequest *Request=(SessionRequest *)p->pBuffer; + Session=ntohl(Request->Session); + SetMaxLen(ntohl(Request->MaxLength)); +#ifndef COLLECTOR + NextInSeq=0; + Key=0x33624702; + SendSessionResponse(); +#endif + SetState(ESTABLISHED); + } + break; + case OP_SessionResponse: { + init(); + SessionResponse *Response=(SessionResponse *)p->pBuffer; + SetMaxLen(ntohl(Response->MaxLength)); + Key=ntohl(Response->Key); + NextInSeq=0; + SetState(ESTABLISHED); + if (!Session) + Session=ntohl(Response->Session); + compressed=(Response->Format&FLAG_COMPRESSED); + encoded=(Response->Format&FLAG_ENCODED); + + // Kinda kludgy, but trie for now + if (compressed) { + if (remote_port==9000 || (remote_port==0 && p->src_port==9000)) + SetStreamType(WorldStream); + else + SetStreamType(ZoneStream); + } else if (encoded) + SetStreamType(ChatOrMailStream); + else + SetStreamType(LoginStream); + } + break; + case OP_SessionDisconnect: { + //NextInSeq=0; + SendDisconnect(); + //SetState(CLOSED); + } + break; + case OP_OutOfOrderAck: { +#ifndef COLLECTOR + uint16 seq=ntohs(*(uint16 *)(p->pBuffer)); + if (CompareSequence(GetMaxAckReceived(),seq)>0 && CompareSequence(NextOutSeq,seq) < 0) { + SetLastSeqSent(GetMaxAckReceived()); + } +#endif + } + break; + case OP_ServerKeyRequest:{ + ClientSessionStats* Stats = (ClientSessionStats*)p->pBuffer; + int16 request_id = Stats->RequestID; + AdjustRates(ntohl(Stats->average_delta)); + ServerSessionStats* stats=(ServerSessionStats*)p->pBuffer; + memset(stats, 0, sizeof(ServerSessionStats)); + stats->RequestID = request_id; + stats->current_time = ntohl(Timer::GetCurrentTime2()); + stats->sent_packets = ntohl(sent_packets); + stats->sent_packets2 = ntohl(sent_packets); + stats->received_packets = ntohl(received_packets); + stats->received_packets2 = ntohl(received_packets); + NonSequencedPush(new EQProtocolPacket(OP_SessionStatResponse,p->pBuffer,p->size)); + if(!crypto->isEncrypted()) + SendKeyRequest(); + } + break; + case OP_SessionStatResponse: { + LogWrite(PACKET__INFO, 0, "Packet", "OP_SessionStatResponse"); + } + break; + case OP_OutOfSession: { + LogWrite(PACKET__INFO, 0, "Packet", "OP_OutOfSession"); + } + break; + default: + EQApplicationPacket *ap = p->MakeApplicationPacket(app_opcode_size); + InboundQueuePush(ap); + LogWrite(PACKET__INFO, 0, "Packet", "Received unknown packet type, disconnecting client"); + //SendDisconnect(); + break; + } + if (OutOfOrderpackets.find(NextInSeq) != OutOfOrderpackets.end()){ + p = OutOfOrderpackets[NextInSeq]; + // Remove te packet from the list + OutOfOrderpackets.erase(NextInSeq); + if (p){ + +#ifdef EQN_DEBUG + LogWrite(PACKET__DEBUG, 1, "Packet", "*** Processing Future packet: Seq=%i", NextInSeq); + LogWrite(PACKET__DEBUG, 1, "Packet", "[Start]"); + //p->DumpRawHeader(NextInSeq); + LogWrite(PACKET__DEBUG, 1, "Packet", "[End]"); +#endif + ProcessPacket(p); + safe_delete(p); + } + } + } +} +int8 EQStream::EQ2_Compress(EQ2Packet* app, int8 offset){ + +#ifdef LE_DEBUG + LogWrite(PACKET__DEBUG, 0, "Packet", "Before Compress in %s, line %i:", __FUNCTION__, __LINE__); + DumpPacket(app); +#endif + + uchar* pDataPtr = app->pBuffer + offset; + uchar* deflate_buff = new uchar[app->size]; + MCompressData.lock(); + stream.next_in = pDataPtr; + stream.avail_in = app->size - offset; + stream.next_out = deflate_buff; + stream.avail_out = app->size; + + deflate(&stream, Z_SYNC_FLUSH); + int32 newsize = app->size - stream.avail_out; + safe_delete_array(app->pBuffer); + app->size = newsize + offset; + app->pBuffer = new uchar[app->size]; + app->pBuffer[(offset-1)] = 1; + memcpy(app->pBuffer + offset, deflate_buff, newsize); + MCompressData.unlock(); + safe_delete_array(deflate_buff); + +#ifdef LE_DEBUG + LogWrite(PACKET__DEBUG, 0, "Packet", "After Compress in %s, line %i:", __FUNCTION__, __LINE__); + DumpPacket(app); +#endif + + return offset - 1; +} + +int16 EQStream::processRSAKey(EQProtocolPacket *p){ + /*int16 limit = 0; + int8 offset = 13; + int8 offset2 = 0; + if(p->pBuffer[2] == 0) + limit = p->pBuffer[9]; + else{ + limit = p->pBuffer[5]; + offset2 = 5; + offset-=1; + } + crypto->setRC4Key(Crypto::RSADecrypt(p->pBuffer + offset + (limit-8), 8)); + return (limit + offset +1) - offset2;*/ + if(p->pBuffer[0] == 0) + crypto->setRC4Key(Crypto::RSADecrypt(p->pBuffer + 62, 8)); + else + crypto->setRC4Key(Crypto::RSADecrypt(p->pBuffer + 61, 8)); + return 0; +} + +void EQStream::SendKeyRequest(){ + int32 crypto_key_size = 60; + int16 size = sizeof(KeyGen_Struct) + sizeof(KeyGen_End_Struct) + crypto_key_size; + EQ2Packet *outapp=new EQ2Packet(OP_WSLoginRequestMsg,NULL,size); + memcpy(&outapp->pBuffer[0], &crypto_key_size, sizeof(int32)); + memset(&outapp->pBuffer[4], 0xFF, crypto_key_size); + memset(&outapp->pBuffer[size-5], 1, 1); + memset(&outapp->pBuffer[size-1], 1, 1); + EQ2QueuePacket(outapp); +} + +void EQStream::EncryptPacket(EQ2Packet* app, int8 compress_offset, int8 offset){ + if(app->size>2 && crypto->isEncrypted()){ + app->packet_encrypted = true; + uchar* crypt_buff = app->pBuffer; + if(app->eq2_compressed) + crypto->RC4Encrypt(crypt_buff + compress_offset, app->size - compress_offset); + else + crypto->RC4Encrypt(crypt_buff + 2 + offset, app->size - 2 - offset); + } +} + +void EQStream::EQ2QueuePacket(EQ2Packet* app, bool attempted_combine){ + if(CheckActive()){ + if(app->size < 600 && !attempted_combine){ + MCombineQueueLock.lock(); + combine_queue.push_back(app); + MCombineQueueLock.unlock(); + } + else{ + PreparePacket(app); +#ifdef LE_DEBUG + LogWrite(PACKET__DEBUG, 0, "Packet", "After B in %s, line %i:", __FUNCTION__, __LINE__); + DumpPacket(app); +#endif + SendPacket(app); + } + } +} + +void EQStream::UnPreparePacket(EQ2Packet* app){ + if(app->pBuffer[2] == 0 && app->pBuffer[3] == 19){ + uchar* new_buffer = new uchar[app->size-3]; + memcpy(new_buffer+2, app->pBuffer+5, app->size-3); + delete[] app->pBuffer; + app->size-=3; + app->pBuffer = new_buffer; + } +} + +void EQStream::PreparePacket(EQ2Packet* app, int8 offset){ + app->setVersion(client_version); + compressed_offset = 0; + +#ifdef LE_DEBUG + LogWrite(PACKET__DEBUG, 0, "Packet", "Before A in %s, line %i:", __FUNCTION__, __LINE__); + DumpPacket(app); +#endif + + if(!app->packet_prepared){ + if(app->PreparePacket(MaxLen) == 255) //invalid version + return; + } + +#ifdef LE_DEBUG + LogWrite(PACKET__DEBUG, 0, "Packet", "After Prepare in %s, line %i:", __FUNCTION__, __LINE__); + DumpPacket(app); +#endif + + if(!app->eq2_compressed && app->size>=0x80){ + compressed_offset = EQ2_Compress(app); + app->eq2_compressed = true; + } + if(!app->packet_encrypted){ + EncryptPacket(app, compressed_offset, offset); + if(app->size > 2 && app->pBuffer[2] == 0){ + uchar* new_buffer = new uchar[app->size+1]; + new_buffer[2] = 0; + memcpy(new_buffer+3, app->pBuffer+2, app->size-2); + delete[] app->pBuffer; + app->pBuffer = new_buffer; + app->size++; + } + } + +#ifdef LE_DEBUG + LogWrite(PACKET__DEBUG, 0, "Packet", "After A in %s, line %i:", __FUNCTION__, __LINE__); + DumpPacket(app); +#endif + +} + +void EQStream::SendPacket(EQProtocolPacket *p) +{ + uint32 chunksize,used; + uint32 length; + + // Convert the EQApplicationPacket to 1 or more EQProtocolPackets + if (p->size>( MaxLen-6)) { // proto-op(2), app-op(2) ... data ... crc(2) + uchar* tmpbuff=p->pBuffer; + length=p->size - 2; + + EQProtocolPacket *out=new EQProtocolPacket(OP_Fragment,NULL,MaxLen-4); + *(uint32 *)(out->pBuffer+2)=htonl(length); + memcpy(out->pBuffer+6,tmpbuff+2,MaxLen-10); + used=MaxLen-10; + +#ifdef LE_DEBUG + LogWrite(PACKET__DEBUG, 0, "Packet", "(%s, %i) New Fragment: ", __FUNCTION__, __LINE__); + DumpPacket(out); +#endif + + SequencedPush(out); + + while (usedpBuffer+2,tmpbuff,1); + memcpy(out->pBuffer+2,tmpbuff+used+2,chunksize); +#ifdef LE_DEBUG + LogWrite(PACKET__DEBUG, 0, "Packet", "Chunk: "); + DumpPacket(out); +#endif + SequencedPush(out); + used+=chunksize; + + } + +#ifdef LE_DEBUG + LogWrite(PACKET__DEBUG, 0, "Packet", "Chunk: "); + DumpPacket(out); + cerr << "1: Deleting 0x" << hex << (uint32)(p) << dec << endl; +#endif + + delete p; + } else { + SequencedPush(p); + } +} +void EQStream::SendPacket(EQApplicationPacket *p) +{ +uint32 chunksize,used; +uint32 length; + + // Convert the EQApplicationPacket to 1 or more EQProtocolPackets + if (p->size>(MaxLen-8)) { // proto-op(2), seq(2), app-op(2) ... data ... crc(2) + //cout << "Making oversized packet for: " << endl; + //cout << p->size << endl; + //p->DumpRawHeader(); + //dump_message(p->pBuffer,p->size,timestamp()); + //cout << p->size << endl; + unsigned char *tmpbuff=new unsigned char[p->size+2]; + //cout << hex << (int)tmpbuff << dec << endl; + length=p->serialize(tmpbuff); + + EQProtocolPacket *out=new EQProtocolPacket(OP_Fragment,NULL,MaxLen-4); + *(uint32 *)(out->pBuffer+2)=htonl(p->Size()); + memcpy(out->pBuffer+6,tmpbuff,MaxLen-10); + used=MaxLen-10; + SequencedPush(out); + //cout << "Chunk #" << ++i << " size=" << used << ", length-used=" << (length-used) << endl; + while (usedpBuffer+2,tmpbuff+used,chunksize); + out->size=chunksize+2; + SequencedPush(out); + used+=chunksize; + //cout << "Chunk #"<< ++i << " size=" << chunksize << ", length-used=" << (length-used) << endl; + } + //cerr << "1: Deleting 0x" << hex << (uint32)(p) << dec << endl; + delete p; + delete[] tmpbuff; + } else { + EQProtocolPacket *out=new EQProtocolPacket(OP_Packet,NULL,p->Size()+2); + p->serialize(out->pBuffer+2); + SequencedPush(out); + //cerr << "2: Deleting 0x" << hex << (uint32)(p) << dec << endl; + delete p; + } +} + +void EQStream::SequencedPush(EQProtocolPacket *p) +{ + p->setVersion(client_version); + MOutboundQueue.lock(); + *(uint16 *)(p->pBuffer)=htons(NextOutSeq); + SequencedQueue.push_back(p); + p->sequence = NextOutSeq; + NextOutSeq++; + MOutboundQueue.unlock(); +} + +void EQStream::NonSequencedPush(EQProtocolPacket *p) +{ + p->setVersion(client_version); + MOutboundQueue.lock(); + NonSequencedQueue.push_back(p); + MOutboundQueue.unlock(); +} + +void EQStream::SendAck(uint16 seq) +{ + uint16 Seq=htons(seq); + SetLastAckSent(seq); + NonSequencedPush(new EQProtocolPacket(OP_Ack,(unsigned char *)&Seq,sizeof(uint16))); +} + +void EQStream::SendOutOfOrderAck(uint16 seq) +{ + uint16 Seq=htons(seq); + NonSequencedPush(new EQProtocolPacket(OP_OutOfOrderAck,(unsigned char *)&Seq,sizeof(uint16))); +} + +bool EQStream::CheckCombineQueue(){ + bool ret = true; //processed all packets + MCombineQueueLock.lock(); + if(combine_queue.size() > 0){ + EQ2Packet* first = combine_queue.front(); + combine_queue.pop_front(); + if(combine_queue.size() == 0){ //nothing to combine this with + EQ2QueuePacket(first, true); + } + else{ + PreparePacket(first); + EQ2Packet* second = 0; + bool combine_worked = false; + int16 count = 0; + while(combine_queue.size()){ + count++; + second = combine_queue.front(); + combine_queue.pop_front(); + MCombineQueueLock.unlock(); + PreparePacket(second); + /*if(first->GetRawOpcode() != OP_AppCombined && first->pBuffer[2] == 0){ + EQ2Packet* tmp = second; + second = first; + first = tmp; + }*/ + if(!first->AppCombine(second)){ + first->SetProtocolOpcode(OP_Packet); + if(combine_worked){ + SequencedPush(first); + } + else{ + EQ2QueuePacket(first, true); + } + first = second; + combine_worked = false; + } + else{ + combine_worked = true; + //DumpPacket(first); + } + MCombineQueueLock.lock(); + if(count >= 20){ //other clients need packets too + ret = false; + break; + } + } + if(first){ + first->SetProtocolOpcode(OP_Packet); + if(combine_worked){ + SequencedPush(first); + } + else{ + EQ2QueuePacket(first, true); + } + } + } + } + MCombineQueueLock.unlock(); + return ret; +} + +void EQStream::CheckResend(int eq_fd){ + int32 curr = Timer::GetCurrentTime2(); + EQProtocolPacket* packet = 0; + deque::iterator itr; + MResendQue.lock(); + for(itr=resend_que.begin();itr!=resend_que.end();itr++){ + packet = *itr; + if(packet->attempt_count >= 5){//tried to resend this packet 5 times, client must already have it but didnt ack it + safe_delete(packet); + itr = resend_que.erase(itr); + if(itr == resend_que.end()) + break; + } + else{ + if((curr - packet->sent_time) < 1000) + continue; + packet->sent_time -=1000; + packet->attempt_count++; + WritePacket(eq_fd, packet); + } + } + MResendQue.unlock(); +} + +void EQStream::Write(int eq_fd) +{ + deque ReadyToSend; + deque SeqReadyToSend; + long maxack; + map::iterator sitr; + + // Check our rate to make sure we can send more + MRate.lock(); + sint32 threshold=RateThreshold; + MRate.unlock(); + if (BytesWritten > threshold) { + //cout << "Over threshold: " << BytesWritten << " > " << threshold << endl; + return; + } + + MCombinedAppPacket.lock(); + EQApplicationPacket *CombPack=CombinedAppPacket; + CombinedAppPacket=NULL; + MCombinedAppPacket.unlock(); + + if (CombPack) { + SendPacket(CombPack); + } + + // If we got more packets to we need to ack, send an ack on the highest one + MAcks.lock(); + maxack=MaxAckReceived; + // Added from peaks findings + if (NextAckToSend>LastAckSent || LastAckSent == 0x0000ffff) + SendAck(NextAckToSend); + MAcks.unlock(); + + // Lock the outbound queues while we process + MOutboundQueue.lock(); + + // Adjust where we start sending in case we get a late ack + if (maxack>LastSeqSent) + LastSeqSent=maxack; + + // Place to hold the base packet t combine into + EQProtocolPacket *p=NULL; + + // Loop until both are empty or MaxSends is reached + + // See if there are more non-sequenced packets left + while (NonSequencedQueue.size()) { + if (!p) { + // If we don't have a packet to try to combine into, use this one as the base + // And remove it form the queue + p = NonSequencedQueue.front(); + NonSequencedQueue.pop_front(); + } + //Check if we have a packet to combine p with... + if (NonSequencedQueue.size()){ + if (!p->combine(NonSequencedQueue.front())) { + // Tryint to combine this packet with the base didn't work (too big maybe) + // So just send the base packet (we'll try this packet again later) + ReadyToSend.push_back(p); + BytesWritten += p->size; + p = NULL; + } + else { + // Combine worked, so just remove this packet and it's spot in the queue + delete NonSequencedQueue.front(); + NonSequencedQueue.pop_front(); + } + } + else { + //We have no packets to combine p with so just send it... + ReadyToSend.push_back(p); + BytesWritten += p->size; + p = NULL; + } + if (BytesWritten > threshold) { + // Sent enough this round, lets stop to be fair + break; + } + } + + //The non-seq loop must have broke before we sent this packet, send it now + if (p){ + ReadyToSend.push_back(p); + BytesWritten += p->size; + } + + if (SequencedQueue.size() && BytesWritten < threshold) { + while(SequencedQueue.size()) { + p = SequencedQueue.front(); + BytesWritten+=p->size; + SeqReadyToSend.push_back(p); + p->sent_time = Timer::GetCurrentTime2(); + resend_que.push_back(p); + SequencedQueue.pop_front(); + LastSeqSent=p->sequence; + if (BytesWritten > threshold) { + break; + } + } + } + + // Unlock the queue + MOutboundQueue.unlock(); + + // Send all the packets we "made" + while(ReadyToSend.size()) { + WritePacket(eq_fd,ReadyToSend.front()); + delete ReadyToSend.front(); + ReadyToSend.pop_front(); + } + + while(SeqReadyToSend.size()){ + WritePacket(eq_fd,SeqReadyToSend.front()); + SeqReadyToSend.pop_front(); + } +} + +void EQStream::WritePacket(int eq_fd, EQProtocolPacket *p) +{ +uint32 length = 0; +sockaddr_in address; +unsigned char tmpbuffer[1024]; + address.sin_family = AF_INET; + address.sin_addr.s_addr=remote_ip; + address.sin_port=remote_port; +#ifdef NOWAY + uint32 ip=address.sin_addr.s_addr; + cout << "Sending to: " + << (int)*(unsigned char *)&ip + << "." << (int)*((unsigned char *)&ip+1) + << "." << (int)*((unsigned char *)&ip+2) + << "." << (int)*((unsigned char *)&ip+3) + << "," << (int)ntohs(address.sin_port) << "(" << p->size << ")" << endl; + + p->DumpRaw(); + cout << "-------------" << endl; +#endif + length=p->serialize(buffer); + if (p->opcode!=OP_SessionRequest && p->opcode!=OP_SessionResponse) { + if (compressed) { + uint32 newlen=EQProtocolPacket::Compress(buffer,length,tmpbuffer,1024); + memcpy(buffer,tmpbuffer,newlen); + length=newlen; + } + if (encoded) { + EQProtocolPacket::ChatEncode(buffer,length,Key); + } + *(uint16 *)(buffer+length)=htons(CRC16(buffer,length,Key)); + length+=2; + } + sent_packets++; + //dump_message_column(buffer,length,"Writer: "); + //cout << "Raw Data:\n"; + //DumpPacket(buffer, length); + sendto(eq_fd,(char *)buffer,length,0,(sockaddr *)&address,sizeof(address)); +} + +EQProtocolPacket *EQStream::Read(int eq_fd, sockaddr_in *from) +{ +int socklen; +int length=0; +unsigned char buffer[2048]; +EQProtocolPacket *p=NULL; +char temp[15]; + + socklen=sizeof(sockaddr); +#ifdef WIN32 + length=recvfrom(eq_fd, (char *)buffer, 2048, 0, (struct sockaddr*)from, (int *)&socklen); +#else + length=recvfrom(eq_fd, buffer, 2048, 0, (struct sockaddr*)from, (socklen_t *)&socklen); +#endif + if (length>=2) { + DumpPacket(buffer, length); + p=new EQProtocolPacket(buffer[1],&buffer[2],length-2); + + uint32 ip=from->sin_addr.s_addr; + sprintf(temp,"%d.%d.%d.%d:%d", + *(unsigned char *)&ip, + *((unsigned char *)&ip+1), + *((unsigned char *)&ip+2), + *((unsigned char *)&ip+3), + ntohs(from->sin_port)); + //cout << timestamp() << "Data from: " << temp << " OpCode 0x" << hex << setw(2) << setfill('0') << (int)p->opcode << dec << endl; + //dump_message(p->pBuffer,p->size,timestamp()); + + } + return p; +} + +void EQStream::SendSessionResponse() +{ +EQProtocolPacket *out=new EQProtocolPacket(OP_SessionResponse,NULL,sizeof(SessionResponse)); + SessionResponse *Response=(SessionResponse *)out->pBuffer; + Response->Session=htonl(Session); + Response->MaxLength=htonl(MaxLen); + Response->UnknownA=2; + Response->Format=0; + if (compressed) + Response->Format|=FLAG_COMPRESSED; + if (encoded) + Response->Format|=FLAG_ENCODED; + Response->Key=htonl(Key); + + out->size=sizeof(SessionResponse); + + NonSequencedPush(out); +} + +void EQStream::SendSessionRequest() +{ + EQProtocolPacket *out=new EQProtocolPacket(OP_SessionRequest,NULL,sizeof(SessionRequest)); + SessionRequest *Request=(SessionRequest *)out->pBuffer; + memset(Request,0,sizeof(SessionRequest)); + Request->Session=htonl(time(NULL)); + Request->MaxLength=htonl(512); + + NonSequencedPush(out); +} + +void EQStream::SendDisconnect(bool setstate) +{ + try{ + if(GetState() != ESTABLISHED) + return; + + EQProtocolPacket *out=new EQProtocolPacket(OP_SessionDisconnect,NULL,sizeof(uint32)+sizeof(int16)); + *(uint32 *)out->pBuffer=htonl(Session); + out->pBuffer[4] = 0; + out->pBuffer[5] = 6; + NonSequencedPush(out); + if(setstate) + SetState(CLOSING); + } + catch(...){} +} + +void EQStream::InboundQueuePush(EQApplicationPacket *p) +{ + MInboundQueue.lock(); + InboundQueue.push_back(p); + MInboundQueue.unlock(); +} + +EQApplicationPacket *EQStream::PopPacket() +{ +EQApplicationPacket *p=NULL; + + MInboundQueue.lock(); + if (InboundQueue.size()) { + p=InboundQueue.front(); + InboundQueue.pop_front(); + } + MInboundQueue.unlock(); + if(p) + p->setVersion(client_version); + return p; +} + +void EQStream::InboundQueueClear() +{ + MInboundQueue.lock(); + while(InboundQueue.size()){ + delete InboundQueue.front(); + InboundQueue.pop_front(); + } + MInboundQueue.unlock(); +} +void EQStream::EncryptPacket(uchar* data, int16 size){ + if(size>6){ + + } +} +bool EQStream::HasOutgoingData() +{ +bool flag; + + //once closed, we have nothing more to say + if(CheckClosed()) + return(false); + + MOutboundQueue.lock(); + flag=(!NonSequencedQueue.empty()); + if (!flag) { + flag = (!SequencedQueue.empty()); + } + MOutboundQueue.unlock(); + + if (!flag) { + MAcks.lock(); + flag= (NextAckToSend>LastAckSent); + MAcks.unlock(); + } + + if (!flag) { + MCombinedAppPacket.lock(); + flag=(CombinedAppPacket!=NULL); + MCombinedAppPacket.unlock(); + } + + return flag; +} + +void EQStream::OutboundQueueClear() +{ + MOutboundQueue.lock(); + while(NonSequencedQueue.size()) { + delete NonSequencedQueue.front(); + NonSequencedQueue.pop_front(); + } + while(SequencedQueue.size()) { + delete SequencedQueue.front(); + SequencedQueue.pop_front(); + } + MOutboundQueue.unlock(); +} + +void EQStream::Process(const unsigned char *buffer, const uint32 length) +{ + received_packets++; +static unsigned char newbuffer[2048]; +uint32 newlength=0; + if (EQProtocolPacket::ValidateCRC(buffer,length,Key)) { + if (compressed) { + newlength=EQProtocolPacket::Decompress(buffer,length,newbuffer,2048); + } else { + memcpy(newbuffer,buffer,length); + newlength=length; + if (encoded) + EQProtocolPacket::ChatDecode(newbuffer,newlength-2,Key); + } + if (buffer[1]!=0x01 && buffer[1]!=0x02 && buffer[1]!=0x1d) + newlength-=2; + EQProtocolPacket p(newbuffer,newlength); + ProcessPacket(&p); + } else { +#ifdef EQN_DEBUG + cout << "Incoming packet failed checksum:" <(buffer),length,"CRC failed: "); +#endif + } +} + +long EQStream::GetMaxAckReceived() +{ + MAcks.lock(); + long l=MaxAckReceived; + MAcks.unlock(); + + return l; +} + +long EQStream::GetNextAckToSend() +{ + MAcks.lock(); + long l=NextAckToSend; + MAcks.unlock(); + + return l; +} + +long EQStream::GetLastAckSent() +{ + MAcks.lock(); + long l=LastAckSent; + MAcks.unlock(); + + return l; +} + +void EQStream::SetMaxAckReceived(uint32 seq) +{ + deque::iterator itr; + + MAcks.lock(); + MaxAckReceived=seq; + MAcks.unlock(); + MOutboundQueue.lock(); + if (long(seq) > LastSeqSent) + LastSeqSent=seq; + MResendQue.lock(); + EQProtocolPacket* packet = 0; + for(itr=resend_que.begin();itr!=resend_que.end();itr++){ + packet = *itr; + if(packet && packet->sequence <= seq){ + safe_delete(packet); + itr = resend_que.erase(itr); + if(itr == resend_que.end()) + break; + } + } + MResendQue.unlock(); + MOutboundQueue.unlock(); +} + +void EQStream::SetNextAckToSend(uint32 seq) +{ + MAcks.lock(); + NextAckToSend=seq; + MAcks.unlock(); +} + +void EQStream::SetLastAckSent(uint32 seq) +{ + MAcks.lock(); + LastAckSent=seq; + MAcks.unlock(); +} + +void EQStream::SetLastSeqSent(uint32 seq) +{ + MOutboundQueue.lock(); + LastSeqSent=seq; + MOutboundQueue.unlock(); +} + +void EQStream::SetStreamType(EQStreamType type) +{ + StreamType=type; + switch (StreamType) { + case LoginStream: + app_opcode_size=1; + compressed=false; + encoded=false; + break; + case EQ2Stream: + app_opcode_size=2; + compressed=false; + encoded=false; + break; + case ChatOrMailStream: + case ChatStream: + case MailStream: + app_opcode_size=1; + compressed=false; + encoded=true; + break; + case ZoneStream: + case WorldStream: + default: + app_opcode_size=2; + compressed=true; + encoded=false; + break; + } +} + +sint8 EQStream::CompareSequence(uint16 expected_seq , uint16 seq) +{ + if (expected_seq==seq) { + // Curent + return 0; + } else if ((seq > expected_seq && (uint32)seq < ((uint32)expected_seq + EQStream::MaxWindowSize)) || seq < (expected_seq - EQStream::MaxWindowSize)) { + // Future + return 1; + } else { + // Past + return -1; + } +} + +void EQStream::Decay() +{ + MRate.lock(); + uint32 rate=DecayRate; + MRate.unlock(); + if (BytesWritten>0) { + BytesWritten-=rate; + if (BytesWritten<0) + BytesWritten=0; + } +} + +void EQStream::AdjustRates(uint32 average_delta) +{ + if (average_delta) { + MRate.lock(); + RateThreshold=RATEBASE/average_delta; + DecayRate=DECAYBASE/average_delta; + MRate.unlock(); + } +} diff --git a/EQ2/source/common/EQStream.h b/EQ2/source/common/EQStream.h new file mode 100644 index 000000000..d754127e3 --- /dev/null +++ b/EQ2/source/common/EQStream.h @@ -0,0 +1,310 @@ +/* + EQ2Emulator: Everquest II Server Emulator + Copyright (C) 2007 EQ2EMulator Development Team (http://www.eq2emulator.net) + + This file is part of EQ2Emulator. + + EQ2Emulator is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + EQ2Emulator is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with EQ2Emulator. If not, see . +*/ +#ifndef _EQPROTOCOL_H +#define _EQPROTOCOL_H + +#include +#include +#include + +#include +#include +#ifndef WIN32 +#include +#endif +#include "EQPacket.h" +#include "Mutex.h" +#include "opcodemgr.h" +#include "misc.h" +#include "Condition.h" +#include "Crypto.h" +#include "zlib.h" +#include "timer.h" + +using namespace std; + +typedef enum { + ESTABLISHED, + CLOSING, + CLOSED +} EQStreamState; + +#define FLAG_COMPRESSED 0x01 +#define FLAG_ENCODED 0x04 + +#define RATEBASE 1048576 // 1 MB +#define DECAYBASE 78642 // RATEBASE/10 + +#pragma pack(1) +struct SessionRequest { + uint32 UnknownA; + uint32 Session; + uint32 MaxLength; +}; + +struct SessionResponse { + uint32 Session; + uint32 Key; + uint8 UnknownA; + uint8 Format; + uint8 UnknownB; + uint32 MaxLength; + uint32 UnknownD; +}; + +//Deltas are in ms, representing round trip times +struct ClientSessionStats { +/*000*/ uint16 RequestID; +/*002*/ uint32 last_local_delta; +/*006*/ uint32 average_delta; +/*010*/ uint32 low_delta; +/*014*/ uint32 high_delta; +/*018*/ uint32 last_remote_delta; +/*022*/ uint64 packets_sent; +/*030*/ uint64 packets_recieved; +/*038*/ +}; + +struct ServerSessionStats { + uint16 RequestID; + uint32 current_time; + uint32 unknown1; + uint32 received_packets; + uint32 unknown2; + uint32 sent_packets; + uint32 unknown3; + uint32 sent_packets2; + uint32 unknown4; + uint32 received_packets2; +}; + +#pragma pack() + +class OpcodeManager; +extern OpcodeManager *EQNetworkOpcodeManager; + +class EQStreamFactory; + +typedef enum { + UnknownStream=0, + LoginStream, + WorldStream, + ZoneStream, + ChatOrMailStream, + ChatStream, + MailStream, + EQ2Stream, +} EQStreamType; + +class EQStream { + protected: + uint32 received_packets; + uint32 sent_packets; + uint32 remote_ip; + uint16 remote_port; + uint8 buffer[8192]; + unsigned char *oversize_buffer; + uint32 oversize_offset,oversize_length; + uint8 app_opcode_size; + EQStreamType StreamType; + bool compressed,encoded; + //uint32 buffer_len; + + uint32 Session, Key; + uint16 NextInSeq; + uint16 NextOutSeq; + uint32 MaxLen; + uint16 MaxSends; + int8 timeout_delays; + + uint8 active_users; //how many things are actively using this + Mutex MInUse; + + EQStreamState State; + Mutex MState; + + uint32 LastPacket; + Mutex MVarlock; + + EQApplicationPacket* CombinedAppPacket; + Mutex MCombinedAppPacket; + + long LastSeqSent; + Mutex MLastSeqSent; + void SetLastSeqSent(uint32); + + // Ack sequence tracking. + long MaxAckReceived,NextAckToSend,LastAckSent; + long GetMaxAckReceived(); + long GetNextAckToSend(); + long GetLastAckSent(); + void SetMaxAckReceived(uint32 seq); + void SetNextAckToSend(uint32); + void SetLastAckSent(uint32); + + Mutex MAcks; + + // Packets waiting to be sent + deque NonSequencedQueue; + deque SequencedQueue; + map OutOfOrderpackets; + Mutex MOutboundQueue; + + // Packes waiting to be processed + deque InboundQueue; + Mutex MInboundQueue; + + static uint16 MaxWindowSize; + + sint32 BytesWritten; + + Mutex MRate; + sint32 RateThreshold; + sint32 DecayRate; + + EQStreamFactory *Factory; + + public: + Mutex MCombineQueueLock; + bool CheckCombineQueue(); + deque combine_queue; + Timer* combine_timer; + + Crypto* crypto; + int8 EQ2_Compress(EQ2Packet* app, int8 offset = 3); + z_stream stream; + uchar* stream_buffer; + int32 stream_buffer_size; + bool eq2_compressed; + int8 compressed_offset; + int16 client_version; + int16 GetClientVersion(){ return client_version; } + void SetClientVersion(int16 version){ client_version = version; } + + EQStream() { init(); remote_ip = 0; remote_port = 0; State = CLOSED; StreamType = UnknownStream; compressed = true; + encoded = false; app_opcode_size = 2;} + EQStream(sockaddr_in addr); + virtual ~EQStream() { + RemoveData(); + safe_delete(crypto); + safe_delete(combine_timer); + safe_delete(resend_que_timer); + safe_delete_array(oversize_buffer); + deque::iterator cmb; + MCombineQueueLock.lock(); + for (cmb = combine_queue.begin(); cmb != combine_queue.end(); cmb++){ + safe_delete(*cmb); + } + MCombineQueueLock.unlock(); + deflateEnd(&stream); + map::iterator oop; + for (oop = OutOfOrderpackets.begin(); oop != OutOfOrderpackets.end(); oop++){ + safe_delete(oop->second); + } + } + inline void SetFactory(EQStreamFactory *f) { Factory=f; } + void init(); + void SetMaxLen(uint32 length) { MaxLen=length; } + int8 getTimeoutDelays(){ return timeout_delays; } + void addTimeoutDelay(){ timeout_delays++; } + void EQ2QueuePacket(EQ2Packet* app, bool attempted_combine = false); + void PreparePacket(EQ2Packet* app, int8 offset = 0); + void UnPreparePacket(EQ2Packet* app); + void EncryptPacket(EQ2Packet* app, int8 compress_offset, int8 offset); + void FlushCombinedPacket(); + void SendPacket(EQApplicationPacket *p); + void QueuePacket(EQProtocolPacket *p); + void SendPacket(EQProtocolPacket *p); + vector convert(EQApplicationPacket *p); + void NonSequencedPush(EQProtocolPacket *p); + void SequencedPush(EQProtocolPacket *p); + + Mutex MResendQue; + Mutex MCompressData; + dequeresend_que; + void CheckResend(int eq_fd); + void Write(int eq_fd); + + void WritePacket(int fd,EQProtocolPacket *p); + + void EncryptPacket(uchar* data, int16 size); + uint32 GetKey() { return Key; } + void SetKey(uint32 k) { Key=k; } + void SetSession(uint32 s) { Session=s; } + void SetLastPacketTime(uint32 t) {LastPacket=t;} + + void Process(const unsigned char *data, const uint32 length); + void ProcessPacket(EQProtocolPacket *p); + bool HandleEmbeddedPacket(EQProtocolPacket *p, int16 offset = 2, int16 length = 0); + + EQProtocolPacket * ProcessEncryptedPacket(EQProtocolPacket *p); + EQProtocolPacket * ProcessEncryptedData(uchar* data, int32 size, int16 opcode); + + virtual void DispatchPacket(EQApplicationPacket *p) { p->DumpRaw(); } + + void SendSessionResponse(); + void SendSessionRequest(); + void SendDisconnect(bool setstate = true); + void SendAck(uint16 seq); + void SendOutOfOrderAck(uint16 seq); + + bool CheckTimeout(uint32 now, uint32 timeout=30) { return (LastPacket && (now-LastPacket) > timeout); } + bool Stale(uint32 now, uint32 timeout=30) { return (LastPacket && (now-LastPacket) > timeout); } + + void InboundQueuePush(EQApplicationPacket *p); + EQApplicationPacket *PopPacket(); // InboundQueuePop + void InboundQueueClear(); + + void OutboundQueueClear(); + bool HasOutgoingData(); + void SendKeyRequest(); + int16 processRSAKey(EQProtocolPacket *p); + void RemoveData() { InboundQueueClear(); OutboundQueueClear(); if (CombinedAppPacket) delete CombinedAppPacket; } + + // + inline bool IsInUse() { bool flag; MInUse.lock(); flag=(active_users>0); MInUse.unlock(); return flag; } + inline void PutInUse() { MInUse.lock(); active_users++; MInUse.unlock(); } + inline void ReleaseFromUse() { MInUse.lock(); if(active_users > 0) active_users--; MInUse.unlock(); } + + inline EQStreamState GetState() { return State; } + inline void SetState(EQStreamState state) { State=state; } + + inline uint32 GetRemoteIP() { return remote_ip; } + inline uint32 GetrIP() { return remote_ip; } + inline uint16 GetRemotePort() { return remote_port; } + inline uint16 GetrPort() { return remote_port; } + + + static EQProtocolPacket *Read(int eq_fd, sockaddr_in *from); + static sint8 CompareSequence(uint16 expected_seq , uint16 seq); + + void Close() { SendDisconnect(); } + bool CheckActive() { return GetState()==ESTABLISHED; } + bool CheckClosed() { return GetState()==CLOSED; } + void SetOpcodeSize(uint8 s) { app_opcode_size = s; } + void SetStreamType(EQStreamType t); + inline const EQStreamType GetStreamType() const { return StreamType; } + + void Decay(); + void AdjustRates(uint32 average_delta); + Timer* resend_que_timer; +}; + +#endif diff --git a/EQ2/source/common/EQStreamFactory.cpp b/EQ2/source/common/EQStreamFactory.cpp new file mode 100644 index 000000000..31c657cb9 --- /dev/null +++ b/EQ2/source/common/EQStreamFactory.cpp @@ -0,0 +1,419 @@ +/* + EQ2Emulator: Everquest II Server Emulator + Copyright (C) 2007 EQ2EMulator Development Team (http://www.eq2emulator.net) + + This file is part of EQ2Emulator. + + EQ2Emulator is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + EQ2Emulator is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with EQ2Emulator. If not, see . +*/ + +#include "EQStreamFactory.h" +#include "Log.h" + +#ifdef WIN32 + #include + #include + #include + #include + #include +#else + #include + #include + #include + #include + #include + #include +#endif +#include +#include +#include +#include "op_codes.h" +#include "EQStream.h" +#include "packet_dump.h" +#ifdef WORLD + #include "../WorldServer/client.h" +#endif +using namespace std; + +#ifdef WORLD + extern ClientList client_list; +#endif +ThreadReturnType EQStreamFactoryReaderLoop(void *eqfs) +{ + if(eqfs){ + EQStreamFactory *fs=(EQStreamFactory *)eqfs; + fs->ReaderLoop(); + } + THREAD_RETURN(NULL); +} + +ThreadReturnType EQStreamFactoryWriterLoop(void *eqfs) +{ + if(eqfs){ + EQStreamFactory *fs=(EQStreamFactory *)eqfs; + fs->WriterLoop(); + } + THREAD_RETURN(NULL); +} + +ThreadReturnType EQStreamFactoryCombinePacketLoop(void *eqfs) +{ + if(eqfs){ + EQStreamFactory *fs=(EQStreamFactory *)eqfs; + fs->CombinePacketLoop(); + } + THREAD_RETURN(NULL); +} + +EQStreamFactory::EQStreamFactory(EQStreamType type, int port) +{ + StreamType=type; + Port=port; + listen_ip_address = 0; +} + +void EQStreamFactory::Close() +{ + CheckTimeout(true); + Stop(); + +#ifdef WIN32 + closesocket(sock); +#else + close(sock); +#endif + sock=-1; +} +bool EQStreamFactory::Open() +{ +struct sockaddr_in address; +#ifndef WIN32 + pthread_t t1, t2, t3; +#endif + /* Setup internet address information. + This is used with the bind() call */ + memset((char *) &address, 0, sizeof(address)); + address.sin_family = AF_INET; + address.sin_port = htons(Port); +#if defined(LOGIN) || defined(MINILOGIN) + if(listen_ip_address) + address.sin_addr.s_addr = inet_addr(listen_ip_address); + else + address.sin_addr.s_addr = htonl(INADDR_ANY); +#else + address.sin_addr.s_addr = htonl(INADDR_ANY); +#endif + /* Setting up UDP port for new clients */ + sock = socket(AF_INET, SOCK_DGRAM, 0); + if (sock < 0) { + return false; + } + + if (bind(sock, (struct sockaddr *) &address, sizeof(address)) < 0) { + close(sock); + sock=-1; + return false; + } + #ifdef WIN32 + unsigned long nonblock = 1; + ioctlsocket(sock, FIONBIO, &nonblock); + #else + fcntl(sock, F_SETFL, O_NONBLOCK); + #endif + //moved these because on windows the output was delayed and causing the console window to look bad + LogWrite(WORLD__DEBUG, 0, "World", "Starting factory Reader"); + LogWrite(WORLD__DEBUG, 0, "World", "Starting factory Writer"); + #ifdef WIN32 + _beginthread(EQStreamFactoryReaderLoop,0, this); + _beginthread(EQStreamFactoryWriterLoop,0, this); + _beginthread(EQStreamFactoryCombinePacketLoop,0, this); + #else + pthread_create(&t1,NULL,EQStreamFactoryReaderLoop,this); + pthread_create(&t2,NULL,EQStreamFactoryWriterLoop,this); + pthread_create(&t3,NULL,EQStreamFactoryCombinePacketLoop,this); + pthread_detach(t1); + pthread_detach(t2); + pthread_detach(t3); + #endif + return true; +} + +EQStream *EQStreamFactory::Pop() +{ +EQStream *s=NULL; + //cout << "Pop():Locking MNewStreams" << endl; + MNewStreams.lock(); + if (NewStreams.size()) { + s=NewStreams.front(); + NewStreams.pop(); + s->PutInUse(); + } + MNewStreams.unlock(); + //cout << "Pop(): Unlocking MNewStreams" << endl; + + return s; +} + +void EQStreamFactory::Push(EQStream *s) +{ + //cout << "Push():Locking MNewStreams" << endl; + MNewStreams.lock(); + NewStreams.push(s); + MNewStreams.unlock(); + //cout << "Push(): Unlocking MNewStreams" << endl; +} + +void EQStreamFactory::ReaderLoop() +{ +fd_set readset; +map::iterator stream_itr; +int num; +int length; +unsigned char buffer[2048]; +sockaddr_in from; +int socklen=sizeof(sockaddr_in); +timeval sleep_time; + ReaderRunning=true; + while(sock!=-1) { + MReaderRunning.lock(); + if (!ReaderRunning) + break; + MReaderRunning.unlock(); + + FD_ZERO(&readset); + FD_SET(sock,&readset); + + sleep_time.tv_sec=30; + sleep_time.tv_usec=0; + if ((num=select(sock+1,&readset,NULL,NULL,&sleep_time))<0) { + // What do we wanna do? + } else if (num==0) + continue; + + if (FD_ISSET(sock,&readset)) { +#ifdef WIN32 + if ((length=recvfrom(sock,(char*)buffer,sizeof(buffer),0,(struct sockaddr*)&from,(int *)&socklen))<0) +#else + if ((length=recvfrom(sock,buffer,2048,0,(struct sockaddr *)&from,(socklen_t *)&socklen))<0) +#endif + { + // What do we wanna do? + } else { + char temp[25]; + sprintf(temp,"%u.%d",ntohl(from.sin_addr.s_addr),ntohs(from.sin_port)); + MStreams.lock(); + if ((stream_itr=Streams.find(temp))==Streams.end() || buffer[1]==OP_SessionRequest) { + MStreams.unlock(); + if (buffer[1]==OP_SessionRequest) { + if(stream_itr != Streams.end() && stream_itr->second) + stream_itr->second->SetState(CLOSED); + EQStream *s=new EQStream(from); + s->SetFactory(this); + s->SetStreamType(StreamType); + Streams[temp]=s; + WriterWork.Signal(); + Push(s); + s->Process(buffer,length); + s->SetLastPacketTime(Timer::GetCurrentTime2()); + } + } else { + EQStream *curstream = stream_itr->second; + //dont bother processing incoming packets for closed connections + if(curstream->CheckClosed()) + curstream = NULL; + else + curstream->PutInUse(); + MStreams.unlock(); + + if(curstream) { + curstream->Process(buffer,length); + curstream->SetLastPacketTime(Timer::GetCurrentTime2()); + curstream->ReleaseFromUse(); + } + } + } + } + } +} + +void EQStreamFactory::CheckTimeout(bool remove_all) +{ + //lock streams the entire time were checking timeouts, it should be fast. + MStreams.lock(); + + unsigned long now=Timer::GetCurrentTime2(); + map::iterator stream_itr; + + for(stream_itr=Streams.begin();stream_itr!=Streams.end();) { + EQStream *s = stream_itr->second; + EQStreamState state = s->GetState(); + + if (state==CLOSING && !s->HasOutgoingData()) { + stream_itr->second->SetState(CLOSED); + state = CLOSED; + } else if (s->CheckTimeout(now, STREAM_TIMEOUT)) { + const char* stateString; + switch (state){ + case ESTABLISHED: + stateString = "Established"; + break; + case CLOSING: + stateString = "Closing"; + break; + case CLOSED: + stateString = "Closed"; + break; + default: + stateString = "Unknown"; + break; + } + LogWrite(WORLD__DEBUG, 0, "World", "Timeout up!, state=%s", stateString); + if (state==ESTABLISHED) { + s->Close(); + } else if (state == CLOSING) { + //if we time out in the closing state, just give up + s->SetState(CLOSED); + state = CLOSED; + } + } + //not part of the else so we check it right away on state change + if (remove_all || state==CLOSED) { + if (!remove_all && s->getTimeoutDelays()<2) { + s->addTimeoutDelay(); + //give it a little time for everybody to finish with it + } else { + //everybody is done, we can delete it now + LogWrite(WORLD__DEBUG, 0, "World", "Removing connection..."); + map::iterator temp=stream_itr; + stream_itr++; + //let whoever has the stream outside delete it + #ifdef WORLD + client_list.RemoveConnection(temp->second); + #endif + delete temp->second; + Streams.erase(temp); + continue; + } + } + + stream_itr++; + } + MStreams.unlock(); +} + +void EQStreamFactory::CombinePacketLoop(){ + deque combine_que; + CombinePacketRunning = true; + bool packets_waiting = false; + while(sock!=-1) { + if (!CombinePacketRunning) + break; + MStreams.lock(); + map::iterator stream_itr; + for(stream_itr=Streams.begin();stream_itr!=Streams.end();stream_itr++) { + if(!stream_itr->second){ + continue; + } + if(stream_itr->second->combine_timer && stream_itr->second->combine_timer->Check()) + combine_que.push_back(stream_itr->second); + } + EQStream* stream = 0; + packets_waiting = false; + while(combine_que.size()){ + stream = combine_que.front(); + if(stream->CheckActive()){ + if(!stream->CheckCombineQueue()) + packets_waiting = true; + } + combine_que.pop_front(); + } + MStreams.unlock(); + if(!packets_waiting) + Sleep(25); + } +} + +void EQStreamFactory::WriterLoop() +{ +map::iterator stream_itr; +vector wants_write; +vector::iterator cur,end; +deque resend_que; +bool decay=false; +uint32 stream_count; + +Timer DecayTimer(20); + + WriterRunning=true; + DecayTimer.Enable(); + while(sock!=-1) { + Timer::SetCurrentTime(); + //if (!havework) { + //WriterWork.Wait(); + //} + MWriterRunning.lock(); + if (!WriterRunning) + break; + MWriterRunning.unlock(); + + wants_write.clear(); + + decay=DecayTimer.Check(); + + //copy streams into a seperate list so we dont have to keep + //MStreams locked while we are writting + MStreams.lock(); + for(stream_itr=Streams.begin();stream_itr!=Streams.end();stream_itr++) { + // If it's time to decay the bytes sent, then let's do it before we try to write + if(!stream_itr->second){ + Streams.erase(stream_itr); + break; + } + if (decay) + stream_itr->second->Decay(); + + if (stream_itr->second->HasOutgoingData()) { + stream_itr->second->PutInUse(); + wants_write.push_back(stream_itr->second); + } + if(stream_itr->second->resend_que_timer->Check()) + resend_que.push_back(stream_itr->second); + } + MStreams.unlock(); + + //do the actual writes + cur = wants_write.begin(); + end = wants_write.end(); + for(; cur != end; cur++) { + (*cur)->Write(sock); + (*cur)->ReleaseFromUse(); + } + while(resend_que.size()){ + resend_que.front()->CheckResend(sock); + resend_que.pop_front(); + } + Sleep(10); + + MStreams.lock(); + stream_count=Streams.size(); + MStreams.unlock(); + if (!stream_count) { + //cout << "No streams, waiting on condition" << endl; + WriterWork.Wait(); + //cout << "Awake from condition, must have a stream now" << endl; + } + } +} + + diff --git a/EQ2/source/common/EQStreamFactory.h b/EQ2/source/common/EQStreamFactory.h new file mode 100644 index 000000000..9dce3c71a --- /dev/null +++ b/EQ2/source/common/EQStreamFactory.h @@ -0,0 +1,86 @@ +/* + EQ2Emulator: Everquest II Server Emulator + Copyright (C) 2007 EQ2EMulator Development Team (http://www.eq2emulator.net) + + This file is part of EQ2Emulator. + + EQ2Emulator is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + EQ2Emulator is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with EQ2Emulator. If not, see . +*/ +#ifndef _EQSTREAMFACTORY_H + +#define _EQSTREAMFACTORY_H + +#include +#include +#include "../common/EQStream.h" +#include "../common/Condition.h" +#include "../common/opcodemgr.h" +#include "../common/timer.h" + +#define STREAM_TIMEOUT 45000 //in ms + +class EQStreamFactory { + private: + int sock; + int Port; + + bool ReaderRunning; + Mutex MReaderRunning; + bool WriterRunning; + Mutex MWriterRunning; + bool CombinePacketRunning; + Mutex MCombinePacketRunning; + + Condition WriterWork; + + EQStreamType StreamType; + + queue NewStreams; + Mutex MNewStreams; + + map Streams; + Mutex MStreams; + + + + Timer *DecayTimer; + + public: + char* listen_ip_address; + void CheckTimeout(bool remove_all = false); + EQStreamFactory(EQStreamType type) { ReaderRunning=false; WriterRunning=false; StreamType=type; } + EQStreamFactory(EQStreamType type, int port); + ~EQStreamFactory(){ + safe_delete_array(listen_ip_address); + } + + EQStream *Pop(); + void Push(EQStream *s); + + bool loadPublicKey(); + bool Open(); + bool Open(unsigned long port) { Port=port; return Open(); } + void Close(); + void ReaderLoop(); + void WriterLoop(); + void CombinePacketLoop(); + void Stop() { StopReader(); StopWriter(); StopCombinePacket(); } + void StopReader() { MReaderRunning.lock(); ReaderRunning=false; MReaderRunning.unlock(); } + void StopWriter() { MWriterRunning.lock(); WriterRunning=false; MWriterRunning.unlock(); WriterWork.Signal(); } + void StopCombinePacket() { MCombinePacketRunning.lock(); CombinePacketRunning=false; MCombinePacketRunning.unlock(); } + void SignalWriter() { WriterWork.Signal(); } + +}; + +#endif diff --git a/EQ2/source/common/GlobalHeaders.h b/EQ2/source/common/GlobalHeaders.h new file mode 100644 index 000000000..98b745817 --- /dev/null +++ b/EQ2/source/common/GlobalHeaders.h @@ -0,0 +1,58 @@ +/* + EQ2Emulator: Everquest II Server Emulator + Copyright (C) 2007 EQ2EMulator Development Team (http://www.eq2emulator.net) + + This file is part of EQ2Emulator. + + EQ2Emulator is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + EQ2Emulator is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with EQ2Emulator. If not, see . +*/ + +//Character Creation Replies, put in globals so name filter can return proper responses +#define UNKNOWNERROR_REPLY 0 +#define CREATESUCCESS_REPLY 1 +#define NOSERVERSAVAIL_REPLY 2 +#define CREATEPENDING_REPLY 3 +#define MAXCHARSALLOWED_REPLY 4 +#define INVALIDRACE_REPLY 5 +#define INVALIDCITY_REPLY 6 +#define INVALIDCLASS_REPLY 7 +#define INVALIDGENDER_REPLY 8 +#define INVALIDFIRST_LVL_REPLY 9 +#define BADNAMELENGTH_REPLY 10 +#define NAMEINVALID_REPLY 11 +#define NAMEFILTER_REPLY 12 // name_filter reply (bad word or blocked words) +#define NAMETAKEN_REPLY 13 +#define OVERLOADEDSERVER_REPLY 14 +#define UNKNOWNERROR_REPLY2 15 +#define INVALIDFEATURES1_REPLY 16 +#define INVALIDFEATURES2_REPLY 17 +#define INVALIDRACE_APPEARANCE_REPLY 18 + +#define PLAY_ERROR_PROBLEM 0 +#define PLAY_ERROR_ZONE_DOWN 4 +#define PLAY_ERROR_CHAR_NOT_LOADED 5 +#define PLAY_ERROR_CHAR_NOT_FOUND 6 +#define PLAY_ERROR_ACCOUNT_IN_USE 7 +#define PLAY_ERROR_SERVER_TIMEOUT 8 +#define PLAY_ERROR_SERVER_SHUTDOWN 9 +#define PLAY_ERROR_LOADING_ERROR 10 +#define PLAY_ERROR_EXCHANGE_SERVER 11 +#define PLAY_ERROR_REGION_SERVER 12 +#define PLAY_ERROR_CLASS_INVALID 13 +#define PLAY_ERROR_TOO_MANY_CHARACTERS 14 +#define PLAY_ERROR_EOF_EXP_NOT_FOUND 15 +#define PLAY_ERROR_UNKNOWN_RESPONSE 16 +#define PLAY_ERROR_UNKNOWN 17 +#define PLAY_ERROR_ACCOUNT_BANNED 18 +#define PLAY_ERROR_PROHIBITED 19 diff --git a/EQ2/source/common/Log.cpp b/EQ2/source/common/Log.cpp new file mode 100644 index 000000000..cddb2367b --- /dev/null +++ b/EQ2/source/common/Log.cpp @@ -0,0 +1,612 @@ +/* + EQ2Emulator: Everquest II Server Emulator + Copyright (C) 2007 EQ2EMulator Development Team (http://www.eq2emulator.net) + + This file is part of EQ2Emulator. + + EQ2Emulator is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + EQ2Emulator is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with EQ2Emulator. If not, see . +*/ +#include "Log.h" +#include "xmlParser.h" +#include "types.h" +#include +#include +#include +#include +#include +#include +#include +#include "../WorldServer/World.h" +#include "../WorldServer/client.h" +#include "../WorldServer/zoneserver.h" + +extern ZoneList zone_list; + +#ifdef _WIN32 + #include + #ifndef snprintf + #define snprintf sprintf_s + #endif +#include + #include +#else +#endif + +#define LOG_CATEGORY(category) #category, +const char *log_category_names[NUMBER_OF_LOG_CATEGORIES] = { + #include "LogTypes.h" +}; + +#define LOG_TYPE(category, type, level, color, enabled, logfile, console, client, str) { level, color, enabled, logfile, console, client, LOG_ ##category, #category "__" #type, ( strlen(str)>0 ) ? str : #category "__" #type }, +static LogTypeStatus real_log_type_info[NUMBER_OF_LOG_TYPES+1] = +{ + #include "LogTypes.h" + { 0, 0, false, false, false, false, NUMBER_OF_LOG_CATEGORIES, "BAD TYPE", "Bad Name" } /* dummy trailing record */ +}; + +LogTypeStatus *log_type_info = real_log_type_info; + +//make these rules? +#define LOG_CYCLE 100 //milliseconds between each batch of log writes +#define LOGS_PER_CYCLE 50 //amount of logs to write per cycle + +#define LOG_DIR "logs" + +#if defined LOGIN +#define EXE_NAME "login" +#elif defined WORLD +#define EXE_NAME "world" +#elif defined PARSER +#define EXE_NAME "parser" +#elif defined PATCHER +#define EXE_NAME "patcher" +#else +#define EXE_NAME "whatprogyourunning" +#endif + +#define DATE_MAX 8 +#define LOG_NAME_MAX 32 + +struct logq_t { + LogType log_type; + char date[DATE_MAX + 1]; + char name[LOG_NAME_MAX + 1]; + char *text; + struct logq_t *next; + struct logq_t *prev; +}; + +//doubly linked list of logs +static logq_t head; +static logq_t tail; +static int num_logqs = 0; +static Mutex mlogqs; + +//loop until.... +static bool looping = false; + +//because our code has LogWrite's before main(), make sure any of those do the +//call to LogStart if it hasn't been called already... +static bool start_called = false; + +static void SetConsoleColor(int color) { +#ifdef _WIN32 + HANDLE handle = GetStdHandle(STD_OUTPUT_HANDLE); + + if (handle == NULL || handle == INVALID_HANDLE_VALUE) + return; +#endif + + switch (color) { + case FOREGROUND_WHITE: + case FOREGROUND_WHITE_BOLD: + case FOREGROUND_RED: + case FOREGROUND_RED_BOLD: + case FOREGROUND_GREEN: + case FOREGROUND_GREEN_BOLD: + case FOREGROUND_BLUE: + case FOREGROUND_BLUE_BOLD: + case FOREGROUND_YELLOW: + case FOREGROUND_YELLOW_BOLD: + case FOREGROUND_CYAN: + case FOREGROUND_CYAN_BOLD: + case FOREGROUND_MAGENTA: + case FOREGROUND_MAGENTA_BOLD: +#ifdef _WIN32 + SetConsoleTextAttribute(handle, color); +#else + printf("\033[%i;%i;40m", color > 100 ? 1 : 0, color > 100 ? color - 100 : color); +#endif + break; + default: +#ifdef _WIN32 + SetConsoleTextAttribute(handle, FOREGROUND_WHITE_BOLD); +#else + printf("\033[0;37;40m"); +#endif + break; + } +} + +static FILE * OpenLogFile() { + char file[FILENAME_MAX + 1]; + struct stat st; + struct tm *tm; + time_t now; + FILE *f; + + now = time(NULL); + tm = localtime(&now); + + //make sure the logs directory exists + if (stat(LOG_DIR, &st) != 0) { +#ifdef _WIN32 + if (!CreateDirectory(LOG_DIR, NULL)) { + fprintf(stderr, "Unable to create directory '%s'\n", LOG_DIR); + return stderr; + } +#else + if (mkdir(LOG_DIR, S_IRWXU | S_IRWXG | S_IROTH | S_IXOTH) != 0) { + fprintf(stderr, "Unable to create direcotry '%s': %s\n", LOG_DIR, strerror(errno)); + return stderr; + } +#endif + } + +#ifdef NO_PIDLOG + snprintf(file, FILENAME_MAX, LOG_DIR"/%04i-%02i-%02i_eq2" EXE_NAME ".log", tm->tm_year + 1900, tm->tm_mon + 1, tm->tm_mday); +#else + snprintf(file, FILENAME_MAX, LOG_DIR"/%04i-%02i-%02i_eq2" EXE_NAME "_%04i.log", tm->tm_year + 1900, tm->tm_mon + 1, tm->tm_mday, getpid()); +#endif + + if ((f = fopen(file, "a")) == NULL) { + fprintf(stderr, "Could not open '%s' for writing: %s\n", file, strerror(errno)); + return stderr; + } + + return f; +} + +static void WriteQueuedLogs(int count) { + logq_t pending_head, pending_tail, *logq, *tmp; + int i = 0; + FILE *f; + + pending_head.next = &pending_tail; + pending_tail.prev = &pending_head; + + //loop through our queued logs and store at most `count` logs into a temporary list + //since io functions are expensive, we'll write from a temporary list so we don't hold the + //write lock of the main list for a long period of time + mlogqs.writelock(); + logq = head.next; + + while (head.next != &tail) { + //first remove the log from the master list + logq = head.next; + logq->next->prev = &head; + head.next = logq->next; + + //now insert it into the temporary list + tmp = pending_tail.prev; + tmp->next = logq; + logq->prev = tmp; + logq->next = &pending_tail; + pending_tail.prev = logq; + --num_logqs; + + logq = logq->next; + + //if we have a limit, check it + if (count > 0 && ++i == count) + break; + } + + mlogqs.releasewritelock(); + + //if we have no logs to write, we're done + if ((logq = pending_head.next) == &pending_tail) + return; + + while (logq != &pending_tail) { + if (log_type_info[logq->log_type].console) { + SetConsoleColor(FOREGROUND_WHITE_BOLD); + printf("%s ", logq->date); + SetConsoleColor(log_type_info[logq->log_type].color); + printf("%s ", log_type_info[logq->log_type].display_name); + SetConsoleColor(FOREGROUND_WHITE_BOLD); + printf("%-10s: ", logq->name); + SetConsoleColor(log_type_info[logq->log_type].color); + printf("%s\n", logq->text); + SetConsoleColor(-1); + fflush(stdout); + } + + if (log_type_info[logq->log_type].logfile) { + f = OpenLogFile(); + + if (f != stderr || (f == stderr && !log_type_info[logq->log_type].console)) { + fprintf(f, "%s %s %s: %s\n", logq->date, log_type_info[logq->log_type].display_name, logq->name, logq->text); + fflush(f); + if (f != stderr) + fclose(f); + } + } + +#if defined WORLD + if (log_type_info[logq->log_type].client) { + // eventually output logging to the client who "subscribed" to the logger + // in-game, they type: + // /logsys add WORLD__DEBUG 5 + // to watch world debug loggers of level 5 or less + } +#endif + + tmp = logq; + logq = logq->next; + + free(tmp->text); + free(tmp); + } +} + +ThreadReturnType LogLoop(void *args) { + while (looping) { + WriteQueuedLogs(LOGS_PER_CYCLE); + Sleep(LOG_CYCLE); + } + + THREAD_RETURN(NULL); +} + +void LogStart() { + if (start_called) + return; + + //initialize the doubly linked list + head.prev = NULL; + head.next = &tail; + tail.prev = &head; + tail.next = NULL; + + mlogqs.SetName("logqueue"); + looping = true; + +#ifdef _WIN32 + _beginthread(LogLoop, 0, NULL); +#else + pthread_t thread; + pthread_create(&thread, NULL, LogLoop, NULL); + pthread_detach(thread); +#endif + + start_called = true; +} + +void LogStop() { + looping = false; + WriteQueuedLogs(-1); + start_called = false; +} + +static void LogQueueAdd(LogType log_type, char *text, int len, const char *cat_text = NULL) { + logq_t *logq; + struct tm *tm; + time_t now; + + if ((logq = (logq_t *)calloc(1, sizeof(logq_t))) == NULL) { + free(text); + fprintf(stderr, "%s: %u: Unable to allocate %zu bytes\n", __FUNCTION__, __LINE__, sizeof(logq_t)); + return; + } + + if ((logq->text = (char *)calloc(len + 1, sizeof(char))) == NULL) { + free(text); + free(logq); + fprintf(stderr, "%s: %u: Unable to allocate %i bytes\n", __FUNCTION__, __LINE__, len + 1); + return; + } + + now = time(NULL); + tm = localtime(&now); + + logq->log_type = log_type; + snprintf(logq->date, DATE_MAX + 1, "%02i:%02i:%02i", tm->tm_hour, tm->tm_min, tm->tm_sec); + strncpy(logq->name, cat_text == NULL || cat_text[0] == '\0' ? log_type_info[log_type].name : cat_text, LOG_NAME_MAX); + strncpy(logq->text, text, len); + free(text); + + if (!start_called) + LogStart(); + + //insert at the end + mlogqs.writelock(); + tail.prev->next = logq; + logq->prev = tail.prev; + logq->next = &tail; + tail.prev = logq; + ++num_logqs; + mlogqs.releasewritelock(); +} + +int8 GetLoggerLevel(LogType type) +{ + return log_type_info[type].level; +} + +// JA: horrific hack for Parser, since queued logging keeps crashing between parses. +#ifndef PARSER +void LogWrite(LogType type, int8 log_level, const char *cat_text, const char *fmt, ...) { + int count, size = 64; + char *buf; + va_list ap; + + // if there is no formatting, or the logger is DISABLED + // or the log_level param exceeds the minimum allowed value, abort logwrite + if (!log_type_info[type].enabled || (log_level > 0 && log_type_info[type].level < log_level)) + return; + + while (true) { + if ((buf = (char *)malloc(size)) == NULL) { + fprintf(stderr, "%s: %i: Unable to allocate %i bytes\n", __FUNCTION__, __LINE__, size); + return; + } + + va_start(ap, fmt); + count = vsnprintf(buf, size, fmt, ap); + va_end(ap); + + if (count > -1 && count < size) + break; + + free(buf); + if (count > 1) + size = count + 1; + else + size *= 2; + } + + LogQueueAdd(type, buf, count, cat_text); +} +#else +void LogWrite(LogType type, int8 log_level, const char *cat_text, const char *format, ...) +{ + // if there is no formatting, or the logger is DISABLED + // or the log_level param exceeds the minimum allowed value, abort logwrite + if ( !format || !log_type_info[type].enabled || (log_level > 0 && log_type_info[type].level < log_level) ) + return; + + time_t clock; + struct tm *tm; + + char buffer[LOG_BUFFER_SIZE], date[32]; + va_list args; + FILE *f; + size_t cat_text_len = 0; + + memset(buffer, 0, sizeof(buffer)); + memset(date, 0, sizeof(date)); + + va_start(args, format); + vsnprintf(buffer, sizeof(buffer) - 1, format, args); + va_end(args); + + time(&clock); + tm = localtime(&clock); + snprintf(date, sizeof(date)-1, "%02d:%02d:%02d", tm->tm_hour, tm->tm_min, tm->tm_sec); + // DateString(date, sizeof(date)); + + cat_text_len = strlen(cat_text); + //if( strlen(cat_text) == 0 ) // cat_text was blank + // cat_text = (char*)log_type_info[type].name; + + /* write to the log file? */ + if (log_type_info[type].logfile) + { + char exename[200] = ""; + + #ifdef LOGIN + snprintf(exename, sizeof(exename), "login"); + #endif + #ifdef WORLD + snprintf(exename, sizeof(exename), "world"); + #endif + #ifdef PARSER + snprintf(exename, sizeof(exename), "parser"); + #endif + #ifdef PATCHER + snprintf(exename, sizeof(exename), "patcher"); + #endif + + char filename[200], log_header[200] = ""; + + #ifndef NO_PIDLOG + snprintf(filename, sizeof(filename)-1, "logs/%04d-%02d-%02d_eq2%s_%04i.log", tm->tm_year + 1900, tm->tm_mon + 1, tm->tm_mday, exename, getpid()); + #else + snprintf(filename, sizeof(filename)-1, "logs/%04d-%02d-%02d_eq2%s.log", tm->tm_year + 1900, tm->tm_mon + 1, tm->tm_mday, exename); + #endif + + f=fopen(filename, "r"); + if( !f ) + snprintf(log_header, sizeof(log_header), "===[ New log '%s' started ]===\n\n", filename); + else + fclose (f); + + f = fopen(filename, "a"); + if (f) { + if( strlen(log_header) > 0 ) + fprintf(f, "%s\n", log_header); + fprintf(f, "%s %s %s: %s\n", date, log_type_info[type].display_name, cat_text, buffer); + fclose(f); + } + } + + /* write to the console? */ + if (log_type_info[type].console) + { + #ifdef _WIN32 + ColorizeLog(log_type_info[type].color, date, log_type_info[type].display_name, cat_text_len == 0 ? log_type_info[type].name : cat_text, (string)buffer); + #else + printf("%s %s %s: %s\n", date, log_type_info[type].display_name, cat_text_len == 0 ? log_type_info[type].name : cat_text, buffer); + #endif + } +} + +void +ColorizeLog(int color, char *date, const char *display_name, const char *category, string buffer) +{ + #ifdef _WIN32 + HANDLE console = GetStdHandle(STD_OUTPUT_HANDLE); + if (console == INVALID_HANDLE_VALUE) { + printf("%s %s %s: %s\n", date, display_name, category, buffer); + return; + } + printf("%s ", date); + SetConsoleTextAttribute(console, color); + printf("%s ", display_name); + SetConsoleTextAttribute(console, FOREGROUND_WHITE_BOLD); + printf("%s: ", category); + SetConsoleTextAttribute(console, color); + printf("%s\n", buffer.c_str()); + SetConsoleTextAttribute(console, FOREGROUND_WHITE); + #endif +} + +#endif + +LogTypeStatus * +GetLogTypeStatus(const char *category, const char *type) { + char combined[256]; + int i; + + memset(combined, 0, sizeof(combined)); + snprintf(combined, sizeof(combined) - 1, "%s__%s", category, type); + + for (i = 0; i < NUMBER_OF_LOG_TYPES; i++) { + if (strcasecmp(log_type_info[i].name, combined) == 0) + return &log_type_info[i]; + } + + return &log_type_info[NUMBER_OF_LOG_TYPES]; +} + +void +ProcessLogConfig(XMLNode node) { + int i; + const char *category, *type, *level, *color, *enabled, *logs; + LogTypeStatus *lfs; + XMLNode child; + + category = node.getAttribute("Category"); + if (!category) { + LogWrite(MISC__WARNING, 0, "Misc", "Error parsing log config. Config missing a Category"); + return; + } + + for (i = 0; i < node.nChildNode("ConfigType"); i++) { + child = node.getChildNode("ConfigType", i); + type = child.getAttribute("Type"); + + if (!type) { + LogWrite(MISC__WARNING, 0, "Misc", "Error parsing log config. Config missing a Type"); + continue; + } + + lfs = GetLogTypeStatus(category, type); + level = child.getAttribute("Level"); + enabled = child.getAttribute("Enabled"); + color = child.getAttribute("Color"); + logs = child.getAttribute("Logs"); + + if (!logs) { + LogWrite(MISC__WARNING, 0, "Misc", "Error parsing log config. Config missing 'Logs' attribute to specify which log(s) to write to"); + continue; + } + if (!IsNumber(logs)) { + LogWrite(MISC__WARNING, 0, "Misc", "Error parsing log config. Attribute 'Logs' must be a number. See LogTypes.h for the valid types."); + continue; + } + + if (enabled) { + if (!strcasecmp("true", enabled) || !strcasecmp("on", enabled)) + lfs->enabled = true; + else if (!strcasecmp("false", enabled) || !strcasecmp("off", enabled)) + lfs->enabled = false; + else + LogWrite(MISC__WARNING, 0, "Misc", "Error parsing log config. Log setting 'Enabled' has invalid value '%s'. 'true'/'on' or 'false'/'off' are valid values", enabled); + } + + if (IsNumber(level)) + lfs->level = atoi(level); + else + lfs->level = 0; + + if (color) { + if (IsNumber(color)) + lfs->color = atoi(color); + else if (!strcasecmp("White", color)) + lfs->color = FOREGROUND_WHITE; + else if (!strcasecmp("Green", color)) + lfs->color = FOREGROUND_GREEN; + else if (!strcasecmp("Yellow", color)) + lfs->color = FOREGROUND_YELLOW; + else if (!strcasecmp("Red", color)) + lfs->color = FOREGROUND_RED; + else if (!strcasecmp("Blue", color)) + lfs->color = FOREGROUND_BLUE; + else if (!strcasecmp("Cyan", color)) + lfs->color = FOREGROUND_CYAN; + else if (!strcasecmp("Magenta", color)) + lfs->color = FOREGROUND_MAGENTA; + else if (!strcasecmp("WhiteBold", color)) + lfs->color = FOREGROUND_WHITE_BOLD; + else if (!strcasecmp("GreenBold", color)) + lfs->color = FOREGROUND_GREEN_BOLD; + else if (!strcasecmp("YellowBold", color)) + lfs->color = FOREGROUND_YELLOW_BOLD; + else if (!strcasecmp("RedBold", color)) + lfs->color = FOREGROUND_RED_BOLD; + else if (!strcasecmp("BlueBold", color)) + lfs->color = FOREGROUND_BLUE_BOLD; + else if (!strcasecmp("CyanBold", color)) + lfs->color = FOREGROUND_CYAN_BOLD; + else if (!strcasecmp("MagentaBold", color)) + lfs->color = FOREGROUND_MAGENTA_BOLD; + else + LogWrite(MISC__WARNING, 0, "Misc", "Error parsing log config. Log setting 'Color' has invalid value '%s'", color); + } + + // JA: something was wrong here, lfs->logfile or console always was true, even if bit was off. Will ask Scatman about it someday. + lfs->logfile = (atoi(logs) & LOG_LOGFILE); + lfs->console = (atoi(logs) & LOG_CONSOLE); + lfs->client = (atoi(logs) & LOG_CLIENT); + } +} + +bool +LogParseConfigs() { + XMLNode main_node; + int i; + + main_node = XMLNode::openFileHelper("log_config.xml", "EQ2EmuLogConfigs"); + if (main_node.isEmpty()) { + LogWrite(MISC__WARNING, 0, "Misc", "Unable to parse the file 'log_config.xml' or it does not exist. Default values will be used"); + return false; + } + + for (i = 0; i < main_node.nChildNode("LogConfig"); i++) + ProcessLogConfig(main_node.getChildNode("LogConfig", i)); + + return true; +} diff --git a/EQ2/source/common/Log.h b/EQ2/source/common/Log.h new file mode 100644 index 000000000..8a7e6a67f --- /dev/null +++ b/EQ2/source/common/Log.h @@ -0,0 +1,69 @@ +/* + EQ2Emulator: Everquest II Server Emulator + Copyright (C) 2007 EQ2EMulator Development Team (http://www.eq2emulator.net) + + This file is part of EQ2Emulator. + + EQ2Emulator is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + EQ2Emulator is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with EQ2Emulator. If not, see . +*/ +#ifndef LOG_H_ +#define LOG_H_ + +#include +#include "../WorldServer/client.h" + +#define LOG_BUFFER_SIZE 4096 + +#define LOG_CATEGORY(category) LOG_ ##category , +enum LogCategory +{ + #include "LogTypes.h" + NUMBER_OF_LOG_CATEGORIES +}; + +#define LOG_TYPE(category, type, level, color, enabled, logfile, console, client, str) category##__##type , +enum LogType +{ + #include "LogTypes.h" + NUMBER_OF_LOG_TYPES +}; + +extern const char* log_category_names[NUMBER_OF_LOG_CATEGORIES]; + +struct LogTypeStatus +{ + int8 level; + int color; + bool enabled; + bool logfile; + bool console; + bool client; + LogCategory category; + const char *name; + const char *display_name; +}; + +extern LogTypeStatus* log_type_info; + +void LogStart(); +void LogStop(); +int8 GetLoggerLevel(LogType type); +void LogWrite(LogType type, int8 log_level, const char *cat_text, const char *fmt, ...); +#ifdef PARSER + void ColorizeLog(int color, char *date, const char *display_name, const char *category, string buffer); +#endif + +bool LogParseConfigs(); + +#endif diff --git a/EQ2/source/common/LogTypes.h b/EQ2/source/common/LogTypes.h new file mode 100644 index 000000000..d416e6030 --- /dev/null +++ b/EQ2/source/common/LogTypes.h @@ -0,0 +1,498 @@ +/* + EQ2Emulator: Everquest II Server Emulator + Copyright (C) 2007 EQ2EMulator Development Team (http://www.eq2emulator.net) + + This file is part of EQ2Emulator. + + EQ2Emulator is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + EQ2Emulator is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with EQ2Emulator. If not, see . +*/ +#ifndef LOG_CATEGORY + #define LOG_CATEGORY(name) +#endif + +#ifndef LOG_TYPE + #define LOG_TYPE(category, type, level, color, enabled, logfile, console, client, str) +#endif + +#ifndef ENABLED + #define ENABLED true +#endif + +#ifndef DISABLED + #define DISABLED false +#endif + +#ifdef _WIN32 + #define FOREGROUND_WHITE (FOREGROUND_RED |FOREGROUND_GREEN | FOREGROUND_BLUE) + #define FOREGROUND_WHITE_BOLD (FOREGROUND_RED |FOREGROUND_GREEN | FOREGROUND_BLUE | FOREGROUND_INTENSITY) + #define FOREGROUND_RED_BOLD (FOREGROUND_RED | FOREGROUND_INTENSITY) + #define FOREGROUND_GREEN_BOLD (FOREGROUND_GREEN | FOREGROUND_INTENSITY) + #define FOREGROUND_BLUE_BOLD (FOREGROUND_BLUE | FOREGROUND_INTENSITY) + #define FOREGROUND_YELLOW (FOREGROUND_RED | FOREGROUND_GREEN) + #define FOREGROUND_YELLOW_BOLD (FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_INTENSITY) + #define FOREGROUND_CYAN (FOREGROUND_GREEN | FOREGROUND_BLUE) + #define FOREGROUND_CYAN_BOLD (FOREGROUND_GREEN | FOREGROUND_BLUE | FOREGROUND_INTENSITY) + #define FOREGROUND_MAGENTA (FOREGROUND_RED | FOREGROUND_BLUE) + #define FOREGROUND_MAGENTA_BOLD (FOREGROUND_RED | FOREGROUND_BLUE | FOREGROUND_INTENSITY) +#else + #define FOREGROUND_WHITE 37 + #define FOREGROUND_WHITE_BOLD 137 + #define FOREGROUND_RED 31 + #define FOREGROUND_RED_BOLD 131 + #define FOREGROUND_GREEN 32 + #define FOREGROUND_GREEN_BOLD 132 + #define FOREGROUND_BLUE 34 + #define FOREGROUND_BLUE_BOLD 134 + #define FOREGROUND_YELLOW 33 + #define FOREGROUND_YELLOW_BOLD 133 + #define FOREGROUND_CYAN 36 + #define FOREGROUND_CYAN_BOLD 136 + #define FOREGROUND_MAGENTA 35 + #define FOREGROUND_MAGENTA_BOLD 135 +#endif + + + +#define LOG_LOGFILE 1 +#define LOG_CONSOLE 2 +#define LOG_CLIENT 4 /* not yet using */ + +/* + Legend for str output (optional): + I : Information messages + W : Warning messages + E : Error messages + D : Debug messages + P : DumpPacket/PrintPacket messages - should NEVER go to Client channel!!! + T : Low-level debug tracing messages - should NEVER go to Client channel!!! + + Note: If str = null, output #catagory__#type to logs +*/ + + +/*** SYSTEM Loggers ******************************************************************************/ +// Logging specific to general events within the World code +LOG_CATEGORY(WORLD) +LOG_TYPE(WORLD, INFO, 0, FOREGROUND_WHITE_BOLD, ENABLED, ENABLED, ENABLED, DISABLED, "I") // Information messages (minimum output) +LOG_TYPE(WORLD, WARNING, 0, FOREGROUND_YELLOW_BOLD, ENABLED, ENABLED, ENABLED, DISABLED, "W") // Warning messages +LOG_TYPE(WORLD, ERROR, 0, FOREGROUND_RED_BOLD, ENABLED, ENABLED, ENABLED, DISABLED, "E") // Error messages (should always be enabled) +LOG_TYPE(WORLD, DEBUG, 0, FOREGROUND_GREEN_BOLD, DISABLED, DISABLED, DISABLED, DISABLED, "D") // Debug messages (enabled during alpha dev) +LOG_TYPE(WORLD, PACKET, 0, FOREGROUND_CYAN_BOLD, DISABLED, DISABLED, DISABLED, DISABLED, "P") // DumpPacket/PrintPacket messages +LOG_TYPE(WORLD, TRACE, 0, FOREGROUND_YELLOW, DISABLED, DISABLED, DISABLED, DISABLED, "T") // Low-level debug tracing messages + +// LoginServer and MiniLogin events +LOG_CATEGORY(LOGIN) +LOG_TYPE(LOGIN, INFO, 0, FOREGROUND_WHITE_BOLD, ENABLED, ENABLED, ENABLED, DISABLED, "I") +LOG_TYPE(LOGIN, WARNING, 0, FOREGROUND_YELLOW_BOLD, ENABLED, ENABLED, ENABLED, DISABLED, "W") +LOG_TYPE(LOGIN, ERROR, 0, FOREGROUND_RED_BOLD, ENABLED, ENABLED, ENABLED, DISABLED, "E") +LOG_TYPE(LOGIN, DEBUG, 0, FOREGROUND_GREEN_BOLD, DISABLED, DISABLED, DISABLED, DISABLED, "D") +LOG_TYPE(LOGIN, PACKET, 0, FOREGROUND_CYAN_BOLD, DISABLED, DISABLED, DISABLED, DISABLED, "P") +LOG_TYPE(LOGIN, TRACE, 0, FOREGROUND_YELLOW, DISABLED, DISABLED, DISABLED, DISABLED, "T") + +// PatchServer (DB auto-patcher) events +LOG_CATEGORY(PATCHER) +LOG_TYPE(PATCHER, INFO, 0, FOREGROUND_WHITE_BOLD, ENABLED, ENABLED, ENABLED, DISABLED, "I") +LOG_TYPE(PATCHER, WARNING, 0, FOREGROUND_YELLOW_BOLD, ENABLED, ENABLED, ENABLED, DISABLED, "W") +LOG_TYPE(PATCHER, ERROR, 0, FOREGROUND_RED_BOLD, ENABLED, ENABLED, ENABLED, DISABLED, "E") +LOG_TYPE(PATCHER, DEBUG, 0, FOREGROUND_GREEN_BOLD, DISABLED, DISABLED, DISABLED, DISABLED, "D") +LOG_TYPE(PATCHER, PACKET, 0, FOREGROUND_CYAN_BOLD, DISABLED, DISABLED, DISABLED, DISABLED, "P") +LOG_TYPE(PATCHER, TRACE, 0, FOREGROUND_YELLOW, DISABLED, DISABLED, DISABLED, DISABLED, "T") + +// PacketParser events +LOG_CATEGORY(PARSER) +LOG_TYPE(PARSER, INFO, 0, FOREGROUND_WHITE_BOLD, ENABLED, ENABLED, ENABLED, DISABLED, "I") +LOG_TYPE(PARSER, WARNING, 0, FOREGROUND_YELLOW_BOLD, ENABLED, ENABLED, ENABLED, DISABLED, "W") +LOG_TYPE(PARSER, ERROR, 0, FOREGROUND_RED_BOLD, ENABLED, ENABLED, ENABLED, DISABLED, "E") +LOG_TYPE(PARSER, DEBUG, 0, FOREGROUND_GREEN_BOLD, DISABLED, DISABLED, DISABLED, DISABLED, "D") +LOG_TYPE(PARSER, PACKET, 0, FOREGROUND_CYAN_BOLD, DISABLED, DISABLED, DISABLED, DISABLED, "P") +LOG_TYPE(PARSER, TRACE, 0, FOREGROUND_YELLOW, DISABLED, DISABLED, DISABLED, DISABLED, "T") + +// World/Login/Patcher/Parser Initialization loggers +LOG_CATEGORY(INIT) +LOG_TYPE(INIT, INFO, 0, FOREGROUND_WHITE_BOLD, ENABLED, ENABLED, ENABLED, DISABLED, "I") +LOG_TYPE(INIT, WARNING, 0, FOREGROUND_YELLOW_BOLD, ENABLED, ENABLED, ENABLED, DISABLED, "W") +LOG_TYPE(INIT, ERROR, 0, FOREGROUND_RED_BOLD, ENABLED, ENABLED, ENABLED, DISABLED, "E") +LOG_TYPE(INIT, DEBUG, 0, FOREGROUND_GREEN_BOLD, DISABLED, DISABLED, DISABLED, DISABLED, "D") +LOG_TYPE(INIT, LOGIN_INFO, 0, FOREGROUND_WHITE_BOLD, ENABLED, ENABLED, ENABLED, DISABLED, "I") +LOG_TYPE(INIT, LOGIN_WARNING, 0, FOREGROUND_YELLOW_BOLD, ENABLED, ENABLED, ENABLED, DISABLED, "W") +LOG_TYPE(INIT, LOGIN_ERROR, 0, FOREGROUND_RED_BOLD, ENABLED, ENABLED, ENABLED, DISABLED, "E") +LOG_TYPE(INIT, LOGIN_DEBUG, 0, FOREGROUND_GREEN_BOLD, DISABLED, DISABLED, DISABLED, DISABLED, "D") +LOG_TYPE(INIT, PATCHER_INFO, 0, FOREGROUND_WHITE_BOLD, ENABLED, ENABLED, ENABLED, DISABLED, "I") +LOG_TYPE(INIT, PATCHER_WARNING, 0, FOREGROUND_YELLOW_BOLD, ENABLED, ENABLED, ENABLED, DISABLED, "W") +LOG_TYPE(INIT, PATCHER_ERROR, 0, FOREGROUND_RED_BOLD, ENABLED, ENABLED, ENABLED, DISABLED, "E") +LOG_TYPE(INIT, PATCHER_DEBUG, 0, FOREGROUND_GREEN_BOLD, DISABLED, DISABLED, DISABLED, DISABLED, "D") + +// General DB logging +LOG_CATEGORY(DATABASE) +LOG_TYPE(DATABASE, INFO, 0, FOREGROUND_WHITE_BOLD, ENABLED, ENABLED, ENABLED, DISABLED, "I") +LOG_TYPE(DATABASE, ERROR, 0, FOREGROUND_RED_BOLD, ENABLED, ENABLED, ENABLED, DISABLED, "E") +LOG_TYPE(DATABASE, QUERY, 0, FOREGROUND_CYAN, DISABLED, DISABLED, DISABLED, DISABLED, "Q") +LOG_TYPE(DATABASE, RESULT, 0, FOREGROUND_CYAN_BOLD, DISABLED, DISABLED, DISABLED, DISABLED, "R") +LOG_TYPE(DATABASE, DEBUG, 0, FOREGROUND_GREEN_BOLD, DISABLED, DISABLED, DISABLED, DISABLED, "D") +LOG_TYPE(DATABASE, PACKET, 0, FOREGROUND_CYAN_BOLD, DISABLED, DISABLED, DISABLED, DISABLED, "P") + +// Logging Mutex code +LOG_CATEGORY(MUTEX) +LOG_TYPE(MUTEX, INFO, 0, FOREGROUND_WHITE_BOLD, ENABLED, ENABLED, ENABLED, DISABLED, "I") +LOG_TYPE(MUTEX, WARNING, 0, FOREGROUND_YELLOW_BOLD, ENABLED, ENABLED, ENABLED, DISABLED, "W") +LOG_TYPE(MUTEX, ERROR, 0, FOREGROUND_RED_BOLD, ENABLED, ENABLED, ENABLED, DISABLED, "E") +LOG_TYPE(MUTEX, DEBUG, 0, FOREGROUND_GREEN_BOLD, DISABLED, DISABLED, DISABLED, DISABLED, "D") +LOG_TYPE(MUTEX, PACKET, 0, FOREGROUND_CYAN_BOLD, DISABLED, DISABLED, DISABLED, DISABLED, "P") +LOG_TYPE(MUTEX, TRACE, 0, FOREGROUND_YELLOW, DISABLED, DISABLED, DISABLED, DISABLED, "T") + +// anything else... including a special DEV type "TODO" +LOG_CATEGORY(MISC) +LOG_TYPE(MISC, INFO, 0, FOREGROUND_WHITE_BOLD, ENABLED, ENABLED, ENABLED, DISABLED, "I") +LOG_TYPE(MISC, WARNING, 0, FOREGROUND_YELLOW_BOLD, ENABLED, ENABLED, ENABLED, DISABLED, "W") +LOG_TYPE(MISC, ERROR, 0, FOREGROUND_RED_BOLD, ENABLED, ENABLED, ENABLED, DISABLED, "E") +LOG_TYPE(MISC, DEBUG, 0, FOREGROUND_GREEN_BOLD, DISABLED, DISABLED, DISABLED, DISABLED, "D") +LOG_TYPE(MISC, PACKET, 0, FOREGROUND_CYAN_BOLD, DISABLED, DISABLED, DISABLED, DISABLED, "P") +LOG_TYPE(MISC, TRACE, 0, FOREGROUND_YELLOW, DISABLED, DISABLED, DISABLED, DISABLED, "T") +LOG_TYPE(MISC, TODO, 0, FOREGROUND_YELLOW_BOLD, DISABLED, DISABLED, DISABLED, DISABLED, "M") + + + +/*** NETWORK Loggers *****************************************************************************/ +// Client Communications Logging +LOG_CATEGORY(CCLIENT) +LOG_TYPE(CCLIENT, INFO, 0, FOREGROUND_WHITE_BOLD, ENABLED, ENABLED, ENABLED, DISABLED, "I") +LOG_TYPE(CCLIENT, WARNING, 0, FOREGROUND_YELLOW_BOLD, ENABLED, ENABLED, ENABLED, DISABLED, "W") +LOG_TYPE(CCLIENT, ERROR, 0, FOREGROUND_RED_BOLD, ENABLED, ENABLED, ENABLED, DISABLED, "E") +LOG_TYPE(CCLIENT, DEBUG, 0, FOREGROUND_GREEN_BOLD, DISABLED, DISABLED, DISABLED, DISABLED, "D") +LOG_TYPE(CCLIENT, PACKET, 0, FOREGROUND_CYAN_BOLD, DISABLED, DISABLED, DISABLED, DISABLED, "P") +LOG_TYPE(CCLIENT, TRACE, 0, FOREGROUND_YELLOW, DISABLED, DISABLED, DISABLED, DISABLED, "T") + +// Logging Net code +LOG_CATEGORY(NET) +LOG_TYPE(NET, INFO, 0, FOREGROUND_WHITE_BOLD, ENABLED, ENABLED, ENABLED, DISABLED, "I") +LOG_TYPE(NET, WARNING, 0, FOREGROUND_YELLOW_BOLD, ENABLED, ENABLED, ENABLED, DISABLED, "W") +LOG_TYPE(NET, ERROR, 0, FOREGROUND_RED_BOLD, ENABLED, ENABLED, ENABLED, DISABLED, "E") +LOG_TYPE(NET, DEBUG, 0, FOREGROUND_GREEN_BOLD, DISABLED, DISABLED, DISABLED, DISABLED, "D") +LOG_TYPE(NET, PACKET, 0, FOREGROUND_CYAN_BOLD, DISABLED, DISABLED, DISABLED, DISABLED, "P") +LOG_TYPE(NET, TRACE, 0, FOREGROUND_YELLOW, DISABLED, DISABLED, DISABLED, DISABLED, "T") + +// Logging opcodes as they are encountered +LOG_CATEGORY(OPCODE) +LOG_TYPE(OPCODE, INFO, 0, FOREGROUND_WHITE_BOLD, ENABLED, ENABLED, ENABLED, DISABLED, "I") +LOG_TYPE(OPCODE, WARNING, 0, FOREGROUND_YELLOW_BOLD, ENABLED, ENABLED, ENABLED, DISABLED, "W") +LOG_TYPE(OPCODE, ERROR, 0, FOREGROUND_RED_BOLD, ENABLED, ENABLED, ENABLED, DISABLED, "E") +LOG_TYPE(OPCODE, DEBUG, 0, FOREGROUND_MAGENTA_BOLD, DISABLED, DISABLED, DISABLED, DISABLED, "D") +LOG_TYPE(OPCODE, PACKET, 0, FOREGROUND_CYAN_BOLD, DISABLED, DISABLED, DISABLED, DISABLED, "P") +LOG_TYPE(OPCODE, TRACE, 0, FOREGROUND_YELLOW, DISABLED, DISABLED, DISABLED, DISABLED, "T") + +// Special category for dumping out excessive DumpPacket or Opcode debugging entries - All DISABLED by default! +LOG_CATEGORY(PACKET) +LOG_TYPE(PACKET, INFO, 0, FOREGROUND_WHITE_BOLD, ENABLED, ENABLED, ENABLED, DISABLED, "I") +LOG_TYPE(PACKET, WARNING, 0, FOREGROUND_YELLOW_BOLD, ENABLED, ENABLED, ENABLED, DISABLED, "W") +LOG_TYPE(PACKET, ERROR, 0, FOREGROUND_RED_BOLD, ENABLED, ENABLED, ENABLED, DISABLED, "E") +LOG_TYPE(PACKET, DEBUG, 0, FOREGROUND_GREEN_BOLD, DISABLED, DISABLED, DISABLED, DISABLED, "D") +LOG_TYPE(PACKET, PACKET, 0, FOREGROUND_CYAN_BOLD, DISABLED, DISABLED, DISABLED, DISABLED, "P") +LOG_TYPE(PACKET, TRACE, 0, FOREGROUND_YELLOW, DISABLED, DISABLED, DISABLED, DISABLED, "T") + + + +/*** PLAYER Loggers ******************************************************************************/ +// Events related to character progress +LOG_CATEGORY(PLAYER) +LOG_TYPE(PLAYER, INFO, 0, FOREGROUND_WHITE_BOLD, ENABLED, ENABLED, ENABLED, DISABLED, "I") +LOG_TYPE(PLAYER, WARNING, 0, FOREGROUND_YELLOW_BOLD, ENABLED, ENABLED, ENABLED, DISABLED, "W") +LOG_TYPE(PLAYER, ERROR, 0, FOREGROUND_RED_BOLD, ENABLED, ENABLED, ENABLED, DISABLED, "E") +LOG_TYPE(PLAYER, DEBUG, 0, FOREGROUND_GREEN_BOLD, DISABLED, DISABLED, DISABLED, DISABLED, "D") +LOG_TYPE(PLAYER, PACKET, 0, FOREGROUND_CYAN_BOLD, DISABLED, DISABLED, DISABLED, DISABLED, "P") +LOG_TYPE(PLAYER, TRACE, 0, FOREGROUND_YELLOW, DISABLED, DISABLED, DISABLED, DISABLED, "T") + + + +/*** SUBSYSTEM Loggers ***************************************************************************/ +// Achievements Logging +LOG_CATEGORY(ACHIEVEMENT) +LOG_TYPE(ACHIEVEMENT, INFO, 0, FOREGROUND_WHITE_BOLD, ENABLED, ENABLED, ENABLED, DISABLED, "I") +LOG_TYPE(ACHIEVEMENT, WARNING, 0, FOREGROUND_YELLOW_BOLD, ENABLED, ENABLED, ENABLED, DISABLED, "W") +LOG_TYPE(ACHIEVEMENT, ERROR, 0, FOREGROUND_RED_BOLD, ENABLED, ENABLED, ENABLED, DISABLED, "E") +LOG_TYPE(ACHIEVEMENT, DEBUG, 0, FOREGROUND_GREEN_BOLD, DISABLED, DISABLED, DISABLED, DISABLED, "D") +LOG_TYPE(ACHIEVEMENT, PACKET, 0, FOREGROUND_CYAN_BOLD, DISABLED, DISABLED, DISABLED, DISABLED, "P") +LOG_TYPE(ACHIEVEMENT, TRACE, 0, FOREGROUND_YELLOW, DISABLED, DISABLED, DISABLED, DISABLED, "T") + +// Chat Logging +LOG_CATEGORY(CHAT) +LOG_TYPE(CHAT, INFO, 0, FOREGROUND_WHITE_BOLD, ENABLED, ENABLED, ENABLED, DISABLED, "I") +LOG_TYPE(CHAT, WARNING, 0, FOREGROUND_YELLOW_BOLD, ENABLED, ENABLED, ENABLED, DISABLED, "W") +LOG_TYPE(CHAT, ERROR, 0, FOREGROUND_RED_BOLD, ENABLED, ENABLED, ENABLED, DISABLED, "E") +LOG_TYPE(CHAT, DEBUG, 0, FOREGROUND_GREEN_BOLD, DISABLED, DISABLED, DISABLED, DISABLED, "D") +LOG_TYPE(CHAT, PACKET, 0, FOREGROUND_CYAN_BOLD, DISABLED, DISABLED, DISABLED, DISABLED, "P") +LOG_TYPE(CHAT, TRACE, 0, FOREGROUND_YELLOW, DISABLED, DISABLED, DISABLED, DISABLED, "T") + +// Collection generated events +LOG_CATEGORY(COLLECTION) +LOG_TYPE(COLLECTION, INFO, 0, FOREGROUND_WHITE_BOLD, ENABLED, ENABLED, ENABLED, DISABLED, "I") +LOG_TYPE(COLLECTION, WARNING, 0, FOREGROUND_YELLOW_BOLD, ENABLED, ENABLED, ENABLED, DISABLED, "W") +LOG_TYPE(COLLECTION, ERROR, 0, FOREGROUND_RED_BOLD, ENABLED, ENABLED, ENABLED, DISABLED, "E") +LOG_TYPE(COLLECTION, DEBUG, 0, FOREGROUND_GREEN_BOLD, DISABLED, DISABLED, DISABLED, DISABLED, "D") +LOG_TYPE(COLLECTION, PACKET, 0, FOREGROUND_CYAN_BOLD, DISABLED, DISABLED, DISABLED, DISABLED, "P") +LOG_TYPE(COLLECTION, TRACE, 0, FOREGROUND_YELLOW, DISABLED, DISABLED, DISABLED, DISABLED, "T") + +// Events related to combat,aggro, hate, melee, damages, etc. +LOG_CATEGORY(COMBAT) +LOG_TYPE(COMBAT, INFO, 0, FOREGROUND_WHITE_BOLD, ENABLED, ENABLED, ENABLED, DISABLED, "I") +LOG_TYPE(COMBAT, WARNING, 0, FOREGROUND_YELLOW_BOLD, ENABLED, ENABLED, ENABLED, DISABLED, "W") +LOG_TYPE(COMBAT, ERROR, 0, FOREGROUND_RED_BOLD, ENABLED, ENABLED, ENABLED, DISABLED, "E") +LOG_TYPE(COMBAT, DEBUG, 0, FOREGROUND_GREEN_BOLD, DISABLED, DISABLED, DISABLED, DISABLED, "D") +LOG_TYPE(COMBAT, PACKET, 0, FOREGROUND_CYAN_BOLD, DISABLED, DISABLED, DISABLED, DISABLED, "P") +LOG_TYPE(COMBAT, TRACE, 0, FOREGROUND_YELLOW, DISABLED, DISABLED, DISABLED, DISABLED, "T") + +// Events related to commands (slash commands, UI commands, etc) +LOG_CATEGORY(COMMAND) +LOG_TYPE(COMMAND, INFO, 0, FOREGROUND_WHITE_BOLD, ENABLED, ENABLED, ENABLED, DISABLED, "I") +LOG_TYPE(COMMAND, WARNING, 0, FOREGROUND_YELLOW_BOLD, ENABLED, ENABLED, ENABLED, DISABLED, "W") +LOG_TYPE(COMMAND, ERROR, 0, FOREGROUND_RED_BOLD, ENABLED, ENABLED, ENABLED, DISABLED, "E") +LOG_TYPE(COMMAND, DEBUG, 0, FOREGROUND_GREEN_BOLD, DISABLED, DISABLED, DISABLED, DISABLED, "D") +LOG_TYPE(COMMAND, PACKET, 0, FOREGROUND_CYAN_BOLD, DISABLED, DISABLED, DISABLED, DISABLED, "P") +LOG_TYPE(COMMAND, TRACE, 0, FOREGROUND_YELLOW, DISABLED, DISABLED, DISABLED, DISABLED, "T") + +// Faction-related events, adjustments, querying, etc. +LOG_CATEGORY(FACTION) +LOG_TYPE(FACTION, INFO, 0, FOREGROUND_WHITE_BOLD, ENABLED, ENABLED, ENABLED, DISABLED, "I") +LOG_TYPE(FACTION, WARNING, 0, FOREGROUND_YELLOW_BOLD, ENABLED, ENABLED, ENABLED, DISABLED, "W") +LOG_TYPE(FACTION, ERROR, 0, FOREGROUND_RED_BOLD, ENABLED, ENABLED, ENABLED, DISABLED, "E") +LOG_TYPE(FACTION, DEBUG, 0, FOREGROUND_GREEN_BOLD, DISABLED, DISABLED, DISABLED, DISABLED, "D") +LOG_TYPE(FACTION, PACKET, 0, FOREGROUND_CYAN_BOLD, DISABLED, DISABLED, DISABLED, DISABLED, "P") +LOG_TYPE(FACTION, TRACE, 0, FOREGROUND_YELLOW, DISABLED, DISABLED, DISABLED, DISABLED, "T") + +// Guild events, members, logging, permissions, recruiting, etc. +LOG_CATEGORY(GUILD) +LOG_TYPE(GUILD, INFO, 0, FOREGROUND_WHITE_BOLD, ENABLED, ENABLED, ENABLED, DISABLED, "I") +LOG_TYPE(GUILD, WARNING, 0, FOREGROUND_YELLOW_BOLD, ENABLED, ENABLED, ENABLED, DISABLED, "W") +LOG_TYPE(GUILD, ERROR, 0, FOREGROUND_RED_BOLD, ENABLED, ENABLED, ENABLED, DISABLED, "E") +LOG_TYPE(GUILD, DEBUG, 0, FOREGROUND_GREEN_BOLD, DISABLED, DISABLED, DISABLED, DISABLED, "D") +LOG_TYPE(GUILD, PACKET, 0, FOREGROUND_CYAN_BOLD, DISABLED, DISABLED, DISABLED, DISABLED, "P") +LOG_TYPE(GUILD, TRACE, 0, FOREGROUND_YELLOW, DISABLED, DISABLED, DISABLED, DISABLED, "T") + +// Group events, members, permissions, etc. +LOG_CATEGORY(GROUP) +LOG_TYPE(GROUP, INFO, 0, FOREGROUND_WHITE_BOLD, ENABLED, ENABLED, ENABLED, DISABLED, "I") +LOG_TYPE(GROUP, WARNING, 0, FOREGROUND_YELLOW_BOLD, ENABLED, ENABLED, ENABLED, DISABLED, "W") +LOG_TYPE(GROUP, ERROR, 0, FOREGROUND_RED_BOLD, ENABLED, ENABLED, ENABLED, DISABLED, "E") +LOG_TYPE(GROUP, DEBUG, 0, FOREGROUND_GREEN_BOLD, DISABLED, DISABLED, DISABLED, DISABLED, "D") +LOG_TYPE(GROUP, PACKET, 0, FOREGROUND_CYAN_BOLD, DISABLED, DISABLED, DISABLED, DISABLED, "P") +LOG_TYPE(GROUP, TRACE, 0, FOREGROUND_YELLOW, DISABLED, DISABLED, DISABLED, DISABLED, "T") + +// Item events, stats, appearances, loading/reloading, etc. +LOG_CATEGORY(ITEM) +LOG_TYPE(ITEM, INFO, 0, FOREGROUND_WHITE_BOLD, ENABLED, ENABLED, ENABLED, DISABLED, "I") +LOG_TYPE(ITEM, WARNING, 0, FOREGROUND_YELLOW_BOLD, ENABLED, ENABLED, ENABLED, DISABLED, "W") +LOG_TYPE(ITEM, ERROR, 0, FOREGROUND_RED_BOLD, ENABLED, ENABLED, ENABLED, DISABLED, "E") +LOG_TYPE(ITEM, DEBUG, 0, FOREGROUND_GREEN_BOLD, DISABLED, DISABLED, DISABLED, DISABLED, "D") +LOG_TYPE(ITEM, PACKET, 0, FOREGROUND_CYAN_BOLD, DISABLED, DISABLED, DISABLED, DISABLED, "P") +LOG_TYPE(ITEM, TRACE, 0, FOREGROUND_YELLOW, DISABLED, DISABLED, DISABLED, DISABLED, "T") + +// Loot events, loot lists, rules, smart loot +LOG_CATEGORY(LOOT) +LOG_TYPE(LOOT, INFO, 0, FOREGROUND_WHITE_BOLD, ENABLED, ENABLED, ENABLED, DISABLED, "I") +LOG_TYPE(LOOT, WARNING, 0, FOREGROUND_YELLOW_BOLD, ENABLED, ENABLED, ENABLED, DISABLED, "W") +LOG_TYPE(LOOT, ERROR, 0, FOREGROUND_RED_BOLD, ENABLED, ENABLED, ENABLED, DISABLED, "E") +LOG_TYPE(LOOT, DEBUG, 0, FOREGROUND_GREEN_BOLD, DISABLED, DISABLED, DISABLED, DISABLED, "D") +LOG_TYPE(LOOT, PACKET, 0, FOREGROUND_CYAN_BOLD, DISABLED, DISABLED, DISABLED, DISABLED, "P") +LOG_TYPE(LOOT, TRACE, 0, FOREGROUND_YELLOW, DISABLED, DISABLED, DISABLED, DISABLED, "T") + +// Events that occur within the LUA subsystem +LOG_CATEGORY(LUA) +LOG_TYPE(LUA, INFO, 0, FOREGROUND_WHITE_BOLD, ENABLED, ENABLED, ENABLED, DISABLED, "I") +LOG_TYPE(LUA, WARNING, 0, FOREGROUND_YELLOW_BOLD, ENABLED, ENABLED, ENABLED, DISABLED, "W") +LOG_TYPE(LUA, ERROR, 0, FOREGROUND_RED_BOLD, ENABLED, ENABLED, ENABLED, DISABLED, "E") +LOG_TYPE(LUA, DEBUG, 0, FOREGROUND_GREEN_BOLD, DISABLED, DISABLED, DISABLED, DISABLED, "D") +LOG_TYPE(LUA, PACKET, 0, FOREGROUND_CYAN_BOLD, DISABLED, DISABLED, DISABLED, DISABLED, "P") +LOG_TYPE(LUA, TRACE, 0, FOREGROUND_YELLOW, DISABLED, DISABLED, DISABLED, DISABLED, "T") + +// Merchant events, buy/sell/broker, faction merchants, etc. +LOG_CATEGORY(MERCHANT) +LOG_TYPE(MERCHANT, INFO, 0, FOREGROUND_WHITE_BOLD, ENABLED, ENABLED, ENABLED, DISABLED, "I") +LOG_TYPE(MERCHANT, WARNING, 0, FOREGROUND_YELLOW_BOLD, ENABLED, ENABLED, ENABLED, DISABLED, "W") +LOG_TYPE(MERCHANT, ERROR, 0, FOREGROUND_RED_BOLD, ENABLED, ENABLED, ENABLED, DISABLED, "E") +LOG_TYPE(MERCHANT, DEBUG, 0, FOREGROUND_GREEN_BOLD, DISABLED, DISABLED, DISABLED, DISABLED, "D") +LOG_TYPE(MERCHANT, PACKET, 0, FOREGROUND_CYAN_BOLD, DISABLED, DISABLED, DISABLED, DISABLED, "P") +LOG_TYPE(MERCHANT, TRACE, 0, FOREGROUND_YELLOW, DISABLED, DISABLED, DISABLED, DISABLED, "T") + +// NPC events, stats, appearances, movement, gear, abilities, etc. +LOG_CATEGORY(NPC) +LOG_TYPE(NPC, INFO, 0, FOREGROUND_WHITE_BOLD, ENABLED, ENABLED, ENABLED, DISABLED, "I") +LOG_TYPE(NPC, WARNING, 0, FOREGROUND_YELLOW_BOLD, ENABLED, ENABLED, ENABLED, DISABLED, "W") +LOG_TYPE(NPC, ERROR, 0, FOREGROUND_RED_BOLD, ENABLED, ENABLED, ENABLED, DISABLED, "E") +LOG_TYPE(NPC, DEBUG, 0, FOREGROUND_GREEN_BOLD, DISABLED, DISABLED, DISABLED, DISABLED, "D") +LOG_TYPE(NPC, COMBAT, 0, FOREGROUND_GREEN_BOLD, DISABLED, DISABLED, DISABLED, DISABLED, "D") +LOG_TYPE(NPC, SPELLS, 0, FOREGROUND_GREEN_BOLD, DISABLED, DISABLED, DISABLED, DISABLED, "D") +LOG_TYPE(NPC, AI, 0, FOREGROUND_GREEN_BOLD, DISABLED, DISABLED, DISABLED, DISABLED, "D") +LOG_TYPE(NPC, DAMAGE, 0, FOREGROUND_GREEN_BOLD, DISABLED, DISABLED, DISABLED, DISABLED, "D") +LOG_TYPE(NPC, PACKET, 0, FOREGROUND_CYAN_BOLD, DISABLED, DISABLED, DISABLED, DISABLED, "P") +LOG_TYPE(NPC, TRACE, 0, FOREGROUND_YELLOW, DISABLED, DISABLED, DISABLED, DISABLED, "T") + +// What is that NPC thinking?! ...etc. +LOG_CATEGORY(NPC_AI) +LOG_TYPE(NPC_AI, INFO, 0, FOREGROUND_WHITE_BOLD, ENABLED, ENABLED, ENABLED, DISABLED, "I") +LOG_TYPE(NPC_AI, WARNING, 0, FOREGROUND_YELLOW_BOLD, ENABLED, ENABLED, ENABLED, DISABLED, "W") +LOG_TYPE(NPC_AI, ERROR, 0, FOREGROUND_RED_BOLD, ENABLED, ENABLED, ENABLED, DISABLED, "E") +LOG_TYPE(NPC_AI, DEBUG, 0, FOREGROUND_GREEN_BOLD, DISABLED, DISABLED, DISABLED, DISABLED, "D") +LOG_TYPE(NPC_AI, PACKET, 0, FOREGROUND_CYAN_BOLD, DISABLED, DISABLED, DISABLED, DISABLED, "P") +LOG_TYPE(NPC_AI, TRACE, 0, FOREGROUND_YELLOW, DISABLED, DISABLED, DISABLED, DISABLED, "T") + +// PET events, stats, appearances, movement, gear, abilities, etc. +LOG_CATEGORY(PET) +LOG_TYPE(PET, INFO, 0, FOREGROUND_WHITE_BOLD, ENABLED, ENABLED, ENABLED, DISABLED, "I") +LOG_TYPE(PET, WARNING, 0, FOREGROUND_YELLOW_BOLD, ENABLED, ENABLED, ENABLED, DISABLED, "W") +LOG_TYPE(PET, ERROR, 0, FOREGROUND_RED_BOLD, ENABLED, ENABLED, ENABLED, DISABLED, "E") +LOG_TYPE(PET, DEBUG, 0, FOREGROUND_GREEN_BOLD, DISABLED, DISABLED, DISABLED, DISABLED, "D") +LOG_TYPE(PET, COMBAT, 0, FOREGROUND_GREEN_BOLD, DISABLED, DISABLED, DISABLED, DISABLED, "D") +LOG_TYPE(PET, SPELLS, 0, FOREGROUND_GREEN_BOLD, DISABLED, DISABLED, DISABLED, DISABLED, "D") +LOG_TYPE(PET, AI, 0, FOREGROUND_GREEN_BOLD, DISABLED, DISABLED, DISABLED, DISABLED, "D") +LOG_TYPE(PET, DAMAGE, 0, FOREGROUND_GREEN_BOLD, DISABLED, DISABLED, DISABLED, DISABLED, "D") +LOG_TYPE(PET, PACKET, 0, FOREGROUND_CYAN_BOLD, DISABLED, DISABLED, DISABLED, DISABLED, "P") +LOG_TYPE(PET, TRACE, 0, FOREGROUND_GREEN, DISABLED, DISABLED, DISABLED, DISABLED, "T") + +// Quest generated events +LOG_CATEGORY(QUEST) +LOG_TYPE(QUEST, INFO, 0, FOREGROUND_WHITE_BOLD, ENABLED, ENABLED, ENABLED, DISABLED, "I") +LOG_TYPE(QUEST, WARNING, 0, FOREGROUND_YELLOW_BOLD, ENABLED, ENABLED, ENABLED, DISABLED, "W") +LOG_TYPE(QUEST, ERROR, 0, FOREGROUND_RED_BOLD, ENABLED, ENABLED, ENABLED, DISABLED, "E") +LOG_TYPE(QUEST, DEBUG, 0, FOREGROUND_GREEN_BOLD, DISABLED, DISABLED, DISABLED, DISABLED, "D") +LOG_TYPE(QUEST, REWARD, 0, FOREGROUND_GREEN_BOLD, DISABLED, DISABLED, DISABLED, DISABLED, "D") +LOG_TYPE(QUEST, STEP, 0, FOREGROUND_GREEN_BOLD, DISABLED, DISABLED, DISABLED, DISABLED, "D") +LOG_TYPE(QUEST, PACKET, 0, FOREGROUND_CYAN_BOLD, DISABLED, DISABLED, DISABLED, DISABLED, "P") +LOG_TYPE(QUEST, TRACE, 0, FOREGROUND_YELLOW, DISABLED, DISABLED, DISABLED, DISABLED, "T") + +// Events relating to Recipes in the world +LOG_CATEGORY(RECIPE) +LOG_TYPE(RECIPE, INFO, 0, FOREGROUND_WHITE_BOLD, ENABLED, ENABLED, ENABLED, DISABLED, "I") +LOG_TYPE(RECIPE, WARNING, 0, FOREGROUND_YELLOW_BOLD, ENABLED, ENABLED, ENABLED, DISABLED, "W") +LOG_TYPE(RECIPE, ERROR, 0, FOREGROUND_RED_BOLD, ENABLED, ENABLED, ENABLED, DISABLED, "E") +LOG_TYPE(RECIPE, DEBUG, 0, FOREGROUND_GREEN_BOLD, DISABLED, DISABLED, DISABLED, DISABLED, "D") +LOG_TYPE(RECIPE, PACKET, 0, FOREGROUND_CYAN_BOLD, DISABLED, DISABLED, DISABLED, DISABLED, "P") +LOG_TYPE(RECIPE, TRACE, 0, FOREGROUND_YELLOW, DISABLED, DISABLED, DISABLED, DISABLED, "T") + +// Events relating to Rules in the world +LOG_CATEGORY(RULESYS) +LOG_TYPE(RULESYS, INFO, 0, FOREGROUND_WHITE_BOLD, ENABLED, ENABLED, ENABLED, DISABLED, "I") +LOG_TYPE(RULESYS, WARNING, 0, FOREGROUND_YELLOW_BOLD, ENABLED, ENABLED, ENABLED, DISABLED, "W") +LOG_TYPE(RULESYS, ERROR, 0, FOREGROUND_RED_BOLD, ENABLED, ENABLED, ENABLED, DISABLED, "E") +LOG_TYPE(RULESYS, DEBUG, 0, FOREGROUND_GREEN_BOLD, DISABLED, DISABLED, DISABLED, DISABLED, "D") +LOG_TYPE(RULESYS, PACKET, 0, FOREGROUND_CYAN_BOLD, DISABLED, DISABLED, DISABLED, DISABLED, "P") +LOG_TYPE(RULESYS, TRACE, 0, FOREGROUND_YELLOW, DISABLED, DISABLED, DISABLED, DISABLED, "T") + +// The Skill system, books, scribing, stats, usage +LOG_CATEGORY(SKILL) +LOG_TYPE(SKILL, INFO, 0, FOREGROUND_WHITE_BOLD, ENABLED, ENABLED, ENABLED, DISABLED, "I") +LOG_TYPE(SKILL, WARNING, 0, FOREGROUND_YELLOW_BOLD, ENABLED, ENABLED, ENABLED, DISABLED, "W") +LOG_TYPE(SKILL, ERROR, 0, FOREGROUND_RED_BOLD, ENABLED, ENABLED, ENABLED, DISABLED, "E") +LOG_TYPE(SKILL, DEBUG, 0, FOREGROUND_GREEN_BOLD, DISABLED, DISABLED, DISABLED, DISABLED, "D") +LOG_TYPE(SKILL, PACKET, 0, FOREGROUND_CYAN_BOLD, DISABLED, DISABLED, DISABLED, DISABLED, "P") +LOG_TYPE(SKILL, TRACE, 0, FOREGROUND_YELLOW, DISABLED, DISABLED, DISABLED, DISABLED, "T") + +// The Spell system, books, scribing, stats, usage +LOG_CATEGORY(SPELL) +LOG_TYPE(SPELL, INFO, 0, FOREGROUND_WHITE_BOLD, ENABLED, ENABLED, ENABLED, DISABLED, "I") +LOG_TYPE(SPELL, WARNING, 0, FOREGROUND_YELLOW_BOLD, ENABLED, ENABLED, ENABLED, DISABLED, "W") +LOG_TYPE(SPELL, ERROR, 0, FOREGROUND_RED_BOLD, ENABLED, ENABLED, ENABLED, DISABLED, "E") +LOG_TYPE(SPELL, DEBUG, 0, FOREGROUND_GREEN_BOLD, DISABLED, DISABLED, DISABLED, DISABLED, "D") +LOG_TYPE(SPELL, PACKET, 0, FOREGROUND_CYAN_BOLD, DISABLED, DISABLED, DISABLED, DISABLED, "P") +LOG_TYPE(SPELL, TRACE, 0, FOREGROUND_YELLOW, DISABLED, DISABLED, DISABLED, DISABLED, "T") + +// The Crafting system, recipies, reactions, progress, etc. +LOG_CATEGORY(TRADESKILL) +LOG_TYPE(TRADESKILL, INFO, 0, FOREGROUND_WHITE_BOLD, ENABLED, ENABLED, ENABLED, DISABLED, "I") +LOG_TYPE(TRADESKILL, WARNING, 0, FOREGROUND_YELLOW_BOLD, ENABLED, ENABLED, ENABLED, DISABLED, "W") +LOG_TYPE(TRADESKILL, ERROR, 0, FOREGROUND_RED_BOLD, ENABLED, ENABLED, ENABLED, DISABLED, "E") +LOG_TYPE(TRADESKILL, DEBUG, 0, FOREGROUND_GREEN_BOLD, DISABLED, DISABLED, DISABLED, DISABLED, "D") +LOG_TYPE(TRADESKILL, PACKET, 0, FOREGROUND_CYAN_BOLD, DISABLED, DISABLED, DISABLED, DISABLED, "P") +LOG_TYPE(TRADESKILL, TRACE, 0, FOREGROUND_YELLOW, DISABLED, DISABLED, DISABLED, DISABLED, "T") + +// The Transportation system, teleporters, mounts, etc. +LOG_CATEGORY(TRANSPORT) +LOG_TYPE(TRANSPORT, INFO, 0, FOREGROUND_WHITE_BOLD, ENABLED, ENABLED, ENABLED, DISABLED, "I") +LOG_TYPE(TRANSPORT, WARNING, 0, FOREGROUND_YELLOW_BOLD, ENABLED, ENABLED, ENABLED, DISABLED, "W") +LOG_TYPE(TRANSPORT, ERROR, 0, FOREGROUND_RED_BOLD, ENABLED, ENABLED, ENABLED, DISABLED, "E") +LOG_TYPE(TRANSPORT, DEBUG, 0, FOREGROUND_GREEN_BOLD, DISABLED, DISABLED, DISABLED, DISABLED, "D") +LOG_TYPE(TRANSPORT, PACKET, 0, FOREGROUND_CYAN_BOLD, DISABLED, DISABLED, DISABLED, DISABLED, "P") +LOG_TYPE(TRANSPORT, TRACE, 0, FOREGROUND_YELLOW, DISABLED, DISABLED, DISABLED, DISABLED, "T") + + +/*** SPAWN Loggers *******************************************************************************/ +// General Spawn events, location, placement, grouping +LOG_CATEGORY(SPAWN) +LOG_TYPE(SPAWN, INFO, 0, FOREGROUND_WHITE_BOLD, ENABLED, ENABLED, ENABLED, DISABLED, "I") +LOG_TYPE(SPAWN, WARNING, 0, FOREGROUND_YELLOW_BOLD, ENABLED, ENABLED, ENABLED, DISABLED, "W") +LOG_TYPE(SPAWN, ERROR, 0, FOREGROUND_RED_BOLD, ENABLED, ENABLED, ENABLED, DISABLED, "E") +LOG_TYPE(SPAWN, DEBUG, 0, FOREGROUND_GREEN_BOLD, DISABLED, DISABLED, DISABLED, DISABLED, "D") +LOG_TYPE(SPAWN, PACKET, 0, FOREGROUND_CYAN_BOLD, DISABLED, DISABLED, DISABLED, DISABLED, "P") +LOG_TYPE(SPAWN, TRACE, 0, FOREGROUND_YELLOW, DISABLED, DISABLED, DISABLED, DISABLED, "T") + +// Events relating to interactable objects in the world +LOG_CATEGORY(OBJECT) +LOG_TYPE(OBJECT, INFO, 0, FOREGROUND_WHITE_BOLD, ENABLED, ENABLED, ENABLED, DISABLED, "I") +LOG_TYPE(OBJECT, WARNING, 0, FOREGROUND_YELLOW_BOLD, ENABLED, ENABLED, ENABLED, DISABLED, "W") +LOG_TYPE(OBJECT, ERROR, 0, FOREGROUND_RED_BOLD, ENABLED, ENABLED, ENABLED, DISABLED, "E") +LOG_TYPE(OBJECT, DEBUG, 0, FOREGROUND_GREEN_BOLD, DISABLED, DISABLED, DISABLED, DISABLED, "D") +LOG_TYPE(OBJECT, PACKET, 0, FOREGROUND_CYAN_BOLD, DISABLED, DISABLED, DISABLED, DISABLED, "P") +LOG_TYPE(OBJECT, TRACE, 0, FOREGROUND_YELLOW, DISABLED, DISABLED, DISABLED, DISABLED, "T") + +// Events relating to Signs in the world +LOG_CATEGORY(SIGN) +LOG_TYPE(SIGN, INFO, 0, FOREGROUND_WHITE_BOLD, ENABLED, ENABLED, ENABLED, DISABLED, "I") +LOG_TYPE(SIGN, WARNING, 0, FOREGROUND_YELLOW_BOLD, ENABLED, ENABLED, ENABLED, DISABLED, "W") +LOG_TYPE(SIGN, ERROR, 0, FOREGROUND_RED_BOLD, ENABLED, ENABLED, ENABLED, DISABLED, "E") +LOG_TYPE(SIGN, DEBUG, 0, FOREGROUND_GREEN_BOLD, DISABLED, DISABLED, DISABLED, DISABLED, "D") +LOG_TYPE(SIGN, PACKET, 0, FOREGROUND_CYAN_BOLD, DISABLED, DISABLED, DISABLED, DISABLED, "P") +LOG_TYPE(SIGN, TRACE, 0, FOREGROUND_YELLOW, DISABLED, DISABLED, DISABLED, DISABLED, "T") + +// Events relating to Widgets in the world +LOG_CATEGORY(WIDGET) +LOG_TYPE(WIDGET, INFO, 0, FOREGROUND_WHITE_BOLD, ENABLED, ENABLED, ENABLED, DISABLED, "I") +LOG_TYPE(WIDGET, WARNING, 0, FOREGROUND_YELLOW_BOLD, ENABLED, ENABLED, ENABLED, DISABLED, "W") +LOG_TYPE(WIDGET, ERROR, 0, FOREGROUND_RED_BOLD, ENABLED, ENABLED, ENABLED, DISABLED, "E") +LOG_TYPE(WIDGET, DEBUG, 0, FOREGROUND_GREEN_BOLD, DISABLED, DISABLED, DISABLED, DISABLED, "D") +LOG_TYPE(WIDGET, PACKET, 0, FOREGROUND_CYAN_BOLD, DISABLED, DISABLED, DISABLED, DISABLED, "P") +LOG_TYPE(WIDGET, TRACE, 0, FOREGROUND_YELLOW, DISABLED, DISABLED, DISABLED, DISABLED, "T") + +// Events relating to Groundspawns in the world +LOG_CATEGORY(GROUNDSPAWN) +LOG_TYPE(GROUNDSPAWN, INFO, 0, FOREGROUND_WHITE_BOLD, ENABLED, ENABLED, ENABLED, DISABLED, "I") +LOG_TYPE(GROUNDSPAWN, WARNING, 0, FOREGROUND_YELLOW_BOLD, ENABLED, ENABLED, ENABLED, DISABLED, "W") +LOG_TYPE(GROUNDSPAWN, ERROR, 0, FOREGROUND_RED_BOLD, ENABLED, ENABLED, ENABLED, DISABLED, "E") +LOG_TYPE(GROUNDSPAWN, DEBUG, 0, FOREGROUND_GREEN_BOLD, DISABLED, DISABLED, DISABLED, DISABLED, "D") +LOG_TYPE(GROUNDSPAWN, PACKET, 0, FOREGROUND_CYAN_BOLD, DISABLED, DISABLED, DISABLED, DISABLED, "P") +LOG_TYPE(GROUNDSPAWN, TRACE, 0, FOREGROUND_YELLOW, DISABLED, DISABLED, DISABLED, DISABLED, "T") + + + +/*** ZONE Loggers ********************************************************************************/ +// Zone-related events, status, messaging, access +LOG_CATEGORY(ZONE) +LOG_TYPE(ZONE, INFO, 0, FOREGROUND_WHITE_BOLD, ENABLED, ENABLED, ENABLED, DISABLED, "I") +LOG_TYPE(ZONE, WARNING, 0, FOREGROUND_YELLOW_BOLD, ENABLED, ENABLED, ENABLED, DISABLED, "W") +LOG_TYPE(ZONE, ERROR, 0, FOREGROUND_RED_BOLD, ENABLED, ENABLED, ENABLED, DISABLED, "E") +LOG_TYPE(ZONE, DEBUG, 0, FOREGROUND_GREEN_BOLD, DISABLED, DISABLED, DISABLED, DISABLED, "D") +LOG_TYPE(ZONE, PACKET, 0, FOREGROUND_CYAN_BOLD, DISABLED, DISABLED, DISABLED, DISABLED, "P") +LOG_TYPE(ZONE, TRACE, 0, FOREGROUND_YELLOW, DISABLED, DISABLED, DISABLED, DISABLED, "T") + +// Instance loading/reloading, etc. +LOG_CATEGORY(INSTANCE) +LOG_TYPE(INSTANCE, INFO, 0, FOREGROUND_WHITE_BOLD, ENABLED, ENABLED, ENABLED, DISABLED, "I") +LOG_TYPE(INSTANCE, WARNING, 0, FOREGROUND_YELLOW_BOLD, ENABLED, ENABLED, ENABLED, DISABLED, "W") +LOG_TYPE(INSTANCE, ERROR, 0, FOREGROUND_RED_BOLD, ENABLED, ENABLED, ENABLED, DISABLED, "E") +LOG_TYPE(INSTANCE, DEBUG, 0, FOREGROUND_GREEN_BOLD, DISABLED, DISABLED, DISABLED, DISABLED, "D") +LOG_TYPE(INSTANCE, PACKET, 0, FOREGROUND_CYAN_BOLD, DISABLED, DISABLED, DISABLED, DISABLED, "P") +LOG_TYPE(INSTANCE, TRACE, 0, FOREGROUND_YELLOW, DISABLED, DISABLED, DISABLED, DISABLED, "T") + + +#undef LOG_TYPE +#undef LOG_CATEGORY +#undef ENABLED +#undef DISABLED diff --git a/EQ2/source/common/MiscFunctions.cpp b/EQ2/source/common/MiscFunctions.cpp new file mode 100644 index 000000000..67100df4d --- /dev/null +++ b/EQ2/source/common/MiscFunctions.cpp @@ -0,0 +1,921 @@ +/* + EQ2Emulator: Everquest II Server Emulator + Copyright (C) 2007 EQ2EMulator Development Team (http://www.eq2emulator.net) + + This file is part of EQ2Emulator. + + EQ2Emulator is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + EQ2Emulator is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with EQ2Emulator. If not, see . +*/ +#include "../common/debug.h" +#include "../common/Log.h" +#include "MiscFunctions.h" +#include +#include +#include +#ifndef WIN32 +#include +#include +#endif +#include +#include +#ifdef WIN32 + #include +#endif +#include "../common/timer.h" +#include "../common/seperator.h" +#include "../common/packet_dump.h" +#include + +using namespace std; + +#ifndef PATCHER +#include "../WorldServer/World.h" +extern map EQOpcodeVersions; +#endif + +#ifdef WIN32 + #include + #include + + #define snprintf _snprintf + #define vsnprintf _vsnprintf + #define strncasecmp _strnicmp + #define strcasecmp _stricmp +#else + #include + #include + #include + #include + #include +#ifdef FREEBSD //Timothy Whitman - January 7, 2003 + #include + #include + #endif + #include + #include + #include + #include +#endif + +void CoutTimestamp(bool ms) { + time_t rawtime; + struct tm* gmt_t; + time(&rawtime); + gmt_t = gmtime(&rawtime); + + struct timeval read_time; + gettimeofday(&read_time,0); + + cout << (gmt_t->tm_year + 1900) << "/" << setw(2) << setfill('0') << (gmt_t->tm_mon + 1) << "/" << setw(2) << setfill('0') << gmt_t->tm_mday << " " << setw(2) << setfill('0') << gmt_t->tm_hour << ":" << setw(2) << setfill('0') << gmt_t->tm_min << ":" << setw(2) << setfill('0') << gmt_t->tm_sec; + if (ms) + cout << "." << setw(3) << setfill('0') << (read_time.tv_usec / 1000); + cout << " GMT"; +} + +// normal strncpy doesnt put a null term on copied strings, this one does +// ref: http://msdn.microsoft.com/library/default.asp?url=/library/en-us/wcecrt/htm/_wcecrt_strncpy_wcsncpy.asp +char* strn0cpy(char* dest, const char* source, int32 size) { + if (!dest) + return 0; + if (size == 0 || source == 0) { + dest[0] = 0; + return dest; + } + strncpy(dest, source, size); + dest[size - 1] = 0; + return dest; +} + +string loadInt32String(uchar* buffer, int16 buffer_size, int16* pos, EQ2_32BitString* eq_string){ + buffer += *pos; + int32 size = *(int32*)buffer; + if((size + *pos + sizeof(int16)) > buffer_size){ + cout << "Error in loadInt32String: Corrupt packet.\n"; + return string(""); + } + buffer += sizeof(int32); + string ret((char*)buffer, 0, size); + if(eq_string){ + eq_string->size = size; + eq_string->data = ret; + } + *pos += (size + sizeof(int32)); + return ret; +} +string loadInt16String(uchar* buffer, int16 buffer_size, int16* pos, EQ2_16BitString* eq_string){ + buffer += *pos; + int16 size = *(int16*)buffer; + if((size + *pos + sizeof(int16))> buffer_size){ + cout << "Error in loadInt16String: Corrupt packet.\n"; + return string(""); + } + buffer += sizeof(int16); + string ret((char*)buffer, 0, size); + if(eq_string){ + eq_string->size = size; + eq_string->data = ret; + } + *pos += (size + sizeof(int16)); + return ret; +} +string loadInt8String(uchar* buffer, int16 buffer_size, int16* pos, EQ2_8BitString* eq_string){ + buffer += *pos; + int8 size = *(int8*)buffer; + if((size + *pos + sizeof(int16)) > buffer_size){ + cout << "Error in loadInt8String: Corrupt packet.\n"; + return string(""); + } + buffer += sizeof(int8); + string ret((char*)buffer, 0, size); + if(eq_string){ + eq_string->size = size; + eq_string->data = ret; + } + *pos += (size + sizeof(int8)); + return ret; +} + +sint16 storeInt32String(uchar* buffer, int16 buffer_size, string in_str){ + sint16 string_size = in_str.length(); + if((string_size + sizeof(int32)) > buffer_size) + return -1; + memcpy(buffer, &string_size, sizeof(int32)); + buffer += sizeof(int32); + memcpy(buffer, in_str.c_str(), string_size); + buffer += string_size; + return (buffer_size - (string_size + sizeof(int32))); +} +sint16 storeInt16String(uchar* buffer, int16 buffer_size, string in_str){ + sint16 string_size = in_str.length(); + if((string_size + sizeof(int16)) > buffer_size) + return -1; + memcpy(buffer, &string_size, sizeof(int16)); + buffer += sizeof(int16); + memcpy(buffer, in_str.c_str(), string_size); + buffer += string_size; + return (buffer_size - (string_size + sizeof(int16))); +} +sint16 storeInt8String(uchar* buffer, int16 buffer_size, string in_str){ + sint16 string_size = in_str.length(); + if((string_size + sizeof(int8)) > buffer_size) + return -1; + memcpy(buffer, &string_size, sizeof(int8)); + buffer += sizeof(int8); + memcpy(buffer, in_str.c_str(), string_size); + buffer += string_size; + return (buffer_size - (string_size + sizeof(int8))); +} +// String N w/null Copy Truncated? +// return value =true if entire string(source) fit, false if it was truncated +bool strn0cpyt(char* dest, const char* source, int32 size) { + if (!dest) + return 0; + if (size == 0 || source == 0) { + dest[0] = 0; + return dest; + } + strncpy(dest, source, size); + dest[size - 1] = 0; + return (bool) (source[strlen(dest)] == 0); +} + +int MakeAnyLenString(char** ret, const char* format, ...) { + int buf_len = 128; + int chars = -1; + va_list argptr; + va_start(argptr, format); + while (chars == -1 || chars >= buf_len) { + safe_delete_array(*ret); + if (chars == -1) + buf_len *= 2; + else + buf_len = chars + 1; + *ret = new char[buf_len]; + chars = vsnprintf(*ret, buf_len, format, argptr); + } + va_end(argptr); + return chars; +} +void MakeAnyLenString(string &ret, const char* format, ...) { + va_list args; + va_start( args, format ); +#ifdef WIN32 + char * buffer; + int buf_len = _vscprintf( format, args ) + 1; + buffer = new char[buf_len]; + vsprintf( buffer, format, args ); +#else + char buffer[4000]; + vsnprintf(buffer, 4000, format, args); +#endif + va_end(args); + ret = string(buffer); +#ifdef WIN32 + safe_delete_array( buffer ); +#endif +} + +sint32 filesize(FILE* fp) { +#ifdef WIN32 + return _filelength(_fileno(fp)); +#else + struct stat file_stat; + fstat(fileno(fp), &file_stat); + return (sint32) file_stat.st_size; +#endif +} + +int32 ResolveIP(const char* hostname, char* errbuf) { +#ifdef WIN32 + static InitWinsock ws; +#endif + if (errbuf) + errbuf[0] = 0; + if (hostname == 0) { + if (errbuf) + snprintf(errbuf, ERRBUF_SIZE, "ResolveIP(): hostname == 0"); + return 0; + } + struct sockaddr_in server_sin; +#ifdef WIN32 + PHOSTENT phostent = NULL; +#else + struct hostent *phostent = NULL; +#endif + server_sin.sin_family = AF_INET; + if ((phostent = gethostbyname(hostname)) == NULL) { +#ifdef WIN32 + if (errbuf) + snprintf(errbuf, ERRBUF_SIZE, "Unable to get the host name. Error: %i", WSAGetLastError()); +#else + if (errbuf) + snprintf(errbuf, ERRBUF_SIZE, "Unable to get the host name. Error: %s", strerror(errno)); +#endif + return 0; + } +#ifdef WIN32 + memcpy ((char FAR *)&(server_sin.sin_addr), phostent->h_addr, phostent->h_length); +#else + memcpy ((char*)&(server_sin.sin_addr), phostent->h_addr, phostent->h_length); +#endif + return server_sin.sin_addr.s_addr; +} + +#ifdef WIN32 +InitWinsock::InitWinsock() { + WORD version = MAKEWORD (1,1); + WSADATA wsadata; + WSAStartup (version, &wsadata); +} + +InitWinsock::~InitWinsock() { + WSACleanup(); +} + +#endif + +#ifndef WIN32 +const char * itoa(int value) { + static char temp[_ITOA_BUFLEN]; + memset(temp, 0, _ITOA_BUFLEN); + snprintf(temp, _ITOA_BUFLEN,"%d", value); + return temp; +} + + +char * itoa(int value, char *result, int base) { + char *ptr1, *ptr2; + char c; + int tmp_value; + + //need a valid base + if (base < 2 || base > 36) { + *result = '\0'; + return result; + } + + ptr1 = ptr2 = result; + do { + tmp_value = value; + value /= base; + + *ptr1++ = "zyxwvutsrqponmlkjihgfedcba9876543210123456789abcdefghijklmnopqrstuvwxyz" [35 + (tmp_value - value * base)]; + } + while (value > 0); + + //apply a negative sign if need be + if (tmp_value < 0) + *ptr1++ = '-'; + + *ptr1-- = '\0'; + while (ptr2 < ptr1) { + c = *ptr1; + *ptr1-- = *ptr2; + *ptr2++ = c; + } + + return result; +} +#endif + +/* + * solar: generate a random integer in the range low-high + * this should be used instead of the rand()%limit method + */ +int MakeRandomInt(int low, int high) +{ + return (int)MakeRandomFloat((double)low, (double)high + 0.999); +} +int32 hextoi(char* num) { + int len = strlen(num); + if (len < 3) + return 0; + + if (num[0] != '0' || (num[1] != 'x' && num[1] != 'X')) + return 0; + + int32 ret = 0; + int mul = 1; + for (int i=len-1; i>=2; i--) { + if (num[i] >= 'A' && num[i] <= 'F') + ret += ((num[i] - 'A') + 10) * mul; + else if (num[i] >= 'a' && num[i] <= 'f') + ret += ((num[i] - 'a') + 10) * mul; + else if (num[i] >= '0' && num[i] <= '9') + ret += (num[i] - '0') * mul; + else + return 0; + mul *= 16; + } + return ret; +} + +int64 hextoi64(char* num) { + int len = strlen(num); + if (len < 3) + return 0; + + if (num[0] != '0' || (num[1] != 'x' && num[1] != 'X')) + return 0; + + int64 ret = 0; + int mul = 1; + for (int i=len-1; i>=2; i--) { + if (num[i] >= 'A' && num[i] <= 'F') + ret += ((num[i] - 'A') + 10) * mul; + else if (num[i] >= 'a' && num[i] <= 'f') + ret += ((num[i] - 'a') + 10) * mul; + else if (num[i] >= '0' && num[i] <= '9') + ret += (num[i] - '0') * mul; + else + return 0; + mul *= 16; + } + return ret; +} + +float MakeRandomFloat(float low, float high) +{ + static bool seeded=0; + float diff = high - low; + + if(!diff) return low; + if(diff < 0) + diff = 0 - diff; + + if(!seeded) + { + srand(time(0) * (time(0) % (int)diff)); + seeded = true; + } + + return (rand() / (float)RAND_MAX * diff + (low > high ? high : low)); +} + +int32 GenerateEQ2Color(float* r, float* g, float* b){ + int8 rgb[4] = {0}; + rgb[0] = (int8)((*r)*255); + rgb[1] = (int8)((*b)*255); + rgb[2] = (int8)((*g)*255); + int32 color = 0; + memcpy(&color, rgb, sizeof(int32)); + return color; +} +int32 GenerateEQ2Color(float* rgb[3]){ + return GenerateEQ2Color(rgb[0], rgb[1], rgb[2]); +} +int8 MakeInt8(float* input){ + float input2 = *input; + if(input2 < 0) + input2 *= -1; + return (int8)(input2*255); +} + +vector* SplitString(string str, char delim){ + vector* results = new vector; + int32 pos; + while((pos = str.find_first_of(delim))!= str.npos){ + if(pos > 0){ + results->push_back(str.substr(0,pos)); + } + if(str.length() > pos) + str = str.substr(pos+1); + else + break; + } + if(str.length() > 0) + results->push_back(str); + return results; +} + +bool Unpack(uchar* data, uchar* dst, int16 dstLen, int16 version, bool reverse){ + int32 srcLen = 0; + memcpy(&srcLen, data, sizeof(int32)); + return Unpack(srcLen, data + 4, dst, dstLen, version, reverse); +} +bool Unpack(int32 srcLen, uchar* data, uchar* dst, int16 dstLen, int16 version, bool reverse) { +// int32 srcLen = 0; +// memcpy(&srcLen, data, sizeof(int32)); +// data+=4; + if(reverse) + Reverse(data, srcLen); + int16 pos = 0; + int16 real_pos = 0; + while(srcLen && pos < dstLen) { + if(srcLen >= 0 && !srcLen--) + return false; + int8 code = data[real_pos++]; + + if(code >= 128) { + for(int8 index=0; index<7; index++) { + if(code & 1) { + if(pos >= dstLen) + return false; + if(srcLen >= 0 && !srcLen--) + return false; + dst[pos++] = data[real_pos++]; + } else { + if(pos < dstLen) dst[pos++] = 0; + } + code >>= 1; + } + } else { + if(pos + code > dstLen) + return false; + memset(dst+pos, 0, code); + pos+=code; + } + } + return srcLen <= 0; +} + +int32 Pack(uchar* data, uchar* src, int16 srcLen, int16 dstLen, int16 version) { + int16 real_pos = 4; + int32 pos = 0; + int32 code = 0; + int codePos = 0; + int codeLen = 0; + int8 zeroLen = 0; + memset(data,0,dstLen); + + while(pos < srcLen) { + if(src[pos] || codeLen) { + if(!codeLen) { + if(zeroLen > 5) { + data[real_pos++] = zeroLen; + zeroLen = 0; + } + else if(zeroLen >= 1 && zeroLen<=5){ + for(;zeroLen>0;zeroLen--) + codeLen++; + } + codePos = real_pos; + code = 0; + data[real_pos++] = 0; + } + if(src[pos]) { + data[real_pos++] = src[pos]; + code |= 0x80; + } + code >>= 1; + codeLen++; + + if(codeLen == 7) { + data[codePos] = int8(0x80 | code); + codeLen = 0; + } + } else { + if(zeroLen == 0x7F) { + data[real_pos++] = zeroLen; + zeroLen = 0; + } + zeroLen++; + } + pos++; + } + if(codeLen) { + code >>= (7 - codeLen); + data[codePos] = int8(0x80 | code); + } else if(zeroLen) { + data[real_pos++] = zeroLen; + } + Reverse(data + 4, real_pos - 4); + int32 dataLen = real_pos - 4; + memcpy(&data[0], &dataLen, sizeof(int32)); + return dataLen + 4; +} +void Reverse(uchar* input, int32 srcLen){ + int16 real_pos = 0; + int16 orig_pos = 0; + int8 reverse_count = 0; + while(srcLen > 0 && srcLen < 0xFFFFFFFF){ // XXX it was >=0 before. but i think it was a bug + int8 code = input[real_pos++]; + srcLen--; + if(code >= 128) { + for(int8 index=0; index<7; index++) { + if(code & 1) { + if(srcLen >= 0 && !srcLen--) + return; + real_pos++; + reverse_count++; + } + code >>= 1; + } + } + if(reverse_count > 0){ + int8 tmp_data[8] = {0}; + for(int8 i=0;i 0){ + ret = atoul(input.c_str()); + } + } + catch(...){} + return ret; +} + +map TranslateBrokerRequest(string request){ + map ret; + string key; + string value; + int32 start_pos = 0; + int32 end_pos = 0; + int32 pos = request.find("="); + bool str_val = false; + while(pos < 0xFFFFFFFF){ + str_val = false; + key = request.substr(start_pos, pos-start_pos); + if(request.find("|", pos) == pos+1){ + pos++; + end_pos = request.find("|", pos+1); + str_val = true; + } + else + end_pos = request.find(" ", pos); + if(end_pos < 0xFFFFFFFF){ + value = request.substr(pos+1, end_pos-pos-1); + start_pos = end_pos+1; + if(str_val){ + start_pos++; + ret[key] = ToLower(value); + } + else + ret[key] = value; + pos = request.find("=", start_pos); + } + else{ + value = request.substr(pos+1); + if(str_val){ + start_pos++; + ret[key] = ToLower(value); + } + else + ret[key] = value; + break; + } + } + return ret; +} + +int8 CheckOverLoadSize(int32 val){ + int8 ret = 1; + if(val >= 0xFFFF) //int32 + ret = sizeof(int16) + sizeof(int32); + else if(val >= 0xFF) + ret = sizeof(int8) + sizeof(int16); + return ret; +} + +int8 DoOverLoad(int32 val, uchar* data){ + int8 ret = 1; + if(val >= 0xFFFF){ //int32 + memset(data, 0xFF, sizeof(int16)); + memcpy(data + sizeof(int16), &val, sizeof(int32)); + ret = sizeof(int16) + sizeof(int32); + } + else if(val >= 0xFF){ //int16 + memset(data, 0xFF, sizeof(int8)); + memcpy(data + sizeof(int8), &val, sizeof(int16)); + ret = sizeof(int8) + sizeof(int16); + } + else + memcpy(data, &val, sizeof(int8)); + return ret; +} + +/* Treats contiguous spaces as one space. */ +int32 CountWordsInString(const char* text) { + int32 words = 0; + if (text && strlen(text) > 0) { + bool on_word = false; + for (int32 i = 0; i < strlen(text); i++) { + char letter = text[i]; + if (on_word && !((letter >= 48 && letter <= 57) || (letter >= 65 && letter <= 90) || (letter >= 97 && letter <= 122))) + on_word = false; + else if (!on_word && ((letter >= 48 && letter <= 57) || (letter >= 65 && letter <= 90) || (letter >= 97 && letter <= 122))){ + on_word = true; + words++; + } + } + } + return words; +} + +bool IsNumber(const char *num) { + size_t len, i; + + if (!num) + return false; + + len = strlen(num); + if (len == 0) + return false; + + for (i = 0; i < len; i++) { + if (!isdigit(num[i])) + return false; + } + + return true; +} + +void PrintSep(Seperator *sep, const char *name) { +#ifdef _DEBUG + int32 i = 0; + + LogWrite(MISC__WARNING, 0, "Misc", "Printing sep %s", name ? name : "No Name"); + if (!sep) + LogWrite(MISC__WARNING, 0, "Misc", "\tSep is null"); + else { + while (sep->arg[i] && strlen(sep->arg[i]) > 0) { + LogWrite(MISC__WARNING, 0, "Misc", "\t%i => %s", i, sep->arg[i]); + i++; + } + } +#endif +} + +#define INI_IGNORE(c) (c == '\n' || c == '\r' || c == '#') + +static bool INIGoToSection(FILE *f, const char *section) { + size_t size = strlen(section) + 3; + char line[256], *buf, *tmp; + bool found = false; + + if ((buf = (char *)malloc(size)) == NULL) { + fprintf(stderr, "%s: %u: Unable to allocate %zu bytes\n", __FUNCTION__, __LINE__, size); + return false; + } + + sprintf(buf, "[%s]", section); + + while (fgets(line, sizeof(line), f) != NULL) { + if (INI_IGNORE(line[0])) + continue; + + if (line[0] == '[') { + if ((tmp = strstr(line, "\n")) != NULL) + *tmp = '\0'; + if ((tmp = strstr(line, "\r")) != NULL) + *tmp = '\0'; + + if (strcasecmp(buf, line) == 0) { + found = true; + break; + } + } + } + + free(buf); + return found; +} + +static char * INIFindValue(FILE *f, const char *section, const char *property) { + char line[256], *key, *val; + + if (section != NULL && !INIGoToSection(f, section)) + return NULL; + + while (fgets(line, sizeof(line), f) != NULL) { + if (INI_IGNORE(line[0])) + continue; + + if (section != NULL && line[0] == '[') + return NULL; + + if ((key = strtok(line, "=")) == NULL) + continue; + + if (strcasecmp(key, property) == 0) { + val = strtok(NULL, "\n\r"); + + if (val == NULL) + return NULL; + + return strdup(val); + } + } + + return NULL; +} + +bool INIReadInt(FILE *f, const char *section, const char *property, int *out) { + char *value; + + rewind(f); + + if ((value = INIFindValue(f, section, property)) == NULL) + return false; + + if (!IsNumber(value)) { + free(value); + return false; + } + + *out = atoi(value); + free(value); + + return true; +} + +bool INIReadBool(FILE *f, const char *section, const char *property, bool *out) { + char *value; + + rewind(f); + + if ((value = INIFindValue(f, section, property)) == NULL) + return false; + + *out = (strcasecmp(value, "1") == 0 || strcasecmp(value, "true") == 0 || strcasecmp(value, "on") == 0 || strcasecmp(value, "yes") == 0); + free(value); + + return true; + +} + +int16 GetItemPacketType(int32 version) { + int16 item_version; + if (version >= 64707) + item_version = 0x5CFE; + else if (version >= 63119) + item_version = 0x56FE; + else if (version >= 60024) + item_version = 0x51FE; + else if (version >= 57107) + item_version = 0x4CFE; + else if (version >= 57048) + item_version = 0x48FE; + else if (version >= 1199) + item_version = 0x44FE; + else if (version >= 1195) + item_version = 0x40FE; + else if (version >= 1193) + item_version = 0x3FFE; + else if (version >= 1190) + item_version = 0x3EFE; + else if (version >= 1188) + item_version = 0x3DFE; + else if(version >= 1096) + item_version = 0x35FE; + else if(version >= 1027) + item_version = 0x31FE; + else if(version >= 1008) + item_version = 0x2CFE; + else if(version >= 927) + item_version = 0x23FE; + else if(version >= 893) + item_version = 0x22FE; + else if(version >= 860) + item_version = 0x20FE; + else + item_version = 0x1CFE; + + return item_version; +} + +#ifndef PATCHER +int16 GetOpcodeVersion(int16 version) { + int16 ret = version; + int16 version1 = 0; + int16 version2 = 0; + map::iterator itr; + for (itr = EQOpcodeVersions.begin(); itr != EQOpcodeVersions.end(); itr++) { + version1 = itr->first; + version2 = itr->second; + if (version >= version1 && version <= version2) { + ret = version1; + break; + } + } + + return ret; +} +#endif + +void SleepMS(int32 milliseconds) { +#if defined(_WIN32) + Sleep(milliseconds); +#else + usleep(milliseconds * 1000); +#endif +} + +size_t +strlcpy(char *dst, const char *src, size_t size) { + register char *d = dst; + register const char *s = src; + register size_t n = size; + + if (n != 0 && --n != 0) { + do { + if ((*d++ = *s++) == 0) + break; + } while (--n != 0); + } + + if (n == 0) { + if (size != 0) + *d = '\0'; + while (*s++) + ; + } + + return(s - src - 1); +} \ No newline at end of file diff --git a/EQ2/source/common/MiscFunctions.h b/EQ2/source/common/MiscFunctions.h new file mode 100644 index 000000000..6aefef384 --- /dev/null +++ b/EQ2/source/common/MiscFunctions.h @@ -0,0 +1,135 @@ +/* + EQ2Emulator: Everquest II Server Emulator + Copyright (C) 2007 EQ2EMulator Development Team (http://www.eq2emulator.net) + + This file is part of EQ2Emulator. + + EQ2Emulator is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + EQ2Emulator is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with EQ2Emulator. If not, see . +*/ +#ifndef MISCFUNCTIONS_H +#define MISCFUNCTIONS_H + +#include "types.h" +#include "seperator.h" +#include +#include +#include +#include + +#ifndef ERRBUF_SIZE +#define ERRBUF_SIZE 1024 +#endif + +int MakeAnyLenString(char** ret, const char* format, ...); +int32 hextoi(char* num); +int64 hextoi64(char* num); +sint32 filesize(FILE* fp); +int32 ResolveIP(const char* hostname, char* errbuf = 0); +void CoutTimestamp(bool ms = true); +char* strn0cpy(char* dest, const char* source, int32 size); + // return value =true if entire string(source) fit, false if it was truncated +bool strn0cpyt(char* dest, const char* source, int32 size); +string loadInt32String(uchar* buffer, int16 buffer_size, int16* pos, EQ2_32BitString* eq_string = NULL); +string loadInt16String(uchar* buffer, int16 buffer_size, int16* pos, EQ2_16BitString* eq_string = NULL); +string loadInt8String(uchar* buffer, int16 buffer_size, int16* pos, EQ2_8BitString* eq_string = NULL); +sint16 storeInt32String(uchar* buffer, int16 buffer_size, string in_str); +sint16 storeInt16String(uchar* buffer, int16 buffer_size, string in_str); +sint16 storeInt8String(uchar* buffer, int16 buffer_size, string in_str); +int MakeRandomInt(int low, int high); +float MakeRandomFloat(float low, float high); +int32 GenerateEQ2Color(float r, float g, float b); +int32 GenerateEQ2Color(float* rgb[3]); +void SetColor(EQ2_Color* color, long data); +//void CreateEQ2Color(EQ2_Color* color, uchar* data, int16* size); +int8 MakeInt8(uchar* data, int16* size); +int8 MakeInt8(float* input); +bool Unpack(int32 srcLen, uchar* data, uchar* dst, int16 dstLen, int16 version = 0, bool reverse = true); +bool Unpack(uchar* data, uchar* dst, int16 dstLen, int16 version = 0, bool reverse = true); +int32 Pack(uchar* data, uchar* src, int16 srcLen, int16 dstLen, int16 version = 0); +void Reverse(uchar* input, int32 srcLen); +void Encode(uchar* dst, uchar* src, int16 len); +void Decode(uchar* dst, uchar* src, int16 len); +string ToUpper(string input); +string ToLower(string input); +int32 ParseIntValue(string input); +map TranslateBrokerRequest(string request); +void MovementDecode(uchar* dst, uchar* newval, uchar* orig, int16 len); +vector* SplitString(string str, char delim); +int8 DoOverLoad(int32 val, uchar* data); +int8 CheckOverLoadSize(int32 val); +int32 CountWordsInString(const char* text); +bool IsNumber(const char *num); +void PrintSep(Seperator *sep, const char *name = 0); +///Gets the packet type for the given version +///The client version +int16 GetItemPacketType(int32 version); +///Gets the opcode version_range1 from the clients version +///The client version +int16 GetOpcodeVersion(int16 version); +void SleepMS(int32 milliseconds); +size_t strlcpy(char *dst, const char *src, size_t size); + +bool INIReadBool(FILE *f, const char *section, const char *property, bool *out); +bool INIReadInt(FILE *f, const char *section, const char *property, int *out); + +template void AddData(Type input, string* datastring){ + if(datastring) + datastring->append((char*)&input, sizeof(input)); +} + +template void AddData(Type input, int32 array_size, string* datastring){ + if(array_size>0){ + for(int32 i=0;i class AutoDelete { +public: + AutoDelete(T** iVar, T* iSetTo = 0) { + init(iVar, iSetTo); + } + AutoDelete() {} + void init(T** iVar, T* iSetTo = 0) + { + pVar = iVar; + if (iSetTo) + *pVar = iSetTo; + } + ~AutoDelete() { + safe_delete(*pVar); + } +private: + T** pVar; +}; + +#endif + + diff --git a/EQ2/source/common/Mutex.cpp b/EQ2/source/common/Mutex.cpp new file mode 100644 index 000000000..75e3b36ad --- /dev/null +++ b/EQ2/source/common/Mutex.cpp @@ -0,0 +1,360 @@ +/* + EQ2Emulator: Everquest II Server Emulator + Copyright (C) 2007 EQ2EMulator Development Team (http://www.eq2emulator.net) + + This file is part of EQ2Emulator. + + EQ2Emulator is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + EQ2Emulator is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with EQ2Emulator. If not, see . +*/ +#include "../common/Log.h" +#include "../common/debug.h" +#include "../common/Mutex.h" + +Mutex::Mutex() { + readers = 0; + mlocked = false; + writing = false; + name = ""; +#ifdef DEBUG + stack.clear(); +#endif + //CSLock is a pointer so we can use a different attribute type on create + CSLock = new CriticalSection(MUTEX_ATTRIBUTE_RECURSIVE); +} + +Mutex::~Mutex() { + safe_delete(CSLock); +#ifdef DEBUG + stack.clear(); +#endif +} + +void Mutex::SetName(string in_name){ +#ifdef DEBUG + name = in_name; +#endif +} + +void Mutex::lock() { +#ifdef DEBUG + int i = 0; +#endif + if (name.length() > 0){ + while (mlocked){ +#ifdef DEBUG + if (i>MUTEX_TIMEOUT_MILLISECONDS){ + LogWrite(MUTEX__ERROR, 0, "Mutex", "Possible deadlock attempt by '%s'!", name.c_str()); + return; + } + i++; +#endif + Sleep(1); + } + } + mlocked = true; + CSLock->lock(); +} + +bool Mutex::trylock() { + return CSLock->trylock(); +} + +void Mutex::unlock() { + CSLock->unlock(); + mlocked = false; +} + +void Mutex::readlock(const char* function, int32 line){ +#ifdef DEBUG + int32 i = 0; +#endif + while (true){ + //Loop until there isn't a writer, then we can read! + CSRead.lock(); + if (!writing){ + readers++; + CSRead.unlock(); +#ifdef DEBUG + CSStack.lock(); + if (function) + stack[(string)function]++; + CSStack.unlock(); +#endif + return; + } + CSRead.unlock(); +#ifdef DEBUG + if (i > MUTEX_TIMEOUT_MILLISECONDS){ + LogWrite(MUTEX__ERROR, 0, "Mutex", "The mutex %s called from %s at line %u timed out waiting for a readlock!", name.c_str(), function ? function : "name_not_provided", line); + LogWrite(MUTEX__ERROR, 0, "Mutex", "The following functions had locks:"); + map::iterator itr; + CSStack.lock(); + for (itr = stack.begin(); itr != stack.end(); itr++){ + if (itr->second > 0 && itr->first.length() > 0) + LogWrite(MUTEX__ERROR, 0, "Mutex", "%s, number of locks = %u", itr->first.c_str(), itr->second); + } + CSStack.unlock(); + return; + } + i++; +#endif + Sleep(1); + } +} + +void Mutex::releasereadlock(const char* function, int32 line){ + //Wait for the readcount lock + CSRead.lock(); + //Lower the readcount by one, when readcount is 0 writers may start writing + readers--; + CSRead.unlock(); +#ifdef DEBUG + CSStack.lock(); + if (function){ + map::iterator itr = stack.find((string)function); + if (itr != stack.end()){ + if (--(itr->second) == 0){ + stack.erase(itr); + } + } + } + CSStack.unlock(); +#endif +} + +bool Mutex::tryreadlock(const char* function){ + //This returns true if able to instantly obtain a readlock, false if not + CSRead.lock(); + if (!writing){ + readers++; + CSRead.unlock(); + } + else { + CSRead.unlock(); + return false; + } + +#ifdef DEBUG + CSStack.lock(); + if (function) + stack[(string)function]++; + CSStack.unlock(); +#endif + + return true; +} + +void Mutex::writelock(const char* function, int32 line){ + //Wait until the writer lock becomes available, then we can be the only writer! +#ifdef DEBUG + int32 i = 0; +#endif + while (!CSWrite.trylock()){ +#ifdef DEBUG + if (i > MUTEX_TIMEOUT_MILLISECONDS){ + LogWrite(MUTEX__ERROR, 0, "Mutex", "The mutex %s called from %s at line %u timed out waiting on another writelock!", name.c_str(), function ? function : "name_not_provided", line); + LogWrite(MUTEX__ERROR, 0, "Mutex", "The following functions had locks:"); + map::iterator itr; + CSStack.lock(); + for (itr = stack.begin(); itr != stack.end(); itr++){ + if (itr->second > 0 && itr->first.length() > 0) + LogWrite(MUTEX__ERROR, 0, "Mutex", "%s, number of locks = %u", itr->first.c_str(), itr->second); + } + CSStack.unlock(); + return; + } + i++; +#endif + Sleep(1); + } + waitReaders(function, line); +#ifdef DEBUG + CSStack.lock(); + if (function) + stack[(string)function]++; + CSStack.unlock(); +#endif +} + +void Mutex::releasewritelock(const char* function, int32 line){ + //Wait for the readcount lock + CSRead.lock(); + //Readers are aloud again + writing = false; + CSRead.unlock(); + //Allow other writers to write + CSWrite.unlock(); +#ifdef DEBUG + CSStack.lock(); + if (function){ + map::iterator itr = stack.find((string)function); + if (itr != stack.end()){ + if (--(itr->second) == 0){ + stack.erase(itr); + } + } + } + CSStack.unlock(); +#endif +} + +bool Mutex::trywritelock(const char* function){ + //This returns true if able to instantly obtain a writelock, false if not + if (CSWrite.trylock()){ + CSRead.lock(); + if (readers == 0) + writing = true; + CSRead.unlock(); + if (!writing){ + CSWrite.unlock(); + return false; + } + } + else + return false; + +#ifdef DEBUG + CSStack.lock(); + if (function) + stack[(string)function]++; + CSStack.unlock(); +#endif + + return true; +} + +void Mutex::waitReaders(const char* function, int32 line) +{ + //Wait for all current readers to stop, then we can write! +#ifdef DEBUG + int32 i = 0; +#endif + CSRead.lock(); + writing = true; + CSRead.unlock(); + while (true) + { + CSRead.lock(); + if (readers == 0) + { + CSRead.unlock(); + break; + } + CSRead.unlock(); +#ifdef DEBUG + if (i > MUTEX_TIMEOUT_MILLISECONDS){ + LogWrite(MUTEX__ERROR, 0, "Mutex", "The mutex %s called from %s at line %u timed out while waiting on readers!", name.c_str(), function ? function : "name_not_provided", line); + LogWrite(MUTEX__ERROR, 0, "Mutex", "The following functions had locks:"); + map::iterator itr; + CSStack.lock(); + for (itr = stack.begin(); itr != stack.end(); itr++){ + if (itr->second > 0 && itr->first.length() > 0) + LogWrite(MUTEX__ERROR, 0, "Mutex", "%s, number of locks = %u", itr->first.c_str(), itr->second); + } + CSStack.unlock(); + return; + } + i++; +#endif + Sleep(1); + } +} + +LockMutex::LockMutex(Mutex* in_mut, bool iLock) { + mut = in_mut; + locked = iLock; + if (locked) { + mut->lock(); + } +} + +LockMutex::~LockMutex() { + if (locked) { + mut->unlock(); + } +} + +void LockMutex::unlock() { + if (locked) + mut->unlock(); + locked = false; +} + +void LockMutex::lock() { + if (!locked) + mut->lock(); + locked = true; +} + +CriticalSection::CriticalSection(int attribute){ +#ifdef WIN32 + InitializeCriticalSection(&CSMutex); +#else + pthread_mutexattr_init(&type_attribute); + switch(attribute) + { + case MUTEX_ATTRIBUTE_FAST: + pthread_mutexattr_settype(&type_attribute, PTHREAD_MUTEX_FAST_NP); + break; + case MUTEX_ATTRIBUTE_RECURSIVE: + pthread_mutexattr_settype(&type_attribute, PTHREAD_MUTEX_RECURSIVE_NP); + break; + case MUTEX_ATTRIBUTE_ERRORCHK: + pthread_mutexattr_settype(&type_attribute, PTHREAD_MUTEX_ERRORCHECK_NP); + break; + default: + LogWrite(MUTEX__DEBUG, 0, "Critical Section", "Invalid mutex attribute type! Using PTHREAD_MUTEX_FAST_NP"); + pthread_mutexattr_settype(&type_attribute, PTHREAD_MUTEX_FAST_NP); + break; + } + pthread_mutex_init(&CSMutex, &type_attribute); +#endif +} + +CriticalSection::~CriticalSection(){ +#ifdef WIN32 + DeleteCriticalSection(&CSMutex); +#else + pthread_mutex_destroy(&CSMutex); + pthread_mutexattr_destroy(&type_attribute); +#endif +} + +void CriticalSection::lock(){ + //Waits for a lock on this critical section +#ifdef WIN32 + EnterCriticalSection(&CSMutex); +#else + pthread_mutex_lock(&CSMutex); +#endif +} + +void CriticalSection::unlock(){ + //Gets rid of one of the current thread's locks on this critical section +#ifdef WIN32 + LeaveCriticalSection(&CSMutex); +#else + pthread_mutex_unlock(&CSMutex); +#endif +} + +bool CriticalSection::trylock(){ + //Returns true if able to instantly get a lock on this critical section, false if not +#ifdef WIN32 + return TryEnterCriticalSection(&CSMutex); +#else + return (pthread_mutex_trylock(&CSMutex) == 0); +#endif +} + diff --git a/EQ2/source/common/Mutex.h b/EQ2/source/common/Mutex.h new file mode 100644 index 000000000..1d4126d8f --- /dev/null +++ b/EQ2/source/common/Mutex.h @@ -0,0 +1,103 @@ +/* + EQ2Emulator: Everquest II Server Emulator + Copyright (C) 2007 EQ2EMulator Development Team (http://www.eq2emulator.net) + + This file is part of EQ2Emulator. + + EQ2Emulator is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + EQ2Emulator is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with EQ2Emulator. If not, see . +*/ +#ifndef MYMUTEX_H +#define MYMUTEX_H +#ifdef WIN32 + #include + #include +#else + #include + #include "../common/unix.h" +#endif +#include "../common/types.h" +#include +#include + +#define MUTEX_ATTRIBUTE_FAST 1 +#define MUTEX_ATTRIBUTE_RECURSIVE 2 +#define MUTEX_ATTRIBUTE_ERRORCHK 3 +#define MUTEX_TIMEOUT_MILLISECONDS 10000 + +class CriticalSection { +public: + CriticalSection(int attribute = MUTEX_ATTRIBUTE_FAST); + ~CriticalSection(); + void lock(); + void unlock(); + bool trylock(); +private: +#ifdef WIN32 + CRITICAL_SECTION CSMutex; +#else + pthread_mutex_t CSMutex; + pthread_mutexattr_t type_attribute; +#endif +}; + +class Mutex { +public: + Mutex(); + ~Mutex(); + + void lock(); + void unlock(); + bool trylock(); + + void readlock(const char* function = 0, int32 line = 0); + void releasereadlock(const char* function = 0, int32 line = 0); + bool tryreadlock(const char* function = 0); + + void writelock(const char* function = 0, int32 line = 0); + void releasewritelock(const char* function = 0, int32 line = 0); + bool trywritelock(const char* function = 0); + + void waitReaders(const char* function = 0, int32 line = 0); + + void SetName(string in_name); +private: + CriticalSection CSRead; + CriticalSection CSWrite; + CriticalSection* CSLock; + +#ifdef DEBUG //Used for debugging only + CriticalSection CSStack; + map stack; +#endif + + int readers; + bool writing; + volatile bool mlocked; + string name; +}; + + +class LockMutex { +public: + LockMutex(Mutex* in_mut, bool iLock = true); + ~LockMutex(); + void unlock(); + void lock(); +private: + bool locked; + Mutex* mut; +}; + + +#endif diff --git a/EQ2/source/common/PacketStruct.cpp b/EQ2/source/common/PacketStruct.cpp new file mode 100644 index 000000000..8a213cbba --- /dev/null +++ b/EQ2/source/common/PacketStruct.cpp @@ -0,0 +1,2507 @@ +/* + EQ2Emulator: Everquest II Server Emulator + Copyright (C) 2007 EQ2EMulator Development Team (http://www.eq2emulator.net) + + This file is part of EQ2Emulator. + + EQ2Emulator is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + EQ2Emulator is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with EQ2Emulator. If not, see . +*/ +#include "PacketStruct.h" +#include "ConfigReader.h" +#include "../common/debug.h" +#include "MiscFunctions.h" +#include "Log.h" + +#ifdef WORLD + #include "../WorldServer/Items/Items.h" + #include "../WorldServer/Player.h" +#endif + +extern ConfigReader configReader; +using namespace std; + +DataStruct::DataStruct(){ + item_size = 0; + type = 0; + type2 = 0; + length = 1; + if_set = false; + if_not_set = false; + if_not_equals = false; + if_equals = false; + is_set = false; + oversized = 0; + oversized_byte = 0; + add = false; + addType = 0; + maxArraySize = 0; + default_value = 0; +} +DataStruct::DataStruct(DataStruct* data_struct){ + type = data_struct->GetType(); + type2 = data_struct->GetType2(); + length = data_struct->GetLength(); + name = data_struct->GetName(); + array_size_variable = data_struct->array_size_variable; + default_value = data_struct->default_value; + add = true; + addType = type; + oversized = data_struct->GetOversized(); + oversized_byte = data_struct->GetOversizedByte(); + maxArraySize = data_struct->GetMaxArraySize(); + if_set = false; + if_not_set = false; + if_not_equals = false; + if_equals = false; + if(data_struct->GetIfSet()) + SetIfSetVariable(data_struct->GetIfSetVariable()); + if(data_struct->GetIfNotSet()) + SetIfNotSetVariable(data_struct->GetIfNotSetVariable()); + if (data_struct->GetIfNotEquals()) + SetIfNotEqualsVariable(data_struct->GetIfNotEqualsVariable()); + if (data_struct->GetIfEquals()) + SetIfEqualsVariable(data_struct->GetIfEqualsVariable()); + is_set = false; + item_size = 0; +} +DataStruct::DataStruct(const char* new_name, const char* new_type, int32 new_length, const char* new_type2){ + name = string(new_name); + type = 0; + type2 = 0; + SetType(new_type, &type); + if(new_type2) + SetType(new_type2, &type2); + length = new_length; + add = true; + addType = type; + if_set = false; + if_not_set = false; + is_set = false; + if_not_equals = false; + item_size = 0; +} +const char* DataStruct::GetArraySizeVariable(){ + return array_size_variable.c_str(); +} +void DataStruct::SetArraySizeVariable(const char* new_name){ + array_size_variable = string(new_name); +} +void DataStruct::SetType(const char* new_type, int8* output_type){ + if(strlen(new_type) > 3 && strncasecmp("int", new_type, 3) == 0){ + if(strncasecmp("int8", new_type, 4) == 0) + *output_type = DATA_STRUCT_INT8; + else if(strncasecmp("int16", new_type, 5) == 0) + *output_type = DATA_STRUCT_INT16; + else if(strncasecmp("int32", new_type, 5) == 0) + *output_type = DATA_STRUCT_INT32; + else if(strncasecmp("int64", new_type, 5) == 0) + *output_type = DATA_STRUCT_INT64; + } + else if(strlen(new_type) > 4 && strncasecmp("sint", new_type, 4) == 0){ + if(strncasecmp("sint8", new_type, 5) == 0) + *output_type = DATA_STRUCT_SINT8; + else if(strncasecmp("sint16", new_type, 6) == 0) + *output_type = DATA_STRUCT_SINT16; + else if(strncasecmp("sint32", new_type, 6) == 0) + *output_type = DATA_STRUCT_SINT32; + else if(strncasecmp("sint64", new_type, 6) == 0) + *output_type = DATA_STRUCT_SINT64; + } + else if(strlen(new_type) == 4 && strncasecmp("char", new_type, 4) == 0) + *output_type = DATA_STRUCT_CHAR; + else if(strlen(new_type) == 5 && strncasecmp("float", new_type, 5) == 0) + *output_type = DATA_STRUCT_FLOAT; + else if(strlen(new_type) == 6 && strncasecmp("double", new_type, 6) == 0) + *output_type = DATA_STRUCT_DOUBLE; + else if(strlen(new_type) >= 5 && strncasecmp("EQ2_", new_type, 4) == 0){ + if(strncasecmp("EQ2_8", new_type, 5) == 0) + *output_type = DATA_STRUCT_EQ2_8BIT_STRING; + else if(strncasecmp("EQ2_16", new_type, 6) == 0) + *output_type = DATA_STRUCT_EQ2_16BIT_STRING; + else if(strncasecmp("EQ2_32", new_type, 6) == 0) + *output_type = DATA_STRUCT_EQ2_32BIT_STRING; + else if(strncasecmp("EQ2_E", new_type, 5) == 0) + *output_type = DATA_STRUCT_EQUIPMENT; + else if(strncasecmp("EQ2_C", new_type, 5) == 0) + *output_type = DATA_STRUCT_COLOR; + else if(strncasecmp("EQ2_I", new_type, 5) == 0) + *output_type = DATA_STRUCT_ITEM; + } + else if(strlen(new_type) >= 5){ + if(strncasecmp("Array", new_type, 5) == 0) + *output_type = DATA_STRUCT_ARRAY; + } + else + LogWrite(PACKET__ERROR, 0, "Packet", "Invalid Type: %s", new_type); +} +DataStruct::DataStruct(const char* new_name, int32 new_length){ + name = string(new_name); + length = new_length; + if_set = false; + if_not_set = false; + is_set = false; + item_size = 0; +} +DataStruct::DataStruct(const char* new_name, int8 new_type, int32 new_length, int8 new_type2){ + name = string(new_name); + type = new_type; + length = new_length; + type2 = new_type2; + addType = type; + if_set = false; + if_not_set = false; + is_set = false; + item_size = 0; +} +void DataStruct::SetType(int8 new_type){ + type = new_type; + addType = type; +} +void DataStruct::SetMaxArraySize(int8 size){ + maxArraySize = size; +} +void DataStruct::SetOversized(int8 val){ + oversized = val; +} +void DataStruct::SetDefaultValue(int8 new_val){ + default_value = new_val; +} +void DataStruct::SetName(const char* new_name){ + name = string(new_name); +} +void DataStruct::SetLength(int32 new_length){ + length = new_length; +} +void DataStruct::SetOversizedByte(int8 val){ + oversized_byte = val; +} +void DataStruct::SetItemSize(int32 val){ + item_size = val; +} +void DataStruct::SetIfEqualsVariable(const char* variable){ + if(variable){ + if_equals = true; + if_equals_variable = string(variable); + } + else + if_equals = false; +} +void DataStruct::SetIfNotEqualsVariable(const char* variable){ + if(variable){ + if_not_equals = true; + if_not_equals_variable = string(variable); + } + else + if_not_equals = false; +} +void DataStruct::SetIfSetVariable(const char* variable){ + if(variable){ + if_set = true; + if_set_variable = string(variable); + } + else + if_set = false; +} +void DataStruct::SetIfNotSetVariable(const char* variable){ + if(variable){ + if_not_set = true; + if_not_set_variable = string(variable); + } + else + if_not_set = false; +} +void DataStruct::SetIsSet(bool val){ + is_set = val; +} +bool DataStruct::IsSet(){ + return is_set; +} +int32 DataStruct::GetItemSize(){ + return item_size; +} +bool DataStruct::GetIfSet(){ + return if_set; +} +const char* DataStruct::GetIfSetVariable(){ + if(if_set_variable.length() > 0) + return if_set_variable.c_str(); + return 0; +} +bool DataStruct::GetIfNotSet(){ + return if_not_set; +} +const char* DataStruct::GetIfNotSetVariable(){ + if(if_not_set_variable.length() > 0) + return if_not_set_variable.c_str(); + return 0; +} +bool DataStruct::GetIfEquals(){ + return if_equals; +} +const char* DataStruct::GetIfEqualsVariable(){ + if(if_equals_variable.length() > 0) + return if_equals_variable.c_str(); + return 0; +} +bool DataStruct::GetIfNotEquals(){ + return if_not_equals; +} +const char* DataStruct::GetIfNotEqualsVariable(){ + if(if_not_equals_variable.length() > 0) + return if_not_equals_variable.c_str(); + return 0; +} +int8 DataStruct::GetDefaultValue(){ + return default_value; +} +int8 DataStruct::GetType(){ + return type; +} +int8 DataStruct::GetType2(){ + return type2; +} +const char* DataStruct::GetName(){ + return name.c_str(); +} +int8 DataStruct::GetOversized(){ + return oversized; +} +int8 DataStruct::GetOversizedByte(){ + return oversized_byte; +} +int8 DataStruct::GetMaxArraySize(){ + return maxArraySize; +} +int32 DataStruct::GetLength(){ + return length; +} +string DataStruct::GetStringName(){ + return name; +} +bool DataStruct::AddToStruct(){ + return add; +} +void DataStruct::SetAddToStruct(bool val){ + add = val; +} +int8 DataStruct::GetAddType(){ + return addType; +} +void DataStruct::SetAddType(int8 new_type){ + addType = new_type; +} +int32 DataStruct::GetDataSizeInBytes(){ + int32 ret = 0; + switch (type){ + case DATA_STRUCT_INT8: + ret = length * sizeof(int8); + break; + case DATA_STRUCT_INT16: + ret = length * sizeof(int16); + break; + case DATA_STRUCT_INT32: + ret = length * sizeof(int32); + break; + case DATA_STRUCT_INT64: + ret = length * sizeof(int64); + break; + case DATA_STRUCT_SINT8: + ret = length * sizeof(sint8); + break; + case DATA_STRUCT_SINT16: + ret = length * sizeof(sint16); + break; + case DATA_STRUCT_SINT32: + ret = length * sizeof(sint32); + break; + case DATA_STRUCT_SINT64: + ret = length * sizeof(sint64); + break; + case DATA_STRUCT_FLOAT: + ret = length * sizeof(float); + break; + case DATA_STRUCT_DOUBLE: + ret = length * sizeof(double); + break; + case DATA_STRUCT_ARRAY: + // Array elements won't have a size so get out now to avoid the warning. + break; + default: + LogWrite(PACKET__WARNING, 0, "DataStruct", "Tried retrieving a data size from an unsupported data struct type in GetDataSizeInBytes()"); + break; + } + return ret; +} + +PacketStruct::PacketStruct(PacketStruct* packet, int16 in_client_version){ + parent = packet->parent; + client_version = in_client_version; + vector::iterator itr2; + name = packet->name; + + for(itr2=packet->structs.begin();itr2!=packet->structs.end();itr2++) { + add(new DataStruct(*itr2)); + } + + sub_packet = false; + opcode = packet->opcode; + version = packet->version; + opcode_type = packet->opcode_type; + sub_packet_size = 1; + + + addPacketArrays(packet); +} + +PacketStruct::PacketStruct(){ + parent = 0; + opcode = OP_Unknown; +} + +PacketStruct::PacketStruct(PacketStruct* packet, bool sub){ + vector::iterator itr2; + + for(itr2=packet->structs.begin();itr2!=packet->structs.end();itr2++) { + add(new DataStruct(*itr2)); + } + sub_packet = sub; + opcode = packet->opcode; + version = packet->version; + opcode_type = packet->opcode_type; + name = packet->name; + sub_packet_size = 0; + parent = 0; +} +PacketStruct::~PacketStruct(){ + deleteDataStructs(&structs); + deleteDataStructs(&orig_structs); + deletePacketArrays(this); + struct_map.clear(); + struct_data.clear(); +} + +void PacketStruct::deleteDataStructs(vector* data_structs){ + DataStruct* data = 0; + vector::iterator itr; + for(itr=data_structs->begin();itr!=data_structs->end();itr++) { + data = *itr; + void* ptr = GetStructPointer(data); + switch(data->GetType()){ + case DATA_STRUCT_EQ2_8BIT_STRING:{ + EQ2_8BitString* real_ptr = (EQ2_8BitString*)ptr; + safe_delete(real_ptr); + break; + } + case DATA_STRUCT_EQ2_16BIT_STRING:{ + EQ2_16BitString* real_ptr = (EQ2_16BitString*)ptr; + safe_delete(real_ptr); + break; + } + case DATA_STRUCT_EQ2_32BIT_STRING:{ + EQ2_32BitString* real_ptr = (EQ2_32BitString*)ptr; + safe_delete(real_ptr); + break; + } + case DATA_STRUCT_EQUIPMENT:{ + EQ2_EquipmentItem* real_ptr = (EQ2_EquipmentItem*)ptr; + safe_delete_array(real_ptr); + break; + } + case DATA_STRUCT_DOUBLE:{ + double* real_ptr = (double*)ptr; + safe_delete_array(real_ptr); + break; + } + case DATA_STRUCT_FLOAT:{ + float* real_ptr = (float*)ptr; + safe_delete_array(real_ptr); + break; + } + case DATA_STRUCT_INT8:{ + int8* real_ptr = (int8*)ptr; + safe_delete_array(real_ptr); + break; + } + case DATA_STRUCT_INT16:{ + int16* real_ptr = (int16*)ptr; + safe_delete_array(real_ptr); + break; + } + case DATA_STRUCT_INT32:{ + int32* real_ptr = (int32*)ptr; + safe_delete_array(real_ptr); + break; + } + case DATA_STRUCT_INT64:{ + int64* real_ptr = (int64*)ptr; + safe_delete_array(real_ptr); + break; + } + case DATA_STRUCT_SINT8:{ + sint8* real_ptr = (sint8*)ptr; + safe_delete_array(real_ptr); + break; + } + case DATA_STRUCT_SINT16:{ + sint16* real_ptr = (sint16*)ptr; + safe_delete_array(real_ptr); + break; + } + case DATA_STRUCT_SINT32:{ + sint32* real_ptr = (sint32*)ptr; + safe_delete_array(real_ptr); + break; + } + case DATA_STRUCT_SINT64:{ + sint64* real_ptr = (sint64*)ptr; + safe_delete_array(real_ptr); + break; + } + case DATA_STRUCT_ITEM:{ + uchar* real_ptr = (uchar*)ptr; + safe_delete_array(real_ptr); + break; + } + case DATA_STRUCT_CHAR:{ + char* real_ptr = (char*)ptr; + safe_delete_array(real_ptr); + break; + } + case DATA_STRUCT_COLOR:{ + EQ2_Color* real_ptr = (EQ2_Color*)ptr; + safe_delete_array(real_ptr); + break; + } + } + ptr = 0; + safe_delete(data); + } +} +void PacketStruct::deletePacketArrays(PacketStruct* packet){ + if(!packet) + return; + vector::iterator itr; + + for(itr=packet->arrays.begin();itr!=packet->arrays.end();itr++) + safe_delete(*itr); + packet->arrays.clear(); + + for (itr = packet->orig_packets.begin(); itr != packet->orig_packets.end(); itr++) + safe_delete(*itr); + packet->orig_packets.clear(); +} + +void PacketStruct::renameSubstructArray(const char* substruct, int32 index){ + vector::iterator itr; + char tmp[10] = {0}; + sprintf(tmp, "%i", index); + for(itr=arrays.begin();itr!=arrays.end();itr++) { + (*itr)->SetName(string(substruct).append("_").append((*itr)->GetName()).append("_").append(tmp).c_str()); + } +} + +void PacketStruct::addPacketArrays(PacketStruct* packet){ + if(!packet) + return; + vector::iterator itr; + + for(itr=packet->arrays.begin();itr!=packet->arrays.end();itr++) { + PacketStruct* tmp = new PacketStruct(*itr, true); + tmp->addPacketArrays(*itr); + add(tmp); + } +} + +bool PacketStruct::IsStringValueType(string in_name, int32 index){ + DataStruct* data = findStruct(in_name.c_str(), index); + switch(data->GetType()){ + case DATA_STRUCT_CHAR: + case DATA_STRUCT_EQ2_8BIT_STRING: + case DATA_STRUCT_EQ2_16BIT_STRING: + case DATA_STRUCT_EQ2_32BIT_STRING: + return true; + } + return false; +} + +bool PacketStruct::IsColorValueType(string in_name, int32 index){ + DataStruct* data = findStruct(in_name.c_str(), index); + if(data->GetType() == DATA_STRUCT_COLOR) + return true; + else + return false; +} +void PacketStruct::setColor(DataStruct* data, int8 red, int8 green, int8 blue, int32 index = 0){ + if(data && data->GetType() == DATA_STRUCT_COLOR){ + EQ2_Color* color = (EQ2_Color*)GetStructPointer(data); + color[index].blue = blue; + color[index].red = red; + color[index].green = green; + if(blue >0 || green > 0 || red > 0) + data->SetIsSet(true); + } +} +void PacketStruct::setEquipment(DataStruct* data, int16 type, int8 c_red, int8 c_blue, int8 c_green, int8 h_red, int8 h_blue, int8 h_green, int32 index){ + if(data){ + EQ2_EquipmentItem* equipment = (EQ2_EquipmentItem*)GetStructPointer(data); + EQ2_Color* color = (EQ2_Color*)&equipment[index].color; + EQ2_Color* highlight = (EQ2_Color*)&equipment[index].highlight; + equipment[index].type = type; + color->blue = c_blue; + color->red = c_red; + color->green = c_green; + highlight->blue = h_blue; + highlight->red = h_red; + highlight->green = h_green; + if(c_red > 0 || c_blue > 0 || c_green > 0 || h_red > 0 || h_blue > 0 || h_green > 0) + data->SetIsSet(true); + } +} +void PacketStruct::add(PacketStruct* packet_struct){ + packet_struct->parent = this; + arrays.push_back(packet_struct); +} +const char* PacketStruct::GetOpcodeType(){ + return opcode_type.c_str(); +} + +void PacketStruct::SetOpcodeType(const char* in_type){ + if(in_type) + opcode_type = string(in_type); + else + opcode_type = string(""); +} + +void PacketStruct::setDataType(DataStruct* data_struct, sint8 data, int32 index){ + if(data_struct){ + sint8* ptr = (sint8*)GetStructPointer(data_struct); + ptr[index] = data; + if(data != 0 && data != -1) + data_struct->SetIsSet(true); + } +} +void PacketStruct::setDataType(DataStruct* data_struct, sint16 data, int32 index){ + if(data_struct){ + sint16* ptr = (sint16*)GetStructPointer(data_struct); + ptr[index] = data; + if(data != 0 && data != -1) + data_struct->SetIsSet(true); + } +} +void PacketStruct::setDataType(DataStruct* data_struct, sint32 data, int32 index){ + if(data_struct){ + sint32* ptr = (sint32*)GetStructPointer(data_struct); + ptr[index] = data; + if(data != 0 && data != -1) + data_struct->SetIsSet(true); + } +} +void PacketStruct::setDataType(DataStruct* data_struct, sint64 data, int32 index){ + if(data_struct){ + sint64* ptr = (sint64*)GetStructPointer(data_struct); + ptr[index] = data; + if(data > 0) + data_struct->SetIsSet(true); + } +} +void PacketStruct::setDataType(DataStruct* data_struct, char data, int32 index){ + if(data_struct){ + char* ptr = (char*)GetStructPointer(data_struct); + ptr[index] = data; + if(data > 0) + data_struct->SetIsSet(true); + } +} +void PacketStruct::setDataType(DataStruct* data_struct, int8 data, int32 index){ + if(data_struct){ + int8* ptr = (int8*)GetStructPointer(data_struct); + ptr[index] = data; + if(data > 0) + data_struct->SetIsSet(true); + } +} +void PacketStruct::setDataType(DataStruct* data_struct, int16 data, int32 index){ + if(data_struct){ + int16* ptr = (int16*)GetStructPointer(data_struct); + ptr[index] = data; + if(data > 0) + data_struct->SetIsSet(true); + } +} +void PacketStruct::setDataType(DataStruct* data_struct, int32 data, int32 index){ + if(data_struct){ + int32* ptr = (int32*)GetStructPointer(data_struct); + ptr[index] = data; + if(data > 0) + data_struct->SetIsSet(true); + } +} +void PacketStruct::setDataType(DataStruct* data_struct, int64 data, int32 index){ + if(data_struct){ + int64* ptr = (int64*)GetStructPointer(data_struct); + ptr[index] = data; + if(data > 0) + data_struct->SetIsSet(true); + } +} +void PacketStruct::setDataType(DataStruct* data_struct, float data, int32 index){ + if(data_struct){ + float* ptr = (float*)GetStructPointer(data_struct); + ptr[index] = data; + if(data > 0) + data_struct->SetIsSet(true); + } +} +void PacketStruct::setDataType(DataStruct* data_struct, double data, int32 index){ + if(data_struct){ + double* ptr = (double*)GetStructPointer(data_struct); + ptr[index] = data; + if(data > 0) + data_struct->SetIsSet(true); + } +} +void PacketStruct::setData(DataStruct* data_struct, EQ2_8BitString* input_string, int32 index, bool use_second_type){ + if(data_struct){ + EQ2_8BitString* tmp = (EQ2_8BitString*)GetStructPointer(data_struct); + tmp->data = input_string->data; + tmp->size = input_string->data.length(); + if(input_string->data.length() > 0) + data_struct->SetIsSet(true); + } +} +void PacketStruct::setData(DataStruct* data_struct, EQ2_16BitString* input_string, int32 index, bool use_second_type){ + if(data_struct){ + EQ2_16BitString* tmp = (EQ2_16BitString*)GetStructPointer(data_struct); + tmp->data = input_string->data; + tmp->size = input_string->data.length(); + if(input_string->data.length() > 0) + data_struct->SetIsSet(true); + } +} +void PacketStruct::setData(DataStruct* data_struct, EQ2_32BitString* input_string, int32 index, bool use_second_type){ + if(data_struct){ + EQ2_32BitString* tmp = (EQ2_32BitString*)GetStructPointer(data_struct); + tmp->data = input_string->data; + tmp->size = input_string->data.length(); + if(input_string->data.length() > 0) + data_struct->SetIsSet(true); + } +} +void PacketStruct::add(DataStruct* data){ + structs.push_back(data); + struct_map[data->GetStringName()] = data; + switch(data->GetType()){ + case DATA_STRUCT_INT8:{ + struct_data[data] = new int8[data->GetLength()]; + int8* ptr = (int8*)GetStructPointer(data); + if(data->GetLength() > 1){ + int8 default_val = data->GetDefaultValue(); + memset(ptr, default_val, data->GetLength()*sizeof(int8)); + } + else + ptr[0] = 0; + break; + } + case DATA_STRUCT_INT16:{ + struct_data[data] = new int16[data->GetLength()]; + int16* ptr = (int16*)GetStructPointer(data); + if(data->GetLength() > 1){ + int8 default_val = data->GetDefaultValue(); + memset(ptr, default_val, data->GetLength()*sizeof(int16)); + } + else + ptr[0] = 0; + break; + } + case DATA_STRUCT_INT32:{ + struct_data[data] = new int32[data->GetLength()]; + int32* ptr = (int32*)GetStructPointer(data); + if(data->GetLength() > 1){ + int8 default_val = data->GetDefaultValue(); + memset(ptr, default_val, data->GetLength()*sizeof(int32)); + } + else + ptr[0] = 0; + break; + } + case DATA_STRUCT_INT64:{ + struct_data[data] = new int64[data->GetLength()]; + int64* ptr = (int64*)GetStructPointer(data); + if(data->GetLength() > 1){ + int8 default_val = data->GetDefaultValue(); + memset(ptr, default_val, data->GetLength()*sizeof(int64)); + } + else + ptr[0] = 0; + break; + } + case DATA_STRUCT_SINT8:{ + struct_data[data] = new sint8[data->GetLength()]; + sint8* ptr = (sint8*)GetStructPointer(data); + if(data->GetLength() > 1) + memset(ptr, 0, data->GetLength()*sizeof(sint8)); + else + ptr[0] = 0; + break; + } + case DATA_STRUCT_SINT16:{ + struct_data[data] = new sint16[data->GetLength()]; + sint16* ptr = (sint16*)GetStructPointer(data); + if(data->GetLength() > 1) + memset(ptr, 0, data->GetLength()*sizeof(sint16)); + else + ptr[0] = 0; + break; + } + case DATA_STRUCT_SINT32:{ + struct_data[data] = new sint32[data->GetLength()]; + sint32* ptr = (sint32*)GetStructPointer(data); + if(data->GetLength() > 1) + memset(ptr, 0, data->GetLength()*sizeof(sint32)); + else + ptr[0] = 0; + break; + } + case DATA_STRUCT_SINT64:{ + struct_data[data] = new sint64[data->GetLength()]; + sint64* ptr = (sint64*)GetStructPointer(data); + if(data->GetLength() > 1) + memset(ptr, 0, data->GetLength()*sizeof(sint64)); + else + ptr[0] = 0; + break; + } + case DATA_STRUCT_CHAR:{ + struct_data[data] = new char[data->GetLength()]; + char* ptr = (char*)GetStructPointer(data); + if(data->GetLength() > 1) + memset(ptr, 0, data->GetLength()*sizeof(char)); + else + ptr[0] = 0; + break; + } + case DATA_STRUCT_FLOAT:{ + struct_data[data] = new float[data->GetLength()]; + float* ptr = (float*)GetStructPointer(data); + if(data->GetLength() > 1) + memset(ptr, 0, data->GetLength()*sizeof(float)); + else + ptr[0] = 0; + break; + } + case DATA_STRUCT_DOUBLE:{ + struct_data[data] = new double[data->GetLength()]; + double* ptr = (double*)GetStructPointer(data); + if(data->GetLength() > 1) + memset(ptr, 0, data->GetLength()*sizeof(double)); + else + ptr[0] = 0; + break; + } + case DATA_STRUCT_ARRAY:{ + data->SetLength(0); + break; + } + case DATA_STRUCT_EQ2_8BIT_STRING:{ + string name2 = data->GetStringName(); + for(int32 i=1;iGetLength();i++){ + DataStruct* new_data = new DataStruct(data); + char blah[10] = {0}; + sprintf(blah,"%i",i); + name2.append("_").append(blah); + new_data->SetName(name2.c_str()); + new_data->SetLength(1); + EQ2_8BitString* tmp = new EQ2_8BitString; + tmp->size = 0; + struct_data[new_data] = tmp; + structs.push_back(new_data); + } + data->SetLength(1); + EQ2_8BitString* tmp = new EQ2_8BitString; + tmp->size = 0; + struct_data[data] = tmp; + break; + } + case DATA_STRUCT_EQ2_16BIT_STRING:{ + string name2 = data->GetStringName(); + for(int32 i=1;iGetLength();i++){ + DataStruct* new_data = new DataStruct(data); + char blah[10] = {0}; + sprintf(blah,"%i",i); + name2.append("_").append(blah); + new_data->SetName(name2.c_str()); + new_data->SetLength(1); + EQ2_16BitString* tmp = new EQ2_16BitString; + tmp->size = 0; + struct_data[new_data] = tmp; + structs.push_back(new_data); + } + data->SetLength(1); + EQ2_16BitString* tmp = new EQ2_16BitString; + tmp->size = 0; + struct_data[data] = tmp; + break; + } + case DATA_STRUCT_EQ2_32BIT_STRING:{ + string name2 = data->GetStringName(); + for(int32 i=1;iGetLength();i++){ + DataStruct* new_data = new DataStruct(data); + char blah[10] = {0}; + sprintf(blah,"%i",i); + name2.append("_").append(blah); + new_data->SetName(name2.c_str()); + new_data->SetLength(1); + EQ2_32BitString* tmp = new EQ2_32BitString; + tmp->size = 0; + struct_data[new_data] = tmp; + structs.push_back(new_data); + } + data->SetLength(1); + EQ2_32BitString* tmp = new EQ2_32BitString; + tmp->size = 0; + struct_data[data] = tmp; + break; + } + case DATA_STRUCT_COLOR:{ + struct_data[data] = new EQ2_Color[data->GetLength()]; + EQ2_Color* ptr = (EQ2_Color*)GetStructPointer(data); + for(int16 i=0;iGetLength();i++){ + ptr[i].red = 0; + ptr[i].blue = 0; + ptr[i].green = 0; + } + break; + } + case DATA_STRUCT_EQUIPMENT:{ + struct_data[data] = new EQ2_EquipmentItem[data->GetLength()]; + EQ2_EquipmentItem* ptr = (EQ2_EquipmentItem*)GetStructPointer(data); + for(int16 i=0;iGetLength();i++){ + memset(&ptr[i].color, 0, sizeof(ptr[i].color)); + memset(&ptr[i].highlight, 0, sizeof(ptr[i].highlight)); + ptr[i].type = 0; + } + break; + } + case DATA_STRUCT_ITEM:{ + struct_data[data] = new uchar[10000]; + char* ptr = (char*)GetStructPointer(data); + memset(ptr, 0, 10000); + break; + } + } +} +void PacketStruct::remove(DataStruct* data){ + vector::iterator itr; + for(itr=structs.begin();itr!=structs.end();itr++) { + if(data == (*itr)){ + structs.erase(itr); + safe_delete(data); + return; + } + } +} +DataStruct* PacketStruct::findStruct(const char* name, int32 index){ + return findStruct(name, index, index); +} + +DataStruct* PacketStruct::findStruct(const char* name, int32 index1, int32 index2){ + DataStruct* data = 0; + + if(struct_map.count(string(name)) > 0){ + data = struct_map[string(name)]; + if(data && index2 < data->GetLength()) + return data; + } + vector::iterator itr; + + PacketStruct* packet = 0; + vector::iterator itr2; + string name2 = string(name); + if(index1 < 0xFFFF){ + char blah[10] = {0}; + sprintf(blah,"_%i",index1); + name2.append(blah); + } + if(struct_map.count(name2) > 0){ + data = struct_map[name2]; + if(data && index2 < data->GetLength()) + return data; + } + for(itr2=arrays.begin();itr2!=arrays.end();itr2++) { + packet = *itr2; + data = packet->findStruct(name,index1, index2); + if(data != 0) + return data; + } + return 0; +} +void PacketStruct::remove(const char* name){ + DataStruct* data = 0; + vector::iterator itr; + for(itr=structs.begin();itr!=structs.end();itr++) { + data = *itr; + if(strcmp(name, data->GetName()) == 0){ + structs.erase(itr); + safe_delete(data); + return; + } + } +} +string* PacketStruct::serializeString(){ + serializePacket(); + return getDataString(); +} +void PacketStruct::setSmallString(DataStruct* data_struct, const char* text, int32 index){ + EQ2_8BitString* string_data = new EQ2_8BitString; + string_data->data = string(text); + string_data->size = string_data->data.length(); + setData(data_struct, string_data, index); + safe_delete(string_data); +} +void PacketStruct::setMediumString(DataStruct* data_struct, const char* text, int32 index){ + EQ2_16BitString* string_data = new EQ2_16BitString; + string_data->data = string(text); + string_data->size = string_data->data.length(); + setData(data_struct, string_data, index); + safe_delete(string_data); +} +void PacketStruct::setLargeString(DataStruct* data_struct, const char* text, int32 index){ + EQ2_32BitString* string_data = new EQ2_32BitString; + string_data->data = string(text); + string_data->size = string_data->data.length(); + setData(data_struct, string_data, index); + safe_delete(string_data); +} +void PacketStruct::setSmallStringByName(const char* name, const char* text, int32 index){ + setSmallString(findStruct(name, index), text, index); +} +void PacketStruct::setMediumStringByName(const char* name, const char* text, int32 index){ + setMediumString(findStruct(name, index), text, index); +} +void PacketStruct::setLargeStringByName(const char* name, const char* text, int32 index){ + setLargeString(findStruct(name, index), text, index); +} + +bool PacketStruct::GetVariableIsSet(const char* name){ + DataStruct* ds2 = findStruct(name, 0); + if(!ds2 || !ds2->IsSet()) + return false; + return true; +} + +bool PacketStruct::GetVariableIsNotSet(const char* name){ + DataStruct* ds2 = findStruct(name, 0); + if(ds2 && ds2->IsSet()) + return false; + return true; +} + +bool PacketStruct::LoadPacketData(uchar* data, int32 data_len){ + loadedSuccessfully = true; + DataStruct* data_struct = 0; + try{ + InitializeLoadData(data, data_len); + vector::iterator itr; + + for(itr=structs.begin();itr!=structs.end();itr++) { + data_struct = *itr; + if(!data_struct->AddToStruct()) + continue; + if(data_struct->GetIfSet() && data_struct->GetIfSetVariable()){ + string varname = string(data_struct->GetIfSetVariable()); + if(varname.find(",") < 0xFFFFFFFF){ + vector* varnames = SplitString(varname, ','); + if(varnames){ + bool should_continue = true; + for(int32 i=0;isize();i++){ + if(GetVariableIsSet(varnames->at(i).c_str())){ + should_continue = false; + break; + } + } + safe_delete(varnames); + if(should_continue) + continue; + } + } + else{ + // Check to see if the variable contains %i, if it does assume we are in an array + // and get the current index from the end of the data struct's name + char name[250] = {0}; + if (varname.find("%i") < 0xFFFFFFFF) { + vector* varnames = SplitString(data_struct->GetName(), '_'); + int index = atoi(varnames->at(varnames->size() - 1).c_str()); + sprintf(name, varname.c_str(), index); + } + else + strcpy(name, varname.c_str()); + + if(!GetVariableIsSet(name)) + continue; + } + } + if(data_struct->GetIfNotSet() && data_struct->GetIfNotSetVariable()){ + string varname = string(data_struct->GetIfNotSetVariable()); + if(varname.find(",") < 0xFFFFFFFF){ + vector* varnames = SplitString(varname, ','); + if(varnames){ + bool should_continue = false; + for(int32 i=0;isize();i++){ + if(!GetVariableIsNotSet(varnames->at(i).c_str())){ + should_continue = true; + break; + } + } + safe_delete(varnames); + if(should_continue) + continue; + } + } + else{ + // Check to see if the variable contains %i, if it does assume we are in an array + // and get the current index from the end of the data struct's name + char name[250] = {0}; + if (varname.find("%i") < 0xFFFFFFFF) { + vector* varnames = SplitString(data_struct->GetName(), '_'); + int index = atoi(varnames->at(varnames->size() - 1).c_str()); + sprintf(name, varname.c_str(), index); + } + else + strcpy(name, varname.c_str()); + + if(!GetVariableIsNotSet(name)) + continue; + } + } + // Quick implementaion of IfVariableNotEquals + // probably not what it was intended for as it currently just checks to see if the given variable equals 1 + // should probably change it so you can define what the variable should or shouldn't equal + // + // ie: IfVariableNotEquals="stat_type_%i=1" + // would be a check to make sure that stat_type_%i does not equal 1 and if it does exclude this element + if (data_struct->GetIfNotEquals() && data_struct->GetIfNotEqualsVariable()) { + // Get the variable name + string varname = string(data_struct->GetIfNotEqualsVariable()); + char name[250] = {0}; + // Check to see if the variable has %i in the name, if it does assume we are in an array and get the current + // index and replace it + if (varname.find("%i") < 0xFFFFFFFF) { + // Get the current index by getting the number at the end of the name + vector* varnames = SplitString(data_struct->GetName(), '_'); + int index = atoi(varnames->at(varnames->size() - 1).c_str()); + + string substr = "stat_type"; + if (strncmp(varname.c_str(), substr.c_str(), strlen(substr.c_str())) == 0) { + // adorn_stat_subtype 18 chars + string temp = varname.substr(12); + char temp2[20]={0}; + int index2 = atoi(temp.c_str()); + itoa(index2, temp2, 10); + varname = varname.substr(0, 12).append(temp2).append("_%i"); + } + sprintf(name, varname.c_str(), index); + safe_delete(varnames); + } + else + strcpy(name, varname.c_str()); + + // Get the data for the variable + int16 value = 0; + DataStruct* data_struct2 = findStruct(name, 0); + value = getType_int16(data_struct2); + // Hack for items as it is the only struct that currently uses IfVariableNotEquals + if (value == 1) + continue; + } + // copy and paste of the code above for IfEquals + if (data_struct->GetIfEquals() && data_struct->GetIfEqualsVariable()) { + // Get the variable name + string varname = string(data_struct->GetIfEqualsVariable()); + char name[250] = {0}; + // Check to see if the variable has %i in the name, if it does assume we are in an array and get the current + // index and replace it + if (varname.find("%i") < 0xFFFFFFFF) { + // Get the current index by getting the number at the end of the name + vector* varnames = SplitString(data_struct->GetName(), '_'); + int index = atoi(varnames->at(varnames->size() - 1).c_str()); + + string substr = "stat_type"; + if (strncmp(varname.c_str(), substr.c_str(), strlen(substr.c_str())) == 0) { + // adorn_stat_subtype 18 chars + string temp = varname.substr(12); + char temp2[20]={0}; + int index2 = atoi(temp.c_str()); + itoa(index2, temp2, 10); + varname = varname.substr(0, 12).append(temp2).append("_%i"); + } + sprintf(name, varname.c_str(), index); + safe_delete(varnames); + } + else + strcpy(name, varname.c_str()); + + // Get the data for the variable + int16 value = 0; + DataStruct* data_struct2 = findStruct(name, 0); + value = getType_int16(data_struct2); + // Hack for items as it is the only struct that currently uses IfVariableNotEquals + if (value != 1) + continue; + } + + // The following is tailored to items as they are the only structs that use type2 + // if more type2's are needed outside of the item stats array we need to think up an element + // to determine when to use type2 over type. + // Added checks for set stats and adorn stats - Zcoretri + bool useType2 = false; + if (data_struct->GetType2() > 0) { + int16 type = 0; + char name[250] = {0}; + vector* varnames = SplitString(data_struct->GetName(), '_'); + string struct_name = data_struct->GetName(); + if (struct_name.find("set") < 0xFFFFFFFF) { + string tmp = "set_stat_type"; + struct_name.replace(0, 9, tmp); + sprintf(name, "%s", struct_name.c_str()); + } + else if (struct_name.find("adorn") < 0xFFFFFFFF) { + string tmp = "adorn_stat_type"; + struct_name.replace(0, 9, tmp); + sprintf(name, "%s", struct_name.c_str()); + } + else { + // set name to stat_type_# (where # is the current index of the array we are in) + sprintf(name, "%s_%s", "stat_type", varnames->at(varnames->size()-1).c_str()); + } + // Look up the value for stat_type + DataStruct* data_struct2 = findStruct(name, 0); + type = getType_int16(data_struct2); + // If stat_type == 6 we use a float, else we use sint16 + if (type != 6) + useType2 = true; + safe_delete(varnames); + } + StructLoadData(data_struct, GetStructPointer(data_struct), data_struct->GetLength(), useType2); + } + } + catch(...){ + loadedSuccessfully = false; + } + return loadedSuccessfully; +} +void PacketStruct::StructLoadData(DataStruct* data_struct, void* data, int32 len, bool useType2){ + int8 type = 0; + if (useType2) { + type = data_struct->GetType2(); + // Need to change the data the struct expects to type2 + data_struct->SetType(type); + LogWrite(PACKET__DEBUG, 7, "Items", "Using type2 = %i", type); + } + else + type = data_struct->GetType(); + + switch(type){ + case DATA_STRUCT_INT8: + LoadData((int8*)data, len); + data_struct->SetIsSet(*((int8*)data) > 0); + break; + case DATA_STRUCT_INT16: + if(data_struct->GetOversized() > 0){ + LoadData((int8*)data, len); + if(getType_int16(data_struct) == data_struct->GetOversizedByte()){ + LoadData((int16*)data, len); + } + } + else{ + LoadData((int16*)data, len); + } + data_struct->SetIsSet(*((int16*)data) > 0); + break; + case DATA_STRUCT_INT32: + if(data_struct->GetOversized() > 0){ + LoadData((int8*)data, len); + if(getType_int32(data_struct) == data_struct->GetOversizedByte()){ + LoadData((int32*)data, len); + } + else + LoadData((int8*)data, len); + } + else{ + LoadData((int32*)data, len); + } + data_struct->SetIsSet(*((int32*)data) > 0); + break; + case DATA_STRUCT_INT64: + LoadData((int64*)data, len); + data_struct->SetIsSet(*((int64*)data) > 0); + break; + case DATA_STRUCT_SINT8: + LoadData((sint8*)data, len); + data_struct->SetIsSet(*((sint8*)data) > 0); + break; + case DATA_STRUCT_SINT16: + if(data_struct->GetOversized() > 0){ + LoadData((sint8*)data, len); + sint8 val = (sint8)getType_sint16(data_struct); + if(val < 0) //necessary because when using memcpy from a smaller data type to a larger one, the sign is lost + setData(data_struct, val, 0); + if(getType_sint16(data_struct) == data_struct->GetOversizedByte()) + LoadData((sint16*)data, len); + } + else + LoadData((sint16*)data, len); + data_struct->SetIsSet(*((sint16*)data) > 0); + break; + case DATA_STRUCT_SINT32: + LoadData((sint32*)data, len); + data_struct->SetIsSet(*((sint32*)data) > 0); + break; + case DATA_STRUCT_SINT64: + LoadData((sint64*)data, len); + data_struct->SetIsSet(*((sint64*)data) > 0); + break; + case DATA_STRUCT_CHAR: + LoadData((char*)data, len); + data_struct->SetIsSet(data > 0); + break; + case DATA_STRUCT_FLOAT: + LoadData((float*)data, len); + data_struct->SetIsSet(*((float*)data) > 0); + break; + case DATA_STRUCT_DOUBLE: + LoadData((double*)data, len); + data_struct->SetIsSet(*((double*)data) > 0); + break; + case DATA_STRUCT_EQ2_8BIT_STRING:{ + LoadDataString((EQ2_8BitString*)data); + data_struct->SetIsSet(((EQ2_8BitString*)data)->data.length() > 0); + break; + } + case DATA_STRUCT_EQ2_16BIT_STRING:{ + LoadDataString((EQ2_16BitString*)data); + data_struct->SetIsSet(((EQ2_16BitString*)data)->data.length() > 0); + break; + } + case DATA_STRUCT_EQ2_32BIT_STRING:{ + LoadDataString((EQ2_32BitString*)data); + data_struct->SetIsSet(((EQ2_32BitString*)data)->data.length() > 0); + break; + } + case DATA_STRUCT_COLOR:{ + if(strcmp(GetName(),"CreateCharacter") == 0 || strcmp(GetName(), "WS_SubmitCharCust") == 0) + CreateEQ2Color((EQ2_Color*)data); + else + LoadData((EQ2_Color*)data, len); + break; + } + case DATA_STRUCT_EQUIPMENT:{ + LoadData((EQ2_EquipmentItem*)data); + break; + } + case DATA_STRUCT_ARRAY:{ + int32 size = GetArraySize(data_struct,0); + if(size > 0xFFFF){ + LogWrite(PACKET__WARNING, 1, "Packet", "Possible corrupt packet while loading struct array, orig array size: %u", size); + size = 1; + } + PacketStruct* ps = GetPacketStructByName(data_struct->GetName()); + if(ps && ps->GetSubPacketSize() != size){ + if(data_struct->GetMaxArraySize() > 0 && size > data_struct->GetMaxArraySize()) + size = data_struct->GetMaxArraySize(); + ps->reAddAll(size); + } + if(ps && size > 0){ + //for(int i=0;i 0;i++){ + ps->LoadPacketData(GetLoadBuffer()+GetLoadPos(), GetLoadLen()-GetLoadPos()); + SetLoadPos(GetLoadPos() + ps->GetLoadPos()); + //} + } + break; + } + default:{ + data_struct->SetIsSet(false); + } + } +} +PacketStruct* PacketStruct::GetPacketStructByName(const char* name){ + PacketStruct* ps = 0; + vector::iterator itr; + for(itr=arrays.begin();itr!=arrays.end();itr++) { + ps = *itr; + if(strcmp(ps->GetName(),name) == 0) + return ps; + ps = ps->GetPacketStructByName(name); + if(ps) + return ps; + } + return 0; +} + +void PacketStruct::reAddAll(int32 length){ + vector::iterator itr; + DataStruct* ds = 0; + PacketStruct* ps = 0; + vector::iterator packet_itr; + if(orig_structs.size() == 0) + orig_structs = structs; + else + deleteDataStructs(&structs); + structs.clear(); + + if(orig_packets.size() == 0 && arrays.size() > 0) + orig_packets = arrays; + else{ + for(packet_itr=arrays.begin();packet_itr!=arrays.end();packet_itr++) { + ps = *packet_itr; + safe_delete(ps); + } + } + arrays.clear(); + + for(int16 i=0;iGetName()); + name.append(tmp); + new_packet->SetName(name.c_str()); + add(new_packet); + } + for(itr=orig_structs.begin();itr!=orig_structs.end();itr++){ + ds = *itr; + DataStruct* new_data = new DataStruct(ds); + char tmp[20] = {0}; + sprintf(tmp,"_%i",i); + string name = new_data->GetStringName(); + if(IsSubPacket() && parent->IsSubPacket()){ + string parent_name = string(GetName()); + try{ + if(parent_name.rfind("_") < 0xFFFFFFFF) + sprintf(tmp,"%i_%i",atoi(parent_name.substr(parent_name.rfind("_")+1).c_str()), i); + } + catch(...){ + sprintf(tmp,"_%i",i); + } + } + name.append(tmp); + new_data->SetName(name.c_str()); + if(new_data->GetType() == DATA_STRUCT_ARRAY){ + string old_size_arr = string(new_data->GetArraySizeVariable()); + new_data->SetArraySizeVariable(old_size_arr.append(tmp).c_str()); + } + add(new_data); + } + } + sub_packet_size = length; +} +int32 PacketStruct::GetArraySize(DataStruct* data_struct, int32 index){ + if(data_struct){ + const char* name = data_struct->GetArraySizeVariable(); + return GetArraySize(name, index); + } + return 0; +} +int32 PacketStruct::GetArraySize(const char* name, int32 index){ + int32 ret = 0; + DataStruct* ds = findStruct(name, index); + if(ds){ + if(ds->GetType() == DATA_STRUCT_INT8){ + int8* tmp = (int8*)GetStructPointer(ds); + ret = *tmp; + } + else if(ds->GetType() == DATA_STRUCT_INT16){ + int16* tmp = (int16*)GetStructPointer(ds); + ret = *tmp; + } + else if(ds->GetType() == DATA_STRUCT_INT32){ + int32* tmp = (int32*)GetStructPointer(ds); + ret = *tmp; + } + else if(ds->GetType() == DATA_STRUCT_INT64){ + int64* tmp = (int64*)GetStructPointer(ds); + ret = *tmp; + } + } + return ret; +} + +void PacketStruct::UpdateArrayByArrayLength(DataStruct* data_struct, int32 index, int32 size){ + if(data_struct){ + PacketStruct* packet = 0; + DataStruct* data = 0; + vector::iterator itr; + + for(itr=structs.begin();itr!=structs.end();itr++) { + data = *itr; + if(strcmp(data->GetArraySizeVariable(), data_struct->GetName()) == 0){ + packet = GetPacketStructByName(data->GetName()); + if(packet) + packet->reAddAll(size); + return; + } + } + vector::iterator itr2; + for(itr2=arrays.begin();itr2!=arrays.end();itr2++) { + packet = *itr2; + packet->UpdateArrayByArrayLength(data_struct, index, size); + } + } +} + +void PacketStruct::UpdateArrayByArrayLengthName(const char* name, int32 index, int32 size){ + UpdateArrayByArrayLength(findStruct(name, index), index, size); +} +int32 PacketStruct::GetArraySizeByName(const char* name, int32 index){ + DataStruct* ds1 = findStruct(name, index); + return GetArraySize(ds1, index); +} + +void PacketStruct::serializePacket(bool clear){ + if(clear) + Clear(); + bool client_cmd = false; + string client_data; +#ifndef LOGIN + if(GetOpcode() == OP_ClientCmdMsg && strlen(GetOpcodeType()) > 0 && !IsSubPacket()) + client_cmd = true; +#endif + DataStruct* data = 0; + vector::iterator itr; + for(itr=structs.begin();itr!=structs.end();itr++) { + data = *itr; + if(data->AddToStruct()){ + if(data->GetIfSet() && data->GetIfSetVariable()){ + string varname = string(data->GetIfSetVariable()); + if(varname.find(",") < 0xFFFFFFFF){ + vector* varnames = SplitString(varname, ','); + if(varnames){ + bool should_continue = true; + for(int32 i=0;isize();i++){ + if(GetVariableIsSet(varnames->at(i).c_str())){ + should_continue = false; + break; + } + } + safe_delete(varnames); + if(should_continue) + continue; + } + } + else{ + if(!GetVariableIsSet(varname.c_str())) + continue; + } + } + if(data->GetIfNotSet() && data->GetIfNotSetVariable()){ + string varname = string(data->GetIfNotSetVariable()); + if(varname.find(",") < 0xFFFFFFFF){ + vector* varnames = SplitString(varname, ','); + if(varnames){ + bool should_continue = false; + for(int32 i=0;isize();i++){ + if(!GetVariableIsNotSet(varnames->at(i).c_str())){ + should_continue = true; + break; + } + } + safe_delete(varnames); + if(should_continue) + continue; + } + } + else{ + if(!GetVariableIsNotSet(varname.c_str())) + continue; + } + } + // Quick implementaion of IfVariableNotEquals + // probably not what it was intended for as it currently just checks to see if the given variable equals 1 + // should probably change it so you can define what the variable should or shouldn't equal + // + // ie: IfVariableNotEquals="stat_type_%i=1" + // would be a check to make sure that stat_type_%i does not equal 1 and if it does exclude this element + if (data->GetIfNotEquals() && data->GetIfNotEqualsVariable()) { + // Get the variable name + string varname = string(data->GetIfNotEqualsVariable()); + char name[250] = {0}; + // Check to see if the variable has %i in the name, if it does assume we are in an array and get the current + // index and replace it + if (varname.find("%i") < 0xFFFFFFFF) { + // Get the current index by getting the number at the end of the name + vector* varnames = SplitString(data->GetName(), '_'); + int index = atoi(varnames->at(varnames->size() - 1).c_str()); + + string substr = "stat_type"; + if (strncmp(varname.c_str(), substr.c_str(), strlen(substr.c_str())) == 0) { + // adorn_stat_subtype 18 chars + string temp = varname.substr(12); + char temp2[20]={0}; + int index2 = atoi(temp.c_str()); + itoa(index2, temp2, 10); + varname = varname.substr(0, 12).append(temp2).append("_%i"); + } + sprintf(name, varname.c_str(), index); + safe_delete(varnames); + } + else + strcpy(name, varname.c_str()); + + // Get the data for the variable + int16 value = 0; + DataStruct* data_struct2 = findStruct(name, 0); + value = getType_int16(data_struct2); + // Hack for items as it is the only struct that currently uses IfVariableNotEquals + if (value == 1) + continue; + } + // copy and paste of the code above for IfEquals + if (data->GetIfEquals() && data->GetIfEqualsVariable()) { + // Get the variable name + string varname = string(data->GetIfEqualsVariable()); + char name[250] = {0}; + // Check to see if the variable has %i in the name, if it does assume we are in an array and get the current + // index and replace it + if (varname.find("%i") < 0xFFFFFFFF) { + // Get the current index by getting the number at the end of the name + vector* varnames = SplitString(data->GetName(), '_'); + int index = 0; + if (varnames) + index = atoi(varnames->at(varnames->size() - 1).c_str()); + + string substr = "stat_type"; + if (strncmp(varname.c_str(), substr.c_str(), strlen(substr.c_str())) == 0) { + // adorn_stat_subtype 18 chars + string temp = varname.substr(12); + char temp2[20]={0}; + int index2 = atoi(temp.c_str()); + itoa(index2, temp2, 10); + varname = varname.substr(0, 12).append(temp2).append("_%i"); + } + sprintf(name, varname.c_str(), index); + safe_delete(varnames); + } + else + strcpy(name, varname.c_str()); + + // Get the data for the variable + int16 value = 0; + DataStruct* data_struct2 = findStruct(name, 0); + value = getType_int16(data_struct2); + // Hack for items as it is the only struct that currently uses IfVariableNotEquals + if (value != 1) + continue; + } + if(client_cmd) + AddSerializedData(data, 0, &client_data); + else + AddSerializedData(data); + } + } +#ifndef LOGIN + if(client_cmd){ + EmuOpcode sub_opcode = EQOpcodeManager[0]->NameSearch(GetOpcodeType()); + int16 opcode_val = 0; + if(sub_opcode == OP_Unknown){ + try{ + opcode_val = atoi(GetOpcodeType()); + } + catch(...){} + if(opcode_val == 0) + LogWrite(PACKET__ERROR, 0, "Packet", "PACKET NOT SENT CORRECTLY! Unable to get Emu Opcode from: '%s'", GetOpcodeType()); + } + Clear(); + int32 size = client_data.length() + 3; //gotta add the opcode and oversized + int8 oversized = 0xFF; + int16 OpcodeVersion = GetOpcodeVersion(client_version); + if(opcode_val == 0) + opcode_val = EQOpcodeManager[OpcodeVersion]->EmuToEQ(sub_opcode); + if(opcode_val == EQOpcodeManager[OpcodeVersion]->EmuToEQ(OP_EqExamineInfoCmd)) + size += (size - 9); + StructAddData(size, sizeof(int32), 0); + StructAddData(oversized, sizeof(int8), 0); + StructAddData(opcode_val, sizeof(int16), 0); + AddData(client_data); + } +#endif +} +int32 PacketStruct::GetTotalPacketSize(){ + int32 retSize = 0; + DataStruct* data = 0; + vector::iterator itr; + EQ2_8BitString* tmp1 = 0; + EQ2_16BitString* tmp2 = 0; + EQ2_32BitString* tmp3 = 0; + for(itr=structs.begin();itr!=structs.end();itr++) { + data = *itr; + switch(data->GetType()){ + case DATA_STRUCT_INT8: + case DATA_STRUCT_SINT8: + case DATA_STRUCT_CHAR: + retSize+=(1*data->GetLength()); + break; + case DATA_STRUCT_SINT16: + case DATA_STRUCT_INT16: + retSize+=(2*data->GetLength()); + break; + case DATA_STRUCT_INT32: + case DATA_STRUCT_SINT32: + case DATA_STRUCT_FLOAT: + case DATA_STRUCT_DOUBLE: + retSize+=(4*data->GetLength()); + break; + case DATA_STRUCT_SINT64: + case DATA_STRUCT_INT64: + retSize+=(8*data->GetLength()); + break; + case DATA_STRUCT_EQ2_8BIT_STRING: + tmp1 = (EQ2_8BitString*)GetStructPointer(data); + if(tmp1){ + for(int16 i=0;iGetLength();i++) + retSize += tmp1[i].data.length(); + } + retSize+=(1*data->GetLength()); + break; + case DATA_STRUCT_EQ2_16BIT_STRING:{ + tmp2 = (EQ2_16BitString*)GetStructPointer(data); + if(tmp2){ + for(int16 i=0;iGetLength();i++) + retSize += tmp2[i].data.length(); + } + retSize+=(2*data->GetLength()); + break; + } + case DATA_STRUCT_EQ2_32BIT_STRING:{ + tmp3 = (EQ2_32BitString*)GetStructPointer(data); + if(tmp3){ + for(int16 i=0;iGetLength();i++) + retSize += tmp3[i].data.length(); + } + retSize+=(4*data->GetLength()); + break; + } + case DATA_STRUCT_ARRAY:{ + int32 size = GetArraySize(data,0); + PacketStruct* ps = GetPacketStructByName(data->GetName()); + if(ps && ps->GetSubPacketSize() != size){ + ps->reAddAll(size); + } + if(ps && size > 0) + retSize+= ps->GetTotalPacketSize(); + break; + } + case DATA_STRUCT_COLOR:{ + retSize+=((sizeof(int8)*3)*data->GetLength()); + break; + } + case DATA_STRUCT_EQUIPMENT:{ + retSize+=((((sizeof(int8)*3)*2) + sizeof(int16))*data->GetLength()); + break; + } + } + } + return retSize; +} + +void PacketStruct::AddSerializedData(DataStruct* data, int32 index, string* datastring){ + switch(data->GetAddType()){ + case DATA_STRUCT_INT8: + StructAddData((int8*)GetStructPointer(data), data->GetLength(), sizeof(int8), datastring); + break; + case DATA_STRUCT_INT16: + if(data->GetOversized() > 0){ + if(*((int16*)GetStructPointer(data)) >= data->GetOversized()){ + StructAddData(data->GetOversizedByte(), sizeof(int8), datastring); + StructAddData((int16*)GetStructPointer(data), data->GetLength(), sizeof(int16), datastring); + } + else + StructAddData((int8*)GetStructPointer(data), data->GetLength(), sizeof(int8), datastring); + } + else + StructAddData((int16*)GetStructPointer(data), data->GetLength(), sizeof(int16), datastring); + break; + case DATA_STRUCT_INT32: + if(data->GetOversized() > 0){ + if(*((int32*)GetStructPointer(data)) >= data->GetOversized()){ + StructAddData(data->GetOversizedByte(), sizeof(int8), datastring); + StructAddData((int32*)GetStructPointer(data), data->GetLength(), sizeof(int32), datastring); + } + else + StructAddData((int16*)GetStructPointer(data), data->GetLength(), sizeof(int16), datastring); + } + else + StructAddData((int32*)GetStructPointer(data), data->GetLength(), sizeof(int32), datastring); + break; + case DATA_STRUCT_INT64: + StructAddData((int64*)GetStructPointer(data), data->GetLength(), sizeof(int64), datastring); + break; + case DATA_STRUCT_SINT8: + StructAddData((sint8*)GetStructPointer(data), data->GetLength(), sizeof(sint8), datastring); + break; + case DATA_STRUCT_SINT16: + if(data->GetOversized() > 0){ + sint16 val = *((sint16*)GetStructPointer(data)); + if(val >= data->GetOversized() || val <= (data->GetOversized()*-1)){ + StructAddData(data->GetOversizedByte(), sizeof(sint8), datastring); + StructAddData((sint16*)GetStructPointer(data), data->GetLength(), sizeof(sint16), datastring); + } + else + StructAddData((sint8*)GetStructPointer(data), data->GetLength(), sizeof(sint8), datastring); + } + else + StructAddData((sint16*)GetStructPointer(data), data->GetLength(), sizeof(sint16), datastring); + break; + case DATA_STRUCT_SINT32: + StructAddData((sint32*)GetStructPointer(data), data->GetLength(), sizeof(sint32), datastring); + break; + case DATA_STRUCT_SINT64: + StructAddData((sint64*)GetStructPointer(data), data->GetLength(), sizeof(sint64), datastring); + break; + case DATA_STRUCT_CHAR: + StructAddData((char*)GetStructPointer(data), data->GetLength(), sizeof(char), datastring); + break; + case DATA_STRUCT_FLOAT: + StructAddData((float*)GetStructPointer(data), data->GetLength(), sizeof(float), datastring); + break; + case DATA_STRUCT_DOUBLE: + StructAddData((double*)GetStructPointer(data), data->GetLength(), sizeof(double), datastring); + break; + case DATA_STRUCT_EQ2_8BIT_STRING:{ + for(int16 i=0;iGetLength();i++){ + EQ2_8BitString* ds = (EQ2_8BitString*)GetStructPointer(data); + AddDataString(ds[i], datastring); + } + break; + } + case DATA_STRUCT_EQ2_16BIT_STRING:{ + for(int16 i=0;iGetLength();i++){ + EQ2_16BitString* ds = (EQ2_16BitString*)GetStructPointer(data); + AddDataString(ds[i], datastring); + } + break; + } + case DATA_STRUCT_EQ2_32BIT_STRING:{ + for(int16 i=0;iGetLength();i++){ + EQ2_32BitString* ds = (EQ2_32BitString*)GetStructPointer(data); + AddDataString(ds[i], datastring); + } + break; + } + case DATA_STRUCT_ARRAY:{ + int32 size = GetArraySize(data,0); + PacketStruct* ps = GetPacketStructByName(data->GetName()); + if(ps && ps->GetSubPacketSize() != size){ + ps->reAddAll(size); + } + if(ps && size > 0){ + ps->serializePacket(); + string data = *(ps->getDataString()); + AddData(data, datastring); + } + break; + } + case DATA_STRUCT_COLOR:{ + StructAddData((EQ2_Color*)GetStructPointer(data), data->GetLength(), sizeof(EQ2_Color), datastring); + break; + } + case DATA_STRUCT_EQUIPMENT:{ + StructAddData((EQ2_EquipmentItem*)GetStructPointer(data), data->GetLength(), sizeof(EQ2_EquipmentItem), datastring); + break; + } + case DATA_STRUCT_ITEM:{ + //DumpPacket(ptr, data->GetItemSize()); + AddCharArray((char*)GetStructPointer(data), data->GetItemSize(), datastring); + break; + } + } +} + +int8 PacketStruct::getType_int8_ByName(const char* name, int32 index, bool force){ + DataStruct* data_struct = findStruct(name, index); + return getType_int8(data_struct, index, force); +} + +int16 PacketStruct::getType_int16_ByName(const char* name, int32 index, bool force){ + DataStruct* data_struct = findStruct(name, index); + return getType_int16(data_struct, index, force); +} + +int32 PacketStruct::getType_int32_ByName(const char* name, int32 index, bool force){ + DataStruct* data_struct = findStruct(name, index); + return getType_int32(data_struct, index, force); +} + +int64 PacketStruct::getType_int64_ByName(const char* name, int32 index, bool force){ + DataStruct* data_struct = findStruct(name, index); + return getType_int64(data_struct, index, force); +} + +sint8 PacketStruct::getType_sint8_ByName(const char* name, int32 index, bool force){ + DataStruct* data_struct = findStruct(name, index); + return getType_sint8(data_struct, index, force); +} + +sint16 PacketStruct::getType_sint16_ByName(const char* name, int32 index, bool force){ + DataStruct* data_struct = findStruct(name, index); + return getType_sint16(data_struct, index, force); +} + +sint32 PacketStruct::getType_sint32_ByName(const char* name, int32 index, bool force){ + DataStruct* data_struct = findStruct(name, index); + return getType_sint32(data_struct, index, force); +} + +sint64 PacketStruct::getType_sint64_ByName(const char* name, int32 index, bool force){ + DataStruct* data_struct = findStruct(name, index); + return getType_sint64(data_struct, index, force); +} + +float PacketStruct::getType_float_ByName(const char* name, int32 index, bool force){ + DataStruct* data_struct = findStruct(name, index); + return getType_float(data_struct, index, force); +} + +double PacketStruct::getType_double_ByName(const char* name, int32 index, bool force){ + DataStruct* data_struct = findStruct(name, index); + return getType_double(data_struct, index, force); +} + +char PacketStruct::getType_char_ByName(const char* name, int32 index, bool force){ + DataStruct* data_struct = findStruct(name, index); + return getType_char(data_struct, index, force); +} + +EQ2_8BitString PacketStruct::getType_EQ2_8BitString_ByName(const char* name, int32 index, bool force){ + DataStruct* data_struct = findStruct(name, index); + return getType_EQ2_8BitString(data_struct, index, force); +} + +EQ2_16BitString PacketStruct::getType_EQ2_16BitString_ByName(const char* name, int32 index, bool force){ + DataStruct* data_struct = findStruct(name, index); + return getType_EQ2_16BitString(data_struct, index, force); +} + +EQ2_32BitString PacketStruct::getType_EQ2_32BitString_ByName(const char* name, int32 index, bool force){ + DataStruct* data_struct = findStruct(name, index); + return getType_EQ2_32BitString(data_struct, index, force); +} + +EQ2_Color PacketStruct::getType_EQ2_Color_ByName(const char* name, int32 index, bool force){ + DataStruct* data_struct = findStruct(name, index); + return getType_EQ2_Color(data_struct, index, force); +} + +EQ2_EquipmentItem PacketStruct::getType_EQ2_EquipmentItem_ByName(const char* name, int32 index, bool force){ + DataStruct* data_struct = findStruct(name, index); + return getType_EQ2_EquipmentItem(data_struct, index, force); +} + +int8 PacketStruct::getType_int8(DataStruct* data_struct, int32 index, bool force){ + if(data_struct && ((data_struct->GetType() == DATA_STRUCT_INT8) || force)){ + int8* ptr = (int8*)GetStructPointer(data_struct); + return ptr[index]; + } + return 0; +} +int16 PacketStruct::getType_int16(DataStruct* data_struct, int32 index, bool force){ + if(data_struct && ((data_struct->GetType() == DATA_STRUCT_INT16) || force)){ + int16* ptr = (int16*)GetStructPointer(data_struct); + return ptr[index]; + } + return 0; +} +int32 PacketStruct::getType_int32(DataStruct* data_struct, int32 index, bool force){ + if(data_struct && ((data_struct->GetType() == DATA_STRUCT_INT32) || force)){ + int32* ptr = (int32*)GetStructPointer(data_struct); + return ptr[index]; + } + return 0; +} +int64 PacketStruct::getType_int64(DataStruct* data_struct, int32 index, bool force){ + if(data_struct && ((data_struct->GetType() == DATA_STRUCT_INT64) || force)){ + int64* ptr = (int64*)GetStructPointer(data_struct); + return ptr[index]; + } + return 0; +} +sint8 PacketStruct::getType_sint8(DataStruct* data_struct, int32 index, bool force){ + if(data_struct && ((data_struct->GetType() == DATA_STRUCT_SINT8) || force)){ + sint8* ptr = (sint8*)GetStructPointer(data_struct); + return ptr[index]; + } + return 0; +} +sint16 PacketStruct::getType_sint16(DataStruct* data_struct, int32 index, bool force){ + if(data_struct && ((data_struct->GetType() == DATA_STRUCT_SINT16) || force)){ + sint16* ptr = (sint16*)GetStructPointer(data_struct); + return ptr[index]; + } + return 0; +} +sint32 PacketStruct::getType_sint32(DataStruct* data_struct, int32 index, bool force){ + if(data_struct && ((data_struct->GetType() == DATA_STRUCT_SINT32) || force)){ + sint32* ptr = (sint32*)GetStructPointer(data_struct); + return ptr[index]; + } + return 0; +} +sint64 PacketStruct::getType_sint64(DataStruct* data_struct, int32 index, bool force){ + if(data_struct && ((data_struct->GetType() == DATA_STRUCT_SINT64) || force)){ + sint64* ptr = (sint64*)GetStructPointer(data_struct); + return ptr[index]; + } + return 0; +} +float PacketStruct::getType_float(DataStruct* data_struct, int32 index, bool force){ + if(data_struct && ((data_struct->GetType() == DATA_STRUCT_FLOAT) || force)){ + float* ptr = (float*)GetStructPointer(data_struct); + return ptr[index]; + } + return 0; +} +double PacketStruct::getType_double(DataStruct* data_struct, int32 index, bool force){ + if(data_struct && ((data_struct->GetType() == DATA_STRUCT_DOUBLE) || force)){ + double* ptr = (double*)GetStructPointer(data_struct); + return ptr[index]; + } + return 0; +} +char PacketStruct::getType_char(DataStruct* data_struct, int32 index, bool force){ + if(data_struct && ((data_struct->GetType() == DATA_STRUCT_CHAR) || force)){ + char* ptr = (char*)GetStructPointer(data_struct); + return ptr[index]; + } + return 0; +} +EQ2_8BitString PacketStruct::getType_EQ2_8BitString(DataStruct* data_struct, int32 index, bool force){ + if(data_struct && ((data_struct->GetType() == DATA_STRUCT_EQ2_8BIT_STRING) || force)){ + EQ2_8BitString* ptr = (EQ2_8BitString*)GetStructPointer(data_struct); + return ptr[index]; + } + EQ2_8BitString ret; + ret.size = 0; + return ret; +} +EQ2_16BitString PacketStruct::getType_EQ2_16BitString(DataStruct* data_struct, int32 index, bool force){ + if(data_struct && ((data_struct->GetType() == DATA_STRUCT_EQ2_16BIT_STRING) || force)){ + EQ2_16BitString* ptr = (EQ2_16BitString*)GetStructPointer(data_struct); + return ptr[index]; + } + EQ2_16BitString ret; + ret.size = 0; + return ret; +} +EQ2_32BitString PacketStruct::getType_EQ2_32BitString(DataStruct* data_struct, int32 index, bool force){ + if(data_struct && ((data_struct->GetType() == DATA_STRUCT_EQ2_32BIT_STRING) || force)){ + EQ2_32BitString* ptr = (EQ2_32BitString*)GetStructPointer(data_struct); + return ptr[index]; + } + EQ2_32BitString ret; + ret.size = 0; + return ret; +} +EQ2_Color PacketStruct::getType_EQ2_Color(DataStruct* data_struct, int32 index, bool force){ + if(data_struct && ((data_struct->GetType() == DATA_STRUCT_COLOR) || force)){ + EQ2_Color* ptr = (EQ2_Color*)GetStructPointer(data_struct); + return ptr[index]; + } + EQ2_Color ret; + ret.blue = 0; + ret.red = 0; + ret.green = 0; + return ret; +} +EQ2_EquipmentItem PacketStruct::getType_EQ2_EquipmentItem(DataStruct* data_struct, int32 index, bool force){ + if(data_struct && ((data_struct->GetType() == DATA_STRUCT_EQUIPMENT) || force)){ + EQ2_EquipmentItem* ptr = (EQ2_EquipmentItem*)GetStructPointer(data_struct); + return ptr[index]; + } + EQ2_EquipmentItem ret; + ret.color.blue = 0; + ret.color.red = 0; + ret.color.green = 0; + ret.highlight.blue = 0; + ret.highlight.red = 0; + ret.highlight.green = 0; + ret.type = 0; + return ret; +} + +bool PacketStruct::SetOpcode(const char* new_opcode){ + opcode = EQOpcodeManager[0]->NameSearch(new_opcode); + if(opcode == OP_Unknown){ +#ifndef MINILOGIN + LogWrite(PACKET__ERROR, 0, "Packet", "Warning: PacketStruct '%s' uses an unknown opcode named '%s', this struct cannot be serialized directly.", GetName(), new_opcode); +#endif + return false; + } + return true; +} + +EQ2Packet* PacketStruct::serialize(){ + serializePacket(); + if(GetOpcode() != OP_Unknown) + return new EQ2Packet(GetOpcode(), getData(), getDataSize()); + else{ +#ifndef MINILOGIN + LogWrite(PACKET__ERROR, 0, "Packet", "Warning: PacketStruct '%s' uses an unknown opcode and cannot be serialized directly.", GetName()); +#endif + return 0; + } +} + +EQ2Packet* PacketStruct::serializeCountPacket(int16 version, int8 offset, uchar* orig_packet, uchar* xor_packet){ + string* packet_data = serializeString(); + uchar* data = (uchar*)packet_data->c_str(); + int32 size = packet_data->size(); + uchar* packed_data = new uchar[size + 20]; + memset(packed_data, 0, size + 20); + if(orig_packet && xor_packet){ + memcpy(xor_packet, data + 6, size - 6 - offset); + Encode(xor_packet, orig_packet, size - 6 - offset); + size = Pack(packed_data, xor_packet, size - 6 - offset, size+20, version); + } + else + size = Pack(packed_data, data + 6, packet_data->size()-6 - offset, packet_data->size()+20, version); + uchar* combined = new uchar[size + sizeof(int16)+offset]; + memset(combined, 0, size + sizeof(int16)+offset); + uchar* ptr = combined; + memcpy(ptr, data, sizeof(int16)); + ptr += sizeof(int16); + memcpy(ptr, packed_data, size); + if(offset > 0){ + ptr += size; + uchar* ptr2 = data; + ptr2 += packet_data->size() - offset; + memcpy(ptr, ptr2, offset); + } + EQ2Packet* app = new EQ2Packet(GetOpcode(), combined, size + sizeof(int16)+offset); + safe_delete_array(packed_data); + safe_delete_array(combined); + return app; +} + +bool PacketStruct::IsSubPacket(){ + return sub_packet; +} +void PacketStruct::IsSubPacket(bool new_val){ + sub_packet = new_val; +} +int32 PacketStruct::GetSubPacketSize(){ + return sub_packet_size; +} +void PacketStruct::SetSubPacketSize(int32 new_size){ + sub_packet_size = new_size; +} +void* PacketStruct::GetStructPointer(DataStruct* data_struct, bool erase){ + try{ + void* tmp = struct_data[data_struct]; + if(tmp != 0){ + if(erase) + struct_data.erase(data_struct); + return tmp; + } + else{ + PacketStruct* packet = 0; + vector::iterator itr2; + for(itr2=arrays.begin();itr2!=arrays.end();itr2++) { + packet = *itr2; + if(packet){ + tmp = packet->GetStructPointer(data_struct, erase); + if( tmp != 0) + return tmp; + } + } + } + } + catch(...){ + cout << "Caught Exception...\n"; + } + return 0; +} + +vector PacketStruct::GetDataStructs(){ + vector ret; + DataStruct* ds = 0; + vector::iterator itr; + for(itr=structs.begin();itr!=structs.end();itr++){ + ds = *itr; + if(ds->GetType() == DATA_STRUCT_ARRAY){ + int32 size = GetArraySize(ds,0); + PacketStruct* ps = GetPacketStructByName(ds->GetName()); + if(ps && ps->GetSubPacketSize() != size){ + ps->reAddAll(size); + } + if(ps){ + vector ret2 = ps->GetDataStructs(); + vector::iterator itr2; + for(itr2=ret2.begin();itr2!=ret2.end();itr2++){ + ret.push_back(*itr2); + } + } + } + else if(ds->GetLength() == 0 && ds->GetType() == DATA_STRUCT_ARRAY){ + int32 size = GetArraySize(ds,0); + PacketStruct* ps = GetPacketStructByName(ds->GetName()); + if(ps && ps->GetSubPacketSize() != size){ + ps->reAddAll(size); + } + if(ps){ + vector ret2 = ps->GetDataStructs(); + vector::iterator itr2; + for(itr2=ret2.begin();itr2!=ret2.end();itr2++){ + ret.push_back(*itr2); + } + } + } + else + ret.push_back(ds); + } + return ret; +} + +void PacketStruct::PrintPacket(){ + DataStruct* ds = 0; + vector::iterator itr; + for(itr=structs.begin();itr!=structs.end();itr++){ + ds = *itr; + if(!ds->AddToStruct()) + continue; + for(int16 i=0;iGetLength();i++){ + cout << "Name: " << ds->GetName() << " \tIndex: " << i << " \tType: "; + switch(ds->GetType()){ + case DATA_STRUCT_INT8: + printf("int8\t\tData: %i", getType_int8_ByName(ds->GetName(), i)); + break; + case DATA_STRUCT_INT16: + printf("int16\t\tData: %i", getType_int16_ByName(ds->GetName(), i)); + break; + case DATA_STRUCT_INT32: + printf("int32\t\tData: %u", getType_int32_ByName(ds->GetName(), i)); + break; + case DATA_STRUCT_INT64: + printf("int64\t\tData: %llu", getType_int64_ByName(ds->GetName(), i)); + break; + case DATA_STRUCT_SINT8: + printf("sint8\t\tData: %i", getType_sint8_ByName(ds->GetName(), i)); + break; + case DATA_STRUCT_SINT16: + printf("sint16\t\tData: %i", getType_sint16_ByName(ds->GetName(), i)); + break; + case DATA_STRUCT_SINT32: + printf("sint32\t\tData: %i", getType_sint32_ByName(ds->GetName(), i)); + break; + case DATA_STRUCT_SINT64: + printf("sint64\t\tData: %lli", getType_sint64_ByName(ds->GetName(), i)); + break; + case DATA_STRUCT_CHAR: + printf("char\t\tData: %c", getType_char_ByName(ds->GetName(), i)); + break; + case DATA_STRUCT_FLOAT: + printf("float\t\tData: %f", getType_float_ByName(ds->GetName(), i)); + break; + case DATA_STRUCT_DOUBLE: + printf("double\t\tData: %f", getType_double_ByName(ds->GetName(), i)); + break; + case DATA_STRUCT_EQ2_8BIT_STRING: + printf("EQ2_8BitString\tData: %s", getType_EQ2_8BitString_ByName(ds->GetName(), i).data.c_str()); + break; + case DATA_STRUCT_EQ2_16BIT_STRING: + printf("EQ2_16BitString\tData: %s", getType_EQ2_16BitString_ByName(ds->GetName(), i).data.c_str()); + break; + case DATA_STRUCT_EQ2_32BIT_STRING:{ + printf("EQ2_32BitString\tData: %s", getType_EQ2_32BitString_ByName(ds->GetName(), i).data.c_str()); + break; + } + case DATA_STRUCT_ARRAY:{ + int32 size = GetArraySize(ds,0); + PacketStruct* ps = GetPacketStructByName(ds->GetName()); + if(ps && ps->GetSubPacketSize() != size){ + ps->reAddAll(size); + } + if(ps){ + cout << "Array:\tData: \n"; + ps->PrintPacket(); + } + break; + } + case DATA_STRUCT_COLOR:{ + cout.unsetf( ios_base::dec ); + cout.setf( ios_base::hex ); + printf("EQ2_Color\tData: "); + EQ2_Color tmp = getType_EQ2_Color_ByName(ds->GetName(), i); + printf("R: %i", tmp.red); + printf(", G: %i", tmp.green); + printf(", B: %i", tmp.blue); + break; + } + case DATA_STRUCT_EQUIPMENT:{ + cout.unsetf( ios_base::dec ); + cout.setf( ios_base::hex ); + printf("EQ2_EquipmentItem\tData: "); + EQ2_EquipmentItem tmp = getType_EQ2_EquipmentItem_ByName(ds->GetName(), i); + printf("type: "); + printf(" ,color R: %i", tmp.color.red); + printf(" ,color G: %i", tmp.color.green); + printf(" ,color B: %i", tmp.color.blue); + printf(" ,hl R: %i", tmp.highlight.red); + printf(" ,hl G: %i", tmp.highlight.green); + printf(" ,hl B: %i", tmp.highlight.blue); + break; + } + } + cout << endl; + } + if(ds->GetLength() == 0 && ds->GetType() == DATA_STRUCT_ARRAY){ + int32 size = GetArraySize(ds,0); + PacketStruct* ps = GetPacketStructByName(ds->GetName()); + if(ps && ps->GetSubPacketSize() != size){ + ps->reAddAll(size); + } + if(ps){ + cout << "Array:\tData: \n"; + ps->PrintPacket(); + } + } + } +} + +void PacketStruct::LoadFromPacketStruct(PacketStruct* packet, char* substruct_name){ + vector::iterator itr; + DataStruct* ds = 0; + char name[512]; + + //scatman (1/30/2012): these declarations are here to get rid of a linux compile error "taking address of temporary" + EQ2_8BitString str8; + EQ2_16BitString str16; + EQ2_32BitString str32; + EQ2_EquipmentItem equip; + + for(itr=structs.begin();itr!=structs.end();itr++){ + ds = *itr; + for(int16 i=0;iGetLength();i++){ + memset(name, 0, sizeof(name)); + + if(substruct_name) + snprintf(name, sizeof(name), "%s_%s_0", substruct_name, ds->GetName()); + else + strncpy(name, ds->GetName(), sizeof(name)); + name[sizeof(name) - 1] = '\0'; + + switch(ds->GetType()){ + case DATA_STRUCT_INT8: + setData(ds, packet->getType_int8_ByName(name, i), i); + break; + case DATA_STRUCT_SINT8: + setData(ds, packet->getType_sint8_ByName(name, i), i); + break; + case DATA_STRUCT_CHAR: + setData(ds, packet->getType_char_ByName(name, i), i); + break; + case DATA_STRUCT_SINT16: + setData(ds, packet->getType_sint16_ByName(name, i), i); + break; + case DATA_STRUCT_INT16: + setData(ds, packet->getType_int16_ByName(name, i), i); + break; + case DATA_STRUCT_INT32: + setData(ds, packet->getType_int32_ByName(name, i), i); + break; + case DATA_STRUCT_INT64: + setData(ds, packet->getType_int64_ByName(name, i), i); + break; + case DATA_STRUCT_SINT32: + setData(ds, packet->getType_sint32_ByName(name, i), i); + break; + case DATA_STRUCT_SINT64: + setData(ds, packet->getType_sint64_ByName(name, i), i); + break; + case DATA_STRUCT_FLOAT: + setData(ds, packet->getType_float_ByName(name, i), i); + break; + case DATA_STRUCT_DOUBLE: + setData(ds, packet->getType_double_ByName(name, i), i); + break; + case DATA_STRUCT_EQ2_8BIT_STRING: + str8 = packet->getType_EQ2_8BitString_ByName(name, i); + setData(ds, &str8, i); + break; + case DATA_STRUCT_EQ2_16BIT_STRING: + str16 = packet->getType_EQ2_16BitString_ByName(name, i); + setData(ds, &str16, i); + break; + case DATA_STRUCT_EQ2_32BIT_STRING: + str32 = packet->getType_EQ2_32BitString_ByName(name, i); + setData(ds, &str32, i); + break; + case DATA_STRUCT_ARRAY:{ + int32 size = GetArraySize(ds, 0); + PacketStruct* ps = GetPacketStructByName(ds->GetName()); + if(ps && size > 0) + ps->LoadFromPacketStruct(packet, substruct_name); + break; + } + case DATA_STRUCT_COLOR: + setColor(ds, packet->getType_EQ2_Color_ByName(name, i), i); + break; + case DATA_STRUCT_EQUIPMENT: + equip = packet->getType_EQ2_EquipmentItem_ByName(name, i); + setEquipmentByName(ds->GetName(), &equip, i); + break; + default: + break; + } + } + } +} + +#ifdef WORLD +void PacketStruct::setItem(DataStruct* ds, Item* item, Player* player, int32 index, sint8 offset){ + if(!ds) + return; + uchar* ptr = (uchar*)GetStructPointer(ds); + PacketStruct* packet = item->PrepareItem(client_version); + if(packet){ + int16 item_version = GetItemPacketType(packet->GetVersion()); + item->serialize(packet, true, player, item_version); + + string* generic_string_data = packet->serializeString(); + int32 size = generic_string_data->length(); + if(size <= 13) + return; + size -= (9+offset); + if(item->IsBag() == false && item->IsBauble() == false && item->IsFood() == false && (offset == 0 || offset == -1 || offset == 2)) + size = (size*2)-5; + uchar* out_data = new uchar[size+1]; + uchar* out_ptr = out_data; + memcpy(out_ptr, (uchar*)generic_string_data->c_str() + (9 + offset), generic_string_data->length() - (9 + offset)); + //without these it will prompt for your character name + if(offset == 0 || offset == -1 || offset == 2){ + out_data[0] = 1; + } + // + out_ptr += generic_string_data->length() - (10 + offset); + if(item->IsBag() == false && item->IsBauble() == false && item->IsFood() == false && (offset == 0 || offset == -1 || offset == 2)){ + out_data[4] = 0x80; + memcpy(out_ptr, (uchar*)generic_string_data->c_str() + (13 + offset), generic_string_data->length() -(13+offset)); + } + ds->SetItemSize(size); + //DumpPacket(out_data, size); + memcpy(ptr, out_data, size); + safe_delete_array(out_data); + delete packet; + } + //DumpPacket(ptr2, ds->GetItemSize()); +} +void PacketStruct::setItemByName(const char* name, Item* item, Player* player, int32 index, sint8 offset){ + setItem(findStruct(name, index), item, player, index, offset); +} +void PacketStruct::setItemArrayDataByName(const char* name, Item* item, Player* player, int32 index1, int32 index2, sint8 offset){ + char tmp[10] = {0}; + sprintf(tmp,"_%i",index1); + string name2 = string(name).append(tmp); + setItem(findStruct(name2.c_str(), index1, index2), item, player, index2, offset); +} + +void PacketStruct::ResetData() { + vector::iterator itr; + for (itr = structs.begin(); itr != structs.end(); itr++){ + DataStruct* ds = *itr; + void* ptr = GetStructPointer(ds); + if (!ptr) + continue; + switch (ds->GetType()) + { + case DATA_STRUCT_EQ2_8BIT_STRING:{ + EQ2_8BitString* real_ptr = (EQ2_8BitString*)ptr; + real_ptr->size = 0; + real_ptr->data.clear(); + break; + } + case DATA_STRUCT_EQ2_16BIT_STRING:{ + EQ2_16BitString* real_ptr = (EQ2_16BitString*)ptr; + real_ptr->size = 0; + real_ptr->data.clear(); + break; + } + case DATA_STRUCT_EQ2_32BIT_STRING:{ + EQ2_32BitString* real_ptr = (EQ2_32BitString*)ptr; + real_ptr->size = 0; + real_ptr->data.clear(); + break; + } + case DATA_STRUCT_EQUIPMENT:{ + memset(ptr, 0, sizeof(EQ2_EquipmentItem) * ds->GetLength()); + break; + } + case DATA_STRUCT_DOUBLE:{ + memset(ptr, 0, sizeof(double) * ds->GetLength()); + break; + } + case DATA_STRUCT_FLOAT:{ + memset(ptr, 0, sizeof(float) * ds->GetLength()); + break; + } + case DATA_STRUCT_INT8:{ + memset(ptr, 0, sizeof(int8) * ds->GetLength()); + break; + } + case DATA_STRUCT_INT16:{ + memset(ptr, 0, sizeof(int16) * ds->GetLength()); + break; + } + case DATA_STRUCT_INT32:{ + memset(ptr, 0, sizeof(int32) * ds->GetLength()); + break; + } + case DATA_STRUCT_INT64:{ + memset(ptr, 0, sizeof(int64) * ds->GetLength()); + break; + } + case DATA_STRUCT_SINT8:{ + memset(ptr, 0, sizeof(sint8) * ds->GetLength()); + break; + } + case DATA_STRUCT_SINT16:{ + memset(ptr, 0, sizeof(sint16) * ds->GetLength()); + break; + } + case DATA_STRUCT_SINT32:{ + memset(ptr, 0, sizeof(sint32) * ds->GetLength()); + break; + } + case DATA_STRUCT_SINT64:{ + memset(ptr, 0, sizeof(sint64) * ds->GetLength()); + break; + } + case DATA_STRUCT_ITEM:{ + memset(ptr, 0, 10000 * ds->GetLength()); + break; + } + case DATA_STRUCT_CHAR:{ + memset(ptr, 0, sizeof(char) * ds->GetLength()); + break; + } + case DATA_STRUCT_COLOR:{ + memset(ptr, 0, sizeof(EQ2_Color) * ds->GetLength()); + break; + } + } + } + vector::iterator itr2; + for (itr2 = arrays.begin(); itr2 != arrays.end(); itr2++) + (*itr2)->ResetData(); +} +#endif diff --git a/EQ2/source/common/PacketStruct.h b/EQ2/source/common/PacketStruct.h new file mode 100644 index 000000000..911c4c8d0 --- /dev/null +++ b/EQ2/source/common/PacketStruct.h @@ -0,0 +1,482 @@ +/* + EQ2Emulator: Everquest II Server Emulator + Copyright (C) 2007 EQ2EMulator Development Team (http://www.eq2emulator.net) + + This file is part of EQ2Emulator. + + EQ2Emulator is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + EQ2Emulator is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with EQ2Emulator. If not, see . +*/ +#ifndef __EQ2_PACKETSTRUCT__ +#define __EQ2_PACKETSTRUCT__ +#include "types.h" +#include "DataBuffer.h" +#include "opcodemgr.h" + +#include +#include +#ifdef WORLD +class Item; +class Player; +#endif +extern mapEQOpcodeManager; +using namespace std; + +#define DATA_STRUCT_NONE 0 +#define DATA_STRUCT_INT8 1 +#define DATA_STRUCT_INT16 2 +#define DATA_STRUCT_INT32 3 +#define DATA_STRUCT_INT64 4 +#define DATA_STRUCT_FLOAT 5 +#define DATA_STRUCT_DOUBLE 6 +#define DATA_STRUCT_COLOR 7 +#define DATA_STRUCT_SINT8 8 +#define DATA_STRUCT_SINT16 9 +#define DATA_STRUCT_SINT32 10 +#define DATA_STRUCT_CHAR 11 +#define DATA_STRUCT_EQ2_8BIT_STRING 12 +#define DATA_STRUCT_EQ2_16BIT_STRING 13 +#define DATA_STRUCT_EQ2_32BIT_STRING 14 +#define DATA_STRUCT_EQUIPMENT 15 +#define DATA_STRUCT_ARRAY 16 +#define DATA_STRUCT_ITEM 17 +#define DATA_STRUCT_SINT64 18 + +class DataStruct{ +public: + DataStruct(); + DataStruct(DataStruct* data_struct); + DataStruct(const char* new_name, int8 new_type, int32 new_length = 1, int8 new_type2 = DATA_STRUCT_NONE); + DataStruct(const char* new_name, const char* new_type, int32 new_length = 1, const char* new_type2 = 0); + DataStruct(const char* new_name, int32 new_length); + void SetType(const char* new_type, int8* output_type); + void SetType(int8 new_type); + void SetName(const char* new_name); + void SetLength(int32 new_length); + void SetArraySizeVariable(const char* new_name); + void SetDefaultValue(int8 new_val); + void SetMaxArraySize(int8 size); + void SetOversized(int8 val); + void SetOversizedByte(int8 val); + void SetAddToStruct(bool val); + void SetAddType(int8 new_type); + void SetPackedIndex(int8 new_index); + void SetPackedSizeVariable(const char* new_name); + void SetPacked(const char* value); + void SetItemSize(int32 val); + void SetIfSetVariable(const char* variable); + void SetIfNotSetVariable(const char* variable); + void SetIfEqualsVariable(const char* variable); + void SetIfNotEqualsVariable(const char* variable); + void SetIsSet(bool val); + + int8 GetPackedIndex(); + const char* GetPackedSizeVariable(); + const char* GetArraySizeVariable(); + int8 GetDefaultValue(); + int8 GetOversized(); + int8 GetOversizedByte(); + int8 GetMaxArraySize(); + int8 GetType(); + int8 GetType2(); + const char* GetName(); + string GetStringName(); + int32 GetLength(); + bool AddToStruct(); + int8 GetAddType(); + int32 GetItemSize(); + bool GetIfSet(); + const char* GetIfSetVariable(); + bool GetIfNotSet(); + const char* GetIfNotSetVariable(); + bool GetIfEquals(); + const char* GetIfEqualsVariable(); + bool GetIfNotEquals(); + const char* GetIfNotEqualsVariable(); + bool IsSet(); + int32 GetDataSizeInBytes(); + +private: + bool is_set; + bool if_not_set; + bool if_set; + bool if_not_equals; + bool if_equals; + string if_not_equals_variable; + string if_equals_variable; + string if_not_set_variable; + string if_set_variable; + int8 oversized; + int8 oversized_byte; + bool add; + int8 addType; + int8 maxArraySize; + string array_size_variable; + string name; + int8 type; + int8 default_value; + int8 type2; + int32 length; + int32 item_size; +}; +class PacketStruct : public DataBuffer{ +public: + PacketStruct(); + PacketStruct(PacketStruct* packet, bool sub); + PacketStruct(PacketStruct* packet, int16 in_client_version); + ~PacketStruct(); + void add(DataStruct* data); + void reAddAll(int32 length); + void add(PacketStruct* packet_struct); + void addPacketArrays(PacketStruct* packet); + void deletePacketArrays(PacketStruct* packet); + void deleteDataStructs(vector* data_structs); + void setSmallStringByName(const char* name, const char* text, int32 index = 0); + void setMediumStringByName(const char* name, const char* text, int32 index = 0); + void setLargeStringByName(const char* name, const char* text, int32 index = 0); + void setSmallString(DataStruct* data_struct, const char* text, int32 index = 0); + void setMediumString(DataStruct* data_struct, const char* text, int32 index = 0); + void setLargeString(DataStruct* data_struct, const char* text, int32 index = 0); + void renameSubstructArray(const char* substruct, int32 index); + template void setSubstructSubstructDataByName(const char* substruct_name1, const char* substruct_name2, const char* name, Data data, int32 substruct_index1 = 0, int32 substruct_index2 = 0, int32 index = 0){ + char tmp[15] = {0}; + sprintf(tmp,"_%i_%i",substruct_index1, substruct_index2); + string name2 = string(substruct_name1).append("_").append(substruct_name2).append("_").append(name).append(tmp); + setData(findStruct(name2.c_str(), index), data, index); + } + template void setSubstructDataByName(const char* substruct_name, const char* name, Data data, int32 substruct_index = 0, int32 index = 0){ + char tmp[10] = {0}; + sprintf(tmp,"_%i",substruct_index); + string name2 = string(substruct_name).append("_").append(name).append(tmp); + setData(findStruct(name2.c_str(), index), data, index); + } + template void setSubstructColorByName(const char* substruct_name, const char* name, Data data, int32 substruct_index = 0, int32 index = 0){ + char tmp[10] = {0}; + sprintf(tmp,"_%i",substruct_index); + string name2 = string(substruct_name).append("_").append(name).append(tmp); + setColor(findStruct(name2.c_str(), index), data, index); + } + template void setSubstructArrayDataByName(const char* substruct_name, const char* name, Data data, int32 index = 0, int32 substruct_index = 0){ + char tmp[10] = {0}; + sprintf(tmp,"_%i",substruct_index); + string name2 = string(substruct_name).append("_").append(name).append(tmp); + setData(findStruct(name2.c_str(), substruct_index, index), data, index); + } + template void setSubstructArrayColorByName(const char* substruct_name, const char* name, Data data, int32 substruct_index = 0, int32 index = 0){ + char tmp[10] = {0}; + sprintf(tmp,"_%i",substruct_index); + string name2 = string(substruct_name).append("_").append(name).append(tmp); + setColor(findStruct(name2.c_str(), index, substruct_index), data, index); + } + template void setDataByName(const char* name, Data data, int32 index = 0, bool use_second_type = false){ + setData(findStruct(name, index), data, index, use_second_type); + } + template void setDataByName(const char* name, Data* data, int32 index = 0, bool use_second_type = false){ + setData(findStruct(name, index), data, index, use_second_type); + } + template void setSubArrayDataByName(const char* name, Data data, int32 index1 = 0, int32 index2 = 0, int32 index3 = 0){ + char tmp[20] = {0}; + sprintf(tmp,"%i_%i", index1, index2); + string name2 = string(name).append(tmp); + setData(findStruct(name2.c_str(), index2, index3), data, index3); + } + template void setArrayDataByName(const char* name, Data data, int32 index1 = 0, int32 index2 = 0, bool use_second_type = false){ + char tmp[10] = {0}; + sprintf(tmp,"_%i",index1); + string name2 = string(name).append(tmp); + setData(findStruct(name2.c_str(), index1, index2), data, index2, use_second_type); + } + void setArrayAddToPacketByName(const char* name, bool new_val, int32 index1 = 0, int32 index2 = 0){ + char tmp[10] = {0}; + sprintf(tmp,"_%i",index1); + string name2 = string(name).append(tmp); + DataStruct* data = findStruct(name2.c_str(), index2); + if(data) + data->SetAddToStruct(new_val); + } + void setAddToPacketByName(const char* name, bool new_val, int32 index = 0){ + DataStruct* data = findStruct(name, index); + if(data) + data->SetAddToStruct(new_val); + } + void setAddTypePacketByName(const char* name, int8 new_val, int32 index = 0){ + DataStruct* data = findStruct(name, index); + if(data) + data->SetAddType(new_val); + } + const char* GetOpcodeType(); + bool IsSubPacket(); + void IsSubPacket(bool new_val); + int32 GetSubPacketSize(); + void SetSubPacketSize(int32 new_size); + void SetOpcodeType(const char* opcodeType); + int32 GetArraySizeByName(const char* name, int32 index); + int32 GetArraySize(DataStruct* data_struct, int32 index); + int32 GetArraySize(const char* name, int32 index); + void LoadFromPacketStruct(PacketStruct* packet, char* substruct_name = 0); + bool GetVariableIsSet(const char* name); + bool GetVariableIsNotSet(const char* name); + + int8 getType_int8_ByName(const char* name, int32 index = 0, bool force = false); + int16 getType_int16_ByName(const char* name, int32 index = 0, bool force = false); + int32 getType_int32_ByName(const char* name, int32 index = 0, bool force = false); + int64 getType_int64_ByName(const char* name, int32 index = 0, bool force = false); + sint8 getType_sint8_ByName(const char* name, int32 index = 0, bool force = false); + sint16 getType_sint16_ByName(const char* name, int32 index = 0, bool force = false); + sint32 getType_sint32_ByName(const char* name, int32 index = 0, bool force = false); + sint64 getType_sint64_ByName(const char* name, int32 index = 0, bool force = false); + float getType_float_ByName(const char* name, int32 index = 0, bool force = false); + double getType_double_ByName(const char* name, int32 index = 0, bool force = false); + char getType_char_ByName(const char* name, int32 index = 0, bool force = false); + EQ2_8BitString getType_EQ2_8BitString_ByName(const char* name, int32 index = 0, bool force = false); + EQ2_16BitString getType_EQ2_16BitString_ByName(const char* name, int32 index = 0, bool force = false); + EQ2_32BitString getType_EQ2_32BitString_ByName(const char* name, int32 index = 0, bool force = false); + EQ2_Color getType_EQ2_Color_ByName(const char* name, int32 index = 0, bool force = false); + EQ2_EquipmentItem getType_EQ2_EquipmentItem_ByName(const char* name, int32 index = 0, bool force = false); + + int8 getType_int8(DataStruct* data_struct, int32 index = 0, bool force = false); + int16 getType_int16(DataStruct* data_struct, int32 index = 0, bool force = false); + int32 getType_int32(DataStruct* data_struct, int32 index = 0, bool force = false); + int64 getType_int64(DataStruct* data_struct, int32 index = 0, bool force = false); + sint8 getType_sint8(DataStruct* data_struct, int32 index = 0, bool force = false); + sint16 getType_sint16(DataStruct* data_struct, int32 index = 0, bool force = false); + sint32 getType_sint32(DataStruct* data_struct, int32 index = 0, bool force = false); + sint64 getType_sint64(DataStruct* data_struct, int32 index = 0, bool force = false); + float getType_float(DataStruct* data_struct, int32 index = 0, bool force = false); + double getType_double(DataStruct* data_struct, int32 index = 0, bool force = false); + char getType_char(DataStruct* data_struct, int32 index = 0, bool force = false); + EQ2_8BitString getType_EQ2_8BitString(DataStruct* data_struct, int32 index = 0, bool force = false); + EQ2_16BitString getType_EQ2_16BitString(DataStruct* data_struct, int32 index = 0, bool force = false); + EQ2_32BitString getType_EQ2_32BitString(DataStruct* data_struct, int32 index = 0, bool force = false); + EQ2_Color getType_EQ2_Color(DataStruct* data_struct, int32 index = 0, bool force = false); + EQ2_EquipmentItem getType_EQ2_EquipmentItem(DataStruct* data_struct, int32 index = 0, bool force = false); + + void setDataType(DataStruct* data_struct, char data, int32 index); + void setDataType(DataStruct* data_struct, int8 data, int32 index); + void setDataType(DataStruct* data_struct, int16 data, int32 index); + void setDataType(DataStruct* data_struct, int32 data, int32 index); + void setDataType(DataStruct* data_struct, int64 data, int32 index); + void setDataType(DataStruct* data_struct, sint8 data, int32 index); + void setDataType(DataStruct* data_struct, sint16 data, int32 index); + void setDataType(DataStruct* data_struct, sint32 data, int32 index); + void setDataType(DataStruct* data_struct, sint64 data, int32 index); + void setDataType(DataStruct* data_struct, float data, int32 index); + void setDataType(DataStruct* data_struct, double data, int32 index); + void setData(DataStruct* data_struct, EQ2_8BitString* input_string, int32 index, bool use_second_type = false); + void setData(DataStruct* data_struct, EQ2_16BitString* input_string, int32 index, bool use_second_type = false); + void setData(DataStruct* data_struct, EQ2_32BitString* input_string, int32 index, bool use_second_type = false); + + template void setData(DataStruct* data_struct, Data* data, int32 index, bool use_second_type = false){ + if (!data_struct) + return; + int8 type_to_use = (use_second_type) ? data_struct->GetType2() : data_struct->GetType(); + if(type_to_use >= DATA_STRUCT_EQ2_8BIT_STRING && type_to_use <= DATA_STRUCT_EQ2_32BIT_STRING){ + if(type_to_use == DATA_STRUCT_EQ2_8BIT_STRING){ + setSmallString(data_struct, data, index); + } + else if(type_to_use == DATA_STRUCT_EQ2_16BIT_STRING){ + setMediumString(data_struct, data, index); + } + else{ + setLargeString(data_struct, data, index); + } + } + else { + if(data_struct && index == 0 && data_struct->GetLength() > 1){ + if(type_to_use == DATA_STRUCT_CHAR){ + for(int32 i=0;data && iGetLength() && i < strlen(data);i++) + setData(data_struct, data[i], i); + } + else{ + for(int32 i=0;iGetLength();i++) + setData(data_struct, data[i], i); + } + } + else + setData(data_struct, *data, index); + } + } + template void setData(DataStruct* data_struct, Data data, int32 index, bool use_second_type = false){ + if(data_struct && index < data_struct->GetLength()){ + int8 type_to_use = (use_second_type) ? data_struct->GetType2() : data_struct->GetType(); + if (use_second_type) { + // Need to figure out why type2 always seems to be 205 + // since only items use type2 for now just hardcoded the value needed (BAD!!!) + //type_to_use = DATA_STRUCT_SINT16; // 9; + data_struct->SetType(type_to_use); + } + switch(type_to_use){ + case DATA_STRUCT_INT8: + setDataType(data_struct, (int8)data, index); + break; + case DATA_STRUCT_INT16: + setDataType(data_struct, (int16)data, index); + break; + case DATA_STRUCT_INT32: + setDataType(data_struct, (int32)data, index); + break; + case DATA_STRUCT_INT64: + setDataType(data_struct, (int64)data, index); + break; + case DATA_STRUCT_SINT8: + setDataType(data_struct, (sint8)data, index); + break; + case DATA_STRUCT_SINT16: + setDataType(data_struct, (sint16)data, index); + break; + case DATA_STRUCT_SINT32: + setDataType(data_struct, (sint32)data, index); + break; + case DATA_STRUCT_SINT64: + setDataType(data_struct, (sint64)data, index); + break; + case DATA_STRUCT_CHAR: + setDataType(data_struct, (char)data, index); + break; + case DATA_STRUCT_FLOAT: + setDataType(data_struct, (float)data, index); + break; + case DATA_STRUCT_DOUBLE: + setDataType(data_struct, (double)data, index); + break; + case DATA_STRUCT_COLOR: + setColor(data_struct, *((EQ2_Color*)&data), index); + break; + case DATA_STRUCT_EQUIPMENT: + setEquipmentByName(data_struct, *((EQ2_EquipmentItem*)&data), index); + break; + case DATA_STRUCT_ITEM: + break; + } + } + } + + template void setSubArrayLengthByName(const char* name, Data data, int32 index1 = 0, int32 index2 = 0){ + char tmp[10] = {0}; + sprintf(tmp,"_%i",index1); + string name2 = string(name).append(tmp); + DataStruct* data_struct = findStruct(name2.c_str(), index2); + setData(data_struct, data, index2); + UpdateArrayByArrayLength(data_struct, index2, data); + } + template void setArrayLengthByName(const char* name, Data data, int32 index = 0){ + DataStruct* data_struct = findStruct(name, index); + setData(data_struct, data, index); + UpdateArrayByArrayLength(data_struct, index, data); + } + template void setSubstructArrayLengthByName(const char* substruct_name, const char* name, Data data, int32 substruct_index = 0, int32 index = 0){ + char tmp[10] = {0}; + sprintf(tmp,"_%i",substruct_index); + string name2 = string(substruct_name).append("_").append(name).append(tmp); + + DataStruct* data_struct = findStruct(name2.c_str(), index); + setData(data_struct, data, index); + UpdateArrayByArrayLength(data_struct, index, data); + } + void UpdateArrayByArrayLengthName(const char* name, int32 index, int32 size); + void UpdateArrayByArrayLength(DataStruct* data_struct, int32 index, int32 size); + void StructLoadData(DataStruct* data_struct, void* data, int32 len, bool useType2 = false); + bool LoadPacketData(uchar* data, int32 data_len); + + void setColorByName(const char* name, EQ2_Color* data, int32 index = 0){ + if(data) + setColorByName(name, data->red, data->green, data->blue, index); + } + void setColorByName(const char* name, EQ2_Color data, int32 index = 0){ + setColorByName(name, data.red, data.green, data.blue, index); + } + void setColor(DataStruct* data_struct, EQ2_Color data, int32 index = 0){ + if(data_struct){ + EQ2_Color* ptr = (EQ2_Color*)struct_data[data_struct]; + ptr[index] = data; + } + } + void setColorByName(const char* name, int8 red, int8 green, int8 blue, int32 index = 0){ + setColor(findStruct(name, index), red, green, blue, index); + } + void setColor(DataStruct* data, int8 red, int8 green, int8 blue, int32 index); + void setEquipmentByName(DataStruct* data_struct, EQ2_EquipmentItem data, int32 index = 0){ + if(data_struct){ + EQ2_EquipmentItem* ptr = (EQ2_EquipmentItem*)struct_data[data_struct]; + ptr[index] = data; + } + } +#ifdef WORLD + void setItem(DataStruct* ds, Item* item, Player* player, int32 index, sint8 offset = 0); + void setItemByName(const char* name, Item* item, Player* player, int32 index = 0, sint8 offset = 0); + void setItemArrayDataByName(const char* name, Item* item, Player* player, int32 index1 = 0, int32 index2 = 0, sint8 offset = 0); +#endif + void setEquipmentByName(const char* name, EQ2_EquipmentItem data, int32 index = 0){ + setEquipmentByName(findStruct(name, index), data, index); + } + void setEquipmentByName(const char* name, EQ2_EquipmentItem* data, int32 size){ + DataStruct* data_struct = findStruct(name, 0); + if(data_struct){ + for(int32 i=0;i* getStructs(){ return &structs; } + DataStruct* findStruct(const char* name, int32 index); + DataStruct* findStruct(const char* name, int32 index1, int32 index2); + void remove(const char* name); + void remove(int32 position); + void serializePacket(bool clear = true); + + void AddSerializedData(DataStruct* data, int32 index = 0, string* datastring = 0); + EQ2Packet* serialize(); + EQ2Packet* serializeCountPacket(int16 version, int8 offset = 0, uchar* orig_packet = 0, uchar* xor_packet = 0); + string* serializeString(); + int32 GetVersion(){ return version; } + void SetVersion(int32 in_version){ version = in_version; } + bool SetOpcode(const char* new_opcode); + EmuOpcode GetOpcode(){ return opcode; } + const char* GetName(){ return name.c_str(); } + void SetName(const char* in_name){ name = string(in_name); } + bool LoadedSuccessfully() { return loadedSuccessfully; } + bool IsStringValueType(string in_name, int32 index); + bool IsColorValueType(string in_name, int32 index); + int32 GetTotalPacketSize(); + PacketStruct* GetPacketStructByName(const char* name); + void* GetStructPointer(DataStruct* data_struct, bool erase = false); + void PrintPacket(); + string GetSQLQuery(const char* table_name); + vector GetDataStructs(); + void AddPackedData(); + void ResetData(); + +private: + PacketStruct* parent; + int32 sub_packet_size; + string opcode_type; + bool sub_packet; + bool loadedSuccessfully; + string name; + EmuOpcode opcode; + int16 version; + int16 client_version; + vector arrays; + map struct_data; + map packed_data; + map struct_map; + vector structs; + vector orig_structs; + vector orig_packets; +}; +#endif + diff --git a/EQ2/source/common/RC4.cpp b/EQ2/source/common/RC4.cpp new file mode 100644 index 000000000..15d9f78ab --- /dev/null +++ b/EQ2/source/common/RC4.cpp @@ -0,0 +1,93 @@ +/* + EQ2Emulator: Everquest II Server Emulator + Copyright (C) 2007 EQ2EMulator Development Team (http://www.eq2emulator.net) + + This file is part of EQ2Emulator. + + EQ2Emulator is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + EQ2Emulator is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with EQ2Emulator. If not, see . +*/ +#include "RC4.h" +#include + +static bool g_bInitStateInitialized = false; +static uchar g_byInitState[256]; + +RC4::RC4(int64 nKey) +{ + if( !g_bInitStateInitialized ) + { + for(int16 i = 0; i < 256; i++ ) + g_byInitState[i] = i; + } + Init(nKey); +} + +RC4::~RC4() +{ +} + +void RC4::Init(int64 nKey) +{ + memcpy(m_state, g_byInitState, 256); + m_x = 0; + m_y = 0; + + ulong dwKeyIndex = 0; + ulong dwStateIndex = 0; + uchar* pKey = (uchar*)&nKey; + for(int16 i = 0; i < 256; i++ ) + { + ulong dwTemp = m_state[i]; + dwStateIndex += pKey[dwKeyIndex] + dwTemp; + dwStateIndex &= 0xFF; + m_state[i] = m_state[dwStateIndex]; + m_state[dwStateIndex] = (uchar)dwTemp; + dwKeyIndex++; + dwKeyIndex &= 7; + } +} + +// A = m_state[X + 1] +// B = m_state[Y + A] +// C ^= m_state[(A + B)] + +// X = 20 +// Y = ? +// C = 0 +// m_state[(A + B)] = Cypher Byte + +void RC4::Cypher(uchar* pBuffer, int32 nLength) +{ + int32 nOffset = 0; + uchar byKey1 = m_x; + uchar byKey2 = m_y; + if( nLength > 0 ) + { + do + { + byKey1++; + uchar byKeyVal1 = m_state[byKey1]; + + byKey2 += byKeyVal1; + uchar byKeyVal2 = m_state[byKey2]; + + m_state[byKey1] = byKeyVal2; + m_state[byKey2] = byKeyVal1; + + pBuffer[nOffset++] ^= m_state[(byKeyVal1 + byKeyVal2) & 0xFF]; + } while( nOffset < nLength ); + } + m_x = byKey1; + m_y = byKey2; +} diff --git a/EQ2/source/common/RC4.h b/EQ2/source/common/RC4.h new file mode 100644 index 000000000..52a3ea9a3 --- /dev/null +++ b/EQ2/source/common/RC4.h @@ -0,0 +1,38 @@ +/* + EQ2Emulator: Everquest II Server Emulator + Copyright (C) 2007 EQ2EMulator Development Team (http://www.eq2emulator.net) + + This file is part of EQ2Emulator. + + EQ2Emulator is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + EQ2Emulator is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with EQ2Emulator. If not, see . +*/ +#ifndef _EQ2_RC4_H +#define _EQ2_RC4_H +#include "../common/types.h" +class RC4 +{ +public: + RC4(int64 nKey); + ~RC4(); + + void Init(int64 nKey); + void Cypher(uchar* pData, int32 nLen); + +private: + uchar m_state[256]; + uchar m_x; + uchar m_y; +}; +#endif + diff --git a/EQ2/source/common/TCPConnection.cpp b/EQ2/source/common/TCPConnection.cpp new file mode 100644 index 000000000..4f262964c --- /dev/null +++ b/EQ2/source/common/TCPConnection.cpp @@ -0,0 +1,1688 @@ +/* + EQ2Emulator: Everquest II Server Emulator + Copyright (C) 2007 EQ2EMulator Development Team (http://www.eq2emulator.net) + + This file is part of EQ2Emulator. + + EQ2Emulator is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + EQ2Emulator is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with EQ2Emulator. If not, see . +*/ +#include "../common/debug.h" + +#include +using namespace std; +#include +#include +#include +using namespace std; + +#include "TCPConnection.h" +#include "../common/servertalk.h" +#include "../common/timer.h" +#include "../common/packet_dump.h" +#include "Log.h" + +#ifdef FREEBSD //Timothy Whitman - January 7, 2003 +#define MSG_NOSIGNAL 0 +#endif + +#ifdef WIN32 +InitWinsock winsock; +#endif + +#define LOOP_GRANULARITY 3 //# of ms between checking our socket/queues +#define SERVER_LOOP_GRANULARITY 3 //# of ms between checking our socket/queues + +#define TCPN_DEBUG 0 +#define TCPN_DEBUG_Console 0 +#define TCPN_DEBUG_Memory 0 +#define TCPN_LOG_PACKETS 0 +#define TCPN_LOG_RAW_DATA_OUT 0 +#define TCPN_LOG_RAW_DATA_IN 0 + +TCPConnection::TCPNetPacket_Struct* TCPConnection::MakePacket(ServerPacket* pack, int32 iDestination) { + sint32 size = sizeof(TCPNetPacket_Struct) + pack->size; + if (pack->compressed) { + size += 4; + } + if (iDestination) { + size += 4; + } + TCPNetPacket_Struct* tnps = (TCPNetPacket_Struct*) new uchar[size]; + tnps->size = size; + tnps->opcode = pack->opcode; + *((int8*) &tnps->flags) = 0; + uchar* buffer = tnps->buffer; + if (pack->compressed) { + tnps->flags.compressed = 1; + *((sint32*) buffer) = pack->InflatedSize; + buffer += 4; + } + if (iDestination) { + tnps->flags.destination = 1; + *((sint32*) buffer) = iDestination; + buffer += 4; + } + memcpy(buffer, pack->pBuffer, pack->size); + return tnps; +} + +TCPConnection::TCPConnection(bool iOldFormat, TCPServer* iRelayServer, eTCPMode iMode) { + id = 0; + Server = iRelayServer; + if (Server) + RelayServer = true; + else + RelayServer = false; + RelayLink = 0; + RelayCount = 0; + RemoteID = 0; + pOldFormat = iOldFormat; + ConnectionType = Outgoing; + TCPMode = iMode; + pState = TCPS_Ready; + pFree = false; + pEcho = false; + sock = 0; + rIP = 0; + rPort = 0; + keepalive_timer = new Timer(SERVER_TIMEOUT); + timeout_timer = new Timer(SERVER_TIMEOUT * 2); + recvbuf = 0; + sendbuf = 0; + pRunLoop = false; + charAsyncConnect = 0; + pAsyncConnect = false; + connection_socket = 0; + recvbuf_size = 0; + recvbuf_used = 0; + recvbuf_echo = 0; + sendbuf_size = 0; + sendbuf_used = 0; +#if TCPN_DEBUG_Memory >= 7 + cout << "Constructor #1 on outgoing TCP# " << GetID() << endl; +#endif +} + +TCPConnection::TCPConnection(TCPServer* iServer, SOCKET in_socket, int32 irIP, int16 irPort, bool iOldFormat) { + Server = iServer; + RelayLink = 0; + RelayServer = false; + RelayCount = 0; + RemoteID = 0; + id = Server->GetNextID(); + ConnectionType = Incomming; + pOldFormat = iOldFormat; + TCPMode = modePacket; + pState = TCPS_Connected; + pFree = false; + pEcho = false; + sock = 0; + connection_socket = in_socket; + rIP = irIP; + rPort = irPort; + keepalive_timer = new Timer(SERVER_TIMEOUT); + timeout_timer = new Timer(SERVER_TIMEOUT * 2); + recvbuf = 0; + sendbuf = 0; + pRunLoop = false; + charAsyncConnect = 0; + pAsyncConnect = false; + recvbuf_size = 0; + recvbuf_used = 0; + recvbuf_echo = 0; + sendbuf_size = 0; + sendbuf_used = 0; +#if TCPN_DEBUG_Memory >= 7 + cout << "Constructor #2 on outgoing TCP# " << GetID() << endl; +#endif +} + +TCPConnection::TCPConnection(TCPServer* iServer, TCPConnection* iRelayLink, int32 iRemoteID, int32 irIP, int16 irPort) { + Server = iServer; + RelayLink = iRelayLink; + RelayServer = true; + id = Server->GetNextID(); + RelayCount = 0; + RemoteID = iRemoteID; + if (!RemoteID) + ThrowError("Error: TCPConnection: RemoteID == 0 on RelayLink constructor"); + pOldFormat = false; + ConnectionType = Incomming; + TCPMode = modePacket; + pState = TCPS_Connected; + pFree = false; + pEcho = false; + sock = 0; + connection_socket = 0; + rIP = irIP; + rPort = irPort; + keepalive_timer = 0; + timeout_timer = 0; + recvbuf = 0; + sendbuf = 0; + pRunLoop = false; + charAsyncConnect = 0; + pAsyncConnect = false; + recvbuf_size = 0; + recvbuf_used = 0; + recvbuf_echo = 0; + sendbuf_size = 0; + sendbuf_used = 0; +#if TCPN_DEBUG_Memory >= 7 + cout << "Constructor #3 on outgoing TCP# " << GetID() << endl; +#endif +} + +TCPConnection::~TCPConnection() { + Disconnect(); + ClearBuffers(); + if (ConnectionType == Outgoing) { + MRunLoop.lock(); + pRunLoop = false; + MRunLoop.unlock(); + MLoopRunning.lock(); + MLoopRunning.unlock(); +#if TCPN_DEBUG_Memory >= 6 + cout << "Deconstructor on outgoing TCP# " << GetID() << endl; +#endif + } +#if TCPN_DEBUG_Memory >= 5 + else { + cout << "Deconstructor on incomming TCP# " << GetID() << endl; + } +#endif + safe_delete(keepalive_timer); + safe_delete(timeout_timer); + safe_delete_array(recvbuf); + safe_delete_array(sendbuf); + safe_delete_array(charAsyncConnect); +} + +void TCPConnection::SetState(int8 in_state) { + MState.lock(); + pState = in_state; + MState.unlock(); +} + +int8 TCPConnection::GetState() { + int8 ret; + MState.lock(); + ret = pState; + MState.unlock(); + return ret; +} + +void TCPConnection::Free() { + if (ConnectionType == Outgoing) { + ThrowError("TCPConnection::Free() called on an Outgoing connection"); + } +#if TCPN_DEBUG_Memory >= 5 + cout << "Free on TCP# " << GetID() << endl; +#endif + Disconnect(); + pFree = true; +} + +bool TCPConnection::SendPacket(ServerPacket* pack, int32 iDestination) { + LockMutex lock(&MState); + if (!Connected()) + return false; + eTCPMode tmp = GetMode(); + if (tmp != modePacket && tmp != modeTransition) + return false; + if (RemoteID) + return RelayLink->SendPacket(pack, RemoteID); + else { + TCPNetPacket_Struct* tnps = MakePacket(pack, iDestination); + if (tmp == modeTransition) { + InModeQueuePush(tnps); + } + else { +#if TCPN_LOG_PACKETS >= 1 + if (pack && pack->opcode != 0) { + struct in_addr in; + in.s_addr = GetrIP(); + CoutTimestamp(true); + cout << ": Logging outgoing TCP packet. OPCode: 0x" << hex << setw(4) << setfill('0') << pack->opcode << dec << ", size: " << setw(5) << setfill(' ') << pack->size << " " << inet_ntoa(in) << ":" << GetrPort() << endl; +#if TCPN_LOG_PACKETS == 2 + if (pack->size >= 32) + DumpPacket(pack->pBuffer, 32); + else + DumpPacket(pack); +#endif +#if TCPN_LOG_PACKETS >= 3 + DumpPacket(pack); +#endif + } +#endif + ServerSendQueuePushEnd((uchar**) &tnps, tnps->size); + } + } + return true; +} + +bool TCPConnection::SendPacket(TCPNetPacket_Struct* tnps) { + LockMutex lock(&MState); + if (RemoteID) + return false; + if (!Connected()) + return false; + eTCPMode tmp = GetMode(); + if (tmp == modeTransition) { + TCPNetPacket_Struct* tnps2 = (TCPNetPacket_Struct*) new uchar[tnps->size]; + memcpy(tnps2, tnps, tnps->size); + InModeQueuePush(tnps2); + return true; + } + if (GetMode() != modePacket) + return false; +#if TCPN_LOG_PACKETS >= 1 + if (tnps && tnps->opcode != 0) { + struct in_addr in; + in.s_addr = GetrIP(); + CoutTimestamp(true); + cout << ": Logging outgoing TCP NetPacket. OPCode: 0x" << hex << setw(4) << setfill('0') << tnps->opcode << dec << ", size: " << setw(5) << setfill(' ') << tnps->size << " " << inet_ntoa(in) << ":" << GetrPort(); + if (pOldFormat) + cout << " (OldFormat)"; + cout << endl; +#if TCPN_LOG_PACKETS == 2 + if (tnps->size >= 32) + DumpPacket((uchar*) tnps, 32); + else + DumpPacket((uchar*) tnps, tnps->size); +#endif +#if TCPN_LOG_PACKETS >= 3 + DumpPacket((uchar*) tnps, tnps->size); +#endif + } +#endif + ServerSendQueuePushEnd((const uchar*) tnps, tnps->size); + return true; +} + +bool TCPConnection::Send(const uchar* data, sint32 size) { + if (!Connected()) + return false; + if (GetMode() != modeConsole) + return false; + if (!size) + return true; + ServerSendQueuePushEnd(data, size); + return true; +} + +void TCPConnection::InModeQueuePush(TCPNetPacket_Struct* tnps) { + MSendQueue.lock(); + InModeQueue.push(tnps); + MSendQueue.unlock(); +} + +void TCPConnection::ServerSendQueuePushEnd(const uchar* data, sint32 size) { + MSendQueue.lock(); + if (sendbuf == 0) { + sendbuf = new uchar[size]; + sendbuf_size = size; + sendbuf_used = 0; + } + else if (size > (sendbuf_size - sendbuf_used)) { + sendbuf_size += size + 1024; + uchar* tmp = new uchar[sendbuf_size]; + memcpy(tmp, sendbuf, sendbuf_used); + safe_delete_array(sendbuf); + sendbuf = tmp; + } + memcpy(&sendbuf[sendbuf_used], data, size); + sendbuf_used += size; + MSendQueue.unlock(); +} + +void TCPConnection::ServerSendQueuePushEnd(uchar** data, sint32 size) { + MSendQueue.lock(); + if (sendbuf == 0) { + sendbuf = *data; + sendbuf_size = size; + sendbuf_used = size; + MSendQueue.unlock(); + *data = 0; + return; + } + if (size > (sendbuf_size - sendbuf_used)) { + sendbuf_size += size; + uchar* tmp = new uchar[sendbuf_size]; + memcpy(tmp, sendbuf, sendbuf_used); + safe_delete_array(sendbuf); + sendbuf = tmp; + } + memcpy(&sendbuf[sendbuf_used], *data, size); + sendbuf_used += size; + MSendQueue.unlock(); + delete[] (TCPNetPacket_Struct*)*data; +} + +void TCPConnection::ServerSendQueuePushFront(uchar* data, sint32 size) { + MSendQueue.lock(); + if (sendbuf == 0) { + sendbuf = new uchar[size]; + sendbuf_size = size; + sendbuf_used = 0; + } + else if (size > (sendbuf_size - sendbuf_used)) { + sendbuf_size += size; + uchar* tmp = new uchar[sendbuf_size]; + memcpy(&tmp[size], sendbuf, sendbuf_used); + safe_delete_array(sendbuf); + sendbuf = tmp; + } + memcpy(sendbuf, data, size); + sendbuf_used += size; + MSendQueue.unlock(); +} + +bool TCPConnection::ServerSendQueuePop(uchar** data, sint32* size) { + bool ret; + if (!MSendQueue.trylock()) + return false; + if (sendbuf) { + *data = sendbuf; + *size = sendbuf_used; + sendbuf = 0; + ret = true; + } + else { + ret = false; + } + MSendQueue.unlock(); + return ret; +} + +ServerPacket* TCPConnection::PopPacket() { + ServerPacket* ret; + if (!MOutQueueLock.trylock()) + return 0; + ret = OutQueue.pop(); + MOutQueueLock.unlock(); + return ret; +} + +char* TCPConnection::PopLine() { + char* ret; + if (!MOutQueueLock.trylock()) + return 0; + ret = (char*) LineOutQueue.pop(); + MOutQueueLock.unlock(); + return ret; +} + +void TCPConnection::OutQueuePush(ServerPacket* pack) { + MOutQueueLock.lock(); + OutQueue.push(pack); + MOutQueueLock.unlock(); +} + +void TCPConnection::LineOutQueuePush(char* line) { +#if defined(GOTFRAGS) && 0 + if (strcmp(line, "**CRASHME**") == 0) { + int i = 0; + cout << (5 / i) << endl; + } +#endif + if (strcmp(line, "**PACKETMODE**") == 0) { + MSendQueue.lock(); + safe_delete_array(sendbuf); + if (TCPMode == modeConsole) + Send((const uchar*) "\0**PACKETMODE**\r", 16); + TCPMode = modePacket; + TCPNetPacket_Struct* tnps = 0; + while ((tnps = InModeQueue.pop())) { + SendPacket(tnps); + safe_delete_array(tnps); + } + MSendQueue.unlock(); + safe_delete_array(line); + return; + } + MOutQueueLock.lock(); + LineOutQueue.push(line); + MOutQueueLock.unlock(); +} + +void TCPConnection::Disconnect(bool iSendRelayDisconnect) { + if (connection_socket != INVALID_SOCKET && connection_socket != 0) { + MState.lock(); + if (pState == TCPS_Connected || pState == TCPS_Disconnecting || pState == TCPS_Disconnected) + SendData(); + pState = TCPS_Closing; + MState.unlock(); + shutdown(connection_socket, 0x01); + shutdown(connection_socket, 0x00); +#ifdef WIN32 + closesocket(connection_socket); +#else + close(connection_socket); +#endif + connection_socket = 0; + rIP = 0; + rPort = 0; + ClearBuffers(); + } + SetState(TCPS_Ready); + if (RelayLink) { + RelayLink->RemoveRelay(this, iSendRelayDisconnect); + RelayLink = 0; + } +} + +bool TCPConnection::GetAsyncConnect() { + bool ret; + MAsyncConnect.lock(); + ret = pAsyncConnect; + MAsyncConnect.unlock(); + return ret; +} + +bool TCPConnection::SetAsyncConnect(bool iValue) { + bool ret; + MAsyncConnect.lock(); + ret = pAsyncConnect; + pAsyncConnect = iValue; + MAsyncConnect.unlock(); + return ret; +} + +void TCPConnection::AsyncConnect(char* irAddress, int16 irPort) { + if (ConnectionType != Outgoing) { + // If this code runs, we got serious problems + // Crash and burn. + ThrowError("TCPConnection::AsyncConnect() call on a Incomming connection object!"); + return; + } + if (GetState() != TCPS_Ready) + return; + MAsyncConnect.lock(); + if (pAsyncConnect) { + MAsyncConnect.unlock(); + return; + } + pAsyncConnect = true; + safe_delete_array(charAsyncConnect); + charAsyncConnect = new char[strlen(irAddress) + 1]; + strcpy(charAsyncConnect, irAddress); + rPort = irPort; + MAsyncConnect.unlock(); + if (!pRunLoop) { + pRunLoop = true; +#ifdef WIN32 + _beginthread(TCPConnectionLoop, 0, this); +#else + pthread_t thread; + pthread_create(&thread, NULL, TCPConnectionLoop, this); + pthread_detach(thread); +#endif + } + return; +} + +void TCPConnection::AsyncConnect(int32 irIP, int16 irPort) { + if (ConnectionType != Outgoing) { + // If this code runs, we got serious problems + // Crash and burn. + ThrowError("TCPConnection::AsyncConnect() call on a Incomming connection object!"); + return; + } + if (GetState() != TCPS_Ready) + return; + MAsyncConnect.lock(); + if (pAsyncConnect) { + MAsyncConnect.unlock(); + return; + } + pAsyncConnect = true; + safe_delete(charAsyncConnect); + rIP = irIP; + rPort = irPort; + MAsyncConnect.unlock(); + if (!pRunLoop) { + pRunLoop = true; +#ifdef WIN32 + _beginthread(TCPConnectionLoop, 0, this); +#else + pthread_t thread; + pthread_create(&thread, NULL, TCPConnectionLoop, this); + pthread_detach(thread); +#endif + } + return; +} + +bool TCPConnection::Connect(char* irAddress, int16 irPort, char* errbuf) { + if (errbuf) + errbuf[0] = 0; + int32 tmpIP = ResolveIP(irAddress); + if (!tmpIP) { + if (errbuf) { +#ifdef WIN32 + snprintf(errbuf, TCPConnection_ErrorBufferSize, "TCPConnection::Connect(): Couldnt resolve hostname. Error: %i", WSAGetLastError()); +#else + snprintf(errbuf, TCPConnection_ErrorBufferSize, "TCPConnection::Connect(): Couldnt resolve hostname. Error #%i: %s", errno, strerror(errno)); +#endif + } + return false; + } + return Connect(tmpIP, irPort, errbuf); +} + +bool TCPConnection::Connect(int32 in_ip, int16 in_port, char* errbuf) { + if (errbuf) + errbuf[0] = 0; + if (ConnectionType != Outgoing) { + // If this code runs, we got serious problems + // Crash and burn. + ThrowError("TCPConnection::Connect() call on a Incomming connection object!"); + return false; + } + MState.lock(); + if (pState == TCPS_Ready) { + pState = TCPS_Connecting; + } + else { + MState.unlock(); + SetAsyncConnect(false); + return false; + } + MState.unlock(); + if (!pRunLoop) { + pRunLoop = true; +#ifdef WIN32 + _beginthread(TCPConnectionLoop, 0, this); +#else + pthread_t thread; + pthread_create(&thread, NULL, TCPConnectionLoop, this); + pthread_detach(thread); +#endif + } + + connection_socket = INVALID_SOCKET; + struct sockaddr_in server_sin; + // struct in_addr in; + + if ((connection_socket = socket(AF_INET, SOCK_STREAM, 0)) == INVALID_SOCKET || connection_socket == 0) { +#ifdef WIN32 + if (errbuf) + snprintf(errbuf, TCPConnection_ErrorBufferSize, "TCPConnection::Connect(): Allocating socket failed. Error: %i", WSAGetLastError()); +#else + if (errbuf) + snprintf(errbuf, TCPConnection_ErrorBufferSize, "TCPConnection::Connect(): Allocating socket failed. Error: %s", strerror(errno)); +#endif + SetState(TCPS_Ready); + SetAsyncConnect(false); + return false; + } + server_sin.sin_family = AF_INET; + server_sin.sin_addr.s_addr = in_ip; + server_sin.sin_port = htons(in_port); + + // Establish a connection to the server socket. +#ifdef WIN32 + if (connect(connection_socket, (PSOCKADDR) &server_sin, sizeof (server_sin)) == SOCKET_ERROR) { + if (errbuf) + snprintf(errbuf, TCPConnection_ErrorBufferSize, "TCPConnection::Connect(): connect() failed. Error: %i", WSAGetLastError()); + closesocket(connection_socket); + connection_socket = 0; + SetState(TCPS_Ready); + SetAsyncConnect(false); + return false; + } +#else + if (connect(connection_socket, (struct sockaddr *) &server_sin, sizeof (server_sin)) == SOCKET_ERROR) { + if (errbuf) + snprintf(errbuf, TCPConnection_ErrorBufferSize, "TCPConnection::Connect(): connect() failed. Error: %s", strerror(errno)); + close(connection_socket); + connection_socket = 0; + SetState(TCPS_Ready); + SetAsyncConnect(false); + return false; + } +#endif + int bufsize = 64 * 1024; // 64kbyte recieve buffer, up from default of 8k + setsockopt(connection_socket, SOL_SOCKET, SO_RCVBUF, (char*) &bufsize, sizeof(bufsize)); +#ifdef WIN32 + unsigned long nonblocking = 1; + ioctlsocket(connection_socket, FIONBIO, &nonblocking); +#else + fcntl(connection_socket, F_SETFL, O_NONBLOCK); +#endif + + SetEcho(false); + MSendQueue.lock(); + ClearBuffers(); + TCPMode = modePacket; + + MSendQueue.unlock(); + + rIP = in_ip; + rPort = in_port; + SetState(TCPS_Connected); + SetAsyncConnect(false); + return true; +} + +void TCPConnection::ClearBuffers() { + LockMutex lock1(&MSendQueue); + LockMutex lock2(&MOutQueueLock); + LockMutex lock3(&MRunLoop); + LockMutex lock4(&MState); + safe_delete_array(recvbuf); + safe_delete_array(sendbuf); + ServerPacket* pack = 0; + while ((pack = PopPacket())) + safe_delete(pack); + TCPNetPacket_Struct* tnps = 0; + while ((tnps = InModeQueue.pop())) + safe_delete(tnps); + char* line = 0; + while ((line = LineOutQueue.pop())) + safe_delete_array(line); + keepalive_timer->Start(); + timeout_timer->Start(); +} + +bool TCPConnection::CheckNetActive() { + MState.lock(); + if (pState == TCPS_Connected || pState == TCPS_Disconnecting) { + MState.unlock(); + return true; + } + MState.unlock(); + return false; +} + +bool TCPConnection::Process() { + char errbuf[TCPConnection_ErrorBufferSize]; + if (!CheckNetActive()) { + if (ConnectionType == Outgoing) { + if (GetAsyncConnect()) { + if (charAsyncConnect) + rIP = ResolveIP(charAsyncConnect); + Connect(rIP, rPort); + } + } + if (GetState() == TCPS_Disconnected) { + Disconnect(); + return false; + } + else if (GetState() == TCPS_Connecting) + return true; + else + return false; + } + if (!SendData(errbuf)) { + struct in_addr in; + in.s_addr = GetrIP(); + cout << inet_ntoa(in) << ":" << GetrPort() << ": " << errbuf << endl; + return false; + } + if (!Connected()) + return false; + if (!RecvData(errbuf)) { + struct in_addr in; + in.s_addr = GetrIP(); + cout << inet_ntoa(in) << ":" << GetrPort() << ": " << errbuf << endl; + return false; + } + return true; +} + +bool TCPConnection::RecvData(char* errbuf) { + if (errbuf) + errbuf[0] = 0; + if (!Connected()) { + return false; + } + + int status = 0; + if (recvbuf == 0) { + recvbuf = new uchar[5120]; + recvbuf_size = 5120; + recvbuf_used = 0; + recvbuf_echo = 0; + } + else if ((recvbuf_size - recvbuf_used) < 2048) { + uchar* tmpbuf = new uchar[recvbuf_size + 5120]; + memcpy(tmpbuf, recvbuf, recvbuf_used); + recvbuf_size += 5120; + safe_delete_array(recvbuf); + recvbuf = tmpbuf; + if (recvbuf_size >= MaxTCPReceiveBufferSize) { + if (errbuf) + snprintf(errbuf, TCPConnection_ErrorBufferSize, "TCPConnection::RecvData(): recvbuf_size >= MaxTCPReceiveBufferSize"); + return false; + } + } + + status = recv(connection_socket, (char *) &recvbuf[recvbuf_used], (recvbuf_size - recvbuf_used), 0); + if (status >= 1) { +#if TCPN_LOG_RAW_DATA_IN >= 1 + struct in_addr in; + in.s_addr = GetrIP(); + CoutTimestamp(true); + cout << ": Read " << status << " bytes from network. (recvbuf_used = " << recvbuf_used << ") " << inet_ntoa(in) << ":" << GetrPort(); + if (pOldFormat) + cout << " (OldFormat)"; + cout << endl; +#if TCPN_LOG_RAW_DATA_IN == 2 + sint32 tmp = status; + if (tmp > 32) + tmp = 32; + DumpPacket(&recvbuf[recvbuf_used], status); +#elif TCPN_LOG_RAW_DATA_IN >= 3 + DumpPacket(&recvbuf[recvbuf_used], status); +#endif +#endif + recvbuf_used += status; + timeout_timer->Start(); + if (!ProcessReceivedData(errbuf)) + return false; + } + else if (status == SOCKET_ERROR) { +#ifdef WIN32 + if (!(WSAGetLastError() == WSAEWOULDBLOCK)) { + if (errbuf) + snprintf(errbuf, TCPConnection_ErrorBufferSize, "TCPConnection::RecvData(): Error: %i", WSAGetLastError()); + return false; + } +#else + if (!(errno == EWOULDBLOCK)) { + if (errbuf) + snprintf(errbuf, TCPConnection_ErrorBufferSize, "TCPConnection::RecvData(): Error: %s", strerror(errno)); + return false; + } +#endif + } + if ((TCPMode == modePacket || TCPMode == modeTransition) && timeout_timer->Check()) { + if (errbuf) + snprintf(errbuf, TCPConnection_ErrorBufferSize, "TCPConnection::RecvData(): Connection timeout"); + return false; + } + + return true; +} + + +bool TCPConnection::GetEcho() { + bool ret; + MEcho.lock(); + ret = pEcho; + MEcho.unlock(); + return ret; +} + +void TCPConnection::SetEcho(bool iValue) { + MEcho.lock(); + pEcho = iValue; + MEcho.unlock(); +} + +bool TCPConnection::ProcessReceivedData(char* errbuf) { + if (errbuf) + errbuf[0] = 0; + if (!recvbuf) + return true; + if (TCPMode == modePacket) { + //if (pOldFormat) + // return ProcessReceivedDataAsOldPackets(errbuf); + //else + return ProcessReceivedDataAsPackets(errbuf); + } + else { +#if TCPN_DEBUG_Console >= 4 + if (recvbuf_used) { + cout << "Starting Processing: recvbuf=" << recvbuf_used << endl; + DumpPacket(recvbuf, recvbuf_used); + } +#endif + for (int i=0; i < recvbuf_used; i++) { + if (GetEcho() && i >= recvbuf_echo) { + Send(&recvbuf[i], 1); + recvbuf_echo = i + 1; + } + switch(recvbuf[i]) { + case 0: { // 0 is the code for clear buffer + if (i==0) { + recvbuf_used--; + recvbuf_echo--; + memcpy(recvbuf, &recvbuf[1], recvbuf_used); + i = -1; + } else { + if (i == recvbuf_used) { + safe_delete_array(recvbuf); + i = -1; + } + else { + uchar* tmpdel = recvbuf; + recvbuf = new uchar[recvbuf_size]; + memcpy(recvbuf, &tmpdel[i+1], recvbuf_used-i); + recvbuf_used -= i + 1; + recvbuf_echo -= i + 1; + safe_delete(tmpdel); + i = -1; + } + } +#if TCPN_DEBUG_Console >= 5 + cout << "Removed 0x00" << endl; + if (recvbuf_used) { + cout << "recvbuf left: " << recvbuf_used << endl; + DumpPacket(recvbuf, recvbuf_used); + } + else + cout << "recbuf left: None" << endl; +#endif + break; + } + case 10: + case 13: // newline marker + { + if (i==0) { // empty line + recvbuf_used--; + recvbuf_echo--; + memcpy(recvbuf, &recvbuf[1], recvbuf_used); + i = -1; + } else { + char* line = new char[i+1]; + memset(line, 0, i+1); + memcpy(line, recvbuf, i); +#if TCPN_DEBUG_Console >= 3 + cout << "Line Out: " << endl; + DumpPacket((uchar*) line, i); +#endif + //line[i] = 0; + uchar* tmpdel = recvbuf; + recvbuf = new uchar[recvbuf_size]; + recvbuf_used -= i+1; + recvbuf_echo -= i+1; + memcpy(recvbuf, &tmpdel[i+1], recvbuf_used); +#if TCPN_DEBUG_Console >= 5 + cout << "i+1=" << i+1 << endl; + if (recvbuf_used) { + cout << "recvbuf left: " << recvbuf_used << endl; + DumpPacket(recvbuf, recvbuf_used); + } + else + cout << "recbuf left: None" << endl; +#endif + safe_delete(tmpdel); + if (strlen(line) > 0) + LineOutQueuePush(line); + else + safe_delete_array(line); + if (TCPMode == modePacket) { + return ProcessReceivedDataAsPackets(errbuf); + } + i = -1; + } + break; + } + case 8: // backspace + { + if (i==0) { // nothin to backspace + recvbuf_used--; + recvbuf_echo--; + memcpy(recvbuf, &recvbuf[1], recvbuf_used); + i = -1; + } else { + uchar* tmpdel = recvbuf; + recvbuf = new uchar[recvbuf_size]; + memcpy(recvbuf, tmpdel, i-1); + memcpy(&recvbuf[i-1], &tmpdel[i+1], recvbuf_used-i); + recvbuf_used -= 2; + recvbuf_echo -= 2; + safe_delete(tmpdel); + i -= 2; + } + break; + } + } + } + if (recvbuf_used < 0) + safe_delete_array(recvbuf); + } + return true; +} + +bool TCPConnection::ProcessReceivedDataAsPackets(char* errbuf) { + if (errbuf) + errbuf[0] = 0; + sint32 base = 0; + sint32 size = 7; + uchar* buffer; + ServerPacket* pack = 0; + while ((recvbuf_used - base) >= size) { + TCPNetPacket_Struct* tnps = (TCPNetPacket_Struct*) &recvbuf[base]; + buffer = tnps->buffer; + size = tnps->size; + if (size >= MaxTCPReceiveBufferSize) { +#if TCPN_DEBUG_Memory >= 1 + cout << "TCPConnection[" << GetID() << "]::ProcessReceivedDataAsPackets(): size[" << size << "] >= MaxTCPReceiveBufferSize" << endl; +#endif + if (errbuf) + snprintf(errbuf, TCPConnection_ErrorBufferSize, "TCPConnection::ProcessReceivedDataAsPackets(): size >= MaxTCPReceiveBufferSize"); + return false; + } + if ((recvbuf_used - base) >= size) { + // ok, we got enough data to make this packet! + safe_delete(pack); + pack = new ServerPacket; + pack->size = size - sizeof(TCPNetPacket_Struct); + // read headers + pack->opcode = tnps->opcode; + if (tnps->flags.compressed) { + pack->compressed = true; + pack->InflatedSize = *((sint32*)buffer); + pack->size -= 4; + buffer += 4; + } + if (tnps->flags.destination) { + pack->destination = *((sint32*)buffer); + pack->size -= 4; + buffer += 4; + } + // end read headers + if (pack->size > 0) { + if (tnps->flags.compressed) { + // Lets decompress the packet here + pack->compressed = false; + if(pack->InflatedSize < MaxTCPReceiveBufferSize) + { + pack->pBuffer = new uchar[pack->InflatedSize]; + pack->size = InflatePacket(buffer, pack->size, pack->pBuffer, pack->InflatedSize); + } + else + { + cout << "Invalid inflated packet." << endl; + safe_delete(pack); + return false; + } + } + else { + pack->pBuffer = new uchar[pack->size]; + memcpy(pack->pBuffer, buffer, pack->size); + } + } + if (pack->opcode == 0) { + if (pack->size) { +#if TCPN_DEBUG >= 2 + cout << "Received TCP Network layer packet" << endl; +#endif + ProcessNetworkLayerPacket(pack); + } +#if TCPN_DEBUG >= 5 + else { + cout << "Received TCP keepalive packet. (opcode=0)" << endl; + } +#endif + } + else { +#if TCPN_LOG_PACKETS >= 1 + if (pack && pack->opcode != 0) { + struct in_addr in; + in.s_addr = GetrIP(); + CoutTimestamp(true); + cout << ": Logging incoming TCP packet. OPCode: 0x" << hex << setw(4) << setfill('0') << pack->opcode << dec << ", size: " << setw(5) << setfill(' ') << pack->size << " " << inet_ntoa(in) << ":" << GetrPort() << endl; +#if TCPN_LOG_PACKETS == 2 + if (pack->size >= 32) + DumpPacket(pack->pBuffer, 32); + else + DumpPacket(pack); +#endif +#if TCPN_LOG_PACKETS >= 3 + DumpPacket(pack); +#endif + } +#endif + if (RelayServer && Server && pack->destination) { + TCPConnection* con = Server->GetConnection(pack->destination); + if (!con) { +#if TCPN_DEBUG >= 1 + cout << "Error relaying packet: con = 0" << endl; +#endif + } + else{ + con->OutQueuePush(pack); + pack = 0; + } + } + else{ + OutQueuePush(pack); + pack = 0; + } + } + base += size; + size = 7; + } + } + safe_delete(pack); + if (base != 0) { + if (base >= recvbuf_used) { + safe_delete_array(recvbuf); + } + else { + uchar* tmpbuf = new uchar[recvbuf_size - base]; + memcpy(tmpbuf, &recvbuf[base], recvbuf_used - base); + safe_delete_array(recvbuf); + recvbuf = tmpbuf; + recvbuf_used -= base; + recvbuf_size -= base; + } + } + return true; +} + +bool TCPConnection::ProcessReceivedDataAsOldPackets(char* errbuf) { + sint32 base = 0; + sint32 size = 4; + uchar* buffer; + ServerPacket* pack = 0; + while ((recvbuf_used - base) >= size) { + buffer = &recvbuf[base]; + memcpy(&size, &buffer[2], 2); + if (size >= MaxTCPReceiveBufferSize) { +#if TCPN_DEBUG_Memory >= 1 + cout << "TCPConnection[" << GetID() << "]::ProcessReceivedDataAsPackets(): size[" << size << "] >= MaxTCPReceiveBufferSize" << endl; +#endif + if (errbuf) + snprintf(errbuf, TCPConnection_ErrorBufferSize, "TCPConnection::ProcessReceivedDataAsPackets(): size >= MaxTCPReceiveBufferSize"); + return false; + } + if ((recvbuf_used - base) >= size) { + // ok, we got enough data to make this packet! + pack = new ServerPacket; + memcpy(&pack->opcode, &buffer[0], 2); + pack->size = size - 4; + + LogWrite(MISC__TODO, 1, "TODO", "Checksum or size check or something similar\n\t(%s, function: %s, line #: %i)", __FILE__, __FUNCTION__, __LINE__); + /* + if () { // TODO: Checksum or size check or something similar + // Datastream corruption, get the hell outta here! + delete pack; + return false; + } + */ + + if (pack->size > 0) { + pack->pBuffer = new uchar[pack->size]; + memcpy(pack->pBuffer, &buffer[4], pack->size); + } + if (pack->opcode == 0) { + // keepalive, no need to process + safe_delete(pack); + } + else { +#if TCPN_LOG_PACKETS >= 1 + if (pack && pack->opcode != 0) { + struct in_addr in; + in.s_addr = GetrIP(); + CoutTimestamp(true); + cout << ": Logging incoming TCP OldPacket. OPCode: 0x" << hex << setw(4) << setfill('0') << pack->opcode << dec << ", size: " << setw(5) << setfill(' ') << pack->size << " " << inet_ntoa(in) << ":" << GetrPort() << endl; +#if TCPN_LOG_PACKETS == 2 + if (pack->size >= 32) + DumpPacket(pack->pBuffer, 32); + else + DumpPacket(pack); +#endif +#if TCPN_LOG_PACKETS >= 3 + DumpPacket(pack); +#endif + } +#endif + OutQueuePush(pack); + } + base += size; + size = 4; + } + } + if (base != 0) { + if (base >= recvbuf_used) { + safe_delete_array(recvbuf); + } + else { + uchar* tmpbuf = new uchar[recvbuf_size - base]; + memcpy(tmpbuf, &recvbuf[base], recvbuf_used - base); + safe_delete_array(recvbuf); + recvbuf = tmpbuf; + recvbuf_used -= base; + recvbuf_size -= base; + } + } + return true; +} + +void TCPConnection::ProcessNetworkLayerPacket(ServerPacket* pack) { + int8 opcode = pack->pBuffer[0]; + int8* data = &pack->pBuffer[1]; + switch (opcode) { + case 0: { + break; + } + case 1: { // Switch to RelayServer mode + if (pack->size != 1) { + SendNetErrorPacket("New RelayClient: wrong size, expected 1"); + break; + } + if (RelayServer) { + SendNetErrorPacket("Switch to RelayServer mode when already in RelayServer mode"); + break; + } + if (RemoteID) { + SendNetErrorPacket("Switch to RelayServer mode by a Relay Client"); + break; + } + if (ConnectionType != Incomming) { + SendNetErrorPacket("Switch to RelayServer mode on outgoing connection"); + break; + } +#if TCPC_DEBUG >= 3 + struct in_addr in; + in.s_addr = GetrIP(); + cout << "Switching to RelayServer mode: " << inet_ntoa(in) << ":" << GetPort() << endl; +#endif + RelayServer = true; + break; + } + case 2: { // New Relay Client + if (!RelayServer) { + SendNetErrorPacket("New RelayClient when not in RelayServer mode"); + break; + } + if (pack->size != 11) { + SendNetErrorPacket("New RelayClient: wrong size, expected 11"); + break; + } + if (ConnectionType != Incomming) { + SendNetErrorPacket("New RelayClient: illegal on outgoing connection"); + break; + } + TCPConnection* con = new TCPConnection(Server, this, *((int32*) data), *((int32*) &data[4]), *((int16*) &data[8])); + Server->AddConnection(con); + RelayCount++; + break; + } + case 3: { // Delete Relay Client + if (!RelayServer) { + SendNetErrorPacket("Delete RelayClient when not in RelayServer mode"); + break; + } + if (pack->size != 5) { + SendNetErrorPacket("Delete RelayClient: wrong size, expected 5"); + break; + } + TCPConnection* con = Server->GetConnection(*((int32*)data)); + if (con) { + if (ConnectionType == Incomming) { + if (con->GetRelayLink() != this) { + SendNetErrorPacket("Delete RelayClient: RelayLink != this"); + break; + } + } + con->Disconnect(false); + } + break; + } + case 255: { +#if TCPC_DEBUG >= 1 + struct in_addr in; + in.s_addr = GetrIP(); + cout "Received NetError: '"; + if (pack->size > 1) + cout << (char*) data; + cout << "': " << inet_ntoa(in) << ":" << GetPort() << endl; +#endif + break; + } + } +} + +void TCPConnection::SendNetErrorPacket(const char* reason) { +#if TCPC_DEBUG >= 1 + struct in_addr in; + in.s_addr = GetrIP(); + cout "NetError: '"; + if (reason) + cout << reason; + cout << "': " << inet_ntoa(in) << ":" << GetPort() << endl; +#endif + ServerPacket* pack = new ServerPacket(0); + pack->size = 1; + if (reason) + pack->size += strlen(reason) + 1; + pack->pBuffer = new uchar[pack->size]; + memset(pack->pBuffer, 0, pack->size); + pack->pBuffer[0] = 255; + strcpy((char*) &pack->pBuffer[1], reason); + SendPacket(pack); + safe_delete(pack); +} + +void TCPConnection::RemoveRelay(TCPConnection* relay, bool iSendRelayDisconnect) { + if (iSendRelayDisconnect) { + ServerPacket* pack = new ServerPacket(0, 5); + pack->pBuffer[0] = 3; + *((int32*) &pack->pBuffer[1]) = relay->GetRemoteID(); + SendPacket(pack); + safe_delete(pack); + } + RelayCount--; +} + +bool TCPConnection::SendData(char* errbuf) { + if (errbuf) + errbuf[0] = 0; + /************ Get first send packet on queue and send it! ************/ + uchar* data = 0; + sint32 size = 0; + int status = 0; + if (ServerSendQueuePop(&data, &size)) { +#ifdef WIN32 + status = send(connection_socket, (const char *) data, size, 0); +#else + status = send(connection_socket, data, size, MSG_NOSIGNAL); + if(errno==EPIPE) status = SOCKET_ERROR; +#endif + if (status >= 1) { +#if TCPN_LOG_RAW_DATA_OUT >= 1 + struct in_addr in; + in.s_addr = GetrIP(); + CoutTimestamp(true); + cout << ": Wrote " << status << " bytes to network. " << inet_ntoa(in) << ":" << GetrPort(); + if (pOldFormat) + cout << " (OldFormat)"; + cout << endl; +#if TCPN_LOG_RAW_DATA_OUT == 2 + sint32 tmp = status; + if (tmp > 32) + tmp = 32; + DumpPacket(data, status); +#elif TCPN_LOG_RAW_DATA_OUT >= 3 + DumpPacket(data, status); +#endif +#endif + keepalive_timer->Start(); + if (status < (signed)size) { +#if TCPN_LOG_RAW_DATA_OUT >= 1 + struct in_addr in; + in.s_addr = GetrIP(); + CoutTimestamp(true); + cout << ": Pushed " << (size - status) << " bytes back onto the send queue. " << inet_ntoa(in) << ":" << GetrPort(); + if (pOldFormat) + cout << " (OldFormat)"; + cout << endl; +#endif + // If there's network congestion, the number of bytes sent can be less than + // what we tried to give it... Push the extra back on the queue for later + ServerSendQueuePushFront(&data[status], size - status); + } + else if (status > (signed)size) { + ThrowError("TCPConnection::SendData(): WTF! status > size"); + return false; + } + // else if (status == size) {} + } + else { + ServerSendQueuePushFront(data, size); + } + + safe_delete_array(data); + if (status == SOCKET_ERROR) { +#ifdef WIN32 + if (WSAGetLastError() != WSAEWOULDBLOCK) +#else + if (errno != EWOULDBLOCK) +#endif + { + if (errbuf) { +#ifdef WIN32 + snprintf(errbuf, TCPConnection_ErrorBufferSize, "TCPConnection::SendData(): send(): Errorcode: %i", WSAGetLastError()); +#else + snprintf(errbuf, TCPConnection_ErrorBufferSize, "TCPConnection::SendData(): send(): Errorcode: %s", strerror(errno)); +#endif + } + return false; + } + } + } + if (TCPMode == modePacket && keepalive_timer->Check()) { + ServerPacket* pack = new ServerPacket(0, 0); + SendPacket(pack); + safe_delete(pack); +#if TCPN_DEBUG >= 5 + cout << "Sending TCP keepalive packet. (timeout=" << timeout_timer->GetRemainingTime() << " remaining)" << endl; +#endif + } + return true; +} + +ThreadReturnType TCPConnectionLoop(void* tmp) { +#ifdef WIN32 + SetThreadPriority(GetCurrentThread(), THREAD_PRIORITY_ABOVE_NORMAL); +#endif + if (tmp == 0) { + ThrowError("TCPConnectionLoop(): tmp = 0!"); + THREAD_RETURN(NULL); + } + TCPConnection* tcpc = (TCPConnection*) tmp; + tcpc->MLoopRunning.lock(); + while (tcpc->RunLoop()) { + Sleep(LOOP_GRANULARITY); + if (tcpc->GetState() != TCPS_Ready) { + if (!tcpc->Process()) { + tcpc->Disconnect(); + } + } + else if (tcpc->GetAsyncConnect()) { + if (tcpc->charAsyncConnect) + tcpc->Connect(tcpc->charAsyncConnect, tcpc->GetrPort()); + else + tcpc->Connect(tcpc->GetrIP(), tcpc->GetrPort()); + tcpc->SetAsyncConnect(false); + } + else + Sleep(10); + } + tcpc->MLoopRunning.unlock(); + + THREAD_RETURN(NULL); +} + +bool TCPConnection::RunLoop() { + bool ret; + MRunLoop.lock(); + ret = pRunLoop; + MRunLoop.unlock(); + return ret; +} + + + + + +TCPServer::TCPServer(int16 in_port, bool iOldFormat) { + NextID = 1; + pPort = in_port; + sock = 0; + pOldFormat = iOldFormat; + list = new LinkedList; + pRunLoop = true; +#ifdef WIN32 + _beginthread(TCPServerLoop, 0, this); +#else + pthread_t thread; + pthread_create(&thread, NULL, &TCPServerLoop, this); + pthread_detach(thread); +#endif +} + +TCPServer::~TCPServer() { + MRunLoop.lock(); + pRunLoop = false; + MRunLoop.unlock(); + MLoopRunning.lock(); + MLoopRunning.unlock(); + + while (NewQueue.pop()); // the objects are deleted with the list, clear this queue so it doesnt try to delete them again + safe_delete(list); +} + +bool TCPServer::RunLoop() { + bool ret; + MRunLoop.lock(); + ret = pRunLoop; + MRunLoop.unlock(); + return ret; +} + +ThreadReturnType TCPServerLoop(void* tmp) { +#ifdef WIN32 + SetThreadPriority(GetCurrentThread(), THREAD_PRIORITY_ABOVE_NORMAL); +#endif + if (tmp == 0) { + ThrowError("TCPServerLoop(): tmp = 0!"); + THREAD_RETURN(NULL); + } + TCPServer* tcps = (TCPServer*) tmp; + tcps->MLoopRunning.lock(); + while (tcps->RunLoop()) { + Sleep(SERVER_LOOP_GRANULARITY); + tcps->Process(); + } + tcps->MLoopRunning.unlock(); + + THREAD_RETURN(NULL); +} + +void TCPServer::Process() { + CheckInQueue(); + ListenNewConnections(); + LinkedListIterator iterator(*list); + + iterator.Reset(); + while(iterator.MoreElements()) { + if (iterator.GetData()->IsFree() && (!iterator.GetData()->CheckNetActive())) { +#if _DEBUG + LogWrite(NET__DEBUG, 0, "Net", "EQStream Connection deleted."); +#endif + iterator.RemoveCurrent(); + } + else { + if (!iterator.GetData()->Process()) + iterator.GetData()->Disconnect(); + iterator.Advance(); + } + } +} + +void TCPServer::ListenNewConnections() { + SOCKET tmpsock; + struct sockaddr_in from; + struct in_addr in; + unsigned int fromlen; + + TCPConnection* con; + + from.sin_family = AF_INET; + fromlen = sizeof(from); + LockMutex lock(&MSock); + if (!sock) + return; + + // Check for pending connects +#ifdef WIN32 + unsigned long nonblocking = 1; + while ((tmpsock = accept(sock, (struct sockaddr*) &from, (int *) &fromlen)) != INVALID_SOCKET) { + ioctlsocket (tmpsock, FIONBIO, &nonblocking); +#else + while ((tmpsock = accept(sock, (struct sockaddr*) &from, &fromlen)) != INVALID_SOCKET) { + fcntl(tmpsock, F_SETFL, O_NONBLOCK); +#endif + int bufsize = 64 * 1024; // 64kbyte recieve buffer, up from default of 8k + setsockopt(tmpsock, SOL_SOCKET, SO_RCVBUF, (char*) &bufsize, sizeof(bufsize)); + in.s_addr = from.sin_addr.s_addr; + + // New TCP connection + con = new TCPConnection(this, tmpsock, in.s_addr, ntohs(from.sin_port), pOldFormat); +#if TCPN_DEBUG >= 1 + cout << "New TCP connection: " << inet_ntoa(in) << ":" << con->GetrPort() << endl; +#endif + AddConnection(con); + } +} + +bool TCPServer::Open(int16 in_port, char* errbuf) { + if (errbuf) + errbuf[0] = 0; + LockMutex lock(&MSock); + if (sock != 0) { + if (errbuf) + snprintf(errbuf, TCPConnection_ErrorBufferSize, "Listening socket already open"); + return false; + } + if (in_port != 0) { + pPort = in_port; + } + +#ifdef WIN32 + SOCKADDR_IN address; + unsigned long nonblocking = 1; +#else + struct sockaddr_in address; +#endif + int reuse_addr = 1; + + // Setup internet address information. + // This is used with the bind() call + memset((char *) &address, 0, sizeof(address)); + address.sin_family = AF_INET; + address.sin_port = htons(pPort); + address.sin_addr.s_addr = htonl(INADDR_ANY); + + // Setting up TCP port for new TCP connections + sock = socket(AF_INET, SOCK_STREAM, 0); + if (sock == INVALID_SOCKET) { + if (errbuf) + snprintf(errbuf, TCPConnection_ErrorBufferSize, "socket(): INVALID_SOCKET"); + return false; + } + + // Quag: dont think following is good stuff for TCP, good for UDP + // Mis: SO_REUSEADDR shouldn't be a problem for tcp--allows you to restart + // without waiting for conns in TIME_WAIT to die + setsockopt(sock, SOL_SOCKET, SO_REUSEADDR, (char *) &reuse_addr, sizeof(reuse_addr)); + + + if (bind(sock, (struct sockaddr *) &address, sizeof(address)) < 0) { +#ifdef WIN32 + closesocket(sock); +#else + close(sock); +#endif + sock = 0; + if (errbuf) + sprintf(errbuf, "bind(): <0"); + return false; + } + + int bufsize = 64 * 1024; // 64kbyte recieve buffer, up from default of 8k + setsockopt(sock, SOL_SOCKET, SO_RCVBUF, (char*) &bufsize, sizeof(bufsize)); +#ifdef WIN32 + ioctlsocket (sock, FIONBIO, &nonblocking); +#else + fcntl(sock, F_SETFL, O_NONBLOCK); +#endif + + if (listen(sock, SOMAXCONN) == SOCKET_ERROR) { +#ifdef WIN32 + closesocket(sock); + if (errbuf) + snprintf(errbuf, TCPConnection_ErrorBufferSize, "listen() failed, Error: %d", WSAGetLastError()); +#else + close(sock); + if (errbuf) + snprintf(errbuf, TCPConnection_ErrorBufferSize, "listen() failed, Error: %s", strerror(errno)); +#endif + sock = 0; + return false; + } + + return true; +} + +void TCPServer::Close() { + LockMutex lock(&MSock); + if (sock) { +#ifdef WIN32 + closesocket(sock); +#else + close(sock); +#endif + } + sock = 0; +} + +bool TCPServer::IsOpen() { + MSock.lock(); + bool ret = (bool) (sock != 0); + MSock.unlock(); + return ret; +} + +TCPConnection* TCPServer::NewQueuePop() { + TCPConnection* ret; + MNewQueue.lock(); + ret = NewQueue.pop(); + MNewQueue.unlock(); + return ret; +} + +void TCPServer::AddConnection(TCPConnection* con) { + list->Append(con); + MNewQueue.lock(); + NewQueue.push(con); + MNewQueue.unlock(); +} + +TCPConnection* TCPServer::GetConnection(int32 iID) { + LinkedListIterator iterator(*list); + + iterator.Reset(); + while(iterator.MoreElements()) { + if (iterator.GetData()->GetID() == iID) + return iterator.GetData(); + iterator.Advance(); + } + return 0; +} + +void TCPServer::SendPacket(ServerPacket* pack) { + TCPConnection::TCPNetPacket_Struct* tnps = TCPConnection::MakePacket(pack); + SendPacket(&tnps); +} + +void TCPServer::SendPacket(TCPConnection::TCPNetPacket_Struct** tnps) { + MInQueue.lock(); + InQueue.push(*tnps); + MInQueue.unlock(); + tnps = 0; +} + +void TCPServer::CheckInQueue() { + LinkedListIterator iterator(*list); + TCPConnection::TCPNetPacket_Struct* tnps = 0; + + while (( tnps = InQueuePop() )) { + iterator.Reset(); + while(iterator.MoreElements()) { + if (iterator.GetData()->GetMode() != modeConsole && iterator.GetData()->GetRemoteID() == 0) + iterator.GetData()->SendPacket(tnps); + iterator.Advance(); + } + safe_delete(tnps); + } +} + +TCPConnection::TCPNetPacket_Struct* TCPServer::InQueuePop() { + TCPConnection::TCPNetPacket_Struct* ret; + MInQueue.lock(); + ret = InQueue.pop(); + MInQueue.unlock(); + return ret; +} + + diff --git a/EQ2/source/common/TCPConnection.h b/EQ2/source/common/TCPConnection.h new file mode 100644 index 000000000..ae47526f1 --- /dev/null +++ b/EQ2/source/common/TCPConnection.h @@ -0,0 +1,277 @@ +/* + EQ2Emulator: Everquest II Server Emulator + Copyright (C) 2007 EQ2EMulator Development Team (http://www.eq2emulator.net) + + This file is part of EQ2Emulator. + + EQ2Emulator is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + EQ2Emulator is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with EQ2Emulator. If not, see . +*/ +#ifndef TCP_CONNECTION_H +#define TCP_CONNECTION_H +/* + Parent classes for interserver TCP Communication. + -Quagmire +*/ + +#ifdef WIN32 + #define snprintf _snprintf + #define vsnprintf _vsnprintf + #define strncasecmp _strnicmp + #define strcasecmp _stricmp + + #include +#else + #include + #include + #include + #include + #include + #include + #include + #include + #define INVALID_SOCKET -1 + #define SOCKET_ERROR -1 + #include "unix.h" + +#endif + +#include "types.h" +#include "Mutex.h" +#include "linked_list.h" +#include "queue.h" +#include "servertalk.h" +#include "timer.h" +#include "MiscFunctions.h" + +class TCPServer; + +#define TCPConnection_ErrorBufferSize 1024 +#define MaxTCPReceiveBufferSize 524288 + +#define TCPS_Ready 0 +#define TCPS_Connecting 1 +#define TCPS_Connected 100 +#define TCPS_Disconnecting 200 +#define TCPS_Disconnected 201 +#define TCPS_Closing 250 +#define TCPS_Error 255 + +#ifndef DEF_eConnectionType +#define DEF_eConnectionType +enum eConnectionType {Incomming, Outgoing}; +#endif + +#ifdef WIN32 + void TCPServerLoop(void* tmp); + void TCPConnectionLoop(void* tmp); +#else + void* TCPServerLoop(void* tmp); + void* TCPConnectionLoop(void* tmp); +#endif + +enum eTCPMode { modeConsole, modeTransition, modePacket }; +class TCPConnection { +public: +#pragma pack(1) + struct TCPNetPacket_Struct { + int32 size; + struct { + int8 + compressed : 1, + destination : 1, + flag3 : 1, + flag4 : 1, + flag5 : 1, + flag6 : 1, + flag7 : 1, + flag8 : 1; + } flags; + int16 opcode; + uchar buffer[0]; + }; +#pragma pack() + + static TCPNetPacket_Struct* MakePacket(ServerPacket* pack, int32 iDestination = 0); + + TCPConnection(TCPServer* iServer, SOCKET iSock, int32 irIP, int16 irPort, bool iOldFormat = false); + TCPConnection(bool iOldFormat = false, TCPServer* iRelayServer = 0, eTCPMode iMode = modePacket); // for outgoing connections + TCPConnection(TCPServer* iServer, TCPConnection* iRelayLink, int32 iRemoteID, int32 irIP, int16 irPort); // for relay connections + virtual ~TCPConnection(); + + // Functions for outgoing connections + bool Connect(char* irAddress, int16 irPort, char* errbuf = 0); + bool Connect(int32 irIP, int16 irPort, char* errbuf = 0); + void AsyncConnect(char* irAddress, int16 irPort); + void AsyncConnect(int32 irIP, int16 irPort); + virtual void Disconnect(bool iSendRelayDisconnect = true); + + virtual bool SendPacket(ServerPacket* pack, int32 iDestination = 0); + virtual bool SendPacket(TCPNetPacket_Struct* tnps); + bool Send(const uchar* data, sint32 size); + + char* PopLine(); + ServerPacket* PopPacket(); // OutQueuePop() + inline int32 GetrIP() { return rIP; } + inline int16 GetrPort() { return rPort; } + virtual int8 GetState(); + eTCPMode GetMode() { return TCPMode; } + inline bool Connected() { return (GetState() == TCPS_Connected); } + inline bool ConnectReady() { return (bool) (GetState() == TCPS_Ready && ConnectionType == Outgoing); } + void Free(); // Inform TCPServer that this connection object is no longer referanced + + inline int32 GetID() { return id; } + inline bool IsRelayServer() { return RelayServer; } + inline int32 GetRemoteID() { return RemoteID; } + inline TCPConnection* GetRelayLink() { return RelayLink; } + + bool GetEcho(); + void SetEcho(bool iValue); +protected: + friend class TCPServer; + virtual bool Process(); + void SetState(int8 iState); + inline bool IsFree() { return pFree; } + bool CheckNetActive(); + +#ifdef WIN32 + friend void TCPConnectionLoop(void* tmp); +#else + friend void* TCPConnectionLoop(void* tmp); +#endif + SOCKET sock; + bool RunLoop(); + Mutex MLoopRunning; + Mutex MAsyncConnect; + bool GetAsyncConnect(); + bool SetAsyncConnect(bool iValue); + char* charAsyncConnect; + +#ifdef WIN32 + friend class TCPConnection; +#endif + void OutQueuePush(ServerPacket* pack); + void RemoveRelay(TCPConnection* relay, bool iSendRelayDisconnect); +private: + void ProcessNetworkLayerPacket(ServerPacket* pack); + void SendNetErrorPacket(const char* reason = 0); + TCPServer* Server; + TCPConnection* RelayLink; + int32 RemoteID; + sint32 RelayCount; + + bool pOldFormat; + bool SendData(char* errbuf = 0); + bool RecvData(char* errbuf = 0); + bool ProcessReceivedData(char* errbuf = 0); + bool ProcessReceivedDataAsPackets(char* errbuf = 0); + bool ProcessReceivedDataAsOldPackets(char* errbuf = 0); + void ClearBuffers(); + + bool pAsyncConnect; + + eConnectionType ConnectionType; + eTCPMode TCPMode; + bool RelayServer; + Mutex MRunLoop; + bool pRunLoop; + + SOCKET connection_socket; + int32 id; + int32 rIP; + int16 rPort; // host byte order + bool pFree; + + Mutex MState; + int8 pState; + + void LineOutQueuePush(char* line); + MyQueue LineOutQueue; + MyQueue OutQueue; + Mutex MOutQueueLock; + + Timer* keepalive_timer; + Timer* timeout_timer; + + uchar* recvbuf; + sint32 recvbuf_size; + sint32 recvbuf_used; + + sint32 recvbuf_echo; + bool pEcho; + Mutex MEcho; + + void InModeQueuePush(TCPNetPacket_Struct* tnps); + MyQueue InModeQueue; + Mutex MSendQueue; + uchar* sendbuf; + sint32 sendbuf_size; + sint32 sendbuf_used; + bool ServerSendQueuePop(uchar** data, sint32* size); + void ServerSendQueuePushEnd(const uchar* data, sint32 size); + void ServerSendQueuePushEnd(uchar** data, sint32 size); + void ServerSendQueuePushFront(uchar* data, sint32 size); +}; + +class TCPServer { +public: + TCPServer(int16 iPort = 0, bool iOldFormat = false); + virtual ~TCPServer(); + + bool Open(int16 iPort = 0, char* errbuf = 0); // opens the port + void Close(); // closes the port + bool IsOpen(); + inline int16 GetPort() { return pPort; } + + TCPConnection* NewQueuePop(); + + void SendPacket(ServerPacket* pack); + void SendPacket(TCPConnection::TCPNetPacket_Struct** tnps); +protected: +#ifdef WIN32 + friend void TCPServerLoop(void* tmp); +#else + friend void* TCPServerLoop(void* tmp); +#endif + void Process(); + bool RunLoop(); + Mutex MLoopRunning; + + friend class TCPConnection; + inline int32 GetNextID() { return NextID++; } + void AddConnection(TCPConnection* con); + TCPConnection* GetConnection(int32 iID); +private: + void ListenNewConnections(); + + int32 NextID; + bool pOldFormat; + + Mutex MRunLoop; + bool pRunLoop; + + Mutex MSock; + SOCKET sock; + int16 pPort; + + Mutex MNewQueue; + MyQueue NewQueue; + + void CheckInQueue(); + Mutex MInQueue; + TCPConnection::TCPNetPacket_Struct* InQueuePop(); + MyQueue InQueue; + + LinkedList* list; +}; +#endif diff --git a/EQ2/source/common/database.cpp b/EQ2/source/common/database.cpp new file mode 100644 index 000000000..4588180f3 --- /dev/null +++ b/EQ2/source/common/database.cpp @@ -0,0 +1,218 @@ +/* + EQ2Emulator: Everquest II Server Emulator + Copyright (C) 2007 EQ2EMulator Development Team (http://www.eq2emulator.net) + + This file is part of EQ2Emulator. + + EQ2Emulator is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + EQ2Emulator is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with EQ2Emulator. If not, see . +*/ +#include "../common/debug.h" + +#include +using namespace std; +#include +#include +#include +#include +//#include +#include +#include +#include +#include + +// Disgrace: for windows compile +#ifdef WIN32 +#include +#include +#define snprintf _snprintf +#define strncasecmp _strnicmp +#define strcasecmp _stricmp +#else +#include "unix.h" +#include +#endif + +#include "database.h" +#include "EQStream.h" +#include "packet_functions.h" +#include "emu_opcodes.h" +#ifdef WORLD + #include "../WorldServer/WorldDatabase.h" + extern WorldDatabase database; +#endif +#ifdef LOGIN + #include "../LoginServer/LoginDatabase.h" + extern LoginDatabase database; +#endif +#ifdef PARSER + #include "../PacketParser/ParserDatabase.h" + extern ParserDatabase database; +#endif + +#ifdef PATCHER + #include "../PatchServer/PatcherDatabase.h" + extern PatcherDatabase database; +#endif +#include "../common/EQEMuError.h" +#include "../common/packet_dump.h" +#include "../common/Log.h" + +Database::Database() +{ + InitVars(); + +} + +bool Database::Init() { + char host[200], user[200], passwd[200], database[200]; + int32 port=0; + bool compression = false; + bool items[6] = {false, false, false, false, false, false}; + + if(!ReadDBINI(host, user, passwd, database, port, compression, items)) { + //exit(1); + return false; + } + + if (!items[0] || !items[1] || !items[2] || !items[3]) + { + LogWrite(DATABASE__ERROR, 0, "DB", "Incomplete DB.INI file."); + LogWrite(DATABASE__ERROR, 0, "DB", "Read README.TXT!"); + //exit (1); + return false; + } + + int32 errnum = 0; + char errbuf[MYSQL_ERRMSG_SIZE]; + if (!Open(host, user, passwd, database,port, &errnum, errbuf)) + { + LogWrite(DATABASE__ERROR, 0, "DB", "Failed to connect to database: Error: %s", errbuf); + HandleMysqlError(errnum); + //exit(1); + return false; + } + else + { + LogWrite(DATABASE__INFO, 0, "DB", "Using database '%s' at %s", database, host); + } + + return true; +} + +map Database::GetVersions(){ + map opcodes; + Query query; + MYSQL_ROW row; + MYSQL_RES* result = query.RunQuery2(Q_SELECT, "select distinct version_range1, version_range2 from opcodes"); + while(result && (row = mysql_fetch_row(result))){ + if(row[0] && row[1]) + opcodes[atoi(row[0])] = atoi(row[1]); + } + return opcodes; +} + +map Database::GetOpcodes(int16 version){ + map opcodes; + Query query; + MYSQL_ROW row; + MYSQL_RES* result = query.RunQuery2(Q_SELECT, "select name, opcode from opcodes where %i between version_range1 and version_range2 order by version_range1, id", version); + while(result && (row = mysql_fetch_row(result))){ + opcodes[row[0]] = atoi(row[1]); + } + return opcodes; +} + +void Database::HandleMysqlError(int32 errnum) { + switch(errnum) { + case 0: + break; + case 1045: // Access Denied + case 2001: { + AddEQEMuError(EQEMuError_Mysql_1405, true); + break; + } + case 2003: { // Unable to connect + AddEQEMuError(EQEMuError_Mysql_2003, true); + break; + } + case 2005: { // Unable to connect + AddEQEMuError(EQEMuError_Mysql_2005, true); + break; + } + case 2007: { // Unable to connect + AddEQEMuError(EQEMuError_Mysql_2007, true); + break; + } + } +} + +void Database::InitVars() { + +} + +Database::~Database() +{ +} +MYSQL_RES* Query::RunQuery2(QUERY_TYPE type, const char* format, ...){ + va_list args; + va_start( args, format ); + #ifdef WIN32 + char * buffer; + int buf_len = _vscprintf( format, args ) + 1; + buffer = new char[buf_len]; + vsprintf( buffer, format, args ); + #else + char* buffer; + int buf_len; + va_list argcopy; + va_copy(argcopy, args); + buf_len = vsnprintf(NULL, 0, format, argcopy) + 1; + va_end(argcopy); + + buffer = new char[buf_len]; + vsnprintf(buffer, buf_len, format, args); + #endif + va_end(args); + query = string(buffer); + + + safe_delete_array( buffer ); + + + return RunQuery2(query.c_str(), type); +} +MYSQL_RES* Query::RunQuery2(string in_query, QUERY_TYPE type){ + switch(type){ + case Q_SELECT: + break; + case Q_DBMS: + case Q_REPLACE: + case Q_DELETE: + case Q_UPDATE: + safe_delete(affected_rows); + affected_rows = new int32; + break; + case Q_INSERT: + safe_delete(last_insert_id); + last_insert_id = new int32; + } + if(result){ + if(!multiple_results) + multiple_results = new vector(); + multiple_results->push_back(result); + } + query = in_query; + database.RunQuery(query.c_str(), query.length(), errbuf, &result, affected_rows, last_insert_id, &errnum, retry); + return result; +} diff --git a/EQ2/source/common/database.h b/EQ2/source/common/database.h new file mode 100644 index 000000000..9413e6b46 --- /dev/null +++ b/EQ2/source/common/database.h @@ -0,0 +1,124 @@ +/* + EQ2Emulator: Everquest II Server Emulator + Copyright (C) 2007 EQ2EMulator Development Team (http://www.eq2emulator.net) + + This file is part of EQ2Emulator. + + EQ2Emulator is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + EQ2Emulator is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with EQ2Emulator. If not, see . +*/ +#ifndef EQ2EMU_DATABASE_H +#define EQ2EMU_DATABASE_H + +#ifdef WIN32 + #include + #include +#endif +#include + +#include "dbcore.h" +#include "types.h" +#include "linked_list.h" +#include "EQStream.h" +#include "MiscFunctions.h" +#include "Mutex.h" +#include +#include +#include + +using namespace std; + +class Database : public DBcore +{ +public: + Database(); + ~Database(); + bool Init(); + bool LoadVariables(); + void HandleMysqlError(int32 errnum); + map GetOpcodes(int16 version); + map GetVersions(); + +protected: + +private: + void InitVars(); +}; +class Query{ +public: + Query(){ + result = 0; + affected_rows = 0; + last_insert_id = 0; + errnum = 0; + row = 0; + retry = true; + escaped_name = 0; + escaped_pass = 0; + escaped_data1 = 0; + multiple_results = 0; + memset(errbuf, 0, sizeof(errbuf)); + } + ~Query(){ + if(result) + mysql_free_result(result); + result = 0; + safe_delete(affected_rows); + safe_delete(last_insert_id); + safe_delete_array(escaped_name); + safe_delete_array(escaped_pass); + safe_delete_array(escaped_data1); + if(multiple_results){ + vector::iterator itr; + for(itr = multiple_results->begin(); itr != multiple_results->end(); itr++){ + mysql_free_result(*itr); + } + safe_delete(multiple_results); + } + } + int32 GetLastInsertedID() { return *last_insert_id; } + int32 GetAffectedRows() { return *affected_rows; } + MYSQL_RES* GetResult() { return result; } + MYSQL_RES* RunQuery2(string in_query, QUERY_TYPE type); + char* GetError() { return errbuf; } + int32 GetErrorNumber(){ return errnum; } + const char* GetQuery() { return query.c_str(); } + char* GetField(int8 field_num) { + if(!row && result) + *row = mysql_fetch_row(result); + if(row && result && field_num < mysql_num_fields(result)) + return *row[field_num]; + else + return NULL; + } + void NextRow(){ + if(result) + *row = mysql_fetch_row(result); + } + MYSQL_RES* RunQuery2(QUERY_TYPE type, const char* format, ...); + char* escaped_name; + char* escaped_pass; + char* escaped_data1; +private: + string query; + char errbuf[MYSQL_ERRMSG_SIZE]; + MYSQL_RES *result; + vector* multiple_results; + int32* affected_rows; + int32* last_insert_id; + int32 errnum; + bool retry; + MYSQL_ROW* row; + MYSQL mysql; +}; +#endif diff --git a/EQ2/source/common/dbcore.cpp b/EQ2/source/common/dbcore.cpp new file mode 100644 index 000000000..b84045cbb --- /dev/null +++ b/EQ2/source/common/dbcore.cpp @@ -0,0 +1,339 @@ +/* + EQ2Emulator: Everquest II Server Emulator + Copyright (C) 2007 EQ2EMulator Development Team (http://www.eq2emulator.net) + + This file is part of EQ2Emulator. + + EQ2Emulator is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + EQ2Emulator is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with EQ2Emulator. If not, see . +*/ +#include "debug.h" + +#include +using namespace std; +#include +//#include +#include +#include "dbcore.h" +#include +#include +#include +#include "types.h" +#include "MiscFunctions.h" +#include "Log.h" + +#ifdef WIN32 + #define snprintf _snprintf + #define strncasecmp _strnicmp + #define strcasecmp _stricmp + #include +#else + #include "unix.h" + #include +#endif + +#ifdef _EQDEBUG + #define DEBUG_MYSQL_QUERIES 0 +#else + #define DEBUG_MYSQL_QUERIES 0 +#endif + +DBcore::DBcore() { + mysql_init(&mysql); + pHost = 0; + pPort = 0; + pUser = 0; + pPassword = 0; + pDatabase = 0; + pCompress = false; + pSSL = false; + pStatus = Closed; +} + +DBcore::~DBcore() { + pStatus = Closed; + mysql_close(&mysql); +#if MYSQL_VERSION_ID >= 50003 + mysql_library_end(); +#else + mysql_server_end(); +#endif + safe_delete_array(pHost); + safe_delete_array(pUser); + safe_delete_array(pPassword); + safe_delete_array(pDatabase); +} + + +bool DBcore::ReadDBINI(char *host, char *user, char *passwd, char *database, int32 &port, bool &compress, bool *items) { + char line[256], *key, *val; + bool on_database_section = false; + FILE *f; + + if ((f = fopen(DB_INI_FILE, "r")) == NULL) { + LogWrite(DATABASE__ERROR, 0, "DBCore", "Unable to open '%s' for reading", DB_INI_FILE); + return false; + } + + //read each line + while (fgets(line, sizeof(line), f) != NULL) { + + //remove any new line or carriage return + while ((key = strstr(line, "\n")) != NULL) + *key = '\0'; + while ((key = strstr(line, "\r")) != NULL) + *key = '\0'; + + //ignore blank lines and commented lines + if (strlen(line) == 0 || line[0] == '#') + continue; + + key = strtok(line, "="); + + //don't do anything until we find the [Database] section + if (!on_database_section && strncasecmp(key, "[Database]", 10) == 0) + on_database_section = true; + else { + val = strtok(NULL, "="); + + if (strcasecmp(key, "host") == 0) { + strcpy(host, val); + items[0] = true; + } + else if (strcasecmp(key, "user") == 0) { + strcpy(user, val); + items[1] = true; + } + else if (strcasecmp(key, "password") == 0) { + strcpy(passwd, val); + items[2] = true; + } + else if (strcasecmp(key, "database") == 0) { + strcpy(database, val); + items[3] = true; + } + else if (strcasecmp(key, "port") == 0) { + port = atoi(val); + items[4] = true; + } + else if (strcasecmp(key, "compression") == 0) { + if (strcasecmp(val, "on") == 0) { + compress = true; + items[5] = true; + LogWrite(DATABASE__INFO, 0, "DBCore", "DB Compression on."); + } + } + } + } + + fclose(f); + + if (!on_database_section) { + LogWrite(DATABASE__ERROR, 0, "DBCore", "[Database] section not found in '%s'", DB_INI_FILE); + return false; + } + + return true; +} + + +// Sends the MySQL server a keepalive +void DBcore::ping() { + if (!MDatabase.trylock()) { + // well, if's it's locked, someone's using it. If someone's using it, it doesnt need a keepalive + return; + } + mysql_ping(&mysql); + MDatabase.unlock(); +} + +bool DBcore::RunQuery(const char* query, int32 querylen, char* errbuf, MYSQL_RES** result, int32* affected_rows, int32* last_insert_id, int32* errnum, bool retry) { + if (errnum) + *errnum = 0; + if (errbuf) + errbuf[0] = 0; + bool ret = false; + LockMutex lock(&MDatabase); + if (pStatus != Connected) + Open(); + + LogWrite(DATABASE__QUERY, 0, "DBCore", query); + if (mysql_real_query(&mysql, query, querylen)) { + if (mysql_errno(&mysql) == CR_SERVER_GONE_ERROR) + pStatus = Error; + if (mysql_errno(&mysql) == CR_SERVER_LOST || mysql_errno(&mysql) == CR_SERVER_GONE_ERROR) { + if (retry) { + LogWrite(DATABASE__ERROR, 0, "DBCore", "Lost connection, attempting to recover..."); + ret = RunQuery(query, querylen, errbuf, result, affected_rows, last_insert_id, errnum, false); + } + else { + pStatus = Error; + if (errnum) + *errnum = mysql_errno(&mysql); + if (errbuf) + snprintf(errbuf, MYSQL_ERRMSG_SIZE, "#%i: %s", mysql_errno(&mysql), mysql_error(&mysql)); + LogWrite(DATABASE__ERROR, 0, "DBCore", "#%i: %s\nQuery:\n%s", mysql_errno(&mysql), mysql_error(&mysql), query); + ret = false; + } + } + else { + if (errnum) + *errnum = mysql_errno(&mysql); + if (errbuf) + snprintf(errbuf, MYSQL_ERRMSG_SIZE, "#%i: %s", mysql_errno(&mysql), mysql_error(&mysql)); + LogWrite(DATABASE__ERROR, 0, "DBCore", "#%i: %s\nQuery:\n%s", mysql_errno(&mysql), mysql_error(&mysql), query); + ret = false; + } + } + else { + if (result && mysql_field_count(&mysql)) { + *result = mysql_store_result(&mysql); + } + else if (result) + *result = 0; + if (affected_rows) + *affected_rows = mysql_affected_rows(&mysql); + if (last_insert_id) + *last_insert_id = mysql_insert_id(&mysql); + if (result) { + if (*result) { + ret = true; + } + else { + if (errnum) + *errnum = UINT_MAX; + if (errbuf){ + if((!affected_rows || (affected_rows && *affected_rows == 0)) && (!last_insert_id || (last_insert_id && *last_insert_id == 0))) + LogWrite(DATABASE__RESULT, 1, "DBCore", "No Result."); + } + ret = false; + } + } + else { + ret = true; + } + } + + if (ret) + { + char tmp1[200] = {0}; + char tmp2[200] = {0}; + if (result && (*result)) + snprintf(tmp1, sizeof(tmp1), ", %i rows returned", (int) mysql_num_rows(*result)); + if (affected_rows) + snprintf(tmp2, sizeof(tmp2), ", %i rows affected", (*affected_rows)); + + LogWrite(DATABASE__DEBUG, 0, "DBCore", "Query Successful%s%s", tmp1, tmp2); + } + else + LogWrite(DATABASE__DEBUG, 0, "DBCore", "Query returned no results in %s!\n%s", __FUNCTION__, query); + + return ret; +} + +int32 DBcore::DoEscapeString(char* tobuf, const char* frombuf, int32 fromlen) { + LockMutex lock(&MDatabase); + return mysql_real_escape_string(&mysql, tobuf, frombuf, fromlen); +} + +bool DBcore::Open(const char* iHost, const char* iUser, const char* iPassword, const char* iDatabase,int32 iPort, int32* errnum, char* errbuf, bool iCompress, bool iSSL) { + LockMutex lock(&MDatabase); + safe_delete_array(pHost); + safe_delete_array(pUser); + safe_delete_array(pPassword); + safe_delete_array(pDatabase); + pHost = new char[strlen(iHost) + 1]; + strcpy(pHost, iHost); + pUser = new char[strlen(iUser) + 1]; + strcpy(pUser, iUser); + pPassword = new char[strlen(iPassword) + 1]; + strcpy(pPassword, iPassword); + pDatabase = new char[strlen(iDatabase) + 1]; + strcpy(pDatabase, iDatabase); + pCompress = iCompress; + pPort = iPort; + pSSL = iSSL; + return Open(errnum, errbuf); +} + +bool DBcore::Open(int32* errnum, char* errbuf) { + if (errbuf) + errbuf[0] = 0; + LockMutex lock(&MDatabase); + if (GetStatus() == Connected) + return true; + if (GetStatus() == Error) + mysql_close(&mysql); + if (!pHost) + return false; + /* + Quagmire - added CLIENT_FOUND_ROWS flag to the connect + otherwise DB update calls would say 0 rows affected when the value already equalled + what the function was tring to set it to, therefore the function would think it failed + */ + int32 flags = CLIENT_FOUND_ROWS; + if (pCompress) + flags |= CLIENT_COMPRESS; + if (pSSL) + flags |= CLIENT_SSL; + if (mysql_real_connect(&mysql, pHost, pUser, pPassword, pDatabase, pPort, 0, flags)) { + pStatus = Connected; + return true; + } + else { + if (errnum) + *errnum = mysql_errno(&mysql); + if (errbuf) + snprintf(errbuf, MYSQL_ERRMSG_SIZE, "#%i: %s", mysql_errno(&mysql), mysql_error(&mysql)); + pStatus = Error; + return false; + } +} + +char* DBcore::getEscapeString(const char* from_string){ + if(!from_string) + from_string =""; + int orig_size = strlen(from_string); + int escape_size = (orig_size * 2) + 1; + char* escaped = new char[escape_size]; + memset(escaped, 0, escape_size); + DoEscapeString(escaped, from_string, orig_size); + return escaped; +} + +string DBcore::getSafeEscapeString(const char* from_string){ + if(!from_string) + from_string =""; + int orig_size = strlen(from_string); + int escape_size = (orig_size * 2) + 1; + char* escaped = new char[escape_size]; + memset(escaped, 0, escape_size); + DoEscapeString(escaped, from_string, orig_size); + string ret = string(escaped); + safe_delete_array(escaped); + return ret; +} + +string DBcore::getSafeEscapeString(string* from_string){ + if(!from_string) + return ""; + int orig_size = from_string->length(); + int escape_size = (orig_size * 2) + 1; + char* escaped = new char[escape_size]; + memset(escaped, 0, escape_size); + DoEscapeString(escaped, from_string->c_str(), orig_size); + string ret = string(escaped); + safe_delete_array(escaped); + return ret; +} + diff --git a/EQ2/source/common/dbcore.h b/EQ2/source/common/dbcore.h new file mode 100644 index 000000000..b74a504b9 --- /dev/null +++ b/EQ2/source/common/dbcore.h @@ -0,0 +1,80 @@ +/* + EQ2Emulator: Everquest II Server Emulator + Copyright (C) 2007 EQ2EMulator Development Team (http://www.eq2emulator.net) + + This file is part of EQ2Emulator. + + EQ2Emulator is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + EQ2Emulator is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with EQ2Emulator. If not, see . +*/ +#ifndef DBCORE_H +#define DBCORE_H + +#ifdef WIN32 + #include + #include + //#include +#endif +#include +#include "../common/types.h" +#include "../common/Mutex.h" +#include "../common/linked_list.h" +#include "../common/queue.h" +#include "../common/timer.h" +#include "../common/Condition.h" +#ifdef LOGIN + #define DB_INI_FILE "login_db.ini" +#endif +#ifdef WORLD + #define DB_INI_FILE "world_db.ini" +#endif +#ifdef PARSER + #define DB_INI_FILE "parser_db.ini" +#endif +#ifdef PATCHER + #define DB_INI_FILE "patcher_db.ini" +#endif +class DBcore{ +public: + enum eStatus { Closed, Connected, Error }; + DBcore(); + ~DBcore(); + eStatus GetStatus() { return pStatus; } + bool RunQuery(const char* query, int32 querylen, char* errbuf = 0, MYSQL_RES** result = 0, int32* affected_rows = 0, int32* last_insert_id = 0, int32* errnum = 0, bool retry = true); + int32 DoEscapeString(char* tobuf, const char* frombuf, int32 fromlen); + void ping(); + char* getEscapeString(const char* from_string); + string getSafeEscapeString(const char* from_string); + string getSafeEscapeString(string* from_string); + +protected: + bool Open(const char* iHost, const char* iUser, const char* iPassword, const char* iDatabase, int32 iPort, int32* errnum = 0, char* errbuf = 0, bool iCompress = false, bool iSSL = false); + bool ReadDBINI(char *host, char *user, char *pass, char *db, int32 &port, bool &compress, bool *items); +private: + bool Open(int32* errnum = 0, char* errbuf = 0); + + MYSQL mysql; + Mutex MDatabase; + eStatus pStatus; + + char* pHost; + char* pUser; + char* pPassword; + char* pDatabase; + bool pCompress; + int32 pPort; + bool pSSL; +}; +#endif + + diff --git a/EQ2/source/common/debug.cpp b/EQ2/source/common/debug.cpp new file mode 100644 index 000000000..3f2f98b83 --- /dev/null +++ b/EQ2/source/common/debug.cpp @@ -0,0 +1,336 @@ +/* + EQ2Emulator: Everquest II Server Emulator + Copyright (C) 2007 EQ2EMulator Development Team (http://www.eq2emulator.net) + + This file is part of EQ2Emulator. + + EQ2Emulator is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + EQ2Emulator is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with EQ2Emulator. If not, see . +*/ + +/* + JA: File rendered obsolete (2011-08-12) + +#include "debug.h" + +#include +using namespace std; +#include +#include +#ifdef WIN32 + #include + + #define snprintf _snprintf + #define vsnprintf _vsnprintf + #define strncasecmp _strnicmp + #define strcasecmp _stricmp +#else + #include + #include + #include +#endif +#include "../common/MiscFunctions.h" + +EQEMuLog* LogFile = new EQEMuLog; +AutoDelete adlf(&LogFile); + +static const char* FileNames[EQEMuLog::MaxLogID] = { "logs/eq2emu", "logs/eq2emu", "logs/eq2emu_error", "logs/eq2emu_debug", "logs/eq2emu_quest", "logs/eq2emu_commands" }; +static const char* LogNames[EQEMuLog::MaxLogID] = { "Status", "Normal", "Error", "Debug", "Quest", "Command" }; + +EQEMuLog::EQEMuLog() { + for (int i=0; i= 2 + pLogStatus[i] = 1 | 2; +#else + pLogStatus[i] = 0; +#endif + logCallbackFmt[i] = NULL; + logCallbackBuf[i] = NULL; + } +#if EQDEBUG < 2 + pLogStatus[Status] = 3; + pLogStatus[Error] = 3; + pLogStatus[Debug] = 3; + pLogStatus[Quest] = 2; + pLogStatus[Commands] = 2; +#endif +} + +EQEMuLog::~EQEMuLog() { + for (int i=0; i= MaxLogID) { + return false; + } + LockMutex lock(&MOpen); + if (pLogStatus[id] & 4) { + return false; + } + if (fp[id]) { + return true; + } + + char exename[200] = ""; +#if defined(WORLD) + snprintf(exename, sizeof(exename), "_world"); +#elif defined(ZONE) + snprintf(exename, sizeof(exename), "_zone"); +#endif + char filename[200]; +#ifndef NO_PIDLOG + snprintf(filename, sizeof(filename), "%s%s_%04i.log", FileNames[id], exename, getpid()); +#else + snprintf(filename, sizeof(filename), "%s%s.log", FileNames[id], exename); +#endif + fp[id] = fopen(filename, "a"); + if (!fp[id]) { + cerr << "Failed to open log file: " << filename << endl; + pLogStatus[id] |= 4; // set file state to error + return false; + } + fputs("---------------------------------------------\n",fp[id]); + return true; +} + +bool EQEMuLog::write(LogIDs id, const char *fmt, ...) { + char buffer[4096]; + + if (!this) { + return false; + } + if (id >= MaxLogID) { + return false; + } + bool dofile = false; + if (pLogStatus[id] & 1) { + dofile = open(id); + } + if (!(dofile || pLogStatus[id] & 2)) + return false; + LockMutex lock(&MLog[id]); + + time_t aclock; + struct tm *newtime; + + time( &aclock ); //Get time in seconds + newtime = localtime( &aclock ); //Convert time to struct + + if (dofile){ +#ifndef NO_PIDLOG + fprintf(fp[id], "[%04d%02d%02d %02d:%02d:%02d] ", newtime->tm_year+1900, newtime->tm_mon+1, newtime->tm_mday, newtime->tm_hour, newtime->tm_min, newtime->tm_sec); +#else + fprintf(fp[id], "%04i [%04d%02d%02d %02d:%02d:%02d] ", getpid(), newtime->tm_year+1900, newtime->tm_mon+1, newtime->tm_mday, newtime->tm_hour, newtime->tm_min, newtime->tm_sec); +#endif + } + + va_list argptr; + va_start(argptr, fmt); + vsnprintf(buffer, sizeof(buffer), fmt, argptr); + va_end(argptr); + if (dofile) + fprintf(fp[id], "%s\n", buffer); + if(logCallbackFmt[id]) { + msgCallbackFmt p = logCallbackFmt[id]; + p(id, fmt, argptr ); + } + + if (pLogStatus[id] & 2) { + if (pLogStatus[id] & 8) { + fprintf(stderr, "[%04d%02d%02d %02d:%02d:%02d] [%s] ", newtime->tm_year+1900, newtime->tm_mon+1, newtime->tm_mday, newtime->tm_hour, newtime->tm_min, newtime->tm_sec, LogNames[id]); + fprintf(stderr, "%s\n", buffer); + } + else { + fprintf(stdout, "[%04d%02d%02d %02d:%02d:%02d] [%s] ", newtime->tm_year+1900, newtime->tm_mon+1, newtime->tm_mday, newtime->tm_hour, newtime->tm_min, newtime->tm_sec, LogNames[id]); + fprintf(stdout, "%s\n", buffer); + } + } + if (dofile) + fprintf(fp[id], "\n"); + if (pLogStatus[id] & 2) { + if (pLogStatus[id] & 8) + fprintf(stderr, "\n"); + else + fprintf(stdout, "\n"); + } + if(dofile) + fflush(fp[id]); + return true; +} + +bool EQEMuLog::writebuf(LogIDs id, const char *buf, int8 size, int32 count) { + if (!this) { + return false; + } + if (id >= MaxLogID) { + return false; + } + bool dofile = false; + if (pLogStatus[id] & 1) { + dofile = open(id); + } + if (!(dofile || pLogStatus[id] & 2)) + return false; + LockMutex lock(&MLog[id]); + + time_t aclock; + struct tm *newtime; + + time( &aclock ); // Get time in seconds + newtime = localtime( &aclock ); // Convert time to struct + + if (dofile){ +#ifndef NO_PIDLOG + fprintf(fp[id], "[%02d.%02d. - %02d:%02d:%02d] ", newtime->tm_mon+1, newtime->tm_mday, newtime->tm_hour, newtime->tm_min, newtime->tm_sec); +#else + fprintf(fp[id], "%04i [%02d.%02d. - %02d:%02d:%02d] ", getpid(), newtime->tm_mon+1, newtime->tm_mday, newtime->tm_hour, newtime->tm_min, newtime->tm_sec); +#endif + } + + if (dofile) { + fwrite(buf, size, count, fp[id]); + fprintf(fp[id], "\n"); + } + if(logCallbackBuf[id]) { + msgCallbackBuf p = logCallbackBuf[id]; + p(id, buf, size, count); + } + if (pLogStatus[id] & 2) { + if (pLogStatus[id] & 8) { + fprintf(stderr, "[%s] ", LogNames[id]); + fwrite(buf, size, count, stderr); + fprintf(stderr, "\n"); + } else { + fprintf(stdout, "[%s] ", LogNames[id]); + fwrite(buf, size, count, stdout); + fprintf(stdout, "\n"); + } + } + if(dofile) + fflush(fp[id]); + return true; +} + +bool EQEMuLog::writeNTS(LogIDs id, bool dofile, const char *fmt, ...) { + char buffer[4096]; + va_list argptr; + va_start(argptr, fmt); + vsnprintf(buffer, sizeof(buffer), fmt, argptr); + va_end(argptr); + if (dofile) + fprintf(fp[id], "%s\n", buffer); + if (pLogStatus[id] & 2) { + if (pLogStatus[id] & 8) + fprintf(stderr, "%s\n", buffer); + else + fprintf(stdout, "%s\n", buffer); + } + return true; +}; + +bool EQEMuLog::Dump(LogIDs id, int8* data, int32 size, int32 cols, int32 skip) { + if (!this) { +#if EQDEBUG >= 10 + cerr << "Error: Dump() from null pointer"<= MaxLogID) + return false; + bool dofile = false; + if (pLogStatus[id] & 1) { + dofile = open(id); + } + if (!(dofile || pLogStatus[id] & 2)) + return false; + LockMutex lock(&MLog[id]); + write(id, "Dumping Packet: %i", size); + // Output as HEX + int j = 0; char* ascii = new char[cols+1]; memset(ascii, 0, cols+1); + int32 i; + for(i=skip; i= 32 && data[i] < 127) + ascii[j++] = data[i]; + else + ascii[j++] = '.'; + } + int32 k = ((i-skip)-1)%cols; + if (k < 8) + writeNTS(id, dofile, " "); + for (int32 h = k+1; h < cols; h++) { + writeNTS(id, dofile, " "); + } + writeNTS(id, dofile, " | %s\n", ascii); + if (dofile) + fflush(fp[id]); + safe_delete_array(ascii); + return true; +} + +void EQEMuLog::SetCallback(LogIDs id, msgCallbackFmt proc) { + if (!this) + return; + if (id >= MaxLogID) { + return; + } + logCallbackFmt[id] = proc; +} + +void EQEMuLog::SetCallback(LogIDs id, msgCallbackBuf proc) { + if (!this) + return; + if (id >= MaxLogID) { + return; + } + logCallbackBuf[id] = proc; +} + +void EQEMuLog::SetAllCallbacks(msgCallbackFmt proc) { + if (!this) + return; + int r; + for(r = Status; r < MaxLogID; r++) { + SetCallback((LogIDs)r, proc); + } +} + +void EQEMuLog::SetAllCallbacks(msgCallbackBuf proc) { + if (!this) + return; + int r; + for(r = Status; r < MaxLogID; r++) { + SetCallback((LogIDs)r, proc); + } +} +*/ \ No newline at end of file diff --git a/EQ2/source/common/debug.h b/EQ2/source/common/debug.h new file mode 100644 index 000000000..7422d5e66 --- /dev/null +++ b/EQ2/source/common/debug.h @@ -0,0 +1,143 @@ +/* + EQ2Emulator: Everquest II Server Emulator + Copyright (C) 2007 EQ2EMulator Development Team (http://www.eq2emulator.net) + + This file is part of EQ2Emulator. + + EQ2Emulator is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + EQ2Emulator is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with EQ2Emulator. If not, see . +*/ +#ifndef EQDEBUG_H +#define EQDEBUG_H + +// Debug Levels +/* + 1 = Normal + 3 = Some extended debug info + 5 = Light DETAIL info + 7 = Heavy DETAIL info + 9 = DumpPacket/PrintPacket + You should use even numbers too, to define any subset of the above basic template +*/ +#ifndef EQDEBUG + #define EQDEBUG 1 +#endif + + +#if defined(DEBUG) && defined(WIN32) + //#ifndef _CRTDBG_MAP_ALLOC + #include + #include + #if (_MSC_VER < 1300) + #include + #include + #define _CRTDBG_MAP_ALLOC + #define new new(_NORMAL_BLOCK, __FILE__, __LINE__) + #define malloc(s) _malloc_dbg(s, _NORMAL_BLOCK, __FILE__, __LINE__) + #endif + //#endif +#endif + +#ifndef ThrowError + void CatchSignal(int); + #if defined(CATCH_CRASH) || defined(_EQDEBUG) + #define ThrowError(errstr) { cout << "Fatal error: " << errstr << " (" << __FILE__ << ", line " << __LINE__ << ")" << endl; LogWrite(WORLD__ERROR, 0, "Debug", "Thrown Error: %s (%s:%i)", errstr, __FILE__, __LINE__); throw errstr; } + #else + #define ThrowError(errstr) { cout << "Fatal error: " << errstr << " (" << __FILE__ << ", line " << __LINE__ << ")" << endl; LogWrite(WORLD__ERROR, 0, "Debug", "Thrown Error: %s (%s:%i)", errstr, __FILE__, __LINE__); CatchSignal(0); } + #endif +#endif + +#ifdef WIN32 + // VS6 doesn't like the length of STL generated names: disabling + #pragma warning(disable:4786) +#endif + +#ifndef WIN32 + #define DebugBreak() if(0) {} +#endif + +#ifdef WIN32 + #include + #include +#endif + +#include "../common/Mutex.h" +#include +#include + + +class EQEMuLog { +public: + EQEMuLog(); + ~EQEMuLog(); + + enum LogIDs { + Status = 0, //this must stay the first entry in this list + Normal, + Error, + Debug, + Quest, + Commands, + MaxLogID + }; + + //these are callbacks called for each + typedef void (* msgCallbackBuf)(LogIDs id, const char *buf, int8 size, int32 count); + typedef void (* msgCallbackFmt)(LogIDs id, const char *fmt, va_list ap); + + void SetAllCallbacks(msgCallbackFmt proc); + void SetAllCallbacks(msgCallbackBuf proc); + void SetCallback(LogIDs id, msgCallbackFmt proc); + void SetCallback(LogIDs id, msgCallbackBuf proc); + + bool writebuf(LogIDs id, const char *buf, int8 size, int32 count); + bool write(LogIDs id, const char *fmt, ...); + bool Dump(LogIDs id, int8* data, int32 size, int32 cols=16, int32 skip=0); +private: + bool open(LogIDs id); + bool writeNTS(LogIDs id, bool dofile, const char *fmt, ...); // no error checking, assumes is open, no locking, no timestamp, no newline + + Mutex MOpen; + Mutex MLog[MaxLogID]; + FILE* fp[MaxLogID]; +/* LogStatus: bitwise variable + 1 = output to file + 2 = output to stdout + 4 = fopen error, dont retry + 8 = use stderr instead (2 must be set) +*/ + int8 pLogStatus[MaxLogID]; + + msgCallbackFmt logCallbackFmt[MaxLogID]; + msgCallbackBuf logCallbackBuf[MaxLogID]; +}; + +//extern EQEMuLog* LogFile; + +#ifdef _EQDEBUG +class PerformanceMonitor { +public: + PerformanceMonitor(sint64* ip) { + p = ip; + QueryPerformanceCounter(&tmp); + } + ~PerformanceMonitor() { + LARGE_INTEGER tmp2; + QueryPerformanceCounter(&tmp2); + *p += tmp2.QuadPart - tmp.QuadPart; + } + LARGE_INTEGER tmp; + sint64* p; +}; +#endif +#endif diff --git a/EQ2/source/common/emu_opcodes.cpp b/EQ2/source/common/emu_opcodes.cpp new file mode 100644 index 000000000..a07135e9c --- /dev/null +++ b/EQ2/source/common/emu_opcodes.cpp @@ -0,0 +1,39 @@ +/* + EQ2Emulator: Everquest II Server Emulator + Copyright (C) 2007 EQ2EMulator Development Team (http://www.eq2emulator.net) + + This file is part of EQ2Emulator. + + EQ2Emulator is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + EQ2Emulator is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with EQ2Emulator. If not, see . +*/ + +#include "emu_opcodes.h" + +const char *OpcodeNames[_maxEmuOpcode+1] = { + "OP_Unknown", + +//a preprocessor hack so we dont have to maintain two lists +#define N(x) #x +#if !defined(LOGIN) + #include "emu_oplist.h" +#endif +#ifdef LOGIN + #include "login_oplist.h" +#endif +#undef N + + "" +}; + + diff --git a/EQ2/source/common/emu_opcodes.h b/EQ2/source/common/emu_opcodes.h new file mode 100644 index 000000000..9011de180 --- /dev/null +++ b/EQ2/source/common/emu_opcodes.h @@ -0,0 +1,56 @@ +/* + EQ2Emulator: Everquest II Server Emulator + Copyright (C) 2007 EQ2EMulator Development Team (http://www.eq2emulator.net) + + This file is part of EQ2Emulator. + + EQ2Emulator is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + EQ2Emulator is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with EQ2Emulator. If not, see . +*/ +#ifndef EMU_OPCODES_H +#define EMU_OPCODES_H + +//this is the highest opcode possibly used in the regular EQ protocol +#define MAX_EQ_OPCODE 0xFFFF +/* + + +the list of opcodes is in emu_oplist.h + +we somewhat rely on the fact that we have more than 255 opcodes, +so we know the enum type for the opcode defines must be at least +16 bits, so we can use the protocol flags on them. + +*/ + +typedef enum { //EQEmu internal opcodes list + OP_Unknown=0, + +//a preprocessor hack so we dont have to maintain two lists +#define N(x) x +#if !defined(LOGIN) + #include "emu_oplist.h" +#endif +#ifdef LOGIN + #include "login_oplist.h" +#endif +#undef N + + _maxEmuOpcode +} EmuOpcode; + +extern const char *OpcodeNames[_maxEmuOpcode+1]; + +#endif + + diff --git a/EQ2/source/common/emu_oplist.h b/EQ2/source/common/emu_oplist.h new file mode 100644 index 000000000..0d571f213 --- /dev/null +++ b/EQ2/source/common/emu_oplist.h @@ -0,0 +1,503 @@ +/* + EQ2Emulator: Everquest II Server Emulator + Copyright (C) 2007 EQ2EMulator Development Team (http://www.eq2emulator.net) + + This file is part of EQ2Emulator. + + EQ2Emulator is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + EQ2Emulator is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with EQ2Emulator. If not, see . +*/ +N(OP_LoginReplyMsg), +N(OP_LoginByNumRequestMsg), +N(OP_WSLoginRequestMsg), +N(OP_ESInitMsg), +N(OP_ESReadyForClientsMsg), +N(OP_CreateZoneInstanceMsg), +N(OP_ZoneInstanceCreateReplyMsg), +N(OP_ZoneInstanceDestroyedMsg), +N(OP_ExpectClientAsCharacterRequest), +N(OP_ExpectClientAsCharacterReplyMs), +N(OP_ZoneInfoMsg), +N(OP_CreateCharacterRequestMsg), +N(OP_DoneLoadingZoneResourcesMsg), +N(OP_DoneSendingInitialEntitiesMsg), +N(OP_DoneLoadingEntityResourcesMsg), +N(OP_PredictionUpdateMsg), +N(OP_RemoteCmdMsg), +N(OP_SetRemoteCmdsMsg), +N(OP_GameWorldTimeMsg), +N(OP_MOTDMsg), +N(OP_ZoneMOTDMsg), +N(OP_GuildRecruitingMemberInfo), +N(OP_GuildRecruiting), +N(OP_GuildRecruitingDetails), +N(OP_GuildRecruitingImage), +N(OP_AvatarCreatedMsg), +N(OP_AvatarDestroyedMsg), +N(OP_RequestCampMsg), +N(OP_MapRequest), +N(OP_CampStartedMsg), +N(OP_CampAbortedMsg), +N(OP_WhoQueryRequestMsg), +N(OP_WhoQueryReplyMsg), +N(OP_MonitorReplyMsg), +N(OP_MonitorCharacterListMsg), +N(OP_MonitorCharacterListRequestMsg), +N(OP_ClientCmdMsg), +N(OP_Lottery), +N(OP_DispatchClientCmdMsg), +N(OP_DispatchESMsg), +N(OP_UpdateTargetMsg), +N(OP_UpdateOpportunityMsg), +N(OP_UpdateTargetLocMsg), +N(OP_UpdateCharacterSheetMsg), +N(OP_UpdateSpellBookMsg), +N(OP_UpdateInventoryMsg), +N(OP_UpdateRecipeBookMsg), +N(OP_RequestRecipeDetailsMsg), +N(OP_RecipeDetailsMsg), +N(OP_UpdateSkillBookMsg), +N(OP_UpdateSkillsMsg), +N(OP_ChangeZoneMsg), +N(OP_ClientTeleportRequestMsg), +N(OP_TeleportWithinZoneMsg), +N(OP_TeleportWithinZoneNoReloadMsg), +N(OP_MigrateClientToZoneRequestMsg), +N(OP_MigrateClientToZoneReplyMsg), +N(OP_ReadyToZoneMsg), +//N(OP_AddClientToGroupMsg), +//N(OP_AddGroupToGroupMsg), +N(OP_RemoveClientFromGroupMsg), +N(OP_RemoveGroupFromGroupMsg), +N(OP_MakeGroupLeaderMsg), +N(OP_GroupCreatedMsg), +N(OP_GroupDestroyedMsg), +N(OP_GroupMemberAddedMsg), +N(OP_GroupMemberRemovedMsg), +N(OP_GroupRemovedFromGroupMsg), +N(OP_GroupLeaderChangedMsg), +N(OP_GroupSettingsChangedMsg), +N(OP_SendLatestRequestMsg), +N(OP_ClearDataMsg), +N(OP_SetSocialMsg), +N(OP_ESStatusMsg), +N(OP_ESZoneInstanceStatusMsg), +N(OP_ZonesStatusRequestMsg), +N(OP_ZonesStatusMsg), +N(OP_ESWeatherRequestMsg), +N(OP_ESWeatherRequestEndMsg), +//N(OP_WSWeatherUpdateMsg), +N(OP_DialogSelectMsg), +N(OP_DialogCloseMsg), +N(OP_RemoveSpellEffectMsg), +N(OP_RemoveConcentrationMsg), +N(OP_QuestJournalOpenMsg), +N(OP_QuestJournalInspectMsg), +//N(OP_SkillSlotMapping), +N(OP_QuestJournalSetVisibleMsg), +N(OP_QuestJournalWaypointMsg), +N(OP_CreateGuildRequestMsg), +N(OP_CreateGuildReplyMsg), +N(OP_GuildsayMsg), +//N(OP_GuildKickMsg), +N(OP_GuildUpdateMsg), +N(OP_FellowshipExpMsg), +N(OP_ConsignmentCloseStoreMsg), +N(OP_ConsignItemRequestMsg), +N(OP_ConsignItemResponseMsg), +//N(OP_PurchaseConsignmentRequestMsg), +N(OP_PurchaseConsignmentLoreCheckRe), +N(OP_QuestReward), +//N(OP_PurchaseConsignmentResponseMsg), +//N(OP_ProcessScriptMsg), +//N(OP_ProcessWorkspaceMsg), +N(OP_HouseDeletedRemotelyMsg), +N(OP_UpdateHouseDataMsg), +N(OP_UpdateHouseAccessDataMsg), +N(OP_PlayerHouseBaseScreenMsg), +N(OP_PlayerHousePurchaseScreenMsg), +N(OP_PlayerHouseAccessUpdateMsg), +N(OP_PlayerHouseDisplayStatusMsg), +N(OP_PlayerHouseCloseUIMsg), +N(OP_BuyPlayerHouseMsg), +N(OP_BuyPlayerHouseTintMsg), +N(OP_CollectAllHouseItemsMsg), +N(OP_RelinquishHouseMsg), +N(OP_EnterHouseMsg), +N(OP_ExitHouseMsg), +N(OP_ExamineConsignmentRequestMsg), +N(OP_MoveableObjectPlacementCriteri), +N(OP_EnterMoveObjectModeMsg), +N(OP_PositionMoveableObject), +N(OP_CancelMoveObjectModeMsg), +N(OP_ShaderCustomizationMsg), +N(OP_ReplaceableSubMeshesMsg), +N(OP_ExamineConsignmentResponseMsg), +N(OP_HouseDefaultAccessSetMsg), +N(OP_HouseAccessSetMsg), +N(OP_HouseAccessRemoveMsg), +N(OP_PayHouseUpkeepMsg), +N(OP_TintWidgetsMsg), +N(OP_UISettingsResponseMsg), +N(OP_UIResetMsg), +N(OP_KeymapLoadMsg), +N(OP_KeymapNoneMsg), +N(OP_KeymapDataMsg), +N(OP_KeymapSaveMsg), +N(OP_DispatchSpellCmdMsg), +N(OP_HouseCustomizationScreenMsg), +N(OP_CustomizationPurchaseRequestMs), +N(OP_CustomizationSetRequestMsg), +N(OP_CustomizationReplyMsg), +N(OP_EntityVerbsRequestMsg), +N(OP_EntityVerbsReplyMsg), +N(OP_EntityVerbsVerbMsg), +N(OP_ChatRelationshipUpdateMsg), +N(OP_ChatCreateChannelMsg), +N(OP_ChatJoinChannelMsg), +N(OP_ChatWhoChannelMsg), +N(OP_ChatLeaveChannelMsg), +N(OP_ChatTellChannelMsg), +N(OP_ChatTellUserMsg), +N(OP_ChatToggleFriendMsg), +N(OP_ChatToggleIgnoreMsg), +N(OP_ChatSendFriendsMsg), +N(OP_ChatSendIgnoresMsg), +N(OP_ChatFiltersMsg), +N(OP_LootItemsRequestMsg), +N(OP_StoppedLootingMsg), +N(OP_SitMsg), +N(OP_StandMsg), +N(OP_SatMsg), +N(OP_StoodMsg), +//N(OP_QuickbarAddMsg), +N(OP_DefaultGroupOptionsRequestMsg), +N(OP_DefaultGroupOptionsMsg), +N(OP_GroupOptionsMsg), +N(OP_DisplayGroupOptionsScreenMsg), +N(OP_DisplayInnVisitScreenMsg), +N(OP_DumpSchedulerMsg), +//N(OP_LSRequestPlayerDescMsg), +N(OP_LSCheckAcctLockMsg), +N(OP_WSAcctLockStatusMsg), +N(OP_RequestHelpRepathMsg), +N(OP_UpdateMotdMsg), +N(OP_RequestTargetLocMsg), +N(OP_PerformPlayerKnockbackMsg), +N(OP_PerformCameraShakeMsg), +N(OP_PopulateSkillMapsMsg), +N(OP_CancelledFeignMsg), +//N(OP_SignalMsg), +N(OP_SkillInfoRequest), +N(OP_SkillInfoResponse), +N(OP_ShowCreateFromRecipeUIMsg), +N(OP_CancelCreateFromRecipeMsg), +N(OP_BeginItemCreationMsg), +N(OP_StopItemCreationMsg), +N(OP_ShowItemCreationProcessUIMsg), +N(OP_UpdateItemCreationProcessUIMsg), +N(OP_DisplayTSEventReactionMsg), +N(OP_ShowRecipeBookMsg), +N(OP_KnowledgebaseRequestMsg), +N(OP_KnowledgebaseResponseMsg), +N(OP_CSTicketHeaderRequestMsg), +N(OP_CSTicketInfoMsg), +N(OP_CSTicketCommentRequestMsg), +N(OP_CSTicketCommentResponseMsg), +N(OP_CSTicketCreateMsg), +N(OP_CSTicketAddCommentMsg), +N(OP_CSTicketDeleteMsg), +N(OP_CSTicketChangeNotificationMsg), +N(OP_WorldDataUpdateMsg), +N(OP_WorldDataChangeMsg), +N(OP_KnownLanguagesMsg), +N(OP_LsRequestClientCrashLogMsg), +N(OP_LsClientBaselogReplyMsg), +N(OP_LsClientCrashlogReplyMsg), +N(OP_LsClientAlertlogReplyMsg), +N(OP_LsClientVerifylogReplyMsg), +N(OP_ClientTeleportToLocationMsg), +N(OP_UpdateClientPredFlagsMsg), +N(OP_ChangeServerControlFlagMsg), +N(OP_CSToolsRequestMsg), +N(OP_CSToolsResponseMsg), +N(OP_CreateBoatTransportsMsg), +N(OP_PositionBoatTransportMsg), +N(OP_MigrateBoatTransportMsg), +N(OP_MigrateBoatTransportReplyMsg), +N(OP_DisplayDebugNLLPointsMsg), +N(OP_ExamineInfoRequestMsg), +N(OP_QuickbarInitMsg), +N(OP_QuickbarUpdateMsg), +N(OP_MacroInitMsg), +N(OP_MacroUpdateMsg), +N(OP_QuestionnaireMsg), +N(OP_LevelChangedMsg), +N(OP_SpellGainedMsg), +N(OP_EncounterBrokenMsg), +N(OP_OnscreenMsgMsg), +N(OP_DisplayWarningMsg), +N(OP_ModifyGuildMsg), +N(OP_GuildEventMsg), +N(OP_GuildEventAddMsg), +N(OP_GuildEventActionMsg), +N(OP_GuildEventListMsg), +N(OP_RequestGuildEventDetailsMsg), +N(OP_GuildEventDetailsMsg), +N(OP_RequestGuildBankEventDetailsMs), +N(OP_GuildBankUpdateMsg), +N(OP_RewardPackMsg), +N(OP_RenameGuildMsg), +N(OP_ZoneToFriendRequestMsg), +N(OP_ZoneToFriendReplyMsg), +N(OP_WaypointRequestMsg), +N(OP_WaypointReplyMsg), +N(OP_WaypointSelectMsg), +N(OP_WaypointUpdateMsg), +N(OP_CharNameChangedMsg), +N(OP_ShowZoneTeleporterDestinations), +N(OP_SelectZoneTeleporterDestinatio), +N(OP_ReloadLocalizedTxtMsg), +N(OP_RequestGuildMembershipMsg), +N(OP_GuildMembershipResponseMsg), +N(OP_LeaveGuildNotifyMsg), +N(OP_JoinGuildNotifyMsg), +N(OP_RequestGuildInfoMsg), +N(OP_GuildBankEventListMsg), +N(OP_AvatarUpdateMsg), +N(OP_BioUpdateMsg), +N(OP_InspectPlayerMsg), +N(OP_WSServerLockMsg), +N(OP_WSServerHideMsg), +N(OP_LSServerLockMsg), +N(OP_CsCategoryRequestMsg), +N(OP_CsCategoryResponseMsg), +N(OP_KnowledgeWindowSlotMappingMsg), +N(OP_LFGUpdateMsg), +N(OP_AFKUpdateMsg), +N(OP_AnonUpdateMsg), +N(OP_UpdateActivePublicZonesMsg), +N(OP_UnknownNpcMsg), +N(OP_PromoFlagsDetailsMsg), +N(OP_ConsignViewCreateMsg), +N(OP_ConsignViewGetPageMsg), +N(OP_ConsignViewReleaseMsg), +N(OP_UpdateDebugRadiiMsg), +N(OP_ConsignRemoveItemsMsg), +//N(OP_SnoopMsg), +N(OP_ReportMsg), +N(OP_UpdateRaidMsg), +N(OP_ConsignViewSortMsg), +N(OP_TitleUpdateMsg), +N(OP_FlightPathsMsg), +N(OP_ClientFellMsg), +N(OP_ClientInDeathRegionMsg), +N(OP_CampClientMsg), +N(OP_GetAvatarAccessRequestForCSToo), +N(OP_CSToolAccessResponseMsg), +N(OP_DeleteGuildMsg), +N(OP_TrackingUpdateMsg), +N(OP_BeginTrackingMsg), +N(OP_StopTrackingMsg), +N(OP_AdvancementRequestMsg), +N(OP_MapFogDataInitMsg), +N(OP_MapFogDataUpdateMsg), +//N(OP_UpdateAvgFrameTimeMsg), +N(OP_CloseGroupInviteWindowMsg), +N(OP_UpdateGroupMemberDataMsg), +N(OP_WorldPingMsg), +N(OP_MoveLogUpdateMsg), +N(OP_OfferQuestMsg), +//N(OP_MailGetHeadersMsg), +N(OP_MailGetMessageMsg), +N(OP_MailSendMessageMsg), +N(OP_MailDeleteMessageMsg), +N(OP_MailGetHeadersReplyMsg), +N(OP_MailGetMessageReplyMsg), +N(OP_MailSendMessageReplyMsg), +N(OP_MailCommitSendMessageMsg), +N(OP_MailSendSystemMessageMsg), +N(OP_MailRemoveAttachFromMailMsg), +N(OP_WorldShutdownUpdateMsg), +N(OP_ClientIdleBeginMsg), +N(OP_ClientIdleEndMsg), +N(OP_DisplayMailScreenMsg), +N(OP_NotifyApprenticeStoppedMentori), +N(OP_CorruptedClientMsg), +N(OP_MailEventNotificationMsg), +N(OP_RestartZoneMsg), +N(OP_CharTransferStartRequestMsg), +N(OP_CharTransferStartReplyMsg), +N(OP_CharTransferRequestMsg), +N(OP_CharTransferReplyMsg), +N(OP_CharTransferRollbackRequestMsg), +N(OP_CharTransferCommitRequestMsg), +N(OP_CharTransferRollbackReplyMsg), +N(OP_CharTransferCommitReplyMsg), +N(OP_GetCharacterSerializedRequestM), +N(OP_GetCharacterSerializedReplyMsg), +N(OP_CreateCharFromCBBRequestMsg), +N(OP_CreateCharFromCBBReplyMsg), +N(OP_HousingDataChangedMsg), +N(OP_HousingRestoreMsg), +N(OP_AuctionItem), +N(OP_AuctionItemReply), +N(OP_AuctionCoin), +N(OP_AuctionCoinReply), +N(OP_AuctionCharacter), +N(OP_AuctionCharacterReply), +N(OP_AuctionCommitMsg), +N(OP_AuctionAbortMsg), +N(OP_CharTransferValidateRequestMsg), +N(OP_CharTransferValidateReplyMsg), +N(OP_CharacterLinkdeadMsg), +N(OP_RaceRestrictionMsg), +N(OP_SetInstanceDisplayNameMsg), +N(OP_EqHearChatCmd), +N(OP_EqDisplayTextCmd), +N(OP_EqCreateGhostCmd), +N(OP_EqCreateWidgetCmd), +N(OP_EqCreateSignWidgetCmd), +N(OP_EqDestroyGhostCmd), +N(OP_EqUpdateGhostCmd), +N(OP_EqSetControlGhostCmd), +N(OP_EqSetPOVGhostCmd), +N(OP_EqHearCombatCmd), +N(OP_EqHearSpellCastCmd), +N(OP_EqHearSpellInterruptCmd), +N(OP_EqHearSpellFizzleCmd), +N(OP_EqHearConsiderCmd), +N(OP_EqUpdateSubClassesCmd), +N(OP_EqCreateListBoxCmd), +N(OP_EqSetDebugPathPointsCmd), +N(OP_EqCannedEmoteCmd), +N(OP_EqStateCmd), +N(OP_EqPlaySoundCmd), +N(OP_EqPlaySound3DCmd), +N(OP_EqPlayVoiceCmd), +N(OP_EqHearDrowningCmd), +N(OP_EqHearDeathCmd), +N(OP_EqGroupMemberRemovedCmd), +N(OP_EqHearChainEffectCmd), +N(OP_EqReceiveOfferCmd), +N(OP_EqInspectPCResultsCmd), +N(OP_EqDrawablePathGraphCmd), +N(OP_EqDialogOpenCmd), +N(OP_EqDialogCloseCmd), +N(OP_EqCollectionUpdateCmd), +N(OP_EqCollectionFilterCmd), +N(OP_EqCollectionItemCmd), +N(OP_EqQuestJournalUpdateCmd), +N(OP_EqQuestJournalReplyCmd), +N(OP_EqQuestGroupCmd), +N(OP_EqUpdateMerchantCmd), +N(OP_EqUpdateStoreCmd), +N(OP_EqUpdatePlayerTradeCmd), +N(OP_EqHelpPathCmd), +N(OP_EqHelpPathClearCmd), +N(OP_EqUpdateBankCmd), +N(OP_EqExamineInfoCmd), +N(OP_EqCloseWindowCmd), +N(OP_EqUpdateLootCmd), +N(OP_EqJunctionListCmd), +N(OP_EqShowDeathWindowCmd), +N(OP_EqDisplaySpellFailCmd), +N(OP_EqSpellCastStartCmd), +N(OP_EqSpellCastEndCmd), +N(OP_EqResurrectedCmd), +N(OP_EqChoiceWinCmd), +N(OP_EqSetDefaultVerbCmd), +N(OP_EqInstructionWindowCmd), +N(OP_EqInstructionWindowCloseCmd), +N(OP_EqInstructionWindowGoalCmd), +N(OP_EqInstructionWindowTaskCmd), +N(OP_EqEnableGameEventCmd), +N(OP_EqShowWindowCmd), +N(OP_EqEnableWindowCmd), +N(OP_EqFlashWindowCmd), +N(OP_EqHearPlayFlavorCmd), +N(OP_EqUpdateSignWidgetCmd), +N(OP_EqDebugPVDCmd), +N(OP_EqShowBookCmd), +N(OP_EqQuestionnaireCmd), +N(OP_EqGetProbsCmd), +N(OP_EqHearHealCmd), +N(OP_EqChatChannelUpdateCmd), +N(OP_EqWhoChannelQueryReplyCmd), +N(OP_EqAvailWorldChannelsCmd), +N(OP_ArenaGameTypesMsg), +N(OP_EqUpdateTargetCmd), +N(OP_EqConsignmentItemsCmd), +N(OP_EqStartBrokerCmd), +N(OP_EqMapExplorationCmd), +N(OP_EqStoreLogCmd), +N(OP_EqSpellMoveToRangeAndRetryCmd), +N(OP_EqUpdatePlayerMailCmd), +N(OP_EqFactionUpdateCmd), +N(OP_UpdateTitleCmd), +N(OP_UpdatePositionMsg), +N(OP_AttackNotAllowed), +N(OP_AttackAllowed), +N(OP_CancelSpellCast), +N(OP_BadLanguageFilter), +N(OP_DressingRoom), +N(OP_TraitsList), +N(OP_PointOfInterest), +N(OP_AdventureList), +N(OP_CharacterAchievements), +N(OP_RecipeList), +N(OP_BagOptions), +N(OP_AchievementUpdateMsg), +N(OP_PetOptions), +N(OP_BrokerAddBag), +N(OP_CharacterPet), +N(OP_ClearForTakeOffMsg), +N(OP_CharacterCurrency), +N(OP_TradeskillList), +N(OP_RecipeBook), +N(OP_CharacterMerc), +N(OP_AfterInvSpellUpdate), +N(OP_CharacterCreatedDungeons), +N(OP_CharacterHousingList), +N(OP_HouseItemsList), +N(OP_CharacterMounts), +N(OP_LoadCalendarEvents), +N(OP_LoadWelcomeWindow), +N(OP_DungeonMakerItemRequest), +N(OP_SysClient), +N(OP_LFGGroupSearch), +N(OP_MarketPlacePrices), +N(OP_MarketFundsUpdate), +N(OP_MarketAddFundsRequest), +N(OP_ZoneBgInstanceList), +N(OP_UIEvent), +N(OP_Launchpad), +N(OP_EQHearThreatCmd), +N(OP_EqHearSpellNoLandCmd), +N(OP_Weakness), +N(OP_SavageBarInitMsg), +N(OP_PetOptionsResponse), +N(OP_CurrentPet), +N(OP_JournalQuestStoryline), +N(OP_DailyObjectives), +N(OP_RecipeListUnknown), +N(OP_EQHearDispellCmd), +N(OP_ClearForLandingMsg), +N(OP_LikeOption), +N(OP_HeritageMsg), +N(OP_OpenCharCust), +N(OP_PaperdollImage), +N(OP_ReadyForTakeOffMsg), +N(OP_EarlyLandingRequestMsg), +N(OP_SubmitCharCust), +N(OP_DietyAbilityWindow), \ No newline at end of file diff --git a/EQ2/source/common/linked_list.h b/EQ2/source/common/linked_list.h new file mode 100644 index 000000000..023a9d2f5 --- /dev/null +++ b/EQ2/source/common/linked_list.h @@ -0,0 +1,445 @@ +/* + EQ2Emulator: Everquest II Server Emulator + Copyright (C) 2007 EQ2EMulator Development Team (http://www.eq2emulator.net) + + This file is part of EQ2Emulator. + + EQ2Emulator is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + EQ2Emulator is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with EQ2Emulator. If not, see . +*/ +#ifndef LINKEDLIST_H +#define LINKEDLIST_H + +#include "types.h" + +enum direction{FORWARD,BACKWARD}; + +template class LinkedListIterator; + +template +class ListElement +{ +private: + + TYPE data; + ListElement* next; + ListElement* prev; +public: + ListElement (); + ListElement (const TYPE&); + ListElement (const ListElement&); + + ~ListElement (); + + ListElement& operator= (const ListElement&); + + ListElement* GetLast () + { + ListElement* tmp = this; + while (tmp->GetNext()) { + tmp = tmp->GetNext(); + } + return tmp; + } + ListElement* GetNext () const { return next ; } + ListElement* GetPrev () const { return prev ; } + + inline TYPE& GetData () { return data ; } + inline const TYPE& GetData () const { return data ; } + + void SetData ( const TYPE& d ) { data = d ; } // Quagmire - this may look like a mem leak, but dont change it, this behavior is expected where it's called + void SetLastNext ( ListElement* p ) + { + GetLast()->SetNext(p); + } + void SetNext (ListElement* n) { next = n ; } + void SetPrev (ListElement* p) { prev = p ; } + + void ReplaceData(const TYPE&); +}; + +template +class LinkedList +{ +private: + int32 count; + ListElement* first; + bool list_destructor_invoked; + +public: + + LinkedList(); + ~LinkedList(); + bool dont_delete; + LinkedList& operator= (const LinkedList&); + + void Append (const TYPE&); + void Insert (const TYPE&); + TYPE Pop(); + TYPE PeekTop(); + void Clear(); + void LCount() { count--; } + void ResetCount() { count=0; } + int32 Count() { return count; } + friend class LinkedListIterator; +}; + +template +class LinkedListIterator +{ +private: + LinkedList& list; + ListElement* current_element; + direction dir; + +public: + LinkedListIterator(LinkedList& l,direction d = FORWARD) : list(l), dir(d) {}; + + void Advance(); + const TYPE& GetData(); + bool IsFirst() + { + if (current_element->GetPrev() == 0) + return true; + else + return false; + } + bool IsLast() + { + if (current_element->GetNext() == 0) + return true; + else + return false; + } + bool MoreElements(); + void MoveFirst(); + void MoveLast(); + void RemoveCurrent(bool DeleteData = true); + void Replace(const TYPE& new_data); + void Reset(); + void SetDir(direction); +}; + +template +void LinkedListIterator::Advance() +{ + if (current_element == 0) + { + return; + } + if (dir == FORWARD) + { + current_element = current_element->GetNext(); + } + else + { + current_element = current_element->GetPrev(); + } + + if (list.list_destructor_invoked) + { + while(current_element && current_element->GetData() == 0) + { +// if (current_element == 0) +// { +// return; +// } + if (dir == FORWARD) + { + current_element = current_element->GetNext(); + } + else + { + current_element = current_element->GetPrev(); + } + } + } +} + +template +bool LinkedListIterator::MoreElements() +{ + if (current_element == 0) + return false; + return true; +} + +template +const TYPE& LinkedListIterator::GetData() +{ + return current_element->GetData(); +} + +template +void LinkedListIterator::MoveFirst() +{ + ListElement* prev = current_element->GetPrev(); + ListElement* next = current_element->GetNext(); + + if (prev == 0) + { + return; + } + +// if (prev != 0) +// { + prev->SetNext(next); +// } + if (next != 0) + { + next->SetPrev(prev); + } + current_element->SetPrev(0); + current_element->SetNext(list.first); + list.first->SetPrev(current_element); + list.first = current_element; +} + + +template +void LinkedListIterator::MoveLast() +{ + ListElement* prev = current_element->GetPrev(); + ListElement* next = current_element->GetNext(); + + if (next == 0) + { + return; + } + + if (prev != 0) + { + prev->SetNext(next); + } + else + { + list.first = next; + } +// if (next != 0) +// { + next->SetPrev(prev); +// } + current_element->SetNext(0); + current_element->SetPrev(next->GetLast()); + next->GetLast()->SetNext(current_element); +} + +template +void LinkedListIterator::RemoveCurrent(bool DeleteData) +{ + ListElement* save; + + if (list.first == current_element) + { + list.first = current_element->GetNext(); + } + + if (current_element->GetPrev() != 0) + { + current_element->GetPrev()->SetNext(current_element->GetNext()); + } + if (current_element->GetNext() != 0) + { + current_element->GetNext()->SetPrev(current_element->GetPrev()); + } + if (dir == FORWARD) + { + save = current_element->GetNext(); + } + else + { + save = current_element->GetPrev(); + } + current_element->SetNext(0); + current_element->SetPrev(0); + if (!DeleteData) + current_element->SetData(0); + safe_delete(current_element); + current_element = save; + list.LCount(); +} + +template +void LinkedListIterator::Replace(const TYPE& new_data) +{ + current_element->ReplaceData(new_data); +} + +template +void LinkedListIterator::Reset() +{ + if (!(&list)) + { + current_element=0; + return; + } + + if (dir == FORWARD) + { + current_element = list.first; + } + else + { + if (list.first == 0) + { + current_element = 0; + } + else + { + current_element = list.first->GetLast(); + } + } + + if (list.list_destructor_invoked) + { + while(current_element && current_element->GetData() == 0) + { +// if (current_element == 0) +// { +// return; +// } + if (dir == FORWARD) + { + current_element = current_element->GetNext(); + } + else + { + current_element = current_element->GetPrev(); + } + } + } +} + +template +void LinkedListIterator::SetDir(direction d) +{ + dir = d; +} + +template +ListElement::ListElement(const TYPE& d) +{ + data = d; + next = 0; + prev = 0; +} + +template +ListElement::~ListElement() +{ +// cout << "ListElement::~ListElement()" << endl; + + if (data != 0) + safe_delete(data); + data = 0; + if (next != 0) + { + safe_delete(next); + next = 0; + } +} + +template +void ListElement::ReplaceData(const TYPE& new_data) +{ + if (data != 0) + safe_delete(data); + data = new_data; +} + +template +LinkedList::LinkedList() +{ + list_destructor_invoked = false; + first = 0; + count = 0; + dont_delete = false; +} + +template +LinkedList::~LinkedList() +{ + list_destructor_invoked = true; + if(!dont_delete) + Clear(); +} + +template +void LinkedList::Clear() { + while (first) { + ListElement* tmp = first; + first = tmp->GetNext(); + tmp->SetNext(0); + safe_delete(tmp); + } + ResetCount(); +} + +template +void LinkedList::Append(const TYPE& data) +{ + ListElement* new_element = new ListElement(data); + + if (first == 0) + { + first = new_element; + } + else + { + new_element->SetPrev(first->GetLast()); + first->SetLastNext(new_element); + } + count++; +} + +template +void LinkedList::Insert(const TYPE& data) +{ + ListElement* new_element = new ListElement(data); + + new_element->SetNext(first); + if (first != 0) + { + first->SetPrev(new_element); + } + first = new_element; + count++; +} + +template +TYPE LinkedList::Pop() { + TYPE ret = 0; + if (first) { + ListElement* tmpdel = first; + first = tmpdel->GetNext(); + if (first) + first->SetPrev(0); + ret = tmpdel->GetData(); + tmpdel->SetData(0); + tmpdel->SetNext(0); + safe_delete(tmpdel); + count--; + } + return ret; +} + +template +TYPE LinkedList::PeekTop() { + if (first) + return first->GetData(); + return 0; +} + +#endif + + diff --git a/EQ2/source/common/login_oplist.h b/EQ2/source/common/login_oplist.h new file mode 100644 index 000000000..c8bd536b5 --- /dev/null +++ b/EQ2/source/common/login_oplist.h @@ -0,0 +1,61 @@ +/* + EQ2Emulator: Everquest II Server Emulator + Copyright (C) 2007 EQ2EMulator Development Team (http://www.eq2emulator.net) + + This file is part of EQ2Emulator. + + EQ2Emulator is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + EQ2Emulator is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with EQ2Emulator. If not, see . +*/ +#if defined(LOGIN) || defined(MINILOGIN) +N(OP_LoginRequestMsg), +N(OP_LoginByNumRequestMsg), +N(OP_WSLoginRequestMsg), +N(OP_ESLoginRequestMsg), +N(OP_LoginReplyMsg), +N(OP_WorldListMsg), +N(OP_WorldStatusChangeMsg), +N(OP_AllWSDescRequestMsg), +N(OP_WSStatusReplyMsg), +N(OP_AllCharactersDescRequestMsg), +N(OP_AllCharactersDescReplyMsg), +N(OP_CreateCharacterRequestMsg), +N(OP_ReskinCharacterRequestMsg), +N(OP_CreateCharacterReplyMsg), +N(OP_WSCreateCharacterRequestMsg), +N(OP_WSCreateCharacterReplyMsg), +N(OP_DeleteCharacterRequestMsg), +N(OP_DeleteCharacterReplyMsg), +N(OP_PlayCharacterRequestMsg), +N(OP_PlayCharacterReplyMsg), +N(OP_ServerPlayCharacterRequestMsg), +N(OP_ServerPlayCharacterReplyMsg), +N(OP_KeymapLoadMsg), +N(OP_KeymapNoneMsg), +N(OP_KeymapDataMsg), +N(OP_KeymapSaveMsg), +//N(OP_LSRequestPlayerDescMsg), +N(OP_LSCheckAcctLockMsg), +N(OP_WSAcctLockStatusMsg), +N(OP_LsRequestClientCrashLogMsg), +N(OP_LsClientBaselogReplyMsg), +N(OP_LsClientCrashlogReplyMsg), +N(OP_LsClientAlertlogReplyMsg), +N(OP_LsClientVerifylogReplyMsg), +N(OP_BadLanguageFilter), +N(OP_WSServerLockMsg), +N(OP_WSServerHideMsg), +N(OP_LSServerLockMsg), +N(OP_UpdateCharacterSheetMsg), +N(OP_UpdateInventoryMsg), +#endif diff --git a/EQ2/source/common/md5.cpp b/EQ2/source/common/md5.cpp new file mode 100644 index 000000000..577ad79d4 --- /dev/null +++ b/EQ2/source/common/md5.cpp @@ -0,0 +1,281 @@ +/* + EQ2Emulator: Everquest II Server Emulator + Copyright (C) 2007 EQ2EMulator Development Team (http://www.eq2emulator.net) + + This file is part of EQ2Emulator. + + EQ2Emulator is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + EQ2Emulator is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with EQ2Emulator. If not, see . +*/ +#include /* for memcpy() */ +#include "../common/md5.h" +#include "../common/MiscFunctions.h" +#include "../common/seperator.h" + +MD5::MD5() { + memset(pMD5, 0, 16); +} + +MD5::MD5(const uchar* buf, uint32 len) { + Generate(buf, len, pMD5); +} + +MD5::MD5(const char* buf, uint32 len) { + Generate((const uchar*) buf, len, pMD5); +} + +MD5::MD5(const int8 buf[16]) { + Set(buf); +} + +MD5::MD5(const char* iMD5String) { + Set(iMD5String); +} + +void MD5::Generate(const char* iString) { + Generate((const uchar*) iString, strlen(iString)); +} + +void MD5::Generate(const int8* buf, uint32 len) { + Generate(buf, len, pMD5); +} + +bool MD5::Set(const int8 buf[16]) { + memcpy(pMD5, buf, 16); + return true; +} + +bool MD5::Set(const char* iMD5String) { + char tmp[5] = { '0', 'x', 0, 0, 0 }; + for (int i=0; i<16; i++) { + tmp[2] = iMD5String[i*2]; + tmp[3] = iMD5String[(i*2) + 1]; + if (!Seperator::IsHexNumber(tmp)) + return false; + pMD5[i] = hextoi(tmp); + } + return true; +} + +MD5::operator const char* () { + snprintf(pMD5String, sizeof(pMD5String), "%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x", pMD5[0], pMD5[1], pMD5[2], pMD5[3], pMD5[4], pMD5[5], pMD5[6], pMD5[7], pMD5[8], pMD5[9], pMD5[10], pMD5[11], pMD5[12], pMD5[13], pMD5[14], pMD5[15]); + return pMD5String; +} + +bool MD5::operator== (const MD5& iMD5) { + if (memcmp(pMD5, iMD5.pMD5, 16) == 0) + return true; + else + return false; +} + +bool MD5::operator== (const int8* iMD5) { + if (memcmp(pMD5, iMD5, 16) == 0) + return true; + else + return false; +} + +bool MD5::operator== (const char* iMD5String) { + char tmp[5] = { '0', 'x', 0, 0, 0 }; + for (int i=0; i<16; i++) { + tmp[2] = iMD5String[i*2]; + tmp[3] = iMD5String[(i*2) + 1]; + if (pMD5[i] != hextoi(tmp)) + return false; + } + return true; +} + +MD5& MD5::operator= (const MD5& iMD5) { + memcpy(pMD5, iMD5.pMD5, 16); + return *this; +} + +MD5* MD5::operator= (const MD5* iMD5) { + memcpy(pMD5, iMD5->pMD5, 16); + return this; +} + +/* Byte-swap an array of words to little-endian. (Byte-sex independent) */ +void MD5::byteSwap(uint32 *buf, uint32 words) { + int8 *p = (int8 *)buf; + do { + *buf++ = (uint32)((uint32)p[3]<<8 | p[2]) << 16 | + ((uint32)p[1]<<8 | p[0]); + p += 4; + } while (--words); +} + +void MD5::Generate(const int8* buf, uint32 len, int8 digest[16]) { + MD5Context ctx; + Init(&ctx); + Update(&ctx, buf, len); + Final(digest, &ctx); +} + +/* Start MD5 accumulation. */ +void MD5::Init(struct MD5Context *ctx) { + ctx->hash[0] = 0x67452301; + ctx->hash[1] = 0xefcdab89; + ctx->hash[2] = 0x98badcfe; + ctx->hash[3] = 0x10325476; + ctx->bytes[1] = ctx->bytes[0] = 0; +} + +/* Update ctx to reflect the addition of another buffer full of bytes. */ +void MD5::Update(struct MD5Context *ctx, int8 const *buf, uint32 len) { + uint32 t = ctx->bytes[0]; + if ((ctx->bytes[0] = t + len) < t) /* Update 64-bit byte count */ + ctx->bytes[1]++; /* Carry from low to high */ + + + + t = 64 - (t & 0x3f); /* Bytes available in ctx->input (>= 1) */ + if (t > len) { + memcpy((int8*)ctx->input+64-t, buf, len); + return; + } + /* First chunk is an odd size */ + memcpy((int8*)ctx->input+64-t, buf, t); + byteSwap(ctx->input, 16); + Transform(ctx->hash, ctx->input); + buf += t; + len -= t; + /* Process data in 64-byte chunks */ + while (len >= 64) { + memcpy(ctx->input, buf, 64); + byteSwap(ctx->input, 16); + Transform(ctx->hash, ctx->input); + buf += 64; + len -= 64; + } + /* Buffer any remaining bytes of data */ + memcpy(ctx->input, buf, len); +} + +/* Final wrapup - pad to 64-byte boundary with the bit pattern +* 1 0* (64-bit count of bits processed, LSB-first) */ +void MD5::Final(int8 digest[16], MD5Context *ctx) { + int count = ctx->bytes[0] & 0x3F; /* Bytes mod 64 */ + int8 *p = (int8*)ctx->input + count; + /* Set the first byte of padding to 0x80. There is always room. */ + *p++ = 0x80; + /* Bytes of zero padding needed to make 56 bytes (-8..55) */ + count = 56 - 1 - count; + if (count < 0) { /* Padding forces an extra block */ + memset(p, 0, count+8); + byteSwap(ctx->input, 16); + Transform(ctx->hash, ctx->input); + p = (int8*)ctx->input; + count = 56; + } + memset(p, 0, count); + byteSwap(ctx->input, 14); + /* Append 8 bytes of length in *bits* and transform */ + ctx->input[14] = ctx->bytes[0] << 3; + + ctx->input[15] = ctx->bytes[1] << 3 | ctx->bytes[0] >> 29; + Transform(ctx->hash, ctx->input); + byteSwap(ctx->hash, 4); + memcpy(digest, ctx->hash, 16); + memset(ctx, 0, sizeof(*ctx)); /* In case it's sensitive */ +} + +/* The four core functions */ +#define F1(x, y, z) (z ^ (x & (y ^ z))) +#define F2(x, y, z) F1(z, x, y) +#define F3(x, y, z) (x ^ y ^ z) +#define F4(x, y, z) (y ^ (x | ~z)) +/* This is the central step in the MD5 algorithm. */ +#define MD5STEP(f,w,x,y,z,in,s) (w += f(x,y,z)+in, w = (w<>(32-s)) + x) + + + +/* The heart of the MD5 algorithm. */ +void MD5::Transform(uint32 hash[4], const uint32 input[16]) { + register uint32 a = hash[0], b = hash[1], c = hash[2], d = hash[3]; + + MD5STEP(F1, a, b, c, d, input[ 0]+0xd76aa478, 7); + MD5STEP(F1, d, a, b, c, input[ 1]+0xe8c7b756, 12); + MD5STEP(F1, c, d, a, b, input[ 2]+0x242070db, 17); + MD5STEP(F1, b, c, d, a, input[ 3]+0xc1bdceee, 22); + MD5STEP(F1, a, b, c, d, input[ 4]+0xf57c0faf, 7); + MD5STEP(F1, d, a, b, c, input[ 5]+0x4787c62a, 12); + MD5STEP(F1, c, d, a, b, input[ 6]+0xa8304613, 17); + MD5STEP(F1, b, c, d, a, input[ 7]+0xfd469501, 22); + MD5STEP(F1, a, b, c, d, input[ 8]+0x698098d8, 7); + MD5STEP(F1, d, a, b, c, input[ 9]+0x8b44f7af, 12); + MD5STEP(F1, c, d, a, b, input[10]+0xffff5bb1, 17); + MD5STEP(F1, b, c, d, a, input[11]+0x895cd7be, 22); + MD5STEP(F1, a, b, c, d, input[12]+0x6b901122, 7); + MD5STEP(F1, d, a, b, c, input[13]+0xfd987193, 12); + MD5STEP(F1, c, d, a, b, input[14]+0xa679438e, 17); + MD5STEP(F1, b, c, d, a, input[15]+0x49b40821, 22); + + MD5STEP(F2, a, b, c, d, input[ 1]+0xf61e2562, 5); + MD5STEP(F2, d, a, b, c, input[ 6]+0xc040b340, 9); + MD5STEP(F2, c, d, a, b, input[11]+0x265e5a51, 14); + MD5STEP(F2, b, c, d, a, input[ 0]+0xe9b6c7aa, 20); + MD5STEP(F2, a, b, c, d, input[ 5]+0xd62f105d, 5); + MD5STEP(F2, d, a, b, c, input[10]+0x02441453, 9); + MD5STEP(F2, c, d, a, b, input[15]+0xd8a1e681, 14); + MD5STEP(F2, b, c, d, a, input[ 4]+0xe7d3fbc8, 20); + MD5STEP(F2, a, b, c, d, input[ 9]+0x21e1cde6, 5); + MD5STEP(F2, d, a, b, c, input[14]+0xc33707d6, 9); + MD5STEP(F2, c, d, a, b, input[ 3]+0xf4d50d87, 14); + MD5STEP(F2, b, c, d, a, input[ 8]+0x455a14ed, 20); + MD5STEP(F2, a, b, c, d, input[13]+0xa9e3e905, 5); + MD5STEP(F2, d, a, b, c, input[ 2]+0xfcefa3f8, 9); + MD5STEP(F2, c, d, a, b, input[ 7]+0x676f02d9, 14); + MD5STEP(F2, b, c, d, a, input[12]+0x8d2a4c8a, 20); + + + + + MD5STEP(F3, a, b, c, d, input[ 5]+0xfffa3942, 4); + MD5STEP(F3, d, a, b, c, input[ 8]+0x8771f681, 11); + MD5STEP(F3, c, d, a, b, input[11]+0x6d9d6122, 16); + MD5STEP(F3, b, c, d, a, input[14]+0xfde5380c, 23); + MD5STEP(F3, a, b, c, d, input[ 1]+0xa4beea44, 4); + MD5STEP(F3, d, a, b, c, input[ 4]+0x4bdecfa9, 11); + MD5STEP(F3, c, d, a, b, input[ 7]+0xf6bb4b60, 16); + MD5STEP(F3, b, c, d, a, input[10]+0xbebfbc70, 23); + MD5STEP(F3, a, b, c, d, input[13]+0x289b7ec6, 4); + MD5STEP(F3, d, a, b, c, input[ 0]+0xeaa127fa, 11); + MD5STEP(F3, c, d, a, b, input[ 3]+0xd4ef3085, 16); + MD5STEP(F3, b, c, d, a, input[ 6]+0x04881d05, 23); + MD5STEP(F3, a, b, c, d, input[ 9]+0xd9d4d039, 4); + MD5STEP(F3, d, a, b, c, input[12]+0xe6db99e5, 11); + MD5STEP(F3, c, d, a, b, input[15]+0x1fa27cf8, 16); + MD5STEP(F3, b, c, d, a, input[ 2]+0xc4ac5665, 23); + + MD5STEP(F4, a, b, c, d, input[ 0]+0xf4292244, 6); + MD5STEP(F4, d, a, b, c, input[ 7]+0x432aff97, 10); + MD5STEP(F4, c, d, a, b, input[14]+0xab9423a7, 15); + MD5STEP(F4, b, c, d, a, input[ 5]+0xfc93a039, 21); + MD5STEP(F4, a, b, c, d, input[12]+0x655b59c3, 6); + MD5STEP(F4, d, a, b, c, input[ 3]+0x8f0ccc92, 10); + MD5STEP(F4, c, d, a, b, input[10]+0xffeff47d, 15); + MD5STEP(F4, b, c, d, a, input[ 1]+0x85845dd1, 21); + MD5STEP(F4, a, b, c, d, input[ 8]+0x6fa87e4f, 6); + MD5STEP(F4, d, a, b, c, input[15]+0xfe2ce6e0, 10); + MD5STEP(F4, c, d, a, b, input[ 6]+0xa3014314, 15); + MD5STEP(F4, b, c, d, a, input[13]+0x4e0811a1, 21); + MD5STEP(F4, a, b, c, d, input[ 4]+0xf7537e82, 6); + MD5STEP(F4, d, a, b, c, input[11]+0xbd3af235, 10); + MD5STEP(F4, c, d, a, b, input[ 2]+0x2ad7d2bb, 15); + MD5STEP(F4, b, c, d, a, input[ 9]+0xeb86d391, 21); + + hash[0] += a; hash[1] += b; hash[2] += c; hash[3] += d; +} diff --git a/EQ2/source/common/md5.h b/EQ2/source/common/md5.h new file mode 100644 index 000000000..6c54f9418 --- /dev/null +++ b/EQ2/source/common/md5.h @@ -0,0 +1,64 @@ +/* + EQ2Emulator: Everquest II Server Emulator + Copyright (C) 2007 EQ2EMulator Development Team (http://www.eq2emulator.net) + + This file is part of EQ2Emulator. + + EQ2Emulator is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + EQ2Emulator is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with EQ2Emulator. If not, see . +*/ +#ifndef MD5_H +#define MD5_H +#include "../common/types.h" + + +class MD5 { +public: + struct MD5Context { + uint32 hash[4]; + uint32 bytes[2]; + uint32 input[16]; + }; + static void Generate(const int8* buf, uint32 len, int8 digest[16]); + + static void Init(struct MD5Context *context); + static void Update(struct MD5Context *context, const int8 *buf, uint32 len); + static void Final(int8 digest[16], struct MD5Context *context); + + MD5(); + MD5(const uchar* buf, uint32 len); + MD5(const char* buf, uint32 len); + MD5(const int8 buf[16]); + MD5(const char* iMD5String); + + void Generate(const char* iString); + void Generate(const int8* buf, uint32 len); + bool Set(const int8 buf[16]); + bool Set(const char* iMD5String); + + bool operator== (const MD5& iMD5); + bool operator== (const int8 iMD5[16]); + bool operator== (const char* iMD5String); + + MD5& operator= (const MD5& iMD5); + MD5* operator= (const MD5* iMD5); + MD5* operator= (const int8* iMD5); + operator const char* (); +protected: + int8 pMD5[16]; +private: + static void byteSwap(uint32 *buf, uint32 words); + static void Transform(uint32 hash[4], const int32 input[16]); + char pMD5String[33]; +}; +#endif diff --git a/EQ2/source/common/misc.cpp b/EQ2/source/common/misc.cpp new file mode 100644 index 000000000..9dcb82390 --- /dev/null +++ b/EQ2/source/common/misc.cpp @@ -0,0 +1,289 @@ +/* + EQ2Emulator: Everquest II Server Emulator + Copyright (C) 2007 EQ2EMulator Development Team (http://www.eq2emulator.net) + + This file is part of EQ2Emulator. + + EQ2Emulator is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + EQ2Emulator is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with EQ2Emulator. If not, see . +*/ +#ifdef WIN32 + // VS6 doesn't like the length of STL generated names: disabling + #pragma warning(disable:4786) +#endif +#include +#include +#include +#include +#include +#include +#include +#include +#include "misc.h" +#include "types.h" +using namespace std; + +#define ENC(c) (((c) & 0x3f) + ' ') +#define DEC(c) (((c) - ' ') & 0x3f) + +map DBFieldNames; + +#ifndef WIN32 +#ifdef FREEBSD +int print_stacktrace() +{ + printf("Insert stack trace here...\n"); + return(0); +} +#else //!WIN32 && !FREEBSD == linux +#include +int print_stacktrace() +{ + void *ba[20]; + int n = backtrace (ba, 20); + if (n != 0) + { + char **names = backtrace_symbols (ba, n); + if (names != NULL) + { + int i; + cerr << "called from " << (char*)names[0] << endl; + for (i = 1; i < n; ++i) + cerr << " " << (char*)names[i] << endl; + free (names); + } + } + return(0); +} +#endif //!FREEBSD +#endif //!WIN32 + +int Deflate(unsigned char* in_data, int in_length, unsigned char* out_data, int max_out_length) +{ +z_stream zstream; +int zerror; + + zstream.next_in = in_data; + zstream.avail_in = in_length; + zstream.zalloc = Z_NULL; + zstream.zfree = Z_NULL; + zstream.opaque = Z_NULL; + deflateInit(&zstream, Z_FINISH); + zstream.next_out = out_data; + zstream.avail_out = max_out_length; + zerror = deflate(&zstream, Z_FINISH); + + if (zerror == Z_STREAM_END) + { + deflateEnd(&zstream); + return zstream.total_out; + } + else + { + cout << "Error: Deflate: deflate() returned " << zerror << " '"; + if (zstream.msg) + cout << zstream.msg; + cout << "'" << endl; + zerror = deflateEnd(&zstream); + return 0; + } +} + +int Inflate(unsigned char* indata, int indatalen, unsigned char* outdata, int outdatalen, bool iQuiet) +{ +z_stream zstream; +int zerror = 0; +int i; + + zstream.next_in = indata; + zstream.avail_in = indatalen; + zstream.next_out = outdata; + zstream.avail_out = outdatalen; + zstream.zalloc = Z_NULL; + zstream.zfree = Z_NULL; + zstream.opaque = Z_NULL; + + i = inflateInit2( &zstream, 15 ); + if (i != Z_OK) { + return 0; + } + + zerror = inflate( &zstream, Z_FINISH ); + + if(zerror == Z_STREAM_END) { + inflateEnd( &zstream ); + return zstream.total_out; + } + else { + if (!iQuiet) { + cout << "Error: Inflate: inflate() returned " << zerror << " '"; + if (zstream.msg) + cout << zstream.msg; + cout << "'" << endl; + } + + if (zerror == -4 && zstream.msg == 0) + { + return 0; + } + + zerror = inflateEnd( &zstream ); + return 0; + } +} + +void dump_message_column(unsigned char *buffer, unsigned long length, string leader, FILE *to) +{ +unsigned long i,j; +unsigned long rows,offset=0; + rows=(length/16)+1; + for(i=0;i= 0x41 && val <=0x5A) || (val >= 0x61 && val <=0x7A)) + return true; + else + return false; +} + +int GetItemNameCrc(string item_name){ + const char *src = item_name.c_str(); + uLong crc = crc32(0L, Z_NULL, 0); + crc = crc32(crc, (unsigned const char *)src,strlen(src)) + 1; +return sint32(crc) * -1; + +} diff --git a/EQ2/source/common/misc.h b/EQ2/source/common/misc.h new file mode 100644 index 000000000..f1be5000d --- /dev/null +++ b/EQ2/source/common/misc.h @@ -0,0 +1,64 @@ +/* + EQ2Emulator: Everquest II Server Emulator + Copyright (C) 2007 EQ2EMulator Development Team (http://www.eq2emulator.net) + + This file is part of EQ2Emulator. + + EQ2Emulator is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + EQ2Emulator is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with EQ2Emulator. If not, see . +*/ +#ifndef _MISC_H + +#define _MISC_H +#include +#include +#include + +using namespace std; + +#define ITEMFIELDCOUNT 116 + +void Unprotect(string &s, char what); + +void Protect(string &s, char what); + +bool ItemParse(const char *data, int length, map > &items, int id_pos, int name_pos, int max_field, int level=0); + +int Tokenize(string s, map & tokens, char delim='|'); + +void LoadItemDBFieldNames(); + +void encode_length(unsigned long length, char *out); +unsigned long decode_length(char *in); +unsigned long encode(char *in, unsigned long length, char *out); +void decode(char *in, char *out); +void encode_chunk(char *in, int len, char *out); +void decode_chunk(char *in, char *out); + +int Deflate(unsigned char* in_data, int in_length, unsigned char* out_data, int max_out_length); +int Inflate(unsigned char* indata, int indatalen, unsigned char* outdata, int outdatalen, bool iQuiet=true); +#ifndef WIN32 +int print_stacktrace(); +#endif + +bool alpha_check(unsigned char val); + +void dump_message_column(unsigned char *buffer, unsigned long length, string leader="", FILE *to = stdout); +string string_from_time(string pattern, time_t now=0); +string timestamp(time_t now=0); +string long2ip(unsigned long ip); +string pop_arg(string &s, string seps, bool obey_quotes); +int EQsprintf(char *buffer, const char *pattern, const char *arg1, const char *arg2, const char *arg3, const char *arg4, const char *arg5, const char *arg6, const char *arg7, const char *arg8, const char *arg9); +int GetItemNameCrc(string item_name); + +#endif diff --git a/EQ2/source/common/op_codes.h b/EQ2/source/common/op_codes.h new file mode 100644 index 000000000..c25e9a0ee --- /dev/null +++ b/EQ2/source/common/op_codes.h @@ -0,0 +1,44 @@ +/* + EQ2Emulator: Everquest II Server Emulator + Copyright (C) 2007 EQ2EMulator Development Team (http://www.eq2emulator.net) + + This file is part of EQ2Emulator. + + EQ2Emulator is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + EQ2Emulator is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with EQ2Emulator. If not, see . +*/ +#ifndef _OP_CODES_H + +#define _OP_CODES_H + +static const char OP_SessionRequest = 0x01; +static const char OP_SessionResponse = 0x02; +static const char OP_Combined = 0x03; +static const char OP_SessionDisconnect = 0x05; +static const char OP_KeepAlive = 0x06; +static const char OP_ServerKeyRequest = 0x07; +static const char OP_SessionStatResponse= 0x08; +static const char OP_Packet = 0x09; +static const char OP_Fragment = 0x0d; +static const char OP_OutOfOrderAck = 0x11; +static const char OP_Ack = 0x15; +static const char OP_AppCombined = 0x19; +static const char OP_OutOfSession = 0x1d; + +#if defined(LOGIN) || defined(CHAT) + #define APP_OPCODE_SIZE 1 +#else + #define APP_OPCODE_SIZE 2 +#endif + +#endif diff --git a/EQ2/source/common/opcodemgr.cpp b/EQ2/source/common/opcodemgr.cpp new file mode 100644 index 000000000..9c41de698 --- /dev/null +++ b/EQ2/source/common/opcodemgr.cpp @@ -0,0 +1,319 @@ +/* + EQ2Emulator: Everquest II Server Emulator + Copyright (C) 2007 EQ2EMulator Development Team (http://www.eq2emulator.net) + + This file is part of EQ2Emulator. + + EQ2Emulator is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + EQ2Emulator is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with EQ2Emulator. If not, see . +*/ +#include "debug.h" +#include +#include +#include "opcodemgr.h" +//#include "debug.h" +#include "emu_opcodes.h" +#include "../common/Log.h" + +#if defined(SHARED_OPCODES) && !defined(EQ2) + #include "EMuShareMem.h" + extern LoadEMuShareMemDLL EMuShareMemDLL; +#endif + +#include +#include +using namespace std; + + +//#define DEBUG_TRANSLATE + + +OpcodeManager::OpcodeManager() { + loaded = false; +} +bool OpcodeManager::LoadOpcodesMap(map* eq, OpcodeSetStrategy *s){ + //do the mapping and store them in the shared memory array + bool ret = true; + EmuOpcode emu_op; + map::iterator res; + //stupid enum wont let me ++ on it... + + + for(emu_op = (EmuOpcode)(0); emu_op < _maxEmuOpcode; emu_op=(EmuOpcode)(emu_op+1)) { + //get the name of this emu opcode + const char *op_name = OpcodeNames[emu_op]; + if(op_name[0] == '\0') { + break; + } + + //find the opcode in the file + res = eq->find(op_name); + if(res == eq->end()) { + LogWrite(OPCODE__WARNING, 1, "Opcode", "Opcode %s is missing from the opcodes table.", op_name); + continue; //continue to give them a list of all missing opcodes + } + + //ship the mapping off to shared mem. + s->Set(emu_op, res->second); + } + return ret; +} +bool OpcodeManager::LoadOpcodesFile(const char *filename, OpcodeSetStrategy *s) { + FILE *opf = fopen(filename, "r"); + if(opf == NULL) { + LogWrite(OPCODE__ERROR, 0, "Opcode", "Unable to open opcodes file '%s'. Thats bad.", filename); + return(false); + } + + map eq; + + //load the opcode file into eq, could swap in a nice XML parser here + char line[2048]; + int lineno = 0; + uint16 curop; + while(!feof(opf)) { + lineno++; + line[0] = '\0'; //for blank line at end of file + if(fgets(line, sizeof(line), opf) == NULL) + break; + + //ignore any line that dosent start with OP_ + if(line[0] != 'O' || line[1] != 'P' || line[2] != '_') + continue; + + char *num = line+3; //skip OP_ + //look for the = sign + while(*num != '=' && *num != '\0') { + num++; + } + //make sure we found = + if(*num != '=') { + LogWrite(OPCODE__ERROR, 0, "Opcode", "Malformed opcode line at %s:%d\n", filename, lineno); + continue; + } + *num = '\0'; //null terminate the name + num++; //num should point to the opcode + + //read the opcode + if(sscanf(num, "0x%hx", &curop) != 1) { + LogWrite(OPCODE__ERROR, 0, "Opcode", "Malformed opcode at %s:%d\n", filename, lineno); + continue; + } + + //we have a name and our opcode... stick it in the map + eq[line] = curop; + } + fclose(opf); + return LoadOpcodesMap(&eq, s); +} + +//convenience routines +const char *OpcodeManager::EmuToName(const EmuOpcode emu_op) { + return(OpcodeNames[emu_op]); +} + +const char *OpcodeManager::EQToName(const uint16 eq_op) { + //first must resolve the eq op to an emu op + EmuOpcode emu_op = EQToEmu(eq_op); + return(OpcodeNames[emu_op]); +} + +EmuOpcode OpcodeManager::NameSearch(const char *name) { + EmuOpcode emu_op; + //stupid enum wont let me ++ on it... + for(emu_op = (EmuOpcode)(0); emu_op < _maxEmuOpcode; emu_op=(EmuOpcode)(emu_op+1)) { + //get the name of this emu opcode + const char *op_name = OpcodeNames[emu_op]; + if(!strcasecmp(op_name, name)) { + return(emu_op); + } + } + return(OP_Unknown); +} + +RegularOpcodeManager::RegularOpcodeManager() +: MutableOpcodeManager() +{ + emu_to_eq = NULL; + eq_to_emu = NULL; + EQOpcodeCount = 0; + EmuOpcodeCount = 0; +} + +RegularOpcodeManager::~RegularOpcodeManager() { + safe_delete_array(emu_to_eq); + safe_delete_array(eq_to_emu); +} + +bool RegularOpcodeManager::LoadOpcodes(map* eq) { + NormalMemStrategy s; + s.it = this; + MOpcodes.lock(); + + loaded = true; + eq_to_emu = new EmuOpcode[MAX_EQ_OPCODE]; + emu_to_eq = new uint16[_maxEmuOpcode]; + EQOpcodeCount = MAX_EQ_OPCODE; + EmuOpcodeCount = _maxEmuOpcode; + + //dont need to set eq_to_emu cause every element should get a value + memset(eq_to_emu, 0, sizeof(EmuOpcode)*MAX_EQ_OPCODE); + + bool ret = LoadOpcodesMap(eq, &s); + MOpcodes.unlock(); + return ret; +} + +bool RegularOpcodeManager::LoadOpcodes(const char *filename) { + NormalMemStrategy s; + s.it = this; + MOpcodes.lock(); + + loaded = true; + eq_to_emu = new EmuOpcode[MAX_EQ_OPCODE]; + emu_to_eq = new uint16[_maxEmuOpcode]; + EQOpcodeCount = MAX_EQ_OPCODE; + EmuOpcodeCount = _maxEmuOpcode; + + //dont need to set eq_to_emu cause every element should get a value + memset(eq_to_emu, 0, sizeof(EmuOpcode)*MAX_EQ_OPCODE); + + bool ret = LoadOpcodesFile(filename, &s); + MOpcodes.unlock(); + return ret; +} + +bool RegularOpcodeManager::ReloadOpcodes(const char *filename) { + if(!loaded) + return(LoadOpcodes(filename)); + + NormalMemStrategy s; + s.it = this; + MOpcodes.lock(); + + memset(eq_to_emu, 0, sizeof(EmuOpcode)*MAX_EQ_OPCODE); + + bool ret = LoadOpcodesFile(filename, &s); + + MOpcodes.unlock(); + return(ret); +} + + +uint16 RegularOpcodeManager::EmuToEQ(const EmuOpcode emu_op) { + //opcode is checked for validity in GetEQOpcode + uint16 res; + MOpcodes.lock(); + res = emu_to_eq[emu_op]; + MOpcodes.unlock(); +#ifdef _DEBUG_TRANSLATE + fprintf(stderr, "M Translate Emu %s (%d) to EQ 0x%.4x\n", OpcodeNames[emu_op], emu_op, res); +#endif + return(res); +} + +EmuOpcode RegularOpcodeManager::EQToEmu(const uint16 eq_op) { + //opcode is checked for validity in GetEmuOpcode +//Disabled since current live EQ uses the entire uint16 bitspace for opcodes +// if(eq_op > MAX_EQ_OPCODE) +// return(OP_Unknown); + EmuOpcode res; + MOpcodes.lock(); + res = eq_to_emu[eq_op]; + MOpcodes.unlock(); +#ifdef _DEBUG_TRANSLATE + fprintf(stderr, "M Translate EQ 0x%.4x to Emu %s (%d)\n", eq_op, OpcodeNames[res], res); +#endif + return(res); +} + +void RegularOpcodeManager::SetOpcode(EmuOpcode emu_op, uint16 eq_op) { + + //clear out old mapping + uint16 oldop = emu_to_eq[emu_op]; + if(oldop != 0) + eq_to_emu[oldop] = OP_Unknown; + + //use our strategy, since we have it + NormalMemStrategy s; + s.it = this; + s.Set(emu_op, eq_op); +} + + +void RegularOpcodeManager::NormalMemStrategy::Set(EmuOpcode emu_op, uint16 eq_op) { + if(uint32(emu_op) >= it->EmuOpcodeCount || eq_op >= it->EQOpcodeCount) + return; + it->emu_to_eq[emu_op] = eq_op; + it->eq_to_emu[eq_op] = emu_op; +} + +NullOpcodeManager::NullOpcodeManager() +: MutableOpcodeManager() { +} + +bool NullOpcodeManager::LoadOpcodes(map* eq) { + return(true); +} + +bool NullOpcodeManager::LoadOpcodes(const char *filename) { + return(true); +} + +bool NullOpcodeManager::ReloadOpcodes(const char *filename) { + return(true); +} + +uint16 NullOpcodeManager::EmuToEQ(const EmuOpcode emu_op) { + return(0); +} + +EmuOpcode NullOpcodeManager::EQToEmu(const uint16 eq_op) { + return(OP_Unknown); +} + +EmptyOpcodeManager::EmptyOpcodeManager() +: MutableOpcodeManager() { +} + + +bool EmptyOpcodeManager::LoadOpcodes(const char *filename) { + return(true); +} + +bool EmptyOpcodeManager::LoadOpcodes(map* eq) { + return(true); +} + +bool EmptyOpcodeManager::ReloadOpcodes(const char *filename) { + return(true); +} + +uint16 EmptyOpcodeManager::EmuToEQ(const EmuOpcode emu_op) { + map::iterator f; + f = emu_to_eq.find(emu_op); + return(f == emu_to_eq.end()? 0 : f->second); +} + +EmuOpcode EmptyOpcodeManager::EQToEmu(const uint16 eq_op) { + map::iterator f; + f = eq_to_emu.find(eq_op); + return(f == eq_to_emu.end()?OP_Unknown:f->second); +} + +void EmptyOpcodeManager::SetOpcode(EmuOpcode emu_op, uint16 eq_op) { + emu_to_eq[emu_op] = eq_op; + eq_to_emu[eq_op] = emu_op; +} + + diff --git a/EQ2/source/common/opcodemgr.h b/EQ2/source/common/opcodemgr.h new file mode 100644 index 000000000..47c3eaf93 --- /dev/null +++ b/EQ2/source/common/opcodemgr.h @@ -0,0 +1,162 @@ +/* + EQ2Emulator: Everquest II Server Emulator + Copyright (C) 2007 EQ2EMulator Development Team (http://www.eq2emulator.net) + + This file is part of EQ2Emulator. + + EQ2Emulator is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + EQ2Emulator is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with EQ2Emulator. If not, see . +*/ +#ifndef OPCODE_MANAGER_H +#define OPCODE_MANAGER_H + +#include "types.h" +#include "Mutex.h" +#include "emu_opcodes.h" + +#include +using namespace std; + +class OpcodeManager { +public: + OpcodeManager(); + virtual ~OpcodeManager() {} + + virtual bool Mutable() { return(false); } + virtual bool LoadOpcodes(const char *filename) = 0; + virtual bool LoadOpcodes(map* eq) = 0; + virtual bool ReloadOpcodes(const char *filename) = 0; + + virtual uint16 EmuToEQ(const EmuOpcode emu_op) = 0; + virtual EmuOpcode EQToEmu(const uint16 eq_op) = 0; + + static const char *EmuToName(const EmuOpcode emu_op); + const char *EQToName(const uint16 emu_op); + EmuOpcode NameSearch(const char *name); + + //This has to be public for stupid visual studio + class OpcodeSetStrategy { + public: + virtual void Set(EmuOpcode emu_op, uint16 eq_op) = 0; + virtual ~OpcodeSetStrategy(){} + }; + +protected: + bool loaded; //true if all opcodes loaded + Mutex MOpcodes; //this only protects the local machine + //in a shared manager, this dosent protect others + + static bool LoadOpcodesFile(const char *filename, OpcodeSetStrategy *s); + static bool LoadOpcodesMap(map* eq, OpcodeSetStrategy *s); +}; + +class MutableOpcodeManager : public OpcodeManager { +public: + MutableOpcodeManager() : OpcodeManager() {} + virtual bool Mutable() { return(true); } + virtual void SetOpcode(EmuOpcode emu_op, uint16 eq_op) = 0; +}; + +#ifdef SHARED_OPCODES //quick toggle since only world and zone should possibly use this +//keeps opcodes in shared memory +class SharedOpcodeManager : public OpcodeManager { +public: + virtual ~SharedOpcodeManager() {} + + virtual bool LoadOpcodes(const char *filename); + virtual bool LoadOpcodes(map* eq); + virtual bool ReloadOpcodes(const char *filename); + + virtual uint16 EmuToEQ(const EmuOpcode emu_op); + virtual EmuOpcode EQToEmu(const uint16 eq_op); + +protected: + class SharedMemStrategy : public OpcodeManager::OpcodeSetStrategy { + public: + void Set(EmuOpcode emu_op, uint16 eq_op); + }; + static bool DLLLoadOpcodesCallback(const char *filename); +}; +#endif //SHARED_OPCODES + +//keeps opcodes in regular heap memory +class RegularOpcodeManager : public MutableOpcodeManager { +public: + RegularOpcodeManager(); + virtual ~RegularOpcodeManager(); + + virtual bool Editable() { return(true); } + virtual bool LoadOpcodes(const char *filename); + virtual bool LoadOpcodes(map* eq); + virtual bool ReloadOpcodes(const char *filename); + + virtual uint16 EmuToEQ(const EmuOpcode emu_op); + virtual EmuOpcode EQToEmu(const uint16 eq_op); + + //implement our editing interface + virtual void SetOpcode(EmuOpcode emu_op, uint16 eq_op); + +protected: + class NormalMemStrategy : public OpcodeManager::OpcodeSetStrategy { + public: + RegularOpcodeManager *it; + void Set(EmuOpcode emu_op, uint16 eq_op); + }; + friend class NormalMemStrategy; + + uint16 *emu_to_eq; + EmuOpcode *eq_to_emu; + uint32 EQOpcodeCount; + uint32 EmuOpcodeCount; +}; + +//always resolves everything to 0 or OP_Unknown +class NullOpcodeManager : public MutableOpcodeManager { +public: + NullOpcodeManager(); + + virtual bool LoadOpcodes(const char *filename); + virtual bool LoadOpcodes(map* eq); + virtual bool ReloadOpcodes(const char *filename); + + virtual uint16 EmuToEQ(const EmuOpcode emu_op); + virtual EmuOpcode EQToEmu(const uint16 eq_op); + + //fake it, just used for testing anyways + virtual void SetOpcode(EmuOpcode emu_op, uint16 eq_op) {} +}; + +//starts as NullOpcodeManager, but remembers any mappings set +//could prolly have been implemented with an extension to regular, +//by overriding its load methods to be empty. +class EmptyOpcodeManager : public MutableOpcodeManager { +public: + EmptyOpcodeManager(); + + virtual bool LoadOpcodes(const char *filename); + virtual bool LoadOpcodes(map* eq); + virtual bool ReloadOpcodes(const char *filename); + + virtual uint16 EmuToEQ(const EmuOpcode emu_op); + virtual EmuOpcode EQToEmu(const uint16 eq_op); + + //fake it, just used for testing anyways + virtual void SetOpcode(EmuOpcode emu_op, uint16 eq_op); +protected: + map emu_to_eq; + map eq_to_emu; +}; + +#endif + + diff --git a/EQ2/source/common/packet_dump.cpp b/EQ2/source/common/packet_dump.cpp new file mode 100644 index 000000000..27cb0a9bc --- /dev/null +++ b/EQ2/source/common/packet_dump.cpp @@ -0,0 +1,195 @@ +/* + EQ2Emulator: Everquest II Server Emulator + Copyright (C) 2007 EQ2EMulator Development Team (http://www.eq2emulator.net) + + This file is part of EQ2Emulator. + + EQ2Emulator is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + EQ2Emulator is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with EQ2Emulator. If not, see . +*/ +#include "../common/debug.h" +#include +#include +#include + +using namespace std; + +#include "packet_dump.h" +#include "EQStream.h" +#include "../common/servertalk.h" + +void DumpPacketAscii(const uchar* buf, int32 size, int32 cols, int32 skip) { + // Output as ASCII + for(int32 i=skip; i 32 && buf[i] < 127) + { + cout << buf[i]; + } + else + { + cout << '.'; + } + } + cout << endl << endl; +} + +void DumpPacketHex(const uchar* buf, int32 size, int32 cols, int32 skip) { + if (size == 0 || size > 39565) + return; + // Output as HEX + char output[4]; + int j = 0; char* ascii = new char[cols+1]; memset(ascii, 0, cols+1); + int32 i; + for(i=skip; i= 32 && buf[i] < 127) { + ascii[j++] = buf[i]; + } + else { + ascii[j++] = '.'; + } +// cout << setfill(0) << setw(2) << hex << (int)buf[i] << " "; + } + int32 k = ((i-skip)-1)%cols; + if (k < 8) + cout << " "; + for (int32 h = k+1; h < cols; h++) { + cout << " "; + } + cout << " | " << ascii << endl; + safe_delete_array(ascii); +} + +void DumpPacket(const uchar* buf, int32 size) +{ + DumpPacketHex(buf, size); +// DumpPacketAscii(buf,size); +} + +void DumpPacket(const ServerPacket* pack, bool iShowInfo) { + if (iShowInfo) { + cout << "Dumping ServerPacket: 0x" << hex << setfill('0') << setw(4) << pack->opcode << dec; + cout << " size:" << pack->size << endl; + } + DumpPacketHex(pack->pBuffer, pack->size); +} + +void DumpPacketBin(const ServerPacket* pack) { + DumpPacketBin(pack->pBuffer, pack->size); +} + +void DumpPacketBin(int32 data) { + DumpPacketBin((uchar*)&data, sizeof(int32)); +} + +void DumpPacketBin(int16 data) { + DumpPacketBin((uchar*)&data, sizeof(int16)); +} + +void DumpPacketBin(int8 data) { + DumpPacketBin((uchar*)&data, sizeof(int8)); +} + + +void DumpPacketBin(const void* iData, int32 len) { + if (!len) + return; + const int8* data = (const int8*) iData; + int32 k=0; + for (k=0; k 1) + cout << " " << hex << setw(2) << setfill('0') << (int) data[k-3] << dec; + if (tmp > 2) + cout << " " << hex << setw(2) << setfill('0') << (int) data[k-2] << dec; + if (tmp > 3) + cout << " " << hex << setw(2) << setfill('0') << (int) data[k-1] << dec; + cout << endl; +} diff --git a/EQ2/source/common/packet_dump.h b/EQ2/source/common/packet_dump.h new file mode 100644 index 000000000..42fe2efde --- /dev/null +++ b/EQ2/source/common/packet_dump.h @@ -0,0 +1,41 @@ +/* + EQ2Emulator: Everquest II Server Emulator + Copyright (C) 2007 EQ2EMulator Development Team (http://www.eq2emulator.net) + + This file is part of EQ2Emulator. + + EQ2Emulator is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + EQ2Emulator is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with EQ2Emulator. If not, see . +*/ +#ifndef PACKET_DUMP_H +#define PACKET_DUMP_H + +#include +using namespace std; + +#include "../common/types.h" +#include "EQPacket.h" + +class ServerPacket; + +void DumpPacketAscii(const uchar* buf, int32 size, int32 cols=16, int32 skip=0); +void DumpPacketHex(const uchar* buf, int32 size, int32 cols=16, int32 skip=0); +void DumpPacketBin(const void* data, int32 len); +void DumpPacket(const uchar* buf, int32 size); +void DumpPacket(const ServerPacket* pack, bool iShowInfo = false); +void DumpPacketBin(const ServerPacket* pack); +void DumpPacketBin(int32 data); +void DumpPacketBin(int16 data); +void DumpPacketBin(int8 data); + +#endif diff --git a/EQ2/source/common/packet_functions.cpp b/EQ2/source/common/packet_functions.cpp new file mode 100644 index 000000000..dcda17358 --- /dev/null +++ b/EQ2/source/common/packet_functions.cpp @@ -0,0 +1,268 @@ +/* + EQ2Emulator: Everquest II Server Emulator + Copyright (C) 2007 EQ2EMulator Development Team (http://www.eq2emulator.net) + + This file is part of EQ2Emulator. + + EQ2Emulator is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + EQ2Emulator is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with EQ2Emulator. If not, see . +*/ +#include "../common/debug.h" +#include +#include +#include +#include +#include "packet_dump.h" +#include "EQStream.h" +#include "packet_functions.h" + +#ifndef WIN32 + #include +#endif + +using namespace std; + +#define eqemu_alloc_func Z_NULL +#define eqemu_free_func Z_NULL + + +int DeflatePacket(unsigned char* in_data, int in_length, unsigned char* out_data, int max_out_length) { +#ifdef REUSE_ZLIB + static bool inited = false; + static z_stream zstream; + int zerror; + + if(in_data == NULL && out_data == NULL && in_length == 0 && max_out_length == 0) { + //special delete state + deflateEnd(&zstream); + return(0); + } + if(!inited) { + zstream.zalloc = eqemu_alloc_func; + zstream.zfree = eqemu_free_func; + zstream.opaque = Z_NULL; + deflateInit(&zstream, Z_FINISH); + } + + zstream.next_in = in_data; + zstream.avail_in = in_length; +/* zstream.zalloc = Z_NULL; + zstream.zfree = Z_NULL; + zstream.opaque = Z_NULL; + deflateInit(&zstream, Z_FINISH);*/ + zstream.next_out = out_data; + zstream.avail_out = max_out_length; + zerror = deflate(&zstream, Z_FINISH); + + deflateReset(&zstream); + + if (zerror == Z_STREAM_END) + { +// deflateEnd(&zstream); + return zstream.total_out; + } + else + { +// zerror = deflateEnd(&zstream); + return 0; + } +#else + if(in_data == NULL) { + return(0); + } + + z_stream zstream; + int zerror; + + zstream.next_in = in_data; + zstream.avail_in = in_length; + zstream.zalloc = eqemu_alloc_func; + zstream.zfree = eqemu_free_func; + zstream.opaque = Z_NULL; + deflateInit(&zstream, Z_FINISH); + zstream.next_out = out_data; + zstream.avail_out = max_out_length; + zerror = deflate(&zstream, Z_FINISH); + + if (zerror == Z_STREAM_END) + { + deflateEnd(&zstream); + return zstream.total_out; + } + else + { + zerror = deflateEnd(&zstream); + return 0; + } +#endif +} + +uint32 InflatePacket(uchar* indata, uint32 indatalen, uchar* outdata, uint32 outdatalen, bool iQuiet) { +#ifdef REUSE_ZLIB + static bool inited = false; + static z_stream zstream; + int zerror; + + if(indata == NULL && outdata == NULL && indatalen == 0 && outdatalen == 0) { + //special delete state + inflateEnd(&zstream); + return(0); + } + if(!inited) { + zstream.zalloc = eqemu_alloc_func; + zstream.zfree = eqemu_free_func; + zstream.opaque = Z_NULL; + inflateInit2(&zstream, 15); + } + + zstream.next_in = indata; + zstream.avail_in = indatalen; + zstream.next_out = outdata; + zstream.avail_out = outdatalen; + zstream.zalloc = eqemu_alloc_func; + zstream.zfree = eqemu_free_func; + zstream.opaque = Z_NULL; + + i = inflateInit2( &zstream, 15 ); + if (i != Z_OK) { + return 0; + } + + zerror = inflate( &zstream, Z_FINISH ); + + inflateReset(&zstream); + + if(zerror == Z_STREAM_END) { + return zstream.total_out; + } + else { + if (!iQuiet) { + cout << "Error: InflatePacket: inflate() returned " << zerror << " '"; + if (zstream.msg) + cout << zstream.msg; + cout << "'" << endl; + //DumpPacket(indata-16, indatalen+16); + } + + if (zerror == -4 && zstream.msg == 0) + { + return 0; + } + + return 0; + } +#else + if(indata == NULL) + return(0); + + z_stream zstream; + int zerror = 0; + int i; + + zstream.next_in = indata; + zstream.avail_in = indatalen; + zstream.next_out = outdata; + zstream.avail_out = outdatalen; + zstream.zalloc = eqemu_alloc_func; + zstream.zfree = eqemu_free_func; + zstream.opaque = Z_NULL; + + i = inflateInit2( &zstream, 15 ); + if (i != Z_OK) { + return 0; + } + + zerror = inflate( &zstream, Z_FINISH ); + + if(zerror == Z_STREAM_END) { + inflateEnd( &zstream ); + return zstream.total_out; + } + else { + if (!iQuiet) { + cout << "Error: InflatePacket: inflate() returned " << zerror << " '"; + if (zstream.msg) + cout << zstream.msg; + cout << "'" << endl; + //DumpPacket(indata-16, indatalen+16); + } + + if (zerror == -4 && zstream.msg == 0) + { + return 0; + } + + zerror = inflateEnd( &zstream ); + return 0; + } +#endif +} + +int32 roll(int32 in, int8 bits) { + return ((in << bits) | (in >> (32-bits))); +} + +int64 roll(int64 in, int8 bits) { + return ((in << bits) | (in >> (64-bits))); +} + +int32 rorl(int32 in, int8 bits) { + return ((in >> bits) | (in << (32-bits))); +} + +int64 rorl(int64 in, int8 bits) { + return ((in >> bits) | (in << (64-bits))); +} + +int32 CRCLookup(uchar idx) { + if (idx == 0) + return 0x00000000; + + if (idx == 1) + return 0x77073096; + + if (idx == 2) + return roll(CRCLookup(1), 1); + + if (idx == 4) + return 0x076DC419; + + for (uchar b=7; b>0; b--) { + uchar bv = 1 << b; + + if (!(idx ^ bv)) { + // bit is only one set + return ( roll(CRCLookup (4), b - 2) ); + } + + if (idx&bv) { + // bit is set + return( CRCLookup(bv) ^ CRCLookup(idx&(bv - 1)) ); + } + } + + //Failure + return false; +} + +uint32 GenerateCRC(int32 b, int32 bufsize, uchar *buf) { + int32 CRC = (b ^ 0xFFFFFFFF); + int32 bufremain = bufsize; + uchar* bufptr = buf; + + while (bufremain--) { + CRC = CRCLookup((uchar)(*(bufptr++)^ (CRC&0xFF))) ^ (CRC >> 8); + } + + return (htonl (CRC ^ 0xFFFFFFFF)); +} diff --git a/EQ2/source/common/packet_functions.h b/EQ2/source/common/packet_functions.h new file mode 100644 index 000000000..93b8cdb04 --- /dev/null +++ b/EQ2/source/common/packet_functions.h @@ -0,0 +1,44 @@ +/* + EQ2Emulator: Everquest II Server Emulator + Copyright (C) 2007 EQ2EMulator Development Team (http://www.eq2emulator.net) + + This file is part of EQ2Emulator. + + EQ2Emulator is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + EQ2Emulator is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with EQ2Emulator. If not, see . +*/ +#ifndef PACKET_FUNCTIONS_H +#define PACKET_FUNCTIONS_H +#include "types.h" +#include "EQPacket.h" + +int32 roll(int32 in, int8 bits); +int64 roll(int64 in, int8 bits); +int32 rorl(int32 in, int8 bits); +int64 rorl(int64 in, int8 bits); + +void EncryptProfilePacket(EQApplicationPacket* app); +void EncryptProfilePacket(uchar* pBuffer, int32 size); + +#define EncryptSpawnPacket EncryptZoneSpawnPacket +//void EncryptSpawnPacket(EQApplicationPacket* app); +//void EncryptSpawnPacket(uchar* pBuffer, int32 size); + +void EncryptZoneSpawnPacket(EQApplicationPacket* app); +void EncryptZoneSpawnPacket(uchar* pBuffer, int32 size); + +int DeflatePacket(unsigned char* in_data, int in_length, unsigned char* out_data, int max_out_length); +uint32 InflatePacket(uchar* indata, uint32 indatalen, uchar* outdata, uint32 outdatalen, bool iQuiet = false); +uint32 GenerateCRC(int32 b, int32 bufsize, uchar *buf); + +#endif diff --git a/EQ2/source/common/queue.h b/EQ2/source/common/queue.h new file mode 100644 index 000000000..e29ea0551 --- /dev/null +++ b/EQ2/source/common/queue.h @@ -0,0 +1,128 @@ +/* + EQ2Emulator: Everquest II Server Emulator + Copyright (C) 2007 EQ2EMulator Development Team (http://www.eq2emulator.net) + + This file is part of EQ2Emulator. + + EQ2Emulator is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + EQ2Emulator is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with EQ2Emulator. If not, see . +*/ +#ifndef QUEUE_H +#define QUEUE_H + +template +class MyQueue; + +template +class MyQueueNode +{ +public: + MyQueueNode(T* data) + { + next = 0; + this->data = data; + } + + friend class MyQueue; + +private: + T* data; + MyQueueNode* next; +}; + +template +class MyQueue +{ +public: + MyQueue() + { + head = tail = 0; + } + ~MyQueue() { + clear(); + } + + void push(T* data) + { + if (head == 0) + { + tail = head = new MyQueueNode(data); + } + else + { + tail->next = new MyQueueNode(data); + tail = tail->next; + } + } + + T* pop() + { + if (head == 0) + { + return 0; + } + + T* data = head->data; + MyQueueNode* next_node = head->next; + delete head; + head = next_node; + + return data; + } + + T* top() + { + if (head == 0) + { + return 0; + } + + return head->data; + } + + bool empty() + { + if (head == 0) + { + return true; + } + + return false; + } + + void clear() + { + T* d = 0; + while((d = pop())) { + delete d; + } + return; + } + + int count() + { + int count = 0; + MyQueueNode* d = head; + while(d != 0) { + count++; + d = d->next; + } + return(count); + } + +private: + MyQueueNode* head; + MyQueueNode* tail; +}; + +#endif diff --git a/EQ2/source/common/seperator.h b/EQ2/source/common/seperator.h new file mode 100644 index 000000000..b033aa86e --- /dev/null +++ b/EQ2/source/common/seperator.h @@ -0,0 +1,165 @@ +/* + EQ2Emulator: Everquest II Server Emulator + Copyright (C) 2007 EQ2EMulator Development Team (http://www.eq2emulator.net) + + This file is part of EQ2Emulator. + + EQ2Emulator is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + EQ2Emulator is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with EQ2Emulator. If not, see . +*/ +// This class will split up a string smartly at the div character (default is space and tab) +// Seperator.arg[i] is a copy of the string chopped at the divs +// Seperator.argplus[i] is a pointer to the original string so it doesnt end at the div + +// Written by Quagmire +#ifndef SEPERATOR_H +#define SEPERATOR_H + +#include +#include + +class Seperator +{ +public: + Seperator(const char* message, char div = ' ', int16 in_maxargnum = 10, int16 arglen = 100, bool iObeyQuotes = false, char div2 = '\t', char div3 = 0, bool iSkipEmpty = true) { + int i; + argnum = 0; + msg = strdup(message); + this->maxargnum = in_maxargnum; + argplus = new const char *[maxargnum+1]; + arg = new char *[maxargnum+1]; + for (i=0; i<=maxargnum; i++) { + argplus[i]=arg[i] = new char[arglen+1]; + memset(arg[i], 0, arglen+1); + } + + int len = strlen(message); + int s = 0, l = 0; + bool inarg = (!iSkipEmpty || !(message[0] == div || message[0] == div2 || message[0] == div3)); + bool inquote = (iObeyQuotes && (message[0] == '\"' || message[0] == '\'')); + argplus[0] = message; + if (len == 0) + return; + + for (i=0; i= arglen) + l = arglen; + if (l){ + if(l > 1 && (argplus[argnum][0] == '\'' || argplus[argnum][0] == '\"')){ + l--; + memcpy(arg[argnum], argplus[argnum]+1, l); + } + else + memcpy(arg[argnum], argplus[argnum], l); + } + arg[argnum][l] = 0; + argnum++; + if (iSkipEmpty) + inarg = false; + else { + s=i+1; + argplus[argnum] = &message[s]; + } + } + } + else if (iObeyQuotes && (message[i] == '\"' || message[i] == '\'')) { + inquote = true; + } + else { + s = i; + argplus[argnum] = &message[s]; + if (!(message[i] == div || message[i] == div2 || message[i] == div3)) { + inarg = true; + } + } + if (argnum > maxargnum) + break; + } + if (inarg && argnum <= maxargnum) { + l = i-s; + if (l >= arglen) + l = arglen; + if (l) + memcpy(arg[argnum], argplus[argnum], l); + } + } + ~Seperator() { + for (int i=0; i<=maxargnum; i++) + safe_delete_array(arg[i]); + safe_delete_array(arg); + safe_delete_array(argplus); + if (msg) + free(msg); + } + int16 argnum; + char** arg; + const char** argplus; + char * msg; + bool IsSet(int num) const { + return IsSet(arg[num]); + } + bool IsNumber(int num) const { + return IsNumber(arg[num]); + } + bool IsHexNumber(int num) const { + return IsHexNumber(arg[num]); + } + static bool IsSet(const char *check) { + return check[0] != '\0'; + } + static bool IsNumber(const char* check) { + bool SeenDec = false; + int len = strlen(check); + if (len == 0) { + return false; + } + int i; + for (i = 0; i < len; i++) { + if (check[i] < '0' || check[i] > '9') { + if (check[i] == '.' && !SeenDec) { + SeenDec = true; + } + else if (i == 0 && (check[i] == '-' || check[i] == '+') && !check[i+1] == 0) { + // this is ok, do nothin + } + else { + return false; + } + } + } + return true; + } + static bool IsHexNumber(char* check) { + int len = strlen(check); + if (len < 3) + return false; + if (check[0] != '0' || (check[1] != 'x' && check[1] != 'X')) + return false; + for (int i=2; i '9') && (check[i] < 'A' || check[i] > 'F') && (check[i] < 'a' || check[i] > 'f')) + return false; + } + return true; + } + inline int16 GetMaxArgNum() const { return maxargnum; } + inline int16 GetArgNumber() const { return argnum; } +private: + int16 maxargnum; +}; + +#endif diff --git a/EQ2/source/common/servertalk.h b/EQ2/source/common/servertalk.h new file mode 100644 index 000000000..095da14d9 --- /dev/null +++ b/EQ2/source/common/servertalk.h @@ -0,0 +1,754 @@ +/* + EQ2Emulator: Everquest II Server Emulator + Copyright (C) 2007 EQ2EMulator Development Team (http://www.eq2emulator.net) + + This file is part of EQ2Emulator. + + EQ2Emulator is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + EQ2Emulator is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with EQ2Emulator. If not, see . +*/ +#ifndef EQ_SOPCODES_H +#define EQ_SOPCODES_H + +#define EQEMU_PROTOCOL_VERSION "0.5.0" + +#include "types.h" +#include "packet_functions.h" +#include + +#define SERVER_TIMEOUT 45000 // how often keepalive gets sent +#define INTERSERVER_TIMER 90000 +#define LoginServer_StatusUpdateInterval 15000 +#define LoginServer_AuthStale 60000 +#define AUTHCHANGE_TIMEOUT 900 // in seconds + +#define ServerOP_KeepAlive 0x0001 // packet to test if port is still open +#define ServerOP_ChannelMessage 0x0002 // broadcast/guildsay +#define ServerOP_SetZone 0x0003 // client -> server zoneinfo +#define ServerOP_ShutdownAll 0x0004 // exit(0); +#define ServerOP_ZoneShutdown 0x0005 // unload all data, goto sleep mode +#define ServerOP_ZoneBootup 0x0006 // come out of sleep mode and load zone specified +#define ServerOP_ZoneStatus 0x0007 // Shows status of all zones +#define ServerOP_SetConnectInfo 0x0008 // Tells server address and port # +#define ServerOP_EmoteMessage 0x0009 // Worldfarts +#define ServerOP_ClientList 0x000A // Update worldserver's client list, for #whos +#define ServerOP_Who 0x000B // #who +#define ServerOP_ZonePlayer 0x000C // #zone, or #summon +#define ServerOP_KickPlayer 0x000D // #kick +#define ServerOP_RefreshGuild 0x000E // Notice to all zoneservers to refresh their guild cache for ID# in packet +#define ServerOP_GuildKickAll 0x000F // Remove all clients from this guild +#define ServerOP_GuildInvite 0x0010 +#define ServerOP_GuildRemove 0x0011 +#define ServerOP_GuildPromote 0x0012 +#define ServerOP_GuildDemote 0x0013 +#define ServerOP_GuildLeader 0x0014 +#define ServerOP_GuildGMSet 0x0015 +#define ServerOP_GuildGMSetRank 0x0016 +#define ServerOP_FlagUpdate 0x0018 // GM Flag updated for character, refresh the memory cache +#define ServerOP_GMGoto 0x0019 +#define ServerOP_MultiLineMsg 0x001A +#define ServerOP_Lock 0x001B // For #lock/#unlock inside server +#define ServerOP_Motd 0x001C // For changing MoTD inside server. +#define ServerOP_Uptime 0x001D +#define ServerOP_Petition 0x001E +#define ServerOP_KillPlayer 0x001F +#define ServerOP_UpdateGM 0x0020 +#define ServerOP_RezzPlayer 0x0021 +#define ServerOP_ZoneReboot 0x0022 +#define ServerOP_ZoneToZoneRequest 0x0023 +#define ServerOP_AcceptWorldEntrance 0x0024 +#define ServerOP_ZAAuth 0x0025 +#define ServerOP_ZAAuthFailed 0x0026 +#define ServerOP_ZoneIncClient 0x0027 // Incomming client +#define ServerOP_ClientListKA 0x0028 +#define ServerOP_ChangeWID 0x0029 +#define ServerOP_IPLookup 0x002A +#define ServerOP_LockZone 0x002B +#define ServerOP_ItemStatus 0x002C +#define ServerOP_OOCMute 0x002D +#define ServerOP_Revoke 0x002E +#define ServerOP_GuildJoin 0x002F +#define ServerOP_GroupIDReq 0x0030 +#define ServerOP_GroupIDReply 0x0031 +#define ServerOP_GroupLeave 0x0032 // for disbanding out of zone folks +#define ServerOP_RezzPlayerAccept 0x0033 +#define ServerOP_SpawnCondition 0x0034 +#define ServerOP_SpawnEvent 0x0035 + +#define UpdateServerOP_Verified 0x5090 +#define UpdateServerOP_DisplayMsg 0x5091 +#define UpdateServerOP_Completed 0x5092 + +#define ServerOP_LSInfo 0x1000 +#define ServerOP_LSStatus 0x1001 +#define ServerOP_LSClientAuth 0x1002 +#define ServerOP_LSFatalError 0x1003 +#define ServerOP_SystemwideMessage 0x1005 +#define ServerOP_ListWorlds 0x1006 +#define ServerOP_PeerConnect 0x1007 + +#define ServerOP_LSZoneInfo 0x3001 +#define ServerOP_LSZoneStart 0x3002 +#define ServerOP_LSZoneBoot 0x3003 +#define ServerOP_LSZoneShutdown 0x3004 +#define ServerOP_LSZoneSleep 0x3005 +#define ServerOP_LSPlayerLeftWorld 0x3006 +#define ServerOP_LSPlayerJoinWorld 0x3007 +#define ServerOP_LSPlayerZoneChange 0x3008 + +#define ServerOP_UsertoWorldReq 0xAB00 +#define ServerOP_UsertoWorldResp 0xAB01 + +#define ServerOP_EncapPacket 0x2007 // Packet within a packet +#define ServerOP_WorldListUpdate 0x2008 +#define ServerOP_WorldListRemove 0x2009 +#define ServerOP_TriggerWorldListRefresh 0x200A + +#define ServerOP_WhoAll 0x0210 + +#define ServerOP_SetWorldTime 0x200B +#define ServerOP_GetWorldTime 0x200C +#define ServerOP_SyncWorldTime 0x200E + +//EQ2 Opcodes +#define ServerOP_CharTimeStamp 0x200F + +#define ServerOP_NameFilterCheck 0x2011 +#define ServerOP_BasicCharUpdate 0x2012 +#define ServerOP_CharacterCreate 0x2013 +#define ServerOP_NameCharUpdate 0x2014 +#define ServerOP_GetLatestTables 0x2015 +#define ServerOP_GetTableQuery 0x2016 +#define ServerOP_GetTableData 0x2017 +#define ServerOP_RaceUpdate 0x2018 +#define ServerOP_ZoneUpdate 0x2019 +#define ServerOP_BugReport 0x201A +#define ServerOP_ResetDatabase 0x201B +#define ServerOP_ZoneUpdates 0x201C +#define ServerOP_LoginEquipment 0x201D // updates charater select screen item appearances (gear appear) +#define ServerOP_CharacterPicture 0x201E + + +/************ PACKET RELATED STRUCT ************/ +class ServerPacket +{ +public: + ~ServerPacket() { safe_delete_array(pBuffer); } + ServerPacket(int16 in_opcode = 0, int32 in_size = 0) { + this->compressed = false; + size = in_size; + opcode = in_opcode; + if (size == 0) { + pBuffer = 0; + } + else { + pBuffer = new uchar[size]; + memset(pBuffer, 0, size); + } + destination = 0; + InflatedSize = 0; + } + ServerPacket* Copy() { + if (this == 0) { + return 0; + } + ServerPacket* ret = new ServerPacket(this->opcode, this->size); + if (this->size) + memcpy(ret->pBuffer, this->pBuffer, this->size); + ret->compressed = this->compressed; + ret->InflatedSize = this->InflatedSize; + return ret; + } + bool Deflate() { + if (compressed) + return false; + if ((!this->pBuffer) || (!this->size)) + return false; + uchar* tmp = new uchar[this->size + 128]; + int32 tmpsize = DeflatePacket(this->pBuffer, this->size, tmp, this->size + 128); + if (!tmpsize) { + safe_delete_array(tmp); + return false; + } + this->compressed = true; + this->InflatedSize = this->size; + this->size = tmpsize; + uchar* new_buffer = new uchar[this->size]; + memcpy(new_buffer, tmp, this->size); + safe_delete_array(tmp); + uchar* tmpdel = this->pBuffer; + this->pBuffer = new_buffer; + safe_delete_array(tmpdel); + return true; + } + bool Inflate() { + if (!compressed) + return false; + if ((!this->pBuffer) || (!this->size)) + return false; + uchar* tmp = new uchar[InflatedSize]; + int32 tmpsize = InflatePacket(this->pBuffer, this->size, tmp, InflatedSize); + if (!tmpsize) { + safe_delete_array(tmp); + return false; + } + compressed = false; + this->size = tmpsize; + uchar* tmpdel = this->pBuffer; + this->pBuffer = tmp; + safe_delete_array(tmpdel); + return true; + } + int32 size; + int16 opcode; + uchar* pBuffer; + bool compressed; + int32 InflatedSize; + int32 destination; +}; + +#pragma pack(1) + +struct GetLatestTables_Struct{ + float table_version; + float data_version; +}; + +struct ServerLSInfo_Struct { + char name[201]; // name the worldserver wants + char address[250]; // DNS address of the server + char account[31]; // account name for the worldserver + char password[31]; // password for the name + char protocolversion[25]; // Major protocol version number + char serverversion[64]; // minor server software version number + int8 servertype; // 0=world, 1=chat, 2=login, 3=MeshLogin, 4=World Debug + int32 dbversion; // database major+minor version from version.h (for PatchServer) +}; + +struct ServerLSStatus_Struct { + sint32 status; + sint32 num_players; + sint32 num_zones; + int8 world_max_level; +}; + +struct ServerSystemwideMessage { + int32 lsaccount_id; + char key[30]; // sessionID key for verification + int32 type; + char message[0]; +}; + +struct ServerSyncWorldList_Struct { + int32 RemoteID; + int32 ip; + sint32 status; + char name[201]; + char address[250]; + char account[31]; + int32 accountid; + int8 authlevel; + int8 servertype; // 0=world, 1=chat, 2=login + int32 adminid; + int8 showdown; + sint32 num_players; + sint32 num_zones; + bool placeholder; +}; + +struct UsertoWorldRequest_Struct { + int32 lsaccountid; + int32 char_id; + int32 worldid; + int32 FromID; + int32 ToID; + char ip_address[21]; +}; + +struct UsertoWorldResponse_Struct { + int32 lsaccountid; + int32 char_id; + int32 worldid; + int32 access_key; + int8 response; + char ip_address[80]; + int32 port; + int32 FromID; + int32 ToID; +}; + +struct ServerEncapPacket_Struct { + int32 ToID; // ID number of the LWorld on the other server + int16 opcode; + int16 size; + uchar data[0]; +}; + +struct ServerEmoteMessage_Struct { + char to[64]; + int32 guilddbid; + sint16 minstatus; + int32 type; + char message[0]; +}; + +/*struct TableVersion{ + char name[64]; + int32 version; + int32 max_table_version; + int32 max_data_version; + sint32 data_version; + int8 last; + char column_names[1000]; +};*/ + +typedef struct { + char name[256]; + unsigned int name_len; + unsigned int version; + unsigned int data_version; +} TableVersion; + +template void AddPtrData(string* buffer, Type& data){ + buffer->append((char*)&data, sizeof(Type)); +} +template void AddPtrData(string* buffer, Type* data, int16 size){ + buffer->append(data, size); +} +class LatestTableVersions { +public: + LatestTableVersions(){ + tables = 0; + current_index = 0; + total_tables = 0; + data_version = 0; + } + ~LatestTableVersions(){ + safe_delete_array(tables); + } + void SetTableSize(int16 size){ + total_tables = size; + tables = new TableVersion[total_tables]; + } + void AddTable(char* name, int32 version, int32 data_version){ + strcpy(tables[current_index].name, name); + tables[current_index].version = version; + tables[current_index].data_version = data_version; + current_index++; + } + int16 GetTotalSize(){ + return total_tables * sizeof(TableVersion) + sizeof(int16); + } + int16 GetTotalTables(){ + return total_tables; + } + TableVersion* GetTables(){ + return tables; + } + TableVersion GetTable(int16 index){ + return tables[index]; + } + string Serialize(){ + AddPtrData(&buffer, total_tables); + for(int16 i=0;i tmp_queries; +}; +class TableDataQuery{ +public: + TableDataQuery(char* table_name){ + if( strlen(table_name) >= sizeof(tablename) ) + return; + strcpy(tablename, table_name); + num_queries = 0; + columns_size = 0; + columns = 0; + version = 0; + table_size = 0; + } + TableDataQuery(){ + num_queries = 0; + columns_size = 0; + columns = 0; + version = 0; + table_size = 0; + } + ~TableDataQuery(){ + safe_delete_array(columns); + for(int32 i=0;iquery); + safe_delete(queries[i]); + } + } + int32 GetTotalQueries(){ + return num_queries; + } + string* Serialize(){ + buffer = ""; + num_queries = queries.size(); + if(GetTotalQueries() == 0) + return 0; + table_size = strlen(tablename); + AddPtrData(&buffer, table_size); + AddPtrData(&buffer, tablename, table_size + 1); + AddPtrData(&buffer, version); + if(num_queries > 200){ + int32 max_queries = 200; + AddPtrData(&buffer, max_queries); + } + else + AddPtrData(&buffer, num_queries); + AddPtrData(&buffer, columns_size); + AddPtrData(&buffer, columns, columns_size); + vector::iterator query_iterator; + int16 count = 0; + for(int i=GetTotalQueries() - 1;i >=0 && count < 200;i--){ + AddPtrData(&buffer, queries[i]->size); + AddPtrData(&buffer, queries[i]->query, queries[i]->size); + safe_delete_array(queries[i]->query); + safe_delete(queries[i]); + queries.pop_back(); + count++; + } + return &buffer; + } + void DeSerialize(uchar* data){ + uchar* ptr = data; + + memcpy(&table_size, ptr, sizeof(table_size)); + ptr+= sizeof(table_size); + memcpy(&tablename, ptr, table_size + 1); + ptr+= table_size + 1; + + memcpy(&version, ptr, sizeof(version)); + ptr+= sizeof(version); + + memcpy(&num_queries, ptr, sizeof(num_queries)); + ptr+= sizeof(num_queries); + + memcpy(&columns_size, ptr, sizeof(columns_size)); + ptr+= sizeof(columns_size); + columns = new char[columns_size + 1]; + memcpy(columns, ptr, columns_size + 1); + ptr+= columns_size; + + for(int32 i=0;isize, ptr, sizeof(new_query->size)); + ptr+= sizeof(new_query->size); + new_query->query = new char[new_query->size + 1]; + memcpy(new_query->query, ptr, new_query->size); + ptr+= new_query->size; + queries.push_back(new_query); + } + catch( bad_alloc &ba ) + { + cout << ba.what() << endl; + if( NULL != new_query ) + delete new_query; + } + } + } + string buffer; + int32 num_queries; + int32 version; + int16 table_size; + char tablename[64]; + int16 columns_size; + char* columns; + vector queries; +}; + +// Max number of equipment updates to send at once +struct EquipmentUpdateRequest_Struct +{ + int16 max_per_batch; +}; + +// Login's structure of equipment data +struct LoginEquipmentUpdate +{ + int32 world_char_id; + int16 equip_type; + int8 red; + int8 green; + int8 blue; + int8 highlight_red; + int8 highlight_green; + int8 highlight_blue; + int32 slot; +}; + +// World's structure of equipment data +struct EquipmentUpdate_Struct +{ + int32 id; // unique record identifier per world + int32 world_char_id; + int16 equip_type; + int8 red; + int8 green; + int8 blue; + int8 highlight_red; + int8 highlight_green; + int8 highlight_blue; + int32 slot; +}; + +// How many equipmment updates are there to send? +struct EquipmentUpdateList_Struct +{ + sint16 total_updates; +}; + +struct ZoneUpdateRequest_Struct{ + int16 max_per_batch; +}; + +struct LoginZoneUpdate{ + string name; + string description; +}; + +struct ZoneUpdate_Struct{ + int32 zone_id; + int8 zone_name_length; + int8 zone_desc_length; + char data[0]; +}; + +struct ZoneUpdateList_Struct{ + sint16 total_updates; + char data[0]; +}; + +//EQ2 Specific Structures Login -> World (Image) +struct CharacterTimeStamp_Struct { +int32 char_id; +int32 account_id; +int32 unix_timestamp; +}; + +//EQ2 Specific Structures World -> Login (Image) + +/**UPDATE_FIELD TYPES** +These will be stored beside the timestamp on the world server to determine what has changed on between the timestamp, when the update is sent, it will remove the flag. + +8 bits in a byte: +Example: 01001100 +0 Level Flag +1 Race Flag +0 Class Flag +0 Gender Flag +1 Zone Flag +1 Armor Flag +0 Name Flag +0 Delete Flag +**/ +#define LEVEL_UPDATE_FLAG 1 +#define RACE_UPDATE_FLAG 2 +#define CLASS_UPDATE_FLAG 4 +#define GENDER_UPDATE_FLAG 8 +#define ZONE_UPDATE_FLAG 16 +#define ARMOR_UPDATE_FLAG 32 +#define NAME_UPDATE_FLAG 64 +#define DELETE_UPDATE_FLAG 128 +//This structure used for basic changes such as level,class,gender, and deletes that are not able to be backed up +struct CharDataUpdate_Struct { +int32 account_id; +int32 char_id; +int8 update_field; +int32 update_data; +}; +struct BugReport{ +char category[64]; +char subcategory[64]; +char causes_crash[64]; +char reproducible[64]; +char summary[128]; +char description[2000]; +char version[32]; +char player[64]; +int32 account_id; +char spawn_name[64]; +int32 spawn_id; +int32 zone_id; +}; + +struct RaceUpdate_Struct { +int32 account_id; +int32 char_id; +int16 model_type; +int8 race; +}; + +//If this structure comes in with more than 74 bytes, should probably discard (leaves 65 bytes for new_name) +#define CHARNAMEUPDATESTRUCT_MAXSIZE 74 +struct CharNameUpdate_Struct { +int32 account_id; +int32 char_id; +int8 name_length; // If its longer than 64, something is wrong :-/ +char new_name[0]; +}; + +//If this structure comes in with more than 78 bytes, should probably discard (leaves 65 bytes for new_zone) +#define CHARZONESTRUCT_MAXSIZE 78 +struct CharZoneUpdate_Struct { +int32 account_id; +int32 char_id; +int32 zone_id; +int8 zone_length; // If its longer than 64, something is wrong :-/ +char new_zone[0]; +}; + +struct WorldCharCreate_Struct { +int32 account_id; +int32 char_id; +int16 model_type; +int16 char_size; +uchar character[0]; +}; + +struct WorldCharNameFilter_Struct { +int32 account_id; +int16 name_length; +uchar name[0]; +}; + +struct WorldCharNameFilterResponse_Struct { +int32 account_id; +int32 char_id; +int8 response; +}; + +#define CHARPICSTRUCT_MINSIZE 10 +// Should only be used for the headshot picture +struct CharPictureUpdate_Struct { + int32 account_id; + int32 char_id; + int16 pic_size; + char pic[0]; +}; + +#pragma pack() + +#endif diff --git a/EQ2/source/common/timer.cpp b/EQ2/source/common/timer.cpp new file mode 100644 index 000000000..e9c08efa3 --- /dev/null +++ b/EQ2/source/common/timer.cpp @@ -0,0 +1,207 @@ +/* + EQ2Emulator: Everquest II Server Emulator + Copyright (C) 2007 EQ2EMulator Development Team (http://www.eq2emulator.net) + + This file is part of EQ2Emulator. + + EQ2Emulator is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + EQ2Emulator is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with EQ2Emulator. If not, see . +*/ +#include "../common/debug.h" +// Disgrace: for windows compile +#ifndef WIN32 + #include +#else + #include +#endif + +#include +using namespace std; + +#include "timer.h" + +int32 started_unix_timestamp = 0; +int32 current_time = 0; +int32 last_time = 0; + +Timer::Timer(){ + timer_time = 30000; //default to 30 seconds + start_time = current_time; + set_at_trigger = timer_time; + pUseAcurateTiming = false; + enabled = false; +} +Timer::Timer(int32 in_timer_time, bool iUseAcurateTiming) { + timer_time = in_timer_time; + start_time = current_time; + set_at_trigger = timer_time; + pUseAcurateTiming = iUseAcurateTiming; + if (timer_time == 0) { + enabled = false; + } + else { + enabled = true; + } +} + +Timer::Timer(int32 start, int32 timer, bool iUseAcurateTiming = false) { + timer_time = timer; + start_time = start; + set_at_trigger = timer_time; + pUseAcurateTiming = iUseAcurateTiming; + if (timer_time == 0) { + enabled = false; + } + else { + enabled = true; + } +} + +/* Reimplemented for MSVC - Bounce */ +#ifdef WIN32 +int gettimeofday (timeval *tp, ...) +{ + timeb tb; + + ftime (&tb); + + tp->tv_sec = tb.time; + tp->tv_usec = tb.millitm * 1000; + + return 0; +} +#endif + +/* This function checks if the timer triggered */ +bool Timer::Check(bool iReset) +{ + if (enabled && current_time-start_time > timer_time) { + if (iReset) { + if (pUseAcurateTiming) + start_time += timer_time; + else + start_time = current_time; // Reset timer + timer_time = set_at_trigger; + } + return true; + } + + return false; +} + +/* This function disables the timer */ +void Timer::Disable() { + enabled = false; +} + +void Timer::Enable() { + enabled = true; +} + +/* This function set the timer and restart it */ +void Timer::Start(int32 set_timer_time, bool ChangeResetTimer) { + start_time = current_time; + enabled = true; + if (set_timer_time != 0) + { + timer_time = set_timer_time; + if (ChangeResetTimer) + set_at_trigger = set_timer_time; + } +} + +/* This timer updates the timer without restarting it */ +void Timer::SetTimer(int32 set_timer_time) { + /* If we were disabled before => restart the timer */ + if (!enabled) { + start_time = current_time; + enabled = true; + } + if (set_timer_time != 0) { + timer_time = set_timer_time; + set_at_trigger = set_timer_time; + } +} + +int32 Timer::GetElapsedTime(){ + if (enabled) { + return current_time - start_time; + } + else { + return 0xFFFFFFFF; + } +} + +int32 Timer::GetRemainingTime() { + if (enabled) { + if (current_time-start_time > timer_time) + return 0; + else + return (start_time + timer_time) - current_time; + } + else { + return 0xFFFFFFFF; + } +} + +void Timer::SetAtTrigger(int32 in_set_at_trigger, bool iEnableIfDisabled) { + set_at_trigger = in_set_at_trigger; + if (!Enabled() && iEnableIfDisabled) { + Enable(); + } +} + +void Timer::Trigger() +{ + enabled = true; + + timer_time = set_at_trigger; + start_time = current_time-timer_time-1; +} + +const int32& Timer::GetCurrentTime2() +{ + return current_time; +} + +const int32& Timer::SetCurrentTime() +{ + struct timeval read_time; + int32 this_time; + + gettimeofday(&read_time,0); + if(started_unix_timestamp == 0) + started_unix_timestamp = read_time.tv_sec; + + this_time = (read_time.tv_sec - started_unix_timestamp) * 1000 + read_time.tv_usec / 1000; + + if (last_time == 0) + { + current_time = 0; + } + else + { + current_time += this_time - last_time; + } + + last_time = this_time; + +// cerr << "Current time:" << current_time << endl; + return current_time; +} + +int32 Timer::GetUnixTimeStamp(){ + struct timeval read_time; + gettimeofday(&read_time,0); + return read_time.tv_sec; +} diff --git a/EQ2/source/common/timer.h b/EQ2/source/common/timer.h new file mode 100644 index 000000000..8ac0eeec4 --- /dev/null +++ b/EQ2/source/common/timer.h @@ -0,0 +1,75 @@ +/* + EQ2Emulator: Everquest II Server Emulator + Copyright (C) 2007 EQ2EMulator Development Team (http://www.eq2emulator.net) + + This file is part of EQ2Emulator. + + EQ2Emulator is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + EQ2Emulator is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with EQ2Emulator. If not, see . +*/ +#ifndef TIMER_H +#define TIMER_H + +#include "types.h" + +// Disgrace: for windows compile +#ifdef WIN32 + #include + #include + int gettimeofday (timeval *tp, ...); +#endif + +class Timer +{ +public: + Timer(); + Timer(int32 timer_time, bool iUseAcurateTiming = false); + Timer(int32 start, int32 timer, bool iUseAcurateTiming); + ~Timer() { } + + bool Check(bool iReset = true); + void Enable(); + void Disable(); + void Start(int32 set_timer_time=0, bool ChangeResetTimer = true); + void SetTimer(int32 set_timer_time=0); + int32 GetRemainingTime(); + int32 GetElapsedTime(); + inline const int32& GetTimerTime() { return timer_time; } + inline const int32& GetSetAtTrigger() { return set_at_trigger; } + void Trigger(); + void SetAtTrigger(int32 set_at_trigger, bool iEnableIfDisabled = false); + + inline bool Enabled() { return enabled; } + inline int32 GetStartTime() { return(start_time); } + inline int32 GetDuration() { return(timer_time); } + + static const int32& SetCurrentTime(); + static const int32& GetCurrentTime2(); + static int32 GetUnixTimeStamp(); + +private: + int32 start_time; + int32 timer_time; + bool enabled; + int32 set_at_trigger; + + // Tells the timer to be more acurate about happening every X ms. + // Instead of Check() setting the start_time = now, + // it it sets it to start_time += timer_time + bool pUseAcurateTiming; + +// static int32 current_time; +// static int32 last_time; +}; + +#endif diff --git a/EQ2/source/common/types.h b/EQ2/source/common/types.h new file mode 100644 index 000000000..c65ccf1ee --- /dev/null +++ b/EQ2/source/common/types.h @@ -0,0 +1,191 @@ +/* + EQ2Emulator: Everquest II Server Emulator + Copyright (C) 2007 EQ2EMulator Development Team (http://www.eq2emulator.net) + + This file is part of EQ2Emulator. + + EQ2Emulator is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + EQ2Emulator is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with EQ2Emulator. If not, see . +*/ +#ifndef TYPES_H +#define TYPES_H + +#include + +using namespace std; + +//atoi is not int32 or uint32 safe!!!! +#define atoul(str) strtoul(str, NULL, 10) +#ifdef WIN32 + #define atoi64(str) _atoi64(str) +#else + #define atoi64(str) strtoll(str, NULL, 10) +#endif +typedef unsigned char int8; +typedef unsigned short int16; +typedef unsigned int int32; + +typedef unsigned char uint8; +typedef signed char sint8; +typedef unsigned short uint16; +typedef signed short sint16; +typedef unsigned int uint32; +typedef signed int sint32; + +#ifdef WIN32 + #if defined(_INTEGRAL_MAX_BITS) && _INTEGRAL_MAX_BITS >= 64 + typedef unsigned __int64 int64; + typedef unsigned __int64 uint64; + typedef signed __int64 sint64; + #else + #error __int64 not supported + #endif +#else +typedef unsigned long long int64; +typedef unsigned long long uint64; +typedef signed long long sint64; +//typedef __u64 int64; +//typedef __u64 uint64; +//typedef __s64 sint64; +#endif + +typedef unsigned long ulong; +typedef unsigned short ushort; +typedef unsigned char uchar; + +#ifdef WIN32 + #define snprintf _snprintf + #define vsnprintf _vsnprintf + #define strncasecmp _strnicmp + #define strcasecmp _stricmp + typedef void ThreadReturnType; +// #define THREAD_RETURN(x) return; + #define THREAD_RETURN(x) _endthread(); return; +#else + typedef void* ThreadReturnType; + typedef int SOCKET; + #define THREAD_RETURN(x) return(x); +#endif + +#define safe_delete(d) if(d) { delete d; d=0; } +#define safe_delete_array(d) if(d) { delete[] d; d=0; } +#define L32(i) ((int32) i) +#define H32(i) ((int32) (i >> 32)) +#define L16(i) ((int16) i) + +#ifndef WIN32 +// More WIN32 compatability + typedef unsigned long DWORD; + typedef unsigned char BYTE; + typedef char CHAR; + typedef unsigned short WORD; + typedef float FLOAT; + typedef FLOAT *PFLOAT; + typedef BYTE *PBYTE,*LPBYTE; + typedef int *PINT,*LPINT; + typedef WORD *PWORD,*LPWORD; + typedef long *LPLONG, LONG; + typedef DWORD *PDWORD,*LPDWORD; + typedef int INT; + typedef unsigned int UINT,*PUINT,*LPUINT; +#endif + + +#ifdef WIN32 +#define DLLFUNC extern "C" __declspec(dllexport) +#else +#define DLLFUNC extern "C" +#endif + + +#pragma pack(1) +struct uint16_breakdown { + union { + uint16 all; + struct { + uint8 b1; + uint8 b2; + } bytes; + }; + inline uint16& operator=(const uint16& val) { return (all=val); } + inline uint16* operator&() { return &all; } + inline operator uint16&() { return all; } + inline uint8& b1() { return bytes.b1; } + inline uint8& b2() { return bytes.b2; } +}; + +struct uint32_breakdown { + union { + uint32 all; + struct { + uint16 w1; + uint16 w2; + } words; + struct { + uint8 b1; + union { + struct { + uint8 b2; + uint8 b3; + } middle; + uint16 w2_3; // word bytes 2 to 3 + }; + uint8 b4; + } bytes; + }; + inline uint32& operator=(const uint32& val) { return (all=val); } + inline uint32* operator&() { return &all; } + inline operator uint32&() { return all; } + + inline uint16& w1() { return words.w1; } + inline uint16& w2() { return words.w2; } + inline uint16& w2_3() { return bytes.w2_3; } + inline uint8& b1() { return bytes.b1; } + inline uint8& b2() { return bytes.middle.b2; } + inline uint8& b3() { return bytes.middle.b3; } + inline uint8& b4() { return bytes.b4; } +}; + +struct EQ2_32BitString{ + int32 size; + string data; +}; +struct EQ2_16BitString{ + int16 size; + string data; +}; +struct EQ2_8BitString{ + int8 size; + string data; +}; + +struct EQ2_Color{ + int8 red; + int8 green; + int8 blue; +}; + +struct WorldTime{ + int16 year; + int month; + int day; + int hour; + int minute; +}; + +typedef enum QUERY_TYPE{ Q_SELECT, Q_UPDATE, Q_REPLACE, Q_INSERT, Q_DELETE, Q_DBMS} QUERY_TYPE; + +#pragma pack() + + +#endif diff --git a/EQ2/source/common/unix.cpp b/EQ2/source/common/unix.cpp new file mode 100644 index 000000000..6476c3a80 --- /dev/null +++ b/EQ2/source/common/unix.cpp @@ -0,0 +1,45 @@ +/* + EQ2Emulator: Everquest II Server Emulator + Copyright (C) 2007 EQ2EMulator Development Team (http://www.eq2emulator.net) + + This file is part of EQ2Emulator. + + EQ2Emulator is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + EQ2Emulator is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with EQ2Emulator. If not, see . +*/ +#include "unix.h" +#include +#include + +void Sleep(unsigned int x) { + if (x > 0) + usleep(x*1000); +} + +char* strupr(char* tmp) { + int l = strlen(tmp); + for (int x = 0; x < l; x++) { + tmp[x] = toupper(tmp[x]); + } + return tmp; +} + +char* strlwr(char* tmp) { + int l = strlen(tmp); + for (int x = 0; x < l; x++) { + tmp[x] = tolower(tmp[x]); + } + return tmp; +} + + diff --git a/EQ2/source/common/unix.h b/EQ2/source/common/unix.h new file mode 100644 index 000000000..82560a145 --- /dev/null +++ b/EQ2/source/common/unix.h @@ -0,0 +1,34 @@ +/* + EQ2Emulator: Everquest II Server Emulator + Copyright (C) 2007 EQ2EMulator Development Team (http://www.eq2emulator.net) + + This file is part of EQ2Emulator. + + EQ2Emulator is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + EQ2Emulator is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with EQ2Emulator. If not, see . +*/ +#ifndef WIN32 +#ifndef __UNIX_H__ +#define __UNIX_H__ + #ifndef PTHREAD_RECURSIVE_MUTEX_INITIALIZER_NP + #define PTHREAD_RECURSIVE_MUTEX_INITIALIZER_NP {0, 0, 0, PTHREAD_MUTEX_RECURSIVE_NP, __LOCK_INITIALIZER} + #endif +#include + +typedef int SOCKET; + +void Sleep(unsigned int x); +char* strupr(char* tmp); +char* strlwr(char* tmp); +#endif +#endif diff --git a/EQ2/source/common/version.h b/EQ2/source/common/version.h new file mode 100644 index 000000000..4af4ce75a --- /dev/null +++ b/EQ2/source/common/version.h @@ -0,0 +1,47 @@ +/* + EQ2Emulator: Everquest II Server Emulator + Copyright (C) 2007 EQ2EMulator Development Team (http://www.eq2emulator.net) + + This file is part of EQ2Emulator. + + EQ2Emulator is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + EQ2Emulator is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with EQ2Emulator. If not, see . +*/ + +#ifndef VERSION_H +#define VERSION_H + +#define CURRENT_DATABASE_MINORVERSION 41 +#define CURRENT_DATABASE_MAJORVERSION 730 +#if defined(LOGIN) + #define EQ2EMU_MODULE "EQ2EMu LoginServer" +#elif defined(PATCHER) + #define EQ2EMU_MODULE "EQ2EMu PatchServer" +#elif defined(CHAT) + #define EQ2EMU_MODULE "EQ2EMu ChatServer" +#elif defined(ZONE) + #define EQ2EMU_MODULE "EQ2EMu ZoneServer" +#else + #define EQ2EMU_MODULE "EQ2EMu WorldServer" +#endif +#define CURRENT_VERSION "0.7.3-dev" +#define COMPILE_DATE __DATE__ +#define COMPILE_TIME __TIME__ +#ifndef WIN32 + #define LAST_MODIFIED __TIME__ +#else + #define LAST_MODIFIED __TIMESTAMP__ +#endif + +#endif + diff --git a/EQ2/source/common/xmlParser.cpp b/EQ2/source/common/xmlParser.cpp new file mode 100644 index 000000000..e0f7f33c3 --- /dev/null +++ b/EQ2/source/common/xmlParser.cpp @@ -0,0 +1,2974 @@ +/** + **************************************************************************** + *

XML.c - implementation file for basic XML parser written in ANSI C++ + * for portability. It works by using recursion and a node tree for breaking + * down the elements of an XML document.

+ * + * @version V2.44 + * @author Frank Vanden Berghen + * + * NOTE: + * + * If you add "#define STRICT_PARSING", on the first line of this file + * the parser will see the following XML-stream: + * some textother text + * as an error. Otherwise, this tring will be equivalent to: + * some textother text + * + * NOTE: + * + * If you add "#define APPROXIMATE_PARSING" on the first line of this file + * the parser will see the following XML-stream: + * + * + * + * as equivalent to the following XML-stream: + * + * + * + * This can be useful for badly-formed XML-streams but prevent the use + * of the following XML-stream (problem is: tags at contiguous levels + * have the same names): + * + * + * + * + * + * + * NOTE: + * + * If you add "#define _XMLPARSER_NO_MESSAGEBOX_" on the first line of this file + * the "openFileHelper" function will always display error messages inside the + * console instead of inside a message-box-window. Message-box-windows are + * available on windows 9x/NT/2000/XP/Vista only. + * + * Copyright (c) 2002, Frank Vanden Berghen - All rights reserved. + * Commercialized by Business-Insight + * See the file "AFPL-license.txt about the licensing terms + * + **************************************************************************** + */ +#ifndef _CRT_SECURE_NO_DEPRECATE +#define _CRT_SECURE_NO_DEPRECATE +#endif +#include "xmlParser.h" +#ifdef _XMLWINDOWS +//#ifdef _DEBUG +//#define _CRTDBG_MAP_ALLOC +//#include +//#endif +#define WIN32_LEAN_AND_MEAN +#include // to have IsTextUnicode, MultiByteToWideChar, WideCharToMultiByte to handle unicode files + // to have "MessageBoxA" to display error messages for openFilHelper +#endif + +#include +#include +#include +#include +#include + +XMLCSTR XMLNode::getVersion() { return _CXML("v2.44"); } +void freeXMLString(XMLSTR t){if(t)free(t);} + +static XMLNode::XMLCharEncoding characterEncoding=XMLNode::char_encoding_UTF8; +static char guessWideCharChars=1, dropWhiteSpace=1, removeCommentsInMiddleOfText=1; + +inline int mmin( const int t1, const int t2 ) { return t1 < t2 ? t1 : t2; } + +// You can modify the initialization of the variable "XMLClearTags" below +// to change the clearTags that are currently recognized by the library. +// The number on the second columns is the length of the string inside the +// first column. +// The "") }, + { _CXML("") }, + { _CXML("") }, + { _CXML("
")    ,5,  _CXML("
") }, +// { _CXML("")}, + { NULL ,0, NULL } +}; + +// You can modify the initialization of the variable "XMLEntities" below +// to change the character entities that are currently recognized by the library. +// The number on the second columns is the length of the string inside the +// first column. Additionally, the syntaxes " " and " " are recognized. +typedef struct { XMLCSTR s; int l; XMLCHAR c;} XMLCharacterEntity; +static XMLCharacterEntity XMLEntities[] = +{ + { _CXML("&" ), 5, _CXML('&' )}, + { _CXML("<" ), 4, _CXML('<' )}, + { _CXML(">" ), 4, _CXML('>' )}, + { _CXML("""), 6, _CXML('\"')}, + { _CXML("'"), 6, _CXML('\'')}, + { NULL , 0, '\0' } +}; + +// When rendering the XMLNode to a string (using the "createXMLString" function), +// you can ask for a beautiful formatting. This formatting is using the +// following indentation character: +#define INDENTCHAR _CXML('\t') + +// The following function parses the XML errors into a user friendly string. +// You can edit this to change the output language of the library to something else. +XMLCSTR XMLNode::getError(XMLError xerror) +{ + switch (xerror) + { + case eXMLErrorNone: return _CXML("No error"); + case eXMLErrorMissingEndTag: return _CXML("Warning: Unmatched end tag"); + case eXMLErrorNoXMLTagFound: return _CXML("Warning: No XML tag found"); + case eXMLErrorEmpty: return _CXML("Error: No XML data"); + case eXMLErrorMissingTagName: return _CXML("Error: Missing start tag name"); + case eXMLErrorMissingEndTagName: return _CXML("Error: Missing end tag name"); + case eXMLErrorUnmatchedEndTag: return _CXML("Error: Unmatched end tag"); + case eXMLErrorUnmatchedEndClearTag: return _CXML("Error: Unmatched clear tag end"); + case eXMLErrorUnexpectedToken: return _CXML("Error: Unexpected token found"); + case eXMLErrorNoElements: return _CXML("Error: No elements found"); + case eXMLErrorFileNotFound: return _CXML("Error: File not found"); + case eXMLErrorFirstTagNotFound: return _CXML("Error: First Tag not found"); + case eXMLErrorUnknownCharacterEntity:return _CXML("Error: Unknown character entity"); + case eXMLErrorCharacterCodeAbove255: return _CXML("Error: Character code above 255 is forbidden in MultiByte char mode."); + case eXMLErrorCharConversionError: return _CXML("Error: unable to convert between WideChar and MultiByte chars"); + case eXMLErrorCannotOpenWriteFile: return _CXML("Error: unable to open file for writing"); + case eXMLErrorCannotWriteFile: return _CXML("Error: cannot write into file"); + + case eXMLErrorBase64DataSizeIsNotMultipleOf4: return _CXML("Warning: Base64-string length is not a multiple of 4"); + case eXMLErrorBase64DecodeTruncatedData: return _CXML("Warning: Base64-string is truncated"); + case eXMLErrorBase64DecodeIllegalCharacter: return _CXML("Error: Base64-string contains an illegal character"); + case eXMLErrorBase64DecodeBufferTooSmall: return _CXML("Error: Base64 decode output buffer is too small"); + }; + return _CXML("Unknown"); +} + +///////////////////////////////////////////////////////////////////////// +// Here start the abstraction layer to be OS-independent // +///////////////////////////////////////////////////////////////////////// + +// Here is an abstraction layer to access some common string manipulation functions. +// The abstraction layer is currently working for gcc, Microsoft Visual Studio 6.0, +// Microsoft Visual Studio .NET, CC (sun compiler) and Borland C++. +// If you plan to "port" the library to a new system/compiler, all you have to do is +// to edit the following lines. +#ifdef XML_NO_WIDE_CHAR +char myIsTextWideChar(const void *b, int len) { return FALSE; } +#else + #if defined (UNDER_CE) || !defined(_XMLWINDOWS) + char myIsTextWideChar(const void *b, int len) // inspired by the Wine API: RtlIsTextUnicode + { +#ifdef sun + // for SPARC processors: wchar_t* buffers must always be alligned, otherwise it's a char* buffer. + if ((((unsigned long)b)%sizeof(wchar_t))!=0) return FALSE; +#endif + const wchar_t *s=(const wchar_t*)b; + + // buffer too small: + if (len<(int)sizeof(wchar_t)) return FALSE; + + // odd length test + if (len&1) return FALSE; + + /* only checks the first 256 characters */ + len=mmin(256,len/sizeof(wchar_t)); + + // Check for the special byte order: + if (*((unsigned short*)s) == 0xFFFE) return TRUE; // IS_TEXT_UNICODE_REVERSE_SIGNATURE; + if (*((unsigned short*)s) == 0xFEFF) return TRUE; // IS_TEXT_UNICODE_SIGNATURE + + // checks for ASCII characters in the UNICODE stream + int i,stats=0; + for (i=0; ilen/2) return TRUE; + + // Check for UNICODE NULL chars + for (i=0; i + static inline int xstrnicmp(XMLCSTR c1, XMLCSTR c2, int l) { return wsncasecmp(c1,c2,l);} + static inline int xstrncmp(XMLCSTR c1, XMLCSTR c2, int l) { return wsncmp(c1,c2,l);} + static inline int xstricmp(XMLCSTR c1, XMLCSTR c2) { return wscasecmp(c1,c2); } + #else + static inline int xstrncmp(XMLCSTR c1, XMLCSTR c2, int l) { return wcsncmp(c1,c2,l);} + #ifdef __linux__ + // for gcc/linux + static inline int xstrnicmp(XMLCSTR c1, XMLCSTR c2, int l) { return wcsncasecmp(c1,c2,l);} + static inline int xstricmp(XMLCSTR c1, XMLCSTR c2) { return wcscasecmp(c1,c2); } + #else + #include + // for gcc/non-linux (MacOS X 10.3, FreeBSD 6.0, NetBSD 3.0, OpenBSD 3.8, AIX 4.3.2, HP-UX 11, IRIX 6.5, OSF/1 5.1, Cygwin, mingw) + static inline int xstricmp(XMLCSTR c1, XMLCSTR c2) + { + wchar_t left,right; + do + { + left=towlower(*c1++); right=towlower(*c2++); + } while (left&&(left==right)); + return (int)left-(int)right; + } + static inline int xstrnicmp(XMLCSTR c1, XMLCSTR c2, int l) + { + wchar_t left,right; + while(l--) + { + left=towlower(*c1++); right=towlower(*c2++); + if ((!left)||(left!=right)) return (int)left-(int)right; + } + return 0; + } + #endif + #endif + static inline XMLSTR xstrstr(XMLCSTR c1, XMLCSTR c2) { return (XMLSTR)wcsstr(c1,c2); } + static inline XMLSTR xstrcpy(XMLSTR c1, XMLCSTR c2) { return (XMLSTR)wcscpy(c1,c2); } + static inline FILE *xfopen(XMLCSTR filename,XMLCSTR mode) + { + char *filenameAscii=myWideCharToMultiByte(filename); + FILE *f; + if (mode[0]==_CXML('r')) f=fopen(filenameAscii,"rb"); + else f=fopen(filenameAscii,"wb"); + free(filenameAscii); + return f; + } + #else + static inline FILE *xfopen(XMLCSTR filename,XMLCSTR mode) { return fopen(filename,mode); } + static inline int xstrlen(XMLCSTR c) { return strlen(c); } + static inline int xstrnicmp(XMLCSTR c1, XMLCSTR c2, int l) { return strncasecmp(c1,c2,l);} + static inline int xstrncmp(XMLCSTR c1, XMLCSTR c2, int l) { return strncmp(c1,c2,l);} + static inline int xstricmp(XMLCSTR c1, XMLCSTR c2) { return strcasecmp(c1,c2); } + static inline XMLSTR xstrstr(XMLCSTR c1, XMLCSTR c2) { return (XMLSTR)strstr(c1,c2); } + static inline XMLSTR xstrcpy(XMLSTR c1, XMLCSTR c2) { return (XMLSTR)strcpy(c1,c2); } + #endif + static inline int _strnicmp(const char *c1,const char *c2, int l) { return strncasecmp(c1,c2,l);} +#endif + + +/////////////////////////////////////////////////////////////////////////////// +// the "xmltoc,xmltob,xmltoi,xmltol,xmltof,xmltoa" functions // +/////////////////////////////////////////////////////////////////////////////// +// These 6 functions are not used inside the XMLparser. +// There are only here as "convenience" functions for the user. +// If you don't need them, you can delete them without any trouble. +#ifdef _XMLWIDECHAR + #ifdef _XMLWINDOWS + // for Microsoft Visual Studio 6.0 and Microsoft Visual Studio .NET and Borland C++ Builder 6.0 + char xmltob(XMLCSTR t,char v){ if (t&&(*t)) return (char)_wtoi(t); return v; } + int xmltoi(XMLCSTR t,int v){ if (t&&(*t)) return _wtoi(t); return v; } + long long xmltol(XMLCSTR t,long long v){ if (t&&(*t)) return _wtoi64(t); return v; } + double xmltof(XMLCSTR t,double v){ if (t&&(*t)) swscanf(t, L"%lf", &v); /*v=_wtof(t);*/ return v; } + #else + #ifdef sun + // for CC + #include + char xmltob(XMLCSTR t,char v){ if (t) return (char)wstol(t,NULL,10); return v; } + int xmltoi(XMLCSTR t,int v){ if (t) return (int)wstol(t,NULL,10); return v; } + long long xmltol(XMLCSTR t,long long v){ if (t) return wstol(t,NULL,10); return v; } + #else + // for gcc + char xmltob(XMLCSTR t,char v){ if (t) return (char)wcstol(t,NULL,10); return v; } + int xmltoi(XMLCSTR t,int v){ if (t) return (int)wcstol(t,NULL,10); return v; } + long long xmltol(XMLCSTR t,long long v){ if (t) return wcstol(t,NULL,10); return v; } + #endif + double xmltof(XMLCSTR t,double v){ if (t&&(*t)) swscanf(t, L"%lf", &v); /*v=_wtof(t);*/ return v; } + #endif +#else + #ifdef _XMLWINDOWS + long long xmltol(XMLCSTR t,long long v){ if (t&&(*t)) return _atoi64(t); return v; } + #else + long long xmltol(XMLCSTR t,long long v){ if (t&&(*t)) return atoll(t); return v; } + #endif + char xmltob(XMLCSTR t,char v){ if (t&&(*t)) return (char)atoi(t); return v; } + int xmltoi(XMLCSTR t,int v){ if (t&&(*t)) return atoi(t); return v; } + double xmltof(XMLCSTR t,double v){ if (t&&(*t)) return atof(t); return v; } +#endif +XMLCSTR xmltoa(XMLCSTR t, XMLCSTR v){ if (t) return t; return v; } +XMLCHAR xmltoc(XMLCSTR t,const XMLCHAR v){ if (t&&(*t)) return *t; return v; } + +///////////////////////////////////////////////////////////////////////// +// the "openFileHelper" function // +///////////////////////////////////////////////////////////////////////// + +// Since each application has its own way to report and deal with errors, you should modify & rewrite +// the following "openFileHelper" function to get an "error reporting mechanism" tailored to your needs. +XMLNode XMLNode::openFileHelper(XMLCSTR filename, XMLCSTR tag) +{ + // guess the value of the global parameter "characterEncoding" + // (the guess is based on the first 200 bytes of the file). + FILE *f=xfopen(filename,_CXML("rb")); + if (f) + { + char bb[205]; + int l=(int)fread(bb,1,200,f); + setGlobalOptions(guessCharEncoding(bb,l),guessWideCharChars,dropWhiteSpace,removeCommentsInMiddleOfText); + fclose(f); + } + + // parse the file + XMLResults pResults; + XMLNode xnode=XMLNode::parseFile(filename,tag,&pResults); + + // display error message (if any) + if (pResults.error != eXMLErrorNone) + { + // create message + char message[2000],*s1=(char*)"",*s3=(char*)""; XMLCSTR s2=_CXML(""); + if (pResults.error==eXMLErrorFirstTagNotFound) { s1=(char*)"First Tag should be '"; s2=tag; s3=(char*)"'.\n"; } +#ifdef _XMLWINDOWS + _snprintf(message,2000, +#else + snprintf(message,2000, +#endif +#ifdef _XMLWIDECHAR + "XML Parsing error inside file '%S'.\n%S\nAt line %i, column %i.\n%s%S%s" +#else + "XML Parsing error inside file '%s'.\n%s\nAt line %i, column %i.\n%s%s%s" +#endif + ,filename,XMLNode::getError(pResults.error),pResults.nLine,pResults.nColumn,s1,s2,s3); + + // display message +#if defined(_XMLWINDOWS) && !defined(UNDER_CE) && !defined(_XMLPARSER_NO_MESSAGEBOX_) + MessageBoxA(NULL,message,"XML Parsing error",MB_OK|MB_ICONERROR|MB_TOPMOST); +#else + printf("%s",message); +#endif + exit(255); + } + return xnode; +} + +///////////////////////////////////////////////////////////////////////// +// Here start the core implementation of the XMLParser library // +///////////////////////////////////////////////////////////////////////// + +// You should normally not change anything below this point. + +#ifndef _XMLWIDECHAR +// If "characterEncoding=ascii" then we assume that all characters have the same length of 1 byte. +// If "characterEncoding=UTF8" then the characters have different lengths (from 1 byte to 4 bytes). +// If "characterEncoding=ShiftJIS" then the characters have different lengths (from 1 byte to 2 bytes). +// This table is used as lookup-table to know the length of a character (in byte) based on the +// content of the first byte of the character. +// (note: if you modify this, you must always have XML_utf8ByteTable[0]=0 ). +static const char XML_utf8ByteTable[256] = +{ + // 0 1 2 3 4 5 6 7 8 9 a b c d e f + 0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,// 0x00 + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,// 0x10 + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,// 0x20 + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,// 0x30 + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,// 0x40 + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,// 0x50 + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,// 0x60 + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,// 0x70 End of ASCII range + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,// 0x80 0x80 to 0xc1 invalid + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,// 0x90 + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,// 0xa0 + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,// 0xb0 + 1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,// 0xc0 0xc2 to 0xdf 2 byte + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,// 0xd0 + 3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,// 0xe0 0xe0 to 0xef 3 byte + 4,4,4,4,4,1,1,1,1,1,1,1,1,1,1,1 // 0xf0 0xf0 to 0xf4 4 byte, 0xf5 and higher invalid +}; +static const char XML_legacyByteTable[256] = +{ + 0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 +}; +static const char XML_sjisByteTable[256] = +{ + // 0 1 2 3 4 5 6 7 8 9 a b c d e f + 0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,// 0x00 + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,// 0x10 + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,// 0x20 + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,// 0x30 + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,// 0x40 + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,// 0x50 + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,// 0x60 + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,// 0x70 + 1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,// 0x80 0x81 to 0x9F 2 bytes + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,// 0x90 + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,// 0xa0 + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,// 0xb0 + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,// 0xc0 + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,// 0xd0 + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,// 0xe0 0xe0 to 0xef 2 bytes + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 // 0xf0 +}; +static const char XML_gb2312ByteTable[256] = +{ +// 0 1 2 3 4 5 6 7 8 9 a b c d e f + 0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,// 0x00 + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,// 0x10 + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,// 0x20 + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,// 0x30 + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,// 0x40 + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,// 0x50 + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,// 0x60 + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,// 0x70 + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,// 0x80 + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,// 0x90 + 1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,// 0xa0 0xa1 to 0xf7 2 bytes + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,// 0xb0 + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,// 0xc0 + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,// 0xd0 + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,// 0xe0 + 2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1 // 0xf0 +}; +static const char XML_gbk_big5_ByteTable[256] = +{ + // 0 1 2 3 4 5 6 7 8 9 a b c d e f + 0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,// 0x00 + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,// 0x10 + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,// 0x20 + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,// 0x30 + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,// 0x40 + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,// 0x50 + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,// 0x60 + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,// 0x70 + 1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,// 0x80 0x81 to 0xfe 2 bytes + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,// 0x90 + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,// 0xa0 + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,// 0xb0 + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,// 0xc0 + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,// 0xd0 + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,// 0xe0 + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1 // 0xf0 +}; +static const char *XML_ByteTable=(const char *)XML_utf8ByteTable; // the default is "characterEncoding=XMLNode::encoding_UTF8" +#endif + + +XMLNode XMLNode::emptyXMLNode; +XMLClear XMLNode::emptyXMLClear={ NULL, NULL, NULL}; +XMLAttribute XMLNode::emptyXMLAttribute={ NULL, NULL}; + +// Enumeration used to decipher what type a token is +typedef enum XMLTokenTypeTag +{ + eTokenText = 0, + eTokenQuotedText, + eTokenTagStart, /* "<" */ + eTokenTagEnd, /* "" */ + eTokenEquals, /* "=" */ + eTokenDeclaration, /* "" */ + eTokenClear, + eTokenError +} XMLTokenType; + +// Main structure used for parsing XML +typedef struct XML +{ + XMLCSTR lpXML; + XMLCSTR lpszText; + int nIndex,nIndexMissigEndTag; + enum XMLError error; + XMLCSTR lpEndTag; + int cbEndTag; + XMLCSTR lpNewElement; + int cbNewElement; + int nFirst; +} XML; + +typedef struct +{ + ALLXMLClearTag *pClr; + XMLCSTR pStr; +} NextToken; + +// Enumeration used when parsing attributes +typedef enum Attrib +{ + eAttribName = 0, + eAttribEquals, + eAttribValue +} Attrib; + +// Enumeration used when parsing elements to dictate whether we are currently +// inside a tag +typedef enum XMLStatus +{ + eInsideTag = 0, + eOutsideTag +} XMLStatus; + +XMLError XMLNode::writeToFile(XMLCSTR filename, const char *encoding, char nFormat) const +{ + if (!d) return eXMLErrorNone; + FILE *f=xfopen(filename,_CXML("wb")); + if (!f) return eXMLErrorCannotOpenWriteFile; +#ifdef _XMLWIDECHAR + unsigned char h[2]={ 0xFF, 0xFE }; + if (!fwrite(h,2,1,f)) + { + fclose(f); + return eXMLErrorCannotWriteFile; + } + if ((!isDeclaration())&&((d->lpszName)||(!getChildNode().isDeclaration()))) + { + if (!fwrite(L"\n",sizeof(wchar_t)*40,1,f)) + { + fclose(f); + return eXMLErrorCannotWriteFile; + } + } +#else + if ((!isDeclaration())&&((d->lpszName)||(!getChildNode().isDeclaration()))) + { + if (characterEncoding==char_encoding_UTF8) + { + // header so that windows recognize the file as UTF-8: + unsigned char h[3]={0xEF,0xBB,0xBF}; + if (!fwrite(h,3,1,f)) + { + fclose(f); + return eXMLErrorCannotWriteFile; + } + encoding="utf-8"; + } else if (characterEncoding==char_encoding_ShiftJIS) encoding="SHIFT-JIS"; + + if (!encoding) encoding="ISO-8859-1"; + if (fprintf(f,"\n",encoding)<0) + { + fclose(f); + return eXMLErrorCannotWriteFile; + } + } else + { + if (characterEncoding==char_encoding_UTF8) + { + unsigned char h[3]={0xEF,0xBB,0xBF}; + if (!fwrite(h,3,1,f)) + { + fclose(f); + return eXMLErrorCannotWriteFile; + } + } + } +#endif + int i; + XMLSTR t=createXMLString(nFormat,&i); + if (!fwrite(t,sizeof(XMLCHAR)*i,1,f)) + { + free(t); + fclose(f); + return eXMLErrorCannotWriteFile; + } + if (fclose(f)!=0) + { + free(t); + return eXMLErrorCannotWriteFile; + } + free(t); + return eXMLErrorNone; +} + +// Duplicate a given string. +XMLSTR stringDup(XMLCSTR lpszData, int cbData) +{ + if (lpszData==NULL) return NULL; + + XMLSTR lpszNew; + if (cbData==-1) cbData=(int)xstrlen(lpszData); + lpszNew = (XMLSTR)malloc((cbData+1) * sizeof(XMLCHAR)); + if (lpszNew) + { + memcpy(lpszNew, lpszData, (cbData) * sizeof(XMLCHAR)); + lpszNew[cbData] = (XMLCHAR)NULL; + } + return lpszNew; +} + +XMLSTR ToXMLStringTool::toXMLUnSafe(XMLSTR dest,XMLCSTR source) +{ + XMLSTR dd=dest; + XMLCHAR ch; + XMLCharacterEntity *entity; + while ((ch=*source)) + { + entity=XMLEntities; + do + { + if (ch==entity->c) {xstrcpy(dest,entity->s); dest+=entity->l; source++; goto out_of_loop1; } + entity++; + } while(entity->s); +#ifdef _XMLWIDECHAR + *(dest++)=*(source++); +#else + switch(XML_ByteTable[(unsigned char)ch]) + { + case 4: + if ((!(source[1]))||(!(source[2]))||(!(source[3]))) { *(dest++)='_'; source++; } + else + { + *dest=*source; + dest[1]=source[1]; + dest[2]=source[2]; + dest[3]=source[3]; + dest+=4; source+=4; + } + break; + case 3: + if ((!(source[1]))||(!(source[2]))) { *(dest++)='_'; source++; } + else + { + *dest=*source; + dest[1]=source[1]; + dest[2]=source[2]; + dest+=3; source+=3; + } + break; + case 2: + if (!(source[1])) { *(dest++)='_'; source++; } + else + { + *dest=*source; + dest[1]=source[1]; + dest+=2; source+=2; + } + break; + case 1: *(dest++)=*(source++); + } +#endif +out_of_loop1: + ; + } + *dest=0; + return dd; +} + +// private (used while rendering): +int ToXMLStringTool::lengthXMLString(XMLCSTR source) +{ + int r=0; + XMLCharacterEntity *entity; + XMLCHAR ch; + while ((ch=*source)) + { + entity=XMLEntities; + do + { + if (ch==entity->c) { r+=entity->l; source++; goto out_of_loop1; } + entity++; + } while(entity->s); +#ifdef _XMLWIDECHAR + r++; source++; +#else + ch=XML_ByteTable[(unsigned char)ch]; r+=ch; source+=ch; +#endif +out_of_loop1: + ; + } + return r; +} + +ToXMLStringTool::~ToXMLStringTool(){ freeBuffer(); } +void ToXMLStringTool::freeBuffer(){ if (buf) free(buf); buf=NULL; buflen=0; } +XMLSTR ToXMLStringTool::toXML(XMLCSTR source) +{ + if (!source) + { + if (buflen<1) { buflen=1; buf=(XMLSTR)malloc(sizeof(XMLCHAR)); } + *buf=0; + return buf; + } + int l=lengthXMLString(source)+1; + if (l>buflen) { freeBuffer(); buflen=l; buf=(XMLSTR)malloc(l*sizeof(XMLCHAR)); } + return toXMLUnSafe(buf,source); +} + +// private: +XMLSTR fromXMLString(XMLCSTR s, int lo, XML *pXML) +{ + // This function is the opposite of the function "toXMLString". It decodes the escape + // sequences &, ", ', <, > and replace them by the characters + // &,",',<,>. This function is used internally by the XML Parser. All the calls to + // the XML library will always gives you back "decoded" strings. + // + // in: string (s) and length (lo) of string + // out: new allocated string converted from xml + if (!s) return NULL; + + int ll=0,j; + XMLSTR d; + XMLCSTR ss=s; + XMLCharacterEntity *entity; + while ((lo>0)&&(*s)) + { + if (*s==_CXML('&')) + { + if ((lo>2)&&(s[1]==_CXML('#'))) + { + s+=2; lo-=2; + if ((*s==_CXML('X'))||(*s==_CXML('x'))) { s++; lo--; } + while ((*s)&&(*s!=_CXML(';'))&&((lo--)>0)) s++; + if (*s!=_CXML(';')) + { + pXML->error=eXMLErrorUnknownCharacterEntity; + return NULL; + } + s++; lo--; + } else + { + entity=XMLEntities; + do + { + if ((lo>=entity->l)&&(xstrnicmp(s,entity->s,entity->l)==0)) { s+=entity->l; lo-=entity->l; break; } + entity++; + } while(entity->s); + if (!entity->s) + { + pXML->error=eXMLErrorUnknownCharacterEntity; + return NULL; + } + } + } else + { +#ifdef _XMLWIDECHAR + s++; lo--; +#else + j=XML_ByteTable[(unsigned char)*s]; s+=j; lo-=j; ll+=j-1; +#endif + } + ll++; + } + + d=(XMLSTR)malloc((ll+1)*sizeof(XMLCHAR)); + s=d; + while (ll-->0) + { + if (*ss==_CXML('&')) + { + if (ss[1]==_CXML('#')) + { + ss+=2; j=0; + if ((*ss==_CXML('X'))||(*ss==_CXML('x'))) + { + ss++; + while (*ss!=_CXML(';')) + { + if ((*ss>=_CXML('0'))&&(*ss<=_CXML('9'))) j=(j<<4)+*ss-_CXML('0'); + else if ((*ss>=_CXML('A'))&&(*ss<=_CXML('F'))) j=(j<<4)+*ss-_CXML('A')+10; + else if ((*ss>=_CXML('a'))&&(*ss<=_CXML('f'))) j=(j<<4)+*ss-_CXML('a')+10; + else { free((void*)s); pXML->error=eXMLErrorUnknownCharacterEntity;return NULL;} + ss++; + } + } else + { + while (*ss!=_CXML(';')) + { + if ((*ss>=_CXML('0'))&&(*ss<=_CXML('9'))) j=(j*10)+*ss-_CXML('0'); + else { free((void*)s); pXML->error=eXMLErrorUnknownCharacterEntity;return NULL;} + ss++; + } + } +#ifndef _XMLWIDECHAR + if (j>255) { free((void*)s); pXML->error=eXMLErrorCharacterCodeAbove255;return NULL;} +#endif + (*d++)=(XMLCHAR)j; ss++; + } else + { + entity=XMLEntities; + do + { + if (xstrnicmp(ss,entity->s,entity->l)==0) { *(d++)=entity->c; ss+=entity->l; break; } + entity++; + } while(entity->s); + } + } else + { +#ifdef _XMLWIDECHAR + *(d++)=*(ss++); +#else + switch(XML_ByteTable[(unsigned char)*ss]) + { + case 4: *(d++)=*(ss++); ll--; + case 3: *(d++)=*(ss++); ll--; + case 2: *(d++)=*(ss++); ll--; + case 1: *(d++)=*(ss++); + } +#endif + } + } + *d=0; + return (XMLSTR)s; +} + +#define XML_isSPACECHAR(ch) ((ch==_CXML('\n'))||(ch==_CXML(' '))||(ch== _CXML('\t'))||(ch==_CXML('\r'))) + +// private: +char myTagCompare(XMLCSTR cclose, XMLCSTR copen) +// !!!! WARNING strange convention&: +// return 0 if equals +// return 1 if different +{ + if (!cclose) return 1; + int l=(int)xstrlen(cclose); + if (xstrnicmp(cclose, copen, l)!=0) return 1; + const XMLCHAR c=copen[l]; + if (XML_isSPACECHAR(c)|| + (c==_CXML('/' ))|| + (c==_CXML('<' ))|| + (c==_CXML('>' ))|| + (c==_CXML('=' ))) return 0; + return 1; +} + +// Obtain the next character from the string. +static inline XMLCHAR getNextChar(XML *pXML) +{ + XMLCHAR ch = pXML->lpXML[pXML->nIndex]; +#ifdef _XMLWIDECHAR + if (ch!=0) pXML->nIndex++; +#else + pXML->nIndex+=XML_ByteTable[(unsigned char)ch]; +#endif + return ch; +} + +// Find the next token in a string. +// pcbToken contains the number of characters that have been read. +static NextToken GetNextToken(XML *pXML, int *pcbToken, enum XMLTokenTypeTag *pType) +{ + NextToken result; + XMLCHAR ch; + XMLCHAR chTemp; + int indexStart,nFoundMatch,nIsText=FALSE; + result.pClr=NULL; // prevent warning + + // Find next non-white space character + do { indexStart=pXML->nIndex; ch=getNextChar(pXML); } while XML_isSPACECHAR(ch); + + if (ch) + { + // Cache the current string pointer + result.pStr = &pXML->lpXML[indexStart]; + + // check for standard tokens + switch(ch) + { + // Check for quotes + case _CXML('\''): + case _CXML('\"'): + // Type of token + *pType = eTokenQuotedText; + chTemp = ch; + + // Set the size + nFoundMatch = FALSE; + + // Search through the string to find a matching quote + while((ch = getNextChar(pXML))) + { + if (ch==chTemp) { nFoundMatch = TRUE; break; } + if (ch==_CXML('<')) break; + } + + // If we failed to find a matching quote + if (nFoundMatch == FALSE) + { + pXML->nIndex=indexStart+1; + nIsText=TRUE; + break; + } + +// 4.02.2002 +// if (FindNonWhiteSpace(pXML)) pXML->nIndex--; + + break; + + // Equals (used with attribute values) + case _CXML('='): + *pType = eTokenEquals; + break; + + // Close tag + case _CXML('>'): + *pType = eTokenCloseTag; + break; + + // Check for tag start and tag end + case _CXML('<'): + + { + // First check whether the token is in the clear tag list (meaning it + // does not need formatting). + ALLXMLClearTag *ctag=XMLClearTags; + do + { + if (!xstrncmp(ctag->lpszOpen, result.pStr, ctag->openTagLen)) + { + result.pClr=ctag; + pXML->nIndex+=ctag->openTagLen-1; + *pType=eTokenClear; + return result; + } + ctag++; + } while(ctag->lpszOpen); + + // Peek at the next character to see if we have an end tag 'lpXML[pXML->nIndex]; + + // If we have a tag end... + if (chTemp == _CXML('/')) + { + // Set the type and ensure we point at the next character + getNextChar(pXML); + *pType = eTokenTagEnd; + } + + // If we have an XML declaration tag + else if (chTemp == _CXML('?')) + { + + // Set the type and ensure we point at the next character + getNextChar(pXML); + *pType = eTokenDeclaration; + } + + // Otherwise we must have a start tag + else + { + *pType = eTokenTagStart; + } + break; + } + + // Check to see if we have a short hand type end tag ('/>'). + case _CXML('/'): + + // Peek at the next character to see if we have a short end tag '/>' + chTemp = pXML->lpXML[pXML->nIndex]; + + // If we have a short hand end tag... + if (chTemp == _CXML('>')) + { + // Set the type and ensure we point at the next character + getNextChar(pXML); + *pType = eTokenShortHandClose; + break; + } + + // If we haven't found a short hand closing tag then drop into the + // text process + + // Other characters + default: + nIsText = TRUE; + } + + // If this is a TEXT node + if (nIsText) + { + // Indicate we are dealing with text + *pType = eTokenText; + while((ch = getNextChar(pXML))) + { + if XML_isSPACECHAR(ch) + { + indexStart++; break; + + } else if (ch==_CXML('/')) + { + // If we find a slash then this maybe text or a short hand end tag + // Peek at the next character to see it we have short hand end tag + ch=pXML->lpXML[pXML->nIndex]; + // If we found a short hand end tag then we need to exit the loop + if (ch==_CXML('>')) { pXML->nIndex--; break; } + + } else if ((ch==_CXML('<'))||(ch==_CXML('>'))||(ch==_CXML('='))) + { + pXML->nIndex--; break; + } + } + } + *pcbToken = pXML->nIndex-indexStart; + } else + { + // If we failed to obtain a valid character + *pcbToken = 0; + *pType = eTokenError; + result.pStr=NULL; + } + + return result; +} + +XMLCSTR XMLNode::updateName_WOSD(XMLSTR lpszName) +{ + if (!d) { free(lpszName); return NULL; } + if (d->lpszName&&(lpszName!=d->lpszName)) free((void*)d->lpszName); + d->lpszName=lpszName; + return lpszName; +} + +// private: +XMLNode::XMLNode(struct XMLNodeDataTag *p){ d=p; (p->ref_count)++; } +XMLNode::XMLNode(XMLNodeData *pParent, XMLSTR lpszName, char isDeclaration) +{ + d=(XMLNodeData*)malloc(sizeof(XMLNodeData)); + d->ref_count=1; + + d->lpszName=NULL; + d->nChild= 0; + d->nText = 0; + d->nClear = 0; + d->nAttribute = 0; + + d->isDeclaration = isDeclaration; + + d->pParent = pParent; + d->pChild= NULL; + d->pText= NULL; + d->pClear= NULL; + d->pAttribute= NULL; + d->pOrder= NULL; + + updateName_WOSD(lpszName); +} + +XMLNode XMLNode::createXMLTopNode_WOSD(XMLSTR lpszName, char isDeclaration) { return XMLNode(NULL,lpszName,isDeclaration); } +XMLNode XMLNode::createXMLTopNode(XMLCSTR lpszName, char isDeclaration) { return XMLNode(NULL,stringDup(lpszName),isDeclaration); } + +#define MEMORYINCREASE 50 + +static inline void myFree(void *p) { if (p) free(p); } +static inline void *myRealloc(void *p, int newsize, int memInc, int sizeofElem) +{ + if (p==NULL) { if (memInc) return malloc(memInc*sizeofElem); return malloc(sizeofElem); } + if ((memInc==0)||((newsize%memInc)==0)) p=realloc(p,(newsize+memInc)*sizeofElem); +// if (!p) +// { +// printf("XMLParser Error: Not enough memory! Aborting...\n"); exit(220); +// } + return p; +} + +// private: +XMLElementPosition XMLNode::findPosition(XMLNodeData *d, int index, XMLElementType xxtype) +{ + if (index<0) return -1; + int i=0,j=(int)((index<<2)+xxtype),*o=d->pOrder; while (o[i]!=j) i++; return i; +} + +// private: +// update "order" information when deleting a content of a XMLNode +int XMLNode::removeOrderElement(XMLNodeData *d, XMLElementType t, int index) +{ + int n=d->nChild+d->nText+d->nClear, *o=d->pOrder,i=findPosition(d,index,t); + memmove(o+i, o+i+1, (n-i)*sizeof(int)); + for (;ipOrder=(int)realloc(d->pOrder,n*sizeof(int)); + // but we skip reallocation because it's too time consuming. + // Anyway, at the end, it will be free'd completely at once. + return i; +} + +void *XMLNode::addToOrder(int memoryIncrease,int *_pos, int nc, void *p, int size, XMLElementType xtype) +{ + // in: *_pos is the position inside d->pOrder ("-1" means "EndOf") + // out: *_pos is the index inside p + p=myRealloc(p,(nc+1),memoryIncrease,size); + int n=d->nChild+d->nText+d->nClear; + d->pOrder=(int*)myRealloc(d->pOrder,n+1,memoryIncrease*3,sizeof(int)); + int pos=*_pos,*o=d->pOrder; + + if ((pos<0)||(pos>=n)) { *_pos=nc; o[n]=(int)((nc<<2)+xtype); return p; } + + int i=pos; + memmove(o+i+1, o+i, (n-i)*sizeof(int)); + + while ((pos>2; + memmove(((char*)p)+(pos+1)*size,((char*)p)+pos*size,(nc-pos)*size); + + return p; +} + +// Add a child node to the given element. +XMLNode XMLNode::addChild_priv(int memoryIncrease, XMLSTR lpszName, char isDeclaration, int pos) +{ + if (!lpszName) return emptyXMLNode; + d->pChild=(XMLNode*)addToOrder(memoryIncrease,&pos,d->nChild,d->pChild,sizeof(XMLNode),eNodeChild); + d->pChild[pos].d=NULL; + d->pChild[pos]=XMLNode(d,lpszName,isDeclaration); + d->nChild++; + return d->pChild[pos]; +} + +// Add an attribute to an element. +XMLAttribute *XMLNode::addAttribute_priv(int memoryIncrease,XMLSTR lpszName, XMLSTR lpszValuev) +{ + if (!lpszName) return &emptyXMLAttribute; + if (!d) { myFree(lpszName); myFree(lpszValuev); return &emptyXMLAttribute; } + int nc=d->nAttribute; + d->pAttribute=(XMLAttribute*)myRealloc(d->pAttribute,(nc+1),memoryIncrease,sizeof(XMLAttribute)); + XMLAttribute *pAttr=d->pAttribute+nc; + pAttr->lpszName = lpszName; + pAttr->lpszValue = lpszValuev; + d->nAttribute++; + return pAttr; +} + +// Add text to the element. +XMLCSTR XMLNode::addText_priv(int memoryIncrease, XMLSTR lpszValue, int pos) +{ + if (!lpszValue) return NULL; + if (!d) { myFree(lpszValue); return NULL; } + d->pText=(XMLCSTR*)addToOrder(memoryIncrease,&pos,d->nText,d->pText,sizeof(XMLSTR),eNodeText); + d->pText[pos]=lpszValue; + d->nText++; + return lpszValue; +} + +// Add clear (unformatted) text to the element. +XMLClear *XMLNode::addClear_priv(int memoryIncrease, XMLSTR lpszValue, XMLCSTR lpszOpen, XMLCSTR lpszClose, int pos) +{ + if (!lpszValue) return &emptyXMLClear; + if (!d) { myFree(lpszValue); return &emptyXMLClear; } + d->pClear=(XMLClear *)addToOrder(memoryIncrease,&pos,d->nClear,d->pClear,sizeof(XMLClear),eNodeClear); + XMLClear *pNewClear=d->pClear+pos; + pNewClear->lpszValue = lpszValue; + if (!lpszOpen) lpszOpen=XMLClearTags->lpszOpen; + if (!lpszClose) lpszClose=XMLClearTags->lpszClose; + pNewClear->lpszOpenTag = lpszOpen; + pNewClear->lpszCloseTag = lpszClose; + d->nClear++; + return pNewClear; +} + +// private: +// Parse a clear (unformatted) type node. +char XMLNode::parseClearTag(void *px, void *_pClear) +{ + XML *pXML=(XML *)px; + ALLXMLClearTag pClear=*((ALLXMLClearTag*)_pClear); + int cbTemp=0; + XMLCSTR lpszTemp=NULL; + XMLCSTR lpXML=&pXML->lpXML[pXML->nIndex]; + static XMLCSTR docTypeEnd=_CXML("]>"); + + // Find the closing tag + // Seems the ')) { lpszTemp=pCh; break; } +#ifdef _XMLWIDECHAR + pCh++; +#else + pCh+=XML_ByteTable[(unsigned char)(*pCh)]; +#endif + } + } else lpszTemp=xstrstr(lpXML, pClear.lpszClose); + + if (lpszTemp) + { + // Cache the size and increment the index + cbTemp = (int)(lpszTemp - lpXML); + + pXML->nIndex += cbTemp+(int)xstrlen(pClear.lpszClose); + + // Add the clear node to the current element + addClear_priv(MEMORYINCREASE,cbTemp?stringDup(lpXML,cbTemp):NULL, pClear.lpszOpen, pClear.lpszClose,-1); + return 0; + } + + // If we failed to find the end tag + pXML->error = eXMLErrorUnmatchedEndClearTag; + return 1; +} + +void XMLNode::exactMemory(XMLNodeData *d) +{ + if (d->pOrder) d->pOrder=(int*)realloc(d->pOrder,(d->nChild+d->nText+d->nClear)*sizeof(int)); + if (d->pChild) d->pChild=(XMLNode*)realloc(d->pChild,d->nChild*sizeof(XMLNode)); + if (d->pAttribute) d->pAttribute=(XMLAttribute*)realloc(d->pAttribute,d->nAttribute*sizeof(XMLAttribute)); + if (d->pText) d->pText=(XMLCSTR*)realloc(d->pText,d->nText*sizeof(XMLSTR)); + if (d->pClear) d->pClear=(XMLClear *)realloc(d->pClear,d->nClear*sizeof(XMLClear)); +} + +char XMLNode::maybeAddTxT(void *pa, XMLCSTR tokenPStr) +{ + XML *pXML=(XML *)pa; + XMLCSTR lpszText=pXML->lpszText; + if (!lpszText) return 0; + if (dropWhiteSpace) while (XML_isSPACECHAR(*lpszText)&&(lpszText!=tokenPStr)) lpszText++; + int cbText = (int)(tokenPStr - lpszText); + if (!cbText) { pXML->lpszText=NULL; return 0; } + if (dropWhiteSpace) { cbText--; while ((cbText)&&XML_isSPACECHAR(lpszText[cbText])) cbText--; cbText++; } + if (!cbText) { pXML->lpszText=NULL; return 0; } + XMLSTR lpt=fromXMLString(lpszText,cbText,pXML); + if (!lpt) return 1; + pXML->lpszText=NULL; + if (removeCommentsInMiddleOfText && d->nText && d->nClear) + { + // if the previous insertion was a comment () AND + // if the previous previous insertion was a text then, delete the comment and append the text + int n=d->nChild+d->nText+d->nClear-1,*o=d->pOrder; + if (((o[n]&3)==eNodeClear)&&((o[n-1]&3)==eNodeText)) + { + int i=o[n]>>2; + if (d->pClear[i].lpszOpenTag==XMLClearTags[2].lpszOpen) + { + deleteClear(i); + i=o[n-1]>>2; + n=xstrlen(d->pText[i]); + int n2=xstrlen(lpt)+1; + d->pText[i]=(XMLSTR)realloc((void*)d->pText[i],(n+n2)*sizeof(XMLCHAR)); + if (!d->pText[i]) return 1; + memcpy((void*)(d->pText[i]+n),lpt,n2*sizeof(XMLCHAR)); + free(lpt); + return 0; + } + } + } + addText_priv(MEMORYINCREASE,lpt,-1); + return 0; +} +// private: +// Recursively parse an XML element. +int XMLNode::ParseXMLElement(void *pa) +{ + XML *pXML=(XML *)pa; + int cbToken; + enum XMLTokenTypeTag xtype; + NextToken token; + XMLCSTR lpszTemp=NULL; + int cbTemp=0; + char nDeclaration; + XMLNode pNew; + enum XMLStatus status; // inside or outside a tag + enum Attrib attrib = eAttribName; + + assert(pXML); + + // If this is the first call to the function + if (pXML->nFirst) + { + // Assume we are outside of a tag definition + pXML->nFirst = FALSE; + status = eOutsideTag; + } else + { + // If this is not the first call then we should only be called when inside a tag. + status = eInsideTag; + } + + // Iterate through the tokens in the document + for(;;) + { + // Obtain the next token + token = GetNextToken(pXML, &cbToken, &xtype); + + if (xtype != eTokenError) + { + // Check the current status + switch(status) + { + + // If we are outside of a tag definition + case eOutsideTag: + + // Check what type of token we obtained + switch(xtype) + { + // If we have found text or quoted text + case eTokenText: + case eTokenCloseTag: /* '>' */ + case eTokenShortHandClose: /* '/>' */ + case eTokenQuotedText: + case eTokenEquals: + break; + + // If we found a start tag '<' and declarations 'error = eXMLErrorMissingTagName; + return FALSE; + } + + // If we found a new element which is the same as this + // element then we need to pass this back to the caller.. + +#ifdef APPROXIMATE_PARSING + if (d->lpszName && + myTagCompare(d->lpszName, token.pStr) == 0) + { + // Indicate to the caller that it needs to create a + // new element. + pXML->lpNewElement = token.pStr; + pXML->cbNewElement = cbToken; + return TRUE; + } else +#endif + { + // If the name of the new element differs from the name of + // the current element we need to add the new element to + // the current one and recurse + pNew = addChild_priv(MEMORYINCREASE,stringDup(token.pStr,cbToken), nDeclaration,-1); + + while (!pNew.isEmpty()) + { + // Callself to process the new node. If we return + // FALSE this means we dont have any more + // processing to do... + + if (!pNew.ParseXMLElement(pXML)) return FALSE; + else + { + // If the call to recurse this function + // evented in a end tag specified in XML then + // we need to unwind the calls to this + // function until we find the appropriate node + // (the element name and end tag name must + // match) + if (pXML->cbEndTag) + { + // If we are back at the root node then we + // have an unmatched end tag + if (!d->lpszName) + { + pXML->error=eXMLErrorUnmatchedEndTag; + return FALSE; + } + + // If the end tag matches the name of this + // element then we only need to unwind + // once more... + + if (myTagCompare(d->lpszName, pXML->lpEndTag)==0) + { + pXML->cbEndTag = 0; + } + + return TRUE; + } else + if (pXML->cbNewElement) + { + // If the call indicated a new element is to + // be created on THIS element. + + // If the name of this element matches the + // name of the element we need to create + // then we need to return to the caller + // and let it process the element. + + if (myTagCompare(d->lpszName, pXML->lpNewElement)==0) + { + return TRUE; + } + + // Add the new element and recurse + pNew = addChild_priv(MEMORYINCREASE,stringDup(pXML->lpNewElement,pXML->cbNewElement),0,-1); + pXML->cbNewElement = 0; + } + else + { + // If we didn't have a new element to create + pNew = emptyXMLNode; + + } + } + } + } + break; + + // If we found an end tag + case eTokenTagEnd: + + // If we have node text then add this to the element + if (maybeAddTxT(pXML,token.pStr)) return FALSE; + + // Find the name of the end tag + token = GetNextToken(pXML, &cbTemp, &xtype); + + // The end tag should be text + if (xtype != eTokenText) + { + pXML->error = eXMLErrorMissingEndTagName; + return FALSE; + } + lpszTemp = token.pStr; + + // After the end tag we should find a closing tag + token = GetNextToken(pXML, &cbToken, &xtype); + if (xtype != eTokenCloseTag) + { + pXML->error = eXMLErrorMissingEndTagName; + return FALSE; + } + pXML->lpszText=pXML->lpXML+pXML->nIndex; + + // We need to return to the previous caller. If the name + // of the tag cannot be found we need to keep returning to + // caller until we find a match + if (myTagCompare(d->lpszName, lpszTemp) != 0) +#ifdef STRICT_PARSING + { + pXML->error=eXMLErrorUnmatchedEndTag; + pXML->nIndexMissigEndTag=pXML->nIndex; + return FALSE; + } +#else + { + pXML->error=eXMLErrorMissingEndTag; + pXML->nIndexMissigEndTag=pXML->nIndex; + pXML->lpEndTag = lpszTemp; + pXML->cbEndTag = cbTemp; + } +#endif + + // Return to the caller + exactMemory(d); + return TRUE; + + // If we found a clear (unformatted) token + case eTokenClear: + // If we have node text then add this to the element + if (maybeAddTxT(pXML,token.pStr)) return FALSE; + if (parseClearTag(pXML, token.pClr)) return FALSE; + pXML->lpszText=pXML->lpXML+pXML->nIndex; + break; + + default: + break; + } + break; + + // If we are inside a tag definition we need to search for attributes + case eInsideTag: + + // Check what part of the attribute (name, equals, value) we + // are looking for. + switch(attrib) + { + // If we are looking for a new attribute + case eAttribName: + + // Check what the current token type is + switch(xtype) + { + // If the current type is text... + // Eg. 'attribute' + case eTokenText: + // Cache the token then indicate that we are next to + // look for the equals + lpszTemp = token.pStr; + cbTemp = cbToken; + attrib = eAttribEquals; + break; + + // If we found a closing tag... + // Eg. '>' + case eTokenCloseTag: + // We are now outside the tag + status = eOutsideTag; + pXML->lpszText=pXML->lpXML+pXML->nIndex; + break; + + // If we found a short hand '/>' closing tag then we can + // return to the caller + case eTokenShortHandClose: + exactMemory(d); + pXML->lpszText=pXML->lpXML+pXML->nIndex; + return TRUE; + + // Errors... + case eTokenQuotedText: /* '"SomeText"' */ + case eTokenTagStart: /* '<' */ + case eTokenTagEnd: /* 'error = eXMLErrorUnexpectedToken; + return FALSE; + default: break; + } + break; + + // If we are looking for an equals + case eAttribEquals: + // Check what the current token type is + switch(xtype) + { + // If the current type is text... + // Eg. 'Attribute AnotherAttribute' + case eTokenText: + // Add the unvalued attribute to the list + addAttribute_priv(MEMORYINCREASE,stringDup(lpszTemp,cbTemp), NULL); + // Cache the token then indicate. We are next to + // look for the equals attribute + lpszTemp = token.pStr; + cbTemp = cbToken; + break; + + // If we found a closing tag 'Attribute >' or a short hand + // closing tag 'Attribute />' + case eTokenShortHandClose: + case eTokenCloseTag: + // If we are a declaration element 'lpszText=pXML->lpXML+pXML->nIndex; + + if (d->isDeclaration && + (lpszTemp[cbTemp-1]) == _CXML('?')) + { + cbTemp--; + if (d->pParent && d->pParent->pParent) xtype = eTokenShortHandClose; + } + + if (cbTemp) + { + // Add the unvalued attribute to the list + addAttribute_priv(MEMORYINCREASE,stringDup(lpszTemp,cbTemp), NULL); + } + + // If this is the end of the tag then return to the caller + if (xtype == eTokenShortHandClose) + { + exactMemory(d); + return TRUE; + } + + // We are now outside the tag + status = eOutsideTag; + break; + + // If we found the equals token... + // Eg. 'Attribute =' + case eTokenEquals: + // Indicate that we next need to search for the value + // for the attribute + attrib = eAttribValue; + break; + + // Errors... + case eTokenQuotedText: /* 'Attribute "InvalidAttr"'*/ + case eTokenTagStart: /* 'Attribute <' */ + case eTokenTagEnd: /* 'Attribute error = eXMLErrorUnexpectedToken; + return FALSE; + default: break; + } + break; + + // If we are looking for an attribute value + case eAttribValue: + // Check what the current token type is + switch(xtype) + { + // If the current type is text or quoted text... + // Eg. 'Attribute = "Value"' or 'Attribute = Value' or + // 'Attribute = 'Value''. + case eTokenText: + case eTokenQuotedText: + // If we are a declaration element 'isDeclaration && + (token.pStr[cbToken-1]) == _CXML('?')) + { + cbToken--; + } + + if (cbTemp) + { + // Add the valued attribute to the list + if (xtype==eTokenQuotedText) { token.pStr++; cbToken-=2; } + XMLSTR attrVal=(XMLSTR)token.pStr; + if (attrVal) + { + attrVal=fromXMLString(attrVal,cbToken,pXML); + if (!attrVal) return FALSE; + } + addAttribute_priv(MEMORYINCREASE,stringDup(lpszTemp,cbTemp),attrVal); + } + + // Indicate we are searching for a new attribute + attrib = eAttribName; + break; + + // Errors... + case eTokenTagStart: /* 'Attr = <' */ + case eTokenTagEnd: /* 'Attr = ' */ + case eTokenShortHandClose: /* "Attr = />" */ + case eTokenEquals: /* 'Attr = =' */ + case eTokenDeclaration: /* 'Attr = error = eXMLErrorUnexpectedToken; + return FALSE; + break; + default: break; + } + } + } + } + // If we failed to obtain the next token + else + { + if ((!d->isDeclaration)&&(d->pParent)) + { +#ifdef STRICT_PARSING + pXML->error=eXMLErrorUnmatchedEndTag; +#else + pXML->error=eXMLErrorMissingEndTag; +#endif + pXML->nIndexMissigEndTag=pXML->nIndex; + } + maybeAddTxT(pXML,pXML->lpXML+pXML->nIndex); + return FALSE; + } + } +} + +// Count the number of lines and columns in an XML string. +static void CountLinesAndColumns(XMLCSTR lpXML, int nUpto, XMLResults *pResults) +{ + XMLCHAR ch; + assert(lpXML); + assert(pResults); + + struct XML xml={ lpXML,lpXML, 0, 0, eXMLErrorNone, NULL, 0, NULL, 0, TRUE }; + + pResults->nLine = 1; + pResults->nColumn = 1; + while (xml.nIndexnColumn++; + else + { + pResults->nLine++; + pResults->nColumn=1; + } + } +} + +// Parse XML and return the root element. +XMLNode XMLNode::parseString(XMLCSTR lpszXML, XMLCSTR tag, XMLResults *pResults) +{ + if (!lpszXML) + { + if (pResults) + { + pResults->error=eXMLErrorNoElements; + pResults->nLine=0; + pResults->nColumn=0; + } + return emptyXMLNode; + } + + XMLNode xnode(NULL,NULL,FALSE); + struct XML xml={ lpszXML, lpszXML, 0, 0, eXMLErrorNone, NULL, 0, NULL, 0, TRUE }; + + // Create header element + xnode.ParseXMLElement(&xml); + enum XMLError error = xml.error; + if (!xnode.nChildNode()) error=eXMLErrorNoXMLTagFound; + if ((xnode.nChildNode()==1)&&(xnode.nElement()==1)) xnode=xnode.getChildNode(); // skip the empty node + + // If no error occurred + if ((error==eXMLErrorNone)||(error==eXMLErrorMissingEndTag)||(error==eXMLErrorNoXMLTagFound)) + { + XMLCSTR name=xnode.getName(); + if (tag&&(*tag)&&((!name)||(xstricmp(name,tag)))) + { + xnode=xnode.getChildNode(tag); + if (xnode.isEmpty()) + { + if (pResults) + { + pResults->error=eXMLErrorFirstTagNotFound; + pResults->nLine=0; + pResults->nColumn=0; + } + return emptyXMLNode; + } + } + } else + { + // Cleanup: this will destroy all the nodes + xnode = emptyXMLNode; + } + + + // If we have been given somewhere to place results + if (pResults) + { + pResults->error = error; + + // If we have an error + if (error!=eXMLErrorNone) + { + if (error==eXMLErrorMissingEndTag) xml.nIndex=xml.nIndexMissigEndTag; + // Find which line and column it starts on. + CountLinesAndColumns(xml.lpXML, xml.nIndex, pResults); + } + } + return xnode; +} + +XMLNode XMLNode::parseFile(XMLCSTR filename, XMLCSTR tag, XMLResults *pResults) +{ + if (pResults) { pResults->nLine=0; pResults->nColumn=0; } + FILE *f=xfopen(filename,_CXML("rb")); + if (f==NULL) { if (pResults) pResults->error=eXMLErrorFileNotFound; return emptyXMLNode; } + fseek(f,0,SEEK_END); + int l=(int)ftell(f),headerSz=0; + if (!l) { if (pResults) pResults->error=eXMLErrorEmpty; fclose(f); return emptyXMLNode; } + fseek(f,0,SEEK_SET); + unsigned char *buf=(unsigned char*)malloc(l+4); + l=(int)fread(buf,1,l,f); + fclose(f); + buf[l]=0;buf[l+1]=0;buf[l+2]=0;buf[l+3]=0; +#ifdef _XMLWIDECHAR + if (guessWideCharChars) + { + if (!myIsTextWideChar(buf,l)) + { + XMLNode::XMLCharEncoding ce=XMLNode::char_encoding_legacy; + if ((buf[0]==0xef)&&(buf[1]==0xbb)&&(buf[2]==0xbf)) { headerSz=3; ce=XMLNode::char_encoding_UTF8; } + XMLSTR b2=myMultiByteToWideChar((const char*)(buf+headerSz),ce); + if (!b2) + { + // todo: unable to convert + } + free(buf); buf=(unsigned char*)b2; headerSz=0; + } else + { + if ((buf[0]==0xef)&&(buf[1]==0xff)) headerSz=2; + if ((buf[0]==0xff)&&(buf[1]==0xfe)) headerSz=2; + } + } else + { + if ((buf[0]==0xef)&&(buf[1]==0xff)) headerSz=2; + if ((buf[0]==0xff)&&(buf[1]==0xfe)) headerSz=2; + if ((buf[0]==0xef)&&(buf[1]==0xbb)&&(buf[2]==0xbf)) headerSz=3; + } +#else + if (guessWideCharChars) + { + if (myIsTextWideChar(buf,l)) + { + if ((buf[0]==0xef)&&(buf[1]==0xff)) headerSz=2; + if ((buf[0]==0xff)&&(buf[1]==0xfe)) headerSz=2; + char *b2=myWideCharToMultiByte((const wchar_t*)(buf+headerSz)); + free(buf); buf=(unsigned char*)b2; headerSz=0; + } else + { + if ((buf[0]==0xef)&&(buf[1]==0xbb)&&(buf[2]==0xbf)) headerSz=3; + } + } else + { + if ((buf[0]==0xef)&&(buf[1]==0xff)) headerSz=2; + if ((buf[0]==0xff)&&(buf[1]==0xfe)) headerSz=2; + if ((buf[0]==0xef)&&(buf[1]==0xbb)&&(buf[2]==0xbf)) headerSz=3; + } +#endif + + if (!buf) { if (pResults) pResults->error=eXMLErrorCharConversionError; return emptyXMLNode; } + XMLNode x=parseString((XMLSTR)(buf+headerSz),tag,pResults); + free(buf); + return x; +} + +static inline void charmemset(XMLSTR dest,XMLCHAR c,int l) { while (l--) *(dest++)=c; } +// private: +// Creates an user friendly XML string from a given element with +// appropriate white space and carriage returns. +// +// This recurses through all subnodes then adds contents of the nodes to the +// string. +int XMLNode::CreateXMLStringR(XMLNodeData *pEntry, XMLSTR lpszMarker, int nFormat) +{ + int nResult = 0; + int cb=nFormat<0?0:nFormat; + int cbElement; + int nChildFormat=-1; + int nElementI=pEntry->nChild+pEntry->nText+pEntry->nClear; + int i,j; + if ((nFormat>=0)&&(nElementI==1)&&(pEntry->nText==1)&&(!pEntry->isDeclaration)) nFormat=-2; + + assert(pEntry); + +#define LENSTR(lpsz) (lpsz ? xstrlen(lpsz) : 0) + + // If the element has no name then assume this is the head node. + cbElement = (int)LENSTR(pEntry->lpszName); + + if (cbElement) + { + // "isDeclaration) lpszMarker[nResult++]=_CXML('?'); + xstrcpy(&lpszMarker[nResult], pEntry->lpszName); + nResult+=cbElement; + lpszMarker[nResult++]=_CXML(' '); + + } else + { + nResult+=cbElement+2+cb; + if (pEntry->isDeclaration) nResult++; + } + + // Enumerate attributes and add them to the string + XMLAttribute *pAttr=pEntry->pAttribute; + for (i=0; inAttribute; i++) + { + // "Attrib + cb = (int)LENSTR(pAttr->lpszName); + if (cb) + { + if (lpszMarker) xstrcpy(&lpszMarker[nResult], pAttr->lpszName); + nResult += cb; + // "Attrib=Value " + if (pAttr->lpszValue) + { + cb=(int)ToXMLStringTool::lengthXMLString(pAttr->lpszValue); + if (lpszMarker) + { + lpszMarker[nResult]=_CXML('='); + lpszMarker[nResult+1]=_CXML('"'); + if (cb) ToXMLStringTool::toXMLUnSafe(&lpszMarker[nResult+2],pAttr->lpszValue); + lpszMarker[nResult+cb+2]=_CXML('"'); + } + nResult+=cb+3; + } + if (lpszMarker) lpszMarker[nResult] = _CXML(' '); + nResult++; + } + pAttr++; + } + + if (pEntry->isDeclaration) + { + if (lpszMarker) + { + lpszMarker[nResult-1]=_CXML('?'); + lpszMarker[nResult]=_CXML('>'); + } + nResult++; + if (nFormat!=-1) + { + if (lpszMarker) lpszMarker[nResult]=_CXML('\n'); + nResult++; + } + } else + // If there are child nodes we need to terminate the start tag + if (nElementI) + { + if (lpszMarker) lpszMarker[nResult-1]=_CXML('>'); + if (nFormat>=0) + { + if (lpszMarker) lpszMarker[nResult]=_CXML('\n'); + nResult++; + } + } else nResult--; + } + + // Calculate the child format for when we recurse. This is used to + // determine the number of spaces used for prefixes. + if (nFormat!=-1) + { + if (cbElement&&(!pEntry->isDeclaration)) nChildFormat=nFormat+1; + else nChildFormat=nFormat; + } + + // Enumerate through remaining children + for (i=0; ipOrder[i]; + switch((XMLElementType)(j&3)) + { + // Text nodes + case eNodeText: + { + // "Text" + XMLCSTR pChild=pEntry->pText[j>>2]; + cb = (int)ToXMLStringTool::lengthXMLString(pChild); + if (cb) + { + if (nFormat>=0) + { + if (lpszMarker) + { + charmemset(&lpszMarker[nResult],INDENTCHAR,nFormat+1); + ToXMLStringTool::toXMLUnSafe(&lpszMarker[nResult+nFormat+1],pChild); + lpszMarker[nResult+nFormat+1+cb]=_CXML('\n'); + } + nResult+=cb+nFormat+2; + } else + { + if (lpszMarker) ToXMLStringTool::toXMLUnSafe(&lpszMarker[nResult], pChild); + nResult += cb; + } + } + break; + } + + // Clear type nodes + case eNodeClear: + { + XMLClear *pChild=pEntry->pClear+(j>>2); + // "OpenTag" + cb = (int)LENSTR(pChild->lpszOpenTag); + if (cb) + { + if (nFormat!=-1) + { + if (lpszMarker) + { + charmemset(&lpszMarker[nResult], INDENTCHAR, nFormat+1); + xstrcpy(&lpszMarker[nResult+nFormat+1], pChild->lpszOpenTag); + } + nResult+=cb+nFormat+1; + } + else + { + if (lpszMarker)xstrcpy(&lpszMarker[nResult], pChild->lpszOpenTag); + nResult += cb; + } + } + + // "OpenTag Value" + cb = (int)LENSTR(pChild->lpszValue); + if (cb) + { + if (lpszMarker) xstrcpy(&lpszMarker[nResult], pChild->lpszValue); + nResult += cb; + } + + // "OpenTag Value CloseTag" + cb = (int)LENSTR(pChild->lpszCloseTag); + if (cb) + { + if (lpszMarker) xstrcpy(&lpszMarker[nResult], pChild->lpszCloseTag); + nResult += cb; + } + + if (nFormat!=-1) + { + if (lpszMarker) lpszMarker[nResult] = _CXML('\n'); + nResult++; + } + break; + } + + // Element nodes + case eNodeChild: + { + // Recursively add child nodes + nResult += CreateXMLStringR(pEntry->pChild[j>>2].d, lpszMarker ? lpszMarker + nResult : 0, nChildFormat); + break; + } + default: break; + } + } + + if ((cbElement)&&(!pEntry->isDeclaration)) + { + // If we have child entries we need to use long XML notation for + // closing the element - "blah blah blah" + if (nElementI) + { + // "\0" + if (lpszMarker) + { + if (nFormat >=0) + { + charmemset(&lpszMarker[nResult], INDENTCHAR,nFormat); + nResult+=nFormat; + } + + lpszMarker[nResult]=_CXML('<'); lpszMarker[nResult+1]=_CXML('/'); + nResult += 2; + xstrcpy(&lpszMarker[nResult], pEntry->lpszName); + nResult += cbElement; + + lpszMarker[nResult]=_CXML('>'); + if (nFormat == -1) nResult++; + else + { + lpszMarker[nResult+1]=_CXML('\n'); + nResult+=2; + } + } else + { + if (nFormat>=0) nResult+=cbElement+4+nFormat; + else if (nFormat==-1) nResult+=cbElement+3; + else nResult+=cbElement+4; + } + } else + { + // If there are no children we can use shorthand XML notation - + // "" + // "/>\0" + if (lpszMarker) + { + lpszMarker[nResult]=_CXML('/'); lpszMarker[nResult+1]=_CXML('>'); + if (nFormat != -1) lpszMarker[nResult+2]=_CXML('\n'); + } + nResult += nFormat == -1 ? 2 : 3; + } + } + + return nResult; +} + +#undef LENSTR + +// Create an XML string +// @param int nFormat - 0 if no formatting is required +// otherwise nonzero for formatted text +// with carriage returns and indentation. +// @param int *pnSize - [out] pointer to the size of the +// returned string not including the +// NULL terminator. +// @return XMLSTR - Allocated XML string, you must free +// this with free(). +XMLSTR XMLNode::createXMLString(int nFormat, int *pnSize) const +{ + if (!d) { if (pnSize) *pnSize=0; return NULL; } + + XMLSTR lpszResult = NULL; + int cbStr; + + // Recursively Calculate the size of the XML string + if (!dropWhiteSpace) nFormat=0; + nFormat = nFormat ? 0 : -1; + cbStr = CreateXMLStringR(d, 0, nFormat); + // Alllocate memory for the XML string + the NULL terminator and + // create the recursively XML string. + lpszResult=(XMLSTR)malloc((cbStr+1)*sizeof(XMLCHAR)); + CreateXMLStringR(d, lpszResult, nFormat); + lpszResult[cbStr]=_CXML('\0'); + if (pnSize) *pnSize = cbStr; + return lpszResult; +} + +int XMLNode::detachFromParent(XMLNodeData *d) +{ + XMLNode *pa=d->pParent->pChild; + int i=0; + while (((void*)(pa[i].d))!=((void*)d)) i++; + d->pParent->nChild--; + if (d->pParent->nChild) memmove(pa+i,pa+i+1,(d->pParent->nChild-i)*sizeof(XMLNode)); + else { free(pa); d->pParent->pChild=NULL; } + return removeOrderElement(d->pParent,eNodeChild,i); +} + +XMLNode::~XMLNode() +{ + if (!d) return; + d->ref_count--; + emptyTheNode(0); +} +void XMLNode::deleteNodeContent() +{ + if (!d) return; + if (d->pParent) { detachFromParent(d); d->pParent=NULL; d->ref_count--; } + emptyTheNode(1); +} +void XMLNode::emptyTheNode(char force) +{ + XMLNodeData *dd=d; // warning: must stay this way! + if ((dd->ref_count==0)||force) + { + if (d->pParent) detachFromParent(d); + int i; + XMLNode *pc; + for(i=0; inChild; i++) + { + pc=dd->pChild+i; + pc->d->pParent=NULL; + pc->d->ref_count--; + pc->emptyTheNode(force); + } + myFree(dd->pChild); + for(i=0; inText; i++) free((void*)dd->pText[i]); + myFree(dd->pText); + for(i=0; inClear; i++) free((void*)dd->pClear[i].lpszValue); + myFree(dd->pClear); + for(i=0; inAttribute; i++) + { + free((void*)dd->pAttribute[i].lpszName); + if (dd->pAttribute[i].lpszValue) free((void*)dd->pAttribute[i].lpszValue); + } + myFree(dd->pAttribute); + myFree(dd->pOrder); + myFree((void*)dd->lpszName); + dd->nChild=0; dd->nText=0; dd->nClear=0; dd->nAttribute=0; + dd->pChild=NULL; dd->pText=NULL; dd->pClear=NULL; dd->pAttribute=NULL; + dd->pOrder=NULL; dd->lpszName=NULL; dd->pParent=NULL; + } + if (dd->ref_count==0) + { + free(dd); + d=NULL; + } +} + +XMLNode& XMLNode::operator=( const XMLNode& A ) +{ + // shallow copy + if (this != &A) + { + if (d) { d->ref_count--; emptyTheNode(0); } + d=A.d; + if (d) (d->ref_count) ++ ; + } + return *this; +} + +XMLNode::XMLNode(const XMLNode &A) +{ + // shallow copy + d=A.d; + if (d) (d->ref_count)++ ; +} + +XMLNode XMLNode::deepCopy() const +{ + if (!d) return XMLNode::emptyXMLNode; + XMLNode x(NULL,stringDup(d->lpszName),d->isDeclaration); + XMLNodeData *p=x.d; + int n=d->nAttribute; + if (n) + { + p->nAttribute=n; p->pAttribute=(XMLAttribute*)malloc(n*sizeof(XMLAttribute)); + while (n--) + { + p->pAttribute[n].lpszName=stringDup(d->pAttribute[n].lpszName); + p->pAttribute[n].lpszValue=stringDup(d->pAttribute[n].lpszValue); + } + } + if (d->pOrder) + { + n=(d->nChild+d->nText+d->nClear)*sizeof(int); p->pOrder=(int*)malloc(n); memcpy(p->pOrder,d->pOrder,n); + } + n=d->nText; + if (n) + { + p->nText=n; p->pText=(XMLCSTR*)malloc(n*sizeof(XMLCSTR)); + while(n--) p->pText[n]=stringDup(d->pText[n]); + } + n=d->nClear; + if (n) + { + p->nClear=n; p->pClear=(XMLClear*)malloc(n*sizeof(XMLClear)); + while (n--) + { + p->pClear[n].lpszCloseTag=d->pClear[n].lpszCloseTag; + p->pClear[n].lpszOpenTag=d->pClear[n].lpszOpenTag; + p->pClear[n].lpszValue=stringDup(d->pClear[n].lpszValue); + } + } + n=d->nChild; + if (n) + { + p->nChild=n; p->pChild=(XMLNode*)malloc(n*sizeof(XMLNode)); + while (n--) + { + p->pChild[n].d=NULL; + p->pChild[n]=d->pChild[n].deepCopy(); + p->pChild[n].d->pParent=p; + } + } + return x; +} + +XMLNode XMLNode::addChild(XMLNode childNode, int pos) +{ + XMLNodeData *dc=childNode.d; + if ((!dc)||(!d)) return childNode; + if (!dc->lpszName) + { + // this is a root node: todo: correct fix + int j=pos; + while (dc->nChild) + { + addChild(dc->pChild[0],j); + if (pos>=0) j++; + } + return childNode; + } + if (dc->pParent) { if ((detachFromParent(dc)<=pos)&&(dc->pParent==d)) pos--; } else dc->ref_count++; + dc->pParent=d; +// int nc=d->nChild; +// d->pChild=(XMLNode*)myRealloc(d->pChild,(nc+1),memoryIncrease,sizeof(XMLNode)); + d->pChild=(XMLNode*)addToOrder(0,&pos,d->nChild,d->pChild,sizeof(XMLNode),eNodeChild); + d->pChild[pos].d=dc; + d->nChild++; + return childNode; +} + +void XMLNode::deleteAttribute(int i) +{ + if ((!d)||(i<0)||(i>=d->nAttribute)) return; + d->nAttribute--; + XMLAttribute *p=d->pAttribute+i; + free((void*)p->lpszName); + if (p->lpszValue) free((void*)p->lpszValue); + if (d->nAttribute) memmove(p,p+1,(d->nAttribute-i)*sizeof(XMLAttribute)); else { free(p); d->pAttribute=NULL; } +} + +void XMLNode::deleteAttribute(XMLAttribute *a){ if (a) deleteAttribute(a->lpszName); } +void XMLNode::deleteAttribute(XMLCSTR lpszName) +{ + int j=0; + getAttribute(lpszName,&j); + if (j) deleteAttribute(j-1); +} + +XMLAttribute *XMLNode::updateAttribute_WOSD(XMLSTR lpszNewValue, XMLSTR lpszNewName,int i) +{ + if (!d) { if (lpszNewValue) free(lpszNewValue); if (lpszNewName) free(lpszNewName); return NULL; } + if (i>=d->nAttribute) + { + if (lpszNewName) return addAttribute_WOSD(lpszNewName,lpszNewValue); + return NULL; + } + XMLAttribute *p=d->pAttribute+i; + if (p->lpszValue&&p->lpszValue!=lpszNewValue) free((void*)p->lpszValue); + p->lpszValue=lpszNewValue; + if (lpszNewName&&p->lpszName!=lpszNewName) { free((void*)p->lpszName); p->lpszName=lpszNewName; }; + return p; +} + +XMLAttribute *XMLNode::updateAttribute_WOSD(XMLAttribute *newAttribute, XMLAttribute *oldAttribute) +{ + if (oldAttribute) return updateAttribute_WOSD((XMLSTR)newAttribute->lpszValue,(XMLSTR)newAttribute->lpszName,oldAttribute->lpszName); + return addAttribute_WOSD((XMLSTR)newAttribute->lpszName,(XMLSTR)newAttribute->lpszValue); +} + +XMLAttribute *XMLNode::updateAttribute_WOSD(XMLSTR lpszNewValue, XMLSTR lpszNewName,XMLCSTR lpszOldName) +{ + int j=0; + getAttribute(lpszOldName,&j); + if (j) return updateAttribute_WOSD(lpszNewValue,lpszNewName,j-1); + else + { + if (lpszNewName) return addAttribute_WOSD(lpszNewName,lpszNewValue); + else return addAttribute_WOSD(stringDup(lpszOldName),lpszNewValue); + } +} + +int XMLNode::indexText(XMLCSTR lpszValue) const +{ + if (!d) return -1; + int i,l=d->nText; + if (!lpszValue) { if (l) return 0; return -1; } + XMLCSTR *p=d->pText; + for (i=0; i=d->nText)) return; + d->nText--; + XMLCSTR *p=d->pText+i; + free((void*)*p); + if (d->nText) memmove(p,p+1,(d->nText-i)*sizeof(XMLCSTR)); else { free(p); d->pText=NULL; } + removeOrderElement(d,eNodeText,i); +} + +void XMLNode::deleteText(XMLCSTR lpszValue) { deleteText(indexText(lpszValue)); } + +XMLCSTR XMLNode::updateText_WOSD(XMLSTR lpszNewValue, int i) +{ + if (!d) { if (lpszNewValue) free(lpszNewValue); return NULL; } + if (i>=d->nText) return addText_WOSD(lpszNewValue); + XMLCSTR *p=d->pText+i; + if (*p!=lpszNewValue) { free((void*)*p); *p=lpszNewValue; } + return lpszNewValue; +} + +XMLCSTR XMLNode::updateText_WOSD(XMLSTR lpszNewValue, XMLCSTR lpszOldValue) +{ + if (!d) { if (lpszNewValue) free(lpszNewValue); return NULL; } + int i=indexText(lpszOldValue); + if (i>=0) return updateText_WOSD(lpszNewValue,i); + return addText_WOSD(lpszNewValue); +} + +void XMLNode::deleteClear(int i) +{ + if ((!d)||(i<0)||(i>=d->nClear)) return; + d->nClear--; + XMLClear *p=d->pClear+i; + free((void*)p->lpszValue); + if (d->nClear) memmove(p,p+1,(d->nClear-i)*sizeof(XMLClear)); else { free(p); d->pClear=NULL; } + removeOrderElement(d,eNodeClear,i); +} + +int XMLNode::indexClear(XMLCSTR lpszValue) const +{ + if (!d) return -1; + int i,l=d->nClear; + if (!lpszValue) { if (l) return 0; return -1; } + XMLClear *p=d->pClear; + for (i=0; ilpszValue); } + +XMLClear *XMLNode::updateClear_WOSD(XMLSTR lpszNewContent, int i) +{ + if (!d) { if (lpszNewContent) free(lpszNewContent); return NULL; } + if (i>=d->nClear) return addClear_WOSD(lpszNewContent); + XMLClear *p=d->pClear+i; + if (lpszNewContent!=p->lpszValue) { free((void*)p->lpszValue); p->lpszValue=lpszNewContent; } + return p; +} + +XMLClear *XMLNode::updateClear_WOSD(XMLSTR lpszNewContent, XMLCSTR lpszOldValue) +{ + if (!d) { if (lpszNewContent) free(lpszNewContent); return NULL; } + int i=indexClear(lpszOldValue); + if (i>=0) return updateClear_WOSD(lpszNewContent,i); + return addClear_WOSD(lpszNewContent); +} + +XMLClear *XMLNode::updateClear_WOSD(XMLClear *newP,XMLClear *oldP) +{ + if (oldP) return updateClear_WOSD((XMLSTR)newP->lpszValue,(XMLSTR)oldP->lpszValue); + return NULL; +} + +int XMLNode::nChildNode(XMLCSTR name) const +{ + if (!d) return 0; + int i,j=0,n=d->nChild; + XMLNode *pc=d->pChild; + for (i=0; id->lpszName, name)==0) j++; + pc++; + } + return j; +} + +XMLNode XMLNode::getChildNode(XMLCSTR name, int *j) const +{ + if (!d) return emptyXMLNode; + int i=0,n=d->nChild; + if (j) i=*j; + XMLNode *pc=d->pChild+i; + for (; id->lpszName, name)) + { + if (j) *j=i+1; + return *pc; + } + pc++; + } + return emptyXMLNode; +} + +XMLNode XMLNode::getChildNode(XMLCSTR name, int j) const +{ + if (!d) return emptyXMLNode; + if (j>=0) + { + int i=0; + while (j-->0) getChildNode(name,&i); + return getChildNode(name,&i); + } + int i=d->nChild; + while (i--) if (!xstricmp(name,d->pChild[i].d->lpszName)) break; + if (i<0) return emptyXMLNode; + return getChildNode(i); +} + +XMLNode XMLNode::getChildNodeByPath(XMLCSTR _path, char createMissing, XMLCHAR sep) +{ + XMLSTR path=stringDup(_path); + XMLNode x=getChildNodeByPathNonConst(path,createMissing,sep); + if (path) free(path); + return x; +} + +XMLNode XMLNode::getChildNodeByPathNonConst(XMLSTR path, char createIfMissing, XMLCHAR sep) +{ + if ((!path)||(!(*path))) return *this; + XMLNode xn,xbase=*this; + XMLCHAR *tend1,sepString[2]; sepString[0]=sep; sepString[1]=0; + tend1=xstrstr(path,sepString); + while(tend1) + { + *tend1=0; + xn=xbase.getChildNode(path); + if (xn.isEmpty()) + { + if (createIfMissing) xn=xbase.addChild(path); + else { *tend1=sep; return XMLNode::emptyXMLNode; } + } + *tend1=sep; + xbase=xn; + path=tend1+1; + tend1=xstrstr(path,sepString); + } + xn=xbase.getChildNode(path); + if (xn.isEmpty()&&createIfMissing) xn=xbase.addChild(path); + return xn; +} + +XMLElementPosition XMLNode::positionOfText (int i) const { if (i>=d->nText ) i=d->nText-1; return findPosition(d,i,eNodeText ); } +XMLElementPosition XMLNode::positionOfClear (int i) const { if (i>=d->nClear) i=d->nClear-1; return findPosition(d,i,eNodeClear); } +XMLElementPosition XMLNode::positionOfChildNode(int i) const { if (i>=d->nChild) i=d->nChild-1; return findPosition(d,i,eNodeChild); } +XMLElementPosition XMLNode::positionOfText (XMLCSTR lpszValue) const { return positionOfText (indexText (lpszValue)); } +XMLElementPosition XMLNode::positionOfClear(XMLCSTR lpszValue) const { return positionOfClear(indexClear(lpszValue)); } +XMLElementPosition XMLNode::positionOfClear(XMLClear *a) const { if (a) return positionOfClear(a->lpszValue); return positionOfClear(); } +XMLElementPosition XMLNode::positionOfChildNode(XMLNode x) const +{ + if ((!d)||(!x.d)) return -1; + XMLNodeData *dd=x.d; + XMLNode *pc=d->pChild; + int i=d->nChild; + while (i--) if (pc[i].d==dd) return findPosition(d,i,eNodeChild); + return -1; +} +XMLElementPosition XMLNode::positionOfChildNode(XMLCSTR name, int count) const +{ + if (!name) return positionOfChildNode(count); + int j=0; + do { getChildNode(name,&j); if (j<0) return -1; } while (count--); + return findPosition(d,j-1,eNodeChild); +} + +XMLNode XMLNode::getChildNodeWithAttribute(XMLCSTR name,XMLCSTR attributeName,XMLCSTR attributeValue, int *k) const +{ + int i=0,j; + if (k) i=*k; + XMLNode x; + XMLCSTR t; + do + { + x=getChildNode(name,&i); + if (!x.isEmpty()) + { + if (attributeValue) + { + j=0; + do + { + t=x.getAttribute(attributeName,&j); + if (t&&(xstricmp(attributeValue,t)==0)) { if (k) *k=i; return x; } + } while (t); + } else + { + if (x.isAttributeSet(attributeName)) { if (k) *k=i; return x; } + } + } + } while (!x.isEmpty()); + return emptyXMLNode; +} + +// Find an attribute on an node. +XMLCSTR XMLNode::getAttribute(XMLCSTR lpszAttrib, int *j) const +{ + if (!d) return NULL; + int i=0,n=d->nAttribute; + if (j) i=*j; + XMLAttribute *pAttr=d->pAttribute+i; + for (; ilpszName, lpszAttrib)==0) + { + if (j) *j=i+1; + return pAttr->lpszValue; + } + pAttr++; + } + return NULL; +} + +char XMLNode::isAttributeSet(XMLCSTR lpszAttrib) const +{ + if (!d) return FALSE; + int i,n=d->nAttribute; + XMLAttribute *pAttr=d->pAttribute; + for (i=0; ilpszName, lpszAttrib)==0) + { + return TRUE; + } + pAttr++; + } + return FALSE; +} + +XMLCSTR XMLNode::getAttribute(XMLCSTR name, int j) const +{ + if (!d) return NULL; + int i=0; + while (j-->0) getAttribute(name,&i); + return getAttribute(name,&i); +} + +XMLNodeContents XMLNode::enumContents(int i) const +{ + XMLNodeContents c; + if (!d) { c.etype=eNodeNULL; return c; } + if (inAttribute) + { + c.etype=eNodeAttribute; + c.attrib=d->pAttribute[i]; + return c; + } + i-=d->nAttribute; + c.etype=(XMLElementType)(d->pOrder[i]&3); + i=(d->pOrder[i])>>2; + switch (c.etype) + { + case eNodeChild: c.child = d->pChild[i]; break; + case eNodeText: c.text = d->pText[i]; break; + case eNodeClear: c.clear = d->pClear[i]; break; + default: break; + } + return c; +} + +XMLCSTR XMLNode::getName() const { if (!d) return NULL; return d->lpszName; } +int XMLNode::nText() const { if (!d) return 0; return d->nText; } +int XMLNode::nChildNode() const { if (!d) return 0; return d->nChild; } +int XMLNode::nAttribute() const { if (!d) return 0; return d->nAttribute; } +int XMLNode::nClear() const { if (!d) return 0; return d->nClear; } +int XMLNode::nElement() const { if (!d) return 0; return d->nAttribute+d->nChild+d->nText+d->nClear; } +XMLClear XMLNode::getClear (int i) const { if ((!d)||(i>=d->nClear )) return emptyXMLClear; return d->pClear[i]; } +XMLAttribute XMLNode::getAttribute (int i) const { if ((!d)||(i>=d->nAttribute)) return emptyXMLAttribute; return d->pAttribute[i]; } +XMLCSTR XMLNode::getAttributeName (int i) const { if ((!d)||(i>=d->nAttribute)) return NULL; return d->pAttribute[i].lpszName; } +XMLCSTR XMLNode::getAttributeValue(int i) const { if ((!d)||(i>=d->nAttribute)) return NULL; return d->pAttribute[i].lpszValue; } +XMLCSTR XMLNode::getText (int i) const { if ((!d)||(i>=d->nText )) return NULL; return d->pText[i]; } +XMLNode XMLNode::getChildNode (int i) const { if ((!d)||(i>=d->nChild )) return emptyXMLNode; return d->pChild[i]; } +XMLNode XMLNode::getParentNode ( ) const { if ((!d)||(!d->pParent )) return emptyXMLNode; return XMLNode(d->pParent); } +char XMLNode::isDeclaration ( ) const { if (!d) return 0; return d->isDeclaration; } +char XMLNode::isEmpty ( ) const { return (d==NULL); } +XMLNode XMLNode::emptyNode ( ) { return XMLNode::emptyXMLNode; } + +XMLNode XMLNode::addChild(XMLCSTR lpszName, char isDeclaration, XMLElementPosition pos) + { return addChild_priv(0,stringDup(lpszName),isDeclaration,pos); } +XMLNode XMLNode::addChild_WOSD(XMLSTR lpszName, char isDeclaration, XMLElementPosition pos) + { return addChild_priv(0,lpszName,isDeclaration,pos); } +XMLAttribute *XMLNode::addAttribute(XMLCSTR lpszName, XMLCSTR lpszValue) + { return addAttribute_priv(0,stringDup(lpszName),stringDup(lpszValue)); } +XMLAttribute *XMLNode::addAttribute_WOSD(XMLSTR lpszName, XMLSTR lpszValuev) + { return addAttribute_priv(0,lpszName,lpszValuev); } +XMLCSTR XMLNode::addText(XMLCSTR lpszValue, XMLElementPosition pos) + { return addText_priv(0,stringDup(lpszValue),pos); } +XMLCSTR XMLNode::addText_WOSD(XMLSTR lpszValue, XMLElementPosition pos) + { return addText_priv(0,lpszValue,pos); } +XMLClear *XMLNode::addClear(XMLCSTR lpszValue, XMLCSTR lpszOpen, XMLCSTR lpszClose, XMLElementPosition pos) + { return addClear_priv(0,stringDup(lpszValue),lpszOpen,lpszClose,pos); } +XMLClear *XMLNode::addClear_WOSD(XMLSTR lpszValue, XMLCSTR lpszOpen, XMLCSTR lpszClose, XMLElementPosition pos) + { return addClear_priv(0,lpszValue,lpszOpen,lpszClose,pos); } +XMLCSTR XMLNode::updateName(XMLCSTR lpszName) + { return updateName_WOSD(stringDup(lpszName)); } +XMLAttribute *XMLNode::updateAttribute(XMLAttribute *newAttribute, XMLAttribute *oldAttribute) + { return updateAttribute_WOSD(stringDup(newAttribute->lpszValue),stringDup(newAttribute->lpszName),oldAttribute->lpszName); } +XMLAttribute *XMLNode::updateAttribute(XMLCSTR lpszNewValue, XMLCSTR lpszNewName,int i) + { return updateAttribute_WOSD(stringDup(lpszNewValue),stringDup(lpszNewName),i); } +XMLAttribute *XMLNode::updateAttribute(XMLCSTR lpszNewValue, XMLCSTR lpszNewName,XMLCSTR lpszOldName) + { return updateAttribute_WOSD(stringDup(lpszNewValue),stringDup(lpszNewName),lpszOldName); } +XMLCSTR XMLNode::updateText(XMLCSTR lpszNewValue, int i) + { return updateText_WOSD(stringDup(lpszNewValue),i); } +XMLCSTR XMLNode::updateText(XMLCSTR lpszNewValue, XMLCSTR lpszOldValue) + { return updateText_WOSD(stringDup(lpszNewValue),lpszOldValue); } +XMLClear *XMLNode::updateClear(XMLCSTR lpszNewContent, int i) + { return updateClear_WOSD(stringDup(lpszNewContent),i); } +XMLClear *XMLNode::updateClear(XMLCSTR lpszNewValue, XMLCSTR lpszOldValue) + { return updateClear_WOSD(stringDup(lpszNewValue),lpszOldValue); } +XMLClear *XMLNode::updateClear(XMLClear *newP,XMLClear *oldP) + { return updateClear_WOSD(stringDup(newP->lpszValue),oldP->lpszValue); } + +char XMLNode::setGlobalOptions(XMLCharEncoding _characterEncoding, char _guessWideCharChars, + char _dropWhiteSpace, char _removeCommentsInMiddleOfText) +{ + guessWideCharChars=_guessWideCharChars; dropWhiteSpace=_dropWhiteSpace; removeCommentsInMiddleOfText=_removeCommentsInMiddleOfText; +#ifdef _XMLWIDECHAR + if (_characterEncoding) characterEncoding=_characterEncoding; +#else + switch(_characterEncoding) + { + case char_encoding_UTF8: characterEncoding=_characterEncoding; XML_ByteTable=XML_utf8ByteTable; break; + case char_encoding_legacy: characterEncoding=_characterEncoding; XML_ByteTable=XML_legacyByteTable; break; + case char_encoding_ShiftJIS: characterEncoding=_characterEncoding; XML_ByteTable=XML_sjisByteTable; break; + case char_encoding_GB2312: characterEncoding=_characterEncoding; XML_ByteTable=XML_gb2312ByteTable; break; + case char_encoding_Big5: + case char_encoding_GBK: characterEncoding=_characterEncoding; XML_ByteTable=XML_gbk_big5_ByteTable; break; + default: return 1; + } +#endif + return 0; +} + +XMLNode::XMLCharEncoding XMLNode::guessCharEncoding(void *buf,int l, char useXMLEncodingAttribute) +{ +#ifdef _XMLWIDECHAR + return (XMLCharEncoding)0; +#else + if (l<25) return (XMLCharEncoding)0; + if (guessWideCharChars&&(myIsTextWideChar(buf,l))) return (XMLCharEncoding)0; + unsigned char *b=(unsigned char*)buf; + if ((b[0]==0xef)&&(b[1]==0xbb)&&(b[2]==0xbf)) return char_encoding_UTF8; + + // Match utf-8 model ? + XMLCharEncoding bestGuess=char_encoding_UTF8; + int i=0; + while (i>2 ]; + *(curr++)=base64EncodeTable[(inbuf[0]<<4)&0x3F]; + *(curr++)=base64Fillchar; + *(curr++)=base64Fillchar; + } else if (eLen==2) + { + j=(inbuf[0]<<8)|inbuf[1]; + *(curr++)=base64EncodeTable[ j>>10 ]; + *(curr++)=base64EncodeTable[(j>> 4)&0x3f]; + *(curr++)=base64EncodeTable[(j<< 2)&0x3f]; + *(curr++)=base64Fillchar; + } + *(curr++)=0; + return (XMLSTR)buf; +} + +unsigned int XMLParserBase64Tool::decodeSize(XMLCSTR data,XMLError *xe) +{ + if (!data) return 0; + if (xe) *xe=eXMLErrorNone; + int size=0; + unsigned char c; + //skip any extra characters (e.g. newlines or spaces) + while (*data) + { +#ifdef _XMLWIDECHAR + if (*data>255) { if (xe) *xe=eXMLErrorBase64DecodeIllegalCharacter; return 0; } +#endif + c=base64DecodeTable[(unsigned char)(*data)]; + if (c<97) size++; + else if (c==98) { if (xe) *xe=eXMLErrorBase64DecodeIllegalCharacter; return 0; } + data++; + } + if (xe&&(size%4!=0)) *xe=eXMLErrorBase64DataSizeIsNotMultipleOf4; + if (size==0) return 0; + do { data--; size--; } while(*data==base64Fillchar); size++; + return (unsigned int)((size*3)/4); +} + +unsigned char XMLParserBase64Tool::decode(XMLCSTR data, unsigned char *buf, int len, XMLError *xe) +{ + if (!data) return 0; + if (xe) *xe=eXMLErrorNone; + int i=0,p=0; + unsigned char d,c; + for(;;) + { + +#ifdef _XMLWIDECHAR +#define BASE64DECODE_READ_NEXT_CHAR(c) \ + do { \ + if (data[i]>255){ c=98; break; } \ + c=base64DecodeTable[(unsigned char)data[i++]]; \ + }while (c==97); \ + if(c==98){ if(xe)*xe=eXMLErrorBase64DecodeIllegalCharacter; return 0; } +#else +#define BASE64DECODE_READ_NEXT_CHAR(c) \ + do { c=base64DecodeTable[(unsigned char)data[i++]]; }while (c==97); \ + if(c==98){ if(xe)*xe=eXMLErrorBase64DecodeIllegalCharacter; return 0; } +#endif + + BASE64DECODE_READ_NEXT_CHAR(c) + if (c==99) { return 2; } + if (c==96) + { + if (p==(int)len) return 2; + if (xe) *xe=eXMLErrorBase64DecodeTruncatedData; + return 1; + } + + BASE64DECODE_READ_NEXT_CHAR(d) + if ((d==99)||(d==96)) { if (xe) *xe=eXMLErrorBase64DecodeTruncatedData; return 1; } + if (p==(int)len) { if (xe) *xe=eXMLErrorBase64DecodeBufferTooSmall; return 0; } + buf[p++]=(unsigned char)((c<<2)|((d>>4)&0x3)); + + BASE64DECODE_READ_NEXT_CHAR(c) + if (c==99) { if (xe) *xe=eXMLErrorBase64DecodeTruncatedData; return 1; } + if (p==(int)len) + { + if (c==96) return 2; + if (xe) *xe=eXMLErrorBase64DecodeBufferTooSmall; + return 0; + } + if (c==96) { if (xe) *xe=eXMLErrorBase64DecodeTruncatedData; return 1; } + buf[p++]=(unsigned char)(((d<<4)&0xf0)|((c>>2)&0xf)); + + BASE64DECODE_READ_NEXT_CHAR(d) + if (d==99 ) { if (xe) *xe=eXMLErrorBase64DecodeTruncatedData; return 1; } + if (p==(int)len) + { + if (d==96) return 2; + if (xe) *xe=eXMLErrorBase64DecodeBufferTooSmall; + return 0; + } + if (d==96) { if (xe) *xe=eXMLErrorBase64DecodeTruncatedData; return 1; } + buf[p++]=(unsigned char)(((c<<6)&0xc0)|d); + } +} +#undef BASE64DECODE_READ_NEXT_CHAR + +void XMLParserBase64Tool::alloc(int newsize) +{ + if ((!buf)&&(newsize)) { buf=malloc(newsize); buflen=newsize; return; } + if (newsize>buflen) { buf=realloc(buf,newsize); buflen=newsize; } +} + +unsigned char *XMLParserBase64Tool::decode(XMLCSTR data, int *outlen, XMLError *xe) +{ + if (xe) *xe=eXMLErrorNone; + if (!data) { *outlen=0; return (unsigned char*)""; } + unsigned int len=decodeSize(data,xe); + if (outlen) *outlen=len; + if (!len) return NULL; + alloc(len+1); + if(!decode(data,(unsigned char*)buf,len,xe)){ return NULL; } + return (unsigned char*)buf; +} + diff --git a/EQ2/source/common/xmlParser.h b/EQ2/source/common/xmlParser.h new file mode 100644 index 000000000..1187165e2 --- /dev/null +++ b/EQ2/source/common/xmlParser.h @@ -0,0 +1,732 @@ +/****************************************************************************/ +/*! \mainpage XMLParser library + * \section intro_sec Introduction + * + * This is a basic XML parser written in ANSI C++ for portability. + * It works by using recursion and a node tree for breaking + * down the elements of an XML document. + * + * @version V2.44 + * @author Frank Vanden Berghen + * + * Copyright (c) 2002, Frank Vanden Berghen - All rights reserved.
+ * Commercialized by Business-Insight
+ * See the file AFPL-license.txt about the licensing terms + * + * \section tutorial First Tutorial + * You can follow a simple Tutorial to know the basics... + * + * \section usage General usage: How to include the XMLParser library inside your project. + * + * The library is composed of two files: xmlParser.cpp and + * xmlParser.h. These are the ONLY 2 files that you need when + * using the library inside your own projects. + * + * All the functions of the library are documented inside the comments of the file + * xmlParser.h. These comments can be transformed in + * full-fledged HTML documentation using the DOXYGEN software: simply type: "doxygen doxy.cfg" + * + * By default, the XMLParser library uses (char*) for string representation.To use the (wchar_t*) + * version of the library, you need to define the "_UNICODE" preprocessor definition variable + * (this is usually done inside your project definition file) (This is done automatically for you + * when using Visual Studio). + * + * \section example Advanced Tutorial and Many Examples of usage. + * + * Some very small introductory examples are described inside the Tutorial file + * xmlParser.html + * + * Some additional small examples are also inside the file xmlTest.cpp + * (for the "char*" version of the library) and inside the file + * xmlTestUnicode.cpp (for the "wchar_t*" + * version of the library). If you have a question, please review these additionnal examples + * before sending an e-mail to the author. + * + * To build the examples: + * - linux/unix: type "make" + * - solaris: type "make -f makefile.solaris" + * - windows: Visual Studio: double-click on xmlParser.dsw + * (under Visual Studio .NET, the .dsp and .dsw files will be automatically converted to .vcproj and .sln files) + * + * In order to build the examples you need some additional files: + * - linux/unix: makefile + * - solaris: makefile.solaris + * - windows: Visual Studio: *.dsp, xmlParser.dsw and also xmlParser.lib and xmlParser.dll + * + * \section debugging Debugging with the XMLParser library + * + * \subsection debugwin Debugging under WINDOWS + * + * Inside Visual C++, the "debug versions" of the memory allocation functions are + * very slow: Do not forget to compile in "release mode" to get maximum speed. + * When I had to debug a software that was using the XMLParser Library, it was usually + * a nightmare because the library was sooOOOoooo slow in debug mode (because of the + * slow memory allocations in Debug mode). To solve this + * problem, during all the debugging session, I am now using a very fast DLL version of the + * XMLParser Library (the DLL is compiled in release mode). Using the DLL version of + * the XMLParser Library allows me to have lightening XML parsing speed even in debug! + * Other than that, the DLL version is useless: In the release version of my tool, + * I always use the normal, ".cpp"-based, XMLParser Library (I simply include the + * xmlParser.cpp and + * xmlParser.h files into the project). + * + * The file XMLNodeAutoexp.txt contains some + * "tweaks" that improve substancially the display of the content of the XMLNode objects + * inside the Visual Studio Debugger. Believe me, once you have seen inside the debugger + * the "smooth" display of the XMLNode objects, you cannot live without it anymore! + * + * \subsection debuglinux Debugging under LINUX/UNIX + * + * The speed of the debug version of the XMLParser library is tolerable so no extra + * work.has been done. + * + ****************************************************************************/ + +#ifndef __INCLUDE_XML_NODE__ +#define __INCLUDE_XML_NODE__ + +#include + +#if defined(UNICODE) || defined(_UNICODE) +// If you comment the next "define" line then the library will never "switch to" _UNICODE (wchar_t*) mode (16/32 bits per characters). +// This is useful when you get error messages like: +// 'XMLNode::openFileHelper' : cannot convert parameter 2 from 'const char [5]' to 'const wchar_t *' +// The _XMLWIDECHAR preprocessor variable force the XMLParser library into either utf16/32-mode (the proprocessor variable +// must be defined) or utf8-mode(the pre-processor variable must be undefined). +#define _XMLWIDECHAR +#endif + +#if defined(WIN32) || defined(UNDER_CE) || defined(_WIN32) || defined(WIN64) || defined(__BORLANDC__) +// comment the next line if you are under windows and the compiler is not Microsoft Visual Studio (6.0 or .NET) or Borland +#define _XMLWINDOWS +#endif + +#ifdef XMLDLLENTRY +#undef XMLDLLENTRY +#endif +#ifdef _USE_XMLPARSER_DLL +#ifdef _DLL_EXPORTS_ +#define XMLDLLENTRY __declspec(dllexport) +#else +#define XMLDLLENTRY __declspec(dllimport) +#endif +#else +#define XMLDLLENTRY +#endif + +// uncomment the next line if you want no support for wchar_t* (no need for the or libraries anymore to compile) +//#define XML_NO_WIDE_CHAR + +#ifdef XML_NO_WIDE_CHAR +#undef _XMLWINDOWS +#undef _XMLWIDECHAR +#endif + +#ifdef _XMLWINDOWS +#include +#else +#define XMLDLLENTRY +#ifndef XML_NO_WIDE_CHAR +#include // to have 'wcsrtombs' for ANSI version + // to have 'mbsrtowcs' for WIDECHAR version +#endif +#endif + +// Some common types for char set portable code +#ifdef _XMLWIDECHAR + #define _CXML(c) L ## c + #define XMLCSTR const wchar_t * + #define XMLSTR wchar_t * + #define XMLCHAR wchar_t +#else + #define _CXML(c) c + #define XMLCSTR const char * + #define XMLSTR char * + #define XMLCHAR char +#endif +#ifndef FALSE + #define FALSE 0 +#endif /* FALSE */ +#ifndef TRUE + #define TRUE 1 +#endif /* TRUE */ + + +/// Enumeration for XML parse errors. +typedef enum XMLError +{ + eXMLErrorNone = 0, + eXMLErrorMissingEndTag, + eXMLErrorNoXMLTagFound, + eXMLErrorEmpty, + eXMLErrorMissingTagName, + eXMLErrorMissingEndTagName, + eXMLErrorUnmatchedEndTag, + eXMLErrorUnmatchedEndClearTag, + eXMLErrorUnexpectedToken, + eXMLErrorNoElements, + eXMLErrorFileNotFound, + eXMLErrorFirstTagNotFound, + eXMLErrorUnknownCharacterEntity, + eXMLErrorCharacterCodeAbove255, + eXMLErrorCharConversionError, + eXMLErrorCannotOpenWriteFile, + eXMLErrorCannotWriteFile, + + eXMLErrorBase64DataSizeIsNotMultipleOf4, + eXMLErrorBase64DecodeIllegalCharacter, + eXMLErrorBase64DecodeTruncatedData, + eXMLErrorBase64DecodeBufferTooSmall +} XMLError; + + +/// Enumeration used to manage type of data. Use in conjunction with structure XMLNodeContents +typedef enum XMLElementType +{ + eNodeChild=0, + eNodeAttribute=1, + eNodeText=2, + eNodeClear=3, + eNodeNULL=4 +} XMLElementType; + +/// Structure used to obtain error details if the parse fails. +typedef struct XMLResults +{ + enum XMLError error; + int nLine,nColumn; +} XMLResults; + +/// Structure for XML clear (unformatted) node (usually comments) +typedef struct XMLClear { + XMLCSTR lpszValue; XMLCSTR lpszOpenTag; XMLCSTR lpszCloseTag; +} XMLClear; + +/// Structure for XML attribute. +typedef struct XMLAttribute { + XMLCSTR lpszName; XMLCSTR lpszValue; +} XMLAttribute; + +/// XMLElementPosition are not interchangeable with simple indexes +typedef int XMLElementPosition; + +struct XMLNodeContents; + +/** @defgroup XMLParserGeneral The XML parser */ + +/// Main Class representing a XML node +/** + * All operations are performed using this class. + * \note The constructors of the XMLNode class are protected, so use instead one of these four methods to get your first instance of XMLNode: + *
    + *
  • XMLNode::parseString
  • + *
  • XMLNode::parseFile
  • + *
  • XMLNode::openFileHelper
  • + *
  • XMLNode::createXMLTopNode (or XMLNode::createXMLTopNode_WOSD)
  • + *
*/ +typedef struct XMLDLLENTRY XMLNode +{ + private: + + struct XMLNodeDataTag; + + /// Constructors are protected, so use instead one of: XMLNode::parseString, XMLNode::parseFile, XMLNode::openFileHelper, XMLNode::createXMLTopNode + XMLNode(struct XMLNodeDataTag *pParent, XMLSTR lpszName, char isDeclaration); + /// Constructors are protected, so use instead one of: XMLNode::parseString, XMLNode::parseFile, XMLNode::openFileHelper, XMLNode::createXMLTopNode + XMLNode(struct XMLNodeDataTag *p); + + public: + static XMLCSTR getVersion();///< Return the XMLParser library version number + + /** @defgroup conversions Parsing XML files/strings to an XMLNode structure and Rendering XMLNode's to files/string. + * @ingroup XMLParserGeneral + * @{ */ + + /// Parse an XML string and return the root of a XMLNode tree representing the string. + static XMLNode parseString (XMLCSTR lpXMLString, XMLCSTR tag=NULL, XMLResults *pResults=NULL); + /**< The "parseString" function parse an XML string and return the root of a XMLNode tree. The "opposite" of this function is + * the function "createXMLString" that re-creates an XML string from an XMLNode tree. If the XML document is corrupted, the + * "parseString" method will initialize the "pResults" variable with some information that can be used to trace the error. + * If you still want to parse the file, you can use the APPROXIMATE_PARSING option as explained inside the note at the + * beginning of the "xmlParser.cpp" file. + * + * @param lpXMLString the XML string to parse + * @param tag the name of the first tag inside the XML file. If the tag parameter is omitted, this function returns a node that represents the head of the xml document including the declaration term (). + * @param pResults a pointer to a XMLResults variable that will contain some information that can be used to trace the XML parsing error. You can have a user-friendly explanation of the parsing error with the "getError" function. + */ + + /// Parse an XML file and return the root of a XMLNode tree representing the file. + static XMLNode parseFile (XMLCSTR filename, XMLCSTR tag=NULL, XMLResults *pResults=NULL); + /**< The "parseFile" function parse an XML file and return the root of a XMLNode tree. The "opposite" of this function is + * the function "writeToFile" that re-creates an XML file from an XMLNode tree. If the XML document is corrupted, the + * "parseFile" method will initialize the "pResults" variable with some information that can be used to trace the error. + * If you still want to parse the file, you can use the APPROXIMATE_PARSING option as explained inside the note at the + * beginning of the "xmlParser.cpp" file. + * + * @param filename the path to the XML file to parse + * @param tag the name of the first tag inside the XML file. If the tag parameter is omitted, this function returns a node that represents the head of the xml document including the declaration term (). + * @param pResults a pointer to a XMLResults variable that will contain some information that can be used to trace the XML parsing error. You can have a user-friendly explanation of the parsing error with the "getError" function. + */ + + /// Parse an XML file and return the root of a XMLNode tree representing the file. A very crude error checking is made. An attempt to guess the Char Encoding used in the file is made. + static XMLNode openFileHelper(XMLCSTR filename, XMLCSTR tag=NULL); + /**< The "openFileHelper" function reports to the screen all the warnings and errors that occurred during parsing of the XML file. + * This function also tries to guess char Encoding (UTF-8, ASCII or SHIT-JIS) based on the first 200 bytes of the file. Since each + * application has its own way to report and deal with errors, you should rather use the "parseFile" function to parse XML files + * and program yourself thereafter an "error reporting" tailored for your needs (instead of using the very crude "error reporting" + * mechanism included inside the "openFileHelper" function). + * + * If the XML document is corrupted, the "openFileHelper" method will: + * - display an error message on the console (or inside a messageBox for windows). + * - stop execution (exit). + * + * I strongly suggest that you write your own "openFileHelper" method tailored to your needs. If you still want to parse + * the file, you can use the APPROXIMATE_PARSING option as explained inside the note at the beginning of the "xmlParser.cpp" file. + * + * @param filename the path of the XML file to parse. + * @param tag the name of the first tag inside the XML file. If the tag parameter is omitted, this function returns a node that represents the head of the xml document including the declaration term (). + */ + + static XMLCSTR getError(XMLError error); ///< this gives you a user-friendly explanation of the parsing error + + /// Create an XML string starting from the current XMLNode. + XMLSTR createXMLString(int nFormat=1, int *pnSize=NULL) const; + /**< The returned string should be free'd using the "freeXMLString" function. + * + * If nFormat==0, no formatting is required otherwise this returns an user friendly XML string from a given element + * with appropriate white spaces and carriage returns. if pnSize is given it returns the size in character of the string. */ + + /// Save the content of an xmlNode inside a file + XMLError writeToFile(XMLCSTR filename, + const char *encoding=NULL, + char nFormat=1) const; + /**< If nFormat==0, no formatting is required otherwise this returns an user friendly XML string from a given element with appropriate white spaces and carriage returns. + * If the global parameter "characterEncoding==encoding_UTF8", then the "encoding" parameter is ignored and always set to "utf-8". + * If the global parameter "characterEncoding==encoding_ShiftJIS", then the "encoding" parameter is ignored and always set to "SHIFT-JIS". + * If "_XMLWIDECHAR=1", then the "encoding" parameter is ignored and always set to "utf-16". + * If no "encoding" parameter is given the "ISO-8859-1" encoding is used. */ + /** @} */ + + /** @defgroup navigate Navigate the XMLNode structure + * @ingroup XMLParserGeneral + * @{ */ + XMLCSTR getName() const; ///< name of the node + XMLCSTR getText(int i=0) const; ///< return ith text field + int nText() const; ///< nbr of text field + XMLNode getParentNode() const; ///< return the parent node + XMLNode getChildNode(int i=0) const; ///< return ith child node + XMLNode getChildNode(XMLCSTR name, int i) const; ///< return ith child node with specific name (return an empty node if failing). If i==-1, this returns the last XMLNode with the given name. + XMLNode getChildNode(XMLCSTR name, int *i=NULL) const; ///< return next child node with specific name (return an empty node if failing) + XMLNode getChildNodeWithAttribute(XMLCSTR tagName, + XMLCSTR attributeName, + XMLCSTR attributeValue=NULL, + int *i=NULL) const; ///< return child node with specific name/attribute (return an empty node if failing) + XMLNode getChildNodeByPath(XMLCSTR path, char createNodeIfMissing=0, XMLCHAR sep='/'); + ///< return the first child node with specific path + XMLNode getChildNodeByPathNonConst(XMLSTR path, char createNodeIfMissing=0, XMLCHAR sep='/'); + ///< return the first child node with specific path. + + int nChildNode(XMLCSTR name) const; ///< return the number of child node with specific name + int nChildNode() const; ///< nbr of child node + XMLAttribute getAttribute(int i=0) const; ///< return ith attribute + XMLCSTR getAttributeName(int i=0) const; ///< return ith attribute name + XMLCSTR getAttributeValue(int i=0) const; ///< return ith attribute value + char isAttributeSet(XMLCSTR name) const; ///< test if an attribute with a specific name is given + XMLCSTR getAttribute(XMLCSTR name, int i) const; ///< return ith attribute content with specific name (return a NULL if failing) + XMLCSTR getAttribute(XMLCSTR name, int *i=NULL) const; ///< return next attribute content with specific name (return a NULL if failing) + int nAttribute() const; ///< nbr of attribute + XMLClear getClear(int i=0) const; ///< return ith clear field (comments) + int nClear() const; ///< nbr of clear field + XMLNodeContents enumContents(XMLElementPosition i) const; ///< enumerate all the different contents (attribute,child,text, clear) of the current XMLNode. The order is reflecting the order of the original file/string. NOTE: 0 <= i < nElement(); + int nElement() const; ///< nbr of different contents for current node + char isEmpty() const; ///< is this node Empty? + char isDeclaration() const; ///< is this node a declaration + XMLNode deepCopy() const; ///< deep copy (duplicate/clone) a XMLNode + static XMLNode emptyNode(); ///< return XMLNode::emptyXMLNode; + /** @} */ + + ~XMLNode(); + XMLNode(const XMLNode &A); ///< to allow shallow/fast copy: + XMLNode& operator=( const XMLNode& A ); ///< to allow shallow/fast copy: + + XMLNode(): d(NULL){}; + static XMLNode emptyXMLNode; + static XMLClear emptyXMLClear; + static XMLAttribute emptyXMLAttribute; + + /** @defgroup xmlModify Create or Update the XMLNode structure + * @ingroup XMLParserGeneral + * The functions in this group allows you to create from scratch (or update) a XMLNode structure. Start by creating your top + * node with the "createXMLTopNode" function and then add new nodes with the "addChild" function. The parameter 'pos' gives + * the position where the childNode, the text or the XMLClearTag will be inserted. The default value (pos=-1) inserts at the + * end. The value (pos=0) insert at the beginning (Insertion at the beginning is slower than at the end).
+ * + * REMARK: 0 <= pos < nChild()+nText()+nClear()
+ */ + + /** @defgroup creation Creating from scratch a XMLNode structure + * @ingroup xmlModify + * @{ */ + static XMLNode createXMLTopNode(XMLCSTR lpszName, char isDeclaration=FALSE); ///< Create the top node of an XMLNode structure + XMLNode addChild(XMLCSTR lpszName, char isDeclaration=FALSE, XMLElementPosition pos=-1); ///< Add a new child node + XMLNode addChild(XMLNode nodeToAdd, XMLElementPosition pos=-1); ///< If the "nodeToAdd" has some parents, it will be detached from it's parents before being attached to the current XMLNode + XMLAttribute *addAttribute(XMLCSTR lpszName, XMLCSTR lpszValuev); ///< Add a new attribute + XMLCSTR addText(XMLCSTR lpszValue, XMLElementPosition pos=-1); ///< Add a new text content + XMLClear *addClear(XMLCSTR lpszValue, XMLCSTR lpszOpen=NULL, XMLCSTR lpszClose=NULL, XMLElementPosition pos=-1); + /**< Add a new clear tag + * @param lpszOpen default value "" + */ + /** @} */ + + /** @defgroup xmlUpdate Updating Nodes + * @ingroup xmlModify + * Some update functions: + * @{ + */ + XMLCSTR updateName(XMLCSTR lpszName); ///< change node's name + XMLAttribute *updateAttribute(XMLAttribute *newAttribute, XMLAttribute *oldAttribute); ///< if the attribute to update is missing, a new one will be added + XMLAttribute *updateAttribute(XMLCSTR lpszNewValue, XMLCSTR lpszNewName=NULL,int i=0); ///< if the attribute to update is missing, a new one will be added + XMLAttribute *updateAttribute(XMLCSTR lpszNewValue, XMLCSTR lpszNewName,XMLCSTR lpszOldName);///< set lpszNewName=NULL if you don't want to change the name of the attribute if the attribute to update is missing, a new one will be added + XMLCSTR updateText(XMLCSTR lpszNewValue, int i=0); ///< if the text to update is missing, a new one will be added + XMLCSTR updateText(XMLCSTR lpszNewValue, XMLCSTR lpszOldValue); ///< if the text to update is missing, a new one will be added + XMLClear *updateClear(XMLCSTR lpszNewContent, int i=0); ///< if the clearTag to update is missing, a new one will be added + XMLClear *updateClear(XMLClear *newP,XMLClear *oldP); ///< if the clearTag to update is missing, a new one will be added + XMLClear *updateClear(XMLCSTR lpszNewValue, XMLCSTR lpszOldValue); ///< if the clearTag to update is missing, a new one will be added + /** @} */ + + /** @defgroup xmlDelete Deleting Nodes or Attributes + * @ingroup xmlModify + * Some deletion functions: + * @{ + */ + /// The "deleteNodeContent" function forces the deletion of the content of this XMLNode and the subtree. + void deleteNodeContent(); + /**< \note The XMLNode instances that are referring to the part of the subtree that has been deleted CANNOT be used anymore!!. Unexpected results will occur if you continue using them. */ + void deleteAttribute(int i=0); ///< Delete the ith attribute of the current XMLNode + void deleteAttribute(XMLCSTR lpszName); ///< Delete the attribute with the given name (the "strcmp" function is used to find the right attribute) + void deleteAttribute(XMLAttribute *anAttribute); ///< Delete the attribute with the name "anAttribute->lpszName" (the "strcmp" function is used to find the right attribute) + void deleteText(int i=0); ///< Delete the Ith text content of the current XMLNode + void deleteText(XMLCSTR lpszValue); ///< Delete the text content "lpszValue" inside the current XMLNode (direct "pointer-to-pointer" comparison is used to find the right text) + void deleteClear(int i=0); ///< Delete the Ith clear tag inside the current XMLNode + void deleteClear(XMLCSTR lpszValue); ///< Delete the clear tag "lpszValue" inside the current XMLNode (direct "pointer-to-pointer" comparison is used to find the clear tag) + void deleteClear(XMLClear *p); ///< Delete the clear tag "p" inside the current XMLNode (direct "pointer-to-pointer" comparison on the lpszName of the clear tag is used to find the clear tag) + /** @} */ + + /** @defgroup xmlWOSD ???_WOSD functions. + * @ingroup xmlModify + * The strings given as parameters for the "add" and "update" methods that have a name with + * the postfix "_WOSD" (that means "WithOut String Duplication")(for example "addText_WOSD") + * will be free'd by the XMLNode class. For example, it means that this is incorrect: + * \code + * xNode.addText_WOSD("foo"); + * xNode.updateAttribute_WOSD("#newcolor" ,NULL,"color"); + * \endcode + * In opposition, this is correct: + * \code + * xNode.addText("foo"); + * xNode.addText_WOSD(stringDup("foo")); + * xNode.updateAttribute("#newcolor" ,NULL,"color"); + * xNode.updateAttribute_WOSD(stringDup("#newcolor"),NULL,"color"); + * \endcode + * Typically, you will never do: + * \code + * char *b=(char*)malloc(...); + * xNode.addText(b); + * free(b); + * \endcode + * ... but rather: + * \code + * char *b=(char*)malloc(...); + * xNode.addText_WOSD(b); + * \endcode + * ('free(b)' is performed by the XMLNode class) + * @{ */ + static XMLNode createXMLTopNode_WOSD(XMLSTR lpszName, char isDeclaration=FALSE); ///< Create the top node of an XMLNode structure + XMLNode addChild_WOSD(XMLSTR lpszName, char isDeclaration=FALSE, XMLElementPosition pos=-1); ///< Add a new child node + XMLAttribute *addAttribute_WOSD(XMLSTR lpszName, XMLSTR lpszValue); ///< Add a new attribute + XMLCSTR addText_WOSD(XMLSTR lpszValue, XMLElementPosition pos=-1); ///< Add a new text content + XMLClear *addClear_WOSD(XMLSTR lpszValue, XMLCSTR lpszOpen=NULL, XMLCSTR lpszClose=NULL, XMLElementPosition pos=-1); ///< Add a new clear Tag + + XMLCSTR updateName_WOSD(XMLSTR lpszName); ///< change node's name + XMLAttribute *updateAttribute_WOSD(XMLAttribute *newAttribute, XMLAttribute *oldAttribute); ///< if the attribute to update is missing, a new one will be added + XMLAttribute *updateAttribute_WOSD(XMLSTR lpszNewValue, XMLSTR lpszNewName=NULL,int i=0); ///< if the attribute to update is missing, a new one will be added + XMLAttribute *updateAttribute_WOSD(XMLSTR lpszNewValue, XMLSTR lpszNewName,XMLCSTR lpszOldName); ///< set lpszNewName=NULL if you don't want to change the name of the attribute if the attribute to update is missing, a new one will be added + XMLCSTR updateText_WOSD(XMLSTR lpszNewValue, int i=0); ///< if the text to update is missing, a new one will be added + XMLCSTR updateText_WOSD(XMLSTR lpszNewValue, XMLCSTR lpszOldValue); ///< if the text to update is missing, a new one will be added + XMLClear *updateClear_WOSD(XMLSTR lpszNewContent, int i=0); ///< if the clearTag to update is missing, a new one will be added + XMLClear *updateClear_WOSD(XMLClear *newP,XMLClear *oldP); ///< if the clearTag to update is missing, a new one will be added + XMLClear *updateClear_WOSD(XMLSTR lpszNewValue, XMLCSTR lpszOldValue); ///< if the clearTag to update is missing, a new one will be added + /** @} */ + + /** @defgroup xmlPosition Position helper functions (use in conjunction with the update&add functions + * @ingroup xmlModify + * These are some useful functions when you want to insert a childNode, a text or a XMLClearTag in the + * middle (at a specified position) of a XMLNode tree already constructed. The value returned by these + * methods is to be used as last parameter (parameter 'pos') of addChild, addText or addClear. + * @{ */ + XMLElementPosition positionOfText(int i=0) const; + XMLElementPosition positionOfText(XMLCSTR lpszValue) const; + XMLElementPosition positionOfClear(int i=0) const; + XMLElementPosition positionOfClear(XMLCSTR lpszValue) const; + XMLElementPosition positionOfClear(XMLClear *a) const; + XMLElementPosition positionOfChildNode(int i=0) const; + XMLElementPosition positionOfChildNode(XMLNode x) const; + XMLElementPosition positionOfChildNode(XMLCSTR name, int i=0) const; ///< return the position of the ith childNode with the specified name if (name==NULL) return the position of the ith childNode + /** @} */ + + /// Enumeration for XML character encoding. + typedef enum XMLCharEncoding + { + char_encoding_error=0, + char_encoding_UTF8=1, + char_encoding_legacy=2, + char_encoding_ShiftJIS=3, + char_encoding_GB2312=4, + char_encoding_Big5=5, + char_encoding_GBK=6 // this is actually the same as Big5 + } XMLCharEncoding; + + /** \addtogroup conversions + * @{ */ + + /// Sets the global options for the conversions + static char setGlobalOptions(XMLCharEncoding characterEncoding=XMLNode::char_encoding_UTF8, char guessWideCharChars=1, + char dropWhiteSpace=1, char removeCommentsInMiddleOfText=1); + /**< The "setGlobalOptions" function allows you to change four global parameters that affect string & file + * parsing. First of all, you most-probably will never have to change these 3 global parameters. + * + * @param guessWideCharChars If "guessWideCharChars"=1 and if this library is compiled in WideChar mode, then the + * XMLNode::parseFile and XMLNode::openFileHelper functions will test if the file contains ASCII + * characters. If this is the case, then the file will be loaded and converted in memory to + * WideChar before being parsed. If 0, no conversion will be performed. + * + * @param guessWideCharChars If "guessWideCharChars"=1 and if this library is compiled in ASCII/UTF8/char* mode, then the + * XMLNode::parseFile and XMLNode::openFileHelper functions will test if the file contains WideChar + * characters. If this is the case, then the file will be loaded and converted in memory to + * ASCII/UTF8/char* before being parsed. If 0, no conversion will be performed. + * + * @param characterEncoding This parameter is only meaningful when compiling in char* mode (multibyte character mode). + * In wchar_t* (wide char mode), this parameter is ignored. This parameter should be one of the + * three currently recognized encodings: XMLNode::encoding_UTF8, XMLNode::encoding_ascii, + * XMLNode::encoding_ShiftJIS. + * + * @param dropWhiteSpace In most situations, text fields containing only white spaces (and carriage returns) + * are useless. Even more, these "empty" text fields are annoying because they increase the + * complexity of the user's code for parsing. So, 99% of the time, it's better to drop + * the "empty" text fields. However The XML specification indicates that no white spaces + * should be lost when parsing the file. So to be perfectly XML-compliant, you should set + * dropWhiteSpace=0. A note of caution: if you set "dropWhiteSpace=0", the parser will be + * slower and your code will be more complex. + * + * @param removeCommentsInMiddleOfText To explain this parameter, let's consider this code: + * \code + * XMLNode x=XMLNode::parseString("foobarchu","a"); + * \endcode + * If removeCommentsInMiddleOfText=0, then we will have: + * \code + * x.getText(0) -> "foo" + * x.getText(1) -> "bar" + * x.getText(2) -> "chu" + * x.getClear(0) --> "" + * x.getClear(1) --> "" + * \endcode + * If removeCommentsInMiddleOfText=1, then we will have: + * \code + * x.getText(0) -> "foobar" + * x.getText(1) -> "chu" + * x.getClear(0) --> "" + * \endcode + * + * \return "0" when there are no errors. If you try to set an unrecognized encoding then the return value will be "1" to signal an error. + * + * \note Sometime, it's useful to set "guessWideCharChars=0" to disable any conversion + * because the test to detect the file-type (ASCII/UTF8/char* or WideChar) may fail (rarely). */ + + /// Guess the character encoding of the string (ascii, utf8 or shift-JIS) + static XMLCharEncoding guessCharEncoding(void *buffer, int bufLen, char useXMLEncodingAttribute=1); + /**< The "guessCharEncoding" function try to guess the character encoding. You most-probably will never + * have to use this function. It then returns the appropriate value of the global parameter + * "characterEncoding" described in the XMLNode::setGlobalOptions. The guess is based on the content of a buffer of length + * "bufLen" bytes that contains the first bytes (minimum 25 bytes; 200 bytes is a good value) of the + * file to be parsed. The XMLNode::openFileHelper function is using this function to automatically compute + * the value of the "characterEncoding" global parameter. There are several heuristics used to do the + * guess. One of the heuristic is based on the "encoding" attribute. The original XML specifications + * forbids to use this attribute to do the guess but you can still use it if you set + * "useXMLEncodingAttribute" to 1 (this is the default behavior and the behavior of most parsers). + * If an inconsistency in the encoding is detected, then the return value is "0". */ + /** @} */ + + private: + // these are functions and structures used internally by the XMLNode class (don't bother about them): + + typedef struct XMLNodeDataTag // to allow shallow copy and "intelligent/smart" pointers (automatic delete): + { + XMLCSTR lpszName; // Element name (=NULL if root) + int nChild, // Number of child nodes + nText, // Number of text fields + nClear, // Number of Clear fields (comments) + nAttribute; // Number of attributes + char isDeclaration; // Whether node is an XML declaration - '' + struct XMLNodeDataTag *pParent; // Pointer to parent element (=NULL if root) + XMLNode *pChild; // Array of child nodes + XMLCSTR *pText; // Array of text fields + XMLClear *pClear; // Array of clear fields + XMLAttribute *pAttribute; // Array of attributes + int *pOrder; // order of the child_nodes,text_fields,clear_fields + int ref_count; // for garbage collection (smart pointers) + } XMLNodeData; + XMLNodeData *d; + + char parseClearTag(void *px, void *pa); + char maybeAddTxT(void *pa, XMLCSTR tokenPStr); + int ParseXMLElement(void *pXML); + void *addToOrder(int memInc, int *_pos, int nc, void *p, int size, XMLElementType xtype); + int indexText(XMLCSTR lpszValue) const; + int indexClear(XMLCSTR lpszValue) const; + XMLNode addChild_priv(int,XMLSTR,char,int); + XMLAttribute *addAttribute_priv(int,XMLSTR,XMLSTR); + XMLCSTR addText_priv(int,XMLSTR,int); + XMLClear *addClear_priv(int,XMLSTR,XMLCSTR,XMLCSTR,int); + void emptyTheNode(char force); + static inline XMLElementPosition findPosition(XMLNodeData *d, int index, XMLElementType xtype); + static int CreateXMLStringR(XMLNodeData *pEntry, XMLSTR lpszMarker, int nFormat); + static int removeOrderElement(XMLNodeData *d, XMLElementType t, int index); + static void exactMemory(XMLNodeData *d); + static int detachFromParent(XMLNodeData *d); +} XMLNode; + +/// This structure is given by the function XMLNode::enumContents. +typedef struct XMLNodeContents +{ + /// This dictates what's the content of the XMLNodeContent + enum XMLElementType etype; + /**< should be an union to access the appropriate data. Compiler does not allow union of object with constructor... too bad. */ + XMLNode child; + XMLAttribute attrib; + XMLCSTR text; + XMLClear clear; + +} XMLNodeContents; + +/** @defgroup StringAlloc String Allocation/Free functions + * @ingroup xmlModify + * @{ */ +/// Duplicate (copy in a new allocated buffer) the source string. +XMLDLLENTRY XMLSTR stringDup(XMLCSTR source, int cbData=-1); +/**< This is + * a very handy function when used with all the "XMLNode::*_WOSD" functions (\link xmlWOSD \endlink). + * @param cbData If !=0 then cbData is the number of chars to duplicate. New strings allocated with + * this function should be free'd using the "freeXMLString" function. */ + +/// to free the string allocated inside the "stringDup" function or the "createXMLString" function. +XMLDLLENTRY void freeXMLString(XMLSTR t); // {free(t);} +/** @} */ + +/** @defgroup atoX ato? like functions + * @ingroup XMLParserGeneral + * The "xmlto?" functions are equivalents to the atoi, atol, atof functions. + * The only difference is: If the variable "xmlString" is NULL, than the return value + * is "defautValue". These 6 functions are only here as "convenience" functions for the + * user (they are not used inside the XMLparser). If you don't need them, you can + * delete them without any trouble. + * + * @{ */ +XMLDLLENTRY char xmltob(XMLCSTR xmlString,char defautValue=0); +XMLDLLENTRY int xmltoi(XMLCSTR xmlString,int defautValue=0); +XMLDLLENTRY long long xmltol(XMLCSTR xmlString,long long defautValue=0); +XMLDLLENTRY double xmltof(XMLCSTR xmlString,double defautValue=.0); +XMLDLLENTRY XMLCSTR xmltoa(XMLCSTR xmlString,XMLCSTR defautValue=_CXML("")); +XMLDLLENTRY XMLCHAR xmltoc(XMLCSTR xmlString,const XMLCHAR defautValue=_CXML('\0')); +/** @} */ + +/** @defgroup ToXMLStringTool Helper class to create XML files using "printf", "fprintf", "cout",... functions. + * @ingroup XMLParserGeneral + * @{ */ +/// Helper class to create XML files using "printf", "fprintf", "cout",... functions. +/** The ToXMLStringTool class helps you creating XML files using "printf", "fprintf", "cout",... functions. + * The "ToXMLStringTool" class is processing strings so that all the characters + * &,",',<,> are replaced by their XML equivalent: + * \verbatim &, ", ', <, > \endverbatim + * Using the "ToXMLStringTool class" and the "fprintf function" is THE most efficient + * way to produce VERY large XML documents VERY fast. + * \note If you are creating from scratch an XML file using the provided XMLNode class + * you must not use the "ToXMLStringTool" class (because the "XMLNode" class does the + * processing job for you during rendering).*/ +typedef struct XMLDLLENTRY ToXMLStringTool +{ +public: + ToXMLStringTool(): buf(NULL),buflen(0){} + ~ToXMLStringTool(); + void freeBuffer();/// +/* + x86 compilers (both VS2003 or VS2005) never use instrinsics, but generate + function calls to kernel32 instead, even in the optimized build. + We force intrinsics as described in MSDN documentation for + _InterlockedCompareExchange. +*/ +#ifdef _M_IX86 + +#if (_MSC_VER >= 1500) +#include +#else +C_MODE_START +/*Visual Studio 2003 and earlier do not have prototypes for atomic intrinsics*/ +LONG _InterlockedCompareExchange (LONG volatile *Target, LONG Value, LONG Comp); +LONGLONG _InterlockedCompareExchange64 (LONGLONG volatile *Target, + LONGLONG Value, LONGLONG Comp); +C_MODE_END + +#pragma intrinsic(_InterlockedCompareExchange) +#pragma intrinsic(_InterlockedCompareExchange64) +#endif + +#define InterlockedCompareExchange _InterlockedCompareExchange +#define InterlockedCompareExchange64 _InterlockedCompareExchange64 +/* + No need to do something special for InterlockedCompareExchangePointer + as it is a #define to InterlockedCompareExchange. The same applies to + InterlockedExchangePointer. +*/ +#endif /*_M_IX86*/ + +#define MY_ATOMIC_MODE "msvc-intrinsics" +/* Implement using CAS on WIN32 */ +#define IL_COMP_EXCHG32(X,Y,Z) \ + InterlockedCompareExchange((volatile LONG *)(X),(Y),(Z)) +#define IL_COMP_EXCHG64(X,Y,Z) \ + InterlockedCompareExchange64((volatile LONGLONG *)(X), \ + (LONGLONG)(Y),(LONGLONG)(Z)) +#define IL_COMP_EXCHGptr InterlockedCompareExchangePointer + +#define make_atomic_cas_body(S) \ + int ## S initial_cmp= *cmp; \ + int ## S initial_a= IL_COMP_EXCHG ## S (a, set, initial_cmp); \ + if (!(ret= (initial_a == initial_cmp))) *cmp= initial_a; + +#ifndef _M_IX86 +/* Use full set of optimised functions on WIN64 */ +#define IL_EXCHG_ADD32(X,Y) \ + InterlockedExchangeAdd((volatile LONG *)(X),(Y)) +#define IL_EXCHG_ADD64(X,Y) \ + InterlockedExchangeAdd64((volatile LONGLONG *)(X),(LONGLONG)(Y)) +#define IL_EXCHG32(X,Y) \ + InterlockedExchange((volatile LONG *)(X),(Y)) +#define IL_EXCHG64(X,Y) \ + InterlockedExchange64((volatile LONGLONG *)(X),(LONGLONG)(Y)) +#define IL_EXCHGptr InterlockedExchangePointer + +#define make_atomic_add_body(S) \ + v= IL_EXCHG_ADD ## S (a, v) +#define make_atomic_swap_body(S) \ + v= IL_EXCHG ## S (a, v) +#define make_atomic_load_body(S) \ + ret= 0; /* avoid compiler warning */ \ + ret= IL_COMP_EXCHG ## S (a, ret, ret); +#endif +/* + my_yield_processor (equivalent of x86 PAUSE instruction) should be used + to improve performance on hyperthreaded CPUs. Intel recommends to use it in + spin loops also on non-HT machines to reduce power consumption (see e.g + http://softwarecommunity.intel.com/articles/eng/2004.htm) + + Running benchmarks for spinlocks implemented with InterlockedCompareExchange + and YieldProcessor shows that much better performance is achieved by calling + YieldProcessor in a loop - that is, yielding longer. On Intel boxes setting + loop count in the range 200-300 brought best results. + */ +#ifndef YIELD_LOOPS +#define YIELD_LOOPS 200 +#endif + +static __inline int my_yield_processor() +{ + int i; + for(i=0; i + +#define MY_ATOMIC_MODE "solaris-atomic" + +#if defined(__GNUC__) +#define atomic_typeof(T,V) __typeof__(V) +#else +#define atomic_typeof(T,V) T +#endif + +#define uintptr_t void * +#define atomic_or_ptr_nv(X,Y) (void *)atomic_or_ulong_nv((volatile ulong_t *)X, Y) + +#define make_atomic_cas_body(S) \ + atomic_typeof(uint ## S ## _t, *cmp) sav; \ + sav = atomic_cas_ ## S( \ + (volatile uint ## S ## _t *)a, \ + (uint ## S ## _t)*cmp, \ + (uint ## S ## _t)set); \ + if (! (ret= (sav == *cmp))) \ + *cmp= sav; + +#define make_atomic_add_body(S) \ + int ## S nv; /* new value */ \ + nv= atomic_add_ ## S ## _nv((volatile uint ## S ## _t *)a, v); \ + v= nv - v + +/* ------------------------------------------------------------------------ */ + +#ifdef MY_ATOMIC_MODE_DUMMY + +#define make_atomic_load_body(S) ret= *a +#define make_atomic_store_body(S) *a= v + +#else /* MY_ATOMIC_MODE_DUMMY */ + +#define make_atomic_load_body(S) \ + ret= atomic_or_ ## S ## _nv((volatile uint ## S ## _t *)a, 0) + +#define make_atomic_store_body(S) \ + (void) atomic_swap_ ## S((volatile uint ## S ## _t *)a, (uint ## S ## _t)v) + +#endif + +#define make_atomic_fas_body(S) \ + v= atomic_swap_ ## S((volatile uint ## S ## _t *)a, (uint ## S ## _t)v) + +#else /* cleanup */ + +#undef uintptr_t +#undef atomic_or_ptr_nv + +#endif + diff --git a/EQ2/source/depends/mariadb-10.1.19/include/atomic/x86-gcc.h b/EQ2/source/depends/mariadb-10.1.19/include/atomic/x86-gcc.h new file mode 100644 index 000000000..173e32e79 --- /dev/null +++ b/EQ2/source/depends/mariadb-10.1.19/include/atomic/x86-gcc.h @@ -0,0 +1,145 @@ +#ifndef ATOMIC_X86_GCC_INCLUDED +#define ATOMIC_X86_GCC_INCLUDED + +/* Copyright (c) 2006, 2010, Oracle and/or its affiliates. All rights reserved. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; version 2 of the License. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ + +/* + XXX 64-bit atomic operations can be implemented using + cmpxchg8b, if necessary. Though I've heard that not all 64-bit + architectures support double-word (128-bit) cas. +*/ + +/* + No special support of 8 and 16 bit operations are implemented here + currently. +*/ +#undef MY_ATOMIC_HAS_8_AND_16 + +#ifdef __x86_64__ +# ifdef MY_ATOMIC_NO_XADD +# define MY_ATOMIC_MODE "gcc-amd64" LOCK_prefix "-no-xadd" +# else +# define MY_ATOMIC_MODE "gcc-amd64" LOCK_prefix +# endif +#else +# ifdef MY_ATOMIC_NO_XADD +# define MY_ATOMIC_MODE "gcc-x86" LOCK_prefix "-no-xadd" +# else +# define MY_ATOMIC_MODE "gcc-x86" LOCK_prefix +# endif +#endif + +/* fix -ansi errors while maintaining readability */ +#ifndef asm +#define asm __asm__ +#endif + +#ifndef MY_ATOMIC_NO_XADD +#define make_atomic_add_body(S) make_atomic_add_body ## S +#define make_atomic_cas_body(S) make_atomic_cas_body ## S +#endif + +#define make_atomic_add_body32 \ + asm volatile (LOCK_prefix "; xadd %0, %1;" \ + : "+r" (v), "=m" (*a) \ + : "m" (*a) \ + : "memory") + +#define make_atomic_cas_body32 \ + __typeof__(*cmp) sav; \ + asm volatile (LOCK_prefix "; cmpxchg %3, %0; setz %2;" \ + : "=m" (*a), "=a" (sav), "=q" (ret) \ + : "r" (set), "m" (*a), "a" (*cmp) \ + : "memory"); \ + if (!ret) \ + *cmp= sav + +#ifdef __x86_64__ +#define make_atomic_add_body64 make_atomic_add_body32 +#define make_atomic_cas_body64 make_atomic_cas_body32 + +#define make_atomic_fas_body(S) \ + asm volatile ("xchg %0, %1;" \ + : "+r" (v), "=m" (*a) \ + : "m" (*a) \ + : "memory") + +/* + Actually 32/64-bit reads/writes are always atomic on x86_64, + nonetheless issue memory barriers as appropriate. +*/ +#define make_atomic_load_body(S) \ + /* Serialize prior load and store operations. */ \ + asm volatile ("mfence" ::: "memory"); \ + ret= *a; \ + /* Prevent compiler from reordering instructions. */ \ + asm volatile ("" ::: "memory") +#define make_atomic_store_body(S) \ + asm volatile ("; xchg %0, %1;" \ + : "=m" (*a), "+r" (v) \ + : "m" (*a) \ + : "memory") + +#else +/* + Use default implementations of 64-bit operations since we solved + the 64-bit problem on 32-bit platforms for CAS, no need to solve it + once more for ADD, LOAD, STORE and FAS as well. + Since we already added add32 support, we need to define add64 + here, but we haven't defined fas, load and store at all, so + we can fallback on default implementations. +*/ +#define make_atomic_add_body64 \ + int64 tmp=*a; \ + while (!my_atomic_cas64(a, &tmp, tmp+v)) ; \ + v=tmp; + +/* + On some platforms (e.g. Mac OS X and Solaris) the ebx register + is held as a pointer to the global offset table. Thus we're not + allowed to use the b-register on those platforms when compiling + PIC code, to avoid this we push ebx and pop ebx. The new value + is copied directly from memory to avoid problems with a implicit + manipulation of the stack pointer by the push. + + cmpxchg8b works on both 32-bit platforms and 64-bit platforms but + the code here is only used on 32-bit platforms, on 64-bit + platforms the much simpler make_atomic_cas_body32 will work + fine. +*/ +#define make_atomic_cas_body64 \ + asm volatile ("push %%ebx;" \ + "movl (%%ecx), %%ebx;" \ + "movl 4(%%ecx), %%ecx;" \ + LOCK_prefix "; cmpxchg8b (%%esi);" \ + "setz %2; pop %%ebx" \ + : "+S" (a), "+A" (*cmp), "=c" (ret) \ + : "c" (&set) \ + : "memory", "esp") +#endif + +/* + The implementation of make_atomic_cas_body32 is adaptable to + the OS word size, so on 64-bit platforms it will automatically + adapt to 64-bits and so it will work also on 64-bit platforms +*/ +#define make_atomic_cas_bodyptr make_atomic_cas_body32 + +#ifdef MY_ATOMIC_MODE_DUMMY +#define make_atomic_load_body(S) ret=*a +#define make_atomic_store_body(S) *a=v +#endif +#endif /* ATOMIC_X86_GCC_INCLUDED */ diff --git a/EQ2/source/depends/mariadb-10.1.19/include/base64.h b/EQ2/source/depends/mariadb-10.1.19/include/base64.h new file mode 100644 index 000000000..9a843b508 --- /dev/null +++ b/EQ2/source/depends/mariadb-10.1.19/include/base64.h @@ -0,0 +1,62 @@ +/* Copyright (c) 2003-2006 MySQL AB + Use is subject to license terms + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; version 2 of the License. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA */ + +#ifndef __BASE64_H_INCLUDED__ +#define __BASE64_H_INCLUDED__ + +#ifdef __cplusplus +extern "C" { +#endif + +/* + Calculate how much memory needed for dst of base64_encode() +*/ +int base64_needed_encoded_length(int length_of_data); + +/* + Maximum length base64_encode_needed_length() can accept with no overflow. +*/ +int base64_encode_max_arg_length(void); + +/* + Calculate how much memory needed for dst of base64_decode() +*/ +int base64_needed_decoded_length(int length_of_encoded_data); + +/* + Maximum length base64_decode_needed_length() can accept with no overflow. +*/ +int base64_decode_max_arg_length(); + +/* + Encode data as a base64 string +*/ +int base64_encode(const void *src, size_t src_len, char *dst); + +/* + Decode a base64 string into data +*/ +int base64_decode(const char *src, size_t src_len, + void *dst, const char **end_ptr, int flags); + +/* Allow multuple chunks 'AAA= AA== AA==', binlog uses this */ +#define MY_BASE64_DECODE_ALLOW_MULTIPLE_CHUNKS 1 + + +#ifdef __cplusplus +} +#endif +#endif /* !__BASE64_H_INCLUDED__ */ diff --git a/EQ2/source/depends/mariadb-10.1.19/include/big_endian.h b/EQ2/source/depends/mariadb-10.1.19/include/big_endian.h new file mode 100644 index 000000000..021b6abc3 --- /dev/null +++ b/EQ2/source/depends/mariadb-10.1.19/include/big_endian.h @@ -0,0 +1,82 @@ +/* Copyright (c) 2012, Oracle and/or its affiliates. All rights reserved. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; version 2 of the License. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02111-1307 USA */ + +/* + Data in big-endian format. +*/ +#define float4store(T,A) do { *(T)= ((uchar *) &A)[3];\ + *((T)+1)=(char) ((uchar *) &A)[2];\ + *((T)+2)=(char) ((uchar *) &A)[1];\ + *((T)+3)=(char) ((uchar *) &A)[0]; } while(0) + +#define float4get(V,M) do { float def_temp;\ + ((uchar*) &def_temp)[0]=(M)[3];\ + ((uchar*) &def_temp)[1]=(M)[2];\ + ((uchar*) &def_temp)[2]=(M)[1];\ + ((uchar*) &def_temp)[3]=(M)[0];\ + (V)=def_temp; } while(0) + +#define float8store(T,V) do { *(T)= ((uchar *) &V)[7];\ + *((T)+1)=(char) ((uchar *) &V)[6];\ + *((T)+2)=(char) ((uchar *) &V)[5];\ + *((T)+3)=(char) ((uchar *) &V)[4];\ + *((T)+4)=(char) ((uchar *) &V)[3];\ + *((T)+5)=(char) ((uchar *) &V)[2];\ + *((T)+6)=(char) ((uchar *) &V)[1];\ + *((T)+7)=(char) ((uchar *) &V)[0]; } while(0) + +#define float8get(V,M) do { double def_temp;\ + ((uchar*) &def_temp)[0]=(M)[7];\ + ((uchar*) &def_temp)[1]=(M)[6];\ + ((uchar*) &def_temp)[2]=(M)[5];\ + ((uchar*) &def_temp)[3]=(M)[4];\ + ((uchar*) &def_temp)[4]=(M)[3];\ + ((uchar*) &def_temp)[5]=(M)[2];\ + ((uchar*) &def_temp)[6]=(M)[1];\ + ((uchar*) &def_temp)[7]=(M)[0];\ + (V) = def_temp; } while(0) + +#define ushortget(V,M) do { V = (uint16) (((uint16) ((uchar) (M)[1]))+\ + ((uint16) ((uint16) (M)[0]) << 8)); } while(0) +#define shortget(V,M) do { V = (short) (((short) ((uchar) (M)[1]))+\ + ((short) ((short) (M)[0]) << 8)); } while(0) +#define longget(V,M) do { int32 def_temp;\ + ((uchar*) &def_temp)[0]=(M)[0];\ + ((uchar*) &def_temp)[1]=(M)[1];\ + ((uchar*) &def_temp)[2]=(M)[2];\ + ((uchar*) &def_temp)[3]=(M)[3];\ + (V)=def_temp; } while(0) +#define ulongget(V,M) do { uint32 def_temp;\ + ((uchar*) &def_temp)[0]=(M)[0];\ + ((uchar*) &def_temp)[1]=(M)[1];\ + ((uchar*) &def_temp)[2]=(M)[2];\ + ((uchar*) &def_temp)[3]=(M)[3];\ + (V)=def_temp; } while(0) +#define shortstore(T,A) do { uint def_temp=(uint) (A) ;\ + *(((char*)T)+1)=(char)(def_temp); \ + *(((char*)T)+0)=(char)(def_temp >> 8); } while(0) +#define longstore(T,A) do { *(((char*)T)+3)=((A));\ + *(((char*)T)+2)=(((A) >> 8));\ + *(((char*)T)+1)=(((A) >> 16));\ + *(((char*)T)+0)=(((A) >> 24)); } while(0) + +#define floatget(V,M) memcpy(&V, (M), sizeof(float)) +/* Cast away type qualifiers (necessary as macro takes argument by value). */ +#define floatstore(T,V) memcpy((T), (void*) (&V), sizeof(float)) +#define doubleget(V,M) memcpy(&V, (M), sizeof(double)) +/* Cast away type qualifiers (necessary as macro takes argument by value). */ +#define doublestore(T,V) memcpy((T), (void*) &V, sizeof(double)) +#define longlongget(V,M) memcpy(&V, (M), sizeof(ulonglong)) +#define longlongstore(T,V) memcpy((T), &V, sizeof(ulonglong)) diff --git a/EQ2/source/depends/mariadb-10.1.19/include/byte_order_generic.h b/EQ2/source/depends/mariadb-10.1.19/include/byte_order_generic.h new file mode 100644 index 000000000..d4ac27eeb --- /dev/null +++ b/EQ2/source/depends/mariadb-10.1.19/include/byte_order_generic.h @@ -0,0 +1,95 @@ +/* Copyright (c) 2001, 2012, Oracle and/or its affiliates. All rights reserved. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; version 2 of the License. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02111-1307 USA */ + +/* + Endianness-independent definitions for architectures other + than the x86 architecture. +*/ +#define sint2korr(A) (int16) (((int16) ((uchar) (A)[0])) +\ + ((int16) ((int16) (A)[1]) << 8)) +#define sint3korr(A) ((int32) ((((uchar) (A)[2]) & 128) ? \ + (((uint32) 255L << 24) | \ + (((uint32) (uchar) (A)[2]) << 16) |\ + (((uint32) (uchar) (A)[1]) << 8) | \ + ((uint32) (uchar) (A)[0])) : \ + (((uint32) (uchar) (A)[2]) << 16) |\ + (((uint32) (uchar) (A)[1]) << 8) | \ + ((uint32) (uchar) (A)[0]))) +#define sint4korr(A) (int32) (((int32) ((uchar) (A)[0])) +\ + (((int32) ((uchar) (A)[1]) << 8)) +\ + (((int32) ((uchar) (A)[2]) << 16)) +\ + (((int32) ((int16) (A)[3]) << 24))) +#define sint8korr(A) (longlong) uint8korr(A) +#define uint2korr(A) (uint16) (((uint16) ((uchar) (A)[0])) +\ + ((uint16) ((uchar) (A)[1]) << 8)) +#define uint3korr(A) (uint32) (((uint32) ((uchar) (A)[0])) +\ + (((uint32) ((uchar) (A)[1])) << 8) +\ + (((uint32) ((uchar) (A)[2])) << 16)) +#define uint4korr(A) (uint32) (((uint32) ((uchar) (A)[0])) +\ + (((uint32) ((uchar) (A)[1])) << 8) +\ + (((uint32) ((uchar) (A)[2])) << 16) +\ + (((uint32) ((uchar) (A)[3])) << 24)) +#define uint5korr(A) ((ulonglong)(((uint32) ((uchar) (A)[0])) +\ + (((uint32) ((uchar) (A)[1])) << 8) +\ + (((uint32) ((uchar) (A)[2])) << 16) +\ + (((uint32) ((uchar) (A)[3])) << 24)) +\ + (((ulonglong) ((uchar) (A)[4])) << 32)) +#define uint6korr(A) ((ulonglong)(((uint32) ((uchar) (A)[0])) + \ + (((uint32) ((uchar) (A)[1])) << 8) + \ + (((uint32) ((uchar) (A)[2])) << 16) + \ + (((uint32) ((uchar) (A)[3])) << 24)) + \ + (((ulonglong) ((uchar) (A)[4])) << 32) + \ + (((ulonglong) ((uchar) (A)[5])) << 40)) +#define uint8korr(A) ((ulonglong)(((uint32) ((uchar) (A)[0])) +\ + (((uint32) ((uchar) (A)[1])) << 8) +\ + (((uint32) ((uchar) (A)[2])) << 16) +\ + (((uint32) ((uchar) (A)[3])) << 24)) +\ + (((ulonglong) (((uint32) ((uchar) (A)[4])) +\ + (((uint32) ((uchar) (A)[5])) << 8) +\ + (((uint32) ((uchar) (A)[6])) << 16) +\ + (((uint32) ((uchar) (A)[7])) << 24))) <<\ + 32)) +#define int2store(T,A) do { uint def_temp= (uint) (A) ;\ + *((uchar*) (T))= (uchar)(def_temp); \ + *((uchar*) (T)+1)=(uchar)((def_temp >> 8)); \ + } while(0) +#define int3store(T,A) do { /*lint -save -e734 */\ + *((uchar*)(T))=(uchar) ((A));\ + *((uchar*) (T)+1)=(uchar) (((A) >> 8));\ + *((uchar*)(T)+2)=(uchar) (((A) >> 16)); \ + /*lint -restore */} while(0) +#define int4store(T,A) do { *((char *)(T))=(char) ((A));\ + *(((char *)(T))+1)=(char) (((A) >> 8));\ + *(((char *)(T))+2)=(char) (((A) >> 16));\ + *(((char *)(T))+3)=(char) (((A) >> 24));\ + } while(0) +#define int5store(T,A) do { *((char *)(T))= (char)((A)); \ + *(((char *)(T))+1)= (char)(((A) >> 8)); \ + *(((char *)(T))+2)= (char)(((A) >> 16)); \ + *(((char *)(T))+3)= (char)(((A) >> 24)); \ + *(((char *)(T))+4)= (char)(((A) >> 32)); \ + } while(0) +#define int6store(T,A) do { *((char *)(T))= (char)((A)); \ + *(((char *)(T))+1)= (char)(((A) >> 8)); \ + *(((char *)(T))+2)= (char)(((A) >> 16)); \ + *(((char *)(T))+3)= (char)(((A) >> 24)); \ + *(((char *)(T))+4)= (char)(((A) >> 32)); \ + *(((char *)(T))+5)= (char)(((A) >> 40)); \ + } while(0) +#define int8store(T,A) do { uint def_temp= (uint) (A), \ + def_temp2= (uint) ((A) >> 32); \ + int4store((T),def_temp); \ + int4store((T+4),def_temp2);\ + } while(0) diff --git a/EQ2/source/depends/mariadb-10.1.19/include/byte_order_generic_x86.h b/EQ2/source/depends/mariadb-10.1.19/include/byte_order_generic_x86.h new file mode 100644 index 000000000..a97dd0f43 --- /dev/null +++ b/EQ2/source/depends/mariadb-10.1.19/include/byte_order_generic_x86.h @@ -0,0 +1,87 @@ +/* Copyright (c) 2001, 2012, Oracle and/or its affiliates. All rights reserved. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; version 2 of the License. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02111-1307 USA */ + +/* + Optimized function-like macros for the x86 architecture (_WIN32 included). +*/ +#define sint2korr(A) (*((const int16 *) (A))) +#define sint3korr(A) ((int32) ((((uchar) (A)[2]) & 128) ? \ + (((uint32) 255L << 24) | \ + (((uint32) (uchar) (A)[2]) << 16) |\ + (((uint32) (uchar) (A)[1]) << 8) | \ + ((uint32) (uchar) (A)[0])) : \ + (((uint32) (uchar) (A)[2]) << 16) |\ + (((uint32) (uchar) (A)[1]) << 8) | \ + ((uint32) (uchar) (A)[0]))) +#define sint4korr(A) (*((const long *) (A))) +#define uint2korr(A) (*((const uint16 *) (A))) +#define uint3korr(A) (uint32) (((uint32) ((uchar) (A)[0])) +\ + (((uint32) ((uchar) (A)[1])) << 8) +\ + (((uint32) ((uchar) (A)[2])) << 16)) +#define uint4korr(A) (*((const uint32 *) (A))) +#define uint5korr(A) ((ulonglong)(((uint32) ((uchar) (A)[0])) +\ + (((uint32) ((uchar) (A)[1])) << 8) +\ + (((uint32) ((uchar) (A)[2])) << 16) +\ + (((uint32) ((uchar) (A)[3])) << 24)) +\ + (((ulonglong) ((uchar) (A)[4])) << 32)) +#define uint6korr(A) ((ulonglong)(((uint32) ((uchar) (A)[0])) + \ + (((uint32) ((uchar) (A)[1])) << 8) + \ + (((uint32) ((uchar) (A)[2])) << 16) + \ + (((uint32) ((uchar) (A)[3])) << 24)) + \ + (((ulonglong) ((uchar) (A)[4])) << 32) + \ + (((ulonglong) ((uchar) (A)[5])) << 40)) +#define uint8korr(A) (*((const ulonglong *) (A))) +#define sint8korr(A) (*((const longlong *) (A))) + +#define int2store(T,A) *((uint16*) (T))= (uint16) (A) +#define int3store(T,A) do { *(T)= (uchar) ((A));\ + *(T+1)=(uchar) (((uint) (A) >> 8));\ + *(T+2)=(uchar) (((A) >> 16));\ + } while (0) +#define int4store(T,A) *((long *) (T))= (long) (A) +#define int5store(T,A) do { *(T)= (uchar)((A));\ + *((T)+1)=(uchar) (((A) >> 8));\ + *((T)+2)=(uchar) (((A) >> 16));\ + *((T)+3)=(uchar) (((A) >> 24));\ + *((T)+4)=(uchar) (((A) >> 32));\ + } while(0) +#define int6store(T,A) do { *(T)= (uchar)((A)); \ + *((T)+1)=(uchar) (((A) >> 8)); \ + *((T)+2)=(uchar) (((A) >> 16)); \ + *((T)+3)=(uchar) (((A) >> 24)); \ + *((T)+4)=(uchar) (((A) >> 32)); \ + *((T)+5)=(uchar) (((A) >> 40)); \ + } while(0) +#define int8store(T,A) *((ulonglong *) (T))= (ulonglong) (A) +typedef union { + double v; + long m[2]; +} doubleget_union; +#define doubleget(V,M) \ +do { doubleget_union _tmp; \ + _tmp.m[0] = *((const long*)(M)); \ + _tmp.m[1] = *(((const long*) (M))+1); \ + (V) = _tmp.v; } while(0) +#define doublestore(T,V) \ +do { *((long *) T) = ((const doubleget_union *)&V)->m[0]; \ + *(((long *) T)+1) = ((const doubleget_union *)&V)->m[1]; \ + } while (0) +#define float4get(V,M) \ +do { *((float *) &(V)) = *((const float*) (M)); } while(0) +#define float8get(V,M) doubleget((V),(M)) +#define float4store(V,M) memcpy((uchar*)(V), (uchar*)(&M), sizeof(float)) +#define floatstore(T,V) memcpy((uchar*)(T), (uchar*)(&V), sizeof(float)) +#define floatget(V,M) memcpy((uchar*)(&V),(uchar*) (M), sizeof(float)) +#define float8store(V,M) doublestore((V),(M)) diff --git a/EQ2/source/depends/mariadb-10.1.19/include/byte_order_generic_x86_64.h b/EQ2/source/depends/mariadb-10.1.19/include/byte_order_generic_x86_64.h new file mode 100644 index 000000000..8c7493965 --- /dev/null +++ b/EQ2/source/depends/mariadb-10.1.19/include/byte_order_generic_x86_64.h @@ -0,0 +1,75 @@ +/* Copyright (c) 2001, 2012, Oracle and/or its affiliates. All rights reserved. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; version 2 of the License. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02111-1307 USA */ + +/* + Optimized function-like macros for the x86 architecture (_WIN32 included). +*/ +#define sint2korr(A) (int16) (*((int16 *) (A))) +#define sint3korr(A) ((int32) ((((uchar) (A)[2]) & 128) ? \ + (((uint32) 255L << 24) | \ + (((uint32) (uchar) (A)[2]) << 16) |\ + (((uint32) (uchar) (A)[1]) << 8) | \ + ((uint32) (uchar) (A)[0])) : \ + (((uint32) (uchar) (A)[2]) << 16) |\ + (((uint32) (uchar) (A)[1]) << 8) | \ + ((uint32) (uchar) (A)[0]))) +#define sint4korr(A) (int32) (*((int32 *) (A))) +#define uint2korr(A) (uint16) (*((uint16 *) (A))) +#define uint3korr(A) (uint32) (((uint32) ((uchar) (A)[0])) +\ + (((uint32) ((uchar) (A)[1])) << 8) +\ + (((uint32) ((uchar) (A)[2])) << 16)) +#define uint4korr(A) (uint32) (*((uint32 *) (A))) +#define uint5korr(A) ((ulonglong)(((uint32) ((uchar) (A)[0])) +\ + (((uint32) ((uchar) (A)[1])) << 8) +\ + (((uint32) ((uchar) (A)[2])) << 16) +\ + (((uint32) ((uchar) (A)[3])) << 24)) +\ + (((ulonglong) ((uchar) (A)[4])) << 32)) +#define uint6korr(A) ((ulonglong)(((uint32) ((uchar) (A)[0])) + \ + (((uint32) ((uchar) (A)[1])) << 8) + \ + (((uint32) ((uchar) (A)[2])) << 16) + \ + (((uint32) ((uchar) (A)[3])) << 24)) + \ + (((ulonglong) ((uchar) (A)[4])) << 32) + \ + (((ulonglong) ((uchar) (A)[5])) << 40)) +#define uint8korr(A) (ulonglong) (*((ulonglong *) (A))) +#define sint8korr(A) (longlong) (*((longlong *) (A))) + +#define int2store(T,A) do { uchar *pT= (uchar*)(T);\ + *((uint16*)(pT))= (uint16) (A);\ + } while (0) + +#define int3store(T,A) do { *(T)= (uchar) ((A));\ + *(T+1)=(uchar) (((uint) (A) >> 8));\ + *(T+2)=(uchar) (((A) >> 16));\ + } while (0) +#define int4store(T,A) do { uchar *pT= (uchar*)(T);\ + *((uint32 *) (pT))= (uint32) (A); \ + } while (0) + +#define int5store(T,A) do { *(T)= (uchar)((A));\ + *((T)+1)=(uchar) (((A) >> 8));\ + *((T)+2)=(uchar) (((A) >> 16));\ + *((T)+3)=(uchar) (((A) >> 24));\ + *((T)+4)=(uchar) (((A) >> 32));\ + } while(0) +#define int6store(T,A) do { *(T)= (uchar)((A)); \ + *((T)+1)=(uchar) (((A) >> 8)); \ + *((T)+2)=(uchar) (((A) >> 16)); \ + *((T)+3)=(uchar) (((A) >> 24)); \ + *((T)+4)=(uchar) (((A) >> 32)); \ + *((T)+5)=(uchar) (((A) >> 40)); \ + } while(0) +#define int8store(T,A) do { uchar *pT= (uchar*)(T);\ + *((ulonglong *) (pT))= (ulonglong) (A);\ + } while(0) diff --git a/EQ2/source/depends/mariadb-10.1.19/include/decimal.h b/EQ2/source/depends/mariadb-10.1.19/include/decimal.h new file mode 100644 index 000000000..2adeb8243 --- /dev/null +++ b/EQ2/source/depends/mariadb-10.1.19/include/decimal.h @@ -0,0 +1,124 @@ +/* Copyright (c) 2000, 2011, Oracle and/or its affiliates. All rights reserved. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; version 2 of the License. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ + +#ifndef _decimal_h +#define _decimal_h + +#ifdef __cplusplus +extern "C" { +#endif + +typedef enum +{TRUNCATE=0, HALF_EVEN, HALF_UP, CEILING, FLOOR} + decimal_round_mode; +typedef int32 decimal_digit_t; + +/** + intg is the number of *decimal* digits (NOT number of decimal_digit_t's !) + before the point + frac is the number of decimal digits after the point + len is the length of buf (length of allocated space) in decimal_digit_t's, + not in bytes + sign false means positive, true means negative + buf is an array of decimal_digit_t's + */ +typedef struct st_decimal_t { + int intg, frac, len; + my_bool sign; + decimal_digit_t *buf; +} decimal_t; + +int internal_str2dec(const char *from, decimal_t *to, char **end, + my_bool fixed); +int decimal2string(const decimal_t *from, char *to, int *to_len, + int fixed_precision, int fixed_decimals, + char filler); +int decimal2ulonglong(const decimal_t *from, ulonglong *to); +int ulonglong2decimal(ulonglong from, decimal_t *to); +int decimal2longlong(const decimal_t *from, longlong *to); +int longlong2decimal(longlong from, decimal_t *to); +int decimal2double(const decimal_t *from, double *to); +int double2decimal(double from, decimal_t *to); +int decimal_actual_fraction(decimal_t *from); +int decimal2bin(const decimal_t *from, uchar *to, int precision, int scale); +int bin2decimal(const uchar *from, decimal_t *to, int precision, int scale); + +int decimal_size(int precision, int scale); +int decimal_bin_size(int precision, int scale); +int decimal_result_size(decimal_t *from1, decimal_t *from2, char op, + int param); + +int decimal_intg(const decimal_t *from); +int decimal_add(const decimal_t *from1, const decimal_t *from2, decimal_t *to); +int decimal_sub(const decimal_t *from1, const decimal_t *from2, decimal_t *to); +int decimal_cmp(const decimal_t *from1, const decimal_t *from2); +int decimal_mul(const decimal_t *from1, const decimal_t *from2, decimal_t *to); +int decimal_div(const decimal_t *from1, const decimal_t *from2, decimal_t *to, + int scale_incr); +int decimal_mod(const decimal_t *from1, const decimal_t *from2, decimal_t *to); +int decimal_round(const decimal_t *from, decimal_t *to, int new_scale, + decimal_round_mode mode); +int decimal_is_zero(const decimal_t *from); +void max_decimal(int precision, int frac, decimal_t *to); + +#define string2decimal(A,B,C) internal_str2dec((A), (B), (C), 0) +#define string2decimal_fixed(A,B,C) internal_str2dec((A), (B), (C), 1) + +/* set a decimal_t to zero */ + +#define decimal_make_zero(dec) do { \ + (dec)->buf[0]=0; \ + (dec)->intg=1; \ + (dec)->frac=0; \ + (dec)->sign=0; \ + } while(0) + +/* + returns the length of the buffer to hold string representation + of the decimal (including decimal dot, possible sign and \0) +*/ + +#define decimal_string_size(dec) (((dec)->intg ? (dec)->intg : 1) + \ + (dec)->frac + ((dec)->frac > 0) + 2) + +/* negate a decimal */ +#define decimal_neg(dec) do { (dec)->sign^=1; } while(0) + +/* + conventions: + + decimal_smth() == 0 -- everything's ok + decimal_smth() <= 1 -- result is usable, but precision loss is possible + decimal_smth() <= 2 -- result can be unusable, most significant digits + could've been lost + decimal_smth() > 2 -- no result was generated +*/ + +#define E_DEC_OK 0 +#define E_DEC_TRUNCATED 1 +#define E_DEC_OVERFLOW 2 +#define E_DEC_DIV_ZERO 4 +#define E_DEC_BAD_NUM 8 +#define E_DEC_OOM 16 + +#define E_DEC_ERROR 31 +#define E_DEC_FATAL_ERROR 30 + +#ifdef __cplusplus +} +#endif + +#endif + diff --git a/EQ2/source/depends/mariadb-10.1.19/include/errmsg.h b/EQ2/source/depends/mariadb-10.1.19/include/errmsg.h new file mode 100644 index 000000000..be4203b7f --- /dev/null +++ b/EQ2/source/depends/mariadb-10.1.19/include/errmsg.h @@ -0,0 +1,116 @@ +#ifndef ERRMSG_INCLUDED +#define ERRMSG_INCLUDED + +/* Copyright (c) 2000, 2014, Oracle and/or its affiliates. All rights reserved. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; version 2 of the License. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ + +/* + Error messages numbers for MySQL clients. + The error messages itself are in libmysql/errmsg.c + + Error messages for the mysqld daemon are in sql/share/errmsg.txt +*/ + +#ifdef __cplusplus +extern "C" { +#endif +void init_client_errs(void); +void finish_client_errs(void); +extern const char *client_errors[]; /* Error messages */ +#ifdef __cplusplus +} +#endif + +#define CR_MIN_ERROR 2000 /* For easier client code */ +#define CR_MAX_ERROR 2999 +#if !defined(ER) +#define ER(X) (((X) >= CR_ERROR_FIRST && (X) <= CR_ERROR_LAST)? \ + client_errors[(X)-CR_ERROR_FIRST]: client_errors[CR_UNKNOWN_ERROR]) + +#endif +#define CLIENT_ERRMAP 2 /* Errormap used by my_error() */ + +/* Do not add error numbers before CR_ERROR_FIRST. */ +/* If necessary to add lower numbers, change CR_ERROR_FIRST accordingly. */ +#define CR_ERROR_FIRST 2000 /*Copy first error nr.*/ +#define CR_UNKNOWN_ERROR 2000 +#define CR_SOCKET_CREATE_ERROR 2001 +#define CR_CONNECTION_ERROR 2002 +#define CR_CONN_HOST_ERROR 2003 +#define CR_IPSOCK_ERROR 2004 +#define CR_UNKNOWN_HOST 2005 +#define CR_SERVER_GONE_ERROR 2006 +#define CR_VERSION_ERROR 2007 +#define CR_OUT_OF_MEMORY 2008 +#define CR_WRONG_HOST_INFO 2009 +#define CR_LOCALHOST_CONNECTION 2010 +#define CR_TCP_CONNECTION 2011 +#define CR_SERVER_HANDSHAKE_ERR 2012 +#define CR_SERVER_LOST 2013 +#define CR_COMMANDS_OUT_OF_SYNC 2014 +#define CR_NAMEDPIPE_CONNECTION 2015 +#define CR_NAMEDPIPEWAIT_ERROR 2016 +#define CR_NAMEDPIPEOPEN_ERROR 2017 +#define CR_NAMEDPIPESETSTATE_ERROR 2018 +#define CR_CANT_READ_CHARSET 2019 +#define CR_NET_PACKET_TOO_LARGE 2020 +#define CR_EMBEDDED_CONNECTION 2021 +#define CR_PROBE_SLAVE_STATUS 2022 +#define CR_PROBE_SLAVE_HOSTS 2023 +#define CR_PROBE_SLAVE_CONNECT 2024 +#define CR_PROBE_MASTER_CONNECT 2025 +#define CR_SSL_CONNECTION_ERROR 2026 +#define CR_MALFORMED_PACKET 2027 +#define CR_WRONG_LICENSE 2028 + +/* new 4.1 error codes */ +#define CR_NULL_POINTER 2029 +#define CR_NO_PREPARE_STMT 2030 +#define CR_PARAMS_NOT_BOUND 2031 +#define CR_DATA_TRUNCATED 2032 +#define CR_NO_PARAMETERS_EXISTS 2033 +#define CR_INVALID_PARAMETER_NO 2034 +#define CR_INVALID_BUFFER_USE 2035 +#define CR_UNSUPPORTED_PARAM_TYPE 2036 + +#define CR_SHARED_MEMORY_CONNECTION 2037 +#define CR_SHARED_MEMORY_CONNECT_REQUEST_ERROR 2038 +#define CR_SHARED_MEMORY_CONNECT_ANSWER_ERROR 2039 +#define CR_SHARED_MEMORY_CONNECT_FILE_MAP_ERROR 2040 +#define CR_SHARED_MEMORY_CONNECT_MAP_ERROR 2041 +#define CR_SHARED_MEMORY_FILE_MAP_ERROR 2042 +#define CR_SHARED_MEMORY_MAP_ERROR 2043 +#define CR_SHARED_MEMORY_EVENT_ERROR 2044 +#define CR_SHARED_MEMORY_CONNECT_ABANDONED_ERROR 2045 +#define CR_SHARED_MEMORY_CONNECT_SET_ERROR 2046 +#define CR_CONN_UNKNOW_PROTOCOL 2047 +#define CR_INVALID_CONN_HANDLE 2048 +#define CR_SECURE_AUTH 2049 +#define CR_FETCH_CANCELED 2050 +#define CR_NO_DATA 2051 +#define CR_NO_STMT_METADATA 2052 +#define CR_NO_RESULT_SET 2053 +#define CR_NOT_IMPLEMENTED 2054 +#define CR_SERVER_LOST_EXTENDED 2055 +#define CR_STMT_CLOSED 2056 +#define CR_NEW_STMT_METADATA 2057 +#define CR_ALREADY_CONNECTED 2058 +#define CR_AUTH_PLUGIN_CANNOT_LOAD 2059 +#define CR_DUPLICATE_CONNECTION_ATTR 2060 +#define CR_AUTH_PLUGIN_ERR 2061 +#define CR_ERROR_LAST /*Copy last error nr:*/ 2061 +/* Add error numbers before CR_ERROR_LAST and change it accordingly. */ + +#endif /* ERRMSG_INCLUDED */ diff --git a/EQ2/source/depends/mariadb-10.1.19/include/ft_global.h b/EQ2/source/depends/mariadb-10.1.19/include/ft_global.h new file mode 100644 index 000000000..aad3b4cb5 --- /dev/null +++ b/EQ2/source/depends/mariadb-10.1.19/include/ft_global.h @@ -0,0 +1,111 @@ +/* Copyright (c) 2000-2005, 2007 MySQL AB, 2009 Sun Microsystems, Inc. + Use is subject to license terms. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; version 2 of the License. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ + +/* Written by Sergei A. Golubchik, who has a shared copyright to this code */ + +/* some definitions for full-text indices */ + +/* #include "myisam.h" */ + +#ifndef _ft_global_h +#define _ft_global_h +#ifdef __cplusplus +extern "C" { +#endif + +#include + +#define HA_FT_MAXBYTELEN 254 +#define HA_FT_MAXCHARLEN (HA_FT_MAXBYTELEN/3) + +#define DEFAULT_FTB_SYNTAX "+ -><()~*:\"\"&|" + +typedef struct st_ft_info FT_INFO; +struct _ft_vft +{ + int (*read_next)(FT_INFO *, char *); + float (*find_relevance)(FT_INFO *, uchar *, uint); + void (*close_search)(FT_INFO *); + float (*get_relevance)(FT_INFO *); + void (*reinit_search)(FT_INFO *); +}; + +typedef struct st_ft_info_ext FT_INFO_EXT; +struct _ft_vft_ext +{ + uint (*get_version)(); // Extended API version + ulonglong (*get_flags)(); + ulonglong (*get_docid)(FT_INFO_EXT *); + ulonglong (*count_matches)(FT_INFO_EXT *); +}; + +/* Flags for extended FT API */ +#define FTS_ORDERED_RESULT (1LL << 1) +#define FTS_DOCID_IN_RESULT (1LL << 2) + +#define FTS_DOC_ID_COL_NAME "FTS_DOC_ID" + +#ifndef FT_CORE +struct st_ft_info +{ + struct _ft_vft *please; /* INTERCAL style :-) */ +}; + +struct st_ft_info_ext +{ + struct _ft_vft *please; /* INTERCAL style :-) */ + struct _ft_vft_ext *could_you; +}; +#endif + +extern const char *ft_stopword_file; +extern const char *ft_precompiled_stopwords[]; + +extern ulong ft_min_word_len; +extern ulong ft_max_word_len; +extern ulong ft_query_expansion_limit; +extern const char *ft_boolean_syntax; +extern struct st_mysql_ftparser ft_default_parser; + +int ft_init_stopwords(void); +void ft_free_stopwords(void); + +#define FT_NL 0 +#define FT_BOOL 1 +#define FT_SORTED 2 +#define FT_EXPAND 4 /* query expansion */ + +FT_INFO *ft_init_search(uint,void *, uint, uchar *, size_t, + CHARSET_INFO *, uchar *); +my_bool ft_boolean_check_syntax_string(const uchar *); + +/* Internal symbols for fulltext between maria and MyISAM */ + +#define HA_FT_WTYPE HA_KEYTYPE_FLOAT +#define HA_FT_WLEN 4 +#define FT_SEGS 2 + +#define ft_sintXkorr(A) mi_sint4korr(A) +#define ft_intXstore(T,A) mi_int4store(T,A) + +extern const HA_KEYSEG ft_keysegs[FT_SEGS]; + +typedef union {int32 i; float f;} FT_WEIGTH; + +#ifdef __cplusplus +} +#endif +#endif diff --git a/EQ2/source/depends/mariadb-10.1.19/include/handler_ername.h b/EQ2/source/depends/mariadb-10.1.19/include/handler_ername.h new file mode 100644 index 000000000..50f7f5358 --- /dev/null +++ b/EQ2/source/depends/mariadb-10.1.19/include/handler_ername.h @@ -0,0 +1,81 @@ +/* Copyright (c) 2013 SkySQL Ab + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; version 2 of the License. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software Foundation, + Inc., 51 Franklin Street, Suite 500, Boston, MA 02110-1335 USA */ + +/* Names of all handler error numbers. Used by mysqltest */ + +{ "HA_ERR_KEY_NOT_FOUND", HA_ERR_KEY_NOT_FOUND, "" }, +{ "HA_ERR_FOUND_DUPP_KEY", HA_ERR_FOUND_DUPP_KEY, "" }, +{ "HA_ERR_INTERNAL_ERROR", HA_ERR_INTERNAL_ERROR, "" }, +{ "HA_ERR_RECORD_CHANGED", HA_ERR_RECORD_CHANGED, "" }, +{ "HA_ERR_WRONG_INDEX", HA_ERR_WRONG_INDEX, "" }, +{ "HA_ERR_CRASHED", HA_ERR_CRASHED, "" }, +{ "HA_ERR_WRONG_IN_RECORD", HA_ERR_WRONG_IN_RECORD, "" }, +{ "HA_ERR_OUT_OF_MEM", HA_ERR_OUT_OF_MEM, "" }, +{ "HA_ERR_NOT_A_TABLE", HA_ERR_NOT_A_TABLE, "" }, +{ "HA_ERR_WRONG_COMMAND", HA_ERR_WRONG_COMMAND, "" }, +{ "HA_ERR_OLD_FILE", HA_ERR_OLD_FILE, "" }, +{ "HA_ERR_NO_ACTIVE_RECORD", HA_ERR_NO_ACTIVE_RECORD, "" }, +{ "HA_ERR_RECORD_DELETED", HA_ERR_RECORD_DELETED, "" }, +{ "HA_ERR_RECORD_FILE_FULL", HA_ERR_RECORD_FILE_FULL, "" }, +{ "HA_ERR_INDEX_FILE_FULL", HA_ERR_INDEX_FILE_FULL, "" }, +{ "HA_ERR_END_OF_FILE", HA_ERR_END_OF_FILE, "" }, +{ "HA_ERR_UNSUPPORTED", HA_ERR_UNSUPPORTED, "" }, +{ "HA_ERR_TO_BIG_ROW", HA_ERR_TO_BIG_ROW, "" }, +{ "HA_WRONG_CREATE_OPTION", HA_WRONG_CREATE_OPTION, "" }, +{ "HA_ERR_FOUND_DUPP_UNIQUE", HA_ERR_FOUND_DUPP_UNIQUE, "" }, +{ "HA_ERR_UNKNOWN_CHARSET", HA_ERR_UNKNOWN_CHARSET, "" }, +{ "HA_ERR_WRONG_MRG_TABLE_DEF", HA_ERR_WRONG_MRG_TABLE_DEF, "" }, +{ "HA_ERR_CRASHED_ON_REPAIR", HA_ERR_CRASHED_ON_REPAIR, "" }, +{ "HA_ERR_CRASHED_ON_USAGE", HA_ERR_CRASHED_ON_USAGE, "" }, +{ "HA_ERR_LOCK_WAIT_TIMEOUT", HA_ERR_LOCK_WAIT_TIMEOUT, "" }, +{ "HA_ERR_LOCK_TABLE_FULL", HA_ERR_LOCK_TABLE_FULL, "" }, +{ "HA_ERR_READ_ONLY_TRANSACTION", HA_ERR_READ_ONLY_TRANSACTION, "" }, +{ "HA_ERR_LOCK_DEADLOCK", HA_ERR_LOCK_DEADLOCK, "" }, +{ "HA_ERR_CANNOT_ADD_FOREIGN", HA_ERR_CANNOT_ADD_FOREIGN, "" }, +{ "HA_ERR_NO_REFERENCED_ROW", HA_ERR_NO_REFERENCED_ROW, "" }, +{ "HA_ERR_ROW_IS_REFERENCED", HA_ERR_ROW_IS_REFERENCED, "" }, +{ "HA_ERR_NO_SAVEPOINT", HA_ERR_NO_SAVEPOINT, "" }, +{ "HA_ERR_NON_UNIQUE_BLOCK_SIZE", HA_ERR_NON_UNIQUE_BLOCK_SIZE, "" }, +{ "HA_ERR_NO_SUCH_TABLE", HA_ERR_NO_SUCH_TABLE, "" }, +{ "HA_ERR_TABLE_EXIST", HA_ERR_TABLE_EXIST, "" }, +{ "HA_ERR_NO_CONNECTION", HA_ERR_NO_CONNECTION, "" }, +{ "HA_ERR_NULL_IN_SPATIAL", HA_ERR_NULL_IN_SPATIAL, "" }, +{ "HA_ERR_TABLE_DEF_CHANGED", HA_ERR_TABLE_DEF_CHANGED, "" }, +{ "HA_ERR_NO_PARTITION_FOUND", HA_ERR_NO_PARTITION_FOUND, "" }, +{ "HA_ERR_RBR_LOGGING_FAILED", HA_ERR_RBR_LOGGING_FAILED, "" }, +{ "HA_ERR_DROP_INDEX_FK", HA_ERR_DROP_INDEX_FK, "" }, +{ "HA_ERR_FOREIGN_DUPLICATE_KEY", HA_ERR_FOREIGN_DUPLICATE_KEY, "" }, +{ "HA_ERR_TABLE_NEEDS_UPGRADE", HA_ERR_TABLE_NEEDS_UPGRADE, "" }, +{ "HA_ERR_TABLE_READONLY", HA_ERR_TABLE_READONLY, "" }, +{ "HA_ERR_AUTOINC_READ_FAILED", HA_ERR_AUTOINC_READ_FAILED, "" }, +{ "HA_ERR_AUTOINC_ERANGE", HA_ERR_AUTOINC_ERANGE, "" }, +{ "HA_ERR_GENERIC", HA_ERR_GENERIC, "" }, +{ "HA_ERR_RECORD_IS_THE_SAME", HA_ERR_RECORD_IS_THE_SAME, "" }, +{ "HA_ERR_LOGGING_IMPOSSIBLE", HA_ERR_LOGGING_IMPOSSIBLE, "" }, +{ "HA_ERR_CORRUPT_EVENT", HA_ERR_CORRUPT_EVENT, "" }, +{ "HA_ERR_NEW_FILE", HA_ERR_NEW_FILE, "" }, +{ "HA_ERR_ROWS_EVENT_APPLY", HA_ERR_ROWS_EVENT_APPLY, "" }, +{ "HA_ERR_INITIALIZATION", HA_ERR_INITIALIZATION, "" }, +{ "HA_ERR_FILE_TOO_SHORT", HA_ERR_FILE_TOO_SHORT, "" }, +{ "HA_ERR_WRONG_CRC", HA_ERR_WRONG_CRC, "" }, +{ "HA_ERR_TOO_MANY_CONCURRENT_TRXS", HA_ERR_TOO_MANY_CONCURRENT_TRXS, "" }, +{ "HA_ERR_INDEX_COL_TOO_LONG", HA_ERR_INDEX_COL_TOO_LONG, "" }, +{ "HA_ERR_INDEX_CORRUPT", HA_ERR_INDEX_CORRUPT, "" }, +{ "HA_ERR_UNDO_REC_TOO_BIG", HA_ERR_UNDO_REC_TOO_BIG, "" }, +{ "HA_ERR_TABLE_IN_FK_CHECK", HA_ERR_TABLE_IN_FK_CHECK, "" }, +{ "HA_ERR_ROW_NOT_VISIBLE", HA_ERR_ROW_NOT_VISIBLE, "" }, +{ "HA_ERR_ABORTED_BY_USER", HA_ERR_ABORTED_BY_USER, "" }, +{ "HA_ERR_DISK_FULL", HA_ERR_DISK_FULL, "" }, +{ "HA_ERR_INCOMPATIBLE_DEFINITION", HA_ERR_INCOMPATIBLE_DEFINITION, "" }, diff --git a/EQ2/source/depends/mariadb-10.1.19/include/handler_state.h b/EQ2/source/depends/mariadb-10.1.19/include/handler_state.h new file mode 100644 index 000000000..65604a672 --- /dev/null +++ b/EQ2/source/depends/mariadb-10.1.19/include/handler_state.h @@ -0,0 +1,21 @@ +/* + Map handler error message to sql states. Note that this list MUST be in + increasing order! + See sql_state.c for usage +*/ + +{ HA_ERR_KEY_NOT_FOUND, "02000", "" }, +{ HA_ERR_FOUND_DUPP_KEY, "23000", "" }, +{ HA_ERR_WRONG_COMMAND, "0A000", "" }, +{ HA_ERR_UNSUPPORTED, "0A000", "" }, +{ HA_WRONG_CREATE_OPTION, "0A000", "" }, +{ HA_ERR_FOUND_DUPP_UNIQUE, "23000", "" }, +{ HA_ERR_UNKNOWN_CHARSET, "0A000", "" }, +{ HA_ERR_READ_ONLY_TRANSACTION, "25000", "" }, +{ HA_ERR_LOCK_DEADLOCK, "40001", "" }, +{ HA_ERR_NO_REFERENCED_ROW, "23000", "" }, +{ HA_ERR_ROW_IS_REFERENCED, "23000", "" }, +{ HA_ERR_TABLE_EXIST, "42S01", "" }, +{ HA_ERR_FOREIGN_DUPLICATE_KEY, "23000", "" }, +{ HA_ERR_TABLE_READONLY, "25000", "" }, +{ HA_ERR_AUTOINC_ERANGE, "22003", "" }, diff --git a/EQ2/source/depends/mariadb-10.1.19/include/hash.h b/EQ2/source/depends/mariadb-10.1.19/include/hash.h new file mode 100644 index 000000000..fde7fc30d --- /dev/null +++ b/EQ2/source/depends/mariadb-10.1.19/include/hash.h @@ -0,0 +1,109 @@ +/* Copyright (c) 2000, 2010, Oracle and/or its affiliates. + Copyright (c) 2011, 2013, Monty Program Ab. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; version 2 of the License. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ + +/* Dynamic hashing of record with different key-length */ + +#ifndef _hash_h +#define _hash_h + +#include "my_global.h" /* uchar */ +#include "my_sys.h" /* DYNAMIC_ARRAY */ + +/* + This forward declaration is used from C files where the real + definition is included before. Since C does not allow repeated + typedef declarations, even when identical, the definition may not be + repeated. +*/ +#ifdef __cplusplus +extern "C" { +#endif + +/* + Overhead to store an element in hash + Can be used to approximate memory consumption for a hash + */ +#define HASH_OVERHEAD (sizeof(char*)*2) + +/* flags for hash_init */ +#define HASH_UNIQUE 1 /* hash_insert fails on duplicate key */ +#define HASH_THREAD_SPECIFIC 2 /* Mark allocated memory THREAD_SPECIFIC */ + +typedef uint my_hash_value_type; +typedef uchar *(*my_hash_get_key)(const uchar *,size_t*,my_bool); +typedef my_hash_value_type (*my_hash_function)(CHARSET_INFO *, + const uchar *, size_t); +typedef void (*my_hash_free_key)(void *); +typedef my_bool (*my_hash_walk_action)(void *,void *); + +typedef struct st_hash { + size_t key_offset,key_length; /* Length of key if const length */ + size_t blength; + ulong records; + uint flags; + DYNAMIC_ARRAY array; /* Place for hash_keys */ + my_hash_get_key get_key; + my_hash_function hash_function; + void (*free)(void *); + CHARSET_INFO *charset; +} HASH; + +/* A search iterator state */ +typedef uint HASH_SEARCH_STATE; + +#define my_hash_init(A,B,C,D,E,F,G,H) my_hash_init2(A,0,B,C,D,E,F,0,G,H) +my_bool my_hash_init2(HASH *hash, uint growth_size, CHARSET_INFO *charset, + ulong default_array_elements, size_t key_offset, + size_t key_length, my_hash_get_key get_key, + my_hash_function hash_function, + void (*free_element)(void*), + uint flags); +void my_hash_free(HASH *tree); +void my_hash_reset(HASH *hash); +uchar *my_hash_element(HASH *hash, ulong idx); +uchar *my_hash_search(const HASH *info, const uchar *key, size_t length); +uchar *my_hash_search_using_hash_value(const HASH *info, + my_hash_value_type hash_value, + const uchar *key, size_t length); +my_hash_value_type my_hash_sort(CHARSET_INFO *cs, + const uchar *key, size_t length); +#define my_calc_hash(A, B, C) my_hash_sort((A)->charset, B, C) +uchar *my_hash_first(const HASH *info, const uchar *key, size_t length, + HASH_SEARCH_STATE *state); +uchar *my_hash_first_from_hash_value(const HASH *info, + my_hash_value_type hash_value, + const uchar *key, + size_t length, + HASH_SEARCH_STATE *state); +uchar *my_hash_next(const HASH *info, const uchar *key, size_t length, + HASH_SEARCH_STATE *state); +my_bool my_hash_insert(HASH *info, const uchar *data); +my_bool my_hash_delete(HASH *hash, uchar *record); +my_bool my_hash_update(HASH *hash, uchar *record, uchar *old_key, + size_t old_key_length); +void my_hash_replace(HASH *hash, HASH_SEARCH_STATE *state, uchar *new_row); +my_bool my_hash_check(HASH *hash); /* Only in debug library */ +my_bool my_hash_iterate(HASH *hash, my_hash_walk_action action, void *argument); + +#define my_hash_clear(H) bzero((char*) (H), sizeof(*(H))) +#define my_hash_inited(H) ((H)->blength != 0) +#define my_hash_init_opt(A,B,C,D,E,F,G,H) \ + (!my_hash_inited(A) && my_hash_init(A,B,C,D,E,F,G,H)) + +#ifdef __cplusplus +} +#endif +#endif diff --git a/EQ2/source/depends/mariadb-10.1.19/include/heap.h b/EQ2/source/depends/mariadb-10.1.19/include/heap.h new file mode 100644 index 000000000..724cf6c5f --- /dev/null +++ b/EQ2/source/depends/mariadb-10.1.19/include/heap.h @@ -0,0 +1,270 @@ +/* Copyright (c) 2000, 2011, Oracle and/or its affiliates. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; version 2 of the License. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +/* This file should be included when using heap_database_functions */ +/* Author: Michael Widenius */ + +#ifndef _heap_h +#define _heap_h +#ifdef __cplusplus +extern "C" { +#endif + +#ifndef _my_base_h +#include +#endif + +#include +#include + +#include "my_compare.h" +#include "my_tree.h" + + /* defines used by heap-funktions */ + +#define HP_MAX_LEVELS 4 /* 128^5 records is enough */ +#define HP_PTRS_IN_NOD 128 + + /* struct used with heap_funktions */ + +typedef struct st_heapinfo /* Struct from heap_info */ +{ + ulong records; /* Records in database */ + ulong deleted; /* Deleted records in database */ + ulong max_records; + ulonglong data_length; + ulonglong index_length; + uint reclength; /* Length of one record */ + int errkey; + ulonglong auto_increment; + time_t create_time; +} HEAPINFO; + + + /* Structs used by heap-database-handler */ + +typedef struct st_heap_ptrs +{ + uchar *blocks[HP_PTRS_IN_NOD]; /* pointers to HP_PTRS or records */ +} HP_PTRS; + +struct st_level_info +{ + /* Number of unused slots in *last_blocks HP_PTRS block (0 for 0th level) */ + uint free_ptrs_in_block; + + /* + Maximum number of records that can be 'contained' inside of each element + of last_blocks array. For level 0 - 1, for level 1 - HP_PTRS_IN_NOD, for + level 2 - HP_PTRS_IN_NOD^2 and so forth. + */ + ulong records_under_level; + + /* + Ptr to last allocated HP_PTRS (or records buffer for level 0) on this + level. + */ + HP_PTRS *last_blocks; +}; + + +/* + Heap table records and hash index entries are stored in HP_BLOCKs. + HP_BLOCK is used as a 'growable array' of fixed-size records. Size of record + is recbuffer bytes. + The internal representation is as follows: + HP_BLOCK is a hierarchical structure of 'blocks'. + A block at level 0 is an array records_in_block records. + A block at higher level is an HP_PTRS structure with pointers to blocks at + lower levels. + At the highest level there is one top block. It is stored in HP_BLOCK::root. + + See hp_find_block for a description of how record pointer is obtained from + its index. + See hp_get_new_block +*/ + +typedef struct st_heap_block +{ + HP_PTRS *root; /* Top-level block */ + struct st_level_info level_info[HP_MAX_LEVELS+1]; + uint levels; /* number of used levels */ + uint recbuffer; /* Length of one saved record */ + ulong records_in_block; /* Records in one heap-block */ + ulong last_allocated; /* number of records there is allocated space for */ +} HP_BLOCK; + +struct st_heap_info; /* For referense */ + +typedef struct st_hp_keydef /* Key definition with open */ +{ + uint flag; /* HA_NOSAME | HA_NULL_PART_KEY */ + uint keysegs; /* Number of key-segment */ + uint length; /* Length of key (automatic) */ + uint8 algorithm; /* HASH / BTREE */ + HA_KEYSEG *seg; + HP_BLOCK block; /* Where keys are saved */ + /* + Number of buckets used in hash table. Used only to provide + #records estimates for heap key scans. + */ + ha_rows hash_buckets; + TREE rb_tree; + int (*write_key)(struct st_heap_info *info, struct st_hp_keydef *keyinfo, + const uchar *record, uchar *recpos); + int (*delete_key)(struct st_heap_info *info, struct st_hp_keydef *keyinfo, + const uchar *record, uchar *recpos, int flag); + uint (*get_key_length)(struct st_hp_keydef *keydef, const uchar *key); +} HP_KEYDEF; + +typedef struct st_heap_share +{ + HP_BLOCK block; + HP_KEYDEF *keydef; + ulonglong data_length,index_length,max_table_size; + ulonglong auto_increment; + ulong min_records,max_records; /* Params to open */ + ulong records; /* records */ + ulong blength; /* records rounded up to 2^n */ + ulong deleted; /* Deleted records in database */ + uint key_stat_version; /* version to indicate insert/delete */ + uint key_version; /* Updated on key change */ + uint file_version; /* Update on clear */ + uint reclength; /* Length of one record */ + uint changed; + uint keys,max_key_length; + uint currently_disabled_keys; /* saved value from "keys" when disabled */ + uint open_count; + uchar *del_link; /* Link to next block with del. rec */ + char * name; /* Name of "memory-file" */ + time_t create_time; + THR_LOCK lock; + mysql_mutex_t intern_lock; /* Locking for use with _locking */ + my_bool delete_on_close; + my_bool internal; /* Internal temporary table */ + LIST open_list; + uint auto_key; + uint auto_key_type; /* real type of the auto key segment */ +} HP_SHARE; + +struct st_hp_hash_info; + +typedef struct st_heap_info +{ + HP_SHARE *s; + uchar *current_ptr; + struct st_hp_hash_info *current_hash_ptr; + ulong current_record,next_block; + int lastinx,errkey; + int mode; /* Mode of file (READONLY..) */ + uint opt_flag,update; + uchar *lastkey; /* Last used key with rkey */ + uchar *recbuf; /* Record buffer for rb-tree keys */ + enum ha_rkey_function last_find_flag; + TREE_ELEMENT *parents[MAX_TREE_HEIGHT+1]; + TREE_ELEMENT **last_pos; + uint key_version; /* Version at last read */ + uint file_version; /* Version at scan */ + uint lastkey_len; + my_bool implicit_emptied; + THR_LOCK_DATA lock; + LIST open_list; +} HP_INFO; + + +typedef struct st_heap_create_info +{ + HP_KEYDEF *keydef; + uint auto_key; /* keynr [1 - maxkey] for auto key */ + uint auto_key_type; + uint keys; + uint reclength; + ulong max_records; + ulong min_records; + ulonglong max_table_size; + ulonglong auto_increment; + my_bool with_auto_increment; + my_bool internal_table; + /* + TRUE if heap_create should 'pin' the created share by setting + open_count to 1. Is only looked at if not internal_table. + */ + my_bool pin_share; +} HP_CREATE_INFO; + + /* Prototypes for heap-functions */ + +extern HP_INFO *heap_open(const char *name, int mode); +extern HP_INFO *heap_open_from_share(HP_SHARE *share, int mode); +extern HP_INFO *heap_open_from_share_and_register(HP_SHARE *share, int mode); +extern void heap_release_share(HP_SHARE *share, my_bool internal_table); +extern int heap_close(HP_INFO *info); +extern int heap_write(HP_INFO *info,const uchar *buff); +extern int heap_update(HP_INFO *info,const uchar *old,const uchar *newdata); +extern int heap_rrnd(HP_INFO *info,uchar *buf,uchar *pos); +extern int heap_scan_init(HP_INFO *info); +extern int heap_scan(register HP_INFO *info, uchar *record); +extern int heap_delete(HP_INFO *info,const uchar *buff); +extern int heap_info(HP_INFO *info,HEAPINFO *x,int flag); +extern int heap_create(const char *name, + HP_CREATE_INFO *create_info, HP_SHARE **share, + my_bool *created_new_share); +extern int heap_delete_table(const char *name); +extern void heap_drop_table(HP_INFO *info); +extern int heap_extra(HP_INFO *info,enum ha_extra_function function); +extern int heap_reset(HP_INFO *info); +extern int heap_rename(const char *old_name,const char *new_name); +extern int heap_panic(enum ha_panic_function flag); +extern int heap_rsame(HP_INFO *info,uchar *record,int inx); +extern int heap_rnext(HP_INFO *info,uchar *record); +extern int heap_rprev(HP_INFO *info,uchar *record); +extern int heap_rfirst(HP_INFO *info,uchar *record,int inx); +extern int heap_rlast(HP_INFO *info,uchar *record,int inx); +extern void heap_clear(HP_INFO *info); +extern void heap_clear_keys(HP_INFO *info); +extern int heap_disable_indexes(HP_INFO *info); +extern int heap_enable_indexes(HP_INFO *info); +extern int heap_indexes_are_disabled(HP_INFO *info); +extern void heap_update_auto_increment(HP_INFO *info, const uchar *record); +ha_rows hp_rb_records_in_range(HP_INFO *info, int inx, key_range *min_key, + key_range *max_key); +int hp_panic(enum ha_panic_function flag); +int heap_rkey(HP_INFO *info, uchar *record, int inx, const uchar *key, + key_part_map keypart_map, enum ha_rkey_function find_flag); +extern uchar * heap_find(HP_INFO *info,int inx,const uchar *key); +extern int heap_check_heap(HP_INFO *info, my_bool print_status); +extern uchar *heap_position(HP_INFO *info); + +/* The following is for programs that uses the old HEAP interface where + pointer to rows where a long instead of a (uchar*). +*/ + +#if defined(WANT_OLD_HEAP_VERSION) || defined(OLD_HEAP_VERSION) +extern int heap_rrnd_old(HP_INFO *info,uchar *buf,ulong pos); +extern ulong heap_position_old(HP_INFO *info); +#endif +#ifdef OLD_HEAP_VERSION +typedef ulong HEAP_PTR; +#define heap_position(A) heap_position_old(A) +#define heap_rrnd(A,B,C) heap_rrnd_old(A,B,C) +#else +typedef uchar *HEAP_PTR; +#endif + +#ifdef __cplusplus +} +#endif +#endif diff --git a/EQ2/source/depends/mariadb-10.1.19/include/keycache.h b/EQ2/source/depends/mariadb-10.1.19/include/keycache.h new file mode 100644 index 000000000..85937ebef --- /dev/null +++ b/EQ2/source/depends/mariadb-10.1.19/include/keycache.h @@ -0,0 +1,212 @@ +/* Copyright (c) 2003, 2010, Oracle and/or its affiliates. All rights reserved. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; version 2 of the License. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ + +/* Key cache variable structures */ + +#ifndef _keycache_h +#define _keycache_h + +#include "my_sys.h" /* flush_type */ + +C_MODE_START + +/* + Currently the default key cache is created as non-partitioned at + the start of the server unless the server is started with the parameter + --key-cache-partitions that is greater than 0 +*/ + +#define DEFAULT_KEY_CACHE_PARTITIONS 0 + +/* + MAX_KEY_CACHE_PARTITIONS cannot be greater than + sizeof(MYISAM_SHARE::dirty_part_map) + Currently sizeof(MYISAM_SHARE::dirty_part_map)=sizeof(ulonglong) +*/ + +#define MAX_KEY_CACHE_PARTITIONS 64 + +/* The structure to get statistical data about a key cache */ + +typedef struct st_key_cache_statistics +{ + ulonglong mem_size; /* memory for cache buffers/auxiliary structures */ + ulonglong block_size; /* size of the each buffers in the key cache */ + ulonglong blocks_used; /* maximum number of used blocks/buffers */ + ulonglong blocks_unused; /* number of currently unused blocks */ + ulonglong blocks_changed; /* number of currently dirty blocks */ + ulonglong blocks_warm; /* number of blocks in warm sub-chain */ + ulonglong read_requests; /* number of read requests (read hits) */ + ulonglong reads; /* number of actual reads from files into buffers */ + ulonglong write_requests; /* number of write requests (write hits) */ + ulonglong writes; /* number of actual writes from buffers into files */ +} KEY_CACHE_STATISTICS; + +#define NUM_LONG_KEY_CACHE_STAT_VARIABLES 3 + +/* The type of a key cache object */ +typedef enum key_cache_type +{ + SIMPLE_KEY_CACHE, + PARTITIONED_KEY_CACHE +} KEY_CACHE_TYPE; + + +typedef + int (*INIT_KEY_CACHE) + (void *, uint key_cache_block_size, + size_t use_mem, uint division_limit, uint age_threshold, + uint changed_blocks_hash_size); +typedef + int (*RESIZE_KEY_CACHE) + (void *, uint key_cache_block_size, + size_t use_mem, uint division_limit, uint age_threshold, + uint changed_blocks_hash_size); +typedef + void (*CHANGE_KEY_CACHE_PARAM) + (void *keycache_cb, + uint division_limit, uint age_threshold); +typedef + uchar* (*KEY_CACHE_READ) + (void *keycache_cb, + File file, my_off_t filepos, int level, + uchar *buff, uint length, + uint block_length, int return_buffer); +typedef + int (*KEY_CACHE_INSERT) + (void *keycache_cb, + File file, my_off_t filepos, int level, + uchar *buff, uint length); +typedef + int (*KEY_CACHE_WRITE) + (void *keycache_cb, + File file, void *file_extra, + my_off_t filepos, int level, + uchar *buff, uint length, + uint block_length, int force_write); +typedef + int (*FLUSH_KEY_BLOCKS) + (void *keycache_cb, + int file, void *file_extra, + enum flush_type type); +typedef + int (*RESET_KEY_CACHE_COUNTERS) + (const char *name, void *keycache_cb); +typedef + void (*END_KEY_CACHE) + (void *keycache_cb, my_bool cleanup); +typedef + void (*GET_KEY_CACHE_STATISTICS) + (void *keycache_cb, uint partition_no, + KEY_CACHE_STATISTICS *key_cache_stats); + +/* + An object of the type KEY_CACHE_FUNCS contains pointers to all functions + from the key cache interface. + Currently a key cache can be of two types: simple and partitioned. + For each of them its own static structure of the type KEY_CACHE_FUNCS is + defined . The structures contain the pointers to the implementations of + the interface functions used by simple key caches and partitioned key + caches respectively. Pointers to these structures are assigned to key cache + objects at the time of their creation. +*/ + +typedef struct st_key_cache_funcs +{ + INIT_KEY_CACHE init; + RESIZE_KEY_CACHE resize; + CHANGE_KEY_CACHE_PARAM change_param; + KEY_CACHE_READ read; + KEY_CACHE_INSERT insert; + KEY_CACHE_WRITE write; + FLUSH_KEY_BLOCKS flush; + RESET_KEY_CACHE_COUNTERS reset_counters; + END_KEY_CACHE end; + GET_KEY_CACHE_STATISTICS get_stats; +} KEY_CACHE_FUNCS; + + +typedef struct st_key_cache +{ + KEY_CACHE_TYPE key_cache_type; /* type of the key cache used for debugging */ + void *keycache_cb; /* control block of the used key cache */ + KEY_CACHE_FUNCS *interface_funcs; /* interface functions of the key cache */ + ulonglong param_buff_size; /* size the memory allocated for the cache */ + ulonglong param_block_size; /* size of the blocks in the key cache */ + ulonglong param_division_limit;/* min. percentage of warm blocks */ + ulonglong param_age_threshold; /* determines when hot block is downgraded */ + ulonglong param_partitions; /* number of the key cache partitions */ + ulonglong changed_blocks_hash_size; /* number of hash buckets for changed files */ + my_bool key_cache_inited; /* <=> key cache has been created */ + my_bool can_be_used; /* usage of cache for read/write is allowed */ + my_bool in_init; /* set to 1 in MySQL during init/resize */ + uint partitions; /* actual number of partitions */ + size_t key_cache_mem_size; /* specified size of the cache memory */ + pthread_mutex_t op_lock; /* to serialize operations like 'resize' */ +} KEY_CACHE; + + +/* The default key cache */ +extern KEY_CACHE dflt_key_cache_var, *dflt_key_cache; + +extern int init_key_cache(KEY_CACHE *keycache, uint key_cache_block_size, + size_t use_mem, uint division_limit, + uint age_threshold, uint changed_blocks_hash_size, + uint partitions); +extern int resize_key_cache(KEY_CACHE *keycache, uint key_cache_block_size, + size_t use_mem, uint division_limit, + uint age_threshold, uint changed_blocks_hash_size); +extern void change_key_cache_param(KEY_CACHE *keycache, uint division_limit, + uint age_threshold); +extern uchar *key_cache_read(KEY_CACHE *keycache, + File file, my_off_t filepos, int level, + uchar *buff, uint length, + uint block_length,int return_buffer); +extern int key_cache_insert(KEY_CACHE *keycache, + File file, my_off_t filepos, int level, + uchar *buff, uint length); +extern int key_cache_write(KEY_CACHE *keycache, + File file, void *file_extra, + my_off_t filepos, int level, + uchar *buff, uint length, + uint block_length, int force_write); +extern int flush_key_blocks(KEY_CACHE *keycache, + int file, void *file_extra, + enum flush_type type); +extern void end_key_cache(KEY_CACHE *keycache, my_bool cleanup); +extern void get_key_cache_statistics(KEY_CACHE *keycache, + uint partition_no, + KEY_CACHE_STATISTICS *key_cache_stats); + +/* Functions to handle multiple key caches */ +extern my_bool multi_keycache_init(void); +extern void multi_keycache_free(void); +extern KEY_CACHE *multi_key_cache_search(uchar *key, uint length, + KEY_CACHE *def); +extern my_bool multi_key_cache_set(const uchar *key, uint length, + KEY_CACHE *key_cache); +extern void multi_key_cache_change(KEY_CACHE *old_data, + KEY_CACHE *new_data); +extern int reset_key_cache_counters(const char *name, + KEY_CACHE *key_cache, void *); +extern int repartition_key_cache(KEY_CACHE *keycache, + uint key_cache_block_size, + size_t use_mem, + uint division_limit, + uint age_threshold, + uint changed_blocks_hash_size, + uint partitions); +C_MODE_END +#endif /* _keycache_h */ diff --git a/EQ2/source/depends/mariadb-10.1.19/include/lf.h b/EQ2/source/depends/mariadb-10.1.19/include/lf.h new file mode 100644 index 000000000..19bdafce6 --- /dev/null +++ b/EQ2/source/depends/mariadb-10.1.19/include/lf.h @@ -0,0 +1,186 @@ +/* Copyright (c) 2007, 2010, Oracle and/or its affiliates. All rights reserved. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; version 2 of the License. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ + +#ifndef INCLUDE_LF_INCLUDED +#define INCLUDE_LF_INCLUDED + +#include + +C_MODE_START + +/* + wait-free dynamic array, see lf_dynarray.c + + 4 levels of 256 elements each mean 4311810304 elements in an array - it + should be enough for a while +*/ +#define LF_DYNARRAY_LEVEL_LENGTH 256 +#define LF_DYNARRAY_LEVELS 4 + +typedef struct { + void * volatile level[LF_DYNARRAY_LEVELS]; + uint size_of_element; +} LF_DYNARRAY; + +typedef int (*lf_dynarray_func)(void *, void *); + +void lf_dynarray_init(LF_DYNARRAY *array, uint element_size); +void lf_dynarray_destroy(LF_DYNARRAY *array); + +void *lf_dynarray_value(LF_DYNARRAY *array, uint idx); +void *lf_dynarray_lvalue(LF_DYNARRAY *array, uint idx); +int lf_dynarray_iterate(LF_DYNARRAY *array, lf_dynarray_func func, void *arg); + +/* + pin manager for memory allocator, lf_alloc-pin.c +*/ + +#define LF_PINBOX_PINS 4 +#define LF_PURGATORY_SIZE 100 + +typedef void lf_pinbox_free_func(void *, void *, void*); + +typedef struct { + LF_DYNARRAY pinarray; + lf_pinbox_free_func *free_func; + void *free_func_arg; + uint free_ptr_offset; + uint32 volatile pinstack_top_ver; /* this is a versioned pointer */ + uint32 volatile pins_in_array; /* number of elements in array */ +} LF_PINBOX; + +typedef struct { + void * volatile pin[LF_PINBOX_PINS]; + LF_PINBOX *pinbox; + void **stack_ends_here; + void *purgatory; + uint32 purgatory_count; + uint32 volatile link; +/* we want sizeof(LF_PINS) to be 128 to avoid false sharing */ + char pad[128-sizeof(uint32)*2 + -sizeof(LF_PINBOX *) + -sizeof(void*) + -sizeof(void *)*(LF_PINBOX_PINS+1)]; +} LF_PINS; + +/* compile-time assert to make sure we have enough pins. */ +#define lf_pin(PINS, PIN, ADDR) \ + do { \ + compile_time_assert(PIN < LF_PINBOX_PINS); \ + my_atomic_storeptr(&(PINS)->pin[PIN], (ADDR)); \ + } while(0) + +#define lf_unpin(PINS, PIN) lf_pin(PINS, PIN, NULL) +#define lf_assert_pin(PINS, PIN) assert((PINS)->pin[PIN] != 0) +#define lf_assert_unpin(PINS, PIN) assert((PINS)->pin[PIN] == 0) + +void lf_pinbox_init(LF_PINBOX *pinbox, uint free_ptr_offset, + lf_pinbox_free_func *free_func, void * free_func_arg); +void lf_pinbox_destroy(LF_PINBOX *pinbox); + +LF_PINS *lf_pinbox_get_pins(LF_PINBOX *pinbox); +void lf_pinbox_put_pins(LF_PINS *pins); +void lf_pinbox_free(LF_PINS *pins, void *addr); + +/* + memory allocator, lf_alloc-pin.c +*/ + +typedef struct st_lf_allocator { + LF_PINBOX pinbox; + uchar * volatile top; + uint element_size; + uint32 volatile mallocs; + void (*constructor)(uchar *); /* called, when an object is malloc()'ed */ + void (*destructor)(uchar *); /* called, when an object is free()'d */ +} LF_ALLOCATOR; + +void lf_alloc_init(LF_ALLOCATOR *allocator, uint size, uint free_ptr_offset); +void lf_alloc_destroy(LF_ALLOCATOR *allocator); +uint lf_alloc_pool_count(LF_ALLOCATOR *allocator); +/* + shortcut macros to access underlying pinbox functions from an LF_ALLOCATOR + see lf_pinbox_get_pins() and lf_pinbox_put_pins() +*/ +#define lf_alloc_free(PINS, PTR) lf_pinbox_free((PINS), (PTR)) +#define lf_alloc_get_pins(A) lf_pinbox_get_pins(&(A)->pinbox) +#define lf_alloc_put_pins(PINS) lf_pinbox_put_pins(PINS) +#define lf_alloc_direct_free(ALLOC, ADDR) \ + do { \ + if ((ALLOC)->destructor) \ + (ALLOC)->destructor((uchar*) ADDR); \ + my_free(ADDR); \ + } while(0) + +void *lf_alloc_new(LF_PINS *pins); + +C_MODE_END + +/* + extendible hash, lf_hash.c +*/ +#include + +C_MODE_START + +typedef struct st_lf_hash LF_HASH; +typedef void (*lf_hash_initializer)(LF_HASH *hash, void *dst, const void *src); + +#define LF_HASH_UNIQUE 1 + +/* lf_hash overhead per element (that is, sizeof(LF_SLIST) */ +extern const int LF_HASH_OVERHEAD; + +struct st_lf_hash { + LF_DYNARRAY array; /* hash itself */ + LF_ALLOCATOR alloc; /* allocator for elements */ + my_hash_get_key get_key; /* see HASH */ + lf_hash_initializer initializer; /* called when an element is inserted */ + my_hash_function hash_function; /* see HASH */ + CHARSET_INFO *charset; /* see HASH */ + uint key_offset, key_length; /* see HASH */ + uint element_size; /* size of memcpy'ed area on insert */ + uint flags; /* LF_HASH_UNIQUE, etc */ + int32 volatile size; /* size of array */ + int32 volatile count; /* number of elements in the hash */ +}; + +void lf_hash_init(LF_HASH *hash, uint element_size, uint flags, + uint key_offset, uint key_length, my_hash_get_key get_key, + CHARSET_INFO *charset); +void lf_hash_destroy(LF_HASH *hash); +int lf_hash_insert(LF_HASH *hash, LF_PINS *pins, const void *data); +void *lf_hash_search(LF_HASH *hash, LF_PINS *pins, const void *key, uint keylen); +void *lf_hash_search_using_hash_value(LF_HASH *hash, LF_PINS *pins, + my_hash_value_type hash_value, + const void *key, uint keylen); +int lf_hash_delete(LF_HASH *hash, LF_PINS *pins, const void *key, uint keylen); +int lf_hash_iterate(LF_HASH *hash, LF_PINS *pins, + my_hash_walk_action action, void *argument); +/* + shortcut macros to access underlying pinbox functions from an LF_HASH + see lf_pinbox_get_pins() and lf_pinbox_put_pins() +*/ +#define lf_hash_get_pins(HASH) lf_alloc_get_pins(&(HASH)->alloc) +#define lf_hash_put_pins(PINS) lf_pinbox_put_pins(PINS) +#define lf_hash_search_unpin(PINS) lf_unpin((PINS), 2) +/* + cleanup +*/ + +C_MODE_END + +#endif + diff --git a/EQ2/source/depends/mariadb-10.1.19/include/little_endian.h b/EQ2/source/depends/mariadb-10.1.19/include/little_endian.h new file mode 100644 index 000000000..7223fea64 --- /dev/null +++ b/EQ2/source/depends/mariadb-10.1.19/include/little_endian.h @@ -0,0 +1,75 @@ +/* Copyright (c) 2012, Oracle and/or its affiliates. All rights reserved. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; version 2 of the License. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02111-1307 USA */ + +/* + Data in little-endian format. +*/ + +#ifndef MY_BYTE_ORDER_ARCH_OPTIMIZED +#define float4get(V,M) memcpy(&V, (M), sizeof(float)) +#define float4store(V,M) memcpy(V, (&M), sizeof(float)) +#define float8get(V,M) doubleget((V),(M)) +#define float8store(V,M) doublestore((V),(M)) + +/* Bi-endian hardware.... */ +#if defined(__FLOAT_WORD_ORDER) && (__FLOAT_WORD_ORDER == __BIG_ENDIAN) +#define doublestore(T,V) do { *(((char*)T)+0)=(char) ((uchar *) &V)[4];\ + *(((char*)T)+1)=(char) ((uchar *) &V)[5];\ + *(((char*)T)+2)=(char) ((uchar *) &V)[6];\ + *(((char*)T)+3)=(char) ((uchar *) &V)[7];\ + *(((char*)T)+4)=(char) ((uchar *) &V)[0];\ + *(((char*)T)+5)=(char) ((uchar *) &V)[1];\ + *(((char*)T)+6)=(char) ((uchar *) &V)[2];\ + *(((char*)T)+7)=(char) ((uchar *) &V)[3]; }\ + while(0) +#define doubleget(V,M) do { double def_temp;\ + ((uchar*) &def_temp)[0]=(M)[4];\ + ((uchar*) &def_temp)[1]=(M)[5];\ + ((uchar*) &def_temp)[2]=(M)[6];\ + ((uchar*) &def_temp)[3]=(M)[7];\ + ((uchar*) &def_temp)[4]=(M)[0];\ + ((uchar*) &def_temp)[5]=(M)[1];\ + ((uchar*) &def_temp)[6]=(M)[2];\ + ((uchar*) &def_temp)[7]=(M)[3];\ + (V) = def_temp; } while(0) +#else /* Bi-endian hardware.... */ + +/* Cast away type qualifiers (necessary as macro takes argument by value). */ +#define doublestore(T,V) memcpy((T), (void*) &V, sizeof(double)) +#define doubleget(V,M) memcpy(&V, (M), sizeof(double)) + +#endif /* Bi-endian hardware.... */ + +#endif /* !MY_BYTE_ORDER_ARCH_OPTIMIZED */ + +#define ushortget(V,M) do { uchar *pM= (uchar*)(M);V = uint2korr(pM);} while(0) +#define shortget(V,M) do { uchar *pM= (uchar*)(M);V = sint2korr(pM);} while(0) +#define longget(V,M) do { uchar *pM= (uchar*)(M);V = sint4korr(pM);} while(0) +#define ulongget(V,M) do { uchar *pM= (uchar*)(M);V = uint4korr(pM);} while(0) +#define shortstore(T,V) int2store(T,V) +#define longstore(T,V) int4store(T,V) + +#ifndef floatstore +/* Cast away type qualifiers (necessary as macro takes argument by value). */ +#define floatstore(T,V) memcpy((T), (void*) (&V), sizeof(float)) +#define floatget(V,M) memcpy(&V, (M), sizeof(float)) +#endif +#ifndef doubleget +#define doubleget(V,M) memcpy(&V, (M), sizeof(double)) +#define doublestore(T,V) memcpy((T), (void *) &V, sizeof(double)) +#endif /* doubleget */ + +#define longlongget(V,M) memcpy(&V, (M), sizeof(ulonglong)) +#define longlongstore(T,V) memcpy((T), &V, sizeof(ulonglong)) diff --git a/EQ2/source/depends/mariadb-10.1.19/include/m_ctype.h b/EQ2/source/depends/mariadb-10.1.19/include/m_ctype.h new file mode 100644 index 000000000..dcbfb604f --- /dev/null +++ b/EQ2/source/depends/mariadb-10.1.19/include/m_ctype.h @@ -0,0 +1,1004 @@ +/* Copyright (c) 2000, 2013, Oracle and/or its affiliates. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; version 2 of the License. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ + +/* + A better inplementation of the UNIX ctype(3) library. +*/ + +#ifndef _m_ctype_h +#define _m_ctype_h + +#include +#include "my_global.h" /* uint16, uchar */ + +enum loglevel { + ERROR_LEVEL= 0, + WARNING_LEVEL= 1, + INFORMATION_LEVEL= 2 +}; + +#ifdef __cplusplus +extern "C" { +#endif + +#define MY_CS_NAME_SIZE 32 +#define MY_CS_CTYPE_TABLE_SIZE 257 +#define MY_CS_TO_LOWER_TABLE_SIZE 256 +#define MY_CS_TO_UPPER_TABLE_SIZE 256 +#define MY_CS_SORT_ORDER_TABLE_SIZE 256 +#define MY_CS_TO_UNI_TABLE_SIZE 256 + +#define CHARSET_DIR "charsets/" + +#define my_wc_t ulong + +#define MY_CS_REPLACEMENT_CHARACTER 0xFFFD + +/* + On i386 we store Unicode->CS conversion tables for + some character sets using Big-endian order, + to copy two bytes at onces. + This gives some performance improvement. +*/ +#ifdef __i386__ +#define MB2(x) (((x) >> 8) + (((x) & 0xFF) << 8)) +#define MY_PUT_MB2(s, code) { *((uint16*)(s))= (code); } +#else +#define MB2(x) (x) +#define MY_PUT_MB2(s, code) { (s)[0]= code >> 8; (s)[1]= code & 0xFF; } +#endif + +typedef const struct my_charset_handler_st MY_CHARSET_HANDLER; +typedef const struct my_collation_handler_st MY_COLLATION_HANDLER; + +typedef const struct unicase_info_st MY_UNICASE_INFO; +typedef const struct uni_ctype_st MY_UNI_CTYPE; +typedef const struct my_uni_idx_st MY_UNI_IDX; + +typedef struct unicase_info_char_st +{ + uint32 toupper; + uint32 tolower; + uint32 sort; +} MY_UNICASE_CHARACTER; + + +struct unicase_info_st +{ + my_wc_t maxchar; + MY_UNICASE_CHARACTER **page; +}; + + +extern MY_UNICASE_INFO my_unicase_default; +extern MY_UNICASE_INFO my_unicase_turkish; +extern MY_UNICASE_INFO my_unicase_mysql500; +extern MY_UNICASE_INFO my_unicase_unicode520; + +#define MY_UCA_MAX_CONTRACTION 6 +/* + The DUCET tables in ctype-uca.c are dumped with a limit of 8 weights + per character. cs->strxfrm_multiply is set to 8 for all UCA based collations. + + In language-specific UCA collations (with tailorings) we also do not allow + a single character to have more than 8 weights to stay with the same + strxfrm_multiply limit. Note, contractions are allowed to have twice longer + weight strings (up to 16 weights). As a contraction consists of at + least 2 characters, this makes sure that strxfrm_multiply ratio of 8 + is respected. +*/ +#define MY_UCA_MAX_WEIGHT_SIZE (8+1) /* Including 0 terminator */ +#define MY_UCA_CONTRACTION_MAX_WEIGHT_SIZE (2*8+1) /* Including 0 terminator */ +#define MY_UCA_WEIGHT_LEVELS 2 + +typedef struct my_contraction_t +{ + my_wc_t ch[MY_UCA_MAX_CONTRACTION]; /* Character sequence */ + uint16 weight[MY_UCA_CONTRACTION_MAX_WEIGHT_SIZE];/* Its weight string, 0-terminated */ + my_bool with_context; +} MY_CONTRACTION; + + +typedef struct my_contraction_list_t +{ + size_t nitems; /* Number of items in the list */ + MY_CONTRACTION *item; /* List of contractions */ + char *flags; /* Character flags, e.g. "is contraction head") */ +} MY_CONTRACTIONS; + +my_bool my_uca_can_be_contraction_head(const MY_CONTRACTIONS *c, my_wc_t wc); +my_bool my_uca_can_be_contraction_tail(const MY_CONTRACTIONS *c, my_wc_t wc); +uint16 *my_uca_contraction2_weight(const MY_CONTRACTIONS *c, + my_wc_t wc1, my_wc_t wc2); + + +/* Collation weights on a single level (e.g. primary, secondary, tertiarty) */ +typedef struct my_uca_level_info_st +{ + my_wc_t maxchar; + uchar *lengths; + uint16 **weights; + MY_CONTRACTIONS contractions; + uint levelno; +} MY_UCA_WEIGHT_LEVEL; + + +typedef struct uca_info_st +{ + MY_UCA_WEIGHT_LEVEL level[MY_UCA_WEIGHT_LEVELS]; + + /* Logical positions */ + my_wc_t first_non_ignorable; + my_wc_t last_non_ignorable; + my_wc_t first_primary_ignorable; + my_wc_t last_primary_ignorable; + my_wc_t first_secondary_ignorable; + my_wc_t last_secondary_ignorable; + my_wc_t first_tertiary_ignorable; + my_wc_t last_tertiary_ignorable; + my_wc_t first_trailing; + my_wc_t last_trailing; + my_wc_t first_variable; + my_wc_t last_variable; + +} MY_UCA_INFO; + + + +extern MY_UCA_INFO my_uca_v400; + + +struct uni_ctype_st +{ + uchar pctype; + const uchar *ctype; +}; + +extern MY_UNI_CTYPE my_uni_ctype[256]; + +/* wm_wc and wc_mb return codes */ +#define MY_CS_ILSEQ 0 /* Wrong by sequence: wb_wc */ +#define MY_CS_ILUNI 0 /* Cannot encode Unicode to charset: wc_mb */ +#define MY_CS_TOOSMALL -101 /* Need at least one byte: wc_mb and mb_wc */ +#define MY_CS_TOOSMALL2 -102 /* Need at least two bytes: wc_mb and mb_wc */ +#define MY_CS_TOOSMALL3 -103 /* Need at least three bytes: wc_mb and mb_wc */ +/* These following three are currently not really used */ +#define MY_CS_TOOSMALL4 -104 /* Need at least 4 bytes: wc_mb and mb_wc */ +#define MY_CS_TOOSMALL5 -105 /* Need at least 5 bytes: wc_mb and mb_wc */ +#define MY_CS_TOOSMALL6 -106 /* Need at least 6 bytes: wc_mb and mb_wc */ +/* A helper macros for "need at least n bytes" */ +#define MY_CS_TOOSMALLN(n) (-100-(n)) + +#define MY_SEQ_INTTAIL 1 +#define MY_SEQ_SPACES 2 + + /* My charsets_list flags */ +#define MY_CS_COMPILED 1 /* compiled-in sets */ +#define MY_CS_CONFIG 2 /* sets that have a *.conf file */ +#define MY_CS_INDEX 4 /* sets listed in the Index file */ +#define MY_CS_LOADED 8 /* sets that are currently loaded */ +#define MY_CS_BINSORT 16 /* if binary sort order */ +#define MY_CS_PRIMARY 32 /* if primary collation */ +#define MY_CS_STRNXFRM 64 /* if strnxfrm is used for sort */ +#define MY_CS_UNICODE 128 /* is a charset is BMP Unicode */ +#define MY_CS_READY 256 /* if a charset is initialized */ +#define MY_CS_AVAILABLE 512 /* If either compiled-in or loaded*/ +#define MY_CS_CSSORT 1024 /* if case sensitive sort order */ +#define MY_CS_HIDDEN 2048 /* don't display in SHOW */ +#define MY_CS_PUREASCII 4096 /* if a charset is pure ascii */ +#define MY_CS_NONASCII 8192 /* if not ASCII-compatible */ +#define MY_CS_UNICODE_SUPPLEMENT 16384 /* Non-BMP Unicode characters */ +#define MY_CS_LOWER_SORT 32768 /* If use lower case as weight */ +#define MY_CS_STRNXFRM_BAD_NWEIGHTS 0x10000 /* strnxfrm ignores "nweights" */ +#define MY_CS_NOPAD 0x20000 /* if does not ignore trailing spaces */ +#define MY_CS_NON1TO1 0x40000 /* Has a complex mapping from characters + to weights, e.g. contractions, expansions, + ignorable characters */ +#define MY_CHARSET_UNDEFINED 0 + +/* Character repertoire flags */ +#define MY_REPERTOIRE_ASCII 1 /* Pure ASCII U+0000..U+007F */ +#define MY_REPERTOIRE_EXTENDED 2 /* Extended characters: U+0080..U+FFFF */ +#define MY_REPERTOIRE_UNICODE30 3 /* ASCII | EXTENDED: U+0000..U+FFFF */ + +/* Flags for strxfrm */ +#define MY_STRXFRM_LEVEL1 0x00000001 /* for primary weights */ +#define MY_STRXFRM_LEVEL2 0x00000002 /* for secondary weights */ +#define MY_STRXFRM_LEVEL3 0x00000004 /* for tertiary weights */ +#define MY_STRXFRM_LEVEL4 0x00000008 /* fourth level weights */ +#define MY_STRXFRM_LEVEL5 0x00000010 /* fifth level weights */ +#define MY_STRXFRM_LEVEL6 0x00000020 /* sixth level weights */ +#define MY_STRXFRM_LEVEL_ALL 0x0000003F /* Bit OR for the above six */ +#define MY_STRXFRM_NLEVELS 6 /* Number of possible levels*/ + +#define MY_STRXFRM_PAD_WITH_SPACE 0x00000040 /* if pad result with spaces */ +#define MY_STRXFRM_PAD_TO_MAXLEN 0x00000080 /* if pad tail(for filesort) */ + +#define MY_STRXFRM_DESC_LEVEL1 0x00000100 /* if desc order for level1 */ +#define MY_STRXFRM_DESC_LEVEL2 0x00000200 /* if desc order for level2 */ +#define MY_STRXFRM_DESC_LEVEL3 0x00000300 /* if desc order for level3 */ +#define MY_STRXFRM_DESC_LEVEL4 0x00000800 /* if desc order for level4 */ +#define MY_STRXFRM_DESC_LEVEL5 0x00001000 /* if desc order for level5 */ +#define MY_STRXFRM_DESC_LEVEL6 0x00002000 /* if desc order for level6 */ +#define MY_STRXFRM_DESC_SHIFT 8 + +#define MY_STRXFRM_UNUSED_00004000 0x00004000 /* for future extensions */ +#define MY_STRXFRM_UNUSED_00008000 0x00008000 /* for future extensions */ + +#define MY_STRXFRM_REVERSE_LEVEL1 0x00010000 /* if reverse order for level1 */ +#define MY_STRXFRM_REVERSE_LEVEL2 0x00020000 /* if reverse order for level2 */ +#define MY_STRXFRM_REVERSE_LEVEL3 0x00040000 /* if reverse order for level3 */ +#define MY_STRXFRM_REVERSE_LEVEL4 0x00080000 /* if reverse order for level4 */ +#define MY_STRXFRM_REVERSE_LEVEL5 0x00100000 /* if reverse order for level5 */ +#define MY_STRXFRM_REVERSE_LEVEL6 0x00200000 /* if reverse order for level6 */ +#define MY_STRXFRM_REVERSE_SHIFT 16 + +/* + Collation IDs for MariaDB that should not conflict with MySQL. + We reserve 256..511, because MySQL will most likely use this range + when the range 0..255 is full. + + We use the next 256 IDs starting from 512 and divide + them into 8 chunks, 32 collations each, as follows: + + 512 + (0..31) for single byte collations (e.g. latin9) + 512 + (32..63) reserved (e.g. for utf32le, or more single byte collations) + 512 + (64..95) for utf8 + 512 + (96..127) for utf8mb4 + 512 + (128..159) for ucs2 + 512 + (160..192) for utf16 + 512 + (192..223) for utf16le + 512 + (224..255) for utf32 +*/ +#define MY_PAGE2_COLLATION_ID_8BIT 0x200 +#define MY_PAGE2_COLLATION_ID_RESERVED 0x220 +#define MY_PAGE2_COLLATION_ID_UTF8 0x240 +#define MY_PAGE2_COLLATION_ID_UTF8MB4 0x260 +#define MY_PAGE2_COLLATION_ID_UCS2 0x280 +#define MY_PAGE2_COLLATION_ID_UTF16 0x2A0 +#define MY_PAGE2_COLLATION_ID_UTF16LE 0x2C0 +#define MY_PAGE2_COLLATION_ID_UTF32 0x2E0 + +struct my_uni_idx_st +{ + uint16 from; + uint16 to; + const uchar *tab; +}; + +typedef struct +{ + uint beg; + uint end; + uint mb_len; +} my_match_t; + +enum my_lex_states +{ + MY_LEX_START, MY_LEX_CHAR, MY_LEX_IDENT, + MY_LEX_IDENT_SEP, MY_LEX_IDENT_START, + MY_LEX_REAL, MY_LEX_HEX_NUMBER, MY_LEX_BIN_NUMBER, + MY_LEX_CMP_OP, MY_LEX_LONG_CMP_OP, MY_LEX_STRING, MY_LEX_COMMENT, MY_LEX_END, + MY_LEX_OPERATOR_OR_IDENT, MY_LEX_NUMBER_IDENT, MY_LEX_INT_OR_REAL, + MY_LEX_REAL_OR_POINT, MY_LEX_BOOL, MY_LEX_EOL, MY_LEX_ESCAPE, + MY_LEX_LONG_COMMENT, MY_LEX_END_LONG_COMMENT, MY_LEX_SEMICOLON, + MY_LEX_SET_VAR, MY_LEX_USER_END, MY_LEX_HOSTNAME, MY_LEX_SKIP, + MY_LEX_USER_VARIABLE_DELIMITER, MY_LEX_SYSTEM_VAR, + MY_LEX_IDENT_OR_KEYWORD, + MY_LEX_IDENT_OR_HEX, MY_LEX_IDENT_OR_BIN, MY_LEX_IDENT_OR_NCHAR, + MY_LEX_STRING_OR_DELIMITER, MY_LEX_MINUS_OR_COMMENT, MY_LEX_PLACEHOLDER, + MY_LEX_COMMA +}; + +struct charset_info_st; + +typedef struct my_charset_loader_st +{ + char error[128]; + void *(*once_alloc)(size_t); + void *(*malloc)(size_t); + void *(*realloc)(void *, size_t); + void (*free)(void *); + void (*reporter)(enum loglevel, const char *format, ...); + int (*add_collation)(struct charset_info_st *cs); +} MY_CHARSET_LOADER; + + +extern int (*my_string_stack_guard)(int); + +/* See strings/CHARSET_INFO.txt for information about this structure */ +struct my_collation_handler_st +{ + my_bool (*init)(struct charset_info_st *, MY_CHARSET_LOADER *); + /* Collation routines */ + int (*strnncoll)(CHARSET_INFO *, + const uchar *, size_t, const uchar *, size_t, my_bool); + int (*strnncollsp)(CHARSET_INFO *, + const uchar *, size_t, const uchar *, size_t, + my_bool diff_if_only_endspace_difference); + size_t (*strnxfrm)(CHARSET_INFO *, + uchar *dst, size_t dstlen, uint nweights, + const uchar *src, size_t srclen, uint flags); + size_t (*strnxfrmlen)(CHARSET_INFO *, size_t); + my_bool (*like_range)(CHARSET_INFO *, + const char *s, size_t s_length, + pchar w_prefix, pchar w_one, pchar w_many, + size_t res_length, + char *min_str, char *max_str, + size_t *min_len, size_t *max_len); + int (*wildcmp)(CHARSET_INFO *, + const char *str,const char *str_end, + const char *wildstr,const char *wildend, + int escape,int w_one, int w_many); + + int (*strcasecmp)(CHARSET_INFO *, const char *, const char *); + + uint (*instr)(CHARSET_INFO *, + const char *b, size_t b_length, + const char *s, size_t s_length, + my_match_t *match, uint nmatch); + + /* Hash calculation */ + void (*hash_sort)(CHARSET_INFO *cs, const uchar *key, size_t len, + ulong *nr1, ulong *nr2); + my_bool (*propagate)(CHARSET_INFO *cs, const uchar *str, size_t len); +}; + +extern MY_COLLATION_HANDLER my_collation_8bit_bin_handler; +extern MY_COLLATION_HANDLER my_collation_8bit_simple_ci_handler; +extern MY_COLLATION_HANDLER my_collation_ucs2_uca_handler; + +/* Some typedef to make it easy for C++ to make function pointers */ +typedef int (*my_charset_conv_mb_wc)(CHARSET_INFO *, my_wc_t *, + const uchar *, const uchar *); +typedef int (*my_charset_conv_wc_mb)(CHARSET_INFO *, my_wc_t, + uchar *, uchar *); +typedef size_t (*my_charset_conv_case)(CHARSET_INFO *, + char *, size_t, char *, size_t); + +/* + A structure to return the statistics of a native string copying, + when no Unicode conversion is involved. + + The stucture is OK to be unitialized before calling a copying routine. + A copying routine must populate the structure as follows: + - m_source_end_pos must be set by to a non-NULL value + in the range of the input string. + - m_well_formed_error_pos must be set to NULL if the string was + well formed, or to the position of the leftmost bad byte sequence. +*/ +typedef struct +{ + const char *m_source_end_pos; /* Position where reading stopped */ + const char *m_well_formed_error_pos; /* Position where a bad byte was found*/ +} MY_STRCOPY_STATUS; + + +/* + A structure to return the statistics of a Unicode string conversion. +*/ +typedef struct +{ + MY_STRCOPY_STATUS m_native_copy_status; + const char *m_cannot_convert_error_pos; +} MY_STRCONV_STATUS; + + +/* See strings/CHARSET_INFO.txt about information on this structure */ +struct my_charset_handler_st +{ + my_bool (*init)(struct charset_info_st *, MY_CHARSET_LOADER *loader); + /* Multibyte routines */ + uint (*ismbchar)(CHARSET_INFO *, const char *, const char *); + uint (*mbcharlen)(CHARSET_INFO *, uint c); + size_t (*numchars)(CHARSET_INFO *, const char *b, const char *e); + size_t (*charpos)(CHARSET_INFO *, const char *b, const char *e, + size_t pos); + size_t (*well_formed_len)(CHARSET_INFO *, + const char *b,const char *e, + size_t nchars, int *error); + size_t (*lengthsp)(CHARSET_INFO *, const char *ptr, size_t length); + size_t (*numcells)(CHARSET_INFO *, const char *b, const char *e); + + /* Unicode conversion */ + my_charset_conv_mb_wc mb_wc; + my_charset_conv_wc_mb wc_mb; + + /* CTYPE scanner */ + int (*ctype)(CHARSET_INFO *cs, int *ctype, + const uchar *s, const uchar *e); + + /* Functions for case and sort conversion */ + size_t (*caseup_str)(CHARSET_INFO *, char *); + size_t (*casedn_str)(CHARSET_INFO *, char *); + + my_charset_conv_case caseup; + my_charset_conv_case casedn; + + /* Charset dependant snprintf() */ + size_t (*snprintf)(CHARSET_INFO *, char *to, size_t n, + const char *fmt, + ...) ATTRIBUTE_FORMAT_FPTR(printf, 4, 5); + size_t (*long10_to_str)(CHARSET_INFO *, char *to, size_t n, + int radix, long int val); + size_t (*longlong10_to_str)(CHARSET_INFO *, char *to, size_t n, + int radix, longlong val); + + void (*fill)(CHARSET_INFO *, char *to, size_t len, int fill); + + /* String-to-number conversion routines */ + long (*strntol)(CHARSET_INFO *, const char *s, size_t l, + int base, char **e, int *err); + ulong (*strntoul)(CHARSET_INFO *, const char *s, size_t l, + int base, char **e, int *err); + longlong (*strntoll)(CHARSET_INFO *, const char *s, size_t l, + int base, char **e, int *err); + ulonglong (*strntoull)(CHARSET_INFO *, const char *s, size_t l, + int base, char **e, int *err); + double (*strntod)(CHARSET_INFO *, char *s, size_t l, char **e, + int *err); + longlong (*strtoll10)(CHARSET_INFO *cs, + const char *nptr, char **endptr, int *error); + ulonglong (*strntoull10rnd)(CHARSET_INFO *cs, + const char *str, size_t length, + int unsigned_fl, + char **endptr, int *error); + size_t (*scan)(CHARSET_INFO *, const char *b, const char *e, + int sq); + + /* String copying routines and helpers for them */ + /* + charlen() - calculate length of the left-most character in bytes. + @param cs Character set + @param str The beginning of the string + @param end The end of the string + + @return MY_CS_ILSEQ if a bad byte sequence was found. + @return MY_CS_TOOSMALLN(x) if the string ended unexpectedly. + @return a positive number in the range 1..mbmaxlen, + if a valid character was found. + */ + int (*charlen)(CHARSET_INFO *cs, const uchar *str, const uchar *end); + /* + well_formed_char_length() - returns character length of a string. + + @param cs Character set + @param str The beginning of the string + @param end The end of the string + @param nchars Not more than "nchars" left-most characters are checked. + @param status[OUT] Additional statistics is returned here. + "status" can be uninitialized before the call, + and it is fully initialized after the call. + + status->m_source_end_pos is set to the position where reading stopped. + + If a bad byte sequence is found, the function returns immediately and + status->m_well_formed_error_pos is set to the position where a bad byte + sequence was found. + + status->m_well_formed_error_pos is set to NULL if no bad bytes were found. + If status->m_well_formed_error_pos is NULL after the call, that means: + - either the function reached the end of the string, + - or all "nchars" characters were read. + The caller can check status->m_source_end_pos to detect which of these two + happened. + */ + size_t (*well_formed_char_length)(CHARSET_INFO *cs, + const char *str, const char *end, + size_t nchars, + MY_STRCOPY_STATUS *status); + + /* + copy_fix() - copy a string, replace bad bytes to '?'. + Not more than "nchars" characters are copied. + + status->m_source_end_pos is set to a position in the range + between "src" and "src + src_length", where reading stopped. + + status->m_well_formed_error_pos is set to NULL if the string + in the range "src" and "status->m_source_end_pos" was well formed, + or is set to a position between "src" and "src + src_length" where + the leftmost bad byte sequence was found. + */ + size_t (*copy_fix)(CHARSET_INFO *, + char *dst, size_t dst_length, + const char *src, size_t src_length, + size_t nchars, MY_STRCOPY_STATUS *status); + /** + Write a character to the target string, using its native code. + For Unicode character sets (utf8, ucs2, utf16, utf16le, utf32, filename) + native codes are equvalent to Unicode code points. + For 8bit character sets the native code is just the byte value. + For Asian characters sets: + - MB1 native code is just the byte value (e.g. on the ASCII range) + - MB2 native code is ((b0 << 8) + b1). + - MB3 native code is ((b0 <<16) + (b1 << 8) + b2) + Note, CHARSET_INFO::min_sort_char and CHARSET_INFO::max_sort_char + are defined in native notation and should be written using + cs->cset->native_to_mb() rather than cs->cset->wc_mb(). + */ + my_charset_conv_wc_mb native_to_mb; +}; + +extern MY_CHARSET_HANDLER my_charset_8bit_handler; +extern MY_CHARSET_HANDLER my_charset_ucs2_handler; +extern MY_CHARSET_HANDLER my_charset_utf8_handler; + + +/* + We define this CHARSET_INFO_DEFINED here to prevent a repeat of the + typedef in hash.c, which will cause a compiler error. +*/ +#define CHARSET_INFO_DEFINED + +/* See strings/CHARSET_INFO.txt about information on this structure */ +struct charset_info_st +{ + uint number; + uint primary_number; + uint binary_number; + uint state; + const char *csname; + const char *name; + const char *comment; + const char *tailoring; + const uchar *ctype; + const uchar *to_lower; + const uchar *to_upper; + const uchar *sort_order; + MY_UCA_INFO *uca; + const uint16 *tab_to_uni; + MY_UNI_IDX *tab_from_uni; + MY_UNICASE_INFO *caseinfo; + const uchar *state_map; + const uchar *ident_map; + uint strxfrm_multiply; + uchar caseup_multiply; + uchar casedn_multiply; + uint mbminlen; + uint mbmaxlen; + my_wc_t min_sort_char; + my_wc_t max_sort_char; /* For LIKE optimization */ + uchar pad_char; + my_bool escape_with_backslash_is_dangerous; + uchar levels_for_order; + + MY_CHARSET_HANDLER *cset; + MY_COLLATION_HANDLER *coll; + +}; +#define ILLEGAL_CHARSET_INFO_NUMBER (~0U) + +extern MYSQL_PLUGIN_IMPORT struct charset_info_st my_charset_bin; +extern MYSQL_PLUGIN_IMPORT struct charset_info_st my_charset_latin1; +extern MYSQL_PLUGIN_IMPORT struct charset_info_st my_charset_filename; +extern MYSQL_PLUGIN_IMPORT struct charset_info_st my_charset_utf8_general_ci; + +extern struct charset_info_st my_charset_big5_bin; +extern struct charset_info_st my_charset_big5_chinese_ci; +extern struct charset_info_st my_charset_cp1250_czech_ci; +extern struct charset_info_st my_charset_cp932_bin; +extern struct charset_info_st my_charset_cp932_japanese_ci; +extern struct charset_info_st my_charset_eucjpms_bin; +extern struct charset_info_st my_charset_eucjpms_japanese_ci; +extern struct charset_info_st my_charset_euckr_bin; +extern struct charset_info_st my_charset_euckr_korean_ci; +extern struct charset_info_st my_charset_gb2312_bin; +extern struct charset_info_st my_charset_gb2312_chinese_ci; +extern struct charset_info_st my_charset_gbk_bin; +extern struct charset_info_st my_charset_gbk_chinese_ci; +extern struct charset_info_st my_charset_latin1_bin; +extern struct charset_info_st my_charset_latin1_german2_ci; +extern struct charset_info_st my_charset_latin2_czech_ci; +extern struct charset_info_st my_charset_sjis_bin; +extern struct charset_info_st my_charset_sjis_japanese_ci; +extern struct charset_info_st my_charset_tis620_bin; +extern struct charset_info_st my_charset_tis620_thai_ci; +extern struct charset_info_st my_charset_ucs2_bin; +extern struct charset_info_st my_charset_ucs2_general_ci; +extern struct charset_info_st my_charset_ucs2_general_mysql500_ci; +extern struct charset_info_st my_charset_ucs2_unicode_ci; +extern struct charset_info_st my_charset_ucs2_general_mysql500_ci; +extern struct charset_info_st my_charset_ujis_bin; +extern struct charset_info_st my_charset_ujis_japanese_ci; +extern struct charset_info_st my_charset_utf16_bin; +extern struct charset_info_st my_charset_utf16_general_ci; +extern struct charset_info_st my_charset_utf16_unicode_ci; +extern struct charset_info_st my_charset_utf16le_bin; +extern struct charset_info_st my_charset_utf16le_general_ci; +extern struct charset_info_st my_charset_utf32_bin; +extern struct charset_info_st my_charset_utf32_general_ci; +extern struct charset_info_st my_charset_utf32_unicode_ci; +extern struct charset_info_st my_charset_utf8_bin; +extern struct charset_info_st my_charset_utf8_general_mysql500_ci; +extern struct charset_info_st my_charset_utf8_unicode_ci; +extern struct charset_info_st my_charset_utf8mb4_bin; +extern struct charset_info_st my_charset_utf8mb4_general_ci; +extern struct charset_info_st my_charset_utf8mb4_unicode_ci; + +#define MY_UTF8MB3 "utf8" +#define MY_UTF8MB4 "utf8mb4" + +my_bool my_cs_have_contractions(CHARSET_INFO *cs); +my_bool my_cs_can_be_contraction_head(CHARSET_INFO *cs, my_wc_t wc); +my_bool my_cs_can_be_contraction_tail(CHARSET_INFO *cs, my_wc_t wc); +const uint16 *my_cs_contraction2_weight(CHARSET_INFO *cs, my_wc_t wc1, + my_wc_t wc2); + +/* declarations for simple charsets */ +extern size_t my_strnxfrm_simple(CHARSET_INFO *, + uchar *dst, size_t dstlen, uint nweights, + const uchar *src, size_t srclen, uint flags); +size_t my_strnxfrmlen_simple(CHARSET_INFO *, size_t); +extern int my_strnncoll_simple(CHARSET_INFO *, const uchar *, size_t, + const uchar *, size_t, my_bool); + +extern int my_strnncollsp_simple(CHARSET_INFO *, const uchar *, size_t, + const uchar *, size_t, + my_bool diff_if_only_endspace_difference); + +extern void my_hash_sort_simple(CHARSET_INFO *cs, + const uchar *key, size_t len, + ulong *nr1, ulong *nr2); +extern void my_hash_sort_bin(CHARSET_INFO *cs, + const uchar *key, size_t len, ulong *nr1, + ulong *nr2); + +extern size_t my_lengthsp_8bit(CHARSET_INFO *cs, const char *ptr, size_t length); + +extern uint my_instr_simple(CHARSET_INFO *, + const char *b, size_t b_length, + const char *s, size_t s_length, + my_match_t *match, uint nmatch); + +size_t my_copy_8bit(CHARSET_INFO *, + char *dst, size_t dst_length, + const char *src, size_t src_length, + size_t nchars, MY_STRCOPY_STATUS *); +size_t my_copy_fix_mb(CHARSET_INFO *cs, + char *dst, size_t dst_length, + const char *src, size_t src_length, + size_t nchars, MY_STRCOPY_STATUS *); + +/* Functions for 8bit */ +extern size_t my_caseup_str_8bit(CHARSET_INFO *, char *); +extern size_t my_casedn_str_8bit(CHARSET_INFO *, char *); +extern size_t my_caseup_8bit(CHARSET_INFO *, char *src, size_t srclen, + char *dst, size_t dstlen); +extern size_t my_casedn_8bit(CHARSET_INFO *, char *src, size_t srclen, + char *dst, size_t dstlen); + +extern int my_strcasecmp_8bit(CHARSET_INFO * cs, const char *, const char *); + +int my_mb_wc_8bit(CHARSET_INFO *cs,my_wc_t *wc, const uchar *s,const uchar *e); +int my_wc_mb_8bit(CHARSET_INFO *cs,my_wc_t wc, uchar *s, uchar *e); +int my_wc_mb_bin(CHARSET_INFO *cs,my_wc_t wc, uchar *s, uchar *e); + +int my_mb_ctype_8bit(CHARSET_INFO *,int *, const uchar *,const uchar *); +int my_mb_ctype_mb(CHARSET_INFO *,int *, const uchar *,const uchar *); + +size_t my_scan_8bit(CHARSET_INFO *cs, const char *b, const char *e, int sq); + +size_t my_snprintf_8bit(CHARSET_INFO *, char *to, size_t n, + const char *fmt, ...) + ATTRIBUTE_FORMAT(printf, 4, 5); + +long my_strntol_8bit(CHARSET_INFO *, const char *s, size_t l, int base, + char **e, int *err); +ulong my_strntoul_8bit(CHARSET_INFO *, const char *s, size_t l, int base, + char **e, int *err); +longlong my_strntoll_8bit(CHARSET_INFO *, const char *s, size_t l, int base, + char **e, int *err); +ulonglong my_strntoull_8bit(CHARSET_INFO *, const char *s, size_t l, int base, + char **e, int *err); +double my_strntod_8bit(CHARSET_INFO *, char *s, size_t l,char **e, + int *err); +size_t my_long10_to_str_8bit(CHARSET_INFO *, char *to, size_t l, int radix, + long int val); +size_t my_longlong10_to_str_8bit(CHARSET_INFO *, char *to, size_t l, int radix, + longlong val); + +longlong my_strtoll10_8bit(CHARSET_INFO *cs, + const char *nptr, char **endptr, int *error); +longlong my_strtoll10_ucs2(CHARSET_INFO *cs, + const char *nptr, char **endptr, int *error); + +ulonglong my_strntoull10rnd_8bit(CHARSET_INFO *cs, + const char *str, size_t length, int + unsigned_fl, char **endptr, int *error); +ulonglong my_strntoull10rnd_ucs2(CHARSET_INFO *cs, + const char *str, size_t length, + int unsigned_fl, char **endptr, int *error); + +void my_fill_8bit(CHARSET_INFO *cs, char* to, size_t l, int fill); + +/* For 8-bit character set */ +my_bool my_like_range_simple(CHARSET_INFO *cs, + const char *ptr, size_t ptr_length, + pbool escape, pbool w_one, pbool w_many, + size_t res_length, + char *min_str, char *max_str, + size_t *min_length, size_t *max_length); + +/* For ASCII-based multi-byte character sets with mbminlen=1 */ +my_bool my_like_range_mb(CHARSET_INFO *cs, + const char *ptr, size_t ptr_length, + pbool escape, pbool w_one, pbool w_many, + size_t res_length, + char *min_str, char *max_str, + size_t *min_length, size_t *max_length); + +/* For other character sets, with arbitrary mbminlen and mbmaxlen numbers */ +my_bool my_like_range_generic(CHARSET_INFO *cs, + const char *ptr, size_t ptr_length, + pbool escape, pbool w_one, pbool w_many, + size_t res_length, + char *min_str, char *max_str, + size_t *min_length, size_t *max_length); + +int my_wildcmp_8bit(CHARSET_INFO *, + const char *str,const char *str_end, + const char *wildstr,const char *wildend, + int escape, int w_one, int w_many); + +int my_wildcmp_bin(CHARSET_INFO *, + const char *str,const char *str_end, + const char *wildstr,const char *wildend, + int escape, int w_one, int w_many); + +size_t my_numchars_8bit(CHARSET_INFO *, const char *b, const char *e); +size_t my_numcells_8bit(CHARSET_INFO *, const char *b, const char *e); +size_t my_charpos_8bit(CHARSET_INFO *, const char *b, const char *e, size_t pos); +size_t my_well_formed_len_8bit(CHARSET_INFO *, const char *b, const char *e, + size_t pos, int *error); +size_t my_well_formed_char_length_8bit(CHARSET_INFO *cs, + const char *b, const char *e, + size_t nchars, + MY_STRCOPY_STATUS *status); +int my_charlen_8bit(CHARSET_INFO *, const uchar *str, const uchar *end); +uint my_mbcharlen_8bit(CHARSET_INFO *, uint c); + + +/* Functions for multibyte charsets */ +extern size_t my_caseup_str_mb(CHARSET_INFO *, char *); +extern size_t my_casedn_str_mb(CHARSET_INFO *, char *); +extern size_t my_caseup_mb(CHARSET_INFO *, char *src, size_t srclen, + char *dst, size_t dstlen); +extern size_t my_casedn_mb(CHARSET_INFO *, char *src, size_t srclen, + char *dst, size_t dstlen); +extern size_t my_caseup_mb_varlen(CHARSET_INFO *, char *src, size_t srclen, + char *dst, size_t dstlen); +extern size_t my_casedn_mb_varlen(CHARSET_INFO *, char *src, size_t srclen, + char *dst, size_t dstlen); +extern size_t my_caseup_ujis(CHARSET_INFO *, char *src, size_t srclen, + char *dst, size_t dstlen); +extern size_t my_casedn_ujis(CHARSET_INFO *, char *src, size_t srclen, + char *dst, size_t dstlen); +extern int my_strcasecmp_mb(CHARSET_INFO * cs,const char *, const char *); + +int my_wildcmp_mb(CHARSET_INFO *, + const char *str,const char *str_end, + const char *wildstr,const char *wildend, + int escape, int w_one, int w_many); +size_t my_numchars_mb(CHARSET_INFO *, const char *b, const char *e); +size_t my_numcells_mb(CHARSET_INFO *, const char *b, const char *e); +size_t my_charpos_mb(CHARSET_INFO *, const char *b, const char *e, size_t pos); +size_t my_well_formed_len_mb(CHARSET_INFO *, const char *b, const char *e, + size_t pos, int *error); +uint my_instr_mb(CHARSET_INFO *, + const char *b, size_t b_length, + const char *s, size_t s_length, + my_match_t *match, uint nmatch); + +int my_strnncoll_mb_bin(CHARSET_INFO * cs, + const uchar *s, size_t slen, + const uchar *t, size_t tlen, + my_bool t_is_prefix); + +int my_strnncollsp_mb_bin(CHARSET_INFO *cs, + const uchar *a, size_t a_length, + const uchar *b, size_t b_length, + my_bool diff_if_only_endspace_difference); + +int my_wildcmp_mb_bin(CHARSET_INFO *cs, + const char *str,const char *str_end, + const char *wildstr,const char *wildend, + int escape, int w_one, int w_many); + +int my_strcasecmp_mb_bin(CHARSET_INFO * cs __attribute__((unused)), + const char *s, const char *t); + +void my_hash_sort_mb_bin(CHARSET_INFO *cs __attribute__((unused)), + const uchar *key, size_t len,ulong *nr1, ulong *nr2); + +size_t my_strnxfrm_mb(CHARSET_INFO *, + uchar *dst, size_t dstlen, uint nweights, + const uchar *src, size_t srclen, uint flags); + +size_t my_strnxfrm_unicode(CHARSET_INFO *, + uchar *dst, size_t dstlen, uint nweights, + const uchar *src, size_t srclen, uint flags); +size_t my_strnxfrmlen_unicode(CHARSET_INFO *, size_t); + +size_t my_strnxfrm_unicode_full_bin(CHARSET_INFO *, + uchar *dst, size_t dstlen, uint nweights, + const uchar *src, size_t srclen, uint flags); +size_t my_strnxfrmlen_unicode_full_bin(CHARSET_INFO *, size_t); + +int my_wildcmp_unicode(CHARSET_INFO *cs, + const char *str, const char *str_end, + const char *wildstr, const char *wildend, + int escape, int w_one, int w_many, + MY_UNICASE_INFO *weights); + +extern my_bool my_parse_charset_xml(MY_CHARSET_LOADER *loader, + const char *buf, size_t buflen); +extern char *my_strchr(CHARSET_INFO *cs, const char *str, const char *end, + pchar c); +extern size_t my_strcspn(CHARSET_INFO *cs, const char *str, const char *end, + const char *accept); + +my_bool my_propagate_simple(CHARSET_INFO *cs, const uchar *str, size_t len); +my_bool my_propagate_complex(CHARSET_INFO *cs, const uchar *str, size_t len); + + +typedef struct +{ + size_t char_length; + uint repertoire; +} MY_STRING_METADATA; + +void my_string_metadata_get(MY_STRING_METADATA *metadata, + CHARSET_INFO *cs, const char *str, size_t len); +uint my_string_repertoire(CHARSET_INFO *cs, const char *str, ulong len); +my_bool my_charset_is_ascii_based(CHARSET_INFO *cs); +my_bool my_charset_is_8bit_pure_ascii(CHARSET_INFO *cs); +uint my_charset_repertoire(CHARSET_INFO *cs); + +uint my_strxfrm_flag_normalize(uint flags, uint nlevels); +void my_strxfrm_desc_and_reverse(uchar *str, uchar *strend, + uint flags, uint level); +size_t my_strxfrm_pad_desc_and_reverse(CHARSET_INFO *cs, + uchar *str, uchar *frmend, uchar *strend, + uint nweights, uint flags, uint level); + +my_bool my_charset_is_ascii_compatible(CHARSET_INFO *cs); + +const MY_CONTRACTIONS *my_charset_get_contractions(CHARSET_INFO *cs, + int level); + +extern size_t my_vsnprintf_ex(CHARSET_INFO *cs, char *to, size_t n, + const char* fmt, va_list ap); + +/* + Convert a string between two character sets. + Bad byte sequences as well as characters that cannot be + encoded in the destination character set are replaced to '?'. +*/ +uint32 my_convert(char *to, uint32 to_length, CHARSET_INFO *to_cs, + const char *from, uint32 from_length, + CHARSET_INFO *from_cs, uint *errors); + +/** + An extended version of my_convert(), to pass non-default mb_wc() and wc_mb(). + For example, String::copy_printable() which is used in + Protocol::store_warning() uses this to escape control + and non-convertable characters. +*/ +uint32 my_convert_using_func(char *to, uint32 to_length, CHARSET_INFO *to_cs, + my_charset_conv_wc_mb mb_wc, + const char *from, uint32 from_length, + CHARSET_INFO *from_cs, + my_charset_conv_mb_wc wc_mb, + uint *errors); +/* + Convert a string between two character sets. + Bad byte sequences as well as characters that cannot be + encoded in the destination character set are replaced to '?'. + Not more than "nchars" characters are copied. + Conversion statistics is returnd in "status" and is set as follows: + - status->m_native_copy_status.m_source_end_pos - to the position + between (src) and (src+src_length), where the function stopped reading + the source string. + - status->m_native_copy_status.m_well_formed_error_pos - to the position + between (src) and (src+src_length), where the first badly formed byte + sequence was found, or to NULL if the string was well formed in the + given range. + - status->m_cannot_convert_error_pos - to the position + between (src) and (src+src_length), where the first character that + cannot be represented in the destination character set was found, + or to NULL if all characters in the given range were successfully + converted. + + "src" is allowed to be a NULL pointer. In this case "src_length" must + be equal to 0. All "status" members are initialized to NULL, and 0 is + returned. +*/ +size_t my_convert_fix(CHARSET_INFO *dstcs, char *dst, size_t dst_length, + CHARSET_INFO *srccs, const char *src, size_t src_length, + size_t nchars, MY_STRCONV_STATUS *status); + +#define _MY_U 01 /* Upper case */ +#define _MY_L 02 /* Lower case */ +#define _MY_NMR 04 /* Numeral (digit) */ +#define _MY_SPC 010 /* Spacing character */ +#define _MY_PNT 020 /* Punctuation */ +#define _MY_CTR 040 /* Control character */ +#define _MY_B 0100 /* Blank */ +#define _MY_X 0200 /* heXadecimal digit */ + + +#define my_isascii(c) (!((c) & ~0177)) +#define my_toascii(c) ((c) & 0177) +#define my_tocntrl(c) ((c) & 31) +#define my_toprint(c) ((c) | 64) +#define my_toupper(s,c) (char) ((s)->to_upper[(uchar) (c)]) +#define my_tolower(s,c) (char) ((s)->to_lower[(uchar) (c)]) +#define my_isalpha(s, c) (((s)->ctype+1)[(uchar) (c)] & (_MY_U | _MY_L)) +#define my_isupper(s, c) (((s)->ctype+1)[(uchar) (c)] & _MY_U) +#define my_islower(s, c) (((s)->ctype+1)[(uchar) (c)] & _MY_L) +#define my_isdigit(s, c) (((s)->ctype+1)[(uchar) (c)] & _MY_NMR) +#define my_isxdigit(s, c) (((s)->ctype+1)[(uchar) (c)] & _MY_X) +#define my_isalnum(s, c) (((s)->ctype+1)[(uchar) (c)] & (_MY_U | _MY_L | _MY_NMR)) +#define my_isspace(s, c) (((s)->ctype+1)[(uchar) (c)] & _MY_SPC) +#define my_ispunct(s, c) (((s)->ctype+1)[(uchar) (c)] & _MY_PNT) +#define my_isprint(s, c) (((s)->ctype+1)[(uchar) (c)] & (_MY_PNT | _MY_U | _MY_L | _MY_NMR | _MY_B)) +#define my_isgraph(s, c) (((s)->ctype+1)[(uchar) (c)] & (_MY_PNT | _MY_U | _MY_L | _MY_NMR)) +#define my_iscntrl(s, c) (((s)->ctype+1)[(uchar) (c)] & _MY_CTR) + +/* Some macros that should be cleaned up a little */ +#define my_isvar(s,c) (my_isalnum(s,c) || (c) == '_') +#define my_isvar_start(s,c) (my_isalpha(s,c) || (c) == '_') + +#define my_binary_compare(s) ((s)->state & MY_CS_BINSORT) +#define use_strnxfrm(s) ((s)->state & MY_CS_STRNXFRM) +#define my_strnxfrm(cs, d, dl, s, sl) \ + ((cs)->coll->strnxfrm((cs), (d), (dl), (dl), (s), (sl), MY_STRXFRM_PAD_WITH_SPACE)) +#define my_strnncoll(s, a, b, c, d) ((s)->coll->strnncoll((s), (a), (b), (c), (d), 0)) +#define my_like_range(s, a, b, c, d, e, f, g, h, i, j) \ + ((s)->coll->like_range((s), (a), (b), (c), (d), (e), (f), (g), (h), (i), (j))) +#define my_wildcmp(cs,s,se,w,we,e,o,m) ((cs)->coll->wildcmp((cs),(s),(se),(w),(we),(e),(o),(m))) +#define my_strcasecmp(s, a, b) ((s)->coll->strcasecmp((s), (a), (b))) +#define my_charpos(cs, b, e, num) (cs)->cset->charpos((cs), (const char*) (b), (const char *)(e), (num)) + +#define use_mb(s) ((s)->cset->ismbchar != NULL) +#define my_ismbchar(s, a, b) ((s)->cset->ismbchar((s), (a), (b))) +#ifdef USE_MB +#define my_mbcharlen(s, a) ((s)->cset->mbcharlen((s),(a))) +#else +#define my_mbcharlen(s, a) 1 +#endif + +#define my_caseup_str(s, a) ((s)->cset->caseup_str((s), (a))) +#define my_casedn_str(s, a) ((s)->cset->casedn_str((s), (a))) +#define my_strntol(s, a, b, c, d, e) ((s)->cset->strntol((s),(a),(b),(c),(d),(e))) +#define my_strntoul(s, a, b, c, d, e) ((s)->cset->strntoul((s),(a),(b),(c),(d),(e))) +#define my_strntoll(s, a, b, c, d, e) ((s)->cset->strntoll((s),(a),(b),(c),(d),(e))) +#define my_strntoull(s, a, b, c,d, e) ((s)->cset->strntoull((s),(a),(b),(c),(d),(e))) +#define my_strntod(s, a, b, c, d) ((s)->cset->strntod((s),(a),(b),(c),(d))) + + +/* XXX: still need to take care of this one */ +#ifdef MY_CHARSET_TIS620 +#error The TIS620 charset is broken at the moment. Tell tim to fix it. +#define USE_TIS620 +#include "t_ctype.h" +#endif + +#ifdef __cplusplus +} +#endif + +#endif /* _m_ctype_h */ diff --git a/EQ2/source/depends/mariadb-10.1.19/include/m_string.h b/EQ2/source/depends/mariadb-10.1.19/include/m_string.h new file mode 100644 index 000000000..969725e46 --- /dev/null +++ b/EQ2/source/depends/mariadb-10.1.19/include/m_string.h @@ -0,0 +1,245 @@ +/* + Copyright (c) 2000, 2012, Oracle and/or its affiliates. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; version 2 of the License. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ + +/* There may be prolems include all of theese. Try to test in + configure with ones are needed? */ + +/* This is needed for the definitions of strchr... on solaris */ + +#ifndef _m_string_h +#define _m_string_h + +#include "my_global.h" /* HAVE_* */ + +#ifndef __USE_GNU +#define __USE_GNU /* We want to use stpcpy */ +#endif +#if defined(HAVE_STRINGS_H) +#include +#endif +#if defined(HAVE_STRING_H) +#include +#endif + +/* This is needed for the definitions of memcpy... on solaris */ +#if defined(HAVE_MEMORY_H) && !defined(__cplusplus) +#include +#endif + +#if !defined(HAVE_MEMCPY) && !defined(HAVE_MEMMOVE) +# define memcpy(d, s, n) bcopy ((s), (d), (n)) +# define memset(A,C,B) bfill((A),(B),(C)) +# define memmove(d, s, n) bmove ((d), (s), (n)) +#elif defined(HAVE_MEMMOVE) +# define bmove(d, s, n) memmove((d), (s), (n)) +#endif + +/* Unixware 7 */ +#if !defined(HAVE_BFILL) +# define bfill(A,B,C) memset((A),(C),(B)) +#endif + +# define bmove_align(A,B,C) memcpy((A),(B),(C)) + +# define bcmp(A,B,C) memcmp((A),(B),(C)) + +#if !defined(bzero) +# define bzero(A,B) memset((A),0,(B)) +#endif + +#if defined(__cplusplus) +extern "C" { +#endif + +/* + my_str_malloc(), my_str_realloc() and my_str_free() are assigned to + implementations in strings/alloc.c, but can be overridden in + the calling program. + */ +extern void *(*my_str_malloc)(size_t); +extern void *(*my_str_realloc)(void *, size_t); +extern void (*my_str_free)(void *); + +#if defined(HAVE_STPCPY) && MY_GNUC_PREREQ(3, 4) && !defined(__INTEL_COMPILER) +#define strmov(A,B) __builtin_stpcpy((A),(B)) +#elif defined(HAVE_STPCPY) +#define strmov(A,B) stpcpy((A),(B)) +#endif + +/* Declared in int2str() */ +extern const char _dig_vec_upper[]; +extern const char _dig_vec_lower[]; + +extern char *strmov_overlapp(char *dest, const char *src); + +#if defined(_lint) || defined(FORCE_INIT_OF_VARS) +#define LINT_INIT_STRUCT(var) bzero(&var, sizeof(var)) /* No uninitialize-warning */ +#else +#define LINT_INIT_STRUCT(var) +#endif + +/* Prototypes for string functions */ + +extern void bmove_upp(uchar *dst,const uchar *src,size_t len); +extern void bchange(uchar *dst,size_t old_len,const uchar *src, + size_t new_len,size_t tot_len); +extern void strappend(char *s,size_t len,pchar fill); +extern char *strend(const char *s); +extern char *strcend(const char *, pchar); +extern char *strfill(char * s,size_t len,pchar fill); +extern char *strmake(char *dst,const char *src,size_t length); + +#if !defined(__GNUC__) || (__GNUC__ < 4) +#define strmake_buf(D,S) strmake(D, S, sizeof(D) - 1) +#else +#define strmake_buf(D,S) ({ \ + compile_time_assert(sizeof(D) != sizeof(char*)); \ + strmake(D, S, sizeof(D) - 1); \ + }) +#endif + +#ifndef strmov +extern char *strmov(char *dst,const char *src); +#endif +extern char *strnmov(char *dst, const char *src, size_t n); +extern char *strcont(const char *src, const char *set); +extern char *strxmov(char *dst, const char *src, ...); +extern char *strxnmov(char *dst, size_t len, const char *src, ...); + +/* Prototypes of normal stringfunctions (with may ours) */ +#ifndef HAVE_STRNLEN +extern size_t strnlen(const char *s, size_t n); +#endif + +extern int is_prefix(const char *, const char *); + +/* Conversion routines */ +typedef enum { + MY_GCVT_ARG_FLOAT, + MY_GCVT_ARG_DOUBLE +} my_gcvt_arg_type; + +double my_strtod(const char *str, char **end, int *error); +double my_atof(const char *nptr); +size_t my_fcvt(double x, int precision, char *to, my_bool *error); +size_t my_gcvt(double x, my_gcvt_arg_type type, int width, char *to, + my_bool *error); + +#define NOT_FIXED_DEC 31 + +/* + The longest string my_fcvt can return is 311 + "precision" bytes. + Here we assume that we never cal my_fcvt() with precision >= NOT_FIXED_DEC + (+ 1 byte for the terminating '\0'). +*/ +#define FLOATING_POINT_BUFFER (311 + NOT_FIXED_DEC) + +/* + We want to use the 'e' format in some cases even if we have enough space + for the 'f' one just to mimic sprintf("%.15g") behavior for large integers, + and to improve it for numbers < 10^(-4). + That is, for |x| < 1 we require |x| >= 10^(-15), and for |x| > 1 we require + it to be integer and be <= 10^DBL_DIG for the 'f' format to be used. + We don't lose precision, but make cases like "1e200" or "0.00001" look nicer. +*/ +#define MAX_DECPT_FOR_F_FORMAT DBL_DIG + +/* + The maximum possible field width for my_gcvt() conversion. + (DBL_DIG + 2) significant digits + sign + "." + ("e-NNN" or + MAX_DECPT_FOR_F_FORMAT zeros for cases when |x|<1 and the 'f' format is used). +*/ +#define MY_GCVT_MAX_FIELD_WIDTH (DBL_DIG + 4 + MY_MAX(5, MAX_DECPT_FOR_F_FORMAT)) \ + +extern char *llstr(longlong value,char *buff); +extern char *ullstr(longlong value,char *buff); +#ifndef HAVE_STRTOUL +extern long strtol(const char *str, char **ptr, int base); +extern ulong strtoul(const char *str, char **ptr, int base); +#endif + +extern char *int2str(long val, char *dst, int radix, int upcase); +extern char *int10_to_str(long val,char *dst,int radix); +extern char *str2int(const char *src,int radix,long lower,long upper, + long *val); +longlong my_strtoll10(const char *nptr, char **endptr, int *error); +#if SIZEOF_LONG == SIZEOF_LONG_LONG +#define ll2str(A,B,C,D) int2str((A),(B),(C),(D)) +#define longlong10_to_str(A,B,C) int10_to_str((A),(B),(C)) +#undef strtoll +#define strtoll(A,B,C) strtol((A),(B),(C)) +#define strtoull(A,B,C) strtoul((A),(B),(C)) +#ifndef HAVE_STRTOULL +#define HAVE_STRTOULL +#endif +#ifndef HAVE_STRTOLL +#define HAVE_STRTOLL +#endif +#else +#ifdef HAVE_LONG_LONG +extern char *ll2str(longlong val,char *dst,int radix, int upcase); +extern char *longlong10_to_str(longlong val,char *dst,int radix); +#if (!defined(HAVE_STRTOULL) || defined(NO_STRTOLL_PROTO)) +extern longlong strtoll(const char *str, char **ptr, int base); +extern ulonglong strtoull(const char *str, char **ptr, int base); +#endif +#endif +#endif +#define longlong2str(A,B,C) ll2str((A),(B),(C),1) + +#if defined(__cplusplus) +} +#endif + +#include + +#define STRING_WITH_LEN(X) (X), ((size_t) (sizeof(X) - 1)) +#define USTRING_WITH_LEN(X) ((uchar*) X), ((size_t) (sizeof(X) - 1)) +#define C_STRING_WITH_LEN(X) ((char *) (X)), ((size_t) (sizeof(X) - 1)) + +struct st_mysql_const_lex_string +{ + const char *str; + size_t length; +}; +typedef struct st_mysql_const_lex_string LEX_CSTRING; + +/* A variant with const and unsigned */ +struct st_mysql_const_unsigned_lex_string +{ + const uchar *str; + size_t length; +}; +typedef struct st_mysql_const_unsigned_lex_string LEX_CUSTRING; + +static inline void lex_string_set(LEX_STRING *lex_str, const char *c_str) +{ + lex_str->str= (char *) c_str; + lex_str->length= strlen(c_str); +} + +#ifdef __cplusplus +static inline char *safe_str(char *str) +{ return str ? str : const_cast(""); } +#endif + +static inline const char *safe_str(const char *str) +{ return str ? str : ""; } + +static inline size_t safe_strlen(const char *str) +{ return str ? strlen(str) : 0; } + +#endif diff --git a/EQ2/source/depends/mariadb-10.1.19/include/ma_dyncol.h b/EQ2/source/depends/mariadb-10.1.19/include/ma_dyncol.h new file mode 100644 index 000000000..cb03ccb53 --- /dev/null +++ b/EQ2/source/depends/mariadb-10.1.19/include/ma_dyncol.h @@ -0,0 +1,242 @@ +/* Copyright (c) 2011, Monty Program Ab + Copyright (c) 2011, Oleksandr Byelkin + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions are + met: + + 1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + 2. Redistributions in binary form must the following disclaimer in + the documentation and/or other materials provided with the + distribution. + + THIS SOFTWARE IS PROVIDED BY ``AS IS'' AND ANY + EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL OR + CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF + USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, + OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT + OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + SUCH DAMAGE. +*/ + +#ifndef ma_dyncol_h +#define ma_dyncol_h +#ifdef __cplusplus +extern "C" { +#endif + +#include +#include +#include + +#ifndef _my_sys_h +typedef struct st_dynamic_string +{ + char *str; + size_t length,max_length,alloc_increment; +} DYNAMIC_STRING; +#endif + +#ifndef MY_GLOBAL_INCLUDED +struct st_mysql_lex_string +{ + char *str; + size_t length; +}; +typedef struct st_mysql_lex_string MYSQL_LEX_STRING; +typedef struct st_mysql_lex_string LEX_STRING; +#endif + +/* + Limits of implementation +*/ +#define MAX_TOTAL_NAME_LENGTH 65535 +#define MAX_NAME_LENGTH (MAX_TOTAL_NAME_LENGTH/4) + +/* NO and OK is the same used just to show semantics */ +#define ER_DYNCOL_NO ER_DYNCOL_OK + +enum enum_dyncol_func_result +{ + ER_DYNCOL_OK= 0, + ER_DYNCOL_YES= 1, /* For functions returning 0/1 */ + ER_DYNCOL_FORMAT= -1, /* Wrong format of the encoded string */ + ER_DYNCOL_LIMIT= -2, /* Some limit reached */ + ER_DYNCOL_RESOURCE= -3, /* Out of resourses */ + ER_DYNCOL_DATA= -4, /* Incorrect input data */ + ER_DYNCOL_UNKNOWN_CHARSET= -5, /* Unknown character set */ + ER_DYNCOL_TRUNCATED= 2 /* OK, but data was truncated */ +}; + +typedef DYNAMIC_STRING DYNAMIC_COLUMN; + +enum enum_dynamic_column_type +{ + DYN_COL_NULL= 0, + DYN_COL_INT, + DYN_COL_UINT, + DYN_COL_DOUBLE, + DYN_COL_STRING, + DYN_COL_DECIMAL, + DYN_COL_DATETIME, + DYN_COL_DATE, + DYN_COL_TIME, + DYN_COL_DYNCOL +}; + +typedef enum enum_dynamic_column_type DYNAMIC_COLUMN_TYPE; + +struct st_dynamic_column_value +{ + DYNAMIC_COLUMN_TYPE type; + union + { + long long long_value; + unsigned long long ulong_value; + double double_value; + struct { + MYSQL_LEX_STRING value; + CHARSET_INFO *charset; + } string; + struct { + decimal_digit_t buffer[DECIMAL_BUFF_LENGTH]; + decimal_t value; + } decimal; + MYSQL_TIME time_value; + } x; +}; + +typedef struct st_dynamic_column_value DYNAMIC_COLUMN_VALUE; + +#ifdef MADYNCOL_DEPRECATED +enum enum_dyncol_func_result +dynamic_column_create(DYNAMIC_COLUMN *str, + uint column_nr, DYNAMIC_COLUMN_VALUE *value); + +enum enum_dyncol_func_result +dynamic_column_create_many(DYNAMIC_COLUMN *str, + uint column_count, + uint *column_numbers, + DYNAMIC_COLUMN_VALUE *values); +enum enum_dyncol_func_result +dynamic_column_update(DYNAMIC_COLUMN *org, uint column_nr, + DYNAMIC_COLUMN_VALUE *value); +enum enum_dyncol_func_result +dynamic_column_update_many(DYNAMIC_COLUMN *str, + uint add_column_count, + uint *column_numbers, + DYNAMIC_COLUMN_VALUE *values); + +enum enum_dyncol_func_result +dynamic_column_exists(DYNAMIC_COLUMN *org, uint column_nr); + +enum enum_dyncol_func_result +dynamic_column_list(DYNAMIC_COLUMN *org, DYNAMIC_ARRAY *array_of_uint); + +enum enum_dyncol_func_result +dynamic_column_get(DYNAMIC_COLUMN *org, uint column_nr, + DYNAMIC_COLUMN_VALUE *store_it_here); +#endif + +/* new functions */ +enum enum_dyncol_func_result +mariadb_dyncol_create_many_num(DYNAMIC_COLUMN *str, + uint column_count, + uint *column_numbers, + DYNAMIC_COLUMN_VALUE *values, + my_bool new_string); +enum enum_dyncol_func_result +mariadb_dyncol_create_many_named(DYNAMIC_COLUMN *str, + uint column_count, + MYSQL_LEX_STRING *column_keys, + DYNAMIC_COLUMN_VALUE *values, + my_bool new_string); + + +enum enum_dyncol_func_result +mariadb_dyncol_update_many_num(DYNAMIC_COLUMN *str, + uint add_column_count, + uint *column_keys, + DYNAMIC_COLUMN_VALUE *values); +enum enum_dyncol_func_result +mariadb_dyncol_update_many_named(DYNAMIC_COLUMN *str, + uint add_column_count, + MYSQL_LEX_STRING *column_keys, + DYNAMIC_COLUMN_VALUE *values); + + +enum enum_dyncol_func_result +mariadb_dyncol_exists_num(DYNAMIC_COLUMN *org, uint column_nr); +enum enum_dyncol_func_result +mariadb_dyncol_exists_named(DYNAMIC_COLUMN *str, MYSQL_LEX_STRING *name); + +/* List of not NULL columns */ +enum enum_dyncol_func_result +mariadb_dyncol_list_num(DYNAMIC_COLUMN *str, uint *count, uint **nums); +enum enum_dyncol_func_result +mariadb_dyncol_list_named(DYNAMIC_COLUMN *str, uint *count, + MYSQL_LEX_STRING **names); + +/* + if the column do not exists it is NULL +*/ +enum enum_dyncol_func_result +mariadb_dyncol_get_num(DYNAMIC_COLUMN *org, uint column_nr, + DYNAMIC_COLUMN_VALUE *store_it_here); +enum enum_dyncol_func_result +mariadb_dyncol_get_named(DYNAMIC_COLUMN *str, MYSQL_LEX_STRING *name, + DYNAMIC_COLUMN_VALUE *store_it_here); + +my_bool mariadb_dyncol_has_names(DYNAMIC_COLUMN *str); + +enum enum_dyncol_func_result +mariadb_dyncol_check(DYNAMIC_COLUMN *str); + +enum enum_dyncol_func_result +mariadb_dyncol_json(DYNAMIC_COLUMN *str, DYNAMIC_STRING *json); + +#define mariadb_dyncol_init(A) memset((A), 0, sizeof(*(A))) +void mariadb_dyncol_free(DYNAMIC_COLUMN *str); + +/* conversion of values to 3 base types */ +enum enum_dyncol_func_result +mariadb_dyncol_val_str(DYNAMIC_STRING *str, DYNAMIC_COLUMN_VALUE *val, + CHARSET_INFO *cs, my_bool quote); +enum enum_dyncol_func_result +mariadb_dyncol_val_long(longlong *ll, DYNAMIC_COLUMN_VALUE *val); +enum enum_dyncol_func_result +mariadb_dyncol_val_double(double *dbl, DYNAMIC_COLUMN_VALUE *val); + + +enum enum_dyncol_func_result +mariadb_dyncol_unpack(DYNAMIC_COLUMN *str, + uint *count, + MYSQL_LEX_STRING **names, DYNAMIC_COLUMN_VALUE **vals); + +void mariadb_dyncol_unpack_free(MYSQL_LEX_STRING *names, + DYNAMIC_COLUMN_VALUE *vals); + +int mariadb_dyncol_column_cmp_named(const MYSQL_LEX_STRING *s1, + const MYSQL_LEX_STRING *s2); + +enum enum_dyncol_func_result +mariadb_dyncol_column_count(DYNAMIC_COLUMN *str, uint *column_count); + +#define mariadb_dyncol_value_init(V) (V)->type= DYN_COL_NULL + +/* + Prepare value for using as decimal +*/ +void mariadb_dyncol_prepare_decimal(DYNAMIC_COLUMN_VALUE *value); + +#ifdef __cplusplus +} +#endif +#endif diff --git a/EQ2/source/depends/mariadb-10.1.19/include/maria.h b/EQ2/source/depends/mariadb-10.1.19/include/maria.h new file mode 100644 index 000000000..bdd53f3d1 --- /dev/null +++ b/EQ2/source/depends/mariadb-10.1.19/include/maria.h @@ -0,0 +1,415 @@ +/* Copyright (C) 2006-2008 MySQL AB, 2008-2009 Sun Microsystems, Inc. + Copyright (c) 2009, 2013, Monty Program Ab. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ + +/* This file should be included when using maria functions */ + +#ifndef _maria_h +#define _maria_h +#include +#include +#include "my_compare.h" +#include "ft_global.h" +#include + +#ifdef __cplusplus +extern "C" { +#endif + +#define MARIA_CANNOT_ROLLBACK + +/* + Limit max keys according to HA_MAX_POSSIBLE_KEY; See myisamchk.h for details +*/ + +#if MAX_INDEXES > HA_MAX_POSSIBLE_KEY +#define MARIA_MAX_KEY HA_MAX_POSSIBLE_KEY /* Max allowed keys */ +#else +#define MARIA_MAX_KEY MAX_INDEXES /* Max allowed keys */ +#endif + +#define MARIA_NAME_IEXT ".MAI" +#define MARIA_NAME_DEXT ".MAD" +/* Max extra space to use when sorting keys */ +#define MARIA_MAX_TEMP_LENGTH (2*1024L*1024L*1024L) +/* Possible values for maria_block_size (must be power of 2) */ +#define MARIA_KEY_BLOCK_LENGTH 8192 /* default key block length */ +#define MARIA_MIN_KEY_BLOCK_LENGTH 1024 /* Min key block length */ +#define MARIA_MAX_KEY_BLOCK_LENGTH 32768 +/* Minimal page cache when we only want to be able to scan a table */ +#define MARIA_MIN_PAGE_CACHE_SIZE (8192L*16L) + +/* + In the following macros '_keyno_' is 0 .. keys-1. + If there can be more keys than bits in the key_map, the highest bit + is for all upper keys. They cannot be switched individually. + This means that clearing of high keys is ignored, setting one high key + sets all high keys. +*/ +#define MARIA_KEYMAP_BITS (8 * SIZEOF_LONG_LONG) +#define MARIA_KEYMAP_HIGH_MASK (1ULL << (MARIA_KEYMAP_BITS - 1)) +#define maria_get_mask_all_keys_active(_keys_) \ + (((_keys_) < MARIA_KEYMAP_BITS) ? \ + ((1ULL << (_keys_)) - 1ULL) : \ + (~ 0ULL)) +#if MARIA_MAX_KEY > MARIA_KEYMAP_BITS +#define maria_is_key_active(_keymap_,_keyno_) \ + (((_keyno_) < MARIA_KEYMAP_BITS) ? \ + MY_TEST((_keymap_) & (1ULL << (_keyno_))) : \ + MY_TEST((_keymap_) & MARIA_KEYMAP_HIGH_MASK)) +#define maria_set_key_active(_keymap_,_keyno_) \ + (_keymap_)|= (((_keyno_) < MARIA_KEYMAP_BITS) ? \ + (1ULL << (_keyno_)) : \ + MARIA_KEYMAP_HIGH_MASK) +#define maria_clear_key_active(_keymap_,_keyno_) \ + (_keymap_)&= (((_keyno_) < MARIA_KEYMAP_BITS) ? \ + (~ (1ULL << (_keyno_))) : \ + (~ (0ULL)) /*ignore*/ ) +#else +#define maria_is_key_active(_keymap_,_keyno_) \ + MY_TEST((_keymap_) & (1ULL << (_keyno_))) +#define maria_set_key_active(_keymap_,_keyno_) \ + (_keymap_)|= (1ULL << (_keyno_)) +#define maria_clear_key_active(_keymap_,_keyno_) \ + (_keymap_)&= (~ (1ULL << (_keyno_))) +#endif +#define maria_is_any_key_active(_keymap_) \ + MY_TEST((_keymap_)) +#define maria_is_all_keys_active(_keymap_,_keys_) \ + ((_keymap_) == maria_get_mask_all_keys_active(_keys_)) +#define maria_set_all_keys_active(_keymap_,_keys_) \ + (_keymap_)= maria_get_mask_all_keys_active(_keys_) +#define maria_clear_all_keys_active(_keymap_) \ + (_keymap_)= 0 +#define maria_intersect_keys_active(_to_,_from_) \ + (_to_)&= (_from_) +#define maria_is_any_intersect_keys_active(_keymap1_,_keys_,_keymap2_) \ + ((_keymap1_) & (_keymap2_) & \ + maria_get_mask_all_keys_active(_keys_)) +#define maria_copy_keys_active(_to_,_maxkeys_,_from_) \ + (_to_)= (maria_get_mask_all_keys_active(_maxkeys_) & \ + (_from_)) + + /* Param to/from maria_info */ + +typedef ulonglong MARIA_RECORD_POS; + +typedef struct st_maria_info +{ + ha_rows records; /* Records in database */ + ha_rows deleted; /* Deleted records in database */ + MARIA_RECORD_POS recpos; /* Pos for last used record */ + MARIA_RECORD_POS newrecpos; /* Pos if we write new record */ + MARIA_RECORD_POS dup_key_pos; /* Position to record with dup key */ + my_off_t data_file_length; /* Length of data file */ + my_off_t max_data_file_length, index_file_length; + my_off_t max_index_file_length, delete_length; + ulonglong auto_increment; + ulonglong key_map; /* Which keys are used */ + time_t create_time; /* When table was created */ + time_t check_time; + time_t update_time; + ulong record_offset; + double *rec_per_key; /* for sql optimizing */ + ulong reclength; /* Recordlength */ + ulong mean_reclength; /* Mean recordlength (if packed) */ + char *data_file_name, *index_file_name; + enum data_file_type data_file_type; + uint keys; /* Number of keys in use */ + uint options; /* HA_OPTION_... used */ + uint reflength; + int errkey, /* With key was dupplicated on err */ + sortkey; /* clustered by this key */ + File filenr; /* (uniq) filenr for datafile */ +} MARIA_INFO; + + +typedef struct st_maria_create_info +{ + const char *index_file_name, *data_file_name; /* If using symlinks */ + ha_rows max_rows; + ha_rows reloc_rows; + ulonglong auto_increment; + ulonglong data_file_length; + ulonglong key_file_length; + /* Size of null bitmap at start of row */ + uint null_bytes; + uint old_options; + enum data_file_type org_data_file_type; + uint8 language; + my_bool with_auto_increment, transactional; +} MARIA_CREATE_INFO; + +struct st_maria_share; +struct st_maria_handler; /* For referense */ +typedef struct st_maria_handler MARIA_HA; +struct st_maria_s_param; +struct st_maria_keydef; +struct st_maria_page; + +typedef struct st_maria_key /* Internal info about a key */ +{ + uchar *data; /* Data for key */ + struct st_maria_keydef *keyinfo; /* Definition for key */ + uint data_length; /* Length of key data */ + uint ref_length; /* record ref + transid */ + uint32 flag; /* 0 or SEARCH_PART_KEY */ +} MARIA_KEY; + + +typedef struct st_maria_keydef /* Key definition with open & info */ +{ + struct st_maria_share *share; /* Pointer to base (set in open) */ + mysql_rwlock_t root_lock; /* locking of tree */ + uint16 keysegs; /* Number of key-segment */ + uint16 flag; /* NOSAME, PACK_USED */ + + uint8 key_alg; /* BTREE, RTREE */ + uint8 key_nr; /* key number (auto) */ + uint16 block_length; /* Length of keyblock (auto) */ + uint16 underflow_block_length; /* When to execute underflow */ + uint16 keylength; /* Tot length of keyparts (auto) */ + uint16 minlength; /* min length of (packed) key (auto) */ + uint16 maxlength; /* max length of (packed) key (auto) */ + uint32 write_comp_flag; /* compare flag for write key (auto) */ + uint32 version; /* For concurrent read/write */ + uint32 ftkey_nr; /* full-text index number */ + + HA_KEYSEG *seg, *end; + struct st_mysql_ftparser *parser; /* Fulltext [pre]parser */ + int (*bin_search)(const MARIA_KEY *key, const struct st_maria_page *page, + uint32 comp_flag, uchar **ret_pos, uchar *buff, + my_bool *was_last_key); + uint (*get_key)(MARIA_KEY *key, uint page_flag, uint nod_flag, + uchar **page); + uchar *(*skip_key)(MARIA_KEY *key, uint page_flag, uint nod_flag, + uchar *page); + int (*pack_key)(const MARIA_KEY *key, uint nod_flag, + uchar *next_key, uchar *org_key, uchar *prev_key, + struct st_maria_s_param *s_temp); + void (*store_key)(struct st_maria_keydef *keyinfo, uchar *key_pos, + struct st_maria_s_param *s_temp); + my_bool (*ck_insert)(MARIA_HA *inf, MARIA_KEY *key); + my_bool (*ck_delete)(MARIA_HA *inf, MARIA_KEY *klen); + MARIA_KEY *(*make_key)(MARIA_HA *info, MARIA_KEY *int_key, uint keynr, + uchar *key, const uchar *record, + MARIA_RECORD_POS filepos, ulonglong trid); +} MARIA_KEYDEF; + + +#define MARIA_UNIQUE_HASH_LENGTH 4 + +typedef struct st_maria_unique_def /* Segment definition of unique */ +{ + uint16 keysegs; /* Number of key-segment */ + uint8 key; /* Mapped to which key */ + uint8 null_are_equal; + HA_KEYSEG *seg, *end; +} MARIA_UNIQUEDEF; + +typedef struct st_maria_decode_tree /* Decode huff-table */ +{ + uint16 *table; + uint quick_table_bits; + uchar *intervalls; +} MARIA_DECODE_TREE; + + +struct st_maria_bit_buff; + +/* + Note that null markers should always be first in a row ! + When creating a column, one should only specify: + type, length, null_bit and null_pos +*/ + +typedef struct st_maria_columndef /* column information */ +{ + enum en_fieldtype type; + uint32 offset; /* Offset to position in row */ + uint16 length; /* length of field */ + uint16 column_nr; + /* Intern variable (size of total storage area for the row) */ + uint16 fill_length; + uint16 null_pos; /* Position for null marker */ + uint16 empty_pos; /* Position for empty marker */ + uint8 null_bit; /* If column may be NULL */ + /* Intern. Set if column should be zero packed (part of empty_bits) */ + uint8 empty_bit; + +#ifndef NOT_PACKED_DATABASES + void(*unpack)(struct st_maria_columndef *rec, + struct st_maria_bit_buff *buff, + uchar *start, uchar *end); + enum en_fieldtype base_type; + uint space_length_bits, pack_type; + MARIA_DECODE_TREE *huff_tree; +#endif +} MARIA_COLUMNDEF; + + +extern ulong maria_block_size, maria_checkpoint_frequency; +extern ulong maria_concurrent_insert; +extern my_bool maria_flush, maria_single_user, maria_page_checksums; +extern my_bool maria_delay_key_write; +extern my_off_t maria_max_temp_length; +extern ulong maria_bulk_insert_tree_size, maria_data_pointer_size; +extern MY_TMPDIR *maria_tmpdir; +extern my_bool maria_encrypt_tables; + +/* + This is used to check if a symlink points into the mysql data home, + which is normally forbidden as it can be used to get access to + not privileged data +*/ +extern int (*maria_test_invalid_symlink)(const char *filename); + + /* Prototypes for maria-functions */ + +extern int maria_init(void); +extern void maria_end(void); +extern my_bool maria_upgrade(void); +extern int maria_close(MARIA_HA *file); +extern int maria_delete(MARIA_HA *file, const uchar *buff); +extern MARIA_HA *maria_open(const char *name, int mode, + uint wait_if_locked); +extern MARIA_HA *maria_clone(struct st_maria_share *share, int mode); +extern int maria_panic(enum ha_panic_function function); +extern int maria_rfirst(MARIA_HA *file, uchar *buf, int inx); +extern int maria_rkey(MARIA_HA *file, uchar *buf, int inx, + const uchar *key, key_part_map keypart_map, + enum ha_rkey_function search_flag); +extern int maria_rlast(MARIA_HA *file, uchar *buf, int inx); +extern int maria_rnext(MARIA_HA *file, uchar *buf, int inx); +extern int maria_rnext_same(MARIA_HA *info, uchar *buf); +extern int maria_rprev(MARIA_HA *file, uchar *buf, int inx); +extern int maria_rrnd(MARIA_HA *file, uchar *buf, + MARIA_RECORD_POS pos); +extern int maria_scan_init(MARIA_HA *file); +extern int maria_scan(MARIA_HA *file, uchar *buf); +extern void maria_scan_end(MARIA_HA *file); +extern int maria_rsame(MARIA_HA *file, uchar *record, int inx); +extern int maria_rsame_with_pos(MARIA_HA *file, uchar *record, + int inx, MARIA_RECORD_POS pos); +extern int maria_update(MARIA_HA *file, const uchar *old, + uchar *new_record); +extern int maria_write(MARIA_HA *file, uchar *buff); +extern MARIA_RECORD_POS maria_position(MARIA_HA *file); +extern int maria_status(MARIA_HA *info, MARIA_INFO *x, uint flag); +extern int maria_lock_database(MARIA_HA *file, int lock_type); +extern int maria_create(const char *name, enum data_file_type record_type, + uint keys, MARIA_KEYDEF *keydef, + uint columns, MARIA_COLUMNDEF *columndef, + uint uniques, MARIA_UNIQUEDEF *uniquedef, + MARIA_CREATE_INFO *create_info, uint flags); +extern int maria_delete_table(const char *name); +extern int maria_rename(const char *from, const char *to); +extern int maria_extra(MARIA_HA *file, + enum ha_extra_function function, void *extra_arg); +extern int maria_reset(MARIA_HA *file); +extern ha_rows maria_records_in_range(MARIA_HA *info, int inx, + key_range *min_key, key_range *max_key); +extern int maria_is_changed(MARIA_HA *info); +extern int maria_delete_all_rows(MARIA_HA *info); +extern uint maria_get_pointer_length(ulonglong file_length, uint def); +extern int maria_commit(MARIA_HA *info); +extern int maria_begin(MARIA_HA *info); +extern void maria_disable_logging(MARIA_HA *info); +extern void maria_enable_logging(MARIA_HA *info); + +#define HA_RECOVER_NONE 0 /* No automatic recover */ +#define HA_RECOVER_DEFAULT 1 /* Automatic recover active */ +#define HA_RECOVER_BACKUP 2 /* Make a backupfile on recover */ +#define HA_RECOVER_FORCE 4 /* Recover even if we loose rows */ +#define HA_RECOVER_QUICK 8 /* Don't check rows in data file */ + +#define HA_RECOVER_ANY (HA_RECOVER_DEFAULT | HA_RECOVER_BACKUP | HA_RECOVER_FORCE | HA_RECOVER_QUICK) + +/* this is used to pass to mysql_mariachk_table */ + +#define MARIA_CHK_REPAIR 1 /* equivalent to mariachk -r */ +#define MARIA_CHK_VERIFY 2 /* Verify, run repair if failure */ + +typedef uint maria_bit_type; + +typedef struct st_maria_bit_buff +{ /* Used for packing of record */ + maria_bit_type current_byte; + uint bits; + uchar *pos, *end, *blob_pos, *blob_end; + uint error; +} MARIA_BIT_BUFF; + +/* functions in maria_check */ +void maria_chk_init(HA_CHECK *param); +void maria_chk_init_for_check(HA_CHECK *param, MARIA_HA *info); +int maria_chk_status(HA_CHECK *param, MARIA_HA *info); +int maria_chk_del(HA_CHECK *param, MARIA_HA *info, ulonglong test_flag); +int maria_chk_size(HA_CHECK *param, MARIA_HA *info); +int maria_chk_key(HA_CHECK *param, MARIA_HA *info); +int maria_chk_data_link(HA_CHECK *param, MARIA_HA *info, my_bool extend); +int maria_repair(HA_CHECK *param, MARIA_HA *info, char * name, my_bool); +int maria_sort_index(HA_CHECK *param, MARIA_HA *info, char * name); +int maria_zerofill(HA_CHECK *param, MARIA_HA *info, const char *name); +int maria_repair_by_sort(HA_CHECK *param, MARIA_HA *info, + const char *name, my_bool rep_quick); +int maria_repair_parallel(HA_CHECK *param, register MARIA_HA *info, + const char *name, my_bool rep_quick); +int maria_change_to_newfile(const char *filename, const char *old_ext, + const char *new_ext, time_t backup_time, + myf myflags); +void maria_lock_memory(HA_CHECK *param); +int maria_update_state_info(HA_CHECK *param, MARIA_HA *info, uint update); +void maria_update_key_parts(MARIA_KEYDEF *keyinfo, double *rec_per_key_part, + ulonglong *unique, ulonglong *notnull, + ulonglong records); +int maria_filecopy(HA_CHECK *param, File to, File from, my_off_t start, + my_off_t length, const char *type); +int maria_movepoint(MARIA_HA *info, uchar *record, my_off_t oldpos, + my_off_t newpos, uint prot_key); +int maria_test_if_almost_full(MARIA_HA *info); +int maria_recreate_table(HA_CHECK *param, MARIA_HA **org_info, char *filename); +int maria_disable_indexes(MARIA_HA *info); +int maria_enable_indexes(MARIA_HA *info); +int maria_indexes_are_disabled(MARIA_HA *info); +void maria_disable_indexes_for_rebuild(MARIA_HA *info, ha_rows rows, + my_bool all_keys); +my_bool maria_test_if_sort_rep(MARIA_HA *info, ha_rows rows, ulonglong key_map, + my_bool force); + +int maria_init_bulk_insert(MARIA_HA *info, size_t cache_size, ha_rows rows); +void maria_flush_bulk_insert(MARIA_HA *info, uint inx); +void maria_end_bulk_insert(MARIA_HA *info); +int maria_preload(MARIA_HA *info, ulonglong key_map, my_bool ignore_leaves); +void maria_versioning(MARIA_HA *info, my_bool versioning); +void maria_ignore_trids(MARIA_HA *info); +uint maria_max_key_length(void); +#define maria_max_key_segments() HA_MAX_KEY_SEG + +/* fulltext functions */ +FT_INFO *maria_ft_init_search(uint,void *, uint, uchar *, size_t, + CHARSET_INFO *, uchar *); + +/* 'Almost-internal' Maria functions */ + +void _ma_update_auto_increment_key(HA_CHECK *param, MARIA_HA *info, + my_bool repair); + + +#ifdef __cplusplus +} +#endif +#endif diff --git a/EQ2/source/depends/mariadb-10.1.19/include/my_alarm.h b/EQ2/source/depends/mariadb-10.1.19/include/my_alarm.h new file mode 100644 index 000000000..73bb6ab76 --- /dev/null +++ b/EQ2/source/depends/mariadb-10.1.19/include/my_alarm.h @@ -0,0 +1,59 @@ +/* + Copyright (c) 2000, 2010, Oracle and/or its affiliates. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; version 2 of the License. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ + +/* + File to include when we want to use alarm or a loop_counter to display + some information when a program is running +*/ +#ifndef _my_alarm_h +#define _my_alarm_h +#ifdef __cplusplus +extern "C" { +#endif + +extern int volatile my_have_got_alarm; +extern ulong my_time_to_wait_for_lock; + +#if defined(HAVE_ALARM) && !defined(NO_ALARM_LOOP) +#include +#define ALARM_VARIABLES uint alarm_old=0; \ + sig_return alarm_signal=0 +#define ALARM_INIT my_have_got_alarm=0 ; \ + alarm_old=(uint) alarm(MY_HOW_OFTEN_TO_ALARM); \ + alarm_signal=signal(SIGALRM,my_set_alarm_variable); +#define ALARM_END (void) signal(SIGALRM,alarm_signal); \ + (void) alarm(alarm_old); +#define ALARM_TEST my_have_got_alarm +#ifdef SIGNAL_HANDLER_RESET_ON_DELIVERY +#define ALARM_REINIT (void) alarm(MY_HOW_OFTEN_TO_ALARM); \ + (void) signal(SIGALRM,my_set_alarm_variable);\ + my_have_got_alarm=0; +#else +#define ALARM_REINIT (void) alarm((uint) MY_HOW_OFTEN_TO_ALARM); \ + my_have_got_alarm=0; +#endif /* SIGNAL_HANDLER_RESET_ON_DELIVERY */ +#else +#define ALARM_VARIABLES long alarm_pos=0,alarm_end_pos=MY_HOW_OFTEN_TO_WRITE-1 +#define ALARM_INIT +#define ALARM_END +#define ALARM_TEST (alarm_pos++ >= alarm_end_pos) +#define ALARM_REINIT (alarm_end_pos+=MY_HOW_OFTEN_TO_WRITE) +#endif /* HAVE_ALARM */ + +#ifdef __cplusplus +} +#endif +#endif diff --git a/EQ2/source/depends/mariadb-10.1.19/include/my_alloc.h b/EQ2/source/depends/mariadb-10.1.19/include/my_alloc.h new file mode 100644 index 000000000..85ac75fc6 --- /dev/null +++ b/EQ2/source/depends/mariadb-10.1.19/include/my_alloc.h @@ -0,0 +1,60 @@ +/* Copyright (c) 2000, 2010, Oracle and/or its affiliates. All rights reserved. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; version 2 of the License. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ + +/* + Data structures for mysys/my_alloc.c (root memory allocator) +*/ + +#ifndef _my_alloc_h +#define _my_alloc_h + +#define ALLOC_MAX_BLOCK_TO_DROP 4096 +#define ALLOC_MAX_BLOCK_USAGE_BEFORE_DROP 10 + +#ifdef __cplusplus +extern "C" { +#endif + +typedef struct st_used_mem +{ /* struct for once_alloc (block) */ + struct st_used_mem *next; /* Next block in use */ + size_t left; /* memory left in block */ + size_t size; /* size of block */ +} USED_MEM; + + +typedef struct st_mem_root +{ + USED_MEM *free; /* blocks with free memory in it */ + USED_MEM *used; /* blocks almost without free memory */ + USED_MEM *pre_alloc; /* preallocated block */ + /* if block have less memory it will be put in 'used' list */ + size_t min_malloc; + size_t block_size; /* initial block size */ + unsigned int block_num; /* allocated blocks counter */ + /* + first free block in queue test counter (if it exceed + MAX_BLOCK_USAGE_BEFORE_DROP block will be dropped in 'used' list) + */ + unsigned int first_block_usage; + + void (*error_handler)(void); +} MEM_ROOT; + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/EQ2/source/depends/mariadb-10.1.19/include/my_atomic.h b/EQ2/source/depends/mariadb-10.1.19/include/my_atomic.h new file mode 100644 index 000000000..c75b65db3 --- /dev/null +++ b/EQ2/source/depends/mariadb-10.1.19/include/my_atomic.h @@ -0,0 +1,406 @@ +#ifndef MY_ATOMIC_INCLUDED +#define MY_ATOMIC_INCLUDED + +/* Copyright (c) 2006, 2010, Oracle and/or its affiliates. All rights reserved. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; version 2 of the License. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ + +/* + This header defines five atomic operations: + + my_atomic_add#(&var, what) + my_atomic_add#_explicit(&var, what, memory_order) + 'Fetch and Add' + add 'what' to *var, and return the old value of *var + All memory orders are valid. + + my_atomic_fas#(&var, what) + my_atomic_fas#_explicit(&var, what, memory_order) + 'Fetch And Store' + store 'what' in *var, and return the old value of *var + All memory orders are valid. + + my_atomic_cas#(&var, &old, new) + my_atomic_cas#_weak_explicit(&var, &old, new, succ, fail) + my_atomic_cas#_strong_explicit(&var, &old, new, succ, fail) + 'Compare And Swap' + if *var is equal to *old, then store 'new' in *var, and return TRUE + otherwise store *var in *old, and return FALSE + succ - the memory synchronization ordering for the read-modify-write + operation if the comparison succeeds. All memory orders are valid. + fail - the memory synchronization ordering for the load operation if the + comparison fails. Cannot be MY_MEMORY_ORDER_RELEASE or + MY_MEMORY_ORDER_ACQ_REL and cannot specify stronger ordering than succ. + + The weak form is allowed to fail spuriously, that is, act as if *var != *old + even if they are equal. When a compare-and-exchange is in a loop, the weak + version will yield better performance on some platforms. When a weak + compare-and-exchange would require a loop and a strong one would not, the + strong one is preferable. + + my_atomic_load#(&var) + my_atomic_load#_explicit(&var, memory_order) + return *var + Order must be one of MY_MEMORY_ORDER_RELAXED, MY_MEMORY_ORDER_CONSUME, + MY_MEMORY_ORDER_ACQUIRE, MY_MEMORY_ORDER_SEQ_CST. + + my_atomic_store#(&var, what) + my_atomic_store#_explicit(&var, what, memory_order) + store 'what' in *var + Order must be one of MY_MEMORY_ORDER_RELAXED, MY_MEMORY_ORDER_RELEASE, + MY_MEMORY_ORDER_SEQ_CST. + + '#' is substituted by a size suffix - 8, 16, 32, 64, or ptr + (e.g. my_atomic_add8, my_atomic_fas32, my_atomic_casptr). + + The first version orders memory accesses according to MY_MEMORY_ORDER_SEQ_CST, + the second version (with _explicit suffix) orders memory accesses according to + given memory order. + + memory_order specifies how non-atomic memory accesses are to be ordered around + an atomic operation: + + MY_MEMORY_ORDER_RELAXED - there are no constraints on reordering of memory + accesses around the atomic variable. + MY_MEMORY_ORDER_CONSUME - no reads in the current thread dependent on the + value currently loaded can be reordered before this + load. This ensures that writes to dependent + variables in other threads that release the same + atomic variable are visible in the current thread. + On most platforms, this affects compiler + optimization only. + MY_MEMORY_ORDER_ACQUIRE - no reads in the current thread can be reordered + before this load. This ensures that all writes in + other threads that release the same atomic variable + are visible in the current thread. + MY_MEMORY_ORDER_RELEASE - no writes in the current thread can be reordered + after this store. This ensures that all writes in + the current thread are visible in other threads that + acquire the same atomic variable. + MY_MEMORY_ORDER_ACQ_REL - no reads in the current thread can be reordered + before this load as well as no writes in the current + thread can be reordered after this store. The + operation is read-modify-write operation. It is + ensured that all writes in another threads that + release the same atomic variable are visible before + the modification and the modification is visible in + other threads that acquire the same atomic variable. + MY_MEMORY_ORDER_SEQ_CST - The operation has the same semantics as + acquire-release operation, and additionally has + sequentially-consistent operation ordering. + + 8- and 16-bit atomics aren't implemented for windows (see generic-msvc.h), + but can be added, if necessary. +*/ + +#define intptr void * +/** + Currently we don't support 8-bit and 16-bit operations. + It can be added later if needed. +*/ +#undef MY_ATOMIC_HAS_8_16 + +/* + * Attempt to do atomic ops without locks + */ +#include "atomic/nolock.h" + +#ifndef make_atomic_cas_body +/* nolock.h was not able to generate even a CAS function, fall back */ +#error atomic ops for this platform are not implemented +#endif + +/* define missing functions by using the already generated ones */ +#ifndef make_atomic_add_body +#define make_atomic_add_body(S) \ + int ## S tmp=*a; \ + while (!my_atomic_cas ## S(a, &tmp, tmp+v)) ; \ + v=tmp; +#endif +#ifndef make_atomic_fas_body +#define make_atomic_fas_body(S) \ + int ## S tmp=*a; \ + while (!my_atomic_cas ## S(a, &tmp, v)) ; \ + v=tmp; +#endif +#ifndef make_atomic_load_body +#define make_atomic_load_body(S) \ + ret= 0; /* avoid compiler warning */ \ + (void)(my_atomic_cas ## S(a, &ret, ret)); +#endif +#ifndef make_atomic_store_body +#define make_atomic_store_body(S) \ + (void)(my_atomic_fas ## S (a, v)); +#endif + +/* + transparent_union doesn't work in g++ + Bug ? + + Darwin's gcc doesn't want to put pointers in a transparent_union + when built with -arch ppc64. Complains: + warning: 'transparent_union' attribute ignored +*/ +#if defined(__GNUC__) && !defined(__cplusplus) && \ + ! (defined(__APPLE__) && (defined(_ARCH_PPC64) ||defined (_ARCH_PPC))) +/* + we want to be able to use my_atomic_xxx functions with + both signed and unsigned integers. But gcc will issue a warning + "passing arg N of `my_atomic_XXX' as [un]signed due to prototype" + if the signedness of the argument doesn't match the prototype, or + "pointer targets in passing argument N of my_atomic_XXX differ in signedness" + if int* is used where uint* is expected (or vice versa). + Let's shut these warnings up +*/ +#define make_transparent_unions(S) \ + typedef union { \ + int ## S i; \ + uint ## S u; \ + } U_ ## S __attribute__ ((transparent_union)); \ + typedef union { \ + int ## S volatile *i; \ + uint ## S volatile *u; \ + } Uv_ ## S __attribute__ ((transparent_union)); +#define uintptr intptr +make_transparent_unions(8) +make_transparent_unions(16) +make_transparent_unions(32) +make_transparent_unions(64) +make_transparent_unions(ptr) +#undef uintptr +#undef make_transparent_unions +#define a U_a.i +#define cmp U_cmp.i +#define v U_v.i +#define set U_set.i +#else +#define U_8 int8 +#define U_16 int16 +#define U_32 int32 +#define U_64 int64 +#define U_ptr intptr +#define Uv_8 int8 +#define Uv_16 int16 +#define Uv_32 int32 +#define Uv_64 int64 +#define Uv_ptr intptr +#define U_a volatile *a +#define U_cmp *cmp +#define U_v v +#define U_set set +#endif /* __GCC__ transparent_union magic */ + +#define make_atomic_cas(S) \ +static inline int my_atomic_cas ## S(Uv_ ## S U_a, \ + Uv_ ## S U_cmp, U_ ## S U_set) \ +{ \ + int8 ret; \ + make_atomic_cas_body(S); \ + return ret; \ +} + +#define make_atomic_add(S) \ +static inline int ## S my_atomic_add ## S( \ + Uv_ ## S U_a, U_ ## S U_v) \ +{ \ + make_atomic_add_body(S); \ + return v; \ +} + +#define make_atomic_fas(S) \ +static inline int ## S my_atomic_fas ## S( \ + Uv_ ## S U_a, U_ ## S U_v) \ +{ \ + make_atomic_fas_body(S); \ + return v; \ +} + +#define make_atomic_load(S) \ +static inline int ## S my_atomic_load ## S(Uv_ ## S U_a) \ +{ \ + int ## S ret; \ + make_atomic_load_body(S); \ + return ret; \ +} + +#define make_atomic_store(S) \ +static inline void my_atomic_store ## S( \ + Uv_ ## S U_a, U_ ## S U_v) \ +{ \ + make_atomic_store_body(S); \ +} + +#ifdef MY_ATOMIC_HAS_8_16 +make_atomic_cas(8) +make_atomic_cas(16) +#endif +make_atomic_cas(32) +make_atomic_cas(64) +make_atomic_cas(ptr) + +#ifdef MY_ATOMIC_HAS_8_16 +make_atomic_add(8) +make_atomic_add(16) +#endif +make_atomic_add(32) +make_atomic_add(64) + +#ifdef MY_ATOMIC_HAS_8_16 +make_atomic_load(8) +make_atomic_load(16) +#endif +make_atomic_load(32) +make_atomic_load(64) +make_atomic_load(ptr) + +#ifdef MY_ATOMIC_HAS_8_16 +make_atomic_fas(8) +make_atomic_fas(16) +#endif +make_atomic_fas(32) +make_atomic_fas(64) +make_atomic_fas(ptr) + +#ifdef MY_ATOMIC_HAS_8_16 +make_atomic_store(8) +make_atomic_store(16) +#endif +make_atomic_store(32) +make_atomic_store(64) +make_atomic_store(ptr) + +#ifdef _atomic_h_cleanup_ +#include _atomic_h_cleanup_ +#undef _atomic_h_cleanup_ +#endif + +#undef U_8 +#undef U_16 +#undef U_32 +#undef U_64 +#undef U_ptr +#undef Uv_8 +#undef Uv_16 +#undef Uv_32 +#undef Uv_64 +#undef Uv_ptr +#undef a +#undef cmp +#undef v +#undef set +#undef U_a +#undef U_cmp +#undef U_v +#undef U_set +#undef make_atomic_add +#undef make_atomic_cas +#undef make_atomic_load +#undef make_atomic_store +#undef make_atomic_fas +#undef make_atomic_add_body +#undef make_atomic_cas_body +#undef make_atomic_load_body +#undef make_atomic_store_body +#undef make_atomic_fas_body +#undef intptr + +/* + the macro below defines (as an expression) the code that + will be run in spin-loops. Intel manuals recummend to have PAUSE there. + It is expected to be defined in include/atomic/ *.h files +*/ +#ifndef LF_BACKOFF +#define LF_BACKOFF (1) +#endif + +#define MY_ATOMIC_OK 0 +#define MY_ATOMIC_NOT_1CPU 1 +extern int my_atomic_initialize(); + +#ifdef __ATOMIC_SEQ_CST +#define MY_MEMORY_ORDER_RELAXED __ATOMIC_RELAXED +#define MY_MEMORY_ORDER_CONSUME __ATOMIC_CONSUME +#define MY_MEMORY_ORDER_ACQUIRE __ATOMIC_ACQUIRE +#define MY_MEMORY_ORDER_RELEASE __ATOMIC_RELEASE +#define MY_MEMORY_ORDER_ACQ_REL __ATOMIC_ACQ_REL +#define MY_MEMORY_ORDER_SEQ_CST __ATOMIC_SEQ_CST + +#define my_atomic_store32_explicit(P, D, O) __atomic_store_n((P), (D), (O)) +#define my_atomic_store64_explicit(P, D, O) __atomic_store_n((P), (D), (O)) +#define my_atomic_storeptr_explicit(P, D, O) __atomic_store_n((P), (D), (O)) + +#define my_atomic_load32_explicit(P, O) __atomic_load_n((P), (O)) +#define my_atomic_load64_explicit(P, O) __atomic_load_n((P), (O)) +#define my_atomic_loadptr_explicit(P, O) __atomic_load_n((P), (O)) + +#define my_atomic_fas32_explicit(P, D, O) __atomic_exchange_n((P), (D), (O)) +#define my_atomic_fas64_explicit(P, D, O) __atomic_exchange_n((P), (D), (O)) +#define my_atomic_fasptr_explicit(P, D, O) __atomic_exchange_n((P), (D), (O)) + +#define my_atomic_add32_explicit(P, A, O) __atomic_fetch_add((P), (A), (O)) +#define my_atomic_add64_explicit(P, A, O) __atomic_fetch_add((P), (A), (O)) + +#define my_atomic_cas32_weak_explicit(P, E, D, S, F) \ + __atomic_compare_exchange_n((P), (E), (D), true, (S), (F)) +#define my_atomic_cas64_weak_explicit(P, E, D, S, F) \ + __atomic_compare_exchange_n((P), (E), (D), true, (S), (F)) +#define my_atomic_casptr_weak_explicit(P, E, D, S, F) \ + __atomic_compare_exchange_n((P), (E), (D), true, (S), (F)) + +#define my_atomic_cas32_strong_explicit(P, E, D, S, F) \ + __atomic_compare_exchange_n((P), (E), (D), false, (S), (F)) +#define my_atomic_cas64_strong_explicit(P, E, D, S, F) \ + __atomic_compare_exchange_n((P), (E), (D), false, (S), (F)) +#define my_atomic_casptr_strong_explicit(P, E, D, S, F) \ + __atomic_compare_exchange_n((P), (E), (D), false, (S), (F)) +#else +#define MY_MEMORY_ORDER_RELAXED +#define MY_MEMORY_ORDER_CONSUME +#define MY_MEMORY_ORDER_ACQUIRE +#define MY_MEMORY_ORDER_RELEASE +#define MY_MEMORY_ORDER_ACQ_REL +#define MY_MEMORY_ORDER_SEQ_CST + +#define my_atomic_store32_explicit(P, D, O) my_atomic_store32((P), (D)) +#define my_atomic_store64_explicit(P, D, O) my_atomic_store64((P), (D)) +#define my_atomic_storeptr_explicit(P, D, O) my_atomic_storeptr((P), (D)) + +#define my_atomic_load32_explicit(P, O) my_atomic_load32((P)) +#define my_atomic_load64_explicit(P, O) my_atomic_load64((P)) +#define my_atomic_loadptr_explicit(P, O) my_atomic_loadptr((P)) + +#define my_atomic_fas32_explicit(P, D, O) my_atomic_fas32((P), (D)) +#define my_atomic_fas64_explicit(P, D, O) my_atomic_fas64((P), (D)) +#define my_atomic_fasptr_explicit(P, D, O) my_atomic_fasptr((P), (D)) + +#define my_atomic_add32_explicit(P, A, O) my_atomic_add32((P), (A)) +#define my_atomic_add64_explicit(P, A, O) my_atomic_add64((P), (A)) +#define my_atomic_addptr_explicit(P, A, O) my_atomic_addptr((P), (A)) + +#define my_atomic_cas32_weak_explicit(P, E, D, S, F) \ + my_atomic_cas32((P), (E), (D)) +#define my_atomic_cas64_weak_explicit(P, E, D, S, F) \ + my_atomic_cas64((P), (E), (D)) +#define my_atomic_casptr_weak_explicit(P, E, D, S, F) \ + my_atomic_casptr((P), (E), (D)) + +#define my_atomic_cas32_strong_explicit(P, E, D, S, F) \ + my_atomic_cas32((P), (E), (D)) +#define my_atomic_cas64_strong_explicit(P, E, D, S, F) \ + my_atomic_cas64((P), (E), (D)) +#define my_atomic_casptr_strong_explicit(P, E, D, S, F) \ + my_atomic_casptr((P), (E), (D)) +#endif + +#endif /* MY_ATOMIC_INCLUDED */ diff --git a/EQ2/source/depends/mariadb-10.1.19/include/my_attribute.h b/EQ2/source/depends/mariadb-10.1.19/include/my_attribute.h new file mode 100644 index 000000000..14ed35cfe --- /dev/null +++ b/EQ2/source/depends/mariadb-10.1.19/include/my_attribute.h @@ -0,0 +1,74 @@ +/* Copyright (c) 2000, 2010, Oracle and/or its affiliates. All rights reserved. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; version 2 of the License. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ + +/* + Helper macros used for setting different __attributes__ + on functions in a portable fashion +*/ + +#ifndef _my_attribute_h +#define _my_attribute_h + +#if defined(__GNUC__) +# ifndef GCC_VERSION +# define GCC_VERSION (__GNUC__ * 1000 + __GNUC_MINOR__) +# endif +#endif + +/* + Disable __attribute__() on gcc < 2.7, g++ < 3.4, and non-gcc compilers. + Some forms of __attribute__ are actually supported in earlier versions of + g++, but we just disable them all because we only use them to generate + compilation warnings. +*/ +#ifndef __attribute__ +# if !defined(__GNUC__) +# define __attribute__(A) +# else +# ifndef GCC_VERSION +# define GCC_VERSION (__GNUC__ * 1000 + __GNUC_MINOR__) +# endif +# if GCC_VERSION < 2008 +# define __attribute__(A) +# elif defined(__cplusplus) && GCC_VERSION < 3004 +# define __attribute__(A) +# endif +# endif +#endif + +/* + __attribute__((format(...))) is only supported in gcc >= 2.8 and g++ >= 3.4 + But that's already covered by the __attribute__ tests above, so this is + just a convenience macro. +*/ +#ifndef ATTRIBUTE_FORMAT +# define ATTRIBUTE_FORMAT(style, m, n) __attribute__((format(style, m, n))) +#endif + +/* + + __attribute__((format(...))) on a function pointer is not supported + until gcc 3.1 +*/ +#ifndef ATTRIBUTE_FORMAT_FPTR +# if (GCC_VERSION >= 3001) +# define ATTRIBUTE_FORMAT_FPTR(style, m, n) ATTRIBUTE_FORMAT(style, m, n) +# else +# define ATTRIBUTE_FORMAT_FPTR(style, m, n) +# endif /* GNUC >= 3.1 */ +#endif + + +#endif diff --git a/EQ2/source/depends/mariadb-10.1.19/include/my_base.h b/EQ2/source/depends/mariadb-10.1.19/include/my_base.h new file mode 100644 index 000000000..8b546edac --- /dev/null +++ b/EQ2/source/depends/mariadb-10.1.19/include/my_base.h @@ -0,0 +1,652 @@ +/* Copyright (c) 2000, 2012, Oracle and/or its affiliates. + Copyright (c) 1995, 2012 Monty Program Ab + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; version 2 of the License. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software Foundation, + Inc., 51 Franklin Street, Suite 500, Boston, MA 02110-1335 USA */ + + +/* This file includes constants used with all databases */ + +#ifndef _my_base_h +#define _my_base_h + +#include +#include /* This includes types */ +#include +#include +#include + +#ifndef EOVERFLOW +#define EOVERFLOW 84 +#endif + +#include + +/* The following is bits in the flag parameter to ha_open() */ + +#define HA_OPEN_ABORT_IF_LOCKED 0 /* default */ +#define HA_OPEN_WAIT_IF_LOCKED 1 +#define HA_OPEN_IGNORE_IF_LOCKED 2 +#define HA_OPEN_TMP_TABLE 4 /* Table is a temp table */ +#define HA_OPEN_DELAY_KEY_WRITE 8 /* Don't update index */ +#define HA_OPEN_ABORT_IF_CRASHED 16 +#define HA_OPEN_FOR_REPAIR 32 /* open even if crashed */ +#define HA_OPEN_FROM_SQL_LAYER 64 +#define HA_OPEN_MMAP 128 /* open memory mapped */ +#define HA_OPEN_COPY 256 /* Open copy (for repair) */ +/* Internal temp table, used for temporary results */ +#define HA_OPEN_INTERNAL_TABLE 512 +#define HA_OPEN_NO_PSI_CALL 1024 /* Don't call/connect PSI */ +#define HA_OPEN_MERGE_TABLE 2048 +/* + Allow opening even if table is incompatible as this is for ALTER TABLE which + will fix the table structure. +*/ +#define HA_OPEN_FOR_ALTER 4096 + +/* The following is parameter to ha_rkey() how to use key */ + +/* + We define a complete-field prefix of a key value as a prefix where + the last included field in the prefix contains the full field, not + just some bytes from the start of the field. A partial-field prefix + is allowed to contain only a few first bytes from the last included + field. + + Below HA_READ_KEY_EXACT, ..., HA_READ_BEFORE_KEY can take a + complete-field prefix of a key value as the search + key. HA_READ_PREFIX and HA_READ_PREFIX_LAST could also take a + partial-field prefix, but currently (4.0.10) they are only used with + complete-field prefixes. MySQL uses a padding trick to implement + LIKE 'abc%' queries. + + NOTE that in InnoDB HA_READ_PREFIX_LAST will NOT work with a + partial-field prefix because InnoDB currently strips spaces from the + end of varchar fields! +*/ + +enum ha_rkey_function { + HA_READ_KEY_EXACT, /* Find first record else error */ + HA_READ_KEY_OR_NEXT, /* Record or next record */ + HA_READ_KEY_OR_PREV, /* Record or previous */ + HA_READ_AFTER_KEY, /* Find next rec. after key-record */ + HA_READ_BEFORE_KEY, /* Find next rec. before key-record */ + HA_READ_PREFIX, /* Key which as same prefix */ + HA_READ_PREFIX_LAST, /* Last key with the same prefix */ + HA_READ_PREFIX_LAST_OR_PREV, /* Last or prev key with the same prefix */ + HA_READ_MBR_CONTAIN, + HA_READ_MBR_INTERSECT, + HA_READ_MBR_WITHIN, + HA_READ_MBR_DISJOINT, + HA_READ_MBR_EQUAL +}; + + /* Key algorithm types */ + +enum ha_key_alg { + HA_KEY_ALG_UNDEF= 0, /* Not specified (old file) */ + HA_KEY_ALG_BTREE= 1, /* B-tree, default one */ + HA_KEY_ALG_RTREE= 2, /* R-tree, for spatial searches */ + HA_KEY_ALG_HASH= 3, /* HASH keys (HEAP tables) */ + HA_KEY_ALG_FULLTEXT= 4 /* FULLTEXT (MyISAM tables) */ +}; + + /* Storage media types */ + +enum ha_storage_media { + HA_SM_DEFAULT= 0, /* Not specified (engine default) */ + HA_SM_DISK= 1, /* DISK storage */ + HA_SM_MEMORY= 2 /* MAIN MEMORY storage */ +}; + + /* The following is parameter to ha_extra() */ + +enum ha_extra_function { + HA_EXTRA_NORMAL=0, /* Optimize for space (def) */ + HA_EXTRA_QUICK=1, /* Optimize for speed */ + HA_EXTRA_NOT_USED=2, /* Should be ignored by handler */ + HA_EXTRA_CACHE=3, /* Cache record in HA_rrnd() */ + HA_EXTRA_NO_CACHE=4, /* End caching of records (def) */ + HA_EXTRA_NO_READCHECK=5, /* No readcheck on update */ + HA_EXTRA_READCHECK=6, /* Use readcheck (def) */ + HA_EXTRA_KEYREAD=7, /* Read only key to database */ + HA_EXTRA_NO_KEYREAD=8, /* Normal read of records (def) */ + HA_EXTRA_NO_USER_CHANGE=9, /* No user is allowed to write */ + HA_EXTRA_KEY_CACHE=10, + HA_EXTRA_NO_KEY_CACHE=11, + HA_EXTRA_WAIT_LOCK=12, /* Wait until file is avalably (def) */ + HA_EXTRA_NO_WAIT_LOCK=13, /* If file is locked, return quickly */ + HA_EXTRA_WRITE_CACHE=14, /* Use write cache in ha_write() */ + HA_EXTRA_FLUSH_CACHE=15, /* flush write_record_cache */ + HA_EXTRA_NO_KEYS=16, /* Remove all update of keys */ + HA_EXTRA_KEYREAD_CHANGE_POS=17, /* Keyread, but change pos */ + /* xxxxchk -r must be used */ + HA_EXTRA_REMEMBER_POS=18, /* Remember pos for next/prev */ + HA_EXTRA_RESTORE_POS=19, + HA_EXTRA_REINIT_CACHE=20, /* init cache from current record */ + HA_EXTRA_FORCE_REOPEN=21, /* Datafile have changed on disk */ + HA_EXTRA_FLUSH, /* Flush tables to disk */ + HA_EXTRA_NO_ROWS, /* Don't write rows */ + HA_EXTRA_RESET_STATE, /* Reset positions */ + HA_EXTRA_IGNORE_DUP_KEY, /* Dup keys don't rollback everything*/ + HA_EXTRA_NO_IGNORE_DUP_KEY, + HA_EXTRA_PREPARE_FOR_DROP, + HA_EXTRA_PREPARE_FOR_UPDATE, /* Remove read cache if problems */ + HA_EXTRA_PRELOAD_BUFFER_SIZE, /* Set buffer size for preloading */ + /* + On-the-fly switching between unique and non-unique key inserting. + */ + HA_EXTRA_CHANGE_KEY_TO_UNIQUE, + HA_EXTRA_CHANGE_KEY_TO_DUP, + /* + When using HA_EXTRA_KEYREAD, overwrite only key member fields and keep + other fields intact. When this is off (by default) InnoDB will use memcpy + to overwrite entire row. + */ + HA_EXTRA_KEYREAD_PRESERVE_FIELDS, + HA_EXTRA_MMAP, + /* + Ignore if the a tuple is not found, continue processing the + transaction and ignore that 'row'. Needed for idempotency + handling on the slave + */ + HA_EXTRA_IGNORE_NO_KEY, + HA_EXTRA_NO_IGNORE_NO_KEY, + /* + Mark the table as a log table. For some handlers (e.g. CSV) this results + in a special locking for the table. + */ + HA_EXTRA_MARK_AS_LOG_TABLE, + /* + Informs handler that write_row() which tries to insert new row into the + table and encounters some already existing row with same primary/unique + key can replace old row with new row instead of reporting error (basically + it informs handler that we do REPLACE instead of simple INSERT). + Off by default. + */ + HA_EXTRA_WRITE_CAN_REPLACE, + HA_EXTRA_WRITE_CANNOT_REPLACE, + /* + Inform handler that delete_row()/update_row() cannot batch deletes/updates + and should perform them immediately. This may be needed when table has + AFTER DELETE/UPDATE triggers which access to subject table. + These flags are reset by the handler::extra(HA_EXTRA_RESET) call. + */ + HA_EXTRA_DELETE_CANNOT_BATCH, + HA_EXTRA_UPDATE_CANNOT_BATCH, + /* + Inform handler that an "INSERT...ON DUPLICATE KEY UPDATE" will be + executed. This condition is unset by HA_EXTRA_NO_IGNORE_DUP_KEY. + */ + HA_EXTRA_INSERT_WITH_UPDATE, + /* Inform handler that we will do a rename */ + HA_EXTRA_PREPARE_FOR_RENAME, + /* + Special actions for MERGE tables. + */ + HA_EXTRA_ADD_CHILDREN_LIST, + HA_EXTRA_ATTACH_CHILDREN, + HA_EXTRA_IS_ATTACHED_CHILDREN, + HA_EXTRA_DETACH_CHILDREN, + HA_EXTRA_DETACH_CHILD, + /* Inform handler we will force a close as part of flush */ + HA_EXTRA_PREPARE_FOR_FORCED_CLOSE +}; + +/* Compatible option, to be deleted in 6.0 */ +#define HA_EXTRA_PREPARE_FOR_DELETE HA_EXTRA_PREPARE_FOR_DROP + + /* The following is parameter to ha_panic() */ + +enum ha_panic_function { + HA_PANIC_CLOSE, /* Close all databases */ + HA_PANIC_WRITE, /* Unlock and write status */ + HA_PANIC_READ /* Lock and read keyinfo */ +}; + + /* The following is parameter to ha_create(); keytypes */ + +enum ha_base_keytype { + HA_KEYTYPE_END=0, + HA_KEYTYPE_TEXT=1, /* Key is sorted as letters */ + HA_KEYTYPE_BINARY=2, /* Key is sorted as unsigned chars */ + HA_KEYTYPE_SHORT_INT=3, + HA_KEYTYPE_LONG_INT=4, + HA_KEYTYPE_FLOAT=5, + HA_KEYTYPE_DOUBLE=6, + HA_KEYTYPE_NUM=7, /* Not packed num with pre-space */ + HA_KEYTYPE_USHORT_INT=8, + HA_KEYTYPE_ULONG_INT=9, + HA_KEYTYPE_LONGLONG=10, + HA_KEYTYPE_ULONGLONG=11, + HA_KEYTYPE_INT24=12, + HA_KEYTYPE_UINT24=13, + HA_KEYTYPE_INT8=14, + /* Varchar (0-255 bytes) with length packed with 1 byte */ + HA_KEYTYPE_VARTEXT1=15, /* Key is sorted as letters */ + HA_KEYTYPE_VARBINARY1=16, /* Key is sorted as unsigned chars */ + /* Varchar (0-65535 bytes) with length packed with 2 bytes */ + HA_KEYTYPE_VARTEXT2=17, /* Key is sorted as letters */ + HA_KEYTYPE_VARBINARY2=18, /* Key is sorted as unsigned chars */ + HA_KEYTYPE_BIT=19 +}; + +#define HA_MAX_KEYTYPE 31 /* Must be log2-1 */ + +/* + These flags kan be OR:ed to key-flag + Note that these can only be up to 16 bits! +*/ + +#define HA_NOSAME 1 /* Set if not dupplicated records */ +#define HA_PACK_KEY 2 /* Pack string key to previous key */ +#define HA_AUTO_KEY 16 +#define HA_BINARY_PACK_KEY 32 /* Packing of all keys to prev key */ +#define HA_FULLTEXT 128 /* For full-text search */ +#define HA_UNIQUE_CHECK 256 /* Check the key for uniqueness */ +#define HA_SPATIAL 1024 /* For spatial search */ +#define HA_NULL_ARE_EQUAL 2048 /* NULL in key are cmp as equal */ +#define HA_GENERATED_KEY 8192 /* Automaticly generated key */ + + /* The combination of the above can be used for key type comparison. */ +#define HA_KEYFLAG_MASK (HA_NOSAME | HA_PACK_KEY | HA_AUTO_KEY | \ + HA_BINARY_PACK_KEY | HA_FULLTEXT | HA_UNIQUE_CHECK | \ + HA_SPATIAL | HA_NULL_ARE_EQUAL | HA_GENERATED_KEY) + +/* + Key contains partial segments. + + This flag is internal to the MySQL server by design. It is not supposed + neither to be saved in FRM-files, nor to be passed to storage engines. + It is intended to pass information into internal static sort_keys(KEY *, + KEY *) function. + + This flag can be calculated -- it's based on key lengths comparison. +*/ +#define HA_KEY_HAS_PART_KEY_SEG 65536 + + /* Automatic bits in key-flag */ + +#define HA_SPACE_PACK_USED 4 /* Test for if SPACE_PACK used */ +#define HA_VAR_LENGTH_KEY 8 +#define HA_NULL_PART_KEY 64 +#define HA_USES_COMMENT 4096 +#define HA_USES_PARSER 16384 /* Fulltext index uses [pre]parser */ +#define HA_USES_BLOCK_SIZE ((uint) 32768) +#define HA_SORT_ALLOWS_SAME 512 /* Intern bit when sorting records */ + +/* This flag can be used only in KEY::ext_key_flags */ +#define HA_EXT_NOSAME 131072 + + /* These flags can be added to key-seg-flag */ + +#define HA_SPACE_PACK 1 /* Pack space in key-seg */ +#define HA_PART_KEY_SEG 4 /* Used by MySQL for part-key-cols */ +#define HA_VAR_LENGTH_PART 8 +#define HA_NULL_PART 16 +#define HA_BLOB_PART 32 +#define HA_SWAP_KEY 64 +#define HA_REVERSE_SORT 128 /* Sort key in reverse order */ +#define HA_NO_SORT 256 /* do not bother sorting on this keyseg */ +/* + End space in unique/varchar are considered equal. (Like 'a' and 'a ') + Only needed for internal temporary tables. +*/ +#define HA_END_SPACE_ARE_EQUAL 512 +#define HA_BIT_PART 1024 +#define HA_CAN_MEMCMP 2048 /* internal, never stored in frm */ + + /* optionbits for database */ +#define HA_OPTION_PACK_RECORD 1 +#define HA_OPTION_PACK_KEYS 2 +#define HA_OPTION_COMPRESS_RECORD 4 +#define HA_OPTION_LONG_BLOB_PTR 8 /* new ISAM format */ +#define HA_OPTION_TMP_TABLE 16 +#define HA_OPTION_CHECKSUM 32 +#define HA_OPTION_DELAY_KEY_WRITE 64 +#define HA_OPTION_NO_PACK_KEYS 128 /* Reserved for MySQL */ +/* unused 256 */ +#define HA_OPTION_RELIES_ON_SQL_LAYER 512 +#define HA_OPTION_NULL_FIELDS 1024 +#define HA_OPTION_PAGE_CHECKSUM 2048 +/* + STATS_PERSISTENT=1 has been specified in the SQL command (either CREATE + or ALTER TABLE). Table and index statistics that are collected by the + storage engine and used by the optimizer for query optimization will be + stored on disk and will not change after a server restart. +*/ +#define HA_OPTION_STATS_PERSISTENT 4096 +/* + STATS_PERSISTENT=0 has been specified in CREATE/ALTER TABLE. Statistics + for the table will be wiped away on server shutdown and new ones recalculated + after the server is started again. If none of HA_OPTION_STATS_PERSISTENT or + HA_OPTION_NO_STATS_PERSISTENT is set, this means that the setting is not + explicitly set at table level and the corresponding table will use whatever + is the global server default. +*/ +#define HA_OPTION_NO_STATS_PERSISTENT 8192 + +/* .frm has extra create options in linked-list format */ +#define HA_OPTION_TEXT_CREATE_OPTIONS_legacy (1L << 14) /* 5.2 to 5.5, unused since 10.0 */ +#define HA_OPTION_TEMP_COMPRESS_RECORD (1L << 15) /* set by isamchk */ +#define HA_OPTION_READ_ONLY_DATA (1L << 16) /* Set by isamchk */ +#define HA_OPTION_NO_CHECKSUM (1L << 17) +#define HA_OPTION_NO_DELAY_KEY_WRITE (1L << 18) + + /* Bits in flag to create() */ + +#define HA_DONT_TOUCH_DATA 1 /* Don't empty datafile (isamchk) */ +#define HA_PACK_RECORD 2 /* Request packed record format */ +#define HA_CREATE_TMP_TABLE 4 +#define HA_CREATE_CHECKSUM 8 +#define HA_CREATE_KEEP_FILES 16 /* don't overwrite .MYD and MYI */ +#define HA_CREATE_PAGE_CHECKSUM 32 +#define HA_CREATE_DELAY_KEY_WRITE 64 +#define HA_CREATE_RELIES_ON_SQL_LAYER 128 +#define HA_CREATE_INTERNAL_TABLE 256 +#define HA_PRESERVE_INSERT_ORDER 512 + +/* Flags used by start_bulk_insert */ + +#define HA_CREATE_UNIQUE_INDEX_BY_SORT 1 + + +/* + The following flags (OR-ed) are passed to handler::info() method. + The method copies misc handler information out of the storage engine + to data structures accessible from MySQL + + Same flags are also passed down to mi_status, myrg_status, etc. +*/ + +/* this one is not used */ +#define HA_STATUS_POS 1 +/* + assuming the table keeps shared actual copy of the 'info' and + local, possibly outdated copy, the following flag means that + it should not try to get the actual data (locking the shared structure) + slightly outdated version will suffice +*/ +#define HA_STATUS_NO_LOCK 2 +/* update the time of the last modification (in handler::update_time) */ +#define HA_STATUS_TIME 4 +/* + update the 'constant' part of the info: + handler::max_data_file_length, max_index_file_length, create_time + sortkey, ref_length, block_size, data_file_name, index_file_name. + handler::table->s->keys_in_use, keys_for_keyread, rec_per_key +*/ +#define HA_STATUS_CONST 8 +/* + update the 'variable' part of the info: + handler::records, deleted, data_file_length, index_file_length, + check_time, mean_rec_length +*/ +#define HA_STATUS_VARIABLE 16 +/* + get the information about the key that caused last duplicate value error + update handler::errkey and handler::dupp_ref + see handler::get_dup_key() +*/ +#define HA_STATUS_ERRKEY 32 +/* + update handler::auto_increment_value +*/ +#define HA_STATUS_AUTO 64 +/* + Get also delete_length when HA_STATUS_VARIABLE is called. It's ok to set it also + when only HA_STATUS_VARIABLE but it won't be used. +*/ +#define HA_STATUS_VARIABLE_EXTRA 128 + +/* + Errorcodes given by handler functions + + opt_sum_query() assumes these codes are > 1 + Do not add error numbers before HA_ERR_FIRST. + If necessary to add lower numbers, change HA_ERR_FIRST accordingly. +*/ +#define HA_ERR_FIRST 120 /* Copy of first error nr.*/ + +#define HA_ERR_KEY_NOT_FOUND 120 /* Didn't find key on read or update */ +#define HA_ERR_FOUND_DUPP_KEY 121 /* Dupplicate key on write */ +#define HA_ERR_INTERNAL_ERROR 122 /* Internal error */ +#define HA_ERR_RECORD_CHANGED 123 /* Uppdate with is recoverable */ +#define HA_ERR_WRONG_INDEX 124 /* Wrong index given to function */ +#define HA_ERR_CRASHED 126 /* Indexfile is crashed */ +#define HA_ERR_WRONG_IN_RECORD 127 /* Record-file is crashed */ +#define HA_ERR_OUT_OF_MEM 128 /* Out of memory */ +#define HA_ERR_NOT_A_TABLE 130 /* not a MYI file - no signature */ +#define HA_ERR_WRONG_COMMAND 131 /* Command not supported */ +#define HA_ERR_OLD_FILE 132 /* old databasfile */ +#define HA_ERR_NO_ACTIVE_RECORD 133 /* No record read in update() */ +#define HA_ERR_RECORD_DELETED 134 /* A record is not there */ +#define HA_ERR_RECORD_FILE_FULL 135 /* No more room in file */ +#define HA_ERR_INDEX_FILE_FULL 136 /* No more room in file */ +#define HA_ERR_END_OF_FILE 137 /* end in next/prev/first/last */ +#define HA_ERR_UNSUPPORTED 138 /* unsupported extension used */ +#define HA_ERR_TO_BIG_ROW 139 /* Too big row */ +#define HA_WRONG_CREATE_OPTION 140 /* Wrong create option */ +#define HA_ERR_FOUND_DUPP_UNIQUE 141 /* Dupplicate unique on write */ +#define HA_ERR_UNKNOWN_CHARSET 142 /* Can't open charset */ +#define HA_ERR_WRONG_MRG_TABLE_DEF 143 /* conflicting tables in MERGE */ +#define HA_ERR_CRASHED_ON_REPAIR 144 /* Last (automatic?) repair failed */ +#define HA_ERR_CRASHED_ON_USAGE 145 /* Table must be repaired */ +#define HA_ERR_LOCK_WAIT_TIMEOUT 146 +#define HA_ERR_LOCK_TABLE_FULL 147 +#define HA_ERR_READ_ONLY_TRANSACTION 148 /* Updates not allowed */ +#define HA_ERR_LOCK_DEADLOCK 149 +#define HA_ERR_CANNOT_ADD_FOREIGN 150 /* Cannot add a foreign key constr. */ +#define HA_ERR_NO_REFERENCED_ROW 151 /* Cannot add a child row */ +#define HA_ERR_ROW_IS_REFERENCED 152 /* Cannot delete a parent row */ +#define HA_ERR_NO_SAVEPOINT 153 /* No savepoint with that name */ +#define HA_ERR_NON_UNIQUE_BLOCK_SIZE 154 /* Non unique key block size */ +#define HA_ERR_NO_SUCH_TABLE 155 /* The table does not exist in engine */ +#define HA_ERR_TABLE_EXIST 156 /* The table existed in storage engine */ +#define HA_ERR_NO_CONNECTION 157 /* Could not connect to storage engine */ +/* NULLs are not supported in spatial index */ +#define HA_ERR_NULL_IN_SPATIAL 158 +#define HA_ERR_TABLE_DEF_CHANGED 159 /* The table changed in storage engine */ +/* There's no partition in table for given value */ +#define HA_ERR_NO_PARTITION_FOUND 160 +#define HA_ERR_RBR_LOGGING_FAILED 161 /* Row-based binlogging of row failed */ +#define HA_ERR_DROP_INDEX_FK 162 /* Index needed in foreign key constr */ +/* + Upholding foreign key constraints would lead to a duplicate key error + in some other table. +*/ +#define HA_ERR_FOREIGN_DUPLICATE_KEY 163 +/* The table changed in storage engine */ +#define HA_ERR_TABLE_NEEDS_UPGRADE 164 +#define HA_ERR_TABLE_READONLY 165 /* The table is not writable */ + +#define HA_ERR_AUTOINC_READ_FAILED 166 /* Failed to get next autoinc value */ +#define HA_ERR_AUTOINC_ERANGE 167 /* Failed to set row autoinc value */ +#define HA_ERR_GENERIC 168 /* Generic error */ +/* row not actually updated: new values same as the old values */ +#define HA_ERR_RECORD_IS_THE_SAME 169 +#define HA_ERR_LOGGING_IMPOSSIBLE 170 /* It is not possible to log this + statement */ +#define HA_ERR_CORRUPT_EVENT 171 /* The event was corrupt, leading to + illegal data being read */ +#define HA_ERR_NEW_FILE 172 /* New file format */ +#define HA_ERR_ROWS_EVENT_APPLY 173 /* The event could not be processed + no other hanlder error happened */ +#define HA_ERR_INITIALIZATION 174 /* Error during initialization */ +#define HA_ERR_FILE_TOO_SHORT 175 /* File too short */ +#define HA_ERR_WRONG_CRC 176 /* Wrong CRC on page */ +#define HA_ERR_TOO_MANY_CONCURRENT_TRXS 177 /*Too many active concurrent transactions */ +/* There's no explicitly listed partition in table for the given value */ +#define HA_ERR_NOT_IN_LOCK_PARTITIONS 178 +#define HA_ERR_INDEX_COL_TOO_LONG 179 /* Index column length exceeds limit */ +#define HA_ERR_INDEX_CORRUPT 180 /* Index corrupted */ +#define HA_ERR_UNDO_REC_TOO_BIG 181 /* Undo log record too big */ +#define HA_FTS_INVALID_DOCID 182 /* Invalid InnoDB Doc ID */ +#define HA_ERR_TABLE_IN_FK_CHECK 183 /* Table being used in foreign key check */ +#define HA_ERR_TABLESPACE_EXISTS 184 /* The tablespace existed in storage engine */ +#define HA_ERR_TOO_MANY_FIELDS 185 /* Table has too many columns */ +#define HA_ERR_ROW_IN_WRONG_PARTITION 186 /* Row in wrong partition */ +#define HA_ERR_ROW_NOT_VISIBLE 187 +#define HA_ERR_ABORTED_BY_USER 188 +#define HA_ERR_DISK_FULL 189 +#define HA_ERR_INCOMPATIBLE_DEFINITION 190 +#define HA_ERR_FTS_TOO_MANY_WORDS_IN_PHRASE 191 /* Too many words in a phrase */ +#define HA_ERR_DECRYPTION_FAILED 192 /* Table encrypted but + decypt failed */ +#define HA_ERR_LAST 192 /* Copy of last error nr */ + +/* Number of different errors */ +#define HA_ERR_ERRORS (HA_ERR_LAST - HA_ERR_FIRST + 1) + + /* Other constants */ + +#define HA_NAMELEN 64 /* Max length of saved filename */ +#define NO_SUCH_KEY (~(uint)0) /* used as a key no. */ + +typedef ulong key_part_map; +#define HA_WHOLE_KEY (~(key_part_map)0) + + /* Intern constants in databases */ + + /* bits in _search */ +#define SEARCH_FIND 1 +#define SEARCH_NO_FIND 2 +#define SEARCH_SAME 4 +#define SEARCH_BIGGER 8 +#define SEARCH_SMALLER 16 +#define SEARCH_SAVE_BUFF 32 +#define SEARCH_UPDATE 64 +#define SEARCH_PREFIX 128 +#define SEARCH_LAST 256 +#define MBR_CONTAIN 512 +#define MBR_INTERSECT 1024 +#define MBR_WITHIN 2048 +#define MBR_DISJOINT 4096 +#define MBR_EQUAL 8192 +#define MBR_DATA 16384 +#define SEARCH_NULL_ARE_EQUAL 32768 /* NULL in keys are equal */ +#define SEARCH_NULL_ARE_NOT_EQUAL 65536 /* NULL in keys are not equal */ +/* Use this when inserting a key in position order */ +#define SEARCH_INSERT (SEARCH_NULL_ARE_NOT_EQUAL*2) +/* Only part of the key is specified while reading */ +#define SEARCH_PART_KEY (SEARCH_INSERT*2) +/* Used when user key (key 2) contains transaction id's */ +#define SEARCH_USER_KEY_HAS_TRANSID (SEARCH_PART_KEY*2) +/* Used when page key (key 1) contains transaction id's */ +#define SEARCH_PAGE_KEY_HAS_TRANSID (SEARCH_USER_KEY_HAS_TRANSID*2) + + /* bits in opt_flag */ +#define QUICK_USED 1 +#define READ_CACHE_USED 2 +#define READ_CHECK_USED 4 +#define KEY_READ_USED 8 +#define WRITE_CACHE_USED 16 +#define OPT_NO_ROWS 32 + + /* bits in update */ +#define HA_STATE_CHANGED 1 /* Database has changed */ +#define HA_STATE_AKTIV 2 /* Has a current record */ +#define HA_STATE_WRITTEN 4 /* Record is written */ +#define HA_STATE_DELETED 8 +#define HA_STATE_NEXT_FOUND 16 /* Next found record (record before) */ +#define HA_STATE_PREV_FOUND 32 /* Prev found record (record after) */ +#define HA_STATE_NO_KEY 64 /* Last read didn't find record */ +#define HA_STATE_KEY_CHANGED 128 +#define HA_STATE_WRITE_AT_END 256 /* set in _ps_find_writepos */ +#define HA_STATE_BUFF_SAVED 512 /* If current keybuff is info->buff */ +#define HA_STATE_ROW_CHANGED 1024 /* To invalide ROW cache */ +#define HA_STATE_EXTEND_BLOCK 2048 +#define HA_STATE_RNEXT_SAME 4096 /* rnext_same occupied lastkey2 */ + +/* myisampack expects no more than 32 field types. */ +enum en_fieldtype { + FIELD_LAST=-1,FIELD_NORMAL,FIELD_SKIP_ENDSPACE,FIELD_SKIP_PRESPACE, + FIELD_SKIP_ZERO,FIELD_BLOB,FIELD_CONSTANT,FIELD_INTERVALL,FIELD_ZERO, + FIELD_VARCHAR,FIELD_CHECK, + FIELD_enum_val_count +}; + +enum data_file_type { + STATIC_RECORD, DYNAMIC_RECORD, COMPRESSED_RECORD, BLOCK_RECORD, NO_RECORD +}; + +/* For key ranges */ + +#define NO_MIN_RANGE 1 +#define NO_MAX_RANGE 2 +#define NEAR_MIN 4 +#define NEAR_MAX 8 +#define UNIQUE_RANGE 16 +#define EQ_RANGE 32 +#define NULL_RANGE 64 +#define GEOM_FLAG 128 +#define SKIP_RANGE 256 + +typedef struct st_key_range +{ + const uchar *key; + uint length; + key_part_map keypart_map; + enum ha_rkey_function flag; +} key_range; + +typedef void *range_id_t; + +typedef struct st_key_multi_range +{ + key_range start_key; + key_range end_key; + range_id_t ptr; /* Free to use by caller (ptr to row etc) */ + uint range_flag; /* key range flags see above */ +} KEY_MULTI_RANGE; + + +/* For number of records */ +#ifdef BIG_TABLES +#define rows2double(A) ulonglong2double(A) +typedef my_off_t ha_rows; +#else +#define rows2double(A) (double) (A) +typedef ulong ha_rows; +#endif + +#define HA_POS_ERROR (~ (ha_rows) 0) +#define HA_OFFSET_ERROR (~ (my_off_t) 0) + +#if SYSTEM_SIZEOF_OFF_T == 4 +#define MAX_FILE_SIZE INT_MAX32 +#else +#define MAX_FILE_SIZE LONGLONG_MAX +#endif + +#define HA_VARCHAR_PACKLENGTH(field_length) ((field_length) < 256 ? 1 :2) + +/* invalidator function reference for Query Cache */ +C_MODE_START +typedef void (* invalidator_by_filename)(const char * filename); +C_MODE_END + + +enum durability_properties +{ + /* + Preserves the durability properties defined by the engine */ + HA_REGULAR_DURABILITY= 0, + /* + Ignore the durability properties defined by the engine and + write only in-memory entries. + */ + HA_IGNORE_DURABILITY= 1 +}; + +#endif /* _my_base_h */ diff --git a/EQ2/source/depends/mariadb-10.1.19/include/my_bit.h b/EQ2/source/depends/mariadb-10.1.19/include/my_bit.h new file mode 100644 index 000000000..a50403c31 --- /dev/null +++ b/EQ2/source/depends/mariadb-10.1.19/include/my_bit.h @@ -0,0 +1,135 @@ +/* Copyright (c) 2007, 2011, Oracle and/or its affiliates. + Copyright (c) 2009-2011, Monty Program Ab + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; version 2 of the License. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ + +#ifndef MY_BIT_INCLUDED +#define MY_BIT_INCLUDED + +#include + +/* + Some useful bit functions +*/ + +C_MODE_START + +extern const char _my_bits_nbits[256]; +extern const uchar _my_bits_reverse_table[256]; + +/* + Find smallest X in 2^X >= value + This can be used to divide a number with value by doing a shift instead +*/ + +static inline uint my_bit_log2(ulong value) +{ + uint bit; + for (bit=0 ; value > 1 ; value>>=1, bit++) ; + return bit; +} + +static inline uint my_count_bits(ulonglong v) +{ +#if SIZEOF_LONG_LONG > 4 + /* The following code is a bit faster on 16 bit machines than if we would + only shift v */ + ulong v2=(ulong) (v >> 32); + return (uint) (uchar) (_my_bits_nbits[(uchar) v] + + _my_bits_nbits[(uchar) (v >> 8)] + + _my_bits_nbits[(uchar) (v >> 16)] + + _my_bits_nbits[(uchar) (v >> 24)] + + _my_bits_nbits[(uchar) (v2)] + + _my_bits_nbits[(uchar) (v2 >> 8)] + + _my_bits_nbits[(uchar) (v2 >> 16)] + + _my_bits_nbits[(uchar) (v2 >> 24)]); +#else + return (uint) (uchar) (_my_bits_nbits[(uchar) v] + + _my_bits_nbits[(uchar) (v >> 8)] + + _my_bits_nbits[(uchar) (v >> 16)] + + _my_bits_nbits[(uchar) (v >> 24)]); +#endif +} + +static inline uint my_count_bits_uint32(uint32 v) +{ + return (uint) (uchar) (_my_bits_nbits[(uchar) v] + + _my_bits_nbits[(uchar) (v >> 8)] + + _my_bits_nbits[(uchar) (v >> 16)] + + _my_bits_nbits[(uchar) (v >> 24)]); +} + + +/* + Next highest power of two + + SYNOPSIS + my_round_up_to_next_power() + v Value to check + + RETURN + Next or equal power of 2 + Note: 0 will return 0 + + NOTES + Algorithm by Sean Anderson, according to: + http://graphics.stanford.edu/~seander/bithacks.html + (Orignal code public domain) + + Comments shows how this works with 01100000000000000000000000001011 +*/ + +static inline uint32 my_round_up_to_next_power(uint32 v) +{ + v--; /* 01100000000000000000000000001010 */ + v|= v >> 1; /* 01110000000000000000000000001111 */ + v|= v >> 2; /* 01111100000000000000000000001111 */ + v|= v >> 4; /* 01111111110000000000000000001111 */ + v|= v >> 8; /* 01111111111111111100000000001111 */ + v|= v >> 16; /* 01111111111111111111111111111111 */ + return v+1; /* 10000000000000000000000000000000 */ +} + +static inline uint32 my_clear_highest_bit(uint32 v) +{ + uint32 w=v >> 1; + w|= w >> 1; + w|= w >> 2; + w|= w >> 4; + w|= w >> 8; + w|= w >> 16; + return v & w; +} + +static inline uint32 my_reverse_bits(uint32 key) +{ + return + (_my_bits_reverse_table[ key & 255] << 24) | + (_my_bits_reverse_table[(key>> 8) & 255] << 16) | + (_my_bits_reverse_table[(key>>16) & 255] << 8) | + _my_bits_reverse_table[(key>>24) ]; +} + +/* + a number with the n lowest bits set + an overflow-safe version of (1 << n) - 1 +*/ +static inline uint32 my_set_bits(int n) +{ + return (((1UL << (n - 1)) - 1) << 1) | 1; +} + +C_MODE_END + +#endif /* MY_BIT_INCLUDED */ diff --git a/EQ2/source/depends/mariadb-10.1.19/include/my_bitmap.h b/EQ2/source/depends/mariadb-10.1.19/include/my_bitmap.h new file mode 100644 index 000000000..9c9550e31 --- /dev/null +++ b/EQ2/source/depends/mariadb-10.1.19/include/my_bitmap.h @@ -0,0 +1,157 @@ +/* Copyright (c) 2001, 2011, Oracle and/or its affiliates. + Copyright (c) 2009-2011, Monty Program Ab + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; version 2 of the License. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA */ + +#ifndef _my_bitmap_h_ +#define _my_bitmap_h_ + +#define MY_BIT_NONE (~(uint) 0) + +#include +#include + +typedef uint32 my_bitmap_map; + +typedef struct st_bitmap +{ + my_bitmap_map *bitmap; + my_bitmap_map *last_word_ptr; + /* + mutex will be acquired for the duration of each bitmap operation if + thread_safe flag in bitmap_init was set. Otherwise, we optimize by not + acquiring the mutex + */ + mysql_mutex_t *mutex; + my_bitmap_map last_word_mask; + uint32 n_bits; /* number of bits occupied by the above */ +} MY_BITMAP; + +#ifdef __cplusplus +extern "C" { +#endif + +/* compatibility functions */ +#define bitmap_init(A,B,C,D) my_bitmap_init(A,B,C,D) +#define bitmap_free(A) my_bitmap_free(A) + +extern void create_last_word_mask(MY_BITMAP *map); +extern my_bool my_bitmap_init(MY_BITMAP *map, my_bitmap_map *buf, uint n_bits, + my_bool thread_safe); +extern my_bool bitmap_is_clear_all(const MY_BITMAP *map); +extern my_bool bitmap_is_prefix(const MY_BITMAP *map, uint prefix_size); +extern my_bool bitmap_is_set_all(const MY_BITMAP *map); +extern my_bool bitmap_is_subset(const MY_BITMAP *map1, const MY_BITMAP *map2); +extern my_bool bitmap_is_overlapping(const MY_BITMAP *map1, + const MY_BITMAP *map2); +extern my_bool bitmap_test_and_set(MY_BITMAP *map, uint bitmap_bit); +extern my_bool bitmap_test_and_clear(MY_BITMAP *map, uint bitmap_bit); +extern my_bool bitmap_fast_test_and_set(MY_BITMAP *map, uint bitmap_bit); +extern my_bool bitmap_union_is_set_all(const MY_BITMAP *map1, + const MY_BITMAP *map2); +extern my_bool bitmap_exists_intersection(const MY_BITMAP **bitmap_array, + uint bitmap_count, + uint start_bit, uint end_bit); + +extern uint bitmap_set_next(MY_BITMAP *map); +extern uint bitmap_get_first(const MY_BITMAP *map); +extern uint bitmap_get_first_set(const MY_BITMAP *map); +extern uint bitmap_bits_set(const MY_BITMAP *map); +extern uint bitmap_get_next_set(const MY_BITMAP *map, uint bitmap_bit); +extern void my_bitmap_free(MY_BITMAP *map); +extern void bitmap_set_above(MY_BITMAP *map, uint from_byte, uint use_bit); +extern void bitmap_set_prefix(MY_BITMAP *map, uint prefix_size); +extern void bitmap_intersect(MY_BITMAP *map, const MY_BITMAP *map2); +extern void bitmap_subtract(MY_BITMAP *map, const MY_BITMAP *map2); +extern void bitmap_union(MY_BITMAP *map, const MY_BITMAP *map2); +extern void bitmap_xor(MY_BITMAP *map, const MY_BITMAP *map2); +extern void bitmap_invert(MY_BITMAP *map); +extern void bitmap_copy(MY_BITMAP *map, const MY_BITMAP *map2); + +extern uint bitmap_lock_set_next(MY_BITMAP *map); +extern void bitmap_lock_clear_bit(MY_BITMAP *map, uint bitmap_bit); +/* Fast, not thread safe, bitmap functions */ +#define bitmap_buffer_size(bits) (((bits)+31)/32)*4 +#define no_bytes_in_map(map) (((map)->n_bits + 7)/8) +#define no_words_in_map(map) (((map)->n_bits + 31)/32) +#define bytes_word_aligned(bytes) (4*((bytes + 3)/4)) +#define _bitmap_set_bit(MAP, BIT) (((uchar*)(MAP)->bitmap)[(BIT) / 8] \ + |= (1 << ((BIT) & 7))) +#define _bitmap_flip_bit(MAP, BIT) (((uchar*)(MAP)->bitmap)[(BIT) / 8] \ + ^= (1 << ((BIT) & 7))) +#define _bitmap_clear_bit(MAP, BIT) (((uchar*)(MAP)->bitmap)[(BIT) / 8] \ + &= ~ (1 << ((BIT) & 7))) +#define _bitmap_is_set(MAP, BIT) (uint) (((uchar*)(MAP)->bitmap)[(BIT) / 8] \ + & (1 << ((BIT) & 7))) +/* + WARNING! + + The below symbols are inline functions in DEBUG builds and macros in + non-DEBUG builds. The latter evaluate their 'bit' argument twice. + + NEVER use an increment/decrement operator with the 'bit' argument. + It would work with DEBUG builds, but fails later in production builds! + + FORBIDDEN: bitmap_set_bit($my_bitmap, (field++)->field_index); +*/ +#ifndef DBUG_OFF +static inline void +bitmap_set_bit(MY_BITMAP *map,uint bit) +{ + DBUG_ASSERT(bit < (map)->n_bits); + _bitmap_set_bit(map,bit); +} +static inline void +bitmap_flip_bit(MY_BITMAP *map,uint bit) +{ + DBUG_ASSERT(bit < (map)->n_bits); + _bitmap_flip_bit(map,bit); +} +static inline void +bitmap_clear_bit(MY_BITMAP *map,uint bit) +{ + DBUG_ASSERT(bit < (map)->n_bits); + _bitmap_clear_bit(map,bit); +} +static inline uint +bitmap_is_set(const MY_BITMAP *map,uint bit) +{ + DBUG_ASSERT(bit < (map)->n_bits); + return _bitmap_is_set(map,bit); +} +#else +#define bitmap_set_bit(MAP, BIT) _bitmap_set_bit(MAP, BIT) +#define bitmap_flip_bit(MAP, BIT) _bitmap_flip_bit(MAP, BIT) +#define bitmap_clear_bit(MAP, BIT) _bitmap_clear_bit(MAP, BIT) +#define bitmap_is_set(MAP, BIT) _bitmap_is_set(MAP, BIT) +#endif + +static inline my_bool bitmap_cmp(const MY_BITMAP *map1, const MY_BITMAP *map2) +{ + if (memcmp(map1->bitmap, map2->bitmap, 4*(no_words_in_map(map1)-1)) != 0) + return FALSE; + return ((*map1->last_word_ptr | map1->last_word_mask) == + (*map2->last_word_ptr | map2->last_word_mask)); +} + +#define bitmap_clear_all(MAP) \ + { memset((MAP)->bitmap, 0, 4*no_words_in_map((MAP))); } +#define bitmap_set_all(MAP) \ + (memset((MAP)->bitmap, 0xFF, 4*no_words_in_map((MAP)))) + +#ifdef __cplusplus +} +#endif + +#endif /* _my_bitmap_h_ */ diff --git a/EQ2/source/depends/mariadb-10.1.19/include/my_byteorder.h b/EQ2/source/depends/mariadb-10.1.19/include/my_byteorder.h new file mode 100644 index 000000000..1f29248bf --- /dev/null +++ b/EQ2/source/depends/mariadb-10.1.19/include/my_byteorder.h @@ -0,0 +1,54 @@ +#ifndef MY_BYTEORDER_INCLUDED +#define MY_BYTEORDER_INCLUDED + +/* Copyright (c) 2001, 2012, Oracle and/or its affiliates. All rights reserved. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; version 2 of the License. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ + + +/* + Macro for reading 32-bit integer from network byte order (big-endian) + from an unaligned memory location. +*/ +#define int4net(A) (int32) (((uint32) ((uchar) (A)[3])) | \ + (((uint32) ((uchar) (A)[2])) << 8) | \ + (((uint32) ((uchar) (A)[1])) << 16) | \ + (((uint32) ((uchar) (A)[0])) << 24)) + +/* + Function-like macros for reading and storing in machine independent + format (low byte first). There are 'korr' (assume 'corrector') variants + for integer types, but 'get' (assume 'getter') for floating point types. +*/ +#if defined(__i386__) || defined(_WIN32) +#define MY_BYTE_ORDER_ARCH_OPTIMIZED +#include "byte_order_generic_x86.h" +#elif defined(__x86_64__) +#include "byte_order_generic_x86_64.h" +#else +#include "byte_order_generic.h" +#endif + +/* + Function-like macros for reading and storing in machine format from/to + short/long to/from some place in memory V should be a variable (not on + a register) and M a pointer to byte. +*/ +#ifdef WORDS_BIGENDIAN +#include "big_endian.h" +#else +#include "little_endian.h" +#endif + +#endif /* MY_BYTEORDER_INCLUDED */ diff --git a/EQ2/source/depends/mariadb-10.1.19/include/my_check_opt.h b/EQ2/source/depends/mariadb-10.1.19/include/my_check_opt.h new file mode 100644 index 000000000..ccf003dec --- /dev/null +++ b/EQ2/source/depends/mariadb-10.1.19/include/my_check_opt.h @@ -0,0 +1,78 @@ +/* Copyright (c) 2000, 2013, Oracle and/or its affiliates. All rights reserved. + +This program is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; version 2 of the License. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program; if not, write to the Free Software +Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA */ + +#ifndef _my_check_opt_h +#define _my_check_opt_h + +#ifdef __cplusplus +extern "C" { +#endif + +/* + All given definitions needed for MyISAM storage engine: + myisamchk.c or/and ha_myisam.cc or/and micheck.c + Some definitions are needed by the MySQL parser. +*/ + +#define T_AUTO_INC (1UL << 0) +#define T_AUTO_REPAIR (1UL << 1) +#define T_BACKUP_DATA (1UL << 2) +#define T_CALC_CHECKSUM (1UL << 3) +#define T_CHECK (1UL << 4) +#define T_CHECK_ONLY_CHANGED (1UL << 5) +#define T_CREATE_MISSING_KEYS (1UL << 6) +#define T_DESCRIPT (1UL << 7) +#define T_DONT_CHECK_CHECKSUM (1UL << 8) +#define T_EXTEND (1UL << 9) +#define T_FAST (1UL << 10) +#define T_FORCE_CREATE (1UL << 11) +#define T_FORCE_UNIQUENESS (1UL << 12) +#define T_INFO (1UL << 13) +/** CHECK TABLE...MEDIUM (the default) */ +#define T_MEDIUM (1UL << 14) +/** CHECK TABLE...QUICK */ +#define T_QUICK (1UL << 15) +#define T_READONLY (1UL << 16) +#define T_REP (1UL << 17) +#define T_REP_BY_SORT (1UL << 18) +#define T_REP_PARALLEL (1UL << 19) +#define T_RETRY_WITHOUT_QUICK (1UL << 20) +#define T_SAFE_REPAIR (1UL << 21) +#define T_SILENT (1UL << 22) +#define T_SORT_INDEX (1UL << 23) +#define T_SORT_RECORDS (1UL << 24) +#define T_STATISTICS (1UL << 25) +#define T_UNPACK (1UL << 26) +#define T_UPDATE_STATE (1UL << 27) +#define T_VERBOSE (1UL << 28) +#define T_VERY_SILENT (1UL << 29) +#define T_WAIT_FOREVER (1UL << 30) +#define T_WRITE_LOOP (1UL << 31) +#define T_ZEROFILL (1ULL << 32) +#define T_ZEROFILL_KEEP_LSN (1ULL << 33) +/** If repair should not bump create_rename_lsn */ +#define T_NO_CREATE_RENAME_LSN (1ULL << 34) +/** If repair shouldn't do any locks */ +#define T_NO_LOCKS (1ULL << 35) +#define T_CREATE_UNIQUE_BY_SORT (1ULL << 36) +#define T_SUPPRESS_ERR_HANDLING (1ULL << 37) +#define T_FORCE_SORT_MEMORY (1ULL << 38) + +#define T_REP_ANY (T_REP | T_REP_BY_SORT | T_REP_PARALLEL) + +#ifdef __cplusplus +} +#endif +#endif diff --git a/EQ2/source/depends/mariadb-10.1.19/include/my_compare.h b/EQ2/source/depends/mariadb-10.1.19/include/my_compare.h new file mode 100644 index 000000000..0db22b593 --- /dev/null +++ b/EQ2/source/depends/mariadb-10.1.19/include/my_compare.h @@ -0,0 +1,154 @@ +/* Copyright (c) 2011, Oracle and/or its affiliates. + Copyright (c) Monty Program Ab; 1991-2011 + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; version 2 of the License. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA */ + +#ifndef _my_compare_h +#define _my_compare_h + +#include "myisampack.h" +#ifdef __cplusplus +extern "C" { +#endif + +#include "m_ctype.h" /* CHARSET_INFO */ + +/* + There is a hard limit for the maximum number of keys as there are only + 8 bits in the index file header for the number of keys in a table. + This means that 0..255 keys can exist for a table. The idea of + HA_MAX_POSSIBLE_KEY is to ensure that one can use myisamchk & tools on + a MyISAM table for which one has more keys than MyISAM is normally + compiled for. If you don't have this, you will get a core dump when + running myisamchk compiled for 128 keys on a table with 255 keys. +*/ + +#define HA_MAX_POSSIBLE_KEY 255 /* For myisamchk */ +/* + The following defines can be increased if necessary. + But beware the dependency of MI_MAX_POSSIBLE_KEY_BUFF and HA_MAX_KEY_LENGTH. +*/ + +#define HA_MAX_KEY_LENGTH 1000 /* Max length in bytes */ +#define HA_MAX_KEY_SEG 32 /* Max segments for key */ + +#define HA_MAX_POSSIBLE_KEY_BUFF (HA_MAX_KEY_LENGTH + 24+ 6+6) +#define HA_MAX_KEY_BUFF (HA_MAX_KEY_LENGTH+HA_MAX_KEY_SEG*6+8+8) + +typedef struct st_HA_KEYSEG /* Key-portion */ +{ + CHARSET_INFO *charset; + uint32 start; /* Start of key in record */ + uint32 null_pos; /* position to NULL indicator */ + uint16 bit_pos; /* Position to bit part */ + uint16 flag; + uint16 length; /* Keylength */ + uint16 language; + uint8 type; /* Type of key (for sort) */ + uint8 null_bit; /* bitmask to test for NULL */ + uint8 bit_start,bit_end; /* if bit field */ + uint8 bit_length; /* Length of bit part */ +} HA_KEYSEG; + +#define get_key_length(length,key) \ +{ if (*(const uchar*) (key) != 255) \ + length= (uint) *(const uchar*) ((key)++); \ + else \ + { length= mi_uint2korr((key)+1); (key)+=3; } \ +} + +#define get_key_length_rdonly(length,key) \ +{ if (*(const uchar*) (key) != 255) \ + length= ((uint) *(const uchar*) ((key))); \ + else \ + { length= mi_uint2korr((key)+1); } \ +} + +#define get_key_pack_length(length,length_pack,key) \ +{ if (*(const uchar*) (key) != 255) \ + { length= (uint) *(const uchar*) ((key)++); length_pack= 1; }\ + else \ + { length=mi_uint2korr((key)+1); (key)+= 3; length_pack= 3; } \ +} + +#define store_key_length_inc(key,length) \ +{ if ((length) < 255) \ + { *(key)++= (length); } \ + else \ + { *(key)=255; mi_int2store((key)+1,(length)); (key)+=3; } \ +} + +#define size_to_store_key_length(length) ((length) < 255 ? 1 : 3) + +#define get_rec_bits(bit_ptr, bit_ofs, bit_len) \ + (((((uint16) (bit_ptr)[1] << 8) | (uint16) (bit_ptr)[0]) >> (bit_ofs)) & \ + ((1 << (bit_len)) - 1)) + +#define set_rec_bits(bits, bit_ptr, bit_ofs, bit_len) \ +{ \ + (bit_ptr)[0]= ((bit_ptr)[0] & ~(((1 << (bit_len)) - 1) << (bit_ofs))) | \ + ((bits) << (bit_ofs)); \ + if ((bit_ofs) + (bit_len) > 8) \ + (bit_ptr)[1]= ((bit_ptr)[1] & ~((1 << ((bit_len) - 8 + (bit_ofs))) - 1)) | \ + ((bits) >> (8 - (bit_ofs))); \ +} + +#define clr_rec_bits(bit_ptr, bit_ofs, bit_len) \ + set_rec_bits(0, bit_ptr, bit_ofs, bit_len) + +extern int ha_compare_text(CHARSET_INFO *, const uchar *, uint, + const uchar *, uint , my_bool, my_bool); +extern int ha_key_cmp(HA_KEYSEG *keyseg, const uchar *a, + const uchar *b, uint key_length, uint nextflag, + uint *diff_pos); +extern HA_KEYSEG *ha_find_null(HA_KEYSEG *keyseg, const uchar *a); + +/* + Inside an in-memory data record, memory pointers to pieces of the + record (like BLOBs) are stored in their native byte order and in + this amount of bytes. +*/ +#define portable_sizeof_char_ptr 8 +#ifdef __cplusplus +} +#endif + +/** + Return values of index_cond_func_xxx functions. + + 0=ICP_NO_MATCH - index tuple doesn't satisfy the pushed index condition (the + engine should discard the tuple and go to the next one) + 1=ICP_MATCH - index tuple satisfies the pushed index condition (the + engine should fetch and return the record) + 2=ICP_OUT_OF_RANGE - index tuple is out range that we're scanning, e.g. this + if we're scanning "t.key BETWEEN 10 AND 20" and got a + "t.key=21" tuple (the engine should stop scanning and + return HA_ERR_END_OF_FILE right away). + 3=ICP_ABORTED_BY_USER - engine must stop scanning and should return + HA_ERR_ABORTED_BY_USER right away + -1= ICP_ERROR - Reserved for internal errors in engines. Should not be + returned by index_cond_func_xxx +*/ + +typedef enum icp_result { + ICP_ERROR=-1, + ICP_NO_MATCH=0, + ICP_MATCH=1, + ICP_OUT_OF_RANGE=2, + ICP_ABORTED_BY_USER=3 +} ICP_RESULT; + +typedef ICP_RESULT (*index_cond_func_t)(void *param); + +#endif /* _my_compare_h */ diff --git a/EQ2/source/depends/mariadb-10.1.19/include/my_compiler.h b/EQ2/source/depends/mariadb-10.1.19/include/my_compiler.h new file mode 100644 index 000000000..000d4e428 --- /dev/null +++ b/EQ2/source/depends/mariadb-10.1.19/include/my_compiler.h @@ -0,0 +1,153 @@ +#ifndef MY_COMPILER_INCLUDED +#define MY_COMPILER_INCLUDED + +/* Copyright (c) 2010, 2011, Oracle and/or its affiliates. All rights reserved. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; version 2 of the License. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ + +/** + Header for compiler-dependent features. + + Intended to contain a set of reusable wrappers for preprocessor + macros, attributes, pragmas, and any other features that are + specific to a target compiler. +*/ + +#include /* stddef.h offsetof */ + +/** + Compiler-dependent internal convenience macros. +*/ + +/* GNU C/C++ */ +#if defined __GNUC__ +/* Convenience macro to test the minimum required GCC version. */ +# define MY_GNUC_PREREQ(maj, min) \ + ((__GNUC__ << 16) + __GNUC_MINOR__ >= ((maj) << 16) + (min)) +/* Any after 2.95... */ +# define MY_ALIGN_EXT +/* Comunicate to the compiler the unreachability of the code. */ +# if MY_GNUC_PREREQ(4,5) +# define MY_ASSERT_UNREACHABLE() __builtin_unreachable() +# endif + +/* Microsoft Visual C++ */ +#elif defined _MSC_VER +# define MY_ALIGNOF(type) __alignof(type) +# define MY_ALIGNED(n) __declspec(align(n)) + +/* Oracle Solaris Studio */ +#elif defined(__SUNPRO_C) || defined(__SUNPRO_CC) +# if __SUNPRO_C >= 0x590 +# define MY_ALIGN_EXT +# endif + +/* IBM XL C/C++ */ +#elif defined __xlC__ +# if __xlC__ >= 0x0600 +# define MY_ALIGN_EXT +# endif + +/* HP aCC */ +#elif defined(__HP_aCC) || defined(__HP_cc) +# if (__HP_aCC >= 60000) || (__HP_cc >= 60000) +# define MY_ALIGN_EXT +# endif +#endif + +#ifdef MY_ALIGN_EXT +/** Specifies the minimum alignment of a type. */ +# define MY_ALIGNOF(type) __alignof__(type) +/** Determine the alignment requirement of a type. */ +# define MY_ALIGNED(n) __attribute__((__aligned__((n)))) +#endif + +/** + Generic (compiler-independent) features. +*/ + +#ifndef MY_GNUC_PREREQ +# define MY_GNUC_PREREQ(maj, min) (0) +#endif + +#ifndef MY_ALIGNOF +# ifdef __cplusplus + template struct my_alignof_helper { char m1; type m2; }; + /* Invalid for non-POD types, but most compilers give the right answer. */ +# define MY_ALIGNOF(type) offsetof(my_alignof_helper, m2) +# else +# define MY_ALIGNOF(type) offsetof(struct { char m1; type m2; }, m2) +# endif +#endif + +#ifndef MY_ASSERT_UNREACHABLE +# define MY_ASSERT_UNREACHABLE() do { assert(0); } while (0) +#endif + +/** + C++ Type Traits +*/ + +#ifdef __cplusplus + +/** + Opaque storage with a particular alignment. +*/ +# if defined(MY_ALIGNED) +/* Partial specialization used due to MSVC++. */ +template struct my_alignment_imp; +template<> struct MY_ALIGNED(1) my_alignment_imp<1> {}; +template<> struct MY_ALIGNED(2) my_alignment_imp<2> {}; +template<> struct MY_ALIGNED(4) my_alignment_imp<4> {}; +template<> struct MY_ALIGNED(8) my_alignment_imp<8> {}; +template<> struct MY_ALIGNED(16) my_alignment_imp<16> {}; +/* ... expand as necessary. */ +# else +template +struct my_alignment_imp { double m1; }; +# endif + +/** + A POD type with a given size and alignment. + + @remark If the compiler does not support a alignment attribute + (MY_ALIGN macro), the default alignment of a double is + used instead. + + @tparam size The minimum size. + @tparam alignment The desired alignment: 1, 2, 4, 8 or 16. +*/ +template +struct my_aligned_storage +{ + union + { + char data[size]; + my_alignment_imp align; + }; +}; + +#endif /* __cplusplus */ + +# ifndef MY_ALIGNED +/* + Make sure MY_ALIGNED can be used also on platforms where we don't + have a way of aligning data structures. +*/ +#define MY_ALIGNED(size) +#endif + +#include + +#endif /* MY_COMPILER_INCLUDED */ diff --git a/EQ2/source/depends/mariadb-10.1.19/include/my_context.h b/EQ2/source/depends/mariadb-10.1.19/include/my_context.h new file mode 100644 index 000000000..c59d6ce35 --- /dev/null +++ b/EQ2/source/depends/mariadb-10.1.19/include/my_context.h @@ -0,0 +1,232 @@ +/* + Copyright 2011 Kristian Nielsen and Monty Program Ab + + This file is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this. If not, see . +*/ + +/* + Simple API for spawning a co-routine, to be used for async libmysqlclient. + + Idea is that by implementing this interface using whatever facilities are + available for given platform, we can use the same code for the generic + libmysqlclient-async code. + + (This particular implementation uses Posix ucontext swapcontext().) +*/ + +#ifdef __WIN__ +#define MY_CONTEXT_USE_WIN32_FIBERS 1 +#elif defined(__GNUC__) && __GNUC__ >= 3 && defined(__x86_64__) && !defined(__ILP32__) +#define MY_CONTEXT_USE_X86_64_GCC_ASM +#elif defined(__GNUC__) && __GNUC__ >= 3 && defined(__i386__) +#define MY_CONTEXT_USE_I386_GCC_ASM +#elif defined(HAVE_UCONTEXT_H) +#define MY_CONTEXT_USE_UCONTEXT +#else +#define MY_CONTEXT_DISABLE +#endif + +#ifdef MY_CONTEXT_USE_WIN32_FIBERS +struct my_context { + void (*user_func)(void *); + void *user_arg; + void *app_fiber; + void *lib_fiber; + int return_value; +#ifndef DBUG_OFF + void *dbug_state; +#endif +}; +#endif + + +#ifdef MY_CONTEXT_USE_UCONTEXT +#include + +struct my_context { + void (*user_func)(void *); + void *user_data; + void *stack; + size_t stack_size; + ucontext_t base_context; + ucontext_t spawned_context; + int active; +#ifdef HAVE_VALGRIND + unsigned int valgrind_stack_id; +#endif +#ifndef DBUG_OFF + void *dbug_state; +#endif +}; +#endif + + +#ifdef MY_CONTEXT_USE_X86_64_GCC_ASM +#include + +struct my_context { + uint64_t save[9]; + void *stack_top; + void *stack_bot; +#ifdef HAVE_VALGRIND + unsigned int valgrind_stack_id; +#endif +#ifndef DBUG_OFF + void *dbug_state; +#endif +}; +#endif + + +#ifdef MY_CONTEXT_USE_I386_GCC_ASM +#include + +struct my_context { + uint64_t save[7]; + void *stack_top; + void *stack_bot; +#ifdef HAVE_VALGRIND + unsigned int valgrind_stack_id; +#endif +#ifndef DBUG_OFF + void *dbug_state; +#endif +}; +#endif + + +#ifdef MY_CONTEXT_DISABLE +struct my_context { + int dummy; +}; +#endif + + +/* + Initialize an asynchroneous context object. + Returns 0 on success, non-zero on failure. +*/ +extern int my_context_init(struct my_context *c, size_t stack_size); + +/* Free an asynchroneous context object, deallocating any resources used. */ +extern void my_context_destroy(struct my_context *c); + +/* + Spawn an asynchroneous context. The context will run the supplied user + function, passing the supplied user data pointer. + + The context must have been initialised with my_context_init() prior to + this call. + + The user function may call my_context_yield(), which will cause this + function to return 1. Then later my_context_continue() may be called, which + will resume the asynchroneous context by returning from the previous + my_context_yield() call. + + When the user function returns, this function returns 0. + + In case of error, -1 is returned. +*/ +extern int my_context_spawn(struct my_context *c, void (*f)(void *), void *d); + +/* + Suspend an asynchroneous context started with my_context_spawn. + + When my_context_yield() is called, execution immediately returns from the + last my_context_spawn() or my_context_continue() call. Then when later + my_context_continue() is called, execution resumes by returning from this + my_context_yield() call. + + Returns 0 if ok, -1 in case of error. +*/ +extern int my_context_yield(struct my_context *c); + +/* + Resume an asynchroneous context. The context was spawned by + my_context_spawn(), and later suspended inside my_context_yield(). + + The asynchroneous context may be repeatedly suspended with + my_context_yield() and resumed with my_context_continue(). + + Each time it is suspended, this function returns 1. When the originally + spawned user function returns, this function returns 0. + + In case of error, -1 is returned. +*/ +extern int my_context_continue(struct my_context *c); + + +struct mysql_async_context { + /* + This is set to the value that should be returned from foo_start() or + foo_cont() when a call is suspended. + */ + unsigned int events_to_wait_for; + /* + It is also set to the event(s) that triggered when a suspended call is + resumed, eg. whether we woke up due to connection completed or timeout + in mysql_real_connect_cont(). + */ + unsigned int events_occurred; + /* + This is set to the result of the whole asynchronous operation when it + completes. It uses a union, as different calls have different return + types. + */ + union { + void *r_ptr; + const void *r_const_ptr; + int r_int; + my_bool r_my_bool; + } ret_result; + /* + The timeout value (in millisecods), for suspended calls that need to wake + up on a timeout (eg. mysql_real_connect_start(). + */ + unsigned int timeout_value; + /* + This flag is set when we are executing inside some asynchronous call + foo_start() or foo_cont(). It is used to decide whether to use the + synchronous or asynchronous version of calls that may block such as + recv(). + + Note that this flag is not set when a call is suspended, eg. after + returning from foo_start() and before re-entering foo_cont(). + */ + my_bool active; + /* + This flag is set when an asynchronous operation is in progress, but + suspended. Ie. it is set when foo_start() or foo_cont() returns because + the operation needs to block, suspending the operation. + + It is used to give an error (rather than crash) if the application + attempts to call some foo_cont() method when no suspended operation foo is + in progress. + */ + my_bool suspended; + /* + If non-NULL, this is a pointer to a callback hook that will be invoked with + the user data argument just before the context is suspended, and just after + it is resumed. + */ + void (*suspend_resume_hook)(my_bool suspend, void *user_data); + void *suspend_resume_hook_user_data; + /* + This is used to save the execution contexts so that we can suspend an + operation and switch back to the application context, to resume the + suspended context later when the application re-invokes us with + foo_cont(). + */ + struct my_context async_context; +}; diff --git a/EQ2/source/depends/mariadb-10.1.19/include/my_cpu.h b/EQ2/source/depends/mariadb-10.1.19/include/my_cpu.h new file mode 100644 index 000000000..026b92c1b --- /dev/null +++ b/EQ2/source/depends/mariadb-10.1.19/include/my_cpu.h @@ -0,0 +1,44 @@ +/* Copyright (c) 2013, MariaDB foundation Ab and SkySQL + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; version 2 of the License. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02111-1307 USA +*/ + +/* instructions for specific cpu's */ + +/* + Macros for adjusting thread priority (hardware multi-threading) + The defines are the same ones used by the linux kernel +*/ + +#if defined(__powerpc__) +/* Very low priority */ +#define HMT_very_low() asm volatile("or 31,31,31") +/* Low priority */ +#define HMT_low() asm volatile("or 1,1,1") +/* Medium low priority */ +#define HMT_medium_low() asm volatile("or 6,6,6") +/* Medium priority */ +#define HMT_medium() asm volatile("or 2,2,2") +/* Medium high priority */ +#define HMT_medium_high() asm volatile("or 5,5,5") +/* High priority */ +#define HMT_high() asm volatile("or 3,3,3") +#else +#define HMT_very_low() +#define HMT_low() +#define HMT_medium_low() +#define HMT_medium() +#define HMT_medium_high() +#define HMT_high() +#endif diff --git a/EQ2/source/depends/mariadb-10.1.19/include/my_crypt.h b/EQ2/source/depends/mariadb-10.1.19/include/my_crypt.h new file mode 100644 index 000000000..e1e94c9bd --- /dev/null +++ b/EQ2/source/depends/mariadb-10.1.19/include/my_crypt.h @@ -0,0 +1,91 @@ +/* + Copyright (c) 2014 Google Inc. + Copyright (c) 2014, 2015 MariaDB Corporation + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; version 2 of the License. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ + +#ifndef MY_CRYPT_INCLUDED +#define MY_CRYPT_INCLUDED + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* return values from my_aes_encrypt/my_aes_decrypt functions */ +#define MY_AES_OK 0 +#define MY_AES_BAD_DATA -100 +#define MY_AES_OPENSSL_ERROR -101 +#define MY_AES_BAD_KEYSIZE -102 + +/* The block size for all supported algorithms */ +#define MY_AES_BLOCK_SIZE 16 + +/* The max key length of all supported algorithms */ +#define MY_AES_MAX_KEY_LENGTH 32 + +#define MY_AES_CTX_SIZE 512 + +enum my_aes_mode { + MY_AES_ECB, MY_AES_CBC +#ifdef HAVE_EncryptAes128Ctr + , MY_AES_CTR +#endif +#ifdef HAVE_EncryptAes128Gcm + , MY_AES_GCM +#endif +}; + +int my_aes_crypt_init(void *ctx, enum my_aes_mode mode, int flags, + const unsigned char* key, unsigned int klen, + const unsigned char* iv, unsigned int ivlen); +int my_aes_crypt_update(void *ctx, const uchar *src, uint slen, + uchar *dst, uint *dlen); +int my_aes_crypt_finish(void *ctx, uchar *dst, uint *dlen); +int my_aes_crypt(enum my_aes_mode mode, int flags, + const uchar *src, uint slen, uchar *dst, uint *dlen, + const uchar *key, uint klen, const uchar *iv, uint ivlen); + +/* + calculate the length of the cyphertext from the length of the plaintext + for different AES encryption modes with padding enabled. + Without padding (ENCRYPTION_FLAG_NOPAD) cyphertext has the same length + as the plaintext +*/ +static inline uint my_aes_get_size(enum my_aes_mode mode __attribute__((unused)), uint source_length) +{ +#ifdef HAVE_EncryptAes128Ctr + if (mode == MY_AES_CTR) + return source_length; +#ifdef HAVE_EncryptAes128Gcm + if (mode == MY_AES_GCM) + return source_length + MY_AES_BLOCK_SIZE; +#endif +#endif + return (source_length / MY_AES_BLOCK_SIZE + 1) * MY_AES_BLOCK_SIZE; +} + +static inline uint my_aes_ctx_size(enum my_aes_mode mode __attribute__((unused))) +{ + return MY_AES_CTX_SIZE; +} + +int my_random_bytes(uchar* buf, int num); + +#ifdef __cplusplus +} +#endif + +#endif /* MY_CRYPT_INCLUDED */ diff --git a/EQ2/source/depends/mariadb-10.1.19/include/my_dbug.h b/EQ2/source/depends/mariadb-10.1.19/include/my_dbug.h new file mode 100644 index 000000000..d56033ab0 --- /dev/null +++ b/EQ2/source/depends/mariadb-10.1.19/include/my_dbug.h @@ -0,0 +1,200 @@ +/* Copyright (c) 2000, 2010, Oracle and/or its affiliates. + Copyright (C) 2000-2011 Monty Program Ab + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; version 2 of the License. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ + +#ifndef _my_dbug_h +#define _my_dbug_h + +#ifndef __WIN__ +#include +#endif /* not __WIN__ */ + +#ifdef __cplusplus +extern "C" { +#endif +#if !defined(DBUG_OFF) && !defined(_lint) + +struct _db_stack_frame_ { + const char *func; /* function name of the previous stack frame */ + const char *file; /* filename of the function of previous frame */ + uint level; /* this nesting level, highest bit enables tracing */ + int line; /* line of DBUG_RETURN */ + struct _db_stack_frame_ *prev; /* pointer to the previous frame */ +}; + +struct _db_code_state_; +extern my_bool _dbug_on_; +extern my_bool _db_keyword_(struct _db_code_state_ *, const char *, int); +extern int _db_explain_(struct _db_code_state_ *cs, char *buf, size_t len); +extern int _db_explain_init_(char *buf, size_t len); +extern int _db_is_pushed_(void); +extern void _db_setjmp_(void); +extern void _db_longjmp_(void); +extern void _db_process_(const char *name); +extern void _db_push_(const char *control); +extern void _db_pop_(void); +extern void _db_set_(const char *control); +extern void _db_set_init_(const char *control); +extern void _db_enter_(const char *_func_, const char *_file_, uint _line_, + struct _db_stack_frame_ *_stack_frame_); +extern void _db_return_(struct _db_stack_frame_ *_stack_frame_); +extern void _db_pargs_(uint _line_,const char *keyword); +extern void _db_doprnt_(const char *format,...) + ATTRIBUTE_FORMAT(printf, 1, 2); +extern void _db_dump_(uint _line_,const char *keyword, + const unsigned char *memory, size_t length); +extern void _db_end_(void); +extern void _db_lock_file_(void); +extern void _db_unlock_file_(void); +extern FILE *_db_fp_(void); +extern void _db_flush_(void); +extern void dbug_swap_code_state(void **code_state_store); +extern void dbug_free_code_state(void **code_state_store); +extern const char* _db_get_func_(void); + +#define DBUG_LEAVE do { \ + _db_stack_frame_.line= __LINE__; \ + _db_return_ (&_db_stack_frame_); \ + _db_stack_frame_.line= 0; \ + } while(0) + +#ifdef HAVE_ATTRIBUTE_CLEANUP +#define DBUG_ENTER(a) struct _db_stack_frame_ _db_stack_frame_ __attribute__((cleanup(_db_return_))); \ + _db_enter_ (a,__FILE__,__LINE__,&_db_stack_frame_) +#define DBUG_RETURN(a1) do { _db_stack_frame_.line=__LINE__; return(a1);} while(0) +#define DBUG_VOID_RETURN do { _db_stack_frame_.line=__LINE__; return;} while(0) +#else +#define DBUG_ENTER(a) struct _db_stack_frame_ _db_stack_frame_; \ + _db_enter_ (a,__FILE__,__LINE__,&_db_stack_frame_) +#define DBUG_RETURN(a1) do {DBUG_LEAVE; return(a1);} while(0) +#define DBUG_VOID_RETURN do {DBUG_LEAVE; return;} while(0) +#endif + +#define DBUG_EXECUTE(keyword,a1) \ + do {if (_db_keyword_(0, (keyword), 0)) { a1 }} while(0) +#define DBUG_EXECUTE_IF(keyword,a1) \ + do {if (_db_keyword_(0, (keyword), 1)) { a1 }} while(0) +#define DBUG_EVALUATE(keyword,a1,a2) \ + (_db_keyword_(0,(keyword), 0) ? (a1) : (a2)) +#define DBUG_EVALUATE_IF(keyword,a1,a2) \ + (_db_keyword_(0,(keyword), 1) ? (a1) : (a2)) +#define DBUG_PRINT(keyword,arglist) \ + do {_db_pargs_(__LINE__,keyword); _db_doprnt_ arglist;} while(0) +#define DBUG_PUSH(a1) _db_push_ (a1) +#define DBUG_POP() _db_pop_ () +#define DBUG_SET(a1) _db_set_ (a1) +#define DBUG_SET_INITIAL(a1) _db_set_init_ (a1) +#define DBUG_PROCESS(a1) _db_process_(a1) +#define DBUG_FILE _db_fp_() +#define DBUG_DUMP(keyword,a1,a2) _db_dump_(__LINE__,keyword,a1,a2) +#define DBUG_END() _db_end_ () +#define DBUG_LOCK_FILE _db_lock_file_() +#define DBUG_UNLOCK_FILE _db_unlock_file_() +#define DBUG_ASSERT(A) assert(A) +#define DBUG_EXPLAIN(buf,len) _db_explain_(0, (buf),(len)) +#define DBUG_EXPLAIN_INITIAL(buf,len) _db_explain_init_((buf),(len)) +#define DEBUGGER_OFF do { _dbug_on_= 0; } while(0) +#define DEBUGGER_ON do { _dbug_on_= 1; } while(0) +#define IF_DBUG(A,B) A +#define DBUG_SWAP_CODE_STATE(arg) dbug_swap_code_state(arg) +#define DBUG_FREE_CODE_STATE(arg) dbug_free_code_state(arg) + +#ifndef __WIN__ +#define DBUG_ABORT() (_db_flush_(), abort()) +#else +/* + Avoid popup with abort/retry/ignore buttons. When BUG#31745 is fixed we can + call abort() instead of _exit(3) (now it would cause a "test signal" popup). +*/ +#include +#define DBUG_ABORT() (_db_flush_(),\ + (void)_CrtSetReportMode(_CRT_ERROR, _CRTDBG_MODE_FILE),\ + (void)_CrtSetReportFile(_CRT_ERROR, _CRTDBG_FILE_STDERR),\ + _exit(3)) +#endif + +/* + Make the program fail, without creating a core file. + abort() will send SIGABRT which (most likely) generates core. + Use SIGKILL instead, which cannot be caught. + We also pause the current thread, until the signal is actually delivered. + An alternative would be to use _exit(EXIT_FAILURE), + but then valgrind would report lots of memory leaks. + */ +#ifdef __WIN__ +#define DBUG_SUICIDE() DBUG_ABORT() +#else +extern void _db_suicide_(void); +#define DBUG_SUICIDE() (_db_flush_(), _db_suicide_()) +#endif + +#else /* No debugger */ + +#define DBUG_ENTER(a1) +#define DBUG_VIOLATION_HELPER_LEAVE do { } while(0) +#define DBUG_LEAVE +#define DBUG_RETURN(a1) do { return(a1); } while(0) +#define DBUG_VOID_RETURN do { return; } while(0) +#define DBUG_EXECUTE(keyword,a1) do { } while(0) +#define DBUG_EXECUTE_IF(keyword,a1) do { } while(0) +#define DBUG_EVALUATE(keyword,a1,a2) (a2) +#define DBUG_EVALUATE_IF(keyword,a1,a2) (a2) +#define DBUG_PRINT(keyword,arglist) do { } while(0) +#define DBUG_PUSH(a1) do { } while(0) +#define DBUG_SET(a1) do { } while(0) +#define DBUG_SET_INITIAL(a1) do { } while(0) +#define DBUG_POP() do { } while(0) +#define DBUG_PROCESS(a1) do { } while(0) +#define DBUG_DUMP(keyword,a1,a2) do { } while(0) +#define DBUG_END() do { } while(0) +#define DBUG_ASSERT(A) do { } while(0) +#define DBUG_LOCK_FILE do { } while(0) +#define DBUG_FILE (stderr) +#define DBUG_UNLOCK_FILE do { } while(0) +#define DBUG_EXPLAIN(buf,len) +#define DBUG_EXPLAIN_INITIAL(buf,len) +#define DEBUGGER_OFF do { } while(0) +#define DEBUGGER_ON do { } while(0) +#define IF_DBUG(A,B) B +#define DBUG_SWAP_CODE_STATE(arg) do { } while(0) +#define DBUG_FREE_CODE_STATE(arg) do { } while(0) +#define DBUG_ABORT() do { } while(0) +#define DBUG_CRASH_ENTER(func) +#define DBUG_CRASH_RETURN(val) do { return(val); } while(0) +#define DBUG_CRASH_VOID_RETURN do { return; } while(0) +#define DBUG_SUICIDE() do { } while(0) + +#endif + +#ifdef EXTRA_DEBUG +/** + Sync points allow us to force the server to reach a certain line of code + and block there until the client tells the server it is ok to go on. + The client tells the server to block with SELECT GET_LOCK() + and unblocks it with SELECT RELEASE_LOCK(). Used for debugging difficult + concurrency problems +*/ +#define DBUG_SYNC_POINT(lock_name,lock_timeout) \ + debug_sync_point(lock_name,lock_timeout) +void debug_sync_point(const char* lock_name, uint lock_timeout); +#else +#define DBUG_SYNC_POINT(lock_name,lock_timeout) +#endif /* EXTRA_DEBUG */ + +#ifdef __cplusplus +} +#endif + +#endif /* _my_dbug_h */ diff --git a/EQ2/source/depends/mariadb-10.1.19/include/my_decimal_limits.h b/EQ2/source/depends/mariadb-10.1.19/include/my_decimal_limits.h new file mode 100644 index 000000000..50d70357c --- /dev/null +++ b/EQ2/source/depends/mariadb-10.1.19/include/my_decimal_limits.h @@ -0,0 +1,45 @@ +#ifndef MY_DECIMAL_LIMITS_INCLUDED +#define MY_DECIMAL_LIMITS_INCLUDED +/* Copyright (c) 2011 Monty Program Ab + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; version 2 of the License. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ + +#define DECIMAL_LONGLONG_DIGITS 22 +#define DECIMAL_LONG_DIGITS 10 +#define DECIMAL_LONG3_DIGITS 8 + +/** maximum length of buffer in our big digits (uint32). */ +#define DECIMAL_BUFF_LENGTH 9 + +/* the number of digits that my_decimal can possibly contain */ +#define DECIMAL_MAX_POSSIBLE_PRECISION (DECIMAL_BUFF_LENGTH * 9) + + +/** + maximum guaranteed precision of number in decimal digits (number of our + digits * number of decimal digits in one our big digit - number of decimal + digits in one our big digit decreased by 1 (because we always put decimal + point on the border of our big digits)) +*/ +#define DECIMAL_MAX_PRECISION (DECIMAL_MAX_POSSIBLE_PRECISION - 8*2) +#define DECIMAL_MAX_SCALE 30 +#define DECIMAL_NOT_SPECIFIED 31 + +/** + maximum length of string representation (number of maximum decimal + digits + 1 position for sign + 1 position for decimal point, no terminator) +*/ +#define DECIMAL_MAX_STR_LENGTH (DECIMAL_MAX_POSSIBLE_PRECISION + 2) + +#endif /* MY_DECIMAL_LIMITS_INCLUDED */ diff --git a/EQ2/source/depends/mariadb-10.1.19/include/my_default.h b/EQ2/source/depends/mariadb-10.1.19/include/my_default.h new file mode 100644 index 000000000..1d556de69 --- /dev/null +++ b/EQ2/source/depends/mariadb-10.1.19/include/my_default.h @@ -0,0 +1,50 @@ +/* Copyright (C) 2013 Monty Program Ab + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; version 2 of the License. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ + +/* Definitions for mysys/my_default.c */ + +#ifndef MY_DEFAULT_INCLUDED +#define MY_DEFAULT_INCLUDED + +C_MODE_START + +extern const char *my_defaults_extra_file; +extern const char *my_defaults_group_suffix; +extern const char *my_defaults_file; +extern my_bool my_getopt_use_args_separator; +extern my_bool my_getopt_is_args_separator(const char* arg); + +/* Define the type of function to be passed to process_default_option_files */ +typedef int (*Process_option_func)(void *ctx, const char *group_name, + const char *option); + +extern int get_defaults_options(int argc, char **argv, + char **defaults, char **extra_defaults, + char **group_suffix); +extern int my_load_defaults(const char *conf_file, const char **groups, + int *argc, char ***argv, const char ***); +extern int load_defaults(const char *conf_file, const char **groups, + int *argc, char ***argv); +extern int my_search_option_files(const char *conf_file, int *argc, + char ***argv, uint *args_used, + Process_option_func func, void *func_ctx, + const char **default_directories); +extern void free_defaults(char **argv); +extern void my_print_default_files(const char *conf_file); +extern void print_defaults(const char *conf_file, const char **groups); + +C_MODE_END + +#endif /* MY_DEFAULT_INCLUDED */ diff --git a/EQ2/source/depends/mariadb-10.1.19/include/my_dir.h b/EQ2/source/depends/mariadb-10.1.19/include/my_dir.h new file mode 100644 index 000000000..be988ae79 --- /dev/null +++ b/EQ2/source/depends/mariadb-10.1.19/include/my_dir.h @@ -0,0 +1,111 @@ +/* Copyright (c) 2000, 2010, Oracle and/or its affiliates. All rights reserved. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; version 2 of the License. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ + +#ifndef MY_DIR_H +#define MY_DIR_H + +#include "my_global.h" + +#include + +#ifdef __cplusplus +extern "C" { +#endif + + /* Defines for my_dir and my_stat */ + +#define MY_S_IFMT S_IFMT /* type of file */ +#define MY_S_IFDIR S_IFDIR /* directory */ +#define MY_S_IFCHR S_IFCHR /* character special */ +#define MY_S_IFBLK S_IFBLK /* block special */ +#define MY_S_IFREG S_IFREG /* regular */ +#define MY_S_IFIFO S_IFIFO /* fifo */ +#define MY_S_ISUID S_ISUID /* set user id on execution */ +#define MY_S_ISGID S_ISGID /* set group id on execution */ +#define MY_S_ISVTX S_ISVTX /* save swapped text even after use */ +#define MY_S_IREAD S_IREAD /* read permission, owner */ +#define MY_S_IWRITE S_IWRITE /* write permission, owner */ +#define MY_S_IEXEC S_IEXEC /* execute/search permission, owner */ + +#define MY_S_ISDIR(m) (((m) & MY_S_IFMT) == MY_S_IFDIR) +#define MY_S_ISCHR(m) (((m) & MY_S_IFMT) == MY_S_IFCHR) +#define MY_S_ISBLK(m) (((m) & MY_S_IFMT) == MY_S_IFBLK) +#define MY_S_ISREG(m) (((m) & MY_S_IFMT) == MY_S_IFREG) +#define MY_S_ISFIFO(m) (((m) & MY_S_IFMT) == MY_S_IFIFO) + +/* Ensure these dosn't clash with anything in my_sys.h */ +#define MY_WANT_SORT 8192 /* my_lib; sort files */ +#define MY_WANT_STAT 16384 /* my_lib; stat files */ +#define MY_DONT_SORT 0 + + /* typedefs for my_dir & my_stat */ + +#ifdef USE_MY_STAT_STRUCT + +typedef struct my_stat +{ + dev_t st_dev; /* major & minor device numbers */ + ino_t st_ino; /* inode number */ + ushort st_mode; /* file permissons (& suid sgid .. bits) */ + short st_nlink; /* number of links to file */ + ushort st_uid; /* user id */ + ushort st_gid; /* group id */ + dev_t st_rdev; /* more major & minor device numbers (???) */ + off_t st_size; /* size of file */ + time_t st_atime; /* time for last read */ + time_t st_mtime; /* time for last contens modify */ + time_t st_ctime; /* time for last inode or contents modify */ +} MY_STAT; + +#else + +#if(_MSC_VER) +#define MY_STAT struct _stati64 /* 64 bit file size */ +#else +#define MY_STAT struct stat /* Orginal struct have what we need */ +#endif + +#endif /* USE_MY_STAT_STRUCT */ + +/* Struct describing one file returned from my_dir */ +typedef struct fileinfo +{ + char *name; + MY_STAT *mystat; +} FILEINFO; + +typedef struct st_my_dir /* Struct returned from my_dir */ +{ + /* + These members are just copies of parts of DYNAMIC_ARRAY structure, + which is allocated right after the end of MY_DIR structure (MEM_ROOT + for storing names is also resides there). We've left them here because + we don't want to change code that uses my_dir. + */ + struct fileinfo *dir_entry; + uint number_of_files; +} MY_DIR; + +extern MY_DIR *my_dir(const char *path,myf MyFlags); +extern void my_dirend(MY_DIR *buffer); +extern MY_STAT *my_stat(const char *path, MY_STAT *stat_area, myf my_flags); +extern int my_fstat(int filenr, MY_STAT *stat_area, myf MyFlags); + +#ifdef __cplusplus +} +#endif + +#endif /* MY_DIR_H */ + diff --git a/EQ2/source/depends/mariadb-10.1.19/include/my_getopt.h b/EQ2/source/depends/mariadb-10.1.19/include/my_getopt.h new file mode 100644 index 000000000..584c00946 --- /dev/null +++ b/EQ2/source/depends/mariadb-10.1.19/include/my_getopt.h @@ -0,0 +1,131 @@ +/* + Copyright (c) 2002, 2013, Oracle and/or its affiliates. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; version 2 of the License. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ + +#ifndef _my_getopt_h +#define _my_getopt_h + +#include "my_sys.h" /* loglevel */ +/* my_getopt and my_default are almost always used together */ +#include + +C_MODE_START + +#define GET_NO_ARG 1 +#define GET_BOOL 2 +#define GET_INT 3 +#define GET_UINT 4 +#define GET_LONG 5 +#define GET_ULONG 6 +#define GET_LL 7 +#define GET_ULL 8 +#define GET_STR 9 +#define GET_STR_ALLOC 10 +#define GET_DISABLED 11 +#define GET_ENUM 12 +#define GET_SET 13 +#define GET_DOUBLE 14 +#define GET_FLAGSET 15 + +#define GET_ASK_ADDR 128 +#define GET_AUTO 64 +#define GET_TYPE_MASK 63 + +/** + Enumeration of the my_option::arg_type attributes. + It should be noted that for historical reasons variables with the combination + arg_type=NO_ARG, my_option::var_type=GET_BOOL still accepts + arguments. This is someone counter intuitive and care should be taken + if the code is refactored. +*/ +enum get_opt_arg_type { NO_ARG, OPT_ARG, REQUIRED_ARG }; + +struct st_typelib; + +struct my_option +{ + const char *name; /**< Name of the option. name=NULL + marks the end of the my_option[] + array. + */ + int id; /**< For 0255 no short option + is created, but a long option still + can be identified uniquely in the + my_get_one_option() callback. + If an opton needs neither special + treatment in the my_get_one_option() + nor one-letter short equivalent + use id=0 + */ + const char *comment; /**< option comment, for autom. --help. + if it's NULL the option is not + visible in --help. + */ + void *value; /**< A pointer to the variable value */ + void *u_max_value; /**< The user def. max variable value */ + struct st_typelib *typelib; /**< Pointer to possible values */ + ulong var_type; /**< GET_BOOL, GET_ULL, etc */ + enum get_opt_arg_type arg_type; /**< e.g. REQUIRED_ARG or OPT_ARG */ + longlong def_value; /**< Default value */ + longlong min_value; /**< Min allowed value (for numbers) */ + ulonglong max_value; /**< Max allowed value (for numbers) */ + longlong sub_size; /**< Unused */ + long block_size; /**< Value should be a mult. of this (for numbers) */ + void *app_type; /**< To be used by an application */ +}; + +typedef my_bool (*my_get_one_option)(int, const struct my_option *, char *); + +/** + Used to retrieve a reference to the object (variable) that holds the value + for the given option. For example, if var_type is GET_UINT, the function + must return a pointer to a variable of type uint. A argument is stored in + the location pointed to by the returned pointer. +*/ +typedef void *(*my_getopt_value)(const char *, uint, const struct my_option *, + int *); + + +extern char *disabled_my_option; +extern char *autoset_my_option; +extern my_bool my_getopt_print_errors; +extern my_bool my_getopt_skip_unknown; +extern my_bool my_getopt_prefix_matching; +extern my_error_reporter my_getopt_error_reporter; + +extern int handle_options (int *argc, char ***argv, + const struct my_option *longopts, my_get_one_option); +extern void my_cleanup_options(const struct my_option *options); +extern void my_print_help(const struct my_option *options); +extern void my_print_variables(const struct my_option *options); +extern void my_getopt_register_get_addr(my_getopt_value); + +ulonglong getopt_ull_limit_value(ulonglong num, const struct my_option *optp, + my_bool *fix); +longlong getopt_ll_limit_value(longlong, const struct my_option *, + my_bool *fix); +double getopt_double_limit_value(double num, const struct my_option *optp, + my_bool *fix); +my_bool getopt_compare_strings(const char *s, const char *t, uint length); + +ulonglong getopt_double2ulonglong(double); +double getopt_ulonglong2double(ulonglong); + +C_MODE_END + +#endif /* _my_getopt_h */ + diff --git a/EQ2/source/depends/mariadb-10.1.19/include/my_global.h b/EQ2/source/depends/mariadb-10.1.19/include/my_global.h new file mode 100644 index 000000000..bca03bfc4 --- /dev/null +++ b/EQ2/source/depends/mariadb-10.1.19/include/my_global.h @@ -0,0 +1,1236 @@ +/* + Copyright (c) 2001, 2013, Oracle and/or its affiliates. + Copyright (c) 2010, 2013, Monty Program Ab. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; version 2 of the License. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA */ + +/* This is the include file that should be included 'first' in every C file. */ + +#ifndef MY_GLOBAL_INCLUDED +#define MY_GLOBAL_INCLUDED + +/* Client library users on Windows need this macro defined here. */ +#if !defined(__WIN__) && defined(_WIN32) +#define __WIN__ +#endif + +/* + InnoDB depends on some MySQL internals which other plugins should not + need. This is because of InnoDB's foreign key support, "safe" binlog + truncation, and other similar legacy features. + + We define accessors for these internals unconditionally, but do not + expose them in mysql/plugin.h. They are declared in ha_innodb.h for + InnoDB's use. +*/ +#define INNODB_COMPATIBILITY_HOOKS + +#ifdef __CYGWIN__ +/* We use a Unix API, so pretend it's not Windows */ +#undef WIN +#undef WIN32 +#undef _WIN +#undef _WIN32 +#undef _WIN64 +#undef __WIN__ +#undef __WIN32__ +#define HAVE_ERRNO_AS_DEFINE +#define _POSIX_MONOTONIC_CLOCK +#define _POSIX_THREAD_CPUTIME +#endif /* __CYGWIN__ */ + +#if defined(__OpenBSD__) && (OpenBSD >= 200411) +#define HAVE_ERRNO_AS_DEFINE +#endif + +#if defined(i386) && !defined(__i386__) +#define __i386__ +#endif + +/* Macros to make switching between C and C++ mode easier */ +#ifdef __cplusplus +#define C_MODE_START extern "C" { +#define C_MODE_END } +#else +#define C_MODE_START +#define C_MODE_END +#endif + +#ifdef __cplusplus +#define CPP_UNNAMED_NS_START namespace { +#define CPP_UNNAMED_NS_END } +#endif + +#include + +#ifdef WITH_PERFSCHEMA_STORAGE_ENGINE +#define HAVE_PSI_INTERFACE +#endif /* WITH_PERFSCHEMA_STORAGE_ENGINE */ + +/* Make it easier to add conditional code in _expressions_ */ +#ifdef __WIN__ +#define IF_WIN(A,B) A +#else +#define IF_WIN(A,B) B +#endif + +#ifdef EMBEDDED_LIBRARY +#define IF_EMBEDDED(A,B) A +#else +#define IF_EMBEDDED(A,B) B +#endif + +#ifdef WITH_PARTITION_STORAGE_ENGINE +#define IF_PARTITIONING(A,B) A +#else +#define IF_PARTITIONING(A,B) B +#endif + +#if defined (_WIN32) +/* + off_t is 32 bit long. We do not use C runtime functions + with off_t but native Win32 file IO APIs, that work with + 64 bit offsets. +*/ +#undef SIZEOF_OFF_T +#define SIZEOF_OFF_T 8 + +/* + Prevent inclusion of Windows GDI headers - they define symbol + ERROR that conflicts with mysql headers. +*/ +#ifndef NOGDI +#define NOGDI +#endif + +/* Include common headers.*/ +#include +#include /* SOCKET */ +#include /* access(), chmod() */ +#include /* getpid() */ + +#define sleep(a) Sleep((a)*1000) + +/* Define missing access() modes. */ +#define F_OK 0 +#define W_OK 2 +#define R_OK 4 /* Test for read permission. */ + +/* Define missing file locking constants. */ +#define F_RDLCK 1 +#define F_WRLCK 2 +#define F_UNLCK 3 +#define F_TO_EOF 0x3FFFFFFF + +/* Shared memory and named pipe connections are supported. */ +#define HAVE_SMEM 1 +#define HAVE_NAMED_PIPE 1 +#define shared_memory_buffer_length 16000 +#define default_shared_memory_base_name "MYSQL" +#endif /* _WIN32*/ + + +/* Workaround for _LARGE_FILES and _LARGE_FILE_API incompatibility on AIX */ +#if defined(_AIX) && defined(_LARGE_FILE_API) +#undef _LARGE_FILE_API +#undef __GNUG__ +#endif + +/* + The macros below are used to allow build of Universal/fat binaries of + MySQL and MySQL applications under darwin. +*/ +#if defined(__APPLE__) && defined(__MACH__) +# undef SIZEOF_CHARP +# undef SIZEOF_SHORT +# undef SIZEOF_INT +# undef SIZEOF_LONG +# undef SIZEOF_LONG_LONG +# undef SIZEOF_OFF_T +# undef WORDS_BIGENDIAN +# define SIZEOF_SHORT 2 +# define SIZEOF_INT 4 +# define SIZEOF_LONG_LONG 8 +# define SIZEOF_OFF_T 8 +# if defined(__i386__) || defined(__ppc__) +# define SIZEOF_CHARP 4 +# define SIZEOF_LONG 4 +# elif defined(__x86_64__) || defined(__ppc64__) +# define SIZEOF_CHARP 8 +# define SIZEOF_LONG 8 +# else +# error Building FAT binary for an unknown architecture. +# endif +# if defined(__ppc__) || defined(__ppc64__) +# define WORDS_BIGENDIAN +# endif +#endif /* defined(__APPLE__) && defined(__MACH__) */ + + +/* + The macros below are borrowed from include/linux/compiler.h in the + Linux kernel. Use them to indicate the likelyhood of the truthfulness + of a condition. This serves two purposes - newer versions of gcc will be + able to optimize for branch predication, which could yield siginficant + performance gains in frequently executed sections of the code, and the + other reason to use them is for documentation +*/ + +#if !defined(__GNUC__) || (__GNUC__ == 2 && __GNUC_MINOR__ < 96) +#define __builtin_expect(x, expected_value) (x) +#endif + +/** + The semantics of builtin_expect() are that + 1) its two arguments are long + 2) it's likely that they are == + Those of our likely(x) are that x can be bool/int/longlong/pointer. +*/ +#define likely(x) __builtin_expect(((x) != 0),1) +#define unlikely(x) __builtin_expect(((x) != 0),0) + +/* Fix problem with S_ISLNK() on Linux */ +#if defined(TARGET_OS_LINUX) || defined(__GLIBC__) +#undef _GNU_SOURCE +#define _GNU_SOURCE 1 +#endif + +/* + Temporary solution to solve bug#7156. Include "sys/types.h" before + the thread headers, else the function madvise() will not be defined +*/ +#if defined(HAVE_SYS_TYPES_H) && ( defined(sun) || defined(__sun) ) +#include +#endif + +#define __EXTENSIONS__ 1 /* We want some extension */ +#ifndef __STDC_EXT__ +#define __STDC_EXT__ 1 /* To get large file support on hpux */ +#endif + +/* + Solaris 9 include file refers to X/Open document + + System Interfaces and Headers, Issue 5 + + saying we should define _XOPEN_SOURCE=500 to get POSIX.1c prototypes, + but apparently other systems (namely FreeBSD) don't agree. + + On a newer Solaris 10, the above file recognizes also _XOPEN_SOURCE=600. + Furthermore, it tests that if a program requires older standard + (_XOPEN_SOURCE<600 or _POSIX_C_SOURCE<200112L) it cannot be + run on a new compiler (that defines _STDC_C99) and issues an #error. + It's also an #error if a program requires new standard (_XOPEN_SOURCE=600 + or _POSIX_C_SOURCE=200112L) and a compiler does not define _STDC_C99. + + To add more to this mess, Sun Studio C compiler defines _STDC_C99 while + C++ compiler does not! + + So, in a desperate attempt to get correct prototypes for both + C and C++ code, we define either _XOPEN_SOURCE=600 or _XOPEN_SOURCE=500 + depending on the compiler's announced C standard support. + + Cleaner solutions are welcome. +*/ +#ifdef __sun +#if __STDC_VERSION__ - 0 >= 199901L +#define _XOPEN_SOURCE 600 +#else +#define _XOPEN_SOURCE 500 +#endif +#endif + + +#ifdef _AIX +/* + AIX includes inttypes.h from sys/types.h + Explicitly request format macros before the first inclusion of inttypes.h +*/ +#define __STDC_FORMAT_MACROS +#endif + + +#if !defined(__WIN__) +#ifndef _POSIX_PTHREAD_SEMANTICS +#define _POSIX_PTHREAD_SEMANTICS /* We want posix threads */ +#endif + +#if !defined(SCO) +#define _REENTRANT 1 /* Some thread libraries require this */ +#endif +#if !defined(_THREAD_SAFE) && !defined(_AIX) +#define _THREAD_SAFE /* Required for OSF1 */ +#endif +#if defined(HPUX10) || defined(HPUX11) +C_MODE_START /* HPUX needs this, signal.h bug */ +#include +C_MODE_END +#else +#include /* AIX must have this included first */ +#endif +#if !defined(SCO) && !defined(_REENTRANT) +#define _REENTRANT 1 /* Threads requires reentrant code */ +#endif +#endif /* !defined(__WIN__) */ + +/* Go around some bugs in different OS and compilers */ +#ifdef _AIX /* By soren@t.dk */ +#define _H_STRINGS +#define _SYS_STREAM_H +/* #define _AIX32_CURSES */ /* XXX: this breaks AIX 4.3.3 (others?). */ +#define ulonglong2double(A) my_ulonglong2double(A) +#define my_off_t2double(A) my_ulonglong2double(A) +C_MODE_START +inline double my_ulonglong2double(unsigned long long A) { return (double)A; } +C_MODE_END +#endif /* _AIX */ + +#ifdef UNDEF_HAVE_INITGROUPS /* For AIX 4.3 */ +#undef HAVE_INITGROUPS +#endif + +/* gcc/egcs issues */ + +#if defined(__GNUC) && defined(__EXCEPTIONS) +#error "Please add -fno-exceptions to CXXFLAGS and reconfigure/recompile" +#endif + +#if defined(_lint) && !defined(lint) +#define lint +#endif +#if SIZEOF_LONG_LONG > 4 && !defined(_LONG_LONG) +#define _LONG_LONG 1 /* For AIX string library */ +#endif + +/* Workaround for _LARGE_FILES and _LARGE_FILE_API incompatibility on AIX */ +#if defined(_AIX) && defined(_LARGE_FILE_API) +#undef _LARGE_FILE_API +#undef __GNUG__ +#endif + + +#ifndef stdin +#include +#endif +#include +#ifdef HAVE_STDLIB_H +#include +#endif +#ifdef HAVE_STDDEF_H +#include +#endif + +#include +#ifdef HAVE_LIMITS_H +#include +#endif +#ifdef HAVE_FLOAT_H +#include +#endif +#ifdef HAVE_FENV_H +#include /* For fesetround() */ +#endif + +#ifdef HAVE_SYS_TYPES_H +#include +#endif + +/* Workaround for _LARGE_FILES and _LARGE_FILE_API incompatibility on AIX */ +#if defined(_AIX) && defined(_LARGE_FILE_API) +#undef _LARGE_FILE_API +#undef __GNUG__ +#endif + + +#ifdef HAVE_FCNTL_H +#include +#endif +#ifdef HAVE_SYS_STAT_H +#include +#endif +#if TIME_WITH_SYS_TIME +# include +# include +#else +# if HAVE_SYS_TIME_H +# include +# else +# include +# endif +#endif /* TIME_WITH_SYS_TIME */ +#ifdef HAVE_UNISTD_H +#include +#endif +#if defined(__cplusplus) && defined(NO_CPLUSPLUS_ALLOCA) +#undef HAVE_ALLOCA +#undef HAVE_ALLOCA_H +#endif +#ifdef HAVE_ALLOCA_H +#include +#endif + +#include /* Recommended by debian */ +/* We need the following to go around a problem with openssl on solaris */ +#if defined(HAVE_CRYPT_H) +#include +#endif + +/* + A lot of our programs uses asserts, so better to always include it + This also fixes a problem when people uses DBUG_ASSERT without including + assert.h +*/ +#include + +/* an assert that works at compile-time. only for constant expression */ +#ifdef _some_old_compiler_that_does_not_understand_the_construct_below_ +#define compile_time_assert(X) do { } while(0) +#else +#define compile_time_assert(X) \ + do \ + { \ + typedef char compile_time_assert[(X) ? 1 : -1] __attribute__((unused)); \ + } while(0) +#endif + +/* Go around some bugs in different OS and compilers */ +#if defined (HPUX11) && defined(_LARGEFILE_SOURCE) +#ifndef _LARGEFILE64_SOURCE +#define _LARGEFILE64_SOURCE +#endif +#endif + +#if defined(_HPUX_SOURCE) && defined(HAVE_SYS_STREAM_H) +#include /* HPUX 10.20 defines ulong here. UGLY !!! */ +#define HAVE_ULONG +#endif +#if defined(HPUX10) && defined(_LARGEFILE64_SOURCE) +/* Fix bug in setrlimit */ +#undef setrlimit +#define setrlimit cma_setrlimit64 +#endif +/* Declare madvise where it is not declared for C++, like Solaris */ +#if HAVE_MADVISE && !HAVE_DECL_MADVISE && defined(__cplusplus) +extern "C" int madvise(void *addr, size_t len, int behav); +#endif + +#define QUOTE_ARG(x) #x /* Quote argument (before cpp) */ +#define STRINGIFY_ARG(x) QUOTE_ARG(x) /* Quote argument, after cpp */ + +/* Paranoid settings. Define I_AM_PARANOID if you are paranoid */ +#ifdef I_AM_PARANOID +#define DONT_ALLOW_USER_CHANGE 1 +#define DONT_USE_MYSQL_PWD 1 +#endif + +/* Does the system remember a signal handler after a signal ? */ +#if !defined(HAVE_BSD_SIGNALS) && !defined(HAVE_SIGACTION) +#define SIGNAL_HANDLER_RESET_ON_DELIVERY +#endif + +#ifndef STDERR_FILENO +#define STDERR_FILENO fileno(stderr) +#endif + +#ifndef SO_EXT +#ifdef _WIN32 +#define SO_EXT ".dll" +#else +#define SO_EXT ".so" +#endif +#endif + +/* + Suppress uninitialized variable warning without generating code. +*/ +#if defined(__GNUC__) +/* GCC specific self-initialization which inhibits the warning. */ +#define UNINIT_VAR(x) x= x +#elif defined(_lint) || defined(FORCE_INIT_OF_VARS) +#define UNINIT_VAR(x) x= 0 +#else +#define UNINIT_VAR(x) x +#endif + +/* This is only to be used when reseting variables in a class constructor */ +#if defined(_lint) || defined(FORCE_INIT_OF_VARS) +#define LINT_INIT(x) x= 0 +#else +#define LINT_INIT(x) +#endif + +#if !defined(HAVE_UINT) +#undef HAVE_UINT +#define HAVE_UINT +typedef unsigned int uint; +typedef unsigned short ushort; +#endif + +#define swap_variables(t, a, b) do { t dummy; dummy= a; a= b; b= dummy; } while(0) +#define MY_TEST(a) ((a) ? 1 : 0) +#define set_if_bigger(a,b) do { if ((a) < (b)) (a)=(b); } while(0) +#define set_if_smaller(a,b) do { if ((a) > (b)) (a)=(b); } while(0) +#define set_bits(type, bit_count) (sizeof(type)*8 <= (bit_count) ? ~(type) 0 : ((((type) 1) << (bit_count)) - (type) 1)) +#define test_all_bits(a,b) (((a) & (b)) == (b)) +#define array_elements(A) ((uint) (sizeof(A)/sizeof(A[0]))) + +/* Define some general constants */ +#ifndef TRUE +#define TRUE (1) /* Logical true */ +#define FALSE (0) /* Logical false */ +#endif + +#include + +/* + Wen using the embedded library, users might run into link problems, + duplicate declaration of __cxa_pure_virtual, solved by declaring it a + weak symbol. +*/ +#if defined(USE_MYSYS_NEW) && ! defined(DONT_DECLARE_CXA_PURE_VIRTUAL) +C_MODE_START +int __cxa_pure_virtual () __attribute__ ((weak)); +C_MODE_END +#endif + +/* The DBUG_ON flag always takes precedence over default DBUG_OFF */ +#if defined(DBUG_ON) && defined(DBUG_OFF) +#undef DBUG_OFF +#endif + +/* We might be forced to turn debug off, if not turned off already */ +#if (defined(FORCE_DBUG_OFF) || defined(_lint)) && !defined(DBUG_OFF) +# define DBUG_OFF +# ifdef DBUG_ON +# undef DBUG_ON +# endif +#endif + +#ifdef DBUG_OFF +#undef EXTRA_DEBUG +#endif + +/* Some types that is different between systems */ + +typedef int File; /* File descriptor */ +#ifdef _WIN32 +typedef SOCKET my_socket; +#else +typedef int my_socket; /* File descriptor for sockets */ +#define INVALID_SOCKET -1 +#endif +/* Type for fuctions that handles signals */ +#define sig_handler RETSIGTYPE +C_MODE_START +#ifdef HAVE_SIGHANDLER_T +#define sig_return sighandler_t +#else +typedef void (*sig_return)(void); /* Returns type from signal */ +#endif +C_MODE_END +#if defined(__GNUC__) && !defined(_lint) +typedef char pchar; /* Mixed prototypes can take char */ +typedef char puchar; /* Mixed prototypes can take char */ +typedef char pbool; /* Mixed prototypes can take char */ +typedef short pshort; /* Mixed prototypes can take short int */ +typedef float pfloat; /* Mixed prototypes can take float */ +#else +typedef int pchar; /* Mixed prototypes can't take char */ +typedef uint puchar; /* Mixed prototypes can't take char */ +typedef int pbool; /* Mixed prototypes can't take char */ +typedef int pshort; /* Mixed prototypes can't take short int */ +typedef double pfloat; /* Mixed prototypes can't take float */ +#endif +C_MODE_START +typedef int (*qsort_cmp)(const void *,const void *); +typedef int (*qsort_cmp2)(void*, const void *,const void *); +C_MODE_END +#define qsort_t RETQSORTTYPE /* Broken GCC cant handle typedef !!!! */ +#ifdef HAVE_SYS_SOCKET_H +#include +#endif +typedef SOCKET_SIZE_TYPE size_socket; + +#ifndef SOCKOPT_OPTLEN_TYPE +#define SOCKOPT_OPTLEN_TYPE size_socket +#endif + +/* file create flags */ + +#ifndef O_SHARE /* Probably not windows */ +#define O_SHARE 0 /* Flag to my_open for shared files */ +#ifndef O_BINARY +#define O_BINARY 0 /* Flag to my_open for binary files */ +#endif +#ifndef FILE_BINARY +#define FILE_BINARY O_BINARY /* Flag to my_fopen for binary streams */ +#endif +#ifdef HAVE_FCNTL +#define HAVE_FCNTL_LOCK +#define F_TO_EOF 0L /* Param to lockf() to lock rest of file */ +#endif +#endif /* O_SHARE */ + +#ifndef O_TEMPORARY +#define O_TEMPORARY 0 +#endif +#ifndef O_SHORT_LIVED +#define O_SHORT_LIVED 0 +#endif +#ifndef O_NOFOLLOW +#define O_NOFOLLOW 0 +#endif +#ifndef O_CLOEXEC +#define O_CLOEXEC 0 +#endif +#ifndef SOCK_CLOEXEC +#define SOCK_CLOEXEC 0 +#endif + +/* additional file share flags for win32 */ +#ifdef __WIN__ +#define _SH_DENYRWD 0x110 /* deny read/write mode & delete */ +#define _SH_DENYWRD 0x120 /* deny write mode & delete */ +#define _SH_DENYRDD 0x130 /* deny read mode & delete */ +#define _SH_DENYDEL 0x140 /* deny delete only */ +#endif /* __WIN__ */ + + +/* General constants */ +#define FN_LEN 256 /* Max file name len */ +#define FN_HEADLEN 253 /* Max length of filepart of file name */ +#define FN_EXTLEN 20 /* Max length of extension (part of FN_LEN) */ +#define FN_REFLEN 512 /* Max length of full path-name */ +#define FN_EXTCHAR '.' +#define FN_HOMELIB '~' /* ~/ is used as abbrev for home dir */ +#define FN_CURLIB '.' /* ./ is used as abbrev for current dir */ +#define FN_PARENTDIR ".." /* Parent directory; Must be a string */ + +#ifdef _WIN32 +#define FN_LIBCHAR '\\' +#define FN_LIBCHAR2 '/' +#define FN_DIRSEP "/\\" /* Valid directory separators */ +#define FN_EXEEXT ".exe" +#define FN_SOEXT ".dll" +#define FN_ROOTDIR "\\" +#define FN_DEVCHAR ':' +#define FN_NETWORK_DRIVES /* Uses \\ to indicate network drives */ +#define FN_NO_CASE_SENCE /* Files are not case-sensitive */ +#else +#define FN_LIBCHAR '/' +#define FN_LIBCHAR2 '/' +#define FN_DIRSEP "/" /* Valid directory separators */ +#define FN_EXEEXT "" +#define FN_SOEXT ".so" +#define FN_ROOTDIR "/" +#endif + +/* + MY_FILE_MIN is Windows speciality and is used to quickly detect + the mismatch of CRT and mysys file IO usage on Windows at runtime. + CRT file descriptors can be in the range 0-2047, whereas descriptors returned + by my_open() will start with 2048. If a file descriptor with value less then + MY_FILE_MIN is passed to mysys IO function, chances are it stemms from + open()/fileno() and not my_open()/my_fileno. + + For Posix, mysys functions are light wrappers around libc, and MY_FILE_MIN + is logically 0. +*/ + +#ifdef _WIN32 +#define MY_FILE_MIN 2048 +#else +#define MY_FILE_MIN 0 +#endif + +/* + MY_NFILE is the default size of my_file_info array. + + It is larger on Windows, because it all file handles are stored in my_file_info + Default size is 16384 and this should be enough for most cases.If it is not + enough, --max-open-files with larger value can be used. + + For Posix , my_file_info array is only used to store filenames for + error reporting and its size is not a limitation for number of open files. +*/ +#ifdef _WIN32 +#define MY_NFILE (16384 + MY_FILE_MIN) +#else +#define MY_NFILE 64 +#endif + +#ifndef OS_FILE_LIMIT +#define OS_FILE_LIMIT UINT_MAX +#endif + +/* + Io buffer size; Must be a power of 2 and a multiple of 512. May be + smaller what the disk page size. This influences the speed of the + isam btree library. eg to big to slow. +*/ +#define IO_SIZE 4096 +/* + How much overhead does malloc have. The code often allocates + something like 1024-MALLOC_OVERHEAD bytes +*/ +#define MALLOC_OVERHEAD 8 + + /* get memory in huncs */ +#define ONCE_ALLOC_INIT (uint) 4096 + /* Typical record cache */ +#define RECORD_CACHE_SIZE (uint) (128*1024) + /* Typical key cache */ +#define KEY_CACHE_SIZE (uint) (128L*1024L*1024L) + /* Default size of a key cache block */ +#define KEY_CACHE_BLOCK_SIZE (uint) 1024 + + /* Some things that this system doesn't have */ + +#ifdef _WIN32 +#define NO_DIR_LIBRARY /* Not standard dir-library */ +#endif + +/* Some defines of functions for portability */ + +#undef remove /* Crashes MySQL on SCO 5.0.0 */ +#ifndef __WIN__ +#define closesocket(A) close(A) +#endif + +#if (_MSC_VER) +#if !defined(_WIN64) +inline double my_ulonglong2double(unsigned long long value) +{ + long long nr=(long long) value; + if (nr >= 0) + return (double) nr; + return (18446744073709551616.0 + (double) nr); +} +#define ulonglong2double my_ulonglong2double +#define my_off_t2double my_ulonglong2double +#endif /* _WIN64 */ +inline unsigned long long my_double2ulonglong(double d) +{ + double t= d - (double) 0x8000000000000000ULL; + + if (t >= 0) + return ((unsigned long long) t) + 0x8000000000000000ULL; + return (unsigned long long) d; +} +#define double2ulonglong my_double2ulonglong +#endif + +#ifndef ulonglong2double +#define ulonglong2double(A) ((double) (ulonglong) (A)) +#define my_off_t2double(A) ((double) (my_off_t) (A)) +#endif +#ifndef double2ulonglong +#define double2ulonglong(A) ((ulonglong) (double) (A)) +#endif + +#ifndef offsetof +#define offsetof(TYPE, MEMBER) ((size_t) &((TYPE *)0)->MEMBER) +#endif +#define ulong_to_double(X) ((double) (ulong) (X)) + +#ifndef STACK_DIRECTION +#error "please add -DSTACK_DIRECTION=1 or -1 to your CPPFLAGS" +#endif + +#if !defined(HAVE_STRTOK_R) +#define strtok_r(A,B,C) strtok((A),(B)) +#endif + +#if SIZEOF_LONG_LONG >= 8 +#define HAVE_LONG_LONG 1 +#else +#error WHAT? sizeof(long long) < 8 ??? +#endif + +/* + Some pre-ANSI-C99 systems like AIX 5.1 and Linux/GCC 2.95 define + ULONGLONG_MAX, LONGLONG_MIN, LONGLONG_MAX; we use them if they're defined. +*/ + +#if defined(HAVE_LONG_LONG) && !defined(LONGLONG_MIN) +#define LONGLONG_MIN ((long long) 0x8000000000000000LL) +#define LONGLONG_MAX ((long long) 0x7FFFFFFFFFFFFFFFLL) +#endif + +#if defined(HAVE_LONG_LONG) && !defined(ULONGLONG_MAX) +/* First check for ANSI C99 definition: */ +#ifdef ULLONG_MAX +#define ULONGLONG_MAX ULLONG_MAX +#else +#define ULONGLONG_MAX ((unsigned long long)(~0ULL)) +#endif +#endif /* defined (HAVE_LONG_LONG) && !defined(ULONGLONG_MAX)*/ + +#define INT_MIN64 (~0x7FFFFFFFFFFFFFFFLL) +#define INT_MAX64 0x7FFFFFFFFFFFFFFFLL +#define INT_MIN32 (~0x7FFFFFFFL) +#define INT_MAX32 0x7FFFFFFFL +#define UINT_MAX32 0xFFFFFFFFL +#define INT_MIN24 (~0x007FFFFF) +#define INT_MAX24 0x007FFFFF +#define UINT_MAX24 0x00FFFFFF +#define INT_MIN16 (~0x7FFF) +#define INT_MAX16 0x7FFF +#define UINT_MAX16 0xFFFF +#define INT_MIN8 (~0x7F) +#define INT_MAX8 0x7F +#define UINT_MAX8 0xFF + +/* From limits.h instead */ +#ifndef DBL_MIN +#define DBL_MIN 4.94065645841246544e-324 +#define FLT_MIN ((float)1.40129846432481707e-45) +#endif +#ifndef DBL_MAX +#define DBL_MAX 1.79769313486231470e+308 +#define FLT_MAX ((float)3.40282346638528860e+38) +#endif +#ifndef SIZE_T_MAX +#define SIZE_T_MAX (~((size_t) 0)) +#endif + +#ifndef isfinite +#ifdef HAVE_FINITE +#define isfinite(x) finite(x) +#else +#define finite(x) (1.0 / fabs(x) > 0.0) +#endif /* HAVE_FINITE */ +#elif (__cplusplus >= 201103L) +#include +static inline bool isfinite(double x) { return std::isfinite(x); } +#endif /* isfinite */ + +#ifndef HAVE_ISNAN +#define isnan(x) ((x) != (x)) +#endif + +#ifdef HAVE_ISINF +#define my_isinf(X) isinf(X) +#else /* !HAVE_ISINF */ +#define my_isinf(X) (!finite(X) && !isnan(X)) +#endif + +/* Define missing math constants. */ +#ifndef M_PI +#define M_PI 3.14159265358979323846 +#endif +#ifndef M_E +#define M_E 2.7182818284590452354 +#endif +#ifndef M_LN2 +#define M_LN2 0.69314718055994530942 +#endif + +#ifndef HAVE_LOG2 +/* + This will be slightly slower and perhaps a tiny bit less accurate than + doing it the IEEE754 way but log2() should be available on C99 systems. +*/ +static inline double log2(double x) +{ + return (log(x) / M_LN2); +} +#endif + +/* + Max size that must be added to a so that we know Size to make + adressable obj. +*/ +#if SIZEOF_CHARP == 4 +typedef long my_ptrdiff_t; +#else +typedef long long my_ptrdiff_t; +#endif + +#define MY_ALIGN(A,L) (((A) + (L) - 1) & ~((L) - 1)) +#define MY_ALIGN_DOWN(A,L) ((A) & ~((L) - 1)) +#define ALIGN_SIZE(A) MY_ALIGN((A),sizeof(double)) +#define ALIGN_MAX_UNIT (sizeof(double)) +/* Size to make adressable obj. */ +#define ALIGN_PTR(A, t) ((t*) MY_ALIGN((A), sizeof(double))) +#define ADD_TO_PTR(ptr,size,type) (type) ((uchar*) (ptr)+size) +#define PTR_BYTE_DIFF(A,B) (my_ptrdiff_t) ((uchar*) (A) - (uchar*) (B)) +#define PREV_BITS(type,A) ((type) (((type) 1 << (A)) -1)) + +/* + Custom version of standard offsetof() macro which can be used to get + offsets of members in class for non-POD types (according to the current + version of C++ standard offsetof() macro can't be used in such cases and + attempt to do so causes warnings to be emitted, OTOH in many cases it is + still OK to assume that all instances of the class has the same offsets + for the same members). + + This is temporary solution which should be removed once File_parser class + and related routines are refactored. +*/ + +#define my_offsetof(TYPE, MEMBER) PTR_BYTE_DIFF(&((TYPE *)0x10)->MEMBER, 0x10) + +#define NullS (char *) 0 + +#ifdef STDCALL +#undef STDCALL +#endif + +#ifdef _WIN32 +#define STDCALL __stdcall +#else +#define STDCALL +#endif + +/* Typdefs for easyier portability */ + +#ifndef HAVE_UCHAR +typedef unsigned char uchar; /* Short for unsigned char */ +#endif + +#ifndef HAVE_INT8 +typedef signed char int8; /* Signed integer >= 8 bits */ +#endif +#ifndef HAVE_UINT8 +typedef unsigned char uint8; /* Unsigned integer >= 8 bits */ +#endif +#ifndef HAVE_INT16 +typedef short int16; +#endif +#ifndef HAVE_UINT16 +typedef unsigned short uint16; +#endif +#if SIZEOF_INT == 4 +#ifndef HAVE_INT32 +typedef int int32; +#endif +#ifndef HAVE_UINT32 +typedef unsigned int uint32; +#endif +#elif SIZEOF_LONG == 4 +#ifndef HAVE_INT32 +typedef long int32; +#endif +#ifndef HAVE_UINT32 +typedef unsigned long uint32; +#endif +#else +#error Neither int or long is of 4 bytes width +#endif + +#if !defined(HAVE_ULONG) && !defined(__USE_MISC) +typedef unsigned long ulong; /* Short for unsigned long */ +#endif +#ifndef longlong_defined +/* + Using [unsigned] long long is preferable as [u]longlong because we use + [unsigned] long long unconditionally in many places, + for example in constants with [U]LL suffix. +*/ +#if defined(HAVE_LONG_LONG) && SIZEOF_LONG_LONG == 8 +typedef unsigned long long int ulonglong; /* ulong or unsigned long long */ +typedef long long int longlong; +#else +typedef unsigned long ulonglong; /* ulong or unsigned long long */ +typedef long longlong; +#endif +#endif +#ifndef HAVE_INT64 +typedef longlong int64; +#endif +#ifndef HAVE_UINT64 +typedef ulonglong uint64; +#endif + +#if defined(NO_CLIENT_LONG_LONG) +typedef unsigned long my_ulonglong; +#elif defined (__WIN__) +typedef unsigned __int64 my_ulonglong; +#else +typedef unsigned long long my_ulonglong; +#endif + +#if SIZEOF_CHARP == SIZEOF_INT +typedef unsigned int intptr; +#elif SIZEOF_CHARP == SIZEOF_LONG +typedef unsigned long intptr; +#elif SIZEOF_CHARP == SIZEOF_LONG_LONG +typedef unsigned long long intptr; +#else +#error sizeof(void *) is neither sizeof(int) nor sizeof(long) nor sizeof(long long) +#endif + +#define MY_ERRPTR ((void*)(intptr)1) + +#if defined(_WIN32) +typedef unsigned long long my_off_t; +typedef unsigned long long os_off_t; +#else +typedef off_t os_off_t; +#if SIZEOF_OFF_T > 4 +typedef ulonglong my_off_t; +#else +typedef unsigned long my_off_t; +#endif +#endif /*_WIN32*/ +#define MY_FILEPOS_ERROR (~(my_off_t) 0) + +/* + TODO Convert these to use Bitmap class. + */ +typedef ulonglong table_map; /* Used for table bits in join */ +typedef ulong nesting_map; /* Used for flags of nesting constructs */ + +/* often used type names - opaque declarations */ +typedef const struct charset_info_st CHARSET_INFO; +typedef struct st_mysql_lex_string LEX_STRING; + +#if defined(__WIN__) +#define socket_errno WSAGetLastError() +#define SOCKET_EINTR WSAEINTR +#define SOCKET_EAGAIN WSAEINPROGRESS +#define SOCKET_ETIMEDOUT WSAETIMEDOUT +#define SOCKET_EWOULDBLOCK WSAEWOULDBLOCK +#define SOCKET_EADDRINUSE WSAEADDRINUSE +#define SOCKET_ECONNRESET WSAECONNRESET +#define SOCKET_ENFILE ENFILE +#define SOCKET_EMFILE EMFILE +#else /* Unix */ +#define socket_errno errno +#define closesocket(A) close(A) +#define SOCKET_EINTR EINTR +#define SOCKET_EAGAIN EAGAIN +#define SOCKET_EWOULDBLOCK EWOULDBLOCK +#define SOCKET_EADDRINUSE EADDRINUSE +#define SOCKET_ETIMEDOUT ETIMEDOUT +#define SOCKET_ECONNRESET ECONNRESET +#define SOCKET_ENFILE ENFILE +#define SOCKET_EMFILE EMFILE +#endif + +#include /* my_bool */ + +typedef ulong myf; /* Type of MyFlags in my_funcs */ + +#define MYF(v) (myf) (v) + +/* + Defines to make it possible to prioritize register assignments. No + longer that important with modern compilers. +*/ +#ifndef USING_X +#define reg1 register +#define reg2 register +#define reg3 register +#define reg4 register +#define reg5 register +#define reg6 register +#define reg7 register +#define reg8 register +#define reg9 register +#define reg10 register +#define reg11 register +#define reg12 register +#define reg13 register +#define reg14 register +#define reg15 register +#define reg16 register +#endif + +#include + +/* Some helper macros */ +#define YESNO(X) ((X) ? "yes" : "no") + +#define MY_HOW_OFTEN_TO_ALARM 2 /* How often we want info on screen */ +#define MY_HOW_OFTEN_TO_WRITE 10000 /* How often we want info on screen */ + +#include + +#ifdef HAVE_CHARSET_utf8 +#define MYSQL_UNIVERSAL_CLIENT_CHARSET "utf8" +#else +#define MYSQL_UNIVERSAL_CLIENT_CHARSET MYSQL_DEFAULT_CHARSET_NAME +#endif + +#if defined(EMBEDDED_LIBRARY) && !defined(HAVE_EMBEDDED_PRIVILEGE_CONTROL) +#define NO_EMBEDDED_ACCESS_CHECKS +#endif + +#ifdef _WIN32 +#define dlsym(lib, name) (void*)GetProcAddress((HMODULE)lib, name) +#define dlopen(libname, unused) LoadLibraryEx(libname, NULL, 0) +#define dlclose(lib) FreeLibrary((HMODULE)lib) +static inline char *dlerror(void) +{ + static char win_errormsg[2048]; + if(FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM, + 0, GetLastError(), 0, win_errormsg, 2048, NULL)) + return win_errormsg; + return ""; +} +#define HAVE_DLOPEN 1 +#define HAVE_DLERROR 1 +#endif + +#ifdef HAVE_DLFCN_H +#include +#endif + +#ifdef HAVE_DLOPEN +#ifndef HAVE_DLERROR +#define dlerror() "" +#endif +#else +#define dlerror() "No support for dynamic loading (static build?)" +#define dlopen(A,B) 0 +#define dlsym(A,B) 0 +#define dlclose(A) 0 +#endif + +/* + * Include standard definitions of operator new and delete. + */ +#ifdef __cplusplus +#include +#endif + +/* Length of decimal number represented by INT32. */ +#define MY_INT32_NUM_DECIMAL_DIGITS 11 + +/* Length of decimal number represented by INT64. */ +#define MY_INT64_NUM_DECIMAL_DIGITS 21 + +#ifdef __cplusplus +#include /* should be included before min/max macros */ +#endif + +/* Define some useful general macros (should be done after all headers). */ +#define MY_MAX(a, b) ((a) > (b) ? (a) : (b)) +#define MY_MIN(a, b) ((a) < (b) ? (a) : (b)) + +#define CMP_NUM(a,b) (((a) < (b)) ? -1 : ((a) == (b)) ? 0 : 1) + +/* + Only Linux is known to need an explicit sync of the directory to make sure a + file creation/deletion/renaming in(from,to) this directory durable. +*/ +#ifdef TARGET_OS_LINUX +#define NEED_EXPLICIT_SYNC_DIR 1 +#else +/* + On linux default rwlock scheduling policy is good enough for + waiting_threads.c, on other systems use our special implementation + (which is slower). + + QQ perhaps this should be tested in configure ? how ? +*/ +#define WT_RWLOCKS_USE_MUTEXES 1 +#endif + +#if !defined(__cplusplus) && !defined(bool) +#define bool In_C_you_should_use_my_bool_instead() +#endif + +/* Provide __func__ macro definition for platforms that miss it. */ +#if !defined (__func__) +#if __STDC_VERSION__ < 199901L +# if __GNUC__ >= 2 +# define __func__ __FUNCTION__ +# else +# define __func__ "" +# endif +#elif defined(_MSC_VER) +# if _MSC_VER < 1300 +# define __func__ "" +# else +# define __func__ __FUNCTION__ +# endif +#elif defined(__BORLANDC__) +# define __func__ __FUNC__ +#else +# define __func__ "" +#endif +#endif /* !defined(__func__) */ + +#ifndef HAVE_RINT +/** + All integers up to this number can be represented exactly as double precision + values (DBL_MANT_DIG == 53 for IEEE 754 hardware). +*/ +#define MAX_EXACT_INTEGER ((1LL << DBL_MANT_DIG) - 1) + +/** + rint(3) implementation for platforms that do not have it. + Always rounds to the nearest integer with ties being rounded to the nearest + even integer to mimic glibc's rint() behavior in the "round-to-nearest" + FPU mode. Hardware-specific optimizations are possible (frndint on x86). + Unlike this implementation, hardware will also honor the FPU rounding mode. +*/ + +static inline double rint(double x) +{ + double f, i; + f = modf(x, &i); + /* + All doubles with absolute values > MAX_EXACT_INTEGER are even anyway, + no need to check it. + */ + if (x > 0.0) + i += (double) ((f > 0.5) || (f == 0.5 && + i <= (double) MAX_EXACT_INTEGER && + (longlong) i % 2)); + else + i -= (double) ((f < -0.5) || (f == -0.5 && + i >= (double) -MAX_EXACT_INTEGER && + (longlong) i % 2)); + return i; +} +#endif /* HAVE_RINT */ + +/* + MYSQL_PLUGIN_IMPORT macro is used to export mysqld data + (i.e variables) for usage in storage engine loadable plugins. + Outside of Windows, it is dummy. +*/ +#ifndef MYSQL_PLUGIN_IMPORT +#if (defined(_WIN32) && defined(MYSQL_DYNAMIC_PLUGIN)) +#define MYSQL_PLUGIN_IMPORT __declspec(dllimport) +#else +#define MYSQL_PLUGIN_IMPORT +#endif +#endif + +/* Defines that are unique to the embedded version of MySQL */ + +#ifdef EMBEDDED_LIBRARY + +/* Things we don't need in the embedded version of MySQL */ +/* TODO HF add #undef HAVE_VIO if we don't want client in embedded library */ + +#undef HAVE_SMEM /* No shared memory */ + +#else +#define HAVE_REPLICATION +#define HAVE_EXTERNAL_CLIENT +#endif /* EMBEDDED_LIBRARY */ + +/* Workaround for _LARGE_FILES and _LARGE_FILE_API incompatibility on AIX */ +#if defined(_AIX) && defined(_LARGE_FILE_API) +#undef _LARGE_FILE_API +#undef __GNUG__ +#endif + +#endif /* my_global_h */ diff --git a/EQ2/source/depends/mariadb-10.1.19/include/my_handler_errors.h b/EQ2/source/depends/mariadb-10.1.19/include/my_handler_errors.h new file mode 100644 index 000000000..5af6a3593 --- /dev/null +++ b/EQ2/source/depends/mariadb-10.1.19/include/my_handler_errors.h @@ -0,0 +1,101 @@ +#ifndef MYSYS_MY_HANDLER_ERRORS_INCLUDED +#define MYSYS_MY_HANDLER_ERRORS_INCLUDED + +/* Copyright (c) 2008, 2013, Oracle and/or its affiliates. + Copyright (c) 2011, 2013, SkySQL Ab. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; version 2 of the License. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software Foundation, + Inc., 51 Franklin Street, Suite 500, Boston, MA 02110-1335 USA */ + +/* + Errors a handler can give you +*/ + +static const char *handler_error_messages[]= +{ + "Didn't find key on read or update", + "Duplicate key on write or update", + "Internal (unspecified) error in handler", + "Someone has changed the row since it was read (while the table was locked to prevent it)", + "Wrong index given to function", + "Undefined handler error 125", + "Index file is crashed", + "Record file is crashed", + "Out of memory in engine", + "Undefined handler error 129", + "Incorrect file format", + "Command not supported by database", + "Old database file", + "No record read before update", + "Record was already deleted (or record file crashed)", + "No more room in record file", + "No more room in index file", + "No more records (read after end of file)", + "Unsupported extension used for table", + "Too big row", + "Wrong create options", + "Duplicate unique key or constraint on write or update", + "Unknown character set used in table", + "Conflicting table definitions in sub-tables of MERGE table", + "Table is crashed and last repair failed", + "Table was marked as crashed and should be repaired", + "Lock timed out; Retry transaction", + "Lock table is full; Restart program with a larger lock table", + "Updates are not allowed under a read only transactions", + "Lock deadlock; Retry transaction", + "Foreign key constraint is incorrectly formed", + "Cannot add a child row", + "Cannot delete a parent row", + "No savepoint with that name", + "Non unique key block size", + "The table does not exist in engine", + "The table already existed in storage engine", + "Could not connect to storage engine", + "Unexpected null pointer found when using spatial index", + "The table changed in storage engine", + "There's no partition in table for the given value", + "Row-based binary logging of row failed", + "Index needed in foreign key constraint", + "Upholding foreign key constraints would lead to a duplicate key error in some other table", + "Table needs to be upgraded before it can be used", + "Table is read only", + "Failed to get next auto increment value", + "Failed to set row auto increment value", + "Unknown (generic) error from engine", + "Record was not update. Original values was same as new values", + "It is not possible to log this statement", + "The event was corrupt, leading to illegal data being read", + "The table is of a new format not supported by this version", + "The event could not be processed. No other handler error happened", + "Got a fatal error during initialization of handler", + "File too short; Expected more data in file", + "Read page with wrong checksum", + "Too many active concurrent transactions", + "Record not matching the given partition set", + "Index column length exceeds limit", + "Index corrupted", + "Undo record too big", + "Invalid InnoDB FTS Doc ID", + "Table is being used in foreign key check", + "Tablespace already exists", + "Too many columns", + "Row in wrong partition", + "Row is not visible by the current transaction", + "Operation was interrupted by end user (probably kill command?)", + "Disk full", + "Incompatible key or row definition between the MariaDB .frm file and the information in the storage engine. You have to dump and restore the table to fix this", + "Too many words in a FTS phrase or proximity search", + "Table encrypted but decryption failed. This could be because correct encryption management plugin is not loaded, used encryption key is not available or encryption method does not match." +}; + +#endif /* MYSYS_MY_HANDLER_ERRORS_INCLUDED */ diff --git a/EQ2/source/depends/mariadb-10.1.19/include/my_libwrap.h b/EQ2/source/depends/mariadb-10.1.19/include/my_libwrap.h new file mode 100644 index 000000000..9a0176114 --- /dev/null +++ b/EQ2/source/depends/mariadb-10.1.19/include/my_libwrap.h @@ -0,0 +1,32 @@ +#ifndef MY_LIBWRAP_INCLUDED +#define MY_LIBWRAP_INCLUDED + +/* Copyright (c) 2000, 2006 MySQL AB, 2009 Sun Microsystems, Inc. + Use is subject to license terms. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; version 2 of the License. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ + +#ifdef HAVE_LIBWRAP +#include +#include +#ifdef NEED_SYS_SYSLOG_H +#include +#endif /* NEED_SYS_SYSLOG_H */ + +extern void my_fromhost(struct request_info *req); +extern int my_hosts_access(struct request_info *req); +extern char *my_eval_client(struct request_info *req); + +#endif /* HAVE_LIBWRAP */ +#endif /* MY_LIBWRAP_INCLUDED */ diff --git a/EQ2/source/depends/mariadb-10.1.19/include/my_list.h b/EQ2/source/depends/mariadb-10.1.19/include/my_list.h new file mode 100644 index 000000000..294be663d --- /dev/null +++ b/EQ2/source/depends/mariadb-10.1.19/include/my_list.h @@ -0,0 +1,45 @@ +/* Copyright (c) 2000, 2010, Oracle and/or its affiliates. All rights reserved. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; version 2 of the License. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ + +#ifndef _list_h_ +#define _list_h_ + +#ifdef __cplusplus +extern "C" { +#endif + +typedef struct st_list { + struct st_list *prev,*next; + void *data; +} LIST; + +typedef int (*list_walk_action)(void *,void *); + +extern LIST *list_add(LIST *root,LIST *element); +extern LIST *list_delete(LIST *root,LIST *element); +extern LIST *list_cons(void *data,LIST *root); +extern LIST *list_reverse(LIST *root); +extern void list_free(LIST *root,unsigned int free_data); +extern unsigned int list_length(LIST *); +extern int list_walk(LIST *,list_walk_action action,unsigned char * argument); + +#define list_rest(a) ((a)->next) +#define list_push(a,b) (a)=list_cons((b),(a)) +#define list_pop(A) {LIST *old=(A); (A)=list_delete(old,old); my_free(old); } + +#ifdef __cplusplus +} +#endif +#endif diff --git a/EQ2/source/depends/mariadb-10.1.19/include/my_md5.h b/EQ2/source/depends/mariadb-10.1.19/include/my_md5.h new file mode 100644 index 000000000..141ea309c --- /dev/null +++ b/EQ2/source/depends/mariadb-10.1.19/include/my_md5.h @@ -0,0 +1,52 @@ +#ifndef MY_MD5_INCLUDED +#define MY_MD5_INCLUDED + +/* Copyright (c) 2000, 2012, Oracle and/or its affiliates. + Copyright (c) 2013 Monty Program Ab + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; version 2 of the License. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA */ + +#include "m_string.h" + +#define MD5_HASH_SIZE 16 /* Hash size in bytes */ + +/* + Wrapper function for MD5 implementation. +*/ +#ifdef __cplusplus +extern "C" { +#endif + +#define compute_md5_hash(A,B,C) my_md5(A,B,C) + +/* + Convert an array of bytes to a hexadecimal representation. + + Used to generate a hexadecimal representation of a message digest. +*/ +static inline void array_to_hex(char *to, const unsigned char *str, uint len) +{ + const unsigned char *str_end= str + len; + for (; str != str_end; ++str) + { + *to++= _dig_vec_lower[((uchar) *str) >> 4]; + *to++= _dig_vec_lower[((uchar) *str) & 0x0F]; + } +} + +#ifdef __cplusplus +} +#endif + +#endif /* MY_MD5_INCLUDED */ diff --git a/EQ2/source/depends/mariadb-10.1.19/include/my_net.h b/EQ2/source/depends/mariadb-10.1.19/include/my_net.h new file mode 100644 index 000000000..91d780a27 --- /dev/null +++ b/EQ2/source/depends/mariadb-10.1.19/include/my_net.h @@ -0,0 +1,82 @@ +/* Copyright (c) 2000, 2010, Oracle and/or its affiliates. All rights reserved. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; version 2 of the License. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA */ + +/* + This file is also used to make handling of sockets and ioctl() + portable accross systems. + +*/ + +#ifndef _my_net_h +#define _my_net_h + +#include "my_global.h" /* C_MODE_START, C_MODE_END */ + +C_MODE_START + +#include +#ifdef HAVE_SYS_SOCKET_H +#include +#endif +#ifdef HAVE_NETINET_IN_H +#include +#endif +#ifdef HAVE_ARPA_INET_H +#include +#endif +#if defined(HAVE_POLL_H) +#include +#elif defined(HAVE_SYS_POLL_H) +#include +#endif /* defined(HAVE_POLL_H) */ +#ifdef HAVE_SYS_IOCTL_H +#include +#endif + +#if !defined(__WIN__) +#include +#include +#include +#if !defined(alpha_linux_port) +#include +#endif +#endif + +#if defined(__WIN__) +#define O_NONBLOCK 1 /* For emulation of fcntl() */ + +/* + SHUT_RDWR is called SD_BOTH in windows and + is defined to 2 in winsock2.h + #define SD_BOTH 0x02 +*/ +#define SHUT_RDWR 0x02 +#else +#include /* getaddrinfo() & co */ +#endif + +/* + On OSes which don't have the in_addr_t, we guess that using uint32 + is the best possible choice. We guess this from the fact that on + HP-UX64bit & FreeBSD64bit & Solaris64bit, in_addr_t is equivalent to + uint32. And on Linux32bit too. +*/ +#ifndef HAVE_IN_ADDR_T +#define in_addr_t uint32 +#endif + + +C_MODE_END +#endif diff --git a/EQ2/source/depends/mariadb-10.1.19/include/my_nosys.h b/EQ2/source/depends/mariadb-10.1.19/include/my_nosys.h new file mode 100644 index 000000000..97f36d00c --- /dev/null +++ b/EQ2/source/depends/mariadb-10.1.19/include/my_nosys.h @@ -0,0 +1,47 @@ +/* Copyright (c) 2000, 2010, Oracle and/or its affiliates. All rights reserved. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; version 2 of the License. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ + +/* + Header to remove use of my_functions in functions where we need speed and + where calls to posix functions should work +*/ +#ifndef _my_nosys_h +#define _my_nosys_h +#ifdef __cplusplus +extern "C" { +#endif + +#ifndef __MY_NOSYS__ +#define __MY_NOSYS__ + +#ifndef HAVE_STDLIB_H +#include +#endif + +#undef my_read +#undef my_write +#undef my_seek +#define my_read(a,b,c,d) my_quick_read(a,b,c,d) +#define my_write(a,b,c,d) my_quick_write(a,b,c) +extern size_t my_quick_read(File Filedes,uchar *Buffer,size_t Count, + myf myFlags); +extern size_t my_quick_write(File Filedes,const uchar *Buffer,size_t Count); + +#endif /* __MY_NOSYS__ */ + +#ifdef __cplusplus +} +#endif +#endif diff --git a/EQ2/source/depends/mariadb-10.1.19/include/my_pthread.h b/EQ2/source/depends/mariadb-10.1.19/include/my_pthread.h new file mode 100644 index 000000000..37576ac3c --- /dev/null +++ b/EQ2/source/depends/mariadb-10.1.19/include/my_pthread.h @@ -0,0 +1,851 @@ +/* Copyright (c) 2000, 2014, Oracle and/or its affiliates. + Copyright (c) 2009, 2014, MariaDB + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; version 2 of the License. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA */ + +/* Defines to make different thread packages compatible */ + +#ifndef _my_pthread_h +#define _my_pthread_h + +#include "my_global.h" /* myf */ + +#ifndef ETIME +#define ETIME ETIMEDOUT /* For FreeBSD */ +#endif + +#ifdef __cplusplus +#define EXTERNC extern "C" +extern "C" { +#else +#define EXTERNC +#endif /* __cplusplus */ + +#if defined(__WIN__) +typedef CRITICAL_SECTION pthread_mutex_t; +typedef DWORD pthread_t; +typedef struct thread_attr { + DWORD dwStackSize ; + DWORD dwCreatingFlag ; +} pthread_attr_t ; + +typedef struct { int dummy; } pthread_condattr_t; + +/* Implementation of posix conditions */ + +typedef struct st_pthread_link { + DWORD thread_id; + struct st_pthread_link *next; +} pthread_link; + +/** + Implementation of Windows condition variables. + We use native conditions on Vista and later, and fallback to own + implementation on earlier OS version. +*/ +typedef union +{ + /* Native condition (used on Vista and later) */ + CONDITION_VARIABLE native_cond; + + /* Own implementation (used on XP) */ + struct + { + uint32 waiting; + CRITICAL_SECTION lock_waiting; + enum + { + SIGNAL= 0, + BROADCAST= 1, + MAX_EVENTS= 2 + } EVENTS; + HANDLE events[MAX_EVENTS]; + HANDLE broadcast_block_event; + }; +} pthread_cond_t; + + +typedef int pthread_mutexattr_t; +#define pthread_self() GetCurrentThreadId() +#define pthread_handler_t EXTERNC void * __cdecl +typedef void * (__cdecl *pthread_handler)(void *); + +typedef volatile LONG my_pthread_once_t; +#define MY_PTHREAD_ONCE_INIT 0 +#define MY_PTHREAD_ONCE_INPROGRESS 1 +#define MY_PTHREAD_ONCE_DONE 2 + +#if !STRUCT_TIMESPEC_HAS_TV_SEC || !STRUCT_TIMESPEC_HAS_TV_NSEC +struct timespec { + time_t tv_sec; + long tv_nsec; +}; +#endif + +int win_pthread_mutex_trylock(pthread_mutex_t *mutex); +int pthread_create(pthread_t *, const pthread_attr_t *, pthread_handler, void *); +int pthread_cond_init(pthread_cond_t *cond, const pthread_condattr_t *attr); +int pthread_cond_wait(pthread_cond_t *cond, pthread_mutex_t *mutex); +int pthread_cond_timedwait(pthread_cond_t *cond, pthread_mutex_t *mutex, + const struct timespec *abstime); +int pthread_cond_signal(pthread_cond_t *cond); +int pthread_cond_broadcast(pthread_cond_t *cond); +int pthread_cond_destroy(pthread_cond_t *cond); +int pthread_attr_init(pthread_attr_t *connect_att); +int pthread_attr_setstacksize(pthread_attr_t *connect_att,DWORD stack); +int pthread_attr_destroy(pthread_attr_t *connect_att); +int my_pthread_once(my_pthread_once_t *once_control,void (*init_routine)(void)); + +static inline struct tm *localtime_r(const time_t *timep, struct tm *tmp) +{ + localtime_s(tmp, timep); + return tmp; +} + +static inline struct tm *gmtime_r(const time_t *clock, struct tm *res) +{ + gmtime_s(res, clock); + return res; +} + +void pthread_exit(void *a); +int pthread_join(pthread_t thread, void **value_ptr); +int pthread_cancel(pthread_t thread); + +#ifndef ETIMEDOUT +#define ETIMEDOUT 145 /* Win32 doesn't have this */ +#endif + +#define getpid() GetCurrentThreadId() +#define HAVE_LOCALTIME_R 1 +#define _REENTRANT 1 +#define HAVE_PTHREAD_ATTR_SETSTACKSIZE 1 + +#undef SAFE_MUTEX /* This will cause conflicts */ +#define pthread_key(T,V) DWORD V +#define pthread_key_create(A,B) ((*A=TlsAlloc())==0xFFFFFFFF) +#define pthread_key_delete(A) TlsFree(A) +#define my_pthread_setspecific_ptr(T,V) (!TlsSetValue((T),(V))) +#define pthread_setspecific(A,B) (!TlsSetValue((A),(B))) +#define pthread_getspecific(A) (TlsGetValue(A)) +#define my_pthread_getspecific(T,A) ((T) TlsGetValue(A)) +#define my_pthread_getspecific_ptr(T,V) ((T) TlsGetValue(V)) + +#define pthread_equal(A,B) ((A) == (B)) +#define pthread_mutex_init(A,B) (InitializeCriticalSection(A),0) +#define pthread_mutex_lock(A) (EnterCriticalSection(A),0) +#define pthread_mutex_trylock(A) win_pthread_mutex_trylock((A)) +#define pthread_mutex_unlock(A) (LeaveCriticalSection(A), 0) +#define pthread_mutex_destroy(A) (DeleteCriticalSection(A), 0) +#define pthread_kill(A,B) pthread_dummy((A) ? 0 : ESRCH) + + +/* Dummy defines for easier code */ +#define pthread_attr_setdetachstate(A,B) pthread_dummy(0) +#define pthread_attr_setscope(A,B) +#define pthread_detach_this_thread() +#define pthread_condattr_init(A) +#define pthread_condattr_destroy(A) +#define pthread_yield() SwitchToThread() +#define my_sigset(A,B) signal(A,B) + +#else /* Normal threads */ + +#ifdef HAVE_rts_threads +#define sigwait org_sigwait +#include +#undef sigwait +#endif +#include +#ifndef _REENTRANT +#define _REENTRANT +#endif +#ifdef HAVE_THR_SETCONCURRENCY +#include /* Probably solaris */ +#endif +#ifdef HAVE_SCHED_H +#include +#endif +#ifdef HAVE_SYNCH_H +#include +#endif + +#define pthread_key(T,V) pthread_key_t V +#define my_pthread_getspecific_ptr(T,V) my_pthread_getspecific(T,(V)) +#define my_pthread_setspecific_ptr(T,V) pthread_setspecific(T,(void*) (V)) +#define pthread_detach_this_thread() { pthread_t tmp=pthread_self() ; pthread_detach(tmp); } +#define pthread_handler_t EXTERNC void * +typedef void *(* pthread_handler)(void *); + +#define my_pthread_once_t pthread_once_t +#if defined(PTHREAD_ONCE_INITIALIZER) +#define MY_PTHREAD_ONCE_INIT PTHREAD_ONCE_INITIALIZER +#else +#define MY_PTHREAD_ONCE_INIT PTHREAD_ONCE_INIT +#endif +#define my_pthread_once(C,F) pthread_once(C,F) + +/* Test first for RTS or FSU threads */ + +#if defined(PTHREAD_SCOPE_GLOBAL) && !defined(PTHREAD_SCOPE_SYSTEM) +#define HAVE_rts_threads +extern int my_pthread_create_detached; +#define pthread_sigmask(A,B,C) sigprocmask((A),(B),(C)) +#define PTHREAD_CREATE_DETACHED &my_pthread_create_detached +#define PTHREAD_SCOPE_SYSTEM PTHREAD_SCOPE_GLOBAL +#define PTHREAD_SCOPE_PROCESS PTHREAD_SCOPE_LOCAL +#define USE_ALARM_THREAD +#endif /* defined(PTHREAD_SCOPE_GLOBAL) && !defined(PTHREAD_SCOPE_SYSTEM) */ + +#if defined(_BSDI_VERSION) && _BSDI_VERSION < 199910 +int sigwait(sigset_t *set, int *sig); +#endif + +#define my_sigwait(A,B) sigwait((A),(B)) + +#if defined(HAVE_SIGTHREADMASK) && !defined(HAVE_PTHREAD_SIGMASK) +#define pthread_sigmask(A,B,C) sigthreadmask((A),(B),(C)) +#endif + +#if !defined(HAVE_SIGWAIT) && !defined(HAVE_rts_threads) && !defined(sigwait) && !defined(alpha_linux_port) && !defined(_AIX) +int sigwait(sigset_t *setp, int *sigp); /* Use our implemention */ +#endif + + +/* + We define my_sigset() and use that instead of the system sigset() so that + we can favor an implementation based on sigaction(). On some systems, such + as Mac OS X, sigset() results in flags such as SA_RESTART being set, and + we want to make sure that no such flags are set. +*/ +#if defined(HAVE_SIGACTION) && !defined(my_sigset) +#define my_sigset(A,B) do { struct sigaction l_s; sigset_t l_set; \ + DBUG_ASSERT((A) != 0); \ + sigemptyset(&l_set); \ + l_s.sa_handler = (B); \ + l_s.sa_mask = l_set; \ + l_s.sa_flags = 0; \ + sigaction((A), &l_s, NULL); \ + } while (0) +#elif defined(HAVE_SIGSET) && !defined(my_sigset) +#define my_sigset(A,B) sigset((A),(B)) +#elif !defined(my_sigset) +#define my_sigset(A,B) signal((A),(B)) +#endif + +#if !defined(HAVE_PTHREAD_ATTR_SETSCOPE) +#define pthread_attr_setscope(A,B) +#undef HAVE_GETHOSTBYADDR_R /* No definition */ +#endif + +#define my_pthread_getspecific(A,B) ((A) pthread_getspecific(B)) + +#ifndef HAVE_LOCALTIME_R +struct tm *localtime_r(const time_t *clock, struct tm *res); +#endif + +#ifndef HAVE_GMTIME_R +struct tm *gmtime_r(const time_t *clock, struct tm *res); +#endif + +#ifdef HAVE_PTHREAD_CONDATTR_CREATE +/* DCE threads on HPUX 10.20 */ +#define pthread_condattr_init pthread_condattr_create +#define pthread_condattr_destroy pthread_condattr_delete +#endif + +/* FSU THREADS */ +#if !defined(HAVE_PTHREAD_KEY_DELETE) && !defined(pthread_key_delete) +#define pthread_key_delete(A) pthread_dummy(0) +#endif + +#if defined(HAVE_PTHREAD_ATTR_CREATE) && !defined(HAVE_SIGWAIT) +/* This is set on AIX_3_2 and Siemens unix (and DEC OSF/1 3.2 too) */ +#define pthread_key_create(A,B) \ + pthread_keycreate(A,(B) ?\ + (pthread_destructor_t) (B) :\ + (pthread_destructor_t) pthread_dummy) +#define pthread_attr_init(A) pthread_attr_create(A) +#define pthread_attr_destroy(A) pthread_attr_delete(A) +#define pthread_attr_setdetachstate(A,B) pthread_dummy(0) +#define pthread_create(A,B,C,D) pthread_create((A),*(B),(C),(D)) +#ifndef pthread_sigmask +#define pthread_sigmask(A,B,C) sigprocmask((A),(B),(C)) +#endif +#define pthread_kill(A,B) pthread_dummy((A) ? 0 : ESRCH) +#undef pthread_detach_this_thread +#define pthread_detach_this_thread() { pthread_t tmp=pthread_self() ; pthread_detach(&tmp); } +#else /* HAVE_PTHREAD_ATTR_CREATE && !HAVE_SIGWAIT */ +#define HAVE_PTHREAD_KILL +#endif + +#endif /* defined(__WIN__) */ + +#if defined(HPUX10) && !defined(DONT_REMAP_PTHREAD_FUNCTIONS) +#undef pthread_cond_timedwait +#define pthread_cond_timedwait(a,b,c) my_pthread_cond_timedwait((a),(b),(c)) +int my_pthread_cond_timedwait(pthread_cond_t *cond, pthread_mutex_t *mutex, + struct timespec *abstime); +#endif + +#if defined(HPUX10) +#define pthread_attr_getstacksize(A,B) my_pthread_attr_getstacksize(A,B) +void my_pthread_attr_getstacksize(pthread_attr_t *attrib, size_t *size); +#endif + +#if defined(HAVE_POSIX1003_4a_MUTEX) && !defined(DONT_REMAP_PTHREAD_FUNCTIONS) +#undef pthread_mutex_trylock +#define pthread_mutex_trylock(a) my_pthread_mutex_trylock((a)) +int my_pthread_mutex_trylock(pthread_mutex_t *mutex); +#endif + +#if !defined(HAVE_PTHREAD_YIELD_ZERO_ARG) +/* no pthread_yield() available */ +#ifdef HAVE_SCHED_YIELD +#define pthread_yield() sched_yield() +#elif defined(HAVE_PTHREAD_YIELD_NP) /* can be Mac OS X */ +#define pthread_yield() pthread_yield_np() +#elif defined(HAVE_THR_YIELD) +#define pthread_yield() thr_yield() +#endif +#endif + +/* + The defines set_timespec and set_timespec_nsec should be used + for calculating an absolute time at which + pthread_cond_timedwait should timeout +*/ +#define set_timespec(ABSTIME,SEC) set_timespec_nsec((ABSTIME),(SEC)*1000000000ULL) + +#ifndef set_timespec_nsec +#define set_timespec_nsec(ABSTIME,NSEC) \ + set_timespec_time_nsec((ABSTIME), my_hrtime().val*1000 + (NSEC)) +#endif /* !set_timespec_nsec */ + +/* adapt for two different flavors of struct timespec */ +#ifdef HAVE_TIMESPEC_TS_SEC +#define MY_tv_sec ts_sec +#define MY_tv_nsec ts_nsec +#else +#define MY_tv_sec tv_sec +#define MY_tv_nsec tv_nsec +#endif /* HAVE_TIMESPEC_TS_SEC */ + +/** + Compare two timespec structs. + + @retval 1 If TS1 ends after TS2. + + @retval 0 If TS1 is equal to TS2. + + @retval -1 If TS1 ends before TS2. +*/ +#ifndef cmp_timespec +#define cmp_timespec(TS1, TS2) \ + ((TS1.MY_tv_sec > TS2.MY_tv_sec || \ + (TS1.MY_tv_sec == TS2.MY_tv_sec && TS1.MY_tv_nsec > TS2.MY_tv_nsec)) ? 1 : \ + ((TS1.MY_tv_sec < TS2.MY_tv_sec || \ + (TS1.MY_tv_sec == TS2.MY_tv_sec && TS1.MY_tv_nsec < TS2.MY_tv_nsec)) ? -1 : 0)) +#endif /* !cmp_timespec */ + +#ifndef set_timespec_time_nsec +#define set_timespec_time_nsec(ABSTIME,NSEC) do { \ + ulonglong _now_= (NSEC); \ + (ABSTIME).MY_tv_sec= (_now_ / 1000000000ULL); \ + (ABSTIME).MY_tv_nsec= (_now_ % 1000000000ULL); \ +} while(0) +#endif /* !set_timespec_time_nsec */ + +/* safe_mutex adds checking to mutex for easier debugging */ +struct st_hash; +typedef struct st_safe_mutex_t +{ + pthread_mutex_t global,mutex; + const char *file, *name; + uint line,count; + myf create_flags, active_flags; + ulong id; + pthread_t thread; + struct st_hash *locked_mutex, *used_mutex; + struct st_safe_mutex_t *prev, *next; +#ifdef SAFE_MUTEX_DETECT_DESTROY + struct st_safe_mutex_info_t *info; /* to track destroying of mutexes */ +#endif +} safe_mutex_t; + +typedef struct st_safe_mutex_deadlock_t +{ + const char *file, *name; + safe_mutex_t *mutex; + uint line; + ulong count; + ulong id; + my_bool warning_only; +} safe_mutex_deadlock_t; + +#ifdef SAFE_MUTEX_DETECT_DESTROY +/* + Used to track the destroying of mutexes. This needs to be a seperate + structure because the safe_mutex_t structure could be freed before + the mutexes are destroyed. +*/ + +typedef struct st_safe_mutex_info_t +{ + struct st_safe_mutex_info_t *next; + struct st_safe_mutex_info_t *prev; + const char *init_file; + uint32 init_line; +} safe_mutex_info_t; +#endif /* SAFE_MUTEX_DETECT_DESTROY */ + +int safe_mutex_init(safe_mutex_t *mp, const pthread_mutexattr_t *attr, + const char *name, const char *file, uint line); +int safe_mutex_lock(safe_mutex_t *mp, myf my_flags, const char *file, + uint line); +int safe_mutex_unlock(safe_mutex_t *mp,const char *file, uint line); +int safe_mutex_destroy(safe_mutex_t *mp,const char *file, uint line); +int safe_cond_wait(pthread_cond_t *cond, safe_mutex_t *mp,const char *file, + uint line); +int safe_cond_timedwait(pthread_cond_t *cond, safe_mutex_t *mp, + const struct timespec *abstime, + const char *file, uint line); +void safe_mutex_global_init(void); +void safe_mutex_end(FILE *file); +void safe_mutex_free_deadlock_data(safe_mutex_t *mp); + + /* Wrappers if safe mutex is actually used */ +#define MYF_TRY_LOCK 1 +#define MYF_NO_DEADLOCK_DETECTION 2 + +#ifdef SAFE_MUTEX +#define safe_mutex_assert_owner(mp) \ + DBUG_ASSERT((mp)->count > 0 && \ + pthread_equal(pthread_self(), (mp)->thread)) +#define safe_mutex_assert_not_owner(mp) \ + DBUG_ASSERT(! (mp)->count || \ + ! pthread_equal(pthread_self(), (mp)->thread)) +#define safe_mutex_setflags(mp, F) do { (mp)->create_flags|= (F); } while (0) +#define my_cond_timedwait(A,B,C) safe_cond_timedwait((A),(B),(C),__FILE__,__LINE__) +#define my_cond_wait(A,B) safe_cond_wait((A), (B), __FILE__, __LINE__) +#else + +#define safe_mutex_assert_owner(mp) do {} while (0) +#define safe_mutex_assert_not_owner(mp) do {} while (0) +#define safe_mutex_setflags(mp, F) do {} while (0) + +#if defined(MY_PTHREAD_FASTMUTEX) +#define my_cond_timedwait(A,B,C) pthread_cond_timedwait((A), &(B)->mutex, (C)) +#define my_cond_wait(A,B) pthread_cond_wait((A), &(B)->mutex) +#else +#define my_cond_timedwait(A,B,C) pthread_cond_timedwait((A),(B),(C)) +#define my_cond_wait(A,B) pthread_cond_wait((A), (B)) +#endif /* MY_PTHREAD_FASTMUTEX */ +#endif /* !SAFE_MUTEX */ + +#if defined(MY_PTHREAD_FASTMUTEX) && !defined(SAFE_MUTEX) +typedef struct st_my_pthread_fastmutex_t +{ + pthread_mutex_t mutex; + uint spins; + uint rng_state; +} my_pthread_fastmutex_t; +void fastmutex_global_init(void); + +int my_pthread_fastmutex_init(my_pthread_fastmutex_t *mp, + const pthread_mutexattr_t *attr); +int my_pthread_fastmutex_lock(my_pthread_fastmutex_t *mp); + +#endif /* defined(MY_PTHREAD_FASTMUTEX) && !defined(SAFE_MUTEX) */ + + /* READ-WRITE thread locking */ + +#if defined(USE_MUTEX_INSTEAD_OF_RW_LOCKS) +/* use these defs for simple mutex locking */ +#define rw_lock_t pthread_mutex_t +#define my_rwlock_init(A,B) pthread_mutex_init((A),(B)) +#define rw_rdlock(A) pthread_mutex_lock((A)) +#define rw_wrlock(A) pthread_mutex_lock((A)) +#define rw_tryrdlock(A) pthread_mutex_trylock((A)) +#define rw_trywrlock(A) pthread_mutex_trylock((A)) +#define rw_unlock(A) pthread_mutex_unlock((A)) +#define rwlock_destroy(A) pthread_mutex_destroy((A)) +#elif defined(HAVE_PTHREAD_RWLOCK_RDLOCK) +#define rw_lock_t pthread_rwlock_t +#define my_rwlock_init(A,B) pthread_rwlock_init((A),(B)) +#define rw_rdlock(A) pthread_rwlock_rdlock(A) +#define rw_wrlock(A) pthread_rwlock_wrlock(A) +#define rw_tryrdlock(A) pthread_rwlock_tryrdlock((A)) +#define rw_trywrlock(A) pthread_rwlock_trywrlock((A)) +#define rw_unlock(A) pthread_rwlock_unlock(A) +#define rwlock_destroy(A) pthread_rwlock_destroy(A) +#elif defined(HAVE_RWLOCK_INIT) +#ifdef HAVE_RWLOCK_T /* For example Solaris 2.6-> */ +#define rw_lock_t rwlock_t +#endif +#define my_rwlock_init(A,B) rwlock_init((A),USYNC_THREAD,0) +#else +/* Use our own version of read/write locks */ +#define NEED_MY_RW_LOCK 1 +#define rw_lock_t my_rw_lock_t +#define my_rwlock_init(A,B) my_rw_init((A)) +#define rw_rdlock(A) my_rw_rdlock((A)) +#define rw_wrlock(A) my_rw_wrlock((A)) +#define rw_tryrdlock(A) my_rw_tryrdlock((A)) +#define rw_trywrlock(A) my_rw_trywrlock((A)) +#define rw_unlock(A) my_rw_unlock((A)) +#define rwlock_destroy(A) my_rw_destroy((A)) +#define rw_lock_assert_write_owner(A) my_rw_lock_assert_write_owner((A)) +#define rw_lock_assert_not_write_owner(A) my_rw_lock_assert_not_write_owner((A)) +#endif /* USE_MUTEX_INSTEAD_OF_RW_LOCKS */ + + +/** + Portable implementation of special type of read-write locks. + + These locks have two properties which are unusual for rwlocks: + 1) They "prefer readers" in the sense that they do not allow + situations in which rwlock is rd-locked and there is a + pending rd-lock which is blocked (e.g. due to pending + request for wr-lock). + This is a stronger guarantee than one which is provided for + PTHREAD_RWLOCK_PREFER_READER_NP rwlocks in Linux. + MDL subsystem deadlock detector relies on this property for + its correctness. + 2) They are optimized for uncontended wr-lock/unlock case. + This is scenario in which they are most oftenly used + within MDL subsystem. Optimizing for it gives significant + performance improvements in some of tests involving many + connections. + + Another important requirement imposed on this type of rwlock + by the MDL subsystem is that it should be OK to destroy rwlock + object which is in unlocked state even though some threads might + have not yet fully left unlock operation for it (of course there + is an external guarantee that no thread will try to lock rwlock + which is destroyed). + Putting it another way the unlock operation should not access + rwlock data after changing its state to unlocked. + + TODO/FIXME: We should consider alleviating this requirement as + it blocks us from doing certain performance optimizations. +*/ + +typedef struct st_rw_pr_lock_t { + /** + Lock which protects the structure. + Also held for the duration of wr-lock. + */ + pthread_mutex_t lock; + /** + Condition variable which is used to wake-up + writers waiting for readers to go away. + */ + pthread_cond_t no_active_readers; + /** Number of active readers. */ + uint active_readers; + /** Number of writers waiting for readers to go away. */ + uint writers_waiting_readers; + /** Indicates whether there is an active writer. */ + my_bool active_writer; +#ifdef SAFE_MUTEX + /** Thread holding wr-lock (for debug purposes only). */ + pthread_t writer_thread; +#endif +} rw_pr_lock_t; + +extern int rw_pr_init(rw_pr_lock_t *); +extern int rw_pr_rdlock(rw_pr_lock_t *); +extern int rw_pr_wrlock(rw_pr_lock_t *); +extern int rw_pr_unlock(rw_pr_lock_t *); +extern int rw_pr_destroy(rw_pr_lock_t *); +#ifdef SAFE_MUTEX +#define rw_pr_lock_assert_write_owner(A) \ + DBUG_ASSERT((A)->active_writer && pthread_equal(pthread_self(), \ + (A)->writer_thread)) +#define rw_pr_lock_assert_not_write_owner(A) \ + DBUG_ASSERT(! (A)->active_writer || ! pthread_equal(pthread_self(), \ + (A)->writer_thread)) +#else +#define rw_pr_lock_assert_write_owner(A) +#define rw_pr_lock_assert_not_write_owner(A) +#endif /* SAFE_MUTEX */ + + +#ifdef NEED_MY_RW_LOCK + +#ifdef _WIN32 + +/** + Implementation of Windows rwlock. + + We use native (slim) rwlocks on Win7 and later, and fallback to portable + implementation on earlier Windows. + + slim rwlock are also available on Vista/WS2008, but we do not use it + ("trylock" APIs are missing on Vista) +*/ +typedef union +{ + /* Native rwlock (is_srwlock == TRUE) */ + struct + { + SRWLOCK srwlock; /* native reader writer lock */ + BOOL have_exclusive_srwlock; /* used for unlock */ + }; + + /* + Portable implementation (is_srwlock == FALSE) + Fields are identical with Unix my_rw_lock_t fields. + */ + struct + { + pthread_mutex_t lock; /* lock for structure */ + pthread_cond_t readers; /* waiting readers */ + pthread_cond_t writers; /* waiting writers */ + int state; /* -1:writer,0:free,>0:readers */ + int waiters; /* number of waiting writers */ +#ifdef SAFE_MUTEX + pthread_t write_thread; +#endif + }; +} my_rw_lock_t; + + +#else /* _WIN32 */ + +/* + On systems which don't support native read/write locks we have + to use own implementation. +*/ +typedef struct st_my_rw_lock_t { + pthread_mutex_t lock; /* lock for structure */ + pthread_cond_t readers; /* waiting readers */ + pthread_cond_t writers; /* waiting writers */ + int state; /* -1:writer,0:free,>0:readers */ + int waiters; /* number of waiting writers */ +#ifdef SAFE_MUTEX + pthread_t write_thread; +#endif +} my_rw_lock_t; + +#endif /*! _WIN32 */ + +extern int my_rw_init(my_rw_lock_t *); +extern int my_rw_destroy(my_rw_lock_t *); +extern int my_rw_rdlock(my_rw_lock_t *); +extern int my_rw_wrlock(my_rw_lock_t *); +extern int my_rw_unlock(my_rw_lock_t *); +extern int my_rw_tryrdlock(my_rw_lock_t *); +extern int my_rw_trywrlock(my_rw_lock_t *); +#ifdef SAFE_MUTEX +#define my_rw_lock_assert_write_owner(A) \ + DBUG_ASSERT((A)->state == -1 && pthread_equal(pthread_self(), \ + (A)->write_thread)) +#define my_rw_lock_assert_not_write_owner(A) \ + DBUG_ASSERT((A)->state >= 0 || ! pthread_equal(pthread_self(), \ + (A)->write_thread)) +#else +#define my_rw_lock_assert_write_owner(A) +#define my_rw_lock_assert_not_write_owner(A) +#endif +#endif /* NEED_MY_RW_LOCK */ + + +#define GETHOSTBYADDR_BUFF_SIZE 2048 + +#ifndef HAVE_THR_SETCONCURRENCY +#define thr_setconcurrency(A) pthread_dummy(0) +#endif +#if !defined(HAVE_PTHREAD_ATTR_SETSTACKSIZE) && ! defined(pthread_attr_setstacksize) +#define pthread_attr_setstacksize(A,B) pthread_dummy(0) +#endif + +/* Define mutex types, see my_thr_init.c */ +#define MY_MUTEX_INIT_SLOW NULL +#ifdef PTHREAD_ADAPTIVE_MUTEX_INITIALIZER_NP +extern pthread_mutexattr_t my_fast_mutexattr; +#define MY_MUTEX_INIT_FAST &my_fast_mutexattr +#else +#define MY_MUTEX_INIT_FAST NULL +#endif +#ifdef PTHREAD_ERRORCHECK_MUTEX_INITIALIZER_NP +extern pthread_mutexattr_t my_errorcheck_mutexattr; +#define MY_MUTEX_INIT_ERRCHK &my_errorcheck_mutexattr +#else +#define MY_MUTEX_INIT_ERRCHK NULL +#endif + +#ifndef ESRCH +/* Define it to something */ +#define ESRCH 1 +#endif + +typedef ulong my_thread_id; + +extern void my_threadattr_global_init(void); +extern my_bool my_thread_global_init(void); +extern void my_thread_global_reinit(void); +extern void my_thread_global_end(void); +extern my_bool my_thread_init(void); +extern void my_thread_end(void); +extern const char *my_thread_name(void); +extern my_thread_id my_thread_dbug_id(void); +extern int pthread_dummy(int); +extern void my_mutex_init(void); +extern void my_mutex_end(void); + +/* All thread specific variables are in the following struct */ + +#define THREAD_NAME_SIZE 10 +#ifndef DEFAULT_THREAD_STACK +/* + We need to have at least 256K stack to handle calls to myisamchk_init() + with the current number of keys and key parts. +*/ +#define DEFAULT_THREAD_STACK (289*1024L) +#endif + +#define MY_PTHREAD_LOCK_READ 0 +#define MY_PTHREAD_LOCK_WRITE 1 + +#include + +#define INSTRUMENT_ME 0 + +struct st_my_thread_var +{ + int thr_errno; + mysql_cond_t suspend; + mysql_mutex_t mutex; + mysql_mutex_t * volatile current_mutex; + mysql_cond_t * volatile current_cond; + pthread_t pthread_self; + my_thread_id id; + int volatile abort; + my_bool init; + struct st_my_thread_var *next,**prev; + void *keycache_link; + uint lock_type; /* used by conditional release the queue */ + void *stack_ends_here; + safe_mutex_t *mutex_in_use; +#ifndef DBUG_OFF + void *dbug; + char name[THREAD_NAME_SIZE+1]; +#endif +}; + +extern struct st_my_thread_var *_my_thread_var(void) __attribute__ ((const)); +extern void **my_thread_var_dbug(void); +extern safe_mutex_t **my_thread_var_mutex_in_use(void); +extern uint my_thread_end_wait_time; +extern my_bool safe_mutex_deadlock_detector; +#define my_thread_var (_my_thread_var()) +#define my_errno my_thread_var->thr_errno +/* + Keep track of shutdown,signal, and main threads so that my_end() will not + report errors with them +*/ + +/* Which kind of thread library is in use */ + +#define THD_LIB_OTHER 1 +#define THD_LIB_NPTL 2 +#define THD_LIB_LT 4 + +extern uint thd_lib_detected; + +/* + thread_safe_xxx functions are for critical statistic or counters. + The implementation is guaranteed to be thread safe, on all platforms. + Note that the calling code should *not* assume the counter is protected + by the mutex given, as the implementation of these helpers may change + to use my_atomic operations instead. +*/ + +#ifndef thread_safe_increment +#ifdef _WIN32 +#define thread_safe_increment(V,L) InterlockedIncrement((long*) &(V)) +#define thread_safe_decrement(V,L) InterlockedDecrement((long*) &(V)) +#else +#define thread_safe_increment(V,L) \ + (mysql_mutex_lock((L)), (V)++, mysql_mutex_unlock((L))) +#define thread_safe_decrement(V,L) \ + (mysql_mutex_lock((L)), (V)--, mysql_mutex_unlock((L))) +#endif +#endif + +#ifndef thread_safe_add +#ifdef _WIN32 +#define thread_safe_add(V,C,L) InterlockedExchangeAdd((long*) &(V),(C)) +#define thread_safe_sub(V,C,L) InterlockedExchangeAdd((long*) &(V),-(long) (C)) +#else +#define thread_safe_add(V,C,L) \ + (mysql_mutex_lock((L)), (V)+=(C), mysql_mutex_unlock((L))) +#define thread_safe_sub(V,C,L) \ + (mysql_mutex_lock((L)), (V)-=(C), mysql_mutex_unlock((L))) +#endif +#endif + + +/* + statistics_xxx functions are for non critical statistic, + maintained in global variables. + When compiling with SAFE_STATISTICS: + - race conditions can not occur. + - some locking occurs, which may cause performance degradation. + + When compiling without SAFE_STATISTICS: + - race conditions can occur, making the result slightly inaccurate. + - the lock given is not honored. +*/ +#ifdef SAFE_STATISTICS +#define statistic_increment(V,L) thread_safe_increment((V),(L)) +#define statistic_decrement(V,L) thread_safe_decrement((V),(L)) +#define statistic_add(V,C,L) thread_safe_add((V),(C),(L)) +#define statistic_sub(V,C,L) thread_safe_sub((V),(C),(L)) +#else +#define statistic_decrement(V,L) (V)-- +#define statistic_increment(V,L) (V)++ +#define statistic_add(V,C,L) (V)+=(C) +#define statistic_sub(V,C,L) (V)-=(C) +#endif /* SAFE_STATISTICS */ + +/* + No locking needed, the counter is owned by the thread +*/ +#define status_var_increment(V) (V)++ +#define status_var_decrement(V) (V)-- +#define status_var_add(V,C) (V)+=(C) +#define status_var_sub(V,C) (V)-=(C) + +#ifdef SAFE_MUTEX +#define mysql_mutex_record_order(A,B) \ + do { \ + mysql_mutex_lock(A); mysql_mutex_lock(B); \ + mysql_mutex_unlock(B); mysql_mutex_unlock(A); \ + } while(0) +#else +#define mysql_mutex_record_order(A,B) do { } while(0) +#endif + +/* At least Windows and NetBSD do not have this definition */ +#ifndef PTHREAD_STACK_MIN +#define PTHREAD_STACK_MIN 65536 +#endif + +#ifdef __cplusplus +} +#endif +#endif /* _my_ptread_h */ diff --git a/EQ2/source/depends/mariadb-10.1.19/include/my_rdtsc.h b/EQ2/source/depends/mariadb-10.1.19/include/my_rdtsc.h new file mode 100644 index 000000000..d24e21167 --- /dev/null +++ b/EQ2/source/depends/mariadb-10.1.19/include/my_rdtsc.h @@ -0,0 +1,131 @@ +/* Copyright (c) 2008 MySQL AB, 2009 Sun Microsystems, Inc. + Use is subject to license terms. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; version 2 of the License. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ + +/* + rdtsc3 -- multi-platform timer code + pgulutzan@mysql.com, 2005-08-29 + modified 2008-11-02 +*/ + +#ifndef MY_RDTSC_H +#define MY_RDTSC_H + +/** + Characteristics of a timer. +*/ +struct my_timer_unit_info +{ + /** Routine used for the timer. */ + ulonglong routine; + /** Overhead of the timer. */ + ulonglong overhead; + /** Frequency of the timer. */ + ulonglong frequency; + /** Resolution of the timer. */ + ulonglong resolution; +}; + +/** + Characteristics of all the supported timers. + @sa my_timer_init(). +*/ +struct my_timer_info +{ + /** Characteristics of the cycle timer. */ + struct my_timer_unit_info cycles; + /** Characteristics of the nanosecond timer. */ + struct my_timer_unit_info nanoseconds; + /** Characteristics of the microsecond timer. */ + struct my_timer_unit_info microseconds; + /** Characteristics of the millisecond timer. */ + struct my_timer_unit_info milliseconds; + /** Characteristics of the tick timer. */ + struct my_timer_unit_info ticks; +}; + +typedef struct my_timer_info MY_TIMER_INFO; + +C_MODE_START + +/** + A cycle timer. + @return the current timer value, in cycles. +*/ +ulonglong my_timer_cycles(void); + +/** + A namoseconds timer. + @return the current timer value, in nanoseconds. +*/ +ulonglong my_timer_nanoseconds(void); + +/** + A microseconds timer. + @return the current timer value, in microseconds. +*/ +ulonglong my_timer_microseconds(void); + +/** + A millisecond timer. + @return the current timer value, in milliseconds. +*/ +ulonglong my_timer_milliseconds(void); + +/** + A ticks timer. + @return the current timer value, in ticks. +*/ +ulonglong my_timer_ticks(void); + +/** + Timer initialization function. + @param [out] mti the timer characteristics. +*/ +void my_timer_init(MY_TIMER_INFO *mti); + +C_MODE_END + +#define MY_TIMER_ROUTINE_ASM_X86 1 +#define MY_TIMER_ROUTINE_ASM_X86_64 2 +#define MY_TIMER_ROUTINE_RDTSCLL 3 +#define MY_TIMER_ROUTINE_ASM_X86_WIN 4 +#define MY_TIMER_ROUTINE_RDTSC 5 +#define MY_TIMER_ROUTINE_ASM_IA64 6 +#define MY_TIMER_ROUTINE_ASM_PPC 7 +#define MY_TIMER_ROUTINE_SGI_CYCLE 8 +#define MY_TIMER_ROUTINE_GETHRTIME 9 +#define MY_TIMER_ROUTINE_READ_REAL_TIME 10 +#define MY_TIMER_ROUTINE_CLOCK_GETTIME 11 +#define MY_TIMER_ROUTINE_NXGETTIME 12 +#define MY_TIMER_ROUTINE_GETTIMEOFDAY 13 +#define MY_TIMER_ROUTINE_QUERYPERFORMANCECOUNTER 14 +#define MY_TIMER_ROUTINE_GETTICKCOUNT 15 +#define MY_TIMER_ROUTINE_TIME 16 +#define MY_TIMER_ROUTINE_TIMES 17 +#define MY_TIMER_ROUTINE_FTIME 18 +#define MY_TIMER_ROUTINE_ASM_PPC64 19 +#define MY_TIMER_ROUTINE_ASM_SUNPRO_SPARC64 20 +#define MY_TIMER_ROUTINE_ASM_SUNPRO_SPARC32 21 +#define MY_TIMER_ROUTINE_ASM_SUNPRO_I386 22 +#define MY_TIMER_ROUTINE_ASM_GCC_SPARC64 23 +#define MY_TIMER_ROUTINE_ASM_GCC_SPARC32 24 +#define MY_TIMER_ROUTINE_MACH_ABSOLUTE_TIME 25 +#define MY_TIMER_ROUTINE_GETSYSTEMTIMEASFILETIME 26 +#define MY_TIMER_ROUTINE_ASM_SUNPRO_X86_64 27 +#define MY_TIMER_ROUTINE_ASM_S390 28 + +#endif + diff --git a/EQ2/source/depends/mariadb-10.1.19/include/my_rnd.h b/EQ2/source/depends/mariadb-10.1.19/include/my_rnd.h new file mode 100644 index 000000000..b4a5d7358 --- /dev/null +++ b/EQ2/source/depends/mariadb-10.1.19/include/my_rnd.h @@ -0,0 +1,32 @@ +/* Copyright (C) 2013 Monty Program Ab + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; version 2 or later of the License. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ + +#ifndef _my_rnd_h +#define _my_rnd_h + +C_MODE_START + +struct my_rnd_struct { + unsigned long seed1,seed2,max_value; + double max_value_dbl; +}; + +void my_rnd_init(struct my_rnd_struct *rand_st, ulong seed1, ulong seed2); +double my_rnd(struct my_rnd_struct *rand_st); +double my_rnd_ssl(struct my_rnd_struct *rand_st); + +C_MODE_END + +#endif /* _my_rnd_h */ diff --git a/EQ2/source/depends/mariadb-10.1.19/include/my_stacktrace.h b/EQ2/source/depends/mariadb-10.1.19/include/my_stacktrace.h new file mode 100644 index 000000000..fad6e532d --- /dev/null +++ b/EQ2/source/depends/mariadb-10.1.19/include/my_stacktrace.h @@ -0,0 +1,107 @@ +/* + Copyright (c) 2001, 2011, Oracle and/or its affiliates. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; version 2 of the License. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ + +#ifndef _my_stacktrace_h_ +#define _my_stacktrace_h_ + +#include + +#ifdef TARGET_OS_LINUX +#if defined (__x86_64__) || defined (__i386__) || \ + (defined(__alpha__) && defined(__GNUC__)) +#define HAVE_STACKTRACE 1 +#endif +#elif defined(__WIN__) || defined(HAVE_PRINTSTACK) +#define HAVE_STACKTRACE 1 +#endif + +#if HAVE_BACKTRACE && (HAVE_BACKTRACE_SYMBOLS || HAVE_BACKTRACE_SYMBOLS_FD) +#undef HAVE_STACKTRACE +#define HAVE_STACKTRACE 1 +#endif + +#define HAVE_WRITE_CORE + +#if HAVE_BACKTRACE && HAVE_BACKTRACE_SYMBOLS && HAVE_ABI_CXA_DEMANGLE && \ + HAVE_WEAK_SYMBOL +#define BACKTRACE_DEMANGLE 1 +#endif + +C_MODE_START + +#if defined(HAVE_STACKTRACE) || defined(HAVE_BACKTRACE) +void my_init_stacktrace(); +void my_print_stacktrace(uchar* stack_bottom, ulong thread_stack); +int my_safe_print_str(const char* val, int max_len); +void my_write_core(int sig); +#if BACKTRACE_DEMANGLE +char *my_demangle(const char *mangled_name, int *status); +#endif /* BACKTRACE_DEMANGLE */ +#ifdef __WIN__ +void my_set_exception_pointers(EXCEPTION_POINTERS *ep); +#endif /* __WIN__ */ +#else +#define my_init_stacktrace() do { } while(0) +#endif /* ! (defined(HAVE_STACKTRACE) || defined(HAVE_BACKTRACE)) */ + +#ifndef _WIN32 +#define MY_ADDR_RESOLVE_FORK +#endif + +#if defined(HAVE_BFD_H) || defined(MY_ADDR_RESOLVE_FORK) +#define HAVE_MY_ADDR_RESOLVE 1 +#endif + +typedef struct { + const char *file; + const char *func; + uint line; +} my_addr_loc; + +#ifdef HAVE_MY_ADDR_RESOLVE +int my_addr_resolve(void *ptr, my_addr_loc *loc); +const char *my_addr_resolve_init(); +#else +#define my_addr_resolve_init() (0) +#define my_addr_resolve(A,B) (1) +#endif + +#ifdef HAVE_WRITE_CORE +void my_write_core(int sig); +#endif + +/** + A (very) limited version of snprintf, which writes the result to STDERR. + @sa my_safe_snprintf + Implemented with simplicity, and async-signal-safety in mind. + @note Has an internal buffer capacity of 512 bytes, + which should suffice for our signal handling routines. +*/ +size_t my_safe_printf_stderr(const char* fmt, ...) + ATTRIBUTE_FORMAT(printf, 1, 2); + +/** + Writes up to count bytes from buffer to STDERR. + Implemented with simplicity, and async-signal-safety in mind. + @param buf Buffer containing data to be written. + @param count Number of bytes to write. + @returns Number of bytes written. +*/ +size_t my_write_stderr(const void *buf, size_t count); + +C_MODE_END + +#endif /* _my_stacktrace_h_ */ diff --git a/EQ2/source/depends/mariadb-10.1.19/include/my_sys.h b/EQ2/source/depends/mariadb-10.1.19/include/my_sys.h new file mode 100644 index 000000000..a89480d3f --- /dev/null +++ b/EQ2/source/depends/mariadb-10.1.19/include/my_sys.h @@ -0,0 +1,1061 @@ +/* Copyright (c) 2000, 2013, Oracle and/or its affiliates. + Copyright (c) 2010, 2016, Monty Program Ab. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; version 2 of the License. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA */ + +#ifndef _my_sys_h +#define _my_sys_h + +#include "my_global.h" /* C_MODE_START, C_MODE_END */ + +#include + +C_MODE_START + +#ifdef HAVE_AIOWAIT +#include /* Used by record-cache */ +typedef struct my_aio_result { + aio_result_t result; + int pending; +} my_aio_result; +#endif + +#include + +#include + +#include /* for CHARSET_INFO */ +#include +#include +#ifdef _WIN32 +#include /*for alloca*/ +#endif +#include + +#define MY_INIT(name) { my_progname= name; my_init(); } + +/** + Max length of an error message generated by mysys utilities. + Some mysys functions produce error messages. These mostly go + to stderr. + This constant defines the size of the buffer used to format + the message. It should be kept in sync with MYSQL_ERRMSG_SIZE, + since sometimes mysys errors are stored in the server diagnostics + area, and we would like to avoid unexpected truncation. +*/ +#define MYSYS_ERRMSG_SIZE (512) +#define MYSYS_STRERROR_SIZE (128) + +#define MY_FILE_ERROR ((size_t) -1) + + /* General bitmaps for my_func's */ +#define MY_FFNF 1 /* Fatal if file not found */ +#define MY_FNABP 2 /* Fatal if not all bytes read/writen */ +#define MY_NABP 4 /* Error if not all bytes read/writen */ +#define MY_FAE 8 /* Fatal if any error */ +#define MY_WME 16 /* Write message on error */ +#define MY_WAIT_IF_FULL 32 /* Wait and try again if disk full error */ +#define MY_IGNORE_BADFD 32 /* my_sync: ignore 'bad descriptor' errors */ +#define MY_ENCRYPT 64 /* Encrypt IO_CACHE temporary files */ +#define MY_FULL_IO 512 /* For my_read - loop intil I/O is complete */ +#define MY_DONT_CHECK_FILESIZE 128 /* Option to init_io_cache() */ +#define MY_LINK_WARNING 32 /* my_redel() gives warning if links */ +#define MY_COPYTIME 64 /* my_redel() copys time */ +#define MY_DELETE_OLD 256 /* my_create_with_symlink() */ +#define MY_RESOLVE_LINK 128 /* my_realpath(); Only resolve links */ +#define MY_HOLD_ORIGINAL_MODES 128 /* my_copy() holds to file modes */ +#define MY_REDEL_MAKE_BACKUP 256 +#define MY_SEEK_NOT_DONE 32 /* my_lock may have to do a seek */ +#define MY_SHORT_WAIT 64 /* my_lock() don't wait if can't lock */ +#define MY_FORCE_LOCK 128 /* use my_lock() even if disable_locking */ +#define MY_NO_WAIT 256 /* my_lock() don't wait at all */ +/* + init_dynamic_array() has init buffer; Internal flag, not to be used by + caller. +*/ +#define MY_INIT_BUFFER_USED 256 +#define MY_ZEROFILL 32 /* my_malloc(), fill array with zero */ +#define MY_ALLOW_ZERO_PTR 64 /* my_realloc() ; zero ptr -> malloc */ +#define MY_FREE_ON_ERROR 128 /* my_realloc() ; Free old ptr on error */ +#define MY_HOLD_ON_ERROR 256 /* my_realloc() ; Return old ptr on error */ +#define MY_DONT_OVERWRITE_FILE 2048 /* my_copy: Don't overwrite file */ +#define MY_THREADSAFE 2048 /* my_seek(): lock fd mutex */ +#define MY_SYNC 4096 /* my_copy(): sync dst file */ +#define MY_SYNC_DIR 32768 /* my_create/delete/rename: sync directory */ +#define MY_SYNC_FILESIZE 65536 /* my_sync(): safe sync when file is extended */ +#define MY_THREAD_SPECIFIC 0x10000 /* my_malloc(): thread specific */ +#define MY_THREAD_MOVE 0x20000 /* realloc(); Memory can move */ +/* Tree that should delete things automaticly */ +#define MY_TREE_WITH_DELETE 0x40000 + +#define MY_CHECK_ERROR 1 /* Params to my_end; Check open-close */ +#define MY_GIVE_INFO 2 /* Give time info about process*/ +#define MY_DONT_FREE_DBUG 4 /* Do not call DBUG_END() in my_end() */ + +#define ME_HIGHBYTE 8 /* Shift for colours */ +#define ME_NOCUR 1 /* Don't use curses message */ +#define ME_OLDWIN 2 /* Use old window */ +#define ME_BELL 4 /* Ring bell then printing message */ +#define ME_HOLDTANG 8 /* Don't delete last keys */ +#define ME_WAITTOT 16 /* Wait for errtime secs of for a action */ +#define ME_WAITTANG 32 /* Wait for a user action */ +#define ME_NOREFRESH 64 /* Write the error message to error log */ +#define ME_NOINPUT 128 /* Dont use the input libary */ +#define ME_COLOUR1 ((1 << ME_HIGHBYTE)) /* Possibly error-colours */ +#define ME_COLOUR2 ((2 << ME_HIGHBYTE)) +#define ME_COLOUR3 ((3 << ME_HIGHBYTE)) +#define ME_JUST_INFO 1024 /**< not error but just info */ +#define ME_JUST_WARNING 2048 /**< not error but just warning */ +#define ME_FATALERROR 4096 /* Fatal statement error */ + + /* Bits in last argument to fn_format */ +#define MY_REPLACE_DIR 1 /* replace dir in name with 'dir' */ +#define MY_REPLACE_EXT 2 /* replace extension with 'ext' */ +#define MY_UNPACK_FILENAME 4 /* Unpack name (~ -> home) */ +#define MY_PACK_FILENAME 8 /* Pack name (home -> ~) */ +#define MY_RESOLVE_SYMLINKS 16 /* Resolve all symbolic links */ +#define MY_RETURN_REAL_PATH 32 /* return full path for file */ +#define MY_SAFE_PATH 64 /* Return NULL if too long path */ +#define MY_RELATIVE_PATH 128 /* name is relative to 'dir' */ +#define MY_APPEND_EXT 256 /* add 'ext' as additional extension*/ + + + /* My seek flags */ +#define MY_SEEK_SET 0 +#define MY_SEEK_CUR 1 +#define MY_SEEK_END 2 + + /* Some constants */ +#define MY_WAIT_FOR_USER_TO_FIX_PANIC 60 /* in seconds */ +#define MY_WAIT_GIVE_USER_A_MESSAGE 10 /* Every 10 times of prev */ +#define MIN_COMPRESS_LENGTH 50 /* Don't compress small bl. */ +#define DFLT_INIT_HITS 3 + + /* root_alloc flags */ +#define MY_KEEP_PREALLOC 1 +#define MY_MARK_BLOCKS_FREE 2 /* move used to free list and reuse them */ + + /* Internal error numbers (for assembler functions) */ +#define MY_ERRNO_EDOM 33 +#define MY_ERRNO_ERANGE 34 + + /* Bits for get_date timeflag */ +#define GETDATE_DATE_TIME 1 +#define GETDATE_SHORT_DATE 2 +#define GETDATE_HHMMSSTIME 4 +#define GETDATE_GMT 8 +#define GETDATE_FIXEDLENGTH 16 + +/* Extra length needed for filename if one calls my_create_backup_name */ +#define MY_BACKUP_NAME_EXTRA_LENGTH 17 + +/* If we have our own safemalloc (for debugging) */ +#if defined(SAFEMALLOC) +void sf_report_leaked_memory(my_thread_id id); +extern my_thread_id (*sf_malloc_dbug_id)(void); +#define SAFEMALLOC_REPORT_MEMORY(X) sf_report_leaked_memory(X) +#else +#define SAFEMALLOC_REPORT_MEMORY(X) do {} while(0) +#endif + +typedef void (*MALLOC_SIZE_CB) (long long size, my_bool is_thread_specific); +extern void set_malloc_size_cb(MALLOC_SIZE_CB func); + + /* defines when allocating data */ +extern void *my_malloc(size_t Size,myf MyFlags); +extern void *my_multi_malloc(myf MyFlags, ...); +extern void *my_multi_malloc_large(myf MyFlags, ...); +extern void *my_realloc(void *oldpoint, size_t Size, myf MyFlags); +extern void my_free(void *ptr); +extern void *my_memdup(const void *from,size_t length,myf MyFlags); +extern char *my_strdup(const char *from,myf MyFlags); +extern char *my_strndup(const char *from, size_t length, myf MyFlags); + +#ifdef HAVE_LARGE_PAGES +extern uint my_get_large_page_size(void); +extern uchar * my_large_malloc(size_t size, myf my_flags); +extern void my_large_free(uchar *ptr); +#else +#define my_get_large_page_size() (0) +#define my_large_malloc(A,B) my_malloc_lock((A),(B)) +#define my_large_free(A) my_free_lock((A)) +#endif /* HAVE_LARGE_PAGES */ + +#if defined(HAVE_ALLOCA) && !defined(HAVE_valgrind) +#if defined(_AIX) && !defined(__GNUC__) && !defined(_AIX43) +#pragma alloca +#endif /* _AIX */ +#if defined(__MWERKS__) +#undef alloca +#define alloca _alloca +#endif /* __MWERKS__ */ +#if defined(__GNUC__) && !defined(HAVE_ALLOCA_H) && ! defined(alloca) +#define alloca __builtin_alloca +#endif /* GNUC */ +#define my_alloca(SZ) alloca((size_t) (SZ)) +#define my_afree(PTR) ((void)0) +#define MAX_ALLOCA_SZ 4096 +#define my_safe_alloca(size) (((size) <= MAX_ALLOCA_SZ) ? \ + my_alloca(size) : \ + my_malloc((size), MYF(MY_THREAD_SPECIFIC|MY_WME))) +#define my_safe_afree(ptr, size) \ + do { if ((size) > MAX_ALLOCA_SZ) my_free(ptr); } while(0) +#else +#define my_alloca(SZ) my_malloc(SZ,MYF(MY_FAE)) +#define my_afree(PTR) my_free(PTR) +#define my_safe_alloca(size) my_alloca(size) +#define my_safe_afree(ptr, size) my_afree(ptr) +#endif /* HAVE_ALLOCA */ + +#ifndef errno /* did we already get it? */ +#ifdef HAVE_ERRNO_AS_DEFINE +#include /* errno is a define */ +#else +extern int errno; /* declare errno */ +#endif +#endif /* #ifndef errno */ +extern char *home_dir; /* Home directory for user */ +extern MYSQL_PLUGIN_IMPORT char *mysql_data_home; +extern const char *my_progname; /* program-name (printed in errors) */ +extern const char *my_progname_short; /* like above but without directory */ +extern char curr_dir[]; /* Current directory for user */ +extern void (*error_handler_hook)(uint my_err, const char *str,myf MyFlags); +extern void (*fatal_error_handler_hook)(uint my_err, const char *str, + myf MyFlags); +extern uint my_file_limit; +extern ulonglong my_thread_stack_size; +extern int sf_leaking_memory; /* set to 1 to disable memleak detection */ + +extern void (*proc_info_hook)(void *, const PSI_stage_info *, PSI_stage_info *, + const char *, const char *, const unsigned int); + +#ifdef HAVE_LARGE_PAGES +extern my_bool my_use_large_pages; +extern uint my_large_page_size; +#endif + +/* charsets */ +#define MY_ALL_CHARSETS_SIZE 2048 +extern MYSQL_PLUGIN_IMPORT CHARSET_INFO *default_charset_info; +extern MYSQL_PLUGIN_IMPORT CHARSET_INFO *all_charsets[MY_ALL_CHARSETS_SIZE]; +extern struct charset_info_st compiled_charsets[]; + +/* Collation properties and use statistics */ +extern my_bool my_collation_is_known_id(uint id); +extern ulonglong my_collation_statistics_get_use_count(uint id); +extern const char *my_collation_get_tailoring(uint id); + +/* statistics */ +extern ulong my_file_opened,my_stream_opened, my_tmp_file_created; +extern ulong my_file_total_opened; +extern ulong my_sync_count; +extern uint mysys_usage_id; +extern my_bool my_init_done; +extern my_bool my_assert_on_error; +extern myf my_global_flags; /* Set to MY_WME for more error messages */ + /* Point to current my_message() */ +extern void (*my_sigtstp_cleanup)(void), + /* Executed before jump to shell */ + (*my_sigtstp_restart)(void); + /* Executed when comming from shell */ +extern MYSQL_PLUGIN_IMPORT int my_umask; /* Default creation mask */ +extern int my_umask_dir, + my_recived_signals, /* Signals we have got */ + my_safe_to_handle_signal, /* Set when allowed to SIGTSTP */ + my_dont_interrupt; /* call remember_intr when set */ +extern my_bool my_use_symdir; + +extern ulong my_default_record_cache_size; +extern my_bool my_disable_locking, my_disable_async_io, + my_disable_flush_key_blocks, my_disable_symlinks; +extern my_bool my_disable_sync, my_disable_copystat_in_redel; +extern char wild_many,wild_one,wild_prefix; +extern const char *charsets_dir; +extern my_bool timed_mutexes; + +enum cache_type +{ + TYPE_NOT_SET= 0, READ_CACHE, WRITE_CACHE, + SEQ_READ_APPEND /* sequential read or append */, + READ_FIFO, READ_NET}; + +enum flush_type +{ + FLUSH_KEEP, /* flush block and keep it in the cache */ + FLUSH_RELEASE, /* flush block and remove it from the cache */ + FLUSH_IGNORE_CHANGED, /* remove block from the cache */ + /* + As my_disable_flush_pagecache_blocks is always 0, the following option + is strictly equivalent to FLUSH_KEEP + */ + FLUSH_FORCE_WRITE, + /** + @brief like FLUSH_KEEP but return immediately if file is already being + flushed (even partially) by another thread; only for page cache, + forbidden for key cache. + */ + FLUSH_KEEP_LAZY +}; + +typedef struct st_record_cache /* Used when cacheing records */ +{ + File file; + int rc_seek,error,inited; + uint rc_length,read_length,reclength; + my_off_t rc_record_pos,end_of_file; + uchar *rc_buff,*rc_buff2,*rc_pos,*rc_end,*rc_request_pos; +#ifdef HAVE_AIOWAIT + int use_async_io; + my_aio_result aio_result; +#endif + enum cache_type type; +} RECORD_CACHE; + +enum file_type +{ + UNOPEN = 0, FILE_BY_OPEN, FILE_BY_CREATE, STREAM_BY_FOPEN, STREAM_BY_FDOPEN, + FILE_BY_MKSTEMP, FILE_BY_DUP +}; + +struct st_my_file_info +{ + char *name; +#ifdef _WIN32 + HANDLE fhandle; /* win32 file handle */ + int oflag; /* open flags, e.g O_APPEND */ +#endif + enum file_type type; +}; + +extern struct st_my_file_info *my_file_info; + +/* Free function pointer */ +typedef void (*FREE_FUNC)(void *); + +typedef struct st_dynamic_array +{ + uchar *buffer; + uint elements,max_element; + uint alloc_increment; + uint size_of_element; + myf malloc_flags; +} DYNAMIC_ARRAY; + +typedef struct st_my_tmpdir +{ + DYNAMIC_ARRAY full_list; + char **list; + uint cur, max; + mysql_mutex_t mutex; +} MY_TMPDIR; + +typedef struct st_dynamic_string +{ + char *str; + size_t length,max_length,alloc_increment; +} DYNAMIC_STRING; + +struct st_io_cache; + +typedef struct st_io_cache_share +{ + mysql_mutex_t mutex; /* To sync on reads into buffer. */ + mysql_cond_t cond; /* To wait for signals. */ + mysql_cond_t cond_writer; /* For a synchronized writer. */ + /* Offset in file corresponding to the first byte of buffer. */ + my_off_t pos_in_file; + /* If a synchronized write cache is the source of the data. */ + struct st_io_cache *source_cache; + uchar *buffer; /* The read buffer. */ + uchar *read_end; /* Behind last valid byte of buffer. */ + int running_threads; /* threads not in lock. */ + int total_threads; /* threads sharing the cache. */ + int error; /* Last error. */ +#ifdef NOT_YET_IMPLEMENTED + /* whether the structure should be free'd */ + my_bool alloced; +#endif +} IO_CACHE_SHARE; + +typedef struct st_io_cache /* Used when cacheing files */ +{ + /* Offset in file corresponding to the first byte of uchar* buffer. */ + my_off_t pos_in_file; + /* + The offset of end of file for READ_CACHE and WRITE_CACHE. + For SEQ_READ_APPEND it the maximum of the actual end of file and + the position represented by read_end. + */ + my_off_t end_of_file; + /* Points to current read position in the buffer */ + uchar *read_pos; + /* the non-inclusive boundary in the buffer for the currently valid read */ + uchar *read_end; + uchar *buffer; /* The read buffer */ + /* Used in ASYNC_IO */ + uchar *request_pos; + + /* Only used in WRITE caches and in SEQ_READ_APPEND to buffer writes */ + uchar *write_buffer; + /* + Only used in SEQ_READ_APPEND, and points to the current read position + in the write buffer. Note that reads in SEQ_READ_APPEND caches can + happen from both read buffer (uchar* buffer) and write buffer + (uchar* write_buffer). + */ + uchar *append_read_pos; + /* Points to current write position in the write buffer */ + uchar *write_pos; + /* The non-inclusive boundary of the valid write area */ + uchar *write_end; + + /* + Current_pos and current_end are convenience variables used by + my_b_tell() and other routines that need to know the current offset + current_pos points to &write_pos, and current_end to &write_end in a + WRITE_CACHE, and &read_pos and &read_end respectively otherwise + */ + uchar **current_pos, **current_end; + + /* + The lock is for append buffer used in SEQ_READ_APPEND cache + need mutex copying from append buffer to read buffer. + */ + mysql_mutex_t append_buffer_lock; + /* + The following is used when several threads are reading the + same file in parallel. They are synchronized on disk + accesses reading the cached part of the file asynchronously. + It should be set to NULL to disable the feature. Only + READ_CACHE mode is supported. + */ + IO_CACHE_SHARE *share; + + /* + A caller will use my_b_read() macro to read from the cache + if the data is already in cache, it will be simply copied with + memcpy() and internal variables will be accordinging updated with + no functions invoked. However, if the data is not fully in the cache, + my_b_read() will call read_function to fetch the data. read_function + must never be invoked directly. + */ + int (*read_function)(struct st_io_cache *,uchar *,size_t); + /* + Same idea as in the case of read_function, except my_b_write() needs to + be replaced with my_b_append() for a SEQ_READ_APPEND cache + */ + int (*write_function)(struct st_io_cache *,const uchar *,size_t); + /* + Specifies the type of the cache. Depending on the type of the cache + certain operations might not be available and yield unpredicatable + results. Details to be documented later + */ + enum cache_type type; + /* + Counts the number of times, when we were forced to use disk. We use it to + increase the binlog_cache_disk_use and binlog_stmt_cache_disk_use status + variables. + */ + ulong disk_writes; + char *file_name; /* if used with 'open_cached_file' */ + const char *dir; + char prefix[3]; + File file; /* file descriptor */ + /* + seek_not_done is set by my_b_seek() to inform the upcoming read/write + operation that a seek needs to be preformed prior to the actual I/O + error is 0 if the cache operation was successful, -1 if there was a + "hard" error, and the actual number of I/O-ed bytes if the read/write was + partial. + */ + int seek_not_done,error; + /* buffer_length is memory size allocated for buffer or write_buffer */ + size_t buffer_length; + /* read_length is the same as buffer_length except when we use async io */ + size_t read_length; + myf myflags; /* Flags used to my_read/my_write */ + /* + alloced_buffer is 1 if the buffer was allocated by init_io_cache() and + 0 if it was supplied by the user. + Currently READ_NET is the only one that will use a buffer allocated + somewhere else + */ + my_bool alloced_buffer; +#ifdef HAVE_AIOWAIT + /* + As inidicated by ifdef, this is for async I/O, which is not currently + used (because it's not reliable on all systems) + */ + uint inited; + my_off_t aio_read_pos; + my_aio_result aio_result; +#endif +} IO_CACHE; + +typedef int (*qsort2_cmp)(const void *, const void *, const void *); + +typedef void (*my_error_reporter)(enum loglevel level, const char *format, ...) + ATTRIBUTE_FORMAT_FPTR(printf, 2, 3); + +extern my_error_reporter my_charset_error_reporter; + +/* inline functions for mf_iocache */ + +extern int my_b_flush_io_cache(IO_CACHE *info, int need_append_buffer_lock); +extern int _my_b_get(IO_CACHE *info); +extern int _my_b_read(IO_CACHE *info,uchar *Buffer,size_t Count); +extern int _my_b_write(IO_CACHE *info,const uchar *Buffer,size_t Count); + +/* Test if buffer is inited */ +static inline void my_b_clear(IO_CACHE *info) { info->buffer= 0; } +static inline int my_b_inited(IO_CACHE *info) { return MY_TEST(info->buffer); } +#define my_b_EOF INT_MIN + +static inline int my_b_read(IO_CACHE *info, uchar *Buffer, size_t Count) +{ + if (info->read_pos + Count <= info->read_end) + { + memcpy(Buffer, info->read_pos, Count); + info->read_pos+= Count; + return 0; + } + return _my_b_read(info, Buffer, Count); +} + +static inline int my_b_write(IO_CACHE *info, const uchar *Buffer, size_t Count) +{ + if (info->write_pos + Count <= info->write_end) + { + memcpy(info->write_pos, Buffer, Count); + info->write_pos+= Count; + return 0; + } + return _my_b_write(info, Buffer, Count); +} + +static inline int my_b_get(IO_CACHE *info) +{ + if (info->read_pos != info->read_end) + { + info->read_pos++; + return info->read_pos[-1]; + } + return _my_b_get(info); +} + +/* my_b_write_byte dosn't have any err-check */ +static inline void my_b_write_byte(IO_CACHE *info, uchar chr) +{ + if (info->write_pos >= info->write_end) + my_b_flush_io_cache(info, 1); + *info->write_pos++= chr; +} + +/** + Fill buffer of the cache. + + @note It assumes that you have already used all characters in the CACHE, + independent of the read_pos value! + + @returns + 0 On error or EOF (info->error = -1 on error) + # Number of characters +*/ +static inline size_t my_b_fill(IO_CACHE *info) +{ + info->read_pos= info->read_end; + return _my_b_read(info,0,0) ? 0 : info->read_end - info->read_pos; +} + +static inline my_off_t my_b_tell(const IO_CACHE *info) +{ + return info->pos_in_file + (*info->current_pos - info->request_pos); +} + +static inline my_off_t my_b_write_tell(const IO_CACHE *info) +{ + return info->pos_in_file + (info->write_pos - info->write_buffer); +} + +static inline uchar* my_b_get_buffer_start(const IO_CACHE *info) +{ + return info->request_pos; +} + +static inline size_t my_b_get_bytes_in_buffer(const IO_CACHE *info) +{ + return info->read_end - info->request_pos; +} + +static inline my_off_t my_b_get_pos_in_file(const IO_CACHE *info) +{ + return info->pos_in_file; +} + +static inline size_t my_b_bytes_in_cache(const IO_CACHE *info) +{ + return *info->current_end - *info->current_pos; +} + +int my_b_copy_to_file(IO_CACHE *cache, FILE *file); +my_off_t my_b_append_tell(IO_CACHE* info); +my_off_t my_b_safe_tell(IO_CACHE* info); /* picks the correct tell() */ +int my_b_pread(IO_CACHE *info, uchar *Buffer, size_t Count, my_off_t pos); + +typedef uint32 ha_checksum; + +#include + + /* Prototypes for mysys and my_func functions */ + +extern int my_copy(const char *from,const char *to,myf MyFlags); +extern int my_delete(const char *name,myf MyFlags); +extern int my_getwd(char * buf,size_t size,myf MyFlags); +extern int my_setwd(const char *dir,myf MyFlags); +extern int my_lock(File fd,int op,my_off_t start, my_off_t length,myf MyFlags); +extern void *my_once_alloc(size_t Size,myf MyFlags); +extern void my_once_free(void); +extern char *my_once_strdup(const char *src,myf myflags); +extern void *my_once_memdup(const void *src, size_t len, myf myflags); +extern File my_open(const char *FileName,int Flags,myf MyFlags); +extern File my_register_filename(File fd, const char *FileName, + enum file_type type_of_file, + uint error_message_number, myf MyFlags); +extern File my_create(const char *FileName,int CreateFlags, + int AccessFlags, myf MyFlags); +extern int my_close(File Filedes,myf MyFlags); +extern int my_mkdir(const char *dir, int Flags, myf MyFlags); +extern int my_readlink(char *to, const char *filename, myf MyFlags); +extern int my_is_symlink(const char *filename); +extern int my_realpath(char *to, const char *filename, myf MyFlags); +extern File my_create_with_symlink(const char *linkname, const char *filename, + int createflags, int access_flags, + myf MyFlags); +extern int my_delete_with_symlink(const char *name, myf MyFlags); +extern int my_rename_with_symlink(const char *from,const char *to,myf MyFlags); +extern int my_symlink(const char *content, const char *linkname, myf MyFlags); +extern size_t my_read(File Filedes,uchar *Buffer,size_t Count,myf MyFlags); +extern size_t my_pread(File Filedes,uchar *Buffer,size_t Count,my_off_t offset, + myf MyFlags); +extern int my_rename(const char *from,const char *to,myf MyFlags); +extern my_off_t my_seek(File fd,my_off_t pos,int whence,myf MyFlags); +extern my_off_t my_tell(File fd,myf MyFlags); +extern size_t my_write(File Filedes,const uchar *Buffer,size_t Count, + myf MyFlags); +extern size_t my_pwrite(File Filedes,const uchar *Buffer,size_t Count, + my_off_t offset,myf MyFlags); +extern size_t my_fread(FILE *stream,uchar *Buffer,size_t Count,myf MyFlags); +extern size_t my_fwrite(FILE *stream,const uchar *Buffer,size_t Count, + myf MyFlags); +extern my_off_t my_fseek(FILE *stream,my_off_t pos,int whence,myf MyFlags); +extern my_off_t my_ftell(FILE *stream,myf MyFlags); + +/* implemented in my_memmem.c */ +extern void *my_memmem(const void *haystack, size_t haystacklen, + const void *needle, size_t needlelen); + + +#ifdef _WIN32 +extern int my_access(const char *path, int amode); +#else +#define my_access access +#endif + +extern int check_if_legal_filename(const char *path); +extern int check_if_legal_tablename(const char *path); + +#ifdef __WIN__ +extern my_bool is_filename_allowed(const char *name, size_t length, + my_bool allow_current_dir); +#else /* __WIN__ */ +# define is_filename_allowed(name, length, allow_cwd) (TRUE) +#endif /* __WIN__ */ + +#ifdef _WIN32 +/* Windows-only functions (CRT equivalents)*/ +extern HANDLE my_get_osfhandle(File fd); +extern void my_osmaperr(unsigned long last_error); +#endif + +extern void init_glob_errs(void); +extern const char** get_global_errmsgs(void); +extern void wait_for_free_space(const char *filename, int errors); +extern FILE *my_fopen(const char *FileName,int Flags,myf MyFlags); +extern FILE *my_fdopen(File Filedes,const char *name, int Flags,myf MyFlags); +extern FILE *my_freopen(const char *path, const char *mode, FILE *stream); +extern int my_fclose(FILE *fd,myf MyFlags); +extern int my_vfprintf(FILE *stream, const char* format, va_list args); +extern void my_strerror(char *buf, size_t len, int nr); +extern int my_fprintf(FILE *stream, const char* format, ...); +extern File my_fileno(FILE *fd); +extern int my_chsize(File fd,my_off_t newlength, int filler, myf MyFlags); +extern int my_chmod(const char *name, mode_t mode, myf my_flags); +extern const char *my_basename(const char *filename); +extern void thr_set_sync_wait_callback(void (*before_sync)(void), + void (*after_sync)(void)); +extern int my_sync(File fd, myf my_flags); +extern int my_sync_dir(const char *dir_name, myf my_flags); +extern int my_sync_dir_by_file(const char *file_name, myf my_flags); +extern const char *my_get_err_msg(uint nr); +extern void my_error(uint nr,myf MyFlags, ...); +extern void my_printf_error(uint my_err, const char *format, + myf MyFlags, ...) + ATTRIBUTE_FORMAT(printf, 2, 4); +extern void my_printv_error(uint error, const char *format, myf MyFlags, + va_list ap); +extern int my_error_register(const char** (*get_errmsgs) (void), + uint first, uint last); +extern const char **my_error_unregister(uint first, uint last); +extern void my_message(uint my_err, const char *str,myf MyFlags); +extern void my_message_stderr(uint my_err, const char *str, myf MyFlags); +extern my_bool my_init(void); +extern void my_end(int infoflag); +extern int my_redel(const char *from, const char *to, time_t backup_time_stamp, + myf MyFlags); +void my_create_backup_name(char *to, const char *from, + time_t backup_time_stamp); +extern int my_copystat(const char *from, const char *to, int MyFlags); +extern char * my_filename(File fd); + +#ifdef EXTRA_DEBUG +void my_print_open_files(void); +#else +#define my_print_open_files() +#endif + +extern my_bool init_tmpdir(MY_TMPDIR *tmpdir, const char *pathlist); +extern char *my_tmpdir(MY_TMPDIR *tmpdir); +extern void free_tmpdir(MY_TMPDIR *tmpdir); + +extern void my_remember_signal(int signal_number,sig_handler (*func)(int)); +extern size_t dirname_part(char * to,const char *name, size_t *to_res_length); +extern size_t dirname_length(const char *name); +#define base_name(A) (A+dirname_length(A)) +extern int test_if_hard_path(const char *dir_name); +extern my_bool has_path(const char *name); +extern char *convert_dirname(char *to, const char *from, const char *from_end); +extern void to_unix_path(char * name); +extern char * fn_ext(const char *name); +extern char * fn_ext2(const char *name); +extern char * fn_same(char * toname,const char *name,int flag); +extern char * fn_format(char * to,const char *name,const char *dir, + const char *form, uint flag); +extern size_t strlength(const char *str); +extern void pack_dirname(char * to,const char *from); +extern size_t normalize_dirname(char * to, const char *from); +extern size_t unpack_dirname(char * to,const char *from); +extern size_t cleanup_dirname(char * to,const char *from); +extern size_t system_filename(char * to,const char *from); +extern size_t unpack_filename(char * to,const char *from); +extern char * intern_filename(char * to,const char *from); +extern int pack_filename(char * to, const char *name, size_t max_length); +extern char * my_path(char * to,const char *progname, + const char *own_pathname_part); +extern char * my_load_path(char * to, const char *path, + const char *own_path_prefix); +extern int wild_compare(const char *str,const char *wildstr, + pbool str_is_pattern); +extern my_bool array_append_string_unique(const char *str, + const char **array, size_t size); +extern void get_date(char * to,int timeflag,time_t use_time); +extern void soundex(CHARSET_INFO *, char * out_pntr, char * in_pntr, + pbool remove_garbage); +extern int init_record_cache(RECORD_CACHE *info,size_t cachesize,File file, + size_t reclength,enum cache_type type, + pbool use_async_io); +extern int read_cache_record(RECORD_CACHE *info,uchar *to); +extern int end_record_cache(RECORD_CACHE *info); +extern int write_cache_record(RECORD_CACHE *info,my_off_t filepos, + const uchar *record,size_t length); +extern int flush_write_cache(RECORD_CACHE *info); +extern void handle_recived_signals(void); + +extern sig_handler my_set_alarm_variable(int signo); +extern my_bool radixsort_is_appliccable(uint n_items, size_t size_of_element); +extern void my_string_ptr_sort(uchar *base,uint items,size_t size); +extern void radixsort_for_str_ptr(uchar* base[], uint number_of_elements, + size_t size_of_element,uchar *buffer[]); +extern qsort_t my_qsort(void *base_ptr, size_t total_elems, size_t size, + qsort_cmp cmp); +extern qsort_t my_qsort2(void *base_ptr, size_t total_elems, size_t size, + qsort2_cmp cmp, void *cmp_argument); +extern qsort2_cmp get_ptr_compare(size_t); +void my_store_ptr(uchar *buff, size_t pack_length, my_off_t pos); +my_off_t my_get_ptr(uchar *ptr, size_t pack_length); +extern int init_io_cache(IO_CACHE *info,File file,size_t cachesize, + enum cache_type type,my_off_t seek_offset, + my_bool use_async_io, myf cache_myflags); +extern my_bool reinit_io_cache(IO_CACHE *info,enum cache_type type, + my_off_t seek_offset, my_bool use_async_io, + my_bool clear_cache); +extern void setup_io_cache(IO_CACHE* info); +extern void init_io_cache_share(IO_CACHE *read_cache, IO_CACHE_SHARE *cshare, + IO_CACHE *write_cache, uint num_threads); +extern void remove_io_thread(IO_CACHE *info); +extern int _my_b_async_read(IO_CACHE *info,uchar *Buffer,size_t Count); +extern int my_b_append(IO_CACHE *info,const uchar *Buffer,size_t Count); +extern int my_b_safe_write(IO_CACHE *info,const uchar *Buffer,size_t Count); + +extern int my_block_write(IO_CACHE *info, const uchar *Buffer, + size_t Count, my_off_t pos); + +#define flush_io_cache(info) my_b_flush_io_cache((info),1) + +extern int end_io_cache(IO_CACHE *info); +extern void my_b_seek(IO_CACHE *info,my_off_t pos); +extern size_t my_b_gets(IO_CACHE *info, char *to, size_t max_length); +extern my_off_t my_b_filelength(IO_CACHE *info); +extern size_t my_b_write_backtick_quote(IO_CACHE *info, const char *str, + size_t len); +extern size_t my_b_printf(IO_CACHE *info, const char* fmt, ...); +extern size_t my_b_vprintf(IO_CACHE *info, const char* fmt, va_list ap); +extern my_bool open_cached_file(IO_CACHE *cache,const char *dir, + const char *prefix, size_t cache_size, + myf cache_myflags); +extern my_bool real_open_cached_file(IO_CACHE *cache); +extern void close_cached_file(IO_CACHE *cache); +File create_temp_file(char *to, const char *dir, const char *pfx, + int mode, myf MyFlags); +#define my_init_dynamic_array(A,B,C,D,E) init_dynamic_array2(A,B,NULL,C,D,E) +#define my_init_dynamic_array2(A,B,C,D,E,F) init_dynamic_array2(A,B,C,D,E,F) +extern my_bool init_dynamic_array2(DYNAMIC_ARRAY *array, uint element_size, + void *init_buffer, uint init_alloc, + uint alloc_increment, myf my_flags); +extern my_bool insert_dynamic(DYNAMIC_ARRAY *array, const void* element); +extern void *alloc_dynamic(DYNAMIC_ARRAY *array); +extern void *pop_dynamic(DYNAMIC_ARRAY*); +extern my_bool set_dynamic(DYNAMIC_ARRAY *array, const void *element, + uint array_index); +extern my_bool allocate_dynamic(DYNAMIC_ARRAY *array, uint max_elements); +extern void get_dynamic(DYNAMIC_ARRAY *array, void *element, uint array_index); +extern void delete_dynamic(DYNAMIC_ARRAY *array); +extern void delete_dynamic_element(DYNAMIC_ARRAY *array, uint array_index); +extern void delete_dynamic_with_callback(DYNAMIC_ARRAY *array, FREE_FUNC f); +extern void freeze_size(DYNAMIC_ARRAY *array); +extern int get_index_dynamic(DYNAMIC_ARRAY *array, void *element); +#define dynamic_array_ptr(array,array_index) ((array)->buffer+(array_index)*(array)->size_of_element) +#define dynamic_element(array,array_index,type) ((type)((array)->buffer) +(array_index)) +#define push_dynamic(A,B) insert_dynamic((A),(B)) +#define reset_dynamic(array) ((array)->elements= 0) +#define sort_dynamic(A,cmp) my_qsort((A)->buffer, (A)->elements, (A)->size_of_element, (cmp)) + +extern my_bool init_dynamic_string(DYNAMIC_STRING *str, const char *init_str, + size_t init_alloc,size_t alloc_increment); +extern my_bool dynstr_append(DYNAMIC_STRING *str, const char *append); +my_bool dynstr_append_mem(DYNAMIC_STRING *str, const char *append, + size_t length); +extern my_bool dynstr_append_os_quoted(DYNAMIC_STRING *str, const char *append, + ...); +extern my_bool dynstr_append_quoted(DYNAMIC_STRING *str, + const char *append, size_t len, + char quote); +extern my_bool dynstr_set(DYNAMIC_STRING *str, const char *init_str); +extern my_bool dynstr_realloc(DYNAMIC_STRING *str, size_t additional_size); +extern my_bool dynstr_trunc(DYNAMIC_STRING *str, size_t n); +extern void dynstr_free(DYNAMIC_STRING *str); +extern uint32 copy_and_convert_extended(char *to, uint32 to_length, + CHARSET_INFO *to_cs, + const char *from, uint32 from_length, + CHARSET_INFO *from_cs, uint *errors); +extern void dynstr_reassociate(DYNAMIC_STRING *str, char **res, size_t *length, + size_t *alloc_length); +extern uint32 copy_and_convert_extended(char *to, uint32 to_length, + CHARSET_INFO *to_cs, + const char *from, uint32 from_length, + CHARSET_INFO *from_cs, uint *errors); +#ifdef HAVE_MLOCK +extern void *my_malloc_lock(size_t length,myf flags); +extern void my_free_lock(void *ptr); +#else +#define my_malloc_lock(A,B) my_malloc((A),(B)) +#define my_free_lock(A) my_free((A)) +#endif +#define alloc_root_inited(A) ((A)->min_malloc != 0) +#define ALLOC_ROOT_MIN_BLOCK_SIZE (MALLOC_OVERHEAD + sizeof(USED_MEM) + 8) +#define clear_alloc_root(A) do { (A)->free= (A)->used= (A)->pre_alloc= 0; (A)->min_malloc=0;} while(0) +extern void init_alloc_root(MEM_ROOT *mem_root, size_t block_size, + size_t pre_alloc_size, myf my_flags); +extern void *alloc_root(MEM_ROOT *mem_root, size_t Size); +extern void *multi_alloc_root(MEM_ROOT *mem_root, ...); +extern void free_root(MEM_ROOT *root, myf MyFLAGS); +extern void set_prealloc_root(MEM_ROOT *root, char *ptr); +extern void reset_root_defaults(MEM_ROOT *mem_root, size_t block_size, + size_t prealloc_size); +extern char *strdup_root(MEM_ROOT *root,const char *str); +static inline char *safe_strdup_root(MEM_ROOT *root, const char *str) +{ + return str ? strdup_root(root, str) : 0; +} +extern char *strmake_root(MEM_ROOT *root,const char *str,size_t len); +extern void *memdup_root(MEM_ROOT *root,const void *str, size_t len); +extern my_bool my_compress(uchar *, size_t *, size_t *); +extern my_bool my_uncompress(uchar *, size_t , size_t *); +extern uchar *my_compress_alloc(const uchar *packet, size_t *len, + size_t *complen); +extern void *my_az_allocator(void *dummy, unsigned int items, unsigned int size); +extern void my_az_free(void *dummy, void *address); +extern int my_compress_buffer(uchar *dest, size_t *destLen, + const uchar *source, size_t sourceLen); +extern int packfrm(const uchar *, size_t, uchar **, size_t *); +extern int unpackfrm(uchar **, size_t *, const uchar *); + +extern ha_checksum my_checksum(ha_checksum crc, const uchar *mem, + size_t count); +#ifndef DBUG_OFF +extern void my_debug_put_break_here(void); +#else +#define my_debug_put_break_here() do {} while(0) +#endif + +extern void my_sleep(ulong m_seconds); +extern ulong crc32(ulong crc, const uchar *buf, uint len); +extern uint my_set_max_open_files(uint files); +void my_free_open_file_info(void); + +extern my_bool my_gethwaddr(uchar *to); +extern int my_getncpus(void); + +#define HRTIME_RESOLUTION 1000000ULL /* microseconds */ +typedef struct {ulonglong val;} my_hrtime_t; +void my_time_init(void); +extern my_hrtime_t my_hrtime(void); +extern ulonglong my_interval_timer(void); +extern ulonglong my_getcputime(void); + +#define microsecond_interval_timer() (my_interval_timer()/1000) +#define hrtime_to_time(X) ((X).val/HRTIME_RESOLUTION) +#define hrtime_from_time(X) ((ulonglong)((X)*HRTIME_RESOLUTION)) +#define hrtime_to_double(X) ((X).val/(double)HRTIME_RESOLUTION) +#define hrtime_sec_part(X) ((ulong)((X).val % HRTIME_RESOLUTION)) +#define my_time(X) hrtime_to_time(my_hrtime()) + +#ifdef HAVE_SYS_MMAN_H +#include + +#ifndef MAP_NOSYNC +#define MAP_NOSYNC 0 +#endif +#ifndef MAP_NORESERVE +#define MAP_NORESERVE 0 /* For irix and AIX */ +#endif + +#ifdef HAVE_MMAP64 +#define my_mmap(a,b,c,d,e,f) mmap64(a,b,c,d,e,f) +#else +#define my_mmap(a,b,c,d,e,f) mmap(a,b,c,d,e,f) +#endif +#define my_munmap(a,b) munmap((a),(b)) + +#else +/* not a complete set of mmap() flags, but only those that nesessary */ +#define PROT_READ 1 +#define PROT_WRITE 2 +#define MAP_NORESERVE 0 +#define MAP_SHARED 0x0001 +#define MAP_PRIVATE 0x0002 +#define MAP_NOSYNC 0x0800 +#define MAP_FAILED ((void *)-1) +#define MS_SYNC 0x0000 + +#define HAVE_MMAP +void *my_mmap(void *, size_t, int, int, int, my_off_t); +int my_munmap(void *, size_t); +#endif + +/* my_getpagesize */ +#ifdef HAVE_GETPAGESIZE +#define my_getpagesize() getpagesize() +#else +int my_getpagesize(void); +#endif + +int my_msync(int, void *, size_t, int); + +#define MY_UUID_SIZE 16 +#define MY_UUID_STRING_LENGTH (8+1+4+1+4+1+4+1+12) + +void my_uuid_init(ulong seed1, ulong seed2); +void my_uuid(uchar *guid); +void my_uuid2str(const uchar *guid, char *s); +void my_uuid_end(void); + +/* character sets */ +extern void my_charset_loader_init_mysys(MY_CHARSET_LOADER *loader); +extern uint get_charset_number(const char *cs_name, uint cs_flags); +extern uint get_collation_number(const char *name); +extern const char *get_charset_name(uint cs_number); + +extern CHARSET_INFO *get_charset(uint cs_number, myf flags); +extern CHARSET_INFO *get_charset_by_name(const char *cs_name, myf flags); +extern CHARSET_INFO *my_collation_get_by_name(MY_CHARSET_LOADER *loader, + const char *name, myf flags); +extern CHARSET_INFO *get_charset_by_csname(const char *cs_name, + uint cs_flags, myf my_flags); +extern CHARSET_INFO *my_charset_get_by_name(MY_CHARSET_LOADER *loader, + const char *name, + uint cs_flags, myf my_flags); +extern my_bool resolve_charset(const char *cs_name, + CHARSET_INFO *default_cs, + CHARSET_INFO **cs); +extern my_bool resolve_collation(const char *cl_name, + CHARSET_INFO *default_cl, + CHARSET_INFO **cl); +extern void free_charsets(void); +extern char *get_charsets_dir(char *buf); +extern my_bool my_charset_same(CHARSET_INFO *cs1, CHARSET_INFO *cs2); +extern my_bool init_compiled_charsets(myf flags); +extern void add_compiled_collation(struct charset_info_st *cs); +extern size_t escape_string_for_mysql(CHARSET_INFO *charset_info, + char *to, size_t to_length, + const char *from, size_t length); +#ifdef __WIN__ +#define BACKSLASH_MBTAIL +/* File system character set */ +extern CHARSET_INFO *fs_character_set(void); +#endif +extern size_t escape_quotes_for_mysql(CHARSET_INFO *charset_info, + char *to, size_t to_length, + const char *from, size_t length); + +extern void thd_increment_bytes_sent(void *thd, ulong length); +extern void thd_increment_bytes_received(void *thd, ulong length); +extern void thd_increment_net_big_packet_count(void *thd, ulong length); + +#ifdef __WIN__ +extern my_bool have_tcpip; /* Is set if tcpip is used */ + +/* implemented in my_windac.c */ + +int my_security_attr_create(SECURITY_ATTRIBUTES **psa, const char **perror, + DWORD owner_rights, DWORD everybody_rights); + +void my_security_attr_free(SECURITY_ATTRIBUTES *sa); + +/* implemented in my_conio.c */ +char* my_cgets(char *string, size_t clen, size_t* plen); + +#endif + +#include + +#ifdef HAVE_PSI_INTERFACE +extern MYSQL_PLUGIN_IMPORT struct PSI_bootstrap *PSI_hook; +extern void set_psi_server(PSI *psi); +void my_init_mysys_psi_keys(void); +#endif + +struct st_mysql_file; +extern struct st_mysql_file *mysql_stdin; +C_MODE_END +#endif /* _my_sys_h */ diff --git a/EQ2/source/depends/mariadb-10.1.19/include/my_systemd.h b/EQ2/source/depends/mariadb-10.1.19/include/my_systemd.h new file mode 100644 index 000000000..bef755764 --- /dev/null +++ b/EQ2/source/depends/mariadb-10.1.19/include/my_systemd.h @@ -0,0 +1,34 @@ +/* + Copyright (c) 2015 Daniel Black. All rights reserved. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; version 2 of the License. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA +*/ + + +#ifndef MY_SYSTEMD_INCLUDED +#define MY_SYSTEMD_INCLUDED + +#if defined(HAVE_SYSTEMD) && !defined(EMBEDDED_LIBRARY) +/* + sd-daemon.h may include inttypes.h. Explicitly request format macros before + the first inclusion of inttypes.h. +*/ +#define __STDC_FORMAT_MACROS +#include +#else +#define sd_notify(X, Y) +#define sd_notifyf(E, F, ...) +#endif + +#endif /* MY_SYSTEMD_INCLUDED */ diff --git a/EQ2/source/depends/mariadb-10.1.19/include/my_time.h b/EQ2/source/depends/mariadb-10.1.19/include/my_time.h new file mode 100644 index 000000000..557dcdd56 --- /dev/null +++ b/EQ2/source/depends/mariadb-10.1.19/include/my_time.h @@ -0,0 +1,250 @@ +/* + Copyright (c) 2004, 2011, Oracle and/or its affiliates. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; version 2 of the License. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ + +/* + This is a private header of sql-common library, containing + declarations for my_time.c +*/ + +#ifndef _my_time_h_ +#define _my_time_h_ +#include "my_global.h" +#include "mysql_time.h" + +C_MODE_START + +extern ulonglong log_10_int[20]; +extern uchar days_in_month[]; + +#define MY_TIME_T_MAX LONG_MAX +#define MY_TIME_T_MIN LONG_MIN + +/* Time handling defaults */ +#define TIMESTAMP_MAX_YEAR 2038 +#define TIMESTAMP_MIN_YEAR (1900 + YY_PART_YEAR - 1) +#define TIMESTAMP_MAX_VALUE INT_MAX32 +#define TIMESTAMP_MIN_VALUE 0 + +/* two-digit years < this are 20..; >= this are 19.. */ +#define YY_PART_YEAR 70 + +/* + check for valid times only if the range of time_t is greater than + the range of my_time_t +*/ +#if SIZEOF_TIME_T > 4 || defined(TIME_T_UNSIGNED) +# define IS_TIME_T_VALID_FOR_TIMESTAMP(x) \ + ((x) <= TIMESTAMP_MAX_VALUE && \ + (x) >= TIMESTAMP_MIN_VALUE) +#else +# define IS_TIME_T_VALID_FOR_TIMESTAMP(x) \ + ((x) >= TIMESTAMP_MIN_VALUE) +#endif + +/* Flags to str_to_datetime */ + +/* + TIME_FUZZY_DATES is used for the result will only be used for comparison + purposes. Conversion is as relaxed as possible. +*/ +#define TIME_FUZZY_DATES 1 +#define TIME_DATETIME_ONLY 2 +#define TIME_TIME_ONLY 4 +#define TIME_NO_ZERO_IN_DATE (1UL << 23) /* == MODE_NO_ZERO_IN_DATE */ +#define TIME_NO_ZERO_DATE (1UL << 24) /* == MODE_NO_ZERO_DATE */ +#define TIME_INVALID_DATES (1UL << 25) /* == MODE_INVALID_DATES */ + +#define MYSQL_TIME_WARN_TRUNCATED 1 +#define MYSQL_TIME_WARN_OUT_OF_RANGE 2 +#define MYSQL_TIME_NOTE_TRUNCATED 16 + +#define MYSQL_TIME_WARN_WARNINGS (MYSQL_TIME_WARN_TRUNCATED|MYSQL_TIME_WARN_OUT_OF_RANGE) +#define MYSQL_TIME_WARN_NOTES (MYSQL_TIME_NOTE_TRUNCATED) + +#define MYSQL_TIME_WARN_HAVE_WARNINGS(x) MY_TEST((x) & MYSQL_TIME_WARN_WARNINGS) +#define MYSQL_TIME_WARN_HAVE_NOTES(x) MY_TEST((x) & MYSQL_TIME_WARN_NOTES) + +/* Usefull constants */ +#define SECONDS_IN_24H 86400L + +/* Limits for the TIME data type */ +#define TIME_MAX_HOUR 838 +#define TIME_MAX_MINUTE 59 +#define TIME_MAX_SECOND 59 +#define TIME_MAX_SECOND_PART 999999 +#define TIME_SECOND_PART_FACTOR (TIME_MAX_SECOND_PART+1) +#define TIME_SECOND_PART_DIGITS 6 +#define TIME_MAX_VALUE (TIME_MAX_HOUR*10000 + TIME_MAX_MINUTE*100 + TIME_MAX_SECOND) +#define TIME_MAX_VALUE_SECONDS (TIME_MAX_HOUR * 3600L + \ + TIME_MAX_MINUTE * 60L + TIME_MAX_SECOND) + +/* + Structure to return status from + str_to_datetime(), str_to_time(). +*/ +typedef struct st_mysql_time_status +{ + int warnings; + uint precision; +} MYSQL_TIME_STATUS; + +static inline void my_time_status_init(MYSQL_TIME_STATUS *status) +{ + status->warnings= status->precision= 0; +} + +my_bool check_date(const MYSQL_TIME *ltime, my_bool not_zero_date, + ulonglong flags, int *was_cut); +my_bool str_to_time(const char *str, uint length, MYSQL_TIME *l_time, + ulonglong flag, MYSQL_TIME_STATUS *status); +my_bool str_to_datetime(const char *str, uint length, MYSQL_TIME *l_time, + ulonglong flags, MYSQL_TIME_STATUS *status); +longlong number_to_datetime(longlong nr, ulong sec_part, MYSQL_TIME *time_res, + ulonglong flags, int *was_cut); + +static inline +longlong double_to_datetime(double nr, MYSQL_TIME *ltime, uint flags, int *cut) +{ + if (nr < 0 || nr > LONGLONG_MAX) + nr= (double)LONGLONG_MAX; + return number_to_datetime((longlong) floor(nr), + (ulong)((nr-floor(nr))*TIME_SECOND_PART_FACTOR), + ltime, flags, cut); +} + +int number_to_time(my_bool neg, ulonglong nr, ulong sec_part, + MYSQL_TIME *ltime, int *was_cut); +ulonglong TIME_to_ulonglong_datetime(const MYSQL_TIME *); +ulonglong TIME_to_ulonglong_date(const MYSQL_TIME *); +ulonglong TIME_to_ulonglong_time(const MYSQL_TIME *); +ulonglong TIME_to_ulonglong(const MYSQL_TIME *); +double TIME_to_double(const MYSQL_TIME *my_time); + +longlong pack_time(const MYSQL_TIME *my_time); +MYSQL_TIME *unpack_time(longlong packed, MYSQL_TIME *my_time); + +int check_time_range(struct st_mysql_time *my_time, uint dec, int *warning); +my_bool check_datetime_range(const MYSQL_TIME *ltime); + + +long calc_daynr(uint year,uint month,uint day); +uint calc_days_in_year(uint year); +uint year_2000_handling(uint year); + +void my_init_time(void); + + +/* + Function to check sanity of a TIMESTAMP value + + DESCRIPTION + Check if a given MYSQL_TIME value fits in TIMESTAMP range. + This function doesn't make precise check, but rather a rough + estimate. + + RETURN VALUES + TRUE The value seems sane + FALSE The MYSQL_TIME value is definitely out of range +*/ + +static inline my_bool validate_timestamp_range(const MYSQL_TIME *t) +{ + if ((t->year > TIMESTAMP_MAX_YEAR || t->year < TIMESTAMP_MIN_YEAR) || + (t->year == TIMESTAMP_MAX_YEAR && (t->month > 1 || t->day > 19)) || + (t->year == TIMESTAMP_MIN_YEAR && (t->month < 12 || t->day < 31))) + return FALSE; + + return TRUE; +} + +my_time_t +my_system_gmt_sec(const MYSQL_TIME *t, long *my_timezone, uint *error_code); + +void set_zero_time(MYSQL_TIME *tm, enum enum_mysql_timestamp_type time_type); + +/* + Required buffer length for my_time_to_str, my_date_to_str, + my_datetime_to_str and TIME_to_string functions. Note, that the + caller is still responsible to check that given TIME structure + has values in valid ranges, otherwise size of the buffer could + be not enough. We also rely on the fact that even wrong values + sent using binary protocol fit in this buffer. +*/ +#define MAX_DATE_STRING_REP_LENGTH 30 +#define AUTO_SEC_PART_DIGITS 31 /* same as NOT_FIXED_DEC */ + +int my_time_to_str(const MYSQL_TIME *l_time, char *to, uint digits); +int my_date_to_str(const MYSQL_TIME *l_time, char *to); +int my_datetime_to_str(const MYSQL_TIME *l_time, char *to, uint digits); +int my_TIME_to_str(const MYSQL_TIME *l_time, char *to, uint digits); + +int my_timeval_to_str(const struct timeval *tm, char *to, uint dec); + +static inline longlong sec_part_shift(longlong second_part, uint digits) +{ + return second_part / (longlong)log_10_int[TIME_SECOND_PART_DIGITS - digits]; +} +static inline longlong sec_part_unshift(longlong second_part, uint digits) +{ + return second_part * (longlong)log_10_int[TIME_SECOND_PART_DIGITS - digits]; +} + +/* Date/time rounding and truncation functions */ +static inline long my_time_fraction_remainder(long nr, uint decimals) +{ + DBUG_ASSERT(decimals <= TIME_SECOND_PART_DIGITS); + return nr % (long) log_10_int[TIME_SECOND_PART_DIGITS - decimals]; +} +static inline void my_time_trunc(MYSQL_TIME *ltime, uint decimals) +{ + ltime->second_part-= my_time_fraction_remainder(ltime->second_part, decimals); +} +static inline void my_timeval_trunc(struct timeval *tv, uint decimals) +{ + tv->tv_usec-= my_time_fraction_remainder(tv->tv_usec, decimals); +} + + +#define hrtime_to_my_time(X) ((my_time_t)hrtime_to_time(X)) + +/* + Available interval types used in any statement. + + 'interval_type' must be sorted so that simple intervals comes first, + ie year, quarter, month, week, day, hour, etc. The order based on + interval size is also important and the intervals should be kept in a + large to smaller order. (get_interval_value() depends on this) + + Note: If you change the order of elements in this enum you should fix + order of elements in 'interval_type_to_name' and 'interval_names' + arrays + + See also interval_type_to_name, get_interval_value, interval_names +*/ + +enum interval_type +{ + INTERVAL_YEAR, INTERVAL_QUARTER, INTERVAL_MONTH, INTERVAL_WEEK, INTERVAL_DAY, + INTERVAL_HOUR, INTERVAL_MINUTE, INTERVAL_SECOND, INTERVAL_MICROSECOND, + INTERVAL_YEAR_MONTH, INTERVAL_DAY_HOUR, INTERVAL_DAY_MINUTE, + INTERVAL_DAY_SECOND, INTERVAL_HOUR_MINUTE, INTERVAL_HOUR_SECOND, + INTERVAL_MINUTE_SECOND, INTERVAL_DAY_MICROSECOND, INTERVAL_HOUR_MICROSECOND, + INTERVAL_MINUTE_MICROSECOND, INTERVAL_SECOND_MICROSECOND, INTERVAL_LAST +}; + +C_MODE_END + +#endif /* _my_time_h_ */ diff --git a/EQ2/source/depends/mariadb-10.1.19/include/my_tree.h b/EQ2/source/depends/mariadb-10.1.19/include/my_tree.h new file mode 100644 index 000000000..02cab02b5 --- /dev/null +++ b/EQ2/source/depends/mariadb-10.1.19/include/my_tree.h @@ -0,0 +1,109 @@ +/* Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; version 2 of the License. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ + +#ifndef _tree_h +#define _tree_h +#ifdef __cplusplus +extern "C" { +#endif + +#include "my_base.h" /* get 'enum ha_rkey_function' */ +#include "my_alloc.h" /* MEM_ROOT */ + +/* Worst case tree is half full. This gives use 2^(MAX_TREE_HEIGHT/2) leafs */ +#define MAX_TREE_HEIGHT 64 + +#define ELEMENT_KEY(tree,element)\ +(tree->offset_to_key ? (void*)((uchar*) element+tree->offset_to_key) :\ + *((void**) (element+1))) + +#define tree_set_pointer(element,ptr) *((uchar **) (element+1))=((uchar*) (ptr)) + +/* + A tree with its flag set to TREE_ONLY_DUPS behaves differently on inserting + an element that is not in the tree: + the element is not added at all, but instead tree_insert() returns a special + address TREE_ELEMENT_UNIQUE as an indication that the function has not failed + due to lack of memory. +*/ + +#define TREE_ELEMENT_UNIQUE ((TREE_ELEMENT *) 1) +#define TREE_NO_DUPS 1 +#define TREE_ONLY_DUPS 2 + +typedef enum { left_root_right, right_root_left } TREE_WALK; +typedef uint32 element_count; +typedef int (*tree_walk_action)(void *,element_count,void *); + +typedef enum { free_init, free_free, free_end } TREE_FREE; +typedef void (*tree_element_free)(void*, TREE_FREE, void *); + +typedef struct st_tree_element { + struct st_tree_element *left,*right; + uint32 count:31, + colour:1; /* black is marked as 1 */ +} TREE_ELEMENT; + +#define ELEMENT_CHILD(element, offs) (*(TREE_ELEMENT**)((char*)element + offs)) + +typedef struct st_tree { + TREE_ELEMENT *root,null_element; + TREE_ELEMENT **parents[MAX_TREE_HEIGHT]; + uint offset_to_key,elements_in_tree,size_of_element; + size_t memory_limit, allocated; + qsort_cmp2 compare; + void *custom_arg; + MEM_ROOT mem_root; + my_bool with_delete; + tree_element_free free; + myf my_flags; + uint flag; +} TREE; + + /* Functions on whole tree */ +void init_tree(TREE *tree, size_t default_alloc_size, size_t memory_limit, + int size, qsort_cmp2 compare, + tree_element_free free_element, void *custom_arg, + myf my_flags); +void delete_tree(TREE*); +void reset_tree(TREE*); + + /* similar to delete tree, except we do not my_free() blocks in mem_root */ +#define is_tree_inited(tree) ((tree)->root != 0) + + /* Functions on leafs */ +TREE_ELEMENT *tree_insert(TREE *tree,void *key, uint key_size, + void *custom_arg); +void *tree_search(TREE *tree, void *key, void *custom_arg); +int tree_walk(TREE *tree,tree_walk_action action, + void *argument, TREE_WALK visit); +int tree_delete(TREE *tree, void *key, uint key_size, void *custom_arg); +void *tree_search_key(TREE *tree, const void *key, + TREE_ELEMENT **parents, TREE_ELEMENT ***last_pos, + enum ha_rkey_function flag, void *custom_arg); +void *tree_search_edge(TREE *tree, TREE_ELEMENT **parents, + TREE_ELEMENT ***last_pos, int child_offs); +void *tree_search_next(TREE *tree, TREE_ELEMENT ***last_pos, int l_offs, + int r_offs); +ha_rows tree_record_pos(TREE *tree, const void *key, + enum ha_rkey_function search_flag, void *custom_arg); +#define reset_free_element(tree) (tree)->free= 0 + +#define TREE_ELEMENT_EXTRA_SIZE (sizeof(TREE_ELEMENT) + sizeof(void*)) + +#ifdef __cplusplus +} +#endif +#endif diff --git a/EQ2/source/depends/mariadb-10.1.19/include/my_uctype.h b/EQ2/source/depends/mariadb-10.1.19/include/my_uctype.h new file mode 100644 index 000000000..80ef01c07 --- /dev/null +++ b/EQ2/source/depends/mariadb-10.1.19/include/my_uctype.h @@ -0,0 +1,1484 @@ +#ifndef MY_UCTYPE_INCLUDED +#define MY_UCTYPE_INCLUDED + +/* Copyright (c) 2006 MySQL AB, 2009 Sun Microsystems, Inc. + Use is subject to license terms. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; version 2 of the License. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ + +/* + Unicode ctype data + Generated from UnicodeData-5.0.0d9.txt +*/ +static unsigned char uctype_page00[256]= +{ + 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, + 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, + 8, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 16, 16, 16, 16, 16, 16, + 16, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, + 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 16, 16, 16, 16, 16, + 16, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, + 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 16, 16, 16, 16, 32, + 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, + 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, + 8, 16, 16, 16, 16, 16, 16, 16, 16, 16, 2, 16, 16, 32, 16, 16, + 16, 16, 20, 20, 16, 2, 16, 16, 16, 20, 2, 16, 20, 20, 20, 16, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 16, 1, 1, 1, 1, 1, 1, 1, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 16, 2, 2, 2, 2, 2, 2, 2, 2 +}; + +static unsigned char uctype_page01[256]= +{ + 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, + 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, + 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, + 1, 2, 1, 2, 1, 2, 1, 2, 2, 1, 2, 1, 2, 1, 2, 1, + 2, 1, 2, 1, 2, 1, 2, 1, 2, 2, 1, 2, 1, 2, 1, 2, + 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, + 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, + 1, 2, 1, 2, 1, 2, 1, 2, 1, 1, 2, 1, 2, 1, 2, 2, + 2, 1, 1, 2, 1, 2, 1, 1, 2, 1, 1, 1, 2, 2, 1, 1, + 1, 1, 2, 1, 1, 2, 1, 1, 1, 2, 2, 2, 1, 1, 2, 1, + 1, 2, 1, 2, 1, 2, 1, 1, 2, 1, 2, 2, 1, 2, 1, 1, + 2, 1, 1, 1, 2, 1, 2, 1, 1, 2, 2, 2, 1, 2, 2, 2, + 2, 2, 2, 2, 1, 1, 2, 1, 1, 2, 1, 1, 2, 1, 2, 1, + 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 2, 1, 2, + 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, + 2, 1, 1, 2, 1, 2, 1, 1, 1, 2, 1, 2, 1, 2, 1, 2 +}; + +static unsigned char uctype_page02[256]= +{ + 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, + 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, + 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, + 1, 2, 1, 2, 2, 2, 2, 2, 2, 2, 1, 1, 2, 1, 1, 2, + 2, 1, 2, 1, 1, 1, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 16, 16, 16, 16, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 2, 2, 2, 2, 2, 16, 16, 16, 16, 16, 16, 16, 16, 16, 2, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16 +}; + +static unsigned char uctype_page03[256]= +{ + 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, + 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, + 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, + 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, + 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, + 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, + 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, + 0, 0, 0, 0, 16, 16, 0, 0, 0, 0, 2, 2, 2, 2, 16, 0, + 0, 0, 0, 0, 16, 16, 1, 16, 1, 1, 1, 0, 1, 0, 1, 1, + 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, + 2, 2, 1, 1, 1, 2, 2, 2, 1, 2, 1, 2, 1, 2, 1, 2, + 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, + 2, 2, 2, 2, 1, 2, 16, 1, 2, 1, 1, 2, 2, 1, 1, 1 +}; + +static unsigned char uctype_page04[256]= +{ + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, + 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, + 1, 2, 16, 18, 18, 18, 18, 0, 18, 18, 1, 2, 1, 2, 1, 2, + 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, + 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, + 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, + 1, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 2, + 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, + 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, + 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2 +}; + +static unsigned char uctype_page05[256]= +{ + 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, + 1, 2, 1, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 0, 0, 2, 16, 16, 16, 16, 16, 16, + 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 0, 16, 16, 0, 0, 0, 0, 0, + 0, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, + 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, + 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 16, 18, + 16, 18, 18, 16, 18, 18, 16, 18, 0, 0, 0, 0, 0, 0, 0, 0, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, + 2, 2, 2, 16, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +}; + +static unsigned char uctype_page06[256]= +{ + 32, 32, 32, 32, 0, 0, 0, 0, 0, 0, 0, 16, 16, 16, 16, 16, + 18, 18, 18, 18, 18, 18, 0, 0, 0, 0, 0, 16, 0, 0, 16, 16, + 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 18, 18, 18, 18, 18, + 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 0, + 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 16, 16, 16, 16, 2, 2, + 18, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 16, 2, 18, 18, 18, 18, 18, 18, 18, 32, 18, 18, + 18, 18, 18, 18, 18, 2, 2, 18, 18, 16, 18, 18, 18, 18, 2, 2, + 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 2, 2, 2, 16, 16, 2 +}; + +static unsigned char uctype_page07[256]= +{ + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 0, 32, + 2, 18, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, + 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 0, 0, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, + 18, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 18, 18, 18, 18, 18, + 18, 18, 18, 18, 2, 2, 16, 16, 16, 16, 2, 0, 0, 0, 0, 0 +}; + +static unsigned char uctype_page09[256]= +{ + 0, 18, 18, 18, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 18, 2, 18, 18, + 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 0, 0, + 2, 18, 18, 18, 18, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 18, 18, 16, 16, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, + 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, + 0, 18, 18, 18, 0, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 2, + 2, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 2, 2, 2, 2, 2, 2, + 2, 0, 2, 0, 0, 0, 2, 2, 2, 2, 0, 0, 18, 2, 18, 18, + 18, 18, 18, 18, 18, 0, 0, 18, 18, 0, 0, 18, 18, 18, 2, 0, + 0, 0, 0, 0, 0, 0, 0, 18, 0, 0, 0, 0, 2, 2, 0, 2, + 2, 2, 18, 18, 0, 0, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, + 2, 2, 16, 16, 20, 20, 20, 20, 20, 20, 16, 0, 0, 0, 0, 0 +}; + +static unsigned char uctype_page0A[256]= +{ + 0, 18, 18, 18, 0, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 2, + 2, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 2, 2, 2, 2, 2, 2, + 2, 0, 2, 2, 0, 2, 2, 0, 2, 2, 0, 0, 18, 0, 18, 18, + 18, 18, 18, 0, 0, 0, 0, 18, 18, 0, 0, 18, 18, 18, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 0, 2, 0, + 0, 0, 0, 0, 0, 0, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, + 18, 18, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 18, 18, 18, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 2, + 2, 2, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 2, 2, 2, 2, 2, 2, + 2, 0, 2, 2, 0, 2, 2, 2, 2, 2, 0, 0, 18, 2, 18, 18, + 18, 18, 18, 18, 18, 18, 0, 18, 18, 18, 0, 18, 18, 18, 0, 0, + 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 2, 2, 18, 18, 0, 0, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, + 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +}; + +static unsigned char uctype_page0B[256]= +{ + 0, 18, 18, 18, 0, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 2, + 2, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 2, 2, 2, 2, 2, 2, + 2, 0, 2, 2, 0, 2, 2, 2, 2, 2, 0, 0, 18, 2, 18, 18, + 18, 18, 18, 18, 0, 0, 0, 18, 18, 0, 0, 18, 18, 18, 0, 0, + 0, 0, 0, 0, 0, 0, 18, 18, 0, 0, 0, 0, 2, 2, 0, 2, + 2, 2, 0, 0, 0, 0, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, + 16, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 18, 2, 0, 2, 2, 2, 2, 2, 2, 0, 0, 0, 2, 2, + 2, 0, 2, 2, 2, 2, 0, 0, 0, 2, 2, 0, 2, 0, 2, 2, + 0, 0, 0, 2, 2, 0, 0, 0, 2, 2, 2, 0, 0, 0, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 18, 18, + 18, 18, 18, 0, 0, 0, 18, 18, 18, 0, 18, 18, 18, 18, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, + 20, 20, 20, 16, 16, 16, 16, 16, 16, 16, 16, 0, 0, 0, 0, 0 +}; + +static unsigned char uctype_page0C[256]= +{ + 0, 18, 18, 18, 0, 2, 2, 2, 2, 2, 2, 2, 2, 0, 2, 2, + 2, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 0, 2, 2, 2, 2, 2, 0, 0, 0, 0, 18, 18, + 18, 18, 18, 18, 18, 0, 18, 18, 18, 0, 18, 18, 18, 18, 0, 0, + 0, 0, 0, 0, 0, 18, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 2, 2, 0, 0, 0, 0, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 18, 18, 0, 2, 2, 2, 2, 2, 2, 2, 2, 0, 2, 2, + 2, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 0, 2, 2, 2, 2, 2, 0, 0, 18, 2, 18, 18, + 18, 18, 18, 18, 18, 0, 18, 18, 18, 0, 18, 18, 18, 18, 0, 0, + 0, 0, 0, 0, 0, 18, 18, 0, 0, 0, 0, 0, 0, 0, 2, 0, + 2, 2, 18, 18, 0, 0, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, + 0, 16, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +}; + +static unsigned char uctype_page0D[256]= +{ + 0, 0, 18, 18, 0, 2, 2, 2, 2, 2, 2, 2, 2, 0, 2, 2, + 2, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 18, 18, + 18, 18, 18, 18, 0, 0, 18, 18, 18, 0, 18, 18, 18, 18, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, 0, + 2, 2, 0, 0, 0, 0, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 18, 18, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 2, 0, 0, + 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 18, 0, 0, 0, 0, 18, + 18, 18, 18, 18, 18, 0, 18, 0, 18, 18, 18, 18, 18, 18, 18, 18, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 18, 18, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +}; + +static unsigned char uctype_page0E[256]= +{ + 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 18, 2, 2, 18, 18, 18, 18, 18, 18, 18, 0, 0, 0, 0, 16, + 2, 2, 2, 2, 2, 2, 2, 18, 18, 18, 18, 18, 18, 18, 18, 16, + 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 16, 16, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 2, 2, 0, 2, 0, 0, 2, 2, 0, 2, 0, 0, 2, 0, 0, + 0, 0, 0, 0, 2, 2, 2, 2, 0, 2, 2, 2, 2, 2, 2, 2, + 0, 2, 2, 2, 0, 2, 0, 2, 0, 0, 2, 2, 0, 2, 2, 2, + 2, 18, 2, 2, 18, 18, 18, 18, 18, 18, 0, 18, 18, 2, 0, 0, + 2, 2, 2, 2, 2, 0, 2, 0, 18, 18, 18, 18, 18, 18, 0, 0, + 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 0, 0, 2, 2, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +}; + +static unsigned char uctype_page0F[256]= +{ + 2, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 18, 18, 16, 16, 16, 16, 16, 16, + 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 20, 20, 20, 20, 20, 20, + 20, 20, 20, 20, 16, 18, 16, 18, 16, 18, 16, 16, 16, 16, 18, 18, + 2, 2, 2, 2, 2, 2, 2, 2, 0, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, + 0, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, + 18, 18, 18, 18, 18, 16, 18, 18, 2, 2, 2, 2, 0, 0, 0, 0, + 18, 18, 18, 18, 18, 18, 18, 18, 0, 18, 18, 18, 18, 18, 18, 18, + 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, + 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 0, 16, 16, + 16, 16, 16, 16, 16, 16, 18, 16, 16, 16, 16, 16, 16, 0, 0, 16, + 16, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +}; + +static unsigned char uctype_page10[256]= +{ + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 0, 2, 2, 2, 2, 2, 0, 2, 2, 0, 18, 18, 18, 18, + 18, 18, 18, 0, 0, 0, 18, 18, 18, 18, 0, 0, 0, 0, 0, 0, + 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 16, 16, 16, 16, 16, 16, + 2, 2, 2, 2, 2, 2, 18, 18, 18, 18, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 16, 2, 0, 0, 0 +}; + +static unsigned char uctype_page11[256]= +{ + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0 +}; + +static unsigned char uctype_page12[256]= +{ + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 2, 2, 2, 2, 0, 0, + 2, 2, 2, 2, 2, 2, 2, 0, 2, 0, 2, 2, 2, 2, 0, 0, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 2, 2, 2, 2, 0, 0, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 0, 2, 2, 2, 2, 0, 0, 2, 2, 2, 2, 2, 2, 2, 0, + 2, 0, 2, 2, 2, 2, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 0, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2 +}; + +static unsigned char uctype_page13[256]= +{ + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 0, 2, 2, 2, 2, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 18, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 20, 20, 20, 20, 20, 20, 20, + 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 0, 0, 0, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 0, 0, 0, 0, 0, 0, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +}; + +static unsigned char uctype_page14[256]= +{ + 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2 +}; + +static unsigned char uctype_page16[256]= +{ + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 16, 16, 2, + 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 8, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 16, 16, 0, 0, 0, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 16, 16, 16, 7, 7, + 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +}; + +static unsigned char uctype_page17[256]= +{ + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 2, 2, + 2, 2, 18, 18, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 18, 18, 18, 16, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 18, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 2, 2, + 2, 0, 18, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 32, 32, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, + 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, + 18, 18, 18, 18, 16, 16, 16, 2, 16, 16, 16, 16, 2, 18, 0, 0, + 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 0, 0, 0, 0, 0, 0, + 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 0, 0, 0, 0, 0, 0 +}; + +static unsigned char uctype_page18[256]= +{ + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 18, 18, 18, 8, 0, + 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 0, 0, 0, 0, 0, 0, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 18, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +}; + +static unsigned char uctype_page19[256]= +{ + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, + 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 0, 0, 0, 0, + 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 0, 0, 0, 0, + 16, 0, 0, 0, 16, 16, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, + 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, + 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, + 18, 2, 2, 2, 2, 2, 2, 2, 18, 18, 0, 0, 0, 0, 0, 0, + 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 0, 0, 0, 0, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16 +}; + +static unsigned char uctype_page1A[256]= +{ + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 18, 18, 18, 18, 18, 0, 0, 16, 16, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +}; + +static unsigned char uctype_page1B[256]= +{ + 18, 18, 18, 18, 18, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, + 18, 18, 18, 18, 18, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, + 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 18, 18, 18, 18, 18, + 18, 18, 18, 18, 16, 16, 16, 16, 16, 16, 16, 16, 16, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +}; + +static unsigned char uctype_page1D[256]= +{ + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 18, 18 +}; + +static unsigned char uctype_page1E[256]= +{ + 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, + 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, + 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, + 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, + 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, + 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, + 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, + 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, + 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, + 1, 2, 1, 2, 1, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, + 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, + 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, + 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, + 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, + 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, + 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 0, 0, 0, 0, 0, 0 +}; + +static unsigned char uctype_page1F[256]= +{ + 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, + 2, 2, 2, 2, 2, 2, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, + 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, + 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, + 2, 2, 2, 2, 2, 2, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, + 2, 2, 2, 2, 2, 2, 2, 2, 0, 1, 0, 1, 0, 1, 0, 1, + 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, + 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, + 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, + 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, + 2, 2, 2, 2, 2, 0, 2, 2, 1, 1, 1, 1, 1, 16, 2, 16, + 16, 16, 2, 2, 2, 0, 2, 2, 1, 1, 1, 1, 1, 16, 16, 16, + 2, 2, 2, 2, 0, 0, 2, 2, 1, 1, 1, 1, 0, 16, 16, 16, + 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 16, 16, 16, + 0, 0, 2, 2, 2, 0, 2, 2, 1, 1, 1, 1, 1, 16, 16, 0 +}; + +static unsigned char uctype_page20[256]= +{ + 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 32, 32, 32, 32, 32, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 8, 8, 32, 32, 32, 32, 32, 8, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 8, + 32, 32, 32, 32, 0, 0, 0, 0, 0, 0, 32, 32, 32, 32, 32, 32, + 20, 2, 0, 0, 20, 20, 20, 20, 20, 20, 16, 16, 16, 16, 16, 2, + 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 16, 16, 16, 16, 16, 0, + 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, + 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +}; + +static unsigned char uctype_page21[256]= +{ + 16, 16, 1, 16, 16, 16, 16, 1, 16, 16, 2, 1, 1, 1, 2, 2, + 1, 1, 1, 2, 16, 1, 16, 16, 16, 1, 1, 1, 1, 1, 16, 16, + 16, 16, 16, 16, 1, 16, 1, 16, 1, 16, 1, 1, 1, 1, 16, 2, + 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 16, 16, 2, 2, 1, 1, + 16, 16, 16, 16, 16, 1, 2, 2, 2, 2, 16, 16, 16, 16, 2, 0, + 0, 0, 0, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 1, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16 +}; + +static unsigned char uctype_page23[256]= +{ + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +}; + +static unsigned char uctype_page24[256]= +{ + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, + 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, + 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, + 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 20, 20, 20, 20, 20, 20, + 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20 +}; + +static unsigned char uctype_page26[256]= +{ + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 0, 0, 0, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +}; + +static unsigned char uctype_page27[256]= +{ + 0, 16, 16, 16, 16, 0, 16, 16, 16, 16, 0, 0, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 0, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 0, 16, 0, 16, + 16, 16, 16, 0, 0, 0, 16, 0, 16, 16, 16, 16, 16, 16, 16, 0, + 0, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, + 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, + 20, 20, 20, 20, 16, 0, 0, 0, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 0, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 0, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 0, 0, 0, 0, 0, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 0, 0, 0, 0, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16 +}; + +static unsigned char uctype_page2B[256]= +{ + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 0, 0, 0, 0, 0, + 16, 16, 16, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +}; + +static unsigned char uctype_page2C[256]= +{ + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, + 1, 2, 1, 1, 1, 2, 2, 1, 2, 1, 2, 1, 2, 0, 0, 0, + 0, 0, 0, 0, 2, 1, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, + 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, + 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, + 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, + 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, + 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, + 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, + 1, 2, 1, 2, 2, 16, 16, 16, 16, 16, 16, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 16, 16, 16, 20, 16, 16 +}; + +static unsigned char uctype_page2D[256]= +{ + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 2, 2, 2, 2, 2, 2, 2, 0, 2, 2, 2, 2, 2, 2, 2, 0, + 2, 2, 2, 2, 2, 2, 2, 0, 2, 2, 2, 2, 2, 2, 2, 0, + 2, 2, 2, 2, 2, 2, 2, 0, 2, 2, 2, 2, 2, 2, 2, 0, + 2, 2, 2, 2, 2, 2, 2, 0, 2, 2, 2, 2, 2, 2, 2, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +}; + +static unsigned char uctype_page2E[256]= +{ + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 0, 0, 0, 0, 16, 16, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 0, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +}; + +static unsigned char uctype_page2F[256]= +{ + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 0, 0, 0, 0 +}; + +static unsigned char uctype_page30[256]= +{ + 8, 16, 16, 16, 16, 2, 2, 7, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 7, 7, 7, 7, 7, 7, 7, 7, 7, 18, 18, 18, 18, 18, 18, + 16, 2, 2, 2, 2, 2, 16, 16, 7, 7, 7, 2, 2, 16, 16, 16, + 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 0, 0, 18, 18, 16, 16, 2, 2, 2, + 16, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 16, 2, 2, 2, 2 +}; + +static unsigned char uctype_page31[256]= +{ + 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, + 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, + 16, 16, 20, 20, 20, 20, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2 +}; + +static unsigned char uctype_page32[256]= +{ + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 0, + 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 16, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 0 +}; + +static unsigned char uctype_page4D[256]= +{ + 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16 +}; + +static unsigned char uctype_page9F[256]= +{ + 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +}; + +static unsigned char uctype_pageA4[256]= +{ + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +}; + +static unsigned char uctype_pageA7[256]= +{ + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 2, 2, 2, 2, 0, 0, 0, 0, 0, + 16, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +}; + +static unsigned char uctype_pageA8[256]= +{ + 2, 2, 18, 2, 2, 2, 18, 2, 2, 2, 2, 18, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 18, 18, 18, 18, 18, 16, 16, 16, 16, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 16, 16, 16, 16, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +}; + +static unsigned char uctype_pageD7[256]= +{ + 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +}; + +static unsigned char uctype_pageD8[256]= +{ + 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +}; + +static unsigned char uctype_pageDB[256]= +{ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, + 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32 +}; + +static unsigned char uctype_pageDC[256]= +{ + 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +}; + +static unsigned char uctype_pageDF[256]= +{ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32 +}; + +static unsigned char uctype_pageE0[256]= +{ + 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +}; + +static unsigned char uctype_pageF8[256]= +{ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32 +}; + +static unsigned char uctype_pageFA[256]= +{ + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +}; + +static unsigned char uctype_pageFB[256]= +{ + 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 2, 18, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 16, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 0, 2, 2, 2, 2, 2, 0, 2, 0, + 2, 2, 0, 2, 2, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2 +}; + +static unsigned char uctype_pageFD[256]= +{ + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 16, 16, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 16, 16, 0, 0 +}; + +static unsigned char uctype_pageFE[256]= +{ + 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 0, 0, 0, 0, 0, 0, + 18, 18, 18, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 0, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 0, 16, 16, 16, 16, 0, 0, 0, 0, + 2, 2, 2, 2, 2, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 32 +}; + +static unsigned char uctype_pageFF[256]= +{ + 0, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 16, 16, 16, 16, 16, 16, + 16, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 16, 16, 16, 16, + 16, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, + 0, 0, 2, 2, 2, 2, 2, 2, 0, 0, 2, 2, 2, 2, 2, 2, + 0, 0, 2, 2, 2, 2, 2, 2, 0, 0, 2, 2, 2, 0, 0, 0, + 16, 16, 16, 16, 16, 16, 16, 0, 16, 16, 16, 16, 16, 16, 16, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 32, 32, 16, 16, 0, 0 +}; + +MY_UNI_CTYPE my_uni_ctype[256]={ + {0,uctype_page00}, + {0,uctype_page01}, + {0,uctype_page02}, + {0,uctype_page03}, + {0,uctype_page04}, + {0,uctype_page05}, + {0,uctype_page06}, + {0,uctype_page07}, + {0,NULL}, + {0,uctype_page09}, + {0,uctype_page0A}, + {0,uctype_page0B}, + {0,uctype_page0C}, + {0,uctype_page0D}, + {0,uctype_page0E}, + {0,uctype_page0F}, + {0,uctype_page10}, + {0,uctype_page11}, + {0,uctype_page12}, + {0,uctype_page13}, + {0,uctype_page14}, + {2,NULL}, + {0,uctype_page16}, + {0,uctype_page17}, + {0,uctype_page18}, + {0,uctype_page19}, + {0,uctype_page1A}, + {0,uctype_page1B}, + {0,NULL}, + {0,uctype_page1D}, + {0,uctype_page1E}, + {0,uctype_page1F}, + {0,uctype_page20}, + {0,uctype_page21}, + {16,NULL}, + {0,uctype_page23}, + {0,uctype_page24}, + {16,NULL}, + {0,uctype_page26}, + {0,uctype_page27}, + {16,NULL}, + {16,NULL}, + {16,NULL}, + {0,uctype_page2B}, + {0,uctype_page2C}, + {0,uctype_page2D}, + {0,uctype_page2E}, + {0,uctype_page2F}, + {0,uctype_page30}, + {0,uctype_page31}, + {0,uctype_page32}, + {16,NULL}, + {3,NULL}, + {3,NULL}, + {3,NULL}, + {3,NULL}, + {3,NULL}, + {3,NULL}, + {3,NULL}, + {3,NULL}, + {3,NULL}, + {3,NULL}, + {3,NULL}, + {3,NULL}, + {3,NULL}, + {3,NULL}, + {3,NULL}, + {3,NULL}, + {3,NULL}, + {3,NULL}, + {3,NULL}, + {3,NULL}, + {3,NULL}, + {3,NULL}, + {3,NULL}, + {3,NULL}, + {3,NULL}, + {0,uctype_page4D}, + {3,NULL}, + {3,NULL}, + {3,NULL}, + {3,NULL}, + {3,NULL}, + {3,NULL}, + {3,NULL}, + {3,NULL}, + {3,NULL}, + {3,NULL}, + {3,NULL}, + {3,NULL}, + {3,NULL}, + {3,NULL}, + {3,NULL}, + {3,NULL}, + {3,NULL}, + {3,NULL}, + {3,NULL}, + {3,NULL}, + {3,NULL}, + {3,NULL}, + {3,NULL}, + {3,NULL}, + {3,NULL}, + {3,NULL}, + {3,NULL}, + {3,NULL}, + {3,NULL}, + {3,NULL}, + {3,NULL}, + {3,NULL}, + {3,NULL}, + {3,NULL}, + {3,NULL}, + {3,NULL}, + {3,NULL}, + {3,NULL}, + {3,NULL}, + {3,NULL}, + {3,NULL}, + {3,NULL}, + {3,NULL}, + {3,NULL}, + {3,NULL}, + {3,NULL}, + {3,NULL}, + {3,NULL}, + {3,NULL}, + {3,NULL}, + {3,NULL}, + {3,NULL}, + {3,NULL}, + {3,NULL}, + {3,NULL}, + {3,NULL}, + {3,NULL}, + {3,NULL}, + {3,NULL}, + {3,NULL}, + {3,NULL}, + {3,NULL}, + {3,NULL}, + {3,NULL}, + {3,NULL}, + {3,NULL}, + {3,NULL}, + {3,NULL}, + {3,NULL}, + {3,NULL}, + {3,NULL}, + {3,NULL}, + {3,NULL}, + {3,NULL}, + {3,NULL}, + {3,NULL}, + {3,NULL}, + {3,NULL}, + {3,NULL}, + {3,NULL}, + {3,NULL}, + {0,uctype_page9F}, + {2,NULL}, + {2,NULL}, + {2,NULL}, + {2,NULL}, + {0,uctype_pageA4}, + {0,NULL}, + {0,NULL}, + {0,uctype_pageA7}, + {0,uctype_pageA8}, + {0,NULL}, + {0,NULL}, + {0,NULL}, + {3,NULL}, + {3,NULL}, + {3,NULL}, + {3,NULL}, + {3,NULL}, + {3,NULL}, + {3,NULL}, + {3,NULL}, + {3,NULL}, + {3,NULL}, + {3,NULL}, + {3,NULL}, + {3,NULL}, + {3,NULL}, + {3,NULL}, + {3,NULL}, + {3,NULL}, + {3,NULL}, + {3,NULL}, + {3,NULL}, + {3,NULL}, + {3,NULL}, + {3,NULL}, + {3,NULL}, + {3,NULL}, + {3,NULL}, + {3,NULL}, + {3,NULL}, + {3,NULL}, + {3,NULL}, + {3,NULL}, + {3,NULL}, + {3,NULL}, + {3,NULL}, + {3,NULL}, + {3,NULL}, + {3,NULL}, + {3,NULL}, + {3,NULL}, + {3,NULL}, + {3,NULL}, + {3,NULL}, + {3,NULL}, + {0,uctype_pageD7}, + {0,uctype_pageD8}, + {0,NULL}, + {0,NULL}, + {0,uctype_pageDB}, + {0,uctype_pageDC}, + {0,NULL}, + {0,NULL}, + {0,uctype_pageDF}, + {0,uctype_pageE0}, + {0,NULL}, + {0,NULL}, + {0,NULL}, + {0,NULL}, + {0,NULL}, + {0,NULL}, + {0,NULL}, + {0,NULL}, + {0,NULL}, + {0,NULL}, + {0,NULL}, + {0,NULL}, + {0,NULL}, + {0,NULL}, + {0,NULL}, + {0,NULL}, + {0,NULL}, + {0,NULL}, + {0,NULL}, + {0,NULL}, + {0,NULL}, + {0,NULL}, + {0,NULL}, + {0,uctype_pageF8}, + {2,NULL}, + {0,uctype_pageFA}, + {0,uctype_pageFB}, + {2,NULL}, + {0,uctype_pageFD}, + {0,uctype_pageFE}, + {0,uctype_pageFF} +}; + + +#endif /* MY_UCTYPE_INCLUDED */ diff --git a/EQ2/source/depends/mariadb-10.1.19/include/my_user.h b/EQ2/source/depends/mariadb-10.1.19/include/my_user.h new file mode 100644 index 000000000..404996e99 --- /dev/null +++ b/EQ2/source/depends/mariadb-10.1.19/include/my_user.h @@ -0,0 +1,35 @@ +/* Copyright (c) 2005-2007 MySQL AB + Use is subject to license terms + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; version 2 of the License. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA */ + +/* + This is a header for libraries containing functions used in both server and + only some of clients (but not in libmysql)... +*/ + +#ifndef _my_user_h_ +#define _my_user_h_ + +#include + +C_MODE_START + +int parse_user(const char *user_id_str, size_t user_id_len, + char *user_name_str, size_t *user_name_len, + char *host_name_str, size_t *host_name_len); + +C_MODE_END + +#endif /* _my_user_h_ */ diff --git a/EQ2/source/depends/mariadb-10.1.19/include/my_valgrind.h b/EQ2/source/depends/mariadb-10.1.19/include/my_valgrind.h new file mode 100644 index 000000000..4531ec78f --- /dev/null +++ b/EQ2/source/depends/mariadb-10.1.19/include/my_valgrind.h @@ -0,0 +1,43 @@ +/* Copyright (C) 2010 Monty Program Ab + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; version 2 of the License. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ + +#ifdef HAVE_valgrind +#define IF_VALGRIND(A,B) A +#else +#define IF_VALGRIND(A,B) B +#endif + +#if defined(HAVE_VALGRIND) && defined(HAVE_valgrind) +# include +# define MEM_UNDEFINED(a,len) VALGRIND_MAKE_MEM_UNDEFINED(a,len) +# define MEM_NOACCESS(a,len) VALGRIND_MAKE_MEM_NOACCESS(a,len) +# define MEM_CHECK_ADDRESSABLE(a,len) VALGRIND_CHECK_MEM_IS_ADDRESSABLE(a,len) +# define MEM_CHECK_DEFINED(a,len) VALGRIND_CHECK_MEM_IS_DEFINED(a,len) +#else /* HAVE_VALGRIND */ +# define MEM_UNDEFINED(a,len) ((void) 0) +# define MEM_NOACCESS(a,len) ((void) 0) +# define MEM_CHECK_ADDRESSABLE(a,len) ((void) 0) +# define MEM_CHECK_DEFINED(a,len) ((void) 0) +#endif /* HAVE_VALGRIND */ + +#ifndef DBUG_OFF +#define TRASH_FILL(A,B,C) do { const size_t trash_tmp= (B); memset(A, C, trash_tmp); MEM_UNDEFINED(A, trash_tmp); } while (0) +#else +#define TRASH_FILL(A,B,C) do{ const size_t trash_tmp __attribute__((unused)) = (B) ; MEM_CHECK_ADDRESSABLE(A,trash_tmp);MEM_UNDEFINED(A,trash_tmp);} while (0) +#endif +#define TRASH_ALLOC(A,B) TRASH_FILL(A,B,0xA5) +#define TRASH_FREE(A,B) TRASH_FILL(A,B,0x8F) +#define TRASH(A,B) TRASH_FREE(A,B) + diff --git a/EQ2/source/depends/mariadb-10.1.19/include/my_xml.h b/EQ2/source/depends/mariadb-10.1.19/include/my_xml.h new file mode 100644 index 000000000..cd7665df9 --- /dev/null +++ b/EQ2/source/depends/mariadb-10.1.19/include/my_xml.h @@ -0,0 +1,97 @@ +/* Copyright (c) 2000, 2002, 2003, 2005, 2007 MySQL AB + Use is subject to license terms + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; version 2 of the License. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA */ + + +#ifndef _my_xml_h +#define _my_xml_h + +#ifdef __cplusplus +extern "C" { +#endif + + +#define MY_XML_OK 0 +#define MY_XML_ERROR 1 + +/* + A flag whether to use absolute tag names in call-back functions, + like "a", "a.b" and "a.b.c" (used in character set file parser), + or relative names like "a", "b" and "c". +*/ +#define MY_XML_FLAG_RELATIVE_NAMES 1 + +/* + A flag whether to skip normilization of text values before calling + call-back functions: i.e. skip leading/trailing spaces, + \r, \n, \t characters. +*/ +#define MY_XML_FLAG_SKIP_TEXT_NORMALIZATION 2 + +enum my_xml_node_type +{ + MY_XML_NODE_TAG, /* can have TAG, ATTR and TEXT children */ + MY_XML_NODE_ATTR, /* can have TEXT children */ + MY_XML_NODE_TEXT /* cannot have children */ +}; + +typedef struct xml_stack_st +{ + int flags; + enum my_xml_node_type current_node_type; + char errstr[128]; + + struct { + char static_buffer[128]; + char *buffer; + size_t buffer_size; + char *start; + char *end; + } attr; + + const char *beg; + const char *cur; + const char *end; + void *user_data; + int (*enter)(struct xml_stack_st *st,const char *val, size_t len); + int (*value)(struct xml_stack_st *st,const char *val, size_t len); + int (*leave_xml)(struct xml_stack_st *st,const char *val, size_t len); +} MY_XML_PARSER; + +void my_xml_parser_create(MY_XML_PARSER *st); +void my_xml_parser_free(MY_XML_PARSER *st); +int my_xml_parse(MY_XML_PARSER *st,const char *str, size_t len); + +void my_xml_set_value_handler(MY_XML_PARSER *st, int (*)(MY_XML_PARSER *, + const char *, + size_t len)); +void my_xml_set_enter_handler(MY_XML_PARSER *st, int (*)(MY_XML_PARSER *, + const char *, + size_t len)); +void my_xml_set_leave_handler(MY_XML_PARSER *st, int (*)(MY_XML_PARSER *, + const char *, + size_t len)); +void my_xml_set_user_data(MY_XML_PARSER *st, void *); + +size_t my_xml_error_pos(MY_XML_PARSER *st); +uint my_xml_error_lineno(MY_XML_PARSER *st); + +const char *my_xml_error_string(MY_XML_PARSER *st); + +#ifdef __cplusplus +} +#endif + +#endif /* _my_xml_h */ diff --git a/EQ2/source/depends/mariadb-10.1.19/include/myisam.h b/EQ2/source/depends/mariadb-10.1.19/include/myisam.h new file mode 100644 index 000000000..f7a3ae8cc --- /dev/null +++ b/EQ2/source/depends/mariadb-10.1.19/include/myisam.h @@ -0,0 +1,438 @@ +/* + Copyright (c) 2000, 2013, Oracle and/or its affiliates. + Copyright (c) 2009, 2013, Monty Program Ab. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; version 2 of the License. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ + +/* This file should be included when using myisam_funktions */ + +#ifndef _myisam_h +#define _myisam_h +#ifdef __cplusplus +extern "C" { +#endif + +#include +#include +#include "keycache.h" +#include "my_compare.h" +#include +#include +#include +/* + Limit max keys according to HA_MAX_POSSIBLE_KEY; See myisamchk.h for details +*/ + +#if MAX_INDEXES > HA_MAX_POSSIBLE_KEY +#define MI_MAX_KEY HA_MAX_POSSIBLE_KEY /* Max allowed keys */ +#else +#define MI_MAX_KEY MAX_INDEXES /* Max allowed keys */ +#endif + +#define MI_MAX_POSSIBLE_KEY_BUFF HA_MAX_POSSIBLE_KEY_BUFF +/* + The following defines can be increased if necessary. + But beware the dependency of MI_MAX_POSSIBLE_KEY_BUFF and MI_MAX_KEY_LENGTH. +*/ +#define MI_MAX_KEY_LENGTH 1000 /* Max length in bytes */ +#define MI_MAX_KEY_SEG 16 /* Max segments for key */ + +#define MI_NAME_IEXT ".MYI" +#define MI_NAME_DEXT ".MYD" + +/* Possible values for myisam_block_size (must be power of 2) */ +#define MI_KEY_BLOCK_LENGTH 1024 /* default key block length */ +#define MI_MIN_KEY_BLOCK_LENGTH 1024 /* Min key block length */ +#define MI_MAX_KEY_BLOCK_LENGTH 16384 + +/* + In the following macros '_keyno_' is 0 .. keys-1. + If there can be more keys than bits in the key_map, the highest bit + is for all upper keys. They cannot be switched individually. + This means that clearing of high keys is ignored, setting one high key + sets all high keys. +*/ +#define MI_KEYMAP_BITS (8 * SIZEOF_LONG_LONG) +#define MI_KEYMAP_HIGH_MASK (1ULL << (MI_KEYMAP_BITS - 1)) +#define mi_get_mask_all_keys_active(_keys_) \ + (((_keys_) < MI_KEYMAP_BITS) ? \ + ((1ULL << (_keys_)) - 1ULL) : \ + (~ 0ULL)) + +#if MI_MAX_KEY > MI_KEYMAP_BITS + +#define mi_is_key_active(_keymap_,_keyno_) \ + (((_keyno_) < MI_KEYMAP_BITS) ? \ + MY_TEST((_keymap_) & (1ULL << (_keyno_))) : \ + MY_TEST((_keymap_) & MI_KEYMAP_HIGH_MASK)) +#define mi_set_key_active(_keymap_,_keyno_) \ + (_keymap_)|= (((_keyno_) < MI_KEYMAP_BITS) ? \ + (1ULL << (_keyno_)) : \ + MI_KEYMAP_HIGH_MASK) +#define mi_clear_key_active(_keymap_,_keyno_) \ + (_keymap_)&= (((_keyno_) < MI_KEYMAP_BITS) ? \ + (~ (1ULL << (_keyno_))) : \ + (~ (0ULL)) /*ignore*/ ) + +#else + +#define mi_is_key_active(_keymap_,_keyno_) \ + MY_TEST((_keymap_) & (1ULL << (_keyno_))) +#define mi_set_key_active(_keymap_,_keyno_) \ + (_keymap_)|= (1ULL << (_keyno_)) +#define mi_clear_key_active(_keymap_,_keyno_) \ + (_keymap_)&= (~ (1ULL << (_keyno_))) + +#endif + +#define mi_is_any_key_active(_keymap_) \ + MY_TEST((_keymap_)) +#define mi_is_all_keys_active(_keymap_,_keys_) \ + ((_keymap_) == mi_get_mask_all_keys_active(_keys_)) +#define mi_set_all_keys_active(_keymap_,_keys_) \ + (_keymap_)= mi_get_mask_all_keys_active(_keys_) +#define mi_clear_all_keys_active(_keymap_) \ + (_keymap_)= 0 +#define mi_intersect_keys_active(_to_,_from_) \ + (_to_)&= (_from_) +#define mi_is_any_intersect_keys_active(_keymap1_,_keys_,_keymap2_) \ + ((_keymap1_) & (_keymap2_) & \ + mi_get_mask_all_keys_active(_keys_)) +#define mi_copy_keys_active(_to_,_maxkeys_,_from_) \ + (_to_)= (mi_get_mask_all_keys_active(_maxkeys_) & \ + (_from_)) + + /* Param to/from mi_info */ + +typedef struct st_mi_isaminfo /* Struct from h_info */ +{ + ha_rows records; /* Records in database */ + ha_rows deleted; /* Deleted records in database */ + my_off_t recpos; /* Pos for last used record */ + my_off_t newrecpos; /* Pos if we write new record */ + my_off_t dupp_key_pos; /* Position to record with dupp key */ + my_off_t data_file_length, /* Length of data file */ + max_data_file_length, + index_file_length, + max_index_file_length, + delete_length; + ulong reclength; /* Recordlength */ + ulong mean_reclength; /* Mean recordlength (if packed) */ + ulonglong auto_increment; + ulonglong key_map; /* Which keys are used */ + char *data_file_name, *index_file_name; + uint keys; /* Number of keys in use */ + uint options; /* HA_OPTION_... used */ + int errkey, /* With key was dupplicated on err */ + sortkey; /* clustered by this key */ + File filenr; /* (uniq) filenr for datafile */ + time_t create_time; /* When table was created */ + time_t check_time; + time_t update_time; + uint reflength; + ulong record_offset; + ulong *rec_per_key; /* for sql optimizing */ +} MI_ISAMINFO; + + +typedef struct st_mi_create_info +{ + const char *index_file_name, *data_file_name; /* If using symlinks */ + ha_rows max_rows; + ha_rows reloc_rows; + ulonglong auto_increment; + ulonglong data_file_length; + ulonglong key_file_length; + uint old_options; + uint16 language; + my_bool with_auto_increment; +} MI_CREATE_INFO; + +struct st_myisam_info; /* For referense */ +struct st_mi_isam_share; +typedef struct st_myisam_info MI_INFO; +struct st_mi_s_param; + +typedef struct st_mi_keydef /* Key definition with open & info */ +{ + struct st_mi_isam_share *share; /* Pointer to base (set in mi_open) */ + uint16 keysegs; /* Number of key-segment */ + uint16 flag; /* NOSAME, PACK_USED */ + + uint8 key_alg; /* BTREE, RTREE */ + uint16 block_length; /* Length of keyblock (auto) */ + uint16 underflow_block_length; /* When to execute underflow */ + uint16 keylength; /* Tot length of keyparts (auto) */ + uint16 minlength; /* min length of (packed) key (auto) */ + uint16 maxlength; /* max length of (packed) key (auto) */ + uint16 block_size_index; /* block_size (auto) */ + uint32 version; /* For concurrent read/write */ + uint32 ftkey_nr; /* full-text index number */ + + HA_KEYSEG *seg,*end; + struct st_mysql_ftparser *parser; /* Fulltext [pre]parser */ + int (*bin_search)(struct st_myisam_info *info,struct st_mi_keydef *keyinfo, + uchar *page,uchar *key, + uint key_len,uint comp_flag,uchar * *ret_pos, + uchar *buff, my_bool *was_last_key); + uint (*get_key)(struct st_mi_keydef *keyinfo,uint nod_flag,uchar * *page, + uchar *key); + int (*pack_key)(struct st_mi_keydef *keyinfo,uint nod_flag,uchar *next_key, + uchar *org_key, uchar *prev_key, uchar *key, + struct st_mi_s_param *s_temp); + void (*store_key)(struct st_mi_keydef *keyinfo, uchar *key_pos, + struct st_mi_s_param *s_temp); + int (*ck_insert)(struct st_myisam_info *inf, uint k_nr, uchar *k, uint klen); + int (*ck_delete)(struct st_myisam_info *inf, uint k_nr, uchar *k, uint klen); +} MI_KEYDEF; + + +#define MI_UNIQUE_HASH_LENGTH 4 + +typedef struct st_unique_def /* Segment definition of unique */ +{ + uint16 keysegs; /* Number of key-segment */ + uchar key; /* Mapped to which key */ + uint8 null_are_equal; + HA_KEYSEG *seg,*end; +} MI_UNIQUEDEF; + +typedef struct st_mi_decode_tree /* Decode huff-table */ +{ + uint16 *table; + uint quick_table_bits; + uchar *intervalls; +} MI_DECODE_TREE; + + +struct st_mi_bit_buff; + +/* + Note that null markers should always be first in a row ! + When creating a column, one should only specify: + type, length, null_bit and null_pos +*/ + +typedef struct st_columndef /* column information */ +{ + enum en_fieldtype type; + uint16 length; /* length of field */ + uint32 offset; /* Offset to position in row */ + uint8 null_bit; /* If column may be 0 */ + uint16 null_pos; /* position for null marker */ + +#ifndef NOT_PACKED_DATABASES + void (*unpack)(struct st_columndef *rec,struct st_mi_bit_buff *buff, + uchar *start,uchar *end); + enum en_fieldtype base_type; + uint space_length_bits,pack_type; + MI_DECODE_TREE *huff_tree; +#endif +} MI_COLUMNDEF; + +extern char * myisam_log_filename; /* Name of logfile */ +extern ulong myisam_block_size; +extern ulong myisam_concurrent_insert; +extern my_bool myisam_flush,myisam_delay_key_write,myisam_single_user; +extern my_off_t myisam_max_temp_length; +extern ulong myisam_data_pointer_size; + +/* usually used to check if a symlink points into the mysql data home */ +/* which is normally forbidden */ +extern int (*myisam_test_invalid_symlink)(const char *filename); +extern ulonglong myisam_mmap_size, myisam_mmap_used; +extern mysql_mutex_t THR_LOCK_myisam_mmap; + + /* Prototypes for myisam-functions */ + +extern int mi_close(struct st_myisam_info *file); +extern int mi_delete(struct st_myisam_info *file,const uchar *buff); +extern struct st_myisam_info *mi_open(const char *name,int mode, + uint wait_if_locked); +extern int mi_panic(enum ha_panic_function function); +extern int mi_rfirst(struct st_myisam_info *file,uchar *buf,int inx); +extern int mi_rkey(MI_INFO *info, uchar *buf, int inx, const uchar *key, + key_part_map keypart_map, enum ha_rkey_function search_flag); +extern int mi_rlast(struct st_myisam_info *file,uchar *buf,int inx); +extern int mi_rnext(struct st_myisam_info *file,uchar *buf,int inx); +extern int mi_rnext_same(struct st_myisam_info *info, uchar *buf); +extern int mi_rprev(struct st_myisam_info *file,uchar *buf,int inx); +extern int mi_rrnd(struct st_myisam_info *file,uchar *buf, my_off_t pos); +extern int mi_scan_init(struct st_myisam_info *file); +extern int mi_scan(struct st_myisam_info *file,uchar *buf); +extern int mi_rsame(struct st_myisam_info *file,uchar *record,int inx); +extern int mi_rsame_with_pos(struct st_myisam_info *file,uchar *record, + int inx, my_off_t pos); +extern int mi_update(struct st_myisam_info *file,const uchar *old, + uchar *new_record); +extern int mi_write(struct st_myisam_info *file,uchar *buff); +extern my_off_t mi_position(struct st_myisam_info *file); +extern int mi_status(struct st_myisam_info *info, MI_ISAMINFO *x, uint flag); +extern int mi_lock_database(struct st_myisam_info *file,int lock_type); +extern int mi_create(const char *name,uint keys,MI_KEYDEF *keydef, + uint columns, MI_COLUMNDEF *columndef, + uint uniques, MI_UNIQUEDEF *uniquedef, + MI_CREATE_INFO *create_info, uint flags); +extern int mi_delete_table(const char *name); +extern int mi_rename(const char *from, const char *to); +extern int mi_extra(struct st_myisam_info *file, + enum ha_extra_function function, + void *extra_arg); +extern int mi_reset(struct st_myisam_info *file); +extern ha_rows mi_records_in_range(MI_INFO *info,int inx, + key_range *min_key, key_range *max_key); +extern int mi_log(int activate_log); +extern int mi_is_changed(struct st_myisam_info *info); +extern int mi_delete_all_rows(struct st_myisam_info *info); +extern ulong _mi_calc_blob_length(uint length , const uchar *pos); +extern uint mi_get_pointer_length(ulonglong file_length, uint def); +extern int mi_make_backup_of_index(struct st_myisam_info *info, + time_t backup_time, myf flags); +#define myisam_max_key_length() HA_MAX_KEY_LENGTH +#define myisam_max_key_segments() HA_MAX_KEY_SEG + +#define MEMMAP_EXTRA_MARGIN 7 /* Write this as a suffix for mmap file */ +/* this is used to pass to mysql_myisamchk_table */ + +#define MYISAMCHK_REPAIR 1 /* equivalent to myisamchk -r */ +#define MYISAMCHK_VERIFY 2 /* Verify, run repair if failure */ + +typedef uint mi_bit_type; + +typedef struct st_mi_bit_buff +{ /* Used for packing of record */ + mi_bit_type current_byte; + uint bits; + uchar *pos, *end, *blob_pos, *blob_end; + uint error; +} MI_BIT_BUFF; + +typedef struct st_sort_info +{ + /* sync things */ + mysql_mutex_t mutex; + mysql_cond_t cond; + MI_INFO *info; + HA_CHECK *param; + uchar *buff; + SORT_KEY_BLOCKS *key_block, *key_block_end; + SORT_FT_BUF *ft_buf; + my_off_t filelength, dupp, buff_length; + ha_rows max_records; + uint current_key, total_keys; + volatile uint got_error; + uint threads_running; + myf myf_rw; + enum data_file_type new_data_file_type; +} MI_SORT_INFO; + +typedef struct st_mi_sort_param +{ + pthread_t thr; + IO_CACHE read_cache, tempfile, tempfile_for_exceptions; + DYNAMIC_ARRAY buffpek; + MI_BIT_BUFF bit_buff; /* For parallel repair of packrec. */ + + MI_KEYDEF *keyinfo; + MI_SORT_INFO *sort_info; + HA_KEYSEG *seg; + uchar **sort_keys; + uchar *rec_buff; + void *wordlist, *wordptr; + MEM_ROOT wordroot; + uchar *record; + MY_TMPDIR *tmpdir; + + /* + The next two are used to collect statistics, see update_key_parts for + description. + */ + ulonglong unique[HA_MAX_KEY_SEG+1]; + ulonglong notnull[HA_MAX_KEY_SEG+1]; + + my_off_t pos,max_pos,filepos,start_recpos; + uint key, key_length,real_key_length; + uint maxbuffers, find_length; + ulonglong sortbuff_size; + ha_rows keys; + my_bool fix_datafile, master; + my_bool calc_checksum; /* calculate table checksum */ + + int (*key_cmp)(struct st_mi_sort_param *, const void *, const void *); + int (*key_read)(struct st_mi_sort_param *,void *); + int (*key_write)(struct st_mi_sort_param *, const void *); + void (*lock_in_memory)(HA_CHECK *); + int (*write_keys)(struct st_mi_sort_param *, register uchar **, + ulonglong , struct st_buffpek *, IO_CACHE *); + my_off_t (*read_to_buffer)(IO_CACHE *,struct st_buffpek *, uint); + int (*write_key)(struct st_mi_sort_param *, IO_CACHE *,uchar *, + uint, ulonglong); +} MI_SORT_PARAM; + +/* functions in mi_check */ +void myisamchk_init(HA_CHECK *param); +int chk_status(HA_CHECK *param, MI_INFO *info); +int chk_del(HA_CHECK *param, register MI_INFO *info, ulonglong test_flag); +int chk_size(HA_CHECK *param, MI_INFO *info); +int chk_key(HA_CHECK *param, MI_INFO *info); +int chk_data_link(HA_CHECK *param, MI_INFO *info, my_bool extend); +int mi_repair(HA_CHECK *param, register MI_INFO *info, + char * name, int rep_quick); +int mi_sort_index(HA_CHECK *param, register MI_INFO *info, char * name); +int mi_repair_by_sort(HA_CHECK *param, register MI_INFO *info, + const char * name, int rep_quick); +int mi_repair_parallel(HA_CHECK *param, register MI_INFO *info, + const char * name, int rep_quick); +int change_to_newfile(const char * filename, const char * old_ext, + const char * new_ext, time_t backup_time, myf myflags); +int lock_file(HA_CHECK *param, File file, my_off_t start, int lock_type, + const char *filetype, const char *filename); +void lock_memory(HA_CHECK *param); +void update_auto_increment_key(HA_CHECK *param, MI_INFO *info, + my_bool repair); +int update_state_info(HA_CHECK *param, MI_INFO *info,uint update); +void update_key_parts(MI_KEYDEF *keyinfo, ulong *rec_per_key_part, + ulonglong *unique, ulonglong *notnull, + ulonglong records); +int filecopy(HA_CHECK *param, File to,File from,my_off_t start, + my_off_t length, const char *type); +int movepoint(MI_INFO *info,uchar *record,my_off_t oldpos, + my_off_t newpos, uint prot_key); +int write_data_suffix(MI_SORT_INFO *sort_info, my_bool fix_datafile); +int test_if_almost_full(MI_INFO *info); +int recreate_table(HA_CHECK *param, MI_INFO **org_info, char *filename); +void mi_disable_non_unique_index(MI_INFO *info, ha_rows rows); +my_bool mi_test_if_sort_rep(MI_INFO *info, ha_rows rows, ulonglong key_map, + my_bool force); + +int mi_init_bulk_insert(MI_INFO *info, size_t cache_size, ha_rows rows); +void mi_flush_bulk_insert(MI_INFO *info, uint inx); +void mi_end_bulk_insert(MI_INFO *info); +int mi_assign_to_key_cache(MI_INFO *info, ulonglong key_map, + KEY_CACHE *key_cache); +void mi_change_key_cache(KEY_CACHE *old_key_cache, + KEY_CACHE *new_key_cache); +int mi_preload(MI_INFO *info, ulonglong key_map, my_bool ignore_leaves); + +int write_data_suffix(MI_SORT_INFO *sort_info, my_bool fix_datafile); +int flush_pending_blocks(MI_SORT_PARAM *param); +int sort_ft_buf_flush(MI_SORT_PARAM *sort_param); +int thr_write_keys(MI_SORT_PARAM *sort_param); +int sort_write_record(MI_SORT_PARAM *sort_param); +int _create_index_by_sort(MI_SORT_PARAM *info,my_bool no_messages, ulonglong); + +#ifdef __cplusplus +} +#endif +#endif diff --git a/EQ2/source/depends/mariadb-10.1.19/include/myisamchk.h b/EQ2/source/depends/mariadb-10.1.19/include/myisamchk.h new file mode 100644 index 000000000..64724de17 --- /dev/null +++ b/EQ2/source/depends/mariadb-10.1.19/include/myisamchk.h @@ -0,0 +1,147 @@ +/* Copyright (C) 2006 MySQL AB + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ + +/* Definitions needed for myisamchk/mariachk.c */ + +/* + Entries marked as "QQ to be removed" are NOT used to + pass check/repair options to xxx_check.c. They are used + internally by xxxchk.c or/and ha_xxxx.cc and should NOT + be stored together with other flags. They should be removed + from the following list to make addition of new flags possible. +*/ + +#ifndef _myisamchk_h +#define _myisamchk_h + +/* + Flags used by xxxxchk.c or/and ha_xxxx.cc that are NOT passed + to xxxcheck.c follows: +*/ + +#define TT_USEFRM 1 +#define TT_FOR_UPGRADE 2 +#define TT_FROM_MYSQL 4 + +/* Bits set in out_flag */ +#define O_NEW_DATA 2 +#define O_DATA_LOST 4 + +typedef struct st_sort_key_blocks /* Used when sorting */ +{ + uchar *buff, *end_pos; + uchar lastkey[HA_MAX_POSSIBLE_KEY_BUFF]; + uint last_length; + int inited; +} SORT_KEY_BLOCKS; + + +/* + MARIA/MYISAM supports several statistics collection + methods. Currently statistics collection method is not stored in + MARIA file and has to be specified for each table analyze/repair + operation in MI_CHECK::stats_method. +*/ + +typedef enum +{ + /* Treat NULLs as inequal when collecting statistics (default for 4.1/5.0) */ + MI_STATS_METHOD_NULLS_NOT_EQUAL, + /* Treat NULLs as equal when collecting statistics (like 4.0 did) */ + MI_STATS_METHOD_NULLS_EQUAL, + /* Ignore NULLs - count only tuples without NULLs in the index components */ + MI_STATS_METHOD_IGNORE_NULLS +} enum_handler_stats_method; + + +typedef struct st_handler_check_param +{ + char *isam_file_name; + MY_TMPDIR *tmpdir; + void *thd; + const char *db_name, *table_name, *op_name; + ulonglong auto_increment_value; + ulonglong max_data_file_length; + ulonglong keys_in_use; + ulonglong max_record_length; + /* + The next two are used to collect statistics, see update_key_parts for + description. + */ + ulonglong unique_count[HA_MAX_KEY_SEG + 1]; + ulonglong notnull_count[HA_MAX_KEY_SEG + 1]; + + my_off_t search_after_block; + my_off_t new_file_pos, key_file_blocks; + my_off_t keydata, totaldata, key_blocks, start_check_pos; + my_off_t used, empty, splits, del_length, link_used, lost; + ha_rows total_records, total_deleted, records,del_blocks; + ha_rows full_page_count, tail_count; + ha_checksum record_checksum, glob_crc; + ha_checksum key_crc[HA_MAX_POSSIBLE_KEY]; + ha_checksum tmp_key_crc[HA_MAX_POSSIBLE_KEY]; + ha_checksum tmp_record_checksum; + ulonglong org_key_map; + ulonglong testflag; + + /* Following is used to check if rows are visible */ + ulonglong max_trid, max_found_trid; + ulonglong not_visible_rows_found; + ulonglong sort_buffer_length; + ulonglong use_buffers; /* Used as param to getopt() */ + size_t read_buffer_length, write_buffer_length, sort_key_blocks; + time_t backup_time; /* To sign backup files */ + ulong rec_per_key_part[HA_MAX_KEY_SEG * HA_MAX_POSSIBLE_KEY]; + double new_rec_per_key_part[HA_MAX_KEY_SEG * HA_MAX_POSSIBLE_KEY]; + uint out_flag, warning_printed, error_printed, note_printed, verbose; + uint opt_sort_key, total_files, max_level; + uint key_cache_block_size, pagecache_block_size; + int tmpfile_createflag, err_count; + myf myf_rw; + uint16 language; + my_bool using_global_keycache, opt_lock_memory, opt_follow_links; + my_bool retry_repair, force_sort, calc_checksum, static_row_size; + char temp_filename[FN_REFLEN]; + IO_CACHE read_cache; + enum_handler_stats_method stats_method; + /* For reporting progress */ + uint stage, max_stage; + uint progress_counter; /* How often to call _report_progress() */ + ulonglong progress, max_progress; + + mysql_mutex_t print_msg_mutex; + my_bool need_print_msg_lock; + myf malloc_flags; +} HA_CHECK; + + +typedef struct st_sort_ftbuf +{ + uchar *buf, *end; + int count; + uchar lastkey[HA_MAX_KEY_BUFF]; +} SORT_FT_BUF; + + +typedef struct st_buffpek { + my_off_t file_pos; /* Where we are in the sort file */ + uchar *base, *key; /* Key pointers */ + ha_rows count; /* Number of rows in table */ + ha_rows mem_count; /* Numbers of keys in memory */ + ha_rows max_keys; /* Max keys in buffert */ +} BUFFPEK; + +#endif /* _myisamchk_h */ diff --git a/EQ2/source/depends/mariadb-10.1.19/include/myisammrg.h b/EQ2/source/depends/mariadb-10.1.19/include/myisammrg.h new file mode 100644 index 000000000..892935379 --- /dev/null +++ b/EQ2/source/depends/mariadb-10.1.19/include/myisammrg.h @@ -0,0 +1,125 @@ +/* Copyright (c) 2000-2002, 2004, 2006-2008 MySQL AB, 2009 Sun Microsystems, Inc. + Use is subject to license terms. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; version 2 of the License. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ + +/* This file should be included when using merge_isam_funktions */ + +#ifndef _myisammrg_h +#define _myisammrg_h +#ifdef __cplusplus +extern "C" { +#endif + +#ifndef _my_base_h +#include +#endif +#ifndef _myisam_h +#include +#endif + +#include + +#define MYRG_NAME_EXT ".MRG" +#define MYRG_NAME_TMPEXT ".MRG_TMP" + +/* In which table to INSERT rows */ +#define MERGE_INSERT_DISABLED 0 +#define MERGE_INSERT_TO_FIRST 1 +#define MERGE_INSERT_TO_LAST 2 + +extern TYPELIB merge_insert_method; + + /* Param to/from myrg_info */ + +typedef struct st_mymerge_info /* Struct from h_info */ +{ + ulonglong records; /* Records in database */ + ulonglong deleted; /* Deleted records in database */ + ulonglong recpos; /* Pos for last used record */ + ulonglong data_file_length; + ulonglong dupp_key_pos; /* Offset of the Duplicate key in the merge table */ + uint reclength; /* Recordlength */ + int errkey; /* With key was dupplicated on err */ + uint options; /* HA_OPTION_... used */ + ulong *rec_per_key; /* for sql optimizing */ +} MYMERGE_INFO; + +typedef struct st_myrg_table_info +{ + struct st_myisam_info *table; + ulonglong file_offset; +} MYRG_TABLE; + +typedef struct st_myrg_info +{ + MYRG_TABLE *open_tables,*current_table,*end_table,*last_used_table; + ulonglong records; /* records in tables */ + ulonglong del; /* Removed records */ + ulonglong data_file_length; + ulong cache_size; + uint merge_insert_method; + uint tables,options,reclength,keys; + my_bool cache_in_use; + /* If MERGE children attached to parent. See top comment in ha_myisammrg.cc */ + my_bool children_attached; + LIST open_list; + QUEUE by_key; + ulong *rec_per_key_part; /* for sql optimizing */ + mysql_mutex_t mutex; +} MYRG_INFO; + + + /* Prototypes for merge-functions */ + +extern int myrg_close(MYRG_INFO *file); +extern int myrg_delete(MYRG_INFO *file,const uchar *buff); +extern MYRG_INFO *myrg_open(const char *name,int mode,int wait_if_locked); +extern MYRG_INFO *myrg_parent_open(const char *parent_name, + int (*callback)(void*, const char*), + void *callback_param); +extern int myrg_attach_children(MYRG_INFO *m_info, int handle_locking, + MI_INFO *(*callback)(void*), + void *callback_param, + my_bool *need_compat_check); +extern int myrg_detach_children(MYRG_INFO *m_info); +extern int myrg_panic(enum ha_panic_function function); +extern int myrg_rfirst(MYRG_INFO *file,uchar *buf,int inx); +extern int myrg_rlast(MYRG_INFO *file,uchar *buf,int inx); +extern int myrg_rnext(MYRG_INFO *file,uchar *buf,int inx); +extern int myrg_rprev(MYRG_INFO *file,uchar *buf,int inx); +extern int myrg_rnext_same(MYRG_INFO *file,uchar *buf); +extern int myrg_rkey(MYRG_INFO *info,uchar *buf,int inx, const uchar *key, + key_part_map keypart_map, enum ha_rkey_function search_flag); +extern int myrg_rrnd(MYRG_INFO *file,uchar *buf,ulonglong pos); +extern int myrg_rsame(MYRG_INFO *file,uchar *record,int inx); +extern int myrg_update(MYRG_INFO *file,const uchar *old,uchar *new_rec); +extern int myrg_write(MYRG_INFO *info,uchar *rec); +extern int myrg_status(MYRG_INFO *file,MYMERGE_INFO *x,int flag); +extern int myrg_lock_database(MYRG_INFO *file,int lock_type); +extern int myrg_create(const char *name, const char **table_names, + uint insert_method, my_bool fix_names); +extern int myrg_extra(MYRG_INFO *file,enum ha_extra_function function, + void *extra_arg); +extern int myrg_reset(MYRG_INFO *info); +extern void myrg_extrafunc(MYRG_INFO *info,invalidator_by_filename inv); +extern ha_rows myrg_records_in_range(MYRG_INFO *info, int inx, + key_range *min_key, key_range *max_key); +extern ha_rows myrg_records(MYRG_INFO *info); + +extern ulonglong myrg_position(MYRG_INFO *info); +#ifdef __cplusplus +} +#endif +#endif diff --git a/EQ2/source/depends/mariadb-10.1.19/include/myisampack.h b/EQ2/source/depends/mariadb-10.1.19/include/myisampack.h new file mode 100644 index 000000000..0795455dc --- /dev/null +++ b/EQ2/source/depends/mariadb-10.1.19/include/myisampack.h @@ -0,0 +1,243 @@ +#ifndef MYISAMPACK_INCLUDED +#define MYISAMPACK_INCLUDED + +/* Copyright (c) 2000-2002, 2004 MySQL AB, 2009 Sun Microsystems, Inc. + Use is subject to license terms. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; version 2 of the License. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ + +/* + Storing of values in high byte first order. + + integer keys and file pointers are stored with high byte first to get + better compression +*/ + +/* these two are for uniformity */ +#define mi_sint1korr(A) ((int8)(*A)) +#define mi_uint1korr(A) ((uint8)(*A)) + +#define mi_sint2korr(A) ((int16) (((int16) (((const uchar*) (A))[1])) +\ + ((int16) ((int16) ((const char*) (A))[0]) << 8))) +#define mi_sint3korr(A) ((int32) (((((const uchar*) (A))[0]) & 128) ? \ + (((uint32) 255L << 24) | \ + (((uint32) ((const uchar*) (A))[0]) << 16) |\ + (((uint32) ((const uchar*) (A))[1]) << 8) | \ + ((uint32) ((const uchar*) (A))[2])) : \ + (((uint32) ((const uchar*) (A))[0]) << 16) |\ + (((uint32) ((const uchar*) (A))[1]) << 8) | \ + ((uint32) ((const uchar*) (A))[2]))) +#define mi_sint4korr(A) ((int32) (((int32) (((const uchar*) (A))[3])) +\ + ((int32) (((const uchar*) (A))[2]) << 8) +\ + ((int32) (((const uchar*) (A))[1]) << 16) +\ + ((int32) ((int16) ((const char*) (A))[0]) << 24))) +#define mi_sint8korr(A) ((longlong) mi_uint8korr(A)) +#define mi_uint2korr(A) ((uint16) (((uint16) (((const uchar*) (A))[1])) +\ + ((uint16) (((const uchar*) (A))[0]) << 8))) +#define mi_uint3korr(A) ((uint32) (((uint32) (((const uchar*) (A))[2])) +\ + (((uint32) (((const uchar*) (A))[1])) << 8) +\ + (((uint32) (((const uchar*) (A))[0])) << 16))) +#define mi_uint4korr(A) ((uint32) (((uint32) (((const uchar*) (A))[3])) +\ + (((uint32) (((const uchar*) (A))[2])) << 8) +\ + (((uint32) (((const uchar*) (A))[1])) << 16) +\ + (((uint32) (((const uchar*) (A))[0])) << 24))) +#define mi_uint5korr(A) ((ulonglong)(((uint32) (((const uchar*) (A))[4])) +\ + (((uint32) (((const uchar*) (A))[3])) << 8) +\ + (((uint32) (((const uchar*) (A))[2])) << 16) +\ + (((uint32) (((const uchar*) (A))[1])) << 24)) +\ + (((ulonglong) (((const uchar*) (A))[0])) << 32)) +#define mi_uint6korr(A) ((ulonglong)(((uint32) (((const uchar*) (A))[5])) +\ + (((uint32) (((const uchar*) (A))[4])) << 8) +\ + (((uint32) (((const uchar*) (A))[3])) << 16) +\ + (((uint32) (((const uchar*) (A))[2])) << 24)) +\ + (((ulonglong) (((uint32) (((const uchar*) (A))[1])) +\ + (((uint32) (((const uchar*) (A))[0]) << 8)))) <<\ + 32)) +#define mi_uint7korr(A) ((ulonglong)(((uint32) (((const uchar*) (A))[6])) +\ + (((uint32) (((const uchar*) (A))[5])) << 8) +\ + (((uint32) (((const uchar*) (A))[4])) << 16) +\ + (((uint32) (((const uchar*) (A))[3])) << 24)) +\ + (((ulonglong) (((uint32) (((const uchar*) (A))[2])) +\ + (((uint32) (((const uchar*) (A))[1])) << 8) +\ + (((uint32) (((const uchar*) (A))[0])) << 16))) <<\ + 32)) +#define mi_uint8korr(A) ((ulonglong)(((uint32) (((const uchar*) (A))[7])) +\ + (((uint32) (((const uchar*) (A))[6])) << 8) +\ + (((uint32) (((const uchar*) (A))[5])) << 16) +\ + (((uint32) (((const uchar*) (A))[4])) << 24)) +\ + (((ulonglong) (((uint32) (((const uchar*) (A))[3])) +\ + (((uint32) (((const uchar*) (A))[2])) << 8) +\ + (((uint32) (((const uchar*) (A))[1])) << 16) +\ + (((uint32) (((const uchar*) (A))[0])) << 24))) <<\ + 32)) + +/* This one is for uniformity */ +#define mi_int1store(T,A) *((uchar*)(T))= (uchar) (A) + +#define mi_int2store(T,A) { uint def_temp= (uint) (A) ;\ + ((uchar*) (T))[1]= (uchar) (def_temp);\ + ((uchar*) (T))[0]= (uchar) (def_temp >> 8); } +#define mi_int3store(T,A) { /*lint -save -e734 */\ + ulong def_temp= (ulong) (A);\ + ((uchar*) (T))[2]= (uchar) (def_temp);\ + ((uchar*) (T))[1]= (uchar) (def_temp >> 8);\ + ((uchar*) (T))[0]= (uchar) (def_temp >> 16);\ + /*lint -restore */} +#define mi_int4store(T,A) { ulong def_temp= (ulong) (A);\ + ((uchar*) (T))[3]= (uchar) (def_temp);\ + ((uchar*) (T))[2]= (uchar) (def_temp >> 8);\ + ((uchar*) (T))[1]= (uchar) (def_temp >> 16);\ + ((uchar*) (T))[0]= (uchar) (def_temp >> 24); } +#define mi_int5store(T,A) { ulong def_temp= (ulong) (A),\ + def_temp2= (ulong) ((A) >> 32);\ + ((uchar*) (T))[4]= (uchar) (def_temp);\ + ((uchar*) (T))[3]= (uchar) (def_temp >> 8);\ + ((uchar*) (T))[2]= (uchar) (def_temp >> 16);\ + ((uchar*) (T))[1]= (uchar) (def_temp >> 24);\ + ((uchar*) (T))[0]= (uchar) (def_temp2); } +#define mi_int6store(T,A) { ulong def_temp= (ulong) (A),\ + def_temp2= (ulong) ((A) >> 32);\ + ((uchar*) (T))[5]= (uchar) (def_temp);\ + ((uchar*) (T))[4]= (uchar) (def_temp >> 8);\ + ((uchar*) (T))[3]= (uchar) (def_temp >> 16);\ + ((uchar*) (T))[2]= (uchar) (def_temp >> 24);\ + ((uchar*) (T))[1]= (uchar) (def_temp2);\ + ((uchar*) (T))[0]= (uchar) (def_temp2 >> 8); } +#define mi_int7store(T,A) { ulong def_temp= (ulong) (A),\ + def_temp2= (ulong) ((A) >> 32);\ + ((uchar*) (T))[6]= (uchar) (def_temp);\ + ((uchar*) (T))[5]= (uchar) (def_temp >> 8);\ + ((uchar*) (T))[4]= (uchar) (def_temp >> 16);\ + ((uchar*) (T))[3]= (uchar) (def_temp >> 24);\ + ((uchar*) (T))[2]= (uchar) (def_temp2);\ + ((uchar*) (T))[1]= (uchar) (def_temp2 >> 8);\ + ((uchar*) (T))[0]= (uchar) (def_temp2 >> 16); } +#define mi_int8store(T,A) { ulong def_temp3= (ulong) (A),\ + def_temp4= (ulong) ((A) >> 32);\ + mi_int4store((uchar*) (T) + 0, def_temp4);\ + mi_int4store((uchar*) (T) + 4, def_temp3); } + +#ifdef WORDS_BIGENDIAN + +#define mi_float4store(T,A) { ((uchar*) (T))[0]= ((uchar*) &A)[0];\ + ((uchar*) (T))[1]= ((uchar*) &A)[1];\ + ((uchar*) (T))[2]= ((uchar*) &A)[2];\ + ((uchar*) (T))[3]= ((uchar*) &A)[3]; } + +#define mi_float4get(V,M) { float def_temp;\ + ((uchar*) &def_temp)[0]= ((const uchar*) (M))[0];\ + ((uchar*) &def_temp)[1]= ((const uchar*) (M))[1]; \ + ((uchar*) &def_temp)[2]= ((const uchar*) (M))[2];\ + ((uchar*) &def_temp)[3]= ((const uchar*) (M))[3];\ + (V)= def_temp; } + +#define mi_float8store(T,V) { ((uchar*) (T))[0]= ((const uchar*) &V)[0];\ + ((uchar*) (T))[1]= ((const uchar*) &V)[1];\ + ((uchar*) (T))[2]= ((const uchar*) &V)[2];\ + ((uchar*) (T))[3]= ((const uchar*) &V)[3];\ + ((uchar*) (T))[4]= ((const uchar*) &V)[4];\ + ((uchar*) (T))[5]= ((const uchar*) &V)[5];\ + ((uchar*) (T))[6]= ((const uchar*) &V)[6];\ + ((uchar*) (T))[7]= ((const uchar*) &V)[7]; } + +#define mi_float8get(V,M) { double def_temp;\ + ((uchar*) &def_temp)[0]= ((const uchar*) (M))[0];\ + ((uchar*) &def_temp)[1]= ((const uchar*) (M))[1];\ + ((uchar*) &def_temp)[2]= ((const uchar*) (M))[2];\ + ((uchar*) &def_temp)[3]= ((const uchar*) (M))[3];\ + ((uchar*) &def_temp)[4]= ((const uchar*) (M))[4];\ + ((uchar*) &def_temp)[5]= ((const uchar*) (M))[5];\ + ((uchar*) &def_temp)[6]= ((const uchar*) (M))[6];\ + ((uchar*) &def_temp)[7]= ((const uchar*) (M))[7]; \ + (V)= def_temp; } +#else + +#define mi_float4store(T,A) { ((uchar*) (T))[0]= ((const uchar*) &A)[3];\ + ((uchar*) (T))[1]= ((const uchar*) &A)[2];\ + ((uchar*) (T))[2]= ((const uchar*) &A)[1];\ + ((uchar*) (T))[3]= ((const uchar*) &A)[0]; } + +#define mi_float4get(V,M) { float def_temp;\ + ((uchar*) &def_temp)[0]= ((const uchar*) (M))[3];\ + ((uchar*) &def_temp)[1]= ((const uchar*) (M))[2];\ + ((uchar*) &def_temp)[2]= ((const uchar*) (M))[1];\ + ((uchar*) &def_temp)[3]= ((const uchar*) (M))[0];\ + (V)= def_temp; } + +#if defined(__FLOAT_WORD_ORDER) && (__FLOAT_WORD_ORDER == __BIG_ENDIAN) +#define mi_float8store(T,V) { ((uchar*) (T))[0]= ((const uchar*) &V)[3];\ + ((uchar*) (T))[1]= ((const uchar*) &V)[2];\ + ((uchar*) (T))[2]= ((const uchar*) &V)[1];\ + ((uchar*) (T))[3]= ((const uchar*) &V)[0];\ + ((uchar*) (T))[4]= ((const uchar*) &V)[7];\ + ((uchar*) (T))[5]= ((const uchar*) &V)[6];\ + ((uchar*) (T))[6]= ((const uchar*) &V)[5];\ + ((uchar*) (T))[7]= ((const uchar*) &V)[4];} + +#define mi_float8get(V,M) { double def_temp;\ + ((uchar*) &def_temp)[0]= ((const uchar*) (M))[3];\ + ((uchar*) &def_temp)[1]= ((const uchar*) (M))[2];\ + ((uchar*) &def_temp)[2]= ((const uchar*) (M))[1];\ + ((uchar*) &def_temp)[3]= ((const uchar*) (M))[0];\ + ((uchar*) &def_temp)[4]= ((const uchar*) (M))[7];\ + ((uchar*) &def_temp)[5]= ((const uchar*) (M))[6];\ + ((uchar*) &def_temp)[6]= ((const uchar*) (M))[5];\ + ((uchar*) &def_temp)[7]= ((const uchar*) (M))[4];\ + (V)= def_temp; } + +#else +#define mi_float8store(T,V) { ((uchar*) (T))[0]= ((const uchar*) &V)[7];\ + ((uchar*) (T))[1]= ((const uchar*) &V)[6];\ + ((uchar*) (T))[2]= ((const uchar*) &V)[5];\ + ((uchar*) (T))[3]= ((const uchar*) &V)[4];\ + ((uchar*) (T))[4]= ((const uchar*) &V)[3];\ + ((uchar*) (T))[5]= ((const uchar*) &V)[2];\ + ((uchar*) (T))[6]= ((const uchar*) &V)[1];\ + ((uchar*) (T))[7]= ((const uchar*) &V)[0];} + +#define mi_float8get(V,M) { double def_temp;\ + ((uchar*) &def_temp)[0]= ((const uchar*) (M))[7];\ + ((uchar*) &def_temp)[1]= ((const uchar*) (M))[6];\ + ((uchar*) &def_temp)[2]= ((const uchar*) (M))[5];\ + ((uchar*) &def_temp)[3]= ((const uchar*) (M))[4];\ + ((uchar*) &def_temp)[4]= ((const uchar*) (M))[3];\ + ((uchar*) &def_temp)[5]= ((const uchar*) (M))[2];\ + ((uchar*) &def_temp)[6]= ((const uchar*) (M))[1];\ + ((uchar*) &def_temp)[7]= ((const uchar*) (M))[0];\ + (V)= def_temp; } +#endif /* __FLOAT_WORD_ORDER */ +#endif /* WORDS_BIGENDIAN */ + +/* Fix to avoid warnings when sizeof(ha_rows) == sizeof(long) */ + +#ifdef BIG_TABLES +#define mi_rowstore(T,A) mi_int8store(T, A) +#define mi_rowkorr(T) mi_uint8korr(T) +#else +#define mi_rowstore(T,A) { mi_int4store(T, 0);\ + mi_int4store(((uchar*) (T) + 4), A); } +#define mi_rowkorr(T) mi_uint4korr((const uchar*) (T) + 4) +#endif + +#if SIZEOF_OFF_T > 4 +#define mi_sizestore(T,A) mi_int8store(T, A) +#define mi_sizekorr(T) mi_uint8korr(T) +#else +#define mi_sizestore(T,A) { if ((A) == HA_OFFSET_ERROR)\ + bfill((char*) (T), 8, 255);\ + else { mi_int4store((T), 0);\ + mi_int4store(((T) + 4), A); }} +#define mi_sizekorr(T) mi_uint4korr((const uchar*) (T) + 4) +#endif +#endif /* MYISAMPACK_INCLUDED */ diff --git a/EQ2/source/depends/mariadb-10.1.19/include/mysql.h b/EQ2/source/depends/mariadb-10.1.19/include/mysql.h new file mode 100644 index 000000000..f088ad668 --- /dev/null +++ b/EQ2/source/depends/mariadb-10.1.19/include/mysql.h @@ -0,0 +1,892 @@ +/* + Copyright (c) 2000, 2012, Oracle and/or its affiliates. + Copyright (c) 2012, Monty Program Ab. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; version 2 of the License. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ + +/* + This file defines the client API to MySQL and also the ABI of the + dynamically linked libmysqlclient. + + The ABI should never be changed in a released product of MySQL, + thus you need to take great care when changing the file. In case + the file is changed so the ABI is broken, you must also update + the SHARED_LIB_MAJOR_VERSION in cmake/mysql_version.cmake +*/ + +#ifndef _mysql_h +#define _mysql_h + +#ifdef _AIX /* large-file support will break without this */ +#include +#endif + +#ifdef __CYGWIN__ /* CYGWIN implements a UNIX API */ +#undef WIN +#undef _WIN +#undef _WIN32 +#undef _WIN64 +#undef __WIN__ +#endif + +#ifdef __cplusplus +extern "C" { +#endif + +#ifndef MY_GLOBAL_INCLUDED /* If not standard header */ +#ifndef MYSQL_ABI_CHECK +#include +#endif +typedef char my_bool; +#if (defined(_WIN32) || defined(_WIN64)) && !defined(__WIN__) +#define __WIN__ +#endif +#if !defined(__WIN__) +#define STDCALL +#else +#define STDCALL __stdcall +#endif + +#ifndef my_socket_defined +#if defined (_WIN64) +#define my_socket unsigned long long +#elif defined (_WIN32) +#define my_socket unsigned int +#else +typedef int my_socket; +#endif /* _WIN64 */ +#endif /* my_socket_defined */ +#endif /* MY_GLOBAL_INCLUDED */ + +#include "mysql_version.h" +#include "mysql_com.h" +#include "mysql_time.h" + +#include "my_list.h" /* for LISTs used in 'MYSQL' and 'MYSQL_STMT' */ + +extern unsigned int mariadb_deinitialize_ssl; +extern unsigned int mysql_port; +extern char *mysql_unix_port; + +#define CLIENT_NET_READ_TIMEOUT (365*24*3600) /* Timeout on read */ +#define CLIENT_NET_WRITE_TIMEOUT (365*24*3600) /* Timeout on write */ + +#define IS_PRI_KEY(n) ((n) & PRI_KEY_FLAG) +#define IS_NOT_NULL(n) ((n) & NOT_NULL_FLAG) +#define IS_BLOB(n) ((n) & BLOB_FLAG) +/** + Returns true if the value is a number which does not need quotes for + the sql_lex.cc parser to parse correctly. +*/ +#define IS_NUM(t) (((t) <= MYSQL_TYPE_INT24 && (t) != MYSQL_TYPE_TIMESTAMP) || (t) == MYSQL_TYPE_YEAR || (t) == MYSQL_TYPE_NEWDECIMAL) +#define IS_LONGDATA(t) ((t) >= MYSQL_TYPE_TINY_BLOB && (t) <= MYSQL_TYPE_STRING) + + +typedef struct st_mysql_field { + char *name; /* Name of column */ + char *org_name; /* Original column name, if an alias */ + char *table; /* Table of column if column was a field */ + char *org_table; /* Org table name, if table was an alias */ + char *db; /* Database for table */ + char *catalog; /* Catalog for table */ + char *def; /* Default value (set by mysql_list_fields) */ + unsigned long length; /* Width of column (create length) */ + unsigned long max_length; /* Max width for selected set */ + unsigned int name_length; + unsigned int org_name_length; + unsigned int table_length; + unsigned int org_table_length; + unsigned int db_length; + unsigned int catalog_length; + unsigned int def_length; + unsigned int flags; /* Div flags */ + unsigned int decimals; /* Number of decimals in field */ + unsigned int charsetnr; /* Character set */ + enum enum_field_types type; /* Type of field. See mysql_com.h for types */ + void *extension; +} MYSQL_FIELD; + +typedef char **MYSQL_ROW; /* return data as array of strings */ +typedef unsigned int MYSQL_FIELD_OFFSET; /* offset to current field */ + +#ifndef MY_GLOBAL_INCLUDED +#if defined(NO_CLIENT_LONG_LONG) +typedef unsigned long my_ulonglong; +#elif defined (__WIN__) +typedef unsigned __int64 my_ulonglong; +#else +typedef unsigned long long my_ulonglong; +#endif +#endif + +#include "typelib.h" + +#define MYSQL_COUNT_ERROR (~(my_ulonglong) 0) + +/* backward compatibility define - to be removed eventually */ +#define ER_WARN_DATA_TRUNCATED WARN_DATA_TRUNCATED +#define WARN_PLUGIN_DELETE_BUILTIN ER_PLUGIN_DELETE_BUILTIN + +typedef struct st_mysql_rows { + struct st_mysql_rows *next; /* list of rows */ + MYSQL_ROW data; + unsigned long length; +} MYSQL_ROWS; + +typedef MYSQL_ROWS *MYSQL_ROW_OFFSET; /* offset to current row */ + +#include "my_alloc.h" + +typedef struct embedded_query_result EMBEDDED_QUERY_RESULT; +typedef struct st_mysql_data { + MYSQL_ROWS *data; + struct embedded_query_result *embedded_info; + MEM_ROOT alloc; + my_ulonglong rows; + unsigned int fields; + /* extra info for embedded library */ + void *extension; +} MYSQL_DATA; + +enum mysql_option +{ + MYSQL_OPT_CONNECT_TIMEOUT, MYSQL_OPT_COMPRESS, MYSQL_OPT_NAMED_PIPE, + MYSQL_INIT_COMMAND, MYSQL_READ_DEFAULT_FILE, MYSQL_READ_DEFAULT_GROUP, + MYSQL_SET_CHARSET_DIR, MYSQL_SET_CHARSET_NAME, MYSQL_OPT_LOCAL_INFILE, + MYSQL_OPT_PROTOCOL, MYSQL_SHARED_MEMORY_BASE_NAME, MYSQL_OPT_READ_TIMEOUT, + MYSQL_OPT_WRITE_TIMEOUT, MYSQL_OPT_USE_RESULT, + MYSQL_OPT_USE_REMOTE_CONNECTION, MYSQL_OPT_USE_EMBEDDED_CONNECTION, + MYSQL_OPT_GUESS_CONNECTION, MYSQL_SET_CLIENT_IP, MYSQL_SECURE_AUTH, + MYSQL_REPORT_DATA_TRUNCATION, MYSQL_OPT_RECONNECT, + MYSQL_OPT_SSL_VERIFY_SERVER_CERT, MYSQL_PLUGIN_DIR, MYSQL_DEFAULT_AUTH, + MYSQL_OPT_BIND, + MYSQL_OPT_SSL_KEY, MYSQL_OPT_SSL_CERT, + MYSQL_OPT_SSL_CA, MYSQL_OPT_SSL_CAPATH, MYSQL_OPT_SSL_CIPHER, + MYSQL_OPT_SSL_CRL, MYSQL_OPT_SSL_CRLPATH, + MYSQL_OPT_CONNECT_ATTR_RESET, MYSQL_OPT_CONNECT_ATTR_ADD, + MYSQL_OPT_CONNECT_ATTR_DELETE, + MYSQL_SERVER_PUBLIC_KEY, + MYSQL_ENABLE_CLEARTEXT_PLUGIN, + MYSQL_OPT_CAN_HANDLE_EXPIRED_PASSWORDS, + + /* MariaDB options */ + MYSQL_PROGRESS_CALLBACK=5999, + MYSQL_OPT_NONBLOCK, + MYSQL_OPT_USE_THREAD_SPECIFIC_MEMORY +}; + +/** + @todo remove the "extension", move st_mysql_options completely + out of mysql.h +*/ +struct st_mysql_options_extention; + +struct st_mysql_options { + unsigned int connect_timeout, read_timeout, write_timeout; + unsigned int port, protocol; + unsigned long client_flag; + char *host,*user,*password,*unix_socket,*db; + struct st_dynamic_array *init_commands; + char *my_cnf_file,*my_cnf_group, *charset_dir, *charset_name; + char *ssl_key; /* PEM key file */ + char *ssl_cert; /* PEM cert file */ + char *ssl_ca; /* PEM CA file */ + char *ssl_capath; /* PEM directory of CA-s? */ + char *ssl_cipher; /* cipher to use */ + char *shared_memory_base_name; + unsigned long max_allowed_packet; + my_bool use_ssl; /* if to use SSL or not */ + my_bool compress,named_pipe; + my_bool use_thread_specific_memory; + my_bool unused2; + my_bool unused3; + my_bool unused4; + enum mysql_option methods_to_use; + char *client_ip; + /* Refuse client connecting to server if it uses old (pre-4.1.1) protocol */ + my_bool secure_auth; + /* 0 - never report, 1 - always report (default) */ + my_bool report_data_truncation; + + /* function pointers for local infile support */ + int (*local_infile_init)(void **, const char *, void *); + int (*local_infile_read)(void *, char *, unsigned int); + void (*local_infile_end)(void *); + int (*local_infile_error)(void *, char *, unsigned int); + void *local_infile_userdata; + struct st_mysql_options_extention *extension; +}; + +enum mysql_status +{ + MYSQL_STATUS_READY, MYSQL_STATUS_GET_RESULT, MYSQL_STATUS_USE_RESULT, + MYSQL_STATUS_STATEMENT_GET_RESULT +}; + +enum mysql_protocol_type +{ + MYSQL_PROTOCOL_DEFAULT, MYSQL_PROTOCOL_TCP, MYSQL_PROTOCOL_SOCKET, + MYSQL_PROTOCOL_PIPE, MYSQL_PROTOCOL_MEMORY +}; + +typedef struct character_set +{ + unsigned int number; /* character set number */ + unsigned int state; /* character set state */ + const char *csname; /* collation name */ + const char *name; /* character set name */ + const char *comment; /* comment */ + const char *dir; /* character set directory */ + unsigned int mbminlen; /* min. length for multibyte strings */ + unsigned int mbmaxlen; /* max. length for multibyte strings */ +} MY_CHARSET_INFO; + +struct st_mysql_methods; +struct st_mysql_stmt; + +typedef struct st_mysql +{ + NET net; /* Communication parameters */ + unsigned char *connector_fd; /* ConnectorFd for SSL */ + char *host,*user,*passwd,*unix_socket,*server_version,*host_info; + char *info, *db; + const struct charset_info_st *charset; + MYSQL_FIELD *fields; + MEM_ROOT field_alloc; + my_ulonglong affected_rows; + my_ulonglong insert_id; /* id if insert on table with NEXTNR */ + my_ulonglong extra_info; /* Not used */ + unsigned long thread_id; /* Id for connection in server */ + unsigned long packet_length; + unsigned int port; + unsigned long client_flag,server_capabilities; + unsigned int protocol_version; + unsigned int field_count; + unsigned int server_status; + unsigned int server_language; + unsigned int warning_count; + struct st_mysql_options options; + enum mysql_status status; + my_bool free_me; /* If free in mysql_close */ + my_bool reconnect; /* set to 1 if automatic reconnect */ + + /* session-wide random string */ + char scramble[SCRAMBLE_LENGTH+1]; + my_bool unused1; + void *unused2, *unused3, *unused4, *unused5; + + LIST *stmts; /* list of all statements */ + const struct st_mysql_methods *methods; + void *thd; + /* + Points to boolean flag in MYSQL_RES or MYSQL_STMT. We set this flag + from mysql_stmt_close if close had to cancel result set of this object. + */ + my_bool *unbuffered_fetch_owner; + /* needed for embedded server - no net buffer to store the 'info' */ + char *info_buffer; + void *extension; +} MYSQL; + + +typedef struct st_mysql_res { + my_ulonglong row_count; + MYSQL_FIELD *fields; + MYSQL_DATA *data; + MYSQL_ROWS *data_cursor; + unsigned long *lengths; /* column lengths of current row */ + MYSQL *handle; /* for unbuffered reads */ + const struct st_mysql_methods *methods; + MYSQL_ROW row; /* If unbuffered read */ + MYSQL_ROW current_row; /* buffer to current row */ + MEM_ROOT field_alloc; + unsigned int field_count, current_field; + my_bool eof; /* Used by mysql_fetch_row */ + /* mysql_stmt_close() had to cancel this result */ + my_bool unbuffered_fetch_cancelled; + void *extension; +} MYSQL_RES; + + +#if !defined(MYSQL_SERVER) && !defined(MYSQL_CLIENT) +#define MYSQL_CLIENT +#endif + + +typedef struct st_mysql_parameters +{ + unsigned long *p_max_allowed_packet; + unsigned long *p_net_buffer_length; + void *extension; +} MYSQL_PARAMETERS; + +/* + Flag bits, the asynchronous methods return a combination of these ORed + together to let the application know when to resume the suspended operation. +*/ + +/* + Wait for data to be available on socket to read. + mysql_get_socket_fd() will return socket descriptor. +*/ +#define MYSQL_WAIT_READ 1 +/* Wait for socket to be ready to write data. */ +#define MYSQL_WAIT_WRITE 2 +/* Wait for select() to mark exception on socket. */ +#define MYSQL_WAIT_EXCEPT 4 +/* + Wait until timeout occurs. Value of timeout can be obtained from + mysql_get_timeout_value(). +*/ +#define MYSQL_WAIT_TIMEOUT 8 + +#if !defined(MYSQL_SERVER) && !defined(EMBEDDED_LIBRARY) +#define max_allowed_packet (*mysql_get_parameters()->p_max_allowed_packet) +#define net_buffer_length (*mysql_get_parameters()->p_net_buffer_length) +#endif + +/* + Set up and bring down the server; to ensure that applications will + work when linked against either the standard client library or the + embedded server library, these functions should be called. +*/ +int STDCALL mysql_server_init(int argc, char **argv, char **groups); +void STDCALL mysql_server_end(void); + +/* + mysql_server_init/end need to be called when using libmysqld or + libmysqlclient (exactly, mysql_server_init() is called by mysql_init() so + you don't need to call it explicitely; but you need to call + mysql_server_end() to free memory). The names are a bit misleading + (mysql_SERVER* to be used when using libmysqlCLIENT). So we add more general + names which suit well whether you're using libmysqld or libmysqlclient. We + intend to promote these aliases over the mysql_server* ones. +*/ +#define mysql_library_init mysql_server_init +#define mysql_library_end mysql_server_end + +MYSQL_PARAMETERS *STDCALL mysql_get_parameters(void); + +/* + Set up and bring down a thread; these function should be called + for each thread in an application which opens at least one MySQL + connection. All uses of the connection(s) should be between these + function calls. +*/ +my_bool STDCALL mysql_thread_init(void); +void STDCALL mysql_thread_end(void); + +/* + Functions to get information from the MYSQL and MYSQL_RES structures + Should definitely be used if one uses shared libraries. +*/ + +my_ulonglong STDCALL mysql_num_rows(MYSQL_RES *res); +unsigned int STDCALL mysql_num_fields(MYSQL_RES *res); +my_bool STDCALL mysql_eof(MYSQL_RES *res); +MYSQL_FIELD *STDCALL mysql_fetch_field_direct(MYSQL_RES *res, + unsigned int fieldnr); +MYSQL_FIELD * STDCALL mysql_fetch_fields(MYSQL_RES *res); +MYSQL_ROW_OFFSET STDCALL mysql_row_tell(MYSQL_RES *res); +MYSQL_FIELD_OFFSET STDCALL mysql_field_tell(MYSQL_RES *res); + +unsigned int STDCALL mysql_field_count(MYSQL *mysql); +my_ulonglong STDCALL mysql_affected_rows(MYSQL *mysql); +my_ulonglong STDCALL mysql_insert_id(MYSQL *mysql); +unsigned int STDCALL mysql_errno(MYSQL *mysql); +const char * STDCALL mysql_error(MYSQL *mysql); +const char *STDCALL mysql_sqlstate(MYSQL *mysql); +unsigned int STDCALL mysql_warning_count(MYSQL *mysql); +const char * STDCALL mysql_info(MYSQL *mysql); +unsigned long STDCALL mysql_thread_id(MYSQL *mysql); +const char * STDCALL mysql_character_set_name(MYSQL *mysql); +int STDCALL mysql_set_character_set(MYSQL *mysql, const char *csname); +int STDCALL mysql_set_character_set_start(int *ret, MYSQL *mysql, + const char *csname); +int STDCALL mysql_set_character_set_cont(int *ret, MYSQL *mysql, + int status); + +MYSQL * STDCALL mysql_init(MYSQL *mysql); +my_bool STDCALL mysql_ssl_set(MYSQL *mysql, const char *key, + const char *cert, const char *ca, + const char *capath, const char *cipher); +const char * STDCALL mysql_get_ssl_cipher(MYSQL *mysql); +my_bool STDCALL mysql_change_user(MYSQL *mysql, const char *user, + const char *passwd, const char *db); +int STDCALL mysql_change_user_start(my_bool *ret, MYSQL *mysql, + const char *user, + const char *passwd, + const char *db); +int STDCALL mysql_change_user_cont(my_bool *ret, MYSQL *mysql, + int status); +MYSQL * STDCALL mysql_real_connect(MYSQL *mysql, const char *host, + const char *user, + const char *passwd, + const char *db, + unsigned int port, + const char *unix_socket, + unsigned long clientflag); +int STDCALL mysql_real_connect_start(MYSQL **ret, MYSQL *mysql, + const char *host, + const char *user, + const char *passwd, + const char *db, + unsigned int port, + const char *unix_socket, + unsigned long clientflag); +int STDCALL mysql_real_connect_cont(MYSQL **ret, MYSQL *mysql, + int status); +int STDCALL mysql_select_db(MYSQL *mysql, const char *db); +int STDCALL mysql_select_db_start(int *ret, MYSQL *mysql, + const char *db); +int STDCALL mysql_select_db_cont(int *ret, MYSQL *mysql, + int status); +int STDCALL mysql_query(MYSQL *mysql, const char *q); +int STDCALL mysql_query_start(int *ret, MYSQL *mysql, + const char *q); +int STDCALL mysql_query_cont(int *ret, MYSQL *mysql, + int status); +int STDCALL mysql_send_query(MYSQL *mysql, const char *q, + unsigned long length); +int STDCALL mysql_send_query_start(int *ret, MYSQL *mysql, + const char *q, + unsigned long length); +int STDCALL mysql_send_query_cont(int *ret, MYSQL *mysql, + int status); +int STDCALL mysql_real_query(MYSQL *mysql, const char *q, + unsigned long length); +int STDCALL mysql_real_query_start(int *ret, MYSQL *mysql, + const char *q, + unsigned long length); +int STDCALL mysql_real_query_cont(int *ret, MYSQL *mysql, + int status); +MYSQL_RES * STDCALL mysql_store_result(MYSQL *mysql); +int STDCALL mysql_store_result_start(MYSQL_RES **ret, MYSQL *mysql); +int STDCALL mysql_store_result_cont(MYSQL_RES **ret, MYSQL *mysql, + int status); +MYSQL_RES * STDCALL mysql_use_result(MYSQL *mysql); + +void STDCALL mysql_get_character_set_info(MYSQL *mysql, + MY_CHARSET_INFO *charset); + +/* local infile support */ + +#define LOCAL_INFILE_ERROR_LEN 512 + +void +mysql_set_local_infile_handler(MYSQL *mysql, + int (*local_infile_init)(void **, const char *, + void *), + int (*local_infile_read)(void *, char *, + unsigned int), + void (*local_infile_end)(void *), + int (*local_infile_error)(void *, char*, + unsigned int), + void *); + +void +mysql_set_local_infile_default(MYSQL *mysql); + +int STDCALL mysql_shutdown(MYSQL *mysql, + enum mysql_enum_shutdown_level + shutdown_level); +int STDCALL mysql_shutdown_start(int *ret, MYSQL *mysql, + enum mysql_enum_shutdown_level + shutdown_level); +int STDCALL mysql_shutdown_cont(int *ret, MYSQL *mysql, + int status); +int STDCALL mysql_dump_debug_info(MYSQL *mysql); +int STDCALL mysql_dump_debug_info_start(int *ret, MYSQL *mysql); +int STDCALL mysql_dump_debug_info_cont(int *ret, MYSQL *mysql, + int status); +int STDCALL mysql_refresh(MYSQL *mysql, + unsigned int refresh_options); +int STDCALL mysql_refresh_start(int *ret, MYSQL *mysql, + unsigned int refresh_options); +int STDCALL mysql_refresh_cont(int *ret, MYSQL *mysql, int status); +int STDCALL mysql_kill(MYSQL *mysql,unsigned long pid); +int STDCALL mysql_kill_start(int *ret, MYSQL *mysql, + unsigned long pid); +int STDCALL mysql_kill_cont(int *ret, MYSQL *mysql, int status); +int STDCALL mysql_set_server_option(MYSQL *mysql, + enum enum_mysql_set_option + option); +int STDCALL mysql_set_server_option_start(int *ret, MYSQL *mysql, + enum enum_mysql_set_option + option); +int STDCALL mysql_set_server_option_cont(int *ret, MYSQL *mysql, + int status); +int STDCALL mysql_ping(MYSQL *mysql); +int STDCALL mysql_ping_start(int *ret, MYSQL *mysql); +int STDCALL mysql_ping_cont(int *ret, MYSQL *mysql, int status); +const char * STDCALL mysql_stat(MYSQL *mysql); +int STDCALL mysql_stat_start(const char **ret, MYSQL *mysql); +int STDCALL mysql_stat_cont(const char **ret, MYSQL *mysql, + int status); +const char * STDCALL mysql_get_server_info(MYSQL *mysql); +const char * STDCALL mysql_get_server_name(MYSQL *mysql); +const char * STDCALL mysql_get_client_info(void); +unsigned long STDCALL mysql_get_client_version(void); +const char * STDCALL mysql_get_host_info(MYSQL *mysql); +unsigned long STDCALL mysql_get_server_version(MYSQL *mysql); +unsigned int STDCALL mysql_get_proto_info(MYSQL *mysql); +MYSQL_RES * STDCALL mysql_list_dbs(MYSQL *mysql,const char *wild); +int STDCALL mysql_list_dbs_start(MYSQL_RES **ret, MYSQL *mysql, + const char *wild); +int STDCALL mysql_list_dbs_cont(MYSQL_RES **ret, MYSQL *mysql, + int status); +MYSQL_RES * STDCALL mysql_list_tables(MYSQL *mysql,const char *wild); +int STDCALL mysql_list_tables_start(MYSQL_RES **ret, MYSQL *mysql, + const char *wild); +int STDCALL mysql_list_tables_cont(MYSQL_RES **ret, MYSQL *mysql, + int status); +MYSQL_RES * STDCALL mysql_list_processes(MYSQL *mysql); +int STDCALL mysql_list_processes_start(MYSQL_RES **ret, + MYSQL *mysql); +int STDCALL mysql_list_processes_cont(MYSQL_RES **ret, MYSQL *mysql, + int status); +int STDCALL mysql_options(MYSQL *mysql,enum mysql_option option, + const void *arg); +int STDCALL mysql_options4(MYSQL *mysql,enum mysql_option option, + const void *arg1, const void *arg2); +void STDCALL mysql_free_result(MYSQL_RES *result); +int STDCALL mysql_free_result_start(MYSQL_RES *result); +int STDCALL mysql_free_result_cont(MYSQL_RES *result, int status); +void STDCALL mysql_data_seek(MYSQL_RES *result, + my_ulonglong offset); +MYSQL_ROW_OFFSET STDCALL mysql_row_seek(MYSQL_RES *result, + MYSQL_ROW_OFFSET offset); +MYSQL_FIELD_OFFSET STDCALL mysql_field_seek(MYSQL_RES *result, + MYSQL_FIELD_OFFSET offset); +MYSQL_ROW STDCALL mysql_fetch_row(MYSQL_RES *result); +int STDCALL mysql_fetch_row_start(MYSQL_ROW *ret, + MYSQL_RES *result); +int STDCALL mysql_fetch_row_cont(MYSQL_ROW *ret, MYSQL_RES *result, + int status); +unsigned long * STDCALL mysql_fetch_lengths(MYSQL_RES *result); +MYSQL_FIELD * STDCALL mysql_fetch_field(MYSQL_RES *result); +MYSQL_RES * STDCALL mysql_list_fields(MYSQL *mysql, const char *table, + const char *wild); +int STDCALL mysql_list_fields_start(MYSQL_RES **ret, MYSQL *mysql, + const char *table, + const char *wild); +int STDCALL mysql_list_fields_cont(MYSQL_RES **ret, MYSQL *mysql, + int status); +unsigned long STDCALL mysql_escape_string(char *to,const char *from, + unsigned long from_length); +unsigned long STDCALL mysql_hex_string(char *to,const char *from, + unsigned long from_length); +unsigned long STDCALL mysql_real_escape_string(MYSQL *mysql, + char *to,const char *from, + unsigned long length); +void STDCALL mysql_debug(const char *debug); +void STDCALL myodbc_remove_escape(MYSQL *mysql,char *name); +unsigned int STDCALL mysql_thread_safe(void); +my_bool STDCALL mysql_embedded(void); +my_bool STDCALL mariadb_connection(MYSQL *mysql); +my_bool STDCALL mysql_read_query_result(MYSQL *mysql); +int STDCALL mysql_read_query_result_start(my_bool *ret, + MYSQL *mysql); +int STDCALL mysql_read_query_result_cont(my_bool *ret, + MYSQL *mysql, int status); + + +/* + The following definitions are added for the enhanced + client-server protocol +*/ + +/* statement state */ +enum enum_mysql_stmt_state +{ + MYSQL_STMT_INIT_DONE= 1, MYSQL_STMT_PREPARE_DONE, MYSQL_STMT_EXECUTE_DONE, + MYSQL_STMT_FETCH_DONE +}; + + +/* + This structure is used to define bind information, and + internally by the client library. + Public members with their descriptions are listed below + (conventionally `On input' refers to the binds given to + mysql_stmt_bind_param, `On output' refers to the binds given + to mysql_stmt_bind_result): + + buffer_type - One of the MYSQL_* types, used to describe + the host language type of buffer. + On output: if column type is different from + buffer_type, column value is automatically converted + to buffer_type before it is stored in the buffer. + buffer - On input: points to the buffer with input data. + On output: points to the buffer capable to store + output data. + The type of memory pointed by buffer must correspond + to buffer_type. See the correspondence table in + the comment to mysql_stmt_bind_param. + + The two above members are mandatory for any kind of bind. + + buffer_length - the length of the buffer. You don't have to set + it for any fixed length buffer: float, double, + int, etc. It must be set however for variable-length + types, such as BLOBs or STRINGs. + + length - On input: in case when lengths of input values + are different for each execute, you can set this to + point at a variable containining value length. This + way the value length can be different in each execute. + If length is not NULL, buffer_length is not used. + Note, length can even point at buffer_length if + you keep bind structures around while fetching: + this way you can change buffer_length before + each execution, everything will work ok. + On output: if length is set, mysql_stmt_fetch will + write column length into it. + + is_null - On input: points to a boolean variable that should + be set to TRUE for NULL values. + This member is useful only if your data may be + NULL in some but not all cases. + If your data is never NULL, is_null should be set to 0. + If your data is always NULL, set buffer_type + to MYSQL_TYPE_NULL, and is_null will not be used. + + is_unsigned - On input: used to signify that values provided for one + of numeric types are unsigned. + On output describes signedness of the output buffer. + If, taking into account is_unsigned flag, column data + is out of range of the output buffer, data for this column + is regarded truncated. Note that this has no correspondence + to the sign of result set column, if you need to find it out + use mysql_stmt_result_metadata. + error - where to write a truncation error if it is present. + possible error value is: + 0 no truncation + 1 value is out of range or buffer is too small + + Please note that MYSQL_BIND also has internals members. +*/ + +typedef struct st_mysql_bind +{ + unsigned long *length; /* output length pointer */ + my_bool *is_null; /* Pointer to null indicator */ + void *buffer; /* buffer to get/put data */ + /* set this if you want to track data truncations happened during fetch */ + my_bool *error; + unsigned char *row_ptr; /* for the current data position */ + void (*store_param_func)(NET *net, struct st_mysql_bind *param); + void (*fetch_result)(struct st_mysql_bind *, MYSQL_FIELD *, + unsigned char **row); + void (*skip_result)(struct st_mysql_bind *, MYSQL_FIELD *, + unsigned char **row); + /* output buffer length, must be set when fetching str/binary */ + unsigned long buffer_length; + unsigned long offset; /* offset position for char/binary fetch */ + unsigned long length_value; /* Used if length is 0 */ + unsigned int param_number; /* For null count and error messages */ + unsigned int pack_length; /* Internal length for packed data */ + enum enum_field_types buffer_type; /* buffer type */ + my_bool error_value; /* used if error is 0 */ + my_bool is_unsigned; /* set if integer type is unsigned */ + my_bool long_data_used; /* If used with mysql_send_long_data */ + my_bool is_null_value; /* Used if is_null is 0 */ + void *extension; +} MYSQL_BIND; + + +struct st_mysql_stmt_extension; + +/* statement handler */ +typedef struct st_mysql_stmt +{ + MEM_ROOT mem_root; /* root allocations */ + LIST list; /* list to keep track of all stmts */ + MYSQL *mysql; /* connection handle */ + MYSQL_BIND *params; /* input parameters */ + MYSQL_BIND *bind; /* output parameters */ + MYSQL_FIELD *fields; /* result set metadata */ + MYSQL_DATA result; /* cached result set */ + MYSQL_ROWS *data_cursor; /* current row in cached result */ + /* + mysql_stmt_fetch() calls this function to fetch one row (it's different + for buffered, unbuffered and cursor fetch). + */ + int (*read_row_func)(struct st_mysql_stmt *stmt, + unsigned char **row); + /* copy of mysql->affected_rows after statement execution */ + my_ulonglong affected_rows; + my_ulonglong insert_id; /* copy of mysql->insert_id */ + unsigned long stmt_id; /* Id for prepared statement */ + unsigned long flags; /* i.e. type of cursor to open */ + unsigned long prefetch_rows; /* number of rows per one COM_FETCH */ + /* + Copied from mysql->server_status after execute/fetch to know + server-side cursor status for this statement. + */ + unsigned int server_status; + unsigned int last_errno; /* error code */ + unsigned int param_count; /* input parameter count */ + unsigned int field_count; /* number of columns in result set */ + enum enum_mysql_stmt_state state; /* statement state */ + char last_error[MYSQL_ERRMSG_SIZE]; /* error message */ + char sqlstate[SQLSTATE_LENGTH+1]; + /* Types of input parameters should be sent to server */ + my_bool send_types_to_server; + my_bool bind_param_done; /* input buffers were supplied */ + unsigned char bind_result_done; /* output buffers were supplied */ + /* mysql_stmt_close() had to cancel this result */ + my_bool unbuffered_fetch_cancelled; + /* + Is set to true if we need to calculate field->max_length for + metadata fields when doing mysql_stmt_store_result. + */ + my_bool update_max_length; + struct st_mysql_stmt_extension *extension; +} MYSQL_STMT; + +enum enum_stmt_attr_type +{ + /* + When doing mysql_stmt_store_result calculate max_length attribute + of statement metadata. This is to be consistent with the old API, + where this was done automatically. + In the new API we do that only by request because it slows down + mysql_stmt_store_result sufficiently. + */ + STMT_ATTR_UPDATE_MAX_LENGTH, + /* + unsigned long with combination of cursor flags (read only, for update, + etc) + */ + STMT_ATTR_CURSOR_TYPE, + /* + Amount of rows to retrieve from server per one fetch if using cursors. + Accepts unsigned long attribute in the range 1 - ulong_max + */ + STMT_ATTR_PREFETCH_ROWS +}; + +MYSQL_STMT * STDCALL mysql_stmt_init(MYSQL *mysql); +int STDCALL mysql_stmt_prepare(MYSQL_STMT *stmt, const char *query, + unsigned long length); +int STDCALL mysql_stmt_prepare_start(int *ret, MYSQL_STMT *stmt, + const char *query, unsigned long length); +int STDCALL mysql_stmt_prepare_cont(int *ret, MYSQL_STMT *stmt, int status); +int STDCALL mysql_stmt_execute(MYSQL_STMT *stmt); +int STDCALL mysql_stmt_execute_start(int *ret, MYSQL_STMT *stmt); +int STDCALL mysql_stmt_execute_cont(int *ret, MYSQL_STMT *stmt, int status); +int STDCALL mysql_stmt_fetch(MYSQL_STMT *stmt); +int STDCALL mysql_stmt_fetch_start(int *ret, MYSQL_STMT *stmt); +int STDCALL mysql_stmt_fetch_cont(int *ret, MYSQL_STMT *stmt, int status); +int STDCALL mysql_stmt_fetch_column(MYSQL_STMT *stmt, MYSQL_BIND *bind_arg, + unsigned int column, + unsigned long offset); +int STDCALL mysql_stmt_store_result(MYSQL_STMT *stmt); +int STDCALL mysql_stmt_store_result_start(int *ret, MYSQL_STMT *stmt); +int STDCALL mysql_stmt_store_result_cont(int *ret, MYSQL_STMT *stmt, + int status); +unsigned long STDCALL mysql_stmt_param_count(MYSQL_STMT * stmt); +my_bool STDCALL mysql_stmt_attr_set(MYSQL_STMT *stmt, + enum enum_stmt_attr_type attr_type, + const void *attr); +my_bool STDCALL mysql_stmt_attr_get(MYSQL_STMT *stmt, + enum enum_stmt_attr_type attr_type, + void *attr); +my_bool STDCALL mysql_stmt_bind_param(MYSQL_STMT * stmt, MYSQL_BIND * bnd); +my_bool STDCALL mysql_stmt_bind_result(MYSQL_STMT * stmt, MYSQL_BIND * bnd); +my_bool STDCALL mysql_stmt_close(MYSQL_STMT * stmt); +int STDCALL mysql_stmt_close_start(my_bool *ret, MYSQL_STMT *stmt); +int STDCALL mysql_stmt_close_cont(my_bool *ret, MYSQL_STMT * stmt, int status); +my_bool STDCALL mysql_stmt_reset(MYSQL_STMT * stmt); +int STDCALL mysql_stmt_reset_start(my_bool *ret, MYSQL_STMT * stmt); +int STDCALL mysql_stmt_reset_cont(my_bool *ret, MYSQL_STMT *stmt, int status); +my_bool STDCALL mysql_stmt_free_result(MYSQL_STMT *stmt); +int STDCALL mysql_stmt_free_result_start(my_bool *ret, MYSQL_STMT *stmt); +int STDCALL mysql_stmt_free_result_cont(my_bool *ret, MYSQL_STMT *stmt, + int status); +my_bool STDCALL mysql_stmt_send_long_data(MYSQL_STMT *stmt, + unsigned int param_number, + const char *data, + unsigned long length); +int STDCALL mysql_stmt_send_long_data_start(my_bool *ret, MYSQL_STMT *stmt, + unsigned int param_number, + const char *data, + unsigned long len); +int STDCALL mysql_stmt_send_long_data_cont(my_bool *ret, MYSQL_STMT *stmt, + int status); +MYSQL_RES *STDCALL mysql_stmt_result_metadata(MYSQL_STMT *stmt); +MYSQL_RES *STDCALL mysql_stmt_param_metadata(MYSQL_STMT *stmt); +unsigned int STDCALL mysql_stmt_errno(MYSQL_STMT * stmt); +const char *STDCALL mysql_stmt_error(MYSQL_STMT * stmt); +const char *STDCALL mysql_stmt_sqlstate(MYSQL_STMT * stmt); +MYSQL_ROW_OFFSET STDCALL mysql_stmt_row_seek(MYSQL_STMT *stmt, + MYSQL_ROW_OFFSET offset); +MYSQL_ROW_OFFSET STDCALL mysql_stmt_row_tell(MYSQL_STMT *stmt); +void STDCALL mysql_stmt_data_seek(MYSQL_STMT *stmt, my_ulonglong offset); +my_ulonglong STDCALL mysql_stmt_num_rows(MYSQL_STMT *stmt); +my_ulonglong STDCALL mysql_stmt_affected_rows(MYSQL_STMT *stmt); +my_ulonglong STDCALL mysql_stmt_insert_id(MYSQL_STMT *stmt); +unsigned int STDCALL mysql_stmt_field_count(MYSQL_STMT *stmt); + +my_bool STDCALL mysql_commit(MYSQL * mysql); +int STDCALL mysql_commit_start(my_bool *ret, MYSQL * mysql); +int STDCALL mysql_commit_cont(my_bool *ret, MYSQL * mysql, int status); +my_bool STDCALL mysql_rollback(MYSQL * mysql); +int STDCALL mysql_rollback_start(my_bool *ret, MYSQL * mysql); +int STDCALL mysql_rollback_cont(my_bool *ret, MYSQL * mysql, int status); +my_bool STDCALL mysql_autocommit(MYSQL * mysql, my_bool auto_mode); +int STDCALL mysql_autocommit_start(my_bool *ret, MYSQL * mysql, + my_bool auto_mode); +int STDCALL mysql_autocommit_cont(my_bool *ret, MYSQL * mysql, int status); +my_bool STDCALL mysql_more_results(MYSQL *mysql); +int STDCALL mysql_next_result(MYSQL *mysql); +int STDCALL mysql_next_result_start(int *ret, MYSQL *mysql); +int STDCALL mysql_next_result_cont(int *ret, MYSQL *mysql, int status); +int STDCALL mysql_stmt_next_result(MYSQL_STMT *stmt); +int STDCALL mysql_stmt_next_result_start(int *ret, MYSQL_STMT *stmt); +int STDCALL mysql_stmt_next_result_cont(int *ret, MYSQL_STMT *stmt, int status); +void STDCALL mysql_close_slow_part(MYSQL *mysql); +void STDCALL mysql_close(MYSQL *sock); +int STDCALL mysql_close_start(MYSQL *sock); +int STDCALL mysql_close_cont(MYSQL *sock, int status); +my_socket STDCALL mysql_get_socket(const MYSQL *mysql); +unsigned int STDCALL mysql_get_timeout_value(const MYSQL *mysql); +unsigned int STDCALL mysql_get_timeout_value_ms(const MYSQL *mysql); + +/******************************************************************** + mysql_net_ functions - low-level API to MySQL protocol +*********************************************************************/ +unsigned long STDCALL mysql_net_read_packet(MYSQL *mysql); +unsigned long STDCALL mysql_net_field_length(unsigned char **packet); + +/* status return codes */ +#define MYSQL_NO_DATA 100 +#define MYSQL_DATA_TRUNCATED 101 + +#define mysql_reload(mysql) mysql_refresh((mysql),REFRESH_GRANT) + +#ifdef USE_OLD_FUNCTIONS +MYSQL * STDCALL mysql_connect(MYSQL *mysql, const char *host, + const char *user, const char *passwd); +int STDCALL mysql_create_db(MYSQL *mysql, const char *DB); +int STDCALL mysql_drop_db(MYSQL *mysql, const char *DB); +#endif +#define HAVE_MYSQL_REAL_CONNECT + +#ifdef __cplusplus +} +#endif + +#endif /* _mysql_h */ diff --git a/EQ2/source/depends/mariadb-10.1.19/include/mysql.h.pp b/EQ2/source/depends/mariadb-10.1.19/include/mysql.h.pp new file mode 100644 index 000000000..32d87b739 --- /dev/null +++ b/EQ2/source/depends/mariadb-10.1.19/include/mysql.h.pp @@ -0,0 +1,742 @@ +typedef char my_bool; +typedef int my_socket; +enum enum_server_command +{ + COM_SLEEP, COM_QUIT, COM_INIT_DB, COM_QUERY, COM_FIELD_LIST, + COM_CREATE_DB, COM_DROP_DB, COM_REFRESH, COM_SHUTDOWN, COM_STATISTICS, + COM_PROCESS_INFO, COM_CONNECT, COM_PROCESS_KILL, COM_DEBUG, COM_PING, + COM_TIME, COM_DELAYED_INSERT, COM_CHANGE_USER, COM_BINLOG_DUMP, + COM_TABLE_DUMP, COM_CONNECT_OUT, COM_REGISTER_SLAVE, + COM_STMT_PREPARE, COM_STMT_EXECUTE, COM_STMT_SEND_LONG_DATA, COM_STMT_CLOSE, + COM_STMT_RESET, COM_SET_OPTION, COM_STMT_FETCH, COM_DAEMON, + COM_END +}; +struct st_vio; +typedef struct st_vio Vio; +typedef struct st_net { + Vio *vio; + unsigned char *buff,*buff_end,*write_pos,*read_pos; + my_socket fd; + unsigned long remain_in_buf,length, buf_length, where_b; + unsigned long max_packet,max_packet_size; + unsigned int pkt_nr,compress_pkt_nr; + unsigned int write_timeout, read_timeout, retry_count; + int fcntl; + unsigned int *return_status; + unsigned char reading_or_writing; + char save_char; + char net_skip_rest_factor; + my_bool thread_specific_malloc; + unsigned char compress; + my_bool unused3; + void *thd; + unsigned int last_errno; + unsigned char error; + my_bool unused4; + my_bool unused5; + char last_error[512]; + char sqlstate[5 +1]; + void *extension; +} NET; +enum enum_field_types { MYSQL_TYPE_DECIMAL, MYSQL_TYPE_TINY, + MYSQL_TYPE_SHORT, MYSQL_TYPE_LONG, + MYSQL_TYPE_FLOAT, MYSQL_TYPE_DOUBLE, + MYSQL_TYPE_NULL, MYSQL_TYPE_TIMESTAMP, + MYSQL_TYPE_LONGLONG,MYSQL_TYPE_INT24, + MYSQL_TYPE_DATE, MYSQL_TYPE_TIME, + MYSQL_TYPE_DATETIME, MYSQL_TYPE_YEAR, + MYSQL_TYPE_NEWDATE, MYSQL_TYPE_VARCHAR, + MYSQL_TYPE_BIT, + MYSQL_TYPE_TIMESTAMP2, + MYSQL_TYPE_DATETIME2, + MYSQL_TYPE_TIME2, + MYSQL_TYPE_NEWDECIMAL=246, + MYSQL_TYPE_ENUM=247, + MYSQL_TYPE_SET=248, + MYSQL_TYPE_TINY_BLOB=249, + MYSQL_TYPE_MEDIUM_BLOB=250, + MYSQL_TYPE_LONG_BLOB=251, + MYSQL_TYPE_BLOB=252, + MYSQL_TYPE_VAR_STRING=253, + MYSQL_TYPE_STRING=254, + MYSQL_TYPE_GEOMETRY=255 +}; +enum mysql_enum_shutdown_level { + SHUTDOWN_DEFAULT = 0, + SHUTDOWN_WAIT_CONNECTIONS= (unsigned char)(1 << 0), + SHUTDOWN_WAIT_TRANSACTIONS= (unsigned char)(1 << 1), + SHUTDOWN_WAIT_UPDATES= (unsigned char)(1 << 3), + SHUTDOWN_WAIT_ALL_BUFFERS= ((unsigned char)(1 << 3) << 1), + SHUTDOWN_WAIT_CRITICAL_BUFFERS= ((unsigned char)(1 << 3) << 1) + 1 +}; +enum enum_cursor_type +{ + CURSOR_TYPE_NO_CURSOR= 0, + CURSOR_TYPE_READ_ONLY= 1, + CURSOR_TYPE_FOR_UPDATE= 2, + CURSOR_TYPE_SCROLLABLE= 4 +}; +enum enum_mysql_set_option +{ + MYSQL_OPTION_MULTI_STATEMENTS_ON, + MYSQL_OPTION_MULTI_STATEMENTS_OFF +}; +my_bool my_net_init(NET *net, Vio* vio, void *thd, unsigned int my_flags); +void my_net_local_init(NET *net); +void net_end(NET *net); +void net_clear(NET *net, my_bool clear_buffer); +my_bool net_realloc(NET *net, size_t length); +my_bool net_flush(NET *net); +my_bool my_net_write(NET *net,const unsigned char *packet, size_t len); +my_bool net_write_command(NET *net,unsigned char command, + const unsigned char *header, size_t head_len, + const unsigned char *packet, size_t len); +int net_real_write(NET *net,const unsigned char *packet, size_t len); +unsigned long my_net_read_packet(NET *net, my_bool read_from_server); +struct sockaddr; +int my_connect(my_socket s, const struct sockaddr *name, unsigned int namelen, + unsigned int timeout); +struct my_rnd_struct; +enum Item_result +{ + STRING_RESULT=0, REAL_RESULT, INT_RESULT, ROW_RESULT, DECIMAL_RESULT, + TIME_RESULT +}; +typedef struct st_udf_args +{ + unsigned int arg_count; + enum Item_result *arg_type; + char **args; + unsigned long *lengths; + char *maybe_null; + char **attributes; + unsigned long *attribute_lengths; + void *extension; +} UDF_ARGS; +typedef struct st_udf_init +{ + my_bool maybe_null; + unsigned int decimals; + unsigned long max_length; + char *ptr; + my_bool const_item; + void *extension; +} UDF_INIT; +void create_random_string(char *to, unsigned int length, + struct my_rnd_struct *rand_st); +void hash_password(unsigned long *to, const char *password, unsigned int password_len); +void make_scrambled_password_323(char *to, const char *password); +void scramble_323(char *to, const char *message, const char *password); +my_bool check_scramble_323(const unsigned char *reply, const char *message, + unsigned long *salt); +void get_salt_from_password_323(unsigned long *res, const char *password); +void make_scrambled_password(char *to, const char *password); +void scramble(char *to, const char *message, const char *password); +my_bool check_scramble(const unsigned char *reply, const char *message, + const unsigned char *hash_stage2); +void get_salt_from_password(unsigned char *res, const char *password); +char *octet2hex(char *to, const char *str, unsigned int len); +char *get_tty_password(const char *opt_message); +void get_tty_password_buff(const char *opt_message, char *to, size_t length); +const char *mysql_errno_to_sqlstate(unsigned int mysql_errno); +my_bool my_thread_init(void); +void my_thread_end(void); +typedef long my_time_t; +enum enum_mysql_timestamp_type +{ + MYSQL_TIMESTAMP_NONE= -2, MYSQL_TIMESTAMP_ERROR= -1, + MYSQL_TIMESTAMP_DATE= 0, MYSQL_TIMESTAMP_DATETIME= 1, MYSQL_TIMESTAMP_TIME= 2 +}; +typedef struct st_mysql_time +{ + unsigned int year, month, day, hour, minute, second; + unsigned long second_part; + my_bool neg; + enum enum_mysql_timestamp_type time_type; +} MYSQL_TIME; +typedef struct st_list { + struct st_list *prev,*next; + void *data; +} LIST; +typedef int (*list_walk_action)(void *,void *); +extern LIST *list_add(LIST *root,LIST *element); +extern LIST *list_delete(LIST *root,LIST *element); +extern LIST *list_cons(void *data,LIST *root); +extern LIST *list_reverse(LIST *root); +extern void list_free(LIST *root,unsigned int free_data); +extern unsigned int list_length(LIST *); +extern int list_walk(LIST *,list_walk_action action,unsigned char * argument); +extern unsigned int mariadb_deinitialize_ssl; +extern unsigned int mysql_port; +extern char *mysql_unix_port; +typedef struct st_mysql_field { + char *name; + char *org_name; + char *table; + char *org_table; + char *db; + char *catalog; + char *def; + unsigned long length; + unsigned long max_length; + unsigned int name_length; + unsigned int org_name_length; + unsigned int table_length; + unsigned int org_table_length; + unsigned int db_length; + unsigned int catalog_length; + unsigned int def_length; + unsigned int flags; + unsigned int decimals; + unsigned int charsetnr; + enum enum_field_types type; + void *extension; +} MYSQL_FIELD; +typedef char **MYSQL_ROW; +typedef unsigned int MYSQL_FIELD_OFFSET; +typedef unsigned long long my_ulonglong; +typedef struct st_used_mem +{ + struct st_used_mem *next; + size_t left; + size_t size; +} USED_MEM; +typedef struct st_mem_root +{ + USED_MEM *free; + USED_MEM *used; + USED_MEM *pre_alloc; + size_t min_malloc; + size_t block_size; + unsigned int block_num; + unsigned int first_block_usage; + void (*error_handler)(void); +} MEM_ROOT; +typedef struct st_typelib { + unsigned int count; + const char *name; + const char **type_names; + unsigned int *type_lengths; +} TYPELIB; +extern my_ulonglong find_typeset(char *x, TYPELIB *typelib,int *error_position); +extern int find_type_with_warning(const char *x, TYPELIB *typelib, + const char *option); +extern int find_type_or_exit(const char *x, TYPELIB *typelib, + const char *option); +extern int find_type(const char *x, const TYPELIB *typelib, unsigned int flags); +extern void make_type(char *to,unsigned int nr,TYPELIB *typelib); +extern const char *get_type(TYPELIB *typelib,unsigned int nr); +extern TYPELIB *copy_typelib(MEM_ROOT *root, TYPELIB *from); +extern TYPELIB sql_protocol_typelib; +my_ulonglong find_set_from_flags(const TYPELIB *lib, unsigned int default_name, + my_ulonglong cur_set, my_ulonglong default_set, + const char *str, unsigned int length, + char **err_pos, unsigned int *err_len); +typedef struct st_mysql_rows { + struct st_mysql_rows *next; + MYSQL_ROW data; + unsigned long length; +} MYSQL_ROWS; +typedef MYSQL_ROWS *MYSQL_ROW_OFFSET; +typedef struct embedded_query_result EMBEDDED_QUERY_RESULT; +typedef struct st_mysql_data { + MYSQL_ROWS *data; + struct embedded_query_result *embedded_info; + MEM_ROOT alloc; + my_ulonglong rows; + unsigned int fields; + void *extension; +} MYSQL_DATA; +enum mysql_option +{ + MYSQL_OPT_CONNECT_TIMEOUT, MYSQL_OPT_COMPRESS, MYSQL_OPT_NAMED_PIPE, + MYSQL_INIT_COMMAND, MYSQL_READ_DEFAULT_FILE, MYSQL_READ_DEFAULT_GROUP, + MYSQL_SET_CHARSET_DIR, MYSQL_SET_CHARSET_NAME, MYSQL_OPT_LOCAL_INFILE, + MYSQL_OPT_PROTOCOL, MYSQL_SHARED_MEMORY_BASE_NAME, MYSQL_OPT_READ_TIMEOUT, + MYSQL_OPT_WRITE_TIMEOUT, MYSQL_OPT_USE_RESULT, + MYSQL_OPT_USE_REMOTE_CONNECTION, MYSQL_OPT_USE_EMBEDDED_CONNECTION, + MYSQL_OPT_GUESS_CONNECTION, MYSQL_SET_CLIENT_IP, MYSQL_SECURE_AUTH, + MYSQL_REPORT_DATA_TRUNCATION, MYSQL_OPT_RECONNECT, + MYSQL_OPT_SSL_VERIFY_SERVER_CERT, MYSQL_PLUGIN_DIR, MYSQL_DEFAULT_AUTH, + MYSQL_OPT_BIND, + MYSQL_OPT_SSL_KEY, MYSQL_OPT_SSL_CERT, + MYSQL_OPT_SSL_CA, MYSQL_OPT_SSL_CAPATH, MYSQL_OPT_SSL_CIPHER, + MYSQL_OPT_SSL_CRL, MYSQL_OPT_SSL_CRLPATH, + MYSQL_OPT_CONNECT_ATTR_RESET, MYSQL_OPT_CONNECT_ATTR_ADD, + MYSQL_OPT_CONNECT_ATTR_DELETE, + MYSQL_SERVER_PUBLIC_KEY, + MYSQL_ENABLE_CLEARTEXT_PLUGIN, + MYSQL_OPT_CAN_HANDLE_EXPIRED_PASSWORDS, + MYSQL_PROGRESS_CALLBACK=5999, + MYSQL_OPT_NONBLOCK, + MYSQL_OPT_USE_THREAD_SPECIFIC_MEMORY +}; +struct st_mysql_options_extention; +struct st_mysql_options { + unsigned int connect_timeout, read_timeout, write_timeout; + unsigned int port, protocol; + unsigned long client_flag; + char *host,*user,*password,*unix_socket,*db; + struct st_dynamic_array *init_commands; + char *my_cnf_file,*my_cnf_group, *charset_dir, *charset_name; + char *ssl_key; + char *ssl_cert; + char *ssl_ca; + char *ssl_capath; + char *ssl_cipher; + char *shared_memory_base_name; + unsigned long max_allowed_packet; + my_bool use_ssl; + my_bool compress,named_pipe; + my_bool use_thread_specific_memory; + my_bool unused2; + my_bool unused3; + my_bool unused4; + enum mysql_option methods_to_use; + char *client_ip; + my_bool secure_auth; + my_bool report_data_truncation; + int (*local_infile_init)(void **, const char *, void *); + int (*local_infile_read)(void *, char *, unsigned int); + void (*local_infile_end)(void *); + int (*local_infile_error)(void *, char *, unsigned int); + void *local_infile_userdata; + struct st_mysql_options_extention *extension; +}; +enum mysql_status +{ + MYSQL_STATUS_READY, MYSQL_STATUS_GET_RESULT, MYSQL_STATUS_USE_RESULT, + MYSQL_STATUS_STATEMENT_GET_RESULT +}; +enum mysql_protocol_type +{ + MYSQL_PROTOCOL_DEFAULT, MYSQL_PROTOCOL_TCP, MYSQL_PROTOCOL_SOCKET, + MYSQL_PROTOCOL_PIPE, MYSQL_PROTOCOL_MEMORY +}; +typedef struct character_set +{ + unsigned int number; + unsigned int state; + const char *csname; + const char *name; + const char *comment; + const char *dir; + unsigned int mbminlen; + unsigned int mbmaxlen; +} MY_CHARSET_INFO; +struct st_mysql_methods; +struct st_mysql_stmt; +typedef struct st_mysql +{ + NET net; + unsigned char *connector_fd; + char *host,*user,*passwd,*unix_socket,*server_version,*host_info; + char *info, *db; + const struct charset_info_st *charset; + MYSQL_FIELD *fields; + MEM_ROOT field_alloc; + my_ulonglong affected_rows; + my_ulonglong insert_id; + my_ulonglong extra_info; + unsigned long thread_id; + unsigned long packet_length; + unsigned int port; + unsigned long client_flag,server_capabilities; + unsigned int protocol_version; + unsigned int field_count; + unsigned int server_status; + unsigned int server_language; + unsigned int warning_count; + struct st_mysql_options options; + enum mysql_status status; + my_bool free_me; + my_bool reconnect; + char scramble[20 +1]; + my_bool unused1; + void *unused2, *unused3, *unused4, *unused5; + LIST *stmts; + const struct st_mysql_methods *methods; + void *thd; + my_bool *unbuffered_fetch_owner; + char *info_buffer; + void *extension; +} MYSQL; +typedef struct st_mysql_res { + my_ulonglong row_count; + MYSQL_FIELD *fields; + MYSQL_DATA *data; + MYSQL_ROWS *data_cursor; + unsigned long *lengths; + MYSQL *handle; + const struct st_mysql_methods *methods; + MYSQL_ROW row; + MYSQL_ROW current_row; + MEM_ROOT field_alloc; + unsigned int field_count, current_field; + my_bool eof; + my_bool unbuffered_fetch_cancelled; + void *extension; +} MYSQL_RES; +typedef struct st_mysql_parameters +{ + unsigned long *p_max_allowed_packet; + unsigned long *p_net_buffer_length; + void *extension; +} MYSQL_PARAMETERS; +int mysql_server_init(int argc, char **argv, char **groups); +void mysql_server_end(void); +MYSQL_PARAMETERS * mysql_get_parameters(void); +my_bool mysql_thread_init(void); +void mysql_thread_end(void); +my_ulonglong mysql_num_rows(MYSQL_RES *res); +unsigned int mysql_num_fields(MYSQL_RES *res); +my_bool mysql_eof(MYSQL_RES *res); +MYSQL_FIELD * mysql_fetch_field_direct(MYSQL_RES *res, + unsigned int fieldnr); +MYSQL_FIELD * mysql_fetch_fields(MYSQL_RES *res); +MYSQL_ROW_OFFSET mysql_row_tell(MYSQL_RES *res); +MYSQL_FIELD_OFFSET mysql_field_tell(MYSQL_RES *res); +unsigned int mysql_field_count(MYSQL *mysql); +my_ulonglong mysql_affected_rows(MYSQL *mysql); +my_ulonglong mysql_insert_id(MYSQL *mysql); +unsigned int mysql_errno(MYSQL *mysql); +const char * mysql_error(MYSQL *mysql); +const char * mysql_sqlstate(MYSQL *mysql); +unsigned int mysql_warning_count(MYSQL *mysql); +const char * mysql_info(MYSQL *mysql); +unsigned long mysql_thread_id(MYSQL *mysql); +const char * mysql_character_set_name(MYSQL *mysql); +int mysql_set_character_set(MYSQL *mysql, const char *csname); +int mysql_set_character_set_start(int *ret, MYSQL *mysql, + const char *csname); +int mysql_set_character_set_cont(int *ret, MYSQL *mysql, + int status); +MYSQL * mysql_init(MYSQL *mysql); +my_bool mysql_ssl_set(MYSQL *mysql, const char *key, + const char *cert, const char *ca, + const char *capath, const char *cipher); +const char * mysql_get_ssl_cipher(MYSQL *mysql); +my_bool mysql_change_user(MYSQL *mysql, const char *user, + const char *passwd, const char *db); +int mysql_change_user_start(my_bool *ret, MYSQL *mysql, + const char *user, + const char *passwd, + const char *db); +int mysql_change_user_cont(my_bool *ret, MYSQL *mysql, + int status); +MYSQL * mysql_real_connect(MYSQL *mysql, const char *host, + const char *user, + const char *passwd, + const char *db, + unsigned int port, + const char *unix_socket, + unsigned long clientflag); +int mysql_real_connect_start(MYSQL **ret, MYSQL *mysql, + const char *host, + const char *user, + const char *passwd, + const char *db, + unsigned int port, + const char *unix_socket, + unsigned long clientflag); +int mysql_real_connect_cont(MYSQL **ret, MYSQL *mysql, + int status); +int mysql_select_db(MYSQL *mysql, const char *db); +int mysql_select_db_start(int *ret, MYSQL *mysql, + const char *db); +int mysql_select_db_cont(int *ret, MYSQL *mysql, + int status); +int mysql_query(MYSQL *mysql, const char *q); +int mysql_query_start(int *ret, MYSQL *mysql, + const char *q); +int mysql_query_cont(int *ret, MYSQL *mysql, + int status); +int mysql_send_query(MYSQL *mysql, const char *q, + unsigned long length); +int mysql_send_query_start(int *ret, MYSQL *mysql, + const char *q, + unsigned long length); +int mysql_send_query_cont(int *ret, MYSQL *mysql, + int status); +int mysql_real_query(MYSQL *mysql, const char *q, + unsigned long length); +int mysql_real_query_start(int *ret, MYSQL *mysql, + const char *q, + unsigned long length); +int mysql_real_query_cont(int *ret, MYSQL *mysql, + int status); +MYSQL_RES * mysql_store_result(MYSQL *mysql); +int mysql_store_result_start(MYSQL_RES **ret, MYSQL *mysql); +int mysql_store_result_cont(MYSQL_RES **ret, MYSQL *mysql, + int status); +MYSQL_RES * mysql_use_result(MYSQL *mysql); +void mysql_get_character_set_info(MYSQL *mysql, + MY_CHARSET_INFO *charset); +void +mysql_set_local_infile_handler(MYSQL *mysql, + int (*local_infile_init)(void **, const char *, + void *), + int (*local_infile_read)(void *, char *, + unsigned int), + void (*local_infile_end)(void *), + int (*local_infile_error)(void *, char*, + unsigned int), + void *); +void +mysql_set_local_infile_default(MYSQL *mysql); +int mysql_shutdown(MYSQL *mysql, + enum mysql_enum_shutdown_level + shutdown_level); +int mysql_shutdown_start(int *ret, MYSQL *mysql, + enum mysql_enum_shutdown_level + shutdown_level); +int mysql_shutdown_cont(int *ret, MYSQL *mysql, + int status); +int mysql_dump_debug_info(MYSQL *mysql); +int mysql_dump_debug_info_start(int *ret, MYSQL *mysql); +int mysql_dump_debug_info_cont(int *ret, MYSQL *mysql, + int status); +int mysql_refresh(MYSQL *mysql, + unsigned int refresh_options); +int mysql_refresh_start(int *ret, MYSQL *mysql, + unsigned int refresh_options); +int mysql_refresh_cont(int *ret, MYSQL *mysql, int status); +int mysql_kill(MYSQL *mysql,unsigned long pid); +int mysql_kill_start(int *ret, MYSQL *mysql, + unsigned long pid); +int mysql_kill_cont(int *ret, MYSQL *mysql, int status); +int mysql_set_server_option(MYSQL *mysql, + enum enum_mysql_set_option + option); +int mysql_set_server_option_start(int *ret, MYSQL *mysql, + enum enum_mysql_set_option + option); +int mysql_set_server_option_cont(int *ret, MYSQL *mysql, + int status); +int mysql_ping(MYSQL *mysql); +int mysql_ping_start(int *ret, MYSQL *mysql); +int mysql_ping_cont(int *ret, MYSQL *mysql, int status); +const char * mysql_stat(MYSQL *mysql); +int mysql_stat_start(const char **ret, MYSQL *mysql); +int mysql_stat_cont(const char **ret, MYSQL *mysql, + int status); +const char * mysql_get_server_info(MYSQL *mysql); +const char * mysql_get_server_name(MYSQL *mysql); +const char * mysql_get_client_info(void); +unsigned long mysql_get_client_version(void); +const char * mysql_get_host_info(MYSQL *mysql); +unsigned long mysql_get_server_version(MYSQL *mysql); +unsigned int mysql_get_proto_info(MYSQL *mysql); +MYSQL_RES * mysql_list_dbs(MYSQL *mysql,const char *wild); +int mysql_list_dbs_start(MYSQL_RES **ret, MYSQL *mysql, + const char *wild); +int mysql_list_dbs_cont(MYSQL_RES **ret, MYSQL *mysql, + int status); +MYSQL_RES * mysql_list_tables(MYSQL *mysql,const char *wild); +int mysql_list_tables_start(MYSQL_RES **ret, MYSQL *mysql, + const char *wild); +int mysql_list_tables_cont(MYSQL_RES **ret, MYSQL *mysql, + int status); +MYSQL_RES * mysql_list_processes(MYSQL *mysql); +int mysql_list_processes_start(MYSQL_RES **ret, + MYSQL *mysql); +int mysql_list_processes_cont(MYSQL_RES **ret, MYSQL *mysql, + int status); +int mysql_options(MYSQL *mysql,enum mysql_option option, + const void *arg); +int mysql_options4(MYSQL *mysql,enum mysql_option option, + const void *arg1, const void *arg2); +void mysql_free_result(MYSQL_RES *result); +int mysql_free_result_start(MYSQL_RES *result); +int mysql_free_result_cont(MYSQL_RES *result, int status); +void mysql_data_seek(MYSQL_RES *result, + my_ulonglong offset); +MYSQL_ROW_OFFSET mysql_row_seek(MYSQL_RES *result, + MYSQL_ROW_OFFSET offset); +MYSQL_FIELD_OFFSET mysql_field_seek(MYSQL_RES *result, + MYSQL_FIELD_OFFSET offset); +MYSQL_ROW mysql_fetch_row(MYSQL_RES *result); +int mysql_fetch_row_start(MYSQL_ROW *ret, + MYSQL_RES *result); +int mysql_fetch_row_cont(MYSQL_ROW *ret, MYSQL_RES *result, + int status); +unsigned long * mysql_fetch_lengths(MYSQL_RES *result); +MYSQL_FIELD * mysql_fetch_field(MYSQL_RES *result); +MYSQL_RES * mysql_list_fields(MYSQL *mysql, const char *table, + const char *wild); +int mysql_list_fields_start(MYSQL_RES **ret, MYSQL *mysql, + const char *table, + const char *wild); +int mysql_list_fields_cont(MYSQL_RES **ret, MYSQL *mysql, + int status); +unsigned long mysql_escape_string(char *to,const char *from, + unsigned long from_length); +unsigned long mysql_hex_string(char *to,const char *from, + unsigned long from_length); +unsigned long mysql_real_escape_string(MYSQL *mysql, + char *to,const char *from, + unsigned long length); +void mysql_debug(const char *debug); +void myodbc_remove_escape(MYSQL *mysql,char *name); +unsigned int mysql_thread_safe(void); +my_bool mysql_embedded(void); +my_bool mariadb_connection(MYSQL *mysql); +my_bool mysql_read_query_result(MYSQL *mysql); +int mysql_read_query_result_start(my_bool *ret, + MYSQL *mysql); +int mysql_read_query_result_cont(my_bool *ret, + MYSQL *mysql, int status); +enum enum_mysql_stmt_state +{ + MYSQL_STMT_INIT_DONE= 1, MYSQL_STMT_PREPARE_DONE, MYSQL_STMT_EXECUTE_DONE, + MYSQL_STMT_FETCH_DONE +}; +typedef struct st_mysql_bind +{ + unsigned long *length; + my_bool *is_null; + void *buffer; + my_bool *error; + unsigned char *row_ptr; + void (*store_param_func)(NET *net, struct st_mysql_bind *param); + void (*fetch_result)(struct st_mysql_bind *, MYSQL_FIELD *, + unsigned char **row); + void (*skip_result)(struct st_mysql_bind *, MYSQL_FIELD *, + unsigned char **row); + unsigned long buffer_length; + unsigned long offset; + unsigned long length_value; + unsigned int param_number; + unsigned int pack_length; + enum enum_field_types buffer_type; + my_bool error_value; + my_bool is_unsigned; + my_bool long_data_used; + my_bool is_null_value; + void *extension; +} MYSQL_BIND; +struct st_mysql_stmt_extension; +typedef struct st_mysql_stmt +{ + MEM_ROOT mem_root; + LIST list; + MYSQL *mysql; + MYSQL_BIND *params; + MYSQL_BIND *bind; + MYSQL_FIELD *fields; + MYSQL_DATA result; + MYSQL_ROWS *data_cursor; + int (*read_row_func)(struct st_mysql_stmt *stmt, + unsigned char **row); + my_ulonglong affected_rows; + my_ulonglong insert_id; + unsigned long stmt_id; + unsigned long flags; + unsigned long prefetch_rows; + unsigned int server_status; + unsigned int last_errno; + unsigned int param_count; + unsigned int field_count; + enum enum_mysql_stmt_state state; + char last_error[512]; + char sqlstate[5 +1]; + my_bool send_types_to_server; + my_bool bind_param_done; + unsigned char bind_result_done; + my_bool unbuffered_fetch_cancelled; + my_bool update_max_length; + struct st_mysql_stmt_extension *extension; +} MYSQL_STMT; +enum enum_stmt_attr_type +{ + STMT_ATTR_UPDATE_MAX_LENGTH, + STMT_ATTR_CURSOR_TYPE, + STMT_ATTR_PREFETCH_ROWS +}; +MYSQL_STMT * mysql_stmt_init(MYSQL *mysql); +int mysql_stmt_prepare(MYSQL_STMT *stmt, const char *query, + unsigned long length); +int mysql_stmt_prepare_start(int *ret, MYSQL_STMT *stmt, + const char *query, unsigned long length); +int mysql_stmt_prepare_cont(int *ret, MYSQL_STMT *stmt, int status); +int mysql_stmt_execute(MYSQL_STMT *stmt); +int mysql_stmt_execute_start(int *ret, MYSQL_STMT *stmt); +int mysql_stmt_execute_cont(int *ret, MYSQL_STMT *stmt, int status); +int mysql_stmt_fetch(MYSQL_STMT *stmt); +int mysql_stmt_fetch_start(int *ret, MYSQL_STMT *stmt); +int mysql_stmt_fetch_cont(int *ret, MYSQL_STMT *stmt, int status); +int mysql_stmt_fetch_column(MYSQL_STMT *stmt, MYSQL_BIND *bind_arg, + unsigned int column, + unsigned long offset); +int mysql_stmt_store_result(MYSQL_STMT *stmt); +int mysql_stmt_store_result_start(int *ret, MYSQL_STMT *stmt); +int mysql_stmt_store_result_cont(int *ret, MYSQL_STMT *stmt, + int status); +unsigned long mysql_stmt_param_count(MYSQL_STMT * stmt); +my_bool mysql_stmt_attr_set(MYSQL_STMT *stmt, + enum enum_stmt_attr_type attr_type, + const void *attr); +my_bool mysql_stmt_attr_get(MYSQL_STMT *stmt, + enum enum_stmt_attr_type attr_type, + void *attr); +my_bool mysql_stmt_bind_param(MYSQL_STMT * stmt, MYSQL_BIND * bnd); +my_bool mysql_stmt_bind_result(MYSQL_STMT * stmt, MYSQL_BIND * bnd); +my_bool mysql_stmt_close(MYSQL_STMT * stmt); +int mysql_stmt_close_start(my_bool *ret, MYSQL_STMT *stmt); +int mysql_stmt_close_cont(my_bool *ret, MYSQL_STMT * stmt, int status); +my_bool mysql_stmt_reset(MYSQL_STMT * stmt); +int mysql_stmt_reset_start(my_bool *ret, MYSQL_STMT * stmt); +int mysql_stmt_reset_cont(my_bool *ret, MYSQL_STMT *stmt, int status); +my_bool mysql_stmt_free_result(MYSQL_STMT *stmt); +int mysql_stmt_free_result_start(my_bool *ret, MYSQL_STMT *stmt); +int mysql_stmt_free_result_cont(my_bool *ret, MYSQL_STMT *stmt, + int status); +my_bool mysql_stmt_send_long_data(MYSQL_STMT *stmt, + unsigned int param_number, + const char *data, + unsigned long length); +int mysql_stmt_send_long_data_start(my_bool *ret, MYSQL_STMT *stmt, + unsigned int param_number, + const char *data, + unsigned long len); +int mysql_stmt_send_long_data_cont(my_bool *ret, MYSQL_STMT *stmt, + int status); +MYSQL_RES * mysql_stmt_result_metadata(MYSQL_STMT *stmt); +MYSQL_RES * mysql_stmt_param_metadata(MYSQL_STMT *stmt); +unsigned int mysql_stmt_errno(MYSQL_STMT * stmt); +const char * mysql_stmt_error(MYSQL_STMT * stmt); +const char * mysql_stmt_sqlstate(MYSQL_STMT * stmt); +MYSQL_ROW_OFFSET mysql_stmt_row_seek(MYSQL_STMT *stmt, + MYSQL_ROW_OFFSET offset); +MYSQL_ROW_OFFSET mysql_stmt_row_tell(MYSQL_STMT *stmt); +void mysql_stmt_data_seek(MYSQL_STMT *stmt, my_ulonglong offset); +my_ulonglong mysql_stmt_num_rows(MYSQL_STMT *stmt); +my_ulonglong mysql_stmt_affected_rows(MYSQL_STMT *stmt); +my_ulonglong mysql_stmt_insert_id(MYSQL_STMT *stmt); +unsigned int mysql_stmt_field_count(MYSQL_STMT *stmt); +my_bool mysql_commit(MYSQL * mysql); +int mysql_commit_start(my_bool *ret, MYSQL * mysql); +int mysql_commit_cont(my_bool *ret, MYSQL * mysql, int status); +my_bool mysql_rollback(MYSQL * mysql); +int mysql_rollback_start(my_bool *ret, MYSQL * mysql); +int mysql_rollback_cont(my_bool *ret, MYSQL * mysql, int status); +my_bool mysql_autocommit(MYSQL * mysql, my_bool auto_mode); +int mysql_autocommit_start(my_bool *ret, MYSQL * mysql, + my_bool auto_mode); +int mysql_autocommit_cont(my_bool *ret, MYSQL * mysql, int status); +my_bool mysql_more_results(MYSQL *mysql); +int mysql_next_result(MYSQL *mysql); +int mysql_next_result_start(int *ret, MYSQL *mysql); +int mysql_next_result_cont(int *ret, MYSQL *mysql, int status); +int mysql_stmt_next_result(MYSQL_STMT *stmt); +int mysql_stmt_next_result_start(int *ret, MYSQL_STMT *stmt); +int mysql_stmt_next_result_cont(int *ret, MYSQL_STMT *stmt, int status); +void mysql_close_slow_part(MYSQL *mysql); +void mysql_close(MYSQL *sock); +int mysql_close_start(MYSQL *sock); +int mysql_close_cont(MYSQL *sock, int status); +my_socket mysql_get_socket(const MYSQL *mysql); +unsigned int mysql_get_timeout_value(const MYSQL *mysql); +unsigned int mysql_get_timeout_value_ms(const MYSQL *mysql); +unsigned long mysql_net_read_packet(MYSQL *mysql); +unsigned long mysql_net_field_length(unsigned char **packet); diff --git a/EQ2/source/depends/mariadb-10.1.19/include/mysql/auth_dialog_client.h b/EQ2/source/depends/mariadb-10.1.19/include/mysql/auth_dialog_client.h new file mode 100644 index 000000000..2c58aac94 --- /dev/null +++ b/EQ2/source/depends/mariadb-10.1.19/include/mysql/auth_dialog_client.h @@ -0,0 +1,56 @@ +#ifndef MYSQL_AUTH_DIALOG_CLIENT_INCLUDED +/* Copyright (C) 2010 Sergei Golubchik and Monty Program Ab + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; version 2 of the License. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ + +/** + @file + + Definitions needed to use Dialog client authentication plugin +*/ + +struct st_mysql; + +#define MYSQL_AUTH_DIALOG_CLIENT_INCLUDED + +/** + type of the mysql_authentication_dialog_ask function + + @param mysql mysql + @param type type of the input + 1 - ordinary string input + 2 - password string + @param prompt prompt + @param buf a buffer to store the use input + @param buf_len the length of the buffer + + @retval a pointer to the user input string. + It may be equal to 'buf' or to 'mysql->password'. + In all other cases it is assumed to be an allocated + string, and the "dialog" plugin will free() it. +*/ +typedef char *(*mysql_authentication_dialog_ask_t)(struct st_mysql *mysql, + int type, const char *prompt, char *buf, int buf_len); + +/** + first byte of the question string is the question "type". + It can be an "ordinary" or a "password" question. + The last bit set marks a last question in the authentication exchange. +*/ +#define ORDINARY_QUESTION "\2" +#define LAST_QUESTION "\3" +#define PASSWORD_QUESTION "\4" +#define LAST_PASSWORD "\5" + +#endif diff --git a/EQ2/source/depends/mariadb-10.1.19/include/mysql/client_plugin.h b/EQ2/source/depends/mariadb-10.1.19/include/mysql/client_plugin.h new file mode 100644 index 000000000..b2df0019d --- /dev/null +++ b/EQ2/source/depends/mariadb-10.1.19/include/mysql/client_plugin.h @@ -0,0 +1,186 @@ +#ifndef MYSQL_CLIENT_PLUGIN_INCLUDED +/* Copyright (C) 2010 Sergei Golubchik and Monty Program Ab + Copyright (c) 2010, 2011, Oracle and/or its affiliates. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; version 2 of the License. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ + +/** + @file + + MySQL Client Plugin API + + This file defines the API for plugins that work on the client side +*/ +#define MYSQL_CLIENT_PLUGIN_INCLUDED + +/* + On Windows, exports from DLL need to be declared + Also, plugin needs to be declared as extern "C" because MSVC + unlike other compilers, uses C++ mangling for variables not only + for functions. +*/ +#undef MYSQL_PLUGIN_EXPORT +#if defined(_MSC_VER) + #ifdef __cplusplus + #define MYSQL_PLUGIN_EXPORT extern "C" __declspec(dllexport) + #else + #define MYSQL_PLUGIN_EXPORT __declspec(dllexport) + #endif +#else /*_MSC_VER */ + #ifdef __cplusplus + #define MYSQL_PLUGIN_EXPORT extern "C" + #else + #define MYSQL_PLUGIN_EXPORT + #endif +#endif + +#ifndef MYSQL_ABI_CHECK +#include +#include +#endif + +/* known plugin types */ +#define MYSQL_CLIENT_reserved1 0 +#define MYSQL_CLIENT_reserved2 1 +#define MYSQL_CLIENT_AUTHENTICATION_PLUGIN 2 + +#define MYSQL_CLIENT_AUTHENTICATION_PLUGIN_INTERFACE_VERSION 0x0100 + +#define MYSQL_CLIENT_MAX_PLUGINS 3 + +#define mysql_declare_client_plugin(X) \ + MYSQL_PLUGIN_EXPORT struct st_mysql_client_plugin_ ## X \ + _mysql_client_plugin_declaration_ = { \ + MYSQL_CLIENT_ ## X ## _PLUGIN, \ + MYSQL_CLIENT_ ## X ## _PLUGIN_INTERFACE_VERSION, +#define mysql_end_client_plugin } + +/* generic plugin header structure */ +#define MYSQL_CLIENT_PLUGIN_HEADER \ + int type; \ + unsigned int interface_version; \ + const char *name; \ + const char *author; \ + const char *desc; \ + unsigned int version[3]; \ + const char *license; \ + void *mysql_api; \ + int (*init)(char *, size_t, int, va_list); \ + int (*deinit)(); \ + int (*options)(const char *option, const void *); + +struct st_mysql_client_plugin +{ + MYSQL_CLIENT_PLUGIN_HEADER +}; + +struct st_mysql; + +/******** authentication plugin specific declarations *********/ +#include + +struct st_mysql_client_plugin_AUTHENTICATION +{ + MYSQL_CLIENT_PLUGIN_HEADER + int (*authenticate_user)(MYSQL_PLUGIN_VIO *vio, struct st_mysql *mysql); +}; + +#include + +/******** using plugins ************/ + +/** + loads a plugin and initializes it + + @param mysql MYSQL structure. + @param name a name of the plugin to load + @param type type of plugin that should be loaded, -1 to disable type check + @param argc number of arguments to pass to the plugin initialization + function + @param ... arguments for the plugin initialization function + + @retval + a pointer to the loaded plugin, or NULL in case of a failure +*/ +struct st_mysql_client_plugin * +mysql_load_plugin(struct st_mysql *mysql, const char *name, int type, + int argc, ...); + +/** + loads a plugin and initializes it, taking va_list as an argument + + This is the same as mysql_load_plugin, but take va_list instead of + a list of arguments. + + @param mysql MYSQL structure. + @param name a name of the plugin to load + @param type type of plugin that should be loaded, -1 to disable type check + @param argc number of arguments to pass to the plugin initialization + function + @param args arguments for the plugin initialization function + + @retval + a pointer to the loaded plugin, or NULL in case of a failure +*/ +struct st_mysql_client_plugin * +mysql_load_plugin_v(struct st_mysql *mysql, const char *name, int type, + int argc, va_list args); + +/** + finds an already loaded plugin by name, or loads it, if necessary + + @param mysql MYSQL structure. + @param name a name of the plugin to load + @param type type of plugin that should be loaded + + @retval + a pointer to the plugin, or NULL in case of a failure +*/ +struct st_mysql_client_plugin * +mysql_client_find_plugin(struct st_mysql *mysql, const char *name, int type); + +/** + adds a plugin structure to the list of loaded plugins + + This is useful if an application has the necessary functionality + (for example, a special load data handler) statically linked into + the application binary. It can use this function to register the plugin + directly, avoiding the need to factor it out into a shared object. + + @param mysql MYSQL structure. It is only used for error reporting + @param plugin an st_mysql_client_plugin structure to register + + @retval + a pointer to the plugin, or NULL in case of a failure +*/ +struct st_mysql_client_plugin * +mysql_client_register_plugin(struct st_mysql *mysql, + struct st_mysql_client_plugin *plugin); + +/** + set plugin options + + Can be used to set extra options and affect behavior for a plugin. + This function may be called multiple times to set several options + + @param plugin an st_mysql_client_plugin structure + @param option a string which specifies the option to set + @param value value for the option. + + @retval 0 on success, 1 in case of failure +**/ +int mysql_plugin_options(struct st_mysql_client_plugin *plugin, + const char *option, const void *value); +#endif + diff --git a/EQ2/source/depends/mariadb-10.1.19/include/mysql/client_plugin.h.pp b/EQ2/source/depends/mariadb-10.1.19/include/mysql/client_plugin.h.pp new file mode 100644 index 000000000..b6ba9cf08 --- /dev/null +++ b/EQ2/source/depends/mariadb-10.1.19/include/mysql/client_plugin.h.pp @@ -0,0 +1,41 @@ +struct st_mysql_client_plugin +{ + int type; unsigned int interface_version; const char *name; const char *author; const char *desc; unsigned int version[3]; const char *license; void *mysql_api; int (*init)(char *, size_t, int, va_list); int (*deinit)(); int (*options)(const char *option, const void *); +}; +struct st_mysql; +typedef struct st_plugin_vio_info +{ + enum { MYSQL_VIO_INVALID, MYSQL_VIO_TCP, MYSQL_VIO_SOCKET, + MYSQL_VIO_PIPE, MYSQL_VIO_MEMORY } protocol; + int socket; +} MYSQL_PLUGIN_VIO_INFO; +typedef struct st_plugin_vio +{ + int (*read_packet)(struct st_plugin_vio *vio, + unsigned char **buf); + int (*write_packet)(struct st_plugin_vio *vio, + const unsigned char *packet, + int packet_len); + void (*info)(struct st_plugin_vio *vio, struct st_plugin_vio_info *info); +} MYSQL_PLUGIN_VIO; +struct st_mysql_client_plugin_AUTHENTICATION +{ + int type; unsigned int interface_version; const char *name; const char *author; const char *desc; unsigned int version[3]; const char *license; void *mysql_api; int (*init)(char *, size_t, int, va_list); int (*deinit)(); int (*options)(const char *option, const void *); + int (*authenticate_user)(MYSQL_PLUGIN_VIO *vio, struct st_mysql *mysql); +}; +struct st_mysql; +typedef char *(*mysql_authentication_dialog_ask_t)(struct st_mysql *mysql, + int type, const char *prompt, char *buf, int buf_len); +struct st_mysql_client_plugin * +mysql_load_plugin(struct st_mysql *mysql, const char *name, int type, + int argc, ...); +struct st_mysql_client_plugin * +mysql_load_plugin_v(struct st_mysql *mysql, const char *name, int type, + int argc, va_list args); +struct st_mysql_client_plugin * +mysql_client_find_plugin(struct st_mysql *mysql, const char *name, int type); +struct st_mysql_client_plugin * +mysql_client_register_plugin(struct st_mysql *mysql, + struct st_mysql_client_plugin *plugin); +int mysql_plugin_options(struct st_mysql_client_plugin *plugin, + const char *option, const void *value); diff --git a/EQ2/source/depends/mariadb-10.1.19/include/mysql/plugin.h b/EQ2/source/depends/mariadb-10.1.19/include/mysql/plugin.h new file mode 100644 index 000000000..b3c71c654 --- /dev/null +++ b/EQ2/source/depends/mariadb-10.1.19/include/mysql/plugin.h @@ -0,0 +1,748 @@ +/* Copyright (c) 2005, 2013, Oracle and/or its affiliates + Copyright (C) 2009, 2013, Monty Program Ab + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; version 2 of the License. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ + +#ifndef _my_plugin_h +#define _my_plugin_h + +/* + On Windows, exports from DLL need to be declared + Also, plugin needs to be declared as extern "C" because MSVC + unlike other compilers, uses C++ mangling for variables not only + for functions. +*/ +#if defined(_MSC_VER) + #ifdef __cplusplus + #define MYSQL_PLUGIN_EXPORT extern "C" __declspec(dllexport) + #else + #define MYSQL_PLUGIN_EXPORT __declspec(dllexport) + #endif +#else /*_MSC_VER */ + #ifdef __cplusplus + #define MYSQL_PLUGIN_EXPORT extern "C" + #else + #define MYSQL_PLUGIN_EXPORT + #endif +#endif + +#ifdef __cplusplus +class THD; +class Item; +#define MYSQL_THD THD* +#else +#define MYSQL_THD void* +#endif + +typedef char my_bool; +typedef void * MYSQL_PLUGIN; + +#include + +#define MYSQL_XIDDATASIZE 128 +/** + struct st_mysql_xid is binary compatible with the XID structure as + in the X/Open CAE Specification, Distributed Transaction Processing: + The XA Specification, X/Open Company Ltd., 1991. + http://www.opengroup.org/bookstore/catalog/c193.htm + + @see XID in sql/handler.h +*/ +struct st_mysql_xid { + long formatID; + long gtrid_length; + long bqual_length; + char data[MYSQL_XIDDATASIZE]; /* Not \0-terminated */ +}; +typedef struct st_mysql_xid MYSQL_XID; + +/************************************************************************* + Plugin API. Common for all plugin types. +*/ + +/* MySQL plugin interface version */ +#define MYSQL_PLUGIN_INTERFACE_VERSION 0x0104 + +/* MariaDB plugin interface version */ +#define MARIA_PLUGIN_INTERFACE_VERSION 0x010b + +/* + The allowable types of plugins +*/ +#define MYSQL_UDF_PLUGIN 0 /* not implemented */ +#define MYSQL_STORAGE_ENGINE_PLUGIN 1 +#define MYSQL_FTPARSER_PLUGIN 2 /* Full-text parser plugin */ +#define MYSQL_DAEMON_PLUGIN 3 +#define MYSQL_INFORMATION_SCHEMA_PLUGIN 4 +#define MYSQL_AUDIT_PLUGIN 5 +#define MYSQL_REPLICATION_PLUGIN 6 +#define MYSQL_AUTHENTICATION_PLUGIN 7 +#define MYSQL_MAX_PLUGIN_TYPE_NUM 10 /* The number of plugin types */ + +/* MariaDB plugin types */ +#define MariaDB_PASSWORD_VALIDATION_PLUGIN 8 +#define MariaDB_ENCRYPTION_PLUGIN 9 + +/* We use the following strings to define licenses for plugins */ +#define PLUGIN_LICENSE_PROPRIETARY 0 +#define PLUGIN_LICENSE_GPL 1 +#define PLUGIN_LICENSE_BSD 2 + +#define PLUGIN_LICENSE_PROPRIETARY_STRING "PROPRIETARY" +#define PLUGIN_LICENSE_GPL_STRING "GPL" +#define PLUGIN_LICENSE_BSD_STRING "BSD" + +/* definitions of code maturity for plugins */ +#define MariaDB_PLUGIN_MATURITY_UNKNOWN 0 +#define MariaDB_PLUGIN_MATURITY_EXPERIMENTAL 1 +#define MariaDB_PLUGIN_MATURITY_ALPHA 2 +#define MariaDB_PLUGIN_MATURITY_BETA 3 +#define MariaDB_PLUGIN_MATURITY_GAMMA 4 +#define MariaDB_PLUGIN_MATURITY_STABLE 5 + +/* + Macros for beginning and ending plugin declarations. Between + mysql_declare_plugin and mysql_declare_plugin_end there should + be a st_mysql_plugin struct for each plugin to be declared. +*/ + + +#ifndef MYSQL_DYNAMIC_PLUGIN +#define __MYSQL_DECLARE_PLUGIN(NAME, VERSION, PSIZE, DECLS) \ +int VERSION= MYSQL_PLUGIN_INTERFACE_VERSION; \ +int PSIZE= sizeof(struct st_mysql_plugin); \ +struct st_mysql_plugin DECLS[]= { + +#define MARIA_DECLARE_PLUGIN__(NAME, VERSION, PSIZE, DECLS) \ +MYSQL_PLUGIN_EXPORT int VERSION; \ +int VERSION= MARIA_PLUGIN_INTERFACE_VERSION; \ +MYSQL_PLUGIN_EXPORT int PSIZE; \ +int PSIZE= sizeof(struct st_maria_plugin); \ +MYSQL_PLUGIN_EXPORT struct st_maria_plugin DECLS[]; \ +struct st_maria_plugin DECLS[]= { +#else + +#define __MYSQL_DECLARE_PLUGIN(NAME, VERSION, PSIZE, DECLS) \ +MYSQL_PLUGIN_EXPORT int _mysql_plugin_interface_version_; \ +int _mysql_plugin_interface_version_= MYSQL_PLUGIN_INTERFACE_VERSION; \ +MYSQL_PLUGIN_EXPORT int _mysql_sizeof_struct_st_plugin_; \ +int _mysql_sizeof_struct_st_plugin_= sizeof(struct st_mysql_plugin); \ +MYSQL_PLUGIN_EXPORT struct st_mysql_plugin _mysql_plugin_declarations_[]; \ +struct st_mysql_plugin _mysql_plugin_declarations_[]= { + +#define MARIA_DECLARE_PLUGIN__(NAME, VERSION, PSIZE, DECLS) \ +MYSQL_PLUGIN_EXPORT int _maria_plugin_interface_version_; \ +int _maria_plugin_interface_version_= MARIA_PLUGIN_INTERFACE_VERSION; \ +MYSQL_PLUGIN_EXPORT int _maria_sizeof_struct_st_plugin_; \ +int _maria_sizeof_struct_st_plugin_= sizeof(struct st_maria_plugin); \ +MYSQL_PLUGIN_EXPORT struct st_maria_plugin _maria_plugin_declarations_[]; \ +struct st_maria_plugin _maria_plugin_declarations_[]= { + +#endif + +#define mysql_declare_plugin(NAME) \ +__MYSQL_DECLARE_PLUGIN(NAME, \ + builtin_ ## NAME ## _plugin_interface_version, \ + builtin_ ## NAME ## _sizeof_struct_st_plugin, \ + builtin_ ## NAME ## _plugin) + +#define maria_declare_plugin(NAME) \ +MARIA_DECLARE_PLUGIN__(NAME, \ + builtin_maria_ ## NAME ## _plugin_interface_version, \ + builtin_maria_ ## NAME ## _sizeof_struct_st_plugin, \ + builtin_maria_ ## NAME ## _plugin) + +#define mysql_declare_plugin_end ,{0,0,0,0,0,0,0,0,0,0,0,0,0}} +#define maria_declare_plugin_end ,{0,0,0,0,0,0,0,0,0,0,0,0,0}} + +/* + declarations for SHOW STATUS support in plugins +*/ +enum enum_mysql_show_type +{ + SHOW_UNDEF, SHOW_BOOL, SHOW_UINT, SHOW_ULONG, + SHOW_ULONGLONG, SHOW_CHAR, SHOW_CHAR_PTR, + SHOW_ARRAY, SHOW_FUNC, SHOW_DOUBLE, + SHOW_SINT, SHOW_SLONG, SHOW_SLONGLONG, SHOW_SIMPLE_FUNC, + SHOW_always_last +}; + +/* backward compatibility mapping. */ +#define SHOW_INT SHOW_UINT +#define SHOW_LONG SHOW_ULONG +#define SHOW_LONGLONG SHOW_ULONGLONG + +enum enum_var_type +{ + SHOW_OPT_DEFAULT= 0, SHOW_OPT_SESSION, SHOW_OPT_GLOBAL +}; + +struct st_mysql_show_var { + const char *name; + void *value; + enum enum_mysql_show_type type; +}; + +struct system_status_var; + +#define SHOW_VAR_FUNC_BUFF_SIZE (256 * sizeof(void*)) +typedef int (*mysql_show_var_func)(MYSQL_THD, struct st_mysql_show_var*, void *, struct system_status_var *status_var, enum enum_var_type); + + +/* + Constants for plugin flags. + */ + +#define PLUGIN_OPT_NO_INSTALL 1UL /* Not dynamically loadable */ +#define PLUGIN_OPT_NO_UNINSTALL 2UL /* Not dynamically unloadable */ + + +/* + declarations for server variables and command line options +*/ + + +#define PLUGIN_VAR_BOOL 0x0001 +#define PLUGIN_VAR_INT 0x0002 +#define PLUGIN_VAR_LONG 0x0003 +#define PLUGIN_VAR_LONGLONG 0x0004 +#define PLUGIN_VAR_STR 0x0005 +#define PLUGIN_VAR_ENUM 0x0006 +#define PLUGIN_VAR_SET 0x0007 +#define PLUGIN_VAR_DOUBLE 0x0008 +#define PLUGIN_VAR_UNSIGNED 0x0080 +#define PLUGIN_VAR_THDLOCAL 0x0100 /* Variable is per-connection */ +#define PLUGIN_VAR_READONLY 0x0200 /* Server variable is read only */ +#define PLUGIN_VAR_NOSYSVAR 0x0400 /* Not a server variable */ +#define PLUGIN_VAR_NOCMDOPT 0x0800 /* Not a command line option */ +#define PLUGIN_VAR_NOCMDARG 0x1000 /* No argument for cmd line */ +#define PLUGIN_VAR_RQCMDARG 0x0000 /* Argument required for cmd line */ +#define PLUGIN_VAR_OPCMDARG 0x2000 /* Argument optional for cmd line */ +#define PLUGIN_VAR_MEMALLOC 0x8000 /* String needs memory allocated */ + +struct st_mysql_sys_var; +struct st_mysql_value; + +/* + SYNOPSIS + (*mysql_var_check_func)() + thd thread handle + var dynamic variable being altered + save pointer to temporary storage + value user provided value + RETURN + 0 user provided value is OK and the update func may be called. + any other value indicates error. + + This function should parse the user provided value and store in the + provided temporary storage any data as required by the update func. + There is sufficient space in the temporary storage to store a double. + Note that the update func may not be called if any other error occurs + so any memory allocated should be thread-local so that it may be freed + automatically at the end of the statement. +*/ + +typedef int (*mysql_var_check_func)(MYSQL_THD thd, + struct st_mysql_sys_var *var, + void *save, struct st_mysql_value *value); + +/* + SYNOPSIS + (*mysql_var_update_func)() + thd thread handle + var dynamic variable being altered + var_ptr pointer to dynamic variable + save pointer to temporary storage + RETURN + NONE + + This function should use the validated value stored in the temporary store + and persist it in the provided pointer to the dynamic variable. + For example, strings may require memory to be allocated. +*/ +typedef void (*mysql_var_update_func)(MYSQL_THD thd, + struct st_mysql_sys_var *var, + void *var_ptr, const void *save); + + +/* the following declarations are for internal use only */ + + +#define PLUGIN_VAR_MASK \ + (PLUGIN_VAR_READONLY | PLUGIN_VAR_NOSYSVAR | \ + PLUGIN_VAR_NOCMDOPT | PLUGIN_VAR_NOCMDARG | \ + PLUGIN_VAR_OPCMDARG | PLUGIN_VAR_RQCMDARG | PLUGIN_VAR_MEMALLOC) + +#define MYSQL_PLUGIN_VAR_HEADER \ + int flags; \ + const char *name; \ + const char *comment; \ + mysql_var_check_func check; \ + mysql_var_update_func update + +#define MYSQL_SYSVAR_NAME(name) mysql_sysvar_ ## name +#define MYSQL_SYSVAR(name) \ + ((struct st_mysql_sys_var *)&(MYSQL_SYSVAR_NAME(name))) + +/* + for global variables, the value pointer is the first + element after the header, the default value is the second. + for thread variables, the value offset is the first + element after the header, the default value is the second. +*/ + + +#define DECLARE_MYSQL_SYSVAR_BASIC(name, type) struct { \ + MYSQL_PLUGIN_VAR_HEADER; \ + type *value; \ + const type def_val; \ +} MYSQL_SYSVAR_NAME(name) + +#define DECLARE_MYSQL_SYSVAR_SIMPLE(name, type) struct { \ + MYSQL_PLUGIN_VAR_HEADER; \ + type *value; type def_val; \ + type min_val; type max_val; \ + type blk_sz; \ +} MYSQL_SYSVAR_NAME(name) + +#define DECLARE_MYSQL_SYSVAR_TYPELIB(name, type) struct { \ + MYSQL_PLUGIN_VAR_HEADER; \ + type *value; type def_val; \ + TYPELIB *typelib; \ +} MYSQL_SYSVAR_NAME(name) + +#define DECLARE_THDVAR_FUNC(type) \ + type *(*resolve)(MYSQL_THD thd, int offset) + +#define DECLARE_MYSQL_THDVAR_BASIC(name, type) struct { \ + MYSQL_PLUGIN_VAR_HEADER; \ + int offset; \ + const type def_val; \ + DECLARE_THDVAR_FUNC(type); \ +} MYSQL_SYSVAR_NAME(name) + +#define DECLARE_MYSQL_THDVAR_SIMPLE(name, type) struct { \ + MYSQL_PLUGIN_VAR_HEADER; \ + int offset; \ + type def_val; type min_val; \ + type max_val; type blk_sz; \ + DECLARE_THDVAR_FUNC(type); \ +} MYSQL_SYSVAR_NAME(name) + +#define DECLARE_MYSQL_THDVAR_TYPELIB(name, type) struct { \ + MYSQL_PLUGIN_VAR_HEADER; \ + int offset; \ + const type def_val; \ + DECLARE_THDVAR_FUNC(type); \ + TYPELIB *typelib; \ +} MYSQL_SYSVAR_NAME(name) + + +/* + the following declarations are for use by plugin implementors +*/ + +#define MYSQL_SYSVAR_BOOL(name, varname, opt, comment, check, update, def) \ +DECLARE_MYSQL_SYSVAR_BASIC(name, char) = { \ + PLUGIN_VAR_BOOL | ((opt) & PLUGIN_VAR_MASK), \ + #name, comment, check, update, &varname, def} + +#define MYSQL_SYSVAR_STR(name, varname, opt, comment, check, update, def) \ +DECLARE_MYSQL_SYSVAR_BASIC(name, char *) = { \ + PLUGIN_VAR_STR | ((opt) & PLUGIN_VAR_MASK), \ + #name, comment, check, update, &varname, def} + +#define MYSQL_SYSVAR_INT(name, varname, opt, comment, check, update, def, min, max, blk) \ +DECLARE_MYSQL_SYSVAR_SIMPLE(name, int) = { \ + PLUGIN_VAR_INT | ((opt) & PLUGIN_VAR_MASK), \ + #name, comment, check, update, &varname, def, min, max, blk } + +#define MYSQL_SYSVAR_UINT(name, varname, opt, comment, check, update, def, min, max, blk) \ +DECLARE_MYSQL_SYSVAR_SIMPLE(name, unsigned int) = { \ + PLUGIN_VAR_INT | PLUGIN_VAR_UNSIGNED | ((opt) & PLUGIN_VAR_MASK), \ + #name, comment, check, update, &varname, def, min, max, blk } + +#define MYSQL_SYSVAR_LONG(name, varname, opt, comment, check, update, def, min, max, blk) \ +DECLARE_MYSQL_SYSVAR_SIMPLE(name, long) = { \ + PLUGIN_VAR_LONG | ((opt) & PLUGIN_VAR_MASK), \ + #name, comment, check, update, &varname, def, min, max, blk } + +#define MYSQL_SYSVAR_ULONG(name, varname, opt, comment, check, update, def, min, max, blk) \ +DECLARE_MYSQL_SYSVAR_SIMPLE(name, unsigned long) = { \ + PLUGIN_VAR_LONG | PLUGIN_VAR_UNSIGNED | ((opt) & PLUGIN_VAR_MASK), \ + #name, comment, check, update, &varname, def, min, max, blk } + +#define MYSQL_SYSVAR_LONGLONG(name, varname, opt, comment, check, update, def, min, max, blk) \ +DECLARE_MYSQL_SYSVAR_SIMPLE(name, long long) = { \ + PLUGIN_VAR_LONGLONG | ((opt) & PLUGIN_VAR_MASK), \ + #name, comment, check, update, &varname, def, min, max, blk } + +#define MYSQL_SYSVAR_ULONGLONG(name, varname, opt, comment, check, update, def, min, max, blk) \ +DECLARE_MYSQL_SYSVAR_SIMPLE(name, unsigned long long) = { \ + PLUGIN_VAR_LONGLONG | PLUGIN_VAR_UNSIGNED | ((opt) & PLUGIN_VAR_MASK), \ + #name, comment, check, update, &varname, def, min, max, blk } + +#define MYSQL_SYSVAR_ENUM(name, varname, opt, comment, check, update, def, typelib) \ +DECLARE_MYSQL_SYSVAR_TYPELIB(name, unsigned long) = { \ + PLUGIN_VAR_ENUM | ((opt) & PLUGIN_VAR_MASK), \ + #name, comment, check, update, &varname, def, typelib } + +#define MYSQL_SYSVAR_SET(name, varname, opt, comment, check, update, def, typelib) \ +DECLARE_MYSQL_SYSVAR_TYPELIB(name, unsigned long long) = { \ + PLUGIN_VAR_SET | ((opt) & PLUGIN_VAR_MASK), \ + #name, comment, check, update, &varname, def, typelib } + +#define MYSQL_SYSVAR_DOUBLE(name, varname, opt, comment, check, update, def, min, max, blk) \ +DECLARE_MYSQL_SYSVAR_SIMPLE(name, double) = { \ + PLUGIN_VAR_DOUBLE | ((opt) & PLUGIN_VAR_MASK), \ + #name, comment, check, update, &varname, def, min, max, blk } + +#define MYSQL_THDVAR_BOOL(name, opt, comment, check, update, def) \ +DECLARE_MYSQL_THDVAR_BASIC(name, char) = { \ + PLUGIN_VAR_BOOL | PLUGIN_VAR_THDLOCAL | ((opt) & PLUGIN_VAR_MASK), \ + #name, comment, check, update, -1, def, NULL} + +#define MYSQL_THDVAR_STR(name, opt, comment, check, update, def) \ +DECLARE_MYSQL_THDVAR_BASIC(name, char *) = { \ + PLUGIN_VAR_STR | PLUGIN_VAR_THDLOCAL | ((opt) & PLUGIN_VAR_MASK), \ + #name, comment, check, update, -1, def, NULL} + +#define MYSQL_THDVAR_INT(name, opt, comment, check, update, def, min, max, blk) \ +DECLARE_MYSQL_THDVAR_SIMPLE(name, int) = { \ + PLUGIN_VAR_INT | PLUGIN_VAR_THDLOCAL | ((opt) & PLUGIN_VAR_MASK), \ + #name, comment, check, update, -1, def, min, max, blk, NULL } + +#define MYSQL_THDVAR_UINT(name, opt, comment, check, update, def, min, max, blk) \ +DECLARE_MYSQL_THDVAR_SIMPLE(name, unsigned int) = { \ + PLUGIN_VAR_INT | PLUGIN_VAR_THDLOCAL | PLUGIN_VAR_UNSIGNED | ((opt) & PLUGIN_VAR_MASK), \ + #name, comment, check, update, -1, def, min, max, blk, NULL } + +#define MYSQL_THDVAR_LONG(name, opt, comment, check, update, def, min, max, blk) \ +DECLARE_MYSQL_THDVAR_SIMPLE(name, long) = { \ + PLUGIN_VAR_LONG | PLUGIN_VAR_THDLOCAL | ((opt) & PLUGIN_VAR_MASK), \ + #name, comment, check, update, -1, def, min, max, blk, NULL } + +#define MYSQL_THDVAR_ULONG(name, opt, comment, check, update, def, min, max, blk) \ +DECLARE_MYSQL_THDVAR_SIMPLE(name, unsigned long) = { \ + PLUGIN_VAR_LONG | PLUGIN_VAR_THDLOCAL | PLUGIN_VAR_UNSIGNED | ((opt) & PLUGIN_VAR_MASK), \ + #name, comment, check, update, -1, def, min, max, blk, NULL } + +#define MYSQL_THDVAR_LONGLONG(name, opt, comment, check, update, def, min, max, blk) \ +DECLARE_MYSQL_THDVAR_SIMPLE(name, long long) = { \ + PLUGIN_VAR_LONGLONG | PLUGIN_VAR_THDLOCAL | ((opt) & PLUGIN_VAR_MASK), \ + #name, comment, check, update, -1, def, min, max, blk, NULL } + +#define MYSQL_THDVAR_ULONGLONG(name, opt, comment, check, update, def, min, max, blk) \ +DECLARE_MYSQL_THDVAR_SIMPLE(name, unsigned long long) = { \ + PLUGIN_VAR_LONGLONG | PLUGIN_VAR_THDLOCAL | PLUGIN_VAR_UNSIGNED | ((opt) & PLUGIN_VAR_MASK), \ + #name, comment, check, update, -1, def, min, max, blk, NULL } + +#define MYSQL_THDVAR_ENUM(name, opt, comment, check, update, def, typelib) \ +DECLARE_MYSQL_THDVAR_TYPELIB(name, unsigned long) = { \ + PLUGIN_VAR_ENUM | PLUGIN_VAR_THDLOCAL | ((opt) & PLUGIN_VAR_MASK), \ + #name, comment, check, update, -1, def, NULL, typelib } + +#define MYSQL_THDVAR_SET(name, opt, comment, check, update, def, typelib) \ +DECLARE_MYSQL_THDVAR_TYPELIB(name, unsigned long long) = { \ + PLUGIN_VAR_SET | PLUGIN_VAR_THDLOCAL | ((opt) & PLUGIN_VAR_MASK), \ + #name, comment, check, update, -1, def, NULL, typelib } + +#define MYSQL_THDVAR_DOUBLE(name, opt, comment, check, update, def, min, max, blk) \ +DECLARE_MYSQL_THDVAR_SIMPLE(name, double) = { \ + PLUGIN_VAR_DOUBLE | PLUGIN_VAR_THDLOCAL | ((opt) & PLUGIN_VAR_MASK), \ + #name, comment, check, update, -1, def, min, max, blk, NULL } + +/* accessor macros */ + +#define SYSVAR(name) \ + (*(MYSQL_SYSVAR_NAME(name).value)) + +/* when thd == null, result points to global value */ +#define THDVAR(thd, name) \ + (*(MYSQL_SYSVAR_NAME(name).resolve(thd, MYSQL_SYSVAR_NAME(name).offset))) + + +/* + Plugin description structure. +*/ + +struct st_mysql_plugin +{ + int type; /* the plugin type (a MYSQL_XXX_PLUGIN value) */ + void *info; /* pointer to type-specific plugin descriptor */ + const char *name; /* plugin name */ + const char *author; /* plugin author (for I_S.PLUGINS) */ + const char *descr; /* general descriptive text (for I_S.PLUGINS) */ + int license; /* the plugin license (PLUGIN_LICENSE_XXX) */ + int (*init)(void *); /* the function to invoke when plugin is loaded */ + int (*deinit)(void *);/* the function to invoke when plugin is unloaded */ + unsigned int version; /* plugin version (for I_S.PLUGINS) */ + struct st_mysql_show_var *status_vars; + struct st_mysql_sys_var **system_vars; + void * __reserved1; /* reserved for dependency checking */ + unsigned long flags; /* flags for plugin */ +}; + +/* + MariaDB extension for plugins declaration structure. + + It also copy current MySQL plugin fields to have more independency + in plugins extension +*/ + +struct st_maria_plugin +{ + int type; /* the plugin type (a MYSQL_XXX_PLUGIN value) */ + void *info; /* pointer to type-specific plugin descriptor */ + const char *name; /* plugin name */ + const char *author; /* plugin author (for SHOW PLUGINS) */ + const char *descr; /* general descriptive text (for SHOW PLUGINS ) */ + int license; /* the plugin license (PLUGIN_LICENSE_XXX) */ + int (*init)(void *); /* the function to invoke when plugin is loaded */ + int (*deinit)(void *);/* the function to invoke when plugin is unloaded */ + unsigned int version; /* plugin version (for SHOW PLUGINS) */ + struct st_mysql_show_var *status_vars; + struct st_mysql_sys_var **system_vars; + const char *version_info; /* plugin version string */ + unsigned int maturity; /* MariaDB_PLUGIN_MATURITY_XXX */ +}; + +/************************************************************************* + API for Full-text parser plugin. (MYSQL_FTPARSER_PLUGIN) +*/ +#include "plugin_ftparser.h" + +/************************************************************************* + API for Storage Engine plugin. (MYSQL_DAEMON_PLUGIN) +*/ + +/* handlertons of different MySQL releases are incompatible */ +#define MYSQL_DAEMON_INTERFACE_VERSION (MYSQL_VERSION_ID << 8) + +/* + Here we define only the descriptor structure, that is referred from + st_mysql_plugin. +*/ + +struct st_mysql_daemon +{ + int interface_version; +}; + + +/************************************************************************* + API for I_S plugin. (MYSQL_INFORMATION_SCHEMA_PLUGIN) +*/ + +/* handlertons of different MySQL releases are incompatible */ +#define MYSQL_INFORMATION_SCHEMA_INTERFACE_VERSION (MYSQL_VERSION_ID << 8) + +/* + Here we define only the descriptor structure, that is referred from + st_mysql_plugin. +*/ + +struct st_mysql_information_schema +{ + int interface_version; +}; + + +/************************************************************************* + API for Storage Engine plugin. (MYSQL_STORAGE_ENGINE_PLUGIN) +*/ + +/* handlertons of different MySQL releases are incompatible */ +#define MYSQL_HANDLERTON_INTERFACE_VERSION (MYSQL_VERSION_ID << 8) + +/* + The real API is in the sql/handler.h + Here we define only the descriptor structure, that is referred from + st_mysql_plugin. +*/ + +struct st_mysql_storage_engine +{ + int interface_version; +}; + +struct handlerton; + + +/* + API for Replication plugin. (MYSQL_REPLICATION_PLUGIN) +*/ + #define MYSQL_REPLICATION_INTERFACE_VERSION 0x0200 + + /** + Replication plugin descriptor + */ + struct Mysql_replication { + int interface_version; + }; + +/************************************************************************* + st_mysql_value struct for reading values from mysqld. + Used by server variables framework to parse user-provided values. + Will be used for arguments when implementing UDFs. + + Note that val_str() returns a string in temporary memory + that will be freed at the end of statement. Copy the string + if you need it to persist. +*/ + +#define MYSQL_VALUE_TYPE_STRING 0 +#define MYSQL_VALUE_TYPE_REAL 1 +#define MYSQL_VALUE_TYPE_INT 2 + +struct st_mysql_value +{ + int (*value_type)(struct st_mysql_value *); + const char *(*val_str)(struct st_mysql_value *, char *buffer, int *length); + int (*val_real)(struct st_mysql_value *, double *realbuf); + int (*val_int)(struct st_mysql_value *, long long *intbuf); + int (*is_unsigned)(struct st_mysql_value *); +}; + + +/************************************************************************* + Miscellaneous functions for plugin implementors +*/ + +#ifdef __cplusplus +extern "C" { +#endif + +int thd_in_lock_tables(const MYSQL_THD thd); +int thd_tablespace_op(const MYSQL_THD thd); +long long thd_test_options(const MYSQL_THD thd, long long test_options); +int thd_sql_command(const MYSQL_THD thd); +void **thd_ha_data(const MYSQL_THD thd, const struct handlerton *hton); +void thd_storage_lock_wait(MYSQL_THD thd, long long value); +int thd_tx_isolation(const MYSQL_THD thd); +int thd_tx_is_read_only(const MYSQL_THD thd); +int thd_rpl_is_parallel(const MYSQL_THD thd); +/** + Create a temporary file. + + @details + The temporary file is created in a location specified by the mysql + server configuration (--tmpdir option). The caller does not need to + delete the file, it will be deleted automatically. + + @param prefix prefix for temporary file name + @retval -1 error + @retval >= 0 a file handle that can be passed to dup or my_close +*/ +int mysql_tmpfile(const char *prefix); + +/** + Return the thread id of a user thread + + @param thd user thread connection handle + @return thread id +*/ +unsigned long thd_get_thread_id(const MYSQL_THD thd); + +/** + Get the XID for this connection's transaction + + @param thd user thread connection handle + @param xid location where identifier is stored +*/ +void thd_get_xid(const MYSQL_THD thd, MYSQL_XID *xid); + +/** + Invalidate the query cache for a given table. + + @param thd user thread connection handle + @param key databasename\\0tablename\\0 + @param key_length length of key in bytes, including the NUL bytes + @param using_trx flag: TRUE if using transactions, FALSE otherwise +*/ +void mysql_query_cache_invalidate4(MYSQL_THD thd, + const char *key, unsigned int key_length, + int using_trx); + + +/** + Provide a handler data getter to simplify coding +*/ +void *thd_get_ha_data(const MYSQL_THD thd, const struct handlerton *hton); + + +/** + Provide a handler data setter to simplify coding + + @details + Set ha_data pointer (storage engine per-connection information). + + To avoid unclean deactivation (uninstall) of storage engine plugin + in the middle of transaction, additional storage engine plugin + lock is acquired. + + If ha_data is not null and storage engine plugin was not locked + by thd_set_ha_data() in this connection before, storage engine + plugin gets locked. + + If ha_data is null and storage engine plugin was locked by + thd_set_ha_data() in this connection before, storage engine + plugin lock gets released. + + If handlerton::close_connection() didn't reset ha_data, server does + it immediately after calling handlerton::close_connection(). +*/ +void thd_set_ha_data(MYSQL_THD thd, const struct handlerton *hton, + const void *ha_data); + + +/** + Signal that the first part of handler commit is finished, and that the + committed transaction is now visible and has fixed commit ordering with + respect to other transactions. The commit need _not_ be durable yet, and + typically will not be when this call makes sense. + + This call is optional, if the storage engine does not call it the upper + layer will after the handler commit() method is done. However, the storage + engine may choose to call it itself to increase the possibility for group + commit. + + In-order parallel replication uses this to apply different transaction in + parallel, but delay the commits of later transactions until earlier + transactions have committed first, thus achieving increased performance on + multi-core systems while still preserving full transaction consistency. + + The storage engine can call this from within the commit() method, typically + after the commit record has been written to the transaction log, but before + the log has been fsync()'ed. This will allow the next replicated transaction + to proceed to commit before the first one has done fsync() or similar. Thus, + it becomes possible for multiple sequential replicated transactions to share + a single fsync() inside the engine in group commit. + + Note that this method should _not_ be called from within the commit_ordered() + method, or any other place in the storage engine. When commit_ordered() is + used (typically when binlog is enabled), the transaction coordinator takes + care of this and makes group commit in the storage engine possible without + any other action needed on the part of the storage engine. This function + thd_wakeup_subsequent_commits() is only needed when no transaction + coordinator is used, meaning a single storage engine and no binary log. +*/ +void thd_wakeup_subsequent_commits(MYSQL_THD thd, int wakeup_error); + +#ifdef __cplusplus +} +#endif + +#endif + diff --git a/EQ2/source/depends/mariadb-10.1.19/include/mysql/plugin_audit.h b/EQ2/source/depends/mariadb-10.1.19/include/mysql/plugin_audit.h new file mode 100644 index 000000000..cbdd6591b --- /dev/null +++ b/EQ2/source/depends/mariadb-10.1.19/include/mysql/plugin_audit.h @@ -0,0 +1,186 @@ +/* Copyright (c) 2007, 2013, Oracle and/or its affiliates. All rights reserved. + + This program is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; version 2 of + the License. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ + +#ifndef _my_audit_h +#define _my_audit_h + +/************************************************************************* + API for Audit plugin. (MYSQL_AUDIT_PLUGIN) +*/ + +#include "plugin.h" + +#ifdef __cplusplus +extern "C" { +#endif + +#define MYSQL_AUDIT_CLASS_MASK_SIZE 1 + +#define MYSQL_AUDIT_INTERFACE_VERSION 0x0302 + + +/************************************************************************* + AUDIT CLASS : GENERAL + + LOG events occurs before emitting to the general query log. + ERROR events occur before transmitting errors to the user. + RESULT events occur after transmitting a resultset to the user. + STATUS events occur after transmitting a resultset or errors + to the user. +*/ + +#define MYSQL_AUDIT_GENERAL_CLASS 0 +#define MYSQL_AUDIT_GENERAL_CLASSMASK (1 << MYSQL_AUDIT_GENERAL_CLASS) +#define MYSQL_AUDIT_GENERAL_LOG 0 +#define MYSQL_AUDIT_GENERAL_ERROR 1 +#define MYSQL_AUDIT_GENERAL_RESULT 2 +#define MYSQL_AUDIT_GENERAL_STATUS 3 + +struct mysql_event_general +{ + unsigned int event_subclass; + int general_error_code; + unsigned long general_thread_id; + const char *general_user; + unsigned int general_user_length; + const char *general_command; + unsigned int general_command_length; + const char *general_query; + unsigned int general_query_length; + struct charset_info_st *general_charset; + unsigned long long general_time; + unsigned long long general_rows; + /* Added in version 0x302 */ + unsigned long long query_id; + const char *database; + unsigned int database_length; +}; + + +/* + AUDIT CLASS : CONNECTION + + CONNECT occurs after authentication phase is completed. + DISCONNECT occurs after connection is terminated. + CHANGE_USER occurs after COM_CHANGE_USER RPC is completed. +*/ + +#define MYSQL_AUDIT_CONNECTION_CLASS 1 +#define MYSQL_AUDIT_CONNECTION_CLASSMASK (1 << MYSQL_AUDIT_CONNECTION_CLASS) +#define MYSQL_AUDIT_CONNECTION_CONNECT 0 +#define MYSQL_AUDIT_CONNECTION_DISCONNECT 1 +#define MYSQL_AUDIT_CONNECTION_CHANGE_USER 2 + +struct mysql_event_connection +{ + unsigned int event_subclass; + int status; + unsigned long thread_id; + const char *user; + unsigned int user_length; + const char *priv_user; + unsigned int priv_user_length; + const char *external_user; + unsigned int external_user_length; + const char *proxy_user; + unsigned int proxy_user_length; + const char *host; + unsigned int host_length; + const char *ip; + unsigned int ip_length; + const char *database; + unsigned int database_length; +}; + +/* + AUDIT CLASS : TABLE + + LOCK occurs when a connection "locks" (this does not necessarily mean a table + lock and also happens for row-locking engines) the table at the beginning of + a statement. This event is generated at the beginning of every statement for + every affected table, unless there's a LOCK TABLES statement in effect (in + which case it is generated once for LOCK TABLES and then is suppressed until + the tables are unlocked). + + CREATE/DROP/RENAME occur when a table is created, dropped, or renamed. +*/ + +#define MYSQL_AUDIT_TABLE_CLASS 15 +#define MYSQL_AUDIT_TABLE_CLASSMASK (1 << MYSQL_AUDIT_TABLE_CLASS) +#define MYSQL_AUDIT_TABLE_LOCK 0 +#define MYSQL_AUDIT_TABLE_CREATE 1 +#define MYSQL_AUDIT_TABLE_DROP 2 +#define MYSQL_AUDIT_TABLE_RENAME 3 +#define MYSQL_AUDIT_TABLE_ALTER 4 + +struct mysql_event_table +{ + unsigned int event_subclass; + unsigned long thread_id; + const char *user; + const char *priv_user; + const char *priv_host; + const char *external_user; + const char *proxy_user; + const char *host; + const char *ip; + const char *database; + unsigned int database_length; + const char *table; + unsigned int table_length; + /* for MYSQL_AUDIT_TABLE_LOCK, true if read-only, false if read/write */ + int read_only; + /* for MYSQL_AUDIT_TABLE_RENAME */ + const char *new_database; + unsigned int new_database_length; + const char *new_table; + unsigned int new_table_length; + /* Added in version 0x302 */ + unsigned long long query_id; +}; + +/************************************************************************* + Here we define the descriptor structure, that is referred from + st_mysql_plugin. + + release_thd() event occurs when the event class consumer is to be + disassociated from the specified THD. This would typically occur + before some operation which may require sleeping - such as when + waiting for the next query from the client. + + event_notify() is invoked whenever an event occurs which is of any + class for which the plugin has interest. The second argument + indicates the specific event class and the third argument is data + as required for that class. + + class_mask is an array of bits used to indicate what event classes + that this plugin wants to receive. +*/ + +struct st_mysql_audit +{ + int interface_version; + void (*release_thd)(MYSQL_THD); + void (*event_notify)(MYSQL_THD, unsigned int, const void *); + unsigned long class_mask[MYSQL_AUDIT_CLASS_MASK_SIZE]; +}; + + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/EQ2/source/depends/mariadb-10.1.19/include/mysql/plugin_audit.h.pp b/EQ2/source/depends/mariadb-10.1.19/include/mysql/plugin_audit.h.pp new file mode 100644 index 000000000..24f2c6934 --- /dev/null +++ b/EQ2/source/depends/mariadb-10.1.19/include/mysql/plugin_audit.h.pp @@ -0,0 +1,481 @@ +typedef char my_bool; +typedef void * MYSQL_PLUGIN; +extern struct my_snprintf_service_st { + size_t (*my_snprintf_type)(char*, size_t, const char*, ...); + size_t (*my_vsnprintf_type)(char *, size_t, const char*, va_list); +} *my_snprintf_service; +size_t my_snprintf(char* to, size_t n, const char* fmt, ...); +size_t my_vsnprintf(char *to, size_t n, const char* fmt, va_list ap); +struct st_mysql_lex_string +{ + char *str; + size_t length; +}; +typedef struct st_mysql_lex_string MYSQL_LEX_STRING; +extern struct thd_alloc_service_st { + void *(*thd_alloc_func)(void*, unsigned int); + void *(*thd_calloc_func)(void*, unsigned int); + char *(*thd_strdup_func)(void*, const char *); + char *(*thd_strmake_func)(void*, const char *, unsigned int); + void *(*thd_memdup_func)(void*, const void*, unsigned int); + MYSQL_LEX_STRING *(*thd_make_lex_string_func)(void*, MYSQL_LEX_STRING *, + const char *, unsigned int, int); +} *thd_alloc_service; +void *thd_alloc(void* thd, unsigned int size); +void *thd_calloc(void* thd, unsigned int size); +char *thd_strdup(void* thd, const char *str); +char *thd_strmake(void* thd, const char *str, unsigned int size); +void *thd_memdup(void* thd, const void* str, unsigned int size); +MYSQL_LEX_STRING *thd_make_lex_string(void* thd, MYSQL_LEX_STRING *lex_str, + const char *str, unsigned int size, + int allocate_lex_string); +typedef enum _thd_wait_type_e { + THD_WAIT_SLEEP= 1, + THD_WAIT_DISKIO= 2, + THD_WAIT_ROW_LOCK= 3, + THD_WAIT_GLOBAL_LOCK= 4, + THD_WAIT_META_DATA_LOCK= 5, + THD_WAIT_TABLE_LOCK= 6, + THD_WAIT_USER_LOCK= 7, + THD_WAIT_BINLOG= 8, + THD_WAIT_GROUP_COMMIT= 9, + THD_WAIT_SYNC= 10, + THD_WAIT_NET= 11, + THD_WAIT_LAST= 12 +} thd_wait_type; +extern struct thd_wait_service_st { + void (*thd_wait_begin_func)(void*, int); + void (*thd_wait_end_func)(void*); +} *thd_wait_service; +void thd_wait_begin(void* thd, int wait_type); +void thd_wait_end(void* thd); +extern struct progress_report_service_st { + void (*thd_progress_init_func)(void* thd, unsigned int max_stage); + void (*thd_progress_report_func)(void* thd, + unsigned long long progress, + unsigned long long max_progress); + void (*thd_progress_next_stage_func)(void* thd); + void (*thd_progress_end_func)(void* thd); + const char *(*set_thd_proc_info_func)(void*, const char *info, + const char *func, + const char *file, + unsigned int line); +} *progress_report_service; +void thd_progress_init(void* thd, unsigned int max_stage); +void thd_progress_report(void* thd, + unsigned long long progress, + unsigned long long max_progress); +void thd_progress_next_stage(void* thd); +void thd_progress_end(void* thd); +const char *set_thd_proc_info(void*, const char * info, const char *func, + const char *file, unsigned int line); +extern void (*debug_sync_C_callback_ptr)(void*, const char *, size_t); +enum thd_kill_levels { + THD_IS_NOT_KILLED=0, + THD_ABORT_SOFTLY=50, + THD_ABORT_ASAP=100, +}; +extern struct kill_statement_service_st { + enum thd_kill_levels (*thd_kill_level_func)(const void*); +} *thd_kill_statement_service; +enum thd_kill_levels thd_kill_level(const void*); +typedef long my_time_t; +enum enum_mysql_timestamp_type +{ + MYSQL_TIMESTAMP_NONE= -2, MYSQL_TIMESTAMP_ERROR= -1, + MYSQL_TIMESTAMP_DATE= 0, MYSQL_TIMESTAMP_DATETIME= 1, MYSQL_TIMESTAMP_TIME= 2 +}; +typedef struct st_mysql_time +{ + unsigned int year, month, day, hour, minute, second; + unsigned long second_part; + my_bool neg; + enum enum_mysql_timestamp_type time_type; +} MYSQL_TIME; +extern struct thd_timezone_service_st { + my_time_t (*thd_TIME_to_gmt_sec)(void* thd, const MYSQL_TIME *ltime, unsigned int *errcode); + void (*thd_gmt_sec_to_TIME)(void* thd, MYSQL_TIME *ltime, my_time_t t); +} *thd_timezone_service; +my_time_t thd_TIME_to_gmt_sec(void* thd, const MYSQL_TIME *ltime, unsigned int *errcode); +void thd_gmt_sec_to_TIME(void* thd, MYSQL_TIME *ltime, my_time_t t); +extern struct my_sha1_service_st { + void (*my_sha1_type)(unsigned char*, const char*, size_t); + void (*my_sha1_multi_type)(unsigned char*, ...); + size_t (*my_sha1_context_size_type)(); + void (*my_sha1_init_type)(void *); + void (*my_sha1_input_type)(void *, const unsigned char *, size_t); + void (*my_sha1_result_type)(void *, unsigned char *); +} *my_sha1_service; +void my_sha1(unsigned char*, const char*, size_t); +void my_sha1_multi(unsigned char*, ...); +size_t my_sha1_context_size(); +void my_sha1_init(void *context); +void my_sha1_input(void *context, const unsigned char *buf, size_t len); +void my_sha1_result(void *context, unsigned char *digest); +extern struct my_md5_service_st { + void (*my_md5_type)(unsigned char*, const char*, size_t); + void (*my_md5_multi_type)(unsigned char*, ...); + size_t (*my_md5_context_size_type)(); + void (*my_md5_init_type)(void *); + void (*my_md5_input_type)(void *, const unsigned char *, size_t); + void (*my_md5_result_type)(void *, unsigned char *); +} *my_md5_service; +void my_md5(unsigned char*, const char*, size_t); +void my_md5_multi(unsigned char*, ...); +size_t my_md5_context_size(); +void my_md5_init(void *context); +void my_md5_input(void *context, const unsigned char *buf, size_t len); +void my_md5_result(void *context, unsigned char *digest); +typedef struct logger_handle_st LOGGER_HANDLE; +extern struct logger_service_st { + void (*logger_init_mutexes)(); + LOGGER_HANDLE* (*open)(const char *path, + unsigned long long size_limit, + unsigned int rotations); + int (*close)(LOGGER_HANDLE *log); + int (*vprintf)(LOGGER_HANDLE *log, const char *fmt, va_list argptr); + int (*printf)(LOGGER_HANDLE *log, const char *fmt, ...); + int (*write)(LOGGER_HANDLE *log, const char *buffer, size_t size); + int (*rotate)(LOGGER_HANDLE *log); +} *logger_service; + void logger_init_mutexes(); + LOGGER_HANDLE *logger_open(const char *path, + unsigned long long size_limit, + unsigned int rotations); + int logger_close(LOGGER_HANDLE *log); + int logger_vprintf(LOGGER_HANDLE *log, const char *fmt, va_list argptr); + int logger_printf(LOGGER_HANDLE *log, const char *fmt, ...); + int logger_write(LOGGER_HANDLE *log, const char *buffer, size_t size); + int logger_rotate(LOGGER_HANDLE *log); +extern struct thd_autoinc_service_st { + void (*thd_get_autoinc_func)(const void* thd, + unsigned long* off, unsigned long* inc); +} *thd_autoinc_service; +void thd_get_autoinc(const void* thd, + unsigned long* off, unsigned long* inc); +extern struct thd_error_context_service_st { + const char *(*thd_get_error_message_func)(const void* thd); + unsigned int (*thd_get_error_number_func)(const void* thd); + unsigned long (*thd_get_error_row_func)(const void* thd); + void (*thd_inc_error_row_func)(void* thd); + char *(*thd_get_error_context_description_func)(void* thd, + char *buffer, + unsigned int length, + unsigned int max_query_length); +} *thd_error_context_service; +const char *thd_get_error_message(const void* thd); +unsigned int thd_get_error_number(const void* thd); +unsigned long thd_get_error_row(const void* thd); +void thd_inc_error_row(void* thd); +char *thd_get_error_context_description(void* thd, + char *buffer, unsigned int length, + unsigned int max_query_length); +typedef int MYSQL_THD_KEY_T; +extern struct thd_specifics_service_st { + int (*thd_key_create_func)(MYSQL_THD_KEY_T *key); + void (*thd_key_delete_func)(MYSQL_THD_KEY_T *key); + void *(*thd_getspecific_func)(void* thd, MYSQL_THD_KEY_T key); + int (*thd_setspecific_func)(void* thd, MYSQL_THD_KEY_T key, void *value); +} *thd_specifics_service; +int thd_key_create(MYSQL_THD_KEY_T *key); +void thd_key_delete(MYSQL_THD_KEY_T *key); +void* thd_getspecific(void* thd, MYSQL_THD_KEY_T key); +int thd_setspecific(void* thd, MYSQL_THD_KEY_T key, void *value); +struct encryption_service_st { + unsigned int (*encryption_key_get_latest_version_func)(unsigned int key_id); + unsigned int (*encryption_key_get_func)(unsigned int key_id, unsigned int key_version, + unsigned char* buffer, unsigned int* length); + unsigned int (*encryption_ctx_size_func)(unsigned int key_id, unsigned int key_version); + int (*encryption_ctx_init_func)(void *ctx, const unsigned char* key, unsigned int klen, + const unsigned char* iv, unsigned int ivlen, + int flags, unsigned int key_id, + unsigned int key_version); + int (*encryption_ctx_update_func)(void *ctx, const unsigned char* src, unsigned int slen, + unsigned char* dst, unsigned int* dlen); + int (*encryption_ctx_finish_func)(void *ctx, unsigned char* dst, unsigned int* dlen); + unsigned int (*encryption_encrypted_length_func)(unsigned int slen, unsigned int key_id, unsigned int key_version); +}; +extern struct encryption_service_st encryption_handler; +static inline unsigned int encryption_key_id_exists(unsigned int id) +{ + return encryption_handler.encryption_key_get_latest_version_func(id) != (~(unsigned int)0); +} +static inline unsigned int encryption_key_version_exists(unsigned int id, unsigned int version) +{ + unsigned int unused; + return encryption_handler.encryption_key_get_func((id),(version),(NULL),(&unused)) != (~(unsigned int)0); +} +static inline int encryption_crypt(const unsigned char* src, unsigned int slen, + unsigned char* dst, unsigned int* dlen, + const unsigned char* key, unsigned int klen, + const unsigned char* iv, unsigned int ivlen, + int flags, unsigned int key_id, unsigned int key_version) +{ + void *ctx= alloca(encryption_handler.encryption_ctx_size_func((key_id),(key_version))); + int res1, res2; + unsigned int d1, d2; + if ((res1= encryption_handler.encryption_ctx_init_func((ctx),(key),(klen),(iv),(ivlen),(flags),(key_id),(key_version)))) + return res1; + res1= encryption_handler.encryption_ctx_update_func((ctx),(src),(slen),(dst),(&d1)); + res2= encryption_handler.encryption_ctx_finish_func((ctx),(dst + d1),(&d2)); + *dlen= d1 + d2; + return res1 ? res1 : res2; +} +struct st_encryption_scheme_key { + unsigned int version; + unsigned char key[16]; +}; +struct st_encryption_scheme { + unsigned char iv[16]; + struct st_encryption_scheme_key key[3]; + unsigned int keyserver_requests; + unsigned int key_id; + unsigned int type; + void (*locker)(struct st_encryption_scheme *self, int release); +}; +extern struct encryption_scheme_service_st { + int (*encryption_scheme_encrypt_func) + (const unsigned char* src, unsigned int slen, + unsigned char* dst, unsigned int* dlen, + struct st_encryption_scheme *scheme, + unsigned int key_version, unsigned int i32_1, + unsigned int i32_2, unsigned long long i64); + int (*encryption_scheme_decrypt_func) + (const unsigned char* src, unsigned int slen, + unsigned char* dst, unsigned int* dlen, + struct st_encryption_scheme *scheme, + unsigned int key_version, unsigned int i32_1, + unsigned int i32_2, unsigned long long i64); +} *encryption_scheme_service; +int encryption_scheme_encrypt(const unsigned char* src, unsigned int slen, + unsigned char* dst, unsigned int* dlen, + struct st_encryption_scheme *scheme, + unsigned int key_version, unsigned int i32_1, + unsigned int i32_2, unsigned long long i64); +int encryption_scheme_decrypt(const unsigned char* src, unsigned int slen, + unsigned char* dst, unsigned int* dlen, + struct st_encryption_scheme *scheme, + unsigned int key_version, unsigned int i32_1, + unsigned int i32_2, unsigned long long i64); +struct st_mysql_xid { + long formatID; + long gtrid_length; + long bqual_length; + char data[128]; +}; +typedef struct st_mysql_xid MYSQL_XID; +enum enum_mysql_show_type +{ + SHOW_UNDEF, SHOW_BOOL, SHOW_UINT, SHOW_ULONG, + SHOW_ULONGLONG, SHOW_CHAR, SHOW_CHAR_PTR, + SHOW_ARRAY, SHOW_FUNC, SHOW_DOUBLE, + SHOW_SINT, SHOW_SLONG, SHOW_SLONGLONG, SHOW_SIMPLE_FUNC, + SHOW_always_last +}; +enum enum_var_type +{ + SHOW_OPT_DEFAULT= 0, SHOW_OPT_SESSION, SHOW_OPT_GLOBAL +}; +struct st_mysql_show_var { + const char *name; + void *value; + enum enum_mysql_show_type type; +}; +struct system_status_var; +typedef int (*mysql_show_var_func)(void*, struct st_mysql_show_var*, void *, struct system_status_var *status_var, enum enum_var_type); +struct st_mysql_sys_var; +struct st_mysql_value; +typedef int (*mysql_var_check_func)(void* thd, + struct st_mysql_sys_var *var, + void *save, struct st_mysql_value *value); +typedef void (*mysql_var_update_func)(void* thd, + struct st_mysql_sys_var *var, + void *var_ptr, const void *save); +struct st_mysql_plugin +{ + int type; + void *info; + const char *name; + const char *author; + const char *descr; + int license; + int (*init)(void *); + int (*deinit)(void *); + unsigned int version; + struct st_mysql_show_var *status_vars; + struct st_mysql_sys_var **system_vars; + void * __reserved1; + unsigned long flags; +}; +struct st_maria_plugin +{ + int type; + void *info; + const char *name; + const char *author; + const char *descr; + int license; + int (*init)(void *); + int (*deinit)(void *); + unsigned int version; + struct st_mysql_show_var *status_vars; + struct st_mysql_sys_var **system_vars; + const char *version_info; + unsigned int maturity; +}; +enum enum_ftparser_mode +{ + MYSQL_FTPARSER_SIMPLE_MODE= 0, + MYSQL_FTPARSER_WITH_STOPWORDS= 1, + MYSQL_FTPARSER_FULL_BOOLEAN_INFO= 2 +}; +enum enum_ft_token_type +{ + FT_TOKEN_EOF= 0, + FT_TOKEN_WORD= 1, + FT_TOKEN_LEFT_PAREN= 2, + FT_TOKEN_RIGHT_PAREN= 3, + FT_TOKEN_STOPWORD= 4 +}; +typedef struct st_mysql_ftparser_boolean_info +{ + enum enum_ft_token_type type; + int yesno; + int weight_adjust; + char wasign; + char trunc; + char prev; + char *quot; +} MYSQL_FTPARSER_BOOLEAN_INFO; +typedef struct st_mysql_ftparser_param +{ + int (*mysql_parse)(struct st_mysql_ftparser_param *, + const char *doc, int doc_len); + int (*mysql_add_word)(struct st_mysql_ftparser_param *, + const char *word, int word_len, + MYSQL_FTPARSER_BOOLEAN_INFO *boolean_info); + void *ftparser_state; + void *mysql_ftparam; + const struct charset_info_st *cs; + const char *doc; + int length; + unsigned int flags; + enum enum_ftparser_mode mode; +} MYSQL_FTPARSER_PARAM; +struct st_mysql_ftparser +{ + int interface_version; + int (*parse)(MYSQL_FTPARSER_PARAM *param); + int (*init)(MYSQL_FTPARSER_PARAM *param); + int (*deinit)(MYSQL_FTPARSER_PARAM *param); +}; +struct st_mysql_daemon +{ + int interface_version; +}; +struct st_mysql_information_schema +{ + int interface_version; +}; +struct st_mysql_storage_engine +{ + int interface_version; +}; +struct handlerton; + struct Mysql_replication { + int interface_version; + }; +struct st_mysql_value +{ + int (*value_type)(struct st_mysql_value *); + const char *(*val_str)(struct st_mysql_value *, char *buffer, int *length); + int (*val_real)(struct st_mysql_value *, double *realbuf); + int (*val_int)(struct st_mysql_value *, long long *intbuf); + int (*is_unsigned)(struct st_mysql_value *); +}; +int thd_in_lock_tables(const void* thd); +int thd_tablespace_op(const void* thd); +long long thd_test_options(const void* thd, long long test_options); +int thd_sql_command(const void* thd); +void **thd_ha_data(const void* thd, const struct handlerton *hton); +void thd_storage_lock_wait(void* thd, long long value); +int thd_tx_isolation(const void* thd); +int thd_tx_is_read_only(const void* thd); +int thd_rpl_is_parallel(const void* thd); +int mysql_tmpfile(const char *prefix); +unsigned long thd_get_thread_id(const void* thd); +void thd_get_xid(const void* thd, MYSQL_XID *xid); +void mysql_query_cache_invalidate4(void* thd, + const char *key, unsigned int key_length, + int using_trx); +void *thd_get_ha_data(const void* thd, const struct handlerton *hton); +void thd_set_ha_data(void* thd, const struct handlerton *hton, + const void *ha_data); +void thd_wakeup_subsequent_commits(void* thd, int wakeup_error); +struct mysql_event_general +{ + unsigned int event_subclass; + int general_error_code; + unsigned long general_thread_id; + const char *general_user; + unsigned int general_user_length; + const char *general_command; + unsigned int general_command_length; + const char *general_query; + unsigned int general_query_length; + struct charset_info_st *general_charset; + unsigned long long general_time; + unsigned long long general_rows; + unsigned long long query_id; + const char *database; + unsigned int database_length; +}; +struct mysql_event_connection +{ + unsigned int event_subclass; + int status; + unsigned long thread_id; + const char *user; + unsigned int user_length; + const char *priv_user; + unsigned int priv_user_length; + const char *external_user; + unsigned int external_user_length; + const char *proxy_user; + unsigned int proxy_user_length; + const char *host; + unsigned int host_length; + const char *ip; + unsigned int ip_length; + const char *database; + unsigned int database_length; +}; +struct mysql_event_table +{ + unsigned int event_subclass; + unsigned long thread_id; + const char *user; + const char *priv_user; + const char *priv_host; + const char *external_user; + const char *proxy_user; + const char *host; + const char *ip; + const char *database; + unsigned int database_length; + const char *table; + unsigned int table_length; + int read_only; + const char *new_database; + unsigned int new_database_length; + const char *new_table; + unsigned int new_table_length; + unsigned long long query_id; +}; +struct st_mysql_audit +{ + int interface_version; + void (*release_thd)(void*); + void (*event_notify)(void*, unsigned int, const void *); + unsigned long class_mask[1]; +}; diff --git a/EQ2/source/depends/mariadb-10.1.19/include/mysql/plugin_auth.h b/EQ2/source/depends/mariadb-10.1.19/include/mysql/plugin_auth.h new file mode 100644 index 000000000..d776ed79a --- /dev/null +++ b/EQ2/source/depends/mariadb-10.1.19/include/mysql/plugin_auth.h @@ -0,0 +1,135 @@ +#ifndef MYSQL_PLUGIN_AUTH_INCLUDED +/* Copyright (C) 2010 Sergei Golubchik and Monty Program Ab + Copyright (c) 2010, Oracle and/or its affiliates. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; version 2 of the License. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ + +/** + @file + + Authentication Plugin API. + + This file defines the API for server authentication plugins. +*/ + +#define MYSQL_PLUGIN_AUTH_INCLUDED + +#include + +#define MYSQL_AUTHENTICATION_INTERFACE_VERSION 0x0200 + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* defines for MYSQL_SERVER_AUTH_INFO.password_used */ + +#define PASSWORD_USED_NO 0 +#define PASSWORD_USED_YES 1 +#define PASSWORD_USED_NO_MENTION 2 + + +/** + Provides server plugin access to authentication information +*/ +typedef struct st_mysql_server_auth_info +{ + /** + User name as sent by the client and shown in USER(). + NULL if the client packet with the user name was not received yet. + */ + char *user_name; + + /** + Length of user_name + */ + unsigned int user_name_length; + + /** + A corresponding column value from the mysql.user table for the + matching account name + */ + const char *auth_string; + + /** + Length of auth_string + */ + unsigned long auth_string_length; + + /** + Matching account name as found in the mysql.user table. + A plugin can override it with another name that will be + used by MySQL for authorization, and shown in CURRENT_USER() + */ + char authenticated_as[MYSQL_USERNAME_LENGTH+1]; + + + /** + The unique user name that was used by the plugin to authenticate. + Not used by the server. + Available through the @@EXTERNAL_USER variable. + */ + char external_user[MYSQL_USERNAME_LENGTH+1]; + + /** + This only affects the "Authentication failed. Password used: %s" + error message. has the following values : + 0 : %s will be NO. + 1 : %s will be YES. + 2 : there will be no %s. + Set it as appropriate or ignore at will. + */ + int password_used; + + /** + Set to the name of the connected client host, if it can be resolved, + or to its IP address otherwise. + */ + const char *host_or_ip; + + /** + Length of host_or_ip + */ + unsigned int host_or_ip_length; + +} MYSQL_SERVER_AUTH_INFO; + +/** + Server authentication plugin descriptor +*/ +struct st_mysql_auth +{ + int interface_version; /**< version plugin uses */ + /** + A plugin that a client must use for authentication with this server + plugin. Can be NULL to mean "any plugin". + */ + const char *client_auth_plugin; + /** + Function provided by the plugin which should perform authentication (using + the vio functions if necessary) and return 0 if successful. The plugin can + also fill the info.authenticated_as field if a different username should be + used for authorization. + */ + int (*authenticate_user)(MYSQL_PLUGIN_VIO *vio, MYSQL_SERVER_AUTH_INFO *info); +}; + +#ifdef __cplusplus +} +#endif + +#endif + diff --git a/EQ2/source/depends/mariadb-10.1.19/include/mysql/plugin_auth.h.pp b/EQ2/source/depends/mariadb-10.1.19/include/mysql/plugin_auth.h.pp new file mode 100644 index 000000000..10cd10bf9 --- /dev/null +++ b/EQ2/source/depends/mariadb-10.1.19/include/mysql/plugin_auth.h.pp @@ -0,0 +1,447 @@ +typedef char my_bool; +typedef void * MYSQL_PLUGIN; +extern struct my_snprintf_service_st { + size_t (*my_snprintf_type)(char*, size_t, const char*, ...); + size_t (*my_vsnprintf_type)(char *, size_t, const char*, va_list); +} *my_snprintf_service; +size_t my_snprintf(char* to, size_t n, const char* fmt, ...); +size_t my_vsnprintf(char *to, size_t n, const char* fmt, va_list ap); +struct st_mysql_lex_string +{ + char *str; + size_t length; +}; +typedef struct st_mysql_lex_string MYSQL_LEX_STRING; +extern struct thd_alloc_service_st { + void *(*thd_alloc_func)(void*, unsigned int); + void *(*thd_calloc_func)(void*, unsigned int); + char *(*thd_strdup_func)(void*, const char *); + char *(*thd_strmake_func)(void*, const char *, unsigned int); + void *(*thd_memdup_func)(void*, const void*, unsigned int); + MYSQL_LEX_STRING *(*thd_make_lex_string_func)(void*, MYSQL_LEX_STRING *, + const char *, unsigned int, int); +} *thd_alloc_service; +void *thd_alloc(void* thd, unsigned int size); +void *thd_calloc(void* thd, unsigned int size); +char *thd_strdup(void* thd, const char *str); +char *thd_strmake(void* thd, const char *str, unsigned int size); +void *thd_memdup(void* thd, const void* str, unsigned int size); +MYSQL_LEX_STRING *thd_make_lex_string(void* thd, MYSQL_LEX_STRING *lex_str, + const char *str, unsigned int size, + int allocate_lex_string); +typedef enum _thd_wait_type_e { + THD_WAIT_SLEEP= 1, + THD_WAIT_DISKIO= 2, + THD_WAIT_ROW_LOCK= 3, + THD_WAIT_GLOBAL_LOCK= 4, + THD_WAIT_META_DATA_LOCK= 5, + THD_WAIT_TABLE_LOCK= 6, + THD_WAIT_USER_LOCK= 7, + THD_WAIT_BINLOG= 8, + THD_WAIT_GROUP_COMMIT= 9, + THD_WAIT_SYNC= 10, + THD_WAIT_NET= 11, + THD_WAIT_LAST= 12 +} thd_wait_type; +extern struct thd_wait_service_st { + void (*thd_wait_begin_func)(void*, int); + void (*thd_wait_end_func)(void*); +} *thd_wait_service; +void thd_wait_begin(void* thd, int wait_type); +void thd_wait_end(void* thd); +extern struct progress_report_service_st { + void (*thd_progress_init_func)(void* thd, unsigned int max_stage); + void (*thd_progress_report_func)(void* thd, + unsigned long long progress, + unsigned long long max_progress); + void (*thd_progress_next_stage_func)(void* thd); + void (*thd_progress_end_func)(void* thd); + const char *(*set_thd_proc_info_func)(void*, const char *info, + const char *func, + const char *file, + unsigned int line); +} *progress_report_service; +void thd_progress_init(void* thd, unsigned int max_stage); +void thd_progress_report(void* thd, + unsigned long long progress, + unsigned long long max_progress); +void thd_progress_next_stage(void* thd); +void thd_progress_end(void* thd); +const char *set_thd_proc_info(void*, const char * info, const char *func, + const char *file, unsigned int line); +extern void (*debug_sync_C_callback_ptr)(void*, const char *, size_t); +enum thd_kill_levels { + THD_IS_NOT_KILLED=0, + THD_ABORT_SOFTLY=50, + THD_ABORT_ASAP=100, +}; +extern struct kill_statement_service_st { + enum thd_kill_levels (*thd_kill_level_func)(const void*); +} *thd_kill_statement_service; +enum thd_kill_levels thd_kill_level(const void*); +typedef long my_time_t; +enum enum_mysql_timestamp_type +{ + MYSQL_TIMESTAMP_NONE= -2, MYSQL_TIMESTAMP_ERROR= -1, + MYSQL_TIMESTAMP_DATE= 0, MYSQL_TIMESTAMP_DATETIME= 1, MYSQL_TIMESTAMP_TIME= 2 +}; +typedef struct st_mysql_time +{ + unsigned int year, month, day, hour, minute, second; + unsigned long second_part; + my_bool neg; + enum enum_mysql_timestamp_type time_type; +} MYSQL_TIME; +extern struct thd_timezone_service_st { + my_time_t (*thd_TIME_to_gmt_sec)(void* thd, const MYSQL_TIME *ltime, unsigned int *errcode); + void (*thd_gmt_sec_to_TIME)(void* thd, MYSQL_TIME *ltime, my_time_t t); +} *thd_timezone_service; +my_time_t thd_TIME_to_gmt_sec(void* thd, const MYSQL_TIME *ltime, unsigned int *errcode); +void thd_gmt_sec_to_TIME(void* thd, MYSQL_TIME *ltime, my_time_t t); +extern struct my_sha1_service_st { + void (*my_sha1_type)(unsigned char*, const char*, size_t); + void (*my_sha1_multi_type)(unsigned char*, ...); + size_t (*my_sha1_context_size_type)(); + void (*my_sha1_init_type)(void *); + void (*my_sha1_input_type)(void *, const unsigned char *, size_t); + void (*my_sha1_result_type)(void *, unsigned char *); +} *my_sha1_service; +void my_sha1(unsigned char*, const char*, size_t); +void my_sha1_multi(unsigned char*, ...); +size_t my_sha1_context_size(); +void my_sha1_init(void *context); +void my_sha1_input(void *context, const unsigned char *buf, size_t len); +void my_sha1_result(void *context, unsigned char *digest); +extern struct my_md5_service_st { + void (*my_md5_type)(unsigned char*, const char*, size_t); + void (*my_md5_multi_type)(unsigned char*, ...); + size_t (*my_md5_context_size_type)(); + void (*my_md5_init_type)(void *); + void (*my_md5_input_type)(void *, const unsigned char *, size_t); + void (*my_md5_result_type)(void *, unsigned char *); +} *my_md5_service; +void my_md5(unsigned char*, const char*, size_t); +void my_md5_multi(unsigned char*, ...); +size_t my_md5_context_size(); +void my_md5_init(void *context); +void my_md5_input(void *context, const unsigned char *buf, size_t len); +void my_md5_result(void *context, unsigned char *digest); +typedef struct logger_handle_st LOGGER_HANDLE; +extern struct logger_service_st { + void (*logger_init_mutexes)(); + LOGGER_HANDLE* (*open)(const char *path, + unsigned long long size_limit, + unsigned int rotations); + int (*close)(LOGGER_HANDLE *log); + int (*vprintf)(LOGGER_HANDLE *log, const char *fmt, va_list argptr); + int (*printf)(LOGGER_HANDLE *log, const char *fmt, ...); + int (*write)(LOGGER_HANDLE *log, const char *buffer, size_t size); + int (*rotate)(LOGGER_HANDLE *log); +} *logger_service; + void logger_init_mutexes(); + LOGGER_HANDLE *logger_open(const char *path, + unsigned long long size_limit, + unsigned int rotations); + int logger_close(LOGGER_HANDLE *log); + int logger_vprintf(LOGGER_HANDLE *log, const char *fmt, va_list argptr); + int logger_printf(LOGGER_HANDLE *log, const char *fmt, ...); + int logger_write(LOGGER_HANDLE *log, const char *buffer, size_t size); + int logger_rotate(LOGGER_HANDLE *log); +extern struct thd_autoinc_service_st { + void (*thd_get_autoinc_func)(const void* thd, + unsigned long* off, unsigned long* inc); +} *thd_autoinc_service; +void thd_get_autoinc(const void* thd, + unsigned long* off, unsigned long* inc); +extern struct thd_error_context_service_st { + const char *(*thd_get_error_message_func)(const void* thd); + unsigned int (*thd_get_error_number_func)(const void* thd); + unsigned long (*thd_get_error_row_func)(const void* thd); + void (*thd_inc_error_row_func)(void* thd); + char *(*thd_get_error_context_description_func)(void* thd, + char *buffer, + unsigned int length, + unsigned int max_query_length); +} *thd_error_context_service; +const char *thd_get_error_message(const void* thd); +unsigned int thd_get_error_number(const void* thd); +unsigned long thd_get_error_row(const void* thd); +void thd_inc_error_row(void* thd); +char *thd_get_error_context_description(void* thd, + char *buffer, unsigned int length, + unsigned int max_query_length); +typedef int MYSQL_THD_KEY_T; +extern struct thd_specifics_service_st { + int (*thd_key_create_func)(MYSQL_THD_KEY_T *key); + void (*thd_key_delete_func)(MYSQL_THD_KEY_T *key); + void *(*thd_getspecific_func)(void* thd, MYSQL_THD_KEY_T key); + int (*thd_setspecific_func)(void* thd, MYSQL_THD_KEY_T key, void *value); +} *thd_specifics_service; +int thd_key_create(MYSQL_THD_KEY_T *key); +void thd_key_delete(MYSQL_THD_KEY_T *key); +void* thd_getspecific(void* thd, MYSQL_THD_KEY_T key); +int thd_setspecific(void* thd, MYSQL_THD_KEY_T key, void *value); +struct encryption_service_st { + unsigned int (*encryption_key_get_latest_version_func)(unsigned int key_id); + unsigned int (*encryption_key_get_func)(unsigned int key_id, unsigned int key_version, + unsigned char* buffer, unsigned int* length); + unsigned int (*encryption_ctx_size_func)(unsigned int key_id, unsigned int key_version); + int (*encryption_ctx_init_func)(void *ctx, const unsigned char* key, unsigned int klen, + const unsigned char* iv, unsigned int ivlen, + int flags, unsigned int key_id, + unsigned int key_version); + int (*encryption_ctx_update_func)(void *ctx, const unsigned char* src, unsigned int slen, + unsigned char* dst, unsigned int* dlen); + int (*encryption_ctx_finish_func)(void *ctx, unsigned char* dst, unsigned int* dlen); + unsigned int (*encryption_encrypted_length_func)(unsigned int slen, unsigned int key_id, unsigned int key_version); +}; +extern struct encryption_service_st encryption_handler; +static inline unsigned int encryption_key_id_exists(unsigned int id) +{ + return encryption_handler.encryption_key_get_latest_version_func(id) != (~(unsigned int)0); +} +static inline unsigned int encryption_key_version_exists(unsigned int id, unsigned int version) +{ + unsigned int unused; + return encryption_handler.encryption_key_get_func((id),(version),(NULL),(&unused)) != (~(unsigned int)0); +} +static inline int encryption_crypt(const unsigned char* src, unsigned int slen, + unsigned char* dst, unsigned int* dlen, + const unsigned char* key, unsigned int klen, + const unsigned char* iv, unsigned int ivlen, + int flags, unsigned int key_id, unsigned int key_version) +{ + void *ctx= alloca(encryption_handler.encryption_ctx_size_func((key_id),(key_version))); + int res1, res2; + unsigned int d1, d2; + if ((res1= encryption_handler.encryption_ctx_init_func((ctx),(key),(klen),(iv),(ivlen),(flags),(key_id),(key_version)))) + return res1; + res1= encryption_handler.encryption_ctx_update_func((ctx),(src),(slen),(dst),(&d1)); + res2= encryption_handler.encryption_ctx_finish_func((ctx),(dst + d1),(&d2)); + *dlen= d1 + d2; + return res1 ? res1 : res2; +} +struct st_encryption_scheme_key { + unsigned int version; + unsigned char key[16]; +}; +struct st_encryption_scheme { + unsigned char iv[16]; + struct st_encryption_scheme_key key[3]; + unsigned int keyserver_requests; + unsigned int key_id; + unsigned int type; + void (*locker)(struct st_encryption_scheme *self, int release); +}; +extern struct encryption_scheme_service_st { + int (*encryption_scheme_encrypt_func) + (const unsigned char* src, unsigned int slen, + unsigned char* dst, unsigned int* dlen, + struct st_encryption_scheme *scheme, + unsigned int key_version, unsigned int i32_1, + unsigned int i32_2, unsigned long long i64); + int (*encryption_scheme_decrypt_func) + (const unsigned char* src, unsigned int slen, + unsigned char* dst, unsigned int* dlen, + struct st_encryption_scheme *scheme, + unsigned int key_version, unsigned int i32_1, + unsigned int i32_2, unsigned long long i64); +} *encryption_scheme_service; +int encryption_scheme_encrypt(const unsigned char* src, unsigned int slen, + unsigned char* dst, unsigned int* dlen, + struct st_encryption_scheme *scheme, + unsigned int key_version, unsigned int i32_1, + unsigned int i32_2, unsigned long long i64); +int encryption_scheme_decrypt(const unsigned char* src, unsigned int slen, + unsigned char* dst, unsigned int* dlen, + struct st_encryption_scheme *scheme, + unsigned int key_version, unsigned int i32_1, + unsigned int i32_2, unsigned long long i64); +struct st_mysql_xid { + long formatID; + long gtrid_length; + long bqual_length; + char data[128]; +}; +typedef struct st_mysql_xid MYSQL_XID; +enum enum_mysql_show_type +{ + SHOW_UNDEF, SHOW_BOOL, SHOW_UINT, SHOW_ULONG, + SHOW_ULONGLONG, SHOW_CHAR, SHOW_CHAR_PTR, + SHOW_ARRAY, SHOW_FUNC, SHOW_DOUBLE, + SHOW_SINT, SHOW_SLONG, SHOW_SLONGLONG, SHOW_SIMPLE_FUNC, + SHOW_always_last +}; +enum enum_var_type +{ + SHOW_OPT_DEFAULT= 0, SHOW_OPT_SESSION, SHOW_OPT_GLOBAL +}; +struct st_mysql_show_var { + const char *name; + void *value; + enum enum_mysql_show_type type; +}; +struct system_status_var; +typedef int (*mysql_show_var_func)(void*, struct st_mysql_show_var*, void *, struct system_status_var *status_var, enum enum_var_type); +struct st_mysql_sys_var; +struct st_mysql_value; +typedef int (*mysql_var_check_func)(void* thd, + struct st_mysql_sys_var *var, + void *save, struct st_mysql_value *value); +typedef void (*mysql_var_update_func)(void* thd, + struct st_mysql_sys_var *var, + void *var_ptr, const void *save); +struct st_mysql_plugin +{ + int type; + void *info; + const char *name; + const char *author; + const char *descr; + int license; + int (*init)(void *); + int (*deinit)(void *); + unsigned int version; + struct st_mysql_show_var *status_vars; + struct st_mysql_sys_var **system_vars; + void * __reserved1; + unsigned long flags; +}; +struct st_maria_plugin +{ + int type; + void *info; + const char *name; + const char *author; + const char *descr; + int license; + int (*init)(void *); + int (*deinit)(void *); + unsigned int version; + struct st_mysql_show_var *status_vars; + struct st_mysql_sys_var **system_vars; + const char *version_info; + unsigned int maturity; +}; +enum enum_ftparser_mode +{ + MYSQL_FTPARSER_SIMPLE_MODE= 0, + MYSQL_FTPARSER_WITH_STOPWORDS= 1, + MYSQL_FTPARSER_FULL_BOOLEAN_INFO= 2 +}; +enum enum_ft_token_type +{ + FT_TOKEN_EOF= 0, + FT_TOKEN_WORD= 1, + FT_TOKEN_LEFT_PAREN= 2, + FT_TOKEN_RIGHT_PAREN= 3, + FT_TOKEN_STOPWORD= 4 +}; +typedef struct st_mysql_ftparser_boolean_info +{ + enum enum_ft_token_type type; + int yesno; + int weight_adjust; + char wasign; + char trunc; + char prev; + char *quot; +} MYSQL_FTPARSER_BOOLEAN_INFO; +typedef struct st_mysql_ftparser_param +{ + int (*mysql_parse)(struct st_mysql_ftparser_param *, + const char *doc, int doc_len); + int (*mysql_add_word)(struct st_mysql_ftparser_param *, + const char *word, int word_len, + MYSQL_FTPARSER_BOOLEAN_INFO *boolean_info); + void *ftparser_state; + void *mysql_ftparam; + const struct charset_info_st *cs; + const char *doc; + int length; + unsigned int flags; + enum enum_ftparser_mode mode; +} MYSQL_FTPARSER_PARAM; +struct st_mysql_ftparser +{ + int interface_version; + int (*parse)(MYSQL_FTPARSER_PARAM *param); + int (*init)(MYSQL_FTPARSER_PARAM *param); + int (*deinit)(MYSQL_FTPARSER_PARAM *param); +}; +struct st_mysql_daemon +{ + int interface_version; +}; +struct st_mysql_information_schema +{ + int interface_version; +}; +struct st_mysql_storage_engine +{ + int interface_version; +}; +struct handlerton; + struct Mysql_replication { + int interface_version; + }; +struct st_mysql_value +{ + int (*value_type)(struct st_mysql_value *); + const char *(*val_str)(struct st_mysql_value *, char *buffer, int *length); + int (*val_real)(struct st_mysql_value *, double *realbuf); + int (*val_int)(struct st_mysql_value *, long long *intbuf); + int (*is_unsigned)(struct st_mysql_value *); +}; +int thd_in_lock_tables(const void* thd); +int thd_tablespace_op(const void* thd); +long long thd_test_options(const void* thd, long long test_options); +int thd_sql_command(const void* thd); +void **thd_ha_data(const void* thd, const struct handlerton *hton); +void thd_storage_lock_wait(void* thd, long long value); +int thd_tx_isolation(const void* thd); +int thd_tx_is_read_only(const void* thd); +int thd_rpl_is_parallel(const void* thd); +int mysql_tmpfile(const char *prefix); +unsigned long thd_get_thread_id(const void* thd); +void thd_get_xid(const void* thd, MYSQL_XID *xid); +void mysql_query_cache_invalidate4(void* thd, + const char *key, unsigned int key_length, + int using_trx); +void *thd_get_ha_data(const void* thd, const struct handlerton *hton); +void thd_set_ha_data(void* thd, const struct handlerton *hton, + const void *ha_data); +void thd_wakeup_subsequent_commits(void* thd, int wakeup_error); +typedef struct st_plugin_vio_info +{ + enum { MYSQL_VIO_INVALID, MYSQL_VIO_TCP, MYSQL_VIO_SOCKET, + MYSQL_VIO_PIPE, MYSQL_VIO_MEMORY } protocol; + int socket; +} MYSQL_PLUGIN_VIO_INFO; +typedef struct st_plugin_vio +{ + int (*read_packet)(struct st_plugin_vio *vio, + unsigned char **buf); + int (*write_packet)(struct st_plugin_vio *vio, + const unsigned char *packet, + int packet_len); + void (*info)(struct st_plugin_vio *vio, struct st_plugin_vio_info *info); +} MYSQL_PLUGIN_VIO; +typedef struct st_mysql_server_auth_info +{ + char *user_name; + unsigned int user_name_length; + const char *auth_string; + unsigned long auth_string_length; + char authenticated_as[512 +1]; + char external_user[512 +1]; + int password_used; + const char *host_or_ip; + unsigned int host_or_ip_length; +} MYSQL_SERVER_AUTH_INFO; +struct st_mysql_auth +{ + int interface_version; + const char *client_auth_plugin; + int (*authenticate_user)(MYSQL_PLUGIN_VIO *vio, MYSQL_SERVER_AUTH_INFO *info); +}; diff --git a/EQ2/source/depends/mariadb-10.1.19/include/mysql/plugin_auth_common.h b/EQ2/source/depends/mariadb-10.1.19/include/mysql/plugin_auth_common.h new file mode 100644 index 000000000..9d7dd2a08 --- /dev/null +++ b/EQ2/source/depends/mariadb-10.1.19/include/mysql/plugin_auth_common.h @@ -0,0 +1,131 @@ +#ifndef MYSQL_PLUGIN_AUTH_COMMON_INCLUDED +/* Copyright (C) 2010 Sergei Golubchik and Monty Program Ab + Copyright (c) 2010, Oracle and/or its affiliates. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; version 2 of the License. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ + +#ifdef _WIN32 +#include +#endif + +/** + @file + + This file defines constants and data structures that are the same for + both client- and server-side authentication plugins. +*/ +#define MYSQL_PLUGIN_AUTH_COMMON_INCLUDED + +/** the max allowed length for a user name */ +#define MYSQL_USERNAME_LENGTH 512 + +/** + return values of the plugin authenticate_user() method. +*/ + + /** + Authentication failed, plugin internal error. + An error occurred in the authentication plugin itself. + These errors are reported in table performance_schema.host_cache, + column COUNT_AUTH_PLUGIN_ERRORS. +*/ +#define CR_AUTH_PLUGIN_ERROR 3 +/** + Authentication failed, client server handshake. + An error occurred during the client server handshake. + These errors are reported in table performance_schema.host_cache, + column COUNT_HANDSHAKE_ERRORS. +*/ +#define CR_AUTH_HANDSHAKE 2 +/** + Authentication failed, user credentials. + For example, wrong passwords. + These errors are reported in table performance_schema.host_cache, + column COUNT_AUTHENTICATION_ERRORS. +*/ +#define CR_AUTH_USER_CREDENTIALS 1 +/** + Authentication failed. Additionally, all other CR_xxx values + (libmysql error code) can be used too. + + The client plugin may set the error code and the error message directly + in the MYSQL structure and return CR_ERROR. If a CR_xxx specific error + code was returned, an error message in the MYSQL structure will be + overwritten. If CR_ERROR is returned without setting the error in MYSQL, + CR_UNKNOWN_ERROR will be user. +*/ +#define CR_ERROR 0 +/** + Authentication (client part) was successful. It does not mean that the + authentication as a whole was successful, usually it only means + that the client was able to send the user name and the password to the + server. If CR_OK is returned, the libmysql reads the next packet expecting + it to be one of OK, ERROR, or CHANGE_PLUGIN packets. +*/ +#define CR_OK -1 +/** + Authentication was successful. + It means that the client has done its part successfully and also that + a plugin has read the last packet (one of OK, ERROR, CHANGE_PLUGIN). + In this case, libmysql will not read a packet from the server, + but it will use the data at mysql->net.read_pos. + + A plugin may return this value if the number of roundtrips in the + authentication protocol is not known in advance, and the client plugin + needs to read one packet more to determine if the authentication is finished + or not. +*/ +#define CR_OK_HANDSHAKE_COMPLETE -2 + +typedef struct st_plugin_vio_info +{ + enum { MYSQL_VIO_INVALID, MYSQL_VIO_TCP, MYSQL_VIO_SOCKET, + MYSQL_VIO_PIPE, MYSQL_VIO_MEMORY } protocol; + int socket; /**< it's set, if the protocol is SOCKET or TCP */ +#ifdef _WIN32 + HANDLE handle; /**< it's set, if the protocol is PIPE or MEMORY */ +#endif +} MYSQL_PLUGIN_VIO_INFO; + +/** + Provides plugin access to communication channel +*/ +typedef struct st_plugin_vio +{ + /** + Plugin provides a pointer reference and this function sets it to the + contents of any incoming packet. Returns the packet length, or -1 if + the plugin should terminate. + */ + int (*read_packet)(struct st_plugin_vio *vio, + unsigned char **buf); + + /** + Plugin provides a buffer with data and the length and this + function sends it as a packet. Returns 0 on success, 1 on failure. + */ + int (*write_packet)(struct st_plugin_vio *vio, + const unsigned char *packet, + int packet_len); + + /** + Fills in a st_plugin_vio_info structure, providing the information + about the connection. + */ + void (*info)(struct st_plugin_vio *vio, struct st_plugin_vio_info *info); + +} MYSQL_PLUGIN_VIO; + +#endif + diff --git a/EQ2/source/depends/mariadb-10.1.19/include/mysql/plugin_encryption.h b/EQ2/source/depends/mariadb-10.1.19/include/mysql/plugin_encryption.h new file mode 100644 index 000000000..5d08f6d30 --- /dev/null +++ b/EQ2/source/depends/mariadb-10.1.19/include/mysql/plugin_encryption.h @@ -0,0 +1,126 @@ +#ifndef MYSQL_PLUGIN_ENCRYPTION_INCLUDED +/* Copyright (C) 2014, 2015 Sergei Golubchik and MariaDB + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; version 2 of the License. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ + +/** + @file + + Encryption Plugin API. + + This file defines the API for server plugins that manage encryption + keys for MariaDB on-disk data encryption. +*/ + +#define MYSQL_PLUGIN_ENCRYPTION_INCLUDED + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +#define MariaDB_ENCRYPTION_INTERFACE_VERSION 0x0300 + +/** + Encryption plugin descriptor +*/ +struct st_mariadb_encryption +{ + int interface_version; /**< version plugin uses */ + + /*********** KEY MANAGEMENT ********************************************/ + + /** + function returning latest key version for a given key id + + @return a version or ENCRYPTION_KEY_VERSION_INVALID to indicate an error. + */ + unsigned int (*get_latest_key_version)(unsigned int key_id); + + /** + function returning a key for a key version + + @param version the requested key version + @param key the key will be stored there. Can be NULL - + in which case no key will be returned + @param key_length in: key buffer size + out: the actual length of the key + + This method can be used to query the key length - the required + buffer size - by passing key==NULL. + + If the buffer size is less than the key length the content of the + key buffer is undefined (the plugin is free to partially fill it with + the key data or leave it untouched). + + @return 0 on success, or + ENCRYPTION_KEY_VERSION_INVALID, ENCRYPTION_KEY_BUFFER_TOO_SMALL + or any other non-zero number for errors + */ + unsigned int (*get_key)(unsigned int key_id, unsigned int version, + unsigned char *key, unsigned int *key_length); + + /*********** ENCRYPTION ************************************************/ + /* + the caller uses encryption as follows: + 1. create the encryption context object of the crypt_ctx_size() bytes. + 2. initialize it with crypt_ctx_init(). + 3. repeat crypt_ctx_update() until there are no more data to encrypt. + 4. write the remaining output bytes and destroy the context object + with crypt_ctx_finish(). + */ + + /** + returns the size of the encryption context object in bytes + */ + unsigned int (*crypt_ctx_size)(unsigned int key_id, unsigned int key_version); + /** + initializes the encryption context object. + */ + int (*crypt_ctx_init)(void *ctx, const unsigned char* key, unsigned int klen, + const unsigned char* iv, unsigned int ivlen, + int flags, unsigned int key_id, + unsigned int key_version); + /** + processes (encrypts or decrypts) a chunk of data + + writes the output to th dst buffer. note that it might write + more bytes that were in the input. or less. or none at all. + */ + int (*crypt_ctx_update)(void *ctx, const unsigned char* src, unsigned int slen, + unsigned char* dst, unsigned int* dlen); + /** + writes the remaining output bytes and destroys the encryption context + + crypt_ctx_update might've cached part of the output in the context, + this method will flush these data out. + */ + int (*crypt_ctx_finish)(void *ctx, unsigned char* dst, unsigned int* dlen); + /** + returns the length of the encrypted data + + it returns the exact length, given only the source length. + which means, this API only supports encryption algorithms where + the length of the encrypted data only depends on the length of the + input (a.k.a. compression is not supported). + */ + unsigned int (*encrypted_length)(unsigned int slen, unsigned int key_id, unsigned int key_version); +}; + +#ifdef __cplusplus +} +#endif +#endif + diff --git a/EQ2/source/depends/mariadb-10.1.19/include/mysql/plugin_encryption.h.pp b/EQ2/source/depends/mariadb-10.1.19/include/mysql/plugin_encryption.h.pp new file mode 100644 index 000000000..46d3c3d5a --- /dev/null +++ b/EQ2/source/depends/mariadb-10.1.19/include/mysql/plugin_encryption.h.pp @@ -0,0 +1,430 @@ +typedef char my_bool; +typedef void * MYSQL_PLUGIN; +extern struct my_snprintf_service_st { + size_t (*my_snprintf_type)(char*, size_t, const char*, ...); + size_t (*my_vsnprintf_type)(char *, size_t, const char*, va_list); +} *my_snprintf_service; +size_t my_snprintf(char* to, size_t n, const char* fmt, ...); +size_t my_vsnprintf(char *to, size_t n, const char* fmt, va_list ap); +struct st_mysql_lex_string +{ + char *str; + size_t length; +}; +typedef struct st_mysql_lex_string MYSQL_LEX_STRING; +extern struct thd_alloc_service_st { + void *(*thd_alloc_func)(void*, unsigned int); + void *(*thd_calloc_func)(void*, unsigned int); + char *(*thd_strdup_func)(void*, const char *); + char *(*thd_strmake_func)(void*, const char *, unsigned int); + void *(*thd_memdup_func)(void*, const void*, unsigned int); + MYSQL_LEX_STRING *(*thd_make_lex_string_func)(void*, MYSQL_LEX_STRING *, + const char *, unsigned int, int); +} *thd_alloc_service; +void *thd_alloc(void* thd, unsigned int size); +void *thd_calloc(void* thd, unsigned int size); +char *thd_strdup(void* thd, const char *str); +char *thd_strmake(void* thd, const char *str, unsigned int size); +void *thd_memdup(void* thd, const void* str, unsigned int size); +MYSQL_LEX_STRING *thd_make_lex_string(void* thd, MYSQL_LEX_STRING *lex_str, + const char *str, unsigned int size, + int allocate_lex_string); +typedef enum _thd_wait_type_e { + THD_WAIT_SLEEP= 1, + THD_WAIT_DISKIO= 2, + THD_WAIT_ROW_LOCK= 3, + THD_WAIT_GLOBAL_LOCK= 4, + THD_WAIT_META_DATA_LOCK= 5, + THD_WAIT_TABLE_LOCK= 6, + THD_WAIT_USER_LOCK= 7, + THD_WAIT_BINLOG= 8, + THD_WAIT_GROUP_COMMIT= 9, + THD_WAIT_SYNC= 10, + THD_WAIT_NET= 11, + THD_WAIT_LAST= 12 +} thd_wait_type; +extern struct thd_wait_service_st { + void (*thd_wait_begin_func)(void*, int); + void (*thd_wait_end_func)(void*); +} *thd_wait_service; +void thd_wait_begin(void* thd, int wait_type); +void thd_wait_end(void* thd); +extern struct progress_report_service_st { + void (*thd_progress_init_func)(void* thd, unsigned int max_stage); + void (*thd_progress_report_func)(void* thd, + unsigned long long progress, + unsigned long long max_progress); + void (*thd_progress_next_stage_func)(void* thd); + void (*thd_progress_end_func)(void* thd); + const char *(*set_thd_proc_info_func)(void*, const char *info, + const char *func, + const char *file, + unsigned int line); +} *progress_report_service; +void thd_progress_init(void* thd, unsigned int max_stage); +void thd_progress_report(void* thd, + unsigned long long progress, + unsigned long long max_progress); +void thd_progress_next_stage(void* thd); +void thd_progress_end(void* thd); +const char *set_thd_proc_info(void*, const char * info, const char *func, + const char *file, unsigned int line); +extern void (*debug_sync_C_callback_ptr)(void*, const char *, size_t); +enum thd_kill_levels { + THD_IS_NOT_KILLED=0, + THD_ABORT_SOFTLY=50, + THD_ABORT_ASAP=100, +}; +extern struct kill_statement_service_st { + enum thd_kill_levels (*thd_kill_level_func)(const void*); +} *thd_kill_statement_service; +enum thd_kill_levels thd_kill_level(const void*); +typedef long my_time_t; +enum enum_mysql_timestamp_type +{ + MYSQL_TIMESTAMP_NONE= -2, MYSQL_TIMESTAMP_ERROR= -1, + MYSQL_TIMESTAMP_DATE= 0, MYSQL_TIMESTAMP_DATETIME= 1, MYSQL_TIMESTAMP_TIME= 2 +}; +typedef struct st_mysql_time +{ + unsigned int year, month, day, hour, minute, second; + unsigned long second_part; + my_bool neg; + enum enum_mysql_timestamp_type time_type; +} MYSQL_TIME; +extern struct thd_timezone_service_st { + my_time_t (*thd_TIME_to_gmt_sec)(void* thd, const MYSQL_TIME *ltime, unsigned int *errcode); + void (*thd_gmt_sec_to_TIME)(void* thd, MYSQL_TIME *ltime, my_time_t t); +} *thd_timezone_service; +my_time_t thd_TIME_to_gmt_sec(void* thd, const MYSQL_TIME *ltime, unsigned int *errcode); +void thd_gmt_sec_to_TIME(void* thd, MYSQL_TIME *ltime, my_time_t t); +extern struct my_sha1_service_st { + void (*my_sha1_type)(unsigned char*, const char*, size_t); + void (*my_sha1_multi_type)(unsigned char*, ...); + size_t (*my_sha1_context_size_type)(); + void (*my_sha1_init_type)(void *); + void (*my_sha1_input_type)(void *, const unsigned char *, size_t); + void (*my_sha1_result_type)(void *, unsigned char *); +} *my_sha1_service; +void my_sha1(unsigned char*, const char*, size_t); +void my_sha1_multi(unsigned char*, ...); +size_t my_sha1_context_size(); +void my_sha1_init(void *context); +void my_sha1_input(void *context, const unsigned char *buf, size_t len); +void my_sha1_result(void *context, unsigned char *digest); +extern struct my_md5_service_st { + void (*my_md5_type)(unsigned char*, const char*, size_t); + void (*my_md5_multi_type)(unsigned char*, ...); + size_t (*my_md5_context_size_type)(); + void (*my_md5_init_type)(void *); + void (*my_md5_input_type)(void *, const unsigned char *, size_t); + void (*my_md5_result_type)(void *, unsigned char *); +} *my_md5_service; +void my_md5(unsigned char*, const char*, size_t); +void my_md5_multi(unsigned char*, ...); +size_t my_md5_context_size(); +void my_md5_init(void *context); +void my_md5_input(void *context, const unsigned char *buf, size_t len); +void my_md5_result(void *context, unsigned char *digest); +typedef struct logger_handle_st LOGGER_HANDLE; +extern struct logger_service_st { + void (*logger_init_mutexes)(); + LOGGER_HANDLE* (*open)(const char *path, + unsigned long long size_limit, + unsigned int rotations); + int (*close)(LOGGER_HANDLE *log); + int (*vprintf)(LOGGER_HANDLE *log, const char *fmt, va_list argptr); + int (*printf)(LOGGER_HANDLE *log, const char *fmt, ...); + int (*write)(LOGGER_HANDLE *log, const char *buffer, size_t size); + int (*rotate)(LOGGER_HANDLE *log); +} *logger_service; + void logger_init_mutexes(); + LOGGER_HANDLE *logger_open(const char *path, + unsigned long long size_limit, + unsigned int rotations); + int logger_close(LOGGER_HANDLE *log); + int logger_vprintf(LOGGER_HANDLE *log, const char *fmt, va_list argptr); + int logger_printf(LOGGER_HANDLE *log, const char *fmt, ...); + int logger_write(LOGGER_HANDLE *log, const char *buffer, size_t size); + int logger_rotate(LOGGER_HANDLE *log); +extern struct thd_autoinc_service_st { + void (*thd_get_autoinc_func)(const void* thd, + unsigned long* off, unsigned long* inc); +} *thd_autoinc_service; +void thd_get_autoinc(const void* thd, + unsigned long* off, unsigned long* inc); +extern struct thd_error_context_service_st { + const char *(*thd_get_error_message_func)(const void* thd); + unsigned int (*thd_get_error_number_func)(const void* thd); + unsigned long (*thd_get_error_row_func)(const void* thd); + void (*thd_inc_error_row_func)(void* thd); + char *(*thd_get_error_context_description_func)(void* thd, + char *buffer, + unsigned int length, + unsigned int max_query_length); +} *thd_error_context_service; +const char *thd_get_error_message(const void* thd); +unsigned int thd_get_error_number(const void* thd); +unsigned long thd_get_error_row(const void* thd); +void thd_inc_error_row(void* thd); +char *thd_get_error_context_description(void* thd, + char *buffer, unsigned int length, + unsigned int max_query_length); +typedef int MYSQL_THD_KEY_T; +extern struct thd_specifics_service_st { + int (*thd_key_create_func)(MYSQL_THD_KEY_T *key); + void (*thd_key_delete_func)(MYSQL_THD_KEY_T *key); + void *(*thd_getspecific_func)(void* thd, MYSQL_THD_KEY_T key); + int (*thd_setspecific_func)(void* thd, MYSQL_THD_KEY_T key, void *value); +} *thd_specifics_service; +int thd_key_create(MYSQL_THD_KEY_T *key); +void thd_key_delete(MYSQL_THD_KEY_T *key); +void* thd_getspecific(void* thd, MYSQL_THD_KEY_T key); +int thd_setspecific(void* thd, MYSQL_THD_KEY_T key, void *value); +struct encryption_service_st { + unsigned int (*encryption_key_get_latest_version_func)(unsigned int key_id); + unsigned int (*encryption_key_get_func)(unsigned int key_id, unsigned int key_version, + unsigned char* buffer, unsigned int* length); + unsigned int (*encryption_ctx_size_func)(unsigned int key_id, unsigned int key_version); + int (*encryption_ctx_init_func)(void *ctx, const unsigned char* key, unsigned int klen, + const unsigned char* iv, unsigned int ivlen, + int flags, unsigned int key_id, + unsigned int key_version); + int (*encryption_ctx_update_func)(void *ctx, const unsigned char* src, unsigned int slen, + unsigned char* dst, unsigned int* dlen); + int (*encryption_ctx_finish_func)(void *ctx, unsigned char* dst, unsigned int* dlen); + unsigned int (*encryption_encrypted_length_func)(unsigned int slen, unsigned int key_id, unsigned int key_version); +}; +extern struct encryption_service_st encryption_handler; +static inline unsigned int encryption_key_id_exists(unsigned int id) +{ + return encryption_handler.encryption_key_get_latest_version_func(id) != (~(unsigned int)0); +} +static inline unsigned int encryption_key_version_exists(unsigned int id, unsigned int version) +{ + unsigned int unused; + return encryption_handler.encryption_key_get_func((id),(version),(NULL),(&unused)) != (~(unsigned int)0); +} +static inline int encryption_crypt(const unsigned char* src, unsigned int slen, + unsigned char* dst, unsigned int* dlen, + const unsigned char* key, unsigned int klen, + const unsigned char* iv, unsigned int ivlen, + int flags, unsigned int key_id, unsigned int key_version) +{ + void *ctx= alloca(encryption_handler.encryption_ctx_size_func((key_id),(key_version))); + int res1, res2; + unsigned int d1, d2; + if ((res1= encryption_handler.encryption_ctx_init_func((ctx),(key),(klen),(iv),(ivlen),(flags),(key_id),(key_version)))) + return res1; + res1= encryption_handler.encryption_ctx_update_func((ctx),(src),(slen),(dst),(&d1)); + res2= encryption_handler.encryption_ctx_finish_func((ctx),(dst + d1),(&d2)); + *dlen= d1 + d2; + return res1 ? res1 : res2; +} +struct st_encryption_scheme_key { + unsigned int version; + unsigned char key[16]; +}; +struct st_encryption_scheme { + unsigned char iv[16]; + struct st_encryption_scheme_key key[3]; + unsigned int keyserver_requests; + unsigned int key_id; + unsigned int type; + void (*locker)(struct st_encryption_scheme *self, int release); +}; +extern struct encryption_scheme_service_st { + int (*encryption_scheme_encrypt_func) + (const unsigned char* src, unsigned int slen, + unsigned char* dst, unsigned int* dlen, + struct st_encryption_scheme *scheme, + unsigned int key_version, unsigned int i32_1, + unsigned int i32_2, unsigned long long i64); + int (*encryption_scheme_decrypt_func) + (const unsigned char* src, unsigned int slen, + unsigned char* dst, unsigned int* dlen, + struct st_encryption_scheme *scheme, + unsigned int key_version, unsigned int i32_1, + unsigned int i32_2, unsigned long long i64); +} *encryption_scheme_service; +int encryption_scheme_encrypt(const unsigned char* src, unsigned int slen, + unsigned char* dst, unsigned int* dlen, + struct st_encryption_scheme *scheme, + unsigned int key_version, unsigned int i32_1, + unsigned int i32_2, unsigned long long i64); +int encryption_scheme_decrypt(const unsigned char* src, unsigned int slen, + unsigned char* dst, unsigned int* dlen, + struct st_encryption_scheme *scheme, + unsigned int key_version, unsigned int i32_1, + unsigned int i32_2, unsigned long long i64); +struct st_mysql_xid { + long formatID; + long gtrid_length; + long bqual_length; + char data[128]; +}; +typedef struct st_mysql_xid MYSQL_XID; +enum enum_mysql_show_type +{ + SHOW_UNDEF, SHOW_BOOL, SHOW_UINT, SHOW_ULONG, + SHOW_ULONGLONG, SHOW_CHAR, SHOW_CHAR_PTR, + SHOW_ARRAY, SHOW_FUNC, SHOW_DOUBLE, + SHOW_SINT, SHOW_SLONG, SHOW_SLONGLONG, SHOW_SIMPLE_FUNC, + SHOW_always_last +}; +enum enum_var_type +{ + SHOW_OPT_DEFAULT= 0, SHOW_OPT_SESSION, SHOW_OPT_GLOBAL +}; +struct st_mysql_show_var { + const char *name; + void *value; + enum enum_mysql_show_type type; +}; +struct system_status_var; +typedef int (*mysql_show_var_func)(void*, struct st_mysql_show_var*, void *, struct system_status_var *status_var, enum enum_var_type); +struct st_mysql_sys_var; +struct st_mysql_value; +typedef int (*mysql_var_check_func)(void* thd, + struct st_mysql_sys_var *var, + void *save, struct st_mysql_value *value); +typedef void (*mysql_var_update_func)(void* thd, + struct st_mysql_sys_var *var, + void *var_ptr, const void *save); +struct st_mysql_plugin +{ + int type; + void *info; + const char *name; + const char *author; + const char *descr; + int license; + int (*init)(void *); + int (*deinit)(void *); + unsigned int version; + struct st_mysql_show_var *status_vars; + struct st_mysql_sys_var **system_vars; + void * __reserved1; + unsigned long flags; +}; +struct st_maria_plugin +{ + int type; + void *info; + const char *name; + const char *author; + const char *descr; + int license; + int (*init)(void *); + int (*deinit)(void *); + unsigned int version; + struct st_mysql_show_var *status_vars; + struct st_mysql_sys_var **system_vars; + const char *version_info; + unsigned int maturity; +}; +enum enum_ftparser_mode +{ + MYSQL_FTPARSER_SIMPLE_MODE= 0, + MYSQL_FTPARSER_WITH_STOPWORDS= 1, + MYSQL_FTPARSER_FULL_BOOLEAN_INFO= 2 +}; +enum enum_ft_token_type +{ + FT_TOKEN_EOF= 0, + FT_TOKEN_WORD= 1, + FT_TOKEN_LEFT_PAREN= 2, + FT_TOKEN_RIGHT_PAREN= 3, + FT_TOKEN_STOPWORD= 4 +}; +typedef struct st_mysql_ftparser_boolean_info +{ + enum enum_ft_token_type type; + int yesno; + int weight_adjust; + char wasign; + char trunc; + char prev; + char *quot; +} MYSQL_FTPARSER_BOOLEAN_INFO; +typedef struct st_mysql_ftparser_param +{ + int (*mysql_parse)(struct st_mysql_ftparser_param *, + const char *doc, int doc_len); + int (*mysql_add_word)(struct st_mysql_ftparser_param *, + const char *word, int word_len, + MYSQL_FTPARSER_BOOLEAN_INFO *boolean_info); + void *ftparser_state; + void *mysql_ftparam; + const struct charset_info_st *cs; + const char *doc; + int length; + unsigned int flags; + enum enum_ftparser_mode mode; +} MYSQL_FTPARSER_PARAM; +struct st_mysql_ftparser +{ + int interface_version; + int (*parse)(MYSQL_FTPARSER_PARAM *param); + int (*init)(MYSQL_FTPARSER_PARAM *param); + int (*deinit)(MYSQL_FTPARSER_PARAM *param); +}; +struct st_mysql_daemon +{ + int interface_version; +}; +struct st_mysql_information_schema +{ + int interface_version; +}; +struct st_mysql_storage_engine +{ + int interface_version; +}; +struct handlerton; + struct Mysql_replication { + int interface_version; + }; +struct st_mysql_value +{ + int (*value_type)(struct st_mysql_value *); + const char *(*val_str)(struct st_mysql_value *, char *buffer, int *length); + int (*val_real)(struct st_mysql_value *, double *realbuf); + int (*val_int)(struct st_mysql_value *, long long *intbuf); + int (*is_unsigned)(struct st_mysql_value *); +}; +int thd_in_lock_tables(const void* thd); +int thd_tablespace_op(const void* thd); +long long thd_test_options(const void* thd, long long test_options); +int thd_sql_command(const void* thd); +void **thd_ha_data(const void* thd, const struct handlerton *hton); +void thd_storage_lock_wait(void* thd, long long value); +int thd_tx_isolation(const void* thd); +int thd_tx_is_read_only(const void* thd); +int thd_rpl_is_parallel(const void* thd); +int mysql_tmpfile(const char *prefix); +unsigned long thd_get_thread_id(const void* thd); +void thd_get_xid(const void* thd, MYSQL_XID *xid); +void mysql_query_cache_invalidate4(void* thd, + const char *key, unsigned int key_length, + int using_trx); +void *thd_get_ha_data(const void* thd, const struct handlerton *hton); +void thd_set_ha_data(void* thd, const struct handlerton *hton, + const void *ha_data); +void thd_wakeup_subsequent_commits(void* thd, int wakeup_error); +struct st_mariadb_encryption +{ + int interface_version; + unsigned int (*get_latest_key_version)(unsigned int key_id); + unsigned int (*get_key)(unsigned int key_id, unsigned int version, + unsigned char *key, unsigned int *key_length); + unsigned int (*crypt_ctx_size)(unsigned int key_id, unsigned int key_version); + int (*crypt_ctx_init)(void *ctx, const unsigned char* key, unsigned int klen, + const unsigned char* iv, unsigned int ivlen, + int flags, unsigned int key_id, + unsigned int key_version); + int (*crypt_ctx_update)(void *ctx, const unsigned char* src, unsigned int slen, + unsigned char* dst, unsigned int* dlen); + int (*crypt_ctx_finish)(void *ctx, unsigned char* dst, unsigned int* dlen); + unsigned int (*encrypted_length)(unsigned int slen, unsigned int key_id, unsigned int key_version); +}; diff --git a/EQ2/source/depends/mariadb-10.1.19/include/mysql/plugin_ftparser.h b/EQ2/source/depends/mariadb-10.1.19/include/mysql/plugin_ftparser.h new file mode 100644 index 000000000..4dace4ef3 --- /dev/null +++ b/EQ2/source/depends/mariadb-10.1.19/include/mysql/plugin_ftparser.h @@ -0,0 +1,220 @@ +/* Copyright (c) 2005 MySQL AB, 2009 Sun Microsystems, Inc. + Use is subject to license terms. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; version 2 of the License. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ + +#ifndef _my_plugin_ftparser_h +#define _my_plugin_ftparser_h +#include "plugin.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/************************************************************************* + API for Full-text parser plugin. (MYSQL_FTPARSER_PLUGIN) +*/ + +#define MYSQL_FTPARSER_INTERFACE_VERSION 0x0100 + +/* Parsing modes. Set in MYSQL_FTPARSER_PARAM::mode */ +enum enum_ftparser_mode +{ +/* + Fast and simple mode. This mode is used for indexing, and natural + language queries. + + The parser is expected to return only those words that go into the + index. Stopwords or too short/long words should not be returned. The + 'boolean_info' argument of mysql_add_word() does not have to be set. +*/ + MYSQL_FTPARSER_SIMPLE_MODE= 0, + +/* + Parse with stopwords mode. This mode is used in boolean searches for + "phrase matching." + + The parser is not allowed to ignore words in this mode. Every word + should be returned, including stopwords and words that are too short + or long. The 'boolean_info' argument of mysql_add_word() does not + have to be set. +*/ + MYSQL_FTPARSER_WITH_STOPWORDS= 1, + +/* + Parse in boolean mode. This mode is used to parse a boolean query string. + + The parser should provide a valid MYSQL_FTPARSER_BOOLEAN_INFO + structure in the 'boolean_info' argument to mysql_add_word(). + Usually that means that the parser should recognize boolean operators + in the parsing stream and set appropriate fields in + MYSQL_FTPARSER_BOOLEAN_INFO structure accordingly. As for + MYSQL_FTPARSER_WITH_STOPWORDS mode, no word should be ignored. + Instead, use FT_TOKEN_STOPWORD for the token type of such a word. +*/ + MYSQL_FTPARSER_FULL_BOOLEAN_INFO= 2 +}; + +/* + Token types for boolean mode searching (used for the type member of + MYSQL_FTPARSER_BOOLEAN_INFO struct) + + FT_TOKEN_EOF: End of data. + FT_TOKEN_WORD: Regular word. + FT_TOKEN_LEFT_PAREN: Left parenthesis (start of group/sub-expression). + FT_TOKEN_RIGHT_PAREN: Right parenthesis (end of group/sub-expression). + FT_TOKEN_STOPWORD: Stopword. +*/ + +enum enum_ft_token_type +{ + FT_TOKEN_EOF= 0, + FT_TOKEN_WORD= 1, + FT_TOKEN_LEFT_PAREN= 2, + FT_TOKEN_RIGHT_PAREN= 3, + FT_TOKEN_STOPWORD= 4 +}; + +/* + This structure is used in boolean search mode only. It conveys + boolean-mode metadata to the MySQL search engine for every word in + the search query. A valid instance of this structure must be filled + in by the plugin parser and passed as an argument in the call to + mysql_add_word (the callback function in the MYSQL_FTPARSER_PARAM + structure) when a query is parsed in boolean mode. + + type: The token type. Should be one of the enum_ft_token_type values. + + yesno: Whether the word must be present for a match to occur: + >0 Must be present + <0 Must not be present + 0 Neither; the word is optional but its presence increases the relevance + With the default settings of the ft_boolean_syntax system variable, + >0 corresponds to the '+' operator, <0 corrresponds to the '-' operator, + and 0 means neither operator was used. + + weight_adjust: A weighting factor that determines how much a match + for the word counts. Positive values increase, negative - decrease the + relative word's importance in the query. + + wasign: The sign of the word's weight in the query. If it's non-negative + the match for the word will increase document relevance, if it's + negative - decrease (the word becomes a "noise word", the less of it the + better). + + trunc: Corresponds to the '*' operator in the default setting of the + ft_boolean_syntax system variable. +*/ + +typedef struct st_mysql_ftparser_boolean_info +{ + enum enum_ft_token_type type; + int yesno; + int weight_adjust; + char wasign; + char trunc; + /* These are parser state and must be removed. */ + char prev; + char *quot; +} MYSQL_FTPARSER_BOOLEAN_INFO; + +/* + The following flag means that buffer with a string (document, word) + may be overwritten by the caller before the end of the parsing (that is + before st_mysql_ftparser::deinit() call). If one needs the string + to survive between two successive calls of the parsing function, she + needs to save a copy of it. The flag may be set by MySQL before calling + st_mysql_ftparser::parse(), or it may be set by a plugin before calling + st_mysql_ftparser_param::mysql_parse() or + st_mysql_ftparser_param::mysql_add_word(). +*/ +#define MYSQL_FTFLAGS_NEED_COPY 1 + +/* + An argument of the full-text parser plugin. This structure is + filled in by MySQL server and passed to the parsing function of the + plugin as an in/out parameter. + + mysql_parse: A pointer to the built-in parser implementation of the + server. It's set by the server and can be used by the parser plugin + to invoke the MySQL default parser. If plugin's role is to extract + textual data from .doc, .pdf or .xml content, it might extract + plaintext from the content, and then pass the text to the default + MySQL parser to be parsed. + + mysql_add_word: A server callback to add a new word. When parsing + a document, the server sets this to point at a function that adds + the word to MySQL full-text index. When parsing a search query, + this function will add the new word to the list of words to search + for. The boolean_info argument can be NULL for all cases except + when mode is MYSQL_FTPARSER_FULL_BOOLEAN_INFO. + + ftparser_state: A generic pointer. The plugin can set it to point + to information to be used internally for its own purposes. + + mysql_ftparam: This is set by the server. It is used by MySQL functions + called via mysql_parse() and mysql_add_word() callback. The plugin + should not modify it. + + cs: Information about the character set of the document or query string. + + doc: A pointer to the document or query string to be parsed. + + length: Length of the document or query string, in bytes. + + flags: See MYSQL_FTFLAGS_* constants above. + + mode: The parsing mode. With boolean operators, with stopwords, or + nothing. See enum_ftparser_mode above. +*/ + +typedef struct st_mysql_ftparser_param +{ + int (*mysql_parse)(struct st_mysql_ftparser_param *, + const char *doc, int doc_len); + int (*mysql_add_word)(struct st_mysql_ftparser_param *, + const char *word, int word_len, + MYSQL_FTPARSER_BOOLEAN_INFO *boolean_info); + void *ftparser_state; + void *mysql_ftparam; + const struct charset_info_st *cs; + const char *doc; + int length; + unsigned int flags; + enum enum_ftparser_mode mode; +} MYSQL_FTPARSER_PARAM; + +/* + Full-text parser descriptor. + + interface_version is, e.g., MYSQL_FTPARSER_INTERFACE_VERSION. + The parsing, initialization, and deinitialization functions are + invoked per SQL statement for which the parser is used. +*/ + +struct st_mysql_ftparser +{ + int interface_version; + int (*parse)(MYSQL_FTPARSER_PARAM *param); + int (*init)(MYSQL_FTPARSER_PARAM *param); + int (*deinit)(MYSQL_FTPARSER_PARAM *param); +}; + + +#ifdef __cplusplus +} +#endif + +#endif + diff --git a/EQ2/source/depends/mariadb-10.1.19/include/mysql/plugin_ftparser.h.pp b/EQ2/source/depends/mariadb-10.1.19/include/mysql/plugin_ftparser.h.pp new file mode 100644 index 000000000..17de80087 --- /dev/null +++ b/EQ2/source/depends/mariadb-10.1.19/include/mysql/plugin_ftparser.h.pp @@ -0,0 +1,414 @@ +typedef char my_bool; +typedef void * MYSQL_PLUGIN; +extern struct my_snprintf_service_st { + size_t (*my_snprintf_type)(char*, size_t, const char*, ...); + size_t (*my_vsnprintf_type)(char *, size_t, const char*, va_list); +} *my_snprintf_service; +size_t my_snprintf(char* to, size_t n, const char* fmt, ...); +size_t my_vsnprintf(char *to, size_t n, const char* fmt, va_list ap); +struct st_mysql_lex_string +{ + char *str; + size_t length; +}; +typedef struct st_mysql_lex_string MYSQL_LEX_STRING; +extern struct thd_alloc_service_st { + void *(*thd_alloc_func)(void*, unsigned int); + void *(*thd_calloc_func)(void*, unsigned int); + char *(*thd_strdup_func)(void*, const char *); + char *(*thd_strmake_func)(void*, const char *, unsigned int); + void *(*thd_memdup_func)(void*, const void*, unsigned int); + MYSQL_LEX_STRING *(*thd_make_lex_string_func)(void*, MYSQL_LEX_STRING *, + const char *, unsigned int, int); +} *thd_alloc_service; +void *thd_alloc(void* thd, unsigned int size); +void *thd_calloc(void* thd, unsigned int size); +char *thd_strdup(void* thd, const char *str); +char *thd_strmake(void* thd, const char *str, unsigned int size); +void *thd_memdup(void* thd, const void* str, unsigned int size); +MYSQL_LEX_STRING *thd_make_lex_string(void* thd, MYSQL_LEX_STRING *lex_str, + const char *str, unsigned int size, + int allocate_lex_string); +typedef enum _thd_wait_type_e { + THD_WAIT_SLEEP= 1, + THD_WAIT_DISKIO= 2, + THD_WAIT_ROW_LOCK= 3, + THD_WAIT_GLOBAL_LOCK= 4, + THD_WAIT_META_DATA_LOCK= 5, + THD_WAIT_TABLE_LOCK= 6, + THD_WAIT_USER_LOCK= 7, + THD_WAIT_BINLOG= 8, + THD_WAIT_GROUP_COMMIT= 9, + THD_WAIT_SYNC= 10, + THD_WAIT_NET= 11, + THD_WAIT_LAST= 12 +} thd_wait_type; +extern struct thd_wait_service_st { + void (*thd_wait_begin_func)(void*, int); + void (*thd_wait_end_func)(void*); +} *thd_wait_service; +void thd_wait_begin(void* thd, int wait_type); +void thd_wait_end(void* thd); +extern struct progress_report_service_st { + void (*thd_progress_init_func)(void* thd, unsigned int max_stage); + void (*thd_progress_report_func)(void* thd, + unsigned long long progress, + unsigned long long max_progress); + void (*thd_progress_next_stage_func)(void* thd); + void (*thd_progress_end_func)(void* thd); + const char *(*set_thd_proc_info_func)(void*, const char *info, + const char *func, + const char *file, + unsigned int line); +} *progress_report_service; +void thd_progress_init(void* thd, unsigned int max_stage); +void thd_progress_report(void* thd, + unsigned long long progress, + unsigned long long max_progress); +void thd_progress_next_stage(void* thd); +void thd_progress_end(void* thd); +const char *set_thd_proc_info(void*, const char * info, const char *func, + const char *file, unsigned int line); +extern void (*debug_sync_C_callback_ptr)(void*, const char *, size_t); +enum thd_kill_levels { + THD_IS_NOT_KILLED=0, + THD_ABORT_SOFTLY=50, + THD_ABORT_ASAP=100, +}; +extern struct kill_statement_service_st { + enum thd_kill_levels (*thd_kill_level_func)(const void*); +} *thd_kill_statement_service; +enum thd_kill_levels thd_kill_level(const void*); +typedef long my_time_t; +enum enum_mysql_timestamp_type +{ + MYSQL_TIMESTAMP_NONE= -2, MYSQL_TIMESTAMP_ERROR= -1, + MYSQL_TIMESTAMP_DATE= 0, MYSQL_TIMESTAMP_DATETIME= 1, MYSQL_TIMESTAMP_TIME= 2 +}; +typedef struct st_mysql_time +{ + unsigned int year, month, day, hour, minute, second; + unsigned long second_part; + my_bool neg; + enum enum_mysql_timestamp_type time_type; +} MYSQL_TIME; +extern struct thd_timezone_service_st { + my_time_t (*thd_TIME_to_gmt_sec)(void* thd, const MYSQL_TIME *ltime, unsigned int *errcode); + void (*thd_gmt_sec_to_TIME)(void* thd, MYSQL_TIME *ltime, my_time_t t); +} *thd_timezone_service; +my_time_t thd_TIME_to_gmt_sec(void* thd, const MYSQL_TIME *ltime, unsigned int *errcode); +void thd_gmt_sec_to_TIME(void* thd, MYSQL_TIME *ltime, my_time_t t); +extern struct my_sha1_service_st { + void (*my_sha1_type)(unsigned char*, const char*, size_t); + void (*my_sha1_multi_type)(unsigned char*, ...); + size_t (*my_sha1_context_size_type)(); + void (*my_sha1_init_type)(void *); + void (*my_sha1_input_type)(void *, const unsigned char *, size_t); + void (*my_sha1_result_type)(void *, unsigned char *); +} *my_sha1_service; +void my_sha1(unsigned char*, const char*, size_t); +void my_sha1_multi(unsigned char*, ...); +size_t my_sha1_context_size(); +void my_sha1_init(void *context); +void my_sha1_input(void *context, const unsigned char *buf, size_t len); +void my_sha1_result(void *context, unsigned char *digest); +extern struct my_md5_service_st { + void (*my_md5_type)(unsigned char*, const char*, size_t); + void (*my_md5_multi_type)(unsigned char*, ...); + size_t (*my_md5_context_size_type)(); + void (*my_md5_init_type)(void *); + void (*my_md5_input_type)(void *, const unsigned char *, size_t); + void (*my_md5_result_type)(void *, unsigned char *); +} *my_md5_service; +void my_md5(unsigned char*, const char*, size_t); +void my_md5_multi(unsigned char*, ...); +size_t my_md5_context_size(); +void my_md5_init(void *context); +void my_md5_input(void *context, const unsigned char *buf, size_t len); +void my_md5_result(void *context, unsigned char *digest); +typedef struct logger_handle_st LOGGER_HANDLE; +extern struct logger_service_st { + void (*logger_init_mutexes)(); + LOGGER_HANDLE* (*open)(const char *path, + unsigned long long size_limit, + unsigned int rotations); + int (*close)(LOGGER_HANDLE *log); + int (*vprintf)(LOGGER_HANDLE *log, const char *fmt, va_list argptr); + int (*printf)(LOGGER_HANDLE *log, const char *fmt, ...); + int (*write)(LOGGER_HANDLE *log, const char *buffer, size_t size); + int (*rotate)(LOGGER_HANDLE *log); +} *logger_service; + void logger_init_mutexes(); + LOGGER_HANDLE *logger_open(const char *path, + unsigned long long size_limit, + unsigned int rotations); + int logger_close(LOGGER_HANDLE *log); + int logger_vprintf(LOGGER_HANDLE *log, const char *fmt, va_list argptr); + int logger_printf(LOGGER_HANDLE *log, const char *fmt, ...); + int logger_write(LOGGER_HANDLE *log, const char *buffer, size_t size); + int logger_rotate(LOGGER_HANDLE *log); +extern struct thd_autoinc_service_st { + void (*thd_get_autoinc_func)(const void* thd, + unsigned long* off, unsigned long* inc); +} *thd_autoinc_service; +void thd_get_autoinc(const void* thd, + unsigned long* off, unsigned long* inc); +extern struct thd_error_context_service_st { + const char *(*thd_get_error_message_func)(const void* thd); + unsigned int (*thd_get_error_number_func)(const void* thd); + unsigned long (*thd_get_error_row_func)(const void* thd); + void (*thd_inc_error_row_func)(void* thd); + char *(*thd_get_error_context_description_func)(void* thd, + char *buffer, + unsigned int length, + unsigned int max_query_length); +} *thd_error_context_service; +const char *thd_get_error_message(const void* thd); +unsigned int thd_get_error_number(const void* thd); +unsigned long thd_get_error_row(const void* thd); +void thd_inc_error_row(void* thd); +char *thd_get_error_context_description(void* thd, + char *buffer, unsigned int length, + unsigned int max_query_length); +typedef int MYSQL_THD_KEY_T; +extern struct thd_specifics_service_st { + int (*thd_key_create_func)(MYSQL_THD_KEY_T *key); + void (*thd_key_delete_func)(MYSQL_THD_KEY_T *key); + void *(*thd_getspecific_func)(void* thd, MYSQL_THD_KEY_T key); + int (*thd_setspecific_func)(void* thd, MYSQL_THD_KEY_T key, void *value); +} *thd_specifics_service; +int thd_key_create(MYSQL_THD_KEY_T *key); +void thd_key_delete(MYSQL_THD_KEY_T *key); +void* thd_getspecific(void* thd, MYSQL_THD_KEY_T key); +int thd_setspecific(void* thd, MYSQL_THD_KEY_T key, void *value); +struct encryption_service_st { + unsigned int (*encryption_key_get_latest_version_func)(unsigned int key_id); + unsigned int (*encryption_key_get_func)(unsigned int key_id, unsigned int key_version, + unsigned char* buffer, unsigned int* length); + unsigned int (*encryption_ctx_size_func)(unsigned int key_id, unsigned int key_version); + int (*encryption_ctx_init_func)(void *ctx, const unsigned char* key, unsigned int klen, + const unsigned char* iv, unsigned int ivlen, + int flags, unsigned int key_id, + unsigned int key_version); + int (*encryption_ctx_update_func)(void *ctx, const unsigned char* src, unsigned int slen, + unsigned char* dst, unsigned int* dlen); + int (*encryption_ctx_finish_func)(void *ctx, unsigned char* dst, unsigned int* dlen); + unsigned int (*encryption_encrypted_length_func)(unsigned int slen, unsigned int key_id, unsigned int key_version); +}; +extern struct encryption_service_st encryption_handler; +static inline unsigned int encryption_key_id_exists(unsigned int id) +{ + return encryption_handler.encryption_key_get_latest_version_func(id) != (~(unsigned int)0); +} +static inline unsigned int encryption_key_version_exists(unsigned int id, unsigned int version) +{ + unsigned int unused; + return encryption_handler.encryption_key_get_func((id),(version),(NULL),(&unused)) != (~(unsigned int)0); +} +static inline int encryption_crypt(const unsigned char* src, unsigned int slen, + unsigned char* dst, unsigned int* dlen, + const unsigned char* key, unsigned int klen, + const unsigned char* iv, unsigned int ivlen, + int flags, unsigned int key_id, unsigned int key_version) +{ + void *ctx= alloca(encryption_handler.encryption_ctx_size_func((key_id),(key_version))); + int res1, res2; + unsigned int d1, d2; + if ((res1= encryption_handler.encryption_ctx_init_func((ctx),(key),(klen),(iv),(ivlen),(flags),(key_id),(key_version)))) + return res1; + res1= encryption_handler.encryption_ctx_update_func((ctx),(src),(slen),(dst),(&d1)); + res2= encryption_handler.encryption_ctx_finish_func((ctx),(dst + d1),(&d2)); + *dlen= d1 + d2; + return res1 ? res1 : res2; +} +struct st_encryption_scheme_key { + unsigned int version; + unsigned char key[16]; +}; +struct st_encryption_scheme { + unsigned char iv[16]; + struct st_encryption_scheme_key key[3]; + unsigned int keyserver_requests; + unsigned int key_id; + unsigned int type; + void (*locker)(struct st_encryption_scheme *self, int release); +}; +extern struct encryption_scheme_service_st { + int (*encryption_scheme_encrypt_func) + (const unsigned char* src, unsigned int slen, + unsigned char* dst, unsigned int* dlen, + struct st_encryption_scheme *scheme, + unsigned int key_version, unsigned int i32_1, + unsigned int i32_2, unsigned long long i64); + int (*encryption_scheme_decrypt_func) + (const unsigned char* src, unsigned int slen, + unsigned char* dst, unsigned int* dlen, + struct st_encryption_scheme *scheme, + unsigned int key_version, unsigned int i32_1, + unsigned int i32_2, unsigned long long i64); +} *encryption_scheme_service; +int encryption_scheme_encrypt(const unsigned char* src, unsigned int slen, + unsigned char* dst, unsigned int* dlen, + struct st_encryption_scheme *scheme, + unsigned int key_version, unsigned int i32_1, + unsigned int i32_2, unsigned long long i64); +int encryption_scheme_decrypt(const unsigned char* src, unsigned int slen, + unsigned char* dst, unsigned int* dlen, + struct st_encryption_scheme *scheme, + unsigned int key_version, unsigned int i32_1, + unsigned int i32_2, unsigned long long i64); +struct st_mysql_xid { + long formatID; + long gtrid_length; + long bqual_length; + char data[128]; +}; +typedef struct st_mysql_xid MYSQL_XID; +enum enum_mysql_show_type +{ + SHOW_UNDEF, SHOW_BOOL, SHOW_UINT, SHOW_ULONG, + SHOW_ULONGLONG, SHOW_CHAR, SHOW_CHAR_PTR, + SHOW_ARRAY, SHOW_FUNC, SHOW_DOUBLE, + SHOW_SINT, SHOW_SLONG, SHOW_SLONGLONG, SHOW_SIMPLE_FUNC, + SHOW_always_last +}; +enum enum_var_type +{ + SHOW_OPT_DEFAULT= 0, SHOW_OPT_SESSION, SHOW_OPT_GLOBAL +}; +struct st_mysql_show_var { + const char *name; + void *value; + enum enum_mysql_show_type type; +}; +struct system_status_var; +typedef int (*mysql_show_var_func)(void*, struct st_mysql_show_var*, void *, struct system_status_var *status_var, enum enum_var_type); +struct st_mysql_sys_var; +struct st_mysql_value; +typedef int (*mysql_var_check_func)(void* thd, + struct st_mysql_sys_var *var, + void *save, struct st_mysql_value *value); +typedef void (*mysql_var_update_func)(void* thd, + struct st_mysql_sys_var *var, + void *var_ptr, const void *save); +struct st_mysql_plugin +{ + int type; + void *info; + const char *name; + const char *author; + const char *descr; + int license; + int (*init)(void *); + int (*deinit)(void *); + unsigned int version; + struct st_mysql_show_var *status_vars; + struct st_mysql_sys_var **system_vars; + void * __reserved1; + unsigned long flags; +}; +struct st_maria_plugin +{ + int type; + void *info; + const char *name; + const char *author; + const char *descr; + int license; + int (*init)(void *); + int (*deinit)(void *); + unsigned int version; + struct st_mysql_show_var *status_vars; + struct st_mysql_sys_var **system_vars; + const char *version_info; + unsigned int maturity; +}; +struct st_mysql_daemon +{ + int interface_version; +}; +struct st_mysql_information_schema +{ + int interface_version; +}; +struct st_mysql_storage_engine +{ + int interface_version; +}; +struct handlerton; + struct Mysql_replication { + int interface_version; + }; +struct st_mysql_value +{ + int (*value_type)(struct st_mysql_value *); + const char *(*val_str)(struct st_mysql_value *, char *buffer, int *length); + int (*val_real)(struct st_mysql_value *, double *realbuf); + int (*val_int)(struct st_mysql_value *, long long *intbuf); + int (*is_unsigned)(struct st_mysql_value *); +}; +int thd_in_lock_tables(const void* thd); +int thd_tablespace_op(const void* thd); +long long thd_test_options(const void* thd, long long test_options); +int thd_sql_command(const void* thd); +void **thd_ha_data(const void* thd, const struct handlerton *hton); +void thd_storage_lock_wait(void* thd, long long value); +int thd_tx_isolation(const void* thd); +int thd_tx_is_read_only(const void* thd); +int thd_rpl_is_parallel(const void* thd); +int mysql_tmpfile(const char *prefix); +unsigned long thd_get_thread_id(const void* thd); +void thd_get_xid(const void* thd, MYSQL_XID *xid); +void mysql_query_cache_invalidate4(void* thd, + const char *key, unsigned int key_length, + int using_trx); +void *thd_get_ha_data(const void* thd, const struct handlerton *hton); +void thd_set_ha_data(void* thd, const struct handlerton *hton, + const void *ha_data); +void thd_wakeup_subsequent_commits(void* thd, int wakeup_error); +enum enum_ftparser_mode +{ + MYSQL_FTPARSER_SIMPLE_MODE= 0, + MYSQL_FTPARSER_WITH_STOPWORDS= 1, + MYSQL_FTPARSER_FULL_BOOLEAN_INFO= 2 +}; +enum enum_ft_token_type +{ + FT_TOKEN_EOF= 0, + FT_TOKEN_WORD= 1, + FT_TOKEN_LEFT_PAREN= 2, + FT_TOKEN_RIGHT_PAREN= 3, + FT_TOKEN_STOPWORD= 4 +}; +typedef struct st_mysql_ftparser_boolean_info +{ + enum enum_ft_token_type type; + int yesno; + int weight_adjust; + char wasign; + char trunc; + char prev; + char *quot; +} MYSQL_FTPARSER_BOOLEAN_INFO; +typedef struct st_mysql_ftparser_param +{ + int (*mysql_parse)(struct st_mysql_ftparser_param *, + const char *doc, int doc_len); + int (*mysql_add_word)(struct st_mysql_ftparser_param *, + const char *word, int word_len, + MYSQL_FTPARSER_BOOLEAN_INFO *boolean_info); + void *ftparser_state; + void *mysql_ftparam; + const struct charset_info_st *cs; + const char *doc; + int length; + unsigned int flags; + enum enum_ftparser_mode mode; +} MYSQL_FTPARSER_PARAM; +struct st_mysql_ftparser +{ + int interface_version; + int (*parse)(MYSQL_FTPARSER_PARAM *param); + int (*init)(MYSQL_FTPARSER_PARAM *param); + int (*deinit)(MYSQL_FTPARSER_PARAM *param); +}; diff --git a/EQ2/source/depends/mariadb-10.1.19/include/mysql/plugin_password_validation.h b/EQ2/source/depends/mariadb-10.1.19/include/mysql/plugin_password_validation.h new file mode 100644 index 000000000..18c643e87 --- /dev/null +++ b/EQ2/source/depends/mariadb-10.1.19/include/mysql/plugin_password_validation.h @@ -0,0 +1,54 @@ +#ifndef MYSQL_PLUGIN_PASSWORD_VALIDATION_INCLUDED +/* Copyright (C) 2014 Sergei Golubchik and MariaDB + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; version 2 of the License. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ + +/** + @file + + Password Validation Plugin API. + + This file defines the API for server password validation plugins. +*/ + +#define MYSQL_PLUGIN_PASSWORD_VALIDATION_INCLUDED + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +#define MariaDB_PASSWORD_VALIDATION_INTERFACE_VERSION 0x0100 + +/** + Password validation plugin descriptor +*/ +struct st_mariadb_password_validation +{ + int interface_version; /**< version plugin uses */ + /** + Function provided by the plugin which should perform password validation + and return 0 if the password has passed the validation. + */ + int (*validate_password)(MYSQL_LEX_STRING *username, + MYSQL_LEX_STRING *password); +}; + +#ifdef __cplusplus +} +#endif + +#endif + diff --git a/EQ2/source/depends/mariadb-10.1.19/include/mysql/plugin_password_validation.h.pp b/EQ2/source/depends/mariadb-10.1.19/include/mysql/plugin_password_validation.h.pp new file mode 100644 index 000000000..1abdbd30f --- /dev/null +++ b/EQ2/source/depends/mariadb-10.1.19/include/mysql/plugin_password_validation.h.pp @@ -0,0 +1,420 @@ +typedef char my_bool; +typedef void * MYSQL_PLUGIN; +extern struct my_snprintf_service_st { + size_t (*my_snprintf_type)(char*, size_t, const char*, ...); + size_t (*my_vsnprintf_type)(char *, size_t, const char*, va_list); +} *my_snprintf_service; +size_t my_snprintf(char* to, size_t n, const char* fmt, ...); +size_t my_vsnprintf(char *to, size_t n, const char* fmt, va_list ap); +struct st_mysql_lex_string +{ + char *str; + size_t length; +}; +typedef struct st_mysql_lex_string MYSQL_LEX_STRING; +extern struct thd_alloc_service_st { + void *(*thd_alloc_func)(void*, unsigned int); + void *(*thd_calloc_func)(void*, unsigned int); + char *(*thd_strdup_func)(void*, const char *); + char *(*thd_strmake_func)(void*, const char *, unsigned int); + void *(*thd_memdup_func)(void*, const void*, unsigned int); + MYSQL_LEX_STRING *(*thd_make_lex_string_func)(void*, MYSQL_LEX_STRING *, + const char *, unsigned int, int); +} *thd_alloc_service; +void *thd_alloc(void* thd, unsigned int size); +void *thd_calloc(void* thd, unsigned int size); +char *thd_strdup(void* thd, const char *str); +char *thd_strmake(void* thd, const char *str, unsigned int size); +void *thd_memdup(void* thd, const void* str, unsigned int size); +MYSQL_LEX_STRING *thd_make_lex_string(void* thd, MYSQL_LEX_STRING *lex_str, + const char *str, unsigned int size, + int allocate_lex_string); +typedef enum _thd_wait_type_e { + THD_WAIT_SLEEP= 1, + THD_WAIT_DISKIO= 2, + THD_WAIT_ROW_LOCK= 3, + THD_WAIT_GLOBAL_LOCK= 4, + THD_WAIT_META_DATA_LOCK= 5, + THD_WAIT_TABLE_LOCK= 6, + THD_WAIT_USER_LOCK= 7, + THD_WAIT_BINLOG= 8, + THD_WAIT_GROUP_COMMIT= 9, + THD_WAIT_SYNC= 10, + THD_WAIT_NET= 11, + THD_WAIT_LAST= 12 +} thd_wait_type; +extern struct thd_wait_service_st { + void (*thd_wait_begin_func)(void*, int); + void (*thd_wait_end_func)(void*); +} *thd_wait_service; +void thd_wait_begin(void* thd, int wait_type); +void thd_wait_end(void* thd); +extern struct progress_report_service_st { + void (*thd_progress_init_func)(void* thd, unsigned int max_stage); + void (*thd_progress_report_func)(void* thd, + unsigned long long progress, + unsigned long long max_progress); + void (*thd_progress_next_stage_func)(void* thd); + void (*thd_progress_end_func)(void* thd); + const char *(*set_thd_proc_info_func)(void*, const char *info, + const char *func, + const char *file, + unsigned int line); +} *progress_report_service; +void thd_progress_init(void* thd, unsigned int max_stage); +void thd_progress_report(void* thd, + unsigned long long progress, + unsigned long long max_progress); +void thd_progress_next_stage(void* thd); +void thd_progress_end(void* thd); +const char *set_thd_proc_info(void*, const char * info, const char *func, + const char *file, unsigned int line); +extern void (*debug_sync_C_callback_ptr)(void*, const char *, size_t); +enum thd_kill_levels { + THD_IS_NOT_KILLED=0, + THD_ABORT_SOFTLY=50, + THD_ABORT_ASAP=100, +}; +extern struct kill_statement_service_st { + enum thd_kill_levels (*thd_kill_level_func)(const void*); +} *thd_kill_statement_service; +enum thd_kill_levels thd_kill_level(const void*); +typedef long my_time_t; +enum enum_mysql_timestamp_type +{ + MYSQL_TIMESTAMP_NONE= -2, MYSQL_TIMESTAMP_ERROR= -1, + MYSQL_TIMESTAMP_DATE= 0, MYSQL_TIMESTAMP_DATETIME= 1, MYSQL_TIMESTAMP_TIME= 2 +}; +typedef struct st_mysql_time +{ + unsigned int year, month, day, hour, minute, second; + unsigned long second_part; + my_bool neg; + enum enum_mysql_timestamp_type time_type; +} MYSQL_TIME; +extern struct thd_timezone_service_st { + my_time_t (*thd_TIME_to_gmt_sec)(void* thd, const MYSQL_TIME *ltime, unsigned int *errcode); + void (*thd_gmt_sec_to_TIME)(void* thd, MYSQL_TIME *ltime, my_time_t t); +} *thd_timezone_service; +my_time_t thd_TIME_to_gmt_sec(void* thd, const MYSQL_TIME *ltime, unsigned int *errcode); +void thd_gmt_sec_to_TIME(void* thd, MYSQL_TIME *ltime, my_time_t t); +extern struct my_sha1_service_st { + void (*my_sha1_type)(unsigned char*, const char*, size_t); + void (*my_sha1_multi_type)(unsigned char*, ...); + size_t (*my_sha1_context_size_type)(); + void (*my_sha1_init_type)(void *); + void (*my_sha1_input_type)(void *, const unsigned char *, size_t); + void (*my_sha1_result_type)(void *, unsigned char *); +} *my_sha1_service; +void my_sha1(unsigned char*, const char*, size_t); +void my_sha1_multi(unsigned char*, ...); +size_t my_sha1_context_size(); +void my_sha1_init(void *context); +void my_sha1_input(void *context, const unsigned char *buf, size_t len); +void my_sha1_result(void *context, unsigned char *digest); +extern struct my_md5_service_st { + void (*my_md5_type)(unsigned char*, const char*, size_t); + void (*my_md5_multi_type)(unsigned char*, ...); + size_t (*my_md5_context_size_type)(); + void (*my_md5_init_type)(void *); + void (*my_md5_input_type)(void *, const unsigned char *, size_t); + void (*my_md5_result_type)(void *, unsigned char *); +} *my_md5_service; +void my_md5(unsigned char*, const char*, size_t); +void my_md5_multi(unsigned char*, ...); +size_t my_md5_context_size(); +void my_md5_init(void *context); +void my_md5_input(void *context, const unsigned char *buf, size_t len); +void my_md5_result(void *context, unsigned char *digest); +typedef struct logger_handle_st LOGGER_HANDLE; +extern struct logger_service_st { + void (*logger_init_mutexes)(); + LOGGER_HANDLE* (*open)(const char *path, + unsigned long long size_limit, + unsigned int rotations); + int (*close)(LOGGER_HANDLE *log); + int (*vprintf)(LOGGER_HANDLE *log, const char *fmt, va_list argptr); + int (*printf)(LOGGER_HANDLE *log, const char *fmt, ...); + int (*write)(LOGGER_HANDLE *log, const char *buffer, size_t size); + int (*rotate)(LOGGER_HANDLE *log); +} *logger_service; + void logger_init_mutexes(); + LOGGER_HANDLE *logger_open(const char *path, + unsigned long long size_limit, + unsigned int rotations); + int logger_close(LOGGER_HANDLE *log); + int logger_vprintf(LOGGER_HANDLE *log, const char *fmt, va_list argptr); + int logger_printf(LOGGER_HANDLE *log, const char *fmt, ...); + int logger_write(LOGGER_HANDLE *log, const char *buffer, size_t size); + int logger_rotate(LOGGER_HANDLE *log); +extern struct thd_autoinc_service_st { + void (*thd_get_autoinc_func)(const void* thd, + unsigned long* off, unsigned long* inc); +} *thd_autoinc_service; +void thd_get_autoinc(const void* thd, + unsigned long* off, unsigned long* inc); +extern struct thd_error_context_service_st { + const char *(*thd_get_error_message_func)(const void* thd); + unsigned int (*thd_get_error_number_func)(const void* thd); + unsigned long (*thd_get_error_row_func)(const void* thd); + void (*thd_inc_error_row_func)(void* thd); + char *(*thd_get_error_context_description_func)(void* thd, + char *buffer, + unsigned int length, + unsigned int max_query_length); +} *thd_error_context_service; +const char *thd_get_error_message(const void* thd); +unsigned int thd_get_error_number(const void* thd); +unsigned long thd_get_error_row(const void* thd); +void thd_inc_error_row(void* thd); +char *thd_get_error_context_description(void* thd, + char *buffer, unsigned int length, + unsigned int max_query_length); +typedef int MYSQL_THD_KEY_T; +extern struct thd_specifics_service_st { + int (*thd_key_create_func)(MYSQL_THD_KEY_T *key); + void (*thd_key_delete_func)(MYSQL_THD_KEY_T *key); + void *(*thd_getspecific_func)(void* thd, MYSQL_THD_KEY_T key); + int (*thd_setspecific_func)(void* thd, MYSQL_THD_KEY_T key, void *value); +} *thd_specifics_service; +int thd_key_create(MYSQL_THD_KEY_T *key); +void thd_key_delete(MYSQL_THD_KEY_T *key); +void* thd_getspecific(void* thd, MYSQL_THD_KEY_T key); +int thd_setspecific(void* thd, MYSQL_THD_KEY_T key, void *value); +struct encryption_service_st { + unsigned int (*encryption_key_get_latest_version_func)(unsigned int key_id); + unsigned int (*encryption_key_get_func)(unsigned int key_id, unsigned int key_version, + unsigned char* buffer, unsigned int* length); + unsigned int (*encryption_ctx_size_func)(unsigned int key_id, unsigned int key_version); + int (*encryption_ctx_init_func)(void *ctx, const unsigned char* key, unsigned int klen, + const unsigned char* iv, unsigned int ivlen, + int flags, unsigned int key_id, + unsigned int key_version); + int (*encryption_ctx_update_func)(void *ctx, const unsigned char* src, unsigned int slen, + unsigned char* dst, unsigned int* dlen); + int (*encryption_ctx_finish_func)(void *ctx, unsigned char* dst, unsigned int* dlen); + unsigned int (*encryption_encrypted_length_func)(unsigned int slen, unsigned int key_id, unsigned int key_version); +}; +extern struct encryption_service_st encryption_handler; +static inline unsigned int encryption_key_id_exists(unsigned int id) +{ + return encryption_handler.encryption_key_get_latest_version_func(id) != (~(unsigned int)0); +} +static inline unsigned int encryption_key_version_exists(unsigned int id, unsigned int version) +{ + unsigned int unused; + return encryption_handler.encryption_key_get_func((id),(version),(NULL),(&unused)) != (~(unsigned int)0); +} +static inline int encryption_crypt(const unsigned char* src, unsigned int slen, + unsigned char* dst, unsigned int* dlen, + const unsigned char* key, unsigned int klen, + const unsigned char* iv, unsigned int ivlen, + int flags, unsigned int key_id, unsigned int key_version) +{ + void *ctx= alloca(encryption_handler.encryption_ctx_size_func((key_id),(key_version))); + int res1, res2; + unsigned int d1, d2; + if ((res1= encryption_handler.encryption_ctx_init_func((ctx),(key),(klen),(iv),(ivlen),(flags),(key_id),(key_version)))) + return res1; + res1= encryption_handler.encryption_ctx_update_func((ctx),(src),(slen),(dst),(&d1)); + res2= encryption_handler.encryption_ctx_finish_func((ctx),(dst + d1),(&d2)); + *dlen= d1 + d2; + return res1 ? res1 : res2; +} +struct st_encryption_scheme_key { + unsigned int version; + unsigned char key[16]; +}; +struct st_encryption_scheme { + unsigned char iv[16]; + struct st_encryption_scheme_key key[3]; + unsigned int keyserver_requests; + unsigned int key_id; + unsigned int type; + void (*locker)(struct st_encryption_scheme *self, int release); +}; +extern struct encryption_scheme_service_st { + int (*encryption_scheme_encrypt_func) + (const unsigned char* src, unsigned int slen, + unsigned char* dst, unsigned int* dlen, + struct st_encryption_scheme *scheme, + unsigned int key_version, unsigned int i32_1, + unsigned int i32_2, unsigned long long i64); + int (*encryption_scheme_decrypt_func) + (const unsigned char* src, unsigned int slen, + unsigned char* dst, unsigned int* dlen, + struct st_encryption_scheme *scheme, + unsigned int key_version, unsigned int i32_1, + unsigned int i32_2, unsigned long long i64); +} *encryption_scheme_service; +int encryption_scheme_encrypt(const unsigned char* src, unsigned int slen, + unsigned char* dst, unsigned int* dlen, + struct st_encryption_scheme *scheme, + unsigned int key_version, unsigned int i32_1, + unsigned int i32_2, unsigned long long i64); +int encryption_scheme_decrypt(const unsigned char* src, unsigned int slen, + unsigned char* dst, unsigned int* dlen, + struct st_encryption_scheme *scheme, + unsigned int key_version, unsigned int i32_1, + unsigned int i32_2, unsigned long long i64); +struct st_mysql_xid { + long formatID; + long gtrid_length; + long bqual_length; + char data[128]; +}; +typedef struct st_mysql_xid MYSQL_XID; +enum enum_mysql_show_type +{ + SHOW_UNDEF, SHOW_BOOL, SHOW_UINT, SHOW_ULONG, + SHOW_ULONGLONG, SHOW_CHAR, SHOW_CHAR_PTR, + SHOW_ARRAY, SHOW_FUNC, SHOW_DOUBLE, + SHOW_SINT, SHOW_SLONG, SHOW_SLONGLONG, SHOW_SIMPLE_FUNC, + SHOW_always_last +}; +enum enum_var_type +{ + SHOW_OPT_DEFAULT= 0, SHOW_OPT_SESSION, SHOW_OPT_GLOBAL +}; +struct st_mysql_show_var { + const char *name; + void *value; + enum enum_mysql_show_type type; +}; +struct system_status_var; +typedef int (*mysql_show_var_func)(void*, struct st_mysql_show_var*, void *, struct system_status_var *status_var, enum enum_var_type); +struct st_mysql_sys_var; +struct st_mysql_value; +typedef int (*mysql_var_check_func)(void* thd, + struct st_mysql_sys_var *var, + void *save, struct st_mysql_value *value); +typedef void (*mysql_var_update_func)(void* thd, + struct st_mysql_sys_var *var, + void *var_ptr, const void *save); +struct st_mysql_plugin +{ + int type; + void *info; + const char *name; + const char *author; + const char *descr; + int license; + int (*init)(void *); + int (*deinit)(void *); + unsigned int version; + struct st_mysql_show_var *status_vars; + struct st_mysql_sys_var **system_vars; + void * __reserved1; + unsigned long flags; +}; +struct st_maria_plugin +{ + int type; + void *info; + const char *name; + const char *author; + const char *descr; + int license; + int (*init)(void *); + int (*deinit)(void *); + unsigned int version; + struct st_mysql_show_var *status_vars; + struct st_mysql_sys_var **system_vars; + const char *version_info; + unsigned int maturity; +}; +enum enum_ftparser_mode +{ + MYSQL_FTPARSER_SIMPLE_MODE= 0, + MYSQL_FTPARSER_WITH_STOPWORDS= 1, + MYSQL_FTPARSER_FULL_BOOLEAN_INFO= 2 +}; +enum enum_ft_token_type +{ + FT_TOKEN_EOF= 0, + FT_TOKEN_WORD= 1, + FT_TOKEN_LEFT_PAREN= 2, + FT_TOKEN_RIGHT_PAREN= 3, + FT_TOKEN_STOPWORD= 4 +}; +typedef struct st_mysql_ftparser_boolean_info +{ + enum enum_ft_token_type type; + int yesno; + int weight_adjust; + char wasign; + char trunc; + char prev; + char *quot; +} MYSQL_FTPARSER_BOOLEAN_INFO; +typedef struct st_mysql_ftparser_param +{ + int (*mysql_parse)(struct st_mysql_ftparser_param *, + const char *doc, int doc_len); + int (*mysql_add_word)(struct st_mysql_ftparser_param *, + const char *word, int word_len, + MYSQL_FTPARSER_BOOLEAN_INFO *boolean_info); + void *ftparser_state; + void *mysql_ftparam; + const struct charset_info_st *cs; + const char *doc; + int length; + unsigned int flags; + enum enum_ftparser_mode mode; +} MYSQL_FTPARSER_PARAM; +struct st_mysql_ftparser +{ + int interface_version; + int (*parse)(MYSQL_FTPARSER_PARAM *param); + int (*init)(MYSQL_FTPARSER_PARAM *param); + int (*deinit)(MYSQL_FTPARSER_PARAM *param); +}; +struct st_mysql_daemon +{ + int interface_version; +}; +struct st_mysql_information_schema +{ + int interface_version; +}; +struct st_mysql_storage_engine +{ + int interface_version; +}; +struct handlerton; + struct Mysql_replication { + int interface_version; + }; +struct st_mysql_value +{ + int (*value_type)(struct st_mysql_value *); + const char *(*val_str)(struct st_mysql_value *, char *buffer, int *length); + int (*val_real)(struct st_mysql_value *, double *realbuf); + int (*val_int)(struct st_mysql_value *, long long *intbuf); + int (*is_unsigned)(struct st_mysql_value *); +}; +int thd_in_lock_tables(const void* thd); +int thd_tablespace_op(const void* thd); +long long thd_test_options(const void* thd, long long test_options); +int thd_sql_command(const void* thd); +void **thd_ha_data(const void* thd, const struct handlerton *hton); +void thd_storage_lock_wait(void* thd, long long value); +int thd_tx_isolation(const void* thd); +int thd_tx_is_read_only(const void* thd); +int thd_rpl_is_parallel(const void* thd); +int mysql_tmpfile(const char *prefix); +unsigned long thd_get_thread_id(const void* thd); +void thd_get_xid(const void* thd, MYSQL_XID *xid); +void mysql_query_cache_invalidate4(void* thd, + const char *key, unsigned int key_length, + int using_trx); +void *thd_get_ha_data(const void* thd, const struct handlerton *hton); +void thd_set_ha_data(void* thd, const struct handlerton *hton, + const void *ha_data); +void thd_wakeup_subsequent_commits(void* thd, int wakeup_error); +struct st_mariadb_password_validation +{ + int interface_version; + int (*validate_password)(MYSQL_LEX_STRING *username, + MYSQL_LEX_STRING *password); +}; diff --git a/EQ2/source/depends/mariadb-10.1.19/include/mysql/psi/mysql_file.h b/EQ2/source/depends/mariadb-10.1.19/include/mysql/psi/mysql_file.h new file mode 100644 index 000000000..c839b2b01 --- /dev/null +++ b/EQ2/source/depends/mariadb-10.1.19/include/mysql/psi/mysql_file.h @@ -0,0 +1,1421 @@ +/* Copyright (c) 2008, 2012, Oracle and/or its affiliates. All rights reserved. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; version 2 of the License. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software Foundation, + 51 Franklin Street, Suite 500, Boston, MA 02110-1335 USA */ + +#ifndef MYSQL_FILE_H +#define MYSQL_FILE_H + +#include + +/* For strlen() */ +#include +/* For MY_STAT */ +#include +/* For my_chsize */ +#include + +/** + @file mysql/psi/mysql_file.h + Instrumentation helpers for mysys file io. + This header file provides the necessary declarations + to use the mysys file API with the performance schema instrumentation. + In some compilers (SunStudio), 'static inline' functions, when declared + but not used, are not optimized away (because they are unused) by default, + so that including a static inline function from a header file does + create unwanted dependencies, causing unresolved symbols at link time. + Other compilers, like gcc, optimize these dependencies by default. + + Since the instrumented APIs declared here are wrapper on top + of mysys file io APIs, including mysql/psi/mysql_file.h assumes that + the dependency on my_sys already exists. +*/ + +#include "mysql/psi/psi.h" + +/** + @defgroup File_instrumentation File Instrumentation + @ingroup Instrumentation_interface + @{ +*/ + +/** + @def mysql_file_register(P1, P2, P3) + File registration. +*/ +#define mysql_file_register(P1, P2, P3) \ + inline_mysql_file_register(P1, P2, P3) + +/** + @def mysql_file_fgets(P1, P2, F) + Instrumented fgets. + @c mysql_file_fgets is a replacement for @c fgets. +*/ +#ifdef HAVE_PSI_FILE_INTERFACE + #define mysql_file_fgets(P1, P2, F) \ + inline_mysql_file_fgets(__FILE__, __LINE__, P1, P2, F) +#else + #define mysql_file_fgets(P1, P2, F) \ + inline_mysql_file_fgets(P1, P2, F) +#endif + +/** + @def mysql_file_fgetc(F) + Instrumented fgetc. + @c mysql_file_fgetc is a replacement for @c fgetc. +*/ +#ifdef HAVE_PSI_FILE_INTERFACE + #define mysql_file_fgetc(F) inline_mysql_file_fgetc(__FILE__, __LINE__, F) +#else + #define mysql_file_fgetc(F) inline_mysql_file_fgetc(F) +#endif + +/** + @def mysql_file_fputs(P1, F) + Instrumented fputs. + @c mysql_file_fputs is a replacement for @c fputs. +*/ +#ifdef HAVE_PSI_FILE_INTERFACE + #define mysql_file_fputs(P1, F) \ + inline_mysql_file_fputs(__FILE__, __LINE__, P1, F) +#else + #define mysql_file_fputs(P1, F)\ + inline_mysql_file_fputs(P1, F) +#endif + +/** + @def mysql_file_fputc(P1, F) + Instrumented fputc. + @c mysql_file_fputc is a replacement for @c fputc. +*/ +#ifdef HAVE_PSI_FILE_INTERFACE + #define mysql_file_fputc(P1, F) \ + inline_mysql_file_fputc(__FILE__, __LINE__, P1, F) +#else + #define mysql_file_fputc(P1, F) \ + inline_mysql_file_fputc(P1, F) +#endif + +/** + @def mysql_file_fprintf + Instrumented fprintf. + @c mysql_file_fprintf is a replacement for @c fprintf. +*/ +#define mysql_file_fprintf inline_mysql_file_fprintf + +/** + @def mysql_file_vfprintf(F, P1, P2) + Instrumented vfprintf. + @c mysql_file_vfprintf is a replacement for @c vfprintf. +*/ +#ifdef HAVE_PSI_FILE_INTERFACE + #define mysql_file_vfprintf(F, P1, P2) \ + inline_mysql_file_vfprintf(__FILE__, __LINE__, F, P1, P2) +#else + #define mysql_file_vfprintf(F, P1, P2) \ + inline_mysql_file_vfprintf(F, P1, P2) +#endif + +/** + @def mysql_file_fflush(F, P1, P2) + Instrumented fflush. + @c mysql_file_fflush is a replacement for @c fflush. +*/ +#ifdef HAVE_PSI_FILE_INTERFACE + #define mysql_file_fflush(F) \ + inline_mysql_file_fflush(__FILE__, __LINE__, F) +#else + #define mysql_file_fflush(F) \ + inline_mysql_file_fflush(F) +#endif + +/** + @def mysql_file_feof(F) + Instrumented feof. + @c mysql_file_feof is a replacement for @c feof. +*/ +#define mysql_file_feof(F) inline_mysql_file_feof(F) + +/** + @def mysql_file_fstat(FN, S, FL) + Instrumented fstat. + @c mysql_file_fstat is a replacement for @c my_fstat. +*/ +#ifdef HAVE_PSI_FILE_INTERFACE + #define mysql_file_fstat(FN, S, FL) \ + inline_mysql_file_fstat(__FILE__, __LINE__, FN, S, FL) +#else + #define mysql_file_fstat(FN, S, FL) \ + inline_mysql_file_fstat(FN, S, FL) +#endif + +/** + @def mysql_file_stat(K, FN, S, FL) + Instrumented stat. + @c mysql_file_stat is a replacement for @c my_stat. +*/ +#ifdef HAVE_PSI_FILE_INTERFACE + #define mysql_file_stat(K, FN, S, FL) \ + inline_mysql_file_stat(K, __FILE__, __LINE__, FN, S, FL) +#else + #define mysql_file_stat(K, FN, S, FL) \ + inline_mysql_file_stat(FN, S, FL) +#endif + +/** + @def mysql_file_chsize(F, P1, P2, P3) + Instrumented chsize. + @c mysql_file_chsize is a replacement for @c my_chsize. +*/ +#ifdef HAVE_PSI_FILE_INTERFACE + #define mysql_file_chsize(F, P1, P2, P3) \ + inline_mysql_file_chsize(__FILE__, __LINE__, F, P1, P2, P3) +#else + #define mysql_file_chsize(F, P1, P2, P3) \ + inline_mysql_file_chsize(F, P1, P2, P3) +#endif + +/** + @def mysql_file_fopen(K, N, F1, F2) + Instrumented fopen. + @c mysql_file_fopen is a replacement for @c my_fopen. +*/ +#ifdef HAVE_PSI_FILE_INTERFACE + #define mysql_file_fopen(K, N, F1, F2) \ + inline_mysql_file_fopen(K, __FILE__, __LINE__, N, F1, F2) +#else + #define mysql_file_fopen(K, N, F1, F2) \ + inline_mysql_file_fopen(N, F1, F2) +#endif + +/** + @def mysql_file_fclose(FD, FL) + Instrumented fclose. + @c mysql_file_fclose is a replacement for @c my_fclose. + Without the instrumentation, this call will have the same behavior as the + undocumented and possibly platform specific my_fclose(NULL, ...) behavior. + With the instrumentation, mysql_fclose(NULL, ...) will safely return 0, + which is an extension compared to my_fclose and is therefore compliant. + mysql_fclose is on purpose *not* implementing + @code DBUG_ASSERT(file != NULL) @endcode, + since doing so could introduce regressions. +*/ +#ifdef HAVE_PSI_FILE_INTERFACE + #define mysql_file_fclose(FD, FL) \ + inline_mysql_file_fclose(__FILE__, __LINE__, FD, FL) +#else + #define mysql_file_fclose(FD, FL) \ + inline_mysql_file_fclose(FD, FL) +#endif + +/** + @def mysql_file_fread(FD, P1, P2, P3) + Instrumented fread. + @c mysql_file_fread is a replacement for @c my_fread. +*/ +#ifdef HAVE_PSI_FILE_INTERFACE + #define mysql_file_fread(FD, P1, P2, P3) \ + inline_mysql_file_fread(__FILE__, __LINE__, FD, P1, P2, P3) +#else + #define mysql_file_fread(FD, P1, P2, P3) \ + inline_mysql_file_fread(FD, P1, P2, P3) +#endif + +/** + @def mysql_file_fwrite(FD, P1, P2, P3) + Instrumented fwrite. + @c mysql_file_fwrite is a replacement for @c my_fwrite. +*/ +#ifdef HAVE_PSI_FILE_INTERFACE + #define mysql_file_fwrite(FD, P1, P2, P3) \ + inline_mysql_file_fwrite(__FILE__, __LINE__, FD, P1, P2, P3) +#else + #define mysql_file_fwrite(FD, P1, P2, P3) \ + inline_mysql_file_fwrite(FD, P1, P2, P3) +#endif + +/** + @def mysql_file_fseek(FD, P, W, F) + Instrumented fseek. + @c mysql_file_fseek is a replacement for @c my_fseek. +*/ +#ifdef HAVE_PSI_FILE_INTERFACE + #define mysql_file_fseek(FD, P, W, F) \ + inline_mysql_file_fseek(__FILE__, __LINE__, FD, P, W, F) +#else + #define mysql_file_fseek(FD, P, W, F) \ + inline_mysql_file_fseek(FD, P, W, F) +#endif + +/** + @def mysql_file_ftell(FD, F) + Instrumented ftell. + @c mysql_file_ftell is a replacement for @c my_ftell. +*/ +#ifdef HAVE_PSI_FILE_INTERFACE + #define mysql_file_ftell(FD, F) \ + inline_mysql_file_ftell(__FILE__, __LINE__, FD, F) +#else + #define mysql_file_ftell(FD, F) \ + inline_mysql_file_ftell(FD, F) +#endif + +/** + @def mysql_file_create(K, N, F1, F2, F3) + Instrumented create. + @c mysql_file_create is a replacement for @c my_create. +*/ +#ifdef HAVE_PSI_FILE_INTERFACE + #define mysql_file_create(K, N, F1, F2, F3) \ + inline_mysql_file_create(K, __FILE__, __LINE__, N, F1, F2, F3) +#else + #define mysql_file_create(K, N, F1, F2, F3) \ + inline_mysql_file_create(N, F1, F2, F3) +#endif + +/** + @def mysql_file_create_temp(K, T, D, P, M, F) + Instrumented create_temp_file. + @c mysql_file_create_temp is a replacement for @c create_temp_file. +*/ +#ifdef HAVE_PSI_FILE_INTERFACE + #define mysql_file_create_temp(K, T, D, P, M, F) \ + inline_mysql_file_create_temp(K, T, D, P, M, F) +#else + #define mysql_file_create_temp(K, T, D, P, M, F) \ + inline_mysql_file_create_temp(T, D, P, M, F) +#endif + +/** + @def mysql_file_open(K, N, F1, F2) + Instrumented open. + @c mysql_file_open is a replacement for @c my_open. +*/ +#ifdef HAVE_PSI_FILE_INTERFACE + #define mysql_file_open(K, N, F1, F2) \ + inline_mysql_file_open(K, __FILE__, __LINE__, N, F1, F2) +#else + #define mysql_file_open(K, N, F1, F2) \ + inline_mysql_file_open(N, F1, F2) +#endif + +/** + @def mysql_file_close(FD, F) + Instrumented close. + @c mysql_file_close is a replacement for @c my_close. +*/ +#ifdef HAVE_PSI_FILE_INTERFACE + #define mysql_file_close(FD, F) \ + inline_mysql_file_close(__FILE__, __LINE__, FD, F) +#else + #define mysql_file_close(FD, F) \ + inline_mysql_file_close(FD, F) +#endif + +/** + @def mysql_file_read(FD, B, S, F) + Instrumented read. + @c mysql_read is a replacement for @c my_read. +*/ +#ifdef HAVE_PSI_FILE_INTERFACE + #define mysql_file_read(FD, B, S, F) \ + inline_mysql_file_read(__FILE__, __LINE__, FD, B, S, F) +#else + #define mysql_file_read(FD, B, S, F) \ + inline_mysql_file_read(FD, B, S, F) +#endif + +/** + @def mysql_file_write(FD, B, S, F) + Instrumented write. + @c mysql_file_write is a replacement for @c my_write. +*/ +#ifdef HAVE_PSI_FILE_INTERFACE + #define mysql_file_write(FD, B, S, F) \ + inline_mysql_file_write(__FILE__, __LINE__, FD, B, S, F) +#else + #define mysql_file_write(FD, B, S, F) \ + inline_mysql_file_write(FD, B, S, F) +#endif + +/** + @def mysql_file_pread(FD, B, S, O, F) + Instrumented pread. + @c mysql_pread is a replacement for @c my_pread. +*/ +#ifdef HAVE_PSI_FILE_INTERFACE + #define mysql_file_pread(FD, B, S, O, F) \ + inline_mysql_file_pread(__FILE__, __LINE__, FD, B, S, O, F) +#else + #define mysql_file_pread(FD, B, S, O, F) \ + inline_mysql_file_pread(FD, B, S, O, F) +#endif + +/** + @def mysql_file_pwrite(FD, B, S, O, F) + Instrumented pwrite. + @c mysql_file_pwrite is a replacement for @c my_pwrite. +*/ +#ifdef HAVE_PSI_FILE_INTERFACE + #define mysql_file_pwrite(FD, B, S, O, F) \ + inline_mysql_file_pwrite(__FILE__, __LINE__, FD, B, S, O, F) +#else + #define mysql_file_pwrite(FD, B, S, O, F) \ + inline_mysql_file_pwrite(FD, B, S, O, F) +#endif + +/** + @def mysql_file_seek(FD, P, W, F) + Instrumented seek. + @c mysql_file_seek is a replacement for @c my_seek. +*/ +#ifdef HAVE_PSI_FILE_INTERFACE + #define mysql_file_seek(FD, P, W, F) \ + inline_mysql_file_seek(__FILE__, __LINE__, FD, P, W, F) +#else + #define mysql_file_seek(FD, P, W, F) \ + inline_mysql_file_seek(FD, P, W, F) +#endif + +/** + @def mysql_file_tell(FD, F) + Instrumented tell. + @c mysql_file_tell is a replacement for @c my_tell. +*/ +#ifdef HAVE_PSI_FILE_INTERFACE + #define mysql_file_tell(FD, F) \ + inline_mysql_file_tell(__FILE__, __LINE__, FD, F) +#else + #define mysql_file_tell(FD, F) \ + inline_mysql_file_tell(FD, F) +#endif + +/** + @def mysql_file_delete(K, P1, P2) + Instrumented delete. + @c mysql_file_delete is a replacement for @c my_delete. +*/ +#ifdef HAVE_PSI_FILE_INTERFACE + #define mysql_file_delete(K, P1, P2) \ + inline_mysql_file_delete(K, __FILE__, __LINE__, P1, P2) +#else + #define mysql_file_delete(K, P1, P2) \ + inline_mysql_file_delete(P1, P2) +#endif + +/** + @def mysql_file_rename(K, P1, P2, P3) + Instrumented rename. + @c mysql_file_rename is a replacement for @c my_rename. +*/ +#ifdef HAVE_PSI_FILE_INTERFACE + #define mysql_file_rename(K, P1, P2, P3) \ + inline_mysql_file_rename(K, __FILE__, __LINE__, P1, P2, P3) +#else + #define mysql_file_rename(K, P1, P2, P3) \ + inline_mysql_file_rename(P1, P2, P3) +#endif + +/** + @def mysql_file_create_with_symlink(K, P1, P2, P3, P4, P5) + Instrumented create with symbolic link. + @c mysql_file_create_with_symlink is a replacement + for @c my_create_with_symlink. +*/ +#ifdef HAVE_PSI_FILE_INTERFACE + #define mysql_file_create_with_symlink(K, P1, P2, P3, P4, P5) \ + inline_mysql_file_create_with_symlink(K, __FILE__, __LINE__, \ + P1, P2, P3, P4, P5) +#else + #define mysql_file_create_with_symlink(K, P1, P2, P3, P4, P5) \ + inline_mysql_file_create_with_symlink(P1, P2, P3, P4, P5) +#endif + +/** + @def mysql_file_delete_with_symlink(K, P1, P2) + Instrumented delete with symbolic link. + @c mysql_file_delete_with_symlink is a replacement + for @c my_delete_with_symlink. +*/ +#ifdef HAVE_PSI_FILE_INTERFACE + #define mysql_file_delete_with_symlink(K, P1, P2) \ + inline_mysql_file_delete_with_symlink(K, __FILE__, __LINE__, P1, P2) +#else + #define mysql_file_delete_with_symlink(K, P1, P2) \ + inline_mysql_file_delete_with_symlink(P1, P2) +#endif + +/** + @def mysql_file_rename_with_symlink(K, P1, P2, P3) + Instrumented rename with symbolic link. + @c mysql_file_rename_with_symlink is a replacement + for @c my_rename_with_symlink. +*/ +#ifdef HAVE_PSI_FILE_INTERFACE + #define mysql_file_rename_with_symlink(K, P1, P2, P3) \ + inline_mysql_file_rename_with_symlink(K, __FILE__, __LINE__, P1, P2, P3) +#else + #define mysql_file_rename_with_symlink(K, P1, P2, P3) \ + inline_mysql_file_rename_with_symlink(P1, P2, P3) +#endif + +/** + @def mysql_file_sync(P1, P2) + Instrumented file sync. + @c mysql_file_sync is a replacement for @c my_sync. +*/ +#ifdef HAVE_PSI_FILE_INTERFACE + #define mysql_file_sync(P1, P2) \ + inline_mysql_file_sync(__FILE__, __LINE__, P1, P2) +#else + #define mysql_file_sync(P1, P2) \ + inline_mysql_file_sync(P1, P2) +#endif + +/** + An instrumented FILE structure. + @sa MYSQL_FILE +*/ +struct st_mysql_file +{ + /** The real file. */ + FILE *m_file; + /** + The instrumentation hook. + Note that this hook is not conditionally defined, + for binary compatibility of the @c MYSQL_FILE interface. + */ + struct PSI_file *m_psi; +}; + +/** + Type of an instrumented file. + @c MYSQL_FILE is a drop-in replacement for @c FILE. + @sa mysql_file_open +*/ +typedef struct st_mysql_file MYSQL_FILE; + +static inline void inline_mysql_file_register( +#ifdef HAVE_PSI_FILE_INTERFACE + const char *category, + PSI_file_info *info, + int count +#else + const char *category __attribute__ ((unused)), + void *info __attribute__ ((unused)), + int count __attribute__ ((unused)) +#endif +) +{ +#ifdef HAVE_PSI_FILE_INTERFACE + PSI_FILE_CALL(register_file)(category, info, count); +#endif +} + +static inline char * +inline_mysql_file_fgets( +#ifdef HAVE_PSI_FILE_INTERFACE + const char *src_file, uint src_line, +#endif + char *str, int size, MYSQL_FILE *file) +{ + char *result; +#ifdef HAVE_PSI_FILE_INTERFACE + struct PSI_file_locker *locker; + PSI_file_locker_state state; + locker= PSI_FILE_CALL(get_thread_file_stream_locker) + (&state, file->m_psi, PSI_FILE_READ); + if (likely(locker != NULL)) + { + PSI_FILE_CALL(start_file_wait)(locker, (size_t) size, src_file, src_line); + result= fgets(str, size, file->m_file); + PSI_FILE_CALL(end_file_wait)(locker, result ? strlen(result) : 0); + return result; + } +#endif + + result= fgets(str, size, file->m_file); + return result; +} + +static inline int +inline_mysql_file_fgetc( +#ifdef HAVE_PSI_FILE_INTERFACE + const char *src_file, uint src_line, +#endif + MYSQL_FILE *file) +{ + int result; +#ifdef HAVE_PSI_FILE_INTERFACE + struct PSI_file_locker *locker; + PSI_file_locker_state state; + locker= PSI_FILE_CALL(get_thread_file_stream_locker) + (&state, file->m_psi, PSI_FILE_READ); + if (likely(locker != NULL)) + { + PSI_FILE_CALL(start_file_wait)(locker, (size_t) 1, src_file, src_line); + result= fgetc(file->m_file); + PSI_FILE_CALL(end_file_wait)(locker, (size_t) 1); + return result; + } +#endif + + result= fgetc(file->m_file); + return result; +} + +static inline int +inline_mysql_file_fputs( +#ifdef HAVE_PSI_FILE_INTERFACE + const char *src_file, uint src_line, +#endif + const char *str, MYSQL_FILE *file) +{ + int result; +#ifdef HAVE_PSI_FILE_INTERFACE + struct PSI_file_locker *locker; + PSI_file_locker_state state; + size_t bytes; + locker= PSI_FILE_CALL(get_thread_file_stream_locker) + (&state, file->m_psi, PSI_FILE_WRITE); + if (likely(locker != NULL)) + { + bytes= str ? strlen(str) : 0; + PSI_FILE_CALL(start_file_wait)(locker, bytes, src_file, src_line); + result= fputs(str, file->m_file); + PSI_FILE_CALL(end_file_wait)(locker, bytes); + return result; + } +#endif + + result= fputs(str, file->m_file); + return result; +} + +static inline int +inline_mysql_file_fputc( +#ifdef HAVE_PSI_FILE_INTERFACE + const char *src_file, uint src_line, +#endif + char c, MYSQL_FILE *file) +{ + int result; +#ifdef HAVE_PSI_FILE_INTERFACE + struct PSI_file_locker *locker; + PSI_file_locker_state state; + locker= PSI_FILE_CALL(get_thread_file_stream_locker) + (&state, file->m_psi, PSI_FILE_WRITE); + if (likely(locker != NULL)) + { + PSI_FILE_CALL(start_file_wait)(locker, (size_t) 1, src_file, src_line); + result= fputc(c, file->m_file); + PSI_FILE_CALL(end_file_wait)(locker, (size_t) 1); + return result; + } +#endif + + result= fputc(c, file->m_file); + return result; +} + +static inline int +inline_mysql_file_fprintf(MYSQL_FILE *file, const char *format, ...) +{ + /* + TODO: figure out how to pass src_file and src_line from the caller. + */ + int result; + va_list args; +#ifdef HAVE_PSI_FILE_INTERFACE + struct PSI_file_locker *locker; + PSI_file_locker_state state; + locker= PSI_FILE_CALL(get_thread_file_stream_locker) + (&state, file->m_psi, PSI_FILE_WRITE); + if (likely(locker != NULL)) + { + PSI_FILE_CALL(start_file_wait)(locker, (size_t) 0, __FILE__, __LINE__); + va_start(args, format); + result= vfprintf(file->m_file, format, args); + va_end(args); + PSI_FILE_CALL(end_file_wait)(locker, (size_t) result); + return result; + } +#endif + + va_start(args, format); + result= vfprintf(file->m_file, format, args); + va_end(args); + return result; +} + +static inline int +inline_mysql_file_vfprintf( +#ifdef HAVE_PSI_FILE_INTERFACE + const char *src_file, uint src_line, +#endif + MYSQL_FILE *file, const char *format, va_list args) +{ + int result; +#ifdef HAVE_PSI_FILE_INTERFACE + struct PSI_file_locker *locker; + PSI_file_locker_state state; + locker= PSI_FILE_CALL(get_thread_file_stream_locker) + (&state, file->m_psi, PSI_FILE_WRITE); + if (likely(locker != NULL)) + { + PSI_FILE_CALL(start_file_wait)(locker, (size_t) 0, src_file, src_line); + result= vfprintf(file->m_file, format, args); + PSI_FILE_CALL(end_file_wait)(locker, (size_t) result); + return result; + } +#endif + + result= vfprintf(file->m_file, format, args); + return result; +} + +static inline int +inline_mysql_file_fflush( +#ifdef HAVE_PSI_FILE_INTERFACE + const char *src_file, uint src_line, +#endif + MYSQL_FILE *file) +{ + int result; +#ifdef HAVE_PSI_FILE_INTERFACE + struct PSI_file_locker *locker; + PSI_file_locker_state state; + locker= PSI_FILE_CALL(get_thread_file_stream_locker) + (&state, file->m_psi, PSI_FILE_FLUSH); + if (likely(locker != NULL)) + { + PSI_FILE_CALL(start_file_wait)(locker, (size_t) 0, src_file, src_line); + result= fflush(file->m_file); + PSI_FILE_CALL(end_file_wait)(locker, (size_t) 0); + return result; + } +#endif + + result= fflush(file->m_file); + return result; +} + +static inline int inline_mysql_file_feof(MYSQL_FILE *file) +{ + /* Not instrumented, there is no wait involved */ + return feof(file->m_file); +} + +static inline int +inline_mysql_file_fstat( +#ifdef HAVE_PSI_FILE_INTERFACE + const char *src_file, uint src_line, +#endif + int filenr, MY_STAT *stat_area, myf flags) +{ + int result; +#ifdef HAVE_PSI_FILE_INTERFACE + struct PSI_file_locker *locker; + PSI_file_locker_state state; + locker= PSI_FILE_CALL(get_thread_file_descriptor_locker) + (&state, filenr, PSI_FILE_FSTAT); + if (likely(locker != NULL)) + { + PSI_FILE_CALL(start_file_wait)(locker, (size_t) 0, src_file, src_line); + result= my_fstat(filenr, stat_area, flags); + PSI_FILE_CALL(end_file_wait)(locker, (size_t) 0); + return result; + } +#endif + + result= my_fstat(filenr, stat_area, flags); + return result; +} + +static inline MY_STAT * +inline_mysql_file_stat( +#ifdef HAVE_PSI_FILE_INTERFACE + PSI_file_key key, const char *src_file, uint src_line, +#endif + const char *path, MY_STAT *stat_area, myf flags) +{ + MY_STAT *result; +#ifdef HAVE_PSI_FILE_INTERFACE + struct PSI_file_locker *locker; + PSI_file_locker_state state; + locker= PSI_FILE_CALL(get_thread_file_name_locker) + (&state, key, PSI_FILE_STAT, path, &locker); + if (likely(locker != NULL)) + { + PSI_FILE_CALL(start_file_open_wait)(locker, src_file, src_line); + result= my_stat(path, stat_area, flags); + PSI_FILE_CALL(end_file_open_wait)(locker, result); + return result; + } +#endif + + result= my_stat(path, stat_area, flags); + return result; +} + +static inline int +inline_mysql_file_chsize( +#ifdef HAVE_PSI_FILE_INTERFACE + const char *src_file, uint src_line, +#endif + File file, my_off_t newlength, int filler, myf flags) +{ + int result; +#ifdef HAVE_PSI_FILE_INTERFACE + struct PSI_file_locker *locker; + PSI_file_locker_state state; + locker= PSI_FILE_CALL(get_thread_file_descriptor_locker) + (&state, file, PSI_FILE_CHSIZE); + if (likely(locker != NULL)) + { + PSI_FILE_CALL(start_file_wait)(locker, (size_t) newlength, src_file, + src_line); + result= my_chsize(file, newlength, filler, flags); + PSI_FILE_CALL(end_file_wait)(locker, (size_t) newlength); + return result; + } +#endif + + result= my_chsize(file, newlength, filler, flags); + return result; +} + +static inline MYSQL_FILE* +inline_mysql_file_fopen( +#ifdef HAVE_PSI_FILE_INTERFACE + PSI_file_key key, const char *src_file, uint src_line, +#endif + const char *filename, int flags, myf myFlags) +{ + MYSQL_FILE *that; + that= (MYSQL_FILE*) my_malloc(sizeof(MYSQL_FILE), MYF(MY_WME)); + if (likely(that != NULL)) + { +#ifdef HAVE_PSI_FILE_INTERFACE + struct PSI_file_locker *locker; + PSI_file_locker_state state; + locker= PSI_FILE_CALL(get_thread_file_name_locker) + (&state, key, PSI_FILE_STREAM_OPEN, filename, that); + if (likely(locker != NULL)) + { + PSI_FILE_CALL(start_file_open_wait) + (locker, src_file, src_line); + that->m_file= my_fopen(filename, flags, myFlags); + that->m_psi= PSI_FILE_CALL(end_file_open_wait)(locker, that->m_file); + if (unlikely(that->m_file == NULL)) + { + my_free(that); + return NULL; + } + return that; + } +#endif + + that->m_psi= NULL; + that->m_file= my_fopen(filename, flags, myFlags); + if (unlikely(that->m_file == NULL)) + { + my_free(that); + return NULL; + } + } + return that; +} + +static inline int +inline_mysql_file_fclose( +#ifdef HAVE_PSI_FILE_INTERFACE + const char *src_file, uint src_line, +#endif + MYSQL_FILE *file, myf flags) +{ + int result= 0; + if (likely(file != NULL)) + { +#ifdef HAVE_PSI_FILE_INTERFACE + struct PSI_file_locker *locker; + PSI_file_locker_state state; + locker= PSI_FILE_CALL(get_thread_file_stream_locker) + (&state, file->m_psi, PSI_FILE_STREAM_CLOSE); + if (likely(locker != NULL)) + { + PSI_FILE_CALL(start_file_close_wait)(locker, src_file, src_line); + result= my_fclose(file->m_file, flags); + PSI_FILE_CALL(end_file_close_wait)(locker, result); + my_free(file); + return result; + } +#endif + + result= my_fclose(file->m_file, flags); + my_free(file); + } + return result; +} + +static inline size_t +inline_mysql_file_fread( +#ifdef HAVE_PSI_FILE_INTERFACE + const char *src_file, uint src_line, +#endif + MYSQL_FILE *file, uchar *buffer, size_t count, myf flags) +{ + size_t result; +#ifdef HAVE_PSI_FILE_INTERFACE + struct PSI_file_locker *locker; + PSI_file_locker_state state; + size_t bytes_read; + locker= PSI_FILE_CALL(get_thread_file_stream_locker) + (&state, file->m_psi, PSI_FILE_READ); + if (likely(locker != NULL)) + { + PSI_FILE_CALL(start_file_wait)(locker, count, src_file, src_line); + result= my_fread(file->m_file, buffer, count, flags); + if (flags & (MY_NABP | MY_FNABP)) + bytes_read= (result == 0) ? count : 0; + else + bytes_read= (result != MY_FILE_ERROR) ? result : 0; + PSI_FILE_CALL(end_file_wait)(locker, bytes_read); + return result; + } +#endif + + result= my_fread(file->m_file, buffer, count, flags); + return result; +} + +static inline size_t +inline_mysql_file_fwrite( +#ifdef HAVE_PSI_FILE_INTERFACE + const char *src_file, uint src_line, +#endif + MYSQL_FILE *file, const uchar *buffer, size_t count, myf flags) +{ + size_t result; +#ifdef HAVE_PSI_FILE_INTERFACE + struct PSI_file_locker *locker; + PSI_file_locker_state state; + size_t bytes_written; + locker= PSI_FILE_CALL(get_thread_file_stream_locker) + (&state, file->m_psi, PSI_FILE_WRITE); + if (likely(locker != NULL)) + { + PSI_FILE_CALL(start_file_wait)(locker, count, src_file, src_line); + result= my_fwrite(file->m_file, buffer, count, flags); + if (flags & (MY_NABP | MY_FNABP)) + bytes_written= (result == 0) ? count : 0; + else + bytes_written= (result != MY_FILE_ERROR) ? result : 0; + PSI_FILE_CALL(end_file_wait)(locker, bytes_written); + return result; + } +#endif + + result= my_fwrite(file->m_file, buffer, count, flags); + return result; +} + +static inline my_off_t +inline_mysql_file_fseek( +#ifdef HAVE_PSI_FILE_INTERFACE + const char *src_file, uint src_line, +#endif + MYSQL_FILE *file, my_off_t pos, int whence, myf flags) +{ + my_off_t result; +#ifdef HAVE_PSI_FILE_INTERFACE + struct PSI_file_locker *locker; + PSI_file_locker_state state; + locker= PSI_FILE_CALL(get_thread_file_stream_locker) + (&state, file->m_psi, PSI_FILE_SEEK); + if (likely(locker != NULL)) + { + PSI_FILE_CALL(start_file_wait)(locker, (size_t) 0, src_file, src_line); + result= my_fseek(file->m_file, pos, whence, flags); + PSI_FILE_CALL(end_file_wait)(locker, (size_t) 0); + return result; + } +#endif + + result= my_fseek(file->m_file, pos, whence, flags); + return result; +} + +static inline my_off_t +inline_mysql_file_ftell( +#ifdef HAVE_PSI_FILE_INTERFACE + const char *src_file, uint src_line, +#endif + MYSQL_FILE *file, myf flags) +{ + my_off_t result; +#ifdef HAVE_PSI_FILE_INTERFACE + struct PSI_file_locker *locker; + PSI_file_locker_state state; + locker= PSI_FILE_CALL(get_thread_file_stream_locker) + (&state, file->m_psi, PSI_FILE_TELL); + if (likely(locker != NULL)) + { + PSI_FILE_CALL(start_file_wait)(locker, (size_t) 0, src_file, src_line); + result= my_ftell(file->m_file, flags); + PSI_FILE_CALL(end_file_wait)(locker, (size_t) 0); + return result; + } +#endif + + result= my_ftell(file->m_file, flags); + return result; +} + +static inline File +inline_mysql_file_create( +#ifdef HAVE_PSI_FILE_INTERFACE + PSI_file_key key, const char *src_file, uint src_line, +#endif + const char *filename, int create_flags, int access_flags, myf myFlags) +{ + File file; +#ifdef HAVE_PSI_FILE_INTERFACE + struct PSI_file_locker *locker; + PSI_file_locker_state state; + locker= PSI_FILE_CALL(get_thread_file_name_locker) + (&state, key, PSI_FILE_CREATE, filename, &locker); + if (likely(locker != NULL)) + { + PSI_FILE_CALL(start_file_open_wait)(locker, src_file, src_line); + file= my_create(filename, create_flags, access_flags, myFlags); + PSI_FILE_CALL(end_file_open_wait_and_bind_to_descriptor)(locker, file); + return file; + } +#endif + + file= my_create(filename, create_flags, access_flags, myFlags); + return file; +} + +static inline File +inline_mysql_file_create_temp( +#ifdef HAVE_PSI_FILE_INTERFACE + PSI_file_key key, +#endif + char *to, const char *dir, const char *pfx, int mode, myf myFlags) +{ + File file; + /* + TODO: This event is instrumented, but not timed. + The problem is that the file name is now known + before the create_temp_file call. + */ + file= create_temp_file(to, dir, pfx, mode, myFlags); +#ifdef HAVE_PSI_FILE_INTERFACE + PSI_FILE_CALL(create_file)(key, to, file); +#endif + return file; +} + +static inline File +inline_mysql_file_open( +#ifdef HAVE_PSI_FILE_INTERFACE + PSI_file_key key, const char *src_file, uint src_line, +#endif + const char *filename, int flags, myf myFlags) +{ + File file; +#ifdef HAVE_PSI_FILE_INTERFACE + struct PSI_file_locker *locker; + PSI_file_locker_state state; + locker= PSI_FILE_CALL(get_thread_file_name_locker) + (&state, key, PSI_FILE_OPEN, filename, &locker); + if (likely(locker != NULL)) + { + PSI_FILE_CALL(start_file_open_wait)(locker, src_file, src_line); + file= my_open(filename, flags, myFlags); + PSI_FILE_CALL(end_file_open_wait_and_bind_to_descriptor)(locker, file); + return file; + } +#endif + + file= my_open(filename, flags, myFlags); + return file; +} + +static inline int +inline_mysql_file_close( +#ifdef HAVE_PSI_FILE_INTERFACE + const char *src_file, uint src_line, +#endif + File file, myf flags) +{ + int result; +#ifdef HAVE_PSI_FILE_INTERFACE + struct PSI_file_locker *locker; + PSI_file_locker_state state; + locker= PSI_FILE_CALL(get_thread_file_descriptor_locker) + (&state, file, PSI_FILE_CLOSE); + if (likely(locker != NULL)) + { + PSI_FILE_CALL(start_file_close_wait)(locker, src_file, src_line); + result= my_close(file, flags); + PSI_FILE_CALL(end_file_close_wait)(locker, result); + return result; + } +#endif + + result= my_close(file, flags); + return result; +} + +static inline size_t +inline_mysql_file_read( +#ifdef HAVE_PSI_FILE_INTERFACE + const char *src_file, uint src_line, +#endif + File file, uchar *buffer, size_t count, myf flags) +{ + size_t result; +#ifdef HAVE_PSI_FILE_INTERFACE + struct PSI_file_locker *locker; + PSI_file_locker_state state; + size_t bytes_read; + locker= PSI_FILE_CALL(get_thread_file_descriptor_locker) + (&state, file, PSI_FILE_READ); + if (likely(locker != NULL)) + { + PSI_FILE_CALL(start_file_wait)(locker, count, src_file, src_line); + result= my_read(file, buffer, count, flags); + if (flags & (MY_NABP | MY_FNABP)) + bytes_read= (result == 0) ? count : 0; + else + bytes_read= (result != MY_FILE_ERROR) ? result : 0; + PSI_FILE_CALL(end_file_wait)(locker, bytes_read); + return result; + } +#endif + + result= my_read(file, buffer, count, flags); + return result; +} + +static inline size_t +inline_mysql_file_write( +#ifdef HAVE_PSI_FILE_INTERFACE + const char *src_file, uint src_line, +#endif + File file, const uchar *buffer, size_t count, myf flags) +{ + size_t result; +#ifdef HAVE_PSI_FILE_INTERFACE + struct PSI_file_locker *locker; + PSI_file_locker_state state; + size_t bytes_written; + locker= PSI_FILE_CALL(get_thread_file_descriptor_locker) + (&state, file, PSI_FILE_WRITE); + if (likely(locker != NULL)) + { + PSI_FILE_CALL(start_file_wait)(locker, count, src_file, src_line); + result= my_write(file, buffer, count, flags); + if (flags & (MY_NABP | MY_FNABP)) + bytes_written= (result == 0) ? count : 0; + else + bytes_written= (result != MY_FILE_ERROR) ? result : 0; + PSI_FILE_CALL(end_file_wait)(locker, bytes_written); + return result; + } +#endif + + result= my_write(file, buffer, count, flags); + return result; +} + +static inline size_t +inline_mysql_file_pread( +#ifdef HAVE_PSI_FILE_INTERFACE + const char *src_file, uint src_line, +#endif + File file, uchar *buffer, size_t count, my_off_t offset, myf flags) +{ + size_t result; +#ifdef HAVE_PSI_FILE_INTERFACE + struct PSI_file_locker *locker; + PSI_file_locker_state state; + size_t bytes_read; + locker= PSI_FILE_CALL(get_thread_file_descriptor_locker) + (&state, file, PSI_FILE_READ); + if (likely(locker != NULL)) + { + PSI_FILE_CALL(start_file_wait)(locker, count, src_file, src_line); + result= my_pread(file, buffer, count, offset, flags); + if (flags & (MY_NABP | MY_FNABP)) + bytes_read= (result == 0) ? count : 0; + else + bytes_read= (result != MY_FILE_ERROR) ? result : 0; + PSI_FILE_CALL(end_file_wait)(locker, bytes_read); + return result; + } +#endif + + result= my_pread(file, buffer, count, offset, flags); + return result; +} + +static inline size_t +inline_mysql_file_pwrite( +#ifdef HAVE_PSI_FILE_INTERFACE + const char *src_file, uint src_line, +#endif + File file, const uchar *buffer, size_t count, my_off_t offset, myf flags) +{ + size_t result; +#ifdef HAVE_PSI_FILE_INTERFACE + struct PSI_file_locker *locker; + PSI_file_locker_state state; + size_t bytes_written; + locker= PSI_FILE_CALL(get_thread_file_descriptor_locker) + (&state, file, PSI_FILE_WRITE); + if (likely(locker != NULL)) + { + PSI_FILE_CALL(start_file_wait)(locker, count, src_file, src_line); + result= my_pwrite(file, buffer, count, offset, flags); + if (flags & (MY_NABP | MY_FNABP)) + bytes_written= (result == 0) ? count : 0; + else + bytes_written= (result != MY_FILE_ERROR) ? result : 0; + PSI_FILE_CALL(end_file_wait)(locker, bytes_written); + return result; + } +#endif + + result= my_pwrite(file, buffer, count, offset, flags); + return result; +} + +static inline my_off_t +inline_mysql_file_seek( +#ifdef HAVE_PSI_FILE_INTERFACE + const char *src_file, uint src_line, +#endif + File file, my_off_t pos, int whence, myf flags) +{ + my_off_t result; +#ifdef HAVE_PSI_FILE_INTERFACE + struct PSI_file_locker *locker; + PSI_file_locker_state state; + locker= PSI_FILE_CALL(get_thread_file_descriptor_locker) + (&state, file, PSI_FILE_SEEK); + if (likely(locker != NULL)) + { + PSI_FILE_CALL(start_file_wait)(locker, (size_t) 0, src_file, src_line); + result= my_seek(file, pos, whence, flags); + PSI_FILE_CALL(end_file_wait)(locker, (size_t) 0); + return result; + } +#endif + + result= my_seek(file, pos, whence, flags); + return result; +} + +static inline my_off_t +inline_mysql_file_tell( +#ifdef HAVE_PSI_FILE_INTERFACE + const char *src_file, uint src_line, +#endif + File file, myf flags) +{ + my_off_t result; +#ifdef HAVE_PSI_FILE_INTERFACE + struct PSI_file_locker *locker; + PSI_file_locker_state state; + locker= PSI_FILE_CALL(get_thread_file_descriptor_locker) + (&state, file, PSI_FILE_TELL); + if (likely(locker != NULL)) + { + PSI_FILE_CALL(start_file_wait)(locker, (size_t) 0, src_file, src_line); + result= my_tell(file, flags); + PSI_FILE_CALL(end_file_wait)(locker, (size_t) 0); + return result; + } +#endif + + result= my_tell(file, flags); + return result; +} + +static inline int +inline_mysql_file_delete( +#ifdef HAVE_PSI_FILE_INTERFACE + PSI_file_key key, const char *src_file, uint src_line, +#endif + const char *name, myf flags) +{ + int result; +#ifdef HAVE_PSI_FILE_INTERFACE + struct PSI_file_locker *locker; + PSI_file_locker_state state; + locker= PSI_FILE_CALL(get_thread_file_name_locker) + (&state, key, PSI_FILE_DELETE, name, &locker); + if (likely(locker != NULL)) + { + PSI_FILE_CALL(start_file_close_wait)(locker, src_file, src_line); + result= my_delete(name, flags); + PSI_FILE_CALL(end_file_close_wait)(locker, result); + return result; + } +#endif + + result= my_delete(name, flags); + return result; +} + +static inline int +inline_mysql_file_rename( +#ifdef HAVE_PSI_FILE_INTERFACE + PSI_file_key key, const char *src_file, uint src_line, +#endif + const char *from, const char *to, myf flags) +{ + int result; +#ifdef HAVE_PSI_FILE_INTERFACE + struct PSI_file_locker *locker; + PSI_file_locker_state state; + locker= PSI_FILE_CALL(get_thread_file_name_locker) + (&state, key, PSI_FILE_RENAME, to, &locker); + if (likely(locker != NULL)) + { + PSI_FILE_CALL(start_file_wait)(locker, (size_t) 0, src_file, src_line); + result= my_rename(from, to, flags); + PSI_FILE_CALL(end_file_wait)(locker, (size_t) 0); + return result; + } +#endif + + result= my_rename(from, to, flags); + return result; +} + +static inline File +inline_mysql_file_create_with_symlink( +#ifdef HAVE_PSI_FILE_INTERFACE + PSI_file_key key, const char *src_file, uint src_line, +#endif + const char *linkname, const char *filename, int create_flags, + int access_flags, myf flags) +{ + File file; +#ifdef HAVE_PSI_FILE_INTERFACE + struct PSI_file_locker *locker; + PSI_file_locker_state state; + locker= PSI_FILE_CALL(get_thread_file_name_locker) + (&state, key, PSI_FILE_CREATE, filename, &locker); + if (likely(locker != NULL)) + { + PSI_FILE_CALL(start_file_open_wait)(locker, src_file, src_line); + file= my_create_with_symlink(linkname, filename, create_flags, access_flags, + flags); + PSI_FILE_CALL(end_file_open_wait_and_bind_to_descriptor)(locker, file); + return file; + } +#endif + + file= my_create_with_symlink(linkname, filename, create_flags, access_flags, + flags); + return file; +} + +static inline int +inline_mysql_file_delete_with_symlink( +#ifdef HAVE_PSI_FILE_INTERFACE + PSI_file_key key, const char *src_file, uint src_line, +#endif + const char *name, myf flags) +{ + int result; +#ifdef HAVE_PSI_FILE_INTERFACE + struct PSI_file_locker *locker; + PSI_file_locker_state state; + locker= PSI_FILE_CALL(get_thread_file_name_locker) + (&state, key, PSI_FILE_DELETE, name, &locker); + if (likely(locker != NULL)) + { + PSI_FILE_CALL(start_file_close_wait)(locker, src_file, src_line); + result= my_delete_with_symlink(name, flags); + PSI_FILE_CALL(end_file_close_wait)(locker, result); + return result; + } +#endif + + result= my_delete_with_symlink(name, flags); + return result; +} + +static inline int +inline_mysql_file_rename_with_symlink( +#ifdef HAVE_PSI_FILE_INTERFACE + PSI_file_key key, const char *src_file, uint src_line, +#endif + const char *from, const char *to, myf flags) +{ + int result; +#ifdef HAVE_PSI_FILE_INTERFACE + struct PSI_file_locker *locker; + PSI_file_locker_state state; + locker= PSI_FILE_CALL(get_thread_file_name_locker) + (&state, key, PSI_FILE_RENAME, to, &locker); + if (likely(locker != NULL)) + { + PSI_FILE_CALL(start_file_wait)(locker, (size_t) 0, src_file, src_line); + result= my_rename_with_symlink(from, to, flags); + PSI_FILE_CALL(end_file_wait)(locker, (size_t) 0); + return result; + } +#endif + + result= my_rename_with_symlink(from, to, flags); + return result; +} + +static inline int +inline_mysql_file_sync( +#ifdef HAVE_PSI_FILE_INTERFACE + const char *src_file, uint src_line, +#endif + File fd, myf flags) +{ + int result= 0; +#ifdef HAVE_PSI_FILE_INTERFACE + struct PSI_file_locker *locker; + PSI_file_locker_state state; + locker= PSI_FILE_CALL(get_thread_file_descriptor_locker) + (&state, fd, PSI_FILE_SYNC); + if (likely(locker != NULL)) + { + PSI_FILE_CALL(start_file_wait)(locker, (size_t) 0, src_file, src_line); + result= my_sync(fd, flags); + PSI_FILE_CALL(end_file_wait)(locker, (size_t) 0); + return result; + } +#endif + + result= my_sync(fd, flags); + return result; +} + +/** @} (end of group File_instrumentation) */ + +#endif + diff --git a/EQ2/source/depends/mariadb-10.1.19/include/mysql/psi/mysql_idle.h b/EQ2/source/depends/mariadb-10.1.19/include/mysql/psi/mysql_idle.h new file mode 100644 index 000000000..5c72b715b --- /dev/null +++ b/EQ2/source/depends/mariadb-10.1.19/include/mysql/psi/mysql_idle.h @@ -0,0 +1,92 @@ +/* Copyright (c) 2011, 2012, Oracle and/or its affiliates. All rights reserved. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; version 2 of the License. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software Foundation, + 51 Franklin Street, Suite 500, Boston, MA 02110-1335 USA */ + +#ifndef MYSQL_IDLE_H +#define MYSQL_IDLE_H + +/** + @file mysql/psi/mysql_idle.h + Instrumentation helpers for idle waits. +*/ + +#include "mysql/psi/psi.h" + +/** + @defgroup Idle_instrumentation Idle Instrumentation + @ingroup Instrumentation_interface + @{ +*/ + +/** + @def MYSQL_START_IDLE_WAIT + Instrumentation helper for table io_waits. + This instrumentation marks the start of a wait event. + @param LOCKER the locker + @param STATE the locker state + @sa MYSQL_END_IDLE_WAIT. +*/ +#ifdef HAVE_PSI_IDLE_INTERFACE + #define MYSQL_START_IDLE_WAIT(LOCKER, STATE) \ + LOCKER= inline_mysql_start_idle_wait(STATE, __FILE__, __LINE__) +#else + #define MYSQL_START_IDLE_WAIT(LOCKER, STATE) \ + do {} while (0) +#endif + +/** + @def MYSQL_END_IDLE_WAIT + Instrumentation helper for idle waits. + This instrumentation marks the end of a wait event. + @param LOCKER the locker + @sa MYSQL_START_IDLE_WAIT. +*/ +#ifdef HAVE_PSI_IDLE_INTERFACE + #define MYSQL_END_IDLE_WAIT(LOCKER) \ + inline_mysql_end_idle_wait(LOCKER) +#else + #define MYSQL_END_IDLE_WAIT(LOCKER) \ + do {} while (0) +#endif + +#ifdef HAVE_PSI_IDLE_INTERFACE +/** + Instrumentation calls for MYSQL_START_IDLE_WAIT. + @sa MYSQL_END_IDLE_WAIT. +*/ +static inline struct PSI_idle_locker * +inline_mysql_start_idle_wait(PSI_idle_locker_state *state, + const char *src_file, int src_line) +{ + struct PSI_idle_locker *locker; + locker= PSI_IDLE_CALL(start_idle_wait)(state, src_file, src_line); + return locker; +} + +/** + Instrumentation calls for MYSQL_END_IDLE_WAIT. + @sa MYSQL_START_IDLE_WAIT. +*/ +static inline void +inline_mysql_end_idle_wait(struct PSI_idle_locker *locker) +{ + if (likely(locker != NULL)) + PSI_IDLE_CALL(end_idle_wait)(locker); +} +#endif + +/** @} (end of group Idle_instrumentation) */ + +#endif + diff --git a/EQ2/source/depends/mariadb-10.1.19/include/mysql/psi/mysql_socket.h b/EQ2/source/depends/mariadb-10.1.19/include/mysql/psi/mysql_socket.h new file mode 100644 index 000000000..1dbe8c7eb --- /dev/null +++ b/EQ2/source/depends/mariadb-10.1.19/include/mysql/psi/mysql_socket.h @@ -0,0 +1,1189 @@ +/* Copyright (c) 2010, 2012, Oracle and/or its affiliates. All rights reserved. + +This program is free software; you can redistribute it and/or +modify it under the terms of the GNU General Public License as +published by the Free Software Foundation; version 2 of the +License. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program; if not, write to the Free Software +Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA +02110-1301 USA +*/ + +#ifndef MYSQL_SOCKET_H +#define MYSQL_SOCKET_H + +/* For strlen() */ +#include +/* For MY_STAT */ +#include +/* For my_chsize */ +#include +/* For socket api */ +#ifdef __WIN__ + #include + #include + #include + #define SOCKBUF_T char +#else + #include + #define SOCKBUF_T void +#endif +/** + @file mysql/psi/mysql_socket.h +[...] +*/ + +#include "mysql/psi/psi.h" + +/** + @defgroup Socket_instrumentation Socket Instrumentation + @ingroup Instrumentation_interface + @{ +*/ + +/** + @def mysql_socket_register(P1, P2, P3) + Socket registration. +*/ +#ifdef HAVE_PSI_SOCKET_INTERFACE + #define mysql_socket_register(P1, P2, P3) \ + inline_mysql_socket_register(P1, P2, P3) +#else + #define mysql_socket_register(P1, P2, P3) \ + do {} while (0) +#endif + +struct st_mysql_socket +{ + /** The real socket descriptor. */ + my_socket fd; + + /** + The instrumentation hook. + Note that this hook is not conditionally defined, + for binary compatibility of the @c MYSQL_SOCKET interface. + */ + struct PSI_socket *m_psi; +}; + +/** + An instrumented socket. + @c MYSQL_SOCKET is a replacement for @c my_socket. +*/ +typedef struct st_mysql_socket MYSQL_SOCKET; + + +/** + @def MYSQL_INVALID_SOCKET + MYSQL_SOCKET initial value. +*/ +//MYSQL_SOCKET MYSQL_INVALID_SOCKET= {INVALID_SOCKET, NULL}; +#define MYSQL_INVALID_SOCKET mysql_socket_invalid() + +/** + MYSQL_SOCKET helper. Initialize instrumented socket. + @sa mysql_socket_getfd + @sa mysql_socket_setfd +*/ +static inline MYSQL_SOCKET +mysql_socket_invalid() +{ + MYSQL_SOCKET mysql_socket= {INVALID_SOCKET, NULL}; + return mysql_socket; +} + +/** + Set socket descriptor and address. + @param socket nstrumented socket + @param fd socket descriptor + @param addr unformatted socket address + @param adr_len length of socket addres +*/ + +static inline void +mysql_socket_set_address( +#ifdef HAVE_PSI_SOCKET_INTERFACE + MYSQL_SOCKET socket, + const struct sockaddr *addr, + socklen_t addr_len +#else + MYSQL_SOCKET socket __attribute__ ((unused)), + const struct sockaddr *addr __attribute__ ((unused)), + socklen_t addr_len __attribute__ ((unused)) +#endif +) +{ +#ifdef HAVE_PSI_SOCKET_INTERFACE + if (socket.m_psi != NULL) + PSI_SOCKET_CALL(set_socket_info)(socket.m_psi, NULL, addr, addr_len); +#endif +} + +/** + Set socket descriptor and address. + @param socket instrumented socket + @param thread instrumented owning thread +*/ +static inline void +mysql_socket_set_thread_owner( +#ifdef HAVE_PSI_SOCKET_INTERFACE +MYSQL_SOCKET socket +#else +MYSQL_SOCKET socket __attribute__ ((unused)) +#endif +) +{ +#ifdef HAVE_PSI_SOCKET_INTERFACE + if (socket.m_psi != NULL) + PSI_SOCKET_CALL(set_socket_thread_owner)(socket.m_psi); +#endif +} + +/** + MYSQL_SOCKET helper. Get socket descriptor. + @param mysql_socket Instrumented socket + @sa mysql_socket_getfd +*/ +static inline my_socket +mysql_socket_getfd(MYSQL_SOCKET mysql_socket) +{ + return mysql_socket.fd; +} + +/** + MYSQL_SOCKET helper. Set socket descriptor. + @param mysql_socket Instrumented socket + @param fd Socket descriptor + @sa mysql_socket_setfd +*/ +static inline void +mysql_socket_setfd(MYSQL_SOCKET *mysql_socket, my_socket fd) +{ + if (likely(mysql_socket != NULL)) + mysql_socket->fd= fd; +} + +/** + @def MYSQL_SOCKET_WAIT_VARIABLES + Instrumentation helper for socket waits. + This instrumentation declares local variables. + Do not use a ';' after this macro + @param LOCKER locker + @param STATE locker state + @sa MYSQL_START_SOCKET_WAIT. + @sa MYSQL_END_SOCKET_WAIT. +*/ +#ifdef HAVE_PSI_SOCKET_INTERFACE + #define MYSQL_SOCKET_WAIT_VARIABLES(LOCKER, STATE) \ + struct PSI_socket_locker* LOCKER; \ + PSI_socket_locker_state STATE; +#else + #define MYSQL_SOCKET_WAIT_VARIABLES(LOCKER, STATE) +#endif + +/** + @def MYSQL_START_SOCKET_WAIT + Instrumentation helper for socket waits. + This instrumentation marks the start of a wait event. + @param LOCKER locker + @param STATE locker state + @param SOCKET instrumented socket + @param OP The socket operation to be performed + @param FLAGS per-socket operation flags. + @param COUNT bytes to be written/read + @sa MYSQL_END_SOCKET_WAIT. +*/ +#ifdef HAVE_PSI_SOCKET_INTERFACE + #define MYSQL_START_SOCKET_WAIT(LOCKER, STATE, SOCKET, OP, COUNT) \ + LOCKER= inline_mysql_start_socket_wait(STATE, SOCKET, OP, COUNT,\ + __FILE__, __LINE__) +#else + #define MYSQL_START_SOCKET_WAIT(LOCKER, STATE, SOCKET, OP, COUNT) \ + do {} while (0) +#endif + +/** + @def MYSQL_END_SOCKET_WAIT + Instrumentation helper for socket waits. + This instrumentation marks the end of a wait event. + @param LOCKER locker + @param COUNT actual bytes written/read, or -1 + @sa MYSQL_START_SOCKET_WAIT. +*/ +#ifdef HAVE_PSI_SOCKET_INTERFACE + #define MYSQL_END_SOCKET_WAIT(LOCKER, COUNT) \ + inline_mysql_end_socket_wait(LOCKER, COUNT) +#else + #define MYSQL_END_SOCKET_WAIT(LOCKER, COUNT) \ + do {} while (0) +#endif + +#ifdef HAVE_PSI_SOCKET_INTERFACE + #define MYSQL_SOCKET_SET_STATE(SOCKET, STATE) \ + inline_mysql_socket_set_state(SOCKET, STATE) +#else + #define MYSQL_SOCKET_SET_STATE(SOCKET, STATE) \ + do {} while (0) +#endif + +#ifdef HAVE_PSI_SOCKET_INTERFACE +/** + Instrumentation calls for MYSQL_START_SOCKET_WAIT. + @sa MYSQL_START_SOCKET_WAIT. +*/ +static inline struct PSI_socket_locker* +inline_mysql_start_socket_wait(PSI_socket_locker_state *state, + MYSQL_SOCKET mysql_socket, + enum PSI_socket_operation op, + size_t byte_count, + const char *src_file, int src_line) +{ + struct PSI_socket_locker *locker; + if (mysql_socket.m_psi != NULL) + { + locker= PSI_SOCKET_CALL(start_socket_wait) + (state, mysql_socket.m_psi, op, byte_count, src_file, src_line); + } + else + locker= NULL; + return locker; +} + +/** + Instrumentation calls for MYSQL_END_SOCKET_WAIT. + @sa MYSQL_END_SOCKET_WAIT. +*/ +static inline void +inline_mysql_end_socket_wait(struct PSI_socket_locker *locker, size_t byte_count) +{ + if (locker != NULL) + PSI_SOCKET_CALL(end_socket_wait)(locker, byte_count); +} + +/** + Set the state (IDLE, ACTIVE) of an instrumented socket. + @param socket the instrumented socket + @param state the new state + @sa PSI_socket_state +*/ +static inline void +inline_mysql_socket_set_state(MYSQL_SOCKET socket, enum PSI_socket_state state) +{ + if (socket.m_psi != NULL) + PSI_SOCKET_CALL(set_socket_state)(socket.m_psi, state); +} +#endif /* HAVE_PSI_SOCKET_INTERFACE */ + +/** + @def mysql_socket_socket(K, D, T, P) + Create a socket. + @c mysql_socket_socket is a replacement for @c socket. + @param K PSI_socket_key for this instrumented socket + @param D Socket domain + @param T Protocol type + @param P Transport protocol +*/ + +#ifdef HAVE_PSI_SOCKET_INTERFACE + #define mysql_socket_socket(K, D, T, P) \ + inline_mysql_socket_socket(K, D, T, P) +#else + #define mysql_socket_socket(K, D, T, P) \ + inline_mysql_socket_socket(D, T, P) +#endif + +/** + @def mysql_socket_bind(FD, AP, L) + Bind a socket to a local port number and IP address + @c mysql_socket_bind is a replacement for @c bind. + @param FD Instrumented socket descriptor returned by socket() + @param AP Pointer to local port number and IP address in sockaddr structure + @param L Length of sockaddr structure +*/ +#ifdef HAVE_PSI_SOCKET_INTERFACE + #define mysql_socket_bind(FD, AP, L) \ + inline_mysql_socket_bind(__FILE__, __LINE__, FD, AP, L) +#else + #define mysql_socket_bind(FD, AP, L) \ + inline_mysql_socket_bind(FD, AP, L) +#endif + +/** + @def mysql_socket_getsockname(FD, AP, LP) + Return port number and IP address of the local host + @c mysql_socket_getsockname is a replacement for @c getsockname. + @param FD Instrumented socket descriptor returned by socket() + @param A Pointer to returned address of local host in sockaddr structure + @param L Pointer to length of sockaddr structure +*/ +#ifdef HAVE_PSI_SOCKET_INTERFACE + #define mysql_socket_getsockname(FD, AP, LP) \ + inline_mysql_socket_getsockname(__FILE__, __LINE__, FD, AP, LP) +#else + #define mysql_socket_getsockname(FD, AP, LP) \ + inline_mysql_socket_getsockname(FD, AP, LP) +#endif + +/** + @def mysql_socket_connect(FD, AP, L) + Establish a connection to a remote host. + @c mysql_socket_connect is a replacement for @c connect. + @param FD Instrumented socket descriptor returned by socket() + @param AP Pointer to target address in sockaddr structure + @param L Length of sockaddr structure +*/ +#ifdef HAVE_PSI_SOCKET_INTERFACE + #define mysql_socket_connect(FD, AP, L) \ + inline_mysql_socket_connect(__FILE__, __LINE__, FD, AP, L) +#else + #define mysql_socket_connect(FD, AP, L) \ + inline_mysql_socket_connect(FD, AP, L) +#endif + +/** + @def mysql_socket_getpeername(FD, AP, LP) + Get port number and IP address of remote host that a socket is connected to. + @c mysql_socket_getpeername is a replacement for @c getpeername. + @param FD Instrumented socket descriptor returned by socket() or accept() + @param AP Pointer to returned address of remote host in sockaddr structure + @param LP Pointer to length of sockaddr structure +*/ +#ifdef HAVE_PSI_SOCKET_INTERFACE + #define mysql_socket_getpeername(FD, AP, LP) \ + inline_mysql_socket_getpeername(__FILE__, __LINE__, FD, AP, LP) +#else + #define mysql_socket_getpeername(FD, AP, LP) \ + inline_mysql_socket_getpeername(FD, AP, LP) +#endif + +/** + @def mysql_socket_send(FD, B, N, FL) + Send data from the buffer, B, to a connected socket. + @c mysql_socket_send is a replacement for @c send. + @param FD Instrumented socket descriptor returned by socket() or accept() + @param B Buffer to send + @param N Number of bytes to send + @param FL Control flags +*/ +#ifdef HAVE_PSI_SOCKET_INTERFACE + #define mysql_socket_send(FD, B, N, FL) \ + inline_mysql_socket_send(__FILE__, __LINE__, FD, B, N, FL) +#else + #define mysql_socket_send(FD, B, N, FL) \ + inline_mysql_socket_send(FD, B, N, FL) +#endif + +/** + @def mysql_socket_recv(FD, B, N, FL) + Receive data from a connected socket. + @c mysql_socket_recv is a replacement for @c recv. + @param FD Instrumented socket descriptor returned by socket() or accept() + @param B Buffer to receive to + @param N Maximum bytes to receive + @param FL Control flags +*/ +#ifdef HAVE_PSI_SOCKET_INTERFACE + #define mysql_socket_recv(FD, B, N, FL) \ + inline_mysql_socket_recv(__FILE__, __LINE__, FD, B, N, FL) +#else + #define mysql_socket_recv(FD, B, N, FL) \ + inline_mysql_socket_recv(FD, B, N, FL) +#endif + +/** + @def mysql_socket_sendto(FD, B, N, FL, AP, L) + Send data to a socket at the specified address. + @c mysql_socket_sendto is a replacement for @c sendto. + @param FD Instrumented socket descriptor returned by socket() + @param B Buffer to send + @param N Number of bytes to send + @param FL Control flags + @param AP Pointer to destination sockaddr structure + @param L Size of sockaddr structure +*/ +#ifdef HAVE_PSI_SOCKET_INTERFACE + #define mysql_socket_sendto(FD, B, N, FL, AP, L) \ + inline_mysql_socket_sendto(__FILE__, __LINE__, FD, B, N, FL, AP, L) +#else + #define mysql_socket_sendto(FD, B, N, FL, AP, L) \ + inline_mysql_socket_sendto(FD, B, N, FL, AP, L) +#endif + +/** + @def mysql_socket_recvfrom(FD, B, N, FL, AP, L) + Receive data from a socket and return source address information + @c mysql_socket_recvfrom is a replacement for @c recvfrom. + @param FD Instrumented socket descriptor returned by socket() + @param B Buffer to receive to + @param N Maximum bytes to receive + @param FL Control flags + @param AP Pointer to source address in sockaddr_storage structure + @param L Size of sockaddr_storage structure +*/ +#ifdef HAVE_PSI_SOCKET_INTERFACE + #define mysql_socket_recvfrom(FD, B, N, FL, AP, LP) \ + inline_mysql_socket_recvfrom(__FILE__, __LINE__, FD, B, N, FL, AP, LP) +#else + #define mysql_socket_recvfrom(FD, B, N, FL, AP, LP) \ + inline_mysql_socket_recvfrom(FD, B, N, FL, AP, LP) +#endif + +/** + @def mysql_socket_getsockopt(FD, LV, ON, OP, OL) + Get a socket option for the specified socket. + @c mysql_socket_getsockopt is a replacement for @c getsockopt. + @param FD Instrumented socket descriptor returned by socket() + @param LV Protocol level + @param ON Option to query + @param OP Buffer which will contain the value for the requested option + @param OL Pointer to length of OP +*/ +#ifdef HAVE_PSI_SOCKET_INTERFACE + #define mysql_socket_getsockopt(FD, LV, ON, OP, OL) \ + inline_mysql_socket_getsockopt(__FILE__, __LINE__, FD, LV, ON, OP, OL) +#else + #define mysql_socket_getsockopt(FD, LV, ON, OP, OL) \ + inline_mysql_socket_getsockopt(FD, LV, ON, OP, OL) +#endif + +/** + @def mysql_socket_setsockopt(FD, LV, ON, OP, OL) + Set a socket option for the specified socket. + @c mysql_socket_setsockopt is a replacement for @c setsockopt. + @param FD Instrumented socket descriptor returned by socket() + @param LV Protocol level + @param ON Option to modify + @param OP Buffer containing the value for the specified option + @param OL Pointer to length of OP +*/ +#ifdef HAVE_PSI_SOCKET_INTERFACE + #define mysql_socket_setsockopt(FD, LV, ON, OP, OL) \ + inline_mysql_socket_setsockopt(__FILE__, __LINE__, FD, LV, ON, OP, OL) +#else + #define mysql_socket_setsockopt(FD, LV, ON, OP, OL) \ + inline_mysql_socket_setsockopt(FD, LV, ON, OP, OL) +#endif + +/** + @def mysql_socket_listen(FD, N) + Set socket state to listen for an incoming connection. + @c mysql_socket_listen is a replacement for @c listen. + @param FD Instrumented socket descriptor, bound and connected + @param N Maximum number of pending connections allowed. +*/ +#ifdef HAVE_PSI_SOCKET_INTERFACE + #define mysql_socket_listen(FD, N) \ + inline_mysql_socket_listen(__FILE__, __LINE__, FD, N) +#else + #define mysql_socket_listen(FD, N) \ + inline_mysql_socket_listen(FD, N) +#endif + +/** + @def mysql_socket_accept(K, FD, AP, LP) + Accept a connection from any remote host; TCP only. + @c mysql_socket_accept is a replacement for @c accept. + @param K PSI_socket_key for this instrumented socket + @param FD Instrumented socket descriptor, bound and placed in a listen state + @param AP Pointer to sockaddr structure with returned IP address and port of connected host + @param LP Pointer to length of valid information in AP +*/ +#ifdef HAVE_PSI_SOCKET_INTERFACE + #define mysql_socket_accept(K, FD, AP, LP) \ + inline_mysql_socket_accept(__FILE__, __LINE__, K, FD, AP, LP) +#else + #define mysql_socket_accept(K, FD, AP, LP) \ + inline_mysql_socket_accept(FD, AP, LP) +#endif + +/** + @def mysql_socket_close(FD) + Close a socket and sever any connections. + @c mysql_socket_close is a replacement for @c close. + @param FD Instrumented socket descriptor returned by socket() or accept() +*/ +#ifdef HAVE_PSI_SOCKET_INTERFACE + #define mysql_socket_close(FD) \ + inline_mysql_socket_close(__FILE__, __LINE__, FD) +#else + #define mysql_socket_close(FD) \ + inline_mysql_socket_close(FD) +#endif + +/** + @def mysql_socket_shutdown(FD, H) + Disable receives and/or sends on a socket. + @c mysql_socket_shutdown is a replacement for @c shutdown. + @param FD Instrumented socket descriptor returned by socket() or accept() + @param H Specifies which operations to shutdown +*/ +#ifdef HAVE_PSI_SOCKET_INTERFACE + #define mysql_socket_shutdown(FD, H) \ + inline_mysql_socket_shutdown(__FILE__, __LINE__, FD, H) +#else + #define mysql_socket_shutdown(FD, H) \ + inline_mysql_socket_shutdown(FD, H) +#endif + +#ifdef HAVE_PSI_SOCKET_INTERFACE +static inline void inline_mysql_socket_register( + const char *category, + PSI_socket_info *info, + int count) +{ + PSI_SOCKET_CALL(register_socket)(category, info, count); +} +#endif + +/** mysql_socket_socket */ + +static inline MYSQL_SOCKET +inline_mysql_socket_socket +( +#ifdef HAVE_PSI_SOCKET_INTERFACE + PSI_socket_key key, +#endif + int domain, int type, int protocol) +{ + MYSQL_SOCKET mysql_socket= MYSQL_INVALID_SOCKET; + mysql_socket.fd= socket(domain, type | SOCK_CLOEXEC, protocol); + +#ifdef HAVE_PSI_SOCKET_INTERFACE + if (likely(mysql_socket.fd != INVALID_SOCKET)) + { + mysql_socket.m_psi= PSI_SOCKET_CALL(init_socket) + (key, (const my_socket*)&mysql_socket.fd, NULL, 0); + } +#endif + return mysql_socket; +} + +/** mysql_socket_bind */ + +static inline int +inline_mysql_socket_bind +( +#ifdef HAVE_PSI_SOCKET_INTERFACE + const char *src_file, uint src_line, +#endif + MYSQL_SOCKET mysql_socket, const struct sockaddr *addr, socklen_t len) +{ + int result; + +#ifdef HAVE_PSI_SOCKET_INTERFACE + if (mysql_socket.m_psi != NULL) + { + /* Instrumentation start */ + PSI_socket_locker_state state; + PSI_socket_locker *locker; + locker= PSI_SOCKET_CALL(start_socket_wait) + (&state, mysql_socket.m_psi, PSI_SOCKET_BIND, (size_t)0, src_file, src_line); + + /* Instrumented code */ + result= bind(mysql_socket.fd, addr, len); + + /* Instrumentation end */ + if (result == 0) + PSI_SOCKET_CALL(set_socket_info)(mysql_socket.m_psi, NULL, addr, len); + + if (locker != NULL) + PSI_SOCKET_CALL(end_socket_wait)(locker, (size_t)0); + + return result; + } +#endif + + /* Non instrumented code */ + result= bind(mysql_socket.fd, addr, len); + return result; +} + +/** mysql_socket_getsockname */ + +static inline int +inline_mysql_socket_getsockname +( +#ifdef HAVE_PSI_SOCKET_INTERFACE + const char *src_file, uint src_line, +#endif + MYSQL_SOCKET mysql_socket, struct sockaddr *addr, socklen_t *len) +{ + int result; + +#ifdef HAVE_PSI_SOCKET_INTERFACE + if (mysql_socket.m_psi != NULL) + { + /* Instrumentation start */ + PSI_socket_locker *locker; + PSI_socket_locker_state state; + locker= PSI_SOCKET_CALL(start_socket_wait) + (&state, mysql_socket.m_psi, PSI_SOCKET_BIND, (size_t)0, src_file, src_line); + + /* Instrumented code */ + result= getsockname(mysql_socket.fd, addr, len); + + /* Instrumentation end */ + if (locker != NULL) + PSI_SOCKET_CALL(end_socket_wait)(locker, (size_t)0); + + return result; + } +#endif + + /* Non instrumented code */ + result= getsockname(mysql_socket.fd, addr, len); + + return result; +} + +/** mysql_socket_connect */ + +static inline int +inline_mysql_socket_connect +( +#ifdef HAVE_PSI_SOCKET_INTERFACE + const char *src_file, uint src_line, +#endif + MYSQL_SOCKET mysql_socket, const struct sockaddr *addr, socklen_t len) +{ + int result; + +#ifdef HAVE_PSI_SOCKET_INTERFACE + if (mysql_socket.m_psi != NULL) + { + /* Instrumentation start */ + PSI_socket_locker *locker; + PSI_socket_locker_state state; + locker= PSI_SOCKET_CALL(start_socket_wait) + (&state, mysql_socket.m_psi, PSI_SOCKET_CONNECT, (size_t)0, src_file, src_line); + + /* Instrumented code */ + result= connect(mysql_socket.fd, addr, len); + + /* Instrumentation end */ + if (locker != NULL) + PSI_SOCKET_CALL(end_socket_wait)(locker, (size_t)0); + + return result; + } +#endif + + /* Non instrumented code */ + result= connect(mysql_socket.fd, addr, len); + + return result; +} + +/** mysql_socket_getpeername */ + +static inline int +inline_mysql_socket_getpeername +( +#ifdef HAVE_PSI_SOCKET_INTERFACE + const char *src_file, uint src_line, +#endif + MYSQL_SOCKET mysql_socket, struct sockaddr *addr, socklen_t *len) +{ + int result; + +#ifdef HAVE_PSI_SOCKET_INTERFACE + if (mysql_socket.m_psi != NULL) + { + /* Instrumentation start */ + PSI_socket_locker *locker; + PSI_socket_locker_state state; + locker= PSI_SOCKET_CALL(start_socket_wait) + (&state, mysql_socket.m_psi, PSI_SOCKET_BIND, (size_t)0, src_file, src_line); + + /* Instrumented code */ + result= getpeername(mysql_socket.fd, addr, len); + + /* Instrumentation end */ + if (locker != NULL) + PSI_SOCKET_CALL(end_socket_wait)(locker, (size_t)0); + + return result; + } +#endif + + /* Non instrumented code */ + result= getpeername(mysql_socket.fd, addr, len); + + return result; +} + +/** mysql_socket_send */ + +static inline ssize_t +inline_mysql_socket_send +( +#ifdef HAVE_PSI_SOCKET_INTERFACE + const char *src_file, uint src_line, +#endif + MYSQL_SOCKET mysql_socket, const SOCKBUF_T *buf, size_t n, int flags) +{ + ssize_t result; + +#ifdef HAVE_PSI_SOCKET_INTERFACE + if (mysql_socket.m_psi != NULL) + { + /* Instrumentation start */ + PSI_socket_locker *locker; + PSI_socket_locker_state state; + locker= PSI_SOCKET_CALL(start_socket_wait) + (&state, mysql_socket.m_psi, PSI_SOCKET_SEND, n, src_file, src_line); + + /* Instrumented code */ + result= send(mysql_socket.fd, buf, IF_WIN((int),) n, flags); + + /* Instrumentation end */ + if (locker != NULL) + { + size_t bytes_written; + bytes_written= (result > -1) ? result : 0; + PSI_SOCKET_CALL(end_socket_wait)(locker, bytes_written); + } + + return result; + } +#endif + + /* Non instrumented code */ + result= send(mysql_socket.fd, buf, IF_WIN((int),) n, flags); + + return result; +} + +/** mysql_socket_recv */ + +static inline ssize_t +inline_mysql_socket_recv +( +#ifdef HAVE_PSI_SOCKET_INTERFACE + const char *src_file, uint src_line, +#endif + MYSQL_SOCKET mysql_socket, SOCKBUF_T *buf, size_t n, int flags) +{ + ssize_t result; + +#ifdef HAVE_PSI_SOCKET_INTERFACE + if (mysql_socket.m_psi != NULL) + { + /* Instrumentation start */ + PSI_socket_locker *locker; + PSI_socket_locker_state state; + locker= PSI_SOCKET_CALL(start_socket_wait) + (&state, mysql_socket.m_psi, PSI_SOCKET_RECV, (size_t)0, src_file, src_line); + + /* Instrumented code */ + result= recv(mysql_socket.fd, buf, IF_WIN((int),) n, flags); + + /* Instrumentation end */ + if (locker != NULL) + { + size_t bytes_read; + bytes_read= (result > -1) ? result : 0; + PSI_SOCKET_CALL(end_socket_wait)(locker, bytes_read); + } + + return result; + } +#endif + + /* Non instrumented code */ + result= recv(mysql_socket.fd, buf, IF_WIN((int),) n, flags); + + return result; +} + +/** mysql_socket_sendto */ + +static inline ssize_t +inline_mysql_socket_sendto +( +#ifdef HAVE_PSI_SOCKET_INTERFACE + const char *src_file, uint src_line, +#endif + MYSQL_SOCKET mysql_socket, const SOCKBUF_T *buf, size_t n, int flags, const struct sockaddr *addr, socklen_t addr_len) +{ + ssize_t result; + +#ifdef HAVE_PSI_SOCKET_INTERFACE + if (mysql_socket.m_psi != NULL) + { + /* Instrumentation start */ + PSI_socket_locker *locker; + PSI_socket_locker_state state; + locker= PSI_SOCKET_CALL(start_socket_wait) + (&state, mysql_socket.m_psi, PSI_SOCKET_SEND, n, src_file, src_line); + + /* Instrumented code */ + result= sendto(mysql_socket.fd, buf, IF_WIN((int),) n, flags, addr, addr_len); + + /* Instrumentation end */ + if (locker != NULL) + { + size_t bytes_written; + bytes_written = (result > -1) ? result : 0; + PSI_SOCKET_CALL(end_socket_wait)(locker, bytes_written); + } + + return result; + } +#endif + + /* Non instrumented code */ + result= sendto(mysql_socket.fd, buf, IF_WIN((int),) n, flags, addr, addr_len); + + return result; +} + +/** mysql_socket_recvfrom */ + +static inline ssize_t +inline_mysql_socket_recvfrom +( +#ifdef HAVE_PSI_SOCKET_INTERFACE + const char *src_file, uint src_line, +#endif + MYSQL_SOCKET mysql_socket, SOCKBUF_T *buf, size_t n, int flags, + struct sockaddr *addr, socklen_t *addr_len) +{ + ssize_t result; + +#ifdef HAVE_PSI_SOCKET_INTERFACE + if (mysql_socket.m_psi != NULL) + { + /* Instrumentation start */ + PSI_socket_locker *locker; + PSI_socket_locker_state state; + locker= PSI_SOCKET_CALL(start_socket_wait) + (&state, mysql_socket.m_psi, PSI_SOCKET_RECV, (size_t)0, src_file, src_line); + + /* Instrumented code */ + result= recvfrom(mysql_socket.fd, buf, IF_WIN((int),) n, flags, addr, addr_len); + + /* Instrumentation end */ + if (locker != NULL) + { + size_t bytes_read; + bytes_read = (result > -1) ? result : 0; + PSI_SOCKET_CALL(end_socket_wait)(locker, bytes_read); + } + + return result; + } +#endif + + /* Non instrumented code */ + result= recvfrom(mysql_socket.fd, buf, IF_WIN((int),) n, flags, addr, addr_len); + + return result; +} + +/** mysql_socket_getsockopt */ + +static inline int +inline_mysql_socket_getsockopt +( +#ifdef HAVE_PSI_SOCKET_INTERFACE + const char *src_file, uint src_line, +#endif + MYSQL_SOCKET mysql_socket, int level, int optname, SOCKBUF_T *optval, socklen_t *optlen) +{ + int result; + +#ifdef HAVE_PSI_SOCKET_INTERFACE + if (mysql_socket.m_psi != NULL) + { + /* Instrumentation start */ + PSI_socket_locker *locker; + PSI_socket_locker_state state; + locker= PSI_SOCKET_CALL(start_socket_wait) + (&state, mysql_socket.m_psi, PSI_SOCKET_OPT, (size_t)0, src_file, src_line); + + /* Instrumented code */ + result= getsockopt(mysql_socket.fd, level, optname, optval, optlen); + + /* Instrumentation end */ + if (locker != NULL) + PSI_SOCKET_CALL(end_socket_wait)(locker, (size_t)0); + + return result; + } +#endif + + /* Non instrumented code */ + result= getsockopt(mysql_socket.fd, level, optname, optval, optlen); + + return result; +} + +/** mysql_socket_setsockopt */ + +static inline int +inline_mysql_socket_setsockopt +( +#ifdef HAVE_PSI_SOCKET_INTERFACE + const char *src_file, uint src_line, +#endif + MYSQL_SOCKET mysql_socket, int level, int optname, const SOCKBUF_T *optval, + socklen_t optlen) +{ + int result; + +#ifdef HAVE_PSI_SOCKET_INTERFACE + if (mysql_socket.m_psi) + { + /* Instrumentation start */ + PSI_socket_locker *locker; + PSI_socket_locker_state state; + locker= PSI_SOCKET_CALL(start_socket_wait) + (&state, mysql_socket.m_psi, PSI_SOCKET_OPT, (size_t)0, src_file, src_line); + + /* Instrumented code */ + result= setsockopt(mysql_socket.fd, level, optname, optval, optlen); + + /* Instrumentation end */ + if (locker != NULL) + PSI_SOCKET_CALL(end_socket_wait)(locker, (size_t)0); + + return result; + } +#endif + + /* Non instrumented code */ + result= setsockopt(mysql_socket.fd, level, optname, optval, optlen); + + return result; +} + +/** mysql_socket_listen */ + +static inline int +inline_mysql_socket_listen +( +#ifdef HAVE_PSI_SOCKET_INTERFACE + const char *src_file, uint src_line, +#endif + MYSQL_SOCKET mysql_socket, int backlog) +{ + int result; + +#ifdef HAVE_PSI_SOCKET_INTERFACE + if (mysql_socket.m_psi != NULL) + { + /* Instrumentation start */ + PSI_socket_locker *locker; + PSI_socket_locker_state state; + locker= PSI_SOCKET_CALL(start_socket_wait) + (&state, mysql_socket.m_psi, PSI_SOCKET_CONNECT, (size_t)0, src_file, src_line); + + /* Instrumented code */ + result= listen(mysql_socket.fd, backlog); + + /* Instrumentation end */ + if (locker != NULL) + PSI_SOCKET_CALL(end_socket_wait)(locker, (size_t)0); + + return result; + } +#endif + + /* Non instrumented code */ + result= listen(mysql_socket.fd, backlog); + + return result; +} + +/** mysql_socket_accept */ + +static inline MYSQL_SOCKET +inline_mysql_socket_accept +( +#ifdef HAVE_PSI_SOCKET_INTERFACE + const char *src_file, uint src_line, PSI_socket_key key, +#endif + MYSQL_SOCKET socket_listen, struct sockaddr *addr, socklen_t *addr_len) +{ +#ifdef FD_CLOEXEC + int flags; +#endif + + MYSQL_SOCKET socket_accept= MYSQL_INVALID_SOCKET; + socklen_t addr_length= (addr_len != NULL) ? *addr_len : 0; + +#ifdef HAVE_PSI_SOCKET_INTERFACE + if (socket_listen.m_psi != NULL) + { + /* Instrumentation start */ + PSI_socket_locker *locker; + PSI_socket_locker_state state; + locker= PSI_SOCKET_CALL(start_socket_wait) + (&state, socket_listen.m_psi, PSI_SOCKET_CONNECT, (size_t)0, src_file, src_line); + + /* Instrumented code */ +#ifdef HAVE_ACCEPT4 + socket_accept.fd= accept4(socket_listen.fd, addr, &addr_length, + SOCK_CLOEXEC); +#else + socket_accept.fd= accept(socket_listen.fd, addr, &addr_length); +#ifdef FD_CLOEXEC + flags= fcntl(socket_accept.fd, F_GETFD); + if (flags != -1) { + flags |= FD_CLOEXEC; + fcntl(socket_accept.fd, F_SETFD, flags); + } +#endif +#endif + + /* Instrumentation end */ + if (locker != NULL) + PSI_SOCKET_CALL(end_socket_wait)(locker, (size_t)0); + } + else +#endif + { + /* Non instrumented code */ +#ifdef HAVE_ACCEPT4 + socket_accept.fd= accept4(socket_listen.fd, addr, &addr_length, + SOCK_CLOEXEC); +#else + socket_accept.fd= accept(socket_listen.fd, addr, &addr_length); +#ifdef FD_CLOEXEC + flags= fcntl(socket_accept.fd, F_GETFD); + if (flags != -1) { + flags |= FD_CLOEXEC; + fcntl(socket_accept.fd, F_SETFD, flags); + } +#endif +#endif + } + +#ifdef HAVE_PSI_SOCKET_INTERFACE + if (likely(socket_accept.fd != INVALID_SOCKET)) + { + /* Initialize the instrument with the new socket descriptor and address */ + socket_accept.m_psi= PSI_SOCKET_CALL(init_socket) + (key, (const my_socket*)&socket_accept.fd, addr, addr_length); + } +#endif + + return socket_accept; +} + +/** mysql_socket_close */ + +static inline int +inline_mysql_socket_close +( +#ifdef HAVE_PSI_SOCKET_INTERFACE + const char *src_file, uint src_line, +#endif + MYSQL_SOCKET mysql_socket) +{ + int result; + +#ifdef HAVE_PSI_SOCKET_INTERFACE + if (mysql_socket.m_psi != NULL) + { + /* Instrumentation start */ + PSI_socket_locker *locker; + PSI_socket_locker_state state; + locker= PSI_SOCKET_CALL(start_socket_wait) + (&state, mysql_socket.m_psi, PSI_SOCKET_CLOSE, (size_t)0, src_file, src_line); + + /* Instrumented code */ + result= closesocket(mysql_socket.fd); + + /* Instrumentation end */ + if (locker != NULL) + PSI_SOCKET_CALL(end_socket_wait)(locker, (size_t)0); + /* Remove the instrumentation for this socket. */ + if (mysql_socket.m_psi != NULL) + PSI_SOCKET_CALL(destroy_socket)(mysql_socket.m_psi); + + return result; + } +#endif + + /* Non instrumented code */ + result= closesocket(mysql_socket.fd); + + return result; +} + +/** mysql_socket_shutdown */ + +static inline int +inline_mysql_socket_shutdown +( +#ifdef HAVE_PSI_SOCKET_INTERFACE + const char *src_file, uint src_line, +#endif + MYSQL_SOCKET mysql_socket, int how) +{ + int result; + +#ifdef __WIN__ + static LPFN_DISCONNECTEX DisconnectEx = NULL; + if (DisconnectEx == NULL) + { + DWORD dwBytesReturned; + GUID guidDisconnectEx = WSAID_DISCONNECTEX; + WSAIoctl(mysql_socket.fd, SIO_GET_EXTENSION_FUNCTION_POINTER, + &guidDisconnectEx, sizeof(GUID), + &DisconnectEx, sizeof(DisconnectEx), + &dwBytesReturned, NULL, NULL); + } +#endif + +/* Instrumentation start */ +#ifdef HAVE_PSI_SOCKET_INTERFACE + if (mysql_socket.m_psi != NULL) + { + PSI_socket_locker *locker; + PSI_socket_locker_state state; + locker= PSI_SOCKET_CALL(start_socket_wait) + (&state, mysql_socket.m_psi, PSI_SOCKET_SHUTDOWN, (size_t)0, src_file, src_line); + + /* Instrumented code */ +#ifdef __WIN__ + if (DisconnectEx) + result= (DisconnectEx(mysql_socket.fd, (LPOVERLAPPED) NULL, + (DWORD) 0, (DWORD) 0) == TRUE) ? 0 : -1; + else +#endif + result= shutdown(mysql_socket.fd, how); + + /* Instrumentation end */ + if (locker != NULL) + PSI_SOCKET_CALL(end_socket_wait)(locker, (size_t)0); + + return result; + } +#endif + + /* Non instrumented code */ +#ifdef __WIN__ + if (DisconnectEx) + result= (DisconnectEx(mysql_socket.fd, (LPOVERLAPPED) NULL, + (DWORD) 0, (DWORD) 0) == TRUE) ? 0 : -1; + else +#endif + result= shutdown(mysql_socket.fd, how); + + return result; +} + +/** @} (end of group Socket_instrumentation) */ + +#endif + diff --git a/EQ2/source/depends/mariadb-10.1.19/include/mysql/psi/mysql_stage.h b/EQ2/source/depends/mariadb-10.1.19/include/mysql/psi/mysql_stage.h new file mode 100644 index 000000000..91a5c12f8 --- /dev/null +++ b/EQ2/source/depends/mariadb-10.1.19/include/mysql/psi/mysql_stage.h @@ -0,0 +1,72 @@ +/* Copyright (c) 2010, 2012, Oracle and/or its affiliates. All rights reserved. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; version 2 of the License. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ + +#ifndef MYSQL_STAGE_H +#define MYSQL_STAGE_H + +/** + @file mysql/psi/mysql_stage.h + Instrumentation helpers for stages. +*/ + +#include "mysql/psi/psi.h" + +/** + @defgroup Stage_instrumentation Stage Instrumentation + @ingroup Instrumentation_interface + @{ +*/ + +/** + @def mysql_stage_register(P1, P2, P3) + Stage registration. +*/ +#ifdef HAVE_PSI_STAGE_INTERFACE +#define mysql_stage_register(P1, P2, P3) \ + inline_mysql_stage_register(P1, P2, P3) +#else +#define mysql_stage_register(P1, P2, P3) \ + do {} while (0) +#endif + +#ifdef HAVE_PSI_STAGE_INTERFACE + #define MYSQL_SET_STAGE(K, F, L) \ + inline_mysql_set_stage(K, F, L) +#else + #define MYSQL_SET_STAGE(K, F, L) \ + do {} while (0) +#endif + +#ifdef HAVE_PSI_STAGE_INTERFACE +static inline void inline_mysql_stage_register( + const char *category, PSI_stage_info **info, int count) +{ + PSI_STAGE_CALL(register_stage)(category, info, count); +} +#endif + +#ifdef HAVE_PSI_STAGE_INTERFACE +static inline void +inline_mysql_set_stage(PSI_stage_key key, + const char *src_file, int src_line) +{ + PSI_STAGE_CALL(start_stage)(key, src_file, src_line); +} +#endif + +/** @} (end of group Stage_instrumentation) */ + +#endif + diff --git a/EQ2/source/depends/mariadb-10.1.19/include/mysql/psi/mysql_statement.h b/EQ2/source/depends/mariadb-10.1.19/include/mysql/psi/mysql_statement.h new file mode 100644 index 000000000..3d5943fa5 --- /dev/null +++ b/EQ2/source/depends/mariadb-10.1.19/include/mysql/psi/mysql_statement.h @@ -0,0 +1,222 @@ +/* Copyright (c) 2010, 2015, Oracle and/or its affiliates. All rights reserved. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; version 2 of the License. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ + +#ifndef MYSQL_STATEMENT_H +#define MYSQL_STATEMENT_H + +/** + @file mysql/psi/mysql_statement.h + Instrumentation helpers for statements. +*/ + +#include "mysql/psi/psi.h" + +/** + @defgroup Statement_instrumentation Statement Instrumentation + @ingroup Instrumentation_interface + @{ +*/ + +/** + @def mysql_statement_register(P1, P2, P3) + Statement registration. +*/ +#ifdef HAVE_PSI_STATEMENT_INTERFACE +#define mysql_statement_register(P1, P2, P3) \ + inline_mysql_statement_register(P1, P2, P3) +#else +#define mysql_statement_register(P1, P2, P3) \ + do {} while (0) +#endif + +#ifdef HAVE_PSI_STATEMENT_DIGEST_INTERFACE + #define MYSQL_DIGEST_START(LOCKER) \ + inline_mysql_digest_start(LOCKER) +#else + #define MYSQL_DIGEST_START(LOCKER) \ + NULL +#endif + +#ifdef HAVE_PSI_STATEMENT_DIGEST_INTERFACE + #define MYSQL_DIGEST_END(LOCKER, DIGEST) \ + inline_mysql_digest_end(LOCKER, DIGEST) +#else + #define MYSQL_DIGEST_END(LOCKER, DIGEST) \ + do {} while (0) +#endif + +#ifdef HAVE_PSI_STATEMENT_INTERFACE + #define MYSQL_START_STATEMENT(STATE, K, DB, DB_LEN, CS) \ + inline_mysql_start_statement(STATE, K, DB, DB_LEN, CS, __FILE__, __LINE__) +#else + #define MYSQL_START_STATEMENT(STATE, K, DB, DB_LEN, CS) \ + NULL +#endif + +#ifdef HAVE_PSI_STATEMENT_INTERFACE + #define MYSQL_REFINE_STATEMENT(LOCKER, K) \ + inline_mysql_refine_statement(LOCKER, K) +#else + #define MYSQL_REFINE_STATEMENT(LOCKER, K) \ + NULL +#endif + +#ifdef HAVE_PSI_STATEMENT_INTERFACE + #define MYSQL_SET_STATEMENT_TEXT(LOCKER, P1, P2) \ + inline_mysql_set_statement_text(LOCKER, P1, P2) +#else + #define MYSQL_SET_STATEMENT_TEXT(LOCKER, P1, P2) \ + do {} while (0) +#endif + +#ifdef HAVE_PSI_STATEMENT_INTERFACE + #define MYSQL_SET_STATEMENT_LOCK_TIME(LOCKER, P1) \ + inline_mysql_set_statement_lock_time(LOCKER, P1) +#else + #define MYSQL_SET_STATEMENT_LOCK_TIME(LOCKER, P1) \ + do {} while (0) +#endif + +#ifdef HAVE_PSI_STATEMENT_INTERFACE + #define MYSQL_SET_STATEMENT_ROWS_SENT(LOCKER, P1) \ + inline_mysql_set_statement_rows_sent(LOCKER, P1) +#else + #define MYSQL_SET_STATEMENT_ROWS_SENT(LOCKER, P1) \ + do {} while (0) +#endif + +#ifdef HAVE_PSI_STATEMENT_INTERFACE + #define MYSQL_SET_STATEMENT_ROWS_EXAMINED(LOCKER, P1) \ + inline_mysql_set_statement_rows_examined(LOCKER, P1) +#else + #define MYSQL_SET_STATEMENT_ROWS_EXAMINED(LOCKER, P1) \ + do {} while (0) +#endif + +#ifdef HAVE_PSI_STATEMENT_INTERFACE + #define MYSQL_END_STATEMENT(LOCKER, DA) \ + inline_mysql_end_statement(LOCKER, DA) +#else + #define MYSQL_END_STATEMENT(LOCKER, DA) \ + do {} while (0) +#endif + +#ifdef HAVE_PSI_STATEMENT_INTERFACE +static inline void inline_mysql_statement_register( + const char *category, PSI_statement_info *info, int count) +{ + PSI_STATEMENT_CALL(register_statement)(category, info, count); +} + +#ifdef HAVE_PSI_STATEMENT_DIGEST_INTERFACE +static inline struct PSI_digest_locker * +inline_mysql_digest_start(PSI_statement_locker *locker) +{ + PSI_digest_locker* digest_locker= NULL; + + if (likely(locker != NULL)) + digest_locker= PSI_DIGEST_CALL(digest_start)(locker); + return digest_locker; +} +#endif + +#ifdef HAVE_PSI_STATEMENT_DIGEST_INTERFACE +static inline void +inline_mysql_digest_end(PSI_digest_locker *locker, const sql_digest_storage *digest) +{ + if (likely(locker != NULL)) + PSI_DIGEST_CALL(digest_end)(locker, digest); +} +#endif + +static inline struct PSI_statement_locker * +inline_mysql_start_statement(PSI_statement_locker_state *state, + PSI_statement_key key, + const char *db, uint db_len, + const CHARSET_INFO *charset, + const char *src_file, int src_line) +{ + PSI_statement_locker *locker; + locker= PSI_STATEMENT_CALL(get_thread_statement_locker)(state, key, charset); + if (likely(locker != NULL)) + PSI_STATEMENT_CALL(start_statement)(locker, db, db_len, src_file, src_line); + return locker; +} + +static inline struct PSI_statement_locker * +inline_mysql_refine_statement(PSI_statement_locker *locker, + PSI_statement_key key) +{ + if (likely(locker != NULL)) + { + locker= PSI_STATEMENT_CALL(refine_statement)(locker, key); + } + return locker; +} + +static inline void +inline_mysql_set_statement_text(PSI_statement_locker *locker, + const char *text, uint text_len) +{ + if (likely(locker != NULL)) + { + PSI_STATEMENT_CALL(set_statement_text)(locker, text, text_len); + } +} + +static inline void +inline_mysql_set_statement_lock_time(PSI_statement_locker *locker, + ulonglong count) +{ + if (likely(locker != NULL)) + { + PSI_STATEMENT_CALL(set_statement_lock_time)(locker, count); + } +} + +static inline void +inline_mysql_set_statement_rows_sent(PSI_statement_locker *locker, + ulonglong count) +{ + if (likely(locker != NULL)) + { + PSI_STATEMENT_CALL(set_statement_rows_sent)(locker, count); + } +} + +static inline void +inline_mysql_set_statement_rows_examined(PSI_statement_locker *locker, + ulonglong count) +{ + if (likely(locker != NULL)) + { + PSI_STATEMENT_CALL(set_statement_rows_examined)(locker, count); + } +} + +static inline void +inline_mysql_end_statement(struct PSI_statement_locker *locker, + Diagnostics_area *stmt_da) +{ + PSI_STAGE_CALL(end_stage)(); + if (likely(locker != NULL)) + PSI_STATEMENT_CALL(end_statement)(locker, stmt_da); +} +#endif + +/** @} (end of group Statement_instrumentation) */ + +#endif + diff --git a/EQ2/source/depends/mariadb-10.1.19/include/mysql/psi/mysql_table.h b/EQ2/source/depends/mariadb-10.1.19/include/mysql/psi/mysql_table.h new file mode 100644 index 000000000..74217a32b --- /dev/null +++ b/EQ2/source/depends/mariadb-10.1.19/include/mysql/psi/mysql_table.h @@ -0,0 +1,213 @@ +/* Copyright (c) 2010, 2012, Oracle and/or its affiliates. All rights reserved. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; version 2 of the License. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software Foundation, + 51 Franklin Street, Suite 500, Boston, MA 02110-1335 USA */ + +#ifndef MYSQL_TABLE_H +#define MYSQL_TABLE_H + +/** + @file mysql/psi/mysql_table.h + Instrumentation helpers for table io. +*/ + +#include "mysql/psi/psi.h" + +/** + @defgroup Table_instrumentation Table Instrumentation + @ingroup Instrumentation_interface + @{ +*/ + +#ifdef HAVE_PSI_TABLE_INTERFACE +#define MYSQL_UNBIND_TABLE(handler) (handler)->unbind_psi() +#define MYSQL_REBIND_TABLE(handler) (handler)->rebind_psi() + +#define PSI_CALL_unbind_table PSI_TABLE_CALL(unbind_table) +#define PSI_CALL_rebind_table PSI_TABLE_CALL(rebind_table) +#define PSI_CALL_open_table PSI_TABLE_CALL(open_table) +#define PSI_CALL_close_table PSI_TABLE_CALL(close_table) +#define PSI_CALL_get_table_share PSI_TABLE_CALL(get_table_share) +#define PSI_CALL_release_table_share PSI_TABLE_CALL(release_table_share) +#define PSI_CALL_drop_table_share PSI_TABLE_CALL(drop_table_share) +#else +#define MYSQL_UNBIND_TABLE(handler) do { } while(0) +#define MYSQL_REBIND_TABLE(handler) do { } while(0) + +#define PSI_CALL_unbind_table(A1) do { } while(0) +#define PSI_CALL_rebind_table(A1,A2,A3) NULL +#define PSI_CALL_close_table(A1) do { } while(0) +#define PSI_CALL_open_table(A1,A2) NULL +#define PSI_CALL_get_table_share(A1,A2) NULL +#define PSI_CALL_release_table_share(A1) do { } while(0) +#define PSI_CALL_drop_table_share(A1,A2,A3,A4,A5) do { } while(0) +#endif + +/** + @def MYSQL_TABLE_WAIT_VARIABLES + Instrumentation helper for table waits. + This instrumentation declares local variables. + Do not use a ';' after this macro + @param LOCKER the locker + @param STATE the locker state + @sa MYSQL_START_TABLE_IO_WAIT. + @sa MYSQL_END_TABLE_IO_WAIT. + @sa MYSQL_START_TABLE_LOCK_WAIT. + @sa MYSQL_END_TABLE_LOCK_WAIT. +*/ +#ifdef HAVE_PSI_TABLE_INTERFACE + #define MYSQL_TABLE_WAIT_VARIABLES(LOCKER, STATE) \ + struct PSI_table_locker* LOCKER; \ + PSI_table_locker_state STATE; +#else + #define MYSQL_TABLE_WAIT_VARIABLES(LOCKER, STATE) +#endif + +/** + @def MYSQL_TABLE_IO_WAIT + Instrumentation helper for table io_waits. + This instrumentation marks the start of a wait event. + @param PSI the instrumented table + @param OP the table operation to be performed + @param INDEX the table index used if any, or MAY_KEY. + @param FLAGS per table operation flags. + @sa MYSQL_END_TABLE_WAIT. +*/ +#ifdef HAVE_PSI_TABLE_INTERFACE + #define MYSQL_TABLE_IO_WAIT(PSI, OP, INDEX, FLAGS, PAYLOAD) \ + { \ + if (PSI != NULL) \ + { \ + PSI_table_locker *locker; \ + PSI_table_locker_state state; \ + locker= PSI_TABLE_CALL(start_table_io_wait) \ + (& state, PSI, OP, INDEX, __FILE__, __LINE__); \ + PAYLOAD \ + if (locker != NULL) \ + PSI_TABLE_CALL(end_table_io_wait)(locker); \ + } \ + else \ + { \ + PAYLOAD \ + } \ + } +#else + #define MYSQL_TABLE_IO_WAIT(PSI, OP, INDEX, FLAGS, PAYLOAD) \ + PAYLOAD +#endif + +/** + @def MYSQL_TABLE_LOCK_WAIT + Instrumentation helper for table io_waits. + This instrumentation marks the start of a wait event. + @param PSI the instrumented table + @param OP the table operation to be performed + @param INDEX the table index used if any, or MAY_KEY. + @param FLAGS per table operation flags. + @sa MYSQL_END_TABLE_WAIT. +*/ +#ifdef HAVE_PSI_TABLE_INTERFACE + #define MYSQL_TABLE_LOCK_WAIT(PSI, OP, FLAGS, PAYLOAD) \ + { \ + if (PSI != NULL) \ + { \ + PSI_table_locker *locker; \ + PSI_table_locker_state state; \ + locker= PSI_TABLE_CALL(start_table_lock_wait) \ + (& state, PSI, OP, FLAGS, __FILE__, __LINE__); \ + PAYLOAD \ + if (locker != NULL) \ + PSI_TABLE_CALL(end_table_lock_wait)(locker); \ + } \ + else \ + { \ + PAYLOAD \ + } \ + } +#else + #define MYSQL_TABLE_LOCK_WAIT(PSI, OP, FLAGS, PAYLOAD) \ + PAYLOAD +#endif + +/** + @def MYSQL_START_TABLE_LOCK_WAIT + Instrumentation helper for table lock waits. + This instrumentation marks the start of a wait event. + @param LOCKER the locker + @param STATE the locker state + @param PSI the instrumented table + @param OP the table operation to be performed + @param FLAGS per table operation flags. + @sa MYSQL_END_TABLE_LOCK_WAIT. +*/ +#ifdef HAVE_PSI_TABLE_INTERFACE + #define MYSQL_START_TABLE_LOCK_WAIT(LOCKER, STATE, PSI, OP, FLAGS) \ + LOCKER= inline_mysql_start_table_lock_wait(STATE, PSI, \ + OP, FLAGS, __FILE__, __LINE__) +#else + #define MYSQL_START_TABLE_LOCK_WAIT(LOCKER, STATE, PSI, OP, FLAGS) \ + do {} while (0) +#endif + +/** + @def MYSQL_END_TABLE_LOCK_WAIT + Instrumentation helper for table lock waits. + This instrumentation marks the end of a wait event. + @param LOCKER the locker + @sa MYSQL_START_TABLE_LOCK_WAIT. +*/ +#ifdef HAVE_PSI_TABLE_INTERFACE + #define MYSQL_END_TABLE_LOCK_WAIT(LOCKER) \ + inline_mysql_end_table_lock_wait(LOCKER) +#else + #define MYSQL_END_TABLE_LOCK_WAIT(LOCKER) \ + do {} while (0) +#endif + +#ifdef HAVE_PSI_TABLE_INTERFACE +/** + Instrumentation calls for MYSQL_START_TABLE_LOCK_WAIT. + @sa MYSQL_END_TABLE_LOCK_WAIT. +*/ +static inline struct PSI_table_locker * +inline_mysql_start_table_lock_wait(PSI_table_locker_state *state, + struct PSI_table *psi, + enum PSI_table_lock_operation op, + ulong flags, const char *src_file, int src_line) +{ + if (psi != NULL) + { + struct PSI_table_locker *locker; + locker= PSI_TABLE_CALL(start_table_lock_wait) + (state, psi, op, flags, src_file, src_line); + return locker; + } + return NULL; +} + +/** + Instrumentation calls for MYSQL_END_TABLE_LOCK_WAIT. + @sa MYSQL_START_TABLE_LOCK_WAIT. +*/ +static inline void +inline_mysql_end_table_lock_wait(struct PSI_table_locker *locker) +{ + if (locker != NULL) + PSI_TABLE_CALL(end_table_lock_wait)(locker); +} +#endif + +/** @} (end of group Table_instrumentation) */ + +#endif + diff --git a/EQ2/source/depends/mariadb-10.1.19/include/mysql/psi/mysql_thread.h b/EQ2/source/depends/mariadb-10.1.19/include/mysql/psi/mysql_thread.h new file mode 100644 index 000000000..08dfeac37 --- /dev/null +++ b/EQ2/source/depends/mariadb-10.1.19/include/mysql/psi/mysql_thread.h @@ -0,0 +1,1271 @@ +/* Copyright (c) 2008, 2013, Oracle and/or its affiliates. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; version 2 of the License. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software Foundation, + 51 Franklin Street, Suite 500, Boston, MA 02110-1335 USA */ + +#ifndef MYSQL_THREAD_H +#define MYSQL_THREAD_H + +/** + @file mysql/psi/mysql_thread.h + Instrumentation helpers for mysys threads, mutexes, + read write locks and conditions. + This header file provides the necessary declarations + to use the mysys thread API with the performance schema instrumentation. + In some compilers (SunStudio), 'static inline' functions, when declared + but not used, are not optimized away (because they are unused) by default, + so that including a static inline function from a header file does + create unwanted dependencies, causing unresolved symbols at link time. + Other compilers, like gcc, optimize these dependencies by default. + + Since the instrumented APIs declared here are wrapper on top + of my_pthread / safemutex / etc APIs, + including mysql/psi/mysql_thread.h assumes that + the dependency on my_pthread and safemutex already exists. +*/ +/* + Note: there are several orthogonal dimensions here. + + Dimension 1: Instrumentation + HAVE_PSI_INTERFACE is defined when the instrumentation is compiled in. + This may happen both in debug or production builds. + + Dimension 2: Debug + SAFE_MUTEX is defined when debug is compiled in. + This may happen both with and without instrumentation. + + Dimension 3: Platform + Mutexes are implemented with one of: + - the pthread library + - fast mutexes + - window apis + This is implemented by various macro definitions in my_pthread.h + + This causes complexity with '#ifdef'-ery that can't be avoided. +*/ + +#include "mysql/psi/psi.h" + +/** + @defgroup Thread_instrumentation Thread Instrumentation + @ingroup Instrumentation_interface + @{ +*/ + +/** + An instrumented mutex structure. + @sa mysql_mutex_t +*/ +struct st_mysql_mutex +{ + /** The real mutex. */ +#ifdef SAFE_MUTEX + safe_mutex_t m_mutex; +#elif defined(MY_PTHREAD_FASTMUTEX) + my_pthread_fastmutex_t m_mutex; +#else + pthread_mutex_t m_mutex; +#endif + /** + The instrumentation hook. + Note that this hook is not conditionally defined, + for binary compatibility of the @c mysql_mutex_t interface. + */ + struct PSI_mutex *m_psi; +}; + +/** + Type of an instrumented mutex. + @c mysql_mutex_t is a drop-in replacement for @c pthread_mutex_t. + @sa mysql_mutex_assert_owner + @sa mysql_mutex_assert_not_owner + @sa mysql_mutex_init + @sa mysql_mutex_lock + @sa mysql_mutex_unlock + @sa mysql_mutex_destroy +*/ +typedef struct st_mysql_mutex mysql_mutex_t; + +/** + An instrumented rwlock structure. + @sa mysql_rwlock_t +*/ +struct st_mysql_rwlock +{ + /** The real rwlock */ + rw_lock_t m_rwlock; + /** + The instrumentation hook. + Note that this hook is not conditionally defined, + for binary compatibility of the @c mysql_rwlock_t interface. + */ + struct PSI_rwlock *m_psi; +}; + +/** + An instrumented prlock structure. + @sa mysql_prlock_t +*/ +struct st_mysql_prlock +{ + /** The real prlock */ + rw_pr_lock_t m_prlock; + /** + The instrumentation hook. + Note that this hook is not conditionally defined, + for binary compatibility of the @c mysql_rwlock_t interface. + */ + struct PSI_rwlock *m_psi; +}; + +/** + Type of an instrumented rwlock. + @c mysql_rwlock_t is a drop-in replacement for @c pthread_rwlock_t. + @sa mysql_rwlock_init + @sa mysql_rwlock_rdlock + @sa mysql_rwlock_tryrdlock + @sa mysql_rwlock_wrlock + @sa mysql_rwlock_trywrlock + @sa mysql_rwlock_unlock + @sa mysql_rwlock_destroy +*/ +typedef struct st_mysql_rwlock mysql_rwlock_t; + +/** + Type of an instrumented prlock. + A prlock is a read write lock that 'prefers readers' (pr). + @c mysql_prlock_t is a drop-in replacement for @c rw_pr_lock_t. + @sa mysql_prlock_init + @sa mysql_prlock_rdlock + @sa mysql_prlock_wrlock + @sa mysql_prlock_unlock + @sa mysql_prlock_destroy +*/ +typedef struct st_mysql_prlock mysql_prlock_t; + +/** + An instrumented cond structure. + @sa mysql_cond_t +*/ +struct st_mysql_cond +{ + /** The real condition */ + pthread_cond_t m_cond; + /** + The instrumentation hook. + Note that this hook is not conditionally defined, + for binary compatibility of the @c mysql_cond_t interface. + */ + struct PSI_cond *m_psi; +}; + +/** + Type of an instrumented condition. + @c mysql_cond_t is a drop-in replacement for @c pthread_cond_t. + @sa mysql_cond_init + @sa mysql_cond_wait + @sa mysql_cond_timedwait + @sa mysql_cond_signal + @sa mysql_cond_broadcast + @sa mysql_cond_destroy +*/ +typedef struct st_mysql_cond mysql_cond_t; + +/* + Consider the following code: + static inline void foo() { bar(); } + when foo() is never called. + + With gcc, foo() is a local static function, so the dependencies + are optimized away at compile time, and there is no dependency on bar(). + With other compilers (HP, Sun Studio), the function foo() implementation + is compiled, and bar() needs to be present to link. + + Due to the existing header dependencies in MySQL code, this header file + is sometime used when it is not needed, which in turn cause link failures + on some platforms. + The proper fix would be to cut these extra dependencies in the calling code. + DISABLE_MYSQL_THREAD_H is a work around to limit dependencies. + DISABLE_MYSQL_PRLOCK_H is similar, and is used to disable specifically + the prlock wrappers. +*/ +#ifndef DISABLE_MYSQL_THREAD_H + +/** + @def mysql_mutex_assert_owner(M) + Wrapper, to use safe_mutex_assert_owner with instrumented mutexes. + @c mysql_mutex_assert_owner is a drop-in replacement + for @c safe_mutex_assert_owner. +*/ +#define mysql_mutex_assert_owner(M) \ + safe_mutex_assert_owner(&(M)->m_mutex) + +/** + @def mysql_mutex_assert_not_owner(M) + Wrapper, to use safe_mutex_assert_not_owner with instrumented mutexes. + @c mysql_mutex_assert_not_owner is a drop-in replacement + for @c safe_mutex_assert_not_owner. +*/ +#define mysql_mutex_assert_not_owner(M) \ + safe_mutex_assert_not_owner(&(M)->m_mutex) + +#define mysql_mutex_setflags(M, F) \ + safe_mutex_setflags(&(M)->m_mutex, (F)) + +/** Wrappers for instrumented prlock objects. */ + +#define mysql_prlock_assert_write_owner(M) \ + rw_pr_lock_assert_write_owner(&(M)->m_prlock) + +#define mysql_prlock_assert_not_write_owner(M) \ + rw_pr_lock_assert_not_write_owner(&(M)->m_prlock) + +/** + @def mysql_mutex_register(P1, P2, P3) + Mutex registration. +*/ +#define mysql_mutex_register(P1, P2, P3) \ + inline_mysql_mutex_register(P1, P2, P3) + +/** + @def mysql_mutex_init(K, M, A) + Instrumented mutex_init. + @c mysql_mutex_init is a replacement for @c pthread_mutex_init. + @param K The PSI_mutex_key for this instrumented mutex + @param M The mutex to initialize + @param A Mutex attributes +*/ + +#ifdef HAVE_PSI_MUTEX_INTERFACE + #ifdef SAFE_MUTEX + #define mysql_mutex_init(K, M, A) \ + inline_mysql_mutex_init(K, M, A, #M, __FILE__, __LINE__) + #else + #define mysql_mutex_init(K, M, A) \ + inline_mysql_mutex_init(K, M, A) + #endif +#else + #ifdef SAFE_MUTEX + #define mysql_mutex_init(K, M, A) \ + inline_mysql_mutex_init(M, A, #M, __FILE__, __LINE__) + #else + #define mysql_mutex_init(K, M, A) \ + inline_mysql_mutex_init(M, A) + #endif +#endif + +/** + @def mysql_mutex_destroy(M) + Instrumented mutex_destroy. + @c mysql_mutex_destroy is a drop-in replacement + for @c pthread_mutex_destroy. +*/ +#ifdef SAFE_MUTEX + #define mysql_mutex_destroy(M) \ + inline_mysql_mutex_destroy(M, __FILE__, __LINE__) +#else + #define mysql_mutex_destroy(M) \ + inline_mysql_mutex_destroy(M) +#endif + +/** + @def mysql_mutex_lock(M) + Instrumented mutex_lock. + @c mysql_mutex_lock is a drop-in replacement for @c pthread_mutex_lock. + @param M The mutex to lock +*/ + +#if defined(SAFE_MUTEX) || defined (HAVE_PSI_MUTEX_INTERFACE) + #define mysql_mutex_lock(M) \ + inline_mysql_mutex_lock(M, __FILE__, __LINE__) +#else + #define mysql_mutex_lock(M) \ + inline_mysql_mutex_lock(M) +#endif + +/** + @def mysql_mutex_trylock(M) + Instrumented mutex_lock. + @c mysql_mutex_trylock is a drop-in replacement + for @c pthread_mutex_trylock. +*/ + +#if defined(SAFE_MUTEX) || defined (HAVE_PSI_MUTEX_INTERFACE) + #define mysql_mutex_trylock(M) \ + inline_mysql_mutex_trylock(M, __FILE__, __LINE__) +#else + #define mysql_mutex_trylock(M) \ + inline_mysql_mutex_trylock(M) +#endif + +/** + @def mysql_mutex_unlock(M) + Instrumented mutex_unlock. + @c mysql_mutex_unlock is a drop-in replacement for @c pthread_mutex_unlock. +*/ +#ifdef SAFE_MUTEX + #define mysql_mutex_unlock(M) \ + inline_mysql_mutex_unlock(M, __FILE__, __LINE__) +#else + #define mysql_mutex_unlock(M) \ + inline_mysql_mutex_unlock(M) +#endif + +/** + @def mysql_rwlock_register(P1, P2, P3) + Rwlock registration. +*/ +#define mysql_rwlock_register(P1, P2, P3) \ + inline_mysql_rwlock_register(P1, P2, P3) + +/** + @def mysql_rwlock_init(K, RW) + Instrumented rwlock_init. + @c mysql_rwlock_init is a replacement for @c pthread_rwlock_init. + Note that pthread_rwlockattr_t is not supported in MySQL. + @param K The PSI_rwlock_key for this instrumented rwlock + @param RW The rwlock to initialize +*/ +#ifdef HAVE_PSI_RWLOCK_INTERFACE + #define mysql_rwlock_init(K, RW) inline_mysql_rwlock_init(K, RW) +#else + #define mysql_rwlock_init(K, RW) inline_mysql_rwlock_init(RW) +#endif + +/** + @def mysql_prlock_init(K, RW) + Instrumented rw_pr_init. + @c mysql_prlock_init is a replacement for @c rw_pr_init. + @param K The PSI_rwlock_key for this instrumented prlock + @param RW The prlock to initialize +*/ +#ifdef HAVE_PSI_RWLOCK_INTERFACE + #define mysql_prlock_init(K, RW) inline_mysql_prlock_init(K, RW) +#else + #define mysql_prlock_init(K, RW) inline_mysql_prlock_init(RW) +#endif + +/** + @def mysql_rwlock_destroy(RW) + Instrumented rwlock_destroy. + @c mysql_rwlock_destroy is a drop-in replacement + for @c pthread_rwlock_destroy. +*/ +#define mysql_rwlock_destroy(RW) inline_mysql_rwlock_destroy(RW) + +/** + @def mysql_prlock_destroy(RW) + Instrumented rw_pr_destroy. + @c mysql_prlock_destroy is a drop-in replacement + for @c rw_pr_destroy. +*/ +#define mysql_prlock_destroy(RW) inline_mysql_prlock_destroy(RW) + +/** + @def mysql_rwlock_rdlock(RW) + Instrumented rwlock_rdlock. + @c mysql_rwlock_rdlock is a drop-in replacement + for @c pthread_rwlock_rdlock. +*/ +#ifdef HAVE_PSI_RWLOCK_INTERFACE + #define mysql_rwlock_rdlock(RW) \ + inline_mysql_rwlock_rdlock(RW, __FILE__, __LINE__) +#else + #define mysql_rwlock_rdlock(RW) \ + inline_mysql_rwlock_rdlock(RW) +#endif + +/** + @def mysql_prlock_rdlock(RW) + Instrumented rw_pr_rdlock. + @c mysql_prlock_rdlock is a drop-in replacement + for @c rw_pr_rdlock. +*/ +#ifdef HAVE_PSI_RWLOCK_INTERFACE + #define mysql_prlock_rdlock(RW) \ + inline_mysql_prlock_rdlock(RW, __FILE__, __LINE__) +#else + #define mysql_prlock_rdlock(RW) \ + inline_mysql_prlock_rdlock(RW) +#endif + +/** + @def mysql_rwlock_wrlock(RW) + Instrumented rwlock_wrlock. + @c mysql_rwlock_wrlock is a drop-in replacement + for @c pthread_rwlock_wrlock. +*/ +#ifdef HAVE_PSI_RWLOCK_INTERFACE + #define mysql_rwlock_wrlock(RW) \ + inline_mysql_rwlock_wrlock(RW, __FILE__, __LINE__) +#else + #define mysql_rwlock_wrlock(RW) \ + inline_mysql_rwlock_wrlock(RW) +#endif + +/** + @def mysql_prlock_wrlock(RW) + Instrumented rw_pr_wrlock. + @c mysql_prlock_wrlock is a drop-in replacement + for @c rw_pr_wrlock. +*/ +#ifdef HAVE_PSI_RWLOCK_INTERFACE + #define mysql_prlock_wrlock(RW) \ + inline_mysql_prlock_wrlock(RW, __FILE__, __LINE__) +#else + #define mysql_prlock_wrlock(RW) \ + inline_mysql_prlock_wrlock(RW) +#endif + +/** + @def mysql_rwlock_tryrdlock(RW) + Instrumented rwlock_tryrdlock. + @c mysql_rwlock_tryrdlock is a drop-in replacement + for @c pthread_rwlock_tryrdlock. +*/ +#ifdef HAVE_PSI_RWLOCK_INTERFACE + #define mysql_rwlock_tryrdlock(RW) \ + inline_mysql_rwlock_tryrdlock(RW, __FILE__, __LINE__) +#else + #define mysql_rwlock_tryrdlock(RW) \ + inline_mysql_rwlock_tryrdlock(RW) +#endif + +/** + @def mysql_rwlock_trywrlock(RW) + Instrumented rwlock_trywrlock. + @c mysql_rwlock_trywrlock is a drop-in replacement + for @c pthread_rwlock_trywrlock. +*/ +#ifdef HAVE_PSI_RWLOCK_INTERFACE + #define mysql_rwlock_trywrlock(RW) \ + inline_mysql_rwlock_trywrlock(RW, __FILE__, __LINE__) +#else + #define mysql_rwlock_trywrlock(RW) \ + inline_mysql_rwlock_trywrlock(RW) +#endif + +/** + @def mysql_rwlock_unlock(RW) + Instrumented rwlock_unlock. + @c mysql_rwlock_unlock is a drop-in replacement + for @c pthread_rwlock_unlock. +*/ +#define mysql_rwlock_unlock(RW) inline_mysql_rwlock_unlock(RW) + +/** + @def mysql_prlock_unlock(RW) + Instrumented rw_pr_unlock. + @c mysql_prlock_unlock is a drop-in replacement + for @c rw_pr_unlock. +*/ +#define mysql_prlock_unlock(RW) inline_mysql_prlock_unlock(RW) + +/** + @def mysql_cond_register(P1, P2, P3) + Cond registration. +*/ +#define mysql_cond_register(P1, P2, P3) \ + inline_mysql_cond_register(P1, P2, P3) + +/** + @def mysql_cond_init(K, C, A) + Instrumented cond_init. + @c mysql_cond_init is a replacement for @c pthread_cond_init. + @param C The cond to initialize + @param K The PSI_cond_key for this instrumented cond + @param A Condition attributes +*/ +#ifdef HAVE_PSI_COND_INTERFACE + #define mysql_cond_init(K, C, A) inline_mysql_cond_init(K, C, A) +#else + #define mysql_cond_init(K, C, A) inline_mysql_cond_init(C, A) +#endif + +/** + @def mysql_cond_destroy(C) + Instrumented cond_destroy. + @c mysql_cond_destroy is a drop-in replacement for @c pthread_cond_destroy. +*/ +#define mysql_cond_destroy(C) inline_mysql_cond_destroy(C) + +/** + @def mysql_cond_wait(C) + Instrumented cond_wait. + @c mysql_cond_wait is a drop-in replacement for @c pthread_cond_wait. +*/ +#ifdef HAVE_PSI_COND_INTERFACE + #define mysql_cond_wait(C, M) \ + inline_mysql_cond_wait(C, M, __FILE__, __LINE__) +#else + #define mysql_cond_wait(C, M) \ + inline_mysql_cond_wait(C, M) +#endif + +/** + @def mysql_cond_timedwait(C, M, W) + Instrumented cond_timedwait. + @c mysql_cond_timedwait is a drop-in replacement + for @c pthread_cond_timedwait. +*/ +#ifdef HAVE_PSI_COND_INTERFACE + #define mysql_cond_timedwait(C, M, W) \ + inline_mysql_cond_timedwait(C, M, W, __FILE__, __LINE__) +#else + #define mysql_cond_timedwait(C, M, W) \ + inline_mysql_cond_timedwait(C, M, W) +#endif + +/** + @def mysql_cond_signal(C) + Instrumented cond_signal. + @c mysql_cond_signal is a drop-in replacement for @c pthread_cond_signal. +*/ +#define mysql_cond_signal(C) inline_mysql_cond_signal(C) + +/** + @def mysql_cond_broadcast(C) + Instrumented cond_broadcast. + @c mysql_cond_broadcast is a drop-in replacement + for @c pthread_cond_broadcast. +*/ +#define mysql_cond_broadcast(C) inline_mysql_cond_broadcast(C) + +/** + @def mysql_thread_register(P1, P2, P3) + Thread registration. +*/ +#define mysql_thread_register(P1, P2, P3) \ + inline_mysql_thread_register(P1, P2, P3) + +/** + @def mysql_thread_create(K, P1, P2, P3, P4) + Instrumented pthread_create. + This function creates both the thread instrumentation and a thread. + @c mysql_thread_create is a replacement for @c pthread_create. + The parameter P4 (or, if it is NULL, P1) will be used as the + instrumented thread "indentity". + Providing a P1 / P4 parameter with a different value for each call + will on average improve performances, since this thread identity value + is used internally to randomize access to data and prevent contention. + This is optional, and the improvement is not guaranteed, only statistical. + @param K The PSI_thread_key for this instrumented thread + @param P1 pthread_create parameter 1 + @param P2 pthread_create parameter 2 + @param P3 pthread_create parameter 3 + @param P4 pthread_create parameter 4 +*/ +#ifdef HAVE_PSI_THREAD_INTERFACE + #define mysql_thread_create(K, P1, P2, P3, P4) \ + inline_mysql_thread_create(K, P1, P2, P3, P4) +#else + #define mysql_thread_create(K, P1, P2, P3, P4) \ + pthread_create(P1, P2, P3, P4) +#endif + +/** + @def mysql_thread_set_psi_id(I) + Set the thread indentifier for the instrumentation. + @param I The thread identifier +*/ +#ifdef HAVE_PSI_THREAD_INTERFACE + #define mysql_thread_set_psi_id(I) inline_mysql_thread_set_psi_id(I) +#else + #define mysql_thread_set_psi_id(I) do {} while (0) +#endif + +static inline void inline_mysql_mutex_register( +#ifdef HAVE_PSI_MUTEX_INTERFACE + const char *category, + PSI_mutex_info *info, + int count +#else + const char *category __attribute__ ((unused)), + void *info __attribute__ ((unused)), + int count __attribute__ ((unused)) +#endif +) +{ +#ifdef HAVE_PSI_MUTEX_INTERFACE + PSI_MUTEX_CALL(register_mutex)(category, info, count); +#endif +} + +static inline int inline_mysql_mutex_init( +#ifdef HAVE_PSI_MUTEX_INTERFACE + PSI_mutex_key key, +#endif + mysql_mutex_t *that, + const pthread_mutexattr_t *attr +#ifdef SAFE_MUTEX + , const char *src_name, const char *src_file, uint src_line +#endif + ) +{ +#ifdef HAVE_PSI_MUTEX_INTERFACE + that->m_psi= PSI_MUTEX_CALL(init_mutex)(key, &that->m_mutex); +#else + that->m_psi= NULL; +#endif +#ifdef SAFE_MUTEX + return safe_mutex_init(&that->m_mutex, attr, src_name, src_file, src_line); +#elif defined(MY_PTHREAD_FASTMUTEX) + return my_pthread_fastmutex_init(&that->m_mutex, attr); +#else + return pthread_mutex_init(&that->m_mutex, attr); +#endif +} + +static inline int inline_mysql_mutex_destroy( + mysql_mutex_t *that +#ifdef SAFE_MUTEX + , const char *src_file, uint src_line +#endif + ) +{ +#ifdef HAVE_PSI_MUTEX_INTERFACE + if (that->m_psi != NULL) + { + PSI_MUTEX_CALL(destroy_mutex)(that->m_psi); + that->m_psi= NULL; + } +#endif +#ifdef SAFE_MUTEX + return safe_mutex_destroy(&that->m_mutex, src_file, src_line); +#elif defined(MY_PTHREAD_FASTMUTEX) + return pthread_mutex_destroy(&that->m_mutex.mutex); +#else + return pthread_mutex_destroy(&that->m_mutex); +#endif +} + +static inline int inline_mysql_mutex_lock( + mysql_mutex_t *that +#if defined(SAFE_MUTEX) || defined (HAVE_PSI_MUTEX_INTERFACE) + , const char *src_file, uint src_line +#endif + ) +{ + int result; + +#ifdef HAVE_PSI_MUTEX_INTERFACE + if (that->m_psi != NULL) + { + /* Instrumentation start */ + PSI_mutex_locker *locker; + PSI_mutex_locker_state state; + locker= PSI_MUTEX_CALL(start_mutex_wait)(&state, that->m_psi, + PSI_MUTEX_LOCK, src_file, src_line); + + /* Instrumented code */ +#ifdef SAFE_MUTEX + result= safe_mutex_lock(&that->m_mutex, FALSE, src_file, src_line); +#elif defined(MY_PTHREAD_FASTMUTEX) + result= my_pthread_fastmutex_lock(&that->m_mutex); +#else + result= pthread_mutex_lock(&that->m_mutex); +#endif + + /* Instrumentation end */ + if (locker != NULL) + PSI_MUTEX_CALL(end_mutex_wait)(locker, result); + + return result; + } +#endif + + /* Non instrumented code */ +#ifdef SAFE_MUTEX + result= safe_mutex_lock(&that->m_mutex, FALSE, src_file, src_line); +#elif defined(MY_PTHREAD_FASTMUTEX) + result= my_pthread_fastmutex_lock(&that->m_mutex); +#else + result= pthread_mutex_lock(&that->m_mutex); +#endif + + return result; +} + +static inline int inline_mysql_mutex_trylock( + mysql_mutex_t *that +#if defined(SAFE_MUTEX) || defined (HAVE_PSI_MUTEX_INTERFACE) + , const char *src_file, uint src_line +#endif + ) +{ + int result; + +#ifdef HAVE_PSI_MUTEX_INTERFACE + if (that->m_psi != NULL) + { + /* Instrumentation start */ + PSI_mutex_locker *locker; + PSI_mutex_locker_state state; + locker= PSI_MUTEX_CALL(start_mutex_wait)(&state, that->m_psi, + PSI_MUTEX_TRYLOCK, src_file, src_line); + + /* Instrumented code */ +#ifdef SAFE_MUTEX + result= safe_mutex_lock(&that->m_mutex, TRUE, src_file, src_line); +#elif defined(MY_PTHREAD_FASTMUTEX) + result= pthread_mutex_trylock(&that->m_mutex.mutex); +#else + result= pthread_mutex_trylock(&that->m_mutex); +#endif + + /* Instrumentation end */ + if (locker != NULL) + PSI_MUTEX_CALL(end_mutex_wait)(locker, result); + + return result; + } +#endif + + /* Non instrumented code */ +#ifdef SAFE_MUTEX + result= safe_mutex_lock(&that->m_mutex, TRUE, src_file, src_line); +#elif defined(MY_PTHREAD_FASTMUTEX) + result= pthread_mutex_trylock(&that->m_mutex.mutex); +#else + result= pthread_mutex_trylock(&that->m_mutex); +#endif + + return result; +} + +static inline int inline_mysql_mutex_unlock( + mysql_mutex_t *that +#ifdef SAFE_MUTEX + , const char *src_file, uint src_line +#endif + ) +{ + int result; + +#ifdef HAVE_PSI_MUTEX_INTERFACE + if (that->m_psi != NULL) + PSI_MUTEX_CALL(unlock_mutex)(that->m_psi); +#endif + +#ifdef SAFE_MUTEX + result= safe_mutex_unlock(&that->m_mutex, src_file, src_line); +#elif defined(MY_PTHREAD_FASTMUTEX) + result= pthread_mutex_unlock(&that->m_mutex.mutex); +#else + result= pthread_mutex_unlock(&that->m_mutex); +#endif + + return result; +} + +static inline void inline_mysql_rwlock_register( +#ifdef HAVE_PSI_RWLOCK_INTERFACE + const char *category, + PSI_rwlock_info *info, + int count +#else + const char *category __attribute__ ((unused)), + void *info __attribute__ ((unused)), + int count __attribute__ ((unused)) +#endif +) +{ +#ifdef HAVE_PSI_RWLOCK_INTERFACE + PSI_RWLOCK_CALL(register_rwlock)(category, info, count); +#endif +} + +static inline int inline_mysql_rwlock_init( +#ifdef HAVE_PSI_RWLOCK_INTERFACE + PSI_rwlock_key key, +#endif + mysql_rwlock_t *that) +{ +#ifdef HAVE_PSI_RWLOCK_INTERFACE + that->m_psi= PSI_RWLOCK_CALL(init_rwlock)(key, &that->m_rwlock); +#else + that->m_psi= NULL; +#endif + /* + pthread_rwlockattr_t is not used in MySQL. + */ + return my_rwlock_init(&that->m_rwlock, NULL); +} + +#ifndef DISABLE_MYSQL_PRLOCK_H +static inline int inline_mysql_prlock_init( +#ifdef HAVE_PSI_RWLOCK_INTERFACE + PSI_rwlock_key key, +#endif + mysql_prlock_t *that) +{ +#ifdef HAVE_PSI_RWLOCK_INTERFACE + that->m_psi= PSI_RWLOCK_CALL(init_rwlock)(key, &that->m_prlock); +#else + that->m_psi= NULL; +#endif + return rw_pr_init(&that->m_prlock); +} +#endif + +static inline int inline_mysql_rwlock_destroy( + mysql_rwlock_t *that) +{ +#ifdef HAVE_PSI_RWLOCK_INTERFACE + if (that->m_psi != NULL) + { + PSI_RWLOCK_CALL(destroy_rwlock)(that->m_psi); + that->m_psi= NULL; + } +#endif + return rwlock_destroy(&that->m_rwlock); +} + +#ifndef DISABLE_MYSQL_PRLOCK_H +static inline int inline_mysql_prlock_destroy( + mysql_prlock_t *that) +{ +#ifdef HAVE_PSI_RWLOCK_INTERFACE + if (that->m_psi != NULL) + { + PSI_RWLOCK_CALL(destroy_rwlock)(that->m_psi); + that->m_psi= NULL; + } +#endif + return rw_pr_destroy(&that->m_prlock); +} +#endif + +static inline int inline_mysql_rwlock_rdlock( + mysql_rwlock_t *that +#ifdef HAVE_PSI_RWLOCK_INTERFACE + , const char *src_file, uint src_line +#endif + ) +{ + int result; + +#ifdef HAVE_PSI_RWLOCK_INTERFACE + if (that->m_psi != NULL) + { + /* Instrumentation start */ + PSI_rwlock_locker *locker; + PSI_rwlock_locker_state state; + locker= PSI_RWLOCK_CALL(start_rwlock_rdwait)(&state, that->m_psi, + PSI_RWLOCK_READLOCK, src_file, src_line); + + /* Instrumented code */ + result= rw_rdlock(&that->m_rwlock); + + /* Instrumentation end */ + if (locker != NULL) + PSI_RWLOCK_CALL(end_rwlock_rdwait)(locker, result); + + return result; + } +#endif + + /* Non instrumented code */ + result= rw_rdlock(&that->m_rwlock); + + return result; +} + +#ifndef DISABLE_MYSQL_PRLOCK_H +static inline int inline_mysql_prlock_rdlock( + mysql_prlock_t *that +#ifdef HAVE_PSI_RWLOCK_INTERFACE + , const char *src_file, uint src_line +#endif + ) +{ + int result; + +#ifdef HAVE_PSI_RWLOCK_INTERFACE + if (that->m_psi != NULL) + { + /* Instrumentation start */ + PSI_rwlock_locker *locker; + PSI_rwlock_locker_state state; + locker= PSI_RWLOCK_CALL(start_rwlock_rdwait)(&state, that->m_psi, + PSI_RWLOCK_READLOCK, src_file, src_line); + + /* Instrumented code */ + result= rw_pr_rdlock(&that->m_prlock); + + /* Instrumentation end */ + if (locker != NULL) + PSI_RWLOCK_CALL(end_rwlock_rdwait)(locker, result); + + return result; + } +#endif + + /* Non instrumented code */ + result= rw_pr_rdlock(&that->m_prlock); + + return result; +} +#endif + +static inline int inline_mysql_rwlock_wrlock( + mysql_rwlock_t *that +#ifdef HAVE_PSI_RWLOCK_INTERFACE + , const char *src_file, uint src_line +#endif + ) +{ + int result; + +#ifdef HAVE_PSI_RWLOCK_INTERFACE + if (that->m_psi != NULL) + { + /* Instrumentation start */ + PSI_rwlock_locker *locker; + PSI_rwlock_locker_state state; + locker= PSI_RWLOCK_CALL(start_rwlock_wrwait)(&state, that->m_psi, + PSI_RWLOCK_WRITELOCK, src_file, src_line); + + /* Instrumented code */ + result= rw_wrlock(&that->m_rwlock); + + /* Instrumentation end */ + if (locker != NULL) + PSI_RWLOCK_CALL(end_rwlock_wrwait)(locker, result); + + return result; + } +#endif + + /* Non instrumented code */ + result= rw_wrlock(&that->m_rwlock); + + return result; +} + +#ifndef DISABLE_MYSQL_PRLOCK_H +static inline int inline_mysql_prlock_wrlock( + mysql_prlock_t *that +#ifdef HAVE_PSI_RWLOCK_INTERFACE + , const char *src_file, uint src_line +#endif + ) +{ + int result; + +#ifdef HAVE_PSI_RWLOCK_INTERFACE + if (that->m_psi != NULL) + { + /* Instrumentation start */ + PSI_rwlock_locker *locker; + PSI_rwlock_locker_state state; + locker= PSI_RWLOCK_CALL(start_rwlock_wrwait)(&state, that->m_psi, + PSI_RWLOCK_WRITELOCK, src_file, src_line); + + /* Instrumented code */ + result= rw_pr_wrlock(&that->m_prlock); + + /* Instrumentation end */ + if (locker != NULL) + PSI_RWLOCK_CALL(end_rwlock_wrwait)(locker, result); + + return result; + } +#endif + + /* Non instrumented code */ + result= rw_pr_wrlock(&that->m_prlock); + + return result; +} +#endif + +static inline int inline_mysql_rwlock_tryrdlock( + mysql_rwlock_t *that +#ifdef HAVE_PSI_RWLOCK_INTERFACE + , const char *src_file, uint src_line +#endif + ) +{ + int result; + +#ifdef HAVE_PSI_RWLOCK_INTERFACE + if (that->m_psi != NULL) + { + /* Instrumentation start */ + PSI_rwlock_locker *locker; + PSI_rwlock_locker_state state; + locker= PSI_RWLOCK_CALL(start_rwlock_rdwait)(&state, that->m_psi, + PSI_RWLOCK_TRYREADLOCK, src_file, src_line); + + /* Instrumented code */ + result= rw_tryrdlock(&that->m_rwlock); + + /* Instrumentation end */ + if (locker != NULL) + PSI_RWLOCK_CALL(end_rwlock_rdwait)(locker, result); + + return result; + } +#endif + + /* Non instrumented code */ + result= rw_tryrdlock(&that->m_rwlock); + + return result; +} + +static inline int inline_mysql_rwlock_trywrlock( + mysql_rwlock_t *that +#ifdef HAVE_PSI_RWLOCK_INTERFACE + , const char *src_file, uint src_line +#endif + ) +{ + int result; + +#ifdef HAVE_PSI_RWLOCK_INTERFACE + if (that->m_psi != NULL) + { + /* Instrumentation start */ + PSI_rwlock_locker *locker; + PSI_rwlock_locker_state state; + locker= PSI_RWLOCK_CALL(start_rwlock_wrwait)(&state, that->m_psi, + PSI_RWLOCK_TRYWRITELOCK, src_file, src_line); + + /* Instrumented code */ + result= rw_trywrlock(&that->m_rwlock); + + /* Instrumentation end */ + if (locker != NULL) + PSI_RWLOCK_CALL(end_rwlock_wrwait)(locker, result); + + return result; + } +#endif + + /* Non instrumented code */ + result= rw_trywrlock(&that->m_rwlock); + + return result; +} + +static inline int inline_mysql_rwlock_unlock( + mysql_rwlock_t *that) +{ + int result; +#ifdef HAVE_PSI_RWLOCK_INTERFACE + if (that->m_psi != NULL) + PSI_RWLOCK_CALL(unlock_rwlock)(that->m_psi); +#endif + result= rw_unlock(&that->m_rwlock); + return result; +} + +#ifndef DISABLE_MYSQL_PRLOCK_H +static inline int inline_mysql_prlock_unlock( + mysql_prlock_t *that) +{ + int result; +#ifdef HAVE_PSI_RWLOCK_INTERFACE + if (that->m_psi != NULL) + PSI_RWLOCK_CALL(unlock_rwlock)(that->m_psi); +#endif + result= rw_pr_unlock(&that->m_prlock); + return result; +} +#endif + +static inline void inline_mysql_cond_register( +#ifdef HAVE_PSI_COND_INTERFACE + const char *category, + PSI_cond_info *info, + int count +#else + const char *category __attribute__ ((unused)), + void *info __attribute__ ((unused)), + int count __attribute__ ((unused)) +#endif +) +{ +#ifdef HAVE_PSI_COND_INTERFACE + PSI_COND_CALL(register_cond)(category, info, count); +#endif +} + +static inline int inline_mysql_cond_init( +#ifdef HAVE_PSI_COND_INTERFACE + PSI_cond_key key, +#endif + mysql_cond_t *that, + const pthread_condattr_t *attr) +{ +#ifdef HAVE_PSI_COND_INTERFACE + that->m_psi= PSI_COND_CALL(init_cond)(key, &that->m_cond); +#else + that->m_psi= NULL; +#endif + return pthread_cond_init(&that->m_cond, attr); +} + +static inline int inline_mysql_cond_destroy( + mysql_cond_t *that) +{ +#ifdef HAVE_PSI_COND_INTERFACE + if (that->m_psi != NULL) + { + PSI_COND_CALL(destroy_cond)(that->m_psi); + that->m_psi= NULL; + } +#endif + return pthread_cond_destroy(&that->m_cond); +} + +static inline int inline_mysql_cond_wait( + mysql_cond_t *that, + mysql_mutex_t *mutex +#ifdef HAVE_PSI_COND_INTERFACE + , const char *src_file, uint src_line +#endif + ) +{ + int result; + +#ifdef HAVE_PSI_COND_INTERFACE + if (that->m_psi != NULL) + { + /* Instrumentation start */ + PSI_cond_locker *locker; + PSI_cond_locker_state state; + locker= PSI_COND_CALL(start_cond_wait)(&state, that->m_psi, mutex->m_psi, + PSI_COND_WAIT, src_file, src_line); + + /* Instrumented code */ + result= my_cond_wait(&that->m_cond, &mutex->m_mutex); + + /* Instrumentation end */ + if (locker != NULL) + PSI_COND_CALL(end_cond_wait)(locker, result); + + return result; + } +#endif + + /* Non instrumented code */ + result= my_cond_wait(&that->m_cond, &mutex->m_mutex); + + return result; +} + +static inline int inline_mysql_cond_timedwait( + mysql_cond_t *that, + mysql_mutex_t *mutex, + const struct timespec *abstime +#ifdef HAVE_PSI_COND_INTERFACE + , const char *src_file, uint src_line +#endif + ) +{ + int result; + +#ifdef HAVE_PSI_COND_INTERFACE + if (that->m_psi != NULL) + { + /* Instrumentation start */ + PSI_cond_locker *locker; + PSI_cond_locker_state state; + locker= PSI_COND_CALL(start_cond_wait)(&state, that->m_psi, mutex->m_psi, + PSI_COND_TIMEDWAIT, src_file, src_line); + + /* Instrumented code */ + result= my_cond_timedwait(&that->m_cond, &mutex->m_mutex, abstime); + + /* Instrumentation end */ + if (locker != NULL) + PSI_COND_CALL(end_cond_wait)(locker, result); + + return result; + } +#endif + + /* Non instrumented code */ + result= my_cond_timedwait(&that->m_cond, &mutex->m_mutex, abstime); + + return result; +} + +static inline int inline_mysql_cond_signal( + mysql_cond_t *that) +{ + int result; +#ifdef HAVE_PSI_COND_INTERFACE + if (that->m_psi != NULL) + PSI_COND_CALL(signal_cond)(that->m_psi); +#endif + result= pthread_cond_signal(&that->m_cond); + return result; +} + +static inline int inline_mysql_cond_broadcast( + mysql_cond_t *that) +{ + int result; +#ifdef HAVE_PSI_COND_INTERFACE + if (that->m_psi != NULL) + PSI_COND_CALL(broadcast_cond)(that->m_psi); +#endif + result= pthread_cond_broadcast(&that->m_cond); + return result; +} + +static inline void inline_mysql_thread_register( +#ifdef HAVE_PSI_THREAD_INTERFACE + const char *category, + PSI_thread_info *info, + int count +#else + const char *category __attribute__ ((unused)), + void *info __attribute__ ((unused)), + int count __attribute__ ((unused)) +#endif +) +{ +#ifdef HAVE_PSI_THREAD_INTERFACE + PSI_THREAD_CALL(register_thread)(category, info, count); +#endif +} + +#ifdef HAVE_PSI_THREAD_INTERFACE +static inline int inline_mysql_thread_create( + PSI_thread_key key, + pthread_t *thread, const pthread_attr_t *attr, + void *(*start_routine)(void*), void *arg) +{ + int result; + result= PSI_THREAD_CALL(spawn_thread)(key, thread, attr, start_routine, arg); + return result; +} + +static inline void inline_mysql_thread_set_psi_id(ulong id) +{ + struct PSI_thread *psi= PSI_THREAD_CALL(get_thread)(); + PSI_THREAD_CALL(set_thread_id)(psi, id); +} +#endif + +#endif /* DISABLE_MYSQL_THREAD_H */ + +/** @} (end of group Thread_instrumentation) */ + +#endif + diff --git a/EQ2/source/depends/mariadb-10.1.19/include/mysql/psi/psi.h b/EQ2/source/depends/mariadb-10.1.19/include/mysql/psi/psi.h new file mode 100644 index 000000000..7fcff89c8 --- /dev/null +++ b/EQ2/source/depends/mariadb-10.1.19/include/mysql/psi/psi.h @@ -0,0 +1,2408 @@ +/* Copyright (c) 2008, 2015, Oracle and/or its affiliates. All rights reserved. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; version 2 of the License. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software Foundation, + 51 Franklin Street, Suite 500, Boston, MA 02110-1335 USA */ + +#ifndef MYSQL_PERFORMANCE_SCHEMA_INTERFACE_H +#define MYSQL_PERFORMANCE_SCHEMA_INTERFACE_H + +#ifdef EMBEDDED_LIBRARY +#define DISABLE_PSI_MUTEX +#define DISABLE_PSI_RWLOCK +#define DISABLE_PSI_COND +#define DISABLE_PSI_FILE +#define DISABLE_PSI_TABLE +#define DISABLE_PSI_SOCKET +#define DISABLE_PSI_STAGE +#define DISABLE_PSI_STATEMENT +#define DISABLE_PSI_IDLE +#define DISABLE_PSI_STATEMENT_DIGEST +#endif /* EMBEDDED_LIBRARY */ + +#ifndef MY_GLOBAL_INCLUDED +/* + Make sure a .c or .cc file contains an include to my_global.h first. + When this include is missing, all the #ifdef HAVE_XXX have no effect, + and the resulting binary won't build, or won't link, + or will crash at runtime + since various structures will have different binary definitions. +*/ +#error "You must include my_global.h in the code for the build to be correct." +#endif + +C_MODE_START + +struct TABLE_SHARE; + +struct sql_digest_storage; + +/** + @file mysql/psi/psi.h + Performance schema instrumentation interface. + + @defgroup Instrumentation_interface Instrumentation Interface + @ingroup Performance_schema + @{ +*/ + +/** + Interface for an instrumented mutex. + This is an opaque structure. +*/ +struct PSI_mutex; +typedef struct PSI_mutex PSI_mutex; + +/** + Interface for an instrumented rwlock. + This is an opaque structure. +*/ +struct PSI_rwlock; +typedef struct PSI_rwlock PSI_rwlock; + +/** + Interface for an instrumented condition. + This is an opaque structure. +*/ +struct PSI_cond; +typedef struct PSI_cond PSI_cond; + +/** + Interface for an instrumented table share. + This is an opaque structure. +*/ +struct PSI_table_share; +typedef struct PSI_table_share PSI_table_share; + +/** + Interface for an instrumented table handle. + This is an opaque structure. +*/ +struct PSI_table; +typedef struct PSI_table PSI_table; + +/** + Interface for an instrumented thread. + This is an opaque structure. +*/ +struct PSI_thread; +typedef struct PSI_thread PSI_thread; + +/** + Interface for an instrumented file handle. + This is an opaque structure. +*/ +struct PSI_file; +typedef struct PSI_file PSI_file; + +/** + Interface for an instrumented socket descriptor. + This is an opaque structure. +*/ +struct PSI_socket; +typedef struct PSI_socket PSI_socket; + +/** + Interface for an instrumented table operation. + This is an opaque structure. +*/ +struct PSI_table_locker; +typedef struct PSI_table_locker PSI_table_locker; + +/** + Interface for an instrumented statement. + This is an opaque structure. +*/ +struct PSI_statement_locker; +typedef struct PSI_statement_locker PSI_statement_locker; + +/** + Interface for an instrumented idle operation. + This is an opaque structure. +*/ +struct PSI_idle_locker; +typedef struct PSI_idle_locker PSI_idle_locker; + +/** + Interface for an instrumented statement digest operation. + This is an opaque structure. +*/ +struct PSI_digest_locker; +typedef struct PSI_digest_locker PSI_digest_locker; + +/** Entry point for the performance schema interface. */ +struct PSI_bootstrap +{ + /** + ABI interface finder. + Calling this method with an interface version number returns either + an instance of the ABI for this version, or NULL. + @param version the interface version number to find + @return a versioned interface (PSI_v1, PSI_v2 or PSI) + @sa PSI_VERSION_1 + @sa PSI_v1 + @sa PSI_VERSION_2 + @sa PSI_v2 + @sa PSI_CURRENT_VERSION + @sa PSI + */ + void* (*get_interface)(int version); +}; +typedef struct PSI_bootstrap PSI_bootstrap; + +#ifdef HAVE_PSI_INTERFACE + +/** + @def DISABLE_PSI_MUTEX + Compiling option to disable the mutex instrumentation. + This option is mostly intended to be used during development, + when doing special builds with only a subset of the performance schema instrumentation, + for code analysis / profiling / performance tuning of a specific instrumentation alone. + For this reason, DISABLE_PSI_MUTEX is not advertised in the cmake general options. + To disable mutexes, add -DDISABLE_PSI_MUTEX to CFLAGS. + @sa DISABLE_PSI_RWLOCK + @sa DISABLE_PSI_COND + @sa DISABLE_PSI_FILE + @sa DISABLE_PSI_THREAD + @sa DISABLE_PSI_TABLE + @sa DISABLE_PSI_STAGE + @sa DISABLE_PSI_STATEMENT + @sa DISABLE_PSI_SOCKET + @sa DISABLE_PSI_IDLE +*/ + +#ifndef DISABLE_PSI_MUTEX +#define HAVE_PSI_MUTEX_INTERFACE +#endif + +/** + @def DISABLE_PSI_RWLOCK + Compiling option to disable the rwlock instrumentation. + @sa DISABLE_PSI_MUTEX +*/ + +#ifndef DISABLE_PSI_RWLOCK +#define HAVE_PSI_RWLOCK_INTERFACE +#endif + +/** + @def DISABLE_PSI_COND + Compiling option to disable the cond instrumentation. + @sa DISABLE_PSI_MUTEX +*/ + +#ifndef DISABLE_PSI_COND +#define HAVE_PSI_COND_INTERFACE +#endif + +/** + @def DISABLE_PSI_FILE + Compiling option to disable the file instrumentation. + @sa DISABLE_PSI_MUTEX +*/ + +#ifndef DISABLE_PSI_FILE +#define HAVE_PSI_FILE_INTERFACE +#endif + +/** + @def DISABLE_PSI_THREAD + Compiling option to disable the thread instrumentation. + @sa DISABLE_PSI_MUTEX +*/ +#ifndef DISABLE_PSI_THREAD +#define HAVE_PSI_THREAD_INTERFACE +#endif + +/** + @def DISABLE_PSI_TABLE + Compiling option to disable the table instrumentation. + @sa DISABLE_PSI_MUTEX +*/ + +#ifndef DISABLE_PSI_TABLE +#define HAVE_PSI_TABLE_INTERFACE +#endif + +/** + @def DISABLE_PSI_STAGE + Compiling option to disable the stage instrumentation. + @sa DISABLE_PSI_MUTEX +*/ + +#ifndef DISABLE_PSI_STAGE +#define HAVE_PSI_STAGE_INTERFACE +#endif + +/** + @def DISABLE_PSI_STATEMENT + Compiling option to disable the statement instrumentation. + @sa DISABLE_PSI_MUTEX +*/ + +#ifndef DISABLE_PSI_STATEMENT +#define HAVE_PSI_STATEMENT_INTERFACE +#endif + +/** + @def DISABLE_PSI_STATEMENT_DIGEST + Compiling option to disable the statement digest instrumentation. +*/ + +#ifndef DISABLE_PSI_STATEMENT +#ifndef DISABLE_PSI_STATEMENT_DIGEST +#define HAVE_PSI_STATEMENT_DIGEST_INTERFACE +#endif +#endif + +/** + @def DISABLE_PSI_SOCKET + Compiling option to disable the statement instrumentation. + @sa DISABLE_PSI_MUTEX +*/ + +#ifndef DISABLE_PSI_SOCKET +#define HAVE_PSI_SOCKET_INTERFACE +#endif + +/** + @def DISABLE_PSI_IDLE + Compiling option to disable the idle instrumentation. + @sa DISABLE_PSI_MUTEX +*/ + +#ifndef DISABLE_PSI_IDLE +#define HAVE_PSI_IDLE_INTERFACE +#endif + +/** + @def PSI_VERSION_1 + Performance Schema Interface number for version 1. + This version is supported. +*/ +#define PSI_VERSION_1 1 + +/** + @def PSI_VERSION_2 + Performance Schema Interface number for version 2. + This version is not implemented, it's a placeholder. +*/ +#define PSI_VERSION_2 2 + +/** + @def PSI_CURRENT_VERSION + Performance Schema Interface number for the most recent version. + The most current version is @c PSI_VERSION_1 +*/ +#define PSI_CURRENT_VERSION 1 + +#ifndef USE_PSI_2 +#ifndef USE_PSI_1 +#define USE_PSI_1 +#endif +#endif + +/** + Interface for an instrumented mutex operation. + This is an opaque structure. +*/ +struct PSI_mutex_locker; +typedef struct PSI_mutex_locker PSI_mutex_locker; + +/** + Interface for an instrumented rwlock operation. + This is an opaque structure. +*/ +struct PSI_rwlock_locker; +typedef struct PSI_rwlock_locker PSI_rwlock_locker; + +/** + Interface for an instrumented condition operation. + This is an opaque structure. +*/ +struct PSI_cond_locker; +typedef struct PSI_cond_locker PSI_cond_locker; + +/** + Interface for an instrumented file operation. + This is an opaque structure. +*/ +struct PSI_file_locker; +typedef struct PSI_file_locker PSI_file_locker; + +/** + Interface for an instrumented socket operation. + This is an opaque structure. +*/ +struct PSI_socket_locker; +typedef struct PSI_socket_locker PSI_socket_locker; + +/** Operation performed on an instrumented mutex. */ +enum PSI_mutex_operation +{ + /** Lock. */ + PSI_MUTEX_LOCK= 0, + /** Lock attempt. */ + PSI_MUTEX_TRYLOCK= 1 +}; +typedef enum PSI_mutex_operation PSI_mutex_operation; + +/** Operation performed on an instrumented rwlock. */ +enum PSI_rwlock_operation +{ + /** Read lock. */ + PSI_RWLOCK_READLOCK= 0, + /** Write lock. */ + PSI_RWLOCK_WRITELOCK= 1, + /** Read lock attempt. */ + PSI_RWLOCK_TRYREADLOCK= 2, + /** Write lock attempt. */ + PSI_RWLOCK_TRYWRITELOCK= 3 +}; +typedef enum PSI_rwlock_operation PSI_rwlock_operation; + +/** Operation performed on an instrumented condition. */ +enum PSI_cond_operation +{ + /** Wait. */ + PSI_COND_WAIT= 0, + /** Wait, with timeout. */ + PSI_COND_TIMEDWAIT= 1 +}; +typedef enum PSI_cond_operation PSI_cond_operation; + +/** Operation performed on an instrumented file. */ +enum PSI_file_operation +{ + /** File creation, as in @c create(). */ + PSI_FILE_CREATE= 0, + /** Temporary file creation, as in @c create_temp_file(). */ + PSI_FILE_CREATE_TMP= 1, + /** File open, as in @c open(). */ + PSI_FILE_OPEN= 2, + /** File open, as in @c fopen(). */ + PSI_FILE_STREAM_OPEN= 3, + /** File close, as in @c close(). */ + PSI_FILE_CLOSE= 4, + /** File close, as in @c fclose(). */ + PSI_FILE_STREAM_CLOSE= 5, + /** + Generic file read, such as @c fgets(), @c fgetc(), @c fread(), @c read(), + @c pread(). + */ + PSI_FILE_READ= 6, + /** + Generic file write, such as @c fputs(), @c fputc(), @c fprintf(), + @c vfprintf(), @c fwrite(), @c write(), @c pwrite(). + */ + PSI_FILE_WRITE= 7, + /** Generic file seek, such as @c fseek() or @c seek(). */ + PSI_FILE_SEEK= 8, + /** Generic file tell, such as @c ftell() or @c tell(). */ + PSI_FILE_TELL= 9, + /** File flush, as in @c fflush(). */ + PSI_FILE_FLUSH= 10, + /** File stat, as in @c stat(). */ + PSI_FILE_STAT= 11, + /** File stat, as in @c fstat(). */ + PSI_FILE_FSTAT= 12, + /** File chsize, as in @c my_chsize(). */ + PSI_FILE_CHSIZE= 13, + /** File delete, such as @c my_delete() or @c my_delete_with_symlink(). */ + PSI_FILE_DELETE= 14, + /** File rename, such as @c my_rename() or @c my_rename_with_symlink(). */ + PSI_FILE_RENAME= 15, + /** File sync, as in @c fsync() or @c my_sync(). */ + PSI_FILE_SYNC= 16 +}; +typedef enum PSI_file_operation PSI_file_operation; + +/** IO operation performed on an instrumented table. */ +enum PSI_table_io_operation +{ + /** Row fetch. */ + PSI_TABLE_FETCH_ROW= 0, + /** Row write. */ + PSI_TABLE_WRITE_ROW= 1, + /** Row update. */ + PSI_TABLE_UPDATE_ROW= 2, + /** Row delete. */ + PSI_TABLE_DELETE_ROW= 3 +}; +typedef enum PSI_table_io_operation PSI_table_io_operation; + +/** Lock operation performed on an instrumented table. */ +enum PSI_table_lock_operation +{ + /** Table lock, in the server layer. */ + PSI_TABLE_LOCK= 0, + /** Table lock, in the storage engine layer. */ + PSI_TABLE_EXTERNAL_LOCK= 1 +}; +typedef enum PSI_table_lock_operation PSI_table_lock_operation; + +/** State of an instrumented socket. */ +enum PSI_socket_state +{ + /** Idle, waiting for the next command. */ + PSI_SOCKET_STATE_IDLE= 1, + /** Active, executing a command. */ + PSI_SOCKET_STATE_ACTIVE= 2 +}; +typedef enum PSI_socket_state PSI_socket_state; + +/** Operation performed on an instrumented socket. */ +enum PSI_socket_operation +{ + /** Socket creation, as in @c socket() or @c socketpair(). */ + PSI_SOCKET_CREATE= 0, + /** Socket connection, as in @c connect(), @c listen() and @c accept(). */ + PSI_SOCKET_CONNECT= 1, + /** Socket bind, as in @c bind(), @c getsockname() and @c getpeername(). */ + PSI_SOCKET_BIND= 2, + /** Socket close, as in @c shutdown(). */ + PSI_SOCKET_CLOSE= 3, + /** Socket send, @c send(). */ + PSI_SOCKET_SEND= 4, + /** Socket receive, @c recv(). */ + PSI_SOCKET_RECV= 5, + /** Socket send, @c sendto(). */ + PSI_SOCKET_SENDTO= 6, + /** Socket receive, @c recvfrom). */ + PSI_SOCKET_RECVFROM= 7, + /** Socket send, @c sendmsg(). */ + PSI_SOCKET_SENDMSG= 8, + /** Socket receive, @c recvmsg(). */ + PSI_SOCKET_RECVMSG= 9, + /** Socket seek, such as @c fseek() or @c seek(). */ + PSI_SOCKET_SEEK= 10, + /** Socket options, as in @c getsockopt() and @c setsockopt(). */ + PSI_SOCKET_OPT= 11, + /** Socket status, as in @c sockatmark() and @c isfdtype(). */ + PSI_SOCKET_STAT= 12, + /** Socket shutdown, as in @c shutdown(). */ + PSI_SOCKET_SHUTDOWN= 13, + /** Socket select, as in @c select() and @c poll(). */ + PSI_SOCKET_SELECT= 14 +}; +typedef enum PSI_socket_operation PSI_socket_operation; + +/** + Instrumented mutex key. + To instrument a mutex, a mutex key must be obtained using @c register_mutex. + Using a zero key always disable the instrumentation. +*/ +typedef unsigned int PSI_mutex_key; + +/** + Instrumented rwlock key. + To instrument a rwlock, a rwlock key must be obtained + using @c register_rwlock. + Using a zero key always disable the instrumentation. +*/ +typedef unsigned int PSI_rwlock_key; + +/** + Instrumented cond key. + To instrument a condition, a condition key must be obtained + using @c register_cond. + Using a zero key always disable the instrumentation. +*/ +typedef unsigned int PSI_cond_key; + +/** + Instrumented thread key. + To instrument a thread, a thread key must be obtained + using @c register_thread. + Using a zero key always disable the instrumentation. +*/ +typedef unsigned int PSI_thread_key; + +/** + Instrumented file key. + To instrument a file, a file key must be obtained using @c register_file. + Using a zero key always disable the instrumentation. +*/ +typedef unsigned int PSI_file_key; + +/** + Instrumented stage key. + To instrument a stage, a stage key must be obtained using @c register_stage. + Using a zero key always disable the instrumentation. +*/ +typedef unsigned int PSI_stage_key; + +/** + Instrumented statement key. + To instrument a statement, a statement key must be obtained using @c register_statement. + Using a zero key always disable the instrumentation. +*/ +typedef unsigned int PSI_statement_key; + +/** + Instrumented socket key. + To instrument a socket, a socket key must be obtained using @c register_socket. + Using a zero key always disable the instrumentation. +*/ +typedef unsigned int PSI_socket_key; + +/** + @def USE_PSI_1 + Define USE_PSI_1 to use the interface version 1. +*/ + +/** + @def USE_PSI_2 + Define USE_PSI_2 to use the interface version 2. +*/ + +/** + @def HAVE_PSI_1 + Define HAVE_PSI_1 if the interface version 1 needs to be compiled in. +*/ + +/** + @def HAVE_PSI_2 + Define HAVE_PSI_2 if the interface version 2 needs to be compiled in. +*/ + +/** + Global flag. + This flag indicate that an instrumentation point is a global variable, + or a singleton. +*/ +#define PSI_FLAG_GLOBAL (1 << 0) + +/** + Global flag. + This flag indicate that an instrumentation point is a general placeholder, + that can mutate into a more specific instrumentation point. +*/ +#define PSI_FLAG_MUTABLE (1 << 1) + +#ifdef USE_PSI_1 +#define HAVE_PSI_1 +#endif + +#ifdef HAVE_PSI_1 + +/** + @defgroup Group_PSI_v1 Application Binary Interface, version 1 + @ingroup Instrumentation_interface + @{ +*/ + +/** + Mutex information. + @since PSI_VERSION_1 + This structure is used to register an instrumented mutex. +*/ +struct PSI_mutex_info_v1 +{ + /** + Pointer to the key assigned to the registered mutex. + */ + PSI_mutex_key *m_key; + /** + The name of the mutex to register. + */ + const char *m_name; + /** + The flags of the mutex to register. + @sa PSI_FLAG_GLOBAL + */ + int m_flags; +}; + +/** + Rwlock information. + @since PSI_VERSION_1 + This structure is used to register an instrumented rwlock. +*/ +struct PSI_rwlock_info_v1 +{ + /** + Pointer to the key assigned to the registered rwlock. + */ + PSI_rwlock_key *m_key; + /** + The name of the rwlock to register. + */ + const char *m_name; + /** + The flags of the rwlock to register. + @sa PSI_FLAG_GLOBAL + */ + int m_flags; +}; + +/** + Condition information. + @since PSI_VERSION_1 + This structure is used to register an instrumented cond. +*/ +struct PSI_cond_info_v1 +{ + /** + Pointer to the key assigned to the registered cond. + */ + PSI_cond_key *m_key; + /** + The name of the cond to register. + */ + const char *m_name; + /** + The flags of the cond to register. + @sa PSI_FLAG_GLOBAL + */ + int m_flags; +}; + +/** + Thread instrument information. + @since PSI_VERSION_1 + This structure is used to register an instrumented thread. +*/ +struct PSI_thread_info_v1 +{ + /** + Pointer to the key assigned to the registered thread. + */ + PSI_thread_key *m_key; + /** + The name of the thread instrument to register. + */ + const char *m_name; + /** + The flags of the thread to register. + @sa PSI_FLAG_GLOBAL + */ + int m_flags; +}; + +/** + File instrument information. + @since PSI_VERSION_1 + This structure is used to register an instrumented file. +*/ +struct PSI_file_info_v1 +{ + /** + Pointer to the key assigned to the registered file. + */ + PSI_file_key *m_key; + /** + The name of the file instrument to register. + */ + const char *m_name; + /** + The flags of the file instrument to register. + @sa PSI_FLAG_GLOBAL + */ + int m_flags; +}; + +/** + Stage instrument information. + @since PSI_VERSION_1 + This structure is used to register an instrumented stage. +*/ +struct PSI_stage_info_v1 +{ + /** The registered stage key. */ + PSI_stage_key m_key; + /** The name of the stage instrument to register. */ + const char *m_name; + /** The flags of the stage instrument to register. */ + int m_flags; +}; + +/** + Statement instrument information. + @since PSI_VERSION_1 + This structure is used to register an instrumented statement. +*/ +struct PSI_statement_info_v1 +{ + /** The registered statement key. */ + PSI_statement_key m_key; + /** The name of the statement instrument to register. */ + const char *m_name; + /** The flags of the statement instrument to register. */ + int m_flags; +}; + +/** + Socket instrument information. + @since PSI_VERSION_1 + This structure is used to register an instrumented socket. +*/ +struct PSI_socket_info_v1 +{ + /** + Pointer to the key assigned to the registered socket. + */ + PSI_socket_key *m_key; + /** + The name of the socket instrument to register. + */ + const char *m_name; + /** + The flags of the socket instrument to register. + @sa PSI_FLAG_GLOBAL + */ + int m_flags; +}; + +/** + State data storage for @c start_idle_wait_v1_t. + This structure provide temporary storage to an idle locker. + The content of this structure is considered opaque, + the fields are only hints of what an implementation + of the psi interface can use. + This memory is provided by the instrumented code for performance reasons. + @sa start_idle_wait_v1_t. +*/ +struct PSI_idle_locker_state_v1 +{ + /** Internal state. */ + uint m_flags; + /** Current thread. */ + struct PSI_thread *m_thread; + /** Timer start. */ + ulonglong m_timer_start; + /** Timer function. */ + ulonglong (*m_timer)(void); + /** Internal data. */ + void *m_wait; +}; + +/** + State data storage for @c start_mutex_wait_v1_t. + This structure provide temporary storage to a mutex locker. + The content of this structure is considered opaque, + the fields are only hints of what an implementation + of the psi interface can use. + This memory is provided by the instrumented code for performance reasons. + @sa start_mutex_wait_v1_t +*/ +struct PSI_mutex_locker_state_v1 +{ + /** Internal state. */ + uint m_flags; + /** Current operation. */ + enum PSI_mutex_operation m_operation; + /** Current mutex. */ + struct PSI_mutex *m_mutex; + /** Current thread. */ + struct PSI_thread *m_thread; + /** Timer start. */ + ulonglong m_timer_start; + /** Timer function. */ + ulonglong (*m_timer)(void); + /** Internal data. */ + void *m_wait; +}; + +/** + State data storage for @c start_rwlock_rdwait_v1_t, @c start_rwlock_wrwait_v1_t. + This structure provide temporary storage to a rwlock locker. + The content of this structure is considered opaque, + the fields are only hints of what an implementation + of the psi interface can use. + This memory is provided by the instrumented code for performance reasons. + @sa start_rwlock_rdwait_v1_t + @sa start_rwlock_wrwait_v1_t +*/ +struct PSI_rwlock_locker_state_v1 +{ + /** Internal state. */ + uint m_flags; + /** Current operation. */ + enum PSI_rwlock_operation m_operation; + /** Current rwlock. */ + struct PSI_rwlock *m_rwlock; + /** Current thread. */ + struct PSI_thread *m_thread; + /** Timer start. */ + ulonglong m_timer_start; + /** Timer function. */ + ulonglong (*m_timer)(void); + /** Internal data. */ + void *m_wait; +}; + +/** + State data storage for @c start_cond_wait_v1_t. + This structure provide temporary storage to a condition locker. + The content of this structure is considered opaque, + the fields are only hints of what an implementation + of the psi interface can use. + This memory is provided by the instrumented code for performance reasons. + @sa start_cond_wait_v1_t +*/ +struct PSI_cond_locker_state_v1 +{ + /** Internal state. */ + uint m_flags; + /** Current operation. */ + enum PSI_cond_operation m_operation; + /** Current condition. */ + struct PSI_cond *m_cond; + /** Current mutex. */ + struct PSI_mutex *m_mutex; + /** Current thread. */ + struct PSI_thread *m_thread; + /** Timer start. */ + ulonglong m_timer_start; + /** Timer function. */ + ulonglong (*m_timer)(void); + /** Internal data. */ + void *m_wait; +}; + +/** + State data storage for @c get_thread_file_name_locker_v1_t. + This structure provide temporary storage to a file locker. + The content of this structure is considered opaque, + the fields are only hints of what an implementation + of the psi interface can use. + This memory is provided by the instrumented code for performance reasons. + @sa get_thread_file_name_locker_v1_t + @sa get_thread_file_stream_locker_v1_t + @sa get_thread_file_descriptor_locker_v1_t +*/ +struct PSI_file_locker_state_v1 +{ + /** Internal state. */ + uint m_flags; + /** Current operation. */ + enum PSI_file_operation m_operation; + /** Current file. */ + struct PSI_file *m_file; + /** Current file name. */ + const char *m_name; + /** Current file class. */ + void *m_class; + /** Current thread. */ + struct PSI_thread *m_thread; + /** Operation number of bytes. */ + size_t m_number_of_bytes; + /** Timer start. */ + ulonglong m_timer_start; + /** Timer function. */ + ulonglong (*m_timer)(void); + /** Internal data. */ + void *m_wait; +}; + +/** + State data storage for @c start_table_io_wait_v1_t, + @c start_table_lock_wait_v1_t. + This structure provide temporary storage to a table locker. + The content of this structure is considered opaque, + the fields are only hints of what an implementation + of the psi interface can use. + This memory is provided by the instrumented code for performance reasons. + @sa start_table_io_wait_v1_t + @sa start_table_lock_wait_v1_t +*/ +struct PSI_table_locker_state_v1 +{ + /** Internal state. */ + uint m_flags; + /** Current io operation. */ + enum PSI_table_io_operation m_io_operation; + /** Current table handle. */ + struct PSI_table *m_table; + /** Current table share. */ + struct PSI_table_share *m_table_share; + /** Current thread. */ + struct PSI_thread *m_thread; + /** Timer start. */ + ulonglong m_timer_start; + /** Timer function. */ + ulonglong (*m_timer)(void); + /** Internal data. */ + void *m_wait; + /** + Implementation specific. + For table io, the table io index. + For table lock, the lock type. + */ + uint m_index; +}; + +/* Duplicate of NAME_LEN, to avoid dependency on mysql_com.h */ +#define PSI_SCHEMA_NAME_LEN (64 * 3) + +/** + State data storage for @c get_thread_statement_locker_v1_t, + @c get_thread_statement_locker_v1_t. + This structure provide temporary storage to a statement locker. + The content of this structure is considered opaque, + the fields are only hints of what an implementation + of the psi interface can use. + This memory is provided by the instrumented code for performance reasons. + @sa get_thread_statement_locker_v1_t +*/ +struct PSI_statement_locker_state_v1 +{ + /** Discarded flag. */ + my_bool m_discarded; + /** Metric, no index used flag. */ + uchar m_no_index_used; + /** Metric, no good index used flag. */ + uchar m_no_good_index_used; + /** Internal state. */ + uint m_flags; + /** Instrumentation class. */ + void *m_class; + /** Current thread. */ + struct PSI_thread *m_thread; + /** Timer start. */ + ulonglong m_timer_start; + /** Timer function. */ + ulonglong (*m_timer)(void); + /** Internal data. */ + void *m_statement; + /** Locked time. */ + ulonglong m_lock_time; + /** Rows sent. */ + ulonglong m_rows_sent; + /** Rows examined. */ + ulonglong m_rows_examined; + /** Metric, temporary tables created on disk. */ + ulong m_created_tmp_disk_tables; + /** Metric, temporary tables created. */ + ulong m_created_tmp_tables; + /** Metric, number of select full join. */ + ulong m_select_full_join; + /** Metric, number of select full range join. */ + ulong m_select_full_range_join; + /** Metric, number of select range. */ + ulong m_select_range; + /** Metric, number of select range check. */ + ulong m_select_range_check; + /** Metric, number of select scan. */ + ulong m_select_scan; + /** Metric, number of sort merge passes. */ + ulong m_sort_merge_passes; + /** Metric, number of sort merge. */ + ulong m_sort_range; + /** Metric, number of sort rows. */ + ulong m_sort_rows; + /** Metric, number of sort scans. */ + ulong m_sort_scan; + /** Statement digest. */ + const struct sql_digest_storage *m_digest; + /** Current schema name. */ + char m_schema_name[PSI_SCHEMA_NAME_LEN]; + /** Length in bytes of @c m_schema_name. */ + uint m_schema_name_length; + /** Statement character set number. */ + uint m_cs_number; +}; + +/** + State data storage for @c start_socket_wait_v1_t. + This structure provide temporary storage to a socket locker. + The content of this structure is considered opaque, + the fields are only hints of what an implementation + of the psi interface can use. + This memory is provided by the instrumented code for performance reasons. + @sa start_socket_wait_v1_t +*/ +struct PSI_socket_locker_state_v1 +{ + /** Internal state. */ + uint m_flags; + /** Current socket. */ + struct PSI_socket *m_socket; + /** Current thread. */ + struct PSI_thread *m_thread; + /** Operation number of bytes. */ + size_t m_number_of_bytes; + /** Timer start. */ + ulonglong m_timer_start; + /** Timer function. */ + ulonglong (*m_timer)(void); + /** Current operation. */ + enum PSI_socket_operation m_operation; + /** Source file. */ + const char* m_src_file; + /** Source line number. */ + int m_src_line; + /** Internal data. */ + void *m_wait; +}; + +/* Using typedef to make reuse between PSI_v1 and PSI_v2 easier later. */ + +/** + Mutex registration API. + @param category a category name (typically a plugin name) + @param info an array of mutex info to register + @param count the size of the info array +*/ +typedef void (*register_mutex_v1_t) + (const char *category, struct PSI_mutex_info_v1 *info, int count); + +/** + Rwlock registration API. + @param category a category name (typically a plugin name) + @param info an array of rwlock info to register + @param count the size of the info array +*/ +typedef void (*register_rwlock_v1_t) + (const char *category, struct PSI_rwlock_info_v1 *info, int count); + +/** + Cond registration API. + @param category a category name (typically a plugin name) + @param info an array of cond info to register + @param count the size of the info array +*/ +typedef void (*register_cond_v1_t) + (const char *category, struct PSI_cond_info_v1 *info, int count); + +/** + Thread registration API. + @param category a category name (typically a plugin name) + @param info an array of thread info to register + @param count the size of the info array +*/ +typedef void (*register_thread_v1_t) + (const char *category, struct PSI_thread_info_v1 *info, int count); + +/** + File registration API. + @param category a category name (typically a plugin name) + @param info an array of file info to register + @param count the size of the info array +*/ +typedef void (*register_file_v1_t) + (const char *category, struct PSI_file_info_v1 *info, int count); + +/** + Stage registration API. + @param category a category name + @param info an array of stage info to register + @param count the size of the info array +*/ +typedef void (*register_stage_v1_t) + (const char *category, struct PSI_stage_info_v1 **info, int count); + +/** + Statement registration API. + @param category a category name + @param info an array of stage info to register + @param count the size of the info array +*/ +typedef void (*register_statement_v1_t) + (const char *category, struct PSI_statement_info_v1 *info, int count); + +/** + Socket registration API. + @param category a category name (typically a plugin name) + @param info an array of socket info to register + @param count the size of the info array +*/ +typedef void (*register_socket_v1_t) + (const char *category, struct PSI_socket_info_v1 *info, int count); + +/** + Mutex instrumentation initialisation API. + @param key the registered mutex key + @param identity the address of the mutex itself + @return an instrumented mutex +*/ +typedef struct PSI_mutex* (*init_mutex_v1_t) + (PSI_mutex_key key, const void *identity); + +/** + Mutex instrumentation destruction API. + @param mutex the mutex to destroy +*/ +typedef void (*destroy_mutex_v1_t)(struct PSI_mutex *mutex); + +/** + Rwlock instrumentation initialisation API. + @param key the registered rwlock key + @param identity the address of the rwlock itself + @return an instrumented rwlock +*/ +typedef struct PSI_rwlock* (*init_rwlock_v1_t) + (PSI_rwlock_key key, const void *identity); + +/** + Rwlock instrumentation destruction API. + @param rwlock the rwlock to destroy +*/ +typedef void (*destroy_rwlock_v1_t)(struct PSI_rwlock *rwlock); + +/** + Cond instrumentation initialisation API. + @param key the registered key + @param identity the address of the rwlock itself + @return an instrumented cond +*/ +typedef struct PSI_cond* (*init_cond_v1_t) + (PSI_cond_key key, const void *identity); + +/** + Cond instrumentation destruction API. + @param cond the rcond to destroy +*/ +typedef void (*destroy_cond_v1_t)(struct PSI_cond *cond); + +/** + Socket instrumentation initialisation API. + @param key the registered mutex key + @param socket descriptor + @param addr the socket ip address + @param addr_len length of socket ip address + @return an instrumented socket +*/ +typedef struct PSI_socket* (*init_socket_v1_t) + (PSI_socket_key key, const my_socket *fd, + const struct sockaddr *addr, socklen_t addr_len); + +/** + socket instrumentation destruction API. + @param socket the socket to destroy +*/ +typedef void (*destroy_socket_v1_t)(struct PSI_socket *socket); + +/** + Acquire a table share instrumentation. + @param temporary True for temporary tables + @param share The SQL layer table share + @return a table share instrumentation, or NULL +*/ +typedef struct PSI_table_share* (*get_table_share_v1_t) + (my_bool temporary, struct TABLE_SHARE *share); + +/** + Release a table share. + @param info the table share to release +*/ +typedef void (*release_table_share_v1_t)(struct PSI_table_share *share); + +/** + Drop a table share. + @param temporary True for temporary tables + @param schema_name the table schema name + @param schema_name_length the table schema name length + @param table_name the table name + @param table_name_length the table name length +*/ +typedef void (*drop_table_share_v1_t) + (my_bool temporary, const char *schema_name, int schema_name_length, + const char *table_name, int table_name_length); + +/** + Open an instrumentation table handle. + @param share the table to open + @param identity table handle identity + @return a table handle, or NULL +*/ +typedef struct PSI_table* (*open_table_v1_t) + (struct PSI_table_share *share, const void *identity); + +/** + Unbind a table handle from the current thread. + This operation happens when an opened table is added to the open table cache. + @param table the table to unbind +*/ +typedef void (*unbind_table_v1_t) + (struct PSI_table *table); + +/** + Rebind a table handle to the current thread. + This operation happens when a table from the open table cache + is reused for a thread. + @param table the table to unbind +*/ +typedef PSI_table* (*rebind_table_v1_t) + (PSI_table_share *share, const void *identity, PSI_table *table); + +/** + Close an instrumentation table handle. + Note that the table handle is invalid after this call. + @param table the table handle to close +*/ +typedef void (*close_table_v1_t)(struct PSI_table *table); + +/** + Create a file instrumentation for a created file. + This method does not create the file itself, but is used to notify the + instrumentation interface that a file was just created. + @param key the file instrumentation key for this file + @param name the file name + @param file the file handle +*/ +typedef void (*create_file_v1_t)(PSI_file_key key, const char *name, + File file); + +/** + Spawn a thread. + This method creates a new thread, with instrumentation. + @param key the instrumentation key for this thread + @param thread the resulting thread + @param attr the thread attributes + @param start_routine the thread start routine + @param arg the thread start routine argument +*/ +typedef int (*spawn_thread_v1_t)(PSI_thread_key key, + pthread_t *thread, + const pthread_attr_t *attr, + void *(*start_routine)(void*), void *arg); + +/** + Create instrumentation for a thread. + @param key the registered key + @param identity an address typical of the thread + @return an instrumented thread +*/ +typedef struct PSI_thread* (*new_thread_v1_t) + (PSI_thread_key key, const void *identity, ulonglong thread_id); + +/** + Assign an id to an instrumented thread. + @param thread the instrumented thread + @param id the id to assign +*/ +typedef void (*set_thread_id_v1_t)(struct PSI_thread *thread, + ulonglong id); + +/** + Get the instrumentation for the running thread. + For this function to return a result, + the thread instrumentation must have been attached to the + running thread using @c set_thread() + @return the instrumentation for the running thread +*/ +typedef struct PSI_thread* (*get_thread_v1_t)(void); + +/** + Assign a user name to the instrumented thread. + @param user the user name + @param user_len the user name length +*/ +typedef void (*set_thread_user_v1_t)(const char *user, int user_len); + +/** + Assign a user name and host name to the instrumented thread. + @param user the user name + @param user_len the user name length + @param host the host name + @param host_len the host name length +*/ +typedef void (*set_thread_user_host_v1_t)(const char *user, int user_len, + const char *host, int host_len); + +/** + Assign a current database to the instrumented thread. + @param db the database name + @param db_len the database name length +*/ +typedef void (*set_thread_db_v1_t)(const char* db, int db_len); + +/** + Assign a current command to the instrumented thread. + @param command the current command +*/ +typedef void (*set_thread_command_v1_t)(int command); + +/** + Assign a start time to the instrumented thread. + @param start_time the thread start time +*/ +typedef void (*set_thread_start_time_v1_t)(time_t start_time); + +/** + Assign a state to the instrumented thread. + @param state the thread state +*/ +typedef void (*set_thread_state_v1_t)(const char* state); + +/** + Assign a process info to the instrumented thread. + @param info the process into string + @param info_len the process into string length +*/ +typedef void (*set_thread_info_v1_t)(const char* info, uint info_len); + +/** + Attach a thread instrumentation to the running thread. + In case of thread pools, this method should be called when + a worker thread picks a work item and runs it. + Also, this method should be called if the instrumented code does not + keep the pointer returned by @c new_thread() and relies on @c get_thread() + instead. + @param thread the thread instrumentation +*/ +typedef void (*set_thread_v1_t)(struct PSI_thread *thread); + +/** Delete the current thread instrumentation. */ +typedef void (*delete_current_thread_v1_t)(void); + +/** Delete a thread instrumentation. */ +typedef void (*delete_thread_v1_t)(struct PSI_thread *thread); + +/** + Get a file instrumentation locker, for opening or creating a file. + @param state data storage for the locker + @param key the file instrumentation key + @param op the operation to perform + @param name the file name + @param identity a pointer representative of this file. + @return a file locker, or NULL +*/ +typedef struct PSI_file_locker* (*get_thread_file_name_locker_v1_t) + (struct PSI_file_locker_state_v1 *state, + PSI_file_key key, enum PSI_file_operation op, const char *name, + const void *identity); + +/** + Get a file stream instrumentation locker. + @param state data storage for the locker + @param file the file stream to access + @param op the operation to perform + @return a file locker, or NULL +*/ +typedef struct PSI_file_locker* (*get_thread_file_stream_locker_v1_t) + (struct PSI_file_locker_state_v1 *state, + struct PSI_file *file, enum PSI_file_operation op); + +/** + Get a file instrumentation locker. + @param state data storage for the locker + @param file the file descriptor to access + @param op the operation to perform + @return a file locker, or NULL +*/ +typedef struct PSI_file_locker* (*get_thread_file_descriptor_locker_v1_t) + (struct PSI_file_locker_state_v1 *state, + File file, enum PSI_file_operation op); + +/** + Record a mutex instrumentation unlock event. + @param mutex the mutex instrumentation +*/ +typedef void (*unlock_mutex_v1_t) + (struct PSI_mutex *mutex); + +/** + Record a rwlock instrumentation unlock event. + @param rwlock the rwlock instrumentation +*/ +typedef void (*unlock_rwlock_v1_t) + (struct PSI_rwlock *rwlock); + +/** + Record a condition instrumentation signal event. + @param cond the cond instrumentation +*/ +typedef void (*signal_cond_v1_t) + (struct PSI_cond *cond); + +/** + Record a condition instrumentation broadcast event. + @param cond the cond instrumentation +*/ +typedef void (*broadcast_cond_v1_t) + (struct PSI_cond *cond); + +typedef struct PSI_idle_locker* (*start_idle_wait_v1_t) + (struct PSI_idle_locker_state_v1 *state, const char *src_file, uint src_line); + +typedef void (*end_idle_wait_v1_t) + (struct PSI_idle_locker *locker); + +/** + Record a mutex instrumentation wait start event. + @param state data storage for the locker + @param mutex the instrumented mutex to lock + @param op the operation to perform + @param file the source file name + @param line the source line number + @return a mutex locker, or NULL +*/ +typedef struct PSI_mutex_locker* (*start_mutex_wait_v1_t) + (struct PSI_mutex_locker_state_v1 *state, + struct PSI_mutex *mutex, + enum PSI_mutex_operation op, + const char *src_file, uint src_line); + +/** + Record a mutex instrumentation wait end event. + @param locker a thread locker for the running thread + @param rc the wait operation return code +*/ +typedef void (*end_mutex_wait_v1_t) + (struct PSI_mutex_locker *locker, int rc); + +/** + Record a rwlock instrumentation read wait start event. + @param locker a thread locker for the running thread + @param must must block: 1 for lock, 0 for trylock +*/ +typedef struct PSI_rwlock_locker* (*start_rwlock_rdwait_v1_t) + (struct PSI_rwlock_locker_state_v1 *state, + struct PSI_rwlock *rwlock, + enum PSI_rwlock_operation op, + const char *src_file, uint src_line); + +/** + Record a rwlock instrumentation read wait end event. + @param locker a thread locker for the running thread + @param rc the wait operation return code +*/ +typedef void (*end_rwlock_rdwait_v1_t) + (struct PSI_rwlock_locker *locker, int rc); + +/** + Record a rwlock instrumentation write wait start event. + @param locker a thread locker for the running thread + @param must must block: 1 for lock, 0 for trylock +*/ +typedef struct PSI_rwlock_locker* (*start_rwlock_wrwait_v1_t) + (struct PSI_rwlock_locker_state_v1 *state, + struct PSI_rwlock *rwlock, + enum PSI_rwlock_operation op, + const char *src_file, uint src_line); + +/** + Record a rwlock instrumentation write wait end event. + @param locker a thread locker for the running thread + @param rc the wait operation return code +*/ +typedef void (*end_rwlock_wrwait_v1_t) + (struct PSI_rwlock_locker *locker, int rc); + +/** + Record a condition instrumentation wait start event. + @param locker a thread locker for the running thread + @param must must block: 1 for wait, 0 for timedwait +*/ +typedef struct PSI_cond_locker* (*start_cond_wait_v1_t) + (struct PSI_cond_locker_state_v1 *state, + struct PSI_cond *cond, + struct PSI_mutex *mutex, + enum PSI_cond_operation op, + const char *src_file, uint src_line); + +/** + Record a condition instrumentation wait end event. + @param locker a thread locker for the running thread + @param rc the wait operation return code +*/ +typedef void (*end_cond_wait_v1_t) + (struct PSI_cond_locker *locker, int rc); + +/** + Record a table instrumentation io wait start event. + @param locker a table locker for the running thread + @param file the source file name + @param line the source line number +*/ +typedef struct PSI_table_locker* (*start_table_io_wait_v1_t) + (struct PSI_table_locker_state_v1 *state, + struct PSI_table *table, + enum PSI_table_io_operation op, + uint index, + const char *src_file, uint src_line); + +/** + Record a table instrumentation io wait end event. + @param locker a table locker for the running thread +*/ +typedef void (*end_table_io_wait_v1_t)(struct PSI_table_locker *locker); + +/** + Record a table instrumentation lock wait start event. + @param locker a table locker for the running thread + @param file the source file name + @param line the source line number +*/ +typedef struct PSI_table_locker* (*start_table_lock_wait_v1_t) + (struct PSI_table_locker_state_v1 *state, + struct PSI_table *table, + enum PSI_table_lock_operation op, + ulong flags, + const char *src_file, uint src_line); + +/** + Record a table instrumentation lock wait end event. + @param locker a table locker for the running thread +*/ +typedef void (*end_table_lock_wait_v1_t)(struct PSI_table_locker *locker); + +/** + Start a file instrumentation open operation. + @param locker the file locker + @param op the operation to perform + @param src_file the source file name + @param src_line the source line number +*/ +typedef void (*start_file_open_wait_v1_t) + (struct PSI_file_locker *locker, const char *src_file, uint src_line); + +/** + End a file instrumentation open operation, for file streams. + @param locker the file locker. + @param result the opened file (NULL indicates failure, non NULL success). + @return an instrumented file handle +*/ +typedef struct PSI_file* (*end_file_open_wait_v1_t) + (struct PSI_file_locker *locker, void *result); + +/** + End a file instrumentation open operation, for non stream files. + @param locker the file locker. + @param file the file number assigned by open() or create() for this file. +*/ +typedef void (*end_file_open_wait_and_bind_to_descriptor_v1_t) + (struct PSI_file_locker *locker, File file); + +/** + Record a file instrumentation start event. + @param locker a file locker for the running thread + @param op file operation to be performed + @param count the number of bytes requested, or 0 if not applicable + @param src_file the source file name + @param src_line the source line number +*/ +typedef void (*start_file_wait_v1_t) + (struct PSI_file_locker *locker, size_t count, + const char *src_file, uint src_line); + +/** + Record a file instrumentation end event. + Note that for file close operations, the instrumented file handle + associated with the file (which was provided to obtain a locker) + is invalid after this call. + @param locker a file locker for the running thread + @param count the number of bytes actually used in the operation, + or 0 if not applicable, or -1 if the operation failed + @sa get_thread_file_name_locker + @sa get_thread_file_stream_locker + @sa get_thread_file_descriptor_locker +*/ +typedef void (*end_file_wait_v1_t) + (struct PSI_file_locker *locker, size_t count); + +/** + Start a file instrumentation close operation. + @param locker the file locker + @param op the operation to perform + @param src_file the source file name + @param src_line the source line number +*/ +typedef void (*start_file_close_wait_v1_t) + (struct PSI_file_locker *locker, const char *src_file, uint src_line); + +/** + End a file instrumentation close operation. + @param locker the file locker. + @param rc the close operation return code (0 for success). + @return an instrumented file handle +*/ +typedef void (*end_file_close_wait_v1_t) + (struct PSI_file_locker *locker, int rc); + +/** + Start a new stage, and implicitly end the previous stage. + @param key the key of the new stage + @param src_file the source file name + @param src_line the source line number +*/ +typedef void (*start_stage_v1_t) + (PSI_stage_key key, const char *src_file, int src_line); + +/** End the current stage. */ +typedef void (*end_stage_v1_t) (void); + +/** + Get a statement instrumentation locker. + @param state data storage for the locker + @param key the statement instrumentation key + @param charset client character set + @return a statement locker, or NULL +*/ +typedef struct PSI_statement_locker* (*get_thread_statement_locker_v1_t) + (struct PSI_statement_locker_state_v1 *state, + PSI_statement_key key, const void *charset); + +/** + Refine a statement locker to a more specific key. + Note that only events declared mutable can be refined. + @param the statement locker for the current event + @param key the new key for the event + @sa PSI_FLAG_MUTABLE +*/ +typedef struct PSI_statement_locker* (*refine_statement_v1_t) + (struct PSI_statement_locker *locker, + PSI_statement_key key); + +/** + Start a new statement event. + @param locker the statement locker for this event + @param db the active database name for this statement + @param db_length the active database name length for this statement + @param src_file source file name + @param src_line source line number +*/ +typedef void (*start_statement_v1_t) + (struct PSI_statement_locker *locker, + const char *db, uint db_length, + const char *src_file, uint src_line); + +/** + Set the statement text for a statement event. + @param locker the current statement locker + @param text the statement text + @param text_len the statement text length +*/ +typedef void (*set_statement_text_v1_t) + (struct PSI_statement_locker *locker, + const char *text, uint text_len); + +/** + Set a statement event lock time. + @param locker the statement locker + @param lock_time the locked time, in microseconds +*/ +typedef void (*set_statement_lock_time_t) + (struct PSI_statement_locker *locker, ulonglong lock_time); + +/** + Set a statement event rows sent metric. + @param locker the statement locker + @param count the number of rows sent +*/ +typedef void (*set_statement_rows_sent_t) + (struct PSI_statement_locker *locker, ulonglong count); + +/** + Set a statement event rows examined metric. + @param locker the statement locker + @param count the number of rows examined +*/ +typedef void (*set_statement_rows_examined_t) + (struct PSI_statement_locker *locker, ulonglong count); + +/** + Increment a statement event "created tmp disk tables" metric. + @param locker the statement locker + @param count the metric increment value +*/ +typedef void (*inc_statement_created_tmp_disk_tables_t) + (struct PSI_statement_locker *locker, ulong count); + +/** + Increment a statement event "created tmp tables" metric. + @param locker the statement locker + @param count the metric increment value +*/ +typedef void (*inc_statement_created_tmp_tables_t) + (struct PSI_statement_locker *locker, ulong count); + +/** + Increment a statement event "select full join" metric. + @param locker the statement locker + @param count the metric increment value +*/ +typedef void (*inc_statement_select_full_join_t) + (struct PSI_statement_locker *locker, ulong count); + +/** + Increment a statement event "select full range join" metric. + @param locker the statement locker + @param count the metric increment value +*/ +typedef void (*inc_statement_select_full_range_join_t) + (struct PSI_statement_locker *locker, ulong count); + +/** + Increment a statement event "select range join" metric. + @param locker the statement locker + @param count the metric increment value +*/ +typedef void (*inc_statement_select_range_t) + (struct PSI_statement_locker *locker, ulong count); + +/** + Increment a statement event "select range check" metric. + @param locker the statement locker + @param count the metric increment value +*/ +typedef void (*inc_statement_select_range_check_t) + (struct PSI_statement_locker *locker, ulong count); + +/** + Increment a statement event "select scan" metric. + @param locker the statement locker + @param count the metric increment value +*/ +typedef void (*inc_statement_select_scan_t) + (struct PSI_statement_locker *locker, ulong count); + +/** + Increment a statement event "sort merge passes" metric. + @param locker the statement locker + @param count the metric increment value +*/ +typedef void (*inc_statement_sort_merge_passes_t) + (struct PSI_statement_locker *locker, ulong count); + +/** + Increment a statement event "sort range" metric. + @param locker the statement locker + @param count the metric increment value +*/ +typedef void (*inc_statement_sort_range_t) + (struct PSI_statement_locker *locker, ulong count); + +/** + Increment a statement event "sort rows" metric. + @param locker the statement locker + @param count the metric increment value +*/ +typedef void (*inc_statement_sort_rows_t) + (struct PSI_statement_locker *locker, ulong count); + +/** + Increment a statement event "sort scan" metric. + @param locker the statement locker + @param count the metric increment value +*/ +typedef void (*inc_statement_sort_scan_t) + (struct PSI_statement_locker *locker, ulong count); + +/** + Set a statement event "no index used" metric. + @param locker the statement locker + @param count the metric value +*/ +typedef void (*set_statement_no_index_used_t) + (struct PSI_statement_locker *locker); + +/** + Set a statement event "no good index used" metric. + @param locker the statement locker + @param count the metric value +*/ +typedef void (*set_statement_no_good_index_used_t) + (struct PSI_statement_locker *locker); + +/** + End a statement event. + @param locker the statement locker + @param stmt_da the statement diagnostics area. + @sa Diagnostics_area +*/ +typedef void (*end_statement_v1_t) + (struct PSI_statement_locker *locker, void *stmt_da); + +/** + Record a socket instrumentation start event. + @param locker a socket locker for the running thread + @param op socket operation to be performed + @param count the number of bytes requested, or 0 if not applicable + @param src_file the source file name + @param src_line the source line number +*/ +typedef struct PSI_socket_locker* (*start_socket_wait_v1_t) + (struct PSI_socket_locker_state_v1 *state, + struct PSI_socket *socket, + enum PSI_socket_operation op, + size_t count, + const char *src_file, uint src_line); + +/** + Record a socket instrumentation end event. + Note that for socket close operations, the instrumented socket handle + associated with the socket (which was provided to obtain a locker) + is invalid after this call. + @param locker a socket locker for the running thread + @param count the number of bytes actually used in the operation, + or 0 if not applicable, or -1 if the operation failed + @sa get_thread_socket_locker +*/ +typedef void (*end_socket_wait_v1_t) + (struct PSI_socket_locker *locker, size_t count); + +/** + Set the socket state for an instrumented socket. + @param socket the instrumented socket + @param state socket state + */ +typedef void (*set_socket_state_v1_t)(struct PSI_socket *socket, + enum PSI_socket_state state); + +/** + Set the socket info for an instrumented socket. + @param socket the instrumented socket + @param fd the socket descriptor + @param addr the socket ip address + @param addr_len length of socket ip address + @param thread_id associated thread id +*/ +typedef void (*set_socket_info_v1_t)(struct PSI_socket *socket, + const my_socket *fd, + const struct sockaddr *addr, + socklen_t addr_len); + +/** + Bind a socket to the thread that owns it. + @param socket instrumented socket +*/ +typedef void (*set_socket_thread_owner_v1_t)(struct PSI_socket *socket); + +/** + Get a digest locker for the current statement. + @param locker a statement locker for the running thread +*/ +typedef struct PSI_digest_locker * (*digest_start_v1_t) + (struct PSI_statement_locker *locker); + +typedef void (*digest_end_v1_t) + (struct PSI_digest_locker *locker, const struct sql_digest_storage *digest); + +/** + Stores an array of connection attributes + @param buffer char array of length encoded connection attributes + in network format + @param length legnth of the data in buffer + @param from_cs charset in which @buffer is encodded + @return state + @retval non-0 attributes truncated + @retval 0 stored the attribute +*/ +typedef int (*set_thread_connect_attrs_v1_t)(const char *buffer, uint length, + const void *from_cs); + +/** + Performance Schema Interface, version 1. + @since PSI_VERSION_1 +*/ +struct PSI_v1 +{ + /** @sa register_mutex_v1_t. */ + register_mutex_v1_t register_mutex; + /** @sa register_rwlock_v1_t. */ + register_rwlock_v1_t register_rwlock; + /** @sa register_cond_v1_t. */ + register_cond_v1_t register_cond; + /** @sa register_thread_v1_t. */ + register_thread_v1_t register_thread; + /** @sa register_file_v1_t. */ + register_file_v1_t register_file; + /** @sa register_stage_v1_t. */ + register_stage_v1_t register_stage; + /** @sa register_statement_v1_t. */ + register_statement_v1_t register_statement; + /** @sa register_socket_v1_t. */ + register_socket_v1_t register_socket; + /** @sa init_mutex_v1_t. */ + init_mutex_v1_t init_mutex; + /** @sa destroy_mutex_v1_t. */ + destroy_mutex_v1_t destroy_mutex; + /** @sa init_rwlock_v1_t. */ + init_rwlock_v1_t init_rwlock; + /** @sa destroy_rwlock_v1_t. */ + destroy_rwlock_v1_t destroy_rwlock; + /** @sa init_cond_v1_t. */ + init_cond_v1_t init_cond; + /** @sa destroy_cond_v1_t. */ + destroy_cond_v1_t destroy_cond; + /** @sa init_socket_v1_t. */ + init_socket_v1_t init_socket; + /** @sa destroy_socket_v1_t. */ + destroy_socket_v1_t destroy_socket; + /** @sa get_table_share_v1_t. */ + get_table_share_v1_t get_table_share; + /** @sa release_table_share_v1_t. */ + release_table_share_v1_t release_table_share; + /** @sa drop_table_share_v1_t. */ + drop_table_share_v1_t drop_table_share; + /** @sa open_table_v1_t. */ + open_table_v1_t open_table; + /** @sa unbind_table_v1_t. */ + unbind_table_v1_t unbind_table; + /** @sa rebind_table_v1_t. */ + rebind_table_v1_t rebind_table; + /** @sa close_table_v1_t. */ + close_table_v1_t close_table; + /** @sa create_file_v1_t. */ + create_file_v1_t create_file; + /** @sa spawn_thread_v1_t. */ + spawn_thread_v1_t spawn_thread; + /** @sa new_thread_v1_t. */ + new_thread_v1_t new_thread; + /** @sa set_thread_id_v1_t. */ + set_thread_id_v1_t set_thread_id; + /** @sa get_thread_v1_t. */ + get_thread_v1_t get_thread; + /** @sa set_thread_user_v1_t. */ + set_thread_user_v1_t set_thread_user; + /** @sa set_thread_user_host_v1_t. */ + set_thread_user_host_v1_t set_thread_user_host; + /** @sa set_thread_db_v1_t. */ + set_thread_db_v1_t set_thread_db; + /** @sa set_thread_command_v1_t. */ + set_thread_command_v1_t set_thread_command; + /** @sa set_thread_start_time_v1_t. */ + set_thread_start_time_v1_t set_thread_start_time; + /** @sa set_thread_state_v1_t. */ + set_thread_state_v1_t set_thread_state; + /** @sa set_thread_info_v1_t. */ + set_thread_info_v1_t set_thread_info; + /** @sa set_thread_v1_t. */ + set_thread_v1_t set_thread; + /** @sa delete_current_thread_v1_t. */ + delete_current_thread_v1_t delete_current_thread; + /** @sa delete_thread_v1_t. */ + delete_thread_v1_t delete_thread; + /** @sa get_thread_file_name_locker_v1_t. */ + get_thread_file_name_locker_v1_t get_thread_file_name_locker; + /** @sa get_thread_file_stream_locker_v1_t. */ + get_thread_file_stream_locker_v1_t get_thread_file_stream_locker; + /** @sa get_thread_file_descriptor_locker_v1_t. */ + get_thread_file_descriptor_locker_v1_t get_thread_file_descriptor_locker; + /** @sa unlock_mutex_v1_t. */ + unlock_mutex_v1_t unlock_mutex; + /** @sa unlock_rwlock_v1_t. */ + unlock_rwlock_v1_t unlock_rwlock; + /** @sa signal_cond_v1_t. */ + signal_cond_v1_t signal_cond; + /** @sa broadcast_cond_v1_t. */ + broadcast_cond_v1_t broadcast_cond; + /** @sa start_idle_wait_v1_t. */ + start_idle_wait_v1_t start_idle_wait; + /** @sa end_idle_wait_v1_t. */ + end_idle_wait_v1_t end_idle_wait; + /** @sa start_mutex_wait_v1_t. */ + start_mutex_wait_v1_t start_mutex_wait; + /** @sa end_mutex_wait_v1_t. */ + end_mutex_wait_v1_t end_mutex_wait; + /** @sa start_rwlock_rdwait_v1_t. */ + start_rwlock_rdwait_v1_t start_rwlock_rdwait; + /** @sa end_rwlock_rdwait_v1_t. */ + end_rwlock_rdwait_v1_t end_rwlock_rdwait; + /** @sa start_rwlock_wrwait_v1_t. */ + start_rwlock_wrwait_v1_t start_rwlock_wrwait; + /** @sa end_rwlock_wrwait_v1_t. */ + end_rwlock_wrwait_v1_t end_rwlock_wrwait; + /** @sa start_cond_wait_v1_t. */ + start_cond_wait_v1_t start_cond_wait; + /** @sa end_cond_wait_v1_t. */ + end_cond_wait_v1_t end_cond_wait; + /** @sa start_table_io_wait_v1_t. */ + start_table_io_wait_v1_t start_table_io_wait; + /** @sa end_table_io_wait_v1_t. */ + end_table_io_wait_v1_t end_table_io_wait; + /** @sa start_table_lock_wait_v1_t. */ + start_table_lock_wait_v1_t start_table_lock_wait; + /** @sa end_table_lock_wait_v1_t. */ + end_table_lock_wait_v1_t end_table_lock_wait; + /** @sa start_file_open_wait_v1_t. */ + start_file_open_wait_v1_t start_file_open_wait; + /** @sa end_file_open_wait_v1_t. */ + end_file_open_wait_v1_t end_file_open_wait; + /** @sa end_file_open_wait_and_bind_to_descriptor_v1_t. */ + end_file_open_wait_and_bind_to_descriptor_v1_t + end_file_open_wait_and_bind_to_descriptor; + /** @sa start_file_wait_v1_t. */ + start_file_wait_v1_t start_file_wait; + /** @sa end_file_wait_v1_t. */ + end_file_wait_v1_t end_file_wait; + /** @sa start_file_close_wait_v1_t. */ + start_file_close_wait_v1_t start_file_close_wait; + /** @sa end_file_close_wait_v1_t. */ + end_file_close_wait_v1_t end_file_close_wait; + /** @sa start_stage_v1_t. */ + start_stage_v1_t start_stage; + /** @sa end_stage_v1_t. */ + end_stage_v1_t end_stage; + /** @sa get_thread_statement_locker_v1_t. */ + get_thread_statement_locker_v1_t get_thread_statement_locker; + /** @sa refine_statement_v1_t. */ + refine_statement_v1_t refine_statement; + /** @sa start_statement_v1_t. */ + start_statement_v1_t start_statement; + /** @sa set_statement_text_v1_t. */ + set_statement_text_v1_t set_statement_text; + /** @sa set_statement_lock_time_t. */ + set_statement_lock_time_t set_statement_lock_time; + /** @sa set_statement_rows_sent_t. */ + set_statement_rows_sent_t set_statement_rows_sent; + /** @sa set_statement_rows_examined_t. */ + set_statement_rows_examined_t set_statement_rows_examined; + /** @sa inc_statement_created_tmp_disk_tables. */ + inc_statement_created_tmp_disk_tables_t inc_statement_created_tmp_disk_tables; + /** @sa inc_statement_created_tmp_tables. */ + inc_statement_created_tmp_tables_t inc_statement_created_tmp_tables; + /** @sa inc_statement_select_full_join. */ + inc_statement_select_full_join_t inc_statement_select_full_join; + /** @sa inc_statement_select_full_range_join. */ + inc_statement_select_full_range_join_t inc_statement_select_full_range_join; + /** @sa inc_statement_select_range. */ + inc_statement_select_range_t inc_statement_select_range; + /** @sa inc_statement_select_range_check. */ + inc_statement_select_range_check_t inc_statement_select_range_check; + /** @sa inc_statement_select_scan. */ + inc_statement_select_scan_t inc_statement_select_scan; + /** @sa inc_statement_sort_merge_passes. */ + inc_statement_sort_merge_passes_t inc_statement_sort_merge_passes; + /** @sa inc_statement_sort_range. */ + inc_statement_sort_range_t inc_statement_sort_range; + /** @sa inc_statement_sort_rows. */ + inc_statement_sort_rows_t inc_statement_sort_rows; + /** @sa inc_statement_sort_scan. */ + inc_statement_sort_scan_t inc_statement_sort_scan; + /** @sa set_statement_no_index_used. */ + set_statement_no_index_used_t set_statement_no_index_used; + /** @sa set_statement_no_good_index_used. */ + set_statement_no_good_index_used_t set_statement_no_good_index_used; + /** @sa end_statement_v1_t. */ + end_statement_v1_t end_statement; + /** @sa start_socket_wait_v1_t. */ + start_socket_wait_v1_t start_socket_wait; + /** @sa end_socket_wait_v1_t. */ + end_socket_wait_v1_t end_socket_wait; + /** @sa set_socket_state_v1_t. */ + set_socket_state_v1_t set_socket_state; + /** @sa set_socket_info_v1_t. */ + set_socket_info_v1_t set_socket_info; + /** @sa set_socket_thread_owner_v1_t. */ + set_socket_thread_owner_v1_t set_socket_thread_owner; + /** @sa digest_start_v1_t. */ + digest_start_v1_t digest_start; + /** @sa digest_end_v1_t. */ + digest_end_v1_t digest_end; + /** @sa set_thread_connect_attrs_v1_t. */ + set_thread_connect_attrs_v1_t set_thread_connect_attrs; +}; + +/** @} (end of group Group_PSI_v1) */ + +#endif /* HAVE_PSI_1 */ + +#ifdef USE_PSI_2 +#define HAVE_PSI_2 +#endif + +#ifdef HAVE_PSI_2 + +/** + @defgroup Group_PSI_v2 Application Binary Interface, version 2 + @ingroup Instrumentation_interface + @{ +*/ + +/** + Performance Schema Interface, version 2. + This is a placeholder, this interface is not defined yet. + @since PSI_VERSION_2 +*/ +struct PSI_v2 +{ + /** Placeholder */ + int placeholder; + /* ... extended interface ... */ +}; + +/** Placeholder */ +struct PSI_mutex_info_v2 +{ + /** Placeholder */ + int placeholder; +}; + +/** Placeholder */ +struct PSI_rwlock_info_v2 +{ + /** Placeholder */ + int placeholder; +}; + +/** Placeholder */ +struct PSI_cond_info_v2 +{ + /** Placeholder */ + int placeholder; +}; + +/** Placeholder */ +struct PSI_thread_info_v2 +{ + /** Placeholder */ + int placeholder; +}; + +/** Placeholder */ +struct PSI_file_info_v2 +{ + /** Placeholder */ + int placeholder; +}; + +/** Placeholder */ +struct PSI_stage_info_v2 +{ + /** Placeholder */ + int placeholder; +}; + +/** Placeholder */ +struct PSI_statement_info_v2 +{ + /** Placeholder */ + int placeholder; +}; + +/** Placeholder */ +struct PSI_idle_locker_state_v2 +{ + /** Placeholder */ + int placeholder; +}; + +/** Placeholder */ +struct PSI_mutex_locker_state_v2 +{ + /** Placeholder */ + int placeholder; +}; + +/** Placeholder */ +struct PSI_rwlock_locker_state_v2 +{ + /** Placeholder */ + int placeholder; +}; + +/** Placeholder */ +struct PSI_cond_locker_state_v2 +{ + /** Placeholder */ + int placeholder; +}; + +/** Placeholder */ +struct PSI_file_locker_state_v2 +{ + /** Placeholder */ + int placeholder; +}; + +/** Placeholder */ +struct PSI_table_locker_state_v2 +{ + /** Placeholder */ + int placeholder; +}; + +/** Placeholder */ +struct PSI_statement_locker_state_v2 +{ + /** Placeholder */ + int placeholder; +}; + +/** Placeholder */ +struct PSI_socket_locker_state_v2 +{ + /** Placeholder */ + int placeholder; +}; + +/** @} (end of group Group_PSI_v2) */ + +#endif /* HAVE_PSI_2 */ + +/** + @typedef PSI + The instrumentation interface for the current version. + @sa PSI_CURRENT_VERSION +*/ + +/** + @typedef PSI_mutex_info + The mutex information structure for the current version. +*/ + +/** + @typedef PSI_rwlock_info + The rwlock information structure for the current version. +*/ + +/** + @typedef PSI_cond_info + The cond information structure for the current version. +*/ + +/** + @typedef PSI_thread_info + The thread information structure for the current version. +*/ + +/** + @typedef PSI_file_info + The file information structure for the current version. +*/ + +/* Export the required version */ +#ifdef USE_PSI_1 +typedef struct PSI_v1 PSI; +typedef struct PSI_mutex_info_v1 PSI_mutex_info; +typedef struct PSI_rwlock_info_v1 PSI_rwlock_info; +typedef struct PSI_cond_info_v1 PSI_cond_info; +typedef struct PSI_thread_info_v1 PSI_thread_info; +typedef struct PSI_file_info_v1 PSI_file_info; +typedef struct PSI_stage_info_v1 PSI_stage_info; +typedef struct PSI_statement_info_v1 PSI_statement_info; +typedef struct PSI_socket_info_v1 PSI_socket_info; +typedef struct PSI_idle_locker_state_v1 PSI_idle_locker_state; +typedef struct PSI_mutex_locker_state_v1 PSI_mutex_locker_state; +typedef struct PSI_rwlock_locker_state_v1 PSI_rwlock_locker_state; +typedef struct PSI_cond_locker_state_v1 PSI_cond_locker_state; +typedef struct PSI_file_locker_state_v1 PSI_file_locker_state; +typedef struct PSI_table_locker_state_v1 PSI_table_locker_state; +typedef struct PSI_statement_locker_state_v1 PSI_statement_locker_state; +typedef struct PSI_socket_locker_state_v1 PSI_socket_locker_state; +#endif + +#ifdef USE_PSI_2 +typedef struct PSI_v2 PSI; +typedef struct PSI_mutex_info_v2 PSI_mutex_info; +typedef struct PSI_rwlock_info_v2 PSI_rwlock_info; +typedef struct PSI_cond_info_v2 PSI_cond_info; +typedef struct PSI_thread_info_v2 PSI_thread_info; +typedef struct PSI_file_info_v2 PSI_file_info; +typedef struct PSI_stage_info_v2 PSI_stage_info; +typedef struct PSI_statement_info_v2 PSI_statement_info; +typedef struct PSI_socket_info_v2 PSI_socket_info; +typedef struct PSI_idle_locker_state_v2 PSI_idle_locker_state; +typedef struct PSI_mutex_locker_state_v2 PSI_mutex_locker_state; +typedef struct PSI_rwlock_locker_state_v2 PSI_rwlock_locker_state; +typedef struct PSI_cond_locker_state_v2 PSI_cond_locker_state; +typedef struct PSI_file_locker_state_v2 PSI_file_locker_state; +typedef struct PSI_table_locker_state_v2 PSI_table_locker_state; +typedef struct PSI_statement_locker_state_v2 PSI_statement_locker_state; +typedef struct PSI_socket_locker_state_v2 PSI_socket_locker_state; +#endif + +#else /* HAVE_PSI_INTERFACE */ + +/** + Dummy structure, used to declare PSI_server when no instrumentation + is available. + The content does not matter, since PSI_server will be NULL. +*/ +struct PSI_none +{ + int opaque; +}; +typedef struct PSI_none PSI; + +/** + Stage instrument information. + @since PSI_VERSION_1 + This structure is used to register an instrumented stage. +*/ +struct PSI_stage_info_none +{ + /** Unused stage key. */ + unsigned int m_key; + /** The name of the stage instrument. */ + const char *m_name; + /** Unused stage flags. */ + int m_flags; +}; + +/** + The stage instrumentation has to co exist with the legacy + THD::set_proc_info instrumentation. + To avoid duplication of the instrumentation in the server, + the common PSI_stage_info structure is used, + so we export it here, even when not building + with HAVE_PSI_INTERFACE. +*/ +typedef struct PSI_stage_info_none PSI_stage_info; + +#endif /* HAVE_PSI_INTERFACE */ + +extern MYSQL_PLUGIN_IMPORT PSI *PSI_server; + +/* + Allow to override PSI_XXX_CALL at compile time + with more efficient implementations, if available. + If nothing better is available, + make a dynamic call using the PSI_server function pointer. +*/ + +#ifndef PSI_MUTEX_CALL +#define PSI_MUTEX_CALL(M) PSI_DYNAMIC_CALL(M) +#endif + +#ifndef PSI_RWLOCK_CALL +#define PSI_RWLOCK_CALL(M) PSI_DYNAMIC_CALL(M) +#endif + +#ifndef PSI_COND_CALL +#define PSI_COND_CALL(M) PSI_DYNAMIC_CALL(M) +#endif + +#ifndef PSI_THREAD_CALL +#define PSI_THREAD_CALL(M) PSI_DYNAMIC_CALL(M) +#endif + +#ifndef PSI_FILE_CALL +#define PSI_FILE_CALL(M) PSI_DYNAMIC_CALL(M) +#endif + +#ifndef PSI_SOCKET_CALL +#define PSI_SOCKET_CALL(M) PSI_DYNAMIC_CALL(M) +#endif + +#ifndef PSI_STAGE_CALL +#define PSI_STAGE_CALL(M) PSI_DYNAMIC_CALL(M) +#endif + +#ifndef PSI_STATEMENT_CALL +#define PSI_STATEMENT_CALL(M) PSI_DYNAMIC_CALL(M) +#endif + +#ifndef PSI_DIGEST_CALL +#define PSI_DIGEST_CALL(M) PSI_DYNAMIC_CALL(M) +#endif + +#ifndef PSI_TABLE_CALL +#define PSI_TABLE_CALL(M) PSI_DYNAMIC_CALL(M) +#endif + +#ifndef PSI_IDLE_CALL +#define PSI_IDLE_CALL(M) PSI_DYNAMIC_CALL(M) +#endif + +#define PSI_DYNAMIC_CALL(M) PSI_server->M + +/** @} */ + +C_MODE_END +#endif /* MYSQL_PERFORMANCE_SCHEMA_INTERFACE_H */ + diff --git a/EQ2/source/depends/mariadb-10.1.19/include/mysql/psi/psi_abi_v0.h b/EQ2/source/depends/mariadb-10.1.19/include/mysql/psi/psi_abi_v0.h new file mode 100644 index 000000000..c896f15a5 --- /dev/null +++ b/EQ2/source/depends/mariadb-10.1.19/include/mysql/psi/psi_abi_v0.h @@ -0,0 +1,24 @@ +/* Copyright (c) 2011, Oracle and/or its affiliates. All rights reserved. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; version 2 of the License. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software Foundation, + 51 Franklin Street, Suite 500, Boston, MA 02110-1335 USA */ + +/** + @file mysql/psi/psi_abi_v0.h + ABI check for mysql/psi/psi.h, when compiling without instrumentation. + This file is only used to automate detection of changes between versions. + Do not include this file, include mysql/psi/psi.h instead. +*/ +#define MY_GLOBAL_INCLUDED +#include "mysql/psi/psi.h" + diff --git a/EQ2/source/depends/mariadb-10.1.19/include/mysql/psi/psi_abi_v0.h.pp b/EQ2/source/depends/mariadb-10.1.19/include/mysql/psi/psi_abi_v0.h.pp new file mode 100644 index 000000000..17d61016a --- /dev/null +++ b/EQ2/source/depends/mariadb-10.1.19/include/mysql/psi/psi_abi_v0.h.pp @@ -0,0 +1,47 @@ +#include "mysql/psi/psi.h" +C_MODE_START +struct TABLE_SHARE; +struct sql_digest_storage; +struct PSI_mutex; +typedef struct PSI_mutex PSI_mutex; +struct PSI_rwlock; +typedef struct PSI_rwlock PSI_rwlock; +struct PSI_cond; +typedef struct PSI_cond PSI_cond; +struct PSI_table_share; +typedef struct PSI_table_share PSI_table_share; +struct PSI_table; +typedef struct PSI_table PSI_table; +struct PSI_thread; +typedef struct PSI_thread PSI_thread; +struct PSI_file; +typedef struct PSI_file PSI_file; +struct PSI_socket; +typedef struct PSI_socket PSI_socket; +struct PSI_table_locker; +typedef struct PSI_table_locker PSI_table_locker; +struct PSI_statement_locker; +typedef struct PSI_statement_locker PSI_statement_locker; +struct PSI_idle_locker; +typedef struct PSI_idle_locker PSI_idle_locker; +struct PSI_digest_locker; +typedef struct PSI_digest_locker PSI_digest_locker; +struct PSI_bootstrap +{ + void* (*get_interface)(int version); +}; +typedef struct PSI_bootstrap PSI_bootstrap; +struct PSI_none +{ + int opaque; +}; +typedef struct PSI_none PSI; +struct PSI_stage_info_none +{ + unsigned int m_key; + const char *m_name; + int m_flags; +}; +typedef struct PSI_stage_info_none PSI_stage_info; +extern MYSQL_PLUGIN_IMPORT PSI *PSI_server; +C_MODE_END diff --git a/EQ2/source/depends/mariadb-10.1.19/include/mysql/psi/psi_abi_v1.h b/EQ2/source/depends/mariadb-10.1.19/include/mysql/psi/psi_abi_v1.h new file mode 100644 index 000000000..54c49f0c5 --- /dev/null +++ b/EQ2/source/depends/mariadb-10.1.19/include/mysql/psi/psi_abi_v1.h @@ -0,0 +1,26 @@ +/* Copyright (c) 2008, 2011, Oracle and/or its affiliates. All rights reserved. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; version 2 of the License. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software Foundation, + 51 Franklin Street, Suite 500, Boston, MA 02110-1335 USA */ + +/** + @file mysql/psi/psi_abi_v1.h + ABI check for mysql/psi/psi.h, when using PSI_VERSION_1. + This file is only used to automate detection of changes between versions. + Do not include this file, include mysql/psi/psi.h instead. +*/ +#define USE_PSI_1 +#define HAVE_PSI_INTERFACE +#define MY_GLOBAL_INCLUDED +#include "mysql/psi/psi.h" + diff --git a/EQ2/source/depends/mariadb-10.1.19/include/mysql/psi/psi_abi_v1.h.pp b/EQ2/source/depends/mariadb-10.1.19/include/mysql/psi/psi_abi_v1.h.pp new file mode 100644 index 000000000..17ac0271d --- /dev/null +++ b/EQ2/source/depends/mariadb-10.1.19/include/mysql/psi/psi_abi_v1.h.pp @@ -0,0 +1,620 @@ +C_MODE_START +struct TABLE_SHARE; +struct sql_digest_storage; +struct PSI_mutex; +typedef struct PSI_mutex PSI_mutex; +struct PSI_rwlock; +typedef struct PSI_rwlock PSI_rwlock; +struct PSI_cond; +typedef struct PSI_cond PSI_cond; +struct PSI_table_share; +typedef struct PSI_table_share PSI_table_share; +struct PSI_table; +typedef struct PSI_table PSI_table; +struct PSI_thread; +typedef struct PSI_thread PSI_thread; +struct PSI_file; +typedef struct PSI_file PSI_file; +struct PSI_socket; +typedef struct PSI_socket PSI_socket; +struct PSI_table_locker; +typedef struct PSI_table_locker PSI_table_locker; +struct PSI_statement_locker; +typedef struct PSI_statement_locker PSI_statement_locker; +struct PSI_idle_locker; +typedef struct PSI_idle_locker PSI_idle_locker; +struct PSI_digest_locker; +typedef struct PSI_digest_locker PSI_digest_locker; +struct PSI_bootstrap +{ + void* (*get_interface)(int version); +}; +typedef struct PSI_bootstrap PSI_bootstrap; +struct PSI_mutex_locker; +typedef struct PSI_mutex_locker PSI_mutex_locker; +struct PSI_rwlock_locker; +typedef struct PSI_rwlock_locker PSI_rwlock_locker; +struct PSI_cond_locker; +typedef struct PSI_cond_locker PSI_cond_locker; +struct PSI_file_locker; +typedef struct PSI_file_locker PSI_file_locker; +struct PSI_socket_locker; +typedef struct PSI_socket_locker PSI_socket_locker; +enum PSI_mutex_operation +{ + PSI_MUTEX_LOCK= 0, + PSI_MUTEX_TRYLOCK= 1 +}; +typedef enum PSI_mutex_operation PSI_mutex_operation; +enum PSI_rwlock_operation +{ + PSI_RWLOCK_READLOCK= 0, + PSI_RWLOCK_WRITELOCK= 1, + PSI_RWLOCK_TRYREADLOCK= 2, + PSI_RWLOCK_TRYWRITELOCK= 3 +}; +typedef enum PSI_rwlock_operation PSI_rwlock_operation; +enum PSI_cond_operation +{ + PSI_COND_WAIT= 0, + PSI_COND_TIMEDWAIT= 1 +}; +typedef enum PSI_cond_operation PSI_cond_operation; +enum PSI_file_operation +{ + PSI_FILE_CREATE= 0, + PSI_FILE_CREATE_TMP= 1, + PSI_FILE_OPEN= 2, + PSI_FILE_STREAM_OPEN= 3, + PSI_FILE_CLOSE= 4, + PSI_FILE_STREAM_CLOSE= 5, + PSI_FILE_READ= 6, + PSI_FILE_WRITE= 7, + PSI_FILE_SEEK= 8, + PSI_FILE_TELL= 9, + PSI_FILE_FLUSH= 10, + PSI_FILE_STAT= 11, + PSI_FILE_FSTAT= 12, + PSI_FILE_CHSIZE= 13, + PSI_FILE_DELETE= 14, + PSI_FILE_RENAME= 15, + PSI_FILE_SYNC= 16 +}; +typedef enum PSI_file_operation PSI_file_operation; +enum PSI_table_io_operation +{ + PSI_TABLE_FETCH_ROW= 0, + PSI_TABLE_WRITE_ROW= 1, + PSI_TABLE_UPDATE_ROW= 2, + PSI_TABLE_DELETE_ROW= 3 +}; +typedef enum PSI_table_io_operation PSI_table_io_operation; +enum PSI_table_lock_operation +{ + PSI_TABLE_LOCK= 0, + PSI_TABLE_EXTERNAL_LOCK= 1 +}; +typedef enum PSI_table_lock_operation PSI_table_lock_operation; +enum PSI_socket_state +{ + PSI_SOCKET_STATE_IDLE= 1, + PSI_SOCKET_STATE_ACTIVE= 2 +}; +typedef enum PSI_socket_state PSI_socket_state; +enum PSI_socket_operation +{ + PSI_SOCKET_CREATE= 0, + PSI_SOCKET_CONNECT= 1, + PSI_SOCKET_BIND= 2, + PSI_SOCKET_CLOSE= 3, + PSI_SOCKET_SEND= 4, + PSI_SOCKET_RECV= 5, + PSI_SOCKET_SENDTO= 6, + PSI_SOCKET_RECVFROM= 7, + PSI_SOCKET_SENDMSG= 8, + PSI_SOCKET_RECVMSG= 9, + PSI_SOCKET_SEEK= 10, + PSI_SOCKET_OPT= 11, + PSI_SOCKET_STAT= 12, + PSI_SOCKET_SHUTDOWN= 13, + PSI_SOCKET_SELECT= 14 +}; +typedef enum PSI_socket_operation PSI_socket_operation; +typedef unsigned int PSI_mutex_key; +typedef unsigned int PSI_rwlock_key; +typedef unsigned int PSI_cond_key; +typedef unsigned int PSI_thread_key; +typedef unsigned int PSI_file_key; +typedef unsigned int PSI_stage_key; +typedef unsigned int PSI_statement_key; +typedef unsigned int PSI_socket_key; +struct PSI_mutex_info_v1 +{ + PSI_mutex_key *m_key; + const char *m_name; + int m_flags; +}; +struct PSI_rwlock_info_v1 +{ + PSI_rwlock_key *m_key; + const char *m_name; + int m_flags; +}; +struct PSI_cond_info_v1 +{ + PSI_cond_key *m_key; + const char *m_name; + int m_flags; +}; +struct PSI_thread_info_v1 +{ + PSI_thread_key *m_key; + const char *m_name; + int m_flags; +}; +struct PSI_file_info_v1 +{ + PSI_file_key *m_key; + const char *m_name; + int m_flags; +}; +struct PSI_stage_info_v1 +{ + PSI_stage_key m_key; + const char *m_name; + int m_flags; +}; +struct PSI_statement_info_v1 +{ + PSI_statement_key m_key; + const char *m_name; + int m_flags; +}; +struct PSI_socket_info_v1 +{ + PSI_socket_key *m_key; + const char *m_name; + int m_flags; +}; +struct PSI_idle_locker_state_v1 +{ + uint m_flags; + struct PSI_thread *m_thread; + ulonglong m_timer_start; + ulonglong (*m_timer)(void); + void *m_wait; +}; +struct PSI_mutex_locker_state_v1 +{ + uint m_flags; + enum PSI_mutex_operation m_operation; + struct PSI_mutex *m_mutex; + struct PSI_thread *m_thread; + ulonglong m_timer_start; + ulonglong (*m_timer)(void); + void *m_wait; +}; +struct PSI_rwlock_locker_state_v1 +{ + uint m_flags; + enum PSI_rwlock_operation m_operation; + struct PSI_rwlock *m_rwlock; + struct PSI_thread *m_thread; + ulonglong m_timer_start; + ulonglong (*m_timer)(void); + void *m_wait; +}; +struct PSI_cond_locker_state_v1 +{ + uint m_flags; + enum PSI_cond_operation m_operation; + struct PSI_cond *m_cond; + struct PSI_mutex *m_mutex; + struct PSI_thread *m_thread; + ulonglong m_timer_start; + ulonglong (*m_timer)(void); + void *m_wait; +}; +struct PSI_file_locker_state_v1 +{ + uint m_flags; + enum PSI_file_operation m_operation; + struct PSI_file *m_file; + const char *m_name; + void *m_class; + struct PSI_thread *m_thread; + size_t m_number_of_bytes; + ulonglong m_timer_start; + ulonglong (*m_timer)(void); + void *m_wait; +}; +struct PSI_table_locker_state_v1 +{ + uint m_flags; + enum PSI_table_io_operation m_io_operation; + struct PSI_table *m_table; + struct PSI_table_share *m_table_share; + struct PSI_thread *m_thread; + ulonglong m_timer_start; + ulonglong (*m_timer)(void); + void *m_wait; + uint m_index; +}; +struct PSI_statement_locker_state_v1 +{ + my_bool m_discarded; + uchar m_no_index_used; + uchar m_no_good_index_used; + uint m_flags; + void *m_class; + struct PSI_thread *m_thread; + ulonglong m_timer_start; + ulonglong (*m_timer)(void); + void *m_statement; + ulonglong m_lock_time; + ulonglong m_rows_sent; + ulonglong m_rows_examined; + ulong m_created_tmp_disk_tables; + ulong m_created_tmp_tables; + ulong m_select_full_join; + ulong m_select_full_range_join; + ulong m_select_range; + ulong m_select_range_check; + ulong m_select_scan; + ulong m_sort_merge_passes; + ulong m_sort_range; + ulong m_sort_rows; + ulong m_sort_scan; + const struct sql_digest_storage *m_digest; + char m_schema_name[(64 * 3)]; + uint m_schema_name_length; + uint m_cs_number; +}; +struct PSI_socket_locker_state_v1 +{ + uint m_flags; + struct PSI_socket *m_socket; + struct PSI_thread *m_thread; + size_t m_number_of_bytes; + ulonglong m_timer_start; + ulonglong (*m_timer)(void); + enum PSI_socket_operation m_operation; + const char* m_src_file; + int m_src_line; + void *m_wait; +}; +typedef void (*register_mutex_v1_t) + (const char *category, struct PSI_mutex_info_v1 *info, int count); +typedef void (*register_rwlock_v1_t) + (const char *category, struct PSI_rwlock_info_v1 *info, int count); +typedef void (*register_cond_v1_t) + (const char *category, struct PSI_cond_info_v1 *info, int count); +typedef void (*register_thread_v1_t) + (const char *category, struct PSI_thread_info_v1 *info, int count); +typedef void (*register_file_v1_t) + (const char *category, struct PSI_file_info_v1 *info, int count); +typedef void (*register_stage_v1_t) + (const char *category, struct PSI_stage_info_v1 **info, int count); +typedef void (*register_statement_v1_t) + (const char *category, struct PSI_statement_info_v1 *info, int count); +typedef void (*register_socket_v1_t) + (const char *category, struct PSI_socket_info_v1 *info, int count); +typedef struct PSI_mutex* (*init_mutex_v1_t) + (PSI_mutex_key key, const void *identity); +typedef void (*destroy_mutex_v1_t)(struct PSI_mutex *mutex); +typedef struct PSI_rwlock* (*init_rwlock_v1_t) + (PSI_rwlock_key key, const void *identity); +typedef void (*destroy_rwlock_v1_t)(struct PSI_rwlock *rwlock); +typedef struct PSI_cond* (*init_cond_v1_t) + (PSI_cond_key key, const void *identity); +typedef void (*destroy_cond_v1_t)(struct PSI_cond *cond); +typedef struct PSI_socket* (*init_socket_v1_t) + (PSI_socket_key key, const my_socket *fd, + const struct sockaddr *addr, socklen_t addr_len); +typedef void (*destroy_socket_v1_t)(struct PSI_socket *socket); +typedef struct PSI_table_share* (*get_table_share_v1_t) + (my_bool temporary, struct TABLE_SHARE *share); +typedef void (*release_table_share_v1_t)(struct PSI_table_share *share); +typedef void (*drop_table_share_v1_t) + (my_bool temporary, const char *schema_name, int schema_name_length, + const char *table_name, int table_name_length); +typedef struct PSI_table* (*open_table_v1_t) + (struct PSI_table_share *share, const void *identity); +typedef void (*unbind_table_v1_t) + (struct PSI_table *table); +typedef PSI_table* (*rebind_table_v1_t) + (PSI_table_share *share, const void *identity, PSI_table *table); +typedef void (*close_table_v1_t)(struct PSI_table *table); +typedef void (*create_file_v1_t)(PSI_file_key key, const char *name, + File file); +typedef int (*spawn_thread_v1_t)(PSI_thread_key key, + pthread_t *thread, + const pthread_attr_t *attr, + void *(*start_routine)(void*), void *arg); +typedef struct PSI_thread* (*new_thread_v1_t) + (PSI_thread_key key, const void *identity, ulonglong thread_id); +typedef void (*set_thread_id_v1_t)(struct PSI_thread *thread, + ulonglong id); +typedef struct PSI_thread* (*get_thread_v1_t)(void); +typedef void (*set_thread_user_v1_t)(const char *user, int user_len); +typedef void (*set_thread_user_host_v1_t)(const char *user, int user_len, + const char *host, int host_len); +typedef void (*set_thread_db_v1_t)(const char* db, int db_len); +typedef void (*set_thread_command_v1_t)(int command); +typedef void (*set_thread_start_time_v1_t)(time_t start_time); +typedef void (*set_thread_state_v1_t)(const char* state); +typedef void (*set_thread_info_v1_t)(const char* info, uint info_len); +typedef void (*set_thread_v1_t)(struct PSI_thread *thread); +typedef void (*delete_current_thread_v1_t)(void); +typedef void (*delete_thread_v1_t)(struct PSI_thread *thread); +typedef struct PSI_file_locker* (*get_thread_file_name_locker_v1_t) + (struct PSI_file_locker_state_v1 *state, + PSI_file_key key, enum PSI_file_operation op, const char *name, + const void *identity); +typedef struct PSI_file_locker* (*get_thread_file_stream_locker_v1_t) + (struct PSI_file_locker_state_v1 *state, + struct PSI_file *file, enum PSI_file_operation op); +typedef struct PSI_file_locker* (*get_thread_file_descriptor_locker_v1_t) + (struct PSI_file_locker_state_v1 *state, + File file, enum PSI_file_operation op); +typedef void (*unlock_mutex_v1_t) + (struct PSI_mutex *mutex); +typedef void (*unlock_rwlock_v1_t) + (struct PSI_rwlock *rwlock); +typedef void (*signal_cond_v1_t) + (struct PSI_cond *cond); +typedef void (*broadcast_cond_v1_t) + (struct PSI_cond *cond); +typedef struct PSI_idle_locker* (*start_idle_wait_v1_t) + (struct PSI_idle_locker_state_v1 *state, const char *src_file, uint src_line); +typedef void (*end_idle_wait_v1_t) + (struct PSI_idle_locker *locker); +typedef struct PSI_mutex_locker* (*start_mutex_wait_v1_t) + (struct PSI_mutex_locker_state_v1 *state, + struct PSI_mutex *mutex, + enum PSI_mutex_operation op, + const char *src_file, uint src_line); +typedef void (*end_mutex_wait_v1_t) + (struct PSI_mutex_locker *locker, int rc); +typedef struct PSI_rwlock_locker* (*start_rwlock_rdwait_v1_t) + (struct PSI_rwlock_locker_state_v1 *state, + struct PSI_rwlock *rwlock, + enum PSI_rwlock_operation op, + const char *src_file, uint src_line); +typedef void (*end_rwlock_rdwait_v1_t) + (struct PSI_rwlock_locker *locker, int rc); +typedef struct PSI_rwlock_locker* (*start_rwlock_wrwait_v1_t) + (struct PSI_rwlock_locker_state_v1 *state, + struct PSI_rwlock *rwlock, + enum PSI_rwlock_operation op, + const char *src_file, uint src_line); +typedef void (*end_rwlock_wrwait_v1_t) + (struct PSI_rwlock_locker *locker, int rc); +typedef struct PSI_cond_locker* (*start_cond_wait_v1_t) + (struct PSI_cond_locker_state_v1 *state, + struct PSI_cond *cond, + struct PSI_mutex *mutex, + enum PSI_cond_operation op, + const char *src_file, uint src_line); +typedef void (*end_cond_wait_v1_t) + (struct PSI_cond_locker *locker, int rc); +typedef struct PSI_table_locker* (*start_table_io_wait_v1_t) + (struct PSI_table_locker_state_v1 *state, + struct PSI_table *table, + enum PSI_table_io_operation op, + uint index, + const char *src_file, uint src_line); +typedef void (*end_table_io_wait_v1_t)(struct PSI_table_locker *locker); +typedef struct PSI_table_locker* (*start_table_lock_wait_v1_t) + (struct PSI_table_locker_state_v1 *state, + struct PSI_table *table, + enum PSI_table_lock_operation op, + ulong flags, + const char *src_file, uint src_line); +typedef void (*end_table_lock_wait_v1_t)(struct PSI_table_locker *locker); +typedef void (*start_file_open_wait_v1_t) + (struct PSI_file_locker *locker, const char *src_file, uint src_line); +typedef struct PSI_file* (*end_file_open_wait_v1_t) + (struct PSI_file_locker *locker, void *result); +typedef void (*end_file_open_wait_and_bind_to_descriptor_v1_t) + (struct PSI_file_locker *locker, File file); +typedef void (*start_file_wait_v1_t) + (struct PSI_file_locker *locker, size_t count, + const char *src_file, uint src_line); +typedef void (*end_file_wait_v1_t) + (struct PSI_file_locker *locker, size_t count); +typedef void (*start_file_close_wait_v1_t) + (struct PSI_file_locker *locker, const char *src_file, uint src_line); +typedef void (*end_file_close_wait_v1_t) + (struct PSI_file_locker *locker, int rc); +typedef void (*start_stage_v1_t) + (PSI_stage_key key, const char *src_file, int src_line); +typedef void (*end_stage_v1_t) (void); +typedef struct PSI_statement_locker* (*get_thread_statement_locker_v1_t) + (struct PSI_statement_locker_state_v1 *state, + PSI_statement_key key, const void *charset); +typedef struct PSI_statement_locker* (*refine_statement_v1_t) + (struct PSI_statement_locker *locker, + PSI_statement_key key); +typedef void (*start_statement_v1_t) + (struct PSI_statement_locker *locker, + const char *db, uint db_length, + const char *src_file, uint src_line); +typedef void (*set_statement_text_v1_t) + (struct PSI_statement_locker *locker, + const char *text, uint text_len); +typedef void (*set_statement_lock_time_t) + (struct PSI_statement_locker *locker, ulonglong lock_time); +typedef void (*set_statement_rows_sent_t) + (struct PSI_statement_locker *locker, ulonglong count); +typedef void (*set_statement_rows_examined_t) + (struct PSI_statement_locker *locker, ulonglong count); +typedef void (*inc_statement_created_tmp_disk_tables_t) + (struct PSI_statement_locker *locker, ulong count); +typedef void (*inc_statement_created_tmp_tables_t) + (struct PSI_statement_locker *locker, ulong count); +typedef void (*inc_statement_select_full_join_t) + (struct PSI_statement_locker *locker, ulong count); +typedef void (*inc_statement_select_full_range_join_t) + (struct PSI_statement_locker *locker, ulong count); +typedef void (*inc_statement_select_range_t) + (struct PSI_statement_locker *locker, ulong count); +typedef void (*inc_statement_select_range_check_t) + (struct PSI_statement_locker *locker, ulong count); +typedef void (*inc_statement_select_scan_t) + (struct PSI_statement_locker *locker, ulong count); +typedef void (*inc_statement_sort_merge_passes_t) + (struct PSI_statement_locker *locker, ulong count); +typedef void (*inc_statement_sort_range_t) + (struct PSI_statement_locker *locker, ulong count); +typedef void (*inc_statement_sort_rows_t) + (struct PSI_statement_locker *locker, ulong count); +typedef void (*inc_statement_sort_scan_t) + (struct PSI_statement_locker *locker, ulong count); +typedef void (*set_statement_no_index_used_t) + (struct PSI_statement_locker *locker); +typedef void (*set_statement_no_good_index_used_t) + (struct PSI_statement_locker *locker); +typedef void (*end_statement_v1_t) + (struct PSI_statement_locker *locker, void *stmt_da); +typedef struct PSI_socket_locker* (*start_socket_wait_v1_t) + (struct PSI_socket_locker_state_v1 *state, + struct PSI_socket *socket, + enum PSI_socket_operation op, + size_t count, + const char *src_file, uint src_line); +typedef void (*end_socket_wait_v1_t) + (struct PSI_socket_locker *locker, size_t count); +typedef void (*set_socket_state_v1_t)(struct PSI_socket *socket, + enum PSI_socket_state state); +typedef void (*set_socket_info_v1_t)(struct PSI_socket *socket, + const my_socket *fd, + const struct sockaddr *addr, + socklen_t addr_len); +typedef void (*set_socket_thread_owner_v1_t)(struct PSI_socket *socket); +typedef struct PSI_digest_locker * (*digest_start_v1_t) + (struct PSI_statement_locker *locker); +typedef void (*digest_end_v1_t) + (struct PSI_digest_locker *locker, const struct sql_digest_storage *digest); +typedef int (*set_thread_connect_attrs_v1_t)(const char *buffer, uint length, + const void *from_cs); +struct PSI_v1 +{ + register_mutex_v1_t register_mutex; + register_rwlock_v1_t register_rwlock; + register_cond_v1_t register_cond; + register_thread_v1_t register_thread; + register_file_v1_t register_file; + register_stage_v1_t register_stage; + register_statement_v1_t register_statement; + register_socket_v1_t register_socket; + init_mutex_v1_t init_mutex; + destroy_mutex_v1_t destroy_mutex; + init_rwlock_v1_t init_rwlock; + destroy_rwlock_v1_t destroy_rwlock; + init_cond_v1_t init_cond; + destroy_cond_v1_t destroy_cond; + init_socket_v1_t init_socket; + destroy_socket_v1_t destroy_socket; + get_table_share_v1_t get_table_share; + release_table_share_v1_t release_table_share; + drop_table_share_v1_t drop_table_share; + open_table_v1_t open_table; + unbind_table_v1_t unbind_table; + rebind_table_v1_t rebind_table; + close_table_v1_t close_table; + create_file_v1_t create_file; + spawn_thread_v1_t spawn_thread; + new_thread_v1_t new_thread; + set_thread_id_v1_t set_thread_id; + get_thread_v1_t get_thread; + set_thread_user_v1_t set_thread_user; + set_thread_user_host_v1_t set_thread_user_host; + set_thread_db_v1_t set_thread_db; + set_thread_command_v1_t set_thread_command; + set_thread_start_time_v1_t set_thread_start_time; + set_thread_state_v1_t set_thread_state; + set_thread_info_v1_t set_thread_info; + set_thread_v1_t set_thread; + delete_current_thread_v1_t delete_current_thread; + delete_thread_v1_t delete_thread; + get_thread_file_name_locker_v1_t get_thread_file_name_locker; + get_thread_file_stream_locker_v1_t get_thread_file_stream_locker; + get_thread_file_descriptor_locker_v1_t get_thread_file_descriptor_locker; + unlock_mutex_v1_t unlock_mutex; + unlock_rwlock_v1_t unlock_rwlock; + signal_cond_v1_t signal_cond; + broadcast_cond_v1_t broadcast_cond; + start_idle_wait_v1_t start_idle_wait; + end_idle_wait_v1_t end_idle_wait; + start_mutex_wait_v1_t start_mutex_wait; + end_mutex_wait_v1_t end_mutex_wait; + start_rwlock_rdwait_v1_t start_rwlock_rdwait; + end_rwlock_rdwait_v1_t end_rwlock_rdwait; + start_rwlock_wrwait_v1_t start_rwlock_wrwait; + end_rwlock_wrwait_v1_t end_rwlock_wrwait; + start_cond_wait_v1_t start_cond_wait; + end_cond_wait_v1_t end_cond_wait; + start_table_io_wait_v1_t start_table_io_wait; + end_table_io_wait_v1_t end_table_io_wait; + start_table_lock_wait_v1_t start_table_lock_wait; + end_table_lock_wait_v1_t end_table_lock_wait; + start_file_open_wait_v1_t start_file_open_wait; + end_file_open_wait_v1_t end_file_open_wait; + end_file_open_wait_and_bind_to_descriptor_v1_t + end_file_open_wait_and_bind_to_descriptor; + start_file_wait_v1_t start_file_wait; + end_file_wait_v1_t end_file_wait; + start_file_close_wait_v1_t start_file_close_wait; + end_file_close_wait_v1_t end_file_close_wait; + start_stage_v1_t start_stage; + end_stage_v1_t end_stage; + get_thread_statement_locker_v1_t get_thread_statement_locker; + refine_statement_v1_t refine_statement; + start_statement_v1_t start_statement; + set_statement_text_v1_t set_statement_text; + set_statement_lock_time_t set_statement_lock_time; + set_statement_rows_sent_t set_statement_rows_sent; + set_statement_rows_examined_t set_statement_rows_examined; + inc_statement_created_tmp_disk_tables_t inc_statement_created_tmp_disk_tables; + inc_statement_created_tmp_tables_t inc_statement_created_tmp_tables; + inc_statement_select_full_join_t inc_statement_select_full_join; + inc_statement_select_full_range_join_t inc_statement_select_full_range_join; + inc_statement_select_range_t inc_statement_select_range; + inc_statement_select_range_check_t inc_statement_select_range_check; + inc_statement_select_scan_t inc_statement_select_scan; + inc_statement_sort_merge_passes_t inc_statement_sort_merge_passes; + inc_statement_sort_range_t inc_statement_sort_range; + inc_statement_sort_rows_t inc_statement_sort_rows; + inc_statement_sort_scan_t inc_statement_sort_scan; + set_statement_no_index_used_t set_statement_no_index_used; + set_statement_no_good_index_used_t set_statement_no_good_index_used; + end_statement_v1_t end_statement; + start_socket_wait_v1_t start_socket_wait; + end_socket_wait_v1_t end_socket_wait; + set_socket_state_v1_t set_socket_state; + set_socket_info_v1_t set_socket_info; + set_socket_thread_owner_v1_t set_socket_thread_owner; + digest_start_v1_t digest_start; + digest_end_v1_t digest_end; + set_thread_connect_attrs_v1_t set_thread_connect_attrs; +}; +typedef struct PSI_v1 PSI; +typedef struct PSI_mutex_info_v1 PSI_mutex_info; +typedef struct PSI_rwlock_info_v1 PSI_rwlock_info; +typedef struct PSI_cond_info_v1 PSI_cond_info; +typedef struct PSI_thread_info_v1 PSI_thread_info; +typedef struct PSI_file_info_v1 PSI_file_info; +typedef struct PSI_stage_info_v1 PSI_stage_info; +typedef struct PSI_statement_info_v1 PSI_statement_info; +typedef struct PSI_socket_info_v1 PSI_socket_info; +typedef struct PSI_idle_locker_state_v1 PSI_idle_locker_state; +typedef struct PSI_mutex_locker_state_v1 PSI_mutex_locker_state; +typedef struct PSI_rwlock_locker_state_v1 PSI_rwlock_locker_state; +typedef struct PSI_cond_locker_state_v1 PSI_cond_locker_state; +typedef struct PSI_file_locker_state_v1 PSI_file_locker_state; +typedef struct PSI_table_locker_state_v1 PSI_table_locker_state; +typedef struct PSI_statement_locker_state_v1 PSI_statement_locker_state; +typedef struct PSI_socket_locker_state_v1 PSI_socket_locker_state; +extern MYSQL_PLUGIN_IMPORT PSI *PSI_server; +C_MODE_END diff --git a/EQ2/source/depends/mariadb-10.1.19/include/mysql/psi/psi_abi_v2.h b/EQ2/source/depends/mariadb-10.1.19/include/mysql/psi/psi_abi_v2.h new file mode 100644 index 000000000..d2e6f2527 --- /dev/null +++ b/EQ2/source/depends/mariadb-10.1.19/include/mysql/psi/psi_abi_v2.h @@ -0,0 +1,26 @@ +/* Copyright (c) 2008, 2010, Oracle and/or its affiliates. All rights reserved. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; version 2 of the License. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software Foundation, + 51 Franklin Street, Suite 500, Boston, MA 02110-1335 USA */ + +/** + @file mysql/psi/psi_abi_v1.h + ABI check for mysql/psi/psi.h, when using PSI_VERSION_2. + This file is only used to automate detection of changes between versions. + Do not include this file, include mysql/psi/psi.h instead. +*/ +#define USE_PSI_2 +#define HAVE_PSI_INTERFACE +#define MY_GLOBAL_INCLUDED +#include "mysql/psi/psi.h" + diff --git a/EQ2/source/depends/mariadb-10.1.19/include/mysql/psi/psi_abi_v2.h.pp b/EQ2/source/depends/mariadb-10.1.19/include/mysql/psi/psi_abi_v2.h.pp new file mode 100644 index 000000000..4e81fd66c --- /dev/null +++ b/EQ2/source/depends/mariadb-10.1.19/include/mysql/psi/psi_abi_v2.h.pp @@ -0,0 +1,213 @@ +C_MODE_START +struct TABLE_SHARE; +struct sql_digest_storage; +struct PSI_mutex; +typedef struct PSI_mutex PSI_mutex; +struct PSI_rwlock; +typedef struct PSI_rwlock PSI_rwlock; +struct PSI_cond; +typedef struct PSI_cond PSI_cond; +struct PSI_table_share; +typedef struct PSI_table_share PSI_table_share; +struct PSI_table; +typedef struct PSI_table PSI_table; +struct PSI_thread; +typedef struct PSI_thread PSI_thread; +struct PSI_file; +typedef struct PSI_file PSI_file; +struct PSI_socket; +typedef struct PSI_socket PSI_socket; +struct PSI_table_locker; +typedef struct PSI_table_locker PSI_table_locker; +struct PSI_statement_locker; +typedef struct PSI_statement_locker PSI_statement_locker; +struct PSI_idle_locker; +typedef struct PSI_idle_locker PSI_idle_locker; +struct PSI_digest_locker; +typedef struct PSI_digest_locker PSI_digest_locker; +struct PSI_bootstrap +{ + void* (*get_interface)(int version); +}; +typedef struct PSI_bootstrap PSI_bootstrap; +struct PSI_mutex_locker; +typedef struct PSI_mutex_locker PSI_mutex_locker; +struct PSI_rwlock_locker; +typedef struct PSI_rwlock_locker PSI_rwlock_locker; +struct PSI_cond_locker; +typedef struct PSI_cond_locker PSI_cond_locker; +struct PSI_file_locker; +typedef struct PSI_file_locker PSI_file_locker; +struct PSI_socket_locker; +typedef struct PSI_socket_locker PSI_socket_locker; +enum PSI_mutex_operation +{ + PSI_MUTEX_LOCK= 0, + PSI_MUTEX_TRYLOCK= 1 +}; +typedef enum PSI_mutex_operation PSI_mutex_operation; +enum PSI_rwlock_operation +{ + PSI_RWLOCK_READLOCK= 0, + PSI_RWLOCK_WRITELOCK= 1, + PSI_RWLOCK_TRYREADLOCK= 2, + PSI_RWLOCK_TRYWRITELOCK= 3 +}; +typedef enum PSI_rwlock_operation PSI_rwlock_operation; +enum PSI_cond_operation +{ + PSI_COND_WAIT= 0, + PSI_COND_TIMEDWAIT= 1 +}; +typedef enum PSI_cond_operation PSI_cond_operation; +enum PSI_file_operation +{ + PSI_FILE_CREATE= 0, + PSI_FILE_CREATE_TMP= 1, + PSI_FILE_OPEN= 2, + PSI_FILE_STREAM_OPEN= 3, + PSI_FILE_CLOSE= 4, + PSI_FILE_STREAM_CLOSE= 5, + PSI_FILE_READ= 6, + PSI_FILE_WRITE= 7, + PSI_FILE_SEEK= 8, + PSI_FILE_TELL= 9, + PSI_FILE_FLUSH= 10, + PSI_FILE_STAT= 11, + PSI_FILE_FSTAT= 12, + PSI_FILE_CHSIZE= 13, + PSI_FILE_DELETE= 14, + PSI_FILE_RENAME= 15, + PSI_FILE_SYNC= 16 +}; +typedef enum PSI_file_operation PSI_file_operation; +enum PSI_table_io_operation +{ + PSI_TABLE_FETCH_ROW= 0, + PSI_TABLE_WRITE_ROW= 1, + PSI_TABLE_UPDATE_ROW= 2, + PSI_TABLE_DELETE_ROW= 3 +}; +typedef enum PSI_table_io_operation PSI_table_io_operation; +enum PSI_table_lock_operation +{ + PSI_TABLE_LOCK= 0, + PSI_TABLE_EXTERNAL_LOCK= 1 +}; +typedef enum PSI_table_lock_operation PSI_table_lock_operation; +enum PSI_socket_state +{ + PSI_SOCKET_STATE_IDLE= 1, + PSI_SOCKET_STATE_ACTIVE= 2 +}; +typedef enum PSI_socket_state PSI_socket_state; +enum PSI_socket_operation +{ + PSI_SOCKET_CREATE= 0, + PSI_SOCKET_CONNECT= 1, + PSI_SOCKET_BIND= 2, + PSI_SOCKET_CLOSE= 3, + PSI_SOCKET_SEND= 4, + PSI_SOCKET_RECV= 5, + PSI_SOCKET_SENDTO= 6, + PSI_SOCKET_RECVFROM= 7, + PSI_SOCKET_SENDMSG= 8, + PSI_SOCKET_RECVMSG= 9, + PSI_SOCKET_SEEK= 10, + PSI_SOCKET_OPT= 11, + PSI_SOCKET_STAT= 12, + PSI_SOCKET_SHUTDOWN= 13, + PSI_SOCKET_SELECT= 14 +}; +typedef enum PSI_socket_operation PSI_socket_operation; +typedef unsigned int PSI_mutex_key; +typedef unsigned int PSI_rwlock_key; +typedef unsigned int PSI_cond_key; +typedef unsigned int PSI_thread_key; +typedef unsigned int PSI_file_key; +typedef unsigned int PSI_stage_key; +typedef unsigned int PSI_statement_key; +typedef unsigned int PSI_socket_key; +struct PSI_v2 +{ + int placeholder; +}; +struct PSI_mutex_info_v2 +{ + int placeholder; +}; +struct PSI_rwlock_info_v2 +{ + int placeholder; +}; +struct PSI_cond_info_v2 +{ + int placeholder; +}; +struct PSI_thread_info_v2 +{ + int placeholder; +}; +struct PSI_file_info_v2 +{ + int placeholder; +}; +struct PSI_stage_info_v2 +{ + int placeholder; +}; +struct PSI_statement_info_v2 +{ + int placeholder; +}; +struct PSI_idle_locker_state_v2 +{ + int placeholder; +}; +struct PSI_mutex_locker_state_v2 +{ + int placeholder; +}; +struct PSI_rwlock_locker_state_v2 +{ + int placeholder; +}; +struct PSI_cond_locker_state_v2 +{ + int placeholder; +}; +struct PSI_file_locker_state_v2 +{ + int placeholder; +}; +struct PSI_table_locker_state_v2 +{ + int placeholder; +}; +struct PSI_statement_locker_state_v2 +{ + int placeholder; +}; +struct PSI_socket_locker_state_v2 +{ + int placeholder; +}; +typedef struct PSI_v2 PSI; +typedef struct PSI_mutex_info_v2 PSI_mutex_info; +typedef struct PSI_rwlock_info_v2 PSI_rwlock_info; +typedef struct PSI_cond_info_v2 PSI_cond_info; +typedef struct PSI_thread_info_v2 PSI_thread_info; +typedef struct PSI_file_info_v2 PSI_file_info; +typedef struct PSI_stage_info_v2 PSI_stage_info; +typedef struct PSI_statement_info_v2 PSI_statement_info; +typedef struct PSI_socket_info_v2 PSI_socket_info; +typedef struct PSI_idle_locker_state_v2 PSI_idle_locker_state; +typedef struct PSI_mutex_locker_state_v2 PSI_mutex_locker_state; +typedef struct PSI_rwlock_locker_state_v2 PSI_rwlock_locker_state; +typedef struct PSI_cond_locker_state_v2 PSI_cond_locker_state; +typedef struct PSI_file_locker_state_v2 PSI_file_locker_state; +typedef struct PSI_table_locker_state_v2 PSI_table_locker_state; +typedef struct PSI_statement_locker_state_v2 PSI_statement_locker_state; +typedef struct PSI_socket_locker_state_v2 PSI_socket_locker_state; +extern MYSQL_PLUGIN_IMPORT PSI *PSI_server; +C_MODE_END diff --git a/EQ2/source/depends/mariadb-10.1.19/include/mysql/service_debug_sync.h b/EQ2/source/depends/mariadb-10.1.19/include/mysql/service_debug_sync.h new file mode 100644 index 000000000..eee8e6bbe --- /dev/null +++ b/EQ2/source/depends/mariadb-10.1.19/include/mysql/service_debug_sync.h @@ -0,0 +1,361 @@ +#ifndef MYSQL_SERVICE_DEBUG_SYNC_INCLUDED +/* Copyright (c) 2009, 2010, Oracle and/or its affiliates. + Copyright (c) 2012, Monty Program Ab + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; version 2 of the License. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ + +/** + @file + == Debug Sync Facility == + + The Debug Sync Facility allows placement of synchronization points in + the server code by using the DEBUG_SYNC macro: + + open_tables(...) + + DEBUG_SYNC(thd, "after_open_tables"); + + lock_tables(...) + + When activated, a sync point can + + - Emit a signal and/or + - Wait for a signal + + Nomenclature: + + - signal: A value of a global variable that persists + until overwritten by a new signal. The global + variable can also be seen as a "signal post" + or "flag mast". Then the signal is what is + attached to the "signal post" or "flag mast". + + - emit a signal: Assign the value (the signal) to the global + variable ("set a flag") and broadcast a + global condition to wake those waiting for + a signal. + + - wait for a signal: Loop over waiting for the global condition until + the global value matches the wait-for signal. + + By default, all sync points are inactive. They do nothing (except to + burn a couple of CPU cycles for checking if they are active). + + A sync point becomes active when an action is requested for it. + To do so, put a line like this in the test case file: + + SET DEBUG_SYNC= 'after_open_tables SIGNAL opened WAIT_FOR flushed'; + + This activates the sync point 'after_open_tables'. It requests it to + emit the signal 'opened' and wait for another thread to emit the signal + 'flushed' when the thread's execution runs through the sync point. + + For every sync point there can be one action per thread only. Every + thread can request multiple actions, but only one per sync point. In + other words, a thread can activate multiple sync points. + + Here is an example how to activate and use the sync points: + + --connection conn1 + SET DEBUG_SYNC= 'after_open_tables SIGNAL opened WAIT_FOR flushed'; + send INSERT INTO t1 VALUES(1); + --connection conn2 + SET DEBUG_SYNC= 'now WAIT_FOR opened'; + SET DEBUG_SYNC= 'after_abort_locks SIGNAL flushed'; + FLUSH TABLE t1; + + When conn1 runs through the INSERT statement, it hits the sync point + 'after_open_tables'. It notices that it is active and executes its + action. It emits the signal 'opened' and waits for another thread to + emit the signal 'flushed'. + + conn2 waits immediately at the special sync point 'now' for another + thread to emit the 'opened' signal. + + A signal remains in effect until it is overwritten. If conn1 signals + 'opened' before conn2 reaches 'now', conn2 will still find the 'opened' + signal. It does not wait in this case. + + When conn2 reaches 'after_abort_locks', it signals 'flushed', which lets + conn1 awake. + + Normally the activation of a sync point is cleared when it has been + executed. Sometimes it is necessary to keep the sync point active for + another execution. You can add an execute count to the action: + + SET DEBUG_SYNC= 'name SIGNAL sig EXECUTE 3'; + + This sets the signal point's activation counter to 3. Each execution + decrements the counter. After the third execution the sync point + becomes inactive. + + One of the primary goals of this facility is to eliminate sleeps from + the test suite. In most cases it should be possible to rewrite test + cases so that they do not need to sleep. (But this facility cannot + synchronize multiple processes.) However, to support test development, + and as a last resort, sync point waiting times out. There is a default + timeout, but it can be overridden: + + SET DEBUG_SYNC= 'name WAIT_FOR sig TIMEOUT 10 EXECUTE 2'; + + TIMEOUT 0 is special: If the signal is not present, the wait times out + immediately. + + When a wait timed out (even on TIMEOUT 0), a warning is generated so + that it shows up in the test result. + + You can throw an error message and kill the query when a synchronization + point is hit a certain number of times: + + SET DEBUG_SYNC= 'name HIT_LIMIT 3'; + + Or combine it with signal and/or wait: + + SET DEBUG_SYNC= 'name SIGNAL sig EXECUTE 2 HIT_LIMIT 3'; + + Here the first two hits emit the signal, the third hit returns the error + message and kills the query. + + For cases where you are not sure that an action is taken and thus + cleared in any case, you can force to clear (deactivate) a sync point: + + SET DEBUG_SYNC= 'name CLEAR'; + + If you want to clear all actions and clear the global signal, use: + + SET DEBUG_SYNC= 'RESET'; + + This is the only way to reset the global signal to an empty string. + + For testing of the facility itself you can execute a sync point just + as if it had been hit: + + SET DEBUG_SYNC= 'name TEST'; + + + === Formal Syntax === + + The string to "assign" to the DEBUG_SYNC variable can contain: + + {RESET | + TEST | + CLEAR | + {{SIGNAL | + WAIT_FOR [TIMEOUT ]} + [EXECUTE ] &| HIT_LIMIT } + + Here '&|' means 'and/or'. This means that one of the sections + separated by '&|' must be present or both of them. + + + === Activation/Deactivation === + + The facility is an optional part of the MySQL server. + It is enabled in a debug server by default. + + ./configure --enable-debug-sync + + The Debug Sync Facility, when compiled in, is disabled by default. It + can be enabled by a mysqld command line option: + + --debug-sync-timeout[=default_wait_timeout_value_in_seconds] + + 'default_wait_timeout_value_in_seconds' is the default timeout for the + WAIT_FOR action. If set to zero, the facility stays disabled. + + The facility is enabled by default in the test suite, but can be + disabled with: + + mysql-test-run.pl ... --debug-sync-timeout=0 ... + + Likewise the default wait timeout can be set: + + mysql-test-run.pl ... --debug-sync-timeout=10 ... + + The command line option influences the readable value of the system + variable 'debug_sync'. + + * If the facility is not compiled in, the system variable does not exist. + + * If --debug-sync-timeout=0 the value of the variable reads as "OFF". + + * Otherwise the value reads as "ON - current signal: " followed by the + current signal string, which can be empty. + + The readable variable value is the same, regardless if read as global + or session value. + + Setting the 'debug-sync' system variable requires 'SUPER' privilege. + You can never read back the string that you assigned to the variable, + unless you assign the value that the variable does already have. But + that would give a parse error. A syntactically correct string is + parsed into a debug sync action and stored apart from the variable value. + + + === Implementation === + + Pseudo code for a sync point: + + #define DEBUG_SYNC(thd, sync_point_name) + if (unlikely(opt_debug_sync_timeout)) + debug_sync(thd, STRING_WITH_LEN(sync_point_name)) + + The sync point performs a binary search in a sorted array of actions + for this thread. + + The SET DEBUG_SYNC statement adds a requested action to the array or + overwrites an existing action for the same sync point. When it adds a + new action, the array is sorted again. + + + === A typical synchronization pattern === + + There are quite a few places in MySQL, where we use a synchronization + pattern like this: + + mysql_mutex_lock(&mutex); + thd->enter_cond(&condition_variable, &mutex, new_message); + #if defined(ENABLE_DEBUG_SYNC) + if (!thd->killed && !end_of_wait_condition) + DEBUG_SYNC(thd, "sync_point_name"); + #endif + while (!thd->killed && !end_of_wait_condition) + mysql_cond_wait(&condition_variable, &mutex); + thd->exit_cond(old_message); + + Here some explanations: + + thd->enter_cond() is used to register the condition variable and the + mutex in thd->mysys_var. This is done to allow the thread to be + interrupted (killed) from its sleep. Another thread can find the + condition variable to signal and mutex to use for synchronization in + this thread's THD::mysys_var. + + thd->enter_cond() requires the mutex to be acquired in advance. + + thd->exit_cond() unregisters the condition variable and mutex and + releases the mutex. + + If you want to have a Debug Sync point with the wait, please place it + behind enter_cond(). Only then you can safely decide, if the wait will + be taken. Also you will have THD::proc_info correct when the sync + point emits a signal. DEBUG_SYNC sets its own proc_info, but restores + the previous one before releasing its internal mutex. As soon as + another thread sees the signal, it does also see the proc_info from + before entering the sync point. In this case it will be "new_message", + which is associated with the wait that is to be synchronized. + + In the example above, the wait condition is repeated before the sync + point. This is done to skip the sync point, if no wait takes place. + The sync point is before the loop (not inside the loop) to have it hit + once only. It is possible that the condition variable is signaled + multiple times without the wait condition to be true. + + A bit off-topic: At some places, the loop is taken around the whole + synchronization pattern: + + while (!thd->killed && !end_of_wait_condition) + { + mysql_mutex_lock(&mutex); + thd->enter_cond(&condition_variable, &mutex, new_message); + if (!thd->killed [&& !end_of_wait_condition]) + { + [DEBUG_SYNC(thd, "sync_point_name");] + mysql_cond_wait(&condition_variable, &mutex); + } + thd->exit_cond(old_message); + } + + Note that it is important to repeat the test for thd->killed after + enter_cond(). Otherwise the killing thread may kill this thread after + it tested thd->killed in the loop condition and before it registered + the condition variable and mutex in enter_cond(). In this case, the + killing thread does not know that this thread is going to wait on a + condition variable. It would just set THD::killed. But if we would not + test it again, we would go asleep though we are killed. If the killing + thread would kill us when we are after the second test, but still + before sleeping, we hold the mutex, which is registered in mysys_var. + The killing thread would try to acquire the mutex before signaling + the condition variable. Since the mutex is only released implicitly in + mysql_cond_wait(), the signaling happens at the right place. We + have a safe synchronization. + + === Co-work with the DBUG facility === + + When running the MySQL test suite with the --debug-dbug command line + option, the Debug Sync Facility writes trace messages to the DBUG + trace. The following shell commands proved very useful in extracting + relevant information: + + egrep 'query:|debug_sync_exec:' mysql-test/var/log/mysqld.1.trace + + It shows all executed SQL statements and all actions executed by + synchronization points. + + Sometimes it is also useful to see, which synchronization points have + been run through (hit) with or without executing actions. Then add + "|debug_sync_point:" to the egrep pattern. + + === Further reading === + + For a discussion of other methods to synchronize threads see + http://forge.mysql.com/wiki/MySQL_Internals_Test_Synchronization + + For complete syntax tests, functional tests, and examples see the test + case debug_sync.test. + + See also http://forge.mysql.com/worklog/task.php?id=4259 +*/ + +#ifndef MYSQL_ABI_CHECK +#include +#endif + +#ifdef __cplusplus +extern "C" { +#endif + +#ifdef MYSQL_DYNAMIC_PLUGIN +extern void (*debug_sync_service)(MYSQL_THD, const char *, size_t); +#else +#define debug_sync_service debug_sync_C_callback_ptr +extern void (*debug_sync_C_callback_ptr)(MYSQL_THD, const char *, size_t); +#endif + +#ifdef ENABLED_DEBUG_SYNC +#define DEBUG_SYNC(thd, name) \ + do { \ + if (debug_sync_service) \ + debug_sync_service(thd, STRING_WITH_LEN(name)); \ + } while(0) + +#define DEBUG_SYNC_C_IF_THD(thd, name) \ + do { \ + if (debug_sync_service && thd) \ + debug_sync_service((MYSQL_THD) thd, STRING_WITH_LEN(name)); \ + } while(0) +#else +#define DEBUG_SYNC(thd,name) do { } while(0) +#define DEBUG_SYNC_C_IF_THD(thd, _sync_point_name_) do { } while(0) +#endif /* defined(ENABLED_DEBUG_SYNC) */ + +/* compatibility macro */ +#define DEBUG_SYNC_C(name) DEBUG_SYNC(NULL, name) + +#ifdef __cplusplus +} +#endif + +#define MYSQL_SERVICE_DEBUG_SYNC_INCLUDED +#endif diff --git a/EQ2/source/depends/mariadb-10.1.19/include/mysql/service_encryption.h b/EQ2/source/depends/mariadb-10.1.19/include/mysql/service_encryption.h new file mode 100644 index 000000000..77afc0473 --- /dev/null +++ b/EQ2/source/depends/mariadb-10.1.19/include/mysql/service_encryption.h @@ -0,0 +1,131 @@ +#ifndef MYSQL_SERVICE_ENCRYPTION_INCLUDED +/* Copyright (c) 2015, MariaDB + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; version 2 of the License. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ + +/** + @file + encryption service + + Functions to support data encryption and encryption key management. + They are normally implemented in an encryption plugin, so this service + connects encryption *consumers* (e.g. storage engines) to the encryption + *provider* (encryption plugin). +*/ + +#ifdef __cplusplus +extern "C" { +#endif + +#ifndef MYSQL_ABI_CHECK +#ifdef _WIN32 +#include +#ifndef __cplusplus +#define inline __inline +#endif +#elif defined(__FreeBSD__) || defined(__OpenBSD__) || defined(__NetBSD__) || defined(__DragonFly__) +#include +#else +#include +#endif +#endif + +/* returned from encryption_key_get_latest_version() */ +#define ENCRYPTION_KEY_VERSION_INVALID (~(unsigned int)0) +#define ENCRYPTION_KEY_NOT_ENCRYPTED (0) + +#define ENCRYPTION_KEY_SYSTEM_DATA 1 +#define ENCRYPTION_KEY_TEMPORARY_DATA 2 + +/* returned from encryption_key_get() */ +#define ENCRYPTION_KEY_BUFFER_TOO_SMALL (100) + +#define ENCRYPTION_FLAG_DECRYPT 0 +#define ENCRYPTION_FLAG_ENCRYPT 1 +#define ENCRYPTION_FLAG_NOPAD 2 + +struct encryption_service_st { + unsigned int (*encryption_key_get_latest_version_func)(unsigned int key_id); + unsigned int (*encryption_key_get_func)(unsigned int key_id, unsigned int key_version, + unsigned char* buffer, unsigned int* length); + unsigned int (*encryption_ctx_size_func)(unsigned int key_id, unsigned int key_version); + int (*encryption_ctx_init_func)(void *ctx, const unsigned char* key, unsigned int klen, + const unsigned char* iv, unsigned int ivlen, + int flags, unsigned int key_id, + unsigned int key_version); + int (*encryption_ctx_update_func)(void *ctx, const unsigned char* src, unsigned int slen, + unsigned char* dst, unsigned int* dlen); + int (*encryption_ctx_finish_func)(void *ctx, unsigned char* dst, unsigned int* dlen); + unsigned int (*encryption_encrypted_length_func)(unsigned int slen, unsigned int key_id, unsigned int key_version); +}; + +#ifdef MYSQL_DYNAMIC_PLUGIN + +extern struct encryption_service_st *encryption_service; + +#define encryption_key_get_latest_version(KI) encryption_service->encryption_key_get_latest_version_func(KI) +#define encryption_key_get(KI,KV,K,S) encryption_service->encryption_key_get_func((KI),(KV),(K),(S)) +#define encryption_ctx_size(KI,KV) encryption_service->encryption_ctx_size_func((KI),(KV)) +#define encryption_ctx_init(CTX,K,KL,IV,IVL,F,KI,KV) encryption_service->encryption_ctx_init_func((CTX),(K),(KL),(IV),(IVL),(F),(KI),(KV)) +#define encryption_ctx_update(CTX,S,SL,D,DL) encryption_service->encryption_ctx_update_func((CTX),(S),(SL),(D),(DL)) +#define encryption_ctx_finish(CTX,D,DL) encryption_service->encryption_ctx_finish_func((CTX),(D),(DL)) +#define encryption_encrypted_length(SL,KI,KV) encryption_service->encryption_encrypted_length_func((SL),(KI),(KV)) +#else + +extern struct encryption_service_st encryption_handler; + +#define encryption_key_get_latest_version(KI) encryption_handler.encryption_key_get_latest_version_func(KI) +#define encryption_key_get(KI,KV,K,S) encryption_handler.encryption_key_get_func((KI),(KV),(K),(S)) +#define encryption_ctx_size(KI,KV) encryption_handler.encryption_ctx_size_func((KI),(KV)) +#define encryption_ctx_init(CTX,K,KL,IV,IVL,F,KI,KV) encryption_handler.encryption_ctx_init_func((CTX),(K),(KL),(IV),(IVL),(F),(KI),(KV)) +#define encryption_ctx_update(CTX,S,SL,D,DL) encryption_handler.encryption_ctx_update_func((CTX),(S),(SL),(D),(DL)) +#define encryption_ctx_finish(CTX,D,DL) encryption_handler.encryption_ctx_finish_func((CTX),(D),(DL)) +#define encryption_encrypted_length(SL,KI,KV) encryption_handler.encryption_encrypted_length_func((SL),(KI),(KV)) +#endif + +static inline unsigned int encryption_key_id_exists(unsigned int id) +{ + return encryption_key_get_latest_version(id) != ENCRYPTION_KEY_VERSION_INVALID; +} + +static inline unsigned int encryption_key_version_exists(unsigned int id, unsigned int version) +{ + unsigned int unused; + return encryption_key_get(id, version, NULL, &unused) != ENCRYPTION_KEY_VERSION_INVALID; +} + +static inline int encryption_crypt(const unsigned char* src, unsigned int slen, + unsigned char* dst, unsigned int* dlen, + const unsigned char* key, unsigned int klen, + const unsigned char* iv, unsigned int ivlen, + int flags, unsigned int key_id, unsigned int key_version) +{ + void *ctx= alloca(encryption_ctx_size(key_id, key_version)); + int res1, res2; + unsigned int d1, d2; + if ((res1= encryption_ctx_init(ctx, key, klen, iv, ivlen, flags, key_id, key_version))) + return res1; + res1= encryption_ctx_update(ctx, src, slen, dst, &d1); + res2= encryption_ctx_finish(ctx, dst + d1, &d2); + *dlen= d1 + d2; + return res1 ? res1 : res2; +} + +#ifdef __cplusplus +} +#endif + +#define MYSQL_SERVICE_ENCRYPTION_INCLUDED +#endif + diff --git a/EQ2/source/depends/mariadb-10.1.19/include/mysql/service_encryption_scheme.h b/EQ2/source/depends/mariadb-10.1.19/include/mysql/service_encryption_scheme.h new file mode 100644 index 000000000..195c7aa4a --- /dev/null +++ b/EQ2/source/depends/mariadb-10.1.19/include/mysql/service_encryption_scheme.h @@ -0,0 +1,133 @@ +#ifndef MYSQL_SERVICE_ENCRYPTION_SCHEME_INCLUDED +/* Copyright (c) 2015, MariaDB + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; version 2 of the License. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ + +/** + @file + encryption scheme service + + A higher-level access to encryption service. + + This is a helper service that storage engines use to encrypt tables on disk. + It requests keys from the plugin, generates temporary or local keys + from the global (as returned by the plugin) keys, etc. + + To use the service: + + * st_encryption_scheme object is created per space. A "space" can be + a table space in XtraDB/InnoDB, a file in Aria, etc. The whole + space is encrypted with the one key id. + + * The service does not take the key and the IV as parameters for + encryption or decryption. Instead it takes two 32-bit integers and + one 64-bit integer (and requests the key from an encryption + plugin, if needed). + + * The service requests the global key from the encryption plugin + automatically as needed. Three last keys are cached in the + st_encryption_scheme. Number of key requests (number of cache + misses) are counted in st_encryption_scheme::keyserver_requests + + * If an st_encryption_scheme can be used concurrently by different + threads, it needs to be able to lock itself when accessing the key + cache. Set the st_encryption_scheme::locker appropriately. If + non-zero, it will be invoked by encrypt/decrypt functions to lock + and unlock the scheme when needed. + + * Implementation details (in particular, key derivation) are defined + by the scheme type. Currently only schema type 1 is supported. + + In the schema type 1, every "space" (table space in XtraDB/InnoDB, + file in Aria) is encrypted with a different space-local key: + + * Every space has a 16-byte unique identifier (typically it's + generated randomly and stored in the space). The caller should + put it into st_encryption_scheme::iv. + + * Space-local key is generated by encrypting this identifier with + the global encryption key (of the given id and version) using AES_ECB. + + * Encryption/decryption parameters for a page are typically the + 4-byte space id, 4-byte page position (offset, page number, etc), + and the 8-byte LSN. This guarantees that they'll be different for + any two pages (of the same or different tablespaces) and also that + they'll change for the same page when it's modified. They don't need + to be secret (they create the IV, not the encryption key). +*/ + +#ifdef __cplusplus +extern "C" { +#endif + +#define ENCRYPTION_SCHEME_KEY_INVALID -1 +#define ENCRYPTION_SCHEME_BLOCK_LENGTH 16 + +struct st_encryption_scheme_key { + unsigned int version; + unsigned char key[ENCRYPTION_SCHEME_BLOCK_LENGTH]; +}; + +struct st_encryption_scheme { + unsigned char iv[ENCRYPTION_SCHEME_BLOCK_LENGTH]; + struct st_encryption_scheme_key key[3]; + unsigned int keyserver_requests; + unsigned int key_id; + unsigned int type; + + void (*locker)(struct st_encryption_scheme *self, int release); +}; + +extern struct encryption_scheme_service_st { + int (*encryption_scheme_encrypt_func) + (const unsigned char* src, unsigned int slen, + unsigned char* dst, unsigned int* dlen, + struct st_encryption_scheme *scheme, + unsigned int key_version, unsigned int i32_1, + unsigned int i32_2, unsigned long long i64); + int (*encryption_scheme_decrypt_func) + (const unsigned char* src, unsigned int slen, + unsigned char* dst, unsigned int* dlen, + struct st_encryption_scheme *scheme, + unsigned int key_version, unsigned int i32_1, + unsigned int i32_2, unsigned long long i64); +} *encryption_scheme_service; + +#ifdef MYSQL_DYNAMIC_PLUGIN + +#define encryption_scheme_encrypt(S,SL,D,DL,SCH,KV,I32,J32,I64) encryption_scheme_service->encryption_scheme_encrypt_func(S,SL,D,DL,SCH,KV,I32,J32,I64) +#define encryption_scheme_decrypt(S,SL,D,DL,SCH,KV,I32,J32,I64) encryption_scheme_service->encryption_scheme_decrypt_func(S,SL,D,DL,SCH,KV,I32,J32,I64) + +#else + +int encryption_scheme_encrypt(const unsigned char* src, unsigned int slen, + unsigned char* dst, unsigned int* dlen, + struct st_encryption_scheme *scheme, + unsigned int key_version, unsigned int i32_1, + unsigned int i32_2, unsigned long long i64); +int encryption_scheme_decrypt(const unsigned char* src, unsigned int slen, + unsigned char* dst, unsigned int* dlen, + struct st_encryption_scheme *scheme, + unsigned int key_version, unsigned int i32_1, + unsigned int i32_2, unsigned long long i64); + +#endif + + +#ifdef __cplusplus +} +#endif + +#define MYSQL_SERVICE_ENCRYPTION_SCHEME_INCLUDED +#endif diff --git a/EQ2/source/depends/mariadb-10.1.19/include/mysql/service_kill_statement.h b/EQ2/source/depends/mariadb-10.1.19/include/mysql/service_kill_statement.h new file mode 100644 index 000000000..995b21f0a --- /dev/null +++ b/EQ2/source/depends/mariadb-10.1.19/include/mysql/service_kill_statement.h @@ -0,0 +1,71 @@ +/* Copyright (c) 2013, Monty Program Ab. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; version 2 of the License. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ + +#ifndef MYSQL_SERVICE_KILL_STATEMENT_INCLUDED +#define MYSQL_SERVICE_KILL_STATEMENT_INCLUDED + +/** + @file + This service provides functions that allow plugins to support + the KILL statement. + + In MySQL support for the KILL statement is cooperative. The KILL + statement only sets a "killed" flag. This function returns the value + of that flag. A thread should check it often, especially inside + time-consuming loops, and gracefully abort the operation if it is + non-zero. + + thd_is_killed(thd) + @return 0 - no KILL statement was issued, continue normally + @return 1 - there was a KILL statement, abort the execution. + + thd_kill_level(thd) + @return thd_kill_levels_enum values +*/ + +#ifdef __cplusplus +extern "C" { +#endif + +enum thd_kill_levels { + THD_IS_NOT_KILLED=0, + THD_ABORT_SOFTLY=50, /**< abort when possible, don't leave tables corrupted */ + THD_ABORT_ASAP=100, /**< abort asap */ +}; + +extern struct kill_statement_service_st { + enum thd_kill_levels (*thd_kill_level_func)(const MYSQL_THD); +} *thd_kill_statement_service; + +/* backward compatibility helper */ +#define thd_killed(THD) (thd_kill_level(THD) == THD_ABORT_ASAP) + +#ifdef MYSQL_DYNAMIC_PLUGIN + +#define thd_kill_level(THD) \ + thd_kill_statement_service->thd_kill_level_func(THD) + +#else + +enum thd_kill_levels thd_kill_level(const MYSQL_THD); + +#endif + +#ifdef __cplusplus +} +#endif + +#endif + diff --git a/EQ2/source/depends/mariadb-10.1.19/include/mysql/service_logger.h b/EQ2/source/depends/mariadb-10.1.19/include/mysql/service_logger.h new file mode 100644 index 000000000..d14b28da7 --- /dev/null +++ b/EQ2/source/depends/mariadb-10.1.19/include/mysql/service_logger.h @@ -0,0 +1,105 @@ +/* Copyright (C) 2012 Monty Program Ab + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; version 2 of the License. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ + +#ifndef MYSQL_SERVICE_LOGGER_INCLUDED +#define MYSQL_SERVICE_LOGGER_INCLUDED + +#ifndef MYSQL_ABI_CHECK +#include +#endif + +/** + @file + logger service + + Log file with rotation implementation. + + This service implements logging with possible rotation + of the log files. Interface intentionally tries to be similar to FILE* + related functions. + + So that one can open the log with logger_open(), specifying + the limit on the logfile size and the rotations number. + + Then it's possible to write messages to the log with + logger_printf or logger_vprintf functions. + + As the size of the logfile grows over the specified limit, + it is renamed to 'logfile.1'. The former 'logfile.1' becomes + 'logfile.2', etc. The file 'logfile.rotations' is removed. + That's how the rotation works. + + The rotation can be forced with the logger_rotate() call. + + Finally the log should be closed with logger_close(). + +@notes: + Implementation checks the size of the log file before it starts new + printf into it. So the size of the file gets over the limit when it rotates. + + The access is secured with the mutex, so the log is threadsafe. +*/ + + +#ifdef __cplusplus +extern "C" { +#endif + +typedef struct logger_handle_st LOGGER_HANDLE; + +extern struct logger_service_st { + void (*logger_init_mutexes)(); + LOGGER_HANDLE* (*open)(const char *path, + unsigned long long size_limit, + unsigned int rotations); + int (*close)(LOGGER_HANDLE *log); + int (*vprintf)(LOGGER_HANDLE *log, const char *fmt, va_list argptr); + int (*printf)(LOGGER_HANDLE *log, const char *fmt, ...); + int (*write)(LOGGER_HANDLE *log, const char *buffer, size_t size); + int (*rotate)(LOGGER_HANDLE *log); +} *logger_service; + +#ifdef MYSQL_DYNAMIC_PLUGIN + +#define logger_init_mutexes logger_service->logger_init_mutexes +#define logger_open(path, size_limit, rotations) \ + (logger_service->open(path, size_limit, rotations)) +#define logger_close(log) (logger_service->close(log)) +#define logger_rotate(log) (logger_service->rotate(log)) +#define logger_vprintf(log, fmt, argptr) (logger_service->\ + vprintf(log, fmt, argptr)) +#define logger_printf (*logger_service->printf) +#define logger_write(log, buffer, size) \ + (logger_service->write(log, buffer, size)) +#else + + void logger_init_mutexes(); + LOGGER_HANDLE *logger_open(const char *path, + unsigned long long size_limit, + unsigned int rotations); + int logger_close(LOGGER_HANDLE *log); + int logger_vprintf(LOGGER_HANDLE *log, const char *fmt, va_list argptr); + int logger_printf(LOGGER_HANDLE *log, const char *fmt, ...); + int logger_write(LOGGER_HANDLE *log, const char *buffer, size_t size); + int logger_rotate(LOGGER_HANDLE *log); +#endif + + +#ifdef __cplusplus +} +#endif + +#endif /*MYSQL_SERVICE_LOGGER_INCLUDED*/ + diff --git a/EQ2/source/depends/mariadb-10.1.19/include/mysql/service_md5.h b/EQ2/source/depends/mariadb-10.1.19/include/mysql/service_md5.h new file mode 100644 index 000000000..5e589e574 --- /dev/null +++ b/EQ2/source/depends/mariadb-10.1.19/include/mysql/service_md5.h @@ -0,0 +1,69 @@ +#ifndef MYSQL_SERVICE_MD5_INCLUDED +/* Copyright (c) 2014, Monty Program Ab + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; version 2 of the License. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ + +/** + @file + my md5 service + + Functions to calculate MD5 hash from a memory buffer +*/ + +#ifdef __cplusplus +extern "C" { +#endif + +#ifndef MYSQL_ABI_CHECK +#include +#endif + +#define MY_MD5_HASH_SIZE 16 /* Hash size in bytes */ + +extern struct my_md5_service_st { + void (*my_md5_type)(unsigned char*, const char*, size_t); + void (*my_md5_multi_type)(unsigned char*, ...); + size_t (*my_md5_context_size_type)(); + void (*my_md5_init_type)(void *); + void (*my_md5_input_type)(void *, const unsigned char *, size_t); + void (*my_md5_result_type)(void *, unsigned char *); +} *my_md5_service; + +#ifdef MYSQL_DYNAMIC_PLUGIN + +#define my_md5(A,B,C) my_md5_service->my_md5_type(A,B,C) +#define my_md5_multi my_md5_service->my_md5_multi_type +#define my_md5_context_size() my_md5_service->my_md5_context_size_type() +#define my_md5_init(A) my_md5_service->my_md5_init_type(A) +#define my_md5_input(A,B,C) my_md5_service->my_md5_input_type(A,B,C) +#define my_md5_result(A,B) my_md5_service->my_md5_result_type(A,B) + +#else + +void my_md5(unsigned char*, const char*, size_t); +void my_md5_multi(unsigned char*, ...); +size_t my_md5_context_size(); +void my_md5_init(void *context); +void my_md5_input(void *context, const unsigned char *buf, size_t len); +void my_md5_result(void *context, unsigned char *digest); + +#endif + +#ifdef __cplusplus +} +#endif + +#define MYSQL_SERVICE_MD5_INCLUDED +#endif + diff --git a/EQ2/source/depends/mariadb-10.1.19/include/mysql/service_my_snprintf.h b/EQ2/source/depends/mariadb-10.1.19/include/mysql/service_my_snprintf.h new file mode 100644 index 000000000..4a99561dd --- /dev/null +++ b/EQ2/source/depends/mariadb-10.1.19/include/mysql/service_my_snprintf.h @@ -0,0 +1,106 @@ +#ifndef MYSQL_SERVICE_MY_SNPRINTF_INCLUDED +/* Copyright (c) 2009, 2012, Oracle and/or its affiliates. All rights reserved. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; version 2 of the License. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ + +/** + @file + my_snprintf service + + Portable and limited vsnprintf() implementation. + + This is a portable, limited vsnprintf() implementation, with some + extra features. "Portable" means that it'll produce identical result + on all platforms (for example, on Windows and Linux system printf %e + formats the exponent differently, on different systems %p either + prints leading 0x or not, %s may accept null pointer or crash on + it). "Limited" means that it does not support all the C89 features. + But it supports few extensions, not in any standard. + + my_vsnprintf(to, n, fmt, ap) + + @param[out] to A buffer to store the result in + @param[in] n Store up to n-1 characters, followed by an end 0 + @param[in] fmt printf-like format string + @param[in] ap Arguments + + @return a number of bytes written to a buffer *excluding* terminating '\0' + + @post + The syntax of a format string is generally the same: + % + where everithing but the format is optional. + + Three one-character flags are recognized: + '0' has the standard zero-padding semantics; + '-' is parsed, but silently ignored; + '`' (backtick) is only supported for strings (%s) and means that the + string will be quoted according to MySQL identifier quoting rules. + + Both and can be specified as numbers or '*'. + If an asterisk is used, an argument of type int is consumed. + + can be 'l', 'll', or 'z'. + + Supported formats are 's' (null pointer is accepted, printed as + "(null)"), 'b' (extension, see below), 'c', 'd', 'i', 'u', 'x', 'o', + 'X', 'p' (works as 0x%x), 'f', 'g', 'M' (extension, see below). + + Standard syntax for positional arguments $n is supported. + + Extensions: + + Flag '`' (backtick): see above. + + Format 'b': binary buffer, prints exactly bytes from the + argument, without stopping at '\0'. + + Format 'M': takes one integer, prints this integer, space, double quote + error message, double quote. In other words + printf("%M", n) === printf("%d \"%s\"", n, strerror(n)) +*/ + +#ifdef __cplusplus +extern "C" { +#endif + +#ifndef MYSQL_ABI_CHECK +#include +#include +#endif + +extern struct my_snprintf_service_st { + size_t (*my_snprintf_type)(char*, size_t, const char*, ...); + size_t (*my_vsnprintf_type)(char *, size_t, const char*, va_list); +} *my_snprintf_service; + +#ifdef MYSQL_DYNAMIC_PLUGIN + +#define my_vsnprintf my_snprintf_service->my_vsnprintf_type +#define my_snprintf my_snprintf_service->my_snprintf_type + +#else + +size_t my_snprintf(char* to, size_t n, const char* fmt, ...); +size_t my_vsnprintf(char *to, size_t n, const char* fmt, va_list ap); + +#endif + +#ifdef __cplusplus +} +#endif + +#define MYSQL_SERVICE_MY_SNPRINTF_INCLUDED +#endif + diff --git a/EQ2/source/depends/mariadb-10.1.19/include/mysql/service_progress_report.h b/EQ2/source/depends/mariadb-10.1.19/include/mysql/service_progress_report.h new file mode 100644 index 000000000..7ec3aa4c9 --- /dev/null +++ b/EQ2/source/depends/mariadb-10.1.19/include/mysql/service_progress_report.h @@ -0,0 +1,82 @@ +#ifndef MYSQL_SERVICE_PROGRESS_REPORT_INCLUDED +/* Copyright (C) 2011 Monty Program Ab + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; version 2 of the License. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ + +/** + @file + This service allows plugins to report progress of long running operations + to the server. The progress report is visible in SHOW PROCESSLIST, + INFORMATION_SCHEMA.PROCESSLIST, and is sent to the client + if requested. + + The functions are documented at + https://mariadb.com/kb/en/progress-reporting/#how-to-add-support-for-progress-reporting-to-a-storage-engine +*/ + +#ifdef __cplusplus +extern "C" { +#endif + +#define thd_proc_info(thd, msg) set_thd_proc_info(thd, msg, \ + __func__, __FILE__, __LINE__) + +extern struct progress_report_service_st { + void (*thd_progress_init_func)(MYSQL_THD thd, unsigned int max_stage); + void (*thd_progress_report_func)(MYSQL_THD thd, + unsigned long long progress, + unsigned long long max_progress); + void (*thd_progress_next_stage_func)(MYSQL_THD thd); + void (*thd_progress_end_func)(MYSQL_THD thd); + const char *(*set_thd_proc_info_func)(MYSQL_THD, const char *info, + const char *func, + const char *file, + unsigned int line); +} *progress_report_service; + +#ifdef MYSQL_DYNAMIC_PLUGIN + +#define thd_progress_init(thd,max_stage) (progress_report_service->thd_progress_init_func((thd),(max_stage))) +#define thd_progress_report(thd, progress, max_progress) (progress_report_service->thd_progress_report_func((thd), (progress), (max_progress))) +#define thd_progress_next_stage(thd) (progress_report_service->thd_progress_next_stage_func(thd)) +#define thd_progress_end(thd) (progress_report_service->thd_progress_end_func(thd)) +#define set_thd_proc_info(thd,info,func,file,line) (progress_report_service->set_thd_proc_info_func((thd),(info),(func),(file),(line))) + +#else + +/** + Report progress for long running operations + + @param thd User thread connection handle + @param progress Where we are now + @param max_progress Progress will continue up to this +*/ +void thd_progress_init(MYSQL_THD thd, unsigned int max_stage); +void thd_progress_report(MYSQL_THD thd, + unsigned long long progress, + unsigned long long max_progress); +void thd_progress_next_stage(MYSQL_THD thd); +void thd_progress_end(MYSQL_THD thd); +const char *set_thd_proc_info(MYSQL_THD, const char * info, const char *func, + const char *file, unsigned int line); + +#endif + +#ifdef __cplusplus +} +#endif + +#define MYSQL_SERVICE_PROGRESS_REPORT_INCLUDED +#endif + diff --git a/EQ2/source/depends/mariadb-10.1.19/include/mysql/service_sha1.h b/EQ2/source/depends/mariadb-10.1.19/include/mysql/service_sha1.h new file mode 100644 index 000000000..e000c898d --- /dev/null +++ b/EQ2/source/depends/mariadb-10.1.19/include/mysql/service_sha1.h @@ -0,0 +1,69 @@ +#ifndef MYSQL_SERVICE_SHA1_INCLUDED +/* Copyright (c) 2013, 2014, Monty Program Ab + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; version 2 of the License. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ + +/** + @file + my sha1 service + + Functions to calculate SHA1 hash from a memory buffer +*/ + +#ifdef __cplusplus +extern "C" { +#endif + +#ifndef MYSQL_ABI_CHECK +#include +#endif + +#define MY_SHA1_HASH_SIZE 20 /* Hash size in bytes */ + +extern struct my_sha1_service_st { + void (*my_sha1_type)(unsigned char*, const char*, size_t); + void (*my_sha1_multi_type)(unsigned char*, ...); + size_t (*my_sha1_context_size_type)(); + void (*my_sha1_init_type)(void *); + void (*my_sha1_input_type)(void *, const unsigned char *, size_t); + void (*my_sha1_result_type)(void *, unsigned char *); +} *my_sha1_service; + +#ifdef MYSQL_DYNAMIC_PLUGIN + +#define my_sha1(A,B,C) my_sha1_service->my_sha1_type(A,B,C) +#define my_sha1_multi my_sha1_service->my_sha1_multi_type +#define my_sha1_context_size() my_sha1_service->my_sha1_context_size_type() +#define my_sha1_init(A) my_sha1_service->my_sha1_init_type(A) +#define my_sha1_input(A,B,C) my_sha1_service->my_sha1_input_type(A,B,C) +#define my_sha1_result(A,B) my_sha1_service->my_sha1_result_type(A,B) + +#else + +void my_sha1(unsigned char*, const char*, size_t); +void my_sha1_multi(unsigned char*, ...); +size_t my_sha1_context_size(); +void my_sha1_init(void *context); +void my_sha1_input(void *context, const unsigned char *buf, size_t len); +void my_sha1_result(void *context, unsigned char *digest); + +#endif + +#ifdef __cplusplus +} +#endif + +#define MYSQL_SERVICE_SHA1_INCLUDED +#endif + diff --git a/EQ2/source/depends/mariadb-10.1.19/include/mysql/service_thd_alloc.h b/EQ2/source/depends/mariadb-10.1.19/include/mysql/service_thd_alloc.h new file mode 100644 index 000000000..e92f81b52 --- /dev/null +++ b/EQ2/source/depends/mariadb-10.1.19/include/mysql/service_thd_alloc.h @@ -0,0 +1,130 @@ +#ifndef MYSQL_SERVICE_THD_ALLOC_INCLUDED +/* Copyright (c) 2009, 2010, Oracle and/or its affiliates. All rights reserved. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; version 2 of the License. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ + +/** + @file + This service provides functions to allocate memory in a connection local + memory pool. The memory allocated there will be automatically freed at the + end of the statement, don't use it for allocations that should live longer + than that. For short living allocations this is more efficient than + using my_malloc and friends, and automatic "garbage collection" allows not + to think about memory leaks. + + The pool is best for small to medium objects, don't use it for large + allocations - they are better served with my_malloc. +*/ + +#ifndef MYSQL_ABI_CHECK +#include +#endif + +#ifdef __cplusplus +extern "C" { +#endif + +struct st_mysql_lex_string +{ + char *str; + size_t length; +}; +typedef struct st_mysql_lex_string MYSQL_LEX_STRING; + +extern struct thd_alloc_service_st { + void *(*thd_alloc_func)(MYSQL_THD, unsigned int); + void *(*thd_calloc_func)(MYSQL_THD, unsigned int); + char *(*thd_strdup_func)(MYSQL_THD, const char *); + char *(*thd_strmake_func)(MYSQL_THD, const char *, unsigned int); + void *(*thd_memdup_func)(MYSQL_THD, const void*, unsigned int); + MYSQL_LEX_STRING *(*thd_make_lex_string_func)(MYSQL_THD, MYSQL_LEX_STRING *, + const char *, unsigned int, int); +} *thd_alloc_service; + +#ifdef MYSQL_DYNAMIC_PLUGIN + +#define thd_alloc(thd,size) (thd_alloc_service->thd_alloc_func((thd), (size))) + +#define thd_calloc(thd,size) (thd_alloc_service->thd_calloc_func((thd), (size))) + +#define thd_strdup(thd,str) (thd_alloc_service->thd_strdup_func((thd), (str))) + +#define thd_strmake(thd,str,size) \ + (thd_alloc_service->thd_strmake_func((thd), (str), (size))) + +#define thd_memdup(thd,str,size) \ + (thd_alloc_service->thd_memdup_func((thd), (str), (size))) + +#define thd_make_lex_string(thd, lex_str, str, size, allocate_lex_string) \ + (thd_alloc_service->thd_make_lex_string_func((thd), (lex_str), (str), \ + (size), (allocate_lex_string))) + +#else + +/** + Allocate memory in the connection's local memory pool + + @details + When properly used in place of @c my_malloc(), this can significantly + improve concurrency. Don't use this or related functions to allocate + large chunks of memory. Use for temporary storage only. The memory + will be freed automatically at the end of the statement; no explicit + code is required to prevent memory leaks. + + @see alloc_root() +*/ +void *thd_alloc(MYSQL_THD thd, unsigned int size); +/** + @see thd_alloc() +*/ +void *thd_calloc(MYSQL_THD thd, unsigned int size); +/** + @see thd_alloc() +*/ +char *thd_strdup(MYSQL_THD thd, const char *str); +/** + @see thd_alloc() +*/ +char *thd_strmake(MYSQL_THD thd, const char *str, unsigned int size); +/** + @see thd_alloc() +*/ +void *thd_memdup(MYSQL_THD thd, const void* str, unsigned int size); + +/** + Create a LEX_STRING in this connection's local memory pool + + @param thd user thread connection handle + @param lex_str pointer to LEX_STRING object to be initialized + @param str initializer to be copied into lex_str + @param size length of str, in bytes + @param allocate_lex_string flag: if TRUE, allocate new LEX_STRING object, + instead of using lex_str value + @return NULL on failure, or pointer to the LEX_STRING object + + @see thd_alloc() +*/ +MYSQL_LEX_STRING *thd_make_lex_string(MYSQL_THD thd, MYSQL_LEX_STRING *lex_str, + const char *str, unsigned int size, + int allocate_lex_string); + +#endif + +#ifdef __cplusplus +} +#endif + +#define MYSQL_SERVICE_THD_ALLOC_INCLUDED +#endif + diff --git a/EQ2/source/depends/mariadb-10.1.19/include/mysql/service_thd_autoinc.h b/EQ2/source/depends/mariadb-10.1.19/include/mysql/service_thd_autoinc.h new file mode 100644 index 000000000..a4e336ab2 --- /dev/null +++ b/EQ2/source/depends/mariadb-10.1.19/include/mysql/service_thd_autoinc.h @@ -0,0 +1,53 @@ +#ifndef MYSQL_SERVICE_THD_AUTOINC_INCLUDED +/* Copyright (C) 2013 MariaDB Foundation. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; version 2 of the License. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ + +/** + @file + This service provides access to the auto_increment related system variables: + + @@auto_increment_offset + @@auto_increment_increment +*/ + +#ifdef __cplusplus +extern "C" { +#endif + +extern struct thd_autoinc_service_st { + void (*thd_get_autoinc_func)(const MYSQL_THD thd, + unsigned long* off, unsigned long* inc); +} *thd_autoinc_service; + +#ifdef MYSQL_DYNAMIC_PLUGIN +#define thd_get_autoinc(thd, off, inc) \ + (thd_autoinc_service->thd_get_autoinc_func((thd), (off), (inc))) +#else +/** + Return autoincrement system variables + @param IN thd user thread connection handle + @param OUT off the value of @@SESSION.auto_increment_offset + @param OUT inc the value of @@SESSION.auto_increment_increment +*/ +void thd_get_autoinc(const MYSQL_THD thd, + unsigned long* off, unsigned long* inc); +#endif + +#ifdef __cplusplus +} +#endif + +#define MYSQL_SERVICE_THD_AUTOINC_INCLUDED +#endif diff --git a/EQ2/source/depends/mariadb-10.1.19/include/mysql/service_thd_error_context.h b/EQ2/source/depends/mariadb-10.1.19/include/mysql/service_thd_error_context.h new file mode 100644 index 000000000..7619aa440 --- /dev/null +++ b/EQ2/source/depends/mariadb-10.1.19/include/mysql/service_thd_error_context.h @@ -0,0 +1,93 @@ +#ifndef MYSQL_SERVICE_THD_STMT_DA_INCLUDED +/* Copyright (C) 2013 MariaDB Foundation. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; version 2 of the License. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ + +/** + @file + This service provides access to the statement diagnostics area: + - error message + - error number + - row for warning (e.g. for multi-row INSERT statements) +*/ + +#ifdef __cplusplus +extern "C" { +#endif + + +extern struct thd_error_context_service_st { + const char *(*thd_get_error_message_func)(const MYSQL_THD thd); + unsigned int (*thd_get_error_number_func)(const MYSQL_THD thd); + unsigned long (*thd_get_error_row_func)(const MYSQL_THD thd); + void (*thd_inc_error_row_func)(MYSQL_THD thd); + char *(*thd_get_error_context_description_func)(MYSQL_THD thd, + char *buffer, + unsigned int length, + unsigned int max_query_length); +} *thd_error_context_service; + +#ifdef MYSQL_DYNAMIC_PLUGIN +#define thd_get_error_message(thd) \ + (thd_error_context_service->thd_get_error_message_func((thd))) +#define thd_get_error_number(thd) \ + (thd_error_context_service->thd_get_error_number_func((thd))) +#define thd_get_error_row(thd) \ + (thd_error_context_service->thd_get_error_row_func((thd))) +#define thd_inc_error_row(thd) \ + (thd_error_context_service->thd_inc_error_row_func((thd))) +#define thd_get_error_context_description(thd, buffer, length, max_query_len) \ + (thd_error_context_service->thd_get_error_context_description_func((thd), \ + (buffer), \ + (length), \ + (max_query_len))) +#else +/** + Return error message + @param thd user thread connection handle + @return error text +*/ +const char *thd_get_error_message(const MYSQL_THD thd); +/** + Return error number + @param thd user thread connection handle + @return error number +*/ +unsigned int thd_get_error_number(const MYSQL_THD thd); +/** + Return the current row number (i.e. in a multiple INSERT statement) + @param thd user thread connection handle + @return row number +*/ +unsigned long thd_get_error_row(const MYSQL_THD thd); +/** + Increment the current row number + @param thd user thread connection handle +*/ +void thd_inc_error_row(MYSQL_THD thd); +/** + Return a text description of a thread, its security context (user,host) + and the current query. +*/ +char *thd_get_error_context_description(MYSQL_THD thd, + char *buffer, unsigned int length, + unsigned int max_query_length); +#endif + +#ifdef __cplusplus +} +#endif + +#define MYSQL_SERVICE_THD_STMT_DA_INCLUDED +#endif diff --git a/EQ2/source/depends/mariadb-10.1.19/include/mysql/service_thd_specifics.h b/EQ2/source/depends/mariadb-10.1.19/include/mysql/service_thd_specifics.h new file mode 100644 index 000000000..161385c38 --- /dev/null +++ b/EQ2/source/depends/mariadb-10.1.19/include/mysql/service_thd_specifics.h @@ -0,0 +1,110 @@ +#ifndef MYSQL_SERVICE_THD_SPECIFICS_INCLUDED +/* Copyright (c) 2009, 2010, Oracle and/or its affiliates. All rights reserved. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; version 2 of the License. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ + +/** + @file + + THD specific for plugin(s) + + This API provides pthread_getspecific like functionality to plugin authors. + This is a functional alternative to the declarative MYSQL_THDVAR + + A plugin should at init call thd_key_create that create a key that + will have storage in each THD. The key should be used by all threads + and can be used concurrently from all threads. + + A plugin should at deinit call thd_key_delete. + + Alternatively, a plugin can use thd_key_create_from_var(K,V) to create + a key that corresponds to a named MYSQL_THDVAR variable. + + This API is also safe when using pool-of-threads in which case + pthread_getspecific is not, because the actual OS thread may change. + + @note + + Normally one should prefer MYSQL_THDVAR declarative API. + + The benefits are: + + - It supports typed variables (int, char*, enum, etc), not only void*. + - The memory allocated for MYSQL_THDVAR is free'd automatically + (if PLUGIN_VAR_MEMALLOC is specified). + - Continuous loading and unloading of the same plugin does not allocate + memory for same variables over and over again. + + An example of using MYSQL_THDVAR for a thd local storage: + + MYSQL_THDVAR_STR(my_tls, + PLUGIN_VAR_MEMALLOC | PLUGIN_VAR_NOSYSVAR | PLUGIN_VAR_NOCMDOPT, + "thd local storage example", 0, 0, 0); +*/ + +#ifdef __cplusplus +extern "C" { +#endif + +typedef int MYSQL_THD_KEY_T; + +extern struct thd_specifics_service_st { + int (*thd_key_create_func)(MYSQL_THD_KEY_T *key); + void (*thd_key_delete_func)(MYSQL_THD_KEY_T *key); + void *(*thd_getspecific_func)(MYSQL_THD thd, MYSQL_THD_KEY_T key); + int (*thd_setspecific_func)(MYSQL_THD thd, MYSQL_THD_KEY_T key, void *value); +} *thd_specifics_service; + +#define thd_key_create_from_var(K, V) do { *(K)= MYSQL_SYSVAR_NAME(V).offset; } while(0) + +#ifdef MYSQL_DYNAMIC_PLUGIN + +#define thd_key_create(K) (thd_specifics_service->thd_key_create_func(K)) +#define thd_key_delete(K) (thd_specifics_service->thd_key_delete_func(K)) +#define thd_getspecific(T, K) (thd_specifics_service->thd_getspecific_func(T, K)) +#define thd_setspecific(T, K, V) (thd_specifics_service->thd_setspecific_func(T, K, V)) + +#else + +/** + * create THD specific storage + * @return 0 on success + * else errno is returned + */ +int thd_key_create(MYSQL_THD_KEY_T *key); + +/** + * delete THD specific storage + */ +void thd_key_delete(MYSQL_THD_KEY_T *key); + +/** + * get/set thd specific storage + * - first time this is called from a thread it will return 0 + * - this call is thread-safe in that different threads may call this + * simultaneously if operating on different THDs. + * - this call acquires no mutexes and is implemented as an array lookup + */ +void* thd_getspecific(MYSQL_THD thd, MYSQL_THD_KEY_T key); +int thd_setspecific(MYSQL_THD thd, MYSQL_THD_KEY_T key, void *value); + +#endif + +#ifdef __cplusplus +} +#endif + +#define MYSQL_SERVICE_THD_SPECIFICS_INCLUDED +#endif + diff --git a/EQ2/source/depends/mariadb-10.1.19/include/mysql/service_thd_timezone.h b/EQ2/source/depends/mariadb-10.1.19/include/mysql/service_thd_timezone.h new file mode 100644 index 000000000..f44f011b8 --- /dev/null +++ b/EQ2/source/depends/mariadb-10.1.19/include/mysql/service_thd_timezone.h @@ -0,0 +1,73 @@ +#ifndef MYSQL_SERVICE_THD_TIMEZONE_INCLUDED +/* Copyright (C) 2013 MariaDB Foundation. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; version 2 of the License. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ + +/** + @file + This service provdes functions to convert between my_time_t and + MYSQL_TIME taking into account the current value of the time_zone + session variable. + + The values of the my_time_t type are in Unix timestamp format, + i.e. the number of seconds since "1970-01-01 00:00:00 UTC". + + The values of the MYSQL_TIME type are in the current time zone, + according to thd->variables.time_zone. + + If the MYSQL_THD parameter is NULL, then global_system_variables.time_zone + is used for conversion. +*/ + +#ifndef MYSQL_ABI_CHECK +/* + This service currently does not depend on any system headers. + If it needs system headers in the future, make sure to put + them inside this ifndef. +*/ +#endif + +#include "mysql_time.h" + +#ifdef __cplusplus +extern "C" { +#endif + + +extern struct thd_timezone_service_st { + my_time_t (*thd_TIME_to_gmt_sec)(MYSQL_THD thd, const MYSQL_TIME *ltime, unsigned int *errcode); + void (*thd_gmt_sec_to_TIME)(MYSQL_THD thd, MYSQL_TIME *ltime, my_time_t t); +} *thd_timezone_service; + +#ifdef MYSQL_DYNAMIC_PLUGIN + +#define thd_TIME_to_gmt_sec(thd, ltime, errcode) \ + (thd_timezone_service->thd_TIME_to_gmt_sec((thd), (ltime), (errcode))) + +#define thd_gmt_sec_to_TIME(thd, ltime, t) \ + (thd_timezone_service->thd_gmt_sec_to_TIME((thd), (ltime), (t))) + +#else + +my_time_t thd_TIME_to_gmt_sec(MYSQL_THD thd, const MYSQL_TIME *ltime, unsigned int *errcode); +void thd_gmt_sec_to_TIME(MYSQL_THD thd, MYSQL_TIME *ltime, my_time_t t); + +#endif + +#ifdef __cplusplus +} +#endif + +#define MYSQL_SERVICE_THD_TIMEZONE_INCLUDED +#endif diff --git a/EQ2/source/depends/mariadb-10.1.19/include/mysql/service_thd_wait.h b/EQ2/source/depends/mariadb-10.1.19/include/mysql/service_thd_wait.h new file mode 100644 index 000000000..c35b35df8 --- /dev/null +++ b/EQ2/source/depends/mariadb-10.1.19/include/mysql/service_thd_wait.h @@ -0,0 +1,104 @@ +/* Copyright (c) 2010, 2011, Oracle and/or its affiliates. All rights reserved. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; version 2 of the License. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ + +#ifndef MYSQL_SERVICE_THD_WAIT_INCLUDED +#define MYSQL_SERVICE_THD_WAIT_INCLUDED + +/** + @file include/mysql/service_thd_wait.h + This service provides functions for plugins and storage engines to report + when they are going to sleep/stall. + + SYNOPSIS + thd_wait_begin() - call just before a wait begins + thd Thread object + Use NULL if the thd is NOT known. + wait_type Type of wait + 1 -- short wait (e.g. for mutex) + 2 -- medium wait (e.g. for disk io) + 3 -- large wait (e.g. for locked row/table) + NOTES + This is used by the threadpool to have better knowledge of which + threads that currently are actively running on CPUs. When a thread + reports that it's going to sleep/stall, the threadpool scheduler is + free to start another thread in the pool most likely. The expected wait + time is simply an indication of how long the wait is expected to + become, the real wait time could be very different. + + thd_wait_end() called immediately after the wait is complete + + thd_wait_end() MUST be called if thd_wait_begin() was called. + + Using thd_wait_...() service is optional but recommended. Using it will + improve performance as the thread pool will be more active at managing the + thread workload. +*/ + +#ifdef __cplusplus +extern "C" { +#endif + +/* + One should only report wait events that could potentially block for a + long time. A mutex wait is too short of an event to report. The reason + is that an event which is reported leads to a new thread starts + executing a query and this has a negative impact of usage of CPU caches + and thus the expected gain of starting a new thread must be higher than + the expected cost of lost performance due to starting a new thread. + + Good examples of events that should be reported are waiting for row locks + that could easily be for many milliseconds or even seconds and the same + holds true for global read locks, table locks and other meta data locks. + Another event of interest is going to sleep for an extended time. +*/ +typedef enum _thd_wait_type_e { + THD_WAIT_SLEEP= 1, + THD_WAIT_DISKIO= 2, + THD_WAIT_ROW_LOCK= 3, + THD_WAIT_GLOBAL_LOCK= 4, + THD_WAIT_META_DATA_LOCK= 5, + THD_WAIT_TABLE_LOCK= 6, + THD_WAIT_USER_LOCK= 7, + THD_WAIT_BINLOG= 8, + THD_WAIT_GROUP_COMMIT= 9, + THD_WAIT_SYNC= 10, + THD_WAIT_NET= 11, + THD_WAIT_LAST= 12 +} thd_wait_type; + +extern struct thd_wait_service_st { + void (*thd_wait_begin_func)(MYSQL_THD, int); + void (*thd_wait_end_func)(MYSQL_THD); +} *thd_wait_service; + +#ifdef MYSQL_DYNAMIC_PLUGIN + +#define thd_wait_begin(_THD, _WAIT_TYPE) \ + thd_wait_service->thd_wait_begin_func(_THD, _WAIT_TYPE) +#define thd_wait_end(_THD) thd_wait_service->thd_wait_end_func(_THD) + +#else + +void thd_wait_begin(MYSQL_THD thd, int wait_type); +void thd_wait_end(MYSQL_THD thd); + +#endif + +#ifdef __cplusplus +} +#endif + +#endif + diff --git a/EQ2/source/depends/mariadb-10.1.19/include/mysql/service_wsrep.h b/EQ2/source/depends/mariadb-10.1.19/include/mysql/service_wsrep.h new file mode 100644 index 000000000..bc5b2c67c --- /dev/null +++ b/EQ2/source/depends/mariadb-10.1.19/include/mysql/service_wsrep.h @@ -0,0 +1,220 @@ +#ifndef MYSQL_SERVICE_WSREP_INCLUDED +/* Copyright (c) 2015 MariaDB Corporation Ab + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; version 2 of the License. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ + +/** + @file + wsrep service + + Interface to WSREP functionality in the server. + For engines that want to support galera. +*/ + +#ifdef __cplusplus +extern "C" { +#endif + +enum wsrep_conflict_state { + NO_CONFLICT, + MUST_ABORT, + ABORTING, + ABORTED, + MUST_REPLAY, + REPLAYING, + RETRY_AUTOCOMMIT, + CERT_FAILURE, +}; + +enum wsrep_exec_mode { + /* Transaction processing before replication. */ + LOCAL_STATE, + /* Slave thread applying write sets from other nodes or replaying thread. */ + REPL_RECV, + /* Total-order-isolation mode. */ + TOTAL_ORDER, + /* + Transaction procession after it has been replicated in prepare stage and + has passed certification. + */ + LOCAL_COMMIT +}; + +enum wsrep_query_state { + QUERY_IDLE, + QUERY_EXEC, + QUERY_COMMITTING, + QUERY_EXITING, + QUERY_ROLLINGBACK, +}; + +enum wsrep_trx_status { + WSREP_TRX_OK, + WSREP_TRX_CERT_FAIL, /* certification failure, must abort */ + WSREP_TRX_SIZE_EXCEEDED, /* trx size exceeded */ + WSREP_TRX_ERROR, /* native mysql error */ +}; + +struct xid_t; +struct wsrep; +struct wsrep_ws_handle; +struct wsrep_buf; + +extern struct wsrep_service_st { + struct wsrep * (*get_wsrep_func)(); + my_bool (*get_wsrep_certify_nonPK_func)(); + my_bool (*get_wsrep_debug_func)(); + my_bool (*get_wsrep_drupal_282555_workaround_func)(); + my_bool (*get_wsrep_recovery_func)(); + my_bool (*get_wsrep_load_data_splitting_func)(); + my_bool (*get_wsrep_log_conflicts_func)(); + long (*get_wsrep_protocol_version_func)(); + my_bool (*wsrep_aborting_thd_contains_func)(THD *thd); + void (*wsrep_aborting_thd_enqueue_func)(THD *thd); + bool (*wsrep_consistency_check_func)(THD *thd); + int (*wsrep_is_wsrep_xid_func)(const struct xid_t *xid); + void (*wsrep_lock_rollback_func)(); + int (*wsrep_on_func)(MYSQL_THD); + void (*wsrep_post_commit_func)(THD* thd, bool all); + bool (*wsrep_prepare_key_func)(const unsigned char*, size_t, const unsigned char*, size_t, struct wsrep_buf*, size_t*); + enum wsrep_trx_status (*wsrep_run_wsrep_commit_func)(THD *thd, bool all); + void (*wsrep_thd_LOCK_func)(THD *thd); + void (*wsrep_thd_UNLOCK_func)(THD *thd); + void (*wsrep_thd_awake_func)(THD *thd, my_bool signal); + enum wsrep_conflict_state (*wsrep_thd_conflict_state_func)(MYSQL_THD, my_bool); + const char * (*wsrep_thd_conflict_state_str_func)(THD *thd); + enum wsrep_exec_mode (*wsrep_thd_exec_mode_func)(THD *thd); + const char * (*wsrep_thd_exec_mode_str_func)(THD *thd); + enum wsrep_conflict_state (*wsrep_thd_get_conflict_state_func)(MYSQL_THD); + my_bool (*wsrep_thd_is_BF_func)(MYSQL_THD , my_bool); + my_bool (*wsrep_thd_is_wsrep_func)(MYSQL_THD thd); + char * (*wsrep_thd_query_func)(THD *thd); + enum wsrep_query_state (*wsrep_thd_query_state_func)(THD *thd); + const char * (*wsrep_thd_query_state_str_func)(THD *thd); + int (*wsrep_thd_retry_counter_func)(THD *thd); + void (*wsrep_thd_set_conflict_state_func)(THD *thd, enum wsrep_conflict_state state); + bool (*wsrep_thd_ignore_table_func)(THD *thd); + long long (*wsrep_thd_trx_seqno_func)(THD *thd); + struct wsrep_ws_handle * (*wsrep_thd_ws_handle_func)(THD *thd); + int (*wsrep_trx_is_aborting_func)(MYSQL_THD thd); + int (*wsrep_trx_order_before_func)(MYSQL_THD, MYSQL_THD); + void (*wsrep_unlock_rollback_func)(); +} *wsrep_service; + +#ifdef MYSQL_DYNAMIC_PLUGIN +#define get_wsrep() wsrep_service->get_wsrep_func() +#define get_wsrep_certify_nonPK() wsrep_service->get_wsrep_certify_nonPK_func() +#define get_wsrep_debug() wsrep_service->get_wsrep_debug_func() +#define get_wsrep_drupal_282555_workaround() wsrep_service->get_wsrep_drupal_282555_workaround_func() +#define get_wsrep_recovery() wsrep_service->get_wsrep_recovery_func() +#define get_wsrep_load_data_splitting() wsrep_service->get_wsrep_load_data_splitting_func() +#define get_wsrep_log_conflicts() wsrep_service->get_wsrep_log_conflicts_func() +#define get_wsrep_protocol_version() wsrep_service->get_wsrep_protocol_version_func() +#define wsrep_aborting_thd_contains(T) wsrep_service->wsrep_aborting_thd_contains_func(T) +#define wsrep_aborting_thd_enqueue(T) wsrep_service->wsrep_aborting_thd_enqueue_func(T) +#define wsrep_consistency_check(T) wsrep_service->wsrep_consistency_check_func(T) +#define wsrep_is_wsrep_xid(X) wsrep_service->wsrep_is_wsrep_xid_func(X) +#define wsrep_lock_rollback() wsrep_service->wsrep_lock_rollback_func() +#define wsrep_on(X) wsrep_service->wsrep_on_func(X) +#define wsrep_post_commit(T,A) wsrep_service->wsrep_post_commit_func(T,A) +#define wsrep_prepare_key(A,B,C,D,E,F) wsrep_service->wsrep_prepare_key_func(A,B,C,D,E,F) +#define wsrep_run_wsrep_commit(T,A) wsrep_service->wsrep_run_wsrep_commit_func(T,A) +#define wsrep_thd_LOCK(T) wsrep_service->wsrep_thd_LOCK_func(T) +#define wsrep_thd_UNLOCK(T) wsrep_service->wsrep_thd_UNLOCK_func(T) +#define wsrep_thd_awake(T,S) wsrep_service->wsrep_thd_awake_func(T,S) +#define wsrep_thd_conflict_state(T,S) wsrep_service->wsrep_thd_conflict_state_func(T,S) +#define wsrep_thd_conflict_state_str(T) wsrep_service->wsrep_thd_conflict_state_str_func(T) +#define wsrep_thd_exec_mode(T) wsrep_service->wsrep_thd_exec_mode_func(T) +#define wsrep_thd_exec_mode_str(T) wsrep_service->wsrep_thd_exec_mode_str_func(T) +#define wsrep_thd_get_conflict_state(T) wsrep_service->wsrep_thd_get_conflict_state_func(T) +#define wsrep_thd_is_BF(T,S) wsrep_service->wsrep_thd_is_BF_func(T,S) +#define wsrep_thd_is_wsrep(T) wsrep_service->wsrep_thd_is_wsrep_func(T) +#define wsrep_thd_query(T) wsrep_service->wsrep_thd_query_func(T) +#define wsrep_thd_query_state(T) wsrep_service->wsrep_thd_query_state_func(T) +#define wsrep_thd_query_state_str(T) wsrep_service->wsrep_thd_query_state_str_func(T) +#define wsrep_thd_retry_counter(T) wsrep_service->wsrep_thd_retry_counter_func(T) +#define wsrep_thd_set_conflict_state(T,S) wsrep_service->wsrep_thd_set_conflict_state_func(T,S) +#define wsrep_thd_ignore_table(T) wsrep_service->wsrep_thd_ignore_table_func(T) +#define wsrep_thd_trx_seqno(T) wsrep_service->wsrep_thd_trx_seqno_func(T) +#define wsrep_thd_ws_handle(T) wsrep_service->wsrep_thd_ws_handle_func(T) +#define wsrep_trx_is_aborting(T) wsrep_service->wsrep_trx_is_aborting_func(T) +#define wsrep_trx_order_before(T1,T2) wsrep_service->wsrep_trx_order_before_func(T1,T2) +#define wsrep_unlock_rollback() wsrep_service->wsrep_unlock_rollback_func() + +#define wsrep_debug get_wsrep_debug() +#define wsrep_log_conflicts get_wsrep_log_conflicts() +#define wsrep_certify_nonPK get_wsrep_certify_nonPK() +#define wsrep_load_data_splitting get_wsrep_load_data_splitting() +#define wsrep_drupal_282555_workaround get_wsrep_drupal_282555_workaround() +#define wsrep_recovery get_wsrep_recovery() +#define wsrep_protocol_version get_wsrep_protocol_version() + +#else + +extern my_bool wsrep_debug; +extern my_bool wsrep_log_conflicts; +extern my_bool wsrep_certify_nonPK; +extern my_bool wsrep_load_data_splitting; +extern my_bool wsrep_drupal_282555_workaround; +extern my_bool wsrep_recovery; +extern long wsrep_protocol_version; + +bool wsrep_consistency_check(THD *thd); +bool wsrep_prepare_key(const unsigned char* cache_key, size_t cache_key_len, const unsigned char* row_id, size_t row_id_len, struct wsrep_buf* key, size_t* key_len); +char *wsrep_thd_query(THD *thd); +const char *wsrep_thd_conflict_state_str(THD *thd); +const char *wsrep_thd_exec_mode_str(THD *thd); +const char *wsrep_thd_query_state_str(THD *thd); +enum wsrep_conflict_state wsrep_thd_conflict_state(MYSQL_THD thd, my_bool sync); +enum wsrep_conflict_state wsrep_thd_get_conflict_state(MYSQL_THD thd); +enum wsrep_exec_mode wsrep_thd_exec_mode(THD *thd); +enum wsrep_query_state wsrep_thd_query_state(THD *thd); +enum wsrep_trx_status wsrep_run_wsrep_commit(THD *thd, bool all); +int wsrep_is_wsrep_xid(const struct xid_t* xid); +int wsrep_on(MYSQL_THD thd); +int wsrep_thd_retry_counter(THD *thd); +int wsrep_trx_is_aborting(MYSQL_THD thd); +int wsrep_trx_order_before(MYSQL_THD thd1, MYSQL_THD thd2); +long get_wsrep_protocol_version(); +long long wsrep_thd_trx_seqno(THD *thd); +my_bool get_wsrep_certify_nonPK(); +my_bool get_wsrep_debug(); +my_bool get_wsrep_drupal_282555_workaround(); +my_bool get_wsrep_recovery(); +my_bool get_wsrep_load_data_splitting(); +my_bool get_wsrep_log_conflicts(); +my_bool wsrep_aborting_thd_contains(THD *thd); +my_bool wsrep_thd_is_BF(MYSQL_THD thd, my_bool sync); +my_bool wsrep_thd_is_wsrep(MYSQL_THD thd); +struct wsrep *get_wsrep(); +struct wsrep_ws_handle *wsrep_thd_ws_handle(THD *thd); +void wsrep_aborting_thd_enqueue(THD *thd); +void wsrep_lock_rollback(); +void wsrep_post_commit(THD* thd, bool all); +void wsrep_thd_LOCK(THD *thd); +void wsrep_thd_UNLOCK(THD *thd); +void wsrep_thd_awake(THD *thd, my_bool signal); +void wsrep_thd_set_conflict_state(THD *thd, enum wsrep_conflict_state state); +bool wsrep_thd_ignore_table(THD *thd); +void wsrep_unlock_rollback(); + +#endif + +#ifdef __cplusplus +} +#endif + +#define MYSQL_SERVICE_WSREP_INCLUDED +#endif + diff --git a/EQ2/source/depends/mariadb-10.1.19/include/mysql/services.h b/EQ2/source/depends/mariadb-10.1.19/include/mysql/services.h new file mode 100644 index 000000000..9d031a9b0 --- /dev/null +++ b/EQ2/source/depends/mariadb-10.1.19/include/mysql/services.h @@ -0,0 +1,45 @@ +#ifndef MYSQL_SERVICES_INCLUDED +/* Copyright (c) 2009, 2010, Oracle and/or its affiliates. + Copyright (c) 2012, 2013, Monty Program Ab + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; version 2 of the License. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ + +#ifdef __cplusplus +extern "C" { +#endif + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +/*#include */ + +#ifdef __cplusplus +} +#endif + +#define MYSQL_SERVICES_INCLUDED +#endif + diff --git a/EQ2/source/depends/mariadb-10.1.19/include/mysql_async.h b/EQ2/source/depends/mariadb-10.1.19/include/mysql_async.h new file mode 100644 index 000000000..2728b9c1d --- /dev/null +++ b/EQ2/source/depends/mariadb-10.1.19/include/mysql_async.h @@ -0,0 +1,38 @@ +/* Copyright (C) 2012 MariaDB Services and Kristian Nielsen + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; version 2 of the License. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ + +/* Common definitions for MariaDB non-blocking client library. */ + +#ifndef MYSQL_ASYNC_H +#define MYSQL_ASYNC_H + +extern int my_connect_async(struct mysql_async_context *b, my_socket fd, + const struct sockaddr *name, uint namelen, + int vio_timeout); +extern ssize_t my_recv_async(struct mysql_async_context *b, int fd, + unsigned char *buf, size_t size, int timeout); +extern ssize_t my_send_async(struct mysql_async_context *b, int fd, + const unsigned char *buf, size_t size, + int timeout); +extern my_bool my_io_wait_async(struct mysql_async_context *b, + enum enum_vio_io_event event, int timeout); +#ifdef HAVE_OPENSSL +extern int my_ssl_read_async(struct mysql_async_context *b, SSL *ssl, + void *buf, int size); +extern int my_ssl_write_async(struct mysql_async_context *b, SSL *ssl, + const void *buf, int size); +#endif + +#endif /* MYSQL_ASYNC_H */ diff --git a/EQ2/source/depends/mariadb-10.1.19/include/mysql_com.h b/EQ2/source/depends/mariadb-10.1.19/include/mysql_com.h new file mode 100644 index 000000000..23be12bdc --- /dev/null +++ b/EQ2/source/depends/mariadb-10.1.19/include/mysql_com.h @@ -0,0 +1,638 @@ +/* Copyright (c) 2000, 2011, Oracle and/or its affiliates. + Copyright (c) 2010, 2013, Monty Program Ab + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; version 2 of the License. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ + +/* +** Common definition between mysql server & client +*/ + +#ifndef _mysql_com_h +#define _mysql_com_h + +#define HOSTNAME_LENGTH 60 +#define SYSTEM_CHARSET_MBMAXLEN 3 +#define NAME_CHAR_LEN 64 /* Field/table name length */ +#define USERNAME_CHAR_LENGTH 128 +#define NAME_LEN (NAME_CHAR_LEN*SYSTEM_CHARSET_MBMAXLEN) +#define USERNAME_LENGTH (USERNAME_CHAR_LENGTH*SYSTEM_CHARSET_MBMAXLEN) +#define DEFINER_CHAR_LENGTH (USERNAME_CHAR_LENGTH + HOSTNAME_LENGTH + 1) +#define DEFINER_LENGTH (USERNAME_LENGTH + HOSTNAME_LENGTH + 1) + +#define MYSQL_AUTODETECT_CHARSET_NAME "auto" + +#define MYSQL50_TABLE_NAME_PREFIX "#mysql50#" +#define MYSQL50_TABLE_NAME_PREFIX_LENGTH (sizeof(MYSQL50_TABLE_NAME_PREFIX)-1) +#define SAFE_NAME_LEN (NAME_LEN + MYSQL50_TABLE_NAME_PREFIX_LENGTH) + +/* + MDEV-4088 + + MySQL (and MariaDB 5.x before the fix) was using the first character of the + server version string (as sent in the first handshake protocol packet) to + decide on the replication event formats. And for 10.x the first character + is "1", which the slave thought comes from some ancient 1.x version + (ignoring the fact that the first ever MySQL version was 3.x). + + To support replication to these old clients, we fake the version in the + first handshake protocol packet to start from "5.5.5-" (for example, + it might be "5.5.5-10.0.1-MariaDB-debug-log". + + On the client side we remove this fake version prefix to restore the + correct server version. The version "5.5.5" did not support + pluggable authentication, so any version starting from "5.5.5-" and + claiming to support pluggable auth, must be using this fake prefix. +*/ +/* this version must be the one that *does not* support pluggable auth */ +#define RPL_VERSION_HACK "5.5.5-" + +#define SERVER_VERSION_LENGTH 60 +#define SQLSTATE_LENGTH 5 +#define LIST_PROCESS_HOST_LEN 64 + +/* + Maximum length of comments +*/ +#define TABLE_COMMENT_INLINE_MAXLEN 180 /* pre 5.5: 60 characters */ +#define TABLE_COMMENT_MAXLEN 2048 +#define COLUMN_COMMENT_MAXLEN 1024 +#define INDEX_COMMENT_MAXLEN 1024 +#define TABLE_PARTITION_COMMENT_MAXLEN 1024 + +/* + USER_HOST_BUFF_SIZE -- length of string buffer, that is enough to contain + username and hostname parts of the user identifier with trailing zero in + MySQL standard format: + user_name_part@host_name_part\0 +*/ +#define USER_HOST_BUFF_SIZE HOSTNAME_LENGTH + USERNAME_LENGTH + 2 + +#define LOCAL_HOST "localhost" +#define LOCAL_HOST_NAMEDPIPE "." + + +#if defined(__WIN__) && !defined( _CUSTOMCONFIG_) +#define MYSQL_NAMEDPIPE "MySQL" +#define MYSQL_SERVICENAME "MySQL" +#endif /* __WIN__ */ + +/* + You should add new commands to the end of this list, otherwise old + servers won't be able to handle them as 'unsupported'. +*/ + +enum enum_server_command +{ + COM_SLEEP, COM_QUIT, COM_INIT_DB, COM_QUERY, COM_FIELD_LIST, + COM_CREATE_DB, COM_DROP_DB, COM_REFRESH, COM_SHUTDOWN, COM_STATISTICS, + COM_PROCESS_INFO, COM_CONNECT, COM_PROCESS_KILL, COM_DEBUG, COM_PING, + COM_TIME, COM_DELAYED_INSERT, COM_CHANGE_USER, COM_BINLOG_DUMP, + COM_TABLE_DUMP, COM_CONNECT_OUT, COM_REGISTER_SLAVE, + COM_STMT_PREPARE, COM_STMT_EXECUTE, COM_STMT_SEND_LONG_DATA, COM_STMT_CLOSE, + COM_STMT_RESET, COM_SET_OPTION, COM_STMT_FETCH, COM_DAEMON, + /* don't forget to update const char *command_name[] in sql_parse.cc */ + + /* Must be last */ + COM_END +}; + +/* sql type stored in .frm files for virtual fields */ +#define MYSQL_TYPE_VIRTUAL 245 +/* + Length of random string sent by server on handshake; this is also length of + obfuscated password, received from client +*/ +#define SCRAMBLE_LENGTH 20 +#define SCRAMBLE_LENGTH_323 8 +/* length of password stored in the db: new passwords are preceeded with '*' */ +#define SCRAMBLED_PASSWORD_CHAR_LENGTH (SCRAMBLE_LENGTH*2+1) +#define SCRAMBLED_PASSWORD_CHAR_LENGTH_323 (SCRAMBLE_LENGTH_323*2) + + +#define NOT_NULL_FLAG 1 /* Field can't be NULL */ +#define PRI_KEY_FLAG 2 /* Field is part of a primary key */ +#define UNIQUE_KEY_FLAG 4 /* Field is part of a unique key */ +#define MULTIPLE_KEY_FLAG 8 /* Field is part of a key */ +#define BLOB_FLAG 16 /* Field is a blob */ +#define UNSIGNED_FLAG 32 /* Field is unsigned */ +#define ZEROFILL_FLAG 64 /* Field is zerofill */ +#define BINARY_FLAG 128 /* Field is binary */ + +/* The following are only sent to new clients */ +#define ENUM_FLAG 256 /* field is an enum */ +#define AUTO_INCREMENT_FLAG 512 /* field is a autoincrement field */ +#define TIMESTAMP_FLAG 1024 /* Field is a timestamp */ +#define SET_FLAG 2048 /* field is a set */ +#define NO_DEFAULT_VALUE_FLAG 4096 /* Field doesn't have default value */ +#define ON_UPDATE_NOW_FLAG 8192 /* Field is set to NOW on UPDATE */ +#define NUM_FLAG 32768 /* Field is num (for clients) */ +#define PART_KEY_FLAG 16384 /* Intern; Part of some key */ +#define GROUP_FLAG 32768 /* Intern: Group field */ +#define UNIQUE_FLAG 65536 /* Intern: Used by sql_yacc */ +#define BINCMP_FLAG 131072 /* Intern: Used by sql_yacc */ +#define GET_FIXED_FIELDS_FLAG (1 << 18) /* Used to get fields in item tree */ +#define FIELD_IN_PART_FUNC_FLAG (1 << 19)/* Field part of partition func */ + +/** + Intern: Field in TABLE object for new version of altered table, + which participates in a newly added index. +*/ +#define FIELD_IN_ADD_INDEX (1 << 20) +#define FIELD_IS_RENAMED (1<< 21) /* Intern: Field is being renamed */ +#define FIELD_FLAGS_STORAGE_MEDIA 22 /* Field storage media, bit 22-23 */ +#define FIELD_FLAGS_STORAGE_MEDIA_MASK (3 << FIELD_FLAGS_STORAGE_MEDIA) +#define FIELD_FLAGS_COLUMN_FORMAT 24 /* Field column format, bit 24-25 */ +#define FIELD_FLAGS_COLUMN_FORMAT_MASK (3 << FIELD_FLAGS_COLUMN_FORMAT) +#define FIELD_IS_DROPPED (1<< 26) /* Intern: Field is being dropped */ +#define HAS_EXPLICIT_VALUE (1 << 27) /* An INSERT/UPDATE operation supplied + an explicit default value */ + +#define REFRESH_GRANT (1ULL << 0) /* Refresh grant tables */ +#define REFRESH_LOG (1ULL << 1) /* Start on new log file */ +#define REFRESH_TABLES (1ULL << 2) /* close all tables */ +#define REFRESH_HOSTS (1ULL << 3) /* Flush host cache */ +#define REFRESH_STATUS (1ULL << 4) /* Flush status variables */ +#define REFRESH_THREADS (1ULL << 5) /* Flush thread cache */ +#define REFRESH_SLAVE (1ULL << 6) /* Reset master info and restart slave + thread */ +#define REFRESH_MASTER (1ULL << 7) /* Remove all bin logs in the index + and truncate the index */ + +/* The following can't be set with mysql_refresh() */ +#define REFRESH_ERROR_LOG (1ULL << 8) /* Rotate only the erorr log */ +#define REFRESH_ENGINE_LOG (1ULL << 9) /* Flush all storage engine logs */ +#define REFRESH_BINARY_LOG (1ULL << 10) /* Flush the binary log */ +#define REFRESH_RELAY_LOG (1ULL << 11) /* Flush the relay log */ +#define REFRESH_GENERAL_LOG (1ULL << 12) /* Flush the general log */ +#define REFRESH_SLOW_LOG (1ULL << 13) /* Flush the slow query log */ + +#define REFRESH_READ_LOCK (1ULL << 14) /* Lock tables for read */ +#define REFRESH_CHECKPOINT (1ULL << 15) /* With REFRESH_READ_LOCK: block checkpoints too */ + +#define REFRESH_QUERY_CACHE (1ULL << 16) /* clear the query cache */ +#define REFRESH_QUERY_CACHE_FREE (1ULL << 17) /* pack query cache */ +#define REFRESH_DES_KEY_FILE (1ULL << 18) +#define REFRESH_USER_RESOURCES (1ULL << 19) +#define REFRESH_FOR_EXPORT (1ULL << 20) /* FLUSH TABLES ... FOR EXPORT */ + +#define REFRESH_GENERIC (1ULL << 30) +#define REFRESH_FAST (1ULL << 31) /* Intern flag */ + +#define CLIENT_LONG_PASSWORD 1 /* new more secure passwords */ +#define CLIENT_FOUND_ROWS 2 /* Found instead of affected rows */ +#define CLIENT_LONG_FLAG 4 /* Get all column flags */ +#define CLIENT_CONNECT_WITH_DB 8 /* One can specify db on connect */ +#define CLIENT_NO_SCHEMA 16 /* Don't allow database.table.column */ +#define CLIENT_COMPRESS 32 /* Can use compression protocol */ +#define CLIENT_ODBC 64 /* Odbc client */ +#define CLIENT_LOCAL_FILES 128 /* Can use LOAD DATA LOCAL */ +#define CLIENT_IGNORE_SPACE 256 /* Ignore spaces before '(' */ +#define CLIENT_PROTOCOL_41 512 /* New 4.1 protocol */ +#define CLIENT_INTERACTIVE 1024 /* This is an interactive client */ +#define CLIENT_SSL 2048 /* Switch to SSL after handshake */ +#define CLIENT_IGNORE_SIGPIPE 4096 /* IGNORE sigpipes */ +#define CLIENT_TRANSACTIONS 8192 /* Client knows about transactions */ +#define CLIENT_RESERVED 16384 /* Old flag for 4.1 protocol */ +#define CLIENT_SECURE_CONNECTION 32768 /* New 4.1 authentication */ +#define CLIENT_MULTI_STATEMENTS (1UL << 16) /* Enable/disable multi-stmt support */ +#define CLIENT_MULTI_RESULTS (1UL << 17) /* Enable/disable multi-results */ +#define CLIENT_PS_MULTI_RESULTS (1UL << 18) /* Multi-results in PS-protocol */ + +#define CLIENT_PLUGIN_AUTH (1UL << 19) /* Client supports plugin authentication */ +#define CLIENT_CONNECT_ATTRS (1UL << 20) /* Client supports connection attributes */ +/* Enable authentication response packet to be larger than 255 bytes. */ +#define CLIENT_PLUGIN_AUTH_LENENC_CLIENT_DATA (1UL << 21) +/* Don't close the connection for a connection with expired password. */ +#define CLIENT_CAN_HANDLE_EXPIRED_PASSWORDS (1UL << 22) + +#define CLIENT_PROGRESS (1UL << 29) /* Client support progress indicator */ +#define CLIENT_SSL_VERIFY_SERVER_CERT (1UL << 30) +/* + It used to be that if mysql_real_connect() failed, it would delete any + options set by the client, unless the CLIENT_REMEMBER_OPTIONS flag was + given. + That behaviour does not appear very useful, and it seems unlikely that + any applications would actually depend on this. So from MariaDB 5.5 we + always preserve any options set in case of failed connect, and this + option is effectively always set. +*/ +#define CLIENT_REMEMBER_OPTIONS (1UL << 31) + +#ifdef HAVE_COMPRESS +#define CAN_CLIENT_COMPRESS CLIENT_COMPRESS +#else +#define CAN_CLIENT_COMPRESS 0 +#endif + +/* Gather all possible capabilites (flags) supported by the server */ +#define CLIENT_ALL_FLAGS (CLIENT_LONG_PASSWORD | \ + CLIENT_FOUND_ROWS | \ + CLIENT_LONG_FLAG | \ + CLIENT_CONNECT_WITH_DB | \ + CLIENT_NO_SCHEMA | \ + CLIENT_COMPRESS | \ + CLIENT_ODBC | \ + CLIENT_LOCAL_FILES | \ + CLIENT_IGNORE_SPACE | \ + CLIENT_PROTOCOL_41 | \ + CLIENT_INTERACTIVE | \ + CLIENT_SSL | \ + CLIENT_IGNORE_SIGPIPE | \ + CLIENT_TRANSACTIONS | \ + CLIENT_RESERVED | \ + CLIENT_SECURE_CONNECTION | \ + CLIENT_MULTI_STATEMENTS | \ + CLIENT_MULTI_RESULTS | \ + CLIENT_PS_MULTI_RESULTS | \ + CLIENT_SSL_VERIFY_SERVER_CERT | \ + CLIENT_REMEMBER_OPTIONS | \ + CLIENT_PROGRESS | \ + CLIENT_PLUGIN_AUTH | \ + CLIENT_PLUGIN_AUTH_LENENC_CLIENT_DATA | \ + CLIENT_CONNECT_ATTRS) + +/* + To be added later: + CLIENT_CAN_HANDLE_EXPIRED_PASSWORDS +*/ + +/* + Switch off the flags that are optional and depending on build flags + If any of the optional flags is supported by the build it will be switched + on before sending to the client during the connection handshake. +*/ +#define CLIENT_BASIC_FLAGS (((CLIENT_ALL_FLAGS & ~CLIENT_SSL) \ + & ~CLIENT_COMPRESS) \ + & ~CLIENT_SSL_VERIFY_SERVER_CERT) + +/** + Is raised when a multi-statement transaction + has been started, either explicitly, by means + of BEGIN or COMMIT AND CHAIN, or + implicitly, by the first transactional + statement, when autocommit=off. +*/ +#define SERVER_STATUS_IN_TRANS 1 +#define SERVER_STATUS_AUTOCOMMIT 2 /* Server in auto_commit mode */ +#define SERVER_MORE_RESULTS_EXISTS 8 /* Multi query - next query exists */ +#define SERVER_QUERY_NO_GOOD_INDEX_USED 16 +#define SERVER_QUERY_NO_INDEX_USED 32 +/** + The server was able to fulfill the clients request and opened a + read-only non-scrollable cursor for a query. This flag comes + in reply to COM_STMT_EXECUTE and COM_STMT_FETCH commands. +*/ +#define SERVER_STATUS_CURSOR_EXISTS 64 +/** + This flag is sent when a read-only cursor is exhausted, in reply to + COM_STMT_FETCH command. +*/ +#define SERVER_STATUS_LAST_ROW_SENT 128 +#define SERVER_STATUS_DB_DROPPED 256 /* A database was dropped */ +#define SERVER_STATUS_NO_BACKSLASH_ESCAPES 512 +/** + Sent to the client if after a prepared statement reprepare + we discovered that the new statement returns a different + number of result set columns. +*/ +#define SERVER_STATUS_METADATA_CHANGED 1024 +#define SERVER_QUERY_WAS_SLOW 2048 + +/** + To mark ResultSet containing output parameter values. +*/ +#define SERVER_PS_OUT_PARAMS 4096 + +/** + Set at the same time as SERVER_STATUS_IN_TRANS if the started + multi-statement transaction is a read-only transaction. Cleared + when the transaction commits or aborts. Since this flag is sent + to clients in OK and EOF packets, the flag indicates the + transaction status at the end of command execution. +*/ +#define SERVER_STATUS_IN_TRANS_READONLY 8192 + + +/** + Server status flags that must be cleared when starting + execution of a new SQL statement. + Flags from this set are only added to the + current server status by the execution engine, but + never removed -- the execution engine expects them + to disappear automagically by the next command. +*/ +#define SERVER_STATUS_CLEAR_SET (SERVER_QUERY_NO_GOOD_INDEX_USED| \ + SERVER_QUERY_NO_INDEX_USED|\ + SERVER_MORE_RESULTS_EXISTS|\ + SERVER_STATUS_METADATA_CHANGED |\ + SERVER_QUERY_WAS_SLOW |\ + SERVER_STATUS_DB_DROPPED |\ + SERVER_STATUS_CURSOR_EXISTS|\ + SERVER_STATUS_LAST_ROW_SENT) + +#define MYSQL_ERRMSG_SIZE 512 +#define NET_READ_TIMEOUT 30 /* Timeout on read */ +#define NET_WRITE_TIMEOUT 60 /* Timeout on write */ +#define NET_WAIT_TIMEOUT 8*60*60 /* Wait for new query */ + +struct st_vio; /* Only C */ +typedef struct st_vio Vio; + +#define MAX_TINYINT_WIDTH 3 /* Max width for a TINY w.o. sign */ +#define MAX_SMALLINT_WIDTH 5 /* Max width for a SHORT w.o. sign */ +#define MAX_MEDIUMINT_WIDTH 8 /* Max width for a INT24 w.o. sign */ +#define MAX_INT_WIDTH 10 /* Max width for a LONG w.o. sign */ +#define MAX_BIGINT_WIDTH 20 /* Max width for a LONGLONG */ +#define MAX_CHAR_WIDTH 255 /* Max length for a CHAR colum */ +#define MAX_BLOB_WIDTH 16777216 /* Default width for blob */ + +typedef struct st_net { +#if !defined(CHECK_EMBEDDED_DIFFERENCES) || !defined(EMBEDDED_LIBRARY) + Vio *vio; + unsigned char *buff,*buff_end,*write_pos,*read_pos; + my_socket fd; /* For Perl DBI/dbd */ + /* + The following variable is set if we are doing several queries in one + command ( as in LOAD TABLE ... FROM MASTER ), + and do not want to confuse the client with OK at the wrong time + */ + unsigned long remain_in_buf,length, buf_length, where_b; + unsigned long max_packet,max_packet_size; + unsigned int pkt_nr,compress_pkt_nr; + unsigned int write_timeout, read_timeout, retry_count; + int fcntl; + unsigned int *return_status; + unsigned char reading_or_writing; + char save_char; + char net_skip_rest_factor; + my_bool thread_specific_malloc; + unsigned char compress; + my_bool unused3; /* Please remove with the next incompatible ABI change. */ + /* + Pointer to query object in query cache, do not equal NULL (0) for + queries in cache that have not stored its results yet + */ +#endif + void *thd; /* Used by MariaDB server to avoid calling current_thd */ + unsigned int last_errno; + unsigned char error; + my_bool unused4; /* Please remove with the next incompatible ABI change. */ + my_bool unused5; /* Please remove with the next incompatible ABI change. */ + /** Client library error message buffer. Actually belongs to struct MYSQL. */ + char last_error[MYSQL_ERRMSG_SIZE]; + /** Client library sqlstate buffer. Set along with the error message. */ + char sqlstate[SQLSTATE_LENGTH+1]; + void *extension; +} NET; + + +#define packet_error (~(unsigned long) 0) + +enum enum_field_types { MYSQL_TYPE_DECIMAL, MYSQL_TYPE_TINY, + MYSQL_TYPE_SHORT, MYSQL_TYPE_LONG, + MYSQL_TYPE_FLOAT, MYSQL_TYPE_DOUBLE, + MYSQL_TYPE_NULL, MYSQL_TYPE_TIMESTAMP, + MYSQL_TYPE_LONGLONG,MYSQL_TYPE_INT24, + MYSQL_TYPE_DATE, MYSQL_TYPE_TIME, + MYSQL_TYPE_DATETIME, MYSQL_TYPE_YEAR, + MYSQL_TYPE_NEWDATE, MYSQL_TYPE_VARCHAR, + MYSQL_TYPE_BIT, + /* + mysql-5.6 compatibility temporal types. + They're only used internally for reading RBR + mysql-5.6 binary log events and mysql-5.6 frm files. + They're never sent to the client. + */ + MYSQL_TYPE_TIMESTAMP2, + MYSQL_TYPE_DATETIME2, + MYSQL_TYPE_TIME2, + + MYSQL_TYPE_NEWDECIMAL=246, + MYSQL_TYPE_ENUM=247, + MYSQL_TYPE_SET=248, + MYSQL_TYPE_TINY_BLOB=249, + MYSQL_TYPE_MEDIUM_BLOB=250, + MYSQL_TYPE_LONG_BLOB=251, + MYSQL_TYPE_BLOB=252, + MYSQL_TYPE_VAR_STRING=253, + MYSQL_TYPE_STRING=254, + MYSQL_TYPE_GEOMETRY=255 + +}; + +/* For backward compatibility */ +#define CLIENT_MULTI_QUERIES CLIENT_MULTI_STATEMENTS +#define FIELD_TYPE_DECIMAL MYSQL_TYPE_DECIMAL +#define FIELD_TYPE_NEWDECIMAL MYSQL_TYPE_NEWDECIMAL +#define FIELD_TYPE_TINY MYSQL_TYPE_TINY +#define FIELD_TYPE_SHORT MYSQL_TYPE_SHORT +#define FIELD_TYPE_LONG MYSQL_TYPE_LONG +#define FIELD_TYPE_FLOAT MYSQL_TYPE_FLOAT +#define FIELD_TYPE_DOUBLE MYSQL_TYPE_DOUBLE +#define FIELD_TYPE_NULL MYSQL_TYPE_NULL +#define FIELD_TYPE_TIMESTAMP MYSQL_TYPE_TIMESTAMP +#define FIELD_TYPE_LONGLONG MYSQL_TYPE_LONGLONG +#define FIELD_TYPE_INT24 MYSQL_TYPE_INT24 +#define FIELD_TYPE_DATE MYSQL_TYPE_DATE +#define FIELD_TYPE_TIME MYSQL_TYPE_TIME +#define FIELD_TYPE_DATETIME MYSQL_TYPE_DATETIME +#define FIELD_TYPE_YEAR MYSQL_TYPE_YEAR +#define FIELD_TYPE_NEWDATE MYSQL_TYPE_NEWDATE +#define FIELD_TYPE_ENUM MYSQL_TYPE_ENUM +#define FIELD_TYPE_SET MYSQL_TYPE_SET +#define FIELD_TYPE_TINY_BLOB MYSQL_TYPE_TINY_BLOB +#define FIELD_TYPE_MEDIUM_BLOB MYSQL_TYPE_MEDIUM_BLOB +#define FIELD_TYPE_LONG_BLOB MYSQL_TYPE_LONG_BLOB +#define FIELD_TYPE_BLOB MYSQL_TYPE_BLOB +#define FIELD_TYPE_VAR_STRING MYSQL_TYPE_VAR_STRING +#define FIELD_TYPE_STRING MYSQL_TYPE_STRING +#define FIELD_TYPE_CHAR MYSQL_TYPE_TINY +#define FIELD_TYPE_INTERVAL MYSQL_TYPE_ENUM +#define FIELD_TYPE_GEOMETRY MYSQL_TYPE_GEOMETRY +#define FIELD_TYPE_BIT MYSQL_TYPE_BIT + + +/* Shutdown/kill enums and constants */ + +/* Bits for THD::killable. */ +#define MYSQL_SHUTDOWN_KILLABLE_CONNECT (unsigned char)(1 << 0) +#define MYSQL_SHUTDOWN_KILLABLE_TRANS (unsigned char)(1 << 1) +#define MYSQL_SHUTDOWN_KILLABLE_LOCK_TABLE (unsigned char)(1 << 2) +#define MYSQL_SHUTDOWN_KILLABLE_UPDATE (unsigned char)(1 << 3) + +enum mysql_enum_shutdown_level { + /* + We want levels to be in growing order of hardness (because we use number + comparisons). Note that DEFAULT does not respect the growing property, but + it's ok. + */ + SHUTDOWN_DEFAULT = 0, + /* wait for existing connections to finish */ + SHUTDOWN_WAIT_CONNECTIONS= MYSQL_SHUTDOWN_KILLABLE_CONNECT, + /* wait for existing trans to finish */ + SHUTDOWN_WAIT_TRANSACTIONS= MYSQL_SHUTDOWN_KILLABLE_TRANS, + /* wait for existing updates to finish (=> no partial MyISAM update) */ + SHUTDOWN_WAIT_UPDATES= MYSQL_SHUTDOWN_KILLABLE_UPDATE, + /* flush InnoDB buffers and other storage engines' buffers*/ + SHUTDOWN_WAIT_ALL_BUFFERS= (MYSQL_SHUTDOWN_KILLABLE_UPDATE << 1), + /* don't flush InnoDB buffers, flush other storage engines' buffers*/ + SHUTDOWN_WAIT_CRITICAL_BUFFERS= (MYSQL_SHUTDOWN_KILLABLE_UPDATE << 1) + 1 +}; + +enum enum_cursor_type +{ + CURSOR_TYPE_NO_CURSOR= 0, + CURSOR_TYPE_READ_ONLY= 1, + CURSOR_TYPE_FOR_UPDATE= 2, + CURSOR_TYPE_SCROLLABLE= 4 +}; + + +/* options for mysql_set_option */ +enum enum_mysql_set_option +{ + MYSQL_OPTION_MULTI_STATEMENTS_ON, + MYSQL_OPTION_MULTI_STATEMENTS_OFF +}; + +#define net_new_transaction(net) ((net)->pkt_nr=0) + +#ifdef __cplusplus +extern "C" { +#endif + +my_bool my_net_init(NET *net, Vio* vio, void *thd, unsigned int my_flags); +void my_net_local_init(NET *net); +void net_end(NET *net); +void net_clear(NET *net, my_bool clear_buffer); +my_bool net_realloc(NET *net, size_t length); +my_bool net_flush(NET *net); +my_bool my_net_write(NET *net,const unsigned char *packet, size_t len); +my_bool net_write_command(NET *net,unsigned char command, + const unsigned char *header, size_t head_len, + const unsigned char *packet, size_t len); +int net_real_write(NET *net,const unsigned char *packet, size_t len); +unsigned long my_net_read_packet(NET *net, my_bool read_from_server); +#define my_net_read(A) my_net_read_packet((A), 0) + +#ifdef MY_GLOBAL_INCLUDED +void my_net_set_write_timeout(NET *net, uint timeout); +void my_net_set_read_timeout(NET *net, uint timeout); +#endif + +struct sockaddr; +int my_connect(my_socket s, const struct sockaddr *name, unsigned int namelen, + unsigned int timeout); +struct my_rnd_struct; + +#ifdef __cplusplus +} +#endif + + /* The following is for user defined functions */ + +enum Item_result +{ + STRING_RESULT=0, REAL_RESULT, INT_RESULT, ROW_RESULT, DECIMAL_RESULT, + TIME_RESULT +}; + +typedef struct st_udf_args +{ + unsigned int arg_count; /* Number of arguments */ + enum Item_result *arg_type; /* Pointer to item_results */ + char **args; /* Pointer to argument */ + unsigned long *lengths; /* Length of string arguments */ + char *maybe_null; /* Set to 1 for all maybe_null args */ + char **attributes; /* Pointer to attribute name */ + unsigned long *attribute_lengths; /* Length of attribute arguments */ + void *extension; +} UDF_ARGS; + + /* This holds information about the result */ + +typedef struct st_udf_init +{ + my_bool maybe_null; /* 1 if function can return NULL */ + unsigned int decimals; /* for real functions */ + unsigned long max_length; /* For string functions */ + char *ptr; /* free pointer for function data */ + my_bool const_item; /* 1 if function always returns the same value */ + void *extension; +} UDF_INIT; +/* + TODO: add a notion for determinism of the UDF. + See Item_udf_func::update_used_tables () +*/ + + /* Constants when using compression */ +#define NET_HEADER_SIZE 4 /* standard header size */ +#define COMP_HEADER_SIZE 3 /* compression header extra size */ + + /* Prototypes to password functions */ + +#ifdef __cplusplus +extern "C" { +#endif + +/* + These functions are used for authentication by client and server and + implemented in sql/password.c +*/ + +void create_random_string(char *to, unsigned int length, + struct my_rnd_struct *rand_st); + +void hash_password(unsigned long *to, const char *password, unsigned int password_len); +void make_scrambled_password_323(char *to, const char *password); +void scramble_323(char *to, const char *message, const char *password); +my_bool check_scramble_323(const unsigned char *reply, const char *message, + unsigned long *salt); +void get_salt_from_password_323(unsigned long *res, const char *password); +void make_scrambled_password(char *to, const char *password); +void scramble(char *to, const char *message, const char *password); +my_bool check_scramble(const unsigned char *reply, const char *message, + const unsigned char *hash_stage2); +void get_salt_from_password(unsigned char *res, const char *password); +char *octet2hex(char *to, const char *str, unsigned int len); + +/* end of password.c */ + +char *get_tty_password(const char *opt_message); +void get_tty_password_buff(const char *opt_message, char *to, size_t length); +const char *mysql_errno_to_sqlstate(unsigned int mysql_errno); + +/* Some other useful functions */ + +my_bool my_thread_init(void); +void my_thread_end(void); + +#ifdef MY_GLOBAL_INCLUDED +ulong STDCALL net_field_length(uchar **packet); +my_ulonglong net_field_length_ll(uchar **packet); +my_ulonglong safe_net_field_length_ll(uchar **packet, size_t packet_len); +uchar *net_store_length(uchar *pkg, ulonglong length); +uchar *safe_net_store_length(uchar *pkg, size_t pkg_len, ulonglong length); +#endif + +#ifdef __cplusplus +} +#endif + +#define NULL_LENGTH ((unsigned long) ~0) /* For net_store_length */ +#define MYSQL_STMT_HEADER 4 +#define MYSQL_LONG_DATA_HEADER 6 + +#define NOT_FIXED_DEC 31 +#endif diff --git a/EQ2/source/depends/mariadb-10.1.19/include/mysql_com_server.h b/EQ2/source/depends/mariadb-10.1.19/include/mysql_com_server.h new file mode 100644 index 000000000..1ea040207 --- /dev/null +++ b/EQ2/source/depends/mariadb-10.1.19/include/mysql_com_server.h @@ -0,0 +1,41 @@ +/* Copyright (c) 2011, Oracle and/or its affiliates. All rights reserved. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; version 2 of the License. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ + +/* + Definitions private to the server, + used in the networking layer to notify specific events. +*/ + +#ifndef _mysql_com_server_h +#define _mysql_com_server_h + +struct st_net_server; + +typedef void (*before_header_callback_fn) + (struct st_net *net, void *user_data, size_t count); + +typedef void (*after_header_callback_fn) + (struct st_net *net, void *user_data, size_t count, my_bool rc); + +struct st_net_server +{ + before_header_callback_fn m_before_header; + after_header_callback_fn m_after_header; + void *m_user_data; +}; + +typedef struct st_net_server NET_SERVER; + +#endif diff --git a/EQ2/source/depends/mariadb-10.1.19/include/mysql_embed.h b/EQ2/source/depends/mariadb-10.1.19/include/mysql_embed.h new file mode 100644 index 000000000..12b18ff96 --- /dev/null +++ b/EQ2/source/depends/mariadb-10.1.19/include/mysql_embed.h @@ -0,0 +1,31 @@ +#ifndef MYSQL_EMBED_INCLUDED +#define MYSQL_EMBED_INCLUDED + +/* + Copyright (c) 2000, 2011, Oracle and/or its affiliates. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; version 2 of the License. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ + +/* Defines that are unique to the embedded version of MySQL */ + +#ifdef EMBEDDED_LIBRARY + +/* Things we don't need in the embedded version of MySQL */ +/* TODO HF add #undef HAVE_VIO if we don't want client in embedded library */ + +#undef HAVE_DLOPEN /* No udf functions */ +#undef HAVE_SMEM /* No shared memory */ + +#endif /* EMBEDDED_LIBRARY */ +#endif /* MYSQL_EMBED_INCLUDED */ diff --git a/EQ2/source/depends/mariadb-10.1.19/include/mysql_time.h b/EQ2/source/depends/mariadb-10.1.19/include/mysql_time.h new file mode 100644 index 000000000..24fd7ed61 --- /dev/null +++ b/EQ2/source/depends/mariadb-10.1.19/include/mysql_time.h @@ -0,0 +1,67 @@ +/* Copyright (c) 2004, 2006 MySQL AB + Use is subject to license terms + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; version 2 of the License. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA */ + +#ifndef _mysql_time_h_ +#define _mysql_time_h_ + +/* + Portable time_t replacement. + Should be signed and hold seconds for 1902 -- 2038-01-19 range + i.e at least a 32bit variable + + Using the system built in time_t is not an option as + we rely on the above requirements in the time functions +*/ +typedef long my_time_t; + + +/* + Time declarations shared between the server and client API: + you should not add anything to this header unless it's used + (and hence should be visible) in mysql.h. + If you're looking for a place to add new time-related declaration, + it's most likely my_time.h. See also "C API Handling of Date + and Time Values" chapter in documentation. +*/ + +enum enum_mysql_timestamp_type +{ + MYSQL_TIMESTAMP_NONE= -2, MYSQL_TIMESTAMP_ERROR= -1, + MYSQL_TIMESTAMP_DATE= 0, MYSQL_TIMESTAMP_DATETIME= 1, MYSQL_TIMESTAMP_TIME= 2 +}; + + +/* + Structure which is used to represent datetime values inside MySQL. + + We assume that values in this structure are normalized, i.e. year <= 9999, + month <= 12, day <= 31, hour <= 23, hour <= 59, hour <= 59. Many functions + in server such as my_system_gmt_sec() or make_time() family of functions + rely on this (actually now usage of make_*() family relies on a bit weaker + restriction). Also functions that produce MYSQL_TIME as result ensure this. + There is one exception to this rule though if this structure holds time + value (time_type == MYSQL_TIMESTAMP_TIME) days and hour member can hold + bigger values. +*/ +typedef struct st_mysql_time +{ + unsigned int year, month, day, hour, minute, second; + unsigned long second_part; + my_bool neg; + enum enum_mysql_timestamp_type time_type; +} MYSQL_TIME; + +#endif /* _mysql_time_h_ */ diff --git a/EQ2/source/depends/mariadb-10.1.19/include/mysql_version.h b/EQ2/source/depends/mariadb-10.1.19/include/mysql_version.h new file mode 100644 index 000000000..ca866c067 --- /dev/null +++ b/EQ2/source/depends/mariadb-10.1.19/include/mysql_version.h @@ -0,0 +1,37 @@ +/* Copyright Abandoned 1996,1999 TCX DataKonsult AB & Monty Program KB + & Detron HB, 1996, 1999-2004, 2007 MySQL AB. + This file is public domain and comes with NO WARRANTY of any kind +*/ + +/* Version numbers for protocol & mysqld */ + +#ifndef _mysql_version_h +#define _mysql_version_h +#ifdef _CUSTOMCONFIG_ +#include +#else +#define PROTOCOL_VERSION 10 +#define MYSQL_SERVER_VERSION "10.1.19-MariaDB" +#define MYSQL_BASE_VERSION "mysqld-10.1" +#define MARIADB_BASE_VERSION "mariadb-10.1" +#define MYSQL_SERVER_SUFFIX_DEF "" +#define FRM_VER 6 +#define MYSQL_VERSION_ID 100119 +#define MYSQL_PORT 3306 +#define MYSQL_PORT_DEFAULT 0 +#define MYSQL_UNIX_ADDR "/tmp/mysql.sock" +#define MYSQL_CONFIG_NAME "my" +#define MYSQL_COMPILATION_COMMENT "Source distribution" + +#ifdef WITH_WSREP +#define WSREP_PATCH_VERSION "16" +#endif + +/* mysqld compile time options */ +#endif /* _CUSTOMCONFIG_ */ + +#ifndef LICENSE +#define LICENSE GPL +#endif /* LICENSE */ + +#endif /* _mysql_version_h */ diff --git a/EQ2/source/depends/mariadb-10.1.19/include/mysqld_default_groups.h b/EQ2/source/depends/mariadb-10.1.19/include/mysqld_default_groups.h new file mode 100644 index 000000000..3bc823597 --- /dev/null +++ b/EQ2/source/depends/mariadb-10.1.19/include/mysqld_default_groups.h @@ -0,0 +1,8 @@ +const char *load_default_groups[]= { +"mysqld", "server", MYSQL_BASE_VERSION, +"mariadb", MARIADB_BASE_VERSION, +"client-server", +#ifdef WITH_WSREP +"galera", +#endif +0, 0}; diff --git a/EQ2/source/depends/mariadb-10.1.19/include/mysys_err.h b/EQ2/source/depends/mariadb-10.1.19/include/mysys_err.h new file mode 100644 index 000000000..f173ccd7a --- /dev/null +++ b/EQ2/source/depends/mariadb-10.1.19/include/mysys_err.h @@ -0,0 +1,95 @@ +/* + Copyright (c) 2000, 2010, Oracle and/or its affiliates. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; version 2 of the License. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ + +#ifndef _mysys_err_h +#define _mysys_err_h + +#ifdef __cplusplus +extern "C" { +#endif + +#define GLOBERRS (EE_ERROR_LAST - EE_ERROR_FIRST + 1) /* Nr of global errors */ +#define EE(X) (globerrs[(X) - EE_ERROR_FIRST]) + +extern const char *globerrs[]; /* my_error_messages is here */ + +/* Error message numbers in global map */ +/* + Do not add error numbers before EE_ERROR_FIRST. + If necessary to add lower numbers, change EE_ERROR_FIRST accordingly. + + We start with error 1 to not confuse peoples with 'error 0' +*/ + +#define EE_ERROR_FIRST 1 /*Copy first error nr.*/ +#define EE_CANTCREATEFILE 1 +#define EE_READ 2 +#define EE_WRITE 3 +#define EE_BADCLOSE 4 +#define EE_OUTOFMEMORY 5 +#define EE_DELETE 6 +#define EE_LINK 7 +#define EE_EOFERR 9 +#define EE_CANTLOCK 10 +#define EE_CANTUNLOCK 11 +#define EE_DIR 12 +#define EE_STAT 13 +#define EE_CANT_CHSIZE 14 +#define EE_CANT_OPEN_STREAM 15 +#define EE_GETWD 16 +#define EE_SETWD 17 +#define EE_LINK_WARNING 18 +#define EE_OPEN_WARNING 19 +#define EE_DISK_FULL 20 +#define EE_CANT_MKDIR 21 +#define EE_UNKNOWN_CHARSET 22 +#define EE_OUT_OF_FILERESOURCES 23 +#define EE_CANT_READLINK 24 +#define EE_CANT_SYMLINK 25 +#define EE_REALPATH 26 +#define EE_SYNC 27 +#define EE_UNKNOWN_COLLATION 28 +#define EE_FILENOTFOUND 29 +#define EE_FILE_NOT_CLOSED 30 +#define EE_CHANGE_OWNERSHIP 31 +#define EE_CHANGE_PERMISSIONS 32 +#define EE_CANT_SEEK 33 +#define EE_CANT_CHMOD 34 +#define EE_CANT_COPY_OWNERSHIP 35 +#define EE_ERROR_LAST 35 /* Copy last error nr */ + +/* Add error numbers before EE_ERROR_LAST and change it accordingly. */ + + /* exit codes for all MySQL programs */ + +#define EXIT_UNSPECIFIED_ERROR 1 +#define EXIT_UNKNOWN_OPTION 2 +#define EXIT_AMBIGUOUS_OPTION 3 +#define EXIT_NO_ARGUMENT_ALLOWED 4 +#define EXIT_ARGUMENT_REQUIRED 5 +#define EXIT_VAR_PREFIX_NOT_UNIQUE 6 +#define EXIT_UNKNOWN_VARIABLE 7 +#define EXIT_OUT_OF_MEMORY 8 +#define EXIT_UNKNOWN_SUFFIX 9 +#define EXIT_NO_PTR_TO_VARIABLE 10 +#define EXIT_CANNOT_CONNECT_TO_SERVICE 11 +#define EXIT_OPTION_DISABLED 12 +#define EXIT_ARGUMENT_INVALID 13 + +#ifdef __cplusplus +} +#endif +#endif diff --git a/EQ2/source/depends/mariadb-10.1.19/include/password.h b/EQ2/source/depends/mariadb-10.1.19/include/password.h new file mode 100644 index 000000000..082f917e7 --- /dev/null +++ b/EQ2/source/depends/mariadb-10.1.19/include/password.h @@ -0,0 +1,32 @@ +/* Copyright (c) 2006, 2010, Oracle and/or its affiliates. All rights reserved. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; version 2 of the License. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ + +#ifndef PASSWORD_INCLUDED +#define PASSWORD_INCLUDED + +#include "my_global.h" + +C_MODE_START + +void my_make_scrambled_password_323(char *to, const char *password, + size_t pass_len); +void my_make_scrambled_password(char *to, const char *password, + size_t pass_len); + +void hash_password(ulong *result, const char *password, uint password_len); + +C_MODE_END + +#endif /* PASSWORD_INCLUDED */ diff --git a/EQ2/source/depends/mariadb-10.1.19/include/probes_mysql.d.base b/EQ2/source/depends/mariadb-10.1.19/include/probes_mysql.d.base new file mode 100644 index 000000000..02eb9ec1a --- /dev/null +++ b/EQ2/source/depends/mariadb-10.1.19/include/probes_mysql.d.base @@ -0,0 +1,177 @@ +/* Copyright (c) 2008, 2009 Sun Microsystems, Inc. + Use is subject to license terms. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; version 2 of the License. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ + +/* + The actual probe names in DTrace scripts will replace '__' by '-'. Thus + insert__row__start will be insert-row-start. + + Recommendations for adding new probes: + + - each probe should have the minimal set of arguments required to + unambiguously identify the context in which the probe fires. Redundant + arguments (i.e. the ones that can be obtained in user scripts from previous + probes' arguments or otherwise) may be added for convenience. + + - try to avoid computationally expensive probe arguments. If impossible, + use *_ENABLED() macros to check if the probe is activated before + performing expensive calculations for a probe argument. + + - all *-done probes should have a status argument wherever applicable to make + it possible for user scripts to figure out whether the completed operation + was successful or not. + + - for all status arguments, a non-zero value should be returned on error or + failure, 0 should be returned on success. +*/ + +provider mysql { + + /* The following ones fire when creating or closing a client connection */ + probe connection__start(unsigned long conn_id, char *user, char *host); + probe connection__done(int status, unsigned long conn_id); + + /* + Fire at the start/end of any client command processing (including SQL + queries). + */ + probe command__start(unsigned long conn_id, int command, + char *user, char *host); + probe command__done(int status); + + /* + The following probes fire at the start/end of any SQL query processing, + respectively. + + query_start() has a lot of parameters that can be used to pick up + parameters for a lot of other probes here. For simplicity reasons we also + add the query string to most other DTrace probes as well. Hostname is + either the hostname or the IP address of the MySQL Client. + */ + probe query__start(char *query, + unsigned long conn_id, + char *db_name, + char *user, + char *host); + probe query__done(int status); + + /* Fire at the start/end of SQL query parsing */ + probe query__parse__start(char *query); + probe query__parse__done(int status); + + /* Track whether the query hits the query cache or not */ + probe query__cache__hit(char *query, unsigned long rows); + probe query__cache__miss(char *query); + + /* + This probe fires when the actual query execution starts, i.e. after + parsing and checking the query cache, but before privilege checks, + optimizing, etc. + + Query means also all independent queries of a stored procedure and prepared + statements. Also the stored procedure itself is a query. + + exec_type is: + 0: Executed query from sql_parse, top-level query (sql_parse.cc) + 1: Executed prepared statement (sql_prepare.cc) + 2: Executed cursor statement (sql_cursor.cc) + 3: Executed query in stored procedure (sp_head.cc) + */ + probe query__exec__start(char *query, + unsigned long connid, + char *db_name, + char *user, + char *host, + int exec_type); + probe query__exec__done(int status); + + /* These probes fire when performing row operations towards any handler */ + probe insert__row__start(char *db, char *table); + probe insert__row__done(int status); + probe update__row__start(char *db, char *table); + probe update__row__done(int status); + probe delete__row__start(char *db, char *table); + probe delete__row__done(int status); + probe read__row__start(char *db, char *table, int scan_flag); + probe read__row__done(int status); + probe index__read__row__start(char *db, char *table); + probe index__read__row__done(int status); + + /* + These probes fire when calling external_lock for any handler + depending on the lock type being acquired or released. + */ + probe handler__rdlock__start(char *db, char *table); + probe handler__wrlock__start(char *db, char *table); + probe handler__unlock__start(char *db, char *table); + probe handler__rdlock__done(int status); + probe handler__wrlock__done(int status); + probe handler__unlock__done(int status); + + /* + These probes fire when a filesort activity happens in a query. + */ + probe filesort__start(char *db, char *table); + probe filesort__done(int status, unsigned long rows); + /* + The query types SELECT, INSERT, INSERT AS SELECT, UPDATE, UPDATE with + multiple tables, DELETE, DELETE with multiple tables are all probed. + The start probe always contains the query text. + */ + probe select__start(char *query); + probe select__done(int status, unsigned long rows); + probe insert__start(char *query); + probe insert__done(int status, unsigned long rows); + probe insert__select__start(char *query); + probe insert__select__done(int status, unsigned long rows); + probe update__start(char *query); + probe update__done(int status, + unsigned long rowsmatches, unsigned long rowschanged); + probe multi__update__start(char *query); + probe multi__update__done(int status, + unsigned long rowsmatches, + unsigned long rowschanged); + probe delete__start(char *query); + probe delete__done(int status, unsigned long rows); + probe multi__delete__start(char *query); + probe multi__delete__done(int status, unsigned long rows); + + /* + These probes can be used to measure the time waiting for network traffic + or identify network-related problems. + */ + probe net__read__start(); + probe net__read__done(int status, unsigned long bytes); + probe net__write__start(unsigned long bytes); + probe net__write__done(int status); + + /* MyISAM Key cache probes */ + probe keycache__read__start(char *filepath, unsigned long bytes, + unsigned long mem_used, unsigned long mem_free); + probe keycache__read__block(unsigned long bytes); + probe keycache__read__hit(); + probe keycache__read__miss(); + probe keycache__read__done(unsigned long mem_used, unsigned long mem_free); + probe keycache__write__start(char *filepath, unsigned long bytes, + unsigned long mem_used, unsigned long mem_free); + probe keycache__write__block(unsigned long bytes); + probe keycache__write__done(unsigned long mem_used, unsigned long mem_free); +}; + +#pragma D attributes Evolving/Evolving/Common provider mysql provider +#pragma D attributes Evolving/Evolving/Common provider mysql module +#pragma D attributes Evolving/Evolving/Common provider mysql function +#pragma D attributes Evolving/Evolving/Common provider mysql name +#pragma D attributes Evolving/Evolving/Common provider mysql args diff --git a/EQ2/source/depends/mariadb-10.1.19/include/probes_mysql.h b/EQ2/source/depends/mariadb-10.1.19/include/probes_mysql.h new file mode 100644 index 000000000..6d44b972c --- /dev/null +++ b/EQ2/source/depends/mariadb-10.1.19/include/probes_mysql.h @@ -0,0 +1,26 @@ +/* Copyright (c) 2008 Sun Microsystems, Inc. + Use is subject to license terms. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; version 2 of the License. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ + +#ifndef PROBES_MYSQL_H + +#define PROBES_MYSQL_H + +#if defined(HAVE_DTRACE) && !defined(DISABLE_DTRACE) +#include "probes_mysql_dtrace.h" +#else /* no dtrace */ +#include "probes_mysql_nodtrace.h" +#endif +#endif /* PROBES_MYSQL_H */ diff --git a/EQ2/source/depends/mariadb-10.1.19/include/probes_mysql_nodtrace.h.in b/EQ2/source/depends/mariadb-10.1.19/include/probes_mysql_nodtrace.h.in new file mode 100644 index 000000000..2155e8489 --- /dev/null +++ b/EQ2/source/depends/mariadb-10.1.19/include/probes_mysql_nodtrace.h.in @@ -0,0 +1,132 @@ +/* + * Generated by dheadgen(1). + */ + +#ifndef _PROBES_MYSQL_D +#define _PROBES_MYSQL_D + +#ifdef __cplusplus +extern "C" { +#define MYSQL_DTRACE_DISABLED false +#else +#define MYSQL_DTRACE_DISABLED 0 +#endif + +#define MYSQL_CONNECTION_START(arg0, arg1, arg2) +#define MYSQL_CONNECTION_START_ENABLED() MYSQL_DTRACE_DISABLED +#define MYSQL_CONNECTION_DONE(arg0, arg1) +#define MYSQL_CONNECTION_DONE_ENABLED() MYSQL_DTRACE_DISABLED +#define MYSQL_COMMAND_START(arg0, arg1, arg2, arg3) +#define MYSQL_COMMAND_START_ENABLED() MYSQL_DTRACE_DISABLED +#define MYSQL_COMMAND_DONE(arg0) +#define MYSQL_COMMAND_DONE_ENABLED() MYSQL_DTRACE_DISABLED +#define MYSQL_QUERY_START(arg0, arg1, arg2, arg3, arg4) +#define MYSQL_QUERY_START_ENABLED() MYSQL_DTRACE_DISABLED +#define MYSQL_QUERY_DONE(arg0) +#define MYSQL_QUERY_DONE_ENABLED() MYSQL_DTRACE_DISABLED +#define MYSQL_QUERY_PARSE_START(arg0) +#define MYSQL_QUERY_PARSE_START_ENABLED() MYSQL_DTRACE_DISABLED +#define MYSQL_QUERY_PARSE_DONE(arg0) +#define MYSQL_QUERY_PARSE_DONE_ENABLED() MYSQL_DTRACE_DISABLED +#define MYSQL_QUERY_CACHE_HIT(arg0, arg1) +#define MYSQL_QUERY_CACHE_HIT_ENABLED() MYSQL_DTRACE_DISABLED +#define MYSQL_QUERY_CACHE_MISS(arg0) +#define MYSQL_QUERY_CACHE_MISS_ENABLED() MYSQL_DTRACE_DISABLED +#define MYSQL_QUERY_EXEC_START(arg0, arg1, arg2, arg3, arg4, arg5) +#define MYSQL_QUERY_EXEC_START_ENABLED() MYSQL_DTRACE_DISABLED +#define MYSQL_QUERY_EXEC_DONE(arg0) +#define MYSQL_QUERY_EXEC_DONE_ENABLED() MYSQL_DTRACE_DISABLED +#define MYSQL_INSERT_ROW_START(arg0, arg1) +#define MYSQL_INSERT_ROW_START_ENABLED() MYSQL_DTRACE_DISABLED +#define MYSQL_INSERT_ROW_DONE(arg0) +#define MYSQL_INSERT_ROW_DONE_ENABLED() MYSQL_DTRACE_DISABLED +#define MYSQL_UPDATE_ROW_START(arg0, arg1) +#define MYSQL_UPDATE_ROW_START_ENABLED() MYSQL_DTRACE_DISABLED +#define MYSQL_UPDATE_ROW_DONE(arg0) +#define MYSQL_UPDATE_ROW_DONE_ENABLED() MYSQL_DTRACE_DISABLED +#define MYSQL_DELETE_ROW_START(arg0, arg1) +#define MYSQL_DELETE_ROW_START_ENABLED() MYSQL_DTRACE_DISABLED +#define MYSQL_DELETE_ROW_DONE(arg0) +#define MYSQL_DELETE_ROW_DONE_ENABLED() MYSQL_DTRACE_DISABLED +#define MYSQL_READ_ROW_START(arg0, arg1, arg2) +#define MYSQL_READ_ROW_START_ENABLED() MYSQL_DTRACE_DISABLED +#define MYSQL_READ_ROW_DONE(arg0) +#define MYSQL_READ_ROW_DONE_ENABLED() MYSQL_DTRACE_DISABLED +#define MYSQL_INDEX_READ_ROW_START(arg0, arg1) +#define MYSQL_INDEX_READ_ROW_START_ENABLED() MYSQL_DTRACE_DISABLED +#define MYSQL_INDEX_READ_ROW_DONE(arg0) +#define MYSQL_INDEX_READ_ROW_DONE_ENABLED() MYSQL_DTRACE_DISABLED +#define MYSQL_HANDLER_RDLOCK_START(arg0, arg1) +#define MYSQL_HANDLER_RDLOCK_START_ENABLED() MYSQL_DTRACE_DISABLED +#define MYSQL_HANDLER_WRLOCK_START(arg0, arg1) +#define MYSQL_HANDLER_WRLOCK_START_ENABLED() MYSQL_DTRACE_DISABLED +#define MYSQL_HANDLER_UNLOCK_START(arg0, arg1) +#define MYSQL_HANDLER_UNLOCK_START_ENABLED() MYSQL_DTRACE_DISABLED +#define MYSQL_HANDLER_RDLOCK_DONE(arg0) +#define MYSQL_HANDLER_RDLOCK_DONE_ENABLED() MYSQL_DTRACE_DISABLED +#define MYSQL_HANDLER_WRLOCK_DONE(arg0) +#define MYSQL_HANDLER_WRLOCK_DONE_ENABLED() MYSQL_DTRACE_DISABLED +#define MYSQL_HANDLER_UNLOCK_DONE(arg0) +#define MYSQL_HANDLER_UNLOCK_DONE_ENABLED() MYSQL_DTRACE_DISABLED +#define MYSQL_FILESORT_START(arg0, arg1) +#define MYSQL_FILESORT_START_ENABLED() MYSQL_DTRACE_DISABLED +#define MYSQL_FILESORT_DONE(arg0, arg1) +#define MYSQL_FILESORT_DONE_ENABLED() MYSQL_DTRACE_DISABLED +#define MYSQL_SELECT_START(arg0) +#define MYSQL_SELECT_START_ENABLED() MYSQL_DTRACE_DISABLED +#define MYSQL_SELECT_DONE(arg0, arg1) +#define MYSQL_SELECT_DONE_ENABLED() MYSQL_DTRACE_DISABLED +#define MYSQL_INSERT_START(arg0) +#define MYSQL_INSERT_START_ENABLED() MYSQL_DTRACE_DISABLED +#define MYSQL_INSERT_DONE(arg0, arg1) +#define MYSQL_INSERT_DONE_ENABLED() MYSQL_DTRACE_DISABLED +#define MYSQL_INSERT_SELECT_START(arg0) +#define MYSQL_INSERT_SELECT_START_ENABLED() MYSQL_DTRACE_DISABLED +#define MYSQL_INSERT_SELECT_DONE(arg0, arg1) +#define MYSQL_INSERT_SELECT_DONE_ENABLED() MYSQL_DTRACE_DISABLED +#define MYSQL_UPDATE_START(arg0) +#define MYSQL_UPDATE_START_ENABLED() MYSQL_DTRACE_DISABLED +#define MYSQL_UPDATE_DONE(arg0, arg1, arg2) +#define MYSQL_UPDATE_DONE_ENABLED() MYSQL_DTRACE_DISABLED +#define MYSQL_MULTI_UPDATE_START(arg0) +#define MYSQL_MULTI_UPDATE_START_ENABLED() MYSQL_DTRACE_DISABLED +#define MYSQL_MULTI_UPDATE_DONE(arg0, arg1, arg2) +#define MYSQL_MULTI_UPDATE_DONE_ENABLED() MYSQL_DTRACE_DISABLED +#define MYSQL_DELETE_START(arg0) +#define MYSQL_DELETE_START_ENABLED() MYSQL_DTRACE_DISABLED +#define MYSQL_DELETE_DONE(arg0, arg1) +#define MYSQL_DELETE_DONE_ENABLED() MYSQL_DTRACE_DISABLED +#define MYSQL_MULTI_DELETE_START(arg0) +#define MYSQL_MULTI_DELETE_START_ENABLED() MYSQL_DTRACE_DISABLED +#define MYSQL_MULTI_DELETE_DONE(arg0, arg1) +#define MYSQL_MULTI_DELETE_DONE_ENABLED() MYSQL_DTRACE_DISABLED +#define MYSQL_NET_READ_START() +#define MYSQL_NET_READ_START_ENABLED() MYSQL_DTRACE_DISABLED +#define MYSQL_NET_READ_DONE(arg0, arg1) +#define MYSQL_NET_READ_DONE_ENABLED() MYSQL_DTRACE_DISABLED +#define MYSQL_NET_WRITE_START(arg0) +#define MYSQL_NET_WRITE_START_ENABLED() MYSQL_DTRACE_DISABLED +#define MYSQL_NET_WRITE_DONE(arg0) +#define MYSQL_NET_WRITE_DONE_ENABLED() MYSQL_DTRACE_DISABLED +#define MYSQL_KEYCACHE_READ_START(arg0, arg1, arg2, arg3) +#define MYSQL_KEYCACHE_READ_START_ENABLED() MYSQL_DTRACE_DISABLED +#define MYSQL_KEYCACHE_READ_BLOCK(arg0) +#define MYSQL_KEYCACHE_READ_BLOCK_ENABLED() MYSQL_DTRACE_DISABLED +#define MYSQL_KEYCACHE_READ_HIT() +#define MYSQL_KEYCACHE_READ_HIT_ENABLED() MYSQL_DTRACE_DISABLED +#define MYSQL_KEYCACHE_READ_MISS() +#define MYSQL_KEYCACHE_READ_MISS_ENABLED() MYSQL_DTRACE_DISABLED +#define MYSQL_KEYCACHE_READ_DONE(arg0, arg1) +#define MYSQL_KEYCACHE_READ_DONE_ENABLED() MYSQL_DTRACE_DISABLED +#define MYSQL_KEYCACHE_WRITE_START(arg0, arg1, arg2, arg3) +#define MYSQL_KEYCACHE_WRITE_START_ENABLED() MYSQL_DTRACE_DISABLED +#define MYSQL_KEYCACHE_WRITE_BLOCK(arg0) +#define MYSQL_KEYCACHE_WRITE_BLOCK_ENABLED() MYSQL_DTRACE_DISABLED +#define MYSQL_KEYCACHE_WRITE_DONE(arg0, arg1) +#define MYSQL_KEYCACHE_WRITE_DONE_ENABLED() MYSQL_DTRACE_DISABLED + +#ifdef __cplusplus +} +#endif + +#endif /* _PROBES_MYSQL_D */ diff --git a/EQ2/source/depends/mariadb-10.1.19/include/queues.h b/EQ2/source/depends/mariadb-10.1.19/include/queues.h new file mode 100644 index 000000000..f341bbb81 --- /dev/null +++ b/EQ2/source/depends/mariadb-10.1.19/include/queues.h @@ -0,0 +1,89 @@ +/* Copyright (C) 2010 Monty Program Ab + All Rights reserved + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions are met: + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the following disclaimer + in the documentation and/or other materials provided with the + distribution. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL + BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF + USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, + OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT + OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + SUCH DAMAGE. +*/ + +/* + Code for generell handling of priority Queues. + Implemention of queues from "Algoritms in C" by Robert Sedgewick. +*/ + +#ifndef _queues_h +#define _queues_h + +#include "my_global.h" /* uchar */ + +#ifdef __cplusplus +extern "C" { +#endif + +typedef struct st_queue { + uchar **root; + void *first_cmp_arg; + uint elements; + uint max_elements; + uint offset_to_key; /* compare is done on element+offset */ + uint offset_to_queue_pos; /* If we want to store position in element */ + uint auto_extent; + int max_at_top; /* Normally 1, set to -1 if queue_top gives max */ + int (*compare)(void *, uchar *,uchar *); +} QUEUE; + +#define queue_first_element(queue) 1 +#define queue_last_element(queue) (queue)->elements +#define queue_empty(queue) ((queue)->elements == 0) +#define queue_top(queue) ((queue)->root[1]) +#define queue_element(queue,index) ((queue)->root[index]) +#define queue_end(queue) ((queue)->root[(queue)->elements]) +#define queue_replace_top(queue) _downheap(queue, 1, (queue)->root[1]) +#define queue_set_cmp_arg(queue, set_arg) (queue)->first_cmp_arg= set_arg +#define queue_set_max_at_top(queue, set_arg) \ + (queue)->max_at_top= set_arg ? -1 : 1 +#define queue_remove_top(queue_arg) queue_remove((queue_arg), queue_first_element(queue_arg)) +typedef int (*queue_compare)(void *,uchar *, uchar *); + +int init_queue(QUEUE *queue,uint max_elements,uint offset_to_key, + pbool max_at_top, queue_compare compare, + void *first_cmp_arg, uint offset_to_queue_pos, + uint auto_extent); +int reinit_queue(QUEUE *queue,uint max_elements,uint offset_to_key, + pbool max_at_top, queue_compare compare, + void *first_cmp_arg, uint offset_to_queue_pos, + uint auto_extent); +int resize_queue(QUEUE *queue, uint max_elements); +void delete_queue(QUEUE *queue); +void queue_insert(QUEUE *queue,uchar *element); +int queue_insert_safe(QUEUE *queue, uchar *element); +uchar *queue_remove(QUEUE *queue,uint idx); +void queue_replace(QUEUE *queue,uint idx); + +#define queue_remove_all(queue) { (queue)->elements= 0; } +#define queue_is_full(queue) (queue->elements == queue->max_elements) +void _downheap(QUEUE *queue, uint idx, uchar *element); +void queue_fix(QUEUE *queue); +#define is_queue_inited(queue) ((queue)->root != 0) + +#ifdef __cplusplus +} +#endif +#endif diff --git a/EQ2/source/depends/mariadb-10.1.19/include/rijndael.h b/EQ2/source/depends/mariadb-10.1.19/include/rijndael.h new file mode 100644 index 000000000..474b3250d --- /dev/null +++ b/EQ2/source/depends/mariadb-10.1.19/include/rijndael.h @@ -0,0 +1,47 @@ +#ifndef RIJNDAEL_INCLUDED +#define RIJNDAEL_INCLUDED + +/* Copyright (c) 2002, 2006 MySQL AB, 2009 Sun Microsystems, Inc. + Use is subject to license terms. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; version 2 of the License. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ + + +/* + rijndael-alg-fst.h + + @version 3.0 (December 2000) + Optimised ANSI C code for the Rijndael cipher (now AES) + @author Vincent Rijmen + @author Antoon Bosselaers + @author Paulo Barreto + + This code is hereby placed in the public domain. + Modified by Peter Zaitsev to fit MySQL coding style. + */ + +#define AES_MAXKC (256/32) +#define AES_MAXKB (256/8) +#define AES_MAXNR 14 + +int rijndaelKeySetupEnc(uint32 rk[/*4*(Nr + 1)*/], const uint8 cipherKey[], + int keyBits); +int rijndaelKeySetupDec(uint32 rk[/*4*(Nr + 1)*/], const uint8 cipherKey[], + int keyBits); +void rijndaelEncrypt(const uint32 rk[/*4*(Nr + 1)*/], int Nr, + const uint8 pt[16], uint8 ct[16]); +void rijndaelDecrypt(const uint32 rk[/*4*(Nr + 1)*/], int Nr, + const uint8 ct[16], uint8 pt[16]); + +#endif /* RIJNDAEL_INCLUDED */ diff --git a/EQ2/source/depends/mariadb-10.1.19/include/service_versions.h b/EQ2/source/depends/mariadb-10.1.19/include/service_versions.h new file mode 100644 index 000000000..0f0990d43 --- /dev/null +++ b/EQ2/source/depends/mariadb-10.1.19/include/service_versions.h @@ -0,0 +1,40 @@ +/* Copyright (c) 2009, 2010, Oracle and/or its affiliates. + Copyright (c) 2012, 2013, Monty Program Ab + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; version 2 of the License. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ + +#ifdef _WIN32 +#define SERVICE_VERSION __declspec(dllexport) void * +#else +#define SERVICE_VERSION void * +#endif + +#define VERSION_debug_sync 0x1000 +#define VERSION_kill_statement 0x1000 + +#define VERSION_my_snprintf 0x0100 +#define VERSION_thd_alloc 0x0100 +#define VERSION_thd_wait 0x0100 +#define VERSION_progress_report 0x0100 +#define VERSION_thd_timezone 0x0100 +#define VERSION_my_sha1 0x0101 +#define VERSION_my_md5 0x0100 +#define VERSION_wsrep 0x0201 +#define VERSION_logger 0x0100 +#define VERSION_thd_autoinc 0x0100 +#define VERSION_thd_error_context 0x0100 +#define VERSION_thd_specifics 0x0100 +#define VERSION_encryption 0x0300 +#define VERSION_encryption_scheme 0x0100 + diff --git a/EQ2/source/depends/mariadb-10.1.19/include/sha1.h b/EQ2/source/depends/mariadb-10.1.19/include/sha1.h new file mode 100644 index 000000000..d927cd26a --- /dev/null +++ b/EQ2/source/depends/mariadb-10.1.19/include/sha1.h @@ -0,0 +1,25 @@ +#ifndef SHA1_INCLUDED +#define SHA1_INCLUDED + +/* Copyright (c) 2013, Monty Program Ab + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; version 2 of the License. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +#include +#define SHA1_HASH_SIZE MY_SHA1_HASH_SIZE +#define compute_sha1_hash(A,B,C) my_sha1(A,B,C) +#define compute_sha1_hash_multi(A,B,C,D,E) my_sha1_multi(A,B,C,D,E,NULL) + +#endif /* SHA__INCLUDED */ diff --git a/EQ2/source/depends/mariadb-10.1.19/include/sha2.h b/EQ2/source/depends/mariadb-10.1.19/include/sha2.h new file mode 100644 index 000000000..737658e9c --- /dev/null +++ b/EQ2/source/depends/mariadb-10.1.19/include/sha2.h @@ -0,0 +1,72 @@ +/* Copyright (c) 2007, 2010, Oracle and/or its affiliates. All rights reserved. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; version 2 of the License. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ + +#ifndef included_sha2_h +#define included_sha2_h + +#include + +#if defined(HAVE_YASSL) || defined(HAVE_OPENSSL) + +# ifdef HAVE_STDDEF_H +# include +# endif + +# ifndef HAVE_YASSL +# include + +# else + +#include "../extra/yassl/taocrypt/include/sha.hpp" + +# ifdef __cplusplus +extern "C" { +# endif + +#ifndef SHA512_DIGEST_LENGTH +#define SHA512_DIGEST_LENGTH TaoCrypt::SHA512::DIGEST_SIZE +#endif + +#ifndef SHA384_DIGEST_LENGTH +#define SHA384_DIGEST_LENGTH TaoCrypt::SHA384::DIGEST_SIZE +#endif + +#ifndef SHA256_DIGEST_LENGTH +#define SHA256_DIGEST_LENGTH TaoCrypt::SHA256::DIGEST_SIZE +#endif + +#ifndef SHA224_DIGEST_LENGTH +#define SHA224_DIGEST_LENGTH TaoCrypt::SHA224::DIGEST_SIZE +#endif + +#define GEN_YASSL_SHA2_BRIDGE(size) \ +unsigned char* SHA##size(const unsigned char *input_ptr, size_t input_length, \ + char unsigned *output_ptr); + +GEN_YASSL_SHA2_BRIDGE(512); +GEN_YASSL_SHA2_BRIDGE(384); +GEN_YASSL_SHA2_BRIDGE(256); +GEN_YASSL_SHA2_BRIDGE(224); + +#undef GEN_YASSL_SHA2_BRIDGE + +# ifdef __cplusplus +} +# endif + +# endif /* HAVE_YASSL */ + +#endif /* HAVE_OPENSSL || HAVE_YASSL */ +#endif /* included_sha2_h */ diff --git a/EQ2/source/depends/mariadb-10.1.19/include/sql_common.h b/EQ2/source/depends/mariadb-10.1.19/include/sql_common.h new file mode 100644 index 000000000..39b8ce185 --- /dev/null +++ b/EQ2/source/depends/mariadb-10.1.19/include/sql_common.h @@ -0,0 +1,132 @@ +#ifndef SQL_COMMON_INCLUDED +#define SQL_COMMON_INCLUDED +/* Copyright (c) 2003, 2012, Oracle and/or its affiliates. + Copyright (c) 2010, 2012, Monty Program Ab + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; version 2 of the License. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ + +#ifdef __cplusplus +extern "C" { +#endif + +#include +#include + +extern const char *unknown_sqlstate; +extern const char *cant_connect_sqlstate; +extern const char *not_error_sqlstate; + + +struct mysql_async_context; + +struct st_mysql_options_extention { + char *plugin_dir; + char *default_auth; + char *ssl_crl; /* PEM CRL file */ + char *ssl_crlpath; /* PEM directory of CRL-s? */ + void (*report_progress)(const MYSQL *mysql, + unsigned int stage, + unsigned int max_stage, + double progress, + const char *proc_info, + uint proc_info_length); + struct mysql_async_context *async_context; + HASH connection_attributes; + size_t connection_attributes_length; +}; + +typedef struct st_mysql_methods +{ + my_bool (*read_query_result)(MYSQL *mysql); + my_bool (*advanced_command)(MYSQL *mysql, + enum enum_server_command command, + const unsigned char *header, + unsigned long header_length, + const unsigned char *arg, + unsigned long arg_length, + my_bool skip_check, + MYSQL_STMT *stmt); + MYSQL_DATA *(*read_rows)(MYSQL *mysql,MYSQL_FIELD *mysql_fields, + unsigned int fields); + MYSQL_RES * (*use_result)(MYSQL *mysql); + void (*fetch_lengths)(unsigned long *to, + MYSQL_ROW column, unsigned int field_count); + void (*flush_use_result)(MYSQL *mysql, my_bool flush_all_results); + int (*read_change_user_result)(MYSQL *mysql); +#if !defined(MYSQL_SERVER) || defined(EMBEDDED_LIBRARY) + MYSQL_FIELD * (*list_fields)(MYSQL *mysql); + my_bool (*read_prepare_result)(MYSQL *mysql, MYSQL_STMT *stmt); + int (*stmt_execute)(MYSQL_STMT *stmt); + int (*read_binary_rows)(MYSQL_STMT *stmt); + int (*unbuffered_fetch)(MYSQL *mysql, char **row); + void (*free_embedded_thd)(MYSQL *mysql); + const char *(*read_statistics)(MYSQL *mysql); + my_bool (*next_result)(MYSQL *mysql); + int (*read_rows_from_cursor)(MYSQL_STMT *stmt); +#endif +} MYSQL_METHODS; + +#define simple_command(mysql, command, arg, length, skip_check) \ + (*(mysql)->methods->advanced_command)(mysql, command, 0, \ + 0, arg, length, skip_check, NULL) +#define stmt_command(mysql, command, arg, length, stmt) \ + (*(mysql)->methods->advanced_command)(mysql, command, 0, \ + 0, arg, length, 1, stmt) + +extern CHARSET_INFO *default_client_charset_info; +MYSQL_FIELD *unpack_fields(MYSQL *mysql, MYSQL_DATA *data,MEM_ROOT *alloc, + uint fields, my_bool default_value, + uint server_capabilities); +void free_rows(MYSQL_DATA *cur); +void free_old_query(MYSQL *mysql); +void end_server(MYSQL *mysql); +my_bool mysql_reconnect(MYSQL *mysql); +void mysql_read_default_options(struct st_mysql_options *options, + const char *filename,const char *group); +my_bool +cli_advanced_command(MYSQL *mysql, enum enum_server_command command, + const unsigned char *header, ulong header_length, + const unsigned char *arg, ulong arg_length, + my_bool skip_check, MYSQL_STMT *stmt); +unsigned long cli_safe_read(MYSQL *mysql); +void net_clear_error(NET *net); +void set_stmt_errmsg(MYSQL_STMT *stmt, NET *net); +void set_stmt_error(MYSQL_STMT *stmt, int errcode, const char *sqlstate, + const char *err); +void set_mysql_error(MYSQL *mysql, int errcode, const char *sqlstate); +void set_mysql_extended_error(MYSQL *mysql, int errcode, const char *sqlstate, + const char *format, ...); + +/* client side of the pluggable authentication */ +struct st_plugin_vio_info; +void mpvio_info(Vio *vio, struct st_plugin_vio_info *info); +int run_plugin_auth(MYSQL *mysql, char *data, uint data_len, + const char *data_plugin, const char *db); +int mysql_client_plugin_init(); +void mysql_client_plugin_deinit(); +struct st_mysql_client_plugin; +extern struct st_mysql_client_plugin *mysql_client_builtins[]; +uchar * send_client_connect_attrs(MYSQL *mysql, uchar *buf); + +/* Non-blocking client API. */ +void my_context_install_suspend_resume_hook(struct mysql_async_context *b, + void (*)(my_bool, void *), void *); + +#ifdef __cplusplus +} +#endif + +#define protocol_41(A) ((A)->server_capabilities & CLIENT_PROTOCOL_41) + +#endif /* SQL_COMMON_INCLUDED */ diff --git a/EQ2/source/depends/mariadb-10.1.19/include/sslopt-case.h b/EQ2/source/depends/mariadb-10.1.19/include/sslopt-case.h new file mode 100644 index 000000000..4a8c65948 --- /dev/null +++ b/EQ2/source/depends/mariadb-10.1.19/include/sslopt-case.h @@ -0,0 +1,39 @@ +#ifndef SSLOPT_CASE_INCLUDED +#define SSLOPT_CASE_INCLUDED + +/* Copyright (c) 2000, 2010, Oracle and/or its affiliates. All rights reserved. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; version 2 of the License. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ + +#if defined(HAVE_OPENSSL) && !defined(EMBEDDED_LIBRARY) + case OPT_SSL_KEY: + case OPT_SSL_CERT: + case OPT_SSL_CA: + case OPT_SSL_CAPATH: + case OPT_SSL_CIPHER: + case OPT_SSL_CRL: + case OPT_SSL_CRLPATH: + /* + Enable use of SSL if we are using any ssl option + One can disable SSL later by using --skip-ssl or --ssl=0 + */ + opt_use_ssl= 1; + /* crl has no effect in yaSSL */ +#ifdef HAVE_YASSL + opt_ssl_crl= NULL; + opt_ssl_crlpath= NULL; +#endif + break; +#endif +#endif /* SSLOPT_CASE_INCLUDED */ diff --git a/EQ2/source/depends/mariadb-10.1.19/include/sslopt-longopts.h b/EQ2/source/depends/mariadb-10.1.19/include/sslopt-longopts.h new file mode 100644 index 000000000..e605d0134 --- /dev/null +++ b/EQ2/source/depends/mariadb-10.1.19/include/sslopt-longopts.h @@ -0,0 +1,57 @@ +#ifndef SSLOPT_LONGOPTS_INCLUDED +#define SSLOPT_LONGOPTS_INCLUDED + +/* + Copyright (c) 2000, 2010, Oracle and/or its affiliates. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; version 2 of the License. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ + +#if defined(HAVE_OPENSSL) && !defined(EMBEDDED_LIBRARY) + + {"ssl", OPT_SSL_SSL, + "Enable SSL for connection (automatically enabled with other flags).", + &opt_use_ssl, &opt_use_ssl, 0, GET_BOOL, OPT_ARG, 0, 0, 0, 0, 0, 0}, + {"ssl-ca", OPT_SSL_CA, + "CA file in PEM format (check OpenSSL docs, implies --ssl).", + &opt_ssl_ca, &opt_ssl_ca, 0, GET_STR, REQUIRED_ARG, + 0, 0, 0, 0, 0, 0}, + {"ssl-capath", OPT_SSL_CAPATH, + "CA directory (check OpenSSL docs, implies --ssl).", + &opt_ssl_capath, &opt_ssl_capath, 0, GET_STR, REQUIRED_ARG, + 0, 0, 0, 0, 0, 0}, + {"ssl-cert", OPT_SSL_CERT, "X509 cert in PEM format (implies --ssl).", + &opt_ssl_cert, &opt_ssl_cert, 0, GET_STR, REQUIRED_ARG, + 0, 0, 0, 0, 0, 0}, + {"ssl-cipher", OPT_SSL_CIPHER, "SSL cipher to use (implies --ssl).", + &opt_ssl_cipher, &opt_ssl_cipher, 0, GET_STR, REQUIRED_ARG, + 0, 0, 0, 0, 0, 0}, + {"ssl-key", OPT_SSL_KEY, "X509 key in PEM format (implies --ssl).", + &opt_ssl_key, &opt_ssl_key, 0, GET_STR, REQUIRED_ARG, + 0, 0, 0, 0, 0, 0}, + {"ssl-crl", OPT_SSL_KEY, "Certificate revocation list (implies --ssl).", + &opt_ssl_crl, &opt_ssl_crl, 0, GET_STR, REQUIRED_ARG, + 0, 0, 0, 0, 0, 0}, + {"ssl-crlpath", OPT_SSL_KEY, + "Certificate revocation list path (implies --ssl).", + &opt_ssl_crlpath, &opt_ssl_crlpath, 0, GET_STR, REQUIRED_ARG, + 0, 0, 0, 0, 0, 0}, +#ifdef MYSQL_CLIENT + {"ssl-verify-server-cert", OPT_SSL_VERIFY_SERVER_CERT, + "Verify server's \"Common Name\" in its cert against hostname used " + "when connecting. This option is disabled by default.", + &opt_ssl_verify_server_cert, &opt_ssl_verify_server_cert, + 0, GET_BOOL, OPT_ARG, 0, 0, 0, 0, 0, 0}, +#endif +#endif /* HAVE_OPENSSL */ +#endif /* SSLOPT_LONGOPTS_INCLUDED */ diff --git a/EQ2/source/depends/mariadb-10.1.19/include/sslopt-vars.h b/EQ2/source/depends/mariadb-10.1.19/include/sslopt-vars.h new file mode 100644 index 000000000..8e669760f --- /dev/null +++ b/EQ2/source/depends/mariadb-10.1.19/include/sslopt-vars.h @@ -0,0 +1,37 @@ +#ifndef SSLOPT_VARS_INCLUDED +#define SSLOPT_VARS_INCLUDED + +/* Copyright (c) 2000, 2010, Oracle and/or its affiliates. All rights reserved. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; version 2 of the License. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ + +#if defined(HAVE_OPENSSL) && !defined(EMBEDDED_LIBRARY) +#ifdef SSL_VARS_NOT_STATIC +#define SSL_STATIC +#else +#define SSL_STATIC static +#endif +SSL_STATIC my_bool opt_use_ssl = 0; +SSL_STATIC char *opt_ssl_ca = 0; +SSL_STATIC char *opt_ssl_capath = 0; +SSL_STATIC char *opt_ssl_cert = 0; +SSL_STATIC char *opt_ssl_cipher = 0; +SSL_STATIC char *opt_ssl_key = 0; +SSL_STATIC char *opt_ssl_crl = 0; +SSL_STATIC char *opt_ssl_crlpath = 0; +#ifdef MYSQL_CLIENT +SSL_STATIC my_bool opt_ssl_verify_server_cert= 0; +#endif +#endif +#endif /* SSLOPT_VARS_INCLUDED */ diff --git a/EQ2/source/depends/mariadb-10.1.19/include/t_ctype.h b/EQ2/source/depends/mariadb-10.1.19/include/t_ctype.h new file mode 100644 index 000000000..7db3b7bbf --- /dev/null +++ b/EQ2/source/depends/mariadb-10.1.19/include/t_ctype.h @@ -0,0 +1,255 @@ +/* Copyright (C) 2000 MySQL AB + Use is subject to license terms + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; version 2 of the License. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA */ + +/* + Copyright (C) 1998, 1999 by Pruet Boonma, all rights reserved. + Copyright (C) 1998 by Theppitak Karoonboonyanan, all rights reserved. + Permission to use, copy, modify, distribute and sell this software + and its documentation for any purpose is hereby granted without fee, + provided that the above copyright notice appear in all copies. + Smaphan Raruenrom and Pruet Boonma makes no representations about + the suitability of this software for any purpose. It is provided + "as is" without express or implied warranty. +*/ + +/* LC_COLLATE category + Level information */ + +#ifndef _t_ctype_h +#define _t_ctype_h + +#define TOT_LEVELS 5 +#define LAST_LEVEL 4 /* TOT_LEVELS - 1 */ + +#define IGNORE 0 + + +/* level 1 symbols & order */ +enum l1_symbols { + L1_08 = TOT_LEVELS, + L1_18, + L1_28, + L1_38, + L1_48, + L1_58, + L1_68, + L1_78, + L1_88, + L1_98, + L1_A8, + L1_B8, + L1_C8, + L1_D8, + L1_E8, + L1_F8, + L1_G8, + L1_H8, + L1_I8, + L1_J8, + L1_K8, + L1_L8, + L1_M8, + L1_N8, + L1_O8, + L1_P8, + L1_Q8, + L1_R8, + L1_S8, + L1_T8, + L1_U8, + L1_V8, + L1_W8, + L1_X8, + L1_Y8, + L1_Z8, + L1_KO_KAI, + L1_KHO_KHAI, + L1_KHO_KHUAT, + L1_KHO_KHWAI, + L1_KHO_KHON, + L1_KHO_RAKHANG, + L1_NGO_NGU, + L1_CHO_CHAN, + L1_CHO_CHING, + L1_CHO_CHANG, + L1_SO_SO, + L1_CHO_CHOE, + L1_YO_YING, + L1_DO_CHADA, + L1_TO_PATAK, + L1_THO_THAN, + L1_THO_NANGMONTHO, + L1_THO_PHUTHAO, + L1_NO_NEN, + L1_DO_DEK, + L1_TO_TAO, + L1_THO_THUNG, + L1_THO_THAHAN, + L1_THO_THONG, + L1_NO_NU, + L1_BO_BAIMAI, + L1_PO_PLA, + L1_PHO_PHUNG, + L1_FO_FA, + L1_PHO_PHAN, + L1_FO_FAN, + L1_PHO_SAMPHAO, + L1_MO_MA, + L1_YO_YAK, + L1_RO_RUA, + L1_RU, + L1_LO_LING, + L1_LU, + L1_WO_WAEN, + L1_SO_SALA, + L1_SO_RUSI, + L1_SO_SUA, + L1_HO_HIP, + L1_LO_CHULA, + L1_O_ANG, + L1_HO_NOKHUK, + L1_NKHIT, + L1_SARA_A, + L1_MAI_HAN_AKAT, + L1_SARA_AA, + L1_SARA_AM, + L1_SARA_I, + L1_SARA_II, + L1_SARA_UE, + L1_SARA_UEE, + L1_SARA_U, + L1_SARA_UU, + L1_SARA_E, + L1_SARA_AE, + L1_SARA_O, + L1_SARA_AI_MAIMUAN, + L1_SARA_AI_MAIMALAI +}; + +/* level 2 symbols & order */ +enum l2_symbols { + L2_BLANK = TOT_LEVELS, + L2_THAII, + L2_YAMAK, + L2_PINTHU, + L2_GARAN, + L2_TYKHU, + L2_TONE1, + L2_TONE2, + L2_TONE3, + L2_TONE4 +}; + +/* level 3 symbols & order */ +enum l3_symbols { + L3_BLANK = TOT_LEVELS, + L3_SPACE, + L3_NB_SACE, + L3_LOW_LINE, + L3_HYPHEN, + L3_COMMA, + L3_SEMICOLON, + L3_COLON, + L3_EXCLAMATION, + L3_QUESTION, + L3_SOLIDUS, + L3_FULL_STOP, + L3_PAIYAN_NOI, + L3_MAI_YAMOK, + L3_GRAVE, + L3_CIRCUMFLEX, + L3_TILDE, + L3_APOSTROPHE, + L3_QUOTATION, + L3_L_PARANTHESIS, + L3_L_BRACKET, + L3_L_BRACE, + L3_R_BRACE, + L3_R_BRACKET, + L3_R_PARENTHESIS, + L3_AT, + L3_BAHT, + L3_DOLLAR, + L3_FONGMAN, + L3_ANGKHANKHU, + L3_KHOMUT, + L3_ASTERISK, + L3_BK_SOLIDUS, + L3_AMPERSAND, + L3_NUMBER, + L3_PERCENT, + L3_PLUS, + L3_LESS_THAN, + L3_EQUAL, + L3_GREATER_THAN, + L3_V_LINE +}; + +/* level 4 symbols & order */ +enum l4_symbols { + L4_BLANK = TOT_LEVELS, + L4_MIN, + L4_CAP, + L4_EXT +}; + +enum level_symbols { + L_UPRUPR = TOT_LEVELS, + L_UPPER, + L_MIDDLE, + L_LOWER +}; + +#define _is(c) (t_ctype[(c)][LAST_LEVEL]) +#define _level 8 +#define _consnt 16 +#define _ldvowel 32 +#define _fllwvowel 64 +#define _uprvowel 128 +#define _lwrvowel 256 +#define _tone 512 +#define _diacrt1 1024 +#define _diacrt2 2048 +#define _combine 4096 +#define _stone 8192 +#define _tdig 16384 +#define _rearvowel (_fllwvowel | _uprvowel | _lwrvowel) +#define _diacrt (_diacrt1 | _diacrt2) +#define levelof(c) ( _is(c) & _level ) +#define isthai(c) ( (c) >= 128 ) +#define istalpha(c) ( _is(c) & (_consnt|_ldvowel|_rearvowel|\ + _tone|_diacrt1|_diacrt2) ) +#define isconsnt(c) ( _is(c) & _consnt ) +#define isldvowel(c) ( _is(c) & _ldvowel ) +#define isfllwvowel(c) ( _is(c) & _fllwvowel ) +#define ismidvowel(c) ( _is(c) & (_ldvowel|_fllwvowel) ) +#define isuprvowel(c) ( _is(c) & _uprvowel ) +#define islwrvowel(c) ( _is(c) & _lwrvowel ) +#define isuprlwrvowel(c) ( _is(c) & (_lwrvowel | _uprvowel)) +#define isrearvowel(c) ( _is(c) & _rearvowel ) +#define isvowel(c) ( _is(c) & (_ldvowel|_rearvowel) ) +#define istone(c) ( _is(c) & _tone ) +#define isunldable(c) ( _is(c) & (_rearvowel|_tone|_diacrt1|_diacrt2) ) +#define iscombinable(c) ( _is(c) & _combine ) +#define istdigit(c) ( _is(c) & _tdig ) +#define isstone(c) ( _is(c) & _stone ) +#define isdiacrt1(c) ( _is(c) & _diacrt1) +#define isdiacrt2(c) ( _is(c) & _diacrt2) +#define isdiacrt(c) ( _is(c) & _diacrt) + +/* Function prototype called by sql/field.cc */ +void ThNormalize(uchar* ptr, uint field_length, const uchar* from, uint length); + +#endif diff --git a/EQ2/source/depends/mariadb-10.1.19/include/thr_alarm.h b/EQ2/source/depends/mariadb-10.1.19/include/thr_alarm.h new file mode 100644 index 000000000..8de70d4cd --- /dev/null +++ b/EQ2/source/depends/mariadb-10.1.19/include/thr_alarm.h @@ -0,0 +1,115 @@ +/* Copyright (c) 2000, 2011, Oracle and/or its affiliates. All rights reserved. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; version 2 of the License. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ + +/* Prototypes when using thr_alarm library functions */ + +#ifndef _thr_alarm_h +#define _thr_alarm_h +#ifdef __cplusplus +extern "C" { +#endif + +#ifndef USE_ALARM_THREAD +#define USE_ONE_SIGNAL_HAND /* One must call process_alarm */ +#endif +#ifdef HAVE_rts_threads +#undef USE_ONE_SIGNAL_HAND +#define USE_ALARM_THREAD +#define THR_SERVER_ALARM SIGUSR1 +#else +#define THR_SERVER_ALARM SIGALRM +#endif + +typedef struct st_alarm_info +{ + time_t next_alarm_time; + uint active_alarms; + uint max_used_alarms; +} ALARM_INFO; + +void thr_alarm_info(ALARM_INFO *info); +extern my_bool my_disable_thr_alarm; + +#ifdef _WIN32 +#define DONT_USE_THR_ALARM +#endif +#if defined(DONT_USE_THR_ALARM) + +#define USE_ALARM_THREAD +#undef USE_ONE_SIGNAL_HAND + +typedef my_bool thr_alarm_t; +typedef my_bool ALARM; + +#define thr_alarm_init(A) (*(A))=0 +#define thr_alarm_in_use(A) (*(A) != 0) +#define thr_end_alarm(A) +#define thr_alarm(A,B,C) ((*(A)=1)-1) +/* The following should maybe be (*(A)) */ +#define thr_got_alarm(A) 0 +#define init_thr_alarm(A) +#define thr_alarm_kill(A) +#define resize_thr_alarm(N) +#define end_thr_alarm(A) + +#else +#if defined(__WIN__) +typedef struct st_thr_alarm_entry +{ + UINT_PTR crono; +} thr_alarm_entry; + +#else /* System with posix threads */ + +typedef int thr_alarm_entry; + +#define thr_got_alarm(thr_alarm) (**(thr_alarm)) + +#endif /* __WIN__ */ + +typedef thr_alarm_entry* thr_alarm_t; + +typedef struct st_alarm { + time_t expire_time; + thr_alarm_entry alarmed; /* set when alarm is due */ + pthread_t thread; + my_thread_id thread_id; + uint index_in_queue; + my_bool malloced; +} ALARM; + +extern uint thr_client_alarm; +extern pthread_t alarm_thread; + +#define thr_alarm_init(A) (*(A))=0 +#define thr_alarm_in_use(A) (*(A)!= 0) +void init_thr_alarm(uint max_alarm); +void resize_thr_alarm(uint max_alarms); +my_bool thr_alarm(thr_alarm_t *alarmed, uint sec, ALARM *buff); +void thr_alarm_kill(my_thread_id thread_id); +void thr_end_alarm(thr_alarm_t *alarmed); +void end_thr_alarm(my_bool free_structures); +sig_handler process_alarm(int); +#ifndef thr_got_alarm +my_bool thr_got_alarm(thr_alarm_t *alrm); +#endif + + +#endif /* DONT_USE_THR_ALARM */ + +#ifdef __cplusplus +} +#endif /* __cplusplus */ +#endif /* _thr_alarm_h */ diff --git a/EQ2/source/depends/mariadb-10.1.19/include/thr_lock.h b/EQ2/source/depends/mariadb-10.1.19/include/thr_lock.h new file mode 100644 index 000000000..bc916b8ec --- /dev/null +++ b/EQ2/source/depends/mariadb-10.1.19/include/thr_lock.h @@ -0,0 +1,180 @@ +/* Copyright (c) 2000, 2010, Oracle and/or its affiliates. All rights reserved. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; version 2 of the License. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ + +/* For use with thr_lock:s */ + +#ifndef _thr_lock_h +#define _thr_lock_h +#ifdef __cplusplus +extern "C" { +#endif +#include +#include + +struct st_thr_lock; +extern ulong locks_immediate,locks_waited ; + +/* + Important: if a new lock type is added, a matching lock description + must be added to sql_test.cc's lock_descriptions array. +*/ +enum thr_lock_type { TL_IGNORE=-1, + TL_UNLOCK, /* UNLOCK ANY LOCK */ + /* + Parser only! At open_tables() becomes TL_READ or + TL_READ_NO_INSERT depending on the binary log format + (SBR/RBR) and on the table category (log table). + Used for tables that are read by statements which + modify tables. + */ + TL_READ_DEFAULT, + TL_READ, /* Read lock */ + TL_READ_WITH_SHARED_LOCKS, + /* High prior. than TL_WRITE. Allow concurrent insert */ + TL_READ_HIGH_PRIORITY, + /* READ, Don't allow concurrent insert */ + TL_READ_NO_INSERT, + /* + Write lock, but allow other threads to read / write. + Used by BDB tables in MySQL to mark that someone is + reading/writing to the table. + */ + TL_WRITE_ALLOW_WRITE, + /* + WRITE lock used by concurrent insert. Will allow + READ, if one could use concurrent insert on table. + */ + TL_WRITE_CONCURRENT_INSERT, + /* Write used by INSERT DELAYED. Allows READ locks */ + TL_WRITE_DELAYED, + /* + parser only! Late bound low_priority flag. + At open_tables() becomes thd->update_lock_default. + */ + TL_WRITE_DEFAULT, + /* WRITE lock that has lower priority than TL_READ */ + TL_WRITE_LOW_PRIORITY, + /* Normal WRITE lock */ + TL_WRITE, + /* Abort new lock request with an error */ + TL_WRITE_ONLY}; + +enum enum_thr_lock_result { THR_LOCK_SUCCESS= 0, THR_LOCK_ABORTED= 1, + THR_LOCK_WAIT_TIMEOUT= 2, THR_LOCK_DEADLOCK= 3 }; + + +/* Priority for locks */ +#define THR_LOCK_LATE_PRIV 1 /* For locks to be merged with org lock */ +#define THR_LOCK_MERGE_PRIV 2 /* For merge tables */ + +#define THR_UNLOCK_UPDATE_STATUS 1 + +extern ulong max_write_lock_count; +extern my_bool thr_lock_inited; +extern enum thr_lock_type thr_upgraded_concurrent_insert_lock; + +/* + A description of the thread which owns the lock. The address + of an instance of this structure is used to uniquely identify the thread. +*/ + +typedef struct st_thr_lock_info +{ + pthread_t thread; + my_thread_id thread_id; + void *mysql_thd; // THD pointer +} THR_LOCK_INFO; + + +typedef struct st_thr_lock_data { + THR_LOCK_INFO *owner; + struct st_thr_lock_data *next,**prev; + struct st_thr_lock *lock; + mysql_cond_t *cond; + void *status_param; /* Param to status functions */ + void *debug_print_param; /* For error messages */ + struct PSI_table *m_psi; + enum thr_lock_type type; + enum thr_lock_type org_type; /* Cache for MariaDB */ + uint priority; +} THR_LOCK_DATA; + +struct st_lock_list { + THR_LOCK_DATA *data,**last; +}; + +typedef struct st_thr_lock { + LIST list; + mysql_mutex_t mutex; + struct st_lock_list read_wait; + struct st_lock_list read; + struct st_lock_list write_wait; + struct st_lock_list write; + /* write_lock_count is incremented for write locks and reset on read locks */ + ulong write_lock_count; + uint read_no_write_count; + void (*get_status)(void*, my_bool); /* When one gets a lock */ + void (*copy_status)(void*,void*); + void (*update_status)(void*); /* Before release of write */ + void (*restore_status)(void*); /* Before release of read */ + my_bool (*start_trans)(void*); /* When all locks are taken */ + my_bool (*check_status)(void *); + void (*fix_status)(void *, void *);/* For thr_merge_locks() */ + const char *name; /* Used for error reporting */ + my_bool allow_multiple_concurrent_insert; +} THR_LOCK; + + +extern LIST *thr_lock_thread_list; +extern mysql_mutex_t THR_LOCK_lock; + +my_bool init_thr_lock(void); /* Must be called once/thread */ +void thr_lock_info_init(THR_LOCK_INFO *info); +void thr_lock_init(THR_LOCK *lock); +void thr_lock_delete(THR_LOCK *lock); +void thr_lock_data_init(THR_LOCK *lock,THR_LOCK_DATA *data, + void *status_param); +void thr_unlock(THR_LOCK_DATA *data, uint unlock_flags); +enum enum_thr_lock_result thr_multi_lock(THR_LOCK_DATA **data, + uint count, THR_LOCK_INFO *owner, + ulong lock_wait_timeout); +void thr_multi_unlock(THR_LOCK_DATA **data,uint count, uint unlock_flags); +void thr_merge_locks(THR_LOCK_DATA **data, uint org_count, uint new_count); +void thr_abort_locks(THR_LOCK *lock, my_bool upgrade_lock); +my_bool thr_abort_locks_for_thread(THR_LOCK *lock, my_thread_id thread); +void thr_print_locks(void); /* For debugging */ +my_bool thr_upgrade_write_delay_lock(THR_LOCK_DATA *data, + enum thr_lock_type new_lock_type, + ulong lock_wait_timeout); +void thr_downgrade_write_lock(THR_LOCK_DATA *data, + enum thr_lock_type new_lock_type); +my_bool thr_reschedule_write_lock(THR_LOCK_DATA *data, + ulong lock_wait_timeout); +void thr_set_lock_wait_callback(void (*before_wait)(void), + void (*after_wait)(void)); + +#ifdef WITH_WSREP + typedef my_bool (* wsrep_thd_is_brute_force_fun)(void *, my_bool); + typedef int (* wsrep_abort_thd_fun)(void *, void *, my_bool); + typedef int (* wsrep_on_fun)(void *); + void wsrep_thr_lock_init( + wsrep_thd_is_brute_force_fun bf_fun, wsrep_abort_thd_fun abort_fun, + my_bool debug, my_bool convert_LOCK_to_trx, wsrep_on_fun on_fun); +#endif + +#ifdef __cplusplus +} +#endif +#endif /* _thr_lock_h */ diff --git a/EQ2/source/depends/mariadb-10.1.19/include/thr_timer.h b/EQ2/source/depends/mariadb-10.1.19/include/thr_timer.h new file mode 100644 index 000000000..724fdac41 --- /dev/null +++ b/EQ2/source/depends/mariadb-10.1.19/include/thr_timer.h @@ -0,0 +1,45 @@ +/* Copyright (c) 2014 Monty Program Ab + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; version 2 or later of the License. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ + +/* Prototypes when using thr_timer functions */ + +#ifndef THR_TIMER_INCLUDED +#define THR_TIMER_INCLUDED +#ifdef __cplusplus +extern "C" { +#endif + +typedef struct st_timer { + struct timespec expire_time; + my_bool expired; + uint index_in_queue; + void (*func)(void*); + void *func_arg; +} thr_timer_t; + +/* Main functions for library */ +my_bool init_thr_timer(uint init_size_for_timer_queue); +void end_thr_timer(); + +/* Functions for handling one timer */ +void thr_timer_init(thr_timer_t *timer_data, void(*function)(void*), + void *arg); +my_bool thr_timer_settime(thr_timer_t *timer_data, ulonglong microseconds); +void thr_timer_end(thr_timer_t *timer_data); + +#ifdef __cplusplus +} +#endif /* __cplusplus */ +#endif /* THR_TIMER_INCLUDED */ diff --git a/EQ2/source/depends/mariadb-10.1.19/include/thread_pool_priv.h b/EQ2/source/depends/mariadb-10.1.19/include/thread_pool_priv.h new file mode 100644 index 000000000..4270c32c8 --- /dev/null +++ b/EQ2/source/depends/mariadb-10.1.19/include/thread_pool_priv.h @@ -0,0 +1,127 @@ +#error don't use +/* + Copyright (c) 2010, 2014, Oracle and/or its affiliates. All rights reserved. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; version 2 of the License. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +#ifndef THREAD_POOL_PRIV_INCLUDED +#define THREAD_POOL_PRIV_INCLUDED + +/* + The thread pool requires access to some MySQL server error codes, this is + accessed from mysqld_error.h. + We need access to the struct that defines the thread pool plugin interface + which is accessed through scheduler.h. + All accesses to THD variables and functions are defined in this header file. + A thread pool can also use DEBUG_SYNC and must thus include + debug_sync.h + To handle definitions of Information Schema plugins it is also required + to include sql_profile.h and table.h. +*/ +#include /* To get ER_ERROR_ON_READ */ +#define MYSQL_SERVER 1 +#include +#include +#include +#include +#include + +/* Needed to get access to scheduler variables */ +void* thd_get_scheduler_data(THD *thd); +void thd_set_scheduler_data(THD *thd, void *data); +PSI_thread* thd_get_psi(THD *thd); +void thd_set_psi(THD *thd, PSI_thread *psi); + +/* Interface to THD variables and functions */ +void thd_set_killed(THD *thd); +void thd_clear_errors(THD *thd); +void thd_set_thread_stack(THD *thd, char *stack_start); +void thd_lock_thread_count(THD *thd); +void thd_close_connection(THD *thd); +THD *thd_get_current_thd(); +void thd_lock_data(THD *thd); +void thd_unlock_data(THD *thd); +bool thd_is_transaction_active(THD *thd); +int thd_connection_has_data(THD *thd); +void thd_set_net_read_write(THD *thd, uint val); +uint thd_get_net_read_write(THD *thd); +void thd_set_mysys_var(THD *thd, st_my_thread_var *mysys_var); +ulong thd_get_net_wait_timeout(THD *thd); +my_socket thd_get_fd(THD *thd); +int thd_store_globals(THD* thd); + +THD *first_global_thread(); +THD *next_global_thread(THD *thd); + +/* Print to the MySQL error log */ +void sql_print_error(const char *format, ...); + +/* Store a table record */ +bool schema_table_store_record(THD *thd, TABLE *table); + +/* + The thread pool must be able to execute statements using the connection + state in THD object. This is the main objective of the thread pool to + schedule the start of these commands. +*/ +bool do_command(THD *thd); + +/* + The thread pool requires an interface to the connection logic in the + MySQL Server since the thread pool will maintain the event logic on + the TCP connection of the MySQL Server. Thus new connections, dropped + connections will be discovered by the thread pool and it needs to + ensure that the proper MySQL Server logic attached to these events is + executed. +*/ +/* Initialise a new connection handler thread */ +bool init_new_connection_handler_thread(); +/* Set up connection thread before use as execution thread */ +bool setup_connection_thread_globals(THD *thd); +/* Prepare connection as part of connection set-up */ +bool thd_prepare_connection(THD *thd); +/* Release auditing before executing statement */ +void mysql_audit_release(THD *thd); +/* Check if connection is still alive */ +bool thd_is_connection_alive(THD *thd); +/* Close connection with possible error code */ +void close_connection(THD *thd, uint errcode); +/* End the connection before closing it */ +void end_connection(THD *thd); +/* Cleanup the THD object */ +void thd_cleanup(THD *thd); +/* Decrement connection counter */ +void dec_connection_count(); +/* Destroy THD object */ +void delete_thd(THD *thd); + +/* + thread_created is maintained by thread pool when activated since + user threads are created by the thread pool (and also special + threads to maintain the thread pool). This is done through + inc_thread_created. + + max_connections is needed to calculate the maximum number of threads + that is allowed to be started by the thread pool. The method + get_max_connections() gets reference to this variable. + + connection_attrib is the thread attributes for connection threads, + the method get_connection_attrib provides a reference to these + attributes. +*/ +void inc_thread_created(void); +ulong get_max_connections(void); +pthread_attr_t *get_connection_attrib(void); +#endif diff --git a/EQ2/source/depends/mariadb-10.1.19/include/typelib.h b/EQ2/source/depends/mariadb-10.1.19/include/typelib.h new file mode 100644 index 000000000..4504bea4f --- /dev/null +++ b/EQ2/source/depends/mariadb-10.1.19/include/typelib.h @@ -0,0 +1,56 @@ +/* Copyright (c) 2000, 2011, Oracle and/or its affiliates. All rights reserved. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; version 2 of the License. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA */ + + +#ifndef _typelib_h +#define _typelib_h + +#include "my_alloc.h" + +typedef struct st_typelib { /* Different types saved here */ + unsigned int count; /* How many types */ + const char *name; /* Name of typelib */ + const char **type_names; + unsigned int *type_lengths; +} TYPELIB; + +extern my_ulonglong find_typeset(char *x, TYPELIB *typelib,int *error_position); +extern int find_type_with_warning(const char *x, TYPELIB *typelib, + const char *option); +extern int find_type_or_exit(const char *x, TYPELIB *typelib, + const char *option); +#define FIND_TYPE_BASIC 0 +/** makes @c find_type() require the whole name, no prefix */ +#define FIND_TYPE_NO_PREFIX (1 << 0) +/** always implicitely on, so unused, but old code may pass it */ +#define FIND_TYPE_NO_OVERWRITE 0 +/** makes @c find_type() accept a number. Not used either */ +#define FIND_TYPE_ALLOW_NUMBER 0 +/** makes @c find_type() treat ',' and '=' as terminators */ +#define FIND_TYPE_COMMA_TERM (1 << 3) + +extern int find_type(const char *x, const TYPELIB *typelib, unsigned int flags); +extern void make_type(char *to,unsigned int nr,TYPELIB *typelib); +extern const char *get_type(TYPELIB *typelib,unsigned int nr); +extern TYPELIB *copy_typelib(MEM_ROOT *root, TYPELIB *from); + +extern TYPELIB sql_protocol_typelib; + +my_ulonglong find_set_from_flags(const TYPELIB *lib, unsigned int default_name, + my_ulonglong cur_set, my_ulonglong default_set, + const char *str, unsigned int length, + char **err_pos, unsigned int *err_len); + +#endif /* _typelib_h */ diff --git a/EQ2/source/depends/mariadb-10.1.19/include/violite.h b/EQ2/source/depends/mariadb-10.1.19/include/violite.h new file mode 100644 index 000000000..a7165ca91 --- /dev/null +++ b/EQ2/source/depends/mariadb-10.1.19/include/violite.h @@ -0,0 +1,296 @@ +/* Copyright (c) 2000, 2012, Oracle and/or its affiliates. + Copyright (c) 2012 Monty Program Ab + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; version 2 of the License. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ + +/* + * Vio Lite. + * Purpose: include file for Vio that will work with C and C++ + */ + +#ifndef vio_violite_h_ +#define vio_violite_h_ + +#include "my_net.h" /* needed because of struct in_addr */ +#include + +/* Simple vio interface in C; The functions are implemented in violite.c */ + +#ifdef __cplusplus +extern "C" { +#endif /* __cplusplus */ + +#ifdef __cplusplus +typedef struct st_vio Vio; +#endif /* __cplusplus */ + +enum enum_vio_type +{ + VIO_CLOSED, VIO_TYPE_TCPIP, VIO_TYPE_SOCKET, VIO_TYPE_NAMEDPIPE, + VIO_TYPE_SSL, VIO_TYPE_SHARED_MEMORY +}; + +/** + VIO I/O events. +*/ +enum enum_vio_io_event +{ + VIO_IO_EVENT_READ, + VIO_IO_EVENT_WRITE, + VIO_IO_EVENT_CONNECT +}; + +#define VIO_LOCALHOST 1 /* a localhost connection */ +#define VIO_BUFFERED_READ 2 /* use buffered read */ +#define VIO_READ_BUFFER_SIZE 16384 /* size of read buffer */ +#define VIO_DESCRIPTION_SIZE 30 /* size of description */ + +Vio* vio_new(my_socket sd, enum enum_vio_type type, uint flags); +Vio* mysql_socket_vio_new(MYSQL_SOCKET mysql_socket, enum enum_vio_type type, uint flags); +#ifdef __WIN__ +Vio* vio_new_win32pipe(HANDLE hPipe); +Vio* vio_new_win32shared_memory(HANDLE handle_file_map, + HANDLE handle_map, + HANDLE event_server_wrote, + HANDLE event_server_read, + HANDLE event_client_wrote, + HANDLE event_client_read, + HANDLE event_conn_closed); +#else +#define HANDLE void * +#endif /* __WIN__ */ + +void vio_delete(Vio* vio); +int vio_close(Vio* vio); +my_bool vio_reset(Vio* vio, enum enum_vio_type type, + my_socket sd, void *ssl, uint flags); +size_t vio_read(Vio *vio, uchar * buf, size_t size); +size_t vio_read_buff(Vio *vio, uchar * buf, size_t size); +size_t vio_write(Vio *vio, const uchar * buf, size_t size); +int vio_blocking(Vio *vio, my_bool onoff, my_bool *old_mode); +my_bool vio_is_blocking(Vio *vio); +/* setsockopt TCP_NODELAY at IPPROTO_TCP level, when possible */ +int vio_fastsend(Vio *vio); +/* setsockopt SO_KEEPALIVE at SOL_SOCKET level, when possible */ +int vio_keepalive(Vio *vio, my_bool onoff); +/* Whenever we should retry the last read/write operation. */ +my_bool vio_should_retry(Vio *vio); +/* Check that operation was timed out */ +my_bool vio_was_timeout(Vio *vio); +/* Short text description of the socket for those, who are curious.. */ +const char* vio_description(Vio *vio); +/* Return the type of the connection */ +enum enum_vio_type vio_type(Vio* vio); +/* Return last error number */ +int vio_errno(Vio*vio); +/* Get socket number */ +my_socket vio_fd(Vio*vio); +/* Remote peer's address and name in text form */ +my_bool vio_peer_addr(Vio *vio, char *buf, uint16 *port, size_t buflen); +/* Wait for an I/O event notification. */ +int vio_io_wait(Vio *vio, enum enum_vio_io_event event, int timeout); +my_bool vio_is_connected(Vio *vio); +#ifndef DBUG_OFF +ssize_t vio_pending(Vio *vio); +#endif +/* Set timeout for a network operation. */ +extern int vio_timeout(Vio *vio, uint which, int timeout_sec); +extern void vio_set_wait_callback(void (*before_wait)(void), + void (*after_wait)(void)); +/* Connect to a peer. */ +my_bool vio_socket_connect(Vio *vio, struct sockaddr *addr, socklen_t len, + int timeout); + +my_bool vio_get_normalized_ip_string(const struct sockaddr *addr, int addr_length, + char *ip_string, size_t ip_string_size); + +my_bool vio_is_no_name_error(int err_code); + +int vio_getnameinfo(const struct sockaddr *sa, + char *hostname, size_t hostname_size, + char *port, size_t port_size, + int flags); + +#ifdef HAVE_OPENSSL +#include +#if OPENSSL_VERSION_NUMBER < 0x0090700f +#define DES_cblock des_cblock +#define DES_key_schedule des_key_schedule +#define DES_set_key_unchecked(k,ks) des_set_key_unchecked((k),*(ks)) +#define DES_ede3_cbc_encrypt(i,o,l,k1,k2,k3,iv,e) des_ede3_cbc_encrypt((i),(o),(l),*(k1),*(k2),*(k3),(iv),(e)) +#endif +/* apple deprecated openssl in MacOSX Lion */ +#ifdef __APPLE__ +#pragma GCC diagnostic ignored "-Wdeprecated-declarations" +#endif + +#define HEADER_DES_LOCL_H dummy_something +#define YASSL_MYSQL_COMPATIBLE +#ifndef YASSL_PREFIX +#define YASSL_PREFIX +#endif +/* Set yaSSL to use same type as MySQL do for socket handles */ +typedef my_socket YASSL_SOCKET_T; +#define YASSL_SOCKET_T_DEFINED +#include +#include + +#ifdef HAVE_ERR_remove_thread_state +#define ERR_remove_state(X) ERR_remove_thread_state(NULL) +#endif + +enum enum_ssl_init_error +{ + SSL_INITERR_NOERROR= 0, SSL_INITERR_CERT, SSL_INITERR_KEY, + SSL_INITERR_NOMATCH, SSL_INITERR_BAD_PATHS, SSL_INITERR_CIPHERS, + SSL_INITERR_MEMFAIL, SSL_INITERR_DH, SSL_INITERR_LASTERR +}; +const char* sslGetErrString(enum enum_ssl_init_error err); + +struct st_VioSSLFd +{ + SSL_CTX *ssl_context; +}; + +int sslaccept(struct st_VioSSLFd*, Vio *, long timeout, unsigned long *errptr); +int sslconnect(struct st_VioSSLFd*, Vio *, long timeout, unsigned long *errptr); + +struct st_VioSSLFd +*new_VioSSLConnectorFd(const char *key_file, const char *cert_file, + const char *ca_file, const char *ca_path, + const char *cipher, enum enum_ssl_init_error *error, + const char *crl_file, const char *crl_path); +struct st_VioSSLFd +*new_VioSSLAcceptorFd(const char *key_file, const char *cert_file, + const char *ca_file,const char *ca_path, + const char *cipher, enum enum_ssl_init_error *error, + const char *crl_file, const char *crl_path); +void free_vio_ssl_acceptor_fd(struct st_VioSSLFd *fd); +#endif /* HAVE_OPENSSL */ + +void vio_end(void); + +#ifdef __cplusplus +} +#endif + +#if !defined(DONT_MAP_VIO) +#define vio_delete(vio) (vio)->viodelete(vio) +#define vio_errno(vio) (vio)->vioerrno(vio) +#define vio_read(vio, buf, size) ((vio)->read)(vio,buf,size) +#define vio_write(vio, buf, size) ((vio)->write)(vio, buf, size) +#define vio_blocking(vio, set_blocking_mode, old_mode)\ + (vio)->vioblocking(vio, set_blocking_mode, old_mode) +#define vio_is_blocking(vio) (vio)->is_blocking(vio) +#define vio_fastsend(vio) (vio)->fastsend(vio) +#define vio_keepalive(vio, set_keep_alive) (vio)->viokeepalive(vio, set_keep_alive) +#define vio_should_retry(vio) (vio)->should_retry(vio) +#define vio_was_timeout(vio) (vio)->was_timeout(vio) +#define vio_close(vio) ((vio)->vioclose)(vio) +#define vio_shutdown(vio,how) ((vio)->shutdown)(vio,how) +#define vio_peer_addr(vio, buf, prt, buflen) (vio)->peer_addr(vio, buf, prt, buflen) +#define vio_io_wait(vio, event, timeout) (vio)->io_wait(vio, event, timeout) +#define vio_is_connected(vio) (vio)->is_connected(vio) +#endif /* !defined(DONT_MAP_VIO) */ + +#ifdef _WIN32 + +/* shutdown(2) flags */ +#ifndef SHUT_RD +#define SHUT_RD SD_RECEIVE +#endif + +/* + Set thread id for io cancellation (required on Windows XP only, + and should to be removed if XP is no more supported) +*/ + +#define vio_set_thread_id(vio, tid) if(vio) vio->thread_id= tid +#else +#define vio_set_thread_id(vio, tid) +#endif + +/* This enumerator is used in parser - should be always visible */ +enum SSL_type +{ + SSL_TYPE_NOT_SPECIFIED= -1, + SSL_TYPE_NONE, + SSL_TYPE_ANY, + SSL_TYPE_X509, + SSL_TYPE_SPECIFIED +}; + + +/* HFTODO - hide this if we don't want client in embedded server */ +/* This structure is for every connection on both sides */ +struct st_vio +{ + MYSQL_SOCKET mysql_socket; /* Instrumented socket */ + my_bool localhost; /* Are we from localhost? */ + int fcntl_mode; /* Buffered fcntl(sd,F_GETFL) */ + struct sockaddr_storage local; /* Local internet address */ + struct sockaddr_storage remote; /* Remote internet address */ + int addrLen; /* Length of remote address */ + enum enum_vio_type type; /* Type of connection */ + const char *desc; /* String description */ + char *read_buffer; /* buffer for vio_read_buff */ + char *read_pos; /* start of unfetched data in the + read buffer */ + char *read_end; /* end of unfetched data */ + struct mysql_async_context *async_context; /* For non-blocking API */ + int read_timeout; /* Timeout value (ms) for read ops. */ + int write_timeout; /* Timeout value (ms) for write ops. */ + /* function pointers. They are similar for socket/SSL/whatever */ + void (*viodelete)(Vio*); + int (*vioerrno)(Vio*); + size_t (*read)(Vio*, uchar *, size_t); + size_t (*write)(Vio*, const uchar *, size_t); + int (*timeout)(Vio*, uint, my_bool); + int (*vioblocking)(Vio*, my_bool, my_bool *); + my_bool (*is_blocking)(Vio*); + int (*viokeepalive)(Vio*, my_bool); + int (*fastsend)(Vio*); + my_bool (*peer_addr)(Vio*, char *, uint16*, size_t); + void (*in_addr)(Vio*, struct sockaddr_storage*); + my_bool (*should_retry)(Vio*); + my_bool (*was_timeout)(Vio*); + int (*vioclose)(Vio*); + my_bool (*is_connected)(Vio*); + int (*shutdown)(Vio *, int); + my_bool (*has_data) (Vio*); + int (*io_wait)(Vio*, enum enum_vio_io_event, int); + my_bool (*connect)(Vio*, struct sockaddr *, socklen_t, int); +#ifdef HAVE_OPENSSL + void *ssl_arg; +#endif +#ifdef HAVE_SMEM + HANDLE handle_file_map; + char *handle_map; + HANDLE event_server_wrote; + HANDLE event_server_read; + HANDLE event_client_wrote; + HANDLE event_client_read; + HANDLE event_conn_closed; + size_t shared_memory_remain; + char *shared_memory_pos; +#endif /* HAVE_SMEM */ +#ifdef _WIN32 + HANDLE hPipe; + OVERLAPPED overlapped; + DWORD thread_id; /* Used on XP only by vio_shutdown() */ + DWORD read_timeout_ms; + DWORD write_timeout_ms; +#endif +}; +#endif /* vio_violite_h_ */ diff --git a/EQ2/source/depends/mariadb-10.1.19/include/waiting_threads.h b/EQ2/source/depends/mariadb-10.1.19/include/waiting_threads.h new file mode 100644 index 000000000..e17874b96 --- /dev/null +++ b/EQ2/source/depends/mariadb-10.1.19/include/waiting_threads.h @@ -0,0 +1,130 @@ +/* Copyright (C) 2008 MySQL AB, 2008-2009 Sun Microsystems, Inc. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; version 2 of the License. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ + +#ifndef _waiting_threads_h +#define _waiting_threads_h + +#include +#include + +#include + +C_MODE_START + +typedef struct st_wt_resource_id WT_RESOURCE_ID; +typedef struct st_wt_resource WT_RESOURCE; + +typedef struct st_wt_resource_type { + my_bool (*compare)(const void *a, const void *b); + const void *(*make_key)(const WT_RESOURCE_ID *id, uint *len); /* not used */ +} WT_RESOURCE_TYPE; + +struct st_wt_resource_id { + ulonglong value; + const WT_RESOURCE_TYPE *type; +}; +/* the below differs from sizeof(WT_RESOURCE_ID) by the amount of padding */ +#define sizeof_WT_RESOURCE_ID (sizeof(ulonglong)+sizeof(void*)) + +#define WT_WAIT_STATS 24 +#define WT_CYCLE_STATS 32 +extern ulonglong wt_wait_table[WT_WAIT_STATS]; +extern uint32 wt_wait_stats[WT_WAIT_STATS+1]; +extern uint32 wt_cycle_stats[2][WT_CYCLE_STATS+1]; +extern uint32 wt_success_stats; + +typedef struct st_wt_thd { + /* + XXX + there's no protection (mutex) against concurrent access of the + dynarray below. it is assumed that a caller will have it anyway + (not to protect this array but to protect its own - caller's - + data structures), and we'll get it for free. A caller needs to + ensure that a blocker won't release a resource before a blocked + thread starts waiting, which is usually done with a mutex. + + If the above assumption is wrong, we'll need to add a mutex here. + */ + DYNAMIC_ARRAY my_resources; + /* + 'waiting_for' is modified under waiting_for->lock, and only by thd itself + 'waiting_for' is read lock-free (using pinning protocol), but a thd object + can read its own 'waiting_for' without any locks or tricks. + */ + WT_RESOURCE *waiting_for; + LF_PINS *pins; + + /* pointers to values */ + const ulong *timeout_short; + const ulong *deadlock_search_depth_short; + const ulong *timeout_long; + const ulong *deadlock_search_depth_long; + + /* + weight relates to the desirability of a transaction being killed if it's + part of a deadlock. In a deadlock situation transactions with lower weights + are killed first. + + Examples of using the weight to implement different selection strategies: + + 1. Latest + Keep all weights equal. + 2. Random + Assight weights at random. + (variant: modify a weight randomly before every lock request) + 3. Youngest + Set weight to -NOW() + 4. Minimum locks + count locks granted in your lock manager, store the value as a weight + 5. Minimum work + depends on the definition of "work". For example, store the number + of rows modifies in this transaction (or a length of REDO log for a + transaction) as a weight. + + It is only statistically relevant and is not protected by any locks. + */ + ulong volatile weight; + /* + 'killed' is indirectly protected by waiting_for->lock because + a killed thread needs to clear its 'waiting_for' and thus needs a lock. + That is a thread needs an exclusive lock to read 'killed' reliably. + But other threads may change 'killed' from 0 to 1, a shared + lock is enough for that. + */ + my_bool killed; +#ifndef DBUG_OFF + const char *name; +#endif +} WT_THD; + +#define WT_TIMEOUT ETIMEDOUT +#define WT_OK 0 +#define WT_DEADLOCK -1 +#define WT_DEPTH_EXCEEDED -2 +#define WT_FREE_TO_GO -3 + +void wt_init(void); +void wt_end(void); +void wt_thd_lazy_init(WT_THD *, const ulong *, const ulong *, const ulong *, const ulong *); +void wt_thd_destroy(WT_THD *); +int wt_thd_will_wait_for(WT_THD *, WT_THD *, const WT_RESOURCE_ID *); +int wt_thd_cond_timedwait(WT_THD *, mysql_mutex_t *); +void wt_thd_release(WT_THD *, const WT_RESOURCE_ID *); +#define wt_thd_release_all(THD) wt_thd_release((THD), 0) +my_bool wt_resource_id_memcmp(const void *, const void *); + +C_MODE_END + +#endif diff --git a/EQ2/source/depends/mariadb-10.1.19/include/welcome_copyright_notice.h b/EQ2/source/depends/mariadb-10.1.19/include/welcome_copyright_notice.h new file mode 100644 index 000000000..e98918562 --- /dev/null +++ b/EQ2/source/depends/mariadb-10.1.19/include/welcome_copyright_notice.h @@ -0,0 +1,30 @@ +/* Copyright (c) 2011, 2016, Oracle and/or its affiliates. + Copyright (c) 2011, 2016, MariaDB + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; version 2 of the License. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ + +#ifndef _welcome_copyright_notice_h_ +#define _welcome_copyright_notice_h_ + +#define COPYRIGHT_NOTICE_CURRENT_YEAR "2016" + +/* + This define specifies copyright notice which is displayed by every MySQL + program on start, or on help screen. +*/ +#define ORACLE_WELCOME_COPYRIGHT_NOTICE(first_year) \ + "Copyright (c) " first_year ", " COPYRIGHT_NOTICE_CURRENT_YEAR \ + ", Oracle, MariaDB Corporation Ab and others.\n" + +#endif /* _welcome_copyright_notice_h_ */ diff --git a/EQ2/source/depends/mariadb-10.1.19/include/wqueue.h b/EQ2/source/depends/mariadb-10.1.19/include/wqueue.h new file mode 100644 index 000000000..e568ab8e9 --- /dev/null +++ b/EQ2/source/depends/mariadb-10.1.19/include/wqueue.h @@ -0,0 +1,40 @@ +/* + Copyright (c) 2007, 2008, Sun Microsystems, Inc, + Copyright (c) 2011, 2012, Monty Program Ab + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; version 2 of the License. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ + +#ifndef WQUEUE_INCLUDED +#define WQUEUE_INCLUDED + +#include +#include + +/* info about requests in a waiting queue */ +typedef struct st_pagecache_wqueue +{ + struct st_my_thread_var *last_thread; /* circular list of waiting + threads */ +} WQUEUE; + +void wqueue_link_into_queue(WQUEUE *wqueue, struct st_my_thread_var *thread); +void wqueue_unlink_from_queue(WQUEUE *wqueue, struct st_my_thread_var *thread); +void wqueue_add_to_queue(WQUEUE *wqueue, struct st_my_thread_var *thread); +void wqueue_add_and_wait(WQUEUE *wqueue, + struct st_my_thread_var *thread, + mysql_mutex_t *lock); +void wqueue_release_queue(WQUEUE *wqueue); +void wqueue_release_one_locktype_from_queue(WQUEUE *wqueue); + +#endif diff --git a/EQ2/source/depends/mariadb-10.1.19/include/wsrep.h b/EQ2/source/depends/mariadb-10.1.19/include/wsrep.h new file mode 100644 index 000000000..0f5455c8d --- /dev/null +++ b/EQ2/source/depends/mariadb-10.1.19/include/wsrep.h @@ -0,0 +1,60 @@ +/* Copyright 2014 Codership Oy & SkySQL Ab + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; version 2 of the License. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ + +#include + +#ifndef WSREP_INCLUDED +#define WSREP_INCLUDED + +#ifdef WITH_WSREP +#define IF_WSREP(A,B) A +#define DBUG_ASSERT_IF_WSREP(A) DBUG_ASSERT(A) + +#define WSREP_MYSQL_DB (char *)"mysql" +#define WSREP_TO_ISOLATION_BEGIN(db_, table_, table_list_) \ + if (WSREP_ON && WSREP(thd) && wsrep_to_isolation_begin(thd, db_, table_, table_list_)) \ + goto error; + +#define WSREP_TO_ISOLATION_END \ + if (WSREP_ON && (WSREP(thd) || (thd && thd->wsrep_exec_mode==TOTAL_ORDER))) \ + wsrep_to_isolation_end(thd); + +/* + Checks if lex->no_write_to_binlog is set for statements that use LOCAL or + NO_WRITE_TO_BINLOG. +*/ +#define WSREP_TO_ISOLATION_BEGIN_WRTCHK(db_, table_, table_list_) \ + if (WSREP(thd) && !thd->lex->no_write_to_binlog \ + && wsrep_to_isolation_begin(thd, db_, table_, table_list_)) goto error; + +#define WSREP_DEBUG(...) \ + if (wsrep_debug) WSREP_LOG(sql_print_information, ##__VA_ARGS__) +#define WSREP_INFO(...) WSREP_LOG(sql_print_information, ##__VA_ARGS__) +#define WSREP_WARN(...) WSREP_LOG(sql_print_warning, ##__VA_ARGS__) +#define WSREP_ERROR(...) WSREP_LOG(sql_print_error, ##__VA_ARGS__) + +#else +#define IF_WSREP(A,B) B +#define DBUG_ASSERT_IF_WSREP(A) +#define WSREP_DEBUG(...) +#define WSREP_INFO(...) +#define WSREP_WARN(...) +#define WSREP_ERROR(...) +#define WSREP_TO_ISOLATION_BEGIN(db_, table_, table_list_) +#define WSREP_TO_ISOLATION_END +#define WSREP_TO_ISOLATION_BEGIN_WRTCHK(db_, table_, table_list_) +#endif + +#endif /* WSERP_INCLUDED */ diff --git a/EQ2/source/depends/mysql-5.1.45-win32/include/config-win.h b/EQ2/source/depends/mysql-5.1.45-win32/include/config-win.h new file mode 100644 index 000000000..da9b1fc00 --- /dev/null +++ b/EQ2/source/depends/mysql-5.1.45-win32/include/config-win.h @@ -0,0 +1,412 @@ +/* Copyright 2000-2008 MySQL AB, 2008 Sun Microsystems, Inc. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; version 2 of the License. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ + +/* Defines for Win32 to make it compatible for MySQL */ + +#define BIG_TABLES + +#if defined(_MSC_VER) && _MSC_VER >= 1400 +/* Avoid endless warnings about sprintf() etc. being unsafe. */ +#define _CRT_SECURE_NO_DEPRECATE 1 +#endif + +#include +#include +#include +#include +#include + +#define HAVE_SMEM 1 + +#if defined(_WIN64) || defined(WIN64) +#define SYSTEM_TYPE "Win64" +#elif defined(_WIN32) || defined(WIN32) +#define SYSTEM_TYPE "Win32" +#else +#define SYSTEM_TYPE "Windows" +#endif + +#if defined(_M_IA64) +#define MACHINE_TYPE "ia64" +#elif defined(_M_IX86) +#define MACHINE_TYPE "ia32" +#elif defined(_M_ALPHA) +#define MACHINE_TYPE "axp" +#else +#define MACHINE_TYPE "unknown" /* Define to machine type name */ +#endif + +#if !(defined(_WIN64) || defined(WIN64)) +#ifndef _WIN32 +#define _WIN32 /* Compatible with old source */ +#endif +#ifndef __WIN32__ +#define __WIN32__ +#endif +#endif /* _WIN64 */ +#ifndef __WIN__ +#define __WIN__ /* To make it easier in VC++ */ +#endif + +#ifndef MAX_INDEXES +#define MAX_INDEXES 64 +#endif + +/* File and lock constants */ +#define O_SHARE 0x1000 /* Open file in sharing mode */ +#ifdef __BORLANDC__ +#define F_RDLCK LK_NBLCK /* read lock */ +#define F_WRLCK LK_NBRLCK /* write lock */ +#define F_UNLCK LK_UNLCK /* remove lock(s) */ +#else +#define F_RDLCK _LK_NBLCK /* read lock */ +#define F_WRLCK _LK_NBRLCK /* write lock */ +#define F_UNLCK _LK_UNLCK /* remove lock(s) */ +#endif + +#define F_EXCLUSIVE 1 /* We have only exclusive locking */ +#define F_TO_EOF (INT_MAX32/2) /* size for lock of all file */ +#define F_OK 0 /* parameter to access() */ +#define W_OK 2 + +#define S_IROTH S_IREAD /* for my_lib */ + +#ifdef __BORLANDC__ +#define FILE_BINARY O_BINARY /* my_fopen in binary mode */ +#define O_TEMPORARY 0 +#define O_SHORT_LIVED 0 +#define SH_DENYNO _SH_DENYNO +#else +#define O_BINARY _O_BINARY /* compability with older style names */ +#define FILE_BINARY _O_BINARY /* my_fopen in binary mode */ +#define O_TEMPORARY _O_TEMPORARY +#define O_SHORT_LIVED _O_SHORT_LIVED +#define SH_DENYNO _SH_DENYNO +#endif +#define NO_OPEN_3 /* For my_create() */ + +#define SIGQUIT SIGTERM /* No SIGQUIT */ + +#undef _REENTRANT /* Crashes something for win32 */ +#undef SAFE_MUTEX /* Can't be used on windows */ + +#if defined(_MSC_VER) && _MSC_VER >= 1310 +#define LL(A) A##ll +#define ULL(A) A##ull +#else +#define LL(A) ((__int64) A) +#define ULL(A) ((unsigned __int64) A) +#endif + +#define LONGLONG_MIN LL(0x8000000000000000) +#define LONGLONG_MAX LL(0x7FFFFFFFFFFFFFFF) +#define ULONGLONG_MAX ULL(0xFFFFFFFFFFFFFFFF) + +/* Type information */ + +#if !defined(HAVE_UINT) +#undef HAVE_UINT +#define HAVE_UINT +typedef unsigned short ushort; +typedef unsigned int uint; +#endif /* !defined(HAVE_UINT) */ + +typedef unsigned __int64 ulonglong; /* Microsofts 64 bit types */ +typedef __int64 longlong; +#ifndef HAVE_SIGSET_T +typedef int sigset_t; +#endif +#define longlong_defined +/* + off_t should not be __int64 because of conflicts in header files; + Use my_off_t or os_off_t instead +*/ +#ifndef HAVE_OFF_T +typedef long off_t; +#endif +typedef __int64 os_off_t; +#ifdef _WIN64 +typedef UINT_PTR rf_SetTimer; +#else +#ifndef HAVE_SIZE_T +typedef unsigned int size_t; +#endif +typedef uint rf_SetTimer; +#endif + +#define Socket_defined +#define my_socket SOCKET +#define SIGPIPE SIGINT +#define RETQSORTTYPE void +#define QSORT_TYPE_IS_VOID +#define RETSIGTYPE void +#define SOCKET_SIZE_TYPE int +#define my_socket_defined +#define byte_defined +#define HUGE_PTR +#define STDCALL __stdcall /* Used by libmysql.dll */ +#define isnan(X) _isnan(X) +#define finite(X) _finite(X) + +#ifndef MYSQL_CLIENT_NO_THREADS +#define THREAD +#endif +#define VOID_SIGHANDLER +#define SIZEOF_CHAR 1 +#define SIZEOF_INT 4 +#define SIZEOF_LONG 4 +#define SIZEOF_LONG_LONG 8 +#define SIZEOF_OFF_T 8 +#ifdef _WIN64 +#define SIZEOF_CHARP 8 +#else +#define SIZEOF_CHARP 4 +#endif +#define HAVE_BROKEN_NETINET_INCLUDES +#ifdef __NT__ +#define HAVE_NAMED_PIPE /* We can only create pipes on NT */ +#endif + +/* ERROR is defined in wingdi.h */ +#undef ERROR + +/* We need to close files to break connections on shutdown */ +#ifndef SIGNAL_WITH_VIO_CLOSE +#define SIGNAL_WITH_VIO_CLOSE +#endif + +/* All windows servers should support .sym files */ +#undef USE_SYMDIR +#define USE_SYMDIR + +/* If LOAD DATA LOCAL INFILE should be enabled by default */ +#define ENABLED_LOCAL_INFILE 1 + +/* If query profiling should be enabled by default */ +#define ENABLED_PROFILING 1 + +/* Convert some simple functions to Posix */ + +#define my_sigset(A,B) signal((A),(B)) +#define finite(A) _finite(A) +#define sleep(A) Sleep((A)*1000) +#define popen(A,B) _popen((A),(B)) +#define pclose(A) _pclose(A) + +#ifndef __BORLANDC__ +#define access(A,B) _access(A,B) +#endif + +#if !defined(__cplusplus) +#define inline __inline +#endif /* __cplusplus */ + +#ifdef _WIN64 +#define ulonglong2double(A) ((double) (ulonglong) (A)) +#define my_off_t2double(A) ((double) (my_off_t) (A)) + +#else +inline double ulonglong2double(ulonglong value) +{ + longlong nr=(longlong) value; + if (nr >= 0) + return (double) nr; + return (18446744073709551616.0 + (double) nr); +} +#define my_off_t2double(A) ulonglong2double(A) +#endif /* _WIN64 */ + +inline ulonglong double2ulonglong(double d) +{ + double t= d - (double) 0x8000000000000000ULL; + + if (t >= 0) + return ((ulonglong) t) + 0x8000000000000000ULL; + return (ulonglong) d; +} + +#if SIZEOF_OFF_T > 4 +#define lseek(A,B,C) _lseeki64((A),(longlong) (B),(C)) +#define tell(A) _telli64(A) +#endif + +#define STACK_DIRECTION -1 + +/* Difference between GetSystemTimeAsFileTime() and now() */ +#define OFFSET_TO_EPOCH ULL(116444736000000000) + +#define HAVE_PERROR +#define HAVE_VFPRINT +#define HAVE_RENAME /* Have rename() as function */ +#define HAVE_BINARY_STREAMS /* Have "b" flag in streams */ +#define HAVE_LONG_JMP /* Have long jump function */ +#define HAVE_LOCKING /* have locking() call */ +#define HAVE_ERRNO_AS_DEFINE /* errno is a define */ +#define HAVE_STDLIB /* everything is include in this file */ +#define HAVE_MEMCPY +#define HAVE_MEMMOVE +#define HAVE_GETCWD +#define HAVE_TELL +#define HAVE_TZNAME +#define HAVE_PUTENV +#define HAVE_SELECT +#define HAVE_SETLOCALE +#define HAVE_SOCKET /* Giangi */ +#define HAVE_FLOAT_H +#define HAVE_LIMITS_H +#define HAVE_STDDEF_H +#define NO_FCNTL_NONBLOCK /* No FCNTL */ +#define HAVE_ALLOCA +#define HAVE_STRPBRK +#define HAVE_STRSTR +#define HAVE_COMPRESS +#define HAVE_CREATESEMAPHORE +#define HAVE_ISNAN +#define HAVE_FINITE +#define HAVE_QUERY_CACHE +#define SPRINTF_RETURNS_INT +#define HAVE_SETFILEPOINTER +#define HAVE_VIO_READ_BUFF +#if defined(_MSC_VER) && _MSC_VER >= 1400 +/* strnlen() appeared in Studio 2005 */ +#define HAVE_STRNLEN +#endif +#define HAVE_WINSOCK2 + +#define strcasecmp stricmp +#define strncasecmp strnicmp + +#ifndef __NT__ +#undef FILE_SHARE_DELETE +#define FILE_SHARE_DELETE 0 /* Not implemented on Win 98/ME */ +#endif + +#ifdef NOT_USED +#define HAVE_SNPRINTF /* Gave link error */ +#define _snprintf snprintf +#endif + +#ifdef _MSC_VER +#define HAVE_LDIV /* The optimizer breaks in zortech for ldiv */ +#define HAVE_ANSI_INCLUDE +#define HAVE_SYS_UTIME_H +#define HAVE_STRTOUL +#endif +#define my_reinterpret_cast(A) reinterpret_cast +#define my_const_cast(A) const_cast + + +/* MYSQL OPTIONS */ + +#ifdef _CUSTOMCONFIG_ +#include +#else +#ifndef CMAKE_CONFIGD +#define DEFAULT_MYSQL_HOME "c:\\mysql" +#define MYSQL_DATADIR "c:\\mysql\\data" +#define PACKAGE "mysql" +#define DEFAULT_BASEDIR "C:\\" +#define SHAREDIR "share" +#define DEFAULT_CHARSET_HOME "C:/mysql/" +#endif +#endif +#ifndef DEFAULT_HOME_ENV +#define DEFAULT_HOME_ENV MYSQL_HOME +#endif +#ifndef DEFAULT_GROUP_SUFFIX_ENV +#define DEFAULT_GROUP_SUFFIX_ENV MYSQL_GROUP_SUFFIX +#endif + +/* File name handling */ + +#define FN_LIBCHAR '\\' +#define FN_ROOTDIR "\\" +#define FN_DEVCHAR ':' +#define FN_NETWORK_DRIVES /* Uses \\ to indicate network drives */ +#define FN_NO_CASE_SENCE /* Files are not case-sensitive */ +#define OS_FILE_LIMIT 2048 + +#define DO_NOT_REMOVE_THREAD_WRAPPERS +#define thread_safe_increment(V,L) InterlockedIncrement((long*) &(V)) +#define thread_safe_decrement(V,L) InterlockedDecrement((long*) &(V)) +/* The following is only used for statistics, so it should be good enough */ +#ifdef __NT__ /* This should also work on Win98 but .. */ +#define thread_safe_add(V,C,L) InterlockedExchangeAdd((long*) &(V),(C)) +#define thread_safe_sub(V,C,L) InterlockedExchangeAdd((long*) &(V),-(long) (C)) +#endif + +#define shared_memory_buffer_length 16000 +#define default_shared_memory_base_name "MYSQL" + +#define HAVE_SPATIAL 1 +#define HAVE_RTREE_KEYS 1 + +#define HAVE_OPENSSL 1 +#define HAVE_YASSL 1 + +#define COMMUNITY_SERVER 1 +#define ENABLED_PROFILING 1 + +/* + Our Windows binaries include all character sets which MySQL supports. + Any changes to the available character sets must also go into + config/ac-macros/character_sets.m4 +*/ + +#define MYSQL_DEFAULT_CHARSET_NAME "latin1" +#define MYSQL_DEFAULT_COLLATION_NAME "latin1_swedish_ci" + +#define USE_MB 1 +#define USE_MB_IDENT 1 +#define USE_STRCOLL 1 + +#define HAVE_CHARSET_armscii8 +#define HAVE_CHARSET_ascii +#define HAVE_CHARSET_big5 1 +#define HAVE_CHARSET_cp1250 1 +#define HAVE_CHARSET_cp1251 +#define HAVE_CHARSET_cp1256 +#define HAVE_CHARSET_cp1257 +#define HAVE_CHARSET_cp850 +#define HAVE_CHARSET_cp852 +#define HAVE_CHARSET_cp866 +#define HAVE_CHARSET_cp932 1 +#define HAVE_CHARSET_dec8 +#define HAVE_CHARSET_eucjpms 1 +#define HAVE_CHARSET_euckr 1 +#define HAVE_CHARSET_gb2312 1 +#define HAVE_CHARSET_gbk 1 +#define HAVE_CHARSET_geostd8 +#define HAVE_CHARSET_greek +#define HAVE_CHARSET_hebrew +#define HAVE_CHARSET_hp8 +#define HAVE_CHARSET_keybcs2 +#define HAVE_CHARSET_koi8r +#define HAVE_CHARSET_koi8u +#define HAVE_CHARSET_latin1 1 +#define HAVE_CHARSET_latin2 1 +#define HAVE_CHARSET_latin5 +#define HAVE_CHARSET_latin7 +#define HAVE_CHARSET_macce +#define HAVE_CHARSET_macroman +#define HAVE_CHARSET_sjis 1 +#define HAVE_CHARSET_swe7 +#define HAVE_CHARSET_tis620 1 +#define HAVE_CHARSET_ucs2 1 +#define HAVE_CHARSET_ujis 1 +#define HAVE_CHARSET_utf8 1 + +#define HAVE_UCA_COLLATIONS 1 +#define HAVE_BOOL 1 diff --git a/EQ2/source/depends/mysql-5.1.45-win32/include/decimal.h b/EQ2/source/depends/mysql-5.1.45-win32/include/decimal.h new file mode 100644 index 000000000..530ed9e17 --- /dev/null +++ b/EQ2/source/depends/mysql-5.1.45-win32/include/decimal.h @@ -0,0 +1,107 @@ +/* Copyright (C) 2000 MySQL AB + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; version 2 of the License. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ + +#ifndef _decimal_h +#define _decimal_h + +typedef enum +{TRUNCATE=0, HALF_EVEN, HALF_UP, CEILING, FLOOR} + decimal_round_mode; +typedef int32 decimal_digit_t; + +typedef struct st_decimal_t { + int intg, frac, len; + my_bool sign; + decimal_digit_t *buf; +} decimal_t; + +int internal_str2dec(const char *from, decimal_t *to, char **end, + my_bool fixed); +int decimal2string(decimal_t *from, char *to, int *to_len, + int fixed_precision, int fixed_decimals, + char filler); +int decimal2ulonglong(decimal_t *from, ulonglong *to); +int ulonglong2decimal(ulonglong from, decimal_t *to); +int decimal2longlong(decimal_t *from, longlong *to); +int longlong2decimal(longlong from, decimal_t *to); +int decimal2double(decimal_t *from, double *to); +int double2decimal(double from, decimal_t *to); +int decimal_actual_fraction(decimal_t *from); +int decimal2bin(decimal_t *from, uchar *to, int precision, int scale); +int bin2decimal(const uchar *from, decimal_t *to, int precision, int scale); + +int decimal_size(int precision, int scale); +int decimal_bin_size(int precision, int scale); +int decimal_result_size(decimal_t *from1, decimal_t *from2, char op, + int param); + +int decimal_intg(decimal_t *from); +int decimal_add(decimal_t *from1, decimal_t *from2, decimal_t *to); +int decimal_sub(decimal_t *from1, decimal_t *from2, decimal_t *to); +int decimal_cmp(decimal_t *from1, decimal_t *from2); +int decimal_mul(decimal_t *from1, decimal_t *from2, decimal_t *to); +int decimal_div(decimal_t *from1, decimal_t *from2, decimal_t *to, + int scale_incr); +int decimal_mod(decimal_t *from1, decimal_t *from2, decimal_t *to); +int decimal_round(decimal_t *from, decimal_t *to, int new_scale, + decimal_round_mode mode); +int decimal_is_zero(decimal_t *from); +void max_decimal(int precision, int frac, decimal_t *to); + +#define string2decimal(A,B,C) internal_str2dec((A), (B), (C), 0) +#define string2decimal_fixed(A,B,C) internal_str2dec((A), (B), (C), 1) + +/* set a decimal_t to zero */ + +#define decimal_make_zero(dec) do { \ + (dec)->buf[0]=0; \ + (dec)->intg=1; \ + (dec)->frac=0; \ + (dec)->sign=0; \ + } while(0) + +/* + returns the length of the buffer to hold string representation + of the decimal (including decimal dot, possible sign and \0) +*/ + +#define decimal_string_size(dec) (((dec)->intg ? (dec)->intg : 1) + \ + (dec)->frac + ((dec)->frac > 0) + 2) + +/* negate a decimal */ +#define decimal_neg(dec) do { (dec)->sign^=1; } while(0) + +/* + conventions: + + decimal_smth() == 0 -- everything's ok + decimal_smth() <= 1 -- result is usable, but precision loss is possible + decimal_smth() <= 2 -- result can be unusable, most significant digits + could've been lost + decimal_smth() > 2 -- no result was generated +*/ + +#define E_DEC_OK 0 +#define E_DEC_TRUNCATED 1 +#define E_DEC_OVERFLOW 2 +#define E_DEC_DIV_ZERO 4 +#define E_DEC_BAD_NUM 8 +#define E_DEC_OOM 16 + +#define E_DEC_ERROR 31 +#define E_DEC_FATAL_ERROR 30 + +#endif + diff --git a/EQ2/source/depends/mysql-5.1.45-win32/include/errmsg.h b/EQ2/source/depends/mysql-5.1.45-win32/include/errmsg.h new file mode 100644 index 000000000..a6d8c770d --- /dev/null +++ b/EQ2/source/depends/mysql-5.1.45-win32/include/errmsg.h @@ -0,0 +1,102 @@ +/* Copyright (C) 2000 MySQL AB + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; version 2 of the License. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ + +/* Error messages for MySQL clients */ +/* (Error messages for the daemon are in sql/share/errmsg.txt) */ + +#ifdef __cplusplus +extern "C" { +#endif +void init_client_errs(void); +void finish_client_errs(void); +extern const char *client_errors[]; /* Error messages */ +#ifdef __cplusplus +} +#endif + +#define CR_MIN_ERROR 2000 /* For easier client code */ +#define CR_MAX_ERROR 2999 +#if !defined(ER) +#define ER(X) client_errors[(X)-CR_MIN_ERROR] +#endif +#define CLIENT_ERRMAP 2 /* Errormap used by my_error() */ + +/* Do not add error numbers before CR_ERROR_FIRST. */ +/* If necessary to add lower numbers, change CR_ERROR_FIRST accordingly. */ +#define CR_ERROR_FIRST 2000 /*Copy first error nr.*/ +#define CR_UNKNOWN_ERROR 2000 +#define CR_SOCKET_CREATE_ERROR 2001 +#define CR_CONNECTION_ERROR 2002 +#define CR_CONN_HOST_ERROR 2003 +#define CR_IPSOCK_ERROR 2004 +#define CR_UNKNOWN_HOST 2005 +#define CR_SERVER_GONE_ERROR 2006 +#define CR_VERSION_ERROR 2007 +#define CR_OUT_OF_MEMORY 2008 +#define CR_WRONG_HOST_INFO 2009 +#define CR_LOCALHOST_CONNECTION 2010 +#define CR_TCP_CONNECTION 2011 +#define CR_SERVER_HANDSHAKE_ERR 2012 +#define CR_SERVER_LOST 2013 +#define CR_COMMANDS_OUT_OF_SYNC 2014 +#define CR_NAMEDPIPE_CONNECTION 2015 +#define CR_NAMEDPIPEWAIT_ERROR 2016 +#define CR_NAMEDPIPEOPEN_ERROR 2017 +#define CR_NAMEDPIPESETSTATE_ERROR 2018 +#define CR_CANT_READ_CHARSET 2019 +#define CR_NET_PACKET_TOO_LARGE 2020 +#define CR_EMBEDDED_CONNECTION 2021 +#define CR_PROBE_SLAVE_STATUS 2022 +#define CR_PROBE_SLAVE_HOSTS 2023 +#define CR_PROBE_SLAVE_CONNECT 2024 +#define CR_PROBE_MASTER_CONNECT 2025 +#define CR_SSL_CONNECTION_ERROR 2026 +#define CR_MALFORMED_PACKET 2027 +#define CR_WRONG_LICENSE 2028 + +/* new 4.1 error codes */ +#define CR_NULL_POINTER 2029 +#define CR_NO_PREPARE_STMT 2030 +#define CR_PARAMS_NOT_BOUND 2031 +#define CR_DATA_TRUNCATED 2032 +#define CR_NO_PARAMETERS_EXISTS 2033 +#define CR_INVALID_PARAMETER_NO 2034 +#define CR_INVALID_BUFFER_USE 2035 +#define CR_UNSUPPORTED_PARAM_TYPE 2036 + +#define CR_SHARED_MEMORY_CONNECTION 2037 +#define CR_SHARED_MEMORY_CONNECT_REQUEST_ERROR 2038 +#define CR_SHARED_MEMORY_CONNECT_ANSWER_ERROR 2039 +#define CR_SHARED_MEMORY_CONNECT_FILE_MAP_ERROR 2040 +#define CR_SHARED_MEMORY_CONNECT_MAP_ERROR 2041 +#define CR_SHARED_MEMORY_FILE_MAP_ERROR 2042 +#define CR_SHARED_MEMORY_MAP_ERROR 2043 +#define CR_SHARED_MEMORY_EVENT_ERROR 2044 +#define CR_SHARED_MEMORY_CONNECT_ABANDONED_ERROR 2045 +#define CR_SHARED_MEMORY_CONNECT_SET_ERROR 2046 +#define CR_CONN_UNKNOW_PROTOCOL 2047 +#define CR_INVALID_CONN_HANDLE 2048 +#define CR_SECURE_AUTH 2049 +#define CR_FETCH_CANCELED 2050 +#define CR_NO_DATA 2051 +#define CR_NO_STMT_METADATA 2052 +#define CR_NO_RESULT_SET 2053 +#define CR_NOT_IMPLEMENTED 2054 +#define CR_SERVER_LOST_EXTENDED 2055 +#define CR_STMT_CLOSED 2056 +#define CR_NEW_STMT_METADATA 2057 +#define CR_ERROR_LAST /*Copy last error nr:*/ 2057 +/* Add error numbers before CR_ERROR_LAST and change it accordingly. */ + diff --git a/EQ2/source/depends/mysql-5.1.45-win32/include/keycache.h b/EQ2/source/depends/mysql-5.1.45-win32/include/keycache.h new file mode 100644 index 000000000..a6005bae8 --- /dev/null +++ b/EQ2/source/depends/mysql-5.1.45-win32/include/keycache.h @@ -0,0 +1,143 @@ +/* Copyright (C) 2003 MySQL AB + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; version 2 of the License. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ + +/* Key cache variable structures */ + +#ifndef _keycache_h +#define _keycache_h +C_MODE_START + +/* declare structures that is used by st_key_cache */ + +struct st_block_link; +typedef struct st_block_link BLOCK_LINK; +struct st_keycache_page; +typedef struct st_keycache_page KEYCACHE_PAGE; +struct st_hash_link; +typedef struct st_hash_link HASH_LINK; + +/* info about requests in a waiting queue */ +typedef struct st_keycache_wqueue +{ + struct st_my_thread_var *last_thread; /* circular list of waiting threads */ +} KEYCACHE_WQUEUE; + +#define CHANGED_BLOCKS_HASH 128 /* must be power of 2 */ + +/* + The key cache structure + It also contains read-only statistics parameters. +*/ + +typedef struct st_key_cache +{ + my_bool key_cache_inited; + my_bool in_resize; /* true during resize operation */ + my_bool resize_in_flush; /* true during flush of resize operation */ + my_bool can_be_used; /* usage of cache for read/write is allowed */ + size_t key_cache_mem_size; /* specified size of the cache memory */ + uint key_cache_block_size; /* size of the page buffer of a cache block */ + ulong min_warm_blocks; /* min number of warm blocks; */ + ulong age_threshold; /* age threshold for hot blocks */ + ulonglong keycache_time; /* total number of block link operations */ + uint hash_entries; /* max number of entries in the hash table */ + int hash_links; /* max number of hash links */ + int hash_links_used; /* number of hash links currently used */ + int disk_blocks; /* max number of blocks in the cache */ + ulong blocks_used; /* maximum number of concurrently used blocks */ + ulong blocks_unused; /* number of currently unused blocks */ + ulong blocks_changed; /* number of currently dirty blocks */ + ulong warm_blocks; /* number of blocks in warm sub-chain */ + ulong cnt_for_resize_op; /* counter to block resize operation */ + long blocks_available; /* number of blocks available in the LRU chain */ + HASH_LINK **hash_root; /* arr. of entries into hash table buckets */ + HASH_LINK *hash_link_root; /* memory for hash table links */ + HASH_LINK *free_hash_list; /* list of free hash links */ + BLOCK_LINK *free_block_list; /* list of free blocks */ + BLOCK_LINK *block_root; /* memory for block links */ + uchar HUGE_PTR *block_mem; /* memory for block buffers */ + BLOCK_LINK *used_last; /* ptr to the last block of the LRU chain */ + BLOCK_LINK *used_ins; /* ptr to the insertion block in LRU chain */ + pthread_mutex_t cache_lock; /* to lock access to the cache structure */ + KEYCACHE_WQUEUE resize_queue; /* threads waiting during resize operation */ + /* + Waiting for a zero resize count. Using a queue for symmetry though + only one thread can wait here. + */ + KEYCACHE_WQUEUE waiting_for_resize_cnt; + KEYCACHE_WQUEUE waiting_for_hash_link; /* waiting for a free hash link */ + KEYCACHE_WQUEUE waiting_for_block; /* requests waiting for a free block */ + BLOCK_LINK *changed_blocks[CHANGED_BLOCKS_HASH]; /* hash for dirty file bl.*/ + BLOCK_LINK *file_blocks[CHANGED_BLOCKS_HASH]; /* hash for other file bl.*/ + + /* + The following variables are and variables used to hold parameters for + initializing the key cache. + */ + + ulonglong param_buff_size; /* size the memory allocated for the cache */ + ulong param_block_size; /* size of the blocks in the key cache */ + ulong param_division_limit; /* min. percentage of warm blocks */ + ulong param_age_threshold; /* determines when hot block is downgraded */ + + /* Statistics variables. These are reset in reset_key_cache_counters(). */ + ulong global_blocks_changed; /* number of currently dirty blocks */ + ulonglong global_cache_w_requests;/* number of write requests (write hits) */ + ulonglong global_cache_write; /* number of writes from cache to files */ + ulonglong global_cache_r_requests;/* number of read requests (read hits) */ + ulonglong global_cache_read; /* number of reads from files to cache */ + + int blocks; /* max number of blocks in the cache */ + my_bool in_init; /* Set to 1 in MySQL during init/resize */ +} KEY_CACHE; + +/* The default key cache */ +extern KEY_CACHE dflt_key_cache_var, *dflt_key_cache; + +extern int init_key_cache(KEY_CACHE *keycache, uint key_cache_block_size, + size_t use_mem, uint division_limit, + uint age_threshold); +extern int resize_key_cache(KEY_CACHE *keycache, uint key_cache_block_size, + size_t use_mem, uint division_limit, + uint age_threshold); +extern void change_key_cache_param(KEY_CACHE *keycache, uint division_limit, + uint age_threshold); +extern uchar *key_cache_read(KEY_CACHE *keycache, + File file, my_off_t filepos, int level, + uchar *buff, uint length, + uint block_length,int return_buffer); +extern int key_cache_insert(KEY_CACHE *keycache, + File file, my_off_t filepos, int level, + uchar *buff, uint length); +extern int key_cache_write(KEY_CACHE *keycache, + File file, my_off_t filepos, int level, + uchar *buff, uint length, + uint block_length,int force_write); +extern int flush_key_blocks(KEY_CACHE *keycache, + int file, enum flush_type type); +extern void end_key_cache(KEY_CACHE *keycache, my_bool cleanup); + +/* Functions to handle multiple key caches */ +extern my_bool multi_keycache_init(void); +extern void multi_keycache_free(void); +extern KEY_CACHE *multi_key_cache_search(uchar *key, uint length); +extern my_bool multi_key_cache_set(const uchar *key, uint length, + KEY_CACHE *key_cache); +extern void multi_key_cache_change(KEY_CACHE *old_data, + KEY_CACHE *new_data); +extern int reset_key_cache_counters(const char *name, + KEY_CACHE *key_cache); +C_MODE_END +#endif /* _keycache_h */ diff --git a/EQ2/source/depends/mysql-5.1.45-win32/include/libmysql.def b/EQ2/source/depends/mysql-5.1.45-win32/include/libmysql.def new file mode 100644 index 000000000..81f86dc87 --- /dev/null +++ b/EQ2/source/depends/mysql-5.1.45-win32/include/libmysql.def @@ -0,0 +1,153 @@ +LIBRARY LIBMYSQL +VERSION 6.0 +EXPORTS + _dig_vec_lower + _dig_vec_upper + bmove_upp + delete_dynamic + free_defaults + getopt_compare_strings + getopt_ull_limit_value + handle_options + init_dynamic_array + insert_dynamic + int2str + is_prefix + list_add + list_delete + load_defaults + my_end + my_getopt_print_errors + my_init + my_malloc + my_memdup + my_no_flags_free + my_path + mysql_get_parameters + my_print_help + my_print_variables + my_realloc + my_strdup + mysql_thread_end + mysql_thread_init + myodbc_remove_escape + mysql_affected_rows + mysql_autocommit + mysql_stmt_bind_param + mysql_stmt_bind_result + mysql_change_user + mysql_character_set_name + mysql_close + mysql_commit + mysql_data_seek + mysql_debug + mysql_dump_debug_info + mysql_eof + mysql_errno + mysql_error + mysql_escape_string + mysql_hex_string + mysql_stmt_execute + mysql_stmt_fetch + mysql_stmt_fetch_column + mysql_fetch_field + mysql_fetch_field_direct + mysql_fetch_fields + mysql_fetch_lengths + mysql_fetch_row + mysql_field_count + mysql_field_seek + mysql_field_tell + mysql_free_result + mysql_get_client_info + mysql_get_host_info + mysql_get_proto_info + mysql_get_server_info + mysql_get_client_version + mysql_get_ssl_cipher + mysql_info + mysql_init + mysql_insert_id + mysql_kill + mysql_set_server_option + mysql_list_dbs + mysql_list_fields + mysql_list_processes + mysql_list_tables + mysql_more_results + mysql_next_result + mysql_num_fields + mysql_num_rows + mysql_options + mysql_stmt_param_count + mysql_stmt_param_metadata + mysql_ping + mysql_stmt_result_metadata + mysql_query + mysql_read_query_result + mysql_real_connect + mysql_real_escape_string + mysql_real_query + mysql_refresh + mysql_rollback + mysql_row_seek + mysql_row_tell + mysql_select_db + mysql_stmt_send_long_data + mysql_send_query + mysql_shutdown + mysql_ssl_set + mysql_stat + mysql_stmt_affected_rows + mysql_stmt_close + mysql_stmt_reset + mysql_stmt_data_seek + mysql_stmt_errno + mysql_stmt_error + mysql_stmt_free_result + mysql_stmt_num_rows + mysql_stmt_row_seek + mysql_stmt_row_tell + mysql_stmt_store_result + mysql_store_result + mysql_thread_id + mysql_thread_safe + mysql_use_result + mysql_warning_count + mysql_stmt_sqlstate + mysql_sqlstate + mysql_get_server_version + set_dynamic + strcend + strcont + strdup_root + strfill + strinstr + strmake + strmov + strxmov + mysql_stmt_prepare + mysql_stmt_init + mysql_stmt_insert_id + mysql_stmt_attr_get + mysql_stmt_attr_set + mysql_stmt_field_count + client_errors + mysql_set_local_infile_default + mysql_set_local_infile_handler + mysql_disable_reads_from_master + mysql_disable_rpl_parse + mysql_enable_reads_from_master + mysql_enable_rpl_parse + mysql_master_query + mysql_rpl_parse_enabled + mysql_rpl_probe + mysql_rpl_query_type + mysql_slave_query + mysql_embedded + mysql_server_init + mysql_server_end + mysql_set_character_set + mysql_get_character_set_info + get_defaults_options + modify_defaults_file diff --git a/EQ2/source/depends/mysql-5.1.45-win32/include/libmysqld.def b/EQ2/source/depends/mysql-5.1.45-win32/include/libmysqld.def new file mode 100644 index 000000000..047cfe0fe --- /dev/null +++ b/EQ2/source/depends/mysql-5.1.45-win32/include/libmysqld.def @@ -0,0 +1,110 @@ +LIBRARY LIBMYSQLD +DESCRIPTION 'MySQL 5.1 Embedded Server Library' +VERSION 5.1 +EXPORTS + mysql_thread_end + mysql_thread_init + myodbc_remove_escape + mysql_affected_rows + mysql_autocommit + mysql_change_user + mysql_character_set_name + mysql_close + mysql_commit + mysql_data_seek + mysql_debug + mysql_disable_rpl_parse + mysql_dump_debug_info + mysql_enable_rpl_parse + mysql_eof + mysql_errno + mysql_error + mysql_escape_string + mysql_hex_string + mysql_fetch_field + mysql_fetch_field_direct + mysql_fetch_fields + mysql_fetch_lengths + mysql_fetch_row + mysql_field_count + mysql_field_seek + mysql_field_tell + mysql_free_result + mysql_get_character_set_info + mysql_get_client_info + mysql_get_host_info + mysql_get_proto_info + mysql_get_server_info + mysql_get_client_version + mysql_get_ssl_cipher + mysql_info + mysql_init + mysql_insert_id + mysql_kill + mysql_set_server_option + mysql_list_dbs + mysql_list_fields + mysql_list_processes + mysql_list_tables + mysql_more_results + mysql_next_result + mysql_num_fields + mysql_num_rows + mysql_options + mysql_ping + mysql_query + mysql_read_query_result + mysql_real_connect + mysql_real_escape_string + mysql_real_query + mysql_refresh + mysql_rollback + mysql_row_seek + mysql_row_tell + mysql_rpl_parse_enabled + mysql_rpl_probe + mysql_select_db + mysql_send_query + mysql_shutdown + mysql_ssl_set + mysql_stat + mysql_store_result + mysql_sqlstate + mysql_thread_id + mysql_thread_safe + mysql_use_result + mysql_warning_count + mysql_server_end + mysql_server_init + get_tty_password + mysql_get_server_version + mysql_set_character_set + mysql_sqlstate + mysql_get_parameters + mysql_stmt_bind_param + mysql_stmt_bind_result + mysql_stmt_execute + mysql_stmt_fetch + mysql_stmt_fetch_column + mysql_stmt_param_count + mysql_stmt_param_metadata + mysql_stmt_result_metadata + mysql_stmt_send_long_data + mysql_stmt_affected_rows + mysql_stmt_close + mysql_stmt_reset + mysql_stmt_data_seek + mysql_stmt_errno + mysql_stmt_error + mysql_stmt_free_result + mysql_stmt_num_rows + mysql_stmt_row_seek + mysql_stmt_row_tell + mysql_stmt_store_result + mysql_stmt_sqlstate + mysql_stmt_prepare + mysql_stmt_init + mysql_stmt_insert_id + mysql_stmt_attr_get + mysql_stmt_attr_set + mysql_stmt_field_count diff --git a/EQ2/source/depends/mysql-5.1.45-win32/include/m_ctype.h b/EQ2/source/depends/mysql-5.1.45-win32/include/m_ctype.h new file mode 100644 index 000000000..451c8db54 --- /dev/null +++ b/EQ2/source/depends/mysql-5.1.45-win32/include/m_ctype.h @@ -0,0 +1,549 @@ +/* Copyright (C) 2000 MySQL AB + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; version 2 of the License. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ + +/* + A better inplementation of the UNIX ctype(3) library. + Notes: my_global.h should be included before ctype.h +*/ + +#ifndef _m_ctype_h +#define _m_ctype_h + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +#define MY_CS_NAME_SIZE 32 +#define MY_CS_CTYPE_TABLE_SIZE 257 +#define MY_CS_TO_LOWER_TABLE_SIZE 256 +#define MY_CS_TO_UPPER_TABLE_SIZE 256 +#define MY_CS_SORT_ORDER_TABLE_SIZE 256 +#define MY_CS_TO_UNI_TABLE_SIZE 256 + +#define CHARSET_DIR "charsets/" + +#define my_wc_t ulong + +typedef struct unicase_info_st +{ + uint16 toupper; + uint16 tolower; + uint16 sort; +} MY_UNICASE_INFO; + + +extern MY_UNICASE_INFO *my_unicase_default[256]; +extern MY_UNICASE_INFO *my_unicase_turkish[256]; + +typedef struct uni_ctype_st +{ + uchar pctype; + uchar *ctype; +} MY_UNI_CTYPE; + +extern MY_UNI_CTYPE my_uni_ctype[256]; + +/* wm_wc and wc_mb return codes */ +#define MY_CS_ILSEQ 0 /* Wrong by sequence: wb_wc */ +#define MY_CS_ILUNI 0 /* Cannot encode Unicode to charset: wc_mb */ +#define MY_CS_TOOSMALL -101 /* Need at least one byte: wc_mb and mb_wc */ +#define MY_CS_TOOSMALL2 -102 /* Need at least two bytes: wc_mb and mb_wc */ +#define MY_CS_TOOSMALL3 -103 /* Need at least three bytes: wc_mb and mb_wc */ +/* These following three are currently not really used */ +#define MY_CS_TOOSMALL4 -104 /* Need at least 4 bytes: wc_mb and mb_wc */ +#define MY_CS_TOOSMALL5 -105 /* Need at least 5 bytes: wc_mb and mb_wc */ +#define MY_CS_TOOSMALL6 -106 /* Need at least 6 bytes: wc_mb and mb_wc */ +/* A helper macros for "need at least n bytes" */ +#define MY_CS_TOOSMALLN(n) (-100-(n)) + +#define MY_SEQ_INTTAIL 1 +#define MY_SEQ_SPACES 2 + + /* My charsets_list flags */ +#define MY_CS_COMPILED 1 /* compiled-in sets */ +#define MY_CS_CONFIG 2 /* sets that have a *.conf file */ +#define MY_CS_INDEX 4 /* sets listed in the Index file */ +#define MY_CS_LOADED 8 /* sets that are currently loaded */ +#define MY_CS_BINSORT 16 /* if binary sort order */ +#define MY_CS_PRIMARY 32 /* if primary collation */ +#define MY_CS_STRNXFRM 64 /* if strnxfrm is used for sort */ +#define MY_CS_UNICODE 128 /* is a charset is full unicode */ +#define MY_CS_READY 256 /* if a charset is initialized */ +#define MY_CS_AVAILABLE 512 /* If either compiled-in or loaded*/ +#define MY_CS_CSSORT 1024 /* if case sensitive sort order */ +#define MY_CS_HIDDEN 2048 /* don't display in SHOW */ +#define MY_CS_PUREASCII 4096 /* if a charset is pure ascii */ +#define MY_CHARSET_UNDEFINED 0 + +/* Character repertoire flags */ +#define MY_REPERTOIRE_ASCII 1 /* Pure ASCII U+0000..U+007F */ +#define MY_REPERTOIRE_EXTENDED 2 /* Extended characters: U+0080..U+FFFF */ +#define MY_REPERTOIRE_UNICODE30 3 /* ASCII | EXTENDED: U+0000..U+FFFF */ + + +typedef struct my_uni_idx_st +{ + uint16 from; + uint16 to; + uchar *tab; +} MY_UNI_IDX; + +typedef struct +{ + uint beg; + uint end; + uint mb_len; +} my_match_t; + +enum my_lex_states +{ + MY_LEX_START, MY_LEX_CHAR, MY_LEX_IDENT, + MY_LEX_IDENT_SEP, MY_LEX_IDENT_START, + MY_LEX_REAL, MY_LEX_HEX_NUMBER, MY_LEX_BIN_NUMBER, + MY_LEX_CMP_OP, MY_LEX_LONG_CMP_OP, MY_LEX_STRING, MY_LEX_COMMENT, MY_LEX_END, + MY_LEX_OPERATOR_OR_IDENT, MY_LEX_NUMBER_IDENT, MY_LEX_INT_OR_REAL, + MY_LEX_REAL_OR_POINT, MY_LEX_BOOL, MY_LEX_EOL, MY_LEX_ESCAPE, + MY_LEX_LONG_COMMENT, MY_LEX_END_LONG_COMMENT, MY_LEX_SEMICOLON, + MY_LEX_SET_VAR, MY_LEX_USER_END, MY_LEX_HOSTNAME, MY_LEX_SKIP, + MY_LEX_USER_VARIABLE_DELIMITER, MY_LEX_SYSTEM_VAR, + MY_LEX_IDENT_OR_KEYWORD, + MY_LEX_IDENT_OR_HEX, MY_LEX_IDENT_OR_BIN, MY_LEX_IDENT_OR_NCHAR, + MY_LEX_STRING_OR_DELIMITER +}; + +struct charset_info_st; + + +/* See strings/CHARSET_INFO.txt for information about this structure */ +typedef struct my_collation_handler_st +{ + my_bool (*init)(struct charset_info_st *, void *(*alloc)(size_t)); + /* Collation routines */ + int (*strnncoll)(struct charset_info_st *, + const uchar *, size_t, const uchar *, size_t, my_bool); + int (*strnncollsp)(struct charset_info_st *, + const uchar *, size_t, const uchar *, size_t, + my_bool diff_if_only_endspace_difference); + size_t (*strnxfrm)(struct charset_info_st *, + uchar *, size_t, const uchar *, size_t); + size_t (*strnxfrmlen)(struct charset_info_st *, size_t); + my_bool (*like_range)(struct charset_info_st *, + const char *s, size_t s_length, + pchar w_prefix, pchar w_one, pchar w_many, + size_t res_length, + char *min_str, char *max_str, + size_t *min_len, size_t *max_len); + int (*wildcmp)(struct charset_info_st *, + const char *str,const char *str_end, + const char *wildstr,const char *wildend, + int escape,int w_one, int w_many); + + int (*strcasecmp)(struct charset_info_st *, const char *, const char *); + + uint (*instr)(struct charset_info_st *, + const char *b, size_t b_length, + const char *s, size_t s_length, + my_match_t *match, uint nmatch); + + /* Hash calculation */ + void (*hash_sort)(struct charset_info_st *cs, const uchar *key, size_t len, + ulong *nr1, ulong *nr2); + my_bool (*propagate)(struct charset_info_st *cs, const uchar *str, size_t len); +} MY_COLLATION_HANDLER; + +extern MY_COLLATION_HANDLER my_collation_mb_bin_handler; +extern MY_COLLATION_HANDLER my_collation_8bit_bin_handler; +extern MY_COLLATION_HANDLER my_collation_8bit_simple_ci_handler; +extern MY_COLLATION_HANDLER my_collation_ucs2_uca_handler; + +/* Some typedef to make it easy for C++ to make function pointers */ +typedef int (*my_charset_conv_mb_wc)(struct charset_info_st *, my_wc_t *, + const uchar *, const uchar *); +typedef int (*my_charset_conv_wc_mb)(struct charset_info_st *, my_wc_t, + uchar *, uchar *); +typedef size_t (*my_charset_conv_case)(struct charset_info_st *, + char *, size_t, char *, size_t); + + +/* See strings/CHARSET_INFO.txt about information on this structure */ +typedef struct my_charset_handler_st +{ + my_bool (*init)(struct charset_info_st *, void *(*alloc)(size_t)); + /* Multibyte routines */ + uint (*ismbchar)(struct charset_info_st *, const char *, const char *); + uint (*mbcharlen)(struct charset_info_st *, uint c); + size_t (*numchars)(struct charset_info_st *, const char *b, const char *e); + size_t (*charpos)(struct charset_info_st *, const char *b, const char *e, + size_t pos); + size_t (*well_formed_len)(struct charset_info_st *, + const char *b,const char *e, + size_t nchars, int *error); + size_t (*lengthsp)(struct charset_info_st *, const char *ptr, size_t length); + size_t (*numcells)(struct charset_info_st *, const char *b, const char *e); + + /* Unicode conversion */ + my_charset_conv_mb_wc mb_wc; + my_charset_conv_wc_mb wc_mb; + + /* CTYPE scanner */ + int (*ctype)(struct charset_info_st *cs, int *ctype, + const uchar *s, const uchar *e); + + /* Functions for case and sort conversion */ + size_t (*caseup_str)(struct charset_info_st *, char *); + size_t (*casedn_str)(struct charset_info_st *, char *); + + my_charset_conv_case caseup; + my_charset_conv_case casedn; + + /* Charset dependant snprintf() */ + size_t (*snprintf)(struct charset_info_st *, char *to, size_t n, + const char *fmt, + ...) ATTRIBUTE_FORMAT_FPTR(printf, 4, 5); + size_t (*long10_to_str)(struct charset_info_st *, char *to, size_t n, + int radix, long int val); + size_t (*longlong10_to_str)(struct charset_info_st *, char *to, size_t n, + int radix, longlong val); + + void (*fill)(struct charset_info_st *, char *to, size_t len, int fill); + + /* String-to-number conversion routines */ + long (*strntol)(struct charset_info_st *, const char *s, size_t l, + int base, char **e, int *err); + ulong (*strntoul)(struct charset_info_st *, const char *s, size_t l, + int base, char **e, int *err); + longlong (*strntoll)(struct charset_info_st *, const char *s, size_t l, + int base, char **e, int *err); + ulonglong (*strntoull)(struct charset_info_st *, const char *s, size_t l, + int base, char **e, int *err); + double (*strntod)(struct charset_info_st *, char *s, size_t l, char **e, + int *err); + longlong (*strtoll10)(struct charset_info_st *cs, + const char *nptr, char **endptr, int *error); + ulonglong (*strntoull10rnd)(struct charset_info_st *cs, + const char *str, size_t length, + int unsigned_fl, + char **endptr, int *error); + size_t (*scan)(struct charset_info_st *, const char *b, const char *e, + int sq); +} MY_CHARSET_HANDLER; + +extern MY_CHARSET_HANDLER my_charset_8bit_handler; +extern MY_CHARSET_HANDLER my_charset_ucs2_handler; + + +/* See strings/CHARSET_INFO.txt about information on this structure */ +typedef struct charset_info_st +{ + uint number; + uint primary_number; + uint binary_number; + uint state; + const char *csname; + const char *name; + const char *comment; + const char *tailoring; + uchar *ctype; + uchar *to_lower; + uchar *to_upper; + uchar *sort_order; + uint16 *contractions; + uint16 **sort_order_big; + uint16 *tab_to_uni; + MY_UNI_IDX *tab_from_uni; + MY_UNICASE_INFO **caseinfo; + uchar *state_map; + uchar *ident_map; + uint strxfrm_multiply; + uchar caseup_multiply; + uchar casedn_multiply; + uint mbminlen; + uint mbmaxlen; + uint16 min_sort_char; + uint16 max_sort_char; /* For LIKE optimization */ + uchar pad_char; + my_bool escape_with_backslash_is_dangerous; + + MY_CHARSET_HANDLER *cset; + MY_COLLATION_HANDLER *coll; + +} CHARSET_INFO; +#define ILLEGAL_CHARSET_INFO_NUMBER (~0U) + + +extern MYSQL_PLUGIN_IMPORT CHARSET_INFO my_charset_bin; +extern CHARSET_INFO my_charset_big5_chinese_ci; +extern CHARSET_INFO my_charset_big5_bin; +extern CHARSET_INFO my_charset_cp932_japanese_ci; +extern CHARSET_INFO my_charset_cp932_bin; +extern CHARSET_INFO my_charset_eucjpms_japanese_ci; +extern CHARSET_INFO my_charset_eucjpms_bin; +extern CHARSET_INFO my_charset_euckr_korean_ci; +extern CHARSET_INFO my_charset_euckr_bin; +extern CHARSET_INFO my_charset_gb2312_chinese_ci; +extern CHARSET_INFO my_charset_gb2312_bin; +extern CHARSET_INFO my_charset_gbk_chinese_ci; +extern CHARSET_INFO my_charset_gbk_bin; +extern MYSQL_PLUGIN_IMPORT CHARSET_INFO my_charset_latin1; +extern CHARSET_INFO my_charset_latin1_german2_ci; +extern CHARSET_INFO my_charset_latin1_bin; +extern CHARSET_INFO my_charset_latin2_czech_ci; +extern CHARSET_INFO my_charset_sjis_japanese_ci; +extern CHARSET_INFO my_charset_sjis_bin; +extern CHARSET_INFO my_charset_tis620_thai_ci; +extern CHARSET_INFO my_charset_tis620_bin; +extern CHARSET_INFO my_charset_ucs2_general_ci; +extern CHARSET_INFO my_charset_ucs2_bin; +extern CHARSET_INFO my_charset_ucs2_unicode_ci; +extern CHARSET_INFO my_charset_ujis_japanese_ci; +extern CHARSET_INFO my_charset_ujis_bin; +extern CHARSET_INFO my_charset_utf8_general_ci; +extern CHARSET_INFO my_charset_utf8_unicode_ci; +extern CHARSET_INFO my_charset_utf8_bin; +extern CHARSET_INFO my_charset_cp1250_czech_ci; +extern MYSQL_PLUGIN_IMPORT CHARSET_INFO my_charset_filename; + +/* declarations for simple charsets */ +extern size_t my_strnxfrm_simple(CHARSET_INFO *, uchar *, size_t, + const uchar *, size_t); +size_t my_strnxfrmlen_simple(CHARSET_INFO *, size_t); +extern int my_strnncoll_simple(CHARSET_INFO *, const uchar *, size_t, + const uchar *, size_t, my_bool); + +extern int my_strnncollsp_simple(CHARSET_INFO *, const uchar *, size_t, + const uchar *, size_t, + my_bool diff_if_only_endspace_difference); + +extern void my_hash_sort_simple(CHARSET_INFO *cs, + const uchar *key, size_t len, + ulong *nr1, ulong *nr2); + +extern size_t my_lengthsp_8bit(CHARSET_INFO *cs, const char *ptr, size_t length); + +extern uint my_instr_simple(struct charset_info_st *, + const char *b, size_t b_length, + const char *s, size_t s_length, + my_match_t *match, uint nmatch); + + +/* Functions for 8bit */ +extern size_t my_caseup_str_8bit(CHARSET_INFO *, char *); +extern size_t my_casedn_str_8bit(CHARSET_INFO *, char *); +extern size_t my_caseup_8bit(CHARSET_INFO *, char *src, size_t srclen, + char *dst, size_t dstlen); +extern size_t my_casedn_8bit(CHARSET_INFO *, char *src, size_t srclen, + char *dst, size_t dstlen); + +extern int my_strcasecmp_8bit(CHARSET_INFO * cs, const char *, const char *); + +int my_mb_wc_8bit(CHARSET_INFO *cs,my_wc_t *wc, const uchar *s,const uchar *e); +int my_wc_mb_8bit(CHARSET_INFO *cs,my_wc_t wc, uchar *s, uchar *e); + +int my_mb_ctype_8bit(CHARSET_INFO *,int *, const uchar *,const uchar *); +int my_mb_ctype_mb(CHARSET_INFO *,int *, const uchar *,const uchar *); + +size_t my_scan_8bit(CHARSET_INFO *cs, const char *b, const char *e, int sq); + +size_t my_snprintf_8bit(struct charset_info_st *, char *to, size_t n, + const char *fmt, ...) + ATTRIBUTE_FORMAT(printf, 4, 5); + +long my_strntol_8bit(CHARSET_INFO *, const char *s, size_t l, int base, + char **e, int *err); +ulong my_strntoul_8bit(CHARSET_INFO *, const char *s, size_t l, int base, + char **e, int *err); +longlong my_strntoll_8bit(CHARSET_INFO *, const char *s, size_t l, int base, + char **e, int *err); +ulonglong my_strntoull_8bit(CHARSET_INFO *, const char *s, size_t l, int base, + char **e, int *err); +double my_strntod_8bit(CHARSET_INFO *, char *s, size_t l,char **e, + int *err); +size_t my_long10_to_str_8bit(CHARSET_INFO *, char *to, size_t l, int radix, + long int val); +size_t my_longlong10_to_str_8bit(CHARSET_INFO *, char *to, size_t l, int radix, + longlong val); + +longlong my_strtoll10_8bit(CHARSET_INFO *cs, + const char *nptr, char **endptr, int *error); +longlong my_strtoll10_ucs2(CHARSET_INFO *cs, + const char *nptr, char **endptr, int *error); + +ulonglong my_strntoull10rnd_8bit(CHARSET_INFO *cs, + const char *str, size_t length, int + unsigned_fl, char **endptr, int *error); +ulonglong my_strntoull10rnd_ucs2(CHARSET_INFO *cs, + const char *str, size_t length, + int unsigned_fl, char **endptr, int *error); + +void my_fill_8bit(CHARSET_INFO *cs, char* to, size_t l, int fill); + +my_bool my_like_range_simple(CHARSET_INFO *cs, + const char *ptr, size_t ptr_length, + pbool escape, pbool w_one, pbool w_many, + size_t res_length, + char *min_str, char *max_str, + size_t *min_length, size_t *max_length); + +my_bool my_like_range_mb(CHARSET_INFO *cs, + const char *ptr, size_t ptr_length, + pbool escape, pbool w_one, pbool w_many, + size_t res_length, + char *min_str, char *max_str, + size_t *min_length, size_t *max_length); + +my_bool my_like_range_ucs2(CHARSET_INFO *cs, + const char *ptr, size_t ptr_length, + pbool escape, pbool w_one, pbool w_many, + size_t res_length, + char *min_str, char *max_str, + size_t *min_length, size_t *max_length); + + +int my_wildcmp_8bit(CHARSET_INFO *, + const char *str,const char *str_end, + const char *wildstr,const char *wildend, + int escape, int w_one, int w_many); + +int my_wildcmp_bin(CHARSET_INFO *, + const char *str,const char *str_end, + const char *wildstr,const char *wildend, + int escape, int w_one, int w_many); + +size_t my_numchars_8bit(CHARSET_INFO *, const char *b, const char *e); +size_t my_numcells_8bit(CHARSET_INFO *, const char *b, const char *e); +size_t my_charpos_8bit(CHARSET_INFO *, const char *b, const char *e, size_t pos); +size_t my_well_formed_len_8bit(CHARSET_INFO *, const char *b, const char *e, + size_t pos, int *error); +uint my_mbcharlen_8bit(CHARSET_INFO *, uint c); + + +/* Functions for multibyte charsets */ +extern size_t my_caseup_str_mb(CHARSET_INFO *, char *); +extern size_t my_casedn_str_mb(CHARSET_INFO *, char *); +extern size_t my_caseup_mb(CHARSET_INFO *, char *src, size_t srclen, + char *dst, size_t dstlen); +extern size_t my_casedn_mb(CHARSET_INFO *, char *src, size_t srclen, + char *dst, size_t dstlen); +extern int my_strcasecmp_mb(CHARSET_INFO * cs,const char *, const char *); + +int my_wildcmp_mb(CHARSET_INFO *, + const char *str,const char *str_end, + const char *wildstr,const char *wildend, + int escape, int w_one, int w_many); +size_t my_numchars_mb(CHARSET_INFO *, const char *b, const char *e); +size_t my_numcells_mb(CHARSET_INFO *, const char *b, const char *e); +size_t my_charpos_mb(CHARSET_INFO *, const char *b, const char *e, size_t pos); +size_t my_well_formed_len_mb(CHARSET_INFO *, const char *b, const char *e, + size_t pos, int *error); +uint my_instr_mb(struct charset_info_st *, + const char *b, size_t b_length, + const char *s, size_t s_length, + my_match_t *match, uint nmatch); + +int my_wildcmp_unicode(CHARSET_INFO *cs, + const char *str, const char *str_end, + const char *wildstr, const char *wildend, + int escape, int w_one, int w_many, + MY_UNICASE_INFO **weights); + +extern my_bool my_parse_charset_xml(const char *bug, size_t len, + int (*add)(CHARSET_INFO *cs)); +extern char *my_strchr(CHARSET_INFO *cs, const char *str, const char *end, + pchar c); + +my_bool my_propagate_simple(CHARSET_INFO *cs, const uchar *str, size_t len); +my_bool my_propagate_complex(CHARSET_INFO *cs, const uchar *str, size_t len); + + +uint my_string_repertoire(CHARSET_INFO *cs, const char *str, ulong len); +my_bool my_charset_is_ascii_based(CHARSET_INFO *cs); +my_bool my_charset_is_8bit_pure_ascii(CHARSET_INFO *cs); +uint my_charset_repertoire(CHARSET_INFO *cs); + + +#define _MY_U 01 /* Upper case */ +#define _MY_L 02 /* Lower case */ +#define _MY_NMR 04 /* Numeral (digit) */ +#define _MY_SPC 010 /* Spacing character */ +#define _MY_PNT 020 /* Punctuation */ +#define _MY_CTR 040 /* Control character */ +#define _MY_B 0100 /* Blank */ +#define _MY_X 0200 /* heXadecimal digit */ + + +#define my_isascii(c) (!((c) & ~0177)) +#define my_toascii(c) ((c) & 0177) +#define my_tocntrl(c) ((c) & 31) +#define my_toprint(c) ((c) | 64) +#define my_toupper(s,c) (char) ((s)->to_upper[(uchar) (c)]) +#define my_tolower(s,c) (char) ((s)->to_lower[(uchar) (c)]) +#define my_isalpha(s, c) (((s)->ctype+1)[(uchar) (c)] & (_MY_U | _MY_L)) +#define my_isupper(s, c) (((s)->ctype+1)[(uchar) (c)] & _MY_U) +#define my_islower(s, c) (((s)->ctype+1)[(uchar) (c)] & _MY_L) +#define my_isdigit(s, c) (((s)->ctype+1)[(uchar) (c)] & _MY_NMR) +#define my_isxdigit(s, c) (((s)->ctype+1)[(uchar) (c)] & _MY_X) +#define my_isalnum(s, c) (((s)->ctype+1)[(uchar) (c)] & (_MY_U | _MY_L | _MY_NMR)) +#define my_isspace(s, c) (((s)->ctype+1)[(uchar) (c)] & _MY_SPC) +#define my_ispunct(s, c) (((s)->ctype+1)[(uchar) (c)] & _MY_PNT) +#define my_isprint(s, c) (((s)->ctype+1)[(uchar) (c)] & (_MY_PNT | _MY_U | _MY_L | _MY_NMR | _MY_B)) +#define my_isgraph(s, c) (((s)->ctype+1)[(uchar) (c)] & (_MY_PNT | _MY_U | _MY_L | _MY_NMR)) +#define my_iscntrl(s, c) (((s)->ctype+1)[(uchar) (c)] & _MY_CTR) + +/* Some macros that should be cleaned up a little */ +#define my_isvar(s,c) (my_isalnum(s,c) || (c) == '_') +#define my_isvar_start(s,c) (my_isalpha(s,c) || (c) == '_') + +#define my_binary_compare(s) ((s)->state & MY_CS_BINSORT) +#define use_strnxfrm(s) ((s)->state & MY_CS_STRNXFRM) +#define my_strnxfrm(s, a, b, c, d) ((s)->coll->strnxfrm((s), (a), (b), (c), (d))) +#define my_strnncoll(s, a, b, c, d) ((s)->coll->strnncoll((s), (a), (b), (c), (d), 0)) +#define my_like_range(s, a, b, c, d, e, f, g, h, i, j) \ + ((s)->coll->like_range((s), (a), (b), (c), (d), (e), (f), (g), (h), (i), (j))) +#define my_wildcmp(cs,s,se,w,we,e,o,m) ((cs)->coll->wildcmp((cs),(s),(se),(w),(we),(e),(o),(m))) +#define my_strcasecmp(s, a, b) ((s)->coll->strcasecmp((s), (a), (b))) +#define my_charpos(cs, b, e, num) (cs)->cset->charpos((cs), (const char*) (b), (const char *)(e), (num)) + + +#define use_mb(s) ((s)->cset->ismbchar != NULL) +#define my_ismbchar(s, a, b) ((s)->cset->ismbchar((s), (a), (b))) +#ifdef USE_MB +#define my_mbcharlen(s, a) ((s)->cset->mbcharlen((s),(a))) +#else +#define my_mbcharlen(s, a) 1 +#endif + +#define my_caseup_str(s, a) ((s)->cset->caseup_str((s), (a))) +#define my_casedn_str(s, a) ((s)->cset->casedn_str((s), (a))) +#define my_strntol(s, a, b, c, d, e) ((s)->cset->strntol((s),(a),(b),(c),(d),(e))) +#define my_strntoul(s, a, b, c, d, e) ((s)->cset->strntoul((s),(a),(b),(c),(d),(e))) +#define my_strntoll(s, a, b, c, d, e) ((s)->cset->strntoll((s),(a),(b),(c),(d),(e))) +#define my_strntoull(s, a, b, c,d, e) ((s)->cset->strntoull((s),(a),(b),(c),(d),(e))) +#define my_strntod(s, a, b, c, d) ((s)->cset->strntod((s),(a),(b),(c),(d))) + + +/* XXX: still need to take care of this one */ +#ifdef MY_CHARSET_TIS620 +#error The TIS620 charset is broken at the moment. Tell tim to fix it. +#define USE_TIS620 +#include "t_ctype.h" +#endif + +#ifdef __cplusplus +} +#endif + +#endif /* _m_ctype_h */ diff --git a/EQ2/source/depends/mysql-5.1.45-win32/include/m_string.h b/EQ2/source/depends/mysql-5.1.45-win32/include/m_string.h new file mode 100644 index 000000000..a25675f26 --- /dev/null +++ b/EQ2/source/depends/mysql-5.1.45-win32/include/m_string.h @@ -0,0 +1,266 @@ +/* Copyright (C) 2000 MySQL AB + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; version 2 of the License. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ + +/* There may be prolems include all of theese. Try to test in + configure with ones are needed? */ + +/* This is needed for the definitions of strchr... on solaris */ + +#ifndef _m_string_h +#define _m_string_h +#ifndef __USE_GNU +#define __USE_GNU /* We want to use stpcpy */ +#endif +#if defined(HAVE_STRINGS_H) +#include +#endif +#if defined(HAVE_STRING_H) +#include +#endif + +/* need by my_vsnprintf */ +#include + +#ifdef _AIX +#undef HAVE_BCMP +#endif + +/* This is needed for the definitions of bzero... on solaris */ +#if defined(HAVE_STRINGS_H) +#include +#endif + +/* This is needed for the definitions of memcpy... on solaris */ +#if defined(HAVE_MEMORY_H) && !defined(__cplusplus) +#include +#endif + +#if !defined(HAVE_MEMCPY) && !defined(HAVE_MEMMOVE) +# define memcpy(d, s, n) bcopy ((s), (d), (n)) +# define memset(A,C,B) bfill((A),(B),(C)) +# define memmove(d, s, n) bmove ((d), (s), (n)) +#elif defined(HAVE_MEMMOVE) +# define bmove(d, s, n) memmove((d), (s), (n)) +#else +# define memmove(d, s, n) bmove((d), (s), (n)) /* our bmove */ +#endif + +/* Unixware 7 */ +#if !defined(HAVE_BFILL) +# define bfill(A,B,C) memset((A),(C),(B)) +# define bmove_align(A,B,C) memcpy((A),(B),(C)) +#endif + +#if !defined(HAVE_BCMP) +# define bcopy(s, d, n) memcpy((d), (s), (n)) +# define bcmp(A,B,C) memcmp((A),(B),(C)) +# define bzero(A,B) memset((A),0,(B)) +# define bmove_align(A,B,C) memcpy((A),(B),(C)) +#endif + +#if defined(__cplusplus) +extern "C" { +#endif + +/* + my_str_malloc() and my_str_free() are assigned to implementations in + strings/alloc.c, but can be overridden in the calling program. + */ +extern void *(*my_str_malloc)(size_t); +extern void (*my_str_free)(void *); + +#if defined(HAVE_STPCPY) +#define strmov(A,B) stpcpy((A),(B)) +#ifndef stpcpy +extern char *stpcpy(char *, const char *); /* For AIX with gcc 2.95.3 */ +#endif +#endif + +/* Declared in int2str() */ +extern char NEAR _dig_vec_upper[]; +extern char NEAR _dig_vec_lower[]; + +/* Defined in strtod.c */ +extern const double log_10[309]; + +#ifndef strmov +#define strmov_overlapp(A,B) strmov(A,B) +#define strmake_overlapp(A,B,C) strmake(A,B,C) +#endif + +#ifdef BAD_MEMCPY /* Problem with gcc on Alpha */ +#define memcpy_fixed(A,B,C) bmove((A),(B),(C)) +#else +#define memcpy_fixed(A,B,C) memcpy((A),(B),(C)) +#endif + +#if (!defined(USE_BMOVE512) || defined(HAVE_purify)) && !defined(bmove512) +#define bmove512(A,B,C) memcpy(A,B,C) +#endif + + /* Prototypes for string functions */ + +#if !defined(bfill) && !defined(HAVE_BFILL) +extern void bfill(uchar *dst,size_t len,pchar fill); +#endif + +#if !defined(bzero) && !defined(HAVE_BZERO) +extern void bzero(uchar * dst,size_t len); +#endif + +#if !defined(bcmp) && !defined(HAVE_BCMP) +extern size_t bcmp(const uchar *s1,const uchar *s2,size_t len); +#endif +#ifdef HAVE_purify +extern size_t my_bcmp(const uchar *s1,const uchar *s2,size_t len); +#undef bcmp +#define bcmp(A,B,C) my_bcmp((A),(B),(C)) +#define bzero_if_purify(A,B) bzero(A,B) +#else +#define bzero_if_purify(A,B) +#endif /* HAVE_purify */ + +#ifndef bmove512 +extern void bmove512(uchar *dst,const uchar *src,size_t len); +#endif + +#if !defined(HAVE_BMOVE) && !defined(bmove) +extern void bmove(uuchar *dst, const uchar *src,size_t len); +#endif + +extern void bmove_upp(uchar *dst,const uchar *src,size_t len); +extern void bchange(uchar *dst,size_t old_len,const uchar *src, + size_t new_len,size_t tot_len); +extern void strappend(char *s,size_t len,pchar fill); +extern char *strend(const char *s); +extern char *strcend(const char *, pchar); +extern char *strfield(char *src,int fields,int chars,int blanks, + int tabch); +extern char *strfill(char * s,size_t len,pchar fill); +extern size_t strinstr(const char *str,const char *search); +extern size_t r_strinstr(const char *str, size_t from, const char *search); +extern char *strkey(char *dst,char *head,char *tail,char *flags); +extern char *strmake(char *dst,const char *src,size_t length); + +#ifndef strmov +extern char *strmov(char *dst,const char *src); +#else +extern char *strmov_overlapp(char *dst,const char *src); +#endif +extern char *strnmov(char *dst,const char *src,size_t n); +extern char *strsuff(const char *src,const char *suffix); +extern char *strcont(const char *src,const char *set); +extern char *strxcat _VARARGS((char *dst,const char *src, ...)); +extern char *strxmov _VARARGS((char *dst,const char *src, ...)); +extern char *strxcpy _VARARGS((char *dst,const char *src, ...)); +extern char *strxncat _VARARGS((char *dst,size_t len, const char *src, ...)); +extern char *strxnmov _VARARGS((char *dst,size_t len, const char *src, ...)); +extern char *strxncpy _VARARGS((char *dst,size_t len, const char *src, ...)); + +/* Prototypes of normal stringfunctions (with may ours) */ + +#ifdef WANT_STRING_PROTOTYPES +extern char *strcat(char *, const char *); +extern char *strchr(const char *, pchar); +extern char *strrchr(const char *, pchar); +extern char *strcpy(char *, const char *); +extern int strcmp(const char *, const char *); +#ifndef __GNUC__ +extern size_t strlen(const char *); +#endif +#endif +#ifndef HAVE_STRNLEN +extern size_t strnlen(const char *s, size_t n); +#endif + +#if !defined(__cplusplus) +#ifndef HAVE_STRPBRK +extern char *strpbrk(const char *, const char *); +#endif +#ifndef HAVE_STRSTR +extern char *strstr(const char *, const char *); +#endif +#endif +extern int is_prefix(const char *, const char *); + +/* Conversion routines */ +double my_strtod(const char *str, char **end, int *error); +double my_atof(const char *nptr); + +extern char *llstr(longlong value,char *buff); +extern char *ullstr(longlong value,char *buff); +#ifndef HAVE_STRTOUL +extern long strtol(const char *str, char **ptr, int base); +extern ulong strtoul(const char *str, char **ptr, int base); +#endif + +extern char *int2str(long val, char *dst, int radix, int upcase); +extern char *int10_to_str(long val,char *dst,int radix); +extern char *str2int(const char *src,int radix,long lower,long upper, + long *val); +longlong my_strtoll10(const char *nptr, char **endptr, int *error); +#if SIZEOF_LONG == SIZEOF_LONG_LONG +#define longlong2str(A,B,C) int2str((A),(B),(C),1) +#define longlong10_to_str(A,B,C) int10_to_str((A),(B),(C)) +#undef strtoll +#define strtoll(A,B,C) strtol((A),(B),(C)) +#define strtoull(A,B,C) strtoul((A),(B),(C)) +#ifndef HAVE_STRTOULL +#define HAVE_STRTOULL +#endif +#ifndef HAVE_STRTOLL +#define HAVE_STRTOLL +#endif +#else +#ifdef HAVE_LONG_LONG +extern char *longlong2str(longlong val,char *dst,int radix); +extern char *longlong10_to_str(longlong val,char *dst,int radix); +#if (!defined(HAVE_STRTOULL) || defined(NO_STRTOLL_PROTO)) +extern longlong strtoll(const char *str, char **ptr, int base); +extern ulonglong strtoull(const char *str, char **ptr, int base); +#endif +#endif +#endif + +/* my_vsnprintf.c */ + +extern size_t my_vsnprintf(char *str, size_t n, + const char *format, va_list ap); +extern size_t my_snprintf(char *to, size_t n, const char *fmt, ...) + ATTRIBUTE_FORMAT(printf, 3, 4); + +#if defined(__cplusplus) +} +#endif + +/* + LEX_STRING -- a pair of a C-string and its length. +*/ + +#ifndef _my_plugin_h +/* This definition must match the one given in mysql/plugin.h */ +struct st_mysql_lex_string +{ + char *str; + size_t length; +}; +#endif +typedef struct st_mysql_lex_string LEX_STRING; + +#define STRING_WITH_LEN(X) (X), ((size_t) (sizeof(X) - 1)) +#define USTRING_WITH_LEN(X) ((uchar*) X), ((size_t) (sizeof(X) - 1)) +#define C_STRING_WITH_LEN(X) ((char *) (X)), ((size_t) (sizeof(X) - 1)) + +#endif diff --git a/EQ2/source/depends/mysql-5.1.45-win32/include/my_alloc.h b/EQ2/source/depends/mysql-5.1.45-win32/include/my_alloc.h new file mode 100644 index 000000000..93b7438a1 --- /dev/null +++ b/EQ2/source/depends/mysql-5.1.45-win32/include/my_alloc.h @@ -0,0 +1,51 @@ +/* Copyright (C) 2000 MySQL AB + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; version 2 of the License. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ + +/* + Data structures for mysys/my_alloc.c (root memory allocator) +*/ + +#ifndef _my_alloc_h +#define _my_alloc_h + +#define ALLOC_MAX_BLOCK_TO_DROP 4096 +#define ALLOC_MAX_BLOCK_USAGE_BEFORE_DROP 10 + +typedef struct st_used_mem +{ /* struct for once_alloc (block) */ + struct st_used_mem *next; /* Next block in use */ + unsigned int left; /* memory left in block */ + unsigned int size; /* size of block */ +} USED_MEM; + + +typedef struct st_mem_root +{ + USED_MEM *free; /* blocks with free memory in it */ + USED_MEM *used; /* blocks almost without free memory */ + USED_MEM *pre_alloc; /* preallocated block */ + /* if block have less memory it will be put in 'used' list */ + size_t min_malloc; + size_t block_size; /* initial block size */ + unsigned int block_num; /* allocated blocks counter */ + /* + first free block in queue test counter (if it exceed + MAX_BLOCK_USAGE_BEFORE_DROP block will be dropped in 'used' list) + */ + unsigned int first_block_usage; + + void (*error_handler)(void); +} MEM_ROOT; +#endif diff --git a/EQ2/source/depends/mysql-5.1.45-win32/include/my_attribute.h b/EQ2/source/depends/mysql-5.1.45-win32/include/my_attribute.h new file mode 100644 index 000000000..8309d85f2 --- /dev/null +++ b/EQ2/source/depends/mysql-5.1.45-win32/include/my_attribute.h @@ -0,0 +1,63 @@ +/* Copyright (C) 2000-2003 MySQL AB + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; version 2 of the License. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ + +/* + Helper macros used for setting different __attributes__ + on functions in a portable fashion +*/ + +#ifndef _my_attribute_h +#define _my_attribute_h + +/* + Disable __attribute__() on gcc < 2.7, g++ < 3.4, and non-gcc compilers. + Some forms of __attribute__ are actually supported in earlier versions of + g++, but we just disable them all because we only use them to generate + compilation warnings. +*/ +#ifndef __attribute__ +# if !defined(__GNUC__) +# define __attribute__(A) +# elif GCC_VERSION < 2008 +# define __attribute__(A) +# elif defined(__cplusplus) && GCC_VERSION < 3004 +# define __attribute__(A) +# endif +#endif + +/* + __attribute__((format(...))) is only supported in gcc >= 2.8 and g++ >= 3.4 + But that's already covered by the __attribute__ tests above, so this is + just a convenience macro. +*/ +#ifndef ATTRIBUTE_FORMAT +# define ATTRIBUTE_FORMAT(style, m, n) __attribute__((format(style, m, n))) +#endif + +/* + + __attribute__((format(...))) on a function pointer is not supported + until gcc 3.1 +*/ +#ifndef ATTRIBUTE_FORMAT_FPTR +# if (GCC_VERSION >= 3001) +# define ATTRIBUTE_FORMAT_FPTR(style, m, n) ATTRIBUTE_FORMAT(style, m, n) +# else +# define ATTRIBUTE_FORMAT_FPTR(style, m, n) +# endif /* GNUC >= 3.1 */ +#endif + + +#endif diff --git a/EQ2/source/depends/mysql-5.1.45-win32/include/my_dbug.h b/EQ2/source/depends/mysql-5.1.45-win32/include/my_dbug.h new file mode 100644 index 000000000..0ba72b221 --- /dev/null +++ b/EQ2/source/depends/mysql-5.1.45-win32/include/my_dbug.h @@ -0,0 +1,159 @@ +/* Copyright (C) 2000 MySQL AB + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; version 2 of the License. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ + +#ifndef _dbug_h +#define _dbug_h + +#if defined(__cplusplus) && !defined(DBUG_OFF) +class Dbug_violation_helper +{ +public: + inline Dbug_violation_helper() : + _entered(TRUE) + { } + + inline ~Dbug_violation_helper() + { + assert(!_entered); + } + + inline void leave() + { + _entered= FALSE; + } + +private: + bool _entered; +}; +#endif /* C++ */ + +#ifdef __cplusplus +extern "C" { +#endif +#if !defined(DBUG_OFF) && !defined(_lint) +struct _db_code_state_; +extern int _db_keyword_(struct _db_code_state_ *cs, const char *keyword); +extern int _db_strict_keyword_(const char *keyword); +extern int _db_explain_(struct _db_code_state_ *cs, char *buf, size_t len); +extern int _db_explain_init_(char *buf, size_t len); +extern void _db_setjmp_(void); +extern void _db_longjmp_(void); +extern void _db_process_(const char *name); +extern void _db_push_(const char *control); +extern void _db_pop_(void); +extern void _db_set_(struct _db_code_state_ *cs, const char *control); +extern void _db_set_init_(const char *control); +extern void _db_enter_(const char *_func_,const char *_file_,uint _line_, + const char **_sfunc_,const char **_sfile_, + uint *_slevel_, char ***); +extern void _db_return_(uint _line_,const char **_sfunc_,const char **_sfile_, + uint *_slevel_); +extern void _db_pargs_(uint _line_,const char *keyword); +extern void _db_doprnt_ _VARARGS((const char *format,...)) + ATTRIBUTE_FORMAT(printf, 1, 2); +extern void _db_dump_(uint _line_,const char *keyword, + const unsigned char *memory, size_t length); +extern void _db_end_(void); +extern void _db_lock_file_(void); +extern void _db_unlock_file_(void); +extern FILE *_db_fp_(void); + +#ifdef __cplusplus + +#define DBUG_ENTER(a) \ + const char *_db_func_, *_db_file_; \ + uint _db_level_; \ + char **_db_framep_; \ + Dbug_violation_helper dbug_violation_helper; \ + _db_enter_ (a, __FILE__, __LINE__, &_db_func_, &_db_file_, \ + &_db_level_, &_db_framep_) +#define DBUG_VIOLATION_HELPER_LEAVE dbug_violation_helper.leave() + +#else /* C */ + +#define DBUG_ENTER(a) \ + const char *_db_func_, *_db_file_; \ + uint _db_level_; \ + char **_db_framep_; \ + _db_enter_ (a, __FILE__, __LINE__, &_db_func_, &_db_file_, \ + &_db_level_, &_db_framep_) +#define DBUG_VIOLATION_HELPER_LEAVE do { } while(0) + +#endif /* C++ */ + +#define DBUG_LEAVE \ + DBUG_VIOLATION_HELPER_LEAVE; \ + _db_return_ (__LINE__, &_db_func_, &_db_file_, &_db_level_) +#define DBUG_RETURN(a1) do {DBUG_LEAVE; return(a1);} while(0) +#define DBUG_VOID_RETURN do {DBUG_LEAVE; return;} while(0) +#define DBUG_EXECUTE(keyword,a1) \ + do {if (_db_keyword_(0, (keyword))) { a1 }} while(0) +#define DBUG_EXECUTE_IF(keyword,a1) \ + do {if (_db_strict_keyword_ (keyword)) { a1 } } while(0) +#define DBUG_EVALUATE(keyword,a1,a2) \ + (_db_keyword_(0,(keyword)) ? (a1) : (a2)) +#define DBUG_EVALUATE_IF(keyword,a1,a2) \ + (_db_strict_keyword_((keyword)) ? (a1) : (a2)) +#define DBUG_PRINT(keyword,arglist) \ + do {_db_pargs_(__LINE__,keyword); _db_doprnt_ arglist;} while(0) +#define DBUG_PUSH(a1) _db_push_ (a1) +#define DBUG_POP() _db_pop_ () +#define DBUG_SET(a1) _db_set_ (0, (a1)) +#define DBUG_SET_INITIAL(a1) _db_set_init_ (a1) +#define DBUG_PROCESS(a1) _db_process_(a1) +#define DBUG_FILE _db_fp_() +#define DBUG_SETJMP(a1) (_db_setjmp_ (), setjmp (a1)) +#define DBUG_LONGJMP(a1,a2) (_db_longjmp_ (), longjmp (a1, a2)) +#define DBUG_DUMP(keyword,a1,a2) _db_dump_(__LINE__,keyword,a1,a2) +#define DBUG_END() _db_end_ () +#define DBUG_LOCK_FILE _db_lock_file_() +#define DBUG_UNLOCK_FILE _db_unlock_file_() +#define DBUG_ASSERT(A) assert(A) +#define DBUG_EXPLAIN(buf,len) _db_explain_(0, (buf),(len)) +#define DBUG_EXPLAIN_INITIAL(buf,len) _db_explain_init_((buf),(len)) +#define IF_DBUG(A) A +#else /* No debugger */ + +#define DBUG_ENTER(a1) +#define DBUG_LEAVE +#define DBUG_VIOLATION_HELPER_LEAVE +#define DBUG_RETURN(a1) do { return(a1); } while(0) +#define DBUG_VOID_RETURN do { return; } while(0) +#define DBUG_EXECUTE(keyword,a1) do { } while(0) +#define DBUG_EXECUTE_IF(keyword,a1) do { } while(0) +#define DBUG_EVALUATE(keyword,a1,a2) (a2) +#define DBUG_EVALUATE_IF(keyword,a1,a2) (a2) +#define DBUG_PRINT(keyword,arglist) do { } while(0) +#define DBUG_PUSH(a1) +#define DBUG_SET(a1) do { } while(0) +#define DBUG_SET_INITIAL(a1) do { } while(0) +#define DBUG_POP() +#define DBUG_PROCESS(a1) +#define DBUG_SETJMP(a1) setjmp(a1) +#define DBUG_LONGJMP(a1) longjmp(a1) +#define DBUG_DUMP(keyword,a1,a2) do { } while(0) +#define DBUG_END() +#define DBUG_ASSERT(A) do { } while(0) +#define DBUG_LOCK_FILE +#define DBUG_FILE (stderr) +#define DBUG_UNLOCK_FILE +#define DBUG_EXPLAIN(buf,len) +#define DBUG_EXPLAIN_INITIAL(buf,len) +#define IF_DBUG(A) +#endif +#ifdef __cplusplus +} +#endif +#endif diff --git a/EQ2/source/depends/mysql-5.1.45-win32/include/my_dir.h b/EQ2/source/depends/mysql-5.1.45-win32/include/my_dir.h new file mode 100644 index 000000000..06509a3af --- /dev/null +++ b/EQ2/source/depends/mysql-5.1.45-win32/include/my_dir.h @@ -0,0 +1,105 @@ +/* Copyright (C) 2000 MySQL AB + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; version 2 of the License. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ + +#ifndef _my_dir_h +#define _my_dir_h +#ifdef __cplusplus +extern "C" { +#endif + +#ifndef MY_DIR_H +#define MY_DIR_H + +#include + + /* Defines for my_dir and my_stat */ + +#define MY_S_IFMT S_IFMT /* type of file */ +#define MY_S_IFDIR S_IFDIR /* directory */ +#define MY_S_IFCHR S_IFCHR /* character special */ +#define MY_S_IFBLK S_IFBLK /* block special */ +#define MY_S_IFREG S_IFREG /* regular */ +#define MY_S_IFIFO S_IFIFO /* fifo */ +#define MY_S_ISUID S_ISUID /* set user id on execution */ +#define MY_S_ISGID S_ISGID /* set group id on execution */ +#define MY_S_ISVTX S_ISVTX /* save swapped text even after use */ +#define MY_S_IREAD S_IREAD /* read permission, owner */ +#define MY_S_IWRITE S_IWRITE /* write permission, owner */ +#define MY_S_IEXEC S_IEXEC /* execute/search permission, owner */ + +#define MY_S_ISDIR(m) (((m) & MY_S_IFMT) == MY_S_IFDIR) +#define MY_S_ISCHR(m) (((m) & MY_S_IFMT) == MY_S_IFCHR) +#define MY_S_ISBLK(m) (((m) & MY_S_IFMT) == MY_S_IFBLK) +#define MY_S_ISREG(m) (((m) & MY_S_IFMT) == MY_S_IFREG) +#define MY_S_ISFIFO(m) (((m) & MY_S_IFMT) == MY_S_IFIFO) + +#define MY_DONT_SORT 512 /* my_lib; Don't sort files */ +#define MY_WANT_STAT 1024 /* my_lib; stat files */ + + /* typedefs for my_dir & my_stat */ + +#ifdef USE_MY_STAT_STRUCT + +typedef struct my_stat +{ + dev_t st_dev; /* major & minor device numbers */ + ino_t st_ino; /* inode number */ + ushort st_mode; /* file permissons (& suid sgid .. bits) */ + short st_nlink; /* number of links to file */ + ushort st_uid; /* user id */ + ushort st_gid; /* group id */ + dev_t st_rdev; /* more major & minor device numbers (???) */ + off_t st_size; /* size of file */ + time_t st_atime; /* time for last read */ + time_t st_mtime; /* time for last contens modify */ + time_t st_ctime; /* time for last inode or contents modify */ +} MY_STAT; + +#else + +#define MY_STAT struct stat /* Orginal struct have what we need */ + +#endif /* USE_MY_STAT_STRUCT */ + +/* Struct describing one file returned from my_dir */ +typedef struct fileinfo +{ + char *name; + MY_STAT *mystat; +} FILEINFO; + +typedef struct st_my_dir /* Struct returned from my_dir */ +{ + /* + These members are just copies of parts of DYNAMIC_ARRAY structure, + which is allocated right after the end of MY_DIR structure (MEM_ROOT + for storing names is also resides there). We've left them here because + we don't want to change code that uses my_dir. + */ + struct fileinfo *dir_entry; + uint number_off_files; +} MY_DIR; + +extern MY_DIR *my_dir(const char *path,myf MyFlags); +extern void my_dirend(MY_DIR *buffer); +extern MY_STAT *my_stat(const char *path, MY_STAT *stat_area, myf my_flags); +extern int my_fstat(int filenr, MY_STAT *stat_area, myf MyFlags); + +#endif /* MY_DIR_H */ + +#ifdef __cplusplus +} +#endif +#endif diff --git a/EQ2/source/depends/mysql-5.1.45-win32/include/my_getopt.h b/EQ2/source/depends/mysql-5.1.45-win32/include/my_getopt.h new file mode 100644 index 000000000..7cbad607a --- /dev/null +++ b/EQ2/source/depends/mysql-5.1.45-win32/include/my_getopt.h @@ -0,0 +1,86 @@ +/* Copyright (C) 2002-2004 MySQL AB + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; version 2 of the License. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ + +#ifndef _my_getopt_h +#define _my_getopt_h + +C_MODE_START + +#define GET_NO_ARG 1 +#define GET_BOOL 2 +#define GET_INT 3 +#define GET_UINT 4 +#define GET_LONG 5 +#define GET_ULONG 6 +#define GET_LL 7 +#define GET_ULL 8 +#define GET_STR 9 +#define GET_STR_ALLOC 10 +#define GET_DISABLED 11 +#define GET_ENUM 12 +#define GET_SET 13 +#define GET_DOUBLE 14 + +#define GET_ASK_ADDR 128 +#define GET_TYPE_MASK 127 + +enum get_opt_arg_type { NO_ARG, OPT_ARG, REQUIRED_ARG }; + +struct st_typelib; + +struct my_option +{ + const char *name; /* Name of the option */ + int id; /* unique id or short option */ + const char *comment; /* option comment, for autom. --help */ + uchar **value; /* The variable value */ + uchar **u_max_value; /* The user def. max variable value */ + struct st_typelib *typelib; /* Pointer to possible values */ + ulong var_type; + enum get_opt_arg_type arg_type; + longlong def_value; /* Default value */ + longlong min_value; /* Min allowed value */ + longlong max_value; /* Max allowed value */ + longlong sub_size; /* Subtract this from given value */ + long block_size; /* Value should be a mult. of this */ + void *app_type; /* To be used by an application */ +}; + +typedef my_bool (* my_get_one_option) (int, const struct my_option *, char * ); +typedef void (* my_error_reporter) (enum loglevel level, const char *format, ... ); + +extern char *disabled_my_option; +extern my_bool my_getopt_print_errors; +extern my_bool my_getopt_skip_unknown; +extern my_error_reporter my_getopt_error_reporter; + +extern int handle_options (int *argc, char ***argv, + const struct my_option *longopts, my_get_one_option); +extern void my_cleanup_options(const struct my_option *options); +extern void my_print_help(const struct my_option *options); +extern void my_print_variables(const struct my_option *options); +extern void my_getopt_register_get_addr(uchar ** (*func_addr)(const char *, uint, + const struct my_option *, int *)); + +ulonglong getopt_ull_limit_value(ulonglong num, const struct my_option *optp, + my_bool *fix); +longlong getopt_ll_limit_value(longlong, const struct my_option *, + my_bool *fix); +my_bool getopt_compare_strings(const char *s, const char *t, uint length); + +C_MODE_END + +#endif /* _my_getopt_h */ + diff --git a/EQ2/source/depends/mysql-5.1.45-win32/include/my_global.h b/EQ2/source/depends/mysql-5.1.45-win32/include/my_global.h new file mode 100644 index 000000000..779152203 --- /dev/null +++ b/EQ2/source/depends/mysql-5.1.45-win32/include/my_global.h @@ -0,0 +1,1602 @@ +/* Copyright (C) 2000-2003 MySQL AB + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; version 2 of the License. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ + +/* This is the include file that should be included 'first' in every C file. */ + +#ifndef _global_h +#define _global_h + +/* + InnoDB depends on some MySQL internals which other plugins should not + need. This is because of InnoDB's foreign key support, "safe" binlog + truncation, and other similar legacy features. + + We define accessors for these internals unconditionally, but do not + expose them in mysql/plugin.h. They are declared in ha_innodb.h for + InnoDB's use. +*/ +#define INNODB_COMPATIBILITY_HOOKS + +#ifdef __CYGWIN__ +/* We use a Unix API, so pretend it's not Windows */ +#undef WIN +#undef WIN32 +#undef _WIN +#undef _WIN32 +#undef _WIN64 +#undef __WIN__ +#undef __WIN32__ +#define HAVE_ERRNO_AS_DEFINE +#endif /* __CYGWIN__ */ + +#if defined(__QNXNTO__) && !defined(FD_SETSIZE) +#define FD_SETSIZE 1024 /* Max number of file descriptor bits in + fd_set, used when calling 'select' + Must be defined before including + "sys/select.h" and "sys/time.h" + */ +#endif + + +/* to make command line shorter we'll define USE_PRAGMA_INTERFACE here */ +#ifdef USE_PRAGMA_IMPLEMENTATION +#define USE_PRAGMA_INTERFACE +#endif + +#if defined(i386) && !defined(__i386__) +#define __i386__ +#endif + +/* Macros to make switching between C and C++ mode easier */ +#ifdef __cplusplus +#define C_MODE_START extern "C" { +#define C_MODE_END } +#else +#define C_MODE_START +#define C_MODE_END +#endif + +#if defined(_WIN32) || defined(_WIN64) || defined(__WIN32__) || defined(WIN32) +#include +#elif defined(__NETWARE__) +#include +#include +#if defined(__cplusplus) && defined(inline) +#undef inline /* fix configure problem */ +#endif +#else +#include +#if defined(__cplusplus) && defined(inline) +#undef inline /* fix configure problem */ +#endif +#endif /* _WIN32... */ + +/* Make it easier to add conditionl code for windows */ +#ifdef __WIN__ +#define IF_WIN(A,B) (A) +#else +#define IF_WIN(A,B) (B) +#endif + +#ifndef EMBEDDED_LIBRARY +#ifdef WITH_NDB_BINLOG +#define HAVE_NDB_BINLOG 1 +#endif +#endif /* !EMBEDDED_LIBRARY */ + +#ifndef EMBEDDED_LIBRARY +#define HAVE_REPLICATION +#define HAVE_EXTERNAL_CLIENT +#endif + +/* Some defines to avoid ifdefs in the code */ +#ifndef NETWARE_YIELD +#define NETWARE_YIELD +#define NETWARE_SET_SCREEN_MODE(A) +#endif + +/* Workaround for _LARGE_FILES and _LARGE_FILE_API incompatibility on AIX */ +#if defined(_AIX) && defined(_LARGE_FILE_API) +#undef _LARGE_FILE_API +#endif + +/* + The macros below are used to allow build of Universal/fat binaries of + MySQL and MySQL applications under darwin. +*/ +#if defined(__APPLE__) && defined(__MACH__) +# undef SIZEOF_CHARP +# undef SIZEOF_SHORT +# undef SIZEOF_INT +# undef SIZEOF_LONG +# undef SIZEOF_LONG_LONG +# undef SIZEOF_OFF_T +# undef WORDS_BIGENDIAN +# define SIZEOF_SHORT 2 +# define SIZEOF_INT 4 +# define SIZEOF_LONG_LONG 8 +# define SIZEOF_OFF_T 8 +# if defined(__i386__) || defined(__ppc__) +# define SIZEOF_CHARP 4 +# define SIZEOF_LONG 4 +# elif defined(__x86_64__) || defined(__ppc64__) +# define SIZEOF_CHARP 8 +# define SIZEOF_LONG 8 +# else +# error Building FAT binary for an unknown architecture. +# endif +# if defined(__ppc__) || defined(__ppc64__) +# define WORDS_BIGENDIAN +# endif +#endif /* defined(__APPLE__) && defined(__MACH__) */ + + +/* + The macros below are borrowed from include/linux/compiler.h in the + Linux kernel. Use them to indicate the likelyhood of the truthfulness + of a condition. This serves two purposes - newer versions of gcc will be + able to optimize for branch predication, which could yield siginficant + performance gains in frequently executed sections of the code, and the + other reason to use them is for documentation +*/ + +#if !defined(__GNUC__) || (__GNUC__ == 2 && __GNUC_MINOR__ < 96) +#define __builtin_expect(x, expected_value) (x) +#endif + +#define likely(x) __builtin_expect((x),1) +#define unlikely(x) __builtin_expect((x),0) + + +/* + The macros below are useful in optimising places where it has been + discovered that cache misses stall the process and where a prefetch + of the cache line can improve matters. This is available in GCC 3.1.1 + and later versions. + PREFETCH_READ says that addr is going to be used for reading and that + it is to be kept in caches if possible for a while + PREFETCH_WRITE also says that the item to be cached is likely to be + updated. + The *LOCALITY scripts are also available for experimentation purposes + mostly and should only be used if they are verified to improve matters. + For more input see GCC manual (available in GCC 3.1.1 and later) +*/ + +#if (__GNUC__ > 3) || (__GNUC__ == 3 && __GNUC_MINOR > 10) +#define PREFETCH_READ(addr) __builtin_prefetch(addr, 0, 3) +#define PREFETCH_WRITE(addr) \ + __builtin_prefetch(addr, 1, 3) +#define PREFETCH_READ_LOCALITY(addr, locality) \ + __builtin_prefetch(addr, 0, locality) +#define PREFETCH_WRITE_LOCALITY(addr, locality) \ + __builtin_prefetch(addr, 1, locality) +#else +#define PREFETCH_READ(addr) +#define PREFETCH_READ_LOCALITY(addr, locality) +#define PREFETCH_WRITE(addr) +#define PREFETCH_WRITE_LOCALITY(addr, locality) +#endif + +/* + The following macro is used to ensure that code often used in most + SQL statements and definitely for parts of the SQL processing are + kept in a code segment by itself. This has the advantage that the + risk of common code being overlapping in caches of the CPU is less. + This can be a cause of big performance problems. + Routines should be put in this category with care and when they are + put there one should also strive to make as much of the error handling + as possible (or uncommon code of the routine) to execute in a + separate method to avoid moving to much code to this code segment. + + It is very easy to use, simply add HOT_METHOD at the end of the + function declaration. + For more input see GCC manual (available in GCC 2.95 and later) +*/ + +#if (__GNUC__ > 2) || (__GNUC__ == 2 && __GNUC_MINOR > 94) +#define HOT_METHOD \ + __attribute__ ((section ("hot_code_section"))) +#else +#define HOT_METHOD +#endif + +/* + The following macro is used to ensure that popular global variables + are located next to each other to avoid that they contend for the + same cache lines. + + It is very easy to use, simply add HOT_DATA at the end of the declaration + of the variable, the variable must be initialised because of the way + that linker works so a declaration using HOT_DATA should look like: + uint global_hot_data HOT_DATA = 0; + For more input see GCC manual (available in GCC 2.95 and later) +*/ + +#if (__GNUC__ > 2) || (__GNUC__ == 2 && __GNUC_MINOR > 94) +#define HOT_DATA \ + __attribute__ ((section ("hot_data_section"))) +#else +#define HOT_DATA +#endif + +/* + now let's figure out if inline functions are supported + autoconf defines 'inline' to be empty, if not +*/ +#define inline_test_1(X) X ## 1 +#define inline_test_2(X) inline_test_1(X) +#if inline_test_2(inline) != 1 +#define HAVE_INLINE +#endif +#undef inline_test_2 +#undef inline_test_1 +/* helper macro for "instantiating" inline functions */ +#define STATIC_INLINE static inline + +/* + The following macros are used to control inlining a bit more than + usual. These macros are used to ensure that inlining always or + never occurs (independent of compilation mode). + For more input see GCC manual (available in GCC 3.1.1 and later) +*/ + +#if (__GNUC__ > 3) || (__GNUC__ == 3 && __GNUC_MINOR > 10) +#define ALWAYS_INLINE __attribute__ ((always_inline)) +#define NEVER_INLINE __attribute__ ((noinline)) +#else +#define ALWAYS_INLINE +#define NEVER_INLINE +#endif + + +/* Fix problem with S_ISLNK() on Linux */ +#if defined(TARGET_OS_LINUX) || defined(__GLIBC__) +#undef _GNU_SOURCE +#define _GNU_SOURCE 1 +#endif + +/* + Temporary solution to solve bug#7156. Include "sys/types.h" before + the thread headers, else the function madvise() will not be defined +*/ +#if defined(HAVE_SYS_TYPES_H) && ( defined(sun) || defined(__sun) ) +#include +#endif + +/* The client defines this to avoid all thread code */ +#if defined(MYSQL_CLIENT_NO_THREADS) || defined(UNDEF_THREADS_HACK) +#undef THREAD +#undef HAVE_LINUXTHREADS +#undef HAVE_NPTL +#endif + +#ifdef HAVE_THREADS_WITHOUT_SOCKETS +/* MIT pthreads does not work with unix sockets */ +#undef HAVE_SYS_UN_H +#endif + +#define __EXTENSIONS__ 1 /* We want some extension */ +#ifndef __STDC_EXT__ +#define __STDC_EXT__ 1 /* To get large file support on hpux */ +#endif + +/* + Solaris 9 include file refers to X/Open document + + System Interfaces and Headers, Issue 5 + + saying we should define _XOPEN_SOURCE=500 to get POSIX.1c prototypes, + but apparently other systems (namely FreeBSD) don't agree. + + On a newer Solaris 10, the above file recognizes also _XOPEN_SOURCE=600. + Furthermore, it tests that if a program requires older standard + (_XOPEN_SOURCE<600 or _POSIX_C_SOURCE<200112L) it cannot be + run on a new compiler (that defines _STDC_C99) and issues an #error. + It's also an #error if a program requires new standard (_XOPEN_SOURCE=600 + or _POSIX_C_SOURCE=200112L) and a compiler does not define _STDC_C99. + + To add more to this mess, Sun Studio C compiler defines _STDC_C99 while + C++ compiler does not! + + So, in a desperate attempt to get correct prototypes for both + C and C++ code, we define either _XOPEN_SOURCE=600 or _XOPEN_SOURCE=500 + depending on the compiler's announced C standard support. + + Cleaner solutions are welcome. +*/ +#ifdef __sun +#if __STDC_VERSION__ - 0 >= 199901L +#define _XOPEN_SOURCE 600 +#else +#define _XOPEN_SOURCE 500 +#endif +#endif + +#if defined(THREAD) && !defined(__WIN__) +#ifndef _POSIX_PTHREAD_SEMANTICS +#define _POSIX_PTHREAD_SEMANTICS /* We want posix threads */ +#endif + +#if !defined(SCO) +#define _REENTRANT 1 /* Some thread libraries require this */ +#endif +#if !defined(_THREAD_SAFE) && !defined(_AIX) +#define _THREAD_SAFE /* Required for OSF1 */ +#endif +#if defined(HPUX10) || defined(HPUX11) +C_MODE_START /* HPUX needs this, signal.h bug */ +#include +C_MODE_END +#else +#include /* AIX must have this included first */ +#endif +#if !defined(SCO) && !defined(_REENTRANT) +#define _REENTRANT 1 /* Threads requires reentrant code */ +#endif +#endif /* THREAD */ + +/* Go around some bugs in different OS and compilers */ +#ifdef _AIX /* By soren@t.dk */ +#define _H_STRINGS +#define _SYS_STREAM_H +/* #define _AIX32_CURSES */ /* XXX: this breaks AIX 4.3.3 (others?). */ +#define ulonglong2double(A) my_ulonglong2double(A) +#define my_off_t2double(A) my_ulonglong2double(A) +C_MODE_START +double my_ulonglong2double(unsigned long long A); +C_MODE_END +#endif /* _AIX */ + +#ifdef HAVE_BROKEN_SNPRINTF /* HPUX 10.20 don't have this defined */ +#undef HAVE_SNPRINTF +#endif +#ifdef HAVE_BROKEN_PREAD +/* + pread()/pwrite() are not 64 bit safe on HP-UX 11.0 without + installing the kernel patch PHKL_20349 or greater +*/ +#undef HAVE_PREAD +#undef HAVE_PWRITE +#endif +#if defined(HAVE_BROKEN_INLINE) && !defined(__cplusplus) +#undef inline +#define inline +#endif + +#ifdef UNDEF_HAVE_GETHOSTBYNAME_R /* For OSF4.x */ +#undef HAVE_GETHOSTBYNAME_R +#endif +#ifdef UNDEF_HAVE_INITGROUPS /* For AIX 4.3 */ +#undef HAVE_INITGROUPS +#endif + +/* gcc/egcs issues */ + +#if defined(__GNUC) && defined(__EXCEPTIONS) +#error "Please add -fno-exceptions to CXXFLAGS and reconfigure/recompile" +#endif + + +/* Fix a bug in gcc 2.8.0 on IRIX 6.2 */ +#if SIZEOF_LONG == 4 && defined(__LONG_MAX__) && (__GNUC__ == 2 && __GNUC_MINOR__ == 8) +#undef __LONG_MAX__ /* Is a longlong value in gcc 2.8.0 ??? */ +#define __LONG_MAX__ 2147483647 +#endif + +/* egcs 1.1.2 has a problem with memcpy on Alpha */ +#if defined(__GNUC__) && defined(__alpha__) && ! (__GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 95)) +#define BAD_MEMCPY +#endif + +#if defined(_lint) && !defined(lint) +#define lint +#endif +#if SIZEOF_LONG_LONG > 4 && !defined(_LONG_LONG) +#define _LONG_LONG 1 /* For AIX string library */ +#endif + +#ifndef stdin +#include +#endif +#ifdef HAVE_STDLIB_H +#include +#endif +#ifdef HAVE_STDDEF_H +#include +#endif + +#include +#ifdef HAVE_LIMITS_H +#include +#endif +#ifdef HAVE_FLOAT_H +#include +#endif +#ifdef HAVE_FENV_H +#include /* For fesetround() */ +#endif + +#ifdef HAVE_SYS_TYPES_H +#include +#endif +#ifdef HAVE_FCNTL_H +#include +#endif +#ifdef HAVE_SYS_TIMEB_H +#include /* Avoid warnings on SCO */ +#endif +#if TIME_WITH_SYS_TIME +# include +# include +#else +# if HAVE_SYS_TIME_H +# include +# else +# include +# endif +#endif /* TIME_WITH_SYS_TIME */ +#ifdef HAVE_UNISTD_H +#include +#endif +#if defined(__cplusplus) && defined(NO_CPLUSPLUS_ALLOCA) +#undef HAVE_ALLOCA +#undef HAVE_ALLOCA_H +#endif +#ifdef HAVE_ALLOCA_H +#include +#endif + +#include /* Recommended by debian */ +/* We need the following to go around a problem with openssl on solaris */ +#if defined(HAVE_CRYPT_H) +#include +#endif + +/* + A lot of our programs uses asserts, so better to always include it + This also fixes a problem when people uses DBUG_ASSERT without including + assert.h +*/ +#include + +/* an assert that works at compile-time. only for constant expression */ +#ifndef __GNUC__ +#define compile_time_assert(X) do { } while(0) +#else +#define compile_time_assert(X) \ + do \ + { \ + char compile_time_assert[(X) ? 1 : -1] \ + __attribute__ ((unused)); \ + } while(0) +#endif + +/* Go around some bugs in different OS and compilers */ +#if defined (HPUX11) && defined(_LARGEFILE_SOURCE) +#define _LARGEFILE64_SOURCE +#endif +#if defined(_HPUX_SOURCE) && defined(HAVE_SYS_STREAM_H) +#include /* HPUX 10.20 defines ulong here. UGLY !!! */ +#define HAVE_ULONG +#endif +#if defined(HPUX10) && defined(_LARGEFILE64_SOURCE) && defined(THREAD) +/* Fix bug in setrlimit */ +#undef setrlimit +#define setrlimit cma_setrlimit64 +#endif +/* Declare madvise where it is not declared for C++, like Solaris */ +#if HAVE_MADVISE && !HAVE_DECL_MADVISE && defined(__cplusplus) +extern "C" int madvise(void *addr, size_t len, int behav); +#endif + +#ifdef __QNXNTO__ +/* This has to be after include limits.h */ +#define HAVE_ERRNO_AS_DEFINE +#define HAVE_FCNTL_LOCK +#undef HAVE_FINITE +#undef LONGLONG_MIN /* These get wrongly defined in QNX 6.2 */ +#undef LONGLONG_MAX /* standard system library 'limits.h' */ +#ifdef __cplusplus +#ifndef HAVE_RINT +#define HAVE_RINT +#endif /* rint() and isnan() functions are not */ +#define rint(a) std::rint(a) /* visible in C++ scope due to an error */ +#define isnan(a) std::isnan(a) /* in the usr/include/math.h on QNX */ +#endif +#endif + +/* We can not live without the following defines */ + +#define USE_MYFUNC 1 /* Must use syscall indirection */ +#define MASTER 1 /* Compile without unireg */ +#define ENGLISH 1 /* Messages in English */ +#define POSIX_MISTAKE 1 /* regexp: Fix stupid spec error */ +#define USE_REGEX 1 /* We want the use the regex library */ +/* Do not define for ultra sparcs */ +#define USE_BMOVE512 1 /* Use this unless system bmove is faster */ + +#define QUOTE_ARG(x) #x /* Quote argument (before cpp) */ +#define STRINGIFY_ARG(x) QUOTE_ARG(x) /* Quote argument, after cpp */ + +/* Paranoid settings. Define I_AM_PARANOID if you are paranoid */ +#ifdef I_AM_PARANOID +#define DONT_ALLOW_USER_CHANGE 1 +#define DONT_USE_MYSQL_PWD 1 +#endif + +/* Does the system remember a signal handler after a signal ? */ +#ifndef HAVE_BSD_SIGNALS +#define DONT_REMEMBER_SIGNAL +#endif + +/* Define void to stop lint from generating "null effekt" comments */ +#ifndef DONT_DEFINE_VOID +#ifdef _lint +int __void__; +#define VOID(X) (__void__ = (int) (X)) +#else +#undef VOID +#define VOID(X) (X) +#endif +#endif /* DONT_DEFINE_VOID */ + +#if defined(_lint) || defined(FORCE_INIT_OF_VARS) +#define LINT_INIT(var) var=0 /* No uninitialize-warning */ +#else +#define LINT_INIT(var) +#endif + +/* + Suppress uninitialized variable warning without generating code. + + The _cplusplus is a temporary workaround for C++ code pending a fix + for a g++ bug (http://gcc.gnu.org/bugzilla/show_bug.cgi?id=34772). +*/ +#if defined(_lint) || defined(FORCE_INIT_OF_VARS) || defined(__cplusplus) || \ + !defined(__GNUC__) +#define UNINIT_VAR(x) x= 0 +#else +#define UNINIT_VAR(x) x= x +#endif + +/* Define some useful general macros */ +#if !defined(max) +#define max(a, b) ((a) > (b) ? (a) : (b)) +#define min(a, b) ((a) < (b) ? (a) : (b)) +#endif + +#if !defined(HAVE_UINT) +#undef HAVE_UINT +#define HAVE_UINT +typedef unsigned int uint; +typedef unsigned short ushort; +#endif + +#define CMP_NUM(a,b) (((a) < (b)) ? -1 : ((a) == (b)) ? 0 : 1) +#define sgn(a) (((a) < 0) ? -1 : ((a) > 0) ? 1 : 0) +#define swap_variables(t, a, b) { t dummy; dummy= a; a= b; b= dummy; } +#define test(a) ((a) ? 1 : 0) +#define set_if_bigger(a,b) do { if ((a) < (b)) (a)=(b); } while(0) +#define set_if_smaller(a,b) do { if ((a) > (b)) (a)=(b); } while(0) +#define test_all_bits(a,b) (((a) & (b)) == (b)) +#define set_bits(type, bit_count) (sizeof(type)*8 <= (bit_count) ? ~(type) 0 : ((((type) 1) << (bit_count)) - (type) 1)) +#define array_elements(A) ((uint) (sizeof(A)/sizeof(A[0]))) + +/* Define some general constants */ +#ifndef TRUE +#define TRUE (1) /* Logical true */ +#define FALSE (0) /* Logical false */ +#endif + +#if defined(__GNUC__) +#define function_volatile volatile +#define my_reinterpret_cast(A) reinterpret_cast +#define my_const_cast(A) const_cast +# ifndef GCC_VERSION +# define GCC_VERSION (__GNUC__ * 1000 + __GNUC_MINOR__) +# endif +#elif !defined(my_reinterpret_cast) +#define my_reinterpret_cast(A) (A) +#define my_const_cast(A) (A) +#endif + +#include + +/* + Wen using the embedded library, users might run into link problems, + duplicate declaration of __cxa_pure_virtual, solved by declaring it a + weak symbol. +*/ +#if defined(USE_MYSYS_NEW) && ! defined(DONT_DECLARE_CXA_PURE_VIRTUAL) +C_MODE_START +int __cxa_pure_virtual () __attribute__ ((weak)); +C_MODE_END +#endif + +/* From old s-system.h */ + +/* + Support macros for non ansi & other old compilers. Since such + things are no longer supported we do nothing. We keep then since + some of our code may still be needed to upgrade old customers. +*/ +#define _VARARGS(X) X +#define _STATIC_VARARGS(X) X + +/* The DBUG_ON flag always takes precedence over default DBUG_OFF */ +#if defined(DBUG_ON) && defined(DBUG_OFF) +#undef DBUG_OFF +#endif + +/* We might be forced to turn debug off, if not turned off already */ +#if (defined(FORCE_DBUG_OFF) || defined(_lint)) && !defined(DBUG_OFF) +# define DBUG_OFF +# ifdef DBUG_ON +# undef DBUG_ON +# endif +#endif + +#include + +#define MIN_ARRAY_SIZE 0 /* Zero or One. Gcc allows zero*/ +#define ASCII_BITS_USED 8 /* Bit char used */ +#define NEAR_F /* No near function handling */ + +/* Some types that is different between systems */ + +typedef int File; /* File descriptor */ +#ifndef Socket_defined +typedef int my_socket; /* File descriptor for sockets */ +#define INVALID_SOCKET -1 +#endif +/* Type for fuctions that handles signals */ +#define sig_handler RETSIGTYPE +C_MODE_START +typedef void (*sig_return)();/* Returns type from signal */ +C_MODE_END +#if defined(__GNUC__) && !defined(_lint) +typedef char pchar; /* Mixed prototypes can take char */ +typedef char puchar; /* Mixed prototypes can take char */ +typedef char pbool; /* Mixed prototypes can take char */ +typedef short pshort; /* Mixed prototypes can take short int */ +typedef float pfloat; /* Mixed prototypes can take float */ +#else +typedef int pchar; /* Mixed prototypes can't take char */ +typedef uint puchar; /* Mixed prototypes can't take char */ +typedef int pbool; /* Mixed prototypes can't take char */ +typedef int pshort; /* Mixed prototypes can't take short int */ +typedef double pfloat; /* Mixed prototypes can't take float */ +#endif +C_MODE_START +typedef int (*qsort_cmp)(const void *,const void *); +typedef int (*qsort_cmp2)(void*, const void *,const void *); +C_MODE_END +#define qsort_t RETQSORTTYPE /* Broken GCC cant handle typedef !!!! */ +#ifdef HAVE_SYS_SOCKET_H +#include +#endif +typedef SOCKET_SIZE_TYPE size_socket; + +#ifndef SOCKOPT_OPTLEN_TYPE +#define SOCKOPT_OPTLEN_TYPE size_socket +#endif + +/* file create flags */ + +#ifndef O_SHARE /* Probably not windows */ +#define O_SHARE 0 /* Flag to my_open for shared files */ +#ifndef O_BINARY +#define O_BINARY 0 /* Flag to my_open for binary files */ +#endif +#ifndef FILE_BINARY +#define FILE_BINARY O_BINARY /* Flag to my_fopen for binary streams */ +#endif +#ifdef HAVE_FCNTL +#define HAVE_FCNTL_LOCK +#define F_TO_EOF 0L /* Param to lockf() to lock rest of file */ +#endif +#endif /* O_SHARE */ + +#ifndef O_TEMPORARY +#define O_TEMPORARY 0 +#endif +#ifndef O_SHORT_LIVED +#define O_SHORT_LIVED 0 +#endif +#ifndef O_NOFOLLOW +#define O_NOFOLLOW 0 +#endif + +/* additional file share flags for win32 */ +#ifdef __WIN__ +#define _SH_DENYRWD 0x110 /* deny read/write mode & delete */ +#define _SH_DENYWRD 0x120 /* deny write mode & delete */ +#define _SH_DENYRDD 0x130 /* deny read mode & delete */ +#define _SH_DENYDEL 0x140 /* deny delete only */ +#endif /* __WIN__ */ + + +/* #define USE_RECORD_LOCK */ + + /* Unsigned types supported by the compiler */ +#define UNSINT8 /* unsigned int8 (char) */ +#define UNSINT16 /* unsigned int16 */ +#define UNSINT32 /* unsigned int32 */ + + /* General constants */ +#define FN_LEN 256 /* Max file name len */ +#define FN_HEADLEN 253 /* Max length of filepart of file name */ +#define FN_EXTLEN 20 /* Max length of extension (part of FN_LEN) */ +#define FN_REFLEN 512 /* Max length of full path-name */ +#define FN_EXTCHAR '.' +#define FN_HOMELIB '~' /* ~/ is used as abbrev for home dir */ +#define FN_CURLIB '.' /* ./ is used as abbrev for current dir */ +#define FN_PARENTDIR ".." /* Parent directory; Must be a string */ + +#ifndef FN_LIBCHAR +#define FN_LIBCHAR '/' +#define FN_ROOTDIR "/" +#endif +#define MY_NFILE 64 /* This is only used to save filenames */ +#ifndef OS_FILE_LIMIT +#define OS_FILE_LIMIT 65535 +#endif + +/* #define EXT_IN_LIBNAME */ +/* #define FN_NO_CASE_SENCE */ +/* #define FN_UPPER_CASE TRUE */ + +/* + Io buffer size; Must be a power of 2 and a multiple of 512. May be + smaller what the disk page size. This influences the speed of the + isam btree library. eg to big to slow. +*/ +#define IO_SIZE 4096 +/* + How much overhead does malloc have. The code often allocates + something like 1024-MALLOC_OVERHEAD bytes +*/ +#ifdef SAFEMALLOC +#define MALLOC_OVERHEAD (8+24+4) +#else +#define MALLOC_OVERHEAD 8 +#endif + /* get memory in huncs */ +#define ONCE_ALLOC_INIT (uint) (4096-MALLOC_OVERHEAD) + /* Typical record cash */ +#define RECORD_CACHE_SIZE (uint) (64*1024-MALLOC_OVERHEAD) + /* Typical key cash */ +#define KEY_CACHE_SIZE (uint) (8*1024*1024-MALLOC_OVERHEAD) + /* Default size of a key cache block */ +#define KEY_CACHE_BLOCK_SIZE (uint) 1024 + + + /* Some things that this system doesn't have */ + +#define NO_HASH /* Not needed anymore */ +#ifdef __WIN__ +#define NO_DIR_LIBRARY /* Not standar dir-library */ +#define USE_MY_STAT_STRUCT /* For my_lib */ +#endif + +/* Some defines of functions for portability */ + +#undef remove /* Crashes MySQL on SCO 5.0.0 */ +#ifndef __WIN__ +#define closesocket(A) close(A) +#ifndef ulonglong2double +#define ulonglong2double(A) ((double) (ulonglong) (A)) +#define my_off_t2double(A) ((double) (my_off_t) (A)) +#endif +#ifndef double2ulonglong +#define double2ulonglong(A) ((ulonglong) (double) (A)) +#endif +#endif + +#ifndef offsetof +#define offsetof(TYPE, MEMBER) ((size_t) &((TYPE *)0)->MEMBER) +#endif +#define ulong_to_double(X) ((double) (ulong) (X)) +#define SET_STACK_SIZE(X) /* Not needed on real machines */ + +#ifndef STACK_DIRECTION +#error "please add -DSTACK_DIRECTION=1 or -1 to your CPPFLAGS" +#endif + +#if !defined(HAVE_STRTOK_R) +#define strtok_r(A,B,C) strtok((A),(B)) +#endif + +/* This is from the old m-machine.h file */ + +#if SIZEOF_LONG_LONG > 4 +#define HAVE_LONG_LONG 1 +#endif + +/* + Some pre-ANSI-C99 systems like AIX 5.1 and Linux/GCC 2.95 define + ULONGLONG_MAX, LONGLONG_MIN, LONGLONG_MAX; we use them if they're defined. + Also on Windows we define these constants by hand in config-win.h. +*/ + +#if defined(HAVE_LONG_LONG) && !defined(LONGLONG_MIN) +#define LONGLONG_MIN ((long long) 0x8000000000000000LL) +#define LONGLONG_MAX ((long long) 0x7FFFFFFFFFFFFFFFLL) +#endif + +#if defined(HAVE_LONG_LONG) && !defined(ULONGLONG_MAX) +/* First check for ANSI C99 definition: */ +#ifdef ULLONG_MAX +#define ULONGLONG_MAX ULLONG_MAX +#else +#define ULONGLONG_MAX ((unsigned long long)(~0ULL)) +#endif +#endif /* defined (HAVE_LONG_LONG) && !defined(ULONGLONG_MAX)*/ + +#define INT_MIN32 (~0x7FFFFFFFL) +#define INT_MAX32 0x7FFFFFFFL +#define UINT_MAX32 0xFFFFFFFFL +#define INT_MIN24 (~0x007FFFFF) +#define INT_MAX24 0x007FFFFF +#define UINT_MAX24 0x00FFFFFF +#define INT_MIN16 (~0x7FFF) +#define INT_MAX16 0x7FFF +#define UINT_MAX16 0xFFFF +#define INT_MIN8 (~0x7F) +#define INT_MAX8 0x7F +#define UINT_MAX8 0xFF + +/* From limits.h instead */ +#ifndef DBL_MIN +#define DBL_MIN 4.94065645841246544e-324 +#define FLT_MIN ((float)1.40129846432481707e-45) +#endif +#ifndef DBL_MAX +#define DBL_MAX 1.79769313486231470e+308 +#define FLT_MAX ((float)3.40282346638528860e+38) +#endif +#ifndef SIZE_T_MAX +#define SIZE_T_MAX (~((size_t) 0)) +#endif + +#ifndef isfinite +#ifdef HAVE_FINITE +#define isfinite(x) finite(x) +#else +#define finite(x) (1.0 / fabs(x) > 0.0) +#endif /* HAVE_FINITE */ +#endif /* isfinite */ + +#ifndef HAVE_ISNAN +#define isnan(x) ((x) != (x)) +#endif + +#ifdef HAVE_ISINF +/* Check if C compiler is affected by GCC bug #39228 */ +#if !defined(__cplusplus) && defined(HAVE_BROKEN_ISINF) +/* Force store/reload of the argument to/from a 64-bit double */ +static inline double my_isinf(double x) +{ + volatile double t= x; + return isinf(t); +} +#else +/* System-provided isinf() is available and safe to use */ +#define my_isinf(X) isinf(X) +#endif +#else /* !HAVE_ISINF */ +#define my_isinf(X) (!finite(X) && !isnan(X)) +#endif + +/* Define missing math constants. */ +#ifndef M_PI +#define M_PI 3.14159265358979323846 +#endif +#ifndef M_E +#define M_E 2.7182818284590452354 +#endif +#ifndef M_LN2 +#define M_LN2 0.69314718055994530942 +#endif + +/* + Max size that must be added to a so that we know Size to make + adressable obj. +*/ +#if SIZEOF_CHARP == 4 +typedef long my_ptrdiff_t; +#else +typedef long long my_ptrdiff_t; +#endif + +#define MY_ALIGN(A,L) (((A) + (L) - 1) & ~((L) - 1)) +#define ALIGN_SIZE(A) MY_ALIGN((A),sizeof(double)) +/* Size to make adressable obj. */ +#define ALIGN_PTR(A, t) ((t*) MY_ALIGN((A),sizeof(t))) + /* Offset of field f in structure t */ +#define OFFSET(t, f) ((size_t)(char *)&((t *)0)->f) +#define ADD_TO_PTR(ptr,size,type) (type) ((uchar*) (ptr)+size) +#define PTR_BYTE_DIFF(A,B) (my_ptrdiff_t) ((uchar*) (A) - (uchar*) (B)) + +#define MY_DIV_UP(A, B) (((A) + (B) - 1) / (B)) +#define MY_ALIGNED_BYTE_ARRAY(N, S, T) T N[MY_DIV_UP(S, sizeof(T))] + +/* + Custom version of standard offsetof() macro which can be used to get + offsets of members in class for non-POD types (according to the current + version of C++ standard offsetof() macro can't be used in such cases and + attempt to do so causes warnings to be emitted, OTOH in many cases it is + still OK to assume that all instances of the class has the same offsets + for the same members). + + This is temporary solution which should be removed once File_parser class + and related routines are refactored. +*/ + +#define my_offsetof(TYPE, MEMBER) \ + ((size_t)((char *)&(((TYPE *)0x10)->MEMBER) - (char*)0x10)) + +#define NullS (char *) 0 +/* Nowdays we do not support MessyDos */ +#ifndef NEAR +#define NEAR /* Who needs segments ? */ +#define FAR /* On a good machine */ +#ifndef HUGE_PTR +#define HUGE_PTR +#endif +#endif +#if defined(__IBMC__) || defined(__IBMCPP__) +/* This was _System _Export but caused a lot of warnings on _AIX43 */ +#define STDCALL +#elif !defined( STDCALL) +#define STDCALL +#endif + +/* Typdefs for easyier portability */ + +#ifndef HAVE_UCHAR +typedef unsigned char uchar; /* Short for unsigned char */ +#endif + +#ifndef HAVE_INT8 +typedef signed char int8; /* Signed integer >= 8 bits */ +#endif +#ifndef HAVE_UINT8 +typedef unsigned char uint8; /* Unsigned integer >= 8 bits */ +#endif +#ifndef HAVE_INT16 +typedef short int16; +#endif +#ifndef HAVE_UINT16 +typedef unsigned short uint16; +#endif +#if SIZEOF_INT == 4 +#ifndef HAVE_INT32 +typedef int int32; +#endif +#ifndef HAVE_UINT32 +typedef unsigned int uint32; +#endif +#elif SIZEOF_LONG == 4 +#ifndef HAVE_INT32 +typedef long int32; +#endif +#ifndef HAVE_UINT32 +typedef unsigned long uint32; +#endif +#else +#error Neither int or long is of 4 bytes width +#endif + +#if !defined(HAVE_ULONG) && !defined(__USE_MISC) +typedef unsigned long ulong; /* Short for unsigned long */ +#endif +#ifndef longlong_defined +/* + Using [unsigned] long long is preferable as [u]longlong because we use + [unsigned] long long unconditionally in many places, + for example in constants with [U]LL suffix. +*/ +#if defined(HAVE_LONG_LONG) && SIZEOF_LONG_LONG == 8 +typedef unsigned long long int ulonglong; /* ulong or unsigned long long */ +typedef long long int longlong; +#else +typedef unsigned long ulonglong; /* ulong or unsigned long long */ +typedef long longlong; +#endif +#endif +#ifndef HAVE_INT64 +typedef longlong int64; +#endif +#ifndef HAVE_UINT64 +typedef ulonglong uint64; +#endif + +#if defined(NO_CLIENT_LONG_LONG) +typedef unsigned long my_ulonglong; +#elif defined (__WIN__) +typedef unsigned __int64 my_ulonglong; +#else +typedef unsigned long long my_ulonglong; +#endif + +#if SIZEOF_CHARP == SIZEOF_INT +typedef int intptr; +#elif SIZEOF_CHARP == SIZEOF_LONG +typedef long intptr; +#elif SIZEOF_CHARP == SIZEOF_LONG_LONG +typedef long long intptr; +#else +#error sizeof(void *) is neither sizeof(int) nor sizeof(long) nor sizeof(long long) +#endif + +#define MY_ERRPTR ((void*)(intptr)1) + +#ifdef USE_RAID +/* + The following is done with a if to not get problems with pre-processors + with late define evaluation +*/ +#if SIZEOF_OFF_T == 4 +#define SYSTEM_SIZEOF_OFF_T 4 +#else +#define SYSTEM_SIZEOF_OFF_T 8 +#endif +#undef SIZEOF_OFF_T +#define SIZEOF_OFF_T 8 +#else +#define SYSTEM_SIZEOF_OFF_T SIZEOF_OFF_T +#endif /* USE_RAID */ + +#if SIZEOF_OFF_T > 4 +typedef ulonglong my_off_t; +#else +typedef unsigned long my_off_t; +#endif +#define MY_FILEPOS_ERROR (~(my_off_t) 0) +#if !defined(__WIN__) +typedef off_t os_off_t; +#endif + +#if defined(__WIN__) +#define socket_errno WSAGetLastError() +#define SOCKET_EINTR WSAEINTR +#define SOCKET_EAGAIN WSAEINPROGRESS +#define SOCKET_ETIMEDOUT WSAETIMEDOUT +#define SOCKET_EWOULDBLOCK WSAEWOULDBLOCK +#define SOCKET_EADDRINUSE WSAEADDRINUSE +#define SOCKET_ENFILE ENFILE +#define SOCKET_EMFILE EMFILE +#else /* Unix */ +#define socket_errno errno +#define closesocket(A) close(A) +#define SOCKET_EINTR EINTR +#define SOCKET_EAGAIN EAGAIN +#define SOCKET_ETIMEDOUT SOCKET_EINTR +#define SOCKET_EWOULDBLOCK EWOULDBLOCK +#define SOCKET_EADDRINUSE EADDRINUSE +#define SOCKET_ENFILE ENFILE +#define SOCKET_EMFILE EMFILE +#endif + +typedef uint8 int7; /* Most effective integer 0 <= x <= 127 */ +typedef short int15; /* Most effective integer 0 <= x <= 32767 */ +typedef int myf; /* Type of MyFlags in my_funcs */ +typedef char my_bool; /* Small bool */ +#if !defined(bool) && (!defined(HAVE_BOOL) || !defined(__cplusplus)) +typedef char bool; /* Ordinary boolean values 0 1 */ +#endif + /* Macros for converting *constants* to the right type */ +#define INT8(v) (int8) (v) +#define INT16(v) (int16) (v) +#define INT32(v) (int32) (v) +#define MYF(v) (myf) (v) + +#ifndef LL +#ifdef HAVE_LONG_LONG +#define LL(A) A ## LL +#else +#define LL(A) A ## L +#endif +#endif + +#ifndef ULL +#ifdef HAVE_LONG_LONG +#define ULL(A) A ## ULL +#else +#define ULL(A) A ## UL +#endif +#endif + +/* + Defines to make it possible to prioritize register assignments. No + longer that important with modern compilers. +*/ +#ifndef USING_X +#define reg1 register +#define reg2 register +#define reg3 register +#define reg4 register +#define reg5 register +#define reg6 register +#define reg7 register +#define reg8 register +#define reg9 register +#define reg10 register +#define reg11 register +#define reg12 register +#define reg13 register +#define reg14 register +#define reg15 register +#define reg16 register +#endif + +/* + Sometimes we want to make sure that the variable is not put into + a register in debugging mode so we can see its value in the core +*/ + +#ifndef DBUG_OFF +#define dbug_volatile volatile +#else +#define dbug_volatile +#endif + +/* Some helper macros */ +#define YESNO(X) ((X) ? "yes" : "no") + +/* Defines for time function */ +#define SCALE_SEC 100 +#define SCALE_USEC 10000 +#define MY_HOW_OFTEN_TO_ALARM 2 /* How often we want info on screen */ +#define MY_HOW_OFTEN_TO_WRITE 1000 /* How often we want info on screen */ + + + +/* + Define-funktions for reading and storing in machine independent format + (low byte first) +*/ + +/* Optimized store functions for Intel x86 */ +#if defined(__i386__) || defined(_WIN32) +#define sint2korr(A) (*((int16 *) (A))) +#define sint3korr(A) ((int32) ((((uchar) (A)[2]) & 128) ? \ + (((uint32) 255L << 24) | \ + (((uint32) (uchar) (A)[2]) << 16) |\ + (((uint32) (uchar) (A)[1]) << 8) | \ + ((uint32) (uchar) (A)[0])) : \ + (((uint32) (uchar) (A)[2]) << 16) |\ + (((uint32) (uchar) (A)[1]) << 8) | \ + ((uint32) (uchar) (A)[0]))) +#define sint4korr(A) (*((long *) (A))) +#define uint2korr(A) (*((uint16 *) (A))) +#if defined(HAVE_purify) && !defined(_WIN32) +#define uint3korr(A) (uint32) (((uint32) ((uchar) (A)[0])) +\ + (((uint32) ((uchar) (A)[1])) << 8) +\ + (((uint32) ((uchar) (A)[2])) << 16)) +#else +/* + ATTENTION ! + + Please, note, uint3korr reads 4 bytes (not 3) ! + It means, that you have to provide enough allocated space ! +*/ +#define uint3korr(A) (long) (*((unsigned int *) (A)) & 0xFFFFFF) +#endif /* HAVE_purify && !_WIN32 */ +#define uint4korr(A) (*((uint32 *) (A))) +#define uint5korr(A) ((ulonglong)(((uint32) ((uchar) (A)[0])) +\ + (((uint32) ((uchar) (A)[1])) << 8) +\ + (((uint32) ((uchar) (A)[2])) << 16) +\ + (((uint32) ((uchar) (A)[3])) << 24)) +\ + (((ulonglong) ((uchar) (A)[4])) << 32)) +#define uint6korr(A) ((ulonglong)(((uint32) ((uchar) (A)[0])) + \ + (((uint32) ((uchar) (A)[1])) << 8) + \ + (((uint32) ((uchar) (A)[2])) << 16) + \ + (((uint32) ((uchar) (A)[3])) << 24)) + \ + (((ulonglong) ((uchar) (A)[4])) << 32) + \ + (((ulonglong) ((uchar) (A)[5])) << 40)) +#define uint8korr(A) (*((ulonglong *) (A))) +#define sint8korr(A) (*((longlong *) (A))) +#define int2store(T,A) *((uint16*) (T))= (uint16) (A) +#define int3store(T,A) do { *(T)= (uchar) ((A));\ + *(T+1)=(uchar) (((uint) (A) >> 8));\ + *(T+2)=(uchar) (((A) >> 16)); } while (0) +#define int4store(T,A) *((long *) (T))= (long) (A) +#define int5store(T,A) do { *(T)= (uchar)((A));\ + *((T)+1)=(uchar) (((A) >> 8));\ + *((T)+2)=(uchar) (((A) >> 16));\ + *((T)+3)=(uchar) (((A) >> 24)); \ + *((T)+4)=(uchar) (((A) >> 32)); } while(0) +#define int6store(T,A) do { *(T)= (uchar)((A)); \ + *((T)+1)=(uchar) (((A) >> 8)); \ + *((T)+2)=(uchar) (((A) >> 16)); \ + *((T)+3)=(uchar) (((A) >> 24)); \ + *((T)+4)=(uchar) (((A) >> 32)); \ + *((T)+5)=(uchar) (((A) >> 40)); } while(0) +#define int8store(T,A) *((ulonglong *) (T))= (ulonglong) (A) + +typedef union { + double v; + long m[2]; +} doubleget_union; +#define doubleget(V,M) \ +do { doubleget_union _tmp; \ + _tmp.m[0] = *((long*)(M)); \ + _tmp.m[1] = *(((long*) (M))+1); \ + (V) = _tmp.v; } while(0) +#define doublestore(T,V) do { *((long *) T) = ((doubleget_union *)&V)->m[0]; \ + *(((long *) T)+1) = ((doubleget_union *)&V)->m[1]; \ + } while (0) +#define float4get(V,M) do { *((float *) &(V)) = *((float*) (M)); } while(0) +#define float8get(V,M) doubleget((V),(M)) +#define float4store(V,M) memcpy((uchar*) V,(uchar*) (&M),sizeof(float)) +#define floatstore(T,V) memcpy((uchar*)(T), (uchar*)(&V),sizeof(float)) +#define floatget(V,M) memcpy((uchar*) &V,(uchar*) (M),sizeof(float)) +#define float8store(V,M) doublestore((V),(M)) +#else + +/* + We're here if it's not a IA-32 architecture (Win32 and UNIX IA-32 defines + were done before) +*/ +#define sint2korr(A) (int16) (((int16) ((uchar) (A)[0])) +\ + ((int16) ((int16) (A)[1]) << 8)) +#define sint3korr(A) ((int32) ((((uchar) (A)[2]) & 128) ? \ + (((uint32) 255L << 24) | \ + (((uint32) (uchar) (A)[2]) << 16) |\ + (((uint32) (uchar) (A)[1]) << 8) | \ + ((uint32) (uchar) (A)[0])) : \ + (((uint32) (uchar) (A)[2]) << 16) |\ + (((uint32) (uchar) (A)[1]) << 8) | \ + ((uint32) (uchar) (A)[0]))) +#define sint4korr(A) (int32) (((int32) ((uchar) (A)[0])) +\ + (((int32) ((uchar) (A)[1]) << 8)) +\ + (((int32) ((uchar) (A)[2]) << 16)) +\ + (((int32) ((int16) (A)[3]) << 24))) +#define sint8korr(A) (longlong) uint8korr(A) +#define uint2korr(A) (uint16) (((uint16) ((uchar) (A)[0])) +\ + ((uint16) ((uchar) (A)[1]) << 8)) +#define uint3korr(A) (uint32) (((uint32) ((uchar) (A)[0])) +\ + (((uint32) ((uchar) (A)[1])) << 8) +\ + (((uint32) ((uchar) (A)[2])) << 16)) +#define uint4korr(A) (uint32) (((uint32) ((uchar) (A)[0])) +\ + (((uint32) ((uchar) (A)[1])) << 8) +\ + (((uint32) ((uchar) (A)[2])) << 16) +\ + (((uint32) ((uchar) (A)[3])) << 24)) +#define uint5korr(A) ((ulonglong)(((uint32) ((uchar) (A)[0])) +\ + (((uint32) ((uchar) (A)[1])) << 8) +\ + (((uint32) ((uchar) (A)[2])) << 16) +\ + (((uint32) ((uchar) (A)[3])) << 24)) +\ + (((ulonglong) ((uchar) (A)[4])) << 32)) +#define uint6korr(A) ((ulonglong)(((uint32) ((uchar) (A)[0])) + \ + (((uint32) ((uchar) (A)[1])) << 8) + \ + (((uint32) ((uchar) (A)[2])) << 16) + \ + (((uint32) ((uchar) (A)[3])) << 24)) + \ + (((ulonglong) ((uchar) (A)[4])) << 32) + \ + (((ulonglong) ((uchar) (A)[5])) << 40)) +#define uint8korr(A) ((ulonglong)(((uint32) ((uchar) (A)[0])) +\ + (((uint32) ((uchar) (A)[1])) << 8) +\ + (((uint32) ((uchar) (A)[2])) << 16) +\ + (((uint32) ((uchar) (A)[3])) << 24)) +\ + (((ulonglong) (((uint32) ((uchar) (A)[4])) +\ + (((uint32) ((uchar) (A)[5])) << 8) +\ + (((uint32) ((uchar) (A)[6])) << 16) +\ + (((uint32) ((uchar) (A)[7])) << 24))) <<\ + 32)) +#define int2store(T,A) do { uint def_temp= (uint) (A) ;\ + *((uchar*) (T))= (uchar)(def_temp); \ + *((uchar*) (T)+1)=(uchar)((def_temp >> 8)); \ + } while(0) +#define int3store(T,A) do { /*lint -save -e734 */\ + *((uchar*)(T))=(uchar) ((A));\ + *((uchar*) (T)+1)=(uchar) (((A) >> 8));\ + *((uchar*)(T)+2)=(uchar) (((A) >> 16)); \ + /*lint -restore */} while(0) +#define int4store(T,A) do { *((char *)(T))=(char) ((A));\ + *(((char *)(T))+1)=(char) (((A) >> 8));\ + *(((char *)(T))+2)=(char) (((A) >> 16));\ + *(((char *)(T))+3)=(char) (((A) >> 24)); } while(0) +#define int5store(T,A) do { *((char *)(T))= (char)((A)); \ + *(((char *)(T))+1)= (char)(((A) >> 8)); \ + *(((char *)(T))+2)= (char)(((A) >> 16)); \ + *(((char *)(T))+3)= (char)(((A) >> 24)); \ + *(((char *)(T))+4)= (char)(((A) >> 32)); \ + } while(0) +#define int6store(T,A) do { *((char *)(T))= (char)((A)); \ + *(((char *)(T))+1)= (char)(((A) >> 8)); \ + *(((char *)(T))+2)= (char)(((A) >> 16)); \ + *(((char *)(T))+3)= (char)(((A) >> 24)); \ + *(((char *)(T))+4)= (char)(((A) >> 32)); \ + *(((char *)(T))+5)= (char)(((A) >> 40)); \ + } while(0) +#define int8store(T,A) do { uint def_temp= (uint) (A), def_temp2= (uint) ((A) >> 32); \ + int4store((T),def_temp); \ + int4store((T+4),def_temp2); } while(0) +#ifdef WORDS_BIGENDIAN +#define float4store(T,A) do { *(T)= ((uchar *) &A)[3];\ + *((T)+1)=(char) ((uchar *) &A)[2];\ + *((T)+2)=(char) ((uchar *) &A)[1];\ + *((T)+3)=(char) ((uchar *) &A)[0]; } while(0) + +#define float4get(V,M) do { float def_temp;\ + ((uchar*) &def_temp)[0]=(M)[3];\ + ((uchar*) &def_temp)[1]=(M)[2];\ + ((uchar*) &def_temp)[2]=(M)[1];\ + ((uchar*) &def_temp)[3]=(M)[0];\ + (V)=def_temp; } while(0) +#define float8store(T,V) do { *(T)= ((uchar *) &V)[7];\ + *((T)+1)=(char) ((uchar *) &V)[6];\ + *((T)+2)=(char) ((uchar *) &V)[5];\ + *((T)+3)=(char) ((uchar *) &V)[4];\ + *((T)+4)=(char) ((uchar *) &V)[3];\ + *((T)+5)=(char) ((uchar *) &V)[2];\ + *((T)+6)=(char) ((uchar *) &V)[1];\ + *((T)+7)=(char) ((uchar *) &V)[0]; } while(0) + +#define float8get(V,M) do { double def_temp;\ + ((uchar*) &def_temp)[0]=(M)[7];\ + ((uchar*) &def_temp)[1]=(M)[6];\ + ((uchar*) &def_temp)[2]=(M)[5];\ + ((uchar*) &def_temp)[3]=(M)[4];\ + ((uchar*) &def_temp)[4]=(M)[3];\ + ((uchar*) &def_temp)[5]=(M)[2];\ + ((uchar*) &def_temp)[6]=(M)[1];\ + ((uchar*) &def_temp)[7]=(M)[0];\ + (V) = def_temp; } while(0) +#else +#define float4get(V,M) memcpy_fixed((uchar*) &V,(uchar*) (M),sizeof(float)) +#define float4store(V,M) memcpy_fixed((uchar*) V,(uchar*) (&M),sizeof(float)) + +#if defined(__FLOAT_WORD_ORDER) && (__FLOAT_WORD_ORDER == __BIG_ENDIAN) +#define doublestore(T,V) do { *(((char*)T)+0)=(char) ((uchar *) &V)[4];\ + *(((char*)T)+1)=(char) ((uchar *) &V)[5];\ + *(((char*)T)+2)=(char) ((uchar *) &V)[6];\ + *(((char*)T)+3)=(char) ((uchar *) &V)[7];\ + *(((char*)T)+4)=(char) ((uchar *) &V)[0];\ + *(((char*)T)+5)=(char) ((uchar *) &V)[1];\ + *(((char*)T)+6)=(char) ((uchar *) &V)[2];\ + *(((char*)T)+7)=(char) ((uchar *) &V)[3]; }\ + while(0) +#define doubleget(V,M) do { double def_temp;\ + ((uchar*) &def_temp)[0]=(M)[4];\ + ((uchar*) &def_temp)[1]=(M)[5];\ + ((uchar*) &def_temp)[2]=(M)[6];\ + ((uchar*) &def_temp)[3]=(M)[7];\ + ((uchar*) &def_temp)[4]=(M)[0];\ + ((uchar*) &def_temp)[5]=(M)[1];\ + ((uchar*) &def_temp)[6]=(M)[2];\ + ((uchar*) &def_temp)[7]=(M)[3];\ + (V) = def_temp; } while(0) +#endif /* __FLOAT_WORD_ORDER */ + +#define float8get(V,M) doubleget((V),(M)) +#define float8store(V,M) doublestore((V),(M)) +#endif /* WORDS_BIGENDIAN */ + +#endif /* __i386__ OR _WIN32 */ + +/* + Macro for reading 32-bit integer from network byte order (big-endian) + from unaligned memory location. +*/ +#define int4net(A) (int32) (((uint32) ((uchar) (A)[3])) |\ + (((uint32) ((uchar) (A)[2])) << 8) |\ + (((uint32) ((uchar) (A)[1])) << 16) |\ + (((uint32) ((uchar) (A)[0])) << 24)) +/* + Define-funktions for reading and storing in machine format from/to + short/long to/from some place in memory V should be a (not + register) variable, M is a pointer to byte +*/ + +#ifdef WORDS_BIGENDIAN + +#define ushortget(V,M) do { V = (uint16) (((uint16) ((uchar) (M)[1]))+\ + ((uint16) ((uint16) (M)[0]) << 8)); } while(0) +#define shortget(V,M) do { V = (short) (((short) ((uchar) (M)[1]))+\ + ((short) ((short) (M)[0]) << 8)); } while(0) +#define longget(V,M) do { int32 def_temp;\ + ((uchar*) &def_temp)[0]=(M)[0];\ + ((uchar*) &def_temp)[1]=(M)[1];\ + ((uchar*) &def_temp)[2]=(M)[2];\ + ((uchar*) &def_temp)[3]=(M)[3];\ + (V)=def_temp; } while(0) +#define ulongget(V,M) do { uint32 def_temp;\ + ((uchar*) &def_temp)[0]=(M)[0];\ + ((uchar*) &def_temp)[1]=(M)[1];\ + ((uchar*) &def_temp)[2]=(M)[2];\ + ((uchar*) &def_temp)[3]=(M)[3];\ + (V)=def_temp; } while(0) +#define shortstore(T,A) do { uint def_temp=(uint) (A) ;\ + *(((char*)T)+1)=(char)(def_temp); \ + *(((char*)T)+0)=(char)(def_temp >> 8); } while(0) +#define longstore(T,A) do { *(((char*)T)+3)=((A));\ + *(((char*)T)+2)=(((A) >> 8));\ + *(((char*)T)+1)=(((A) >> 16));\ + *(((char*)T)+0)=(((A) >> 24)); } while(0) + +#define floatget(V,M) memcpy_fixed((uchar*) &V,(uchar*) (M),sizeof(float)) +#define floatstore(T,V) memcpy_fixed((uchar*) (T),(uchar*)(&V),sizeof(float)) +#define doubleget(V,M) memcpy_fixed((uchar*) &V,(uchar*) (M),sizeof(double)) +#define doublestore(T,V) memcpy_fixed((uchar*) (T),(uchar*) &V,sizeof(double)) +#define longlongget(V,M) memcpy_fixed((uchar*) &V,(uchar*) (M),sizeof(ulonglong)) +#define longlongstore(T,V) memcpy_fixed((uchar*) (T),(uchar*) &V,sizeof(ulonglong)) + +#else + +#define ushortget(V,M) do { V = uint2korr(M); } while(0) +#define shortget(V,M) do { V = sint2korr(M); } while(0) +#define longget(V,M) do { V = sint4korr(M); } while(0) +#define ulongget(V,M) do { V = uint4korr(M); } while(0) +#define shortstore(T,V) int2store(T,V) +#define longstore(T,V) int4store(T,V) +#ifndef floatstore +#define floatstore(T,V) memcpy_fixed((uchar*) (T),(uchar*) (&V),sizeof(float)) +#define floatget(V,M) memcpy_fixed((uchar*) &V, (uchar*) (M), sizeof(float)) +#endif +#ifndef doubleget +#define doubleget(V,M) memcpy_fixed((uchar*) &V,(uchar*) (M),sizeof(double)) +#define doublestore(T,V) memcpy_fixed((uchar*) (T),(uchar*) &V,sizeof(double)) +#endif /* doubleget */ +#define longlongget(V,M) memcpy_fixed((uchar*) &V,(uchar*) (M),sizeof(ulonglong)) +#define longlongstore(T,V) memcpy_fixed((uchar*) (T),(uchar*) &V,sizeof(ulonglong)) + +#endif /* WORDS_BIGENDIAN */ + +/* sprintf does not always return the number of bytes :- */ +#ifdef SPRINTF_RETURNS_INT +#define my_sprintf(buff,args) sprintf args +#else +#ifdef SPRINTF_RETURNS_PTR +#define my_sprintf(buff,args) ((int)(sprintf args - buff)) +#else +#define my_sprintf(buff,args) ((ulong) sprintf args, (ulong) strlen(buff)) +#endif +#endif + +#ifndef THREAD +#define thread_safe_increment(V,L) (V)++ +#define thread_safe_decrement(V,L) (V)-- +#define thread_safe_add(V,C,L) (V)+=(C) +#define thread_safe_sub(V,C,L) (V)-=(C) +#define statistic_increment(V,L) (V)++ +#define statistic_decrement(V,L) (V)-- +#define statistic_add(V,C,L) (V)+=(C) +#define statistic_sub(V,C,L) (V)-=(C) +#endif + +#ifdef HAVE_CHARSET_utf8 +#define MYSQL_UNIVERSAL_CLIENT_CHARSET "utf8" +#else +#define MYSQL_UNIVERSAL_CLIENT_CHARSET MYSQL_DEFAULT_CHARSET_NAME +#endif + +#if defined(EMBEDDED_LIBRARY) && !defined(HAVE_EMBEDDED_PRIVILEGE_CONTROL) +#define NO_EMBEDDED_ACCESS_CHECKS +#endif + +#ifdef HAVE_DLOPEN +#if defined(__WIN__) +#define dlsym(lib, name) GetProcAddress((HMODULE)lib, name) +#define dlopen(libname, unused) LoadLibraryEx(libname, NULL, 0) +#define dlclose(lib) FreeLibrary((HMODULE)lib) +#elif defined(HAVE_DLFCN_H) +#include +#endif +#endif + +/* FreeBSD 2.2.2 does not define RTLD_NOW) */ +#ifndef RTLD_NOW +#define RTLD_NOW 1 +#endif + +#ifndef HAVE_DLERROR +#define dlerror() "" +#endif + + +#ifndef __NETWARE__ +/* + * Include standard definitions of operator new and delete. + */ +#ifdef __cplusplus +#include +#endif +#else +/* + * Define placement versions of operator new and operator delete since + * we don't have when building for Netware. + */ +#ifdef __cplusplus +inline void *operator new(size_t, void *ptr) { return ptr; } +inline void *operator new[](size_t, void *ptr) { return ptr; } +inline void operator delete(void*, void*) { /* Do nothing */ } +inline void operator delete[](void*, void*) { /* Do nothing */ } +#endif +#endif + +/* Length of decimal number represented by INT32. */ +#define MY_INT32_NUM_DECIMAL_DIGITS 11 + +/* Length of decimal number represented by INT64. */ +#define MY_INT64_NUM_DECIMAL_DIGITS 21 + +/* Define some useful general macros (should be done after all headers). */ +#if !defined(max) +#define max(a, b) ((a) > (b) ? (a) : (b)) +#define min(a, b) ((a) < (b) ? (a) : (b)) +#endif +/* + Only Linux is known to need an explicit sync of the directory to make sure a + file creation/deletion/renaming in(from,to) this directory durable. +*/ +#ifdef TARGET_OS_LINUX +#define NEED_EXPLICIT_SYNC_DIR 1 +#endif + +#if !defined(__cplusplus) && !defined(bool) +#define bool In_C_you_should_use_my_bool_instead() +#endif + +#ifndef HAVE_RINT +/** + All integers up to this number can be represented exactly as double precision + values (DBL_MANT_DIG == 53 for IEEE 754 hardware). +*/ +#define MAX_EXACT_INTEGER ((1LL << DBL_MANT_DIG) - 1) + +/** + rint(3) implementation for platforms that do not have it. + Always rounds to the nearest integer with ties being rounded to the nearest + even integer to mimic glibc's rint() behavior in the "round-to-nearest" + FPU mode. Hardware-specific optimizations are possible (frndint on x86). + Unlike this implementation, hardware will also honor the FPU rounding mode. +*/ + +static inline double rint(double x) +{ + double f, i; + f = modf(x, &i); + /* + All doubles with absolute values > MAX_EXACT_INTEGER are even anyway, + no need to check it. + */ + if (x > 0.0) + i += (double) ((f > 0.5) || (f == 0.5 && + i <= (double) MAX_EXACT_INTEGER && + (longlong) i % 2)); + else + i -= (double) ((f < -0.5) || (f == -0.5 && + i >= (double) -MAX_EXACT_INTEGER && + (longlong) i % 2)); + return i; +} +#endif /* HAVE_RINT */ + +/* + MYSQL_PLUGIN_IMPORT macro is used to export mysqld data + (i.e variables) for usage in storage engine loadable plugins. + Outside of Windows, it is dummy. +*/ +#ifndef MYSQL_PLUGIN_IMPORT +#if (defined(_WIN32) && defined(MYSQL_DYNAMIC_PLUGIN)) +#define MYSQL_PLUGIN_IMPORT __declspec(dllimport) +#else +#define MYSQL_PLUGIN_IMPORT +#endif +#endif + +#endif /* my_global_h */ diff --git a/EQ2/source/depends/mysql-5.1.45-win32/include/my_list.h b/EQ2/source/depends/mysql-5.1.45-win32/include/my_list.h new file mode 100644 index 000000000..775b56587 --- /dev/null +++ b/EQ2/source/depends/mysql-5.1.45-win32/include/my_list.h @@ -0,0 +1,45 @@ +/* Copyright (C) 2000 MySQL AB + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; version 2 of the License. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ + +#ifndef _list_h_ +#define _list_h_ + +#ifdef __cplusplus +extern "C" { +#endif + +typedef struct st_list { + struct st_list *prev,*next; + void *data; +} LIST; + +typedef int (*list_walk_action)(void *,void *); + +extern LIST *list_add(LIST *root,LIST *element); +extern LIST *list_delete(LIST *root,LIST *element); +extern LIST *list_cons(void *data,LIST *root); +extern LIST *list_reverse(LIST *root); +extern void list_free(LIST *root,unsigned int free_data); +extern unsigned int list_length(LIST *); +extern int list_walk(LIST *,list_walk_action action,unsigned char * argument); + +#define list_rest(a) ((a)->next) +#define list_push(a,b) (a)=list_cons((b),(a)) +#define list_pop(A) {LIST *old=(A); (A)=list_delete(old,old) ; my_free((unsigned char *) old,MYF(MY_FAE)); } + +#ifdef __cplusplus +} +#endif +#endif diff --git a/EQ2/source/depends/mysql-5.1.45-win32/include/my_net.h b/EQ2/source/depends/mysql-5.1.45-win32/include/my_net.h new file mode 100644 index 000000000..3af79ea3d --- /dev/null +++ b/EQ2/source/depends/mysql-5.1.45-win32/include/my_net.h @@ -0,0 +1,128 @@ +/* Copyright (C) 2000 MySQL AB + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; version 2 of the License. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ + +/* + thread safe version of some common functions: + my_inet_ntoa + + This file is also used to make handling of sockets and ioctl() + portable accross systems. + +*/ + +#ifndef _my_net_h +#define _my_net_h +C_MODE_START + +#include +#ifdef HAVE_SYS_SOCKET_H +#include +#endif +#ifdef HAVE_NETINET_IN_H +#include +#endif +#ifdef HAVE_ARPA_INET_H +#include +#endif +#ifdef HAVE_POLL +#include +#endif +#ifdef HAVE_SYS_IOCTL_H +#include +#endif + +#if !defined(__WIN__) && !defined(HAVE_BROKEN_NETINET_INCLUDES) && !defined(__BEOS__) && !defined(__NETWARE__) +#include +#include +#include +#if !defined(alpha_linux_port) +#include +#endif +#endif + +#if defined(__WIN__) +#define O_NONBLOCK 1 /* For emulation of fcntl() */ + +/* + SHUT_RDWR is called SD_BOTH in windows and + is defined to 2 in winsock2.h + #define SD_BOTH 0x02 +*/ +#define SHUT_RDWR 0x02 + +#endif + +/* + On OSes which don't have the in_addr_t, we guess that using uint32 is the best + possible choice. We guess this from the fact that on HP-UX64bit & FreeBSD64bit + & Solaris64bit, in_addr_t is equivalent to uint32. And on Linux32bit too. +*/ +#ifndef HAVE_IN_ADDR_T +#define in_addr_t uint32 +#endif + +/* On some operating systems (e.g. Solaris) INADDR_NONE is not defined */ +#ifndef INADDR_NONE +#define INADDR_NONE -1 /* Error value from inet_addr */ +#endif + +/* Thread safe or portable version of some functions */ + +void my_inet_ntoa(struct in_addr in, char *buf); + +/* + Handling of gethostbyname_r() +*/ + +#if !defined(HPUX10) +struct hostent; +#endif /* HPUX */ +#if !defined(HAVE_GETHOSTBYNAME_R) +struct hostent *my_gethostbyname_r(const char *name, + struct hostent *result, char *buffer, + int buflen, int *h_errnop); +void my_gethostbyname_r_free(); +#elif defined(HAVE_PTHREAD_ATTR_CREATE) || defined(_AIX) || defined(HAVE_GETHOSTBYNAME_R_GLIBC2_STYLE) +struct hostent *my_gethostbyname_r(const char *name, + struct hostent *result, char *buffer, + int buflen, int *h_errnop); +#define my_gethostbyname_r_free() +#if !defined(HAVE_GETHOSTBYNAME_R_GLIBC2_STYLE) && !defined(HPUX10) +#define GETHOSTBYNAME_BUFF_SIZE sizeof(struct hostent_data) +#endif /* !defined(HAVE_GETHOSTBYNAME_R_GLIBC2_STYLE) */ + +#elif defined(HAVE_GETHOSTBYNAME_R_RETURN_INT) +#define GETHOSTBYNAME_BUFF_SIZE sizeof(struct hostent_data) +struct hostent *my_gethostbyname_r(const char *name, + struct hostent *result, char *buffer, + int buflen, int *h_errnop); +#define my_gethostbyname_r_free() +#else +#define my_gethostbyname_r(A,B,C,D,E) gethostbyname_r((A),(B),(C),(D),(E)) +#define my_gethostbyname_r_free() +#endif /* !defined(HAVE_GETHOSTBYNAME_R) */ + +#ifndef GETHOSTBYNAME_BUFF_SIZE +#define GETHOSTBYNAME_BUFF_SIZE 2048 +#endif + +/* On SCO you get a link error when refering to h_errno */ +#ifdef SCO +#undef h_errno +#define h_errno errno +#endif + +C_MODE_END +#endif diff --git a/EQ2/source/depends/mysql-5.1.45-win32/include/my_no_pthread.h b/EQ2/source/depends/mysql-5.1.45-win32/include/my_no_pthread.h new file mode 100644 index 000000000..511fac407 --- /dev/null +++ b/EQ2/source/depends/mysql-5.1.45-win32/include/my_no_pthread.h @@ -0,0 +1,58 @@ +/* Copyright (C) 2000 MySQL AB + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; version 2 of the License. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ + + +#if !defined(_my_no_pthread_h) && !defined(THREAD) +#define _my_no_pthread_h + + +/* + This block is to access some thread-related type definitions + even in builds which do not need thread functions, + as some variables (based on these types) are declared + even in non-threaded builds. + Case in point: 'mf_keycache.c' +*/ +#if defined(__WIN__) +#else /* Normal threads */ +#include + +#endif /* defined(__WIN__) */ + + +/* + This undefs some pthread mutex locks when one isn't using threads + to make thread safe code, that should also work in single thread + environment, easier to use. +*/ +#define pthread_mutex_init(A,B) +#define pthread_mutex_lock(A) +#define pthread_mutex_unlock(A) +#define pthread_mutex_destroy(A) +#define my_rwlock_init(A,B) +#define rw_rdlock(A) +#define rw_wrlock(A) +#define rw_unlock(A) +#define rwlock_destroy(A) + +typedef int my_pthread_once_t; +#define MY_PTHREAD_ONCE_INIT 0 +#define MY_PTHREAD_ONCE_DONE 1 + +#define my_pthread_once(C,F) do { \ + if (*(C) != MY_PTHREAD_ONCE_DONE) { F(); *(C)= MY_PTHREAD_ONCE_DONE; } \ + } while(0) + +#endif diff --git a/EQ2/source/depends/mysql-5.1.45-win32/include/my_pthread.h b/EQ2/source/depends/mysql-5.1.45-win32/include/my_pthread.h new file mode 100644 index 000000000..e9256610e --- /dev/null +++ b/EQ2/source/depends/mysql-5.1.45-win32/include/my_pthread.h @@ -0,0 +1,779 @@ +/* Copyright (C) 2000 MySQL AB + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; version 2 of the License. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ + +/* Defines to make different thread packages compatible */ + +#ifndef _my_pthread_h +#define _my_pthread_h + +#ifndef ETIME +#define ETIME ETIMEDOUT /* For FreeBSD */ +#endif + +#ifdef __cplusplus +#define EXTERNC extern "C" +extern "C" { +#else +#define EXTERNC +#endif /* __cplusplus */ + +#if defined(__WIN__) +typedef CRITICAL_SECTION pthread_mutex_t; +typedef HANDLE pthread_t; +typedef struct thread_attr { + DWORD dwStackSize ; + DWORD dwCreatingFlag ; + int priority ; +} pthread_attr_t ; + +typedef struct { int dummy; } pthread_condattr_t; + +/* Implementation of posix conditions */ + +typedef struct st_pthread_link { + DWORD thread_id; + struct st_pthread_link *next; +} pthread_link; + +typedef struct { + uint32 waiting; + CRITICAL_SECTION lock_waiting; + + enum { + SIGNAL= 0, + BROADCAST= 1, + MAX_EVENTS= 2 + } EVENTS; + + HANDLE events[MAX_EVENTS]; + HANDLE broadcast_block_event; + +} pthread_cond_t; + + +typedef int pthread_mutexattr_t; +#define win_pthread_self my_thread_var->pthread_self +#define pthread_self() win_pthread_self +#define pthread_handler_t EXTERNC void * __cdecl +typedef void * (__cdecl *pthread_handler)(void *); + +typedef volatile LONG my_pthread_once_t; +#define MY_PTHREAD_ONCE_INIT 0 +#define MY_PTHREAD_ONCE_INPROGRESS 1 +#define MY_PTHREAD_ONCE_DONE 2 + +/* + Struct and macros to be used in combination with the + windows implementation of pthread_cond_timedwait +*/ + +/* + Declare a union to make sure FILETIME is properly aligned + so it can be used directly as a 64 bit value. The value + stored is in 100ns units. + */ + union ft64 { + FILETIME ft; + __int64 i64; + }; +struct timespec { + union ft64 tv; + /* The max timeout value in millisecond for pthread_cond_timedwait */ + long max_timeout_msec; +}; +#define set_timespec(ABSTIME,SEC) { \ + GetSystemTimeAsFileTime(&((ABSTIME).tv.ft)); \ + (ABSTIME).tv.i64+= (__int64)(SEC)*10000000; \ + (ABSTIME).max_timeout_msec= (long)((SEC)*1000); \ +} +#define set_timespec_nsec(ABSTIME,NSEC) { \ + GetSystemTimeAsFileTime(&((ABSTIME).tv.ft)); \ + (ABSTIME).tv.i64+= (__int64)(NSEC)/100; \ + (ABSTIME).max_timeout_msec= (long)((NSEC)/1000000); \ +} + +void win_pthread_init(void); +int win_pthread_setspecific(void *A,void *B,uint length); +int win_pthread_mutex_trylock(pthread_mutex_t *mutex); +int pthread_create(pthread_t *,pthread_attr_t *,pthread_handler,void *); +int pthread_cond_init(pthread_cond_t *cond, const pthread_condattr_t *attr); +int pthread_cond_wait(pthread_cond_t *cond, pthread_mutex_t *mutex); +int pthread_cond_timedwait(pthread_cond_t *cond, pthread_mutex_t *mutex, + struct timespec *abstime); +int pthread_cond_signal(pthread_cond_t *cond); +int pthread_cond_broadcast(pthread_cond_t *cond); +int pthread_cond_destroy(pthread_cond_t *cond); +int pthread_attr_init(pthread_attr_t *connect_att); +int pthread_attr_setstacksize(pthread_attr_t *connect_att,DWORD stack); +int pthread_attr_setprio(pthread_attr_t *connect_att,int priority); +int pthread_attr_destroy(pthread_attr_t *connect_att); +int my_pthread_once(my_pthread_once_t *once_control,void (*init_routine)(void)); +struct tm *localtime_r(const time_t *timep,struct tm *tmp); +struct tm *gmtime_r(const time_t *timep,struct tm *tmp); + + +void pthread_exit(void *a); /* was #define pthread_exit(A) ExitThread(A)*/ + +#define ETIMEDOUT 145 /* Win32 doesn't have this */ +#define getpid() GetCurrentThreadId() +#define HAVE_LOCALTIME_R 1 +#define _REENTRANT 1 +#define HAVE_PTHREAD_ATTR_SETSTACKSIZE 1 + +/* + Windows has two ways to use thread local storage. The most efficient + is using __declspec(thread), but that does not work properly when + used in a .dll that is loaded at runtime, after program load. So for + libmysql.dll and libmysqld.dll we define USE_TLS in order to use the + TlsXxx() API instead, which works in all cases. +*/ +#ifdef USE_TLS /* For LIBMYSQL.DLL */ +#undef SAFE_MUTEX /* This will cause conflicts */ +#define pthread_key(T,V) DWORD V +#define pthread_key_create(A,B) ((*A=TlsAlloc())==0xFFFFFFFF) +#define pthread_key_delete(A) TlsFree(A) +#define pthread_getspecific(A) (TlsGetValue(A)) +#define my_pthread_getspecific(T,A) ((T) TlsGetValue(A)) +#define my_pthread_getspecific_ptr(T,V) ((T) TlsGetValue(V)) +#define my_pthread_setspecific_ptr(T,V) (!TlsSetValue((T),(V))) +#define pthread_setspecific(A,B) (!TlsSetValue((A),(B))) +#else +#define pthread_key(T,V) __declspec(thread) T V +#define pthread_key_create(A,B) pthread_dummy(0) +#define pthread_key_delete(A) pthread_dummy(0) +#define pthread_getspecific(A) (&(A)) +#define my_pthread_getspecific(T,A) (&(A)) +#define my_pthread_getspecific_ptr(T,V) (V) +#define my_pthread_setspecific_ptr(T,V) ((T)=(V),0) +#define pthread_setspecific(A,B) win_pthread_setspecific(&(A),(B),sizeof(A)) +#endif /* USE_TLS */ + +#define pthread_equal(A,B) ((A) == (B)) +#define pthread_mutex_init(A,B) (InitializeCriticalSection(A),0) +#define pthread_mutex_lock(A) (EnterCriticalSection(A),0) +#define pthread_mutex_trylock(A) win_pthread_mutex_trylock((A)) +#define pthread_mutex_unlock(A) LeaveCriticalSection(A) +#define pthread_mutex_destroy(A) DeleteCriticalSection(A) +#define my_pthread_setprio(A,B) SetThreadPriority(GetCurrentThread(), (B)) +#define pthread_kill(A,B) pthread_dummy((A) ? 0 : ESRCH) + +#define pthread_join(A,B) (WaitForSingleObject((A), INFINITE) != WAIT_OBJECT_0) + +/* Dummy defines for easier code */ +#define pthread_attr_setdetachstate(A,B) pthread_dummy(0) +#define my_pthread_attr_setprio(A,B) pthread_attr_setprio(A,B) +#define pthread_attr_setscope(A,B) +#define pthread_detach_this_thread() +#define pthread_condattr_init(A) +#define pthread_condattr_destroy(A) + +#define my_pthread_getprio(thread_id) pthread_dummy(0) + +#else /* Normal threads */ + +#ifdef HAVE_rts_threads +#define sigwait org_sigwait +#include +#undef sigwait +#endif +#include +#ifndef _REENTRANT +#define _REENTRANT +#endif +#ifdef HAVE_THR_SETCONCURRENCY +#include /* Probably solaris */ +#endif +#ifdef HAVE_SCHED_H +#include +#endif +#ifdef HAVE_SYNCH_H +#include +#endif + +#ifdef __NETWARE__ +void my_pthread_exit(void *status); +#define pthread_exit(A) my_pthread_exit(A) +#endif + +extern int my_pthread_getprio(pthread_t thread_id); + +#define pthread_key(T,V) pthread_key_t V +#define my_pthread_getspecific_ptr(T,V) my_pthread_getspecific(T,(V)) +#define my_pthread_setspecific_ptr(T,V) pthread_setspecific(T,(void*) (V)) +#define pthread_detach_this_thread() +#define pthread_handler_t EXTERNC void * +typedef void *(* pthread_handler)(void *); + +#define my_pthread_once_t pthread_once_t +#define MY_PTHREAD_ONCE_INIT PTHREAD_ONCE_INIT +#define my_pthread_once(C,F) pthread_once(C,F) + +/* Test first for RTS or FSU threads */ + +#if defined(PTHREAD_SCOPE_GLOBAL) && !defined(PTHREAD_SCOPE_SYSTEM) +#define HAVE_rts_threads +extern int my_pthread_create_detached; +#define pthread_sigmask(A,B,C) sigprocmask((A),(B),(C)) +#define PTHREAD_CREATE_DETACHED &my_pthread_create_detached +#define PTHREAD_SCOPE_SYSTEM PTHREAD_SCOPE_GLOBAL +#define PTHREAD_SCOPE_PROCESS PTHREAD_SCOPE_LOCAL +#define USE_ALARM_THREAD +#endif /* defined(PTHREAD_SCOPE_GLOBAL) && !defined(PTHREAD_SCOPE_SYSTEM) */ + +#if defined(_BSDI_VERSION) && _BSDI_VERSION < 199910 +int sigwait(sigset_t *set, int *sig); +#endif + +#ifndef HAVE_NONPOSIX_SIGWAIT +#define my_sigwait(A,B) sigwait((A),(B)) +#else +int my_sigwait(const sigset_t *set,int *sig); +#endif + +#ifdef HAVE_NONPOSIX_PTHREAD_MUTEX_INIT +#ifndef SAFE_MUTEX +#define pthread_mutex_init(a,b) my_pthread_mutex_init((a),(b)) +extern int my_pthread_mutex_init(pthread_mutex_t *mp, + const pthread_mutexattr_t *attr); +#endif /* SAFE_MUTEX */ +#define pthread_cond_init(a,b) my_pthread_cond_init((a),(b)) +extern int my_pthread_cond_init(pthread_cond_t *mp, + const pthread_condattr_t *attr); +#endif /* HAVE_NONPOSIX_PTHREAD_MUTEX_INIT */ + +#if defined(HAVE_SIGTHREADMASK) && !defined(HAVE_PTHREAD_SIGMASK) +#define pthread_sigmask(A,B,C) sigthreadmask((A),(B),(C)) +#endif + +#if !defined(HAVE_SIGWAIT) && !defined(HAVE_rts_threads) && !defined(sigwait) && !defined(alpha_linux_port) && !defined(HAVE_NONPOSIX_SIGWAIT) && !defined(HAVE_DEC_3_2_THREADS) && !defined(_AIX) +int sigwait(sigset_t *setp, int *sigp); /* Use our implemention */ +#endif + + +/* + We define my_sigset() and use that instead of the system sigset() so that + we can favor an implementation based on sigaction(). On some systems, such + as Mac OS X, sigset() results in flags such as SA_RESTART being set, and + we want to make sure that no such flags are set. +*/ +#if defined(HAVE_SIGACTION) && !defined(my_sigset) +#define my_sigset(A,B) do { struct sigaction l_s; sigset_t l_set; int l_rc; \ + DBUG_ASSERT((A) != 0); \ + sigemptyset(&l_set); \ + l_s.sa_handler = (B); \ + l_s.sa_mask = l_set; \ + l_s.sa_flags = 0; \ + l_rc= sigaction((A), &l_s, (struct sigaction *) NULL);\ + DBUG_ASSERT(l_rc == 0); \ + } while (0) +#elif defined(HAVE_SIGSET) && !defined(my_sigset) +#define my_sigset(A,B) sigset((A),(B)) +#elif !defined(my_sigset) +#define my_sigset(A,B) signal((A),(B)) +#endif + +#ifndef my_pthread_setprio +#if defined(HAVE_PTHREAD_SETPRIO_NP) /* FSU threads */ +#define my_pthread_setprio(A,B) pthread_setprio_np((A),(B)) +#elif defined(HAVE_PTHREAD_SETPRIO) +#define my_pthread_setprio(A,B) pthread_setprio((A),(B)) +#elif defined(HAVE_PTHREAD_SETSCHEDPRIO) +#define my_pthread_setprio(A,B) pthread_setschedprio((A),(B)) +#else +extern void my_pthread_setprio(pthread_t thread_id,int prior); +#endif +#endif + +#ifndef my_pthread_attr_setprio +#ifdef HAVE_PTHREAD_ATTR_SETPRIO +#define my_pthread_attr_setprio(A,B) pthread_attr_setprio((A),(B)) +#else +extern void my_pthread_attr_setprio(pthread_attr_t *attr, int priority); +#endif +#endif + +#if !defined(HAVE_PTHREAD_ATTR_SETSCOPE) || defined(HAVE_DEC_3_2_THREADS) +#define pthread_attr_setscope(A,B) +#undef HAVE_GETHOSTBYADDR_R /* No definition */ +#endif + +#if defined(HAVE_BROKEN_PTHREAD_COND_TIMEDWAIT) && !defined(SAFE_MUTEX) +extern int my_pthread_cond_timedwait(pthread_cond_t *cond, + pthread_mutex_t *mutex, + struct timespec *abstime); +#define pthread_cond_timedwait(A,B,C) my_pthread_cond_timedwait((A),(B),(C)) +#endif + +#if !defined( HAVE_NONPOSIX_PTHREAD_GETSPECIFIC) +#define my_pthread_getspecific(A,B) ((A) pthread_getspecific(B)) +#else +#define my_pthread_getspecific(A,B) ((A) my_pthread_getspecific_imp(B)) +void *my_pthread_getspecific_imp(pthread_key_t key); +#endif + +#ifndef HAVE_LOCALTIME_R +struct tm *localtime_r(const time_t *clock, struct tm *res); +#endif + +#ifndef HAVE_GMTIME_R +struct tm *gmtime_r(const time_t *clock, struct tm *res); +#endif + +#ifdef HAVE_PTHREAD_CONDATTR_CREATE +/* DCE threads on HPUX 10.20 */ +#define pthread_condattr_init pthread_condattr_create +#define pthread_condattr_destroy pthread_condattr_delete +#endif + +/* FSU THREADS */ +#if !defined(HAVE_PTHREAD_KEY_DELETE) && !defined(pthread_key_delete) +#define pthread_key_delete(A) pthread_dummy(0) +#endif + +#ifdef HAVE_CTHREADS_WRAPPER /* For MacOSX */ +#define pthread_cond_destroy(A) pthread_dummy(0) +#define pthread_mutex_destroy(A) pthread_dummy(0) +#define pthread_attr_delete(A) pthread_dummy(0) +#define pthread_condattr_delete(A) pthread_dummy(0) +#define pthread_attr_setstacksize(A,B) pthread_dummy(0) +#define pthread_equal(A,B) ((A) == (B)) +#define pthread_cond_timedwait(a,b,c) pthread_cond_wait((a),(b)) +#define pthread_attr_init(A) pthread_attr_create(A) +#define pthread_attr_destroy(A) pthread_attr_delete(A) +#define pthread_attr_setdetachstate(A,B) pthread_dummy(0) +#define pthread_create(A,B,C,D) pthread_create((A),*(B),(C),(D)) +#define pthread_sigmask(A,B,C) sigprocmask((A),(B),(C)) +#define pthread_kill(A,B) pthread_dummy((A) ? 0 : ESRCH) +#undef pthread_detach_this_thread +#define pthread_detach_this_thread() { pthread_t tmp=pthread_self() ; pthread_detach(&tmp); } +#endif + +#ifdef HAVE_DARWIN5_THREADS +#define pthread_sigmask(A,B,C) sigprocmask((A),(B),(C)) +#define pthread_kill(A,B) pthread_dummy((A) ? 0 : ESRCH) +#define pthread_condattr_init(A) pthread_dummy(0) +#define pthread_condattr_destroy(A) pthread_dummy(0) +#undef pthread_detach_this_thread +#define pthread_detach_this_thread() { pthread_t tmp=pthread_self() ; pthread_detach(tmp); } +#endif + +#if ((defined(HAVE_PTHREAD_ATTR_CREATE) && !defined(HAVE_SIGWAIT)) || defined(HAVE_DEC_3_2_THREADS)) && !defined(HAVE_CTHREADS_WRAPPER) +/* This is set on AIX_3_2 and Siemens unix (and DEC OSF/1 3.2 too) */ +#define pthread_key_create(A,B) \ + pthread_keycreate(A,(B) ?\ + (pthread_destructor_t) (B) :\ + (pthread_destructor_t) pthread_dummy) +#define pthread_attr_init(A) pthread_attr_create(A) +#define pthread_attr_destroy(A) pthread_attr_delete(A) +#define pthread_attr_setdetachstate(A,B) pthread_dummy(0) +#define pthread_create(A,B,C,D) pthread_create((A),*(B),(C),(D)) +#ifndef pthread_sigmask +#define pthread_sigmask(A,B,C) sigprocmask((A),(B),(C)) +#endif +#define pthread_kill(A,B) pthread_dummy((A) ? 0 : ESRCH) +#undef pthread_detach_this_thread +#define pthread_detach_this_thread() { pthread_t tmp=pthread_self() ; pthread_detach(&tmp); } +#elif !defined(__NETWARE__) /* HAVE_PTHREAD_ATTR_CREATE && !HAVE_SIGWAIT */ +#define HAVE_PTHREAD_KILL +#endif + +#endif /* defined(__WIN__) */ + +#if defined(HPUX10) && !defined(DONT_REMAP_PTHREAD_FUNCTIONS) +#undef pthread_cond_timedwait +#define pthread_cond_timedwait(a,b,c) my_pthread_cond_timedwait((a),(b),(c)) +int my_pthread_cond_timedwait(pthread_cond_t *cond, pthread_mutex_t *mutex, + struct timespec *abstime); +#endif + +#if defined(HPUX10) +#define pthread_attr_getstacksize(A,B) my_pthread_attr_getstacksize(A,B) +void my_pthread_attr_getstacksize(pthread_attr_t *attrib, size_t *size); +#endif + +#if defined(HAVE_POSIX1003_4a_MUTEX) && !defined(DONT_REMAP_PTHREAD_FUNCTIONS) +#undef pthread_mutex_trylock +#define pthread_mutex_trylock(a) my_pthread_mutex_trylock((a)) +int my_pthread_mutex_trylock(pthread_mutex_t *mutex); +#endif + +/* + The defines set_timespec and set_timespec_nsec should be used + for calculating an absolute time at which + pthread_cond_timedwait should timeout +*/ +#ifdef HAVE_TIMESPEC_TS_SEC +#ifndef set_timespec +#define set_timespec(ABSTIME,SEC) \ +{ \ + (ABSTIME).ts_sec=time(0) + (time_t) (SEC); \ + (ABSTIME).ts_nsec=0; \ +} +#endif /* !set_timespec */ +#ifndef set_timespec_nsec +#define set_timespec_nsec(ABSTIME,NSEC) \ +{ \ + ulonglong now= my_getsystime() + (NSEC/100); \ + (ABSTIME).ts_sec= (now / ULL(10000000)); \ + (ABSTIME).ts_nsec= (now % ULL(10000000) * 100 + ((NSEC) % 100)); \ +} +#endif /* !set_timespec_nsec */ +#else +#ifndef set_timespec +#define set_timespec(ABSTIME,SEC) \ +{\ + struct timeval tv;\ + gettimeofday(&tv,0);\ + (ABSTIME).tv_sec=tv.tv_sec+(time_t) (SEC);\ + (ABSTIME).tv_nsec=tv.tv_usec*1000;\ +} +#endif /* !set_timespec */ +#ifndef set_timespec_nsec +#define set_timespec_nsec(ABSTIME,NSEC) \ +{\ + ulonglong now= my_getsystime() + (NSEC/100); \ + (ABSTIME).tv_sec= (time_t) (now / ULL(10000000)); \ + (ABSTIME).tv_nsec= (long) (now % ULL(10000000) * 100 + ((NSEC) % 100)); \ +} +#endif /* !set_timespec_nsec */ +#endif /* HAVE_TIMESPEC_TS_SEC */ + + /* safe_mutex adds checking to mutex for easier debugging */ + +#if defined(__NETWARE__) && !defined(SAFE_MUTEX_DETECT_DESTROY) +#define SAFE_MUTEX_DETECT_DESTROY +#endif + +typedef struct st_safe_mutex_t +{ + pthread_mutex_t global,mutex; + const char *file; + uint line,count; + pthread_t thread; +#ifdef SAFE_MUTEX_DETECT_DESTROY + struct st_safe_mutex_info_t *info; /* to track destroying of mutexes */ +#endif +} safe_mutex_t; + +#ifdef SAFE_MUTEX_DETECT_DESTROY +/* + Used to track the destroying of mutexes. This needs to be a seperate + structure because the safe_mutex_t structure could be freed before + the mutexes are destroyed. +*/ + +typedef struct st_safe_mutex_info_t +{ + struct st_safe_mutex_info_t *next; + struct st_safe_mutex_info_t *prev; + const char *init_file; + uint32 init_line; +} safe_mutex_info_t; +#endif /* SAFE_MUTEX_DETECT_DESTROY */ + +int safe_mutex_init(safe_mutex_t *mp, const pthread_mutexattr_t *attr, + const char *file, uint line); +int safe_mutex_lock(safe_mutex_t *mp, my_bool try_lock, const char *file, uint line); +int safe_mutex_unlock(safe_mutex_t *mp,const char *file, uint line); +int safe_mutex_destroy(safe_mutex_t *mp,const char *file, uint line); +int safe_cond_wait(pthread_cond_t *cond, safe_mutex_t *mp,const char *file, + uint line); +int safe_cond_timedwait(pthread_cond_t *cond, safe_mutex_t *mp, + struct timespec *abstime, const char *file, uint line); +void safe_mutex_global_init(void); +void safe_mutex_end(FILE *file); + + /* Wrappers if safe mutex is actually used */ +#ifdef SAFE_MUTEX +#undef pthread_mutex_init +#undef pthread_mutex_lock +#undef pthread_mutex_unlock +#undef pthread_mutex_destroy +#undef pthread_mutex_wait +#undef pthread_mutex_timedwait +#undef pthread_mutex_t +#undef pthread_cond_wait +#undef pthread_cond_timedwait +#undef pthread_mutex_trylock +#define pthread_mutex_init(A,B) safe_mutex_init((A),(B),__FILE__,__LINE__) +#define pthread_mutex_lock(A) safe_mutex_lock((A), FALSE, __FILE__, __LINE__) +#define pthread_mutex_unlock(A) safe_mutex_unlock((A),__FILE__,__LINE__) +#define pthread_mutex_destroy(A) safe_mutex_destroy((A),__FILE__,__LINE__) +#define pthread_cond_wait(A,B) safe_cond_wait((A),(B),__FILE__,__LINE__) +#define pthread_cond_timedwait(A,B,C) safe_cond_timedwait((A),(B),(C),__FILE__,__LINE__) +#define pthread_mutex_trylock(A) safe_mutex_lock((A), TRUE, __FILE__, __LINE__) +#define pthread_mutex_t safe_mutex_t +#define safe_mutex_assert_owner(mp) \ + DBUG_ASSERT((mp)->count > 0 && \ + pthread_equal(pthread_self(), (mp)->thread)) +#define safe_mutex_assert_not_owner(mp) \ + DBUG_ASSERT(! (mp)->count || \ + ! pthread_equal(pthread_self(), (mp)->thread)) +#else +#define safe_mutex_assert_owner(mp) +#define safe_mutex_assert_not_owner(mp) +#endif /* SAFE_MUTEX */ + +#if defined(MY_PTHREAD_FASTMUTEX) && !defined(SAFE_MUTEX) +typedef struct st_my_pthread_fastmutex_t +{ + pthread_mutex_t mutex; + uint spins; + uint rng_state; +} my_pthread_fastmutex_t; +void fastmutex_global_init(void); + +int my_pthread_fastmutex_init(my_pthread_fastmutex_t *mp, + const pthread_mutexattr_t *attr); +int my_pthread_fastmutex_lock(my_pthread_fastmutex_t *mp); + +#undef pthread_mutex_init +#undef pthread_mutex_lock +#undef pthread_mutex_unlock +#undef pthread_mutex_destroy +#undef pthread_mutex_wait +#undef pthread_mutex_timedwait +#undef pthread_mutex_t +#undef pthread_cond_wait +#undef pthread_cond_timedwait +#undef pthread_mutex_trylock +#define pthread_mutex_init(A,B) my_pthread_fastmutex_init((A),(B)) +#define pthread_mutex_lock(A) my_pthread_fastmutex_lock(A) +#define pthread_mutex_unlock(A) pthread_mutex_unlock(&(A)->mutex) +#define pthread_mutex_destroy(A) pthread_mutex_destroy(&(A)->mutex) +#define pthread_cond_wait(A,B) pthread_cond_wait((A),&(B)->mutex) +#define pthread_cond_timedwait(A,B,C) pthread_cond_timedwait((A),&(B)->mutex,(C)) +#define pthread_mutex_trylock(A) pthread_mutex_trylock(&(A)->mutex) +#define pthread_mutex_t my_pthread_fastmutex_t +#endif /* defined(MY_PTHREAD_FASTMUTEX) && !defined(SAFE_MUTEX) */ + + /* READ-WRITE thread locking */ + +#ifdef HAVE_BROKEN_RWLOCK /* For OpenUnix */ +#undef HAVE_PTHREAD_RWLOCK_RDLOCK +#undef HAVE_RWLOCK_INIT +#undef HAVE_RWLOCK_T +#endif + +#if defined(USE_MUTEX_INSTEAD_OF_RW_LOCKS) +/* use these defs for simple mutex locking */ +#define rw_lock_t pthread_mutex_t +#define my_rwlock_init(A,B) pthread_mutex_init((A),(B)) +#define rw_rdlock(A) pthread_mutex_lock((A)) +#define rw_wrlock(A) pthread_mutex_lock((A)) +#define rw_tryrdlock(A) pthread_mutex_trylock((A)) +#define rw_trywrlock(A) pthread_mutex_trylock((A)) +#define rw_unlock(A) pthread_mutex_unlock((A)) +#define rwlock_destroy(A) pthread_mutex_destroy((A)) +#elif defined(HAVE_PTHREAD_RWLOCK_RDLOCK) +#define rw_lock_t pthread_rwlock_t +#define my_rwlock_init(A,B) pthread_rwlock_init((A),(B)) +#define rw_rdlock(A) pthread_rwlock_rdlock(A) +#define rw_wrlock(A) pthread_rwlock_wrlock(A) +#define rw_tryrdlock(A) pthread_rwlock_tryrdlock((A)) +#define rw_trywrlock(A) pthread_rwlock_trywrlock((A)) +#define rw_unlock(A) pthread_rwlock_unlock(A) +#define rwlock_destroy(A) pthread_rwlock_destroy(A) +#elif defined(HAVE_RWLOCK_INIT) +#ifdef HAVE_RWLOCK_T /* For example Solaris 2.6-> */ +#define rw_lock_t rwlock_t +#endif +#define my_rwlock_init(A,B) rwlock_init((A),USYNC_THREAD,0) +#else +/* Use our own version of read/write locks */ +typedef struct _my_rw_lock_t { + pthread_mutex_t lock; /* lock for structure */ + pthread_cond_t readers; /* waiting readers */ + pthread_cond_t writers; /* waiting writers */ + int state; /* -1:writer,0:free,>0:readers */ + int waiters; /* number of waiting writers */ +} my_rw_lock_t; + +#define rw_lock_t my_rw_lock_t +#define rw_rdlock(A) my_rw_rdlock((A)) +#define rw_wrlock(A) my_rw_wrlock((A)) +#define rw_tryrdlock(A) my_rw_tryrdlock((A)) +#define rw_trywrlock(A) my_rw_trywrlock((A)) +#define rw_unlock(A) my_rw_unlock((A)) +#define rwlock_destroy(A) my_rwlock_destroy((A)) + +extern int my_rwlock_init(my_rw_lock_t *, void *); +extern int my_rwlock_destroy(my_rw_lock_t *); +extern int my_rw_rdlock(my_rw_lock_t *); +extern int my_rw_wrlock(my_rw_lock_t *); +extern int my_rw_unlock(my_rw_lock_t *); +extern int my_rw_tryrdlock(my_rw_lock_t *); +extern int my_rw_trywrlock(my_rw_lock_t *); +#endif /* USE_MUTEX_INSTEAD_OF_RW_LOCKS */ + +#define GETHOSTBYADDR_BUFF_SIZE 2048 + +#ifndef HAVE_THR_SETCONCURRENCY +#define thr_setconcurrency(A) pthread_dummy(0) +#endif +#if !defined(HAVE_PTHREAD_ATTR_SETSTACKSIZE) && ! defined(pthread_attr_setstacksize) +#define pthread_attr_setstacksize(A,B) pthread_dummy(0) +#endif + +/* Define mutex types, see my_thr_init.c */ +#define MY_MUTEX_INIT_SLOW NULL +#ifdef PTHREAD_ADAPTIVE_MUTEX_INITIALIZER_NP +extern pthread_mutexattr_t my_fast_mutexattr; +#define MY_MUTEX_INIT_FAST &my_fast_mutexattr +#else +#define MY_MUTEX_INIT_FAST NULL +#endif +#ifdef PTHREAD_ERRORCHECK_MUTEX_INITIALIZER_NP +extern pthread_mutexattr_t my_errorcheck_mutexattr; +#define MY_MUTEX_INIT_ERRCHK &my_errorcheck_mutexattr +#else +#define MY_MUTEX_INIT_ERRCHK NULL +#endif + +#ifndef ESRCH +/* Define it to something */ +#define ESRCH 1 +#endif + +typedef ulong my_thread_id; + +extern my_bool my_thread_global_init(void); +extern void my_thread_global_end(void); +extern my_bool my_thread_init(void); +extern void my_thread_end(void); +extern const char *my_thread_name(void); +extern my_thread_id my_thread_dbug_id(void); +extern int pthread_no_free(void *); +extern int pthread_dummy(int); + +/* All thread specific variables are in the following struct */ + +#define THREAD_NAME_SIZE 10 +#ifndef DEFAULT_THREAD_STACK +#if SIZEOF_CHARP > 4 +/* + MySQL can survive with 32K, but some glibc libraries require > 128K stack + To resolve hostnames. Also recursive stored procedures needs stack. +*/ +#define DEFAULT_THREAD_STACK (256*1024L) +#else +#define DEFAULT_THREAD_STACK (192*1024) +#endif +#endif + +struct st_my_thread_var +{ + int thr_errno; + pthread_cond_t suspend; + pthread_mutex_t mutex; + pthread_mutex_t * volatile current_mutex; + pthread_cond_t * volatile current_cond; + pthread_t pthread_self; + my_thread_id id; + int cmp_length; + int volatile abort; + my_bool init; + struct st_my_thread_var *next,**prev; + void *opt_info; +#ifndef DBUG_OFF + void *dbug; + char name[THREAD_NAME_SIZE+1]; +#endif +}; + +extern struct st_my_thread_var *_my_thread_var(void) __attribute__ ((const)); +extern uint my_thread_end_wait_time; +#define my_thread_var (_my_thread_var()) +#define my_errno my_thread_var->thr_errno +/* + Keep track of shutdown,signal, and main threads so that my_end() will not + report errors with them +*/ + +/* Which kind of thread library is in use */ + +#define THD_LIB_OTHER 1 +#define THD_LIB_NPTL 2 +#define THD_LIB_LT 4 + +extern uint thd_lib_detected; + +/* + thread_safe_xxx functions are for critical statistic or counters. + The implementation is guaranteed to be thread safe, on all platforms. + Note that the calling code should *not* assume the counter is protected + by the mutex given, as the implementation of these helpers may change + to use my_atomic operations instead. +*/ + +/* + Warning: + When compiling without threads, this file is not included. + See the *other* declarations of thread_safe_xxx in include/my_global.h + + Second warning: + See include/config-win.h, for yet another implementation. +*/ +#ifdef THREAD +#ifndef thread_safe_increment +#define thread_safe_increment(V,L) \ + (pthread_mutex_lock((L)), (V)++, pthread_mutex_unlock((L))) +#define thread_safe_decrement(V,L) \ + (pthread_mutex_lock((L)), (V)--, pthread_mutex_unlock((L))) +#endif + +#ifndef thread_safe_add +#define thread_safe_add(V,C,L) \ + (pthread_mutex_lock((L)), (V)+=(C), pthread_mutex_unlock((L))) +#define thread_safe_sub(V,C,L) \ + (pthread_mutex_lock((L)), (V)-=(C), pthread_mutex_unlock((L))) +#endif +#endif + +/* + statistics_xxx functions are for non critical statistic, + maintained in global variables. + When compiling with SAFE_STATISTICS: + - race conditions can not occur. + - some locking occurs, which may cause performance degradation. + + When compiling without SAFE_STATISTICS: + - race conditions can occur, making the result slightly inaccurate. + - the lock given is not honored. +*/ +#ifdef SAFE_STATISTICS +#define statistic_increment(V,L) thread_safe_increment((V),(L)) +#define statistic_decrement(V,L) thread_safe_decrement((V),(L)) +#define statistic_add(V,C,L) thread_safe_add((V),(C),(L)) +#define statistic_sub(V,C,L) thread_safe_sub((V),(C),(L)) +#else +#define statistic_decrement(V,L) (V)-- +#define statistic_increment(V,L) (V)++ +#define statistic_add(V,C,L) (V)+=(C) +#define statistic_sub(V,C,L) (V)-=(C) +#endif /* SAFE_STATISTICS */ + +/* + No locking needed, the counter is owned by the thread +*/ +#define status_var_increment(V) (V)++ +#define status_var_decrement(V) (V)-- +#define status_var_add(V,C) (V)+=(C) +#define status_var_sub(V,C) (V)-=(C) + +#ifdef __cplusplus +} +#endif +#endif /* _my_ptread_h */ diff --git a/EQ2/source/depends/mysql-5.1.45-win32/include/my_sys.h b/EQ2/source/depends/mysql-5.1.45-win32/include/my_sys.h new file mode 100644 index 000000000..a4ff5c30d --- /dev/null +++ b/EQ2/source/depends/mysql-5.1.45-win32/include/my_sys.h @@ -0,0 +1,994 @@ +/* Copyright (C) 2000-2003 MySQL AB + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; version 2 of the License. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ + +#ifndef _my_sys_h +#define _my_sys_h +C_MODE_START + +#ifdef HAVE_AIOWAIT +#include /* Used by record-cache */ +typedef struct my_aio_result { + aio_result_t result; + int pending; +} my_aio_result; +#endif + +#ifndef THREAD +extern int NEAR my_errno; /* Last error in mysys */ +#else +#include +#endif + +#include /* for CHARSET_INFO */ +#include +#include + +#define MYSYS_PROGRAM_USES_CURSES() { error_handler_hook = my_message_curses; mysys_uses_curses=1; } +#define MYSYS_PROGRAM_DONT_USE_CURSES() { error_handler_hook = my_message_no_curses; mysys_uses_curses=0;} +#define MY_INIT(name); { my_progname= name; my_init(); } + +#define MY_FILE_ERROR ((size_t) -1) + + /* General bitmaps for my_func's */ +#define MY_FFNF 1 /* Fatal if file not found */ +#define MY_FNABP 2 /* Fatal if not all bytes read/writen */ +#define MY_NABP 4 /* Error if not all bytes read/writen */ +#define MY_FAE 8 /* Fatal if any error */ +#define MY_WME 16 /* Write message on error */ +#define MY_WAIT_IF_FULL 32 /* Wait and try again if disk full error */ +#define MY_IGNORE_BADFD 32 /* my_sync: ignore 'bad descriptor' errors */ +#define MY_SYNC_DIR 1024 /* my_create/delete/rename: sync directory */ +#define MY_RAID 64 /* Support for RAID */ +#define MY_FULL_IO 512 /* For my_read - loop intil I/O is complete */ +#define MY_DONT_CHECK_FILESIZE 128 /* Option to init_io_cache() */ +#define MY_LINK_WARNING 32 /* my_redel() gives warning if links */ +#define MY_COPYTIME 64 /* my_redel() copys time */ +#define MY_DELETE_OLD 256 /* my_create_with_symlink() */ +#define MY_RESOLVE_LINK 128 /* my_realpath(); Only resolve links */ +#define MY_HOLD_ORIGINAL_MODES 128 /* my_copy() holds to file modes */ +#define MY_REDEL_MAKE_BACKUP 256 +#define MY_SEEK_NOT_DONE 32 /* my_lock may have to do a seek */ +#define MY_DONT_WAIT 64 /* my_lock() don't wait if can't lock */ +#define MY_ZEROFILL 32 /* my_malloc(), fill array with zero */ +#define MY_ALLOW_ZERO_PTR 64 /* my_realloc() ; zero ptr -> malloc */ +#define MY_FREE_ON_ERROR 128 /* my_realloc() ; Free old ptr on error */ +#define MY_HOLD_ON_ERROR 256 /* my_realloc() ; Return old ptr on error */ +#define MY_DONT_OVERWRITE_FILE 1024 /* my_copy: Don't overwrite file */ +#define MY_THREADSAFE 2048 /* my_seek(): lock fd mutex */ +#define MY_SYNC 4096 /* my_copy(): sync dst file */ + +#define MY_CHECK_ERROR 1 /* Params to my_end; Check open-close */ +#define MY_GIVE_INFO 2 /* Give time info about process*/ +#define MY_DONT_FREE_DBUG 4 /* Do not call DBUG_END() in my_end() */ + +#define MY_REMOVE_NONE 0 /* Params for modify_defaults_file */ +#define MY_REMOVE_OPTION 1 +#define MY_REMOVE_SECTION 2 + +#define ME_HIGHBYTE 8 /* Shift for colours */ +#define ME_NOCUR 1 /* Don't use curses message */ +#define ME_OLDWIN 2 /* Use old window */ +#define ME_BELL 4 /* Ring bell then printing message */ +#define ME_HOLDTANG 8 /* Don't delete last keys */ +#define ME_WAITTOT 16 /* Wait for errtime secs of for a action */ +#define ME_WAITTANG 32 /* Wait for a user action */ +#define ME_NOREFRESH 64 /* Dont refresh screen */ +#define ME_NOINPUT 128 /* Dont use the input libary */ +#define ME_COLOUR1 ((1 << ME_HIGHBYTE)) /* Possibly error-colours */ +#define ME_COLOUR2 ((2 << ME_HIGHBYTE)) +#define ME_COLOUR3 ((3 << ME_HIGHBYTE)) +#define ME_FATALERROR 1024 /* Fatal statement error */ +#define ME_NO_WARNING_FOR_ERROR 2048 /* Don't push a warning for error */ +#define ME_NO_SP_HANDLER 4096 /* Don't call stored routine error handlers */ + + /* Bits in last argument to fn_format */ +#define MY_REPLACE_DIR 1 /* replace dir in name with 'dir' */ +#define MY_REPLACE_EXT 2 /* replace extension with 'ext' */ +#define MY_UNPACK_FILENAME 4 /* Unpack name (~ -> home) */ +#define MY_PACK_FILENAME 8 /* Pack name (home -> ~) */ +#define MY_RESOLVE_SYMLINKS 16 /* Resolve all symbolic links */ +#define MY_RETURN_REAL_PATH 32 /* return full path for file */ +#define MY_SAFE_PATH 64 /* Return NULL if too long path */ +#define MY_RELATIVE_PATH 128 /* name is relative to 'dir' */ +#define MY_APPEND_EXT 256 /* add 'ext' as additional extension*/ + + + /* My seek flags */ +#define MY_SEEK_SET 0 +#define MY_SEEK_CUR 1 +#define MY_SEEK_END 2 + + /* Some constants */ +#define MY_WAIT_FOR_USER_TO_FIX_PANIC 60 /* in seconds */ +#define MY_WAIT_GIVE_USER_A_MESSAGE 10 /* Every 10 times of prev */ +#define MIN_COMPRESS_LENGTH 50 /* Don't compress small bl. */ +#define DFLT_INIT_HITS 3 + + /* root_alloc flags */ +#define MY_KEEP_PREALLOC 1 +#define MY_MARK_BLOCKS_FREE 2 /* move used to free list and reuse them */ + + /* Internal error numbers (for assembler functions) */ +#define MY_ERRNO_EDOM 33 +#define MY_ERRNO_ERANGE 34 + + /* Bits for get_date timeflag */ +#define GETDATE_DATE_TIME 1 +#define GETDATE_SHORT_DATE 2 +#define GETDATE_HHMMSSTIME 4 +#define GETDATE_GMT 8 +#define GETDATE_FIXEDLENGTH 16 + + /* defines when allocating data */ +#ifdef SAFEMALLOC +#define my_malloc(SZ,FLAG) _mymalloc((SZ), __FILE__, __LINE__, FLAG ) +#define my_malloc_ci(SZ,FLAG) _mymalloc((SZ), sFile, uLine, FLAG ) +#define my_realloc(PTR,SZ,FLAG) _myrealloc((PTR), (SZ), __FILE__, __LINE__, FLAG ) +#define my_checkmalloc() _sanity( __FILE__, __LINE__ ) +#define my_free(PTR,FLAG) _myfree((PTR), __FILE__, __LINE__,FLAG) +#define my_memdup(A,B,C) _my_memdup((A),(B), __FILE__,__LINE__,C) +#define my_strdup(A,C) _my_strdup((A), __FILE__,__LINE__,C) +#define my_strndup(A,B,C) _my_strndup((A),(B),__FILE__,__LINE__,C) +#define TRASH(A,B) bfill(A, B, 0x8F) +#define QUICK_SAFEMALLOC sf_malloc_quick=1 +#define NORMAL_SAFEMALLOC sf_malloc_quick=0 +extern uint sf_malloc_prehunc,sf_malloc_endhunc,sf_malloc_quick; +extern ulonglong sf_malloc_mem_limit; + +#define CALLER_INFO_PROTO , const char *sFile, uint uLine +#define CALLER_INFO , __FILE__, __LINE__ +#define ORIG_CALLER_INFO , sFile, uLine +#else +#define my_checkmalloc() +#undef TERMINATE +#define TERMINATE(A,B) {} +#define QUICK_SAFEMALLOC +#define NORMAL_SAFEMALLOC +extern void *my_malloc(size_t Size,myf MyFlags); +#define my_malloc_ci(SZ,FLAG) my_malloc( SZ, FLAG ) +extern void *my_realloc(void *oldpoint, size_t Size, myf MyFlags); +extern void my_no_flags_free(void *ptr); +extern void *my_memdup(const void *from,size_t length,myf MyFlags); +extern char *my_strdup(const char *from,myf MyFlags); +extern char *my_strndup(const char *from, size_t length, + myf MyFlags); +/* we do use FG (as a no-op) in below so that a typo on FG is caught */ +#define my_free(PTR,FG) ((void)FG,my_no_flags_free(PTR)) +#define CALLER_INFO_PROTO /* nothing */ +#define CALLER_INFO /* nothing */ +#define ORIG_CALLER_INFO /* nothing */ +#define TRASH(A,B) /* nothing */ +#endif + +#if defined(ENABLED_DEBUG_SYNC) +extern void (*debug_sync_C_callback_ptr)(const char *, size_t); +#define DEBUG_SYNC_C(_sync_point_name_) do { \ + if (debug_sync_C_callback_ptr != NULL) \ + (*debug_sync_C_callback_ptr)(STRING_WITH_LEN(_sync_point_name_)); } \ + while(0) +#else +#define DEBUG_SYNC_C(_sync_point_name_) +#endif /* defined(ENABLED_DEBUG_SYNC) */ + +#ifdef HAVE_LARGE_PAGES +extern uint my_get_large_page_size(void); +extern uchar * my_large_malloc(size_t size, myf my_flags); +extern void my_large_free(uchar * ptr, myf my_flags); +#else +#define my_get_large_page_size() (0) +#define my_large_malloc(A,B) my_malloc_lock((A),(B)) +#define my_large_free(A,B) my_free_lock((A),(B)) +#endif /* HAVE_LARGE_PAGES */ + +#ifdef HAVE_ALLOCA +#if defined(_AIX) && !defined(__GNUC__) && !defined(_AIX43) +#pragma alloca +#endif /* _AIX */ +#if defined(__MWERKS__) +#undef alloca +#define alloca _alloca +#endif /* __MWERKS__ */ +#if defined(__GNUC__) && !defined(HAVE_ALLOCA_H) && ! defined(alloca) +#define alloca __builtin_alloca +#endif /* GNUC */ +#define my_alloca(SZ) alloca((size_t) (SZ)) +#define my_afree(PTR) {} +#else +#define my_alloca(SZ) my_malloc(SZ,MYF(0)) +#define my_afree(PTR) my_free(PTR,MYF(MY_WME)) +#endif /* HAVE_ALLOCA */ + +#ifndef errno /* did we already get it? */ +#ifdef HAVE_ERRNO_AS_DEFINE +#include /* errno is a define */ +#else +extern int errno; /* declare errno */ +#endif +#endif /* #ifndef errno */ +extern char *home_dir; /* Home directory for user */ +extern const char *my_progname; /* program-name (printed in errors) */ +extern char NEAR curr_dir[]; /* Current directory for user */ +extern int (*error_handler_hook)(uint my_err, const char *str,myf MyFlags); +extern int (*fatal_error_handler_hook)(uint my_err, const char *str, + myf MyFlags); +extern uint my_file_limit; +extern ulong my_thread_stack_size; + +#ifdef HAVE_LARGE_PAGES +extern my_bool my_use_large_pages; +extern uint my_large_page_size; +#endif + +/* charsets */ +extern MYSQL_PLUGIN_IMPORT CHARSET_INFO *default_charset_info; +extern MYSQL_PLUGIN_IMPORT CHARSET_INFO *all_charsets[256]; +extern CHARSET_INFO compiled_charsets[]; + +/* statistics */ +extern ulong my_file_opened,my_stream_opened, my_tmp_file_created; +extern ulong my_file_total_opened; +extern uint mysys_usage_id; +extern my_bool my_init_done; + + /* Point to current my_message() */ +extern void (*my_sigtstp_cleanup)(void), + /* Executed before jump to shell */ + (*my_sigtstp_restart)(void), + (*my_abort_hook)(int); + /* Executed when comming from shell */ +extern MYSQL_PLUGIN_IMPORT int NEAR my_umask; /* Default creation mask */ +extern int NEAR my_umask_dir, + NEAR my_recived_signals, /* Signals we have got */ + NEAR my_safe_to_handle_signal, /* Set when allowed to SIGTSTP */ + NEAR my_dont_interrupt; /* call remember_intr when set */ +extern my_bool NEAR mysys_uses_curses, my_use_symdir; +extern size_t sf_malloc_cur_memory, sf_malloc_max_memory; + +extern ulong my_default_record_cache_size; +extern my_bool NEAR my_disable_locking,NEAR my_disable_async_io, + NEAR my_disable_flush_key_blocks, NEAR my_disable_symlinks; +extern char wild_many,wild_one,wild_prefix; +extern const char *charsets_dir; +/* from default.c */ +extern char *my_defaults_extra_file; +extern const char *my_defaults_group_suffix; +extern const char *my_defaults_file; + +extern my_bool timed_mutexes; + +typedef struct wild_file_pack /* Struct to hold info when selecting files */ +{ + uint wilds; /* How many wildcards */ + uint not_pos; /* Start of not-theese-files */ + char * *wild; /* Pointer to wildcards */ +} WF_PACK; + +enum loglevel { + ERROR_LEVEL, + WARNING_LEVEL, + INFORMATION_LEVEL +}; + +enum cache_type +{ + TYPE_NOT_SET= 0, READ_CACHE, WRITE_CACHE, + SEQ_READ_APPEND /* sequential read or append */, + READ_FIFO, READ_NET,WRITE_NET}; + +enum flush_type +{ + FLUSH_KEEP, /* flush block and keep it in the cache */ + FLUSH_RELEASE, /* flush block and remove it from the cache */ + FLUSH_IGNORE_CHANGED, /* remove block from the cache */ + /* + As my_disable_flush_pagecache_blocks is always 0, the following option + is strictly equivalent to FLUSH_KEEP + */ + FLUSH_FORCE_WRITE +}; + +typedef struct st_record_cache /* Used when cacheing records */ +{ + File file; + int rc_seek,error,inited; + uint rc_length,read_length,reclength; + my_off_t rc_record_pos,end_of_file; + uchar *rc_buff,*rc_buff2,*rc_pos,*rc_end,*rc_request_pos; +#ifdef HAVE_AIOWAIT + int use_async_io; + my_aio_result aio_result; +#endif + enum cache_type type; +} RECORD_CACHE; + +enum file_type +{ + UNOPEN = 0, FILE_BY_OPEN, FILE_BY_CREATE, STREAM_BY_FOPEN, STREAM_BY_FDOPEN, + FILE_BY_MKSTEMP, FILE_BY_DUP +}; + +struct st_my_file_info +{ + char * name; + enum file_type type; +#if defined(THREAD) && !defined(HAVE_PREAD) + pthread_mutex_t mutex; +#endif +}; + +extern struct st_my_file_info *my_file_info; + +typedef struct st_dynamic_array +{ + uchar *buffer; + uint elements,max_element; + uint alloc_increment; + uint size_of_element; +} DYNAMIC_ARRAY; + +typedef struct st_my_tmpdir +{ + DYNAMIC_ARRAY full_list; + char **list; + uint cur, max; +#ifdef THREAD + pthread_mutex_t mutex; +#endif +} MY_TMPDIR; + +typedef struct st_dynamic_string +{ + char *str; + size_t length,max_length,alloc_increment; +} DYNAMIC_STRING; + +struct st_io_cache; +typedef int (*IO_CACHE_CALLBACK)(struct st_io_cache*); + +#ifdef THREAD +typedef struct st_io_cache_share +{ + pthread_mutex_t mutex; /* To sync on reads into buffer. */ + pthread_cond_t cond; /* To wait for signals. */ + pthread_cond_t cond_writer; /* For a synchronized writer. */ + /* Offset in file corresponding to the first byte of buffer. */ + my_off_t pos_in_file; + /* If a synchronized write cache is the source of the data. */ + struct st_io_cache *source_cache; + uchar *buffer; /* The read buffer. */ + uchar *read_end; /* Behind last valid byte of buffer. */ + int running_threads; /* threads not in lock. */ + int total_threads; /* threads sharing the cache. */ + int error; /* Last error. */ +#ifdef NOT_YET_IMPLEMENTED + /* whether the structure should be free'd */ + my_bool alloced; +#endif +} IO_CACHE_SHARE; +#endif + +typedef struct st_io_cache /* Used when cacheing files */ +{ + /* Offset in file corresponding to the first byte of uchar* buffer. */ + my_off_t pos_in_file; + /* + The offset of end of file for READ_CACHE and WRITE_CACHE. + For SEQ_READ_APPEND it the maximum of the actual end of file and + the position represented by read_end. + */ + my_off_t end_of_file; + /* Points to current read position in the buffer */ + uchar *read_pos; + /* the non-inclusive boundary in the buffer for the currently valid read */ + uchar *read_end; + uchar *buffer; /* The read buffer */ + /* Used in ASYNC_IO */ + uchar *request_pos; + + /* Only used in WRITE caches and in SEQ_READ_APPEND to buffer writes */ + uchar *write_buffer; + /* + Only used in SEQ_READ_APPEND, and points to the current read position + in the write buffer. Note that reads in SEQ_READ_APPEND caches can + happen from both read buffer (uchar* buffer) and write buffer + (uchar* write_buffer). + */ + uchar *append_read_pos; + /* Points to current write position in the write buffer */ + uchar *write_pos; + /* The non-inclusive boundary of the valid write area */ + uchar *write_end; + + /* + Current_pos and current_end are convenience variables used by + my_b_tell() and other routines that need to know the current offset + current_pos points to &write_pos, and current_end to &write_end in a + WRITE_CACHE, and &read_pos and &read_end respectively otherwise + */ + uchar **current_pos, **current_end; +#ifdef THREAD + /* + The lock is for append buffer used in SEQ_READ_APPEND cache + need mutex copying from append buffer to read buffer. + */ + pthread_mutex_t append_buffer_lock; + /* + The following is used when several threads are reading the + same file in parallel. They are synchronized on disk + accesses reading the cached part of the file asynchronously. + It should be set to NULL to disable the feature. Only + READ_CACHE mode is supported. + */ + IO_CACHE_SHARE *share; +#endif + /* + A caller will use my_b_read() macro to read from the cache + if the data is already in cache, it will be simply copied with + memcpy() and internal variables will be accordinging updated with + no functions invoked. However, if the data is not fully in the cache, + my_b_read() will call read_function to fetch the data. read_function + must never be invoked directly. + */ + int (*read_function)(struct st_io_cache *,uchar *,size_t); + /* + Same idea as in the case of read_function, except my_b_write() needs to + be replaced with my_b_append() for a SEQ_READ_APPEND cache + */ + int (*write_function)(struct st_io_cache *,const uchar *,size_t); + /* + Specifies the type of the cache. Depending on the type of the cache + certain operations might not be available and yield unpredicatable + results. Details to be documented later + */ + enum cache_type type; + /* + Callbacks when the actual read I/O happens. These were added and + are currently used for binary logging of LOAD DATA INFILE - when a + block is read from the file, we create a block create/append event, and + when IO_CACHE is closed, we create an end event. These functions could, + of course be used for other things + */ + IO_CACHE_CALLBACK pre_read; + IO_CACHE_CALLBACK post_read; + IO_CACHE_CALLBACK pre_close; + /* + Counts the number of times, when we were forced to use disk. We use it to + increase the binlog_cache_disk_use status variable. + */ + ulong disk_writes; + void* arg; /* for use by pre/post_read */ + char *file_name; /* if used with 'open_cached_file' */ + char *dir,*prefix; + File file; /* file descriptor */ + /* + seek_not_done is set by my_b_seek() to inform the upcoming read/write + operation that a seek needs to be preformed prior to the actual I/O + error is 0 if the cache operation was successful, -1 if there was a + "hard" error, and the actual number of I/O-ed bytes if the read/write was + partial. + */ + int seek_not_done,error; + /* buffer_length is memory size allocated for buffer or write_buffer */ + size_t buffer_length; + /* read_length is the same as buffer_length except when we use async io */ + size_t read_length; + myf myflags; /* Flags used to my_read/my_write */ + /* + alloced_buffer is 1 if the buffer was allocated by init_io_cache() and + 0 if it was supplied by the user. + Currently READ_NET is the only one that will use a buffer allocated + somewhere else + */ + my_bool alloced_buffer; +#ifdef HAVE_AIOWAIT + /* + As inidicated by ifdef, this is for async I/O, which is not currently + used (because it's not reliable on all systems) + */ + uint inited; + my_off_t aio_read_pos; + my_aio_result aio_result; +#endif +} IO_CACHE; + +typedef int (*qsort2_cmp)(const void *, const void *, const void *); + + /* defines for mf_iocache */ + + /* Test if buffer is inited */ +#define my_b_clear(info) (info)->buffer=0 +#define my_b_inited(info) (info)->buffer +#define my_b_EOF INT_MIN + +#define my_b_read(info,Buffer,Count) \ + ((info)->read_pos + (Count) <= (info)->read_end ?\ + (memcpy(Buffer,(info)->read_pos,(size_t) (Count)), \ + ((info)->read_pos+=(Count)),0) :\ + (*(info)->read_function)((info),Buffer,Count)) + +#define my_b_write(info,Buffer,Count) \ + ((info)->write_pos + (Count) <=(info)->write_end ?\ + (memcpy((info)->write_pos, (Buffer), (size_t)(Count)),\ + ((info)->write_pos+=(Count)),0) : \ + (*(info)->write_function)((info),(uchar *)(Buffer),(Count))) + +#define my_b_get(info) \ + ((info)->read_pos != (info)->read_end ?\ + ((info)->read_pos++, (int) (uchar) (info)->read_pos[-1]) :\ + _my_b_get(info)) + + /* my_b_write_byte dosn't have any err-check */ +#define my_b_write_byte(info,chr) \ + (((info)->write_pos < (info)->write_end) ?\ + ((*(info)->write_pos++)=(chr)) :\ + (_my_b_write(info,0,0) , ((*(info)->write_pos++)=(chr)))) + +#define my_b_fill_cache(info) \ + (((info)->read_end=(info)->read_pos),(*(info)->read_function)(info,0,0)) + +#define my_b_tell(info) ((info)->pos_in_file + \ + (size_t) (*(info)->current_pos - (info)->request_pos)) + +#define my_b_get_buffer_start(info) (info)->request_pos +#define my_b_get_bytes_in_buffer(info) (char*) (info)->read_end - \ + (char*) my_b_get_buffer_start(info) +#define my_b_get_pos_in_file(info) (info)->pos_in_file + +/* tell write offset in the SEQ_APPEND cache */ +int my_b_copy_to_file(IO_CACHE *cache, FILE *file); +my_off_t my_b_append_tell(IO_CACHE* info); +my_off_t my_b_safe_tell(IO_CACHE* info); /* picks the correct tell() */ + +#define my_b_bytes_in_cache(info) (size_t) (*(info)->current_end - \ + *(info)->current_pos) + +typedef uint32 ha_checksum; + +/* Define the type of function to be passed to process_default_option_files */ +typedef int (*Process_option_func)(void *ctx, const char *group_name, + const char *option); + +#include + + + /* Prototypes for mysys and my_func functions */ + +extern int my_copy(const char *from,const char *to,myf MyFlags); +extern int my_append(const char *from,const char *to,myf MyFlags); +extern int my_delete(const char *name,myf MyFlags); +extern int my_getwd(char * buf,size_t size,myf MyFlags); +extern int my_setwd(const char *dir,myf MyFlags); +extern int my_lock(File fd,int op,my_off_t start, my_off_t length,myf MyFlags); +extern void *my_once_alloc(size_t Size,myf MyFlags); +extern void my_once_free(void); +extern char *my_once_strdup(const char *src,myf myflags); +extern void *my_once_memdup(const void *src, size_t len, myf myflags); +extern File my_open(const char *FileName,int Flags,myf MyFlags); +extern File my_register_filename(File fd, const char *FileName, + enum file_type type_of_file, + uint error_message_number, myf MyFlags); +extern File my_create(const char *FileName,int CreateFlags, + int AccessFlags, myf MyFlags); +extern int my_close(File Filedes,myf MyFlags); +extern File my_dup(File file, myf MyFlags); +extern int my_mkdir(const char *dir, int Flags, myf MyFlags); +extern int my_readlink(char *to, const char *filename, myf MyFlags); +extern int my_is_symlink(const char *filename); +extern int my_realpath(char *to, const char *filename, myf MyFlags); +extern File my_create_with_symlink(const char *linkname, const char *filename, + int createflags, int access_flags, + myf MyFlags); +extern int my_delete_with_symlink(const char *name, myf MyFlags); +extern int my_rename_with_symlink(const char *from,const char *to,myf MyFlags); +extern int my_symlink(const char *content, const char *linkname, myf MyFlags); +extern size_t my_read(File Filedes,uchar *Buffer,size_t Count,myf MyFlags); +extern size_t my_pread(File Filedes,uchar *Buffer,size_t Count,my_off_t offset, + myf MyFlags); +extern int my_rename(const char *from,const char *to,myf MyFlags); +extern my_off_t my_seek(File fd,my_off_t pos,int whence,myf MyFlags); +extern my_off_t my_tell(File fd,myf MyFlags); +extern size_t my_write(File Filedes,const uchar *Buffer,size_t Count, + myf MyFlags); +extern size_t my_pwrite(File Filedes,const uchar *Buffer,size_t Count, + my_off_t offset,myf MyFlags); +extern size_t my_fread(FILE *stream,uchar *Buffer,size_t Count,myf MyFlags); +extern size_t my_fwrite(FILE *stream,const uchar *Buffer,size_t Count, + myf MyFlags); +extern my_off_t my_fseek(FILE *stream,my_off_t pos,int whence,myf MyFlags); +extern my_off_t my_ftell(FILE *stream,myf MyFlags); +extern void *_mymalloc(size_t uSize,const char *sFile, + uint uLine, myf MyFlag); +extern void *_myrealloc(void *pPtr,size_t uSize,const char *sFile, + uint uLine, myf MyFlag); +extern void * my_multi_malloc _VARARGS((myf MyFlags, ...)); +extern void _myfree(void *pPtr,const char *sFile,uint uLine, myf MyFlag); +extern int _sanity(const char *sFile, uint uLine); +extern void *_my_memdup(const void *from, size_t length, + const char *sFile, uint uLine,myf MyFlag); +extern char * _my_strdup(const char *from, const char *sFile, uint uLine, + myf MyFlag); +extern char *_my_strndup(const char *from, size_t length, + const char *sFile, uint uLine, + myf MyFlag); + +/* implemented in my_memmem.c */ +extern void *my_memmem(const void *haystack, size_t haystacklen, + const void *needle, size_t needlelen); + + +#ifdef __WIN__ +extern int my_access(const char *path, int amode); +extern File my_sopen(const char *path, int oflag, int shflag, int pmode); +#else +#define my_access access +#endif +extern int check_if_legal_filename(const char *path); +extern int check_if_legal_tablename(const char *path); + +#if defined(__WIN__) && defined(__NT__) +extern int nt_share_delete(const char *name,myf MyFlags); +#define my_delete_allow_opened(fname,flags) nt_share_delete((fname),(flags)) +#else +#define my_delete_allow_opened(fname,flags) my_delete((fname),(flags)) +#endif + +#ifndef TERMINATE +extern void TERMINATE(FILE *file, uint flag); +#endif +extern void init_glob_errs(void); +extern void wait_for_free_space(const char *filename, int errors); +extern FILE *my_fopen(const char *FileName,int Flags,myf MyFlags); +extern FILE *my_fdopen(File Filedes,const char *name, int Flags,myf MyFlags); +extern int my_fclose(FILE *fd,myf MyFlags); +extern int my_chsize(File fd,my_off_t newlength, int filler, myf MyFlags); +extern int my_sync(File fd, myf my_flags); +extern int my_sync_dir(const char *dir_name, myf my_flags); +extern int my_sync_dir_by_file(const char *file_name, myf my_flags); +extern int my_error _VARARGS((int nr,myf MyFlags, ...)); +extern int my_printf_error _VARARGS((uint my_err, const char *format, + myf MyFlags, ...)) + ATTRIBUTE_FORMAT(printf, 2, 4); +extern int my_error_register(const char **errmsgs, int first, int last); +extern const char **my_error_unregister(int first, int last); +extern int my_message(uint my_err, const char *str,myf MyFlags); +extern int my_message_no_curses(uint my_err, const char *str,myf MyFlags); +extern int my_message_curses(uint my_err, const char *str,myf MyFlags); +extern my_bool my_init(void); +extern void my_end(int infoflag); +extern int my_redel(const char *from, const char *to, int MyFlags); +extern int my_copystat(const char *from, const char *to, int MyFlags); +extern char * my_filename(File fd); + +#ifndef THREAD +extern void dont_break(void); +extern void allow_break(void); +#else +#define dont_break() +#define allow_break() +#endif + +#ifdef EXTRA_DEBUG +void my_print_open_files(void); +#else +#define my_print_open_files() +#endif + +extern my_bool init_tmpdir(MY_TMPDIR *tmpdir, const char *pathlist); +extern char *my_tmpdir(MY_TMPDIR *tmpdir); +extern void free_tmpdir(MY_TMPDIR *tmpdir); + +extern void my_remember_signal(int signal_number,sig_handler (*func)(int)); +extern size_t dirname_part(char * to,const char *name, size_t *to_res_length); +extern size_t dirname_length(const char *name); +#define base_name(A) (A+dirname_length(A)) +extern int test_if_hard_path(const char *dir_name); +extern my_bool has_path(const char *name); +extern char *convert_dirname(char *to, const char *from, const char *from_end); +extern void to_unix_path(char * name); +extern char * fn_ext(const char *name); +extern char * fn_same(char * toname,const char *name,int flag); +extern char * fn_format(char * to,const char *name,const char *dir, + const char *form, uint flag); +extern size_t strlength(const char *str); +extern void pack_dirname(char * to,const char *from); +extern size_t normalize_dirname(char * to, const char *from); +extern size_t unpack_dirname(char * to,const char *from); +extern size_t cleanup_dirname(char * to,const char *from); +extern size_t system_filename(char * to,const char *from); +extern size_t unpack_filename(char * to,const char *from); +extern char * intern_filename(char * to,const char *from); +extern char * directory_file_name(char * dst, const char *src); +extern int pack_filename(char * to, const char *name, size_t max_length); +extern char * my_path(char * to,const char *progname, + const char *own_pathname_part); +extern char * my_load_path(char * to, const char *path, + const char *own_path_prefix); +extern int wild_compare(const char *str,const char *wildstr, + pbool str_is_pattern); +extern WF_PACK *wf_comp(char * str); +extern int wf_test(struct wild_file_pack *wf_pack,const char *name); +extern void wf_end(struct wild_file_pack *buffer); +extern my_bool array_append_string_unique(const char *str, + const char **array, size_t size); +extern void get_date(char * to,int timeflag,time_t use_time); +extern void soundex(CHARSET_INFO *, char * out_pntr, char * in_pntr, + pbool remove_garbage); +extern int init_record_cache(RECORD_CACHE *info,size_t cachesize,File file, + size_t reclength,enum cache_type type, + pbool use_async_io); +extern int read_cache_record(RECORD_CACHE *info,uchar *to); +extern int end_record_cache(RECORD_CACHE *info); +extern int write_cache_record(RECORD_CACHE *info,my_off_t filepos, + const uchar *record,size_t length); +extern int flush_write_cache(RECORD_CACHE *info); +extern long my_clock(void); +extern sig_handler sigtstp_handler(int signal_number); +extern void handle_recived_signals(void); + +extern sig_handler my_set_alarm_variable(int signo); +extern void my_string_ptr_sort(uchar *base,uint items,size_t size); +extern void radixsort_for_str_ptr(uchar* base[], uint number_of_elements, + size_t size_of_element,uchar *buffer[]); +extern qsort_t my_qsort(void *base_ptr, size_t total_elems, size_t size, + qsort_cmp cmp); +extern qsort_t my_qsort2(void *base_ptr, size_t total_elems, size_t size, + qsort2_cmp cmp, void *cmp_argument); +extern qsort2_cmp get_ptr_compare(size_t); +void my_store_ptr(uchar *buff, size_t pack_length, my_off_t pos); +my_off_t my_get_ptr(uchar *ptr, size_t pack_length); +extern int init_io_cache(IO_CACHE *info,File file,size_t cachesize, + enum cache_type type,my_off_t seek_offset, + pbool use_async_io, myf cache_myflags); +extern my_bool reinit_io_cache(IO_CACHE *info,enum cache_type type, + my_off_t seek_offset,pbool use_async_io, + pbool clear_cache); +extern void setup_io_cache(IO_CACHE* info); +extern int _my_b_read(IO_CACHE *info,uchar *Buffer,size_t Count); +#ifdef THREAD +extern int _my_b_read_r(IO_CACHE *info,uchar *Buffer,size_t Count); +extern void init_io_cache_share(IO_CACHE *read_cache, IO_CACHE_SHARE *cshare, + IO_CACHE *write_cache, uint num_threads); +extern void remove_io_thread(IO_CACHE *info); +#endif +extern int _my_b_seq_read(IO_CACHE *info,uchar *Buffer,size_t Count); +extern int _my_b_net_read(IO_CACHE *info,uchar *Buffer,size_t Count); +extern int _my_b_get(IO_CACHE *info); +extern int _my_b_async_read(IO_CACHE *info,uchar *Buffer,size_t Count); +extern int _my_b_write(IO_CACHE *info,const uchar *Buffer,size_t Count); +extern int my_b_append(IO_CACHE *info,const uchar *Buffer,size_t Count); +extern int my_b_safe_write(IO_CACHE *info,const uchar *Buffer,size_t Count); + +extern int my_block_write(IO_CACHE *info, const uchar *Buffer, + size_t Count, my_off_t pos); +extern int my_b_flush_io_cache(IO_CACHE *info, int need_append_buffer_lock); + +#define flush_io_cache(info) my_b_flush_io_cache((info),1) + +extern int end_io_cache(IO_CACHE *info); +extern size_t my_b_fill(IO_CACHE *info); +extern void my_b_seek(IO_CACHE *info,my_off_t pos); +extern size_t my_b_gets(IO_CACHE *info, char *to, size_t max_length); +extern my_off_t my_b_filelength(IO_CACHE *info); +extern size_t my_b_printf(IO_CACHE *info, const char* fmt, ...); +extern size_t my_b_vprintf(IO_CACHE *info, const char* fmt, va_list ap); +extern my_bool open_cached_file(IO_CACHE *cache,const char *dir, + const char *prefix, size_t cache_size, + myf cache_myflags); +extern my_bool real_open_cached_file(IO_CACHE *cache); +extern void close_cached_file(IO_CACHE *cache); +File create_temp_file(char *to, const char *dir, const char *pfx, + int mode, myf MyFlags); +#define my_init_dynamic_array(A,B,C,D) init_dynamic_array2(A,B,NULL,C,D CALLER_INFO) +#define my_init_dynamic_array_ci(A,B,C,D) init_dynamic_array2(A,B,NULL,C,D ORIG_CALLER_INFO) +#define my_init_dynamic_array2(A,B,C,D,E) init_dynamic_array2(A,B,C,D,E CALLER_INFO) +#define my_init_dynamic_array2_ci(A,B,C,D,E) init_dynamic_array2(A,B,C,D,E ORIG_CALLER_INFO) +extern my_bool init_dynamic_array2(DYNAMIC_ARRAY *array,uint element_size, + void *init_buffer, uint init_alloc, + uint alloc_increment + CALLER_INFO_PROTO); +/* init_dynamic_array() function is deprecated */ +extern my_bool init_dynamic_array(DYNAMIC_ARRAY *array,uint element_size, + uint init_alloc,uint alloc_increment + CALLER_INFO_PROTO); +extern my_bool insert_dynamic(DYNAMIC_ARRAY *array,uchar * element); +extern uchar *alloc_dynamic(DYNAMIC_ARRAY *array); +extern uchar *pop_dynamic(DYNAMIC_ARRAY*); +extern my_bool set_dynamic(DYNAMIC_ARRAY *array,uchar * element,uint array_index); +extern my_bool allocate_dynamic(DYNAMIC_ARRAY *array, uint max_elements); +extern void get_dynamic(DYNAMIC_ARRAY *array,uchar * element,uint array_index); +extern void delete_dynamic(DYNAMIC_ARRAY *array); +extern void delete_dynamic_element(DYNAMIC_ARRAY *array, uint array_index); +extern void freeze_size(DYNAMIC_ARRAY *array); +extern int get_index_dynamic(DYNAMIC_ARRAY *array, uchar * element); +#define dynamic_array_ptr(array,array_index) ((array)->buffer+(array_index)*(array)->size_of_element) +#define dynamic_element(array,array_index,type) ((type)((array)->buffer) +(array_index)) +#define push_dynamic(A,B) insert_dynamic((A),(B)) +#define reset_dynamic(array) ((array)->elements= 0) +#define sort_dynamic(A,cmp) my_qsort((A)->buffer, (A)->elements, (A)->size_of_element, (cmp)) + +extern my_bool init_dynamic_string(DYNAMIC_STRING *str, const char *init_str, + size_t init_alloc,size_t alloc_increment); +extern my_bool dynstr_append(DYNAMIC_STRING *str, const char *append); +my_bool dynstr_append_mem(DYNAMIC_STRING *str, const char *append, + size_t length); +extern my_bool dynstr_append_os_quoted(DYNAMIC_STRING *str, const char *append, + ...); +extern my_bool dynstr_set(DYNAMIC_STRING *str, const char *init_str); +extern my_bool dynstr_realloc(DYNAMIC_STRING *str, size_t additional_size); +extern my_bool dynstr_trunc(DYNAMIC_STRING *str, size_t n); +extern void dynstr_free(DYNAMIC_STRING *str); +#ifdef HAVE_MLOCK +extern void *my_malloc_lock(size_t length,myf flags); +extern void my_free_lock(void *ptr,myf flags); +#else +#define my_malloc_lock(A,B) my_malloc((A),(B)) +#define my_free_lock(A,B) my_free((A),(B)) +#endif +#define alloc_root_inited(A) ((A)->min_malloc != 0) +#define ALLOC_ROOT_MIN_BLOCK_SIZE (MALLOC_OVERHEAD + sizeof(USED_MEM) + 8) +#define clear_alloc_root(A) do { (A)->free= (A)->used= (A)->pre_alloc= 0; (A)->min_malloc=0;} while(0) +extern void init_alloc_root(MEM_ROOT *mem_root, size_t block_size, + size_t pre_alloc_size); +extern void *alloc_root(MEM_ROOT *mem_root, size_t Size); +extern void *multi_alloc_root(MEM_ROOT *mem_root, ...); +extern void free_root(MEM_ROOT *root, myf MyFLAGS); +extern void set_prealloc_root(MEM_ROOT *root, char *ptr); +extern void reset_root_defaults(MEM_ROOT *mem_root, size_t block_size, + size_t prealloc_size); +extern char *strdup_root(MEM_ROOT *root,const char *str); +extern char *strmake_root(MEM_ROOT *root,const char *str,size_t len); +extern void *memdup_root(MEM_ROOT *root,const void *str, size_t len); +extern int get_defaults_options(int argc, char **argv, + char **defaults, char **extra_defaults, + char **group_suffix); +extern int my_load_defaults(const char *conf_file, const char **groups, + int *argc, char ***argv, const char ***); +extern int load_defaults(const char *conf_file, const char **groups, + int *argc, char ***argv); +extern int modify_defaults_file(const char *file_location, const char *option, + const char *option_value, + const char *section_name, int remove_option); +extern int my_search_option_files(const char *conf_file, int *argc, + char ***argv, uint *args_used, + Process_option_func func, void *func_ctx, + const char **default_directories); +extern void free_defaults(char **argv); +extern void my_print_default_files(const char *conf_file); +extern void print_defaults(const char *conf_file, const char **groups); +extern my_bool my_compress(uchar *, size_t *, size_t *); +extern my_bool my_uncompress(uchar *, size_t , size_t *); +extern uchar *my_compress_alloc(const uchar *packet, size_t *len, + size_t *complen); +extern int packfrm(uchar *, size_t, uchar **, size_t *); +extern int unpackfrm(uchar **, size_t *, const uchar *); + +extern ha_checksum my_checksum(ha_checksum crc, const uchar *mem, + size_t count); +extern void my_sleep(ulong m_seconds); +extern ulong crc32(ulong crc, const uchar *buf, uint len); +extern uint my_set_max_open_files(uint files); +void my_free_open_file_info(void); + +extern time_t my_time(myf flags); +extern ulonglong my_getsystime(void); +extern ulonglong my_micro_time(); +extern ulonglong my_micro_time_and_time(time_t *time_arg); +time_t my_time_possible_from_micro(ulonglong microtime); +extern my_bool my_gethwaddr(uchar *to); +extern int my_getncpus(); + +#ifdef HAVE_SYS_MMAN_H +#include + +#ifndef MAP_NOSYNC +#define MAP_NOSYNC 0 +#endif +#ifndef MAP_NORESERVE +#define MAP_NORESERVE 0 /* For irix and AIX */ +#endif + +#ifdef HAVE_MMAP64 +#define my_mmap(a,b,c,d,e,f) mmap64(a,b,c,d,e,f) +#else +#define my_mmap(a,b,c,d,e,f) mmap(a,b,c,d,e,f) +#endif +#define my_munmap(a,b) munmap((a),(b)) + +#else +/* not a complete set of mmap() flags, but only those that nesessary */ +#define PROT_READ 1 +#define PROT_WRITE 2 +#define MAP_NORESERVE 0 +#define MAP_SHARED 0x0001 +#define MAP_PRIVATE 0x0002 +#define MAP_NOSYNC 0x0800 +#define MAP_FAILED ((void *)-1) +#define MS_SYNC 0x0000 + +#ifndef __NETWARE__ +#define HAVE_MMAP +#endif + +void *my_mmap(void *, size_t, int, int, int, my_off_t); +int my_munmap(void *, size_t); +#endif + +/* my_getpagesize */ +#ifdef HAVE_GETPAGESIZE +#define my_getpagesize() getpagesize() +#else +int my_getpagesize(void); +#endif + +int my_msync(int, void *, size_t, int); + +/* character sets */ +extern uint get_charset_number(const char *cs_name, uint cs_flags); +extern uint get_collation_number(const char *name); +extern const char *get_charset_name(uint cs_number); + +extern CHARSET_INFO *get_charset(uint cs_number, myf flags); +extern CHARSET_INFO *get_charset_by_name(const char *cs_name, myf flags); +extern CHARSET_INFO *get_charset_by_csname(const char *cs_name, + uint cs_flags, myf my_flags); + +extern my_bool resolve_charset(const char *cs_name, + CHARSET_INFO *default_cs, + CHARSET_INFO **cs); +extern my_bool resolve_collation(const char *cl_name, + CHARSET_INFO *default_cl, + CHARSET_INFO **cl); + +extern char *get_charsets_dir(char *buf); +extern my_bool my_charset_same(CHARSET_INFO *cs1, CHARSET_INFO *cs2); +extern my_bool init_compiled_charsets(myf flags); +extern void add_compiled_collation(CHARSET_INFO *cs); +extern size_t escape_string_for_mysql(CHARSET_INFO *charset_info, + char *to, size_t to_length, + const char *from, size_t length); +#ifdef __WIN__ +#define BACKSLASH_MBTAIL +/* File system character set */ +extern CHARSET_INFO *fs_character_set(void); +#endif +extern size_t escape_quotes_for_mysql(CHARSET_INFO *charset_info, + char *to, size_t to_length, + const char *from, size_t length); + +extern void thd_increment_bytes_sent(ulong length); +extern void thd_increment_bytes_received(ulong length); +extern void thd_increment_net_big_packet_count(ulong length); + +#ifdef __WIN__ +extern my_bool have_tcpip; /* Is set if tcpip is used */ + +/* implemented in my_windac.c */ + +int my_security_attr_create(SECURITY_ATTRIBUTES **psa, const char **perror, + DWORD owner_rights, DWORD everybody_rights); + +void my_security_attr_free(SECURITY_ATTRIBUTES *sa); + +/* implemented in my_conio.c */ +char* my_cgets(char *string, size_t clen, size_t* plen); + +#endif +#ifdef __NETWARE__ +void netware_reg_user(const char *ip, const char *user, + const char *application); +#endif + +C_MODE_END +#endif /* _my_sys_h */ diff --git a/EQ2/source/depends/mysql-5.1.45-win32/include/my_xml.h b/EQ2/source/depends/mysql-5.1.45-win32/include/my_xml.h new file mode 100644 index 000000000..6a453ee90 --- /dev/null +++ b/EQ2/source/depends/mysql-5.1.45-win32/include/my_xml.h @@ -0,0 +1,89 @@ +/* Copyright (C) 2000 MySQL AB + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; version 2 of the License. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ + + +#ifndef _my_xml_h +#define _my_xml_h + +#ifdef __cplusplus +extern "C" { +#endif + + +#define MY_XML_OK 0 +#define MY_XML_ERROR 1 + +/* + A flag whether to use absolute tag names in call-back functions, + like "a", "a.b" and "a.b.c" (used in character set file parser), + or relative names like "a", "b" and "c". +*/ +#define MY_XML_FLAG_RELATIVE_NAMES 1 + +/* + A flag whether to skip normilization of text values before calling + call-back functions: i.e. skip leading/trailing spaces, + \r, \n, \t characters. +*/ +#define MY_XML_FLAG_SKIP_TEXT_NORMALIZATION 2 + +enum my_xml_node_type +{ + MY_XML_NODE_TAG, /* can have TAG, ATTR and TEXT children */ + MY_XML_NODE_ATTR, /* can have TEXT children */ + MY_XML_NODE_TEXT /* cannot have children */ +}; + +typedef struct xml_stack_st +{ + int flags; + enum my_xml_node_type current_node_type; + char errstr[128]; + char attr[128]; + char *attrend; + const char *beg; + const char *cur; + const char *end; + void *user_data; + int (*enter)(struct xml_stack_st *st,const char *val, size_t len); + int (*value)(struct xml_stack_st *st,const char *val, size_t len); + int (*leave_xml)(struct xml_stack_st *st,const char *val, size_t len); +} MY_XML_PARSER; + +void my_xml_parser_create(MY_XML_PARSER *st); +void my_xml_parser_free(MY_XML_PARSER *st); +int my_xml_parse(MY_XML_PARSER *st,const char *str, size_t len); + +void my_xml_set_value_handler(MY_XML_PARSER *st, int (*)(MY_XML_PARSER *, + const char *, + size_t len)); +void my_xml_set_enter_handler(MY_XML_PARSER *st, int (*)(MY_XML_PARSER *, + const char *, + size_t len)); +void my_xml_set_leave_handler(MY_XML_PARSER *st, int (*)(MY_XML_PARSER *, + const char *, + size_t len)); +void my_xml_set_user_data(MY_XML_PARSER *st, void *); + +size_t my_xml_error_pos(MY_XML_PARSER *st); +uint my_xml_error_lineno(MY_XML_PARSER *st); + +const char *my_xml_error_string(MY_XML_PARSER *st); + +#ifdef __cplusplus +} +#endif + +#endif /* _my_xml_h */ diff --git a/EQ2/source/depends/mysql-5.1.45-win32/include/mysql.h b/EQ2/source/depends/mysql-5.1.45-win32/include/mysql.h new file mode 100644 index 000000000..d114afb6c --- /dev/null +++ b/EQ2/source/depends/mysql-5.1.45-win32/include/mysql.h @@ -0,0 +1,867 @@ +/* Copyright (C) 2000-2003 MySQL AB + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; version 2 of the License. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ + +/* + This file defines the client API to MySQL and also the ABI of the + dynamically linked libmysqlclient. + + The ABI should never be changed in a released product of MySQL + thus you need to take great care when changing the file. In case + the file is changed so the ABI is broken, you must also + update the SHAREDLIB_MAJOR_VERSION in configure.in . + +*/ + +#ifndef _mysql_h +#define _mysql_h + +#ifdef _AIX /* large-file support will break without this */ +#include +#endif + +#ifdef __CYGWIN__ /* CYGWIN implements a UNIX API */ +#undef WIN +#undef _WIN +#undef _WIN32 +#undef _WIN64 +#undef __WIN__ +#endif + +#ifdef __cplusplus +extern "C" { +#endif + +#ifndef _global_h /* If not standard header */ +#include +#ifdef __LCC__ +#include /* For windows */ +#endif +typedef char my_bool; +#if (defined(_WIN32) || defined(_WIN64)) && !defined(__WIN__) +#define __WIN__ +#endif +#if !defined(__WIN__) +#define STDCALL +#else +#define STDCALL __stdcall +#endif + +#ifndef my_socket_defined +#ifdef __WIN__ +#define my_socket SOCKET +#else +typedef int my_socket; +#endif /* __WIN__ */ +#endif /* my_socket_defined */ +#endif /* _global_h */ + +#include "mysql_version.h" +#include "mysql_com.h" +#include "mysql_time.h" + +#include "my_list.h" /* for LISTs used in 'MYSQL' and 'MYSQL_STMT' */ + +extern unsigned int mysql_port; +extern char *mysql_unix_port; + +#define CLIENT_NET_READ_TIMEOUT 365*24*3600 /* Timeout on read */ +#define CLIENT_NET_WRITE_TIMEOUT 365*24*3600 /* Timeout on write */ + +#ifdef __NETWARE__ +#pragma pack(push, 8) /* 8 byte alignment */ +#endif + +#define IS_PRI_KEY(n) ((n) & PRI_KEY_FLAG) +#define IS_NOT_NULL(n) ((n) & NOT_NULL_FLAG) +#define IS_BLOB(n) ((n) & BLOB_FLAG) +#define IS_NUM(t) ((t) <= MYSQL_TYPE_INT24 || (t) == MYSQL_TYPE_YEAR || (t) == MYSQL_TYPE_NEWDECIMAL) +#define IS_NUM_FIELD(f) ((f)->flags & NUM_FLAG) +#define INTERNAL_NUM_FIELD(f) (((f)->type <= MYSQL_TYPE_INT24 && ((f)->type != MYSQL_TYPE_TIMESTAMP || (f)->length == 14 || (f)->length == 8)) || (f)->type == MYSQL_TYPE_YEAR) +#define IS_LONGDATA(t) ((t) >= MYSQL_TYPE_TINY_BLOB && (t) <= MYSQL_TYPE_STRING) + + +typedef struct st_mysql_field { + char *name; /* Name of column */ + char *org_name; /* Original column name, if an alias */ + char *table; /* Table of column if column was a field */ + char *org_table; /* Org table name, if table was an alias */ + char *db; /* Database for table */ + char *catalog; /* Catalog for table */ + char *def; /* Default value (set by mysql_list_fields) */ + unsigned long length; /* Width of column (create length) */ + unsigned long max_length; /* Max width for selected set */ + unsigned int name_length; + unsigned int org_name_length; + unsigned int table_length; + unsigned int org_table_length; + unsigned int db_length; + unsigned int catalog_length; + unsigned int def_length; + unsigned int flags; /* Div flags */ + unsigned int decimals; /* Number of decimals in field */ + unsigned int charsetnr; /* Character set */ + enum enum_field_types type; /* Type of field. See mysql_com.h for types */ + void *extension; +} MYSQL_FIELD; + +typedef char **MYSQL_ROW; /* return data as array of strings */ +typedef unsigned int MYSQL_FIELD_OFFSET; /* offset to current field */ + +#ifndef _global_h +#if defined(NO_CLIENT_LONG_LONG) +typedef unsigned long my_ulonglong; +#elif defined (__WIN__) +typedef unsigned __int64 my_ulonglong; +#else +typedef unsigned long long my_ulonglong; +#endif +#endif + +#include "typelib.h" + +#define MYSQL_COUNT_ERROR (~(my_ulonglong) 0) + +/* backward compatibility define - to be removed eventually */ +#define ER_WARN_DATA_TRUNCATED WARN_DATA_TRUNCATED + +typedef struct st_mysql_rows { + struct st_mysql_rows *next; /* list of rows */ + MYSQL_ROW data; + unsigned long length; +} MYSQL_ROWS; + +typedef MYSQL_ROWS *MYSQL_ROW_OFFSET; /* offset to current row */ + +#include "my_alloc.h" + +typedef struct embedded_query_result EMBEDDED_QUERY_RESULT; +typedef struct st_mysql_data { + MYSQL_ROWS *data; + struct embedded_query_result *embedded_info; + MEM_ROOT alloc; + my_ulonglong rows; + unsigned int fields; + /* extra info for embedded library */ + void *extension; +} MYSQL_DATA; + +enum mysql_option +{ + MYSQL_OPT_CONNECT_TIMEOUT, MYSQL_OPT_COMPRESS, MYSQL_OPT_NAMED_PIPE, + MYSQL_INIT_COMMAND, MYSQL_READ_DEFAULT_FILE, MYSQL_READ_DEFAULT_GROUP, + MYSQL_SET_CHARSET_DIR, MYSQL_SET_CHARSET_NAME, MYSQL_OPT_LOCAL_INFILE, + MYSQL_OPT_PROTOCOL, MYSQL_SHARED_MEMORY_BASE_NAME, MYSQL_OPT_READ_TIMEOUT, + MYSQL_OPT_WRITE_TIMEOUT, MYSQL_OPT_USE_RESULT, + MYSQL_OPT_USE_REMOTE_CONNECTION, MYSQL_OPT_USE_EMBEDDED_CONNECTION, + MYSQL_OPT_GUESS_CONNECTION, MYSQL_SET_CLIENT_IP, MYSQL_SECURE_AUTH, + MYSQL_REPORT_DATA_TRUNCATION, MYSQL_OPT_RECONNECT, + MYSQL_OPT_SSL_VERIFY_SERVER_CERT +}; + +struct st_mysql_options { + unsigned int connect_timeout, read_timeout, write_timeout; + unsigned int port, protocol; + unsigned long client_flag; + char *host,*user,*password,*unix_socket,*db; + struct st_dynamic_array *init_commands; + char *my_cnf_file,*my_cnf_group, *charset_dir, *charset_name; + char *ssl_key; /* PEM key file */ + char *ssl_cert; /* PEM cert file */ + char *ssl_ca; /* PEM CA file */ + char *ssl_capath; /* PEM directory of CA-s? */ + char *ssl_cipher; /* cipher to use */ + char *shared_memory_base_name; + unsigned long max_allowed_packet; + my_bool use_ssl; /* if to use SSL or not */ + my_bool compress,named_pipe; + /* + On connect, find out the replication role of the server, and + establish connections to all the peers + */ + my_bool rpl_probe; + /* + Each call to mysql_real_query() will parse it to tell if it is a read + or a write, and direct it to the slave or the master + */ + my_bool rpl_parse; + /* + If set, never read from a master, only from slave, when doing + a read that is replication-aware + */ + my_bool no_master_reads; +#if !defined(CHECK_EMBEDDED_DIFFERENCES) || defined(EMBEDDED_LIBRARY) + my_bool separate_thread; +#endif + enum mysql_option methods_to_use; + char *client_ip; + /* Refuse client connecting to server if it uses old (pre-4.1.1) protocol */ + my_bool secure_auth; + /* 0 - never report, 1 - always report (default) */ + my_bool report_data_truncation; + + /* function pointers for local infile support */ + int (*local_infile_init)(void **, const char *, void *); + int (*local_infile_read)(void *, char *, unsigned int); + void (*local_infile_end)(void *); + int (*local_infile_error)(void *, char *, unsigned int); + void *local_infile_userdata; + void *extension; +}; + +enum mysql_status +{ + MYSQL_STATUS_READY,MYSQL_STATUS_GET_RESULT,MYSQL_STATUS_USE_RESULT +}; + +enum mysql_protocol_type +{ + MYSQL_PROTOCOL_DEFAULT, MYSQL_PROTOCOL_TCP, MYSQL_PROTOCOL_SOCKET, + MYSQL_PROTOCOL_PIPE, MYSQL_PROTOCOL_MEMORY +}; +/* + There are three types of queries - the ones that have to go to + the master, the ones that go to a slave, and the adminstrative + type which must happen on the pivot connectioin +*/ +enum mysql_rpl_type +{ + MYSQL_RPL_MASTER, MYSQL_RPL_SLAVE, MYSQL_RPL_ADMIN +}; + +typedef struct character_set +{ + unsigned int number; /* character set number */ + unsigned int state; /* character set state */ + const char *csname; /* collation name */ + const char *name; /* character set name */ + const char *comment; /* comment */ + const char *dir; /* character set directory */ + unsigned int mbminlen; /* min. length for multibyte strings */ + unsigned int mbmaxlen; /* max. length for multibyte strings */ +} MY_CHARSET_INFO; + +struct st_mysql_methods; +struct st_mysql_stmt; + +typedef struct st_mysql +{ + NET net; /* Communication parameters */ + unsigned char *connector_fd; /* ConnectorFd for SSL */ + char *host,*user,*passwd,*unix_socket,*server_version,*host_info; + char *info, *db; + struct charset_info_st *charset; + MYSQL_FIELD *fields; + MEM_ROOT field_alloc; + my_ulonglong affected_rows; + my_ulonglong insert_id; /* id if insert on table with NEXTNR */ + my_ulonglong extra_info; /* Not used */ + unsigned long thread_id; /* Id for connection in server */ + unsigned long packet_length; + unsigned int port; + unsigned long client_flag,server_capabilities; + unsigned int protocol_version; + unsigned int field_count; + unsigned int server_status; + unsigned int server_language; + unsigned int warning_count; + struct st_mysql_options options; + enum mysql_status status; + my_bool free_me; /* If free in mysql_close */ + my_bool reconnect; /* set to 1 if automatic reconnect */ + + /* session-wide random string */ + char scramble[SCRAMBLE_LENGTH+1]; + + /* + Set if this is the original connection, not a master or a slave we have + added though mysql_rpl_probe() or mysql_set_master()/ mysql_add_slave() + */ + my_bool rpl_pivot; + /* + Pointers to the master, and the next slave connections, points to + itself if lone connection. + */ + struct st_mysql* master, *next_slave; + + struct st_mysql* last_used_slave; /* needed for round-robin slave pick */ + /* needed for send/read/store/use result to work correctly with replication */ + struct st_mysql* last_used_con; + + LIST *stmts; /* list of all statements */ + const struct st_mysql_methods *methods; + void *thd; + /* + Points to boolean flag in MYSQL_RES or MYSQL_STMT. We set this flag + from mysql_stmt_close if close had to cancel result set of this object. + */ + my_bool *unbuffered_fetch_owner; + /* needed for embedded server - no net buffer to store the 'info' */ + char *info_buffer; + void *extension; +} MYSQL; + + +typedef struct st_mysql_res { + my_ulonglong row_count; + MYSQL_FIELD *fields; + MYSQL_DATA *data; + MYSQL_ROWS *data_cursor; + unsigned long *lengths; /* column lengths of current row */ + MYSQL *handle; /* for unbuffered reads */ + const struct st_mysql_methods *methods; + MYSQL_ROW row; /* If unbuffered read */ + MYSQL_ROW current_row; /* buffer to current row */ + MEM_ROOT field_alloc; + unsigned int field_count, current_field; + my_bool eof; /* Used by mysql_fetch_row */ + /* mysql_stmt_close() had to cancel this result */ + my_bool unbuffered_fetch_cancelled; + void *extension; +} MYSQL_RES; + +#define MAX_MYSQL_MANAGER_ERR 256 +#define MAX_MYSQL_MANAGER_MSG 256 + +#define MANAGER_OK 200 +#define MANAGER_INFO 250 +#define MANAGER_ACCESS 401 +#define MANAGER_CLIENT_ERR 450 +#define MANAGER_INTERNAL_ERR 500 + +#if !defined(MYSQL_SERVER) && !defined(MYSQL_CLIENT) +#define MYSQL_CLIENT +#endif + + +typedef struct st_mysql_manager +{ + NET net; + char *host, *user, *passwd; + char *net_buf, *net_buf_pos, *net_data_end; + unsigned int port; + int cmd_status; + int last_errno; + int net_buf_size; + my_bool free_me; + my_bool eof; + char last_error[MAX_MYSQL_MANAGER_ERR]; + void *extension; +} MYSQL_MANAGER; + +typedef struct st_mysql_parameters +{ + unsigned long *p_max_allowed_packet; + unsigned long *p_net_buffer_length; + void *extension; +} MYSQL_PARAMETERS; + +#if !defined(MYSQL_SERVER) && !defined(EMBEDDED_LIBRARY) +#define max_allowed_packet (*mysql_get_parameters()->p_max_allowed_packet) +#define net_buffer_length (*mysql_get_parameters()->p_net_buffer_length) +#endif + +/* + Set up and bring down the server; to ensure that applications will + work when linked against either the standard client library or the + embedded server library, these functions should be called. +*/ +int STDCALL mysql_server_init(int argc, char **argv, char **groups); +void STDCALL mysql_server_end(void); + +/* + mysql_server_init/end need to be called when using libmysqld or + libmysqlclient (exactly, mysql_server_init() is called by mysql_init() so + you don't need to call it explicitely; but you need to call + mysql_server_end() to free memory). The names are a bit misleading + (mysql_SERVER* to be used when using libmysqlCLIENT). So we add more general + names which suit well whether you're using libmysqld or libmysqlclient. We + intend to promote these aliases over the mysql_server* ones. +*/ +#define mysql_library_init mysql_server_init +#define mysql_library_end mysql_server_end + +MYSQL_PARAMETERS *STDCALL mysql_get_parameters(void); + +/* + Set up and bring down a thread; these function should be called + for each thread in an application which opens at least one MySQL + connection. All uses of the connection(s) should be between these + function calls. +*/ +my_bool STDCALL mysql_thread_init(void); +void STDCALL mysql_thread_end(void); + +/* + Functions to get information from the MYSQL and MYSQL_RES structures + Should definitely be used if one uses shared libraries. +*/ + +my_ulonglong STDCALL mysql_num_rows(MYSQL_RES *res); +unsigned int STDCALL mysql_num_fields(MYSQL_RES *res); +my_bool STDCALL mysql_eof(MYSQL_RES *res); +MYSQL_FIELD *STDCALL mysql_fetch_field_direct(MYSQL_RES *res, + unsigned int fieldnr); +MYSQL_FIELD * STDCALL mysql_fetch_fields(MYSQL_RES *res); +MYSQL_ROW_OFFSET STDCALL mysql_row_tell(MYSQL_RES *res); +MYSQL_FIELD_OFFSET STDCALL mysql_field_tell(MYSQL_RES *res); + +unsigned int STDCALL mysql_field_count(MYSQL *mysql); +my_ulonglong STDCALL mysql_affected_rows(MYSQL *mysql); +my_ulonglong STDCALL mysql_insert_id(MYSQL *mysql); +unsigned int STDCALL mysql_errno(MYSQL *mysql); +const char * STDCALL mysql_error(MYSQL *mysql); +const char *STDCALL mysql_sqlstate(MYSQL *mysql); +unsigned int STDCALL mysql_warning_count(MYSQL *mysql); +const char * STDCALL mysql_info(MYSQL *mysql); +unsigned long STDCALL mysql_thread_id(MYSQL *mysql); +const char * STDCALL mysql_character_set_name(MYSQL *mysql); +int STDCALL mysql_set_character_set(MYSQL *mysql, const char *csname); + +MYSQL * STDCALL mysql_init(MYSQL *mysql); +my_bool STDCALL mysql_ssl_set(MYSQL *mysql, const char *key, + const char *cert, const char *ca, + const char *capath, const char *cipher); +const char * STDCALL mysql_get_ssl_cipher(MYSQL *mysql); +my_bool STDCALL mysql_change_user(MYSQL *mysql, const char *user, + const char *passwd, const char *db); +MYSQL * STDCALL mysql_real_connect(MYSQL *mysql, const char *host, + const char *user, + const char *passwd, + const char *db, + unsigned int port, + const char *unix_socket, + unsigned long clientflag); +int STDCALL mysql_select_db(MYSQL *mysql, const char *db); +int STDCALL mysql_query(MYSQL *mysql, const char *q); +int STDCALL mysql_send_query(MYSQL *mysql, const char *q, + unsigned long length); +int STDCALL mysql_real_query(MYSQL *mysql, const char *q, + unsigned long length); +MYSQL_RES * STDCALL mysql_store_result(MYSQL *mysql); +MYSQL_RES * STDCALL mysql_use_result(MYSQL *mysql); + +/* perform query on master */ +my_bool STDCALL mysql_master_query(MYSQL *mysql, const char *q, + unsigned long length); +my_bool STDCALL mysql_master_send_query(MYSQL *mysql, const char *q, + unsigned long length); +/* perform query on slave */ +my_bool STDCALL mysql_slave_query(MYSQL *mysql, const char *q, + unsigned long length); +my_bool STDCALL mysql_slave_send_query(MYSQL *mysql, const char *q, + unsigned long length); +void STDCALL mysql_get_character_set_info(MYSQL *mysql, + MY_CHARSET_INFO *charset); + +/* local infile support */ + +#define LOCAL_INFILE_ERROR_LEN 512 + +void +mysql_set_local_infile_handler(MYSQL *mysql, + int (*local_infile_init)(void **, const char *, + void *), + int (*local_infile_read)(void *, char *, + unsigned int), + void (*local_infile_end)(void *), + int (*local_infile_error)(void *, char*, + unsigned int), + void *); + +void +mysql_set_local_infile_default(MYSQL *mysql); + + +/* + enable/disable parsing of all queries to decide if they go on master or + slave +*/ +void STDCALL mysql_enable_rpl_parse(MYSQL* mysql); +void STDCALL mysql_disable_rpl_parse(MYSQL* mysql); +/* get the value of the parse flag */ +int STDCALL mysql_rpl_parse_enabled(MYSQL* mysql); + +/* enable/disable reads from master */ +void STDCALL mysql_enable_reads_from_master(MYSQL* mysql); +void STDCALL mysql_disable_reads_from_master(MYSQL* mysql); +/* get the value of the master read flag */ +my_bool STDCALL mysql_reads_from_master_enabled(MYSQL* mysql); + +enum mysql_rpl_type STDCALL mysql_rpl_query_type(const char* q, int len); + +/* discover the master and its slaves */ +my_bool STDCALL mysql_rpl_probe(MYSQL* mysql); + +/* set the master, close/free the old one, if it is not a pivot */ +int STDCALL mysql_set_master(MYSQL* mysql, const char* host, + unsigned int port, + const char* user, + const char* passwd); +int STDCALL mysql_add_slave(MYSQL* mysql, const char* host, + unsigned int port, + const char* user, + const char* passwd); + +int STDCALL mysql_shutdown(MYSQL *mysql, + enum mysql_enum_shutdown_level + shutdown_level); +int STDCALL mysql_dump_debug_info(MYSQL *mysql); +int STDCALL mysql_refresh(MYSQL *mysql, + unsigned int refresh_options); +int STDCALL mysql_kill(MYSQL *mysql,unsigned long pid); +int STDCALL mysql_set_server_option(MYSQL *mysql, + enum enum_mysql_set_option + option); +int STDCALL mysql_ping(MYSQL *mysql); +const char * STDCALL mysql_stat(MYSQL *mysql); +const char * STDCALL mysql_get_server_info(MYSQL *mysql); +const char * STDCALL mysql_get_client_info(void); +unsigned long STDCALL mysql_get_client_version(void); +const char * STDCALL mysql_get_host_info(MYSQL *mysql); +unsigned long STDCALL mysql_get_server_version(MYSQL *mysql); +unsigned int STDCALL mysql_get_proto_info(MYSQL *mysql); +MYSQL_RES * STDCALL mysql_list_dbs(MYSQL *mysql,const char *wild); +MYSQL_RES * STDCALL mysql_list_tables(MYSQL *mysql,const char *wild); +MYSQL_RES * STDCALL mysql_list_processes(MYSQL *mysql); +int STDCALL mysql_options(MYSQL *mysql,enum mysql_option option, + const void *arg); +void STDCALL mysql_free_result(MYSQL_RES *result); +void STDCALL mysql_data_seek(MYSQL_RES *result, + my_ulonglong offset); +MYSQL_ROW_OFFSET STDCALL mysql_row_seek(MYSQL_RES *result, + MYSQL_ROW_OFFSET offset); +MYSQL_FIELD_OFFSET STDCALL mysql_field_seek(MYSQL_RES *result, + MYSQL_FIELD_OFFSET offset); +MYSQL_ROW STDCALL mysql_fetch_row(MYSQL_RES *result); +unsigned long * STDCALL mysql_fetch_lengths(MYSQL_RES *result); +MYSQL_FIELD * STDCALL mysql_fetch_field(MYSQL_RES *result); +MYSQL_RES * STDCALL mysql_list_fields(MYSQL *mysql, const char *table, + const char *wild); +unsigned long STDCALL mysql_escape_string(char *to,const char *from, + unsigned long from_length); +unsigned long STDCALL mysql_hex_string(char *to,const char *from, + unsigned long from_length); +unsigned long STDCALL mysql_real_escape_string(MYSQL *mysql, + char *to,const char *from, + unsigned long length); +void STDCALL mysql_debug(const char *debug); +void STDCALL myodbc_remove_escape(MYSQL *mysql,char *name); +unsigned int STDCALL mysql_thread_safe(void); +my_bool STDCALL mysql_embedded(void); +MYSQL_MANAGER* STDCALL mysql_manager_init(MYSQL_MANAGER* con); +MYSQL_MANAGER* STDCALL mysql_manager_connect(MYSQL_MANAGER* con, + const char* host, + const char* user, + const char* passwd, + unsigned int port); +void STDCALL mysql_manager_close(MYSQL_MANAGER* con); +int STDCALL mysql_manager_command(MYSQL_MANAGER* con, + const char* cmd, int cmd_len); +int STDCALL mysql_manager_fetch_line(MYSQL_MANAGER* con, + char* res_buf, + int res_buf_size); +my_bool STDCALL mysql_read_query_result(MYSQL *mysql); + + +/* + The following definitions are added for the enhanced + client-server protocol +*/ + +/* statement state */ +enum enum_mysql_stmt_state +{ + MYSQL_STMT_INIT_DONE= 1, MYSQL_STMT_PREPARE_DONE, MYSQL_STMT_EXECUTE_DONE, + MYSQL_STMT_FETCH_DONE +}; + + +/* + This structure is used to define bind information, and + internally by the client library. + Public members with their descriptions are listed below + (conventionally `On input' refers to the binds given to + mysql_stmt_bind_param, `On output' refers to the binds given + to mysql_stmt_bind_result): + + buffer_type - One of the MYSQL_* types, used to describe + the host language type of buffer. + On output: if column type is different from + buffer_type, column value is automatically converted + to buffer_type before it is stored in the buffer. + buffer - On input: points to the buffer with input data. + On output: points to the buffer capable to store + output data. + The type of memory pointed by buffer must correspond + to buffer_type. See the correspondence table in + the comment to mysql_stmt_bind_param. + + The two above members are mandatory for any kind of bind. + + buffer_length - the length of the buffer. You don't have to set + it for any fixed length buffer: float, double, + int, etc. It must be set however for variable-length + types, such as BLOBs or STRINGs. + + length - On input: in case when lengths of input values + are different for each execute, you can set this to + point at a variable containining value length. This + way the value length can be different in each execute. + If length is not NULL, buffer_length is not used. + Note, length can even point at buffer_length if + you keep bind structures around while fetching: + this way you can change buffer_length before + each execution, everything will work ok. + On output: if length is set, mysql_stmt_fetch will + write column length into it. + + is_null - On input: points to a boolean variable that should + be set to TRUE for NULL values. + This member is useful only if your data may be + NULL in some but not all cases. + If your data is never NULL, is_null should be set to 0. + If your data is always NULL, set buffer_type + to MYSQL_TYPE_NULL, and is_null will not be used. + + is_unsigned - On input: used to signify that values provided for one + of numeric types are unsigned. + On output describes signedness of the output buffer. + If, taking into account is_unsigned flag, column data + is out of range of the output buffer, data for this column + is regarded truncated. Note that this has no correspondence + to the sign of result set column, if you need to find it out + use mysql_stmt_result_metadata. + error - where to write a truncation error if it is present. + possible error value is: + 0 no truncation + 1 value is out of range or buffer is too small + + Please note that MYSQL_BIND also has internals members. +*/ + +typedef struct st_mysql_bind +{ + unsigned long *length; /* output length pointer */ + my_bool *is_null; /* Pointer to null indicator */ + void *buffer; /* buffer to get/put data */ + /* set this if you want to track data truncations happened during fetch */ + my_bool *error; + unsigned char *row_ptr; /* for the current data position */ + void (*store_param_func)(NET *net, struct st_mysql_bind *param); + void (*fetch_result)(struct st_mysql_bind *, MYSQL_FIELD *, + unsigned char **row); + void (*skip_result)(struct st_mysql_bind *, MYSQL_FIELD *, + unsigned char **row); + /* output buffer length, must be set when fetching str/binary */ + unsigned long buffer_length; + unsigned long offset; /* offset position for char/binary fetch */ + unsigned long length_value; /* Used if length is 0 */ + unsigned int param_number; /* For null count and error messages */ + unsigned int pack_length; /* Internal length for packed data */ + enum enum_field_types buffer_type; /* buffer type */ + my_bool error_value; /* used if error is 0 */ + my_bool is_unsigned; /* set if integer type is unsigned */ + my_bool long_data_used; /* If used with mysql_send_long_data */ + my_bool is_null_value; /* Used if is_null is 0 */ + void *extension; +} MYSQL_BIND; + + +/* statement handler */ +typedef struct st_mysql_stmt +{ + MEM_ROOT mem_root; /* root allocations */ + LIST list; /* list to keep track of all stmts */ + MYSQL *mysql; /* connection handle */ + MYSQL_BIND *params; /* input parameters */ + MYSQL_BIND *bind; /* output parameters */ + MYSQL_FIELD *fields; /* result set metadata */ + MYSQL_DATA result; /* cached result set */ + MYSQL_ROWS *data_cursor; /* current row in cached result */ + /* + mysql_stmt_fetch() calls this function to fetch one row (it's different + for buffered, unbuffered and cursor fetch). + */ + int (*read_row_func)(struct st_mysql_stmt *stmt, + unsigned char **row); + /* copy of mysql->affected_rows after statement execution */ + my_ulonglong affected_rows; + my_ulonglong insert_id; /* copy of mysql->insert_id */ + unsigned long stmt_id; /* Id for prepared statement */ + unsigned long flags; /* i.e. type of cursor to open */ + unsigned long prefetch_rows; /* number of rows per one COM_FETCH */ + /* + Copied from mysql->server_status after execute/fetch to know + server-side cursor status for this statement. + */ + unsigned int server_status; + unsigned int last_errno; /* error code */ + unsigned int param_count; /* input parameter count */ + unsigned int field_count; /* number of columns in result set */ + enum enum_mysql_stmt_state state; /* statement state */ + char last_error[MYSQL_ERRMSG_SIZE]; /* error message */ + char sqlstate[SQLSTATE_LENGTH+1]; + /* Types of input parameters should be sent to server */ + my_bool send_types_to_server; + my_bool bind_param_done; /* input buffers were supplied */ + unsigned char bind_result_done; /* output buffers were supplied */ + /* mysql_stmt_close() had to cancel this result */ + my_bool unbuffered_fetch_cancelled; + /* + Is set to true if we need to calculate field->max_length for + metadata fields when doing mysql_stmt_store_result. + */ + my_bool update_max_length; + void *extension; +} MYSQL_STMT; + +enum enum_stmt_attr_type +{ + /* + When doing mysql_stmt_store_result calculate max_length attribute + of statement metadata. This is to be consistent with the old API, + where this was done automatically. + In the new API we do that only by request because it slows down + mysql_stmt_store_result sufficiently. + */ + STMT_ATTR_UPDATE_MAX_LENGTH, + /* + unsigned long with combination of cursor flags (read only, for update, + etc) + */ + STMT_ATTR_CURSOR_TYPE, + /* + Amount of rows to retrieve from server per one fetch if using cursors. + Accepts unsigned long attribute in the range 1 - ulong_max + */ + STMT_ATTR_PREFETCH_ROWS +}; + + +typedef struct st_mysql_methods +{ + my_bool (*read_query_result)(MYSQL *mysql); + my_bool (*advanced_command)(MYSQL *mysql, + enum enum_server_command command, + const unsigned char *header, + unsigned long header_length, + const unsigned char *arg, + unsigned long arg_length, + my_bool skip_check, + MYSQL_STMT *stmt); + MYSQL_DATA *(*read_rows)(MYSQL *mysql,MYSQL_FIELD *mysql_fields, + unsigned int fields); + MYSQL_RES * (*use_result)(MYSQL *mysql); + void (*fetch_lengths)(unsigned long *to, + MYSQL_ROW column, unsigned int field_count); + void (*flush_use_result)(MYSQL *mysql); +#if !defined(MYSQL_SERVER) || defined(EMBEDDED_LIBRARY) + MYSQL_FIELD * (*list_fields)(MYSQL *mysql); + my_bool (*read_prepare_result)(MYSQL *mysql, MYSQL_STMT *stmt); + int (*stmt_execute)(MYSQL_STMT *stmt); + int (*read_binary_rows)(MYSQL_STMT *stmt); + int (*unbuffered_fetch)(MYSQL *mysql, char **row); + void (*free_embedded_thd)(MYSQL *mysql); + const char *(*read_statistics)(MYSQL *mysql); + my_bool (*next_result)(MYSQL *mysql); + int (*read_change_user_result)(MYSQL *mysql, char *buff, const char *passwd); + int (*read_rows_from_cursor)(MYSQL_STMT *stmt); +#endif +} MYSQL_METHODS; + + +MYSQL_STMT * STDCALL mysql_stmt_init(MYSQL *mysql); +int STDCALL mysql_stmt_prepare(MYSQL_STMT *stmt, const char *query, + unsigned long length); +int STDCALL mysql_stmt_execute(MYSQL_STMT *stmt); +int STDCALL mysql_stmt_fetch(MYSQL_STMT *stmt); +int STDCALL mysql_stmt_fetch_column(MYSQL_STMT *stmt, MYSQL_BIND *bind_arg, + unsigned int column, + unsigned long offset); +int STDCALL mysql_stmt_store_result(MYSQL_STMT *stmt); +unsigned long STDCALL mysql_stmt_param_count(MYSQL_STMT * stmt); +my_bool STDCALL mysql_stmt_attr_set(MYSQL_STMT *stmt, + enum enum_stmt_attr_type attr_type, + const void *attr); +my_bool STDCALL mysql_stmt_attr_get(MYSQL_STMT *stmt, + enum enum_stmt_attr_type attr_type, + void *attr); +my_bool STDCALL mysql_stmt_bind_param(MYSQL_STMT * stmt, MYSQL_BIND * bnd); +my_bool STDCALL mysql_stmt_bind_result(MYSQL_STMT * stmt, MYSQL_BIND * bnd); +my_bool STDCALL mysql_stmt_close(MYSQL_STMT * stmt); +my_bool STDCALL mysql_stmt_reset(MYSQL_STMT * stmt); +my_bool STDCALL mysql_stmt_free_result(MYSQL_STMT *stmt); +my_bool STDCALL mysql_stmt_send_long_data(MYSQL_STMT *stmt, + unsigned int param_number, + const char *data, + unsigned long length); +MYSQL_RES *STDCALL mysql_stmt_result_metadata(MYSQL_STMT *stmt); +MYSQL_RES *STDCALL mysql_stmt_param_metadata(MYSQL_STMT *stmt); +unsigned int STDCALL mysql_stmt_errno(MYSQL_STMT * stmt); +const char *STDCALL mysql_stmt_error(MYSQL_STMT * stmt); +const char *STDCALL mysql_stmt_sqlstate(MYSQL_STMT * stmt); +MYSQL_ROW_OFFSET STDCALL mysql_stmt_row_seek(MYSQL_STMT *stmt, + MYSQL_ROW_OFFSET offset); +MYSQL_ROW_OFFSET STDCALL mysql_stmt_row_tell(MYSQL_STMT *stmt); +void STDCALL mysql_stmt_data_seek(MYSQL_STMT *stmt, my_ulonglong offset); +my_ulonglong STDCALL mysql_stmt_num_rows(MYSQL_STMT *stmt); +my_ulonglong STDCALL mysql_stmt_affected_rows(MYSQL_STMT *stmt); +my_ulonglong STDCALL mysql_stmt_insert_id(MYSQL_STMT *stmt); +unsigned int STDCALL mysql_stmt_field_count(MYSQL_STMT *stmt); + +my_bool STDCALL mysql_commit(MYSQL * mysql); +my_bool STDCALL mysql_rollback(MYSQL * mysql); +my_bool STDCALL mysql_autocommit(MYSQL * mysql, my_bool auto_mode); +my_bool STDCALL mysql_more_results(MYSQL *mysql); +int STDCALL mysql_next_result(MYSQL *mysql); +void STDCALL mysql_close(MYSQL *sock); + + +/* status return codes */ +#define MYSQL_NO_DATA 100 +#define MYSQL_DATA_TRUNCATED 101 + +#define mysql_reload(mysql) mysql_refresh((mysql),REFRESH_GRANT) + +#ifdef USE_OLD_FUNCTIONS +MYSQL * STDCALL mysql_connect(MYSQL *mysql, const char *host, + const char *user, const char *passwd); +int STDCALL mysql_create_db(MYSQL *mysql, const char *DB); +int STDCALL mysql_drop_db(MYSQL *mysql, const char *DB); +#define mysql_reload(mysql) mysql_refresh((mysql),REFRESH_GRANT) +#endif +#define HAVE_MYSQL_REAL_CONNECT + +/* + The following functions are mainly exported because of mysqlbinlog; + They are not for general usage +*/ + +#define simple_command(mysql, command, arg, length, skip_check) \ + (*(mysql)->methods->advanced_command)(mysql, command, 0, \ + 0, arg, length, skip_check, NULL) +#define stmt_command(mysql, command, arg, length, stmt) \ + (*(mysql)->methods->advanced_command)(mysql, command, 0, \ + 0, arg, length, 1, stmt) + +#ifdef __NETWARE__ +#pragma pack(pop) /* restore alignment */ +#endif + +#ifdef __cplusplus +} +#endif + +#endif /* _mysql_h */ diff --git a/EQ2/source/depends/mysql-5.1.45-win32/include/mysql_com.h b/EQ2/source/depends/mysql-5.1.45-win32/include/mysql_com.h new file mode 100644 index 000000000..db5a5eb87 --- /dev/null +++ b/EQ2/source/depends/mysql-5.1.45-win32/include/mysql_com.h @@ -0,0 +1,522 @@ +/* Copyright (C) 2000 MySQL AB + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; version 2 of the License. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ + +/* +** Common definition between mysql server & client +*/ + +#ifndef _mysql_com_h +#define _mysql_com_h + +#define HOSTNAME_LENGTH 60 +#define SYSTEM_CHARSET_MBMAXLEN 3 +#define NAME_CHAR_LEN 64 /* Field/table name length */ +#define USERNAME_CHAR_LENGTH 16 +#define NAME_LEN (NAME_CHAR_LEN*SYSTEM_CHARSET_MBMAXLEN) +#define USERNAME_LENGTH (USERNAME_CHAR_LENGTH*SYSTEM_CHARSET_MBMAXLEN) + +#define SERVER_VERSION_LENGTH 60 +#define SQLSTATE_LENGTH 5 + +/* + USER_HOST_BUFF_SIZE -- length of string buffer, that is enough to contain + username and hostname parts of the user identifier with trailing zero in + MySQL standard format: + user_name_part@host_name_part\0 +*/ +#define USER_HOST_BUFF_SIZE HOSTNAME_LENGTH + USERNAME_LENGTH + 2 + +#define LOCAL_HOST "localhost" +#define LOCAL_HOST_NAMEDPIPE "." + + +#if defined(__WIN__) && !defined( _CUSTOMCONFIG_) +#define MYSQL_NAMEDPIPE "MySQL" +#define MYSQL_SERVICENAME "MySQL" +#endif /* __WIN__ */ + +/* + You should add new commands to the end of this list, otherwise old + servers won't be able to handle them as 'unsupported'. +*/ + +enum enum_server_command +{ + COM_SLEEP, COM_QUIT, COM_INIT_DB, COM_QUERY, COM_FIELD_LIST, + COM_CREATE_DB, COM_DROP_DB, COM_REFRESH, COM_SHUTDOWN, COM_STATISTICS, + COM_PROCESS_INFO, COM_CONNECT, COM_PROCESS_KILL, COM_DEBUG, COM_PING, + COM_TIME, COM_DELAYED_INSERT, COM_CHANGE_USER, COM_BINLOG_DUMP, + COM_TABLE_DUMP, COM_CONNECT_OUT, COM_REGISTER_SLAVE, + COM_STMT_PREPARE, COM_STMT_EXECUTE, COM_STMT_SEND_LONG_DATA, COM_STMT_CLOSE, + COM_STMT_RESET, COM_SET_OPTION, COM_STMT_FETCH, COM_DAEMON, + /* don't forget to update const char *command_name[] in sql_parse.cc */ + + /* Must be last */ + COM_END +}; + + +/* + Length of random string sent by server on handshake; this is also length of + obfuscated password, recieved from client +*/ +#define SCRAMBLE_LENGTH 20 +#define SCRAMBLE_LENGTH_323 8 +/* length of password stored in the db: new passwords are preceeded with '*' */ +#define SCRAMBLED_PASSWORD_CHAR_LENGTH (SCRAMBLE_LENGTH*2+1) +#define SCRAMBLED_PASSWORD_CHAR_LENGTH_323 (SCRAMBLE_LENGTH_323*2) + + +#define NOT_NULL_FLAG 1 /* Field can't be NULL */ +#define PRI_KEY_FLAG 2 /* Field is part of a primary key */ +#define UNIQUE_KEY_FLAG 4 /* Field is part of a unique key */ +#define MULTIPLE_KEY_FLAG 8 /* Field is part of a key */ +#define BLOB_FLAG 16 /* Field is a blob */ +#define UNSIGNED_FLAG 32 /* Field is unsigned */ +#define ZEROFILL_FLAG 64 /* Field is zerofill */ +#define BINARY_FLAG 128 /* Field is binary */ + +/* The following are only sent to new clients */ +#define ENUM_FLAG 256 /* field is an enum */ +#define AUTO_INCREMENT_FLAG 512 /* field is a autoincrement field */ +#define TIMESTAMP_FLAG 1024 /* Field is a timestamp */ +#define SET_FLAG 2048 /* field is a set */ +#define NO_DEFAULT_VALUE_FLAG 4096 /* Field doesn't have default value */ +#define ON_UPDATE_NOW_FLAG 8192 /* Field is set to NOW on UPDATE */ +#define NUM_FLAG 32768 /* Field is num (for clients) */ +#define PART_KEY_FLAG 16384 /* Intern; Part of some key */ +#define GROUP_FLAG 32768 /* Intern: Group field */ +#define UNIQUE_FLAG 65536 /* Intern: Used by sql_yacc */ +#define BINCMP_FLAG 131072 /* Intern: Used by sql_yacc */ +#define GET_FIXED_FIELDS_FLAG (1 << 18) /* Used to get fields in item tree */ +#define FIELD_IN_PART_FUNC_FLAG (1 << 19)/* Field part of partition func */ +#define FIELD_IN_ADD_INDEX (1<< 20) /* Intern: Field used in ADD INDEX */ +#define FIELD_IS_RENAMED (1<< 21) /* Intern: Field is being renamed */ + +#define REFRESH_GRANT 1 /* Refresh grant tables */ +#define REFRESH_LOG 2 /* Start on new log file */ +#define REFRESH_TABLES 4 /* close all tables */ +#define REFRESH_HOSTS 8 /* Flush host cache */ +#define REFRESH_STATUS 16 /* Flush status variables */ +#define REFRESH_THREADS 32 /* Flush thread cache */ +#define REFRESH_SLAVE 64 /* Reset master info and restart slave + thread */ +#define REFRESH_MASTER 128 /* Remove all bin logs in the index + and truncate the index */ + +/* The following can't be set with mysql_refresh() */ +#define REFRESH_READ_LOCK 16384 /* Lock tables for read */ +#define REFRESH_FAST 32768 /* Intern flag */ + +/* RESET (remove all queries) from query cache */ +#define REFRESH_QUERY_CACHE 65536 +#define REFRESH_QUERY_CACHE_FREE 0x20000L /* pack query cache */ +#define REFRESH_DES_KEY_FILE 0x40000L +#define REFRESH_USER_RESOURCES 0x80000L + +#define CLIENT_LONG_PASSWORD 1 /* new more secure passwords */ +#define CLIENT_FOUND_ROWS 2 /* Found instead of affected rows */ +#define CLIENT_LONG_FLAG 4 /* Get all column flags */ +#define CLIENT_CONNECT_WITH_DB 8 /* One can specify db on connect */ +#define CLIENT_NO_SCHEMA 16 /* Don't allow database.table.column */ +#define CLIENT_COMPRESS 32 /* Can use compression protocol */ +#define CLIENT_ODBC 64 /* Odbc client */ +#define CLIENT_LOCAL_FILES 128 /* Can use LOAD DATA LOCAL */ +#define CLIENT_IGNORE_SPACE 256 /* Ignore spaces before '(' */ +#define CLIENT_PROTOCOL_41 512 /* New 4.1 protocol */ +#define CLIENT_INTERACTIVE 1024 /* This is an interactive client */ +#define CLIENT_SSL 2048 /* Switch to SSL after handshake */ +#define CLIENT_IGNORE_SIGPIPE 4096 /* IGNORE sigpipes */ +#define CLIENT_TRANSACTIONS 8192 /* Client knows about transactions */ +#define CLIENT_RESERVED 16384 /* Old flag for 4.1 protocol */ +#define CLIENT_SECURE_CONNECTION 32768 /* New 4.1 authentication */ +#define CLIENT_MULTI_STATEMENTS (1UL << 16) /* Enable/disable multi-stmt support */ +#define CLIENT_MULTI_RESULTS (1UL << 17) /* Enable/disable multi-results */ + +#define CLIENT_SSL_VERIFY_SERVER_CERT (1UL << 30) +#define CLIENT_REMEMBER_OPTIONS (1UL << 31) + +/* Gather all possible capabilites (flags) supported by the server */ +#define CLIENT_ALL_FLAGS (CLIENT_LONG_PASSWORD | \ + CLIENT_FOUND_ROWS | \ + CLIENT_LONG_FLAG | \ + CLIENT_CONNECT_WITH_DB | \ + CLIENT_NO_SCHEMA | \ + CLIENT_COMPRESS | \ + CLIENT_ODBC | \ + CLIENT_LOCAL_FILES | \ + CLIENT_IGNORE_SPACE | \ + CLIENT_PROTOCOL_41 | \ + CLIENT_INTERACTIVE | \ + CLIENT_SSL | \ + CLIENT_IGNORE_SIGPIPE | \ + CLIENT_TRANSACTIONS | \ + CLIENT_RESERVED | \ + CLIENT_SECURE_CONNECTION | \ + CLIENT_MULTI_STATEMENTS | \ + CLIENT_MULTI_RESULTS | \ + CLIENT_SSL_VERIFY_SERVER_CERT | \ + CLIENT_REMEMBER_OPTIONS) + +/* + Switch off the flags that are optional and depending on build flags + If any of the optional flags is supported by the build it will be switched + on before sending to the client during the connection handshake. +*/ +#define CLIENT_BASIC_FLAGS (((CLIENT_ALL_FLAGS & ~CLIENT_SSL) \ + & ~CLIENT_COMPRESS) \ + & ~CLIENT_SSL_VERIFY_SERVER_CERT) + +#define SERVER_STATUS_IN_TRANS 1 /* Transaction has started */ +#define SERVER_STATUS_AUTOCOMMIT 2 /* Server in auto_commit mode */ +#define SERVER_MORE_RESULTS_EXISTS 8 /* Multi query - next query exists */ +#define SERVER_QUERY_NO_GOOD_INDEX_USED 16 +#define SERVER_QUERY_NO_INDEX_USED 32 +/** + The server was able to fulfill the clients request and opened a + read-only non-scrollable cursor for a query. This flag comes + in reply to COM_STMT_EXECUTE and COM_STMT_FETCH commands. +*/ +#define SERVER_STATUS_CURSOR_EXISTS 64 +/** + This flag is sent when a read-only cursor is exhausted, in reply to + COM_STMT_FETCH command. +*/ +#define SERVER_STATUS_LAST_ROW_SENT 128 +#define SERVER_STATUS_DB_DROPPED 256 /* A database was dropped */ +#define SERVER_STATUS_NO_BACKSLASH_ESCAPES 512 +/** + Sent to the client if after a prepared statement reprepare + we discovered that the new statement returns a different + number of result set columns. +*/ +#define SERVER_STATUS_METADATA_CHANGED 1024 + +/** + Server status flags that must be cleared when starting + execution of a new SQL statement. + Flags from this set are only added to the + current server status by the execution engine, but + never removed -- the execution engine expects them + to disappear automagically by the next command. +*/ +#define SERVER_STATUS_CLEAR_SET (SERVER_QUERY_NO_GOOD_INDEX_USED| \ + SERVER_QUERY_NO_INDEX_USED|\ + SERVER_MORE_RESULTS_EXISTS|\ + SERVER_STATUS_METADATA_CHANGED) + +#define MYSQL_ERRMSG_SIZE 512 +#define NET_READ_TIMEOUT 30 /* Timeout on read */ +#define NET_WRITE_TIMEOUT 60 /* Timeout on write */ +#define NET_WAIT_TIMEOUT 8*60*60 /* Wait for new query */ + +#define ONLY_KILL_QUERY 1 + + +struct st_vio; /* Only C */ +typedef struct st_vio Vio; + +#define MAX_TINYINT_WIDTH 3 /* Max width for a TINY w.o. sign */ +#define MAX_SMALLINT_WIDTH 5 /* Max width for a SHORT w.o. sign */ +#define MAX_MEDIUMINT_WIDTH 8 /* Max width for a INT24 w.o. sign */ +#define MAX_INT_WIDTH 10 /* Max width for a LONG w.o. sign */ +#define MAX_BIGINT_WIDTH 20 /* Max width for a LONGLONG */ +#define MAX_CHAR_WIDTH 255 /* Max length for a CHAR colum */ +#define MAX_BLOB_WIDTH 16777216 /* Default width for blob */ + +typedef struct st_net { +#if !defined(CHECK_EMBEDDED_DIFFERENCES) || !defined(EMBEDDED_LIBRARY) + Vio *vio; + unsigned char *buff,*buff_end,*write_pos,*read_pos; + my_socket fd; /* For Perl DBI/dbd */ + /* + The following variable is set if we are doing several queries in one + command ( as in LOAD TABLE ... FROM MASTER ), + and do not want to confuse the client with OK at the wrong time + */ + unsigned long remain_in_buf,length, buf_length, where_b; + unsigned long max_packet,max_packet_size; + unsigned int pkt_nr,compress_pkt_nr; + unsigned int write_timeout, read_timeout, retry_count; + int fcntl; + unsigned int *return_status; + unsigned char reading_or_writing; + char save_char; + my_bool unused0; /* Please remove with the next incompatible ABI change. */ + my_bool unused; /* Please remove with the next incompatible ABI change */ + my_bool compress; + my_bool unused1; /* Please remove with the next incompatible ABI change. */ + /* + Pointer to query object in query cache, do not equal NULL (0) for + queries in cache that have not stored its results yet + */ +#endif + /* + 'query_cache_query' should be accessed only via query cache + functions and methods to maintain proper locking. + */ + unsigned char *query_cache_query; + unsigned int last_errno; + unsigned char error; + my_bool unused2; /* Please remove with the next incompatible ABI change. */ + my_bool return_errno; + /** Client library error message buffer. Actually belongs to struct MYSQL. */ + char last_error[MYSQL_ERRMSG_SIZE]; + /** Client library sqlstate buffer. Set along with the error message. */ + char sqlstate[SQLSTATE_LENGTH+1]; + void *extension; +} NET; + + +#define packet_error (~(unsigned long) 0) + +enum enum_field_types { MYSQL_TYPE_DECIMAL, MYSQL_TYPE_TINY, + MYSQL_TYPE_SHORT, MYSQL_TYPE_LONG, + MYSQL_TYPE_FLOAT, MYSQL_TYPE_DOUBLE, + MYSQL_TYPE_NULL, MYSQL_TYPE_TIMESTAMP, + MYSQL_TYPE_LONGLONG,MYSQL_TYPE_INT24, + MYSQL_TYPE_DATE, MYSQL_TYPE_TIME, + MYSQL_TYPE_DATETIME, MYSQL_TYPE_YEAR, + MYSQL_TYPE_NEWDATE, MYSQL_TYPE_VARCHAR, + MYSQL_TYPE_BIT, + MYSQL_TYPE_NEWDECIMAL=246, + MYSQL_TYPE_ENUM=247, + MYSQL_TYPE_SET=248, + MYSQL_TYPE_TINY_BLOB=249, + MYSQL_TYPE_MEDIUM_BLOB=250, + MYSQL_TYPE_LONG_BLOB=251, + MYSQL_TYPE_BLOB=252, + MYSQL_TYPE_VAR_STRING=253, + MYSQL_TYPE_STRING=254, + MYSQL_TYPE_GEOMETRY=255 + +}; + +/* For backward compatibility */ +#define CLIENT_MULTI_QUERIES CLIENT_MULTI_STATEMENTS +#define FIELD_TYPE_DECIMAL MYSQL_TYPE_DECIMAL +#define FIELD_TYPE_NEWDECIMAL MYSQL_TYPE_NEWDECIMAL +#define FIELD_TYPE_TINY MYSQL_TYPE_TINY +#define FIELD_TYPE_SHORT MYSQL_TYPE_SHORT +#define FIELD_TYPE_LONG MYSQL_TYPE_LONG +#define FIELD_TYPE_FLOAT MYSQL_TYPE_FLOAT +#define FIELD_TYPE_DOUBLE MYSQL_TYPE_DOUBLE +#define FIELD_TYPE_NULL MYSQL_TYPE_NULL +#define FIELD_TYPE_TIMESTAMP MYSQL_TYPE_TIMESTAMP +#define FIELD_TYPE_LONGLONG MYSQL_TYPE_LONGLONG +#define FIELD_TYPE_INT24 MYSQL_TYPE_INT24 +#define FIELD_TYPE_DATE MYSQL_TYPE_DATE +#define FIELD_TYPE_TIME MYSQL_TYPE_TIME +#define FIELD_TYPE_DATETIME MYSQL_TYPE_DATETIME +#define FIELD_TYPE_YEAR MYSQL_TYPE_YEAR +#define FIELD_TYPE_NEWDATE MYSQL_TYPE_NEWDATE +#define FIELD_TYPE_ENUM MYSQL_TYPE_ENUM +#define FIELD_TYPE_SET MYSQL_TYPE_SET +#define FIELD_TYPE_TINY_BLOB MYSQL_TYPE_TINY_BLOB +#define FIELD_TYPE_MEDIUM_BLOB MYSQL_TYPE_MEDIUM_BLOB +#define FIELD_TYPE_LONG_BLOB MYSQL_TYPE_LONG_BLOB +#define FIELD_TYPE_BLOB MYSQL_TYPE_BLOB +#define FIELD_TYPE_VAR_STRING MYSQL_TYPE_VAR_STRING +#define FIELD_TYPE_STRING MYSQL_TYPE_STRING +#define FIELD_TYPE_CHAR MYSQL_TYPE_TINY +#define FIELD_TYPE_INTERVAL MYSQL_TYPE_ENUM +#define FIELD_TYPE_GEOMETRY MYSQL_TYPE_GEOMETRY +#define FIELD_TYPE_BIT MYSQL_TYPE_BIT + + +/* Shutdown/kill enums and constants */ + +/* Bits for THD::killable. */ +#define MYSQL_SHUTDOWN_KILLABLE_CONNECT (unsigned char)(1 << 0) +#define MYSQL_SHUTDOWN_KILLABLE_TRANS (unsigned char)(1 << 1) +#define MYSQL_SHUTDOWN_KILLABLE_LOCK_TABLE (unsigned char)(1 << 2) +#define MYSQL_SHUTDOWN_KILLABLE_UPDATE (unsigned char)(1 << 3) + +enum mysql_enum_shutdown_level { + /* + We want levels to be in growing order of hardness (because we use number + comparisons). Note that DEFAULT does not respect the growing property, but + it's ok. + */ + SHUTDOWN_DEFAULT = 0, + /* wait for existing connections to finish */ + SHUTDOWN_WAIT_CONNECTIONS= MYSQL_SHUTDOWN_KILLABLE_CONNECT, + /* wait for existing trans to finish */ + SHUTDOWN_WAIT_TRANSACTIONS= MYSQL_SHUTDOWN_KILLABLE_TRANS, + /* wait for existing updates to finish (=> no partial MyISAM update) */ + SHUTDOWN_WAIT_UPDATES= MYSQL_SHUTDOWN_KILLABLE_UPDATE, + /* flush InnoDB buffers and other storage engines' buffers*/ + SHUTDOWN_WAIT_ALL_BUFFERS= (MYSQL_SHUTDOWN_KILLABLE_UPDATE << 1), + /* don't flush InnoDB buffers, flush other storage engines' buffers*/ + SHUTDOWN_WAIT_CRITICAL_BUFFERS= (MYSQL_SHUTDOWN_KILLABLE_UPDATE << 1) + 1, + /* Now the 2 levels of the KILL command */ +#if MYSQL_VERSION_ID >= 50000 + KILL_QUERY= 254, +#endif + KILL_CONNECTION= 255 +}; + + +enum enum_cursor_type +{ + CURSOR_TYPE_NO_CURSOR= 0, + CURSOR_TYPE_READ_ONLY= 1, + CURSOR_TYPE_FOR_UPDATE= 2, + CURSOR_TYPE_SCROLLABLE= 4 +}; + + +/* options for mysql_set_option */ +enum enum_mysql_set_option +{ + MYSQL_OPTION_MULTI_STATEMENTS_ON, + MYSQL_OPTION_MULTI_STATEMENTS_OFF +}; + +#define net_new_transaction(net) ((net)->pkt_nr=0) + +#ifdef __cplusplus +extern "C" { +#endif + +my_bool my_net_init(NET *net, Vio* vio); +void my_net_local_init(NET *net); +void net_end(NET *net); + void net_clear(NET *net, my_bool clear_buffer); +my_bool net_realloc(NET *net, size_t length); +my_bool net_flush(NET *net); +my_bool my_net_write(NET *net,const unsigned char *packet, size_t len); +my_bool net_write_command(NET *net,unsigned char command, + const unsigned char *header, size_t head_len, + const unsigned char *packet, size_t len); +int net_real_write(NET *net,const unsigned char *packet, size_t len); +unsigned long my_net_read(NET *net); + +#ifdef _global_h +void my_net_set_write_timeout(NET *net, uint timeout); +void my_net_set_read_timeout(NET *net, uint timeout); +#endif + +/* + The following function is not meant for normal usage + Currently it's used internally by manager.c +*/ +struct sockaddr; +int my_connect(my_socket s, const struct sockaddr *name, unsigned int namelen, + unsigned int timeout); + +struct rand_struct { + unsigned long seed1,seed2,max_value; + double max_value_dbl; +}; + +#ifdef __cplusplus +} +#endif + + /* The following is for user defined functions */ + +enum Item_result {STRING_RESULT=0, REAL_RESULT, INT_RESULT, ROW_RESULT, + DECIMAL_RESULT}; + +typedef struct st_udf_args +{ + unsigned int arg_count; /* Number of arguments */ + enum Item_result *arg_type; /* Pointer to item_results */ + char **args; /* Pointer to argument */ + unsigned long *lengths; /* Length of string arguments */ + char *maybe_null; /* Set to 1 for all maybe_null args */ + char **attributes; /* Pointer to attribute name */ + unsigned long *attribute_lengths; /* Length of attribute arguments */ + void *extension; +} UDF_ARGS; + + /* This holds information about the result */ + +typedef struct st_udf_init +{ + my_bool maybe_null; /* 1 if function can return NULL */ + unsigned int decimals; /* for real functions */ + unsigned long max_length; /* For string functions */ + char *ptr; /* free pointer for function data */ + my_bool const_item; /* 1 if function always returns the same value */ + void *extension; +} UDF_INIT; +/* + TODO: add a notion for determinism of the UDF. + See Item_udf_func::update_used_tables () +*/ + + /* Constants when using compression */ +#define NET_HEADER_SIZE 4 /* standard header size */ +#define COMP_HEADER_SIZE 3 /* compression header extra size */ + + /* Prototypes to password functions */ + +#ifdef __cplusplus +extern "C" { +#endif + +/* + These functions are used for authentication by client and server and + implemented in sql/password.c +*/ + +void randominit(struct rand_struct *, unsigned long seed1, + unsigned long seed2); +double my_rnd(struct rand_struct *); +void create_random_string(char *to, unsigned int length, struct rand_struct *rand_st); + +void hash_password(unsigned long *to, const char *password, unsigned int password_len); +void make_scrambled_password_323(char *to, const char *password); +void scramble_323(char *to, const char *message, const char *password); +my_bool check_scramble_323(const char *, const char *message, + unsigned long *salt); +void get_salt_from_password_323(unsigned long *res, const char *password); +void make_password_from_salt_323(char *to, const unsigned long *salt); + +void make_scrambled_password(char *to, const char *password); +void scramble(char *to, const char *message, const char *password); +my_bool check_scramble(const char *reply, const char *message, + const unsigned char *hash_stage2); +void get_salt_from_password(unsigned char *res, const char *password); +void make_password_from_salt(char *to, const unsigned char *hash_stage2); +char *octet2hex(char *to, const char *str, unsigned int len); + +/* end of password.c */ + +char *get_tty_password(const char *opt_message); +const char *mysql_errno_to_sqlstate(unsigned int mysql_errno); + +/* Some other useful functions */ + +my_bool my_thread_init(void); +void my_thread_end(void); + +#ifdef _global_h +ulong STDCALL net_field_length(uchar **packet); +my_ulonglong net_field_length_ll(uchar **packet); +uchar *net_store_length(uchar *pkg, ulonglong length); +#endif + +#ifdef __cplusplus +} +#endif + +#define NULL_LENGTH ((unsigned long) ~0) /* For net_store_length */ +#define MYSQL_STMT_HEADER 4 +#define MYSQL_LONG_DATA_HEADER 6 + +#endif diff --git a/EQ2/source/depends/mysql-5.1.45-win32/include/mysql_embed.h b/EQ2/source/depends/mysql-5.1.45-win32/include/mysql_embed.h new file mode 100644 index 000000000..4a7fd3ef6 --- /dev/null +++ b/EQ2/source/depends/mysql-5.1.45-win32/include/mysql_embed.h @@ -0,0 +1,30 @@ +/* Copyright (C) 2000 MySQL AB + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; version 2 of the License. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ + +/* Defines that are unique to the embedded version of MySQL */ + +#ifdef EMBEDDED_LIBRARY + +/* Things we don't need in the embedded version of MySQL */ +/* TODO HF add #undef HAVE_VIO if we don't want client in embedded library */ + +#undef HAVE_PSTACK /* No stacktrace */ +#undef HAVE_OPENSSL +#undef HAVE_SMEM /* No shared memory */ +#undef HAVE_NDBCLUSTER_DB /* No NDB cluster */ + +#define DONT_USE_RAID + +#endif /* EMBEDDED_LIBRARY */ diff --git a/EQ2/source/depends/mysql-5.1.45-win32/include/mysql_time.h b/EQ2/source/depends/mysql-5.1.45-win32/include/mysql_time.h new file mode 100644 index 000000000..0a3f17a81 --- /dev/null +++ b/EQ2/source/depends/mysql-5.1.45-win32/include/mysql_time.h @@ -0,0 +1,55 @@ +/* Copyright (C) 2004 MySQL AB + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; version 2 of the License. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ + +#ifndef _mysql_time_h_ +#define _mysql_time_h_ + +/* + Time declarations shared between the server and client API: + you should not add anything to this header unless it's used + (and hence should be visible) in mysql.h. + If you're looking for a place to add new time-related declaration, + it's most likely my_time.h. See also "C API Handling of Date + and Time Values" chapter in documentation. +*/ + +enum enum_mysql_timestamp_type +{ + MYSQL_TIMESTAMP_NONE= -2, MYSQL_TIMESTAMP_ERROR= -1, + MYSQL_TIMESTAMP_DATE= 0, MYSQL_TIMESTAMP_DATETIME= 1, MYSQL_TIMESTAMP_TIME= 2 +}; + + +/* + Structure which is used to represent datetime values inside MySQL. + + We assume that values in this structure are normalized, i.e. year <= 9999, + month <= 12, day <= 31, hour <= 23, hour <= 59, hour <= 59. Many functions + in server such as my_system_gmt_sec() or make_time() family of functions + rely on this (actually now usage of make_*() family relies on a bit weaker + restriction). Also functions that produce MYSQL_TIME as result ensure this. + There is one exception to this rule though if this structure holds time + value (time_type == MYSQL_TIMESTAMP_TIME) days and hour member can hold + bigger values. +*/ +typedef struct st_mysql_time +{ + unsigned int year, month, day, hour, minute, second; + unsigned long second_part; + my_bool neg; + enum enum_mysql_timestamp_type time_type; +} MYSQL_TIME; + +#endif /* _mysql_time_h_ */ diff --git a/EQ2/source/depends/mysql-5.1.45-win32/include/mysql_version.h b/EQ2/source/depends/mysql-5.1.45-win32/include/mysql_version.h new file mode 100644 index 000000000..8b52bbef6 --- /dev/null +++ b/EQ2/source/depends/mysql-5.1.45-win32/include/mysql_version.h @@ -0,0 +1,30 @@ +/* Copyright Abandoned 1996, 1999, 2001 MySQL AB + This file is public domain and comes with NO WARRANTY of any kind */ + +/* Version numbers for protocol & mysqld */ + +#ifndef _mysql_version_h +#define _mysql_version_h +#ifdef _CUSTOMCONFIG_ +#include +#else +#define PROTOCOL_VERSION 10 +#define MYSQL_SERVER_VERSION "5.1.45" +#define MYSQL_BASE_VERSION "mysqld-5.1" +#define MYSQL_SERVER_SUFFIX_DEF "-community" +#define FRM_VER 6 +#define MYSQL_VERSION_ID 50145 +#define MYSQL_PORT 3306 +#define MYSQL_PORT_DEFAULT 0 +#define MYSQL_UNIX_ADDR "/tmp/mysql.sock" +#define MYSQL_CONFIG_NAME "my" +#define MYSQL_COMPILATION_COMMENT "MySQL Community Server (GPL)" + +/* mysqld compile time options */ +#endif /* _CUSTOMCONFIG_ */ + +#ifndef LICENSE +#define LICENSE GPL +#endif /* LICENSE */ + +#endif /* _mysql_version_h */ diff --git a/EQ2/source/depends/mysql-5.1.45-win32/include/mysqld_ername.h b/EQ2/source/depends/mysql-5.1.45-win32/include/mysqld_ername.h new file mode 100644 index 000000000..cc8b36ada --- /dev/null +++ b/EQ2/source/depends/mysql-5.1.45-win32/include/mysqld_ername.h @@ -0,0 +1,643 @@ +/* Autogenerated file, please don't edit */ + +{ "ER_HASHCHK", 1000 }, +{ "ER_NISAMCHK", 1001 }, +{ "ER_NO", 1002 }, +{ "ER_YES", 1003 }, +{ "ER_CANT_CREATE_FILE", 1004 }, +{ "ER_CANT_CREATE_TABLE", 1005 }, +{ "ER_CANT_CREATE_DB", 1006 }, +{ "ER_DB_CREATE_EXISTS", 1007 }, +{ "ER_DB_DROP_EXISTS", 1008 }, +{ "ER_DB_DROP_DELETE", 1009 }, +{ "ER_DB_DROP_RMDIR", 1010 }, +{ "ER_CANT_DELETE_FILE", 1011 }, +{ "ER_CANT_FIND_SYSTEM_REC", 1012 }, +{ "ER_CANT_GET_STAT", 1013 }, +{ "ER_CANT_GET_WD", 1014 }, +{ "ER_CANT_LOCK", 1015 }, +{ "ER_CANT_OPEN_FILE", 1016 }, +{ "ER_FILE_NOT_FOUND", 1017 }, +{ "ER_CANT_READ_DIR", 1018 }, +{ "ER_CANT_SET_WD", 1019 }, +{ "ER_CHECKREAD", 1020 }, +{ "ER_DISK_FULL", 1021 }, +{ "ER_DUP_KEY", 1022 }, +{ "ER_ERROR_ON_CLOSE", 1023 }, +{ "ER_ERROR_ON_READ", 1024 }, +{ "ER_ERROR_ON_RENAME", 1025 }, +{ "ER_ERROR_ON_WRITE", 1026 }, +{ "ER_FILE_USED", 1027 }, +{ "ER_FILSORT_ABORT", 1028 }, +{ "ER_FORM_NOT_FOUND", 1029 }, +{ "ER_GET_ERRNO", 1030 }, +{ "ER_ILLEGAL_HA", 1031 }, +{ "ER_KEY_NOT_FOUND", 1032 }, +{ "ER_NOT_FORM_FILE", 1033 }, +{ "ER_NOT_KEYFILE", 1034 }, +{ "ER_OLD_KEYFILE", 1035 }, +{ "ER_OPEN_AS_READONLY", 1036 }, +{ "ER_OUTOFMEMORY", 1037 }, +{ "ER_OUT_OF_SORTMEMORY", 1038 }, +{ "ER_UNEXPECTED_EOF", 1039 }, +{ "ER_CON_COUNT_ERROR", 1040 }, +{ "ER_OUT_OF_RESOURCES", 1041 }, +{ "ER_BAD_HOST_ERROR", 1042 }, +{ "ER_HANDSHAKE_ERROR", 1043 }, +{ "ER_DBACCESS_DENIED_ERROR", 1044 }, +{ "ER_ACCESS_DENIED_ERROR", 1045 }, +{ "ER_NO_DB_ERROR", 1046 }, +{ "ER_UNKNOWN_COM_ERROR", 1047 }, +{ "ER_BAD_NULL_ERROR", 1048 }, +{ "ER_BAD_DB_ERROR", 1049 }, +{ "ER_TABLE_EXISTS_ERROR", 1050 }, +{ "ER_BAD_TABLE_ERROR", 1051 }, +{ "ER_NON_UNIQ_ERROR", 1052 }, +{ "ER_SERVER_SHUTDOWN", 1053 }, +{ "ER_BAD_FIELD_ERROR", 1054 }, +{ "ER_WRONG_FIELD_WITH_GROUP", 1055 }, +{ "ER_WRONG_GROUP_FIELD", 1056 }, +{ "ER_WRONG_SUM_SELECT", 1057 }, +{ "ER_WRONG_VALUE_COUNT", 1058 }, +{ "ER_TOO_LONG_IDENT", 1059 }, +{ "ER_DUP_FIELDNAME", 1060 }, +{ "ER_DUP_KEYNAME", 1061 }, +{ "ER_DUP_ENTRY", 1062 }, +{ "ER_WRONG_FIELD_SPEC", 1063 }, +{ "ER_PARSE_ERROR", 1064 }, +{ "ER_EMPTY_QUERY", 1065 }, +{ "ER_NONUNIQ_TABLE", 1066 }, +{ "ER_INVALID_DEFAULT", 1067 }, +{ "ER_MULTIPLE_PRI_KEY", 1068 }, +{ "ER_TOO_MANY_KEYS", 1069 }, +{ "ER_TOO_MANY_KEY_PARTS", 1070 }, +{ "ER_TOO_LONG_KEY", 1071 }, +{ "ER_KEY_COLUMN_DOES_NOT_EXITS", 1072 }, +{ "ER_BLOB_USED_AS_KEY", 1073 }, +{ "ER_TOO_BIG_FIELDLENGTH", 1074 }, +{ "ER_WRONG_AUTO_KEY", 1075 }, +{ "ER_READY", 1076 }, +{ "ER_NORMAL_SHUTDOWN", 1077 }, +{ "ER_GOT_SIGNAL", 1078 }, +{ "ER_SHUTDOWN_COMPLETE", 1079 }, +{ "ER_FORCING_CLOSE", 1080 }, +{ "ER_IPSOCK_ERROR", 1081 }, +{ "ER_NO_SUCH_INDEX", 1082 }, +{ "ER_WRONG_FIELD_TERMINATORS", 1083 }, +{ "ER_BLOBS_AND_NO_TERMINATED", 1084 }, +{ "ER_TEXTFILE_NOT_READABLE", 1085 }, +{ "ER_FILE_EXISTS_ERROR", 1086 }, +{ "ER_LOAD_INFO", 1087 }, +{ "ER_ALTER_INFO", 1088 }, +{ "ER_WRONG_SUB_KEY", 1089 }, +{ "ER_CANT_REMOVE_ALL_FIELDS", 1090 }, +{ "ER_CANT_DROP_FIELD_OR_KEY", 1091 }, +{ "ER_INSERT_INFO", 1092 }, +{ "ER_UPDATE_TABLE_USED", 1093 }, +{ "ER_NO_SUCH_THREAD", 1094 }, +{ "ER_KILL_DENIED_ERROR", 1095 }, +{ "ER_NO_TABLES_USED", 1096 }, +{ "ER_TOO_BIG_SET", 1097 }, +{ "ER_NO_UNIQUE_LOGFILE", 1098 }, +{ "ER_TABLE_NOT_LOCKED_FOR_WRITE", 1099 }, +{ "ER_TABLE_NOT_LOCKED", 1100 }, +{ "ER_BLOB_CANT_HAVE_DEFAULT", 1101 }, +{ "ER_WRONG_DB_NAME", 1102 }, +{ "ER_WRONG_TABLE_NAME", 1103 }, +{ "ER_TOO_BIG_SELECT", 1104 }, +{ "ER_UNKNOWN_ERROR", 1105 }, +{ "ER_UNKNOWN_PROCEDURE", 1106 }, +{ "ER_WRONG_PARAMCOUNT_TO_PROCEDURE", 1107 }, +{ "ER_WRONG_PARAMETERS_TO_PROCEDURE", 1108 }, +{ "ER_UNKNOWN_TABLE", 1109 }, +{ "ER_FIELD_SPECIFIED_TWICE", 1110 }, +{ "ER_INVALID_GROUP_FUNC_USE", 1111 }, +{ "ER_UNSUPPORTED_EXTENSION", 1112 }, +{ "ER_TABLE_MUST_HAVE_COLUMNS", 1113 }, +{ "ER_RECORD_FILE_FULL", 1114 }, +{ "ER_UNKNOWN_CHARACTER_SET", 1115 }, +{ "ER_TOO_MANY_TABLES", 1116 }, +{ "ER_TOO_MANY_FIELDS", 1117 }, +{ "ER_TOO_BIG_ROWSIZE", 1118 }, +{ "ER_STACK_OVERRUN", 1119 }, +{ "ER_WRONG_OUTER_JOIN", 1120 }, +{ "ER_NULL_COLUMN_IN_INDEX", 1121 }, +{ "ER_CANT_FIND_UDF", 1122 }, +{ "ER_CANT_INITIALIZE_UDF", 1123 }, +{ "ER_UDF_NO_PATHS", 1124 }, +{ "ER_UDF_EXISTS", 1125 }, +{ "ER_CANT_OPEN_LIBRARY", 1126 }, +{ "ER_CANT_FIND_DL_ENTRY", 1127 }, +{ "ER_FUNCTION_NOT_DEFINED", 1128 }, +{ "ER_HOST_IS_BLOCKED", 1129 }, +{ "ER_HOST_NOT_PRIVILEGED", 1130 }, +{ "ER_PASSWORD_ANONYMOUS_USER", 1131 }, +{ "ER_PASSWORD_NOT_ALLOWED", 1132 }, +{ "ER_PASSWORD_NO_MATCH", 1133 }, +{ "ER_UPDATE_INFO", 1134 }, +{ "ER_CANT_CREATE_THREAD", 1135 }, +{ "ER_WRONG_VALUE_COUNT_ON_ROW", 1136 }, +{ "ER_CANT_REOPEN_TABLE", 1137 }, +{ "ER_INVALID_USE_OF_NULL", 1138 }, +{ "ER_REGEXP_ERROR", 1139 }, +{ "ER_MIX_OF_GROUP_FUNC_AND_FIELDS", 1140 }, +{ "ER_NONEXISTING_GRANT", 1141 }, +{ "ER_TABLEACCESS_DENIED_ERROR", 1142 }, +{ "ER_COLUMNACCESS_DENIED_ERROR", 1143 }, +{ "ER_ILLEGAL_GRANT_FOR_TABLE", 1144 }, +{ "ER_GRANT_WRONG_HOST_OR_USER", 1145 }, +{ "ER_NO_SUCH_TABLE", 1146 }, +{ "ER_NONEXISTING_TABLE_GRANT", 1147 }, +{ "ER_NOT_ALLOWED_COMMAND", 1148 }, +{ "ER_SYNTAX_ERROR", 1149 }, +{ "ER_DELAYED_CANT_CHANGE_LOCK", 1150 }, +{ "ER_TOO_MANY_DELAYED_THREADS", 1151 }, +{ "ER_ABORTING_CONNECTION", 1152 }, +{ "ER_NET_PACKET_TOO_LARGE", 1153 }, +{ "ER_NET_READ_ERROR_FROM_PIPE", 1154 }, +{ "ER_NET_FCNTL_ERROR", 1155 }, +{ "ER_NET_PACKETS_OUT_OF_ORDER", 1156 }, +{ "ER_NET_UNCOMPRESS_ERROR", 1157 }, +{ "ER_NET_READ_ERROR", 1158 }, +{ "ER_NET_READ_INTERRUPTED", 1159 }, +{ "ER_NET_ERROR_ON_WRITE", 1160 }, +{ "ER_NET_WRITE_INTERRUPTED", 1161 }, +{ "ER_TOO_LONG_STRING", 1162 }, +{ "ER_TABLE_CANT_HANDLE_BLOB", 1163 }, +{ "ER_TABLE_CANT_HANDLE_AUTO_INCREMENT", 1164 }, +{ "ER_DELAYED_INSERT_TABLE_LOCKED", 1165 }, +{ "ER_WRONG_COLUMN_NAME", 1166 }, +{ "ER_WRONG_KEY_COLUMN", 1167 }, +{ "ER_WRONG_MRG_TABLE", 1168 }, +{ "ER_DUP_UNIQUE", 1169 }, +{ "ER_BLOB_KEY_WITHOUT_LENGTH", 1170 }, +{ "ER_PRIMARY_CANT_HAVE_NULL", 1171 }, +{ "ER_TOO_MANY_ROWS", 1172 }, +{ "ER_REQUIRES_PRIMARY_KEY", 1173 }, +{ "ER_NO_RAID_COMPILED", 1174 }, +{ "ER_UPDATE_WITHOUT_KEY_IN_SAFE_MODE", 1175 }, +{ "ER_KEY_DOES_NOT_EXITS", 1176 }, +{ "ER_CHECK_NO_SUCH_TABLE", 1177 }, +{ "ER_CHECK_NOT_IMPLEMENTED", 1178 }, +{ "ER_CANT_DO_THIS_DURING_AN_TRANSACTION", 1179 }, +{ "ER_ERROR_DURING_COMMIT", 1180 }, +{ "ER_ERROR_DURING_ROLLBACK", 1181 }, +{ "ER_ERROR_DURING_FLUSH_LOGS", 1182 }, +{ "ER_ERROR_DURING_CHECKPOINT", 1183 }, +{ "ER_NEW_ABORTING_CONNECTION", 1184 }, +{ "ER_DUMP_NOT_IMPLEMENTED", 1185 }, +{ "ER_FLUSH_MASTER_BINLOG_CLOSED", 1186 }, +{ "ER_INDEX_REBUILD", 1187 }, +{ "ER_MASTER", 1188 }, +{ "ER_MASTER_NET_READ", 1189 }, +{ "ER_MASTER_NET_WRITE", 1190 }, +{ "ER_FT_MATCHING_KEY_NOT_FOUND", 1191 }, +{ "ER_LOCK_OR_ACTIVE_TRANSACTION", 1192 }, +{ "ER_UNKNOWN_SYSTEM_VARIABLE", 1193 }, +{ "ER_CRASHED_ON_USAGE", 1194 }, +{ "ER_CRASHED_ON_REPAIR", 1195 }, +{ "ER_WARNING_NOT_COMPLETE_ROLLBACK", 1196 }, +{ "ER_TRANS_CACHE_FULL", 1197 }, +{ "ER_SLAVE_MUST_STOP", 1198 }, +{ "ER_SLAVE_NOT_RUNNING", 1199 }, +{ "ER_BAD_SLAVE", 1200 }, +{ "ER_MASTER_INFO", 1201 }, +{ "ER_SLAVE_THREAD", 1202 }, +{ "ER_TOO_MANY_USER_CONNECTIONS", 1203 }, +{ "ER_SET_CONSTANTS_ONLY", 1204 }, +{ "ER_LOCK_WAIT_TIMEOUT", 1205 }, +{ "ER_LOCK_TABLE_FULL", 1206 }, +{ "ER_READ_ONLY_TRANSACTION", 1207 }, +{ "ER_DROP_DB_WITH_READ_LOCK", 1208 }, +{ "ER_CREATE_DB_WITH_READ_LOCK", 1209 }, +{ "ER_WRONG_ARGUMENTS", 1210 }, +{ "ER_NO_PERMISSION_TO_CREATE_USER", 1211 }, +{ "ER_UNION_TABLES_IN_DIFFERENT_DIR", 1212 }, +{ "ER_LOCK_DEADLOCK", 1213 }, +{ "ER_TABLE_CANT_HANDLE_FT", 1214 }, +{ "ER_CANNOT_ADD_FOREIGN", 1215 }, +{ "ER_NO_REFERENCED_ROW", 1216 }, +{ "ER_ROW_IS_REFERENCED", 1217 }, +{ "ER_CONNECT_TO_MASTER", 1218 }, +{ "ER_QUERY_ON_MASTER", 1219 }, +{ "ER_ERROR_WHEN_EXECUTING_COMMAND", 1220 }, +{ "ER_WRONG_USAGE", 1221 }, +{ "ER_WRONG_NUMBER_OF_COLUMNS_IN_SELECT", 1222 }, +{ "ER_CANT_UPDATE_WITH_READLOCK", 1223 }, +{ "ER_MIXING_NOT_ALLOWED", 1224 }, +{ "ER_DUP_ARGUMENT", 1225 }, +{ "ER_USER_LIMIT_REACHED", 1226 }, +{ "ER_SPECIFIC_ACCESS_DENIED_ERROR", 1227 }, +{ "ER_LOCAL_VARIABLE", 1228 }, +{ "ER_GLOBAL_VARIABLE", 1229 }, +{ "ER_NO_DEFAULT", 1230 }, +{ "ER_WRONG_VALUE_FOR_VAR", 1231 }, +{ "ER_WRONG_TYPE_FOR_VAR", 1232 }, +{ "ER_VAR_CANT_BE_READ", 1233 }, +{ "ER_CANT_USE_OPTION_HERE", 1234 }, +{ "ER_NOT_SUPPORTED_YET", 1235 }, +{ "ER_MASTER_FATAL_ERROR_READING_BINLOG", 1236 }, +{ "ER_SLAVE_IGNORED_TABLE", 1237 }, +{ "ER_INCORRECT_GLOBAL_LOCAL_VAR", 1238 }, +{ "ER_WRONG_FK_DEF", 1239 }, +{ "ER_KEY_REF_DO_NOT_MATCH_TABLE_REF", 1240 }, +{ "ER_OPERAND_COLUMNS", 1241 }, +{ "ER_SUBQUERY_NO_1_ROW", 1242 }, +{ "ER_UNKNOWN_STMT_HANDLER", 1243 }, +{ "ER_CORRUPT_HELP_DB", 1244 }, +{ "ER_CYCLIC_REFERENCE", 1245 }, +{ "ER_AUTO_CONVERT", 1246 }, +{ "ER_ILLEGAL_REFERENCE", 1247 }, +{ "ER_DERIVED_MUST_HAVE_ALIAS", 1248 }, +{ "ER_SELECT_REDUCED", 1249 }, +{ "ER_TABLENAME_NOT_ALLOWED_HERE", 1250 }, +{ "ER_NOT_SUPPORTED_AUTH_MODE", 1251 }, +{ "ER_SPATIAL_CANT_HAVE_NULL", 1252 }, +{ "ER_COLLATION_CHARSET_MISMATCH", 1253 }, +{ "ER_SLAVE_WAS_RUNNING", 1254 }, +{ "ER_SLAVE_WAS_NOT_RUNNING", 1255 }, +{ "ER_TOO_BIG_FOR_UNCOMPRESS", 1256 }, +{ "ER_ZLIB_Z_MEM_ERROR", 1257 }, +{ "ER_ZLIB_Z_BUF_ERROR", 1258 }, +{ "ER_ZLIB_Z_DATA_ERROR", 1259 }, +{ "ER_CUT_VALUE_GROUP_CONCAT", 1260 }, +{ "ER_WARN_TOO_FEW_RECORDS", 1261 }, +{ "ER_WARN_TOO_MANY_RECORDS", 1262 }, +{ "ER_WARN_NULL_TO_NOTNULL", 1263 }, +{ "ER_WARN_DATA_OUT_OF_RANGE", 1264 }, +{ "WARN_DATA_TRUNCATED", 1265 }, +{ "ER_WARN_USING_OTHER_HANDLER", 1266 }, +{ "ER_CANT_AGGREGATE_2COLLATIONS", 1267 }, +{ "ER_DROP_USER", 1268 }, +{ "ER_REVOKE_GRANTS", 1269 }, +{ "ER_CANT_AGGREGATE_3COLLATIONS", 1270 }, +{ "ER_CANT_AGGREGATE_NCOLLATIONS", 1271 }, +{ "ER_VARIABLE_IS_NOT_STRUCT", 1272 }, +{ "ER_UNKNOWN_COLLATION", 1273 }, +{ "ER_SLAVE_IGNORED_SSL_PARAMS", 1274 }, +{ "ER_SERVER_IS_IN_SECURE_AUTH_MODE", 1275 }, +{ "ER_WARN_FIELD_RESOLVED", 1276 }, +{ "ER_BAD_SLAVE_UNTIL_COND", 1277 }, +{ "ER_MISSING_SKIP_SLAVE", 1278 }, +{ "ER_UNTIL_COND_IGNORED", 1279 }, +{ "ER_WRONG_NAME_FOR_INDEX", 1280 }, +{ "ER_WRONG_NAME_FOR_CATALOG", 1281 }, +{ "ER_WARN_QC_RESIZE", 1282 }, +{ "ER_BAD_FT_COLUMN", 1283 }, +{ "ER_UNKNOWN_KEY_CACHE", 1284 }, +{ "ER_WARN_HOSTNAME_WONT_WORK", 1285 }, +{ "ER_UNKNOWN_STORAGE_ENGINE", 1286 }, +{ "ER_WARN_DEPRECATED_SYNTAX", 1287 }, +{ "ER_NON_UPDATABLE_TABLE", 1288 }, +{ "ER_FEATURE_DISABLED", 1289 }, +{ "ER_OPTION_PREVENTS_STATEMENT", 1290 }, +{ "ER_DUPLICATED_VALUE_IN_TYPE", 1291 }, +{ "ER_TRUNCATED_WRONG_VALUE", 1292 }, +{ "ER_TOO_MUCH_AUTO_TIMESTAMP_COLS", 1293 }, +{ "ER_INVALID_ON_UPDATE", 1294 }, +{ "ER_UNSUPPORTED_PS", 1295 }, +{ "ER_GET_ERRMSG", 1296 }, +{ "ER_GET_TEMPORARY_ERRMSG", 1297 }, +{ "ER_UNKNOWN_TIME_ZONE", 1298 }, +{ "ER_WARN_INVALID_TIMESTAMP", 1299 }, +{ "ER_INVALID_CHARACTER_STRING", 1300 }, +{ "ER_WARN_ALLOWED_PACKET_OVERFLOWED", 1301 }, +{ "ER_CONFLICTING_DECLARATIONS", 1302 }, +{ "ER_SP_NO_RECURSIVE_CREATE", 1303 }, +{ "ER_SP_ALREADY_EXISTS", 1304 }, +{ "ER_SP_DOES_NOT_EXIST", 1305 }, +{ "ER_SP_DROP_FAILED", 1306 }, +{ "ER_SP_STORE_FAILED", 1307 }, +{ "ER_SP_LILABEL_MISMATCH", 1308 }, +{ "ER_SP_LABEL_REDEFINE", 1309 }, +{ "ER_SP_LABEL_MISMATCH", 1310 }, +{ "ER_SP_UNINIT_VAR", 1311 }, +{ "ER_SP_BADSELECT", 1312 }, +{ "ER_SP_BADRETURN", 1313 }, +{ "ER_SP_BADSTATEMENT", 1314 }, +{ "ER_UPDATE_LOG_DEPRECATED_IGNORED", 1315 }, +{ "ER_UPDATE_LOG_DEPRECATED_TRANSLATED", 1316 }, +{ "ER_QUERY_INTERRUPTED", 1317 }, +{ "ER_SP_WRONG_NO_OF_ARGS", 1318 }, +{ "ER_SP_COND_MISMATCH", 1319 }, +{ "ER_SP_NORETURN", 1320 }, +{ "ER_SP_NORETURNEND", 1321 }, +{ "ER_SP_BAD_CURSOR_QUERY", 1322 }, +{ "ER_SP_BAD_CURSOR_SELECT", 1323 }, +{ "ER_SP_CURSOR_MISMATCH", 1324 }, +{ "ER_SP_CURSOR_ALREADY_OPEN", 1325 }, +{ "ER_SP_CURSOR_NOT_OPEN", 1326 }, +{ "ER_SP_UNDECLARED_VAR", 1327 }, +{ "ER_SP_WRONG_NO_OF_FETCH_ARGS", 1328 }, +{ "ER_SP_FETCH_NO_DATA", 1329 }, +{ "ER_SP_DUP_PARAM", 1330 }, +{ "ER_SP_DUP_VAR", 1331 }, +{ "ER_SP_DUP_COND", 1332 }, +{ "ER_SP_DUP_CURS", 1333 }, +{ "ER_SP_CANT_ALTER", 1334 }, +{ "ER_SP_SUBSELECT_NYI", 1335 }, +{ "ER_STMT_NOT_ALLOWED_IN_SF_OR_TRG", 1336 }, +{ "ER_SP_VARCOND_AFTER_CURSHNDLR", 1337 }, +{ "ER_SP_CURSOR_AFTER_HANDLER", 1338 }, +{ "ER_SP_CASE_NOT_FOUND", 1339 }, +{ "ER_FPARSER_TOO_BIG_FILE", 1340 }, +{ "ER_FPARSER_BAD_HEADER", 1341 }, +{ "ER_FPARSER_EOF_IN_COMMENT", 1342 }, +{ "ER_FPARSER_ERROR_IN_PARAMETER", 1343 }, +{ "ER_FPARSER_EOF_IN_UNKNOWN_PARAMETER", 1344 }, +{ "ER_VIEW_NO_EXPLAIN", 1345 }, +{ "ER_FRM_UNKNOWN_TYPE", 1346 }, +{ "ER_WRONG_OBJECT", 1347 }, +{ "ER_NONUPDATEABLE_COLUMN", 1348 }, +{ "ER_VIEW_SELECT_DERIVED", 1349 }, +{ "ER_VIEW_SELECT_CLAUSE", 1350 }, +{ "ER_VIEW_SELECT_VARIABLE", 1351 }, +{ "ER_VIEW_SELECT_TMPTABLE", 1352 }, +{ "ER_VIEW_WRONG_LIST", 1353 }, +{ "ER_WARN_VIEW_MERGE", 1354 }, +{ "ER_WARN_VIEW_WITHOUT_KEY", 1355 }, +{ "ER_VIEW_INVALID", 1356 }, +{ "ER_SP_NO_DROP_SP", 1357 }, +{ "ER_SP_GOTO_IN_HNDLR", 1358 }, +{ "ER_TRG_ALREADY_EXISTS", 1359 }, +{ "ER_TRG_DOES_NOT_EXIST", 1360 }, +{ "ER_TRG_ON_VIEW_OR_TEMP_TABLE", 1361 }, +{ "ER_TRG_CANT_CHANGE_ROW", 1362 }, +{ "ER_TRG_NO_SUCH_ROW_IN_TRG", 1363 }, +{ "ER_NO_DEFAULT_FOR_FIELD", 1364 }, +{ "ER_DIVISION_BY_ZERO", 1365 }, +{ "ER_TRUNCATED_WRONG_VALUE_FOR_FIELD", 1366 }, +{ "ER_ILLEGAL_VALUE_FOR_TYPE", 1367 }, +{ "ER_VIEW_NONUPD_CHECK", 1368 }, +{ "ER_VIEW_CHECK_FAILED", 1369 }, +{ "ER_PROCACCESS_DENIED_ERROR", 1370 }, +{ "ER_RELAY_LOG_FAIL", 1371 }, +{ "ER_PASSWD_LENGTH", 1372 }, +{ "ER_UNKNOWN_TARGET_BINLOG", 1373 }, +{ "ER_IO_ERR_LOG_INDEX_READ", 1374 }, +{ "ER_BINLOG_PURGE_PROHIBITED", 1375 }, +{ "ER_FSEEK_FAIL", 1376 }, +{ "ER_BINLOG_PURGE_FATAL_ERR", 1377 }, +{ "ER_LOG_IN_USE", 1378 }, +{ "ER_LOG_PURGE_UNKNOWN_ERR", 1379 }, +{ "ER_RELAY_LOG_INIT", 1380 }, +{ "ER_NO_BINARY_LOGGING", 1381 }, +{ "ER_RESERVED_SYNTAX", 1382 }, +{ "ER_WSAS_FAILED", 1383 }, +{ "ER_DIFF_GROUPS_PROC", 1384 }, +{ "ER_NO_GROUP_FOR_PROC", 1385 }, +{ "ER_ORDER_WITH_PROC", 1386 }, +{ "ER_LOGGING_PROHIBIT_CHANGING_OF", 1387 }, +{ "ER_NO_FILE_MAPPING", 1388 }, +{ "ER_WRONG_MAGIC", 1389 }, +{ "ER_PS_MANY_PARAM", 1390 }, +{ "ER_KEY_PART_0", 1391 }, +{ "ER_VIEW_CHECKSUM", 1392 }, +{ "ER_VIEW_MULTIUPDATE", 1393 }, +{ "ER_VIEW_NO_INSERT_FIELD_LIST", 1394 }, +{ "ER_VIEW_DELETE_MERGE_VIEW", 1395 }, +{ "ER_CANNOT_USER", 1396 }, +{ "ER_XAER_NOTA", 1397 }, +{ "ER_XAER_INVAL", 1398 }, +{ "ER_XAER_RMFAIL", 1399 }, +{ "ER_XAER_OUTSIDE", 1400 }, +{ "ER_XAER_RMERR", 1401 }, +{ "ER_XA_RBROLLBACK", 1402 }, +{ "ER_NONEXISTING_PROC_GRANT", 1403 }, +{ "ER_PROC_AUTO_GRANT_FAIL", 1404 }, +{ "ER_PROC_AUTO_REVOKE_FAIL", 1405 }, +{ "ER_DATA_TOO_LONG", 1406 }, +{ "ER_SP_BAD_SQLSTATE", 1407 }, +{ "ER_STARTUP", 1408 }, +{ "ER_LOAD_FROM_FIXED_SIZE_ROWS_TO_VAR", 1409 }, +{ "ER_CANT_CREATE_USER_WITH_GRANT", 1410 }, +{ "ER_WRONG_VALUE_FOR_TYPE", 1411 }, +{ "ER_TABLE_DEF_CHANGED", 1412 }, +{ "ER_SP_DUP_HANDLER", 1413 }, +{ "ER_SP_NOT_VAR_ARG", 1414 }, +{ "ER_SP_NO_RETSET", 1415 }, +{ "ER_CANT_CREATE_GEOMETRY_OBJECT", 1416 }, +{ "ER_FAILED_ROUTINE_BREAK_BINLOG", 1417 }, +{ "ER_BINLOG_UNSAFE_ROUTINE", 1418 }, +{ "ER_BINLOG_CREATE_ROUTINE_NEED_SUPER", 1419 }, +{ "ER_EXEC_STMT_WITH_OPEN_CURSOR", 1420 }, +{ "ER_STMT_HAS_NO_OPEN_CURSOR", 1421 }, +{ "ER_COMMIT_NOT_ALLOWED_IN_SF_OR_TRG", 1422 }, +{ "ER_NO_DEFAULT_FOR_VIEW_FIELD", 1423 }, +{ "ER_SP_NO_RECURSION", 1424 }, +{ "ER_TOO_BIG_SCALE", 1425 }, +{ "ER_TOO_BIG_PRECISION", 1426 }, +{ "ER_M_BIGGER_THAN_D", 1427 }, +{ "ER_WRONG_LOCK_OF_SYSTEM_TABLE", 1428 }, +{ "ER_CONNECT_TO_FOREIGN_DATA_SOURCE", 1429 }, +{ "ER_QUERY_ON_FOREIGN_DATA_SOURCE", 1430 }, +{ "ER_FOREIGN_DATA_SOURCE_DOESNT_EXIST", 1431 }, +{ "ER_FOREIGN_DATA_STRING_INVALID_CANT_CREATE", 1432 }, +{ "ER_FOREIGN_DATA_STRING_INVALID", 1433 }, +{ "ER_CANT_CREATE_FEDERATED_TABLE", 1434 }, +{ "ER_TRG_IN_WRONG_SCHEMA", 1435 }, +{ "ER_STACK_OVERRUN_NEED_MORE", 1436 }, +{ "ER_TOO_LONG_BODY", 1437 }, +{ "ER_WARN_CANT_DROP_DEFAULT_KEYCACHE", 1438 }, +{ "ER_TOO_BIG_DISPLAYWIDTH", 1439 }, +{ "ER_XAER_DUPID", 1440 }, +{ "ER_DATETIME_FUNCTION_OVERFLOW", 1441 }, +{ "ER_CANT_UPDATE_USED_TABLE_IN_SF_OR_TRG", 1442 }, +{ "ER_VIEW_PREVENT_UPDATE", 1443 }, +{ "ER_PS_NO_RECURSION", 1444 }, +{ "ER_SP_CANT_SET_AUTOCOMMIT", 1445 }, +{ "ER_MALFORMED_DEFINER", 1446 }, +{ "ER_VIEW_FRM_NO_USER", 1447 }, +{ "ER_VIEW_OTHER_USER", 1448 }, +{ "ER_NO_SUCH_USER", 1449 }, +{ "ER_FORBID_SCHEMA_CHANGE", 1450 }, +{ "ER_ROW_IS_REFERENCED_2", 1451 }, +{ "ER_NO_REFERENCED_ROW_2", 1452 }, +{ "ER_SP_BAD_VAR_SHADOW", 1453 }, +{ "ER_TRG_NO_DEFINER", 1454 }, +{ "ER_OLD_FILE_FORMAT", 1455 }, +{ "ER_SP_RECURSION_LIMIT", 1456 }, +{ "ER_SP_PROC_TABLE_CORRUPT", 1457 }, +{ "ER_SP_WRONG_NAME", 1458 }, +{ "ER_TABLE_NEEDS_UPGRADE", 1459 }, +{ "ER_SP_NO_AGGREGATE", 1460 }, +{ "ER_MAX_PREPARED_STMT_COUNT_REACHED", 1461 }, +{ "ER_VIEW_RECURSIVE", 1462 }, +{ "ER_NON_GROUPING_FIELD_USED", 1463 }, +{ "ER_TABLE_CANT_HANDLE_SPKEYS", 1464 }, +{ "ER_NO_TRIGGERS_ON_SYSTEM_SCHEMA", 1465 }, +{ "ER_REMOVED_SPACES", 1466 }, +{ "ER_AUTOINC_READ_FAILED", 1467 }, +{ "ER_USERNAME", 1468 }, +{ "ER_HOSTNAME", 1469 }, +{ "ER_WRONG_STRING_LENGTH", 1470 }, +{ "ER_NON_INSERTABLE_TABLE", 1471 }, +{ "ER_ADMIN_WRONG_MRG_TABLE", 1472 }, +{ "ER_TOO_HIGH_LEVEL_OF_NESTING_FOR_SELECT", 1473 }, +{ "ER_NAME_BECOMES_EMPTY", 1474 }, +{ "ER_AMBIGUOUS_FIELD_TERM", 1475 }, +{ "ER_FOREIGN_SERVER_EXISTS", 1476 }, +{ "ER_FOREIGN_SERVER_DOESNT_EXIST", 1477 }, +{ "ER_ILLEGAL_HA_CREATE_OPTION", 1478 }, +{ "ER_PARTITION_REQUIRES_VALUES_ERROR", 1479 }, +{ "ER_PARTITION_WRONG_VALUES_ERROR", 1480 }, +{ "ER_PARTITION_MAXVALUE_ERROR", 1481 }, +{ "ER_PARTITION_SUBPARTITION_ERROR", 1482 }, +{ "ER_PARTITION_SUBPART_MIX_ERROR", 1483 }, +{ "ER_PARTITION_WRONG_NO_PART_ERROR", 1484 }, +{ "ER_PARTITION_WRONG_NO_SUBPART_ERROR", 1485 }, +{ "ER_WRONG_EXPR_IN_PARTITION_FUNC_ERROR", 1486 }, +{ "ER_NO_CONST_EXPR_IN_RANGE_OR_LIST_ERROR", 1487 }, +{ "ER_FIELD_NOT_FOUND_PART_ERROR", 1488 }, +{ "ER_LIST_OF_FIELDS_ONLY_IN_HASH_ERROR", 1489 }, +{ "ER_INCONSISTENT_PARTITION_INFO_ERROR", 1490 }, +{ "ER_PARTITION_FUNC_NOT_ALLOWED_ERROR", 1491 }, +{ "ER_PARTITIONS_MUST_BE_DEFINED_ERROR", 1492 }, +{ "ER_RANGE_NOT_INCREASING_ERROR", 1493 }, +{ "ER_INCONSISTENT_TYPE_OF_FUNCTIONS_ERROR", 1494 }, +{ "ER_MULTIPLE_DEF_CONST_IN_LIST_PART_ERROR", 1495 }, +{ "ER_PARTITION_ENTRY_ERROR", 1496 }, +{ "ER_MIX_HANDLER_ERROR", 1497 }, +{ "ER_PARTITION_NOT_DEFINED_ERROR", 1498 }, +{ "ER_TOO_MANY_PARTITIONS_ERROR", 1499 }, +{ "ER_SUBPARTITION_ERROR", 1500 }, +{ "ER_CANT_CREATE_HANDLER_FILE", 1501 }, +{ "ER_BLOB_FIELD_IN_PART_FUNC_ERROR", 1502 }, +{ "ER_UNIQUE_KEY_NEED_ALL_FIELDS_IN_PF", 1503 }, +{ "ER_NO_PARTS_ERROR", 1504 }, +{ "ER_PARTITION_MGMT_ON_NONPARTITIONED", 1505 }, +{ "ER_FOREIGN_KEY_ON_PARTITIONED", 1506 }, +{ "ER_DROP_PARTITION_NON_EXISTENT", 1507 }, +{ "ER_DROP_LAST_PARTITION", 1508 }, +{ "ER_COALESCE_ONLY_ON_HASH_PARTITION", 1509 }, +{ "ER_REORG_HASH_ONLY_ON_SAME_NO", 1510 }, +{ "ER_REORG_NO_PARAM_ERROR", 1511 }, +{ "ER_ONLY_ON_RANGE_LIST_PARTITION", 1512 }, +{ "ER_ADD_PARTITION_SUBPART_ERROR", 1513 }, +{ "ER_ADD_PARTITION_NO_NEW_PARTITION", 1514 }, +{ "ER_COALESCE_PARTITION_NO_PARTITION", 1515 }, +{ "ER_REORG_PARTITION_NOT_EXIST", 1516 }, +{ "ER_SAME_NAME_PARTITION", 1517 }, +{ "ER_NO_BINLOG_ERROR", 1518 }, +{ "ER_CONSECUTIVE_REORG_PARTITIONS", 1519 }, +{ "ER_REORG_OUTSIDE_RANGE", 1520 }, +{ "ER_PARTITION_FUNCTION_FAILURE", 1521 }, +{ "ER_PART_STATE_ERROR", 1522 }, +{ "ER_LIMITED_PART_RANGE", 1523 }, +{ "ER_PLUGIN_IS_NOT_LOADED", 1524 }, +{ "ER_WRONG_VALUE", 1525 }, +{ "ER_NO_PARTITION_FOR_GIVEN_VALUE", 1526 }, +{ "ER_FILEGROUP_OPTION_ONLY_ONCE", 1527 }, +{ "ER_CREATE_FILEGROUP_FAILED", 1528 }, +{ "ER_DROP_FILEGROUP_FAILED", 1529 }, +{ "ER_TABLESPACE_AUTO_EXTEND_ERROR", 1530 }, +{ "ER_WRONG_SIZE_NUMBER", 1531 }, +{ "ER_SIZE_OVERFLOW_ERROR", 1532 }, +{ "ER_ALTER_FILEGROUP_FAILED", 1533 }, +{ "ER_BINLOG_ROW_LOGGING_FAILED", 1534 }, +{ "ER_BINLOG_ROW_WRONG_TABLE_DEF", 1535 }, +{ "ER_BINLOG_ROW_RBR_TO_SBR", 1536 }, +{ "ER_EVENT_ALREADY_EXISTS", 1537 }, +{ "ER_EVENT_STORE_FAILED", 1538 }, +{ "ER_EVENT_DOES_NOT_EXIST", 1539 }, +{ "ER_EVENT_CANT_ALTER", 1540 }, +{ "ER_EVENT_DROP_FAILED", 1541 }, +{ "ER_EVENT_INTERVAL_NOT_POSITIVE_OR_TOO_BIG", 1542 }, +{ "ER_EVENT_ENDS_BEFORE_STARTS", 1543 }, +{ "ER_EVENT_EXEC_TIME_IN_THE_PAST", 1544 }, +{ "ER_EVENT_OPEN_TABLE_FAILED", 1545 }, +{ "ER_EVENT_NEITHER_M_EXPR_NOR_M_AT", 1546 }, +{ "ER_COL_COUNT_DOESNT_MATCH_CORRUPTED", 1547 }, +{ "ER_CANNOT_LOAD_FROM_TABLE", 1548 }, +{ "ER_EVENT_CANNOT_DELETE", 1549 }, +{ "ER_EVENT_COMPILE_ERROR", 1550 }, +{ "ER_EVENT_SAME_NAME", 1551 }, +{ "ER_EVENT_DATA_TOO_LONG", 1552 }, +{ "ER_DROP_INDEX_FK", 1553 }, +{ "ER_WARN_DEPRECATED_SYNTAX_WITH_VER", 1554 }, +{ "ER_CANT_WRITE_LOCK_LOG_TABLE", 1555 }, +{ "ER_CANT_LOCK_LOG_TABLE", 1556 }, +{ "ER_FOREIGN_DUPLICATE_KEY", 1557 }, +{ "ER_COL_COUNT_DOESNT_MATCH_PLEASE_UPDATE", 1558 }, +{ "ER_TEMP_TABLE_PREVENTS_SWITCH_OUT_OF_RBR", 1559 }, +{ "ER_STORED_FUNCTION_PREVENTS_SWITCH_BINLOG_FORMAT", 1560 }, +{ "ER_NDB_CANT_SWITCH_BINLOG_FORMAT", 1561 }, +{ "ER_PARTITION_NO_TEMPORARY", 1562 }, +{ "ER_PARTITION_CONST_DOMAIN_ERROR", 1563 }, +{ "ER_PARTITION_FUNCTION_IS_NOT_ALLOWED", 1564 }, +{ "ER_DDL_LOG_ERROR", 1565 }, +{ "ER_NULL_IN_VALUES_LESS_THAN", 1566 }, +{ "ER_WRONG_PARTITION_NAME", 1567 }, +{ "ER_CANT_CHANGE_TX_ISOLATION", 1568 }, +{ "ER_DUP_ENTRY_AUTOINCREMENT_CASE", 1569 }, +{ "ER_EVENT_MODIFY_QUEUE_ERROR", 1570 }, +{ "ER_EVENT_SET_VAR_ERROR", 1571 }, +{ "ER_PARTITION_MERGE_ERROR", 1572 }, +{ "ER_CANT_ACTIVATE_LOG", 1573 }, +{ "ER_RBR_NOT_AVAILABLE", 1574 }, +{ "ER_BASE64_DECODE_ERROR", 1575 }, +{ "ER_EVENT_RECURSION_FORBIDDEN", 1576 }, +{ "ER_EVENTS_DB_ERROR", 1577 }, +{ "ER_ONLY_INTEGERS_ALLOWED", 1578 }, +{ "ER_UNSUPORTED_LOG_ENGINE", 1579 }, +{ "ER_BAD_LOG_STATEMENT", 1580 }, +{ "ER_CANT_RENAME_LOG_TABLE", 1581 }, +{ "ER_WRONG_PARAMCOUNT_TO_NATIVE_FCT", 1582 }, +{ "ER_WRONG_PARAMETERS_TO_NATIVE_FCT", 1583 }, +{ "ER_WRONG_PARAMETERS_TO_STORED_FCT", 1584 }, +{ "ER_NATIVE_FCT_NAME_COLLISION", 1585 }, +{ "ER_DUP_ENTRY_WITH_KEY_NAME", 1586 }, +{ "ER_BINLOG_PURGE_EMFILE", 1587 }, +{ "ER_EVENT_CANNOT_CREATE_IN_THE_PAST", 1588 }, +{ "ER_EVENT_CANNOT_ALTER_IN_THE_PAST", 1589 }, +{ "ER_SLAVE_INCIDENT", 1590 }, +{ "ER_NO_PARTITION_FOR_GIVEN_VALUE_SILENT", 1591 }, +{ "ER_BINLOG_UNSAFE_STATEMENT", 1592 }, +{ "ER_SLAVE_FATAL_ERROR", 1593 }, +{ "ER_SLAVE_RELAY_LOG_READ_FAILURE", 1594 }, +{ "ER_SLAVE_RELAY_LOG_WRITE_FAILURE", 1595 }, +{ "ER_SLAVE_CREATE_EVENT_FAILURE", 1596 }, +{ "ER_SLAVE_MASTER_COM_FAILURE", 1597 }, +{ "ER_BINLOG_LOGGING_IMPOSSIBLE", 1598 }, +{ "ER_VIEW_NO_CREATION_CTX", 1599 }, +{ "ER_VIEW_INVALID_CREATION_CTX", 1600 }, +{ "ER_SR_INVALID_CREATION_CTX", 1601 }, +{ "ER_TRG_CORRUPTED_FILE", 1602 }, +{ "ER_TRG_NO_CREATION_CTX", 1603 }, +{ "ER_TRG_INVALID_CREATION_CTX", 1604 }, +{ "ER_EVENT_INVALID_CREATION_CTX", 1605 }, +{ "ER_TRG_CANT_OPEN_TABLE", 1606 }, +{ "ER_CANT_CREATE_SROUTINE", 1607 }, +{ "ER_SLAVE_AMBIGOUS_EXEC_MODE", 1608 }, +{ "ER_NO_FORMAT_DESCRIPTION_EVENT_BEFORE_BINLOG_STATEMENT", 1609 }, +{ "ER_SLAVE_CORRUPT_EVENT", 1610 }, +{ "ER_LOAD_DATA_INVALID_COLUMN", 1611 }, +{ "ER_LOG_PURGE_NO_FILE", 1612 }, +{ "ER_XA_RBTIMEOUT", 1613 }, +{ "ER_XA_RBDEADLOCK", 1614 }, +{ "ER_NEED_REPREPARE", 1615 }, +{ "ER_DELAYED_NOT_SUPPORTED", 1616 }, +{ "WARN_NO_MASTER_INFO", 1617 }, +{ "WARN_OPTION_IGNORED", 1618 }, +{ "WARN_PLUGIN_DELETE_BUILTIN", 1619 }, +{ "WARN_PLUGIN_BUSY", 1620 }, +{ "ER_VARIABLE_IS_READONLY", 1621 }, +{ "ER_WARN_ENGINE_TRANSACTION_ROLLBACK", 1622 }, +{ "ER_SLAVE_HEARTBEAT_FAILURE", 1623 }, +{ "ER_SLAVE_HEARTBEAT_VALUE_OUT_OF_RANGE", 1624 }, +{ "ER_NDB_REPLICATION_SCHEMA_ERROR", 1625 }, +{ "ER_CONFLICT_FN_PARSE_ERROR", 1626 }, +{ "ER_EXCEPTIONS_WRITE_ERROR", 1627 }, +{ "ER_TOO_LONG_TABLE_COMMENT", 1628 }, +{ "ER_TOO_LONG_FIELD_COMMENT", 1629 }, +{ "ER_FUNC_INEXISTENT_NAME_COLLISION", 1630 }, +{ "ER_DATABASE_NAME", 1631 }, +{ "ER_TABLE_NAME", 1632 }, +{ "ER_PARTITION_NAME", 1633 }, +{ "ER_SUBPARTITION_NAME", 1634 }, +{ "ER_TEMPORARY_NAME", 1635 }, +{ "ER_RENAMED_NAME", 1636 }, +{ "ER_TOO_MANY_CONCURRENT_TRXS", 1637 }, +{ "WARN_NON_ASCII_SEPARATOR_NOT_IMPLEMENTED", 1638 }, +{ "ER_DEBUG_SYNC_TIMEOUT", 1639 }, +{ "ER_DEBUG_SYNC_HIT_LIMIT", 1640 }, diff --git a/EQ2/source/depends/mysql-5.1.45-win32/include/mysqld_error.h b/EQ2/source/depends/mysql-5.1.45-win32/include/mysqld_error.h new file mode 100644 index 000000000..c35c25420 --- /dev/null +++ b/EQ2/source/depends/mysql-5.1.45-win32/include/mysqld_error.h @@ -0,0 +1,645 @@ +/* Autogenerated file, please don't edit */ + +#define ER_ERROR_FIRST 1000 +#define ER_HASHCHK 1000 +#define ER_NISAMCHK 1001 +#define ER_NO 1002 +#define ER_YES 1003 +#define ER_CANT_CREATE_FILE 1004 +#define ER_CANT_CREATE_TABLE 1005 +#define ER_CANT_CREATE_DB 1006 +#define ER_DB_CREATE_EXISTS 1007 +#define ER_DB_DROP_EXISTS 1008 +#define ER_DB_DROP_DELETE 1009 +#define ER_DB_DROP_RMDIR 1010 +#define ER_CANT_DELETE_FILE 1011 +#define ER_CANT_FIND_SYSTEM_REC 1012 +#define ER_CANT_GET_STAT 1013 +#define ER_CANT_GET_WD 1014 +#define ER_CANT_LOCK 1015 +#define ER_CANT_OPEN_FILE 1016 +#define ER_FILE_NOT_FOUND 1017 +#define ER_CANT_READ_DIR 1018 +#define ER_CANT_SET_WD 1019 +#define ER_CHECKREAD 1020 +#define ER_DISK_FULL 1021 +#define ER_DUP_KEY 1022 +#define ER_ERROR_ON_CLOSE 1023 +#define ER_ERROR_ON_READ 1024 +#define ER_ERROR_ON_RENAME 1025 +#define ER_ERROR_ON_WRITE 1026 +#define ER_FILE_USED 1027 +#define ER_FILSORT_ABORT 1028 +#define ER_FORM_NOT_FOUND 1029 +#define ER_GET_ERRNO 1030 +#define ER_ILLEGAL_HA 1031 +#define ER_KEY_NOT_FOUND 1032 +#define ER_NOT_FORM_FILE 1033 +#define ER_NOT_KEYFILE 1034 +#define ER_OLD_KEYFILE 1035 +#define ER_OPEN_AS_READONLY 1036 +#define ER_OUTOFMEMORY 1037 +#define ER_OUT_OF_SORTMEMORY 1038 +#define ER_UNEXPECTED_EOF 1039 +#define ER_CON_COUNT_ERROR 1040 +#define ER_OUT_OF_RESOURCES 1041 +#define ER_BAD_HOST_ERROR 1042 +#define ER_HANDSHAKE_ERROR 1043 +#define ER_DBACCESS_DENIED_ERROR 1044 +#define ER_ACCESS_DENIED_ERROR 1045 +#define ER_NO_DB_ERROR 1046 +#define ER_UNKNOWN_COM_ERROR 1047 +#define ER_BAD_NULL_ERROR 1048 +#define ER_BAD_DB_ERROR 1049 +#define ER_TABLE_EXISTS_ERROR 1050 +#define ER_BAD_TABLE_ERROR 1051 +#define ER_NON_UNIQ_ERROR 1052 +#define ER_SERVER_SHUTDOWN 1053 +#define ER_BAD_FIELD_ERROR 1054 +#define ER_WRONG_FIELD_WITH_GROUP 1055 +#define ER_WRONG_GROUP_FIELD 1056 +#define ER_WRONG_SUM_SELECT 1057 +#define ER_WRONG_VALUE_COUNT 1058 +#define ER_TOO_LONG_IDENT 1059 +#define ER_DUP_FIELDNAME 1060 +#define ER_DUP_KEYNAME 1061 +#define ER_DUP_ENTRY 1062 +#define ER_WRONG_FIELD_SPEC 1063 +#define ER_PARSE_ERROR 1064 +#define ER_EMPTY_QUERY 1065 +#define ER_NONUNIQ_TABLE 1066 +#define ER_INVALID_DEFAULT 1067 +#define ER_MULTIPLE_PRI_KEY 1068 +#define ER_TOO_MANY_KEYS 1069 +#define ER_TOO_MANY_KEY_PARTS 1070 +#define ER_TOO_LONG_KEY 1071 +#define ER_KEY_COLUMN_DOES_NOT_EXITS 1072 +#define ER_BLOB_USED_AS_KEY 1073 +#define ER_TOO_BIG_FIELDLENGTH 1074 +#define ER_WRONG_AUTO_KEY 1075 +#define ER_READY 1076 +#define ER_NORMAL_SHUTDOWN 1077 +#define ER_GOT_SIGNAL 1078 +#define ER_SHUTDOWN_COMPLETE 1079 +#define ER_FORCING_CLOSE 1080 +#define ER_IPSOCK_ERROR 1081 +#define ER_NO_SUCH_INDEX 1082 +#define ER_WRONG_FIELD_TERMINATORS 1083 +#define ER_BLOBS_AND_NO_TERMINATED 1084 +#define ER_TEXTFILE_NOT_READABLE 1085 +#define ER_FILE_EXISTS_ERROR 1086 +#define ER_LOAD_INFO 1087 +#define ER_ALTER_INFO 1088 +#define ER_WRONG_SUB_KEY 1089 +#define ER_CANT_REMOVE_ALL_FIELDS 1090 +#define ER_CANT_DROP_FIELD_OR_KEY 1091 +#define ER_INSERT_INFO 1092 +#define ER_UPDATE_TABLE_USED 1093 +#define ER_NO_SUCH_THREAD 1094 +#define ER_KILL_DENIED_ERROR 1095 +#define ER_NO_TABLES_USED 1096 +#define ER_TOO_BIG_SET 1097 +#define ER_NO_UNIQUE_LOGFILE 1098 +#define ER_TABLE_NOT_LOCKED_FOR_WRITE 1099 +#define ER_TABLE_NOT_LOCKED 1100 +#define ER_BLOB_CANT_HAVE_DEFAULT 1101 +#define ER_WRONG_DB_NAME 1102 +#define ER_WRONG_TABLE_NAME 1103 +#define ER_TOO_BIG_SELECT 1104 +#define ER_UNKNOWN_ERROR 1105 +#define ER_UNKNOWN_PROCEDURE 1106 +#define ER_WRONG_PARAMCOUNT_TO_PROCEDURE 1107 +#define ER_WRONG_PARAMETERS_TO_PROCEDURE 1108 +#define ER_UNKNOWN_TABLE 1109 +#define ER_FIELD_SPECIFIED_TWICE 1110 +#define ER_INVALID_GROUP_FUNC_USE 1111 +#define ER_UNSUPPORTED_EXTENSION 1112 +#define ER_TABLE_MUST_HAVE_COLUMNS 1113 +#define ER_RECORD_FILE_FULL 1114 +#define ER_UNKNOWN_CHARACTER_SET 1115 +#define ER_TOO_MANY_TABLES 1116 +#define ER_TOO_MANY_FIELDS 1117 +#define ER_TOO_BIG_ROWSIZE 1118 +#define ER_STACK_OVERRUN 1119 +#define ER_WRONG_OUTER_JOIN 1120 +#define ER_NULL_COLUMN_IN_INDEX 1121 +#define ER_CANT_FIND_UDF 1122 +#define ER_CANT_INITIALIZE_UDF 1123 +#define ER_UDF_NO_PATHS 1124 +#define ER_UDF_EXISTS 1125 +#define ER_CANT_OPEN_LIBRARY 1126 +#define ER_CANT_FIND_DL_ENTRY 1127 +#define ER_FUNCTION_NOT_DEFINED 1128 +#define ER_HOST_IS_BLOCKED 1129 +#define ER_HOST_NOT_PRIVILEGED 1130 +#define ER_PASSWORD_ANONYMOUS_USER 1131 +#define ER_PASSWORD_NOT_ALLOWED 1132 +#define ER_PASSWORD_NO_MATCH 1133 +#define ER_UPDATE_INFO 1134 +#define ER_CANT_CREATE_THREAD 1135 +#define ER_WRONG_VALUE_COUNT_ON_ROW 1136 +#define ER_CANT_REOPEN_TABLE 1137 +#define ER_INVALID_USE_OF_NULL 1138 +#define ER_REGEXP_ERROR 1139 +#define ER_MIX_OF_GROUP_FUNC_AND_FIELDS 1140 +#define ER_NONEXISTING_GRANT 1141 +#define ER_TABLEACCESS_DENIED_ERROR 1142 +#define ER_COLUMNACCESS_DENIED_ERROR 1143 +#define ER_ILLEGAL_GRANT_FOR_TABLE 1144 +#define ER_GRANT_WRONG_HOST_OR_USER 1145 +#define ER_NO_SUCH_TABLE 1146 +#define ER_NONEXISTING_TABLE_GRANT 1147 +#define ER_NOT_ALLOWED_COMMAND 1148 +#define ER_SYNTAX_ERROR 1149 +#define ER_DELAYED_CANT_CHANGE_LOCK 1150 +#define ER_TOO_MANY_DELAYED_THREADS 1151 +#define ER_ABORTING_CONNECTION 1152 +#define ER_NET_PACKET_TOO_LARGE 1153 +#define ER_NET_READ_ERROR_FROM_PIPE 1154 +#define ER_NET_FCNTL_ERROR 1155 +#define ER_NET_PACKETS_OUT_OF_ORDER 1156 +#define ER_NET_UNCOMPRESS_ERROR 1157 +#define ER_NET_READ_ERROR 1158 +#define ER_NET_READ_INTERRUPTED 1159 +#define ER_NET_ERROR_ON_WRITE 1160 +#define ER_NET_WRITE_INTERRUPTED 1161 +#define ER_TOO_LONG_STRING 1162 +#define ER_TABLE_CANT_HANDLE_BLOB 1163 +#define ER_TABLE_CANT_HANDLE_AUTO_INCREMENT 1164 +#define ER_DELAYED_INSERT_TABLE_LOCKED 1165 +#define ER_WRONG_COLUMN_NAME 1166 +#define ER_WRONG_KEY_COLUMN 1167 +#define ER_WRONG_MRG_TABLE 1168 +#define ER_DUP_UNIQUE 1169 +#define ER_BLOB_KEY_WITHOUT_LENGTH 1170 +#define ER_PRIMARY_CANT_HAVE_NULL 1171 +#define ER_TOO_MANY_ROWS 1172 +#define ER_REQUIRES_PRIMARY_KEY 1173 +#define ER_NO_RAID_COMPILED 1174 +#define ER_UPDATE_WITHOUT_KEY_IN_SAFE_MODE 1175 +#define ER_KEY_DOES_NOT_EXITS 1176 +#define ER_CHECK_NO_SUCH_TABLE 1177 +#define ER_CHECK_NOT_IMPLEMENTED 1178 +#define ER_CANT_DO_THIS_DURING_AN_TRANSACTION 1179 +#define ER_ERROR_DURING_COMMIT 1180 +#define ER_ERROR_DURING_ROLLBACK 1181 +#define ER_ERROR_DURING_FLUSH_LOGS 1182 +#define ER_ERROR_DURING_CHECKPOINT 1183 +#define ER_NEW_ABORTING_CONNECTION 1184 +#define ER_DUMP_NOT_IMPLEMENTED 1185 +#define ER_FLUSH_MASTER_BINLOG_CLOSED 1186 +#define ER_INDEX_REBUILD 1187 +#define ER_MASTER 1188 +#define ER_MASTER_NET_READ 1189 +#define ER_MASTER_NET_WRITE 1190 +#define ER_FT_MATCHING_KEY_NOT_FOUND 1191 +#define ER_LOCK_OR_ACTIVE_TRANSACTION 1192 +#define ER_UNKNOWN_SYSTEM_VARIABLE 1193 +#define ER_CRASHED_ON_USAGE 1194 +#define ER_CRASHED_ON_REPAIR 1195 +#define ER_WARNING_NOT_COMPLETE_ROLLBACK 1196 +#define ER_TRANS_CACHE_FULL 1197 +#define ER_SLAVE_MUST_STOP 1198 +#define ER_SLAVE_NOT_RUNNING 1199 +#define ER_BAD_SLAVE 1200 +#define ER_MASTER_INFO 1201 +#define ER_SLAVE_THREAD 1202 +#define ER_TOO_MANY_USER_CONNECTIONS 1203 +#define ER_SET_CONSTANTS_ONLY 1204 +#define ER_LOCK_WAIT_TIMEOUT 1205 +#define ER_LOCK_TABLE_FULL 1206 +#define ER_READ_ONLY_TRANSACTION 1207 +#define ER_DROP_DB_WITH_READ_LOCK 1208 +#define ER_CREATE_DB_WITH_READ_LOCK 1209 +#define ER_WRONG_ARGUMENTS 1210 +#define ER_NO_PERMISSION_TO_CREATE_USER 1211 +#define ER_UNION_TABLES_IN_DIFFERENT_DIR 1212 +#define ER_LOCK_DEADLOCK 1213 +#define ER_TABLE_CANT_HANDLE_FT 1214 +#define ER_CANNOT_ADD_FOREIGN 1215 +#define ER_NO_REFERENCED_ROW 1216 +#define ER_ROW_IS_REFERENCED 1217 +#define ER_CONNECT_TO_MASTER 1218 +#define ER_QUERY_ON_MASTER 1219 +#define ER_ERROR_WHEN_EXECUTING_COMMAND 1220 +#define ER_WRONG_USAGE 1221 +#define ER_WRONG_NUMBER_OF_COLUMNS_IN_SELECT 1222 +#define ER_CANT_UPDATE_WITH_READLOCK 1223 +#define ER_MIXING_NOT_ALLOWED 1224 +#define ER_DUP_ARGUMENT 1225 +#define ER_USER_LIMIT_REACHED 1226 +#define ER_SPECIFIC_ACCESS_DENIED_ERROR 1227 +#define ER_LOCAL_VARIABLE 1228 +#define ER_GLOBAL_VARIABLE 1229 +#define ER_NO_DEFAULT 1230 +#define ER_WRONG_VALUE_FOR_VAR 1231 +#define ER_WRONG_TYPE_FOR_VAR 1232 +#define ER_VAR_CANT_BE_READ 1233 +#define ER_CANT_USE_OPTION_HERE 1234 +#define ER_NOT_SUPPORTED_YET 1235 +#define ER_MASTER_FATAL_ERROR_READING_BINLOG 1236 +#define ER_SLAVE_IGNORED_TABLE 1237 +#define ER_INCORRECT_GLOBAL_LOCAL_VAR 1238 +#define ER_WRONG_FK_DEF 1239 +#define ER_KEY_REF_DO_NOT_MATCH_TABLE_REF 1240 +#define ER_OPERAND_COLUMNS 1241 +#define ER_SUBQUERY_NO_1_ROW 1242 +#define ER_UNKNOWN_STMT_HANDLER 1243 +#define ER_CORRUPT_HELP_DB 1244 +#define ER_CYCLIC_REFERENCE 1245 +#define ER_AUTO_CONVERT 1246 +#define ER_ILLEGAL_REFERENCE 1247 +#define ER_DERIVED_MUST_HAVE_ALIAS 1248 +#define ER_SELECT_REDUCED 1249 +#define ER_TABLENAME_NOT_ALLOWED_HERE 1250 +#define ER_NOT_SUPPORTED_AUTH_MODE 1251 +#define ER_SPATIAL_CANT_HAVE_NULL 1252 +#define ER_COLLATION_CHARSET_MISMATCH 1253 +#define ER_SLAVE_WAS_RUNNING 1254 +#define ER_SLAVE_WAS_NOT_RUNNING 1255 +#define ER_TOO_BIG_FOR_UNCOMPRESS 1256 +#define ER_ZLIB_Z_MEM_ERROR 1257 +#define ER_ZLIB_Z_BUF_ERROR 1258 +#define ER_ZLIB_Z_DATA_ERROR 1259 +#define ER_CUT_VALUE_GROUP_CONCAT 1260 +#define ER_WARN_TOO_FEW_RECORDS 1261 +#define ER_WARN_TOO_MANY_RECORDS 1262 +#define ER_WARN_NULL_TO_NOTNULL 1263 +#define ER_WARN_DATA_OUT_OF_RANGE 1264 +#define WARN_DATA_TRUNCATED 1265 +#define ER_WARN_USING_OTHER_HANDLER 1266 +#define ER_CANT_AGGREGATE_2COLLATIONS 1267 +#define ER_DROP_USER 1268 +#define ER_REVOKE_GRANTS 1269 +#define ER_CANT_AGGREGATE_3COLLATIONS 1270 +#define ER_CANT_AGGREGATE_NCOLLATIONS 1271 +#define ER_VARIABLE_IS_NOT_STRUCT 1272 +#define ER_UNKNOWN_COLLATION 1273 +#define ER_SLAVE_IGNORED_SSL_PARAMS 1274 +#define ER_SERVER_IS_IN_SECURE_AUTH_MODE 1275 +#define ER_WARN_FIELD_RESOLVED 1276 +#define ER_BAD_SLAVE_UNTIL_COND 1277 +#define ER_MISSING_SKIP_SLAVE 1278 +#define ER_UNTIL_COND_IGNORED 1279 +#define ER_WRONG_NAME_FOR_INDEX 1280 +#define ER_WRONG_NAME_FOR_CATALOG 1281 +#define ER_WARN_QC_RESIZE 1282 +#define ER_BAD_FT_COLUMN 1283 +#define ER_UNKNOWN_KEY_CACHE 1284 +#define ER_WARN_HOSTNAME_WONT_WORK 1285 +#define ER_UNKNOWN_STORAGE_ENGINE 1286 +#define ER_WARN_DEPRECATED_SYNTAX 1287 +#define ER_NON_UPDATABLE_TABLE 1288 +#define ER_FEATURE_DISABLED 1289 +#define ER_OPTION_PREVENTS_STATEMENT 1290 +#define ER_DUPLICATED_VALUE_IN_TYPE 1291 +#define ER_TRUNCATED_WRONG_VALUE 1292 +#define ER_TOO_MUCH_AUTO_TIMESTAMP_COLS 1293 +#define ER_INVALID_ON_UPDATE 1294 +#define ER_UNSUPPORTED_PS 1295 +#define ER_GET_ERRMSG 1296 +#define ER_GET_TEMPORARY_ERRMSG 1297 +#define ER_UNKNOWN_TIME_ZONE 1298 +#define ER_WARN_INVALID_TIMESTAMP 1299 +#define ER_INVALID_CHARACTER_STRING 1300 +#define ER_WARN_ALLOWED_PACKET_OVERFLOWED 1301 +#define ER_CONFLICTING_DECLARATIONS 1302 +#define ER_SP_NO_RECURSIVE_CREATE 1303 +#define ER_SP_ALREADY_EXISTS 1304 +#define ER_SP_DOES_NOT_EXIST 1305 +#define ER_SP_DROP_FAILED 1306 +#define ER_SP_STORE_FAILED 1307 +#define ER_SP_LILABEL_MISMATCH 1308 +#define ER_SP_LABEL_REDEFINE 1309 +#define ER_SP_LABEL_MISMATCH 1310 +#define ER_SP_UNINIT_VAR 1311 +#define ER_SP_BADSELECT 1312 +#define ER_SP_BADRETURN 1313 +#define ER_SP_BADSTATEMENT 1314 +#define ER_UPDATE_LOG_DEPRECATED_IGNORED 1315 +#define ER_UPDATE_LOG_DEPRECATED_TRANSLATED 1316 +#define ER_QUERY_INTERRUPTED 1317 +#define ER_SP_WRONG_NO_OF_ARGS 1318 +#define ER_SP_COND_MISMATCH 1319 +#define ER_SP_NORETURN 1320 +#define ER_SP_NORETURNEND 1321 +#define ER_SP_BAD_CURSOR_QUERY 1322 +#define ER_SP_BAD_CURSOR_SELECT 1323 +#define ER_SP_CURSOR_MISMATCH 1324 +#define ER_SP_CURSOR_ALREADY_OPEN 1325 +#define ER_SP_CURSOR_NOT_OPEN 1326 +#define ER_SP_UNDECLARED_VAR 1327 +#define ER_SP_WRONG_NO_OF_FETCH_ARGS 1328 +#define ER_SP_FETCH_NO_DATA 1329 +#define ER_SP_DUP_PARAM 1330 +#define ER_SP_DUP_VAR 1331 +#define ER_SP_DUP_COND 1332 +#define ER_SP_DUP_CURS 1333 +#define ER_SP_CANT_ALTER 1334 +#define ER_SP_SUBSELECT_NYI 1335 +#define ER_STMT_NOT_ALLOWED_IN_SF_OR_TRG 1336 +#define ER_SP_VARCOND_AFTER_CURSHNDLR 1337 +#define ER_SP_CURSOR_AFTER_HANDLER 1338 +#define ER_SP_CASE_NOT_FOUND 1339 +#define ER_FPARSER_TOO_BIG_FILE 1340 +#define ER_FPARSER_BAD_HEADER 1341 +#define ER_FPARSER_EOF_IN_COMMENT 1342 +#define ER_FPARSER_ERROR_IN_PARAMETER 1343 +#define ER_FPARSER_EOF_IN_UNKNOWN_PARAMETER 1344 +#define ER_VIEW_NO_EXPLAIN 1345 +#define ER_FRM_UNKNOWN_TYPE 1346 +#define ER_WRONG_OBJECT 1347 +#define ER_NONUPDATEABLE_COLUMN 1348 +#define ER_VIEW_SELECT_DERIVED 1349 +#define ER_VIEW_SELECT_CLAUSE 1350 +#define ER_VIEW_SELECT_VARIABLE 1351 +#define ER_VIEW_SELECT_TMPTABLE 1352 +#define ER_VIEW_WRONG_LIST 1353 +#define ER_WARN_VIEW_MERGE 1354 +#define ER_WARN_VIEW_WITHOUT_KEY 1355 +#define ER_VIEW_INVALID 1356 +#define ER_SP_NO_DROP_SP 1357 +#define ER_SP_GOTO_IN_HNDLR 1358 +#define ER_TRG_ALREADY_EXISTS 1359 +#define ER_TRG_DOES_NOT_EXIST 1360 +#define ER_TRG_ON_VIEW_OR_TEMP_TABLE 1361 +#define ER_TRG_CANT_CHANGE_ROW 1362 +#define ER_TRG_NO_SUCH_ROW_IN_TRG 1363 +#define ER_NO_DEFAULT_FOR_FIELD 1364 +#define ER_DIVISION_BY_ZERO 1365 +#define ER_TRUNCATED_WRONG_VALUE_FOR_FIELD 1366 +#define ER_ILLEGAL_VALUE_FOR_TYPE 1367 +#define ER_VIEW_NONUPD_CHECK 1368 +#define ER_VIEW_CHECK_FAILED 1369 +#define ER_PROCACCESS_DENIED_ERROR 1370 +#define ER_RELAY_LOG_FAIL 1371 +#define ER_PASSWD_LENGTH 1372 +#define ER_UNKNOWN_TARGET_BINLOG 1373 +#define ER_IO_ERR_LOG_INDEX_READ 1374 +#define ER_BINLOG_PURGE_PROHIBITED 1375 +#define ER_FSEEK_FAIL 1376 +#define ER_BINLOG_PURGE_FATAL_ERR 1377 +#define ER_LOG_IN_USE 1378 +#define ER_LOG_PURGE_UNKNOWN_ERR 1379 +#define ER_RELAY_LOG_INIT 1380 +#define ER_NO_BINARY_LOGGING 1381 +#define ER_RESERVED_SYNTAX 1382 +#define ER_WSAS_FAILED 1383 +#define ER_DIFF_GROUPS_PROC 1384 +#define ER_NO_GROUP_FOR_PROC 1385 +#define ER_ORDER_WITH_PROC 1386 +#define ER_LOGGING_PROHIBIT_CHANGING_OF 1387 +#define ER_NO_FILE_MAPPING 1388 +#define ER_WRONG_MAGIC 1389 +#define ER_PS_MANY_PARAM 1390 +#define ER_KEY_PART_0 1391 +#define ER_VIEW_CHECKSUM 1392 +#define ER_VIEW_MULTIUPDATE 1393 +#define ER_VIEW_NO_INSERT_FIELD_LIST 1394 +#define ER_VIEW_DELETE_MERGE_VIEW 1395 +#define ER_CANNOT_USER 1396 +#define ER_XAER_NOTA 1397 +#define ER_XAER_INVAL 1398 +#define ER_XAER_RMFAIL 1399 +#define ER_XAER_OUTSIDE 1400 +#define ER_XAER_RMERR 1401 +#define ER_XA_RBROLLBACK 1402 +#define ER_NONEXISTING_PROC_GRANT 1403 +#define ER_PROC_AUTO_GRANT_FAIL 1404 +#define ER_PROC_AUTO_REVOKE_FAIL 1405 +#define ER_DATA_TOO_LONG 1406 +#define ER_SP_BAD_SQLSTATE 1407 +#define ER_STARTUP 1408 +#define ER_LOAD_FROM_FIXED_SIZE_ROWS_TO_VAR 1409 +#define ER_CANT_CREATE_USER_WITH_GRANT 1410 +#define ER_WRONG_VALUE_FOR_TYPE 1411 +#define ER_TABLE_DEF_CHANGED 1412 +#define ER_SP_DUP_HANDLER 1413 +#define ER_SP_NOT_VAR_ARG 1414 +#define ER_SP_NO_RETSET 1415 +#define ER_CANT_CREATE_GEOMETRY_OBJECT 1416 +#define ER_FAILED_ROUTINE_BREAK_BINLOG 1417 +#define ER_BINLOG_UNSAFE_ROUTINE 1418 +#define ER_BINLOG_CREATE_ROUTINE_NEED_SUPER 1419 +#define ER_EXEC_STMT_WITH_OPEN_CURSOR 1420 +#define ER_STMT_HAS_NO_OPEN_CURSOR 1421 +#define ER_COMMIT_NOT_ALLOWED_IN_SF_OR_TRG 1422 +#define ER_NO_DEFAULT_FOR_VIEW_FIELD 1423 +#define ER_SP_NO_RECURSION 1424 +#define ER_TOO_BIG_SCALE 1425 +#define ER_TOO_BIG_PRECISION 1426 +#define ER_M_BIGGER_THAN_D 1427 +#define ER_WRONG_LOCK_OF_SYSTEM_TABLE 1428 +#define ER_CONNECT_TO_FOREIGN_DATA_SOURCE 1429 +#define ER_QUERY_ON_FOREIGN_DATA_SOURCE 1430 +#define ER_FOREIGN_DATA_SOURCE_DOESNT_EXIST 1431 +#define ER_FOREIGN_DATA_STRING_INVALID_CANT_CREATE 1432 +#define ER_FOREIGN_DATA_STRING_INVALID 1433 +#define ER_CANT_CREATE_FEDERATED_TABLE 1434 +#define ER_TRG_IN_WRONG_SCHEMA 1435 +#define ER_STACK_OVERRUN_NEED_MORE 1436 +#define ER_TOO_LONG_BODY 1437 +#define ER_WARN_CANT_DROP_DEFAULT_KEYCACHE 1438 +#define ER_TOO_BIG_DISPLAYWIDTH 1439 +#define ER_XAER_DUPID 1440 +#define ER_DATETIME_FUNCTION_OVERFLOW 1441 +#define ER_CANT_UPDATE_USED_TABLE_IN_SF_OR_TRG 1442 +#define ER_VIEW_PREVENT_UPDATE 1443 +#define ER_PS_NO_RECURSION 1444 +#define ER_SP_CANT_SET_AUTOCOMMIT 1445 +#define ER_MALFORMED_DEFINER 1446 +#define ER_VIEW_FRM_NO_USER 1447 +#define ER_VIEW_OTHER_USER 1448 +#define ER_NO_SUCH_USER 1449 +#define ER_FORBID_SCHEMA_CHANGE 1450 +#define ER_ROW_IS_REFERENCED_2 1451 +#define ER_NO_REFERENCED_ROW_2 1452 +#define ER_SP_BAD_VAR_SHADOW 1453 +#define ER_TRG_NO_DEFINER 1454 +#define ER_OLD_FILE_FORMAT 1455 +#define ER_SP_RECURSION_LIMIT 1456 +#define ER_SP_PROC_TABLE_CORRUPT 1457 +#define ER_SP_WRONG_NAME 1458 +#define ER_TABLE_NEEDS_UPGRADE 1459 +#define ER_SP_NO_AGGREGATE 1460 +#define ER_MAX_PREPARED_STMT_COUNT_REACHED 1461 +#define ER_VIEW_RECURSIVE 1462 +#define ER_NON_GROUPING_FIELD_USED 1463 +#define ER_TABLE_CANT_HANDLE_SPKEYS 1464 +#define ER_NO_TRIGGERS_ON_SYSTEM_SCHEMA 1465 +#define ER_REMOVED_SPACES 1466 +#define ER_AUTOINC_READ_FAILED 1467 +#define ER_USERNAME 1468 +#define ER_HOSTNAME 1469 +#define ER_WRONG_STRING_LENGTH 1470 +#define ER_NON_INSERTABLE_TABLE 1471 +#define ER_ADMIN_WRONG_MRG_TABLE 1472 +#define ER_TOO_HIGH_LEVEL_OF_NESTING_FOR_SELECT 1473 +#define ER_NAME_BECOMES_EMPTY 1474 +#define ER_AMBIGUOUS_FIELD_TERM 1475 +#define ER_FOREIGN_SERVER_EXISTS 1476 +#define ER_FOREIGN_SERVER_DOESNT_EXIST 1477 +#define ER_ILLEGAL_HA_CREATE_OPTION 1478 +#define ER_PARTITION_REQUIRES_VALUES_ERROR 1479 +#define ER_PARTITION_WRONG_VALUES_ERROR 1480 +#define ER_PARTITION_MAXVALUE_ERROR 1481 +#define ER_PARTITION_SUBPARTITION_ERROR 1482 +#define ER_PARTITION_SUBPART_MIX_ERROR 1483 +#define ER_PARTITION_WRONG_NO_PART_ERROR 1484 +#define ER_PARTITION_WRONG_NO_SUBPART_ERROR 1485 +#define ER_WRONG_EXPR_IN_PARTITION_FUNC_ERROR 1486 +#define ER_NO_CONST_EXPR_IN_RANGE_OR_LIST_ERROR 1487 +#define ER_FIELD_NOT_FOUND_PART_ERROR 1488 +#define ER_LIST_OF_FIELDS_ONLY_IN_HASH_ERROR 1489 +#define ER_INCONSISTENT_PARTITION_INFO_ERROR 1490 +#define ER_PARTITION_FUNC_NOT_ALLOWED_ERROR 1491 +#define ER_PARTITIONS_MUST_BE_DEFINED_ERROR 1492 +#define ER_RANGE_NOT_INCREASING_ERROR 1493 +#define ER_INCONSISTENT_TYPE_OF_FUNCTIONS_ERROR 1494 +#define ER_MULTIPLE_DEF_CONST_IN_LIST_PART_ERROR 1495 +#define ER_PARTITION_ENTRY_ERROR 1496 +#define ER_MIX_HANDLER_ERROR 1497 +#define ER_PARTITION_NOT_DEFINED_ERROR 1498 +#define ER_TOO_MANY_PARTITIONS_ERROR 1499 +#define ER_SUBPARTITION_ERROR 1500 +#define ER_CANT_CREATE_HANDLER_FILE 1501 +#define ER_BLOB_FIELD_IN_PART_FUNC_ERROR 1502 +#define ER_UNIQUE_KEY_NEED_ALL_FIELDS_IN_PF 1503 +#define ER_NO_PARTS_ERROR 1504 +#define ER_PARTITION_MGMT_ON_NONPARTITIONED 1505 +#define ER_FOREIGN_KEY_ON_PARTITIONED 1506 +#define ER_DROP_PARTITION_NON_EXISTENT 1507 +#define ER_DROP_LAST_PARTITION 1508 +#define ER_COALESCE_ONLY_ON_HASH_PARTITION 1509 +#define ER_REORG_HASH_ONLY_ON_SAME_NO 1510 +#define ER_REORG_NO_PARAM_ERROR 1511 +#define ER_ONLY_ON_RANGE_LIST_PARTITION 1512 +#define ER_ADD_PARTITION_SUBPART_ERROR 1513 +#define ER_ADD_PARTITION_NO_NEW_PARTITION 1514 +#define ER_COALESCE_PARTITION_NO_PARTITION 1515 +#define ER_REORG_PARTITION_NOT_EXIST 1516 +#define ER_SAME_NAME_PARTITION 1517 +#define ER_NO_BINLOG_ERROR 1518 +#define ER_CONSECUTIVE_REORG_PARTITIONS 1519 +#define ER_REORG_OUTSIDE_RANGE 1520 +#define ER_PARTITION_FUNCTION_FAILURE 1521 +#define ER_PART_STATE_ERROR 1522 +#define ER_LIMITED_PART_RANGE 1523 +#define ER_PLUGIN_IS_NOT_LOADED 1524 +#define ER_WRONG_VALUE 1525 +#define ER_NO_PARTITION_FOR_GIVEN_VALUE 1526 +#define ER_FILEGROUP_OPTION_ONLY_ONCE 1527 +#define ER_CREATE_FILEGROUP_FAILED 1528 +#define ER_DROP_FILEGROUP_FAILED 1529 +#define ER_TABLESPACE_AUTO_EXTEND_ERROR 1530 +#define ER_WRONG_SIZE_NUMBER 1531 +#define ER_SIZE_OVERFLOW_ERROR 1532 +#define ER_ALTER_FILEGROUP_FAILED 1533 +#define ER_BINLOG_ROW_LOGGING_FAILED 1534 +#define ER_BINLOG_ROW_WRONG_TABLE_DEF 1535 +#define ER_BINLOG_ROW_RBR_TO_SBR 1536 +#define ER_EVENT_ALREADY_EXISTS 1537 +#define ER_EVENT_STORE_FAILED 1538 +#define ER_EVENT_DOES_NOT_EXIST 1539 +#define ER_EVENT_CANT_ALTER 1540 +#define ER_EVENT_DROP_FAILED 1541 +#define ER_EVENT_INTERVAL_NOT_POSITIVE_OR_TOO_BIG 1542 +#define ER_EVENT_ENDS_BEFORE_STARTS 1543 +#define ER_EVENT_EXEC_TIME_IN_THE_PAST 1544 +#define ER_EVENT_OPEN_TABLE_FAILED 1545 +#define ER_EVENT_NEITHER_M_EXPR_NOR_M_AT 1546 +#define ER_COL_COUNT_DOESNT_MATCH_CORRUPTED 1547 +#define ER_CANNOT_LOAD_FROM_TABLE 1548 +#define ER_EVENT_CANNOT_DELETE 1549 +#define ER_EVENT_COMPILE_ERROR 1550 +#define ER_EVENT_SAME_NAME 1551 +#define ER_EVENT_DATA_TOO_LONG 1552 +#define ER_DROP_INDEX_FK 1553 +#define ER_WARN_DEPRECATED_SYNTAX_WITH_VER 1554 +#define ER_CANT_WRITE_LOCK_LOG_TABLE 1555 +#define ER_CANT_LOCK_LOG_TABLE 1556 +#define ER_FOREIGN_DUPLICATE_KEY 1557 +#define ER_COL_COUNT_DOESNT_MATCH_PLEASE_UPDATE 1558 +#define ER_TEMP_TABLE_PREVENTS_SWITCH_OUT_OF_RBR 1559 +#define ER_STORED_FUNCTION_PREVENTS_SWITCH_BINLOG_FORMAT 1560 +#define ER_NDB_CANT_SWITCH_BINLOG_FORMAT 1561 +#define ER_PARTITION_NO_TEMPORARY 1562 +#define ER_PARTITION_CONST_DOMAIN_ERROR 1563 +#define ER_PARTITION_FUNCTION_IS_NOT_ALLOWED 1564 +#define ER_DDL_LOG_ERROR 1565 +#define ER_NULL_IN_VALUES_LESS_THAN 1566 +#define ER_WRONG_PARTITION_NAME 1567 +#define ER_CANT_CHANGE_TX_ISOLATION 1568 +#define ER_DUP_ENTRY_AUTOINCREMENT_CASE 1569 +#define ER_EVENT_MODIFY_QUEUE_ERROR 1570 +#define ER_EVENT_SET_VAR_ERROR 1571 +#define ER_PARTITION_MERGE_ERROR 1572 +#define ER_CANT_ACTIVATE_LOG 1573 +#define ER_RBR_NOT_AVAILABLE 1574 +#define ER_BASE64_DECODE_ERROR 1575 +#define ER_EVENT_RECURSION_FORBIDDEN 1576 +#define ER_EVENTS_DB_ERROR 1577 +#define ER_ONLY_INTEGERS_ALLOWED 1578 +#define ER_UNSUPORTED_LOG_ENGINE 1579 +#define ER_BAD_LOG_STATEMENT 1580 +#define ER_CANT_RENAME_LOG_TABLE 1581 +#define ER_WRONG_PARAMCOUNT_TO_NATIVE_FCT 1582 +#define ER_WRONG_PARAMETERS_TO_NATIVE_FCT 1583 +#define ER_WRONG_PARAMETERS_TO_STORED_FCT 1584 +#define ER_NATIVE_FCT_NAME_COLLISION 1585 +#define ER_DUP_ENTRY_WITH_KEY_NAME 1586 +#define ER_BINLOG_PURGE_EMFILE 1587 +#define ER_EVENT_CANNOT_CREATE_IN_THE_PAST 1588 +#define ER_EVENT_CANNOT_ALTER_IN_THE_PAST 1589 +#define ER_SLAVE_INCIDENT 1590 +#define ER_NO_PARTITION_FOR_GIVEN_VALUE_SILENT 1591 +#define ER_BINLOG_UNSAFE_STATEMENT 1592 +#define ER_SLAVE_FATAL_ERROR 1593 +#define ER_SLAVE_RELAY_LOG_READ_FAILURE 1594 +#define ER_SLAVE_RELAY_LOG_WRITE_FAILURE 1595 +#define ER_SLAVE_CREATE_EVENT_FAILURE 1596 +#define ER_SLAVE_MASTER_COM_FAILURE 1597 +#define ER_BINLOG_LOGGING_IMPOSSIBLE 1598 +#define ER_VIEW_NO_CREATION_CTX 1599 +#define ER_VIEW_INVALID_CREATION_CTX 1600 +#define ER_SR_INVALID_CREATION_CTX 1601 +#define ER_TRG_CORRUPTED_FILE 1602 +#define ER_TRG_NO_CREATION_CTX 1603 +#define ER_TRG_INVALID_CREATION_CTX 1604 +#define ER_EVENT_INVALID_CREATION_CTX 1605 +#define ER_TRG_CANT_OPEN_TABLE 1606 +#define ER_CANT_CREATE_SROUTINE 1607 +#define ER_SLAVE_AMBIGOUS_EXEC_MODE 1608 +#define ER_NO_FORMAT_DESCRIPTION_EVENT_BEFORE_BINLOG_STATEMENT 1609 +#define ER_SLAVE_CORRUPT_EVENT 1610 +#define ER_LOAD_DATA_INVALID_COLUMN 1611 +#define ER_LOG_PURGE_NO_FILE 1612 +#define ER_XA_RBTIMEOUT 1613 +#define ER_XA_RBDEADLOCK 1614 +#define ER_NEED_REPREPARE 1615 +#define ER_DELAYED_NOT_SUPPORTED 1616 +#define WARN_NO_MASTER_INFO 1617 +#define WARN_OPTION_IGNORED 1618 +#define WARN_PLUGIN_DELETE_BUILTIN 1619 +#define WARN_PLUGIN_BUSY 1620 +#define ER_VARIABLE_IS_READONLY 1621 +#define ER_WARN_ENGINE_TRANSACTION_ROLLBACK 1622 +#define ER_SLAVE_HEARTBEAT_FAILURE 1623 +#define ER_SLAVE_HEARTBEAT_VALUE_OUT_OF_RANGE 1624 +#define ER_NDB_REPLICATION_SCHEMA_ERROR 1625 +#define ER_CONFLICT_FN_PARSE_ERROR 1626 +#define ER_EXCEPTIONS_WRITE_ERROR 1627 +#define ER_TOO_LONG_TABLE_COMMENT 1628 +#define ER_TOO_LONG_FIELD_COMMENT 1629 +#define ER_FUNC_INEXISTENT_NAME_COLLISION 1630 +#define ER_DATABASE_NAME 1631 +#define ER_TABLE_NAME 1632 +#define ER_PARTITION_NAME 1633 +#define ER_SUBPARTITION_NAME 1634 +#define ER_TEMPORARY_NAME 1635 +#define ER_RENAMED_NAME 1636 +#define ER_TOO_MANY_CONCURRENT_TRXS 1637 +#define WARN_NON_ASCII_SEPARATOR_NOT_IMPLEMENTED 1638 +#define ER_DEBUG_SYNC_TIMEOUT 1639 +#define ER_DEBUG_SYNC_HIT_LIMIT 1640 +#define ER_ERROR_LAST 1640 diff --git a/EQ2/source/depends/mysql-5.1.45-win32/include/sql_common.h b/EQ2/source/depends/mysql-5.1.45-win32/include/sql_common.h new file mode 100644 index 000000000..9e43d076b --- /dev/null +++ b/EQ2/source/depends/mysql-5.1.45-win32/include/sql_common.h @@ -0,0 +1,50 @@ +/* Copyright (C) 2003-2004, 2006 MySQL AB + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; version 2 of the License. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ + + +extern const char *unknown_sqlstate; +extern const char *cant_connect_sqlstate; +extern const char *not_error_sqlstate; + +#ifdef __cplusplus +extern "C" { +#endif + +extern CHARSET_INFO *default_client_charset_info; +MYSQL_FIELD *unpack_fields(MYSQL_DATA *data,MEM_ROOT *alloc,uint fields, + my_bool default_value, uint server_capabilities); +void free_rows(MYSQL_DATA *cur); +void free_old_query(MYSQL *mysql); +void end_server(MYSQL *mysql); +my_bool mysql_reconnect(MYSQL *mysql); +void mysql_read_default_options(struct st_mysql_options *options, + const char *filename,const char *group); +my_bool +cli_advanced_command(MYSQL *mysql, enum enum_server_command command, + const unsigned char *header, ulong header_length, + const unsigned char *arg, ulong arg_length, + my_bool skip_check, MYSQL_STMT *stmt); +unsigned long cli_safe_read(MYSQL *mysql); +void net_clear_error(NET *net); +void set_stmt_errmsg(MYSQL_STMT *stmt, NET *net); +void set_stmt_error(MYSQL_STMT *stmt, int errcode, const char *sqlstate, + const char *err); +void set_mysql_error(MYSQL *mysql, int errcode, const char *sqlstate); +#ifdef __cplusplus +} +#endif + +#define protocol_41(A) ((A)->server_capabilities & CLIENT_PROTOCOL_41) + diff --git a/EQ2/source/depends/mysql-5.1.45-win32/include/sql_state.h b/EQ2/source/depends/mysql-5.1.45-win32/include/sql_state.h new file mode 100644 index 000000000..f14b1cf59 --- /dev/null +++ b/EQ2/source/depends/mysql-5.1.45-win32/include/sql_state.h @@ -0,0 +1,211 @@ +/* Autogenerated file, please don't edit */ + +{ ER_DUP_KEY ,"23000", "" }, +{ ER_OUTOFMEMORY ,"HY001", "S1001" }, +{ ER_OUT_OF_SORTMEMORY ,"HY001", "S1001" }, +{ ER_CON_COUNT_ERROR ,"08004", "" }, +{ ER_BAD_HOST_ERROR ,"08S01", "" }, +{ ER_HANDSHAKE_ERROR ,"08S01", "" }, +{ ER_DBACCESS_DENIED_ERROR ,"42000", "" }, +{ ER_ACCESS_DENIED_ERROR ,"28000", "" }, +{ ER_NO_DB_ERROR ,"3D000", "" }, +{ ER_UNKNOWN_COM_ERROR ,"08S01", "" }, +{ ER_BAD_NULL_ERROR ,"23000", "" }, +{ ER_BAD_DB_ERROR ,"42000", "" }, +{ ER_TABLE_EXISTS_ERROR ,"42S01", "" }, +{ ER_BAD_TABLE_ERROR ,"42S02", "" }, +{ ER_NON_UNIQ_ERROR ,"23000", "" }, +{ ER_SERVER_SHUTDOWN ,"08S01", "" }, +{ ER_BAD_FIELD_ERROR ,"42S22", "S0022" }, +{ ER_WRONG_FIELD_WITH_GROUP ,"42000", "S1009" }, +{ ER_WRONG_GROUP_FIELD ,"42000", "S1009" }, +{ ER_WRONG_SUM_SELECT ,"42000", "S1009" }, +{ ER_WRONG_VALUE_COUNT ,"21S01", "" }, +{ ER_TOO_LONG_IDENT ,"42000", "S1009" }, +{ ER_DUP_FIELDNAME ,"42S21", "S1009" }, +{ ER_DUP_KEYNAME ,"42000", "S1009" }, +{ ER_DUP_ENTRY ,"23000", "S1009" }, +{ ER_WRONG_FIELD_SPEC ,"42000", "S1009" }, +{ ER_PARSE_ERROR ,"42000", "s1009" }, +{ ER_EMPTY_QUERY ,"42000", "" }, +{ ER_NONUNIQ_TABLE ,"42000", "S1009" }, +{ ER_INVALID_DEFAULT ,"42000", "S1009" }, +{ ER_MULTIPLE_PRI_KEY ,"42000", "S1009" }, +{ ER_TOO_MANY_KEYS ,"42000", "S1009" }, +{ ER_TOO_MANY_KEY_PARTS ,"42000", "S1009" }, +{ ER_TOO_LONG_KEY ,"42000", "S1009" }, +{ ER_KEY_COLUMN_DOES_NOT_EXITS ,"42000", "S1009" }, +{ ER_BLOB_USED_AS_KEY ,"42000", "S1009" }, +{ ER_TOO_BIG_FIELDLENGTH ,"42000", "S1009" }, +{ ER_WRONG_AUTO_KEY ,"42000", "S1009" }, +{ ER_FORCING_CLOSE ,"08S01", "" }, +{ ER_IPSOCK_ERROR ,"08S01", "" }, +{ ER_NO_SUCH_INDEX ,"42S12", "S1009" }, +{ ER_WRONG_FIELD_TERMINATORS ,"42000", "S1009" }, +{ ER_BLOBS_AND_NO_TERMINATED ,"42000", "S1009" }, +{ ER_CANT_REMOVE_ALL_FIELDS ,"42000", "" }, +{ ER_CANT_DROP_FIELD_OR_KEY ,"42000", "" }, +{ ER_BLOB_CANT_HAVE_DEFAULT ,"42000", "" }, +{ ER_WRONG_DB_NAME ,"42000", "" }, +{ ER_WRONG_TABLE_NAME ,"42000", "" }, +{ ER_TOO_BIG_SELECT ,"42000", "" }, +{ ER_UNKNOWN_PROCEDURE ,"42000", "" }, +{ ER_WRONG_PARAMCOUNT_TO_PROCEDURE ,"42000", "" }, +{ ER_UNKNOWN_TABLE ,"42S02", "" }, +{ ER_FIELD_SPECIFIED_TWICE ,"42000", "" }, +{ ER_UNSUPPORTED_EXTENSION ,"42000", "" }, +{ ER_TABLE_MUST_HAVE_COLUMNS ,"42000", "" }, +{ ER_UNKNOWN_CHARACTER_SET ,"42000", "" }, +{ ER_TOO_BIG_ROWSIZE ,"42000", "" }, +{ ER_WRONG_OUTER_JOIN ,"42000", "" }, +{ ER_NULL_COLUMN_IN_INDEX ,"42000", "" }, +{ ER_PASSWORD_ANONYMOUS_USER ,"42000", "" }, +{ ER_PASSWORD_NOT_ALLOWED ,"42000", "" }, +{ ER_PASSWORD_NO_MATCH ,"42000", "" }, +{ ER_WRONG_VALUE_COUNT_ON_ROW ,"21S01", "" }, +{ ER_INVALID_USE_OF_NULL ,"22004", "" }, +{ ER_REGEXP_ERROR ,"42000", "" }, +{ ER_MIX_OF_GROUP_FUNC_AND_FIELDS ,"42000", "" }, +{ ER_NONEXISTING_GRANT ,"42000", "" }, +{ ER_TABLEACCESS_DENIED_ERROR ,"42000", "" }, +{ ER_COLUMNACCESS_DENIED_ERROR ,"42000", "" }, +{ ER_ILLEGAL_GRANT_FOR_TABLE ,"42000", "" }, +{ ER_GRANT_WRONG_HOST_OR_USER ,"42000", "" }, +{ ER_NO_SUCH_TABLE ,"42S02", "" }, +{ ER_NONEXISTING_TABLE_GRANT ,"42000", "" }, +{ ER_NOT_ALLOWED_COMMAND ,"42000", "" }, +{ ER_SYNTAX_ERROR ,"42000", "" }, +{ ER_ABORTING_CONNECTION ,"08S01", "" }, +{ ER_NET_PACKET_TOO_LARGE ,"08S01", "" }, +{ ER_NET_READ_ERROR_FROM_PIPE ,"08S01", "" }, +{ ER_NET_FCNTL_ERROR ,"08S01", "" }, +{ ER_NET_PACKETS_OUT_OF_ORDER ,"08S01", "" }, +{ ER_NET_UNCOMPRESS_ERROR ,"08S01", "" }, +{ ER_NET_READ_ERROR ,"08S01", "" }, +{ ER_NET_READ_INTERRUPTED ,"08S01", "" }, +{ ER_NET_ERROR_ON_WRITE ,"08S01", "" }, +{ ER_NET_WRITE_INTERRUPTED ,"08S01", "" }, +{ ER_TOO_LONG_STRING ,"42000", "" }, +{ ER_TABLE_CANT_HANDLE_BLOB ,"42000", "" }, +{ ER_TABLE_CANT_HANDLE_AUTO_INCREMENT ,"42000", "" }, +{ ER_WRONG_COLUMN_NAME ,"42000", "" }, +{ ER_WRONG_KEY_COLUMN ,"42000", "" }, +{ ER_DUP_UNIQUE ,"23000", "" }, +{ ER_BLOB_KEY_WITHOUT_LENGTH ,"42000", "" }, +{ ER_PRIMARY_CANT_HAVE_NULL ,"42000", "" }, +{ ER_TOO_MANY_ROWS ,"42000", "" }, +{ ER_REQUIRES_PRIMARY_KEY ,"42000", "" }, +{ ER_KEY_DOES_NOT_EXITS ,"42000", "S1009" }, +{ ER_CHECK_NO_SUCH_TABLE ,"42000", "" }, +{ ER_CHECK_NOT_IMPLEMENTED ,"42000", "" }, +{ ER_CANT_DO_THIS_DURING_AN_TRANSACTION ,"25000", "" }, +{ ER_NEW_ABORTING_CONNECTION ,"08S01", "" }, +{ ER_MASTER_NET_READ ,"08S01", "" }, +{ ER_MASTER_NET_WRITE ,"08S01", "" }, +{ ER_TOO_MANY_USER_CONNECTIONS ,"42000", "" }, +{ ER_READ_ONLY_TRANSACTION ,"25000", "" }, +{ ER_NO_PERMISSION_TO_CREATE_USER ,"42000", "" }, +{ ER_LOCK_DEADLOCK ,"40001", "" }, +{ ER_NO_REFERENCED_ROW ,"23000", "" }, +{ ER_ROW_IS_REFERENCED ,"23000", "" }, +{ ER_CONNECT_TO_MASTER ,"08S01", "" }, +{ ER_WRONG_NUMBER_OF_COLUMNS_IN_SELECT ,"21000", "" }, +{ ER_USER_LIMIT_REACHED ,"42000", "" }, +{ ER_SPECIFIC_ACCESS_DENIED_ERROR ,"42000", "" }, +{ ER_NO_DEFAULT ,"42000", "" }, +{ ER_WRONG_VALUE_FOR_VAR ,"42000", "" }, +{ ER_WRONG_TYPE_FOR_VAR ,"42000", "" }, +{ ER_CANT_USE_OPTION_HERE ,"42000", "" }, +{ ER_NOT_SUPPORTED_YET ,"42000", "" }, +{ ER_WRONG_FK_DEF ,"42000", "" }, +{ ER_OPERAND_COLUMNS ,"21000", "" }, +{ ER_SUBQUERY_NO_1_ROW ,"21000", "" }, +{ ER_ILLEGAL_REFERENCE ,"42S22", "" }, +{ ER_DERIVED_MUST_HAVE_ALIAS ,"42000", "" }, +{ ER_SELECT_REDUCED ,"01000", "" }, +{ ER_TABLENAME_NOT_ALLOWED_HERE ,"42000", "" }, +{ ER_NOT_SUPPORTED_AUTH_MODE ,"08004", "" }, +{ ER_SPATIAL_CANT_HAVE_NULL ,"42000", "" }, +{ ER_COLLATION_CHARSET_MISMATCH ,"42000", "" }, +{ ER_WARN_TOO_FEW_RECORDS ,"01000", "" }, +{ ER_WARN_TOO_MANY_RECORDS ,"01000", "" }, +{ ER_WARN_NULL_TO_NOTNULL ,"22004", "" }, +{ ER_WARN_DATA_OUT_OF_RANGE ,"22003", "" }, +{ WARN_DATA_TRUNCATED ,"01000", "" }, +{ ER_WRONG_NAME_FOR_INDEX ,"42000", "" }, +{ ER_WRONG_NAME_FOR_CATALOG ,"42000", "" }, +{ ER_UNKNOWN_STORAGE_ENGINE ,"42000", "" }, +{ ER_TRUNCATED_WRONG_VALUE ,"22007", "" }, +{ ER_SP_NO_RECURSIVE_CREATE ,"2F003", "" }, +{ ER_SP_ALREADY_EXISTS ,"42000", "" }, +{ ER_SP_DOES_NOT_EXIST ,"42000", "" }, +{ ER_SP_LILABEL_MISMATCH ,"42000", "" }, +{ ER_SP_LABEL_REDEFINE ,"42000", "" }, +{ ER_SP_LABEL_MISMATCH ,"42000", "" }, +{ ER_SP_UNINIT_VAR ,"01000", "" }, +{ ER_SP_BADSELECT ,"0A000", "" }, +{ ER_SP_BADRETURN ,"42000", "" }, +{ ER_SP_BADSTATEMENT ,"0A000", "" }, +{ ER_UPDATE_LOG_DEPRECATED_IGNORED ,"42000", "" }, +{ ER_UPDATE_LOG_DEPRECATED_TRANSLATED ,"42000", "" }, +{ ER_QUERY_INTERRUPTED ,"70100", "" }, +{ ER_SP_WRONG_NO_OF_ARGS ,"42000", "" }, +{ ER_SP_COND_MISMATCH ,"42000", "" }, +{ ER_SP_NORETURN ,"42000", "" }, +{ ER_SP_NORETURNEND ,"2F005", "" }, +{ ER_SP_BAD_CURSOR_QUERY ,"42000", "" }, +{ ER_SP_BAD_CURSOR_SELECT ,"42000", "" }, +{ ER_SP_CURSOR_MISMATCH ,"42000", "" }, +{ ER_SP_CURSOR_ALREADY_OPEN ,"24000", "" }, +{ ER_SP_CURSOR_NOT_OPEN ,"24000", "" }, +{ ER_SP_UNDECLARED_VAR ,"42000", "" }, +{ ER_SP_FETCH_NO_DATA ,"02000", "" }, +{ ER_SP_DUP_PARAM ,"42000", "" }, +{ ER_SP_DUP_VAR ,"42000", "" }, +{ ER_SP_DUP_COND ,"42000", "" }, +{ ER_SP_DUP_CURS ,"42000", "" }, +{ ER_SP_SUBSELECT_NYI ,"0A000", "" }, +{ ER_STMT_NOT_ALLOWED_IN_SF_OR_TRG ,"0A000", "" }, +{ ER_SP_VARCOND_AFTER_CURSHNDLR ,"42000", "" }, +{ ER_SP_CURSOR_AFTER_HANDLER ,"42000", "" }, +{ ER_SP_CASE_NOT_FOUND ,"20000", "" }, +{ ER_DIVISION_BY_ZERO ,"22012", "" }, +{ ER_ILLEGAL_VALUE_FOR_TYPE ,"22007", "" }, +{ ER_PROCACCESS_DENIED_ERROR ,"42000", "" }, +{ ER_XAER_NOTA ,"XAE04", "" }, +{ ER_XAER_INVAL ,"XAE05", "" }, +{ ER_XAER_RMFAIL ,"XAE07", "" }, +{ ER_XAER_OUTSIDE ,"XAE09", "" }, +{ ER_XAER_RMERR ,"XAE03", "" }, +{ ER_XA_RBROLLBACK ,"XA100", "" }, +{ ER_NONEXISTING_PROC_GRANT ,"42000", "" }, +{ ER_DATA_TOO_LONG ,"22001", "" }, +{ ER_SP_BAD_SQLSTATE ,"42000", "" }, +{ ER_CANT_CREATE_USER_WITH_GRANT ,"42000", "" }, +{ ER_SP_DUP_HANDLER ,"42000", "" }, +{ ER_SP_NOT_VAR_ARG ,"42000", "" }, +{ ER_SP_NO_RETSET ,"0A000", "" }, +{ ER_CANT_CREATE_GEOMETRY_OBJECT ,"22003", "" }, +{ ER_TOO_BIG_SCALE ,"42000", "S1009" }, +{ ER_TOO_BIG_PRECISION ,"42000", "S1009" }, +{ ER_M_BIGGER_THAN_D ,"42000", "S1009" }, +{ ER_TOO_LONG_BODY ,"42000", "S1009" }, +{ ER_TOO_BIG_DISPLAYWIDTH ,"42000", "S1009" }, +{ ER_XAER_DUPID ,"XAE08", "" }, +{ ER_DATETIME_FUNCTION_OVERFLOW ,"22008", "" }, +{ ER_ROW_IS_REFERENCED_2 ,"23000", "" }, +{ ER_NO_REFERENCED_ROW_2 ,"23000", "" }, +{ ER_SP_BAD_VAR_SHADOW ,"42000", "" }, +{ ER_SP_WRONG_NAME ,"42000", "" }, +{ ER_SP_NO_AGGREGATE ,"42000", "" }, +{ ER_MAX_PREPARED_STMT_COUNT_REACHED ,"42000", "" }, +{ ER_NON_GROUPING_FIELD_USED ,"42000", "" }, +{ ER_FOREIGN_DUPLICATE_KEY ,"23000", "S1009" }, +{ ER_CANT_CHANGE_TX_ISOLATION ,"25001", "" }, +{ ER_WRONG_PARAMCOUNT_TO_NATIVE_FCT ,"42000", "" }, +{ ER_WRONG_PARAMETERS_TO_NATIVE_FCT ,"42000", "" }, +{ ER_WRONG_PARAMETERS_TO_STORED_FCT ,"42000", "" }, +{ ER_DUP_ENTRY_WITH_KEY_NAME ,"23000", "S1009" }, +{ ER_XA_RBTIMEOUT ,"XA106", "" }, +{ ER_XA_RBDEADLOCK ,"XA102", "" }, +{ ER_FUNC_INEXISTENT_NAME_COLLISION ,"42000", "" }, diff --git a/EQ2/source/depends/mysql-5.1.45-win32/include/sslopt-case.h b/EQ2/source/depends/mysql-5.1.45-win32/include/sslopt-case.h new file mode 100644 index 000000000..adb9a2850 --- /dev/null +++ b/EQ2/source/depends/mysql-5.1.45-win32/include/sslopt-case.h @@ -0,0 +1,28 @@ +/* Copyright (C) 2000 MySQL AB + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; version 2 of the License. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ + +#ifdef HAVE_OPENSSL + case OPT_SSL_KEY: + case OPT_SSL_CERT: + case OPT_SSL_CA: + case OPT_SSL_CAPATH: + case OPT_SSL_CIPHER: + /* + Enable use of SSL if we are using any ssl option + One can disable SSL later by using --skip-ssl or --ssl=0 + */ + opt_use_ssl= 1; + break; +#endif diff --git a/EQ2/source/depends/mysql-5.1.45-win32/include/sslopt-longopts.h b/EQ2/source/depends/mysql-5.1.45-win32/include/sslopt-longopts.h new file mode 100644 index 000000000..c76b5dcd2 --- /dev/null +++ b/EQ2/source/depends/mysql-5.1.45-win32/include/sslopt-longopts.h @@ -0,0 +1,45 @@ +/* Copyright (C) 2000 MySQL AB + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; version 2 of the License. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ + +#ifdef HAVE_OPENSSL + + {"ssl", OPT_SSL_SSL, + "Enable SSL for connection (automatically enabled with other flags). Disable with --skip-ssl.", + (uchar **) &opt_use_ssl, (uchar **) &opt_use_ssl, 0, GET_BOOL, NO_ARG, 0, 0, 0, + 0, 0, 0}, + {"ssl-ca", OPT_SSL_CA, + "CA file in PEM format (check OpenSSL docs, implies --ssl).", + (uchar **) &opt_ssl_ca, (uchar **) &opt_ssl_ca, 0, GET_STR, REQUIRED_ARG, + 0, 0, 0, 0, 0, 0}, + {"ssl-capath", OPT_SSL_CAPATH, + "CA directory (check OpenSSL docs, implies --ssl).", + (uchar **) &opt_ssl_capath, (uchar **) &opt_ssl_capath, 0, GET_STR, REQUIRED_ARG, + 0, 0, 0, 0, 0, 0}, + {"ssl-cert", OPT_SSL_CERT, "X509 cert in PEM format (implies --ssl).", + (uchar **) &opt_ssl_cert, (uchar **) &opt_ssl_cert, 0, GET_STR, REQUIRED_ARG, + 0, 0, 0, 0, 0, 0}, + {"ssl-cipher", OPT_SSL_CIPHER, "SSL cipher to use (implies --ssl).", + (uchar **) &opt_ssl_cipher, (uchar **) &opt_ssl_cipher, 0, GET_STR, REQUIRED_ARG, + 0, 0, 0, 0, 0, 0}, + {"ssl-key", OPT_SSL_KEY, "X509 key in PEM format (implies --ssl).", + (uchar **) &opt_ssl_key, (uchar **) &opt_ssl_key, 0, GET_STR, REQUIRED_ARG, + 0, 0, 0, 0, 0, 0}, +#ifdef MYSQL_CLIENT + {"ssl-verify-server-cert", OPT_SSL_VERIFY_SERVER_CERT, + "Verify server's \"Common Name\" in its cert against hostname used when connecting. This option is disabled by default.", + (uchar **) &opt_ssl_verify_server_cert, (uchar **) &opt_ssl_verify_server_cert, + 0, GET_BOOL, NO_ARG, 0, 0, 0, 0, 0, 0}, +#endif +#endif /* HAVE_OPENSSL */ diff --git a/EQ2/source/depends/mysql-5.1.45-win32/include/sslopt-vars.h b/EQ2/source/depends/mysql-5.1.45-win32/include/sslopt-vars.h new file mode 100644 index 000000000..3369f870d --- /dev/null +++ b/EQ2/source/depends/mysql-5.1.45-win32/include/sslopt-vars.h @@ -0,0 +1,31 @@ +/* Copyright (C) 2000 MySQL AB + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; version 2 of the License. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ + +#ifdef HAVE_OPENSSL +#ifdef SSL_VARS_NOT_STATIC +#define SSL_STATIC +#else +#define SSL_STATIC static +#endif +SSL_STATIC my_bool opt_use_ssl = 0; +SSL_STATIC char *opt_ssl_ca = 0; +SSL_STATIC char *opt_ssl_capath = 0; +SSL_STATIC char *opt_ssl_cert = 0; +SSL_STATIC char *opt_ssl_cipher = 0; +SSL_STATIC char *opt_ssl_key = 0; +#ifdef MYSQL_CLIENT +SSL_STATIC my_bool opt_ssl_verify_server_cert= 0; +#endif +#endif diff --git a/EQ2/source/depends/mysql-5.1.45-win32/include/typelib.h b/EQ2/source/depends/mysql-5.1.45-win32/include/typelib.h new file mode 100644 index 000000000..46106d1bd --- /dev/null +++ b/EQ2/source/depends/mysql-5.1.45-win32/include/typelib.h @@ -0,0 +1,39 @@ +/* Copyright (C) 2000 MySQL AB + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; version 2 of the License. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ + + +#ifndef _typelib_h +#define _typelib_h + +#include "my_alloc.h" + +typedef struct st_typelib { /* Different types saved here */ + unsigned int count; /* How many types */ + const char *name; /* Name of typelib */ + const char **type_names; + unsigned int *type_lengths; +} TYPELIB; + +extern my_ulonglong find_typeset(char *x, TYPELIB *typelib,int *error_position); +extern int find_type_or_exit(const char *x, TYPELIB *typelib, + const char *option); +extern int find_type(char *x, const TYPELIB *typelib, unsigned int full_name); +extern void make_type(char *to,unsigned int nr,TYPELIB *typelib); +extern const char *get_type(TYPELIB *typelib,unsigned int nr); +extern TYPELIB *copy_typelib(MEM_ROOT *root, TYPELIB *from); + +extern TYPELIB sql_protocol_typelib; + +#endif /* _typelib_h */ diff --git a/EQ2/source/depends/mysql-5.1.45-win32/lib/opt/libmysql.pdb b/EQ2/source/depends/mysql-5.1.45-win32/lib/opt/libmysql.pdb new file mode 100644 index 000000000..fce103024 Binary files /dev/null and b/EQ2/source/depends/mysql-5.1.45-win32/lib/opt/libmysql.pdb differ diff --git a/EQ2/source/depends/mysql-5.1.45-win32/lib/opt/mysqlclient.pdb b/EQ2/source/depends/mysql-5.1.45-win32/lib/opt/mysqlclient.pdb new file mode 100644 index 000000000..dce4a9ccd Binary files /dev/null and b/EQ2/source/depends/mysql-5.1.45-win32/lib/opt/mysqlclient.pdb differ diff --git a/EQ2/source/depends/mysql-5.1.45-win32/lib/opt/mysys.pdb b/EQ2/source/depends/mysql-5.1.45-win32/lib/opt/mysys.pdb new file mode 100644 index 000000000..e9545d875 Binary files /dev/null and b/EQ2/source/depends/mysql-5.1.45-win32/lib/opt/mysys.pdb differ diff --git a/EQ2/source/depends/mysql-5.1.45-win32/lib/opt/regex.pdb b/EQ2/source/depends/mysql-5.1.45-win32/lib/opt/regex.pdb new file mode 100644 index 000000000..541fcbcbe Binary files /dev/null and b/EQ2/source/depends/mysql-5.1.45-win32/lib/opt/regex.pdb differ diff --git a/EQ2/source/depends/mysql-5.1.45-win32/lib/opt/strings.pdb b/EQ2/source/depends/mysql-5.1.45-win32/lib/opt/strings.pdb new file mode 100644 index 000000000..373877c4a Binary files /dev/null and b/EQ2/source/depends/mysql-5.1.45-win32/lib/opt/strings.pdb differ diff --git a/EQ2/source/depends/mysql-5.1.45-win32/lib/opt/zlib.pdb b/EQ2/source/depends/mysql-5.1.45-win32/lib/opt/zlib.pdb new file mode 100644 index 000000000..6275a91d0 Binary files /dev/null and b/EQ2/source/depends/mysql-5.1.45-win32/lib/opt/zlib.pdb differ diff --git a/EQ2/source/depends/mysql-5.1.45-winx64/include/config-win.h b/EQ2/source/depends/mysql-5.1.45-winx64/include/config-win.h new file mode 100644 index 000000000..da9b1fc00 --- /dev/null +++ b/EQ2/source/depends/mysql-5.1.45-winx64/include/config-win.h @@ -0,0 +1,412 @@ +/* Copyright 2000-2008 MySQL AB, 2008 Sun Microsystems, Inc. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; version 2 of the License. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ + +/* Defines for Win32 to make it compatible for MySQL */ + +#define BIG_TABLES + +#if defined(_MSC_VER) && _MSC_VER >= 1400 +/* Avoid endless warnings about sprintf() etc. being unsafe. */ +#define _CRT_SECURE_NO_DEPRECATE 1 +#endif + +#include +#include +#include +#include +#include + +#define HAVE_SMEM 1 + +#if defined(_WIN64) || defined(WIN64) +#define SYSTEM_TYPE "Win64" +#elif defined(_WIN32) || defined(WIN32) +#define SYSTEM_TYPE "Win32" +#else +#define SYSTEM_TYPE "Windows" +#endif + +#if defined(_M_IA64) +#define MACHINE_TYPE "ia64" +#elif defined(_M_IX86) +#define MACHINE_TYPE "ia32" +#elif defined(_M_ALPHA) +#define MACHINE_TYPE "axp" +#else +#define MACHINE_TYPE "unknown" /* Define to machine type name */ +#endif + +#if !(defined(_WIN64) || defined(WIN64)) +#ifndef _WIN32 +#define _WIN32 /* Compatible with old source */ +#endif +#ifndef __WIN32__ +#define __WIN32__ +#endif +#endif /* _WIN64 */ +#ifndef __WIN__ +#define __WIN__ /* To make it easier in VC++ */ +#endif + +#ifndef MAX_INDEXES +#define MAX_INDEXES 64 +#endif + +/* File and lock constants */ +#define O_SHARE 0x1000 /* Open file in sharing mode */ +#ifdef __BORLANDC__ +#define F_RDLCK LK_NBLCK /* read lock */ +#define F_WRLCK LK_NBRLCK /* write lock */ +#define F_UNLCK LK_UNLCK /* remove lock(s) */ +#else +#define F_RDLCK _LK_NBLCK /* read lock */ +#define F_WRLCK _LK_NBRLCK /* write lock */ +#define F_UNLCK _LK_UNLCK /* remove lock(s) */ +#endif + +#define F_EXCLUSIVE 1 /* We have only exclusive locking */ +#define F_TO_EOF (INT_MAX32/2) /* size for lock of all file */ +#define F_OK 0 /* parameter to access() */ +#define W_OK 2 + +#define S_IROTH S_IREAD /* for my_lib */ + +#ifdef __BORLANDC__ +#define FILE_BINARY O_BINARY /* my_fopen in binary mode */ +#define O_TEMPORARY 0 +#define O_SHORT_LIVED 0 +#define SH_DENYNO _SH_DENYNO +#else +#define O_BINARY _O_BINARY /* compability with older style names */ +#define FILE_BINARY _O_BINARY /* my_fopen in binary mode */ +#define O_TEMPORARY _O_TEMPORARY +#define O_SHORT_LIVED _O_SHORT_LIVED +#define SH_DENYNO _SH_DENYNO +#endif +#define NO_OPEN_3 /* For my_create() */ + +#define SIGQUIT SIGTERM /* No SIGQUIT */ + +#undef _REENTRANT /* Crashes something for win32 */ +#undef SAFE_MUTEX /* Can't be used on windows */ + +#if defined(_MSC_VER) && _MSC_VER >= 1310 +#define LL(A) A##ll +#define ULL(A) A##ull +#else +#define LL(A) ((__int64) A) +#define ULL(A) ((unsigned __int64) A) +#endif + +#define LONGLONG_MIN LL(0x8000000000000000) +#define LONGLONG_MAX LL(0x7FFFFFFFFFFFFFFF) +#define ULONGLONG_MAX ULL(0xFFFFFFFFFFFFFFFF) + +/* Type information */ + +#if !defined(HAVE_UINT) +#undef HAVE_UINT +#define HAVE_UINT +typedef unsigned short ushort; +typedef unsigned int uint; +#endif /* !defined(HAVE_UINT) */ + +typedef unsigned __int64 ulonglong; /* Microsofts 64 bit types */ +typedef __int64 longlong; +#ifndef HAVE_SIGSET_T +typedef int sigset_t; +#endif +#define longlong_defined +/* + off_t should not be __int64 because of conflicts in header files; + Use my_off_t or os_off_t instead +*/ +#ifndef HAVE_OFF_T +typedef long off_t; +#endif +typedef __int64 os_off_t; +#ifdef _WIN64 +typedef UINT_PTR rf_SetTimer; +#else +#ifndef HAVE_SIZE_T +typedef unsigned int size_t; +#endif +typedef uint rf_SetTimer; +#endif + +#define Socket_defined +#define my_socket SOCKET +#define SIGPIPE SIGINT +#define RETQSORTTYPE void +#define QSORT_TYPE_IS_VOID +#define RETSIGTYPE void +#define SOCKET_SIZE_TYPE int +#define my_socket_defined +#define byte_defined +#define HUGE_PTR +#define STDCALL __stdcall /* Used by libmysql.dll */ +#define isnan(X) _isnan(X) +#define finite(X) _finite(X) + +#ifndef MYSQL_CLIENT_NO_THREADS +#define THREAD +#endif +#define VOID_SIGHANDLER +#define SIZEOF_CHAR 1 +#define SIZEOF_INT 4 +#define SIZEOF_LONG 4 +#define SIZEOF_LONG_LONG 8 +#define SIZEOF_OFF_T 8 +#ifdef _WIN64 +#define SIZEOF_CHARP 8 +#else +#define SIZEOF_CHARP 4 +#endif +#define HAVE_BROKEN_NETINET_INCLUDES +#ifdef __NT__ +#define HAVE_NAMED_PIPE /* We can only create pipes on NT */ +#endif + +/* ERROR is defined in wingdi.h */ +#undef ERROR + +/* We need to close files to break connections on shutdown */ +#ifndef SIGNAL_WITH_VIO_CLOSE +#define SIGNAL_WITH_VIO_CLOSE +#endif + +/* All windows servers should support .sym files */ +#undef USE_SYMDIR +#define USE_SYMDIR + +/* If LOAD DATA LOCAL INFILE should be enabled by default */ +#define ENABLED_LOCAL_INFILE 1 + +/* If query profiling should be enabled by default */ +#define ENABLED_PROFILING 1 + +/* Convert some simple functions to Posix */ + +#define my_sigset(A,B) signal((A),(B)) +#define finite(A) _finite(A) +#define sleep(A) Sleep((A)*1000) +#define popen(A,B) _popen((A),(B)) +#define pclose(A) _pclose(A) + +#ifndef __BORLANDC__ +#define access(A,B) _access(A,B) +#endif + +#if !defined(__cplusplus) +#define inline __inline +#endif /* __cplusplus */ + +#ifdef _WIN64 +#define ulonglong2double(A) ((double) (ulonglong) (A)) +#define my_off_t2double(A) ((double) (my_off_t) (A)) + +#else +inline double ulonglong2double(ulonglong value) +{ + longlong nr=(longlong) value; + if (nr >= 0) + return (double) nr; + return (18446744073709551616.0 + (double) nr); +} +#define my_off_t2double(A) ulonglong2double(A) +#endif /* _WIN64 */ + +inline ulonglong double2ulonglong(double d) +{ + double t= d - (double) 0x8000000000000000ULL; + + if (t >= 0) + return ((ulonglong) t) + 0x8000000000000000ULL; + return (ulonglong) d; +} + +#if SIZEOF_OFF_T > 4 +#define lseek(A,B,C) _lseeki64((A),(longlong) (B),(C)) +#define tell(A) _telli64(A) +#endif + +#define STACK_DIRECTION -1 + +/* Difference between GetSystemTimeAsFileTime() and now() */ +#define OFFSET_TO_EPOCH ULL(116444736000000000) + +#define HAVE_PERROR +#define HAVE_VFPRINT +#define HAVE_RENAME /* Have rename() as function */ +#define HAVE_BINARY_STREAMS /* Have "b" flag in streams */ +#define HAVE_LONG_JMP /* Have long jump function */ +#define HAVE_LOCKING /* have locking() call */ +#define HAVE_ERRNO_AS_DEFINE /* errno is a define */ +#define HAVE_STDLIB /* everything is include in this file */ +#define HAVE_MEMCPY +#define HAVE_MEMMOVE +#define HAVE_GETCWD +#define HAVE_TELL +#define HAVE_TZNAME +#define HAVE_PUTENV +#define HAVE_SELECT +#define HAVE_SETLOCALE +#define HAVE_SOCKET /* Giangi */ +#define HAVE_FLOAT_H +#define HAVE_LIMITS_H +#define HAVE_STDDEF_H +#define NO_FCNTL_NONBLOCK /* No FCNTL */ +#define HAVE_ALLOCA +#define HAVE_STRPBRK +#define HAVE_STRSTR +#define HAVE_COMPRESS +#define HAVE_CREATESEMAPHORE +#define HAVE_ISNAN +#define HAVE_FINITE +#define HAVE_QUERY_CACHE +#define SPRINTF_RETURNS_INT +#define HAVE_SETFILEPOINTER +#define HAVE_VIO_READ_BUFF +#if defined(_MSC_VER) && _MSC_VER >= 1400 +/* strnlen() appeared in Studio 2005 */ +#define HAVE_STRNLEN +#endif +#define HAVE_WINSOCK2 + +#define strcasecmp stricmp +#define strncasecmp strnicmp + +#ifndef __NT__ +#undef FILE_SHARE_DELETE +#define FILE_SHARE_DELETE 0 /* Not implemented on Win 98/ME */ +#endif + +#ifdef NOT_USED +#define HAVE_SNPRINTF /* Gave link error */ +#define _snprintf snprintf +#endif + +#ifdef _MSC_VER +#define HAVE_LDIV /* The optimizer breaks in zortech for ldiv */ +#define HAVE_ANSI_INCLUDE +#define HAVE_SYS_UTIME_H +#define HAVE_STRTOUL +#endif +#define my_reinterpret_cast(A) reinterpret_cast +#define my_const_cast(A) const_cast + + +/* MYSQL OPTIONS */ + +#ifdef _CUSTOMCONFIG_ +#include +#else +#ifndef CMAKE_CONFIGD +#define DEFAULT_MYSQL_HOME "c:\\mysql" +#define MYSQL_DATADIR "c:\\mysql\\data" +#define PACKAGE "mysql" +#define DEFAULT_BASEDIR "C:\\" +#define SHAREDIR "share" +#define DEFAULT_CHARSET_HOME "C:/mysql/" +#endif +#endif +#ifndef DEFAULT_HOME_ENV +#define DEFAULT_HOME_ENV MYSQL_HOME +#endif +#ifndef DEFAULT_GROUP_SUFFIX_ENV +#define DEFAULT_GROUP_SUFFIX_ENV MYSQL_GROUP_SUFFIX +#endif + +/* File name handling */ + +#define FN_LIBCHAR '\\' +#define FN_ROOTDIR "\\" +#define FN_DEVCHAR ':' +#define FN_NETWORK_DRIVES /* Uses \\ to indicate network drives */ +#define FN_NO_CASE_SENCE /* Files are not case-sensitive */ +#define OS_FILE_LIMIT 2048 + +#define DO_NOT_REMOVE_THREAD_WRAPPERS +#define thread_safe_increment(V,L) InterlockedIncrement((long*) &(V)) +#define thread_safe_decrement(V,L) InterlockedDecrement((long*) &(V)) +/* The following is only used for statistics, so it should be good enough */ +#ifdef __NT__ /* This should also work on Win98 but .. */ +#define thread_safe_add(V,C,L) InterlockedExchangeAdd((long*) &(V),(C)) +#define thread_safe_sub(V,C,L) InterlockedExchangeAdd((long*) &(V),-(long) (C)) +#endif + +#define shared_memory_buffer_length 16000 +#define default_shared_memory_base_name "MYSQL" + +#define HAVE_SPATIAL 1 +#define HAVE_RTREE_KEYS 1 + +#define HAVE_OPENSSL 1 +#define HAVE_YASSL 1 + +#define COMMUNITY_SERVER 1 +#define ENABLED_PROFILING 1 + +/* + Our Windows binaries include all character sets which MySQL supports. + Any changes to the available character sets must also go into + config/ac-macros/character_sets.m4 +*/ + +#define MYSQL_DEFAULT_CHARSET_NAME "latin1" +#define MYSQL_DEFAULT_COLLATION_NAME "latin1_swedish_ci" + +#define USE_MB 1 +#define USE_MB_IDENT 1 +#define USE_STRCOLL 1 + +#define HAVE_CHARSET_armscii8 +#define HAVE_CHARSET_ascii +#define HAVE_CHARSET_big5 1 +#define HAVE_CHARSET_cp1250 1 +#define HAVE_CHARSET_cp1251 +#define HAVE_CHARSET_cp1256 +#define HAVE_CHARSET_cp1257 +#define HAVE_CHARSET_cp850 +#define HAVE_CHARSET_cp852 +#define HAVE_CHARSET_cp866 +#define HAVE_CHARSET_cp932 1 +#define HAVE_CHARSET_dec8 +#define HAVE_CHARSET_eucjpms 1 +#define HAVE_CHARSET_euckr 1 +#define HAVE_CHARSET_gb2312 1 +#define HAVE_CHARSET_gbk 1 +#define HAVE_CHARSET_geostd8 +#define HAVE_CHARSET_greek +#define HAVE_CHARSET_hebrew +#define HAVE_CHARSET_hp8 +#define HAVE_CHARSET_keybcs2 +#define HAVE_CHARSET_koi8r +#define HAVE_CHARSET_koi8u +#define HAVE_CHARSET_latin1 1 +#define HAVE_CHARSET_latin2 1 +#define HAVE_CHARSET_latin5 +#define HAVE_CHARSET_latin7 +#define HAVE_CHARSET_macce +#define HAVE_CHARSET_macroman +#define HAVE_CHARSET_sjis 1 +#define HAVE_CHARSET_swe7 +#define HAVE_CHARSET_tis620 1 +#define HAVE_CHARSET_ucs2 1 +#define HAVE_CHARSET_ujis 1 +#define HAVE_CHARSET_utf8 1 + +#define HAVE_UCA_COLLATIONS 1 +#define HAVE_BOOL 1 diff --git a/EQ2/source/depends/mysql-5.1.45-winx64/include/decimal.h b/EQ2/source/depends/mysql-5.1.45-winx64/include/decimal.h new file mode 100644 index 000000000..530ed9e17 --- /dev/null +++ b/EQ2/source/depends/mysql-5.1.45-winx64/include/decimal.h @@ -0,0 +1,107 @@ +/* Copyright (C) 2000 MySQL AB + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; version 2 of the License. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ + +#ifndef _decimal_h +#define _decimal_h + +typedef enum +{TRUNCATE=0, HALF_EVEN, HALF_UP, CEILING, FLOOR} + decimal_round_mode; +typedef int32 decimal_digit_t; + +typedef struct st_decimal_t { + int intg, frac, len; + my_bool sign; + decimal_digit_t *buf; +} decimal_t; + +int internal_str2dec(const char *from, decimal_t *to, char **end, + my_bool fixed); +int decimal2string(decimal_t *from, char *to, int *to_len, + int fixed_precision, int fixed_decimals, + char filler); +int decimal2ulonglong(decimal_t *from, ulonglong *to); +int ulonglong2decimal(ulonglong from, decimal_t *to); +int decimal2longlong(decimal_t *from, longlong *to); +int longlong2decimal(longlong from, decimal_t *to); +int decimal2double(decimal_t *from, double *to); +int double2decimal(double from, decimal_t *to); +int decimal_actual_fraction(decimal_t *from); +int decimal2bin(decimal_t *from, uchar *to, int precision, int scale); +int bin2decimal(const uchar *from, decimal_t *to, int precision, int scale); + +int decimal_size(int precision, int scale); +int decimal_bin_size(int precision, int scale); +int decimal_result_size(decimal_t *from1, decimal_t *from2, char op, + int param); + +int decimal_intg(decimal_t *from); +int decimal_add(decimal_t *from1, decimal_t *from2, decimal_t *to); +int decimal_sub(decimal_t *from1, decimal_t *from2, decimal_t *to); +int decimal_cmp(decimal_t *from1, decimal_t *from2); +int decimal_mul(decimal_t *from1, decimal_t *from2, decimal_t *to); +int decimal_div(decimal_t *from1, decimal_t *from2, decimal_t *to, + int scale_incr); +int decimal_mod(decimal_t *from1, decimal_t *from2, decimal_t *to); +int decimal_round(decimal_t *from, decimal_t *to, int new_scale, + decimal_round_mode mode); +int decimal_is_zero(decimal_t *from); +void max_decimal(int precision, int frac, decimal_t *to); + +#define string2decimal(A,B,C) internal_str2dec((A), (B), (C), 0) +#define string2decimal_fixed(A,B,C) internal_str2dec((A), (B), (C), 1) + +/* set a decimal_t to zero */ + +#define decimal_make_zero(dec) do { \ + (dec)->buf[0]=0; \ + (dec)->intg=1; \ + (dec)->frac=0; \ + (dec)->sign=0; \ + } while(0) + +/* + returns the length of the buffer to hold string representation + of the decimal (including decimal dot, possible sign and \0) +*/ + +#define decimal_string_size(dec) (((dec)->intg ? (dec)->intg : 1) + \ + (dec)->frac + ((dec)->frac > 0) + 2) + +/* negate a decimal */ +#define decimal_neg(dec) do { (dec)->sign^=1; } while(0) + +/* + conventions: + + decimal_smth() == 0 -- everything's ok + decimal_smth() <= 1 -- result is usable, but precision loss is possible + decimal_smth() <= 2 -- result can be unusable, most significant digits + could've been lost + decimal_smth() > 2 -- no result was generated +*/ + +#define E_DEC_OK 0 +#define E_DEC_TRUNCATED 1 +#define E_DEC_OVERFLOW 2 +#define E_DEC_DIV_ZERO 4 +#define E_DEC_BAD_NUM 8 +#define E_DEC_OOM 16 + +#define E_DEC_ERROR 31 +#define E_DEC_FATAL_ERROR 30 + +#endif + diff --git a/EQ2/source/depends/mysql-5.1.45-winx64/include/errmsg.h b/EQ2/source/depends/mysql-5.1.45-winx64/include/errmsg.h new file mode 100644 index 000000000..a6d8c770d --- /dev/null +++ b/EQ2/source/depends/mysql-5.1.45-winx64/include/errmsg.h @@ -0,0 +1,102 @@ +/* Copyright (C) 2000 MySQL AB + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; version 2 of the License. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ + +/* Error messages for MySQL clients */ +/* (Error messages for the daemon are in sql/share/errmsg.txt) */ + +#ifdef __cplusplus +extern "C" { +#endif +void init_client_errs(void); +void finish_client_errs(void); +extern const char *client_errors[]; /* Error messages */ +#ifdef __cplusplus +} +#endif + +#define CR_MIN_ERROR 2000 /* For easier client code */ +#define CR_MAX_ERROR 2999 +#if !defined(ER) +#define ER(X) client_errors[(X)-CR_MIN_ERROR] +#endif +#define CLIENT_ERRMAP 2 /* Errormap used by my_error() */ + +/* Do not add error numbers before CR_ERROR_FIRST. */ +/* If necessary to add lower numbers, change CR_ERROR_FIRST accordingly. */ +#define CR_ERROR_FIRST 2000 /*Copy first error nr.*/ +#define CR_UNKNOWN_ERROR 2000 +#define CR_SOCKET_CREATE_ERROR 2001 +#define CR_CONNECTION_ERROR 2002 +#define CR_CONN_HOST_ERROR 2003 +#define CR_IPSOCK_ERROR 2004 +#define CR_UNKNOWN_HOST 2005 +#define CR_SERVER_GONE_ERROR 2006 +#define CR_VERSION_ERROR 2007 +#define CR_OUT_OF_MEMORY 2008 +#define CR_WRONG_HOST_INFO 2009 +#define CR_LOCALHOST_CONNECTION 2010 +#define CR_TCP_CONNECTION 2011 +#define CR_SERVER_HANDSHAKE_ERR 2012 +#define CR_SERVER_LOST 2013 +#define CR_COMMANDS_OUT_OF_SYNC 2014 +#define CR_NAMEDPIPE_CONNECTION 2015 +#define CR_NAMEDPIPEWAIT_ERROR 2016 +#define CR_NAMEDPIPEOPEN_ERROR 2017 +#define CR_NAMEDPIPESETSTATE_ERROR 2018 +#define CR_CANT_READ_CHARSET 2019 +#define CR_NET_PACKET_TOO_LARGE 2020 +#define CR_EMBEDDED_CONNECTION 2021 +#define CR_PROBE_SLAVE_STATUS 2022 +#define CR_PROBE_SLAVE_HOSTS 2023 +#define CR_PROBE_SLAVE_CONNECT 2024 +#define CR_PROBE_MASTER_CONNECT 2025 +#define CR_SSL_CONNECTION_ERROR 2026 +#define CR_MALFORMED_PACKET 2027 +#define CR_WRONG_LICENSE 2028 + +/* new 4.1 error codes */ +#define CR_NULL_POINTER 2029 +#define CR_NO_PREPARE_STMT 2030 +#define CR_PARAMS_NOT_BOUND 2031 +#define CR_DATA_TRUNCATED 2032 +#define CR_NO_PARAMETERS_EXISTS 2033 +#define CR_INVALID_PARAMETER_NO 2034 +#define CR_INVALID_BUFFER_USE 2035 +#define CR_UNSUPPORTED_PARAM_TYPE 2036 + +#define CR_SHARED_MEMORY_CONNECTION 2037 +#define CR_SHARED_MEMORY_CONNECT_REQUEST_ERROR 2038 +#define CR_SHARED_MEMORY_CONNECT_ANSWER_ERROR 2039 +#define CR_SHARED_MEMORY_CONNECT_FILE_MAP_ERROR 2040 +#define CR_SHARED_MEMORY_CONNECT_MAP_ERROR 2041 +#define CR_SHARED_MEMORY_FILE_MAP_ERROR 2042 +#define CR_SHARED_MEMORY_MAP_ERROR 2043 +#define CR_SHARED_MEMORY_EVENT_ERROR 2044 +#define CR_SHARED_MEMORY_CONNECT_ABANDONED_ERROR 2045 +#define CR_SHARED_MEMORY_CONNECT_SET_ERROR 2046 +#define CR_CONN_UNKNOW_PROTOCOL 2047 +#define CR_INVALID_CONN_HANDLE 2048 +#define CR_SECURE_AUTH 2049 +#define CR_FETCH_CANCELED 2050 +#define CR_NO_DATA 2051 +#define CR_NO_STMT_METADATA 2052 +#define CR_NO_RESULT_SET 2053 +#define CR_NOT_IMPLEMENTED 2054 +#define CR_SERVER_LOST_EXTENDED 2055 +#define CR_STMT_CLOSED 2056 +#define CR_NEW_STMT_METADATA 2057 +#define CR_ERROR_LAST /*Copy last error nr:*/ 2057 +/* Add error numbers before CR_ERROR_LAST and change it accordingly. */ + diff --git a/EQ2/source/depends/mysql-5.1.45-winx64/include/keycache.h b/EQ2/source/depends/mysql-5.1.45-winx64/include/keycache.h new file mode 100644 index 000000000..a6005bae8 --- /dev/null +++ b/EQ2/source/depends/mysql-5.1.45-winx64/include/keycache.h @@ -0,0 +1,143 @@ +/* Copyright (C) 2003 MySQL AB + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; version 2 of the License. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ + +/* Key cache variable structures */ + +#ifndef _keycache_h +#define _keycache_h +C_MODE_START + +/* declare structures that is used by st_key_cache */ + +struct st_block_link; +typedef struct st_block_link BLOCK_LINK; +struct st_keycache_page; +typedef struct st_keycache_page KEYCACHE_PAGE; +struct st_hash_link; +typedef struct st_hash_link HASH_LINK; + +/* info about requests in a waiting queue */ +typedef struct st_keycache_wqueue +{ + struct st_my_thread_var *last_thread; /* circular list of waiting threads */ +} KEYCACHE_WQUEUE; + +#define CHANGED_BLOCKS_HASH 128 /* must be power of 2 */ + +/* + The key cache structure + It also contains read-only statistics parameters. +*/ + +typedef struct st_key_cache +{ + my_bool key_cache_inited; + my_bool in_resize; /* true during resize operation */ + my_bool resize_in_flush; /* true during flush of resize operation */ + my_bool can_be_used; /* usage of cache for read/write is allowed */ + size_t key_cache_mem_size; /* specified size of the cache memory */ + uint key_cache_block_size; /* size of the page buffer of a cache block */ + ulong min_warm_blocks; /* min number of warm blocks; */ + ulong age_threshold; /* age threshold for hot blocks */ + ulonglong keycache_time; /* total number of block link operations */ + uint hash_entries; /* max number of entries in the hash table */ + int hash_links; /* max number of hash links */ + int hash_links_used; /* number of hash links currently used */ + int disk_blocks; /* max number of blocks in the cache */ + ulong blocks_used; /* maximum number of concurrently used blocks */ + ulong blocks_unused; /* number of currently unused blocks */ + ulong blocks_changed; /* number of currently dirty blocks */ + ulong warm_blocks; /* number of blocks in warm sub-chain */ + ulong cnt_for_resize_op; /* counter to block resize operation */ + long blocks_available; /* number of blocks available in the LRU chain */ + HASH_LINK **hash_root; /* arr. of entries into hash table buckets */ + HASH_LINK *hash_link_root; /* memory for hash table links */ + HASH_LINK *free_hash_list; /* list of free hash links */ + BLOCK_LINK *free_block_list; /* list of free blocks */ + BLOCK_LINK *block_root; /* memory for block links */ + uchar HUGE_PTR *block_mem; /* memory for block buffers */ + BLOCK_LINK *used_last; /* ptr to the last block of the LRU chain */ + BLOCK_LINK *used_ins; /* ptr to the insertion block in LRU chain */ + pthread_mutex_t cache_lock; /* to lock access to the cache structure */ + KEYCACHE_WQUEUE resize_queue; /* threads waiting during resize operation */ + /* + Waiting for a zero resize count. Using a queue for symmetry though + only one thread can wait here. + */ + KEYCACHE_WQUEUE waiting_for_resize_cnt; + KEYCACHE_WQUEUE waiting_for_hash_link; /* waiting for a free hash link */ + KEYCACHE_WQUEUE waiting_for_block; /* requests waiting for a free block */ + BLOCK_LINK *changed_blocks[CHANGED_BLOCKS_HASH]; /* hash for dirty file bl.*/ + BLOCK_LINK *file_blocks[CHANGED_BLOCKS_HASH]; /* hash for other file bl.*/ + + /* + The following variables are and variables used to hold parameters for + initializing the key cache. + */ + + ulonglong param_buff_size; /* size the memory allocated for the cache */ + ulong param_block_size; /* size of the blocks in the key cache */ + ulong param_division_limit; /* min. percentage of warm blocks */ + ulong param_age_threshold; /* determines when hot block is downgraded */ + + /* Statistics variables. These are reset in reset_key_cache_counters(). */ + ulong global_blocks_changed; /* number of currently dirty blocks */ + ulonglong global_cache_w_requests;/* number of write requests (write hits) */ + ulonglong global_cache_write; /* number of writes from cache to files */ + ulonglong global_cache_r_requests;/* number of read requests (read hits) */ + ulonglong global_cache_read; /* number of reads from files to cache */ + + int blocks; /* max number of blocks in the cache */ + my_bool in_init; /* Set to 1 in MySQL during init/resize */ +} KEY_CACHE; + +/* The default key cache */ +extern KEY_CACHE dflt_key_cache_var, *dflt_key_cache; + +extern int init_key_cache(KEY_CACHE *keycache, uint key_cache_block_size, + size_t use_mem, uint division_limit, + uint age_threshold); +extern int resize_key_cache(KEY_CACHE *keycache, uint key_cache_block_size, + size_t use_mem, uint division_limit, + uint age_threshold); +extern void change_key_cache_param(KEY_CACHE *keycache, uint division_limit, + uint age_threshold); +extern uchar *key_cache_read(KEY_CACHE *keycache, + File file, my_off_t filepos, int level, + uchar *buff, uint length, + uint block_length,int return_buffer); +extern int key_cache_insert(KEY_CACHE *keycache, + File file, my_off_t filepos, int level, + uchar *buff, uint length); +extern int key_cache_write(KEY_CACHE *keycache, + File file, my_off_t filepos, int level, + uchar *buff, uint length, + uint block_length,int force_write); +extern int flush_key_blocks(KEY_CACHE *keycache, + int file, enum flush_type type); +extern void end_key_cache(KEY_CACHE *keycache, my_bool cleanup); + +/* Functions to handle multiple key caches */ +extern my_bool multi_keycache_init(void); +extern void multi_keycache_free(void); +extern KEY_CACHE *multi_key_cache_search(uchar *key, uint length); +extern my_bool multi_key_cache_set(const uchar *key, uint length, + KEY_CACHE *key_cache); +extern void multi_key_cache_change(KEY_CACHE *old_data, + KEY_CACHE *new_data); +extern int reset_key_cache_counters(const char *name, + KEY_CACHE *key_cache); +C_MODE_END +#endif /* _keycache_h */ diff --git a/EQ2/source/depends/mysql-5.1.45-winx64/include/libmysql.def b/EQ2/source/depends/mysql-5.1.45-winx64/include/libmysql.def new file mode 100644 index 000000000..81f86dc87 --- /dev/null +++ b/EQ2/source/depends/mysql-5.1.45-winx64/include/libmysql.def @@ -0,0 +1,153 @@ +LIBRARY LIBMYSQL +VERSION 6.0 +EXPORTS + _dig_vec_lower + _dig_vec_upper + bmove_upp + delete_dynamic + free_defaults + getopt_compare_strings + getopt_ull_limit_value + handle_options + init_dynamic_array + insert_dynamic + int2str + is_prefix + list_add + list_delete + load_defaults + my_end + my_getopt_print_errors + my_init + my_malloc + my_memdup + my_no_flags_free + my_path + mysql_get_parameters + my_print_help + my_print_variables + my_realloc + my_strdup + mysql_thread_end + mysql_thread_init + myodbc_remove_escape + mysql_affected_rows + mysql_autocommit + mysql_stmt_bind_param + mysql_stmt_bind_result + mysql_change_user + mysql_character_set_name + mysql_close + mysql_commit + mysql_data_seek + mysql_debug + mysql_dump_debug_info + mysql_eof + mysql_errno + mysql_error + mysql_escape_string + mysql_hex_string + mysql_stmt_execute + mysql_stmt_fetch + mysql_stmt_fetch_column + mysql_fetch_field + mysql_fetch_field_direct + mysql_fetch_fields + mysql_fetch_lengths + mysql_fetch_row + mysql_field_count + mysql_field_seek + mysql_field_tell + mysql_free_result + mysql_get_client_info + mysql_get_host_info + mysql_get_proto_info + mysql_get_server_info + mysql_get_client_version + mysql_get_ssl_cipher + mysql_info + mysql_init + mysql_insert_id + mysql_kill + mysql_set_server_option + mysql_list_dbs + mysql_list_fields + mysql_list_processes + mysql_list_tables + mysql_more_results + mysql_next_result + mysql_num_fields + mysql_num_rows + mysql_options + mysql_stmt_param_count + mysql_stmt_param_metadata + mysql_ping + mysql_stmt_result_metadata + mysql_query + mysql_read_query_result + mysql_real_connect + mysql_real_escape_string + mysql_real_query + mysql_refresh + mysql_rollback + mysql_row_seek + mysql_row_tell + mysql_select_db + mysql_stmt_send_long_data + mysql_send_query + mysql_shutdown + mysql_ssl_set + mysql_stat + mysql_stmt_affected_rows + mysql_stmt_close + mysql_stmt_reset + mysql_stmt_data_seek + mysql_stmt_errno + mysql_stmt_error + mysql_stmt_free_result + mysql_stmt_num_rows + mysql_stmt_row_seek + mysql_stmt_row_tell + mysql_stmt_store_result + mysql_store_result + mysql_thread_id + mysql_thread_safe + mysql_use_result + mysql_warning_count + mysql_stmt_sqlstate + mysql_sqlstate + mysql_get_server_version + set_dynamic + strcend + strcont + strdup_root + strfill + strinstr + strmake + strmov + strxmov + mysql_stmt_prepare + mysql_stmt_init + mysql_stmt_insert_id + mysql_stmt_attr_get + mysql_stmt_attr_set + mysql_stmt_field_count + client_errors + mysql_set_local_infile_default + mysql_set_local_infile_handler + mysql_disable_reads_from_master + mysql_disable_rpl_parse + mysql_enable_reads_from_master + mysql_enable_rpl_parse + mysql_master_query + mysql_rpl_parse_enabled + mysql_rpl_probe + mysql_rpl_query_type + mysql_slave_query + mysql_embedded + mysql_server_init + mysql_server_end + mysql_set_character_set + mysql_get_character_set_info + get_defaults_options + modify_defaults_file diff --git a/EQ2/source/depends/mysql-5.1.45-winx64/include/libmysqld.def b/EQ2/source/depends/mysql-5.1.45-winx64/include/libmysqld.def new file mode 100644 index 000000000..047cfe0fe --- /dev/null +++ b/EQ2/source/depends/mysql-5.1.45-winx64/include/libmysqld.def @@ -0,0 +1,110 @@ +LIBRARY LIBMYSQLD +DESCRIPTION 'MySQL 5.1 Embedded Server Library' +VERSION 5.1 +EXPORTS + mysql_thread_end + mysql_thread_init + myodbc_remove_escape + mysql_affected_rows + mysql_autocommit + mysql_change_user + mysql_character_set_name + mysql_close + mysql_commit + mysql_data_seek + mysql_debug + mysql_disable_rpl_parse + mysql_dump_debug_info + mysql_enable_rpl_parse + mysql_eof + mysql_errno + mysql_error + mysql_escape_string + mysql_hex_string + mysql_fetch_field + mysql_fetch_field_direct + mysql_fetch_fields + mysql_fetch_lengths + mysql_fetch_row + mysql_field_count + mysql_field_seek + mysql_field_tell + mysql_free_result + mysql_get_character_set_info + mysql_get_client_info + mysql_get_host_info + mysql_get_proto_info + mysql_get_server_info + mysql_get_client_version + mysql_get_ssl_cipher + mysql_info + mysql_init + mysql_insert_id + mysql_kill + mysql_set_server_option + mysql_list_dbs + mysql_list_fields + mysql_list_processes + mysql_list_tables + mysql_more_results + mysql_next_result + mysql_num_fields + mysql_num_rows + mysql_options + mysql_ping + mysql_query + mysql_read_query_result + mysql_real_connect + mysql_real_escape_string + mysql_real_query + mysql_refresh + mysql_rollback + mysql_row_seek + mysql_row_tell + mysql_rpl_parse_enabled + mysql_rpl_probe + mysql_select_db + mysql_send_query + mysql_shutdown + mysql_ssl_set + mysql_stat + mysql_store_result + mysql_sqlstate + mysql_thread_id + mysql_thread_safe + mysql_use_result + mysql_warning_count + mysql_server_end + mysql_server_init + get_tty_password + mysql_get_server_version + mysql_set_character_set + mysql_sqlstate + mysql_get_parameters + mysql_stmt_bind_param + mysql_stmt_bind_result + mysql_stmt_execute + mysql_stmt_fetch + mysql_stmt_fetch_column + mysql_stmt_param_count + mysql_stmt_param_metadata + mysql_stmt_result_metadata + mysql_stmt_send_long_data + mysql_stmt_affected_rows + mysql_stmt_close + mysql_stmt_reset + mysql_stmt_data_seek + mysql_stmt_errno + mysql_stmt_error + mysql_stmt_free_result + mysql_stmt_num_rows + mysql_stmt_row_seek + mysql_stmt_row_tell + mysql_stmt_store_result + mysql_stmt_sqlstate + mysql_stmt_prepare + mysql_stmt_init + mysql_stmt_insert_id + mysql_stmt_attr_get + mysql_stmt_attr_set + mysql_stmt_field_count diff --git a/EQ2/source/depends/mysql-5.1.45-winx64/include/m_ctype.h b/EQ2/source/depends/mysql-5.1.45-winx64/include/m_ctype.h new file mode 100644 index 000000000..451c8db54 --- /dev/null +++ b/EQ2/source/depends/mysql-5.1.45-winx64/include/m_ctype.h @@ -0,0 +1,549 @@ +/* Copyright (C) 2000 MySQL AB + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; version 2 of the License. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ + +/* + A better inplementation of the UNIX ctype(3) library. + Notes: my_global.h should be included before ctype.h +*/ + +#ifndef _m_ctype_h +#define _m_ctype_h + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +#define MY_CS_NAME_SIZE 32 +#define MY_CS_CTYPE_TABLE_SIZE 257 +#define MY_CS_TO_LOWER_TABLE_SIZE 256 +#define MY_CS_TO_UPPER_TABLE_SIZE 256 +#define MY_CS_SORT_ORDER_TABLE_SIZE 256 +#define MY_CS_TO_UNI_TABLE_SIZE 256 + +#define CHARSET_DIR "charsets/" + +#define my_wc_t ulong + +typedef struct unicase_info_st +{ + uint16 toupper; + uint16 tolower; + uint16 sort; +} MY_UNICASE_INFO; + + +extern MY_UNICASE_INFO *my_unicase_default[256]; +extern MY_UNICASE_INFO *my_unicase_turkish[256]; + +typedef struct uni_ctype_st +{ + uchar pctype; + uchar *ctype; +} MY_UNI_CTYPE; + +extern MY_UNI_CTYPE my_uni_ctype[256]; + +/* wm_wc and wc_mb return codes */ +#define MY_CS_ILSEQ 0 /* Wrong by sequence: wb_wc */ +#define MY_CS_ILUNI 0 /* Cannot encode Unicode to charset: wc_mb */ +#define MY_CS_TOOSMALL -101 /* Need at least one byte: wc_mb and mb_wc */ +#define MY_CS_TOOSMALL2 -102 /* Need at least two bytes: wc_mb and mb_wc */ +#define MY_CS_TOOSMALL3 -103 /* Need at least three bytes: wc_mb and mb_wc */ +/* These following three are currently not really used */ +#define MY_CS_TOOSMALL4 -104 /* Need at least 4 bytes: wc_mb and mb_wc */ +#define MY_CS_TOOSMALL5 -105 /* Need at least 5 bytes: wc_mb and mb_wc */ +#define MY_CS_TOOSMALL6 -106 /* Need at least 6 bytes: wc_mb and mb_wc */ +/* A helper macros for "need at least n bytes" */ +#define MY_CS_TOOSMALLN(n) (-100-(n)) + +#define MY_SEQ_INTTAIL 1 +#define MY_SEQ_SPACES 2 + + /* My charsets_list flags */ +#define MY_CS_COMPILED 1 /* compiled-in sets */ +#define MY_CS_CONFIG 2 /* sets that have a *.conf file */ +#define MY_CS_INDEX 4 /* sets listed in the Index file */ +#define MY_CS_LOADED 8 /* sets that are currently loaded */ +#define MY_CS_BINSORT 16 /* if binary sort order */ +#define MY_CS_PRIMARY 32 /* if primary collation */ +#define MY_CS_STRNXFRM 64 /* if strnxfrm is used for sort */ +#define MY_CS_UNICODE 128 /* is a charset is full unicode */ +#define MY_CS_READY 256 /* if a charset is initialized */ +#define MY_CS_AVAILABLE 512 /* If either compiled-in or loaded*/ +#define MY_CS_CSSORT 1024 /* if case sensitive sort order */ +#define MY_CS_HIDDEN 2048 /* don't display in SHOW */ +#define MY_CS_PUREASCII 4096 /* if a charset is pure ascii */ +#define MY_CHARSET_UNDEFINED 0 + +/* Character repertoire flags */ +#define MY_REPERTOIRE_ASCII 1 /* Pure ASCII U+0000..U+007F */ +#define MY_REPERTOIRE_EXTENDED 2 /* Extended characters: U+0080..U+FFFF */ +#define MY_REPERTOIRE_UNICODE30 3 /* ASCII | EXTENDED: U+0000..U+FFFF */ + + +typedef struct my_uni_idx_st +{ + uint16 from; + uint16 to; + uchar *tab; +} MY_UNI_IDX; + +typedef struct +{ + uint beg; + uint end; + uint mb_len; +} my_match_t; + +enum my_lex_states +{ + MY_LEX_START, MY_LEX_CHAR, MY_LEX_IDENT, + MY_LEX_IDENT_SEP, MY_LEX_IDENT_START, + MY_LEX_REAL, MY_LEX_HEX_NUMBER, MY_LEX_BIN_NUMBER, + MY_LEX_CMP_OP, MY_LEX_LONG_CMP_OP, MY_LEX_STRING, MY_LEX_COMMENT, MY_LEX_END, + MY_LEX_OPERATOR_OR_IDENT, MY_LEX_NUMBER_IDENT, MY_LEX_INT_OR_REAL, + MY_LEX_REAL_OR_POINT, MY_LEX_BOOL, MY_LEX_EOL, MY_LEX_ESCAPE, + MY_LEX_LONG_COMMENT, MY_LEX_END_LONG_COMMENT, MY_LEX_SEMICOLON, + MY_LEX_SET_VAR, MY_LEX_USER_END, MY_LEX_HOSTNAME, MY_LEX_SKIP, + MY_LEX_USER_VARIABLE_DELIMITER, MY_LEX_SYSTEM_VAR, + MY_LEX_IDENT_OR_KEYWORD, + MY_LEX_IDENT_OR_HEX, MY_LEX_IDENT_OR_BIN, MY_LEX_IDENT_OR_NCHAR, + MY_LEX_STRING_OR_DELIMITER +}; + +struct charset_info_st; + + +/* See strings/CHARSET_INFO.txt for information about this structure */ +typedef struct my_collation_handler_st +{ + my_bool (*init)(struct charset_info_st *, void *(*alloc)(size_t)); + /* Collation routines */ + int (*strnncoll)(struct charset_info_st *, + const uchar *, size_t, const uchar *, size_t, my_bool); + int (*strnncollsp)(struct charset_info_st *, + const uchar *, size_t, const uchar *, size_t, + my_bool diff_if_only_endspace_difference); + size_t (*strnxfrm)(struct charset_info_st *, + uchar *, size_t, const uchar *, size_t); + size_t (*strnxfrmlen)(struct charset_info_st *, size_t); + my_bool (*like_range)(struct charset_info_st *, + const char *s, size_t s_length, + pchar w_prefix, pchar w_one, pchar w_many, + size_t res_length, + char *min_str, char *max_str, + size_t *min_len, size_t *max_len); + int (*wildcmp)(struct charset_info_st *, + const char *str,const char *str_end, + const char *wildstr,const char *wildend, + int escape,int w_one, int w_many); + + int (*strcasecmp)(struct charset_info_st *, const char *, const char *); + + uint (*instr)(struct charset_info_st *, + const char *b, size_t b_length, + const char *s, size_t s_length, + my_match_t *match, uint nmatch); + + /* Hash calculation */ + void (*hash_sort)(struct charset_info_st *cs, const uchar *key, size_t len, + ulong *nr1, ulong *nr2); + my_bool (*propagate)(struct charset_info_st *cs, const uchar *str, size_t len); +} MY_COLLATION_HANDLER; + +extern MY_COLLATION_HANDLER my_collation_mb_bin_handler; +extern MY_COLLATION_HANDLER my_collation_8bit_bin_handler; +extern MY_COLLATION_HANDLER my_collation_8bit_simple_ci_handler; +extern MY_COLLATION_HANDLER my_collation_ucs2_uca_handler; + +/* Some typedef to make it easy for C++ to make function pointers */ +typedef int (*my_charset_conv_mb_wc)(struct charset_info_st *, my_wc_t *, + const uchar *, const uchar *); +typedef int (*my_charset_conv_wc_mb)(struct charset_info_st *, my_wc_t, + uchar *, uchar *); +typedef size_t (*my_charset_conv_case)(struct charset_info_st *, + char *, size_t, char *, size_t); + + +/* See strings/CHARSET_INFO.txt about information on this structure */ +typedef struct my_charset_handler_st +{ + my_bool (*init)(struct charset_info_st *, void *(*alloc)(size_t)); + /* Multibyte routines */ + uint (*ismbchar)(struct charset_info_st *, const char *, const char *); + uint (*mbcharlen)(struct charset_info_st *, uint c); + size_t (*numchars)(struct charset_info_st *, const char *b, const char *e); + size_t (*charpos)(struct charset_info_st *, const char *b, const char *e, + size_t pos); + size_t (*well_formed_len)(struct charset_info_st *, + const char *b,const char *e, + size_t nchars, int *error); + size_t (*lengthsp)(struct charset_info_st *, const char *ptr, size_t length); + size_t (*numcells)(struct charset_info_st *, const char *b, const char *e); + + /* Unicode conversion */ + my_charset_conv_mb_wc mb_wc; + my_charset_conv_wc_mb wc_mb; + + /* CTYPE scanner */ + int (*ctype)(struct charset_info_st *cs, int *ctype, + const uchar *s, const uchar *e); + + /* Functions for case and sort conversion */ + size_t (*caseup_str)(struct charset_info_st *, char *); + size_t (*casedn_str)(struct charset_info_st *, char *); + + my_charset_conv_case caseup; + my_charset_conv_case casedn; + + /* Charset dependant snprintf() */ + size_t (*snprintf)(struct charset_info_st *, char *to, size_t n, + const char *fmt, + ...) ATTRIBUTE_FORMAT_FPTR(printf, 4, 5); + size_t (*long10_to_str)(struct charset_info_st *, char *to, size_t n, + int radix, long int val); + size_t (*longlong10_to_str)(struct charset_info_st *, char *to, size_t n, + int radix, longlong val); + + void (*fill)(struct charset_info_st *, char *to, size_t len, int fill); + + /* String-to-number conversion routines */ + long (*strntol)(struct charset_info_st *, const char *s, size_t l, + int base, char **e, int *err); + ulong (*strntoul)(struct charset_info_st *, const char *s, size_t l, + int base, char **e, int *err); + longlong (*strntoll)(struct charset_info_st *, const char *s, size_t l, + int base, char **e, int *err); + ulonglong (*strntoull)(struct charset_info_st *, const char *s, size_t l, + int base, char **e, int *err); + double (*strntod)(struct charset_info_st *, char *s, size_t l, char **e, + int *err); + longlong (*strtoll10)(struct charset_info_st *cs, + const char *nptr, char **endptr, int *error); + ulonglong (*strntoull10rnd)(struct charset_info_st *cs, + const char *str, size_t length, + int unsigned_fl, + char **endptr, int *error); + size_t (*scan)(struct charset_info_st *, const char *b, const char *e, + int sq); +} MY_CHARSET_HANDLER; + +extern MY_CHARSET_HANDLER my_charset_8bit_handler; +extern MY_CHARSET_HANDLER my_charset_ucs2_handler; + + +/* See strings/CHARSET_INFO.txt about information on this structure */ +typedef struct charset_info_st +{ + uint number; + uint primary_number; + uint binary_number; + uint state; + const char *csname; + const char *name; + const char *comment; + const char *tailoring; + uchar *ctype; + uchar *to_lower; + uchar *to_upper; + uchar *sort_order; + uint16 *contractions; + uint16 **sort_order_big; + uint16 *tab_to_uni; + MY_UNI_IDX *tab_from_uni; + MY_UNICASE_INFO **caseinfo; + uchar *state_map; + uchar *ident_map; + uint strxfrm_multiply; + uchar caseup_multiply; + uchar casedn_multiply; + uint mbminlen; + uint mbmaxlen; + uint16 min_sort_char; + uint16 max_sort_char; /* For LIKE optimization */ + uchar pad_char; + my_bool escape_with_backslash_is_dangerous; + + MY_CHARSET_HANDLER *cset; + MY_COLLATION_HANDLER *coll; + +} CHARSET_INFO; +#define ILLEGAL_CHARSET_INFO_NUMBER (~0U) + + +extern MYSQL_PLUGIN_IMPORT CHARSET_INFO my_charset_bin; +extern CHARSET_INFO my_charset_big5_chinese_ci; +extern CHARSET_INFO my_charset_big5_bin; +extern CHARSET_INFO my_charset_cp932_japanese_ci; +extern CHARSET_INFO my_charset_cp932_bin; +extern CHARSET_INFO my_charset_eucjpms_japanese_ci; +extern CHARSET_INFO my_charset_eucjpms_bin; +extern CHARSET_INFO my_charset_euckr_korean_ci; +extern CHARSET_INFO my_charset_euckr_bin; +extern CHARSET_INFO my_charset_gb2312_chinese_ci; +extern CHARSET_INFO my_charset_gb2312_bin; +extern CHARSET_INFO my_charset_gbk_chinese_ci; +extern CHARSET_INFO my_charset_gbk_bin; +extern MYSQL_PLUGIN_IMPORT CHARSET_INFO my_charset_latin1; +extern CHARSET_INFO my_charset_latin1_german2_ci; +extern CHARSET_INFO my_charset_latin1_bin; +extern CHARSET_INFO my_charset_latin2_czech_ci; +extern CHARSET_INFO my_charset_sjis_japanese_ci; +extern CHARSET_INFO my_charset_sjis_bin; +extern CHARSET_INFO my_charset_tis620_thai_ci; +extern CHARSET_INFO my_charset_tis620_bin; +extern CHARSET_INFO my_charset_ucs2_general_ci; +extern CHARSET_INFO my_charset_ucs2_bin; +extern CHARSET_INFO my_charset_ucs2_unicode_ci; +extern CHARSET_INFO my_charset_ujis_japanese_ci; +extern CHARSET_INFO my_charset_ujis_bin; +extern CHARSET_INFO my_charset_utf8_general_ci; +extern CHARSET_INFO my_charset_utf8_unicode_ci; +extern CHARSET_INFO my_charset_utf8_bin; +extern CHARSET_INFO my_charset_cp1250_czech_ci; +extern MYSQL_PLUGIN_IMPORT CHARSET_INFO my_charset_filename; + +/* declarations for simple charsets */ +extern size_t my_strnxfrm_simple(CHARSET_INFO *, uchar *, size_t, + const uchar *, size_t); +size_t my_strnxfrmlen_simple(CHARSET_INFO *, size_t); +extern int my_strnncoll_simple(CHARSET_INFO *, const uchar *, size_t, + const uchar *, size_t, my_bool); + +extern int my_strnncollsp_simple(CHARSET_INFO *, const uchar *, size_t, + const uchar *, size_t, + my_bool diff_if_only_endspace_difference); + +extern void my_hash_sort_simple(CHARSET_INFO *cs, + const uchar *key, size_t len, + ulong *nr1, ulong *nr2); + +extern size_t my_lengthsp_8bit(CHARSET_INFO *cs, const char *ptr, size_t length); + +extern uint my_instr_simple(struct charset_info_st *, + const char *b, size_t b_length, + const char *s, size_t s_length, + my_match_t *match, uint nmatch); + + +/* Functions for 8bit */ +extern size_t my_caseup_str_8bit(CHARSET_INFO *, char *); +extern size_t my_casedn_str_8bit(CHARSET_INFO *, char *); +extern size_t my_caseup_8bit(CHARSET_INFO *, char *src, size_t srclen, + char *dst, size_t dstlen); +extern size_t my_casedn_8bit(CHARSET_INFO *, char *src, size_t srclen, + char *dst, size_t dstlen); + +extern int my_strcasecmp_8bit(CHARSET_INFO * cs, const char *, const char *); + +int my_mb_wc_8bit(CHARSET_INFO *cs,my_wc_t *wc, const uchar *s,const uchar *e); +int my_wc_mb_8bit(CHARSET_INFO *cs,my_wc_t wc, uchar *s, uchar *e); + +int my_mb_ctype_8bit(CHARSET_INFO *,int *, const uchar *,const uchar *); +int my_mb_ctype_mb(CHARSET_INFO *,int *, const uchar *,const uchar *); + +size_t my_scan_8bit(CHARSET_INFO *cs, const char *b, const char *e, int sq); + +size_t my_snprintf_8bit(struct charset_info_st *, char *to, size_t n, + const char *fmt, ...) + ATTRIBUTE_FORMAT(printf, 4, 5); + +long my_strntol_8bit(CHARSET_INFO *, const char *s, size_t l, int base, + char **e, int *err); +ulong my_strntoul_8bit(CHARSET_INFO *, const char *s, size_t l, int base, + char **e, int *err); +longlong my_strntoll_8bit(CHARSET_INFO *, const char *s, size_t l, int base, + char **e, int *err); +ulonglong my_strntoull_8bit(CHARSET_INFO *, const char *s, size_t l, int base, + char **e, int *err); +double my_strntod_8bit(CHARSET_INFO *, char *s, size_t l,char **e, + int *err); +size_t my_long10_to_str_8bit(CHARSET_INFO *, char *to, size_t l, int radix, + long int val); +size_t my_longlong10_to_str_8bit(CHARSET_INFO *, char *to, size_t l, int radix, + longlong val); + +longlong my_strtoll10_8bit(CHARSET_INFO *cs, + const char *nptr, char **endptr, int *error); +longlong my_strtoll10_ucs2(CHARSET_INFO *cs, + const char *nptr, char **endptr, int *error); + +ulonglong my_strntoull10rnd_8bit(CHARSET_INFO *cs, + const char *str, size_t length, int + unsigned_fl, char **endptr, int *error); +ulonglong my_strntoull10rnd_ucs2(CHARSET_INFO *cs, + const char *str, size_t length, + int unsigned_fl, char **endptr, int *error); + +void my_fill_8bit(CHARSET_INFO *cs, char* to, size_t l, int fill); + +my_bool my_like_range_simple(CHARSET_INFO *cs, + const char *ptr, size_t ptr_length, + pbool escape, pbool w_one, pbool w_many, + size_t res_length, + char *min_str, char *max_str, + size_t *min_length, size_t *max_length); + +my_bool my_like_range_mb(CHARSET_INFO *cs, + const char *ptr, size_t ptr_length, + pbool escape, pbool w_one, pbool w_many, + size_t res_length, + char *min_str, char *max_str, + size_t *min_length, size_t *max_length); + +my_bool my_like_range_ucs2(CHARSET_INFO *cs, + const char *ptr, size_t ptr_length, + pbool escape, pbool w_one, pbool w_many, + size_t res_length, + char *min_str, char *max_str, + size_t *min_length, size_t *max_length); + + +int my_wildcmp_8bit(CHARSET_INFO *, + const char *str,const char *str_end, + const char *wildstr,const char *wildend, + int escape, int w_one, int w_many); + +int my_wildcmp_bin(CHARSET_INFO *, + const char *str,const char *str_end, + const char *wildstr,const char *wildend, + int escape, int w_one, int w_many); + +size_t my_numchars_8bit(CHARSET_INFO *, const char *b, const char *e); +size_t my_numcells_8bit(CHARSET_INFO *, const char *b, const char *e); +size_t my_charpos_8bit(CHARSET_INFO *, const char *b, const char *e, size_t pos); +size_t my_well_formed_len_8bit(CHARSET_INFO *, const char *b, const char *e, + size_t pos, int *error); +uint my_mbcharlen_8bit(CHARSET_INFO *, uint c); + + +/* Functions for multibyte charsets */ +extern size_t my_caseup_str_mb(CHARSET_INFO *, char *); +extern size_t my_casedn_str_mb(CHARSET_INFO *, char *); +extern size_t my_caseup_mb(CHARSET_INFO *, char *src, size_t srclen, + char *dst, size_t dstlen); +extern size_t my_casedn_mb(CHARSET_INFO *, char *src, size_t srclen, + char *dst, size_t dstlen); +extern int my_strcasecmp_mb(CHARSET_INFO * cs,const char *, const char *); + +int my_wildcmp_mb(CHARSET_INFO *, + const char *str,const char *str_end, + const char *wildstr,const char *wildend, + int escape, int w_one, int w_many); +size_t my_numchars_mb(CHARSET_INFO *, const char *b, const char *e); +size_t my_numcells_mb(CHARSET_INFO *, const char *b, const char *e); +size_t my_charpos_mb(CHARSET_INFO *, const char *b, const char *e, size_t pos); +size_t my_well_formed_len_mb(CHARSET_INFO *, const char *b, const char *e, + size_t pos, int *error); +uint my_instr_mb(struct charset_info_st *, + const char *b, size_t b_length, + const char *s, size_t s_length, + my_match_t *match, uint nmatch); + +int my_wildcmp_unicode(CHARSET_INFO *cs, + const char *str, const char *str_end, + const char *wildstr, const char *wildend, + int escape, int w_one, int w_many, + MY_UNICASE_INFO **weights); + +extern my_bool my_parse_charset_xml(const char *bug, size_t len, + int (*add)(CHARSET_INFO *cs)); +extern char *my_strchr(CHARSET_INFO *cs, const char *str, const char *end, + pchar c); + +my_bool my_propagate_simple(CHARSET_INFO *cs, const uchar *str, size_t len); +my_bool my_propagate_complex(CHARSET_INFO *cs, const uchar *str, size_t len); + + +uint my_string_repertoire(CHARSET_INFO *cs, const char *str, ulong len); +my_bool my_charset_is_ascii_based(CHARSET_INFO *cs); +my_bool my_charset_is_8bit_pure_ascii(CHARSET_INFO *cs); +uint my_charset_repertoire(CHARSET_INFO *cs); + + +#define _MY_U 01 /* Upper case */ +#define _MY_L 02 /* Lower case */ +#define _MY_NMR 04 /* Numeral (digit) */ +#define _MY_SPC 010 /* Spacing character */ +#define _MY_PNT 020 /* Punctuation */ +#define _MY_CTR 040 /* Control character */ +#define _MY_B 0100 /* Blank */ +#define _MY_X 0200 /* heXadecimal digit */ + + +#define my_isascii(c) (!((c) & ~0177)) +#define my_toascii(c) ((c) & 0177) +#define my_tocntrl(c) ((c) & 31) +#define my_toprint(c) ((c) | 64) +#define my_toupper(s,c) (char) ((s)->to_upper[(uchar) (c)]) +#define my_tolower(s,c) (char) ((s)->to_lower[(uchar) (c)]) +#define my_isalpha(s, c) (((s)->ctype+1)[(uchar) (c)] & (_MY_U | _MY_L)) +#define my_isupper(s, c) (((s)->ctype+1)[(uchar) (c)] & _MY_U) +#define my_islower(s, c) (((s)->ctype+1)[(uchar) (c)] & _MY_L) +#define my_isdigit(s, c) (((s)->ctype+1)[(uchar) (c)] & _MY_NMR) +#define my_isxdigit(s, c) (((s)->ctype+1)[(uchar) (c)] & _MY_X) +#define my_isalnum(s, c) (((s)->ctype+1)[(uchar) (c)] & (_MY_U | _MY_L | _MY_NMR)) +#define my_isspace(s, c) (((s)->ctype+1)[(uchar) (c)] & _MY_SPC) +#define my_ispunct(s, c) (((s)->ctype+1)[(uchar) (c)] & _MY_PNT) +#define my_isprint(s, c) (((s)->ctype+1)[(uchar) (c)] & (_MY_PNT | _MY_U | _MY_L | _MY_NMR | _MY_B)) +#define my_isgraph(s, c) (((s)->ctype+1)[(uchar) (c)] & (_MY_PNT | _MY_U | _MY_L | _MY_NMR)) +#define my_iscntrl(s, c) (((s)->ctype+1)[(uchar) (c)] & _MY_CTR) + +/* Some macros that should be cleaned up a little */ +#define my_isvar(s,c) (my_isalnum(s,c) || (c) == '_') +#define my_isvar_start(s,c) (my_isalpha(s,c) || (c) == '_') + +#define my_binary_compare(s) ((s)->state & MY_CS_BINSORT) +#define use_strnxfrm(s) ((s)->state & MY_CS_STRNXFRM) +#define my_strnxfrm(s, a, b, c, d) ((s)->coll->strnxfrm((s), (a), (b), (c), (d))) +#define my_strnncoll(s, a, b, c, d) ((s)->coll->strnncoll((s), (a), (b), (c), (d), 0)) +#define my_like_range(s, a, b, c, d, e, f, g, h, i, j) \ + ((s)->coll->like_range((s), (a), (b), (c), (d), (e), (f), (g), (h), (i), (j))) +#define my_wildcmp(cs,s,se,w,we,e,o,m) ((cs)->coll->wildcmp((cs),(s),(se),(w),(we),(e),(o),(m))) +#define my_strcasecmp(s, a, b) ((s)->coll->strcasecmp((s), (a), (b))) +#define my_charpos(cs, b, e, num) (cs)->cset->charpos((cs), (const char*) (b), (const char *)(e), (num)) + + +#define use_mb(s) ((s)->cset->ismbchar != NULL) +#define my_ismbchar(s, a, b) ((s)->cset->ismbchar((s), (a), (b))) +#ifdef USE_MB +#define my_mbcharlen(s, a) ((s)->cset->mbcharlen((s),(a))) +#else +#define my_mbcharlen(s, a) 1 +#endif + +#define my_caseup_str(s, a) ((s)->cset->caseup_str((s), (a))) +#define my_casedn_str(s, a) ((s)->cset->casedn_str((s), (a))) +#define my_strntol(s, a, b, c, d, e) ((s)->cset->strntol((s),(a),(b),(c),(d),(e))) +#define my_strntoul(s, a, b, c, d, e) ((s)->cset->strntoul((s),(a),(b),(c),(d),(e))) +#define my_strntoll(s, a, b, c, d, e) ((s)->cset->strntoll((s),(a),(b),(c),(d),(e))) +#define my_strntoull(s, a, b, c,d, e) ((s)->cset->strntoull((s),(a),(b),(c),(d),(e))) +#define my_strntod(s, a, b, c, d) ((s)->cset->strntod((s),(a),(b),(c),(d))) + + +/* XXX: still need to take care of this one */ +#ifdef MY_CHARSET_TIS620 +#error The TIS620 charset is broken at the moment. Tell tim to fix it. +#define USE_TIS620 +#include "t_ctype.h" +#endif + +#ifdef __cplusplus +} +#endif + +#endif /* _m_ctype_h */ diff --git a/EQ2/source/depends/mysql-5.1.45-winx64/include/m_string.h b/EQ2/source/depends/mysql-5.1.45-winx64/include/m_string.h new file mode 100644 index 000000000..a25675f26 --- /dev/null +++ b/EQ2/source/depends/mysql-5.1.45-winx64/include/m_string.h @@ -0,0 +1,266 @@ +/* Copyright (C) 2000 MySQL AB + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; version 2 of the License. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ + +/* There may be prolems include all of theese. Try to test in + configure with ones are needed? */ + +/* This is needed for the definitions of strchr... on solaris */ + +#ifndef _m_string_h +#define _m_string_h +#ifndef __USE_GNU +#define __USE_GNU /* We want to use stpcpy */ +#endif +#if defined(HAVE_STRINGS_H) +#include +#endif +#if defined(HAVE_STRING_H) +#include +#endif + +/* need by my_vsnprintf */ +#include + +#ifdef _AIX +#undef HAVE_BCMP +#endif + +/* This is needed for the definitions of bzero... on solaris */ +#if defined(HAVE_STRINGS_H) +#include +#endif + +/* This is needed for the definitions of memcpy... on solaris */ +#if defined(HAVE_MEMORY_H) && !defined(__cplusplus) +#include +#endif + +#if !defined(HAVE_MEMCPY) && !defined(HAVE_MEMMOVE) +# define memcpy(d, s, n) bcopy ((s), (d), (n)) +# define memset(A,C,B) bfill((A),(B),(C)) +# define memmove(d, s, n) bmove ((d), (s), (n)) +#elif defined(HAVE_MEMMOVE) +# define bmove(d, s, n) memmove((d), (s), (n)) +#else +# define memmove(d, s, n) bmove((d), (s), (n)) /* our bmove */ +#endif + +/* Unixware 7 */ +#if !defined(HAVE_BFILL) +# define bfill(A,B,C) memset((A),(C),(B)) +# define bmove_align(A,B,C) memcpy((A),(B),(C)) +#endif + +#if !defined(HAVE_BCMP) +# define bcopy(s, d, n) memcpy((d), (s), (n)) +# define bcmp(A,B,C) memcmp((A),(B),(C)) +# define bzero(A,B) memset((A),0,(B)) +# define bmove_align(A,B,C) memcpy((A),(B),(C)) +#endif + +#if defined(__cplusplus) +extern "C" { +#endif + +/* + my_str_malloc() and my_str_free() are assigned to implementations in + strings/alloc.c, but can be overridden in the calling program. + */ +extern void *(*my_str_malloc)(size_t); +extern void (*my_str_free)(void *); + +#if defined(HAVE_STPCPY) +#define strmov(A,B) stpcpy((A),(B)) +#ifndef stpcpy +extern char *stpcpy(char *, const char *); /* For AIX with gcc 2.95.3 */ +#endif +#endif + +/* Declared in int2str() */ +extern char NEAR _dig_vec_upper[]; +extern char NEAR _dig_vec_lower[]; + +/* Defined in strtod.c */ +extern const double log_10[309]; + +#ifndef strmov +#define strmov_overlapp(A,B) strmov(A,B) +#define strmake_overlapp(A,B,C) strmake(A,B,C) +#endif + +#ifdef BAD_MEMCPY /* Problem with gcc on Alpha */ +#define memcpy_fixed(A,B,C) bmove((A),(B),(C)) +#else +#define memcpy_fixed(A,B,C) memcpy((A),(B),(C)) +#endif + +#if (!defined(USE_BMOVE512) || defined(HAVE_purify)) && !defined(bmove512) +#define bmove512(A,B,C) memcpy(A,B,C) +#endif + + /* Prototypes for string functions */ + +#if !defined(bfill) && !defined(HAVE_BFILL) +extern void bfill(uchar *dst,size_t len,pchar fill); +#endif + +#if !defined(bzero) && !defined(HAVE_BZERO) +extern void bzero(uchar * dst,size_t len); +#endif + +#if !defined(bcmp) && !defined(HAVE_BCMP) +extern size_t bcmp(const uchar *s1,const uchar *s2,size_t len); +#endif +#ifdef HAVE_purify +extern size_t my_bcmp(const uchar *s1,const uchar *s2,size_t len); +#undef bcmp +#define bcmp(A,B,C) my_bcmp((A),(B),(C)) +#define bzero_if_purify(A,B) bzero(A,B) +#else +#define bzero_if_purify(A,B) +#endif /* HAVE_purify */ + +#ifndef bmove512 +extern void bmove512(uchar *dst,const uchar *src,size_t len); +#endif + +#if !defined(HAVE_BMOVE) && !defined(bmove) +extern void bmove(uuchar *dst, const uchar *src,size_t len); +#endif + +extern void bmove_upp(uchar *dst,const uchar *src,size_t len); +extern void bchange(uchar *dst,size_t old_len,const uchar *src, + size_t new_len,size_t tot_len); +extern void strappend(char *s,size_t len,pchar fill); +extern char *strend(const char *s); +extern char *strcend(const char *, pchar); +extern char *strfield(char *src,int fields,int chars,int blanks, + int tabch); +extern char *strfill(char * s,size_t len,pchar fill); +extern size_t strinstr(const char *str,const char *search); +extern size_t r_strinstr(const char *str, size_t from, const char *search); +extern char *strkey(char *dst,char *head,char *tail,char *flags); +extern char *strmake(char *dst,const char *src,size_t length); + +#ifndef strmov +extern char *strmov(char *dst,const char *src); +#else +extern char *strmov_overlapp(char *dst,const char *src); +#endif +extern char *strnmov(char *dst,const char *src,size_t n); +extern char *strsuff(const char *src,const char *suffix); +extern char *strcont(const char *src,const char *set); +extern char *strxcat _VARARGS((char *dst,const char *src, ...)); +extern char *strxmov _VARARGS((char *dst,const char *src, ...)); +extern char *strxcpy _VARARGS((char *dst,const char *src, ...)); +extern char *strxncat _VARARGS((char *dst,size_t len, const char *src, ...)); +extern char *strxnmov _VARARGS((char *dst,size_t len, const char *src, ...)); +extern char *strxncpy _VARARGS((char *dst,size_t len, const char *src, ...)); + +/* Prototypes of normal stringfunctions (with may ours) */ + +#ifdef WANT_STRING_PROTOTYPES +extern char *strcat(char *, const char *); +extern char *strchr(const char *, pchar); +extern char *strrchr(const char *, pchar); +extern char *strcpy(char *, const char *); +extern int strcmp(const char *, const char *); +#ifndef __GNUC__ +extern size_t strlen(const char *); +#endif +#endif +#ifndef HAVE_STRNLEN +extern size_t strnlen(const char *s, size_t n); +#endif + +#if !defined(__cplusplus) +#ifndef HAVE_STRPBRK +extern char *strpbrk(const char *, const char *); +#endif +#ifndef HAVE_STRSTR +extern char *strstr(const char *, const char *); +#endif +#endif +extern int is_prefix(const char *, const char *); + +/* Conversion routines */ +double my_strtod(const char *str, char **end, int *error); +double my_atof(const char *nptr); + +extern char *llstr(longlong value,char *buff); +extern char *ullstr(longlong value,char *buff); +#ifndef HAVE_STRTOUL +extern long strtol(const char *str, char **ptr, int base); +extern ulong strtoul(const char *str, char **ptr, int base); +#endif + +extern char *int2str(long val, char *dst, int radix, int upcase); +extern char *int10_to_str(long val,char *dst,int radix); +extern char *str2int(const char *src,int radix,long lower,long upper, + long *val); +longlong my_strtoll10(const char *nptr, char **endptr, int *error); +#if SIZEOF_LONG == SIZEOF_LONG_LONG +#define longlong2str(A,B,C) int2str((A),(B),(C),1) +#define longlong10_to_str(A,B,C) int10_to_str((A),(B),(C)) +#undef strtoll +#define strtoll(A,B,C) strtol((A),(B),(C)) +#define strtoull(A,B,C) strtoul((A),(B),(C)) +#ifndef HAVE_STRTOULL +#define HAVE_STRTOULL +#endif +#ifndef HAVE_STRTOLL +#define HAVE_STRTOLL +#endif +#else +#ifdef HAVE_LONG_LONG +extern char *longlong2str(longlong val,char *dst,int radix); +extern char *longlong10_to_str(longlong val,char *dst,int radix); +#if (!defined(HAVE_STRTOULL) || defined(NO_STRTOLL_PROTO)) +extern longlong strtoll(const char *str, char **ptr, int base); +extern ulonglong strtoull(const char *str, char **ptr, int base); +#endif +#endif +#endif + +/* my_vsnprintf.c */ + +extern size_t my_vsnprintf(char *str, size_t n, + const char *format, va_list ap); +extern size_t my_snprintf(char *to, size_t n, const char *fmt, ...) + ATTRIBUTE_FORMAT(printf, 3, 4); + +#if defined(__cplusplus) +} +#endif + +/* + LEX_STRING -- a pair of a C-string and its length. +*/ + +#ifndef _my_plugin_h +/* This definition must match the one given in mysql/plugin.h */ +struct st_mysql_lex_string +{ + char *str; + size_t length; +}; +#endif +typedef struct st_mysql_lex_string LEX_STRING; + +#define STRING_WITH_LEN(X) (X), ((size_t) (sizeof(X) - 1)) +#define USTRING_WITH_LEN(X) ((uchar*) X), ((size_t) (sizeof(X) - 1)) +#define C_STRING_WITH_LEN(X) ((char *) (X)), ((size_t) (sizeof(X) - 1)) + +#endif diff --git a/EQ2/source/depends/mysql-5.1.45-winx64/include/my_alloc.h b/EQ2/source/depends/mysql-5.1.45-winx64/include/my_alloc.h new file mode 100644 index 000000000..93b7438a1 --- /dev/null +++ b/EQ2/source/depends/mysql-5.1.45-winx64/include/my_alloc.h @@ -0,0 +1,51 @@ +/* Copyright (C) 2000 MySQL AB + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; version 2 of the License. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ + +/* + Data structures for mysys/my_alloc.c (root memory allocator) +*/ + +#ifndef _my_alloc_h +#define _my_alloc_h + +#define ALLOC_MAX_BLOCK_TO_DROP 4096 +#define ALLOC_MAX_BLOCK_USAGE_BEFORE_DROP 10 + +typedef struct st_used_mem +{ /* struct for once_alloc (block) */ + struct st_used_mem *next; /* Next block in use */ + unsigned int left; /* memory left in block */ + unsigned int size; /* size of block */ +} USED_MEM; + + +typedef struct st_mem_root +{ + USED_MEM *free; /* blocks with free memory in it */ + USED_MEM *used; /* blocks almost without free memory */ + USED_MEM *pre_alloc; /* preallocated block */ + /* if block have less memory it will be put in 'used' list */ + size_t min_malloc; + size_t block_size; /* initial block size */ + unsigned int block_num; /* allocated blocks counter */ + /* + first free block in queue test counter (if it exceed + MAX_BLOCK_USAGE_BEFORE_DROP block will be dropped in 'used' list) + */ + unsigned int first_block_usage; + + void (*error_handler)(void); +} MEM_ROOT; +#endif diff --git a/EQ2/source/depends/mysql-5.1.45-winx64/include/my_attribute.h b/EQ2/source/depends/mysql-5.1.45-winx64/include/my_attribute.h new file mode 100644 index 000000000..8309d85f2 --- /dev/null +++ b/EQ2/source/depends/mysql-5.1.45-winx64/include/my_attribute.h @@ -0,0 +1,63 @@ +/* Copyright (C) 2000-2003 MySQL AB + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; version 2 of the License. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ + +/* + Helper macros used for setting different __attributes__ + on functions in a portable fashion +*/ + +#ifndef _my_attribute_h +#define _my_attribute_h + +/* + Disable __attribute__() on gcc < 2.7, g++ < 3.4, and non-gcc compilers. + Some forms of __attribute__ are actually supported in earlier versions of + g++, but we just disable them all because we only use them to generate + compilation warnings. +*/ +#ifndef __attribute__ +# if !defined(__GNUC__) +# define __attribute__(A) +# elif GCC_VERSION < 2008 +# define __attribute__(A) +# elif defined(__cplusplus) && GCC_VERSION < 3004 +# define __attribute__(A) +# endif +#endif + +/* + __attribute__((format(...))) is only supported in gcc >= 2.8 and g++ >= 3.4 + But that's already covered by the __attribute__ tests above, so this is + just a convenience macro. +*/ +#ifndef ATTRIBUTE_FORMAT +# define ATTRIBUTE_FORMAT(style, m, n) __attribute__((format(style, m, n))) +#endif + +/* + + __attribute__((format(...))) on a function pointer is not supported + until gcc 3.1 +*/ +#ifndef ATTRIBUTE_FORMAT_FPTR +# if (GCC_VERSION >= 3001) +# define ATTRIBUTE_FORMAT_FPTR(style, m, n) ATTRIBUTE_FORMAT(style, m, n) +# else +# define ATTRIBUTE_FORMAT_FPTR(style, m, n) +# endif /* GNUC >= 3.1 */ +#endif + + +#endif diff --git a/EQ2/source/depends/mysql-5.1.45-winx64/include/my_dbug.h b/EQ2/source/depends/mysql-5.1.45-winx64/include/my_dbug.h new file mode 100644 index 000000000..0ba72b221 --- /dev/null +++ b/EQ2/source/depends/mysql-5.1.45-winx64/include/my_dbug.h @@ -0,0 +1,159 @@ +/* Copyright (C) 2000 MySQL AB + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; version 2 of the License. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ + +#ifndef _dbug_h +#define _dbug_h + +#if defined(__cplusplus) && !defined(DBUG_OFF) +class Dbug_violation_helper +{ +public: + inline Dbug_violation_helper() : + _entered(TRUE) + { } + + inline ~Dbug_violation_helper() + { + assert(!_entered); + } + + inline void leave() + { + _entered= FALSE; + } + +private: + bool _entered; +}; +#endif /* C++ */ + +#ifdef __cplusplus +extern "C" { +#endif +#if !defined(DBUG_OFF) && !defined(_lint) +struct _db_code_state_; +extern int _db_keyword_(struct _db_code_state_ *cs, const char *keyword); +extern int _db_strict_keyword_(const char *keyword); +extern int _db_explain_(struct _db_code_state_ *cs, char *buf, size_t len); +extern int _db_explain_init_(char *buf, size_t len); +extern void _db_setjmp_(void); +extern void _db_longjmp_(void); +extern void _db_process_(const char *name); +extern void _db_push_(const char *control); +extern void _db_pop_(void); +extern void _db_set_(struct _db_code_state_ *cs, const char *control); +extern void _db_set_init_(const char *control); +extern void _db_enter_(const char *_func_,const char *_file_,uint _line_, + const char **_sfunc_,const char **_sfile_, + uint *_slevel_, char ***); +extern void _db_return_(uint _line_,const char **_sfunc_,const char **_sfile_, + uint *_slevel_); +extern void _db_pargs_(uint _line_,const char *keyword); +extern void _db_doprnt_ _VARARGS((const char *format,...)) + ATTRIBUTE_FORMAT(printf, 1, 2); +extern void _db_dump_(uint _line_,const char *keyword, + const unsigned char *memory, size_t length); +extern void _db_end_(void); +extern void _db_lock_file_(void); +extern void _db_unlock_file_(void); +extern FILE *_db_fp_(void); + +#ifdef __cplusplus + +#define DBUG_ENTER(a) \ + const char *_db_func_, *_db_file_; \ + uint _db_level_; \ + char **_db_framep_; \ + Dbug_violation_helper dbug_violation_helper; \ + _db_enter_ (a, __FILE__, __LINE__, &_db_func_, &_db_file_, \ + &_db_level_, &_db_framep_) +#define DBUG_VIOLATION_HELPER_LEAVE dbug_violation_helper.leave() + +#else /* C */ + +#define DBUG_ENTER(a) \ + const char *_db_func_, *_db_file_; \ + uint _db_level_; \ + char **_db_framep_; \ + _db_enter_ (a, __FILE__, __LINE__, &_db_func_, &_db_file_, \ + &_db_level_, &_db_framep_) +#define DBUG_VIOLATION_HELPER_LEAVE do { } while(0) + +#endif /* C++ */ + +#define DBUG_LEAVE \ + DBUG_VIOLATION_HELPER_LEAVE; \ + _db_return_ (__LINE__, &_db_func_, &_db_file_, &_db_level_) +#define DBUG_RETURN(a1) do {DBUG_LEAVE; return(a1);} while(0) +#define DBUG_VOID_RETURN do {DBUG_LEAVE; return;} while(0) +#define DBUG_EXECUTE(keyword,a1) \ + do {if (_db_keyword_(0, (keyword))) { a1 }} while(0) +#define DBUG_EXECUTE_IF(keyword,a1) \ + do {if (_db_strict_keyword_ (keyword)) { a1 } } while(0) +#define DBUG_EVALUATE(keyword,a1,a2) \ + (_db_keyword_(0,(keyword)) ? (a1) : (a2)) +#define DBUG_EVALUATE_IF(keyword,a1,a2) \ + (_db_strict_keyword_((keyword)) ? (a1) : (a2)) +#define DBUG_PRINT(keyword,arglist) \ + do {_db_pargs_(__LINE__,keyword); _db_doprnt_ arglist;} while(0) +#define DBUG_PUSH(a1) _db_push_ (a1) +#define DBUG_POP() _db_pop_ () +#define DBUG_SET(a1) _db_set_ (0, (a1)) +#define DBUG_SET_INITIAL(a1) _db_set_init_ (a1) +#define DBUG_PROCESS(a1) _db_process_(a1) +#define DBUG_FILE _db_fp_() +#define DBUG_SETJMP(a1) (_db_setjmp_ (), setjmp (a1)) +#define DBUG_LONGJMP(a1,a2) (_db_longjmp_ (), longjmp (a1, a2)) +#define DBUG_DUMP(keyword,a1,a2) _db_dump_(__LINE__,keyword,a1,a2) +#define DBUG_END() _db_end_ () +#define DBUG_LOCK_FILE _db_lock_file_() +#define DBUG_UNLOCK_FILE _db_unlock_file_() +#define DBUG_ASSERT(A) assert(A) +#define DBUG_EXPLAIN(buf,len) _db_explain_(0, (buf),(len)) +#define DBUG_EXPLAIN_INITIAL(buf,len) _db_explain_init_((buf),(len)) +#define IF_DBUG(A) A +#else /* No debugger */ + +#define DBUG_ENTER(a1) +#define DBUG_LEAVE +#define DBUG_VIOLATION_HELPER_LEAVE +#define DBUG_RETURN(a1) do { return(a1); } while(0) +#define DBUG_VOID_RETURN do { return; } while(0) +#define DBUG_EXECUTE(keyword,a1) do { } while(0) +#define DBUG_EXECUTE_IF(keyword,a1) do { } while(0) +#define DBUG_EVALUATE(keyword,a1,a2) (a2) +#define DBUG_EVALUATE_IF(keyword,a1,a2) (a2) +#define DBUG_PRINT(keyword,arglist) do { } while(0) +#define DBUG_PUSH(a1) +#define DBUG_SET(a1) do { } while(0) +#define DBUG_SET_INITIAL(a1) do { } while(0) +#define DBUG_POP() +#define DBUG_PROCESS(a1) +#define DBUG_SETJMP(a1) setjmp(a1) +#define DBUG_LONGJMP(a1) longjmp(a1) +#define DBUG_DUMP(keyword,a1,a2) do { } while(0) +#define DBUG_END() +#define DBUG_ASSERT(A) do { } while(0) +#define DBUG_LOCK_FILE +#define DBUG_FILE (stderr) +#define DBUG_UNLOCK_FILE +#define DBUG_EXPLAIN(buf,len) +#define DBUG_EXPLAIN_INITIAL(buf,len) +#define IF_DBUG(A) +#endif +#ifdef __cplusplus +} +#endif +#endif diff --git a/EQ2/source/depends/mysql-5.1.45-winx64/include/my_dir.h b/EQ2/source/depends/mysql-5.1.45-winx64/include/my_dir.h new file mode 100644 index 000000000..06509a3af --- /dev/null +++ b/EQ2/source/depends/mysql-5.1.45-winx64/include/my_dir.h @@ -0,0 +1,105 @@ +/* Copyright (C) 2000 MySQL AB + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; version 2 of the License. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ + +#ifndef _my_dir_h +#define _my_dir_h +#ifdef __cplusplus +extern "C" { +#endif + +#ifndef MY_DIR_H +#define MY_DIR_H + +#include + + /* Defines for my_dir and my_stat */ + +#define MY_S_IFMT S_IFMT /* type of file */ +#define MY_S_IFDIR S_IFDIR /* directory */ +#define MY_S_IFCHR S_IFCHR /* character special */ +#define MY_S_IFBLK S_IFBLK /* block special */ +#define MY_S_IFREG S_IFREG /* regular */ +#define MY_S_IFIFO S_IFIFO /* fifo */ +#define MY_S_ISUID S_ISUID /* set user id on execution */ +#define MY_S_ISGID S_ISGID /* set group id on execution */ +#define MY_S_ISVTX S_ISVTX /* save swapped text even after use */ +#define MY_S_IREAD S_IREAD /* read permission, owner */ +#define MY_S_IWRITE S_IWRITE /* write permission, owner */ +#define MY_S_IEXEC S_IEXEC /* execute/search permission, owner */ + +#define MY_S_ISDIR(m) (((m) & MY_S_IFMT) == MY_S_IFDIR) +#define MY_S_ISCHR(m) (((m) & MY_S_IFMT) == MY_S_IFCHR) +#define MY_S_ISBLK(m) (((m) & MY_S_IFMT) == MY_S_IFBLK) +#define MY_S_ISREG(m) (((m) & MY_S_IFMT) == MY_S_IFREG) +#define MY_S_ISFIFO(m) (((m) & MY_S_IFMT) == MY_S_IFIFO) + +#define MY_DONT_SORT 512 /* my_lib; Don't sort files */ +#define MY_WANT_STAT 1024 /* my_lib; stat files */ + + /* typedefs for my_dir & my_stat */ + +#ifdef USE_MY_STAT_STRUCT + +typedef struct my_stat +{ + dev_t st_dev; /* major & minor device numbers */ + ino_t st_ino; /* inode number */ + ushort st_mode; /* file permissons (& suid sgid .. bits) */ + short st_nlink; /* number of links to file */ + ushort st_uid; /* user id */ + ushort st_gid; /* group id */ + dev_t st_rdev; /* more major & minor device numbers (???) */ + off_t st_size; /* size of file */ + time_t st_atime; /* time for last read */ + time_t st_mtime; /* time for last contens modify */ + time_t st_ctime; /* time for last inode or contents modify */ +} MY_STAT; + +#else + +#define MY_STAT struct stat /* Orginal struct have what we need */ + +#endif /* USE_MY_STAT_STRUCT */ + +/* Struct describing one file returned from my_dir */ +typedef struct fileinfo +{ + char *name; + MY_STAT *mystat; +} FILEINFO; + +typedef struct st_my_dir /* Struct returned from my_dir */ +{ + /* + These members are just copies of parts of DYNAMIC_ARRAY structure, + which is allocated right after the end of MY_DIR structure (MEM_ROOT + for storing names is also resides there). We've left them here because + we don't want to change code that uses my_dir. + */ + struct fileinfo *dir_entry; + uint number_off_files; +} MY_DIR; + +extern MY_DIR *my_dir(const char *path,myf MyFlags); +extern void my_dirend(MY_DIR *buffer); +extern MY_STAT *my_stat(const char *path, MY_STAT *stat_area, myf my_flags); +extern int my_fstat(int filenr, MY_STAT *stat_area, myf MyFlags); + +#endif /* MY_DIR_H */ + +#ifdef __cplusplus +} +#endif +#endif diff --git a/EQ2/source/depends/mysql-5.1.45-winx64/include/my_getopt.h b/EQ2/source/depends/mysql-5.1.45-winx64/include/my_getopt.h new file mode 100644 index 000000000..7cbad607a --- /dev/null +++ b/EQ2/source/depends/mysql-5.1.45-winx64/include/my_getopt.h @@ -0,0 +1,86 @@ +/* Copyright (C) 2002-2004 MySQL AB + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; version 2 of the License. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ + +#ifndef _my_getopt_h +#define _my_getopt_h + +C_MODE_START + +#define GET_NO_ARG 1 +#define GET_BOOL 2 +#define GET_INT 3 +#define GET_UINT 4 +#define GET_LONG 5 +#define GET_ULONG 6 +#define GET_LL 7 +#define GET_ULL 8 +#define GET_STR 9 +#define GET_STR_ALLOC 10 +#define GET_DISABLED 11 +#define GET_ENUM 12 +#define GET_SET 13 +#define GET_DOUBLE 14 + +#define GET_ASK_ADDR 128 +#define GET_TYPE_MASK 127 + +enum get_opt_arg_type { NO_ARG, OPT_ARG, REQUIRED_ARG }; + +struct st_typelib; + +struct my_option +{ + const char *name; /* Name of the option */ + int id; /* unique id or short option */ + const char *comment; /* option comment, for autom. --help */ + uchar **value; /* The variable value */ + uchar **u_max_value; /* The user def. max variable value */ + struct st_typelib *typelib; /* Pointer to possible values */ + ulong var_type; + enum get_opt_arg_type arg_type; + longlong def_value; /* Default value */ + longlong min_value; /* Min allowed value */ + longlong max_value; /* Max allowed value */ + longlong sub_size; /* Subtract this from given value */ + long block_size; /* Value should be a mult. of this */ + void *app_type; /* To be used by an application */ +}; + +typedef my_bool (* my_get_one_option) (int, const struct my_option *, char * ); +typedef void (* my_error_reporter) (enum loglevel level, const char *format, ... ); + +extern char *disabled_my_option; +extern my_bool my_getopt_print_errors; +extern my_bool my_getopt_skip_unknown; +extern my_error_reporter my_getopt_error_reporter; + +extern int handle_options (int *argc, char ***argv, + const struct my_option *longopts, my_get_one_option); +extern void my_cleanup_options(const struct my_option *options); +extern void my_print_help(const struct my_option *options); +extern void my_print_variables(const struct my_option *options); +extern void my_getopt_register_get_addr(uchar ** (*func_addr)(const char *, uint, + const struct my_option *, int *)); + +ulonglong getopt_ull_limit_value(ulonglong num, const struct my_option *optp, + my_bool *fix); +longlong getopt_ll_limit_value(longlong, const struct my_option *, + my_bool *fix); +my_bool getopt_compare_strings(const char *s, const char *t, uint length); + +C_MODE_END + +#endif /* _my_getopt_h */ + diff --git a/EQ2/source/depends/mysql-5.1.45-winx64/include/my_global.h b/EQ2/source/depends/mysql-5.1.45-winx64/include/my_global.h new file mode 100644 index 000000000..779152203 --- /dev/null +++ b/EQ2/source/depends/mysql-5.1.45-winx64/include/my_global.h @@ -0,0 +1,1602 @@ +/* Copyright (C) 2000-2003 MySQL AB + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; version 2 of the License. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ + +/* This is the include file that should be included 'first' in every C file. */ + +#ifndef _global_h +#define _global_h + +/* + InnoDB depends on some MySQL internals which other plugins should not + need. This is because of InnoDB's foreign key support, "safe" binlog + truncation, and other similar legacy features. + + We define accessors for these internals unconditionally, but do not + expose them in mysql/plugin.h. They are declared in ha_innodb.h for + InnoDB's use. +*/ +#define INNODB_COMPATIBILITY_HOOKS + +#ifdef __CYGWIN__ +/* We use a Unix API, so pretend it's not Windows */ +#undef WIN +#undef WIN32 +#undef _WIN +#undef _WIN32 +#undef _WIN64 +#undef __WIN__ +#undef __WIN32__ +#define HAVE_ERRNO_AS_DEFINE +#endif /* __CYGWIN__ */ + +#if defined(__QNXNTO__) && !defined(FD_SETSIZE) +#define FD_SETSIZE 1024 /* Max number of file descriptor bits in + fd_set, used when calling 'select' + Must be defined before including + "sys/select.h" and "sys/time.h" + */ +#endif + + +/* to make command line shorter we'll define USE_PRAGMA_INTERFACE here */ +#ifdef USE_PRAGMA_IMPLEMENTATION +#define USE_PRAGMA_INTERFACE +#endif + +#if defined(i386) && !defined(__i386__) +#define __i386__ +#endif + +/* Macros to make switching between C and C++ mode easier */ +#ifdef __cplusplus +#define C_MODE_START extern "C" { +#define C_MODE_END } +#else +#define C_MODE_START +#define C_MODE_END +#endif + +#if defined(_WIN32) || defined(_WIN64) || defined(__WIN32__) || defined(WIN32) +#include +#elif defined(__NETWARE__) +#include +#include +#if defined(__cplusplus) && defined(inline) +#undef inline /* fix configure problem */ +#endif +#else +#include +#if defined(__cplusplus) && defined(inline) +#undef inline /* fix configure problem */ +#endif +#endif /* _WIN32... */ + +/* Make it easier to add conditionl code for windows */ +#ifdef __WIN__ +#define IF_WIN(A,B) (A) +#else +#define IF_WIN(A,B) (B) +#endif + +#ifndef EMBEDDED_LIBRARY +#ifdef WITH_NDB_BINLOG +#define HAVE_NDB_BINLOG 1 +#endif +#endif /* !EMBEDDED_LIBRARY */ + +#ifndef EMBEDDED_LIBRARY +#define HAVE_REPLICATION +#define HAVE_EXTERNAL_CLIENT +#endif + +/* Some defines to avoid ifdefs in the code */ +#ifndef NETWARE_YIELD +#define NETWARE_YIELD +#define NETWARE_SET_SCREEN_MODE(A) +#endif + +/* Workaround for _LARGE_FILES and _LARGE_FILE_API incompatibility on AIX */ +#if defined(_AIX) && defined(_LARGE_FILE_API) +#undef _LARGE_FILE_API +#endif + +/* + The macros below are used to allow build of Universal/fat binaries of + MySQL and MySQL applications under darwin. +*/ +#if defined(__APPLE__) && defined(__MACH__) +# undef SIZEOF_CHARP +# undef SIZEOF_SHORT +# undef SIZEOF_INT +# undef SIZEOF_LONG +# undef SIZEOF_LONG_LONG +# undef SIZEOF_OFF_T +# undef WORDS_BIGENDIAN +# define SIZEOF_SHORT 2 +# define SIZEOF_INT 4 +# define SIZEOF_LONG_LONG 8 +# define SIZEOF_OFF_T 8 +# if defined(__i386__) || defined(__ppc__) +# define SIZEOF_CHARP 4 +# define SIZEOF_LONG 4 +# elif defined(__x86_64__) || defined(__ppc64__) +# define SIZEOF_CHARP 8 +# define SIZEOF_LONG 8 +# else +# error Building FAT binary for an unknown architecture. +# endif +# if defined(__ppc__) || defined(__ppc64__) +# define WORDS_BIGENDIAN +# endif +#endif /* defined(__APPLE__) && defined(__MACH__) */ + + +/* + The macros below are borrowed from include/linux/compiler.h in the + Linux kernel. Use them to indicate the likelyhood of the truthfulness + of a condition. This serves two purposes - newer versions of gcc will be + able to optimize for branch predication, which could yield siginficant + performance gains in frequently executed sections of the code, and the + other reason to use them is for documentation +*/ + +#if !defined(__GNUC__) || (__GNUC__ == 2 && __GNUC_MINOR__ < 96) +#define __builtin_expect(x, expected_value) (x) +#endif + +#define likely(x) __builtin_expect((x),1) +#define unlikely(x) __builtin_expect((x),0) + + +/* + The macros below are useful in optimising places where it has been + discovered that cache misses stall the process and where a prefetch + of the cache line can improve matters. This is available in GCC 3.1.1 + and later versions. + PREFETCH_READ says that addr is going to be used for reading and that + it is to be kept in caches if possible for a while + PREFETCH_WRITE also says that the item to be cached is likely to be + updated. + The *LOCALITY scripts are also available for experimentation purposes + mostly and should only be used if they are verified to improve matters. + For more input see GCC manual (available in GCC 3.1.1 and later) +*/ + +#if (__GNUC__ > 3) || (__GNUC__ == 3 && __GNUC_MINOR > 10) +#define PREFETCH_READ(addr) __builtin_prefetch(addr, 0, 3) +#define PREFETCH_WRITE(addr) \ + __builtin_prefetch(addr, 1, 3) +#define PREFETCH_READ_LOCALITY(addr, locality) \ + __builtin_prefetch(addr, 0, locality) +#define PREFETCH_WRITE_LOCALITY(addr, locality) \ + __builtin_prefetch(addr, 1, locality) +#else +#define PREFETCH_READ(addr) +#define PREFETCH_READ_LOCALITY(addr, locality) +#define PREFETCH_WRITE(addr) +#define PREFETCH_WRITE_LOCALITY(addr, locality) +#endif + +/* + The following macro is used to ensure that code often used in most + SQL statements and definitely for parts of the SQL processing are + kept in a code segment by itself. This has the advantage that the + risk of common code being overlapping in caches of the CPU is less. + This can be a cause of big performance problems. + Routines should be put in this category with care and when they are + put there one should also strive to make as much of the error handling + as possible (or uncommon code of the routine) to execute in a + separate method to avoid moving to much code to this code segment. + + It is very easy to use, simply add HOT_METHOD at the end of the + function declaration. + For more input see GCC manual (available in GCC 2.95 and later) +*/ + +#if (__GNUC__ > 2) || (__GNUC__ == 2 && __GNUC_MINOR > 94) +#define HOT_METHOD \ + __attribute__ ((section ("hot_code_section"))) +#else +#define HOT_METHOD +#endif + +/* + The following macro is used to ensure that popular global variables + are located next to each other to avoid that they contend for the + same cache lines. + + It is very easy to use, simply add HOT_DATA at the end of the declaration + of the variable, the variable must be initialised because of the way + that linker works so a declaration using HOT_DATA should look like: + uint global_hot_data HOT_DATA = 0; + For more input see GCC manual (available in GCC 2.95 and later) +*/ + +#if (__GNUC__ > 2) || (__GNUC__ == 2 && __GNUC_MINOR > 94) +#define HOT_DATA \ + __attribute__ ((section ("hot_data_section"))) +#else +#define HOT_DATA +#endif + +/* + now let's figure out if inline functions are supported + autoconf defines 'inline' to be empty, if not +*/ +#define inline_test_1(X) X ## 1 +#define inline_test_2(X) inline_test_1(X) +#if inline_test_2(inline) != 1 +#define HAVE_INLINE +#endif +#undef inline_test_2 +#undef inline_test_1 +/* helper macro for "instantiating" inline functions */ +#define STATIC_INLINE static inline + +/* + The following macros are used to control inlining a bit more than + usual. These macros are used to ensure that inlining always or + never occurs (independent of compilation mode). + For more input see GCC manual (available in GCC 3.1.1 and later) +*/ + +#if (__GNUC__ > 3) || (__GNUC__ == 3 && __GNUC_MINOR > 10) +#define ALWAYS_INLINE __attribute__ ((always_inline)) +#define NEVER_INLINE __attribute__ ((noinline)) +#else +#define ALWAYS_INLINE +#define NEVER_INLINE +#endif + + +/* Fix problem with S_ISLNK() on Linux */ +#if defined(TARGET_OS_LINUX) || defined(__GLIBC__) +#undef _GNU_SOURCE +#define _GNU_SOURCE 1 +#endif + +/* + Temporary solution to solve bug#7156. Include "sys/types.h" before + the thread headers, else the function madvise() will not be defined +*/ +#if defined(HAVE_SYS_TYPES_H) && ( defined(sun) || defined(__sun) ) +#include +#endif + +/* The client defines this to avoid all thread code */ +#if defined(MYSQL_CLIENT_NO_THREADS) || defined(UNDEF_THREADS_HACK) +#undef THREAD +#undef HAVE_LINUXTHREADS +#undef HAVE_NPTL +#endif + +#ifdef HAVE_THREADS_WITHOUT_SOCKETS +/* MIT pthreads does not work with unix sockets */ +#undef HAVE_SYS_UN_H +#endif + +#define __EXTENSIONS__ 1 /* We want some extension */ +#ifndef __STDC_EXT__ +#define __STDC_EXT__ 1 /* To get large file support on hpux */ +#endif + +/* + Solaris 9 include file refers to X/Open document + + System Interfaces and Headers, Issue 5 + + saying we should define _XOPEN_SOURCE=500 to get POSIX.1c prototypes, + but apparently other systems (namely FreeBSD) don't agree. + + On a newer Solaris 10, the above file recognizes also _XOPEN_SOURCE=600. + Furthermore, it tests that if a program requires older standard + (_XOPEN_SOURCE<600 or _POSIX_C_SOURCE<200112L) it cannot be + run on a new compiler (that defines _STDC_C99) and issues an #error. + It's also an #error if a program requires new standard (_XOPEN_SOURCE=600 + or _POSIX_C_SOURCE=200112L) and a compiler does not define _STDC_C99. + + To add more to this mess, Sun Studio C compiler defines _STDC_C99 while + C++ compiler does not! + + So, in a desperate attempt to get correct prototypes for both + C and C++ code, we define either _XOPEN_SOURCE=600 or _XOPEN_SOURCE=500 + depending on the compiler's announced C standard support. + + Cleaner solutions are welcome. +*/ +#ifdef __sun +#if __STDC_VERSION__ - 0 >= 199901L +#define _XOPEN_SOURCE 600 +#else +#define _XOPEN_SOURCE 500 +#endif +#endif + +#if defined(THREAD) && !defined(__WIN__) +#ifndef _POSIX_PTHREAD_SEMANTICS +#define _POSIX_PTHREAD_SEMANTICS /* We want posix threads */ +#endif + +#if !defined(SCO) +#define _REENTRANT 1 /* Some thread libraries require this */ +#endif +#if !defined(_THREAD_SAFE) && !defined(_AIX) +#define _THREAD_SAFE /* Required for OSF1 */ +#endif +#if defined(HPUX10) || defined(HPUX11) +C_MODE_START /* HPUX needs this, signal.h bug */ +#include +C_MODE_END +#else +#include /* AIX must have this included first */ +#endif +#if !defined(SCO) && !defined(_REENTRANT) +#define _REENTRANT 1 /* Threads requires reentrant code */ +#endif +#endif /* THREAD */ + +/* Go around some bugs in different OS and compilers */ +#ifdef _AIX /* By soren@t.dk */ +#define _H_STRINGS +#define _SYS_STREAM_H +/* #define _AIX32_CURSES */ /* XXX: this breaks AIX 4.3.3 (others?). */ +#define ulonglong2double(A) my_ulonglong2double(A) +#define my_off_t2double(A) my_ulonglong2double(A) +C_MODE_START +double my_ulonglong2double(unsigned long long A); +C_MODE_END +#endif /* _AIX */ + +#ifdef HAVE_BROKEN_SNPRINTF /* HPUX 10.20 don't have this defined */ +#undef HAVE_SNPRINTF +#endif +#ifdef HAVE_BROKEN_PREAD +/* + pread()/pwrite() are not 64 bit safe on HP-UX 11.0 without + installing the kernel patch PHKL_20349 or greater +*/ +#undef HAVE_PREAD +#undef HAVE_PWRITE +#endif +#if defined(HAVE_BROKEN_INLINE) && !defined(__cplusplus) +#undef inline +#define inline +#endif + +#ifdef UNDEF_HAVE_GETHOSTBYNAME_R /* For OSF4.x */ +#undef HAVE_GETHOSTBYNAME_R +#endif +#ifdef UNDEF_HAVE_INITGROUPS /* For AIX 4.3 */ +#undef HAVE_INITGROUPS +#endif + +/* gcc/egcs issues */ + +#if defined(__GNUC) && defined(__EXCEPTIONS) +#error "Please add -fno-exceptions to CXXFLAGS and reconfigure/recompile" +#endif + + +/* Fix a bug in gcc 2.8.0 on IRIX 6.2 */ +#if SIZEOF_LONG == 4 && defined(__LONG_MAX__) && (__GNUC__ == 2 && __GNUC_MINOR__ == 8) +#undef __LONG_MAX__ /* Is a longlong value in gcc 2.8.0 ??? */ +#define __LONG_MAX__ 2147483647 +#endif + +/* egcs 1.1.2 has a problem with memcpy on Alpha */ +#if defined(__GNUC__) && defined(__alpha__) && ! (__GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 95)) +#define BAD_MEMCPY +#endif + +#if defined(_lint) && !defined(lint) +#define lint +#endif +#if SIZEOF_LONG_LONG > 4 && !defined(_LONG_LONG) +#define _LONG_LONG 1 /* For AIX string library */ +#endif + +#ifndef stdin +#include +#endif +#ifdef HAVE_STDLIB_H +#include +#endif +#ifdef HAVE_STDDEF_H +#include +#endif + +#include +#ifdef HAVE_LIMITS_H +#include +#endif +#ifdef HAVE_FLOAT_H +#include +#endif +#ifdef HAVE_FENV_H +#include /* For fesetround() */ +#endif + +#ifdef HAVE_SYS_TYPES_H +#include +#endif +#ifdef HAVE_FCNTL_H +#include +#endif +#ifdef HAVE_SYS_TIMEB_H +#include /* Avoid warnings on SCO */ +#endif +#if TIME_WITH_SYS_TIME +# include +# include +#else +# if HAVE_SYS_TIME_H +# include +# else +# include +# endif +#endif /* TIME_WITH_SYS_TIME */ +#ifdef HAVE_UNISTD_H +#include +#endif +#if defined(__cplusplus) && defined(NO_CPLUSPLUS_ALLOCA) +#undef HAVE_ALLOCA +#undef HAVE_ALLOCA_H +#endif +#ifdef HAVE_ALLOCA_H +#include +#endif + +#include /* Recommended by debian */ +/* We need the following to go around a problem with openssl on solaris */ +#if defined(HAVE_CRYPT_H) +#include +#endif + +/* + A lot of our programs uses asserts, so better to always include it + This also fixes a problem when people uses DBUG_ASSERT without including + assert.h +*/ +#include + +/* an assert that works at compile-time. only for constant expression */ +#ifndef __GNUC__ +#define compile_time_assert(X) do { } while(0) +#else +#define compile_time_assert(X) \ + do \ + { \ + char compile_time_assert[(X) ? 1 : -1] \ + __attribute__ ((unused)); \ + } while(0) +#endif + +/* Go around some bugs in different OS and compilers */ +#if defined (HPUX11) && defined(_LARGEFILE_SOURCE) +#define _LARGEFILE64_SOURCE +#endif +#if defined(_HPUX_SOURCE) && defined(HAVE_SYS_STREAM_H) +#include /* HPUX 10.20 defines ulong here. UGLY !!! */ +#define HAVE_ULONG +#endif +#if defined(HPUX10) && defined(_LARGEFILE64_SOURCE) && defined(THREAD) +/* Fix bug in setrlimit */ +#undef setrlimit +#define setrlimit cma_setrlimit64 +#endif +/* Declare madvise where it is not declared for C++, like Solaris */ +#if HAVE_MADVISE && !HAVE_DECL_MADVISE && defined(__cplusplus) +extern "C" int madvise(void *addr, size_t len, int behav); +#endif + +#ifdef __QNXNTO__ +/* This has to be after include limits.h */ +#define HAVE_ERRNO_AS_DEFINE +#define HAVE_FCNTL_LOCK +#undef HAVE_FINITE +#undef LONGLONG_MIN /* These get wrongly defined in QNX 6.2 */ +#undef LONGLONG_MAX /* standard system library 'limits.h' */ +#ifdef __cplusplus +#ifndef HAVE_RINT +#define HAVE_RINT +#endif /* rint() and isnan() functions are not */ +#define rint(a) std::rint(a) /* visible in C++ scope due to an error */ +#define isnan(a) std::isnan(a) /* in the usr/include/math.h on QNX */ +#endif +#endif + +/* We can not live without the following defines */ + +#define USE_MYFUNC 1 /* Must use syscall indirection */ +#define MASTER 1 /* Compile without unireg */ +#define ENGLISH 1 /* Messages in English */ +#define POSIX_MISTAKE 1 /* regexp: Fix stupid spec error */ +#define USE_REGEX 1 /* We want the use the regex library */ +/* Do not define for ultra sparcs */ +#define USE_BMOVE512 1 /* Use this unless system bmove is faster */ + +#define QUOTE_ARG(x) #x /* Quote argument (before cpp) */ +#define STRINGIFY_ARG(x) QUOTE_ARG(x) /* Quote argument, after cpp */ + +/* Paranoid settings. Define I_AM_PARANOID if you are paranoid */ +#ifdef I_AM_PARANOID +#define DONT_ALLOW_USER_CHANGE 1 +#define DONT_USE_MYSQL_PWD 1 +#endif + +/* Does the system remember a signal handler after a signal ? */ +#ifndef HAVE_BSD_SIGNALS +#define DONT_REMEMBER_SIGNAL +#endif + +/* Define void to stop lint from generating "null effekt" comments */ +#ifndef DONT_DEFINE_VOID +#ifdef _lint +int __void__; +#define VOID(X) (__void__ = (int) (X)) +#else +#undef VOID +#define VOID(X) (X) +#endif +#endif /* DONT_DEFINE_VOID */ + +#if defined(_lint) || defined(FORCE_INIT_OF_VARS) +#define LINT_INIT(var) var=0 /* No uninitialize-warning */ +#else +#define LINT_INIT(var) +#endif + +/* + Suppress uninitialized variable warning without generating code. + + The _cplusplus is a temporary workaround for C++ code pending a fix + for a g++ bug (http://gcc.gnu.org/bugzilla/show_bug.cgi?id=34772). +*/ +#if defined(_lint) || defined(FORCE_INIT_OF_VARS) || defined(__cplusplus) || \ + !defined(__GNUC__) +#define UNINIT_VAR(x) x= 0 +#else +#define UNINIT_VAR(x) x= x +#endif + +/* Define some useful general macros */ +#if !defined(max) +#define max(a, b) ((a) > (b) ? (a) : (b)) +#define min(a, b) ((a) < (b) ? (a) : (b)) +#endif + +#if !defined(HAVE_UINT) +#undef HAVE_UINT +#define HAVE_UINT +typedef unsigned int uint; +typedef unsigned short ushort; +#endif + +#define CMP_NUM(a,b) (((a) < (b)) ? -1 : ((a) == (b)) ? 0 : 1) +#define sgn(a) (((a) < 0) ? -1 : ((a) > 0) ? 1 : 0) +#define swap_variables(t, a, b) { t dummy; dummy= a; a= b; b= dummy; } +#define test(a) ((a) ? 1 : 0) +#define set_if_bigger(a,b) do { if ((a) < (b)) (a)=(b); } while(0) +#define set_if_smaller(a,b) do { if ((a) > (b)) (a)=(b); } while(0) +#define test_all_bits(a,b) (((a) & (b)) == (b)) +#define set_bits(type, bit_count) (sizeof(type)*8 <= (bit_count) ? ~(type) 0 : ((((type) 1) << (bit_count)) - (type) 1)) +#define array_elements(A) ((uint) (sizeof(A)/sizeof(A[0]))) + +/* Define some general constants */ +#ifndef TRUE +#define TRUE (1) /* Logical true */ +#define FALSE (0) /* Logical false */ +#endif + +#if defined(__GNUC__) +#define function_volatile volatile +#define my_reinterpret_cast(A) reinterpret_cast +#define my_const_cast(A) const_cast +# ifndef GCC_VERSION +# define GCC_VERSION (__GNUC__ * 1000 + __GNUC_MINOR__) +# endif +#elif !defined(my_reinterpret_cast) +#define my_reinterpret_cast(A) (A) +#define my_const_cast(A) (A) +#endif + +#include + +/* + Wen using the embedded library, users might run into link problems, + duplicate declaration of __cxa_pure_virtual, solved by declaring it a + weak symbol. +*/ +#if defined(USE_MYSYS_NEW) && ! defined(DONT_DECLARE_CXA_PURE_VIRTUAL) +C_MODE_START +int __cxa_pure_virtual () __attribute__ ((weak)); +C_MODE_END +#endif + +/* From old s-system.h */ + +/* + Support macros for non ansi & other old compilers. Since such + things are no longer supported we do nothing. We keep then since + some of our code may still be needed to upgrade old customers. +*/ +#define _VARARGS(X) X +#define _STATIC_VARARGS(X) X + +/* The DBUG_ON flag always takes precedence over default DBUG_OFF */ +#if defined(DBUG_ON) && defined(DBUG_OFF) +#undef DBUG_OFF +#endif + +/* We might be forced to turn debug off, if not turned off already */ +#if (defined(FORCE_DBUG_OFF) || defined(_lint)) && !defined(DBUG_OFF) +# define DBUG_OFF +# ifdef DBUG_ON +# undef DBUG_ON +# endif +#endif + +#include + +#define MIN_ARRAY_SIZE 0 /* Zero or One. Gcc allows zero*/ +#define ASCII_BITS_USED 8 /* Bit char used */ +#define NEAR_F /* No near function handling */ + +/* Some types that is different between systems */ + +typedef int File; /* File descriptor */ +#ifndef Socket_defined +typedef int my_socket; /* File descriptor for sockets */ +#define INVALID_SOCKET -1 +#endif +/* Type for fuctions that handles signals */ +#define sig_handler RETSIGTYPE +C_MODE_START +typedef void (*sig_return)();/* Returns type from signal */ +C_MODE_END +#if defined(__GNUC__) && !defined(_lint) +typedef char pchar; /* Mixed prototypes can take char */ +typedef char puchar; /* Mixed prototypes can take char */ +typedef char pbool; /* Mixed prototypes can take char */ +typedef short pshort; /* Mixed prototypes can take short int */ +typedef float pfloat; /* Mixed prototypes can take float */ +#else +typedef int pchar; /* Mixed prototypes can't take char */ +typedef uint puchar; /* Mixed prototypes can't take char */ +typedef int pbool; /* Mixed prototypes can't take char */ +typedef int pshort; /* Mixed prototypes can't take short int */ +typedef double pfloat; /* Mixed prototypes can't take float */ +#endif +C_MODE_START +typedef int (*qsort_cmp)(const void *,const void *); +typedef int (*qsort_cmp2)(void*, const void *,const void *); +C_MODE_END +#define qsort_t RETQSORTTYPE /* Broken GCC cant handle typedef !!!! */ +#ifdef HAVE_SYS_SOCKET_H +#include +#endif +typedef SOCKET_SIZE_TYPE size_socket; + +#ifndef SOCKOPT_OPTLEN_TYPE +#define SOCKOPT_OPTLEN_TYPE size_socket +#endif + +/* file create flags */ + +#ifndef O_SHARE /* Probably not windows */ +#define O_SHARE 0 /* Flag to my_open for shared files */ +#ifndef O_BINARY +#define O_BINARY 0 /* Flag to my_open for binary files */ +#endif +#ifndef FILE_BINARY +#define FILE_BINARY O_BINARY /* Flag to my_fopen for binary streams */ +#endif +#ifdef HAVE_FCNTL +#define HAVE_FCNTL_LOCK +#define F_TO_EOF 0L /* Param to lockf() to lock rest of file */ +#endif +#endif /* O_SHARE */ + +#ifndef O_TEMPORARY +#define O_TEMPORARY 0 +#endif +#ifndef O_SHORT_LIVED +#define O_SHORT_LIVED 0 +#endif +#ifndef O_NOFOLLOW +#define O_NOFOLLOW 0 +#endif + +/* additional file share flags for win32 */ +#ifdef __WIN__ +#define _SH_DENYRWD 0x110 /* deny read/write mode & delete */ +#define _SH_DENYWRD 0x120 /* deny write mode & delete */ +#define _SH_DENYRDD 0x130 /* deny read mode & delete */ +#define _SH_DENYDEL 0x140 /* deny delete only */ +#endif /* __WIN__ */ + + +/* #define USE_RECORD_LOCK */ + + /* Unsigned types supported by the compiler */ +#define UNSINT8 /* unsigned int8 (char) */ +#define UNSINT16 /* unsigned int16 */ +#define UNSINT32 /* unsigned int32 */ + + /* General constants */ +#define FN_LEN 256 /* Max file name len */ +#define FN_HEADLEN 253 /* Max length of filepart of file name */ +#define FN_EXTLEN 20 /* Max length of extension (part of FN_LEN) */ +#define FN_REFLEN 512 /* Max length of full path-name */ +#define FN_EXTCHAR '.' +#define FN_HOMELIB '~' /* ~/ is used as abbrev for home dir */ +#define FN_CURLIB '.' /* ./ is used as abbrev for current dir */ +#define FN_PARENTDIR ".." /* Parent directory; Must be a string */ + +#ifndef FN_LIBCHAR +#define FN_LIBCHAR '/' +#define FN_ROOTDIR "/" +#endif +#define MY_NFILE 64 /* This is only used to save filenames */ +#ifndef OS_FILE_LIMIT +#define OS_FILE_LIMIT 65535 +#endif + +/* #define EXT_IN_LIBNAME */ +/* #define FN_NO_CASE_SENCE */ +/* #define FN_UPPER_CASE TRUE */ + +/* + Io buffer size; Must be a power of 2 and a multiple of 512. May be + smaller what the disk page size. This influences the speed of the + isam btree library. eg to big to slow. +*/ +#define IO_SIZE 4096 +/* + How much overhead does malloc have. The code often allocates + something like 1024-MALLOC_OVERHEAD bytes +*/ +#ifdef SAFEMALLOC +#define MALLOC_OVERHEAD (8+24+4) +#else +#define MALLOC_OVERHEAD 8 +#endif + /* get memory in huncs */ +#define ONCE_ALLOC_INIT (uint) (4096-MALLOC_OVERHEAD) + /* Typical record cash */ +#define RECORD_CACHE_SIZE (uint) (64*1024-MALLOC_OVERHEAD) + /* Typical key cash */ +#define KEY_CACHE_SIZE (uint) (8*1024*1024-MALLOC_OVERHEAD) + /* Default size of a key cache block */ +#define KEY_CACHE_BLOCK_SIZE (uint) 1024 + + + /* Some things that this system doesn't have */ + +#define NO_HASH /* Not needed anymore */ +#ifdef __WIN__ +#define NO_DIR_LIBRARY /* Not standar dir-library */ +#define USE_MY_STAT_STRUCT /* For my_lib */ +#endif + +/* Some defines of functions for portability */ + +#undef remove /* Crashes MySQL on SCO 5.0.0 */ +#ifndef __WIN__ +#define closesocket(A) close(A) +#ifndef ulonglong2double +#define ulonglong2double(A) ((double) (ulonglong) (A)) +#define my_off_t2double(A) ((double) (my_off_t) (A)) +#endif +#ifndef double2ulonglong +#define double2ulonglong(A) ((ulonglong) (double) (A)) +#endif +#endif + +#ifndef offsetof +#define offsetof(TYPE, MEMBER) ((size_t) &((TYPE *)0)->MEMBER) +#endif +#define ulong_to_double(X) ((double) (ulong) (X)) +#define SET_STACK_SIZE(X) /* Not needed on real machines */ + +#ifndef STACK_DIRECTION +#error "please add -DSTACK_DIRECTION=1 or -1 to your CPPFLAGS" +#endif + +#if !defined(HAVE_STRTOK_R) +#define strtok_r(A,B,C) strtok((A),(B)) +#endif + +/* This is from the old m-machine.h file */ + +#if SIZEOF_LONG_LONG > 4 +#define HAVE_LONG_LONG 1 +#endif + +/* + Some pre-ANSI-C99 systems like AIX 5.1 and Linux/GCC 2.95 define + ULONGLONG_MAX, LONGLONG_MIN, LONGLONG_MAX; we use them if they're defined. + Also on Windows we define these constants by hand in config-win.h. +*/ + +#if defined(HAVE_LONG_LONG) && !defined(LONGLONG_MIN) +#define LONGLONG_MIN ((long long) 0x8000000000000000LL) +#define LONGLONG_MAX ((long long) 0x7FFFFFFFFFFFFFFFLL) +#endif + +#if defined(HAVE_LONG_LONG) && !defined(ULONGLONG_MAX) +/* First check for ANSI C99 definition: */ +#ifdef ULLONG_MAX +#define ULONGLONG_MAX ULLONG_MAX +#else +#define ULONGLONG_MAX ((unsigned long long)(~0ULL)) +#endif +#endif /* defined (HAVE_LONG_LONG) && !defined(ULONGLONG_MAX)*/ + +#define INT_MIN32 (~0x7FFFFFFFL) +#define INT_MAX32 0x7FFFFFFFL +#define UINT_MAX32 0xFFFFFFFFL +#define INT_MIN24 (~0x007FFFFF) +#define INT_MAX24 0x007FFFFF +#define UINT_MAX24 0x00FFFFFF +#define INT_MIN16 (~0x7FFF) +#define INT_MAX16 0x7FFF +#define UINT_MAX16 0xFFFF +#define INT_MIN8 (~0x7F) +#define INT_MAX8 0x7F +#define UINT_MAX8 0xFF + +/* From limits.h instead */ +#ifndef DBL_MIN +#define DBL_MIN 4.94065645841246544e-324 +#define FLT_MIN ((float)1.40129846432481707e-45) +#endif +#ifndef DBL_MAX +#define DBL_MAX 1.79769313486231470e+308 +#define FLT_MAX ((float)3.40282346638528860e+38) +#endif +#ifndef SIZE_T_MAX +#define SIZE_T_MAX (~((size_t) 0)) +#endif + +#ifndef isfinite +#ifdef HAVE_FINITE +#define isfinite(x) finite(x) +#else +#define finite(x) (1.0 / fabs(x) > 0.0) +#endif /* HAVE_FINITE */ +#endif /* isfinite */ + +#ifndef HAVE_ISNAN +#define isnan(x) ((x) != (x)) +#endif + +#ifdef HAVE_ISINF +/* Check if C compiler is affected by GCC bug #39228 */ +#if !defined(__cplusplus) && defined(HAVE_BROKEN_ISINF) +/* Force store/reload of the argument to/from a 64-bit double */ +static inline double my_isinf(double x) +{ + volatile double t= x; + return isinf(t); +} +#else +/* System-provided isinf() is available and safe to use */ +#define my_isinf(X) isinf(X) +#endif +#else /* !HAVE_ISINF */ +#define my_isinf(X) (!finite(X) && !isnan(X)) +#endif + +/* Define missing math constants. */ +#ifndef M_PI +#define M_PI 3.14159265358979323846 +#endif +#ifndef M_E +#define M_E 2.7182818284590452354 +#endif +#ifndef M_LN2 +#define M_LN2 0.69314718055994530942 +#endif + +/* + Max size that must be added to a so that we know Size to make + adressable obj. +*/ +#if SIZEOF_CHARP == 4 +typedef long my_ptrdiff_t; +#else +typedef long long my_ptrdiff_t; +#endif + +#define MY_ALIGN(A,L) (((A) + (L) - 1) & ~((L) - 1)) +#define ALIGN_SIZE(A) MY_ALIGN((A),sizeof(double)) +/* Size to make adressable obj. */ +#define ALIGN_PTR(A, t) ((t*) MY_ALIGN((A),sizeof(t))) + /* Offset of field f in structure t */ +#define OFFSET(t, f) ((size_t)(char *)&((t *)0)->f) +#define ADD_TO_PTR(ptr,size,type) (type) ((uchar*) (ptr)+size) +#define PTR_BYTE_DIFF(A,B) (my_ptrdiff_t) ((uchar*) (A) - (uchar*) (B)) + +#define MY_DIV_UP(A, B) (((A) + (B) - 1) / (B)) +#define MY_ALIGNED_BYTE_ARRAY(N, S, T) T N[MY_DIV_UP(S, sizeof(T))] + +/* + Custom version of standard offsetof() macro which can be used to get + offsets of members in class for non-POD types (according to the current + version of C++ standard offsetof() macro can't be used in such cases and + attempt to do so causes warnings to be emitted, OTOH in many cases it is + still OK to assume that all instances of the class has the same offsets + for the same members). + + This is temporary solution which should be removed once File_parser class + and related routines are refactored. +*/ + +#define my_offsetof(TYPE, MEMBER) \ + ((size_t)((char *)&(((TYPE *)0x10)->MEMBER) - (char*)0x10)) + +#define NullS (char *) 0 +/* Nowdays we do not support MessyDos */ +#ifndef NEAR +#define NEAR /* Who needs segments ? */ +#define FAR /* On a good machine */ +#ifndef HUGE_PTR +#define HUGE_PTR +#endif +#endif +#if defined(__IBMC__) || defined(__IBMCPP__) +/* This was _System _Export but caused a lot of warnings on _AIX43 */ +#define STDCALL +#elif !defined( STDCALL) +#define STDCALL +#endif + +/* Typdefs for easyier portability */ + +#ifndef HAVE_UCHAR +typedef unsigned char uchar; /* Short for unsigned char */ +#endif + +#ifndef HAVE_INT8 +typedef signed char int8; /* Signed integer >= 8 bits */ +#endif +#ifndef HAVE_UINT8 +typedef unsigned char uint8; /* Unsigned integer >= 8 bits */ +#endif +#ifndef HAVE_INT16 +typedef short int16; +#endif +#ifndef HAVE_UINT16 +typedef unsigned short uint16; +#endif +#if SIZEOF_INT == 4 +#ifndef HAVE_INT32 +typedef int int32; +#endif +#ifndef HAVE_UINT32 +typedef unsigned int uint32; +#endif +#elif SIZEOF_LONG == 4 +#ifndef HAVE_INT32 +typedef long int32; +#endif +#ifndef HAVE_UINT32 +typedef unsigned long uint32; +#endif +#else +#error Neither int or long is of 4 bytes width +#endif + +#if !defined(HAVE_ULONG) && !defined(__USE_MISC) +typedef unsigned long ulong; /* Short for unsigned long */ +#endif +#ifndef longlong_defined +/* + Using [unsigned] long long is preferable as [u]longlong because we use + [unsigned] long long unconditionally in many places, + for example in constants with [U]LL suffix. +*/ +#if defined(HAVE_LONG_LONG) && SIZEOF_LONG_LONG == 8 +typedef unsigned long long int ulonglong; /* ulong or unsigned long long */ +typedef long long int longlong; +#else +typedef unsigned long ulonglong; /* ulong or unsigned long long */ +typedef long longlong; +#endif +#endif +#ifndef HAVE_INT64 +typedef longlong int64; +#endif +#ifndef HAVE_UINT64 +typedef ulonglong uint64; +#endif + +#if defined(NO_CLIENT_LONG_LONG) +typedef unsigned long my_ulonglong; +#elif defined (__WIN__) +typedef unsigned __int64 my_ulonglong; +#else +typedef unsigned long long my_ulonglong; +#endif + +#if SIZEOF_CHARP == SIZEOF_INT +typedef int intptr; +#elif SIZEOF_CHARP == SIZEOF_LONG +typedef long intptr; +#elif SIZEOF_CHARP == SIZEOF_LONG_LONG +typedef long long intptr; +#else +#error sizeof(void *) is neither sizeof(int) nor sizeof(long) nor sizeof(long long) +#endif + +#define MY_ERRPTR ((void*)(intptr)1) + +#ifdef USE_RAID +/* + The following is done with a if to not get problems with pre-processors + with late define evaluation +*/ +#if SIZEOF_OFF_T == 4 +#define SYSTEM_SIZEOF_OFF_T 4 +#else +#define SYSTEM_SIZEOF_OFF_T 8 +#endif +#undef SIZEOF_OFF_T +#define SIZEOF_OFF_T 8 +#else +#define SYSTEM_SIZEOF_OFF_T SIZEOF_OFF_T +#endif /* USE_RAID */ + +#if SIZEOF_OFF_T > 4 +typedef ulonglong my_off_t; +#else +typedef unsigned long my_off_t; +#endif +#define MY_FILEPOS_ERROR (~(my_off_t) 0) +#if !defined(__WIN__) +typedef off_t os_off_t; +#endif + +#if defined(__WIN__) +#define socket_errno WSAGetLastError() +#define SOCKET_EINTR WSAEINTR +#define SOCKET_EAGAIN WSAEINPROGRESS +#define SOCKET_ETIMEDOUT WSAETIMEDOUT +#define SOCKET_EWOULDBLOCK WSAEWOULDBLOCK +#define SOCKET_EADDRINUSE WSAEADDRINUSE +#define SOCKET_ENFILE ENFILE +#define SOCKET_EMFILE EMFILE +#else /* Unix */ +#define socket_errno errno +#define closesocket(A) close(A) +#define SOCKET_EINTR EINTR +#define SOCKET_EAGAIN EAGAIN +#define SOCKET_ETIMEDOUT SOCKET_EINTR +#define SOCKET_EWOULDBLOCK EWOULDBLOCK +#define SOCKET_EADDRINUSE EADDRINUSE +#define SOCKET_ENFILE ENFILE +#define SOCKET_EMFILE EMFILE +#endif + +typedef uint8 int7; /* Most effective integer 0 <= x <= 127 */ +typedef short int15; /* Most effective integer 0 <= x <= 32767 */ +typedef int myf; /* Type of MyFlags in my_funcs */ +typedef char my_bool; /* Small bool */ +#if !defined(bool) && (!defined(HAVE_BOOL) || !defined(__cplusplus)) +typedef char bool; /* Ordinary boolean values 0 1 */ +#endif + /* Macros for converting *constants* to the right type */ +#define INT8(v) (int8) (v) +#define INT16(v) (int16) (v) +#define INT32(v) (int32) (v) +#define MYF(v) (myf) (v) + +#ifndef LL +#ifdef HAVE_LONG_LONG +#define LL(A) A ## LL +#else +#define LL(A) A ## L +#endif +#endif + +#ifndef ULL +#ifdef HAVE_LONG_LONG +#define ULL(A) A ## ULL +#else +#define ULL(A) A ## UL +#endif +#endif + +/* + Defines to make it possible to prioritize register assignments. No + longer that important with modern compilers. +*/ +#ifndef USING_X +#define reg1 register +#define reg2 register +#define reg3 register +#define reg4 register +#define reg5 register +#define reg6 register +#define reg7 register +#define reg8 register +#define reg9 register +#define reg10 register +#define reg11 register +#define reg12 register +#define reg13 register +#define reg14 register +#define reg15 register +#define reg16 register +#endif + +/* + Sometimes we want to make sure that the variable is not put into + a register in debugging mode so we can see its value in the core +*/ + +#ifndef DBUG_OFF +#define dbug_volatile volatile +#else +#define dbug_volatile +#endif + +/* Some helper macros */ +#define YESNO(X) ((X) ? "yes" : "no") + +/* Defines for time function */ +#define SCALE_SEC 100 +#define SCALE_USEC 10000 +#define MY_HOW_OFTEN_TO_ALARM 2 /* How often we want info on screen */ +#define MY_HOW_OFTEN_TO_WRITE 1000 /* How often we want info on screen */ + + + +/* + Define-funktions for reading and storing in machine independent format + (low byte first) +*/ + +/* Optimized store functions for Intel x86 */ +#if defined(__i386__) || defined(_WIN32) +#define sint2korr(A) (*((int16 *) (A))) +#define sint3korr(A) ((int32) ((((uchar) (A)[2]) & 128) ? \ + (((uint32) 255L << 24) | \ + (((uint32) (uchar) (A)[2]) << 16) |\ + (((uint32) (uchar) (A)[1]) << 8) | \ + ((uint32) (uchar) (A)[0])) : \ + (((uint32) (uchar) (A)[2]) << 16) |\ + (((uint32) (uchar) (A)[1]) << 8) | \ + ((uint32) (uchar) (A)[0]))) +#define sint4korr(A) (*((long *) (A))) +#define uint2korr(A) (*((uint16 *) (A))) +#if defined(HAVE_purify) && !defined(_WIN32) +#define uint3korr(A) (uint32) (((uint32) ((uchar) (A)[0])) +\ + (((uint32) ((uchar) (A)[1])) << 8) +\ + (((uint32) ((uchar) (A)[2])) << 16)) +#else +/* + ATTENTION ! + + Please, note, uint3korr reads 4 bytes (not 3) ! + It means, that you have to provide enough allocated space ! +*/ +#define uint3korr(A) (long) (*((unsigned int *) (A)) & 0xFFFFFF) +#endif /* HAVE_purify && !_WIN32 */ +#define uint4korr(A) (*((uint32 *) (A))) +#define uint5korr(A) ((ulonglong)(((uint32) ((uchar) (A)[0])) +\ + (((uint32) ((uchar) (A)[1])) << 8) +\ + (((uint32) ((uchar) (A)[2])) << 16) +\ + (((uint32) ((uchar) (A)[3])) << 24)) +\ + (((ulonglong) ((uchar) (A)[4])) << 32)) +#define uint6korr(A) ((ulonglong)(((uint32) ((uchar) (A)[0])) + \ + (((uint32) ((uchar) (A)[1])) << 8) + \ + (((uint32) ((uchar) (A)[2])) << 16) + \ + (((uint32) ((uchar) (A)[3])) << 24)) + \ + (((ulonglong) ((uchar) (A)[4])) << 32) + \ + (((ulonglong) ((uchar) (A)[5])) << 40)) +#define uint8korr(A) (*((ulonglong *) (A))) +#define sint8korr(A) (*((longlong *) (A))) +#define int2store(T,A) *((uint16*) (T))= (uint16) (A) +#define int3store(T,A) do { *(T)= (uchar) ((A));\ + *(T+1)=(uchar) (((uint) (A) >> 8));\ + *(T+2)=(uchar) (((A) >> 16)); } while (0) +#define int4store(T,A) *((long *) (T))= (long) (A) +#define int5store(T,A) do { *(T)= (uchar)((A));\ + *((T)+1)=(uchar) (((A) >> 8));\ + *((T)+2)=(uchar) (((A) >> 16));\ + *((T)+3)=(uchar) (((A) >> 24)); \ + *((T)+4)=(uchar) (((A) >> 32)); } while(0) +#define int6store(T,A) do { *(T)= (uchar)((A)); \ + *((T)+1)=(uchar) (((A) >> 8)); \ + *((T)+2)=(uchar) (((A) >> 16)); \ + *((T)+3)=(uchar) (((A) >> 24)); \ + *((T)+4)=(uchar) (((A) >> 32)); \ + *((T)+5)=(uchar) (((A) >> 40)); } while(0) +#define int8store(T,A) *((ulonglong *) (T))= (ulonglong) (A) + +typedef union { + double v; + long m[2]; +} doubleget_union; +#define doubleget(V,M) \ +do { doubleget_union _tmp; \ + _tmp.m[0] = *((long*)(M)); \ + _tmp.m[1] = *(((long*) (M))+1); \ + (V) = _tmp.v; } while(0) +#define doublestore(T,V) do { *((long *) T) = ((doubleget_union *)&V)->m[0]; \ + *(((long *) T)+1) = ((doubleget_union *)&V)->m[1]; \ + } while (0) +#define float4get(V,M) do { *((float *) &(V)) = *((float*) (M)); } while(0) +#define float8get(V,M) doubleget((V),(M)) +#define float4store(V,M) memcpy((uchar*) V,(uchar*) (&M),sizeof(float)) +#define floatstore(T,V) memcpy((uchar*)(T), (uchar*)(&V),sizeof(float)) +#define floatget(V,M) memcpy((uchar*) &V,(uchar*) (M),sizeof(float)) +#define float8store(V,M) doublestore((V),(M)) +#else + +/* + We're here if it's not a IA-32 architecture (Win32 and UNIX IA-32 defines + were done before) +*/ +#define sint2korr(A) (int16) (((int16) ((uchar) (A)[0])) +\ + ((int16) ((int16) (A)[1]) << 8)) +#define sint3korr(A) ((int32) ((((uchar) (A)[2]) & 128) ? \ + (((uint32) 255L << 24) | \ + (((uint32) (uchar) (A)[2]) << 16) |\ + (((uint32) (uchar) (A)[1]) << 8) | \ + ((uint32) (uchar) (A)[0])) : \ + (((uint32) (uchar) (A)[2]) << 16) |\ + (((uint32) (uchar) (A)[1]) << 8) | \ + ((uint32) (uchar) (A)[0]))) +#define sint4korr(A) (int32) (((int32) ((uchar) (A)[0])) +\ + (((int32) ((uchar) (A)[1]) << 8)) +\ + (((int32) ((uchar) (A)[2]) << 16)) +\ + (((int32) ((int16) (A)[3]) << 24))) +#define sint8korr(A) (longlong) uint8korr(A) +#define uint2korr(A) (uint16) (((uint16) ((uchar) (A)[0])) +\ + ((uint16) ((uchar) (A)[1]) << 8)) +#define uint3korr(A) (uint32) (((uint32) ((uchar) (A)[0])) +\ + (((uint32) ((uchar) (A)[1])) << 8) +\ + (((uint32) ((uchar) (A)[2])) << 16)) +#define uint4korr(A) (uint32) (((uint32) ((uchar) (A)[0])) +\ + (((uint32) ((uchar) (A)[1])) << 8) +\ + (((uint32) ((uchar) (A)[2])) << 16) +\ + (((uint32) ((uchar) (A)[3])) << 24)) +#define uint5korr(A) ((ulonglong)(((uint32) ((uchar) (A)[0])) +\ + (((uint32) ((uchar) (A)[1])) << 8) +\ + (((uint32) ((uchar) (A)[2])) << 16) +\ + (((uint32) ((uchar) (A)[3])) << 24)) +\ + (((ulonglong) ((uchar) (A)[4])) << 32)) +#define uint6korr(A) ((ulonglong)(((uint32) ((uchar) (A)[0])) + \ + (((uint32) ((uchar) (A)[1])) << 8) + \ + (((uint32) ((uchar) (A)[2])) << 16) + \ + (((uint32) ((uchar) (A)[3])) << 24)) + \ + (((ulonglong) ((uchar) (A)[4])) << 32) + \ + (((ulonglong) ((uchar) (A)[5])) << 40)) +#define uint8korr(A) ((ulonglong)(((uint32) ((uchar) (A)[0])) +\ + (((uint32) ((uchar) (A)[1])) << 8) +\ + (((uint32) ((uchar) (A)[2])) << 16) +\ + (((uint32) ((uchar) (A)[3])) << 24)) +\ + (((ulonglong) (((uint32) ((uchar) (A)[4])) +\ + (((uint32) ((uchar) (A)[5])) << 8) +\ + (((uint32) ((uchar) (A)[6])) << 16) +\ + (((uint32) ((uchar) (A)[7])) << 24))) <<\ + 32)) +#define int2store(T,A) do { uint def_temp= (uint) (A) ;\ + *((uchar*) (T))= (uchar)(def_temp); \ + *((uchar*) (T)+1)=(uchar)((def_temp >> 8)); \ + } while(0) +#define int3store(T,A) do { /*lint -save -e734 */\ + *((uchar*)(T))=(uchar) ((A));\ + *((uchar*) (T)+1)=(uchar) (((A) >> 8));\ + *((uchar*)(T)+2)=(uchar) (((A) >> 16)); \ + /*lint -restore */} while(0) +#define int4store(T,A) do { *((char *)(T))=(char) ((A));\ + *(((char *)(T))+1)=(char) (((A) >> 8));\ + *(((char *)(T))+2)=(char) (((A) >> 16));\ + *(((char *)(T))+3)=(char) (((A) >> 24)); } while(0) +#define int5store(T,A) do { *((char *)(T))= (char)((A)); \ + *(((char *)(T))+1)= (char)(((A) >> 8)); \ + *(((char *)(T))+2)= (char)(((A) >> 16)); \ + *(((char *)(T))+3)= (char)(((A) >> 24)); \ + *(((char *)(T))+4)= (char)(((A) >> 32)); \ + } while(0) +#define int6store(T,A) do { *((char *)(T))= (char)((A)); \ + *(((char *)(T))+1)= (char)(((A) >> 8)); \ + *(((char *)(T))+2)= (char)(((A) >> 16)); \ + *(((char *)(T))+3)= (char)(((A) >> 24)); \ + *(((char *)(T))+4)= (char)(((A) >> 32)); \ + *(((char *)(T))+5)= (char)(((A) >> 40)); \ + } while(0) +#define int8store(T,A) do { uint def_temp= (uint) (A), def_temp2= (uint) ((A) >> 32); \ + int4store((T),def_temp); \ + int4store((T+4),def_temp2); } while(0) +#ifdef WORDS_BIGENDIAN +#define float4store(T,A) do { *(T)= ((uchar *) &A)[3];\ + *((T)+1)=(char) ((uchar *) &A)[2];\ + *((T)+2)=(char) ((uchar *) &A)[1];\ + *((T)+3)=(char) ((uchar *) &A)[0]; } while(0) + +#define float4get(V,M) do { float def_temp;\ + ((uchar*) &def_temp)[0]=(M)[3];\ + ((uchar*) &def_temp)[1]=(M)[2];\ + ((uchar*) &def_temp)[2]=(M)[1];\ + ((uchar*) &def_temp)[3]=(M)[0];\ + (V)=def_temp; } while(0) +#define float8store(T,V) do { *(T)= ((uchar *) &V)[7];\ + *((T)+1)=(char) ((uchar *) &V)[6];\ + *((T)+2)=(char) ((uchar *) &V)[5];\ + *((T)+3)=(char) ((uchar *) &V)[4];\ + *((T)+4)=(char) ((uchar *) &V)[3];\ + *((T)+5)=(char) ((uchar *) &V)[2];\ + *((T)+6)=(char) ((uchar *) &V)[1];\ + *((T)+7)=(char) ((uchar *) &V)[0]; } while(0) + +#define float8get(V,M) do { double def_temp;\ + ((uchar*) &def_temp)[0]=(M)[7];\ + ((uchar*) &def_temp)[1]=(M)[6];\ + ((uchar*) &def_temp)[2]=(M)[5];\ + ((uchar*) &def_temp)[3]=(M)[4];\ + ((uchar*) &def_temp)[4]=(M)[3];\ + ((uchar*) &def_temp)[5]=(M)[2];\ + ((uchar*) &def_temp)[6]=(M)[1];\ + ((uchar*) &def_temp)[7]=(M)[0];\ + (V) = def_temp; } while(0) +#else +#define float4get(V,M) memcpy_fixed((uchar*) &V,(uchar*) (M),sizeof(float)) +#define float4store(V,M) memcpy_fixed((uchar*) V,(uchar*) (&M),sizeof(float)) + +#if defined(__FLOAT_WORD_ORDER) && (__FLOAT_WORD_ORDER == __BIG_ENDIAN) +#define doublestore(T,V) do { *(((char*)T)+0)=(char) ((uchar *) &V)[4];\ + *(((char*)T)+1)=(char) ((uchar *) &V)[5];\ + *(((char*)T)+2)=(char) ((uchar *) &V)[6];\ + *(((char*)T)+3)=(char) ((uchar *) &V)[7];\ + *(((char*)T)+4)=(char) ((uchar *) &V)[0];\ + *(((char*)T)+5)=(char) ((uchar *) &V)[1];\ + *(((char*)T)+6)=(char) ((uchar *) &V)[2];\ + *(((char*)T)+7)=(char) ((uchar *) &V)[3]; }\ + while(0) +#define doubleget(V,M) do { double def_temp;\ + ((uchar*) &def_temp)[0]=(M)[4];\ + ((uchar*) &def_temp)[1]=(M)[5];\ + ((uchar*) &def_temp)[2]=(M)[6];\ + ((uchar*) &def_temp)[3]=(M)[7];\ + ((uchar*) &def_temp)[4]=(M)[0];\ + ((uchar*) &def_temp)[5]=(M)[1];\ + ((uchar*) &def_temp)[6]=(M)[2];\ + ((uchar*) &def_temp)[7]=(M)[3];\ + (V) = def_temp; } while(0) +#endif /* __FLOAT_WORD_ORDER */ + +#define float8get(V,M) doubleget((V),(M)) +#define float8store(V,M) doublestore((V),(M)) +#endif /* WORDS_BIGENDIAN */ + +#endif /* __i386__ OR _WIN32 */ + +/* + Macro for reading 32-bit integer from network byte order (big-endian) + from unaligned memory location. +*/ +#define int4net(A) (int32) (((uint32) ((uchar) (A)[3])) |\ + (((uint32) ((uchar) (A)[2])) << 8) |\ + (((uint32) ((uchar) (A)[1])) << 16) |\ + (((uint32) ((uchar) (A)[0])) << 24)) +/* + Define-funktions for reading and storing in machine format from/to + short/long to/from some place in memory V should be a (not + register) variable, M is a pointer to byte +*/ + +#ifdef WORDS_BIGENDIAN + +#define ushortget(V,M) do { V = (uint16) (((uint16) ((uchar) (M)[1]))+\ + ((uint16) ((uint16) (M)[0]) << 8)); } while(0) +#define shortget(V,M) do { V = (short) (((short) ((uchar) (M)[1]))+\ + ((short) ((short) (M)[0]) << 8)); } while(0) +#define longget(V,M) do { int32 def_temp;\ + ((uchar*) &def_temp)[0]=(M)[0];\ + ((uchar*) &def_temp)[1]=(M)[1];\ + ((uchar*) &def_temp)[2]=(M)[2];\ + ((uchar*) &def_temp)[3]=(M)[3];\ + (V)=def_temp; } while(0) +#define ulongget(V,M) do { uint32 def_temp;\ + ((uchar*) &def_temp)[0]=(M)[0];\ + ((uchar*) &def_temp)[1]=(M)[1];\ + ((uchar*) &def_temp)[2]=(M)[2];\ + ((uchar*) &def_temp)[3]=(M)[3];\ + (V)=def_temp; } while(0) +#define shortstore(T,A) do { uint def_temp=(uint) (A) ;\ + *(((char*)T)+1)=(char)(def_temp); \ + *(((char*)T)+0)=(char)(def_temp >> 8); } while(0) +#define longstore(T,A) do { *(((char*)T)+3)=((A));\ + *(((char*)T)+2)=(((A) >> 8));\ + *(((char*)T)+1)=(((A) >> 16));\ + *(((char*)T)+0)=(((A) >> 24)); } while(0) + +#define floatget(V,M) memcpy_fixed((uchar*) &V,(uchar*) (M),sizeof(float)) +#define floatstore(T,V) memcpy_fixed((uchar*) (T),(uchar*)(&V),sizeof(float)) +#define doubleget(V,M) memcpy_fixed((uchar*) &V,(uchar*) (M),sizeof(double)) +#define doublestore(T,V) memcpy_fixed((uchar*) (T),(uchar*) &V,sizeof(double)) +#define longlongget(V,M) memcpy_fixed((uchar*) &V,(uchar*) (M),sizeof(ulonglong)) +#define longlongstore(T,V) memcpy_fixed((uchar*) (T),(uchar*) &V,sizeof(ulonglong)) + +#else + +#define ushortget(V,M) do { V = uint2korr(M); } while(0) +#define shortget(V,M) do { V = sint2korr(M); } while(0) +#define longget(V,M) do { V = sint4korr(M); } while(0) +#define ulongget(V,M) do { V = uint4korr(M); } while(0) +#define shortstore(T,V) int2store(T,V) +#define longstore(T,V) int4store(T,V) +#ifndef floatstore +#define floatstore(T,V) memcpy_fixed((uchar*) (T),(uchar*) (&V),sizeof(float)) +#define floatget(V,M) memcpy_fixed((uchar*) &V, (uchar*) (M), sizeof(float)) +#endif +#ifndef doubleget +#define doubleget(V,M) memcpy_fixed((uchar*) &V,(uchar*) (M),sizeof(double)) +#define doublestore(T,V) memcpy_fixed((uchar*) (T),(uchar*) &V,sizeof(double)) +#endif /* doubleget */ +#define longlongget(V,M) memcpy_fixed((uchar*) &V,(uchar*) (M),sizeof(ulonglong)) +#define longlongstore(T,V) memcpy_fixed((uchar*) (T),(uchar*) &V,sizeof(ulonglong)) + +#endif /* WORDS_BIGENDIAN */ + +/* sprintf does not always return the number of bytes :- */ +#ifdef SPRINTF_RETURNS_INT +#define my_sprintf(buff,args) sprintf args +#else +#ifdef SPRINTF_RETURNS_PTR +#define my_sprintf(buff,args) ((int)(sprintf args - buff)) +#else +#define my_sprintf(buff,args) ((ulong) sprintf args, (ulong) strlen(buff)) +#endif +#endif + +#ifndef THREAD +#define thread_safe_increment(V,L) (V)++ +#define thread_safe_decrement(V,L) (V)-- +#define thread_safe_add(V,C,L) (V)+=(C) +#define thread_safe_sub(V,C,L) (V)-=(C) +#define statistic_increment(V,L) (V)++ +#define statistic_decrement(V,L) (V)-- +#define statistic_add(V,C,L) (V)+=(C) +#define statistic_sub(V,C,L) (V)-=(C) +#endif + +#ifdef HAVE_CHARSET_utf8 +#define MYSQL_UNIVERSAL_CLIENT_CHARSET "utf8" +#else +#define MYSQL_UNIVERSAL_CLIENT_CHARSET MYSQL_DEFAULT_CHARSET_NAME +#endif + +#if defined(EMBEDDED_LIBRARY) && !defined(HAVE_EMBEDDED_PRIVILEGE_CONTROL) +#define NO_EMBEDDED_ACCESS_CHECKS +#endif + +#ifdef HAVE_DLOPEN +#if defined(__WIN__) +#define dlsym(lib, name) GetProcAddress((HMODULE)lib, name) +#define dlopen(libname, unused) LoadLibraryEx(libname, NULL, 0) +#define dlclose(lib) FreeLibrary((HMODULE)lib) +#elif defined(HAVE_DLFCN_H) +#include +#endif +#endif + +/* FreeBSD 2.2.2 does not define RTLD_NOW) */ +#ifndef RTLD_NOW +#define RTLD_NOW 1 +#endif + +#ifndef HAVE_DLERROR +#define dlerror() "" +#endif + + +#ifndef __NETWARE__ +/* + * Include standard definitions of operator new and delete. + */ +#ifdef __cplusplus +#include +#endif +#else +/* + * Define placement versions of operator new and operator delete since + * we don't have when building for Netware. + */ +#ifdef __cplusplus +inline void *operator new(size_t, void *ptr) { return ptr; } +inline void *operator new[](size_t, void *ptr) { return ptr; } +inline void operator delete(void*, void*) { /* Do nothing */ } +inline void operator delete[](void*, void*) { /* Do nothing */ } +#endif +#endif + +/* Length of decimal number represented by INT32. */ +#define MY_INT32_NUM_DECIMAL_DIGITS 11 + +/* Length of decimal number represented by INT64. */ +#define MY_INT64_NUM_DECIMAL_DIGITS 21 + +/* Define some useful general macros (should be done after all headers). */ +#if !defined(max) +#define max(a, b) ((a) > (b) ? (a) : (b)) +#define min(a, b) ((a) < (b) ? (a) : (b)) +#endif +/* + Only Linux is known to need an explicit sync of the directory to make sure a + file creation/deletion/renaming in(from,to) this directory durable. +*/ +#ifdef TARGET_OS_LINUX +#define NEED_EXPLICIT_SYNC_DIR 1 +#endif + +#if !defined(__cplusplus) && !defined(bool) +#define bool In_C_you_should_use_my_bool_instead() +#endif + +#ifndef HAVE_RINT +/** + All integers up to this number can be represented exactly as double precision + values (DBL_MANT_DIG == 53 for IEEE 754 hardware). +*/ +#define MAX_EXACT_INTEGER ((1LL << DBL_MANT_DIG) - 1) + +/** + rint(3) implementation for platforms that do not have it. + Always rounds to the nearest integer with ties being rounded to the nearest + even integer to mimic glibc's rint() behavior in the "round-to-nearest" + FPU mode. Hardware-specific optimizations are possible (frndint on x86). + Unlike this implementation, hardware will also honor the FPU rounding mode. +*/ + +static inline double rint(double x) +{ + double f, i; + f = modf(x, &i); + /* + All doubles with absolute values > MAX_EXACT_INTEGER are even anyway, + no need to check it. + */ + if (x > 0.0) + i += (double) ((f > 0.5) || (f == 0.5 && + i <= (double) MAX_EXACT_INTEGER && + (longlong) i % 2)); + else + i -= (double) ((f < -0.5) || (f == -0.5 && + i >= (double) -MAX_EXACT_INTEGER && + (longlong) i % 2)); + return i; +} +#endif /* HAVE_RINT */ + +/* + MYSQL_PLUGIN_IMPORT macro is used to export mysqld data + (i.e variables) for usage in storage engine loadable plugins. + Outside of Windows, it is dummy. +*/ +#ifndef MYSQL_PLUGIN_IMPORT +#if (defined(_WIN32) && defined(MYSQL_DYNAMIC_PLUGIN)) +#define MYSQL_PLUGIN_IMPORT __declspec(dllimport) +#else +#define MYSQL_PLUGIN_IMPORT +#endif +#endif + +#endif /* my_global_h */ diff --git a/EQ2/source/depends/mysql-5.1.45-winx64/include/my_list.h b/EQ2/source/depends/mysql-5.1.45-winx64/include/my_list.h new file mode 100644 index 000000000..775b56587 --- /dev/null +++ b/EQ2/source/depends/mysql-5.1.45-winx64/include/my_list.h @@ -0,0 +1,45 @@ +/* Copyright (C) 2000 MySQL AB + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; version 2 of the License. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ + +#ifndef _list_h_ +#define _list_h_ + +#ifdef __cplusplus +extern "C" { +#endif + +typedef struct st_list { + struct st_list *prev,*next; + void *data; +} LIST; + +typedef int (*list_walk_action)(void *,void *); + +extern LIST *list_add(LIST *root,LIST *element); +extern LIST *list_delete(LIST *root,LIST *element); +extern LIST *list_cons(void *data,LIST *root); +extern LIST *list_reverse(LIST *root); +extern void list_free(LIST *root,unsigned int free_data); +extern unsigned int list_length(LIST *); +extern int list_walk(LIST *,list_walk_action action,unsigned char * argument); + +#define list_rest(a) ((a)->next) +#define list_push(a,b) (a)=list_cons((b),(a)) +#define list_pop(A) {LIST *old=(A); (A)=list_delete(old,old) ; my_free((unsigned char *) old,MYF(MY_FAE)); } + +#ifdef __cplusplus +} +#endif +#endif diff --git a/EQ2/source/depends/mysql-5.1.45-winx64/include/my_net.h b/EQ2/source/depends/mysql-5.1.45-winx64/include/my_net.h new file mode 100644 index 000000000..3af79ea3d --- /dev/null +++ b/EQ2/source/depends/mysql-5.1.45-winx64/include/my_net.h @@ -0,0 +1,128 @@ +/* Copyright (C) 2000 MySQL AB + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; version 2 of the License. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ + +/* + thread safe version of some common functions: + my_inet_ntoa + + This file is also used to make handling of sockets and ioctl() + portable accross systems. + +*/ + +#ifndef _my_net_h +#define _my_net_h +C_MODE_START + +#include +#ifdef HAVE_SYS_SOCKET_H +#include +#endif +#ifdef HAVE_NETINET_IN_H +#include +#endif +#ifdef HAVE_ARPA_INET_H +#include +#endif +#ifdef HAVE_POLL +#include +#endif +#ifdef HAVE_SYS_IOCTL_H +#include +#endif + +#if !defined(__WIN__) && !defined(HAVE_BROKEN_NETINET_INCLUDES) && !defined(__BEOS__) && !defined(__NETWARE__) +#include +#include +#include +#if !defined(alpha_linux_port) +#include +#endif +#endif + +#if defined(__WIN__) +#define O_NONBLOCK 1 /* For emulation of fcntl() */ + +/* + SHUT_RDWR is called SD_BOTH in windows and + is defined to 2 in winsock2.h + #define SD_BOTH 0x02 +*/ +#define SHUT_RDWR 0x02 + +#endif + +/* + On OSes which don't have the in_addr_t, we guess that using uint32 is the best + possible choice. We guess this from the fact that on HP-UX64bit & FreeBSD64bit + & Solaris64bit, in_addr_t is equivalent to uint32. And on Linux32bit too. +*/ +#ifndef HAVE_IN_ADDR_T +#define in_addr_t uint32 +#endif + +/* On some operating systems (e.g. Solaris) INADDR_NONE is not defined */ +#ifndef INADDR_NONE +#define INADDR_NONE -1 /* Error value from inet_addr */ +#endif + +/* Thread safe or portable version of some functions */ + +void my_inet_ntoa(struct in_addr in, char *buf); + +/* + Handling of gethostbyname_r() +*/ + +#if !defined(HPUX10) +struct hostent; +#endif /* HPUX */ +#if !defined(HAVE_GETHOSTBYNAME_R) +struct hostent *my_gethostbyname_r(const char *name, + struct hostent *result, char *buffer, + int buflen, int *h_errnop); +void my_gethostbyname_r_free(); +#elif defined(HAVE_PTHREAD_ATTR_CREATE) || defined(_AIX) || defined(HAVE_GETHOSTBYNAME_R_GLIBC2_STYLE) +struct hostent *my_gethostbyname_r(const char *name, + struct hostent *result, char *buffer, + int buflen, int *h_errnop); +#define my_gethostbyname_r_free() +#if !defined(HAVE_GETHOSTBYNAME_R_GLIBC2_STYLE) && !defined(HPUX10) +#define GETHOSTBYNAME_BUFF_SIZE sizeof(struct hostent_data) +#endif /* !defined(HAVE_GETHOSTBYNAME_R_GLIBC2_STYLE) */ + +#elif defined(HAVE_GETHOSTBYNAME_R_RETURN_INT) +#define GETHOSTBYNAME_BUFF_SIZE sizeof(struct hostent_data) +struct hostent *my_gethostbyname_r(const char *name, + struct hostent *result, char *buffer, + int buflen, int *h_errnop); +#define my_gethostbyname_r_free() +#else +#define my_gethostbyname_r(A,B,C,D,E) gethostbyname_r((A),(B),(C),(D),(E)) +#define my_gethostbyname_r_free() +#endif /* !defined(HAVE_GETHOSTBYNAME_R) */ + +#ifndef GETHOSTBYNAME_BUFF_SIZE +#define GETHOSTBYNAME_BUFF_SIZE 2048 +#endif + +/* On SCO you get a link error when refering to h_errno */ +#ifdef SCO +#undef h_errno +#define h_errno errno +#endif + +C_MODE_END +#endif diff --git a/EQ2/source/depends/mysql-5.1.45-winx64/include/my_no_pthread.h b/EQ2/source/depends/mysql-5.1.45-winx64/include/my_no_pthread.h new file mode 100644 index 000000000..511fac407 --- /dev/null +++ b/EQ2/source/depends/mysql-5.1.45-winx64/include/my_no_pthread.h @@ -0,0 +1,58 @@ +/* Copyright (C) 2000 MySQL AB + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; version 2 of the License. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ + + +#if !defined(_my_no_pthread_h) && !defined(THREAD) +#define _my_no_pthread_h + + +/* + This block is to access some thread-related type definitions + even in builds which do not need thread functions, + as some variables (based on these types) are declared + even in non-threaded builds. + Case in point: 'mf_keycache.c' +*/ +#if defined(__WIN__) +#else /* Normal threads */ +#include + +#endif /* defined(__WIN__) */ + + +/* + This undefs some pthread mutex locks when one isn't using threads + to make thread safe code, that should also work in single thread + environment, easier to use. +*/ +#define pthread_mutex_init(A,B) +#define pthread_mutex_lock(A) +#define pthread_mutex_unlock(A) +#define pthread_mutex_destroy(A) +#define my_rwlock_init(A,B) +#define rw_rdlock(A) +#define rw_wrlock(A) +#define rw_unlock(A) +#define rwlock_destroy(A) + +typedef int my_pthread_once_t; +#define MY_PTHREAD_ONCE_INIT 0 +#define MY_PTHREAD_ONCE_DONE 1 + +#define my_pthread_once(C,F) do { \ + if (*(C) != MY_PTHREAD_ONCE_DONE) { F(); *(C)= MY_PTHREAD_ONCE_DONE; } \ + } while(0) + +#endif diff --git a/EQ2/source/depends/mysql-5.1.45-winx64/include/my_pthread.h b/EQ2/source/depends/mysql-5.1.45-winx64/include/my_pthread.h new file mode 100644 index 000000000..e9256610e --- /dev/null +++ b/EQ2/source/depends/mysql-5.1.45-winx64/include/my_pthread.h @@ -0,0 +1,779 @@ +/* Copyright (C) 2000 MySQL AB + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; version 2 of the License. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ + +/* Defines to make different thread packages compatible */ + +#ifndef _my_pthread_h +#define _my_pthread_h + +#ifndef ETIME +#define ETIME ETIMEDOUT /* For FreeBSD */ +#endif + +#ifdef __cplusplus +#define EXTERNC extern "C" +extern "C" { +#else +#define EXTERNC +#endif /* __cplusplus */ + +#if defined(__WIN__) +typedef CRITICAL_SECTION pthread_mutex_t; +typedef HANDLE pthread_t; +typedef struct thread_attr { + DWORD dwStackSize ; + DWORD dwCreatingFlag ; + int priority ; +} pthread_attr_t ; + +typedef struct { int dummy; } pthread_condattr_t; + +/* Implementation of posix conditions */ + +typedef struct st_pthread_link { + DWORD thread_id; + struct st_pthread_link *next; +} pthread_link; + +typedef struct { + uint32 waiting; + CRITICAL_SECTION lock_waiting; + + enum { + SIGNAL= 0, + BROADCAST= 1, + MAX_EVENTS= 2 + } EVENTS; + + HANDLE events[MAX_EVENTS]; + HANDLE broadcast_block_event; + +} pthread_cond_t; + + +typedef int pthread_mutexattr_t; +#define win_pthread_self my_thread_var->pthread_self +#define pthread_self() win_pthread_self +#define pthread_handler_t EXTERNC void * __cdecl +typedef void * (__cdecl *pthread_handler)(void *); + +typedef volatile LONG my_pthread_once_t; +#define MY_PTHREAD_ONCE_INIT 0 +#define MY_PTHREAD_ONCE_INPROGRESS 1 +#define MY_PTHREAD_ONCE_DONE 2 + +/* + Struct and macros to be used in combination with the + windows implementation of pthread_cond_timedwait +*/ + +/* + Declare a union to make sure FILETIME is properly aligned + so it can be used directly as a 64 bit value. The value + stored is in 100ns units. + */ + union ft64 { + FILETIME ft; + __int64 i64; + }; +struct timespec { + union ft64 tv; + /* The max timeout value in millisecond for pthread_cond_timedwait */ + long max_timeout_msec; +}; +#define set_timespec(ABSTIME,SEC) { \ + GetSystemTimeAsFileTime(&((ABSTIME).tv.ft)); \ + (ABSTIME).tv.i64+= (__int64)(SEC)*10000000; \ + (ABSTIME).max_timeout_msec= (long)((SEC)*1000); \ +} +#define set_timespec_nsec(ABSTIME,NSEC) { \ + GetSystemTimeAsFileTime(&((ABSTIME).tv.ft)); \ + (ABSTIME).tv.i64+= (__int64)(NSEC)/100; \ + (ABSTIME).max_timeout_msec= (long)((NSEC)/1000000); \ +} + +void win_pthread_init(void); +int win_pthread_setspecific(void *A,void *B,uint length); +int win_pthread_mutex_trylock(pthread_mutex_t *mutex); +int pthread_create(pthread_t *,pthread_attr_t *,pthread_handler,void *); +int pthread_cond_init(pthread_cond_t *cond, const pthread_condattr_t *attr); +int pthread_cond_wait(pthread_cond_t *cond, pthread_mutex_t *mutex); +int pthread_cond_timedwait(pthread_cond_t *cond, pthread_mutex_t *mutex, + struct timespec *abstime); +int pthread_cond_signal(pthread_cond_t *cond); +int pthread_cond_broadcast(pthread_cond_t *cond); +int pthread_cond_destroy(pthread_cond_t *cond); +int pthread_attr_init(pthread_attr_t *connect_att); +int pthread_attr_setstacksize(pthread_attr_t *connect_att,DWORD stack); +int pthread_attr_setprio(pthread_attr_t *connect_att,int priority); +int pthread_attr_destroy(pthread_attr_t *connect_att); +int my_pthread_once(my_pthread_once_t *once_control,void (*init_routine)(void)); +struct tm *localtime_r(const time_t *timep,struct tm *tmp); +struct tm *gmtime_r(const time_t *timep,struct tm *tmp); + + +void pthread_exit(void *a); /* was #define pthread_exit(A) ExitThread(A)*/ + +#define ETIMEDOUT 145 /* Win32 doesn't have this */ +#define getpid() GetCurrentThreadId() +#define HAVE_LOCALTIME_R 1 +#define _REENTRANT 1 +#define HAVE_PTHREAD_ATTR_SETSTACKSIZE 1 + +/* + Windows has two ways to use thread local storage. The most efficient + is using __declspec(thread), but that does not work properly when + used in a .dll that is loaded at runtime, after program load. So for + libmysql.dll and libmysqld.dll we define USE_TLS in order to use the + TlsXxx() API instead, which works in all cases. +*/ +#ifdef USE_TLS /* For LIBMYSQL.DLL */ +#undef SAFE_MUTEX /* This will cause conflicts */ +#define pthread_key(T,V) DWORD V +#define pthread_key_create(A,B) ((*A=TlsAlloc())==0xFFFFFFFF) +#define pthread_key_delete(A) TlsFree(A) +#define pthread_getspecific(A) (TlsGetValue(A)) +#define my_pthread_getspecific(T,A) ((T) TlsGetValue(A)) +#define my_pthread_getspecific_ptr(T,V) ((T) TlsGetValue(V)) +#define my_pthread_setspecific_ptr(T,V) (!TlsSetValue((T),(V))) +#define pthread_setspecific(A,B) (!TlsSetValue((A),(B))) +#else +#define pthread_key(T,V) __declspec(thread) T V +#define pthread_key_create(A,B) pthread_dummy(0) +#define pthread_key_delete(A) pthread_dummy(0) +#define pthread_getspecific(A) (&(A)) +#define my_pthread_getspecific(T,A) (&(A)) +#define my_pthread_getspecific_ptr(T,V) (V) +#define my_pthread_setspecific_ptr(T,V) ((T)=(V),0) +#define pthread_setspecific(A,B) win_pthread_setspecific(&(A),(B),sizeof(A)) +#endif /* USE_TLS */ + +#define pthread_equal(A,B) ((A) == (B)) +#define pthread_mutex_init(A,B) (InitializeCriticalSection(A),0) +#define pthread_mutex_lock(A) (EnterCriticalSection(A),0) +#define pthread_mutex_trylock(A) win_pthread_mutex_trylock((A)) +#define pthread_mutex_unlock(A) LeaveCriticalSection(A) +#define pthread_mutex_destroy(A) DeleteCriticalSection(A) +#define my_pthread_setprio(A,B) SetThreadPriority(GetCurrentThread(), (B)) +#define pthread_kill(A,B) pthread_dummy((A) ? 0 : ESRCH) + +#define pthread_join(A,B) (WaitForSingleObject((A), INFINITE) != WAIT_OBJECT_0) + +/* Dummy defines for easier code */ +#define pthread_attr_setdetachstate(A,B) pthread_dummy(0) +#define my_pthread_attr_setprio(A,B) pthread_attr_setprio(A,B) +#define pthread_attr_setscope(A,B) +#define pthread_detach_this_thread() +#define pthread_condattr_init(A) +#define pthread_condattr_destroy(A) + +#define my_pthread_getprio(thread_id) pthread_dummy(0) + +#else /* Normal threads */ + +#ifdef HAVE_rts_threads +#define sigwait org_sigwait +#include +#undef sigwait +#endif +#include +#ifndef _REENTRANT +#define _REENTRANT +#endif +#ifdef HAVE_THR_SETCONCURRENCY +#include /* Probably solaris */ +#endif +#ifdef HAVE_SCHED_H +#include +#endif +#ifdef HAVE_SYNCH_H +#include +#endif + +#ifdef __NETWARE__ +void my_pthread_exit(void *status); +#define pthread_exit(A) my_pthread_exit(A) +#endif + +extern int my_pthread_getprio(pthread_t thread_id); + +#define pthread_key(T,V) pthread_key_t V +#define my_pthread_getspecific_ptr(T,V) my_pthread_getspecific(T,(V)) +#define my_pthread_setspecific_ptr(T,V) pthread_setspecific(T,(void*) (V)) +#define pthread_detach_this_thread() +#define pthread_handler_t EXTERNC void * +typedef void *(* pthread_handler)(void *); + +#define my_pthread_once_t pthread_once_t +#define MY_PTHREAD_ONCE_INIT PTHREAD_ONCE_INIT +#define my_pthread_once(C,F) pthread_once(C,F) + +/* Test first for RTS or FSU threads */ + +#if defined(PTHREAD_SCOPE_GLOBAL) && !defined(PTHREAD_SCOPE_SYSTEM) +#define HAVE_rts_threads +extern int my_pthread_create_detached; +#define pthread_sigmask(A,B,C) sigprocmask((A),(B),(C)) +#define PTHREAD_CREATE_DETACHED &my_pthread_create_detached +#define PTHREAD_SCOPE_SYSTEM PTHREAD_SCOPE_GLOBAL +#define PTHREAD_SCOPE_PROCESS PTHREAD_SCOPE_LOCAL +#define USE_ALARM_THREAD +#endif /* defined(PTHREAD_SCOPE_GLOBAL) && !defined(PTHREAD_SCOPE_SYSTEM) */ + +#if defined(_BSDI_VERSION) && _BSDI_VERSION < 199910 +int sigwait(sigset_t *set, int *sig); +#endif + +#ifndef HAVE_NONPOSIX_SIGWAIT +#define my_sigwait(A,B) sigwait((A),(B)) +#else +int my_sigwait(const sigset_t *set,int *sig); +#endif + +#ifdef HAVE_NONPOSIX_PTHREAD_MUTEX_INIT +#ifndef SAFE_MUTEX +#define pthread_mutex_init(a,b) my_pthread_mutex_init((a),(b)) +extern int my_pthread_mutex_init(pthread_mutex_t *mp, + const pthread_mutexattr_t *attr); +#endif /* SAFE_MUTEX */ +#define pthread_cond_init(a,b) my_pthread_cond_init((a),(b)) +extern int my_pthread_cond_init(pthread_cond_t *mp, + const pthread_condattr_t *attr); +#endif /* HAVE_NONPOSIX_PTHREAD_MUTEX_INIT */ + +#if defined(HAVE_SIGTHREADMASK) && !defined(HAVE_PTHREAD_SIGMASK) +#define pthread_sigmask(A,B,C) sigthreadmask((A),(B),(C)) +#endif + +#if !defined(HAVE_SIGWAIT) && !defined(HAVE_rts_threads) && !defined(sigwait) && !defined(alpha_linux_port) && !defined(HAVE_NONPOSIX_SIGWAIT) && !defined(HAVE_DEC_3_2_THREADS) && !defined(_AIX) +int sigwait(sigset_t *setp, int *sigp); /* Use our implemention */ +#endif + + +/* + We define my_sigset() and use that instead of the system sigset() so that + we can favor an implementation based on sigaction(). On some systems, such + as Mac OS X, sigset() results in flags such as SA_RESTART being set, and + we want to make sure that no such flags are set. +*/ +#if defined(HAVE_SIGACTION) && !defined(my_sigset) +#define my_sigset(A,B) do { struct sigaction l_s; sigset_t l_set; int l_rc; \ + DBUG_ASSERT((A) != 0); \ + sigemptyset(&l_set); \ + l_s.sa_handler = (B); \ + l_s.sa_mask = l_set; \ + l_s.sa_flags = 0; \ + l_rc= sigaction((A), &l_s, (struct sigaction *) NULL);\ + DBUG_ASSERT(l_rc == 0); \ + } while (0) +#elif defined(HAVE_SIGSET) && !defined(my_sigset) +#define my_sigset(A,B) sigset((A),(B)) +#elif !defined(my_sigset) +#define my_sigset(A,B) signal((A),(B)) +#endif + +#ifndef my_pthread_setprio +#if defined(HAVE_PTHREAD_SETPRIO_NP) /* FSU threads */ +#define my_pthread_setprio(A,B) pthread_setprio_np((A),(B)) +#elif defined(HAVE_PTHREAD_SETPRIO) +#define my_pthread_setprio(A,B) pthread_setprio((A),(B)) +#elif defined(HAVE_PTHREAD_SETSCHEDPRIO) +#define my_pthread_setprio(A,B) pthread_setschedprio((A),(B)) +#else +extern void my_pthread_setprio(pthread_t thread_id,int prior); +#endif +#endif + +#ifndef my_pthread_attr_setprio +#ifdef HAVE_PTHREAD_ATTR_SETPRIO +#define my_pthread_attr_setprio(A,B) pthread_attr_setprio((A),(B)) +#else +extern void my_pthread_attr_setprio(pthread_attr_t *attr, int priority); +#endif +#endif + +#if !defined(HAVE_PTHREAD_ATTR_SETSCOPE) || defined(HAVE_DEC_3_2_THREADS) +#define pthread_attr_setscope(A,B) +#undef HAVE_GETHOSTBYADDR_R /* No definition */ +#endif + +#if defined(HAVE_BROKEN_PTHREAD_COND_TIMEDWAIT) && !defined(SAFE_MUTEX) +extern int my_pthread_cond_timedwait(pthread_cond_t *cond, + pthread_mutex_t *mutex, + struct timespec *abstime); +#define pthread_cond_timedwait(A,B,C) my_pthread_cond_timedwait((A),(B),(C)) +#endif + +#if !defined( HAVE_NONPOSIX_PTHREAD_GETSPECIFIC) +#define my_pthread_getspecific(A,B) ((A) pthread_getspecific(B)) +#else +#define my_pthread_getspecific(A,B) ((A) my_pthread_getspecific_imp(B)) +void *my_pthread_getspecific_imp(pthread_key_t key); +#endif + +#ifndef HAVE_LOCALTIME_R +struct tm *localtime_r(const time_t *clock, struct tm *res); +#endif + +#ifndef HAVE_GMTIME_R +struct tm *gmtime_r(const time_t *clock, struct tm *res); +#endif + +#ifdef HAVE_PTHREAD_CONDATTR_CREATE +/* DCE threads on HPUX 10.20 */ +#define pthread_condattr_init pthread_condattr_create +#define pthread_condattr_destroy pthread_condattr_delete +#endif + +/* FSU THREADS */ +#if !defined(HAVE_PTHREAD_KEY_DELETE) && !defined(pthread_key_delete) +#define pthread_key_delete(A) pthread_dummy(0) +#endif + +#ifdef HAVE_CTHREADS_WRAPPER /* For MacOSX */ +#define pthread_cond_destroy(A) pthread_dummy(0) +#define pthread_mutex_destroy(A) pthread_dummy(0) +#define pthread_attr_delete(A) pthread_dummy(0) +#define pthread_condattr_delete(A) pthread_dummy(0) +#define pthread_attr_setstacksize(A,B) pthread_dummy(0) +#define pthread_equal(A,B) ((A) == (B)) +#define pthread_cond_timedwait(a,b,c) pthread_cond_wait((a),(b)) +#define pthread_attr_init(A) pthread_attr_create(A) +#define pthread_attr_destroy(A) pthread_attr_delete(A) +#define pthread_attr_setdetachstate(A,B) pthread_dummy(0) +#define pthread_create(A,B,C,D) pthread_create((A),*(B),(C),(D)) +#define pthread_sigmask(A,B,C) sigprocmask((A),(B),(C)) +#define pthread_kill(A,B) pthread_dummy((A) ? 0 : ESRCH) +#undef pthread_detach_this_thread +#define pthread_detach_this_thread() { pthread_t tmp=pthread_self() ; pthread_detach(&tmp); } +#endif + +#ifdef HAVE_DARWIN5_THREADS +#define pthread_sigmask(A,B,C) sigprocmask((A),(B),(C)) +#define pthread_kill(A,B) pthread_dummy((A) ? 0 : ESRCH) +#define pthread_condattr_init(A) pthread_dummy(0) +#define pthread_condattr_destroy(A) pthread_dummy(0) +#undef pthread_detach_this_thread +#define pthread_detach_this_thread() { pthread_t tmp=pthread_self() ; pthread_detach(tmp); } +#endif + +#if ((defined(HAVE_PTHREAD_ATTR_CREATE) && !defined(HAVE_SIGWAIT)) || defined(HAVE_DEC_3_2_THREADS)) && !defined(HAVE_CTHREADS_WRAPPER) +/* This is set on AIX_3_2 and Siemens unix (and DEC OSF/1 3.2 too) */ +#define pthread_key_create(A,B) \ + pthread_keycreate(A,(B) ?\ + (pthread_destructor_t) (B) :\ + (pthread_destructor_t) pthread_dummy) +#define pthread_attr_init(A) pthread_attr_create(A) +#define pthread_attr_destroy(A) pthread_attr_delete(A) +#define pthread_attr_setdetachstate(A,B) pthread_dummy(0) +#define pthread_create(A,B,C,D) pthread_create((A),*(B),(C),(D)) +#ifndef pthread_sigmask +#define pthread_sigmask(A,B,C) sigprocmask((A),(B),(C)) +#endif +#define pthread_kill(A,B) pthread_dummy((A) ? 0 : ESRCH) +#undef pthread_detach_this_thread +#define pthread_detach_this_thread() { pthread_t tmp=pthread_self() ; pthread_detach(&tmp); } +#elif !defined(__NETWARE__) /* HAVE_PTHREAD_ATTR_CREATE && !HAVE_SIGWAIT */ +#define HAVE_PTHREAD_KILL +#endif + +#endif /* defined(__WIN__) */ + +#if defined(HPUX10) && !defined(DONT_REMAP_PTHREAD_FUNCTIONS) +#undef pthread_cond_timedwait +#define pthread_cond_timedwait(a,b,c) my_pthread_cond_timedwait((a),(b),(c)) +int my_pthread_cond_timedwait(pthread_cond_t *cond, pthread_mutex_t *mutex, + struct timespec *abstime); +#endif + +#if defined(HPUX10) +#define pthread_attr_getstacksize(A,B) my_pthread_attr_getstacksize(A,B) +void my_pthread_attr_getstacksize(pthread_attr_t *attrib, size_t *size); +#endif + +#if defined(HAVE_POSIX1003_4a_MUTEX) && !defined(DONT_REMAP_PTHREAD_FUNCTIONS) +#undef pthread_mutex_trylock +#define pthread_mutex_trylock(a) my_pthread_mutex_trylock((a)) +int my_pthread_mutex_trylock(pthread_mutex_t *mutex); +#endif + +/* + The defines set_timespec and set_timespec_nsec should be used + for calculating an absolute time at which + pthread_cond_timedwait should timeout +*/ +#ifdef HAVE_TIMESPEC_TS_SEC +#ifndef set_timespec +#define set_timespec(ABSTIME,SEC) \ +{ \ + (ABSTIME).ts_sec=time(0) + (time_t) (SEC); \ + (ABSTIME).ts_nsec=0; \ +} +#endif /* !set_timespec */ +#ifndef set_timespec_nsec +#define set_timespec_nsec(ABSTIME,NSEC) \ +{ \ + ulonglong now= my_getsystime() + (NSEC/100); \ + (ABSTIME).ts_sec= (now / ULL(10000000)); \ + (ABSTIME).ts_nsec= (now % ULL(10000000) * 100 + ((NSEC) % 100)); \ +} +#endif /* !set_timespec_nsec */ +#else +#ifndef set_timespec +#define set_timespec(ABSTIME,SEC) \ +{\ + struct timeval tv;\ + gettimeofday(&tv,0);\ + (ABSTIME).tv_sec=tv.tv_sec+(time_t) (SEC);\ + (ABSTIME).tv_nsec=tv.tv_usec*1000;\ +} +#endif /* !set_timespec */ +#ifndef set_timespec_nsec +#define set_timespec_nsec(ABSTIME,NSEC) \ +{\ + ulonglong now= my_getsystime() + (NSEC/100); \ + (ABSTIME).tv_sec= (time_t) (now / ULL(10000000)); \ + (ABSTIME).tv_nsec= (long) (now % ULL(10000000) * 100 + ((NSEC) % 100)); \ +} +#endif /* !set_timespec_nsec */ +#endif /* HAVE_TIMESPEC_TS_SEC */ + + /* safe_mutex adds checking to mutex for easier debugging */ + +#if defined(__NETWARE__) && !defined(SAFE_MUTEX_DETECT_DESTROY) +#define SAFE_MUTEX_DETECT_DESTROY +#endif + +typedef struct st_safe_mutex_t +{ + pthread_mutex_t global,mutex; + const char *file; + uint line,count; + pthread_t thread; +#ifdef SAFE_MUTEX_DETECT_DESTROY + struct st_safe_mutex_info_t *info; /* to track destroying of mutexes */ +#endif +} safe_mutex_t; + +#ifdef SAFE_MUTEX_DETECT_DESTROY +/* + Used to track the destroying of mutexes. This needs to be a seperate + structure because the safe_mutex_t structure could be freed before + the mutexes are destroyed. +*/ + +typedef struct st_safe_mutex_info_t +{ + struct st_safe_mutex_info_t *next; + struct st_safe_mutex_info_t *prev; + const char *init_file; + uint32 init_line; +} safe_mutex_info_t; +#endif /* SAFE_MUTEX_DETECT_DESTROY */ + +int safe_mutex_init(safe_mutex_t *mp, const pthread_mutexattr_t *attr, + const char *file, uint line); +int safe_mutex_lock(safe_mutex_t *mp, my_bool try_lock, const char *file, uint line); +int safe_mutex_unlock(safe_mutex_t *mp,const char *file, uint line); +int safe_mutex_destroy(safe_mutex_t *mp,const char *file, uint line); +int safe_cond_wait(pthread_cond_t *cond, safe_mutex_t *mp,const char *file, + uint line); +int safe_cond_timedwait(pthread_cond_t *cond, safe_mutex_t *mp, + struct timespec *abstime, const char *file, uint line); +void safe_mutex_global_init(void); +void safe_mutex_end(FILE *file); + + /* Wrappers if safe mutex is actually used */ +#ifdef SAFE_MUTEX +#undef pthread_mutex_init +#undef pthread_mutex_lock +#undef pthread_mutex_unlock +#undef pthread_mutex_destroy +#undef pthread_mutex_wait +#undef pthread_mutex_timedwait +#undef pthread_mutex_t +#undef pthread_cond_wait +#undef pthread_cond_timedwait +#undef pthread_mutex_trylock +#define pthread_mutex_init(A,B) safe_mutex_init((A),(B),__FILE__,__LINE__) +#define pthread_mutex_lock(A) safe_mutex_lock((A), FALSE, __FILE__, __LINE__) +#define pthread_mutex_unlock(A) safe_mutex_unlock((A),__FILE__,__LINE__) +#define pthread_mutex_destroy(A) safe_mutex_destroy((A),__FILE__,__LINE__) +#define pthread_cond_wait(A,B) safe_cond_wait((A),(B),__FILE__,__LINE__) +#define pthread_cond_timedwait(A,B,C) safe_cond_timedwait((A),(B),(C),__FILE__,__LINE__) +#define pthread_mutex_trylock(A) safe_mutex_lock((A), TRUE, __FILE__, __LINE__) +#define pthread_mutex_t safe_mutex_t +#define safe_mutex_assert_owner(mp) \ + DBUG_ASSERT((mp)->count > 0 && \ + pthread_equal(pthread_self(), (mp)->thread)) +#define safe_mutex_assert_not_owner(mp) \ + DBUG_ASSERT(! (mp)->count || \ + ! pthread_equal(pthread_self(), (mp)->thread)) +#else +#define safe_mutex_assert_owner(mp) +#define safe_mutex_assert_not_owner(mp) +#endif /* SAFE_MUTEX */ + +#if defined(MY_PTHREAD_FASTMUTEX) && !defined(SAFE_MUTEX) +typedef struct st_my_pthread_fastmutex_t +{ + pthread_mutex_t mutex; + uint spins; + uint rng_state; +} my_pthread_fastmutex_t; +void fastmutex_global_init(void); + +int my_pthread_fastmutex_init(my_pthread_fastmutex_t *mp, + const pthread_mutexattr_t *attr); +int my_pthread_fastmutex_lock(my_pthread_fastmutex_t *mp); + +#undef pthread_mutex_init +#undef pthread_mutex_lock +#undef pthread_mutex_unlock +#undef pthread_mutex_destroy +#undef pthread_mutex_wait +#undef pthread_mutex_timedwait +#undef pthread_mutex_t +#undef pthread_cond_wait +#undef pthread_cond_timedwait +#undef pthread_mutex_trylock +#define pthread_mutex_init(A,B) my_pthread_fastmutex_init((A),(B)) +#define pthread_mutex_lock(A) my_pthread_fastmutex_lock(A) +#define pthread_mutex_unlock(A) pthread_mutex_unlock(&(A)->mutex) +#define pthread_mutex_destroy(A) pthread_mutex_destroy(&(A)->mutex) +#define pthread_cond_wait(A,B) pthread_cond_wait((A),&(B)->mutex) +#define pthread_cond_timedwait(A,B,C) pthread_cond_timedwait((A),&(B)->mutex,(C)) +#define pthread_mutex_trylock(A) pthread_mutex_trylock(&(A)->mutex) +#define pthread_mutex_t my_pthread_fastmutex_t +#endif /* defined(MY_PTHREAD_FASTMUTEX) && !defined(SAFE_MUTEX) */ + + /* READ-WRITE thread locking */ + +#ifdef HAVE_BROKEN_RWLOCK /* For OpenUnix */ +#undef HAVE_PTHREAD_RWLOCK_RDLOCK +#undef HAVE_RWLOCK_INIT +#undef HAVE_RWLOCK_T +#endif + +#if defined(USE_MUTEX_INSTEAD_OF_RW_LOCKS) +/* use these defs for simple mutex locking */ +#define rw_lock_t pthread_mutex_t +#define my_rwlock_init(A,B) pthread_mutex_init((A),(B)) +#define rw_rdlock(A) pthread_mutex_lock((A)) +#define rw_wrlock(A) pthread_mutex_lock((A)) +#define rw_tryrdlock(A) pthread_mutex_trylock((A)) +#define rw_trywrlock(A) pthread_mutex_trylock((A)) +#define rw_unlock(A) pthread_mutex_unlock((A)) +#define rwlock_destroy(A) pthread_mutex_destroy((A)) +#elif defined(HAVE_PTHREAD_RWLOCK_RDLOCK) +#define rw_lock_t pthread_rwlock_t +#define my_rwlock_init(A,B) pthread_rwlock_init((A),(B)) +#define rw_rdlock(A) pthread_rwlock_rdlock(A) +#define rw_wrlock(A) pthread_rwlock_wrlock(A) +#define rw_tryrdlock(A) pthread_rwlock_tryrdlock((A)) +#define rw_trywrlock(A) pthread_rwlock_trywrlock((A)) +#define rw_unlock(A) pthread_rwlock_unlock(A) +#define rwlock_destroy(A) pthread_rwlock_destroy(A) +#elif defined(HAVE_RWLOCK_INIT) +#ifdef HAVE_RWLOCK_T /* For example Solaris 2.6-> */ +#define rw_lock_t rwlock_t +#endif +#define my_rwlock_init(A,B) rwlock_init((A),USYNC_THREAD,0) +#else +/* Use our own version of read/write locks */ +typedef struct _my_rw_lock_t { + pthread_mutex_t lock; /* lock for structure */ + pthread_cond_t readers; /* waiting readers */ + pthread_cond_t writers; /* waiting writers */ + int state; /* -1:writer,0:free,>0:readers */ + int waiters; /* number of waiting writers */ +} my_rw_lock_t; + +#define rw_lock_t my_rw_lock_t +#define rw_rdlock(A) my_rw_rdlock((A)) +#define rw_wrlock(A) my_rw_wrlock((A)) +#define rw_tryrdlock(A) my_rw_tryrdlock((A)) +#define rw_trywrlock(A) my_rw_trywrlock((A)) +#define rw_unlock(A) my_rw_unlock((A)) +#define rwlock_destroy(A) my_rwlock_destroy((A)) + +extern int my_rwlock_init(my_rw_lock_t *, void *); +extern int my_rwlock_destroy(my_rw_lock_t *); +extern int my_rw_rdlock(my_rw_lock_t *); +extern int my_rw_wrlock(my_rw_lock_t *); +extern int my_rw_unlock(my_rw_lock_t *); +extern int my_rw_tryrdlock(my_rw_lock_t *); +extern int my_rw_trywrlock(my_rw_lock_t *); +#endif /* USE_MUTEX_INSTEAD_OF_RW_LOCKS */ + +#define GETHOSTBYADDR_BUFF_SIZE 2048 + +#ifndef HAVE_THR_SETCONCURRENCY +#define thr_setconcurrency(A) pthread_dummy(0) +#endif +#if !defined(HAVE_PTHREAD_ATTR_SETSTACKSIZE) && ! defined(pthread_attr_setstacksize) +#define pthread_attr_setstacksize(A,B) pthread_dummy(0) +#endif + +/* Define mutex types, see my_thr_init.c */ +#define MY_MUTEX_INIT_SLOW NULL +#ifdef PTHREAD_ADAPTIVE_MUTEX_INITIALIZER_NP +extern pthread_mutexattr_t my_fast_mutexattr; +#define MY_MUTEX_INIT_FAST &my_fast_mutexattr +#else +#define MY_MUTEX_INIT_FAST NULL +#endif +#ifdef PTHREAD_ERRORCHECK_MUTEX_INITIALIZER_NP +extern pthread_mutexattr_t my_errorcheck_mutexattr; +#define MY_MUTEX_INIT_ERRCHK &my_errorcheck_mutexattr +#else +#define MY_MUTEX_INIT_ERRCHK NULL +#endif + +#ifndef ESRCH +/* Define it to something */ +#define ESRCH 1 +#endif + +typedef ulong my_thread_id; + +extern my_bool my_thread_global_init(void); +extern void my_thread_global_end(void); +extern my_bool my_thread_init(void); +extern void my_thread_end(void); +extern const char *my_thread_name(void); +extern my_thread_id my_thread_dbug_id(void); +extern int pthread_no_free(void *); +extern int pthread_dummy(int); + +/* All thread specific variables are in the following struct */ + +#define THREAD_NAME_SIZE 10 +#ifndef DEFAULT_THREAD_STACK +#if SIZEOF_CHARP > 4 +/* + MySQL can survive with 32K, but some glibc libraries require > 128K stack + To resolve hostnames. Also recursive stored procedures needs stack. +*/ +#define DEFAULT_THREAD_STACK (256*1024L) +#else +#define DEFAULT_THREAD_STACK (192*1024) +#endif +#endif + +struct st_my_thread_var +{ + int thr_errno; + pthread_cond_t suspend; + pthread_mutex_t mutex; + pthread_mutex_t * volatile current_mutex; + pthread_cond_t * volatile current_cond; + pthread_t pthread_self; + my_thread_id id; + int cmp_length; + int volatile abort; + my_bool init; + struct st_my_thread_var *next,**prev; + void *opt_info; +#ifndef DBUG_OFF + void *dbug; + char name[THREAD_NAME_SIZE+1]; +#endif +}; + +extern struct st_my_thread_var *_my_thread_var(void) __attribute__ ((const)); +extern uint my_thread_end_wait_time; +#define my_thread_var (_my_thread_var()) +#define my_errno my_thread_var->thr_errno +/* + Keep track of shutdown,signal, and main threads so that my_end() will not + report errors with them +*/ + +/* Which kind of thread library is in use */ + +#define THD_LIB_OTHER 1 +#define THD_LIB_NPTL 2 +#define THD_LIB_LT 4 + +extern uint thd_lib_detected; + +/* + thread_safe_xxx functions are for critical statistic or counters. + The implementation is guaranteed to be thread safe, on all platforms. + Note that the calling code should *not* assume the counter is protected + by the mutex given, as the implementation of these helpers may change + to use my_atomic operations instead. +*/ + +/* + Warning: + When compiling without threads, this file is not included. + See the *other* declarations of thread_safe_xxx in include/my_global.h + + Second warning: + See include/config-win.h, for yet another implementation. +*/ +#ifdef THREAD +#ifndef thread_safe_increment +#define thread_safe_increment(V,L) \ + (pthread_mutex_lock((L)), (V)++, pthread_mutex_unlock((L))) +#define thread_safe_decrement(V,L) \ + (pthread_mutex_lock((L)), (V)--, pthread_mutex_unlock((L))) +#endif + +#ifndef thread_safe_add +#define thread_safe_add(V,C,L) \ + (pthread_mutex_lock((L)), (V)+=(C), pthread_mutex_unlock((L))) +#define thread_safe_sub(V,C,L) \ + (pthread_mutex_lock((L)), (V)-=(C), pthread_mutex_unlock((L))) +#endif +#endif + +/* + statistics_xxx functions are for non critical statistic, + maintained in global variables. + When compiling with SAFE_STATISTICS: + - race conditions can not occur. + - some locking occurs, which may cause performance degradation. + + When compiling without SAFE_STATISTICS: + - race conditions can occur, making the result slightly inaccurate. + - the lock given is not honored. +*/ +#ifdef SAFE_STATISTICS +#define statistic_increment(V,L) thread_safe_increment((V),(L)) +#define statistic_decrement(V,L) thread_safe_decrement((V),(L)) +#define statistic_add(V,C,L) thread_safe_add((V),(C),(L)) +#define statistic_sub(V,C,L) thread_safe_sub((V),(C),(L)) +#else +#define statistic_decrement(V,L) (V)-- +#define statistic_increment(V,L) (V)++ +#define statistic_add(V,C,L) (V)+=(C) +#define statistic_sub(V,C,L) (V)-=(C) +#endif /* SAFE_STATISTICS */ + +/* + No locking needed, the counter is owned by the thread +*/ +#define status_var_increment(V) (V)++ +#define status_var_decrement(V) (V)-- +#define status_var_add(V,C) (V)+=(C) +#define status_var_sub(V,C) (V)-=(C) + +#ifdef __cplusplus +} +#endif +#endif /* _my_ptread_h */ diff --git a/EQ2/source/depends/mysql-5.1.45-winx64/include/my_sys.h b/EQ2/source/depends/mysql-5.1.45-winx64/include/my_sys.h new file mode 100644 index 000000000..a4ff5c30d --- /dev/null +++ b/EQ2/source/depends/mysql-5.1.45-winx64/include/my_sys.h @@ -0,0 +1,994 @@ +/* Copyright (C) 2000-2003 MySQL AB + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; version 2 of the License. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ + +#ifndef _my_sys_h +#define _my_sys_h +C_MODE_START + +#ifdef HAVE_AIOWAIT +#include /* Used by record-cache */ +typedef struct my_aio_result { + aio_result_t result; + int pending; +} my_aio_result; +#endif + +#ifndef THREAD +extern int NEAR my_errno; /* Last error in mysys */ +#else +#include +#endif + +#include /* for CHARSET_INFO */ +#include +#include + +#define MYSYS_PROGRAM_USES_CURSES() { error_handler_hook = my_message_curses; mysys_uses_curses=1; } +#define MYSYS_PROGRAM_DONT_USE_CURSES() { error_handler_hook = my_message_no_curses; mysys_uses_curses=0;} +#define MY_INIT(name); { my_progname= name; my_init(); } + +#define MY_FILE_ERROR ((size_t) -1) + + /* General bitmaps for my_func's */ +#define MY_FFNF 1 /* Fatal if file not found */ +#define MY_FNABP 2 /* Fatal if not all bytes read/writen */ +#define MY_NABP 4 /* Error if not all bytes read/writen */ +#define MY_FAE 8 /* Fatal if any error */ +#define MY_WME 16 /* Write message on error */ +#define MY_WAIT_IF_FULL 32 /* Wait and try again if disk full error */ +#define MY_IGNORE_BADFD 32 /* my_sync: ignore 'bad descriptor' errors */ +#define MY_SYNC_DIR 1024 /* my_create/delete/rename: sync directory */ +#define MY_RAID 64 /* Support for RAID */ +#define MY_FULL_IO 512 /* For my_read - loop intil I/O is complete */ +#define MY_DONT_CHECK_FILESIZE 128 /* Option to init_io_cache() */ +#define MY_LINK_WARNING 32 /* my_redel() gives warning if links */ +#define MY_COPYTIME 64 /* my_redel() copys time */ +#define MY_DELETE_OLD 256 /* my_create_with_symlink() */ +#define MY_RESOLVE_LINK 128 /* my_realpath(); Only resolve links */ +#define MY_HOLD_ORIGINAL_MODES 128 /* my_copy() holds to file modes */ +#define MY_REDEL_MAKE_BACKUP 256 +#define MY_SEEK_NOT_DONE 32 /* my_lock may have to do a seek */ +#define MY_DONT_WAIT 64 /* my_lock() don't wait if can't lock */ +#define MY_ZEROFILL 32 /* my_malloc(), fill array with zero */ +#define MY_ALLOW_ZERO_PTR 64 /* my_realloc() ; zero ptr -> malloc */ +#define MY_FREE_ON_ERROR 128 /* my_realloc() ; Free old ptr on error */ +#define MY_HOLD_ON_ERROR 256 /* my_realloc() ; Return old ptr on error */ +#define MY_DONT_OVERWRITE_FILE 1024 /* my_copy: Don't overwrite file */ +#define MY_THREADSAFE 2048 /* my_seek(): lock fd mutex */ +#define MY_SYNC 4096 /* my_copy(): sync dst file */ + +#define MY_CHECK_ERROR 1 /* Params to my_end; Check open-close */ +#define MY_GIVE_INFO 2 /* Give time info about process*/ +#define MY_DONT_FREE_DBUG 4 /* Do not call DBUG_END() in my_end() */ + +#define MY_REMOVE_NONE 0 /* Params for modify_defaults_file */ +#define MY_REMOVE_OPTION 1 +#define MY_REMOVE_SECTION 2 + +#define ME_HIGHBYTE 8 /* Shift for colours */ +#define ME_NOCUR 1 /* Don't use curses message */ +#define ME_OLDWIN 2 /* Use old window */ +#define ME_BELL 4 /* Ring bell then printing message */ +#define ME_HOLDTANG 8 /* Don't delete last keys */ +#define ME_WAITTOT 16 /* Wait for errtime secs of for a action */ +#define ME_WAITTANG 32 /* Wait for a user action */ +#define ME_NOREFRESH 64 /* Dont refresh screen */ +#define ME_NOINPUT 128 /* Dont use the input libary */ +#define ME_COLOUR1 ((1 << ME_HIGHBYTE)) /* Possibly error-colours */ +#define ME_COLOUR2 ((2 << ME_HIGHBYTE)) +#define ME_COLOUR3 ((3 << ME_HIGHBYTE)) +#define ME_FATALERROR 1024 /* Fatal statement error */ +#define ME_NO_WARNING_FOR_ERROR 2048 /* Don't push a warning for error */ +#define ME_NO_SP_HANDLER 4096 /* Don't call stored routine error handlers */ + + /* Bits in last argument to fn_format */ +#define MY_REPLACE_DIR 1 /* replace dir in name with 'dir' */ +#define MY_REPLACE_EXT 2 /* replace extension with 'ext' */ +#define MY_UNPACK_FILENAME 4 /* Unpack name (~ -> home) */ +#define MY_PACK_FILENAME 8 /* Pack name (home -> ~) */ +#define MY_RESOLVE_SYMLINKS 16 /* Resolve all symbolic links */ +#define MY_RETURN_REAL_PATH 32 /* return full path for file */ +#define MY_SAFE_PATH 64 /* Return NULL if too long path */ +#define MY_RELATIVE_PATH 128 /* name is relative to 'dir' */ +#define MY_APPEND_EXT 256 /* add 'ext' as additional extension*/ + + + /* My seek flags */ +#define MY_SEEK_SET 0 +#define MY_SEEK_CUR 1 +#define MY_SEEK_END 2 + + /* Some constants */ +#define MY_WAIT_FOR_USER_TO_FIX_PANIC 60 /* in seconds */ +#define MY_WAIT_GIVE_USER_A_MESSAGE 10 /* Every 10 times of prev */ +#define MIN_COMPRESS_LENGTH 50 /* Don't compress small bl. */ +#define DFLT_INIT_HITS 3 + + /* root_alloc flags */ +#define MY_KEEP_PREALLOC 1 +#define MY_MARK_BLOCKS_FREE 2 /* move used to free list and reuse them */ + + /* Internal error numbers (for assembler functions) */ +#define MY_ERRNO_EDOM 33 +#define MY_ERRNO_ERANGE 34 + + /* Bits for get_date timeflag */ +#define GETDATE_DATE_TIME 1 +#define GETDATE_SHORT_DATE 2 +#define GETDATE_HHMMSSTIME 4 +#define GETDATE_GMT 8 +#define GETDATE_FIXEDLENGTH 16 + + /* defines when allocating data */ +#ifdef SAFEMALLOC +#define my_malloc(SZ,FLAG) _mymalloc((SZ), __FILE__, __LINE__, FLAG ) +#define my_malloc_ci(SZ,FLAG) _mymalloc((SZ), sFile, uLine, FLAG ) +#define my_realloc(PTR,SZ,FLAG) _myrealloc((PTR), (SZ), __FILE__, __LINE__, FLAG ) +#define my_checkmalloc() _sanity( __FILE__, __LINE__ ) +#define my_free(PTR,FLAG) _myfree((PTR), __FILE__, __LINE__,FLAG) +#define my_memdup(A,B,C) _my_memdup((A),(B), __FILE__,__LINE__,C) +#define my_strdup(A,C) _my_strdup((A), __FILE__,__LINE__,C) +#define my_strndup(A,B,C) _my_strndup((A),(B),__FILE__,__LINE__,C) +#define TRASH(A,B) bfill(A, B, 0x8F) +#define QUICK_SAFEMALLOC sf_malloc_quick=1 +#define NORMAL_SAFEMALLOC sf_malloc_quick=0 +extern uint sf_malloc_prehunc,sf_malloc_endhunc,sf_malloc_quick; +extern ulonglong sf_malloc_mem_limit; + +#define CALLER_INFO_PROTO , const char *sFile, uint uLine +#define CALLER_INFO , __FILE__, __LINE__ +#define ORIG_CALLER_INFO , sFile, uLine +#else +#define my_checkmalloc() +#undef TERMINATE +#define TERMINATE(A,B) {} +#define QUICK_SAFEMALLOC +#define NORMAL_SAFEMALLOC +extern void *my_malloc(size_t Size,myf MyFlags); +#define my_malloc_ci(SZ,FLAG) my_malloc( SZ, FLAG ) +extern void *my_realloc(void *oldpoint, size_t Size, myf MyFlags); +extern void my_no_flags_free(void *ptr); +extern void *my_memdup(const void *from,size_t length,myf MyFlags); +extern char *my_strdup(const char *from,myf MyFlags); +extern char *my_strndup(const char *from, size_t length, + myf MyFlags); +/* we do use FG (as a no-op) in below so that a typo on FG is caught */ +#define my_free(PTR,FG) ((void)FG,my_no_flags_free(PTR)) +#define CALLER_INFO_PROTO /* nothing */ +#define CALLER_INFO /* nothing */ +#define ORIG_CALLER_INFO /* nothing */ +#define TRASH(A,B) /* nothing */ +#endif + +#if defined(ENABLED_DEBUG_SYNC) +extern void (*debug_sync_C_callback_ptr)(const char *, size_t); +#define DEBUG_SYNC_C(_sync_point_name_) do { \ + if (debug_sync_C_callback_ptr != NULL) \ + (*debug_sync_C_callback_ptr)(STRING_WITH_LEN(_sync_point_name_)); } \ + while(0) +#else +#define DEBUG_SYNC_C(_sync_point_name_) +#endif /* defined(ENABLED_DEBUG_SYNC) */ + +#ifdef HAVE_LARGE_PAGES +extern uint my_get_large_page_size(void); +extern uchar * my_large_malloc(size_t size, myf my_flags); +extern void my_large_free(uchar * ptr, myf my_flags); +#else +#define my_get_large_page_size() (0) +#define my_large_malloc(A,B) my_malloc_lock((A),(B)) +#define my_large_free(A,B) my_free_lock((A),(B)) +#endif /* HAVE_LARGE_PAGES */ + +#ifdef HAVE_ALLOCA +#if defined(_AIX) && !defined(__GNUC__) && !defined(_AIX43) +#pragma alloca +#endif /* _AIX */ +#if defined(__MWERKS__) +#undef alloca +#define alloca _alloca +#endif /* __MWERKS__ */ +#if defined(__GNUC__) && !defined(HAVE_ALLOCA_H) && ! defined(alloca) +#define alloca __builtin_alloca +#endif /* GNUC */ +#define my_alloca(SZ) alloca((size_t) (SZ)) +#define my_afree(PTR) {} +#else +#define my_alloca(SZ) my_malloc(SZ,MYF(0)) +#define my_afree(PTR) my_free(PTR,MYF(MY_WME)) +#endif /* HAVE_ALLOCA */ + +#ifndef errno /* did we already get it? */ +#ifdef HAVE_ERRNO_AS_DEFINE +#include /* errno is a define */ +#else +extern int errno; /* declare errno */ +#endif +#endif /* #ifndef errno */ +extern char *home_dir; /* Home directory for user */ +extern const char *my_progname; /* program-name (printed in errors) */ +extern char NEAR curr_dir[]; /* Current directory for user */ +extern int (*error_handler_hook)(uint my_err, const char *str,myf MyFlags); +extern int (*fatal_error_handler_hook)(uint my_err, const char *str, + myf MyFlags); +extern uint my_file_limit; +extern ulong my_thread_stack_size; + +#ifdef HAVE_LARGE_PAGES +extern my_bool my_use_large_pages; +extern uint my_large_page_size; +#endif + +/* charsets */ +extern MYSQL_PLUGIN_IMPORT CHARSET_INFO *default_charset_info; +extern MYSQL_PLUGIN_IMPORT CHARSET_INFO *all_charsets[256]; +extern CHARSET_INFO compiled_charsets[]; + +/* statistics */ +extern ulong my_file_opened,my_stream_opened, my_tmp_file_created; +extern ulong my_file_total_opened; +extern uint mysys_usage_id; +extern my_bool my_init_done; + + /* Point to current my_message() */ +extern void (*my_sigtstp_cleanup)(void), + /* Executed before jump to shell */ + (*my_sigtstp_restart)(void), + (*my_abort_hook)(int); + /* Executed when comming from shell */ +extern MYSQL_PLUGIN_IMPORT int NEAR my_umask; /* Default creation mask */ +extern int NEAR my_umask_dir, + NEAR my_recived_signals, /* Signals we have got */ + NEAR my_safe_to_handle_signal, /* Set when allowed to SIGTSTP */ + NEAR my_dont_interrupt; /* call remember_intr when set */ +extern my_bool NEAR mysys_uses_curses, my_use_symdir; +extern size_t sf_malloc_cur_memory, sf_malloc_max_memory; + +extern ulong my_default_record_cache_size; +extern my_bool NEAR my_disable_locking,NEAR my_disable_async_io, + NEAR my_disable_flush_key_blocks, NEAR my_disable_symlinks; +extern char wild_many,wild_one,wild_prefix; +extern const char *charsets_dir; +/* from default.c */ +extern char *my_defaults_extra_file; +extern const char *my_defaults_group_suffix; +extern const char *my_defaults_file; + +extern my_bool timed_mutexes; + +typedef struct wild_file_pack /* Struct to hold info when selecting files */ +{ + uint wilds; /* How many wildcards */ + uint not_pos; /* Start of not-theese-files */ + char * *wild; /* Pointer to wildcards */ +} WF_PACK; + +enum loglevel { + ERROR_LEVEL, + WARNING_LEVEL, + INFORMATION_LEVEL +}; + +enum cache_type +{ + TYPE_NOT_SET= 0, READ_CACHE, WRITE_CACHE, + SEQ_READ_APPEND /* sequential read or append */, + READ_FIFO, READ_NET,WRITE_NET}; + +enum flush_type +{ + FLUSH_KEEP, /* flush block and keep it in the cache */ + FLUSH_RELEASE, /* flush block and remove it from the cache */ + FLUSH_IGNORE_CHANGED, /* remove block from the cache */ + /* + As my_disable_flush_pagecache_blocks is always 0, the following option + is strictly equivalent to FLUSH_KEEP + */ + FLUSH_FORCE_WRITE +}; + +typedef struct st_record_cache /* Used when cacheing records */ +{ + File file; + int rc_seek,error,inited; + uint rc_length,read_length,reclength; + my_off_t rc_record_pos,end_of_file; + uchar *rc_buff,*rc_buff2,*rc_pos,*rc_end,*rc_request_pos; +#ifdef HAVE_AIOWAIT + int use_async_io; + my_aio_result aio_result; +#endif + enum cache_type type; +} RECORD_CACHE; + +enum file_type +{ + UNOPEN = 0, FILE_BY_OPEN, FILE_BY_CREATE, STREAM_BY_FOPEN, STREAM_BY_FDOPEN, + FILE_BY_MKSTEMP, FILE_BY_DUP +}; + +struct st_my_file_info +{ + char * name; + enum file_type type; +#if defined(THREAD) && !defined(HAVE_PREAD) + pthread_mutex_t mutex; +#endif +}; + +extern struct st_my_file_info *my_file_info; + +typedef struct st_dynamic_array +{ + uchar *buffer; + uint elements,max_element; + uint alloc_increment; + uint size_of_element; +} DYNAMIC_ARRAY; + +typedef struct st_my_tmpdir +{ + DYNAMIC_ARRAY full_list; + char **list; + uint cur, max; +#ifdef THREAD + pthread_mutex_t mutex; +#endif +} MY_TMPDIR; + +typedef struct st_dynamic_string +{ + char *str; + size_t length,max_length,alloc_increment; +} DYNAMIC_STRING; + +struct st_io_cache; +typedef int (*IO_CACHE_CALLBACK)(struct st_io_cache*); + +#ifdef THREAD +typedef struct st_io_cache_share +{ + pthread_mutex_t mutex; /* To sync on reads into buffer. */ + pthread_cond_t cond; /* To wait for signals. */ + pthread_cond_t cond_writer; /* For a synchronized writer. */ + /* Offset in file corresponding to the first byte of buffer. */ + my_off_t pos_in_file; + /* If a synchronized write cache is the source of the data. */ + struct st_io_cache *source_cache; + uchar *buffer; /* The read buffer. */ + uchar *read_end; /* Behind last valid byte of buffer. */ + int running_threads; /* threads not in lock. */ + int total_threads; /* threads sharing the cache. */ + int error; /* Last error. */ +#ifdef NOT_YET_IMPLEMENTED + /* whether the structure should be free'd */ + my_bool alloced; +#endif +} IO_CACHE_SHARE; +#endif + +typedef struct st_io_cache /* Used when cacheing files */ +{ + /* Offset in file corresponding to the first byte of uchar* buffer. */ + my_off_t pos_in_file; + /* + The offset of end of file for READ_CACHE and WRITE_CACHE. + For SEQ_READ_APPEND it the maximum of the actual end of file and + the position represented by read_end. + */ + my_off_t end_of_file; + /* Points to current read position in the buffer */ + uchar *read_pos; + /* the non-inclusive boundary in the buffer for the currently valid read */ + uchar *read_end; + uchar *buffer; /* The read buffer */ + /* Used in ASYNC_IO */ + uchar *request_pos; + + /* Only used in WRITE caches and in SEQ_READ_APPEND to buffer writes */ + uchar *write_buffer; + /* + Only used in SEQ_READ_APPEND, and points to the current read position + in the write buffer. Note that reads in SEQ_READ_APPEND caches can + happen from both read buffer (uchar* buffer) and write buffer + (uchar* write_buffer). + */ + uchar *append_read_pos; + /* Points to current write position in the write buffer */ + uchar *write_pos; + /* The non-inclusive boundary of the valid write area */ + uchar *write_end; + + /* + Current_pos and current_end are convenience variables used by + my_b_tell() and other routines that need to know the current offset + current_pos points to &write_pos, and current_end to &write_end in a + WRITE_CACHE, and &read_pos and &read_end respectively otherwise + */ + uchar **current_pos, **current_end; +#ifdef THREAD + /* + The lock is for append buffer used in SEQ_READ_APPEND cache + need mutex copying from append buffer to read buffer. + */ + pthread_mutex_t append_buffer_lock; + /* + The following is used when several threads are reading the + same file in parallel. They are synchronized on disk + accesses reading the cached part of the file asynchronously. + It should be set to NULL to disable the feature. Only + READ_CACHE mode is supported. + */ + IO_CACHE_SHARE *share; +#endif + /* + A caller will use my_b_read() macro to read from the cache + if the data is already in cache, it will be simply copied with + memcpy() and internal variables will be accordinging updated with + no functions invoked. However, if the data is not fully in the cache, + my_b_read() will call read_function to fetch the data. read_function + must never be invoked directly. + */ + int (*read_function)(struct st_io_cache *,uchar *,size_t); + /* + Same idea as in the case of read_function, except my_b_write() needs to + be replaced with my_b_append() for a SEQ_READ_APPEND cache + */ + int (*write_function)(struct st_io_cache *,const uchar *,size_t); + /* + Specifies the type of the cache. Depending on the type of the cache + certain operations might not be available and yield unpredicatable + results. Details to be documented later + */ + enum cache_type type; + /* + Callbacks when the actual read I/O happens. These were added and + are currently used for binary logging of LOAD DATA INFILE - when a + block is read from the file, we create a block create/append event, and + when IO_CACHE is closed, we create an end event. These functions could, + of course be used for other things + */ + IO_CACHE_CALLBACK pre_read; + IO_CACHE_CALLBACK post_read; + IO_CACHE_CALLBACK pre_close; + /* + Counts the number of times, when we were forced to use disk. We use it to + increase the binlog_cache_disk_use status variable. + */ + ulong disk_writes; + void* arg; /* for use by pre/post_read */ + char *file_name; /* if used with 'open_cached_file' */ + char *dir,*prefix; + File file; /* file descriptor */ + /* + seek_not_done is set by my_b_seek() to inform the upcoming read/write + operation that a seek needs to be preformed prior to the actual I/O + error is 0 if the cache operation was successful, -1 if there was a + "hard" error, and the actual number of I/O-ed bytes if the read/write was + partial. + */ + int seek_not_done,error; + /* buffer_length is memory size allocated for buffer or write_buffer */ + size_t buffer_length; + /* read_length is the same as buffer_length except when we use async io */ + size_t read_length; + myf myflags; /* Flags used to my_read/my_write */ + /* + alloced_buffer is 1 if the buffer was allocated by init_io_cache() and + 0 if it was supplied by the user. + Currently READ_NET is the only one that will use a buffer allocated + somewhere else + */ + my_bool alloced_buffer; +#ifdef HAVE_AIOWAIT + /* + As inidicated by ifdef, this is for async I/O, which is not currently + used (because it's not reliable on all systems) + */ + uint inited; + my_off_t aio_read_pos; + my_aio_result aio_result; +#endif +} IO_CACHE; + +typedef int (*qsort2_cmp)(const void *, const void *, const void *); + + /* defines for mf_iocache */ + + /* Test if buffer is inited */ +#define my_b_clear(info) (info)->buffer=0 +#define my_b_inited(info) (info)->buffer +#define my_b_EOF INT_MIN + +#define my_b_read(info,Buffer,Count) \ + ((info)->read_pos + (Count) <= (info)->read_end ?\ + (memcpy(Buffer,(info)->read_pos,(size_t) (Count)), \ + ((info)->read_pos+=(Count)),0) :\ + (*(info)->read_function)((info),Buffer,Count)) + +#define my_b_write(info,Buffer,Count) \ + ((info)->write_pos + (Count) <=(info)->write_end ?\ + (memcpy((info)->write_pos, (Buffer), (size_t)(Count)),\ + ((info)->write_pos+=(Count)),0) : \ + (*(info)->write_function)((info),(uchar *)(Buffer),(Count))) + +#define my_b_get(info) \ + ((info)->read_pos != (info)->read_end ?\ + ((info)->read_pos++, (int) (uchar) (info)->read_pos[-1]) :\ + _my_b_get(info)) + + /* my_b_write_byte dosn't have any err-check */ +#define my_b_write_byte(info,chr) \ + (((info)->write_pos < (info)->write_end) ?\ + ((*(info)->write_pos++)=(chr)) :\ + (_my_b_write(info,0,0) , ((*(info)->write_pos++)=(chr)))) + +#define my_b_fill_cache(info) \ + (((info)->read_end=(info)->read_pos),(*(info)->read_function)(info,0,0)) + +#define my_b_tell(info) ((info)->pos_in_file + \ + (size_t) (*(info)->current_pos - (info)->request_pos)) + +#define my_b_get_buffer_start(info) (info)->request_pos +#define my_b_get_bytes_in_buffer(info) (char*) (info)->read_end - \ + (char*) my_b_get_buffer_start(info) +#define my_b_get_pos_in_file(info) (info)->pos_in_file + +/* tell write offset in the SEQ_APPEND cache */ +int my_b_copy_to_file(IO_CACHE *cache, FILE *file); +my_off_t my_b_append_tell(IO_CACHE* info); +my_off_t my_b_safe_tell(IO_CACHE* info); /* picks the correct tell() */ + +#define my_b_bytes_in_cache(info) (size_t) (*(info)->current_end - \ + *(info)->current_pos) + +typedef uint32 ha_checksum; + +/* Define the type of function to be passed to process_default_option_files */ +typedef int (*Process_option_func)(void *ctx, const char *group_name, + const char *option); + +#include + + + /* Prototypes for mysys and my_func functions */ + +extern int my_copy(const char *from,const char *to,myf MyFlags); +extern int my_append(const char *from,const char *to,myf MyFlags); +extern int my_delete(const char *name,myf MyFlags); +extern int my_getwd(char * buf,size_t size,myf MyFlags); +extern int my_setwd(const char *dir,myf MyFlags); +extern int my_lock(File fd,int op,my_off_t start, my_off_t length,myf MyFlags); +extern void *my_once_alloc(size_t Size,myf MyFlags); +extern void my_once_free(void); +extern char *my_once_strdup(const char *src,myf myflags); +extern void *my_once_memdup(const void *src, size_t len, myf myflags); +extern File my_open(const char *FileName,int Flags,myf MyFlags); +extern File my_register_filename(File fd, const char *FileName, + enum file_type type_of_file, + uint error_message_number, myf MyFlags); +extern File my_create(const char *FileName,int CreateFlags, + int AccessFlags, myf MyFlags); +extern int my_close(File Filedes,myf MyFlags); +extern File my_dup(File file, myf MyFlags); +extern int my_mkdir(const char *dir, int Flags, myf MyFlags); +extern int my_readlink(char *to, const char *filename, myf MyFlags); +extern int my_is_symlink(const char *filename); +extern int my_realpath(char *to, const char *filename, myf MyFlags); +extern File my_create_with_symlink(const char *linkname, const char *filename, + int createflags, int access_flags, + myf MyFlags); +extern int my_delete_with_symlink(const char *name, myf MyFlags); +extern int my_rename_with_symlink(const char *from,const char *to,myf MyFlags); +extern int my_symlink(const char *content, const char *linkname, myf MyFlags); +extern size_t my_read(File Filedes,uchar *Buffer,size_t Count,myf MyFlags); +extern size_t my_pread(File Filedes,uchar *Buffer,size_t Count,my_off_t offset, + myf MyFlags); +extern int my_rename(const char *from,const char *to,myf MyFlags); +extern my_off_t my_seek(File fd,my_off_t pos,int whence,myf MyFlags); +extern my_off_t my_tell(File fd,myf MyFlags); +extern size_t my_write(File Filedes,const uchar *Buffer,size_t Count, + myf MyFlags); +extern size_t my_pwrite(File Filedes,const uchar *Buffer,size_t Count, + my_off_t offset,myf MyFlags); +extern size_t my_fread(FILE *stream,uchar *Buffer,size_t Count,myf MyFlags); +extern size_t my_fwrite(FILE *stream,const uchar *Buffer,size_t Count, + myf MyFlags); +extern my_off_t my_fseek(FILE *stream,my_off_t pos,int whence,myf MyFlags); +extern my_off_t my_ftell(FILE *stream,myf MyFlags); +extern void *_mymalloc(size_t uSize,const char *sFile, + uint uLine, myf MyFlag); +extern void *_myrealloc(void *pPtr,size_t uSize,const char *sFile, + uint uLine, myf MyFlag); +extern void * my_multi_malloc _VARARGS((myf MyFlags, ...)); +extern void _myfree(void *pPtr,const char *sFile,uint uLine, myf MyFlag); +extern int _sanity(const char *sFile, uint uLine); +extern void *_my_memdup(const void *from, size_t length, + const char *sFile, uint uLine,myf MyFlag); +extern char * _my_strdup(const char *from, const char *sFile, uint uLine, + myf MyFlag); +extern char *_my_strndup(const char *from, size_t length, + const char *sFile, uint uLine, + myf MyFlag); + +/* implemented in my_memmem.c */ +extern void *my_memmem(const void *haystack, size_t haystacklen, + const void *needle, size_t needlelen); + + +#ifdef __WIN__ +extern int my_access(const char *path, int amode); +extern File my_sopen(const char *path, int oflag, int shflag, int pmode); +#else +#define my_access access +#endif +extern int check_if_legal_filename(const char *path); +extern int check_if_legal_tablename(const char *path); + +#if defined(__WIN__) && defined(__NT__) +extern int nt_share_delete(const char *name,myf MyFlags); +#define my_delete_allow_opened(fname,flags) nt_share_delete((fname),(flags)) +#else +#define my_delete_allow_opened(fname,flags) my_delete((fname),(flags)) +#endif + +#ifndef TERMINATE +extern void TERMINATE(FILE *file, uint flag); +#endif +extern void init_glob_errs(void); +extern void wait_for_free_space(const char *filename, int errors); +extern FILE *my_fopen(const char *FileName,int Flags,myf MyFlags); +extern FILE *my_fdopen(File Filedes,const char *name, int Flags,myf MyFlags); +extern int my_fclose(FILE *fd,myf MyFlags); +extern int my_chsize(File fd,my_off_t newlength, int filler, myf MyFlags); +extern int my_sync(File fd, myf my_flags); +extern int my_sync_dir(const char *dir_name, myf my_flags); +extern int my_sync_dir_by_file(const char *file_name, myf my_flags); +extern int my_error _VARARGS((int nr,myf MyFlags, ...)); +extern int my_printf_error _VARARGS((uint my_err, const char *format, + myf MyFlags, ...)) + ATTRIBUTE_FORMAT(printf, 2, 4); +extern int my_error_register(const char **errmsgs, int first, int last); +extern const char **my_error_unregister(int first, int last); +extern int my_message(uint my_err, const char *str,myf MyFlags); +extern int my_message_no_curses(uint my_err, const char *str,myf MyFlags); +extern int my_message_curses(uint my_err, const char *str,myf MyFlags); +extern my_bool my_init(void); +extern void my_end(int infoflag); +extern int my_redel(const char *from, const char *to, int MyFlags); +extern int my_copystat(const char *from, const char *to, int MyFlags); +extern char * my_filename(File fd); + +#ifndef THREAD +extern void dont_break(void); +extern void allow_break(void); +#else +#define dont_break() +#define allow_break() +#endif + +#ifdef EXTRA_DEBUG +void my_print_open_files(void); +#else +#define my_print_open_files() +#endif + +extern my_bool init_tmpdir(MY_TMPDIR *tmpdir, const char *pathlist); +extern char *my_tmpdir(MY_TMPDIR *tmpdir); +extern void free_tmpdir(MY_TMPDIR *tmpdir); + +extern void my_remember_signal(int signal_number,sig_handler (*func)(int)); +extern size_t dirname_part(char * to,const char *name, size_t *to_res_length); +extern size_t dirname_length(const char *name); +#define base_name(A) (A+dirname_length(A)) +extern int test_if_hard_path(const char *dir_name); +extern my_bool has_path(const char *name); +extern char *convert_dirname(char *to, const char *from, const char *from_end); +extern void to_unix_path(char * name); +extern char * fn_ext(const char *name); +extern char * fn_same(char * toname,const char *name,int flag); +extern char * fn_format(char * to,const char *name,const char *dir, + const char *form, uint flag); +extern size_t strlength(const char *str); +extern void pack_dirname(char * to,const char *from); +extern size_t normalize_dirname(char * to, const char *from); +extern size_t unpack_dirname(char * to,const char *from); +extern size_t cleanup_dirname(char * to,const char *from); +extern size_t system_filename(char * to,const char *from); +extern size_t unpack_filename(char * to,const char *from); +extern char * intern_filename(char * to,const char *from); +extern char * directory_file_name(char * dst, const char *src); +extern int pack_filename(char * to, const char *name, size_t max_length); +extern char * my_path(char * to,const char *progname, + const char *own_pathname_part); +extern char * my_load_path(char * to, const char *path, + const char *own_path_prefix); +extern int wild_compare(const char *str,const char *wildstr, + pbool str_is_pattern); +extern WF_PACK *wf_comp(char * str); +extern int wf_test(struct wild_file_pack *wf_pack,const char *name); +extern void wf_end(struct wild_file_pack *buffer); +extern my_bool array_append_string_unique(const char *str, + const char **array, size_t size); +extern void get_date(char * to,int timeflag,time_t use_time); +extern void soundex(CHARSET_INFO *, char * out_pntr, char * in_pntr, + pbool remove_garbage); +extern int init_record_cache(RECORD_CACHE *info,size_t cachesize,File file, + size_t reclength,enum cache_type type, + pbool use_async_io); +extern int read_cache_record(RECORD_CACHE *info,uchar *to); +extern int end_record_cache(RECORD_CACHE *info); +extern int write_cache_record(RECORD_CACHE *info,my_off_t filepos, + const uchar *record,size_t length); +extern int flush_write_cache(RECORD_CACHE *info); +extern long my_clock(void); +extern sig_handler sigtstp_handler(int signal_number); +extern void handle_recived_signals(void); + +extern sig_handler my_set_alarm_variable(int signo); +extern void my_string_ptr_sort(uchar *base,uint items,size_t size); +extern void radixsort_for_str_ptr(uchar* base[], uint number_of_elements, + size_t size_of_element,uchar *buffer[]); +extern qsort_t my_qsort(void *base_ptr, size_t total_elems, size_t size, + qsort_cmp cmp); +extern qsort_t my_qsort2(void *base_ptr, size_t total_elems, size_t size, + qsort2_cmp cmp, void *cmp_argument); +extern qsort2_cmp get_ptr_compare(size_t); +void my_store_ptr(uchar *buff, size_t pack_length, my_off_t pos); +my_off_t my_get_ptr(uchar *ptr, size_t pack_length); +extern int init_io_cache(IO_CACHE *info,File file,size_t cachesize, + enum cache_type type,my_off_t seek_offset, + pbool use_async_io, myf cache_myflags); +extern my_bool reinit_io_cache(IO_CACHE *info,enum cache_type type, + my_off_t seek_offset,pbool use_async_io, + pbool clear_cache); +extern void setup_io_cache(IO_CACHE* info); +extern int _my_b_read(IO_CACHE *info,uchar *Buffer,size_t Count); +#ifdef THREAD +extern int _my_b_read_r(IO_CACHE *info,uchar *Buffer,size_t Count); +extern void init_io_cache_share(IO_CACHE *read_cache, IO_CACHE_SHARE *cshare, + IO_CACHE *write_cache, uint num_threads); +extern void remove_io_thread(IO_CACHE *info); +#endif +extern int _my_b_seq_read(IO_CACHE *info,uchar *Buffer,size_t Count); +extern int _my_b_net_read(IO_CACHE *info,uchar *Buffer,size_t Count); +extern int _my_b_get(IO_CACHE *info); +extern int _my_b_async_read(IO_CACHE *info,uchar *Buffer,size_t Count); +extern int _my_b_write(IO_CACHE *info,const uchar *Buffer,size_t Count); +extern int my_b_append(IO_CACHE *info,const uchar *Buffer,size_t Count); +extern int my_b_safe_write(IO_CACHE *info,const uchar *Buffer,size_t Count); + +extern int my_block_write(IO_CACHE *info, const uchar *Buffer, + size_t Count, my_off_t pos); +extern int my_b_flush_io_cache(IO_CACHE *info, int need_append_buffer_lock); + +#define flush_io_cache(info) my_b_flush_io_cache((info),1) + +extern int end_io_cache(IO_CACHE *info); +extern size_t my_b_fill(IO_CACHE *info); +extern void my_b_seek(IO_CACHE *info,my_off_t pos); +extern size_t my_b_gets(IO_CACHE *info, char *to, size_t max_length); +extern my_off_t my_b_filelength(IO_CACHE *info); +extern size_t my_b_printf(IO_CACHE *info, const char* fmt, ...); +extern size_t my_b_vprintf(IO_CACHE *info, const char* fmt, va_list ap); +extern my_bool open_cached_file(IO_CACHE *cache,const char *dir, + const char *prefix, size_t cache_size, + myf cache_myflags); +extern my_bool real_open_cached_file(IO_CACHE *cache); +extern void close_cached_file(IO_CACHE *cache); +File create_temp_file(char *to, const char *dir, const char *pfx, + int mode, myf MyFlags); +#define my_init_dynamic_array(A,B,C,D) init_dynamic_array2(A,B,NULL,C,D CALLER_INFO) +#define my_init_dynamic_array_ci(A,B,C,D) init_dynamic_array2(A,B,NULL,C,D ORIG_CALLER_INFO) +#define my_init_dynamic_array2(A,B,C,D,E) init_dynamic_array2(A,B,C,D,E CALLER_INFO) +#define my_init_dynamic_array2_ci(A,B,C,D,E) init_dynamic_array2(A,B,C,D,E ORIG_CALLER_INFO) +extern my_bool init_dynamic_array2(DYNAMIC_ARRAY *array,uint element_size, + void *init_buffer, uint init_alloc, + uint alloc_increment + CALLER_INFO_PROTO); +/* init_dynamic_array() function is deprecated */ +extern my_bool init_dynamic_array(DYNAMIC_ARRAY *array,uint element_size, + uint init_alloc,uint alloc_increment + CALLER_INFO_PROTO); +extern my_bool insert_dynamic(DYNAMIC_ARRAY *array,uchar * element); +extern uchar *alloc_dynamic(DYNAMIC_ARRAY *array); +extern uchar *pop_dynamic(DYNAMIC_ARRAY*); +extern my_bool set_dynamic(DYNAMIC_ARRAY *array,uchar * element,uint array_index); +extern my_bool allocate_dynamic(DYNAMIC_ARRAY *array, uint max_elements); +extern void get_dynamic(DYNAMIC_ARRAY *array,uchar * element,uint array_index); +extern void delete_dynamic(DYNAMIC_ARRAY *array); +extern void delete_dynamic_element(DYNAMIC_ARRAY *array, uint array_index); +extern void freeze_size(DYNAMIC_ARRAY *array); +extern int get_index_dynamic(DYNAMIC_ARRAY *array, uchar * element); +#define dynamic_array_ptr(array,array_index) ((array)->buffer+(array_index)*(array)->size_of_element) +#define dynamic_element(array,array_index,type) ((type)((array)->buffer) +(array_index)) +#define push_dynamic(A,B) insert_dynamic((A),(B)) +#define reset_dynamic(array) ((array)->elements= 0) +#define sort_dynamic(A,cmp) my_qsort((A)->buffer, (A)->elements, (A)->size_of_element, (cmp)) + +extern my_bool init_dynamic_string(DYNAMIC_STRING *str, const char *init_str, + size_t init_alloc,size_t alloc_increment); +extern my_bool dynstr_append(DYNAMIC_STRING *str, const char *append); +my_bool dynstr_append_mem(DYNAMIC_STRING *str, const char *append, + size_t length); +extern my_bool dynstr_append_os_quoted(DYNAMIC_STRING *str, const char *append, + ...); +extern my_bool dynstr_set(DYNAMIC_STRING *str, const char *init_str); +extern my_bool dynstr_realloc(DYNAMIC_STRING *str, size_t additional_size); +extern my_bool dynstr_trunc(DYNAMIC_STRING *str, size_t n); +extern void dynstr_free(DYNAMIC_STRING *str); +#ifdef HAVE_MLOCK +extern void *my_malloc_lock(size_t length,myf flags); +extern void my_free_lock(void *ptr,myf flags); +#else +#define my_malloc_lock(A,B) my_malloc((A),(B)) +#define my_free_lock(A,B) my_free((A),(B)) +#endif +#define alloc_root_inited(A) ((A)->min_malloc != 0) +#define ALLOC_ROOT_MIN_BLOCK_SIZE (MALLOC_OVERHEAD + sizeof(USED_MEM) + 8) +#define clear_alloc_root(A) do { (A)->free= (A)->used= (A)->pre_alloc= 0; (A)->min_malloc=0;} while(0) +extern void init_alloc_root(MEM_ROOT *mem_root, size_t block_size, + size_t pre_alloc_size); +extern void *alloc_root(MEM_ROOT *mem_root, size_t Size); +extern void *multi_alloc_root(MEM_ROOT *mem_root, ...); +extern void free_root(MEM_ROOT *root, myf MyFLAGS); +extern void set_prealloc_root(MEM_ROOT *root, char *ptr); +extern void reset_root_defaults(MEM_ROOT *mem_root, size_t block_size, + size_t prealloc_size); +extern char *strdup_root(MEM_ROOT *root,const char *str); +extern char *strmake_root(MEM_ROOT *root,const char *str,size_t len); +extern void *memdup_root(MEM_ROOT *root,const void *str, size_t len); +extern int get_defaults_options(int argc, char **argv, + char **defaults, char **extra_defaults, + char **group_suffix); +extern int my_load_defaults(const char *conf_file, const char **groups, + int *argc, char ***argv, const char ***); +extern int load_defaults(const char *conf_file, const char **groups, + int *argc, char ***argv); +extern int modify_defaults_file(const char *file_location, const char *option, + const char *option_value, + const char *section_name, int remove_option); +extern int my_search_option_files(const char *conf_file, int *argc, + char ***argv, uint *args_used, + Process_option_func func, void *func_ctx, + const char **default_directories); +extern void free_defaults(char **argv); +extern void my_print_default_files(const char *conf_file); +extern void print_defaults(const char *conf_file, const char **groups); +extern my_bool my_compress(uchar *, size_t *, size_t *); +extern my_bool my_uncompress(uchar *, size_t , size_t *); +extern uchar *my_compress_alloc(const uchar *packet, size_t *len, + size_t *complen); +extern int packfrm(uchar *, size_t, uchar **, size_t *); +extern int unpackfrm(uchar **, size_t *, const uchar *); + +extern ha_checksum my_checksum(ha_checksum crc, const uchar *mem, + size_t count); +extern void my_sleep(ulong m_seconds); +extern ulong crc32(ulong crc, const uchar *buf, uint len); +extern uint my_set_max_open_files(uint files); +void my_free_open_file_info(void); + +extern time_t my_time(myf flags); +extern ulonglong my_getsystime(void); +extern ulonglong my_micro_time(); +extern ulonglong my_micro_time_and_time(time_t *time_arg); +time_t my_time_possible_from_micro(ulonglong microtime); +extern my_bool my_gethwaddr(uchar *to); +extern int my_getncpus(); + +#ifdef HAVE_SYS_MMAN_H +#include + +#ifndef MAP_NOSYNC +#define MAP_NOSYNC 0 +#endif +#ifndef MAP_NORESERVE +#define MAP_NORESERVE 0 /* For irix and AIX */ +#endif + +#ifdef HAVE_MMAP64 +#define my_mmap(a,b,c,d,e,f) mmap64(a,b,c,d,e,f) +#else +#define my_mmap(a,b,c,d,e,f) mmap(a,b,c,d,e,f) +#endif +#define my_munmap(a,b) munmap((a),(b)) + +#else +/* not a complete set of mmap() flags, but only those that nesessary */ +#define PROT_READ 1 +#define PROT_WRITE 2 +#define MAP_NORESERVE 0 +#define MAP_SHARED 0x0001 +#define MAP_PRIVATE 0x0002 +#define MAP_NOSYNC 0x0800 +#define MAP_FAILED ((void *)-1) +#define MS_SYNC 0x0000 + +#ifndef __NETWARE__ +#define HAVE_MMAP +#endif + +void *my_mmap(void *, size_t, int, int, int, my_off_t); +int my_munmap(void *, size_t); +#endif + +/* my_getpagesize */ +#ifdef HAVE_GETPAGESIZE +#define my_getpagesize() getpagesize() +#else +int my_getpagesize(void); +#endif + +int my_msync(int, void *, size_t, int); + +/* character sets */ +extern uint get_charset_number(const char *cs_name, uint cs_flags); +extern uint get_collation_number(const char *name); +extern const char *get_charset_name(uint cs_number); + +extern CHARSET_INFO *get_charset(uint cs_number, myf flags); +extern CHARSET_INFO *get_charset_by_name(const char *cs_name, myf flags); +extern CHARSET_INFO *get_charset_by_csname(const char *cs_name, + uint cs_flags, myf my_flags); + +extern my_bool resolve_charset(const char *cs_name, + CHARSET_INFO *default_cs, + CHARSET_INFO **cs); +extern my_bool resolve_collation(const char *cl_name, + CHARSET_INFO *default_cl, + CHARSET_INFO **cl); + +extern char *get_charsets_dir(char *buf); +extern my_bool my_charset_same(CHARSET_INFO *cs1, CHARSET_INFO *cs2); +extern my_bool init_compiled_charsets(myf flags); +extern void add_compiled_collation(CHARSET_INFO *cs); +extern size_t escape_string_for_mysql(CHARSET_INFO *charset_info, + char *to, size_t to_length, + const char *from, size_t length); +#ifdef __WIN__ +#define BACKSLASH_MBTAIL +/* File system character set */ +extern CHARSET_INFO *fs_character_set(void); +#endif +extern size_t escape_quotes_for_mysql(CHARSET_INFO *charset_info, + char *to, size_t to_length, + const char *from, size_t length); + +extern void thd_increment_bytes_sent(ulong length); +extern void thd_increment_bytes_received(ulong length); +extern void thd_increment_net_big_packet_count(ulong length); + +#ifdef __WIN__ +extern my_bool have_tcpip; /* Is set if tcpip is used */ + +/* implemented in my_windac.c */ + +int my_security_attr_create(SECURITY_ATTRIBUTES **psa, const char **perror, + DWORD owner_rights, DWORD everybody_rights); + +void my_security_attr_free(SECURITY_ATTRIBUTES *sa); + +/* implemented in my_conio.c */ +char* my_cgets(char *string, size_t clen, size_t* plen); + +#endif +#ifdef __NETWARE__ +void netware_reg_user(const char *ip, const char *user, + const char *application); +#endif + +C_MODE_END +#endif /* _my_sys_h */ diff --git a/EQ2/source/depends/mysql-5.1.45-winx64/include/my_xml.h b/EQ2/source/depends/mysql-5.1.45-winx64/include/my_xml.h new file mode 100644 index 000000000..6a453ee90 --- /dev/null +++ b/EQ2/source/depends/mysql-5.1.45-winx64/include/my_xml.h @@ -0,0 +1,89 @@ +/* Copyright (C) 2000 MySQL AB + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; version 2 of the License. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ + + +#ifndef _my_xml_h +#define _my_xml_h + +#ifdef __cplusplus +extern "C" { +#endif + + +#define MY_XML_OK 0 +#define MY_XML_ERROR 1 + +/* + A flag whether to use absolute tag names in call-back functions, + like "a", "a.b" and "a.b.c" (used in character set file parser), + or relative names like "a", "b" and "c". +*/ +#define MY_XML_FLAG_RELATIVE_NAMES 1 + +/* + A flag whether to skip normilization of text values before calling + call-back functions: i.e. skip leading/trailing spaces, + \r, \n, \t characters. +*/ +#define MY_XML_FLAG_SKIP_TEXT_NORMALIZATION 2 + +enum my_xml_node_type +{ + MY_XML_NODE_TAG, /* can have TAG, ATTR and TEXT children */ + MY_XML_NODE_ATTR, /* can have TEXT children */ + MY_XML_NODE_TEXT /* cannot have children */ +}; + +typedef struct xml_stack_st +{ + int flags; + enum my_xml_node_type current_node_type; + char errstr[128]; + char attr[128]; + char *attrend; + const char *beg; + const char *cur; + const char *end; + void *user_data; + int (*enter)(struct xml_stack_st *st,const char *val, size_t len); + int (*value)(struct xml_stack_st *st,const char *val, size_t len); + int (*leave_xml)(struct xml_stack_st *st,const char *val, size_t len); +} MY_XML_PARSER; + +void my_xml_parser_create(MY_XML_PARSER *st); +void my_xml_parser_free(MY_XML_PARSER *st); +int my_xml_parse(MY_XML_PARSER *st,const char *str, size_t len); + +void my_xml_set_value_handler(MY_XML_PARSER *st, int (*)(MY_XML_PARSER *, + const char *, + size_t len)); +void my_xml_set_enter_handler(MY_XML_PARSER *st, int (*)(MY_XML_PARSER *, + const char *, + size_t len)); +void my_xml_set_leave_handler(MY_XML_PARSER *st, int (*)(MY_XML_PARSER *, + const char *, + size_t len)); +void my_xml_set_user_data(MY_XML_PARSER *st, void *); + +size_t my_xml_error_pos(MY_XML_PARSER *st); +uint my_xml_error_lineno(MY_XML_PARSER *st); + +const char *my_xml_error_string(MY_XML_PARSER *st); + +#ifdef __cplusplus +} +#endif + +#endif /* _my_xml_h */ diff --git a/EQ2/source/depends/mysql-5.1.45-winx64/include/mysql.h b/EQ2/source/depends/mysql-5.1.45-winx64/include/mysql.h new file mode 100644 index 000000000..d114afb6c --- /dev/null +++ b/EQ2/source/depends/mysql-5.1.45-winx64/include/mysql.h @@ -0,0 +1,867 @@ +/* Copyright (C) 2000-2003 MySQL AB + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; version 2 of the License. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ + +/* + This file defines the client API to MySQL and also the ABI of the + dynamically linked libmysqlclient. + + The ABI should never be changed in a released product of MySQL + thus you need to take great care when changing the file. In case + the file is changed so the ABI is broken, you must also + update the SHAREDLIB_MAJOR_VERSION in configure.in . + +*/ + +#ifndef _mysql_h +#define _mysql_h + +#ifdef _AIX /* large-file support will break without this */ +#include +#endif + +#ifdef __CYGWIN__ /* CYGWIN implements a UNIX API */ +#undef WIN +#undef _WIN +#undef _WIN32 +#undef _WIN64 +#undef __WIN__ +#endif + +#ifdef __cplusplus +extern "C" { +#endif + +#ifndef _global_h /* If not standard header */ +#include +#ifdef __LCC__ +#include /* For windows */ +#endif +typedef char my_bool; +#if (defined(_WIN32) || defined(_WIN64)) && !defined(__WIN__) +#define __WIN__ +#endif +#if !defined(__WIN__) +#define STDCALL +#else +#define STDCALL __stdcall +#endif + +#ifndef my_socket_defined +#ifdef __WIN__ +#define my_socket SOCKET +#else +typedef int my_socket; +#endif /* __WIN__ */ +#endif /* my_socket_defined */ +#endif /* _global_h */ + +#include "mysql_version.h" +#include "mysql_com.h" +#include "mysql_time.h" + +#include "my_list.h" /* for LISTs used in 'MYSQL' and 'MYSQL_STMT' */ + +extern unsigned int mysql_port; +extern char *mysql_unix_port; + +#define CLIENT_NET_READ_TIMEOUT 365*24*3600 /* Timeout on read */ +#define CLIENT_NET_WRITE_TIMEOUT 365*24*3600 /* Timeout on write */ + +#ifdef __NETWARE__ +#pragma pack(push, 8) /* 8 byte alignment */ +#endif + +#define IS_PRI_KEY(n) ((n) & PRI_KEY_FLAG) +#define IS_NOT_NULL(n) ((n) & NOT_NULL_FLAG) +#define IS_BLOB(n) ((n) & BLOB_FLAG) +#define IS_NUM(t) ((t) <= MYSQL_TYPE_INT24 || (t) == MYSQL_TYPE_YEAR || (t) == MYSQL_TYPE_NEWDECIMAL) +#define IS_NUM_FIELD(f) ((f)->flags & NUM_FLAG) +#define INTERNAL_NUM_FIELD(f) (((f)->type <= MYSQL_TYPE_INT24 && ((f)->type != MYSQL_TYPE_TIMESTAMP || (f)->length == 14 || (f)->length == 8)) || (f)->type == MYSQL_TYPE_YEAR) +#define IS_LONGDATA(t) ((t) >= MYSQL_TYPE_TINY_BLOB && (t) <= MYSQL_TYPE_STRING) + + +typedef struct st_mysql_field { + char *name; /* Name of column */ + char *org_name; /* Original column name, if an alias */ + char *table; /* Table of column if column was a field */ + char *org_table; /* Org table name, if table was an alias */ + char *db; /* Database for table */ + char *catalog; /* Catalog for table */ + char *def; /* Default value (set by mysql_list_fields) */ + unsigned long length; /* Width of column (create length) */ + unsigned long max_length; /* Max width for selected set */ + unsigned int name_length; + unsigned int org_name_length; + unsigned int table_length; + unsigned int org_table_length; + unsigned int db_length; + unsigned int catalog_length; + unsigned int def_length; + unsigned int flags; /* Div flags */ + unsigned int decimals; /* Number of decimals in field */ + unsigned int charsetnr; /* Character set */ + enum enum_field_types type; /* Type of field. See mysql_com.h for types */ + void *extension; +} MYSQL_FIELD; + +typedef char **MYSQL_ROW; /* return data as array of strings */ +typedef unsigned int MYSQL_FIELD_OFFSET; /* offset to current field */ + +#ifndef _global_h +#if defined(NO_CLIENT_LONG_LONG) +typedef unsigned long my_ulonglong; +#elif defined (__WIN__) +typedef unsigned __int64 my_ulonglong; +#else +typedef unsigned long long my_ulonglong; +#endif +#endif + +#include "typelib.h" + +#define MYSQL_COUNT_ERROR (~(my_ulonglong) 0) + +/* backward compatibility define - to be removed eventually */ +#define ER_WARN_DATA_TRUNCATED WARN_DATA_TRUNCATED + +typedef struct st_mysql_rows { + struct st_mysql_rows *next; /* list of rows */ + MYSQL_ROW data; + unsigned long length; +} MYSQL_ROWS; + +typedef MYSQL_ROWS *MYSQL_ROW_OFFSET; /* offset to current row */ + +#include "my_alloc.h" + +typedef struct embedded_query_result EMBEDDED_QUERY_RESULT; +typedef struct st_mysql_data { + MYSQL_ROWS *data; + struct embedded_query_result *embedded_info; + MEM_ROOT alloc; + my_ulonglong rows; + unsigned int fields; + /* extra info for embedded library */ + void *extension; +} MYSQL_DATA; + +enum mysql_option +{ + MYSQL_OPT_CONNECT_TIMEOUT, MYSQL_OPT_COMPRESS, MYSQL_OPT_NAMED_PIPE, + MYSQL_INIT_COMMAND, MYSQL_READ_DEFAULT_FILE, MYSQL_READ_DEFAULT_GROUP, + MYSQL_SET_CHARSET_DIR, MYSQL_SET_CHARSET_NAME, MYSQL_OPT_LOCAL_INFILE, + MYSQL_OPT_PROTOCOL, MYSQL_SHARED_MEMORY_BASE_NAME, MYSQL_OPT_READ_TIMEOUT, + MYSQL_OPT_WRITE_TIMEOUT, MYSQL_OPT_USE_RESULT, + MYSQL_OPT_USE_REMOTE_CONNECTION, MYSQL_OPT_USE_EMBEDDED_CONNECTION, + MYSQL_OPT_GUESS_CONNECTION, MYSQL_SET_CLIENT_IP, MYSQL_SECURE_AUTH, + MYSQL_REPORT_DATA_TRUNCATION, MYSQL_OPT_RECONNECT, + MYSQL_OPT_SSL_VERIFY_SERVER_CERT +}; + +struct st_mysql_options { + unsigned int connect_timeout, read_timeout, write_timeout; + unsigned int port, protocol; + unsigned long client_flag; + char *host,*user,*password,*unix_socket,*db; + struct st_dynamic_array *init_commands; + char *my_cnf_file,*my_cnf_group, *charset_dir, *charset_name; + char *ssl_key; /* PEM key file */ + char *ssl_cert; /* PEM cert file */ + char *ssl_ca; /* PEM CA file */ + char *ssl_capath; /* PEM directory of CA-s? */ + char *ssl_cipher; /* cipher to use */ + char *shared_memory_base_name; + unsigned long max_allowed_packet; + my_bool use_ssl; /* if to use SSL or not */ + my_bool compress,named_pipe; + /* + On connect, find out the replication role of the server, and + establish connections to all the peers + */ + my_bool rpl_probe; + /* + Each call to mysql_real_query() will parse it to tell if it is a read + or a write, and direct it to the slave or the master + */ + my_bool rpl_parse; + /* + If set, never read from a master, only from slave, when doing + a read that is replication-aware + */ + my_bool no_master_reads; +#if !defined(CHECK_EMBEDDED_DIFFERENCES) || defined(EMBEDDED_LIBRARY) + my_bool separate_thread; +#endif + enum mysql_option methods_to_use; + char *client_ip; + /* Refuse client connecting to server if it uses old (pre-4.1.1) protocol */ + my_bool secure_auth; + /* 0 - never report, 1 - always report (default) */ + my_bool report_data_truncation; + + /* function pointers for local infile support */ + int (*local_infile_init)(void **, const char *, void *); + int (*local_infile_read)(void *, char *, unsigned int); + void (*local_infile_end)(void *); + int (*local_infile_error)(void *, char *, unsigned int); + void *local_infile_userdata; + void *extension; +}; + +enum mysql_status +{ + MYSQL_STATUS_READY,MYSQL_STATUS_GET_RESULT,MYSQL_STATUS_USE_RESULT +}; + +enum mysql_protocol_type +{ + MYSQL_PROTOCOL_DEFAULT, MYSQL_PROTOCOL_TCP, MYSQL_PROTOCOL_SOCKET, + MYSQL_PROTOCOL_PIPE, MYSQL_PROTOCOL_MEMORY +}; +/* + There are three types of queries - the ones that have to go to + the master, the ones that go to a slave, and the adminstrative + type which must happen on the pivot connectioin +*/ +enum mysql_rpl_type +{ + MYSQL_RPL_MASTER, MYSQL_RPL_SLAVE, MYSQL_RPL_ADMIN +}; + +typedef struct character_set +{ + unsigned int number; /* character set number */ + unsigned int state; /* character set state */ + const char *csname; /* collation name */ + const char *name; /* character set name */ + const char *comment; /* comment */ + const char *dir; /* character set directory */ + unsigned int mbminlen; /* min. length for multibyte strings */ + unsigned int mbmaxlen; /* max. length for multibyte strings */ +} MY_CHARSET_INFO; + +struct st_mysql_methods; +struct st_mysql_stmt; + +typedef struct st_mysql +{ + NET net; /* Communication parameters */ + unsigned char *connector_fd; /* ConnectorFd for SSL */ + char *host,*user,*passwd,*unix_socket,*server_version,*host_info; + char *info, *db; + struct charset_info_st *charset; + MYSQL_FIELD *fields; + MEM_ROOT field_alloc; + my_ulonglong affected_rows; + my_ulonglong insert_id; /* id if insert on table with NEXTNR */ + my_ulonglong extra_info; /* Not used */ + unsigned long thread_id; /* Id for connection in server */ + unsigned long packet_length; + unsigned int port; + unsigned long client_flag,server_capabilities; + unsigned int protocol_version; + unsigned int field_count; + unsigned int server_status; + unsigned int server_language; + unsigned int warning_count; + struct st_mysql_options options; + enum mysql_status status; + my_bool free_me; /* If free in mysql_close */ + my_bool reconnect; /* set to 1 if automatic reconnect */ + + /* session-wide random string */ + char scramble[SCRAMBLE_LENGTH+1]; + + /* + Set if this is the original connection, not a master or a slave we have + added though mysql_rpl_probe() or mysql_set_master()/ mysql_add_slave() + */ + my_bool rpl_pivot; + /* + Pointers to the master, and the next slave connections, points to + itself if lone connection. + */ + struct st_mysql* master, *next_slave; + + struct st_mysql* last_used_slave; /* needed for round-robin slave pick */ + /* needed for send/read/store/use result to work correctly with replication */ + struct st_mysql* last_used_con; + + LIST *stmts; /* list of all statements */ + const struct st_mysql_methods *methods; + void *thd; + /* + Points to boolean flag in MYSQL_RES or MYSQL_STMT. We set this flag + from mysql_stmt_close if close had to cancel result set of this object. + */ + my_bool *unbuffered_fetch_owner; + /* needed for embedded server - no net buffer to store the 'info' */ + char *info_buffer; + void *extension; +} MYSQL; + + +typedef struct st_mysql_res { + my_ulonglong row_count; + MYSQL_FIELD *fields; + MYSQL_DATA *data; + MYSQL_ROWS *data_cursor; + unsigned long *lengths; /* column lengths of current row */ + MYSQL *handle; /* for unbuffered reads */ + const struct st_mysql_methods *methods; + MYSQL_ROW row; /* If unbuffered read */ + MYSQL_ROW current_row; /* buffer to current row */ + MEM_ROOT field_alloc; + unsigned int field_count, current_field; + my_bool eof; /* Used by mysql_fetch_row */ + /* mysql_stmt_close() had to cancel this result */ + my_bool unbuffered_fetch_cancelled; + void *extension; +} MYSQL_RES; + +#define MAX_MYSQL_MANAGER_ERR 256 +#define MAX_MYSQL_MANAGER_MSG 256 + +#define MANAGER_OK 200 +#define MANAGER_INFO 250 +#define MANAGER_ACCESS 401 +#define MANAGER_CLIENT_ERR 450 +#define MANAGER_INTERNAL_ERR 500 + +#if !defined(MYSQL_SERVER) && !defined(MYSQL_CLIENT) +#define MYSQL_CLIENT +#endif + + +typedef struct st_mysql_manager +{ + NET net; + char *host, *user, *passwd; + char *net_buf, *net_buf_pos, *net_data_end; + unsigned int port; + int cmd_status; + int last_errno; + int net_buf_size; + my_bool free_me; + my_bool eof; + char last_error[MAX_MYSQL_MANAGER_ERR]; + void *extension; +} MYSQL_MANAGER; + +typedef struct st_mysql_parameters +{ + unsigned long *p_max_allowed_packet; + unsigned long *p_net_buffer_length; + void *extension; +} MYSQL_PARAMETERS; + +#if !defined(MYSQL_SERVER) && !defined(EMBEDDED_LIBRARY) +#define max_allowed_packet (*mysql_get_parameters()->p_max_allowed_packet) +#define net_buffer_length (*mysql_get_parameters()->p_net_buffer_length) +#endif + +/* + Set up and bring down the server; to ensure that applications will + work when linked against either the standard client library or the + embedded server library, these functions should be called. +*/ +int STDCALL mysql_server_init(int argc, char **argv, char **groups); +void STDCALL mysql_server_end(void); + +/* + mysql_server_init/end need to be called when using libmysqld or + libmysqlclient (exactly, mysql_server_init() is called by mysql_init() so + you don't need to call it explicitely; but you need to call + mysql_server_end() to free memory). The names are a bit misleading + (mysql_SERVER* to be used when using libmysqlCLIENT). So we add more general + names which suit well whether you're using libmysqld or libmysqlclient. We + intend to promote these aliases over the mysql_server* ones. +*/ +#define mysql_library_init mysql_server_init +#define mysql_library_end mysql_server_end + +MYSQL_PARAMETERS *STDCALL mysql_get_parameters(void); + +/* + Set up and bring down a thread; these function should be called + for each thread in an application which opens at least one MySQL + connection. All uses of the connection(s) should be between these + function calls. +*/ +my_bool STDCALL mysql_thread_init(void); +void STDCALL mysql_thread_end(void); + +/* + Functions to get information from the MYSQL and MYSQL_RES structures + Should definitely be used if one uses shared libraries. +*/ + +my_ulonglong STDCALL mysql_num_rows(MYSQL_RES *res); +unsigned int STDCALL mysql_num_fields(MYSQL_RES *res); +my_bool STDCALL mysql_eof(MYSQL_RES *res); +MYSQL_FIELD *STDCALL mysql_fetch_field_direct(MYSQL_RES *res, + unsigned int fieldnr); +MYSQL_FIELD * STDCALL mysql_fetch_fields(MYSQL_RES *res); +MYSQL_ROW_OFFSET STDCALL mysql_row_tell(MYSQL_RES *res); +MYSQL_FIELD_OFFSET STDCALL mysql_field_tell(MYSQL_RES *res); + +unsigned int STDCALL mysql_field_count(MYSQL *mysql); +my_ulonglong STDCALL mysql_affected_rows(MYSQL *mysql); +my_ulonglong STDCALL mysql_insert_id(MYSQL *mysql); +unsigned int STDCALL mysql_errno(MYSQL *mysql); +const char * STDCALL mysql_error(MYSQL *mysql); +const char *STDCALL mysql_sqlstate(MYSQL *mysql); +unsigned int STDCALL mysql_warning_count(MYSQL *mysql); +const char * STDCALL mysql_info(MYSQL *mysql); +unsigned long STDCALL mysql_thread_id(MYSQL *mysql); +const char * STDCALL mysql_character_set_name(MYSQL *mysql); +int STDCALL mysql_set_character_set(MYSQL *mysql, const char *csname); + +MYSQL * STDCALL mysql_init(MYSQL *mysql); +my_bool STDCALL mysql_ssl_set(MYSQL *mysql, const char *key, + const char *cert, const char *ca, + const char *capath, const char *cipher); +const char * STDCALL mysql_get_ssl_cipher(MYSQL *mysql); +my_bool STDCALL mysql_change_user(MYSQL *mysql, const char *user, + const char *passwd, const char *db); +MYSQL * STDCALL mysql_real_connect(MYSQL *mysql, const char *host, + const char *user, + const char *passwd, + const char *db, + unsigned int port, + const char *unix_socket, + unsigned long clientflag); +int STDCALL mysql_select_db(MYSQL *mysql, const char *db); +int STDCALL mysql_query(MYSQL *mysql, const char *q); +int STDCALL mysql_send_query(MYSQL *mysql, const char *q, + unsigned long length); +int STDCALL mysql_real_query(MYSQL *mysql, const char *q, + unsigned long length); +MYSQL_RES * STDCALL mysql_store_result(MYSQL *mysql); +MYSQL_RES * STDCALL mysql_use_result(MYSQL *mysql); + +/* perform query on master */ +my_bool STDCALL mysql_master_query(MYSQL *mysql, const char *q, + unsigned long length); +my_bool STDCALL mysql_master_send_query(MYSQL *mysql, const char *q, + unsigned long length); +/* perform query on slave */ +my_bool STDCALL mysql_slave_query(MYSQL *mysql, const char *q, + unsigned long length); +my_bool STDCALL mysql_slave_send_query(MYSQL *mysql, const char *q, + unsigned long length); +void STDCALL mysql_get_character_set_info(MYSQL *mysql, + MY_CHARSET_INFO *charset); + +/* local infile support */ + +#define LOCAL_INFILE_ERROR_LEN 512 + +void +mysql_set_local_infile_handler(MYSQL *mysql, + int (*local_infile_init)(void **, const char *, + void *), + int (*local_infile_read)(void *, char *, + unsigned int), + void (*local_infile_end)(void *), + int (*local_infile_error)(void *, char*, + unsigned int), + void *); + +void +mysql_set_local_infile_default(MYSQL *mysql); + + +/* + enable/disable parsing of all queries to decide if they go on master or + slave +*/ +void STDCALL mysql_enable_rpl_parse(MYSQL* mysql); +void STDCALL mysql_disable_rpl_parse(MYSQL* mysql); +/* get the value of the parse flag */ +int STDCALL mysql_rpl_parse_enabled(MYSQL* mysql); + +/* enable/disable reads from master */ +void STDCALL mysql_enable_reads_from_master(MYSQL* mysql); +void STDCALL mysql_disable_reads_from_master(MYSQL* mysql); +/* get the value of the master read flag */ +my_bool STDCALL mysql_reads_from_master_enabled(MYSQL* mysql); + +enum mysql_rpl_type STDCALL mysql_rpl_query_type(const char* q, int len); + +/* discover the master and its slaves */ +my_bool STDCALL mysql_rpl_probe(MYSQL* mysql); + +/* set the master, close/free the old one, if it is not a pivot */ +int STDCALL mysql_set_master(MYSQL* mysql, const char* host, + unsigned int port, + const char* user, + const char* passwd); +int STDCALL mysql_add_slave(MYSQL* mysql, const char* host, + unsigned int port, + const char* user, + const char* passwd); + +int STDCALL mysql_shutdown(MYSQL *mysql, + enum mysql_enum_shutdown_level + shutdown_level); +int STDCALL mysql_dump_debug_info(MYSQL *mysql); +int STDCALL mysql_refresh(MYSQL *mysql, + unsigned int refresh_options); +int STDCALL mysql_kill(MYSQL *mysql,unsigned long pid); +int STDCALL mysql_set_server_option(MYSQL *mysql, + enum enum_mysql_set_option + option); +int STDCALL mysql_ping(MYSQL *mysql); +const char * STDCALL mysql_stat(MYSQL *mysql); +const char * STDCALL mysql_get_server_info(MYSQL *mysql); +const char * STDCALL mysql_get_client_info(void); +unsigned long STDCALL mysql_get_client_version(void); +const char * STDCALL mysql_get_host_info(MYSQL *mysql); +unsigned long STDCALL mysql_get_server_version(MYSQL *mysql); +unsigned int STDCALL mysql_get_proto_info(MYSQL *mysql); +MYSQL_RES * STDCALL mysql_list_dbs(MYSQL *mysql,const char *wild); +MYSQL_RES * STDCALL mysql_list_tables(MYSQL *mysql,const char *wild); +MYSQL_RES * STDCALL mysql_list_processes(MYSQL *mysql); +int STDCALL mysql_options(MYSQL *mysql,enum mysql_option option, + const void *arg); +void STDCALL mysql_free_result(MYSQL_RES *result); +void STDCALL mysql_data_seek(MYSQL_RES *result, + my_ulonglong offset); +MYSQL_ROW_OFFSET STDCALL mysql_row_seek(MYSQL_RES *result, + MYSQL_ROW_OFFSET offset); +MYSQL_FIELD_OFFSET STDCALL mysql_field_seek(MYSQL_RES *result, + MYSQL_FIELD_OFFSET offset); +MYSQL_ROW STDCALL mysql_fetch_row(MYSQL_RES *result); +unsigned long * STDCALL mysql_fetch_lengths(MYSQL_RES *result); +MYSQL_FIELD * STDCALL mysql_fetch_field(MYSQL_RES *result); +MYSQL_RES * STDCALL mysql_list_fields(MYSQL *mysql, const char *table, + const char *wild); +unsigned long STDCALL mysql_escape_string(char *to,const char *from, + unsigned long from_length); +unsigned long STDCALL mysql_hex_string(char *to,const char *from, + unsigned long from_length); +unsigned long STDCALL mysql_real_escape_string(MYSQL *mysql, + char *to,const char *from, + unsigned long length); +void STDCALL mysql_debug(const char *debug); +void STDCALL myodbc_remove_escape(MYSQL *mysql,char *name); +unsigned int STDCALL mysql_thread_safe(void); +my_bool STDCALL mysql_embedded(void); +MYSQL_MANAGER* STDCALL mysql_manager_init(MYSQL_MANAGER* con); +MYSQL_MANAGER* STDCALL mysql_manager_connect(MYSQL_MANAGER* con, + const char* host, + const char* user, + const char* passwd, + unsigned int port); +void STDCALL mysql_manager_close(MYSQL_MANAGER* con); +int STDCALL mysql_manager_command(MYSQL_MANAGER* con, + const char* cmd, int cmd_len); +int STDCALL mysql_manager_fetch_line(MYSQL_MANAGER* con, + char* res_buf, + int res_buf_size); +my_bool STDCALL mysql_read_query_result(MYSQL *mysql); + + +/* + The following definitions are added for the enhanced + client-server protocol +*/ + +/* statement state */ +enum enum_mysql_stmt_state +{ + MYSQL_STMT_INIT_DONE= 1, MYSQL_STMT_PREPARE_DONE, MYSQL_STMT_EXECUTE_DONE, + MYSQL_STMT_FETCH_DONE +}; + + +/* + This structure is used to define bind information, and + internally by the client library. + Public members with their descriptions are listed below + (conventionally `On input' refers to the binds given to + mysql_stmt_bind_param, `On output' refers to the binds given + to mysql_stmt_bind_result): + + buffer_type - One of the MYSQL_* types, used to describe + the host language type of buffer. + On output: if column type is different from + buffer_type, column value is automatically converted + to buffer_type before it is stored in the buffer. + buffer - On input: points to the buffer with input data. + On output: points to the buffer capable to store + output data. + The type of memory pointed by buffer must correspond + to buffer_type. See the correspondence table in + the comment to mysql_stmt_bind_param. + + The two above members are mandatory for any kind of bind. + + buffer_length - the length of the buffer. You don't have to set + it for any fixed length buffer: float, double, + int, etc. It must be set however for variable-length + types, such as BLOBs or STRINGs. + + length - On input: in case when lengths of input values + are different for each execute, you can set this to + point at a variable containining value length. This + way the value length can be different in each execute. + If length is not NULL, buffer_length is not used. + Note, length can even point at buffer_length if + you keep bind structures around while fetching: + this way you can change buffer_length before + each execution, everything will work ok. + On output: if length is set, mysql_stmt_fetch will + write column length into it. + + is_null - On input: points to a boolean variable that should + be set to TRUE for NULL values. + This member is useful only if your data may be + NULL in some but not all cases. + If your data is never NULL, is_null should be set to 0. + If your data is always NULL, set buffer_type + to MYSQL_TYPE_NULL, and is_null will not be used. + + is_unsigned - On input: used to signify that values provided for one + of numeric types are unsigned. + On output describes signedness of the output buffer. + If, taking into account is_unsigned flag, column data + is out of range of the output buffer, data for this column + is regarded truncated. Note that this has no correspondence + to the sign of result set column, if you need to find it out + use mysql_stmt_result_metadata. + error - where to write a truncation error if it is present. + possible error value is: + 0 no truncation + 1 value is out of range or buffer is too small + + Please note that MYSQL_BIND also has internals members. +*/ + +typedef struct st_mysql_bind +{ + unsigned long *length; /* output length pointer */ + my_bool *is_null; /* Pointer to null indicator */ + void *buffer; /* buffer to get/put data */ + /* set this if you want to track data truncations happened during fetch */ + my_bool *error; + unsigned char *row_ptr; /* for the current data position */ + void (*store_param_func)(NET *net, struct st_mysql_bind *param); + void (*fetch_result)(struct st_mysql_bind *, MYSQL_FIELD *, + unsigned char **row); + void (*skip_result)(struct st_mysql_bind *, MYSQL_FIELD *, + unsigned char **row); + /* output buffer length, must be set when fetching str/binary */ + unsigned long buffer_length; + unsigned long offset; /* offset position for char/binary fetch */ + unsigned long length_value; /* Used if length is 0 */ + unsigned int param_number; /* For null count and error messages */ + unsigned int pack_length; /* Internal length for packed data */ + enum enum_field_types buffer_type; /* buffer type */ + my_bool error_value; /* used if error is 0 */ + my_bool is_unsigned; /* set if integer type is unsigned */ + my_bool long_data_used; /* If used with mysql_send_long_data */ + my_bool is_null_value; /* Used if is_null is 0 */ + void *extension; +} MYSQL_BIND; + + +/* statement handler */ +typedef struct st_mysql_stmt +{ + MEM_ROOT mem_root; /* root allocations */ + LIST list; /* list to keep track of all stmts */ + MYSQL *mysql; /* connection handle */ + MYSQL_BIND *params; /* input parameters */ + MYSQL_BIND *bind; /* output parameters */ + MYSQL_FIELD *fields; /* result set metadata */ + MYSQL_DATA result; /* cached result set */ + MYSQL_ROWS *data_cursor; /* current row in cached result */ + /* + mysql_stmt_fetch() calls this function to fetch one row (it's different + for buffered, unbuffered and cursor fetch). + */ + int (*read_row_func)(struct st_mysql_stmt *stmt, + unsigned char **row); + /* copy of mysql->affected_rows after statement execution */ + my_ulonglong affected_rows; + my_ulonglong insert_id; /* copy of mysql->insert_id */ + unsigned long stmt_id; /* Id for prepared statement */ + unsigned long flags; /* i.e. type of cursor to open */ + unsigned long prefetch_rows; /* number of rows per one COM_FETCH */ + /* + Copied from mysql->server_status after execute/fetch to know + server-side cursor status for this statement. + */ + unsigned int server_status; + unsigned int last_errno; /* error code */ + unsigned int param_count; /* input parameter count */ + unsigned int field_count; /* number of columns in result set */ + enum enum_mysql_stmt_state state; /* statement state */ + char last_error[MYSQL_ERRMSG_SIZE]; /* error message */ + char sqlstate[SQLSTATE_LENGTH+1]; + /* Types of input parameters should be sent to server */ + my_bool send_types_to_server; + my_bool bind_param_done; /* input buffers were supplied */ + unsigned char bind_result_done; /* output buffers were supplied */ + /* mysql_stmt_close() had to cancel this result */ + my_bool unbuffered_fetch_cancelled; + /* + Is set to true if we need to calculate field->max_length for + metadata fields when doing mysql_stmt_store_result. + */ + my_bool update_max_length; + void *extension; +} MYSQL_STMT; + +enum enum_stmt_attr_type +{ + /* + When doing mysql_stmt_store_result calculate max_length attribute + of statement metadata. This is to be consistent with the old API, + where this was done automatically. + In the new API we do that only by request because it slows down + mysql_stmt_store_result sufficiently. + */ + STMT_ATTR_UPDATE_MAX_LENGTH, + /* + unsigned long with combination of cursor flags (read only, for update, + etc) + */ + STMT_ATTR_CURSOR_TYPE, + /* + Amount of rows to retrieve from server per one fetch if using cursors. + Accepts unsigned long attribute in the range 1 - ulong_max + */ + STMT_ATTR_PREFETCH_ROWS +}; + + +typedef struct st_mysql_methods +{ + my_bool (*read_query_result)(MYSQL *mysql); + my_bool (*advanced_command)(MYSQL *mysql, + enum enum_server_command command, + const unsigned char *header, + unsigned long header_length, + const unsigned char *arg, + unsigned long arg_length, + my_bool skip_check, + MYSQL_STMT *stmt); + MYSQL_DATA *(*read_rows)(MYSQL *mysql,MYSQL_FIELD *mysql_fields, + unsigned int fields); + MYSQL_RES * (*use_result)(MYSQL *mysql); + void (*fetch_lengths)(unsigned long *to, + MYSQL_ROW column, unsigned int field_count); + void (*flush_use_result)(MYSQL *mysql); +#if !defined(MYSQL_SERVER) || defined(EMBEDDED_LIBRARY) + MYSQL_FIELD * (*list_fields)(MYSQL *mysql); + my_bool (*read_prepare_result)(MYSQL *mysql, MYSQL_STMT *stmt); + int (*stmt_execute)(MYSQL_STMT *stmt); + int (*read_binary_rows)(MYSQL_STMT *stmt); + int (*unbuffered_fetch)(MYSQL *mysql, char **row); + void (*free_embedded_thd)(MYSQL *mysql); + const char *(*read_statistics)(MYSQL *mysql); + my_bool (*next_result)(MYSQL *mysql); + int (*read_change_user_result)(MYSQL *mysql, char *buff, const char *passwd); + int (*read_rows_from_cursor)(MYSQL_STMT *stmt); +#endif +} MYSQL_METHODS; + + +MYSQL_STMT * STDCALL mysql_stmt_init(MYSQL *mysql); +int STDCALL mysql_stmt_prepare(MYSQL_STMT *stmt, const char *query, + unsigned long length); +int STDCALL mysql_stmt_execute(MYSQL_STMT *stmt); +int STDCALL mysql_stmt_fetch(MYSQL_STMT *stmt); +int STDCALL mysql_stmt_fetch_column(MYSQL_STMT *stmt, MYSQL_BIND *bind_arg, + unsigned int column, + unsigned long offset); +int STDCALL mysql_stmt_store_result(MYSQL_STMT *stmt); +unsigned long STDCALL mysql_stmt_param_count(MYSQL_STMT * stmt); +my_bool STDCALL mysql_stmt_attr_set(MYSQL_STMT *stmt, + enum enum_stmt_attr_type attr_type, + const void *attr); +my_bool STDCALL mysql_stmt_attr_get(MYSQL_STMT *stmt, + enum enum_stmt_attr_type attr_type, + void *attr); +my_bool STDCALL mysql_stmt_bind_param(MYSQL_STMT * stmt, MYSQL_BIND * bnd); +my_bool STDCALL mysql_stmt_bind_result(MYSQL_STMT * stmt, MYSQL_BIND * bnd); +my_bool STDCALL mysql_stmt_close(MYSQL_STMT * stmt); +my_bool STDCALL mysql_stmt_reset(MYSQL_STMT * stmt); +my_bool STDCALL mysql_stmt_free_result(MYSQL_STMT *stmt); +my_bool STDCALL mysql_stmt_send_long_data(MYSQL_STMT *stmt, + unsigned int param_number, + const char *data, + unsigned long length); +MYSQL_RES *STDCALL mysql_stmt_result_metadata(MYSQL_STMT *stmt); +MYSQL_RES *STDCALL mysql_stmt_param_metadata(MYSQL_STMT *stmt); +unsigned int STDCALL mysql_stmt_errno(MYSQL_STMT * stmt); +const char *STDCALL mysql_stmt_error(MYSQL_STMT * stmt); +const char *STDCALL mysql_stmt_sqlstate(MYSQL_STMT * stmt); +MYSQL_ROW_OFFSET STDCALL mysql_stmt_row_seek(MYSQL_STMT *stmt, + MYSQL_ROW_OFFSET offset); +MYSQL_ROW_OFFSET STDCALL mysql_stmt_row_tell(MYSQL_STMT *stmt); +void STDCALL mysql_stmt_data_seek(MYSQL_STMT *stmt, my_ulonglong offset); +my_ulonglong STDCALL mysql_stmt_num_rows(MYSQL_STMT *stmt); +my_ulonglong STDCALL mysql_stmt_affected_rows(MYSQL_STMT *stmt); +my_ulonglong STDCALL mysql_stmt_insert_id(MYSQL_STMT *stmt); +unsigned int STDCALL mysql_stmt_field_count(MYSQL_STMT *stmt); + +my_bool STDCALL mysql_commit(MYSQL * mysql); +my_bool STDCALL mysql_rollback(MYSQL * mysql); +my_bool STDCALL mysql_autocommit(MYSQL * mysql, my_bool auto_mode); +my_bool STDCALL mysql_more_results(MYSQL *mysql); +int STDCALL mysql_next_result(MYSQL *mysql); +void STDCALL mysql_close(MYSQL *sock); + + +/* status return codes */ +#define MYSQL_NO_DATA 100 +#define MYSQL_DATA_TRUNCATED 101 + +#define mysql_reload(mysql) mysql_refresh((mysql),REFRESH_GRANT) + +#ifdef USE_OLD_FUNCTIONS +MYSQL * STDCALL mysql_connect(MYSQL *mysql, const char *host, + const char *user, const char *passwd); +int STDCALL mysql_create_db(MYSQL *mysql, const char *DB); +int STDCALL mysql_drop_db(MYSQL *mysql, const char *DB); +#define mysql_reload(mysql) mysql_refresh((mysql),REFRESH_GRANT) +#endif +#define HAVE_MYSQL_REAL_CONNECT + +/* + The following functions are mainly exported because of mysqlbinlog; + They are not for general usage +*/ + +#define simple_command(mysql, command, arg, length, skip_check) \ + (*(mysql)->methods->advanced_command)(mysql, command, 0, \ + 0, arg, length, skip_check, NULL) +#define stmt_command(mysql, command, arg, length, stmt) \ + (*(mysql)->methods->advanced_command)(mysql, command, 0, \ + 0, arg, length, 1, stmt) + +#ifdef __NETWARE__ +#pragma pack(pop) /* restore alignment */ +#endif + +#ifdef __cplusplus +} +#endif + +#endif /* _mysql_h */ diff --git a/EQ2/source/depends/mysql-5.1.45-winx64/include/mysql/plugin.h b/EQ2/source/depends/mysql-5.1.45-winx64/include/mysql/plugin.h new file mode 100644 index 000000000..2e59262d0 --- /dev/null +++ b/EQ2/source/depends/mysql-5.1.45-winx64/include/mysql/plugin.h @@ -0,0 +1,832 @@ +/* Copyright (C) 2005 MySQL AB + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; version 2 of the License. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ + +#ifndef _my_plugin_h +#define _my_plugin_h + + +/* + On Windows, exports from DLL need to be declared +*/ +#if (defined(_WIN32) && defined(MYSQL_DYNAMIC_PLUGIN)) +#define MYSQL_PLUGIN_EXPORT extern "C" __declspec(dllexport) +#else +#define MYSQL_PLUGIN_EXPORT +#endif + +#ifdef __cplusplus +class THD; +class Item; +#define MYSQL_THD THD* +#else +#define MYSQL_THD void* +#endif + +#ifndef _m_string_h +/* This definition must match the one given in m_string.h */ +struct st_mysql_lex_string +{ + char *str; + unsigned int length; +}; +#endif /* _m_string_h */ +typedef struct st_mysql_lex_string MYSQL_LEX_STRING; + +#define MYSQL_XIDDATASIZE 128 +/** + struct st_mysql_xid is binary compatible with the XID structure as + in the X/Open CAE Specification, Distributed Transaction Processing: + The XA Specification, X/Open Company Ltd., 1991. + http://www.opengroup.org/bookstore/catalog/c193.htm + + @see XID in sql/handler.h +*/ +struct st_mysql_xid { + long formatID; + long gtrid_length; + long bqual_length; + char data[MYSQL_XIDDATASIZE]; /* Not \0-terminated */ +}; +typedef struct st_mysql_xid MYSQL_XID; + +/************************************************************************* + Plugin API. Common for all plugin types. +*/ + +#define MYSQL_PLUGIN_INTERFACE_VERSION 0x0100 + +/* + The allowable types of plugins +*/ +#define MYSQL_UDF_PLUGIN 0 /* User-defined function */ +#define MYSQL_STORAGE_ENGINE_PLUGIN 1 /* Storage Engine */ +#define MYSQL_FTPARSER_PLUGIN 2 /* Full-text parser plugin */ +#define MYSQL_DAEMON_PLUGIN 3 /* The daemon/raw plugin type */ +#define MYSQL_INFORMATION_SCHEMA_PLUGIN 4 /* The I_S plugin type */ +#define MYSQL_MAX_PLUGIN_TYPE_NUM 5 /* The number of plugin types */ + +/* We use the following strings to define licenses for plugins */ +#define PLUGIN_LICENSE_PROPRIETARY 0 +#define PLUGIN_LICENSE_GPL 1 +#define PLUGIN_LICENSE_BSD 2 + +#define PLUGIN_LICENSE_PROPRIETARY_STRING "PROPRIETARY" +#define PLUGIN_LICENSE_GPL_STRING "GPL" +#define PLUGIN_LICENSE_BSD_STRING "BSD" + +/* + Macros for beginning and ending plugin declarations. Between + mysql_declare_plugin and mysql_declare_plugin_end there should + be a st_mysql_plugin struct for each plugin to be declared. +*/ + + +#ifndef MYSQL_DYNAMIC_PLUGIN +#define __MYSQL_DECLARE_PLUGIN(NAME, VERSION, PSIZE, DECLS) \ +int VERSION= MYSQL_PLUGIN_INTERFACE_VERSION; \ +int PSIZE= sizeof(struct st_mysql_plugin); \ +struct st_mysql_plugin DECLS[]= { +#else +#define __MYSQL_DECLARE_PLUGIN(NAME, VERSION, PSIZE, DECLS) \ +MYSQL_PLUGIN_EXPORT int _mysql_plugin_interface_version_= MYSQL_PLUGIN_INTERFACE_VERSION; \ +MYSQL_PLUGIN_EXPORT int _mysql_sizeof_struct_st_plugin_= sizeof(struct st_mysql_plugin); \ +MYSQL_PLUGIN_EXPORT struct st_mysql_plugin _mysql_plugin_declarations_[]= { +#endif + +#define mysql_declare_plugin(NAME) \ +__MYSQL_DECLARE_PLUGIN(NAME, \ + builtin_ ## NAME ## _plugin_interface_version, \ + builtin_ ## NAME ## _sizeof_struct_st_plugin, \ + builtin_ ## NAME ## _plugin) + +#define mysql_declare_plugin_end ,{0,0,0,0,0,0,0,0,0,0,0,0}} + +/* + declarations for SHOW STATUS support in plugins +*/ +enum enum_mysql_show_type +{ + SHOW_UNDEF, SHOW_BOOL, SHOW_INT, SHOW_LONG, + SHOW_LONGLONG, SHOW_CHAR, SHOW_CHAR_PTR, + SHOW_ARRAY, SHOW_FUNC, SHOW_DOUBLE +}; + +struct st_mysql_show_var { + const char *name; + char *value; + enum enum_mysql_show_type type; +}; + +#define SHOW_VAR_FUNC_BUFF_SIZE 1024 +typedef int (*mysql_show_var_func)(MYSQL_THD, struct st_mysql_show_var*, char *); + + +/* + declarations for server variables and command line options +*/ + + +#define PLUGIN_VAR_BOOL 0x0001 +#define PLUGIN_VAR_INT 0x0002 +#define PLUGIN_VAR_LONG 0x0003 +#define PLUGIN_VAR_LONGLONG 0x0004 +#define PLUGIN_VAR_STR 0x0005 +#define PLUGIN_VAR_ENUM 0x0006 +#define PLUGIN_VAR_SET 0x0007 +#define PLUGIN_VAR_UNSIGNED 0x0080 +#define PLUGIN_VAR_THDLOCAL 0x0100 /* Variable is per-connection */ +#define PLUGIN_VAR_READONLY 0x0200 /* Server variable is read only */ +#define PLUGIN_VAR_NOSYSVAR 0x0400 /* Not a server variable */ +#define PLUGIN_VAR_NOCMDOPT 0x0800 /* Not a command line option */ +#define PLUGIN_VAR_NOCMDARG 0x1000 /* No argument for cmd line */ +#define PLUGIN_VAR_RQCMDARG 0x0000 /* Argument required for cmd line */ +#define PLUGIN_VAR_OPCMDARG 0x2000 /* Argument optional for cmd line */ +#define PLUGIN_VAR_MEMALLOC 0x8000 /* String needs memory allocated */ + +struct st_mysql_sys_var; +struct st_mysql_value; + +/* + SYNOPSIS + (*mysql_var_check_func)() + thd thread handle + var dynamic variable being altered + save pointer to temporary storage + value user provided value + RETURN + 0 user provided value is OK and the update func may be called. + any other value indicates error. + + This function should parse the user provided value and store in the + provided temporary storage any data as required by the update func. + There is sufficient space in the temporary storage to store a double. + Note that the update func may not be called if any other error occurs + so any memory allocated should be thread-local so that it may be freed + automatically at the end of the statement. +*/ + +typedef int (*mysql_var_check_func)(MYSQL_THD thd, + struct st_mysql_sys_var *var, + void *save, struct st_mysql_value *value); + +/* + SYNOPSIS + (*mysql_var_update_func)() + thd thread handle + var dynamic variable being altered + var_ptr pointer to dynamic variable + save pointer to temporary storage + RETURN + NONE + + This function should use the validated value stored in the temporary store + and persist it in the provided pointer to the dynamic variable. + For example, strings may require memory to be allocated. +*/ +typedef void (*mysql_var_update_func)(MYSQL_THD thd, + struct st_mysql_sys_var *var, + void *var_ptr, const void *save); + + +/* the following declarations are for internal use only */ + + +#define PLUGIN_VAR_MASK \ + (PLUGIN_VAR_READONLY | PLUGIN_VAR_NOSYSVAR | \ + PLUGIN_VAR_NOCMDOPT | PLUGIN_VAR_NOCMDARG | \ + PLUGIN_VAR_OPCMDARG | PLUGIN_VAR_RQCMDARG | PLUGIN_VAR_MEMALLOC) + +#define MYSQL_PLUGIN_VAR_HEADER \ + int flags; \ + const char *name; \ + const char *comment; \ + mysql_var_check_func check; \ + mysql_var_update_func update + +#define MYSQL_SYSVAR_NAME(name) mysql_sysvar_ ## name +#define MYSQL_SYSVAR(name) \ + ((struct st_mysql_sys_var *)&(MYSQL_SYSVAR_NAME(name))) + +/* + for global variables, the value pointer is the first + element after the header, the default value is the second. + for thread variables, the value offset is the first + element after the header, the default value is the second. +*/ + + +#define DECLARE_MYSQL_SYSVAR_BASIC(name, type) struct { \ + MYSQL_PLUGIN_VAR_HEADER; \ + type *value; \ + const type def_val; \ +} MYSQL_SYSVAR_NAME(name) + +#define DECLARE_MYSQL_SYSVAR_SIMPLE(name, type) struct { \ + MYSQL_PLUGIN_VAR_HEADER; \ + type *value; type def_val; \ + type min_val; type max_val; \ + type blk_sz; \ +} MYSQL_SYSVAR_NAME(name) + +#define DECLARE_MYSQL_SYSVAR_TYPELIB(name, type) struct { \ + MYSQL_PLUGIN_VAR_HEADER; \ + type *value; type def_val; \ + TYPELIB *typelib; \ +} MYSQL_SYSVAR_NAME(name) + +#define DECLARE_THDVAR_FUNC(type) \ + type *(*resolve)(MYSQL_THD thd, int offset) + +#define DECLARE_MYSQL_THDVAR_BASIC(name, type) struct { \ + MYSQL_PLUGIN_VAR_HEADER; \ + int offset; \ + const type def_val; \ + DECLARE_THDVAR_FUNC(type); \ +} MYSQL_SYSVAR_NAME(name) + +#define DECLARE_MYSQL_THDVAR_SIMPLE(name, type) struct { \ + MYSQL_PLUGIN_VAR_HEADER; \ + int offset; \ + type def_val; type min_val; \ + type max_val; type blk_sz; \ + DECLARE_THDVAR_FUNC(type); \ +} MYSQL_SYSVAR_NAME(name) + +#define DECLARE_MYSQL_THDVAR_TYPELIB(name, type) struct { \ + MYSQL_PLUGIN_VAR_HEADER; \ + int offset; \ + type def_val; \ + DECLARE_THDVAR_FUNC(type); \ + TYPELIB *typelib; \ +} MYSQL_SYSVAR_NAME(name) + + +/* + the following declarations are for use by plugin implementors +*/ + +#define MYSQL_SYSVAR_BOOL(name, varname, opt, comment, check, update, def) \ +DECLARE_MYSQL_SYSVAR_BASIC(name, char) = { \ + PLUGIN_VAR_BOOL | ((opt) & PLUGIN_VAR_MASK), \ + #name, comment, check, update, &varname, def} + +#define MYSQL_SYSVAR_STR(name, varname, opt, comment, check, update, def) \ +DECLARE_MYSQL_SYSVAR_BASIC(name, char *) = { \ + PLUGIN_VAR_STR | ((opt) & PLUGIN_VAR_MASK), \ + #name, comment, check, update, &varname, def} + +#define MYSQL_SYSVAR_INT(name, varname, opt, comment, check, update, def, min, max, blk) \ +DECLARE_MYSQL_SYSVAR_SIMPLE(name, int) = { \ + PLUGIN_VAR_INT | ((opt) & PLUGIN_VAR_MASK), \ + #name, comment, check, update, &varname, def, min, max, blk } + +#define MYSQL_SYSVAR_UINT(name, varname, opt, comment, check, update, def, min, max, blk) \ +DECLARE_MYSQL_SYSVAR_SIMPLE(name, unsigned int) = { \ + PLUGIN_VAR_INT | PLUGIN_VAR_UNSIGNED | ((opt) & PLUGIN_VAR_MASK), \ + #name, comment, check, update, &varname, def, min, max, blk } + +#define MYSQL_SYSVAR_LONG(name, varname, opt, comment, check, update, def, min, max, blk) \ +DECLARE_MYSQL_SYSVAR_SIMPLE(name, long) = { \ + PLUGIN_VAR_LONG | ((opt) & PLUGIN_VAR_MASK), \ + #name, comment, check, update, &varname, def, min, max, blk } + +#define MYSQL_SYSVAR_ULONG(name, varname, opt, comment, check, update, def, min, max, blk) \ +DECLARE_MYSQL_SYSVAR_SIMPLE(name, unsigned long) = { \ + PLUGIN_VAR_LONG | PLUGIN_VAR_UNSIGNED | ((opt) & PLUGIN_VAR_MASK), \ + #name, comment, check, update, &varname, def, min, max, blk } + +#define MYSQL_SYSVAR_LONGLONG(name, varname, opt, comment, check, update, def, min, max, blk) \ +DECLARE_MYSQL_SYSVAR_SIMPLE(name, long long) = { \ + PLUGIN_VAR_LONGLONG | ((opt) & PLUGIN_VAR_MASK), \ + #name, comment, check, update, &varname, def, min, max, blk } + +#define MYSQL_SYSVAR_ULONGLONG(name, varname, opt, comment, check, update, def, min, max, blk) \ +DECLARE_MYSQL_SYSVAR_SIMPLE(name, unsigned long long) = { \ + PLUGIN_VAR_LONGLONG | PLUGIN_VAR_UNSIGNED | ((opt) & PLUGIN_VAR_MASK), \ + #name, comment, check, update, &varname, def, min, max, blk } + +#define MYSQL_SYSVAR_ENUM(name, varname, opt, comment, check, update, def, typelib) \ +DECLARE_MYSQL_SYSVAR_TYPELIB(name, unsigned long) = { \ + PLUGIN_VAR_ENUM | ((opt) & PLUGIN_VAR_MASK), \ + #name, comment, check, update, &varname, def, typelib } + +#define MYSQL_SYSVAR_SET(name, varname, opt, comment, check, update, def, typelib) \ +DECLARE_MYSQL_SYSVAR_TYPELIB(name, unsigned long long) = { \ + PLUGIN_VAR_SET | ((opt) & PLUGIN_VAR_MASK), \ + #name, comment, check, update, &varname, def, typelib } + +#define MYSQL_THDVAR_BOOL(name, opt, comment, check, update, def) \ +DECLARE_MYSQL_THDVAR_BASIC(name, char) = { \ + PLUGIN_VAR_BOOL | PLUGIN_VAR_THDLOCAL | ((opt) & PLUGIN_VAR_MASK), \ + #name, comment, check, update, -1, def, NULL} + +#define MYSQL_THDVAR_STR(name, opt, comment, check, update, def) \ +DECLARE_MYSQL_THDVAR_BASIC(name, char *) = { \ + PLUGIN_VAR_STR | PLUGIN_VAR_THDLOCAL | ((opt) & PLUGIN_VAR_MASK), \ + #name, comment, check, update, -1, def, NULL} + +#define MYSQL_THDVAR_INT(name, opt, comment, check, update, def, min, max, blk) \ +DECLARE_MYSQL_THDVAR_SIMPLE(name, int) = { \ + PLUGIN_VAR_INT | PLUGIN_VAR_THDLOCAL | ((opt) & PLUGIN_VAR_MASK), \ + #name, comment, check, update, -1, def, min, max, blk, NULL } + +#define MYSQL_THDVAR_UINT(name, opt, comment, check, update, def, min, max, blk) \ +DECLARE_MYSQL_THDVAR_SIMPLE(name, unsigned int) = { \ + PLUGIN_VAR_INT | PLUGIN_VAR_THDLOCAL | PLUGIN_VAR_UNSIGNED | ((opt) & PLUGIN_VAR_MASK), \ + #name, comment, check, update, -1, def, min, max, blk, NULL } + +#define MYSQL_THDVAR_LONG(name, opt, comment, check, update, def, min, max, blk) \ +DECLARE_MYSQL_THDVAR_SIMPLE(name, long) = { \ + PLUGIN_VAR_LONG | PLUGIN_VAR_THDLOCAL | ((opt) & PLUGIN_VAR_MASK), \ + #name, comment, check, update, -1, def, min, max, blk, NULL } + +#define MYSQL_THDVAR_ULONG(name, opt, comment, check, update, def, min, max, blk) \ +DECLARE_MYSQL_THDVAR_SIMPLE(name, unsigned long) = { \ + PLUGIN_VAR_LONG | PLUGIN_VAR_THDLOCAL | PLUGIN_VAR_UNSIGNED | ((opt) & PLUGIN_VAR_MASK), \ + #name, comment, check, update, -1, def, min, max, blk, NULL } + +#define MYSQL_THDVAR_LONGLONG(name, opt, comment, check, update, def, min, max, blk) \ +DECLARE_MYSQL_THDVAR_SIMPLE(name, long long) = { \ + PLUGIN_VAR_LONGLONG | PLUGIN_VAR_THDLOCAL | ((opt) & PLUGIN_VAR_MASK), \ + #name, comment, check, update, -1, def, min, max, blk, NULL } + +#define MYSQL_THDVAR_ULONGLONG(name, opt, comment, check, update, def, min, max, blk) \ +DECLARE_MYSQL_THDVAR_SIMPLE(name, unsigned long long) = { \ + PLUGIN_VAR_LONGLONG | PLUGIN_VAR_THDLOCAL | PLUGIN_VAR_UNSIGNED | ((opt) & PLUGIN_VAR_MASK), \ + #name, comment, check, update, -1, def, min, max, blk, NULL } + +#define MYSQL_THDVAR_ENUM(name, opt, comment, check, update, def, typelib) \ +DECLARE_MYSQL_THDVAR_TYPELIB(name, unsigned long) = { \ + PLUGIN_VAR_ENUM | PLUGIN_VAR_THDLOCAL | ((opt) & PLUGIN_VAR_MASK), \ + #name, comment, check, update, -1, def, NULL, typelib } + +#define MYSQL_THDVAR_SET(name, opt, comment, check, update, def, typelib) \ +DECLARE_MYSQL_THDVAR_TYPELIB(name, unsigned long long) = { \ + PLUGIN_VAR_SET | PLUGIN_VAR_THDLOCAL | ((opt) & PLUGIN_VAR_MASK), \ + #name, comment, check, update, -1, def, NULL, typelib } + +/* accessor macros */ + +#define SYSVAR(name) \ + (*(MYSQL_SYSVAR_NAME(name).value)) + +/* when thd == null, result points to global value */ +#define THDVAR(thd, name) \ + (*(MYSQL_SYSVAR_NAME(name).resolve(thd, MYSQL_SYSVAR_NAME(name).offset))) + + +/* + Plugin description structure. +*/ + +struct st_mysql_plugin +{ + int type; /* the plugin type (a MYSQL_XXX_PLUGIN value) */ + void *info; /* pointer to type-specific plugin descriptor */ + const char *name; /* plugin name */ + const char *author; /* plugin author (for SHOW PLUGINS) */ + const char *descr; /* general descriptive text (for SHOW PLUGINS ) */ + int license; /* the plugin license (PLUGIN_LICENSE_XXX) */ + int (*init)(void *); /* the function to invoke when plugin is loaded */ + int (*deinit)(void *);/* the function to invoke when plugin is unloaded */ + unsigned int version; /* plugin version (for SHOW PLUGINS) */ + struct st_mysql_show_var *status_vars; + struct st_mysql_sys_var **system_vars; + void * __reserved1; /* reserved for dependency checking */ +}; + +/************************************************************************* + API for Full-text parser plugin. (MYSQL_FTPARSER_PLUGIN) +*/ + +#define MYSQL_FTPARSER_INTERFACE_VERSION 0x0100 + +/* Parsing modes. Set in MYSQL_FTPARSER_PARAM::mode */ +enum enum_ftparser_mode +{ +/* + Fast and simple mode. This mode is used for indexing, and natural + language queries. + + The parser is expected to return only those words that go into the + index. Stopwords or too short/long words should not be returned. The + 'boolean_info' argument of mysql_add_word() does not have to be set. +*/ + MYSQL_FTPARSER_SIMPLE_MODE= 0, + +/* + Parse with stopwords mode. This mode is used in boolean searches for + "phrase matching." + + The parser is not allowed to ignore words in this mode. Every word + should be returned, including stopwords and words that are too short + or long. The 'boolean_info' argument of mysql_add_word() does not + have to be set. +*/ + MYSQL_FTPARSER_WITH_STOPWORDS= 1, + +/* + Parse in boolean mode. This mode is used to parse a boolean query string. + + The parser should provide a valid MYSQL_FTPARSER_BOOLEAN_INFO + structure in the 'boolean_info' argument to mysql_add_word(). + Usually that means that the parser should recognize boolean operators + in the parsing stream and set appropriate fields in + MYSQL_FTPARSER_BOOLEAN_INFO structure accordingly. As for + MYSQL_FTPARSER_WITH_STOPWORDS mode, no word should be ignored. + Instead, use FT_TOKEN_STOPWORD for the token type of such a word. +*/ + MYSQL_FTPARSER_FULL_BOOLEAN_INFO= 2 +}; + +/* + Token types for boolean mode searching (used for the type member of + MYSQL_FTPARSER_BOOLEAN_INFO struct) + + FT_TOKEN_EOF: End of data. + FT_TOKEN_WORD: Regular word. + FT_TOKEN_LEFT_PAREN: Left parenthesis (start of group/sub-expression). + FT_TOKEN_RIGHT_PAREN: Right parenthesis (end of group/sub-expression). + FT_TOKEN_STOPWORD: Stopword. +*/ + +enum enum_ft_token_type +{ + FT_TOKEN_EOF= 0, + FT_TOKEN_WORD= 1, + FT_TOKEN_LEFT_PAREN= 2, + FT_TOKEN_RIGHT_PAREN= 3, + FT_TOKEN_STOPWORD= 4 +}; + +/* + This structure is used in boolean search mode only. It conveys + boolean-mode metadata to the MySQL search engine for every word in + the search query. A valid instance of this structure must be filled + in by the plugin parser and passed as an argument in the call to + mysql_add_word (the callback function in the MYSQL_FTPARSER_PARAM + structure) when a query is parsed in boolean mode. + + type: The token type. Should be one of the enum_ft_token_type values. + + yesno: Whether the word must be present for a match to occur: + >0 Must be present + <0 Must not be present + 0 Neither; the word is optional but its presence increases the relevance + With the default settings of the ft_boolean_syntax system variable, + >0 corresponds to the '+' operator, <0 corrresponds to the '-' operator, + and 0 means neither operator was used. + + weight_adjust: A weighting factor that determines how much a match + for the word counts. Positive values increase, negative - decrease the + relative word's importance in the query. + + wasign: The sign of the word's weight in the query. If it's non-negative + the match for the word will increase document relevance, if it's + negative - decrease (the word becomes a "noise word", the less of it the + better). + + trunc: Corresponds to the '*' operator in the default setting of the + ft_boolean_syntax system variable. +*/ + +typedef struct st_mysql_ftparser_boolean_info +{ + enum enum_ft_token_type type; + int yesno; + int weight_adjust; + char wasign; + char trunc; + /* These are parser state and must be removed. */ + char prev; + char *quot; +} MYSQL_FTPARSER_BOOLEAN_INFO; + +/* + The following flag means that buffer with a string (document, word) + may be overwritten by the caller before the end of the parsing (that is + before st_mysql_ftparser::deinit() call). If one needs the string + to survive between two successive calls of the parsing function, she + needs to save a copy of it. The flag may be set by MySQL before calling + st_mysql_ftparser::parse(), or it may be set by a plugin before calling + st_mysql_ftparser_param::mysql_parse() or + st_mysql_ftparser_param::mysql_add_word(). +*/ +#define MYSQL_FTFLAGS_NEED_COPY 1 + +/* + An argument of the full-text parser plugin. This structure is + filled in by MySQL server and passed to the parsing function of the + plugin as an in/out parameter. + + mysql_parse: A pointer to the built-in parser implementation of the + server. It's set by the server and can be used by the parser plugin + to invoke the MySQL default parser. If plugin's role is to extract + textual data from .doc, .pdf or .xml content, it might extract + plaintext from the content, and then pass the text to the default + MySQL parser to be parsed. + + mysql_add_word: A server callback to add a new word. When parsing + a document, the server sets this to point at a function that adds + the word to MySQL full-text index. When parsing a search query, + this function will add the new word to the list of words to search + for. The boolean_info argument can be NULL for all cases except + when mode is MYSQL_FTPARSER_FULL_BOOLEAN_INFO. + + ftparser_state: A generic pointer. The plugin can set it to point + to information to be used internally for its own purposes. + + mysql_ftparam: This is set by the server. It is used by MySQL functions + called via mysql_parse() and mysql_add_word() callback. The plugin + should not modify it. + + cs: Information about the character set of the document or query string. + + doc: A pointer to the document or query string to be parsed. + + length: Length of the document or query string, in bytes. + + flags: See MYSQL_FTFLAGS_* constants above. + + mode: The parsing mode. With boolean operators, with stopwords, or + nothing. See enum_ftparser_mode above. +*/ + +typedef struct st_mysql_ftparser_param +{ + int (*mysql_parse)(struct st_mysql_ftparser_param *, + char *doc, int doc_len); + int (*mysql_add_word)(struct st_mysql_ftparser_param *, + char *word, int word_len, + MYSQL_FTPARSER_BOOLEAN_INFO *boolean_info); + void *ftparser_state; + void *mysql_ftparam; + struct charset_info_st *cs; + char *doc; + int length; + int flags; + enum enum_ftparser_mode mode; +} MYSQL_FTPARSER_PARAM; + +/* + Full-text parser descriptor. + + interface_version is, e.g., MYSQL_FTPARSER_INTERFACE_VERSION. + The parsing, initialization, and deinitialization functions are + invoked per SQL statement for which the parser is used. +*/ + +struct st_mysql_ftparser +{ + int interface_version; + int (*parse)(MYSQL_FTPARSER_PARAM *param); + int (*init)(MYSQL_FTPARSER_PARAM *param); + int (*deinit)(MYSQL_FTPARSER_PARAM *param); +}; + +/************************************************************************* + API for Storage Engine plugin. (MYSQL_DAEMON_PLUGIN) +*/ + +/* handlertons of different MySQL releases are incompatible */ +#define MYSQL_DAEMON_INTERFACE_VERSION (MYSQL_VERSION_ID << 8) + +/************************************************************************* + API for I_S plugin. (MYSQL_INFORMATION_SCHEMA_PLUGIN) +*/ + +/* handlertons of different MySQL releases are incompatible */ +#define MYSQL_INFORMATION_SCHEMA_INTERFACE_VERSION (MYSQL_VERSION_ID << 8) + +/************************************************************************* + API for Storage Engine plugin. (MYSQL_STORAGE_ENGINE_PLUGIN) +*/ + +/* handlertons of different MySQL releases are incompatible */ +#define MYSQL_HANDLERTON_INTERFACE_VERSION (MYSQL_VERSION_ID << 8) + +/* + The real API is in the sql/handler.h + Here we define only the descriptor structure, that is referred from + st_mysql_plugin. +*/ + +struct st_mysql_storage_engine +{ + int interface_version; +}; + +struct handlerton; + +/* + Here we define only the descriptor structure, that is referred from + st_mysql_plugin. +*/ + +struct st_mysql_daemon +{ + int interface_version; +}; + +/* + Here we define only the descriptor structure, that is referred from + st_mysql_plugin. +*/ + +struct st_mysql_information_schema +{ + int interface_version; +}; + + +/* + st_mysql_value struct for reading values from mysqld. + Used by server variables framework to parse user-provided values. + Will be used for arguments when implementing UDFs. + + Note that val_str() returns a string in temporary memory + that will be freed at the end of statement. Copy the string + if you need it to persist. +*/ + +#define MYSQL_VALUE_TYPE_STRING 0 +#define MYSQL_VALUE_TYPE_REAL 1 +#define MYSQL_VALUE_TYPE_INT 2 + +struct st_mysql_value +{ + int (*value_type)(struct st_mysql_value *); + const char *(*val_str)(struct st_mysql_value *, char *buffer, int *length); + int (*val_real)(struct st_mysql_value *, double *realbuf); + int (*val_int)(struct st_mysql_value *, long long *intbuf); +}; + + +/************************************************************************* + Miscellaneous functions for plugin implementors +*/ + +#ifdef __cplusplus +extern "C" { +#endif + +int thd_in_lock_tables(const MYSQL_THD thd); +int thd_tablespace_op(const MYSQL_THD thd); +long long thd_test_options(const MYSQL_THD thd, long long test_options); +int thd_sql_command(const MYSQL_THD thd); +const char *thd_proc_info(MYSQL_THD thd, const char *info); +void **thd_ha_data(const MYSQL_THD thd, const struct handlerton *hton); +int thd_tx_isolation(const MYSQL_THD thd); +char *thd_security_context(MYSQL_THD thd, char *buffer, unsigned int length, + unsigned int max_query_len); +/* Increments the row counter, see THD::row_count */ +void thd_inc_row_count(MYSQL_THD thd); + +/** + Create a temporary file. + + @details + The temporary file is created in a location specified by the mysql + server configuration (--tmpdir option). The caller does not need to + delete the file, it will be deleted automatically. + + @param prefix prefix for temporary file name + @retval -1 error + @retval >= 0 a file handle that can be passed to dup or my_close +*/ +int mysql_tmpfile(const char *prefix); + +/** + Check the killed state of a connection + + @details + In MySQL support for the KILL statement is cooperative. The KILL + statement only sets a "killed" flag. This function returns the value + of that flag. A thread should check it often, especially inside + time-consuming loops, and gracefully abort the operation if it is + non-zero. + + @param thd user thread connection handle + @retval 0 the connection is active + @retval 1 the connection has been killed +*/ +int thd_killed(const MYSQL_THD thd); + + +/** + Return the thread id of a user thread + + @param thd user thread connection handle + @return thread id +*/ +unsigned long thd_get_thread_id(const MYSQL_THD thd); + + +/** + Allocate memory in the connection's local memory pool + + @details + When properly used in place of @c my_malloc(), this can significantly + improve concurrency. Don't use this or related functions to allocate + large chunks of memory. Use for temporary storage only. The memory + will be freed automatically at the end of the statement; no explicit + code is required to prevent memory leaks. + + @see alloc_root() +*/ +void *thd_alloc(MYSQL_THD thd, unsigned int size); +/** + @see thd_alloc() +*/ +void *thd_calloc(MYSQL_THD thd, unsigned int size); +/** + @see thd_alloc() +*/ +char *thd_strdup(MYSQL_THD thd, const char *str); +/** + @see thd_alloc() +*/ +char *thd_strmake(MYSQL_THD thd, const char *str, unsigned int size); +/** + @see thd_alloc() +*/ +void *thd_memdup(MYSQL_THD thd, const void* str, unsigned int size); + +/** + Create a LEX_STRING in this connection's local memory pool + + @param thd user thread connection handle + @param lex_str pointer to LEX_STRING object to be initialized + @param str initializer to be copied into lex_str + @param size length of str, in bytes + @param allocate_lex_string flag: if TRUE, allocate new LEX_STRING object, + instead of using lex_str value + @return NULL on failure, or pointer to the LEX_STRING object + + @see thd_alloc() +*/ +MYSQL_LEX_STRING *thd_make_lex_string(MYSQL_THD thd, MYSQL_LEX_STRING *lex_str, + const char *str, unsigned int size, + int allocate_lex_string); + +/** + Get the XID for this connection's transaction + + @param thd user thread connection handle + @param xid location where identifier is stored +*/ +void thd_get_xid(const MYSQL_THD thd, MYSQL_XID *xid); + +/** + Invalidate the query cache for a given table. + + @param thd user thread connection handle + @param key databasename\\0tablename\\0 + @param key_length length of key in bytes, including the NUL bytes + @param using_trx flag: TRUE if using transactions, FALSE otherwise +*/ +void mysql_query_cache_invalidate4(MYSQL_THD thd, + const char *key, unsigned int key_length, + int using_trx); + +#ifdef __cplusplus +} +#endif + +#ifdef __cplusplus +/** + Provide a handler data getter to simplify coding +*/ +inline +void * +thd_get_ha_data(const MYSQL_THD thd, const struct handlerton *hton) +{ + return *thd_ha_data(thd, hton); +} + +/** + Provide a handler data setter to simplify coding +*/ +inline +void +thd_set_ha_data(const MYSQL_THD thd, const struct handlerton *hton, + const void *ha_data) +{ + *thd_ha_data(thd, hton)= (void*) ha_data; +} +#endif + +#endif + diff --git a/EQ2/source/depends/mysql-5.1.45-winx64/include/mysql_com.h b/EQ2/source/depends/mysql-5.1.45-winx64/include/mysql_com.h new file mode 100644 index 000000000..db5a5eb87 --- /dev/null +++ b/EQ2/source/depends/mysql-5.1.45-winx64/include/mysql_com.h @@ -0,0 +1,522 @@ +/* Copyright (C) 2000 MySQL AB + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; version 2 of the License. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ + +/* +** Common definition between mysql server & client +*/ + +#ifndef _mysql_com_h +#define _mysql_com_h + +#define HOSTNAME_LENGTH 60 +#define SYSTEM_CHARSET_MBMAXLEN 3 +#define NAME_CHAR_LEN 64 /* Field/table name length */ +#define USERNAME_CHAR_LENGTH 16 +#define NAME_LEN (NAME_CHAR_LEN*SYSTEM_CHARSET_MBMAXLEN) +#define USERNAME_LENGTH (USERNAME_CHAR_LENGTH*SYSTEM_CHARSET_MBMAXLEN) + +#define SERVER_VERSION_LENGTH 60 +#define SQLSTATE_LENGTH 5 + +/* + USER_HOST_BUFF_SIZE -- length of string buffer, that is enough to contain + username and hostname parts of the user identifier with trailing zero in + MySQL standard format: + user_name_part@host_name_part\0 +*/ +#define USER_HOST_BUFF_SIZE HOSTNAME_LENGTH + USERNAME_LENGTH + 2 + +#define LOCAL_HOST "localhost" +#define LOCAL_HOST_NAMEDPIPE "." + + +#if defined(__WIN__) && !defined( _CUSTOMCONFIG_) +#define MYSQL_NAMEDPIPE "MySQL" +#define MYSQL_SERVICENAME "MySQL" +#endif /* __WIN__ */ + +/* + You should add new commands to the end of this list, otherwise old + servers won't be able to handle them as 'unsupported'. +*/ + +enum enum_server_command +{ + COM_SLEEP, COM_QUIT, COM_INIT_DB, COM_QUERY, COM_FIELD_LIST, + COM_CREATE_DB, COM_DROP_DB, COM_REFRESH, COM_SHUTDOWN, COM_STATISTICS, + COM_PROCESS_INFO, COM_CONNECT, COM_PROCESS_KILL, COM_DEBUG, COM_PING, + COM_TIME, COM_DELAYED_INSERT, COM_CHANGE_USER, COM_BINLOG_DUMP, + COM_TABLE_DUMP, COM_CONNECT_OUT, COM_REGISTER_SLAVE, + COM_STMT_PREPARE, COM_STMT_EXECUTE, COM_STMT_SEND_LONG_DATA, COM_STMT_CLOSE, + COM_STMT_RESET, COM_SET_OPTION, COM_STMT_FETCH, COM_DAEMON, + /* don't forget to update const char *command_name[] in sql_parse.cc */ + + /* Must be last */ + COM_END +}; + + +/* + Length of random string sent by server on handshake; this is also length of + obfuscated password, recieved from client +*/ +#define SCRAMBLE_LENGTH 20 +#define SCRAMBLE_LENGTH_323 8 +/* length of password stored in the db: new passwords are preceeded with '*' */ +#define SCRAMBLED_PASSWORD_CHAR_LENGTH (SCRAMBLE_LENGTH*2+1) +#define SCRAMBLED_PASSWORD_CHAR_LENGTH_323 (SCRAMBLE_LENGTH_323*2) + + +#define NOT_NULL_FLAG 1 /* Field can't be NULL */ +#define PRI_KEY_FLAG 2 /* Field is part of a primary key */ +#define UNIQUE_KEY_FLAG 4 /* Field is part of a unique key */ +#define MULTIPLE_KEY_FLAG 8 /* Field is part of a key */ +#define BLOB_FLAG 16 /* Field is a blob */ +#define UNSIGNED_FLAG 32 /* Field is unsigned */ +#define ZEROFILL_FLAG 64 /* Field is zerofill */ +#define BINARY_FLAG 128 /* Field is binary */ + +/* The following are only sent to new clients */ +#define ENUM_FLAG 256 /* field is an enum */ +#define AUTO_INCREMENT_FLAG 512 /* field is a autoincrement field */ +#define TIMESTAMP_FLAG 1024 /* Field is a timestamp */ +#define SET_FLAG 2048 /* field is a set */ +#define NO_DEFAULT_VALUE_FLAG 4096 /* Field doesn't have default value */ +#define ON_UPDATE_NOW_FLAG 8192 /* Field is set to NOW on UPDATE */ +#define NUM_FLAG 32768 /* Field is num (for clients) */ +#define PART_KEY_FLAG 16384 /* Intern; Part of some key */ +#define GROUP_FLAG 32768 /* Intern: Group field */ +#define UNIQUE_FLAG 65536 /* Intern: Used by sql_yacc */ +#define BINCMP_FLAG 131072 /* Intern: Used by sql_yacc */ +#define GET_FIXED_FIELDS_FLAG (1 << 18) /* Used to get fields in item tree */ +#define FIELD_IN_PART_FUNC_FLAG (1 << 19)/* Field part of partition func */ +#define FIELD_IN_ADD_INDEX (1<< 20) /* Intern: Field used in ADD INDEX */ +#define FIELD_IS_RENAMED (1<< 21) /* Intern: Field is being renamed */ + +#define REFRESH_GRANT 1 /* Refresh grant tables */ +#define REFRESH_LOG 2 /* Start on new log file */ +#define REFRESH_TABLES 4 /* close all tables */ +#define REFRESH_HOSTS 8 /* Flush host cache */ +#define REFRESH_STATUS 16 /* Flush status variables */ +#define REFRESH_THREADS 32 /* Flush thread cache */ +#define REFRESH_SLAVE 64 /* Reset master info and restart slave + thread */ +#define REFRESH_MASTER 128 /* Remove all bin logs in the index + and truncate the index */ + +/* The following can't be set with mysql_refresh() */ +#define REFRESH_READ_LOCK 16384 /* Lock tables for read */ +#define REFRESH_FAST 32768 /* Intern flag */ + +/* RESET (remove all queries) from query cache */ +#define REFRESH_QUERY_CACHE 65536 +#define REFRESH_QUERY_CACHE_FREE 0x20000L /* pack query cache */ +#define REFRESH_DES_KEY_FILE 0x40000L +#define REFRESH_USER_RESOURCES 0x80000L + +#define CLIENT_LONG_PASSWORD 1 /* new more secure passwords */ +#define CLIENT_FOUND_ROWS 2 /* Found instead of affected rows */ +#define CLIENT_LONG_FLAG 4 /* Get all column flags */ +#define CLIENT_CONNECT_WITH_DB 8 /* One can specify db on connect */ +#define CLIENT_NO_SCHEMA 16 /* Don't allow database.table.column */ +#define CLIENT_COMPRESS 32 /* Can use compression protocol */ +#define CLIENT_ODBC 64 /* Odbc client */ +#define CLIENT_LOCAL_FILES 128 /* Can use LOAD DATA LOCAL */ +#define CLIENT_IGNORE_SPACE 256 /* Ignore spaces before '(' */ +#define CLIENT_PROTOCOL_41 512 /* New 4.1 protocol */ +#define CLIENT_INTERACTIVE 1024 /* This is an interactive client */ +#define CLIENT_SSL 2048 /* Switch to SSL after handshake */ +#define CLIENT_IGNORE_SIGPIPE 4096 /* IGNORE sigpipes */ +#define CLIENT_TRANSACTIONS 8192 /* Client knows about transactions */ +#define CLIENT_RESERVED 16384 /* Old flag for 4.1 protocol */ +#define CLIENT_SECURE_CONNECTION 32768 /* New 4.1 authentication */ +#define CLIENT_MULTI_STATEMENTS (1UL << 16) /* Enable/disable multi-stmt support */ +#define CLIENT_MULTI_RESULTS (1UL << 17) /* Enable/disable multi-results */ + +#define CLIENT_SSL_VERIFY_SERVER_CERT (1UL << 30) +#define CLIENT_REMEMBER_OPTIONS (1UL << 31) + +/* Gather all possible capabilites (flags) supported by the server */ +#define CLIENT_ALL_FLAGS (CLIENT_LONG_PASSWORD | \ + CLIENT_FOUND_ROWS | \ + CLIENT_LONG_FLAG | \ + CLIENT_CONNECT_WITH_DB | \ + CLIENT_NO_SCHEMA | \ + CLIENT_COMPRESS | \ + CLIENT_ODBC | \ + CLIENT_LOCAL_FILES | \ + CLIENT_IGNORE_SPACE | \ + CLIENT_PROTOCOL_41 | \ + CLIENT_INTERACTIVE | \ + CLIENT_SSL | \ + CLIENT_IGNORE_SIGPIPE | \ + CLIENT_TRANSACTIONS | \ + CLIENT_RESERVED | \ + CLIENT_SECURE_CONNECTION | \ + CLIENT_MULTI_STATEMENTS | \ + CLIENT_MULTI_RESULTS | \ + CLIENT_SSL_VERIFY_SERVER_CERT | \ + CLIENT_REMEMBER_OPTIONS) + +/* + Switch off the flags that are optional and depending on build flags + If any of the optional flags is supported by the build it will be switched + on before sending to the client during the connection handshake. +*/ +#define CLIENT_BASIC_FLAGS (((CLIENT_ALL_FLAGS & ~CLIENT_SSL) \ + & ~CLIENT_COMPRESS) \ + & ~CLIENT_SSL_VERIFY_SERVER_CERT) + +#define SERVER_STATUS_IN_TRANS 1 /* Transaction has started */ +#define SERVER_STATUS_AUTOCOMMIT 2 /* Server in auto_commit mode */ +#define SERVER_MORE_RESULTS_EXISTS 8 /* Multi query - next query exists */ +#define SERVER_QUERY_NO_GOOD_INDEX_USED 16 +#define SERVER_QUERY_NO_INDEX_USED 32 +/** + The server was able to fulfill the clients request and opened a + read-only non-scrollable cursor for a query. This flag comes + in reply to COM_STMT_EXECUTE and COM_STMT_FETCH commands. +*/ +#define SERVER_STATUS_CURSOR_EXISTS 64 +/** + This flag is sent when a read-only cursor is exhausted, in reply to + COM_STMT_FETCH command. +*/ +#define SERVER_STATUS_LAST_ROW_SENT 128 +#define SERVER_STATUS_DB_DROPPED 256 /* A database was dropped */ +#define SERVER_STATUS_NO_BACKSLASH_ESCAPES 512 +/** + Sent to the client if after a prepared statement reprepare + we discovered that the new statement returns a different + number of result set columns. +*/ +#define SERVER_STATUS_METADATA_CHANGED 1024 + +/** + Server status flags that must be cleared when starting + execution of a new SQL statement. + Flags from this set are only added to the + current server status by the execution engine, but + never removed -- the execution engine expects them + to disappear automagically by the next command. +*/ +#define SERVER_STATUS_CLEAR_SET (SERVER_QUERY_NO_GOOD_INDEX_USED| \ + SERVER_QUERY_NO_INDEX_USED|\ + SERVER_MORE_RESULTS_EXISTS|\ + SERVER_STATUS_METADATA_CHANGED) + +#define MYSQL_ERRMSG_SIZE 512 +#define NET_READ_TIMEOUT 30 /* Timeout on read */ +#define NET_WRITE_TIMEOUT 60 /* Timeout on write */ +#define NET_WAIT_TIMEOUT 8*60*60 /* Wait for new query */ + +#define ONLY_KILL_QUERY 1 + + +struct st_vio; /* Only C */ +typedef struct st_vio Vio; + +#define MAX_TINYINT_WIDTH 3 /* Max width for a TINY w.o. sign */ +#define MAX_SMALLINT_WIDTH 5 /* Max width for a SHORT w.o. sign */ +#define MAX_MEDIUMINT_WIDTH 8 /* Max width for a INT24 w.o. sign */ +#define MAX_INT_WIDTH 10 /* Max width for a LONG w.o. sign */ +#define MAX_BIGINT_WIDTH 20 /* Max width for a LONGLONG */ +#define MAX_CHAR_WIDTH 255 /* Max length for a CHAR colum */ +#define MAX_BLOB_WIDTH 16777216 /* Default width for blob */ + +typedef struct st_net { +#if !defined(CHECK_EMBEDDED_DIFFERENCES) || !defined(EMBEDDED_LIBRARY) + Vio *vio; + unsigned char *buff,*buff_end,*write_pos,*read_pos; + my_socket fd; /* For Perl DBI/dbd */ + /* + The following variable is set if we are doing several queries in one + command ( as in LOAD TABLE ... FROM MASTER ), + and do not want to confuse the client with OK at the wrong time + */ + unsigned long remain_in_buf,length, buf_length, where_b; + unsigned long max_packet,max_packet_size; + unsigned int pkt_nr,compress_pkt_nr; + unsigned int write_timeout, read_timeout, retry_count; + int fcntl; + unsigned int *return_status; + unsigned char reading_or_writing; + char save_char; + my_bool unused0; /* Please remove with the next incompatible ABI change. */ + my_bool unused; /* Please remove with the next incompatible ABI change */ + my_bool compress; + my_bool unused1; /* Please remove with the next incompatible ABI change. */ + /* + Pointer to query object in query cache, do not equal NULL (0) for + queries in cache that have not stored its results yet + */ +#endif + /* + 'query_cache_query' should be accessed only via query cache + functions and methods to maintain proper locking. + */ + unsigned char *query_cache_query; + unsigned int last_errno; + unsigned char error; + my_bool unused2; /* Please remove with the next incompatible ABI change. */ + my_bool return_errno; + /** Client library error message buffer. Actually belongs to struct MYSQL. */ + char last_error[MYSQL_ERRMSG_SIZE]; + /** Client library sqlstate buffer. Set along with the error message. */ + char sqlstate[SQLSTATE_LENGTH+1]; + void *extension; +} NET; + + +#define packet_error (~(unsigned long) 0) + +enum enum_field_types { MYSQL_TYPE_DECIMAL, MYSQL_TYPE_TINY, + MYSQL_TYPE_SHORT, MYSQL_TYPE_LONG, + MYSQL_TYPE_FLOAT, MYSQL_TYPE_DOUBLE, + MYSQL_TYPE_NULL, MYSQL_TYPE_TIMESTAMP, + MYSQL_TYPE_LONGLONG,MYSQL_TYPE_INT24, + MYSQL_TYPE_DATE, MYSQL_TYPE_TIME, + MYSQL_TYPE_DATETIME, MYSQL_TYPE_YEAR, + MYSQL_TYPE_NEWDATE, MYSQL_TYPE_VARCHAR, + MYSQL_TYPE_BIT, + MYSQL_TYPE_NEWDECIMAL=246, + MYSQL_TYPE_ENUM=247, + MYSQL_TYPE_SET=248, + MYSQL_TYPE_TINY_BLOB=249, + MYSQL_TYPE_MEDIUM_BLOB=250, + MYSQL_TYPE_LONG_BLOB=251, + MYSQL_TYPE_BLOB=252, + MYSQL_TYPE_VAR_STRING=253, + MYSQL_TYPE_STRING=254, + MYSQL_TYPE_GEOMETRY=255 + +}; + +/* For backward compatibility */ +#define CLIENT_MULTI_QUERIES CLIENT_MULTI_STATEMENTS +#define FIELD_TYPE_DECIMAL MYSQL_TYPE_DECIMAL +#define FIELD_TYPE_NEWDECIMAL MYSQL_TYPE_NEWDECIMAL +#define FIELD_TYPE_TINY MYSQL_TYPE_TINY +#define FIELD_TYPE_SHORT MYSQL_TYPE_SHORT +#define FIELD_TYPE_LONG MYSQL_TYPE_LONG +#define FIELD_TYPE_FLOAT MYSQL_TYPE_FLOAT +#define FIELD_TYPE_DOUBLE MYSQL_TYPE_DOUBLE +#define FIELD_TYPE_NULL MYSQL_TYPE_NULL +#define FIELD_TYPE_TIMESTAMP MYSQL_TYPE_TIMESTAMP +#define FIELD_TYPE_LONGLONG MYSQL_TYPE_LONGLONG +#define FIELD_TYPE_INT24 MYSQL_TYPE_INT24 +#define FIELD_TYPE_DATE MYSQL_TYPE_DATE +#define FIELD_TYPE_TIME MYSQL_TYPE_TIME +#define FIELD_TYPE_DATETIME MYSQL_TYPE_DATETIME +#define FIELD_TYPE_YEAR MYSQL_TYPE_YEAR +#define FIELD_TYPE_NEWDATE MYSQL_TYPE_NEWDATE +#define FIELD_TYPE_ENUM MYSQL_TYPE_ENUM +#define FIELD_TYPE_SET MYSQL_TYPE_SET +#define FIELD_TYPE_TINY_BLOB MYSQL_TYPE_TINY_BLOB +#define FIELD_TYPE_MEDIUM_BLOB MYSQL_TYPE_MEDIUM_BLOB +#define FIELD_TYPE_LONG_BLOB MYSQL_TYPE_LONG_BLOB +#define FIELD_TYPE_BLOB MYSQL_TYPE_BLOB +#define FIELD_TYPE_VAR_STRING MYSQL_TYPE_VAR_STRING +#define FIELD_TYPE_STRING MYSQL_TYPE_STRING +#define FIELD_TYPE_CHAR MYSQL_TYPE_TINY +#define FIELD_TYPE_INTERVAL MYSQL_TYPE_ENUM +#define FIELD_TYPE_GEOMETRY MYSQL_TYPE_GEOMETRY +#define FIELD_TYPE_BIT MYSQL_TYPE_BIT + + +/* Shutdown/kill enums and constants */ + +/* Bits for THD::killable. */ +#define MYSQL_SHUTDOWN_KILLABLE_CONNECT (unsigned char)(1 << 0) +#define MYSQL_SHUTDOWN_KILLABLE_TRANS (unsigned char)(1 << 1) +#define MYSQL_SHUTDOWN_KILLABLE_LOCK_TABLE (unsigned char)(1 << 2) +#define MYSQL_SHUTDOWN_KILLABLE_UPDATE (unsigned char)(1 << 3) + +enum mysql_enum_shutdown_level { + /* + We want levels to be in growing order of hardness (because we use number + comparisons). Note that DEFAULT does not respect the growing property, but + it's ok. + */ + SHUTDOWN_DEFAULT = 0, + /* wait for existing connections to finish */ + SHUTDOWN_WAIT_CONNECTIONS= MYSQL_SHUTDOWN_KILLABLE_CONNECT, + /* wait for existing trans to finish */ + SHUTDOWN_WAIT_TRANSACTIONS= MYSQL_SHUTDOWN_KILLABLE_TRANS, + /* wait for existing updates to finish (=> no partial MyISAM update) */ + SHUTDOWN_WAIT_UPDATES= MYSQL_SHUTDOWN_KILLABLE_UPDATE, + /* flush InnoDB buffers and other storage engines' buffers*/ + SHUTDOWN_WAIT_ALL_BUFFERS= (MYSQL_SHUTDOWN_KILLABLE_UPDATE << 1), + /* don't flush InnoDB buffers, flush other storage engines' buffers*/ + SHUTDOWN_WAIT_CRITICAL_BUFFERS= (MYSQL_SHUTDOWN_KILLABLE_UPDATE << 1) + 1, + /* Now the 2 levels of the KILL command */ +#if MYSQL_VERSION_ID >= 50000 + KILL_QUERY= 254, +#endif + KILL_CONNECTION= 255 +}; + + +enum enum_cursor_type +{ + CURSOR_TYPE_NO_CURSOR= 0, + CURSOR_TYPE_READ_ONLY= 1, + CURSOR_TYPE_FOR_UPDATE= 2, + CURSOR_TYPE_SCROLLABLE= 4 +}; + + +/* options for mysql_set_option */ +enum enum_mysql_set_option +{ + MYSQL_OPTION_MULTI_STATEMENTS_ON, + MYSQL_OPTION_MULTI_STATEMENTS_OFF +}; + +#define net_new_transaction(net) ((net)->pkt_nr=0) + +#ifdef __cplusplus +extern "C" { +#endif + +my_bool my_net_init(NET *net, Vio* vio); +void my_net_local_init(NET *net); +void net_end(NET *net); + void net_clear(NET *net, my_bool clear_buffer); +my_bool net_realloc(NET *net, size_t length); +my_bool net_flush(NET *net); +my_bool my_net_write(NET *net,const unsigned char *packet, size_t len); +my_bool net_write_command(NET *net,unsigned char command, + const unsigned char *header, size_t head_len, + const unsigned char *packet, size_t len); +int net_real_write(NET *net,const unsigned char *packet, size_t len); +unsigned long my_net_read(NET *net); + +#ifdef _global_h +void my_net_set_write_timeout(NET *net, uint timeout); +void my_net_set_read_timeout(NET *net, uint timeout); +#endif + +/* + The following function is not meant for normal usage + Currently it's used internally by manager.c +*/ +struct sockaddr; +int my_connect(my_socket s, const struct sockaddr *name, unsigned int namelen, + unsigned int timeout); + +struct rand_struct { + unsigned long seed1,seed2,max_value; + double max_value_dbl; +}; + +#ifdef __cplusplus +} +#endif + + /* The following is for user defined functions */ + +enum Item_result {STRING_RESULT=0, REAL_RESULT, INT_RESULT, ROW_RESULT, + DECIMAL_RESULT}; + +typedef struct st_udf_args +{ + unsigned int arg_count; /* Number of arguments */ + enum Item_result *arg_type; /* Pointer to item_results */ + char **args; /* Pointer to argument */ + unsigned long *lengths; /* Length of string arguments */ + char *maybe_null; /* Set to 1 for all maybe_null args */ + char **attributes; /* Pointer to attribute name */ + unsigned long *attribute_lengths; /* Length of attribute arguments */ + void *extension; +} UDF_ARGS; + + /* This holds information about the result */ + +typedef struct st_udf_init +{ + my_bool maybe_null; /* 1 if function can return NULL */ + unsigned int decimals; /* for real functions */ + unsigned long max_length; /* For string functions */ + char *ptr; /* free pointer for function data */ + my_bool const_item; /* 1 if function always returns the same value */ + void *extension; +} UDF_INIT; +/* + TODO: add a notion for determinism of the UDF. + See Item_udf_func::update_used_tables () +*/ + + /* Constants when using compression */ +#define NET_HEADER_SIZE 4 /* standard header size */ +#define COMP_HEADER_SIZE 3 /* compression header extra size */ + + /* Prototypes to password functions */ + +#ifdef __cplusplus +extern "C" { +#endif + +/* + These functions are used for authentication by client and server and + implemented in sql/password.c +*/ + +void randominit(struct rand_struct *, unsigned long seed1, + unsigned long seed2); +double my_rnd(struct rand_struct *); +void create_random_string(char *to, unsigned int length, struct rand_struct *rand_st); + +void hash_password(unsigned long *to, const char *password, unsigned int password_len); +void make_scrambled_password_323(char *to, const char *password); +void scramble_323(char *to, const char *message, const char *password); +my_bool check_scramble_323(const char *, const char *message, + unsigned long *salt); +void get_salt_from_password_323(unsigned long *res, const char *password); +void make_password_from_salt_323(char *to, const unsigned long *salt); + +void make_scrambled_password(char *to, const char *password); +void scramble(char *to, const char *message, const char *password); +my_bool check_scramble(const char *reply, const char *message, + const unsigned char *hash_stage2); +void get_salt_from_password(unsigned char *res, const char *password); +void make_password_from_salt(char *to, const unsigned char *hash_stage2); +char *octet2hex(char *to, const char *str, unsigned int len); + +/* end of password.c */ + +char *get_tty_password(const char *opt_message); +const char *mysql_errno_to_sqlstate(unsigned int mysql_errno); + +/* Some other useful functions */ + +my_bool my_thread_init(void); +void my_thread_end(void); + +#ifdef _global_h +ulong STDCALL net_field_length(uchar **packet); +my_ulonglong net_field_length_ll(uchar **packet); +uchar *net_store_length(uchar *pkg, ulonglong length); +#endif + +#ifdef __cplusplus +} +#endif + +#define NULL_LENGTH ((unsigned long) ~0) /* For net_store_length */ +#define MYSQL_STMT_HEADER 4 +#define MYSQL_LONG_DATA_HEADER 6 + +#endif diff --git a/EQ2/source/depends/mysql-5.1.45-winx64/include/mysql_embed.h b/EQ2/source/depends/mysql-5.1.45-winx64/include/mysql_embed.h new file mode 100644 index 000000000..4a7fd3ef6 --- /dev/null +++ b/EQ2/source/depends/mysql-5.1.45-winx64/include/mysql_embed.h @@ -0,0 +1,30 @@ +/* Copyright (C) 2000 MySQL AB + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; version 2 of the License. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ + +/* Defines that are unique to the embedded version of MySQL */ + +#ifdef EMBEDDED_LIBRARY + +/* Things we don't need in the embedded version of MySQL */ +/* TODO HF add #undef HAVE_VIO if we don't want client in embedded library */ + +#undef HAVE_PSTACK /* No stacktrace */ +#undef HAVE_OPENSSL +#undef HAVE_SMEM /* No shared memory */ +#undef HAVE_NDBCLUSTER_DB /* No NDB cluster */ + +#define DONT_USE_RAID + +#endif /* EMBEDDED_LIBRARY */ diff --git a/EQ2/source/depends/mysql-5.1.45-winx64/include/mysql_time.h b/EQ2/source/depends/mysql-5.1.45-winx64/include/mysql_time.h new file mode 100644 index 000000000..0a3f17a81 --- /dev/null +++ b/EQ2/source/depends/mysql-5.1.45-winx64/include/mysql_time.h @@ -0,0 +1,55 @@ +/* Copyright (C) 2004 MySQL AB + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; version 2 of the License. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ + +#ifndef _mysql_time_h_ +#define _mysql_time_h_ + +/* + Time declarations shared between the server and client API: + you should not add anything to this header unless it's used + (and hence should be visible) in mysql.h. + If you're looking for a place to add new time-related declaration, + it's most likely my_time.h. See also "C API Handling of Date + and Time Values" chapter in documentation. +*/ + +enum enum_mysql_timestamp_type +{ + MYSQL_TIMESTAMP_NONE= -2, MYSQL_TIMESTAMP_ERROR= -1, + MYSQL_TIMESTAMP_DATE= 0, MYSQL_TIMESTAMP_DATETIME= 1, MYSQL_TIMESTAMP_TIME= 2 +}; + + +/* + Structure which is used to represent datetime values inside MySQL. + + We assume that values in this structure are normalized, i.e. year <= 9999, + month <= 12, day <= 31, hour <= 23, hour <= 59, hour <= 59. Many functions + in server such as my_system_gmt_sec() or make_time() family of functions + rely on this (actually now usage of make_*() family relies on a bit weaker + restriction). Also functions that produce MYSQL_TIME as result ensure this. + There is one exception to this rule though if this structure holds time + value (time_type == MYSQL_TIMESTAMP_TIME) days and hour member can hold + bigger values. +*/ +typedef struct st_mysql_time +{ + unsigned int year, month, day, hour, minute, second; + unsigned long second_part; + my_bool neg; + enum enum_mysql_timestamp_type time_type; +} MYSQL_TIME; + +#endif /* _mysql_time_h_ */ diff --git a/EQ2/source/depends/mysql-5.1.45-winx64/include/mysql_version.h b/EQ2/source/depends/mysql-5.1.45-winx64/include/mysql_version.h new file mode 100644 index 000000000..8b52bbef6 --- /dev/null +++ b/EQ2/source/depends/mysql-5.1.45-winx64/include/mysql_version.h @@ -0,0 +1,30 @@ +/* Copyright Abandoned 1996, 1999, 2001 MySQL AB + This file is public domain and comes with NO WARRANTY of any kind */ + +/* Version numbers for protocol & mysqld */ + +#ifndef _mysql_version_h +#define _mysql_version_h +#ifdef _CUSTOMCONFIG_ +#include +#else +#define PROTOCOL_VERSION 10 +#define MYSQL_SERVER_VERSION "5.1.45" +#define MYSQL_BASE_VERSION "mysqld-5.1" +#define MYSQL_SERVER_SUFFIX_DEF "-community" +#define FRM_VER 6 +#define MYSQL_VERSION_ID 50145 +#define MYSQL_PORT 3306 +#define MYSQL_PORT_DEFAULT 0 +#define MYSQL_UNIX_ADDR "/tmp/mysql.sock" +#define MYSQL_CONFIG_NAME "my" +#define MYSQL_COMPILATION_COMMENT "MySQL Community Server (GPL)" + +/* mysqld compile time options */ +#endif /* _CUSTOMCONFIG_ */ + +#ifndef LICENSE +#define LICENSE GPL +#endif /* LICENSE */ + +#endif /* _mysql_version_h */ diff --git a/EQ2/source/depends/mysql-5.1.45-winx64/include/mysqld_ername.h b/EQ2/source/depends/mysql-5.1.45-winx64/include/mysqld_ername.h new file mode 100644 index 000000000..cc8b36ada --- /dev/null +++ b/EQ2/source/depends/mysql-5.1.45-winx64/include/mysqld_ername.h @@ -0,0 +1,643 @@ +/* Autogenerated file, please don't edit */ + +{ "ER_HASHCHK", 1000 }, +{ "ER_NISAMCHK", 1001 }, +{ "ER_NO", 1002 }, +{ "ER_YES", 1003 }, +{ "ER_CANT_CREATE_FILE", 1004 }, +{ "ER_CANT_CREATE_TABLE", 1005 }, +{ "ER_CANT_CREATE_DB", 1006 }, +{ "ER_DB_CREATE_EXISTS", 1007 }, +{ "ER_DB_DROP_EXISTS", 1008 }, +{ "ER_DB_DROP_DELETE", 1009 }, +{ "ER_DB_DROP_RMDIR", 1010 }, +{ "ER_CANT_DELETE_FILE", 1011 }, +{ "ER_CANT_FIND_SYSTEM_REC", 1012 }, +{ "ER_CANT_GET_STAT", 1013 }, +{ "ER_CANT_GET_WD", 1014 }, +{ "ER_CANT_LOCK", 1015 }, +{ "ER_CANT_OPEN_FILE", 1016 }, +{ "ER_FILE_NOT_FOUND", 1017 }, +{ "ER_CANT_READ_DIR", 1018 }, +{ "ER_CANT_SET_WD", 1019 }, +{ "ER_CHECKREAD", 1020 }, +{ "ER_DISK_FULL", 1021 }, +{ "ER_DUP_KEY", 1022 }, +{ "ER_ERROR_ON_CLOSE", 1023 }, +{ "ER_ERROR_ON_READ", 1024 }, +{ "ER_ERROR_ON_RENAME", 1025 }, +{ "ER_ERROR_ON_WRITE", 1026 }, +{ "ER_FILE_USED", 1027 }, +{ "ER_FILSORT_ABORT", 1028 }, +{ "ER_FORM_NOT_FOUND", 1029 }, +{ "ER_GET_ERRNO", 1030 }, +{ "ER_ILLEGAL_HA", 1031 }, +{ "ER_KEY_NOT_FOUND", 1032 }, +{ "ER_NOT_FORM_FILE", 1033 }, +{ "ER_NOT_KEYFILE", 1034 }, +{ "ER_OLD_KEYFILE", 1035 }, +{ "ER_OPEN_AS_READONLY", 1036 }, +{ "ER_OUTOFMEMORY", 1037 }, +{ "ER_OUT_OF_SORTMEMORY", 1038 }, +{ "ER_UNEXPECTED_EOF", 1039 }, +{ "ER_CON_COUNT_ERROR", 1040 }, +{ "ER_OUT_OF_RESOURCES", 1041 }, +{ "ER_BAD_HOST_ERROR", 1042 }, +{ "ER_HANDSHAKE_ERROR", 1043 }, +{ "ER_DBACCESS_DENIED_ERROR", 1044 }, +{ "ER_ACCESS_DENIED_ERROR", 1045 }, +{ "ER_NO_DB_ERROR", 1046 }, +{ "ER_UNKNOWN_COM_ERROR", 1047 }, +{ "ER_BAD_NULL_ERROR", 1048 }, +{ "ER_BAD_DB_ERROR", 1049 }, +{ "ER_TABLE_EXISTS_ERROR", 1050 }, +{ "ER_BAD_TABLE_ERROR", 1051 }, +{ "ER_NON_UNIQ_ERROR", 1052 }, +{ "ER_SERVER_SHUTDOWN", 1053 }, +{ "ER_BAD_FIELD_ERROR", 1054 }, +{ "ER_WRONG_FIELD_WITH_GROUP", 1055 }, +{ "ER_WRONG_GROUP_FIELD", 1056 }, +{ "ER_WRONG_SUM_SELECT", 1057 }, +{ "ER_WRONG_VALUE_COUNT", 1058 }, +{ "ER_TOO_LONG_IDENT", 1059 }, +{ "ER_DUP_FIELDNAME", 1060 }, +{ "ER_DUP_KEYNAME", 1061 }, +{ "ER_DUP_ENTRY", 1062 }, +{ "ER_WRONG_FIELD_SPEC", 1063 }, +{ "ER_PARSE_ERROR", 1064 }, +{ "ER_EMPTY_QUERY", 1065 }, +{ "ER_NONUNIQ_TABLE", 1066 }, +{ "ER_INVALID_DEFAULT", 1067 }, +{ "ER_MULTIPLE_PRI_KEY", 1068 }, +{ "ER_TOO_MANY_KEYS", 1069 }, +{ "ER_TOO_MANY_KEY_PARTS", 1070 }, +{ "ER_TOO_LONG_KEY", 1071 }, +{ "ER_KEY_COLUMN_DOES_NOT_EXITS", 1072 }, +{ "ER_BLOB_USED_AS_KEY", 1073 }, +{ "ER_TOO_BIG_FIELDLENGTH", 1074 }, +{ "ER_WRONG_AUTO_KEY", 1075 }, +{ "ER_READY", 1076 }, +{ "ER_NORMAL_SHUTDOWN", 1077 }, +{ "ER_GOT_SIGNAL", 1078 }, +{ "ER_SHUTDOWN_COMPLETE", 1079 }, +{ "ER_FORCING_CLOSE", 1080 }, +{ "ER_IPSOCK_ERROR", 1081 }, +{ "ER_NO_SUCH_INDEX", 1082 }, +{ "ER_WRONG_FIELD_TERMINATORS", 1083 }, +{ "ER_BLOBS_AND_NO_TERMINATED", 1084 }, +{ "ER_TEXTFILE_NOT_READABLE", 1085 }, +{ "ER_FILE_EXISTS_ERROR", 1086 }, +{ "ER_LOAD_INFO", 1087 }, +{ "ER_ALTER_INFO", 1088 }, +{ "ER_WRONG_SUB_KEY", 1089 }, +{ "ER_CANT_REMOVE_ALL_FIELDS", 1090 }, +{ "ER_CANT_DROP_FIELD_OR_KEY", 1091 }, +{ "ER_INSERT_INFO", 1092 }, +{ "ER_UPDATE_TABLE_USED", 1093 }, +{ "ER_NO_SUCH_THREAD", 1094 }, +{ "ER_KILL_DENIED_ERROR", 1095 }, +{ "ER_NO_TABLES_USED", 1096 }, +{ "ER_TOO_BIG_SET", 1097 }, +{ "ER_NO_UNIQUE_LOGFILE", 1098 }, +{ "ER_TABLE_NOT_LOCKED_FOR_WRITE", 1099 }, +{ "ER_TABLE_NOT_LOCKED", 1100 }, +{ "ER_BLOB_CANT_HAVE_DEFAULT", 1101 }, +{ "ER_WRONG_DB_NAME", 1102 }, +{ "ER_WRONG_TABLE_NAME", 1103 }, +{ "ER_TOO_BIG_SELECT", 1104 }, +{ "ER_UNKNOWN_ERROR", 1105 }, +{ "ER_UNKNOWN_PROCEDURE", 1106 }, +{ "ER_WRONG_PARAMCOUNT_TO_PROCEDURE", 1107 }, +{ "ER_WRONG_PARAMETERS_TO_PROCEDURE", 1108 }, +{ "ER_UNKNOWN_TABLE", 1109 }, +{ "ER_FIELD_SPECIFIED_TWICE", 1110 }, +{ "ER_INVALID_GROUP_FUNC_USE", 1111 }, +{ "ER_UNSUPPORTED_EXTENSION", 1112 }, +{ "ER_TABLE_MUST_HAVE_COLUMNS", 1113 }, +{ "ER_RECORD_FILE_FULL", 1114 }, +{ "ER_UNKNOWN_CHARACTER_SET", 1115 }, +{ "ER_TOO_MANY_TABLES", 1116 }, +{ "ER_TOO_MANY_FIELDS", 1117 }, +{ "ER_TOO_BIG_ROWSIZE", 1118 }, +{ "ER_STACK_OVERRUN", 1119 }, +{ "ER_WRONG_OUTER_JOIN", 1120 }, +{ "ER_NULL_COLUMN_IN_INDEX", 1121 }, +{ "ER_CANT_FIND_UDF", 1122 }, +{ "ER_CANT_INITIALIZE_UDF", 1123 }, +{ "ER_UDF_NO_PATHS", 1124 }, +{ "ER_UDF_EXISTS", 1125 }, +{ "ER_CANT_OPEN_LIBRARY", 1126 }, +{ "ER_CANT_FIND_DL_ENTRY", 1127 }, +{ "ER_FUNCTION_NOT_DEFINED", 1128 }, +{ "ER_HOST_IS_BLOCKED", 1129 }, +{ "ER_HOST_NOT_PRIVILEGED", 1130 }, +{ "ER_PASSWORD_ANONYMOUS_USER", 1131 }, +{ "ER_PASSWORD_NOT_ALLOWED", 1132 }, +{ "ER_PASSWORD_NO_MATCH", 1133 }, +{ "ER_UPDATE_INFO", 1134 }, +{ "ER_CANT_CREATE_THREAD", 1135 }, +{ "ER_WRONG_VALUE_COUNT_ON_ROW", 1136 }, +{ "ER_CANT_REOPEN_TABLE", 1137 }, +{ "ER_INVALID_USE_OF_NULL", 1138 }, +{ "ER_REGEXP_ERROR", 1139 }, +{ "ER_MIX_OF_GROUP_FUNC_AND_FIELDS", 1140 }, +{ "ER_NONEXISTING_GRANT", 1141 }, +{ "ER_TABLEACCESS_DENIED_ERROR", 1142 }, +{ "ER_COLUMNACCESS_DENIED_ERROR", 1143 }, +{ "ER_ILLEGAL_GRANT_FOR_TABLE", 1144 }, +{ "ER_GRANT_WRONG_HOST_OR_USER", 1145 }, +{ "ER_NO_SUCH_TABLE", 1146 }, +{ "ER_NONEXISTING_TABLE_GRANT", 1147 }, +{ "ER_NOT_ALLOWED_COMMAND", 1148 }, +{ "ER_SYNTAX_ERROR", 1149 }, +{ "ER_DELAYED_CANT_CHANGE_LOCK", 1150 }, +{ "ER_TOO_MANY_DELAYED_THREADS", 1151 }, +{ "ER_ABORTING_CONNECTION", 1152 }, +{ "ER_NET_PACKET_TOO_LARGE", 1153 }, +{ "ER_NET_READ_ERROR_FROM_PIPE", 1154 }, +{ "ER_NET_FCNTL_ERROR", 1155 }, +{ "ER_NET_PACKETS_OUT_OF_ORDER", 1156 }, +{ "ER_NET_UNCOMPRESS_ERROR", 1157 }, +{ "ER_NET_READ_ERROR", 1158 }, +{ "ER_NET_READ_INTERRUPTED", 1159 }, +{ "ER_NET_ERROR_ON_WRITE", 1160 }, +{ "ER_NET_WRITE_INTERRUPTED", 1161 }, +{ "ER_TOO_LONG_STRING", 1162 }, +{ "ER_TABLE_CANT_HANDLE_BLOB", 1163 }, +{ "ER_TABLE_CANT_HANDLE_AUTO_INCREMENT", 1164 }, +{ "ER_DELAYED_INSERT_TABLE_LOCKED", 1165 }, +{ "ER_WRONG_COLUMN_NAME", 1166 }, +{ "ER_WRONG_KEY_COLUMN", 1167 }, +{ "ER_WRONG_MRG_TABLE", 1168 }, +{ "ER_DUP_UNIQUE", 1169 }, +{ "ER_BLOB_KEY_WITHOUT_LENGTH", 1170 }, +{ "ER_PRIMARY_CANT_HAVE_NULL", 1171 }, +{ "ER_TOO_MANY_ROWS", 1172 }, +{ "ER_REQUIRES_PRIMARY_KEY", 1173 }, +{ "ER_NO_RAID_COMPILED", 1174 }, +{ "ER_UPDATE_WITHOUT_KEY_IN_SAFE_MODE", 1175 }, +{ "ER_KEY_DOES_NOT_EXITS", 1176 }, +{ "ER_CHECK_NO_SUCH_TABLE", 1177 }, +{ "ER_CHECK_NOT_IMPLEMENTED", 1178 }, +{ "ER_CANT_DO_THIS_DURING_AN_TRANSACTION", 1179 }, +{ "ER_ERROR_DURING_COMMIT", 1180 }, +{ "ER_ERROR_DURING_ROLLBACK", 1181 }, +{ "ER_ERROR_DURING_FLUSH_LOGS", 1182 }, +{ "ER_ERROR_DURING_CHECKPOINT", 1183 }, +{ "ER_NEW_ABORTING_CONNECTION", 1184 }, +{ "ER_DUMP_NOT_IMPLEMENTED", 1185 }, +{ "ER_FLUSH_MASTER_BINLOG_CLOSED", 1186 }, +{ "ER_INDEX_REBUILD", 1187 }, +{ "ER_MASTER", 1188 }, +{ "ER_MASTER_NET_READ", 1189 }, +{ "ER_MASTER_NET_WRITE", 1190 }, +{ "ER_FT_MATCHING_KEY_NOT_FOUND", 1191 }, +{ "ER_LOCK_OR_ACTIVE_TRANSACTION", 1192 }, +{ "ER_UNKNOWN_SYSTEM_VARIABLE", 1193 }, +{ "ER_CRASHED_ON_USAGE", 1194 }, +{ "ER_CRASHED_ON_REPAIR", 1195 }, +{ "ER_WARNING_NOT_COMPLETE_ROLLBACK", 1196 }, +{ "ER_TRANS_CACHE_FULL", 1197 }, +{ "ER_SLAVE_MUST_STOP", 1198 }, +{ "ER_SLAVE_NOT_RUNNING", 1199 }, +{ "ER_BAD_SLAVE", 1200 }, +{ "ER_MASTER_INFO", 1201 }, +{ "ER_SLAVE_THREAD", 1202 }, +{ "ER_TOO_MANY_USER_CONNECTIONS", 1203 }, +{ "ER_SET_CONSTANTS_ONLY", 1204 }, +{ "ER_LOCK_WAIT_TIMEOUT", 1205 }, +{ "ER_LOCK_TABLE_FULL", 1206 }, +{ "ER_READ_ONLY_TRANSACTION", 1207 }, +{ "ER_DROP_DB_WITH_READ_LOCK", 1208 }, +{ "ER_CREATE_DB_WITH_READ_LOCK", 1209 }, +{ "ER_WRONG_ARGUMENTS", 1210 }, +{ "ER_NO_PERMISSION_TO_CREATE_USER", 1211 }, +{ "ER_UNION_TABLES_IN_DIFFERENT_DIR", 1212 }, +{ "ER_LOCK_DEADLOCK", 1213 }, +{ "ER_TABLE_CANT_HANDLE_FT", 1214 }, +{ "ER_CANNOT_ADD_FOREIGN", 1215 }, +{ "ER_NO_REFERENCED_ROW", 1216 }, +{ "ER_ROW_IS_REFERENCED", 1217 }, +{ "ER_CONNECT_TO_MASTER", 1218 }, +{ "ER_QUERY_ON_MASTER", 1219 }, +{ "ER_ERROR_WHEN_EXECUTING_COMMAND", 1220 }, +{ "ER_WRONG_USAGE", 1221 }, +{ "ER_WRONG_NUMBER_OF_COLUMNS_IN_SELECT", 1222 }, +{ "ER_CANT_UPDATE_WITH_READLOCK", 1223 }, +{ "ER_MIXING_NOT_ALLOWED", 1224 }, +{ "ER_DUP_ARGUMENT", 1225 }, +{ "ER_USER_LIMIT_REACHED", 1226 }, +{ "ER_SPECIFIC_ACCESS_DENIED_ERROR", 1227 }, +{ "ER_LOCAL_VARIABLE", 1228 }, +{ "ER_GLOBAL_VARIABLE", 1229 }, +{ "ER_NO_DEFAULT", 1230 }, +{ "ER_WRONG_VALUE_FOR_VAR", 1231 }, +{ "ER_WRONG_TYPE_FOR_VAR", 1232 }, +{ "ER_VAR_CANT_BE_READ", 1233 }, +{ "ER_CANT_USE_OPTION_HERE", 1234 }, +{ "ER_NOT_SUPPORTED_YET", 1235 }, +{ "ER_MASTER_FATAL_ERROR_READING_BINLOG", 1236 }, +{ "ER_SLAVE_IGNORED_TABLE", 1237 }, +{ "ER_INCORRECT_GLOBAL_LOCAL_VAR", 1238 }, +{ "ER_WRONG_FK_DEF", 1239 }, +{ "ER_KEY_REF_DO_NOT_MATCH_TABLE_REF", 1240 }, +{ "ER_OPERAND_COLUMNS", 1241 }, +{ "ER_SUBQUERY_NO_1_ROW", 1242 }, +{ "ER_UNKNOWN_STMT_HANDLER", 1243 }, +{ "ER_CORRUPT_HELP_DB", 1244 }, +{ "ER_CYCLIC_REFERENCE", 1245 }, +{ "ER_AUTO_CONVERT", 1246 }, +{ "ER_ILLEGAL_REFERENCE", 1247 }, +{ "ER_DERIVED_MUST_HAVE_ALIAS", 1248 }, +{ "ER_SELECT_REDUCED", 1249 }, +{ "ER_TABLENAME_NOT_ALLOWED_HERE", 1250 }, +{ "ER_NOT_SUPPORTED_AUTH_MODE", 1251 }, +{ "ER_SPATIAL_CANT_HAVE_NULL", 1252 }, +{ "ER_COLLATION_CHARSET_MISMATCH", 1253 }, +{ "ER_SLAVE_WAS_RUNNING", 1254 }, +{ "ER_SLAVE_WAS_NOT_RUNNING", 1255 }, +{ "ER_TOO_BIG_FOR_UNCOMPRESS", 1256 }, +{ "ER_ZLIB_Z_MEM_ERROR", 1257 }, +{ "ER_ZLIB_Z_BUF_ERROR", 1258 }, +{ "ER_ZLIB_Z_DATA_ERROR", 1259 }, +{ "ER_CUT_VALUE_GROUP_CONCAT", 1260 }, +{ "ER_WARN_TOO_FEW_RECORDS", 1261 }, +{ "ER_WARN_TOO_MANY_RECORDS", 1262 }, +{ "ER_WARN_NULL_TO_NOTNULL", 1263 }, +{ "ER_WARN_DATA_OUT_OF_RANGE", 1264 }, +{ "WARN_DATA_TRUNCATED", 1265 }, +{ "ER_WARN_USING_OTHER_HANDLER", 1266 }, +{ "ER_CANT_AGGREGATE_2COLLATIONS", 1267 }, +{ "ER_DROP_USER", 1268 }, +{ "ER_REVOKE_GRANTS", 1269 }, +{ "ER_CANT_AGGREGATE_3COLLATIONS", 1270 }, +{ "ER_CANT_AGGREGATE_NCOLLATIONS", 1271 }, +{ "ER_VARIABLE_IS_NOT_STRUCT", 1272 }, +{ "ER_UNKNOWN_COLLATION", 1273 }, +{ "ER_SLAVE_IGNORED_SSL_PARAMS", 1274 }, +{ "ER_SERVER_IS_IN_SECURE_AUTH_MODE", 1275 }, +{ "ER_WARN_FIELD_RESOLVED", 1276 }, +{ "ER_BAD_SLAVE_UNTIL_COND", 1277 }, +{ "ER_MISSING_SKIP_SLAVE", 1278 }, +{ "ER_UNTIL_COND_IGNORED", 1279 }, +{ "ER_WRONG_NAME_FOR_INDEX", 1280 }, +{ "ER_WRONG_NAME_FOR_CATALOG", 1281 }, +{ "ER_WARN_QC_RESIZE", 1282 }, +{ "ER_BAD_FT_COLUMN", 1283 }, +{ "ER_UNKNOWN_KEY_CACHE", 1284 }, +{ "ER_WARN_HOSTNAME_WONT_WORK", 1285 }, +{ "ER_UNKNOWN_STORAGE_ENGINE", 1286 }, +{ "ER_WARN_DEPRECATED_SYNTAX", 1287 }, +{ "ER_NON_UPDATABLE_TABLE", 1288 }, +{ "ER_FEATURE_DISABLED", 1289 }, +{ "ER_OPTION_PREVENTS_STATEMENT", 1290 }, +{ "ER_DUPLICATED_VALUE_IN_TYPE", 1291 }, +{ "ER_TRUNCATED_WRONG_VALUE", 1292 }, +{ "ER_TOO_MUCH_AUTO_TIMESTAMP_COLS", 1293 }, +{ "ER_INVALID_ON_UPDATE", 1294 }, +{ "ER_UNSUPPORTED_PS", 1295 }, +{ "ER_GET_ERRMSG", 1296 }, +{ "ER_GET_TEMPORARY_ERRMSG", 1297 }, +{ "ER_UNKNOWN_TIME_ZONE", 1298 }, +{ "ER_WARN_INVALID_TIMESTAMP", 1299 }, +{ "ER_INVALID_CHARACTER_STRING", 1300 }, +{ "ER_WARN_ALLOWED_PACKET_OVERFLOWED", 1301 }, +{ "ER_CONFLICTING_DECLARATIONS", 1302 }, +{ "ER_SP_NO_RECURSIVE_CREATE", 1303 }, +{ "ER_SP_ALREADY_EXISTS", 1304 }, +{ "ER_SP_DOES_NOT_EXIST", 1305 }, +{ "ER_SP_DROP_FAILED", 1306 }, +{ "ER_SP_STORE_FAILED", 1307 }, +{ "ER_SP_LILABEL_MISMATCH", 1308 }, +{ "ER_SP_LABEL_REDEFINE", 1309 }, +{ "ER_SP_LABEL_MISMATCH", 1310 }, +{ "ER_SP_UNINIT_VAR", 1311 }, +{ "ER_SP_BADSELECT", 1312 }, +{ "ER_SP_BADRETURN", 1313 }, +{ "ER_SP_BADSTATEMENT", 1314 }, +{ "ER_UPDATE_LOG_DEPRECATED_IGNORED", 1315 }, +{ "ER_UPDATE_LOG_DEPRECATED_TRANSLATED", 1316 }, +{ "ER_QUERY_INTERRUPTED", 1317 }, +{ "ER_SP_WRONG_NO_OF_ARGS", 1318 }, +{ "ER_SP_COND_MISMATCH", 1319 }, +{ "ER_SP_NORETURN", 1320 }, +{ "ER_SP_NORETURNEND", 1321 }, +{ "ER_SP_BAD_CURSOR_QUERY", 1322 }, +{ "ER_SP_BAD_CURSOR_SELECT", 1323 }, +{ "ER_SP_CURSOR_MISMATCH", 1324 }, +{ "ER_SP_CURSOR_ALREADY_OPEN", 1325 }, +{ "ER_SP_CURSOR_NOT_OPEN", 1326 }, +{ "ER_SP_UNDECLARED_VAR", 1327 }, +{ "ER_SP_WRONG_NO_OF_FETCH_ARGS", 1328 }, +{ "ER_SP_FETCH_NO_DATA", 1329 }, +{ "ER_SP_DUP_PARAM", 1330 }, +{ "ER_SP_DUP_VAR", 1331 }, +{ "ER_SP_DUP_COND", 1332 }, +{ "ER_SP_DUP_CURS", 1333 }, +{ "ER_SP_CANT_ALTER", 1334 }, +{ "ER_SP_SUBSELECT_NYI", 1335 }, +{ "ER_STMT_NOT_ALLOWED_IN_SF_OR_TRG", 1336 }, +{ "ER_SP_VARCOND_AFTER_CURSHNDLR", 1337 }, +{ "ER_SP_CURSOR_AFTER_HANDLER", 1338 }, +{ "ER_SP_CASE_NOT_FOUND", 1339 }, +{ "ER_FPARSER_TOO_BIG_FILE", 1340 }, +{ "ER_FPARSER_BAD_HEADER", 1341 }, +{ "ER_FPARSER_EOF_IN_COMMENT", 1342 }, +{ "ER_FPARSER_ERROR_IN_PARAMETER", 1343 }, +{ "ER_FPARSER_EOF_IN_UNKNOWN_PARAMETER", 1344 }, +{ "ER_VIEW_NO_EXPLAIN", 1345 }, +{ "ER_FRM_UNKNOWN_TYPE", 1346 }, +{ "ER_WRONG_OBJECT", 1347 }, +{ "ER_NONUPDATEABLE_COLUMN", 1348 }, +{ "ER_VIEW_SELECT_DERIVED", 1349 }, +{ "ER_VIEW_SELECT_CLAUSE", 1350 }, +{ "ER_VIEW_SELECT_VARIABLE", 1351 }, +{ "ER_VIEW_SELECT_TMPTABLE", 1352 }, +{ "ER_VIEW_WRONG_LIST", 1353 }, +{ "ER_WARN_VIEW_MERGE", 1354 }, +{ "ER_WARN_VIEW_WITHOUT_KEY", 1355 }, +{ "ER_VIEW_INVALID", 1356 }, +{ "ER_SP_NO_DROP_SP", 1357 }, +{ "ER_SP_GOTO_IN_HNDLR", 1358 }, +{ "ER_TRG_ALREADY_EXISTS", 1359 }, +{ "ER_TRG_DOES_NOT_EXIST", 1360 }, +{ "ER_TRG_ON_VIEW_OR_TEMP_TABLE", 1361 }, +{ "ER_TRG_CANT_CHANGE_ROW", 1362 }, +{ "ER_TRG_NO_SUCH_ROW_IN_TRG", 1363 }, +{ "ER_NO_DEFAULT_FOR_FIELD", 1364 }, +{ "ER_DIVISION_BY_ZERO", 1365 }, +{ "ER_TRUNCATED_WRONG_VALUE_FOR_FIELD", 1366 }, +{ "ER_ILLEGAL_VALUE_FOR_TYPE", 1367 }, +{ "ER_VIEW_NONUPD_CHECK", 1368 }, +{ "ER_VIEW_CHECK_FAILED", 1369 }, +{ "ER_PROCACCESS_DENIED_ERROR", 1370 }, +{ "ER_RELAY_LOG_FAIL", 1371 }, +{ "ER_PASSWD_LENGTH", 1372 }, +{ "ER_UNKNOWN_TARGET_BINLOG", 1373 }, +{ "ER_IO_ERR_LOG_INDEX_READ", 1374 }, +{ "ER_BINLOG_PURGE_PROHIBITED", 1375 }, +{ "ER_FSEEK_FAIL", 1376 }, +{ "ER_BINLOG_PURGE_FATAL_ERR", 1377 }, +{ "ER_LOG_IN_USE", 1378 }, +{ "ER_LOG_PURGE_UNKNOWN_ERR", 1379 }, +{ "ER_RELAY_LOG_INIT", 1380 }, +{ "ER_NO_BINARY_LOGGING", 1381 }, +{ "ER_RESERVED_SYNTAX", 1382 }, +{ "ER_WSAS_FAILED", 1383 }, +{ "ER_DIFF_GROUPS_PROC", 1384 }, +{ "ER_NO_GROUP_FOR_PROC", 1385 }, +{ "ER_ORDER_WITH_PROC", 1386 }, +{ "ER_LOGGING_PROHIBIT_CHANGING_OF", 1387 }, +{ "ER_NO_FILE_MAPPING", 1388 }, +{ "ER_WRONG_MAGIC", 1389 }, +{ "ER_PS_MANY_PARAM", 1390 }, +{ "ER_KEY_PART_0", 1391 }, +{ "ER_VIEW_CHECKSUM", 1392 }, +{ "ER_VIEW_MULTIUPDATE", 1393 }, +{ "ER_VIEW_NO_INSERT_FIELD_LIST", 1394 }, +{ "ER_VIEW_DELETE_MERGE_VIEW", 1395 }, +{ "ER_CANNOT_USER", 1396 }, +{ "ER_XAER_NOTA", 1397 }, +{ "ER_XAER_INVAL", 1398 }, +{ "ER_XAER_RMFAIL", 1399 }, +{ "ER_XAER_OUTSIDE", 1400 }, +{ "ER_XAER_RMERR", 1401 }, +{ "ER_XA_RBROLLBACK", 1402 }, +{ "ER_NONEXISTING_PROC_GRANT", 1403 }, +{ "ER_PROC_AUTO_GRANT_FAIL", 1404 }, +{ "ER_PROC_AUTO_REVOKE_FAIL", 1405 }, +{ "ER_DATA_TOO_LONG", 1406 }, +{ "ER_SP_BAD_SQLSTATE", 1407 }, +{ "ER_STARTUP", 1408 }, +{ "ER_LOAD_FROM_FIXED_SIZE_ROWS_TO_VAR", 1409 }, +{ "ER_CANT_CREATE_USER_WITH_GRANT", 1410 }, +{ "ER_WRONG_VALUE_FOR_TYPE", 1411 }, +{ "ER_TABLE_DEF_CHANGED", 1412 }, +{ "ER_SP_DUP_HANDLER", 1413 }, +{ "ER_SP_NOT_VAR_ARG", 1414 }, +{ "ER_SP_NO_RETSET", 1415 }, +{ "ER_CANT_CREATE_GEOMETRY_OBJECT", 1416 }, +{ "ER_FAILED_ROUTINE_BREAK_BINLOG", 1417 }, +{ "ER_BINLOG_UNSAFE_ROUTINE", 1418 }, +{ "ER_BINLOG_CREATE_ROUTINE_NEED_SUPER", 1419 }, +{ "ER_EXEC_STMT_WITH_OPEN_CURSOR", 1420 }, +{ "ER_STMT_HAS_NO_OPEN_CURSOR", 1421 }, +{ "ER_COMMIT_NOT_ALLOWED_IN_SF_OR_TRG", 1422 }, +{ "ER_NO_DEFAULT_FOR_VIEW_FIELD", 1423 }, +{ "ER_SP_NO_RECURSION", 1424 }, +{ "ER_TOO_BIG_SCALE", 1425 }, +{ "ER_TOO_BIG_PRECISION", 1426 }, +{ "ER_M_BIGGER_THAN_D", 1427 }, +{ "ER_WRONG_LOCK_OF_SYSTEM_TABLE", 1428 }, +{ "ER_CONNECT_TO_FOREIGN_DATA_SOURCE", 1429 }, +{ "ER_QUERY_ON_FOREIGN_DATA_SOURCE", 1430 }, +{ "ER_FOREIGN_DATA_SOURCE_DOESNT_EXIST", 1431 }, +{ "ER_FOREIGN_DATA_STRING_INVALID_CANT_CREATE", 1432 }, +{ "ER_FOREIGN_DATA_STRING_INVALID", 1433 }, +{ "ER_CANT_CREATE_FEDERATED_TABLE", 1434 }, +{ "ER_TRG_IN_WRONG_SCHEMA", 1435 }, +{ "ER_STACK_OVERRUN_NEED_MORE", 1436 }, +{ "ER_TOO_LONG_BODY", 1437 }, +{ "ER_WARN_CANT_DROP_DEFAULT_KEYCACHE", 1438 }, +{ "ER_TOO_BIG_DISPLAYWIDTH", 1439 }, +{ "ER_XAER_DUPID", 1440 }, +{ "ER_DATETIME_FUNCTION_OVERFLOW", 1441 }, +{ "ER_CANT_UPDATE_USED_TABLE_IN_SF_OR_TRG", 1442 }, +{ "ER_VIEW_PREVENT_UPDATE", 1443 }, +{ "ER_PS_NO_RECURSION", 1444 }, +{ "ER_SP_CANT_SET_AUTOCOMMIT", 1445 }, +{ "ER_MALFORMED_DEFINER", 1446 }, +{ "ER_VIEW_FRM_NO_USER", 1447 }, +{ "ER_VIEW_OTHER_USER", 1448 }, +{ "ER_NO_SUCH_USER", 1449 }, +{ "ER_FORBID_SCHEMA_CHANGE", 1450 }, +{ "ER_ROW_IS_REFERENCED_2", 1451 }, +{ "ER_NO_REFERENCED_ROW_2", 1452 }, +{ "ER_SP_BAD_VAR_SHADOW", 1453 }, +{ "ER_TRG_NO_DEFINER", 1454 }, +{ "ER_OLD_FILE_FORMAT", 1455 }, +{ "ER_SP_RECURSION_LIMIT", 1456 }, +{ "ER_SP_PROC_TABLE_CORRUPT", 1457 }, +{ "ER_SP_WRONG_NAME", 1458 }, +{ "ER_TABLE_NEEDS_UPGRADE", 1459 }, +{ "ER_SP_NO_AGGREGATE", 1460 }, +{ "ER_MAX_PREPARED_STMT_COUNT_REACHED", 1461 }, +{ "ER_VIEW_RECURSIVE", 1462 }, +{ "ER_NON_GROUPING_FIELD_USED", 1463 }, +{ "ER_TABLE_CANT_HANDLE_SPKEYS", 1464 }, +{ "ER_NO_TRIGGERS_ON_SYSTEM_SCHEMA", 1465 }, +{ "ER_REMOVED_SPACES", 1466 }, +{ "ER_AUTOINC_READ_FAILED", 1467 }, +{ "ER_USERNAME", 1468 }, +{ "ER_HOSTNAME", 1469 }, +{ "ER_WRONG_STRING_LENGTH", 1470 }, +{ "ER_NON_INSERTABLE_TABLE", 1471 }, +{ "ER_ADMIN_WRONG_MRG_TABLE", 1472 }, +{ "ER_TOO_HIGH_LEVEL_OF_NESTING_FOR_SELECT", 1473 }, +{ "ER_NAME_BECOMES_EMPTY", 1474 }, +{ "ER_AMBIGUOUS_FIELD_TERM", 1475 }, +{ "ER_FOREIGN_SERVER_EXISTS", 1476 }, +{ "ER_FOREIGN_SERVER_DOESNT_EXIST", 1477 }, +{ "ER_ILLEGAL_HA_CREATE_OPTION", 1478 }, +{ "ER_PARTITION_REQUIRES_VALUES_ERROR", 1479 }, +{ "ER_PARTITION_WRONG_VALUES_ERROR", 1480 }, +{ "ER_PARTITION_MAXVALUE_ERROR", 1481 }, +{ "ER_PARTITION_SUBPARTITION_ERROR", 1482 }, +{ "ER_PARTITION_SUBPART_MIX_ERROR", 1483 }, +{ "ER_PARTITION_WRONG_NO_PART_ERROR", 1484 }, +{ "ER_PARTITION_WRONG_NO_SUBPART_ERROR", 1485 }, +{ "ER_WRONG_EXPR_IN_PARTITION_FUNC_ERROR", 1486 }, +{ "ER_NO_CONST_EXPR_IN_RANGE_OR_LIST_ERROR", 1487 }, +{ "ER_FIELD_NOT_FOUND_PART_ERROR", 1488 }, +{ "ER_LIST_OF_FIELDS_ONLY_IN_HASH_ERROR", 1489 }, +{ "ER_INCONSISTENT_PARTITION_INFO_ERROR", 1490 }, +{ "ER_PARTITION_FUNC_NOT_ALLOWED_ERROR", 1491 }, +{ "ER_PARTITIONS_MUST_BE_DEFINED_ERROR", 1492 }, +{ "ER_RANGE_NOT_INCREASING_ERROR", 1493 }, +{ "ER_INCONSISTENT_TYPE_OF_FUNCTIONS_ERROR", 1494 }, +{ "ER_MULTIPLE_DEF_CONST_IN_LIST_PART_ERROR", 1495 }, +{ "ER_PARTITION_ENTRY_ERROR", 1496 }, +{ "ER_MIX_HANDLER_ERROR", 1497 }, +{ "ER_PARTITION_NOT_DEFINED_ERROR", 1498 }, +{ "ER_TOO_MANY_PARTITIONS_ERROR", 1499 }, +{ "ER_SUBPARTITION_ERROR", 1500 }, +{ "ER_CANT_CREATE_HANDLER_FILE", 1501 }, +{ "ER_BLOB_FIELD_IN_PART_FUNC_ERROR", 1502 }, +{ "ER_UNIQUE_KEY_NEED_ALL_FIELDS_IN_PF", 1503 }, +{ "ER_NO_PARTS_ERROR", 1504 }, +{ "ER_PARTITION_MGMT_ON_NONPARTITIONED", 1505 }, +{ "ER_FOREIGN_KEY_ON_PARTITIONED", 1506 }, +{ "ER_DROP_PARTITION_NON_EXISTENT", 1507 }, +{ "ER_DROP_LAST_PARTITION", 1508 }, +{ "ER_COALESCE_ONLY_ON_HASH_PARTITION", 1509 }, +{ "ER_REORG_HASH_ONLY_ON_SAME_NO", 1510 }, +{ "ER_REORG_NO_PARAM_ERROR", 1511 }, +{ "ER_ONLY_ON_RANGE_LIST_PARTITION", 1512 }, +{ "ER_ADD_PARTITION_SUBPART_ERROR", 1513 }, +{ "ER_ADD_PARTITION_NO_NEW_PARTITION", 1514 }, +{ "ER_COALESCE_PARTITION_NO_PARTITION", 1515 }, +{ "ER_REORG_PARTITION_NOT_EXIST", 1516 }, +{ "ER_SAME_NAME_PARTITION", 1517 }, +{ "ER_NO_BINLOG_ERROR", 1518 }, +{ "ER_CONSECUTIVE_REORG_PARTITIONS", 1519 }, +{ "ER_REORG_OUTSIDE_RANGE", 1520 }, +{ "ER_PARTITION_FUNCTION_FAILURE", 1521 }, +{ "ER_PART_STATE_ERROR", 1522 }, +{ "ER_LIMITED_PART_RANGE", 1523 }, +{ "ER_PLUGIN_IS_NOT_LOADED", 1524 }, +{ "ER_WRONG_VALUE", 1525 }, +{ "ER_NO_PARTITION_FOR_GIVEN_VALUE", 1526 }, +{ "ER_FILEGROUP_OPTION_ONLY_ONCE", 1527 }, +{ "ER_CREATE_FILEGROUP_FAILED", 1528 }, +{ "ER_DROP_FILEGROUP_FAILED", 1529 }, +{ "ER_TABLESPACE_AUTO_EXTEND_ERROR", 1530 }, +{ "ER_WRONG_SIZE_NUMBER", 1531 }, +{ "ER_SIZE_OVERFLOW_ERROR", 1532 }, +{ "ER_ALTER_FILEGROUP_FAILED", 1533 }, +{ "ER_BINLOG_ROW_LOGGING_FAILED", 1534 }, +{ "ER_BINLOG_ROW_WRONG_TABLE_DEF", 1535 }, +{ "ER_BINLOG_ROW_RBR_TO_SBR", 1536 }, +{ "ER_EVENT_ALREADY_EXISTS", 1537 }, +{ "ER_EVENT_STORE_FAILED", 1538 }, +{ "ER_EVENT_DOES_NOT_EXIST", 1539 }, +{ "ER_EVENT_CANT_ALTER", 1540 }, +{ "ER_EVENT_DROP_FAILED", 1541 }, +{ "ER_EVENT_INTERVAL_NOT_POSITIVE_OR_TOO_BIG", 1542 }, +{ "ER_EVENT_ENDS_BEFORE_STARTS", 1543 }, +{ "ER_EVENT_EXEC_TIME_IN_THE_PAST", 1544 }, +{ "ER_EVENT_OPEN_TABLE_FAILED", 1545 }, +{ "ER_EVENT_NEITHER_M_EXPR_NOR_M_AT", 1546 }, +{ "ER_COL_COUNT_DOESNT_MATCH_CORRUPTED", 1547 }, +{ "ER_CANNOT_LOAD_FROM_TABLE", 1548 }, +{ "ER_EVENT_CANNOT_DELETE", 1549 }, +{ "ER_EVENT_COMPILE_ERROR", 1550 }, +{ "ER_EVENT_SAME_NAME", 1551 }, +{ "ER_EVENT_DATA_TOO_LONG", 1552 }, +{ "ER_DROP_INDEX_FK", 1553 }, +{ "ER_WARN_DEPRECATED_SYNTAX_WITH_VER", 1554 }, +{ "ER_CANT_WRITE_LOCK_LOG_TABLE", 1555 }, +{ "ER_CANT_LOCK_LOG_TABLE", 1556 }, +{ "ER_FOREIGN_DUPLICATE_KEY", 1557 }, +{ "ER_COL_COUNT_DOESNT_MATCH_PLEASE_UPDATE", 1558 }, +{ "ER_TEMP_TABLE_PREVENTS_SWITCH_OUT_OF_RBR", 1559 }, +{ "ER_STORED_FUNCTION_PREVENTS_SWITCH_BINLOG_FORMAT", 1560 }, +{ "ER_NDB_CANT_SWITCH_BINLOG_FORMAT", 1561 }, +{ "ER_PARTITION_NO_TEMPORARY", 1562 }, +{ "ER_PARTITION_CONST_DOMAIN_ERROR", 1563 }, +{ "ER_PARTITION_FUNCTION_IS_NOT_ALLOWED", 1564 }, +{ "ER_DDL_LOG_ERROR", 1565 }, +{ "ER_NULL_IN_VALUES_LESS_THAN", 1566 }, +{ "ER_WRONG_PARTITION_NAME", 1567 }, +{ "ER_CANT_CHANGE_TX_ISOLATION", 1568 }, +{ "ER_DUP_ENTRY_AUTOINCREMENT_CASE", 1569 }, +{ "ER_EVENT_MODIFY_QUEUE_ERROR", 1570 }, +{ "ER_EVENT_SET_VAR_ERROR", 1571 }, +{ "ER_PARTITION_MERGE_ERROR", 1572 }, +{ "ER_CANT_ACTIVATE_LOG", 1573 }, +{ "ER_RBR_NOT_AVAILABLE", 1574 }, +{ "ER_BASE64_DECODE_ERROR", 1575 }, +{ "ER_EVENT_RECURSION_FORBIDDEN", 1576 }, +{ "ER_EVENTS_DB_ERROR", 1577 }, +{ "ER_ONLY_INTEGERS_ALLOWED", 1578 }, +{ "ER_UNSUPORTED_LOG_ENGINE", 1579 }, +{ "ER_BAD_LOG_STATEMENT", 1580 }, +{ "ER_CANT_RENAME_LOG_TABLE", 1581 }, +{ "ER_WRONG_PARAMCOUNT_TO_NATIVE_FCT", 1582 }, +{ "ER_WRONG_PARAMETERS_TO_NATIVE_FCT", 1583 }, +{ "ER_WRONG_PARAMETERS_TO_STORED_FCT", 1584 }, +{ "ER_NATIVE_FCT_NAME_COLLISION", 1585 }, +{ "ER_DUP_ENTRY_WITH_KEY_NAME", 1586 }, +{ "ER_BINLOG_PURGE_EMFILE", 1587 }, +{ "ER_EVENT_CANNOT_CREATE_IN_THE_PAST", 1588 }, +{ "ER_EVENT_CANNOT_ALTER_IN_THE_PAST", 1589 }, +{ "ER_SLAVE_INCIDENT", 1590 }, +{ "ER_NO_PARTITION_FOR_GIVEN_VALUE_SILENT", 1591 }, +{ "ER_BINLOG_UNSAFE_STATEMENT", 1592 }, +{ "ER_SLAVE_FATAL_ERROR", 1593 }, +{ "ER_SLAVE_RELAY_LOG_READ_FAILURE", 1594 }, +{ "ER_SLAVE_RELAY_LOG_WRITE_FAILURE", 1595 }, +{ "ER_SLAVE_CREATE_EVENT_FAILURE", 1596 }, +{ "ER_SLAVE_MASTER_COM_FAILURE", 1597 }, +{ "ER_BINLOG_LOGGING_IMPOSSIBLE", 1598 }, +{ "ER_VIEW_NO_CREATION_CTX", 1599 }, +{ "ER_VIEW_INVALID_CREATION_CTX", 1600 }, +{ "ER_SR_INVALID_CREATION_CTX", 1601 }, +{ "ER_TRG_CORRUPTED_FILE", 1602 }, +{ "ER_TRG_NO_CREATION_CTX", 1603 }, +{ "ER_TRG_INVALID_CREATION_CTX", 1604 }, +{ "ER_EVENT_INVALID_CREATION_CTX", 1605 }, +{ "ER_TRG_CANT_OPEN_TABLE", 1606 }, +{ "ER_CANT_CREATE_SROUTINE", 1607 }, +{ "ER_SLAVE_AMBIGOUS_EXEC_MODE", 1608 }, +{ "ER_NO_FORMAT_DESCRIPTION_EVENT_BEFORE_BINLOG_STATEMENT", 1609 }, +{ "ER_SLAVE_CORRUPT_EVENT", 1610 }, +{ "ER_LOAD_DATA_INVALID_COLUMN", 1611 }, +{ "ER_LOG_PURGE_NO_FILE", 1612 }, +{ "ER_XA_RBTIMEOUT", 1613 }, +{ "ER_XA_RBDEADLOCK", 1614 }, +{ "ER_NEED_REPREPARE", 1615 }, +{ "ER_DELAYED_NOT_SUPPORTED", 1616 }, +{ "WARN_NO_MASTER_INFO", 1617 }, +{ "WARN_OPTION_IGNORED", 1618 }, +{ "WARN_PLUGIN_DELETE_BUILTIN", 1619 }, +{ "WARN_PLUGIN_BUSY", 1620 }, +{ "ER_VARIABLE_IS_READONLY", 1621 }, +{ "ER_WARN_ENGINE_TRANSACTION_ROLLBACK", 1622 }, +{ "ER_SLAVE_HEARTBEAT_FAILURE", 1623 }, +{ "ER_SLAVE_HEARTBEAT_VALUE_OUT_OF_RANGE", 1624 }, +{ "ER_NDB_REPLICATION_SCHEMA_ERROR", 1625 }, +{ "ER_CONFLICT_FN_PARSE_ERROR", 1626 }, +{ "ER_EXCEPTIONS_WRITE_ERROR", 1627 }, +{ "ER_TOO_LONG_TABLE_COMMENT", 1628 }, +{ "ER_TOO_LONG_FIELD_COMMENT", 1629 }, +{ "ER_FUNC_INEXISTENT_NAME_COLLISION", 1630 }, +{ "ER_DATABASE_NAME", 1631 }, +{ "ER_TABLE_NAME", 1632 }, +{ "ER_PARTITION_NAME", 1633 }, +{ "ER_SUBPARTITION_NAME", 1634 }, +{ "ER_TEMPORARY_NAME", 1635 }, +{ "ER_RENAMED_NAME", 1636 }, +{ "ER_TOO_MANY_CONCURRENT_TRXS", 1637 }, +{ "WARN_NON_ASCII_SEPARATOR_NOT_IMPLEMENTED", 1638 }, +{ "ER_DEBUG_SYNC_TIMEOUT", 1639 }, +{ "ER_DEBUG_SYNC_HIT_LIMIT", 1640 }, diff --git a/EQ2/source/depends/mysql-5.1.45-winx64/include/mysqld_error.h b/EQ2/source/depends/mysql-5.1.45-winx64/include/mysqld_error.h new file mode 100644 index 000000000..c35c25420 --- /dev/null +++ b/EQ2/source/depends/mysql-5.1.45-winx64/include/mysqld_error.h @@ -0,0 +1,645 @@ +/* Autogenerated file, please don't edit */ + +#define ER_ERROR_FIRST 1000 +#define ER_HASHCHK 1000 +#define ER_NISAMCHK 1001 +#define ER_NO 1002 +#define ER_YES 1003 +#define ER_CANT_CREATE_FILE 1004 +#define ER_CANT_CREATE_TABLE 1005 +#define ER_CANT_CREATE_DB 1006 +#define ER_DB_CREATE_EXISTS 1007 +#define ER_DB_DROP_EXISTS 1008 +#define ER_DB_DROP_DELETE 1009 +#define ER_DB_DROP_RMDIR 1010 +#define ER_CANT_DELETE_FILE 1011 +#define ER_CANT_FIND_SYSTEM_REC 1012 +#define ER_CANT_GET_STAT 1013 +#define ER_CANT_GET_WD 1014 +#define ER_CANT_LOCK 1015 +#define ER_CANT_OPEN_FILE 1016 +#define ER_FILE_NOT_FOUND 1017 +#define ER_CANT_READ_DIR 1018 +#define ER_CANT_SET_WD 1019 +#define ER_CHECKREAD 1020 +#define ER_DISK_FULL 1021 +#define ER_DUP_KEY 1022 +#define ER_ERROR_ON_CLOSE 1023 +#define ER_ERROR_ON_READ 1024 +#define ER_ERROR_ON_RENAME 1025 +#define ER_ERROR_ON_WRITE 1026 +#define ER_FILE_USED 1027 +#define ER_FILSORT_ABORT 1028 +#define ER_FORM_NOT_FOUND 1029 +#define ER_GET_ERRNO 1030 +#define ER_ILLEGAL_HA 1031 +#define ER_KEY_NOT_FOUND 1032 +#define ER_NOT_FORM_FILE 1033 +#define ER_NOT_KEYFILE 1034 +#define ER_OLD_KEYFILE 1035 +#define ER_OPEN_AS_READONLY 1036 +#define ER_OUTOFMEMORY 1037 +#define ER_OUT_OF_SORTMEMORY 1038 +#define ER_UNEXPECTED_EOF 1039 +#define ER_CON_COUNT_ERROR 1040 +#define ER_OUT_OF_RESOURCES 1041 +#define ER_BAD_HOST_ERROR 1042 +#define ER_HANDSHAKE_ERROR 1043 +#define ER_DBACCESS_DENIED_ERROR 1044 +#define ER_ACCESS_DENIED_ERROR 1045 +#define ER_NO_DB_ERROR 1046 +#define ER_UNKNOWN_COM_ERROR 1047 +#define ER_BAD_NULL_ERROR 1048 +#define ER_BAD_DB_ERROR 1049 +#define ER_TABLE_EXISTS_ERROR 1050 +#define ER_BAD_TABLE_ERROR 1051 +#define ER_NON_UNIQ_ERROR 1052 +#define ER_SERVER_SHUTDOWN 1053 +#define ER_BAD_FIELD_ERROR 1054 +#define ER_WRONG_FIELD_WITH_GROUP 1055 +#define ER_WRONG_GROUP_FIELD 1056 +#define ER_WRONG_SUM_SELECT 1057 +#define ER_WRONG_VALUE_COUNT 1058 +#define ER_TOO_LONG_IDENT 1059 +#define ER_DUP_FIELDNAME 1060 +#define ER_DUP_KEYNAME 1061 +#define ER_DUP_ENTRY 1062 +#define ER_WRONG_FIELD_SPEC 1063 +#define ER_PARSE_ERROR 1064 +#define ER_EMPTY_QUERY 1065 +#define ER_NONUNIQ_TABLE 1066 +#define ER_INVALID_DEFAULT 1067 +#define ER_MULTIPLE_PRI_KEY 1068 +#define ER_TOO_MANY_KEYS 1069 +#define ER_TOO_MANY_KEY_PARTS 1070 +#define ER_TOO_LONG_KEY 1071 +#define ER_KEY_COLUMN_DOES_NOT_EXITS 1072 +#define ER_BLOB_USED_AS_KEY 1073 +#define ER_TOO_BIG_FIELDLENGTH 1074 +#define ER_WRONG_AUTO_KEY 1075 +#define ER_READY 1076 +#define ER_NORMAL_SHUTDOWN 1077 +#define ER_GOT_SIGNAL 1078 +#define ER_SHUTDOWN_COMPLETE 1079 +#define ER_FORCING_CLOSE 1080 +#define ER_IPSOCK_ERROR 1081 +#define ER_NO_SUCH_INDEX 1082 +#define ER_WRONG_FIELD_TERMINATORS 1083 +#define ER_BLOBS_AND_NO_TERMINATED 1084 +#define ER_TEXTFILE_NOT_READABLE 1085 +#define ER_FILE_EXISTS_ERROR 1086 +#define ER_LOAD_INFO 1087 +#define ER_ALTER_INFO 1088 +#define ER_WRONG_SUB_KEY 1089 +#define ER_CANT_REMOVE_ALL_FIELDS 1090 +#define ER_CANT_DROP_FIELD_OR_KEY 1091 +#define ER_INSERT_INFO 1092 +#define ER_UPDATE_TABLE_USED 1093 +#define ER_NO_SUCH_THREAD 1094 +#define ER_KILL_DENIED_ERROR 1095 +#define ER_NO_TABLES_USED 1096 +#define ER_TOO_BIG_SET 1097 +#define ER_NO_UNIQUE_LOGFILE 1098 +#define ER_TABLE_NOT_LOCKED_FOR_WRITE 1099 +#define ER_TABLE_NOT_LOCKED 1100 +#define ER_BLOB_CANT_HAVE_DEFAULT 1101 +#define ER_WRONG_DB_NAME 1102 +#define ER_WRONG_TABLE_NAME 1103 +#define ER_TOO_BIG_SELECT 1104 +#define ER_UNKNOWN_ERROR 1105 +#define ER_UNKNOWN_PROCEDURE 1106 +#define ER_WRONG_PARAMCOUNT_TO_PROCEDURE 1107 +#define ER_WRONG_PARAMETERS_TO_PROCEDURE 1108 +#define ER_UNKNOWN_TABLE 1109 +#define ER_FIELD_SPECIFIED_TWICE 1110 +#define ER_INVALID_GROUP_FUNC_USE 1111 +#define ER_UNSUPPORTED_EXTENSION 1112 +#define ER_TABLE_MUST_HAVE_COLUMNS 1113 +#define ER_RECORD_FILE_FULL 1114 +#define ER_UNKNOWN_CHARACTER_SET 1115 +#define ER_TOO_MANY_TABLES 1116 +#define ER_TOO_MANY_FIELDS 1117 +#define ER_TOO_BIG_ROWSIZE 1118 +#define ER_STACK_OVERRUN 1119 +#define ER_WRONG_OUTER_JOIN 1120 +#define ER_NULL_COLUMN_IN_INDEX 1121 +#define ER_CANT_FIND_UDF 1122 +#define ER_CANT_INITIALIZE_UDF 1123 +#define ER_UDF_NO_PATHS 1124 +#define ER_UDF_EXISTS 1125 +#define ER_CANT_OPEN_LIBRARY 1126 +#define ER_CANT_FIND_DL_ENTRY 1127 +#define ER_FUNCTION_NOT_DEFINED 1128 +#define ER_HOST_IS_BLOCKED 1129 +#define ER_HOST_NOT_PRIVILEGED 1130 +#define ER_PASSWORD_ANONYMOUS_USER 1131 +#define ER_PASSWORD_NOT_ALLOWED 1132 +#define ER_PASSWORD_NO_MATCH 1133 +#define ER_UPDATE_INFO 1134 +#define ER_CANT_CREATE_THREAD 1135 +#define ER_WRONG_VALUE_COUNT_ON_ROW 1136 +#define ER_CANT_REOPEN_TABLE 1137 +#define ER_INVALID_USE_OF_NULL 1138 +#define ER_REGEXP_ERROR 1139 +#define ER_MIX_OF_GROUP_FUNC_AND_FIELDS 1140 +#define ER_NONEXISTING_GRANT 1141 +#define ER_TABLEACCESS_DENIED_ERROR 1142 +#define ER_COLUMNACCESS_DENIED_ERROR 1143 +#define ER_ILLEGAL_GRANT_FOR_TABLE 1144 +#define ER_GRANT_WRONG_HOST_OR_USER 1145 +#define ER_NO_SUCH_TABLE 1146 +#define ER_NONEXISTING_TABLE_GRANT 1147 +#define ER_NOT_ALLOWED_COMMAND 1148 +#define ER_SYNTAX_ERROR 1149 +#define ER_DELAYED_CANT_CHANGE_LOCK 1150 +#define ER_TOO_MANY_DELAYED_THREADS 1151 +#define ER_ABORTING_CONNECTION 1152 +#define ER_NET_PACKET_TOO_LARGE 1153 +#define ER_NET_READ_ERROR_FROM_PIPE 1154 +#define ER_NET_FCNTL_ERROR 1155 +#define ER_NET_PACKETS_OUT_OF_ORDER 1156 +#define ER_NET_UNCOMPRESS_ERROR 1157 +#define ER_NET_READ_ERROR 1158 +#define ER_NET_READ_INTERRUPTED 1159 +#define ER_NET_ERROR_ON_WRITE 1160 +#define ER_NET_WRITE_INTERRUPTED 1161 +#define ER_TOO_LONG_STRING 1162 +#define ER_TABLE_CANT_HANDLE_BLOB 1163 +#define ER_TABLE_CANT_HANDLE_AUTO_INCREMENT 1164 +#define ER_DELAYED_INSERT_TABLE_LOCKED 1165 +#define ER_WRONG_COLUMN_NAME 1166 +#define ER_WRONG_KEY_COLUMN 1167 +#define ER_WRONG_MRG_TABLE 1168 +#define ER_DUP_UNIQUE 1169 +#define ER_BLOB_KEY_WITHOUT_LENGTH 1170 +#define ER_PRIMARY_CANT_HAVE_NULL 1171 +#define ER_TOO_MANY_ROWS 1172 +#define ER_REQUIRES_PRIMARY_KEY 1173 +#define ER_NO_RAID_COMPILED 1174 +#define ER_UPDATE_WITHOUT_KEY_IN_SAFE_MODE 1175 +#define ER_KEY_DOES_NOT_EXITS 1176 +#define ER_CHECK_NO_SUCH_TABLE 1177 +#define ER_CHECK_NOT_IMPLEMENTED 1178 +#define ER_CANT_DO_THIS_DURING_AN_TRANSACTION 1179 +#define ER_ERROR_DURING_COMMIT 1180 +#define ER_ERROR_DURING_ROLLBACK 1181 +#define ER_ERROR_DURING_FLUSH_LOGS 1182 +#define ER_ERROR_DURING_CHECKPOINT 1183 +#define ER_NEW_ABORTING_CONNECTION 1184 +#define ER_DUMP_NOT_IMPLEMENTED 1185 +#define ER_FLUSH_MASTER_BINLOG_CLOSED 1186 +#define ER_INDEX_REBUILD 1187 +#define ER_MASTER 1188 +#define ER_MASTER_NET_READ 1189 +#define ER_MASTER_NET_WRITE 1190 +#define ER_FT_MATCHING_KEY_NOT_FOUND 1191 +#define ER_LOCK_OR_ACTIVE_TRANSACTION 1192 +#define ER_UNKNOWN_SYSTEM_VARIABLE 1193 +#define ER_CRASHED_ON_USAGE 1194 +#define ER_CRASHED_ON_REPAIR 1195 +#define ER_WARNING_NOT_COMPLETE_ROLLBACK 1196 +#define ER_TRANS_CACHE_FULL 1197 +#define ER_SLAVE_MUST_STOP 1198 +#define ER_SLAVE_NOT_RUNNING 1199 +#define ER_BAD_SLAVE 1200 +#define ER_MASTER_INFO 1201 +#define ER_SLAVE_THREAD 1202 +#define ER_TOO_MANY_USER_CONNECTIONS 1203 +#define ER_SET_CONSTANTS_ONLY 1204 +#define ER_LOCK_WAIT_TIMEOUT 1205 +#define ER_LOCK_TABLE_FULL 1206 +#define ER_READ_ONLY_TRANSACTION 1207 +#define ER_DROP_DB_WITH_READ_LOCK 1208 +#define ER_CREATE_DB_WITH_READ_LOCK 1209 +#define ER_WRONG_ARGUMENTS 1210 +#define ER_NO_PERMISSION_TO_CREATE_USER 1211 +#define ER_UNION_TABLES_IN_DIFFERENT_DIR 1212 +#define ER_LOCK_DEADLOCK 1213 +#define ER_TABLE_CANT_HANDLE_FT 1214 +#define ER_CANNOT_ADD_FOREIGN 1215 +#define ER_NO_REFERENCED_ROW 1216 +#define ER_ROW_IS_REFERENCED 1217 +#define ER_CONNECT_TO_MASTER 1218 +#define ER_QUERY_ON_MASTER 1219 +#define ER_ERROR_WHEN_EXECUTING_COMMAND 1220 +#define ER_WRONG_USAGE 1221 +#define ER_WRONG_NUMBER_OF_COLUMNS_IN_SELECT 1222 +#define ER_CANT_UPDATE_WITH_READLOCK 1223 +#define ER_MIXING_NOT_ALLOWED 1224 +#define ER_DUP_ARGUMENT 1225 +#define ER_USER_LIMIT_REACHED 1226 +#define ER_SPECIFIC_ACCESS_DENIED_ERROR 1227 +#define ER_LOCAL_VARIABLE 1228 +#define ER_GLOBAL_VARIABLE 1229 +#define ER_NO_DEFAULT 1230 +#define ER_WRONG_VALUE_FOR_VAR 1231 +#define ER_WRONG_TYPE_FOR_VAR 1232 +#define ER_VAR_CANT_BE_READ 1233 +#define ER_CANT_USE_OPTION_HERE 1234 +#define ER_NOT_SUPPORTED_YET 1235 +#define ER_MASTER_FATAL_ERROR_READING_BINLOG 1236 +#define ER_SLAVE_IGNORED_TABLE 1237 +#define ER_INCORRECT_GLOBAL_LOCAL_VAR 1238 +#define ER_WRONG_FK_DEF 1239 +#define ER_KEY_REF_DO_NOT_MATCH_TABLE_REF 1240 +#define ER_OPERAND_COLUMNS 1241 +#define ER_SUBQUERY_NO_1_ROW 1242 +#define ER_UNKNOWN_STMT_HANDLER 1243 +#define ER_CORRUPT_HELP_DB 1244 +#define ER_CYCLIC_REFERENCE 1245 +#define ER_AUTO_CONVERT 1246 +#define ER_ILLEGAL_REFERENCE 1247 +#define ER_DERIVED_MUST_HAVE_ALIAS 1248 +#define ER_SELECT_REDUCED 1249 +#define ER_TABLENAME_NOT_ALLOWED_HERE 1250 +#define ER_NOT_SUPPORTED_AUTH_MODE 1251 +#define ER_SPATIAL_CANT_HAVE_NULL 1252 +#define ER_COLLATION_CHARSET_MISMATCH 1253 +#define ER_SLAVE_WAS_RUNNING 1254 +#define ER_SLAVE_WAS_NOT_RUNNING 1255 +#define ER_TOO_BIG_FOR_UNCOMPRESS 1256 +#define ER_ZLIB_Z_MEM_ERROR 1257 +#define ER_ZLIB_Z_BUF_ERROR 1258 +#define ER_ZLIB_Z_DATA_ERROR 1259 +#define ER_CUT_VALUE_GROUP_CONCAT 1260 +#define ER_WARN_TOO_FEW_RECORDS 1261 +#define ER_WARN_TOO_MANY_RECORDS 1262 +#define ER_WARN_NULL_TO_NOTNULL 1263 +#define ER_WARN_DATA_OUT_OF_RANGE 1264 +#define WARN_DATA_TRUNCATED 1265 +#define ER_WARN_USING_OTHER_HANDLER 1266 +#define ER_CANT_AGGREGATE_2COLLATIONS 1267 +#define ER_DROP_USER 1268 +#define ER_REVOKE_GRANTS 1269 +#define ER_CANT_AGGREGATE_3COLLATIONS 1270 +#define ER_CANT_AGGREGATE_NCOLLATIONS 1271 +#define ER_VARIABLE_IS_NOT_STRUCT 1272 +#define ER_UNKNOWN_COLLATION 1273 +#define ER_SLAVE_IGNORED_SSL_PARAMS 1274 +#define ER_SERVER_IS_IN_SECURE_AUTH_MODE 1275 +#define ER_WARN_FIELD_RESOLVED 1276 +#define ER_BAD_SLAVE_UNTIL_COND 1277 +#define ER_MISSING_SKIP_SLAVE 1278 +#define ER_UNTIL_COND_IGNORED 1279 +#define ER_WRONG_NAME_FOR_INDEX 1280 +#define ER_WRONG_NAME_FOR_CATALOG 1281 +#define ER_WARN_QC_RESIZE 1282 +#define ER_BAD_FT_COLUMN 1283 +#define ER_UNKNOWN_KEY_CACHE 1284 +#define ER_WARN_HOSTNAME_WONT_WORK 1285 +#define ER_UNKNOWN_STORAGE_ENGINE 1286 +#define ER_WARN_DEPRECATED_SYNTAX 1287 +#define ER_NON_UPDATABLE_TABLE 1288 +#define ER_FEATURE_DISABLED 1289 +#define ER_OPTION_PREVENTS_STATEMENT 1290 +#define ER_DUPLICATED_VALUE_IN_TYPE 1291 +#define ER_TRUNCATED_WRONG_VALUE 1292 +#define ER_TOO_MUCH_AUTO_TIMESTAMP_COLS 1293 +#define ER_INVALID_ON_UPDATE 1294 +#define ER_UNSUPPORTED_PS 1295 +#define ER_GET_ERRMSG 1296 +#define ER_GET_TEMPORARY_ERRMSG 1297 +#define ER_UNKNOWN_TIME_ZONE 1298 +#define ER_WARN_INVALID_TIMESTAMP 1299 +#define ER_INVALID_CHARACTER_STRING 1300 +#define ER_WARN_ALLOWED_PACKET_OVERFLOWED 1301 +#define ER_CONFLICTING_DECLARATIONS 1302 +#define ER_SP_NO_RECURSIVE_CREATE 1303 +#define ER_SP_ALREADY_EXISTS 1304 +#define ER_SP_DOES_NOT_EXIST 1305 +#define ER_SP_DROP_FAILED 1306 +#define ER_SP_STORE_FAILED 1307 +#define ER_SP_LILABEL_MISMATCH 1308 +#define ER_SP_LABEL_REDEFINE 1309 +#define ER_SP_LABEL_MISMATCH 1310 +#define ER_SP_UNINIT_VAR 1311 +#define ER_SP_BADSELECT 1312 +#define ER_SP_BADRETURN 1313 +#define ER_SP_BADSTATEMENT 1314 +#define ER_UPDATE_LOG_DEPRECATED_IGNORED 1315 +#define ER_UPDATE_LOG_DEPRECATED_TRANSLATED 1316 +#define ER_QUERY_INTERRUPTED 1317 +#define ER_SP_WRONG_NO_OF_ARGS 1318 +#define ER_SP_COND_MISMATCH 1319 +#define ER_SP_NORETURN 1320 +#define ER_SP_NORETURNEND 1321 +#define ER_SP_BAD_CURSOR_QUERY 1322 +#define ER_SP_BAD_CURSOR_SELECT 1323 +#define ER_SP_CURSOR_MISMATCH 1324 +#define ER_SP_CURSOR_ALREADY_OPEN 1325 +#define ER_SP_CURSOR_NOT_OPEN 1326 +#define ER_SP_UNDECLARED_VAR 1327 +#define ER_SP_WRONG_NO_OF_FETCH_ARGS 1328 +#define ER_SP_FETCH_NO_DATA 1329 +#define ER_SP_DUP_PARAM 1330 +#define ER_SP_DUP_VAR 1331 +#define ER_SP_DUP_COND 1332 +#define ER_SP_DUP_CURS 1333 +#define ER_SP_CANT_ALTER 1334 +#define ER_SP_SUBSELECT_NYI 1335 +#define ER_STMT_NOT_ALLOWED_IN_SF_OR_TRG 1336 +#define ER_SP_VARCOND_AFTER_CURSHNDLR 1337 +#define ER_SP_CURSOR_AFTER_HANDLER 1338 +#define ER_SP_CASE_NOT_FOUND 1339 +#define ER_FPARSER_TOO_BIG_FILE 1340 +#define ER_FPARSER_BAD_HEADER 1341 +#define ER_FPARSER_EOF_IN_COMMENT 1342 +#define ER_FPARSER_ERROR_IN_PARAMETER 1343 +#define ER_FPARSER_EOF_IN_UNKNOWN_PARAMETER 1344 +#define ER_VIEW_NO_EXPLAIN 1345 +#define ER_FRM_UNKNOWN_TYPE 1346 +#define ER_WRONG_OBJECT 1347 +#define ER_NONUPDATEABLE_COLUMN 1348 +#define ER_VIEW_SELECT_DERIVED 1349 +#define ER_VIEW_SELECT_CLAUSE 1350 +#define ER_VIEW_SELECT_VARIABLE 1351 +#define ER_VIEW_SELECT_TMPTABLE 1352 +#define ER_VIEW_WRONG_LIST 1353 +#define ER_WARN_VIEW_MERGE 1354 +#define ER_WARN_VIEW_WITHOUT_KEY 1355 +#define ER_VIEW_INVALID 1356 +#define ER_SP_NO_DROP_SP 1357 +#define ER_SP_GOTO_IN_HNDLR 1358 +#define ER_TRG_ALREADY_EXISTS 1359 +#define ER_TRG_DOES_NOT_EXIST 1360 +#define ER_TRG_ON_VIEW_OR_TEMP_TABLE 1361 +#define ER_TRG_CANT_CHANGE_ROW 1362 +#define ER_TRG_NO_SUCH_ROW_IN_TRG 1363 +#define ER_NO_DEFAULT_FOR_FIELD 1364 +#define ER_DIVISION_BY_ZERO 1365 +#define ER_TRUNCATED_WRONG_VALUE_FOR_FIELD 1366 +#define ER_ILLEGAL_VALUE_FOR_TYPE 1367 +#define ER_VIEW_NONUPD_CHECK 1368 +#define ER_VIEW_CHECK_FAILED 1369 +#define ER_PROCACCESS_DENIED_ERROR 1370 +#define ER_RELAY_LOG_FAIL 1371 +#define ER_PASSWD_LENGTH 1372 +#define ER_UNKNOWN_TARGET_BINLOG 1373 +#define ER_IO_ERR_LOG_INDEX_READ 1374 +#define ER_BINLOG_PURGE_PROHIBITED 1375 +#define ER_FSEEK_FAIL 1376 +#define ER_BINLOG_PURGE_FATAL_ERR 1377 +#define ER_LOG_IN_USE 1378 +#define ER_LOG_PURGE_UNKNOWN_ERR 1379 +#define ER_RELAY_LOG_INIT 1380 +#define ER_NO_BINARY_LOGGING 1381 +#define ER_RESERVED_SYNTAX 1382 +#define ER_WSAS_FAILED 1383 +#define ER_DIFF_GROUPS_PROC 1384 +#define ER_NO_GROUP_FOR_PROC 1385 +#define ER_ORDER_WITH_PROC 1386 +#define ER_LOGGING_PROHIBIT_CHANGING_OF 1387 +#define ER_NO_FILE_MAPPING 1388 +#define ER_WRONG_MAGIC 1389 +#define ER_PS_MANY_PARAM 1390 +#define ER_KEY_PART_0 1391 +#define ER_VIEW_CHECKSUM 1392 +#define ER_VIEW_MULTIUPDATE 1393 +#define ER_VIEW_NO_INSERT_FIELD_LIST 1394 +#define ER_VIEW_DELETE_MERGE_VIEW 1395 +#define ER_CANNOT_USER 1396 +#define ER_XAER_NOTA 1397 +#define ER_XAER_INVAL 1398 +#define ER_XAER_RMFAIL 1399 +#define ER_XAER_OUTSIDE 1400 +#define ER_XAER_RMERR 1401 +#define ER_XA_RBROLLBACK 1402 +#define ER_NONEXISTING_PROC_GRANT 1403 +#define ER_PROC_AUTO_GRANT_FAIL 1404 +#define ER_PROC_AUTO_REVOKE_FAIL 1405 +#define ER_DATA_TOO_LONG 1406 +#define ER_SP_BAD_SQLSTATE 1407 +#define ER_STARTUP 1408 +#define ER_LOAD_FROM_FIXED_SIZE_ROWS_TO_VAR 1409 +#define ER_CANT_CREATE_USER_WITH_GRANT 1410 +#define ER_WRONG_VALUE_FOR_TYPE 1411 +#define ER_TABLE_DEF_CHANGED 1412 +#define ER_SP_DUP_HANDLER 1413 +#define ER_SP_NOT_VAR_ARG 1414 +#define ER_SP_NO_RETSET 1415 +#define ER_CANT_CREATE_GEOMETRY_OBJECT 1416 +#define ER_FAILED_ROUTINE_BREAK_BINLOG 1417 +#define ER_BINLOG_UNSAFE_ROUTINE 1418 +#define ER_BINLOG_CREATE_ROUTINE_NEED_SUPER 1419 +#define ER_EXEC_STMT_WITH_OPEN_CURSOR 1420 +#define ER_STMT_HAS_NO_OPEN_CURSOR 1421 +#define ER_COMMIT_NOT_ALLOWED_IN_SF_OR_TRG 1422 +#define ER_NO_DEFAULT_FOR_VIEW_FIELD 1423 +#define ER_SP_NO_RECURSION 1424 +#define ER_TOO_BIG_SCALE 1425 +#define ER_TOO_BIG_PRECISION 1426 +#define ER_M_BIGGER_THAN_D 1427 +#define ER_WRONG_LOCK_OF_SYSTEM_TABLE 1428 +#define ER_CONNECT_TO_FOREIGN_DATA_SOURCE 1429 +#define ER_QUERY_ON_FOREIGN_DATA_SOURCE 1430 +#define ER_FOREIGN_DATA_SOURCE_DOESNT_EXIST 1431 +#define ER_FOREIGN_DATA_STRING_INVALID_CANT_CREATE 1432 +#define ER_FOREIGN_DATA_STRING_INVALID 1433 +#define ER_CANT_CREATE_FEDERATED_TABLE 1434 +#define ER_TRG_IN_WRONG_SCHEMA 1435 +#define ER_STACK_OVERRUN_NEED_MORE 1436 +#define ER_TOO_LONG_BODY 1437 +#define ER_WARN_CANT_DROP_DEFAULT_KEYCACHE 1438 +#define ER_TOO_BIG_DISPLAYWIDTH 1439 +#define ER_XAER_DUPID 1440 +#define ER_DATETIME_FUNCTION_OVERFLOW 1441 +#define ER_CANT_UPDATE_USED_TABLE_IN_SF_OR_TRG 1442 +#define ER_VIEW_PREVENT_UPDATE 1443 +#define ER_PS_NO_RECURSION 1444 +#define ER_SP_CANT_SET_AUTOCOMMIT 1445 +#define ER_MALFORMED_DEFINER 1446 +#define ER_VIEW_FRM_NO_USER 1447 +#define ER_VIEW_OTHER_USER 1448 +#define ER_NO_SUCH_USER 1449 +#define ER_FORBID_SCHEMA_CHANGE 1450 +#define ER_ROW_IS_REFERENCED_2 1451 +#define ER_NO_REFERENCED_ROW_2 1452 +#define ER_SP_BAD_VAR_SHADOW 1453 +#define ER_TRG_NO_DEFINER 1454 +#define ER_OLD_FILE_FORMAT 1455 +#define ER_SP_RECURSION_LIMIT 1456 +#define ER_SP_PROC_TABLE_CORRUPT 1457 +#define ER_SP_WRONG_NAME 1458 +#define ER_TABLE_NEEDS_UPGRADE 1459 +#define ER_SP_NO_AGGREGATE 1460 +#define ER_MAX_PREPARED_STMT_COUNT_REACHED 1461 +#define ER_VIEW_RECURSIVE 1462 +#define ER_NON_GROUPING_FIELD_USED 1463 +#define ER_TABLE_CANT_HANDLE_SPKEYS 1464 +#define ER_NO_TRIGGERS_ON_SYSTEM_SCHEMA 1465 +#define ER_REMOVED_SPACES 1466 +#define ER_AUTOINC_READ_FAILED 1467 +#define ER_USERNAME 1468 +#define ER_HOSTNAME 1469 +#define ER_WRONG_STRING_LENGTH 1470 +#define ER_NON_INSERTABLE_TABLE 1471 +#define ER_ADMIN_WRONG_MRG_TABLE 1472 +#define ER_TOO_HIGH_LEVEL_OF_NESTING_FOR_SELECT 1473 +#define ER_NAME_BECOMES_EMPTY 1474 +#define ER_AMBIGUOUS_FIELD_TERM 1475 +#define ER_FOREIGN_SERVER_EXISTS 1476 +#define ER_FOREIGN_SERVER_DOESNT_EXIST 1477 +#define ER_ILLEGAL_HA_CREATE_OPTION 1478 +#define ER_PARTITION_REQUIRES_VALUES_ERROR 1479 +#define ER_PARTITION_WRONG_VALUES_ERROR 1480 +#define ER_PARTITION_MAXVALUE_ERROR 1481 +#define ER_PARTITION_SUBPARTITION_ERROR 1482 +#define ER_PARTITION_SUBPART_MIX_ERROR 1483 +#define ER_PARTITION_WRONG_NO_PART_ERROR 1484 +#define ER_PARTITION_WRONG_NO_SUBPART_ERROR 1485 +#define ER_WRONG_EXPR_IN_PARTITION_FUNC_ERROR 1486 +#define ER_NO_CONST_EXPR_IN_RANGE_OR_LIST_ERROR 1487 +#define ER_FIELD_NOT_FOUND_PART_ERROR 1488 +#define ER_LIST_OF_FIELDS_ONLY_IN_HASH_ERROR 1489 +#define ER_INCONSISTENT_PARTITION_INFO_ERROR 1490 +#define ER_PARTITION_FUNC_NOT_ALLOWED_ERROR 1491 +#define ER_PARTITIONS_MUST_BE_DEFINED_ERROR 1492 +#define ER_RANGE_NOT_INCREASING_ERROR 1493 +#define ER_INCONSISTENT_TYPE_OF_FUNCTIONS_ERROR 1494 +#define ER_MULTIPLE_DEF_CONST_IN_LIST_PART_ERROR 1495 +#define ER_PARTITION_ENTRY_ERROR 1496 +#define ER_MIX_HANDLER_ERROR 1497 +#define ER_PARTITION_NOT_DEFINED_ERROR 1498 +#define ER_TOO_MANY_PARTITIONS_ERROR 1499 +#define ER_SUBPARTITION_ERROR 1500 +#define ER_CANT_CREATE_HANDLER_FILE 1501 +#define ER_BLOB_FIELD_IN_PART_FUNC_ERROR 1502 +#define ER_UNIQUE_KEY_NEED_ALL_FIELDS_IN_PF 1503 +#define ER_NO_PARTS_ERROR 1504 +#define ER_PARTITION_MGMT_ON_NONPARTITIONED 1505 +#define ER_FOREIGN_KEY_ON_PARTITIONED 1506 +#define ER_DROP_PARTITION_NON_EXISTENT 1507 +#define ER_DROP_LAST_PARTITION 1508 +#define ER_COALESCE_ONLY_ON_HASH_PARTITION 1509 +#define ER_REORG_HASH_ONLY_ON_SAME_NO 1510 +#define ER_REORG_NO_PARAM_ERROR 1511 +#define ER_ONLY_ON_RANGE_LIST_PARTITION 1512 +#define ER_ADD_PARTITION_SUBPART_ERROR 1513 +#define ER_ADD_PARTITION_NO_NEW_PARTITION 1514 +#define ER_COALESCE_PARTITION_NO_PARTITION 1515 +#define ER_REORG_PARTITION_NOT_EXIST 1516 +#define ER_SAME_NAME_PARTITION 1517 +#define ER_NO_BINLOG_ERROR 1518 +#define ER_CONSECUTIVE_REORG_PARTITIONS 1519 +#define ER_REORG_OUTSIDE_RANGE 1520 +#define ER_PARTITION_FUNCTION_FAILURE 1521 +#define ER_PART_STATE_ERROR 1522 +#define ER_LIMITED_PART_RANGE 1523 +#define ER_PLUGIN_IS_NOT_LOADED 1524 +#define ER_WRONG_VALUE 1525 +#define ER_NO_PARTITION_FOR_GIVEN_VALUE 1526 +#define ER_FILEGROUP_OPTION_ONLY_ONCE 1527 +#define ER_CREATE_FILEGROUP_FAILED 1528 +#define ER_DROP_FILEGROUP_FAILED 1529 +#define ER_TABLESPACE_AUTO_EXTEND_ERROR 1530 +#define ER_WRONG_SIZE_NUMBER 1531 +#define ER_SIZE_OVERFLOW_ERROR 1532 +#define ER_ALTER_FILEGROUP_FAILED 1533 +#define ER_BINLOG_ROW_LOGGING_FAILED 1534 +#define ER_BINLOG_ROW_WRONG_TABLE_DEF 1535 +#define ER_BINLOG_ROW_RBR_TO_SBR 1536 +#define ER_EVENT_ALREADY_EXISTS 1537 +#define ER_EVENT_STORE_FAILED 1538 +#define ER_EVENT_DOES_NOT_EXIST 1539 +#define ER_EVENT_CANT_ALTER 1540 +#define ER_EVENT_DROP_FAILED 1541 +#define ER_EVENT_INTERVAL_NOT_POSITIVE_OR_TOO_BIG 1542 +#define ER_EVENT_ENDS_BEFORE_STARTS 1543 +#define ER_EVENT_EXEC_TIME_IN_THE_PAST 1544 +#define ER_EVENT_OPEN_TABLE_FAILED 1545 +#define ER_EVENT_NEITHER_M_EXPR_NOR_M_AT 1546 +#define ER_COL_COUNT_DOESNT_MATCH_CORRUPTED 1547 +#define ER_CANNOT_LOAD_FROM_TABLE 1548 +#define ER_EVENT_CANNOT_DELETE 1549 +#define ER_EVENT_COMPILE_ERROR 1550 +#define ER_EVENT_SAME_NAME 1551 +#define ER_EVENT_DATA_TOO_LONG 1552 +#define ER_DROP_INDEX_FK 1553 +#define ER_WARN_DEPRECATED_SYNTAX_WITH_VER 1554 +#define ER_CANT_WRITE_LOCK_LOG_TABLE 1555 +#define ER_CANT_LOCK_LOG_TABLE 1556 +#define ER_FOREIGN_DUPLICATE_KEY 1557 +#define ER_COL_COUNT_DOESNT_MATCH_PLEASE_UPDATE 1558 +#define ER_TEMP_TABLE_PREVENTS_SWITCH_OUT_OF_RBR 1559 +#define ER_STORED_FUNCTION_PREVENTS_SWITCH_BINLOG_FORMAT 1560 +#define ER_NDB_CANT_SWITCH_BINLOG_FORMAT 1561 +#define ER_PARTITION_NO_TEMPORARY 1562 +#define ER_PARTITION_CONST_DOMAIN_ERROR 1563 +#define ER_PARTITION_FUNCTION_IS_NOT_ALLOWED 1564 +#define ER_DDL_LOG_ERROR 1565 +#define ER_NULL_IN_VALUES_LESS_THAN 1566 +#define ER_WRONG_PARTITION_NAME 1567 +#define ER_CANT_CHANGE_TX_ISOLATION 1568 +#define ER_DUP_ENTRY_AUTOINCREMENT_CASE 1569 +#define ER_EVENT_MODIFY_QUEUE_ERROR 1570 +#define ER_EVENT_SET_VAR_ERROR 1571 +#define ER_PARTITION_MERGE_ERROR 1572 +#define ER_CANT_ACTIVATE_LOG 1573 +#define ER_RBR_NOT_AVAILABLE 1574 +#define ER_BASE64_DECODE_ERROR 1575 +#define ER_EVENT_RECURSION_FORBIDDEN 1576 +#define ER_EVENTS_DB_ERROR 1577 +#define ER_ONLY_INTEGERS_ALLOWED 1578 +#define ER_UNSUPORTED_LOG_ENGINE 1579 +#define ER_BAD_LOG_STATEMENT 1580 +#define ER_CANT_RENAME_LOG_TABLE 1581 +#define ER_WRONG_PARAMCOUNT_TO_NATIVE_FCT 1582 +#define ER_WRONG_PARAMETERS_TO_NATIVE_FCT 1583 +#define ER_WRONG_PARAMETERS_TO_STORED_FCT 1584 +#define ER_NATIVE_FCT_NAME_COLLISION 1585 +#define ER_DUP_ENTRY_WITH_KEY_NAME 1586 +#define ER_BINLOG_PURGE_EMFILE 1587 +#define ER_EVENT_CANNOT_CREATE_IN_THE_PAST 1588 +#define ER_EVENT_CANNOT_ALTER_IN_THE_PAST 1589 +#define ER_SLAVE_INCIDENT 1590 +#define ER_NO_PARTITION_FOR_GIVEN_VALUE_SILENT 1591 +#define ER_BINLOG_UNSAFE_STATEMENT 1592 +#define ER_SLAVE_FATAL_ERROR 1593 +#define ER_SLAVE_RELAY_LOG_READ_FAILURE 1594 +#define ER_SLAVE_RELAY_LOG_WRITE_FAILURE 1595 +#define ER_SLAVE_CREATE_EVENT_FAILURE 1596 +#define ER_SLAVE_MASTER_COM_FAILURE 1597 +#define ER_BINLOG_LOGGING_IMPOSSIBLE 1598 +#define ER_VIEW_NO_CREATION_CTX 1599 +#define ER_VIEW_INVALID_CREATION_CTX 1600 +#define ER_SR_INVALID_CREATION_CTX 1601 +#define ER_TRG_CORRUPTED_FILE 1602 +#define ER_TRG_NO_CREATION_CTX 1603 +#define ER_TRG_INVALID_CREATION_CTX 1604 +#define ER_EVENT_INVALID_CREATION_CTX 1605 +#define ER_TRG_CANT_OPEN_TABLE 1606 +#define ER_CANT_CREATE_SROUTINE 1607 +#define ER_SLAVE_AMBIGOUS_EXEC_MODE 1608 +#define ER_NO_FORMAT_DESCRIPTION_EVENT_BEFORE_BINLOG_STATEMENT 1609 +#define ER_SLAVE_CORRUPT_EVENT 1610 +#define ER_LOAD_DATA_INVALID_COLUMN 1611 +#define ER_LOG_PURGE_NO_FILE 1612 +#define ER_XA_RBTIMEOUT 1613 +#define ER_XA_RBDEADLOCK 1614 +#define ER_NEED_REPREPARE 1615 +#define ER_DELAYED_NOT_SUPPORTED 1616 +#define WARN_NO_MASTER_INFO 1617 +#define WARN_OPTION_IGNORED 1618 +#define WARN_PLUGIN_DELETE_BUILTIN 1619 +#define WARN_PLUGIN_BUSY 1620 +#define ER_VARIABLE_IS_READONLY 1621 +#define ER_WARN_ENGINE_TRANSACTION_ROLLBACK 1622 +#define ER_SLAVE_HEARTBEAT_FAILURE 1623 +#define ER_SLAVE_HEARTBEAT_VALUE_OUT_OF_RANGE 1624 +#define ER_NDB_REPLICATION_SCHEMA_ERROR 1625 +#define ER_CONFLICT_FN_PARSE_ERROR 1626 +#define ER_EXCEPTIONS_WRITE_ERROR 1627 +#define ER_TOO_LONG_TABLE_COMMENT 1628 +#define ER_TOO_LONG_FIELD_COMMENT 1629 +#define ER_FUNC_INEXISTENT_NAME_COLLISION 1630 +#define ER_DATABASE_NAME 1631 +#define ER_TABLE_NAME 1632 +#define ER_PARTITION_NAME 1633 +#define ER_SUBPARTITION_NAME 1634 +#define ER_TEMPORARY_NAME 1635 +#define ER_RENAMED_NAME 1636 +#define ER_TOO_MANY_CONCURRENT_TRXS 1637 +#define WARN_NON_ASCII_SEPARATOR_NOT_IMPLEMENTED 1638 +#define ER_DEBUG_SYNC_TIMEOUT 1639 +#define ER_DEBUG_SYNC_HIT_LIMIT 1640 +#define ER_ERROR_LAST 1640 diff --git a/EQ2/source/depends/mysql-5.1.45-winx64/include/sql_common.h b/EQ2/source/depends/mysql-5.1.45-winx64/include/sql_common.h new file mode 100644 index 000000000..9e43d076b --- /dev/null +++ b/EQ2/source/depends/mysql-5.1.45-winx64/include/sql_common.h @@ -0,0 +1,50 @@ +/* Copyright (C) 2003-2004, 2006 MySQL AB + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; version 2 of the License. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ + + +extern const char *unknown_sqlstate; +extern const char *cant_connect_sqlstate; +extern const char *not_error_sqlstate; + +#ifdef __cplusplus +extern "C" { +#endif + +extern CHARSET_INFO *default_client_charset_info; +MYSQL_FIELD *unpack_fields(MYSQL_DATA *data,MEM_ROOT *alloc,uint fields, + my_bool default_value, uint server_capabilities); +void free_rows(MYSQL_DATA *cur); +void free_old_query(MYSQL *mysql); +void end_server(MYSQL *mysql); +my_bool mysql_reconnect(MYSQL *mysql); +void mysql_read_default_options(struct st_mysql_options *options, + const char *filename,const char *group); +my_bool +cli_advanced_command(MYSQL *mysql, enum enum_server_command command, + const unsigned char *header, ulong header_length, + const unsigned char *arg, ulong arg_length, + my_bool skip_check, MYSQL_STMT *stmt); +unsigned long cli_safe_read(MYSQL *mysql); +void net_clear_error(NET *net); +void set_stmt_errmsg(MYSQL_STMT *stmt, NET *net); +void set_stmt_error(MYSQL_STMT *stmt, int errcode, const char *sqlstate, + const char *err); +void set_mysql_error(MYSQL *mysql, int errcode, const char *sqlstate); +#ifdef __cplusplus +} +#endif + +#define protocol_41(A) ((A)->server_capabilities & CLIENT_PROTOCOL_41) + diff --git a/EQ2/source/depends/mysql-5.1.45-winx64/include/sql_state.h b/EQ2/source/depends/mysql-5.1.45-winx64/include/sql_state.h new file mode 100644 index 000000000..f14b1cf59 --- /dev/null +++ b/EQ2/source/depends/mysql-5.1.45-winx64/include/sql_state.h @@ -0,0 +1,211 @@ +/* Autogenerated file, please don't edit */ + +{ ER_DUP_KEY ,"23000", "" }, +{ ER_OUTOFMEMORY ,"HY001", "S1001" }, +{ ER_OUT_OF_SORTMEMORY ,"HY001", "S1001" }, +{ ER_CON_COUNT_ERROR ,"08004", "" }, +{ ER_BAD_HOST_ERROR ,"08S01", "" }, +{ ER_HANDSHAKE_ERROR ,"08S01", "" }, +{ ER_DBACCESS_DENIED_ERROR ,"42000", "" }, +{ ER_ACCESS_DENIED_ERROR ,"28000", "" }, +{ ER_NO_DB_ERROR ,"3D000", "" }, +{ ER_UNKNOWN_COM_ERROR ,"08S01", "" }, +{ ER_BAD_NULL_ERROR ,"23000", "" }, +{ ER_BAD_DB_ERROR ,"42000", "" }, +{ ER_TABLE_EXISTS_ERROR ,"42S01", "" }, +{ ER_BAD_TABLE_ERROR ,"42S02", "" }, +{ ER_NON_UNIQ_ERROR ,"23000", "" }, +{ ER_SERVER_SHUTDOWN ,"08S01", "" }, +{ ER_BAD_FIELD_ERROR ,"42S22", "S0022" }, +{ ER_WRONG_FIELD_WITH_GROUP ,"42000", "S1009" }, +{ ER_WRONG_GROUP_FIELD ,"42000", "S1009" }, +{ ER_WRONG_SUM_SELECT ,"42000", "S1009" }, +{ ER_WRONG_VALUE_COUNT ,"21S01", "" }, +{ ER_TOO_LONG_IDENT ,"42000", "S1009" }, +{ ER_DUP_FIELDNAME ,"42S21", "S1009" }, +{ ER_DUP_KEYNAME ,"42000", "S1009" }, +{ ER_DUP_ENTRY ,"23000", "S1009" }, +{ ER_WRONG_FIELD_SPEC ,"42000", "S1009" }, +{ ER_PARSE_ERROR ,"42000", "s1009" }, +{ ER_EMPTY_QUERY ,"42000", "" }, +{ ER_NONUNIQ_TABLE ,"42000", "S1009" }, +{ ER_INVALID_DEFAULT ,"42000", "S1009" }, +{ ER_MULTIPLE_PRI_KEY ,"42000", "S1009" }, +{ ER_TOO_MANY_KEYS ,"42000", "S1009" }, +{ ER_TOO_MANY_KEY_PARTS ,"42000", "S1009" }, +{ ER_TOO_LONG_KEY ,"42000", "S1009" }, +{ ER_KEY_COLUMN_DOES_NOT_EXITS ,"42000", "S1009" }, +{ ER_BLOB_USED_AS_KEY ,"42000", "S1009" }, +{ ER_TOO_BIG_FIELDLENGTH ,"42000", "S1009" }, +{ ER_WRONG_AUTO_KEY ,"42000", "S1009" }, +{ ER_FORCING_CLOSE ,"08S01", "" }, +{ ER_IPSOCK_ERROR ,"08S01", "" }, +{ ER_NO_SUCH_INDEX ,"42S12", "S1009" }, +{ ER_WRONG_FIELD_TERMINATORS ,"42000", "S1009" }, +{ ER_BLOBS_AND_NO_TERMINATED ,"42000", "S1009" }, +{ ER_CANT_REMOVE_ALL_FIELDS ,"42000", "" }, +{ ER_CANT_DROP_FIELD_OR_KEY ,"42000", "" }, +{ ER_BLOB_CANT_HAVE_DEFAULT ,"42000", "" }, +{ ER_WRONG_DB_NAME ,"42000", "" }, +{ ER_WRONG_TABLE_NAME ,"42000", "" }, +{ ER_TOO_BIG_SELECT ,"42000", "" }, +{ ER_UNKNOWN_PROCEDURE ,"42000", "" }, +{ ER_WRONG_PARAMCOUNT_TO_PROCEDURE ,"42000", "" }, +{ ER_UNKNOWN_TABLE ,"42S02", "" }, +{ ER_FIELD_SPECIFIED_TWICE ,"42000", "" }, +{ ER_UNSUPPORTED_EXTENSION ,"42000", "" }, +{ ER_TABLE_MUST_HAVE_COLUMNS ,"42000", "" }, +{ ER_UNKNOWN_CHARACTER_SET ,"42000", "" }, +{ ER_TOO_BIG_ROWSIZE ,"42000", "" }, +{ ER_WRONG_OUTER_JOIN ,"42000", "" }, +{ ER_NULL_COLUMN_IN_INDEX ,"42000", "" }, +{ ER_PASSWORD_ANONYMOUS_USER ,"42000", "" }, +{ ER_PASSWORD_NOT_ALLOWED ,"42000", "" }, +{ ER_PASSWORD_NO_MATCH ,"42000", "" }, +{ ER_WRONG_VALUE_COUNT_ON_ROW ,"21S01", "" }, +{ ER_INVALID_USE_OF_NULL ,"22004", "" }, +{ ER_REGEXP_ERROR ,"42000", "" }, +{ ER_MIX_OF_GROUP_FUNC_AND_FIELDS ,"42000", "" }, +{ ER_NONEXISTING_GRANT ,"42000", "" }, +{ ER_TABLEACCESS_DENIED_ERROR ,"42000", "" }, +{ ER_COLUMNACCESS_DENIED_ERROR ,"42000", "" }, +{ ER_ILLEGAL_GRANT_FOR_TABLE ,"42000", "" }, +{ ER_GRANT_WRONG_HOST_OR_USER ,"42000", "" }, +{ ER_NO_SUCH_TABLE ,"42S02", "" }, +{ ER_NONEXISTING_TABLE_GRANT ,"42000", "" }, +{ ER_NOT_ALLOWED_COMMAND ,"42000", "" }, +{ ER_SYNTAX_ERROR ,"42000", "" }, +{ ER_ABORTING_CONNECTION ,"08S01", "" }, +{ ER_NET_PACKET_TOO_LARGE ,"08S01", "" }, +{ ER_NET_READ_ERROR_FROM_PIPE ,"08S01", "" }, +{ ER_NET_FCNTL_ERROR ,"08S01", "" }, +{ ER_NET_PACKETS_OUT_OF_ORDER ,"08S01", "" }, +{ ER_NET_UNCOMPRESS_ERROR ,"08S01", "" }, +{ ER_NET_READ_ERROR ,"08S01", "" }, +{ ER_NET_READ_INTERRUPTED ,"08S01", "" }, +{ ER_NET_ERROR_ON_WRITE ,"08S01", "" }, +{ ER_NET_WRITE_INTERRUPTED ,"08S01", "" }, +{ ER_TOO_LONG_STRING ,"42000", "" }, +{ ER_TABLE_CANT_HANDLE_BLOB ,"42000", "" }, +{ ER_TABLE_CANT_HANDLE_AUTO_INCREMENT ,"42000", "" }, +{ ER_WRONG_COLUMN_NAME ,"42000", "" }, +{ ER_WRONG_KEY_COLUMN ,"42000", "" }, +{ ER_DUP_UNIQUE ,"23000", "" }, +{ ER_BLOB_KEY_WITHOUT_LENGTH ,"42000", "" }, +{ ER_PRIMARY_CANT_HAVE_NULL ,"42000", "" }, +{ ER_TOO_MANY_ROWS ,"42000", "" }, +{ ER_REQUIRES_PRIMARY_KEY ,"42000", "" }, +{ ER_KEY_DOES_NOT_EXITS ,"42000", "S1009" }, +{ ER_CHECK_NO_SUCH_TABLE ,"42000", "" }, +{ ER_CHECK_NOT_IMPLEMENTED ,"42000", "" }, +{ ER_CANT_DO_THIS_DURING_AN_TRANSACTION ,"25000", "" }, +{ ER_NEW_ABORTING_CONNECTION ,"08S01", "" }, +{ ER_MASTER_NET_READ ,"08S01", "" }, +{ ER_MASTER_NET_WRITE ,"08S01", "" }, +{ ER_TOO_MANY_USER_CONNECTIONS ,"42000", "" }, +{ ER_READ_ONLY_TRANSACTION ,"25000", "" }, +{ ER_NO_PERMISSION_TO_CREATE_USER ,"42000", "" }, +{ ER_LOCK_DEADLOCK ,"40001", "" }, +{ ER_NO_REFERENCED_ROW ,"23000", "" }, +{ ER_ROW_IS_REFERENCED ,"23000", "" }, +{ ER_CONNECT_TO_MASTER ,"08S01", "" }, +{ ER_WRONG_NUMBER_OF_COLUMNS_IN_SELECT ,"21000", "" }, +{ ER_USER_LIMIT_REACHED ,"42000", "" }, +{ ER_SPECIFIC_ACCESS_DENIED_ERROR ,"42000", "" }, +{ ER_NO_DEFAULT ,"42000", "" }, +{ ER_WRONG_VALUE_FOR_VAR ,"42000", "" }, +{ ER_WRONG_TYPE_FOR_VAR ,"42000", "" }, +{ ER_CANT_USE_OPTION_HERE ,"42000", "" }, +{ ER_NOT_SUPPORTED_YET ,"42000", "" }, +{ ER_WRONG_FK_DEF ,"42000", "" }, +{ ER_OPERAND_COLUMNS ,"21000", "" }, +{ ER_SUBQUERY_NO_1_ROW ,"21000", "" }, +{ ER_ILLEGAL_REFERENCE ,"42S22", "" }, +{ ER_DERIVED_MUST_HAVE_ALIAS ,"42000", "" }, +{ ER_SELECT_REDUCED ,"01000", "" }, +{ ER_TABLENAME_NOT_ALLOWED_HERE ,"42000", "" }, +{ ER_NOT_SUPPORTED_AUTH_MODE ,"08004", "" }, +{ ER_SPATIAL_CANT_HAVE_NULL ,"42000", "" }, +{ ER_COLLATION_CHARSET_MISMATCH ,"42000", "" }, +{ ER_WARN_TOO_FEW_RECORDS ,"01000", "" }, +{ ER_WARN_TOO_MANY_RECORDS ,"01000", "" }, +{ ER_WARN_NULL_TO_NOTNULL ,"22004", "" }, +{ ER_WARN_DATA_OUT_OF_RANGE ,"22003", "" }, +{ WARN_DATA_TRUNCATED ,"01000", "" }, +{ ER_WRONG_NAME_FOR_INDEX ,"42000", "" }, +{ ER_WRONG_NAME_FOR_CATALOG ,"42000", "" }, +{ ER_UNKNOWN_STORAGE_ENGINE ,"42000", "" }, +{ ER_TRUNCATED_WRONG_VALUE ,"22007", "" }, +{ ER_SP_NO_RECURSIVE_CREATE ,"2F003", "" }, +{ ER_SP_ALREADY_EXISTS ,"42000", "" }, +{ ER_SP_DOES_NOT_EXIST ,"42000", "" }, +{ ER_SP_LILABEL_MISMATCH ,"42000", "" }, +{ ER_SP_LABEL_REDEFINE ,"42000", "" }, +{ ER_SP_LABEL_MISMATCH ,"42000", "" }, +{ ER_SP_UNINIT_VAR ,"01000", "" }, +{ ER_SP_BADSELECT ,"0A000", "" }, +{ ER_SP_BADRETURN ,"42000", "" }, +{ ER_SP_BADSTATEMENT ,"0A000", "" }, +{ ER_UPDATE_LOG_DEPRECATED_IGNORED ,"42000", "" }, +{ ER_UPDATE_LOG_DEPRECATED_TRANSLATED ,"42000", "" }, +{ ER_QUERY_INTERRUPTED ,"70100", "" }, +{ ER_SP_WRONG_NO_OF_ARGS ,"42000", "" }, +{ ER_SP_COND_MISMATCH ,"42000", "" }, +{ ER_SP_NORETURN ,"42000", "" }, +{ ER_SP_NORETURNEND ,"2F005", "" }, +{ ER_SP_BAD_CURSOR_QUERY ,"42000", "" }, +{ ER_SP_BAD_CURSOR_SELECT ,"42000", "" }, +{ ER_SP_CURSOR_MISMATCH ,"42000", "" }, +{ ER_SP_CURSOR_ALREADY_OPEN ,"24000", "" }, +{ ER_SP_CURSOR_NOT_OPEN ,"24000", "" }, +{ ER_SP_UNDECLARED_VAR ,"42000", "" }, +{ ER_SP_FETCH_NO_DATA ,"02000", "" }, +{ ER_SP_DUP_PARAM ,"42000", "" }, +{ ER_SP_DUP_VAR ,"42000", "" }, +{ ER_SP_DUP_COND ,"42000", "" }, +{ ER_SP_DUP_CURS ,"42000", "" }, +{ ER_SP_SUBSELECT_NYI ,"0A000", "" }, +{ ER_STMT_NOT_ALLOWED_IN_SF_OR_TRG ,"0A000", "" }, +{ ER_SP_VARCOND_AFTER_CURSHNDLR ,"42000", "" }, +{ ER_SP_CURSOR_AFTER_HANDLER ,"42000", "" }, +{ ER_SP_CASE_NOT_FOUND ,"20000", "" }, +{ ER_DIVISION_BY_ZERO ,"22012", "" }, +{ ER_ILLEGAL_VALUE_FOR_TYPE ,"22007", "" }, +{ ER_PROCACCESS_DENIED_ERROR ,"42000", "" }, +{ ER_XAER_NOTA ,"XAE04", "" }, +{ ER_XAER_INVAL ,"XAE05", "" }, +{ ER_XAER_RMFAIL ,"XAE07", "" }, +{ ER_XAER_OUTSIDE ,"XAE09", "" }, +{ ER_XAER_RMERR ,"XAE03", "" }, +{ ER_XA_RBROLLBACK ,"XA100", "" }, +{ ER_NONEXISTING_PROC_GRANT ,"42000", "" }, +{ ER_DATA_TOO_LONG ,"22001", "" }, +{ ER_SP_BAD_SQLSTATE ,"42000", "" }, +{ ER_CANT_CREATE_USER_WITH_GRANT ,"42000", "" }, +{ ER_SP_DUP_HANDLER ,"42000", "" }, +{ ER_SP_NOT_VAR_ARG ,"42000", "" }, +{ ER_SP_NO_RETSET ,"0A000", "" }, +{ ER_CANT_CREATE_GEOMETRY_OBJECT ,"22003", "" }, +{ ER_TOO_BIG_SCALE ,"42000", "S1009" }, +{ ER_TOO_BIG_PRECISION ,"42000", "S1009" }, +{ ER_M_BIGGER_THAN_D ,"42000", "S1009" }, +{ ER_TOO_LONG_BODY ,"42000", "S1009" }, +{ ER_TOO_BIG_DISPLAYWIDTH ,"42000", "S1009" }, +{ ER_XAER_DUPID ,"XAE08", "" }, +{ ER_DATETIME_FUNCTION_OVERFLOW ,"22008", "" }, +{ ER_ROW_IS_REFERENCED_2 ,"23000", "" }, +{ ER_NO_REFERENCED_ROW_2 ,"23000", "" }, +{ ER_SP_BAD_VAR_SHADOW ,"42000", "" }, +{ ER_SP_WRONG_NAME ,"42000", "" }, +{ ER_SP_NO_AGGREGATE ,"42000", "" }, +{ ER_MAX_PREPARED_STMT_COUNT_REACHED ,"42000", "" }, +{ ER_NON_GROUPING_FIELD_USED ,"42000", "" }, +{ ER_FOREIGN_DUPLICATE_KEY ,"23000", "S1009" }, +{ ER_CANT_CHANGE_TX_ISOLATION ,"25001", "" }, +{ ER_WRONG_PARAMCOUNT_TO_NATIVE_FCT ,"42000", "" }, +{ ER_WRONG_PARAMETERS_TO_NATIVE_FCT ,"42000", "" }, +{ ER_WRONG_PARAMETERS_TO_STORED_FCT ,"42000", "" }, +{ ER_DUP_ENTRY_WITH_KEY_NAME ,"23000", "S1009" }, +{ ER_XA_RBTIMEOUT ,"XA106", "" }, +{ ER_XA_RBDEADLOCK ,"XA102", "" }, +{ ER_FUNC_INEXISTENT_NAME_COLLISION ,"42000", "" }, diff --git a/EQ2/source/depends/mysql-5.1.45-winx64/include/sslopt-case.h b/EQ2/source/depends/mysql-5.1.45-winx64/include/sslopt-case.h new file mode 100644 index 000000000..adb9a2850 --- /dev/null +++ b/EQ2/source/depends/mysql-5.1.45-winx64/include/sslopt-case.h @@ -0,0 +1,28 @@ +/* Copyright (C) 2000 MySQL AB + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; version 2 of the License. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ + +#ifdef HAVE_OPENSSL + case OPT_SSL_KEY: + case OPT_SSL_CERT: + case OPT_SSL_CA: + case OPT_SSL_CAPATH: + case OPT_SSL_CIPHER: + /* + Enable use of SSL if we are using any ssl option + One can disable SSL later by using --skip-ssl or --ssl=0 + */ + opt_use_ssl= 1; + break; +#endif diff --git a/EQ2/source/depends/mysql-5.1.45-winx64/include/sslopt-longopts.h b/EQ2/source/depends/mysql-5.1.45-winx64/include/sslopt-longopts.h new file mode 100644 index 000000000..c76b5dcd2 --- /dev/null +++ b/EQ2/source/depends/mysql-5.1.45-winx64/include/sslopt-longopts.h @@ -0,0 +1,45 @@ +/* Copyright (C) 2000 MySQL AB + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; version 2 of the License. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ + +#ifdef HAVE_OPENSSL + + {"ssl", OPT_SSL_SSL, + "Enable SSL for connection (automatically enabled with other flags). Disable with --skip-ssl.", + (uchar **) &opt_use_ssl, (uchar **) &opt_use_ssl, 0, GET_BOOL, NO_ARG, 0, 0, 0, + 0, 0, 0}, + {"ssl-ca", OPT_SSL_CA, + "CA file in PEM format (check OpenSSL docs, implies --ssl).", + (uchar **) &opt_ssl_ca, (uchar **) &opt_ssl_ca, 0, GET_STR, REQUIRED_ARG, + 0, 0, 0, 0, 0, 0}, + {"ssl-capath", OPT_SSL_CAPATH, + "CA directory (check OpenSSL docs, implies --ssl).", + (uchar **) &opt_ssl_capath, (uchar **) &opt_ssl_capath, 0, GET_STR, REQUIRED_ARG, + 0, 0, 0, 0, 0, 0}, + {"ssl-cert", OPT_SSL_CERT, "X509 cert in PEM format (implies --ssl).", + (uchar **) &opt_ssl_cert, (uchar **) &opt_ssl_cert, 0, GET_STR, REQUIRED_ARG, + 0, 0, 0, 0, 0, 0}, + {"ssl-cipher", OPT_SSL_CIPHER, "SSL cipher to use (implies --ssl).", + (uchar **) &opt_ssl_cipher, (uchar **) &opt_ssl_cipher, 0, GET_STR, REQUIRED_ARG, + 0, 0, 0, 0, 0, 0}, + {"ssl-key", OPT_SSL_KEY, "X509 key in PEM format (implies --ssl).", + (uchar **) &opt_ssl_key, (uchar **) &opt_ssl_key, 0, GET_STR, REQUIRED_ARG, + 0, 0, 0, 0, 0, 0}, +#ifdef MYSQL_CLIENT + {"ssl-verify-server-cert", OPT_SSL_VERIFY_SERVER_CERT, + "Verify server's \"Common Name\" in its cert against hostname used when connecting. This option is disabled by default.", + (uchar **) &opt_ssl_verify_server_cert, (uchar **) &opt_ssl_verify_server_cert, + 0, GET_BOOL, NO_ARG, 0, 0, 0, 0, 0, 0}, +#endif +#endif /* HAVE_OPENSSL */ diff --git a/EQ2/source/depends/mysql-5.1.45-winx64/include/sslopt-vars.h b/EQ2/source/depends/mysql-5.1.45-winx64/include/sslopt-vars.h new file mode 100644 index 000000000..3369f870d --- /dev/null +++ b/EQ2/source/depends/mysql-5.1.45-winx64/include/sslopt-vars.h @@ -0,0 +1,31 @@ +/* Copyright (C) 2000 MySQL AB + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; version 2 of the License. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ + +#ifdef HAVE_OPENSSL +#ifdef SSL_VARS_NOT_STATIC +#define SSL_STATIC +#else +#define SSL_STATIC static +#endif +SSL_STATIC my_bool opt_use_ssl = 0; +SSL_STATIC char *opt_ssl_ca = 0; +SSL_STATIC char *opt_ssl_capath = 0; +SSL_STATIC char *opt_ssl_cert = 0; +SSL_STATIC char *opt_ssl_cipher = 0; +SSL_STATIC char *opt_ssl_key = 0; +#ifdef MYSQL_CLIENT +SSL_STATIC my_bool opt_ssl_verify_server_cert= 0; +#endif +#endif diff --git a/EQ2/source/depends/mysql-5.1.45-winx64/include/typelib.h b/EQ2/source/depends/mysql-5.1.45-winx64/include/typelib.h new file mode 100644 index 000000000..46106d1bd --- /dev/null +++ b/EQ2/source/depends/mysql-5.1.45-winx64/include/typelib.h @@ -0,0 +1,39 @@ +/* Copyright (C) 2000 MySQL AB + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; version 2 of the License. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ + + +#ifndef _typelib_h +#define _typelib_h + +#include "my_alloc.h" + +typedef struct st_typelib { /* Different types saved here */ + unsigned int count; /* How many types */ + const char *name; /* Name of typelib */ + const char **type_names; + unsigned int *type_lengths; +} TYPELIB; + +extern my_ulonglong find_typeset(char *x, TYPELIB *typelib,int *error_position); +extern int find_type_or_exit(const char *x, TYPELIB *typelib, + const char *option); +extern int find_type(char *x, const TYPELIB *typelib, unsigned int full_name); +extern void make_type(char *to,unsigned int nr,TYPELIB *typelib); +extern const char *get_type(TYPELIB *typelib,unsigned int nr); +extern TYPELIB *copy_typelib(MEM_ROOT *root, TYPELIB *from); + +extern TYPELIB sql_protocol_typelib; + +#endif /* _typelib_h */ diff --git a/EQ2/source/depends/mysql-5.1.45-winx64/lib/opt/libmysql.pdb b/EQ2/source/depends/mysql-5.1.45-winx64/lib/opt/libmysql.pdb new file mode 100644 index 000000000..c725c8034 Binary files /dev/null and b/EQ2/source/depends/mysql-5.1.45-winx64/lib/opt/libmysql.pdb differ diff --git a/EQ2/source/depends/mysql-5.1.45-winx64/lib/opt/mysqlclient.pdb b/EQ2/source/depends/mysql-5.1.45-winx64/lib/opt/mysqlclient.pdb new file mode 100644 index 000000000..057863559 Binary files /dev/null and b/EQ2/source/depends/mysql-5.1.45-winx64/lib/opt/mysqlclient.pdb differ diff --git a/EQ2/source/depends/mysql-5.1.45-winx64/lib/opt/mysys.pdb b/EQ2/source/depends/mysql-5.1.45-winx64/lib/opt/mysys.pdb new file mode 100644 index 000000000..1958e2323 Binary files /dev/null and b/EQ2/source/depends/mysql-5.1.45-winx64/lib/opt/mysys.pdb differ diff --git a/EQ2/source/depends/mysql-5.1.45-winx64/lib/opt/regex.pdb b/EQ2/source/depends/mysql-5.1.45-winx64/lib/opt/regex.pdb new file mode 100644 index 000000000..0c40d27bd Binary files /dev/null and b/EQ2/source/depends/mysql-5.1.45-winx64/lib/opt/regex.pdb differ diff --git a/EQ2/source/depends/mysql-5.1.45-winx64/lib/opt/strings.pdb b/EQ2/source/depends/mysql-5.1.45-winx64/lib/opt/strings.pdb new file mode 100644 index 000000000..0f1eeb74d Binary files /dev/null and b/EQ2/source/depends/mysql-5.1.45-winx64/lib/opt/strings.pdb differ diff --git a/EQ2/source/depends/mysql-5.1.45-winx64/lib/opt/zlib.pdb b/EQ2/source/depends/mysql-5.1.45-winx64/lib/opt/zlib.pdb new file mode 100644 index 000000000..a656e0e72 Binary files /dev/null and b/EQ2/source/depends/mysql-5.1.45-winx64/lib/opt/zlib.pdb differ diff --git a/EQ2/source/depends/zlib/include/zconf.h b/EQ2/source/depends/zlib/include/zconf.h new file mode 100644 index 000000000..03a9431c8 --- /dev/null +++ b/EQ2/source/depends/zlib/include/zconf.h @@ -0,0 +1,332 @@ +/* zconf.h -- configuration of the zlib compression library + * Copyright (C) 1995-2005 Jean-loup Gailly. + * For conditions of distribution and use, see copyright notice in zlib.h + */ + +/* @(#) $Id$ */ + +#ifndef ZCONF_H +#define ZCONF_H + +/* + * If you *really* need a unique prefix for all types and library functions, + * compile with -DZ_PREFIX. The "standard" zlib should be compiled without it. + */ +#ifdef Z_PREFIX +# define deflateInit_ z_deflateInit_ +# define deflate z_deflate +# define deflateEnd z_deflateEnd +# define inflateInit_ z_inflateInit_ +# define inflate z_inflate +# define inflateEnd z_inflateEnd +# define deflateInit2_ z_deflateInit2_ +# define deflateSetDictionary z_deflateSetDictionary +# define deflateCopy z_deflateCopy +# define deflateReset z_deflateReset +# define deflateParams z_deflateParams +# define deflateBound z_deflateBound +# define deflatePrime z_deflatePrime +# define inflateInit2_ z_inflateInit2_ +# define inflateSetDictionary z_inflateSetDictionary +# define inflateSync z_inflateSync +# define inflateSyncPoint z_inflateSyncPoint +# define inflateCopy z_inflateCopy +# define inflateReset z_inflateReset +# define inflateBack z_inflateBack +# define inflateBackEnd z_inflateBackEnd +# define compress z_compress +# define compress2 z_compress2 +# define compressBound z_compressBound +# define uncompress z_uncompress +# define adler32 z_adler32 +# define crc32 z_crc32 +# define get_crc_table z_get_crc_table +# define zError z_zError + +# define alloc_func z_alloc_func +# define free_func z_free_func +# define in_func z_in_func +# define out_func z_out_func +# define Byte z_Byte +# define uInt z_uInt +# define uLong z_uLong +# define Bytef z_Bytef +# define charf z_charf +# define intf z_intf +# define uIntf z_uIntf +# define uLongf z_uLongf +# define voidpf z_voidpf +# define voidp z_voidp +#endif + +#if defined(__MSDOS__) && !defined(MSDOS) +# define MSDOS +#endif +#if (defined(OS_2) || defined(__OS2__)) && !defined(OS2) +# define OS2 +#endif +#if defined(_WINDOWS) && !defined(WINDOWS) +# define WINDOWS +#endif +#if defined(_WIN32) || defined(_WIN32_WCE) || defined(__WIN32__) +# ifndef WIN32 +# define WIN32 +# endif +#endif +#if (defined(MSDOS) || defined(OS2) || defined(WINDOWS)) && !defined(WIN32) +# if !defined(__GNUC__) && !defined(__FLAT__) && !defined(__386__) +# ifndef SYS16BIT +# define SYS16BIT +# endif +# endif +#endif + +/* + * Compile with -DMAXSEG_64K if the alloc function cannot allocate more + * than 64k bytes at a time (needed on systems with 16-bit int). + */ +#ifdef SYS16BIT +# define MAXSEG_64K +#endif +#ifdef MSDOS +# define UNALIGNED_OK +#endif + +#ifdef __STDC_VERSION__ +# ifndef STDC +# define STDC +# endif +# if __STDC_VERSION__ >= 199901L +# ifndef STDC99 +# define STDC99 +# endif +# endif +#endif +#if !defined(STDC) && (defined(__STDC__) || defined(__cplusplus)) +# define STDC +#endif +#if !defined(STDC) && (defined(__GNUC__) || defined(__BORLANDC__)) +# define STDC +#endif +#if !defined(STDC) && (defined(MSDOS) || defined(WINDOWS) || defined(WIN32)) +# define STDC +#endif +#if !defined(STDC) && (defined(OS2) || defined(__HOS_AIX__)) +# define STDC +#endif + +#if defined(__OS400__) && !defined(STDC) /* iSeries (formerly AS/400). */ +# define STDC +#endif + +#ifndef STDC +# ifndef const /* cannot use !defined(STDC) && !defined(const) on Mac */ +# define const /* note: need a more gentle solution here */ +# endif +#endif + +/* Some Mac compilers merge all .h files incorrectly: */ +#if defined(__MWERKS__)||defined(applec)||defined(THINK_C)||defined(__SC__) +# define NO_DUMMY_DECL +#endif + +/* Maximum value for memLevel in deflateInit2 */ +#ifndef MAX_MEM_LEVEL +# ifdef MAXSEG_64K +# define MAX_MEM_LEVEL 8 +# else +# define MAX_MEM_LEVEL 9 +# endif +#endif + +/* Maximum value for windowBits in deflateInit2 and inflateInit2. + * WARNING: reducing MAX_WBITS makes minigzip unable to extract .gz files + * created by gzip. (Files created by minigzip can still be extracted by + * gzip.) + */ +#ifndef MAX_WBITS +# define MAX_WBITS 15 /* 32K LZ77 window */ +#endif + +/* The memory requirements for deflate are (in bytes): + (1 << (windowBits+2)) + (1 << (memLevel+9)) + that is: 128K for windowBits=15 + 128K for memLevel = 8 (default values) + plus a few kilobytes for small objects. For example, if you want to reduce + the default memory requirements from 256K to 128K, compile with + make CFLAGS="-O -DMAX_WBITS=14 -DMAX_MEM_LEVEL=7" + Of course this will generally degrade compression (there's no free lunch). + + The memory requirements for inflate are (in bytes) 1 << windowBits + that is, 32K for windowBits=15 (default value) plus a few kilobytes + for small objects. +*/ + + /* Type declarations */ + +#ifndef OF /* function prototypes */ +# ifdef STDC +# define OF(args) args +# else +# define OF(args) () +# endif +#endif + +/* The following definitions for FAR are needed only for MSDOS mixed + * model programming (small or medium model with some far allocations). + * This was tested only with MSC; for other MSDOS compilers you may have + * to define NO_MEMCPY in zutil.h. If you don't need the mixed model, + * just define FAR to be empty. + */ +#ifdef SYS16BIT +# if defined(M_I86SM) || defined(M_I86MM) + /* MSC small or medium model */ +# define SMALL_MEDIUM +# ifdef _MSC_VER +# define FAR _far +# else +# define FAR far +# endif +# endif +# if (defined(__SMALL__) || defined(__MEDIUM__)) + /* Turbo C small or medium model */ +# define SMALL_MEDIUM +# ifdef __BORLANDC__ +# define FAR _far +# else +# define FAR far +# endif +# endif +#endif + +#if defined(WINDOWS) || defined(WIN32) + /* If building or using zlib as a DLL, define ZLIB_DLL. + * This is not mandatory, but it offers a little performance increase. + */ +# ifdef ZLIB_DLL +# if defined(WIN32) && (!defined(__BORLANDC__) || (__BORLANDC__ >= 0x500)) +# ifdef ZLIB_INTERNAL +# define ZEXTERN extern __declspec(dllexport) +# else +# define ZEXTERN extern __declspec(dllimport) +# endif +# endif +# endif /* ZLIB_DLL */ + /* If building or using zlib with the WINAPI/WINAPIV calling convention, + * define ZLIB_WINAPI. + * Caution: the standard ZLIB1.DLL is NOT compiled using ZLIB_WINAPI. + */ +# ifdef ZLIB_WINAPI +# ifdef FAR +# undef FAR +# endif +# include + /* No need for _export, use ZLIB.DEF instead. */ + /* For complete Windows compatibility, use WINAPI, not __stdcall. */ +# define ZEXPORT WINAPI +# ifdef WIN32 +# define ZEXPORTVA WINAPIV +# else +# define ZEXPORTVA FAR CDECL +# endif +# endif +#endif + +#if defined (__BEOS__) +# ifdef ZLIB_DLL +# ifdef ZLIB_INTERNAL +# define ZEXPORT __declspec(dllexport) +# define ZEXPORTVA __declspec(dllexport) +# else +# define ZEXPORT __declspec(dllimport) +# define ZEXPORTVA __declspec(dllimport) +# endif +# endif +#endif + +#ifndef ZEXTERN +# define ZEXTERN extern +#endif +#ifndef ZEXPORT +# define ZEXPORT +#endif +#ifndef ZEXPORTVA +# define ZEXPORTVA +#endif + +#ifndef FAR +# define FAR +#endif + +#if !defined(__MACTYPES__) +typedef unsigned char Byte; /* 8 bits */ +#endif +typedef unsigned int uInt; /* 16 bits or more */ +typedef unsigned long uLong; /* 32 bits or more */ + +#ifdef SMALL_MEDIUM + /* Borland C/C++ and some old MSC versions ignore FAR inside typedef */ +# define Bytef Byte FAR +#else + typedef Byte FAR Bytef; +#endif +typedef char FAR charf; +typedef int FAR intf; +typedef uInt FAR uIntf; +typedef uLong FAR uLongf; + +#ifdef STDC + typedef void const *voidpc; + typedef void FAR *voidpf; + typedef void *voidp; +#else + typedef Byte const *voidpc; + typedef Byte FAR *voidpf; + typedef Byte *voidp; +#endif + +#if 0 /* HAVE_UNISTD_H -- this line is updated by ./configure */ +# include /* for off_t */ +# include /* for SEEK_* and off_t */ +# ifdef VMS +# include /* for off_t */ +# endif +# define z_off_t off_t +#endif +#ifndef SEEK_SET +# define SEEK_SET 0 /* Seek from beginning of file. */ +# define SEEK_CUR 1 /* Seek from current position. */ +# define SEEK_END 2 /* Set file pointer to EOF plus "offset" */ +#endif +#ifndef z_off_t +# define z_off_t long +#endif + +#if defined(__OS400__) +# define NO_vsnprintf +#endif + +#if defined(__MVS__) +# define NO_vsnprintf +# ifdef FAR +# undef FAR +# endif +#endif + +/* MVS linker does not support external names larger than 8 bytes */ +#if defined(__MVS__) +# pragma map(deflateInit_,"DEIN") +# pragma map(deflateInit2_,"DEIN2") +# pragma map(deflateEnd,"DEEND") +# pragma map(deflateBound,"DEBND") +# pragma map(inflateInit_,"ININ") +# pragma map(inflateInit2_,"ININ2") +# pragma map(inflateEnd,"INEND") +# pragma map(inflateSync,"INSY") +# pragma map(inflateSetDictionary,"INSEDI") +# pragma map(compressBound,"CMBND") +# pragma map(inflate_table,"INTABL") +# pragma map(inflate_fast,"INFA") +# pragma map(inflate_copyright,"INCOPY") +#endif + +#endif /* ZCONF_H */ diff --git a/EQ2/source/depends/zlib/include/zlib.h b/EQ2/source/depends/zlib/include/zlib.h new file mode 100644 index 000000000..022817927 --- /dev/null +++ b/EQ2/source/depends/zlib/include/zlib.h @@ -0,0 +1,1357 @@ +/* zlib.h -- interface of the 'zlib' general purpose compression library + version 1.2.3, July 18th, 2005 + + Copyright (C) 1995-2005 Jean-loup Gailly and Mark Adler + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would be + appreciated but is not required. + 2. Altered source versions must be plainly marked as such, and must not be + misrepresented as being the original software. + 3. This notice may not be removed or altered from any source distribution. + + Jean-loup Gailly Mark Adler + jloup@gzip.org madler@alumni.caltech.edu + + + The data format used by the zlib library is described by RFCs (Request for + Comments) 1950 to 1952 in the files http://www.ietf.org/rfc/rfc1950.txt + (zlib format), rfc1951.txt (deflate format) and rfc1952.txt (gzip format). +*/ + +#ifndef ZLIB_H +#define ZLIB_H + +#include "zconf.h" + +#ifdef __cplusplus +extern "C" { +#endif + +#define ZLIB_VERSION "1.2.3" +#define ZLIB_VERNUM 0x1230 + +/* + The 'zlib' compression library provides in-memory compression and + decompression functions, including integrity checks of the uncompressed + data. This version of the library supports only one compression method + (deflation) but other algorithms will be added later and will have the same + stream interface. + + Compression can be done in a single step if the buffers are large + enough (for example if an input file is mmap'ed), or can be done by + repeated calls of the compression function. In the latter case, the + application must provide more input and/or consume the output + (providing more output space) before each call. + + The compressed data format used by default by the in-memory functions is + the zlib format, which is a zlib wrapper documented in RFC 1950, wrapped + around a deflate stream, which is itself documented in RFC 1951. + + The library also supports reading and writing files in gzip (.gz) format + with an interface similar to that of stdio using the functions that start + with "gz". The gzip format is different from the zlib format. gzip is a + gzip wrapper, documented in RFC 1952, wrapped around a deflate stream. + + This library can optionally read and write gzip streams in memory as well. + + The zlib format was designed to be compact and fast for use in memory + and on communications channels. The gzip format was designed for single- + file compression on file systems, has a larger header than zlib to maintain + directory information, and uses a different, slower check method than zlib. + + The library does not install any signal handler. The decoder checks + the consistency of the compressed data, so the library should never + crash even in case of corrupted input. +*/ + +typedef voidpf (*alloc_func) OF((voidpf opaque, uInt items, uInt size)); +typedef void (*free_func) OF((voidpf opaque, voidpf address)); + +struct internal_state; + +typedef struct z_stream_s { + Bytef *next_in; /* next input byte */ + uInt avail_in; /* number of bytes available at next_in */ + uLong total_in; /* total nb of input bytes read so far */ + + Bytef *next_out; /* next output byte should be put there */ + uInt avail_out; /* remaining free space at next_out */ + uLong total_out; /* total nb of bytes output so far */ + + char *msg; /* last error message, NULL if no error */ + struct internal_state FAR *state; /* not visible by applications */ + + alloc_func zalloc; /* used to allocate the internal state */ + free_func zfree; /* used to free the internal state */ + voidpf opaque; /* private data object passed to zalloc and zfree */ + + int data_type; /* best guess about the data type: binary or text */ + uLong adler; /* adler32 value of the uncompressed data */ + uLong reserved; /* reserved for future use */ +} z_stream; + +typedef z_stream FAR *z_streamp; + +/* + gzip header information passed to and from zlib routines. See RFC 1952 + for more details on the meanings of these fields. +*/ +typedef struct gz_header_s { + int text; /* true if compressed data believed to be text */ + uLong time; /* modification time */ + int xflags; /* extra flags (not used when writing a gzip file) */ + int os; /* operating system */ + Bytef *extra; /* pointer to extra field or Z_NULL if none */ + uInt extra_len; /* extra field length (valid if extra != Z_NULL) */ + uInt extra_max; /* space at extra (only when reading header) */ + Bytef *name; /* pointer to zero-terminated file name or Z_NULL */ + uInt name_max; /* space at name (only when reading header) */ + Bytef *comment; /* pointer to zero-terminated comment or Z_NULL */ + uInt comm_max; /* space at comment (only when reading header) */ + int hcrc; /* true if there was or will be a header crc */ + int done; /* true when done reading gzip header (not used + when writing a gzip file) */ +} gz_header; + +typedef gz_header FAR *gz_headerp; + +/* + The application must update next_in and avail_in when avail_in has + dropped to zero. It must update next_out and avail_out when avail_out + has dropped to zero. The application must initialize zalloc, zfree and + opaque before calling the init function. All other fields are set by the + compression library and must not be updated by the application. + + The opaque value provided by the application will be passed as the first + parameter for calls of zalloc and zfree. This can be useful for custom + memory management. The compression library attaches no meaning to the + opaque value. + + zalloc must return Z_NULL if there is not enough memory for the object. + If zlib is used in a multi-threaded application, zalloc and zfree must be + thread safe. + + On 16-bit systems, the functions zalloc and zfree must be able to allocate + exactly 65536 bytes, but will not be required to allocate more than this + if the symbol MAXSEG_64K is defined (see zconf.h). WARNING: On MSDOS, + pointers returned by zalloc for objects of exactly 65536 bytes *must* + have their offset normalized to zero. The default allocation function + provided by this library ensures this (see zutil.c). To reduce memory + requirements and avoid any allocation of 64K objects, at the expense of + compression ratio, compile the library with -DMAX_WBITS=14 (see zconf.h). + + The fields total_in and total_out can be used for statistics or + progress reports. After compression, total_in holds the total size of + the uncompressed data and may be saved for use in the decompressor + (particularly if the decompressor wants to decompress everything in + a single step). +*/ + + /* constants */ + +#define Z_NO_FLUSH 0 +#define Z_PARTIAL_FLUSH 1 /* will be removed, use Z_SYNC_FLUSH instead */ +#define Z_SYNC_FLUSH 2 +#define Z_FULL_FLUSH 3 +#define Z_FINISH 4 +#define Z_BLOCK 5 +/* Allowed flush values; see deflate() and inflate() below for details */ + +#define Z_OK 0 +#define Z_STREAM_END 1 +#define Z_NEED_DICT 2 +#define Z_ERRNO (-1) +#define Z_STREAM_ERROR (-2) +#define Z_DATA_ERROR (-3) +#define Z_MEM_ERROR (-4) +#define Z_BUF_ERROR (-5) +#define Z_VERSION_ERROR (-6) +/* Return codes for the compression/decompression functions. Negative + * values are errors, positive values are used for special but normal events. + */ + +#define Z_NO_COMPRESSION 0 +#define Z_BEST_SPEED 1 +#define Z_BEST_COMPRESSION 9 +#define Z_DEFAULT_COMPRESSION (-1) +/* compression levels */ + +#define Z_FILTERED 1 +#define Z_HUFFMAN_ONLY 2 +#define Z_RLE 3 +#define Z_FIXED 4 +#define Z_DEFAULT_STRATEGY 0 +/* compression strategy; see deflateInit2() below for details */ + +#define Z_BINARY 0 +#define Z_TEXT 1 +#define Z_ASCII Z_TEXT /* for compatibility with 1.2.2 and earlier */ +#define Z_UNKNOWN 2 +/* Possible values of the data_type field (though see inflate()) */ + +#define Z_DEFLATED 8 +/* The deflate compression method (the only one supported in this version) */ + +#define Z_NULL 0 /* for initializing zalloc, zfree, opaque */ + +#define zlib_version zlibVersion() +/* for compatibility with versions < 1.0.2 */ + + /* basic functions */ + +ZEXTERN const char * ZEXPORT zlibVersion OF((void)); +/* The application can compare zlibVersion and ZLIB_VERSION for consistency. + If the first character differs, the library code actually used is + not compatible with the zlib.h header file used by the application. + This check is automatically made by deflateInit and inflateInit. + */ + +/* +ZEXTERN int ZEXPORT deflateInit OF((z_streamp strm, int level)); + + Initializes the internal stream state for compression. The fields + zalloc, zfree and opaque must be initialized before by the caller. + If zalloc and zfree are set to Z_NULL, deflateInit updates them to + use default allocation functions. + + The compression level must be Z_DEFAULT_COMPRESSION, or between 0 and 9: + 1 gives best speed, 9 gives best compression, 0 gives no compression at + all (the input data is simply copied a block at a time). + Z_DEFAULT_COMPRESSION requests a default compromise between speed and + compression (currently equivalent to level 6). + + deflateInit returns Z_OK if success, Z_MEM_ERROR if there was not + enough memory, Z_STREAM_ERROR if level is not a valid compression level, + Z_VERSION_ERROR if the zlib library version (zlib_version) is incompatible + with the version assumed by the caller (ZLIB_VERSION). + msg is set to null if there is no error message. deflateInit does not + perform any compression: this will be done by deflate(). +*/ + + +ZEXTERN int ZEXPORT deflate OF((z_streamp strm, int flush)); +/* + deflate compresses as much data as possible, and stops when the input + buffer becomes empty or the output buffer becomes full. It may introduce some + output latency (reading input without producing any output) except when + forced to flush. + + The detailed semantics are as follows. deflate performs one or both of the + following actions: + + - Compress more input starting at next_in and update next_in and avail_in + accordingly. If not all input can be processed (because there is not + enough room in the output buffer), next_in and avail_in are updated and + processing will resume at this point for the next call of deflate(). + + - Provide more output starting at next_out and update next_out and avail_out + accordingly. This action is forced if the parameter flush is non zero. + Forcing flush frequently degrades the compression ratio, so this parameter + should be set only when necessary (in interactive applications). + Some output may be provided even if flush is not set. + + Before the call of deflate(), the application should ensure that at least + one of the actions is possible, by providing more input and/or consuming + more output, and updating avail_in or avail_out accordingly; avail_out + should never be zero before the call. The application can consume the + compressed output when it wants, for example when the output buffer is full + (avail_out == 0), or after each call of deflate(). If deflate returns Z_OK + and with zero avail_out, it must be called again after making room in the + output buffer because there might be more output pending. + + Normally the parameter flush is set to Z_NO_FLUSH, which allows deflate to + decide how much data to accumualte before producing output, in order to + maximize compression. + + If the parameter flush is set to Z_SYNC_FLUSH, all pending output is + flushed to the output buffer and the output is aligned on a byte boundary, so + that the decompressor can get all input data available so far. (In particular + avail_in is zero after the call if enough output space has been provided + before the call.) Flushing may degrade compression for some compression + algorithms and so it should be used only when necessary. + + If flush is set to Z_FULL_FLUSH, all output is flushed as with + Z_SYNC_FLUSH, and the compression state is reset so that decompression can + restart from this point if previous compressed data has been damaged or if + random access is desired. Using Z_FULL_FLUSH too often can seriously degrade + compression. + + If deflate returns with avail_out == 0, this function must be called again + with the same value of the flush parameter and more output space (updated + avail_out), until the flush is complete (deflate returns with non-zero + avail_out). In the case of a Z_FULL_FLUSH or Z_SYNC_FLUSH, make sure that + avail_out is greater than six to avoid repeated flush markers due to + avail_out == 0 on return. + + If the parameter flush is set to Z_FINISH, pending input is processed, + pending output is flushed and deflate returns with Z_STREAM_END if there + was enough output space; if deflate returns with Z_OK, this function must be + called again with Z_FINISH and more output space (updated avail_out) but no + more input data, until it returns with Z_STREAM_END or an error. After + deflate has returned Z_STREAM_END, the only possible operations on the + stream are deflateReset or deflateEnd. + + Z_FINISH can be used immediately after deflateInit if all the compression + is to be done in a single step. In this case, avail_out must be at least + the value returned by deflateBound (see below). If deflate does not return + Z_STREAM_END, then it must be called again as described above. + + deflate() sets strm->adler to the adler32 checksum of all input read + so far (that is, total_in bytes). + + deflate() may update strm->data_type if it can make a good guess about + the input data type (Z_BINARY or Z_TEXT). In doubt, the data is considered + binary. This field is only for information purposes and does not affect + the compression algorithm in any manner. + + deflate() returns Z_OK if some progress has been made (more input + processed or more output produced), Z_STREAM_END if all input has been + consumed and all output has been produced (only when flush is set to + Z_FINISH), Z_STREAM_ERROR if the stream state was inconsistent (for example + if next_in or next_out was NULL), Z_BUF_ERROR if no progress is possible + (for example avail_in or avail_out was zero). Note that Z_BUF_ERROR is not + fatal, and deflate() can be called again with more input and more output + space to continue compressing. +*/ + + +ZEXTERN int ZEXPORT deflateEnd OF((z_streamp strm)); +/* + All dynamically allocated data structures for this stream are freed. + This function discards any unprocessed input and does not flush any + pending output. + + deflateEnd returns Z_OK if success, Z_STREAM_ERROR if the + stream state was inconsistent, Z_DATA_ERROR if the stream was freed + prematurely (some input or output was discarded). In the error case, + msg may be set but then points to a static string (which must not be + deallocated). +*/ + + +/* +ZEXTERN int ZEXPORT inflateInit OF((z_streamp strm)); + + Initializes the internal stream state for decompression. The fields + next_in, avail_in, zalloc, zfree and opaque must be initialized before by + the caller. If next_in is not Z_NULL and avail_in is large enough (the exact + value depends on the compression method), inflateInit determines the + compression method from the zlib header and allocates all data structures + accordingly; otherwise the allocation will be deferred to the first call of + inflate. If zalloc and zfree are set to Z_NULL, inflateInit updates them to + use default allocation functions. + + inflateInit returns Z_OK if success, Z_MEM_ERROR if there was not enough + memory, Z_VERSION_ERROR if the zlib library version is incompatible with the + version assumed by the caller. msg is set to null if there is no error + message. inflateInit does not perform any decompression apart from reading + the zlib header if present: this will be done by inflate(). (So next_in and + avail_in may be modified, but next_out and avail_out are unchanged.) +*/ + + +ZEXTERN int ZEXPORT inflate OF((z_streamp strm, int flush)); +/* + inflate decompresses as much data as possible, and stops when the input + buffer becomes empty or the output buffer becomes full. It may introduce + some output latency (reading input without producing any output) except when + forced to flush. + + The detailed semantics are as follows. inflate performs one or both of the + following actions: + + - Decompress more input starting at next_in and update next_in and avail_in + accordingly. If not all input can be processed (because there is not + enough room in the output buffer), next_in is updated and processing + will resume at this point for the next call of inflate(). + + - Provide more output starting at next_out and update next_out and avail_out + accordingly. inflate() provides as much output as possible, until there + is no more input data or no more space in the output buffer (see below + about the flush parameter). + + Before the call of inflate(), the application should ensure that at least + one of the actions is possible, by providing more input and/or consuming + more output, and updating the next_* and avail_* values accordingly. + The application can consume the uncompressed output when it wants, for + example when the output buffer is full (avail_out == 0), or after each + call of inflate(). If inflate returns Z_OK and with zero avail_out, it + must be called again after making room in the output buffer because there + might be more output pending. + + The flush parameter of inflate() can be Z_NO_FLUSH, Z_SYNC_FLUSH, + Z_FINISH, or Z_BLOCK. Z_SYNC_FLUSH requests that inflate() flush as much + output as possible to the output buffer. Z_BLOCK requests that inflate() stop + if and when it gets to the next deflate block boundary. When decoding the + zlib or gzip format, this will cause inflate() to return immediately after + the header and before the first block. When doing a raw inflate, inflate() + will go ahead and process the first block, and will return when it gets to + the end of that block, or when it runs out of data. + + The Z_BLOCK option assists in appending to or combining deflate streams. + Also to assist in this, on return inflate() will set strm->data_type to the + number of unused bits in the last byte taken from strm->next_in, plus 64 + if inflate() is currently decoding the last block in the deflate stream, + plus 128 if inflate() returned immediately after decoding an end-of-block + code or decoding the complete header up to just before the first byte of the + deflate stream. The end-of-block will not be indicated until all of the + uncompressed data from that block has been written to strm->next_out. The + number of unused bits may in general be greater than seven, except when + bit 7 of data_type is set, in which case the number of unused bits will be + less than eight. + + inflate() should normally be called until it returns Z_STREAM_END or an + error. However if all decompression is to be performed in a single step + (a single call of inflate), the parameter flush should be set to + Z_FINISH. In this case all pending input is processed and all pending + output is flushed; avail_out must be large enough to hold all the + uncompressed data. (The size of the uncompressed data may have been saved + by the compressor for this purpose.) The next operation on this stream must + be inflateEnd to deallocate the decompression state. The use of Z_FINISH + is never required, but can be used to inform inflate that a faster approach + may be used for the single inflate() call. + + In this implementation, inflate() always flushes as much output as + possible to the output buffer, and always uses the faster approach on the + first call. So the only effect of the flush parameter in this implementation + is on the return value of inflate(), as noted below, or when it returns early + because Z_BLOCK is used. + + If a preset dictionary is needed after this call (see inflateSetDictionary + below), inflate sets strm->adler to the adler32 checksum of the dictionary + chosen by the compressor and returns Z_NEED_DICT; otherwise it sets + strm->adler to the adler32 checksum of all output produced so far (that is, + total_out bytes) and returns Z_OK, Z_STREAM_END or an error code as described + below. At the end of the stream, inflate() checks that its computed adler32 + checksum is equal to that saved by the compressor and returns Z_STREAM_END + only if the checksum is correct. + + inflate() will decompress and check either zlib-wrapped or gzip-wrapped + deflate data. The header type is detected automatically. Any information + contained in the gzip header is not retained, so applications that need that + information should instead use raw inflate, see inflateInit2() below, or + inflateBack() and perform their own processing of the gzip header and + trailer. + + inflate() returns Z_OK if some progress has been made (more input processed + or more output produced), Z_STREAM_END if the end of the compressed data has + been reached and all uncompressed output has been produced, Z_NEED_DICT if a + preset dictionary is needed at this point, Z_DATA_ERROR if the input data was + corrupted (input stream not conforming to the zlib format or incorrect check + value), Z_STREAM_ERROR if the stream structure was inconsistent (for example + if next_in or next_out was NULL), Z_MEM_ERROR if there was not enough memory, + Z_BUF_ERROR if no progress is possible or if there was not enough room in the + output buffer when Z_FINISH is used. Note that Z_BUF_ERROR is not fatal, and + inflate() can be called again with more input and more output space to + continue decompressing. If Z_DATA_ERROR is returned, the application may then + call inflateSync() to look for a good compression block if a partial recovery + of the data is desired. +*/ + + +ZEXTERN int ZEXPORT inflateEnd OF((z_streamp strm)); +/* + All dynamically allocated data structures for this stream are freed. + This function discards any unprocessed input and does not flush any + pending output. + + inflateEnd returns Z_OK if success, Z_STREAM_ERROR if the stream state + was inconsistent. In the error case, msg may be set but then points to a + static string (which must not be deallocated). +*/ + + /* Advanced functions */ + +/* + The following functions are needed only in some special applications. +*/ + +/* +ZEXTERN int ZEXPORT deflateInit2 OF((z_streamp strm, + int level, + int method, + int windowBits, + int memLevel, + int strategy)); + + This is another version of deflateInit with more compression options. The + fields next_in, zalloc, zfree and opaque must be initialized before by + the caller. + + The method parameter is the compression method. It must be Z_DEFLATED in + this version of the library. + + The windowBits parameter is the base two logarithm of the window size + (the size of the history buffer). It should be in the range 8..15 for this + version of the library. Larger values of this parameter result in better + compression at the expense of memory usage. The default value is 15 if + deflateInit is used instead. + + windowBits can also be -8..-15 for raw deflate. In this case, -windowBits + determines the window size. deflate() will then generate raw deflate data + with no zlib header or trailer, and will not compute an adler32 check value. + + windowBits can also be greater than 15 for optional gzip encoding. Add + 16 to windowBits to write a simple gzip header and trailer around the + compressed data instead of a zlib wrapper. The gzip header will have no + file name, no extra data, no comment, no modification time (set to zero), + no header crc, and the operating system will be set to 255 (unknown). If a + gzip stream is being written, strm->adler is a crc32 instead of an adler32. + + The memLevel parameter specifies how much memory should be allocated + for the internal compression state. memLevel=1 uses minimum memory but + is slow and reduces compression ratio; memLevel=9 uses maximum memory + for optimal speed. The default value is 8. See zconf.h for total memory + usage as a function of windowBits and memLevel. + + The strategy parameter is used to tune the compression algorithm. Use the + value Z_DEFAULT_STRATEGY for normal data, Z_FILTERED for data produced by a + filter (or predictor), Z_HUFFMAN_ONLY to force Huffman encoding only (no + string match), or Z_RLE to limit match distances to one (run-length + encoding). Filtered data consists mostly of small values with a somewhat + random distribution. In this case, the compression algorithm is tuned to + compress them better. The effect of Z_FILTERED is to force more Huffman + coding and less string matching; it is somewhat intermediate between + Z_DEFAULT and Z_HUFFMAN_ONLY. Z_RLE is designed to be almost as fast as + Z_HUFFMAN_ONLY, but give better compression for PNG image data. The strategy + parameter only affects the compression ratio but not the correctness of the + compressed output even if it is not set appropriately. Z_FIXED prevents the + use of dynamic Huffman codes, allowing for a simpler decoder for special + applications. + + deflateInit2 returns Z_OK if success, Z_MEM_ERROR if there was not enough + memory, Z_STREAM_ERROR if a parameter is invalid (such as an invalid + method). msg is set to null if there is no error message. deflateInit2 does + not perform any compression: this will be done by deflate(). +*/ + +ZEXTERN int ZEXPORT deflateSetDictionary OF((z_streamp strm, + const Bytef *dictionary, + uInt dictLength)); +/* + Initializes the compression dictionary from the given byte sequence + without producing any compressed output. This function must be called + immediately after deflateInit, deflateInit2 or deflateReset, before any + call of deflate. The compressor and decompressor must use exactly the same + dictionary (see inflateSetDictionary). + + The dictionary should consist of strings (byte sequences) that are likely + to be encountered later in the data to be compressed, with the most commonly + used strings preferably put towards the end of the dictionary. Using a + dictionary is most useful when the data to be compressed is short and can be + predicted with good accuracy; the data can then be compressed better than + with the default empty dictionary. + + Depending on the size of the compression data structures selected by + deflateInit or deflateInit2, a part of the dictionary may in effect be + discarded, for example if the dictionary is larger than the window size in + deflate or deflate2. Thus the strings most likely to be useful should be + put at the end of the dictionary, not at the front. In addition, the + current implementation of deflate will use at most the window size minus + 262 bytes of the provided dictionary. + + Upon return of this function, strm->adler is set to the adler32 value + of the dictionary; the decompressor may later use this value to determine + which dictionary has been used by the compressor. (The adler32 value + applies to the whole dictionary even if only a subset of the dictionary is + actually used by the compressor.) If a raw deflate was requested, then the + adler32 value is not computed and strm->adler is not set. + + deflateSetDictionary returns Z_OK if success, or Z_STREAM_ERROR if a + parameter is invalid (such as NULL dictionary) or the stream state is + inconsistent (for example if deflate has already been called for this stream + or if the compression method is bsort). deflateSetDictionary does not + perform any compression: this will be done by deflate(). +*/ + +ZEXTERN int ZEXPORT deflateCopy OF((z_streamp dest, + z_streamp source)); +/* + Sets the destination stream as a complete copy of the source stream. + + This function can be useful when several compression strategies will be + tried, for example when there are several ways of pre-processing the input + data with a filter. The streams that will be discarded should then be freed + by calling deflateEnd. Note that deflateCopy duplicates the internal + compression state which can be quite large, so this strategy is slow and + can consume lots of memory. + + deflateCopy returns Z_OK if success, Z_MEM_ERROR if there was not + enough memory, Z_STREAM_ERROR if the source stream state was inconsistent + (such as zalloc being NULL). msg is left unchanged in both source and + destination. +*/ + +ZEXTERN int ZEXPORT deflateReset OF((z_streamp strm)); +/* + This function is equivalent to deflateEnd followed by deflateInit, + but does not free and reallocate all the internal compression state. + The stream will keep the same compression level and any other attributes + that may have been set by deflateInit2. + + deflateReset returns Z_OK if success, or Z_STREAM_ERROR if the source + stream state was inconsistent (such as zalloc or state being NULL). +*/ + +ZEXTERN int ZEXPORT deflateParams OF((z_streamp strm, + int level, + int strategy)); +/* + Dynamically update the compression level and compression strategy. The + interpretation of level and strategy is as in deflateInit2. This can be + used to switch between compression and straight copy of the input data, or + to switch to a different kind of input data requiring a different + strategy. If the compression level is changed, the input available so far + is compressed with the old level (and may be flushed); the new level will + take effect only at the next call of deflate(). + + Before the call of deflateParams, the stream state must be set as for + a call of deflate(), since the currently available input may have to + be compressed and flushed. In particular, strm->avail_out must be non-zero. + + deflateParams returns Z_OK if success, Z_STREAM_ERROR if the source + stream state was inconsistent or if a parameter was invalid, Z_BUF_ERROR + if strm->avail_out was zero. +*/ + +ZEXTERN int ZEXPORT deflateTune OF((z_streamp strm, + int good_length, + int max_lazy, + int nice_length, + int max_chain)); +/* + Fine tune deflate's internal compression parameters. This should only be + used by someone who understands the algorithm used by zlib's deflate for + searching for the best matching string, and even then only by the most + fanatic optimizer trying to squeeze out the last compressed bit for their + specific input data. Read the deflate.c source code for the meaning of the + max_lazy, good_length, nice_length, and max_chain parameters. + + deflateTune() can be called after deflateInit() or deflateInit2(), and + returns Z_OK on success, or Z_STREAM_ERROR for an invalid deflate stream. + */ + +ZEXTERN uLong ZEXPORT deflateBound OF((z_streamp strm, + uLong sourceLen)); +/* + deflateBound() returns an upper bound on the compressed size after + deflation of sourceLen bytes. It must be called after deflateInit() + or deflateInit2(). This would be used to allocate an output buffer + for deflation in a single pass, and so would be called before deflate(). +*/ + +ZEXTERN int ZEXPORT deflatePrime OF((z_streamp strm, + int bits, + int value)); +/* + deflatePrime() inserts bits in the deflate output stream. The intent + is that this function is used to start off the deflate output with the + bits leftover from a previous deflate stream when appending to it. As such, + this function can only be used for raw deflate, and must be used before the + first deflate() call after a deflateInit2() or deflateReset(). bits must be + less than or equal to 16, and that many of the least significant bits of + value will be inserted in the output. + + deflatePrime returns Z_OK if success, or Z_STREAM_ERROR if the source + stream state was inconsistent. +*/ + +ZEXTERN int ZEXPORT deflateSetHeader OF((z_streamp strm, + gz_headerp head)); +/* + deflateSetHeader() provides gzip header information for when a gzip + stream is requested by deflateInit2(). deflateSetHeader() may be called + after deflateInit2() or deflateReset() and before the first call of + deflate(). The text, time, os, extra field, name, and comment information + in the provided gz_header structure are written to the gzip header (xflag is + ignored -- the extra flags are set according to the compression level). The + caller must assure that, if not Z_NULL, name and comment are terminated with + a zero byte, and that if extra is not Z_NULL, that extra_len bytes are + available there. If hcrc is true, a gzip header crc is included. Note that + the current versions of the command-line version of gzip (up through version + 1.3.x) do not support header crc's, and will report that it is a "multi-part + gzip file" and give up. + + If deflateSetHeader is not used, the default gzip header has text false, + the time set to zero, and os set to 255, with no extra, name, or comment + fields. The gzip header is returned to the default state by deflateReset(). + + deflateSetHeader returns Z_OK if success, or Z_STREAM_ERROR if the source + stream state was inconsistent. +*/ + +/* +ZEXTERN int ZEXPORT inflateInit2 OF((z_streamp strm, + int windowBits)); + + This is another version of inflateInit with an extra parameter. The + fields next_in, avail_in, zalloc, zfree and opaque must be initialized + before by the caller. + + The windowBits parameter is the base two logarithm of the maximum window + size (the size of the history buffer). It should be in the range 8..15 for + this version of the library. The default value is 15 if inflateInit is used + instead. windowBits must be greater than or equal to the windowBits value + provided to deflateInit2() while compressing, or it must be equal to 15 if + deflateInit2() was not used. If a compressed stream with a larger window + size is given as input, inflate() will return with the error code + Z_DATA_ERROR instead of trying to allocate a larger window. + + windowBits can also be -8..-15 for raw inflate. In this case, -windowBits + determines the window size. inflate() will then process raw deflate data, + not looking for a zlib or gzip header, not generating a check value, and not + looking for any check values for comparison at the end of the stream. This + is for use with other formats that use the deflate compressed data format + such as zip. Those formats provide their own check values. If a custom + format is developed using the raw deflate format for compressed data, it is + recommended that a check value such as an adler32 or a crc32 be applied to + the uncompressed data as is done in the zlib, gzip, and zip formats. For + most applications, the zlib format should be used as is. Note that comments + above on the use in deflateInit2() applies to the magnitude of windowBits. + + windowBits can also be greater than 15 for optional gzip decoding. Add + 32 to windowBits to enable zlib and gzip decoding with automatic header + detection, or add 16 to decode only the gzip format (the zlib format will + return a Z_DATA_ERROR). If a gzip stream is being decoded, strm->adler is + a crc32 instead of an adler32. + + inflateInit2 returns Z_OK if success, Z_MEM_ERROR if there was not enough + memory, Z_STREAM_ERROR if a parameter is invalid (such as a null strm). msg + is set to null if there is no error message. inflateInit2 does not perform + any decompression apart from reading the zlib header if present: this will + be done by inflate(). (So next_in and avail_in may be modified, but next_out + and avail_out are unchanged.) +*/ + +ZEXTERN int ZEXPORT inflateSetDictionary OF((z_streamp strm, + const Bytef *dictionary, + uInt dictLength)); +/* + Initializes the decompression dictionary from the given uncompressed byte + sequence. This function must be called immediately after a call of inflate, + if that call returned Z_NEED_DICT. The dictionary chosen by the compressor + can be determined from the adler32 value returned by that call of inflate. + The compressor and decompressor must use exactly the same dictionary (see + deflateSetDictionary). For raw inflate, this function can be called + immediately after inflateInit2() or inflateReset() and before any call of + inflate() to set the dictionary. The application must insure that the + dictionary that was used for compression is provided. + + inflateSetDictionary returns Z_OK if success, Z_STREAM_ERROR if a + parameter is invalid (such as NULL dictionary) or the stream state is + inconsistent, Z_DATA_ERROR if the given dictionary doesn't match the + expected one (incorrect adler32 value). inflateSetDictionary does not + perform any decompression: this will be done by subsequent calls of + inflate(). +*/ + +ZEXTERN int ZEXPORT inflateSync OF((z_streamp strm)); +/* + Skips invalid compressed data until a full flush point (see above the + description of deflate with Z_FULL_FLUSH) can be found, or until all + available input is skipped. No output is provided. + + inflateSync returns Z_OK if a full flush point has been found, Z_BUF_ERROR + if no more input was provided, Z_DATA_ERROR if no flush point has been found, + or Z_STREAM_ERROR if the stream structure was inconsistent. In the success + case, the application may save the current current value of total_in which + indicates where valid compressed data was found. In the error case, the + application may repeatedly call inflateSync, providing more input each time, + until success or end of the input data. +*/ + +ZEXTERN int ZEXPORT inflateCopy OF((z_streamp dest, + z_streamp source)); +/* + Sets the destination stream as a complete copy of the source stream. + + This function can be useful when randomly accessing a large stream. The + first pass through the stream can periodically record the inflate state, + allowing restarting inflate at those points when randomly accessing the + stream. + + inflateCopy returns Z_OK if success, Z_MEM_ERROR if there was not + enough memory, Z_STREAM_ERROR if the source stream state was inconsistent + (such as zalloc being NULL). msg is left unchanged in both source and + destination. +*/ + +ZEXTERN int ZEXPORT inflateReset OF((z_streamp strm)); +/* + This function is equivalent to inflateEnd followed by inflateInit, + but does not free and reallocate all the internal decompression state. + The stream will keep attributes that may have been set by inflateInit2. + + inflateReset returns Z_OK if success, or Z_STREAM_ERROR if the source + stream state was inconsistent (such as zalloc or state being NULL). +*/ + +ZEXTERN int ZEXPORT inflatePrime OF((z_streamp strm, + int bits, + int value)); +/* + This function inserts bits in the inflate input stream. The intent is + that this function is used to start inflating at a bit position in the + middle of a byte. The provided bits will be used before any bytes are used + from next_in. This function should only be used with raw inflate, and + should be used before the first inflate() call after inflateInit2() or + inflateReset(). bits must be less than or equal to 16, and that many of the + least significant bits of value will be inserted in the input. + + inflatePrime returns Z_OK if success, or Z_STREAM_ERROR if the source + stream state was inconsistent. +*/ + +ZEXTERN int ZEXPORT inflateGetHeader OF((z_streamp strm, + gz_headerp head)); +/* + inflateGetHeader() requests that gzip header information be stored in the + provided gz_header structure. inflateGetHeader() may be called after + inflateInit2() or inflateReset(), and before the first call of inflate(). + As inflate() processes the gzip stream, head->done is zero until the header + is completed, at which time head->done is set to one. If a zlib stream is + being decoded, then head->done is set to -1 to indicate that there will be + no gzip header information forthcoming. Note that Z_BLOCK can be used to + force inflate() to return immediately after header processing is complete + and before any actual data is decompressed. + + The text, time, xflags, and os fields are filled in with the gzip header + contents. hcrc is set to true if there is a header CRC. (The header CRC + was valid if done is set to one.) If extra is not Z_NULL, then extra_max + contains the maximum number of bytes to write to extra. Once done is true, + extra_len contains the actual extra field length, and extra contains the + extra field, or that field truncated if extra_max is less than extra_len. + If name is not Z_NULL, then up to name_max characters are written there, + terminated with a zero unless the length is greater than name_max. If + comment is not Z_NULL, then up to comm_max characters are written there, + terminated with a zero unless the length is greater than comm_max. When + any of extra, name, or comment are not Z_NULL and the respective field is + not present in the header, then that field is set to Z_NULL to signal its + absence. This allows the use of deflateSetHeader() with the returned + structure to duplicate the header. However if those fields are set to + allocated memory, then the application will need to save those pointers + elsewhere so that they can be eventually freed. + + If inflateGetHeader is not used, then the header information is simply + discarded. The header is always checked for validity, including the header + CRC if present. inflateReset() will reset the process to discard the header + information. The application would need to call inflateGetHeader() again to + retrieve the header from the next gzip stream. + + inflateGetHeader returns Z_OK if success, or Z_STREAM_ERROR if the source + stream state was inconsistent. +*/ + +/* +ZEXTERN int ZEXPORT inflateBackInit OF((z_streamp strm, int windowBits, + unsigned char FAR *window)); + + Initialize the internal stream state for decompression using inflateBack() + calls. The fields zalloc, zfree and opaque in strm must be initialized + before the call. If zalloc and zfree are Z_NULL, then the default library- + derived memory allocation routines are used. windowBits is the base two + logarithm of the window size, in the range 8..15. window is a caller + supplied buffer of that size. Except for special applications where it is + assured that deflate was used with small window sizes, windowBits must be 15 + and a 32K byte window must be supplied to be able to decompress general + deflate streams. + + See inflateBack() for the usage of these routines. + + inflateBackInit will return Z_OK on success, Z_STREAM_ERROR if any of + the paramaters are invalid, Z_MEM_ERROR if the internal state could not + be allocated, or Z_VERSION_ERROR if the version of the library does not + match the version of the header file. +*/ + +typedef unsigned (*in_func) OF((void FAR *, unsigned char FAR * FAR *)); +typedef int (*out_func) OF((void FAR *, unsigned char FAR *, unsigned)); + +ZEXTERN int ZEXPORT inflateBack OF((z_streamp strm, + in_func in, void FAR *in_desc, + out_func out, void FAR *out_desc)); +/* + inflateBack() does a raw inflate with a single call using a call-back + interface for input and output. This is more efficient than inflate() for + file i/o applications in that it avoids copying between the output and the + sliding window by simply making the window itself the output buffer. This + function trusts the application to not change the output buffer passed by + the output function, at least until inflateBack() returns. + + inflateBackInit() must be called first to allocate the internal state + and to initialize the state with the user-provided window buffer. + inflateBack() may then be used multiple times to inflate a complete, raw + deflate stream with each call. inflateBackEnd() is then called to free + the allocated state. + + A raw deflate stream is one with no zlib or gzip header or trailer. + This routine would normally be used in a utility that reads zip or gzip + files and writes out uncompressed files. The utility would decode the + header and process the trailer on its own, hence this routine expects + only the raw deflate stream to decompress. This is different from the + normal behavior of inflate(), which expects either a zlib or gzip header and + trailer around the deflate stream. + + inflateBack() uses two subroutines supplied by the caller that are then + called by inflateBack() for input and output. inflateBack() calls those + routines until it reads a complete deflate stream and writes out all of the + uncompressed data, or until it encounters an error. The function's + parameters and return types are defined above in the in_func and out_func + typedefs. inflateBack() will call in(in_desc, &buf) which should return the + number of bytes of provided input, and a pointer to that input in buf. If + there is no input available, in() must return zero--buf is ignored in that + case--and inflateBack() will return a buffer error. inflateBack() will call + out(out_desc, buf, len) to write the uncompressed data buf[0..len-1]. out() + should return zero on success, or non-zero on failure. If out() returns + non-zero, inflateBack() will return with an error. Neither in() nor out() + are permitted to change the contents of the window provided to + inflateBackInit(), which is also the buffer that out() uses to write from. + The length written by out() will be at most the window size. Any non-zero + amount of input may be provided by in(). + + For convenience, inflateBack() can be provided input on the first call by + setting strm->next_in and strm->avail_in. If that input is exhausted, then + in() will be called. Therefore strm->next_in must be initialized before + calling inflateBack(). If strm->next_in is Z_NULL, then in() will be called + immediately for input. If strm->next_in is not Z_NULL, then strm->avail_in + must also be initialized, and then if strm->avail_in is not zero, input will + initially be taken from strm->next_in[0 .. strm->avail_in - 1]. + + The in_desc and out_desc parameters of inflateBack() is passed as the + first parameter of in() and out() respectively when they are called. These + descriptors can be optionally used to pass any information that the caller- + supplied in() and out() functions need to do their job. + + On return, inflateBack() will set strm->next_in and strm->avail_in to + pass back any unused input that was provided by the last in() call. The + return values of inflateBack() can be Z_STREAM_END on success, Z_BUF_ERROR + if in() or out() returned an error, Z_DATA_ERROR if there was a format + error in the deflate stream (in which case strm->msg is set to indicate the + nature of the error), or Z_STREAM_ERROR if the stream was not properly + initialized. In the case of Z_BUF_ERROR, an input or output error can be + distinguished using strm->next_in which will be Z_NULL only if in() returned + an error. If strm->next is not Z_NULL, then the Z_BUF_ERROR was due to + out() returning non-zero. (in() will always be called before out(), so + strm->next_in is assured to be defined if out() returns non-zero.) Note + that inflateBack() cannot return Z_OK. +*/ + +ZEXTERN int ZEXPORT inflateBackEnd OF((z_streamp strm)); +/* + All memory allocated by inflateBackInit() is freed. + + inflateBackEnd() returns Z_OK on success, or Z_STREAM_ERROR if the stream + state was inconsistent. +*/ + +ZEXTERN uLong ZEXPORT zlibCompileFlags OF((void)); +/* Return flags indicating compile-time options. + + Type sizes, two bits each, 00 = 16 bits, 01 = 32, 10 = 64, 11 = other: + 1.0: size of uInt + 3.2: size of uLong + 5.4: size of voidpf (pointer) + 7.6: size of z_off_t + + Compiler, assembler, and debug options: + 8: DEBUG + 9: ASMV or ASMINF -- use ASM code + 10: ZLIB_WINAPI -- exported functions use the WINAPI calling convention + 11: 0 (reserved) + + One-time table building (smaller code, but not thread-safe if true): + 12: BUILDFIXED -- build static block decoding tables when needed + 13: DYNAMIC_CRC_TABLE -- build CRC calculation tables when needed + 14,15: 0 (reserved) + + Library content (indicates missing functionality): + 16: NO_GZCOMPRESS -- gz* functions cannot compress (to avoid linking + deflate code when not needed) + 17: NO_GZIP -- deflate can't write gzip streams, and inflate can't detect + and decode gzip streams (to avoid linking crc code) + 18-19: 0 (reserved) + + Operation variations (changes in library functionality): + 20: PKZIP_BUG_WORKAROUND -- slightly more permissive inflate + 21: FASTEST -- deflate algorithm with only one, lowest compression level + 22,23: 0 (reserved) + + The sprintf variant used by gzprintf (zero is best): + 24: 0 = vs*, 1 = s* -- 1 means limited to 20 arguments after the format + 25: 0 = *nprintf, 1 = *printf -- 1 means gzprintf() not secure! + 26: 0 = returns value, 1 = void -- 1 means inferred string length returned + + Remainder: + 27-31: 0 (reserved) + */ + + + /* utility functions */ + +/* + The following utility functions are implemented on top of the + basic stream-oriented functions. To simplify the interface, some + default options are assumed (compression level and memory usage, + standard memory allocation functions). The source code of these + utility functions can easily be modified if you need special options. +*/ + +ZEXTERN int ZEXPORT compress OF((Bytef *dest, uLongf *destLen, + const Bytef *source, uLong sourceLen)); +/* + Compresses the source buffer into the destination buffer. sourceLen is + the byte length of the source buffer. Upon entry, destLen is the total + size of the destination buffer, which must be at least the value returned + by compressBound(sourceLen). Upon exit, destLen is the actual size of the + compressed buffer. + This function can be used to compress a whole file at once if the + input file is mmap'ed. + compress returns Z_OK if success, Z_MEM_ERROR if there was not + enough memory, Z_BUF_ERROR if there was not enough room in the output + buffer. +*/ + +ZEXTERN int ZEXPORT compress2 OF((Bytef *dest, uLongf *destLen, + const Bytef *source, uLong sourceLen, + int level)); +/* + Compresses the source buffer into the destination buffer. The level + parameter has the same meaning as in deflateInit. sourceLen is the byte + length of the source buffer. Upon entry, destLen is the total size of the + destination buffer, which must be at least the value returned by + compressBound(sourceLen). Upon exit, destLen is the actual size of the + compressed buffer. + + compress2 returns Z_OK if success, Z_MEM_ERROR if there was not enough + memory, Z_BUF_ERROR if there was not enough room in the output buffer, + Z_STREAM_ERROR if the level parameter is invalid. +*/ + +ZEXTERN uLong ZEXPORT compressBound OF((uLong sourceLen)); +/* + compressBound() returns an upper bound on the compressed size after + compress() or compress2() on sourceLen bytes. It would be used before + a compress() or compress2() call to allocate the destination buffer. +*/ + +ZEXTERN int ZEXPORT uncompress OF((Bytef *dest, uLongf *destLen, + const Bytef *source, uLong sourceLen)); +/* + Decompresses the source buffer into the destination buffer. sourceLen is + the byte length of the source buffer. Upon entry, destLen is the total + size of the destination buffer, which must be large enough to hold the + entire uncompressed data. (The size of the uncompressed data must have + been saved previously by the compressor and transmitted to the decompressor + by some mechanism outside the scope of this compression library.) + Upon exit, destLen is the actual size of the compressed buffer. + This function can be used to decompress a whole file at once if the + input file is mmap'ed. + + uncompress returns Z_OK if success, Z_MEM_ERROR if there was not + enough memory, Z_BUF_ERROR if there was not enough room in the output + buffer, or Z_DATA_ERROR if the input data was corrupted or incomplete. +*/ + + +typedef voidp gzFile; + +ZEXTERN gzFile ZEXPORT gzopen OF((const char *path, const char *mode)); +/* + Opens a gzip (.gz) file for reading or writing. The mode parameter + is as in fopen ("rb" or "wb") but can also include a compression level + ("wb9") or a strategy: 'f' for filtered data as in "wb6f", 'h' for + Huffman only compression as in "wb1h", or 'R' for run-length encoding + as in "wb1R". (See the description of deflateInit2 for more information + about the strategy parameter.) + + gzopen can be used to read a file which is not in gzip format; in this + case gzread will directly read from the file without decompression. + + gzopen returns NULL if the file could not be opened or if there was + insufficient memory to allocate the (de)compression state; errno + can be checked to distinguish the two cases (if errno is zero, the + zlib error is Z_MEM_ERROR). */ + +ZEXTERN gzFile ZEXPORT gzdopen OF((int fd, const char *mode)); +/* + gzdopen() associates a gzFile with the file descriptor fd. File + descriptors are obtained from calls like open, dup, creat, pipe or + fileno (in the file has been previously opened with fopen). + The mode parameter is as in gzopen. + The next call of gzclose on the returned gzFile will also close the + file descriptor fd, just like fclose(fdopen(fd), mode) closes the file + descriptor fd. If you want to keep fd open, use gzdopen(dup(fd), mode). + gzdopen returns NULL if there was insufficient memory to allocate + the (de)compression state. +*/ + +ZEXTERN int ZEXPORT gzsetparams OF((gzFile file, int level, int strategy)); +/* + Dynamically update the compression level or strategy. See the description + of deflateInit2 for the meaning of these parameters. + gzsetparams returns Z_OK if success, or Z_STREAM_ERROR if the file was not + opened for writing. +*/ + +ZEXTERN int ZEXPORT gzread OF((gzFile file, voidp buf, unsigned len)); +/* + Reads the given number of uncompressed bytes from the compressed file. + If the input file was not in gzip format, gzread copies the given number + of bytes into the buffer. + gzread returns the number of uncompressed bytes actually read (0 for + end of file, -1 for error). */ + +ZEXTERN int ZEXPORT gzwrite OF((gzFile file, + voidpc buf, unsigned len)); +/* + Writes the given number of uncompressed bytes into the compressed file. + gzwrite returns the number of uncompressed bytes actually written + (0 in case of error). +*/ + +ZEXTERN int ZEXPORTVA gzprintf OF((gzFile file, const char *format, ...)); +/* + Converts, formats, and writes the args to the compressed file under + control of the format string, as in fprintf. gzprintf returns the number of + uncompressed bytes actually written (0 in case of error). The number of + uncompressed bytes written is limited to 4095. The caller should assure that + this limit is not exceeded. If it is exceeded, then gzprintf() will return + return an error (0) with nothing written. In this case, there may also be a + buffer overflow with unpredictable consequences, which is possible only if + zlib was compiled with the insecure functions sprintf() or vsprintf() + because the secure snprintf() or vsnprintf() functions were not available. +*/ + +ZEXTERN int ZEXPORT gzputs OF((gzFile file, const char *s)); +/* + Writes the given null-terminated string to the compressed file, excluding + the terminating null character. + gzputs returns the number of characters written, or -1 in case of error. +*/ + +ZEXTERN char * ZEXPORT gzgets OF((gzFile file, char *buf, int len)); +/* + Reads bytes from the compressed file until len-1 characters are read, or + a newline character is read and transferred to buf, or an end-of-file + condition is encountered. The string is then terminated with a null + character. + gzgets returns buf, or Z_NULL in case of error. +*/ + +ZEXTERN int ZEXPORT gzputc OF((gzFile file, int c)); +/* + Writes c, converted to an unsigned char, into the compressed file. + gzputc returns the value that was written, or -1 in case of error. +*/ + +ZEXTERN int ZEXPORT gzgetc OF((gzFile file)); +/* + Reads one byte from the compressed file. gzgetc returns this byte + or -1 in case of end of file or error. +*/ + +ZEXTERN int ZEXPORT gzungetc OF((int c, gzFile file)); +/* + Push one character back onto the stream to be read again later. + Only one character of push-back is allowed. gzungetc() returns the + character pushed, or -1 on failure. gzungetc() will fail if a + character has been pushed but not read yet, or if c is -1. The pushed + character will be discarded if the stream is repositioned with gzseek() + or gzrewind(). +*/ + +ZEXTERN int ZEXPORT gzflush OF((gzFile file, int flush)); +/* + Flushes all pending output into the compressed file. The parameter + flush is as in the deflate() function. The return value is the zlib + error number (see function gzerror below). gzflush returns Z_OK if + the flush parameter is Z_FINISH and all output could be flushed. + gzflush should be called only when strictly necessary because it can + degrade compression. +*/ + +ZEXTERN z_off_t ZEXPORT gzseek OF((gzFile file, + z_off_t offset, int whence)); +/* + Sets the starting position for the next gzread or gzwrite on the + given compressed file. The offset represents a number of bytes in the + uncompressed data stream. The whence parameter is defined as in lseek(2); + the value SEEK_END is not supported. + If the file is opened for reading, this function is emulated but can be + extremely slow. If the file is opened for writing, only forward seeks are + supported; gzseek then compresses a sequence of zeroes up to the new + starting position. + + gzseek returns the resulting offset location as measured in bytes from + the beginning of the uncompressed stream, or -1 in case of error, in + particular if the file is opened for writing and the new starting position + would be before the current position. +*/ + +ZEXTERN int ZEXPORT gzrewind OF((gzFile file)); +/* + Rewinds the given file. This function is supported only for reading. + + gzrewind(file) is equivalent to (int)gzseek(file, 0L, SEEK_SET) +*/ + +ZEXTERN z_off_t ZEXPORT gztell OF((gzFile file)); +/* + Returns the starting position for the next gzread or gzwrite on the + given compressed file. This position represents a number of bytes in the + uncompressed data stream. + + gztell(file) is equivalent to gzseek(file, 0L, SEEK_CUR) +*/ + +ZEXTERN int ZEXPORT gzeof OF((gzFile file)); +/* + Returns 1 when EOF has previously been detected reading the given + input stream, otherwise zero. +*/ + +ZEXTERN int ZEXPORT gzdirect OF((gzFile file)); +/* + Returns 1 if file is being read directly without decompression, otherwise + zero. +*/ + +ZEXTERN int ZEXPORT gzclose OF((gzFile file)); +/* + Flushes all pending output if necessary, closes the compressed file + and deallocates all the (de)compression state. The return value is the zlib + error number (see function gzerror below). +*/ + +ZEXTERN const char * ZEXPORT gzerror OF((gzFile file, int *errnum)); +/* + Returns the error message for the last error which occurred on the + given compressed file. errnum is set to zlib error number. If an + error occurred in the file system and not in the compression library, + errnum is set to Z_ERRNO and the application may consult errno + to get the exact error code. +*/ + +ZEXTERN void ZEXPORT gzclearerr OF((gzFile file)); +/* + Clears the error and end-of-file flags for file. This is analogous to the + clearerr() function in stdio. This is useful for continuing to read a gzip + file that is being written concurrently. +*/ + + /* checksum functions */ + +/* + These functions are not related to compression but are exported + anyway because they might be useful in applications using the + compression library. +*/ + +ZEXTERN uLong ZEXPORT adler32 OF((uLong adler, const Bytef *buf, uInt len)); +/* + Update a running Adler-32 checksum with the bytes buf[0..len-1] and + return the updated checksum. If buf is NULL, this function returns + the required initial value for the checksum. + An Adler-32 checksum is almost as reliable as a CRC32 but can be computed + much faster. Usage example: + + uLong adler = adler32(0L, Z_NULL, 0); + + while (read_buffer(buffer, length) != EOF) { + adler = adler32(adler, buffer, length); + } + if (adler != original_adler) error(); +*/ + +ZEXTERN uLong ZEXPORT adler32_combine OF((uLong adler1, uLong adler2, + z_off_t len2)); +/* + Combine two Adler-32 checksums into one. For two sequences of bytes, seq1 + and seq2 with lengths len1 and len2, Adler-32 checksums were calculated for + each, adler1 and adler2. adler32_combine() returns the Adler-32 checksum of + seq1 and seq2 concatenated, requiring only adler1, adler2, and len2. +*/ + +ZEXTERN uLong ZEXPORT crc32 OF((uLong crc, const Bytef *buf, uInt len)); +/* + Update a running CRC-32 with the bytes buf[0..len-1] and return the + updated CRC-32. If buf is NULL, this function returns the required initial + value for the for the crc. Pre- and post-conditioning (one's complement) is + performed within this function so it shouldn't be done by the application. + Usage example: + + uLong crc = crc32(0L, Z_NULL, 0); + + while (read_buffer(buffer, length) != EOF) { + crc = crc32(crc, buffer, length); + } + if (crc != original_crc) error(); +*/ + +ZEXTERN uLong ZEXPORT crc32_combine OF((uLong crc1, uLong crc2, z_off_t len2)); + +/* + Combine two CRC-32 check values into one. For two sequences of bytes, + seq1 and seq2 with lengths len1 and len2, CRC-32 check values were + calculated for each, crc1 and crc2. crc32_combine() returns the CRC-32 + check value of seq1 and seq2 concatenated, requiring only crc1, crc2, and + len2. +*/ + + + /* various hacks, don't look :) */ + +/* deflateInit and inflateInit are macros to allow checking the zlib version + * and the compiler's view of z_stream: + */ +ZEXTERN int ZEXPORT deflateInit_ OF((z_streamp strm, int level, + const char *version, int stream_size)); +ZEXTERN int ZEXPORT inflateInit_ OF((z_streamp strm, + const char *version, int stream_size)); +ZEXTERN int ZEXPORT deflateInit2_ OF((z_streamp strm, int level, int method, + int windowBits, int memLevel, + int strategy, const char *version, + int stream_size)); +ZEXTERN int ZEXPORT inflateInit2_ OF((z_streamp strm, int windowBits, + const char *version, int stream_size)); +ZEXTERN int ZEXPORT inflateBackInit_ OF((z_streamp strm, int windowBits, + unsigned char FAR *window, + const char *version, + int stream_size)); +#define deflateInit(strm, level) \ + deflateInit_((strm), (level), ZLIB_VERSION, sizeof(z_stream)) +#define inflateInit(strm) \ + inflateInit_((strm), ZLIB_VERSION, sizeof(z_stream)) +#define deflateInit2(strm, level, method, windowBits, memLevel, strategy) \ + deflateInit2_((strm),(level),(method),(windowBits),(memLevel),\ + (strategy), ZLIB_VERSION, sizeof(z_stream)) +#define inflateInit2(strm, windowBits) \ + inflateInit2_((strm), (windowBits), ZLIB_VERSION, sizeof(z_stream)) +#define inflateBackInit(strm, windowBits, window) \ + inflateBackInit_((strm), (windowBits), (window), \ + ZLIB_VERSION, sizeof(z_stream)) + + +#if !defined(ZUTIL_H) && !defined(NO_DUMMY_DECL) + struct internal_state {int dummy;}; /* hack for buggy compilers */ +#endif + +ZEXTERN const char * ZEXPORT zError OF((int)); +ZEXTERN int ZEXPORT inflateSyncPoint OF((z_streamp z)); +ZEXTERN const uLongf * ZEXPORT get_crc_table OF((void)); + +#ifdef __cplusplus +} +#endif + +#endif /* ZLIB_H */ diff --git a/EQ2/source/depends/zlib/lib/zdll.exp b/EQ2/source/depends/zlib/lib/zdll.exp new file mode 100644 index 000000000..2ca08c591 Binary files /dev/null and b/EQ2/source/depends/zlib/lib/zdll.exp differ diff --git a/EQ2/source/depends/zlib/lib/zlib.def b/EQ2/source/depends/zlib/lib/zlib.def new file mode 100644 index 000000000..6381ecccb --- /dev/null +++ b/EQ2/source/depends/zlib/lib/zlib.def @@ -0,0 +1,75 @@ +; h:\mingw\3.3.1\bin\dlltool.exe --export-all-symbols --output-def=zlib.def adler32.pic.o compress.pic.o crc32.pic.o gzio.pic.o uncompr.pic.o deflate.pic.o trees.pic.o zutil.pic.o inflate.pic.o infback.pic.o inftrees.pic.o inffast.pic.o zlib-dllversion.o zlib-dll-res.o +EXPORTS + DllGetVersion @ 1 ; + _dist_code @ 2 DATA ; + _length_code @ 3 DATA ; + _tr_align @ 4 ; + _tr_flush_block @ 5 ; + _tr_init @ 6 ; + _tr_stored_block @ 7 ; + _tr_tally @ 8 ; + adler32 @ 9 ; + adler32_combine @ 10 ; + compress @ 11 ; + compress2 @ 12 ; + compressBound @ 13 ; + crc32 @ 14 ; + crc32_combine @ 15 ; + deflate @ 16 ; + deflateBound @ 17 ; + deflateCopy @ 18 ; + deflateEnd @ 19 ; + deflateInit2_ @ 20 ; + deflateInit_ @ 21 ; + deflateParams @ 22 ; + deflatePrime @ 23 ; + deflateReset @ 24 ; + deflateSetDictionary @ 25 ; + deflateSetHeader @ 26 ; + deflateTune @ 27 ; + deflate_copyright @ 28 DATA ; + get_crc_table @ 29 ; + gzclearerr @ 30 ; + gzclose @ 31 ; + gzdirect @ 32 ; + gzdopen @ 33 ; + gzeof @ 34 ; + gzerror @ 35 ; + gzflush @ 36 ; + gzgetc @ 37 ; + gzgets @ 38 ; + gzopen @ 39 ; + gzprintf @ 40 ; + gzputc @ 41 ; + gzputs @ 42 ; + gzread @ 43 ; + gzrewind @ 44 ; + gzseek @ 45 ; + gzsetparams @ 46 ; + gztell @ 47 ; + gzungetc @ 48 ; + gzwrite @ 49 ; + inflate @ 50 ; + inflateBack @ 51 ; + inflateBackEnd @ 52 ; + inflateBackInit_ @ 53 ; + inflateCopy @ 54 ; + inflateEnd @ 55 ; + inflateGetHeader @ 56 ; + inflateInit2_ @ 57 ; + inflateInit_ @ 58 ; + inflatePrime @ 59 ; + inflateReset @ 60 ; + inflateSetDictionary @ 61 ; + inflateSync @ 62 ; + inflateSyncPoint @ 63 ; + inflate_copyright @ 64 DATA ; + inflate_fast @ 65 ; + inflate_table @ 66 ; + uncompress @ 67 ; + zError @ 68 ; + z_errmsg @ 69 DATA ; + zcalloc @ 70 ; + zcfree @ 71 ; + zlibCompileFlags @ 72 ; + zlibVersion @ 73 ; diff --git a/EQ2/structs/CommonStructs.xml b/EQ2/structs/CommonStructs.xml new file mode 100644 index 000000000..823e413c5 --- /dev/null +++ b/EQ2/structs/CommonStructs.xml @@ -0,0 +1,508 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/EQ2/structs/EQ2_Structs.xml b/EQ2/structs/EQ2_Structs.xml new file mode 100644 index 000000000..a5ae15989 --- /dev/null +++ b/EQ2/structs/EQ2_Structs.xml @@ -0,0 +1,10 @@ + + + + + + + + diff --git a/EQ2/structs/ItemStructs.xml b/EQ2/structs/ItemStructs.xml new file mode 100644 index 000000000..1ed2ce7fc --- /dev/null +++ b/EQ2/structs/ItemStructs.xml @@ -0,0 +1,11710 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/EQ2/structs/LoginStructs.xml b/EQ2/structs/LoginStructs.xml new file mode 100644 index 000000000..759a8cb30 --- /dev/null +++ b/EQ2/structs/LoginStructs.xml @@ -0,0 +1,799 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/EQ2/structs/SpawnStructs.xml b/EQ2/structs/SpawnStructs.xml new file mode 100644 index 000000000..462015ef5 --- /dev/null +++ b/EQ2/structs/SpawnStructs.xml @@ -0,0 +1,2197 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/EQ2/structs/WorldStructs.xml b/EQ2/structs/WorldStructs.xml new file mode 100644 index 000000000..24a36fd9c --- /dev/null +++ b/EQ2/structs/WorldStructs.xml @@ -0,0 +1,32160 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +- + + + + + + + + + + + + + - + + + + + - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/EQ2/win/EQ2WorldVC10.sln b/EQ2/win/EQ2WorldVC10.sln new file mode 100644 index 000000000..ae839b64e --- /dev/null +++ b/EQ2/win/EQ2WorldVC10.sln @@ -0,0 +1,49 @@ +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio Version 16 +VisualStudioVersion = 16.0.29806.167 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "EQ2World", "VC10Projects\EQ2World.vcxproj", "{FC063D75-089D-4470-B255-032A80DE3CCE}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "EQ2 Login", "..\source\LoginServer\Login.vcxproj", "{BE2C1914-FCCC-4F65-A7DD-105142B36104}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Win32 = Debug|Win32 + Debug|x64 = Debug|x64 + EQ2Login|Win32 = EQ2Login|Win32 + EQ2Login|x64 = EQ2Login|x64 + Release|Win32 = Release|Win32 + Release|x64 = Release|x64 + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {FC063D75-089D-4470-B255-032A80DE3CCE}.Debug|Win32.ActiveCfg = Debug|Win32 + {FC063D75-089D-4470-B255-032A80DE3CCE}.Debug|Win32.Build.0 = Debug|Win32 + {FC063D75-089D-4470-B255-032A80DE3CCE}.Debug|x64.ActiveCfg = Debug|x64 + {FC063D75-089D-4470-B255-032A80DE3CCE}.Debug|x64.Build.0 = Debug|x64 + {FC063D75-089D-4470-B255-032A80DE3CCE}.EQ2Login|Win32.ActiveCfg = Release|Win32 + {FC063D75-089D-4470-B255-032A80DE3CCE}.EQ2Login|Win32.Build.0 = Release|Win32 + {FC063D75-089D-4470-B255-032A80DE3CCE}.EQ2Login|x64.ActiveCfg = Release|x64 + {FC063D75-089D-4470-B255-032A80DE3CCE}.EQ2Login|x64.Build.0 = Release|x64 + {FC063D75-089D-4470-B255-032A80DE3CCE}.Release|Win32.ActiveCfg = Release|Win32 + {FC063D75-089D-4470-B255-032A80DE3CCE}.Release|Win32.Build.0 = Release|Win32 + {FC063D75-089D-4470-B255-032A80DE3CCE}.Release|x64.ActiveCfg = Release|x64 + {FC063D75-089D-4470-B255-032A80DE3CCE}.Release|x64.Build.0 = Release|x64 + {BE2C1914-FCCC-4F65-A7DD-105142B36104}.Debug|Win32.ActiveCfg = EQ2Login|Win32 + {BE2C1914-FCCC-4F65-A7DD-105142B36104}.Debug|Win32.Build.0 = EQ2Login|Win32 + {BE2C1914-FCCC-4F65-A7DD-105142B36104}.Debug|x64.ActiveCfg = EQ2Login|Win32 + {BE2C1914-FCCC-4F65-A7DD-105142B36104}.Debug|x64.Build.0 = EQ2Login|Win32 + {BE2C1914-FCCC-4F65-A7DD-105142B36104}.EQ2Login|Win32.ActiveCfg = EQ2Login|Win32 + {BE2C1914-FCCC-4F65-A7DD-105142B36104}.EQ2Login|Win32.Build.0 = EQ2Login|Win32 + {BE2C1914-FCCC-4F65-A7DD-105142B36104}.EQ2Login|x64.ActiveCfg = EQ2Login|Win32 + {BE2C1914-FCCC-4F65-A7DD-105142B36104}.Release|Win32.ActiveCfg = EQ2Login|Win32 + {BE2C1914-FCCC-4F65-A7DD-105142B36104}.Release|Win32.Build.0 = EQ2Login|Win32 + {BE2C1914-FCCC-4F65-A7DD-105142B36104}.Release|x64.ActiveCfg = EQ2Login|Win32 + {BE2C1914-FCCC-4F65-A7DD-105142B36104}.Release|x64.Build.0 = EQ2Login|Win32 + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + SolutionGuid = {B28A6453-8B39-4A3D-85A6-2E6DF9AFDDEF} + EndGlobalSection +EndGlobal diff --git a/EQ2/win/VC10Projects/EQ2World.vcxproj b/EQ2/win/VC10Projects/EQ2World.vcxproj new file mode 100644 index 000000000..428234d20 --- /dev/null +++ b/EQ2/win/VC10Projects/EQ2World.vcxproj @@ -0,0 +1,669 @@ + + + + + Release + Win32 + + + Release + x64 + + + Debug + Win32 + + + Debug + x64 + + + + EQ2World + {FC063D75-089D-4470-B255-032A80DE3CCE} + EQ2World + 10.0 + + + + Application + false + MultiByte + v142 + + + Application + false + MultiByte + false + v142 + + + Application + false + MultiByte + v142 + + + Application + false + MultiByte + false + v142 + + + + + + + + + + + + + + + + + + + + + + + <_ProjectFileVersion>10.0.30319.1 + $(SolutionDir)worldserver\ + .\$(ProjectName)__Debug\ + false + $(SolutionDir)worldserver\ + .\$(ProjectName)__Debug_$(Platform)\ + false + .\..\..\bin\ + .\$(ProjectName)__$(Configuration)_$(PlatformName)\ + .\..\..\bin\ + .\$(ProjectName)__$(Configuration)_$(PlatformName)\ + true + AllRules.ruleset + + + AllRules.ruleset + + + AllRules.ruleset + + + AllRules.ruleset + + + $(ProjectName)__Debug_$(Platform) + $(SolutionDir)..\source\depends\mariadb-10.1.19\include;$(SolutionDir)..\source\depends\zlib\include;$(IncludePath) + $(SolutionDir)..\source\depends\mariadb-10.1.19\include;$(SolutionDir)..\source\depends\zlib\include;$(IncludePath) + $(SolutionDir)..\source\depends\mariadb-10.1.19\lib\64;$(SolutionDir)..\source\depends\zlib\lib;$(LibraryPath) + $(SolutionDir)..\source\depends\mariadb-10.1.19\lib\64-debug;$(SolutionDir)..\source\depends\zlib\lib;$(LibraryPath) + $(SolutionDir)..\source\depends\mariadb-10.1.19\include;$(SolutionDir)..\source\depends\zlib\include;$(IncludePath) + $(SolutionDir)..\source\depends\mariadb-10.1.19\lib\32;$(SolutionDir)..\source\depends\zlib\lib;$(LibraryPath) + $(SolutionDir)..\source\depends\mariadb-10.1.19\include;$(SolutionDir)..\source\depends\zlib\include;$(IncludePath) + $(SolutionDir)..\source\depends\mariadb-10.1.19\lib\32-debug;$(SolutionDir)..\source\depends\zlib\lib;$(LibraryPath) + $(ProjectName)__Debug + false + + + false + + + + .\../build/World.tlb + + + Disabled + WORLD;DEBUG;_EQDEBUG;WIN32;_CONSOLE;EQ2;EQN_DEBUG;_CRT_SECURE_NO_DEPRECATE;%(PreprocessorDefinitions) + Sync + EnableFastChecks + MultiThreadedDebug + true + false + NotUsing + + + $(IntDir) + $(IntDir) + $(IntDir) + $(IntDir) + + + Level1 + true + ProgramDatabase + Default + 4996;%(DisableSpecificWarnings) + false + Prompt + + + + + /MP6 /D "NO_CATCH" %(AdditionalOptions) + AnySuitable + + + true + false + + + _DEBUG;%(PreprocessorDefinitions) + 0x0409 + + + /MACHINE:I386 %(AdditionalOptions) + odbc32.lib;odbccp32.lib;ws2_32.lib;mysqlclient.lib;%(AdditionalDependencies) + true + + + $(IntDir)$(TargetName).intermediate.manifest + LIBCMT;LIBC;%(IgnoreSpecificDefaultLibraries) + true + $(IntDir)$(TargetName).pdb + false + false + + + false + + + + + MachineX86 + PromptImmediately + true + true + Default + $(IntDir)$(TargetName).pgd + $(OutDir)$(TargetName)$(TargetExt) + + + + + + + + false + + + + + + + + + X64 + .\../build/World.tlb + + + Disabled + WORLD;_DEBUG;_EQDEBUG;WIN32;_CONSOLE;EQ2;EQN_DEBUG;_CRT_SECURE_NO_DEPRECATE;%(PreprocessorDefinitions) + Sync + EnableFastChecks + MultiThreadedDebug + true + false + NotUsing + + + $(IntDir) + $(IntDir) + $(IntDir) + false + true + ProgramDatabase + 4996;%(DisableSpecificWarnings) + false + AnySuitable + true + false + + + + + _DEBUG;%(PreprocessorDefinitions) + 0x0409 + + + odbc32.lib;odbccp32.lib;ws2_32.lib;Zlibx64_debug.lib;mysqlclient.lib;%(AdditionalDependencies) + true + ..\..\source\LUA + LIBCMT;LIBC;%(IgnoreSpecificDefaultLibraries) + true + $(IntDir)$(TargetName).pdb + + + false + + + + + MachineX64 + true + true + Default + $(IntDir)$(TargetName).pgd + + + PromptImmediately + /ignore:4099 %(AdditionalOptions) + + + true + + + + + + + + + + .\../build/World.tlb + + + AnySuitable + WIN32;NDEBUG;_CONSOLE;WORLD;EQ2;_CRT_SECURE_NO_DEPRECATE;%(PreprocessorDefinitions) + true + Sync + MultiThreaded + false + false + NotUsing + + + $(IntDir) + $(IntDir) + $(IntDir) + false + true + ProgramDatabase + Full + true + Speed + true + true + Fast + + + + + NDEBUG;%(PreprocessorDefinitions) + 0x0409 + + + /MACHINE:I386 %(AdditionalOptions) + odbc32.lib;odbccp32.lib;ws2_32.lib;mysqlclient.lib;%(AdditionalDependencies) + $(OutDir)$(TargetName)$(TargetExt) + true + ..\..\source\LUA + libc;msvcrt;libcmtd;%(IgnoreSpecificDefaultLibraries) + true + $(IntDir)$(TargetName).pdb + false + + + + + false + + + true + true + UseLinkTimeCodeGeneration + $(IntDir)$(TargetName).pgd + $(IntDir)$(TargetName).intermediate.manifest + PromptImmediately + + + + + + + + + + X64 + .\../build/World.tlb + + + Disabled + AnySuitable + WIN32;NDEBUG;_CONSOLE;WORLD;EQ2;_CRT_SECURE_NO_DEPRECATE;%(PreprocessorDefinitions) + true + Sync + MultiThreaded + false + false + NotUsing + + + $(IntDir) + $(IntDir) + $(IntDir) + + + true + ProgramDatabase + false + Default + + + + + + + NDEBUG;%(PreprocessorDefinitions) + 0x0409 + + + true + + + ws2_32.lib;Zlibx64_release.lib;mysqlclient.lib;%(AdditionalDependencies) + $(OutDir)$(TargetName)_$(Platform)$(TargetExt) + true + ..\..\source\LUA + libc.lib; msvcrt.lib; libcd.lib; libcmtd.lib; msvcrtd.lib;%(IgnoreSpecificDefaultLibraries) + true + $(IntDir)$(TargetName)__$(Configuration)_$(Platform).pdb + false + + + + + false + + + MachineX64 + true + true + Default + $(IntDir)$(TargetName)__$(Configuration)_$(Platform).intermediate.manifest + $(IntDir)$(TargetName)__$(Configuration)_$(Platform).pgd + PromptImmediately + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/LICENSE.md b/LICENSE.md new file mode 100644 index 000000000..f288702d2 --- /dev/null +++ b/LICENSE.md @@ -0,0 +1,674 @@ + GNU GENERAL PUBLIC LICENSE + Version 3, 29 June 2007 + + Copyright (C) 2007 Free Software Foundation, Inc. + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The GNU General Public License is a free, copyleft license for +software and other kinds of works. + + The licenses for most software and other practical works are designed +to take away your freedom to share and change the works. By contrast, +the GNU General Public License is intended to guarantee your freedom to +share and change all versions of a program--to make sure it remains free +software for all its users. We, the Free Software Foundation, use the +GNU General Public License for most of our software; it applies also to +any other work released this way by its authors. You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +them if you wish), that you receive source code or can get it if you +want it, that you can change the software or use pieces of it in new +free programs, and that you know you can do these things. + + To protect your rights, we need to prevent others from denying you +these rights or asking you to surrender the rights. Therefore, you have +certain responsibilities if you distribute copies of the software, or if +you modify it: responsibilities to respect the freedom of others. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must pass on to the recipients the same +freedoms that you received. You must make sure that they, too, receive +or can get the source code. And you must show them these terms so they +know their rights. + + Developers that use the GNU GPL protect your rights with two steps: +(1) assert copyright on the software, and (2) offer you this License +giving you legal permission to copy, distribute and/or modify it. + + For the developers' and authors' protection, the GPL clearly explains +that there is no warranty for this free software. For both users' and +authors' sake, the GPL requires that modified versions be marked as +changed, so that their problems will not be attributed erroneously to +authors of previous versions. + + Some devices are designed to deny users access to install or run +modified versions of the software inside them, although the manufacturer +can do so. This is fundamentally incompatible with the aim of +protecting users' freedom to change the software. The systematic +pattern of such abuse occurs in the area of products for individuals to +use, which is precisely where it is most unacceptable. Therefore, we +have designed this version of the GPL to prohibit the practice for those +products. If such problems arise substantially in other domains, we +stand ready to extend this provision to those domains in future versions +of the GPL, as needed to protect the freedom of users. + + Finally, every program is threatened constantly by software patents. +States should not allow patents to restrict development and use of +software on general-purpose computers, but in those that do, we wish to +avoid the special danger that patents applied to a free program could +make it effectively proprietary. To prevent this, the GPL assures that +patents cannot be used to render the program non-free. + + The precise terms and conditions for copying, distribution and +modification follow. + + TERMS AND CONDITIONS + + 0. Definitions. + + "This License" refers to version 3 of the GNU General Public License. + + "Copyright" also means copyright-like laws that apply to other kinds of +works, such as semiconductor masks. + + "The Program" refers to any copyrightable work licensed under this +License. Each licensee is addressed as "you". "Licensees" and +"recipients" may be individuals or organizations. + + To "modify" a work means to copy from or adapt all or part of the work +in a fashion requiring copyright permission, other than the making of an +exact copy. The resulting work is called a "modified version" of the +earlier work or a work "based on" the earlier work. + + A "covered work" means either the unmodified Program or a work based +on the Program. + + To "propagate" a work means to do anything with it that, without +permission, would make you directly or secondarily liable for +infringement under applicable copyright law, except executing it on a +computer or modifying a private copy. Propagation includes copying, +distribution (with or without modification), making available to the +public, and in some countries other activities as well. + + To "convey" a work means any kind of propagation that enables other +parties to make or receive copies. Mere interaction with a user through +a computer network, with no transfer of a copy, is not conveying. + + An interactive user interface displays "Appropriate Legal Notices" +to the extent that it includes a convenient and prominently visible +feature that (1) displays an appropriate copyright notice, and (2) +tells the user that there is no warranty for the work (except to the +extent that warranties are provided), that licensees may convey the +work under this License, and how to view a copy of this License. If +the interface presents a list of user commands or options, such as a +menu, a prominent item in the list meets this criterion. + + 1. Source Code. + + The "source code" for a work means the preferred form of the work +for making modifications to it. "Object code" means any non-source +form of a work. + + A "Standard Interface" means an interface that either is an official +standard defined by a recognized standards body, or, in the case of +interfaces specified for a particular programming language, one that +is widely used among developers working in that language. + + The "System Libraries" of an executable work include anything, other +than the work as a whole, that (a) is included in the normal form of +packaging a Major Component, but which is not part of that Major +Component, and (b) serves only to enable use of the work with that +Major Component, or to implement a Standard Interface for which an +implementation is available to the public in source code form. A +"Major Component", in this context, means a major essential component +(kernel, window system, and so on) of the specific operating system +(if any) on which the executable work runs, or a compiler used to +produce the work, or an object code interpreter used to run it. + + The "Corresponding Source" for a work in object code form means all +the source code needed to generate, install, and (for an executable +work) run the object code and to modify the work, including scripts to +control those activities. However, it does not include the work's +System Libraries, or general-purpose tools or generally available free +programs which are used unmodified in performing those activities but +which are not part of the work. For example, Corresponding Source +includes interface definition files associated with source files for +the work, and the source code for shared libraries and dynamically +linked subprograms that the work is specifically designed to require, +such as by intimate data communication or control flow between those +subprograms and other parts of the work. + + The Corresponding Source need not include anything that users +can regenerate automatically from other parts of the Corresponding +Source. + + The Corresponding Source for a work in source code form is that +same work. + + 2. Basic Permissions. + + All rights granted under this License are granted for the term of +copyright on the Program, and are irrevocable provided the stated +conditions are met. This License explicitly affirms your unlimited +permission to run the unmodified Program. The output from running a +covered work is covered by this License only if the output, given its +content, constitutes a covered work. This License acknowledges your +rights of fair use or other equivalent, as provided by copyright law. + + You may make, run and propagate covered works that you do not +convey, without conditions so long as your license otherwise remains +in force. You may convey covered works to others for the sole purpose +of having them make modifications exclusively for you, or provide you +with facilities for running those works, provided that you comply with +the terms of this License in conveying all material for which you do +not control copyright. Those thus making or running the covered works +for you must do so exclusively on your behalf, under your direction +and control, on terms that prohibit them from making any copies of +your copyrighted material outside their relationship with you. + + Conveying under any other circumstances is permitted solely under +the conditions stated below. Sublicensing is not allowed; section 10 +makes it unnecessary. + + 3. Protecting Users' Legal Rights From Anti-Circumvention Law. + + No covered work shall be deemed part of an effective technological +measure under any applicable law fulfilling obligations under article +11 of the WIPO copyright treaty adopted on 20 December 1996, or +similar laws prohibiting or restricting circumvention of such +measures. + + When you convey a covered work, you waive any legal power to forbid +circumvention of technological measures to the extent such circumvention +is effected by exercising rights under this License with respect to +the covered work, and you disclaim any intention to limit operation or +modification of the work as a means of enforcing, against the work's +users, your or third parties' legal rights to forbid circumvention of +technological measures. + + 4. Conveying Verbatim Copies. + + You may convey verbatim copies of the Program's source code as you +receive it, in any medium, provided that you conspicuously and +appropriately publish on each copy an appropriate copyright notice; +keep intact all notices stating that this License and any +non-permissive terms added in accord with section 7 apply to the code; +keep intact all notices of the absence of any warranty; and give all +recipients a copy of this License along with the Program. + + You may charge any price or no price for each copy that you convey, +and you may offer support or warranty protection for a fee. + + 5. Conveying Modified Source Versions. + + You may convey a work based on the Program, or the modifications to +produce it from the Program, in the form of source code under the +terms of section 4, provided that you also meet all of these conditions: + + a) The work must carry prominent notices stating that you modified + it, and giving a relevant date. + + b) The work must carry prominent notices stating that it is + released under this License and any conditions added under section + 7. This requirement modifies the requirement in section 4 to + "keep intact all notices". + + c) You must license the entire work, as a whole, under this + License to anyone who comes into possession of a copy. This + License will therefore apply, along with any applicable section 7 + additional terms, to the whole of the work, and all its parts, + regardless of how they are packaged. This License gives no + permission to license the work in any other way, but it does not + invalidate such permission if you have separately received it. + + d) If the work has interactive user interfaces, each must display + Appropriate Legal Notices; however, if the Program has interactive + interfaces that do not display Appropriate Legal Notices, your + work need not make them do so. + + A compilation of a covered work with other separate and independent +works, which are not by their nature extensions of the covered work, +and which are not combined with it such as to form a larger program, +in or on a volume of a storage or distribution medium, is called an +"aggregate" if the compilation and its resulting copyright are not +used to limit the access or legal rights of the compilation's users +beyond what the individual works permit. Inclusion of a covered work +in an aggregate does not cause this License to apply to the other +parts of the aggregate. + + 6. Conveying Non-Source Forms. + + You may convey a covered work in object code form under the terms +of sections 4 and 5, provided that you also convey the +machine-readable Corresponding Source under the terms of this License, +in one of these ways: + + a) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by the + Corresponding Source fixed on a durable physical medium + customarily used for software interchange. + + b) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by a + written offer, valid for at least three years and valid for as + long as you offer spare parts or customer support for that product + model, to give anyone who possesses the object code either (1) a + copy of the Corresponding Source for all the software in the + product that is covered by this License, on a durable physical + medium customarily used for software interchange, for a price no + more than your reasonable cost of physically performing this + conveying of source, or (2) access to copy the + Corresponding Source from a network server at no charge. + + c) Convey individual copies of the object code with a copy of the + written offer to provide the Corresponding Source. This + alternative is allowed only occasionally and noncommercially, and + only if you received the object code with such an offer, in accord + with subsection 6b. + + d) Convey the object code by offering access from a designated + place (gratis or for a charge), and offer equivalent access to the + Corresponding Source in the same way through the same place at no + further charge. You need not require recipients to copy the + Corresponding Source along with the object code. If the place to + copy the object code is a network server, the Corresponding Source + may be on a different server (operated by you or a third party) + that supports equivalent copying facilities, provided you maintain + clear directions next to the object code saying where to find the + Corresponding Source. Regardless of what server hosts the + Corresponding Source, you remain obligated to ensure that it is + available for as long as needed to satisfy these requirements. + + e) Convey the object code using peer-to-peer transmission, provided + you inform other peers where the object code and Corresponding + Source of the work are being offered to the general public at no + charge under subsection 6d. + + A separable portion of the object code, whose source code is excluded +from the Corresponding Source as a System Library, need not be +included in conveying the object code work. + + A "User Product" is either (1) a "consumer product", which means any +tangible personal property which is normally used for personal, family, +or household purposes, or (2) anything designed or sold for incorporation +into a dwelling. In determining whether a product is a consumer product, +doubtful cases shall be resolved in favor of coverage. For a particular +product received by a particular user, "normally used" refers to a +typical or common use of that class of product, regardless of the status +of the particular user or of the way in which the particular user +actually uses, or expects or is expected to use, the product. A product +is a consumer product regardless of whether the product has substantial +commercial, industrial or non-consumer uses, unless such uses represent +the only significant mode of use of the product. + + "Installation Information" for a User Product means any methods, +procedures, authorization keys, or other information required to install +and execute modified versions of a covered work in that User Product from +a modified version of its Corresponding Source. The information must +suffice to ensure that the continued functioning of the modified object +code is in no case prevented or interfered with solely because +modification has been made. + + If you convey an object code work under this section in, or with, or +specifically for use in, a User Product, and the conveying occurs as +part of a transaction in which the right of possession and use of the +User Product is transferred to the recipient in perpetuity or for a +fixed term (regardless of how the transaction is characterized), the +Corresponding Source conveyed under this section must be accompanied +by the Installation Information. But this requirement does not apply +if neither you nor any third party retains the ability to install +modified object code on the User Product (for example, the work has +been installed in ROM). + + The requirement to provide Installation Information does not include a +requirement to continue to provide support service, warranty, or updates +for a work that has been modified or installed by the recipient, or for +the User Product in which it has been modified or installed. Access to a +network may be denied when the modification itself materially and +adversely affects the operation of the network or violates the rules and +protocols for communication across the network. + + Corresponding Source conveyed, and Installation Information provided, +in accord with this section must be in a format that is publicly +documented (and with an implementation available to the public in +source code form), and must require no special password or key for +unpacking, reading or copying. + + 7. Additional Terms. + + "Additional permissions" are terms that supplement the terms of this +License by making exceptions from one or more of its conditions. +Additional permissions that are applicable to the entire Program shall +be treated as though they were included in this License, to the extent +that they are valid under applicable law. If additional permissions +apply only to part of the Program, that part may be used separately +under those permissions, but the entire Program remains governed by +this License without regard to the additional permissions. + + When you convey a copy of a covered work, you may at your option +remove any additional permissions from that copy, or from any part of +it. (Additional permissions may be written to require their own +removal in certain cases when you modify the work.) You may place +additional permissions on material, added by you to a covered work, +for which you have or can give appropriate copyright permission. + + Notwithstanding any other provision of this License, for material you +add to a covered work, you may (if authorized by the copyright holders of +that material) supplement the terms of this License with terms: + + a) Disclaiming warranty or limiting liability differently from the + terms of sections 15 and 16 of this License; or + + b) Requiring preservation of specified reasonable legal notices or + author attributions in that material or in the Appropriate Legal + Notices displayed by works containing it; or + + c) Prohibiting misrepresentation of the origin of that material, or + requiring that modified versions of such material be marked in + reasonable ways as different from the original version; or + + d) Limiting the use for publicity purposes of names of licensors or + authors of the material; or + + e) Declining to grant rights under trademark law for use of some + trade names, trademarks, or service marks; or + + f) Requiring indemnification of licensors and authors of that + material by anyone who conveys the material (or modified versions of + it) with contractual assumptions of liability to the recipient, for + any liability that these contractual assumptions directly impose on + those licensors and authors. + + All other non-permissive additional terms are considered "further +restrictions" within the meaning of section 10. If the Program as you +received it, or any part of it, contains a notice stating that it is +governed by this License along with a term that is a further +restriction, you may remove that term. If a license document contains +a further restriction but permits relicensing or conveying under this +License, you may add to a covered work material governed by the terms +of that license document, provided that the further restriction does +not survive such relicensing or conveying. + + If you add terms to a covered work in accord with this section, you +must place, in the relevant source files, a statement of the +additional terms that apply to those files, or a notice indicating +where to find the applicable terms. + + Additional terms, permissive or non-permissive, may be stated in the +form of a separately written license, or stated as exceptions; +the above requirements apply either way. + + 8. Termination. + + You may not propagate or modify a covered work except as expressly +provided under this License. Any attempt otherwise to propagate or +modify it is void, and will automatically terminate your rights under +this License (including any patent licenses granted under the third +paragraph of section 11). + + However, if you cease all violation of this License, then your +license from a particular copyright holder is reinstated (a) +provisionally, unless and until the copyright holder explicitly and +finally terminates your license, and (b) permanently, if the copyright +holder fails to notify you of the violation by some reasonable means +prior to 60 days after the cessation. + + Moreover, your license from a particular copyright holder is +reinstated permanently if the copyright holder notifies you of the +violation by some reasonable means, this is the first time you have +received notice of violation of this License (for any work) from that +copyright holder, and you cure the violation prior to 30 days after +your receipt of the notice. + + Termination of your rights under this section does not terminate the +licenses of parties who have received copies or rights from you under +this License. If your rights have been terminated and not permanently +reinstated, you do not qualify to receive new licenses for the same +material under section 10. + + 9. Acceptance Not Required for Having Copies. + + You are not required to accept this License in order to receive or +run a copy of the Program. Ancillary propagation of a covered work +occurring solely as a consequence of using peer-to-peer transmission +to receive a copy likewise does not require acceptance. However, +nothing other than this License grants you permission to propagate or +modify any covered work. These actions infringe copyright if you do +not accept this License. Therefore, by modifying or propagating a +covered work, you indicate your acceptance of this License to do so. + + 10. Automatic Licensing of Downstream Recipients. + + Each time you convey a covered work, the recipient automatically +receives a license from the original licensors, to run, modify and +propagate that work, subject to this License. You are not responsible +for enforcing compliance by third parties with this License. + + An "entity transaction" is a transaction transferring control of an +organization, or substantially all assets of one, or subdividing an +organization, or merging organizations. If propagation of a covered +work results from an entity transaction, each party to that +transaction who receives a copy of the work also receives whatever +licenses to the work the party's predecessor in interest had or could +give under the previous paragraph, plus a right to possession of the +Corresponding Source of the work from the predecessor in interest, if +the predecessor has it or can get it with reasonable efforts. + + You may not impose any further restrictions on the exercise of the +rights granted or affirmed under this License. For example, you may +not impose a license fee, royalty, or other charge for exercise of +rights granted under this License, and you may not initiate litigation +(including a cross-claim or counterclaim in a lawsuit) alleging that +any patent claim is infringed by making, using, selling, offering for +sale, or importing the Program or any portion of it. + + 11. Patents. + + A "contributor" is a copyright holder who authorizes use under this +License of the Program or a work on which the Program is based. The +work thus licensed is called the contributor's "contributor version". + + A contributor's "essential patent claims" are all patent claims +owned or controlled by the contributor, whether already acquired or +hereafter acquired, that would be infringed by some manner, permitted +by this License, of making, using, or selling its contributor version, +but do not include claims that would be infringed only as a +consequence of further modification of the contributor version. For +purposes of this definition, "control" includes the right to grant +patent sublicenses in a manner consistent with the requirements of +this License. + + Each contributor grants you a non-exclusive, worldwide, royalty-free +patent license under the contributor's essential patent claims, to +make, use, sell, offer for sale, import and otherwise run, modify and +propagate the contents of its contributor version. + + In the following three paragraphs, a "patent license" is any express +agreement or commitment, however denominated, not to enforce a patent +(such as an express permission to practice a patent or covenant not to +sue for patent infringement). To "grant" such a patent license to a +party means to make such an agreement or commitment not to enforce a +patent against the party. + + If you convey a covered work, knowingly relying on a patent license, +and the Corresponding Source of the work is not available for anyone +to copy, free of charge and under the terms of this License, through a +publicly available network server or other readily accessible means, +then you must either (1) cause the Corresponding Source to be so +available, or (2) arrange to deprive yourself of the benefit of the +patent license for this particular work, or (3) arrange, in a manner +consistent with the requirements of this License, to extend the patent +license to downstream recipients. "Knowingly relying" means you have +actual knowledge that, but for the patent license, your conveying the +covered work in a country, or your recipient's use of the covered work +in a country, would infringe one or more identifiable patents in that +country that you have reason to believe are valid. + + If, pursuant to or in connection with a single transaction or +arrangement, you convey, or propagate by procuring conveyance of, a +covered work, and grant a patent license to some of the parties +receiving the covered work authorizing them to use, propagate, modify +or convey a specific copy of the covered work, then the patent license +you grant is automatically extended to all recipients of the covered +work and works based on it. + + A patent license is "discriminatory" if it does not include within +the scope of its coverage, prohibits the exercise of, or is +conditioned on the non-exercise of one or more of the rights that are +specifically granted under this License. You may not convey a covered +work if you are a party to an arrangement with a third party that is +in the business of distributing software, under which you make payment +to the third party based on the extent of your activity of conveying +the work, and under which the third party grants, to any of the +parties who would receive the covered work from you, a discriminatory +patent license (a) in connection with copies of the covered work +conveyed by you (or copies made from those copies), or (b) primarily +for and in connection with specific products or compilations that +contain the covered work, unless you entered into that arrangement, +or that patent license was granted, prior to 28 March 2007. + + Nothing in this License shall be construed as excluding or limiting +any implied license or other defenses to infringement that may +otherwise be available to you under applicable patent law. + + 12. No Surrender of Others' Freedom. + + If conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot convey a +covered work so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you may +not convey it at all. For example, if you agree to terms that obligate you +to collect a royalty for further conveying from those to whom you convey +the Program, the only way you could satisfy both those terms and this +License would be to refrain entirely from conveying the Program. + + 13. Use with the GNU Affero General Public License. + + Notwithstanding any other provision of this License, you have +permission to link or combine any covered work with a work licensed +under version 3 of the GNU Affero General Public License into a single +combined work, and to convey the resulting work. The terms of this +License will continue to apply to the part which is the covered work, +but the special requirements of the GNU Affero General Public License, +section 13, concerning interaction through a network will apply to the +combination as such. + + 14. Revised Versions of this License. + + The Free Software Foundation may publish revised and/or new versions of +the GNU General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + + Each version is given a distinguishing version number. If the +Program specifies that a certain numbered version of the GNU General +Public License "or any later version" applies to it, you have the +option of following the terms and conditions either of that numbered +version or of any later version published by the Free Software +Foundation. If the Program does not specify a version number of the +GNU General Public License, you may choose any version ever published +by the Free Software Foundation. + + If the Program specifies that a proxy can decide which future +versions of the GNU General Public License can be used, that proxy's +public statement of acceptance of a version permanently authorizes you +to choose that version for the Program. + + Later license versions may give you additional or different +permissions. However, no additional obligations are imposed on any +author or copyright holder as a result of your choosing to follow a +later version. + + 15. Disclaimer of Warranty. + + THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY +APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT +HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY +OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, +THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM +IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF +ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. Limitation of Liability. + + IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS +THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY +GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE +USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF +DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD +PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), +EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF +SUCH DAMAGES. + + 17. Interpretation of Sections 15 and 16. + + If the disclaimer of warranty and limitation of liability provided +above cannot be given local legal effect according to their terms, +reviewing courts shall apply local law that most closely approximates +an absolute waiver of all civil liability in connection with the +Program, unless a warranty or assumption of liability accompanies a +copy of the Program in return for a fee. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +state the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . + +Also add information on how to contact you by electronic and paper mail. + + If the program does terminal interaction, make it output a short +notice like this when it starts in an interactive mode: + + Copyright (C) + This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, your program's commands +might be different; for a GUI interface, you would use an "about box". + + You should also get your employer (if you work as a programmer) or school, +if any, to sign a "copyright disclaimer" for the program, if necessary. +For more information on this, and how to apply and follow the GNU GPL, see +. + + The GNU General Public License does not permit incorporating your program +into proprietary programs. If your program is a subroutine library, you +may consider it more useful to permit linking proprietary applications with +the library. If this is what you want to do, use the GNU Lesser General +Public License instead of this License. But first, please read +. diff --git a/README.md b/README.md index 3eeacc6b3..dbe9eff28 100644 --- a/README.md +++ b/README.md @@ -1,2 +1,86 @@ -# EQ2EMu +# EQ2Emulator Project +Based on https://www.eq2emulator.net/ visit https://www.eqpvp.com/ or https://www.zeklabs.com/ for more details + +## Getting Started (Client) + +1. Install Game: Install AoM client available on Steam: https://store.steampowered.com/app/201230/EverQuest_II/ + +2. Update Login Server: Navigate to EverQuest install directory, eg. C:\Steam\steamapps\common\EverQuest 2 + a. Open eq2_default.ini with your Notepad or other flavor editor + b. Replace first line with 'cl_ls_address a.b.c.d' - where a.b.c.d is one or many IPv4 addresses + eg. cl_ls_address 192.168.0.2 + c. Save Changes + d. Always Open EverQuest2.exe to start the game, **DO NOT USE EQ2.EXE** + e. Splash login account / name is one provided by Login Server or otherwise created in 'Getting Started (Server)' Step 4 below. + +## Getting Started (Server) + +Note: These instructions for now will be primarily based in Windows, but any Linux savvy individual should be able to translate the steps + +1. Software Requirement: MariaDB (MySQL DB, etc.) to allow EQ2Emulator LoginServer / WorldServer to interface +Obtain Latest Install (be sure to select OS on the right hand side as default will be a linux distro): https://mariadb.com/downloads/ +Installation Instructions for MariaDB can be found here: https://mariadb.com/kb/en/installing-mariadb-msi-packages-on-windows/ +Note: Be sure to remember the user and password defined in the installation!! Used in later steps. + +2. Open MySQL Client: Login using the password (assigned to root or other default user) setup in the MariaDB installation. + + +3. Source in Databases: Issue the following commands to setup EQ2Emulator's databases for login (eq2ls) and world (eq2emu). + a. You must first go into source C:\[YOUREQ2EMUGITSRC]\DB\ and extract world_db.zip 'Here' into the same \DB\ directory. + b. Run the following commands in the MySQL Client prompt: +create database eq2ls; +create database eq2emu; +\u eq2ls +source C:\[YOUREQ2EMUGITSRC]\DB\ls_db.sql +\u eq2emu +source C:\[YOUREQ2EMUGITSRC]\DB\world_db.sql + + +4. Add Game Account / World Account: Using the same MySQL Client, continue on creating your accounts + +Game Login Account: +insert into account set name='test',passwd=md5('test'); + +World Login Account (LoginServer.ini): +insert into login_worldservers set name='TestLabs',account='testlabs',description='TestLabs',password=md5('testpass'),login_version='0.7.3-dev'; + + +5. Open the C:\[YOUREQ2EMUGITSRC]\server\LoginServer.ini file (Notepad or other flavor editor) + + Note: Steps to find your LAN IP (command prompt, ipconfig, IPv4 address): https://www.lifewire.com/ip-config-818377 + Find your WAN (Internet) IP: https://www.google.com/search?q=what+is+my+ip + a. Modify the [LoginServer] section: + loginserver - LAN/WAN IP of your login server to use the login_worldservers account against + worldname - World Name that matches the 'name' column defined in login_worldservers (eg. TestLabs) + worldaddress - LAN/WAN IP of your world server + internalworldaddress - LAN IP of your world server + account - Column 'account' defined in login_worldservers (eg. testlabs) + password - Column 'password' in login_worldservers (eg. testpass) + b. Save Changes + +6. Open the C:\[YOUREQ2EMUGITSRC]\server\login_db.ini file (Notepad or other flavor editor) + a. Modify the [Database] section: + host - Should remain localhost unless you have your MariaDB server reside on another host IP + user - When installing MariaDB the user defined (default is 'root') should be set here + password - When installing MariaDB use the password defined along with the default user. + database - This field should remain eq2ls unless changed by the user to use a custom database name. + +7. Open the C:\[YOUREQ2EMUGITSRC]\server\world_db.ini file (Notepad or other flavor editor) + a. Modify the [Database] section: + host - Should remain localhost or 127.0.0.1 unless you have your MariaDB server reside on another host IP + user - When installing MariaDB the user defined (default is 'root') should be set here + password - When installing MariaDB use the password defined along with the default user. + database - This field should remain eq2emu unless changed by the user to use a custom database name. + +### Building/Compiling + +TBD + +## Authors + +Authors reside at https://www.zeklabs.com/ and https://www.eqpvp.com/ + +## License + +This project is licensed under the GNU General Public License - see the [LICENSE.md](LICENSE.md) file for details \ No newline at end of file diff --git a/server/CommonStructs.xml b/server/CommonStructs.xml new file mode 100644 index 000000000..823e413c5 --- /dev/null +++ b/server/CommonStructs.xml @@ -0,0 +1,508 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/server/EQ2_Structs.xml b/server/EQ2_Structs.xml new file mode 100644 index 000000000..a5ae15989 --- /dev/null +++ b/server/EQ2_Structs.xml @@ -0,0 +1,10 @@ + + + + + + + + diff --git a/server/ItemScripts/ABookOfGnollishOrders.lua b/server/ItemScripts/ABookOfGnollishOrders.lua new file mode 100644 index 000000000..e87f82bc0 --- /dev/null +++ b/server/ItemScripts/ABookOfGnollishOrders.lua @@ -0,0 +1,18 @@ +--[[ + Script Name : ItemScripts/ABookOfGnollishOrders.lua + Script Purpose : A Book of Gnollish Orders + Script Author : Scatman + Script Date : 2009.10.08 + Script Notes : +--]] + +local QUEST_1_CONSULBREE = 223 + +function examined(Item, Player) + if HasQuest(Player, QUEST_1_CONSULBREE) and GetQuestStep(Player, QUEST_1_CONSULBREE) == 2 then + SetStepComplete(Player, QUEST_1_CONSULBREE, 2) + end + conversation = CreateConversation() + AddConversationOption(conversation, "Put the book away.") + StartDialogConversation(conversation, 2, Item, Player, "This is the book of gnollish orders that Bree was searching for. There is a symbol on each page of a paw held to an eye.") +end \ No newline at end of file diff --git a/server/ItemScripts/AFancyFirework.lua b/server/ItemScripts/AFancyFirework.lua new file mode 100644 index 000000000..8c238d0c1 --- /dev/null +++ b/server/ItemScripts/AFancyFirework.lua @@ -0,0 +1,10 @@ +--[[ + Script Name : ItemScripts/afancyfirework.lua + Script Purpose : + Script Author : Neatz09 + Script Date : 8.18.2019 + Script Notes : +--]] +function used(Item, Player) +CastSpell(Player, 5004, 1) +end \ No newline at end of file diff --git a/server/ItemScripts/ANoteFromTheQeynosQuartermaster.lua b/server/ItemScripts/ANoteFromTheQeynosQuartermaster.lua new file mode 100644 index 000000000..f8d363411 --- /dev/null +++ b/server/ItemScripts/ANoteFromTheQeynosQuartermaster.lua @@ -0,0 +1,32 @@ +--[[ + Script Name : ItemScripts/ANoteFromTheQeynosQuartermaster.lua + Script Purpose : A Note from the Qeynos Quartermaster - Adventures in Antonica + Script Author : Scatman + Script Date : 2009.10.18 + Script Notes : +--]] + +local QUEST_1_ANTONICA = 300 + +function examined(Item, Player) + if not HasQuest(Player, QUEST_1_ANTONICA) and not HasCompletedQuest(Player, QUEST_1_ANTONICA) then + OfferQuest(nil, Player, QUEST_1_ANTONICA) + end + conversation = CreateConversation() + AddConversationOption(conversation, "continue.", "Continue") + AddConversationOption(conversation, "Put note away.") + StartDialogConversation(conversation, 2, Item, Player, "Greetings,\n\nThe city of Qeynos congratulates you on your recent accomplishments! Though certain amenties are provided to you now that you are a citizen of Qeynos, you may want to educate yourself on the everyday tasks that can provide you a path to other adventures. There are those you will find in Antonica that are loyal to Qeynos and will provide assistance with other things like food and drink if you require sustenance on your adventures.") +end + +function Continue(Item, Player) + conversation = CreateConversation() + AddConversationOption(conversation, "continue.", "Continue2") + AddConversationOption(conversation, "Put note away.") + StartDialogConversation(conversation, 2, Item, Player, "Masty Rollingpin is a retired cook for the Qeynos Guard and now assists weary travelers on the road with good, wholesome food. She usually only requires some chores around Sayer's Outfitters, which you can find on the road east of our good city. Her Coldwind chowder is known throughout the land and is a favorite of the Qeynos Guard.") +end + +function Continue2(Item, Player) + conversation = CreateConversation() + AddConversationOption(conversation, "Put note away.") + StartDialogConversation(conversation, 2, Item, Player, "Haddek Vimki has been providing refreshments for travelers at Sayer's Outfitters for many years now and is always willing to lend a hand. His beer and spirits are legendary. Hopefully you will find this information useful on your path to adventure. Once again, congratulations, and good luck!\n~The Quartermaster") +end \ No newline at end of file diff --git a/server/ItemScripts/ATwitchingCrabClaw.lua b/server/ItemScripts/ATwitchingCrabClaw.lua new file mode 100644 index 000000000..9489de723 --- /dev/null +++ b/server/ItemScripts/ATwitchingCrabClaw.lua @@ -0,0 +1,6 @@ +local QUEST = 385 +function examined(Item, Player) + if CanReceiveQuest(Player, QUEST) + then OfferQuest(NPC, Player, QUEST) +end +end \ No newline at end of file diff --git a/server/ItemScripts/AyrDalLanguagePrimer.lua b/server/ItemScripts/AyrDalLanguagePrimer.lua new file mode 100644 index 000000000..2c5beb30e --- /dev/null +++ b/server/ItemScripts/AyrDalLanguagePrimer.lua @@ -0,0 +1,16 @@ +--[[ + Script Name : Ayr'Dal Language Primer + Script Purpose : + Script Author : Neatz09 + Script Date : 1/19/2019 + Script Notes : +--]] + +function obtained(Item, Spawn) +if not HasLanguage(Spawn,7) then + AddLanguage(Spawn, 7) + SendMessage(Spawn, "Ayr'Dal", "White") + RemoveItem(Spawn, 901) + end + + end \ No newline at end of file diff --git a/server/ItemScripts/BetaVoucher.lua b/server/ItemScripts/BetaVoucher.lua new file mode 100644 index 000000000..e69de29bb diff --git a/server/ItemScripts/Bogchild's_Iced_Trap.lua b/server/ItemScripts/Bogchild's_Iced_Trap.lua new file mode 100644 index 000000000..81f7d3412 --- /dev/null +++ b/server/ItemScripts/Bogchild's_Iced_Trap.lua @@ -0,0 +1,19 @@ +--[[ + Script Name : ItemScripts/Bogchild's_Iced_Trap.lua + Script Purpose : Handles the item "Bogchild's Iced Trap" + Script Author : theFoof + Script Date : 2013.5.20 + Script Notes : +--]] +function used(Item, Player) + target = GetTarget(Player) + if GetName(target) == 'a snowpack' or GetName(target) == 'an iceflow' then + if IsInCombat(target) then + SendMessage(Player, "You can only use this on an iceflow or snowpack that is not currently engaged in combat.", "yellow") + else + CastEntityCommand(Player, target, 1274, "Bogchild's Iced Trap") + end + else + SendMessage(Player, "You can only use this on an iceflow or a snowpack.", "yellow") + end +end \ No newline at end of file diff --git a/server/ItemScripts/BowlOfTerratrodderChuck.lua b/server/ItemScripts/BowlOfTerratrodderChuck.lua new file mode 100644 index 000000000..90393c69f --- /dev/null +++ b/server/ItemScripts/BowlOfTerratrodderChuck.lua @@ -0,0 +1,23 @@ +--[[ + Script Name : ItemScripts/BowlOfTerratrodderChuck.lua + Script Purpose : Handles the item "Bowl of Terratrodder Chuck" + Script Author : jakejp + Script Date : 6/10/2018 + Script Notes : +--]] + +local TerratrodderChuck = 45400 + +local AMindOfMyOwn = 294 + +function used(Item, Player) + if HasQuest(Player, AMindOfMyOwn) then + if GetZoneID(GetZone(Player)) == 108 then + + RemoveItem(Player, TerratrodderChuck) + local bucket = SpawnMob(GetZone(Player), 1081002, 1, GetX(Player), GetY(Player), GetZ(Player), GetHeading(Player)) + AddSpawnAccess(bucket, Player) + SetTempVariable(bucket, "PlayerPointer", Player) + end + end +end diff --git a/server/ItemScripts/BundleofSpiritWards.lua b/server/ItemScripts/BundleofSpiritWards.lua new file mode 100644 index 000000000..a056e1dac --- /dev/null +++ b/server/ItemScripts/BundleofSpiritWards.lua @@ -0,0 +1,35 @@ +--[[ + Script Name : ItemScripts/BundleofSpiritsWards.lua + Script Purpose : for the quest item "Bundle of Spirits" + Script Author : theFoof + Script Date : 2013.5.28 + Script Notes : +--]] + +local CallingBack = 35 + +function used(Item, Player) + if HasQuest(Player, CallingBack) then + if GetZoneID(GetZone(Player)) == 470 then + local X = GetX(Player) + local Z = GetZ(Player) + if X >= 595 and X <= 605 then + if Z >= -268 and Z <= -258 then + SetStepComplete(Player, CallingBack, 4) + end + elseif X >= 576 and X <= 586 and Z >= -344 and Z <= -334 then + SetStepComplete(Player, CallingBack, 1) + elseif X >= 502 and X <= 512 then + if Z >= -238 and Z <= -228 then + SetStepComplete(Player, CallingBack, 2) + end + elseif X >= 579 and X <= 589 and Z >= -160 and Z <= -150 then + SetStepComplete(Player, CallingBack, 3) + elseif X >= 576 and X <= 586 and Z >= -217 and Z <= -207 then + SetStepComplete(Player, CallingBack, 5) + else + SendMessage(Player, "You cannot place a ward here.", "yellow") + end + end + end +end \ No newline at end of file diff --git a/server/ItemScripts/CrustoseRepellentPrototype.lua b/server/ItemScripts/CrustoseRepellentPrototype.lua new file mode 100644 index 000000000..5b6593caf --- /dev/null +++ b/server/ItemScripts/CrustoseRepellentPrototype.lua @@ -0,0 +1,18 @@ +--[[ + Script Name : ItemScripts/CrustoseRepellentPrototype.lua + Script Purpose : Handles the item "crustose repellent prototype" + Script Author : theFoof + Script Date : 2013.5.12 + Script Notes : +--]] + +function used(Item, Player) + local target = GetTarget(Player) + if GetName(target) == "a crustose sporetender" then + CastEntityCommand(Player, target, 1269, "Spray") + elseif IsInCombat(target) and GetName(target) == "a crustose sporetender" then + SendMessage(Player, "This effect cannot be used on a crustose sporetender which is in combat.", "yellow") + elseif GetName(target) ~= "a crustose sporetender" then + SendMessage(Player, "You can only use the crustose repellent against crustose sporetenders.", "yellow") + end +end \ No newline at end of file diff --git a/server/ItemScripts/Darkheart.lua b/server/ItemScripts/Darkheart.lua new file mode 100644 index 000000000..40fbc04f7 --- /dev/null +++ b/server/ItemScripts/Darkheart.lua @@ -0,0 +1,28 @@ +--[[ + Script Name : ItemScripts/DarkHeart.lua + Script Purpose : Necromancer Darkheart(Summoned Item) + Script Author : Neatz09 + Script Date : 10/16/2019 + Script Notes : +--]] +local SPELLID = 5013 +local SPELL_TIERS = { [45872] = 1, [45870] = 2, [45871] = 3, [45874] = 4, [45869] = 5, [45873] = 7, [45875] = 9 } +function obtained(Item, Player) +end + +function removed(Item, Player) +end + +function destroyed(Item, Player) +end + +function examined(Item, Player) +end + +function used(Item, Player) +end + +function used(Item, Player) + local item_id = GetItemID(Item) + CastSpell(Player, SPELLID, SPELL_TIERS[item_id]) +end \ No newline at end of file diff --git a/server/ItemScripts/DisassembledStorageBox.lua b/server/ItemScripts/DisassembledStorageBox.lua new file mode 100644 index 000000000..7bee6debe --- /dev/null +++ b/server/ItemScripts/DisassembledStorageBox.lua @@ -0,0 +1,23 @@ +--[[ + Script Name : ItemScripts/DisassembledStorageBox.lua + Script Purpose : Harvest Storage Bank Box + Script Author : Ememjr + Script Date : 2017.03.30 + Script Notes : +--]] + + + +function examined(Item, Player) + conversation = CreateConversation() + AddConversationOption(conversation, "Assemble the Storage box.","Unpack") + AddConversationOption(conversation, "Put Storage Box away.") + StartDialogConversation(conversation, 2, Item, Player, "Be sure you are near a bank as the assembled Storage Box is Heavy.") +end +function Unpack(Item, Player) + SummonItem(Player,20731,1) + if HasItem(Player, 22227) then + RemoveItem(Player, 22227) + end + CloseItemConversation(Item,Player) +end \ No newline at end of file diff --git a/server/ItemScripts/DrawingRay.lua b/server/ItemScripts/DrawingRay.lua new file mode 100644 index 000000000..4e41cbc64 --- /dev/null +++ b/server/ItemScripts/DrawingRay.lua @@ -0,0 +1,24 @@ +--[[ + Script Name : ItemScripts/DrawingRay.lua + Script Purpose : Drawing Ray + Script Author : Scatman + Script Date : 2009.10.18 + Script Notes : +--]] + +local CAVES_CONSUL_BREE_QUEST_3 = 225 + +function used(Item, Player) + if HasQuest(Player, CAVES_CONSUL_BREE_QUEST_3) and not QuestStepIsComplete(Player, CAVES_CONSUL_BREE_QUEST_3, 4) then + spawn = GetTarget(Player) + if spawn ~= nil then + + -- river behemoth remains + if GetSpawnID(spawn) == 1970147 then + AddPrimaryEntityCommand(Player, spawn, "Remove River Stone") + else + SendMessage(Player, "The Drawing Ray has no effect. Emma said it must be used on the remains of a river behemoth.") + end + end + end +end \ No newline at end of file diff --git a/server/ItemScripts/DwarvenLanguagePrimer.lua b/server/ItemScripts/DwarvenLanguagePrimer.lua new file mode 100644 index 000000000..45ecd520c --- /dev/null +++ b/server/ItemScripts/DwarvenLanguagePrimer.lua @@ -0,0 +1,17 @@ +--[[ + Script Name : Dwarven Language Primer + Script Purpose : + Script Author : + Script Date : 1/19/2019 + Script Notes : +--]] + +function obtained(Item, Spawn) +if not HasLanguage(Spawn,3) then + AddLanguage(Spawn, 3) + SendMessage(Spawn, "Dwarven", "White") + RemoveItem(Spawn, 900) + end + + end + \ No newline at end of file diff --git a/server/ItemScripts/ErudianLanguagePrimer.lua b/server/ItemScripts/ErudianLanguagePrimer.lua new file mode 100644 index 000000000..5ccf335b1 --- /dev/null +++ b/server/ItemScripts/ErudianLanguagePrimer.lua @@ -0,0 +1,16 @@ +--[[ + Script Name : Erudian Language Primer + Script Purpose : + Script Author : Neatz09 + Script Date : 1/19/2019 + Script Notes : +--]] + +function obtained(Item, Spawn) +if not HasLanguage(Spawn,4) then + AddLanguage(Spawn, 4) + SendMessage(Spawn, "Erudian", "White") + RemoveItem(Spawn, 909) +end + +end \ No newline at end of file diff --git a/server/ItemScripts/FabricPatch.lua b/server/ItemScripts/FabricPatch.lua new file mode 100644 index 000000000..247585387 --- /dev/null +++ b/server/ItemScripts/FabricPatch.lua @@ -0,0 +1,20 @@ +--[[ + Script Name : ItemScripts/FabricPatch.lua + Script Purpose : Offers and updates the language quest, "The Patchwork Tapestry" + Script Author : Scatman + Script Date : 2009.10.08 + Script Notes : +--]] + +local LANGUAGE_QUEST = 299 + +function examined(Item, Player) + if not HasQuest(Player, LANGUAGE_QUEST) and not HasCompletedQuest(Player, LANGUAGE_QUEST) then + OfferQuest(nil, Player, LANGUAGE_QUEST) + + -- Fabric Patch + if HasItem(Player, 6079) then + RemoveItem(Player, 6079) + end + end +end \ No newline at end of file diff --git a/server/ItemScripts/FeirDalLanguagePrimer.lua b/server/ItemScripts/FeirDalLanguagePrimer.lua new file mode 100644 index 000000000..8dbf76745 --- /dev/null +++ b/server/ItemScripts/FeirDalLanguagePrimer.lua @@ -0,0 +1,16 @@ +--[[ + Script Name : Feir'Dal Language Primer + Script Purpose : + Script Author : Neatz09 + Script Date : 1/19/2019 + Script Notes : +--]] + +function obtained(Item, Spawn) +if not HasLanguage(Spawn,16) then + AddLanguage(Spawn, 16) + SendMessage(Spawn, "Feir'Dal", "White") + RemoveItem(Spawn, 902) +end + +end \ No newline at end of file diff --git a/server/ItemScripts/FireworkConfettiShower.lua b/server/ItemScripts/FireworkConfettiShower.lua new file mode 100644 index 000000000..f3ef475d3 --- /dev/null +++ b/server/ItemScripts/FireworkConfettiShower.lua @@ -0,0 +1,11 @@ +--[[ + Script Name : ItemScripts/FireworkConfettiShower.lua + Script Purpose : + Script Author : Neatz09 + Script Date : 8.18.2019 + Script Notes : +--]] +function used(Item, Player) +CastSpell(Player, 5005, 1) + +end \ No newline at end of file diff --git a/server/ItemScripts/FireworkPrismaticBurst.lua b/server/ItemScripts/FireworkPrismaticBurst.lua new file mode 100644 index 000000000..8e55962e1 --- /dev/null +++ b/server/ItemScripts/FireworkPrismaticBurst.lua @@ -0,0 +1,11 @@ +--[[ + Script Name : ItemScripts/FireworkPrismaticBurst.lua + Script Purpose : + Script Author : Neatz09 + Script Date : 8.18.2019 + Script Notes : +--]] +function used(Item, Player) +CastSpell(Player, 5006, 1) + +end \ No newline at end of file diff --git a/server/ItemScripts/FireworkRosePetalShower.lua b/server/ItemScripts/FireworkRosePetalShower.lua new file mode 100644 index 000000000..cb98d6cbc --- /dev/null +++ b/server/ItemScripts/FireworkRosePetalShower.lua @@ -0,0 +1,11 @@ +--[[ + Script Name : ItemScripts/FireworkRosePetalShower.lua + Script Purpose : + Script Author : Neatz09 + Script Date : 8.18.2019 + Script Notes : +--]] +function used(Item, Player) +CastSpell(Player, 5007, 1) + +end \ No newline at end of file diff --git a/server/ItemScripts/FireworkSwirlingSnowflakes.lua b/server/ItemScripts/FireworkSwirlingSnowflakes.lua new file mode 100644 index 000000000..12ef572c2 --- /dev/null +++ b/server/ItemScripts/FireworkSwirlingSnowflakes.lua @@ -0,0 +1,11 @@ +--[[ + Script Name : ItemScripts/SwirlingSnowflakes.lua + Script Purpose : + Script Author : Neatz09 + Script Date : 8.18.2019 + Script Notes : +--]] +function used(Item, Player) +CastSpell(Player, 5008, 1) + +end \ No newline at end of file diff --git a/server/ItemScripts/FoldingStand.lua b/server/ItemScripts/FoldingStand.lua new file mode 100644 index 000000000..7e29e1318 --- /dev/null +++ b/server/ItemScripts/FoldingStand.lua @@ -0,0 +1,40 @@ +--[[ + Script Name : ItemScripts/FoldingStand.lua + Script Purpose : + Script Author : Jabantiz + Script Date : 6/15/2018 + Script Notes : +--]] + +-- Quest ID's +local CONFRONTATION = 321 + +-- Item ID's +local FOLDING_STAND = 7379 + +function examined(Item, Player) + if HasQuest(Player, CONFRONTATION) and GetQuestStep(Player, CONFRONTATION) == 2 then + -- check distance to target location first + local con = CreateConversation() + + AddConversationOption(con, "Place the stand.", "PlaceStand") + StartDialogConversation(con, 2, Item, Player, "This is the folding stand on which you will place the Soul Spike in order to destroy it.") + end +end + +function PlaceStand(Item, Player) + local con = CreateConversation() + + SpawnMob(GetZone(Player), 2340126, false, GetX(Player), GetY(Player), GetZ(Player), GetHeading(Player)) + + AddConversationOption(con, "Step back from the stand.", "StepBack") + StartDialogConversation(con, 2, Item, Player, "You place the stand on the ground.") +end + +function StepBack(Item, Player) + CloseItemConversation(Item, Player) + + while HasItem(Player, FOLDING_STAND, 1) do + RemoveItem(Player, FOLDING_STAND) + end +end \ No newline at end of file diff --git a/server/ItemScripts/FriendlyGazerRunt.lua b/server/ItemScripts/FriendlyGazerRunt.lua new file mode 100644 index 000000000..8ebd44312 --- /dev/null +++ b/server/ItemScripts/FriendlyGazerRunt.lua @@ -0,0 +1,12 @@ +--[[ + Script Name : ItemScripts/FriendlyGazerRunt.lua + Script Purpose : + Script Author : Neatz09 + Script Date : 9.9.2019 + Script Notes : +--]] + +function used(Item, Player) +CastSpell(Player, 8337, 5) + +end \ No newline at end of file diff --git a/server/ItemScripts/FrondensFinest.lua b/server/ItemScripts/FrondensFinest.lua new file mode 100644 index 000000000..f3563846c --- /dev/null +++ b/server/ItemScripts/FrondensFinest.lua @@ -0,0 +1,23 @@ +--[[ + Script Name : ItemScripts/FrondensFinest.lua + Script Purpose : for the item "Fronden's Finest" + Script Author : theFoof + Script Date : 2013.5.31 + Script Notes : +--]] +local PouringSkellies = 40 + +function used(Item, Player) + target = GetTarget(Player) + if GetName(target) == "pile of Ry'Gorr bones" then + if GetQuestStep(Player, PouringSkellies) == 1 then + if not IsInCombat(Player) then + CastEntityCommand(Player, target, 1281, "pour one out") + else + SendMessage(Player, "You must not be in combat to use this.", "yellow") + end + end + else + SendMessage(Player, "You must find a pile of Ry'Gorr bones to use this on.", "yellow") + end +end \ No newline at end of file diff --git a/server/ItemScripts/GeldranisVial.lua b/server/ItemScripts/GeldranisVial.lua new file mode 100644 index 000000000..a1ef515ad --- /dev/null +++ b/server/ItemScripts/GeldranisVial.lua @@ -0,0 +1,33 @@ +--[[ + Script Name : ItemScripts/GeldranisVial.lua + Script Purpose : Handles the item "Geldrani's Vial" + Script Author : jakejp + Script Date : 2018.6.14 + Script Notes : +--]] + +local EmptyVial = 46457 +local FilledVial = 7641 +local AStrangeMix = 314 + +function used(Item, Player) + if GetQuestStep(Player, AStrangeMix) == 1 then + local X = GetX(Player) + local Z = GetZ(Player) + if GetZoneID(GetZone(Player)) == 108 then + if X < 15 and X > -17 then --setting radius to update the quest "Boatload of Work" + if Z > 558 and Z < 581 then + SetStepComplete(Player, AStrangeMix, 1) + RemoveItem(Player, EmptyVial) + if HasItem(Player, FilledVial) == false then + SummonItem(Player, FilledVial, 1) + end + else + SendMessage(Player, "You are not in the proper spot to use this.", "yellow") + end + else + SendMessage(Player, "You are not in the proper spot to use this.", "yellow") + end + end + end +end \ No newline at end of file diff --git a/server/ItemScripts/GerlasElementalLullaby.lua b/server/ItemScripts/GerlasElementalLullaby.lua new file mode 100644 index 000000000..68b338849 --- /dev/null +++ b/server/ItemScripts/GerlasElementalLullaby.lua @@ -0,0 +1,24 @@ +--[[ + Script Name : ItemScripts/GerlasElementalLullaby.lua + Script Purpose : for the item "Gerla's Elemental Lullaby" + Script Author : theFoof + Script Date : 2013.6.13 + Script Notes : +--]] + +local NapEvigis = 64 + +function used(Item, Player) + local target = GetTarget(Player) + if GetQuestStep(Player, NapEvigis) == 1 then + if GetName(target) == 'Evigis the Ancient' then + if GetHP(target) < GetMaxHP(target) * .2 then + CastEntityCommand(Player, target, 1291, "Gerla's Elemental Lullaby") + else + SendMessage(Player, "You must use this on Evigis when it is under 20 percent life.", "yellow") + end + else + SendMessage(Player, "You must use this on Evigis when it is under 20 percent life.", "yellow") + end + end +end \ No newline at end of file diff --git a/server/ItemScripts/GnomishLanguagePrimer.lua b/server/ItemScripts/GnomishLanguagePrimer.lua new file mode 100644 index 000000000..15e82f981 --- /dev/null +++ b/server/ItemScripts/GnomishLanguagePrimer.lua @@ -0,0 +1,16 @@ +--[[ + Script Name : Gnomish Language Primer + Script Purpose : + Script Author : Neatz09 + Script Date : 1/19/2019 + Script Notes : +--]] + +function obtained(Item, Spawn) +if not HasLanguage(Spawn,6) then + AddLanguage(Spawn, 6) + SendMessage(Spawn, "Gnomish", "White") + RemoveItem(Spawn, 903) +end + +end \ No newline at end of file diff --git a/server/ItemScripts/Griz.lua b/server/ItemScripts/Griz.lua new file mode 100644 index 000000000..47ba11aa5 --- /dev/null +++ b/server/ItemScripts/Griz.lua @@ -0,0 +1,29 @@ +--[[ + Script Name : ItemScripts/Griz.lua + Script Purpose : the item Griz + Script Author : theFoof + Script Date : 2013.8.26 + Script Notes : +--]] +local SometimesKnut = 84 + +function GrizChat1_1(Item, Spawn) + conversation = CreateConversation() + AddConversationOption(conversation, "I will never doubt him again.") + StartDialogConversation(conversation, 4, Item, Spawn, "Yes. Griz real. Knut's friend.") +end + +function GrizChat2_1(Item, Spawn) + if GetQuestStep(Spawn, SometimesKnut) == 2 then + SetStepComplete(Spawn, SometimesKnut, 2) + AddSpawnAccess(GetSpawnByLocationID(Zone, 579551), Spawn) + end + if GetQuestStep(Spawn, SometimesKnut) == 2 or GetQuestStep(Spawn, SometimesKnut) == 3 then + if HasItemEquipped(Spawn, 157116) then + conversation = CreateConversation() + AddConversationOption(conversation, "I don't think it has guts.") + AddConversationOption(conversation, "All right, I'm doing it!") + StartDialogConversation(conversation, 4, Item, Spawn, "Grrrrrrrrrrr. I said strike! Claw it to bits! Tear it open, and spell its guts upon the ice!") + end + end +end \ No newline at end of file diff --git a/server/ItemScripts/Guestroomkey01.lua b/server/ItemScripts/Guestroomkey01.lua new file mode 100644 index 000000000..7964aa3a3 --- /dev/null +++ b/server/ItemScripts/Guestroomkey01.lua @@ -0,0 +1,14 @@ +--[[ + Script Name : ItemScripts/Guestroomkey01.lua + Script Purpose : + Script Author : smash + Script Date : 1/27/2016 + Script Notes : +--]] + +function examined(Item, Player) + if HasQuest(Player, 173) and GetQuestStep(Player, 173) == 2 then + SetStepComplete(Player, 173, 2) + RemoveItem(Player, 7979) + end +end \ No newline at end of file diff --git a/server/ItemScripts/GuktanLanguagePrimer.lua b/server/ItemScripts/GuktanLanguagePrimer.lua new file mode 100644 index 000000000..1f02c45a7 --- /dev/null +++ b/server/ItemScripts/GuktanLanguagePrimer.lua @@ -0,0 +1,16 @@ +--[[ + Script Name : Gukish Language Primer + Script Purpose : + Script Author : Neatz09 + Script Date : 1/19/2019 + Script Notes : +--]] + +function obtained(Item, Spawn) +if not HasLanguage(Spawn, 5) then + AddLanguage(Spawn, 5) + SendMessage(Spawn, "Gukish", "White") + RemoveItem(Spawn, 906) +end + +end \ No newline at end of file diff --git a/server/ItemScripts/HalasianLanguagePrimer.lua b/server/ItemScripts/HalasianLanguagePrimer.lua new file mode 100644 index 000000000..256d0a6c8 --- /dev/null +++ b/server/ItemScripts/HalasianLanguagePrimer.lua @@ -0,0 +1,16 @@ +--[[ + Script Name : Halasian Language Primer + Script Purpose : + Script Author : Neatz09 + Script Date : 1/19/2019 + Script Notes : +--]] + +function obtained(Item, Spawn) +if not HasLanguage(Spawn,1) then + AddLanguage(Spawn, 1) + SendMessage(Spawn, "Halasian", "White") + RemoveItem(Spawn, 907) +end + +end \ No newline at end of file diff --git a/server/ItemScripts/HawkBait.lua b/server/ItemScripts/HawkBait.lua new file mode 100644 index 000000000..544b2e1bb --- /dev/null +++ b/server/ItemScripts/HawkBait.lua @@ -0,0 +1,32 @@ +--[[ + Script Name : ItemScripts/HawkBait.lua + Script Purpose : Hawk Bait used in Preventative Maintenance Quest + Script Author : Cynnar + Script Date : 10/15/2018 + Script Notes : +--]] + +local Hawk_Bait = 8060 +local Preventative_Maintenance = 365 +local a_mole_rat = 2780089 + +function examined(Item, Player) + if HasQuest(Player, Preventative_Maintenance) then + if GetQuestStep(Player, Preventative_Maintenance) == 4 then + conversation = CreateConversation() + AddConversationOption(conversation, "Release the mole rat.", "ReleaseRat") + AddConversationOption(conversation, "Let him be for now.", "LetHimBe") + StartDialogConversation(conversation, 2, Item, Player, "This cute little guy would be perfect as bait to lure down the cliffdiver hawks.") + end + end +end + +function ReleaseRat(Item, Player) + CloseItemConversation(Item, Player) + SpawnMob(GetZone(Player), a_mole_rat, false, GetX(Player), GetY(Player), GetZ(Player), GetHeading(Player)) + RemoveItem(Player, Hawk_Bait) +end + +function LetHimBe(Item, Player) + CloseItemConversation(Item, Player) +end \ No newline at end of file diff --git a/server/ItemScripts/IcemaneLeash.lua b/server/ItemScripts/IcemaneLeash.lua new file mode 100644 index 000000000..01123b23f --- /dev/null +++ b/server/ItemScripts/IcemaneLeash.lua @@ -0,0 +1,11 @@ +local IcemanesCometh = 18 +function used(Item, Player) + if GetQuestStep(Player, IcemanesCometh) == 1 then + target = GetTarget(Player) + if GetName(target) == 'an icemane cub' then + if not IsInCombat(target) then + CastEntityCommand(Player, target, 1278, "Leash") + end + end + end +end \ No newline at end of file diff --git a/server/ItemScripts/KerranLanguangePrimer.lua b/server/ItemScripts/KerranLanguangePrimer.lua new file mode 100644 index 000000000..51dde2e46 --- /dev/null +++ b/server/ItemScripts/KerranLanguangePrimer.lua @@ -0,0 +1,16 @@ +--[[ + Script Name : Kerran Language Primer + Script Purpose : + Script Author : Neatz09 + Script Date : 1/19/2019 + Script Notes : +--]] + +function obtained(Item, Spawn) +if not HasLanguage(Spawn, 13) then + AddLanguage(Spawn, 13) + SendMessage(Spawn, "Kerran", "White") + RemoveItem(Spawn, 908) +end + +end \ No newline at end of file diff --git a/server/ItemScripts/KoadaDalLanguagePrimer.lua b/server/ItemScripts/KoadaDalLanguagePrimer.lua new file mode 100644 index 000000000..2361fb48f --- /dev/null +++ b/server/ItemScripts/KoadaDalLanguagePrimer.lua @@ -0,0 +1,16 @@ +--[[ + Script Name : Koada'Dal Language Primer + Script Purpose : + Script Author : Neatz09 + Script Date : 1/19/2019 + Script Notes : +--]] + +function obtained(Item, Spawn) +if not HasLanguage(Spawn,9) then + AddLanguage(Spawn, 9) + SendMessage(Spawn, "Koada'Dal", "White") + RemoveItem(Spawn, 905) +end + +end \ No newline at end of file diff --git a/server/ItemScripts/LaserGoggles.lua b/server/ItemScripts/LaserGoggles.lua new file mode 100644 index 000000000..febaeaef2 --- /dev/null +++ b/server/ItemScripts/LaserGoggles.lua @@ -0,0 +1,23 @@ +--[[ + Script Name : ItemScripts/LaserGoggles.lua + Script Purpose : + Script Author : fearfx + Script Date : 6/15/2016 + Script Notes : +--]] +function used(Item, Player) + local target = GetTarget(Player) + if target ~= nil and IsEntity(target) then + local encounter = GetEncounter(target) + if encounter ~= nil then + doDamage(Player, target, damage) + else + doDamage(Player, target, damage) + end + end +end + +function doDamage(Player, Target, damage) + local damage = math.floor(((GetHP(Target) / 100) * 50) + GetHP(Target)) + ProcDamage(Player, Target, " Dev AE Slay", 4, damage) +end \ No newline at end of file diff --git a/server/ItemScripts/MakeshiftBarricade.lua b/server/ItemScripts/MakeshiftBarricade.lua new file mode 100644 index 000000000..374fdc5d8 --- /dev/null +++ b/server/ItemScripts/MakeshiftBarricade.lua @@ -0,0 +1,31 @@ +--[[ + Script Name : ItemScripts/MakeshiftBarricade.lua + Script Purpose : Handles the item "makeshift barricade" + Script Author : theFoof + Script Date : 2013.5.7 + Script Notes : +--]] + +local Barricade = 46842 +local BoatloadWork = 4 + +function used(Item, Player) + if GetQuestStep(Player, BoatloadWork) == 3 then + local X = GetX(Player) + local Z = GetZ(Player) + if GetZoneID(GetZone(Player)) == 470 then + if X > -326 and X < -306 then --setting radius to update the quest "Boatload of Work" + if Z < -704 and Z > -724 then + SetStepComplete(Player, BoatloadWork, 3) + RemoveItem(Player, Barricade) + local barrier_spawn = GetSpawn(Player, 4701732) + AddSpawnAccess(barrier_spawn, Player) + else + SendMessage(Player, "You must be between the two torches along the barricade line on Pilgrims' Landing to use this.", "yellow") + end + else + SendMessage(Player, "You must be between the two torches along the barricade line on Pilgrims' Landing to use this.", "yellow") + end + end + end +end \ No newline at end of file diff --git a/server/ItemScripts/MavsStone.lua b/server/ItemScripts/MavsStone.lua new file mode 100644 index 000000000..18e22ad24 --- /dev/null +++ b/server/ItemScripts/MavsStone.lua @@ -0,0 +1,43 @@ +--[[ + Script Name : ItemScripts/MavsStone.lua + Script Purpose : Mav's Stone + Script Author : Scatman + Script Date : 2009.10.05 + Script Notes : +--]] + +local DWARF_MENTOR_QUEST_4 = 287 + +function examined(Item, Player) + conversation = CreateConversation() + if HasQuest(Player, DWARF_MENTOR_QUEST_4) then + local x1 = GetX(Player) + local y1 = GetY(Player) + local z1 = GetZ(Player) + local x2 = 897.01 + local y2 = -22.31 + local z2 = -113.83 + local x = x2 - x1 --math.Pow(x2 - x1, 2) + x = x * x + local y =y2 - y1 -- math.pow(y2 - y1, 2) + y = y * y + local z = z2 - z1 -- math.pow(z2 - z1, 2) + z = z * z + local distance = math.sqrt((x + y + z)) + if distance <= 10.0 then + AddConversationOption(conversation, "Hold the stone in your hand and focus on it.", "HoldStone") + end + end + AddConversationOption(conversation, "Put the stone away.", "CloseItemConversation") + StartDialogConversation(conversation, 2, Item, Player, "The stone is cold and rough, your instincts tell you it would be a good stone for building.") +end + +function HoldStone(Item, Player) + if GetQuestStep(Player, DWARF_MENTOR_QUEST_4) == 1 then + SetStepComplete(Player, DWARF_MENTOR_QUEST_4, 1) + end + + conversation = CreateConversation() + AddConversationOption(conversation, "Put the stone away.", "CloseItemConversation") + StartDialogConversation(conversation, 2, Item, Player, "When you focus on the stone there is an almost audible sense of hammers and chisels working at stone, carts moving back and forth, and a low hum of an ancient dwarven work song.") +end diff --git a/server/ItemScripts/NeezersQuestions.lua b/server/ItemScripts/NeezersQuestions.lua new file mode 100644 index 000000000..dd26a86f0 --- /dev/null +++ b/server/ItemScripts/NeezersQuestions.lua @@ -0,0 +1,26 @@ +--[[ + Script Name : ItemScripts/NeezersQuestions.lua + Script Purpose : Neezer's Questions + Script Author : Scatman + Script Date : 2009.09.27 + Script Notes : +--]] + +local NEEZERS_SURVEY = 330 -- was 28 + +function examined(Item, Player) + if HasQuest(Player, NEEZERS_SURVEY) and GetQuestStep(Player, NEEZERS_SURVEY) == 1 then + SetStepComplete(Player, NEEZERS_SURVEY, 1) + end + + conversation = CreateConversation() + AddConversationOption(conversation, "Continue Reading", "ContinueReading") + AddConversationOption(conversation, "Put note away.", "CloseItemConversation") + StartDialogConversation(conversation, 2, Item, Player, "It is very important these questions be asked in order and that none of them are skipped. Again, please remember the FIRST word in each person's answer.\n\nQuestion 1: If you were to calibrate a Fizzo Torque Wrench for work in Lavastorm and then attempt precisely the same in Everfrost what difference of calibration would be needed?\n\nQuestion 2: What is the average measurement between Keen and Preen on a Spectromatic Nest-Druther?\n\nQuestion 3: If given a choice in a vote for the new Queen of Qeynos, would you cast your vote for a nut or a bolt?") +end + +function ContinueReading(Item, Player) + conversation = CreateConversation() + AddConversationOption(conversation, "Put note away.", "CloseItemConversation") + StartDialogConversation(conversation, 2, Item, Player, "Question 4: Though not yet officially proven, which theory concerning thermodynamic particle acceleration and its correlation to metaphysical tides is widely accepted?\n\nQuestion 5: Isn't Neezer Grund amazing?\n\nQuestion 6: The Banton particle is supposed to generate high amounts of what?") +end \ No newline at end of file diff --git a/server/ItemScripts/OverflowManifest.lua b/server/ItemScripts/OverflowManifest.lua new file mode 100644 index 000000000..c2b4c4927 --- /dev/null +++ b/server/ItemScripts/OverflowManifest.lua @@ -0,0 +1,19 @@ +--[[ + Script Name : Items/OverflowManifest.lua + Script Purpose : Overflow Manifest + Script Author : Scatman + Script Date : 2009.09.27 + Script Notes : +--]] + +local BARBARIAN_MENTOR_QUEST_2 = 290 + +function examined(Item, Player) + if HasQuest(Player, BARBARIAN_MENTOR_QUEST_2) and GetQuestStep(Player, BARBARIAN_MENTOR_QUEST_2) == 1 then + SetStepComplete(Player, BARBARIAN_MENTOR_QUEST_2, 1) + end + + conversation = CreateConversation() + AddConversationOption(conversation, "Put the manifest away.", "CloseItemConversation") + StartDialogConversation(conversation, 2, Item, Player, "Overflow Manifest: Graystone Yard\n#3CF0F: Under the small ramp east of the docks.\n#3CF1G: Leaning against the north-wall just east of the docks, near Tacklmaster Moyna.\n#2DF0F: Just north of the most north-eastern building in Graystone, off the lip of the raised platform. #4QGCG: Along the eastern wall, behind the Scribe's shop.\n#CC4QF: Just west of the harbor entrance, near the Mail Kiosk and Bowyer.\n#CQC4F: Outside the bank and its western corner, piled between the raised platform and the wall.") +end diff --git a/server/ItemScripts/ParchmentScrap.lua b/server/ItemScripts/ParchmentScrap.lua new file mode 100644 index 000000000..d2b458d42 --- /dev/null +++ b/server/ItemScripts/ParchmentScrap.lua @@ -0,0 +1,62 @@ +--[[ + Script Name : ItemScripts/ParchmentScrap.lua + Script Purpose : Handles the quest item "Parchment Scrap (right-click this item to Examine it)" (10317) + Script Author : Jabantiz + Script Date : 9/8/2016 + Script Notes : +--]] + +local Tainted = 183 + +function examined(Item, Player) + local con = CreateConversation() + + if HasQuest(Player, Tainted) then + if GetQuestStep(Player, Tainted) == 2 then + AddConversationOption(con, "Examine the parchment.", "Examine") + elseif GetQuestStep(Player, Tainted) == 4 then + AddConversationOption(con, "Put together the parchment pieces.", "PutTogether") + elseif GetQuestStep(Player, Tainted) == 7 then + AddConversationOption(con, "Piece together the parchment.", "PieceTogether") + end + end + + AddConversationOption(con, "Put the parchment away.", "CloseItemConversation") + StartDialogConversation(con, 2, Item, Player, "The edges of the parchment are torn and jagged as though ripped from a much larger document.") +end + +function Examine(Item, Player) + SetStepComplete(Player, Tainted, 2) + + local con = CreateConversation(); + + AddConversationOption(con, "Put the parchment away.", "CloseItemConversation") + StartDialogConversation(con, 2, Item, Player, 'You can barely make out some writing on this scrap: "The toxic crawlers will be useful to cover our ... the totem ..." The reference to a totem is puzzling. Why would someone want a totem covered in spiders? There must be more pieces of this parchment amongst the toxic crawlers.') +end + +function PutTogether(Item, Player) + local con = CreateConversation() + + AddConversationOption(con, "Roll the parchment up.", "RollUp") + StartDialogConversation(con, 2, Item, Player, "You line up the parchment pieces. The newest piece adds enough new words that you can read: ''The toxic crawlers will be useful to cover our tracks. Leave the totem in the eastern rocks...'' Apparently Deianeira's concern about the spiders is well-placed, though not for the reasons she thinks. I must find more of this parchment to learn what this totem means.") +end + +function RollUp(Item, Player) + local con = CreateConversation() + + AddConversationOption(con, "Put the parchment away.", "CloseItemConversation") + StartDialogConversation(con, 2, Item, Player, "You carefully roll the parchment and stow it away.") + + if GetQuestStep(Player, Tainted) == 4 then + SetStepComplete(Player, Tainted, 4) + elseif GetQuestStep(Player, Tainted) == 7 then + SetStepComplete(Player, Tainted, 7) + end +end + +function PieceTogether(Item, Player) + local con = CreateConversation() + + AddConversationOption(con, "Roll the parchment up.", "RollUp") + StartDialogConversation(con, 2, Item, Player, "The last bit of parchment was caught on the web near the large pile of rocks. You piece it together and read: ''The toxic crawlers will be useful to cover our tracks. Leave the totem in the eastern rocks beneath Direspike.'' Direspike must be a tainted spider with greater power. You realize you may have to flush him from his lair by picking off the nearby spiders until he appears to meet your challenge.") +end \ No newline at end of file diff --git a/server/ItemScripts/Poultice.lua b/server/ItemScripts/Poultice.lua new file mode 100644 index 000000000..7adf5fc0b --- /dev/null +++ b/server/ItemScripts/Poultice.lua @@ -0,0 +1,20 @@ +--[[ + Script Name : ItemScripts/Poultice.lua + Script Purpose : for the item "Poultice" + Script Author : theFoof + Script Date : 2013.6.3 + Script Notes : +--]] + +local DisarmingRyGorr = 48 + +function used(Item, Player) + if GetQuestStep(Player, DisarmingRyGorr) == 1 then + local target = GetTarget(Player) + if GetName(target) == "a Ry'Gorr weapon" then + CastEntityCommand(Player, target, 1284, "Poultice") + end + else + SendMessage(Player, "You can only use this on a Ry'Gorr weapon.", "yellow") + end +end \ No newline at end of file diff --git a/server/ItemScripts/PrankPreparednessKit.lua b/server/ItemScripts/PrankPreparednessKit.lua new file mode 100644 index 000000000..ab67d7753 --- /dev/null +++ b/server/ItemScripts/PrankPreparednessKit.lua @@ -0,0 +1,50 @@ +--[[ + Script Name : ItemScripts/PrankPreparednessKit.lua + Script Purpose : Prank Preparedness Kit + Script Author : Scatman + Script Date : 2009.09.27 + Script Notes : +--]] + +-- Quest ID's +local HELPING_SOME_FRIENDS = 325 -- was 72 + +function examined(Item, Player) + conversation = CreateConversation() + AddConversationOption(conversation, "Read instructions.", "ReadInstructions") + StartDialogConversation(conversation, 2, Item, Player, "Inside the Prank Preparedness Kit there are a couple of pies, a note written and signed by Remmy Tumbum, and some instructions from Rondo Roundstew.") +end + +function ReadInstructions(Item, Player) + conversation = CreateConversation() + AddConversationOption(conversation, "Read the next page.", "NextPage") + StartDialogConversation(conversation, 2, Item, Player, "Greetings Pranked Preparedness Kit user. If you are reading this you have no doubt offered to help me in one of my amazing prank endeavors. Let me first give you my appreciation for helping me in such an effort. As you no doubt know I am a prankster of some infamy. Because of this, I am unable to perform pranks myself, as anyone I talk to suspects I'm pulling a prank on them (except you, and thank goodness for that).\nThe following pages have your targets and your instructions. The kit itself should hold all its materials.") +end + +function NextPage(Item, Player) + conversation = CreateConversation() + AddConversationOption(conversation, "Read about the next target.", "NextTarget") + StartDialogConversation(conversation, 2, Item, Player, "Target: Drundo Parn\n\nSuspected Locations: Tavern\n\nReason for Prank: Drundo stole my pint! He stole my pint and replaced it with some other brew that turned my lips purple for a WEEK! He's a good trickster, he is. I've learned that he's horrible allergic to nuts, however!\n\nPrank: A non-spiced walnut pie could easily be injected with cream and topped with berry frosting and thus disguised. Drundo won't know what hit him, his face will be fatter than a lush's gut on payday!") +end + +function NextTarget(Item, Player) + conversation = CreateConversation() + AddConversationOption(conversation, "Read about the next target.", "NextTarget2") + StartDialogConversation(conversation, 2, Item, Player, "Target: Jayla Midhop\n\nSuspected Location: Outside Armorer's Shop\n\nReason for Prank: Tricked me out of twenty silver pieces by using her charm on me! She may have beaten my wit face to face, but when backs are turned I'm betting she won't expect my comback!\n\nPrank: Jayla Midhop - I know she has a thing for Remmy Tumbum. I also know she has a thing for Marybelle's Meadowberry Pie. I ALSO know she does not welcome the advances of Bolo Brassharp. With a little help from Remmy--I know he'd be willing to write a fake note for me--I can set her up for a very uncomfortable situation.") +end + +function NextTarget2(Item, Player) + conversation = CreateConversation() + AddConversationOption(conversation, "Read the last page.", "LastPage") + StartDialogConversation(conversation, 2, Item, Player, "Target: Bolo Brassharp\n\nSuspected Location: Outside the Inn\n\nReason for Prank: This guy doesn't know how little everyone thinks of him. A prank won't change his opinion of himself, but if I'm lucky he'll want revenge and he'll be a fellow prankster for a time to come. At the very least everyone will get to laugh at him, which he most certainly deserves.\n\nPrank: Bolo Brassharp - I won't need to trick him into seeing Jayla. But her rejection alone isn't enough. Being rejected after both have had their fill of a Busselberry Bloat Pie will be MOST uncomfortable, however. Properly disguised, the bloat pie will loook just like a meadowberry pie.") +end + +function LastPage(Item, Player) + if HasQuest(Player, HELPING_SOME_FRIENDS) and GetQuestStep(Player, HELPING_SOME_FRIENDS) == 1 then + SetStepComplete(Player, HELPING_SOME_FRIENDS, 1) + end + + conversation = CreateConversation() + AddConversationOption(conversation, "Put the Prank Preparedness Kit away.", "CloseItemConversation") + StartDialogConversation(conversation, 2, Item, Player, "So there are the targets. Remember, do not let them suspect anything, and do not mention my name!\nGood luck,\nThe Prankster - R.R.") +end \ No newline at end of file diff --git a/server/ItemScripts/RyGorrExplosiveMiningBarrel.lua b/server/ItemScripts/RyGorrExplosiveMiningBarrel.lua new file mode 100644 index 000000000..ee3b63c92 --- /dev/null +++ b/server/ItemScripts/RyGorrExplosiveMiningBarrel.lua @@ -0,0 +1,37 @@ +--[[ + Script Name : ItemScripts/RyGorrExplosiveMiningBarrel.lua + Script Purpose : for the item "Ry'Gorr Explosive Mining Barrel" + Script Author : theFoof + Script Date : 2013.6.12 + Script Notes : +--]] + +local RyGorrOperations = 60 + +function used(Item, Player) + if GetQuestStep(Player, RyGorrOperations) == 1 then + if GetZoneID(GetZone(Player)) == 470 then + local X = GetX(Player) + local Y = GetY(Player) + local Z = GetZ(Player) + if X > -20.27 and X < -10.27 then + if Y < -60 then + if Z > 150.07 and Z < 160.07 then + local barrel = SpawnByLocationID(GetZone(Player), 33980) + AddSpawnAccess(barrel, Player) + SetTempVariable(barrel, "player", Player) + RemoveItem(Player, 47881) + else + SendMessage(Player, "You cannot place the Ry'Gorr Explosive Mining Barrel here.", "yellow") + end + else + SendMessage(Player, "You cannot place the Ry'Gorr Explosive Mining Barrel here.", "yellow") + end + else + SendMessage(Player, "You cannot place the Ry'Gorr Explosive Mining Barrel here.", "yellow") + end + else + SendMessage(Player, "You cannot place the Ry'Gorr Explosive Mining Barrel here.", "yellow") + end + end +end \ No newline at end of file diff --git a/server/ItemScripts/ShardofEssence.lua b/server/ItemScripts/ShardofEssence.lua new file mode 100644 index 000000000..2f609cfd7 --- /dev/null +++ b/server/ItemScripts/ShardofEssence.lua @@ -0,0 +1,13 @@ +--[[ + Script Name : ItemScripts/ShardofEssence.lua + Script Purpose : Shard of Essence Conj(Summoned Item) + Script Author : Neatz09 + Script Date : 10/16/2019 + Script Notes : +--]] +local SPELLID = 5014 +local SPELL_TIERS = { [48003] = 1, [48004] = 2, [48005] = 3, [48010] = 4, [48002] = 5, [48009] = 7, [48012] = 9 } +function used(Item, Player) + local item_id = GetItemID(Item) + CastSpell(Player, SPELLID, SPELL_TIERS[item_id]) +end \ No newline at end of file diff --git a/server/ItemScripts/SilverTweezers.lua b/server/ItemScripts/SilverTweezers.lua new file mode 100644 index 000000000..c0e3d9e6c --- /dev/null +++ b/server/ItemScripts/SilverTweezers.lua @@ -0,0 +1,17 @@ +--[[ + Script Name : ItemScripts/SilverTweezers.lua + Script Purpose : + Script Author : Jabantiz + Script Date : 6/23/2018 + Script Notes : +--]] + +function used(Item, Player) + local target = GetTarget(Player) + if target ~= nil then + local model = GetModelType(target) + if model == 81 or model == 82 or model == 91 or model == 93 or model == 94 or model == 95 or model == 96 or model == 97 or model == 98 or model == 99 or model == 100 or model == 101 or model == 102 then + CastSpell(target, 2550000, 1, Player) + end + end +end \ No newline at end of file diff --git a/server/ItemScripts/SpiritReaper.lua b/server/ItemScripts/SpiritReaper.lua new file mode 100644 index 000000000..0c8c8dc50 --- /dev/null +++ b/server/ItemScripts/SpiritReaper.lua @@ -0,0 +1,18 @@ +--[[ + Script Name : ItemScripts/SpiritReaper.lua + Script Purpose : Spirit Reaper used in quest "Reaping" + Script Author : Cynnar + Script Date : 1/4/2016 + Script Notes : Spirit Reaper (Item ID = 48173) Reaping (quest ID = 152) +--]] + +local Reaping = 152 + +function used(Item, Player) + if GetQuestStep(Player, Reaping) == 1 then + target = GetTarget(Player) + if GetName(target) == 'a pure spirit' then + CastEntityCommand(Player, target, 1312, "Reap") + end + end +end \ No newline at end of file diff --git a/server/ItemScripts/StoutLanguagePrimer.lua b/server/ItemScripts/StoutLanguagePrimer.lua new file mode 100644 index 000000000..d30557c48 --- /dev/null +++ b/server/ItemScripts/StoutLanguagePrimer.lua @@ -0,0 +1,16 @@ +--[[ + Script Name : Stout Language Primer + Script Purpose : + Script Author : Neatz09 + Script Date : 1/18/2019 + Script Notes : +--]] + +function obtained(Item, Spawn) + if not HasLanguage(Spawn,8) then + AddLanguage(Spawn, 8) + SendMessage(Spawn, "Stout", "White") + RemoveItem(Spawn, 904) +end + +end diff --git a/server/ItemScripts/T1Pickles.lua b/server/ItemScripts/T1Pickles.lua new file mode 100644 index 000000000..67b5f0926 --- /dev/null +++ b/server/ItemScripts/T1Pickles.lua @@ -0,0 +1,11 @@ +--[[ + Script Name : ItemScripts/T1Pickles.lua + Script Purpose : + Script Author : Neatz09 + Script Date : 8.21.2019 + Script Notes : +--]] +function cast(Item, Player) +CastSpell(Player, 5011, 1) + +end \ No newline at end of file diff --git a/server/ItemScripts/T2Pickles.lua b/server/ItemScripts/T2Pickles.lua new file mode 100644 index 000000000..c222281dd --- /dev/null +++ b/server/ItemScripts/T2Pickles.lua @@ -0,0 +1,11 @@ +--[[ + Script Name : ItemScripts/T2Pickles.lua + Script Purpose : + Script Author : Neatz09 + Script Date : 8.21.2019 + Script Notes : +--]] +function cast(Item, Player) +CastSpell(Player, 5011, 2) + +end \ No newline at end of file diff --git a/server/ItemScripts/T3Pickles.lua b/server/ItemScripts/T3Pickles.lua new file mode 100644 index 000000000..69219fd69 --- /dev/null +++ b/server/ItemScripts/T3Pickles.lua @@ -0,0 +1,11 @@ +--[[ + Script Name : ItemScripts/T3Pickles.lua + Script Purpose : + Script Author : Neatz09 + Script Date : 8.21.2019 + Script Notes : +--]] +function cast(Item, Player) +CastSpell(Player, 5011, 3) + +end \ No newline at end of file diff --git a/server/ItemScripts/T4Pickles.lua b/server/ItemScripts/T4Pickles.lua new file mode 100644 index 000000000..2c591519f --- /dev/null +++ b/server/ItemScripts/T4Pickles.lua @@ -0,0 +1,11 @@ +--[[ + Script Name : ItemScripts/T4Pickles.lua + Script Purpose : + Script Author : Neatz09 + Script Date : 8.21.2019 + Script Notes : +--]] +function cast(Item, Player) +CastSpell(Player, 5011, 4) + +end \ No newline at end of file diff --git a/server/ItemScripts/T5Pickles.lua b/server/ItemScripts/T5Pickles.lua new file mode 100644 index 000000000..5f3811b73 --- /dev/null +++ b/server/ItemScripts/T5Pickles.lua @@ -0,0 +1,11 @@ +--[[ + Script Name : ItemScripts/T5Pickles.lua + Script Purpose : + Script Author : Neatz09 + Script Date : 8.21.2019 + Script Notes : +--]] +function cast(Item, Player) +CastSpell(Player, 5011, 5) + +end \ No newline at end of file diff --git a/server/ItemScripts/T6Pickles.lua b/server/ItemScripts/T6Pickles.lua new file mode 100644 index 000000000..ed7213077 --- /dev/null +++ b/server/ItemScripts/T6Pickles.lua @@ -0,0 +1,11 @@ +--[[ + Script Name : ItemScripts/T6Pickles.lua + Script Purpose : + Script Author : Neatz09 + Script Date : 8.21.2019 + Script Notes : +--]] +function cast(Item, Player) +CastSpell(Player, 5011, 6) + +end \ No newline at end of file diff --git a/server/ItemScripts/T7Pickles.lua b/server/ItemScripts/T7Pickles.lua new file mode 100644 index 000000000..010906b3d --- /dev/null +++ b/server/ItemScripts/T7Pickles.lua @@ -0,0 +1,11 @@ +--[[ + Script Name : ItemScripts/T7Pickles.lua + Script Purpose : + Script Author : Neatz09 + Script Date : 8.21.2019 + Script Notes : +--]] +function cast(Item, Player) +CastSpell(Player, 5011, 7) + +end \ No newline at end of file diff --git a/server/ItemScripts/T8Pickles.lua b/server/ItemScripts/T8Pickles.lua new file mode 100644 index 000000000..2982a3102 --- /dev/null +++ b/server/ItemScripts/T8Pickles.lua @@ -0,0 +1,11 @@ +--[[ + Script Name : ItemScripts/T8Pickles.lua + Script Purpose : + Script Author : Neatz09 + Script Date : 8.21.2019 + Script Notes : +--]] +function cast(Item, Player) +CastSpell(Player, 5011, 8) + +end \ No newline at end of file diff --git a/server/ItemScripts/UrnFilledWithAshes.lua b/server/ItemScripts/UrnFilledWithAshes.lua new file mode 100644 index 000000000..400c3ac2b --- /dev/null +++ b/server/ItemScripts/UrnFilledWithAshes.lua @@ -0,0 +1,37 @@ +--[[ + Script Name : ItemScripts/UrnFilledWithAshes.lua + Script Purpose : for the item "Urn Filled with Ashes" + Script Author : theFoof + Script Date : 2013.5.27 + Script Notes : +--]] +local ScatteringAshes = 33 + +function used(Item, Player) + local X = GetX(Player) + local Y = GetY(Player) + local Z = GetZ(Player) + if GetZoneID(GetZone(Player)) == 470 then + if not IsInCombat(Player) then + if X >= 587 and X <= 627 then + if Y >= 61.2 and Y <= 71.2 then + if Z >= -526 and Z <= -486 then + SetStepComplete(Player, ScatteringAshes, 1) + else + LocMessage(Item, Player) + end + else + LocMessage(Item, Player) + end + else + LocMessage(Item, Player) + end + else + SendPopUpMessage(Player, "Non-Combat only", 0, 0, 255) + end + end +end + +function LocMessage(Item, Player) + SendMessage(Player, "The ashes must be released at the peak of the cliff to the east of Herga's Choke.", "yellow") +end \ No newline at end of file diff --git a/server/ItemScripts/WaterFlask.lua b/server/ItemScripts/WaterFlask.lua new file mode 100644 index 000000000..ec2ec737b --- /dev/null +++ b/server/ItemScripts/WaterFlask.lua @@ -0,0 +1,29 @@ +--[[ + Script Name : ItemScripts/WaterFlask.lua + Script Purpose : Water Flask + Script Author : Scatman + Script Date : 2009.10.05 + Script Notes : +--]] + +local HIGH_ELF_MENTOR_QUEST_1 = 223 + +function examined(Item, Player) + conversation = CreateConversation() + if HasQuest(Player, HIGH_ELF_MENTOR_QUEST_1) and not QuestStepIsComplete(Player, HIGH_ELF_MENTOR_QUEST_1, 2) then + local fountain = GetSpawn(Player, 2360073) + if fountain ~= nil and GetDistance(Player, fountain) < 10 then + AddConversationOption(conversation, "Fill the flask.", "FillFlask") + end + end + AddConversationOption(conversation, "Put the flask away.", "CloseItemConversation") + StartDialogConversation(conversation, 2, Item, Player, "This is the flask of water that Vindain has asked you to fill with blessed water from the Fountain of Valor.") +end + +function FillFlask(Item, Player) + SetStepComplete(Player, HIGH_ELF_MENTOR_QUEST_1, 2) + + conversation = CreateConversation() + AddConversationOption(conversation, "Put the flask away.", "CloseItemConversation") + StartDialogConversation(conversation, 2, Item, Player, "You dip the flask into the fountain and fill it with some blessed water.") +end diff --git a/server/ItemScripts/WorthlessBronzeStatuette.lua b/server/ItemScripts/WorthlessBronzeStatuette.lua new file mode 100644 index 000000000..c787039bb --- /dev/null +++ b/server/ItemScripts/WorthlessBronzeStatuette.lua @@ -0,0 +1,34 @@ +--[[ + Script Name : ItemScripts/WorthlessBronzeStatuette.lua + Script Purpose : + Script Author : Jabantiz + Script Date : 6/15/2018 + Script Notes : +--]] + +-- Quest ID's +local INFORMATION_MERCHANTS = 318 + +function examined(Item, Player) + if HasQuest(Player, INFORMATION_MERCHANTS) and GetQuestStep(Player, INFORMATION_MERCHANTS) == 2 then + local con = CreateConversation() + + AddConversationOption(con, "Attempt to separate the halves.", "SeperateHalves") + StartDialogConversation(con, 2, Item, Player, "The statuette is dull and scratched. Any sheen it may have had is presently gone. There is a barely visible seam encircling the waist of the statuette as if the upper and lower halves were originally separate.") + end +end + +function SeperateHalves(Item, Player) + local con = CreateConversation() + + AddConversationOption(con, "Read the note.", "ReadNote") + StartDialogConversation(con, 2, Item, Player, "With only a minor twist the two halves come apart. The statuette is hollow on the inside and within rests a note.") +end + +function ReadNote(Item, Player) + SetStepComplete(Player, INFORMATION_MERCHANTS, 2) + local con = CreateConversation() + + AddConversationOption(con, "Put the note back in the statuette.", "CloseItemConversation") + StartDialogConversation(con, 2, Item, Player, "The note reads:\n\nClient-\n\nWe encountered your gray before you mentioned him, so it wasn't hard finding him. Once we got your request we stuck someone to him. You were right, he had something to hide. Some sort of package or crate or something. He must've thought he was being followed because he dumped it in the water in South Qeynos. We don't know what was in it but it's probably three feet deep in the mud in the Peat Bog by now, if you want us to go after that it'll cost you.") +end \ No newline at end of file diff --git a/server/ItemScripts/aNeriakrecruitbadge.lua b/server/ItemScripts/aNeriakrecruitbadge.lua new file mode 100644 index 000000000..26fabb6f7 --- /dev/null +++ b/server/ItemScripts/aNeriakrecruitbadge.lua @@ -0,0 +1,14 @@ +--[[ + Script Name : ItemScripts/ANeriakRecruitBadge.lua + Script Purpose : a Neriak recruit badge used in quest "A Guard Insignia?" + Script Author : Cynnar + Script Date : 1/4/2016 + Script Notes : a Neriak recruit badge (Item ID = 2333) A Guard Insignia? (quest ID = 152) + Script Notes : UPDATE `eq2world`.`items` SET `lua_script`='ItemScripts/ANeriakRecruitBadge.lua' WHERE `id`=2333; +--]] + +local AGuardInsignia =140 + +function examined(Item, Player) + OfferQuest(Player, Player, AGuardInsignia) +end \ No newline at end of file diff --git a/server/ItemScripts/a_locked_chest.lua b/server/ItemScripts/a_locked_chest.lua new file mode 100644 index 000000000..a2ca4b90f --- /dev/null +++ b/server/ItemScripts/a_locked_chest.lua @@ -0,0 +1,17 @@ +--[[ + Script Name : ItemScripts/a_locked_chest.lua + Script Purpose : + Script Author : Ememjr + Script Date : 2019-10-07 + Script Notes : +--]] + +local quest = 480 + +function examined(Item, Player) + Say(Player, "item examined") + if not HasQuest(Player, quest) and not HasCompletedQuest(Player, quest) then + Say(Player, "offer quest") + OfferQuest(nil, Player, quest) + end +end \ No newline at end of file diff --git a/server/ItemScripts/a_mystical_sphere.lua b/server/ItemScripts/a_mystical_sphere.lua new file mode 100644 index 000000000..7c881368e --- /dev/null +++ b/server/ItemScripts/a_mystical_sphere.lua @@ -0,0 +1,21 @@ +--[[ + Script Name : ItemScripts/a_mystical_sphere.lua + Script Purpose :Quest Stater for The Spirit's Release + Script Author : Ememjr + Script Date : 2019-10-07 + Script Notes : +--]] + +local quest = 481 +local itemID = 2304 +function examined(Item, Player) + Say(Player, "item examined") + if not HasQuest(Player, quest) and not HasCompletedQuest(Player, quest) then + OfferQuest(nil, Player, quest) + elseif HasQuest(Player, quest) and QuestStepIsComplete(Player, quest, 2) then + SetStepComplete(Player, quest, 2) + while HasItem(Player, itemID, 1) do + RemoveItem(Player, itemID) + end + end +end \ No newline at end of file diff --git a/server/ItemScripts/abasicfirework.lua b/server/ItemScripts/abasicfirework.lua new file mode 100644 index 000000000..f111322fe --- /dev/null +++ b/server/ItemScripts/abasicfirework.lua @@ -0,0 +1,11 @@ +--[[ + Script Name : ItemScripts/abasicfirework.lua + Script Purpose : + Script Author : Neatz09 + Script Date : 8.18.2019 + Script Notes : +--]] +function used(Item, Player) +CastSpell(Player, 5003, 1) + +end diff --git a/server/ItemScripts/an_old_darkblade_dagger.lua b/server/ItemScripts/an_old_darkblade_dagger.lua new file mode 100644 index 000000000..6dfa2d627 --- /dev/null +++ b/server/ItemScripts/an_old_darkblade_dagger.lua @@ -0,0 +1,15 @@ +--[[ + Script Name : ItemScripts/an_old_darkblade_dagger.lua + Script Purpose :Quest Stater for The Darkblade Dagger + Script Author : Ememjr + Script Date : 2019-10-07 + Script Notes : +--]] + +local quest = 482 + +function examined(Item, Player) + if not HasQuest(Player, quest) and not HasCompletedQuest(Player, quest) then + OfferQuest(nil, Player, quest) + end +end \ No newline at end of file diff --git a/server/ItemScripts/anoldnote.lua b/server/ItemScripts/anoldnote.lua new file mode 100644 index 000000000..70d7b9887 --- /dev/null +++ b/server/ItemScripts/anoldnote.lua @@ -0,0 +1,20 @@ +--[[ + Script Name : ItemScripts/anoldnote.lua + Script Purpose : + Script Author : Ememjr + Script Date : 2017.05.09 + Script Notes : +--]] + +local quest = 235 + +function examined(Item, Player) + if not HasQuest(Player, quest) and not HasCompletedQuest(Player, quest) then + OfferQuest(nil, Player, quest) + + --remove quest starter + if HasItem(Player, 3776) then + RemoveItem(Player, 3776) + end + end +end \ No newline at end of file diff --git a/server/ItemScripts/awellspringcubleash.lua b/server/ItemScripts/awellspringcubleash.lua new file mode 100644 index 000000000..34eb73134 --- /dev/null +++ b/server/ItemScripts/awellspringcubleash.lua @@ -0,0 +1,22 @@ +--[[ + Script Name : ItemScripts/awellspringcubleash.lua + Script Purpose : Leash used in quest "To Draw Upon Wellsprings" + Script Author : Cynnar + Script Date : 1/4/2016 + Script Notes : a Wellspring Cub Leash (Item ID = 45117) To Draw Upon Wellsprings (quest ID = 156) +--]] + +local DrawUponWellsprings = 155 + +function used(Item, Player) + target = GetTarget(Player) + if GetName(target) == 'a wellspring cub' and GetTempVariable(Player, "cub") == nil then + if not IsInCombat(target) then + CastEntityCommand(Player, target, 1278, "Leash") + end + elseif GetName(target) == 'a wellspring cub' and GetTempVariable(Player, "cub") ~= nil then + SendMessage(Player, "You need to bring your currently leashed wellspring cub back to Calnozz before leashing another.", "yellow") + elseif GetName(target) ~= "a wellspring cub" then + SendMessage(Player, "You can only use this on a wellspring cub.", "yellow") + end +end \ No newline at end of file diff --git a/server/ItemScripts/cadavers_dram.lua b/server/ItemScripts/cadavers_dram.lua new file mode 100644 index 000000000..fb3899272 --- /dev/null +++ b/server/ItemScripts/cadavers_dram.lua @@ -0,0 +1,24 @@ +--[[ + Script Name : ItemScripts/cadavers_dram.lua + Script Purpose : cavader's dram + Script Author : theFoof + Script Date : 2013.7.24 + Script Notes : +--]] + +local BecomingOrcbane = 81 + +function used(Item, Player) + if GetQuestStep(Player, BecomingOrcbane) == 1 then + local target = GetTarget(Player) + if GetSpawnID(target) == 4700105 then + if GetHP(target) < GetMaxHP(target) * .20 then + CastEntityCommand(Player, target, 1299, "cadaver's dram") + else + SendMessage(Player, "You must use this on a Ry'Gorr tunneler that is under 20 percent life.", "yellow") + end + else + SendMessage(Player, "You can only use this on a Ry'Gorr tunneler.", "yellow") + end + end +end \ No newline at end of file diff --git a/server/ItemScripts/flaskofwater.lua b/server/ItemScripts/flaskofwater.lua new file mode 100644 index 000000000..65dd682d1 --- /dev/null +++ b/server/ItemScripts/flaskofwater.lua @@ -0,0 +1,11 @@ +--[[ + Script Name : ItemScripts/flaskofwater.lua + Script Purpose : + Script Author : Neatz09 + Script Date : 8.18.2019 + Script Notes : +--]] +function cast(Item, Player) +CastSpell(Player, 5009, 2) + +end \ No newline at end of file diff --git a/server/ItemScripts/goblishtranslationnotes.lua b/server/ItemScripts/goblishtranslationnotes.lua new file mode 100644 index 000000000..9caa04e92 --- /dev/null +++ b/server/ItemScripts/goblishtranslationnotes.lua @@ -0,0 +1,7 @@ +--[[ + Script Name : ItemScripts/goblishtranslationnotes.lua + Script Purpose : + Script Author : Jabantiz + Script Date : 6/17/2016 + Script Notes : +--]] \ No newline at end of file diff --git a/server/ItemScripts/guiderobes.lua b/server/ItemScripts/guiderobes.lua new file mode 100644 index 000000000..e69de29bb diff --git a/server/ItemScripts/mysteriousbracers.lua b/server/ItemScripts/mysteriousbracers.lua new file mode 100644 index 000000000..250327d1a --- /dev/null +++ b/server/ItemScripts/mysteriousbracers.lua @@ -0,0 +1,6 @@ +local QUEST = 258 +function examined(Item, Player) + if CanReceiveQuest(Player, QUEST) + then OfferQuest(NPC, Player, QUEST) + end + end \ No newline at end of file diff --git a/server/ItemScripts/pouchofstunsporepowder.lua b/server/ItemScripts/pouchofstunsporepowder.lua new file mode 100644 index 000000000..907088fea --- /dev/null +++ b/server/ItemScripts/pouchofstunsporepowder.lua @@ -0,0 +1,28 @@ +--[[ + Script Name : ItemScripts/pouchofstunsporepowder.lua + Script Purpose : clickable used in quest "Dust to Dust" + Script Author : fearfx + Script Date : 21 Jan 2017 + Script Notes : Pouch of Stunspore Powder (Item ID = 47613) used in Dust to Dust (quest ID = 158) + Temp spell in here until Stunspore Paralysis is added to DB +--]] + +local DustToDust = 158 + +function used(Item, Player) + local target = GetTarget(Player) + local zone = GetZone(Player) + if GetZoneID(zone) == 34 and GetRace(target) == 9 and GetTempVariable(target, "stunned") == nil and GetDistance(target, Player, 0) < 6 then + CastSpell(target, 270086, 1, Player) + AddStepProgress(Player, 158, 1, 1) + SetTempVariable(target, "stunned", "1") + elseif GetRace(target) ~= 9 then + SendMessage(Player, "This item may only be used on a skeleton.", "yellow") + elseif GetTempVariable(target, "stunned") ~= nil then + SendMessage(Player, "This item can only be used once per target.", "yellow") + elseif GetDistance(target, Player, 0) > 6 then + SendMessage(Player, "Move closer to your target.", "yellow") + else + Say(Player, "Error... Please report to Dev team.") + end +end \ No newline at end of file diff --git a/server/ItemScripts/ration.lua b/server/ItemScripts/ration.lua new file mode 100644 index 000000000..2c41d6e5a --- /dev/null +++ b/server/ItemScripts/ration.lua @@ -0,0 +1,12 @@ +--[[ + Script Name : ItemScripts/ration.lua + Script Purpose : + Script Author : Neatz09 + Script Date : 8.18.2019 + Script Notes : +--]] + +function cast(Item, Player) +CastSpell(Player, 5010, 1) + +end \ No newline at end of file diff --git a/server/ItemScripts/runedacorn.lua b/server/ItemScripts/runedacorn.lua new file mode 100644 index 000000000..95950c6e6 --- /dev/null +++ b/server/ItemScripts/runedacorn.lua @@ -0,0 +1,20 @@ +--[[ + Script Name : ItemScripts/runedacorn.lua + Script Purpose : + Script Author : Ememjr + Script Date : 2017.05.09 + Script Notes : +--]] + +local quest = 233 + +function examined(Item, Player) + if not HasQuest(Player, quest) and not HasCompletedQuest(Player, quest) then + OfferQuest(nil, Player, quest) + + --remove quest starter + if HasItem(Player, 11780) then + RemoveItem(Player, 11780) + end + end +end \ No newline at end of file diff --git a/server/ItemScripts/scarwurmpheromone.lua b/server/ItemScripts/scarwurmpheromone.lua new file mode 100644 index 000000000..413d5b4ce --- /dev/null +++ b/server/ItemScripts/scarwurmpheromone.lua @@ -0,0 +1,32 @@ +--[[ + Script Name : ItemScripts/scarwurmpheromone.lua + Script Purpose : clickable used in quest "The Mother Lode" + Script Author : fearfx + Script Date : 24 Jan 2017 + Script Notes : Summons "the wurm mother" (ID = 341051) + +--]] + +local TheMotherLode = 148 + +function used(Item, Player) + local zone = GetZone(Player) + local x = GetX(Player) + local y = GetY(Player) + local z = GetZ(Player) + if x >= -490 and x <= -438 and z <= -43 and z >= -76 and y <= -48 and y >= -53 and GetTempVariable(Player, "WurmMother") == nil and GetQuestStep(Player, TheMotherLode) ~= 3 then + local zone = GetZone(Player) + local newSpawn = SpawnMob(zone, 341051, 1, -464.18, -49.33, -60.43, 242.84) + if newSpawn ~= nil then + AddSpawnAccess(newSpawn, Player) + AddStepProgress(Player, TheMotherLode, 1, 1) + SetTempVariable(Player, "WurmMother", "1") + end + elseif GetQuestStep(Player, TheMotherLode) == 3 then + SendMessage(Player, "You have already killed The Wurm Mother.", "yellow") + elseif GetTempVariable(Player, "WurmMother") ~= nil then + SendMessage(Player, "The Wurm Mother has already been summoned.", "yellow") + else + SendMessage(Player, "You must use this item on the bridge that spans Innoruuk's Scar.", "yellow") + end +end diff --git a/server/ItemScripts/smolderingtrout.lua b/server/ItemScripts/smolderingtrout.lua new file mode 100644 index 000000000..5118b7408 --- /dev/null +++ b/server/ItemScripts/smolderingtrout.lua @@ -0,0 +1,62 @@ +--[[ + Script Name : ItemScripts/smolderingtrout.lua + Script Purpose : clickable used in quest "The Big One" (ID = 190) + Script Author : fearfx + Script Date : 25 Jan 2017 + Script Notes : Smoldering trout (ID = 48104) + : Theres no Spawn for SmolderFin, so I have used a razortooth shark (2530014) instead. + +--]] + +local TheBigOne = 190 + +function used(Item, Player) + local target = GetTarget(Player) + local zone = GetZone(Player) + local x = GetX(Player) + local y = GetY(Player) + local z = GetZ(Player) + if GetTempVariable(Player, "TheBigOne") == nil then + spawnChance = 0 + else + spawnChance = tonumber(GetTempVariable(Player, "TheBigOne")) + end + + if GetZoneID(zone) == 34 and GetQuestStep(TheBigOne) == 1 then + if between(-91.3, 35.5, x) and between(-67, -60, y) and between(-186.79, -54.40, z) then + RemoveItem(Player, 48104) + spawnChance = spawnChance + 20 + SetTempVariable(Player, "TheBigOne", spawnChance) + if tonumber(GetTempVariable(Player, "TheBigOne")) > 20 then + if tonumber(GetTempVariable(Player, "TheBigOne")) > math.random(30, 80) then + spawnSmolderFin(Player, zone) + end + end + + else + SendMessage(Player, "Can only be used in Smoldering Lake.", "yellow") + end + else + SendMessage(Player, "Can only be used in Darklight Wood.", "yellow") + end +end + +function spawnSmolderFin(Player, zone) + local newSpawn = SpawnMob(zone, 1240025, 1, -27.18, -65.33, -110.43, 167.84) + SpawnSet(newSpawn, "name", "Smolderfin") + SpawnSet(newSpawn, "faction", "1") + SpawnSet(newSpawn, "level", "11") + SpawnSet(newSpawn, "size", "90") + SpawnSet(newSpawn, "hp", "220") + if newSpawn ~= nil then + AddSpawnAccess(newSpawn, Player) + end +end + +function between(low, higher, n) + if low <= n and n <= higher then + return true + else + return false + end +end \ No newline at end of file diff --git a/server/ItemScripts/trappedspirits.lua b/server/ItemScripts/trappedspirits.lua new file mode 100644 index 000000000..7dc39274c --- /dev/null +++ b/server/ItemScripts/trappedspirits.lua @@ -0,0 +1,28 @@ +--[[ + Script Name : ItemScripts/trappedspirits.lua + Script Purpose : trapped spirits used in quest "Condemned" + Script Author : Cynnar + Script Date : 1/6/2016 + Script Notes : trapped spirits (Item ID = 48976) Condemned (quest ID = 153) +--]] + +local Condemned = 153 + +function used(Item, Player) + if HasQuest(Player, Condemned) then + local playerX = GetX(Player) + local playerZ = GetZ(Player) + if GetQuestStep(Player, Condemned) == 1 then + if playerX <= -540 and playerX >= -575 then + if playerZ >= 137 and playerZ <= 166 then + AddStepProgress(Player, Condemned, 1, 1) + RemoveItem(Player, 48976) + else + SendMessage(Player, "You must be near the Wellspring of Nightmares to use this.", "yellow") + end + else + SendMessage(Player, "You must be near the Wellspring of Nightmares to use this.", "yellow") + end + end + end +end \ No newline at end of file diff --git a/server/ItemStructs.xml b/server/ItemStructs.xml new file mode 100644 index 000000000..1ed2ce7fc --- /dev/null +++ b/server/ItemStructs.xml @@ -0,0 +1,11710 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/server/LoginServer.ini b/server/LoginServer.ini new file mode 100644 index 000000000..07110c7b5 --- /dev/null +++ b/server/LoginServer.ini @@ -0,0 +1,37 @@ +### --- This file tells world.exe what loginserver to connect to. +### --- Change the account and password fields to the information you used when you created your SERVER account. + +### --- NOTE: the word "Server" is added to each server automaticly. + +# READ README.TXT + +[LoginServer] +loginserver=ENTERIP +loginport=9100 +worldname=TestLabs +worldaddress=ENTERIP +internalworldaddress=ENTERIP +worldport=9001 +locked=false +account=testlabs +password=testpass +#autotableupdates retrieves the latest table updates and applies them to your database +#autotableupdates valid options=always, ask, and never +#autotableupdates=always +#autotableverbose displays detailed information about the updates; options=true or false +#autotableverbose=false +#autotabledata retrieves the latest data for tables like the opcodes table; options=true or false +#autotabledata=true + +[WorldServer] +Defaultstatus=0 +Unavailzone= + +[UpdateServer] +updateserveraddress=127.0.0.1 +#updates.eq2emulator.net +updateserverport=9104 + +[LoginConfig] +ServerMode=StandAlone +ServerPort=9100 diff --git a/server/LoginStructs.xml b/server/LoginStructs.xml new file mode 100644 index 000000000..759a8cb30 --- /dev/null +++ b/server/LoginStructs.xml @@ -0,0 +1,799 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/server/Quests/Antonica/ACaptainsCommunique.lua b/server/Quests/Antonica/ACaptainsCommunique.lua new file mode 100644 index 000000000..f4068d449 --- /dev/null +++ b/server/Quests/Antonica/ACaptainsCommunique.lua @@ -0,0 +1,51 @@ +--[[ + Script Name : ACaptainsCommunique.lua + Script Purpose : Handles the quest, "A Captain's Communique: Eitoa to Sturman" + Script Author : geordie0511 + Script Date : 19.03.2019 + Script Notes : + + Zone : Antonica + Quest Giver : Captain Eitoa + Preceded by : Gnoll Report + Followed by : Outland Brigade Reports +--]] + + +function Init(Quest) + AddQuestStepChat(Quest, 1, "Speak to Captain Sturman.", 1, "I need to deliver this communique to Captain Sturman at Bridge Keep in the Thundering Steppes.", 11, 2490194) + AddQuestStepCompleteAction(Quest, 1, "Step1Complete") +end + +function Step1Complete(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 1, "Spoke to Captain Sturman.") + UpdateQuestTaskGroupDescription(Quest, 1, "I delivered the message to Captain Sturman.") + + AddQuestStepChat(Quest, 2, "Speak to Captain Eitoa.", 1, "I should return to Captain Eitoa at the Qeynos Gates in Antonica and let her know of the situation in Bridge Keep.", 11, 120069) + AddQuestStepCompleteAction(Quest, 2, "QuestComplete") +end + +function QuestComplete(Quest, QuestGiver, Player) + -- The following UpdateQuestStepDescription and UpdateTaskGroupDescription are not needed, parser adds them for completion in case stuff needs to be moved around + UpdateQuestStepDescription(Quest, 2, "Spoken with Captain Eitoa.") + UpdateQuestTaskGroupDescription(Quest, 2, "I returned to Captain Eitoa.") + + UpdateQuestDescription(Quest, "I took the message to Captain Sturman. He was not happy to hear that he was unable to get reinforcements or replacements for his tired men in Bridge Keep. I let Captain Eitoa know of the situation in the Thundering Steppes.") + GiveQuestReward(Quest, Player) +end + +function Reload(Quest, QuestGiver, Player, Step) + if Step == 1 then + Step1Complete(Quest, QuestGiver, Player) + elseif Step == 2 then + QuestComplete(Quest, QuestGiver, Player) + end +end + +function Accepted(Quest, QuestGiver, Player) + -- Add dialog here for when the quest is accepted +end + +function Declined(Quest, QuestGiver, Player) + -- Add dialog here for when the quest is declined +end diff --git a/server/Quests/Antonica/Achoo!AntonicanPepper.lua.lua b/server/Quests/Antonica/Achoo!AntonicanPepper.lua.lua new file mode 100644 index 000000000..3494badc6 --- /dev/null +++ b/server/Quests/Antonica/Achoo!AntonicanPepper.lua.lua @@ -0,0 +1,51 @@ +--[[ + Script Name : Achoo!AntonicanPepper.lua + Script Purpose : Handles the quest, "Achoo! Antonican Pepper" + Script Author : geordie0511 + Script Date : 14.03.2019 + Script Notes : + + Zone : Antonica + Quest Giver : Matsy Rollingpin + Preceded by : None + Followed by : Blub Blub Something Smells Fishy +--]] + + +function Init(Quest) + AddQuestStepChat(Quest, 1, "I need to find Merchant Novak.", 1, "Matsy needs pepper for her chowder from Merchant Novak.", 797, 120099) + AddQuestStepCompleteAction(Quest, 1, "Step1Complete") +end + +function Step1Complete(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 1, "I have the pepper.") + UpdateQuestTaskGroupDescription(Quest, 1, "I acquired the pepper from Merchant Novak.") + + AddQuestStepChat(Quest, 2, "I must return to Matsy.", 1, "I have the pepper and should now return to Matsy.", 797, 120280) + AddQuestStepCompleteAction(Quest, 2, "QuestComplete") +end + +function QuestComplete(Quest, QuestGiver, Player) + -- The following UpdateQuestStepDescription and UpdateTaskGroupDescription are not needed, parser adds them for completion in case stuff needs to be moved around + UpdateQuestStepDescription(Quest, 2, "I have given Matsy the pepper for her chowder.") + UpdateQuestTaskGroupDescription(Quest, 2, "I have given the pepper to Matsy.") + + UpdateQuestDescription(Quest, "I helped Matsy finish her cooking by fetching some more pepper from Merchant Novak. She seemed very busy. I wonder if she needs any more help.") + GiveQuestReward(Quest, Player) +end + +function Reload(Quest, QuestGiver, Player, Step) + if Step == 1 then + Step1Complete(Quest, QuestGiver, Player) + elseif Step == 2 then + QuestComplete(Quest, QuestGiver, Player) + end +end + +function Accepted(Quest, QuestGiver, Player) + -- Add dialog here for when the quest is accepted +end + +function Declined(Quest, QuestGiver, Player) + -- Add dialog here for when the quest is declined +end diff --git a/server/Quests/Antonica/Blub,Blub-SomethingSmellsFishy.lua b/server/Quests/Antonica/Blub,Blub-SomethingSmellsFishy.lua new file mode 100644 index 000000000..1e4099018 --- /dev/null +++ b/server/Quests/Antonica/Blub,Blub-SomethingSmellsFishy.lua @@ -0,0 +1,52 @@ +--[[ + Script Name : Blub,Blub-SomethingSmellsFishy.lua + Script Purpose : Handles the quest, "Blub, Blub - Something Smells Fishy" + Script Author : geordie0511 + Script Date : 14.03.2019 + Script Notes : + + Zone : Antonica + Quest Giver : + Preceded by : Achoo! Antonican Pepper + Followed by : Killing With Kindness, One Barbarian at a Time +--]] + + +function Init(Quest) + AddQuestStepKill(Quest, 1, "I need to rustle up some Coldwind fish for Matsy's Chowder.", 10, 100, "Matsy needs the special Coldwind fish for her soup. They can be found in the ocean or in the rivers.", 2547, 121237, 120079, 121249, 120094, 121250, 120096, 121252, 120093) + AddQuestStepCompleteAction(Quest, 1, "Step1Complete") +end + +function Step1Complete(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 1, "I managed to get enough Coldwind fish for Matsy's Chowder.") + UpdateQuestTaskGroupDescription(Quest, 1, "I have caught all the Coldwind fish I can carry.") + + AddQuestStepChat(Quest, 2, "I should return to Matsy.", 1, "I need to return these fish to Matsy.", 2547, 120280) + AddQuestStepCompleteAction(Quest, 2, "QuestComplete") +end + +function QuestComplete(Quest, QuestGiver, Player) + -- The following UpdateQuestStepDescription and UpdateTaskGroupDescription are not needed, parser adds them for completion in case stuff needs to be moved around + UpdateQuestStepDescription(Quest, 2, "Matsy now has enough Coldwind fish to make extra chowder.") + UpdateQuestTaskGroupDescription(Quest, 2, "I have brought Matsy the Coldwind fish.") + + UpdateQuestDescription(Quest, "I have returned the Coldwind fish to Matsy.") + GiveQuestReward(Quest, Player) +end + +function Reload(Quest, QuestGiver, Player, Step) + if Step == 1 then + Step1Complete(Quest, QuestGiver, Player) + elseif Step == 2 then + QuestComplete(Quest, QuestGiver, Player) + end +end + +function Accepted(Quest, QuestGiver, Player) + -- Add dialog here for when the quest is accepted +end + +function Declined(Quest, QuestGiver, Player) + -- Add dialog here for when the quest is declined +end + diff --git a/server/Quests/Antonica/CarePackageforBlarton.lua b/server/Quests/Antonica/CarePackageforBlarton.lua new file mode 100644 index 000000000..88afde355 --- /dev/null +++ b/server/Quests/Antonica/CarePackageforBlarton.lua @@ -0,0 +1,51 @@ +--[[ + Script Name : CarePackageforBlarton.lua + Script Purpose : Handles the quest, "Care Package for Blarton" + Script Author : geordie0511 + Script Date : 14.03.2019 + Script Notes : + + Zone : Antonica + Quest Giver : + Preceded by : Killing with Kindness, One Barbarian at a Time + Followed by : Spicy Meat Pie +--]] + + +function Init(Quest) + AddQuestStepChat(Quest, 1, "I must find Blarton Blumble.", 1, "Matsy asked me to take these cookies to Blarton. He resides in Windstalker Village.", 2556, 120163) + AddQuestStepCompleteAction(Quest, 1, "Step1Complete") +end + +function Step1Complete(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 1, "I have delivered the cookies to Blarton Blumble.") + UpdateQuestTaskGroupDescription(Quest, 1, "I took Blarton the cookies from Matsy.") + + AddQuestStepChat(Quest, 2, "I should return to Matsy.", 1, "I need to go back and let Matsy know that her cousin enjoyed the cookies.", 2556, 120280) + AddQuestStepCompleteAction(Quest, 2, "QuestComplete") +end + +function QuestComplete(Quest, QuestGiver, Player) + -- The following UpdateQuestStepDescription and UpdateTaskGroupDescription are not needed, parser adds them for completion in case stuff needs to be moved around + UpdateQuestStepDescription(Quest, 2, "Matsy gave me cookies for my trouble. Yum!") + UpdateQuestTaskGroupDescription(Quest, 2, "I told Matsy that Blarton got his cookies.") + + UpdateQuestDescription(Quest, "The cookies seemed to make Blarton a much happier halfling.") + GiveQuestReward(Quest, Player) +end + +function Reload(Quest, QuestGiver, Player, Step) + if Step == 1 then + Step1Complete(Quest, QuestGiver, Player) + elseif Step == 2 then + QuestComplete(Quest, QuestGiver, Player) + end +end + +function Accepted(Quest, QuestGiver, Player) + -- Add dialog here for when the quest is accepted +end + +function Declined(Quest, QuestGiver, Player) + -- Add dialog here for when the quest is declined +end diff --git a/server/Quests/Antonica/GnollReport.lua b/server/Quests/Antonica/GnollReport.lua new file mode 100644 index 000000000..0e42ec05c --- /dev/null +++ b/server/Quests/Antonica/GnollReport.lua @@ -0,0 +1,71 @@ +--[[ + Script Name : GnollReport.lua + Script Purpose : Handles the quest, "Gnoll Report" + Script Author : geordie0511 + Script Date : 19.03.2019 + Script Notes : + + Zone : Antonica + Quest Giver : Captain Eitoa + Preceded by : The Keep of the Ardent Needle + Followed by : A Captain's Communique: Eitoa to Sturman +--]] + + +function Init(Quest) + AddQuestStepChat(Quest, 1, "Speak with Captain Beltho at Gnollslayer Keep.", 1, "I must go to Gnollslayer Keep. Follow the eastward road running from the North Gate of Qeynos. It leads towards the Thundering Steppes. Along the way I shall find the keep.", 11, 120400) + AddQuestStepCompleteAction(Quest, 1, "Step1Complete") +end + +function Step1Complete(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 1, "Spoke with Captain Beltho.") + UpdateQuestTaskGroupDescription(Quest, 1, "I've spoken with Captain Beltho, though he does not have the report ready at this time.") + + AddQuestStepLocation(Quest, 2, "Go to the hidden entrance of the gnoll lair.", 30, "I must find the hidden entrance to the gnoll lair somewhere near the southern islands.", 11, -1214, -3, 912) + AddQuestStepCompleteAction(Quest, 2, "Step2Complete") +end + +function Step2Complete(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 2, "Found the hidden entrance of Blackburrow.") + UpdateQuestTaskGroupDescription(Quest, 2, "I've found the hidden entrance to the gnoll lair at the base of the southern range in Antonica.") + + AddQuestStepChat(Quest, 3, "Speak to Captain Beltho at Gnollslayer Keep.", 1, "I must return with the location of the entrance to Captain Beltho in Gnollslayer Keep in Antonica.", 11, 120400) + AddQuestStepCompleteAction(Quest, 3, "Step3Complete") +end + +function Step3Complete(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 3, "Spoke to Captain Beltho.") + UpdateQuestTaskGroupDescription(Quest, 3, "I've picked up the report from Captain Beltho in Gnollslayer Keep.") + + AddQuestStepChat(Quest, 4, "Speak to Captain Eitoa near the North Qeynos gate.", 1, "I must deliver Captain Beltho's report safely to Captain Eitoa at the gates of Qeynos.", 75, 120069) + AddQuestStepCompleteAction(Quest, 4, "QuestComplete") +end + +function QuestComplete(Quest, QuestGiver, Player) + -- The following UpdateQuestStepDescription and UpdateTaskGroupDescription are not needed, parser adds them for completion in case stuff needs to be moved around + UpdateQuestStepDescription(Quest, 4, "Spoke to Captain Eitoa.") + UpdateQuestTaskGroupDescription(Quest, 4, "I've safely delivered Captain Beltho's report to Captain Eitoa.") + + UpdateQuestDescription(Quest, "Not only have I returned the report to Captain Eitoa, I've also discovered the origin of the gnoll presence in Antonica. Perhaps I can venture inside later. Who knows what waits within? The entrance has thought to have been sealed for ages.") + GiveQuestReward(Quest, Player) +end + +function Reload(Quest, QuestGiver, Player, Step) + if Step == 1 then + Step1Complete(Quest, QuestGiver, Player) + elseif Step == 2 then + Step2Complete(Quest, QuestGiver, Player) + elseif Step == 3 then + Step3Complete(Quest, QuestGiver, Player) + elseif Step == 4 then + QuestComplete(Quest, QuestGiver, Player) + end +end + +function Accepted(Quest, QuestGiver, Player) + -- Add dialog here for when the quest is accepted +end + +function Declined(Quest, QuestGiver, Player) + -- Add dialog here for when the quest is declined +end diff --git a/server/Quests/Antonica/KillingwithKindness,OneBarbarianataTime.lua b/server/Quests/Antonica/KillingwithKindness,OneBarbarianataTime.lua new file mode 100644 index 000000000..03d5fadcb --- /dev/null +++ b/server/Quests/Antonica/KillingwithKindness,OneBarbarianataTime.lua @@ -0,0 +1,52 @@ +--[[ + Script Name : KillingwithKindness,OneBarbarianataTime.lua + Script Purpose : Handles the quest, "Killing with Kindness, One Barbarian at a Time" + Script Author : geordie0511 + Script Date : 14.03.2019 + Script Notes : + + Zone : Antonica + Quest Giver : + Preceded by : Blub, Blub - Something Smells Fishy + Followed by : Care Package for Blarton +--]] + + +function Init(Quest) + AddQuestStepChat(Quest, 1, "I need to take this stew to Aroof.", 1, "Matsy gave me some of her chowder to give to Aroof.", 295, 121391) + AddQuestStepCompleteAction(Quest, 1, "Step1Complete") +end + +function Step1Complete(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 1, "I have given Aroof the stew as Matsy requested.") + UpdateQuestTaskGroupDescription(Quest, 1, "I gave some of Matsy's good soup to Aroof.") + + AddQuestStepChat(Quest, 2, "I need to talk to Matsy.", 1, "I should let Matsy know that Aroof enjoyed the stew.", 295, 120280) + AddQuestStepCompleteAction(Quest, 2, "QuestComplete") +end + +function QuestComplete(Quest, QuestGiver, Player) + -- The following UpdateQuestStepDescription and UpdateTaskGroupDescription are not needed, parser adds them for completion in case stuff needs to be moved around + UpdateQuestStepDescription(Quest, 2, "The stew has been delivered.") + UpdateQuestTaskGroupDescription(Quest, 2, "Matsy was pleased that Aroof enjoyed his stew.") + + UpdateQuestDescription(Quest, "I gave a drunken barbarian named Aroof some stew on behalf of Matsy.") + GiveQuestReward(Quest, Player) +end + +function Reload(Quest, QuestGiver, Player, Step) + if Step == 1 then + Step1Complete(Quest, QuestGiver, Player) + elseif Step == 2 then + QuestComplete(Quest, QuestGiver, Player) + end +end + +function Accepted(Quest, QuestGiver, Player) + -- Add dialog here for when the quest is accepted +end + +function Declined(Quest, QuestGiver, Player) + -- Add dialog here for when the quest is declined +end + diff --git a/server/Quests/Antonica/LuckyLure.lua b/server/Quests/Antonica/LuckyLure.lua new file mode 100644 index 000000000..ccaf60819 --- /dev/null +++ b/server/Quests/Antonica/LuckyLure.lua @@ -0,0 +1,56 @@ +--[[ + Script Name : LuckyLure.lua + Script Purpose : Handles the quest, "Lucky Lure" + Script Author : geordie0511 + Script Date : 12.03.2019 + Script Notes : edited by geordie0511 + + Zone : Antonica + Quest Giver : Blarton Blumble + Preceded by : None + Followed by : Fishing Hole Hunt +--]] + + +function Init(Quest) + AddQuestStepHarvest(Quest, 1, "Find Blarton's fishing lure.", 1, 100, "I should search for Blarton's lost lure along the beach north of Windstalker Village in Antonica.", 1037, 121183) + AddQuestStepCompleteAction(Quest, 1, "Step1Complete") +end + +function Accepted(Quest, QuestGiver, Player) + -- Add dialog here for when the quest is accepted +end + +function Declined(Quest, QuestGiver, Player) + -- Add dialog here for when the quest is declined +end + +function Deleted(Quest, QuestGiver, Player) + -- Remove any quest specific items here when the quest is deleted +end + +function Step1Complete(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 1, "I have found Blarton's fishing lure.") + UpdateQuestTaskGroupDescription(Quest, 1, "I have found the lost fishing lure.") + + AddQuestStepChat(Quest, 2, "Return Blarton's lost fishing lure.", 1, "I have found the missing lure and must return it to Blarton in Windstalker Village.", 1037, 120163) + AddQuestStepCompleteAction(Quest, 2, "QuestComplete") +end + +function QuestComplete(Quest, QuestGiver, Player) + -- The following UpdateQuestStepDescription and UpdateTaskGroupDescription are not needed, parser adds them for completion in case stuff needs to be moved around + UpdateQuestStepDescription(Quest, 2, "I brought the lure back to Blarton.") + UpdateQuestTaskGroupDescription(Quest, 2, "I have returned Blarton's fishing lure.") + + UpdateQuestDescription(Quest, "I have retrieved Blarton's lost fishing lure and returned it to him. He seemed very happy about it. I wonder if he needs help with anything else.") + GiveQuestReward(Quest, Player) +end + +function Reload(Quest, QuestGiver, Player, Step) + if Step == 1 then + Step1Complete(Quest, QuestGiver, Player) + elseif Step == 2 then + QuestComplete(Quest, QuestGiver, Player) + end +end + diff --git a/server/Quests/Antonica/MailDeliveryforMatsy.lua b/server/Quests/Antonica/MailDeliveryforMatsy.lua new file mode 100644 index 000000000..32292f9be --- /dev/null +++ b/server/Quests/Antonica/MailDeliveryforMatsy.lua @@ -0,0 +1,41 @@ +--[[ + Script Name : MailDeliveryforMatsy.lua + Script Purpose : Handles the quest, "Mail Delivery for Matsy" + Script Author : geordie0511 + Script Date : 19.03.2019 + Script Notes : + + Zone : Antonica + Quest Giver : Matsy Rollingpin + Preceded by : Spicy Meat Pie + Followed by : None +--]] + + +function Init(Quest) + AddQuestStepChat(Quest, 1, "Matsy gave me a letter to take to Jacques in The Thundering Steppes", 1, "I must bring Matsy's letter to Jacques in the Thundering Steppes near the gate to Antonica.", 11, 2490212) + AddQuestStepCompleteAction(Quest, 1, "QuestComplete") +end + +function QuestComplete(Quest, QuestGiver, Player) + -- The following UpdateQuestStepDescription and UpdateTaskGroupDescription are not needed, parser adds them for completion in case stuff needs to be moved around + UpdateQuestStepDescription(Quest, 1, "I took the letter to Jacques in The Thundering Steppes.") + UpdateQuestTaskGroupDescription(Quest, 1, "I have delivered the mail for Matsy.") + + UpdateQuestDescription(Quest, "I have delivered Matsy's letter to Jacques in the Thundering Steppes.") + GiveQuestReward(Quest, Player) +end + +function Reload(Quest, QuestGiver, Player, Step) + if Step == 1 then + QuestComplete(Quest, QuestGiver, Player) + end +end + +function Accepted(Quest, QuestGiver, Player) + -- Add dialog here for when the quest is accepted +end + +function Declined(Quest, QuestGiver, Player) + -- Add dialog here for when the quest is declined +end diff --git a/server/Quests/Antonica/SpicyMeatPie.lua b/server/Quests/Antonica/SpicyMeatPie.lua new file mode 100644 index 000000000..63bb9dd33 --- /dev/null +++ b/server/Quests/Antonica/SpicyMeatPie.lua @@ -0,0 +1,69 @@ +--[[ + Script Name : SpicyMeatPie.lua + Script Purpose : Handles the quest, "Spicy Meat Pie" + Script Author : geordie0511 + Script Date : 19.03.2019 + Script Notes : + + Zone : Antonica + Quest Giver : Matsy Rollingpin + Preceded by : Care Package for Blarton + Followed by : Mail Delivery for Matsy +--]] + + +function Init(Quest) + AddQuestStepKill(Quest, 1, "I need to go out and hunt wolves for Matsy's ingredients.", 5, 100, "Matsy has asked me to gather together some ingredients for her new pie.", 297, 120008, 120106, 120180, 120266, 120293, 121188, 121258, 121261, 121321, 121375, 121402) + AddQuestStepCompleteAction(Quest, 1, "Step1Complete") +end + +function Step1Complete(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 1, "I have collected the wolf meat that Matsy requires.") + + AddQuestStepKill(Quest, 2, "I need to go out and hunt birds for Matsy's ingredients.", 5, 100, "Matsy has asked me to gather together some ingredients for her new pie.", 297, 120011, 120119, 120257, 121191, 121266, 121370, 120064, 121222) + AddQuestStepCompleteAction(Quest, 2, "Step2Complete") +end + +function Step2Complete(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 2, "I have collected the bird meat that Matsy requires.") + + AddQuestStepKill(Quest, 3, "I need to go out and hunt bears for Matsy's ingredients.", 5, 100, "Matsy has asked me to gather together some ingredients for her new pie.", 297, 120029, 120064, 121208, 121222, 120011, 120257, 121191, 121266) + AddQuestStepCompleteAction(Quest, 3, "Step3Complete") +end + +function Step3Complete(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 3, "I have collected the bear meat that Matsy requires.") + UpdateQuestTaskGroupDescription(Quest, 1, "I have gathered all of the ingredients for Matsy.") + + AddQuestStepChat(Quest, 4, "I need to take these meats back to Matsy.", 1, "I now have all of the ingredients that Matsy needs for her special recipe.", 297, 120280) + AddQuestStepCompleteAction(Quest, 4, "QuestComplete") +end + +function QuestComplete(Quest, QuestGiver, Player) + -- The following UpdateQuestStepDescription and UpdateTaskGroupDescription are not needed, parser adds them for completion in case stuff needs to be moved around + UpdateQuestStepDescription(Quest, 4, "Matsy made an excellent spicy meat pie with the ingredients that I collected for her.") + UpdateQuestTaskGroupDescription(Quest, 2, "I gave Matsy the ingredients.") + + UpdateQuestDescription(Quest, "I have gathered the ingredients Matsy needs for her dish.") + GiveQuestReward(Quest, Player) +end + +function Reload(Quest, QuestGiver, Player, Step) + if Step == 1 then + Step1Complete(Quest, QuestGiver, Player) + elseif Step == 2 then + Step2Complete(Quest, QuestGiver, Player) + elseif Step == 3 then + Step3Complete(Quest, QuestGiver, Player) + elseif Step == 4 then + QuestComplete(Quest, QuestGiver, Player) + end +end + +function Accepted(Quest, QuestGiver, Player) + -- Add dialog here for when the quest is accepted +end + +function Declined(Quest, QuestGiver, Player) + -- Add dialog here for when the quest is declined +end \ No newline at end of file diff --git a/server/Quests/Antonica/TheKeepOfTheArdentNeedle.lua b/server/Quests/Antonica/TheKeepOfTheArdentNeedle.lua new file mode 100644 index 000000000..5ecbdea00 --- /dev/null +++ b/server/Quests/Antonica/TheKeepOfTheArdentNeedle.lua @@ -0,0 +1,51 @@ +--[[ + Script Name : TheKeepoftheArdentNeedle.lua + Script Purpose : Handles the quest, "The Keep of the Ardent Needle" + Script Author : geordie0511 + Script Date : 19.03.2019 + Script Notes : + + Zone : Antonica + Quest Giver : Captain Eitoa + Preceded by : None + Followed by : Gnoll Report +--]] + + +function Init(Quest) + AddQuestStepLocation(Quest, 1, "Search the Keep of the Ardent Needle.", 30, "I must check the Keep of the Ardent Needle thoroughly.", 11, -555, -12, -327) + AddQuestStepCompleteAction(Quest, 1, "Step1Complete") +end + +function Step1Complete(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 1, "Searched the Keep of the Ardent Needle.") + UpdateQuestTaskGroupDescription(Quest, 1, "I've inspected the Keep of the Ardent Needle, and found nothing suspicious.") + + AddQuestStepChat(Quest, 2, "Speak with Captain Eitoa.", 1, "I must return to Captain Eitoa and inform her of the keep's status.", 11, 120069) + AddQuestStepCompleteAction(Quest, 2, "QuestComplete") +end + +function QuestComplete(Quest, QuestGiver, Player) + -- The following UpdateQuestStepDescription and UpdateTaskGroupDescription are not needed, parser adds them for completion in case stuff needs to be moved around + UpdateQuestStepDescription(Quest, 2, "Spoken with Captain Eitoa.") + UpdateQuestTaskGroupDescription(Quest, 2, "I've spoken with Captain Eitoa and informed her of the keep's status.") + + UpdateQuestDescription(Quest, "Captain Eitoa's suspicions were unfounded, yet for a moment she still seemed concerned. Guard Loxley's work defending the tower remains unquestioned, and the keep remains clear of any form of wrong-doing.") + GiveQuestReward(Quest, Player) +end + +function Reload(Quest, QuestGiver, Player, Step) + if Step == 1 then + Step1Complete(Quest, QuestGiver, Player) + elseif Step == 2 then + QuestComplete(Quest, QuestGiver, Player) + end +end + +function Accepted(Quest, QuestGiver, Player) + -- Add dialog here for when the quest is accepted +end + +function Declined(Quest, QuestGiver, Player) + -- Add dialog here for when the quest is declined +end diff --git a/server/Quests/Antonica/history_of_the_ayrdal_part_i.lua b/server/Quests/Antonica/history_of_the_ayrdal_part_i.lua new file mode 100644 index 000000000..e79f5929f --- /dev/null +++ b/server/Quests/Antonica/history_of_the_ayrdal_part_i.lua @@ -0,0 +1,93 @@ +--[[ + Script Name : Quests/Antonica/history_of_the_ayrdal_part_i.lua + Script Author : Ememjr + Script Date : 2019.03.25 05:03:17 + Script Purpose : + + Zone : Antonica + Quest Giver: + Preceded by: None + Followed by: +--]] + +function Init(Quest) + AddQuestStepLocation(Quest, 1, "I need to visit Glade of the Coven.", 10, "I would like to visit the Glade of the Coven in Antonica.", 11, 160, -24, 441) + AddQuestStepCompleteAction(Quest, 1, "Step1Complete") +end + +function Accepted(Quest, QuestGiver, Player) + -- Add dialog here for when the quest is accepted +end + +function Declined(Quest, QuestGiver, Player) + -- Add dialog here for when the quest is declined +end + +function Deleted(Quest, QuestGiver, Player) + -- Remove any quest specific items here when the quest is deleted +end + +function Step1Complete(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 1, "I have seen Glade of the Coven.") + UpdateQuestTaskGroupDescription(Quest, 1, "I have seen the Glade of the Coven.") + + AddQuestStep(Quest, 2, "I should read the book.", 1, 100, "I should read the book now that I have a new page.", 2180) + AddQuestStepCompleteAction(Quest, 2, "Step2Complete") +end + +function Step2Complete(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 2, "I have read the book.") + UpdateQuestTaskGroupDescription(Quest, 2, "I have read the book.") + + AddQuestStepLocation(Quest, 3, "I need to visit the Crossroads.", 10, "I must visit the Crossroads in the Commonlands.", 11, -528, -43, -276 ) + AddQuestStepCompleteAction(Quest, 3, "Step3Complete") +end + +function Step3Complete(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 3, "I have seen the Crossroads.") + UpdateQuestTaskGroupDescription(Quest, 3, "I have seen the Crossroads.") + + AddQuestStep(Quest, 4, "I should read the book.", 1, 100, "I should read the book now that I have a new page.", 2180) + AddQuestStepCompleteAction(Quest, 4, "Step4Complete") +end + +function Step4Complete(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 4, "I have read the book.") + UpdateQuestTaskGroupDescription(Quest, 4, "I have read the book.") + + AddQuestStepLocation(Quest, 5, "I need to visit Turmoil Cemetery.", 10, "I need to visit the Turmoil Cemetery in the Commonlands.", 11, -1342, -69, 372) + AddQuestStepCompleteAction(Quest, 5, "Step5Complete") +end + +function Step5Complete(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 5, "I have seen Turmoil Cemetery.") + UpdateQuestTaskGroupDescription(Quest, 5, "I have seen the Turmoil Cemetery.") + + AddQuestStep(Quest, 6, "I should read the book.", 1, 100, "I should read the book now that I have a new page.", 2180) + AddQuestStepCompleteAction(Quest, 6, "QuestComplete") +end + +function QuestComplete(Quest, QuestGiver, Player) + -- The following UpdateQuestStepDescription and UpdateTaskGroupDescription are not needed, parser adds them for completion in case stuff needs to be moved around + UpdateQuestStepDescription(Quest, 6, "I have read the book.") + UpdateQuestTaskGroupDescription(Quest, 6, "I have read the book.") + + UpdateQuestDescription(Quest, "I have visited several sites and pondered their meaning, reading more of this tome along the way. Soon I shall have enough experience to consider Part Two.") + GiveQuestReward(Quest, Player) +end + +function Reload(Quest, QuestGiver, Player, Step) + if Step == 1 then + Step1Complete(Quest, QuestGiver, Player) + elseif Step == 2 then + Step2Complete(Quest, QuestGiver, Player) + elseif Step == 3 then + Step3Complete(Quest, QuestGiver, Player) + elseif Step == 4 then + Step4Complete(Quest, QuestGiver, Player) + elseif Step == 5 then + Step5Complete(Quest, QuestGiver, Player) + elseif Step == 6 then + QuestComplete(Quest, QuestGiver, Player) + end +end diff --git a/server/Quests/Antonica/history_of_the_barbarians_part_i.lua b/server/Quests/Antonica/history_of_the_barbarians_part_i.lua new file mode 100644 index 000000000..4ab191d41 --- /dev/null +++ b/server/Quests/Antonica/history_of_the_barbarians_part_i.lua @@ -0,0 +1,103 @@ +--[[ + Script Name : Quests/Antonica/history_of_the_barbarians_part_i.lua + Script Author : Ememjr + Script Date : 2019.03.28 04:03:19 + Script Purpose : + + Zone : Antonica + Quest Giver: + Preceded by: None + Followed by: +Quest 477 +this script is still being worked on +--]] + + +function Init(Quest) + + -- updated via zone quest + AddQuestStepLocation(Quest, 1, "I need to visit Crater Pond.", 10, "I would like to visit the Crater Pond in Antonica.", 11, 160, -24, 441) + AddQuestStepCompleteAction(Quest, 1, "Step1Complete") +end + +function Accepted(Quest, QuestGiver, Player) + Item = GetTempVariable(Player, "Q477") + conversation = CreateConversation() + AddConversationOption(conversation, "Continue Story 1","ContStory1") + AddConversationOption(conversation, "Close") + StartDialogConversation(conversation, 2, Item, Player, "Q Our Name Struck Fear .... text needed") +end + +function Declined(Quest, QuestGiver, Player) + Item = GetTempVariable(Player, "Q477") + CloseItemConversation(Item, Player) +end + +function Deleted(Quest, QuestGiver, Player) + -- Remove any quest specific items here when the quest is deleted +end + +function Step1Complete(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 1, "I have seen Crater Pond.") + UpdateQuestTaskGroupDescription(Quest, 1, "I have seen Crater Pond.") + + AddQuestStep(Quest, 2, "I should read the book.", 1, 100, "I should read the book now that I have a new page.", 2180) + AddQuestStepCompleteAction(Quest, 2, "Step2Complete") +end + +function Step2Complete(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 2, "I have read the book.") + UpdateQuestTaskGroupDescription(Quest, 2, "I have read the book.") + + AddQuestStepLocation(Quest, 3, "I need to visit the Collapsed Everfrost Tunnel.", 10, "I must visit the Collapsed Everfrost Tunnel in Blackburrow.", 11, -95, 0, -95) + AddQuestStepCompleteAction(Quest, 3, "Step3Complete") +end + +function Step3Complete(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 3, "I have seen the Collapsed Everfrost Tunnel.") + UpdateQuestTaskGroupDescription(Quest, 3, "I have seen the Collapsed Everfrost Tunnel.") + + AddQuestStep(Quest, 4, "I should read the book.", 1, 100, "I should read the book now that I have a new page.", 2180) + AddQuestStepCompleteAction(Quest, 4, "Step4Complete") +end + +function Step4Complete(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 4, "I have read the book.") + UpdateQuestTaskGroupDescription(Quest, 4, "I have read the book.") + + AddQuestStepLocation(Quest, 5, "I need to visit The Keep of the Gnollslayers.", 10, "I need to visit the Keep of the Gnollslayers in Antonica.", 11, -2104, -43, 438 ) + AddQuestStepCompleteAction(Quest, 5, "Step5Complete") +end + +function Step5Complete(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 5, "I have seen The Keep of the Gnollslayers.") + UpdateQuestTaskGroupDescription(Quest, 5, "I have seen the Keep of the Gnollslayers in Antonica.") + + AddQuestStep(Quest, 6, "I should read the book.", 1, 100, "I should read the book now that I have a new page.", 2180) + AddQuestStepCompleteAction(Quest, 6, "QuestComplete") +end + +function QuestComplete(Quest, QuestGiver, Player) + -- The following UpdateQuestStepDescription and UpdateTaskGroupDescription are not needed, parser adds them for completion in case stuff needs to be moved around + UpdateQuestStepDescription(Quest, 6, "I have read the book.") + UpdateQuestTaskGroupDescription(Quest, 6, "I have read the book.") + + UpdateQuestDescription(Quest, "I have visited several sites and pondered their meaning, reading more of this tome along the way. Soon I shall have enough experience to consider Part Two.") + GiveQuestReward(Quest, Player) +end + +function Reload(Quest, QuestGiver, Player, Step) + if Step == 1 then + Step1Complete(Quest, QuestGiver, Player) + elseif Step == 2 then + Step2Complete(Quest, QuestGiver, Player) + elseif Step == 3 then + Step3Complete(Quest, QuestGiver, Player) + elseif Step == 4 then + Step4Complete(Quest, QuestGiver, Player) + elseif Step == 5 then + Step5Complete(Quest, QuestGiver, Player) + elseif Step == 6 then + QuestComplete(Quest, QuestGiver, Player) + end +end \ No newline at end of file diff --git a/server/Quests/Antonica/once_upon_an_isle_dreary.lua b/server/Quests/Antonica/once_upon_an_isle_dreary.lua new file mode 100644 index 000000000..07e9275e6 --- /dev/null +++ b/server/Quests/Antonica/once_upon_an_isle_dreary.lua @@ -0,0 +1,63 @@ +--[[ + Script Name : once_upon_an_isle_dreary.lua + Script Purpose : Handles the quest, "Once Upon an Isle Dreary" + Script Author : Jabantiz + Script Date : 9/1/2019 + Script Notes : Auto generated with QuestParser. + + Zone : Antonica + Quest Giver : + Preceded by : None + Followed by : None +--]] + +require "SpawnScripts/Generic/DialogModule" + +function Init(Quest) + AddQuestStepKill(Quest, 1, "Slay dankfur gnolls.", 4, 75, "I must swim to the isles off the southwest coast of Antonica. There I will slay dankfur gnolls.", 75, 120340, 120420, 121433, 121481) + AddQuestStepCompleteAction(Quest, 1, "Step1Complete") +end + +function Accepted(Quest, QuestGiver, Player) + FaceTarget(QuestGiver, Player) + Dialog.New(QuestGiver, Player) + + Dialog.AddDialog("Will you?! Oh! Thank you! Search them well, yes, search them very well. I know my scrolls are being clutched by those furry paws!") + Dialog.AddVoiceover("voiceover/english/quallium/antonica/quallium002.mp3", 497416154, 1226676289) + Dialog.AddOption("I will return with your scrolls.") + + Dialog.Start() +end + +function Declined(Quest, QuestGiver, Player) + -- Add dialog here for when the quest is declined +end + +function Deleted(Quest, QuestGiver, Player) + -- Remove any quest specific items here when the quest is deleted +end + +function Step1Complete(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 1, "Got four poems.") + UpdateQuestTaskGroupDescription(Quest, 1, "I swam to the isles off the southwest coast of Antonica. There I slew dankfur gnolls to gain the four poems.") + + AddQuestStepChat(Quest, 2, "Speak to Quallium.", 1, "I must return the poems to Quallium in southwest Antonica.", 11, 120215) + AddQuestStepCompleteAction(Quest, 2, "QuestComplete") +end + +function QuestComplete(Quest, QuestGiver, Player) + -- The following UpdateQuestStepDescription and UpdateTaskGroupDescription are not needed, parser adds them for completion in case stuff needs to be moved around + UpdateQuestStepDescription(Quest, 2, "Spoke to Quallium.") + UpdateQuestTaskGroupDescription(Quest, 2, "I returned the poems to Quallium in southwest Antonica.") + + UpdateQuestDescription(Quest, "I retrieved all four poems from the gnolls on the isles. I gave the poems to Quallium.") + GiveQuestReward(Quest, Player) +end + +function Reload(Quest, QuestGiver, Player, Step) + if Step == 1 then + Step1Complete(Quest, QuestGiver, Player) + elseif Step == 2 then + QuestComplete(Quest, QuestGiver, Player) + end +end diff --git a/server/Quests/Antonica/qeynosian_civil_service.lua b/server/Quests/Antonica/qeynosian_civil_service.lua new file mode 100644 index 000000000..a25783d36 --- /dev/null +++ b/server/Quests/Antonica/qeynosian_civil_service.lua @@ -0,0 +1,71 @@ +--[[ + Script Name : QeynosianCivilService.lua + Script Purpose : Handles the quest, "Qeynosian Civil Service" + Script Author : geordie0511 + Script Date : 13.03.2019 + Script Notes : + + Zone : Antonica + Quest Giver : Knight-Lieutenant Alesso + Preceded by : None + Followed by : None +--]] + + +function Init(Quest) + SetQuestFeatherColor(Quest, 3) + SetQuestRepeatable(Quest) + AddQuestStepKill(Quest, 1, "I need to kill ten rats.", 10, 100, "I need to head out into Antonica and kill the vermin that infest the land; rats, snakes and beetles. Knight-Lieutenant Alesso said I should kill about ten of each.", 99, 120066, 121224) + AddQuestStepCompleteAction(Quest, 1, "Step1Complete") +end + +function Step1Complete(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 1, "I've killed ten rats.") + + AddQuestStepKill(Quest, 2, "I need to kill ten snakes.", 10, 100, "I need to head out into Antonica and kill the vermin that infest the land; rats, snakes and beetles. Knight-Lieutenant Alesso said I should kill about ten of each.", 1908, 120068, 121226, 121347) + AddQuestStepCompleteAction(Quest, 2, "Step2Complete") +end + +function Step2Complete(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 2, "I have killed ten snakes.") + + AddQuestStepKill(Quest, 3, "I need to kill ten beetles.", 10, 100, "I need to head out into Antonica and kill the vermin that infest the land; rats, snakes and beetles. Knight-Lieutenant Alesso said I should kill about ten of each.", 162, 120067, 121225, 120253, 120373, 120367, 121443, 120371, 121369) + AddQuestStepCompleteAction(Quest, 3, "Step3Complete") +end + +function Step3Complete(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 3, "I have killed ten beetles.") + UpdateQuestTaskGroupDescription(Quest, 1, "I've killed the vermin that Sir Alesso tasked me with.") + + AddQuestStepChat(Quest, 4, "I need to speak with Knight-Lieutenant Alesso.", 1, "I've killed a great many vermin that once infested Antonica. I should return to Knight-Lieutenant Alesso.", 11, 120083) + AddQuestStepCompleteAction(Quest, 4, "QuestComplete") +end + +function QuestComplete(Quest, QuestGiver, Player) + -- The following UpdateQuestStepDescription and UpdateTaskGroupDescription are not needed, parser adds them for completion in case stuff needs to be moved around + UpdateQuestStepDescription(Quest, 4, "I've spoken with Knight-Lieutenant Alesso.") + UpdateQuestTaskGroupDescription(Quest, 2, "I've spoken with Knight-Lieutenant Alesso.") + + UpdateQuestDescription(Quest, "I've lowered the vermin population quite a bit out in Antonica. Knight-Lieutenant Alesso was pleased with my efforts and paid me for my service to Qeynos.") + GiveQuestReward(Quest, Player) +end + +function Reload(Quest, QuestGiver, Player, Step) + if Step == 1 then + Step1Complete(Quest, QuestGiver, Player) + elseif Step == 2 then + Step2Complete(Quest, QuestGiver, Player) + elseif Step == 3 then + Step3Complete(Quest, QuestGiver, Player) + elseif Step == 4 then + QuestComplete(Quest, QuestGiver, Player) + end +end + +function Accepted(Quest, QuestGiver, Player) + -- Add dialog here for when the quest is accepted +end + +function Declined(Quest, QuestGiver, Player) + -- Add dialog here for when the quest is declined +end \ No newline at end of file diff --git a/server/Quests/Antonica/there_mite_be_trouble.lua b/server/Quests/Antonica/there_mite_be_trouble.lua new file mode 100644 index 000000000..cf2f0596a --- /dev/null +++ b/server/Quests/Antonica/there_mite_be_trouble.lua @@ -0,0 +1,56 @@ +--[[ + Script Name : there_mite_be_trouble.lua + Script Purpose : Handles the quest, "There Mite be Trouble" + Script Author : geordie0511 + Script Date : 12.03.2019 + Script Notes : Edited by geordie0511 + + Zone : Antonica + Quest Giver : Farmer Walcott + Preceded by : None + Followed by : None +--]] + + +function Init(Quest) + AddQuestStepKill(Quest, 1, "Slay some klicnik mites.", 10, 100, "I need to slay 10 klicnik mites in the crops outside of the North Gates of Qeynos.", 611, 120067, 121225) + AddQuestStepCompleteAction(Quest, 1, "Step1Complete") +end + +function Accepted(Quest, QuestGiver, Player) + -- Add dialog here for when the quest is accepted +end + +function Declined(Quest, QuestGiver, Player) + -- Add dialog here for when the quest is declined +end + +function Deleted(Quest, QuestGiver, Player) + -- Remove any quest specific items here when the quest is deleted +end + +function Step1Complete(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 1, "Slew some klicnik mites.") + UpdateQuestTaskGroupDescription(Quest, 1, "I slew 10 of the klicnik mites in Antonica.") + + AddQuestStepChat(Quest, 2, "Speak to Farmer Walcott.", 1, "I need to return to Farmer Walcott in Antonica.", 11, 120078) + AddQuestStepCompleteAction(Quest, 2, "QuestComplete") +end + +function QuestComplete(Quest, QuestGiver, Player) + -- The following UpdateQuestStepDescription and UpdateTaskGroupDescription are not needed, parser adds them for completion in case stuff needs to be moved around + UpdateQuestStepDescription(Quest, 2, "Spoke to Farmer Walcott.") + UpdateQuestTaskGroupDescription(Quest, 2, "I returned to Farmer Walcott.") + + UpdateQuestDescription(Quest, "I have slain a number of the pesky klicnik mites that plagued the crops of Farmer Walcott outside of the North Gates of Qeynos.") + GiveQuestReward(Quest, Player) +end + +function Reload(Quest, QuestGiver, Player, Step) + if Step == 1 then + Step1Complete(Quest, QuestGiver, Player) + elseif Step == 2 then + QuestComplete(Quest, QuestGiver, Player) + end +end + diff --git a/server/Quests/Baubbleshire/a_budding_prankster.lua b/server/Quests/Baubbleshire/a_budding_prankster.lua new file mode 100644 index 000000000..8c268f209 --- /dev/null +++ b/server/Quests/Baubbleshire/a_budding_prankster.lua @@ -0,0 +1,40 @@ +--[[ + Script Name : Quests/Baubbleshire/a_budding_prankster.lua + Script Purpose : Handles the quest, "A Budding Prankster" + Script Author : Scatman + Script Date : 2009.09.27 + + Zone : The Baubbleshire + Quest Giver: Rondo "The Belly" Roundstew + Preceded by: Paying Off a Sweet Debt (paying_off_a_sweet_debt.lua) + Followed by: None +--]] + +function Init(Quest) + AddQuestStepChat(Quest, 1, "I need to speak to Remmy Tumbub.", 1, "I need to find Remmy in the Forest Ruins and pretend to be from the Qeynos guard.", 0, 1960016) + AddQuestStepCompleteAction(Quest, 1, "quest_complete") +end + +function Accepted(Quest, QuestGiver, Player) + FaceTarget(QuestGiver, Player) + conversation = CreateConversation() + + AddConversationOption(conversation, "I'm sure it will be great.") + StartConversation(conversation, QuestGiver, Player, "I just wish I could be there to see it.") +end + +function Declined(Quest, QuestGiver, Player) +end + +function Deleted(Quest, QuestGiver, Player) +end + +function quest_complete(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 1, "I have spoken with Remmy Tumbub.") + UpdateQuestTaskGroupDescription(Quest, 1, "I have found Remmy.") + UpdateQuestDescription(Quest, "I have played a practical joke on Remmy!") + GiveQuestReward(Quest, Player) +end + +function Reload(Quest, QuestGiver, Player, Step) +end \ No newline at end of file diff --git a/server/Quests/Baubbleshire/badger_pelts_for_diggs.lua b/server/Quests/Baubbleshire/badger_pelts_for_diggs.lua new file mode 100644 index 000000000..08f3cefdf --- /dev/null +++ b/server/Quests/Baubbleshire/badger_pelts_for_diggs.lua @@ -0,0 +1,50 @@ +--[[ + Script Name : Quests/Baubbleshire/badger_pelts_for_diggs.lua + Script Purpose : Handles the quest, "Badger Pelts for Diggs" + Script Author : Scatman + Script Date : 2009.09.27 + + Zone : Baubbleshire + Quest Giver: Diggin Digs + Preceded by: None + Followed by: None +--]] + + +function Init(Quest) + AddQuestStepKill(Quest, 1, "I need ten badger pelts.", 10, 100, "I must collect ten badger pelts in the Forest Ruins.", 93, 1960011, 1960017) + AddQuestStepCompleteAction(Quest, 1, "step1_complete_killedBadgers") +end + +function Accepted(Quest, QuestGiver, Player) + FaceTarget(QuestGiver, Player) + conversation = CreateConversation() + + AddConversationOption(conversation, "Ok.") + StartConversation(conversation, QuestGiver, Player, "Try to make them high quality pelts!") +end + +function Declined(Quest, QuestGiver, Player) +end + +function step1_complete_killedBadgers(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 1, "I have collected ten badger pelts.") + UpdateQuestTaskGroupDescription(Quest, 1, "I have collected then badger pelts for Diggs.") + UpdateQuestZone(Quest, "The Baubbleshire") + + AddQuestStepChat(Quest, 2, "I must return to Armorsmith Diggs.", 1, "I must return to Armorsmith Diggs in Baubbleshire.", 0, 2380049) + AddQuestStepCompleteAction(Quest, 2, "quest_complete") +end + +function quest_complete(Quest, QuestGiver, Player, Step) + UpdateQuestStepDescription(Quest, 2, "I returned to Armorsmith Diggs in Baubbleshire.") + UpdateQuestTaskGroupDescription(Quest, 2, "I returned to Armorsmith Diggs in Baubbleshire.") + UpdateQuestDescription(Quest, "I collected ten badger pelts for Armorsmith Diggs.") + GiveQuestReward(Quest, Player) +end + +function Reload(Quest, QuestGiver, Player, Step) + if Step == 1 then + step1_complete_killedBadgers(Quest, QuestGiver, Player) + end +end \ No newline at end of file diff --git a/server/Quests/Baubbleshire/embers_for_xoort.lua b/server/Quests/Baubbleshire/embers_for_xoort.lua new file mode 100644 index 000000000..4621e2b04 --- /dev/null +++ b/server/Quests/Baubbleshire/embers_for_xoort.lua @@ -0,0 +1,49 @@ +--[[ + Script Name : Quests/Baubbleshire/embers_for_xoort.lua + Script Purpose : Handles the quest, "Embers for Xoort" + Script Author : Scatman + Script Date : 2009.09.27 + + Zone : The Baubbleshire + Quest Giver: Sage Xoort + Preceded by: None + Followed by: None +--]] + +function Init(Quest) + AddQuestStepKill(Quest, 1, "I need to gather coals from the fiery forgotten guardians in the Forest Ruins.", 1, 70, "I need to gather an everburning coal from the fiery forgotten guardians in the Forest Ruins.", 183, 1960019) + AddQuestStepCompleteAction(Quest, 1, "step1_complete_gotGoal") +end + +function Accepted(Quest, QuestGiver, Player) + FaceTarget(QuestGiver, Player) + conversation = CreateConversation() + + AddConversationOption(conversation, "All right already!") + StartConversation(conversation, QuestGiver, Player, "Well? What are you waiting for? Go, go, GO!") +end + +function Declined(Quest, QuestGiver, Player) +end + +function step1_complete_gotGoal(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 1, "I gathered an everburning coal.") + UpdateQuestTaskGroupDescription(Quest, 1, "I gathered the embers that Sage Xoort needed from the guardians.") + UpdateQuestZone(Quest, "The Baubbleshire") + + AddQuestStepChat(Quest, 2, "I need to speak with Sage Xoort in the Baubbleshire.", 1, "I need to speak with Sage Xoort and give him the embers I gathered.", 0, 2380043) + AddQuestStepCompleteAction(Quest, 2, "quest_complete") +end + +function quest_complete(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 2, "I spoke with Sage Xoort in the Baubbleshire.") + UpdateQuestTaskGroupDescription(Quest, 2, "I gave Sage Xoort all five embers that I gathered from the guardians.") + UpdateQuestDescription(Quest, "I gathered the coals for Xoort's experimentation. Turns out to be a good thing that I did. Xoort gave me some coin for the job.") + GiveQuestReward(Quest, Player) +end + +function Reload(Quest, QuestGiver, Player, Step) + if Step == 1 then + step1_complete_gotGoal(Quest, QuestGiver, Player) + end +end \ No newline at end of file diff --git a/server/Quests/Baubbleshire/fight_the_forgotten_guardians.lua b/server/Quests/Baubbleshire/fight_the_forgotten_guardians.lua new file mode 100644 index 000000000..90830afe3 --- /dev/null +++ b/server/Quests/Baubbleshire/fight_the_forgotten_guardians.lua @@ -0,0 +1,50 @@ +--[[ + Script Name : Quests/Baubbleshire/fight_the_forgotten_guardians.lua + Script Purpose : Handles the quest, "Fight the Forgotten Guardians" + Script Author : Scatman + Script Date : 2009.01.14 + + Zone : Baubbleshire + Quest Giver: Marshal Surefoot + Preceded by: None + Followed by: None +--]] + + +function Init(Quest) + AddQuestStepKill(Quest, 1, "I must kill some forgotten guardians.", 5, 100, "I need to slay five Forgotten Guardians in the Forest Ruins.", 611, 1960038, 1960058) + AddQuestStepCompleteAction(Quest, 1, "step1_complete_killedGuardians") +end + +function Accepted(Quest, QuestGiver, Player) + FaceTarget(QuestGiver, Player) + conversation = CreateConversation() + + AddConversationOption(conversation, "I will return victorious!") + StartConversation(conversation, QuestGiver, Player, "Good! Return when you've bested them!") +end + +function Declined(Quest, QuestGiver, Player) +end + +function step1_complete_killedGuardians(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 1, "I have killed some forgotten guardians") + UpdateQuestTaskGroupDescription(Quest, 1, "I have slain five Forgotten Guardians.") + UpdateQuestZone(Quest, "The Baubbleshire") + + AddQuestStepChat(Quest, 2, "I must return to Marshal Surefoot.", 1, "I need to return to Marshal Surefoot in Baubbleshire.", 0, 2380044) + AddQuestStepCompleteAction(Quest, 2, "quest_complete") +end + +function quest_complete(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 2, "I have returned to Marshal Surefoot.") + UpdateQuestTaskGroupDescription(Quest, 2, "I have returned to tell my tale to Marshal Surefoot.") + UpdateQuestDescription(Quest, "I have faced and slain five Forgotten Guardians in the Forest Ruins per the orders of Marshal Surefoot. After telling him my tale of victory he was pleased and paid me for my service.") + GiveQuestReward(Quest, Player) +end + +function Reload(Quest, QuestGiver, Player, Step) + if Step == 1 then + step1_complete_killedGuardians(Quest, QuestGiver, Player) + end +end \ No newline at end of file diff --git a/server/Quests/Baubbleshire/getting_to_know_poko.lua b/server/Quests/Baubbleshire/getting_to_know_poko.lua new file mode 100644 index 000000000..288965bdd --- /dev/null +++ b/server/Quests/Baubbleshire/getting_to_know_poko.lua @@ -0,0 +1,41 @@ +--[[ + Script Name : Quests/Baubbleshire/getting_to_know_poko.lua + Script Purpose : Handles the quest, "Getting to Know Poko" + Script Author : Scatman + Script Date : 2009.09.27 + + Zone : The Baubbleshire + Quest Giver: Neezer Grund + Preceded by: Neezer's Survey (neezers_survery.lua) + Followed by: None +--]] + +function Init(Quest) + AddQuestStepChat(Quest, 1, "I need to speak with Poko Zing.", 1, "I need to speak with Poko Zing and give him this mechanical part.", 0, 1960003) + AddQuestStepCompleteAction(Quest, 1, "step1_complete") +end + +function Accepted(Quest, QuestGiver, Player) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/neezer_grund/qey_village06/quests/neezer_grund/neezer_grund050a.mp3", "", "", 494428162, 2433018345, Spawn) + AddConversationOption(conversation, "All right.") + StartConversation(conversation, NPC, Spawn, "Tell him Neezer sent you, I'm sure he'll be happy to see you.") +end + +function Declined(Quest, QuestGiver, Player) +end + +function Deleted(Quest, QuestGiver, Player) +end + +function step1_complete(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 1, "I have spoken with Poko Zing.") + UpdateQuestTaskGroupDescription(Quest, 1, "I have spoken with Poko Zing.") + UpdateQuestDescription(Quest, "I have delivered the part to Poko Zing.") + GiveQuestReward(Quest, Player) +end + +function Reload(Quest, QuestGiver, Player, Step) +end \ No newline at end of file diff --git a/server/Quests/Baubbleshire/helping_a_friend.lua b/server/Quests/Baubbleshire/helping_a_friend.lua new file mode 100644 index 000000000..af769956c --- /dev/null +++ b/server/Quests/Baubbleshire/helping_a_friend.lua @@ -0,0 +1,51 @@ +--[[ + Script Name : Quests/Baubbleshire/helping_a_friend.lua + Script Purpose : Handles the quest, "Helping a Friend" + Script Author : Scatman + Script Date : 2009.09.27 + + Zone : The Baubbleshire + Quest Giver: Rondo "The Belly" Roundstew + Preceded by: None + Followed by: Helping a Friend, Again (helping_a_friend_again.lua) +--]] + + +function Init(Quest) + AddQuestStepChat(Quest, 1, "I need to speak with Maela Meadows near the waterfall in southeastern Baubbleshire.", 1, "I need to see if I can help Maela deal with any problems she may have.", 0, 2380035) + AddQuestStepCompleteAction(Quest, 1, "step1_complete_talkedToMaela") +end + +function Accepted(Quest, QuestGiver, Player) + FaceTarget(QuestGiver, Player) + conversation = CreateConversation() + + AddConversationOption(conversation, "I'm on my way.") + StartConversation(conversation, QuestGiver, Player, "Thank you. She should be by the waterfall, find her and get her to share her feelings, please.") +end + +function Declined(Quest, QuestGiver, Player) +end + +function Deleted(Quest, QuestGiver, Player) +end + +function step1_complete_talkedToMaela(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 1, "I have spoken with Maela, she didn't have much to say.") + + AddQuestStepChat(Quest, 2, "I should return to Rondo.", 1, "I need to see if I can help Maela deal with any problems she may have.", 0, 2380039) + AddQuestStepCompleteAction(Quest, 2, "quest_complete") +end + +function quest_complete(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 2, "I have spoken with Rondo.") + UpdateQuestTaskGroupDescription(Quest, 1, "I was unable to help Maela, but Rondo has another plan.") + UpdateQuestDescription(Quest, "Maela wasn't very forthcoming, but Rondo has another plan to help her out.") + GiveQuestReward(Quest, Player) +end + +function Reload(Quest, QuestGiver, Player, Step) + if Step == 1 then + step1_complete_talkedToMaela(Quest, QuestGiver, Player) + end +end \ No newline at end of file diff --git a/server/Quests/Baubbleshire/helping_a_friend_again.lua b/server/Quests/Baubbleshire/helping_a_friend_again.lua new file mode 100644 index 000000000..5d16df83d --- /dev/null +++ b/server/Quests/Baubbleshire/helping_a_friend_again.lua @@ -0,0 +1,74 @@ +--[[ + Script Name : Quests/Baubbleshire/helping_a_friend_again.lua + Script Purpose : Handles the quest, "Helping a Friend, Again" + Script Author : Scatman + Script Date : 2009.09.26 + + Zone : The Baubbleshire + Quest Giver: Rondo "The Belly" Roundstew + Preceded by: Helping a Friend (helping_a_friend.lua) + Followed by: Helping Some 'Friends' (helping_some_friends.lua) +--]] + +-- Race ID's +local HALFLING = 7 + +-- Item ID's +local MISTY_THICKET_SHADEBLOOM = 9868 + +function Init(Quest) + -- a Misty Thicket Shadebloom + AddQuestStepHarvest(Quest, 1, "I need to collect some Misty Thicket Shadeblooms from around the Baubbleshire.", 6, 100, "I need to collect some Misty Thicket Shadeblooms and see if they will help convince Maela to get her feelings off of her chest.", 1946, MISTY_THICKET_SHADEBLOOM) + AddQuestStepCompleteAction(Quest, 1, "step1_complete_gotFlowers") +end + +function Accepted(Quest, QuestGiver, Player) + FaceTarget(QuestGiver, Player) + conversation = CreateConversation() + + AddConversationOption(conversation, "All right.") + StartConversation(conversation, QuestGiver, Player, "I don't know what I'll do if this doesn't work.") +end + +function Declined(Quest, QuestGiver, Player) +end + +function Deleted(Quest, QuestGiver, Player) + while HasItem(Player, MISTY_THICKET_SHADEBLOOM) do + RemoveItem(Player, MISTY_THICKET_SHADEBLOOM) + end +end + +function step1_complete_gotFlowers(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 1, "I have collected the Misty Thicket Shadeblooms.") + + AddQuestStepChat(Quest, 2, "I should speak with Maela now that I have these Shadeblooms.", 1, "I need to collect some Misty Thicket Shadeblooms and see if they will help convince Maela to get her feelings off of her chest.", 0, 2380035) + AddQuestStepCompleteAction(Quest, 2, "step2_complete_talkedToMaela") +end + +function step2_complete_talkedToMaela(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 2, "Maela came out of her shell.") + + -- a Misty Thicket Shadebloom + while HasItem(Player, MISTY_THICKET_SHADEBLOOM) do + RemoveItem(Player, MISTY_THICKET_SHADEBLOOM) + end + + AddQuestStepChat(Quest, 3, "I should return to Rondo and let him know the good news.", 1, "I need to collect some Misty Thicket Shadeblooms and see if they will help convince Maela to get her feelings off of her chest.", 0, 2380039) + AddQuestStepCompleteAction(Quest, 3, "quest_complete") +end + +function quest_complete(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 3, "I have spoken with Rondo.") + UpdateQuestTaskGroupDescription(Quest, 1, "Maela opened up to me after I presented her with the Shadeblooms.") + UpdateQuestDescription(Quest, "After seeing the flowers Maela opened up and told me of her worries.") + GiveQuestReward(Quest, Player) +end + +function Reload(Quest, QuestGiver, Player, Step) + if Step == 1 then + step1_complete_gotFlowers(Quest, QuestGiver, Player) + elseif Step == 2 then + step2_complete_talkedToMaela(Quest, QuestGiver, Player) + end +end \ No newline at end of file diff --git a/server/Quests/Baubbleshire/helping_some_friends.lua b/server/Quests/Baubbleshire/helping_some_friends.lua new file mode 100644 index 000000000..bf8d350ef --- /dev/null +++ b/server/Quests/Baubbleshire/helping_some_friends.lua @@ -0,0 +1,107 @@ +--[[ + Script Name : Quests/Baubbleshire/helping_some_friends.lua + Script Purpose : Handles the quest, "Helping Some 'Friends'" + Script Author : Scatman + Script Date : 2009.09.27 + + Zone : The Baubbleshire + Quest Giver: Rondo "The Belly" Roundstew + Preceded by: Helping a Friend, Again (helping_a_friend_again.lua) + Followed by: Paying Off a Sweet Debt (paying_off_a_sweet_debt.lua) +--]] + +-- Quest ID's +local HELPING_SOME_FRIENDS = 325 -- was 72 + +-- Item ID's +local PRANK_PREPAREDNESS_KIT = 10574 + +function Init(Quest) + AddQuestStep(Quest, 1, "I need to examine the Prank Preparedness Kit that Rondo gave me.", 1, 100, "Before I execute Rondo's plan I must go through the Prank Preparedness Kit he has given me. Rondo will give me another kit if I misplace the first one.", 0) + AddQuestStepCompleteAction(Quest, 1, "step1_complete_examinedKit") +end + +function Accepted(Quest, QuestGiver, Player) + FaceTarget(QuestGiver, Player) + conversation = CreateConversation() + + AddConversationOption(conversation, "All right. Give me the kit.", "GiveMeKit") + StartConversation(conversation, QuestGiver, Player, "Delicious! I've put everything you'll need in this PPK, that's Prank Preparedness Kit. Remember, don't let them think you're up to anything, it's very important!") +end + +function Declined(Quest, QuestGiver, Player) +end + +function Deleted(Quest, QuestGiver, Player) + while HasItem(Player, PRANK_PREPAREDNESS_KIT) do + RemoveItem(Player, PRANK_PREPAREDNESS_KIT) + end +end + +function step1_complete_examinedKit(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 1, "I have examined the Prank Preparedness Kit and know what I must do now.") + UpdateQuestTaskGroupDescription(Quest, 1, "After going through the Prank Preparedness Kit I know what I must do.") + + AddQuestStepChat(Quest, 2, "I must find Drundo Parn in the tavern and give him a disguised walnut pie.", 1, "I need to visit Drundo, Jayla, and Bolo and set them up for Rondo's pranks.", 0, 2380026) + AddQuestStepChat(Quest, 3, "I must find Jayla Midhop outside the armory and give her this forged note.", 1, "I need to visit Drundo, Jayla, and Bolo and set them up for Rondo's pranks.", 0, 2380009) + AddQuestStepChat(Quest, 4, "I must find Bolo Brassharp outside of the inn and convince him to see Jayla with a bloat pie.", 1, "I need to visit Drundo, Jayla, and Bolo and set them up for Rondo's pranks.", 0, 2380017) + AddQuestStepCompleteAction(Quest, 2, "step2_complete_talkedToDrundo") + AddQuestStepCompleteAction(Quest, 3, "step3_complete_talkedToJayla") + AddQuestStepCompleteAction(Quest, 4, "step4_complete_talkedToBolo") +end + +function step2_complete_talkedToDrundo(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 2, "I have given Drundo the walnut pie.") + + if QuestIsComplete(Player, HELPING_SOME_FRIENDS) then + pranks_given(Quest, QuestGiver, Player) + end +end + +function step3_complete_talkedToJayla(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 3, "I have given Jayla the forged note.") + + if QuestIsComplete(Player, HELPING_SOME_FRIENDS) then + pranks_given(Quest, QuestGiver, Player) + end +end + +function step4_complete_talkedToBolo(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 4, "I have given Bolo the bloat pie.") + + if QuestIsComplete(Player, HELPING_SOME_FRIENDS) then + pranks_given(Quest, QuestGiver, Player) + end +end + +function pranks_given(Quest, QuestGiver, Player) + UpdateQuestTaskGroupDescription(Quest, 2, "I have set Druno, Jayla, and Bolo up for Rondo's pranks.") + + AddQuestStepChat(Quest, 5, "I have done what Rondo wanted and should return to him.", 1, "Now that Rondo's pranks are ready to go, I should speak with him.", 0, 2380039) + AddQuestStepCompleteAction(Quest, 5, "quest_complete") +end + +function quest_complete(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 5, "I have spoken with Rondo.") + UpdateQuestTaskGroupDescription(Quest, 3, "I have spoken with Rondo.") + + -- Prank Preparedness Kit + while HasItem(Player, PRANK_PREPAREDNESS_KIT) do + RemoveItem(Player, PRANK_PREPAREDNESS_KIT) + end + + UpdateQuestDescription(Quest, "I have helped Rondo set his friends up impending pranks. Rondo was absolutely giddy about it.") + GiveQuestReward(Quest, Player) +end + +function Reload(Quest, QuestGiver, Player, Step) + if Step == 1 then + step1_complete_examinedKit(Quest, QuestGiver, Player) + elseif Step == 2 then + step2_complete_talkedToDrundo(Quest, QuestGiver, Player) + elseif Step == 3 then + step3_complete_talkedToJayla(Quest, QuestGiver, Player) + elseif Step == 4 then + step4_complete_talkedToBolo(Quest, QuestGiver, Player) + end +end \ No newline at end of file diff --git a/server/Quests/Baubbleshire/neezers_survey.lua b/server/Quests/Baubbleshire/neezers_survey.lua new file mode 100644 index 000000000..ea4f9fb25 --- /dev/null +++ b/server/Quests/Baubbleshire/neezers_survey.lua @@ -0,0 +1,114 @@ +--[[ + Script Name : Quests/Baubbleshire/neezers_survey.lua + Script Purpose : Handles the quest, "Neezer's Survey" + Script Author : Scatman + Script Date : 2009.09.27 + + Zone : The Baubbleshire + Quest Giver: Neezer Grund + Preceded by: Nogginspark Reactors (nogginspark_reactors.lua) + Followed by: Getting to Know Poko (getting_to_know_poko.lua) +--]] + +-- Quest ID's +local NEEZERS_SURVEY = 330 -- was 28 + +-- Item ID's +local NEEZERS_QUESTIONS = 10030 + +function Init(Quest) + AddQuestStep(Quest, 1, "I must read the questions.", 1, 100, "I need to read the series of questions that Neezer gave me. If I lose the questions I can always ask Neezer for another copy of them.", 0) + AddQuestStepCompleteAction(Quest, 1, "step1_complete_readQuestions") +end + +function Accepted(Quest, QuestGiver, Player) + FaceTarget(QuestGiver, Player) + conversation = CreateConversation() + + -- Neezer's Questions + if not HasItem(Player, NEEZERS_QUESTIONS, 1) then + SummonItem(Player, NEEZERS_QUESTIONS, 1) + end + + PlayFlavor(QuestGiver, "voiceover/english/tutorial_revamp/neezer_grund/qey_village06/quests/neezer_grund/neezer_grund039b.mp3", "", "", 1403299137, 3842803422, Player) + AddConversationOption(conversation, "I'll be back once I've gotten the answers.") + StartConversation(conversation, QuestGiver, Player, "Strange but probably not surprising. Now get started!") +end + +function Declined(Quest, QuestGiver, Player) +end + +function Deleted(Quest, QuestGiver, Player) + -- remove Neezer's Questions + while HasItem(Player, NEEZERS_QUESTIONS) do + RemoveItem(Player, NEEZERS_QUESTIONS) + end +end + +function step1_complete_readQuestions(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 1, "I have read the questions.") + UpdateQuestTaskGroupDescription(Quest, 1, "I have read the questions I am to ask.") + + AddQuestStepChat(Quest, 2, "I need to question Drundo in the tavern.", 1, "I need to question Drundo, Remo, and Fillzer.", 2180, 2380026) + AddQuestStepChat(Quest, 3, "I need to question Remo in the eastern hills in the Baubbleshire.", 1, "I need to question Drundo, Remo, and Fillzer.", 2180, 2380004) + AddQuestStepChat(Quest, 4, "I need to question Fillzer in the eastern hills in the Baubbleshire.", 1, "I need to question Drundo, Remo, and Fillzer.", 2180, 2380005) + AddQuestStepCompleteAction(Quest, 2, "step2_complete_talkedToDrundo") + AddQuestStepCompleteAction(Quest, 3, "step3_complete_talkedToRemo") + AddQuestStepCompleteAction(Quest, 4, "step4_complete_talkedToFillzer") +end + +function step2_complete_talkedToDrundo(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 2, "I have questioned Drundo.") + + if QuestIsComplete(Player, NEEZERS_SURVEY) then + multiple_steps_complete(Quest, QuestGiver, Player) + end +end + +function step3_complete_talkedToRemo(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 3, "I have questioned Remo.") + + if QuestIsComplete(Player, NEEZERS_SURVEY) then + multiple_steps_complete(Quest, QuestGiver, Player) + end +end + +function step4_complete_talkedToFillzer(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 4, "I have questioned Fillzer.") + + if QuestIsComplete(Player, NEEZERS_SURVEY) then + multiple_steps_complete(Quest, QuestGiver, Player) + end +end + +function multiple_steps_complete(Quest, QuestGiver, Player) + UpdateQuestTaskGroupDescription(Quest, 2, "I have questioned Drundo, Remo, and Fillzer.") + + AddQuestStepChat(Quest, 5, "I need to speak with Neezer Grund.", 1, "Now that I have all the answers for Neezer I will need to return to him.", 0, 2380038) + AddQuestStepCompleteAction(Quest, 5, "quest_complete") +end + +function quest_complete(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 5, "I have spoken with Neezer Grund.") + UpdateQuestTaskGroupDescription(Quest, 3, "I have returned to Neezer.") + + -- remove Neezer's Questions + while HasItem(Player, NEEZERS_QUESTIONS) do + RemoveItem(Player, NEEZERS_QUESTIONS) + end + + UpdateQuestDescription(Quest, "I have given Neezer the answers he was looking for.") + GiveQuestReward(Quest, Player) +end + +function Reload(Quest, QuestGiver, Player, Step) + if Step == 1 then + step1_complete_readQuestions(Quest, QuestGiver, Player) + elseif Step == 2 then + step2_complete_talkedToDrundo(Quest, QuestGiver, Player) + elseif Step == 3 then + step3_complete_talkedToRemo(Quest, QuestGiver, Player) + elseif Step == 4 then + step4_complete_talkedToFillzer(Quest, QuestGiver, Player) + end +end \ No newline at end of file diff --git a/server/Quests/Baubbleshire/nogginspark_reactors.lua b/server/Quests/Baubbleshire/nogginspark_reactors.lua new file mode 100644 index 000000000..8cadd59ef --- /dev/null +++ b/server/Quests/Baubbleshire/nogginspark_reactors.lua @@ -0,0 +1,48 @@ +--[[ + Script Name : Quests/Baubbleshire/nogginspark_reactors.lua + Script Purpose : Handles the quest, "Nogginspark Reactors" + Script Author : Scatman + Script Date : 2009.09.27 + + Zone : The Baubbleshire + Quest Giver: Neezer Grund + Preceded by: Scraptastic! (scraptastic.lua) + Followed by: Neezer's Survery (neezers_survery.lua) +--]] + +function Init(Quest) + AddQuestStepKill(Quest, 1, "I need to collect some Nogginspark Reactors.", 7, 100, "I need to collect some Nogginspark Reactors from the rats in the Baubbleshire that are near the grate to the Catacombs.", 791, 2380126) + AddQuestStepCompleteAction(Quest, 1, "step1_complete_killedRats") +end + +function Accepted(Quest, QuestGiver, Player) + FaceTarget(QuestGiver, Player) + conversation = CreateConversation() + + PlayFlavor(QuestGiver, "voiceover/english/tutorial_revamp/neezer_grund/qey_village06/quests/neezer_grund/neezer_grund034a.mp3", "", "", 2831738358, 3598455810, Player) + AddConversationOption(conversation, "I'll be back when I've collected seven reactors.") + StartConversation(conversation, QuestGiver, Player, "They shouldn't be too much of a problem. Remember, they hang out near the Catacomb entrance.") +end + +function Declined(Quest, QuestGiver, Player) +end + +function step1_complete_killedRats(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 1, "I have collected the Nogginspark Reactors.") + + AddQuestStepChat(Quest, 2, "I need to return these Nogginspark Reactors to Neezer Grund.", 1, "I need to collect some Nogginspark Reactors from the rats in the Baubbleshire that are near the grate to the Catacombs.", 0, 2380038) + AddQuestStepCompleteAction(Quest, 2, "quest_complete") +end + +function quest_complete(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 2, "I have returned the Nogginspark Reactors to Neezer Grund.") + UpdateQuestTaskGroupDescription(Quest, 1, "I have collected the Nogginspark reactors and returned them to Neezer.") + UpdateQuestDescription(Quest, "I have collected the Nogginspark Reactors and given them to Neezer Grund.") + GiveQuestReward(Quest, Player) +end + +function Reload(Quest, QuestGiver, Player, Step) + if Step == 1 then + step1_complete_killedRats(Quest, QuestGiver, Player) + end +end \ No newline at end of file diff --git a/server/Quests/Baubbleshire/paying_off_a_sweet_debt.lua b/server/Quests/Baubbleshire/paying_off_a_sweet_debt.lua new file mode 100644 index 000000000..ecc2590f8 --- /dev/null +++ b/server/Quests/Baubbleshire/paying_off_a_sweet_debt.lua @@ -0,0 +1,52 @@ +--[[ + Script Name : Quests/Baubbleshire/paying_off_a_sweet_debt.lua + Script Purpose : Handles the quest, "Paying Off a Sweet Debt" + Script Author : Scatman + Script Date : 2009.09.27 + + Zone : The Baubbleshire + Quest Giver: Rondo "The Belly" Roundstew + Preceded by: Helping Some 'Friends' (helping_some_friends.lua) + Followed by: A Budding Prankster (a_budding_prankster.lua) +--]] + + +function Init(Quest) + AddQuestStep(Quest, 1, "I need to collect some honey from the trees around the Baubbleshire.", 10, 100, "Rondo has asked that I collect some honey from the trees around the Baubbleshire.", 405) + AddQuestStepCompleteAction(Quest, 1, "step1_complete_gotHoney") +end + +function Accepted(Quest, QuestGiver, Player) + FaceTarget(QuestGiver, Player) + conversation = CreateConversation() + + AddConversationOption(conversation, "I'll return with the honey.") + StartConversation(conversation, QuestGiver, Player, "Ugh, all of them, I imagine. Bees is one thing Baubbleshire certainly has enough of. Just look for the hives.") +end + +function Declined(Quest, QuestGiver, Player) +end + +function Deleted(Quest, QuestGiver, Player) +end + +function step1_complete_gotHoney(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 1, "I have collected the needed honey.") + + AddQuestStepChat(Quest, 2, "Now that I have collected this honey, I should return to Rondo.", 1, "Rondo has asked that I collect some honey from the trees around the Baubbleshire.", 0, 2380039) + AddQuestStepCompleteAction(Quest, 2, "quest_complete") +end + + +function quest_complete(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 2, "I have given the honey to Rondo.") + UpdateQuestTaskGroupDescription(Quest, 1, "I have collected the honey for Rondo.") + UpdateQuestDescription(Quest, "I have collected the honey for Rondo. He was very impressed with the amount I collected.") + GiveQuestReward(Quest, Player) +end + +function Reload(Quest, QuestGiver, Player, Step) + if Step == 1 then + step1_complete_gotHoney(Quest, QuestGiver, Player) + end +end \ No newline at end of file diff --git a/server/Quests/Baubbleshire/scraptastic.lua b/server/Quests/Baubbleshire/scraptastic.lua new file mode 100644 index 000000000..53f50d439 --- /dev/null +++ b/server/Quests/Baubbleshire/scraptastic.lua @@ -0,0 +1,65 @@ +--[[ + Script Name : Quests/Baubbleshire/scraptastic.lua + Script Purpose : Handles the quest, "Scraptastic!" + Script Author : Scatman + Script Date : 2009.09.27 + + Zone : The Baubbleshire + Quest Giver: Neezer Grund + Preceded by: None + Followed by: Nogginspark Reactors (nogginspark_reactors.lua) +--]] + +-- Item ID's +local SCRAP_METAL = 11996 + +function Init(Quest) + -- Scrap Metal + AddQuestStepHarvest(Quest, 1, "I need to collect some scrap metal for Neezer Grund.", 7, 100, "I need to scour the Baubbleshire for some scrap metal.", 64, SCRAP_METAL) + AddQuestStepCompleteAction(Quest, 1, "step1_complete_gotMetal") +end + +function Accepted(Quest, QuestGiver, Player) + FaceTarget(QuestGiver, Player) + conversation = CreateConversation() + + PlayFlavor(QuestGiver, "voiceover/english/tutorial_revamp/neezer_grund/qey_village06/quests/neezer_grund/neezer_grund022a.mp3", "", "", 2015655109, 4127478341, Player) + AddConversationOption(conversation, "All right.") + StartConversation(conversation, QuestGiver, Player, "Don't forget to check in the water!") +end + +function Declined(Quest, QuestGiver, Player) +end + +function Deleted(Quest, QuestGiver, Player) + -- Remove Scrap Metal + while HasItem(Player, SCRAP_METAL) do + RemoveItem(Player, SCRAP_METAL) + end +end + +function step1_complete_gotMetal(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 1, "I have collected some scrap metal.") + + AddQuestStepChat(Quest, 2, "I need to return this scrap metal to Neezer Grund.", 1, "I need to scour the Baubbleshire for some scrap metal.", 0, 2380038) + AddQuestStepCompleteAction(Quest, 2, "quest_complete") +end + +function quest_complete(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 2, "I have given Neezer the scrap metal he asked for.") + UpdateQuestTaskGroupDescription(Quest, 1, "I have collected some scrap metal for Neezer Grund.") + + -- Remove Scrap Metal + while HasItem(Player, SCRAP_METAL) do + RemoveItem(Player, SCRAP_METAL) + end + + UpdateQuestDescription(Quest, "I have collected the scrap metal for Neezer.") + GiveQuestReward(Quest, Player) +end + +function Reload(Quest, QuestGiver, Player, Step) + if Step == 1 then + step1_complete_gotMetal(Quest, QuestGiver, Player) + end +end \ No newline at end of file diff --git a/server/Quests/BeggarsCourt/a_delivery.lua b/server/Quests/BeggarsCourt/a_delivery.lua new file mode 100644 index 000000000..92640b703 --- /dev/null +++ b/server/Quests/BeggarsCourt/a_delivery.lua @@ -0,0 +1,53 @@ +--[[ + Script Name : Quests/BeggarsCourt/a_delivery.lua + Script Purpose : Handles the quest, "A Delivery" + Script Author : Scatman (updated by Cynnar 2018.06.14 06:06:04) + Script Date : 2009.04.05 + + Zone : Beggar's Court + Quest Giver: Thavian Destrus + Preceded by: None + Followed by: Dirty Work (dirty_work.lua) +--]] + +local LIEUTENANT_CERVAEN = 1370037 +local DELCAIRN_SEBASTIAN = 1370038 + +function Init(Quest) + AddQuestStepChat(Quest, 1, "I need to deliver this report to Lieutenant Cervaen in the upstairs room in the western end of the northern half of Beggar's Court.", 1, "I need to deliver Thavian's note to Lieutenant Cervaen.", 75, LIEUTENANT_CERVAEN) + AddQuestStepCompleteAction(Quest, 1, "Step1_Complete_SpokeToCervaen") +end + + +function Step1_Complete_SpokeToCervaen(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 1, "I have delivered the note to Lieutenant Cervaen.") + + AddQuestStepChat(Quest, 2, "I need to speak with Delcairn Sebastian.", 1, ".", 0, DELCAIRN_SEBASTIAN) + AddQuestStepCompleteAction(Quest, 2, "Quest_Complete") +end + +function Quest_Complete(Quest, QuestGiver, Player) + UpdateQuestDescription(Quest, "I have delivered Thavian's letter. After speaking with Lieutenant Cervaen and Delcairn Sebastian they have offered me more work.") + GiveQuestReward(Quest, Player) +end + +function Accepted(Quest, QuestGiver, Player) + FaceTarget(QuestGiver, Player) + conversation = CreateConversation() + + PlayFlavor(QuestGiver, "voiceover/english/tutorial_revamp/thavian_destrus/fprt_hood04/quests/thavian/thavian014.mp3", "", "", 746734341, 3406058828, Player) + AddConversationOption(conversation, "All right.") + StartConversation(conversation, QuestGiver, Player, "Good. The Brotherhood Awaits.") +end + +function Declined(Quest, QuestGiver, Player) +end + +function Deleted(Quest, QuestGiver, Player) +end + +function Reload(Quest, QuestGiver, Player, Step) + if Step == 1 then + Step1_Complete_SpokeToCervaen(Quest, QuestGiver, Player) + end +end diff --git a/server/Quests/BeggarsCourt/dirty_work.lua b/server/Quests/BeggarsCourt/dirty_work.lua new file mode 100644 index 000000000..8025e321a --- /dev/null +++ b/server/Quests/BeggarsCourt/dirty_work.lua @@ -0,0 +1,80 @@ +--[[ + Script Name : Quests/BeggarsCourt/dirty_work.lua + Script Purpose : Handles the quest, "Dirty Work" + Script Author : Scatman (updated by Cynnar 2018.06.13 03:06:49) + Script Date : 2009.04.05 + Script Notes : One of the cups to poison is a pink cube from CoE+ + Script Notes : mug_to_poison_2 (1370086) -16 -2 82 + Script Notes : I am setting the quest to update with just the one cup + Script Notes : 82, -7, 112 for eavesdrop location + Zone : Beggar's Court + Quest Giver: Thavian Destrus + Preceded by: A Delivery (a_delivery.lua) + Followed by: Reel Him In (reel_him_in.lua) +--]] + +local DELCAIRN_SEBASTIAN = 1370038 +local FATES_WISPER = 7086 +local A_MUG_TO_POISON = 3727 + +function Init(Quest) + AddQuestStepObtainItem(Quest, 1, "I need to purchase 'Fate's Whisper' from Loamshallow a merchant whose shop is southeast of the bank.", 1, 100, "I need to purchase some poison.", 0, FATES_WISPER) + AddQuestStepCompleteAction(Quest, 1, "Step1_Complete_BoughtPoison") +end + +function Accepted(Quest, QuestGiver, Player) + FaceTarget(QuestGiver, Player) + conversation = CreateConversation() + + PlayFlavor(QuestGiver, "voiceover/english/tutorial_revamp/delcairn_sebastian/fprt_hood04/quests/delcairn/delcairn005a.mp3", "", "", 3741115317, 660402658, Player) + AddConversationOption(conversation, "Yes, sir.") + StartConversation(conversation, QuestGiver, Player, "Neither Revlos nor his interrogator must live. Go, quickly.") +end + +function Declined(Quest, QuestGiver, Player) +end + +function Step1_Complete_BoughtPoison(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 1, "I have purchased the poison.") + UpdateQuestTaskGroupDescription(Quest, 1, "I have purchased the poison.") + + AddQuestStep(Quest, 2, "I need to go to the gate to North Freeport and eavesdrop on the conversation that is supposed to take place there. I should hide behind the western side of the gates.", 1, 100, "I need to eavesdrop on a conversation.", 0) + AddQuestStepCompleteAction(Quest, 2, "Step2_Complete_Listened") +end + +function Step2_Complete_Listened(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 2, "I have learned the location that the meeting will take place in.") + UpdateQuestTaskGroupDescription(Quest, 2, "I have learned the location that the meeting will take place in.") + + AddQuestStepSpell(Quest, 3, "I must poison the cups in the room in the southeastern area of the Beggar's Court, east of the inn.", 1, 100, "I need to poison the cups at the meeting place.", 0, A_MUG_TO_POISON) + AddQuestStepCompleteAction(Quest, 3, "Step3_Complete_CupsPoisoned") +end + +function Step3_Complete_CupsPoisoned(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 3, "I have poisoned the cups.") + UpdateQuestTaskGroupDescription(Quest, 3, "I have poisoned the cups.") + + -- Fate's Whisper + RemoveItem(Player, FATES_WISPER) + + AddQuestStepChat(Quest, 4, "I need to return to Delcairn Sebastian in the upstairs room in the western end of the northern half of Beggar's Court.", 1, "I need to return to Delcairn.", 0, DELCAIRN_SEBASTIAN) + AddQuestStepCompleteAction(Quest, 4, "Quest_Complete") +end + +function Quest_Complete(Quest, QuestGiver, Player) + UpdateQuestDescription(Quest, "I have poisoned the cups that will be used in Revlos' interrogation.") + GiveQuestReward(Quest, Player) +end + +function Reload(Quest, QuestGiver, Player, Step) + if Step == 1 then + Step1_Complete_BoughtPoison(Quest, QuestGiver, Player) + elseif Step == 2 then + Step2_Complete_Listened(Quest, QuestGiver, Player) + elseif Step == 3 then + Step3_Complete_CupsPoisoned(Quest, QuestGiver, Player) + end +end + +function Deleted(Quest, QuestGiver, Player) +end diff --git a/server/Quests/BeggarsCourt/one_last_request.lua b/server/Quests/BeggarsCourt/one_last_request.lua new file mode 100644 index 000000000..7cc8da1a8 --- /dev/null +++ b/server/Quests/BeggarsCourt/one_last_request.lua @@ -0,0 +1,41 @@ +--[[ + Script Name : Quests/BeggarsCourt/one_last_request.lua + Script Purpose : Handles the quest, "One Last Request" + Script Author : Scatman (updated by Cynnar 2018.06.14 11:06:14) + Script Date : 2009.04.07 + + Zone : Beggar's Court + Quest Giver: Thavian Destrus + Preceded by: Thaen Sevellos (thaen_sevellos.lua) + Followed by: None +--]] + +local INQUISITOR_THORSON = 1240024 + +function Init(Quest) + AddQuestStepChat(Quest, 1, "I need to speak with Inquisitor Thorson in the Sunken City. From Beggar's Court, I can use the Mariner's Bell on the docks to reach the Sunken City.", 1, ".", 0, INQUISITOR_THORSON) + AddQuestStepCompleteAction(Quest, 1, "Quest_Complete") +end + +function Accepted(Quest, QuestGiver, Player) + FaceTarget(QuestGiver, Player) + conversation = CreateConversation() + + PlayFlavor(QuestGiver, "voiceover/english/tutorial_revamp/delcairn_sebastian/fprt_hood04/quests/delcairn/delcairn015a.mp3", "", "", 2742302436, 855265638, Player) + AddConversationOption(conversation, "You're welcome.") + StartConversation(conversation, QuestGiver, Player, "Thanks again, " .. GetName(Player) .. ".") +end + +function Declined(Quest, QuestGiver, Player) +end + +function Quest_Complete(Quest, QuestGiver, Player) + UpdateQuestDescription(Quest, "I have found Inquisitor Thorson.") + GiveQuestReward(Quest, Player) +end + +function Reload(Quest, QuestGiver, Player, Step) +end + +function Deleted(Quest, QuestGiver, Player) +end diff --git a/server/Quests/BeggarsCourt/reel_him_in.lua b/server/Quests/BeggarsCourt/reel_him_in.lua new file mode 100644 index 000000000..eca6cb5e6 --- /dev/null +++ b/server/Quests/BeggarsCourt/reel_him_in.lua @@ -0,0 +1,90 @@ +--[[ + Script Name : Quests/BeggarsCourt/reel_him_in.lua + Script Purpose : Handles the quest, "Reel Him In" + Script Author : Scatman (updated by Cynnar 2018.06.14 06:06:04) + Script Date : 2009.04.07 + + Zone : Beggar's Court + Quest Giver: Thavian Destrus + Preceded by: Dirty Work (dirty_work.lua) + Followed by: Thaen Sevellos (thaen_sevellos) +--]] + +local HIDDEN_COMPONENTS = 8086 +local A_SMALL_EXPLOSIVE_DEVICE = 2754 +local LIEUTENANT_CERVAEN = 1370037 +local DELCAIRN_SEBASTIAN = 1370038 + +function Init(Quest) + AddQuestStepObtainItem(Quest, 1, "I need to collect the stashed components found strewn around the city - the containers will be marked so that I can recognize them.", 3, 100, ".", 2285, HIDDEN_COMPONENTS) + AddQuestStepCompleteAction(Quest, 1, "Step1_Complete_GotComponents") +end + +function Accepted(Quest, QuestGiver, Player) + FaceTarget(QuestGiver, Player) + conversation = CreateConversation() + + PlayFlavor(QuestGiver, "voiceover/english/tutorial_revamp/lieutenant_cervaen/fprt_hood04/quests/cervaen/cervaen005a.mp3", "", "", 673024524, 1827470261, Player) + AddConversationOption(conversation, "I won't") + StartConversation(conversation, QuestGiver, Player, "Oh... don't make a big ruckus when you get those supplies.") +end + +function Declined(Quest, QuestGiver, Player) +end + +function Step1_Complete_GotComponents(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 1, "I have collected the stashed components.") + + AddQuestStepChat(Quest, 2, "I need to speak with Lieutenant Cervaen and have him put these components together. He is upstairs in the western end of the northeastern half of Beggar's Court.", 1, ".", 0, LIEUTENANT_CERVAEN) + AddQuestStepCompleteAction(Quest, 2, "Step2_Complete_SpokeToCervaen") +end + +function Step2_Complete_SpokeToCervaen(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 2, "Lieutenant Cervaen has put the bomb together.") + + -- hidden components + RemoveItem(Player, HIDDEN_COMPONENTS) + RemoveItem(Player, HIDDEN_COMPONENTS) + RemoveItem(Player, HIDDEN_COMPONENTS) + + -- a small explosive device + SummonItem(Player, A_SMALL_EXPLOSIVE_DEVICE) + + AddQuestStep(Quest, 3, "I need to blow up the supplies in the eastern end of the northern half of Beggar's Court.", 1, 100, ".", 0) + AddQuestStepCompleteAction(Quest, 3, "Step3_Complete_PlacedExplosives") +end + +function Step3_Complete_PlacedExplosives(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 3, "I have placed the explosives.") + + -- a small explosive device + RemoveItem(Player, A_SMALL_EXPLOSIVE_DEVICE) + + AddQuestStepChat(Quest, 4, "I need to return to Declairn Sebastian in the upstairs room in the western end of the northern half of Beggar's Court.", 1, ".", 0, DELCAIRN_SEBASTIAN) + AddQuestStepCompleteAction(Quest, 4, "Quest_Complete") +end + +function Quest_Complete(Quest, QuestGiver, Player) + UpdateQuestDescription(Quest, "Adjunct-Captain Rommuls has been captured by the Brotherhood. It is unlikely that he will survive much longer.") + GiveQuestReward(Quest, Player) +end + +function Reload(Quest, QuestGiver, Player, Step) + if Step == 1 then + Step1_Complete_GotComponents(Quest, QuestGiver, Player) + elseif Step == 2 then + Step2_Complete_SpokeToCervaen(Quest, QuestGiver, Player) + elseif Step == 3 then + Step3_Complete_PlacedExplosives(Quest, QuestGiver, Player) + end +end + +function Deleted(Quest, QuestGiver, Player) + while HasItem(Player, HIDDEN_COMPONENTS, 1) do + RemoveItem(Player, HIDDEN_COMPONENTS) + end + + while HasItem(Player, A_SMALL_EXPLOSIVE_DEVICE, 1) do + RemoveItem(Player, A_SMALL_EXPLOSIVE_DEVICE) + end +end diff --git a/server/Quests/BeggarsCourt/saving_history.lua b/server/Quests/BeggarsCourt/saving_history.lua new file mode 100644 index 000000000..f8b6ea961 --- /dev/null +++ b/server/Quests/BeggarsCourt/saving_history.lua @@ -0,0 +1,32 @@ +--[[ + Script Name : Quests/BeggarsCourt/saving_history.lua + Script Author : Shatou + Script Date : 2018.09.03 10:09:33 + Script Purpose : + + Zone : BeggarsCourt + Quest Giver: + Preceded by: None + Followed by: +--]] + +function Init(Quest) + +end + +function Accepted(Quest, QuestGiver, Player) + +end + +function Declined(Quest, QuestGiver, Player) + +end + +function quest_complete(Quest, QuestGiver, Player) + +end + +function Reload(Quest, QuestGiver, Player, Step) + +end + diff --git a/server/Quests/BeggarsCourt/thaen_sevellos.lua b/server/Quests/BeggarsCourt/thaen_sevellos.lua new file mode 100644 index 000000000..65afeb35b --- /dev/null +++ b/server/Quests/BeggarsCourt/thaen_sevellos.lua @@ -0,0 +1,52 @@ +--[[ + Script Name : Quests/BeggarsCourt/thaen_sevellos.lua + Script Purpose : Handles the quest, "Thaen Sevellos" + Script Author : Scatman (updated by Cynnar 2018.06.14 11:06:19) + Script Date : 2009.04.07 + + Zone : Beggar's Court + Quest Giver: Thavian Destrus + Preceded by: Reel Him In (reel_him_in.lua) + Followed by: One Last Request (one_last_request.lua) +--]] + +local DELCAIRN_SEBASTIAN = 1370038 + +function Init(Quest) + AddQuestStep(Quest, 1, "I need to rescue Thaen Sevellos. He is being held in a room in the northwestern end of the northern half of Beggar's Court.", 1, 100, "I need to rescue Thaen Sevellos.", 0) + AddQuestStepCompleteAction(Quest, 1, "Step1_Complete_FreedThaen") +end + +function Accepted(Quest, QuestGiver, Player) + FaceTarget(QuestGiver, Player) + conversation = CreateConversation() + + PlayFlavor(QuestGiver, "voiceover/english/tutorial_revamp/delcairn_sebastian/fprt_hood04/quests/delcairn/delcairn012.mp3", "", "", 2118872421, 1842762930, Player) + AddConversationOption(conversation, "All right.") + StartConversation(conversation, QuestGiver, Player, "It won't be. Once you free him return to me.") +end + +function Declined(Quest, QuestGiver, Player) +end + +function Step1_Complete_FreedThaen(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 1, "I have rescued Thaen Sevellos.") + UpdateQuestTaskGroupDescription(Quest, 1, "I have rescued Thaen Sevellos.") + + AddQuestStepChat(Quest, 2, "I need to return to Delcairn Sebastian. He is upstairs in the western half of the northern half of Beggar's Court.", 1, "I need to return to Delcairn.", 0, DELCAIRN_SEBASTIAN) + AddQuestStepCompleteAction(Quest, 2, "Quest_Complete") +end + +function Quest_Complete(Quest, QuestGiver, Player) + UpdateQuestDescription(Quest, "I have freed Thaen Sevellos.") + GiveQuestReward(Quest, Player) +end + +function Reload(Quest, QuestGiver, Player, Step) + if Step == 1 then + Step1_Complete_FreedThaen(Quest, QuestGiver, Player) + end +end + +function Deleted(Quest, QuestGiver, Player) +end diff --git a/server/Quests/BlumblesHalflingHole/SearchForGrandmaBlumble.lua b/server/Quests/BlumblesHalflingHole/SearchForGrandmaBlumble.lua new file mode 100644 index 000000000..4b40ede65 --- /dev/null +++ b/server/Quests/BlumblesHalflingHole/SearchForGrandmaBlumble.lua @@ -0,0 +1,38 @@ +--[[ + Script Name : Quests/BlumblesHalflingHole/SearchForGrandmaBlumble.lua + Script Author : Jabantiz + Script Date : 2014.07.07 11:07:35 + Script Purpose : + + Zone : BlumblesHalflingHole + Quest Giver: + Preceded by: None + Followed by: +--]] + +local BlumbleBlunder = 103 + +function Init(Quest) + AddQuestStepChat(Quest, 1, "Grandpa Blumble asked me to find Grandma Blumble.", 1, "Grandpa Blumble asked me to help him find Grandma Blumble. He talked about Nektulos.", 11) + AddQuestStepCompleteAction(Quest, 1, "Step1Complete") +end + +function Step1Complete(Quest, QuestGiver, Player) + GiveQuestReward(Quest, Player) +end + +function Accepted(Quest, QuestGiver, Player) + SetStepComplete(Player, BlumbleBlunder, 1) +end + +function Deleted(Quest, QuestGiver, Player) +end + +function Declined(Quest, QuestGiver, Player) +end + +function Reload(Quest, QuestGiver, Player, Step) + if Step == 1 then + Step1Complete(Quest, QuestGiver, Player) + end +end diff --git a/server/Quests/ButcherblockMountains/ADimLight.lua b/server/Quests/ButcherblockMountains/ADimLight.lua new file mode 100644 index 000000000..f54503dfa --- /dev/null +++ b/server/Quests/ButcherblockMountains/ADimLight.lua @@ -0,0 +1,56 @@ +--[[ + Script Name : ADimLight.lua + Script Purpose : Handles the quest, "A Dim Light" + Script Author : jakejp + Script Date : 6/11/2018 + Script Notes : + + Zone : Butcherblock Mountains + Quest Giver : Geldrani A'Zhi'Tel + Preceded by : None + Followed by : None +--]] + + +function Init(Quest) + AddQuestStepKill(Quest, 1, "I must slay kobold mystics in Butcherblock Mountains to locate a luminescent sphere.", 1, 80, "I must collect a luminescent sphere for Geldrani.", 1180, 1080247, 1081121) + AddQuestStepCompleteAction(Quest, 1, "Step1Complete") +end + +function Step1Complete(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 1, "It appears I have found the luminescent sphere.") + UpdateQuestTaskGroupDescription(Quest, 1, "It appears I have found the sphere.") + + AddQuestStepChat(Quest, 2, "Bring the luminescent sphere to Geldrani.", 1, "I need to bring the luminescent sphere to Geldrani at the Highland Outposts in the Butcherblock Mountains.", 1180, 1081108) + AddQuestStepCompleteAction(Quest, 2, "QuestComplete") +end + +function QuestComplete(Quest, QuestGiver, Player) + -- The following UpdateQuestStepDescription and UpdateTaskGroupDescription are not needed, parser adds them for completion in case stuff needs to be moved around + UpdateQuestStepDescription(Quest, 2, "I returned the luminescent sphere to Geldrani.") + UpdateQuestTaskGroupDescription(Quest, 2, "Geldrani appeared satisfied with what I brought him, and he paid me for my work.") + + UpdateQuestDescription(Quest, "I managed to find the sphere Geldrani was looking for. It was strange, because it didn't have any weight to it, like it was simply a solid ball of warm light.") + GiveQuestReward(Quest, Player) +end + +function Reload(Quest, QuestGiver, Player, Step) + if Step == 1 then + Step1Complete(Quest, QuestGiver, Player) + elseif Step == 2 then + QuestComplete(Quest, QuestGiver, Player) + end +end + +function Accepted(Quest, QuestGiver, Player) + FaceTarget(QuestGiver, Player) + conversation = CreateConversation() + + PlayFlavor(QuestGiver, "geldrani_a_zhi_tel/_exp03/exp03_rgn_butcherblock/geldrani/qst_geldrani_004.mp3", "", "", 531507699, 1779782633, Player) + AddConversationOption(conversation, "All right, then. I will return soon.", "dlg_25_4") + StartConversation(conversation, QuestGiver, Player, "Excellent, then. As I said, the mystics are the ones that carry the charms, so you will want to seek them out in favor of the rest of their pack. Bring the orb you recover back to me.") +end + +function Declined(Quest, QuestGiver, Player) + -- Add dialog here for when the quest is declined +end \ No newline at end of file diff --git a/server/Quests/ButcherblockMountains/AMindOfMyOwn.lua b/server/Quests/ButcherblockMountains/AMindOfMyOwn.lua new file mode 100644 index 000000000..6ebc3b387 --- /dev/null +++ b/server/Quests/ButcherblockMountains/AMindOfMyOwn.lua @@ -0,0 +1,70 @@ +--[[ + Script Name : AMindofMyOwn.lua + Script Purpose : Handles the quest, "A Mind of My Own" + Script Author : jakejp + Script Date : 6/10/2018 + Script Notes : + + Zone : Butcherblock Mountains + Quest Giver : Talvrae T'Zyth + Preceded by : None + Followed by : None +--]] + +local TerratrodderChuck = 45400 + +function Init(Quest) + AddQuestStep(Quest, 1, "I must place the food near a Yarpsnarl kobold to get it to eat.", 1, 100, "I must use Talvrae's Dish, and place it near a kobold to coax it to eat.", 305) + AddQuestStepCompleteAction(Quest, 1, "Step1Complete") +end + +function Step1Complete(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 1, "It seems that the charm worked, and I now have control over a kobold.") + + AddQuestStepKill(Quest, 2, "The kobold is under my control. I should see if I can make him attack other kobolds.", 12, 100, "I must use Talvrae's Dish, and place it near a kobold to coax it to eat.", 452, 1080092, 1080095, 1080099, 1080107, 1080108, 1080111, 1080247, 1080248, 1080251, 1080258, 1080268, 1080269, 1080311, 1080315, 1080316, 1080317, 1080321, 1080326, 1080327, 1080335, 1080341, 1080372, 1080383, 1080423, 1080424, 1080425, 1080426, 1080428, 1080431, 1080432, 1080612, 1080616, 1080617, 1080663, 1080701, 1080764, 1080787, 1081102, 1081103, 1081104, 1081121, 1081122, 1081124, 1081138, 1081141, 1081142, 1081143, 1081145, 1081146, 1081148, 1081150, 1081151, 1081153, 1081154, 1081155, 1081170) + AddQuestStepCompleteAction(Quest, 2, "Step2Complete") +end + +function Step2Complete(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 2, "It appears to have worked quite well. I should report back to Talvrae with my findings.") + + AddQuestStepChat(Quest, 3, "Return to Talvrae T'Zyth at the Highlands Outpost.", 1, "I must use Talvrae's Dish, and place it near a kobold to coax it to eat.", 249, 1081107) + AddQuestStepCompleteAction(Quest, 3, "QuestComplete") +end + +function QuestComplete(Quest, QuestGiver, Player) + -- The following UpdateQuestStepDescription and UpdateTaskGroupDescription are not needed, parser adds them for completion in case stuff needs to be moved around + UpdateQuestStepDescription(Quest, 3, "I was able to help Talvrae T'Zyth prove her experiment.") + UpdateQuestTaskGroupDescription(Quest, 1, "It appears that Talvrae's plan was a qualified success.") + + UpdateQuestDescription(Quest, "It appears that Talvrae's plan was a qualified success. In spite of her sour demeanor, she seemed genuinely pleased that the experiment went smoothly.") + GiveQuestReward(Quest, Player) +end + +function Reload(Quest, QuestGiver, Player, Step) + if Step == 1 then + Step1Complete(Quest, QuestGiver, Player) + elseif Step == 2 then + Step2Complete(Quest, QuestGiver, Player) + elseif Step == 3 then + QuestComplete(Quest, QuestGiver, Player) + end +end + +function Accepted(Quest, QuestGiver, Player) + FaceTarget(QuestGiver, Player) + conversation = CreateConversation() + + SummonItem(Player, TerratrodderChuck, 1) + PlayFlavor(QuestGiver, "talvrae_t_zyth/_exp03/exp03_rgn_butcherblock/talvrae/qst_talvrae_008.mp3", "", "", 1081612079, 3658293484, Player) + AddConversationOption(conversation, "I see. Well then, I will return and let you know how things went.") + StartConversation(conversation, QuestGiver, Player, "While I have no reason to question my own magic craft, I don't know how well the enchantment will work on what is essentially a simple creature. It might just go primal and attack everything nearby, or might just run off to the hills. I wouldn't attempt walking too far from the camp this time, as I don't know how long the enchantment will last.") +end + +function Declined(Quest, QuestGiver, Player) + +end + +function Deleted(Quest, QuestGiver, Player) + RemoveItem(Player, TerratrodderChuck) +end \ No newline at end of file diff --git a/server/Quests/ButcherblockMountains/AStrangeMix.lua b/server/Quests/ButcherblockMountains/AStrangeMix.lua new file mode 100644 index 000000000..e0bbb5933 --- /dev/null +++ b/server/Quests/ButcherblockMountains/AStrangeMix.lua @@ -0,0 +1,70 @@ +--[[ + Script Name : AStrangeMix.lua + Script Purpose : Handles the quest, "A Strange Mix" + Script Author : jakejp + Script Date : 6/14/2018 + Script Notes : + + Zone : Butcherblock Mountains + Quest Giver : + Preceded by : None + Followed by : None +--]] + +local EmptyVial = 46457 +local FilledVial = 7641 +local AStrangeMix = 314 + +function Init(Quest) + AddQuestStep(Quest, 1, "I have not yet filled Geldrani's Vial.", 1, 100, "I must fill Geldrani's Vial with water from the pond in the center of the Druid Rings.", 176) + AddQuestStepCompleteAction(Quest, 1, "Step1Complete") +end + +function Step1Complete(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 1, "Geldrani's Vial is now filled with water from the Druid Ring.") + UpdateQuestTaskGroupDescription(Quest, 1, "I have filled Geldrani's Vial with the water he requested.") + + AddQuestStepChat(Quest, 2, "Geldrani should still be near the Highland Outposts. ", 1, "Geldrani will want this water as fresh as possible. I should return it to him immediately.", 176, 1081108) + AddQuestStepCompleteAction(Quest, 2, "QuestComplete") +end + +function QuestComplete(Quest, QuestGiver, Player) + -- The following UpdateQuestStepDescription and UpdateTaskGroupDescription are not needed, parser adds them for completion in case stuff needs to be moved around + UpdateQuestStepDescription(Quest, 2, "This water appears to be the last thing Geldrani needed.") + UpdateQuestTaskGroupDescription(Quest, 2, "Geldrani used the vial to water his strange plant.") + + UpdateQuestDescription(Quest, "Geldrani now has the water from the druid rings, and evidently he is going to use it to help grow his plant. There's something odd about his experiment, but he is quite evasive about it.") + GiveQuestReward(Quest, Player) +end + +function Reload(Quest, QuestGiver, Player, Step) + if Step == 1 then + Step1Complete(Quest, QuestGiver, Player) + elseif Step == 2 then + QuestComplete(Quest, QuestGiver, Player) + end +end + +function Accepted(Quest, QuestGiver, Player) +FaceTarget(QuestGiver, Player) +conversation = CreateConversation() + SummonItem(Player, EmptyVial, 1) + + PlayFlavor(QuestGiver, "voiceover/english/voice_emotes/greetings/greetings_2_1048.mp3", "", "", 0, 0, Player) + AddConversationOption(conversation, "All right, then. I will return with the water soon.") + StartConversation(conversation, QuestGiver, Player, "Indeed. It shouldn't take much more than what would be in that vial, as the water near the rings is quite rich in magical properties.") +end + +function Declined(Quest, QuestGiver, Player) + -- Add dialog here for when the quest is declined +end + +function Deleted(Quest, QuestGiver, Player) + if HasItem(Player, EmptyVial) then + RemoveItem(Player, EmptyVial) + end + + if HasItem(Player, FilledVial) then + RemoveItem(Player, FilledVial) + end +end \ No newline at end of file diff --git a/server/Quests/ButcherblockMountains/CaptainSays.lua b/server/Quests/ButcherblockMountains/CaptainSays.lua new file mode 100644 index 000000000..26d08e7b7 --- /dev/null +++ b/server/Quests/ButcherblockMountains/CaptainSays.lua @@ -0,0 +1,86 @@ +--[[ + Script Name : Quests/ButcherblockMountains/CaptainSays + Script Purpose : Handles the quest, "Captain Says!" + Script Author : jakejp + Script Date : 6/2/2018 + Script Notes : + + Zone : Butcherblock Mountains + Quest Giver : Captain Stonnacky + Preceded by : None + Followed by : None +--]] + +local CaptainSays = 267 + +function Accepted(Quest, QuestGiver, Player) + FaceTarget(NPC, Player) + conversation = CreateConversation() + + AddConversationOption(conversation, "Alright, next?", "dlg_4_4") + StartConversation(conversation, QuestGiver, Player, "Go seek out me crew members. First I want ye ta tell Bimine Bowchaser to flemish down the boat falls an' be sure all the lines are coiled correctly!") +end + +function Declined(Quest, QuestGiver, Player) + -- Add dialog here for when the quest is declined +end + +function Init(Quest) + AddQuestStepChat(Quest, 1, "I need to deliver orders to Bimini Bowchaser.", 1, "I need to speak with several members of Captain Stonnacky's crew.", 11, 1080197) + AddQuestStepChat(Quest, 2, "I need to deliver orders to Mizzen Staysail.", 1, "I need to speak with several members of Captain Stonnacky's crew.", 11, 1081057) + AddQuestStepChat(Quest, 3, "I need to deliver orders to Tally Topgallant.", 1, "I need to speak with several members of Captain Stonnacky's crew.", 11, 1080048) + AddQuestStepCompleteAction(Quest, 1, "Step1Complete") + AddQuestStepCompleteAction(Quest, 2, "Step2Complete") + AddQuestStepCompleteAction(Quest, 3, "Step3Complete") + +end + +function CheckProgress(Quest, QuestGiver, Player) + if QuestStepIsComplete(Player, CaptainSays, 1) and QuestStepIsComplete(Player, CaptainSays, 2) and QuestStepIsComplete(Player, CaptainSays, 3) then + HandInQuest(Quest, QuestGiver, Player) + end +end + +function Step1Complete(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 1, "I have delivered the Captain's orders to Bimini Bowchaser.") + CheckProgress(Quest, QuestGiver, Player) +end + +function Step2Complete(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 2, "I have delivered orders to Mizzen Staysail.") + CheckProgress(Quest, QuestGiver, Player) +end + +function Step3Complete(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 3, "I have delivered orders to Tally Topgallant.") + CheckProgress(Quest, QuestGiver, Player) + +end + +function HandInQuest(Quest, QuestGiver, Player) + UpdateQuestTaskGroupDescription(Quest, 1, "I have spoken with Captain Stonnacky's crew.") + AddQuestStepChat(Quest, 4, "I need to speak with Captain Stonnacky.", 1, "I need to tell the captain that I've given his crew their orders.", 11, 1081077) + AddQuestStepCompleteAction(Quest, 4, "QuestComplete") +end + +function QuestComplete(Quest, QuestGiver, Player) + -- The following UpdateQuestStepDescription and UpdateTaskGroupDescription are not needed, parser adds them for completion in case stuff needs to be moved around + UpdateQuestStepDescription(Quest, 4, "I have spoken with Captain Stonnacky.") + UpdateQuestTaskGroupDescription(Quest, 2, "I spoke with Captain Stonnacky.") + + UpdateQuestDescription(Quest, "I successfully delivered the orders to each of the respective crew members. The ship will soon be ready and the crew can pursue the dreaded pirate, Blackguard! I think Captain Stonnacky still believes that I am Bosun Oxeye.") + GiveQuestReward(Quest, Player) +end + +function Reload(Quest, QuestGiver, Player, Step) + if Step == 1 then + Step1Complete(Quest, QuestGiver, Player) + elseif Step == 2 then + Step2Complete(Quest, QuestGiver, Player) + elseif Step == 3 then + Step3Complete(Quest, QuestGiver, Player) + elseif Step == 4 then + QuestComplete(Quest, QuestGiver, Player) + end +end + diff --git a/server/Quests/ButcherblockMountains/CoinForTheCaptain.lua b/server/Quests/ButcherblockMountains/CoinForTheCaptain.lua new file mode 100644 index 000000000..086931071 --- /dev/null +++ b/server/Quests/ButcherblockMountains/CoinForTheCaptain.lua @@ -0,0 +1,67 @@ +--[[ + Script Name : Quests/ButcherblockMountains/CoinForTheCaptain + Script Purpose : Handles the quest, "Coin for the Captain" + Script Author : jakejp + Script Date : 6/2/2018 + Script Notes : + + Zone : Butcherblock Mountains + Quest Giver : Dockmaster Waulon + Preceded by : None + Followed by : None +--]] + +local CoinForTheCaptain = 255 +local CaptainSays = 251 + +function Accepted(Quest, QuestGiver, Player) + -- Add dialog here for when the quest is accepted +end + +function Declined(Quest, QuestGiver, Player) + -- Add dialog here for when the quest is declined +end + +function Init(Quest) + AddQuestStepChat(Quest, 1, "I need to deliver this sack of coins to Captain Stonnacky.", 1, "I need to deliver a sack of coins to Captain Stonnacky at once.", 11, 1081077) + AddQuestStepCompleteAction(Quest, 1, "Step1Complete") +end + +function Step1Complete(Quest, QuestGiver, Player) + + UpdateQuestStepDescription(Quest, 1, "I have delivered the coins to Captain Stonnacky.") + + AddQuestStep(Quest, 2, "I need to help Captain Stonnacky with his task.", 1, 100, "I need to deliver a sack of coins to Captain Stonnacky at once.", 11) + AddQuestStepCompleteAction(Quest, 2, "Step2Complete") + + + +end + +function Step2Complete(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 2, "I have helped Captain Stonnacky.") + UpdateQuestTaskGroupDescription(Quest, 1, "I've delivered the sack of coins to Captain Stonnacky.") + + AddQuestStepChat(Quest, 3, "I need to speak with Dockmaster Waulon.", 1, "I need to let Dockmaster Waulon know I delivered the sack of coins to Captain Stonnacky, safetly.", 11, 1080008) + AddQuestStepCompleteAction(Quest, 3, "QuestComplete") +end + +function QuestComplete(Quest, QuestGiver, Player) + -- The following UpdateQuestStepDescription and UpdateTaskGroupDescription are not needed, parser adds them for completion in case stuff needs to be moved around + UpdateQuestStepDescription(Quest, 3, "I spoke with Dockmaster Waulon.") + UpdateQuestTaskGroupDescription(Quest, 2, "I spoke with Dockmaster Waulon.") + + UpdateQuestDescription(Quest, "After delivering the sack of coin to the venerable captain, I took some time to assist him in an errand. Now that I've completed his quest, I need to report back to Dockmaster Waulon.") + GiveQuestReward(Quest, Player) +end + +function Reload(Quest, QuestGiver, Player, Step) + if Step == 1 then + Step1Complete(Quest, QuestGiver, Player) + elseif Step == 2 then + Step2Complete(Quest, QuestGiver, Player) + elseif Step == 3 then + QuestComplete(Quest, QuestGiver, Player) + end +end + diff --git a/server/Quests/ButcherblockMountains/DarkTides.lua b/server/Quests/ButcherblockMountains/DarkTides.lua new file mode 100644 index 000000000..8d3a46c06 --- /dev/null +++ b/server/Quests/ButcherblockMountains/DarkTides.lua @@ -0,0 +1,56 @@ +--[[ + Script Name : Quests/ButcherblockMountains/DarkTides.lua + Script Purpose : Handles the quest, "Dark Tides" + Script Author : jakejp + Script Date : 6/4/2018 + Script Notes : + + Zone : Butcherblock Mountains + Quest Giver : Griss Brumbaugh + Preceded by : None + Followed by : None +--]] + + +function Init(Quest) + AddQuestStepKill(Quest, 1, "I need to slay several Tidesylph ritualists.", 8, 100, "I must slay several Tidesylph ritualists before they taint the entire Tidesylph tribe with necromancy.", 86, 1080399) + AddQuestStepCompleteAction(Quest, 1, "Step1Complete") +end + +function Step1Complete(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 1, "I have slain several Tidesylph ritualists.") + UpdateQuestTaskGroupDescription(Quest, 1, "I have slain several Tidesylph ritualists before they had an opportunity to taint the entire Tidesylph tribe with necromancy.") + + AddQuestStepChat(Quest, 2, "I need to speak with Griss Brumbaugh.", 1, "I should return to Griss Brumbaugh and let him know I have completed my current assignment.", 11, 1081075) + AddQuestStepCompleteAction(Quest, 2, "QuestComplete") +end + +function QuestComplete(Quest, QuestGiver, Player) + -- The following UpdateQuestStepDescription and UpdateTaskGroupDescription are not needed, parser adds them for completion in case stuff needs to be moved around + UpdateQuestStepDescription(Quest, 2, "I spoke with Griss Brumbaugh.") + UpdateQuestTaskGroupDescription(Quest, 2, "I returned to Griss Brumbaugh and let him know I have completed my current assignment.") + + UpdateQuestDescription(Quest, "I have completed Griss Brumbaugh's task.") + GiveQuestReward(Quest, Player) +end + +function Reload(Quest, QuestGiver, Player, Step) + if Step == 1 then + Step1Complete(Quest, QuestGiver, Player) + elseif Step == 2 then + QuestComplete(Quest, QuestGiver, Player) + end +end + +function Accepted(Quest, QuestGiver, Player) + FaceTarget(QuestGiver, Player) + conversation = CreateConversation() + + PlayFlavor(QuestGiver, "griss_brumbaugh/_exp03/exp03_rgn_butcherblock/sarnak_sympathizer/griss_brumbaugh/griss_brumbaugh007.mp3", "", "", 1790400537, 2286410199, Player) + AddConversationOption(conversation, "Very well. I'll return shortly.") + StartConversation(conversation, QuestGiver, Player, "The necromantic taint should be cutoff at the source. I need you to head to the islands off the coast of these mountains and slay as many Tidesylph ritualists as you can. Only then, after their numbers have been reduced, can we rest easier.") +end + +function Declined(Quest, QuestGiver, Player) + -- Add dialog here for when the quest is declined +end \ No newline at end of file diff --git a/server/Quests/ButcherblockMountains/DiggingInTheYard.lua b/server/Quests/ButcherblockMountains/DiggingInTheYard.lua new file mode 100644 index 000000000..0baab1fe2 --- /dev/null +++ b/server/Quests/ButcherblockMountains/DiggingInTheYard.lua @@ -0,0 +1,56 @@ +--[[ + Script Name : DiggingintheYard.lua + Script Purpose : Handles the quest, "Digging in the Yard" + Script Author : jakejp + Script Date : 6/13/2018 + Script Notes : + + Zone : Butcherblock Mountains + Quest Giver : + Preceded by : None + Followed by : None +--]] + + +function Init(Quest) + AddQuestStepObtainItem(Quest, 1, "Gather the pure soil.", 5, 100, "I must gather pure soil for Geldrani.", 320, 5100) + AddQuestStepCompleteAction(Quest, 1, "Step1Complete") +end + +function Step1Complete(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 1, "I have collected all of the necessary pure soil.") + UpdateQuestTaskGroupDescription(Quest, 1, "I have gathered the necessary pure soil.") + + AddQuestStepChat(Quest, 2, "Speak with Geldrani A'Zhi'Tel.", 1, "I must return the pure soil to Geldrani.", 320, 1081108) + AddQuestStepCompleteAction(Quest, 2, "QuestComplete") +end + +function QuestComplete(Quest, QuestGiver, Player) + -- The following UpdateQuestStepDescription and UpdateTaskGroupDescription are not needed, parser adds them for completion in case stuff needs to be moved around + UpdateQuestStepDescription(Quest, 2, "Geldrani now has the soil he needs.") + UpdateQuestTaskGroupDescription(Quest, 2, "I have brought Geldrani the pure soil.") + + UpdateQuestDescription(Quest, "I was able to gather the pure soil that Geldrani requested.") + GiveQuestReward(Quest, Player) +end + +function Reload(Quest, QuestGiver, Player, Step) + if Step == 1 then + Step1Complete(Quest, QuestGiver, Player) + elseif Step == 2 then + QuestComplete(Quest, QuestGiver, Player) + end +end + +function Accepted(Quest, QuestGiver, Player) + FaceTarget(QuestGiver, Player) + conversation = CreateConversation() + + PlayFlavor(QuestGiver, "geldrani_a_zhi_tel/_exp03/exp03_rgn_butcherblock/geldrani/qst_geldrani_007.mp3", "", "", 4076175152, 3212649291, Player) + AddConversationOption(conversation, "I will see what I can do.", "dlg_3_2") + StartConversation(conversation, QuestGiver, Player, "Who knows what those curs are digging for, but in the end, they are doing the hard work for me, anyway. Bring me as much of the soil as you can find.") +end + +function Declined(Quest, QuestGiver, Player) + -- Add dialog here for when the quest is declined +end \ No newline at end of file diff --git a/server/Quests/ButcherblockMountains/DockDelinquency.lua b/server/Quests/ButcherblockMountains/DockDelinquency.lua new file mode 100644 index 000000000..f73617bff --- /dev/null +++ b/server/Quests/ButcherblockMountains/DockDelinquency.lua @@ -0,0 +1,89 @@ +--[[ + Script Name : DockDelinquency.lua + Script Purpose : Handles the quest, "Dock Delinquency" + Script Author : jakejp + Script Date : 5/31/2018 + Script Notes : + + Zone : Butcherblock Mountains + Quest Giver : Dockmaster Waulon + Preceded by : None + Followed by : None +--]] + +local DockDelinquency = 249 + +function Accepted(Quest, QuestGiver, Player) + FaceTarget(NPC, Player) + local conversation = CreateConversation() + + AddConversationOption(conversation, "I'll begin at once!") + StartConversation(conversation, QuestGiver, Player, "A number of the beasties that roam this 'ere coast have been causing problems 'ere and I don't have the time nor the manpower to resolve this issue by meself. Here, take this list an' see if you can keep the beasties in check.") +end + +function Declined(Quest, QuestGiver, Player) + -- Add dialog here for when the quest is declined +end + +function Init(Quest) + AddQuestStepKill(Quest, 1, "Rustfiends have been eating the workers' tools! I need to thin their numbers a bit.", 4, 100, "Dockmaster Waulon has asked me to cull some of the local wildlife so they will stop interfering with the day to day business of the docks.", 611, 1080055, 1081092) + AddQuestStepKill(Quest, 2, "Coastal basilisks have been chasing away the local fishermen! I must reduce their numbers.", 6, 100, "Dockmaster Waulon has asked me to cull some of the local wildlife so they will stop interfering with the day to day business of the docks.", 611, 1080054, 1081091) + AddQuestStepKill(Quest, 3, "Aqua goblin runts have attacked many newcomers. They need to be taught a lesson!", 6, 100, "Dockmaster Waulon has asked me to cull some of the local wildlife so they will stop interfering with the day to day business of the docks.", 159, 1080347) + AddQuestStepCompleteAction(Quest, 1, "Step1Complete") + AddQuestStepCompleteAction(Quest, 2, "Step2Complete") + AddQuestStepCompleteAction(Quest, 3, "Step3Complete") + +end + +function CheckProgressDockDelinquency(Quest, QuestGiver, Player) + if QuestStepIsComplete(Player, DockDelinquency, 1) and QuestStepIsComplete(Player, DockDelinquency, 2) and QuestStepIsComplete(Player, DockDelinquency, 3) then + FinalStepDockDelinquency(Quest, QuestGiver, Player) + end +end + +function Step1Complete(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 1, "I have reduced the number of rustfiends near the Butcherblock Docks.") + CheckProgressDockDelinquency(Quest, QuestGiver, Player) + +end + +function Step2Complete(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 2, "I have reduced the number of coastal basilisks on the beach.") + CheckProgressDockDelinquency(Quest, QuestGiver, Player) + +end + +function Step3Complete(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 3, "I have taught the aqua goblin runts a lesson they will never forget!") + CheckProgressDockDelinquency(Quest, QuestGiver, Player) + +end + +function FinalStepDockDelinquency(Quest, QuestGiver, Player) + UpdateQuestTaskGroupDescription(Quest, 1, "I successfully culled some of the local wildlife.") + + AddQuestStepChat(Quest, 4, "I need to speak with Dockmaster Waulon.", 1, "I need to let Dockmaster Waulon know I was successful at culling the list of creatures that were interferring with the dockworkers.", 11, 1080008) + AddQuestStepCompleteAction(Quest, 4, "QuestCompleteDockDelinquency") +end + +function QuestCompleteDockDelinquency(Quest, QuestGiver, Player) + -- The following UpdateQuestStepDescription and UpdateTaskGroupDescription are not needed, parser adds them for completion in case stuff needs to be moved around + UpdateQuestStepDescription(Quest, 4, "I spoke with Dockmaster Waulon.") + UpdateQuestTaskGroupDescription(Quest, 2, "I spoke with Dockmaster Waulon.") + + UpdateQuestDescription(Quest, "I've 'trimmed' back the local wildlife population as per Dockmaster Waulon's request. Hopefully he won't have as many problems to deal with now. The Dockmaster was most appreciative of my efforts.") + GiveQuestReward(Quest, Player) +end + +function Reload(Quest, QuestGiver, Player, Step) + if Step == 1 then + Step1Complete(Quest, QuestGiver, Player) + elseif Step == 2 then + Step2Complete(Quest, QuestGiver, Player) + elseif Step == 3 then + Step3Complete(Quest, QuestGiver, Player) + elseif Step == 4 then + QuestCompleteDockDelinquency(Quest, QuestGiver, Player) + end +end + diff --git a/server/Quests/ButcherblockMountains/FeathersForGherrana.lua b/server/Quests/ButcherblockMountains/FeathersForGherrana.lua new file mode 100644 index 000000000..d3c277b6d --- /dev/null +++ b/server/Quests/ButcherblockMountains/FeathersForGherrana.lua @@ -0,0 +1,56 @@ +--[[ + Script Name : FeathersforGherrana.lua + Script Purpose : Handles the quest, "Feathers for Gherrana" + Script Author : jakejp + Script Date : 6/7/2018 + Script Notes : + + Zone : Butcherblock Mountains + Quest Giver : Gherrana Cobbleblork + Preceded by : None + Followed by : None +--]] + + +function Init(Quest) + AddQuestStepKill(Quest, 1, "I need to collect Kragploom aviak feathers.", 10, 100, "I need to collect some healthy Kragploom aviak feathers for Gherrana, a gnome at the Highland Outposts.", 151, 1080073, 1080075, 1080076, 1080079, 1080081, 1080084, 1080252, 1080253, 1080255, 1080256, 1080338, 1080339, 1080343, 1080344, 1080346, 1080349, 1080352, 1081101) + AddQuestStepCompleteAction(Quest, 1, "Step1Complete") +end + +function Step1Complete(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 1, "I have collected several Kragploom aviak feathers.") + UpdateQuestTaskGroupDescription(Quest, 1, "I have collected several Kragploom aviak feathers for Gherrana.") + + AddQuestStepChat(Quest, 2, "I need to speak with Gherrana at the Highland Outposts.", 1, "I need to bring the Kragploom scavenger feathers back to Gherrana.", 11, 1081120) + AddQuestStepCompleteAction(Quest, 2, "QuestComplete") +end + +function QuestComplete(Quest, QuestGiver, Player) + -- The following UpdateQuestStepDescription and UpdateTaskGroupDescription are not needed, parser adds them for completion in case stuff needs to be moved around + UpdateQuestStepDescription(Quest, 2, "I spoke with Gherrana.") + UpdateQuestTaskGroupDescription(Quest, 2, "I gave Gherrana the feathers.") + + UpdateQuestDescription(Quest, "I brought back a pile of Kragploom aviak feathers for Gherrana. Now she can continue work on her flying contraption... or stuff a down pillow.") + GiveQuestReward(Quest, Player) +end + +function Reload(Quest, QuestGiver, Player, Step) + if Step == 1 then + Step1Complete(Quest, QuestGiver, Player) + elseif Step == 2 then + QuestComplete(Quest, QuestGiver, Player) + end +end + +function Accepted(Quest, QuestGiver, Player) + FaceTarget(QuestGiver, Player) + conversation = CreateConversation() + + PlayFlavor(QuestGiver, "", "", "", 0, 0, Player) + AddConversationOption(conversation, "Off I go!") + StartConversation(conversation, QuestGiver, Player, "Splendid! You might have an easier time getting them than I did. When I asked the Kragplooms themselves, they tried to eat me! Can you believe that! Me! I don't taste very good... At least I don't think I do. Anyways I'll need a great deal of feathers, so you better start now. Oh, and you will be fully compensated for your efforts.") +end + +function Declined(Quest, QuestGiver, Player) + -- Add dialog here for when the quest is declined +end \ No newline at end of file diff --git a/server/Quests/ButcherblockMountains/FletchMeMore.lua b/server/Quests/ButcherblockMountains/FletchMeMore.lua new file mode 100644 index 000000000..a6892b53a --- /dev/null +++ b/server/Quests/ButcherblockMountains/FletchMeMore.lua @@ -0,0 +1,55 @@ +--[[ + Script Name : FletchMeMore.lua + Script Purpose : Handles the quest, "Fletch Me More!" + Script Author : jakejp + Script Date : 6/22/2018 + Script Notes : + + Zone : Butcherblock Mountains + Quest Giver : Ninoin D'syl + Preceded by : Tier'Dal Timber + Followed by : Straight and to the Point +--]] + + +function Init(Quest) + AddQuestStepKill(Quest, 1, "I need to hunt Kragploom aviaks for their feathers.", 12, 100, "I need to gather feathers for Ninoin. She insisted I gather them from the Kragploom predators that stalk the Butcherblock highlands.", 147, 1080084, 1080079) + AddQuestStepCompleteAction(Quest, 1, "Step1Complete") +end + +function Step1Complete(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 1, "I have gathered a sufficent number of feathers for Ninoin.") + UpdateQuestTaskGroupDescription(Quest, 1, "I have gathered a sufficent number of feathers from the Kragploom predators.") + + AddQuestStepChat(Quest, 2, "I need to return the aviak feathers to Ninoin.", 1, "I need to bring the feathers back to Ninoin D'Syl.", 11, 1080135) + AddQuestStepCompleteAction(Quest, 2, "QuestComplete") +end + +function QuestComplete(Quest, QuestGiver, Player) + -- The following UpdateQuestStepDescription and UpdateTaskGroupDescription are not needed, parser adds them for completion in case stuff needs to be moved around + UpdateQuestStepDescription(Quest, 2, "I have returned the aviak feathers to Ninoin.") + UpdateQuestTaskGroupDescription(Quest, 2, "I have brought the feathers back to Ninoin D'Syl.") + + UpdateQuestDescription(Quest, "Ninoin was pleased with the Kragploom feathers I brought her. As agreed, I was compensated for my efforts.") + GiveQuestReward(Quest, Player) +end + +function Reload(Quest, QuestGiver, Player, Step) + if Step == 1 then + Step1Complete(Quest, QuestGiver, Player) + elseif Step == 2 then + QuestComplete(Quest, QuestGiver, Player) + end +end + +function Accepted(Quest, QuestGiver, Player) + FaceTarget(QuestGiver, Player) + local con = CreateConversation() + + AddConversationOption(con, "It will be done in due course.") + StartConversation(con, QuestGiver, Player, "Yes, Kragploom should work quite well. Bring me several feathers from any type of Kragploom you're able to hunt down. Their plumage would be best to make my arrows from.") +end + +function Declined(Quest, QuestGiver, Player) + -- Add dialog here for when the quest is declined +end \ No newline at end of file diff --git a/server/Quests/ButcherblockMountains/ForTheDogs.lua b/server/Quests/ButcherblockMountains/ForTheDogs.lua new file mode 100644 index 000000000..bb3ff0d5d --- /dev/null +++ b/server/Quests/ButcherblockMountains/ForTheDogs.lua @@ -0,0 +1,56 @@ +--[[ + Script Name : FortheDogs.lua + Script Purpose : Handles the quest, "For the Dogs" + Script Author : jakejp + Script Date : 6/9/2018 + Script Notes : + + Zone : Butcherblock Mountains + Quest Giver : + Preceded by : None + Followed by : None +--]] + + +function Init(Quest) + AddQuestStepKill(Quest, 1, "Talvrae asked me to collect fresh terratrodder meat for her.", 6, 100, "I must gather fresh terratrodder meat for Talvrae.", 288, 1080061, 1081094) + AddQuestStepCompleteAction(Quest, 1, "Step1Complete") +end + +function Step1Complete(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 1, "I have the terratrodder meat, and I should return this to Talvrae T'Zyth.") + UpdateQuestTaskGroupDescription(Quest, 1, "I have gathered the terratrodder meat that Talvrae needs.") + + AddQuestStepChat(Quest, 2, "I must return the terratrodder meat to Talvrae. I can find her at the Highland Outposts.", 1, "I must return the fresh terratrodder meat to Talvrae T'Zyth.", 288, 1081107) + AddQuestStepCompleteAction(Quest, 2, "QuestComplete") +end + +function QuestComplete(Quest, QuestGiver, Player) + -- The following UpdateQuestStepDescription and UpdateTaskGroupDescription are not needed, parser adds them for completion in case stuff needs to be moved around + UpdateQuestStepDescription(Quest, 2, "I have given Talvrae the fresh terratrodder meat she asked for.") + UpdateQuestTaskGroupDescription(Quest, 2, "I have delivered the fresh terratrodder meat to Talvrae.") + + UpdateQuestDescription(Quest, "I was able to gather enough terratrodder meat for Talvrae T'Zyth. I can't be sure what her plan is, but it looks like she's getting ready to feed her pets rather than conduct any type of study.") + GiveQuestReward(Quest, Player) +end + +function Reload(Quest, QuestGiver, Player, Step) + if Step == 1 then + Step1Complete(Quest, QuestGiver, Player) + elseif Step == 2 then + QuestComplete(Quest, QuestGiver, Player) + end +end + +function Accepted(Quest, QuestGiver, Player) + FaceTarget(QuestGiver, Player) + conversation = CreateConversation() + + PlayFlavor(QuestGiver, "talvrae_t_zyth/_exp03/exp03_rgn_butcherblock/talvrae/qst_talvrae_004.mp3", "", "", 1310097835, 2111544733, Player) + AddConversationOption(conversation, "I'm sure that I can. I'll gather the meat and return soon.", "dlg_23_6") + StartConversation(conversation, QuestGiver, Player, "I could not explain the details of exactly what I am doing to the likes of you, for I doubt you would understand it. The only parts important to you are the task, and the result. Can you handle that?") +end + +function Declined(Quest, QuestGiver, Player) + -- Add dialog here for when the quest is declined +end \ No newline at end of file diff --git a/server/Quests/ButcherblockMountains/GriffinStationsButcherblock.lua b/server/Quests/ButcherblockMountains/GriffinStationsButcherblock.lua new file mode 100644 index 000000000..e0357c226 --- /dev/null +++ b/server/Quests/ButcherblockMountains/GriffinStationsButcherblock.lua @@ -0,0 +1,73 @@ +--[[ + Script Name : Quests/ButcherblockMountains/GriffinStationsButcherblock.lua + Script Purpose : Handles the quest, "Griffin Stations: Butcherblock" + Script Author : jakejp + Script Date : 6/1/2018 + Script Notes : + + Zone : Butcherblock Mountains + Quest Giver : a griffin tamer + Preceded by : None + Followed by : None +--]] + +local GriffinStationsButcherblock = 269 + +function Init(Quest) + AddQuestStepLocation(Quest, 1, "There is a griffin tower station near the Butcherblock docks.", 10, "I must find the location of the three griffin towers in the Butcherblock Mountains.", 11, 754.67, 26.00, 571.20) + AddQuestStepLocation(Quest, 2, "There is a griffin tower station near the entrance to Greater Faydark.", 10, "I must find the location of the three griffin towers in the Butcherblock Mountains.", 11, -966, 116, -430) + AddQuestStepLocation(Quest, 3, "There is a griffin tower station near the entrance to Lesser Faydark.", 10, "I must find the location of the three griffin towers in the Butcherblock Mountains.", 11, -622.63, 115.50, 336.26) + AddQuestStepCompleteAction(Quest, 1, "Step1Complete") + AddQuestStepCompleteAction(Quest, 2, "Step2Complete") + AddQuestStepCompleteAction(Quest, 3, "Step3Complete") +end + +function CheckProgress(Quest, QuestGiver, Player) + if QuestStepIsComplete(Player, GriffinStationsButcherblock, 1) and QuestStepIsComplete(Player, GriffinStationsButcherblock, 2) and QuestStepIsComplete(Player, GriffinStationsButcherblock, 3) then + QuestComplete(Quest, QuestGiver, Player) + end +end + +function Step1Complete(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 1, "I have found the Docks station.") + CheckProgress(Quest, QuestGiver, Player) + +end + +function Step2Complete(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 2, "I have found the Greater Faydark station.") + CheckProgress(Quest, QuestGiver, Player) + +end + +function Step3Complete(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 3, "I have found the Lesser Faydark station.") + CheckProgress(Quest, QuestGiver, Player) + +end + +function QuestComplete(Quest, QuestGiver, Player) + -- The following UpdateQuestStepDescription and UpdateTaskGroupDescription are not needed, parser adds them for completion in case stuff needs to be moved around + + GiveQuestReward(Quest, Player) +end + +function Reload(Quest, QuestGiver, Player, Step) + if Step == 1 then + Step1Complete(Quest, QuestGiver, Player) + elseif Step == 2 then + Step2Complete(Quest, QuestGiver, Player) + elseif Step == 3 then + Step3Complete(Quest, QuestGiver, Player) + elseif Step == 4 then + QuestComplete(Quest, QuestGiver, Player) + end +end + +function Accepted(Quest, QuestGiver, Player) + -- Add dialog here for when the quest is accepted +end + +function Declined(Quest, QuestGiver, Player) + -- Add dialog here for when the quest is declined +end \ No newline at end of file diff --git a/server/Quests/ButcherblockMountains/IrontoeBrigadeRequisitionLists.lua b/server/Quests/ButcherblockMountains/IrontoeBrigadeRequisitionLists.lua new file mode 100644 index 000000000..0069874c7 --- /dev/null +++ b/server/Quests/ButcherblockMountains/IrontoeBrigadeRequisitionLists.lua @@ -0,0 +1,82 @@ +--[[ + Script Name : IrontoeBrigadeRequisitionLists.lua + Script Purpose : Handles the quest, "Irontoe Brigade Requisition Lists" + Script Author : jakejp + Script Date : 6/8/2018 + Script Notes : + + Zone : Butcherblock Mountains + Quest Giver : + Preceded by : None + Followed by : None +--]] + +local IrontoeBrigadeRequisitionLists = 282 + +function Init(Quest) + AddQuestStepChat(Quest, 1, "I need the requisition list from the first Irontoe Brigade miner foreman.", 1, "I need the requisition lists from the Irontoe Brigade miner foremans.", 75, 1080328) + AddQuestStepChat(Quest, 2, "I need the requisition list from the second Irontoe Brigade miner foreman.", 1, "I need the requisition lists from the Irontoe Brigade miner foremans.", 75, 1081245) + AddQuestStepChat(Quest, 3, "I need the requisition list from the third Irontoe Brigade miner foreman.", 1, "I need the requisition lists from the Irontoe Brigade miner foremans.", 75, 1080324) + AddQuestStepCompleteAction(Quest, 1, "Step1Complete") + AddQuestStepCompleteAction(Quest, 2, "Step2Complete") + AddQuestStepCompleteAction(Quest, 3, "Step3Complete") +end + +function CheckProgress(Quest, QuestGiver, Player) + if QuestStepIsComplete(Player, IrontoeBrigadeRequisitionLists, 1) and QuestStepIsComplete(Player, IrontoeBrigadeRequisitionLists, 2) and QuestStepIsComplete(Player, IrontoeBrigadeRequisitionLists, 3) then + HandInQuest(Quest, QuestGiver, Player) + end +end + +function Step1Complete(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 1, "I have the first requisition list.") + CheckProgress(Quest, QuestGiver, Player) + +end + +function Step2Complete(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 2, "I have the second requisition list.") + CheckProgress(Quest, QuestGiver, Player) + +end + +function Step3Complete(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 3, "I have the third requisition list.") + CheckProgress(Quest, QuestGiver, Player) +end + +function HandInQuest(Quest, QuestGiver, Player) + UpdateQuestTaskGroupDescription(Quest, 1, "I have collected the requisition lists.") + + AddQuestStepChat(Quest, 4, "I need to return to Argro.", 1, "I need to bring these requisition lists to Argro.", 11, 1081147) + AddQuestStepCompleteAction(Quest, 4, "QuestComplete") +end + +function QuestComplete(Quest, QuestGiver, Player) + -- The following UpdateQuestStepDescription and UpdateTaskGroupDescription are not needed, parser adds them for completion in case stuff needs to be moved around + UpdateQuestStepDescription(Quest, 4, "I have spoken with Argro.") + UpdateQuestTaskGroupDescription(Quest, 2, "I have given Argro the requision lists.") + + UpdateQuestDescription(Quest, "I got the requisition lists from the dig foremen for Argro.") + GiveQuestReward(Quest, Player) +end + +function Reload(Quest, QuestGiver, Player, Step) + if Step == 1 then + Step1Complete(Quest, QuestGiver, Player) + elseif Step == 2 then + Step2Complete(Quest, QuestGiver, Player) + elseif Step == 3 then + Step3Complete(Quest, QuestGiver, Player) + elseif Step == 4 then + QuestComplete(Quest, QuestGiver, Player) + end +end + +function Accepted(Quest, QuestGiver, Player) + -- Add dialog here for when the quest is accepted +end + +function Declined(Quest, QuestGiver, Player) + -- Add dialog here for when the quest is declined +end \ No newline at end of file diff --git a/server/Quests/ButcherblockMountains/MuckflickMessageIntercepted.lua b/server/Quests/ButcherblockMountains/MuckflickMessageIntercepted.lua new file mode 100644 index 000000000..0e8522c35 --- /dev/null +++ b/server/Quests/ButcherblockMountains/MuckflickMessageIntercepted.lua @@ -0,0 +1,51 @@ +--[[ + Script Name : Quests/ButcherblockMountains/MuckflickMessageIntercepted.lua + Script Purpose : Handles the quest, "Muckflick Message Intercepted!" + Script Author : jakejp + Script Date : 6/6/2018 + Script Notes : + + Zone : Butcherblock Mountains + Quest Giver : Brulten Hiltstill + Preceded by : None + Followed by : None +--]] + + +function Init(Quest) + AddQuestStepKill(Quest, 1, "I need to retrieve a message from a Muckflick runner.", 1, 100, "I need to take a note from the body of a Muckflick runner.", 75, 1080331, 1080374, 1080430) + AddQuestStepCompleteAction(Quest, 1, "Step1Complete") +end + +function Step1Complete(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 1, "I have retrieved a message from a Muckflick runner.") + UpdateQuestTaskGroupDescription(Quest, 1, "I found a note on the body of the Muckflick runner!") + + AddQuestStepChat(Quest, 2, "I need to give the note to Brulten.", 1, "I need to bring the message to Brulten.", 11, 1081114) + AddQuestStepCompleteAction(Quest, 2, "QuestComplete") +end + +function QuestComplete(Quest, QuestGiver, Player) + -- The following UpdateQuestStepDescription and UpdateTaskGroupDescription are not needed, parser adds them for completion in case stuff needs to be moved around + UpdateQuestStepDescription(Quest, 2, "I have given the note to Brulten.") + UpdateQuestTaskGroupDescription(Quest, 2, "I gave the message to Brulten.") + + UpdateQuestDescription(Quest, "I have pried a message from the dead hands of a Muckflick runner and delivered it to Brulten Hiltstill.") + GiveQuestReward(Quest, Player) +end + +function Reload(Quest, QuestGiver, Player, Step) + if Step == 1 then + Step1Complete(Quest, QuestGiver, Player) + elseif Step == 2 then + QuestComplete(Quest, QuestGiver, Player) + end +end + +function Accepted(Quest, QuestGiver, Player) + -- Add dialog here for when the quest is accepted +end + +function Declined(Quest, QuestGiver, Player) + -- Add dialog here for when the quest is declined +end \ No newline at end of file diff --git a/server/Quests/ButcherblockMountains/NauticalDisaster.lua b/server/Quests/ButcherblockMountains/NauticalDisaster.lua new file mode 100644 index 000000000..92ef30ac3 --- /dev/null +++ b/server/Quests/ButcherblockMountains/NauticalDisaster.lua @@ -0,0 +1,72 @@ +--[[ + Script Name : Quests/ButcherblockMountains/NauticalDisaster.lua + Script Purpose : Handles the quest, "Nautical Disaster" + Script Author : jakejp + Script Date : 6/2/2018 + Script Notes : + + Zone : Butcherblock Mountains + Quest Giver : Dockmaster Waulon + Preceded by : None + Followed by : None +--]] + +local NauticalDisaster = 252 + +function Init(Quest) + AddQuestStepObtainItem(Quest, 1, "I need to find the stolen tome.", 1, 100, "I need to look for the lost tome somewhere on the aqua goblin islands.", 11, 1081016) + AddQuestStepCompleteAction(Quest, 1, "Step1Complete") +end + +function Step1Complete(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 1, "I found the tome.") + UpdateQuestTaskGroupDescription(Quest, 1, "I have found the tome.") + + AddQuestStepChat(Quest, 2, "I need to return the tome to Dockmaster Waulon.", 1, "I need to bring the tome back to Dockmaster Waulon.", 11, 1080008) + AddQuestStepCompleteAction(Quest, 2, "Step2Complete") +end + +function Step2Complete(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 2, "I have returned the tome to Dockmaster Waulon.") + UpdateQuestTaskGroupDescription(Quest, 2, "I returned the tome to Dockmaster Waulon. Alas, it was missing several pages!") + + AddQuestStepKill(Quest, 3, "I need to look for the missing pages on the bodies of several aqua goblin wizards.", 5, 100, "I need to look for the missing pages on the bodies of the aqua goblin wizards.", 185, 1080057, 1080166) + AddQuestStepCompleteAction(Quest, 3, "Step3Complete") +end + +function Step3Complete(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 3, "I found all the missing pages!") + UpdateQuestTaskGroupDescription(Quest, 3, "I have recovered all the pages off the aqua goblin wizards.") + + AddQuestStepChat(Quest, 4, "I need to return the recovered pages to Dockmaster Waulon.", 1, "I need to return the recovered pages to Dockmaster Waulon.", 11, 1080008) + AddQuestStepCompleteAction(Quest, 4, "QuestComplete") +end + +function QuestComplete(Quest, QuestGiver, Player) + -- The following UpdateQuestStepDescription and UpdateTaskGroupDescription are not needed, parser adds them for completion in case stuff needs to be moved around + UpdateQuestStepDescription(Quest, 4, "I have returned the recovered pages to Dockmaster Waulon.") + UpdateQuestTaskGroupDescription(Quest, 4, "I've returned the pages to Dockmaster Waulon.") + + UpdateQuestDescription(Quest, "After finding the tome and recovering the missing pages from the clutches of several aqua goblin wizards, I returned the completed book to Dockmaster Waulon. As per our agreement, I was paid handsomely for my efforts.") + GiveQuestReward(Quest, Player) +end + +function Reload(Quest, QuestGiver, Player, Step) + if Step == 1 then + Step1Complete(Quest, QuestGiver, Player) + elseif Step == 2 then + Step2Complete(Quest, QuestGiver, Player) + elseif Step == 3 then + Step3Complete(Quest, QuestGiver, Player) + elseif Step == 4 then + QuestComplete(Quest, QuestGiver, Player) + end +end + +function Accepted(Quest, QuestGiver, Player) + -- Add dialog here for when the quest is accepted +end + +function Declined(Quest, QuestGiver, Player) + -- Add dialog here for when the quest is declined +end \ No newline at end of file diff --git a/server/Quests/ButcherblockMountains/NecessaryPrecautions.lua b/server/Quests/ButcherblockMountains/NecessaryPrecautions.lua new file mode 100644 index 000000000..b4063c62a --- /dev/null +++ b/server/Quests/ButcherblockMountains/NecessaryPrecautions.lua @@ -0,0 +1,41 @@ +--[[ + Script Name : Quests/ButcherblockMountains/NecessaryPrecautions.lua + Script Purpose : Handles the quest, "Necessary Precautions" + Script Author : jakejp + Script Date : 6/4/2018 + Script Notes : + + Zone : Butcherblock Mountains + Quest Giver : Guard Tellik + Preceded by : None + Followed by : None +--]] + + +function Init(Quest) + AddQuestStepChat(Quest, 1, "Speak with Assistant Deldry.", 1, "I must take the proposal to Assistant Deldry.", 235, 1080022) + AddQuestStepCompleteAction(Quest, 1, "QuestComplete") +end + +function QuestComplete(Quest, QuestGiver, Player) + -- The following UpdateQuestStepDescription and UpdateTaskGroupDescription are not needed, parser adds them for completion in case stuff needs to be moved around + UpdateQuestStepDescription(Quest, 1, "I have spoken with Assistant Deldry.") + UpdateQuestTaskGroupDescription(Quest, 1, "I have given the proposal to Assistant Deldry.") + + UpdateQuestDescription(Quest, "I have delivered the proposal to Assistant Deldry.") + GiveQuestReward(Quest, Player) +end + +function Reload(Quest, QuestGiver, Player, Step) + if Step == 1 then + QuestComplete(Quest, QuestGiver, Player) + end +end + +function Accepted(Quest, QuestGiver, Player) + -- Add dialog here for when the quest is accepted +end + +function Declined(Quest, QuestGiver, Player) + -- Add dialog here for when the quest is declined +end \ No newline at end of file diff --git a/server/Quests/ButcherblockMountains/SarnakSympathizerPart1.lua b/server/Quests/ButcherblockMountains/SarnakSympathizerPart1.lua new file mode 100644 index 000000000..58168bf7b --- /dev/null +++ b/server/Quests/ButcherblockMountains/SarnakSympathizerPart1.lua @@ -0,0 +1,46 @@ +--[[ + Script Name : Quests/ButcherblockMountains/SarnakSympathizerPart1.lua + Script Purpose : Handles the quest, "Sarnak Sympathizer: Part 1" + Script Author : jakejp + Script Date : 6/4/2018 + Script Notes : + + Zone : Butcherblock Mountains + Quest Giver : Raghunatha + Preceded by : None + Followed by : None +--]] + + +function Init(Quest) + AddQuestStepChat(Quest, 1, "I need to complete all the Irontoe Dwarf tasks so that they will agree to help Raghunatha. To begin, I must speak with Griss Brumbaugh at the Butcherblock Docks.", 1, "I need to complete all the Irontoe Dwarf tasks.", 11, 1081075) + AddQuestStepCompleteAction(Quest, 1, "QuestComplete") +end + +function QuestComplete(Quest, QuestGiver, Player) + -- The following UpdateQuestStepDescription and UpdateTaskGroupDescription are not needed, parser adds them for completion in case stuff needs to be moved around + UpdateQuestStepDescription(Quest, 1, "I found Griss Brumbaugh.") + UpdateQuestTaskGroupDescription(Quest, 1, "I found Griss Brumbaugh and began working for the Irontoe Dwarves.") + + UpdateQuestDescription(Quest, "The dwarves have a great many threats to deal with in Butcherblock Mountains, but hopefully, with my continued assistance they will agree to provide military and engineering support for the sarnak of Gorowyn.") + GiveQuestReward(Quest, Player) +end + +function Reload(Quest, QuestGiver, Player, Step) + if Step == 1 then + QuestComplete(Quest, QuestGiver, Player) + end +end + +function Accepted(Quest, QuestGiver, Player) + FaceTarget(QuestGiver, Player) + conversation = CreateConversation() + + PlayFlavor(QuestGiver, "raghuntha/_exp03/exp03_rgn_butcherblock/sarnak_sympathizer/raghunatha/raghunatha007.mp3", "", "", 3396264823, 906309207, Player) + AddConversationOption(conversation, "I'll begin at once!") + StartConversation(conversation, QuestGiver, Player, "Thank you, friend, I'll do my best to make sure you're rewarded kindly. Now, let me write down the names of all the dwarves you'll need to speak with. Complete their tasks and then return to me. Time is of the essence, and the Haoaeran's attacks grow stronger every day.") +end + +function Declined(Quest, QuestGiver, Player) + -- Add dialog here for when the quest is declined +end \ No newline at end of file diff --git a/server/Quests/ButcherblockMountains/SchmittysSandals.lua b/server/Quests/ButcherblockMountains/SchmittysSandals.lua new file mode 100644 index 000000000..e93a0e401 --- /dev/null +++ b/server/Quests/ButcherblockMountains/SchmittysSandals.lua @@ -0,0 +1,104 @@ +--[[ + Script Name : Quests/ButcherblockMountains/SchmittysSandals + Script Author : jakejp + Script Date : 2018.05.29 10:05:26 + Script Purpose : + + Zone : ButcherblockMountains + Quest Giver: Schmitty McEricson + Preceded by: None + Followed by: +--]] + +require "SpawnScripts/Generic/PlayerHistory" + +local SchmittysSandals = 266 + +function Accepted(Quest, QuestGiver, Player) + FaceTarget(QuestGiver, Player) + conversation = CreateConversation() + + AddConversationOption(conversation, "Sounds like a plan! I'll be back soon", "Option6") + StartConversation(conversation, QuestGiver, Player, "Here, let me see that little journal of yours. I'll write down the stuff I'll need and you can go gather it for me. Don't worry, I'll pay your for your time.") + +end + +function Declined(Quest, QuestGiver, Player) + -- Add dialog here for when the quest is declined +end + +function Init(Quest) + AddQuestStepKill(Quest, 1, "Collect several sea slug antennas to use as straps for the sandals.", 4, 100, "Schmitty has given me a list of various animal parts he needs in order to create a new pair of sandals to replace the ones he lost.", 2119, 1080003, 1080181, 1081050) + AddQuestStepKill(Quest, 2, "Bring Schmitty some superb pieces of terratrodder hide.", 3, 100, "Schmitty has given me a list of various animal parts he needs in order to create a new pair of sandals to replace the ones he lost.", 134, 1080061, 1081094) + AddQuestStepKill(Quest, 3, "Collect some sturdy needles from the anemones so Schmitty can fashion them into cleats.", 4, 100, "Schmitty has given me a list of various animal parts he needs in order to create a new pair of sandals to replace the ones he lost.", 112, 1081066, 1080026, 1080060, 1081093) + AddQuestStepCompleteAction(Quest, 1, "SlugKilled") + AddQuestStepCompleteAction(Quest, 2, "TerratrodderKilled") + AddQuestStepCompleteAction(Quest, 3, "AnemoneKilled") + +end + +function SlugKilled(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 1, "I've collected several sea slug antennas.") + CheckProgress(Quest, QuestGiver, Player) +end + +function TerratrodderKilled(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 2, "I found some pieces of terratrodder hide.") + CheckProgress(Quest, QuestGiver, Player) +end + +function AnemoneKilled(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 3, "I found a good amount of anemone needles that could be fashioned into cleats.") + CheckProgress(Quest, QuestGiver, Player) +end + +function CheckProgress(Quest, QuestGiver, Player) + if QuestStepIsComplete(Player, SchmittysSandals, 1) and QuestStepIsComplete(Player, SchmittysSandals, 2) and QuestStepIsComplete(Player, SchmittysSandals, 3) then + NextStep(Quest, QuestGiver, Player) + end +end + +function NextStep(Quest, QuestGiver, Player) + UpdateQuestTaskGroupDescription(Quest, 1, "I have collected the various animal parts Schmitty requested.") + AddQuestStepChat(Quest, 4, "I need to speak with Schmitty.", 1, "I need to return all the items I collected to Schmitty.", 11, 1080049) + AddQuestStepCompleteAction(Quest, 4, "Step4Complete") + +end + +function Step4Complete(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 4, "I have spoken with Schmitty") + UpdateQuestTaskGroupDescription(Quest, 2, "I have returned all the items to Schmitty.") + + AddQuestStepChat(Quest, 5, "I should give Schmitty a few minutes to make the sandals.", 1, "I need to give Schmitty a few minutes to make the sandals.", 11, 1080049) + AddQuestStepCompleteAction(Quest, 5, "QuestComplete") + local time = os.time() + SetPlayerHistory(Player, HISTORY.BB_SCHMITTYSANDALS_STEP5_WAIT, time) + +end + +function QuestComplete(Quest, QuestGiver, Player) + -- The following UpdateQuestStepDescription and UpdateTaskGroupDescription are not needed, parser adds them for completion in case stuff needs to be moved around + UpdateQuestStepDescription(Quest, 5, "After waiting a bit, Schmitty gave me a new pair of sandals.") + UpdateQuestTaskGroupDescription(Quest, 3, "After waiting for a little while, Schmitty presented me with my new sandals.") + + UpdateQuestDescription(Quest, "It seems as though Schmitty never did lose his sandals. Instead they were simply under a pile of sand. As a token of appreciation, Schmitty gave me the sandals he crafted out of the parts I brought back to him.") + GiveQuestReward(Quest, Player) +end + +function Reload(Quest, QuestGiver, Player, Step) + if Step == 1 then + SlugKilled(Quest, QuestGiver, Player) + elseif Step == 2 then + TerratrodderKilled(Quest, QuestGiver, Player) + elseif Step == 3 then + AnemoneKilled(Quest, QuestGiver, Player) + elseif Step == 4 then + Step4Complete(Quest, QuestGiver, Player) + elseif Step == 5 then + QuestComplete(Quest, QuestGiver, Player) + end +end + + + + diff --git a/server/Quests/ButcherblockMountains/SeekingBrultenHiltstill.lua b/server/Quests/ButcherblockMountains/SeekingBrultenHiltstill.lua new file mode 100644 index 000000000..037107ecf --- /dev/null +++ b/server/Quests/ButcherblockMountains/SeekingBrultenHiltstill.lua @@ -0,0 +1,45 @@ +--[[ + Script Name : SeekingBrultenHiltstill.lua + Script Purpose : Handles the quest, "Seeking Brulten Hiltstill" + Script Author : jakejp + Script Date : 6/3/2018 + Script Notes : + + Zone : Butcherblock Mountains + Quest Giver : Dockmaster Waulon + Preceded by : None + Followed by : None +--]] + + +function Init(Quest) + AddQuestStepChat(Quest, 1, "I need to speak with Brulten Hiltstill.", 1, "I need to seek out Brulten Hiltstill. He can be found at the caravan stop, near the entrance to the Greater Faydark.", 11, 1081114) + AddQuestStepCompleteAction(Quest, 1, "QuestComplete") +end + +function QuestComplete(Quest, QuestGiver, Player) + -- The following UpdateQuestStepDescription and UpdateTaskGroupDescription are not needed, parser adds them for completion in case stuff needs to be moved around + UpdateQuestStepDescription(Quest, 1, "I have spoken with Brulten Hiltstill.") + UpdateQuestTaskGroupDescription(Quest, 1, "I have found Brulten Hiltstill.") + + UpdateQuestDescription(Quest, "I have found Brulten Hiltstill. He needs my help dealing with the Yarpsnarl kobolds.") + GiveQuestReward(Quest, Player) +end + +function Reload(Quest, QuestGiver, Player, Step) + if Step == 1 then + QuestComplete(Quest, QuestGiver, Player) + end +end + +function Accepted(Quest, QuestGiver, Player) + FaceTarget(NPC, Spawn) + local conversation = CreateConversation() + + AddConversationOption(conversation, "Excellent. Then I'm off. Good day!") + StartConversation(conversation, NPC, Spawn, "To get there, you should take the trail that runs along the cliff face to the east. Once you reach the top of the cliff, look for ol' Brulten near the griffin tower.") +end + +function Declined(Quest, QuestGiver, Player) + -- Add dialog here for when the quest is declined +end \ No newline at end of file diff --git a/server/Quests/ButcherblockMountains/SeekingTheKilnkors.lua b/server/Quests/ButcherblockMountains/SeekingTheKilnkors.lua new file mode 100644 index 000000000..c0df88856 --- /dev/null +++ b/server/Quests/ButcherblockMountains/SeekingTheKilnkors.lua @@ -0,0 +1,41 @@ +--[[ + Script Name : Quests/ButcherblockMountains/SeekingTheKilnkors.lua + Script Purpose : Handles the quest, "Seeking the Kilnkors" + Script Author : jakejp + Script Date : 6/6/2018 + Script Notes : + + Zone : Butcherblock Mountains + Quest Giver : + Preceded by : None + Followed by : None +--]] + + +function Init(Quest) + AddQuestStepChat(Quest, 1, "I must find Jonedorn Kilnkor.", 1, "I must find Jonedorn Kilnkor in the eastermost dwarven outpost.", 11, 1080149) + AddQuestStepCompleteAction(Quest, 1, "QuestComplete") +end + +function QuestComplete(Quest, QuestGiver, Player) + -- The following UpdateQuestStepDescription and UpdateTaskGroupDescription are not needed, parser adds them for completion in case stuff needs to be moved around + UpdateQuestStepDescription(Quest, 1, "I have found Jonedorn Kilnkor.") + UpdateQuestTaskGroupDescription(Quest, 1, "I have found Jonedorn Kilnkor in the easternmost dwarven outpost.") + + UpdateQuestDescription(Quest, "I have discovered the West Fort Irontoe and found Jonedorn Kilnkor. I have also given him the note from the Muckflick runner.") + GiveQuestReward(Quest, Player) +end + +function Reload(Quest, QuestGiver, Player, Step) + if Step == 1 then + QuestComplete(Quest, QuestGiver, Player) + end +end + +function Accepted(Quest, QuestGiver, Player) + -- Add dialog here for when the quest is accepted +end + +function Declined(Quest, QuestGiver, Player) + -- Add dialog here for when the quest is declined +end \ No newline at end of file diff --git a/server/Quests/ButcherblockMountains/StockComponents.lua b/server/Quests/ButcherblockMountains/StockComponents.lua new file mode 100644 index 000000000..95276be1a --- /dev/null +++ b/server/Quests/ButcherblockMountains/StockComponents.lua @@ -0,0 +1,56 @@ +--[[ + Script Name : StockComponents.lua + Script Purpose : jakejp + Script Author : QuestParser (Replace this) + Script Date : 6/17/2018 + Script Notes : + + Zone : Butcherblock Mountains + Quest Giver : Thayvl Ulthonis + Preceded by : None + Followed by : None +--]] + + +function Init(Quest) + AddQuestStepKill(Quest, 1, "Collect dust from several wisps.", 10, 100, "Thayvl has asked me to collect the dust from several wisps found here in the Butcherblock Mountains.", 342, 1080261, 1081126, 1080072, 1081100) + AddQuestStepCompleteAction(Quest, 1, "Step1Complete") +end + +function Step1Complete(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 1, "I have collected dust from several wisps.") + UpdateQuestTaskGroupDescription(Quest, 1, "I have collected the dust from several slain wisps.") + + AddQuestStepChat(Quest, 2, "Speak with Thayvl Ulthonis.", 1, "I need to return to Thayvl Ulthonis. He can be found in the Butcherblock highlands.", 11, 1080130) + AddQuestStepCompleteAction(Quest, 2, "QuestComplete") +end + +function QuestComplete(Quest, QuestGiver, Player) + -- The following UpdateQuestStepDescription and UpdateTaskGroupDescription are not needed, parser adds them for completion in case stuff needs to be moved around + UpdateQuestStepDescription(Quest, 2, "I have spoken with Thayvl Ulthonis.") + UpdateQuestTaskGroupDescription(Quest, 2, "I presented Thayvl with a large amount of wandering essence dust.") + + UpdateQuestDescription(Quest, "Who says a Teir'Dal can't keep their word? Thayvl rewarded me well for my efforts.") + GiveQuestReward(Quest, Player) +end + +function Reload(Quest, QuestGiver, Player, Step) + if Step == 1 then + Step1Complete(Quest, QuestGiver, Player) + elseif Step == 2 then + QuestComplete(Quest, QuestGiver, Player) + end +end + +function Accepted(Quest, QuestGiver, Player) + FaceTarget(QuestGiver, Player) + conversation = CreateConversation() + + PlayFlavor(QuestGiver, "", "", "", 0, 0, Player) + AddConversationOption(conversation, "We have a deal. I will return with a large amount of dust shortly.") + StartConversation(conversation, QuestGiver, Player, "Hmm. Alright, I might be able to part with a trinket of sorts in exchange for your help. The sooner I have all the material components I've been... asked to bring back, the sooner I can return to... home. Yes, home.") +end + +function Declined(Quest, QuestGiver, Player) + -- Add dialog here for when the quest is declined +end \ No newline at end of file diff --git a/server/Quests/ButcherblockMountains/StraightAndToThePoint.lua b/server/Quests/ButcherblockMountains/StraightAndToThePoint.lua new file mode 100644 index 000000000..7a41cafff --- /dev/null +++ b/server/Quests/ButcherblockMountains/StraightAndToThePoint.lua @@ -0,0 +1,56 @@ +--[[ + Script Name : StraightandtothePoint.lua + Script Purpose : Handles the quest, "Straight and to the Point" + Script Author : jakejp + Script Date : 6/22/2018 + Script Notes : + + Zone : Butcherblock Mountains + Quest Giver : + Preceded by : None + Followed by : None +--]] + + +function Init(Quest) + AddQuestStepKill(Quest, 1, "I need to hunt bugbears in the Butcherblock Mountains for their weapons.", 15, 100, "I need to gather stone weapons for Ninoin. She suggested I gather them from the bugbears that live in the Northern reaches of the Butcherblock Mountains.", 1124, 1080630, 1080094, 1080093, 1080087, 1080628, 1080629, 1080790, 1080091, 1080788, 1080089, 1080100, 1080336, 1080096, 1080102) + AddQuestStepCompleteAction(Quest, 1, "Step1Complete") +end + +function Step1Complete(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 1, "I have gathered a sufficent number of bugbear weapons for Ninoin.") + UpdateQuestTaskGroupDescription(Quest, 1, "I have gathered a number of stone weapons.") + + AddQuestStepChat(Quest, 2, "I need to return the weapons to Ninoin.", 1, "I need to bring the stone weapons back to Ninoin.", 11, 1080135) + AddQuestStepCompleteAction(Quest, 2, "QuestComplete") +end + +function QuestComplete(Quest, QuestGiver, Player) + -- The following UpdateQuestStepDescription and UpdateTaskGroupDescription are not needed, parser adds them for completion in case stuff needs to be moved around + UpdateQuestStepDescription(Quest, 2, "I have returned the weapons to Ninoin.") + UpdateQuestTaskGroupDescription(Quest, 2, "I have brought the weapons to Ninoin.") + + UpdateQuestDescription(Quest, "Ninoin was pleased with the bugbear weapons I brought back.") + GiveQuestReward(Quest, Player) +end + +function Reload(Quest, QuestGiver, Player, Step) + if Step == 1 then + Step1Complete(Quest, QuestGiver, Player) + elseif Step == 2 then + QuestComplete(Quest, QuestGiver, Player) + end +end + +function Accepted(Quest, QuestGiver, Player) + FaceTarget(QuestGiver, Player) + local con = CreateConversation() + + AddConversationOption(con, "I take my leave.") + AddConversationOption(con, "Where are they located?", "dlg_15") + StartConversation(con, QuestGiver, Player, "I've seen lumbering brutes patrolling the Northern reaches of these mountains. Bugbears, I believe they are called. They carry massive weapons made of flint or obsidian. Bring me back a pile of those weapons. I should be able to craft some new arrowheads out of them.") +end + +function Declined(Quest, QuestGiver, Player) + -- Add dialog here for when the quest is declined +end \ No newline at end of file diff --git a/server/Quests/ButcherblockMountains/TeirDalTimer.lua b/server/Quests/ButcherblockMountains/TeirDalTimer.lua new file mode 100644 index 000000000..e0136371f --- /dev/null +++ b/server/Quests/ButcherblockMountains/TeirDalTimer.lua @@ -0,0 +1,57 @@ +--[[ + Script Name : TeirDalTimber.lua + Script Purpose : Handles the quest, "Teir'Dal Timber" + Script Author : jakejp + Script Date : 6/21/2018 + Script Notes : + + Zone : Butcherblock Mountains + Quest Giver : Ninoin D'syl + Preceded by : None + Followed by : Fletch Me More! +--]] + + +function Init(Quest) + AddQuestStepHarvest(Quest, 1, "I need to collect severed ash for Ninoin.", 10, 100, "I have agreed to harvest pieces of timber for Ninoin D'syl so that she may make new arrow shafts.", 826, 1081033, 1081039, 1081238) + AddQuestStepCompleteAction(Quest, 1, "Step1Complete") +end + +function Step1Complete(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 1, "I have gathered a sufficent amount of severed ash.") + UpdateQuestTaskGroupDescription(Quest, 1, "I have gathered a significant amount of timber.") + + AddQuestStepChat(Quest, 2, "I need to bring the pile of timber to Ninoin.", 1, "I need to bring the timber I gathered back to Ninoin D'syl.", 11, 1080135) + AddQuestStepCompleteAction(Quest, 2, "QuestComplete") +end + +function QuestComplete(Quest, QuestGiver, Player) + -- The following UpdateQuestStepDescription and UpdateTaskGroupDescription are not needed, parser adds them for completion in case stuff needs to be moved around + UpdateQuestStepDescription(Quest, 2, "I have brought the pile of timber to Ninoin.") + UpdateQuestTaskGroupDescription(Quest, 2, "I have brought the timber to Ninoin D'syl.") + + UpdateQuestDescription(Quest, "Ninoin was pleased with the lumber I brought. As agreed, I was compensated for my efforts.") + GiveQuestReward(Quest, Player) +end + +function Reload(Quest, QuestGiver, Player, Step) + if Step == 1 then + Step1Complete(Quest, QuestGiver, Player) + elseif Step == 2 then + QuestComplete(Quest, QuestGiver, Player) + end +end + +function Accepted(Quest, QuestGiver, Player) + FaceTarget(QuestGiver, Player) + local con = CreateConversation() + + PlayFlavor(QuestGiver, "", "", "", 0, 0, Player) + AddConversationOption(con, "Right away!") + AddConversationOption(con, "What's in it for me?", "dlg_7") + StartConversation(con, QuestGiver, Player, "Hmm, I suppose that would work. Though I do like the idea of beating someone into submission... Anyways, I need fresh cut timber to whittle down into arrow shafts. Bring me a substantial pile of timber from the trees around here.") +end + +function Declined(Quest, QuestGiver, Player) + -- Add dialog here for when the quest is declined +end \ No newline at end of file diff --git a/server/Quests/ButcherblockMountains/TheKoboldAndTheBeautiful.lua b/server/Quests/ButcherblockMountains/TheKoboldAndTheBeautiful.lua new file mode 100644 index 000000000..1c5d1f712 --- /dev/null +++ b/server/Quests/ButcherblockMountains/TheKoboldAndTheBeautiful.lua @@ -0,0 +1,57 @@ +--[[ + Script Name : Quests/ButcherblockMountains/TheKoboldAndTheBeautiful.lua + Script Purpose : Handles the quest, "The Kobold and the Beautiful" + Script Author : jakejp + Script Date : 6/5/2018 + Script Notes : + + Zone : Butcherblock Mountains + Quest Giver : Brulten Hiltstill + Preceded by : None + Followed by : None +--]] + + +function Init(Quest) + AddQuestStepKill(Quest, 1, "I need to slay several kobolds in the area.", 12, 100, "I need to kill several kobolds in the Butcherblock Mountains.", 611, 1080092, 1080095, 1080099, 1080107, 1080108, 1080111, 1080247, 1080248, 1080251, 1080258, 1080268, 1080269, 1080311, 1080315, 1080316, 1080317, 1080321, 1080326, 1080327, 1080335, 1080341, 1080372, 1080383, 1080423, 1080424, 1080425, 1080426, 1080428, 1080431, 1080432, 1080612, 1080616, 1080617, 1080663, 1080701, 1080764, 1080787, 1081102, 1081103, 1081104, 1081121, 1081122, 1081124, 1081138, 1081141, 1081142, 1081143, 1081145, 1081146, 1081148, 1081150, 1081151, 1081153, 1081154, 1081155, 1081170) + AddQuestStepCompleteAction(Quest, 1, "Step1Complete") +end + +function Step1Complete(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 1, "I have slain several kobolds in the Butcherblock Mountains.") + UpdateQuestTaskGroupDescription(Quest, 1, "I have successfully killed several kobolds.") + + AddQuestStepChat(Quest, 2, "I should let Brulten know I've slain several kobolds.", 1, "I need to return to the Highland Outposts and let Brulten know that I've killed several kobolds.", 11, 1081114) + AddQuestStepCompleteAction(Quest, 2, "QuestComplete") +end + +function QuestComplete(Quest, QuestGiver, Player) + -- The following UpdateQuestStepDescription and UpdateTaskGroupDescription are not needed, parser adds them for completion in case stuff needs to be moved around + UpdateQuestStepDescription(Quest, 2, "I told Brulten that I've slain several kobolds.") + UpdateQuestTaskGroupDescription(Quest, 2, "I told Brulten of my deeds. He thanked me for my efforts.") + + UpdateQuestDescription(Quest, "I have slain several kobolds... Alas more and more seem to take the place of the fallen!") + GiveQuestReward(Quest, Player) +end + +function Reload(Quest, QuestGiver, Player, Step) + if Step == 1 then + Step1Complete(Quest, QuestGiver, Player) + elseif Step == 2 then + QuestComplete(Quest, QuestGiver, Player) + end +end + +function Accepted(Quest, QuestGiver, Player) + FaceTarget(QuestGiver, Player) + conversation = CreateConversation() + + PlayFlavor(QuestGiver, "", "", "", 0, 0, Player) + AddConversationOption(conversation, "I'm off!") + AddConversationOption(conversation, "I don't have a blade, but thanks for the well wishes!") + StartConversation(conversation, QuestGiver, Player, "Good. Now just up ahead are scores of kobold camps. Go and slay at least twenty kobolds. That should thin their ranks enough to stall any assault they have planned. Go swiftly, and may Brell guide your blade!") +end + +function Declined(Quest, QuestGiver, Player) + -- Add dialog here for when the quest is declined +end \ No newline at end of file diff --git a/server/Quests/ButcherblockMountains/TheManyUsesOfCarapace.lua b/server/Quests/ButcherblockMountains/TheManyUsesOfCarapace.lua new file mode 100644 index 000000000..64443fc88 --- /dev/null +++ b/server/Quests/ButcherblockMountains/TheManyUsesOfCarapace.lua @@ -0,0 +1,51 @@ +--[[ + Script Name : Quests/ButcherblockMountains/TheManyUsesOfCarapace.lua + Script Purpose : Handles the quest, "The Many Uses of Carapace" + Script Author : jakejp + Script Date : 6/8/2018 + Script Notes : + + Zone : Butcherblock Mountains + Quest Giver : + Preceded by : None + Followed by : None +--]] + + +function Init(Quest) + AddQuestStepKill(Quest, 1, "I need to collect ten granite beetle carapaces.", 10, 100, "I need to collect a number of beetle carapaces for Argro.", 162, 1080069, 1080273) + AddQuestStepCompleteAction(Quest, 1, "Step1Complete") +end + +function Step1Complete(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 1, "I have collected the granite beetle carapaces.") + UpdateQuestTaskGroupDescription(Quest, 1, "I have collected the beetle carapaces.") + + AddQuestStepChat(Quest, 2, "I need to speak with Argro.", 1, "I need to bring these beetle carapaces to Argro.", 11, 1081147) + AddQuestStepCompleteAction(Quest, 2, "QuestComplete") +end + +function QuestComplete(Quest, QuestGiver, Player) + -- The following UpdateQuestStepDescription and UpdateTaskGroupDescription are not needed, parser adds them for completion in case stuff needs to be moved around + UpdateQuestStepDescription(Quest, 2, "I have spoken with Argro.") + UpdateQuestTaskGroupDescription(Quest, 2, "I have delivered the beetle carapaces.") + + UpdateQuestDescription(Quest, "I collected the beetle carapaces for Argro. He hopes to create some new armor from them and thanked me for acquiring them for him.") + GiveQuestReward(Quest, Player) +end + +function Reload(Quest, QuestGiver, Player, Step) + if Step == 1 then + Step1Complete(Quest, QuestGiver, Player) + elseif Step == 2 then + QuestComplete(Quest, QuestGiver, Player) + end +end + +function Accepted(Quest, QuestGiver, Player) + -- Add dialog here for when the quest is accepted +end + +function Declined(Quest, QuestGiver, Player) + -- Add dialog here for when the quest is declined +end \ No newline at end of file diff --git a/server/Quests/ButcherblockMountains/TheNumberOneThreatInButcherblock.lua b/server/Quests/ButcherblockMountains/TheNumberOneThreatInButcherblock.lua new file mode 100644 index 000000000..19a92831c --- /dev/null +++ b/server/Quests/ButcherblockMountains/TheNumberOneThreatInButcherblock.lua @@ -0,0 +1,56 @@ +--[[ + Script Name : Quests/ButcherblockMountains/TheNumberOneThreatInButcherblock.lua + Script Purpose : Handles the quest, "The Number One Threat in Butcherblock" + Script Author : jakejp + Script Date : 6/6/2018 + Script Notes : + + Zone : Butcherblock Mountains + Quest Giver : Trapper Coalbear + Preceded by : None + Followed by : None +--]] + + +function Init(Quest) + AddQuestStepKill(Quest, 1, "I need to slay several slatepaw bears in the area.", 10, 100, "I must reduce the threat of bears in Butcherblock!", 174, 1080259, 1080429, 1080614, 1081152, 1080378, 1080379, 1080380, 1080334) + AddQuestStepCompleteAction(Quest, 1, "Step1Complete") +end + +function Step1Complete(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 1, "I have slain several bears in the Butcherblock Mountains.") + UpdateQuestTaskGroupDescription(Quest, 1, "I have successfully reduced the threat of bears in Butcherblock!") + + AddQuestStepChat(Quest, 2, "I should let Coalbear know I've slain several bears.", 1, "I should let Trapper Coalbear know that I've reduced the threat of bears in the region.", 11, 1080139) + AddQuestStepCompleteAction(Quest, 2, "QuestComplete") +end + +function QuestComplete(Quest, QuestGiver, Player) + -- The following UpdateQuestStepDescription and UpdateTaskGroupDescription are not needed, parser adds them for completion in case stuff needs to be moved around + UpdateQuestStepDescription(Quest, 2, "I let Coalbear know that I've slain several bears.") + UpdateQuestTaskGroupDescription(Quest, 2, "Trapper Coalbear was thrilled to hear of my efforts... but he's still concerned about bears.") + + UpdateQuestDescription(Quest, "Trapper Coalbear should be most pleased. I have slain several bears and hopefully reduced their threat significantly.") + GiveQuestReward(Quest, Player) +end + +function Reload(Quest, QuestGiver, Player, Step) + if Step == 1 then + Step1Complete(Quest, QuestGiver, Player) + elseif Step == 2 then + QuestComplete(Quest, QuestGiver, Player) + end +end + +function Accepted(Quest, QuestGiver, Player) + FaceTarget(QuestGiver, Player) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Player) + AddConversationOption(conversation, "Will do!") + StartConversation(conversation, QuestGiver, Player, "Great! You can get started right away. As I said, I've seen several already. Come see me again when you've significantly reduced the threat of bears in the area!") +end + +function Declined(Quest, QuestGiver, Player) + -- Add dialog here for when the quest is declined +end \ No newline at end of file diff --git a/server/Quests/ButcherblockMountains/TheYarpsnarls.lua b/server/Quests/ButcherblockMountains/TheYarpsnarls.lua new file mode 100644 index 000000000..a157b4665 --- /dev/null +++ b/server/Quests/ButcherblockMountains/TheYarpsnarls.lua @@ -0,0 +1,71 @@ +--[[ + Script Name : TheYarpsnarls.lua + Script Purpose : Handles the quest, "The Yarpsnarls" + Script Author : jakejp + Script Date : 6/8/2018 + Script Notes : + + Zone : Butcherblock Mountains + Quest Giver : Argro Durthor + Preceded by : None + Followed by : None +--]] + +local TheYarpsnarls = 280 + +function Init(Quest) + AddQuestStepKill(Quest, 1, "Kill several Yarpsnarl lookouts.", 4, 100, "I need to kill the Yarpsnarl's east of Argro's position.", 611, 1080251, 1080425, 1081124, 1081150) + AddQuestStepKill(Quest, 2, "Kill several Yarpsnarl ravagers.", 4, 100, "I need to kill the Yarpsnarl's east of Argro's position.", 611, 1080248, 1080372, 1081122, 1081146) + AddQuestStepCompleteAction(Quest, 1, "Step1Complete") + AddQuestStepCompleteAction(Quest, 2, "Step2Complete") +end + +function CheckProgress(Quest, QuestGiver, Player) + if QuestStepIsComplete(Player, TheYarpsnarls, 1) and QuestStepIsComplete(Player, TheYarpsnarls, 2) then + HandInQuest(Quest, QuestGiver, Player) + end +end + +function Step1Complete(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 1, "I have killed the Yarpsnarl lookouts.") + CheckProgress(Quest, QuestGiver, Player) +end + +function Step2Complete(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 2, "I have killed the Yarpsnarl ravagers.") + CheckProgress(Quest, QuestGiver, Player) +end + +function HandInQuest(Quest, QuestGiver, Player) + UpdateQuestTaskGroupDescription(Quest, 1, "I have slain the Yarpsnarl kobolds.") + + AddQuestStepChat(Quest, 3, "I need to speak with Argro.", 1, "I need to return to Argro now that I've slain the kobolds.", 11, 1081147) + AddQuestStepCompleteAction(Quest, 3, "QuestComplete") +end + +function QuestComplete(Quest, QuestGiver, Player) + -- The following UpdateQuestStepDescription and UpdateTaskGroupDescription are not needed, parser adds them for completion in case stuff needs to be moved around + UpdateQuestStepDescription(Quest, 3, "I have spoken with Argro.") + UpdateQuestTaskGroupDescription(Quest, 2, "I have returned to Argro.") + + UpdateQuestDescription(Quest, "I have slain the kobolds for Argro. He was thankful for my help.") + GiveQuestReward(Quest, Player) +end + +function Reload(Quest, QuestGiver, Player, Step) + if Step == 1 then + Step1Complete(Quest, QuestGiver, Player) + elseif Step == 2 then + Step2Complete(Quest, QuestGiver, Player) + elseif Step == 3 then + QuestComplete(Quest, QuestGiver, Player) + end +end + +function Accepted(Quest, QuestGiver, Player) + -- Add dialog here for when the quest is accepted +end + +function Declined(Quest, QuestGiver, Player) + -- Add dialog here for when the quest is declined +end \ No newline at end of file diff --git a/server/Quests/ButcherblockMountains/ThievingRunts.lua b/server/Quests/ButcherblockMountains/ThievingRunts.lua new file mode 100644 index 000000000..f5a62a711 --- /dev/null +++ b/server/Quests/ButcherblockMountains/ThievingRunts.lua @@ -0,0 +1,50 @@ +--[[ + Script Name : Quests/ButcherblockMountains/ThievingRunts.lua + Script Purpose : Handles the quest, "Thieving Runts" + Script Author : jakejp + Script Date : 6/4/2018 + Script Notes : + + Zone : Butcherblock Mountains + Quest Giver : Guard Daarwyn + Preceded by : None + Followed by : None +--]] + + +function Init(Quest) + AddQuestStepKill(Quest, 1, "Aqua goblin runt ears collected.", 8, 100, "I must collect aqua goblin runt ears for Guard Daarwyn.", 2566, 1080347, 1080051, 1080165, 1081088) + AddQuestStepCompleteAction(Quest, 1, "Step1Complete") +end + +function Step1Complete(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 1, "I have collected enough aqua goblin runt ears.") + + AddQuestStepChat(Quest, 2, "I must return the ears to Guard Daarwyn.", 1, "I must collect aqua goblin runt ears for Guard Daarwyn.", 235, 1080004) + AddQuestStepCompleteAction(Quest, 2, "QuestComplete") +end + +function QuestComplete(Quest, QuestGiver, Player) + -- The following UpdateQuestStepDescription and UpdateTaskGroupDescription are not needed, parser adds them for completion in case stuff needs to be moved around + UpdateQuestStepDescription(Quest, 2, "I have collected the bounty.") + UpdateQuestTaskGroupDescription(Quest, 1, "I have returned the ears, and collected the bounty.") + + UpdateQuestDescription(Quest, "I have cleared out several of the aqua goblin runts, and have presented the ears as proof of my deeds.") + GiveQuestReward(Quest, Player) +end + +function Reload(Quest, QuestGiver, Player, Step) + if Step == 1 then + Step1Complete(Quest, QuestGiver, Player) + elseif Step == 2 then + QuestComplete(Quest, QuestGiver, Player) + end +end + +function Accepted(Quest, QuestGiver, Player) + -- Add dialog here for when the quest is accepted +end + +function Declined(Quest, QuestGiver, Player) + -- Add dialog here for when the quest is declined +end \ No newline at end of file diff --git a/server/Quests/ButcherblockMountains/UnusualPalate.lua b/server/Quests/ButcherblockMountains/UnusualPalate.lua new file mode 100644 index 000000000..8ece5b84a --- /dev/null +++ b/server/Quests/ButcherblockMountains/UnusualPalate.lua @@ -0,0 +1,50 @@ +--[[ + Script Name : Quests/ButcherblockMountains/UnusualPalate.lua + Script Purpose : Handles the quest, "Unusual Palate" + Script Author : jakejp + Script Date : 6/4/2018 + Script Notes : + + Zone : Butcherblock Mountains + Quest Giver : Researcher Eruwun + Preceded by : None + Followed by : None +--]] + + +function Init(Quest) + AddQuestStepKill(Quest, 1, "Collect rustfiend saliva glands.", 8, 100, "I must collect rustfiend saliva glands for Researcher Eruwun.", 109, 1080055, 1081092) + AddQuestStepCompleteAction(Quest, 1, "Step1Complete") +end + +function Step1Complete(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 1, "I have collected enough saliva glands.") + + AddQuestStepChat(Quest, 2, "I must return to Researcher Eruwun.", 1, "I must collect rustfiend saliva glands for Researcher Eruwun.", 235, 1080007) + AddQuestStepCompleteAction(Quest, 2, "QuestComplete") +end + +function QuestComplete(Quest, QuestGiver, Player) + -- The following UpdateQuestStepDescription and UpdateTaskGroupDescription are not needed, parser adds them for completion in case stuff needs to be moved around + UpdateQuestStepDescription(Quest, 2, "I have spoken with Researcher Eruwun.") + UpdateQuestTaskGroupDescription(Quest, 1, "I have collected enough saliva glands.") + + UpdateQuestDescription(Quest, "I have returned the saliva glands to Researcher Eruwun and collected payment for my services.") + GiveQuestReward(Quest, Player) +end + +function Reload(Quest, QuestGiver, Player, Step) + if Step == 1 then + Step1Complete(Quest, QuestGiver, Player) + elseif Step == 2 then + QuestComplete(Quest, QuestGiver, Player) + end +end + +function Accepted(Quest, QuestGiver, Player) + -- Add dialog here for when the quest is accepted +end + +function Declined(Quest, QuestGiver, Player) + -- Add dialog here for when the quest is declined +end \ No newline at end of file diff --git a/server/Quests/Castleview/components_of_growth.lua b/server/Quests/Castleview/components_of_growth.lua new file mode 100644 index 000000000..2dc83f3ac --- /dev/null +++ b/server/Quests/Castleview/components_of_growth.lua @@ -0,0 +1,103 @@ +--[[ + Script Name : Quests/Castleview/components_of_growth.lua + Script Purpose : Handles the quest, "Components of Growth" + Script Author : Scatman + Script Date : 2009.10.02 + + Zone : Castleview Hamlet + Quest Giver: Vindain Greenfaith + Preceded by: None + Followed by: Sowing Beauty (sowing_beauty.lua) +--]] + +local ComponentsOfGrowth = 223 + +function Init(Quest) + -- Green Wisp Seeds + AddQuestStepObtainItem(Quest, 1, "I need to collect Green Wisp seeds from the Green Wisp Bushes near the Fountain of Valor in southwestern Castleview Hamlet.", 1, 100, "I need to collect a number of components. Vindain Greenfaith says they can all be found in Castleview Hamlet.", 2315, 7947) + AddQuestStep(Quest, 2, "I need to collect some blessed water from the Fountain of Valor. I can do this by examining the water flask that Vindain gave me while near the fountain.", 1, 100, "I need to collect a number of components. Vindain Greenfaith says they can all be found in Castleview Hamlet.", 980) + -- Mana-Enriched Soil + AddQuestStepObtainItem(Quest, 3, "I need to gather some enriched soil from the barrel on the northeastern corner of the armor shop.", 1, 100, "I need to collect a number of components. Vindain Greenfaith says they can all be found in Castleview Hamlet.", 342, 9305) + AddQuestStepCompleteAction(Quest, 1, "step1_complete_gotSeeds") + AddQuestStepCompleteAction(Quest, 2, "step2_complete_gotWater") + AddQuestStepCompleteAction(Quest, 3, "step3_complete_gotSoil") +end + +function Accepted(Quest, QuestGiver, Player) + FaceTarget(QuestGiver, Player) + conversation = CreateConversation() + + -- summon Water Flask + if not HasItem(Player, 15337, 1) then + SummonItem(Player, 15337, 1) + end + + PlayFlavor(QuestGiver, "voiceover/english/tutorial_revamp/vindain_greenfaith/qey_village04/quests/vindain/vindain014a.mp3", "", "", 1855493123, 719019896, Player) + AddConversationOption(conversation, "All right.") + StartConversation(conversation, QuestGiver, Player, "Once you've collected the components return to me.") +end + +function Declined(Quest, QuestGiver, Player) +end + +function step1_complete_gotSeeds(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 1, "I have collected the Green Wisp seeds.") + + if QuestIsComplete(Player, ComponentsOfGrowth) then + multiple_steps_complete(Quest, QuestGiver, Player) + end +end + +function step2_complete_gotWater(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 2, "I have collected some blessed water.") + + if QuestIsComplete(Player, ComponentsOfGrowth) then + multiple_steps_complete(Quest, QuestGiver, Player) + end +end + +function step3_complete_gotSoil(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 3, "I have collected some enriched soil.") + + if QuestIsComplete(Player, ComponentsOfGrowth) then + multiple_steps_complete(Quest, QuestGiver, Player) + end +end + +function multiple_steps_complete(Quest, QuestGiver, Player) + UpdateQuestTaskGroupDescription(Quest, 1, "I have collected the needed items.") + + AddQuestStepChat(Quest, 4, "I should return to Vindain Greenfaith, near the Fountain of Valor.", 1, "Now that I have collected the needed components I should return to Vindain Greenfaith.", 0, 2360007) + AddQuestStepCompleteAction(Quest, 4, "quest_complete") +end + +function quest_complete(Quest, QuestGiver, Player) + -- Green Wisp Seeds + while HasItem(Player, 7947) do + RemoveItem(Player, 7947) + end + + -- Water Flask + while HasItem(Player, 15337) do + RemoveItem(Player, 15337) + end + + -- Mana-Enriched Soil + while HasItem(Player, 9305) do + RemoveItem(Player, 9305) + end + UpdateQuestStepDescription(Quest, 4, "I have spoken to Vindain Greenfaith.") + UpdateQuestTaskGroupDescription(Quest, 2, "I have spoken with Vindain Greenfaith") + UpdateQuestDescription(Quest, "I have collected the needed components to carry out Vindain's plan.") + GiveQuestReward(Quest, Player) +end + +function Reload(Quest, QuestGiver, Player, Step) + if Step == 1 then + step1_complete_gotSeeds(Quest, QuestGiver, Player) + elseif Step == 2 then + step2_complete_gotWater(Quest, QuestGiver, Player) + elseif Step == 3 then + step3_complete_gotSoil(Quest, QuestGiver, Player) + end +end \ No newline at end of file diff --git a/server/Quests/Castleview/faeadaens_dinner_message.lua b/server/Quests/Castleview/faeadaens_dinner_message.lua new file mode 100644 index 000000000..695eb09d3 --- /dev/null +++ b/server/Quests/Castleview/faeadaens_dinner_message.lua @@ -0,0 +1,40 @@ +--[[ + Script Name : Quests/Castleview/faeadaens_dinner_message.lua + Script Author : Zcoretri + Script Date : 2017.06.02 11:06:41 + Script Purpose : + + Zone : Castleview + Quest Giver: Entertainer Faeadaen + Preceded by: None + Followed by: None +--]] + +function Init(Quest) + AddQuestStepChat(Quest, 1, "I must speak with Innkeeper Valean.", 1, "I need to deliver Faeadaen's message to Innkeeper Valean.", 11, 2360024) + AddQuestStepCompleteAction(Quest, 1, "QuestComplete") +end + +function Accepted(Quest, QuestGiver, Player) + +end + +function Declined(Quest, QuestGiver, Player) + +end + +function quest_complete(Quest, QuestGiver, Player) + -- The following UpdateQuestStepDescription and UpdateTaskGroupDescription are not needed, parser adds them for completion in case stuff needs to be moved around + UpdateQuestStepDescription(Quest, 1, "I gave Innkeeper Valean the message.") + UpdateQuestTaskGroupDescription(Quest, 1, "I gave Innkeeper Valean the message that Faeadaen won't be able to join him for dinner tonight.") + + UpdateQuestDescription(Quest, "I told Innkeeper Valean that Faeadaen could not make the dinner appointment. He understood that she had to work late.") + GiveQuestReward(Quest, Player) +end + +function Reload(Quest, QuestGiver, Player, Step) + if Step == 1 then + QuestComplete(Quest, QuestGiver, Player) + end +end + diff --git a/server/Quests/Castleview/sending_the_word.lua b/server/Quests/Castleview/sending_the_word.lua new file mode 100644 index 000000000..0a47635e2 --- /dev/null +++ b/server/Quests/Castleview/sending_the_word.lua @@ -0,0 +1,38 @@ +--[[ + Script Name : Quests/Castleview/sending_the_word.lua + Script Purpose : Handles the quest, "Sending the Word" + Script Author : Scatman + Script Date : 2009.10.02 + + Zone : Castleview Hamlet + Quest Giver: Vindain Greenfaith + Preceded by: The Commune (the_commune.lua) + Followed by: None +--]] + +function Init(Quest) + AddQuestStepChat(Quest, 1, "I need to travel to Oakmyst Forest and speak with Adalin Emerael.", 1, "I need to speak with Adalin Emerael.", 0, 1950004) + AddQuestStepCompleteAction(Quest, 1, "quest_complete") +end + +function Accepted(Quest, QuestGiver, Player) + FaceTarget(QuestGiver, Player) + conversation = CreateConversation() + + PlayFlavor(QuestGiver, "voiceover/english/tutorial_revamp/vindain_greenfaith/qey_village04/quests/vindain/vindain035b.mp3", "", "bow", 3207270317, 1946313496, Player) + AddConversationOption(conversation, "Thank you.") + StartConversation(conversation, QuestGiver, Player, "May Tunare be with you.") +end + +function Declined(Quest, QuestGiver, Player) +end + +function quest_complete(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 1, "I have spoken with Adalin Emerael.") + UpdateQuestTaskGroupDescription(Quest, 1, "I have spoken with Adalin Emerael.") + UpdateQuestDescription(Quest, "I have spoken with the Adalin Emerael.") + GiveQuestReward(Quest, Player) +end + +function Reload(Quest, QuestGiver, Player, Step) +end \ No newline at end of file diff --git a/server/Quests/Castleview/sowing_beauty.lua b/server/Quests/Castleview/sowing_beauty.lua new file mode 100644 index 000000000..9bc58dea2 --- /dev/null +++ b/server/Quests/Castleview/sowing_beauty.lua @@ -0,0 +1,144 @@ +--[[ + Script Name : Quests/Castleview/sowing_beauty.lua + Script Purpose : Handles the quest, "Sowing Beauty" + Script Author : Scatman + Script Date : 2009.10.02 + + Zone : Castleview Hamlet + Quest Giver: Vindain Greenfaith + Preceded by: Components of Growth (components_of_growth.lua) + Followed by: Targeting Corruption (targeting_corruption.lua) +--]] + +local SowingBeauty = 224 + +function Init(Quest) + AddQuestStep(Quest, 1, "I need to plant a Green Wisp in the planter northwest of The Fountain of Valor, just south of the inn.", 1, 100, "Vindain has asked that I take the seeds, soil, and water and plant Green Wisps at the planter boxes around Castleview Hamlet.", 0) + AddQuestStep(Quest, 2, "I need to plant a Green Wisp in the planter southwest of the inn.", 1, 100, "Vindain has asked that I take the seeds, soil, and water and plant Green Wisps at the planter boxes around Castleview Hamlet.", 0) + AddQuestStep(Quest, 3, "I need to plant a Green Wisp in the planter north of the bank on its northwestern corner.", 1, 100, "Vindain has asked that I take the seeds, soil, and water and plant Green Wisps at the planter boxes around Castleview Hamlet.", 0) + AddQuestStep(Quest, 4, "I need to plant a Green Wisp in the planter north of the bank on its northeastern corner.", 1, 100, "Vindain has asked that I take the seeds, soil, and water and plant Green Wisps at the planter boxes around Castleview Hamlet.", 0) + AddQuestStep(Quest, 5, "I need to plant a Green Wisp in the planter northwest of the scribe's shop.", 1, 100, "Vindain has asked that I take the seeds, soil, and water and plant Green Wisps at the planter boxes around Castleview Hamlet.", 0) + AddQuestStep(Quest, 6, "I need to plant a Green Wisp in the planter just west of the scribe's shop.", 1, 100, "Vindain has asked that I take the seeds, soil, and water and plant Green Wisps at the planter boxes around Castleview Hamlet.", 0) + AddQuestStep(Quest, 7, "I need to plant a Green Wisp in the planter north of the armor shop, on the level about the Fountain of Valor.", 1, 100, "Vindain has asked that I take the seeds, soil, and water and plant Green Wisps at the planter boxes around Castleview Hamlet.", 0) + AddQuestStep(Quest, 8, "I need to plant a Green Wisp in the planter on the northeast corner of the armor shop.", 1, 100, "Vindain has asked that I take the seeds, soil, and water and plant Green Wisps at the planter boxes around Castleview Hamlet.", 0) + + AddQuestStepCompleteAction(Quest, 1, "step1_complete_plantedSeed1") + AddQuestStepCompleteAction(Quest, 2, "step2_complete_plantedSeed2") + AddQuestStepCompleteAction(Quest, 3, "step3_complete_plantedSeed3") + AddQuestStepCompleteAction(Quest, 4, "step4_complete_plantedSeed4") + AddQuestStepCompleteAction(Quest, 5, "step5_complete_plantedSeed5") + AddQuestStepCompleteAction(Quest, 6, "step6_complete_plantedSeed6") + AddQuestStepCompleteAction(Quest, 7, "step7_complete_plantedSeed7") + AddQuestStepCompleteAction(Quest, 8, "step8_complete_plantedSeed8") + +end + +function Accepted(Quest, QuestGiver, Player) + FaceTarget(QuestGiver, Player) + conversation = CreateConversation() + + PlayFlavor(QuestGiver, "voiceover/english/tutorial_revamp/vindain_greenfaith/qey_village04/quests/vindain/vindain019a.mp3", "", "", 4093998099, 2772552275, Player) + AddConversationOption(conversation, "I will return.") + StartConversation(conversation, QuestGiver, Player, "Good. I cannot wait to see how they look.") +end + +function Declined(Quest, QuestGiver, Player) +end + +function step1_complete_plantedSeed1(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 1, "I have planted a Green Wisp in the planter northwest of The Fountain of Valor.") + + if QuestIsComplete(Player, SowingBeauty) then + seeds_planted(Quest, QuestGiver, Player) + end +end + +function step2_complete_plantedSeed2(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 2, "I have planted a Green Wisp in the planter southwest of the inn.") + + if QuestIsComplete(Player, SowingBeauty) then + seeds_planted(Quest, QuestGiver, Player) + end +end + +function step3_complete_plantedSeed3(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 3, "I have planted a Green Wisp in the planter north of the bank on its northwestern corner.") + + if QuestIsComplete(Player, SowingBeauty) then + seeds_planted(Quest, QuestGiver, Player) + end +end + +function step4_complete_plantedSeed4(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 4, "I have planted a Green Wisp in the planter north of the bank's northeastern corner.") + + if QuestIsComplete(Player, SowingBeauty) then + seeds_planted(Quest, QuestGiver, Player) + end +end + +function step5_complete_plantedSeed5(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 5, "I tried to plant a Green Wisp northwest of the scribe's shop but it came to life and attacked me.") + + if QuestIsComplete(Player, SowingBeauty) then + seeds_planted(Quest, QuestGiver, Player) + end +end + +function step6_complete_plantedSeed6(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 6, "I have planted a Green Wisp in the planter just west of the scribe's shop.") + + if QuestIsComplete(Player, SowingBeauty) then + seeds_planted(Quest, QuestGiver, Player) + end +end + +function step7_complete_plantedSeed7(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 7, "I have planted a Green Wisp in the planter north of the armor shop, on the level above The Found of Valor.") + + if QuestIsComplete(Player, SowingBeauty) then + seeds_planted(Quest, QuestGiver, Player) + end +end + +function step8_complete_plantedSeed8(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 8, "I have planted a Green Wisp in the planter on the northeast corner of the armor shop.") + + if QuestIsComplete(Player, SowingBeauty) then + seeds_planted(Quest, QuestGiver, Player) + end +end + +function seeds_planted(Quest, QuestGiver, Player) + UpdateQuestTaskGroupDescription(Quest, 1, "I have planted all of the seeds.") + + AddQuestStepChat(Quest, 9, "I need to return to Vindain near The Fountain of Valor.", 1, "I need to return to Vindain and let him know of the planted seeds, especially the one that went wrong.", 0, 2360007) + AddQuestStepCompleteAction(Quest, 9, "quest_complete") +end + +function quest_complete(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 9, "I have spoken with Vindain.") + UpdateQuestTaskGroupDescription(Quest, 2, "I have spoken with Vindain.") + UpdateQuestDescription(Quest, "I have planted all of the seeds. One seedling came to life and attacked me.") + GiveQuestReward(Quest, Player) +end + +function Reload(Quest, QuestGiver, Player, Step) + if Step == 1 then + step1_complete_plantedSeed1(Quest, QuestGiver, Player) + elseif Step == 2 then + step2_complete_plantedSeed2(Quest, QuestGiver, Player) + elseif Step == 3 then + step3_complete_plantedSeed3(Quest, QuestGiver, Player) + elseif Step == 4 then + step4_complete_plantedSeed4(Quest, QuestGiver, Player) + elseif Step == 5 then + step5_complete_plantedSeed5(Quest, QuestGiver, Player) + elseif Step == 6 then + step6_complete_plantedSeed6(Quest, QuestGiver, Player) + elseif Step == 7 then + step7_complete_plantedSeed7(Quest, QuestGiver, Player) + elseif Step == 8 then + step8_complete_plantedSeed8(Quest, QuestGiver, Player) + end +end \ No newline at end of file diff --git a/server/Quests/Castleview/targeting_corruption.lua b/server/Quests/Castleview/targeting_corruption.lua new file mode 100644 index 000000000..4b118b088 --- /dev/null +++ b/server/Quests/Castleview/targeting_corruption.lua @@ -0,0 +1,57 @@ +--[[ + Script Name : Quests/Castleview/targeting_corruption.lua + Script Purpose : Handles the quest, "Targeting Corruption" + Script Author : Scatman + Script Date : 2009.10.02 + + Zone : Castleview Hamlet + Quest Giver: Vindain Greenfaith + Preceded by: Sowing Beauty (sowing_beauty.lua) + Followed by: The Commune (the_commune.lua) +--]] + +function Init(Quest) + AddQuestStepChat(Quest, 1, "I need to speak with Shae'Ahla northeast of the entrance to Qeynos Harbor.", 1, "I need to speak with Shae'Ahla and learn how to cleanse the corrupted Green Wisp plant.", 0, 2360035) + AddQuestStepCompleteAction(Quest, 1, "step1_complete_talkedToShae") +end + +function Accepted(Quest, QuestGiver, Player) + FaceTarget(QuestGiver, Player) + conversation = CreateConversation() + + PlayFlavor(QuestGiver, "voiceover/english/tutorial_revamp/vindain_greenfaith/qey_village04/quests/vindain/vindain024.mp3", "", "", 4092684103, 86187879, Player) + AddConversationOption(conversation, "I will do this.") + StartConversation(conversation, QuestGiver, Player, "I thought you would say yes. Find her, cleanse the plant, and then return to me.") +end + +function Declined(Quest, QuestGiver, Player) +end + +function step1_complete_talkedToShae(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 1, "I have spoken with Shae'Ahla.") + + AddQuestStep(Quest, 2, "I need to attempt to cleanse the corrupted Green Wisp northwest of the scribe's shop.", 1, 100, "I need to speak with Shae'Ahla and learn how to cleanse the corrupted Green Wisp plant.", 0) + AddQuestStepCompleteAction(Quest, 2, "step2_complete_cleansedWisp") +end + +function step2_complete_cleansedWisp(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 2, "I have cleansed the corrupted Green Wisp northwest of the scribe's shop. A sprite attacked me after I did so.") + + AddQuestStepChat(Quest, 3, "I need to return to Vindain Greenfaith near The Fountain of Valor.", 1, "I need to speak with Shae'Ahla and learn how to cleanse the corrupted Green Wisp plant.", 0, 2360007) + AddQuestStepCompleteAction(Quest, 3, "quest_complete") +end + +function quest_complete(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 3, "I have spoken with Vindain Greenfaith.") + UpdateQuestTaskGroupDescription(Quest, 1, "I have healed the Green Wisp.") + UpdateQuestDescription(Quest, "I have cured the Green Wisp, but was attacked by a sprite when I did so.") + GiveQuestReward(Quest, Player) +end + +function Reload(Quest, QuestGiver, Player, Step) + if Step == 1 then + step1_complete_talkedToShae(Quest, QuestGiver, Player) + elseif Step == 2 then + step2_complete_cleansedWisp(Quest, QuestGiver, Player) + end +end \ No newline at end of file diff --git a/server/Quests/Castleview/the_commune.lua b/server/Quests/Castleview/the_commune.lua new file mode 100644 index 000000000..a966e7229 --- /dev/null +++ b/server/Quests/Castleview/the_commune.lua @@ -0,0 +1,48 @@ +--[[ + Script Name : Quests/Castleview/the_commune.lua + Script Purpose : Handles the quest, "The Commune" + Script Author : Scatman + Script Date : 2009.01.24 + + Zone : Castleview Hamlet + Quest Giver: Vindain Greenfaith + Preceded by: Targeting Corruption (targeting_corruption.lua) + Followed by: Sending the Word (sending_the_word.lua) +--]] + +function Init(Quest) + AddQuestStepChat(Quest, 1, "I need to find the spririt of the sprite that attacked me and speak with it.", 1, "I need to find the spirit of the fallen sprite.", 0, 2360059) + AddQuestStepCompleteAction(Quest, 1, "step1_complete_talkedToSpirit") +end + +function Accepted(Quest, QuestGiver, Player) + FaceTarget(QuestGiver, Player) + conversation = CreateConversation() + + PlayFlavor(QuestGiver, "voiceover/english/tutorial_revamp/vindain_greenfaith/qey_village04/quests/vindain/vindain030.mp3", "", "", 204706144, 262934722, Player) + AddConversationOption(conversation, "All right.") + StartConversation(conversation, QuestGiver, Player, "Good. Return to me when this is done.") +end + +function Declined(Quest, QuestGiver, Player) +end + +function step1_complete_talkedToSpirit(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 1, "I have spoken with the sprite.") + + AddQuestStepChat(Quest, 2, "I need to return to Vindain Greenfaith.", 1, "I need to find the spirit of the fallen sprite.", 0, 2360007) + AddQuestStepCompleteAction(Quest, 2, "quest_complete") +end + +function quest_complete(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 2, "I have spoken with Vindain Greenfaith.") + UpdateQuestTaskGroupDescription(Quest, 1, "I have spoken with the spirit of the fallen sprite.") + UpdateQuestDescription(Quest, "I have spoken with the fallen sprite. Though it was hard to get any concrete information, apparently something is going on in the Oakmyst Forest.") + GiveQuestReward(Quest, Player) +end + +function Reload(Quest, QuestGiver, Player, Step) + if Step == 1 then + step1_complete_talkedToSpirit(Quest, QuestGiver, Player) + end +end \ No newline at end of file diff --git a/server/Quests/Caves/ALackofInformation.lua b/server/Quests/Caves/ALackofInformation.lua new file mode 100644 index 000000000..05a76850d --- /dev/null +++ b/server/Quests/Caves/ALackofInformation.lua @@ -0,0 +1,68 @@ +--[[ + Script Name : ALackofInformation.lua + Script Purpose : Handles the quest, "A Lack of Information" + Script Author : Shatou + Script Date : 9/3/2018 + Script Notes : + + Zone : Caves + Quest Giver : + Preceded by : None + Followed by : None +--]] + + +function Init(Quest) + AddQuestStepKill(Quest, 1, "I need to search the Dustpaw gnoll camp for their orders. I should be able to find the camp somewhere through the tunnel to the west of Consul Bree.", 1, 100, "Consul Bree has asked that I help her in obtaining a recent version of the Rockpaw gnoll battle orders.", 2693, 1970017) + AddQuestStepCompleteAction(Quest, 1, "Step1Complete") +end + +function Step1Complete(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 1, "I have found the written orders of the Dustpaw gnolls in their camp.") + + AddQuestStepObtainItem(Quest, 2, "I need to read the book I found in the Dustpaw camp.", 1, 100, "Consul Bree has asked that I help her in obtaining a recent version of the Rockpaw gnoll battle orders.", 11, 1256) + AddQuestStepCompleteAction(Quest, 2, "Step2Complete") +end + +function Step2Complete(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 2, "I have attempted to read the book in the Dustpaw camp.") + + AddQuestStepKill(Quest, 3, "I need to retrieve the key to the Rockpaw cipher. Any gnoll in the Caves may have one.", 1, 100, "Consul Bree has asked that I help her in obtaining a recent version of the Rockpaw gnoll battle orders.", 185, 1970017) + AddQuestStepCompleteAction(Quest, 3, "Step3Complete") +end + +function Step3Complete(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 3, "I have found the key to the cipher.") + + AddQuestStepChat(Quest, 4, "I need to bring this information to Consul Bree.", 1, "Consul Bree has asked that I help her in obtaining a recent version of the Rockpaw gnoll battle orders.", 11, 1970004) + AddQuestStepCompleteAction(Quest, 4, "QuestComplete") +end + +function QuestComplete(Quest, QuestGiver, Player) + -- The following UpdateQuestStepDescription and UpdateTaskGroupDescription are not needed, parser adds them for completion in case stuff needs to be moved around + UpdateQuestStepDescription(Quest, 4, "I have spoken with Consul Bree.") + UpdateQuestTaskGroupDescription(Quest, 1, "I have obtained the battle orders for Consul Bree.") + + UpdateQuestDescription(Quest, "I have found the book for Consul Bree.") + GiveQuestReward(Quest, Player) +end + +function Reload(Quest, QuestGiver, Player, Step) + if Step == 1 then + Step1Complete(Quest, QuestGiver, Player) + elseif Step == 2 then + Step2Complete(Quest, QuestGiver, Player) + elseif Step == 3 then + Step3Complete(Quest, QuestGiver, Player) + elseif Step == 4 then + QuestComplete(Quest, QuestGiver, Player) + end +end + +function Accepted(Quest, QuestGiver, Player) + -- Add dialog here for when the quest is accepted +end + +function Declined(Quest, QuestGiver, Player) + -- Add dialog here for when the quest is declined +end \ No newline at end of file diff --git a/server/Quests/Caves/a_lack_of_information.lua b/server/Quests/Caves/a_lack_of_information.lua new file mode 100644 index 000000000..c80ffca68 --- /dev/null +++ b/server/Quests/Caves/a_lack_of_information.lua @@ -0,0 +1,83 @@ +--[[ + Quest Template + Script Name : Quests/Caves/a_lack_of_information.lua + Script Purpose : Handles the quest, "A Lack of Information" + Script Author : Scatman + Script Date : 2009.10.08 + + Zone : The Caves + Quest Giver : Consul Bree + Preceded by : None + Followed by : Hit Them Where it Hurts (hit_them_where_it_hurts.lua) +--]] + + +function Init(Quest) + AddQuestStep(Quest, 1, "I need to search the Dustpaw gnoll camp for their orders. I should be able to find the camp somewhere through the tunnel to the west of Consul Bree.", 1, 100, "Consul Bree has asked that I help her in obtaining a recent version of the Rockpaw gnoll battle orders.", 2693) + AddQuestStepCompleteAction(Quest, 1, "Step1_Complete_FoundOrders") +end + +function Accepted(Quest, QuestGiver, Player) + FaceTarget(QuestGiver, Player) + conversation = CreateConversation() + + PlayFlavor(QuestGiver, "voiceover/english/tutorial_revamp/consul_bree/qey_adv03_caves/quests/bree/bree_004a.mp3", "", "", 1048313312, 911223295, Player) + AddConversationOption(conversation, "All right.") + StartConversation(conversation, QuestGiver, Player, "And be wary of the Dustpaw. They didn't have the strength to beat the Rockpaw, but that doesn't mean they're docile.") +end + +function Declined(Quest, QuestGiver, Player) +end + +function Step1_Complete_FoundOrders(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 1, "I have found the written orders of the Dustpaw gnolls in their camp.") + + -- A Book of Gnollish Orders (regular item) + if not HasItem(Player, 1245) then + SummonItem(Player, 1245, 1) + end + + AddQuestStepChat(Quest, 2, "I need to read the book I found in the Dustpaw camp (Dev note: Talk to Consul Bree for now).", 1, "Consul Bree has asked that I help her in obtaining a recent version of the Rockpaw gnoll battle orders.", 0, 1970010) + AddQuestStepCompleteAction(Quest, 2, "Step2_Complete_ReadBook") +end + +function Step2_Complete_ReadBook(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 2, "I have attempted to read the book in the Dustpaw camp.") + + AddQuestStepKill(Quest, 3, "I need to retrieve the key to the Rockpaw cipher. Any gnoll in the Caves may have one.", 1, 100, "Consul Bree has asked that I help her in obtaining a recent version of the Rockpaw gnoll battle orders.", 185, 1970070, 1970035, 1970036, 1970067, 1970027, 1970044, 1970038, 1970069, 1970028, 1970042, 1970061, 1970068, 1970063, 1970041, 1970043, 1970060, 1970024) + AddQuestStepCompleteAction(Quest, 3, "Step3_Complete_GotKey") +end + +function Step3_Complete_GotKey(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 3, "I have found the key to the cipher.") + + -- A Book of Gnollish Orders (regular item) + while HasItem(Player, 1245) do + RemoveItem(Player, 1245) + end + + -- A Book of Gnollish Orders (house item) + if not HasItem(Player, 210020) then + SummonItem(Player, 210020, 1) + end + + AddQuestStepChat(Quest, 4, "I need to bring this information to Consul Bree.", 1, "Consul Bree has asked that I help her in obtaining a recent version of the Rockpaw gnoll battle orders.", 0, 1970010) + AddQuestStepCompleteAction(Quest, 4, "QuestComplete") +end + +function QuestComplete(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 4, "I have spoken with Consul Bree.") + UpdateQuestTaskGroupDescription(Quest, 1, "I have obtained the battle orders for Consul Bree.") + UpdateQuestDescription(Quest, "I have found the book for Consul Bree.") + GiveQuestReward(Quest, Player) +end + +function Reload(Quest, QuestGiver, Player, Step) + if Step == 1 then + Step1_Complete_FoundOrders(Quest, QuestGiver, Player) + elseif Step == 2 then + Step2_Complete_ReadBook(Quest, QuestGiver, Player) + elseif Step == 3 then + Step3_Complete_GotKey(Quest, QuestGiver, Player) + end +end \ No newline at end of file diff --git a/server/Quests/Caves/a_note_from_the_qeynos_quartermaster.lua b/server/Quests/Caves/a_note_from_the_qeynos_quartermaster.lua new file mode 100644 index 000000000..ac233a538 --- /dev/null +++ b/server/Quests/Caves/a_note_from_the_qeynos_quartermaster.lua @@ -0,0 +1,30 @@ +--[[ + Script Name : Quests/Antonica/a_note_from_the_qeynos_quartermaster.lua + Script Purpose : Handles the quest, "High Shaman of the Rockpaw" + Script Author : Scatman + Script Date : 2009.10.18 + + Zone : The Caves + Quest Giver: A Note from the Qeynos Quartermaster - Adventures in Antonica + Preceded by: Elements of a Ritual (elements_of_a_ritual.lua) + Followed by: +--]] + + +function Init(Quest) + --AddQuestStepKill(Quest, 1, "I need to take the summoning staff to the large skull on the level just above Consul Bree. Once there I need to place the staff in the skull to summon the High Shaman.", 1, 100, "I need to summon Zen'Durath and take his head.", 1220, 1970075) + --AddQuestStepCompleteAction(Quest, 1, "Step1_Complete_KilledZenDurath") +end + +function Declined(Quest, QuestGiver, Player) +end + +function Step1_Complete_SpokeWithEmma(Quest, QuestGiver, Player) + -- A Note from the Qeynos Quartermaster - Adventures in Antonica + while HasItem(Player, 2156) do + RemoveItem(Player, 2156) + end +end + +function Reload(Quest, QuestGiver, Player, Step) +end \ No newline at end of file diff --git a/server/Quests/Caves/an_explosive_idea.lua b/server/Quests/Caves/an_explosive_idea.lua new file mode 100644 index 000000000..82ab37904 --- /dev/null +++ b/server/Quests/Caves/an_explosive_idea.lua @@ -0,0 +1,54 @@ +--[[ + Script Name : Quests/Caves/an_explosive_idea.lua + Script Purpose : Handles the quest, "An Explosive Idea" + Script Author : Scatman + Script Date : 2009.10.18 + + Zone : The Caves + Quest Giver: Emma Torque + Preceded by: None + Followed by: Destroying the Foundation (destroying_the_foundation.lua) +--]] + + +function Init(Quest) + -- blasting powder + AddQuestStepObtainItem(Quest, 1, "I need to collect the explosive powder from 15 piles of powdered minerals.", 15, 100, "Emma Torque has asked me to collect some explosive powder for her.", 3478, 3801) + AddQuestStepCompleteAction(Quest, 1, "Step1_Complete_GotMinerals") +end + +function Accepted(Quest, QuestGiver, Player) + FaceTarget(QuestGiver, Player) + conversation = CreateConversation() + + PlayFlavor(QuestGiver, "voiceover/english/tutorial_revamp/emma_torque/qey_adv03_caves/quests/emma/emma_005a.mp3", "", "", 3292345907, 870183962, Player) + AddConversationOption(conversation, "I'll be back.") + StartConversation(conversation, QuestGiver, Player, "The explosive potential is... amazing! I can't wait!") +end + +function Declined(Quest, QuestGiver, Player) +end + +function Step1_Complete_GotMinerals(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 1, "I have collected the explosive powder from 15 piles of powdered minerals.") + + AddQuestStepChat(Quest, 2, "I need to bring this explosive powder to Emma Torque.", 1, "Emma Torque has asked me to collect some explosive powder for her.", 3478, 1970012) + AddQuestStepCompleteAction(Quest, 2, "QuestComplete") +end + +function QuestComplete(Quest, QuestGiver, Player) + -- blasting powder + while HasItem(Player, 3801) do + RemoveItem(Player, 3801) + end + UpdateQuestStepDescription(Quest, 2, "I have brought Emma Torque the explosive powder.") + UpdateQuestTaskGroupDescription(Quest, 1, "I have done Emma's task for her.") + UpdateQuestDescription(Quest, "I have collected the explosive powder that Emma required.") + GiveQuestReward(Quest, Player) +end + +function Reload(Quest, QuestGiver, Player, Step) + if Step == 1 then + Step1_Complete_GotMinerals(Quest, QuestGiver, Player) + end +end \ No newline at end of file diff --git a/server/Quests/Caves/destroying_the_foundation.lua b/server/Quests/Caves/destroying_the_foundation.lua new file mode 100644 index 000000000..b73e58527 --- /dev/null +++ b/server/Quests/Caves/destroying_the_foundation.lua @@ -0,0 +1,81 @@ +--[[ + Script Name : Quests/Caves/destroying_the_foundation.lua + Script Purpose : Handles the quest, "Destroying the Foundation" + Script Author : Scatman + Script Date : 2009.10.18 + + Zone : The Caves + Quest Giver: Emma Torque + Preceded by: An Explosive Idea (an_explosive_idea.lua) + Followed by: None +--]] + + +function Init(Quest) + AddQuestStep(Quest, 1, "I need to destroy the digging machine 'DDBD-2830-A'.", 1, 100, "Emma Torque needs me to destroy the two machines being used by the gnolls to dig through the caves and to kill the Freeportian gnome responsible for bringing them here.", 0, 3276) + AddQuestStep(Quest, 2, "I need to destroy the digging machine 'DDBD-2830-B'.", 1, 100, "Emma Torque needs me to destroy the two machines being used by the gnolls to dig through the caves and to kill the Freeportian gnome responsible for bringing them here.", 0, 3276) + AddQuestStepKill(Quest, 3, "I need to kill Fulkoir Haggleton. He will probably appear among the Rockpaw gnolls once I've destroyed his machines.", 1, 100, "Emma Torque needs me to destroy the two machines being used by the gnolls to dig through the caves and to kill the Freeportian gnome responsible for bringing them here.", 2466, 1970071) + AddQuestStepCompleteAction(Quest, 1, "Step1_Complete_MachineA") + AddQuestStepCompleteAction(Quest, 2, "Step2_Complete_MachineB") + AddQuestStepCompleteAction(Quest, 3, "Step3_Complete_KilledFulkoir") +end + +function Accepted(Quest, QuestGiver, Player) + FaceTarget(QuestGiver, Player) + conversation = CreateConversation() + + PlayFlavor(QuestGiver, "voiceover/english/tutorial_revamp/emma_torque/qey_adv03_caves/quests/emma/emma_009.mp3", "", "", 2928866225, 3555660986, Player) + AddConversationOption(conversation, "Thanks.") + StartConversation(conversation, QuestGiver, Player, "Good. The machines are likely a couple of levels up from this one. I'm sure I'll hear the explosions from here. I do hope you enjoy yourself, hah hah!") +end + +function Declined(Quest, QuestGiver, Player) +end + +function Step1_Complete_MachineA(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 1, "I have placed explosives on the digging machine 'DDBD-2830-A'.") + + if QuestIsComplete(Player, 227) then + MultipleStepsComplete(Quest, QuestGiver, Player) + end +end + +function Step2_Complete_MachineB(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 2, "I have placed explosives on the digging machine 'DDBD-2830-B'.") + + if QuestIsComplete(Player, 227) then + MultipleStepsComplete(Quest, QuestGiver, Player) + end +end + +function Step3_Complete_KilledFulkoir(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 3, "I have killed Fulkoir Haggleton.") + + if QuestIsComplete(Player, 227) then + MultipleStepsComplete(Quest, QuestGiver, Player) + end +end + +function MultipleStepsComplete(Quest, QuestGiver, Player) + UpdateQuestTaskGroupDescription(Quest, 1, "I have destroyed all of the machines and killed Fulkoir.") + + AddQuestStepChat(Quest, 4, "I need to return to Emma Torque.", 1, "Now that I have done what she needed I should return to Emma Torque.", 0, 1970012) + AddQuestStepCompleteAction(Quest, 4, "QuestComplete") +end + +function QuestComplete(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 4, "I have spoken with Emma Torque.") + UpdateQuestTaskGroupDescription(Quest, 2, "I have spoken with Emma Torque.") + UpdateQuestDescription(Quest, "I have destroyed the gnoll's digging machines and killed the gnome responsible for providing them with this technology.") + GiveQuestReward(Quest, Player) +end + +function Reload(Quest, QuestGiver, Player, Step) + if Step == 1 then + Step1_Complete_MachineA(Quest, QuestGiver, Player) + elseif Step == 2 then + Step2_Complete_MachineB(Quest, QuestGiver, Player) + elseif Step == 3 then + Step3_Complete_KilledFulkoir(Quest, QuestGiver, Player) + end +end \ No newline at end of file diff --git a/server/Quests/Caves/elements_of_a_ritual.lua b/server/Quests/Caves/elements_of_a_ritual.lua new file mode 100644 index 000000000..78e01df99 --- /dev/null +++ b/server/Quests/Caves/elements_of_a_ritual.lua @@ -0,0 +1,99 @@ +--[[ + Script Name : Quests/Caves/elements_of_a_ritual.lua + Script Purpose : Handles the quest, "Elements of a Ritual" + Script Author : Scatman + Script Date : 2009.10.08 + + Zone : The Caves + Quest Giver: Consul Bree + Preceded by: Hit Them Where it Hurts (hit_them_where_it_hurts.lua) + Followed by: High Shaman of the Rockpaw (high_shaman_of_the_rockpaw.lua) +--]] + + +function Init(Quest) + AddQuestStepChat(Quest, 1, "I need to speak with Emma Torque.", 1, "I need to acquire the object necessary to get a river stone from a river behemoth from Emma Torque.", 0, 1970012) + AddQuestStepCompleteAction(Quest, 1, "Step1_Complete_SpokeWithEmma") +end + +function Accepted(Quest, QuestGiver, Player) + FaceTarget(QuestGiver, Player) + conversation = CreateConversation() + + PlayFlavor(QuestGiver, "voiceover/english/tutorial_revamp/consul_bree/qey_adv03_caves/quests/bree/bree_012a.mp3", "", "", 2607411936, 2666860100, Player) + AddConversationOption(conversation, "All right.") + StartConversation(conversation, QuestGiver, Player, "Speak with Emma about the river stone. I believe she has been working on something.") +end + +function Declined(Quest, QuestGiver, Player) +end + +function Step1_Complete_SpokeWithEmma(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 1, "I have spoken with Emma Torque.") + UpdateQuestTaskGroupDescription(Quest, 1, "I have acquired the Drawing Ray.") + + AddQuestStepKill(Quest, 2, "I need to collect five crown scales from albino pythons here in the Caves.", 5, 100, "I need to collect the items necessary for the summoning ritual.", 84, 1970013) + AddQuestStepObtainItem(Quest, 3, "I need to collect incantation dust from the Rockpaw camps.", 1, 100, "I need to collect the items necessary for the summoning ritual.", 10, 7103) + AddQuestStepObtainItem(Quest, 4, "I need to collect a river stone from a river behemoth. I will need to use Emma's device on the remains of one to get the stone.", 1, 100, "I need to collect the items necessary for the summoning ritual.", 769, 10068) + AddQuestStepCompleteAction(Quest, 2, "Step2_Complete_KilledSnakes") + AddQuestStepCompleteAction(Quest, 3, "Step3_Complete_GotDust") + AddQuestStepCompleteAction(Quest, 4, "Step4_Complete_GotStone") +end + +function Step2_Complete_KilledSnakes(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 2, "I have collected five crown scales.") + + if QuestIsComplete(Player, 225) then + MultipleStepsComplete(Quest, QuestGiver, Player) + end +end + +function Step3_Complete_GotDust(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 3, "I have collected incantation dust from the Rockpaw camps.") + + if QuestIsComplete(Player, 225) then + MultipleStepsComplete(Quest, QuestGiver, Player) + end +end + +function Step4_Complete_GotStone(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 4, "I have collected a river stone.") + + if QuestIsComplete(Player, 225) then + MultipleStepsComplete(Quest, QuestGiver, Player) + end +end + +function MultipleStepsComplete(Quest, QuestGiver, Player) + UpdateQuestTaskGroupDescription(Quest, 2, "I have collected the necessary items.") + + AddQuestStepChat(Quest, 5, "I need to return to Consul Bree.", 1, "I need to return to Consul Bree now that I have collected all of the needed items.", 0, 1970010) + AddQuestStepCompleteAction(Quest, 5, "QuestComplete") +end + +function QuestComplete(Quest, QuestGiver, Player) + -- Incantation Dust + while HasItem(Player, 7103) do + RemoveItem(Player, 7103) + end + -- river stone + while HasItem(Player, 10068) do + RemoveItem(Player, 10068) + end + UpdateQuestStepDescription(Quest, 5, "I have spoken with Consul Bree.") + UpdateQuestTaskGroupDescription(Quest, 3, "I have spoken with Consul Bree.") + UpdateQuestDescription(Quest, "Now that I have gotten all of the items required for the ritual, I will be able to summon Zen'Durath.") + GiveQuestReward(Quest, Player) +end + +function Reload(Quest, QuestGiver, Player, Step) + if Step == 1 then + Step1_Complete_SpokeWithEmma(Quest, QuestGiver, Player) + elseif Step == 2 then + Step2_Complete_KilledSnakes(Quest, QuestGiver, Player) + elseif Step == 3 then + Step3_Complete_GotDust(Quest, QuestGiver, Player) + elseif Step == 4 then + Step4_Complete_GotStone(Quest, QuestGiver, Player) + end +end \ No newline at end of file diff --git a/server/Quests/Caves/high_shaman_of_the_rockpaw.lua b/server/Quests/Caves/high_shaman_of_the_rockpaw.lua new file mode 100644 index 000000000..9715c187d --- /dev/null +++ b/server/Quests/Caves/high_shaman_of_the_rockpaw.lua @@ -0,0 +1,68 @@ +--[[ + Script Name : Quests/Caves/high_shaman_of_the_rockpaw.lua + Script Purpose : Handles the quest, "High Shaman of the Rockpaw" + Script Author : Scatman + Script Date : 2009.10.18 + + Zone : The Caves + Quest Giver: Consul Bree + Preceded by: Elements of a Ritual (elements_of_a_ritual.lua) + Followed by: +--]] + + +function Init(Quest) + AddQuestStepObtainItem(Quest, 1, "I need to take the summoning staff to the large skull on the level just above Consul Bree. Once there I need to place the staff in the skull to summon the High Shaman.", 1, 100, "I need to summon Zen'Durath and take his head.", 1220, 6922) + AddQuestStepCompleteAction(Quest, 1, "Step1_Complete_KilledZenDurath") +end + +function Accepted(Quest, QuestGiver, Player) + FaceTarget(QuestGiver, Player) + conversation = CreateConversation() + + -- summoning staff + if not HasItem(Player, 11850) then + SummonItem(Player, 11850, 1) + end + + PlayFlavor(QuestGiver, "voiceover/english/tutorial_revamp/consul_bree/qey_adv03_caves/quests/bree/bree_015a.mp3", "", "", 3288361383, 1793249646, Player) + AddConversationOption(conversation, "I understand.") + StartConversation(conversation, QuestGiver, Player, "And be careful. Zen'Durath will not be pleased to see you.") +end + +function Declined(Quest, QuestGiver, Player) +end + +function Step1_Complete_KilledZenDurath(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 2, "I have slain High Shaman Zen'Durath.") + + AddQuestStepChat(Quest, 2, "I need to return to Consul Bree.", 1, "I need to summon Zen'Durath and take his head.", 0, 1970010) + AddQuestStepCompleteAction(Quest, 2, "QuestComplete") +end + +function QuestComplete(Quest, QuestGiver, Player) + -- High Shaman's head + while HasItem(Player, 6922) do + RemoveItem(Player, 6922) + end + UpdateQuestStepDescription(Quest, 2, "I have spoken with Consul Bree.") + UpdateQuestTaskGroupDescription(Quest, 1, "I have slain Zen'Durath.") + UpdateQuestDescription(Quest, "I have slain Zen'Durath.") + + local Emma = GetSpawn(Player, 1970012) + local Delsun = GetSpawn(Player, 1970011) + if Emma ~= nil then + PlayFlavor(Emma, "voiceover/english/tutorial_revamp/emma_torque/qey_adv03_caves/qst_emma_quest_series_done_564c6b5f.mp3", "Great job!", "cheer", 2428113896, 1601999227, Player) + end + if Delsun ~= nil then + PlayFlavor(Delsun, "voiceover/english/tutorial_revamp/lieutenant_delsun/qey_adv03_caves/qst_delsun_quest_series_done_4827769e.mp3", "You make Qeynos proud, soldier.", "salute", 523058466, 3752111752, Player) + end + + GiveQuestReward(Quest, Player) +end + +function Reload(Quest, QuestGiver, Player, Step) + if Step == 1 then + Step1_Complete_KilledZenDurath(Quest, QuestGiver, Player) + end +end \ No newline at end of file diff --git a/server/Quests/Caves/hit_them_where_it_hurts.lua b/server/Quests/Caves/hit_them_where_it_hurts.lua new file mode 100644 index 000000000..3b714e208 --- /dev/null +++ b/server/Quests/Caves/hit_them_where_it_hurts.lua @@ -0,0 +1,79 @@ +--[[ + Quest Template + Script Name : Quests/Caves/hit_them_where_it_hurts.lua + Script Purpose : Handles the quest, "Hit Them Where it Hurts" + Script Author : Scatman + Script Date : 2009.10.08 + + Zone : The Caves + Quest Giver : Consul Bree + Preceded by : A Lack of Information (a_lack_of_information.lua) + Followed by : Elements of a Ritual (elements_of_a_ritual.lua) +--]] + + +function Init(Quest) + AddQuestStep(Quest, 1, "I need to destroy the forge in the armory.", 1, 100, "Consul Bree has asked for my help in disrupting the gnoll operations here in the Caves. I can help by crippling their ability to craft armor and destroying some of their machine parts.", 12) + AddQuestStep(Quest, 2, "I need to destroy some of the mechanical parts stashed in the Caves.", 5, 100, "Consul Bree has asked for my help in disrupting the gnoll operations here in the Caves. I can help by crippling their ability to craft armor and destroying some of their machine parts.", 1041) + AddQuestStepCompleteAction(Quest, 1, "Step1_Complete_DestroyedForge") + AddQuestStepCompleteAction(Quest, 2, "Step2_Complete_DestroyedParts") +end + +function Accepted(Quest, QuestGiver, Player) + FaceTarget(QuestGiver, Player) + conversation = CreateConversation() + + PlayFlavor(QuestGiver, "voiceover/english/tutorial_revamp/consul_bree/qey_adv03_caves/quests/bree/bree_007a.mp3", "", "", 1177533650, 1696169122, Player) + AddConversationOption(conversation, "You're welcome.") + StartConversation(conversation, QuestGiver, Player, "Thank you. The gnolls may not recover from this.") + + -- 7 explosives + for i = 1, 6, 1 do + SummonItem(Player, 6052, 1) + end +end + +function Declined(Quest, QuestGiver, Player) +end + +function Step1_Complete_DestroyedForge(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 1, "I have destroyed the forge.") + + if QuestIsComplete(Player, 224) then + MultipleStepsComplete(Quest, QuestGiver, Player) + end +end + +function Step2_Complete_DestroyedParts(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 2, "I have destroyed some of the mechanical parts stashed in the Caves.") + + if QuestIsComplete(Player, 224) then + MultipleStepsComplete(Quest, QuestGiver, Player) + end +end + +function MultipleStepsComplete(Quest, QuestGiver, Player) + UpdateQuestTaskGroupDescription(Quest, 1, "I have done as Consul Bree asked.") + + AddQuestStepChat(Quest, 3, "I need to return to Consul Bree.", 1, "Now that I have helped Consul Bree I should return to her.", 0, 1970010) + AddQuestStepCompleteAction(Quest, 3, "QuestComplete") +end + +function QuestComplete(Quest, QuestGiver, Player) + -- explosives + while HasItem(Player, 6052) do + RemoveItem(Player, 6052) + end + UpdateQuestStepDescription(Quest, 3, "I have spoken with Consul Bree.") + UpdateQuestTaskGroupDescription(Quest, 2, "I have spoken with Consul Bree.") + UpdateQuestDescription(Quest, "I have interrupted work in the armory and destroyed a number of machine components for Bree.") + GiveQuestReward(Quest, Player) +end + +function Reload(Quest, QuestGiver, Player, Step) + if Step == 1 then + Step1_Complete_DestroyedForge(Quest, QuestGiver, Player) + elseif Step == 2 then + Step2_Complete_DestroyedParts(Quest, QuestGiver, Player) + end +end \ No newline at end of file diff --git a/server/Quests/Caves/studies_in_speciation.lua b/server/Quests/Caves/studies_in_speciation.lua new file mode 100644 index 000000000..40894710b --- /dev/null +++ b/server/Quests/Caves/studies_in_speciation.lua @@ -0,0 +1,81 @@ +--[[ + Quest Template + Script Name : Quests/Caves/studies_in_speciation.lua + Script Purpose : Handles the quest, "Studies in Speciation" + Script Author : Scatman + Script Date : 2009.10.18 + + Zone : The Caves + Quest Giver : Kahla Ulno + Preceded by : None + Followed by : None +--]] + + +function Init(Quest) + AddQuestStepKill(Quest, 1, "I need four cave spider bodies.", 4, 100, "I need to collect some samples of the creatures in the Caves for Kahla.", 611, 1970019) + AddQuestStepKill(Quest, 2, "I need four cave serpent bodies.", 4, 100, "I need to collect some samples of the creatures in the Caves for Kahla.", 611, 1970005) + AddQuestStepKill(Quest, 3, "I need four cave bat bodies.", 4, 100, "I need to collect some samples of the creatures in the Caves for Kahla.", 611, 1970022, 1970037) + AddQuestStepCompleteAction(Quest, 1, "Step1_Complete_KilledSpiders") + AddQuestStepCompleteAction(Quest, 2, "Step2_Complete_KilledSerpents") + AddQuestStepCompleteAction(Quest, 3, "Step3_Complete_KilledBats") +end + +function Accepted(Quest, QuestGiver, Player) + FaceTarget(QuestGiver, Player) + conversation = CreateConversation() + + AddConversationOption(conversation, "Thanks.") + StartConversation(conversation, QuestGiver, Player, "Good. The machines are likely a couple of levels up from this one. I'm sure I'll hear the explosions from here. I do hope you enjoy yourself, hah hah!") +end + +function Declined(Quest, QuestGiver, Player) +end + +function Step1_Complete_KilledSpiders(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 1, "I have collected the cave spider bodies.") + + if QuestIsComplete(Player, 228) then + MultipleStepsComplete(Quest, QuestGiver, Player) + end +end + +function Step2_Complete_KilledSerpents(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 2, "I have collected the cave serpent bodies.") + + if QuestIsComplete(Player, 228) then + MultipleStepsComplete(Quest, QuestGiver, Player) + end +end + +function Step3_Complete_KilledBats(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 3, "I have collected the cave bat bodies.") + + if QuestIsComplete(Player, 228) then + MultipleStepsComplete(Quest, QuestGiver, Player) + end +end + +function MultipleStepsComplete(Quest, QuestGiver, Player) + UpdateQuestTaskGroupDescription(Quest, 1, "I have collected the samples for Kahla.") + + AddQuestStepChat(Quest, 4, "I must speak with Kahla.", 1, "I need to bring these samples back to Kahla.", 0, 1970004) + AddQuestStepCompleteAction(Quest, 4, "QuestComplete") +end + +function QuestComplete(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 4, "I have spoken with Kahla.") + UpdateQuestTaskGroupDescription(Quest, 2, "I have given the samples to Kahla.") + UpdateQuestDescription(Quest, "I have given Kahla the samples she asked for. She thanked me for my help.") + GiveQuestReward(Quest, Player) +end + +function Reload(Quest, QuestGiver, Player, Step) + if Step == 1 then + Step1_Complete_KilledSpiders(Quest, QuestGiver, Player) + elseif Step == 2 then + Step2_Complete_KilledSerpents(Quest, QuestGiver, Player) + elseif Step == 3 then + Step3_Complete_KilledBats(Quest, QuestGiver, Player) + end +end \ No newline at end of file diff --git a/server/Quests/Caves/the_gnollish_menace.lua b/server/Quests/Caves/the_gnollish_menace.lua new file mode 100644 index 000000000..2d218dde4 --- /dev/null +++ b/server/Quests/Caves/the_gnollish_menace.lua @@ -0,0 +1,93 @@ +--[[ + Script Name : Quests/Caves/the_gnollish_menace.lua + Script Purpose : Handles the quest, "The Gnollish Menace" + Script Author : Scatman + Script Date : 2009.10.18 + + Zone : The Caves + Quest Giver: Lieutenant Delsun + Preceded by: None + Followed by: None +--]] + + +function Init(Quest) + AddQuestStepKill(Quest, 1, "I need to kill thirty gnolls within the Caves.", 30, 100, "Lieutenant Delsun has tasked me with taking out a large portion of the gnolls and their allies here in the Caves.", 1220, 1970064, 1970046, 1970065, 1970073, 1970049, 1970047, 1970067, 1970070, 1970035, 1970036, 1970038, 1970027, 1970044, 1970028, 1970069, 1970063, 1970042, 1970061, 1970068, 1970060, 1970024, 1970041, 1970043, 1970072, 1970066, 1970045, 1970052, 1970055, 1970075, 1970014) + AddQuestStepKill(Quest, 2, "I need to kill two Dustpaw armorers.", 2, 100, "Lieutenant Delsun has tasked me with taking out a large portion of the gnolls and their allies here in the Caves.", 1544, 1970067, 1970070, 1970035, 1970036) + AddQuestStepKill(Quest, 3, "I need to kill five alabaster behemoths.", 5, 100, "Lieutenant Delsun has tasked me with taking out a large portion of the gnolls and their allies here in the Caves.", 193, 1970057, 1970051, 1970058, 1970026, 1970021) + AddQuestStepKill(Quest, 4, "I need to kill five Rockpaw guards.", 5, 100, "Lieutenant Delsun has tasked me with taking out a large portion of the gnolls and their allies here in the Caves.", 611, 1970064, 1970046, 1970065, 1970073, 1970049, 1970047) + AddQuestStepCompleteAction(Quest, 1, "Step1_Complete_KilledGnolls") + AddQuestStepCompleteAction(Quest, 2, "Step2_Complete_KilledArmorers") + AddQuestStepCompleteAction(Quest, 3, "Step3_Complete_KilledBehemoths") + AddQuestStepCompleteAction(Quest, 4, "Step4_Complete_KilledGuards") +end + +function Accepted(Quest, QuestGiver, Player) + FaceTarget(QuestGiver, Player) + conversation = CreateConversation() + + PlayFlavor(QuestGiver, "voiceover/english/tutorial_revamp/lieutenant_delsun/qey_adv03_caves/quests/delsun/delsun_002a.mp3", "", "", 1211118613, 1660657141, Player) + AddConversationOption(conversation, "All right.") + StartConversation(conversation,QuestGiver, Player, "Once you've done this return to me. The city of Qeynos will want to thank you properly.") +end + +function Declined(Quest, QuestGiver, Player) +end + +function Step1_Complete_KilledGnolls(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 1, "I have killed thirty gnolls.") + + if QuestIsComplete(Player, 229) then + MultipleStepsComplete(Quest, QuestGiver, Player) + end +end + +function Step2_Complete_KilledArmorers(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 2, "I have killed two Dustpaw armorers.") + + if QuestIsComplete(Player, 229) then + MultipleStepsComplete(Quest, QuestGiver, Player) + end +end + +function Step3_Complete_KilledBehemoths(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 3, "I have killed five alabaster behemoths.") + + if QuestIsComplete(Player, 229) then + MultipleStepsComplete(Quest, QuestGiver, Player) + end +end + +function Step4_Complete_KilledGuards(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 4, "I have killed five Rockpaw guards.") + + if QuestIsComplete(Player, 229) then + MultipleStepsComplete(Quest, QuestGiver, Player) + end +end + +function MultipleStepsComplete(Quest, QuestGiver, Player) + UpdateQuestTaskGroupDescription(Quest, 1, "I have done what Lieutenant Delsun asked.") + + AddQuestStepChat(Quest, 5, "I need to return to Lieutenant Delsun.", 1, "Now that the task is complete I should return to Lieutenant Delsun.", 0, 1970011) + AddQuestStepCompleteAction(Quest, 5, "QuestComplete") +end + +function QuestComplete(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 5, "I have spoken with Lieutenant Delsun.") + UpdateQuestTaskGroupDescription(Quest, 2, "I have spoken with Lieutenant Delsun.") + UpdateQuestDescription(Quest, "I have done what Lieutenant Delsun asked of me.") + GiveQuestReward(Quest, Player) +end + +function Reload(Quest, QuestGiver, Player, Step) + if Step == 1 then + Step1_Complete_KilledGnolls(Quest, QuestGiver, Player) + elseif Step == 2 then + Step2_Complete_KilledArmorers(Quest, QuestGiver, Player) + elseif Step == 3 then + Step3_Complete_KilledBehemoths(Quest, QuestGiver, Player) + elseif Step == 4 then + Step4_Complete_KilledGuards(Quest, QuestGiver, Player) + end +end \ No newline at end of file diff --git a/server/Quests/Commonlands/AFriendinNeed.lua b/server/Quests/Commonlands/AFriendinNeed.lua new file mode 100644 index 000000000..1f15d3552 --- /dev/null +++ b/server/Quests/Commonlands/AFriendinNeed.lua @@ -0,0 +1,32 @@ +--[[ + Script Name : Quests/Commonlands/AFriendinNeed.lua + Script Author : neatz09 + Script Date : 2018.12.30 10:12:34 + Script Purpose : + + Zone : Commonlands + Quest Giver: + Preceded by: None + Followed by: +--]] + +function Init(Quest) + +end + +function Accepted(Quest, QuestGiver, Player) + +end + +function Declined(Quest, QuestGiver, Player) + +end + +function quest_complete(Quest, QuestGiver, Player) + +end + +function Reload(Quest, QuestGiver, Player, Step) + +end + diff --git a/server/Quests/Commonlands/AHardMantoPlease.lua b/server/Quests/Commonlands/AHardMantoPlease.lua new file mode 100644 index 000000000..6ed4e8366 --- /dev/null +++ b/server/Quests/Commonlands/AHardMantoPlease.lua @@ -0,0 +1,32 @@ +--[[ + Script Name : Quests/Commonlands/AHardMantoPlease.lua + Script Author : neatz09 + Script Date : 2018.12.30 10:12:41 + Script Purpose : + + Zone : Commonlands + Quest Giver: + Preceded by: None + Followed by: +--]] + +function Init(Quest) + +end + +function Accepted(Quest, QuestGiver, Player) + +end + +function Declined(Quest, QuestGiver, Player) + +end + +function quest_complete(Quest, QuestGiver, Player) + +end + +function Reload(Quest, QuestGiver, Player, Step) + +end + diff --git a/server/Quests/Commonlands/AHuntersTool.lua b/server/Quests/Commonlands/AHuntersTool.lua new file mode 100644 index 000000000..e6bcc4fa6 --- /dev/null +++ b/server/Quests/Commonlands/AHuntersTool.lua @@ -0,0 +1,32 @@ +--[[ + Script Name : Quests/Commonlands/AHuntersTool.lua + Script Author : neatz09 + Script Date : 2018.12.30 10:12:12 + Script Purpose : + + Zone : Commonlands + Quest Giver: + Preceded by: None + Followed by: +--]] + +function Init(Quest) + +end + +function Accepted(Quest, QuestGiver, Player) + +end + +function Declined(Quest, QuestGiver, Player) + +end + +function quest_complete(Quest, QuestGiver, Player) + +end + +function Reload(Quest, QuestGiver, Player, Step) + +end + diff --git a/server/Quests/Commonlands/ALostPackage.lua b/server/Quests/Commonlands/ALostPackage.lua new file mode 100644 index 000000000..cd3f9cdf3 --- /dev/null +++ b/server/Quests/Commonlands/ALostPackage.lua @@ -0,0 +1,32 @@ +--[[ + Script Name : Quests/Commonlands/ALostPackage.lua + Script Author : neatz09 + Script Date : 2018.12.30 10:12:21 + Script Purpose : + + Zone : Commonlands + Quest Giver: + Preceded by: None + Followed by: +--]] + +function Init(Quest) + +end + +function Accepted(Quest, QuestGiver, Player) + +end + +function Declined(Quest, QuestGiver, Player) + +end + +function quest_complete(Quest, QuestGiver, Player) + +end + +function Reload(Quest, QuestGiver, Player, Step) + +end + diff --git a/server/Quests/Commonlands/AMeetingInterrupted.lua b/server/Quests/Commonlands/AMeetingInterrupted.lua new file mode 100644 index 000000000..bb5eb5902 --- /dev/null +++ b/server/Quests/Commonlands/AMeetingInterrupted.lua @@ -0,0 +1,32 @@ +--[[ + Script Name : Quests/Commonlands/AMeetingInterrupted.lua + Script Author : neatz09 + Script Date : 2018.12.30 10:12:44 + Script Purpose : + + Zone : Commonlands + Quest Giver: + Preceded by: None + Followed by: +--]] + +function Init(Quest) + +end + +function Accepted(Quest, QuestGiver, Player) + +end + +function Declined(Quest, QuestGiver, Player) + +end + +function quest_complete(Quest, QuestGiver, Player) + +end + +function Reload(Quest, QuestGiver, Player, Step) + +end + diff --git a/server/Quests/Commonlands/ARatDivided.lua b/server/Quests/Commonlands/ARatDivided.lua new file mode 100644 index 000000000..122679dd0 --- /dev/null +++ b/server/Quests/Commonlands/ARatDivided.lua @@ -0,0 +1,32 @@ +--[[ + Script Name : Quests/Commonlands/ARatDivided.lua + Script Author : neatz09 + Script Date : 2018.12.30 10:12:04 + Script Purpose : + + Zone : Commonlands + Quest Giver: + Preceded by: None + Followed by: +--]] + +function Init(Quest) + +end + +function Accepted(Quest, QuestGiver, Player) + +end + +function Declined(Quest, QuestGiver, Player) + +end + +function quest_complete(Quest, QuestGiver, Player) + +end + +function Reload(Quest, QuestGiver, Player, Step) + +end + diff --git a/server/Quests/Commonlands/AnAcquisition.lua b/server/Quests/Commonlands/AnAcquisition.lua new file mode 100644 index 000000000..9ecd0480f --- /dev/null +++ b/server/Quests/Commonlands/AnAcquisition.lua @@ -0,0 +1,32 @@ +--[[ + Script Name : Quests/Commonlands/AnAcquisition.lua + Script Author : neatz09 + Script Date : 2018.12.30 10:12:37 + Script Purpose : + + Zone : Commonlands + Quest Giver: + Preceded by: None + Followed by: +--]] + +function Init(Quest) + +end + +function Accepted(Quest, QuestGiver, Player) + +end + +function Declined(Quest, QuestGiver, Player) + +end + +function quest_complete(Quest, QuestGiver, Player) + +end + +function Reload(Quest, QuestGiver, Player, Step) + +end + diff --git a/server/Quests/Commonlands/ArmadilloHides.lua b/server/Quests/Commonlands/ArmadilloHides.lua new file mode 100644 index 000000000..cff5988cd --- /dev/null +++ b/server/Quests/Commonlands/ArmadilloHides.lua @@ -0,0 +1,32 @@ +--[[ + Script Name : Quests/Commonlands/ArmadilloHides.lua + Script Author : neatz09 + Script Date : 2018.12.30 10:12:10 + Script Purpose : + + Zone : Commonlands + Quest Giver: + Preceded by: None + Followed by: +--]] + +function Init(Quest) + +end + +function Accepted(Quest, QuestGiver, Player) + +end + +function Declined(Quest, QuestGiver, Player) + +end + +function quest_complete(Quest, QuestGiver, Player) + +end + +function Reload(Quest, QuestGiver, Player, Step) + +end + diff --git a/server/Quests/Commonlands/BanditSashBounty.lua b/server/Quests/Commonlands/BanditSashBounty.lua new file mode 100644 index 000000000..0e9e0a32f --- /dev/null +++ b/server/Quests/Commonlands/BanditSashBounty.lua @@ -0,0 +1,32 @@ +--[[ + Script Name : Quests/Commonlands/BanditSashBounty.lua + Script Author : neatz09 + Script Date : 2018.12.30 10:12:15 + Script Purpose : + + Zone : Commonlands + Quest Giver: + Preceded by: None + Followed by: +--]] + +function Init(Quest) + +end + +function Accepted(Quest, QuestGiver, Player) + +end + +function Declined(Quest, QuestGiver, Player) + +end + +function quest_complete(Quest, QuestGiver, Player) + +end + +function Reload(Quest, QuestGiver, Player, Step) + +end + diff --git a/server/Quests/Commonlands/BeetleShells.lua b/server/Quests/Commonlands/BeetleShells.lua new file mode 100644 index 000000000..4d43c48f8 --- /dev/null +++ b/server/Quests/Commonlands/BeetleShells.lua @@ -0,0 +1,32 @@ +--[[ + Script Name : Quests/Commonlands/BeetleShells.lua + Script Author : neatz09 + Script Date : 2018.12.30 10:12:22 + Script Purpose : + + Zone : Commonlands + Quest Giver: + Preceded by: None + Followed by: +--]] + +function Init(Quest) + +end + +function Accepted(Quest, QuestGiver, Player) + +end + +function Declined(Quest, QuestGiver, Player) + +end + +function quest_complete(Quest, QuestGiver, Player) + +end + +function Reload(Quest, QuestGiver, Player, Step) + +end + diff --git a/server/Quests/Commonlands/BigGameHunting.lua b/server/Quests/Commonlands/BigGameHunting.lua new file mode 100644 index 000000000..d76a84b40 --- /dev/null +++ b/server/Quests/Commonlands/BigGameHunting.lua @@ -0,0 +1,32 @@ +--[[ + Script Name : Quests/Commonlands/BigGameHunting.lua + Script Author : neatz09 + Script Date : 2018.12.30 10:12:27 + Script Purpose : + + Zone : Commonlands + Quest Giver: + Preceded by: None + Followed by: +--]] + +function Init(Quest) + +end + +function Accepted(Quest, QuestGiver, Player) + +end + +function Declined(Quest, QuestGiver, Player) + +end + +function quest_complete(Quest, QuestGiver, Player) + +end + +function Reload(Quest, QuestGiver, Player, Step) + +end + diff --git a/server/Quests/Commonlands/BloodskullDisruption.lua b/server/Quests/Commonlands/BloodskullDisruption.lua new file mode 100644 index 000000000..beb635063 --- /dev/null +++ b/server/Quests/Commonlands/BloodskullDisruption.lua @@ -0,0 +1,32 @@ +--[[ + Script Name : Quests/Commonlands/BloodskullDisruption.lua + Script Author : neatz09 + Script Date : 2018.12.30 10:12:32 + Script Purpose : + + Zone : Commonlands + Quest Giver: + Preceded by: None + Followed by: +--]] + +function Init(Quest) + +end + +function Accepted(Quest, QuestGiver, Player) + +end + +function Declined(Quest, QuestGiver, Player) + +end + +function quest_complete(Quest, QuestGiver, Player) + +end + +function Reload(Quest, QuestGiver, Player, Step) + +end + diff --git a/server/Quests/Commonlands/BloodskullIntentions.lua b/server/Quests/Commonlands/BloodskullIntentions.lua new file mode 100644 index 000000000..0d56516b2 --- /dev/null +++ b/server/Quests/Commonlands/BloodskullIntentions.lua @@ -0,0 +1,32 @@ +--[[ + Script Name : Quests/Commonlands/BloodskullIntentions.lua + Script Author : neatz09 + Script Date : 2018.12.30 10:12:37 + Script Purpose : + + Zone : Commonlands + Quest Giver: + Preceded by: None + Followed by: +--]] + +function Init(Quest) + +end + +function Accepted(Quest, QuestGiver, Player) + +end + +function Declined(Quest, QuestGiver, Player) + +end + +function quest_complete(Quest, QuestGiver, Player) + +end + +function Reload(Quest, QuestGiver, Player, Step) + +end + diff --git a/server/Quests/Commonlands/BrokenEquipment.lua b/server/Quests/Commonlands/BrokenEquipment.lua new file mode 100644 index 000000000..93ba29800 --- /dev/null +++ b/server/Quests/Commonlands/BrokenEquipment.lua @@ -0,0 +1,32 @@ +--[[ + Script Name : Quests/Commonlands/BrokenEquipment.lua + Script Author : neatz09 + Script Date : 2018.12.30 10:12:42 + Script Purpose : + + Zone : Commonlands + Quest Giver: + Preceded by: None + Followed by: +--]] + +function Init(Quest) + +end + +function Accepted(Quest, QuestGiver, Player) + +end + +function Declined(Quest, QuestGiver, Player) + +end + +function quest_complete(Quest, QuestGiver, Player) + +end + +function Reload(Quest, QuestGiver, Player, Step) + +end + diff --git a/server/Quests/Commonlands/CantWeAllJustGetAlong.lua b/server/Quests/Commonlands/CantWeAllJustGetAlong.lua new file mode 100644 index 000000000..0f72a8822 --- /dev/null +++ b/server/Quests/Commonlands/CantWeAllJustGetAlong.lua @@ -0,0 +1,32 @@ +--[[ + Script Name : Quests/Commonlands/CantWeAllJustGetAlong.lua + Script Author : neatz09 + Script Date : 2018.12.30 10:12:48 + Script Purpose : + + Zone : Commonlands + Quest Giver: + Preceded by: None + Followed by: +--]] + +function Init(Quest) + +end + +function Accepted(Quest, QuestGiver, Player) + +end + +function Declined(Quest, QuestGiver, Player) + +end + +function quest_complete(Quest, QuestGiver, Player) + +end + +function Reload(Quest, QuestGiver, Player, Step) + +end + diff --git a/server/Quests/Commonlands/CaptainFeralis.lua b/server/Quests/Commonlands/CaptainFeralis.lua new file mode 100644 index 000000000..67a2a5ade --- /dev/null +++ b/server/Quests/Commonlands/CaptainFeralis.lua @@ -0,0 +1,32 @@ +--[[ + Script Name : Quests/Commonlands/CaptainFeralis.lua + Script Author : neatz09 + Script Date : 2018.12.30 10:12:52 + Script Purpose : + + Zone : Commonlands + Quest Giver: + Preceded by: None + Followed by: +--]] + +function Init(Quest) + +end + +function Accepted(Quest, QuestGiver, Player) + +end + +function Declined(Quest, QuestGiver, Player) + +end + +function quest_complete(Quest, QuestGiver, Player) + +end + +function Reload(Quest, QuestGiver, Player, Step) + +end + diff --git a/server/Quests/Commonlands/CollectingOnWhatIsEarned.lua b/server/Quests/Commonlands/CollectingOnWhatIsEarned.lua new file mode 100644 index 000000000..2883c2d6f --- /dev/null +++ b/server/Quests/Commonlands/CollectingOnWhatIsEarned.lua @@ -0,0 +1,32 @@ +--[[ + Script Name : Quests/Commonlands/CollectingOnWhatIsEarned.lua + Script Author : neatz09 + Script Date : 2018.12.30 10:12:57 + Script Purpose : + + Zone : Commonlands + Quest Giver: + Preceded by: None + Followed by: +--]] + +function Init(Quest) + +end + +function Accepted(Quest, QuestGiver, Player) + +end + +function Declined(Quest, QuestGiver, Player) + +end + +function quest_complete(Quest, QuestGiver, Player) + +end + +function Reload(Quest, QuestGiver, Player, Step) + +end + diff --git a/server/Quests/Commonlands/CommonlandsCreatureCataloging.lua b/server/Quests/Commonlands/CommonlandsCreatureCataloging.lua new file mode 100644 index 000000000..e8751ce42 --- /dev/null +++ b/server/Quests/Commonlands/CommonlandsCreatureCataloging.lua @@ -0,0 +1,32 @@ +--[[ + Script Name : Quests/Commonlands/CommonlandsCreatureCataloging.lua + Script Author : neatz09 + Script Date : 2018.12.30 10:12:02 + Script Purpose : + + Zone : Commonlands + Quest Giver: + Preceded by: None + Followed by: +--]] + +function Init(Quest) + +end + +function Accepted(Quest, QuestGiver, Player) + +end + +function Declined(Quest, QuestGiver, Player) + +end + +function quest_complete(Quest, QuestGiver, Player) + +end + +function Reload(Quest, QuestGiver, Player, Step) + +end + diff --git a/server/Quests/Commonlands/ConfusionistheKey.lua b/server/Quests/Commonlands/ConfusionistheKey.lua new file mode 100644 index 000000000..d5a001cd6 --- /dev/null +++ b/server/Quests/Commonlands/ConfusionistheKey.lua @@ -0,0 +1,32 @@ +--[[ + Script Name : Quests/Commonlands/ConfusionistheKey.lua + Script Author : neatz09 + Script Date : 2018.12.30 10:12:09 + Script Purpose : + + Zone : Commonlands + Quest Giver: + Preceded by: None + Followed by: +--]] + +function Init(Quest) + +end + +function Accepted(Quest, QuestGiver, Player) + +end + +function Declined(Quest, QuestGiver, Player) + +end + +function quest_complete(Quest, QuestGiver, Player) + +end + +function Reload(Quest, QuestGiver, Player, Step) + +end + diff --git a/server/Quests/Commonlands/CrackPot.lua b/server/Quests/Commonlands/CrackPot.lua new file mode 100644 index 000000000..ad17e7785 --- /dev/null +++ b/server/Quests/Commonlands/CrackPot.lua @@ -0,0 +1,32 @@ +--[[ + Script Name : Quests/Commonlands/CrackPot.lua + Script Author : neatz09 + Script Date : 2018.12.30 10:12:17 + Script Purpose : + + Zone : Commonlands + Quest Giver: + Preceded by: None + Followed by: +--]] + +function Init(Quest) + +end + +function Accepted(Quest, QuestGiver, Player) + +end + +function Declined(Quest, QuestGiver, Player) + +end + +function quest_complete(Quest, QuestGiver, Player) + +end + +function Reload(Quest, QuestGiver, Player, Step) + +end + diff --git a/server/Quests/Commonlands/CratesontheNerves.lua b/server/Quests/Commonlands/CratesontheNerves.lua new file mode 100644 index 000000000..94f10cbbd --- /dev/null +++ b/server/Quests/Commonlands/CratesontheNerves.lua @@ -0,0 +1,32 @@ +--[[ + Script Name : Quests/Commonlands/CratesontheNerves.lua + Script Author : neatz09 + Script Date : 2018.12.30 10:12:22 + Script Purpose : + + Zone : Commonlands + Quest Giver: + Preceded by: None + Followed by: +--]] + +function Init(Quest) + +end + +function Accepted(Quest, QuestGiver, Player) + +end + +function Declined(Quest, QuestGiver, Player) + +end + +function quest_complete(Quest, QuestGiver, Player) + +end + +function Reload(Quest, QuestGiver, Player, Step) + +end + diff --git a/server/Quests/Commonlands/DealingwiththeBloodskulls.lua b/server/Quests/Commonlands/DealingwiththeBloodskulls.lua new file mode 100644 index 000000000..870b5110a --- /dev/null +++ b/server/Quests/Commonlands/DealingwiththeBloodskulls.lua @@ -0,0 +1,32 @@ +--[[ + Script Name : Quests/Commonlands/DealingwiththeBloodskulls.lua + Script Author : neatz09 + Script Date : 2018.12.30 10:12:28 + Script Purpose : + + Zone : Commonlands + Quest Giver: + Preceded by: None + Followed by: +--]] + +function Init(Quest) + +end + +function Accepted(Quest, QuestGiver, Player) + +end + +function Declined(Quest, QuestGiver, Player) + +end + +function quest_complete(Quest, QuestGiver, Player) + +end + +function Reload(Quest, QuestGiver, Player, Step) + +end + diff --git a/server/Quests/Commonlands/DirtySneakyRats.lua b/server/Quests/Commonlands/DirtySneakyRats.lua new file mode 100644 index 000000000..3a34e9859 --- /dev/null +++ b/server/Quests/Commonlands/DirtySneakyRats.lua @@ -0,0 +1,32 @@ +--[[ + Script Name : Quests/Commonlands/DirtySneakyRats.lua + Script Author : neatz09 + Script Date : 2018.12.30 10:12:33 + Script Purpose : + + Zone : Commonlands + Quest Giver: + Preceded by: None + Followed by: +--]] + +function Init(Quest) + +end + +function Accepted(Quest, QuestGiver, Player) + +end + +function Declined(Quest, QuestGiver, Player) + +end + +function quest_complete(Quest, QuestGiver, Player) + +end + +function Reload(Quest, QuestGiver, Player, Step) + +end + diff --git a/server/Quests/Commonlands/FillingtheCoffers.lua b/server/Quests/Commonlands/FillingtheCoffers.lua new file mode 100644 index 000000000..4bfbc8880 --- /dev/null +++ b/server/Quests/Commonlands/FillingtheCoffers.lua @@ -0,0 +1,32 @@ +--[[ + Script Name : Quests/Commonlands/FillingtheCoffers.lua + Script Author : neatz09 + Script Date : 2018.12.30 10:12:39 + Script Purpose : + + Zone : Commonlands + Quest Giver: + Preceded by: None + Followed by: +--]] + +function Init(Quest) + +end + +function Accepted(Quest, QuestGiver, Player) + +end + +function Declined(Quest, QuestGiver, Player) + +end + +function quest_complete(Quest, QuestGiver, Player) + +end + +function Reload(Quest, QuestGiver, Player, Step) + +end + diff --git a/server/Quests/Commonlands/FinishingtheNegotiations.lua b/server/Quests/Commonlands/FinishingtheNegotiations.lua new file mode 100644 index 000000000..d14fdc6d4 --- /dev/null +++ b/server/Quests/Commonlands/FinishingtheNegotiations.lua @@ -0,0 +1,32 @@ +--[[ + Script Name : Quests/Commonlands/FinishingtheNegotiations.lua + Script Author : neatz09 + Script Date : 2018.12.30 10:12:45 + Script Purpose : + + Zone : Commonlands + Quest Giver: + Preceded by: None + Followed by: +--]] + +function Init(Quest) + +end + +function Accepted(Quest, QuestGiver, Player) + +end + +function Declined(Quest, QuestGiver, Player) + +end + +function quest_complete(Quest, QuestGiver, Player) + +end + +function Reload(Quest, QuestGiver, Player, Step) + +end + diff --git a/server/Quests/Commonlands/GiftsfromtheEarth.lua b/server/Quests/Commonlands/GiftsfromtheEarth.lua new file mode 100644 index 000000000..90cdc3061 --- /dev/null +++ b/server/Quests/Commonlands/GiftsfromtheEarth.lua @@ -0,0 +1,32 @@ +--[[ + Script Name : Quests/Commonlands/GiftsfromtheEarth.lua + Script Author : neatz09 + Script Date : 2018.12.30 10:12:53 + Script Purpose : + + Zone : Commonlands + Quest Giver: + Preceded by: None + Followed by: +--]] + +function Init(Quest) + +end + +function Accepted(Quest, QuestGiver, Player) + +end + +function Declined(Quest, QuestGiver, Player) + +end + +function quest_complete(Quest, QuestGiver, Player) + +end + +function Reload(Quest, QuestGiver, Player, Step) + +end + diff --git a/server/Quests/Commonlands/GrizzlefangsMane.lua b/server/Quests/Commonlands/GrizzlefangsMane.lua new file mode 100644 index 000000000..a3918e66d --- /dev/null +++ b/server/Quests/Commonlands/GrizzlefangsMane.lua @@ -0,0 +1,32 @@ +--[[ + Script Name : Quests/Commonlands/GrizzlefangsMane.lua + Script Author : neatz09 + Script Date : 2018.12.30 10:12:59 + Script Purpose : + + Zone : Commonlands + Quest Giver: + Preceded by: None + Followed by: +--]] + +function Init(Quest) + +end + +function Accepted(Quest, QuestGiver, Player) + +end + +function Declined(Quest, QuestGiver, Player) + +end + +function quest_complete(Quest, QuestGiver, Player) + +end + +function Reload(Quest, QuestGiver, Player, Step) + +end + diff --git a/server/Quests/Commonlands/HyenaJerky.lua b/server/Quests/Commonlands/HyenaJerky.lua new file mode 100644 index 000000000..76fda05ae --- /dev/null +++ b/server/Quests/Commonlands/HyenaJerky.lua @@ -0,0 +1,32 @@ +--[[ + Script Name : Quests/Commonlands/HyenaJerky.lua + Script Author : neatz09 + Script Date : 2018.12.30 10:12:09 + Script Purpose : + + Zone : Commonlands + Quest Giver: + Preceded by: None + Followed by: +--]] + +function Init(Quest) + +end + +function Accepted(Quest, QuestGiver, Player) + +end + +function Declined(Quest, QuestGiver, Player) + +end + +function quest_complete(Quest, QuestGiver, Player) + +end + +function Reload(Quest, QuestGiver, Player, Step) + +end + diff --git a/server/Quests/Commonlands/MorethanMeetstheEye.lua b/server/Quests/Commonlands/MorethanMeetstheEye.lua new file mode 100644 index 000000000..c3c0386a6 --- /dev/null +++ b/server/Quests/Commonlands/MorethanMeetstheEye.lua @@ -0,0 +1,32 @@ +--[[ + Script Name : Quests/Commonlands/MorethanMeetstheEye.lua + Script Author : neatz09 + Script Date : 2018.12.30 10:12:16 + Script Purpose : + + Zone : Commonlands + Quest Giver: + Preceded by: None + Followed by: +--]] + +function Init(Quest) + +end + +function Accepted(Quest, QuestGiver, Player) + +end + +function Declined(Quest, QuestGiver, Player) + +end + +function quest_complete(Quest, QuestGiver, Player) + +end + +function Reload(Quest, QuestGiver, Player, Step) + +end + diff --git a/server/Quests/Commonlands/MushroomMadness.lua b/server/Quests/Commonlands/MushroomMadness.lua new file mode 100644 index 000000000..fabc92fa4 --- /dev/null +++ b/server/Quests/Commonlands/MushroomMadness.lua @@ -0,0 +1,32 @@ +--[[ + Script Name : Quests/Commonlands/MushroomMadness.lua + Script Author : neatz09 + Script Date : 2018.12.30 10:12:21 + Script Purpose : + + Zone : Commonlands + Quest Giver: + Preceded by: None + Followed by: +--]] + +function Init(Quest) + +end + +function Accepted(Quest, QuestGiver, Player) + +end + +function Declined(Quest, QuestGiver, Player) + +end + +function quest_complete(Quest, QuestGiver, Player) + +end + +function Reload(Quest, QuestGiver, Player, Step) + +end + diff --git a/server/Quests/Commonlands/OMugwumpWhereArtThou.lua b/server/Quests/Commonlands/OMugwumpWhereArtThou.lua new file mode 100644 index 000000000..4086a5685 --- /dev/null +++ b/server/Quests/Commonlands/OMugwumpWhereArtThou.lua @@ -0,0 +1,32 @@ +--[[ + Script Name : Quests/Commonlands/OMugwumpWhereArtThou.lua + Script Author : neatz09 + Script Date : 2018.12.30 10:12:26 + Script Purpose : + + Zone : Commonlands + Quest Giver: + Preceded by: None + Followed by: +--]] + +function Init(Quest) + +end + +function Accepted(Quest, QuestGiver, Player) + +end + +function Declined(Quest, QuestGiver, Player) + +end + +function quest_complete(Quest, QuestGiver, Player) + +end + +function Reload(Quest, QuestGiver, Player, Step) + +end + diff --git a/server/Quests/Commonlands/OneFinalTask.lua b/server/Quests/Commonlands/OneFinalTask.lua new file mode 100644 index 000000000..6bffcb893 --- /dev/null +++ b/server/Quests/Commonlands/OneFinalTask.lua @@ -0,0 +1,32 @@ +--[[ + Script Name : Quests/Commonlands/OneFinalTask.lua + Script Author : neatz09 + Script Date : 2018.12.30 10:12:31 + Script Purpose : + + Zone : Commonlands + Quest Giver: + Preceded by: None + Followed by: +--]] + +function Init(Quest) + +end + +function Accepted(Quest, QuestGiver, Player) + +end + +function Declined(Quest, QuestGiver, Player) + +end + +function quest_complete(Quest, QuestGiver, Player) + +end + +function Reload(Quest, QuestGiver, Player, Step) + +end + diff --git a/server/Quests/Commonlands/OrcsandGhosts.lua b/server/Quests/Commonlands/OrcsandGhosts.lua new file mode 100644 index 000000000..0df8e9f64 --- /dev/null +++ b/server/Quests/Commonlands/OrcsandGhosts.lua @@ -0,0 +1,32 @@ +--[[ + Script Name : Quests/Commonlands/OrcsandGhosts.lua + Script Author : neatz09 + Script Date : 2018.12.30 10:12:36 + Script Purpose : + + Zone : Commonlands + Quest Giver: + Preceded by: None + Followed by: +--]] + +function Init(Quest) + +end + +function Accepted(Quest, QuestGiver, Player) + +end + +function Declined(Quest, QuestGiver, Player) + +end + +function quest_complete(Quest, QuestGiver, Player) + +end + +function Reload(Quest, QuestGiver, Player, Step) + +end + diff --git a/server/Quests/Commonlands/OrcsoftheRee.lua b/server/Quests/Commonlands/OrcsoftheRee.lua new file mode 100644 index 000000000..6c0fdbb97 --- /dev/null +++ b/server/Quests/Commonlands/OrcsoftheRee.lua @@ -0,0 +1,32 @@ +--[[ + Script Name : Quests/Commonlands/OrcsoftheRee.lua + Script Author : neatz09 + Script Date : 2018.12.30 10:12:41 + Script Purpose : + + Zone : Commonlands + Quest Giver: + Preceded by: None + Followed by: +--]] + +function Init(Quest) + +end + +function Accepted(Quest, QuestGiver, Player) + +end + +function Declined(Quest, QuestGiver, Player) + +end + +function quest_complete(Quest, QuestGiver, Player) + +end + +function Reload(Quest, QuestGiver, Player, Step) + +end + diff --git a/server/Quests/Commonlands/OverlordsOmelet.lua b/server/Quests/Commonlands/OverlordsOmelet.lua new file mode 100644 index 000000000..65a6341f9 --- /dev/null +++ b/server/Quests/Commonlands/OverlordsOmelet.lua @@ -0,0 +1,32 @@ +--[[ + Script Name : Quests/Commonlands/OverlordsOmelet.lua + Script Author : neatz09 + Script Date : 2018.12.30 10:12:46 + Script Purpose : + + Zone : Commonlands + Quest Giver: + Preceded by: None + Followed by: +--]] + +function Init(Quest) + +end + +function Accepted(Quest, QuestGiver, Player) + +end + +function Declined(Quest, QuestGiver, Player) + +end + +function quest_complete(Quest, QuestGiver, Player) + +end + +function Reload(Quest, QuestGiver, Player, Step) + +end + diff --git a/server/Quests/Commonlands/PachydermPunch.lua b/server/Quests/Commonlands/PachydermPunch.lua new file mode 100644 index 000000000..edc91b758 --- /dev/null +++ b/server/Quests/Commonlands/PachydermPunch.lua @@ -0,0 +1,32 @@ +--[[ + Script Name : Quests/Commonlands/PachydermPunch.lua + Script Author : neatz09 + Script Date : 2018.12.30 10:12:51 + Script Purpose : + + Zone : Commonlands + Quest Giver: + Preceded by: None + Followed by: +--]] + +function Init(Quest) + +end + +function Accepted(Quest, QuestGiver, Player) + +end + +function Declined(Quest, QuestGiver, Player) + +end + +function quest_complete(Quest, QuestGiver, Player) + +end + +function Reload(Quest, QuestGiver, Player, Step) + +end + diff --git a/server/Quests/Commonlands/PlainOleDisease.lua b/server/Quests/Commonlands/PlainOleDisease.lua new file mode 100644 index 000000000..90fd847be --- /dev/null +++ b/server/Quests/Commonlands/PlainOleDisease.lua @@ -0,0 +1,32 @@ +--[[ + Script Name : Quests/Commonlands/PlainOleDisease.lua + Script Author : neatz09 + Script Date : 2018.12.30 10:12:56 + Script Purpose : + + Zone : Commonlands + Quest Giver: + Preceded by: None + Followed by: +--]] + +function Init(Quest) + +end + +function Accepted(Quest, QuestGiver, Player) + +end + +function Declined(Quest, QuestGiver, Player) + +end + +function quest_complete(Quest, QuestGiver, Player) + +end + +function Reload(Quest, QuestGiver, Player, Step) + +end + diff --git a/server/Quests/Commonlands/PotionMaking.lua b/server/Quests/Commonlands/PotionMaking.lua new file mode 100644 index 000000000..b00e39b0e --- /dev/null +++ b/server/Quests/Commonlands/PotionMaking.lua @@ -0,0 +1,32 @@ +--[[ + Script Name : Quests/Commonlands/PotionMaking.lua + Script Author : neatz09 + Script Date : 2018.12.30 10:12:00 + Script Purpose : + + Zone : Commonlands + Quest Giver: + Preceded by: None + Followed by: +--]] + +function Init(Quest) + +end + +function Accepted(Quest, QuestGiver, Player) + +end + +function Declined(Quest, QuestGiver, Player) + +end + +function quest_complete(Quest, QuestGiver, Player) + +end + +function Reload(Quest, QuestGiver, Player, Step) + +end + diff --git a/server/Quests/Commonlands/ProofisinthePudding.lua b/server/Quests/Commonlands/ProofisinthePudding.lua new file mode 100644 index 000000000..a80739cfd --- /dev/null +++ b/server/Quests/Commonlands/ProofisinthePudding.lua @@ -0,0 +1,32 @@ +--[[ + Script Name : Quests/Commonlands/ProofisinthePudding.lua + Script Author : neatz09 + Script Date : 2018.12.30 10:12:07 + Script Purpose : + + Zone : Commonlands + Quest Giver: + Preceded by: None + Followed by: +--]] + +function Init(Quest) + +end + +function Accepted(Quest, QuestGiver, Player) + +end + +function Declined(Quest, QuestGiver, Player) + +end + +function quest_complete(Quest, QuestGiver, Player) + +end + +function Reload(Quest, QuestGiver, Player, Step) + +end + diff --git a/server/Quests/Commonlands/ProvingYourWorth.lua b/server/Quests/Commonlands/ProvingYourWorth.lua new file mode 100644 index 000000000..1d77a194b --- /dev/null +++ b/server/Quests/Commonlands/ProvingYourWorth.lua @@ -0,0 +1,32 @@ +--[[ + Script Name : Quests/Commonlands/ProvingYourWorth.lua + Script Author : neatz09 + Script Date : 2018.12.30 10:12:11 + Script Purpose : + + Zone : Commonlands + Quest Giver: + Preceded by: None + Followed by: +--]] + +function Init(Quest) + +end + +function Accepted(Quest, QuestGiver, Player) + +end + +function Declined(Quest, QuestGiver, Player) + +end + +function quest_complete(Quest, QuestGiver, Player) + +end + +function Reload(Quest, QuestGiver, Player, Step) + +end + diff --git a/server/Quests/Commonlands/Rainus.lua b/server/Quests/Commonlands/Rainus.lua new file mode 100644 index 000000000..c0fc55160 --- /dev/null +++ b/server/Quests/Commonlands/Rainus.lua @@ -0,0 +1,32 @@ +--[[ + Script Name : Quests/Commonlands/Rainus.lua + Script Author : neatz09 + Script Date : 2018.12.30 10:12:17 + Script Purpose : + + Zone : Commonlands + Quest Giver: + Preceded by: None + Followed by: +--]] + +function Init(Quest) + +end + +function Accepted(Quest, QuestGiver, Player) + +end + +function Declined(Quest, QuestGiver, Player) + +end + +function quest_complete(Quest, QuestGiver, Player) + +end + +function Reload(Quest, QuestGiver, Player, Step) + +end + diff --git a/server/Quests/Commonlands/ReturningtoCaptainFeralis.lua b/server/Quests/Commonlands/ReturningtoCaptainFeralis.lua new file mode 100644 index 000000000..4329503bc --- /dev/null +++ b/server/Quests/Commonlands/ReturningtoCaptainFeralis.lua @@ -0,0 +1,32 @@ +--[[ + Script Name : Quests/Commonlands/ReturningtoCaptainFeralis.lua + Script Author : neatz09 + Script Date : 2018.12.30 10:12:22 + Script Purpose : + + Zone : Commonlands + Quest Giver: + Preceded by: None + Followed by: +--]] + +function Init(Quest) + +end + +function Accepted(Quest, QuestGiver, Player) + +end + +function Declined(Quest, QuestGiver, Player) + +end + +function quest_complete(Quest, QuestGiver, Player) + +end + +function Reload(Quest, QuestGiver, Player, Step) + +end + diff --git a/server/Quests/Commonlands/Rhinorific.lua b/server/Quests/Commonlands/Rhinorific.lua new file mode 100644 index 000000000..29d4b6bf2 --- /dev/null +++ b/server/Quests/Commonlands/Rhinorific.lua @@ -0,0 +1,32 @@ +--[[ + Script Name : Quests/Commonlands/Rhinorific.lua + Script Author : neatz09 + Script Date : 2018.12.30 10:12:27 + Script Purpose : + + Zone : Commonlands + Quest Giver: + Preceded by: None + Followed by: +--]] + +function Init(Quest) + +end + +function Accepted(Quest, QuestGiver, Player) + +end + +function Declined(Quest, QuestGiver, Player) + +end + +function quest_complete(Quest, QuestGiver, Player) + +end + +function Reload(Quest, QuestGiver, Player, Step) + +end + diff --git a/server/Quests/Commonlands/SeafoodSurprise.lua b/server/Quests/Commonlands/SeafoodSurprise.lua new file mode 100644 index 000000000..b3a4c1b61 --- /dev/null +++ b/server/Quests/Commonlands/SeafoodSurprise.lua @@ -0,0 +1,32 @@ +--[[ + Script Name : Quests/Commonlands/SeafoodSurprise.lua + Script Author : neatz09 + Script Date : 2018.12.30 10:12:33 + Script Purpose : + + Zone : Commonlands + Quest Giver: + Preceded by: None + Followed by: +--]] + +function Init(Quest) + +end + +function Accepted(Quest, QuestGiver, Player) + +end + +function Declined(Quest, QuestGiver, Player) + +end + +function quest_complete(Quest, QuestGiver, Player) + +end + +function Reload(Quest, QuestGiver, Player, Step) + +end + diff --git a/server/Quests/Commonlands/SmugglersSecrets.lua b/server/Quests/Commonlands/SmugglersSecrets.lua new file mode 100644 index 000000000..f9c8f66cf --- /dev/null +++ b/server/Quests/Commonlands/SmugglersSecrets.lua @@ -0,0 +1,32 @@ +--[[ + Script Name : Quests/Commonlands/SmugglersSecrets.lua + Script Author : neatz09 + Script Date : 2018.12.30 10:12:41 + Script Purpose : + + Zone : Commonlands + Quest Giver: + Preceded by: None + Followed by: +--]] + +function Init(Quest) + +end + +function Accepted(Quest, QuestGiver, Player) + +end + +function Declined(Quest, QuestGiver, Player) + +end + +function quest_complete(Quest, QuestGiver, Player) + +end + +function Reload(Quest, QuestGiver, Player, Step) + +end + diff --git a/server/Quests/Commonlands/StartingtheNegotiations.lua b/server/Quests/Commonlands/StartingtheNegotiations.lua new file mode 100644 index 000000000..8d74226f6 --- /dev/null +++ b/server/Quests/Commonlands/StartingtheNegotiations.lua @@ -0,0 +1,32 @@ +--[[ + Script Name : Quests/Commonlands/StartingtheNegotiations.lua + Script Author : neatz09 + Script Date : 2018.12.30 10:12:56 + Script Purpose : + + Zone : Commonlands + Quest Giver: + Preceded by: None + Followed by: +--]] + +function Init(Quest) + +end + +function Accepted(Quest, QuestGiver, Player) + +end + +function Declined(Quest, QuestGiver, Player) + +end + +function quest_complete(Quest, QuestGiver, Player) + +end + +function Reload(Quest, QuestGiver, Player, Step) + +end + diff --git a/server/Quests/Commonlands/TeceraValnos.lua b/server/Quests/Commonlands/TeceraValnos.lua new file mode 100644 index 000000000..37df23e62 --- /dev/null +++ b/server/Quests/Commonlands/TeceraValnos.lua @@ -0,0 +1,32 @@ +--[[ + Script Name : Quests/Commonlands/TeceraValnos.lua + Script Author : neatz09 + Script Date : 2018.12.30 10:12:01 + Script Purpose : + + Zone : Commonlands + Quest Giver: + Preceded by: None + Followed by: +--]] + +function Init(Quest) + +end + +function Accepted(Quest, QuestGiver, Player) + +end + +function Declined(Quest, QuestGiver, Player) + +end + +function quest_complete(Quest, QuestGiver, Player) + +end + +function Reload(Quest, QuestGiver, Player, Step) + +end + diff --git a/server/Quests/Commonlands/TheBloodskullThreat.lua b/server/Quests/Commonlands/TheBloodskullThreat.lua new file mode 100644 index 000000000..af0b7acd5 --- /dev/null +++ b/server/Quests/Commonlands/TheBloodskullThreat.lua @@ -0,0 +1,32 @@ +--[[ + Script Name : Quests/Commonlands/TheBloodskullThreat.lua + Script Author : neatz09 + Script Date : 2018.12.30 10:12:06 + Script Purpose : + + Zone : Commonlands + Quest Giver: + Preceded by: None + Followed by: +--]] + +function Init(Quest) + +end + +function Accepted(Quest, QuestGiver, Player) + +end + +function Declined(Quest, QuestGiver, Player) + +end + +function quest_complete(Quest, QuestGiver, Player) + +end + +function Reload(Quest, QuestGiver, Player, Step) + +end + diff --git a/server/Quests/Commonlands/TheFrenzyoftheBloodskulls.lua b/server/Quests/Commonlands/TheFrenzyoftheBloodskulls.lua new file mode 100644 index 000000000..1097c9da1 --- /dev/null +++ b/server/Quests/Commonlands/TheFrenzyoftheBloodskulls.lua @@ -0,0 +1,32 @@ +--[[ + Script Name : Quests/Commonlands/TheFrenzyoftheBloodskulls.lua + Script Author : neatz09 + Script Date : 2018.12.30 10:12:10 + Script Purpose : + + Zone : Commonlands + Quest Giver: + Preceded by: None + Followed by: +--]] + +function Init(Quest) + +end + +function Accepted(Quest, QuestGiver, Player) + +end + +function Declined(Quest, QuestGiver, Player) + +end + +function quest_complete(Quest, QuestGiver, Player) + +end + +function Reload(Quest, QuestGiver, Player, Step) + +end + diff --git a/server/Quests/Commonlands/TheLovebirdsRoost.lua b/server/Quests/Commonlands/TheLovebirdsRoost.lua new file mode 100644 index 000000000..858252936 --- /dev/null +++ b/server/Quests/Commonlands/TheLovebirdsRoost.lua @@ -0,0 +1,32 @@ +--[[ + Script Name : Quests/Commonlands/TheLovebirdsRoost.lua + Script Author : neatz09 + Script Date : 2018.12.30 10:12:15 + Script Purpose : + + Zone : Commonlands + Quest Giver: + Preceded by: None + Followed by: +--]] + +function Init(Quest) + +end + +function Accepted(Quest, QuestGiver, Player) + +end + +function Declined(Quest, QuestGiver, Player) + +end + +function quest_complete(Quest, QuestGiver, Player) + +end + +function Reload(Quest, QuestGiver, Player, Step) + +end + diff --git a/server/Quests/Commonlands/TheMysteriousMissingShipment.lua b/server/Quests/Commonlands/TheMysteriousMissingShipment.lua new file mode 100644 index 000000000..566790aac --- /dev/null +++ b/server/Quests/Commonlands/TheMysteriousMissingShipment.lua @@ -0,0 +1,32 @@ +--[[ + Script Name : Quests/Commonlands/TheMysteriousMissingShipment.lua + Script Author : neatz09 + Script Date : 2018.12.30 10:12:29 + Script Purpose : + + Zone : Commonlands + Quest Giver: + Preceded by: None + Followed by: +--]] + +function Init(Quest) + +end + +function Accepted(Quest, QuestGiver, Player) + +end + +function Declined(Quest, QuestGiver, Player) + +end + +function quest_complete(Quest, QuestGiver, Player) + +end + +function Reload(Quest, QuestGiver, Player, Step) + +end + diff --git a/server/Quests/Commonlands/TheSkeletonKey.lua b/server/Quests/Commonlands/TheSkeletonKey.lua new file mode 100644 index 000000000..19db8c97a --- /dev/null +++ b/server/Quests/Commonlands/TheSkeletonKey.lua @@ -0,0 +1,32 @@ +--[[ + Script Name : Quests/Commonlands/TheSkeletonKey.lua + Script Author : neatz09 + Script Date : 2018.12.30 10:12:34 + Script Purpose : + + Zone : Commonlands + Quest Giver: + Preceded by: None + Followed by: +--]] + +function Init(Quest) + +end + +function Accepted(Quest, QuestGiver, Player) + +end + +function Declined(Quest, QuestGiver, Player) + +end + +function quest_complete(Quest, QuestGiver, Player) + +end + +function Reload(Quest, QuestGiver, Player, Step) + +end + diff --git a/server/Quests/Commonlands/TroubleAbout.lua b/server/Quests/Commonlands/TroubleAbout.lua new file mode 100644 index 000000000..8ab7a12ab --- /dev/null +++ b/server/Quests/Commonlands/TroubleAbout.lua @@ -0,0 +1,32 @@ +--[[ + Script Name : Quests/Commonlands/TroubleAbout.lua + Script Author : neatz09 + Script Date : 2018.12.30 10:12:38 + Script Purpose : + + Zone : Commonlands + Quest Giver: + Preceded by: None + Followed by: +--]] + +function Init(Quest) + +end + +function Accepted(Quest, QuestGiver, Player) + +end + +function Declined(Quest, QuestGiver, Player) + +end + +function quest_complete(Quest, QuestGiver, Player) + +end + +function Reload(Quest, QuestGiver, Player, Step) + +end + diff --git a/server/Quests/Commonlands/VentarTKal.lua b/server/Quests/Commonlands/VentarTKal.lua new file mode 100644 index 000000000..5b307bef2 --- /dev/null +++ b/server/Quests/Commonlands/VentarTKal.lua @@ -0,0 +1,32 @@ +--[[ + Script Name : Quests/Commonlands/VentarTKal.lua + Script Author : neatz09 + Script Date : 2018.12.30 10:12:44 + Script Purpose : + + Zone : Commonlands + Quest Giver: + Preceded by: None + Followed by: +--]] + +function Init(Quest) + +end + +function Accepted(Quest, QuestGiver, Player) + +end + +function Declined(Quest, QuestGiver, Player) + +end + +function quest_complete(Quest, QuestGiver, Player) + +end + +function Reload(Quest, QuestGiver, Player, Step) + +end + diff --git a/server/Quests/Commonlands/Wispersweetnothings.lua b/server/Quests/Commonlands/Wispersweetnothings.lua new file mode 100644 index 000000000..1e8cb36f3 --- /dev/null +++ b/server/Quests/Commonlands/Wispersweetnothings.lua @@ -0,0 +1,32 @@ +--[[ + Script Name : Quests/Commonlands/Wispersweetnothings.lua + Script Author : neatz09 + Script Date : 2018.12.30 10:12:47 + Script Purpose : + + Zone : Commonlands + Quest Giver: + Preceded by: None + Followed by: +--]] + +function Init(Quest) + +end + +function Accepted(Quest, QuestGiver, Player) + +end + +function Declined(Quest, QuestGiver, Player) + +end + +function quest_complete(Quest, QuestGiver, Player) + +end + +function Reload(Quest, QuestGiver, Player, Step) + +end + diff --git a/server/Quests/Commonlands/ZaZasLittleProblem.lua b/server/Quests/Commonlands/ZaZasLittleProblem.lua new file mode 100644 index 000000000..28bef5e21 --- /dev/null +++ b/server/Quests/Commonlands/ZaZasLittleProblem.lua @@ -0,0 +1,32 @@ +--[[ + Script Name : Quests/Commonlands/ZaZasLittleProblem.lua + Script Author : neatz09 + Script Date : 2018.12.30 10:12:58 + Script Purpose : + + Zone : Commonlands + Quest Giver: + Preceded by: None + Followed by: +--]] + +function Init(Quest) + +end + +function Accepted(Quest, QuestGiver, Player) + +end + +function Declined(Quest, QuestGiver, Player) + +end + +function quest_complete(Quest, QuestGiver, Player) + +end + +function Reload(Quest, QuestGiver, Player, Step) + +end + diff --git a/server/Quests/Commonlands/ZarvonnsLegacy.lua b/server/Quests/Commonlands/ZarvonnsLegacy.lua new file mode 100644 index 000000000..52bc4e777 --- /dev/null +++ b/server/Quests/Commonlands/ZarvonnsLegacy.lua @@ -0,0 +1,32 @@ +--[[ + Script Name : Quests/Commonlands/ZarvonnsLegacy.lua + Script Author : neatz09 + Script Date : 2018.12.30 10:12:53 + Script Purpose : + + Zone : Commonlands + Quest Giver: + Preceded by: None + Followed by: +--]] + +function Init(Quest) + +end + +function Accepted(Quest, QuestGiver, Player) + +end + +function Declined(Quest, QuestGiver, Player) + +end + +function quest_complete(Quest, QuestGiver, Player) + +end + +function Reload(Quest, QuestGiver, Player, Step) + +end + diff --git a/server/Quests/Commonlands/speckled_rattler_venom.lua b/server/Quests/Commonlands/speckled_rattler_venom.lua new file mode 100644 index 000000000..03b7ab683 --- /dev/null +++ b/server/Quests/Commonlands/speckled_rattler_venom.lua @@ -0,0 +1,70 @@ +--[[ + Script Name: speckled_rattler_venom.lua + Script Purpose: Handles the quest, "Speckled Rattler Venom" + Script Author: vo1d + Script Date: 10/8/2019 + Script Notes: n/a + + Zone: Commonlands + Quest Giver: + Preceded by: None + Followed by: Beetle Shells +--]] + +require "SpawnScripts/Generic/DialogModule" + +local GerunPontian = 330014 +local SpeckledRattler = 330020 + +function Init(Quest) + AddQuestStepKill(Quest, 1, "I need to collect venom from eight speckled rattlers", 8, 100, "Gerun wants the venom from eight speckled rattlers.", 325, SpeckledRattler) + AddQuestStepCompleteAction(Quest, 1, "Step1Complete") +end + +function Accepted(Quest, QuestGiver, Player) + if QuestGiver ~= nil then + if GetDistance (Player, QuestGiver) < 30 then + FaceTarget(QuestGiver, Player) + Dialog.New(QuestGiver, Player) + + Dialog.AddDialog("Great! I'll be here, of course.") + Dialog.AddVoiceover("", "", 0) + Dialog.AddOption("I'll be back.") + + Dialog.Start() + end + end +end + +function Declined(Quest, QuestGiver, Player) + -- Add dialog here for when the quest is declined +end + +function Deleted(Quest, QuestGiver, Player) + -- Remove any quest specific items here when the quest is deleted +end + +function Step1Complete(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 1, "I have collected the venom.") + + AddQuestStepChat(Quest, 2, "I need to bring this venom back to Gerun", 1, "Gerun wants the venom from eight speckled rattlers.", 11, GerunPontian) + AddQuestStepCompleteAction(Quest, 2, "QuestComplete") +end + +function QuestComplete(Quest, QuestGiver, Player) + -- The following UpdateQuestStepDescription and UpdateTaskGroupDescription are not needed, + -- parser adds them for completion in case stuff needs to be moved around + UpdateQuestStepDescription(Quest, 2, "I have given Gerun the venom.") + UpdateQuestTaskGroupDescription(Quest, 1, "I acquired the venom for Gerun.") + + UpdateQuestDescription(Quest, "I collected the venom for Gerun and received my payment.") + GiveQuestReward(Quest, Player) +end + +function Reload(Quest, QuestGiver, Player, Step) + if Step == 1 then + Step1Complete(Quest, QuestGiver, Player) + elseif Step == 2 then + QuestComplete(Quest, QuestGiver, Player) + end +end diff --git a/server/Quests/Darklight/AFerociousInconvenience.lua b/server/Quests/Darklight/AFerociousInconvenience.lua new file mode 100644 index 000000000..9d2de2a79 --- /dev/null +++ b/server/Quests/Darklight/AFerociousInconvenience.lua @@ -0,0 +1,51 @@ +--[[ + Script Name : AFerociousInconvenience.lua + Script Purpose : Handles the quest, "A Ferocious Inconvenience" + Script Author : Cynnar + Script Date : 7/28/2015 + Script Notes : + + Zone : Darklight Wood + Quest Giver : Jhana Do'Zyth + Preceded by : Prowler Annoyance + Followed by : None +--]] + + +function Init(Quest) + AddQuestStepKill(Quest, 1, "I need to kill the ferocious wolf in western Hate's Envy.", 1, 100, "Jhana Do'Zyth wants me to kill the ferocious wolf in western Hate's Envy.", 611, 340057) + AddQuestStepCompleteAction(Quest, 1, "Step1Complete") +end + +function Step1Complete(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 1, "I have slain the ferocious wolf.") + + AddQuestStepChat(Quest, 2, "I need to return to Jhana.", 1, "Jhana Do'Zyth wants me to kill the ferocious wolf in western Hate's Envy.", 11, 340027) + AddQuestStepCompleteAction(Quest, 2, "QuestComplete") +end + +function QuestComplete(Quest, QuestGiver, Player) + UpdateQuestDescription(Quest, "I found the pack leader of the dusk prowlers inside the Thexian tomb and slew the beast.") + GiveQuestReward(Quest, Player) +end + +function Reload(Quest, QuestGiver, Player, Step) + if Step == 1 then + Step1Complete(Quest, QuestGiver, Player) + elseif Step == 2 then + Step2Complete(Quest, QuestGiver, Player) + end +end + +function Accepted(Quest, QuestGiver, Player) + FaceTarget(QuestGiver, Player) + conversation = CreateConversation() + + PlayFlavor(QuestGiver, "jhana_do_zyth/darklight_wood/hates_envy/jhana_revamp/jhana009.mp3", "", "", 1353883768, 3186153308, Player) + AddConversationOption(conversation, "I will return victorious!") + StartConversation(conversation, QuestGiver, Player, "I look forward to news of your victory.") +end + +function Declined(Quest, QuestGiver, Player) + -- Add dialog here for when the quest is declined +end \ No newline at end of file diff --git a/server/Quests/Darklight/AFriendlyReminder.lua b/server/Quests/Darklight/AFriendlyReminder.lua new file mode 100644 index 000000000..3afe100a1 --- /dev/null +++ b/server/Quests/Darklight/AFriendlyReminder.lua @@ -0,0 +1,51 @@ +--[[ + Script Name : Quests/Darklight/AFriendlyReminder.lua + Script Purpose : Handles the quest, "A Friendly Reminder" + Script Author : Cynnar + Script Date : 9/1/2015 + Script Notes : + + Zone : Darklight Wood + Quest Giver Laexyra Y'Barriath : + Preceded by : Public Service + Followed by : Reaping +--]] + + +function Init(Quest) + AddQuestStepKill(Quest, 1, "Confront the Thexian necromancer", 1, 100, "Laexyra Y'Barriath wants me to find the Thexian necromancer and remind him that he is not welcome in Darklight Wood.", 611, 340088) + AddQuestStepCompleteAction(Quest, 1, "Step1Complete") +end + +function Step1Complete(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 1, "I have slain Kronryn N'Xytyl.") + + AddQuestStepChat(Quest, 2, "Return to Laexyra Y'Barriath", 1, "Laexyra Y'Barriath wants me to find the Thexian necromancer and remind him that he is not welcome in Darklight Wood.", 11, 340075) + AddQuestStepCompleteAction(Quest, 2, "QuestComplete") +end + +function QuestComplete(Quest, QuestGiver, Player) + UpdateQuestDescription(Quest, "I found and slew a Thexian cabalist named Kronryn N'Xytyl. This should hopefully put an end to the ceaseless waves of undead found near T'Vatar Outpost.") + GiveQuestReward(Quest, Player) +end + +function Reload(Quest, QuestGiver, Player, Step) + if Step == 1 then + Step1Complete(Quest, QuestGiver, Player) + elseif Step == 2 then + QuestComplete(Quest, QuestGiver, Player) + end +end + +function Accepted(Quest, QuestGiver, Player) + FaceTarget(QuestGiver, Player) + conversation = CreateConversation() + + PlayFlavor(QuestGiver, "", "", "cutthroat", 0, 0, Player) + AddConversationOption(conversation, "It will be done.") + StartConversation(conversation, QuestGiver, Player, "Make sure he does not return.") +end + +function Declined(Quest, QuestGiver, Player) + -- Add dialog here for when the quest is declined +end \ No newline at end of file diff --git a/server/Quests/Darklight/AGuardInsignia.lua b/server/Quests/Darklight/AGuardInsignia.lua new file mode 100644 index 000000000..031364183 --- /dev/null +++ b/server/Quests/Darklight/AGuardInsignia.lua @@ -0,0 +1,38 @@ +--[[ + Script Name : Quests/Darklight/AGuardInsignia.lua + Script Purpose : Handles the quest, "A Guard Insignia?" + Script Author : Cynnar + Script Date : 9/1/2015 + Script Notes : + + Zone : Darklight Wood + Quest Giver : Examine a Neriak recruit badge + Preceded by : Picking Up Slack + Followed by : The Missing Recruit +--]] + + +function Init(Quest) + AddQuestStepChat(Quest, 1, "Bring the insignia to Ginwyss D'Arkenett", 1, "I should give the insignia I found to Ginwyss D'Arkenett.", 20, 340064) + AddQuestStepCompleteAction(Quest, 1, "QuestComplete") +end + +function QuestComplete(Quest, QuestGiver, Player) + RemoveItem(Player, 2333) + UpdateQuestDescription(Quest, "I have given Ginwyss the insignia. She believes it is from her missing recruit.") + GiveQuestReward(Quest, Player) +end + +function Reload(Quest, QuestGiver, Player, Step) + if Step == 1 then + QuestComplete(Quest, QuestGiver, Player) + end +end + +function Accepted(Quest, QuestGiver, Player) + -- Add dialog here for when the quest is accepted +end + +function Declined(Quest, QuestGiver, Player) + -- Add dialog here for when the quest is declined +end \ No newline at end of file diff --git a/server/Quests/Darklight/ASnakeMadeSerum.lua b/server/Quests/Darklight/ASnakeMadeSerum.lua new file mode 100644 index 000000000..9720b13e6 --- /dev/null +++ b/server/Quests/Darklight/ASnakeMadeSerum.lua @@ -0,0 +1,54 @@ +--[[ + Script Name : Quests/Darklight/ASnakeMadeSerum.lua + Script Purpose : Handles the quest, "A Snake Made Serum" + Script Author : Cynnar + Script Date : 9/1/2015 + Script Notes : + + Zone : Darklight Wood + Quest Giver : Ilmtar D'Viervs + Preceded by : Tipping the Scales of Power + Followed by : The Mother Lode +--]] + + +function Init(Quest) + AddQuestStepKill(Quest, 1, "I need to hunt scar wurms", 8, 100, "Ilmtar D'Viervs needs the corpses of several scar wurms so he can use their pheromone sacs to make a truth serum.", 98, 340013) + AddQuestStepCompleteAction(Quest, 1, "Step1Complete") +end + +function Step1Complete(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 1, "I hunted several scar wurms") + UpdateQuestTaskGroupDescription(Quest, 1, "I successfully collected enough scar wurm corpses.") + + AddQuestStepChat(Quest, 2, "Bring the scar wurm corpses to Ilmtar D'Viervs", 1, "I need to bring the scar wurm corpses to Ilmtar D'Viervs at T'Vatar Outpost.", 98, 340076) + AddQuestStepCompleteAction(Quest, 2, "QuestComplete") +end + +function QuestComplete(Quest, QuestGiver, Player) + UpdateQuestDescription(Quest, "I have given Ilmtar the scar wurm corpses.") + GiveQuestReward(Quest, Player) +end + +function Reload(Quest, QuestGiver, Player, Step) + if Step == 1 then + Step1Complete(Quest, QuestGiver, Player) + elseif Step == 2 then + QuestComplete(Quest, QuestGiver, Player) + end +end + +function Accepted(Quest, QuestGiver, Player) + FaceTarget(QuestGiver, Player) + local con = CreateConversation() + + PlayFlavor(QuestGiver, "", "", "", 0, 0, Player) + StartConversation(con, QuestGiver, Player, "Great. I'll be here preparing the additional ingredients needed for the serum.") +end + +function Declined(Quest, QuestGiver, Player) + -- Add dialog here for when the quest is declined +end + +function Deleted(Quest, QuestGiver, Player) +end \ No newline at end of file diff --git a/server/Quests/Darklight/ASolidifiedFront.lua b/server/Quests/Darklight/ASolidifiedFront.lua new file mode 100644 index 000000000..eb0e5af1a --- /dev/null +++ b/server/Quests/Darklight/ASolidifiedFront.lua @@ -0,0 +1,68 @@ +--[[ + Script Name : Quests/Darklight/ASolidifiedFront.lua + Script Purpose : Handles the quest, "A Solidified Front" + Script Author : Cynnar + Script Date : 7/3/2015 + + Zone : Darklight Wood + Quest Giver : Verex N'Za + Preceded by : None + Followed by : Elemental Encroachment (ElementalEncroachment.lua) Sealing the Rift (SealingtheRift.lua) + + // Note: + // Removed duplicate quest rewards + +--]] + +local ASolidifiedFront = 120 + +function Init(Quest) + AddQuestStepChat(Quest, 1, "Locate Udiyitas X'Kilrea", 1, "I should travel outisde the breach in the southern wall of Hate's Envy and find Udiyitas X'Kilrae and Pellandra D'Xatyl.", 11, 340226) + AddQuestStepChat(Quest, 2, "Locate Pellandra D'Xatyl", 1, "I should travel outisde the breach in the southern wall of Hate's Envy and find Udiyitas X'Kilrae and Pellandra D'Xatyl.", 11, 340038) + AddQuestStepCompleteAction(Quest, 1, "Udiyitas") + AddQuestStepCompleteAction(Quest, 2, "Pellandra") +end + +function CheckProgress(Quest, QuestGiver, Player) + if QuestStepIsComplete(Player, ASolidifiedFront, 1) and QuestStepIsComplete(Player, ASolidifiedFront, 2) then + UpdateQuestTaskGroupDescription(Quest, 1, "I met with both Udiyitas X'Kilrae and Pellandra D'Xatyl outside the southern breach in the walls of Hate's Envy.") + QuestComplete(Quest, QuestGiver, Player) + end +end + +function QuestComplete(Quest, QuestGiver, Player) + SetCompleteFlag(Quest) + GiveQuestReward(Quest, Player) +end + +function Udiyitas(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 1, "I spoke with Udiyitas X'Kilrae") + CheckProgress(Quest, QuestGiver, Player) +end + +function Pellandra(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 2, "I spoke with Pellandra D'Xatyl") + CheckProgress(Quest, QuestGiver, Player) +end + +function Accepted(Quest, QuestGiver, Player) + FaceTarget(QuestGiver, Player) + conversation = CreateConversation() + + StartConversation(conversation, QuestGiver, Player, "May Innoruuk guide your blade, young one!") +end + +function Deleted(Quest, QuestGiver, Player) +end + +function Declined(Quest, QuestGiver, Player) +end + +function Reload(Quest, QuestGiver, Player, Step) + if QuestStepIsComplete(Player, ASolidifiedFront, 1) then + Udiyitas(Quest, QuestGiver, Player) + end + if QuestStepIsComplete(Player, ASolidifiedFront, 2) then + Pellandra(Quest, QuestGiver, Player) + end +end \ No newline at end of file diff --git a/server/Quests/Darklight/AnAuthorityonHate.lua b/server/Quests/Darklight/AnAuthorityonHate.lua new file mode 100644 index 000000000..bbed99598 --- /dev/null +++ b/server/Quests/Darklight/AnAuthorityonHate.lua @@ -0,0 +1,42 @@ +--[[ + Script Name : Quests/Darklight/AnAuthorityonHate.lua + Script Purpose : Handles the quest, "An Authority on Hate" + Script Author : Cynnar + Script Date : 7/27/2015 + Script Notes : + + Zone : Darklight Wood + Quest Giver : Pellandra D'Xatyl + Preceded by : Reclaiming the Sablevein Tear (ReclaimingtheSableveinTear.lua) + Followed by : Prowler Annoyance (ProwlerAnnoyance.lua) +--]] + + +function Init(Quest) + AddQuestStepChat(Quest, 1, "Speak with Jhana Do'Zyth inside Hate's Envy Townhall", 1, "I need to enter Hate's Envy Townhall and speak with the mayor's daughter, Jhana Do'Zyth.", 11, 340027) + AddQuestStepCompleteAction(Quest, 1, "QuestComplete") +end + +function QuestComplete(Quest, QuestGiver, Player) + UpdateQuestDescription(Quest, "I entered Hate's Envy Town Hall and spoke with the mayor's daughter, Jhana Do'Zyth.") + GiveQuestReward(Quest, Player) +end + +function Reload(Quest, QuestGiver, Player, Step) + if Step == 1 then + QuestComplete(Quest, QuestGiver, Player) + end +end + +function Accepted(Quest, QuestGiver, Player) + FaceTarget(QuestGiver, Player) + conversation = CreateConversation() + + PlayFlavor(QuestGiver, "pellandra_d_xatyl/darklight_wood/hates_envy/pellandra_revamp/pellandra026.mp3", "", "bow", 3700065629, 2247447219, Player) + AddConversationOption(conversation, "Praise Innoruuk!") + StartConversation(conversation, QuestGiver, Player, "You fight well, " .. GetName(Player) .. ". May your enemies come to know your name and fear it. The Dark Father looks upon you favorably.") +end + +function Declined(Quest, QuestGiver, Player) + -- Add dialog here for when the quest is declined +end \ No newline at end of file diff --git a/server/Quests/Darklight/AnotherProblem.lua b/server/Quests/Darklight/AnotherProblem.lua new file mode 100644 index 000000000..eb749bf2f --- /dev/null +++ b/server/Quests/Darklight/AnotherProblem.lua @@ -0,0 +1,41 @@ +--[[ + Script Name : AnotherProblem.lua + Script Purpose : Handles the quest, "Another Problem" + Script Author : FeaRFx + Script Date : 26/01/2017 + Script Notes : + + Zone : Darklight Wood + Quest Giver : + Preceded by : None + Followed by : None +--]] + + +function Init(Quest) + AddQuestStepChat(Quest, 1, "Find Vicaonar K'Xaar.", 1, "Find Vicaonar K'Xaarat. He can be found to the east of Wanderlust Fair.", 11, 340143) + AddQuestStepCompleteAction(Quest, 1, "QuestComplete") +end + +function QuestComplete(Quest, QuestGiver, Player) + -- The following UpdateQuestStepDescription and UpdateTaskGroupDescription are not needed, parser adds them for completion in case stuff needs to be moved around + UpdateQuestStepDescription(Quest, 1, "I have found Vicaonar.") + UpdateQuestTaskGroupDescription(Quest, 1, "I have found Vicaonar.") + + UpdateQuestDescription(Quest, "I have found Vicaonar.") + GiveQuestReward(Quest, Player) +end + +function Reload(Quest, QuestGiver, Player, Step) + if Step == 1 then + QuestComplete(Quest, QuestGiver, Player) + end +end + +function Accepted(Quest, QuestGiver, Player) + -- Add dialog here for when the quest is accepted +end + +function Declined(Quest, QuestGiver, Player) + -- Add dialog here for when the quest is declined +end diff --git a/server/Quests/Darklight/ComparisonstotheHarrowglade.lua b/server/Quests/Darklight/ComparisonstotheHarrowglade.lua new file mode 100644 index 000000000..9b481ecec --- /dev/null +++ b/server/Quests/Darklight/ComparisonstotheHarrowglade.lua @@ -0,0 +1,50 @@ +--[[ + Script Name : ComparisonstotheHarrowglade.lua + Script Purpose : Handles the quest, "Comparisons to the Harrowglade" + Script Author : FeaRFx + Script Date : 26/01/2017 + Script Notes : + + Zone : Darklight Wood + Quest Giver : + Preceded by : None + Followed by : None +--]] + + +function Init(Quest) + AddQuestStepKill(Quest, 1, "I need to collect some resonant dust from the wisplings in the Harrowglade.", 8, 100, "I need to collect resonant dust from the wisplings in the Harrowglade.", 342, 340121) + AddQuestStepCompleteAction(Quest, 1, "Step1Complete") +end + +function Step1Complete(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 1, "I have collected the resonant dust.") + + AddQuestStepChat(Quest, 2, "I need to bring this dust back to Geldax Xalylharil.", 1, "I need to collect resonant dust from the wisplings in the Harrowglade.", 342, 340147) + AddQuestStepCompleteAction(Quest, 2, "QuestComplete") +end + +function QuestComplete(Quest, QuestGiver, Player) + -- The following UpdateQuestStepDescription and UpdateTaskGroupDescription are not needed, parser adds them for completion in case stuff needs to be moved around + UpdateQuestStepDescription(Quest, 2, "I have given Geldax Xalylharil the dust.") + UpdateQuestTaskGroupDescription(Quest, 1, "I have collected the resonant dust and given it to Geldax Xalylharil.") + + UpdateQuestDescription(Quest, "I have brought the nominal resonant dust to Geldax Xalylharil, as he requested.") + GiveQuestReward(Quest, Player) +end + +function Reload(Quest, QuestGiver, Player, Step) + if Step == 1 then + Step1Complete(Quest, QuestGiver, Player) + elseif Step == 2 then + QuestComplete(Quest, QuestGiver, Player) + end +end + +function Accepted(Quest, QuestGiver, Player) + -- Add dialog here for when the quest is accepted +end + +function Declined(Quest, QuestGiver, Player) + -- Add dialog here for when the quest is declined +end diff --git a/server/Quests/Darklight/Condemned.lua b/server/Quests/Darklight/Condemned.lua new file mode 100644 index 000000000..eaa86968d --- /dev/null +++ b/server/Quests/Darklight/Condemned.lua @@ -0,0 +1,60 @@ +--[[ + Script Name : Quests/Darklight/Condemned.lua + Script Purpose : Handles the quest, "Condemned" + Script Author : Cynnar + Script Date : 9/1/2015 + Script Notes : + + Zone : Darklight Wood + Quest Giver : Laexyra Y'Barriath + Preceded by : Reaping + Followed by : Continuing Assistance , Report to Zezas +--]] + + +function Init(Quest) + AddQuestStep(Quest, 1, "Release these spirits near the Wellspring of Nightmares", 1, 100, "Laexyra Y'Barriath wants me to trap the spirits I captured in the Wellspring of Nightmares.", 2516) + AddQuestStepCompleteAction(Quest, 1, "Step1Complete") +end + +function Step1Complete(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 1, "I have released the spirits, condemning them to a perpetual nightmare") + + AddQuestStepChat(Quest, 2, "Return to Laexyra Y'Barriath", 1, "Laexyra Y'Barriath wants me to trap the spirits I captured in the Wellspring of Nightmares.", 11, 340075) + AddQuestStepCompleteAction(Quest, 2, "QuestComplete") +end + +function QuestComplete(Quest, QuestGiver, Player) + UpdateQuestDescription(Quest, "I have returned to Laexyra Y'Barriath after trapping the spirits within the Wellspring of Nightmares.") + GiveQuestReward(Quest, Player) +end + +function Reload(Quest, QuestGiver, Player, Step) + if Step == 1 then + Step1Complete(Quest, QuestGiver, Player) + elseif Step == 2 then + QuestComplete(Quest, QuestGiver, Player) + end +end + +function Accepted(Quest, QuestGiver, Player) + if HasItem(Player, 48976) == false then + SummonItem(Player, 48976, 1) + end + FaceTarget(QuestGiver, Player) + conversation = CreateConversation() + + PlayFlavor(QuestGiver, "", "", "salute", 0, 0, Player) + AddConversationOption(conversation, "All right.") + StartConversation(conversation, QuestGiver, Player, "That works for me. Let me know how it goes.") +end + +function Declined(Quest, QuestGiver, Player) + -- Add dialog here for when the quest is declined +end + +function Deleted(Quest, QuestGiver, Player) + while HasItem(Player, 48976, 1) do + RemoveItem(Player, 48976) + end +end diff --git a/server/Quests/Darklight/ContinuingAssistance.lua b/server/Quests/Darklight/ContinuingAssistance.lua new file mode 100644 index 000000000..01dc8abc9 --- /dev/null +++ b/server/Quests/Darklight/ContinuingAssistance.lua @@ -0,0 +1,60 @@ +--[[ + Script Name : Quests/Darklight/ContinuingAssistance.lua + Script Purpose : Handles the quest, "Continuing Assistance" + Script Author : Cynnar + Script Date : 8/30/2015 + Script Notes : + + Zone : Darklight Wood + Quest Giver : Laexyra Y'Barriath + Preceded by : Condemned + Followed by : Alakzaer the Missing, Potential Threats +--]] + +local ContinuingAssistance = 154 + +function Init(Quest) + AddQuestStepChat(Quest, 1, "Deliver a letter to Malyl N'Vazin", 1, "Laexyra Y'Barriath wants me to deliver correspondences to both Malyl N'Vazin and Vornlin B'Vytyl at Wanderlust Fair. I can get there by following the road west from T'Vatar Outpost.", 11, 341004) + AddQuestStepChat(Quest, 2, "Deliver a letter to Vornlin B'Vytyl", 1, "Laexyra Y'Barriath wants me to deliver correspondences to both Malyl N'Vazin and Vornlin B'Vytyl at Wanderlust Fair. I can get there by following the road west from T'Vatar Outpost.", 11, 340145) + AddQuestStepCompleteAction(Quest, 1, "Malyl") + AddQuestStepCompleteAction(Quest, 2, "Vornlin") +end + +function CheckProgress(Quest, QuestGiver, Player) + if QuestStepIsComplete(Player, ContinuingAssistance, 1) and QuestStepIsComplete(Player, ContinuingAssistance, 2) then + UpdateQuestTaskGroupDescription(Quest, 1, "I delivered the correspondences to both Malyl N'Vazin and Vornlin B'Vytyl at Wanderlust Fair.") + QuestComplete(Quest, QuestGiver, Player) + end +end + +function QuestComplete(Quest, QuestGiver, Player) + SetCompleteFlag(Quest) + GiveQuestReward(Quest, Player) +end + +function Malyl(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 1, "I have spoken with Malyl.") + CheckProgress(Quest, QuestGiver, Player) +end + +function Vornlin(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 2, "I have spoken with Vornlin.") + CheckProgress(Quest, QuestGiver, Player) +end + +function Reload(Quest, QuestGiver, Player, Step) + if QuestStepIsComplete(Player, ContinuingAssistance, 1) then + Malyl(Quest, QuestGiver, Player) + end + if QuestStepIsComplete(Player, ContinuingAssistance, 2) then + Vornlin(Quest, QuestGiver, Player) + end +end + +function Accepted(Quest, QuestGiver, Player) + -- Add dialog here for when the quest is accepted +end + +function Declined(Quest, QuestGiver, Player) + -- Add dialog here for when the quest is declined +end \ No newline at end of file diff --git a/server/Quests/Darklight/DiggingDeeper_Darkligh.lua b/server/Quests/Darklight/DiggingDeeper_Darkligh.lua new file mode 100644 index 000000000..f2ddda09c --- /dev/null +++ b/server/Quests/Darklight/DiggingDeeper_Darkligh.lua @@ -0,0 +1,60 @@ +--[[ + Script Name : DiggingDeeper.lua + Script Purpose : Handles the quest, "Digging Deeper" + Script Author : FeaRFx + Script Date : 26/01/2017 + Script Notes : + + Zone : Darklight Wood + Quest Giver : + Preceded by : None + Followed by : None +--]] + + +function Init(Quest) + AddQuestStepChat(Quest, 1, "Speak with Belarshalee.", 1, "Speak with Belarshalee and find out if she has any information about the Sableflame.", 11, 340173) + AddQuestStepCompleteAction(Quest, 1, "Step1Complete") +end + +function Step1Complete(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 1, "I have spoken to Belarshalee.") + UpdateQuestTaskGroupDescription(Quest, 1, "I have spoken to Belarshalee.") + + AddQuestStepKill(Quest, 2, "I need to kill Sableflame incanters, cauterizers, scryers, or watchers.", 8, 100, "Gaussnitra V'Kilana wants me to kill Sableflame incanters, cauterizers, scryers, and watchers.", 611, 340127, 340125, 340124, 340111) + AddQuestStepCompleteAction(Quest, 2, "Step2Complete") +end + +function Step2Complete(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 2, "I have killed the Sableflame cultists.") + + AddQuestStepChat(Quest, 3, "I need to return to Gaussnitra V'Kilana.", 1, "Gaussnitra V'Kilana wants me to kill Sableflame incanters, cauterizers, scryers, and watchers.", 11, 341003) + AddQuestStepCompleteAction(Quest, 3, "QuestComplete") +end + +function QuestComplete(Quest, QuestGiver, Player) + -- The following UpdateQuestStepDescription and UpdateTaskGroupDescription are not needed, parser adds them for completion in case stuff needs to be moved around + UpdateQuestStepDescription(Quest, 3, "I have spoken with Gaussnitra V'Kilana.") + UpdateQuestTaskGroupDescription(Quest, 2, "I have slain the Sableflame cultists.") + + UpdateQuestDescription(Quest, "I have slain the Sableflame cultists.") + GiveQuestReward(Quest, Player) +end + +function Reload(Quest, QuestGiver, Player, Step) + if Step == 1 then + Step1Complete(Quest, QuestGiver, Player) + elseif Step == 2 then + Step2Complete(Quest, QuestGiver, Player) + elseif Step == 3 then + QuestComplete(Quest, QuestGiver, Player) + end +end + +function Accepted(Quest, QuestGiver, Player) + -- Add dialog here for when the quest is accepted +end + +function Declined(Quest, QuestGiver, Player) + -- Add dialog here for when the quest is declined +end diff --git a/server/Quests/Darklight/DusttoDust.lua b/server/Quests/Darklight/DusttoDust.lua new file mode 100644 index 000000000..dc6fb2edc --- /dev/null +++ b/server/Quests/Darklight/DusttoDust.lua @@ -0,0 +1,51 @@ +--[[ + Script Name : Quests/Darklight/DusttoDust.lua + Script Purpose : Handles the quest, "Dust to Dust" + Script Author : Cynnar + Script Date : 9/2/2015 + Script Notes : Need to remove item if quest is deleted + + Zone : Darklight Wood + Quest Giver : Calnozz J'Melvirr + Preceded by : Infantile Ingredients + Followed by : None +--]] + + +function Init(Quest) + AddQuestStep(Quest, 1, "Douse skeletons with stunspore dust!", 7, 100, "I must test the stunspore dust on the skeletons found north from Warpfont Spire.", 10) + AddQuestStepCompleteAction(Quest, 1, "Step1Complete") +end + +function Step1Complete(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 1, "I tested the stunspore dust on several skeletons") + + AddQuestStepChat(Quest, 2, "Report your findings to Calnozz", 1, "I must test the stunspore dust on the skeletons found north from Warpfont Spire.", 11, 340066) + AddQuestStepCompleteAction(Quest, 2, "QuestComplete") +end + +function QuestComplete(Quest, QuestGiver, Player) + UpdateQuestDescription(Quest, "The stunspore dust had a limited effect on the undead.") + GiveQuestReward(Quest, Player) +end + +function Reload(Quest, QuestGiver, Player, Step) + if Step == 1 then + Step1Complete(Quest, QuestGiver, Player) + elseif Step == 2 then + QuestComplete(Quest, QuestGiver, Player) + end +end + +function Accepted(Quest, QuestGiver, Player) + SummonItem(Player, 47613) + Say(QuestGiver, "All in the name of empirical research, " .. GetName(Player) .. "! Good luck!") +end + +function Deleted(Quest, QuestGiver, Player) + RemoveItem(Player, 47613) +end + +function Declined(Quest, QuestGiver, Player) + -- Add dialog here for when the quest is declined +end \ No newline at end of file diff --git a/server/Quests/Darklight/ElementalEncroachment.lua b/server/Quests/Darklight/ElementalEncroachment.lua new file mode 100644 index 000000000..278014119 --- /dev/null +++ b/server/Quests/Darklight/ElementalEncroachment.lua @@ -0,0 +1,51 @@ +--[[ + Script Name : Quests/Darklight/ElementalEncroachment.lua + Script Purpose : Handles the quest, "Elemental Encroachment" + Script Author : Cynnar + Script Date : 7/5/2015 + Script Notes : + + Zone : Darklight Wood + Quest Giver : Udiyitas X'Kilrae + Preceded by : A Solidified Front (ASolidifiedFront.lua) + Followed by : None +--]] + + +function Init(Quest) + AddQuestStepKill(Quest, 1, "Destroy several Sablevein crumblers", 4, 100, "Udiyitas X'Kilrae has asked me to help take care of the elemental problems outside of Hate's Envy.", 611, 340023) + AddQuestStepCompleteAction(Quest, 1, "Step1Complete") +end + +function Step1Complete(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 1, "I have destroyed the Sablevein crumblers") + + AddQuestStepChat(Quest, 2, "Return to Udiyitas X'Kilrae", 1, "Udiyitas X'Kilrae has asked me to help take care of the elemental problems outside of Hate's Envy.", 11, 340226) + AddQuestStepCompleteAction(Quest, 2, "QuestComplete") +end + +function QuestComplete(Quest, QuestGiver, Player) + UpdateQuestDescription(Quest, "I have slain the elementals for Udiyitas X'Kilrae.") + GiveQuestReward(Quest, Player) +end + +function Reload(Quest, QuestGiver, Player, Step) + if Step == 1 then + Step1Complete(Quest, QuestGiver, Player) + elseif Step == 2 then + QuestComplete(Quest, QuestGiver, Player) + end +end + +function Accepted(Quest, QuestGiver, Player) + FaceTarget(QuestGiver, Player) + conversation = CreateConversation() + + PlayFlavor(QuestGiver, "udiyitas_x_kilrae/darklight_wood/hates_envy/udiyitas_revamp/udiyitas003.mp3", "", "", 3716611968, 2933459424, Player) + AddConversationOption(conversation, "For Hate's Envy!") + StartConversation(conversation, QuestGiver, Player, "For Hate's Envy!") +end + +function Declined(Quest, QuestGiver, Player) + -- Add dialog here for when the quest is declined +end \ No newline at end of file diff --git a/server/Quests/Darklight/HopefulNetReturns.lua b/server/Quests/Darklight/HopefulNetReturns.lua new file mode 100644 index 000000000..2e9fe0841 --- /dev/null +++ b/server/Quests/Darklight/HopefulNetReturns.lua @@ -0,0 +1,47 @@ +--[[ + Script Name : Quests/Darklight/HopefulNetReturns.lua + Script Purpose : Handles the quest, "Hopeful Net Returns" + Script Author : FeaRFx + Script Date : 13/06/2016 + Script Notes : + + Zone : Darklight Wood + Quest Giver : Aunthrae + Preceded by : What's in Demand? (WhatsinDemand.lua) + Followed by : None +--]] + + +function Init(Quest) + AddQuestStepChat(Quest, 1, "Give the fishing net to Dirzdia T'Zauvirr", 1, "Deliver the fishing net to Dirzdia T'Zauvirr at the southern bridge spanning over the Searing Tendril River.", 0, 340096) + AddQuestStepCompleteAction(Quest, 1, "QuestComplete") + GiveFishingNet(Quest, QuestGiver, Player) +end + +function GiveFishingNet(Quest, QuestGiver, Player) + SummonItem(Player, 7296, 1) +end + +function QuestComplete(Quest, QuestGiver, Player) + RemoveItem(Player, 7296) + -- The following UpdateQuestStepDescription and UpdateTaskGroupDescription are not needed, parser adds them for completion in case stuff needs to be moved around + UpdateQuestStepDescription(Quest, 1, "I gave the fishing net to Dirzdia T'Zauvirr") + UpdateQuestTaskGroupDescription(Quest, 1, "I found Dirzdia T'Zauvirr and delivered the net given to me by Aunthrae.") + + UpdateQuestDescription(Quest, "I found Dirzdia T'Zauvirr at the southern bridge over the Lower Tendril River.") + GiveQuestReward(Quest, Player) +end + +function Reload(Quest, QuestGiver, Player, Step) + if Step == 1 then + QuestComplete(Quest, QuestGiver, Player) + end +end + +function Accepted(Quest, QuestGiver, Player) + -- Add dialog here for when the quest is accepted +end + +function Declined(Quest, QuestGiver, Player) + -- Add dialog here for when the quest is declined +end diff --git a/server/Quests/Darklight/InfantileIngredients.lua b/server/Quests/Darklight/InfantileIngredients.lua new file mode 100644 index 000000000..c1be68801 --- /dev/null +++ b/server/Quests/Darklight/InfantileIngredients.lua @@ -0,0 +1,55 @@ +--[[ + Script Name : Quests/Darklight/InfantileIngredients.lua + Script Purpose : Handles the quest, "Infantile Ingredients" + Script Author : Cynnar + Script Date : 9/2/2015 + Script Notes : + + Zone : Darklight Wood + Quest Giver : Calnozz J'Melvirr + Preceded by : Stunning Revelation + Followed by : Dust to Dust +--]] + + +function Init(Quest) + AddQuestStepObtainItem(Quest, 1, "Catch baby snakes from the serpents near the Lower Tendril River", 8, 100, "Calnozz J'Melvirr wants me to collect a number of baby snakes so he can milk their powerful venom.", 98, 4080) + AddQuestStepCompleteAction(Quest, 1, "Step1Complete") +end + +function Step1Complete(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 1, "I have collected the baby snakes") + + AddQuestStepChat(Quest, 2, "Bring the snakes back to Calnozz", 1, "Calnozz J'Melvirr wants me to collect a number of baby snakes so he can milk their powerful venom.", 98, 340066) + AddQuestStepCompleteAction(Quest, 2, "QuestComplete") +end + +function QuestComplete(Quest, QuestGiver, Player) + UpdateQuestDescription(Quest, "I have collected the baby snakes for Calnozz J'Melvirr.") + while HasItem(player, 4080, 1) do + RemoveItem(Player, 4080) + end + GiveQuestReward(Quest, Player) +end + +function Reload(Quest, QuestGiver, Player, Step) + if Step == 1 then + Step1Complete(Quest, QuestGiver, Player) + elseif Step == 2 then + QuestComplete(Quest, QuestGiver, Player) + end +end + +function Accepted(Quest, QuestGiver, Player) + Say(QuestGiver, "They are quite delicate at birth, so try not to slice up the babies too much.") +end + +function Deleted(Quest, QuestGiver, Player) + while HasItem(Player, 4080, 1) do + RemoveItem(Player, 4080) + end +end + +function Declined(Quest, QuestGiver, Player) + -- Add dialog here for when the quest is declined +end \ No newline at end of file diff --git a/server/Quests/Darklight/MoreReagents.lua b/server/Quests/Darklight/MoreReagents.lua new file mode 100644 index 000000000..c84f78da3 --- /dev/null +++ b/server/Quests/Darklight/MoreReagents.lua @@ -0,0 +1,50 @@ +--[[ + Script Name : MoreReagents.lua + Script Purpose : Handles the quest, "More Reagents" + Script Author : FeaRFx + Script Date : 26/01/2017 + Script Notes : + + Zone : Darklight Wood + Quest Giver : + Preceded by : None + Followed by : None +--]] + + +function Init(Quest) + AddQuestStepKill(Quest, 1, "Gather ooze from slimy mulchers", 6, 100, "I need ooze from the slimy mulchers for Maelixia.", 355, 340960) + AddQuestStepCompleteAction(Quest, 1, "Step1Complete") +end + +function Step1Complete(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 1, "I have gathered the ooze") + + AddQuestStepChat(Quest, 2, "Bring this ooze back to Maelixia", 1, "I need ooze from the slimy mulchers for Maelixia.", 355, 340171) + AddQuestStepCompleteAction(Quest, 2, "QuestComplete") +end + +function QuestComplete(Quest, QuestGiver, Player) + -- The following UpdateQuestStepDescription and UpdateTaskGroupDescription are not needed, parser adds them for completion in case stuff needs to be moved around + UpdateQuestStepDescription(Quest, 2, "I have given Maelixia the ooze") + UpdateQuestTaskGroupDescription(Quest, 1, "I have brought Maelixia the ooze.") + + UpdateQuestDescription(Quest, "I have brought Maelixia the slime from the mulchers.") + GiveQuestReward(Quest, Player) +end + +function Reload(Quest, QuestGiver, Player, Step) + if Step == 1 then + Step1Complete(Quest, QuestGiver, Player) + elseif Step == 2 then + QuestComplete(Quest, QuestGiver, Player) + end +end + +function Accepted(Quest, QuestGiver, Player) + -- Add dialog here for when the quest is accepted +end + +function Declined(Quest, QuestGiver, Player) + -- Add dialog here for when the quest is declined +end diff --git a/server/Quests/Darklight/NoUndeadGoesUnturned.lua b/server/Quests/Darklight/NoUndeadGoesUnturned.lua new file mode 100644 index 000000000..689c691f0 --- /dev/null +++ b/server/Quests/Darklight/NoUndeadGoesUnturned.lua @@ -0,0 +1,50 @@ +--[[ + Script Name : Quests/Darklight/NoUndeadGoesUnturned.lua + Script Purpose : Handles the quest, "No Undead Goes Unturned" + Script Author : Cynnar + Script Date : 8/17/2015 + Script Notes : + + Zone : Darklight Wood + Quest Giver : Sselnyl Do'Zyth + Preceded by : None + Followed by : Thexian Taint +--]] + +function Init(Quest) + AddQuestStepObtainItem(Quest, 1, "Retrieve the remains of the Thexian Dragoon-General.", 1, 100, "I must search the recently excavated tomb north of Hate's Envy for the remains of the Dragoon-General.", 91, 14386) + AddQuestStepCompleteAction(Quest, 1, "Step1Complete") +end + +function Step1Complete(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 1, "I found the remains of the Thexian Dragoon-General.") + + AddQuestStepChat(Quest, 2, "Bring the remains to Sselnyl", 1, "I must search the recently excavated tomb north of Hate's Envy for the remains of the Dragoon-General.", 11, 340021) + AddQuestStepCompleteAction(Quest, 2, "QuestComplete") +end + +function QuestComplete(Quest, QuestGiver, Player) + UpdateQuestDescription(Quest, "I found the remains of the Thexian Dragoon General and returned them to Sselnyl Do'Zyth, the mayor of Hate's Envy.") + RemoveItem(Player, 14386) + GiveQuestReward(Quest, Player) +end + +function Reload(Quest, QuestGiver, Player, Step) + if Step == 1 then + Step1Complete(Quest, QuestGiver, Player) + elseif Step == 2 then + QuestComplete(Quest, QuestGiver, Player) + end +end + +function Accepted(Quest, QuestGiver, Player) + FaceTarget(QuestGiver, Player) + conversation = CreateConversation() + + PlayFlavor(QuestGiver, "sselnyl_do_zyth/darklight_wood/hates_envy/sselnyl_revamp/sselnyl005.mp3", "", "", 2966552414, 1013655055, Player) + AddConversationOption(conversation, "I will return shortly with the remains.") + StartConversation(conversation, QuestGiver, Player, "With haste, " ..GetName(Player).. ".") +end + +function Declined(Quest, QuestGiver, Player) +end \ No newline at end of file diff --git a/server/Quests/Darklight/OneMan'sWaste....lua b/server/Quests/Darklight/OneMan'sWaste....lua new file mode 100644 index 000000000..ff668ec7f --- /dev/null +++ b/server/Quests/Darklight/OneMan'sWaste....lua @@ -0,0 +1,60 @@ +--[[ + Script Name : Quests/Darklight/OneMan'sWaste....lua + Script Purpose : Handles the quest, "One Man's Waste..." + Script Author : Cynnar + Script Date : 8/30/2015 + Script Notes : + + Zone : Darklight Wood + Quest Giver : Ilmtar D'Viervs + Preceded by : What's in Demand? + Followed by : Useful Materials +--]] + + +function Init(Quest) + AddQuestStepObtainItem(Quest, 1, "Search outside T'Vatar Outpost for old weapons", 6, 100, "Ilmtar D'Viervs wants me to collect some old weapons just outside T'Vatar Outpost.", 5, 6485) + AddQuestStepCompleteAction(Quest, 1, "Step1Complete") +end + +function Step1Complete(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 1, "I have collected several old weapons") + + AddQuestStepChat(Quest, 2, "Bring these weapons to Ilmtar D'Viervs", 1, "Ilmtar D'Viervs wants me to collect some old weapons just outside T'Vatar Outpost.", 5, 340076) + AddQuestStepCompleteAction(Quest, 2, "QuestComplete") +end + +function QuestComplete(Quest, QuestGiver, Player) + UpdateQuestDescription(Quest, "I have collected the old weapons for Ilmtar.") + while HasItem(Player, 6485, 1) do + RemoveItem(Player, 6485) + end + GiveQuestReward(Quest, Player) +end + +function Reload(Quest, QuestGiver, Player, Step) + if Step == 1 then + Step1Complete(Quest, QuestGiver, Player) + elseif Step == 2 then + QuestComplete(Quest, QuestGiver, Player) + end +end + +function Accepted(Quest, QuestGiver, Player) + FaceTarget(QuestGiver, Player) + local con = CreateConversation() + + PlayFlavor(QuestGiver, "", "", "", 0, 0, Player) + AddConversationOption(con, "I'll see what can I dig up.") + StartConversation(con, QuestGiver, Player, "Once you've collected a decent number of weapons return them to me.") +end + +function Declined(Quest, QuestGiver, Player) + -- Add dialog here for when the quest is declined +end + +function Deleted(Quest, Spawn) + while HasItem(Player, 6485, 1) do + RemoveItem(Player, 6485) + end +end \ No newline at end of file diff --git a/server/Quests/Darklight/OtherMaterials.lua b/server/Quests/Darklight/OtherMaterials.lua new file mode 100644 index 000000000..be44257a0 --- /dev/null +++ b/server/Quests/Darklight/OtherMaterials.lua @@ -0,0 +1,60 @@ +--[[ + Script Name : OtherMaterials.lua + Script Purpose : Handles the quest, "Other Materials?" + Script Author : FeaRFx + Script Date : 26/01/2017 + Script Notes : + + Zone : Darklight Wood + Quest Giver : + Preceded by : None + Followed by : None +--]] + + +function Init(Quest) + AddQuestStepObtainItem(Quest, 1, "I need three rock samples from near the Warpfont Spire.", 3, 100, "I need to collect rocks from the Warpfont Spire and the Harrowglade for Geldax Xalylharil.", 188, 15326) + AddQuestStepCompleteAction(Quest, 1, "Step1Complete") +end + +function Step1Complete(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 1, "I have the rocks from the Warpfont Spire.") + + AddQuestStepObtainItem(Quest, 2, "I need three rock samples from the Harrowglade.", 3, 100, "I need to collect rocks from the Warpfont Spire and the Harrowglade for Geldax Xalylharil.", 188, 8056) + AddQuestStepCompleteAction(Quest, 2, "Step2Complete") +end + +function Step2Complete(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 2, "I have the rocks from the Harrowglade.") + UpdateQuestTaskGroupDescription(Quest, 1, "I have collected the rocks.") + + AddQuestStepChat(Quest, 3, "I must return to Geldax Xalylharil.", 1, "I need to bring the rocks back to Geldax Xalylharil.", 188, 340147) + AddQuestStepCompleteAction(Quest, 3, "QuestComplete") +end + +function QuestComplete(Quest, QuestGiver, Player) + -- The following UpdateQuestStepDescription and UpdateTaskGroupDescription are not needed, parser adds them for completion in case stuff needs to be moved around + UpdateQuestStepDescription(Quest, 3, "I have given Geldax Xalylharil the rocks.") + UpdateQuestTaskGroupDescription(Quest, 2, "I have brought the rocks to Geldax Xalylharil.") + + UpdateQuestDescription(Quest, "I have collected rocks from the Warpfont Spire and the Harrowglade and given them to Geldax Xalylharil.") + GiveQuestReward(Quest, Player) +end + +function Reload(Quest, QuestGiver, Player, Step) + if Step == 1 then + Step1Complete(Quest, QuestGiver, Player) + elseif Step == 2 then + Step2Complete(Quest, QuestGiver, Player) + elseif Step == 3 then + QuestComplete(Quest, QuestGiver, Player) + end +end + +function Accepted(Quest, QuestGiver, Player) + -- Add dialog here for when the quest is accepted +end + +function Declined(Quest, QuestGiver, Player) + -- Add dialog here for when the quest is declined +end diff --git a/server/Quests/Darklight/PickingUpSlack.lua b/server/Quests/Darklight/PickingUpSlack.lua new file mode 100644 index 000000000..ba3a198d3 --- /dev/null +++ b/server/Quests/Darklight/PickingUpSlack.lua @@ -0,0 +1,52 @@ +--[[ + Script Name : Quests/Darklight/PickingUpSlack.lua + Script Purpose : Handles the quest, "Picking Up Slack" + Script Author : Cynnar + Script Date : 8/30/2015 + Script Notes : Quest ID 139 + + Zone : Darklight Wood + Quest Giver : Ginwyss D'Arkenett + Preceded by : Rotting Scum ID 138 + Followed by : A Guard Insignia? +--]] + + +function Init(Quest) + AddQuestStepObtainItem(Quest, 1, "Collect armor scraps from moldering soldiers", 5, 100, "Ginwyss D'Arkenett wants me to collect scraps of armor from the moldering soldiers found north of T'Vatar Outpost.", 734, 11996) + AddQuestStepCompleteAction(Quest, 1, "Step1Complete") +end + +function Step1Complete(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 1, "I collected several scraps of armor") + + AddQuestStepChat(Quest, 2, "I need to return to Ginwyss", 1, "Ginwyss D'Arkenett wants me to collect scraps of armor from the moldering soldiers found north of T'Vatar Outpost.", 11, 340064) + AddQuestStepCompleteAction(Quest, 2, "QuestComplete") +end + +function QuestComplete(Quest, QuestGiver, Player) + UpdateQuestDescription(Quest, "I have spoken with Ginwyss") + while HasItem(Player, 11996, 1) do + RemoveItem(Player, 11996) + end + GiveQuestReward(Quest, Player) +end + +function Reload(Quest, QuestGiver, Player, Step) + if Step == 1 then + Step1Complete(Quest, QuestGiver, Player) + elseif Step == 2 then + QuestComplete(Quest, QuestGiver, Player) + end +end + +function Accepted(Quest, QuestGiver, Player) + FaceTarget(QuestGiver, Player) + + PlayFlavor(QuestGiver, "voiceover/english/voice_emotes/greetings/greetings_3_1047.mp3", "", "", 0, 0, Player) + Say(QuestGiver, "Once you have collected enough scrap pieces, return them to me.") +end + +function Declined(Quest, QuestGiver, Player) + -- Add dialog here for when the quest is declined +end \ No newline at end of file diff --git a/server/Quests/Darklight/PotentialThreats.lua b/server/Quests/Darklight/PotentialThreats.lua new file mode 100644 index 000000000..948753bb9 --- /dev/null +++ b/server/Quests/Darklight/PotentialThreats.lua @@ -0,0 +1,50 @@ +--[[ + Script Name : PotentialThreats.lua + Script Purpose : Handles the quest, "Potential Threats" + Script Author : FeaRFx + Script Date : 26/01/2017 + Script Notes : + + Zone : Darklight Wood + Quest Giver : + Preceded by : None + Followed by : None +--]] + + +function Init(Quest) + AddQuestStepKill(Quest, 1, "I need to kill Sableflame outriders, fanatics, or heralds.", 8, 100, "I need to kill the Sableflame outriders, fanatics, and heralds.", 611, 340937, 340109, 340939) + AddQuestStepCompleteAction(Quest, 1, "Step1Complete") +end + +function Step1Complete(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 1, "I have slain the Sableflame cultists.") + + AddQuestStepChat(Quest, 2, "I need to return to Gaussnitra V'Kilana.", 1, "I need to kill the Sableflame outriders, fanatics, and heralds.", 11, 341003) + AddQuestStepCompleteAction(Quest, 2, "QuestComplete") +end + +function QuestComplete(Quest, QuestGiver, Player) + -- The following UpdateQuestStepDescription and UpdateTaskGroupDescription are not needed, parser adds them for completion in case stuff needs to be moved around + UpdateQuestStepDescription(Quest, 2, "I have spoken with Gaussnitra V'Kilana.") + UpdateQuestTaskGroupDescription(Quest, 1, "I have killed the Sableflame cultists.") + + UpdateQuestDescription(Quest, "I have slain the Sableflame cultists for Gaussnitra V'Kilana.") + GiveQuestReward(Quest, Player) +end + +function Reload(Quest, QuestGiver, Player, Step) + if Step == 1 then + Step1Complete(Quest, QuestGiver, Player) + elseif Step == 2 then + QuestComplete(Quest, QuestGiver, Player) + end +end + +function Accepted(Quest, QuestGiver, Player) + -- Add dialog here for when the quest is accepted +end + +function Declined(Quest, QuestGiver, Player) + -- Add dialog here for when the quest is declined +end diff --git a/server/Quests/Darklight/PreparingARitual.lua b/server/Quests/Darklight/PreparingARitual.lua new file mode 100644 index 000000000..745165b86 --- /dev/null +++ b/server/Quests/Darklight/PreparingARitual.lua @@ -0,0 +1,50 @@ +--[[ + Script Name : PreparingaRitual.lua + Script Purpose : Handles the quest, "Preparing a Ritual" + Script Author : QuestParser (Replace this) + Script Date : 26/01/2017 + Script Notes : + + Zone : Darklight Wood + Quest Giver : + Preceded by : None + Followed by : None +--]] + + +function Init(Quest) + AddQuestStepObtainItem(Quest, 1, "I need Fire Tear gems from Sableflame Crater.", 5, 100, "I need to collect Fire Tear gems for Belarshalee Do'Torlyl.", 771, 7262) + AddQuestStepCompleteAction(Quest, 1, "Step1Complete") +end + +function Step1Complete(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 1, "I have the Fire Tears.") + + AddQuestStepChat(Quest, 2, "I need to return to Belarshalee Do'Torlyl.", 1, "I need to collect Fire Tear gems for Belarshalee Do'Torlyl.", 11, 340173) + AddQuestStepCompleteAction(Quest, 2, "QuestComplete") +end + +function QuestComplete(Quest, QuestGiver, Player) + -- The following UpdateQuestStepDescription and UpdateTaskGroupDescription are not needed, parser adds them for completion in case stuff needs to be moved around + UpdateQuestStepDescription(Quest, 2, "I have spoken with Belarshalee Do'Torlyl.") + UpdateQuestTaskGroupDescription(Quest, 1, "I have brought the Fire Tear gems for Belarshalee Do'Torlyl.") + + UpdateQuestDescription(Quest, "I have brought the Fire Tears back to Belarshalee Do'Torlyl.") + GiveQuestReward(Quest, Player) +end + +function Reload(Quest, QuestGiver, Player, Step) + if Step == 1 then + Step1Complete(Quest, QuestGiver, Player) + elseif Step == 2 then + QuestComplete(Quest, QuestGiver, Player) + end +end + +function Accepted(Quest, QuestGiver, Player) + -- Add dialog here for when the quest is accepted +end + +function Declined(Quest, QuestGiver, Player) + -- Add dialog here for when the quest is declined +end \ No newline at end of file diff --git a/server/Quests/Darklight/ProwlerAnnoyance.lua b/server/Quests/Darklight/ProwlerAnnoyance.lua new file mode 100644 index 000000000..44d36dba5 --- /dev/null +++ b/server/Quests/Darklight/ProwlerAnnoyance.lua @@ -0,0 +1,51 @@ +--[[ + Script Name : ProwlerAnnoyance.lua + Script Purpose : Handles the quest, "Prowler Annoyance" + Script Author : Cynnar + Script Date : 7/27/2015 + Script Notes : + + Zone : Darklight Wood + Quest Giver : Jhana Do'Zyth + Preceded by : An Authority on Hate (AnAuthorityonHate.lua) + Followed by : A Ferocious Inconvenience (AFerociousInconvenience.lua) +--]] + + +function Init(Quest) + AddQuestStepKill(Quest, 1, "Kill several dusk prowlers", 5, 100, "Jhana Do'Zyth has asked me to cull a number of the dusk prowlers found northeast of Hate's Envy.", 96, 340054) + AddQuestStepCompleteAction(Quest, 1, "Step1Complete") +end + +function Step1Complete(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 1, "I have slain a number of dusk prowlers") + + AddQuestStepChat(Quest, 2, "Return to Jhana Do'Zyth", 1, "Jhana Do'Zyth has asked me to cull a number of the dusk prowlers found northeast of Hate's Envy.", 11, 340027) + AddQuestStepCompleteAction(Quest, 2, "QuestComplete") +end + +function QuestComplete(Quest, QuestGiver, Player) + UpdateQuestDescription(Quest, "I have fulfilled Jhana's request by culling a number of dusk prowlers.") + GiveQuestReward(Quest, Player) +end + +function Reload(Quest, QuestGiver, Player, Step) + if Step == 1 then + Step1Complete(Quest, QuestGiver, Player) + elseif Step == 2 then + QuestComplete(Quest, QuestGiver, Player) + end +end + +function Accepted(Quest, QuestGiver, Player) + FaceTarget(QuestGiver, Player) + conversation = CreateConversation() + + PlayFlavor(QuestGiver, "jhana_do_zyth/darklight_wood/hates_envy/jhana_revamp/jhana004.mp3", "", "", 2033106753, 62697825, Player) + AddConversationOption(conversation, "I will return once the deed is done.") + StartConversation(conversation, QuestGiver, Player, "Excellent, Ayeecaith. I eagerly await your return.") +end + +function Declined(Quest, QuestGiver, Player) + -- Add dialog here for when the quest is declined +end \ No newline at end of file diff --git a/server/Quests/Darklight/PublicService.lua b/server/Quests/Darklight/PublicService.lua new file mode 100644 index 000000000..decd941a4 --- /dev/null +++ b/server/Quests/Darklight/PublicService.lua @@ -0,0 +1,69 @@ +--[[ + Script Name : Quests/Darklight/PublicService.lua + Script Purpose : Handles the quest, "Public Service" + Script Author : Cynnar + Script Date : 8/30/2015 + Script Notes : + + Zone : Darklight Wood + Quest Giver : Laexyra Y'Barriath + Preceded by : Purposeful Trinkets + Followed by : A Friendly Reminder +--]] + +local PublicService = 150 + +function Init(Quest) + AddQuestStepKill(Quest, 1, "Destroy several purulent defenders", 8, 100, "I need to destroy a number of the undead soldiers north of T'Vatar Post.", 611, 340085) + AddQuestStepKill(Quest, 2, "Destroy several moldering soldiers", 5, 100, "I need to destroy a number of the undead soldiers north of T'Vatar Post.", 611, 340084) + AddQuestStepCompleteAction(Quest, 1, "PurulentDefenders") + AddQuestStepCompleteAction(Quest, 2, "MolderingSoldiers") +end + +function PurulentDefenders(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 1, "I have slain the purulent defenders") + CheckProgress(Quest, QuestGiver, Player) +end + +function MolderingSoldiers(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 2, "I have slain the moldering soldiers") + CheckProgress(Quest, QuestGiver, Player) +end + +function CheckProgress(Quest, QuestGiver, Player) + if QuestStepIsComplete(Player, PublicService, 1) and QuestStepIsComplete(Player, PublicService, 2) then + UpdateQuestTaskGroupDescription(Quest, 1, "I have killed the undead soldiers for Laexyra.") + UndeadSoldiersComplete(Quest, QuestGiver, Player) + end +end + +function UndeadSoldiersComplete(Quest, QuestGiver, Player) + SetCompleteFlag(Quest) + AddQuestStepChat(Quest, 3, "Speak with Laexyra Y'Barriath", 1, "I should return to Laexyra Y'Barriath now that I have thinned out the undead.", 11, 340075) + AddQuestStepCompleteAction(Quest, 3, "QuestComplete") +end + +function QuestComplete(Quest, QuestGiver, Player) + UpdateQuestDescription(Quest, "I have thinned out the undead population north of T'Vatar Post.") + GiveQuestReward(Quest, Player) +end + +function Reload(Quest, QuestGiver, Player, Step) + if QuestStepIsComplete(Player, PublicService, 1) then + PurulentDefenders(Quest, QuestGiver, Player) + end + if QuestStepIsComplete(Player, PublicService, 2) then + MolderingSoldiers(Quest, QuestGiver, Player) + end + if Step == 3 then + QuestComplete(Quest, QuestGiver, Player) + end +end + +function Accepted(Quest, QuestGiver, Player) + Say(QuestGiver, "Return to me when you are finished.") +end + +function Declined(Quest, QuestGiver, Player) + -- Add dialog here for when the quest is declined +end \ No newline at end of file diff --git a/server/Quests/Darklight/PurposefulTrinkets.lua b/server/Quests/Darklight/PurposefulTrinkets.lua new file mode 100644 index 000000000..7f8340f2e --- /dev/null +++ b/server/Quests/Darklight/PurposefulTrinkets.lua @@ -0,0 +1,53 @@ +--[[ + Script Name : Quests/Darklight/PurposefulTrinkets.lua + Script Purpose : Handles the quest, "Purposeful Trinkets" + Script Author : Cynnar + Script Date : 8/30/2015 + Script Notes : Quest ID 149 + + Zone : Darklight Wood + Quest Giver : Laexyra Y'Barriath (340075) + Preceded by : None + Followed by : Public Service +--]] + + +function Init(Quest) + AddQuestStepHarvest(Quest, 1, "Collect five soldier's trinkets.", 5, 100, "Laexyra Y'Barriath wants trinkets from the soldiers in the field southwest of T'Vatar Post.", 368, 13083) + AddQuestStepCompleteAction(Quest, 1, "Step1Complete") +end + +function Step1Complete(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 1, "I have collected the trinkets.") + + AddQuestStepChat(Quest, 2, "Return to Laexyra Y'Barriath.", 1, "Laexyra Y'Barriath wants trinkets from the soldiers in the field southwest of T'Vatar Post.", 11, 340075) + AddQuestStepCompleteAction(Quest, 2, "QuestComplete") +end + +function QuestComplete(Quest, QuestGiver, Player) + UpdateQuestDescription(Quest, "I have collected the trinkets for Laexyra Y'Barriath.") + while HasItem(Player, 13083, 1) do + RemoveItem(Player, 13083) + end + GiveQuestReward(Quest, Player) +end + +function Reload(Quest, QuestGiver, Player, Step) + if Step == 1 then + Step1Complete(Quest, QuestGiver, Player) + elseif Step == 2 then + QuestComplete(Quest, QuestGiver, Player) + end +end + +function Accepted(Quest, QuestGiver, Player) + FaceTarget(QuestGiver, Player) + conversation = CreateConversation() + + AddConversationOption(conversation, "I'll be back.") + StartConversation(conversation, QuestGiver, Player, "Good.") +end + +function Declined(Quest, QuestGiver, Player) + -- Add dialog here for when the quest is declined +end \ No newline at end of file diff --git a/server/Quests/Darklight/Reagents.lua b/server/Quests/Darklight/Reagents.lua new file mode 100644 index 000000000..d3c247462 --- /dev/null +++ b/server/Quests/Darklight/Reagents.lua @@ -0,0 +1,50 @@ +--[[ + Script Name : Reagents.lua + Script Purpose : Handles the quest, "Reagents" + Script Author : FeaRFx + Script Date : 26/01/2017 + Script Notes : + + Zone : Darklight Wood + Quest Giver : + Preceded by : None + Followed by : None +--]] + + +function Init(Quest) + AddQuestStepKill(Quest, 1, "I need dust from the T'Rethir vampires", 10, 100, "I need vampire dust for Maelixia.", 181, 340159, 340161, 340156, 340157, 340160, 340155, 340162) + AddQuestStepCompleteAction(Quest, 1, "Step1Complete") +end + +function Step1Complete(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 1, "I have collected the vampire dust") + + AddQuestStepChat(Quest, 2, "Bring this dust to Maelixia", 1, "I need vampire dust for Maelixia.", 181, 340171) + AddQuestStepCompleteAction(Quest, 2, "QuestComplete") +end + +function QuestComplete(Quest, QuestGiver, Player) + -- The following UpdateQuestStepDescription and UpdateTaskGroupDescription are not needed, parser adds them for completion in case stuff needs to be moved around + UpdateQuestStepDescription(Quest, 2, "I have given Maelixia the dust") + UpdateQuestTaskGroupDescription(Quest, 1, "I have given Maelixia the vampire dust.") + + UpdateQuestDescription(Quest, "I have brought the vampire dust to Maelixia.") + GiveQuestReward(Quest, Player) +end + +function Reload(Quest, QuestGiver, Player, Step) + if Step == 1 then + Step1Complete(Quest, QuestGiver, Player) + elseif Step == 2 then + QuestComplete(Quest, QuestGiver, Player) + end +end + +function Accepted(Quest, QuestGiver, Player) + -- Add dialog here for when the quest is accepted +end + +function Declined(Quest, QuestGiver, Player) + -- Add dialog here for when the quest is declined +end \ No newline at end of file diff --git a/server/Quests/Darklight/Reaping.lua b/server/Quests/Darklight/Reaping.lua new file mode 100644 index 000000000..78e201a2c --- /dev/null +++ b/server/Quests/Darklight/Reaping.lua @@ -0,0 +1,53 @@ +--[[ + Script Name : Quests/Darklight/Reaping.lua + Script Purpose : Handles the quest, "Reaping" (152) + Script Author : Cynnar + Script Date : 8/30/2015 + Script Notes : + + Zone : Darklight Wood + Quest Giver : Laexyra Y'Barriath + Preceded by : A Friendly Reminder + Followed by : Condemned +--]] + + +function Init(Quest) + AddQuestStep(Quest, 1, "Collect spirits from the rangers and cadavers south of T'Vatar Post", 5, 100, "I need to trap the spirits of the soldiers in the field south of T'Vatar Post.", 2516) + AddQuestStepCompleteAction(Quest, 1, "Step1Complete") +end + +function Step1Complete(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 1, "I have collected the spirits for Laexyra Y'Barriath") + + AddQuestStepChat(Quest, 2, "Bring the spirits back to Laexyra Y'Barriath", 1, "I need to trap the spirits of the soldiers in the field south of T'Vatar Post.", 2516, 340075) + AddQuestStepCompleteAction(Quest, 2, "QuestComplete") +end + +function QuestComplete(Quest, QuestGiver, Player) + RemoveItem(Player, 48173) + UpdateQuestDescription(Quest, "I have trapped the spirits for Laexyra Y'Barriath.") + GiveQuestReward(Quest, Player) +end + +function Reload(Quest, QuestGiver, Player, Step) + if Step == 1 then + Step1Complete(Quest, QuestGiver, Player) + elseif Step == 2 then + QuestComplete(Quest, QuestGiver, Player) + end +end + +function Accepted(Quest, QuestGiver, Player) + if HasItem(Player, 48173) == false then + SummonItem(Player, 48173, 1) + end + FaceTarget(QuestGiver, Player) + conversation = CreateConversation() + + Say(QuestGiver, "Return to me when you've trapped them.") +end + +function Declined(Quest, QuestGiver, Player) + -- Add dialog here for when the quest is declined +end \ No newline at end of file diff --git a/server/Quests/Darklight/ReapingTheBenefitsOfAMonopoly.lua b/server/Quests/Darklight/ReapingTheBenefitsOfAMonopoly.lua new file mode 100644 index 000000000..80d129334 --- /dev/null +++ b/server/Quests/Darklight/ReapingTheBenefitsOfAMonopoly.lua @@ -0,0 +1,53 @@ +--[[ + Script Name : ReapingtheBenefitsofaMonopoly.lua + Script Purpose : Handles the quest, "Reaping the Benefits of a Monopoly" + Script Author : FeaRFX + Script Date : 25/01/2017 + Script Notes : + + Zone : Darklight Wood + Quest Giver : + Preceded by : None + Followed by : None +--]] + + +function Init(Quest) + AddQuestStepObtainItem(Quest, 1, "Fish up searing trout", 8, 100, "Dirzdia wants some searing trout from the Lower Tendril River.", 2542, 37182) + AddQuestStepCompleteAction(Quest, 1, "Step1Complete") +end + +function Step1Complete(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 1, "I have caught the trout") + + AddQuestStepChat(Quest, 2, "Bring these trout back to Dirzdia", 1, "Dirzdia wants some searing trout from the Lower Tendril River.", 2542, 140025) + AddQuestStepCompleteAction(Quest, 2, "QuestComplete") +end + +function QuestComplete(Quest, QuestGiver, Player) + -- The following UpdateQuestStepDescription and UpdateTaskGroupDescription are not needed, parser adds them for completion in case stuff needs to be moved around + UpdateQuestStepDescription(Quest, 2, "I have given Dirzdia the trout") + UpdateQuestTaskGroupDescription(Quest, 1, "I have brought Dirzdia the searing trout.") + + UpdateQuestDescription(Quest, "I have caught the searing trout and brought them back to Dirzdia.") + while HasItem(Player, 37182, 1) do + RemoveItem(Player, 37182) + end + GiveQuestReward(Quest, Player) +end + +function Reload(Quest, QuestGiver, Player, Step) + if Step == 1 then + Step1Complete(Quest, QuestGiver, Player) + elseif Step == 2 then + QuestComplete(Quest, QuestGiver, Player) + end +end + +function Accepted(Quest, QuestGiver, Player) + -- Add dialog here for when the quest is accepted +end + +function Declined(Quest, QuestGiver, Player) + -- Add dialog here for when the quest is declined +end \ No newline at end of file diff --git a/server/Quests/Darklight/ReclaimingtheSableveinTear.lua b/server/Quests/Darklight/ReclaimingtheSableveinTear.lua new file mode 100644 index 000000000..4099baaab --- /dev/null +++ b/server/Quests/Darklight/ReclaimingtheSableveinTear.lua @@ -0,0 +1,51 @@ +--[[ + Script Name : Quests/Darklight/ReclaimingtheSableveinTear.lua + Script Purpose : Handles the quest, "Reclaiming the Sablevein Tear" + Script Author : Cynnar + Script Date : 7/24/2015 + Script Notes : + + Zone : Darklight Wood + Quest Giver : Pellandra D'Xatyl + Preceded by : Searching for Sigils (SearchingforSigils.lua) + Followed by : An Authority on Hate (AnAuthorityonHate.lua) +--]] + + +function Init(Quest) + AddQuestStepKill(Quest, 1, "Find the source of the Sablevein attacks and put an end to it", 1, 100, "I must explore inside Sablevein Tear for the source of the recent elemental attacks and put it to an end.", 611, 340069) + AddQuestStepCompleteAction(Quest, 1, "Step1Complete") +end + +function Step1Complete(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 1, "I slew the Thexian Occultist") + + AddQuestStepChat(Quest, 2, "Return to Pellandra D'Xatyl", 1, "I must explore inside Sablevein Tear for the source of the recent elemental attacks and put it to an end.", 11, 340038) + AddQuestStepCompleteAction(Quest, 2, "QuestComplete") +end + +function QuestComplete(Quest, QuestGiver, Player) + UpdateQuestDescription(Quest, "I found the Thexian Occultist located inside Sablevein Tear and defeated her.") + GiveQuestReward(Quest, Player) +end + +function Reload(Quest, QuestGiver, Player, Step) + if Step == 1 then + Step1Complete(Quest, QuestGiver, Player) + elseif Step == 2 then + QuestComplete(Quest, QuestGiver, Player) + end +end + +function Accepted(Quest, QuestGiver, Player) + FaceTarget(QuestGiver, Player) + conversation = CreateConversation() + + PlayFlavor(QuestGiver, "pellandra_d_xatyl/darklight_wood/hates_envy/pellandra_revamp/pellandra020.mp3", "", "", 2226921822, 2344985662, Player) + AddConversationOption(conversation, "I will return shortly.") + StartConversation(conversation, QuestGiver, Player, "I await your return.") +end + +function Declined(Quest, QuestGiver, Player) + -- Add dialog here for when the quest is declined +end \ No newline at end of file diff --git a/server/Quests/Darklight/ReporttoZezas.lua b/server/Quests/Darklight/ReporttoZezas.lua new file mode 100644 index 000000000..94b45deb8 --- /dev/null +++ b/server/Quests/Darklight/ReporttoZezas.lua @@ -0,0 +1,37 @@ +--[[ + Script Name : Quests/Darklight/ReporttoZezas.lua + Script Purpose : Handles the quest, "Report to Zezas" + Script Author : Cynnar + Script Date : 8/30/2015 + Script Notes : + + Zone : Darklight Wood + Quest Giver : Laexyra Y'Barriath + Preceded by : Condemned + Followed by : Finding the Dark Bargainers +--]] + + +function Init(Quest) + AddQuestStepChat(Quest, 1, "I need to speak with Zezas X'Zauzin. He should be just inside Neriak.", 1, "I need to speak with Zezas X'Zauzin.", 11, 0) + AddQuestStepCompleteAction(Quest, 1, "QuestComplete") +end + +function QuestComplete(Quest, QuestGiver, Player) + UpdateQuestDescription(Quest, "I have spoken with Zezas X'Zauzin.") + GiveQuestReward(Quest, Player) +end + +function Reload(Quest, QuestGiver, Player, Step) + if Step == 1 then + QuestComplete(Quest, QuestGiver, Player) + end +end + +function Accepted(Quest, QuestGiver, Player) + -- Add dialog here for when the quest is accepted +end + +function Declined(Quest, QuestGiver, Player) + -- Add dialog here for when the quest is declined +end \ No newline at end of file diff --git a/server/Quests/Darklight/ResonanceCapture.lua b/server/Quests/Darklight/ResonanceCapture.lua new file mode 100644 index 000000000..e8a18fd82 --- /dev/null +++ b/server/Quests/Darklight/ResonanceCapture.lua @@ -0,0 +1,50 @@ +--[[ + Script Name : ResonanceCapture.lua + Script Purpose : Handles the quest, "Resonance Capture" + Script Author : FeaRFx + Script Date : 26/01/2017 + Script Notes : + + Zone : Darklight Wood + Quest Giver : + Preceded by : None + Followed by : None +--]] + + +function Init(Quest) + AddQuestStep(Quest, 1, "I need to use the device Geldax gave me on five warped wisplings.", 5, 100, "Geldax Xalylharil wants me to use his device on a number of warped wisplings.", 348) + AddQuestStepCompleteAction(Quest, 1, "Step1Complete") +end + +function Step1Complete(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 1, "I have 'de-warped' five wisps.") + + AddQuestStepChat(Quest, 2, "I need to return to Geldax Xalylharil.", 1, "Geldax Xalylharil wants me to use his device on a number of warped wisplings.", 11, 340147) + AddQuestStepCompleteAction(Quest, 2, "QuestComplete") +end + +function QuestComplete(Quest, QuestGiver, Player) + -- The following UpdateQuestStepDescription and UpdateTaskGroupDescription are not needed, parser adds them for completion in case stuff needs to be moved around + UpdateQuestStepDescription(Quest, 2, "I have given Geldax his device and the warp extract.") + UpdateQuestTaskGroupDescription(Quest, 1, "I have collected warp extract and brought it to Geldax Xalylharil.") + + UpdateQuestDescription(Quest, "I 'de-warped' a number of wisps and brought Geldax Xalylharil his device back.") + GiveQuestReward(Quest, Player) +end + +function Reload(Quest, QuestGiver, Player, Step) + if Step == 1 then + Step1Complete(Quest, QuestGiver, Player) + elseif Step == 2 then + QuestComplete(Quest, QuestGiver, Player) + end +end + +function Accepted(Quest, QuestGiver, Player) + -- Add dialog here for when the quest is accepted +end + +function Declined(Quest, QuestGiver, Player) + -- Add dialog here for when the quest is declined +end diff --git a/server/Quests/Darklight/Revenge.lua b/server/Quests/Darklight/Revenge.lua new file mode 100644 index 000000000..0eaabdeb6 --- /dev/null +++ b/server/Quests/Darklight/Revenge.lua @@ -0,0 +1,50 @@ +--[[ + Script Name : Revenge.lua + Script Purpose : Handles the quest, "Revenge!" + Script Author : FeaRFx + Script Date : 26/01/2017 + Script Notes : + + Zone : Darklight Wood + Quest Giver : + Preceded by : None + Followed by : None +--]] + + +function Init(Quest) + AddQuestStepKill(Quest, 1, "Collect pairs of Sullian fairy wings", 8, 100, "Maelixia wants Sullian fairy wings.", 110, 340151, 340977, 340149, 340150) + AddQuestStepCompleteAction(Quest, 1, "Step1Complete") +end + +function Step1Complete(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 1, "I have collected the wings") + + AddQuestStepChat(Quest, 2, "Bring these wings back to Maelixia", 1, "Maelixia wants Sullian fairy wings.", 11, 340171) + AddQuestStepCompleteAction(Quest, 2, "QuestComplete") +end + +function QuestComplete(Quest, QuestGiver, Player) + -- The following UpdateQuestStepDescription and UpdateTaskGroupDescription are not needed, parser adds them for completion in case stuff needs to be moved around + UpdateQuestStepDescription(Quest, 2, "I have given Maelixia the wings") + UpdateQuestTaskGroupDescription(Quest, 1, "I have brought the wings back to Maelixia.") + + UpdateQuestDescription(Quest, "I have brought Maelixia the fairy wings.") + GiveQuestReward(Quest, Player) +end + +function Reload(Quest, QuestGiver, Player, Step) + if Step == 1 then + Step1Complete(Quest, QuestGiver, Player) + elseif Step == 2 then + QuestComplete(Quest, QuestGiver, Player) + end +end + +function Accepted(Quest, QuestGiver, Player) + -- Add dialog here for when the quest is accepted +end + +function Declined(Quest, QuestGiver, Player) + -- Add dialog here for when the quest is declined +end \ No newline at end of file diff --git a/server/Quests/Darklight/RichFishFlesh.lua b/server/Quests/Darklight/RichFishFlesh.lua new file mode 100644 index 000000000..c0141f6fe --- /dev/null +++ b/server/Quests/Darklight/RichFishFlesh.lua @@ -0,0 +1,40 @@ +--[[ + Script Name : Quests/Darklight/RichFishFlesh.lua + Script Author : fearfx + Script Date : 2017.01.25 07:01:26 + Script Purpose : + + Zone : Darklight + Quest Giver: + Preceded by: None + Followed by: +--]] + +function Init(Quest) + AddQuestStepChat(Quest, 1, "I need to bring Smolderfin's flesh to Calnozz.", 1, "I should bring the rich flesh of Smolderfin to Calnozz J'Melvirr.", 134, 340066) + AddQuestStepCompleteAction(Quest, 1, "QuestComplete") +end + +function QuestComplete(Quest, QuestGiver, Player) + -- The following UpdateQuestStepDescription and UpdateTaskGroupDescription are not needed, parser adds them for completion in case stuff needs to be moved around + UpdateQuestStepDescription(Quest, 1, "I have given Calnozz the flesh.") + UpdateQuestTaskGroupDescription(Quest, 1, "I have brought the flesh of Smolderfin to Calnozz.") + + UpdateQuestDescription(Quest, "I have brought the flesh of Smolderfin to Calnozz.") + RemoveItem(Player, 11524) + GiveQuestReward(Quest, Player) +end + +function Reload(Quest, QuestGiver, Player, Step) + if Step == 1 then + QuestComplete(Quest, QuestGiver, Player) + end +end + +function Accepted(Quest, QuestGiver, Player) + -- Add dialog here for when the quest is accepted +end + +function Declined(Quest, QuestGiver, Player) + -- Add dialog here for when the quest is declined +end diff --git a/server/Quests/Darklight/RottingScum.lua b/server/Quests/Darklight/RottingScum.lua new file mode 100644 index 000000000..0c0aa7656 --- /dev/null +++ b/server/Quests/Darklight/RottingScum.lua @@ -0,0 +1,74 @@ +--[[ + Script Name : Quests/Darklight/RottingScum.lua + Script Purpose : Handles the quest, "Rotting Scum" + Script Author : Cynnar + Script Date : 8/30/2015 + Script Notes : Quest ID 138 + + Zone : Darklight Wood + Quest Giver : Ginwyss d'Arkenett (ID 340064) + Preceded by : Thexian Taint (ID 135) + Followed by : Picking Up Slack (ID 139) +--]] + +local RottingScum = 138 + +function Init(Quest) + AddQuestStepKill(Quest, 1, "I need to kill seven fallen rangers.", 7, 100, "Ginwyss D'Arkenett wants the zombies southwest of T'Vatar Post slain.", 611, 340060) + AddQuestStepKill(Quest, 2, "I need to kill seven stout cadavers.", 7, 100, "Ginwyss D'Arkenett wants the zombies southwest of T'Vatar Post slain.", 611, 340059) + AddQuestStepCompleteAction(Quest, 1, "FallenRangers") + AddQuestStepCompleteAction(Quest, 2, "StoutCadavers") +end + +function FallenRangers(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 1, "I have slain the fallen rangers") + CheckProgress(Quest, QuestGiver, Player) +end + +function StoutCadavers(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 2, "I have slain the stout cadavers") + CheckProgress(Quest, QuestGiver, Player) +end + +function CheckProgress(Quest, QuestGiver, Player) + if QuestStepIsComplete(Player, RottingScum, 1) and QuestStepIsComplete(Player, RottingScum, 2) then + UpdateQuestTaskGroupDescription(Quest, 1, "I have slain the zombies..") + ZombiesComplete(Quest, QuestGiver, Player) + end +end + +function ZombiesComplete(Quest, QuestGiver, Player) + SetCompleteFlag(Quest) + AddQuestStepChat(Quest, 3, "Return to Ginwyss D'Arkenett", 1, "Ginwyss D'Arkenett wants the zombies southwest of T'Vatar Post slain.", 11, 340064) + AddQuestStepCompleteAction(Quest, 3, "QuestComplete") +end + +function QuestComplete(Quest, QuestGiver, Player) + UpdateQuestDescription(Quest, "I have slain the zombies for Ginwyss D'Arkenett.") + GiveQuestReward(Quest, Player) +end + +function Reload(Quest, QuestGiver, Player, Step) + if QuestStepIsComplete(Player, RottingScum, 1) then + FallenRangers(Quest, QuestGiver, Player) + end + if QuestStepIsComplete(Player, RottingScum, 2) then + StoutCadavers(Quest, QuestGiver, Player) + end + if Step == 3 then + QuestComplete(Quest, QuestGiver, Player) + end +end + +function Accepted(Quest, QuestGiver, Player) + FaceTarget(QuestGiver, Player) + conversation = CreateConversation() + + PlayFlavor(QuestGiver, "ginwyss_d_arkenett/darklight_wood/tvatar_post/ginwyss_revamp/ginwyss008.mp3", "", "", 2741628345, 486208170, Player) + Say(QuestGiver, "Return to me after you've " .. '"killed" ' .. "them.") + -- StartConversation(conversation, QuestGiver, Player, "Return to me after you've /"killed/" them.") +end + +function Declined(Quest, QuestGiver, Player) + -- Add dialog here for when the quest is declined +end \ No newline at end of file diff --git a/server/Quests/Darklight/SableveinRubble.lua b/server/Quests/Darklight/SableveinRubble.lua new file mode 100644 index 000000000..c33256c41 --- /dev/null +++ b/server/Quests/Darklight/SableveinRubble.lua @@ -0,0 +1,63 @@ +--[[ + Script Name : Quests/Darklight/SableveinRubble.lua + Script Purpose : Handles the quest, "Sablevein Rubble" + Script Author : QuestParser Cynnar + Script Date : 8/30/2015 + Script Notes : + + Zone : Darklight Wood + Quest Giver : Danya Halfmoon 340018 + Preceded by : None + Followed by : None +--]] + + +function Init(Quest) + AddQuestStepHarvest(Quest, 1, "Gather samples of Sablevein rubble", 6, 100, "Danya Halfmoon would like me to bring her the rubble from Sablevein Tear.", 183, 11836) + AddQuestStepCompleteAction(Quest, 1, "Step1Complete") +end + +function Step1Complete(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 1, "I have collected the Sablevein rubble") + + AddQuestStepChat(Quest, 2, "Bring the rubble back to Danya Halfmoon", 1, "Danya Halfmoon would like me to bring her the rubble from Sablevein Tear.", 183, 340018) + AddQuestStepCompleteAction(Quest, 2, "QuestComplete") +end + +function QuestComplete(Quest, QuestGiver, Player) + -- Sablevein rubble + while HasItem(Player, 11836, 1) do + RemoveItem(Player, 11836) + end + UpdateQuestDescription(Quest, "I have brought Danya the Sablevein rubble she asked for.") + SetTempVariable(Player, "SableOre", nil) + GiveQuestReward(Quest, Player) +end + +function Reload(Quest, QuestGiver, Player, Step) + if Step == 1 then + Step1Complete(Quest, QuestGiver, Player) + elseif Step == 2 then + QuestComplete(Quest, QuestGiver, Player) + end +end + +function Accepted(Quest, QuestGiver, Player) + FaceTarget(QuestGiver, Player) + conversation = CreateConversation() + + PlayFlavor(QuestGiver, "voiceover/english/neriak/danya_halfmoon/darklight_wood/hates_envy/danya/danya005.mp3", "", "", 2830883681, 1931267037, Player) + AddConversationOption(conversation, "I'll be back.") + StartConversation(conversation, QuestGiver, Player, "Good. That will serve to keep my mind off of these people around me.") + SetTempVariable(Player, "SableOre", 0) +end + +function Declined(Quest, QuestGiver, Player) + -- Add dialog here for when the quest is declined +end + +function Deleted(Quest, Spawn) + while HasItem(Player, 11836) do + RemoveItem(Player, 11836) + end +end \ No newline at end of file diff --git a/server/Quests/Darklight/SealingtheRift.lua b/server/Quests/Darklight/SealingtheRift.lua new file mode 100644 index 000000000..e5b5ff420 --- /dev/null +++ b/server/Quests/Darklight/SealingtheRift.lua @@ -0,0 +1,62 @@ +--[[ + Script Name : Quests/Darklight/SealingtheRift.lua + Script Purpose : Handles the quest, "Sealing the Rift" + Script Author : Cynnar + Script Date : 7/5/2015 + Script Notes : + + Zone : Darklight Wood + Quest Giver : Pellandra D'Xatyl + Preceded by : A Solidified Front (ASolidifiedFront.lua) + Followed by : Searching for Sigils (SearchingforSigils.lua) +--]] + + +function Init(Quest) + AddQuestStep(Quest, 1, "Seal one of the newly opened Sablevein rifts", 1, 100, "Pellandra D'Xatyl has ordered me to find one of the newly opened rifts and seal it using any means necessary!", 11, 340760) + AddQuestStepCompleteAction(Quest, 1, "Step1Complete") +end + +function Step1Complete(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 1, "I found and sealed the newly opened rift") + + AddQuestStepChat(Quest, 2, "Return to Pellandra D'Xatyl", 1, "Pellandra D'Xatyl has ordered me to find one of the newly opened rifts and seal it using any means necessary!", 11, 340038) + AddQuestStepCompleteAction(Quest, 2, "QuestComplete") +end + +function QuestComplete(Quest, QuestGiver, Player) + UpdateQuestDescription(Quest, "I sealed one of the Sablevein rifts found south of Hate's Envy.") + GiveQuestReward(Quest, Player) +end + +function Reload(Quest, QuestGiver, Player, Step) + if Step == 1 then + Step1Complete(Quest, QuestGiver, Player) + elseif Step == 2 then + QuestComplete(Quest, QuestGiver, Player) + end +end + +function Accepted(Quest, QuestGiver, Player) + FaceTarget(QuestGiver, Player) + conversation = CreateConversation() + + PlayFlavor(QuestGiver, "pellandra_d_xatyl/darklight_wood/hates_envy/pellandra_revamp/pellandra005.mp3", "", "", 2498536389, 3964718754, Player) + AddConversationOption(conversation, "I will return victorious!") + StartConversation(conversation, QuestGiver, Player, "The citizens of Hate Envy depend upon you, " .. GetName(Player) .. ". Do not fail them.") +end + +function Declined(Quest, QuestGiver, Player) + -- Add dialog here for when the quest is declined +end + +function Deleted(Quest, QuestGiver, Player) + private_spawn_pebble = GetSpawn(Spawn, 340760) + private_spawn_boulder = GetSpawn(Spawn, 340761) + private_spawn_particle1 = GetSpawn(Spawn, 340747) + private_spawn_particle2 = GetSpawn(Spawn, 341218) + AddSpawnAccess(private_spawn_pebble, Spawn) + RemoveSpawnAccess(private_spawn_boulder, Spawn) + RemoveSpawnAccess(private_spawn_particle1, Spawn) + RemoveSpawnAccess(private_spawn_particle2, Spawn) +end \ No newline at end of file diff --git a/server/Quests/Darklight/SearchingforSigils.lua b/server/Quests/Darklight/SearchingforSigils.lua new file mode 100644 index 000000000..91e833e15 --- /dev/null +++ b/server/Quests/Darklight/SearchingforSigils.lua @@ -0,0 +1,51 @@ +--[[ + Script Name : Quests/Darklight/SearchingforSigils.lua + Script Purpose : Handles the quest, "Searching for Sigils" + Script Author : Cynnar + Script Date : 7/8/2015 + Script Notes : + + Zone : Darklight Wood + Quest Giver : Pellandra D'Xatyl + Preceded by : Sealing the Rift (SealingtheRift.lua) + Followed by : Reclaiming the Sablevein Tear (ReclaimingtheSableveinTear.lua) +--]] + + +function Init(Quest) + AddQuestStepObtainItem(Quest, 1, "Collect sigil stones from the Sablevein pulverizers", 4, 100, "I must hunt Sablevein pulverizers found outside Sablevein Tear and collect sigil stones from their remains.", 373, 11837) + AddQuestStepCompleteAction(Quest, 1, "Step1Complete") +end + +function Step1Complete(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 1, "I collected several sigil stones from the Sablevein pulverizers") + + AddQuestStepChat(Quest, 2, "Return to Pellandra D'Xatyl.", 1, "I must hunt Sablevein pulverizers found outside Sablevein Tear and collect sigil stones from their remains.", 11, 340038) + AddQuestStepCompleteAction(Quest, 2, "QuestComplete") +end + +function QuestComplete(Quest, QuestGiver, Player) + UpdateQuestDescription(Quest, "I collected a good number of sigil stones from the remains of the Sablevein pulverizers and brought them to Pellandra.") + GiveQuestReward(Quest, Player) +end + +function Reload(Quest, QuestGiver, Player, Step) + if Step == 1 then + Step1Complete(Quest, QuestGiver, Player) + elseif Step == 2 then + QuestComplete(Quest, QuestGiver, Player) + end +end + +function Accepted(Quest, QuestGiver, Player) + FaceTarget(QuestGiver, Player) + conversation = CreateConversation() + + PlayFlavor(QuestGiver, "pellandra_d_xatyl/darklight_wood/hates_envy/pellandra_revamp/pellandra011.mp3", "", "", 2108547619, 2126682615, Player) + AddConversationOption(conversation, "I'll return shortly.") + StartConversation(conversation, QuestGiver, Player, "The face of our enemy will soon be revealed " .. GetName(Player) .. ". Help us lift the veil so we may face them openly!") +end + +function Declined(Quest, QuestGiver, Player) + -- Add dialog here for when the quest is declined +end \ No newline at end of file diff --git a/server/Quests/Darklight/SmokingTheCompetition.lua b/server/Quests/Darklight/SmokingTheCompetition.lua new file mode 100644 index 000000000..32a6340fd --- /dev/null +++ b/server/Quests/Darklight/SmokingTheCompetition.lua @@ -0,0 +1,50 @@ +--[[ + Script Name : SmokingtheCompetition.lua + Script Purpose : Handles the quest, "Smoking the Competition" + Script Author : QuestParser (Replace this) + Script Date : 23/01/2017 + Script Notes : + + Zone : Darklight Wood + Quest Giver : + Preceded by : None + Followed by : None +--]] + + +function Init(Quest) + AddQuestStepKill(Quest, 1, "I need to kill the razormaw that swim in the Searing Tendril and bring them back to Dirzdia.", 8, 100, "Dirzdia would like me to kill the razormaw that swim in the Searing Tendril.", 139, 340095) + AddQuestStepCompleteAction(Quest, 1, "Step1Complete") +end + +function Step1Complete(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 1, "I have slain the razormaw.") + + AddQuestStepChat(Quest, 2, "I need to bring the razormaw flesh back to Dirzdia.", 1, "Dirzdia would like me to kill the razormaw that swim in the Searing Tendril.", 139, 140025) + AddQuestStepCompleteAction(Quest, 2, "QuestComplete") +end + +function QuestComplete(Quest, QuestGiver, Player) + -- The following UpdateQuestStepDescription and UpdateTaskGroupDescription are not needed, parser adds them for completion in case stuff needs to be moved around + UpdateQuestStepDescription(Quest, 2, "I have given Dirzdia the razormaw flesh.") + UpdateQuestTaskGroupDescription(Quest, 1, "I have slain the razormaw and brought their flesh back to Dirzdia.") + + UpdateQuestDescription(Quest, "I have brought Dirzdia the razormaw flesh she wanted.") + GiveQuestReward(Quest, Player) +end + +function Reload(Quest, QuestGiver, Player, Step) + if Step == 1 then + Step1Complete(Quest, QuestGiver, Player) + elseif Step == 2 then + QuestComplete(Quest, QuestGiver, Player) + end +end + +function Accepted(Quest, QuestGiver, Player) + -- Add dialog here for when the quest is accepted +end + +function Declined(Quest, QuestGiver, Player) + -- Add dialog here for when the quest is declined +end \ No newline at end of file diff --git a/server/Quests/Darklight/SoHotYouCatchThemCooked.lua b/server/Quests/Darklight/SoHotYouCatchThemCooked.lua new file mode 100644 index 000000000..8b457c90d --- /dev/null +++ b/server/Quests/Darklight/SoHotYouCatchThemCooked.lua @@ -0,0 +1,51 @@ +--[[ + Script Name : Quests/Darklight/SoHotYouCatchThemCooked.lua + Script Author : fearfx + Script Date : 2017.01.24 06:01:15 + Script Purpose : + + Zone : Darklight + Quest Giver: + Preceded by: None + Followed by: +--]] + +function Init(Quest) + AddQuestStepHarvest(Quest, 1, "I need to catch eight seared char.", 8, 100, "I need some seared char for Dirzdia.", 2541, 37177) + AddQuestStepCompleteAction(Quest, 1, "Step1Complete") +end + +function Step1Complete(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 1, "I have caught the seared char.") + + AddQuestStepChat(Quest, 2, "I need to bring these fish back to Dirzdia.", 1, "I need some seared char for Dirzdia.", 2541, 140025) + AddQuestStepCompleteAction(Quest, 2, "QuestComplete") +end + +function QuestComplete(Quest, QuestGiver, Player) + -- The following UpdateQuestStepDescription and UpdateTaskGroupDescription are not needed, parser adds them for completion in case stuff needs to be moved around + UpdateQuestStepDescription(Quest, 2, "I have brought the fish to Dirzdia.") + UpdateQuestTaskGroupDescription(Quest, 1, "I have collected the seared char for Dirzdia.") + + UpdateQuestDescription(Quest, "I have brought Dirzdia the seared char she wanted.") + while HasItem(Player, 37177, 1) do + RemoveItem(Player, 37177) + end + GiveQuestReward(Quest, Player) +end + +function Reload(Quest, QuestGiver, Player, Step) + if Step == 1 then + Step1Complete(Quest, QuestGiver, Player) + elseif Step == 2 then + QuestComplete(Quest, QuestGiver, Player) + end +end + +function Accepted(Quest, QuestGiver, Player) + -- Add dialog here for when the quest is accepted +end + +function Declined(Quest, QuestGiver, Player) + -- Add dialog here for when the quest is declined +end \ No newline at end of file diff --git a/server/Quests/Darklight/SorcerousNecessities.lua b/server/Quests/Darklight/SorcerousNecessities.lua new file mode 100644 index 000000000..22c2b3f26 --- /dev/null +++ b/server/Quests/Darklight/SorcerousNecessities.lua @@ -0,0 +1,54 @@ +--[[ + Script Name : Quests/Darklight/SorcerousNecessities.lua + Script Purpose : Handles the quest, "Sorcerous Necessities" + Script Author : Cynnar + Script Date : 8/30/2015 + Script Notes : + + Zone : Darklight Wood + Quest Giver : Ilmtar D'Viervs + Preceded by : Useful Materials + Followed by : Tipping the Scales of Power +--]] + + +function Init(Quest) + AddQuestStepKill(Quest, 1, "Hunt somber screechers for their wings", 8, 100, "Ilmtar D'Viervs wants me to collect screecher wings for him.", 140, 340091, 340092) + AddQuestStepCompleteAction(Quest, 1, "Step1Complete") +end + +function Step1Complete(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 1, "I have collected the screecher wings for Ilmtar") + + AddQuestStepChat(Quest, 2, "Bring these screecher wings to Ilmtar D'Viervs", 1, "Ilmtar D'Viervs wants me to collect screecher wings for him.", 167, 340076) + AddQuestStepCompleteAction(Quest, 2, "QuestComplete") +end + +function QuestComplete(Quest, QuestGiver, Player) + UpdateQuestDescription(Quest, "I have collected the screecher wings for Ilmtar.") + GiveQuestReward(Quest, Player) +end + +function Reload(Quest, QuestGiver, Player, Step) + if Step == 1 then + Step1Complete(Quest, QuestGiver, Player) + elseif Step == 2 then + QuestComplete(Quest, QuestGiver, Player) + end +end + +function Accepted(Quest, QuestGiver, Player) + FaceTarget(QuestGiver, Player) + local con = CreateConversation() + + PlayFlavor(QuestGiver, "", "", "", 0, 0, Player) + AddConversationOption(con, "I'll be back.") + StartConversation(con, QuestGiver, Player, "Good, very good. You can find a colony of bats due west from T'Vatar Outpost.") +end + +function Declined(Quest, QuestGiver, Player) + -- Add dialog here for when the quest is declined +end + +function Deleted(Quest, QuestGiver, Player) +end \ No newline at end of file diff --git a/server/Quests/Darklight/StoptheProblemattheSource.lua b/server/Quests/Darklight/StoptheProblemattheSource.lua new file mode 100644 index 000000000..73ea7f595 --- /dev/null +++ b/server/Quests/Darklight/StoptheProblemattheSource.lua @@ -0,0 +1,66 @@ +--[[ + Script Name : StoptheProblemattheSource.lua + Script Purpose : Handles the quest, "Stop the Problem at the Source" + Script Author : FeaRFx + Script Date : 26/01/2017 + Script Notes : + + Zone : Darklight Wood + Quest Giver : + Preceded by : None + Followed by : None +--]] + +local StopTheProblem = 198 + +function Init(Quest) + AddQuestStepKill(Quest, 1, "I need to kill Alerica.", 1, 100, "I need to take out the Sableflame adherents and Alerica.", 11, 340128) + AddQuestStepKill(Quest, 2, "I need to kill Sableflame adherents.", 8, 100, "I need to take out the Sableflame adherents and Alerica.", 611, 340126) + AddQuestStepCompleteAction(Quest, 1, "KillAlerica") + AddQuestStepCompleteAction(Quest, 2, "KillMobs") +end + + +function CheckProgress(Quest, QuestGiver, Player) + if QuestStepIsComplete(Player, StopTheProblem, 1) and QuestStepComplete(Player, StopTheProblem, 2) then + UpdateQuestTaskGroupDescription(Quest, 1, "I have slain Alerica and the adherents.") + QuestComplete(Quest, QuestGiver, Player) + end +end + +function KillAlerica(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 1, "I have slain Alerica.") + CheckProgress(Quest, QuestGiver, Player) +end + +function KillMobs(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 2, "I have slain the Sableflame adherents.") + CheckProgress(Quest, QuestGiver, Player) +end + +function QuestComplete(Quest, QuestGiver, Player) + -- The following UpdateQuestStepDescription and UpdateTaskGroupDescription are not needed, parser adds them for completion in case stuff needs to be moved around + --UpdateQuestStepDescription(Quest, 3, "I have spoken with Gaussnitra V'Kilana.") + --UpdateQuestTaskGroupDescription(Quest, 2, "I have spoken with Gaussnitra V'Kilana.") + + --UpdateQuestDescription(Quest, "I have slain Alerica and the Sableflame adherents.") + SetCompleteFlag(Quest, Player) + GiveQuestReward(Quest, Player) +end + +function Reload(Quest, QuestGiver, Player, Step) + if QuestStepIsComplete(Player, StopTheProblem, 1) then + KillAlerica(Quest, QuestGiver, Player) + end + if QuestStepIsComplete(Player, StopTheProblem, 2) then + KillMobs(Quest, QuestGiver, Player) + end +end + +function Accepted(Quest, QuestGiver, Player) + -- Add dialog here for when the quest is accepted +end + +function Declined(Quest, QuestGiver, Player) + -- Add dialog here for when the quest is declined +end diff --git a/server/Quests/Darklight/StunningRevelation.lua b/server/Quests/Darklight/StunningRevelation.lua new file mode 100644 index 000000000..91337279b --- /dev/null +++ b/server/Quests/Darklight/StunningRevelation.lua @@ -0,0 +1,55 @@ +--[[ + Script Name : Quests/Darklight/StunningRevelation.lua + Script Purpose : Handles the quest, "Stunning Revelation" + Script Author : Cynnar + Script Date : 8/30/2015 + Script Notes : + + Zone : Darklight Wood + Quest Giver : Calnozz J'Melvirr + Preceded by : To Draw Upon Wellsprings + Followed by : Infantile Ingredients +--]] + + +function Init(Quest) + AddQuestStepObtainItem(Quest, 1, "Collect stunspore mushroom caps", 5, 100, "Calnozz J'Melvirr wants me to collect stunspore mushroom caps found west of T'Vatar Outpost.", 821, 13532) + AddQuestStepCompleteAction(Quest, 1, "Step1Complete") +end + +function Step1Complete(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 1, "I have collected stunspore mushroom caps") + + AddQuestStepChat(Quest, 2, "Bring the stunspore mushroom caps back to Calnozz", 1, "Calnozz J'Melvirr wants me to collect stunspore mushroom caps found west of T'Vatar Outpost.", 821, 340066) + AddQuestStepCompleteAction(Quest, 2, "QuestComplete") +end + +function QuestComplete(Quest, QuestGiver, Player) + UpdateQuestDescription(Quest, "I collected the stunspore mushroom caps requested by Calnozz J'Melvirr.") + while HasItem(Player, 13532, 1) do + RemoveItem(Player, 13532) + end + GiveQuestReward(Quest, Player) +end + +function Reload(Quest, QuestGiver, Player, Step) + if Step == 1 then + Step1Complete(Quest, QuestGiver, Player) + elseif Step == 2 then + QuestComplete(Quest, QuestGiver, Player) + end +end + +function Accepted(Quest, QuestGiver, Player) + Say(QuestGiver, "Excellent, I await your imminent return.") +end + +function Deleted(Quest, QuestGiver, Player) + while HasItem(player, 13532, 1) do + RemoveItem(Player, 13532) + end +end + +function Declined(Quest, QuestGiver, Player) + -- Add dialog here for when the quest is declined +end \ No newline at end of file diff --git a/server/Quests/Darklight/TheBigOne.lua b/server/Quests/Darklight/TheBigOne.lua new file mode 100644 index 000000000..30c2b1249 --- /dev/null +++ b/server/Quests/Darklight/TheBigOne.lua @@ -0,0 +1,48 @@ +--[[ + Script Name : Quests/Darklight/TheBigOne.lua + Script Author : fearfx + Script Date : 2017.01.24 07:01:48 + Script Purpose : + + Zone : Darklight + Quest Giver: + Preceded by: None + Followed by: +--]] + +function Init(Quest) + AddQuestStep(Quest, 1, "I need Dirzdia's lure from Smolderfin.", 1, 100, "Dirzdia wants me to kill Smolderfin and bring back the lure he stole.", 591) + AddQuestStepCompleteAction(Quest, 1, "Step1Complete") +end + +function Step1Complete(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 1, "I have Dirzdia's lure.") + + AddQuestStepChat(Quest, 2, "I need to bring Dirzdia her lure.", 1, "Dirzdia wants me to kill Smolderfin and bring back the lure he stole.", 591, 140025) + AddQuestStepCompleteAction(Quest, 2, "QuestComplete") +end + +function QuestComplete(Quest, QuestGiver, Player) + -- The following UpdateQuestStepDescription and UpdateTaskGroupDescription are not needed, parser adds them for completion in case stuff needs to be moved around + UpdateQuestStepDescription(Quest, 2, "I have given Dirzdia her lure.") + UpdateQuestTaskGroupDescription(Quest, 1, "I have brought Dirzdia her lure.") + + UpdateQuestDescription(Quest, "I have slain Smolderfin for Dirzdia and brought her the lure he stole.") + GiveQuestReward(Quest, Player) +end + +function Reload(Quest, QuestGiver, Player, Step) + if Step == 1 then + Step1Complete(Quest, QuestGiver, Player) + elseif Step == 2 then + QuestComplete(Quest, QuestGiver, Player) + end +end + +function Accepted(Quest, QuestGiver, Player) + -- Add dialog here for when the quest is accepted +end + +function Declined(Quest, QuestGiver, Player) + -- Add dialog here for when the quest is declined +end \ No newline at end of file diff --git a/server/Quests/Darklight/TheMissingRecruit.lua b/server/Quests/Darklight/TheMissingRecruit.lua new file mode 100644 index 000000000..b0ed074a1 --- /dev/null +++ b/server/Quests/Darklight/TheMissingRecruit.lua @@ -0,0 +1,52 @@ +--[[ + Script Name : Quests/Darklight/TheMissingRecruit.lua + Script Purpose : Handles the quest, "The Missing Recruit" + Script Author : Cynnat + Script Date : 8/30/2015 + Script Notes : Has 2 different versions. + + Zone : Darklight Wood + Quest Giver : Ginwyss D'Arkenett + Preceded by : A Guard Insignia? + Followed by : None +--]] + + +function Init(Quest) + AddQuestStep(Quest, 1, "I need to search north of T'Vatar Outpost for Soltrin's corpse and his field kit.", 1, "Ginwyss D'Arkenett wants me to find the body of her recruit and retrieve his field kit.", 11) -- icon id 11 + AddQuestStepCompleteAction(Quest, 1, "Step1Complete") +end + +function Step1Complete(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 1, "I have acquired the recruit's field kit.") + + AddQuestStepChat(Quest, 2, "I need to bring the field kit back to Ginwyss D'Arkenett.", 1, "Ginwyss D'Arkenett wants me to find the body of her recruit and retrieve his field kit.", 396, 340064) -- icon id 396 + AddQuestStepCompleteAction(Quest, 2, "QuestComplete") +end + +function QuestComplete(Quest, QuestGiver, Player) + RemoveItem(Player, 13115) + UpdateQuestDescription(Quest, "I have brought the recruit's field kit to Ginwyss.") + GiveQuestReward(Quest, Player) +end + +function Reload(Quest, QuestGiver, Player, Step) + if Step == 1 then + Step1Complete(Quest, QuestGiver, Player) + elseif Step == 2 then + QuestComplete(Quest, QuestGiver, Player) + end +end + +function Accepted(Quest, QuestGiver, Player) + FaceTarget(QuestGiver, Player) + conversation = CreateConversation() + + PlayFlavor(QuestGiver, "ginwyss_d_arkenett/darklight_wood/tvatar_post/ginwyss_revamp/ginwyss023.mp3", "", "", 3126616209, 364737454, Player) + AddConversationOption(conversation, "Okay.") + StartConversation(conversation, QuestGiver, Player, "I will see you when you return.") +end + +function Declined(Quest, QuestGiver, Player) + -- Add dialog here for when the quest is declined +end \ No newline at end of file diff --git a/server/Quests/Darklight/TheMotherLode.lua b/server/Quests/Darklight/TheMotherLode.lua new file mode 100644 index 000000000..0184fb5ba --- /dev/null +++ b/server/Quests/Darklight/TheMotherLode.lua @@ -0,0 +1,63 @@ +--[[ + Script Name : Quests/Darklight/TheMotherLode.lua + Script Purpose : Handles the quest, "The Mother Lode" + Script Author : Cynnar + Script Date : 8/30/2015 + Script Notes : + + Zone : Darklight Wood + Quest Giver : Ilmtar D'Viervs + Preceded by : A Snake Made Serum + Followed by : None +--]] + + +function Init(Quest) + AddQuestStep(Quest, 1, "Use the pheromone spray while on the bridge over Innoruuk's Scar", 1, 100, "I need to summon the wurm mother, kill her, and bring it back to Ilmtar.", 11) + AddQuestStepCompleteAction(Quest, 1, "Step1Complete") +end + +function Step1Complete(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 1, "I have sprayed the pheromone to summon the wurm mother") + + AddQuestStepKill(Quest, 2, "Kill the wurm mother", 1, 100, "I need to summon the wurm mother, kill her, and bring it back to Ilmtar.", 133, 341051) + AddQuestStepCompleteAction(Quest, 2, "Step2Complete") +end + +function Step2Complete(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 2, "I have the slain the wurm mother") + + AddQuestStepChat(Quest, 3, "Bring the wurm mother back to Ilmtar", 1, "I need to summon the wurm mother, kill her, and bring it back to Ilmtar.", 133, 340076) + AddQuestStepCompleteAction(Quest, 3, "QuestComplete") +end + +function QuestComplete(Quest, QuestGiver, Player) + UpdateQuestDescription(Quest, "I have given Ilmtar the corpse of the wurm mother.") + GiveQuestReward(Quest, Player) +end + +function Reload(Quest, QuestGiver, Player, Step) + if Step == 1 then + Step1Complete(Quest, QuestGiver, Player) + elseif Step == 2 then + Step2Complete(Quest, QuestGiver, Player) + elseif Step == 3 then + QuestComplete(Quest, QuestGiver, Player) + end +end + +function Accepted(Quest, QuestGiver, Player) + SummonItem(Player, 47949) + FaceTarget(QuestGiver, Player) + local con = CreateConversation() + + AddConversationOption(con, "That's reassuring.") + StartConversation(con, QuestGiver, Player, "Good luck, Sygman. Be sure you don't spray any of that stuff on yourself, ha!") +end + +function Declined(Quest, QuestGiver, Player) + -- Add dialog here for when the quest is declined +end + +function Deleted(Quest, QuestGiver, Player) +end \ No newline at end of file diff --git a/server/Quests/Darklight/TheSummoning.lua b/server/Quests/Darklight/TheSummoning.lua new file mode 100644 index 000000000..1f68c0664 --- /dev/null +++ b/server/Quests/Darklight/TheSummoning.lua @@ -0,0 +1,50 @@ +--[[ + Script Name : TheSummoning.lua + Script Purpose : Handles the quest, "The Summoning" + Script Author : FeaRFx + Script Date : 26/01/2017 + Script Notes : + + Zone : Darklight Wood + Quest Giver : + Preceded by : None + Followed by : None +--]] + + +function Init(Quest) + AddQuestStep(Quest, 1, "I need to summon the tainted Sableflame avatar.", 1, 100, "Belarshalee Do'Torlyl wants me to summon a tainted version of the Sableflame avatar.", 11) + AddQuestStepCompleteAction(Quest, 1, "Step1Complete") +end + +function Step1Complete(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 1, "I have summoned the tainted avatar.") + + AddQuestStepChat(Quest, 2, "I should return to Belarshalee Do'Torlyl now that I've finished her ritual.", 1, "Belarshalee Do'Torlyl wants me to summon a tainted version of the Sableflame avatar.", 11, 340173) + AddQuestStepCompleteAction(Quest, 2, "QuestComplete") +end + +function QuestComplete(Quest, QuestGiver, Player) + -- The following UpdateQuestStepDescription and UpdateTaskGroupDescription are not needed, parser adds them for completion in case stuff needs to be moved around + UpdateQuestStepDescription(Quest, 2, "I have spoken with Belarshalee Do'Torlyl.") + UpdateQuestTaskGroupDescription(Quest, 1, "I have summoned the tainted Sableflame avatar.") + + UpdateQuestDescription(Quest, "I successfully summoned the Sableflame Avatar. Belarshalee Do'Torlyl was pleased to hear of the results.") + GiveQuestReward(Quest, Player) +end + +function Reload(Quest, QuestGiver, Player, Step) + if Step == 1 then + Step1Complete(Quest, QuestGiver, Player) + elseif Step == 2 then + QuestComplete(Quest, QuestGiver, Player) + end +end + +function Accepted(Quest, QuestGiver, Player) + -- Add dialog here for when the quest is accepted +end + +function Declined(Quest, QuestGiver, Player) + -- Add dialog here for when the quest is declined +end \ No newline at end of file diff --git a/server/Quests/Darklight/TheSummoningCatalyst.lua b/server/Quests/Darklight/TheSummoningCatalyst.lua new file mode 100644 index 000000000..ae4502b3e --- /dev/null +++ b/server/Quests/Darklight/TheSummoningCatalyst.lua @@ -0,0 +1,50 @@ +--[[ + Script Name : TheSummoningCatalyst.lua + Script Purpose : Handles the quest, "The Summoning Catalyst" + Script Author : QuestParser (Replace this) + Script Date : 26/01/2017 + Script Notes : + + Zone : Darklight Wood + Quest Giver : + Preceded by : None + Followed by : None +--]] + + +function Init(Quest) + AddQuestStepKill(Quest, 1, "I need the Staff of the Flamecallers.", 1, 100, "I need the Staff of the Flamecallers.", 621, 340128) + AddQuestStepCompleteAction(Quest, 1, "Step1Complete") +end + +function Step1Complete(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 1, "I have retrieved the Staff of the Flamecallers.") + + AddQuestStepChat(Quest, 2, "I should speak with Belarshalee Do'Torlyl.", 1, "I need the Staff of the Flamecallers.", 11, 340173) + AddQuestStepCompleteAction(Quest, 2, "QuestComplete") +end + +function QuestComplete(Quest, QuestGiver, Player) + -- The following UpdateQuestStepDescription and UpdateTaskGroupDescription are not needed, parser adds them for completion in case stuff needs to be moved around + UpdateQuestStepDescription(Quest, 2, "I have spoken with Belarshalee Do'Torlyl.") + UpdateQuestTaskGroupDescription(Quest, 1, "I have obtained the Staff of the Flamecallers.") + + UpdateQuestDescription(Quest, "I have retrieved the Staff of the Flamecallers.") + GiveQuestReward(Quest, Player) +end + +function Reload(Quest, QuestGiver, Player, Step) + if Step == 1 then + Step1Complete(Quest, QuestGiver, Player) + elseif Step == 2 then + QuestComplete(Quest, QuestGiver, Player) + end +end + +function Accepted(Quest, QuestGiver, Player) + -- Add dialog here for when the quest is accepted +end + +function Declined(Quest, QuestGiver, Player) + -- Add dialog here for when the quest is declined +end \ No newline at end of file diff --git a/server/Quests/Darklight/TheWarpfontSpire.lua b/server/Quests/Darklight/TheWarpfontSpire.lua new file mode 100644 index 000000000..7e9b758da --- /dev/null +++ b/server/Quests/Darklight/TheWarpfontSpire.lua @@ -0,0 +1,50 @@ +--[[ + Script Name : TheWarpfontSpire.lua + Script Purpose : Handles the quest, "The Warpfont Spire" + Script Author : FeaRFx + Script Date : 26/01/2017 + Script Notes : + + Zone : Darklight Wood + Quest Giver : + Preceded by : None + Followed by : None +--]] + + +function Init(Quest) + AddQuestStepKill(Quest, 1, "I need to collect some resonant dust from the warped wisplings at the Warpfont Spire.", 8, 100, "I need resonant dust from the warped wisplings at the Warpfont Spire.", 346, 340101) + AddQuestStepCompleteAction(Quest, 1, "Step1Complete") +end + +function Step1Complete(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 1, "I have collected the resonant dust.") + + AddQuestStepChat(Quest, 2, "I need to bring this dust back to Geldax Xalylharil.", 1, "I need resonant dust from the warped wisplings at the Warpfont Spire.", 346, 340147) + AddQuestStepCompleteAction(Quest, 2, "QuestComplete") +end + +function QuestComplete(Quest, QuestGiver, Player) + -- The following UpdateQuestStepDescription and UpdateTaskGroupDescription are not needed, parser adds them for completion in case stuff needs to be moved around + UpdateQuestStepDescription(Quest, 2, "I have given Geldax Xalylharil the dust.") + UpdateQuestTaskGroupDescription(Quest, 1, "I have given Geldax Xalylharil the resonant dust.") + + UpdateQuestDescription(Quest, "I have brought Geldax Xalylharil the resonant dust he asked for.") + GiveQuestReward(Quest, Player) +end + +function Reload(Quest, QuestGiver, Player, Step) + if Step == 1 then + Step1Complete(Quest, QuestGiver, Player) + elseif Step == 2 then + QuestComplete(Quest, QuestGiver, Player) + end +end + +function Accepted(Quest, QuestGiver, Player) + -- Add dialog here for when the quest is accepted +end + +function Declined(Quest, QuestGiver, Player) + -- Add dialog here for when the quest is declined +end diff --git a/server/Quests/Darklight/ThexianTaint.lua b/server/Quests/Darklight/ThexianTaint.lua new file mode 100644 index 000000000..b1112188e --- /dev/null +++ b/server/Quests/Darklight/ThexianTaint.lua @@ -0,0 +1,64 @@ +--[[ + Script Name : Quests/Darklight/ThexianTaint.lua + Script Purpose : Handles the quest, "Thexian Taint" + Script Author : Cynnar + Script Date : 8/17/2015 + Script Notes : + + Zone : Darklight Wood + Quest Giver : Sselnyl Do'Zyth + Preceded by : No Undead Goes Unturned + Followed by : None +--]] + + +function Init(Quest) + AddQuestStepKill(Quest, 1, "I need to kill seven untamed spirits.", 7, 100, "Sselnyl Do'Zyth wants me to kill the spirits near the Wellspring of Nightmares and then stop the Thexian ritual.", 611, 340015) + AddQuestStepCompleteAction(Quest, 1, "Step1Complete") +end + +function Step1Complete(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 1, "I have slain the spirits.") + + AddQuestStepLocation(Quest, 2, "Toss the vex-runed remains into the Wellspring of Nightmares.", 1, "Sselnyl Do'Zyth wants me to kill the spirits near the Wellspring of Nightmares and then stop the Thexian ritual.", 11, 340748) + AddQuestStepCompleteAction(Quest, 2, "Step2Complete") +end + +function Step2Complete(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 2, "I have Ginryne X'Treval's head.") + UpdateQuestTaskGroupDescription(Quest, 1, "I have slain the Thexian responsible for rousing the untamed spirits.") + + --AddQuestStepChat(Quest, 3, "I need to bring Ginryne X'Treval's head to Ginwyss D'Arkenett at T'Vatar Post.", 1, "I need to bring the head to Ginwyss D'Arkenette.", 11, 340064) + AddQuestStepChat(Quest, 3, "I need to bring news of my success to Ginwyss D'Arkenett at T'Vatar Outpost.", 1, "I need to bring the head to Ginwyss D'Arkenette.", 11, 340064) + + AddQuestStepCompleteAction(Quest, 3, "QuestComplete") +end + +function QuestComplete(Quest, QuestGiver, Player) + UpdateQuestDescription(Quest, "I took out the Thexian responsible for the untamed spirits and brought his head to Ginwyss D'Arkenett.") + GiveQuestReward(Quest, Player) +end + +function Reload(Quest, QuestGiver, Player, Step) + if Step == 1 then + Step1Complete(Quest, QuestGiver, Player) + elseif Step == 2 then + Step2Complete(Quest, QuestGiver, Player) + elseif Step == 3 then + QuestComplete(Quest, QuestGiver, Player) + end +end + +function Accepted(Quest, QuestGiver, Player) + FaceTarget(QuestGiver, Player) + conversation = CreateConversation() + + PlayFlavor(QuestGiver, "sselnyl_do_zyth/darklight_wood/hates_envy/sselnyl_revamp/sselnyl016.mp3", "", "", 2505986128, 2745231406, Player) + AddConversationOption(conversation, "For Neriak!") + StartConversation(conversation, QuestGiver, Player, "You were chosen for this task for a reason, " ..GetName(Player).. ". Do not fail us. All of Neriak depends upon your success.") + SummonItem(Player, 14387, 1) +end + +function Declined(Quest, QuestGiver, Player) + -- Add dialog here for when the quest is declined +end \ No newline at end of file diff --git a/server/Quests/Darklight/TippingtheScalesofPower.lua b/server/Quests/Darklight/TippingtheScalesofPower.lua new file mode 100644 index 000000000..a46432551 --- /dev/null +++ b/server/Quests/Darklight/TippingtheScalesofPower.lua @@ -0,0 +1,54 @@ +--[[ + Script Name : Quests/Darklight/TippingtheScalesofPower.lua + Script Purpose : Handles the quest, "Tipping the Scales of Power" + Script Author : Cynnar + Script Date : 8/30/2015 + Script Notes : + + Zone : Darklight Wood + Quest Giver : Nemain + Preceded by : A Strange Occurrence + Followed by : Item "Tempered Wand" is missing. +--]] + + +function Init(Quest) + AddQuestStepKill(Quest, 1, "Hunt slitherers for their scales", 8, 100, "I need to hunt slitherers found near the bank of the Lower Tendril River, west of T'Vatar Outpost.", 98, 340094, 340097) + AddQuestStepCompleteAction(Quest, 1, "Step1Complete") +end + +function Step1Complete(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 1, "I have collected the snake scales for Ilmtar.") + + AddQuestStepChat(Quest, 2, "Bring these scales to Ilmtar D'Viervs", 1, "I need to hunt slitherers found near the bank of the Lower Tendril River, west of T'Vatar Outpost.", 98, 340076) + AddQuestStepCompleteAction(Quest, 2, "QuestComplete") +end + +function QuestComplete(Quest, QuestGiver, Player) + UpdateQuestDescription(Quest, "I have collected the snake scales for Ilmtar D'Viervs.") + GiveQuestReward(Quest, Player) +end + +function Reload(Quest, QuestGiver, Player, Step) + if Step == 1 then + Step1Complete(Quest, QuestGiver, Player) + elseif Step == 2 then + QuestComplete(Quest, QuestGiver, Player) + end +end + +function Accepted(Quest, QuestGiver, Player) + FaceTarget(QuestGiver, Player) + local con = CreateConversation() + + PlayFlavor(QuestGiver, "", "", "", 0, 0, Player) + AddConversationOption(con, "I will return when I get the scales.") + StartConversation(con, QuestGiver, Player, "Good, good.") +end + +function Declined(Quest, QuestGiver, Player) + -- Add dialog here for when the quest is declined +end + +function Deleted(Quest, QuestGiver, Player) +end \ No newline at end of file diff --git a/server/Quests/Darklight/ToDrawUponWellsprings.lua b/server/Quests/Darklight/ToDrawUponWellsprings.lua new file mode 100644 index 000000000..d26a7c277 --- /dev/null +++ b/server/Quests/Darklight/ToDrawUponWellsprings.lua @@ -0,0 +1,55 @@ +--[[ + Script Name : Quests/Darklight/ToDrawUponWellsprings.lua + Script Purpose : Handles the quest, "To Draw Upon Wellsprings" + Script Author : Cynnar + Script Date : 8/30/2015 + Script Notes : + + Zone : Darklight Wood + Quest Giver : Calnozz J'Melvirr + Preceded by : None + Followed by : Stunning Revelation +--]] + +function Init(Quest) + AddQuestStep(Quest, 1, "Bring wellspring cubs to Calnozz J'Melvirr", 3, 100, "I need to bring three bear cubs to Calnozz J'Melvirr back at T'Vatar Outpost.", 174) + AddQuestStepCompleteAction(Quest, 1, "Step1Complete") +end + +function Step1Complete(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 1, "I have brought wellspring cubs to Calnozz J'Melvirr") + + AddQuestStepChat(Quest, 2, "Speak with Calnozz J'Melvirr", 1, "I need to bring three bear cubs to Calnozz J'Melvirr back at T'Vatar Outpost.", 11, 340066) + AddQuestStepCompleteAction(Quest, 2, "QuestComplete") +end + +function QuestComplete(Quest, QuestGiver, Player) + while HasItem(Player, 45117) do + RemoveItem(Player, 45117) + end + UpdateQuestDescription(Quest, "I have collected all the bear cubs for Calnozz J'Melvirr.") + GiveQuestReward(Quest, Player) +end + +function Reload(Quest, QuestGiver, Player, Step) + if Step == 1 then + Step1Complete(Quest, QuestGiver, Player) + elseif Step == 2 then + QuestComplete(Quest, QuestGiver, Player) + end +end + +function Accepted(Quest, QuestGiver, Player) + if HasItem(Player, 45117) == false then + SummonItem(Player, 45117, 1) + end + FaceTarget(QuestGiver, Player) + conversation = CreateConversation() + + Say(QuestGiver, "Excellent. I will be here waiting for you to bring the cubs back. Here is the leash.") +end + +function Deleted(Quest, QuestGiver, Player) + Despawn("cub") + SetTempVariable(Player, "cub", nil) +end \ No newline at end of file diff --git a/server/Quests/Darklight/UsefulMaterials.lua b/server/Quests/Darklight/UsefulMaterials.lua new file mode 100644 index 000000000..5ab3d58c2 --- /dev/null +++ b/server/Quests/Darklight/UsefulMaterials.lua @@ -0,0 +1,56 @@ +--[[ + Script Name : Quests/Darklight/UsefulMaterials.lua + Script Purpose : Handles the quest, "Useful Materials" + Script Author : Cynnar + Script Date : 8/30/2015 + Script Notes : + + Zone : Darklight Wood + Quest Giver : Ilmtar D'Viervs + Preceded by : One Man's Waste... + Followed by : Sorcerous Necessities +--]] + + +function Init(Quest) + AddQuestStepObtainItem(Quest, 1, "Collect pieces of wood for Ilmtar D'Viervs", 6, 100, "Ilmtar D'Viervs wants wood from the Field of Ruin.", 830, 6486) + AddQuestStepCompleteAction(Quest, 1, "Step1Complete") +end + +function Step1Complete(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 1, "I have collected the wood") + + AddQuestStepChat(Quest, 2, "Bring the wood back to Ilmtar", 1, "Ilmtar D'Viervs wants wood from the Field of Ruin.", 830, 340076) + AddQuestStepCompleteAction(Quest, 2, "QuestComplete") +end + +function QuestComplete(Quest, QuestGiver, Player) + UpdateQuestDescription(Quest, "I have brought Ilmtar the wood he asked for.") + while HasItem(Player, 6486, 1) do + RemoveItem(Player, 6486) + end + GiveQuestReward(Quest, Player) +end + +function Reload(Quest, QuestGiver, Player, Step) + if Step == 1 then + Step1Complete(Quest, QuestGiver, Player) + elseif Step == 2 then + QuestComplete(Quest, QuestGiver, Player) + end +end + +function Accepted(Quest, QuestGiver, Player) + FaceTarget(QuestGiver, Player) + local con = CreateConversation() + + PlayFlavor(QuestGiver, "", "", "", 0, 0, Player) + StartConversation(con, QuestGiver, Player, "Good.") +end + +function Declined(Quest, QuestGiver, Player) + -- Add dialog here for when the quest is declined +end + +function Deleted(Quest, QuestGiver, Player) +end \ No newline at end of file diff --git a/server/Quests/Darklight/WhatsinDemand.lua b/server/Quests/Darklight/WhatsinDemand.lua new file mode 100644 index 000000000..df1960620 --- /dev/null +++ b/server/Quests/Darklight/WhatsinDemand.lua @@ -0,0 +1,53 @@ +--[[ + Script Name : Quests/Darklight/WhatsinDemand.lua + Script Purpose : Handles the quest, "What's in Demand?" + Script Author : Cynnar + Script Date : 8/30/2015 + Script Notes : + + Zone : Darklight Wood + Quest Giver : Ilmtar D'Viervs + Preceded by : None + Followed by : One Man's Waste... +--]] + + +function Init(Quest) + AddQuestStepKill(Quest, 1, "I need to collect bone fragments from the undead around T'Vatar Post.", 6, 100, "Ilmtar D'Viervs wants me to collect bone fragments from the undead around T'Vatar Post.", 322, 340085, 340084) + AddQuestStepCompleteAction(Quest, 1, "Step1Complete") +end + +function Step1Complete(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 1, "I have collected the bone fragments.") + + AddQuestStepChat(Quest, 2, "I need to bring these bone fragments to Ilmtar.", 1, "Ilmtar D'Viervs wants me to collect bone fragments from the undead around T'Vatar Post.", 322, 340076) + AddQuestStepCompleteAction(Quest, 2, "QuestComplete") +end + +function QuestComplete(Quest, QuestGiver, Player) + UpdateQuestDescription(Quest, "I have given Ilmtar the bone fragments he requested.") + GiveQuestReward(Quest, Player) +end + +function Reload(Quest, QuestGiver, Player, Step) + if Step == 1 then + Step1Complete(Quest, QuestGiver, Player) + elseif Step == 2 then + QuestComplete(Quest, QuestGiver, Player) + end +end + +function Accepted(Quest, QuestGiver, Player) + FaceTarget(QuestGiver, Player) + local con = CreateConversation() + + PlayFlavor(QuestGiver, "", "", "", 0, 0, Player) + StartConversation(con, QuestGiver, Player, "Then I await your return.") +end + +function Declined(Quest, QuestGiver, Player) + -- Add dialog here for when the quest is declined +end + +function Deleted(Quest, QuestGiver, Player) +end \ No newline at end of file diff --git a/server/Quests/Darklight/a_ferocious_inconvenience.lua b/server/Quests/Darklight/a_ferocious_inconvenience.lua new file mode 100644 index 000000000..87214e773 --- /dev/null +++ b/server/Quests/Darklight/a_ferocious_inconvenience.lua @@ -0,0 +1,63 @@ +--[[ + Script Name : Quests/Darklight/a_ferocious_inconvenience.lua + Script Purpose : Handles the quest, "A Ferocious Invconvenience" + Script Author : Scatman + Script Date : 2009.02.01 + + Zone : Darklight Wood + Quest Giver: Jhana Do'Zyth + Preceded by: None + Followed by: None +--]] + + +function Init(Quest) + -- Legplates of Ability + -- Verdurous Belt + + + AddQuestStepKill(Quest, 1, "I need to kill the ferocious wolf in western Hate's Envy.", 1, 100, ".", 611, 340094) + AddQuestStepCompleteAction(Quest, 1, "step1_complete_killedWolf") + +end + +function Accepted(Quest, QuestGiver, Player) + FaceTarget(QuestGiver, Player) + conversation = CreateConversation() + + PlayFlavor(QuestGiver, "voiceover/english/neriak/jhana_do_zyth/darklight_wood/hates_envy/jhana/jhana004.mp3", "", "", 3733651177, 3084298647, Player) + AddConversationOption(conversation, "All right, I will return once it is slain.", "dlg_3_4") + StartConversation(conversation, QuestGiver, Player, "Tucked away in the western end of Hate's Envy. INSIDE these useless walls. Once it's slain let me know.") +end + +function Declined(Quest, QuestGiver, Player) +end + +function step1_complete_killedWolf(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 1, "I have slain the ferocious wolf.") + UpdateQuestTaskGroupDescription(Quest, 1, "I have slain the ferocious wolf.") + + AddQuestStepChat(Quest, 2, "I need to return to Jhana.", 1, ".", 0, 340071) + AddQuestStepCompleteAction(Quest, 2, "step2_complete_talkedToJhana") +end + +function step2_complete_talkedToJhana(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 2, "Jhana cannot pay me and suggests instead that I speak with her mother, Sselnyl.") + UpdateQuestTaskGroupDescription(Quest, 2, "Jhana cannot pay me and suggests instead that I speak with her mother, Sselnyl.") + + AddQuestStepChat(Quest, 3, "I need to get my reward from Jhana's mother.", 1, ".", 0, 340087) + AddQuestStepCompleteAction(Quest, 3, "quest_complete") +end + +function quest_complete(Quest, QuestGiver, Player) + UpdateQuestDescription(Quest, "I have slain the wolf for Jhana. Her mother paid me for my services.") + GiveQuestReward(Quest, Player) +end + +function Reload(Quest, QuestGiver, Player, Step) + if Step == 1 then + step1_complete_killedWolf(Quest, QuestGiver, Player) + elseif Step == 2 then + step2_complete_talkedToJhana(Quest, QuestGiver, Player) + end +end diff --git a/server/Quests/Darklight/a_friendly_reminder.lua b/server/Quests/Darklight/a_friendly_reminder.lua new file mode 100644 index 000000000..e010ab912 --- /dev/null +++ b/server/Quests/Darklight/a_friendly_reminder.lua @@ -0,0 +1,59 @@ +--[[ + Script Name : Quests/Darklight/a_friendly_reminder.lua + Script Purpose : Handles the quest, "A Friendly Reminder" + Script Author : Scatman + Script Date : 2009.02.03 + + Zone : Darklight Wood + Quest Giver: Laexyra Y'Barriath + Preceded by: Public Service (public_service.lua) + Followed by: Reaping (reaping.lua) +--]] + + +function Init(Quest) + + + AddQuestStepChat(Quest, 1, "I need to remind Harnen Taptha that Laexyra Y'Barriath was right.", 1, ".", 0, 340127) + AddQuestStepCompleteAction(Quest, 1, "step1_complete_talkedToHarnen") + +end + +function Accepted(Quest, QuestGiver, Player) + FaceTarget(QuestGiver, Player) + conversation = CreateConversation() + + PlayFlavor(QuestGiver, "voiceover/english/neriak/laexyra_y_barriath/darklight_wood/tvatar_post/laexyra/laexyra014.mp3", "", "", 1254557945, 2860942006, Player) + AddConversationOption(conversation, "I'll see.") + StartConversation(conversation, QuestGiver, Player, "I think you'll find him quite amusing.") +end + +function Declined(Quest, QuestGiver, Player) +end + +function step1_complete_talkedToHarnen(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 1, "Harnen Taptha has attacked me, I must kill him.") + + AddQuestStepKill(Quest, 2, "I must killed Hernen Taptha.", 1, 100, ".", 611, 340127) + AddQuestStepCompleteAction(Quest, 2, "step2_complete_killedHarnen") +end + +function step2_complete_killedHarnen(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 2, "I have killed Harnen Taptha.") + + AddQuestStepChat(Quest, 3, "I need to return to Laexyra Y'Barriath.", 1, ".", 0, 340109) + AddQuestStepCompleteAction(Quest, 3, "quest_complete") +end + +function quest_complete(Quest, QuestGiver, Player) + UpdateQuestDescription(Quest, "Haren Taptha attacked me and I killed him. Laexyra assures me that he'll be back.") + GiveQuestReward(Quest, Player) +end + +function Reload(Quest, QuestGiver, Player, Step) + if Step == 1 then + step1_complete_talkedToHarnen(Quest, QuestGiver, Player) + elseif Step == 2 then + step2_complete_killedHarnen(Quest, QuestGiver, Player) + end +end diff --git a/server/Quests/Darklight/a_strange_find.lua b/server/Quests/Darklight/a_strange_find.lua new file mode 100644 index 000000000..f6b1d6466 --- /dev/null +++ b/server/Quests/Darklight/a_strange_find.lua @@ -0,0 +1,57 @@ +--[[ + Script Name : Quests/Darklight/a_strange_find.lua + Script Purpose : Handles the quest, "A Strange Find" + Script Author : Scatman + Script Date : 2009.01.31 + + Zone : Darklight Wood + Quest Giver: Strange Plant + Preceded by: None + Followed by: None +--]] + + +function Init(Quest) + + -- Sun Bleached Spaulders + + + AddQuestStepChat(Quest, 1, "I should bring this plant to Verex N'Va.", 1, ".", 0, 340043) + AddQuestStepCompleteAction(Quest, 1, "step1_complete_talkedToVerex") + +end + +function Accepted(Quest, QuestGiver, Player) + if QuestGiver ~= nil then + if GetDistance(Player, QuestGiver) < 30 then + FaceTarget(QuestGiver, Player) + conversation = CreateConversation() + + PlayFlavor(QuestGiver, "voiceover/english/neriak/verex_n_za/darklight_wood/hates_envy/verex/verex013.mp3", "", "", 3010718218, 2537871754, Player) + AddConversationOption(conversation, "I will return.") + StartConversation(conversation, QuestGiver, Player, "I thought so.") + end + end +end + +function Declined(Quest, QuestGiver, Player) +end + +function step1_complete_talkedToVerex(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 1, "I have spoken with Verex N'Za.") + UpdateQuestTaskGroupDescription(Quest, 1, "I have spoken with Verex N'Za.") + + AddQuestStepChat(Quest, 2, "I must bring the plant to Sselnyl Do'Zyth.", 1, ".", 0, 340087) + AddQuestStepCompleteAction(Quest, 2, "quest_complete") +end + +function quest_complete(Quest, QuestGiver, Player) + UpdateQuestDescription(Quest, "I have given the plant to Sselnyl Do'Zyth, mayor of Hate's Envy. She said she would save it as evidence but didn't comment further.") + GiveQuestReward(Quest, Player) +end + +function Reload(Quest, QuestGiver, Player, Step) + if Step == 1 then + step1_complete_talkedToVerex(Quest, QuestGiver, Player) + end +end diff --git a/server/Quests/Darklight/danyas_order.lua b/server/Quests/Darklight/danyas_order.lua new file mode 100644 index 000000000..eac796439 --- /dev/null +++ b/server/Quests/Darklight/danyas_order.lua @@ -0,0 +1,46 @@ +--[[ + Script Name : Quests/Darklight/danyas_order.lua + Script Purpose : Handles the quest, "Danya's Order" + Script Author : Scatman + Script Date : 2009.01.31 + + Zone : Darklight Wood + Quest Giver: Fileyl Alyylharil + Preceded by: Malkaen Weed (malkaen_weed.lua) + Followed by: Dirzdia's Order (dirzdias_order.lua) +--]] + + +function Init(Quest) + + + + AddQuestStepChat(Quest, 1, "I need to give Danya Halfmoon her order.", 1, ".", 0, 340073) + AddQuestStepCompleteAction(Quest, 1, "quest_complete") + +end + +function Accepted(Quest, QuestGiver, Player) + if QuestGiver ~= nil then + if GetDistance(Player, QuestGiver) < 30 then + FaceTarget(QuestGiver, Player) + conversation = CreateConversation() + + PlayFlavor(QuestGiver, "voiceover/english/neriak/fileyl_alyylharil/darklight_wood/hates_envy/fileyl/fileyl010.mp3", "", "", 4262099714, 926127362, Player) + AddConversationOption(conversation, "You're welcome.") + AddConversationOption(conversation, "Just earning my way.") + StartConversation(conversation, QuestGiver, Player, "I appreciate it.") + end + end +end + +function Declined(Quest, QuestGiver, Player) +end + +function quest_complete(Quest, QuestGiver, Player) + UpdateQuestDescription(Quest, "I have given Danya Halfmoon her order.") + GiveQuestReward(Quest, Player) +end + +function Reload(Quest, QuestGiver, Player, Step) +end diff --git a/server/Quests/Darklight/dirzdias_order.lua b/server/Quests/Darklight/dirzdias_order.lua new file mode 100644 index 000000000..44702fe9e --- /dev/null +++ b/server/Quests/Darklight/dirzdias_order.lua @@ -0,0 +1,45 @@ +--[[ + Script Name : Quests/Darklight/dirzdias_order.lua + Script Purpose : Handles the quest, "Dirzdia's Order" + Script Author : Scatman + Script Date : 2009.01.31 + + Zone : Darklight Wood + Quest Giver: Fileyl Alyylharil + Preceded by: Danya's Order (danyas_order.lua) + Followed by: None +--]] + + +function Init(Quest) + + + + AddQuestStepChat(Quest, 1, "I need to deliver Fileyl's net to Dirzdia T'Zauvirr.", 1, ".", 0, 340139) + AddQuestStepCompleteAction(Quest, 1, "quest_complete") + +end + +function Accepted(Quest, QuestGiver, Player) + if QuestGiver ~= nil then + if GetDistance(Player, QuestGiver) < 30 then + FaceTarget(QuestGiver, Player) + conversation = CreateConversation() + + PlayFlavor(QuestGiver, "voiceover/english/neriak/fileyl_alyylharil/darklight_wood/hates_envy/fileyl/fileyl014.mp3", "", "", 695536554, 1919499087, Player) + AddConversationOption(conversation, "Thank you.") + StartConversation(conversation, QuestGiver, Player, "Excellent. I'll be sure to speak highly of you in my dealings, " .. GetName(Player) .. ".") + end + end +end + +function Declined(Quest, QuestGiver, Player) +end + +function quest_complete(Quest, QuestGiver, Player) + UpdateQuestDescription(Quest, "I have delivered Fileyl's net to Dirzdia T'Zauvirr.") + GiveQuestReward(Quest, Player) +end + +function Reload(Quest, QuestGiver, Player, Step) +end diff --git a/server/Quests/Darklight/elemental_encroachment.lua b/server/Quests/Darklight/elemental_encroachment.lua new file mode 100644 index 000000000..9161f6f06 --- /dev/null +++ b/server/Quests/Darklight/elemental_encroachment.lua @@ -0,0 +1,62 @@ +--[[ + Script Name : Quests/Darklight/elemental_encroachment.lua + Script Purpose : Handles the quest, "Elemental Encroachment" + Script Author : Scatman + Script Date : 2009.01.31 + + Zone : Darklight Wood + Quest Giver: Verex N'Za + Preceded by: None + Followed by: Prowler Annoyance (prowler_annoyance.lua) +--]] + + +function Init(Quest) + + -- Focused Prayer Band + -- Sullied Marsh Bracers + -- Soiled Thexian Sleeves + -- Bracelet of the Bold + + + AddQuestStepKill(Quest, 1, "I need to destroy six Sablevein crumblers.", 6, 100, ".", 611, 340041) + AddQuestStepCompleteAction(Quest, 1, "step1_complete_killedCrumblers") + + +end + +function Accepted(Quest, QuestGiver, Player) + if QuestGiver ~= nil then + if GetDistance(Player, QuestGiver) < 30 then + FaceTarget(QuestGiver, Player) + conversation = CreateConversation() + + PlayFlavor(QuestGiver, "voiceover/english/neriak/verex_n_za/darklight_wood/hates_envy/verex/verex002.mp3", "", "", 2793599050, 2740987353, Player) + AddConversationOption(conversation, "All right.") + StartConversation(conversation, QuestGiver, Player, "Good. Return to me once you're done.") + end + end +end + +function Declined(Quest, QuestGiver, Player) +end + +function step1_complete_killedCrumblers(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 1, "I have destroyed the Sablevein crumblers.") + UpdateQuestTaskGroupDescription(Quest, 1, "I have destroyed the Sablevein crumblers.") + + AddQuestStepChat(Quest, 2, "I need to return to Verex N'Za.", 1, ".", 0, 340043) + AddQuestStepCompleteAction(Quest, 2, "quest_complete") +end + + +function quest_complete(Quest, QuestGiver, Player) + UpdateQuestDescription(Quest, "I have slain the elementals for Verex N'Za.") + GiveQuestReward(Quest, Player) +end + +function Reload(Quest, QuestGiver, Player, Step) + if Step == 1 then + step1_complete_killedCrumblers(Quest, QuestGiver, Player) + end +end diff --git a/server/Quests/Darklight/luxuries_for_the_rich.lua b/server/Quests/Darklight/luxuries_for_the_rich.lua new file mode 100644 index 000000000..31ac5704f --- /dev/null +++ b/server/Quests/Darklight/luxuries_for_the_rich.lua @@ -0,0 +1,50 @@ +--[[ + Script Name : Quests/Darklight/luxuries_for_the_rich.lua + Script Purpose : Handles the quest, "Luxuries for the Rich" + Script Author : Scatman + Script Date : 2009.02.02 + + Zone : Darklight Wood + Quest Giver: Ilmtar D'Viervs + Preceded by: Trinkets (trinkets.lua) + Followed by: More Luxuries (more_luxuries.lua) +--]] + + +function Init(Quest) + + + AddQuestStepKill(Quest, 1, "I need the scales from eight snakes for Ilmtar D'Viervs.", 8, 100, ".", 98, 340135, 340134, 340155, 340167) + AddQuestStepCompleteAction(Quest, 1, "step1_complete_gotScales") + +end + +function Accepted(Quest, QuestGiver, Player) + FaceTarget(QuestGiver, Player) + conversation = CreateConversation() + + PlayFlavor(QuestGiver, "voiceover/english/neriak/ilmtar_d_viervs/darklight_wood/tvatar_post/ilmtar/ilmtar018.mp3", "", "", 805456445, 276277273, Player) + AddConversationOption(conversation, "I will return when I get the scales.") + StartConversation(conversation, QuestGiver, Player, "I suppose they DO look good. And if the death of four or five snakes can increase the price of a pair of shoes by five-hundred percent I guess that's just death filling an important market niche. Ah well.") +end + +function Declined(Quest, QuestGiver, Player) +end + +function step1_complete_gotScales(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 1, "I have collected the snake scales for Ilmtar.") + + AddQuestStepChat(Quest, 2, "I need to bring these scales to Ilmtar D'Viervs.", 1, ".", 98, 340123) + AddQuestStepCompleteAction(Quest, 2, "quest_complete") +end + +function quest_complete(Quest, QuestGiver, Player) + UpdateQuestDescription(Quest, "I have collected the snake scales for Ilmtar D'Viervs.") + GiveQuestReward(Quest, Player) +end + +function Reload(Quest, QuestGiver, Player, Step) + if Step == 1 then + step1_complete_gotScales(Quest, QuestGiver, Player) + end +end diff --git a/server/Quests/Darklight/malkaen_weed.lua b/server/Quests/Darklight/malkaen_weed.lua new file mode 100644 index 000000000..ca1aae5b7 --- /dev/null +++ b/server/Quests/Darklight/malkaen_weed.lua @@ -0,0 +1,58 @@ +--[[ + Script Name : Quests/Darklight/malkaen_weed.lua + Script Purpose : Handles the quest, "Malkaen Weed" + Script Author : Scatman + Script Date : 2009.01.31 + + Zone : Darklight Wood + Quest Giver: Fileyl Alyylharil + Preceded by: Prowler Pelts (prowler_pelts.lua) + Followed by: Danya's Order (danyas_order.lua) +--]] + + +function Init(Quest) + -- Malkaen Weed + AddQuestStepObtainItem(Quest, 1, "I need to dig up six Malkaen Weeds.", 6, 100, ".", 197, 7922) + AddQuestStepCompleteAction(Quest, 1, "step1_complete_gotWeeds") +end + +function Accepted(Quest, QuestGiver, Player) + if QuestGiver ~= nil then + if GetDistance(Player, QuestGiver) < 30 then + FaceTarget(QuestGiver, Player) + conversation = CreateConversation() + + PlayFlavor(QuestGiver, "voiceover/english/neriak/fileyl_alyylharil/darklight_wood/hates_envy/fileyl/fileyl007.mp3", "", "", 700356968, 3682250631, Player) + AddConversationOption(conversation, "I'll be back.") + StartConversation(conversation, QuestGiver, Player, "Of course you can, a monkey could do it! But a monkey wouldn't know what to do with the money afterwards.") + end + end +end + +function Declined(Quest, QuestGiver, Player) +end + +function step1_complete_gotWeeds(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 1, "I have collected the weeds.") + UpdateQuestTaskGroupDescription(Quest, 1, "I have collected the weeds.") + + AddQuestStepChat(Quest, 2, "I need to bring the Malkaen Weed back to Fileyl.", 1, ".", 0, 340050) + AddQuestStepCompleteAction(Quest, 2, "quest_complete") +end + +function quest_complete(Quest, QuestGiver, Player) + -- Take weeds away + while HasItem(Player, 7922, 1) do + RemoveItem(Player, 7922) + end + + UpdateQuestDescription(Quest, "I have brought Fileyl the Malkaen Weed he neededs for his work.") + GiveQuestReward(Quest, Player) +end + +function Reload(Quest, QuestGiver, Player, Step) + if Step == 1 then + step1_complete_gotWeeds(Quest, QuestGiver, Player) + end +end diff --git a/server/Quests/Darklight/more_luxuries.lua b/server/Quests/Darklight/more_luxuries.lua new file mode 100644 index 000000000..177e7fee7 --- /dev/null +++ b/server/Quests/Darklight/more_luxuries.lua @@ -0,0 +1,70 @@ +--[[ + Script Name : Quests/Darklight/more_luxuries.lua + Script Purpose : Handles the quest, "More Luxuries" + Script Author : Scatman + Script Date : 2009.02.02 + + Zone : Darklight Wood + Quest Giver: Ilmtar D'Viervs + Preceded by: Luxuries for the Rich (luxuries_for_the_rich.lua) + Followed by: The Mother Lode (the_mother_lode.lua) +--]] + + +function Init(Quest) + + + AddQuestStepKill(Quest, 1, "I need to collect the scales from eight scar wurms for Ilmtar D'Viervs.", 8, 100, "Ilmtar D'Viervs needs more snake scales, this time from the scar wurms in Innoruuk's Scar. He also wants pheromone sacs from the male scar wurms.", 172, 340104, 340101, 340102, 340103) + AddQuestStepKill(Quest, 2, "I need to collect pheromone sacs from the scar wurms.", 4, 35, "Ilmtar D'Viervs needs more snake scales, this time from the scar wurms in Innoruuk's Scar. He also wants pheromone sacs from the male scar wurms.", 187, 340104, 340101, 340102, 340103) + AddQuestStepCompleteAction(Quest, 1, "step1_complete_gotScales") + AddQuestStepCompleteAction(Quest, 2, "step2_complete_gotSacs") + +end + +function Accepted(Quest, QuestGiver, Player) + FaceTarget(QuestGiver, Player) + conversation = CreateConversation() + + PlayFlavor(QuestGiver, "voiceover/english/neriak/ilmtar_d_viervs/darklight_wood/tvatar_post/ilmtar/ilmtar024.mp3", "", "", 3218544480, 2129552018, Player) + AddConversationOption(conversation, "I'll return.", "dlg_11_6") + StartConversation(conversation, QuestGiver, Player, "Great. I'll be here working on a method of distributing the pheromone to use once you've collected the sacs.") +end + +function Declined(Quest, QuestGiver, Player) +end + +function step1_complete_gotScales(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 1, "I have collected the scales.") + + if QuestIsComplete(Player, 95) then + multiple_steps_complete(Quest, QuestGiver, Player) + end +end + +function step2_complete_gotSacs(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 2, "I have collected the pheromone.") + + if QuestIsComplete(Player, 95) then + multiple_steps_complete(Quest, QuestGiver, Player) + end +end + +function multiple_steps_complete(Quest, QuestGiver, Player) + UpdateQuestTaskGroupDescription(Quest, 1, "I need to give Ilmtar the scar wurm scales and pheromone sacs.") + + AddQuestStepChat(Quest, 3, "I need to bring these scales and sacs back to Ilmtar D'Viervs.", 1, "I need to bring these items back to Ilmtar D'Viervs", 172, 340123) + AddQuestStepCompleteAction(Quest, 3, "quest_complete") +end + +function quest_complete(Quest, QuestGiver, Player) + UpdateQuestDescription(Quest, "I have given Ilmatar the scales and pheromone sacs from the scar wurms.") + GiveQuestReward(Quest, Player) +end + +function Reload(Quest, QuestGiver, Player, Step) + if Step == 1 then + step1_complete_gotScales(Quest, QuestGiver, Player) + elseif Step == 2 then + step2_complete_gotSacs(Quest, QuestGiver, Player) + end +end diff --git a/server/Quests/Darklight/one_mans_waste.lua b/server/Quests/Darklight/one_mans_waste.lua new file mode 100644 index 000000000..97c33a646 --- /dev/null +++ b/server/Quests/Darklight/one_mans_waste.lua @@ -0,0 +1,53 @@ +--[[ + Script Name : Quests/Darklight/one_mans_waste.lua + Script Purpose : Handles the quest, "One Man's Waste..." + Script Author : Scatman + Script Date : 2009.02.02 + + Zone : Darklight Wood + Quest Giver: Ilmtar D'Viervs + Preceded by: What's in Demand? (whats_in_demand.lua) + Followed by: Useful Materials (useful_materials.lua) +--]] + + +function Init(Quest) + + + -- discarded weapon + AddQuestStepObtainItem(Quest, 1, "I need to collect six old weapons.", 6, 100, ".", 5, 4583) + + AddQuestStepCompleteAction(Quest, 1, "step1_complete_gotWeapons") + +end + +function Accepted(Quest, QuestGiver, Player) + FaceTarget(QuestGiver, Player) + conversation = CreateConversation() + + PlayFlavor(QuestGiver, "voiceover/english/neriak/ilmtar_d_viervs/darklight_wood/tvatar_post/ilmtar/ilmtar007.mp3", "", "", 1159271523, 3598851329, Player) + AddConversationOption(conversation, "We'll see what I dig up.") + StartConversation(conversation, QuestGiver, Player, "A ring is a ring is a ring, but the ring of a king... now that's something someone will pay for.") +end + +function Declined(Quest, QuestGiver, Player) +end + +function step1_complete_gotWeapons(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 1, "I have collected the old weapons.") + + AddQuestStepChat(Quest, 2, "I need to bring these weapons to Ilmtar D'Viervs.", 1, ".", 5, 340123) + AddQuestStepCompleteAction(Quest, 2, "quest_complete") +end + +function quest_complete(Quest, QuestGiver, Player) + -- remove all six 'discarded weapon' + UpdateQuestDescription(Quest, "I have collected the weapons for Ilmtar.") + GiveQuestReward(Quest, Player) +end + +function Reload(Quest, QuestGiver, Player, Step) + if Step == 1 then + step1_complete_gotWeapons(Quest, QuestGiver, Player) + end +end diff --git a/server/Quests/Darklight/picking_up_slack.lua b/server/Quests/Darklight/picking_up_slack.lua new file mode 100644 index 000000000..07f753c4f --- /dev/null +++ b/server/Quests/Darklight/picking_up_slack.lua @@ -0,0 +1,55 @@ +--[[ + Script Name : Quests/Darklight/picking_up_slack.lua + Script Purpose : Handles the quest, "Picking up Slack" + Script Author : Scatman + Script Date : 2009.02.02 + + Zone : Darklight Wood + Quest Giver: Ginwyss D'Arkenett + Preceded by: Rotting Scum (rotting_scum.lua) + Followed by: None +--]] + + +function Init(Quest) + -- Brass Braced Leggings + -- Calcified Breastplate + -- Smudged Brigandine Shirt + -- Leaf Crusher Gloves + -- Alluvial Breastplate + + + AddQuestStepKill(Quest, 1, "I need to kill eight wellspring cubs.", 8, 100, ".", 611, 340099, 340097) + AddQuestStepCompleteAction(Quest, 1, "step1_complete_killCubs") + +end + +function Accepted(Quest, QuestGiver, Player) + FaceTarget(QuestGiver, Player) + conversation = CreateConversation() + + PlayFlavor(QuestGiver, "voiceover/english/neriak/ginwyss_d_arkenett/darklight_wood/tvatar_post/ginwyss/ginwyss012.mp3", "", "", 264010058, 2837526220, Player) + AddConversationOption(conversation, "Ok.") + StartConversation(conversation, QuestGiver, Player, "Return to me once you've finished.") +end + +function Declined(Quest, QuestGiver, Player) +end + +function step1_complete_killCubs(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 1, "I have killed the cubs.") + + AddQuestStepChat(Quest, 2, "I need to return to Ginwyss.", 1, ".", 0, 340110) + AddQuestStepCompleteAction(Quest, 2, "quest_complete") +end + +function quest_complete(Quest, QuestGiver, Player) + UpdateQuestDescription(Quest, "I have slain the cubs for Ginwynn.") + GiveQuestReward(Quest, Player) +end + +function Reload(Quest, QuestGiver, Player, Step) + if Step == 1 then + step1_complete_killCubs(Quest, QuestGiver, Player) + end +end diff --git a/server/Quests/Darklight/prowler_annoyance.lua b/server/Quests/Darklight/prowler_annoyance.lua new file mode 100644 index 000000000..da0f3248e --- /dev/null +++ b/server/Quests/Darklight/prowler_annoyance.lua @@ -0,0 +1,57 @@ +--[[ + Script Name : Quests/Darklight/prowler_annoyance.lua + Script Purpose : Handles the quest, "Prowler Annoyance" + Script Author : Scatman + Script Date : 2009.01.31 + + Zone : Darklight Wood + Quest Giver: Verex N'Za + Preceded by: Elemental Encroachment (elemental_encroachment.lua) + Followed by: The First Step (the_first_step.lua) +--]] + + +function Init(Quest) + + + + AddQuestStepKill(Quest, 1, "I need to kill six dusk prowlers.", 6, 100, ".", 611, 340048, 340049) + AddQuestStepCompleteAction(Quest, 1, "step1_complete_killedProwlers") + + +end + +function Accepted(Quest, QuestGiver, Player) + if QuestGiver ~= nil then + if GetDistance(Player, QuestGiver) < 30 then + FaceTarget(QuestGiver, Player) + conversation = CreateConversation() + + PlayFlavor(QuestGiver, "voiceover/english/neriak/verex_n_za/darklight_wood/hates_envy/verex/verex006.mp3", "", "", 1353181644, 668433489, Player) + AddConversationOption(conversation, "All right.") + StartConversation(conversation, QuestGiver, Player, "Good to hear. Return to me once you've finished.") + end + end +end + +function Declined(Quest, QuestGiver, Player) +end + +function step1_complete_killedProwlers(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 1, "I have killed the dusk prowlers.") + UpdateQuestTaskGroupDescription(Quest, 1, "I have killed the dusk prowlers.") + + AddQuestStepChat(Quest, 2, "I need to return to Verex N'Za.", 1, ".", 0, 340043) + AddQuestStepCompleteAction(Quest, 2, "quest_complete") +end + +function quest_complete(Quest, QuestGiver, Player) + UpdateQuestDescription(Quest, "I have slain the dusk prowlers as Verex N'Za requested.") + GiveQuestReward(Quest, Player) +end + +function Reload(Quest, QuestGiver, Player, Step) + if Step == 1 then + step1_complete_killedProwlers(Quest, QuestGiver, Player) + end +end diff --git a/server/Quests/Darklight/prowler_pelts.lua b/server/Quests/Darklight/prowler_pelts.lua new file mode 100644 index 000000000..1ac5485c7 --- /dev/null +++ b/server/Quests/Darklight/prowler_pelts.lua @@ -0,0 +1,56 @@ +--[[ + Script Name : Quests/Darklight/prowler_pelts.lua + Script Purpose : Handles the quest, "Prowler Pelts" + Script Author : Scatman + Script Date : 2009.01.31 + + Zone : Darklight Wood + Quest Giver: Fileyl Alyylharil + Preceded by: None + Followed by: Malkaen Weed (malkaen_weed.lua) +--]] + + +function Init(Quest) + + + + AddQuestStepKill(Quest, 1, "I need to collect four superb prowler pelts from the dusk prowlers around Hate's Envy.", 4, 100, ".", 126, 340048, 340049) + AddQuestStepCompleteAction(Quest, 1, "step1_complete_killedProwlers") + +end + +function Accepted(Quest, QuestGiver, Player) + if QuestGiver ~= nil then + if GetDistance(Player, QuestGiver) < 30 then + FaceTarget(QuestGiver, Player) + conversation = CreateConversation() + + PlayFlavor(QuestGiver, "voiceover/english/neriak/fileyl_alyylharil/darklight_wood/hates_envy/fileyl/fileyl003.mp3", "", "", 627745117, 443565061, Player) + AddConversationOption(conversation, "I'll return.") + StartConversation(conversation, QuestGiver, Player, "I'll pay you when you give me the pelts.") + end + end +end + +function Declined(Quest, QuestGiver, Player) +end + +function step1_complete_killedProwlers(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 1, "I've collected the prowler pelts.") + UpdateQuestTaskGroupDescription(Quest, 1, "I've collected the prowler pelts.") + + AddQuestStepChat(Quest, 2, "I need to bring these pelts back to Fileyl Alyylharil.", 1, ".", 0, 340050) + AddQuestStepCompleteAction(Quest, 2, "quest_complete") +end + +function quest_complete(Quest, QuestGiver, Player) + UpdateQuestDescription(Quest, "I have brought Fileyl the prowler pelts he asked for.") + GiveQuestReward(Quest, Player) +end + +function Reload(Quest, QuestGiver, Player, Step) + if Step == 1 then + step1_complete_killedProwlers(Quest, QuestGiver, Player) + end +end diff --git a/server/Quests/Darklight/public_service.lua b/server/Quests/Darklight/public_service.lua new file mode 100644 index 000000000..50f425187 --- /dev/null +++ b/server/Quests/Darklight/public_service.lua @@ -0,0 +1,73 @@ +--[[ + Script Name : Quests/Darklight/public_service.lua + Script Purpose : Handles the quest, "Public Service" + Script Author : Scatman + Script Date : 2009.02.03 + + Zone : Darklight Wood + Quest Giver: Laexyra Y'Barriath + Preceded by: Purposeful Trinkets (purposeful_trinkets.lua) + Followed by: A Friendly Reminder (a_friendly_reminder.lua) +--]] + + +function Init(Quest) + -- Beaded Belt of Persistance + -- Sacrosanct Signet + -- Botanical Gloves + + + AddQuestStepKill(Quest, 1, "I need to kill eight purulent defenders.", 8, 100, "I need to kill a number of undead soldiers north of T'Vatar Post.", 611, 340117, 340126) + AddQuestStepKill(Quest, 2, "I need to kill five moldering soldiers.", 5, 100, "I need to kill a number of undead soldiers north of T'Vatar Post.", 611, 340114, 340118) + AddQuestStepCompleteAction(Quest, 1, "step1_complete_killedDefenders") + AddQuestStepCompleteAction(Quest, 2, "step2_complete_killedSoldiers") + +end + +function Accepted(Quest, QuestGiver, Player) + FaceTarget(QuestGiver, Player) + conversation = CreateConversation() + + PlayFlavor(QuestGiver, "voiceover/english/neriak/laexyra_y_barriath/darklight_wood/tvatar_post/laexyra/laexyra011.mp3", "", "", 370299149, 331491163, Player) + AddConversationOption(conversation, "Ok.") + StartConversation(conversation, QuestGiver, Player, "Return to me when you are finished.") +end + +function Declined(Quest, QuestGiver, Player) +end + +function step1_complete_killedDefenders(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 1, "I have slain the purulent defenders.") + + if QuestIsComplete(Player, 98) then + multiple_steps_complete(Quest, QuestGiver, Player) + end +end + +function step2_complete_killedSoldiers(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 2, "I have slain the moldering soldiers.") + + if QuestIsComplete(Player, 98) then + multiple_steps_complete(Quest, QuestGiver, Player) + end +end + +function multiple_steps_complete(Quest, QuestGiver, Player) + UpdateQuestTaskGroupDescription(Quest, 1, "I have killed the undead soldiers for Laexyra.") + + AddQuestStepChat(Quest, 3, "I need to speak with Laexyra Y'Barriath.", 1, "I should return to Laexyra Y'Barriath now that I have thinned out the undead.", 0, 340109) + AddQuestStepCompleteAction(Quest, 3, "quest_complete") +end + +function quest_complete(Quest, QuestGiver, Player) + UpdateQuestDescription(Quest, "I have thinned out the undead population north of T'Vatar Post.") + GiveQuestReward(Quest, Player) +end + +function Reload(Quest, QuestGiver, Player, Step) + if Step == 1 then + step1_complete_killedDefenders(Quest, QuestGiver, Player) + elseif Step == 2 then + step2_complete_killedSoldiers(Quest, QuestGiver, Player) + end +end diff --git a/server/Quests/Darklight/purposeful_trinkets.lua b/server/Quests/Darklight/purposeful_trinkets.lua new file mode 100644 index 000000000..40e0d74b6 --- /dev/null +++ b/server/Quests/Darklight/purposeful_trinkets.lua @@ -0,0 +1,57 @@ +--[[ + Script Name : Quests/Darklight/purposeful_trinkets.lua + Script Purpose : Handles the quest, "Purposeful Trinkets" + Script Author : Scatman + Script Date : 2009.02.03 + + Zone : Darklight Wood + Quest Giver: Laexyra Y'Barriath + Preceded by: None + Followed by: Public Service (public_service.lua) +--]] + + +function Init(Quest) + -- Oiled Leggings + -- Padded Leg Chains + -- Copper Riveted Legplates + -- Hardened Fungus Fragment + + + -- soldier's trinket + AddQuestStepObtainItem(Quest, 1, "I need to collect five soldier's trinkets.", 5, 100, ".", 368, 8967) + + AddQuestStepCompleteAction(Quest, 1, "step1_complete_gotTinkets") + +end + +function Accepted(Quest, QuestGiver, Player) + FaceTarget(QuestGiver, Player) + conversation = CreateConversation() + + PlayFlavor(QuestGiver, "voiceover/english/neriak/laexyra_y_barriath/darklight_wood/tvatar_post/laexyra/laexyra007.mp3", "", "", 2780056941, 3072789247, Player) + AddConversationOption(conversation, "I'll be back.") + StartConversation(conversation, QuestGiver, Player, "Good.") +end + +function Declined(Quest, QuestGiver, Player) +end + +function step1_complete_gotTinkets(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 1, "I have collected the trinkets.") + + AddQuestStepChat(Quest, 2, "I need to return to Laexyra Y'Barriath.", 1, ".", 0, 340109) + AddQuestStepCompleteAction(Quest, 2, "quest_complete") +end + +function quest_complete(Quest, QuestGiver, Player) + -- remove all 5 'soldier's trinket's + UpdateQuestDescription(Quest, "I have collected the trinkets for Laexyra Y'Barriath.") + GiveQuestReward(Quest, Player) +end + +function Reload(Quest, QuestGiver, Player, Step) + if Step == 1 then + step1_complete_gotTinkets(Quest, QuestGiver, Player) + end +end diff --git a/server/Quests/Darklight/reaping_the_benefits_of_a_monopoly.lua b/server/Quests/Darklight/reaping_the_benefits_of_a_monopoly.lua new file mode 100644 index 000000000..b2b7884cc --- /dev/null +++ b/server/Quests/Darklight/reaping_the_benefits_of_a_monopoly.lua @@ -0,0 +1,52 @@ +--[[ + Script Name : Quests/Darklight/reaping_the_benefits_of_a_monopoly.lua + Script Purpose : Handles the quest, "Reaping the Benefits of a Monopoly" + Script Author : Scatman + Script Date : 2009.02.04 + + Zone : Darklight Wood + Quest Giver: Dirzdia T'Zauvirr + Preceded by: Smoking the Competition (smoking_the_competition.lua) + Followed by: So Hot You Catch Them Cooked (so_hot_you_catch_them_cooked.lua) +--]] + + +function Init(Quest) + + + AddQuestStepObtainItem(Quest, 1, "I need to fish up eight searing trout.", 8, 100, ".", 2542, 45370) + + AddQuestStepCompleteAction(Quest, 1, "step1_complete_caughtFish") + +end + +function Accepted(Quest, QuestGiver, Player) + FaceTarget(QuestGiver, Player) + conversation = CreateConversation() + + PlayFlavor(QuestGiver, "voiceover/english/neriak/dirzdia_t_zauvirr/darklight_wood/tvatar_post/dirzdia/dirzdia012.mp3", "", "", 2680874987, 3116118568, Player) + AddConversationOption(conversation, "All right.") + StartConversation(conversation, QuestGiver, Player, "Great! Just bring them back to me when you've caught them.") +end + +function Declined(Quest, QuestGiver, Player) +end + +function step1_complete_caughtFish(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 1, "I have caught the trout.") + + AddQuestStepChat(Quest, 2, "I need to bring these trout back to Dirzdia.", 1, ".", 2542, 340139) + AddQuestStepCompleteAction(Quest, 2, "quest_complete") +end + +function quest_complete(Quest, QuestGiver, Player) + -- remove the fish + UpdateQuestDescription(Quest, "I have caught the searing trout and brought it back to Dirzdia.") + GiveQuestReward(Quest, Player) +end + +function Reload(Quest, QuestGiver, Player, Step) + if Step == 1 then + step1_complete_caughtFish(Quest, QuestGiver, Player) + end +end diff --git a/server/Quests/Darklight/reclaiming_the_sablevein_tear.lua b/server/Quests/Darklight/reclaiming_the_sablevein_tear.lua new file mode 100644 index 000000000..c94555a48 --- /dev/null +++ b/server/Quests/Darklight/reclaiming_the_sablevein_tear.lua @@ -0,0 +1,56 @@ +--[[ + Script Name : Quests/Darklight/reclaiming_the_sablevein_tear.lua + Script Purpose : Handles the quest, "Reclaiming the Sablevein Tear" + Script Author : Scatman + Script Date : 2009.01.31 + + Zone : Darklight Wood + Quest Giver: Verex N'Za + Preceded by: The First Step (the_first_step.lua) + Followed by: None +--]] + + +function Init(Quest) + + + + AddQuestStepKill(Quest, 1, "I need to destroy eight of the elementals inside the Sablevein Tear!", 8, 100, ".", 611, 340063, 340059, 340064) + AddQuestStepCompleteAction(Quest, 1, "step1_complete_killedPulverizers") + +end + +function Accepted(Quest, QuestGiver, Player) + if QuestGiver ~= nil then + if GetDistance(Player, QuestGiver) < 30 then + FaceTarget(QuestGiver, Player) + conversation = CreateConversation() + + PlayFlavor(QuestGiver, "voiceover/english/neriak/verex_n_za/darklight_wood/hates_envy/verex/verex013.mp3", "", "", 3010718218, 2537871754, Player) + AddConversationOption(conversation, "I will return.") + StartConversation(conversation, QuestGiver, Player, "I thought so.") + end + end +end + +function Declined(Quest, QuestGiver, Player) +end + +function step1_complete_killedPulverizers(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 1, "I have destroyed the elementals.") + UpdateQuestTaskGroupDescription(Quest, 1, "I have destroyed the elementals.") + + AddQuestStepChat(Quest, 2, "I need to return to Verex N'Za.", 1, ".", 0, 340043) + AddQuestStepCompleteAction(Quest, 2, "quest_complete") +end + +function quest_complete(Quest, QuestGiver, Player) + UpdateQuestDescription(Quest, "I have destroyed the elementals within the Sablevein Tear. Through my help, the miners of Hate's Envy will be able to go back to work.") + GiveQuestReward(Quest, Player) +end + +function Reload(Quest, QuestGiver, Player, Step) + if Step == 1 then + step1_complete_killedPulverizers(Quest, QuestGiver, Player) + end +end diff --git a/server/Quests/Darklight/rotting_scum.lua b/server/Quests/Darklight/rotting_scum.lua new file mode 100644 index 000000000..346c6f4f8 --- /dev/null +++ b/server/Quests/Darklight/rotting_scum.lua @@ -0,0 +1,75 @@ +--[[ + Script Name : Quests/Darklight/rotting_scum.lua + Script Purpose : Handles the quest, "Rotting Scum" + Script Author : Scatman + Script Date : 2009.02.02 + + Zone : Darklight Wood + Quest Giver: Ginwyss D'Arkenett + Preceded by: None + Followed by: Picking up Slack (picking_up_slack.lua) +--]] + + +function Init(Quest) + -- Hammered Steel Necklace + -- Mineralized Guards + -- Fallen Corpse Jerkin + -- Pitted Waraxe + -- Fire Hardened Pike + + + AddQuestStepKill(Quest, 1, "I need to kill seven fallen rangers.", 7, 100, "Ginwyss D'Arkenett wants the zombies southwest of T'Vatar Post slain.", 611, 340096) + AddQuestStepKill(Quest, 2, "I need to kill seven stout cadavers.", 7, 100, "Ginwyss D'Arkenett wants the zombies southwest of T'Vatar Post slain.", 611, 340098) + AddQuestStepCompleteAction(Quest, 1, "step1_complete_killedRangers") + AddQuestStepCompleteAction(Quest, 2, "step2_complete_killedCadavers") + +end + +function Accepted(Quest, QuestGiver, Player) + FaceTarget(QuestGiver, Player) + conversation = CreateConversation() + + PlayFlavor(QuestGiver, "voiceover/english/neriak/ginwyss_d_arkenett/darklight_wood/tvatar_post/ginwyss/ginwyss006.mp3", "", "", 931914154, 1041693399, Player) + AddConversationOption(conversation, "I will.") + StartConversation(conversation, QuestGiver, Player, "Return to me after you've 'killed' them.") +end + +function Declined(Quest, QuestGiver, Player) +end + +function step1_complete_killedRangers(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 1, "I have slain the fallen rangers.") + + if QuestIsComplete(Player, 88) then + MultipleStepsComplete(Quest, QuestGiver, Player) + end +end + +function step2_complete_killedCadavers(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 2, "I have slain the stout cadavers.") + + if QuestIsComplete(Player, 88) then + MultipleStepsComplete(Quest, QuestGiver, Player) + end +end + +function MultipleStepsComplete(Quest, QuestGiver, Player) + UpdateQuestTaskGroupDescription(Quest, 1, "I have slain the zombies.") + + AddQuestStepChat(Quest, 3, "I must speak with Ginwyss D'Arkenette.", 1, "I have slain the zombies and should return to Ginwyss D'Arkenette.", 0, 340110) + AddQuestStepCompleteAction(Quest, 3, "quest_complete") +end + +function quest_complete(Quest, QuestGiver, Player) + UpdateQuestDescription(Quest, "I have slain the zombies for Ginwyss D'Arkenette.") + GiveQuestReward(Quest, Player) +end + +function Reload(Quest, QuestGiver, Player, Step) + if Step == 1 then + step1_complete_killedRangers(Quest, QuestGiver, Player) + elseif Step == 2 then + step2_complete_killedCadavers(Quest, QuestGiver, Player) + end +end diff --git a/server/Quests/Darklight/sablevein_rubble.lua b/server/Quests/Darklight/sablevein_rubble.lua new file mode 100644 index 000000000..f492f9a45 --- /dev/null +++ b/server/Quests/Darklight/sablevein_rubble.lua @@ -0,0 +1,54 @@ +--[[ + Script Name : Quests/Darklight/sablevein_rubble.lua + Script Purpose : Handles the quest, "Sablevein Rubble" + Script Author : Scatman + Script Date : 2009.02.01 + + Zone : Darklight Wood + Quest Giver: Danya Halfmoon + Preceded by: None + Followed by: None +--]] + + +function Init(Quest) + -- Sablevein rubble + AddQuestStepObtainItem(Quest, 1, "I need to gather six samples of Sablevein rubble.", 6, 100, ".", 183, 10242) + AddQuestStepCompleteAction(Quest, 1, "step1_complete_gotRubble") +end + +function Accepted(Quest, QuestGiver, Player) + FaceTarget(QuestGiver, Player) + conversation = CreateConversation() + + PlayFlavor(QuestGiver, "voiceover/english/neriak/danya_halfmoon/darklight_wood/hates_envy/danya/danya005.mp3", "", "", 2830883681, 1931267037, Player) + AddConversationOption(conversation, "I'll be back.") + StartConversation(conversation, QuestGiver, Player, "Good. That will serve to keep my mind off of these people around me.") +end + +function Declined(Quest, QuestGiver, Player) +end + +function step1_complete_gotRubble(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 1, "I have collected the Sablevein rubble.") + UpdateQuestTaskGroupDescription(Quest, 1, "I have collected the Sablevein rubble.") + + AddQuestStepChat(Quest, 2, "I need to bring the rubble back to Danya Halfmoon.", 1, ".", 183, 340073) + AddQuestStepCompleteAction(Quest, 2, "quest_complete") +end + +function quest_complete(Quest, QuestGiver, Player) + -- Sablevein rubble + while HasItem(Player, 10242, 1) do + RemoveItem(Player, 10242) + end + + UpdateQuestDescription(Quest, "I have brought Danya the Sablevein rubble she asked for.") + GiveQuestReward(Quest, Player) +end + +function Reload(Quest, QuestGiver, Player, Step) + if Step == 1 then + step1_complete_killedIthari(Quest, QuestGiver, Player) + end +end diff --git a/server/Quests/Darklight/smoking_the_competition.lua b/server/Quests/Darklight/smoking_the_competition.lua new file mode 100644 index 000000000..e53b272c6 --- /dev/null +++ b/server/Quests/Darklight/smoking_the_competition.lua @@ -0,0 +1,55 @@ +--[[ + Script Name : Quests/Darklight/smoking_the_competition.lua + Script Purpose : Handles the quest, "Smoking the Competition" + Script Author : Scatman + Script Date : 2009.02.04 + + Zone : Darklight Wood + Quest Giver: Dirzdia T'Zauvirr + Preceded by: None + Followed by: Reaping the Benefits of a Monopoly (reaping_the_benefits_of_a_monopoly.lua) +--]] + + +function Init(Quest) + -- Cross Stitch Britches + -- Barkbiter + + -- JA: Why are there two of the same items in a selection? + -- Add QuestSelectableRewardItem(Quest, 3, 1) -- had to breakup function name for auto-updates script + + + AddQuestStepKill(Quest, 1, "I need to kill the razormaw that swim in the Searing Tendril and bring them back to Dirzdia.", 8, 100, ".", 139, 340137) + AddQuestStepCompleteAction(Quest, 1, "step1_complete_killedRazormaws") + +end + +function Accepted(Quest, QuestGiver, Player) + FaceTarget(QuestGiver, Player) + conversation = CreateConversation() + + PlayFlavor(QuestGiver, "voiceover/english/neriak/dirzdia_t_zauvirr/darklight_wood/tvatar_post/dirzdia/dirzdia006.mp3", "", "", 1689993769, 508680301, Player) + AddConversationOption(conversation, "I'll be back when I've killed them.") + StartConversation(conversation, QuestGiver, Player, "Great! I appreciate it!") +end + +function Declined(Quest, QuestGiver, Player) +end + +function step1_complete_killedRazormaws(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 1, "I have slain the razormaw.") + + AddQuestStepChat(Quest, 2, "I need to bring the razormaw flesh back to Dirzdia.", 1, ".", 0, 340139) + AddQuestStepCompleteAction(Quest, 2, "quest_complete") +end + +function quest_complete(Quest, QuestGiver, Player) + UpdateQuestDescription(Quest, "I have brought Dirzdia the razormaw flesh she wanted.") + GiveQuestReward(Quest, Player) +end + +function Reload(Quest, QuestGiver, Player, Step) + if Step == 1 then + step1_complete_killedRazormaws(Quest, QuestGiver, Player) + end +end diff --git a/server/Quests/Darklight/so_hot_you_catch_them_cooked.lua b/server/Quests/Darklight/so_hot_you_catch_them_cooked.lua new file mode 100644 index 000000000..360b346cc --- /dev/null +++ b/server/Quests/Darklight/so_hot_you_catch_them_cooked.lua @@ -0,0 +1,52 @@ +--[[ + Script Name : Quests/Darklight/so_hot_you_catch_them_cooked.lua + Script Purpose : Handles the quest, "So Hot You Catch Them Cooked" + Script Author : Scatman + Script Date : 2009.02.04 + + Zone : Darklight Wood + Quest Giver: Dirzdia T'Zauvirr + Preceded by: Reaping the Benefits of a Monopoly (reaping_the_benefits_of_a_monopoly.lua) + Followed by: The Big One (the_big_one.lua) +--]] + + +function Init(Quest) + + + AddQuestStepObtainItem(Quest, 1, "I need to catch eight seared char.", 8, 100, ".", 2541, 45366) + + AddQuestStepCompleteAction(Quest, 1, "step1_complete_caughtFish") + +end + +function Accepted(Quest, QuestGiver, Player) + FaceTarget(QuestGiver, Player) + conversation = CreateConversation() + + PlayFlavor(QuestGiver, "voiceover/english/neriak/dirzdia_t_zauvirr/darklight_wood/tvatar_post/dirzdia/dirzdia016.mp3", "", "", 3096333821, 2080368744, Player) + AddConversationOption(conversation, "I'll be back.") + StartConversation(conversation, QuestGiver, Player, "Glad to hear it! I'll be waiting here... fishing!") +end + +function Declined(Quest, QuestGiver, Player) +end + +function step1_complete_caughtFish(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 1, "I have caught the seared char.") + + AddQuestStepChat(Quest, 2, "I need to bring these fish back to Dirzdia.", 1, ".", 2541, 340139) + AddQuestStepCompleteAction(Quest, 2, "quest_complete") +end + +function quest_complete(Quest, QuestGiver, Player) + -- remove the fish + UpdateQuestDescription(Quest, "I have brought Dirzdia the seared char she wanted.") + GiveQuestReward(Quest, Player) +end + +function Reload(Quest, QuestGiver, Player, Step) + if Step == 1 then + step1_complete_caughtFish(Quest, QuestGiver, Player) + end +end diff --git a/server/Quests/Darklight/the_big_one.lua b/server/Quests/Darklight/the_big_one.lua new file mode 100644 index 000000000..e91d4ce93 --- /dev/null +++ b/server/Quests/Darklight/the_big_one.lua @@ -0,0 +1,53 @@ +--[[ + Script Name : Quests/Darklight/the_big_one.lua + Script Purpose : Handles the quest, "The Big One" + Script Author : Scatman + Script Date : 2009.02.04 + + Zone : Darklight Wood + Quest Giver: Dirzdia T'Zauvirr + Preceded by: So Hot You Catch Them Cooked (so_hot_you_catch_them_cooked.lua) + Followed by: () +--]] + + +function Init(Quest) + + + + AddQuestStepObtainItem(Quest, 1, "I need to catch eight seared char.", 8, 100, ".", 2541, 40609) + + AddQuestStepCompleteAction(Quest, 1, "step1_complete_caughtFish") + +end + +function Accepted(Quest, QuestGiver, Player) + FaceTarget(QuestGiver, Player) + conversation = CreateConversation() + + PlayFlavor(QuestGiver, "voiceover/english/neriak/dirzdia_t_zauvirr/darklight_wood/tvatar_post/dirzdia/dirzdia016.mp3", "", "", 3096333821, 2080368744, Player) + AddConversationOption(conversation, "I'll be back.") + StartConversation(conversation, QuestGiver, Player, "Glad to hear it! I'll be waiting here... fishing!") +end + +function Declined(Quest, QuestGiver, Player) +end + +function step1_complete_caughtFish(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 1, "I have caught the seared char.") + + AddQuestStepChat(Quest, 2, "I need to bring these fish back to Dirzdia.", 1, ".", 2541, 340139) + AddQuestStepCompleteAction(Quest, 2, "quest_complete") +end + +function quest_complete(Quest, QuestGiver, Player) + -- remove the fish + UpdateQuestDescription(Quest, "I have brought Dirzdia the seared char she wanted.") + GiveQuestReward(Quest, Player) +end + +function Reload(Quest, QuestGiver, Player, Step) + if Step == 1 then + step1_complete_caughtFish(Quest, QuestGiver, Player) + end +end diff --git a/server/Quests/Darklight/the_first_step.lua b/server/Quests/Darklight/the_first_step.lua new file mode 100644 index 000000000..a21b97719 --- /dev/null +++ b/server/Quests/Darklight/the_first_step.lua @@ -0,0 +1,60 @@ +--[[ + Script Name : Quests/Darklight/the_first_step.lua + Script Purpose : Handles the quest, "The First Step" + Script Author : Scatman + Script Date : 2009.01.31 + + Zone : Darklight Wood + Quest Giver: Verex N'Za + Preceded by: Prowler Annoyance (prowler_annoyance.lua) + Followed by: Reclaiming the Sablevein Tear (reclaiming_the_sablevein_tear.lua) +--]] + + +function Init(Quest) + + -- Shadowed Glen Blade + -- Blade of the Outcast + -- Smoldering Scepter + + + AddQuestStepKill(Quest, 1, "I need to destroy six Sablevein pulverizers.", 6, 100, ".", 611, 340058) + AddQuestStepCompleteAction(Quest, 1, "step1_complete_killedPulverizers") + + +end + +function Accepted(Quest, QuestGiver, Player) + if QuestGiver ~= nil then + if GetDistance(Player, QuestGiver) < 30 then + FaceTarget(QuestGiver, Player) + conversation = CreateConversation() + + PlayFlavor(QuestGiver, "voiceover/english/neriak/verex_n_za/darklight_wood/hates_envy/verex/verex010.mp3", "", "", 1616419105, 2681650739, Player) + AddConversationOption(conversation, "On my way.") + StartConversation(conversation, QuestGiver, Player, "All right. Get to work, then.") + end + end +end + +function Declined(Quest, QuestGiver, Player) +end + +function step1_complete_killedPulverizers(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 1, "I have destroyed the Sablevein pulverizers.") + UpdateQuestTaskGroupDescription(Quest, 1, "I have destroyed the Sablevein pulverizers.") + + AddQuestStepChat(Quest, 2, "I need to return to Verex N'Za.", 1, ".", 0, 340043) + AddQuestStepCompleteAction(Quest, 2, "quest_complete") +end + +function quest_complete(Quest, QuestGiver, Player) + UpdateQuestDescription(Quest, "I have destroyed the Sablevein pulverizers and am ready to move further into the cave.") + GiveQuestReward(Quest, Player) +end + +function Reload(Quest, QuestGiver, Player, Step) + if Step == 1 then + step1_complete_killedPulverizers(Quest, QuestGiver, Player) + end +end diff --git a/server/Quests/Darklight/the_mother_lode.lua b/server/Quests/Darklight/the_mother_lode.lua new file mode 100644 index 000000000..bd28631aa --- /dev/null +++ b/server/Quests/Darklight/the_mother_lode.lua @@ -0,0 +1,55 @@ +--[[ + Script Name : Quests/Darklight/the_mother_lode.lua + Script Purpose : Handles the quest, "The Mother Lode" + Script Author : Scatman + Script Date : 2009.02.03 + + Zone : Darklight Wood + Quest Giver: Ilmtar D'Viervs + Preceded by: More Luxuries (more_luxuries.lua) + Followed by: None +--]] + + +function Init(Quest) + -- Changeling Sigil + -- Rusty Dragoon Javelin + -- Cured Rawhide Boots + -- Iron Ingot Leggings + + + AddQuestStepKill(Quest, 1, "I need to collect the scales from eight scar wurms for Ilmtar D'Viervs.", 8, 100, "Ilmtar D'Viervs needs more snake scales, this time from the scar wurms in Innoruuk's Scar. He also wants pheromone sacs from the male scar wurms.", 172, 340104, 340101, 340102, 340103) + AddQuestStepKill(Quest, 2, "I need to collect pheromone sacs from the scar wurms.", 4, 35, "Ilmtar D'Viervs needs more snake scales, this time from the scar wurms in Innoruuk's Scar. He also wants pheromone sacs from the male scar wurms.", 187, 340104, 340101, 340102, 340103) + AddQuestStepCompleteAction(Quest, 1, "step1_complete_gotScales") + AddQuestStepCompleteAction(Quest, 2, "step2_complete_gotSacs") + +end + +--example only from Murrar Shar.lua +function Accepted(Quest, QuestGiver, Player) + if QuestGiver ~= nil then + if GetDistance(Player, QuestGiver) < 30 then + FaceTarget(QuestGiver, Player) + Say(QuestGiver, "Thank you for accepting this task " .. GetName(Player) .. ". Please return to me when you have completed it.") + Emote(QuestGiver, " thanks you warmly.", Player) + end + end +end + +function Declined(Quest, QuestGiver, Player) + if QuestGiver ~= nil then + if GetDistance(Player, QuestGiver) < 30 then + FaceTarget(QuestGiver, Player) + Say(QuestGiver, "If you change your mind " .. GetName(Player) .. ", you know where to find me.") + Emote(QuestGiver, " glares at you.", Player) + end + end +end + +function KilledAllCrabs(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 1, "I killed the crabs as Murrar requested.") + UpdateQuestDescription(Quest, "I killed some of the crabs on the beach. Return to Murrar Shar for your reward.") +end + + + diff --git a/server/Quests/Darklight/thexian_taint.lua b/server/Quests/Darklight/thexian_taint.lua new file mode 100644 index 000000000..8ed3c533e --- /dev/null +++ b/server/Quests/Darklight/thexian_taint.lua @@ -0,0 +1,70 @@ +--[[ + Script Name : Quests/Darklight/thexian_taint.lua + Script Purpose : Handles the quest, "Thexian Taint" + Script Author : Scatman + Script Date : 2009.02.01 + + Zone : Darklight Wood + Quest Giver: Sselnyl Do'Zyth + Preceded by: None + Followed by: None +--]] + + +function Init(Quest) + + + AddQuestStepKill(Quest, 1, "I need to kill seven untamed spirits.", 7, 100, "Sselnyl Do'Zyth wants me to kill the spirits near the Wellspring of Nightmares and the Thexian responsible.", 611, 340062, 340061) + AddQuestStep(Quest, 2, "I need to kill the Thexian responsible for rousing the spirits at the Wellspring of Nightmares.", 1, 100, "Sselnyl Do'Zyth wants me to kill the spirits near the Wellspring of Nightmares and the Thexian responsible.", 611) + AddQuestStepCompleteAction(Quest, 1, "step1_complete_killedSpirits") + AddQuestStepCompleteAction(Quest, 2, "step2_complete_killedThexian") + +end + +function Accepted(Quest, QuestGiver, Player) + FaceTarget(QuestGiver, Player) + conversation = CreateConversation() + + PlayFlavor(QuestGiver, "voiceover/english/neriak/sselnyl_do_zyth/darklight_wood/hates_envy/sselnyl/sselnyl008.mp3", "", "", 2647473511, 1776002890, Player) + AddConversationOption(conversation, "Goodbye.") + StartConversation(conversation, QuestGiver, Player, "And you, " .. GetName(Player) .. ".") +end + +function Declined(Quest, QuestGiver, Player) +end + +function step1_complete_killedSpirits(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 1, "I have slain the spirits.") + + if QuestIsComplete(Player, 87) then + multiple_steps_complete(Quest, QuestGiver, Player) + end +end + +function step2_complete_killedThexian(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 2, "I have collected the head of the Thexian responsible.") + + if QuestIsComplete(Player, 87) then + multiple_steps_complete(Quest, QuestGiver, Player) + end +end + +function multiple_steps_complete(Quest, QuestGiver, Player) + UpdateQuestTaskGroupDescription(Quest, 1, "I have collected slain the Thexian responsible for rousing the untamed spirits.") + + AddQuestStepChat(Quest, 3, "I need to bring Ginryne X'Treval's head to Ginwyss D'Arkenette at T'Vatar Post.", 1, "I need to bring the head to Ginwyss D'Arkenette.", 0, 340110) + AddQuestStepCompleteAction(Quest, 3, "quest_complete") +end + +function quest_complete(Quest, QuestGiver, Player) + UpdateQuestDescription(Quest, "I took out the Thexian responsible for the untammed spirits and brought his head to Ginwyss D'Arkenette.") + GiveQuestReward(Quest, Player) +end + +function Reload(Quest, QuestGiver, Player, Step) + if Step == 1 then + step1_complete_killedSpirits(Quest, QuestGiver, Player) + elseif Step == 2 then + step2_complete_killedThexian(Quest, QuestGiver, Player) + end +end diff --git a/server/Quests/Darklight/trinkets.lua b/server/Quests/Darklight/trinkets.lua new file mode 100644 index 000000000..7f3fa1d1b --- /dev/null +++ b/server/Quests/Darklight/trinkets.lua @@ -0,0 +1,50 @@ +--[[ + Script Name : Quests/Darklight/trinkets.lua + Script Purpose : Handles the quest, "trinkets.lua" + Script Author : Scatman + Script Date : 2009.02.02 + + Zone : Darklight Wood + Quest Giver: Ilmtar D'Viervs + Preceded by: Useful Materials (useful_materials.lua) + Followed by: Luxuries for the Rich (luxuries_for_the_rich.lua) +--]] + + +function Init(Quest) + + + AddQuestStepKill(Quest, 1, "I need eight pairs of screecher teeth for Ilmtar D'Viervs.", 8, 100, ".", 167, 340131, 340163, 340129, 340130, 340133) + AddQuestStepCompleteAction(Quest, 1, "step1_complete_gotTeeth") + +end + +function Accepted(Quest, QuestGiver, Player) + FaceTarget(QuestGiver, Player) + conversation = CreateConversation() + + PlayFlavor(QuestGiver, "voiceover/english/neriak/ilmtar_d_viervs/darklight_wood/tvatar_post/ilmtar/ilmtar015.mp3", "", "", 3602136713, 273222269, Player) + AddConversationOption(conversation, "I'll be back.") + StartConversation(conversation, QuestGiver, Player, "Good is good.") +end + +function Declined(Quest, QuestGiver, Player) +end + +function step1_complete_gotTeeth(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 1, "I have collected the screecher teeth for Ilmtar.") + + AddQuestStepChat(Quest, 2, "I need to bring these screecher teeth to Ilmtar D'Viervs.", 1, ".", 167, 340123) + AddQuestStepCompleteAction(Quest, 2, "quest_complete") +end + +function quest_complete(Quest, QuestGiver, Player) + UpdateQuestDescription(Quest, "I have collected the screecher teeth for Ilmtar.") + GiveQuestReward(Quest, Player) +end + +function Reload(Quest, QuestGiver, Player, Step) + if Step == 1 then + step1_complete_gotTeeth(Quest, QuestGiver, Player) + end +end diff --git a/server/Quests/Darklight/useful_materials.lua b/server/Quests/Darklight/useful_materials.lua new file mode 100644 index 000000000..ac305ceb2 --- /dev/null +++ b/server/Quests/Darklight/useful_materials.lua @@ -0,0 +1,59 @@ +--[[ + Script Name : Quests/Darklight/useful_materials.lua + Script Purpose : Handles the quest, "Useful Materials" + Script Author : Scatman + Script Date : 2009.02.02 + + Zone : Darklight Wood + Quest Giver: Ilmtar D'Viervs + Preceded by: One Man's Waste... (one_mans_waste.lua) + Followed by: Trinkets (trinkets.lua) +--]] + + +function Init(Quest) + -- Coarse Cloth Sleeves + -- Sanctified Helm + -- Scale Leaf Gloves + -- Shingled Helm + -- Stone Rivet Sabatons + -- Stitched Tracking Cap + + + -- discarded wood + AddQuestStepObtainItem(Quest, 1, "I need to collect six pieces of wood for Ilmtar D'Viervs.", 6, 100, ".", 830, 4584) + + AddQuestStepCompleteAction(Quest, 1, "step1_complete_gotWood") + +end + +function Accepted(Quest, QuestGiver, Player) + FaceTarget(QuestGiver, Player) + conversation = CreateConversation() + + PlayFlavor(QuestGiver, "voiceover/english/neriak/ilmtar_d_viervs/darklight_wood/tvatar_post/ilmtar/ilmtar011.mp3", "", "", 2167619330, 3237098781, Player) + AddConversationOption(conversation, "I'll return.") + StartConversation(conversation, QuestGiver, Player, "Good.") +end + +function Declined(Quest, QuestGiver, Player) +end + +function step1_complete_gotWood(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 1, "I have collected the wood.") + + AddQuestStepChat(Quest, 2, "I need to bring the wood back to Ilmtar.", 1, ".", 830, 340123) + AddQuestStepCompleteAction(Quest, 2, "quest_complete") +end + +function quest_complete(Quest, QuestGiver, Player) + -- remove all six 'discarded wood' + UpdateQuestDescription(Quest, "I have brought Ilmtar the wood he asked for.") + GiveQuestReward(Quest, Player) +end + +function Reload(Quest, QuestGiver, Player, Step) + if Step == 1 then + step1_complete_gotWood(Quest, QuestGiver, Player) + end +end diff --git a/server/Quests/Darklight/wanted_ithari_kxyrae.lua b/server/Quests/Darklight/wanted_ithari_kxyrae.lua new file mode 100644 index 000000000..a7dd7b800 --- /dev/null +++ b/server/Quests/Darklight/wanted_ithari_kxyrae.lua @@ -0,0 +1,52 @@ +--[[ + Script Name : Quests/Darklight/wanted_ithari_kxyrae.lua + Script Purpose : Handles the quest, "Wanted: Ithari K'Xyrae" + Script Author : Scatman + Script Date : 2009.02.01 + + Zone : Darklight Wood + Quest Giver: Wanted: Ithari K'Xyrae poster + Preceded by: None + Followed by: None +--]] + + +function Init(Quest) + -- Blooddrop Loop + -- Morning Dew Trinket + -- Granite Pounded Helm + -- Heavy Plated Shield + -- Faded Wraps + + + -- Head of Ithari K'Xyrae + AddQuestStepObtainItem(Quest, 1, "I need the head of Ithari K'Xyrae.", 1, 100, ".", 2459, 5622) + + AddQuestStepCompleteAction(Quest, 1, "step1_complete_killedIthari") + +end + +function Accepted(Quest, QuestGiver, Player) +end + +function Declined(Quest, QuestGiver, Player) +end + +function step1_complete_killedIthari(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 1, "I have Ithari K'Xyrae's head.") + UpdateQuestTaskGroupDescription(Quest, 1, "I have Ithari K'Xyrae's head.") + + AddQuestStepChat(Quest, 2, "I need to bring Ithari K'Xyrae's head to Sselnyl Do'Zylth.", 1, ".", 0, 340087) + AddQuestStepCompleteAction(Quest, 2, "quest_complete") +end + +function quest_complete(Quest, QuestGiver, Player) + UpdateQuestDescription(Quest, "I have slain Ithari K'Xyrae and brought her head to Sselnyl Do'Zyth.") + GiveQuestReward(Quest, Player) +end + +function Reload(Quest, QuestGiver, Player, Step) + if Step == 1 then + step1_complete_killedIthari(Quest, QuestGiver, Player) + end +end diff --git a/server/Quests/Darklight/whats_in_demand.lua b/server/Quests/Darklight/whats_in_demand.lua new file mode 100644 index 000000000..b82496f9e --- /dev/null +++ b/server/Quests/Darklight/whats_in_demand.lua @@ -0,0 +1,51 @@ +--[[ + Script Name : Quests/Darklight/whats_in_demand.lua + Script Purpose : Handles the quest, "What's in Demand?" + Script Author : Scatman + Script Date : 2009.02.02 + + Zone : Darklight Wood + Quest Giver: Ilmtar D'Viervs + Preceded by: None + Followed by: One Man's Waste... (one_mans_waste.lua) +--]] + + +function Init(Quest) + -- Merchant's Pouch + + + AddQuestStepKill(Quest, 1, "I need to collect ten bone fragments from the zombies around T'Vatar Post.", 10, 100, ".", 418, 340126, 340117, 340096, 340098, 340118, 340114) + AddQuestStepCompleteAction(Quest, 1, "step1_complete_gotBones") + +end + +function Accepted(Quest, QuestGiver, Player) + FaceTarget(QuestGiver, Player) + conversation = CreateConversation() + + PlayFlavor(QuestGiver, "voiceover/english/neriak/ilmtar_d_viervs/darklight_wood/tvatar_post/ilmtar/ilmtar003.mp3", "", "", 2929478773, 1922139925, Player) + AddConversationOption(conversation, "I'll be back.") + StartConversation(conversation, QuestGiver, Player, "Then I await your return.") +end + +function Declined(Quest, QuestGiver, Player) +end + +function step1_complete_gotBones(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 1, "Bone Fragment Found") + + AddQuestStepChat(Quest, 2, "I need to bring these bone fragments to Ilmtar.", 1, ".", 418, 340123) + AddQuestStepCompleteAction(Quest, 2, "quest_complete") +end + +function quest_complete(Quest, QuestGiver, Player) + UpdateQuestDescription(Quest, "I have given Ilmtar the bones he requested.") + GiveQuestReward(Quest, Player) +end + +function Reload(Quest, QuestGiver, Player, Step) + if Step == 1 then + step1_complete_gotBones(Quest, QuestGiver, Player) + end +end diff --git a/server/Quests/EnchantedLands/Drodo'sGoodies.lua b/server/Quests/EnchantedLands/Drodo'sGoodies.lua new file mode 100644 index 000000000..51630f009 --- /dev/null +++ b/server/Quests/EnchantedLands/Drodo'sGoodies.lua @@ -0,0 +1,94 @@ +--[[ + Script Name : Quests/EnchantedLands/Drodo'sGoodies.lua + Script Purpose : Handles the quest "Drodo's Goodies" + Script Author : Cynnar + Script Date : 2015.05.13 + Script Notes : + + Zone : Enchanted Lands + Quest Giver : Augin Drodo + Preceded by : None + Followed by : None +--]] + +local DrodosGoodies = 119 + +function Init(Quest) + AddQuestRewardCoin(Quest, math.random(10,95), math.random(39,49), math.random(1,1), 0) + AddQuestStepKill(Quest, 1, "I must hunt grove badgers.", 1, 40, "I must hunt the critters near the granary in Enchanted Lands. They should have Drodo's goodies.", 2299, 390041) + AddQuestStepKill(Quest, 2, "I must hunt lancer wasps.", 1, 40, "I must hunt the critters near the granary in Enchanted Lands. They should have Drodo's goodies.", 1229, 390092) + AddQuestStepKill(Quest, 3, "I must hunt klakrok drones.", 1, 40, "I must hunt the critters near the granary in Enchanted Lands. They should have Drodo's goodies.", 1225, 390069) + AddQuestStepKill(Quest, 4, "I must hunt briarpaw cubs.", 1, 40, "I must hunt the critters near the granary in Enchanted Lands. They should have Drodo's goodies.", 928, 390104) + AddQuestStepCompleteAction(Quest, 1, "deck") + AddQuestStepCompleteAction(Quest, 2, "comb") + AddQuestStepCompleteAction(Quest, 3, "dice") + AddQuestStepCompleteAction(Quest, 4, "box") +end + +function CheckProgress(Quest, QuestGiver, Player) + if QuestStepIsComplete(Player, DrodosGoodies, 1) and QuestStepIsComplete(Player, DrodosGoodies, 2) and QuestStepIsComplete(Player, DrodosGoodies, 3) and QuestStepIsComplete(Player, DrodosGoodies, 4) then + UpdateQuestTaskGroupDescription(Quest, 1, "I hunted the critters near the granary and collected all of Drodo's goodies.") + AddStep5(Quest, QuestGiver, Player) + end +end + +function AddStep5(Quest, QuestGiver, Player) + SetCompleteFlag(Quest) + AddQuestStepChat(Quest, 5, "I must return the goodies.", 1, "I must return the goodies to Augin Drodo at the granary near Bobick in the Enchanted Lands.", 0, GetSpawnID(QuestGiver)) + AddQuestStepCompleteAction(Quest, 5, "QuestComplete") +end + +function deck(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 1, "I found Drodo's King's Court deck!") + CheckProgress(Quest, QuestGiver, Player) +end + +function comb(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 2, "I found Drodo's foot comb!") + CheckProgress(Quest, QuestGiver, Player) +end + +function dice(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 3, "I found Drodo's goblin dice!") + CheckProgress(Quest, QuestGiver, Player) +end + +function box(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 3, "I found Drodo's brunch box!") + CheckProgress(Quest, QuestGiver, Player) +end + +function Accepted(Quest, QuestGiver, Player) + FaceTarget(QuestGiver, Player) + conversation = CreateConversation() + + PlayFlavor(QuestGiver, "augin_drodo/enchanted/augin_drodo003.mp3", "", "", 3982874170, 1388125971, Spawn) + AddConversationOption(conversation, "I'll return with your goodies.") + StartConversation(conversation, QuestGiver, Player, "Excellent! That would be very neighborly of you! Wish I could help, but I got a bum knee ya know. Otherwise these critters would fear the name Drodo.") +end + +function QuestComplete(Quest, QuestGiver, Player) + GiveQuestReward(Quest, Player) +end + +function Deleted(Quest, QuestGiver, Player) +end + +function Declined(Quest, QuestGiver, Player) +end + +function Reload(Quest, QuestGiver, Player, Step) + if QuestStepIsComplete(Player, DrodosGoodies, 1) then + deck(Quest, QuestGiver, Player) + end + if QuestStepIsComplete(Player, DrodosGoodies, 2) then + comb(Quest, QuestGiver, Player) + end + if QuestStepIsComplete(Player, DrodosGoodies, 3) then + dice(Quest, QuestGiver, Player) + end + if QuestStepIsComplete(Player, DrodosGoodies, 4) then + box(Quest, QuestGiver, Player) + end +end + diff --git a/server/Quests/EnchantedLands/HelpingSarmaSingebellows.lua b/server/Quests/EnchantedLands/HelpingSarmaSingebellows.lua new file mode 100644 index 000000000..82dd51b30 --- /dev/null +++ b/server/Quests/EnchantedLands/HelpingSarmaSingebellows.lua @@ -0,0 +1,128 @@ +--[[ + Script Name : Quests/EnchantedLands/HelpingSarmaSingebellows.lua + Script Purpose : Handles the quest "Helping Sarma Singebellows" + Script Author : Cynnar + Script Date : 2015.03.21 + Script Notes : Reward coin goes up each time quest is repeated + + Zone : Enchanted Lands + Quest Giver : Sarma Singebellows + Preceded by : + Followed by : +--]] + +local kill8 = 8 +local kill9 = 9 +local kill10 = 10 +local kill11 = 11 +local kill12 = 12 + +function Init(Quest) + SetQuestFeatherColor(Quest, 3) + SetQuestRepeatable(Quest) +end + +function Accepted(Quest, QuestGiver, Player) + + if GetTempVariable(Player, "HelpingSarmaSingebellows") == "true" then + PlayFlavor(NPC, "voiceover/english/sarma_singebellows/enchanted/sarma_singebellows002.mp3", "", "", 2943069626, 2445316031, Spawn) + AddConversationOption(conversation, "I shall return when they are destroyed.") + StartConversation(conversation, NPC, Spawn, "Excellent! You worked hard to kill all of those goblins, but we need to make sure they don't regain their foothold.") + else + PlayFlavor(NPC, "voiceover/english/sarma_singebellows/enchanted/sarma_singebellows002.mp3", "", "", 2943069626, 2445316031, Spawn) + AddConversationOption(conversation, "As you wish.") + StartConversation(conversation, NPC, Spawn, "Excellent! Goblins are tainting the water and withering the trees at a watermill by a nearby lake. I want you to destroy as many of them as you can!") + end + + SetTempVariable(Player, "HelpingSarmaSingebellows", nil) + + if GetQuestFlags(Quest) == 0 then + local quantity = math.random(8, 12) + local flags = 0 + + if quantity == 8 then + flags = flags + kill8 + elseif quantity == 9 then + flags = flags + kill9 + elseif quantity == 10 then + flags = flags + kill10 + elseif quantity == 11 then + flags = flags + kill11 + elseif quantity == 12 then + flags = flags + kill12 + end + + SetQuestFlags(Quest, flags) + SetStep(Quest, Player, quantity) + + else -- need the else for /reload quest + CheckBitMask(Quest, Player, GetQuestFlags(Quest)) + end +end + +function hasflag(flags, flag) + return flags % (2*flag) >= flag +end + +function CheckBitMask(Quest, Player, Flags) + local quantity = 0 + + if hasflag(Flags, kill8) then + quantity = 8 + elseif hasflag(Flags, kill9) then + quantity = 9 + elseif hasflag(Flags, kill10) then + quantity = 10 + elseif hasflag(Flags, kill11) then + quantity = 11 + elseif hasflag(Flags, kill12) then + quantity = 12 + end + + SetStep(Quest, Player, quantity) +end + +function SetStep(Quest, Player, quantity) + if quantity == 8 then + AddQuestStepKill(Quest, 1, "Hunt some goblins in the Enchanted Lands", quantity, 100, "I need to kill as many goblins as I am able to prevent them from tainting this land further. I need to slay more goblins!", 159, 390028, 390018, 390002, 390006, 390151, 390154, 390003, 390029) + elseif quantity == 9 then + AddQuestStepKill(Quest, 1, "Hunt some goblins in the Enchanted Lands", quantity, 100, "I need to kill as many goblins as I am able to prevent them from tainting this land further. I need to slay more goblins!", 159, 390028, 390018, 390002, 390006, 390151, 390154, 390003, 390029) + elseif quantity == 10 then + AddQuestStepKill(Quest, 1, "Hunt some goblins in the Enchanted Lands", quantity, 100, "I need to kill as many goblins as I am able to prevent them from tainting this land further. I need to slay more goblins!", 159, 390028, 390018, 390002, 390006, 390151, 390154, 390003, 390029) + elseif quantity == 11 then + AddQuestStepKill(Quest, 1, "Hunt some goblins in the Enchanted Lands", quantity, 100, "I need to kill as many goblins as I am able to prevent them from tainting this land further. I need to slay more goblins!", 159, 390028, 390018, 390002, 390006, 390151, 390154, 390003, 390029) + elseif quantity == 12 then + AddQuestStepKill(Quest, 1, "Hunt some goblins in the Enchanted Lands", quantity, 100, "I need to kill as many goblins as I am able to prevent them from tainting this land further. I need to slay more goblins!", 159, 390028, 390018, 390002, 390006, 390151, 390154, 390003, 390029) + end + + AddQuestStepCompleteAction(Quest, 1, "Step1Complete") +end + +function Step1Complete(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 1, "I have killed quite a few goblins, I should report back to Sarma Singebellows now.") + AddQuestStepChat(Quest, 2, "I need to speak to Sarma Singebellows in the Enchanted Lands.", 1, "I need to kill as many goblins as I am able to prevent them from tainting this land further. I need to slay more goblins!", 0, 390181) + AddQuestStepCompleteAction(Quest, 2, "QuestReward") + +end + +function Deleted(Quest, QuestGiver, Player) +end + +function Declined(Quest, QuestGiver, Player) + SetTempVariable(Player, "HelpingSarmaSingebellows", nil) +end + +function QuestReward(Quest, QuestGiver, Player) + GiveQuestReward(Quest, Player) + SetCompleteFlag(Quest) +end + +function Reload(Quest, QuestGiver, Player, Step) + if Step == 0 then + CheckBitMask(Quest, Player, GetQuestFlags(Quest)) + elseif Step == 1 then + Step1Complete(Quest, QuestGiver, Player) + elseif Step == 2 then + QuestReward(Quest, QuestGiver, Player) + end +end \ No newline at end of file diff --git a/server/Quests/EnchantedLands/LousyFairies.lua b/server/Quests/EnchantedLands/LousyFairies.lua new file mode 100644 index 000000000..c18f87a1e --- /dev/null +++ b/server/Quests/EnchantedLands/LousyFairies.lua @@ -0,0 +1,50 @@ +--[[ + Script Name : Quests/EnchantedLands/LousyFairies.lua + Script Purpose : Handles the quest "Lousy Fairies" + Script Author : Cynnar + Script Date : 2015.04.01 + Script Notes : + + Zone : Enchanted Lands + Quest Giver : Gubbo Chaley + Preceded by : + Followed by : + Notes : Missing Fae Dusted Bracelet of Acumen, Alacrity, Resolve, and Piety. Random chance for one of the 4. +--]] + +function Init(Quest) + AddQuestStepKill(Quest, 1, "Kill fairies along the coast.", 10, 100, "I'm going to kill a bunch of fairies to avenge the death of Gubbo's friend Fritz. There are fairies all along the coast and aren't difficult to find. Lousy fairies.", 611, 390063, 390163, 390065, 390161, 390164, 390160, 390224, 390058, 390060, 390066, 390057, 390059, 390061, 390229, 390036, 390039, 390040, 390044, 390517, 390037, 390043, 390045, 390049, 390165, 390233, 390075) + AddQuestStepCompleteAction(Quest, 1, "Step1Complete") +end + +function Accepted(Quest, QuestGiver, Player) + FaceTarget(QuestGiver, Player) + conversation = CreateConversation() + + AddConversationOption(conversation, "Alright.") + StartConversation(conversation, QuestGiver, Player, "Right over there, along the coast ... those blasted, smug fairies!") +end + +function Step1Complete(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 1, "I've slain a good many fairies along the coast. I shall return to Gubbo and inform him of what I've done.") + AddQuestStepChat(Quest, 2, "I should return to Gubbo and tell him of the victorious slayings of fairies in honor of his good friend Fritz.", 1, "I'm going to kill a bunch of fairies to avenge the death of Gubbo's friend Fritz. There are fairies all along the coast and aren't difficult to find. Lousy fairies.", 0, 390078) + AddQuestStepCompleteAction(Quest, 2, "QuestComplete") +end + +function Deleted(Quest, QuestGiver, Player) +end + +function Declined(Quest, QuestGiver, Player) +end + +function QuestComplete(Quest, QuestGiver, Player) + GiveQuestReward(Quest, Player) +end + +function Reload(Quest, QuestGiver, Player, Step) + if Step == 1 then + Step1Complete(Quest, QuestGiver, Player) + elseif Step == 2 then + QuestReward(Quest, QuestGiver, Player) + end +end \ No newline at end of file diff --git a/server/Quests/EnchantedLands/ThreeMeaningsOfLife.lua b/server/Quests/EnchantedLands/ThreeMeaningsOfLife.lua new file mode 100644 index 000000000..616c0ff3d --- /dev/null +++ b/server/Quests/EnchantedLands/ThreeMeaningsOfLife.lua @@ -0,0 +1,84 @@ +--[[ + Script Name : Quests/EnchantedLands/ThreeMeaningsOfLife.lua + Script Purpose : Handles the quest "The Curious Augur's Three Meanings of Life" + Script Author : Cynnar + Script Date : 2015.02.24 + Script Notes : + + Zone : Enchanted Lands + Quest Giver : The Curious Augur + Preceded by : None + Followed by : None +--]] + +function Init(Quest) + AddQuestStepChat(Quest, 1, "I need to answer the Curious Augur's riddle correctly", 1, "The Curius Augur is teaching me three meanings of life.", 0, 390082) + AddQuestStepCompleteAction(Quest, 1, "Step1Complete") +end + +function Accepted(Quest, QuestGiver, Player) + FaceTarget(QuestGiver, Player) + conversation = CreateConversation() + + AddConversationOption(conversation, "I have seven fear feeders and eighteen shoal serpents.", "QuestChat_0_4") + AddConversationOption(conversation, "I have fifteen fear feeders and ten shoal serpents.", "QuestChat_0_2") + AddConversationOption(conversation, "I have five fear feeders and twenty shoal serpents.", "QuestChat_0_2") + AddConversationOption(conversation, "I have no idea.", "QuestChat_0_2") + StartConversation(conversation, QuestGiver, Player, "There are many meanings to life and I can teach you only three. The first meaning is that of the nimble mind. Curiosity is a start, but you must be able to unravel this mystery to proceed. You have slain many fear feeders and shoal serpents. You have collected twenty five heads and fifty six legs. How many of each have you slain?") +end + +function Step1Complete(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 1, "I've answered the riddle correctly.") + AddQuestStepChat(Quest, 2, "I must speak with the Curious Augur to learn the second meaning of life.", 1, "The Curius Augur is teaching me three meanings of life.", 0, 390082) + AddQuestStepCompleteAction(Quest, 2, "Step2Complete") +end + +function Step2Complete(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 2, "I've spoken with the Curious Augur.") + AddQuestStepKill(Quest, 3, "I need to clear the shore of salt snappers.", 7, 100, "The Curius Augur is teaching me three meanings of life.", 171, 390064) + AddQuestStepCompleteAction(Quest, 3, "Step3Complete") +end + +function Step3Complete(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 3, "I removed the salt snapper menace.") + AddQuestStepChat(Quest, 4, "I must speak with the Curious Augur in the Enchanted Lands to learn the thrid meaning of life.", 1, "The Curius Augur is teaching me three meanings of life.", 0, 390082) + AddQuestStepCompleteAction(Quest, 4, "Step4Complete") +end + +function Step4Complete(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 4, "I've spoken with the Curious Augur.") + AddQuestStepChat(Quest, 5, "I should seek out Sarma Singebellows.", 1, "The Curius Augur is teaching me three meanings of life.", 0, 390181) + AddQuestStepCompleteAction(Quest, 5, "Step5Complete") +end + +function Step5Complete(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 5, "I've encountered Sarma Singebellows.") + AddQuestStepChat(Quest, 6, "I must return to the Curious Augur in the Enchanted Lands.", 1, "The Curius Augur is teaching me three meanings of life.", 0, 390082) + AddQuestStepCompleteAction(Quest, 6, "QuestComplete") +end + +function QuestComplete(Quest, QuestGiver, Player) + GiveQuestReward(Quest, Player) +end + +function Deleted(Quest, QuestGiver, Player) +end + +function Declined(Quest, QuestGiver, Player) +end + +function Reload(Quest, QuestGiver, Player, Step) + if Step == 1 then + Step1Complete(Quest, QuestGiver, Player) + elseif Step == 2 then + Step2Complete(Quest, QuestGiver, Player) + elseif Step == 3 then + Step3Complete(Quest, QuestGiver, Player) + elseif Step == 4 then + Step4Complete(Quest, QuestGiver, Player) + elseif Step == 5 then + Step5Complete(Quest, QuestGiver, Player) + elseif Step == 6 then + QuestComplete(Quest, QuestGiver, Player) + end +end diff --git a/server/Quests/Everfrost/a_pioneer_without_a_wagon.lua b/server/Quests/Everfrost/a_pioneer_without_a_wagon.lua new file mode 100644 index 000000000..49e46a401 --- /dev/null +++ b/server/Quests/Everfrost/a_pioneer_without_a_wagon.lua @@ -0,0 +1,44 @@ +--[[ + Script Name : Quests/Everfrost/a_pioneer_without_a_wagon.lua + Script Author : Flunklesnarkin + Script Date : 2016.02.07 14:18:25 + Script Purpose : + + Zone : Everfrost + Quest Giver: Li Ning Ventur + Preceded by: The Stories of Everfrost + Followed by: The Gift of a Token +--]] + +function Init(Quest) + + AddQuestRewardCoin(Quest, math.random(30,70), math.random(50,90), math.random(3,4), 0) + + AddQuestStep(Quest, 1, "I need to retrieve crates of the family's belongings from the ocean floor", 8, 100, "I should recover crates full of the Venturs' possessions from the ocean floor.") + AddQuestStepCompleteAction(Quest, 1, "GotCrates") + +end + +function Accepted(Quest, QuestGiver, Player) + + FaceTarget(QuestGiver, Player) + conversation = CreateConversation() + + AddConversationOption(conversation, "I am glad to help.") + AddConversationOption(conversation, "I am sure your gratitude will be expressed in some sort of coin reward.") + StartConversation(conversation, QuestGiver, Player, "You cannot know what it means to hear that.") + +end + +function Declined(Quest, QuestGiver, Player) + +end + + +function Reload(Quest, QuestGiver, Player, Step) + +end + +function Deleted(Quest, QuestGiver, Player) + +end \ No newline at end of file diff --git a/server/Quests/Everfrost/cull_the_threat_to_the_pioneers.lua b/server/Quests/Everfrost/cull_the_threat_to_the_pioneers.lua new file mode 100644 index 000000000..74767092e --- /dev/null +++ b/server/Quests/Everfrost/cull_the_threat_to_the_pioneers.lua @@ -0,0 +1,52 @@ +--[[ + Script Name : Quests/Everfrost/cull_the_threat_to_the_pioneers.lua + Script Author : Flunklesnarkin + Script Date : 2015.10.24 02:10:26 + Script Purpose : + + Zone : Everfrost + Quest Giver: Brahnagan MacLahnan + Preceded by: The Stories of Everfrost + Followed by: Further Culling +--]] + +function Init(Quest) + AddQuestRewardCoin(Quest, math.random(60,97), math.random(50,80), 1, 0) + AddQuestStepKill(Quest, 1, "I need to kill the primal frostfins that inhabit the waters around Everfrost.", 15, 100, "Pioneers crossing the Bay have often been attacked by frostfin sharks that inhabit its waters. I should cull this threat and reduce the number of primal frostfins living within the Bay.", 611, 410003) + AddQuestStepCompleteAction(Quest, 1, "KilledSharks") + +end + +function Accepted(Quest, QuestGiver, Player) + FaceTarget(QuestGiver, Player) + conversation = CreateConversation() + + AddConversationOption(conversation, "I can do that.") + StartConversation(conversation, QuestGiver, Player, "Good, report to me when it's done. You'll be rewarded. Having fewer of the sharks will encourage more pioneers to come.") + + +end + +function KilledSharks(Quest, QuestGiver, Player) + UpdateQuestTaskGroupDescription(Quest, 1, "I have cleared the waters of primal frostfins.") + SetCompleteFlag(Quest) + AddQuestStepChat(Quest, 2, "I should speak with Brahnagan MacLahgan.", 1, "I need to return to MacLahnan and tell him I've done as he asked.", 0, 410006) + AddQuestStepCompleteAction(Quest, 2, "quest_complete") +end + + +function Declined(Quest, QuestGiver, Player) + +end + +function quest_complete(Quest, QuestGiver, Player) + UpdateQuestTaskGroupDescription(Quest, 2, "I have reported my success to MacLahnan.") + GiveQuestReward(Quest, Player) +end + +function Reload(Quest, QuestGiver, Player, Step) + +end + + + diff --git a/server/Quests/Everfrost/fish_for_grunthor.lua b/server/Quests/Everfrost/fish_for_grunthor.lua new file mode 100644 index 000000000..6446b18aa --- /dev/null +++ b/server/Quests/Everfrost/fish_for_grunthor.lua @@ -0,0 +1,46 @@ +--[[ + Script Name : Quests/Everfrost/fish_for_grunthor.lua + Script Author : Flunklesnarkin + Script Date : 2015.09.03 12:09:31 + Script Purpose : + + Zone : Everfrost + Quest Giver: Burm Grunthor + Preceded by: None + Followed by: None +--]] + +function Init(Quest) + AddQuestRewardCoin(Quest, math.random(5,90), math.random(27,80), 1, 0) + AddQuestStepObtainItem(Quest, 1, "I need to harvest a number of fish for Grunthor.", 10, 100, "I need to fish for Grunthor in Everfrost.", 2549, 4869, 5475) + AddQuestStepCompleteAction(Quest, 1, "GatheredFish") +end + + +function Declined(Quest, QuestGiver, Player) +end + +function Accepted(Quest, QuestGiver, Player) +end + + +function GatheredFish(Quest, QuestGiver, Player) + UpdateQuestTaskGroupDescription(Quest, 1, "I have harvested a number of fish for Grunthor.") + SetCompleteFlag(Quest) + AddQuestStepChat(Quest, 2, "I should return these fish to Grunthor.", 1, "I should return these fish to Grunthor.", 0, 410014) + AddQuestStepCompleteAction(Quest, 2, "CompleteQuest") +end + +function CompleteQuest(Quest, QuestGiver, Player) + UpdateQuestTaskGroupDescription(Quest, 2, "I have fished a number of fish for Grunthor.") + GiveQuestReward(Quest, Player) +end + + +function Reload(Quest, QuestGiver, Player, Step) + if QuestStepIsComplete(Player, 136, 1) then + GatheredFish(Quest, QuestGiver, Player) + elseif QuestStepIsComplete(Player, 136, 2) then + CompleteQuest(Quest, QuestGiver, Player) + end +end \ No newline at end of file diff --git a/server/Quests/Everfrost/further_culling.lua b/server/Quests/Everfrost/further_culling.lua new file mode 100644 index 000000000..edf6227bf --- /dev/null +++ b/server/Quests/Everfrost/further_culling.lua @@ -0,0 +1,49 @@ +--[[ + Script Name : Quests/Everfrost/further_culling.lua + Script Author : Flunklesnarkin + Script Date : 2015.11.29 12:11:13 + Script Purpose : + + Zone : Everfrost + Quest Giver: Brahnagan MacLahnan + Preceded by: Cull the Threat to the Pioneers + Followed by: Supplies for the Pioneers +--]] + +function Init(Quest) + AddQuestRewardCoin(Quest, math.random(60,97), math.random(50,80), 1, 0) + AddQuestStepKill(Quest, 1, "I need to kill the ancient frostfins that live in the waters around Everfrost.", 10, 100, "I need to clear the waters of ancient frostfins to make the area safer for travelers.", 611, 410001) + AddQuestStepCompleteAction(Quest, 1, "KilledSharks") + +end + +function Accepted(Quest, QuestGiver, Player) + FaceTarget(QuestGiver, Player) + conversation = CreateConversation() + + AddConversationOption(conversation, "Um, I hope not.") + StartConversation(conversation, QuestGiver, Player, "I am sure you won't lose too many fingers dealing with them.") + + +end + +function KilledSharks(Quest, QuestGiver, Player) + UpdateQuestTaskGroupDescription(Quest, 1, "I have cleared the waters of ancient frostfins.") + SetCompleteFlag(Quest) + AddQuestStepChat(Quest, 2, "I should speak with Brahnagan MacLahgan.", 1, "I need to return to MacLahnan and tell him I've done as he asked.", 0, 410006) + AddQuestStepCompleteAction(Quest, 2, "quest_complete") +end + +function Declined(Quest, QuestGiver, Player) + +end + +function quest_complete(Quest, QuestGiver, Player) + UpdateQuestTaskGroupDescription(Quest, 2, "I have reported my success to MacLahnan.") + GiveQuestReward(Quest, Player) +end + +function Reload(Quest, QuestGiver, Player, Step) + +end + diff --git a/server/Quests/Everfrost/marta_terrilons_fur_hunt.lua b/server/Quests/Everfrost/marta_terrilons_fur_hunt.lua new file mode 100644 index 000000000..aa8d9a3db --- /dev/null +++ b/server/Quests/Everfrost/marta_terrilons_fur_hunt.lua @@ -0,0 +1,56 @@ +--[[ + Script Name : Quests/Everfrost/marta_terrilons_fur_hunt.lua + Script Author : Flunklesnarkin + Script Date : 2015.09.04 11:09:29 + Script Purpose : + + Zone : Everfrost + Quest Giver: Marta Terrilon + Preceded by: None + Followed by: None +--]] + +function Init(Quest) + local Pelt_Type = math.random(1,2) + AddQuestRewardCoin(Quest, math.random(5,90), math.random(27,80), math.random(3,5), 0) + if Pelt_Type == 1 then + AddQuestStepKill(Quest, 1, "Hunt glacier bears in Everfrost", math.random(8,12), 100, "I'm suppose to help Marta Terrilon get the furs that she needs. I should return to her with the furs as soon as I've gathered enough.", 126, 410087, 410088, 410122) + AddQuestStepCompleteAction(Quest, 1, "KilledBeasts") + + else + AddQuestStepKill(Quest, 1, "Hunt northern stags in Everfrost.", math.random(8,12), 100, "I'm suppose to help Marta Terrilon get the furs that she needs. I should return to her with the furs as soon as I've gathered enough.", 122, 410041, 410079) + AddQuestStepCompleteAction(Quest, 1, "KilledBeasts") + + end +end + + +function Accepted(Quest, QuestGiver, Player) + +end + +function Declined(Quest, QuestGiver, Player) + +end + +function KilledBeasts(Quest, QuestGiver, Player) + UpdateQuestTaskGroupDescription(Quest, 1, "I've hunted a large number of furred creatures, I hope these will satisfy Marta's quota.") + SetCompleteFlag(Quest) + AddQuestStepChat(Quest, 2, "I should return to Marta Terrilon in Everfrost.", 1, "I should return to Marta Terrilon in Everfrost.", 0, 410004) + AddQuestStepCompleteAction(Quest, 2, "Quest_Complete") +end + +function Quest_Complete(Quest, QuestGiver, Player) + UpdateQuestTaskGroupDescription(Quest, 2, "Marta rewarded me once I returned with the furs.") + GiveQuestReward(Quest, Player) + +end + + +function Reload(Quest, QuestGiver, Player, Step) + if QuestStepIsComplete(Player, 161, 1) then + KilledBeasts(Quest, QuestGiver, Player) + elseif QuestStepIsComplete(Player, 161, 2) then + Quest_Complete(Quest, QuestGiver, Player) + end +end \ No newline at end of file diff --git a/server/Quests/Everfrost/scouting_the_jagged_plains.lua b/server/Quests/Everfrost/scouting_the_jagged_plains.lua new file mode 100644 index 000000000..0ac06765b --- /dev/null +++ b/server/Quests/Everfrost/scouting_the_jagged_plains.lua @@ -0,0 +1,56 @@ +--[[ + Script Name : Quests/Everfrost/scouting_the_jagged_plains.lua + Script Author : Flunklesnarkin + Script Date : 2016.01.13 02:01:35 + Script Purpose : + + Zone : Everfrost + Quest Giver: Thyr Stormhammer + Preceded by: Supplies for the Pioneers (Not a requirement though) + Followed by: Peace with the Valkyries +--]] + +function Init(Quest) + AddQuestRewardCoin(Quest, math.random(20,60), math.random(30,90), math.random(3,5), 0) + + AddQuestStepLocation(Quest, 1, "I need to survey one point in the Jagged Plains.", 30, "I need to hit a number of locations within the Jagged Plains to ensure that I have scouted the whole area.", 0, 125, 20, -422) + AddQuestStepLocation(Quest, 2, "I need to survey a second point in the Jagged Plains.", 30, "I need to hit a number of locations within the Jagged Plains to ensure that I have scouted the whole area.", 0, -41, 20, -380) + AddQuestStepLocation(Quest, 3, "I need to survey a third point in the Jagged Plains.", 30, "I need to hit a number of locations within the Jagged Plains to ensure that I have scouted the whole area.", 0, -132, 20, -465) + AddQuestStepLocation(Quest, 4, "I need to survey a fourth point in the Jagged Plains.", 30, "I need to hit a number of locations within the Jagged Plains to ensure that I have scouted the whole area.", 0, 47, 30, -510) + AddQuestStepLocation(Quest, 5, "I need to survey a fifth point in the Jagged Plains.", 30, "I need to hit a number of locations within the Jagged Plains to ensure that I have scouted the whole area.", 0, 130, 20, -651) + AddQuestStepLocation(Quest, 6, "I need to survey a sixth point in the Jagged Plains.", 30, "I need to hit a number of locations within the Jagged Plains to ensure that I have scouted the whole area.", 0, 79, 24, -633) + + AddQuestStepCompleteAction(Quest, 1, "Visited_Locations") + +end + +function Accepted(Quest, QuestGiver, Player) + FaceTarget(QuestGiver, Player) + conversation = CreateConversation() + + AddConversationOption(conversation, "Sounds easy enough.") + StartConversation(conversation, QuestGiver, Player, "Do a thorough sweep of the valley, and then return to me.") + + +end + +function Declined(Quest, QuestGiver, Player) + +end + +function Visited_Locations(Quest, QuestGiver, Player) + UpdateQuestTaskGroupDescription(Quest, 1, "I have scouted the whole of the Jagged Plains, searching for a liveable space.") + SetCompleteFlag(Quest) + AddQuestStepChat(Quest, 2, "I need to speak with Thyr Stormhammer.", 1, "I need to return to Thyr Stormhammer at the Bitterwind Pioneer Camp and report what I have observed.", 0, 410068) + AddQuestStepCompleteAction(Quest, 2, "Quest_Complete") +end + +function Quest_Complete(Quest, QuestGiver, Player) + GiveQuestReward(Quest, Player) + +end + +function Reload(Quest, QuestGiver, Player, Step) + +end + diff --git a/server/Quests/Everfrost/supplies_for_the_pioneers.lua b/server/Quests/Everfrost/supplies_for_the_pioneers.lua new file mode 100644 index 000000000..61e634f46 --- /dev/null +++ b/server/Quests/Everfrost/supplies_for_the_pioneers.lua @@ -0,0 +1,57 @@ +--[[ + Script Name : Quests/Everfrost/supplies_for_the_pioneers.lua + Script Author : Flunklesnarkin + Script Date : 2015.11.29 01:11:25 + Script Purpose : + + Zone : Everfrost + Quest Giver: Brahnagan MacLahnan + Preceded by: Further Culling + Followed by: Scouting the Jagged Plains +--]] + +function Init(Quest) + + AddQuestRewardCoin(Quest, math.random(20,60), math.random(30,90), math.random(3,5), 0) + + AddQuestStepChat(Quest, 1, "I need to deliver the supplies to the pioneers in the Bitterwind Trench.", 1, "I have been given a box of supplies to deliver to the Bitterwind Trench Pioneer Encampment from Brahnagan MacLahnan.", 0, 410068) + AddQuestStepCompleteAction(Quest, 1, "Quest_Complete") + +end + +function Accepted(Quest, QuestGiver, Player) + SummonItem(Player, 5642, 1) + SetCompleteFlag(Quest) + + FaceTarget(QuestGiver, Player) + conversation = CreateConversation() + + AddConversationOption(conversation, "Thank you to you.") + StartConversation(conversation, QuestGiver, Player, "Many thanks and best of luck to you in your journeys.") + + +end + +function Declined(Quest, QuestGiver, Player) + +end + + +function Reload(Quest, QuestGiver, Player, Step) + +end + +function Deleted(Quest, QuestGiver, Player) + while HasItem(Player, 5642, 1) do + RemoveItem(Player, 5642) + end +end + +function Quest_Complete(Quest, QuestGiver, Player) + UpdateQuestDescription(Quest, "I have delivered the supplies to the pioneers.") + while HasItem(Player, 5642, 1) do + RemoveItem(Player, 5642) + end + GiveQuestReward(Quest, Player) +end + diff --git a/server/Quests/Everfrost/the_stories_of_everfrost.lua b/server/Quests/Everfrost/the_stories_of_everfrost.lua new file mode 100644 index 000000000..419d65a07 --- /dev/null +++ b/server/Quests/Everfrost/the_stories_of_everfrost.lua @@ -0,0 +1,63 @@ +--[[ + Script Name : Quests/Everfrost/the_stories_of_everfrost.lua + Script Author : Flunklesnarkin + Script Date : 2015.10.14 12:10:29 + Script Purpose : + + Zone : Everfrost + Quest Giver: Brahnagan MacLahnan + Preceded by: None + Followed by: Cull the Threat to the Pioneers +--]] + +function Init(Quest) + + AddQuestRewardCoin(Quest, math.random(20,60), math.random(30,90), math.random(3,5), 0) + + AddQuestStepChat(Quest, 1, "I should interview Newlyn Icebreaker.", 1, "I have been sent by MacLahnan to speak with a number of individuals around Stormedge Isle so I can better appreciate the situation in Everfrost.", 0, 410013) + AddQuestStepChat(Quest, 2, "I should interview Li Ning Ventur.", 1, "I have been sent by MacLahnan to speak with a number of individuals around Stormedge Isle so I can better appreciate the situation in Everfrost.", 0, 410011) + AddQuestStepCompleteAction(Quest, 1, "Spoke_To_Newlyn_Icebreaker") + AddQuestStepCompleteAction(Quest, 2, "Spoke_To_Li_Ning_Ventur") + +end + +function Accepted(Quest, QuestGiver, Player) + +end + +function Declined(Quest, QuestGiver, Player) + +end + +function Reload(Quest, QuestGiver, Player, Step) + +end + +function Spoke_To_Newlyn_Icebreaker(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 1, "I have interviewed Newlyn Icebreaker.") + ProgressCheck_Quest1(Quest, QuestGiver, Player) +end + +function Spoke_To_Li_Ning_Ventur(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 2, "I have interviewed Li Ning Ventur") + ProgressCheck_Quest1(Quest, QuestGiver, Player) +end + +function ProgressCheck_Quest1(Quest, QuestGiver, Player) + if QuestStepIsComplete(Player, 167, 1) and QuestStepIsComplete(Player, 167, 2) then + Add_Quest1_Step3(Quest, QuestGiver, Player) + end +end + +function Add_Quest1_Step3(Quest, QuestGiver, Player) + UpdateQuestTaskGroupDescription(Quest, 1, "I have heard the stories of the people of Stormedge Isle.") + SetCompleteFlag(Quest) + AddQuestStepChat(Quest, 3, "I should speak with Brahnagan MacLahnan.", 1, "Having spoken with a number of individuals around Stormedge Isle, I should return to MacLahnan", 0, 410006) + AddQuestStepCompleteAction(Quest, 3, "CompleteQuest") + +end + +function CompleteQuest(Quest, QuestGiver, Player) + GiveQuestReward(Quest, Player) +end + diff --git a/server/Quests/ForestRuins/magnificent_machinery.lua b/server/Quests/ForestRuins/magnificent_machinery.lua new file mode 100644 index 000000000..d9dafe53d --- /dev/null +++ b/server/Quests/ForestRuins/magnificent_machinery.lua @@ -0,0 +1,65 @@ +--[[ + Script Name : Quests/ForestRuins/magnificent_machinery.lua + Script Purpose : Handles the quest, "Magnificent Machinery" + Script Author : Scatman + Script Date : 2009.09.27 + + Zone : The Forest Ruins + Quest Giver: Poko Zing + Preceded by: None + Followed by: None +--]] + +function Init(Quest) + -- machine parts + AddQuestStepObtainItem(Quest, 1, "I need to collect some machine parts for Poko Zing. He says the junk parts are strewn about the Forest Ruins.", 6, 100, "Poko Zing is in need of mechanical parts and has come across quite a few in the Forest Ruins. He has asked that I help him by collecting some parts for him.", 1042, 7883) + AddQuestStepCompleteAction(Quest, 1, "Step1_Complete_GotMachineParts") + + -- the spawn is 'mechanical components' +end + +function Accepted(Quest, QuestGiver, Player) + FaceTarget(QuestGiver, Player) + conversation = CreateConversation() + + PlayFlavor(QuestGiver, "voiceover/english/tutorial_revamp/poko_zing/qey_adv02_ruins/quests/poko/poko004a.mp3", "", "", 3746859101, 2602853428, Player) + AddConversationOption(conversation, "I will return shortly.") + StartConversation(conversation, QuestGiver, Player, "Once you get them, bring them back to me and I will recycle them for my purposes.") +end + +function Declined(Quest, QuestGiver, Player) +end + +function Step1_Complete_GotMachineParts(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 1, "I have collected the machine parts.") + + AddQuestStepChat(Quest, 2, "I need to bring these machine parts back to Poko Zing.", 1, "Poko Zing is in need of mechanical parts and has come across quite a few in the Forest Ruins. He has asked that I help him by collecting some parts for him.", 0, 1960014) + AddQuestStepCompleteAction(Quest, 2, "Step2_Complete_SpokeWithPoko") +end + +function Step2_Complete_SpokeWithPoko(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 2, "I have given Poko the machine parts he asked for.") + + -- remove machine parts + while HasItem(Player, 7883) do + RemoveItem(Player, 7883) + end + + AddQuestStepChat(Quest, 3, "I need to report to Lieutenant Germain.", 1, "Poko Zing is in need of mechanical parts and has come across quite a few in the Forest Ruins. He has asked that I help him by collecting some parts for him.", 0, 1960011) + AddQuestStepCompleteAction(Quest, 3, "Quest_Complete") +end + +function Quest_Complete(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 3, "I have reported to Lieutenant Germain.") + UpdateQuestTaskGroupDescription(Quest, 1, "I have collected the parts that Poko needed. One of the parts I found surprised Poko and he asked me to speak with Lieutenant Germain.") + UpdateQuestDescription(Quest, "I have collected the parts that Poko needed. One of the parts I found surprised Poko and he asked me to speak with Lieutenant Germain.") + GiveQuestReward(Quest, Player) +end + +function Reload(Quest, QuestGiver, Player) + if Step == 1 then + Step1_Complete_GotMachineParts(Quest, QuestGiver, Player) + elseif Step == 2 then + Step2_Complete_SpokeWithPoko(Quest, QuestGiver, Player) + end +end \ No newline at end of file diff --git a/server/Quests/ForestRuins/news_for_germain.lua b/server/Quests/ForestRuins/news_for_germain.lua new file mode 100644 index 000000000..657e92600 --- /dev/null +++ b/server/Quests/ForestRuins/news_for_germain.lua @@ -0,0 +1,69 @@ +--[[ + Script Name : Quests/ForestRuins/news_for_germain.lua + Script Purpose : Handles the quest, "News for Germain" + Script Author : Scatman + Script Date : 2009.04.25 + + Zone : The Forest Ruins + Quest Giver: Acting Lieutenant Germain + Preceded by: None + Followed by: Favors (favors.lua) +--]] + +function Init(Quest) + + + -- machine parts + AddQuestStepObtainItem(Quest, 1, "I need to check west of the ruins for any sign of Del Varun. He was supposed to be near the pond on the western end of the ruins.", 1, 100, "Lieutenant Germain has asked that I search for Del Varun - a scout assigned to the Forest Ruins.", 0, DEL_VARUNS_PACK) + + AddQuestStepCompleteAction(Quest, 1, "Step1_Complete_FoundPack") + +end + +function Accepted(Quest, QuestGiver, Player) + FaceTarget(QuestGiver, Player) + conversation = CreateConversation() + + AddConversationOption(conversation, "All right.") + StartConversation(conversation, QuestGiver, Player, "Don't be foolish. Don't get yourself hurt, but if you notice anything that might lead us to him, please let me know.") +end + +function Declined(Quest, QuestGiver, Player) +end + +function Step1_Complete_FoundPack(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 1, "I have found Del Varun's pack.") + + AddQuestStepChat(Quest, 2, "I should see what I can find in Del Varun's pack (Dev note: Speak to Germain for now).", 1, "Lieutenant Germain has asked that I search for Del Varun, a scout assigned to the Forest Ruins.", 0, 1960011) + AddQuestStepCompleteAction(Quest, 2, "Step2_Complete_InspectedPack") +end + +function Step2_Complete_InspectedPack(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 2, "I have read Del Varun's log.") + + AddQuestStepChat(Quest, 3, "I should investigate the strange plants north of the pond that Del Varun spoke of.", 1, "Lieutenant Germain has asked that I search for Del Varun, a scout assigned to the Forest Ruins.", 0, 1960011) + AddQuestStepCompleteAction(Quest, 3, "Step3_Complete_InvestigatedPlants") +end + +function Step3_Complete_InvestigatedPlants(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 3, "I witnessed the strange plants that Del Varun spoke of. I collected a leaf sample from one of them.") + + AddQuestStepChat(Quest, 4, "I should take this plant sample back to Lieutenant Germain.", 1, "Lieutenant Germain has asked that I search for Del Varun, a scout assigned to the Forest Ruins.", 2102, 1960011) + AddQuestStepCompleteAction(Quest, 4, "Quest_Complete") +end + +function Quest_Complete(Quest, QuestGiver, Player) +--remove pack + UpdateQuestDescription(Quest, "I found Del Varun's satchel and log. The log led me to a strange phenomenon north of the pond on the western side of the ruins.") + GiveQuestReward(Quest, Player) +end + +function Reload(Quest, QuestGiver, Player) + if Step == 1 then + Step1_Complete_GotMachineParts(Quest, QuestGiver, Player) + elseif Step == 2 then + Step2_Complete_InspectedPack(Quest, QuestGiver, Player) + elseif Step == 3 then + Step3_Complete_InvestigatedPlants(Quest, QuestGiver, Player) + end +end diff --git a/server/Quests/FrostfangSea/a_fine_halasian_welcome.lua b/server/Quests/FrostfangSea/a_fine_halasian_welcome.lua new file mode 100644 index 000000000..9a6f7d762 --- /dev/null +++ b/server/Quests/FrostfangSea/a_fine_halasian_welcome.lua @@ -0,0 +1,33 @@ +--[[ + Script Name : Quests/FrostfangSea/a_fine_halasian_welcome.lua + Script Purpose : Handles the quest "A Fine Halasian Welcome" + Script Author : Sylva1n (updated by theFoof) + Script Date : 2011.10.23 (2013.5.2) + + Zone : Frostfang Sea + Quest Giver : Galinda Goodfaith + Preceded by : None + Followed by : Stonefist's Art of Combat +--]] + + +function Init(Quest) + AddQuestStepChat(Quest, 1, "Seek out Yasha Redblade.", 1, "I have been asked to report to Yasha Redblade in the broken ship's hull to the northeast of Galinda Goodfaith on the Pilgrims' Landing.", 0, 4700005) + AddQuestStepCompleteAction(Quest, 1, "quest_complete") +end + +function Accepted(Quest, QuestGiver, Player) +end + +function Declined(Quest, QuestGiver, Player) +end + +function quest_complete(Quest, QuestGiver, Player) + GiveQuestReward(Quest, Player) +end + +function Reload(Quest, QuestGiver, Player, Step) + if Step == 1 then + quest_complete(Quest, QuestGiver, Player) + end +end \ No newline at end of file diff --git a/server/Quests/FrostfangSea/a_good_distraction.lua b/server/Quests/FrostfangSea/a_good_distraction.lua new file mode 100644 index 000000000..17e9f71ae --- /dev/null +++ b/server/Quests/FrostfangSea/a_good_distraction.lua @@ -0,0 +1,87 @@ +--[[ + Script Name : Quests/FrostfangSea/a_good_distraction.lua + Script Purpose : for the quest "A Good Distraction" + Script Author : theFoof + Script Date : 2013.6.13 + Script Notes : + + Zone : Frostfang Sea + Quest Giver : Thirin Veliumdelver + Preceded by : Ry'Gorr Mining Operation + Followed by : Sleetfoot Search Party +--]] + +function Init(Quest) + AddQuestRewardCoin(Quest, math.random(5,90), math.random(24,40), 0, 0) + AddQuestStepChat(Quest, 1, "I should speak with Ordin Sleetfoot and begin our journey.", 1, "Thirin Veliumdelver wants me to speak with Ordin Sleetfoot when I am ready to venture into the Velinoid Catacombs.", 0, 4700965) + AddQuestStepCompleteAction(Quest, 1, "TalkedOrdin") +end + +function Accepted(Quest, QuestGiver, Player) + FaceTarget(QuestGiver, Player) + conversation = CreateConversation() + + PlayFlavor(QuestGiver, "thirin_veliumdelver/halas/cragged_spine/thirin_veliumdelver_cave010.mp3", "", "", 2867242801, 3355205024, Player) + AddConversationOption(conversation, "I will.") + StartConversation(conversation, QuestGiver, Player, "I am learning that with each passing hour. Be safe, my friend.") +end + +function Deleted(Quest, QuestGiver, Player) + local zone = GetZone(Player) + if GetZoneID == 470 then + AddSpawnAccess(GetSpawnByLocationID(zone, 32643), Player) + end +end + +function Declined(Quest, QuestGiver, Player) +end + +function TalkedOrdin(Quest, QuestGiver, Player) + UpdateQuestTaskGroupDescription(Quest, 1, "I have spoken with Ordin, who has vanished into the shadows.") + AddQuestStep(Quest, 2, "I should travel deeper into the Velinoid Catacombs and seek out Ordin.", 1, 100, "I should travel into the Velinoid Catacombs and act as a distraction so none of the Velinoids discover Ordin. He says I will eventually find him as I travel through the cavern.", 0) + AddQuestStepCompleteAction(Quest, 2, "KilledVelinoids") +end + +function KilledVelinoids(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 2, "Ordin was attacked by Velinoids but I was able to fend them off.") + AddQuestStepChat(Quest, 3, "I should make sure that Ordin is okay before continuing on.", 1, "I should travel into the Velinoid Catacombs and act as a distraction so none of the Velinoids discover Ordin. He says I will eventually find him as I travel through the cavern.", 0, 4700965) + AddQuestStepCompleteAction(Quest, 3, "FoundOrdin") +end + +function FoundOrdin(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 3, "Ordin is fine and has returned to the shadows.") + UpdateQuestTaskGroupDescription(Quest, 2, "Ordin has returned to the shadows and wants to continue exploring the catacombs. I imagine I'll find him again further in.") + AddQuestStep(Quest, 4, "I should travel deeper into the Velinoid Catacombs and seek out Ordin.", 1, 100, "I should travel further into the Velinoid Catacombs, continuing to act as a distraction for Ordin. As before I will find him as I travel futher into the catacombs.", 0) + AddQuestStepCompleteAction(Quest, 4, "KilledAmbush") +end + +function KilledAmbush(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 4, "Ordin was attacked by Velinoids but I was able to fend them off.") + AddQuestStepChat(Quest, 5, "I should make sure that Ordin is okay before continuing on.", 1, "I should travel further into the Velinoid Catacombs, continuing to act as a distraction for Ordin. As before I will find him as I travel futher into the catacombs.", 0, 4700965) + AddQuestStepCompleteAction(Quest, 5, "FoundOrdin2") +end + +function FoundOrdin2(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 5, "Ordin is fine and has instructed me to return to Thirin Veliumdelver.") + UpdateQuestTaskGroupDescription(Quest, 3, "While Ordin is checking out one last section of the catacombs, he has instructed me to return to Thirin Veliumdelver at the cavern's entrance.") + AddQuestStepChat(Quest, 6, "I should speak with Thirin Veliumdelver.", 1, "I should return to Thirin Veliumdelver, as Ordin instructed, and tell him the layout of the catacombs. Ordin should be waiting for me there if he's as good a scout as claimed.", 0, 4700112) + AddQuestStepCompleteAction(Quest, 6, "CompleteQuest") +end + +function CompleteQuest(Quest, QuestGiver, Player) + GiveQuestReward(Quest, Player) +end + +function Reload(Quest, QuestGiver, Player, Step) + if Step == 1 then + TalkedOrdin(Quest, QuestGiver, Player) + elseif Step == 2 then + KilledVelinoids(Quest, QuestGiver, Player) + elseif Step == 3 then + FoundOrdin(Quest, QuestGiver, Player) + elseif Step == 4 then + KilledAmbush(Quest, QuestGiver, Player) + elseif Step == 5 then + FoundOrdin2(Quest, QuestGiver, Player) + end +end \ No newline at end of file diff --git a/server/Quests/FrostfangSea/a_murky_miasma_of_a_mystery.lua b/server/Quests/FrostfangSea/a_murky_miasma_of_a_mystery.lua new file mode 100644 index 000000000..5c8af48c1 --- /dev/null +++ b/server/Quests/FrostfangSea/a_murky_miasma_of_a_mystery.lua @@ -0,0 +1,49 @@ +--[[ + Script Name : Quests/FrostfangSea/a_murky_miasma_of_a_mystery.lua + Script Purpose : the quest A Murky Miasma of a Mystery + Script Author : theFoof + Script Date : 2013.5.26 + + Zone : Frostfang Sea + Quest Giver : Dolur Axebeard + Preceded by : The Glimmer Orc + Followed by : A Scattering of Ashes +--]] + +function Accepted(Quest, QuestGiver, Player) + FaceTarget(QuestGiver, Player) + conversation = CreateConversation() + + PlayFlavor(QuestGiver, "dolur_axebeard/halas/great_shelf/dolur_axebeard/dolur_axebeard020.mp3", "", "", 3770331911, 592699035, Player) + AddConversationOption(conversation, "I suspect they will have what you need.") + AddConversationOption(conversation, "Let's hope this isn't a dead end.") + StartConversation(conversation, QuestGiver, Player, "Ye'll find the miasmas not far from here. Look to the icy shelf above the battlefield, south of here. Bring back whatever you can find after taking them out, and hopefully it'll solve the mystery of the Ry'Gorr's invisibility.") +end + +function Declined(Quest, QuestGiver, Player) +end + +function Deleted(Quest, QuestGiver, Player) +end + +function Init(Quest) + AddQuestRewardCoin(Quest, math.random(10,80), math.random(6,15), 0, 0) + AddQuestStepKill(Quest, 1, "I must collect several deepice crystals from deepice miasmas.", 8, 100, "I must collect several deepice crystals from deepice miasmas. The miasmas tend to wander to the west of Herga's Choke, on the ledge above the battlefield.", 3774, 4700085) + AddQuestStepCompleteAction(Quest, 1, "GotCrystals") +end + +function GotCrystals(Quest, QuestGiver, Player) + UpdateQuestTaskGroupDescription(Quest, 1, "I have collected several deepice crystals.") + AddQuestStepChat(Quest, 2, "I must speak with Dolur Axebeard.", 1, "I must speak with Dolur Axebeard, who can be found in the cave at the Great Shelf.", 0, 4700078) + AddQuestStepCompleteAction(Quest, 2, "CompleteQuest") +end + +function CompleteQuest(Quest, QuestGiver, Player) + GiveQuestReward(Quest, Player) +end + +function Reload(Quest, QuestGiver, Player, Step) + if Step == 1 then + GotCrystals(Quest, QuestGiver, Player) + end +end \ No newline at end of file diff --git a/server/Quests/FrostfangSea/a_scattering_of_ashes.lua b/server/Quests/FrostfangSea/a_scattering_of_ashes.lua new file mode 100644 index 000000000..5eed2b720 --- /dev/null +++ b/server/Quests/FrostfangSea/a_scattering_of_ashes.lua @@ -0,0 +1,53 @@ +--[[ + Script Name : Quests/FrostfangSea/a_scattering_of_ashes.lua + Script Purpose : the quest A Scattering of Ashes + Script Author : theFoof + Script Date : 2013.5.27 + + Zone : Frostfang Sea + Quest Giver : Dolur Axebeard + Preceded by : A Murky Miasma of a Mystery + Followed by : Totem Annihilation +--]] + +function Init(Quest) + AddQuestRewardCoin(Quest, math.random(23,99), math.random(6,15), 0, 0) + AddQuestStep(Quest, 1, "I must scatter the ashes of the fallen coldain at Pride Overlook.", 1, 100, "I must travel to the peak of Pride Overlook, and then scatter the ashes of the fallen coldain. The Overlook is the peak of the outcropping of the icy cliff just north of the Great Shelf.", 569) + AddQuestStepCompleteAction(Quest, 1, "ScatteredAshes") +end + +function Accepted(Quest, QuestGiver, Player) + if not HasItem(Player, 49022) then + SummonItem(Player, 49022, 1) + end + FaceTarget(QuestGiver, Player) + conversation = CreateConversation() + + PlayFlavor(QuestGiver, "dolur_axebeard/halas/great_shelf/dolur_axebeard/dolur_axebeard028.mp3", "", "", 564515719, 107243017, Player) + AddConversationOption(conversation, "Thank you. I'd be happy to help.") + AddConversationOption(conversation, "Like the Dain? That's a wild exaggeration, but I appreciate the compliment.") + AddConversationOption(conversation, "I'd rather see a coldain honor his brethren.") + StartConversation(conversation, QuestGiver, Player, "I'd be perfectly happy to give this job to one of my brothers, but I'd rather you do it, Tuce. I trust ye. Yer capable and ye fight like the Dain himself.") +end + +function Deleted(Quest, QuestGiver, Player) +end + +function Declined(Quest, QuestGiver, Player) +end + +function ScatteredAshes(Quest, QuestGiver, Player) + UpdateQuestTaskGroupDescription(Quest, 1, "I have scattered the ashes.") + AddQuestStepChat(Quest, 2, "I must speak with Dolur Axebeard.", 1, "I must speak with Dolur Axebeard, who can be found in the cave at the Great Shelf.", 0, 4700078) + AddQuestStepCompleteAction(Quest, 2, "CompleteQuest") +end + +function CompleteQuest(Quest, QuestGiver, Player) + GiveQuestReward(Quest, Player) +end + +function Reload(Quest, QuestGiver, Player, Step) + if Step == 1 then + ScatteredAshes(Quest, QuestGiver, Player) + end +end \ No newline at end of file diff --git a/server/Quests/FrostfangSea/all_that_remains.lua b/server/Quests/FrostfangSea/all_that_remains.lua new file mode 100644 index 000000000..16b9ddaf5 --- /dev/null +++ b/server/Quests/FrostfangSea/all_that_remains.lua @@ -0,0 +1,66 @@ +--[[ + Script Name : Quests/FrostfangSea/all_that_remains.lua + Script Purpose : for the quest All That Remains + Script Author : theFoof + Script Date : 2013.6.5 + Script Notes : + + Zone : Frostfang Sea + Quest Giver : Battlepriest Herga + Preceded by : Forsaking the Grave + Followed by : None +--]] + +function Init(Quest) + AddQuestRewardCoin(Quest, math.random(5,90), math.random(6,15), 0, 0) + AddQuestStep(Quest, 1, "I must recover Herga's helm from the jetty of ice below the choke.", 1, 100, "I must recover Herga's helm from the jetty of ice below Herga's Choke.", 2736) + AddQuestStepCompleteAction(Quest, 1, "ClickedHelm") +end + +function Accepted(Quest, QuestGiver, Player) + FaceTarget(QuestGiver, Player) + conversation = CreateConversation() + + PlayFlavor(QuestGiver, "battlepriest_herga/halas/great_shelf/battlepriest_herga/battlepriest_herga056.mp3", "", "", 1633477200, 3542606661, Player) + AddConversationOption(conversation, "I will recover your helmet.") + AddConversationOption(conversation, "This is the least I can do for you.") + StartConversation(conversation, QuestGiver, Player, "I have no kin, as the duties of a Battlepriest precluded the possibility of a quiet life. I never started a family. My ancestral helm is all that remains.") +end + +function Deleted(Quest, QuestGiver, Player) +end + +function Declined(Quest, QuestGiver, Player) +end + +function ClickedHelm(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 1, "I located Herga's helm, but was attacked when I attempted to retrieve it!") + AddQuestStepKill(Quest, 2, "I must kill the frenzied orc that is guarding Herga's helm.", 1, 100, "I must recover Herga's helm from the jetty of ice below Herga's Choke.", 611, 4701122) + AddQuestStepCompleteAction(Quest, 2, "KilledOrc") +end + +function KilledOrc(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 2, "I have killed the frenzied orc that was guarding Herga's helm.") + AddQuestStep(Quest, 3, "Now that I have slain the frenzied orc, I must recover Herga's helm from the jetty of ice below the choke.", 1, 100, "I must recover Herga's helm from the jetty of ice below Herga's Choke.", 2736) + AddQuestStepCompleteAction(Quest, 3, "GotHelmet") +end + +function GotHelmet(Quest, QuestGiver, Player) + UpdateQuestTaskGroupDescription(Quest, 1, "I have recovered Herga's helm.") + AddQuestStepChat(Quest, 4, "I must return the helm to Battlepriest Herga.", 1, "I must return the helm to Battlepriest Herga, who can be found on the battlefield at the Great Shelf.", 0, 4700100) + AddQuestStepCompleteAction(Quest, 4, "CompleteQuest") +end + +function CompleteQuest(Quest, QuestGiver, Player) + GiveQuestReward(Quest, Player) +end + +function Reload(Quest, QuestGiver, Player, Step) + if Step == 1 then + ClickedHelm(Quest, QuestGiver, Player) + elseif Step == 2 then + KilledOrc(Quest, QuestGiver, Player) + elseif Step == 3 then + GotHelmet(Quest, QuestGiver, Player) + end +end \ No newline at end of file diff --git a/server/Quests/FrostfangSea/an_essential_ingredient.lua b/server/Quests/FrostfangSea/an_essential_ingredient.lua new file mode 100644 index 000000000..2e5b0a1d6 --- /dev/null +++ b/server/Quests/FrostfangSea/an_essential_ingredient.lua @@ -0,0 +1,78 @@ +--[[ + Script Name : Quests/FrostfangSea/an_essential_ingredient.lua + Script Purpose : the quest An Essential Ingredient + Script Author : theFoof + Script Date : 2013.5.20 + + Zone : Frostfang Sea + Quest Giver : Blorpisa Bogchild + Preceded by : Cod and Chips + Followed by : Field Testing +--]] + +local EssentialIngredient = 22 + +function Accepted(Quest, QuestGiver, Player) + SummonItem(Player, 45388, 1) + FaceTarget(QuestGiver, Player) + conversation = CreateConversation() + + PlayFlavor(QuestGiver, "blorpisa_bogchild/halas/gwenevyns_cove/blorpisa_bogchild/blorpisa_bogchild_039.mp3", "", "", 153842278, 3257954458, Player) + AddConversationOption(conversation, "I will return to you once I have collected the elementals.") + StartConversation(conversation, QuestGiver, Player, "Thanks, and good luck!") +end + +function Declined(Quest, QuestGiver, Player) +end + +function Deleted(Quest, QuestGiver, Player) +end + +function Init(Quest) + AddQuestRewardCoin(Quest, math.random(10,90), math.random(2,5), 0, 0) + AddQuestStep(Quest, 1, "I must capture iceflows.", 4, 100, "I must capture iceflows and snowpacks. The iceflows and snowpacks can be found on the Icemane Plains west of Gwenevyn's Cove.", 1203) + AddQuestStep(Quest, 2, "I must capture snowpacks.", 4, 100, "I must capture iceflows and snowpacks. The iceflows and snowpacks can be found on the Icemane Plains west of Gwenevyn's Cove.", 1203) + AddQuestStepCompleteAction(Quest, 1, "GotIceflows") + AddQuestStepCompleteAction(Quest, 2, "GotSnowpacks") +end + +function GotIceflows(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 1, "I have captured the iceflows.") + CheckProgress(Quest, QuestGiver, Player) +end + +function GotSnowpacks(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 2, "I have captured the snowpacks.") + CheckProgress(Quest, QuestGiver, Player) +end + +function CheckProgress(Quest, QuestGiver, Player) + if QuestStepIsComplete(Player, EssentialIngredient, 1) and QuestStepIsComplete(Player, EssentialIngredient, 2) then + NextStep(Quest, QuestGiver, Player) + end +end + +function NextStep(Quest, QuestGiver, Player) + UpdateQuestTaskGroupDescription(Quest, 1, "I have captured enough iceflows and snowpacks.") + AddQuestStepChat(Quest, 3, "I must speak with Blorpisa Bogchild in Gwenevyn's Cove.", 1, "I must return the captured iceflows and snowpacks to Blorpisa Bogchild in Gwenevyn's Cove.", 0, 4700039) + AddQuestStepCompleteAction(Quest, 3, "CompleteQuest") +end + +function CompleteQuest(Quest, QuestGiver, Player) + if HasItem(Player, 45388) then + RemoveItem(Player, 45388) + end + GiveQuestReward(Quest, Player) +end + +function Reload(Quest, QuestGiver, Player, Step) + if Step == 1 then + GotIceflows(Quest, QuestGiver, Player) + end + if Step == 2 then + GotSnowpacks(Quest, QuestGiver, Player) + end + if Step == 3 then + CompleteQuest(Quest, QuestGiver, Player) + end +end \ No newline at end of file diff --git a/server/Quests/FrostfangSea/an_unbearable_problem.lua b/server/Quests/FrostfangSea/an_unbearable_problem.lua new file mode 100644 index 000000000..24193d5ab --- /dev/null +++ b/server/Quests/FrostfangSea/an_unbearable_problem.lua @@ -0,0 +1,51 @@ +--[[ + Script Name : Quests/FrostfangSea/an_unbearable_problem.lua + Script Purpose : the quest An Unbearable Problem + Script Author : theFoof + Script Date : 2013.5.21 + + Zone : Frostfang Sea + Quest Giver : Flibbit Quaqmarr + Preceded by : None + Followed by : Little Lost Froglok +--]] + +function Accepted(Quest, QuestGiver, Player) + FaceTarget(QuestGiver, Player) + conversation = CreateConversation() + + PlayFlavor(QuestGiver, "flibbit_quagmarr/halas/gwenevyns_cove/flibbit_quagmarr/flibbit_quagmarr_023.mp3", "", "", 537970765, 1600868781, Player) + AddConversationOption(conversation, "Goodbye, Flibbit.") + StartConversation(conversation, QuestGiver, Player, "I shall watch for your return.") +end + +function Declined(Quest, QuestGiver, Player) +end + +function Deleted(Quest, QuestGiver, Player) +end + +function Init(Quest) + AddQuestRewardCoin(Quest, math.random(10,80), math.random(2,5), 0, 0) + AddQuestStepKill(Quest, 1, "I must kill blizzard grizzlies.", 6, 100, "I must go south from Gwenevyn's Cove and kill blizzard grizzlies.", 611, 4700043, 4700048, 4700047, 4700052, 4701098, 4700050) + AddQuestStepCompleteAction(Quest, 1, "KilledBears") +end + +function KilledBears(Quest, QuestGiver, Player) + RemoveSpawnAccess(GetSpawnByLocationID(GetZone(Player), 5217), Player) + UpdateQuestTaskGroupDescription(Quest, 1, "I have killed blizzard grizzlies south of Gwenevyn's Cove.") + AddQuestStepChat(Quest, 2, "I must speak with Flibbit Quagmarr. Flibbit is staying in Gwenevyn's Cove.", 1, "I must return to Flibbit Quagmarr in Gwenevyn's Cove and inform him that I have killed the blizzard grizzlies.", 0, 4700045) + AddQuestStepCompleteAction(Quest, 2, "CompleteQuest") +end + +function CompleteQuest(Quest, QuestGiver, Player) + GiveQuestReward(Quest, Player) +end + +function Reload(Quest, QuestGiver, Player, Step) + if Step == 1 then + KilledBears(Quest, QuestGiver, Player) + elseif Step == 2 then + CompleteQuest(Quest, QuestGiver, Player) + end +end \ No newline at end of file diff --git a/server/Quests/FrostfangSea/arcane_elements.lua b/server/Quests/FrostfangSea/arcane_elements.lua new file mode 100644 index 000000000..b4e852175 --- /dev/null +++ b/server/Quests/FrostfangSea/arcane_elements.lua @@ -0,0 +1,50 @@ +--[[ + Script Name : Quests/FrostfangSea/arcane_elements.lua + Script Purpose : the quest Arcane Elements + Script Author : theFoof + Script Date : 2013.5.20 + + Zone : Frostfang Sea + Quest Giver : Blorpisa Bogchild + Preceded by : None + Followed by : Bear Bottoms +--]] + +function Accepted(Quest, QuestGiver, Player) + FaceTarget(QuestGiver, Player) + conversation = CreateConversation() + + PlayFlavor(QuestGiver, "blorpisa_bogchild/halas/gwenevyns_cove/blorpisa_bogchild/blorpisa_bogchild_017.mp3", "", "", 4004735863, 2962223721, Player) + AddConversationOption(conversation, "I'll be back once I have collected the ore you need.") + StartConversation(conversation, QuestGiver, Player, "Great! As I said, you can find the arcane imbued ore on the rolling stones to the southeast of Gwenevyn's Cove. They should not be too hard to find. Let me know if you get into any trouble.") +end + +function Declined(Quest, QuestGiver, Player) +end + +function Deleted(Quest, QuestGiver, Player) +end + +function Init(Quest) + AddQuestRewardCoin(Quest, math.random(10,80), math.random(2,5), 0, 0) + AddQuestStepKill(Quest, 1, "I must kill rolling stones to collect arcane imbued ore.", 5, 100, "I must kill the rolling stones that roll along the beach front southeast of Gwenevyn's Cove to collect the arcane imbued ore that is contained within the rocks.", 1119, 4700030, 4700032) + AddQuestStepCompleteAction(Quest, 1, "KilledStones") +end + +function KilledStones(Quest, QuestGiver, Player) + UpdateQuestTaskGroupDescription(Quest, 1, "I have collected the arcane imbued ore from the rolling stones.") + AddQuestStepChat(Quest, 2, "I must speak with Blorpisa Bogchild in Gwenevyn's Cove.", 1, "I must return the arcane imbued ore to Blorpisa Bogchild in Gwenevyn's Cove.", 0, 4700039) + AddQuestStepCompleteAction(Quest, 2, "CompleteQuest") +end + +function CompleteQuest(Quest, QuestGiver, Player) + GiveQuestReward(Quest, Player) +end + +function Reload(Quest, QuestGiver, Player, Step) + if Step == 1 then + KilledStones(Quest, QuestGiver, Player) + elseif Step == 2 then + CompleteQuest(Quest, QuestGiver, Player) + end +end \ No newline at end of file diff --git a/server/Quests/FrostfangSea/bartering_crystals.lua b/server/Quests/FrostfangSea/bartering_crystals.lua new file mode 100644 index 000000000..40cdfff44 --- /dev/null +++ b/server/Quests/FrostfangSea/bartering_crystals.lua @@ -0,0 +1,49 @@ +--[[ + Script Name : Quests/FrostfangSea/bartering_crstals.lua + Script Purpose : for the quest "Bartering Crystals" + Script Author : theFoof + Script Date : 2013.5.30 + Script Notes : + + Zone : Frostfang Sea + Quest Giver : Flibbit Quagmarr + Preceded by : The Absent Effigy + Followed by : Pelted +--]] + +function Init(Quest) + AddQuestStep(Quest, 1, "I must collect strange ice crystals from upon the Icemane Plains.", 5, 100, "I should head out to the Icemane Plains and collect any strange ice crystals I may find.", 2938) + AddQuestStepCompleteAction(Quest, 1, "GotCrystals") + AddQuestRewardCoin(Quest, math.random(9,80), math.random(13,25), 0, 0) +end + +function Accepted(Quest, QuestGiver, Player) + FaceTarget(QuestGiver, Player) + conversation = CreateConversation() + + PlayFlavor(QuestGiver, "flibbit_quagmarr/halas/gwenevyns_cove/flibbit_quagmarr/flibbit_quagmarr_044.mp3", "", "", 86681713, 2082517769, Player) + AddConversationOption(conversation, "I shall return with the crystals.") + StartConversation(conversation, QuestGiver, Player, "Thank you, " .. GetName(Player) .. ".") +end + +function Deleted(Quest, QuestGiver, Player) +end + +function Declined(Quest, QuestGiver, Player) +end + +function GotCrystals(Quest, QuestGiver, Player) + UpdateQuestTaskGroupDescription(Quest, 1, "I have collected the strange ice crystals.") + AddQuestStepChat(Quest, 2, "I must speak with Flibbit Quagmarr. Flibbit is staying in Gwenevyn's Cove.", 1, "I must speak with Flibbit Quagmarr. Flibbit is staying in Gwenevyn's Cove.", 0, 4700045) + AddQuestStepCompleteAction(Quest, 2, "CompleteQuest") +end + +function CompleteQuest(Quest, QuestGiver, Player) + GiveQuestReward(Quest, Player) +end + +function Reload(Quest, QuestGiver, Player, Step) + if Step == 1 then + GotCrystals(Quest, QuestGiver, Player) + end +end \ No newline at end of file diff --git a/server/Quests/FrostfangSea/bear_bottoms.lua b/server/Quests/FrostfangSea/bear_bottoms.lua new file mode 100644 index 000000000..5a2a302e7 --- /dev/null +++ b/server/Quests/FrostfangSea/bear_bottoms.lua @@ -0,0 +1,50 @@ +--[[ + Script Name : Quests/FrostfangSea/bear_bottoms.lua + Script Purpose : the quest Bear Bottoms + Script Author : theFoof + Script Date : 2013.5.20 + + Zone : Frostfang Sea + Quest Giver : Blorpisa Bogchild + Preceded by : Arcane Elements + Followed by : Cod and Chips +--]] + +function Accepted(Quest, QuestGiver, Player) + FaceTarget(QuestGiver, Player) + conversation = CreateConversation() + + PlayFlavor(QuestGiver, "blorpisa_bogchild/halas/gwenevyns_cove/blorpisa_bogchild/blorpisa_bogchild_025.mp3", "", "", 3290905220, 1893346275, Player) + AddConversationOption(conversation, "I will return to you once I have gathered the pelts.") + StartConversation(conversation, QuestGiver, Player, "Thanks. I know it's distasteful to kill cubs, but I need their softer fur to make blankets. Thank you for doing this for me, " .. GetName(Player) .. ".") +end + +function Declined(Quest, QuestGiver, Player) +end + +function Deleted(Quest, QuestGiver, Player) +end + +function Init(Quest) + AddQuestRewardCoin(Quest, math.random(10,80), math.random(2,5), 0, 0) + AddQuestStepKill(Quest, 1, "I must kill blizzard grizzly cubs to collect unmarred fur pelts.", 3, 100, "I must hunt blizzard grizzly cubs for their pelts. I can find the cubs northwest of Gwenevyn's Cove.", 122, 4700048) + AddQuestStepCompleteAction(Quest, 1, "KilledCubs") +end + +function KilledCubs(Quest, QuestGiver, Player) + UpdateQuestTaskGroupDescription(Quest, 1, "I have collected the unmarred fur pelts from the blizzard grizzly cubs.") + AddQuestStepChat(Quest, 2, "I must speak with Blorpisa Bogchild in Gwenevyn's Cove.", 1, "I must return the unmarred fur pelts to Blorpisa Bogchild in Gwenevyn's Cove.", 0, 4700039) + AddQuestStepCompleteAction(Quest, 2, "CompleteQuest") +end + +function CompleteQuest(Quest, QuestGiver, Player) + GiveQuestReward(Quest, Player) +end + +function Reload(Quest, QuestGiver, Player, Step) + if Step == 1 then + KilledCubs(Quest, QuestGiver, Player) + elseif Step == 2 then + CompleteQuest(Quest, QuestGiver, Player) + end +end \ No newline at end of file diff --git a/server/Quests/FrostfangSea/becoming_another_orcbane.lua b/server/Quests/FrostfangSea/becoming_another_orcbane.lua new file mode 100644 index 000000000..d0aa115b2 --- /dev/null +++ b/server/Quests/FrostfangSea/becoming_another_orcbane.lua @@ -0,0 +1,56 @@ +--[[ + Script Name : Quests/FrostfangSea/becoming_another_orcbane.lua + Script Purpose : the quest "Becoming Another Orcbane" + Script Author : theFoof + Script Date : 2013.7.24 + Script Notes : + + Zone : Frostfang Sea + Quest Giver : Knut Orcbane + Preceded by : Mystery on the Orc Iceberg + Followed by : Flawless Core Chore +--]] + +function Init(Quest) + AddQuestRewardCoin(Quest, math.random(5,90), math.random(12,25), 0, 0) + AddQuestStep(Quest, 1, "After dealing enough damage to the Ry'Gorr tunnelers, use the cadaver's dram on them to finish the job!", 6, 100, "Knut gave you a potion to help you battle the ranks of Ry'Gorr tunnelers within Demon's Delve.", 328) + AddQuestStepCompleteAction(Quest, 1, "UsedDram") +end + +function Accepted(Quest, QuestGiver, Player) + SummonItem(Player, 45453, 1) + FaceTarget(QuestGiver, Player) + conversation = CreateConversation() + + PlayFlavor(QuestGiver, "knut_orcbane/halas/cragged_spine/knut_orcbane_042.mp3", "", "", 3041202396, 3394706601, Player) + AddConversationOption(conversation, "Hurt them and then use the cadaver's dram. Got it!") + StartConversation(conversation, QuestGiver, Player, "Not so fast! It can only be used on them after their health has been reduced. They must be weak in order to be susceptible to the cadaver's dram.") +end + +function Deleted(Quest, QuestGiver, Player) + while HasItem(Player, 45453) do + RemoveItem(Player, 45453) + end +end + +function Declined(Quest, QuestGiver, Player) +end + +function UsedDram(Quest, QuestGiver, Player) + UpdateQuestTaskGroupDescription(Quest, 1, "You used the cadaver's dram on a great number of Ry'Gorr tunnelers.") + AddQuestStepChat(Quest, 2, "Return to Knut Orcbane now that you have reduced the number of Ry'Gorr forces within the Demon's Delve tunnels.", 1, "You should return to Knut Orcbane, at Cragged Spine, now that you have reduced the number of Ry'Gorr forces within the Demon's Delve tunnels.", 0, 4700113) + AddQuestStepCompleteAction(Quest, 2, "CompleteQuest") +end + +function CompleteQuest(Quest, QuestGiver, Player) + GiveQuestReward(Quest, Player) + while HasItem(Player, 45453) do + RemoveItem(Player, 45453) + end +end + +function Reload(Quest, QuestGiver, Player, Step) + if Step == 1 then + UsedDram(Quest, QuestGiver, Player) + end +end \ No newline at end of file diff --git a/server/Quests/FrostfangSea/beets_the_alternative.lua b/server/Quests/FrostfangSea/beets_the_alternative.lua new file mode 100644 index 000000000..72aff4f7c --- /dev/null +++ b/server/Quests/FrostfangSea/beets_the_alternative.lua @@ -0,0 +1,60 @@ +--[[ + Script Name : Quests/FrostfangSea/beets_the_alternative.lua + Script Purpose : the quest Beets the Alternative + Script Author : theFoof + Script Date : 2013.5.18 + + Zone : Frostfang Sea + Quest Giver : Wregan Firebeard + Preceded by : + Followed by : +--]] + +function Init(Quest) + AddQuestRewardCoin(Quest, math.random(50,90), math.random(2,5), 0, 0) + AddQuestStep(Quest, 1, "Gather tundra beets along the frozen beach front north of Gwenevyn's Cove, between the pillars of ice.", 3, 100, "First though, you must help gather provisions necessary for the journey.", 816) + AddQuestStepCompleteAction(Quest, 1, "GatheredBeets") +end + +function Declined(Quest, QuestGiver, Player) +end + +function Deleted(Quest, QuestGiver, Player) +end + +function Accepted(Quest, QuestGiver, Player) + FaceTarget(QuestGiver, Player) + conversation = CreateConversation() + + PlayFlavor(QuestGiver, "wregan_firebeard/halas/gwenevyns_cove/wregan_firebeard_007.mp3", "", "", 2495625045, 3478965655, Player) + AddConversationOption(conversation, "I will, believe me.") + StartConversation(conversation, QuestGiver, Player, "Yes. Now go and harvest some tundra beets. They grow along the frozen beach front north of us, between the pillars of ice. Be wary of the blizzard grizzlies nearby!") +end + +function GatheredBeets(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 1, "You gathered tundra beets.") + AddQuestStep(Quest, 2, "You should gather one more tundra beet.", 1, 100, "First though, you must help gather provisions necessary for the journey.", 816) + AddQuestStepCompleteAction(Quest, 2, "GotLastBeet") +end + +function GotLastBeet(Quest, QuestGiver, Player) + RemoveSpawnAccess(GetSpawn(Player, 4700035), Player) + UpdateQuestTaskGroupDescription(Quest, 1, "You gathered enough tundra beets, but you also found fresh orc footprints within the snow and ice!") + AddQuestStepChat(Quest, 3, "Return to Wregan Firebeard and tell him of the orcish threat!", 1, "You should return to Wregan Firebeard, the Pilgrimage Guardian, in Gwenevyn's Cove, and tell him of the orcish threat!", 0, 4700034) + AddQuestStepCompleteAction(Quest, 3, "CompleteQuest") +end + +function CompleteQuest(Quest, QuestGiver, Player) + GiveQuestReward(Quest, Player) +end + +function Reload(Quest, QuestGiver, Player, Step) + if Step == 1 then + GatheredBeets(Quest, QuestGiver, Player) + elseif Step == 2 then + GotLastBeet(Quest, QuestGiver, Player) + elseif Step == 3 then + CompleteQuest(Quest, QuestGiver, Player) + end +end + \ No newline at end of file diff --git a/server/Quests/FrostfangSea/below_the_frozen_waves.lua b/server/Quests/FrostfangSea/below_the_frozen_waves.lua new file mode 100644 index 000000000..52b56b7e2 --- /dev/null +++ b/server/Quests/FrostfangSea/below_the_frozen_waves.lua @@ -0,0 +1,63 @@ +--[[ + Script Name : Quests/FrostfangSea/below_the_frozen_waves.lua + Script Purpose : for the quest Below the Frozen Waves + Script Author : theFoof + Script Date : 2013.6.11 + Script Notes : + + Zone : Frostfang Sea + Quest Giver : Thirin Veliumdelver + Preceded by : Through Thine Eyes + Followed by : +--]] + +function Init(Quest) + AddQuestRewardCoin(Quest, math.random(5,90), math.random(12,25), 0, 0) + AddQuestStepLocation(Quest, 1, "I should travel down to the Ry'Gorr caves and see what's inside.", 15, "Using the knowledge gained through the eyes of a Ry'Gorr orc I am to travel below the waves to the underwater tunnel below Erollis.", 0, -4.45, -66.71, 233.13) + AddQuestStepCompleteAction(Quest, 1, "FoundCaves") +end + +function Accepted(Quest, QuestGiver, Player) + if not HasItem(Player, 48603) then + SummonItem(Player, 48603, 1) + end + local thirin = GetSpawnByLocationID(GetZone(QuestGiver), 14520) + FaceTarget(QuestGiver, Player) + conversation = CreateConversation() + + PlayFlavor(thirin, "thirin_veliumdelver/halas/thirin_veliumdelver/thirin_veliumdelver020.mp3", "", "", 3456248509, 1625770921, Player) + AddConversationOption(conversation, "I'll be safe, Thirin.") + StartConversation(conversation, thirin, Player, "And if ye want another, just return here, and grab it. Brell protect ye, now. You're going to need it!") +end + +function Deleted(Quest, QuestGiver, Player) +end + +function Declined(Quest, QuestGiver, Player) +end + +function FoundCaves(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 1, "There seems to be a network of caves. I should have a better look around.") + UpdateQuestTaskGroupDescription(Quest, 1, "It appears the orcs have created a network of tunnels underneath Erollis.") + AddQuestStepLocation(Quest, 2, "I should examine the suspicious cave-in to the north.", 15, "I have found that the orcs have built a network of caves under Erollis. From where I stand I can see a suspicious looking cave-in to the north. I should check it out.", 0, -9.93, -67.63, 157.29) + AddQuestStepCompleteAction(Quest, 2, "FoundCaveIn") +end + +function FoundCaveIn(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 2, "I have examined the suspicious cave-in to the north.") + UpdateQuestTaskGroupDescription(Quest, 2, "Upon examining the cave-in, it appears to have been hastily made, possibly using explosives. This is more evident by the crushed Ry'gorr tunneler found at the cave-in. I should return to Thirin Veliumdelver and inform him on what I've found.") + AddQuestStepChat(Quest, 3, "I must speak with Thirin Veliumdelver.", 1, "I need to return to Thirin Veliumdelver and inform him of the Ry'Gorrs' network of caves and of the suspicious cave-in.", 0, 4700112) + AddQuestStepCompleteAction(Quest, 3, "CompleteQuest") +end + +function CompleteQuest(Quest, QuestGiver, Player) + GiveQuestReward(Quest, Player) +end + +function Reload(Quest, QuestGiver, Player, Step) + if Step == 1 then + FoundCaves(Quest, QuestGiver, Player) + elseif Step == 2 then + FoundCaveIn(Quest, QuestGiver, Player) + end +end \ No newline at end of file diff --git a/server/Quests/FrostfangSea/blood_spilled_for_the_blade_maiden.lua b/server/Quests/FrostfangSea/blood_spilled_for_the_blade_maiden.lua new file mode 100644 index 000000000..3d920a5e3 --- /dev/null +++ b/server/Quests/FrostfangSea/blood_spilled_for_the_blade_maiden.lua @@ -0,0 +1,49 @@ +--[[ + Script Name : Quests/FrostfangSea/blood_spilled_for_the_blade_maiden.lua + Script Purpose : the quest "Blood Spilled for the Blood Maiden" + Script Author : theFoof + Script Date : 2013.6.14 + Script Notes : + + Zone : Frostfang Sea + Quest Giver : Hillfred Kinloch + Preceded by : None + Followed by : Skulls for the Taking +--]] + +function Init(Quest) + AddQuestRewardCoin(Quest, math.random(5,90), math.random(27,38), 0, 0) + AddQuestStepKill(Quest, 1, "Slay the invading Ry'Gorr!", 8, 100, "Hillfred has ordered you to stain the frozen beachfront south of Cragged Spine with the blood of the charging Ry'Gorr.", 611, 4700117) + AddQuestStepCompleteAction(Quest, 1, "KilledOrcs") +end + +function Accepted(Quest, QuestGiver, Player) + FaceTarget(QuestGiver, Player) + conversation = CreateConversation() + + PlayFlavor(QuestGiver, "hillfred_kinloch/halas/cragged_spine/hillfred_kinloch_005.mp3", "", "", 106446536, 3096406437, Player) + AddConversationOption(conversation, "Gladly.") + StartConversation(conversation, QuestGiver, Player, "Then do your worst! Stain the frozen beach front with the blood of the charging Ry'Gorr.") +end + +function Deleted(Quest, QuestGiver, Player) +end + +function Declined(Quest, QuestGiver, Player) +end + +function KilledOrcs(Quest, QuestGiver, Player) + UpdateQuestTaskGroupDescription(Quest, 1, "You have slain enough of the invading Ry'Gorr.") + AddQuestStepChat(Quest, 2, "Return to Hillfred Kinloch now that you have slain enough of the invading Ry'Gorr.", 1, "You should return to Hillfred Kinloch, at Cragged Spine, now that you have slain enough of the invading Ry'Gorr.", 0, 4700115) + AddQuestStepCompleteAction(Quest, 2, "CompleteQuest") +end + +function CompleteQuest(Quest, QuestGiver, Player) + GiveQuestReward(Quest, Player) +end + +function Reload(Quest, QuestGiver, Player, Step) + if Step == 1 then + KilledOrcs(Quest, QuestGiver, Player) + end +end \ No newline at end of file diff --git a/server/Quests/FrostfangSea/boatload_of_work.lua b/server/Quests/FrostfangSea/boatload_of_work.lua new file mode 100644 index 000000000..9d0ff9761 --- /dev/null +++ b/server/Quests/FrostfangSea/boatload_of_work.lua @@ -0,0 +1,66 @@ +--[[ + Script Name : Quests/FrostfangSea/boatload_of_work.lua + Script Purpose : Handles the quest "Boatload of Work" + Script Author : theFoof + Script Date : 2013.5.5 + + Zone : Frostfang Sea + Quest Giver : Yasha Redblade + Preceded by : Call to Arms + Followed by : Flame On! +--]] + +local Barricade = 46842 + +function Accepted(Quest, QuestGiver, Player) +end + +function Declined(Quest, QuestGiver, Player) +end + +function Init(Quest) + AddQuestRewardCoin(Quest, math.random(10,80), math.random(0,1), 0, 0) + AddQuestStep(Quest, 1, "I need to gather planks of wood.", 3, 100, "I am to gather planks of wood around the bow of the old boat wreckage on the western side of Pilgrims' Landing, and then give them to Yasha.", 2361) + AddQuestStepCompleteAction(Quest, 1, "GatheredPlanks") +end + +function GatheredPlanks(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 1, "I have the bow planks Yasha needs.") + AddQuestStepChat(Quest, 2, "Return to Yasha Redblade", 1, "I am to gather planks of wood around the bow of the old boat wreckage on the western side of Pilgrims' Landing, and then give them to Yasha.", 0, 4700005) + AddQuestStepCompleteAction(Quest, 2, "TalkedYasha") +end + +function TalkedYasha(Quest, QuestGiver, Player) + UpdateQuestTaskGroupDescription(Quest, 1, "Yasha was able to craft a makeshift barricade piece out of the planks of wood I gave her.") + SummonItem(Player, Barricade, 1) + AddQuestStep(Quest, 3, "Complete the Pilgrims' Landing barricade.", 1, 100, "I am to set the makeshift barricade piece on the ground where the break in the barricade line, south of Yasha, is lit by two torches", 0) + AddQuestStepCompleteAction(Quest, 3, "SetBarricade") +end + +function Deleted(Quest, QuestGiver, Player) + if HasItem(Player, 46842) then + RemoveItem(Player, 46842) + end +end + +function SetBarricade(Quest, QuestGiver, Player) + UpdateQuestTaskGroupDescription(Quest, 2, "The barricade keeping the orcs at bay is now complete!") + AddQuestStepChat(Quest, 4, "Return Yasha Redblade", 1, "I am to return to Yasha Redblade near the broken ship's hull on southern section of Pilgrims' Landing.", 0 ,4700005) + AddQuestStepCompleteAction(Quest, 4, "FinishQuest") +end + +function FinishQuest(Quest, QuestGiver, Player) + GiveQuestReward(Quest, Player) +end + + +function Reload(Quest, QuestGiver, Player, Step) + if Step == 1 then + GatheredPlanks(Quest, QuestGiver, Player) + elseif Step == 2 then + TalkedYasha(Quest, QuestGiver, Player) + elseif Step == 3 then + SetBarricade(Quest, QuestGiver, Player) + end +end + diff --git a/server/Quests/FrostfangSea/call_to_arms.lua b/server/Quests/FrostfangSea/call_to_arms.lua new file mode 100644 index 000000000..66d91996e --- /dev/null +++ b/server/Quests/FrostfangSea/call_to_arms.lua @@ -0,0 +1,40 @@ +--[[ + Script Name : Quests/FrostfangSea/call_to_arms.lua + Script Purpose : Handles the quest "Call to Arms" + Script Author : thefoof + Script Date : 2013.5.4 + + Zone : Frostfang Sea + Quest Giver : Yasha Redblade + Preceded by : Stonefist's Art of Combat + Followed by : Boatload of Work +--]] + +function Init(Quest) + AddQuestRewardCoin(Quest, math.random(8,80), math.random(2,5), 0, 0) + AddQuestStepKill(Quest, 1, "Slay Ry'Gorr centurions.", 4, 100, "I am to slay any of the Ry'Gorr centurions that are attacking the southeastern side of Pilgrims' Landing", 611, 4700027, 4700413) + AddQuestStepCompleteAction(Quest, 1, "KilledOrcs") +end + +function Accepted(Quest, QuestGiver, Player) +end + +function Declined(Quest, QuestGiver, Player) +end +function KilledOrcs(Quest, QuestGiver, Player) + UpdateQuestTaskGroupDescription(Quest, 1, "I defended Pilgrims' Landing by slaying several of the attacking Ry'Gorr centurions!") + AddQuestStepChat(Quest, 2, "Return to Yasha Redblade", 1, "I am to return to to Yasha Redblade near the broken ship's hull on Pilgrims' Landing.", 0, 4700005) + AddQuestStepCompleteAction(Quest, 2, "TalkedYasha") +end + +function TalkedYasha(Quest, QuestGiver, Player) + GiveQuestReward(Quest, Player) +end + +function Reload(Quest, QuestGiver, Player, Step) + if Step == 1 then + KilledOrcs(Quest, QuestGiver, Player) + elseif Step == 2 then + TalkedYasha(Quest, QuestGiver, Player) + end +end \ No newline at end of file diff --git a/server/Quests/FrostfangSea/calling_them_back.lua b/server/Quests/FrostfangSea/calling_them_back.lua new file mode 100644 index 000000000..e409076b4 --- /dev/null +++ b/server/Quests/FrostfangSea/calling_them_back.lua @@ -0,0 +1,165 @@ +--[[ + Script Name : Quests/FrostfangSea/calling_them_back.lua + Script Purpose : the quest Calling Them Back + Script Author : theFoof + Script Date : 2013.5.28 + Script Notes : + + Zone : Frostfang Sea + Quest Giver : Dolur Axebeard + Preceded by : Totem Annihilation + Followed by : The Gauntlet +--]] + +function Init(Quest) + AddQuestRewardCoin(Quest, math.random(23,90), math.random(13,20), 0, 0) + AddQuestStep(Quest, 1, "I must plant the Azia ward.", 1, 100, "Dolur Axebeard, a coldain shaman stationed at The Great Shelf, has asked for my help in planting wards on the battlefield. These wards act as beacons. The coldain soldiers that fall in battle can follow the signal from these beacons to return to Erollis as vengeful spirits, where they can continue their fight against the Ry'Gorr.", 2990) + AddQuestStep(Quest, 2, "I must plant the Beza ward.", 1, 100, "Dolur Axebeard, a coldain shaman stationed at The Great Shelf, has asked for my help in planting wards on the battlefield. These wards act as beacons. The coldain soldiers that fall in battle can follow the signal from these beacons to return to Erollis as vengeful spirits, where they can continue their fight against the Ry'Gorr.", 2990) + AddQuestStep(Quest, 3, "I must plant the Caza ward.", 1, 100, "Dolur Axebeard, a coldain shaman stationed at The Great Shelf, has asked for my help in planting wards on the battlefield. These wards act as beacons. The coldain soldiers that fall in battle can follow the signal from these beacons to return to Erollis as vengeful spirits, where they can continue their fight against the Ry'Gorr.", 2990) + AddQuestStep(Quest, 4, "I must plant the Dena ward.", 1, 100, "Dolur Axebeard, a coldain shaman stationed at The Great Shelf, has asked for my help in planting wards on the battlefield. These wards act as beacons. The coldain soldiers that fall in battle can follow the signal from these beacons to return to Erollis as vengeful spirits, where they can continue their fight against the Ry'Gorr.", 2990) + AddQuestStep(Quest, 5, "I must plant the Ena ward.", 1, 100, "Dolur Axebeard, a coldain shaman stationed at The Great Shelf, has asked for my help in planting wards on the battlefield. These wards act as beacons. The coldain soldiers that fall in battle can follow the signal from these beacons to return to Erollis as vengeful spirits, where they can continue their fight against the Ry'Gorr.", 2990) + AddQuestStepCompleteAction(Quest, 1, "PlantedAzia") + AddQuestStepCompleteAction(Quest, 2, "PlantedBeza") + AddQuestStepCompleteAction(Quest, 3, "PlantedCaza") + AddQuestStepCompleteAction(Quest, 4, "PlantedDena") + AddQuestStepCompleteAction(Quest, 5, "PlantedEna") +end + +function Accepted(Quest, QuestGiver, Player) + if not HasItem(Player, 45448) then + SummonItem(Player, 45448, 1) + end + FaceTarget(QuestGiver, Player) + conversation = CreateConversation() + + PlayFlavor(QuestGiver, "dolur_axebeard/halas/great_shelf/dolur_axebeard/dolur_axebeard059.mp3", "", "", 118933813, 3206945922, Player) + AddConversationOption(conversation, "I understand.") + AddConversationOption(conversation, "Shouldn't be a problem.") + StartConversation(conversation, QuestGiver, Player, "Here are the wards. Head to the south, where the fighting is heaviest and poke around. Ye'll want to keep an eye out for arcane patterns drawn in the snow. Those designs indicate the best locations to place the wards.") +end + +function Deleted(Quest, QuestGiver, Player) + RemoveItem(Player, 45448) + local zone = GetZone(Player) + RemoveSpawnAccess(GetSpawnByLocationID(zone, 572695), Player) + RemoveSpawnAccess(GetSpawnByLocationID(zone, 572694), Player) + RemoveSpawnAccess(GetSpawnByLocationID(zone, 572693), Player) + RemoveSpawnAccess(GetSpawnByLocationID(zone, 572692), Player) + RemoveSpawnAccess(GetSpawnByLocationID(zone, 572696), Player) +end + +function Declined(Quest, QuestGiver, Player) +end + +function PlantedAzia(Quest, QuestGiver, Player) + local zone = GetZone(Player) + local runes = GetSpawnByLocationID(zone, 572693) + local X = GetX(runes) + local Y = GetY(runes) + local Z = GetZ(runes) + local heading = GetHeading(runes) + local ward = SpawnMob(zone, 4701741, 1, X + math.random(-3,3), Y, Z + math.random(-3,3), heading) + AddSpawnAccess(ward, Player) + UpdateQuestStepDescription(Quest, 1, "I have planted the Azia ward.") + SendMessage(Player, "You place the Azia ward.") + CheckProgress(Quest, QuestGiver, Player) + RemoveSpawnAccess(runes, Player) +end + +function PlantedBeza(Quest, QuestGiver, Player) + local zone = GetZone(Player) + local runes = GetSpawnByLocationID(zone, 572694) + local X = GetX(runes) + local Y = GetY(runes) + local Z = GetZ(runes) + local heading = GetHeading(runes) + local ward = SpawnMob(zone, 4701741, 1, X + math.random(-3,3), Y, Z + math.random(-3,3), heading) + AddSpawnAccess(ward, Player) + UpdateQuestStepDescription(Quest, 2, "I have planted the Beza ward.") + SendMessage(Player, "You place the Beza ward.") + CheckProgress(Quest, QuestGiver, Player) + RemoveSpawnAccess(runes, Player) +end + +function PlantedCaza(Quest, QuestGiver, Player) + local zone = GetZone(Player) + local runes = GetSpawnByLocationID(zone, 572695) + local X = GetX(runes) + local Y = GetY(runes) + local Z = GetZ(runes) + local heading = GetHeading(runes) + local ward = SpawnMob(zone, 4701741, 1, X + math.random(-3,3), Y, Z + math.random(-3,3), heading) + AddSpawnAccess(ward, Player) + UpdateQuestStepDescription(Quest, 3, "I have planted the Caza ward.") + SendMessage(Player, "You place the Caza ward.") + CheckProgress(Quest, QuestGiver, Player) + RemoveSpawnAccess(runes, Player) +end + +function PlantedDena(Quest, QuestGiver, Player) + local zone = GetZone(Player) + local runes = GetSpawnByLocationID(zone, 572692) + local X = GetX(runes) + local Y = GetY(runes) + local Z = GetZ(runes) + local heading = GetHeading(runes) + local ward = SpawnMob(zone, 4701741, 1, X + math.random(-3,3), Y, Z + math.random(-3,3), heading) + AddSpawnAccess(ward, Player) + UpdateQuestStepDescription(Quest, 4, "I have planted the Dena ward.") + SendMessage(Player, "You place the Dena ward.") + CheckProgress(Quest, QuestGiver, Player) + RemoveSpawnAccess(runes, Player) +end + +function PlantedEna(Quest, QuestGiver, Player) + local zone = GetZone(Player) + local runes = GetSpawnByLocationID(zone, 572696) + local X = GetX(runes) + local Y = GetY(runes) + local Z = GetZ(runes) + local heading = GetHeading(runes) + local ward = SpawnMob(zone, 4701741, 1, X + math.random(-3,3), Y, Z + math.random(-3,3), heading) + AddSpawnAccess(ward, Player) + UpdateQuestStepDescription(Quest, 5, "I have planted the Ena ward.") + SendMessage(Player, "You place the Ena ward.") + CheckProgress(Quest, QuestGiver, Player) + RemoveSpawnAccess(runes, Player) +end + +function CheckProgress(Quest, QuestGiver, Player) + if QuestStepIsComplete(Player, 35, 1) and QuestStepIsComplete(Player, 35, 2) and QuestStepIsComplete(Player, 35, 3) and QuestStepIsComplete(Player, 35, 4) and QuestStepIsComplete(Player, 35, 5) then + AddStep6(Quest, QuestGiver, Player) + end +end + +function AddStep6(Quest, QuestGiver, Player) + UpdateQuestTaskGroupDescription(Quest, 1, "I have placed the spirit wards.") + AddQuestStepChat(Quest, 6, "I must speak with Dolur Axebeard.", 1, "I must speak with Dolur Axebeard, who can be found in the cave at the Great Shelf.", 0, 4700078) + AddQuestStepCompleteAction(Quest, 6, "CompleteQuest") +end + +function CompleteQuest(Quest, QuestGiver, Player) + GiveQuestReward(Quest, Player) + RemoveItem(Player, 45448) +end + +function Reload(Quest, QuestGiver, Player, Step) + if QuestStepIsComplete(Player, 35, 1) then + PlantedAzia(Quest, QuestGiver, Player) + end + if QuestStepIsComplete(Player, 35, 2) then + PlantedBeza(Quest, QuestGiver, Player) + end + if QuestStepIsComplete(Player, 35, 3) then + PlantedCaza(Quest, QuestGiver, Player) + end + if QuestStepIsComplete(Player, 35, 4) then + PlantedDena(Quest, QuestGiver, Player) + end + if QuestStepIsComplete(Player, 35, 5) then + PlantedEna(Quest, QuestGiver, Player) + end + if QuestStepIsComplete(Player, 35, 1) and QuestStepIsComplete(Player, 35, 2) and QuestStepIsComplete(Player, 35, 3) and QuestStepIsComplete(Player, 35, 4) and QuestStepIsComplete(Player, 35, 5) then + AddStep6(Quest, QuestGiver, Player) + end +end \ No newline at end of file diff --git a/server/Quests/FrostfangSea/campside_spores.lua b/server/Quests/FrostfangSea/campside_spores.lua new file mode 100644 index 000000000..0d8bcde50 --- /dev/null +++ b/server/Quests/FrostfangSea/campside_spores.lua @@ -0,0 +1,56 @@ +--[[ + Script Name : Quests/FrostfangSea/campside_spores.lua + Script Purpose : the quest Campside Spores + Script Author : theFoof + Script Date : 2013.6.24 + Script Notes : + + Zone : Frostfang Sea + Quest Giver : Odon Scourgeson + Preceded by : Highly Flammable Materials + Followed by : Ry'Gorr Tool Taking +--]] + +function Init(Quest) + AddQuestRewardCoin(Quest, math.random(5,90), math.random(12,25), 0, 0) + AddQuestStep(Quest, 1, "Apply the crustose spores to any Ry'Gorr provisions on Jagged Daggers.", 4, 100, "Odon wants to apply the crustose spores to any Ry'Gorr provisions you find within their encampment on Jagged Daggers.", 569) + AddQuestStepCompleteAction(Quest, 1, "UsedSpores") +end + +function Accepted(Quest, QuestGiver, Player) + SummonItem(Player, 45807) + FaceTarget(QuestGiver, Player) + conversation = CreateConversation() + + PlayFlavor(QuestGiver, "odon_scourgeson/halas/cragged_spine/odon_scourgeson_028.mp3", "", "", 2284024418, 845774504, Player) + AddConversationOption(conversation, "I will.") + StartConversation(conversation, QuestGiver, Player, "Oh, but you are not the one that will be doing it. We're going to leave that up to the crustose. Take this pouch of crustose spores and spread them on any Ry'Gorr provisions that you find on Jagged Daggers Isle. Return to me when you have accomplished this task.") +end + +function Deleted(Quest, QuestGiver, Player) + if HasItem(Player, 45807) then + RemoveItem(Player, 45807) + end +end + +function Declined(Quest, QuestGiver, Player) +end + +function UsedSpores(Quest, QuestGiver, Player) + UpdateQuestTaskGroupDescription(Quest, 1, "You spread crustose spores on many provision stashes the Ry'Gorr had and survived the ensuing attacks by angered orcs.") + AddQuestStepChat(Quest, 2, "Return to Odon Scourgeson now that you have spread crustose spores on the Ry'Gorr provisions and survived the ensuing attacks by angered orcs.", 1, "You should return to Odon Scourgeson, at Cragged Spine, now that you have spread crustose spores on the Ry'Gorr provisions and survived the ensuing attacks by angered orcs.", 0, 4700108) + AddQuestStepCompleteAction(Quest, 2, "CompleteQuest") +end + +function CompleteQuest(Quest, QuestGiver, Player) + if HasItem(Player, 45807) then + RemoveItem(Player, 45807) + end + GiveQuestReward(Quest, Player) +end + +function Reload(Quest, QuestGiver, Player, Step) + if Step == 1 then + UsedSpores(Quest, QuestGiver, Player) + end +end \ No newline at end of file diff --git a/server/Quests/FrostfangSea/clan_of_the_cave_imps.lua b/server/Quests/FrostfangSea/clan_of_the_cave_imps.lua new file mode 100644 index 000000000..b821df8df --- /dev/null +++ b/server/Quests/FrostfangSea/clan_of_the_cave_imps.lua @@ -0,0 +1,63 @@ +--[[ + Script Name : Quests/FrostfangSea/clan_of_the_cave_imps.lua + Script Purpose : the quest Clan of the Cave Imps + Script Author : theFoof + Script Date : 2013.7.21 + Script Notes : + + Zone : Frostfang Sea + Quest Giver : Knut Orcbane + Preceded by : Impish Threats + Followed by : Mystery on the Orc Iceberg +--]] + +function Init(Quest) + AddQuestRewardCoin(Quest, math.random(5,90), math.random(12,25), 0, 0) + AddQuestStep(Quest, 1, "Reclaim any Cragged Spine supply crates you locate within the glacial imp cave.", 4, 100, "Reclaim the Cragged Spine provisions that the miscreants and scoundrels have stolen.", 655) + AddQuestStepKill(Quest, 2, "Slay any imps that may stand in your way within the glacial imp cave.", 6, 100, "Reclaim the Cragged Spine provisions that the miscreants and scoundrels have stolen.", 611, 4700066, 4700065, 4701106, 4701143) + AddQuestStepCompleteAction(Quest, 1, "GotCrates") + AddQuestStepCompleteAction(Quest, 2, "KilledImps") +end + +function Accepted(Quest, QuestGiver, Player) +end + +function Deleted(Quest, QuestGiver, Player) +end + +function Declined(Quest, QuestGiver, Player) +end + +function GotCrates(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 1, "You found all of the Cragged Spine supply crates!") + ProgressCheck(Quest, QuestGiver, Player) +end + +function KilledImps(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 2, "You've slain enough of the imps!") + ProgressCheck(Quest, QuestGiver, Player) +end + +function ProgressCheck(Quest, QuestGiver, Player) + if QuestStepIsComplete(Player, 79, 1) and QuestStepIsComplete(Player, 79, 2) then + AddStep3(Quest, QuestGiver, Player) + end +end + +function AddStep3(Quest, QuestGiver, Player) + UpdateQuestTaskGroupDescription(Quest, 1, "You found all of the Cragged Spine supply crates and have slain many imps in the process!") + AddQuestStepChat(Quest, 3, "Return to Knut Orcbane now that you retrieved all of the stolen Cragged Spine provisions.", 1, "You should return to Knut Orcbane, at Cragged Spine, now that you retrieved all of the stolen Cragged Spine supplies.", 0, 4700113) + AddQuestStepCompleteAction(Quest, 3, "CompleteQuest") +end + +function CompleteQuest(Quest, QuestGiver, Player) + GiveQuestReward(Quest, Player) +end + +function Reload(Quest, QuestGiver, Player, Step) + if QuestStepIsComplete(Player, 79, 1) then + GotCrates(Quest, QuestGiver, Player) + elseif QuestStepIsComplete(Player, 79, 2) then + KilledImps(Quest, QuestGiver, Player) + end +end \ No newline at end of file diff --git a/server/Quests/FrostfangSea/cod_and_chips.lua b/server/Quests/FrostfangSea/cod_and_chips.lua new file mode 100644 index 000000000..0523ee179 --- /dev/null +++ b/server/Quests/FrostfangSea/cod_and_chips.lua @@ -0,0 +1,50 @@ +--[[ + Script Name : Quests/FrostfangSea/cod_and_chips.lua + Script Purpose : the quest Cod and Chips + Script Author : theFoof + Script Date : 2013.5.20 + + Zone : Frostfang Sea + Quest Giver : Blorpisa Bogchild + Preceded by : Bear Bottoms + Followed by : Essential Ingredient +--]] + +function Accepted(Quest, QuestGiver, Player) + FaceTarget(QuestGiver, Player) + conversation = CreateConversation() + + PlayFlavor(QuestGiver, "blorpisa_bogchild/halas/gwenevyns_cove/blorpisa_bogchild/blorpisa_bogchild_032.mp3", "", "", 911192006, 688179245, Player) + AddConversationOption(conversation, "Then I shall return with the large Iceclad cod.") + StartConversation(conversation, QuestGiver, Player, "You will find the large Iceclad cod in the Frostfang Sea, northwest of here. I will need them to be large Iceclad cod in order to feed everyone.") +end + +function Declined(Quest, QuestGiver, Player) +end + +function Deleted(Quest, QuestGiver, Player) +end + +function Init(Quest) + AddQuestRewardCoin(Quest, math.random(10,80), math.random(2,5), 0, 0) + AddQuestStepKill(Quest, 1, "I must hunt large Iceclad cod.", 3, 100, "I must hunt large Iceclad cod. They can be found swimming in the Frostfang Sea northwest of Gwenevyn's Cove, on the western side of Erollis.", 2541, 4700031) + AddQuestStepCompleteAction(Quest, 1, "KilledCod") +end + +function KilledCod(Quest, QuestGiver, Player) + UpdateQuestTaskGroupDescription(Quest, 1, "I have hunted the large Iceclad cod. I should return to Gwenevyn's Cove.") + AddQuestStepChat(Quest, 2, "I must speak with Blorpisa Bogchild in Gwenevyn's Cove.", 1, "Blorpisa thanked me for bringing her the large Iceclad cod.", 0, 4700039) + AddQuestStepCompleteAction(Quest, 2, "CompleteQuest") +end + +function CompleteQuest(Quest, QuestGiver, Player) + GiveQuestReward(Quest, Player) +end + +function Reload(Quest, QuestGiver, Player, Step) + if Step == 1 then + KilledCod(Quest, QuestGiver, Player) + elseif Step == 2 then + CompleteQuest(Quest, QuestGiver, Player) + end +end \ No newline at end of file diff --git a/server/Quests/FrostfangSea/crustose_removal.lua b/server/Quests/FrostfangSea/crustose_removal.lua new file mode 100644 index 000000000..cbfc4994d --- /dev/null +++ b/server/Quests/FrostfangSea/crustose_removal.lua @@ -0,0 +1,41 @@ +--[[ + Script Name : Quests/FrostfangSea/crustose_removal.lua + Script Purpose : the quest Crustose Removal + Script Author : theFoof + Script Date : 2013.5.12 + + Zone : Frostfang Sea + Quest Giver : Arrin Clelland + Preceded by : None + Followed by : Repelling Little Critters +--]] + +function Init(Quest) + AddQuestRewardCoin(Quest, math.random(10,50), math.random(1,3), 0, 0) + AddQuestStepKill(Quest, 1, "Slay crustore defenders or sporetenders.", 4, 100, "I am to slay any of the crustose defenders or sporetenders I find on the western side of the isle in search of spore samples.", 811, 4700405, 4700003, 4700408, 4700019) + AddQuestStepCompleteAction(Quest, 1, "KilledFungus") +end + +function Accepted(Quest, QuestGiver, Player) +end + +function Declined(Quest, QuestGiver, Player) +end + +function KilledFungus(Quest, QuestGiver, Player) + UpdateQuestTaskGroupDescription(Quest, 1, "I have slain crustose fungusmen I found on the western side of the isle.") + AddQuestStepChat(Quest, 2, "Return to Arrin Clelland.", 1, "I am to return to Arrin Clelland in Pilgrims' Landing.", 0, 4700000) + AddQuestStepCompleteAction(Quest, 2, "CompleteQuest") +end + +function CompleteQuest(Quest, QuestGiver, Player) + GiveQuestReward(Quest, Player) +end + +function Reload(Quest, QuestGiver, Player, Step) + if Step == 1 then + KilledFungus(Quest, QuestGiver, Player) + elseif Step == 2 then + CompleteQuest(Quest, QuestGiver, Player) + end +end \ No newline at end of file diff --git a/server/Quests/FrostfangSea/disarming_the_rygorr.lua b/server/Quests/FrostfangSea/disarming_the_rygorr.lua new file mode 100644 index 000000000..5b8e03c0d --- /dev/null +++ b/server/Quests/FrostfangSea/disarming_the_rygorr.lua @@ -0,0 +1,51 @@ +--[[ + Script Name : Quests/FrostfangSea/disarming_the_rygorr.lua + Script Purpose : the quest Disarming the Ry'Gorr + Script Author : theFoof + Script Date : 2013.6.3 + + Zone : Frostfang Sea + Quest Giver : Blorpisa Bogchild + Preceded by : Weapon of Choice + Followed by : Perfectly Missing +--]] + +function Init(Quest) + AddQuestRewardCoin(Quest, math.random(5,80), math.random(13,25), 0, 0) + AddQuestStep(Quest, 1, "I must cleanse Ry'Gorr weapons.", 5, 100, "I must go to the battlefield and cleanse Ry'Gorr weapons.", 616) + AddQuestStepCompleteAction(Quest, 1, "CleansedWeapons") +end + +function Accepted(Quest, QuestGiver, Player) + if not HasItem(Player, 47614) then + SummonItem(Player, 47614, 1) + end +end + +function Deleted(Quest, QuestGiver, Player) + if HasItem(Player, 47614) then + RemoveItem(Player, 47614) + end +end + +function Declined(Quest, QuestGiver, Player) +end + +function CleansedWeapons(Quest, QuestGiver, Player) + UpdateQuestTaskGroupDescription(Quest, 1, "I have cleansed the Ry'Gorr weapons I found on the battlefield.") + AddQuestStepChat(Quest, 2, "I must speak with Blorpisa Bogchild. Blorpisa is staying at the Great Shelf.", 1, "I must return to Blorpisa at the Great Shelf and tell her that her potion was a success.", 0, 4700039) + AddQuestStepCompleteAction(Quest, 2, "CompleteQuest") +end + +function CompleteQuest(Quest, QuestGiver, Player) + GiveQuestReward(Quest, Player) + if HasItem(Player, 47614) then + RemoveItem(Player, 47614) + end +end + +function Reload(Quest, QuestGiver, Player, Step) + if Step == 1 then + CleansedWeapons(Quest, QuestGiver, Player) + end +end \ No newline at end of file diff --git a/server/Quests/FrostfangSea/displaced_and_discouraged,lua b/server/Quests/FrostfangSea/displaced_and_discouraged,lua new file mode 100644 index 000000000..d84690f73 --- /dev/null +++ b/server/Quests/FrostfangSea/displaced_and_discouraged,lua @@ -0,0 +1,50 @@ +--[[ + Script Name : Quests/FrostfangSea/displaced_and_discouraged.lua + Script Purpose : for the quest "Displaced and Discouraged" + Script Author : theFoof + Script Date : 2013.5.31 + Script Notes : + + Zone : Frostfang Sea + Quest Giver : Belka Thunderheart + Preceded by : None + Followed by : Reclaiming Their Honor +--]] + +function Init(Quest) + AddQuestRewardCoin(Quest, math.random(5,80), math.random(13,25), 0, 0) + AddQuestStepKill(Quest, 1, "I must kill several Ry'Gorr raiders.", 8, 100, "I must kill several Ry'Gorr raiders. The raiders can be found on the jetties of ice below Pride Overlook and Herga's Choke, or on Ry'Gorr Isle.", 611, 4701108, 4700868) + AddQuestStepCompleteAction(Quest, 1, "KilledOrcs") +end + +function Accepted(Quest, QuestGiver, Player) + FaceTarget(QuestGiver, Player) + conversation = CreateConversation() + + PlayFlavor(QuestGiver, "", "", "", 0, 0, Player) + AddConversationOption(conversation, "Brell be with you, as well.") + AddConversationOption(conversation, "I will return.") + StartConversation(conversation, QuestGiver, Player, "We could surely use your help with these orcs. Brell be with ye.") +end + +function Deleted(Quest, QuestGiver, Player) +end + +function Declined(Quest, QuestGiver, Player) +end + +function KilledOrcs(Quest, QuestGiver, Player) + UpdateQuestTaskGroupDescription(Quest, 1, "I have killed several Ry'Gorr raiders.") + AddQuestStepChat(Quest, 2, "I must speak with Belka Thunderheart.", 1, "I must speak with Belka Thunderheart, who can be found in the cave at the Great Shelf.", 0, 4700079) + AddQuestStepCompleteAction(Quest, 2, "CompleteQuest") +end + +function CompleteQuest(Quest, QuestGiver, Player) + GiveQuestReward(Quest, Player) +end + +function Reload(Quest, QuestGiver, Player, Step) + if Step == 1 then + KilledOrcs(Quest, QuestGiver, Player) + end +end \ No newline at end of file diff --git a/server/Quests/FrostfangSea/displaced_and_discouraged.lua b/server/Quests/FrostfangSea/displaced_and_discouraged.lua new file mode 100644 index 000000000..d84690f73 --- /dev/null +++ b/server/Quests/FrostfangSea/displaced_and_discouraged.lua @@ -0,0 +1,50 @@ +--[[ + Script Name : Quests/FrostfangSea/displaced_and_discouraged.lua + Script Purpose : for the quest "Displaced and Discouraged" + Script Author : theFoof + Script Date : 2013.5.31 + Script Notes : + + Zone : Frostfang Sea + Quest Giver : Belka Thunderheart + Preceded by : None + Followed by : Reclaiming Their Honor +--]] + +function Init(Quest) + AddQuestRewardCoin(Quest, math.random(5,80), math.random(13,25), 0, 0) + AddQuestStepKill(Quest, 1, "I must kill several Ry'Gorr raiders.", 8, 100, "I must kill several Ry'Gorr raiders. The raiders can be found on the jetties of ice below Pride Overlook and Herga's Choke, or on Ry'Gorr Isle.", 611, 4701108, 4700868) + AddQuestStepCompleteAction(Quest, 1, "KilledOrcs") +end + +function Accepted(Quest, QuestGiver, Player) + FaceTarget(QuestGiver, Player) + conversation = CreateConversation() + + PlayFlavor(QuestGiver, "", "", "", 0, 0, Player) + AddConversationOption(conversation, "Brell be with you, as well.") + AddConversationOption(conversation, "I will return.") + StartConversation(conversation, QuestGiver, Player, "We could surely use your help with these orcs. Brell be with ye.") +end + +function Deleted(Quest, QuestGiver, Player) +end + +function Declined(Quest, QuestGiver, Player) +end + +function KilledOrcs(Quest, QuestGiver, Player) + UpdateQuestTaskGroupDescription(Quest, 1, "I have killed several Ry'Gorr raiders.") + AddQuestStepChat(Quest, 2, "I must speak with Belka Thunderheart.", 1, "I must speak with Belka Thunderheart, who can be found in the cave at the Great Shelf.", 0, 4700079) + AddQuestStepCompleteAction(Quest, 2, "CompleteQuest") +end + +function CompleteQuest(Quest, QuestGiver, Player) + GiveQuestReward(Quest, Player) +end + +function Reload(Quest, QuestGiver, Player, Step) + if Step == 1 then + KilledOrcs(Quest, QuestGiver, Player) + end +end \ No newline at end of file diff --git a/server/Quests/FrostfangSea/domestication_is_the_new_survivalism.lua b/server/Quests/FrostfangSea/domestication_is_the_new_survivalism.lua new file mode 100644 index 000000000..bced69fea --- /dev/null +++ b/server/Quests/FrostfangSea/domestication_is_the_new_survivalism.lua @@ -0,0 +1,50 @@ +--[[ + Script Name : Quests/FrostfangSea/domestication_is_the_new_survivalism.lua + Script Purpose : for the quest "Domestication is the New Survivalism" + Script Author : theFoof + Script Date : 2013.5.31 + Script Notes : + + Zone : Frostfang Sea + Quest Giver : Belka Thunderheart + Preceded by : Tackling the Basilisks + Followed by : Domestication is the New Survivalism +--]] + +function Init(Quest) + AddQuestRewardCoin(Quest, math.random(5,80), math.random(13,25), 0, 0) + AddQuestStep(Quest, 1, "I must harvest frostbiter basilisk eggs.", 8, 100, "I must harvest frostbiter basilisk eggs. The basilisks' nests can be found to the east of the Great Shelf, along the shoreline past the battlefield.", 1190) + AddQuestStepCompleteAction(Quest, 1, "GotEggs") +end + +function Accepted(Quest, QuestGiver, Player) + FaceTarget(QuestGiver, Player) + conversation = CreateConversation() + + PlayFlavor(QuestGiver, "", "", "", 0, 0, Player) + AddConversationOption(conversation, "You can count on me.") + AddConversationOption(conversation, "We all do what we can.") + StartConversation(conversation, QuestGiver, Player, "I don't expect the adult basilisks will take kindly to ye poking around in their nests, so prepare for a fight. And thank ye, in advance, for the help. Yer a reliable and generous sort and it'd be a bleak world without ye.") +end + +function Deleted(Quest, QuestGiver, Player) +end + +function Declined(Quest, QuestGiver, Player) +end + +function GotEggs(Quest, QuestGiver, Player) + UpdateQuestTaskGroupDescription(Quest, 1, "I have harvested the frostbiter basilisk eggs.") + AddQuestStepChat(Quest, 2, "I must speak with Belka Thunderheart.", 1, "I must speak with Belka Thunderheart, who can be found in the cave at the Great Shelf.", 0, 4700079) + AddQuestStepCompleteAction(Quest, 2, "CompleteQuest") +end + +function CompleteQuest(Quest, QuestGiver, Player) + GiveQuestReward(Quest, Player) +end + +function Reload(Quest, QuestGiver, Player, Step) + if Step == 1 then + GotEggs(Quest, QuestGiver, Player) + end +end \ No newline at end of file diff --git a/server/Quests/FrostfangSea/fewer_orcs_to_worry_about.lua b/server/Quests/FrostfangSea/fewer_orcs_to_worry_about.lua new file mode 100644 index 000000000..58341d2d1 --- /dev/null +++ b/server/Quests/FrostfangSea/fewer_orcs_to_worry_about.lua @@ -0,0 +1,43 @@ +--[[ + Script Name : SpawnScripts/FrostfangSea/fewer_orcs_to_worry_about.lua + Script Purpose : the quest Fewer Orcs to Worry About + Script Author : theFoof + Script Date : 2013.6.15 + Script Notes : + + Zone : Frostfang Sea + Quest Giver : Hillfred Kinloch + Preceded by : Green Mystery + Followed by : Geode Caching +--]] + +function Init(Quest) + AddQuestRewardCoin(Quest, math.random(5,90), math.random(27,40), 0, 0) + AddQuestStepKill(Quest, 1, "Slay any Ry'Gorr tunnelers you find within the Demon's Delve tunnels.", 8, 100, "Hillfred is sure that the Ry'Gorr that survived the green, billowing clouds have been weakened by it. She has tasked you with returning to the Demon's Delve tunnels.", 611, 4700105) + AddQuestStepCompleteAction(Quest, 1, "KilledOrcs") +end + +function Accepted(Quest, QuestGiver, Player) +end + +function Deleted(Quest, QuestGiver, Player) +end + +function Declined(Quest, QuestGiver, Player) +end + +function KilledOrcs(Quest, QuestGiver, Player) + UpdateQuestTaskGroupDescription(Quest, 1, "You have slain enough Ry'Gorr tunnelers for Hillfred.") + AddQuestStepChat(Quest, 2, "Return to Hillfred Kinloch now that you have slain so many Ry'Gorr tunnelers from within the Demon's Delve.", 1, "You should return to Hillfred Kinloch, at Cragged Spine, now that you have slain so many Ry'Gorr tunnelers from within the Demon's Delve.", 0, 4700115) + AddQuestStepCompleteAction(Quest, 2, "CompleteQuest") +end + +function CompleteQuest(Quest, QuestGiver, Player) + GiveQuestReward(Quest, Player) +end + +function Reload(Quest, QuestGiver, Player, Step) + if Step == 1 then + KilledOrcs(Quest, QuestGiver, Player) + end +end \ No newline at end of file diff --git a/server/Quests/FrostfangSea/field_testing.lua b/server/Quests/FrostfangSea/field_testing.lua new file mode 100644 index 000000000..0da630537 --- /dev/null +++ b/server/Quests/FrostfangSea/field_testing.lua @@ -0,0 +1,50 @@ +--[[ + Script Name : Quests/FrostfangSea/field_testing.lua + Script Purpose : the quest Field Testing + Script Author : theFoof + Script Date : 2013.5.20 + + Zone : Frostfang Sea + Quest Giver : Blorpisa Bogchild + Preceded by : An Essential Ingredient + Followed by : Field Testing Part Two +--]] + +function Accepted(Quest, QuestGiver, Player) + FaceTarget(QuestGiver, Player) + conversation = CreateConversation() + + PlayFlavor(QuestGiver, "blorpisa_bogchild/halas/gwenevyns_cove/blorpisa_bogchild/blorpisa_bogchild_049.mp3", "", "", 3167062203, 1810444442, Player) + AddConversationOption(conversation, "I shall return to you once I have gathered the ice lilies.") + StartConversation(conversation, QuestGiver, Player, "They grow on the Icemane Plains. You should have no trouble finding them, they are quite beautiful. Here, I shall cast the spell on you.") +end + +function Declined(Quest, QuestGiver, Player) +end + +function Deleted(Quest, QuestGiver, Player) +end + +function Init(Quest) + AddQuestRewardCoin(Quest, math.random(20,50), math.random(6,12), 0, 0) + AddQuestStep(Quest, 1, "I must collect ice lilies.", 5, 100, "I must head to the Icemane Plains and collect ice lilies.", 1958) + AddQuestStepCompleteAction(Quest, 1, "GotLilies") +end + +function GotLilies(Quest, QuestGiver, Player) + UpdateQuestTaskGroupDescription(Quest, 1, "I have collected the ice lilies.") + AddQuestStepChat(Quest, 2, "I must speak with Blorpisa Bogchild in Gwenevyn's Cove", 1, "I must return the collected ice lilies to Blorpisa Bogchild in Gwenevyn's Cove.", 0, 4700039) + AddQuestStepCompleteAction(Quest, 2, "CompleteQuest") +end + +function CompleteQuest(Quest, QuestGiver, Player) + GiveQuestReward(Quest, Player) +end + +function Reload(Quest, QuestGiver, Player, Step) + if Step == 1 then + GotLillies(Quest, QuestGiver, Player) + elseif Step == 2 then + CompleteQuest(Quest, QuestGiver, Player) + end +end \ No newline at end of file diff --git a/server/Quests/FrostfangSea/field_testing_part_two.lua b/server/Quests/FrostfangSea/field_testing_part_two.lua new file mode 100644 index 000000000..967b304d0 --- /dev/null +++ b/server/Quests/FrostfangSea/field_testing_part_two.lua @@ -0,0 +1,50 @@ +--[[ + Script Name : Quests/FrostfangSea/field_testing_part_two.lua + Script Purpose : the quest Field Testing Part Two + Script Author : theFoof + Script Date : 2013.5.20 + + Zone : Frostfang Sea + Quest Giver : Blorpisa Bogchild + Preceded by : Field Testing + Followed by : None +--]] + +function Accepted(Quest, QuestGiver, Player) + FaceTarget(QuestGiver, Player) + conversation = CreateConversation() + + PlayFlavor(QuestGiver, "blorpisa_bogchild/halas/gwenevyns_cove/blorpisa_bogchild/blorpisa_bogchild_057.mp3", "", "", 4242418516, 2706446294, Player) + AddConversationOption(conversation, "I will return to you once I have scouted out the location.") + StartConversation(conversation, QuestGiver, Player, "Here, let me cast the spell on you. Do take care!") +end + +function Declined(Quest, QuestGiver, Player) +end + +function Deleted(Quest, QuestGiver, Player) +end + +function Init(Quest) + AddQuestRewardCoin(Quest, math.random(10,50), math.random(5,12), 0, 0) + AddQuestStepLocation(Quest, 1, "I must test the Frost-born Ward's effectiveness by scouting the Pride Overlook.", 25, "I must head to the Pride Overlook on the Icemane Plains to test the new Frost-born Ward. Pride Overlook is west of Gwenevyn's Cove.", 3163, 598.01, 66.20, -505.68) + AddQuestStepCompleteAction(Quest, 1, "ScoutedPride") +end + +function ScoutedPride(Quest, QuestGiver, Player) + UpdateQuestTaskGroupDescription(Quest, 1, "I have determined that the Frost-born Ward is still ineffective.") + AddQuestStepChat(Quest, 2, "I must speak with Blorpisa Bogchild in Gwenevyn's Cove.", 1, "I must return to Blorpisa Bogchild in Gwenevyn's Cove.", 0, 4700039) + AddQuestStepCompleteAction(Quest, 2, "CompleteQuest") +end + +function CompleteQuest(Quest, QuestGiver, Player) + GiveQuestReward(Quest, Player) +end + +function Reload(Quest, QuestGiver, Player, Step) + if Step == 1 then + ScoutedPride(Quest, QuestGiver, Player) + elseif Step == 2 then + CompleteQuest(Quest, QuestGiver, Player) + end +end \ No newline at end of file diff --git a/server/Quests/FrostfangSea/flame_on.lua b/server/Quests/FrostfangSea/flame_on.lua new file mode 100644 index 000000000..c78c592a2 --- /dev/null +++ b/server/Quests/FrostfangSea/flame_on.lua @@ -0,0 +1,49 @@ +--[[ + Script Name : Quests/FrostfangSea/flame_on.lua + Script Purpose : the quest Flame On! + Script Author : theFoof + Script Date : 2013.5.9 + + Zone : Frostfang Sea + Quest Giver : Yasha Redblade + Preceded by : Boatload of Work + Followed by : Ride Upon the Gwenevyn II +--]] + +function Init(Quest) + AddQuestRewardCoin(Quest, math.random (10,80), math.random(1,2), 0, 0) + AddQuestStep(Quest, 1, "Light the signal fire.", 1, 100, "I must climb the rope ladder affixed to the imposing wall of ice east of Yasha Redblade to reach the signal fire.", 2233) + AddQuestStepCompleteAction(Quest, 1, "LitFire") +end + +function Accepted(Quest, QuestGiver, Player) +end + +function Declined(Quest, QuestGiver, Player) +end + +function LitFire(Quest, QuestGiver, Player) + UpdateQuestTaskGroupDescription(Quest, 1, "I have lit the signal fire.") + AddQuestStep(Quest, 2, "Kill the ambushing orcs!", 1, 100, "I was ambushed by orcs while I was lighting the signal fire on the ice shelf above the eastern end of the island!", 0) + AddQuestStepCompleteAction(Quest, 2, "KilledOrcs") +end + +function KilledOrcs(Quest, QuestGiver, Player) + UpdateQuestTaskGroupDescription(Quest, 2, "I was ambushed by orcs while I was lighting the signal fire! I faced them valiantly and live to tell the tale.") + AddQuestStepChat(Quest, 3, "Return to Yasha Redblade", 1, "I am to return to Yasha Redblade near the broken ship's hull on Pilgrims' Landing.", 0, 4700005) + AddQuestStepCompleteAction(Quest, 3, "CompletedQuest") +end + +function CompletedQuest(Quest, QuestGiver, Player) + GiveQuestReward(Quest, Player) +end + +function Reload(Quest, QuestGiver, Player, Step) + if Step == 1 then + LitFire(Quest, QuestGiver, Player) + elseif Step == 2 then + KilledOrcs(Quest, QuestGiver, Player) + elseif Step == 3 then + CompletedQuest(Quest, QuestGiver, Player) + end +end \ No newline at end of file diff --git a/server/Quests/FrostfangSea/flawless_core_chore.lua b/server/Quests/FrostfangSea/flawless_core_chore.lua new file mode 100644 index 000000000..fb7cf8b4c --- /dev/null +++ b/server/Quests/FrostfangSea/flawless_core_chore.lua @@ -0,0 +1,49 @@ +--[[ + Script Name : Quests/FrostfangSea/flawless_core_chore.lua + Script Purpose : the quest "Flawless Core Chore" + Script Author : theFoof + Script Date : 2013.7.24 + Script Notes : + + Zone : Frostfang Sea + Quest Giver : Knut Orcbane + Preceded by : Becoming Another Orcbane + Followed by : Sometimes You Feel Like a Knut +--]] + +function Init(Quest) + AddQuestRewardCoin(Quest, math.random(5,90), math.random(27,50), 0, 0) + AddQuestStepKill(Quest, 1, "Slay velinoid smashers in your effort to obtain their flawless velium cores.", 6, 80, "Slay velinoid smashers in your effort to obtain their flawless velium cores.", 3029, 4700554) + AddQuestStepCompleteAction(Quest, 1, "GotCrystals") +end + +function Accepted(Quest, QuestGiver, Player) + FaceTarget(QuestGiver, Player) + conversation = CreateConversation() + + PlayFlavor(QuestGiver, "knut_orcbane/halas/cragged_spine/knut_orcbane_053.mp3", "", "", 592887905, 3275413012, Player) + AddConversationOption(conversation, "I understand.") + StartConversation(conversation, QuestGiver, Player, "It is them, the Velinoid crystal men. The old magick is in them. Seize an armful of their flawless velium cores and return to us.") +end + +function Deleted(Quest, QuestGiver, Player) +end + +function Declined(Quest, QuestGiver, Player) +end + +function GotCrystals(Quest, QuestGiver, Player) + UpdateQuestTaskGroupDescription(Quest, 1, "You have obtained enough flawless velium cores to suffice.") + AddQuestStepChat(Quest, 2, "Return to Knut Orcbane with the flawless velium cores you obtained.", 1, "You should return to Knut Orcbane, at Cragged Spine, with the flawless velium cores you obtained.", 0, 4700113) + AddQuestStepCompleteAction(Quest, 2, "CompleteQuest") +end + +function CompleteQuest(Quest, QuestGiver, Player) + GiveQuestReward(Quest, Player) +end + +function Reload(Quest, QuestGiver, Player, Step) + if Step == 1 then + GotCrystals(Quest, QuestGiver, Player) + end +end \ No newline at end of file diff --git a/server/Quests/FrostfangSea/foiling_the_flank.lua b/server/Quests/FrostfangSea/foiling_the_flank.lua new file mode 100644 index 000000000..e92aa5ae6 --- /dev/null +++ b/server/Quests/FrostfangSea/foiling_the_flank.lua @@ -0,0 +1,74 @@ +--[[ + Script Name : Quests/FrostfangSea/foiling_the_flank.lua + Script Purpose : for the quest "Foiling the Flank" + Script Author : theFoof + Script Date : 2013.6.2 + Script Notes : + + Zone : Frostfang Sea + Quest Giver : Rakan RockBreaker + Preceded by : The Demand for Supplies + Followed by : None +--]] + + +function Init(Quest) + SetQuestRepeatable(Quest) + SetQuestFeatherColor(Quest, 3) + AddQuestRewardCoin(Quest, math.random(5,80), math.random(13,25), 0, 0) + AddQuestStepKill(Quest, 1, "I must kill several sprinting Ry'Gorr gatecallers.", 5, 100, "I must kill several sprinting Ry'Gorr gatecallers and several Ry'Gorr portal casters. The gatecallers have been sneaking up the choke from the battlefield, and the portal casters can be found at the summit of Herga's Choke.", 611, 4700075) + AddQuestStepKill(Quest, 2, "I must kill several Ry'Gorr portal casters.", 3, 100, "I must kill several sprinting Ry'Gorr gatecallers and several Ry'Gorr portal casters. The gatecallers have been sneaking up the choke from the battlefield, and the portal casters can be found at the summit of Herga's Choke.", 611, 4701115, 4701120) + AddQuestStepCompleteAction(Quest, 1, "KilledGateCaller") + AddQuestStepCompleteAction(Quest, 2, "KilledPortalCaster") +end + +function Accepted(Quest, QuestGiver, Player) + FaceTarget(QuestGiver, Player) + conversation = CreateConversation() + + PlayFlavor(QuestGiver, "rakan_rockbreaker/halas/great_shelf/rakan_rockbreaker/rakan_rockbreaker013.mp3", "", "", 3252337968, 480414167, Player) + AddConversationOption(conversation, "Thank you.") + AddConversationOption(conversation, "I will be back shortly.") + StartConversation(conversation, QuestGiver, Player, "Ye delivered the last of the visors to Orica Deadshot, but ye should still be able to pick out the camouflaged Ry'Gorr gatecallers if ye look for that tell-tale glimmer. Head to the peak of Herga's Choke to find the portal casters. Good luck and good hunting, " .. GetName(Player) .. ".") +end + +function Deleted(Quest, QuestGiver, Player) +end + +function Declined(Quest, QuestGiver, Player) +end + +function KilledGateCaller(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 1, "I successfully killed several sprinting Ry'Gorr gatecallers.") + CheckProgress(Quest, QuestGiver, Player) +end + +function KilledPortalCaster(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 2, "I successfully killed several Ry'Gorr portal casters.") + CheckProgress(Quest, QuestGiver, Player) +end + +function CheckProgress(Quest, QuestGiver, Player) + if QuestStepIsComplete(Player, 46, 1) and QuestStepIsComplete(Player, 46, 2) then + AddStep3(Quest, QuestGiver, Player) + end +end + +function AddStep3(Quest, QuestGiver, Player) + UpdateQuestTaskGroupDescription(Quest, 1, "I successfully killed several sprinting Ry'Gorr gatecallers and several Ry'Gorr portal casters.") + AddQuestStepChat(Quest, 3, "I must speak to Rakan Rockbreaker.", 1, "I must speak to Rakan Rockbreaker, who can be found in the cave at the Great Shelf.", 0, 4700082) + AddQuestStepCompleteAction(Quest, 3, "CompleteQuest") +end + +function CompleteQuest(Quest, QuestGiver, Player) + GiveQuestReward(Quest, Player) +end + +function Reload(Quest, QuestGiver, Player, Step) + if QuestStepIsComplete(Player, 46, 1) then + KilledGateCaller(Quest, QuestGiver, Player) + end + if QuestStepIsComplete(Player, 46, 2) then + KilledPortalCaster(Quest, QuestGiver, Player) + end +end \ No newline at end of file diff --git a/server/Quests/FrostfangSea/forsaking_the_grave.lua b/server/Quests/FrostfangSea/forsaking_the_grave.lua new file mode 100644 index 000000000..c85e2f5ef --- /dev/null +++ b/server/Quests/FrostfangSea/forsaking_the_grave.lua @@ -0,0 +1,48 @@ +--[[ + Script Name : Quests/FrostfangSea/forsaking_the_grave.lua + Script Purpose : the quest Forsaking the Grave + Script Author : theFoof + Script Date : 2013.6.5 + + Zone : Frostfang Sea + Quest Giver : Battlepriest Herga + Preceded by : The Siege is Not Over + Followed by : All That Remains +--]] + +function Init(Quest) + AddQuestRewardCoin(Quest, math.random(5,90), math.random(6,15), 0, 0) + AddQuestStepKill(Quest, 1, "I must kill several reanimated Ry'Gorr skeletons on the Forbidden Ossuary of Ice.", 8, 100, "I must kill several reanimated Ry'Gorr skeletons on the Forbidden Ossuary of Ice.", 611, 4700878) + AddQuestStepCompleteAction(Quest, 1, "KilledOrcs") +end + +function Accepted(Quest, QuestGiver, Player) + FaceTarget(QuestGiver, Player) + conversation = CreateConversation() + + PlayFlavor(QuestGiver, "battlepriest_herga/halas/great_shelf/battlepriest_herga/battlepriest_herga044.mp3", "", "", 2826724628, 2053031770, Player) + AddConversationOption(conversation, "The abominations will be eliminated.") + AddConversationOption(conversation, "I know exactly where to find them.") + StartConversation(conversation, QuestGiver, Player, "Seek out the skeletons on the isle known as the Forbidden Ossuary of Ice. The Ossuary floats off the coast, to the southwest of Erollis.") +end + +function Deleted(Quest, QuestGiver, Player) +end + +function Declined(Quest, QuestGiver, Player) +end + +function KilledOrcs(Quest, QuestGiver, Player) + UpdateQuestTaskGroupDescription(Quest, 1, "I have killed several reanimated Ry'Gorr skeletons.") + AddQuestStepChat(Quest, 2, "I must speak with Battlepriest Herga.", 1, "I must speak with Battlepriest Herga, who can be found on the battlefield at the Great Shelf.", 0, 4700100) + AddQuestStepCompleteAction(Quest, 2, "CompleteQuest") +end + +function CompleteQuest(Quest, QuestGiver, Player) + GiveQuestReward(Quest, Player) +end +function Reload(Quest, QuestGiver, Player, Step) + if Step == 1 then + KilledOrcs(Quest, QuestGiver, Player) + end +end \ No newline at end of file diff --git a/server/Quests/FrostfangSea/frigid_fishing.lua b/server/Quests/FrostfangSea/frigid_fishing.lua new file mode 100644 index 000000000..4d3975f4d --- /dev/null +++ b/server/Quests/FrostfangSea/frigid_fishing.lua @@ -0,0 +1,45 @@ +--[[ + Script Name : Quests/FrostfangSea/frigid_fishing.lua + Script Purpose : the quest "Frigid Fishing" + Script Author : theFoof + Script Date : 2013.5.15 + + Zone : Frostfang Sea + Quest Giver : Arrin Clelland + Preceded by : Scraggly Foodstuffs + Followed by : +--]] + +function Init(Quest) + AddQuestRewardCoin(Quest, math.random(30,60), math.random(2,4), 0, 0) + AddQuestStepKill(Quest, 1, "Hunt Iceclad cod.", 5, 100, "I promised to hunt Iceclad cod in the waters around Pilgrims' Landing.", 2540, 4700028) + AddQuestStepCompleteAction(Quest, 1, "KilledCod") +end + +function KilledCod(Quest, QuestGiver, Player) + UpdateQuestTaskGroupDescription(Quest, 1, "I have hunted Iceclad cod in the waters around Pilgrims' Landing.") + AddQuestStepChat(Quest, 2, "Return the Iceclad cod to Arrin.", 1, "I am to return the Iceclad cod to Arrin Clelland in Pilgrims' Landing.", 2540, 4700000) + AddQuestStepCompleteAction(Quest, 2, "CompleteQuest") +end + +function CompleteQuest(Quest, QuestGiver, Player) + GiveQuestReward(Quest, Player) +end + +function Accepted(Quest, QuestGiver, Player) +end + +function Declined(Quest, QuestGiver, Player) +end + +function Deleted(Quest, QuestGiver, Player) +end + + +function Reload(Quest, QuestGiver, Player, Step) + if Step == 1 then + KilledCod(Quest, QuestGiver, Player) + elseif Step == 2 then + CompleteQuest(Quest, QuestGiver, Player) + end +end \ No newline at end of file diff --git a/server/Quests/FrostfangSea/frozen_pincer_chowder.lua b/server/Quests/FrostfangSea/frozen_pincer_chowder.lua new file mode 100644 index 000000000..a458d5e7a --- /dev/null +++ b/server/Quests/FrostfangSea/frozen_pincer_chowder.lua @@ -0,0 +1,64 @@ +--[[ + Script Name : Quests/FrostfangSea/frozen_pincer_chowder.lua + Script Purpose : the quest "Frozen Pincer Chowder" + Script Author : theFoof + Script Date : 2013.9.1 + Script Notes : + + Zone : Frostfang Sea + Quest Giver : Olga Macleod + Preceded by : None + Followed by : None +--]] + +function Init(Quest) + AddQuestStep(Quest, 1, "I must collect a sprig of halasian reeds for Olga.", 1, 100, "I must collect a sprig of halasian reeds for Olga. I can find the halasian reed plant down near the water's edge at the Erollis Dock, east of New Halas.", 822) + AddQuestStepCompleteAction(Quest, 1, "GotSprig") +end + +function Accepted(Quest, QuestGiver, Player) + FaceTarget(QuestGiver, Player) + conversation = CreateConversation() + + PlayFlavor(QuestGiver, "olga_macleod/halas/new_halas/olga_macleod/olga_macleod_006.mp3", "", "", 1415155134, 885074882, Player) + AddConversationOption(conversation, "I shall be back with the parsley and pincers!") + StartConversation(conversation, QuestGiver, Player, "How nice of you! If you do so, you can have a bowl of the chowder for yourself. What I need is frozen pincers and halasian reeds. The halasian reeds and the frozen pincers are down near the water's edge at the Erollis Dock, east of New Halas.") +end + +function Deleted(Quest, QuestGiver, Player) +end + +function Declined(Quest, QuestGiver, Player) +end + +function GotSprig(Quest, QuestGiver, Player) + UpdateQuestTaskGroupDescription(Quest, 1, "I have collected the halasian reeds for Olga.") + AddQuestStepKill(Quest, 2, "I must kill frozen pincers for Olga's chowder.", 4, 100, "I must kill frozen pincers for Olga. The pincers are at the Erollis Dock in New Halas.", 77, 4700215) + AddQuestStepCompleteAction(Quest, 2, "KilledCrabs") +end + +function KilledCrabs(Quest, QuestGiver, Player) + UpdateQuestTaskGroupDescription(Quest, 2, "I have killed and collected the frozen pincer meat for Olga.") + AddQuestStepChat(Quest, 3, "I must speak with Olga Macleod near The Stone Hammer.", 1, "I must return the halasian parsley and frozen pincer meat to Olga Macleod. Olga is at the fire next to the mender's workshop, The Stone Hammer, in New Halas.", 0, 4700258) + AddQuestStepCompleteAction(Quest, 3, "TalkedOlga") +end + +function TalkedOlga(Quest, QuestGiver, Player) + UpdateQuestTaskGroupDescription(Quest, 3, "I have given the ingredients to Olga.") + AddQuestStep(Quest, 4, "I must try some of Olga's frozen pincer chowder.", 1, 100, "Olga has taken the ingredients I collected and prepared her recipe for frozen pincer chowder.", 294) + AddQuestStepCompleteAction(Quest, 4, "CompleteQuest") +end + +function CompleteQuest(Quest, QuestGiver, Player) + GiveQuestReward(Quest, Player) +end + +function Reload(Quest, QuestGiver, Player, Step) + if Step == 1 then + GotSprig(Quest, QuestGiver, Player) + elseif Step == 2 then + KilledCrabs(Quest, QuestGiver, Player) + elseif Step == 3 then + TalkedOlga(Quest, QuestGiver, Player) + end +end \ No newline at end of file diff --git a/server/Quests/FrostfangSea/geode_caching.lua b/server/Quests/FrostfangSea/geode_caching.lua new file mode 100644 index 000000000..3a05986aa --- /dev/null +++ b/server/Quests/FrostfangSea/geode_caching.lua @@ -0,0 +1,45 @@ +--[[ + Script Name : SpawnScripts/FrostfangSea/geode_caching.lua + Script Purpose : the quest Geode Caching + Script Author : theFoof + Script Date : 2013.6.15 + Script Notes : + + Zone : Frostfang Sea + Quest Giver : Hillfred Kinloch + Preceded by : Fewer Orcs to Worry About + Followed by : None +--]] + +function Init(Quest) + SetQuestFeatherColor(Quest, 3) + SetQuestRepeatable(Quest) + AddQuestRewardCoin(Quest, math.random(5,90), math.random(52,99), 0, 0) + AddQuestStep(Quest, 1, "Search the Velinoid Catacombs in hopes of attaining rare cerise velium crystals.", 6, 100, "Hillfred's interest was piqued by the Velinoid Catacombs you found within the caves below Erollis. She believes a place like that could house the rare cerise velium crystal.", 3776) + AddQuestStepCompleteAction(Quest, 1, "GotCrystals") +end + +function Accepted(Quest, QuestGiver, Player) +end + +function Deleted(Quest, QuestGiver, Player) +end + +function Declined(Quest, QuestGiver, Player) +end + +function GotCrystals(Quest, QuestGiver, Player) + UpdateQuestTaskGroupDescription(Quest, 1, "You found quite a few of the rare cerise velium crystals.") + AddQuestStepChat(Quest, 2, "Return to Hillfred Kinloch now that you have found quite a few of the rare cerise velium crystals.", 1, "You presented Hillfred with all of the rare cerise velium crystals you found.", 0, 4700115) + AddQuestStepCompleteAction(Quest, 2, "CompleteQuest") +end + +function CompleteQuest(Quest, QuestGiver, Player) + GiveQuestReward(Quest, Player) +end + +function Reload(Quest, QuestGiver, Player, Step) + if Step == 1 then + GotCrystals(Quest, QuestGiver, Player) + end +end \ No newline at end of file diff --git a/server/Quests/FrostfangSea/green_mystery.lua b/server/Quests/FrostfangSea/green_mystery.lua new file mode 100644 index 000000000..1bf796f00 --- /dev/null +++ b/server/Quests/FrostfangSea/green_mystery.lua @@ -0,0 +1,50 @@ +--[[ + Script Name : Quests/FrostfangSea/green_mystery.lua + Script Purpose : the quest "Green Mystery" + Script Author : theFoof + Script Date : 2013.6.14 + Script Notes : + + Zone : Frostfang Sea + Quest Giver : Hillfred Kinloch + Preceded by : Skulls for the Taking + Followed by : Fewer Orcs to Worry About +--]] + +function Init(Quest) + AddQuestRewardCoin(Quest, math.random(5,90), math.random(12,25), 0, 0) + AddQuestStep(Quest, 1, "Throw some of the ice upon flames within the Demon's Delve tunnels.", 6, 100, "Hillfred has been holding on to some green ice that was found embedded within The Great Shelf. She is convinced it contains the deadly Green Mist.", 2521) + AddQuestStepCompleteAction(Quest, 1, "UsedIce") +end + +function Accepted(Quest, QuestGiver, Player) + if not HasItem(Player, 7928) then + SummonItem(Player, 7928, 1) + end +end + +function Deleted(Quest, QuestGiver, Player) + if HasItem(Player, 7928) then + RemoveItem(Player, 7928) + end +end + +function Declined(Quest, QuestGiver, Player) +end + +function UsedIce(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 1, "The green ice worked!") + UpdateQuestTaskGroupDescription(Quest, 1, "The green ice worked! It killed any Ry'Gorr orc that breathed the billowing cloud of fumes.") + AddQuestStepChat(Quest, 2, "Return to Hillfred Kinloch and tell her how the green ice killed any Ry'Gorr orc that breathed the billowing cloud of fumes.", 1, "You should return to Hillfred Kinloch, at Cragged Spine, and tell her how the green ice worked!", 0, 4700115) + AddQuestStepCompleteAction(Quest, 2, "CompleteQuest") +end + +function CompleteQuest(Quest, QuestGiver, Player) + GiveQuestReward(Quest, Player) +end + +function Reload(Quest, QuestGiver, Player, Step) + if Step == 1 then + UsedIce(Quest, QuestGiver, Player) + end +end \ No newline at end of file diff --git a/server/Quests/FrostfangSea/ham_and_beans.lua b/server/Quests/FrostfangSea/ham_and_beans.lua new file mode 100644 index 000000000..a920a7506 --- /dev/null +++ b/server/Quests/FrostfangSea/ham_and_beans.lua @@ -0,0 +1,64 @@ +--[[ + Script Name : Quests/FrostfangSea/ham_and_beans.lua + Script Purpose : the quest Ham and Beans + Script Author : theFoof + Script Date : 2013.9.2 + Script Notes : + + Zone : Frostfang Sea + Quest Giver : Barker Gordon + Preceded by : None + Followed by : None +--]] + +function Init(Quest) + AddQuestStep(Quest, 1, "I must collect halasian beans for Barker's meal.", 1, 100, "I must collect halasian beans for Barker. I can find the halasian beans at the shaman hut called Pilgrims' Hearth in southwest New Halas.", 805) + AddQuestStepCompleteAction(Quest, 1, "GotBeans") +end + +function Accepted(Quest, QuestGiver, Player) + FaceTarget(QuestGiver, Player) + conversation = CreateConversation() + + PlayFlavor(QuestGiver, "barker_gordon/halas/new_halas/barker_gordon/barker_gordon_008.mp3", "", "", 3672106737, 3369025535, Player) + AddConversationOption(conversation, "Okay then, I will return with the ham and beans.") + StartConversation(conversation, QuestGiver, Player, "Since you'll be up that way, could you also pick me up some halasian beans? They're at the shaman hut called Pilgrims' Hearth in southwest New Halas.") +end + +function Deleted(Quest, QuestGiver, Player) +end + +function Declined(Quest, QuestGiver, Player) +end + +function GotBeans(Quest, QuestGiver, Player) + UpdateQuestTaskGroupDescription(Quest, 1, "I have collected the halasian beans for Barker.") + AddQuestStepKill(Quest, 2, "I must kill Bentor the Mighty for Barker's meal.", 1, 100, "I must kill Bentor the Mighty for Barker. Bentor the Mighty is in the pen next to the mender's workshop, The Stone Hammer, in New Halas.", 611, 4700251) + AddQuestStepCompleteAction(Quest, 2, "KilledPig") +end + +function KilledPig(Quest, QuestGiver, Player) + UpdateQuestTaskGroupDescription(Quest, 2, "I have killed and collected Bentor the Mighty's meat for Barker.") + AddQuestStepChat(Quest, 3, "I must speak with Barker Gordon at the Erollis Dock.", 1, "I must return the halasian beans and meat from Bentor to Barker Gordon. Barker is at the Erollis Dock in New Halas.", 0, 4700242) + AddQuestStepCompleteAction(Quest, 3, "TalkedBarker") +end + +function TalkedBarker(Quest, QuestGiver, Player) + UpdateQuestTaskGroupDescription(Quest, 3, "I have given the ingredients to Barker.") + AddQuestStep(Quest, 4, "I must try some of Barker's ham and beans.", 1, 100, "Barker has taken the ingredients I collected and prepared his recipe for ham and beans.", 297) + AddQuestStepCompleteAction(Quest, 4, "CompleteQuest") +end + +function CompleteQuest(Quest, QuestGiver, Player) + GiveQuestReward(Quest, Player) +end + +function Reload(Quest, QuestGiver, Player, Step) + if Step == 1 then + GotBeans(Quest, QuestGiver, Player) + elseif Step == 2 then + KilledPig(Quest, QuestGiver, Player) + elseif Step == 3 then + TalkedBarker(Quest, QuestGiver, Player) + end +end \ No newline at end of file diff --git a/server/Quests/FrostfangSea/highly_flammable_materials.lua b/server/Quests/FrostfangSea/highly_flammable_materials.lua new file mode 100644 index 000000000..0cdde8624 --- /dev/null +++ b/server/Quests/FrostfangSea/highly_flammable_materials.lua @@ -0,0 +1,63 @@ +--[[ + Script Name : Quests/FrostfangSea/highly_flammable_materials.lua + Script Purpose : the quest Highly Flammable Materials + Script Author : theFoof + Script Date : 2013.6.20 + Script Notes : + + Zone : Frostfang Sea + Quest Giver : Odon Scourgeson + Preceded by : Whirling Ice Time + Followed by : Campside Spores +--]] + +function Init(Quest) + AddQuestRewardCoin(Quest, math.random(5,90), math.random(12,25), 0, 0) + AddQuestStep(Quest, 1, "Find an item to torch the Ry'Gorr encampments with on Jagged Daggers.", 1, 100, "Find a way to burn down any Ry'Gorr encampments you find on Jagged Daggers.", 2230) + AddQuestStepCompleteAction(Quest, 1, "GotTorch") +end + +function Accepted(Quest, QuestGiver, Player) + FaceTarget(QuestGiver, Player) + conversation = CreateConversation() + + PlayFlavor(QuestGiver, "odon_scourgeson/halas/cragged_spine/odon_scourgeson_016.mp3", "", "", 1474162446, 1230111187, Player) + AddConversationOption(conversation, "Gladly!") + StartConversation(conversation, QuestGiver, Player, "And if you find any Ry'Gorr encampments, destroy them by any means necessary!") +end + +function Deleted(Quest, QuestGiver, Player) + if HasItem(Player, 47882) then + RemoveItem(Player, 47882) + end +end + +function Declined(Quest, QuestGiver, Player) +end + +function GotTorch(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 1, "You found a Ry'Gorr firepit torch!") + AddQuestStep(Quest, 2, "Burn down any Ry'Gorr encampments on Jagged Daggers.", 6, 100, "Find a way to burn down any Ry'Gorr encampments you find on Jagged Daggers.", 2572) + AddQuestStepCompleteAction(Quest, 2, "BurnedTents") +end + +function BurnedTents(Quest, QuestGiver, Player) + UpdateQuestTaskGroupDescription(Quest, 1, "You burned down the Ry'Gorr encampments you found on Jagged Daggers!") + AddQuestStepChat(Quest, 3, "Return to Odon Scourgeson at Cragged Spine.", 1, "You should return to Odon Scourgeson, at Cragged Spine, now that you burned down the Ry'Gorr encampments you found on Jagged Daggers.", 0, 4700108) + AddQuestStepCompleteAction(Quest, 3, "CompleteQuest") +end + +function CompleteQuest(Quest, QuestGiver, Player) + if HasItem(Player, 47882) then + RemoveItem(Player, 47882) + end + GiveQuestReward(Quest, Player) +end + +function Reload(Quest, QuestGiver, Player, Step) + if Step == 1 then + GotTorch(Quest, QuestGiver, Player) + elseif Step == 2 then + BurnedTents(Quest, QuestGiver, Player) + end +end \ No newline at end of file diff --git a/server/Quests/FrostfangSea/if_i_had_a_hammer.lua b/server/Quests/FrostfangSea/if_i_had_a_hammer.lua new file mode 100644 index 000000000..ca14ec63c --- /dev/null +++ b/server/Quests/FrostfangSea/if_i_had_a_hammer.lua @@ -0,0 +1,79 @@ +--[[ + Script Name : Quests/FrostfangSea/if_i_had_a_hammer.lua + Script Purpose : the quest If I Had A Hammer + Script Author : theFoof + Script Date : 2013.5.16 + + Zone : Frostfang Sea + Quest Giver : Bull the Craft + Preceded by : Tutorial: Learning to Harvest + Followed by : +--]] +-- reward is "Handbook of the Ravens of the North", 722 tradeskill xp, +250 Ravens of the North faction and 6-8 silver + +function Init(Quest) + SetQuestFeatherColor(Quest, 2) + AddQuestStepObtainItem(Quest, 1, "I need to get the recipe from the table.", 1, 100, "Bull the mender has instructed me to get what I'll need for crafting. There is a recipe on the table, sack of coal on the ground, and I'll need some of the tin and lead clusters I harvested earlier.", 0, 32122) + AddQuestStepCompleteAction(Quest, 1, "GotRecipe") +end + +function GotRecipe(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 1, "I picked up the recipe, and should examine it in my inventory to scribe it.") + AddQuestStepObtainItem(Quest, 2, "I need to pick up some coal from the sack.", 1, 100, "Bull the mender has instructed me to get what I'll need for crafting. There is a recipe on the table, sack of coal on the ground, and I'll need some of the tin and lead clusters I harvested earlier.", 0, 5771) + AddQuestStepCompleteAction(Quest, 2, "GotCoal") +end + +function GotCoal(Quest, QuestGiver, Player) + UpdateQuestTaskGroupDescription(Quest, 1, "I obtained the supplies I will need.") + AddQuestStepObtainItem(Quest, 3, "I should ensure I have a tin and lead cluster in my bags, then use the mender's anvil to craft.", 1, 100, "I should scribe the recipe book, and ensure I have a lead and tin cluster in my bags. Then click on the anvil in front of the mender to use it. Select the lucky wolf paw recipe and then click 'Create', then 'Begin'.", 0, 163306) + AddQuestStepCompleteAction(Quest, 3, "CraftedPaw") +end + +function CraftedPaw(Quest, QuestGiver, Player) + UpdateQuestTaskGroupDescription(Quest, 2, "I created a Lucky Wolf Paw charm.") + AddQuestStepChat(Quest, 4, "I should return to Bull once again.", 1, "Bull the mender is at the wrecked boat on Pilgrims' Landing. I should let him know that I made the lucky wolf paw charm.", 0, 4700009) + AddQuestStepCompleteAction(Quest, 4, "TalkedBull") +end + +function TalkedBull(Quest, QuestGiver, Player) + UpdateQuestTaskGroupDescription(Quest, 3, "Bull has suggested that I speak to the tradeskill tutor once I reach Halas to learn more about crafting.") + AddQuestStepChat(Quest, 5, "I should find the tradeskill tutor in the city to learn more about crafting.", 1, "Once I reach Halas, the tradeskill tutor can be found in the crafting area of Ravens' Roost, near the bank and housing.", 0, 4700220) + AddQuestStepCompleteAction(Quest, 5, "CompleteQuest") +end + + +function CompleteQuest(Quest, QuestGiver, Player) + GiveQuestReward(Quest, Player) +end + +function Accepted(Quest, QuestGiver, Player) + SendPopUpMessage(Player, "This quest cannot be fully completed yet. Do not report as bug.", 255, 0, 0) + FaceTarget(QuestGiver, Player) + conversation = CreateConversation() + + PlayFlavor(QuestGiver, "", "", "", 0, 0, Player) + AddConversationOption(conversation, "I'll get those items now.") + StartConversation(conversation, QuestGiver, Player, "Pick up a copy of my lucky charm recipe over there beside me, and scribe it into your recipe book. Then grab some coal from the sack. You'll also need one of the tin clusters and lead clusters that you harvested earlier, and make sure you have them with you in your bags.") + AddSpawnAccess(GetSpawn(Player, 4701805), Player) + AddSpawnAccess(GetSpawn(Player, 4701804), Player) +end + +function Declined(Quest, QuestGiver, Player) +end + +function Deleted(Quest, QuestGiver, Player) +end + +function Reload(Quest, QuestGiver, Player, Step) + if Step == 1 then + GotRecipe(Quest, QuestGiver, Player) + elseif Step == 2 then + GotCoal(Quest, QuestGiver, Player) + elseif Step == 3 then + CraftedPaw(Quest, QuestGiver, Player) + elseif Step == 4 then + TalkedBull(Quest, QuestGiver, Player) + elseif Step == 5 then + CompleteQuest(Quest, QuestGiver, Player) + end +end \ No newline at end of file diff --git a/server/Quests/FrostfangSea/impish_threats.lua b/server/Quests/FrostfangSea/impish_threats.lua new file mode 100644 index 000000000..c481fbe9c --- /dev/null +++ b/server/Quests/FrostfangSea/impish_threats.lua @@ -0,0 +1,49 @@ +--[[ + Script Name : Quests/FrostfangSea/impish_threats.lua + Script Purpose : the quest Impish Threats + Script Author : theFoof + Script Date : 2013.7.19 + Script Notes : + + Zone : Frostfang Sea + Quest Giver : Knut Orcbane + Preceded by : None + Followed by : Clan of the Cave Imps +--]] + +function Init(Quest) + AddQuestRewardCoin(Quest, math.random(5,90), math.random(12,25), 0, 0) + AddQuestStepKill(Quest, 1, "Slay the glacial imps that inhabit the cliff north of Cragged Spine.", 8, 100, "The defenders at Cragged Spine are finding it difficult to face the attacking Ry'Gorr orcs while they are being pestered by imps from behind.", 611, 4700066, 4700065, 4701106) + AddQuestStepCompleteAction(Quest, 1, "KilledImps") +end + +function Accepted(Quest, QuestGiver, Spawn) + FaceTarget(QuestGiver, Spawn) + conversation = CreateConversation() + + PlayFlavor(QuestGiver, "knut_orcbane/halas/cragged_spine/knut_orcbane_015.mp3", "", "", 2593056094, 2652573993, Spawn) + AddConversationOption(conversation, "Will do!") + StartConversation(conversation, QuestGiver, Spawn, "As I knew you would! There's no shying away from duty for you. Report back to me when you have completed this mission, " .. GetName(Spawn) .. ".") +end + +function Deleted(Quest, QuestGiver, Spawn) +end + +function Declined(Quest, QuestGiver, Spawn) +end + +function KilledImps(Quest, QuestGiver, Spawn) + UpdateQuestTaskGroupDescription(Quest, 1, "The number of glacial imps has been reduced.") + AddQuestStepChat(Quest, 2, "Return to Knut Orcbane now that the number of glacial imps has been reduced.", 1, "You should return to Knut Orcbane, at Cragged Spine, now that the number of glacial imps has been reduced.", 0, 4700113) + AddQuestStepCompleteAction(Quest, 2, "CompleteQuest") +end + +function CompleteQuest(Quest, QuestGiver, Spawn) + GiveQuestReward(Quest, Spawn) +end + +function Reload(Quest, QuestGiver, Spawn, Step) + if Step == 1 then + KilledImps(Quest, QuestGiver, Spawn) + end +end \ No newline at end of file diff --git a/server/Quests/FrostfangSea/kestrel_pot_pie.lua b/server/Quests/FrostfangSea/kestrel_pot_pie.lua new file mode 100644 index 000000000..4012fe8a2 --- /dev/null +++ b/server/Quests/FrostfangSea/kestrel_pot_pie.lua @@ -0,0 +1,65 @@ +--[[ + Script Name : Quests/FrostfangSea/kestrel_pot_pie.lua + Script Purpose : the quest Kestrel Pot Pie + Script Author : theFoof + Script Date : 2013.9.3 + Script Notes : + + Zone : Frostfang Sea + Quest Giver : Alice Swamprunner + Preceded by : None + Followed by : None +--]] + +function Init(Quest) + AddQuestStep(Quest, 1, "I must collect ice shrooms for Alice's pie.", 5, 100, "I must collect ice shrooms for Alice. I can find the ice shrooms in the cave leading to the Erollis Dock.", 811) + AddQuestStepCompleteAction(Quest, 1, "GotShrooms") +end + +function Accepted(Quest, QuestGiver, Player) + FaceTarget(QuestGiver, Player) + conversation = CreateConversation() + + PlayFlavor(QuestGiver, "alice_swamprunner/halas/new_halas/alice_swamprunner/alice_swamprunner_006.mp3", "", "", 2612887763, 84831884, Player) + AddConversationOption(conversation, "I shall return to you Alice with the meat and shrooms.") + StartConversation(conversation, QuestGiver, Player, "Great! Return the ingredients to me at your convenience.") +end + +function Deleted(Quest, QuestGiver, Player) +end + +function Declined(Quest, QuestGiver, Player) +end + + +function GotShrooms(Quest, QuestGiver, Player) + UpdateQuestTaskGroupDescription(Quest, 1, "I have collected the ice shrooms for Alice.") + AddQuestStepKill(Quest, 2, "I must kill downy kestrels for Alice's pie.", 3, 100, "I must kill downy kestrels for Alice. The kestrels are at the south entrance to New Halas.", 80, 4700122) + AddQuestStepCompleteAction(Quest, 2, "KilledBirds") +end + +function KilledBirds(Quest, QuestGiver, Player) + UpdateQuestTaskGroupDescription(Quest, 2, "I have killed and collected the downy kestrel meat for Alice.") + AddQuestStepChat(Quest, 3, "I must speak with Alice Swamprunner in Ravens' Roost.", 1, "I must return the ice shrooms and downy kestrel meat to Alice Swamprunner. Alice is at the restaurant in Ravens' Roost in New Halas.", 0, 4700230) + AddQuestStepCompleteAction(Quest, 3, "TalkedAlice") +end + +function TalkedAlice(Quest, QuestGiver, Player) + UpdateQuestTaskGroupDescription(Quest, 3, "I have given the ingredients to Alice.") + AddQuestStep(Quest, 4, "I must try some of Alice's kestrel pot pie.", 1, 100, "Alice has taken the ingredients I collected and prepared her recipe for kestrel pot pie.", 2558) + AddQuestStepCompleteAction(Quest, 4, "CompleteQuest") +end + +function CompleteQuest(Quest, QuestGiver, Player) + GiveQuestReward(Quest, Player) +end + +function Reload(Quest, QuestGiver, Player, Step) + if Step == 1 then + GotShrooms(Quest, QuestGiver, Player) + elseif Step == 2 then + KilledBirds(Quest, QuestGiver, Player) + elseif Step == 3 then + TalkedAlice(Quest, QuestGiver, Player) + end +end \ No newline at end of file diff --git a/server/Quests/FrostfangSea/little_lost_froglok.lua b/server/Quests/FrostfangSea/little_lost_froglok.lua new file mode 100644 index 000000000..775ac2a72 --- /dev/null +++ b/server/Quests/FrostfangSea/little_lost_froglok.lua @@ -0,0 +1,62 @@ +--[[ + Script Name : Quests/FrostfangSea/an_unbearable_problem.lua + Script Purpose : the quest An Unbearable Problem + Script Author : theFoof + Script Date : 2013.5.21 + + Zone : Frostfang Sea + Quest Giver : Flibbit Quaqmarr + Preceded by : An Unbearable Problem + Followed by : +--]] + +function Accepted(Quest, QuestGiver, Player) + FaceTarget(QuestGiver, Player) + conversation = CreateConversation() + + PlayFlavor(QuestGiver, "flibbit_quagmarr/halas/gwenevyns_cove/flibbit_quagmarr/flibbit_quagmarr_029.mp3", "", "", 1372379832, 3108068275, Player) + AddConversationOption(conversation, "I will return once I have news for you.") + StartConversation(conversation, QuestGiver, Player, "Thank you, " .. GetName(Player) .. "! Please hurry!") +end + +function Declined(Quest, QuestGiver, Player) +end + +function Deleted(Quest, QuestGiver, Player) + if GetTempVariable(Player, "splorp") ~= nil then + Despawn(GetTempVariable(Player, "splorp")) + SetTempVariable(Player, "splorp", nil) + end +end + +function Init(Quest) + AddQuestRewardCoin(Quest, math.random(10,80), math.random(2,5), 0, 0) + AddQuestStepChat(Quest, 1, "I must speak with Sigbrith MacInnes. Sigbrith MacInnes is the mender for Gwenevyn's Cove.", 1, "I must ask Sigbrith MacInnes if she has seen Splorpy.", 0, 4700046) + AddQuestStepCompleteAction(Quest, 1, "TalkedSibrith") +end + +function TalkedSibrith(Quest, QuestGiver, Player) + UpdateQuestTaskGroupDescription(Quest, 1, "Sigbrith MacInnes informed me that I should search for Splorpy southwest of Gwenevyn's Cove.") + AddQuestStepChat(Quest, 2, "I must find Splorpy Quagmarr.", 1, "I should search for Splorpy. He was last seen southwest of Gwenevyn's Cove, past the blizzard grizzlies.", 0, 4700044) + AddQuestStepCompleteAction(Quest, 2, "FoundSplorpy") +end + +function FoundSplorpy(Quest, QuestGiver, Player) + UpdateQuestTaskGroupDescription(Quest, 2, "I have found Splorpy and should return him to his father in Gwenevyn's Cove.") + AddQuestStepChat(Quest, 3, "I must speak with Flibbit Quagmarr. Flibbit is staying in Gwenevyn's Cove.", 1, "I must return Splorpy to his father Flibbit Quagmarr in Gwenevyn's Cove.", 0, 4700045) + AddQuestStepCompleteAction(Quest, 3, "CompleteQuest") +end + +function CompleteQuest(Quest, QuestGiver, Player) + GiveQuestReward(Quest, Player) +end + +function Reload(Quest, QuestGiver, Player, Step) + if Step == 1 then + TalkedSibrith(Quest, QuestGiver, Player) + elseif Step == 2 then + FoundSplorpy(Quest, QuestGiver, Player) + elseif Step == 3 then + FoundSplorpy(Quest, QuestGiver, Player) + end +end \ No newline at end of file diff --git a/server/Quests/FrostfangSea/loosening_their_grip.lua b/server/Quests/FrostfangSea/loosening_their_grip.lua new file mode 100644 index 000000000..697294005 --- /dev/null +++ b/server/Quests/FrostfangSea/loosening_their_grip.lua @@ -0,0 +1,49 @@ +--[[ + Script Name : Quests/FrostfangSea/loosening_their_grip.lua + Script Purpose : the quest Loosening Their Grip + Script Author : theFoof + Script Date : 2013.6.4 + + Zone : Frostfang Sea + Quest Giver : Battlepriest Herga + Preceded by : None + Followed by : The Charge +--]] + +function Init(Quest) + AddQuestRewardCoin(Quest, math.random(5,90), math.random(13,25), 0, 0) + AddQuestStep(Quest, 1, "I must cut the lines of the spears.", 5, 100, "I must cut the lines of the spears thrust into the two ice jetties below Herga's Choke and Pride Overlook.", 287) + AddQuestStepCompleteAction(Quest, 1, "CutLines") +end + +function Accepted(Quest, QuestGiver, Player) + FaceTarget(QuestGiver, Player) + conversation = CreateConversation() + + PlayFlavor(QuestGiver, "battlepriest_herga/halas/great_shelf/battlepriest_herga/battlepriest_herga010.mp3", "", "", 1073162923, 3013834754, Player) + AddConversationOption(conversation, "I will return.") + AddConversationOption(conversation, "I'll take care of them. Someone has to.") + StartConversation(conversation, QuestGiver, Player, "Remove the claws of the Ry'Gorr, " .. GetName(Player) .. ". Loosen their grip upon our land.") +end + +function Deleted(Quest, QuestGiver, Player) +end + +function Declined(Quest, QuestGiver, Player) +end + +function CutLines(Quest, QuestGiver, Player) + UpdateQuestTaskGroupDescription(Quest, 1, "I must speak with Battlepriest Herga, who can be found on the battlefield at the Great Shelf.") + AddQuestStepChat(Quest, 2, "I must speak with Battlepriest Herga.", 1, "I must speak with Battlepriest Herga, who can be found on the battlefield at the Great Shelf.", 0, 4700100) + AddQuestStepCompleteAction(Quest, 2, "CompleteQuest") +end + +function CompleteQuest(Quest, QuestGiver, Player) + GiveQuestReward(Quest, Player) +end + +function Reload(Quest, QuestGiver, Player, Step) + if Step == 1 then + CutLines(Quest, QuestGiver, Player) + end +end \ No newline at end of file diff --git a/server/Quests/FrostfangSea/mystery_on_the_orc_iceberg.lua b/server/Quests/FrostfangSea/mystery_on_the_orc_iceberg.lua new file mode 100644 index 000000000..d17d8e896 --- /dev/null +++ b/server/Quests/FrostfangSea/mystery_on_the_orc_iceberg.lua @@ -0,0 +1,70 @@ +--[[ + Script Name : Quests/FrostfangSea/mystery_on_the_orc_iceberg.lua + Script Purpose : the quest Mystery on the Orc Iceberg + Script Author : theFoof + Script Date : 2013.7.23 + Script Notes : + + Zone : Frostfang Sea + QuestGiver : Knut Orcbane + Preceded by : Clan of the Cave Imps + Followed by : Becoming Another Orcbane +--]] + +function Init(Quest) + AddQuestRewardCoin(Quest, math.random(5,90), math.random(12,25), 0, 0) + AddQuestStep(Quest, 1, "Obtain any clues as to what the Ry'Gorr orcs are scheming on the small iceberg.", 4, 100, "Investigate what the Ry'Gorr orcs are doing on the small iceberg south of Jagged Daggers Isle.", 1668) + AddQuestStepKill(Quest, 2, "Dispose of any Ry'Gorr orcs you happen to find on the iceberg.", 3, 100, "Investigate what the Ry'Gorr orcs are doing on the small iceberg south of Jagged Daggers Isle.", 611, 4700120, 4700543, 4700538, 4700119, 4700121, 4700542) + AddQuestStepCompleteAction(Quest, 1, "FoundClues") + AddQuestStepCompleteAction(Quest, 2, "KilledOrcs") +end + +function Accepted(Quest, QuestGiver, Player) + FaceTarget(QuestGiver, Player) + conversation = CreateConversation() + + PlayFlavor(QuestGiver, "knut_orcbane/halas/cragged_spine/knut_orcbane_033.mp3", "", "", 4051446009, 1752564808, Player) + AddConversationOption(conversation, "Gladly!") + StartConversation(conversation, QuestGiver, Player, "I knew my confidence was not misplaced in you! Go over to the iceberg and see what you can find out. Kill any Ry'Gorr you encounter, but more importantly, see what items you can find that may tell us what they are up to.") +end + +function Deleted(Quest, QuestGiver, Player) +end + +function Declined(Quest, QuestGiver, Player) +end + +function FoundClues(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 1, "You found Ry'Gorr pickaxes stashed on the small iceberg.") + CheckProgress(Quest, QuestGiver, Player) +end + +function KilledOrcs(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 2, "You've slain enough orcs.") + CheckProgress(Quest, QuestGiver, Player) +end + +function CheckProgress(Quest, QuestGiver, Player) + if QuestStepIsComplete(Player, 80, 1) and QuestStepIsComplete(Player, 80, 2) then + AddStep3(Quest, QuestGiver, Player) + end +end + +function AddStep3(Quest, QuestGiver, Player) + UpdateQuestTaskGroupDescription(Quest, 1, "You found Ry'Gorr pickaxes stashed on the small iceberg and dealt with several orcs, along the way.") + AddQuestStepChat(Quest, 3, "Return to Knut Orcbane and tell him of the Ry'Gorr pickaxes stashed on the small iceberg.", 1, "You should return to Knut Orcbane, at Cragged Spine, and tell him of the Ry'Gorr pickaxes stashed on the small iceberg.", 0, 4700113) + AddQuestStepCompleteAction(Quest, 3, "CompleteQuest") +end + +function CompleteQuest(Quest, QuestGiver, Player) + GiveQuestReward(Quest, Player) +end + +function Reload(Quest, QuestGiver, Player, Step) + if QuestStepIsComplete(Player, 80, 1) then + FoundClues(Quest, QuestGiver, Player) + end + if QuestStepIsComplete(Player, 80, 2) then + KilledOrcs(Quest, QuestGiver, Player) + end +end \ No newline at end of file diff --git a/server/Quests/FrostfangSea/nap_time_for_evigis.lua b/server/Quests/FrostfangSea/nap_time_for_evigis.lua new file mode 100644 index 000000000..3a54111f0 --- /dev/null +++ b/server/Quests/FrostfangSea/nap_time_for_evigis.lua @@ -0,0 +1,58 @@ +--[[ + Script Name : Quests/FrostfangSea/nap_time_for_evigis.lua + Script Purpose : for the quest "Nap Time for Evigis" + Script Author : theFoof + Script Date : 2013.6.13 + Script Notes : + + Zone : Frostfang Sea + Quest Giver : Torli Blackbow + Preceded by : Seeking Elemental Education + Followed by : None +--]] + +function Init(Quest) + AddQuestRewardCoin(Quest, math.random(5,90), math.random(71,86), math.random(0,1), 0) + AddQuestStep(Quest, 1, "Reduce Evigis the Ancient's health and then cast Gerla's Elemental Lullaby upon it", 1, 100, "Return to the Velinoid Catacombs to face Evigis the Ancient with Gerla's Elemental Lullaby.", 3774) + AddQuestStepCompleteAction(Quest, 1, "KilledEvigis") +end + +function Accepted(Quest, QuestGiver, Player) + if not HasItem(Player, 46463) then + SummonItem(Player, 46463) + end + FaceTarget(QuestGiver, Player) + conversation = CreateConversation() + + PlayFlavor(QuestGiver, "torli_blackbow/halas/new_halas_guard_house/torli_blackaxe_013.mp3", "", "", 280356547, 1472834780, Player) + AddConversationOption(conversation, "I will not fail.") + StartConversation(conversation, QuestGiver, Player, "I never doubted ye for a moment, " .. GetName(Player) .. "! Take this and go with Brell's blessings upon ye!") +end + +function Deleted(Quest, QuestGiver, Player) + if HasItem(Player, 46463) then + RemoveItem(Player, 46463) + end +end + +function Declined(Quest, QuestGiver, Player) +end + +function KilledEvigis(Quest, QuestGiver, Player) + UpdateQuestTaskGroupDescription(Quest, 1, "You returned Evigis to his slumber!") + AddQuestStepChat(Quest, 2, "Return to Torli Blackbow at the White Lodge.", 1, "You should return to Torli Blackbow at the White Lodge, the guard house for New Halas.", 0, 4700137) + AddQuestStepCompleteAction(Quest, 2, "CompleteQuest") +end + +function CompleteQuest(Quest, QuestGiver, Player) + if HasItem(Player, 46463) then + RemoveItem(Player, 46463) + end + GiveQuestReward(Quest, Player) +end + +function Reload(Quest, QuestGiver, Player, Step) + if Step == 1 then + KilledEvigis(Quest, QuestGiver, Player) + end +end \ No newline at end of file diff --git a/server/Quests/FrostfangSea/no_substitute_for_shard_work.lua b/server/Quests/FrostfangSea/no_substitute_for_shard_work.lua new file mode 100644 index 000000000..94c91721a --- /dev/null +++ b/server/Quests/FrostfangSea/no_substitute_for_shard_work.lua @@ -0,0 +1,50 @@ +--[[ + Script Name : Quests/FrostfangSea/no_substitute_for_shard_work.lua + Script Purpose : for the quest "No Substitute for Shard Work" + Script Author : theFoof + Script Date : 2013.5.31 + Script Notes : + + Zone : Frostfang Sea + Quest Giver : Belka Thunderheart + Preceded by : Pouring One Out for My Skellies + Followed by : Tackling the Basilisks +--]] + +function Init(Quest) + AddQuestRewardCoin(Quest, math.random(5,90), math.random(13,25), 0, 0) + AddQuestStep(Quest, 1, "I must collect several velium shards.", 5, 100, "I must collect several velium shards. The velium shards litter the battlefield of the Great Shelf.", 1085) + AddQuestStepCompleteAction(Quest, 1, "GotShards") +end + +function Accepted(Quest, QuestGiver, Player) + FaceTarget(QuestGiver, Player) + conversation = CreateConversation() + + PlayFlavor(QuestGiver, "", "", "", 0, 0, Player) + AddConversationOption(conversation, "Brell's blessing to you, as well.") + AddConversationOption(conversation, "Farewell.") + StartConversation(conversation, QuestGiver, Player, "There'll be reward and gratitude waiting fer ye when ye return. Brell's blessing.") +end + +function Deleted(Quest, QuestGiver, Player) +end + +function Declined(Quest, QuestGiver, Player) +end + +function GotShards(Quest, QuestGiver, Player) + UpdateQuestTaskGroupDescription(Quest, 1, "I have collected the velium shards.") + AddQuestStepChat(Quest, 2, "I must speak with Belka Thunderheart.", 1, "I must speak with Belka Thunderheart, who can be found in the cave at the Great Shelf.", 0, 4700079) + AddQuestStepCompleteAction(Quest, 2, "CompleteQuest") +end + +function CompleteQuest(Quest, QuestGiver, Player) + GiveQuestReward(Quest, Player) +end + +function Reload(Quest, QuestGiver, Player, Step) + if Step == 1 then + GotShards(Quest, QuestGiver, Player) + end +end \ No newline at end of file diff --git a/server/Quests/FrostfangSea/nothing_to_waste.lua b/server/Quests/FrostfangSea/nothing_to_waste.lua new file mode 100644 index 000000000..8e1107232 --- /dev/null +++ b/server/Quests/FrostfangSea/nothing_to_waste.lua @@ -0,0 +1,99 @@ +--[[ + Script Name : Quests/FrostfangSea/nothing_to_waste.lua + Script Purpose : for the quest Nothing to Waste + Script Author : theFoof + Script Date : 2013.6.10 + Script Notes : + + Zone : Frostfang Sea + Quest Giver : Thirin Veliumdelver + Preceded by : None + Followed by : Roughing Up The Reinforcements +--]] + +function Init(Quest) + AddQuestRewardCoin(Quest, math.random(5,90), math.random(13,25), 0, 0) + AddQuestStepObtainItem(Quest, 1, "I must collect some Ry'Gorr Invader helmets.", 3, 100, "I must collect Ry'Gorr helmets, chestguards, and warhammers from the Ry'Gorr Invaders.", 1541, 11818) + AddQuestStepObtainItem(Quest, 2, "I must collect some Ry'Gorr Invader chestguards.", 3, 100, "I must collect Ry'Gorr helmets, chestguards, and warhammers from the Ry'Gorr Invaders.", 1537, 11817) + AddQuestStepObtainItem(Quest, 3, "I must collect some Ry'Gorr Invader warhammers.", 3, 100, "I must collect Ry'Gorr helmets, chestguards, and warhammers from the Ry'Gorr Invaders.", 1658, 11824) + AddQuestStepCompleteAction(Quest, 1, "GotHelmets") + AddQuestStepCompleteAction(Quest, 2, "GotChestguards") + AddQuestStepCompleteAction(Quest, 3, "GotHammers") +end + +function Accepted(Quest, QuestGiver, Player) + local thirin = GetSpawnByLocationID(GetZone(Player), 14520) + FaceTarget(thirin, Player) + local conversation = CreateConversation() + + PlayFlavor(thirin, "thirin_veliumdelver/halas/thirin_veliumdelver/thirin_veliumdelver007.mp3", "", "", 3327550252, 85419352, Player) + AddConversationOption(conversation, "Did you say useless?") + StartConversation(conversation, thirin, Player, "Good. The orcs are attacking from the south beach, so seek them out there. Do some good around here and I may think of you as more than useless.") +end + +function Deleted(Quest, QuestGiver, Player) + while HasItem(Player, 11818) do + RemoveItem(Player, 11818) + end + while HasItem(Player, 11817) do + RemoveItem(Player, 11817) + end + while HasItem(Player, 11824) do + RemoveItem(Player, 11824) + end +end + +function Declined(Quest, QuestGiver, Player) +end + +function GotHelmets(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 1, "I have collected some Ry'Gorr Invader helmets.") + CheckProgress(Quest, QuestGiver, Player) +end + +function GotChestguards(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 2, "I have collected some Ry'Gorr Invader chestguards.") + CheckProgress(Quest, QuestGiver, Player) +end + +function GotHammers(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 3, "I have collected some Ry'Gorr Invader warhammers.") + CheckProgress(Quest, QuestGiver, Player) +end + +function CheckProgress(Quest, QuestGiver, Player) + if QuestStepIsComplete(Player, 56, 1) and QuestStepIsComplete(Player, 56, 2) and QuestStepIsComplete(Player, 56, 3) then + AddStep4(Quest, QuestGiver, Player) + end +end + +function AddStep4(Quest, QuestGiver, Player) + UpdateQuestTaskGroupDescription(Quest, 1, "I have collected Ry'Gorr helmets, chestguards, and warhammers from the Ry'Gorr Invaders.") + AddQuestStepChat(Quest, 4, "I must speak with Thirin Veliumdelver.", 1, "With the items collected, I should return them to Thirin Veliumdelver at the Cragged Spine.", 0, 4700112) + AddQuestStepCompleteAction(Quest, 4, "CompleteQuest") +end + +function CompleteQuest(Quest, QuestGiver, Player) + while HasItem(Player, 11818) do + RemoveItem(Player, 11818) + end + while HasItem(Player, 11817) do + RemoveItem(Player, 11817) + end + while HasItem(Player, 11824) do + RemoveItem(Player, 11824) + end + GiveQuestReward(Quest, Player) +end + +function Reload(Quest, QuestGiver, Player, Step) + if QuestStepIsComplete(Player, 56, 1) then + GotHelmets(Quest, QuestGiver, Player) + end + if QuestStepIsComplete(Player, 56, 2) then + GotChestguards(Quest, QuestGiver, Player) + end + if QuestStepIsComplete(Player, 56, 3) then + GotHammers(Quest, QuestGiver, Player) + end +end \ No newline at end of file diff --git a/server/Quests/FrostfangSea/off_to_the_ossuary.lua b/server/Quests/FrostfangSea/off_to_the_ossuary.lua new file mode 100644 index 000000000..e868a1e03 --- /dev/null +++ b/server/Quests/FrostfangSea/off_to_the_ossuary.lua @@ -0,0 +1,74 @@ +--[[ + Script Name : Quests/FrostfangSea/off_to_the_ossuary.lua + Script Purpose : the quest Off to the Ossuary + Script Author : theFoof + Script Date : 2013.6.17 + Script Notes : + + Zone : Frostfang Sea + Quest Giver : Dolur Axebeard + Preceded by : The Gauntlet + Followed by : Severing the Head +--]] + +function Init(Quest) + UpdateQuestZone(Quest, "Cave of Illboding Dark") + AddQuestRewardCoin(Quest, math.random(5,90), math.random(6,15), 0, 0) + AddQuestStepKill(Quest, 1, "I must kill the Ry'Gorr reanimators in the Cave of Illboding Dark.", 2, 100, "I must find the cave on the Forbidden Ossuary of Ice and hunt down the reanimators within. The Ossuary is an island off the coast of Erollis, to the south of Ry'Gorr Isle.", 611, 5160006) + AddQuestStepKill(Quest, 2, "I must kill the Ry'Gorr lackeys in the Cave of Illboding Dark.", 4, 100, "I must find the cave on the Forbidden Ossuary of Ice and hunt down the reanimators within. The Ossuary is an island off the coast of Erollis, to the south of Ry'Gorr Isle.", 611, 5160005) + AddQuestStepCompleteAction(Quest, 1, "KilledRean") + AddQuestStepCompleteAction(Quest, 2, "KilledLackey") +end + +function Accepted(Quest, QuestGiver, Player) + FaceTarget(QuestGiver, Player) + conversation = CreateConversation() + + PlayFlavor(QuestGiver, "dolur_axebeard/halas/great_shelf/dolur_axebeard/dolur_axebeard085.mp3", "", "", 2080430397, 2045091210, Player) + AddConversationOption(conversation, "I'll deliver my own brand of personal justice.") + AddConversationOption(conversation, "I will slip in unseen and have a look around.") + AddConversationOption(conversation, "You can count on me, Dolur.") + StartConversation(conversation, QuestGiver, Player, "We call the floating isle the Forbidden Ossuary of Ice. Search for the cavern entrance there, and then have a look inside for the necromancers. If ye find any, give them the sharp side of an axe for me.") +end + +function Deleted(Quest, QuestGiver, Player) +end + +function Declined(Quest, QuestGiver, Player) +end + +function KilledRean(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 1, "I have killed the Ry'Gorr reanimators.") + CheckProgress(Quest, QuestGiver, Player) +end + +function KilledLackey(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 2, "I have killed the Ry'Gorr lackeys.") + CheckProgress(Quest, QuestGiver, Player) +end + +function CheckProgress(Quest, QuestGiver, Player) + if QuestStepIsComplete(Player, 71, 1) and QuestStepIsComplete(Player, 71, 2) then + AddStep3(Quest, QuestGiver, Player) + end +end + +function AddStep3(Quest, QuestGiver, Player) + UpdateQuestZone(Quest, "Frostfang Sea") + UpdateQuestTaskGroupDescription(Quest, 1, "I have killed several reanimators and their lackeys in the Cave of Illboding Dark.") + AddQuestStepChat(Quest, 3, "I must speak with Dolur Axebeard.", 1, "I must speak with Dolur Axebeard, who can be found in the cave at the Great Shelf.", 0, 4700078) + AddQuestStepCompleteAction(Quest, 3, "CompleteQuest") +end + +function CompleteQuest(Quest, QuestGiver, Player) + GiveQuestReward(Quest, Player) +end + +function Reload(Quest, QuestGiver, Player, Step) + if QuestStepIsComplete(Player, 71, 1) then + KilledRean(Quest, QuestGiver, Player) + end + if QuestStepIsComplete(Player, 71, 2) then + KilledLackey(Quest, QuestGiver, Player) + end +end \ No newline at end of file diff --git a/server/Quests/FrostfangSea/pelted.lua b/server/Quests/FrostfangSea/pelted.lua new file mode 100644 index 000000000..c9a29c4ff --- /dev/null +++ b/server/Quests/FrostfangSea/pelted.lua @@ -0,0 +1,49 @@ +--[[ + Script Name : Quests/FrostfangSea/pelted.lua + Script Purpose : for the quest "Pelted" + Script Author : theFoof + Script Date : 2013.5.30 + Script Notes : + + Zone : Frostfang Sea + Quest Giver : Flibbit Quagmarr + Preceded by : Bartering Crystals + Followed by : To The Great Shelf! +--]] + +function Init(Quest) + AddQuestStepKill(Quest, 1, "I must kill icemane cubs for their pelts. I can find the cubs in the Icemane Caves south of Gwenevyn's Cove.", 6, 100, "I must kill icemane cubs.", 122, 4700060, 4700481) + AddQuestStepCompleteAction(Quest, 1, "GotPelts") + AddQuestRewardCoin(Quest, math.random(5,80), math.random(6,15), 0, 0) +end + +function Accepted(Quest, QuestGiver, Player) + FaceTarget(QuestGiver, Player) + conversation = CreateConversation() + + PlayFlavor(QuestGiver, "flibbit_quagmarr/halas/gwenevyns_cove/flibbit_quagmarr/flibbit_quagmarr_052.mp3", "", "", 1207372169, 2214842448, Player) + AddConversationOption(conversation, "I will return once I have the pelts for you.") + StartConversation(conversation, QuestGiver, Player, "Thank you, " .. GetName(Player) .. ". May Mithaniel light your way!") +end + +function Deleted(Quest, QuestGiver, Player) +end + +function Declined(Quest, QuestGiver, Player) +end + +function GotPelts(Quest, QuestGiver, Player) + UpdateQuestTaskGroupDescription(Quest, 1, "I have killed the icemane cubs.") + AddQuestStepChat(Quest, 2, "I must speak with Flibbit Quagmarr. Flibbit is staying in Gwenevyn's Cove.", 1, "I should return the icemane cub pelts to Flibbit Quagmarr in Gwenevyn's Cove.", 0, 4700045) + AddQuestStepCompleteAction(Quest, 2, "CompleteQuest") +end + +function CompleteQuest(Quest, QuestGiver, Player) + GiveQuestReward(Quest, Player) +end + +function Reload(Quest, QuestGiver, Player, Step) + if Step == 1 then + GotPelts(Quest, QuestGiver, Player) + end +end \ No newline at end of file diff --git a/server/Quests/FrostfangSea/perfectly_missing.lua b/server/Quests/FrostfangSea/perfectly_missing.lua new file mode 100644 index 000000000..5e617aeaa --- /dev/null +++ b/server/Quests/FrostfangSea/perfectly_missing.lua @@ -0,0 +1,49 @@ +--[[ + Script Name : Quests/FrostfangSea/perfectly_missing.lua + Script Purpose : the quest Perfectly Missing + Script Author : theFoof + Script Date : 2013.6.3 + + Zone : Frostfang Sea + Quest Giver : Blorpisa Bogchild + Preceded by : Disarming the Ry'Gorr + Followed by : The Last Ingredient +--]] + +function Init(Quest) + AddQuestRewardCoin(Quest, math.random(5,90), math.random(13,25), 0, 0) + AddQuestStepKill(Quest, 1, "I must harvest the perfect ice slurry core.", 1, 50, "I must harvest a perfect ice slurry core from the ice slurries on the hill south of the Great Shelf.", 1174, 4700101) + AddQuestStepCompleteAction(Quest, 1, "GotCore") +end + +function Accepted(Quest, QuestGiver, Player) + FaceTarget(QuestGiver, Player) + conversation = CreateConversation() + + PlayFlavor(QuestGiver, "blorpisa_bogchild/halas/great_shelf/blorpisa_bogchild/blorpisa_bogchild_030.mp3", "", "", 1741611934, 1901038615, Player) + AddConversationOption(conversation, "I shall return as soon as I find the perfect core.") + StartConversation(conversation, QuestGiver, Player, "You can find the ice slurries on the hill south of the Great Shelf. Please hurry. The sooner you return with the core, the sooner I can perfect the spell to protect the pilgrims.") +end + +function Deleted(Quest, QuestGiver, Player) +end + +function Declined(Quest, QuestGiver, Player) +end + +function GotCore(Quest, QuestGiver, Player) + UpdateQuestTaskGroupDescription(Quest, 1, "I have harvested a perfect ice slurry core from the ice slurries.") + AddQuestStepChat(Quest, 2, "I must speak with Blorpisa Bogchild. Blorpisa is staying at the Great Shelf.", 1, "I must return the perfect ice slurry core to Blorpisa Bogchild in the Great Shelf.", 0, 4700039) + AddQuestStepCompleteAction(Quest, 2, "CompleteQuest") +end + +function CompleteQuest(Quest, QuestGiver, Player) + UpdateQuestTaskGroupDescription(Quest, 2, "Blorpisa thanked me for harvesting the perfect ice slurry core.") + GiveQuestReward(Quest, Player) +end + +function Reload(Quest, QuestGiver, Player, Step) + if Step == 1 then + GotCore(Quest, QuestGiver, Player) + end +end \ No newline at end of file diff --git a/server/Quests/FrostfangSea/pilgrim_pathfinder.lua b/server/Quests/FrostfangSea/pilgrim_pathfinder.lua new file mode 100644 index 000000000..6f5c29abb --- /dev/null +++ b/server/Quests/FrostfangSea/pilgrim_pathfinder.lua @@ -0,0 +1,44 @@ +--[[ + Script Name : Quests/FrostfangSea/pilgrim_pathfinder.lua + Script Purpose : the quest Pilgrim Pathfinder + Script Author : theFoof + Script Date : 2013.5.19 + + Zone : Frostfang Sea + Quest Giver : Verien Skysigh + Preceded by : Sifting Through the Grizzly Garbage + Followed by : Pilgrim Scout +--]] + +function Init(Quest) + AddQuestRewardCoin(Quest, math.random(10,90), math.random(2,5), 0, 0) + AddQuestStepLocation(Quest, 1, "Hike to the top of the blizzard grizzly cave.", 15, "From the top of the blizzard grizzly cave you should be able to find the best path to the city of New Halas.", 0, 166.79, 65.23, -470.68) + AddQuestStepCompleteAction(Quest, 1, "HikedTop") +end + +function Accepted(Quest, QuestGiver, Player) +end + +function Declined(Quest, QuestGiver, Player) +end + +function Deleted(Quest, QuestGiver, Player) +end + +function HikedTop(Quest, QuestGiver, Player) + UpdateQuestTaskGroupDescription(Quest, 1, "There seems to be a path leading into the hills. Perhaps by taking it you can avoid the dangerous plains below?") + AddQuestStepChat(Quest, 2, "Return to Verien Skysigh and tell him of the path leading into the hills above the dangerous plains.", 1, "You should return to Verien Skysigh, at the pilgrims' camp within Gwenevyn's Cove, and tell him of the path leading into the hills above the dangerous plains.", 0, 4700034) + AddQuestStepCompleteAction(Quest, 2, "CompleteQuest") +end + +function CompleteQuest(Quest, QuestGiver, Player) + GiveQuestReward(Quest, Player) +end + +function Reload(Quest, QuestGiver, Player, Step) + if Step == 1 then + HikedTop(Quest, QuestGiver, Player) + elseif Step == 2 then + CompleteQuest(Quest, QuestGiver, Player) + end +end \ No newline at end of file diff --git a/server/Quests/FrostfangSea/pilgrim_pelts.lua b/server/Quests/FrostfangSea/pilgrim_pelts.lua new file mode 100644 index 000000000..64469dc37 --- /dev/null +++ b/server/Quests/FrostfangSea/pilgrim_pelts.lua @@ -0,0 +1,50 @@ +--[[ + Script Name : Quests/FrostfangSea/pilgrim_pelts.lua + Script Purpose : the quest Pilgrim Pelts + Script Author : theFoof + Script Date : 2013.5.20 + + Zone : Frostfang Sea + Quest Giver : Verien Skysigh + Preceded by : Pilgrim Scout + Followed by : +--]] + +function Accepted(Quest, QuestGiver, Player) + FaceTarget(QuestGiver, Player) + conversation = CreateConversation() + + PlayFlavor(QuestGiver, "verien_skysigh/halas/gwenevyns_cove/verien_skysigh_023.mp3", "", "", 4231608247, 3609708675, Player) + AddConversationOption(conversation, "I'm glad to help.") + StartConversation(conversation, QuestGiver, Player, "Thank you, brave " .. GetName(Player) .. ". I thank the gods that you arrived here when you did.") +end + +function Declined(Quest, QuestGiver, Player) +end + +function Deleted(Quest, QuestGiver, Player) +end + +function Init(Quest) + AddQuestRewardCoin(Quest, math.random(20,80), math.random(13,20), 0, 0) + AddQuestStepKill(Quest, 1, "Slay any of the big icemane felines you find upon the dangerous Icemane Plains.", 6, 100, "The froglok pilgrims were not blessed by Marr with much protection from the elements. Verien fears they may die due to exposure during the trip.", 126, 4700072, 4700070, 4700074) + AddQuestStepCompleteAction(Quest, 1, "KilledCats") +end + +function KilledCats(Quest, QuestGiver, Player) + UpdateQuestTaskGroupDescription(Quest, 1, "You have slain many icemane felines for their pelts.") + AddQuestStepChat(Quest, 2, "Return to Verien Skysigh with the icemane pelts you obtained.", 1, "You should return to Verien Skysigh, at the pilgrims' camp within Gwenevyn's Cove, with the icemane pelts you obtained.", 0, 4700034) + AddQuestStepCompleteAction(Quest, 2, "CompleteQuest") +end + +function CompleteQuest(Quest, QuestGiver, Player) + GiveQuestReward(Quest, Player) +end + +function Reload(Quest, QuestGiver, Player, Step) + if Step == 1 then + KilledCats(Quest, QuestGiver, Player) + elseif Step == 2 then + CompleteQuest(Quest, QuestGiver, Player) + end +end \ No newline at end of file diff --git a/server/Quests/FrostfangSea/pilgrim_scout.lua b/server/Quests/FrostfangSea/pilgrim_scout.lua new file mode 100644 index 000000000..e831756a5 --- /dev/null +++ b/server/Quests/FrostfangSea/pilgrim_scout.lua @@ -0,0 +1,50 @@ +--[[ + Script Name : Quests/FrostfangSea/pilgrim_scout.lua + Script Purpose : the quest Pilgrim Scout + Script Author : theFoof + Script Date : 2013.5.19 + + Zone : Frostfang Sea + Quest Giver : Verien Skysigh + Preceded by : Pilgrim Pathfinder + Followed by : +--]] + +function Accepted(Quest, QuestGiver, Player) + FaceTarget(QuestGiver, Player) + conversation = CreateConversation() + + PlayFlavor(QuestGiver, "verien_skysigh/halas/gwenevyns_cove/verien_skysigh_015.mp3", "", "", 1474870749, 1583499766, Player) + AddConversationOption(conversation, "I understand.") + StartConversation(conversation, QuestGiver, Player, "Forgive me if you think I'm being timid, but I am leery about walking into a trap or into a treacherous situation.") +end + +function Declined(Quest, QuestGiver, Player) +end + +function Deleted(Quest, QuestGiver, Player) +end + +function Init(Quest) + AddQuestRewardCoin(Quest, math.random(10,80), math.random(5,10), 0, 0) + AddQuestStepLocation(Quest, 1, "Follow the path that travels west from the pilgrims' camp, keeping the wall of ice and stone on your left, as far as you can.", 10, "Scout ahead of the pilgrims and confirm that the path you spotted from atop the blizzard grizzly den is indeed traversable.", 0, 300, 53.22, -260.45) + AddQuestStepCompleteAction(Quest, 1, "CheckedPath") +end + +function CheckedPath(Quest, QuestGiver, Player) + UpdateQuestTaskGroupDescription(Quest, 1, "The path is a dead end! An avalanche of ice and stone blocks your way.") + AddQuestStepChat(Quest, 2, "Return to Verien Skysigh and inform him that the path leads nowhere.", 1, "You should return to Verien Skysigh, at the pilgrims' camp within Gwenevyn's Cove, and tell him the unfortunate news.", 0, 4700034) + AddQuestStepCompleteAction(Quest, 2, "CompleteQuest") +end + +function CompleteQuest(Quest, QuestGiver, Player) + GiveQuestReward(Quest, Player) +end + +function Reload(Quest, QuestGiver, Player, Step) + if Step == 1 then + CheckedPath(Quest, QuestGiver, Player) + elseif Step == 2 then + CompleteQuest(Quest, QuestGiver, Player) + end +end \ No newline at end of file diff --git a/server/Quests/FrostfangSea/pouring_one_out_for_my_skellies.lua b/server/Quests/FrostfangSea/pouring_one_out_for_my_skellies.lua new file mode 100644 index 000000000..732004f33 --- /dev/null +++ b/server/Quests/FrostfangSea/pouring_one_out_for_my_skellies.lua @@ -0,0 +1,55 @@ +--[[ + Script Name : Quests/FrostfangSea/pouring_one_out_for_my_skellies.lua + Script Purpose : for the quest "Pouring One Out for My Skellies" + Script Author : theFoof + Script Date : 2013.5.31 + Script Notes : + + Zone : Frostfang Sea + Quest Giver : Belka Thunderheart + Preceded by : 'Tis Most Unnatural + Followed by : No Substitute for Shard Work +--]] + +function Init(Quest) + AddQuestStep(Quest, 1, "I must pour Fronden's Finest on several Ry'Gorr bone piles.", 5, 100, "I must pour Fronden's Finest on several Ry'Gorr bone piles. The bone piles litter the battlefield of the Great Shelf.", 2209) + AddQuestStepCompleteAction(Quest, 1, "PouredAle") + AddQuestRewardCoin(Quest, math.random(5,80), math.random(6,15), 0, 0) +end + +function Accepted(Quest, QuestGiver, Player) + if not HasItem(Player, 46438) then + SummonItem(Player, 46438, 1) + end + FaceTarget(QuestGiver, Player) + conversation = CreateConversation() + + PlayFlavor(QuestGiver, "", "", "", 0, 0, Player) + AddConversationOption(conversation, "We'll find out. Wish me luck.") + AddConversationOption(conversation, "I wasn't expecting it to be easy.") + StartConversation(conversation, QuestGiver, Player, "I can't imagine a skeleton will hold still long enough to let ye splash them, so ye'll want to pour this on the bone piles of the recently re-deceased.") +end + +function Deleted(Quest, QuestGiver, Player) + RemoveItem(Player, 46438) +end + +function Declined(Quest, QuestGiver, Player) +end + +function PouredAle(Quest, QuestGiver, Player) + UpdateQuestTaskGroupDescription(Quest, 1, "I have successfully destroyed the Ry'Gorr bone piles.") + AddQuestStepChat(Quest, 2, "I must speak with Belka Thunderheart.", 1 ,"I must speak with Belka Thunderheart, who can be found in the cave at the Great Shelf.", 0, 4700079) + AddQuestStepCompleteAction(Quest, 2, "CompleteQuest") +end + +function CompleteQuest(Quest, QuestGiver, Player) + GiveQuestReward(Quest, Player) + RemoveItem(Player, 46438) +end + +function Reload(Quest, QuestGiver, Player, Step) + if Step == 1 then + PouredAle(Quest, QuestGiver, Player) + end +end \ No newline at end of file diff --git a/server/Quests/FrostfangSea/reclaiming_their_honor.lua b/server/Quests/FrostfangSea/reclaiming_their_honor.lua new file mode 100644 index 000000000..942c84551 --- /dev/null +++ b/server/Quests/FrostfangSea/reclaiming_their_honor.lua @@ -0,0 +1,50 @@ +--[[ + Script Name : Quests/FrostfangSea/reclaiming_their_honor.lua + Script Purpose : for the quest "Reclaiming Their Honor" + Script Author : theFoof + Script Date : 2013.5.31 + Script Notes : + + Zone : Frostfang Sea + Quest Giver : Belka Thunderheart + Preceded by : Displaced and Discouraged + Followed by : 'Tis Most Unnatural +--]] + +function Init(Quest) + AddQuestRewardCoin(Quest, math.random(5,80), math.random(6,15), 0, 0) + AddQuestStepKill(Quest, 1, "I must reclaim several coldain signet rings from the Ry'Gorr raiders.", 8, 80, "I must reclaim several coldain signet rings from the Ry'Gorr raiders. The raiders can be found on the jetties of ice below Pride Overlook and Herga's Choke, or on Ry'Gorr Isle.", 592, 4701108, 4700868) + AddQuestStepCompleteAction(Quest, 1, "KilledOrcs") +end + +function Accepted(Quest, QuestGiver, Player) + FaceTarget(QuestGiver, Player) + conversation = CreateConversation() + + PlayFlavor(QuestGiver, "", "", "", 0, 0, Player) + AddConversationOption(conversation, "I look forward to punishing the orcs.") + AddConversationOption(conversation, "I will return.") + StartConversation(conversation, QuestGiver, Player, "I look forward to your return. ") +end + +function Deleted(Quest, QuestGiver, Player) +end + +function Declined(Quest, QuestGiver, Player) +end + +function KilledOrcs(Quest, QuestGiver, Player) + UpdateQuestTaskGroupDescription(Quest, 1, "I have reclaimed several coldain signet rings.") + AddQuestStepChat(Quest, 2, "I must speak with Belka Thunderheart.", 1, "I must speak with Belka Thunderheart, who can be found in the cave at the Great Shelf.", 0, 4700079) + AddQuestStepCompleteAction(Quest, 2, "CompleteQuest") +end + +function CompleteQuest(Quest, QuestGiver, Player) + GiveQuestReward(Quest, Player) +end + +function Reload(Quest, QuestGiver, Player, Step) + if Step == 1 then + KilledOrcs(Quest, QuestGiver, Player) + end +end \ No newline at end of file diff --git a/server/Quests/FrostfangSea/repelling_little_critters.lua b/server/Quests/FrostfangSea/repelling_little_critters.lua new file mode 100644 index 000000000..0847cb376 --- /dev/null +++ b/server/Quests/FrostfangSea/repelling_little_critters.lua @@ -0,0 +1,73 @@ +--[[ + Script Name : Quests/FrostfangSea/repelling_little_critters.lua + Script Purpose : the quest Repelling Little Critters + Script Author : theFoof + Script Date : 2013.5.12 + + Zone : Frostfang Sea + Quest Giver : Arrin Clelland + Preceded by : Crustose Removal + Followed by : Scraggly Foodstuffs +--]] + +function Init(Quest) + AddQuestRewardCoin(Quest, math.random(30,60), math.random(0,2), 0, 0) + AddQuestStep(Quest, 1, "Test the new repellent on crustose sporetenders.", 6, 100, "I should test the new repllent in my inventory on the crustose sporetenders wandering amongst the lichen covered stones.", 811) + AddQuestStepCompleteAction(Quest, 1, "SprayedRepellent") +end + +function Accepted(Quest, QuestGiver, Player) + SummonItem(Player, 45806, 1) +end + +function Declined(Quest, QuestGiver, Player) +end + +function Deleted(Quest, QuestGiver, Player) + if HasItem(Player, 45806) then + RemoveItem(Player, 45806) + elseif HasItem(Player, 45805) then + RemoveItem(Player, 45805) + end +end + +function SprayedRepellent(Quest, QuestGiver, Player) + UpdateQuestTaskGroupDescription(Quest, 1, "I have tested a new repellent on the crustone sporetenders wandering amongst the lichen covered stones") + AddQuestStepChat(Quest, 2, "Return to Arrin Clelland", 1, "I should return to Arrin Clelland in Pilgrims' Landing.", 0, 4700000) + AddQuestStepCompleteAction(Quest, 2, "TalkedArrin") +end + +function TalkedArrin(Quest, QuestGiver, Player) + if HasItem(Player, 45806) then + RemoveItem(Player, 45806) + end + SummonItem(Player, 45805, 1) + UpdateQuestTaskGroupDescription(Quest, 2, "I have returned to Arrin Clelland in Pilgrims' Landing.") + AddQuestStep(Quest, 3, "Apply the crustose repellent to the barrels of provisions.", 1, 100, "The provisions found under the protection of the other half of the ancient ship wreck in the northern section of Pilgrims' Landing are overrun by crustose.", 2285) + AddQuestStepCompleteAction(Quest, 3, "RepelledFood") +end + +function RepelledFood(Quest, QuestGiver, Player) + UpdateQuestTaskGroupDescription(Quest, 3, "The crustose were sent running away from the barrles of provisions!") + AddQuestStepChat(Quest, 4, "Return to Arrin Clelland", 1, "I am to return to Arrin Clelland in Pilgrims' Landing.", 0, 4700000) + AddQuestStepCompleteAction(Quest, 4, "CompleteQuest") +end + +function CompleteQuest(Quest, QuestGiver, Player) + if HasItem(Player, 45805) then + RemoveItem(Player, 45805) + end + GiveQuestReward(Quest, Player) +end + +function Reload(Quest, QuestGiver, Player, Step) + if Step == 1 then + SprayedRepellent(Quest, QuestGiver, Player) + elseif Step == 2 then + TalkedArrin(Quest, QuestGiver, Player) + elseif Step == 3 then + RepelledFood(Quest, QuestGiver, Player) + elseif Step == 4 then + CompleteQuest(Quest, QuestGiver, Player) + end +end \ No newline at end of file diff --git a/server/Quests/FrostfangSea/report_to_cragged_spine.lua b/server/Quests/FrostfangSea/report_to_cragged_spine.lua new file mode 100644 index 000000000..4604628c8 --- /dev/null +++ b/server/Quests/FrostfangSea/report_to_cragged_spine.lua @@ -0,0 +1,38 @@ +--[[ + Script Name : Quests/FrostfangSea/report_to_cragged_spine.lua + Script Purpose : for the quest "Report to Cragged Spine" + Script Author : theFoof + Script Date : 2013.6.1 + Script Notes : + + Zone : Frostfang Sea + Quest Giver : Belka Thunderheart + Preceded by : Domestication is the New Survivalism + Followed by : +--]] + +function Init(Quest) + AddQuestRewardCoin(Quest, math.random(5,90), math.random(6,15), 0, 0) + AddQuestStepChat(Quest, 1, "I must report to Tad Ironstein at the Cragged Spine.", 1, "I must report to Tad Ironstein at the Cragged Spine outpost. The Cragged Spine is south of the Great Shelf, past the frostbiter basilisks.", 0, 4700106) + AddQuestStepCompleteAction(Quest, 1, "CompleteQuest") +end + +function Accepted(Quest, QuestGiver, Player) + FaceTarget(QuestGiver, Player) + conversation = CreateConversation() + + PlayFlavor(QuestGiver, "", "", "", 0, 0, Player) + AddConversationOption(conversation, "And with you. Farewell!") + AddConversationOption(conversation, "On to bigger and better things.") + StartConversation(conversation, QuestGiver, Player, "Yer actions have given us all hope out here, " .. GetName(Player) .. ", and ye've personally rescued me from the depths of despair. We will miss having ye around. Brell be with ye.") +end + +function Deleted(Quest, QuestGiver, Player) +end + +function Declined(Quest, QuestGiver, Player) +end + +function CompleteQuest(Quest, QuestGiver, Player) + GiveQuestReward(Quest, Player) +end \ No newline at end of file diff --git a/server/Quests/FrostfangSea/ride_upon_the_gwenevyn_II.lua b/server/Quests/FrostfangSea/ride_upon_the_gwenevyn_II.lua new file mode 100644 index 000000000..5f71c3997 --- /dev/null +++ b/server/Quests/FrostfangSea/ride_upon_the_gwenevyn_II.lua @@ -0,0 +1,33 @@ +--[[ + Script Name : Quests/FrostfangSea/ride_upon_the_gwenevyn_II.lua + Script Purpose : the quest Ride Upon the Gwenevun II + Script Author : theFoof + Script Date : 2013.5.14 + + Zone : Frostfang Sea + Quest Giver : Yasha Redblade + Preceded by : Boatload of Work + Followed by : +--]] + +function Init(Quest) + AddQuestRewardCoin(Quest, math.random(10,70), math.random(0,1), 0, 0) + AddQuestStepChat(Quest, 1, "Report to Wregan Firebeard.", 1, "I am to report to Wregan Firebeard at Gwenevyn's Cove.", 0, 4700035) + AddQuestStepCompleteAction(Quest, 1, "CompletedQuest") +end + +function Accepted(Quest, QuestGiver, Player) +end + +function Declined(Quest, QuestGiver, Player) +end + +function Deleted(Quest, QuestGiver, Player) +end + +function CompletedQuest(Quest, QuestGiver, Player) + GiveQuestReward(Quest, Player) +end + +function Reload(Quest, QuestGiver, Player, Step) +end \ No newline at end of file diff --git a/server/Quests/FrostfangSea/roughing_up_the_reinforcements.lua b/server/Quests/FrostfangSea/roughing_up_the_reinforcements.lua new file mode 100644 index 000000000..394c177da --- /dev/null +++ b/server/Quests/FrostfangSea/roughing_up_the_reinforcements.lua @@ -0,0 +1,101 @@ +--[[ + Script Name : Quests/FrostfangSea/roughing_up_the_reinforcements.lua + Script Purpose : for the quest Roughing Up the Reinforcements + Script Author : theFoof + Script Date : 2013.6.10 + Script Notes : + + Zone : Frostfang Sea + Quest Giver : Thirin Veliumdelver + Preceded by : Nothing to Waste + Followed by : Through Thine Eyes +--]] + +function Init(Quest) + AddQuestRewardCoin(Quest, math.random(5,90), math.random(12,24), 0, 0) + AddQuestStepKill(Quest, 1, "I must slay four Ry'Gorr grenadiers.", 4, 100, "I must travel to the Jagged Daggers Isle and engage the Ry'Gorr orcs. While there I should also destroy as many weapon supplies as I can find.", 2488, 4700120, 4700543) + AddQuestStepKill(Quest, 2, "I must slay four Ry'Gorr infiltrators.", 4, 100, "I must travel to the Jagged Daggers Isle and engage the Ry'Gorr orcs. While there I should also destroy as many weapon supplies as I can find.", 2488, 4700119, 4700538) + AddQuestStep(Quest, 3, "I must destroy four of the Ry'Gorr orcs' weapon supplies.", 4, 100, "I must travel to the Jagged Daggers Isle and engage the Ry'Gorr orcs. While there I should also destroy as many weapon supplies as I can find.", 287) + AddQuestStepCompleteAction(Quest, 1, "KilledGrenadiers") + AddQuestStepCompleteAction(Quest, 2, "KilledInfiltrators") + AddQuestStepCompleteAction(Quest, 3, "DestroyedSpears") +end + +function Accepted(Quest, QuestGiver, Player) + local thirin = GetSpawnByLocationID(GetZone(QuestGiver), 14520) + FaceTarget(thirin, Player) + conversation = CreateConversation() + + PlayFlavor(thirin, "thirin_veliumdelver/halas/thirin_veliumdelver/thirin_veliumdelver012.mp3", "", "", 830312044, 2813539587, Player) + AddConversationOption(conversation, "And you, Thirin.") + StartConversation(conversation, thirin, Player, "Good. Brell be with you on your quest, adventurer.") +end + +function Deleted(Quest, QuestGiver, Player) +end + +function Declined(Quest, QuestGiver, Player) +end + +function KilledGrenadiers(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 1, "I have slain four Ry'Gorr grenadiers.") + CheckProgress(Quest, QuestGiver, Player) +end + +function KilledInfiltrators(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 2, "I have slain four Ry'Gorr infiltrators.") + CheckProgress(Quest, QuestGiver, Player) +end + +function DestroyedSpears(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 3, "I have destroyed the Ry'Gorr orcs' weapon supplies.") + CheckProgress(Quest, QuestGiver, Player) +end + +function CheckProgress(Quest, QuestGiver, Player) + if QuestStepIsComplete(Player, 57, 1) and QuestStepIsComplete(Player, 57, 2) and QuestStepIsComplete(Player, 57, 3) then + AddStep4(Quest, QuestGiver, Player) + end +end + +function AddStep4(Quest, QuestGiver, Player) + UpdateQuestTaskGroupDescription(Quest, 1, "With so many Ry'Gorr weapons and orcs destroyed, re-enforcement will be hard.") + AddQuestStepKill(Quest, 4, "Thirin requested that I slay a war shaman as well, to prevent their scrying magics.", 1, 100, "I should slay a Ry'Gorr war shaman so the Ry'Gorr will be unable to scry Thirin's encampment.", 2488, 4700542, 4700121) + AddQuestStepCompleteAction(Quest, 4, "KilledShaman") +end + +function KilledShaman(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 4, "The Ry'Gorr war shaman, now slain, may have something useful on them.") + AddQuestStepObtainItem(Quest, 5, "I should see what the Ry'Gorr war shaman has. There may be something of use.", 1, 100, "I should slay a Ry'Gorr war shaman so the Ry'Gorr will be unable to scry Thirin's encampment.", 83, 11820) + AddQuestStepCompleteAction(Quest, 5, "GotEye") +end + +function GotEye(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 5, "It appears to the war shaman has some sort of Orcish scrying eye. I should show this to Thirin Veliumdelver at the Cragged Spine.") + UpdateQuestTaskGroupDescription(Quest, 2, "I found an odd Orcish scrying eye. Thirin would be interested in this.") + AddQuestStepChat(Quest, 6, "I must speak with Thirin Veliumdelver.", 1, "I should return to Thirin Veliumdelver, with the Orcish scrying eye, at the Cragged Spine.", 0, 4700112) + AddQuestStepCompleteAction(Quest, 6, "CompleteQuest") +end + +function CompleteQuest(Quest, QuestGiver, Player) + GiveQuestReward(Quest, Player) +end + +function Reload(Quest, QuestGiver, Player, Step) + if QuestStepIsComplete(Player, 57, 1) and GetQuestStep(Player, 57) < 4 then + KilledGrenadiers(Quest, QuestGiver, Player) + end + if QuestStepIsComplete(Player, 57, 2) and GetQuestStep(Player, 57) < 4 then + KilledInfiltrators(Quest, QuestGiver, Player) + end + if QuestStepIsComplete(Player, 57, 3) and GetQuestStep(Player, 57) < 4 then + DestroyedSpears(Quest, QuestGiver, Player) + end + if GetQuestStep(Player, 57) == 4 then + AddStep4(Quest, QuestGiver, Player) + elseif Step == 4 then + KilledShaman(Quest, QuestGiver, Player) + elseif Step == 5 then + GotEye(Quest, QuestGiver, Player) + end +end \ No newline at end of file diff --git a/server/Quests/FrostfangSea/rygorr_mining_operations.lua b/server/Quests/FrostfangSea/rygorr_mining_operations.lua new file mode 100644 index 000000000..868616601 --- /dev/null +++ b/server/Quests/FrostfangSea/rygorr_mining_operations.lua @@ -0,0 +1,63 @@ +--[[ + Script Name : Quests/FrostfangSea/rygorr_mining_operations.lua + Script Purpose : for the quest "Ry'Gorr Mining Operations' + Script Author : theFoof + Script Date : 2013.6.13 + Script Notes : + + Zone : Frostfang Sea + Quest Giver : Thirin Veliumdelver + Preceded by : Below The Frozen Waves + Followed by : A Good Distraction +--]] + +function Init(Quest) + AddQuestRewardCoin(Quest, math.random(5,90), math.random(27,40), 0, 0) + AddQuestStep(Quest, 1, "I should look for an exploding barrel and set it in front of the hastily made wall.", 1, 100, "I should look around for a Ry'Gorr Explosive Mining Barrel and use it on the wall I discovered.", 0) + AddQuestStepCompleteAction(Quest, 1, "DestroyedWall") +end + +function Accepted(Quest, QuestGiver, Player) + FaceTarget(QuestGiver, Player) + conversation = CreateConversation() + + PlayFlavor(QuestGiver, "thirin_veliumdelver/halas/cragged_spine/thirin_veliumdelver_cave005.mp3", "", "", 3687695451, 727081902, Player) + AddConversationOption(conversation, "I won't, Thirin.") + StartConversation(conversation, QuestGiver, Player, "I'll be expecting a good show, adventurer. Don't let me down.") +end + +function Deleted(Quest, QuestGiver, Player) + local zone = GetZone(Player) + if GetZoneID(zone) == 470 then + AddSpawnAccess(GetSpawnByLocationID(zone, 441164), Player) + AddSpawnAccess(GetSpawnByLocationID(zone, 571511), Player) + end +end + +function Declined(Quest, QuestGiver, Player) +end + +function DestroyedWall(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 1, "I was able to destroy the wall.") + AddQuestStepLocation(Quest, 2, "With the wall destroyed I should investigate what is on the other side.", 10, "I should look around for a Ry'Gorr Explosive Mining Barrel and use it on the wall I discovered.", 0, -44.05, -67.39, 141.07) + AddQuestStepCompleteAction(Quest, 2, "FoundCreatures") +end + +function FoundCreatures(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 2, "I have discovered velium creatures that appear to have slain a number of Ry'Gorr orcs. I should report what I've found to Thirin Veliumdelver.") + UpdateQuestTaskGroupDescription(Quest, 1, "I was able to destroy the wall and discovered creatures that appear to be made from velium.") + AddQuestStepChat(Quest, 3, "I should speak with Thirin Veliumdelver of the creatures I've found.", 1, "I should return to Thirin Veliumdelver and tell him of the velium creatures I found beyond the cave-in.", 0, 4700112) + AddQuestStepCompleteAction(Quest, 3, "CompleteQuest") +end + +function CompleteQuest(Quest, QuestGiver, Player) + GiveQuestReward(Quest, Player) +end + +function Reload(Quest, QuestGiver, Player, Step) + if Step == 1 then + DestroyedWall(Quest, QuestGiver, Player) + elseif Step == 2 then + FoundCreatures(Quest, QuestGiver, Player) + end +end \ No newline at end of file diff --git a/server/Quests/FrostfangSea/rygorr_tool_taking.lua b/server/Quests/FrostfangSea/rygorr_tool_taking.lua new file mode 100644 index 000000000..eab26054e --- /dev/null +++ b/server/Quests/FrostfangSea/rygorr_tool_taking.lua @@ -0,0 +1,44 @@ +--[[ + Script Name : Quests/FrostfangSea/rygorr_tool_taking.lua + Script Purpose : the quest Ry'Gorr Tool Taking + Script Author : theFoof + Script Date : 2013.7.10 + Script Notes : + + Zone : Frostfang Sea + Quest Giver : Odon Scourgeson + Preceded by : Campside Spores + Followed by : Watch Out Below! +--]] + + +function Init(Quest) + AddQuestRewardCoin(Quest, math.random(5,90), math.random(27,40), 0, 0) + AddQuestStep(Quest, 1, "Obtain the Ry'Gorr digging tools from within the Demon's Delve tunnels.", 6, 100, "Return to the Demon's Delve tunnels below Erollis in search of the magically imbued tools.", 1668) + AddQuestStepCompleteAction(Quest, 1, "GotPicks") +end + +function Accepted(Quest, QuestGiver, Player) +end + +function Deleted(Quest, QuestGiver, Player) +end + +function Declined(Quest, QuestGiver, Player) +end + +function GotPicks(Quest, QuestGiver, Player) + UpdateQuestTaskGroupDescription(Quest, 1, "You've stolen enough of the Ry'Gorr digging tools.") + AddQuestStepChat(Quest, 2, "Return to Odon Scourgeson now that you've stolen enough of the Ry'Gorr digging tools.", 1, "You should return to Odon Scourgeson, at Cragged Spine, now that you've stolen enough of the magically imbued Ry'Gorr digging tools.", 0, 4700108) + AddQuestStepCompleteAction(Quest, 2, "CompleteQuest") +end + +function CompleteQuest(Quest, QuestGiver, Player) + GiveQuestReward(Quest, Player) +end + +function Reload(Quest, QuestGiver, Player, Step) + if Step == 1 then + GotPicks(Quest, QuestGiver, Player) + end +end \ No newline at end of file diff --git a/server/Quests/FrostfangSea/scraggly_foodstuffs.lua b/server/Quests/FrostfangSea/scraggly_foodstuffs.lua new file mode 100644 index 000000000..f7d130a79 --- /dev/null +++ b/server/Quests/FrostfangSea/scraggly_foodstuffs.lua @@ -0,0 +1,44 @@ +--[[ + Script Name : Quests/FrostfangSea/scraggly_foodstuffs.lua + Script Purpose : the quest "Scraggly Foodstuffs" + Script Author : theFoof + Script Date : 2013.5.15 + + Zone : Frostfang Sea + Quest Giver : Arrin Clelland + Preceded by : Repelling Little Critters + Followed by : Frigid Fishing +--]] + +function Init(Quest) + AddQuestRewardCoin(Quest, math.random(20,90), math.random(2,3), 0, 0) + AddQuestStep(Quest, 1, "Gather some tubers from the scraggly shrubs.", 3, 100, "I must gather some scraggly tubers on the windy cliffs overlooking the sea, on the northern side of Pilgrims' Landing.", 2313) + AddQuestStepCompleteAction(Quest, 1, "GatheredTubers") +end + +function GatheredTubers(Quest, QuestGiver, Player) + UpdateQuestTaskGroupDescription(Quest, 1, "I have gathered some tubers from the scraggly shrubs growing on the northeast side of Pilgrims' Landing.") + AddQuestStepChat(Quest, 2, "Return the scraggly tubers to Arrin.", 1, " I am to return the tubers to Arrin Clelland, Camp Provisioner, in Pilgrims' Landing.", 2313, 4700000) + AddQuestStepCompleteAction(Quest, 2, "CompleteQuest") +end + +function CompleteQuest(Quest, QuestGiver, Player) + GiveQuestReward(Quest, Player) +end + +function Accepted(Quest, QuestGiver, Player) +end + +function Declined(Quest, QuestGiver, Player) +end + +function Deleted(Quest, QuestGiver, Player) +end + +function Reload(Quest, QuestGiver, Player, Step) + if Step == 1 then + GatheredTubers(Quest, QuestGiver, Player) + elseif Step == 2 then + CompleteQuest(Quest, QuestGiver, Player) + end +end \ No newline at end of file diff --git a/server/Quests/FrostfangSea/seeking_elemental_education.lua b/server/Quests/FrostfangSea/seeking_elemental_education.lua new file mode 100644 index 000000000..443526786 --- /dev/null +++ b/server/Quests/FrostfangSea/seeking_elemental_education.lua @@ -0,0 +1,68 @@ +--[[ + Script Name : Quests/FrostfangSea/seeking_elemental_education.lua + Script Purpose : for the quest "Seeking Elemental Education" + Script Author : theFoof + Script Date : 2013.6.13 + Script Notes : + + Zone : Frostfang Sea + Quest Giver : Thirin Veliumdelver + Preceded by : Sleetfoot Search Party + Followed by : Nap Time for Evigis +--]] + +function Init(Quest) + AddQuestRewardCoin(Quest, math.random(5,90), math.random(12,25), 0, 0) + AddQuestStepChat(Quest, 1, "Speak with Torli Blackbow at the White Lodge, the guard house for New Halas.", 1, "Thirin Veliumdelver has sent you within New Halas to alert others of Evigis the Ancient.", 0, 4700137) + AddQuestStepCompleteAction(Quest, 1, "TalkedTorli") +end + +function Accepted(Quest, QuestGiver, Player) + FaceTarget(QuestGiver, Player) + conversation = CreateConversation() + + PlayFlavor(QuestGiver, "thirin_veliumdelver/halas/cragged_spine/thirin_veliumdelver_cave018.mp3", "", "", 706555413, 2480131387, Player) + AddConversationOption(conversation, "I will do this, for Ordin.", "ExtraChat") + AddConversationOption(conversation, "I am sorry, but this is too much right now.") + StartConversation(conversation, QuestGiver, Player, GetName(Player) .. ". That is a good name. My friend, I ask one more favor. I need you to deliver the news of this creature to Torli Blackbow. I need to be with my men or I would go myself. You can find her East of the Cragged Spine, in the White Lodge. She is an old friend and will know how to handle this creature.") +end + +function ExtraChat(Quest, QuestGiver, Player) + FaceTarget(QuestGiver, Player) + conversation = CreateConversation() + + PlayFlavor(QuestGiver, "thirin_veliumdelver/halas/cragged_spine/thirin_veliumdelver_cave019.mp3", "", "", 1580967348, 3299722606, Player) + AddConversationOption(conversation, "You too, Thirin. You too.") + StartConversation(conversation, QuestGiver, Player, "Thank you, my friend. Brell be with you, always.") +end + +function Deleted(Quest, QuestGiver, Player) +end + +function Declined(Quest, QuestGiver, Player) +end + +function TalkedTorli(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 1, "You spoke with Torli Blackbow.") + AddQuestStepChat(Quest, 2, "Speak with Gerla Meltwater at Glacierbane's Vault, in New Halas.", 1, "Thirin Veliumdelver has sent you within New Halas to alert others of Evigis the Ancient.", 0, 4700183) + AddQuestStepCompleteAction(Quest, 2, "TalkedGerla") +end + +function TalkedGerla(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 2, "You spoke with Torli Blackbow.") + UpdateQuestTaskGroupDescription(Quest, 1, "Gerla Meltwater knew quite a bit about Evigis the Ancient!") + AddQuestStepChat(Quest, 3, "Deliver Gerla's satchel to Torli Blackbow.", 1, "You should return to Torli Blackbow at the White Lodge, the guard house for New Halas.", 0, 4700137) + AddQuestStepCompleteAction(Quest, 3, "CompleteQuest") +end + +function CompleteQuest(Quest, QuestGiver, Player) + GiveQuestReward(Quest, Player) +end + +function Reload(Quest, QuestGiver, Player, Step) + if Step == 1 then + TalkedTorli(Quest, QuestGiver, Player) + elseif Step == 2 then + TalkedGerla(Quest, QuestGiver, Player) + end +end \ No newline at end of file diff --git a/server/Quests/FrostfangSea/severing_the_head.lua b/server/Quests/FrostfangSea/severing_the_head.lua new file mode 100644 index 000000000..5050d4ee5 --- /dev/null +++ b/server/Quests/FrostfangSea/severing_the_head.lua @@ -0,0 +1,61 @@ +--[[ + Script Name : Quests/FrostfangSea/severing_the_head.lua + Script Purpose : the quest "Severing the Head" + Script Author : theFoof + Script Date : 2013.6.17 + Script Notes : + + Zone : Frostfang Sea + Quest Giver : Dolur Axebeard + Preceded by : Off to the Ossuary + Followed by : The Nightmare is Over +--]] + +function Init(Quest) + UpdateQuestZone(Quest, "Cave of Illboding Dark: The Source") + AddQuestRewardCoin(Quest, math.random(5,90), math.random(6,15), 0, 0) + AddQuestStepKill(Quest, 1, "I must kill Orug Deathmaker in the Cave of Illboding.", 1, 100, "I must return to the Cave of Illboding on the Ossuary of Ice, defeat the head necromancer, Orug Deathmaker, and shatter the dark crystal. The Ossuary is an island off the coast of Erollis, to the south of Ry'Gorr Isle.", 611, 5170003) + AddQuestStepCompleteAction(Quest, 1, "KilledOrc") +end + +function Accepted(Quest, QuestGiver, Player) + FaceTarget(QuestGiver, Player) + conversation = CreateConversation() + + PlayFlavor(QuestGiver, "dolur_axebeard/halas/great_shelf/dolur_axebeard/dolur_axebeard098.mp3", "", "", 2381129063, 239921883, Player) + AddConversationOption(conversation, "I will return.") + AddConversationOption(conversation, "The orcs will need the luck more than I will.") + StartConversation(conversation, QuestGiver, Player, "Best of luck to ye, " .. GetName(Player) .. ".") +end + +function Deleted(Quest, QuestGiver, Player) +end + +function Declined(Quest, QuestGiver, Player) +end + +function KilledOrc(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 1, "I have killed Orug Deathmaker.") + AddQuestStep(Quest, 2, "I must smash the dark crystal.", 1, 100, "I must return to the Cave of Illboding on the Ossuary of Ice, defeat the head necromancer, Orug Deathmaker, and shatter the dark crystal. The Ossuary is an island off the coast of Erollis, to the south of Ry'Gorr Isle.", 3528) + AddQuestStepCompleteAction(Quest, 2, "SmashedCrystal") +end + +function SmashedCrystal(Quest, QuestGiver, Player) + UpdateQuestZone(Quest, "Frostfang Sea") + UpdateQuestStepDescription(Quest, 2, "I have smashed the dark crystal.") + UpdateQuestTaskGroupDescription(Quest, 1, "I have killed Orug Deathmaker and shattered the dark crystal.") + AddQuestStepChat(Quest, 3, "I must speak with Dolur Axebeard.", 1, "I must speak with Dolur Axebeard, who can be found in the cave at the Great Shelf.", 0, 4700078) + AddQuestStepCompleteAction(Quest, 3, "CompleteQuest") +end + +function CompleteQuest(Quest, QuestGiver, Player) + GiveQuestReward(Quest, Player) +end + +function Reload(Quest, QuestGiver, Player, Step) + if Step == 1 then + KilledOrc(Quest, QuestGiver, Player) + elseif Step == 2 then + SmashedCrystal(Quest, QuestGiver, Player) + end +end \ No newline at end of file diff --git a/server/Quests/FrostfangSea/sifting_through_the_grizzly_garbage.lua b/server/Quests/FrostfangSea/sifting_through_the_grizzly_garbage.lua new file mode 100644 index 000000000..a73486a7f --- /dev/null +++ b/server/Quests/FrostfangSea/sifting_through_the_grizzly_garbage.lua @@ -0,0 +1,45 @@ +--[[ + Script Name : Quests/FrostfangSea/sifting_through_the_grizzly_garbage.lua + Script Purpose : the quest Sifting Through the Grizzly Garbage + Script Author : theFoof + Script Date : 2013.5.19 + + Zone : Frostfang Sea + Quest Giver : Verien Skysigh + Preceded by : Beets the Alternative + Followed by : +--]] + +function Accepted(Quest, QuestGiver, Player) +end + +function Declined(Quest, QuestGiver, Player) +end + +function Deleted(Quest, QuestGiver, Player) +end + +function Init(Quest) + AddQuestRewardCoin(Quest, math.random(10,80), math.random(2,5), 0, 0) + AddQuestStep(Quest, 1, "Search for any sign of the orcs within the blizzard grizzly den.", 3, 100, "Search for any sign of the orcs within the blizzard grizzly den north west of the pilgrims' camp in Gwenevyn's Cove.", 2359) + AddQuestStepCompleteAction(Quest, 1, "Searched") +end + +function Searched(Quest, QuestGiver, Player) + RemoveSpawnAccess(GetSpawn(QuestGiver, 4701834), Player) + UpdateQuestTaskGroupDescription(Quest, 1, "You found no sign of the orcs within the blizzard grizzly den.") + AddQuestStepChat(Quest, 2, "Return to Verien Skysigh at the pilgrims' camp. You told Verien how there was no sign of the orcs within the blizzard grizzly cave.", 1, "You should return to Verien Skysigh, at the pilgrims' camp within Gwenevyn's Cove, even though you haven't been able to find any sign of the orcs.", 0, 4700034) + AddQuestStepCompleteAction(Quest, 2, "CompleteQuest") +end + +function CompleteQuest(Quest, QuestGiver, Player) + GiveQuestReward(Quest, Player) +end + +function Reload(Quest, QuestGiver, Player, Step) + if Step == 1 then + Searched(Quest, QuestGiver, Player) + elseif Step == 2 then + CompleteQuest(Quest, QuestGiver, Player) + end +end \ No newline at end of file diff --git a/server/Quests/FrostfangSea/skulls_for_the_taking.lua b/server/Quests/FrostfangSea/skulls_for_the_taking.lua new file mode 100644 index 000000000..46f0c5d85 --- /dev/null +++ b/server/Quests/FrostfangSea/skulls_for_the_taking.lua @@ -0,0 +1,49 @@ +--[[ + Script Name : Quests/FrostfangSea/skulls_for_the_taking.lua + Script Purpose : the quest "Skulls for the Taking" + Script Author : theFoof + Script Date : 2013.6.14 + Script Notes : + + Zone : Frostfang Sea + Quest Giver : Hillfred Kinloch + Preceded by : Blood Spilled for the Blade Maiden + Followed by : Great Mystery +--]] + +function Init(Quest) + AddQuestRewardCoin(Quest, math.random(5,90), math.random(27,38), 0, 0) + AddQuestStepKill(Quest, 1, "Slay the Ry'Gorr orcs that are camped out on Jagged Daggers isle.", 8, 100, "Hillfred believes the orcs are staging their beachfront charge from the nearby isle known as Jagged Daggers.", 611, 4700120, 4700543, 4700119, 4700538, 4700542, 4700121, 4700118) + AddQuestStepCompleteAction(Quest, 1, "KilledOrcs") +end + +function Accepted(Quest, QuestGiver, Player) + FaceTarget(QuestGiver, Player) + conversation = CreateConversation() + + PlayFlavor(QuestGiver, "hillfred_kinloch/halas/cragged_spine/hillfred_kinloch_010.mp3", "", "", 1103422610, 3121183656, Player) + AddConversationOption(conversation, "This should be fun!") + StartConversation(conversation, QuestGiver, Player, "Swim over there and fall upon the beasts as if you were a rabid wolf of the Everfrost! Bring me back a great many skulls as trophies to adorn our defenses.") +end + +function Deleted(Quest, QuestGiver, Player) +end + +function Declined(Quest, QuestGiver, Player) +end + +function KilledOrcs(Quest, QuestGiver, Player) + UpdateQuestTaskGroupDescription(Quest, 1, "You have enough Ry'Gorr skulls to suffice.") + AddQuestStepChat(Quest, 2, "Return to Hillfred Kinloch now that you have enough Ry'Gorr skulls.", 1, "You should return to Hillfred Kinloch, at Cragged Spine, now that you have enough Ry'Gorr skulls.", 0, 4700115) + AddQuestStepCompleteAction(Quest, 2, "CompleteQuest") +end + +function CompleteQuest(Quest, QuestGiver, Player) + GiveQuestReward(Quest, Player) +end + +function Reload(Quest, QuestGiver, Player, Step) + if Step == 1 then + KilledOrcs(Quest, QuestGiver, Player) + end +end \ No newline at end of file diff --git a/server/Quests/FrostfangSea/sleetfoot_search_party.lua b/server/Quests/FrostfangSea/sleetfoot_search_party.lua new file mode 100644 index 000000000..1a8ebf5a8 --- /dev/null +++ b/server/Quests/FrostfangSea/sleetfoot_search_party.lua @@ -0,0 +1,49 @@ +--[[ + Script Name : Quests/FrostfangSea/sleetfoot_search_party.lua + Script Purpose : for the quest "Sleetfoot Search Party" + Script Author : theFoof + Script Date : 2013.6.13 + Script Notes : + + Zone : Frostfang Sea + Quest Giver : Thirin Veliumdelver + Preceded by : A Good Distraction + Followed by : Seeking Elemental Education +--]] + +function Init(Quest) + AddQuestRewardCoin(Quest, math.random(5,90), math.random(52,65), 0, 0) + AddQuestStepLocation(Quest, 1, "I need to search for Ordin Sleetfoot.", 5, "I should return to where I last saw Ordin Sleetfoot and make sure he is okay.", 0, -254.09, -17.42, -37.16) + AddQuestStepCompleteAction(Quest, 1, "FoundBody") +end + +function Accepted(Quest, QuestGiver, Player) + FaceTarget(QuestGiver, Player) + conversation = CreateConversation() + + PlayFlavor(QuestGiver, "thirin_veliumdelver/halas/cragged_spine/thirin_veliumdelver_cave014.mp3", "", "", 2567826241, 991797781, Player) + AddConversationOption(conversation, "We will. I will return shortly when I've found him.") + StartConversation(conversation, QuestGiver, Player, "Thank ye, my friend. Perhaps we will share an ale together with Ordin once this is all done.") +end + +function Deleted(Quest, QuestGiver, Player) +end + +function Declined(Quest, QuestGiver, Player) +end + +function FoundBody(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 1, "I have found Ordin Sleetfoot.") + UpdateQuestTaskGroupDescription(Quest, 1, "I have discovered Ordin Sleetfoot's body, near a large elemental creature made of ice and velium") + AddQuestStepChat(Quest, 2, "I should speak with Thirin Veliumdelver about Ordin.", 1, "I have discovered Ordin Sleetfoot's body, near what appears to be a creature made of ice and velium. I should return to Thirin Veliumdelver and tell him of Ordin's fate.", 0, 4700112) + AddQuestStepCompleteAction(Quest, 2, "CompleteQuest") +end + +function CompleteQuest(Quest, QuestGiver, Player) + GiveQuestReward(Quest, Player) +end +function Reload(Quest, QuestGiver, Player, Step) + if Step == 1 then + FoundBody(Quest, QuestGiver, Player) + end +end \ No newline at end of file diff --git a/server/Quests/FrostfangSea/sometimes_you_feel_like_a_knut.lua b/server/Quests/FrostfangSea/sometimes_you_feel_like_a_knut.lua new file mode 100644 index 000000000..17e6da1e6 --- /dev/null +++ b/server/Quests/FrostfangSea/sometimes_you_feel_like_a_knut.lua @@ -0,0 +1,67 @@ +--[[ + Script Name : Quests/FrostfangSea/sometimes_you_feel_like_a_knut.lua + Script Purpose : the quest "Sometimes You Feel Like A Knut" + Script Author : theFoof + Script Date : 2013.8.11 + Script Notes : + + Zone : Frostfang Sea + Quest Giver : Knut Orcbane + Preceded by : Flawless Core Chore + Followed by : None +--]] + +function Init(Quest) + AddQuestRewardCoin(Quest, math.random(1,99), math.random(27,40), 0, 0) + AddQuestStep(Quest, 1, "If you listen to Griz carefully, perhaps he can help guide you.", 1, 100, "While wearing Griz as your head equipment, explore the caves and tunnels within Demon's Delve.", 0) + AddQuestStepCompleteAction(Quest, 1, "GotBag") +end + +function Accepted(Quest, QuestGiver, Player) + SummonItem(Player, 157116) + FaceTarget(QuestGiver, Player) + conversation = CreateConversation() + + AddConversationOption(conversation, "Wonderful.") + StartConversation(conversation, NPC, Spawn, "You must wear him in order to hear him. Now, promise to bring him back -safe and sound. And do not be swayed by his bloodlust. He often forgets he no longer has claws.") +end + +function Deleted(Quest, QuestGiver, Player) +end + +function Declined(Quest, QuestGiver, Player) +end + +function GotBag(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 1, "You found the sack that once contained the magick item.") + AddQuestStep(Quest, 2, "Continue to explore the caves with Griz. If you listen to him carefully, perhaps he can help guide you.", 1, 100, "While wearing Griz as your head equipment, explore the caves and tunnels within Demon's Delve.", 0) + AddQuestStepCompleteAction(Quest, 2, "FoundTotem") +end + +function FoundTotem(Quest, QuestGiver, Player) + AddSpawnAccess(GetSpawnByLocationID(GetZone(Player), 579551), Player) + UpdateQuestStepDescription(Quest, 2, "Griz has helped you locate the source of the magick.") + AddQuestStep(Quest, 3, "Griz is rather insistent. You must destroy the magick item -it is a Ry'Gorr necromantic totem!", 1, 100, "While wearing Griz as your head equipment, explore the caves and tunnels within Demon's Delve.", 0) + AddQuestStepCompleteAction(Quest, 3, "DestroyedTotem") +end + +function DestroyedTotem(Quest, QuestGiver, Player) + UpdateQuestTaskGroupDescription(Quest, 1, "You destroyed the necromantic totem!") + AddQuestStepChat(Quest, 4, "Return to Knut Orcbane now that you have destroyed the necromantic crystal the orcs had within the Demon's Delve tunnels.", 1, "You should return to Knut Orcbane, at Cragged Spine, now that you have destroyed the necromantic crystal the orcs had within the Demon's Delve tunnels.", 0, 4700113) + AddQuestStepCompleteAction(Quest, 4, "CompleteQuest") +end + +function CompleteQuest(Quest, QuestGiver, Player) + UpdateQuestTaskGroupDescription(Quest, 2, "You told Knut how Griz helped you locate and destroy the Ry'Gorr necromantic crystal.") + GiveQuestReward(Quest, Player) +end + +function Reload(Quest, QuestGiver, Player, Step) + if Step == 1 then + GotBag(Quest, QuestGiver, Player) + elseif Step == 2 then + FoundTotem(Quest, QuestGiver, Player) + elseif Step == 3 then + DestroyedTotem(Quest, QuestGiver, Player) + end +end \ No newline at end of file diff --git a/server/Quests/FrostfangSea/spider_puffs.lua b/server/Quests/FrostfangSea/spider_puffs.lua new file mode 100644 index 000000000..701c12f7b --- /dev/null +++ b/server/Quests/FrostfangSea/spider_puffs.lua @@ -0,0 +1,78 @@ +--[[ + Script Name : Quests/FrostfangSea/spider_puffs.lua + Script Purpose : the quest "Spider Puffs" + Script Author : theFoof + Script Date : 2013.8.27 + Script Notes : + + Zone : Frostfang Sea + Quest Giver : Ribbit Hopson + Preceded by : None + Followed by : None +--]] + +function Init(Quest) + AddQuestRewardCoin(Quest, math.random(1,99), math.random(52,99), 0, 0) + AddQuestStep(Quest, 1, "I must collect dame's rockets for Ribbit's puffs.", 2, 100, "I must collect dame's rockets for Ribbit. I can find the dame's rockets in Ribbit's garden, outside of his house in New Halas.", 1976) + AddQuestStepCompleteAction(Quest, 1, "CollectedRockets") +end + +function Accepted(Quest, QuestGiver, Player) + FaceTarget(QuestGiver, Player) + conversation = CreateConversation() + + PlayFlavor(QuestGiver, "ribbit_hopson/halas/new_halas/ribbit_hopson/ribbit_hopson_007.mp3", "", "", 1643468307, 2055311986, Player) + AddConversationOption(conversation, "I shall return to you once I have collected all of the ingredients you require.") + StartConversation(conversation, QuestGiver, Player, "Wonderful! If you do not mind, could you pick some of my dame's rocket as well? It's just right outside my door in my little garden. The local spiders are called woolly silkspinners and they are in the cave leading to the Erollis Dock.") + ShowDamesRockets(QuestGiver, Player) +end + +function Deleted(Quest, QuestGiver, Player) +end + +function Declined(Quest, QuestGiver, Player) +end + +function CollectedRockets(Quest, QuestGiver, Player) + UpdateQuestTaskGroupDescription(Quest, 1, "I have collected the dame's rockets for Ribbit.") + AddQuestStepKill(Quest, 2, "I must kill woolly silkspinners for Ribbit's puffs.", 4, 100, "I must kill woolly silkspinners for Ribbit. The silkspinners are in the cave leading to the Erollis Dock.", 1878, 4700164) + AddQuestStepCompleteAction(Quest, 2, "KilledSpiders") +end + +function KilledSpiders(Quest, QuestGiver, Player) + UpdateQuestTaskGroupDescription(Quest, 2, "I have killed and collected the woolly silkspinner meat for Ribbit.") + AddQuestStepChat(Quest, 3, "I must speak with Ribbit Hopson at his New Halas home.", 1, "I must return the dame's rockets and spider meat to Ribbit Hopson. Ribbit is in his house near the entrance to New Halas.", 0, 4700151) + AddQuestStepCompleteAction(Quest, 3, "TalkedRibbit") +end + +function TalkedRibbit(Quest, QuestGiver, Player) + UpdateQuestTaskGroupDescription(Quest, 3, "I have given the ingredients to Ribbit.") + AddQuestStep(Quest, 4, "I must try some of Ribbit's spider puffs.", 1, 100, "Ribbit has taken the ingredients I collected and prepared his recipe for spider puffs.", 296) + AddQuestStepCompleteAction(Quest, 4, "CompleteQuest") +end + +function CompleteQuest(Quest, QuestGiver, Player) + GiveQuestReward(Quest, Player) +end + +function ShowDamesRockets(QuestGiver, Player) + local zone = GetZone(QuestGiver) + AddSpawnAccess(GetSpawnByLocationID(zone, 442806), Player) + AddSpawnAccess(GetSpawnByLocationID(zone, 442807), Player) + AddSpawnAccess(GetSpawnByLocationID(zone, 442808), Player) + AddSpawnAccess(GetSpawnByLocationID(zone, 442809), Player) + AddSpawnAccess(GetSpawnByLocationID(zone, 442810), Player) + AddSpawnAccess(GetSpawnByLocationID(zone, 442811), Player) + AddSpawnAccess(GetSpawnByLocationID(zone, 442812), Player) + AddSpawnAccess(GetSpawnByLocationID(zone, 442813), Player) +end + +function Reload(Quest, QuestGiver, Player, Step) + if Step == 1 then + CollectedRockets(Quest, QuestGiver, Player) + elseif Step == 2 then + KilledSpiders(Quest, QuestGiver, Player) + elseif Step == 3 then + TalkedRibbit(Quest, QuestGiver, Player) + end +end \ No newline at end of file diff --git a/server/Quests/FrostfangSea/stonefists_art_of_combat.lua b/server/Quests/FrostfangSea/stonefists_art_of_combat.lua new file mode 100644 index 000000000..affc54ca1 --- /dev/null +++ b/server/Quests/FrostfangSea/stonefists_art_of_combat.lua @@ -0,0 +1,60 @@ +--[[ + Script Name : Quests/FrostfangSea/stonefists_art_of_combat.lua + Script Purpose : Handles the quest "Stonefist's Art of Combat" + Script Author : theFoof + Script Date : 2013.5.3 + + Zone : Frostfang Sea + Quest Giver : Yasha Redblade + Preceded by : A Fine Halasian Welcome + Followed by : Call to Arms +--]] + +function Init(Quest) + AddQuestRewardCoin(Quest, math.random(10,80), math.random(1,3), 0, 0) + AddQuestStepChat(Quest, 1, "Speak to Trainer Ragnhild Stonefist.", 1, "I need to learn about combat from Trainer Ragnhild Stonefist at the Training Grounds east of Yasha Redblade.", 0, 4700015) + AddQuestStepCompleteAction(Quest, 1, "TalkedToStonefist") +end + +function Accepted(Quest, QuestGiver, Player) +end + +function Declined(Quest, QuestGiver, Player) +end + +function TalkedToStonefist(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 1, "I have spoken with Ragnhild Stonefist.") + AddQuestStepKill(Quest, 2, "Defeat a sparring partner in combat.", 1, 100, "I need to learn about combat from Trainer Ragnhild Stonefist at the Training Grounds east of Yasha Redblade.", 0, 4700018, 4700017, 4700014) + AddQuestStepCompleteAction(Quest, 2, "KilledSparringPartner") +end + +function KilledSparringPartner(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 2, "I have defeated a sparring partner in combat.") + AddQuestStepChat(Quest, 3, "Speak with Trainer Ragnhild Stonefist.", 1, "I need to learn about combat from Trainer Ragnhild Stonefist at the Training Grounds east of Yasha Redblade.", 0, 4700015) + AddQuestStepCompleteAction(Quest, 3, "ReturnedToStonefist") +end + +function ReturnedToStonefist(Quest, QuestGiver, Player) + UpdateQuestTaskGroupDescription(Quest, 1, "I have won a match against one of the sparring partners.") + AddQuestStepChat(Quest, 4, "Return to Yasha Redblade.", 1, "I am to return to Yasha Redblade near the ship's hull on Pilgrims' Landing.", 0, 4700005) + AddQuestStepCompleteAction(Quest, 4, "ReturnToYasha") +end + +function ReturnToYasha(Quest, QuestGiver, Player) + GiveQuestReward(Quest, Player) +end + + +function Reload(Quest, QuestGiver, Player, Step) + if Step == 1 then + TalkedToStonefist(Quest, QuestGiver, Player) + elseif Step == 2 then + KilledSparringPartner(Quest, QuestGiver, Player) + elseif Step == 3 then + ReturnedToStonefist(Quest, QuestGiver, Player) + elseif Step == 4 then + ReturnToYasha(Quest, QuestGiver, Player) + end +end + + diff --git a/server/Quests/FrostfangSea/tackling_the_basilisks.lua b/server/Quests/FrostfangSea/tackling_the_basilisks.lua new file mode 100644 index 000000000..c9fccccdd --- /dev/null +++ b/server/Quests/FrostfangSea/tackling_the_basilisks.lua @@ -0,0 +1,50 @@ +--[[ + Script Name : Quests/FrostfangSea/tackling_the_basilisks.lua + Script Purpose : for the quest "Tackling the Basilisks" + Script Author : theFoof + Script Date : 2013.5.31 + Script Notes : + + Zone : Frostfang Sea + Quest Giver : Belka Thunderheart + Preceded by : No Substitute for Shard Work + Followed by : Domestication is the New Survivalism +--]] + +function Init(Quest) + AddQuestRewardCoin(Quest, math.random(5,90), math.random(13,25), 0, 0) + AddQuestStepKill(Quest, 1, "I must kill several frostbiter basilisks.", 8, 100, "The basilisks can be found to the east of the Great Shelf, along the shoreline past the battlefield.", 611, 4700103) + AddQuestStepCompleteAction(Quest, 1, "KilledBasilisks") +end + +function Accepted(Quest, QuestGiver, Player) + FaceTarget(QuestGiver, Player) + conversation = CreateConversation() + + PlayFlavor(QuestGiver, "", "", "", 0, 0, Player) + AddConversationOption(conversation, "I appreciate the vote of confidence.") + AddConversationOption(conversation, "Of course they won't give me much trouble.") + StartConversation(conversation, QuestGiver, Player, "I don't imagine they'll give you much trouble, " .. GetName(Player) .. ". If I could say that about the rest of the outsiders that have washed up on Erollis, we'd be much better off. ") +end + +function Deleted(Quest, QuestGiver, Player) +end + +function Declined(Quest, QuestGiver, Player) +end + +function KilledBasilisks(Quest, QuestGiver, Player) + UpdateQuestTaskGroupDescription(Quest, 1, "I have killed several frostbiter basilisks") + AddQuestStepChat(Quest, 2, "I must speak with Belka Thunderheart.", 1, "I must speak with Belka Thunderheart, who can be found in the cave at the Great Shelf.", 0, 4700079) + AddQuestStepCompleteAction(Quest, 2, "CompleteQuest") +end + +function CompleteQuest(Quest, QuestGiver, Player) + GiveQuestReward(Quest, Player) +end + +function Reload(Quest, QuestGiver, Player, Step) + if Step == 1 then + KilledBasilisks(Quest, QuestGiver, Player) + end +end \ No newline at end of file diff --git a/server/Quests/FrostfangSea/the_absent_effigy.lua b/server/Quests/FrostfangSea/the_absent_effigy.lua new file mode 100644 index 000000000..77ed5b6a6 --- /dev/null +++ b/server/Quests/FrostfangSea/the_absent_effigy.lua @@ -0,0 +1,49 @@ +--[[ + Script Name : Quests/FrostfangSea/the_absent_effigy.lua + Script Purpose : Handles the quest "The Absent Effigy" + Script Author : theFoof + Script Date : 2013.5.5 + + Zone : Frostfang Sea + Quest Giver : Flibbit Quagmarr + Preceded by : Little Lost Froglok + Followed by : Bartering Crystals +--]] + +function Accepted(Quest, QuestGiver, Player) + FaceTarget(QuestGiver, Player) + conversation = CreateConversation() + + PlayFlavor(QuestGiver, "flibbit_quagmarr/halas/gwenevyns_cove/flibbit_quagmarr/flibbit_quagmarr_037.mp3", "", "", 727383716, 4227868188, Player) + AddConversationOption(conversation, "I will look for Splorpy's Effigy of Mithaniel and return to you if I find it.") + StartConversation(conversation, QuestGiver, Player, "I think it might have been picked up in the eddy of a frigid whirlstorm. I fear it is long gone by now, but if you happen to come across it in your travels, Splorpy and I would be grateful for its return.") +end + +function Declined(Quest, QuestGiver, Player) +end + +function Deleted(Quest, QuestGiver, Player) +end + +function Init(Quest) + AddQuestRewardCoin(Quest, math.random(10,80), math.random(6,15), 0, 0) + AddQuestPrereqQuest(Quest, LostFroglok) -- change quest step to obtain item 'an Effigy of Mithaniel' drop from frigid whirlstorms/ The Deadly Icewind + AddQuestStepKill(Quest, 1, "I must kill frigid whirlstorms to find Splorpy's Effigy of Mithaniel.", 1, 75, "I should kill frigid whirlstorms around Gwenevyn's Cove to find Splorpy's Effigy of Mithaniel.", 1059, 4700054, 4700069) + AddQuestStepCompleteAction(Quest, 1, "GotEffigy") +end + +function GotEffigy(Quest, QuestGiver, Player) + UpdateQuestTaskGroupDescription(Quest, 1, "I have found Splorpy's Effigy of Mithaniel.") + AddQuestStepChat(Quest, 2, "I must speak with Flibbit Quagmarr. Flibbit is staying in Gwenevyn's Cove.", 1, "I should return Splorpy's Effigy of Mithaniel to his father Flibbit Quagmarr in Gwenevyn's Cove.", 0, 4700045) + AddQuestStepCompleteAction(Quest, 2, "CompleteQuest") +end + +function CompleteQuest(Quest, QuestGiver, Player) + GiveQuestReward(Quest, Player) +end + +function Reload(Quest, QuestGiver, Player, Step) + if Step == 1 then + GotEffigy(Quest, QuestGiver, Player) + end +end \ No newline at end of file diff --git a/server/Quests/FrostfangSea/the_charge.lua b/server/Quests/FrostfangSea/the_charge.lua new file mode 100644 index 000000000..831745b23 --- /dev/null +++ b/server/Quests/FrostfangSea/the_charge.lua @@ -0,0 +1,81 @@ +--[[ + Script Name : Quests/FrostfangSea/the_charge.lua + Script Purpose : the quest The Charge + Script Author : theFoof + Script Date : 2013.6.5 + + Zone : Frostfang Sea + Quest Giver : Battlepriest Herga + Preceded by : Loosening Their Grip + Followed by : The Siege is Not Over +--]] + +function Init(Quest) + AddQuestRewardCoin(Quest, math.random(5,90), math.random(6,15), 0, 0) + AddQuestStepKill(Quest, 1, "I must kill several Ry'Gorr bushwhackers.", 3, 100, "I must kill several Ry'Gorr orcs on Ry'Gorr Isle. The isle is to the west, off the coast of Erollis.", 611, 4701123) + AddQuestStepKill(Quest, 2, "I must kill several Ry'Gorr zealots.", 2, 100, "I must kill several Ry'Gorr orcs on Ry'Gorr Isle. The isle is to the west, off the coast of Erollis.", 611, 4701125, 4700875) + AddQuestStepKill(Quest, 3, "I must kill several Ry'Gorr marauders.", 3, 100, "I must kill several Ry'Gorr orcs on Ry'Gorr Isle. The isle is to the west, off the coast of Erollis.", 611, 4700874, 47001124) + AddQuestStepCompleteAction(Quest, 1, "KilledBush") + AddQuestStepCompleteAction(Quest, 2, "KilledZeal") + AddQuestStepCompleteAction(Quest, 3, "KilledMaur") +end + +function Accepted(Quest, QuestGiver, Player) + FaceTarget(QuestGiver, Player) + conversation = CreateConversation() + + PlayFlavor(QuestGiver, "battlepriest_herga/halas/great_shelf/battlepriest_herga/battlepriest_herga018.mp3", "", "", 1084322054, 1642797259, Player) + AddConversationOption(conversation, "I will kill the orcs in your honor.") + AddConversationOption(conversation, "Consider them done for.") + AddConversationOption(conversation, "The battle is over as far as I'm concerned. Goodbye.") + StartConversation(conversation, QuestGiver, Player, "Clinging. Clinging to life. The orcs cling to their foothold on the floating rock, south of Erollis. Take the fight to them.") +end + +function Deleted(Quest, QuestGiver, Player) +end + +function Declined(Quest, QuestGiver, Player) +end + +function KilledBush(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 1, "I have killed several Ry'Gorr bushwhackers.") + CheckProgress(Quest, QuestGiver, Player) +end + +function KilledZeal(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 2, "I have killed several Ry'Gorr zealots.") + CheckProgress(Quest, QuestGiver, Player) +end + +function KilledMaur(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 3, "I have killed several Ry'Gorr marauders.") + CheckProgress(Quest, QuestGiver, Player) +end + +function CheckProgress(Quest, QuestGiver, Player) + if QuestStepIsComplete(Player, 52, 1) and QuestStepIsComplete(Player, 52, 2) and QuestStepIsComplete(Player, 52, 3) then + AddStep4(Quest, QuestGiver, Player) + end +end + +function AddStep4(Quest, QuestGiver, Player) + UpdateQuestTaskGroupDescription(Quest, 1, "I have killed several Ry'Gorr orcs on Ry'Gorr Isle.") + AddQuestStepChat(Quest, 4, "I must speak with Battlepriest Herga.", 1, "I must speak with Battlepriest Herga, who can be found on the battlefield at the Great Shelf.", 0, 4700100) + AddQuestStepCompleteAction(Quest, 4, "CompleteQuest") +end + +function CompleteQuest(Quest, QuestGiver, Player) + GiveQuestReward(Quest, Player) +end + +function Reload(Quest, QuestGiver, Player, Step) + if QuestStepIsComplete(Player, 52, 1) then + KilledBush(Quest, QuestGiver, Player) + end + if QuestStepIsComplete(Player, 52, 2) then + KilledZeal(Quest, QuestGiver, Player) + end + if QuestStepIsComplete(Player, 52, 3) then + KilledMaur(Quest, QuestGiver, Player) + end +end \ No newline at end of file diff --git a/server/Quests/FrostfangSea/the_demand_for_supplies.lua b/server/Quests/FrostfangSea/the_demand_for_supplies.lua new file mode 100644 index 000000000..bb362c4c6 --- /dev/null +++ b/server/Quests/FrostfangSea/the_demand_for_supplies.lua @@ -0,0 +1,72 @@ +--[[ + Script Name : Quests/FrostfangSea/the_demand_for_supplies.lua + Script Purpose : for the quest "The Demand for Supplies" + Script Author : theFoof + Script Date : 2013.6.1 + Script Notes : + + Zone : Frostfang Sea + Quest Giver : Rakan RockBreaker + Preceded by : None + Followed by : Foiling the Flank +--]] + +function Init(Quest) + AddQuestRewardCoin(Quest, math.random(5,90), math.random(13,25), 0, 0) + AddQuestStepChat(Quest, 1, "I must deliver the supplies to Orica Deadshot.", 1, "I must deliver the supplies to Orica Deadshot and Battlemaster Golben. They can be found near the peak of Herga's Choke, facing off against a horde of Ry'Gorr.", 398, 4701112) + AddQuestStepChat(Quest, 2, "I must deliver the supplies to Battlemaster Golben.", 1, "I must deliver the supplies to Orica Deadshot and Battlemaster Golben. They can be found near the peak of Herga's Choke, facing off against a horde of Ry'Gorr.", 398, 4700098) + AddQuestStepCompleteAction(Quest, 1, "DeliveredOrica") + AddQuestStepCompleteAction(Quest, 2, "DeliveredGolben") +end + +function Accepted(Quest, QuestGiver, Player) + FaceTarget(QuestGiver, Player) + conversation = CreateConversation() + + PlayFlavor(QuestGiver, "rakan_rockbreaker/halas/great_shelf/rakan_rockbreaker/rakan_rockbreaker005.mp3", "", "", 2645967514, 1229482070, Player) + AddConversationOption(conversation, "Don't worry.") + AddConversationOption(conversation, "I'll be right back!") + StartConversation(conversation, QuestGiver, Player, "Please do, " .. GetName(Player) .. ", and hurry!") +end + +function Deleted(Quest, QuestGiver, Player) +end + +function Declined(Quest, QuestGiver, Player) +end + + +function DeliveredOrica(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 1, "I have delivered the supplies to Orica Deadshot.") + CheckProgress(Quest, QuestGiver, Player) +end + +function DeliveredGolben(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 2, "I have delivered the supplies to Battlemaster Golben.") + CheckProgress(Quest, QuestGiver, Player) +end + +function CheckProgress(Quest, QuestGiver, Player) + if QuestStepIsComplete(Player, 45, 1) and QuestStepIsComplete(Player, 45, 2) then + AddStep3(Quest, QuestGiver, Player) + end +end + +function AddStep3(Quest, QuestGiver, Player) + UpdateQuestTaskGroupDescription(Quest, 1, "I have delivered the supplies to Orica Deadshot and Battlemaster Golben.") + AddQuestStepChat(Quest, 3, "I must speak to Rakan Rockbreaker.", 1, "I must speak to Rakan Rockbreaker, who can be found in the cave at the Great Shelf.", 0, 4700082) + AddQuestStepCompleteAction(Quest, 3, "CompleteQuest") +end + +function CompleteQuest(Quest, QuestGiver, Player) + GiveQuestReward(Quest, Player) +end + +function Reload(Quest, QuestGiver, Player, Step) + if Step == 1 then + DeliveredOrica(Quest, QuestGiver, Player) + end + if Step == 2 then + DeliveredGolben(Quest, QuestGiver, Player) + end +end \ No newline at end of file diff --git a/server/Quests/FrostfangSea/the_gauntlet.lua b/server/Quests/FrostfangSea/the_gauntlet.lua new file mode 100644 index 000000000..95f71bbe3 --- /dev/null +++ b/server/Quests/FrostfangSea/the_gauntlet.lua @@ -0,0 +1,51 @@ +--[[ + Script Name : Quests/FrostfangSea/the_gauntlet.lua + Script Purpose : for the quest "The Gauntlet" + Script Author : theFoof + Script Date : 2013.5.29 + Script Notes : + + Zone : Frostfang Sea + Quest Giver : Dolur Axebeard + Preceded by : Calling Them Back + Followed by : Off to the Ossuary +--]] + +function Init(Quest) + AddQuestRewardCoin(Quest, math.random(10,80), math.random(6,15), 0, 0) + AddQuestStep(Quest, 1, "I must smash several piles of Ry'Gorr bones.", 5, 100, "I must smash several piles of Ry'Gorr bones. These piles of bones litter the battlefield at the Great Shelf.", 90) + AddQuestStepCompleteAction(Quest, 1, "SmashedBones") +end + +function Accepted(Quest, QuestGiver, Player) + FaceTarget(QuestGiver, Player) + conversation = CreateConversation() + + PlayFlavor(QuestGiver, "dolur_axebeard/halas/great_shelf/dolur_axebeard/dolur_axebeard069.mp3", "", "", 269705072, 2630405776, Player) + AddConversationOption(conversation, "Of course.") + AddConversationOption(conversation, "I will return post-haste.") + AddConversationOption(conversation, "Consider them dust.") + StartConversation(conversation, QuestGiver, Player, "My patience for these shuffling skeletons is running out. Best we destroy them at the source, and quickly. Wend your way through the forces of the Ry'Gorr orcs, running the gauntlet, or so to speak. Then grind these bones into dust.") +end + +function Deleted(Quest, QuestGiver, Player) +end + +function Declined(Quest, QuestGiver, Player) +end + +function SmashedBones(Quest, QuestGiver, Player) + UpdateQuestTaskGroupDescription(Quest, 1, "I attempted to smash the piles of Ry'Gorr bones, but they reformed into skeletons and attacked me!") + AddQuestStepChat(Quest, 2, "I must speak with Dolur Axebeard.", 1, "I must speak with Dolur Axebeard, who can be found in the cave at the Great Shelf.", 0, 4700078) + AddQuestStepCompleteAction(Quest, 2, "CompleteQuest") +end + +function CompleteQuest(Quest, QuestGiver, Player) + GiveQuestReward(Quest, Player) +end + +function Reload(Quest, QuestGiver, Player, Step) + if Step == 1 then + SmashedBones(Quest, QuestGiver, Player) + end +end \ No newline at end of file diff --git a/server/Quests/FrostfangSea/the_glimmer_orc.lua b/server/Quests/FrostfangSea/the_glimmer_orc.lua new file mode 100644 index 000000000..a326664a0 --- /dev/null +++ b/server/Quests/FrostfangSea/the_glimmer_orc.lua @@ -0,0 +1,49 @@ +--[[ + Script Name : Quests/FrostfangSea/the_glimmer_orc.lua + Script Purpose : the quest The Glimmer Orc + Script Author : theFoof + Script Date : 2013.5.26 + + Zone : Frostfang Sea + Quest Giver : Dolur Axebeard + Preceded by : None + Followed by : A Murky Miasma of a Mystery +--]] + +function Accepted(Quest, QuestGiver, Player) + FaceTarget(QuestGiver, Player) + conversation = CreateConversation() + + PlayFlavor(QuestGiver, "dolur_axebeard/halas/great_shelf/dolur_axebeard/dolur_axebeard012.mp3", "", "", 2959588390, 53288716, Player) + AddConversationOption(conversation, "I will be back shortly.") + AddConversationOption(conversation, "Any orc that ambushes me will be sorry.") + StartConversation(conversation, QuestGiver, Player, "The snowflurries tend to wander around the icy cliffs just outside our hideaway. Ye can't miss 'em. Brell guide ye, " .. GetName(Player) .. ".") +end + +function Declined(Quest, QuestGiver, Player) +end + +function Deleted(Quest, QuestGiver, Player) +end + +function Init(Quest) + AddQuestStepKill(Quest, 1, "I must collect several glimmer powders from luminous snowflurries.", 8, 90, "I must collect several glimmer powders from luminous snowflurries. The snowflurries tend to wander just outside the cave, at the Great Shelf, or on Pride Overlook.", 3479, 4700064) + AddQuestStepCompleteAction(Quest, 1, "GotPowder") + AddQuestRewardCoin(Quest, math.random(23,80), math.random(13,22), 0, 0) +end + +function GotPowder(Quest, QuestGiver, Player) + UpdateQuestTaskGroupDescription(Quest, 1, "I have collected several glimmer powders.") + AddQuestStepChat(Quest, 2, "I must speak with Dolur Axebeard.", 1, "I must speak with Dolur Axebeard, who can be found in the cave at the Great Shelf.", 0, 4700078) + AddQuestStepCompleteAction(Quest, 2, "CompleteQuest") +end + +function CompleteQuest(Quest, QuestGiver, Player) + GiveQuestReward(Quest, Player) +end + +function Reload(Quest, QuestGiver, Player, Step) + if Step == 1 then + GotPowder(Quest, QuestGiver, Player) + end +end \ No newline at end of file diff --git a/server/Quests/FrostfangSea/the_icemanes_cometh.lua b/server/Quests/FrostfangSea/the_icemanes_cometh.lua new file mode 100644 index 000000000..2f04c46b1 --- /dev/null +++ b/server/Quests/FrostfangSea/the_icemanes_cometh.lua @@ -0,0 +1,57 @@ +--[[ + Script Name : Quests/FrostfangSea/the_icemanes_cometh.lua + Script Purpose : the quest The Icemanes Cometh + Script Author : theFoof + Script Date : 2013.5.20 + + Zone : Frostfang Sea + Quest Giver : Verien Skysigh + Preceded by : Pilgrim Pelts + Followed by : None +--]] + +function Accepted(Quest, QuestGiver, Player) + if HasItem(Player, 46664) == false then + SummonItem(Player, 46664, 1) + end + FaceTarget(QuestGiver, Player) + conversation = CreateConversation() + + PlayFlavor(QuestGiver, "verien_skysigh/halas/gwenevyns_cove/verien_skysigh_030.mp3", "", "", 2735698585, 1703243228, Player) + AddConversationOption(conversation, "I understand.") + StartConversation(conversation, QuestGiver, Player, "Be sure to escort them back here. Then tether them to the icemane post nearby. That is our only hope in dealing with them.") +end + +function Declined(Quest, QuestGiver, Player) +end + +function Deleted(Quest, QuestGiver, Player) + SetTempVariable(Player, "cub1", nil) + SetTempVariable(Player, "cub2", nil) + SetTempVariable(Player, "cub3", nil) + SetTempVariable(Player, "cub4", nil) +end + +function Init(Quest) + AddQuestRewardCoin(Quest, math.random(1,80), math.random(6,12), 0, 0) + AddQuestStep(Quest, 1, "Use the binding tether on icemane cubs upon the Icemane Plains, then bring them back to the lion post near Verien Skysigh at the pilgrims' camp within Gwenevyn's Cove.", 4, 100, "Verien believes the grizzlies will avoid attacking any pilgrim who is being escorted by icemane cubs. He has tasked you with leashing some and bringing them back to the camp using the binding tether he provided you.", 2329) + AddQuestStepCompleteAction(Quest, 1, "GotCubs") +end + +function GotCubs(Quest, QuestGiver, Player) + UpdateQuestTaskGroupDescription(Quest, 1, "You brought back enough tethered icemane cubs.") + AddQuestStepChat(Quest, 2, "Return to Verien Skysigh now that you have presented him with enough tethered icemane cubs.", 1, "You should return to Verien Skysigh, at the pilgrims' camp within Gwenevyn's Cove, now that you have presented him with enough tethered icemane cubs.", 0, 4700034) + AddQuestStepCompleteAction(Quest, 2, "CompleteQuest") +end + +function CompleteQuest(Quest, QuestGiver, Player) + GiveQuestReward(Quest, Player) +end + +function Reload(Quest, QuestGiver, Player, Step) + if Step == 1 then + GotCubs(Quest, QuestGiver, Player) + elseif Step == 2 then + CompleteQuest(Quest, QuestGiver, Player) + end +end \ No newline at end of file diff --git a/server/Quests/FrostfangSea/the_last_ingredient.lua b/server/Quests/FrostfangSea/the_last_ingredient.lua new file mode 100644 index 000000000..7fc68da05 --- /dev/null +++ b/server/Quests/FrostfangSea/the_last_ingredient.lua @@ -0,0 +1,49 @@ +--[[ + Script Name : Quests/FrostfangSea/the_last_ingredient.lua + Script Purpose : the quest The Last Ingredient + Script Author : theFoof + Script Date : 2013.6.3 + + Zone : Frostfang Sea + Quest Giver : Blorpisa Bogchild + Preceded by : Perfectly Missing + Followed by : None +--]] + +function Init(Quest) + AddQuestRewardCoin(Quest, math.random(5,90), math.random(6,15), 0, 0) + AddQuestStepKill(Quest, 1, "I must harvest an aged ice slurry core.", 1, 50, "I must harvest a core from the aged ice slurries on the hill south of the Great Shelf.", 2944, 4700102) + AddQuestStepCompleteAction(Quest, 1, "GotCore") +end + +function Accepted(Quest, QuestGiver, Player) + FaceTarget(QuestGiver, Player) + conversation = CreateConversation() + + PlayFlavor(QuestGiver, "blorpisa_bogchild/halas/great_shelf/blorpisa_bogchild/blorpisa_bogchild_038.mp3", "", "", 2165797862, 1375729873, Player) + AddConversationOption(conversation, "I shall return with an aged ice slurry core.") + StartConversation(conversation, QuestGiver, Player, "The aged ice slurries are in the same place as the others. They gather on the hill south of the Great Shelf.") +end + +function Deleted(Quest, QuestGiver, Player) +end + +function Declined(Quest, QuestGiver, Player) +end + +function GotCore(Quest, QuestGiver, Player) + UpdateQuestTaskGroupDescription(Quest, 1, "I have harvested a core from the aged ice slurries.") + AddQuestStepChat(Quest, 2, "I must speak with Blorpisa Bogchild at the Great Shelf.", 1, "I must return the aged ice slurry core to Blorpisa Bogchild in the Great Shelf.", 0, 4700039) + AddQuestStepCompleteAction(Quest, 2, "CompleteQuest") +end + +function CompleteQuest(Quest, QuestGiver, Player) + UpdateQuestTaskGroupDescription(Quest, 2, "Blorpisa thanked me for harvesting the aged ice slurry core.") + GiveQuestReward(Quest, Player) +end + +function Reload(Quest, QuestGiver, Player, Step) + if Step == 1 then + GotCore(Quest, QuestGiver, Player) + end +end \ No newline at end of file diff --git a/server/Quests/FrostfangSea/the_nightmare_is_over.lua b/server/Quests/FrostfangSea/the_nightmare_is_over.lua new file mode 100644 index 000000000..f672e3d14 --- /dev/null +++ b/server/Quests/FrostfangSea/the_nightmare_is_over.lua @@ -0,0 +1,40 @@ +--[[ + Script Name : Quests/FrostfangSea/the_nightmare_is_over.lua + Script Purpose : the quest "The Nightmare is Over" + Script Author : theFoof + Script Date : 2013.6.19 + Script Notes : + + Zone : Frostfang Sea + Quest Giver : Dolur Axebeard + Preceded by : Severing the Head + Followed by : None +--]] + +function Init(Quest) + AddQuestRewardCoin(Quest, math.random(5,90), math.random(9,22), 0, 0) + AddQuestStepChat(Quest, 1, "I must report to Tad Ironstein at the Cragged Spine.", 1, "I must report to Tad Ironstein at the Cragged Spine outpost. The Cragged Spine is south of the Great Shelf, past the frostbiter basilisks.", 0, 4700106) + AddQuestStepCompleteAction(Quest, 1, "CompleteQuest") +end + +function Accepted(Quest, QuestGiver, Player) + FaceTarget(QuestGiver, Player) + conversation = CreateConversation() + + AddConversationOption(conversation, "I look forward to meeting them.") + AddConversationOption(conversation, "Perhaps they will be a bit more organized.") + StartConversation(conversation, QuestGiver, Player, "Thank ye for sticking with us through the worst of it, " .. GetName(Spawn) .. ". Yer no fair weather friend. I'll say taht about ye. I've sent word to Cragged Spine that yer coming and put in a good word or two. They should welcome ye right away. Ye'll find it far to the south of here, past the battlefield and the basilisks.") +end + +function Deleted(Quest, QuestGiver, Player) +end + +function Declined(Quest, QuestGiver, Player) +end + +function CompleteQuest(Quest, QuestGiver, Player) + GiveQuestReward(Quest, Player) +end + +function Reload(Quest, QuestGiver, Player, Step) +end \ No newline at end of file diff --git a/server/Quests/FrostfangSea/the_siege_is_not_over.lua b/server/Quests/FrostfangSea/the_siege_is_not_over.lua new file mode 100644 index 000000000..485b30738 --- /dev/null +++ b/server/Quests/FrostfangSea/the_siege_is_not_over.lua @@ -0,0 +1,49 @@ +--[[ + Script Name : Quests/FrostfangSea/the_siege_is_not_over.lua + Script Purpose : the quest The Siege is Not Over + Script Author : theFoof + Script Date : 2013.6.5 + + Zone : Frostfang Sea + Quest Giver : Battlepriest Herga + Preceded by : The Charge + Followed by : Forsaking the Grave +--]] + +function Init(Quest) + AddQuestRewardCoin(Quest, math.random(5,90), math.random(13,25), 0, 0) + AddQuestStep(Quest, 1, "I must sabotage the ballistae on Ry'Gorr Isle.", 6, 100, "I must sabotage the ballistae on Ry'Gorr Isle.", 2361) + AddQuestStepCompleteAction(Quest, 1, "SabotagedBallistae") +end + +function Accepted(Quest, QuestGiver, Player) + FaceTarget(QuestGiver, Player) + conversation = CreateConversation() + + PlayFlavor(QuestGiver, "battlepriest_herga/halas/great_shelf/battlepriest_herga/battlepriest_herga029.mp3", "", "", 3545707783, 4113839123, Player) + AddConversationOption(conversation, "It shouldn't be a problem.") + AddConversationOption(conversation, "Brell have mercy on them, because I certainly won't.") + StartConversation(conversation, QuestGiver, Player, "The orcs are nothing if not tenacious. They have crafted these devastating devices from driftwood and sea-rusted steel. ") +end + +function Deleted(Quest, QuestGiver, Player) +end + +function Declined(Quest, QuestGiver, Player) +end + +function SabotagedBallistae(Quest, QuestGiver, Player) + UpdateQuestTaskGroupDescription(Quest, 1, "I have sabotaged the ballistae.") + AddQuestStepChat(Quest, 2, "I must speak with Battlepriest Herga.", 1, "I must speak with Battlepriest Herga, who can be found on the battlefield at the Great Shelf.", 0, 4700100) + AddQuestStepCompleteAction(Quest, 2, "CompleteQuest") +end + +function CompleteQuest(Quest, QuestGiver, Player) + GiveQuestReward(Quest, Player) +end + +function Reload(Quest, QuestGiver, Player, Step) + if Step == 1 then + SabotagedBallistae(Quest, QuestGiver, Player) + end +end \ No newline at end of file diff --git a/server/Quests/FrostfangSea/through_thine_eyes.lua b/server/Quests/FrostfangSea/through_thine_eyes.lua new file mode 100644 index 000000000..6adcfcf60 --- /dev/null +++ b/server/Quests/FrostfangSea/through_thine_eyes.lua @@ -0,0 +1,54 @@ +--[[ + Script Name : Quests/FrostfangSea/through_thine_eyes.lua + Script Purpose : for the quest Through Thine Eyes + Script Author : theFoof + Script Date : 2013.6.10 + Script Notes : + + Zone : Frostfang Sea + Quest Giver : Thirin Veliumdelver + Preceded by : Roughing Up the Reinforcements + Followed by : Below The Frozen Waves +--]] + +function Init(Quest) + AddQuestRewardCoin(Quest, math.random(5,90), math.random(12,24), 0, 0) + AddQuestStep(Quest, 1, "I need to use the Ry'Gorr Scrying Eye on a " .. '"lazy Ry' .. "'" .. 'Gorr orc."', 1, 100, "I need to travel to the iceberg, east of the Jagged Daggers Isle, and use the Ry'Gorr Scrying Eye on an unsuspecting orc.", 0) + AddQuestStepCompleteAction(Quest, 1, "UsedEye") +end + +function Accepted(Quest, QuestGiver, Player) + local thirin = GetSpawnByLocationID(GetZone(QuestGiver), 14520) + FaceTarget(QuestGiver, Player) + conversation = CreateConversation() + + PlayFlavor(thirin, "thirin_veliumdelver/halas/thirin_veliumdelver/thirin_veliumdelver016.mp3", "", "", 2746219212, 3926805260, Player) + AddConversationOption(conversation, "I'll let you know what I learn.") + StartConversation(conversation, thirin, Player, "Your value grows, adventurer. You won't be able to use this in the middle of their camp, but I have heard reports say there are a few Ry'gorr on the iceberg to the east of the Jagged Daggers Isle. See what you find there, perhaps an opportunity to use the eye will present itself.") +end + +function Deleted(Quest, QuestGiver, Player) +end + +function Declined(Quest, QuestGiver, Player) +end + +function UsedEye(Quest, QuestGiver, Player) -- add cutscene here when we have the ability + if HasItem(Player, 11820) then + RemoveItem(Player, 11820) + end + UpdateQuestStepDescription(Quest, 1, "I have used the Ry'Gorr Scrying Eye on " .. '"' .. "a lazy Ry'Gorr orc." .. '"') + UpdateQuestTaskGroupDescription(Quest, 1, "I was able to use the scrying eye on a lazy Ry'Gorr Orc and see through his eyes.") + AddQuestStepChat(Quest, 2, "I should speak with Thirin Veliumdelver about the underwater tunnel.", 1, "It appears there is an underwater tunnel that leads underneath Erollis. I should inform Thirin Veliumdelver right away.", 0, 4700112) + AddQuestStepCompleteAction(Quest, 2, "CompleteQuest") +end + +function CompleteQuest(Quest, QuestGiver, Player) + GiveQuestReward(Quest, Player) +end + +function Reload(Quest, QuestGiver, Player, Step) + if Step == 1 then + UsedEye(Quest, QuestGiver, Player) + end +end \ No newline at end of file diff --git a/server/Quests/FrostfangSea/tis_most_unnatural.lua b/server/Quests/FrostfangSea/tis_most_unnatural.lua new file mode 100644 index 000000000..44134d387 --- /dev/null +++ b/server/Quests/FrostfangSea/tis_most_unnatural.lua @@ -0,0 +1,50 @@ +--[[ + Script Name : Quests/FrostfangSea/tis_most_unnatural.lua + Script Purpose : for the quest "'Tis Most Unnatural" + Script Author : theFoof + Script Date : 2013.5.31 + Script Notes : + + Zone : Frostfang Sea + Quest Giver : Belka Thunderheart + Preceded by : Reclaiming Their Honor + Followed by : Pouring One Out for My Skellies +--]] + +function Init(Quest) + AddQuestRewardCoin(Quest, math.random(5,80), math.random(6,15), 0, 0) + AddQuestStepKill(Quest, 1, "I must kill several risen Ry'Gorr skeletons.", 8, 100, "I must kill several risen Ry'Gorr skeletons. These skeletons can be found on the battlefield of the Great Shelf.", 611, 4700087, 4700872) + AddQuestStepCompleteAction(Quest, 1, "KilledOrcs") +end + +function Accepted(Quest, QuestGiver, Player) + FaceTarget(QuestGiver, Player) + conversation = CreateConversation() + + PlayFlavor(QuestGiver, "", "", "", 0, 0, Player) + AddConversationOption(conversation, "I will return.") + AddConversationOption(conversation, "Brell be with you, as well.") + StartConversation(conversation, QuestGiver, Player, "Brell be with ye.") +end + +function Deleted(Quest, QuestGiver, Player) +end + +function Declined(Quest, QuestGiver, Player) +end + +function KilledOrcs(Quest, QuestGiver, Player) + UpdateQuestTaskGroupDescription(Quest, 1, "I have killed several risen Ry'Gorr skeletons.") + AddQuestStepChat(Quest, 2, "I must speak with Belka Thunderheart.", 1, "I must speak with Belka Thunderheart, who can be found in the cave at the Great Shelf.", 0, 4700079) + AddQuestStepCompleteAction(Quest, 2, "CompleteQuest") +end + +function CompleteQuest(Quest, QuestGiver, Player) + GiveQuestReward(Quest, Player) +end + +function Reload(Quest, QuestGiver, Player, Step) + if Step == 1 then + KilledOrcs(Quest, QuestGiver, Player) + end +end \ No newline at end of file diff --git a/server/Quests/FrostfangSea/to_the_great_shelf.lua b/server/Quests/FrostfangSea/to_the_great_shelf.lua new file mode 100644 index 000000000..1f1c06f42 --- /dev/null +++ b/server/Quests/FrostfangSea/to_the_great_shelf.lua @@ -0,0 +1,52 @@ +--[[ + Script Name : SpawnScripts/FrostfangSea/to_the_great_shelf.lua + Script Purpose : for the quest "To the Great Shelf!" + Script Author : theFoof + Script Date : 2013.5.30 + Script Notes : + + Zone : Frostfang Sea + Quest Giver : Flibbit Quagmarr + Preceded by : Pelted + Followed by : None +--]] +require"SpawnScripts/FrostfangSea/FlibbitQuagmarr" + +function Init(Quest) + AddQuestRewardCoin(Quest, math.random(8,80), math.random(13,25), 0, 0) + AddQuestStep(Quest, 1, "I must make sure Splorpy is ready to leave.", 1, 100, "I must speak with Splorpy at Gwenevyn's Cove and make sure he is ready to go.", 0) + AddQuestStepCompleteAction(Quest, 1, "GotSplorpy") +end + +function Accepted(Quest, QuestGiver, Player) + FaceTarget(QuestGiver, Player) + conversation = CreateConversation() + + PlayFlavor(QuestGiver, "flibbit_quagmarr/halas/gwenevyns_cove/flibbit_quagmarr/flibbit_quagmarr_059.mp3", "", "", 1062705629, 386941071, Player) + AddConversationOption(conversation, "I'm ready. Is Splorpy ready to go?", "Quest6Chat_6") + StartConversation(conversation, QuestGiver, Player, "Thank you! I will catch up with you both, soon. I have heard rumors of a small cavern carved out by some dwarves. I'll meet you there.") +end + +function Deleted(Quest, QuestGiver, Player) + SetTempVariable(Player, "splorp", nil) +end + +function Declined(Quest, QuestGiver, Player) +end + +function GotSplorpy(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 1, "Splorpy is ready to leave.") + UpdateQuestTaskGroupDescription(Quest, 1, "Splorpy and I have begun our journey across the Icemane Plains to the Great Shelf.") + AddQuestStepChat(Quest, 2, "I must take Splorpy to his father Flibbit Quagmarr. Flibbit is at The Great Shelf.", 1, "I must escort Splorpy to his father Flibbit at The Great Shelf.", 0, 4700045) + AddQuestStepCompleteAction(Quest, 2, "CompleteQuest") +end + +function CompleteQuest(Quest, QuestGiver, Player) + GiveQuestReward(Quest, Player) +end + +function Reload(Quest, QuestGiver, Player, Step) + if Step == 1 then + GotSplorpy(Quest, QuestGiver, Player) + end +end \ No newline at end of file diff --git a/server/Quests/FrostfangSea/totem_annihilation.lua b/server/Quests/FrostfangSea/totem_annihilation.lua new file mode 100644 index 000000000..02db26566 --- /dev/null +++ b/server/Quests/FrostfangSea/totem_annihilation.lua @@ -0,0 +1,50 @@ +--[[ + Script Name : Quests/FrostfangSea/totem_annihilation.lua + Script Purpose : the quest Totem Annihilation + Script Author : theFoof + Script Date : 2013.5.28 + Script Notes : + + Zone : Frostfang Sea + Quest Giver : Dolur Axebeard + Preceded by : A Scattering of Ashes + Followed by : +--]] + +function Init(Quest) + AddQuestRewardCoin(Quest, math.random(10,80), math.random(13,20), 0 ,0) + AddQuestStep(Quest, 1, "I must destroy several totems that are being used to raise the Ry'Gorr skeletons.", 5, 100, "I must destroy several totems that are being used to raise the Ry'Gorr skeletons. These totems have been planted all over the battlefield, which is south of the cave at the Great Shelf.", 3596) + AddQuestStepCompleteAction(Quest, 1, "DestroyedTotems") +end + +function Accepted(Quest, QuestGiver, Player) + FaceTarget(QuestGiver, Player) + conversation = CreateConversation() + + PlayFlavor(QuestGiver, "dolur_axebeard/halas/great_shelf/dolur_axebeard/dolur_axebeard044.mp3", "", "", 4252179126, 1393655567, Player) + AddConversationOption(conversation, "They don't scare me.") + AddConversationOption(conversation, "I'll fight tooth and nail to get the job done.") + StartConversation(conversation, QuestGiver, Player, "Ha! I was just telling ol' Rockbreaker here that you were the one for the job. Head back to the battlefield to the south and look for the totems there. And don't expect the Ry'Gorr to let you succeed without putting up a fight.") +end + +function Deleted(Quest, QuestGiver, Player) +end + +function Declined(Quest, QuestGiver, Player) +end + +function DestroyedTotems(Quest, QuestGiver, Player) + UpdateQuestTaskGroupDescription(Quest, 1, "I have destroyed the totems.") + AddQuestStepChat(Quest, 2, "I must speak with Dolur Axebeard.", 1, "I must speak with Dolur Axebeard, who can be found in the cave at the Great Shelf.", 0, 4700078) + AddQuestStepCompleteAction(Quest, 2, "CompleteQuest") +end + +function CompleteQuest(Quest, QuestGiver, Player) + GiveQuestReward(Quest, Player) +end + +function Reload(Quest, QuestGiver, Player, Step) + if Step == 1 then + DestroyedTotems(Quest, QuestGiver, Player) + end +end \ No newline at end of file diff --git a/server/Quests/FrostfangSea/trust_issues.lua b/server/Quests/FrostfangSea/trust_issues.lua new file mode 100644 index 000000000..b6424afcf --- /dev/null +++ b/server/Quests/FrostfangSea/trust_issues.lua @@ -0,0 +1,90 @@ +--[[ + Script Name : Quests/FrostfangSea/trust_issues.lua + Script Purpose : the quest "Trust Issues" + Script Author : theFoof + Script Date : 2013.8.19 + Script Notes : + + Zone : Frostfang Sea + Quest Giver : Brogan MacLellan + Preceded by : None + Followed by : Trusted Referral +--]] + +function Init(Quest) + AddQuestRewardCoin(Quest, math.random(1,99), math.random(10,30), 1, 0) + AddQuestStepChat(Quest, 1, "I must speak with Blibba Nugrud.", 1, "Brogan asked me to find Pretchon Ironstein, Sister Aalarya, Dandi McCarren, and Blibba Nugrud in New Halas. I should speak to them about their reasons for coming to, and staying in, New Halas.", 0, 4700148) + AddQuestStepChat(Quest, 2, "I must speak with Dandi McCarren", 1, "Brogan asked me to find Pretchon Ironstein, Sister Aalarya, Dandi McCarren, and Blibba Nugrud in New Halas. I should speak to them about their reasons for coming to, and staying in, New Halas.", 0, 4700252) + AddQuestStepChat(Quest, 3, "I must speak with Sister Aalarya.", 1, "Brogan asked me to find Pretchon Ironstein, Sister Aalarya, Dandi McCarren, and Blibba Nugrud in New Halas. I should speak to them about their reasons for coming to, and staying in, New Halas.", 0, 4700284) + AddQuestStepChat(Quest, 4, "I must speak with Pretchon Ironstein.", 1, "Brogan asked me to find Pretchon Ironstein, Sister Aalarya, Dandi McCarren, and Blibba Nugrud in New Halas. I should speak to them about their reasons for coming to, and staying in, New Halas.", 0, 4700271) + AddQuestStepCompleteAction(Quest, 1, "TalkedBlibba") + AddQuestStepCompleteAction(Quest, 2, "TalkedDandi") + AddQuestStepCompleteAction(Quest, 3, "TalkedSister") + AddQuestStepCompleteAction(Quest, 4, "TalkedPretchon") +end + +function Accepted(Quest, QuestGiver, Player) + FaceTarget(QuestGiver, Player) + conversation = CreateConversation() + + PlayFlavor(QuestGiver, "brogan_maclellan/halas/new_halas_guard_house/brogan_maclellan010.mp3", "", "", 1533537529, 2198675230, Player) + AddConversationOption(conversation, "I'll be back.") + StartConversation(conversation, QuestGiver, Player, "Head into town and look for Pretchon Ironstein, Sister Aalarya, Dandi McCarren, and Blibba Nugrud. Find out what they're doing here, and why they don't leave for greener pastures.") +end + +function Deleted(Quest, QuestGiver, Player) +end + +function Declined(Quest, QuestGiver, Player) +end + +function TalkedBlibba(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 1, "I have spoken with Blibba Nugrud.") + CheckProgress(Quest, QuestGiver, Player) +end + +function TalkedDandi(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 2, "I have spoken with Dandi McCarren.") + CheckProgress(Quest, QuestGiver, Player) +end + +function TalkedSister(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 3, "I have spoken with Sister Aalarya.") + CheckProgress(Quest, QuestGiver, Player) +end + +function TalkedPretchon(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 4, "I have spoken with Pretchon Ironstein.") + CheckProgress(Quest, QuestGiver, Player) +end + +function CheckProgress(Quest, QuestGiver, Player) + if QuestStepIsComplete(Player, 85, 1) and QuestStepIsComplete(Player, 85, 2) and QuestStepIsComplete(Player, 85, 3) and QuestStepIsComplete(Player, 85, 4) then + AddStep5(Quest, QuestGiver, Player) + end +end + +function AddStep5(Quest, QuestGiver, Player) + UpdateQuestTaskGroupDescription(Quest, 1, "I spoke to Pretchon Ironstein, Sister Aalarya, Dandi McCarren, and Blibba Nugrud about their reasons for coming to, and staying in, New Halas.") + AddQuestStepChat(Quest, 5, "I must speak to Brogan MacLellan.", 1, "I must return to Brogan MacLellan at the New Halas Guard House just outside of town and inform him of my findings.", 0, 4700126) + AddQuestStepCompleteAction(Quest, 5, "CompleteQuest") +end + +function CompleteQuest(Quest, QuestGiver, Player) + GiveQuestReward(Quest, Player) +end + +function Reload(Quest, QuestGiver, Player, Step) + if QuestStepIsComplete(Player, 85, 1) then + TalkedBlibba(Quest, QuestGiver, Player) + end + if QuestStepIsComplete(Player, 85, 2) then + TalkedDandi(Quest, QuestGiver, Player) + end + if QuestStepIsComplete(Player, 85, 3) then + TalkedSister(Quest, QuestGiver, Player) + end + if QuestStepIsComplete(Player, 85, 4) then + TalkedPretchon(Quest, QuestGiver, Player) + end +end \ No newline at end of file diff --git a/server/Quests/FrostfangSea/trusted_referral.lua b/server/Quests/FrostfangSea/trusted_referral.lua new file mode 100644 index 000000000..36f13713d --- /dev/null +++ b/server/Quests/FrostfangSea/trusted_referral.lua @@ -0,0 +1,41 @@ +--[[ + Script Name : Quests/FrostfangSea/trusted_referral.lua + Script Purpose : the quest Trusted Referral + Script Author : theFoof + Script Date : 2013.8.25 + Script Notes : + + Zone : Frostfang Sea + Quest Giver : Brogan MacLellan + Preceded by : Trust Issues + Followed by : None +--]] + +-- *** THIS SCRIPT IS NOT COMPLETE, BUTCHERBLOCK MUST BE SPAWNED FIRST *** + +function Init(Quest) + AddQuestRewardCoin(Quest, math.random(1,99), math.random(19,30), 0, 0) + AddQuestStepChat(Quest, 1, "You should speak to Belinda MacLellan at the Butcherblock Bay docks.", 1, "You should speak to Belinda MacLellan at the Butcherblock Bay docks.", 0, "BELINDAMACLELLAN") + AddQuestStepCompleteAction(Quest, 1, "CompleteQuest") +end + +function Accepted(Quest, QuestGiver, Player) + FaceTarget(QuestGiver, Player) + conversation = CreateConversation() + + AddConversationOption(conversation, "I'll get this to her, right away!") + StartConversation(conversation, QuestGiver, Player, "She's as reluctant to trust others, too, but I'll write you my recommendation. And if she doesn't have any work, I bet she'll know who there does.") +end + +function Deleted(Quest, QuestGiver, Player) +end + +function Declined(Quest, QuestGiver, Player) +end + +function CompleteQuest(Quest, QuestGiver, Player) + GiveQuestReward(Quest, Player) +end + +function Reload(Quest, QuestGiver, Player, Step) +end \ No newline at end of file diff --git a/server/Quests/FrostfangSea/tutorial_alchemical_experiments.lua b/server/Quests/FrostfangSea/tutorial_alchemical_experiments.lua new file mode 100644 index 000000000..092e4fb5b --- /dev/null +++ b/server/Quests/FrostfangSea/tutorial_alchemical_experiments.lua @@ -0,0 +1,43 @@ +--[[ + Script Name : Quests/FrostfangSea/tutorial_alchemical_experiments.lua + Script Author : theFoof + Script Date : 2013.10.20 + Script Notes : + + Zone : Frostfang Sea + Quest Giver : Glin Hammerhelm + Preceded by : Tutorial: Scribing Scrolls + Followed by : Tutorial: Essential Outfitting +--]] + +function Init(Quest) + SetQuestFeatherColor(Quest, 2) + AddQuestStepCraft(Quest, 1, "I need to create an Essence of Intercept (Journeyman) using the chemistry table.", 1, 100, "I must follow the tutor's instructions to review the crafting process.", 2219, 112413) + AddQuestStepCompleteAction(Quest, 1, "MadeIntercept") +end + +function Accepted(Quest, QuestGiver, Player) +end + +function Deleted(Quest, QuestGiver, Player) +end + +function Declined(Quest, QuestGiver, Player) +end + +function MadeIntercept(Quest, QuestGiver, Player) + SetCompleteFlag(Quest) + UpdateQuestTaskGroupDescription(Quest, 1, "I have created an Essence of Intercept (Journeyman).") + AddQuestStepChat(Quest, 2, "I should return to the tutor with the Essence of Intercept.", 1, "I should return to the tutor with the Essence of Intercept.", 0, GetSpawnID(QuestGiver)) + AddQuestStepCompleteAction(Quest, 2, "CompleteQuest") +end + +function CompleteQuest(Quest, QuestGiver, Player) + GiveQuestReward(Quest, Player) +end + +function Reload(Quest, QuestGiver, Player, Step) + if Step == 1 then + MadeIntercept(Quest, QuestGiver, Player) + end +end \ No newline at end of file diff --git a/server/Quests/FrostfangSea/tutorial_countering_problems.lua b/server/Quests/FrostfangSea/tutorial_countering_problems.lua new file mode 100644 index 000000000..f922764e2 --- /dev/null +++ b/server/Quests/FrostfangSea/tutorial_countering_problems.lua @@ -0,0 +1,50 @@ +--[[ + Script Name : Quests/FrostfangSea/tutorial_countering_problems.lua + Script Purpose : Tutorial: Countering Problems + Script Author : theFoof + Script Date : 2013.10.9 + Script Notes : + + Zone : Frostfang Sea + Quest Giver : Glin Hammerhelm + Preceded by : Tutorial: Forging Ahead + Followed by : Tutorial: Learning to Cook +--]] + +function Init(Quest) + SetQuestFeatherColor(Quest, 2) + AddQuestStepCraft(Quest, 1, "I need to create a lead bracelet using the recipe the tutor gave me.", 1, 100, "I must follow the tutor's instructions to review the crafting process.", 952, 151332) + AddQuestStepCompleteAction(Quest, 1, "CraftedBracelet") +end + +function Accepted(Quest, QuestGiver, Player) + SummonItem(Player, 31373, 1) + SummonItem(Player, 4142, 1) + FaceTarget(QuestGiver, Player) + conversation = CreateConversation() + + AddConversationOption(conversation, "I'll do my best!") + StartConversation(conversation, QuestGiver, Player, "No, that was a particularly easy recipe. In most other cases though, you have the chance of these warnings appearing. They're random, but will always occur at the beginning of a new crafting round. You have until the end of that 4 second round to counter the event. I'd like you to go to the jeweler's workbench now and create a lead bracelet. You'll find the recipe in this book. Take care this time to watch out for warnings and counter them correctly. And don't forget you can also use your arts to help out even when there's no warning showing.") +end + +function Deleted(Quest, QuestGiver, Player) +end + +function Declined(Quest, QuestGiver, Player) +end + +function CraftedBracelet(Quest, QuestGiver, Player) + UpdateQuestTaskGroupDescription(Quest, 1, "I have created a lead bracelet.") + AddQuestStepChat(Quest, 2, "I should return to the tutor with my bracelet.", 1, "I should return to the tutor with my bracelet.", 0, GetSpawnID(QuestGiver)) + AddQuestStepCompleteAction(Quest, 2, "CompleteQuest") +end + +function CompleteQuest(Quest, QuestGiver, Player) + GiveQuestReward(Quest, Player) +end + +function Reload(Quest, QuestGiver, Player, Step) + if Step == 1 then + CraftedBracelet(Quest, QuestGiver, Player) + end +end \ No newline at end of file diff --git a/server/Quests/FrostfangSea/tutorial_essential_outfitting.lua b/server/Quests/FrostfangSea/tutorial_essential_outfitting.lua new file mode 100644 index 000000000..2b94c9c8b --- /dev/null +++ b/server/Quests/FrostfangSea/tutorial_essential_outfitting.lua @@ -0,0 +1,64 @@ +--[[ + Script Name : Quests/FrostfangSea/tutorial_essential_outfitting.lua + Script Author : theFoof + Script Date : 2013.10.20 + Script Notes : + + Zone : Frostfang Sea + Quest Giver : Glin Hammerhelm + Preceded by : Tutorial: Alchemical Experiments + Followed by : None +--]] + +function Init(Quest) + SetQuestFeatherColor(Quest, 2) + AddQuestStepCraft(Quest, 1, "I need to create a chainmail coat using the forge.", 1, 100, "I must follow the tutor's instructions to review the crafting process.", 2407, 185658) + AddQuestStepCraft(Quest, 2, "I should return to the tutor with the equipment I created.", 1, 100, "I should return to the tutor with my work.", 402, 20805) + AddQuestStepCompleteAction(Quest, 1, "MadeCoat") + AddQuestStepCompleteAction(Quest, 2, "MadePack") +end + +function Accepted(Quest, QuestGiver, Player) +end + +function Deleted(Quest, QuestGiver, Player) +end + +function Declined(Quest, QuestGiver, Player) +end + +function MadeCoat(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 1, "I have created a chainmail coat.") + ProgressCheck(Quest, QuestGiver, Player) +end + +function MadePack(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 2, "I created a rawhide backpack.") + ProgressCheck(Quest, QuestGiver, Player) +end + +function ProgressCheck(Quest, QuestGiver, Player) + if QuestStepIsComplete(Player, 97, 1) and QuestStepIsComplete(Player, 97, 2) then + AddStep3(Quest, QuestGiver, Player) + end +end + +function AddStep3(Quest, QuestGiver, Player) + SetCompleteFlag(Quest) + UpdateQuestTaskGroupDescription(Quest, 1, "I have reviewed the process of crafting an item.") + AddQuestStepChat(Quest, 3, "I should return to the tutor with the equipment I created.", 1, "I should return to the tutor with my work.", 0, GetSpawnID(QuestGiver)) + AddQuestStepCompleteAction(Quest, 3, "CompleteQuest") +end + +function CompleteQuest(Quest, QuestGiver, Player) + GiveQuestReward(Quest, Player) +end + +function Reload(Quest, QuestGiver, Player, Step) + if QuestStepIsComplete(Player, 97, 1) then + MadeCoat(Quest, QuestGiver, Player) + end + if QuestStepIsComplete(Player, 97, 2) then + MadePack(Quest, QuestGiver, Player) + end +end \ No newline at end of file diff --git a/server/Quests/FrostfangSea/tutorial_forging_ahead.lua b/server/Quests/FrostfangSea/tutorial_forging_ahead.lua new file mode 100644 index 000000000..0b18303ed --- /dev/null +++ b/server/Quests/FrostfangSea/tutorial_forging_ahead.lua @@ -0,0 +1,51 @@ +--[[ + Script Name : Quests/FrostfangSea/tutorial_forging_ahead.lua + Script Purpose : Tutorial: Forging Ahead + Script Author : theFoof + Script Date : 2013.10.6 + Script Notes : + + Zone : Frostfang Sea + Quest Giver : Glin Hammerhelm + Preceded by : Tutorial: Learning to Harvest + Followed by : Tutorial: Countering Problems +--]] + +function Init(Quest) + SetQuestFeatherColor(Quest, 2) + AddQuestStepCraft(Quest, 1, "I need to create a simple candelabra using the recipe the tutor gave me.", 1, 100, "I must follow the tutor's instructions to create a simple candelabra.", 189, 64876) + AddQuestStepCompleteAction(Quest, 1, "CraftedCandelabra") +end + +function Accepted(Quest, QuestGiver, Player) + SummonItem(Player, 31371, 1) + SummonItem(Player, 4142, 1) + FaceTarget(QuestGiver, Player) + conversation = CreateConversation() + + AddConversationOption(conversation, "Thanks. Here I go.") + StartConversation(conversation, QuestGiver, Player, "Of course, it'll be easier to understand once you can see it in action. Here's a recipe book, and some fuel. Scribe the recipe book by finding it in your inventory and right-clicking it. Check that you have some elm, tin, and roots in your bags, and head over to the forge. Click on the forge to bring up your recipe list, and select the recipe for the simple candelabra.") +end + +function Deleted(Quest, QuestGiver, Player) +end + +function Declined(Quest, QuestGiver, Player) +end + +function CraftedCandelabra(Quest, QuestGiver, Player) + UpdateQuestTaskGroupDescription(Quest, 1, "I have reviewed the process of crafting an item.") + AddQuestStepChat(Quest, 2, "I should return to the tutor with my candelabra.", 1, "I should return to the tutor with the candelabra.", 0, 4700220) + AddQuestStepCompleteAction(Quest, 2, "CompleteQuest") + SetCompleteFlag(Quest) +end + +function CompleteQuest(Quest, QuestGiver, Player) + GiveQuestReward(Quest, Player) +end + +function Reload(Quest, QuestGiver, Player, Step) + if Step == 1 then + CraftedCandelabra(Quest, QuestGiver, Player) + end +end \ No newline at end of file diff --git a/server/Quests/FrostfangSea/tutorial_learning_to_cook.lua b/server/Quests/FrostfangSea/tutorial_learning_to_cook.lua new file mode 100644 index 000000000..b22d3fa0d --- /dev/null +++ b/server/Quests/FrostfangSea/tutorial_learning_to_cook.lua @@ -0,0 +1,44 @@ +--[[ + Script Name : Quests/FrostfangSea/tutorial_learning_to_cook.lua + Script Purpose : Tutorial: Learning to Cook + Script Author : theFoof + Script Date : 2013.10.19 + Script Notes : + + Zone : Frostfang Sea + Quest Giver : Glin Hammerhelm + Preceded by : Tutorial: Countering Problems + Followed by : Tutorial: The Art of Weapons +--]] + +function Init(Quest) + SetQuestFeatherColor(Quest, 2) + AddQuestStepCraft(Quest, 1, "I need to create some jum jum cider using the recipe the tutor gave me.", 1, 100, "I must follow the tutor's instructions to review the crafting process.", 310, 36399) + AddQuestStepCompleteAction(Quest, 1, "MadeCider") +end + +function Accepted(Quest, QuestGiver, Player) +end + +function Deleted(Quest, QuestGiver, Player) +end + +function Declined(Quest, QuestGiver, Player) +end + +function MadeCider(Quest, QuestGiver, Player) + UpdateQuestTaskGroupDescription(Quest, 1, "I have created some jum jum cider.") + SetCompleteFlag(Quest) + AddQuestStepChat(Quest, 2, "I should return to the tutor with the jum jum cider.", 1, "I should return to the tutor with my work.", 0, GetSpawnID(QuestGiver)) + AddQuestStepCompleteAction(Quest, 2, "CompleteQuest") +end + +function CompleteQuest(Quest, QuestGiver, Player) + GiveQuestReward(Quest, Player) +end + +function Reload(Quest, QuestGiver, Player, Step) + if Step == 1 then + MadeCider(Quest, QuestGiver, Player) + end +end \ No newline at end of file diff --git a/server/Quests/FrostfangSea/tutorial_learning_to_harvest.lua b/server/Quests/FrostfangSea/tutorial_learning_to_harvest.lua new file mode 100644 index 000000000..d28f4d4bd --- /dev/null +++ b/server/Quests/FrostfangSea/tutorial_learning_to_harvest.lua @@ -0,0 +1,125 @@ +--[[ + Script Name : Quests/FrostfangSea/tutorial_learning_to_harvest.lua + Script Purpose : the quest Tutorial: Learning to Harvest + Script Author : theFoof + Script Date : 2013.5.15 + + Zone : Unknown (global) + Quest Giver : Trainer Hawk Dunlop (and other harvesting tutors will add as I get to those zones) + Preceded by : None + Followed by : "If I Had a Hammer" & "Tutorial: Forging Ahead" +--]] + +local HarvestTutorial = 11 + +function Init(Quest) + AddQuestStepHarvest(Quest, 1, "Harvest some elm lumber.", 3, 100, "I must harvest some crafting supplies in a nearby low-risk adventure area. Harvest nodes can generally be found on the ground in most outdoor adventure regions.", 826, 12098) + AddQuestStepHarvest(Quest, 2, "Harvest some roots.", 3, 100, "I must harvest some crafting supplies in a nearby low-risk adventure area. Harvest nodes can generally be found on the ground in most outdoor adventure regions.", 200, 11637) + AddQuestStepHarvest(Quest, 3, "Mine some tin clusters.", 3, 100, "I must harvest some crafting supplies in a nearby low-risk adventure area. Harvest nodes can generally be found on the ground in most outdoor adventure regions.", 3391, 14463) + AddQuestStepHarvest(Quest, 4, "Mine some lead clusters.", 3, 100, "I must harvest some crafting supplies in a nearby low-risk adventure area. Harvest nodes can generally be found on the ground in most outdoor adventure regions.", 1086, 8808) + AddQuestStepHarvest(Quest, 5, "Fish up some sunfish.", 3, 100, "I must harvest some crafting supplies in a nearby low-risk adventure area. Harvest nodes can generally be found on the ground in most outdoor adventure regions.", 2540, 13586) + AddQuestStepHarvest(Quest, 6, "Harvest jumjum from a shrub or garden.", 3, 100, "I must harvest some crafting supplies in a nearby low-risk adventure area. Harvest nodes can generally be found on the ground in most outdoor adventure regions.", 816, 8486) + AddQuestStepHarvest(Quest, 7, "Trap some rawhide leather pelts from an animal den.", 3, 100, "I must harvest some crafting supplies in a nearby low-risk adventure area. Harvest nodes can generally be found on the ground in most outdoor adventure regions.", 125 , 11267) + AddQuestStepCompleteAction(Quest, 1, "Lumber") + AddQuestStepCompleteAction(Quest, 2, "Root") + AddQuestStepCompleteAction(Quest, 3, "TinCluster") + AddQuestStepCompleteAction(Quest, 4, "LeadCluster") + AddQuestStepCompleteAction(Quest, 5, "Sunfish") + AddQuestStepCompleteAction(Quest, 6, "Jumjum") + AddQuestStepCompleteAction(Quest, 7, "RawhidePelt") +end + +function CheckProgress(Quest, QuestGiver, Player) + if QuestStepIsComplete(Player, HarvestTutorial, 1) and QuestStepIsComplete(Player, HarvestTutorial, 2) and QuestStepIsComplete(Player, HarvestTutorial, 3) and QuestStepIsComplete(Player, HarvestTutorial, 4) and QuestStepIsComplete(Player, HarvestTutorial, 5) and QuestStepIsComplete(Player, HarvestTutorial, 6) and QuestStepIsComplete(Player, HarvestTutorial, 7) then + UpdateQuestTaskGroupDescription(Quest, 1, "I harvested some crafting supplies.") + AddStep8(Quest, QuestGiver, Player) + end +end + +function AddStep8(Quest, QuestGiver, Player) + SetCompleteFlag(Quest) + AddQuestStepChat(Quest, 8, "I must return to the trainer with the harvested items.", 1, "I must return to the trainer who sent me out harvesting.", 0, GetSpawnID(QuestGiver)) + AddQuestStepCompleteAction(Quest, 8, "CompleteQuest") +end + +function Root(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 2, "I have gathered some roots.") + CheckProgress(Quest, QuestGiver, Player) +end + +function Lumber(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 1, "I have harvested some elm lumber.") + CheckProgress(Quest, QuestGiver, Player) +end + +function TinCluster(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 3, "I have mined some tin clusters.") + CheckProgress(Quest, QuestGiver, Player) +end + +function LeadCluster(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 4, "I harvested some lead clusters.") + CheckProgress(Quest, QuestGiver, Player) +end + +function Sunfish(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 5, "I have harvested some sunfish.") + CheckProgress(Quest, QuestGiver, Player) +end + +function Jumjum(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 6, "I have gathered some jumjum.") + CheckProgress(Quest, QuestGiver, Player) +end + +function RawhidePelt(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 7, "I have trapped a number of pelts.") + CheckProgress(Quest, QuestGiver, Player) +end + +function CompleteQuest(Quest, QuestGiver, Player) + GiveQuestReward(Quest, Player) +end + +function Accepted(Quest, QuestGiver, Player) + if not HasItem(Player, 20747, 1) then + SummonItem(Player, 20747) + end + if GetName(QuestGiver) == "Glin Hammerhelm" then + conversation = CreateConversation() + FaceTarget(QuestGiver, Player) + + AddConversationOption(conversation, "I'll get right on it.") + StartConversation(conversation, QuestGiver, Player, "Harvesting resources tend to be segregated by areas - for example, you'll be able to harvest items (often also called nodes) for making equipment for level 1-9 adventurers, in the same areas where you'll find level 1-9 adventurers hunting. There are seven types of harvestable item: wood, roots, ore, soft metal, animal dens, shrubs, and fish. I'd like you to get a few harvests from each type of harvestable item.") + end +end + +function Declined(Quest, QuestGiver, Player) +end + +function Deleted(Quest, QuestGiver, Player) +end + +function Reload(Quest, QuestGiver, Player, Step) + if QuestStepIsComplete(Player, HarvestTutorial, 1) then + Lumber(Quest, QuestGiver, Player) + end + if QuestStepIsComplete(Player, HarvestTutorial, 2) then + Root(Quest, QuestGiver, Player) + end + if QuestStepIsComplete(Player, HarvestTutorial, 3) then + TinCluster(Quest, QuestGiver, Player) + end + if QuestStepIsComplete(Player, HarvestTutorial, 4) then + LeadCluster(Quest, QuestGiver, Player) + end + if QuestStepIsComplete(Player, HarvestTutorial, 5) then + Sunfish(Quest, QuestGiver, Player) + end + if QuestStepIsComplete(Player, HarvestTutorial, 6) then + Jumjum(Quest, QuestGiver, Player) + end + if QuestStepIsComplete(Player, HarvestTutorial, 7) then + RawhidePelt(Quest, QuestGiver, Player) + end +end \ No newline at end of file diff --git a/server/Quests/FrostfangSea/tutorial_scribing_scrolls.lua b/server/Quests/FrostfangSea/tutorial_scribing_scrolls.lua new file mode 100644 index 000000000..f7b0c79a3 --- /dev/null +++ b/server/Quests/FrostfangSea/tutorial_scribing_scrolls.lua @@ -0,0 +1,44 @@ +--[[ + Script Name : Quests/FrostfangSea/tutorial_scribing_scrolls.lua + Script Purpose : Tutorial: Scribing Scrolls + Script Author : theFoof + Script Date : 2013.10.20 + Script Notes : + + Zone : Frostfang Sea + Quest Giver : Glin Hammerhelm + Preceded by : Tutorial: The Art of Weapons + Followed by : Tutorial: Alchemical Experiments +--]] + +function Init(Quest) + SetQuestFeatherColor(Quest, 2) + AddQuestStepCraft(Quest, 1, "I need to create a spell scroll of Shackle (Journeyman) using the engraved desk.", 1, 100, "I must follow the tutor's instructions to review the crafting process.", 715, 119296) + AddQuestStepCompleteAction(Quest, 1, "MadeScroll") +end + +function Accepted(Quest, QuestGiver, Player) +end + +function Deleted(Quest, QuestGiver, Player) +end + +function Declined(Quest, QuestGiver, Player) +end + +function MadeScroll(Quest, QuestGiver, Player) + SetCompleteFlag(Quest) + UpdateQuestTaskGroupDescription(Quest, 1, " I have created a spell scroll of Shackle (Journeyman).") + AddQuestStepChat(Quest, 2, "I should return to the tutor with the scroll of Shackle.", 1, 100, "I should return to the tutor with my work.", 0, GetSpawnID(QuestGiver)) + AddQuestStepCompleteAction(Quest, 2, "CompleteQuest") +end + +function CompleteQuest(Quest, QuestGiver, Player) + GiveQuestReward(Quest, Player) +end + +function Reload(Quest, QuestGiver, Player, Step) + if Step == 1 then + MadeScroll(Quest, QuestGiver, Player) + end +end \ No newline at end of file diff --git a/server/Quests/FrostfangSea/tutorial_the_art_of_weapons.lua b/server/Quests/FrostfangSea/tutorial_the_art_of_weapons.lua new file mode 100644 index 000000000..4a3210c08 --- /dev/null +++ b/server/Quests/FrostfangSea/tutorial_the_art_of_weapons.lua @@ -0,0 +1,65 @@ +--[[ + Script Name : Quests/FrostfangSea/tutorial_the_art_of_weapons.lua + Script Purpose : Tutorial: The Art of Weapons + Script Author : theFoof + Script Date : 2013.10.19 + Script Notes :Edited 8/19/17 correct quest number in progress check and reload, + + Zone : Frostfang Sea + Quest Giver : Glin Hammerhelm + Preceded by : Tutorial: Learning to Cook + Followed by : Tutorial: Scribing Scrolls +--]] + +function Init(Quest) + SetQuestFeatherColor(Quest, 2) + AddQuestStepCraft(Quest, 1, "I need to create an elm greatstaff using the woodworking table.", 1, 100, "I must follow the tutor's instructions to review the crafting process.", 622, 76153) + AddQuestStepCraft(Quest, 2, "I must create a tin hand axe using the forge.", 1, 100, "I must follow the tutor's instructions to review the crafting process.", 2154, 89113) + AddQuestStepCompleteAction(Quest, 1, "MadeStaff") + AddQuestStepCompleteAction(Quest, 2, "MadeAxe") +end + +function Accepted(Quest, QuestGiver, Player) +end + +function Deleted(Quest, QuestGiver, Player) +end + +function Declined(Quest, QuestGiver, Player) +end + +function MadeStaff(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 1, "I have created an elm greatstaff.") + ProgressCheck(Quest, QuestGiver, Player) +end + +function MadeAxe(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 2, "I created a tin hand axe.") + ProgressCheck(Quest, QuestGiver, Player) +end + +function ProgressCheck(Quest, QuestGiver, Player) + if QuestStepIsComplete(Player, 94, 1) and QuestStepIsComplete(Player, 94, 2) then + UpdateQuestTaskGroupDescription(Quest, 1, "I have reviewed the process of crafting an item.") + AddStep3(Quest, QuestGiver, Player) + end +end + +function AddStep3(Quest, QuestGiver, Player) + SetCompleteFlag(Quest) + AddQuestStepChat(Quest, 3, "I should return to the tutor with the weapons.", 1, "I should return to the tutor with my work.", 0, GetSpawnID(QuestGiver)) + AddQuestStepCompleteAction(Quest, 3, "CompleteQuest") +end + +function CompleteQuest(Quest, QuestGiver, Player) + GiveQuestReward(Quest, Player) +end + +function Reload(Quest, QuestGiver, Player) + if QuestStepIsComplete(Player, 94, 1) then + MadeStaff(Quest, QuestGiver, Player) + end + if QuestStepIsComplete(Player, 94, 2) then + MadeAxe(Quest, QuestGiver, Player) + end +end \ No newline at end of file diff --git a/server/Quests/FrostfangSea/watch_out_below.lua b/server/Quests/FrostfangSea/watch_out_below.lua new file mode 100644 index 000000000..6e762c9f6 --- /dev/null +++ b/server/Quests/FrostfangSea/watch_out_below.lua @@ -0,0 +1,51 @@ +--[[ + Script Name : Quests/FrostfangSea/watch_out_below.lua + Script Purpose : the quest Watch Out Below! + Script Author : theFoof + Script Date : 2013.7.18 + Script Notes : + + Zone : Frostfang Sea + Quest Giver : Odon Sourgeson + Preceded by : Ry'Gorr Tool Taking + Followed by : None +--]] + +function Init(Quest) + SetQuestRepeatable(Quest) + SetQuestFeatherColor(Quest, 3) + AddQuestRewardCoin(Quest, math.random(5,90), math.random(52,70), 0, 0) + AddQuestStep(Quest, 1, "Break off glimmering velium crystals that grow from the cave ceiling, and gather them up.", 5, 100, "Return to the Velinoid Catacombs in search of glimmering velium crystals.", 3774) + AddQuestStepCompleteAction(Quest, 1, "GotCrystals") +end + +function Accepted(Quest, QuestGiver, Player) + FaceTarget(QuestGiver, Player) + conversation = CreateConversation() + + PlayFlavor(QuestGiver, "odon_scourgeson/halas/cragged_spine/odon_scourgeson_042.mp3", "", "", 2099746411, 4081524190, Player) + AddConversationOption(conversation, "That will be good.") + StartConversation(conversation, QuestGiver, Player, "That's wonderful! The money raised by selling the velium can help to buy us more goods and weapons out here on the front.") +end + +function Deleted(Quest, QuestGiver, Player) +end + +function Declined(Quest, QuestGiver, Player) +end + +function GotCrystals(Quest, QuestGiver, Player) + UpdateQuestTaskGroupDescription(Quest, 1, "You have gathered enough glimmering velium crystals.") + AddQuestStepChat(Quest, 2, "Return to Odon Scourgeson now that you have gathered enough glimmering velium crystals.", 1, "You should return to Odon Scourgeson, at Cragged Spine, now that you have gathered enough glimmering velium crystals.", 0, 4700108) + AddQuestStepCompleteAction(Quest, 2, "CompleteQuest") +end + +function CompleteQuest(Quest, QuestGiver, Player) + GiveQuestReward(Quest, Player) +end + +function Reload(Quest, QuestGiver, Player, Step) + if Step == 1 then + GotCrystals(Quest, QuestGiver, Player) + end +end \ No newline at end of file diff --git a/server/Quests/FrostfangSea/weapon_of_choice.lua b/server/Quests/FrostfangSea/weapon_of_choice.lua new file mode 100644 index 000000000..f6af58cf5 --- /dev/null +++ b/server/Quests/FrostfangSea/weapon_of_choice.lua @@ -0,0 +1,42 @@ +--[[ + Script Name : Quests/FrostfangSea/weapon_of_choice.lua + Script Purpose : the quest Weapon of Choice + Script Author : theFoof + Script Date : 2013.6.3 + + Zone : Frostfang Sea + Quest Giver : Blorpisa Bogchild + Preceded by : Field Testing Part Two + Followed by : Disarming the Ry'Gorr +--]] + +function Init(Quest) + AddQuestRewardCoin(Quest, math.random(5,90), math.random(13,25), 0, 0) + AddQuestStep(Quest, 1, "I must collect coldain weapons from the slain coldain.", 5, 100, "I must collect coldain weapons from the slain coldain that have died at the battlefield southeast of the Great Shelf.", 1650) + AddQuestStepCompleteAction(Quest, 1, "GotWeapons") +end + +function Accepted(Quest, QuestGiver, Player) +end + +function Deleted(Quest, QuestGiver, Player) +end + +function Declined(Quest, QuestGiver, Player) +end + +function GotWeapons(Quest, QuestGiver, Player) + UpdateQuestTaskGroupDescription(Quest, 1, "I have collected the coldain weapons for Blorpisa.") + AddQuestStepChat(Quest, 2, "I must speak with Blorpisa Bogchild. Blorpisa is staying at the Great Shelf.", 1, "I must return the weapons I have collected to Blorpisa in the Great Shelf.", 0, 4700039) + AddQuestStepCompleteAction(Quest, 2, "CompleteQuest") +end + +function CompleteQuest(Quest, QuestGiver, Player) + GiveQuestReward(Quest, Player) +end + +function Reload(Quest, QuestGiver, Player, Step) + if Step == 1 then + GotWeapons(Quest, QuestGiver, Player) + end +end \ No newline at end of file diff --git a/server/Quests/FrostfangSea/whirling_ice_time.lua b/server/Quests/FrostfangSea/whirling_ice_time.lua new file mode 100644 index 000000000..ff5ace6d9 --- /dev/null +++ b/server/Quests/FrostfangSea/whirling_ice_time.lua @@ -0,0 +1,56 @@ +--[[ + Script Name : Quests/FrostfangSea/whirling_ice_time.lua + Script Purpose : for the quest Whirling Ice Time + Script Author : theFoof + Script Date : 2013.6.16 + Script Notes : + + Zone : Frostfang Sea + Quest Giver : Odon Scourgeson + Preceded by : None + Followed by : Highly Flammable Materials +--]] + +function Init(Quest) + AddQuestRewardCoin(Quest, math.random(5,90), math.random(12,25), 0, 0) + AddQuestStep(Quest, 1, "Apply the Draught of Whirling Ice to the green sparkling arrows that have been shot upon the Cragged Spine beachfront.", 6, 100, "Odon gave you a Draught of Whirling Ice, which he claims will create whirling eddies of fog and ice on the beachfront, causing confusion amongst the Ry'Gorr.", 2511) + AddQuestStepCompleteAction(Quest, 1, "UsedDraught") +end + +function Accepted(Quest, QuestGiver, Player) + if not HasItem(Player, 6556) then + SummonItem(Player, 6556) + end + FaceTarget(QuestGiver, Player) + conversation = CreateConversation() + + PlayFlavor(QuestGiver, "odon_scourgeson/halas/cragged_spine/odon_scourgeson_011.mp3", "", "", 57352685, 126930630, Player) + AddConversationOption(conversation, "I will, Odon.") + StartConversation(conversation, QuestGiver, Player, "Here is the Draught of Whirling Ice I spoke of. Use it at the locations marked by a glowing green arrow shaft.") +end + +function Deleted(Quest, QuestGiver, Player) +end + +function Declined(Quest, QuestGiver, Player) +end + +function UsedDraught(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 1, " The icy whirlstorms conjured by the Draught of Whirling Ice worked wonders!") + UpdateQuestTaskGroupDescription(Quest, 1, "The icy whirlstorms conjured by the Draught of Whirling Ice worked wonders!") + AddQuestStepChat(Quest, 2, "Return to Odon Scourgeson at Cragged Spine.", 1, "You should return return to Odon Scourgeson now that the Draught of Whirling Ice caused confusion and chaos on the near by beach front.", 0, 4700108) + AddQuestStepCompleteAction(Quest, 2, "CompleteQuest") +end + +function CompleteQuest(Quest, QuestGiver, Player) + GiveQuestReward(Quest, Player) + if HasItem(Player, 6556) then + RemoveItem(Player, 6556) + end +end + +function Reload(Quest, QuestGiver, Player, Step) + if Step == 1 then + UsedDraught(Quest, QuestGiver, Player) + end +end \ No newline at end of file diff --git a/server/Quests/GMHall/TestQuest.lua b/server/Quests/GMHall/TestQuest.lua new file mode 100644 index 000000000..f5b877575 --- /dev/null +++ b/server/Quests/GMHall/TestQuest.lua @@ -0,0 +1,33 @@ +--[[ + Script Name : Quests/GMHall/TestQuest.lua + Script Author : TyroneSWG + Script Date : 2019.01.29 02:01:27 + Script Purpose : + + Zone : GMHall + Quest Giver: + Preceded by: None + Followed by: +--]] + +function Init(Quest) + SetQuestFeatherColor(Quest, 2) + AddQuestStepKill(Quest, 1, "I need to help clean up the area.", 1, 100, "The Gods have asked that i help with cleanup around the mythical hall.", 2693, 1970017) +end + +function Accepted(Quest, QuestGiver, Player) + +end + +function Declined(Quest, QuestGiver, Player) + +end + +function quest_complete(Quest, QuestGiver, Player) + +end + +function Reload(Quest, QuestGiver, Player, Step) + +end + diff --git a/server/Quests/Graveyard/bringing_out_your_souls.lua b/server/Quests/Graveyard/bringing_out_your_souls.lua new file mode 100644 index 000000000..902eec9d4 --- /dev/null +++ b/server/Quests/Graveyard/bringing_out_your_souls.lua @@ -0,0 +1,49 @@ +--[[ + Script Name : bring_out_your_souls.lua + Script Purpose : Handles the quest, "Bring Out Your Souls" + Script Author : Scatman + Script Date : 2009.07.12 + + Zone : The Graveyard + Quest Giver: Zekvila Dizelk + Preceded by: None + Followed by: None +--]] + + +function Init(Quest) + AddQuestStepKill(Quest, 1, "I must kill ten undead and trap their souls.", 10, 100, "I should kill some undead like Zekvila asked of me. I'll hold out the crystal as each one is destroyed.", 611, 1250024, 1250028, 1250035, 1250042, 1250080, 1250068, 1250059, 1250021, 1250029, 1250063, 1250057, 1250081, 1250055, 1250043, 1250064, 1250053, 1250036, 1250087, 1250060, 1250041, 1250056, 1250046, 1250052, 1250049, 1250038, 1250091, 1250026, 1250006, 1250016, 1250037, 1250075, 1250012, 1250019, 1250020, 1250017, 1250097, 1250090, 1250079, 1250066, 1250034, 1250031) + AddQuestStepCompleteAction(Quest, 1, "Step1_Complete_KilledUndead") +end + +function Accepted(Quest, QuestGiver, Player) + FaceTarget(QuestGiver, Player) + conversation = CreateConversation() + + AddConversationOption(conversation, "I understand. I'll be back when it's done.") + StartConversation(conversation, QuestGiver, Player, "You choose wisely, friend. I shall use the lessons taught to the Iksar by our dead emperor, Venril Sathir. This is where you come in ... the magic of the dead will put a stop to Ithelz's pompous belief that he is our new ruler. I will tell you only once: take the crystal, go to the graveyard, and kill the undead knights. As the beasts die, hold out the crystal and collect their souls. Return when you fill the crystal.") +end + +function Declined(Quest, QuestGiver, Player) +end + +function Step1_Complete_KilledUndead(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 1, "I have killed the undead.") + UpdateQuestTaskGroupDescription(Quest, 1, "I've killed ten undead and collected their souls.") + + AddQuestStepChat(Quest, 2, "I need to speak with Zekvila.", 1, "I should return to Zekvila the crystal as she had commanded.", 0, 1250069) + AddQuestStepCompleteAction(Quest, 2, "QuestComplete") +end + +function QuestComplete(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 2, "I have spoken with Zekvila.") + UpdateQuestTaskGroupDescription(Quest, 2, "I have given Zekvila the crystal filled with souls.") + GiveQuestReward(Quest, Player) + UpdateQuestDescription(Quest, "Zekvila was pleased with the crystal. She claims that it will help her topple her rival's rule. I think I may ask her later if she needs any more help, in case she actually is successful.") +end + +function Reload(Quest, QuestGiver, Player, Step) + if Step == 1 then + Step1_Complete_KilledUndead(Quest, QuestGiver, Player) + end +end diff --git a/server/Quests/Graveyard/finding_the_pages.lua b/server/Quests/Graveyard/finding_the_pages.lua new file mode 100644 index 000000000..ec8856dae --- /dev/null +++ b/server/Quests/Graveyard/finding_the_pages.lua @@ -0,0 +1,117 @@ +--[[ + Script Name : finding_the_pages.lua + Script Purpose : Handles the quest, "Finding the Pages" + Script Author : Scatman + Script Date : 2009.07.11 + + Zone : The Graveyard + Quest Giver: Custodian Zaddar Sullissia + Preceded by: Paying a Visit (paying_a_visit.lua) + Followed by: Testing the Ward (testing_the_ward.lua) +--]] + + +function Init(Quest) + + + AddQuestStepKill(Quest, 1, "I must destroy some of the undead to see if they have any of the pieces of parchment.", 5, 100, "I should search near the ruins of the Tower of Marr. Others pages might have been taken by the local undead. I should also search near the tombs of the fallen Knights of Truth.", 2180, 1250024, 1250028, 1250035, 1250042, 1250080, 1250068, 1250059, 1250021, 1250029, 1250063, 1250057, 1250081, 1250055, 1250043, 1250064, 1250053, 1250036, 1250087, 1250060, 1250041, 1250056, 1250046, 1250052, 1250049, 1250038, 1250091, 1250026, 1250006, 1250016, 1250037, 1250075, 1250012, 1250019, 1250020, 1250017, 1250097, 1250090, 1250079, 1250066, 1250034, 1250031) + AddQuestStepObtainItem(Quest, 2, "I must search the Tower of Marr ruins for one of the pages.", 1, 100, "I should search near the ruins of the Tower of Marr. Others pages might have been taken by the local undead. I should also search near the tombs of the fallen Knights of Truth.", 2180, 2315) -- a tattered piece of paper + + AddQuestStepObtainItem(Quest, 3, "I should search beneath the elevated tombs near Zaddar for one of the pages.", 1, 100, "I should search near the ruins of the Tower of Marr. Others pages might have been taken by the local undead. I should also search near the tombs of the fallen Knights of Truth.", 2180, 2315) -- a tattered piece of paper + + AddQuestStepCompleteAction(Quest, 1, "Step1_Complete_KilledSkeletons") + AddQuestStepCompleteAction(Quest, 2, "Step2_Complete_SearchedTower") + AddQuestStepCompleteAction(Quest, 3, "Step3_Complete_SearchedTombs") + +end + +function Accepted(Quest, QuestGiver, Player) + FaceTarget(QuestGiver, Player) + conversation = CreateConversation() + + PlayFlavor(QuestGiver, "", "", "thank", 0, 0, Player) + AddConversationOption(conversation, "I shall return.") + StartConversation(conversation, QuestGiver, Player, "Thank you for your help! Please let me know when you have found them.") +end + +function Declined(Quest, QuestGiver, Player) +end + +function Step1_Complete_KilledSkeletons(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 1, "I've found one of the seven missing pieces of parchment.") + + if QuestIsComplete(Player, 233) then + FoundAllPages(Quest, QuestGiver, Player) + end +end + +function Step2_Complete_SearchedTower(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 2, "I've found one of the seven missing pieces of parchment.") + + -- a tattered piece of paper + while HasItem(Player, 2660) do + RemoveItem(Player, 2660) + end + + if QuestIsComplete(Player, 233) then + FoundAllPages(Quest, QuestGiver, Player) + end +end + +function Step3_Complete_SearchedTombs(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 3, "I've found one of the seven missing pieces of parchment.") + + -- a tattered piece of paper + while HasItem(Player, 2660) do + RemoveItem(Player, 2660) + end + + if QuestIsComplete(Player, 233) then + FoundAllPages(Quest, QuestGiver, Player) + end +end + +function FoundAllPages(Quest, QuestGiver, Player) + UpdateQuestTaskGroupDescription(Quest, 1, "I should return to Varacus with the pages I found.") + + AddQuestStepChat(Quest, 4, "I should return to Varacus and prove that I found the pages.", 1, "Return to Varacus T`Kur and scold him for not looking after the pages.", 0, 1250070) + AddQuestStepCompleteAction(Quest, 4, "Step4_Complete_SpokeToVaracus") +end + +function Step4_Complete_SpokeToVaracus(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 4, "I have returned to Varacus with the pages.") + UpdateQuestTaskGroupDescription(Quest, 2, "Varacus was like putty in my hands, the fool.") + + -- Ethernere Ledger + -- TODO: Display quest reward popup + if not HasItem(Player, 6016) then + SummonItem(Player, 6016) + end + + AddQuestStepChat(Quest, 5, "I should return to Zaddar with the pages he needs.", 1, "I must return to Zaddar and tell him of my findings.", 0, 1250014) + AddQuestStepCompleteAction(Quest, 5, "QuestComplete") +end + +function QuestComplete(Quest, QuestGiver, Player) + -- Ethernere Ledger + while HasItem(Player, 6016) do + RemoveItem(Player, 6016) + end + + UpdateQuestStepDescription(Quest, 5, "I've returned to Zaddar and gave him the pieces of parchment.") + UpdateQuestTaskGroupDescription(Quest, 3, "I've returned to Zaddar with the lost documents.") + GiveQuestReward(Quest, Player) + UpdateQuestDescription(Quest, "I was able to track down all seven pieces of parchment and successfully delivered them to Zaddar.") +end + +function Reload(Quest, QuestGiver, Player, Step) + if Step == 1 then + Step1_Complete_KilledSkeletons(Quest, QuestGiver, Player) + elseif Step == 2 then + Step2_Complete_SearchedTower(Quest, QuestGiver, Player) + elseif Step == 3 then + Step3_Complete_SearchedTombs(Quest, QuestGiver, Player) + elseif Step == 4 then + Step4_Complete_SpokeToVaracus(Quest, QuestGiver, Player) + end +end diff --git a/server/Quests/Graveyard/obtaining_an_ancient_staff.lua b/server/Quests/Graveyard/obtaining_an_ancient_staff.lua new file mode 100644 index 000000000..8266e33e8 --- /dev/null +++ b/server/Quests/Graveyard/obtaining_an_ancient_staff.lua @@ -0,0 +1,59 @@ +--[[ + Script Name : obtaining_an_ancient_staff.lua + Script Purpose : Handles the quest, "Obtaining an Ancient Staff" + Script Author : Scatman + Script Date : 2009.07.12 + + Zone : The Graveyard + Quest Giver: Custodian Zaddar Sullissia + Preceded by: Testing the Ward (testing_the_ward.lua) + Followed by: The Book of the Dead (the_book_of_the_dead.lua) +--]] + + +function Init(Quest) + + + AddQuestStepChat(Quest, 1, "I must get the Staff of Ethernere from Varacus.", 1, "I've been instructed by Zaddar to obtain the ancient Staff of the Ethernere from Varacus. Zaddar feels that this relic will be a necessary component when attempting to reseal the ward.", 0, 1250070) + AddQuestStepCompleteAction(Quest, 1, "Step1_Complete_SpokeToVaracus") + +end + +function Accepted(Quest, QuestGiver, Player) + FaceTarget(QuestGiver, Player) + conversation = CreateConversation() + + PlayFlavor(QuestGiver, "voiceover/english/tutorial_revamp/custodian_zaddar_sullissia/fprt_adv02_graveyard/custodian_zaddar064.mp3", "", "", 2541220824, 746144364, Player) + AddConversationOption(conversation, "Why do we need this staff?", "dlg_5_8") + AddConversationOption(conversation, "Enough of this story.") + StartConversation(conversation, QuestGiver, Player, "This staff has runes carved along its length that ward off the undead. It is often used by the Keepers of Ethernere during purifying rituals.") +end + +function Declined(Quest, QuestGiver, Player) +end + +function Step1_Complete_SpokeToVaracus(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 1, "I've obtained the Staff of Ethernere.") + UpdateQuestTaskGroupDescription(Quest, 1, "I've managed to talk that fool Varacus out of his staff, let's hope it was worth it.") + + AddQuestStepChat(Quest, 2, "I must take the Staff of Ethernere to Zaddar.", 1, "I must take this staff to Zaddar with haste, there is little time and much work to be done.", 0, 1250014) + AddQuestStepCompleteAction(Quest, 2, "QuestComplete") +end + +function QuestComplete(Quest, QuestGiver, Player) + -- The Staff of Ethernere + while HasItem(Player, 12438) do + RemoveItem(Player, 12438) + end + + UpdateQuestStepDescription(Quest, 2, "I've given the staff to Zaddar.") + UpdateQuestTaskGroupDescription(Quest, 2, "I must take the Staff of Ethernere to Zaddar in the graveyard so he can begin the arcane spell to reseal the ward.") + GiveQuestReward(Quest, Player) + UpdateQuestDescription(Quest, "I've obtained the ancient staff used by the Keepers of Ethernere and passed it along to Zaddar.") +end + +function Reload(Quest, QuestGiver, Player, Step) + if Step == 1 then + Step1_Complete_SpokeToVaracus(Quest, QuestGiver, Player) + end +end diff --git a/server/Quests/Graveyard/paying_a_visit.lua b/server/Quests/Graveyard/paying_a_visit.lua new file mode 100644 index 000000000..f56edc9b7 --- /dev/null +++ b/server/Quests/Graveyard/paying_a_visit.lua @@ -0,0 +1,42 @@ +--[[ + Script Name : paying_a_visit.lua + Script Purpose : Handles the quest, "Paying a Visit" + Script Author : Scatman + Script Date : 2009.07.10 + + Zone : The Graveyard + Quest Giver: Custodian Zaddar Sullissia + Preceded by: The Door Knocker (the_door_knocker.lua) + Followed by: Finding the Pages (finding_the_pages.lua) +--]] + + +function Init(Quest) + + + AddQuestStepChat(Quest, 1, "I must speak with Varacus T`Kur. He can be found by following the road north, then to the west.", 1, "I must seek out the dark elf Varacus T`Kur within the graveyard of Freeport. According to Zaddar, Varacus can be found to the north near the ruins of the old tower of Marr.", 0, 1250070) + AddQuestStepCompleteAction(Quest, 1, "QuestComplete") + +end + +function Accepted(Quest, QuestGiver, Player) + FaceTarget(QuestGiver, Player) + conversation = CreateConversation() + + PlayFlavor(QuestGiver, "voiceover/english/tutorial_revamp/custodian_zaddar_sullissia/fprt_adv02_graveyard/custodian_zaddar036.mp3", "", "", 931872980, 59948626, Player) + AddConversationOption(conversation, "Very well, I'm off.") + StartConversation(conversation, QuestGiver, Player, "Go now, and return when you have the pages from Varacus.") +end + +function Declined(Quest, QuestGiver, Player) +end + +function QuestComplete(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 1, "I have spoken with Varacus T`Kur.") + UpdateQuestTaskGroupDescription(Quest, 1, "I have found Varacus and spoken with him as instructed by Zaddar.") + GiveQuestReward(Quest, Player) + UpdateQuestDescription(Quest, "I have found Varacus and spoken to him.") +end + +function Reload(Quest, QuestGiver, Player, Step) +end diff --git a/server/Quests/Graveyard/repairing_the_ward.lua b/server/Quests/Graveyard/repairing_the_ward.lua new file mode 100644 index 000000000..d30a08c1e --- /dev/null +++ b/server/Quests/Graveyard/repairing_the_ward.lua @@ -0,0 +1,61 @@ +--[[ + Quest Template + Script Name : repairing_the_ward.lua + Script Purpose : Handles the quest, "Repairing the Ward" + Script Author : Scatman + Script Date : 2009.07.12 + + Zone : The Graveyard + Quest Giver : Custodian Zaddar Sullissia + Preceded by : The Book of the Dead (the_book_of_the_dead.lua) + Followed by : Reporting to the Ruins (reporting_to_the_ruins.lua) +--]] + + +function Init(Quest) + AddQuestStepChat(Quest, 1, "Recite the incantations with Zaddar.", 1, "Recite the magical incantations with Zaddar to reseal the ward upon the graveyard.", 0, 1250014) + AddQuestStepCompleteAction(Quest, 1, "Step1_Complete_SpokeWithZaddar") +end + +function Accepted(Quest, QuestGiver, Player) + FaceTarget(QuestGiver, Player) + conversation = CreateConversation() + + PlayFlavor(QuestGiver, "voiceover/english/tutorial_revamp/custodian_zaddar_sullissia/fprt_adv02_graveyard/custodian_zaddar100.mp3", "", "", 1431969198, 4289355071, Player) + AddConversationOption(conversation, "Very well, I'll let you prepare.") + StartConversation(conversation, QuestGiver, Player, "I must read the words from the pages of parchment that are now within the Book of the Dead. They are difficult to decipher, even with my skills. Give me a moment to study them.") +end + +function Declined(Quest, QuestGiver, Player) +end + +function Step1_Complete_SpokeWithZaddar(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 1, "Zaddar and I were not able to repair the ward. Now I must determine why.") + UpdateQuestTaskGroupDescription(Quest, 1, "I've attempted to reseal the ward by reciting the incantations with Custodian Zaddar but something was wrong.") + + AddQuestStepChat(Quest, 2, "I must check the tombs of the Knights of Truth to see which one is not sealed.", 1, "Determine what is preventing the ward from being resealed.", 0, 1250014) + AddQuestStepCompleteAction(Quest, 2, "Step2_Complete_SealedTomb") +end + +function Step2_Complete_SealedTomb(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 2, "Sir Haligan's tomb is sealed so the ritual can now be completed.") + UpdateQuestTaskGroupDescription(Quest, 2, "I've found the tomb of Sir Haligan and resealed it.") + + AddQuestStepChat(Quest, 3, "I should go back to Zaddar and attempt the ritual once more.", 1, "Seek out Zaddar once again and make another attempt at resealing the ward.", 0, 1250014) + AddQuestStepCompleteAction(Quest, 3, "QuestComplete") +end + +function QuestComplete(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 3, "I've recited the arcane words with Zaddar and repaired the ward!") + UpdateQuestTaskGroupDescription(Quest, 3, "I've found Zaddar and reattempted to seal the ward.") + GiveQuestReward(Quest, Player) + UpdateQuestDescription(Quest, "I've come a long way with Zaddar here in the graveyard and it's been an interesting adventure. I hope that by repairing the ward and keeping the undead bound to the graveyard, the Overlord will take notice of my actions and maybe reward me one day.") +end + +function Reload(Quest, QuestGiver, Player, Step) + if Step == 1 then + Step1_Complete_SpokeWithZaddar(Quest, QuestGiver, Player) + elseif Step == 2 then + Step2_Complete_SealedTomb(Quest, QuestGiver, Player) + end +end \ No newline at end of file diff --git a/server/Quests/Graveyard/reporting_to_the_ruins.lua b/server/Quests/Graveyard/reporting_to_the_ruins.lua new file mode 100644 index 000000000..4705d57f8 --- /dev/null +++ b/server/Quests/Graveyard/reporting_to_the_ruins.lua @@ -0,0 +1,40 @@ +--[[ + Quest Template + Script Name : reporting_to_the_ruins.lua + Script Purpose : Handles the quest, "Reporting to the Ruins" + Script Author : Scatman + Script Date : 2009.07.12 + + Zone : The Graveyard + Quest Giver : Custodian Zaddar Sullissia + Preceded by : Repairing the Ward (repairing_the_ward.lua) + Followed by : None +--]] + + +function Init(Quest) + AddQuestStepChat(Quest, 1, "I should make my way to the Freeport Ruins and speak to Captain Arellius. I should return to the docks of my home district and use the bell to summon transport outside of Freeport proper.", 1, "I should make my way to the Ruins and speak to to Captain Arellius.", 0, 1270003) + AddQuestStepCompleteAction(Quest, 1, "QuestComplete") +end + +function Accepted(Quest, QuestGiver, Player) + FaceTarget(QuestGiver, Player) + conversation = CreateConversation() + + PlayFlavor(QuestGiver, "voiceover/english/tutorial_revamp/custodian_zaddar_sullissia/fprt_adv02_graveyard/custodian_zaddar114.mp3", "", "", 463438268, 1793214191, Player) + AddConversationOption(conversation, "I'm on my way.") + StartConversation(conversation, QuestGiver, Player, "Your help in the Ruins is desperately needed. Do not delay too long, for our great city of Freeport is in peril!") +end + +function Declined(Quest, QuestGiver, Player) +end + +function QuestComplete(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 1, "I made my way to the Ruins and have spoken to Captain Arellius.") + UpdateQuestTaskGroupDescription(Quest, 1, "I have made my way to the Ruins and reported to Captain Arellius.") + GiveQuestReward(Quest, Player) + UpdateQuestDescription(Quest, "I found the Ruins and have reported to Captain Arellius. I will now assist in the defense of Freeport.") +end + +function Reload(Quest, QuestGiver, Player, Step) +end \ No newline at end of file diff --git a/server/Quests/Graveyard/soothing_the_spirits_of_marr.lua b/server/Quests/Graveyard/soothing_the_spirits_of_marr.lua new file mode 100644 index 000000000..63d1ba6de --- /dev/null +++ b/server/Quests/Graveyard/soothing_the_spirits_of_marr.lua @@ -0,0 +1,61 @@ +--[[ + Quest Template + Script Name : soothing_the_spirits_of_marr.lua + Script Purpose : Handles the quest, "Soothing the Spirits of Marr" + Script Author : Scatman + Script Date : 2009.07.25 + + Zone : The Graveyard + Quest Giver : An Ethernere Guard + Preceded by : None + Followed by : None +--]] + + +function Init(Quest) + AddQuestStepKill(Quest, 1, "In order to appease the restless Knights of Marr, I must recover their holy relics from the graverobbers here in the Graveyard.", 4, 100, "I must hunt the graverobbers in the Graveyard in order to recover the relics of Marr they have purloined.", 368, 1250093, 1250094, 1250092, 1250096) + AddQuestStepCompleteAction(Quest, 1, "Step1_Complete_KilledGraverobbers") +end + +function Accepted(Quest, QuestGiver, Player) + FaceTarget(QuestGiver, Player) + conversation = CreateConversation() + + PlayFlavor(QuestGiver, "an_ethernere_guard/fprt_adv02_graveyard/ethernere_keeper004.mp3", "", "", 2575556836, 1434752042, Player) + AddConversationOption(conversation, "I will fulfill my duty to the Overlord.") + StartConversation(conversation, QuestGiver, Player, "You must recover these holy relics and return them to the graves of the awakened spirits for them to find rest again.") +end + +function Declined(Quest, QuestGiver, Player) +end + +function Step1_Complete_KilledGraverobbers(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 1, "I was able to gather the stolen relics of Marr from the graverobbers in the Graveyard.") + UpdateQuestTaskGroupDescription(Quest, 1, "I have recovered the four stolen relics of Marr.") + + AddQuestStep(Quest, 2, "I must take these relics to the tomb of Sir Ackmin.", 1, 100, "I should return to an Ethernere guard and let them know of my success.", 0) + AddQuestStepCompleteAction(Quest, 2, "Step2_Complete_BroughRelics") +end + +function Step2_Complete_BroughRelics(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 2, "I have returned the relics to the tomb of Sir Ackmin.") + UpdateQuestTaskGroupDescription(Quest, 2, "It would seem that the return of the relics has put Sir Ackmin's soul to rest.") + + AddQuestStepChat(Quest, 3, "I should let an Ethernere guard know of my success.", 1, "I must return the relics to the tomb of Sir Ackmin.", 0, 1250074, 1250032, 1250084, 1250044) + AddQuestStepCompleteAction(Quest, 3, "Step2_Complete_BroughRelics") +end + +function QuestComplete(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 3, "The Keepers of Ethernere were pleased to hear of my efforts.") + UpdateQuestTaskGroupDescription(Quest, 3, "The Keepers of Ethernere were pleased with my success") + GiveQuestReward(Quest, Player) + UpdateQuestDescription(Quest, "Having appeased the Spirits of Marr, things have returned to their normal level of danger here in the Graveyard.") +end + +function Reload(Quest, QuestGiver, Player, Step) + if Step == 1 then + Step1_Complete_KilledGraverobbers(Quest, QuestGiver, Player) + elseif Step == 2 then + Step2_Complete_BroughRelics(Quest, QuestGiver, Player) + end +end \ No newline at end of file diff --git a/server/Quests/Graveyard/testing_the_ward.lua b/server/Quests/Graveyard/testing_the_ward.lua new file mode 100644 index 000000000..38f587573 --- /dev/null +++ b/server/Quests/Graveyard/testing_the_ward.lua @@ -0,0 +1,79 @@ +--[[ + Script Name : testing_the_ward.lua + Script Purpose : Handles the quest, "Testing the Ward" + Script Author : Scatman + Script Date : 2009.07.11 + + Zone : The Graveyard + Quest Giver: Custodian Zaddar Sullissia + Preceded by: Finding the Pages (finding_the_pages.lua) + Followed by: Obtaining an Ancient Staff (obtaining_an_ancient_staff.lua) +--]] + + +function Init(Quest) + + + AddQuestStepChat(Quest, 1, "I must speak with Zaddar in the graveyard and obtain the relic from him.", 1, "I must speak with Zaddar and obtain the relic needed.", 0, 1250014) + AddQuestStepCompleteAction(Quest, 1, "Step1_Complete_SpokeToZaddar") + +end + +function Accepted(Quest, QuestGiver, Player) + FaceTarget(QuestGiver, Player) + conversation = CreateConversation() + + PlayFlavor(QuestGiver, "voiceover/english/tutorial_revamp/custodian_zaddar_sullissia/fprt_adv02_graveyard/custodian_zaddar052.mp3", "", "", 3643355771, 3506584636, Player) + AddConversationOption(conversation, "Is something bad going to happen if I take it there?", "dlg_4_16") + AddConversationOption(conversation, "I can't help you with this.") + StartConversation(conversation, QuestGiver, Player, "Yes, the remains of that tower still serve as a tribute to Mithaniel Marr. Such a relic would be seen as an abomination to him.") +end + +function Declined(Quest, QuestGiver, Player) +end + +function Step1_Complete_SpokeToZaddar(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 1, "I have spoken with Zaddar and obtained the relic.") + UpdateQuestTaskGroupDescription(Quest, 1, "I spoke with Zaddar and obtained the relic needed.") + + AddQuestStep(Quest, 2, "I must take this relic to the Tower of Marr in the graveyard.", 1, 100, "Zaddar has given me an ancient relic seeping with unholy power to take to the tower of Marr in the graveyard. He claims that by placing this relic in the doorway of the tower, it will trigger any residual energy of Marr that might still remain. Zaddar feels that if the relic is placed and nothing happens, then the ward has not lost its potency.", 0) + AddQuestStepCompleteAction(Quest, 2, "Step2_Complete_PlacedRelic") +end + +function Step2_Complete_PlacedRelic(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 2, "I've taken the relic to the Tower of Marr as instructed by Zaddar.") + UpdateQuestTaskGroupDescription(Quest, 2, "By placing the unholy relic within the doorway to the tower of Marr, the long-dormant residual energy of the diety Mithaniel Marr was stirred, smiting me in the process. This indication was enough for Zaddar to know that the ward is in fact weakening after four centuries and something must be done.") + + AddQuestStep(Quest, 3, "Retrieve the relic.", 1, 100, "I've placed the relic and been smited for doing so! I need to retrieve the relic!", 0) + AddQuestStepCompleteAction(Quest, 3, "Step3_Complete_GotRelic") +end + +function Step3_Complete_GotRelic(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 3, "I've picked-up the relic and put it in my bag.") + UpdateQuestTaskGroupDescription(Quest, 3, "I've collected the relic.") + + AddQuestStepChat(Quest, 4, "I must speak with Zaddar at once!", 1, "I must return to Zaddar and tell him of what has happened immediately!", 0, 1250014) + AddQuestStepCompleteAction(Quest, 4, "QuestComplete") +end + +function QuestComplete(Quest, QuestGiver, Player) + -- Relic of Unholy Power + while HasItem(Player, 9901) do + RemoveItem(Player, 9901) + end + + UpdateQuestStepDescription(Quest, 4, "I've spoken with Zaddar and told him what has happened.") + UpdateQuestTaskGroupDescription(Quest, 4, "I've spoken with Zaddar.") + GiveQuestReward(Quest, Player) + UpdateQuestDescription(Quest, "I found out firsthand that the ward is weakening. It seems the residual power of Marr still holds sway here.") +end + +function Reload(Quest, QuestGiver, Player, Step) + if Step == 1 then + Step1_Complete_SpokeToZaddar(Quest, QuestGiver, Player) + elseif Step == 2 then + Step2_Complete_PlacedRelic(Quest, QuestGiver, Player) + elseif Step == 3 then + Step3_Complete_GotRelic(Quest, QuestGiver, Player) + end +end diff --git a/server/Quests/Graveyard/the_book_of_the_dead.lua b/server/Quests/Graveyard/the_book_of_the_dead.lua new file mode 100644 index 000000000..91cb726b9 --- /dev/null +++ b/server/Quests/Graveyard/the_book_of_the_dead.lua @@ -0,0 +1,62 @@ +--[[ + Quest Template + Script Name : the_book_of_the_dead.lua + Script Purpose : Handles the quest, "The Book of the Dead" + Script Author : Scatman + Script Date : 2009.07.12 + + Zone : The Graveyard + Quest Giver : Custodian Zaddar Sullissia + Preceded by : Obtaining an Ancient Staff (obtaining_an_ancient_staff.lua) + Followed by : Repairing the Ward (repairing_the_ward.lua) +--]] + + +function Init(Quest) + AddQuestStepKill(Quest, 1, "I must confront the grave robbers in the Freeport graveyard and hope that one of them has found the Book of the Dead.", 1, 20, "I must find the Book of the Dead within the walls of the Freeport graveyard, starting with the graverobbers.", 2002, 1250093, 1250094, 1250092, 1250096) + AddQuestStepCompleteAction(Quest, 1, "Step1_Complete_FoundBook") +end + +function Accepted(Quest, QuestGiver, Player) + FaceTarget(QuestGiver, Player) + conversation = CreateConversation() + + PlayFlavor(QuestGiver, "voiceover/english/tutorial_revamp/custodian_zaddar_sullissia/fprt_adv02_graveyard/custodian_zaddar079b.mp3", "", "", 2915353095, 1248129975, Player) + AddConversationOption(conversation, "I will return when I have it.") + StartConversation(conversation, QuestGiver, Player, "Excellent. Return to me when you have found it.") +end + +function Declined(Quest, QuestGiver, Player) +end + +function Step1_Complete_FoundBook(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 1, "I've obtained the Book of the Dead.") + UpdateQuestTaskGroupDescription(Quest, 1, "I've found the Book of the Dead and must return it to Zaddar.") + + -- The Book of the Dead + -- TODO: Display quest reward popup. + if not HasItem(Player, 12141) then + SummonItem(Player, 12141) + end + + AddQuestStepChat(Quest, 2, "Take the Book of the Dead to Zaddar.", 1, "I must return this ancient tome to Zaddar quickly.", 0, 1250014) + AddQuestStepCompleteAction(Quest, 2, "QuestComplete") +end + +function QuestComplete(Quest, QuestGiver, Player) + -- The Book of the Dead + while HasItem(Player, 12141) do + RemoveItem(Player, 12141) + end + + UpdateQuestStepDescription(Quest, 2, "I've given Zaddar the Book of the Dead.") + UpdateQuestTaskGroupDescription(Quest, 2, "I've given the Book of the Dead to Zaddar.") + GiveQuestReward(Quest, Player) + UpdateQuestDescription(Quest, "I've found one of the last known copies of the Book of the Dead and I've returned it to Zaddar as instructed.") +end + +function Reload(Quest, QuestGiver, Player, Step) + if Step == 1 then + Step1_Complete_FoundBook(Quest, QuestGiver, Player) + end +end \ No newline at end of file diff --git a/server/Quests/Graveyard/the_door_knocker.lua b/server/Quests/Graveyard/the_door_knocker.lua new file mode 100644 index 000000000..629a799b5 --- /dev/null +++ b/server/Quests/Graveyard/the_door_knocker.lua @@ -0,0 +1,108 @@ +--[[ + Script Name : the_door_knocker.lua + Script Purpose : Handles the quest, "The Door Knocker" + Script Author : Scatman + Script Date : 2009.07.09 + + Zone : The Graveyard + Quest Giver: Custodian Zaddar Sullissia + Preceded by: None + Followed by: Paying a Visit (paying_a_visit.lua) +--]] + + +function Init(Quest) + + + AddQuestStep(Quest, 1, "Find the tomb of Sir Penan to the northwest and ensure it is sealed.", 1, 100, "I need to find the tombs of the fallen knights and ensure that they have remained sealed. I should check the larger tombs, the ones that have plaques noting who is buried there.", 2339) + AddQuestStep(Quest, 2, "Find the tomb of Sir Breel to the west and ensure it is sealed.", 1, 100, "I need to find the tombs of the fallen knights and ensure that they have remained sealed. I should check the larger tombs, the ones that have plaques noting who is buried there.", 2339) + AddQuestStepKill(Quest, 3, "Find the tomb of Sir Haligan to the north and ensure it is sealed.", 1, 100, "I need to find the tombs of the fallen knights and ensure that they have remained sealed. I should check the larger tombs, the ones that have plaques noting who is buried there.", 2339, 1250054) + AddQuestStep(Quest, 4, "Find the tomb of Sir Arlin to the southwest and ensure it is sealed.", 1, 100, "I need to find the tombs of the fallen knights and ensure that they have remained sealed. I should check the larger tombs, the ones that have plaques noting who is buried there.", 2339) + AddQuestStep(Quest, 5, "Find the tomb of Sir Xantille to the north and ensure it is sealed.", 1, 100, "I need to find the tombs of the fallen knights and ensure that they have remained sealed. I should check the larger tombs, the ones that have plaques noting who is buried there.", 2339) + AddQuestStepCompleteAction(Quest, 1, "Step1_Complete_FoundTomb1") + AddQuestStepCompleteAction(Quest, 2, "Step2_Complete_FoundTomb2") + AddQuestStepCompleteAction(Quest, 3, "Step3_Complete_FoundTomb3") + AddQuestStepCompleteAction(Quest, 4, "Step4_Complete_FoundTomb4") + AddQuestStepCompleteAction(Quest, 5, "Step5_Complete_FoundTomb5") + +end + +function Accepted(Quest, QuestGiver, Player) + FaceTarget(QuestGiver, Player) + conversation = CreateConversation() + + PlayFlavor(QuestGiver, "voiceover/english/tutorial_revamp/custodian_zaddar_sullissia/fprt_adv02_graveyard/custodian_zaddar030.mp3", "", "", 3091175973, 1298049191, Player) + AddConversationOption(conversation, "The things I do for fame and fortune...") + StartConversation(conversation, QuestGiver, Player, "The Overlord will have us both executed if he finds out anyone has been tampering with the tombs in his graveyard! Report back with what you discover.") +end + +function Declined(Quest, QuestGiver, Player) +end + +function Step1_Complete_FoundTomb1(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 1, "I found the secure tomb of Sir Penan.") + + if QuestIsComplete(Player, 231) then + FoundAllTombs(Quest, QuestGiver, Player) + end +end + +function Step2_Complete_FoundTomb2(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 2, "I found the secure tomb of Sir Breel.") + + if QuestIsComplete(Player, 231) then + FoundAllTombs(Quest, QuestGiver, Player) + end +end + +function Step3_Complete_FoundTomb3(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 3, "The tomb of Sir Haligan appears to have been disturbed.") + + if QuestIsComplete(Player, 231) then + FoundAllTombs(Quest, QuestGiver, Player) + end +end + +function Step4_Complete_FoundTomb4(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 4, "I found the secure tomb of Sir Arlin.") + + if QuestIsComplete(Player, 231) then + FoundAllTombs(Quest, QuestGiver, Player) + end +end + +function Step5_Complete_FoundTomb5(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 5, "I found the secure tomb of Sir Xantille.") + + if QuestIsComplete(Player, 231) then + FoundAllTombs(Quest, QuestGiver, Player) + end +end + +function FoundAllTombs(Quest, QuestGiver, Player) + UpdateQuestTaskGroupDescription(Quest, 1, "I found the tombs that Zaddar asked of me and reported my findings.") + + AddQuestStepChat(Quest, 6, "Return to Zaddar in the Graveyard.", 1, "I must return to Zaddar and let him know of my findings.", 0, 1250014) + AddQuestStepCompleteAction(Quest, 6, "QuestComplete") +end + +function QuestComplete(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 6, "I have returned to Zaddar after checking on the tombs.") + UpdateQuestTaskGroupDescription(Quest, 2, "I have returned to Zaddar and told him of my findings.") + GiveQuestReward(Quest, Player) + UpdateQuestDescription(Quest, "After spending time with Zaddar in the graveyard, he has taught me much of Freeport's history.") +end + +function Reload(Quest, QuestGiver, Player, Step) + if Step == 1 then + Step1_Complete_FoundTomb1(Quest, QuestGiver, Player) + elseif Step == 2 then + Step2_Complete_FoundTomb2(Quest, QuestGiver, Player) + elseif Step == 3 then + Step3_Complete_FoundTomb3(Quest, QuestGiver, Player) + elseif Step == 4 then + Step4_Complete_FoundTomb4(Quest, QuestGiver, Player) + elseif Step == 5 then + Step5_Complete_FoundTomb5(Quest, QuestGiver, Player) + end +end diff --git a/server/Quests/Graystone/a_family_recipe.lua b/server/Quests/Graystone/a_family_recipe.lua new file mode 100644 index 000000000..3e937fada --- /dev/null +++ b/server/Quests/Graystone/a_family_recipe.lua @@ -0,0 +1,93 @@ +--[[ + Script Name : Quests/Graystone/a_family_recipe.lua + Script Purpose : Handles the quest, "A Family Recipe" + Script Author : Scatman + Script Date : 2009.10.05 + + Zone : Graystone Yard + Quest Giver: Mav Boilfist + Preceded by: None + Followed by: Cheers! (cheers.lua) +--]] + +local AFamilyRecipe = 283 + +function Init(Quest) + AddQuestStep(Quest, 1, "I need to acquire some Frozen Cherries. 4QGCG is the shipping number.", 1, 100, "I must collect the needed ingredients for Mav Boilfist. I will need to refer to the overflow shipping manifest she gave me to determine where the items are located.", 770) + AddQuestStep(Quest, 2, "I need to acquire some yeast. 2DF0F is the shipping number.", 1, 100, "I must collect the needed ingredients for Mav Boilfist. I will need to refer to the overflow shipping manifest she gave me to determine where the items are located.", 342) + AddQuestStep(Quest, 3, "I need to acquire some honey. QGC4F is the shipping number.", 1, 100, "I must collect the needed ingredients for Mav Boilfist. I will need to refer to the overflow shipping manifest she gave me to determine where the items are located.", 357) + AddQuestStepCompleteAction(Quest, 1, "Step1_Complete_FoundCherries") + AddQuestStepCompleteAction(Quest, 2, "Step2_Complete_FoundYeast") + AddQuestStepCompleteAction(Quest, 3, "Step3_Complete_FoundHoney") +end + +function Accepted(Quest, QuestGiver, Player) + FaceTarget(QuestGiver, Player) + conversation = CreateConversation() + + -- Overflow Manifest + if not HasItem(Player, 10268, 1) then + SummonItem(Player, 10268, 1) + end + + PlayFlavor(QuestGiver, "voiceover/english/tutorial_revamp/mav_boilfist/qey_village03/quests/mav_boilfist/mav_boilfist010.mp3", "", "", 2473952435, 2751712477, Player) + AddConversationOption(conversation, "I'll go look for them.") + StartConversation(conversation, QuestGiver, Player, "It shouldn't be too hard. The orders you're looking for are #4QGCG, #2DF0F, and #QGC4F.") +end + +function Declined(Quest, QuestGiver, Player) +end + +function Step1_Complete_FoundCherries(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 1, "I have acquired Frozen Cherries.") + + if QuestIsComplete(Player, AFamilyRecipe) then + FoundAllItems(Quest, QuestGiver, Player) + end +end + +function Step2_Complete_FoundYeast(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 2, "I have acquired some yeast.") + + if QuestIsComplete(Player, AFamilyRecipe) then + FoundAllItems(Quest, QuestGiver, Player) + end +end + +function Step3_Complete_FoundHoney(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 3, "I have acquired some honey.") + + if QuestIsComplete(Player, AFamilyRecipe) then + FoundAllItems(Quest, QuestGiver, Player) + end +end + +function FoundAllItems(Quest, QuestGiver, Player) + UpdateQuestTaskGroupDescription(Quest, 1, "I have collected all of the needed ingredients.") + + AddQuestStepChat(Quest, 4, "I need to bring all of these components to Mav Boilfist near the docks.", 1, "I need to bring these ingredients to Mav Boilfist in Graystone Yard.", 0, 2350016) + AddQuestStepCompleteAction(Quest, 4, "Quest_Complete") +end + +function Quest_Complete(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 4, "I have given Mav all of the components she requested.") + UpdateQuestTaskGroupDescription(Quest, 2, "I have given Mav the ingredients she asked for.") + + -- Overflow Manifest + while HasItem(Player, 10268) do + RemoveItem(Player, 10268) + end + + GiveQuestReward(Quest, Player) + UpdateQuestDescription(Quest, "I have collected the ingredients for Mav and returned them to her.") +end + +function Reload(Quest, QuestGiver, Player, Step) + if Step == 1 then + Step1_Complete_FoundCherries(Quest, QuestGiver, Player) + elseif Step == 2 then + Step2_Complete_FoundYeast(Quest, QuestGiver, Player) + elseif Step == 3 then + Step3_Complete_FoundHoney(Quest, QuestGiver, Player) + end +end \ No newline at end of file diff --git a/server/Quests/Graystone/a_missing_husband.lua b/server/Quests/Graystone/a_missing_husband.lua new file mode 100644 index 000000000..a953871a6 --- /dev/null +++ b/server/Quests/Graystone/a_missing_husband.lua @@ -0,0 +1,38 @@ +--[[ + Script Name : Quests/Graystone/A Missing Husband + Script Purpose : Handles the quest, "a_missing_husband.lua" + Script Author : Scatman + Script Date : 2009.10.05 + + Zone : Graystone Yard + Quest Giver: Mav Boilfist + Preceded by: A Stone From Home (a_stone_from_home.lua) + Followed by: None +--]] + +function Init(Quest) + AddQuestStepChat(Quest, 1, "I need to find Marv Boilfist.", 1, "I have agreed to look for Marv, Mav's husband, in the Oakmyst Forest.", 0, 1950025) + AddQuestStepCompleteAction(Quest, 1, "Quest_Complete") +end + +function Accepted(Quest, QuestGiver, Player) + FaceTarget(QuestGiver, Player) + conversation = CreateConversation() + + PlayFlavor(QuestGiver, "voiceover/english/tutorial_revamp/mav_boilfist/qey_village03/quests/mav_boilfist/mav_boilfist033a.mp3", "", "", 2039112314, 2255017414, Player) + AddConversationOption(conversation, "Will do.") + StartConversation(conversation, QuestGiver, Player, "Tell him to hurry home. I miss that old lug.") +end + +function Declined(Quest, QuestGiver, Player) +end + +function Quest_Complete(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 1, "I have found Marv Boilfist.") + UpdateQuestTaskGroupDescription(Quest, 1, "I found Mav's husband.") + GiveQuestReward(Quest, Player) + UpdateQuestDescription(Quest, "I found Marv Boilfist in the Oakmyst Forest.") +end + +function Reload(Quest, QuestGiver, Player, Step) +end \ No newline at end of file diff --git a/server/Quests/Graystone/a_package.lua b/server/Quests/Graystone/a_package.lua new file mode 100644 index 000000000..ee8cf7d65 --- /dev/null +++ b/server/Quests/Graystone/a_package.lua @@ -0,0 +1,67 @@ +--[[ + Script Name : Quests/Graystone/a_package.lua + Script Purpose : Handles the quest, "A Package" + Script Author : Scatman + Script Date : 2009.10.05 + + Zone : Graystone Yard + Quest Giver: Mav Boilfist + Preceded by: Cheers! (cheers.lua) + Followed by: A Stone From Home (a_stone_from_home.lua) +--]] + +function Init(Quest) + AddQuestStepChat(Quest, 1, "I need to speak with the shipping coordinator on the docks.", 1, "I need to get Mav's package for her.", 0, 2350004) + AddQuestStepCompleteAction(Quest, 1, "Step1_Complete_SpokeWithShippingCoordinator") +end + +function Accepted(Quest, QuestGiver, Player) + FaceTarget(QuestGiver, Player) + conversation = CreateConversation() + + PlayFlavor(QuestGiver, "voiceover/english/tutorial_revamp/mav_boilfist/qey_village03/quests/mav_boilfist/mav_boilfist023.mp3", "", "", 3437868051, 3538588348, Player) + AddConversationOption(conversation, "I'll be right back.") + StartConversation(conversation, QuestGiver, Player, "Oh you're simply too sweet to be a dwarf. Thanks.") +end + +function Declined(Quest, QuestGiver, Player) +end + +function Step1_Complete_SpokeWithShippingCoordinator(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 1, "I have spoken with the shipping coordinator.") + + AddQuestStep(Quest, 2, "I need to check the crates down at the end of the docks and see if any of them have Mav's package.", 1, 100, "I need to get Mav's package for her.", 0) + AddQuestStepCompleteAction(Quest, 2, "Step2_Complete_FoundMavsPackage") +end + +function Step2_Complete_FoundMavsPackage(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 2, "I have found Mav's package.") + + AddQuestStepChat(Quest, 3, "I need to clear this package with the shipping coordinator.", 1, "I need to get Mav's package for her.", 0, 2350004) + AddQuestStepCompleteAction(Quest, 3, "Step3_Complete_SpokeWithShippingCoordinator") +end + +function Step3_Complete_SpokeWithShippingCoordinator(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 3, "I have cleared this package.") + + AddQuestStepChat(Quest, 4, "I need to deliver Mav's package to her.", 1, "I need to get Mav's package for her.", 0, 2350016) + AddQuestStepCompleteAction(Quest, 4, "Quest_Complete") +end + +function Quest_Complete(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 4, "I have delivered Mav's package.") + UpdateQuestTaskGroupDescription(Quest, 1, "I have given Mav her package.") + + GiveQuestReward(Quest, Player) + UpdateQuestDescription(Quest, "I have collected Mav's package for her.") +end + +function Reload(Quest, QuestGiver, Player, Step) + if Step == 1 then + Step1_Complete_SpokeWithShippingCoordinator(Quest, QuestGiver, Player) + elseif Step == 2 then + Step2_Complete_FoundMavsPackage(Quest, QuestGiver, Player) + elseif Step == 3 then + Step3_Complete_SpokeWithShippingCoordinator(Quest, QuestGiver, Player) + end +end \ No newline at end of file diff --git a/server/Quests/Graystone/a_stone_from_home.lua b/server/Quests/Graystone/a_stone_from_home.lua new file mode 100644 index 000000000..90cac0f20 --- /dev/null +++ b/server/Quests/Graystone/a_stone_from_home.lua @@ -0,0 +1,60 @@ +--[[ + Script Name : Quests/Graystone/a_stone_from_home.lua + Script Purpose : Handles the quest, "A Stone From Home" + Script Author : Scatman + Script Date : 2009.10.05 + + Zone : Graystone Yard + Quest Giver: Mav Boilfist + Preceded by: A Package (a_package.lua) + Followed by: A Missing Husband (a_missing_husband.lua) +--]] + +function Init(Quest) + AddQuestStep(Quest, 1, "I need to examine Mav's stone while near the Stone of Kaladim in Graystone Yard.", 1, 100, "I need to take Mav's stone to the Stone of Kaladim here in the Graystone Yard and see if anything interesting happens.", 0) + AddQuestStepCompleteAction(Quest, 1, "Step1_Complete_ExaminedStone") +end + +function Accepted(Quest, QuestGiver, Player) + FaceTarget(QuestGiver, Player) + conversation = CreateConversation() + + -- Mav's Stone + if not HasItem(Player, 9384, 1) then + SummonItem(Player, 9384, 1) + end + + PlayFlavor(QuestGiver, "voiceover/english/tutorial_revamp/mav_boilfist/qey_village03/quests/mav_boilfist/mav_boilfist029b.mp3", "", "", 2185318647, 3149226816, Player) + AddConversationOption(conversation, "I can't wait to see what happens!") + AddConversationOption(conversation, "I doubt anything will happen.") + StartConversation(conversation, QuestGiver, Player, "I can't wait to hear what happens!") +end + +function Declined(Quest, QuestGiver, Player) +end + +function Step1_Complete_ExaminedStone(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 1, "I have examined Mav's stone.") + + AddQuestStepChat(Quest, 2, "I should return to Mav Boilfist.", 1, "I need to take Mav's stone to the Stone of Kaladim here in the Graystone Yard and see if anything interesting happens.", 0, 2350016) + AddQuestStepCompleteAction(Quest, 2, "Quest_Complete") +end + +function Quest_Complete(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 2, "I have spoken with Mav Boilfist.") + UpdateQuestTaskGroupDescription(Quest, 1, "I have done as Mav asked.") + + -- Mav's Stone + while HasItem(Player, 9384) do + RemoveItem(Player, 9384) + end + + GiveQuestReward(Quest, Player) + UpdateQuestDescription(Quest, "I have returned Mav's stone to her.") +end + +function Reload(Quest, QuestGiver, Player, Step) + if Step == 1 then + Step1_Complete_ExaminedStone(Quest, QuestGiver, Player) + end +end \ No newline at end of file diff --git a/server/Quests/Graystone/a_time_for_fighting.lua b/server/Quests/Graystone/a_time_for_fighting.lua new file mode 100644 index 000000000..ae89f0776 --- /dev/null +++ b/server/Quests/Graystone/a_time_for_fighting.lua @@ -0,0 +1,86 @@ +--[[ + Script Name : Quests/Graystone/a_time_for_fighting.lua + Script Purpose : Handles the quest, "A Time for Fighting" + Script Author : Scatman + Script Date : 2009.09.27 + + Zone : Graystone Yard + Quest Giver: Burk Stoneshatter + Preceded by: None + Followed by: Late Shipment (late_shipment.lua) +--]] + +local ATIMEFORFIGHTING = 289 + +function Init(Quest) + + -- Ring of the Graystone Mystics + -- Ring of the Graystone Brawlers + + AddQuestStepChat(Quest, 1, "I need to pick a fight with Marus Donoval. I need should make a joke about the smell of his feet. Burk says he should be in the tavern.", 1, "Burk has given me a list of people, their locations, and insults meant to goad them into fighting me.", 0, 2350035) + AddQuestStepChat(Quest, 2, "I need to pick a fight with Angus Fallowfur. I should make a joke about his baldness. Burk says he should be behind the armory, on the corner closest to the docks.", 1, "Burk has given me a list of people, their locations, and insults meant to goad them into fighting me.", 0, 2350009) + AddQuestStepChat(Quest, 3, "I need to pick a fight with Dunda Frostgrip. I should make mention of Mav Boilfist near her. Burk says I can find her just south-west of the scribe's shop.", 1, "Burk has given me a list of people, their locations, and insults meant to goad them into fighting me.", 0, 2350047) + AddQuestStepCompleteAction(Quest, 1, "step1_completed_talkedToMarus") + AddQuestStepCompleteAction(Quest, 2, "step2_completed_talkedToAngus") + AddQuestStepCompleteAction(Quest, 3, "step3_completed_talkedToDunda") +end + +function Accepted(Quest, QuestGiver, Player) + FaceTarget(QuestGiver, Player) + conversation = CreateConversation() + + PlayFlavor(QuestGiver, "voiceover/english/tutorial_revamp/burk_stoneshatter/qey_village03/quests/burk_stoneshatter/burk_stoneshatter013a.mp3", "", "", 1501046701, 172770081, Player) + AddConversationOption(conversation, "All right. I will return.") + StartConversation(conversation, QuestGiver, Player, "Return to me once you've fought them all.") +end + +function Declined(Quest, QuestGiver, Player) +end + +function step1_completed_talkedToMarus(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 1, "I have picked a fight with Marus Donoval.") + + if QuestIsComplete(Player, ATIMEFORFIGHTING) then + insultsGiven(Quest, QuestGiver, Player) + end +end + +function step2_completed_talkedToAngus(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 2, "I have picked a fight with Angus Fallowfur.") + + if QuestIsComplete(Player, ATIMEFORFIGHTING) then + insultsGiven(Quest, QuestGiver, Player) + end +end + +function step3_completed_talkedToDunda(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 3, "I have picked a fight with Dunda Frostgrip.") + + if QuestIsComplete(Player, ATIMEFORFIGHTING) then + insultsGiven(Quest, QuestGiver, Player) + end +end + +function insultsGiven(Quest, QuestGiver, Player) + UpdateQuestTaskGroupDescription(Quest, 1, "I have started fights with all of the people Burk suggested.") + + AddQuestStepChat(Quest, 4, "I need to return to Burk Stoneshatter near the docks.", 1, "I should return to Burk now that I've been in a few fights.", 0, 2350007) + AddQuestStepCompleteAction(Quest, 4, "quest_complete") +end + +function quest_complete(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 4, "I have spoken with Burk Stoneshatter.") + UpdateQuestTaskGroupDescription(Quest, 2, "I have spoken with Burk.") + UpdateQuestDescription(Quest, "I have gotten into three fights around Graystone Yard at the suggestion of Burk Stoneshatter.") + GiveQuestReward(Quest, Player) +end + +function Reload(Quest, QuestGiver, Player, Step) + if Step == 1 then + step1_completed_talkedToMarus(Quest, QuestGiver, Player) + elseif Step == 2 then + step2_completed_talkedToAngus(Quest, QuestGiver, Player) + elseif Step == 3 then + step3_completed_talkedToDunda(Quest, QuestGiver, Player) + end +end \ No newline at end of file diff --git a/server/Quests/Graystone/cheers.lua b/server/Quests/Graystone/cheers.lua new file mode 100644 index 000000000..aeadda264 --- /dev/null +++ b/server/Quests/Graystone/cheers.lua @@ -0,0 +1,108 @@ +--[[ + Script Name : Quests/Graystone/cheers.lua + Script Purpose : Handles the quest, "Cheers!" + Script Author : Scatman + Script Date : 2009.10.05 + + Zone : Graystone Yard + Quest Giver: Mav Boilfist + Preceded by: A Family Recipe (a_family_recipe.lua) + Followed by: A Package (a_package.lua) +--]] + +local CHEERS_QUEST = 285 + +function Init(Quest) + AddQuestStep(Quest, 1, "I need to collect Mav's brew from the keg next to her.", 1, 100, "I need to collect some of Mav's brew from the keg next to her.", 0) + AddQuestStepCompleteAction(Quest, 1, "Step1_Complete_GotBrewFromKeg") +end + +function Accepted(Quest, QuestGiver, Player) + FaceTarget(QuestGiver, Player) + conversation = CreateConversation() + + PlayFlavor(QuestGiver, "voiceover/english/tutorial_revamp/mav_boilfist/qey_village03/quests/mav_boilfist/mav_boilfist017a.mp3", "", "", 4196748864, 1238448420, Player) + AddConversationOption(conversation, "We'll see.") + StartConversation(conversation, QuestGiver, Player, "I hope they like it!") +end + +function Declined(Quest, QuestGiver, Player) +end + +function Step1_Complete_GotBrewFromKeg(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 1, "I have collected Mav's brew.") + UpdateQuestTaskGroupDescription(Quest, 1, "I have collected Mav's brew.") + + AddQuestStepChat(Quest, 2, "I need to give some of Mav's brew to Gnor Farven in the tavern.", 1, "I need to give samples of Mav's brew to a number of people around Graystone Yard.", 0, 2350036) + AddQuestStepChat(Quest, 3, "I need to give some of Mav's brew to Gurna Hadel in the tavern.", 1, "I need to give samples of Mav's brew to a number of people around Graystone Yard.", 0, 2350042) + AddQuestStepChat(Quest, 4, "I need to give some of Mav's brew to Dunda Frostgrip southwest of the scribe's shop.", 1, "I need to give samples of Mav's brew to a number of people around Graystone Yard.", 0, 2350047) + AddQuestStepCompleteAction(Quest, 2, "Step2_Complete_SpokeWithGnor") + AddQuestStepCompleteAction(Quest, 3, "Step3_Complete_SpokeWithGurna") + AddQuestStepCompleteAction(Quest, 4, "Step4_Complete_SpokeWithDunda") +end + +function Step2_Complete_SpokeWithGnor(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 2, "I have given some of Mav's brew to Gnor Farven.") + + -- Mav's Brew + if HasItem(Player, 9383) then + RemoveItem(Player, 9383) + end + + if QuestIsComplete(Player, CHEERS_QUEST) then + SpokeWithAllFriends(Quest, QuestGiver, Player) + end +end + +function Step3_Complete_SpokeWithGurna(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 3, "I have given some of Mav's brew to Gurna Hadel.") + + -- Mav's Brew + if HasItem(Player, 9383) then + RemoveItem(Player, 9383) + end + + if QuestIsComplete(Player, CHEERS_QUEST) then + SpokeWithAllFriends(Quest, QuestGiver, Player) + end +end + +function Step4_Complete_SpokeWithDunda(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 4, "I have given some of Mav's brew to Dunda Frostgrip.") + + -- Mav's Brew + if HasItem(Player, 9383) then + RemoveItem(Player, 9383) + end + + if QuestIsComplete(Player, CHEERS_QUEST) then + SpokeWithAllFriends(Quest, QuestGiver, Player) + end +end + +function SpokeWithAllFriends(Quest, QuestGiver, Player) + UpdateQuestTaskGroupDescription(Quest, 2, "I have given samples of Mav's brew to a number of people around Graystone Yard.") + + AddQuestStepChat(Quest, 5, "I need to speak with Mav Boilfist.", 1, "I should return to Mav and let her know what everyone thought of her brew.", 0, 2350016) + AddQuestStepCompleteAction(Quest, 5, "Quest_Complete") +end + +function Quest_Complete(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 5, "I have spoken with Mav Boilfist.") + UpdateQuestTaskGroupDescription(Quest, 3, "I have given Mav the rest of her brew.") + + GiveQuestReward(Quest, Player) + UpdateQuestDescription(Quest, "I have given some of Mav's brew to those who wanted to try it. I then told Mav about their reactions, she seemed pleased.") +end + +function Reload(Quest, QuestGiver, Player, Step) + if Step == 1 then + Step1_Complete_GotBrewFromKeg(Quest, QuestGiver, Player) + elseif Step == 2 then + Step2_Complete_SpokeWithGnor(Quest, QuestGiver, Player) + elseif Step == 3 then + Step3_Complete_SpokeWithGurna(Quest, QuestGiver, Player) + elseif Step == 4 then + Step4_Complete_SpokeWithDunda(Quest, QuestGiver, Player) + end +end \ No newline at end of file diff --git a/server/Quests/Graystone/finding_bait.lua b/server/Quests/Graystone/finding_bait.lua new file mode 100644 index 000000000..5d10891e5 --- /dev/null +++ b/server/Quests/Graystone/finding_bait.lua @@ -0,0 +1,51 @@ +--[[ + Script Name : Quests/Graystone/finding_bait.lua + Script Purpose : Handles the quest, "Finding Bait" + Script Author : Scatman + Script Date : 2008.09.18 + + Zone : Graystone Yard + Quest Giver: Tacklemaster Moyna + Preceded by: None + Followed by: None +--]] + +function Init(Quest) + AddQuestStepKill(Quest, 1, "I need to kill centipedes, or crawlers, for Moyna is use as bait.", 10, 100, "I must kill ten centipedes in the Forest Ruins and gather their remains for use as bait.", 1, 1960026) + AddQuestStepCompleteAction(Quest, 1, "step1_completed_killedCentipedes") +end + +function Accepted(Quest, QuestGiver, Player) + FaceTarget(QuestGiver, Player) + conversation = CreateConversation() + + PlayFlavor(QuestGiver, "voiceover/english/tacklemaster_moyna/qey_village03/100_tacklemaster_barbarian_female_moyna_multhail3_629de1e4.mp3", "", "", 1963777615, 3216865707, Player) + AddConversationOption(conversation, "Calm down! I haven't left yet!") + StartConversation(conversation, QuestGiver, Player, "What's taking you so long, friend? I don't have all day! Fetch me my centipedes!") +end + +function Declined(Quest, QuestGiver, Player) +end + +function step1_completed_killedCentipedes(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 1, "I've killed ten centipedes for Moyna.") + UpdateQuestTaskGroupDescription(Quest, 1, "I've killed ten centipedes and gathered their remains for Moyna's bait.") + UpdateQuestZone(Quest, "Graystone Yard") + + AddQuestStepChat(Quest, 2, "I must speak with tacklemaster Moyna.", 1, "I must return to tacklemaster Moyna in the Graystone Yard for my payment", 0, 2350020) + AddQuestStepCompleteAction(Quest, 2, "QuestComplete") +end + +function QuestComplete(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 2, "I've spoken with tacklemaster Moyna.") + UpdateQuestTaskGroupDescription(Quest, 2, "I've returned to tacklemaster Moyna in the Graystone Yard.") + + UpdateQuestDescription(Quest, "Moyna praised me for a job well done after gathering up the centipedes she needed. She's certain that the bait will last for at least a couple days, even with the amount of fishing Brice and Ubani do.") + GiveQuestReward(Quest, Player) +end + +function Reload(Quest, QuestGiver, Player, Step) + if step == 1 then + step1_completed_killedCentipedes(Quest, QuestGiver, Player) + end +end diff --git a/server/Quests/Graystone/in_the_drink.lua b/server/Quests/Graystone/in_the_drink.lua new file mode 100644 index 000000000..7e6fb2114 --- /dev/null +++ b/server/Quests/Graystone/in_the_drink.lua @@ -0,0 +1,104 @@ +--[[ + Script Name : Quests/Graystone/in_the_drink.lua + Script Purpose : Handles the quest, "In the Drink" + Script Author : Scatman + Script Date : 2009.09.27 + + Zone : Graystone Yard + Quest Giver: Shipping Coordinator + Preceded by: Late Shipment (late_shipment.lua) + Followed by: Visiting a Friend (visiting_a_friend.lua) +--]] + +-- Quest ID's +local IN_THE_DRINK = 291 + +-- Item ID's +local LOCATION_BUOYS = 9109 + +function Init(Quest) + AddQuestStep(Quest, 1, "I need to attatch a location buoy to the first crate lost in the water", 1, 100, "I need to attatch a location buoy to each of the three lost boxes in the water.", 0) + AddQuestStep(Quest, 2, "I need to attatch a location buoy to the second crate lost in the water", 1, 100, "I need to attatch a location buoy to each of the three lost boxes in the water.", 0) + AddQuestStep(Quest, 3, "I need to attatch a location buoy to the third crate lost in the water", 1, 100, "I need to attatch a location buoy to each of the three lost boxes in the water.", 0) + AddQuestStepCompleteAction(Quest, 1, "step1_complete_buoy1Attatched") + AddQuestStepCompleteAction(Quest, 2, "step2_complete_buoy2Attatched") + AddQuestStepCompleteAction(Quest, 3, "step3_complete_buoy3Attatched") +end + +function Accepted(Quest, QuestGiver, Player) + FaceTarget(QuestGiver, Player) + conversation = CreateConversation() + + -- Location Buoys + if not HasItem(Player, LOCATION_BUOYS, 1) then + SummonItem(Player, LOCATION_BUOYS, 1) + end + + AddConversationOption(conversation, "Ok.") + StartConversation(conversation, QuestGiver, Player, "Come back as soon as you've connected the last of them.") +end + +function Declined(Quest, QuestGiver, Player) +end + +function step1_complete_buoy1Attatched(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 1, "I have attached a location buoy to the first crate.") + + if QuestIsComplete(Player, IN_THE_DRINK) then + all_buoys_placed(Quest, QuestGiver, Player) + end +end + +function step2_complete_buoy2Attatched(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 2, "I have attached a location buoy to the second crate.") + + if QuestIsComplete(Player, IN_THE_DRINK) then + all_buoys_placed(Quest, QuestGiver, Player) + end +end + +function step3_complete_buoy3Attatched(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 3, "I have attached a location buoy to the third crate.") + + if QuestIsComplete(Player, IN_THE_DRINK) then + all_buoys_placed(Quest, QuestGiver, Player) + end +end + +function all_buoys_placed(Quest, QuestGiver, Player) + UpdateQuestTaskGroupDescription(Quest, 1, "I have attatched a location buoy to each of the lost boxes.") + + -- Location Buoys + while HasItem(Player, LOCATION_BUOYS) do + RemoveItem(Player, LOCATION_BUOYS) + end + + AddQuestStepChat(Quest, 4, "I need to tell the Shipping Coordinator that everything is hooked up.", 1, "I have recovered Burk's package, along with other portions of the missing shipment, from the water.", 0, 2350004) + AddQuestStepCompleteAction(Quest, 4, "step4_complete_talkedToCoordinator") +end + +function step4_complete_talkedToCoordinator(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 4, "I have spoken to the Shipping Coordinator.") + + AddQuestStepChat(Quest, 5, "I need to give Burk his package.", 1, "I have recovered Burk's package, along with other portions of the missing shipment, from the water.", 0, 2350007) + AddQuestStepCompleteAction(Quest, 5, "quest_complete") +end + +function quest_complete(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 5, "I have given Burk his package.") + UpdateQuestTaskGroupDescription(Quest, 2, "I have given Burk his package.") + UpdateQuestDescription(Quest, "I helped the Shipping Coordinator take care of the sunk cargo. I also found Burk's shipment and got it to him.") + GiveQuestReward(Quest, Player) +end + +function Reload(Quest, QuestGiver, Player, Step) + if Step == 1 then + step1_complete_buoy1Attatched(Quest, QuestGiver, Player) + elseif Step == 2 then + step2_complete_buoy2Attatched(Quest, QuestGiver, Player) + elseif Step == 3 then + step3_complete_buoy3Attatched(Quest, QuestGiver, Player) + elseif Step == 4 then + step4_complete_talkedToCoordinator(Quest, QuestGiver, Player) + end +end \ No newline at end of file diff --git a/server/Quests/Graystone/late_shipment.lua b/server/Quests/Graystone/late_shipment.lua new file mode 100644 index 000000000..e0ed42cf0 --- /dev/null +++ b/server/Quests/Graystone/late_shipment.lua @@ -0,0 +1,112 @@ +--[[ + Script Name : Quests/Graystone/late_shipment.lua + Script Purpose : Handles the quest, "Late Shipment" + Script Author : Scatman + Script Date : 2009.09.27 + + Zone : Graystone Yard + Quest Giver: Burk Stoneshatter + Preceded by: A Time For Fighting (a_time_for_fighting.lua) + Followed by: In the Drink (in_the_drink.lua) +--]] + +-- Items +local OVERFLOW_MANIFEST = 10268 + +function Init(Quest) + AddQuestStep(Quest, 1, "I should check the Overflow Manifest that Burk gave me to figure out where I might find the Graystone Courier.", 1, 100, "I need to figure out what has happened to Burk's package.", 0) + AddQuestStepCompleteAction(Quest, 1, "step1_complete_inspectedManifest") +end + +function Accepted(Quest, QuestGiver, Player) + FaceTarget(QuestGiver, Player) + conversation = CreateConversation() + + -- Overflow Manifest + if not HasItem(Player, OVERFLOW_MANIFEST, 1) then + SummonItem(Player, OVERFLOW_MANIFEST, 1) + end + + PlayFlavor(QuestGiver, "voiceover/english/tutorial_revamp/burk_stoneshatter/qey_village03/quests/burk_stoneshatter/burk_stoneshatter018.mp3", "", "", 2230644689, 1477811469, Player) + AddConversationOption(conversation, "All right, I'll return soon.") + StartConversation(conversation, QuestGiver, Player, "Hah hah hah! No, don't do that. Just see if he knows where my package is.") +end + +function Declined(Quest, QuestGiver, Player) +end + +function Deleted(Quest, QuestGiver, Player) +end + +function step1_complete_inspectedManifest(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 1, "I have read the Overflow Manifest.") + + AddQuestStepChat(Quest, 2, "I need to ask the Graystone Courier about Burk's shipment. I should check the locations given on the Overflow Manifest.", 1, "I need to figure out what has happened to Burk's package.", 0, 2350048) + AddQuestStepCompleteAction(Quest, 2, "step2_complete_talkedToCourier") +end + +function step2_complete_talkedToCourier(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 2, "I have questioned the Graystone Courier.") + + AddQuestStepChat(Quest, 3, "The courier doesn't have Burk's package, but suggested I talk to the Shipping Coordinator on the docks.", 1, "I need to figure out what has happened to Burk's package.", 0, 2350004) + AddQuestStepCompleteAction(Quest, 3, "step3_complete_talkedToCoordinator") +end + +function step3_complete_talkedToCoordinator(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 3, "I have spoken with the Shipping Coordinator") + UpdateQuestTaskGroupDescription(Quest, 1, "I have spoken with a number of people but I am still not sure what has happened to Burk's package.") + + -- Overflow Manifest + while HasItem(Player, OVERFLOW_MANIFEST) do + RemoveItem(Player, OVERFLOW_MANIFEST) + end + + AddQuestStep(Quest, 4, "I need to check all 13 of the boxes and barrels on the docks to see if any of them are from Shipment #GG4QC", 13, 100, "The Shipping Coordinator has suggested that I check the shipment at the end of the docks for Burk's package.", 2285) + AddQuestStepCompleteAction(Quest, 4, "step4_complete_inspectedBarrels") +end + +function step4_complete_inspectedBarrels(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 4, "There are many shipments on the docks and they are all labeled. None of them appear to be shipment #GG4QC.") + UpdateQuestTaskGroupDescription(Quest, 2, "I did not find Burk's package in the shipment on the docks.") + + AddQuestStepChat(Quest, 5, "Burk's shipment was not among the newer boxes, I should speak with the Shipping Coordinator again.", 1, "I still have not found Burk's package.", 0, 2350004) + AddQuestStepCompleteAction(Quest, 5, "step5_complete_talkedToCoordinator") +end + +function step5_complete_talkedToCoordinator(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 5, "I have spoken with the Shipping Coordinator.") + + AddQuestStepChat(Quest, 6, "The Shipping Coordinator has suggested I speak with the dock loader, Marus Donoval. He says he should be in the tavern.", 1, "I still have not found Burk's package.", 0, 2350035) + AddQuestStepCompleteAction(Quest, 6, "step6_complete_talkedToMarus") +end + +function step6_complete_talkedToMarus(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 6, "I have spoken with Marus Donoval.") + + AddQuestStepChat(Quest, 7, "Marus Donoval thinks some crates may have fallen into the water. I should speak with the Shipping Coordinator about this.", 1, "I still have not found Burk's package.", 0, 2350004) + AddQuestStepCompleteAction(Quest, 7, "quest_complete") +end + +function quest_complete(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 7, "I have spoken with the Shipping Coordinator.") + UpdateQuestTaskGroupDescription(Quest, 3, "I believe I may know what happened to Burk's package.") + + UpdateQuestDescription(Quest, "I have determined what has happened to Burk's missing shipment. I may be able to work with the Shipping Coordinator in the Graystone Yard to get it back.") + GiveQuestReward(Quest, Player) +end + +function Reload(Quest, QuestGiver, Player, Step) + if Step == 1 then + step1_complete_inspectedManifest(Quest, QuestGiver, Player) + elseif Step == 2 then + step2_complete_talkedToCourier(Quest, QuestGiver, Player) + elseif Step == 3 then + step3_complete_talkedToCoordinator(Quest, QuestGiver, Player) + elseif Step == 4 then + step4_complete_inspectedBarrels(Quest, QuestGiver, Player) + elseif Step == 5 then + step5_complete_talkedToCoordinator(Quest, QuestGiver, Player) + elseif Step == 6 then + step6_complete_talkedToMarus(Quest, QuestGiver, Player) + end +end \ No newline at end of file diff --git a/server/Quests/Graystone/visiting_a_friend.lua b/server/Quests/Graystone/visiting_a_friend.lua new file mode 100644 index 000000000..17583f971 --- /dev/null +++ b/server/Quests/Graystone/visiting_a_friend.lua @@ -0,0 +1,38 @@ +--[[ + Script Name : Quests/Graystone/visiting_a_friend.lua + Script Purpose : Handles the quest, "Visiting a Friend" + Script Author : Scatman + Script Date : 2009.09.27 + + Zone : Graystone Yard + Quest Giver: Burk Stoneshatter + Preceded by: In the Drink (in_the_drink.lua) + Followed by: None +--]] + +function Init(Quest) + AddQuestStepChat(Quest, 1, "I need to speak with Jorn Sorefoot in Oakmyst Forest near the gate to Graystone Yard.", 1, "I need to travel to the Oakmyst Forest and find Jorn Sorefoot.", 0, 1950012) + AddQuestStepCompleteAction(Quest, 1, "quest_complete") +end + +function Accepted(Quest, QuestGiver, Player) + FaceTarget(QuestGiver, Player) + conversation = CreateConversation() + + PlayFlavor(QuestGiver, "voiceover/english/tutorial_revamp/burk_stoneshatter/qey_village03/quests/burk_stoneshatter/burk_stoneshatter027a.mp3", "", "", 3983218071, 1048289693, Player) + AddConversationOption(conversation, "Thank you.") + StartConversation(conversation, QuestGiver, Player, "You deserve the best in this world, " .. GetName(Player) .. ". Please be well.") +end + +function Declined(Quest, QuestGiver, Player) +end + +function quest_complete(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 1, "I have spoken with Jorn Sorefoot.") + UpdateQuestTaskGroupDescription(Quest, 1, "I have found and spoke to Jorn Sorefoot.") + UpdateQuestDescription(Quest, "I have spoken with Jorn Sorefoot.") + GiveQuestReward(Quest, Player) +end + +function Reload(Quest, QuestGiver, Player, Step) +end \ No newline at end of file diff --git a/server/Quests/GreaterFaydark/bee_swatter.lua b/server/Quests/GreaterFaydark/bee_swatter.lua new file mode 100644 index 000000000..4d2456a73 --- /dev/null +++ b/server/Quests/GreaterFaydark/bee_swatter.lua @@ -0,0 +1,51 @@ +--[[ + Script Name : Quests/GreaterFaydark/bee_swatter.lua + Script Purpose : Handles the quest, "Bee Swatter" + Script Author : Scatman + Script Date : 2009.03.29 + + Zone : Greater Faydark + Quest Giver: Ami Augren + Preceded by: None + Followed by: Broken Buttons (broken_buttons.lua) +--]] + + +function Init(Quest) + + + AddQuestStepKill(Quest, 1, "I need to swat a few stingswarm buzzers to try and make Ami stop crying.", 5, 100, "Little Ami is scared of all the stringswarm buzzers that are flying around the area. If I swat a few of them it might make her happy.", 110, 1140020) + AddQuestStepCompleteAction(Quest, 1, "Step1_Complete_KilledBees") + +end + +function Accepted(Quest, QuestGiver, Player) + FaceTarget(QuestGiver, Player) + conversation = CreateConversation() + + PlayFlavor(QuestGiver, "voiceover/english/exp03_questvo2/ami_augren/_exp03/exp03_rgn_greater_faydark/ami_augren/ami_augren003.mp3", "", "", 240117721, 1491988690, Player) + AddConversationOption(conversation, "I'll take care of them.") + StartConversation(conversation, QuestGiver, Player, "They make owies! Don't let them pinch you!") +end + +function Declined(Quest, QuestGiver, Player) +end + +function Step1_Complete_KilledBees(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 1, "I swatted a few of the stingswarm buzzers. Hopefully that will make Ami stop crying.") + UpdateQuestTaskGroupDescription(Quest, 1, "I swatted a few of the stingswarm buzzers. Hopefully that will make Ami stop crying.") + + AddQuestStepChat(Quest, 2, "I should tell Ami I chased away the buzzers.", 1, "I should go back to Ami Augren and tell her I chased away the stingswarm buzzers.", 110, 1140019) + AddQuestStepCompleteAction(Quest, 2, "Quest_Complete") +end + +function Quest_Complete(Quest, QuestGiver, Player) + UpdateQuestDescription(Quest, "I swatted a few of the bees that were bothering Ami Augren. I hope this calms her down somewhat.") + GiveQuestReward(Quest, Player) +end + +function Reload(Quest, QuestGiver, Player, Step) + if Step == 1 then + Step1_Complete_KilledBees(Quest, QuestGiver, Player) + end +end diff --git a/server/Quests/GreaterFaydark/broken_buttons.lua b/server/Quests/GreaterFaydark/broken_buttons.lua new file mode 100644 index 000000000..5d2ce667f --- /dev/null +++ b/server/Quests/GreaterFaydark/broken_buttons.lua @@ -0,0 +1,42 @@ +--[[ + Script Name : Quests/GreaterFaydark/broken_buttons.lua + Script Purpose : Handles the quest, "Broken Buttons" + Script Author : Scatman + Script Date : 2009.03.29 + + Zone : Greater Faydark + Quest Giver: Ami Augren + Preceded by: Shells of Protection (shells_of_protection.lua) + Followed by: Dollnapping! (dollnapping.lua) +--]] + + +function Init(Quest) + -- Aged Chain + -- Augren Friendship Token + + + AddQuestStepChat(Quest, 1, "I need to give the coat and buttons to Ami's mother. She should be near the spirit bloom nursery.", 1, ".", 281, 1140018) + AddQuestStepCompleteAction(Quest, 1, "Quest_Complete") + +end + +function Accepted(Quest, QuestGiver, Player) + FaceTarget(QuestGiver, Player) + conversation = CreateConversation() + + PlayFlavor(QuestGiver, "voiceover/english/exp03_questvo2/ami_augren/_exp03/exp03_rgn_greater_faydark/ami_augren/ami_augren010.mp3", "", "", 3660711041, 3242516728, Player) + AddConversationOption(conversation, "I will.") + StartConversation(conversation, QuestGiver, Player, "Tell her I didn't mean to break it.") +end + +function Declined(Quest, QuestGiver, Player) +end + +function Quest_Complete(Quest, QuestGiver, Player) + UpdateQuestDescription(Quest, "I gave Ami's coat to her mother, Sua. Sua said she'd fix the buttons. I hope that stops Ami from crying.") + GiveQuestReward(Quest, Player) +end + +function Reload(Quest, QuestGiver, Player, Step) +end diff --git a/server/Quests/GreaterFaydark/dollnapping.lua b/server/Quests/GreaterFaydark/dollnapping.lua new file mode 100644 index 000000000..617c8ba88 --- /dev/null +++ b/server/Quests/GreaterFaydark/dollnapping.lua @@ -0,0 +1,56 @@ +--[[ + Script Name : Quests/GreaterFaydark/dollnapping.lua + Script Purpose : Handles the quest, "Dollnapping!" + Script Author : Scatman + Script Date : 2009.03.29 + + Zone : Greater Faydark + Quest Giver: Sua Augren + Preceded by: Broken Buttons (broken_buttons.lua) + Followed by: None +--]] + + +function Init(Quest) + -- Elder's Crown + -- Redstone Loop + -- Golden Wraps + -- Steel Plated Shield + -- Dewdrop Trinket + + + AddQuestStepKill(Quest, 1, "I need to get Ami's doll back from the Klixie, Yellowjacket. The Klixies hang around the area to the southeast of Amethyst Pond.", 1, 100, "I should find the Klixie called Yellowjacket and get Ami's doll back for her. The Klixies usually hang around to the south east of Amethyst Pond.", 2254, 1140052) + AddQuestStepCompleteAction(Quest, 1, "Step1_Complete_KilledYellowjacket") + +end + +function Accepted(Quest, QuestGiver, Player) + FaceTarget(QuestGiver, Player) + conversation = CreateConversation() + + PlayFlavor(QuestGiver, "voiceover/english/exp03_questvo2/sua_augren/_exp03/exp03_rgn_greater_faydark/sua_augren/sua_augren006.mp3", "", "", 2584537319, 806721000, Player) + AddConversationOption(conversation, "No problem. I'll get the doll for Ami.") + StartConversation(conversation, QuestGiver, Player, "I couldn't ask you to do that. It would be wonderful if Ami got her doll back, but it's too dangerous.") +end + +function Declined(Quest, QuestGiver, Player) +end + +function Step1_Complete_KilledYellowjacket(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 1, "I got Ami's doll back from the Klixie Yellowjacket.") + UpdateQuestTaskGroupDescription(Quest, 1, "I got Ami's doll back from the Klixie Yellowjacket.") + + AddQuestStepChat(Quest, 2, "I should give the doll I recovered back to Ami.", 1, "I should give the doll I recovered from Yellowjacket to Ami Augren. It would make her really happy to see it.", 2254, 1140019) + AddQuestStepCompleteAction(Quest, 2, "Quest_Complete") +end + +function Quest_Complete(Quest, QuestGiver, Player) + UpdateQuestDescription(Quest, "I got Ami's doll back from Yellowjacket and returned it to her. Ami seems much happier now that she has her favorite toy again.") + GiveQuestReward(Quest, Player) +end + +function Reload(Quest, QuestGiver, Player, Step) + if Step == 1 then + Step1_Complete_KilledYellowjacket(Quest, QuestGiver, Player) + end +end diff --git a/server/Quests/GreaterFaydark/dyer_mycoria.lua b/server/Quests/GreaterFaydark/dyer_mycoria.lua new file mode 100644 index 000000000..69af2fea4 --- /dev/null +++ b/server/Quests/GreaterFaydark/dyer_mycoria.lua @@ -0,0 +1,40 @@ +--[[ + Script Name : Quests/GreaterFaydark/dyer_mycoria.lua + Script Purpose : Handles the quest, "Dyer Mycoria" + Script Author : Scatman + Script Date : 2009.03.29 + + Zone : Greater Faydark + Quest Giver: Morganellus + Preceded by: None + Followed by: None +--]] + + +function Init(Quest) + + + AddQuestStepChat(Quest, 1, "I need to speak with Agarighus in Dyer Mycoria.", 1, ".", 0, 1140129) + AddQuestStepCompleteAction(Quest, 1, "Quest_Complete") + +end + +function Accepted(Quest, QuestGiver, Player) + FaceTarget(QuestGiver, Player) + conversation = CreateConversation() + + PlayFlavor(QuestGiver, "voiceover/english/exp03_questvo2/morganellus/_exp03/exp03_rgn_greater_faydark/shroomba/morganellus/morganellus004.mp3", "", "", 2956711105, 2602303407, Player) + AddConversationOption(conversation, "All right, I'll just find him.") + StartConversation(conversation, QuestGiver, Player, "Why would I want that? You are going to Dyer Mycoria, not me.") +end + +function Declined(Quest, QuestGiver, Player) +end + +function Quest_Complete(Quest, QuestGiver, Player) + UpdateQuestDescription(Quest, "I have found Agarighus.") + GiveQuestReward(Quest, Player) +end + +function Reload(Quest, QuestGiver, Player, Step) +end diff --git a/server/Quests/GreaterFaydark/grobin_trouble_at_the_pond.lua b/server/Quests/GreaterFaydark/grobin_trouble_at_the_pond.lua new file mode 100644 index 000000000..2e8447f78 --- /dev/null +++ b/server/Quests/GreaterFaydark/grobin_trouble_at_the_pond.lua @@ -0,0 +1,52 @@ +--[[ + Script Name : Quests/GreaterFaydark/grobin_trouble_at_the_pond.lua + Script Purpose : Handles the quest Grobin Trouble at the Pond + Script Author : Zcoretri + Script Date : 2009.03.04 + + Zone : Greater Faydark + Quest Giver: Matron of the Nursery + Preceded by: Running Off the Grobin Scouts + Followed by: Herbs of Healing and Growth +--]] + + +function Init(Quest) + AddQuestStepKill(Quest, 1, "I need to stop the grobin polluters at Amethyst Pond to the southwest of the nursery.", 4, 100, "I need to get rid of the grobin polluters at Amethyst Pond, southwest of the nursery. Hopefully, I'll be able to find out what they are up to there.", 354, 1140026) + AddQuestStepCompleteAction(Quest, 1, "KilledAllPolluters") + + +end + +function Accepted(Quest, QuestGiver, Player) + if QuestGiver ~= nil then + if GetDistance(Player, QuestGiver) < 30 then + FaceTarget(QuestGiver, Player) + conversation = CreateConversation() + PlayFlavor(QuestGiver, "voiceover/english/exp03_questvo2/matron_of_the_nursery/_exp03/exp03_rgn_greater_faydark/matron_of_the_nursery/matron_of_the_nursery008.mp3", "", "", 3433160215, 2503556383, Player) + AddConversationOption(conversation, "I'll do my best to find out.") + StartConversation(conversation, QuestGiver, Player, "Thank you, " .. GetName(Player) .. ". The grobins are usually up to something devious. I hope you can find out what it is for the sake of the spirit bloom nursery.") + end + end +end + +function Declined(Quest, QuestGiver, Player) +end + +function KilledAllPolluters(Quest, QuestGiver, Player) + UpdateQuestTaskGroupDescription(Quest, 1, "I ran off the polluters and found out they had jars of shrumber eggs they were pouring into the pond!") + AddQuestStepChat(Quest, 2, "I should tell the Matron of the Nursery about jars of shrumbler eggs I found on the grobin polluters.", 1, "I should return to the Matron of the Nursery and show her the jars of eggs I found on the grobin polluters.", 0, 1140004) + AddQuestStepCompleteAction(Quest, 2, "QuestComplete") +end + +function QuestComplete(Quest, QuestGiver, Player) + UpdateQuestDescription(Quest, "I found out the grobin polluters at Amethyst Pond were pouring shrumbler eggs in the pond. They were definitely behind the infestation of the spirit bloom nursery. but where did they get all those eggs...?") + GiveQuestReward(Quest, Player) +end + +function Reload(Quest, QuestGiver, Player) + if Step == 1 then + KilledAllPolluters(Quest, QuestGiver, Player) + end +end + diff --git a/server/Quests/GreaterFaydark/growler_pelts_for_brink.lua b/server/Quests/GreaterFaydark/growler_pelts_for_brink.lua new file mode 100644 index 000000000..03ebb3e40 --- /dev/null +++ b/server/Quests/GreaterFaydark/growler_pelts_for_brink.lua @@ -0,0 +1,54 @@ +--[[ + Script Name : Quests/GreaterFaydark/growler_pelts_for_brink.lua + Script Purpose : Handles the quest, "Growler Pelts for Brink" + Script Author : Scatman + Script Date : 2009.03.28 + + Zone : Greater Faydark + Quest Giver: Brink Trudger + Preceded by: None + Followed by: Spider Silk for Brink (spider_silk_for_brink.lua) +--]] + + +function Init(Quest) + -- Brink's Finely Crafted Earring + -- Brink's Carved Wooden Bow + -- Brink's Finely Stitched Bracers + + + AddQuestStepKill(Quest, 1, "I need to get growler pelts. The growlers should be found west of the spirit bloom nursery.", 5, 100, "I need to acquire growler pelts for Brink Trudger. I should be able to find the growlers just west of the spirit bloom nursery.", 93, 1140021, 1140033) + AddQuestStepCompleteAction(Quest, 1, "Step1_Complete_KilledGrowlers") + +end + +function Accepted(Quest, QuestGiver, Player) + FaceTarget(QuestGiver, Player) + conversation = CreateConversation() + + PlayFlavor(QuestGiver, "voiceover/english/exp03_questvo2/brink_trudger/_exp03/exp03_rgn_greater_faydark/brink_trudger/brink_trudger003_offer.mp3", "", "", 179963171, 4058842652, Player) + AddConversationOption(conversation, "This should be no problem.") + StartConversation(conversation, QuestGiver, Player, "Great! I appreciate it!") +end + +function Declined(Quest, QuestGiver, Player) +end + +function Step1_Complete_KilledGrowlers(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 1, "I should have enough growler pelts now for Brink.") + UpdateQuestTaskGroupDescription(Quest, 1, "I should have enough growler pelts now for Brink.") + + AddQuestStepChat(Quest, 2, "I should take the growler pelts back to Brink Trudger.", 1, "I should take these growler pelts to Brink Trudger. He should be busy sewing near the spirit bloom nursery.", 93, 1140005) + AddQuestStepCompleteAction(Quest, 2, "Quest_Complete") +end + +function Quest_Complete(Quest, QuestGiver, Player) + UpdateQuestDescription(Quest, "I was able to help Brink Trudger by getting growler hides and giving them to him. He'll be able to use the hides to make leather armor.") + GiveQuestReward(Quest, Player) +end + +function Reload(Quest, QuestGiver, Player, Step) + if Step == 1 then + Step1_Complete_KilledGrowlers(Quest, QuestGiver, Player) + end +end diff --git a/server/Quests/GreaterFaydark/herbs_of_healing_and_growth.lua b/server/Quests/GreaterFaydark/herbs_of_healing_and_growth.lua new file mode 100644 index 000000000..9b2a1617d --- /dev/null +++ b/server/Quests/GreaterFaydark/herbs_of_healing_and_growth.lua @@ -0,0 +1,52 @@ +--[[ + Script Name : Quests/GreaterFaydark/herbs_of_healing_and_growth.lua + Script Purpose : Handles the quest "Herbs of Healing and Growth + Script Author : Zcoretri + Script Date : 2009.03.05 + + Zone : Greater Faydark + Quest Giver: Matron of the Nursery + Preceded by: Grobin Trouble at the Pond + Followed by: Message from the Matron +--]] + + +function Init(Quest) + AddQuestStepObtainItem(Quest, 1, "I need to gather herbs from the faeicia leaf plants west of the nursery", 5, 100, "I need to gather herbs from the faeicia leaf plant for the Matron of the Nursery. I should be able to find these herbs west of the nursery past the wolves.", 336, 6096) + AddQuestStepCompleteAction(Quest, 1, "CollectedAllLeafs") + + +end + +function Accepted(Quest, QuestGiver, Player) + if QuestGiver ~= nil then + if GetDistance(Player, QuestGiver) < 30 then + FaceTarget(QuestGiver, Player) + conversation = CreateConversation + AddConversationOption(conversation, "I'll be careful") + StartConversation(conversation, QuestGiver, Player, "Be careful of the wolves though, they can be quite feisty if they haven't eaten.") + + end + end +end + +function Declined(Quest, QuestGiver, Player) +end + +function CollectedAllLeafs(Quest, QuestGiver, Player) + UpdateQuestTaskGroupDescription(Quest, 1, "I should have enough of the faeicia leaf herbs for the matron.") + AddQuestStepChat(Quest, 2, "I should take these herbs to the Matron of the Nursery.", 1, "I need to take the faeicia leaf herbs I gathered to the Matron of the Nursery so that she can use them to heal the spirit blooms.", 0, 1140004) + AddQuestStepCompleteAction(Quest, 2, "QuestComplete") +end + +function QuestComplete(Quest, QuestGiver, Player) + UpdateQuestDescription(Quest, "The Matron of the Nursery was able to magically heal the spirit blooms with the herbs I gathered for her.") + GiveQuestReward(Quest, Player) + RemoveItem(Player, 6096) +end + +function Reload(Quest, QuestGiver, Player, Step) + if Step == 1 then + CollectedAllLeafs(Quest, QuestGiver, Player) + end +end diff --git a/server/Quests/GreaterFaydark/infestation.lua b/server/Quests/GreaterFaydark/infestation.lua new file mode 100644 index 000000000..7ca257673 --- /dev/null +++ b/server/Quests/GreaterFaydark/infestation.lua @@ -0,0 +1,74 @@ +--[[ + Script Name : Quests/GreaterFaydark/infestation.lua + Script Purpose : Handles the quest "Infestation" + Script Author : Scatman + Script Date : 2013.07.31 + + Zone : Greater Faydark + Quest Giver : Matron of the Nursery + Preceded by : none + Followed by : Running Off the Grobin Scouts +--]] + + +function Init(Quest) + -- Steadfast Bracelet + -- Sand-Etched Bracers + -- Shrumbler Grips + -- Matron's Sleeve + -- Harmonic Band + AddQuestRewardCoin(Quest, 47, 2) + + +end + +function Accepted(Quest, QuestGiver, Player) +AddQuestStepKill(Quest, 1, "Kill shrumbler hatchlings.", 4, 100, ".", 98, 1140210, 1140235) + AddQuestStepCompleteAction(Quest, 1, "KilledAllShrumblers") +end + +function Declined(Quest, QuestGiver, Player) +end + +function Deleted(Quest, Player) +end + +function Reload(Quest, QuestGiver, Player, Step) +end + +--[[ + +function Accepted(Quest, QuestGiver, Player) + if QuestGiver ~= nil then + if GetDistance(Player, QuestGiver) < 30 then + conversation = CreateConversation() + FaceTarget(QuestGiver, Player) + AddConversationOption(conversation, "I will return") + StartConversation(conversation, QuestGiver, Player, "I hope so. You are still quite young and those creatures can be very dangerous!") + end + end +end + +function Declined(Quest, QuestGiver, Player) +end + +function KilledAllShrumblers(Quest, QuestGiver, Player) + UpdateQuestTaskGroupDescription(Quest, 1, "I got rid of the shrumblers that were threatening the spirit blooms.") + AddQuestStepChat(Quest, 2, "I should let the Matron of the Nursery know I took care of the shrumbler infestation.", 1, ".", 0, 1140004) + AddQuestStepCompleteAction(Quest, 2, "QuestComplete") +end + +function QuestComplete(Quest, QuestGiver, Player) + UpdateQuestDescription(Quest, "I got rid of the shrumbler worms that were eating the spirit blooms in the nursery.") + GiveQuestReward(Quest, Player) +end + +function Reload(Quest, QuestGiver, Player, Step) + if Step == 1 then + KilledAllShrumblers(Quest, QuestGiver, Player) + end +end + +--]] + + diff --git a/server/Quests/GreaterFaydark/message_from_the_matron.lua b/server/Quests/GreaterFaydark/message_from_the_matron.lua new file mode 100644 index 000000000..d3ca1c170 --- /dev/null +++ b/server/Quests/GreaterFaydark/message_from_the_matron.lua @@ -0,0 +1,46 @@ +--[[ + Script Name : Quests/GreaterFaydark/message_from_the_matron.lua + Script Purpose : Handles the quest "Message From The Matron" + Script Author : Zcoretri + Script Date : 2009.3.23 + + Zone : Greater Faydark + Quest Giver: Matron of the Nursery + Preceded by: Herbs of Healing and Growth + Followed by: +--]] + + +function Init(Quest) + AddQuestStepChat(Quest, 1, "I need to take the matron's message to Sentry Trillis. His post is on top of a tree, southwest of Amethyst Pond. I need to find a tree to climb to get to him.", 1, ".", 374, 1140054) + AddQuestStepCompleteAction(Quest, 1, "QuestComplete") + + + +end + +function Accepted(Quest, QuestGiver, Player) + if QuestGiver ~= nil then + if GetDistance(Player, QuestGiver) < 30 then + FaceTarget(QuestGiver, Player) + conversation = CreateConversation() + PlayFlavor(QuestGiver,"voiceover/english/exp03_questvo2/matron_of_the_nursery/_exp03/exp03_rgn_greater_faydark/matron_of_the_nursery/matron_of_the_nursery016.mp3", "", "", 3997346506, 1167918210, Player) + AddConversationOption(conversation, "Goodbye, Matron of the Nursery.") + StartConversation(conversation, QuestGiver, Player, "Thank you, " .. GetName(Player) .. ". May Tunare bless you for all you have done! Now I have some spirit blooms to heal.") + end + end +end + +function Declined(Quest, QuestGiver, Player) + +end + +function QuestComplete(Quest, QuestGiver, Player) + UpdateQuestDescription(Quest, "I carried the Matron of the Nursery's message to Sentry Trillis") + GiveQuestReward(Quest, Player) +end + +function Reload(Quest, QuestGiver, Player, Step) + +end + diff --git a/server/Quests/GreaterFaydark/running_off_the_grobin_scouts.lua b/server/Quests/GreaterFaydark/running_off_the_grobin_scouts.lua new file mode 100644 index 000000000..1da11e694 --- /dev/null +++ b/server/Quests/GreaterFaydark/running_off_the_grobin_scouts.lua @@ -0,0 +1,56 @@ +--[[ + Script Name : Quests/GreaterFaydark/running_off_the_grobin_scouts.lua + Script Purpose : Handles the quest Running Off the Grobin Scouts + Script Author : Zcoretri + Script Date : 2009.03.02 + + Zone : Greater Faydark + Quest Giver: Matron of the Nursery + Preceded by: Infestation! + Followed by: Grobin Trouble at the Pond +--]] + + +function Init(Quest) + + + AddQuestStepKill(Quest, 1, "I need to defeat the grobin scouts in the area southwest of the spirit bloom nursery near Amethyst Pond.", 4, 100, "The Matron of the Nursery wants me to investigate the reports about grobin near Amethyst Pond to the southwest and run off any scouts I find.", 2566, 1140022) + AddQuestStepCompleteAction(Quest, 1, "KilledAllGrobinScouts") + + + +end + +function Accepted(Quest, QuestGiver, Player) + conversation = CreateConversation() + if QuestGiver ~= nil then + if GetDistance(Player, QuestGiver) < 30 then + FaceTarget(QuestGiver, Player) + AddConversationOption(conversation, "I'll take care of things.") + StartConversation(conversation, QuestGiver, Player, "Thank you. I fear for the spirit bloom nursery with the grobins so close. It wouldn't surprise me if they're behind the infestation too!") + end + end +end + +function Declined(Quest, QuestGiver, Player) +end + +function KilledAllGrobinScouts(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 1, "I should tell the Matron of the Nursery that I ran off the grobins scouts.") + UpdateQuestTaskGroupDescription(Quest, 1, "I visited Amethyst Pond and scared off the grobin scouts in the area. I noticed that there were some grobin at the water's edge that seemed to be up to something.") + AddQuestStepChat(Quest, 2, "I should tell the Matron of the Nursery that I ran off the grobin scouts.", 1, "I should return to the Matron of the Nursery and let her know I scared off a few scouts but the grobin were up to something at the pond.", 0, 1140004) + AddQuestStepCompleteAction(Quest, 2, "QuestComplete") +end + +function QuestComplete(Quest, QuestGiver, Player) + UpdateQuestDescription(Quest, "I ran off the grobin scouts and told the Matron of the Nursery about the grobins I saw at the water's edge of the pond.") + GiveQuestReward(Quest, Player) +end + +function Reload(Quest, QuestGiver, Player) + if Step == 1 then + KilledAllGrobinScouts(Quest, QuestGiver, Player) + end +end + + diff --git a/server/Quests/GreaterFaydark/sentry_trillis_report.lua b/server/Quests/GreaterFaydark/sentry_trillis_report.lua new file mode 100644 index 000000000..89ab184ff --- /dev/null +++ b/server/Quests/GreaterFaydark/sentry_trillis_report.lua @@ -0,0 +1,44 @@ +--[[ + Script Name : Quests/GreaterFaydark/sentry_trillis_report.lua + Script Purpose : Handles the quest "Sentry Trillis Report" + Script Author : Zcoretri + Script Date : 2009.03.01 + + Zone : Greater Faydark + Quest Giver: Matron of the Nursery + Preceded by: none + Followed by: Running Off the Grobin Scouts +--]] + + +function Init(Quest) + AddQuestStepChat(Quest, 1, "I should deliver Sentry Trillis' status report to Captain Steelforge. He should be outside Drippy Cave to the west.", 1, ".", 1223, 1140067) + AddQuestStepCompleteAction(Quest, 1, "QuestComplete") + +end + +function Accepted(Quest, QuestGiver, Player) + if QuestGiver ~= nil then + if GetDistance(Player, QuestGiver) < 30 then + FaceTarget(QuestGiver, Player) + conversation = CreateConversation() + PlayFlavor(QuestGiver, "voiceover/english/exp03_questvo2/sentry_trillis/_exp03/exp03_rgn_greater_faydark/sentry_trillis/sentry_trillis003.mp3", "", "", 2868295834, 1763259549, Player) + AddConversationOption(conversation, "So long, Sentry Trillis.") + StartConversation(conversation, QuestGiver, Player, "Thanks. The report is a simple 'All Clear' for now, but I thought he would like to know. So long, " .. GetName(Player) .. ".") + end + end +end + +function Declined(Quest, QuestGiver, Player) +end + +function QuestComplete(Quest, QuestGiver, Player) + UpdateQuestDescription(Quest, "") + GiveQuestReward(Quest, Player) +end + +function Reload(Quest, QuestGiver, Player, Step) + +end + + diff --git a/server/Quests/GreaterFaydark/shells_of_protection.lua b/server/Quests/GreaterFaydark/shells_of_protection.lua new file mode 100644 index 000000000..9bd26fbfa --- /dev/null +++ b/server/Quests/GreaterFaydark/shells_of_protection.lua @@ -0,0 +1,74 @@ +--[[ + Script Name : Quests/GreaterFaydark/shells_of_protection.lua + Script Purpose : Handles the quest, "Shells of Protection" + Script Author : Scatman + Script Date : 2009.03.28 + + Zone : Greater Faydark + Quest Giver: Brink Trudger + Preceded by: Spider Silk for Brink (spider_silk_for_brink.lua) + Followed by: None +--]] + + +function Init(Quest) + -- Brink's Spaulders (NEED PARSE) + -- Brink's Stitched Footwraps + -- Brink's Linked Sleeves + -- Brink's Leather Boots + + + AddQuestStepKill(Quest, 1, "I need to get shells from clawsnap crabs.", 4, 100, "I should head to the beach just east of the spirit bloom nursery and collect the shells of clawsnap crabs and sand sifter turtles.", 752, 1140055, 1140074) + AddQuestStepKill(Quest, 2, "I need to get shells from sand sifter turtles.", 4, 100, "I should head to the beach just east of the spirit bloom nursery and collect the shells of clawsnap crabs and sand sifter turtles.", 201, 1140027, 1140031) + AddQuestStepCompleteAction(Quest, 1, "Step1_Complete_KilledCrabs") + AddQuestStepCompleteAction(Quest, 2, "Step2_Complete_KilledTurtles") + +end + +function Accepted(Quest, QuestGiver, Player) + FaceTarget(QuestGiver, Player) + conversation = CreateConversation() + + PlayFlavor(QuestGiver, "voiceover/english/exp03_questvo2/brink_trudger/_exp03/exp03_rgn_greater_faydark/brink_trudger/brink_trudger012.mp3", "", "", 3911384586, 1778696172, Player) + AddConversationOption(conversation, "Okay, I'll be right back.") + StartConversation(conversation, QuestGiver, Player, "Thank you, " .. GetName(Player) .. ". I'll be right here putting this gear together.") +end + +function Declined(Quest, QuestGiver, Player) +end + +function Step1_Complete_KilledCrabs(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 1, "I have all of the clawsnap shells I need.") + + if QuestIsComplete(Player, 155) then + Multiple_Steps_Complete(Quest, QuestGiver, Player) + end +end + +function Step2_Complete_KilledTurtles(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 2, "I have all of the sand sifter shells I need.") + + if QuestIsComplete(Player, 155) then + Multiple_Steps_Complete(Quest, QuestGiver, Player) + end +end + +function Multiple_Steps_Complete(Quest, QuestGiver, Player) + UpdateQuestTaskGroupDescription(Quest, 1, "I should have all the shells I need for Brink's armor pieces.") + + AddQuestStepChat(Quest, 3, "I should give the shells to Brink Trudger at the spirit bloom nursery.", 1, "I should take these clawsnap and sand sifter shells back to Brink Trudger at the spirit bloom nursery.", 201, 1140005) + AddQuestStepCompleteAction(Quest, 3, "Quest_Complete") +end + +function Quest_Complete(Quest, QuestGiver, Player) + UpdateQuestDescription(Quest, "I collected clawsnap and sand sifter shells for Brink Trudger. He'll use them to make hard plates and build armor pieces.") + GiveQuestReward(Quest, Player) +end + +function Reload(Quest, QuestGiver, Player, Step) + if Step == 1 then + Step1_Complete_KilledCrabs(Quest, QuestGiver, Player) + elseif Step == 2 then + Step2_Complete_KilledTurtles(Quest, QuestGiver, Player) + end +end diff --git a/server/Quests/GreaterFaydark/spider_silk_for_brink.lua b/server/Quests/GreaterFaydark/spider_silk_for_brink.lua new file mode 100644 index 000000000..3be66c52f --- /dev/null +++ b/server/Quests/GreaterFaydark/spider_silk_for_brink.lua @@ -0,0 +1,54 @@ +--[[ + Script Name : Quests/GreaterFaydark/spider_silk_for_brink.lua + Script Purpose : Handles the quest, "Spider Silk for Brink" + Script Author : Scatman + Script Date : 2009.03.28 + + Zone : Greater Faydark + Quest Giver: Brink Trudger + Preceded by: Growler Pelts for Brink (growler_pelts_for_brink.lua) + Followed by: Shells of Protection (shells_of_protection.lua) +--]] + + +function Init(Quest) + -- Brink's Legplates + -- Brink's Woven Band + -- Brink's Green Knot + + + AddQuestStepKill(Quest, 1, "I should get some silkspinner webbing for Brink. The silkspinner spiders to the west, past the growlers and deer, should be a good source.", 5, 100, "I should get some silk webbing from the silkspinner spiders for Brink Trudger. The spiders are usually a bit of a distance to the west, past the growlers and deer.", 2251, 1140063, 1140062) + AddQuestStepCompleteAction(Quest, 1, "Step1_Complete_KilledSpiders") + +end + +function Accepted(Quest, QuestGiver, Player) + FaceTarget(QuestGiver, Player) + conversation = CreateConversation() + + PlayFlavor(QuestGiver, "voiceover/english/exp03_questvo2/brink_trudger/_exp03/exp03_rgn_greater_faydark/brink_trudger/brink_trudger009.mp3", "", "", 94899034, 3216566812, Player) + AddConversationOption(conversation, "I'll be careful.") + StartConversation(conversation, QuestGiver, Player, "Wonderful! The silkspinner spiders usually live in an area to the west, past the growlers. Be careful though, those silkspinners are dangerous fellers!") +end + +function Declined(Quest, QuestGiver, Player) +end + +function Step1_Complete_KilledSpiders(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 1, "I should have enough spider silk for Brink Trudger now.") + UpdateQuestTaskGroupDescription(Quest, 1, "I should have enough spider silk for Brink Trudger now.") + + AddQuestStepChat(Quest, 2, "I should give the silkspinner webs to Brink Trudger.", 1, "I should take these silkspinner webs to Brink Trudger so that he can use them to make fae clothing. He should be at his regular spot near the spirit bloom nursery.", 2251, 1140005) + AddQuestStepCompleteAction(Quest, 2, "Quest_Complete") +end + +function Quest_Complete(Quest, QuestGiver, Player) + UpdateQuestDescription(Quest, "I was able to help Brink Trudger by getting him silkspinner webbing. The hides and silk should go a long way to outfitting adventurers with robes and cloth armor.") + GiveQuestReward(Quest, Player) +end + +function Reload(Quest, QuestGiver, Player, Step) + if Step == 1 then + Step1_Complete_KilledSpiders(Quest, QuestGiver, Player) + end +end diff --git a/server/Quests/GreaterFaydark/unwelcome_guests.lua b/server/Quests/GreaterFaydark/unwelcome_guests.lua new file mode 100644 index 000000000..b5f789a77 --- /dev/null +++ b/server/Quests/GreaterFaydark/unwelcome_guests.lua @@ -0,0 +1,10 @@ +-- Where's the header, chumps? + + +function Init(Quest) + + AddQuestStepSpell(Quest, 1, "I need to capture five shrumblers from the Dyer Mycoria Geminariums.", 5, 100, "I need to capture five shrumblers from the Dyer Mycoria Geminariums.", 172, 1) + AddQuestStepCompleteAction(Quest, 1, "Step1_Complete_ReleasedShrumblers") + +end + diff --git a/server/Quests/LongshadowAlley/a_clear_understanding.lua b/server/Quests/LongshadowAlley/a_clear_understanding.lua new file mode 100644 index 000000000..9b3e0f01a --- /dev/null +++ b/server/Quests/LongshadowAlley/a_clear_understanding.lua @@ -0,0 +1,94 @@ +--[[ + Script Name : Quests/LongshadowAlley/a_clear_understanding.lua + Script Purpose : Handles the quest, "A Clear Understanding" + Script Author : Scatman + Script Date : 2009.04.07 + + Zone : Longshadow Alley + Quest Giver: Aldera V'Exxa + Preceded by: None + Followed by: A Lesson to Learn (a_lesson_to_learn.lua) +--]] + +-- Quest ID's +local A_CLEAR_UNDERSTANDING = 335 + +function Init(Quest) + AddQuestStepLocation(Quest, 1, "I need to make my way to the Destroyed Knowledge Portal in the center of Longshadow Alley.", 10, "I need to become familiar with Longshadow Alley.", 0, 0, 2.07, 0) + AddQuestStepLocation(Quest, 2, "Access to North Freeport is via the city gate.", 20, "I need to become familiar with Longshadow Alley.", 0, 13.52, 4.02, 65.42) + AddQuestStepLocation(Quest, 3, "There is an entrance to Thieves' Way within an elevated manhole west of the Destroyed Knowledge Portal.", 10, "I need to become familiar with Longshadow Alley.", 0, 43.82, -0.87, -23.08) + AddQuestStepLocation(Quest, 4, "Some exits are not by land, they are by water. Examine the bells on the dock in Longshadow Alley.", 10, "I need to become familiar with Longshadow Alley.", 0, -49.75, -4.67, -82.32) + AddQuestStepCompleteAction(Quest, 1, "Step1_Complete_Portal") + AddQuestStepCompleteAction(Quest, 2, "Step2_Complete_Gate") + AddQuestStepCompleteAction(Quest, 3, "Step3_Complete_Sewer") + AddQuestStepCompleteAction(Quest, 4, "Step4_Complete_Bells") + +end + +function Accepted(Quest, QuestGiver, Player) + FaceTarget(QuestGiver, Player) + conversation = CreateConversation() + + PlayFlavor(QuestGiver, "voiceover/english/tutorial_revamp/aldera_v_exxa/fprt_hood05/quests/alderavexxa/aldera_x1_020.mp3", "", "", 4155318250, 3441039640, Player) + AddConversationOption(conversation, "I will.") + StartConversation(conversation, QuestGiver, Player, "In the center of the city is the Knowledge Portal, now destroyed. The majority of the vendors have set up shop near the Portal, including the Armor Shop and the Freeport Reserve bank. It is wise to know where the exits to our neighborhood are as well -- both gates and grates. Become familiar with the layout, then return to me.") +end + +function Declined(Quest, QuestGiver, Player) +end + +function Step1_Complete_Portal(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 1, "I've seen the Destroyed Knowledge Portal.") + + if QuestIsComplete(Player, A_CLEAR_UNDERSTANDING) then + Multiple_Steps_Complete(Quest, QuestGiver, Player) + end +end + +function Step2_Complete_Gate(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 2, "I've located the exit to North Freeport.") + + if QuestIsComplete(Player, A_CLEAR_UNDERSTANDING) then + Multiple_Steps_Complete(Quest, QuestGiver, Player) + end +end + +function Step3_Complete_Sewer(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 3, "I've located the entrance to the Thieves' Way.") + + if QuestIsComplete(Player, A_CLEAR_UNDERSTANDING) then + Multiple_Steps_Complete(Quest, QuestGiver, Player) + end +end + +function Step4_Complete_Bells(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 4, "I've taken a look around the dock.") + + if QuestIsComplete(Player, A_CLEAR_UNDERSTANDING) then + Multiple_Steps_Complete(Quest, QuestGiver, Player) + end +end + +function Multiple_Steps_Complete(Quest, QuestGiver, Player) + UpdateQuestTaskGroupDescription(Quest, 1, "I've visited the Portal of Knowledge and have seen the exits from this neighborhood.") + + AddQuestStepChat(Quest, 5, "I will find Aldera V'Exxa near Longshadow Alley's dock.", 1, "Now that I have become familiar with Longshadow Alley, I should return to Aldera V'Exxa at the dock.", 0, 1380006) + AddQuestStepCompleteAction(Quest, 5, "Quest_Complete") +end + +function Quest_Complete(Quest, QuestGiver, Player) + UpdateQuestDescription(Quest, "There are many ways in and out of Longshadow Alley and I am now familiar with them all. Being aware of all that can happen around one is vital to the Teir'Dal.") + GiveQuestReward(Quest, Player) +end + +function Reload(Quest, QuestGiver, Player, Step) + if Step == 1 then + Step1_Complete_Portal(Quest, QuestGiver, Player) + elseif Step == 2 then + Step2_Complete_Gate(Quest, QuestGiver, Player) + elseif Step == 3 then + Step3_Complete_Sewer(Quest, QuestGiver, Player) + elseif Step == 4 then + Step4_Complete_Bells(Quest, QuestGiver, Player) + end +end diff --git a/server/Quests/LongshadowAlley/a_lesson_learned.lua b/server/Quests/LongshadowAlley/a_lesson_learned.lua new file mode 100644 index 000000000..e28df7e40 --- /dev/null +++ b/server/Quests/LongshadowAlley/a_lesson_learned.lua @@ -0,0 +1,74 @@ +--[[ + Script Name : Quests/LongshadowAlley/a_lesson_learned.lua + Script Purpose : Handles the quest, "A Lesson Learned" + Script Author : Scatman + Script Date : 2009.04.11 + + Zone : Longshadow Alley + Quest Giver: Aldera V'Exxa + Preceded by: Brewing Trouble (brewing_trouble.lua) + Followed by: Meet the Custodian (meet_the_custodian.lua) +--]] + +-- Item ID's +local POISONED_LOAF_OF_BREAD = 10496 + +function Init(Quest) + AddQuestStepLocation(Quest, 1, "I need to place this poisoned bread on Lynsia's vendor booth, where Teah will be sure to find it.", 10, "Aldera has given me a loaf of poisoned bread. I need to place to loaf on Lynsia's booth near the Destroyed Knowledge Portal so Teah can find it.", 300, -1.41, 0, -19.60) + AddQuestStepCompleteAction(Quest, 1, "Step1_Complete_PlacedBread") +end + +function Accepted(Quest, QuestGiver, Player) + FaceTarget(QuestGiver, Player) + conversation = CreateConversation() + + -- Poisoned Loaf of Bread + if not HasItem(Player, POISONED_LOAF_OF_BREAD) then + SummonItem(Player, POISONED_LOAF_OF_BREAD) + SendMessage(Player, "You receive 1 Poisoned Loaf of Bread") + end + + PlayFlavor(QuestGiver, "voiceover/english/tutorial_revamp/aldera_v_exxa/fprt_hood05/quests/alderavexxa/aldera_x1_025.mp3", "", "", 2044102497, 3428374214, Player) + AddConversationOption(conversation, "Of course.") + StartConversation(conversation, QuestGiver, Player, "Before we deal with Teah, I feel you must learn about the current split in our people's loyalties. You may not need this information now, but it may be useful later. Take heed of my words and choose carefully if the choice is presented to you.") +end + +function Declined(Quest, QuestGiver, Player) +end + +function Deleted(Quest, QuestGiver, Player) + RemoveBread(Player) +end + +function RemoveBread(Player) + while HasItem(Player, POISONED_LOAF_OF_BREAD, 1) do + RemoveItem(Player, POISONED_LOAF_OF_BREAD) + end +end + +function Step1_Complete_PlacedBread(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 1, "I have planted the bread.") + UpdateQuestTaskGroupDescription(Quest, 1, "I have planted the bread.") + + RemoveBread(Player) + + -- a loaf of bread + SpawnMob(GetZone(Player), 1380102, false, -3.04, 1.06, -19.24, 290) + + -- Teah + SpawnMob(GetZone(Player), 1380046, false, 16.79, 0, -16.03, 70.02) + + AddQuestStepChat(Quest, 2, "I need to return to Aldera to let her know that I am finished.", 1, "With the bread placed on Lynsia's counter, who showed up but that sloth, Teah?", 0, 1380006) + AddQuestStepCompleteAction(Quest, 2, "Quest_Complete") +end + +function Quest_Complete(Quest, QuestGiver, Player) + UpdateQuestDescription(Quest, "Everything I have been working on with Aldera has gone well and Teah has learned a lesson he will never forget.") + GiveQuestReward(Quest, Player) +end + +function Reload(Quest, QuestGiver, Player, Step) + if Step == 1 then + Step1_Complete_PlacedBread(Quest, QuestGiver, Player) + end +end diff --git a/server/Quests/LongshadowAlley/a_lesson_to_learn.lua b/server/Quests/LongshadowAlley/a_lesson_to_learn.lua new file mode 100644 index 000000000..4495d98b7 --- /dev/null +++ b/server/Quests/LongshadowAlley/a_lesson_to_learn.lua @@ -0,0 +1,62 @@ +--[[ + Script Name : Quests/LongshadowAlley/a_lesson_to_learn.lua + Script Purpose : Handles the quest, "A Lesson to Learn" + Script Author : Scatman + Script Date : 2009.04.07 + + Zone : Longshadow Alley + Quest Giver: Aldera V'Exxa + Preceded by: A Clear Understanding (a_clear_understanding.lua) + Followed by: Brewing Trouble (brewing_trouble.lua) +--]] + +-- Item ID's +local SHADOWS_KISS = 12113 + +function Init(Quest) + AddQuestStepObtainItem(Quest, 1, "I need to retrieve a few clumps of Shadows' Kiss for Alders.", 5, 100, "Aldera has sent me to collect Shadows' Kiss - a small flowery fungus near the sewer.", 318, SHADOWS_KISS) + AddQuestStepCompleteAction(Quest, 1, "Step1_Complete_GotFungus") +end + +function Accepted(Quest, QuestGiver, Player) + FaceTarget(QuestGiver, Player) + conversation = CreateConversation() + + PlayFlavor(QuestGiver, "voiceover/english/tutorial_revamp/aldera_v_exxa/fprt_hood05/quests/alderavexxa/aldera_x1_006b.mp3", "", "", 2711787328, 3720975836, Player) + AddConversationOption(conversation, "I will be back.") + StartConversation(conversation, QuestGiver, Player, "Excellent. I look forward to your return.") +end + +function Declined(Quest, QuestGiver, Player) +end + +function Deleted(Quest, QuestGiver, Player) + RemoveShadowsKiss(Player) +end + +function RemoveShadowsKiss(Player) + while HasItem(Player, SHADOWS_KISS, 1) do + RemoveItem(Player, SHADOWS_KISS) + end +end + +function Step1_Complete_GotFungus(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 1, "I have found all of the Shadows' Kiss Aldera needs.") + UpdateQuestTaskGroupDescription(Quest, 1, "I need to return to Aldera with the Shadows' Kiss I have collected.") + + AddQuestStepChat(Quest, 2, "I need to return to Aldera with the Shadows' Kiss.", 1, "I have collected the Shadows' Kiss for Aldera, I need to return it.", 0, 1380006) + AddQuestStepCompleteAction(Quest, 2, "Quest_Complete") +end + +function Quest_Complete(Quest, QuestGiver, Player) + RemoveShadowsKiss(Player) + + UpdateQuestDescription(Quest, "I met a Teir'Dal woman named Aldera. She offered to teach me the proper ways of being Teir'Dal in exchange for helping her teach an improper Teir'Dal a lesson. The first step in this 'lesson' was to collect some poisonous fungus for her, which I have done.") + GiveQuestReward(Quest, Player) +end + +function Reload(Quest, QuestGiver, Player, Step) + if Step == 1 then + Step1_Complete_GotFungus(Quest, QuestGiver, Player) + end +end diff --git a/server/Quests/LongshadowAlley/brewing_trouble.lua b/server/Quests/LongshadowAlley/brewing_trouble.lua new file mode 100644 index 000000000..ffb8f011b --- /dev/null +++ b/server/Quests/LongshadowAlley/brewing_trouble.lua @@ -0,0 +1,75 @@ +--[[ + Script Name : Quests/LongshadowAlley/brewing_trouble.lua + Script Purpose : Handles the quest, "Brewing Trouble" + Script Author : Scatman + Script Date : 2009.04.07 + + Zone : Longshadow Alley + Quest Giver: Aldera V'Exxa + Preceded by: A Lesson to Learn (a_lesson_to_learn.lua) + Followed by: A Lesson Learned (a_lesson_learned.lua) +--]] + +-- Item ID's +local ALCHEMICAL_MEDIUM = 3404 + +function Init(Quest) + AddQuestStepChat(Quest, 1, "I need to get an alchemical medium from a man named Kalraath.", 1, "I need to get an alchemical medium from Kalraath. He is near the gate to North Freeport.", 0, 1380043) + AddQuestStepCompleteAction(Quest, 1, "Step1_Complete_SpokeToKalraath") +end + +function Accepted(Quest, QuestGiver, Player) + FaceTarget(QuestGiver, Player) + conversation = CreateConversation() + + PlayFlavor(QuestGiver, "voiceover/english/tutorial_revamp/aldera_v_exxa/fprt_hood05/quests/alderavexxa/aldera_x1_011.mp3", "", "", 1591440619, 3916449893, Player) + AddConversationOption(conversation, "I will return with the medium from Kalraath.") + StartConversation(conversation, QuestGiver, Player, "Let him know that I sent you, but remember that no great Teir'Dal ever accomplished anything without discretion.") +end + +function Declined(Quest, QuestGiver, Player) +end + +function Deleted(Quest, QuestGiver, Player) + RemoveAlchemicalMedium(Player) +end + +function Step1_Complete_SpokeToKalraath(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 1, "I need to return to Aldera with the Medium.") + UpdateQuestTaskGroupDescription(Quest, 1, "I need to return to Aldera with the Medium.") + + -- Alchemical Medium + SummonItem(Player, ALCHEMICAL_MEDIUM) + + AddQuestStepChat(Quest, 2, "I have received the alchemical medium from Kalraath, I need to return to Aldera with it now.", 1, "I have received the alchemical medium I needed from Kalraath. I need to return to Aldera.", 0, 1380006) + AddQuestStepCompleteAction(Quest, 2, "Step2_Complete_SpokeToAldera") +end + +function Step2_Complete_SpokeToAldera(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 2, "Aldera was pleased with the alchemical medium that I brought her.") + UpdateQuestTaskGroupDescription(Quest, 2, "Aldera was pleased with the alchemical medium that I brought her.") + + AddQuestStepChat(Quest, 3, "By refreshing my memory with a few questions, Aldera will ensure that no mistakes are made.", 1, "Aldera wants to ensure I understand the task we are undertaking.", 0, 1380006) + AddQuestStepCompleteAction(Quest, 3, "Quest_Complete") +end + +function Quest_Complete(Quest, QuestGiver, Player) + RemoveAlchemicalMedium(Player) + + UpdateQuestDescription(Quest, "I was able to get the alchemical medium from Kalraath, and I have given it to Aldera. She seemed pleased by it, and started another one of her long winded conversations when I gave it to her.") + GiveQuestReward(Quest, Player) +end + +function RemoveAlchemicalMedium(Player) + while HasItem(Player, ALCHEMICAL_MEDIUM, 1) do + RemoveItem(Player, ALCHEMICAL_MEDIUM) + end +end + +function Reload(Quest, QuestGiver, Player, Step) + if Step == 1 then + Step1_Complete_SpokeToKalraath(Quest, QuestGiver, Player) + elseif Step == 2 then + Step2_Complete_SpokeToAldera(Quest, QuestGiver, Player) + end +end diff --git a/server/Quests/LongshadowAlley/meet_the_custodian.lua b/server/Quests/LongshadowAlley/meet_the_custodian.lua new file mode 100644 index 000000000..d62cb83bb --- /dev/null +++ b/server/Quests/LongshadowAlley/meet_the_custodian.lua @@ -0,0 +1,39 @@ +--[[ + Script Name : Quests/LongshadowAlley/meet_the_custodian.lua + Script Purpose : Handles the quest, "Meet the Custodian" + Script Author : Scatman + Script Date : 2009.04.11 + + Zone : Longshadow Alley + Quest Giver: Aldera V'Exxa + Preceded by: A Lesson Learned (a_lesson_learned.lua) + Followed by: None +--]] + +function Init(Quest) + AddQuestStepChat(Quest, 1, "I need to locate Custodian Sullissa, whom I will find in the Graveyard.", 1, ".", 0, 1250002) + AddQuestStepCompleteAction(Quest, 1, "Quest_Complete") +end + +function Accepted(Quest, QuestGiver, Player) + FaceTarget(QuestGiver, Player) + conversation = CreateConversation() + + PlayFlavor(QuestGiver, "voiceover/english/tutorial_revamp/aldera_v_exxa/fprt_hood05/quests/alderavexxa/aldera_x1_032.mp3", "", "", 3598421392, 2829289499, Player) + AddConversationOption(conversation, "Thank you for your wisdom, I hope your friend in the Graveyard can teach me as much as you have.") + StartConversation(conversation, QuestGiver, Player, "As promised, I will direct you to where you can learn to harness the other strengths of the Teir'Dal. Now that you understand the correct etiquette, perhaps you won't get yourself killed. Go now to Custodian Zaddar Sullissia in the Graveyard. By helping him accomplish his tasks, you will gain not only the respect of your own people, you will also learn to harness your own strengths and weaknesses.") +end + +function Declined(Quest, QuestGiver, Player) +end + +function Deleted(Quest, QuestGiver, Player) +end + +function Quest_Complete(Quest, QuestGiver, Player) + UpdateQuestDescription(Quest, "I have spoken with Custodian Zaddar Sullissa in the Graveyard and will learn more from this scholar.") + GiveQuestReward(Quest, Player) +end + +function Reload(Quest, QuestGiver, Player, Step) +end \ No newline at end of file diff --git a/server/Quests/NektroposCastle/FairWarningsIgnored.lua b/server/Quests/NektroposCastle/FairWarningsIgnored.lua new file mode 100644 index 000000000..eab13e001 --- /dev/null +++ b/server/Quests/NektroposCastle/FairWarningsIgnored.lua @@ -0,0 +1,35 @@ +--[[ + Script Name : Quests/NektroposCastle/FairWarningsIgnored.lua + Script Purpose : Fair Warnings Ignored + Script Author : smash + Script Date : 6/6/2018 + Script Notes : + + Zone : Nektropos Castle + Quest Giver : None + Preceded by : None + Followed by : None +--]] + +function Init(Quest) + AddQuestStepKill(Quest, 1, "I need to slay The Juggernaught in Nektropos Castle.", 1, 100, "The Juggernaught stands between me and my progress through Nektropos Castle. I must destroy it!", 611, 1780293) + AddQuestStepCompleteAction(Quest, 1, "CompleteQuest") +end + +function Accepted(Quest, QuestGiver, Player) +end + +function Deleted(Quest, QuestGiver, Player) +end + +function Declined(Quest, QuestGiver, Player) +end + +function Reload(Quest, QuestGiver, Player, Step) +end + +function CompleteQuest(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 1, "I have slain The Juggernaught.") + UpdateQuestTaskGroupDescription(Quest, 1, "The Juggernaught, while tough, was not tough enough to keep me from progressing.") + GiveQuestReward(Quest, Player) +end \ No newline at end of file diff --git a/server/Quests/NektroposCastle/TheBoarsHead.lua b/server/Quests/NektroposCastle/TheBoarsHead.lua new file mode 100644 index 000000000..5b7a38c0d --- /dev/null +++ b/server/Quests/NektroposCastle/TheBoarsHead.lua @@ -0,0 +1,38 @@ +--[[ + Script Name : Quests/NektroposCastle/TheBoarsHead.lua + Script Purpose : The Boar's Head + Script Author : smash + Script Date : 1/26/2016 + Script Notes : + + Zone : Nektropos Castle + Quest Giver : None + Preceded by : None + Followed by : The Red Marble +--]] + +function Init(Quest) + AddQuestStep(Quest, 1, "Find a new place to put the black marble eye.", 1, 100, "Find a new place to place the black marble eye, maybe a hollow socket of another boar's head.", 1175) + AddQuestStepCompleteAction(Quest, 1, "CompleteQuest") +end + +function Accepted(Quest, QuestGiver, Player) + local conversation = CreateConversation() + AddConversationOption(conversation, "Stop examining the head.", "CloseConversation") + StartDialogConversation(conversation, 1, QuestGiver, Player, "You take the black marble-like eye.") +end + +function Deleted(Quest, QuestGiver, Player) +end + +function Declined(Quest, QuestGiver, Player) +end + +function Reload(Quest, QuestGiver, Player, Step) +end + +function CompleteQuest(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 1, "I've placed the eye into the head of the boar.") + UpdateQuestTaskGroupDescription(Quest, 1, "Placed the black eye in a hollow socket.") + GiveQuestReward(Quest, Player) +end \ No newline at end of file diff --git a/server/Quests/NektroposCastle/TheEverlingLockets.lua b/server/Quests/NektroposCastle/TheEverlingLockets.lua new file mode 100644 index 000000000..35f6716ae --- /dev/null +++ b/server/Quests/NektroposCastle/TheEverlingLockets.lua @@ -0,0 +1,122 @@ +--[[ + Script Name : Quests/NektroposCastle/TheEverlingLockets.lua + Script Author : smash + Script Date : 2016.09.08 03:09:11 + Script Purpose : + + Zone : NektroposCastle + Quest Giver: Alexa + Preceded by: None + Followed by: +--]] + +local EVERLING_LOCKETS = 177 + +function Init(Quest) + AddQuestStepKill(Quest, 1, "I need to find Elise Everling and gain her locket.", 1, 100, "I need to find Rikantus Everling's six daughters and acquire their lockets.", 20, 1780273) + AddQuestStepCompleteAction(Quest, 1, "KilledElise") + + AddQuestStepKill(Quest, 2, "I need to find Crysta Everling and gain her locket.", 1, 100, "I need to find Rikantus Everling's six daughters and acquire their lockets.", 20, 1780276) + AddQuestStepCompleteAction(Quest, 2, "KilledCrysta") + + AddQuestStepKill(Quest, 3, "I need to find Melanie Everling and gain her locket.", 1, 100,"I need to find Rikantus Everling's six daughters and acquire their lockets.", 20, 1780275) + AddQuestStepCompleteAction(Quest, 3, "KilledMelanie") + + AddQuestStepKill(Quest, 4, "I need to find Deirdre Everling and gain her locket.", 1, 100, "I need to find Rikantus Everling's six daughters and acquire their lockets.", 20, 1780278) + AddQuestStepCompleteAction(Quest, 4, "KilledDeirdre") + + AddQuestStepKill(Quest, 5, "I need to find Sheila Everling and gain her locket.", 1, 100, "I need to find Rikantus Everling's six daughters and acquire their lockets.", 20, 1780272) + AddQuestStepCompleteAction(Quest, 5, "KilledSheila") + + AddQuestStepKill(Quest, 6, "I need to find Jenni Everling and gain her locket.", 1, 100, "I need to find Rikantus Everling's six daughters and acquire their lockets.", 20, 1780243) + AddQuestStepCompleteAction(Quest, 6, "KilledJenni") +end + +function CheckForStep7(Quest, Player) + if not QuestIsComplete(Player, EVERLING_LOCKETS) then + return + end + + UpdateQuestTaskGroupDescription(Quest, 1, "I have found all of the lockets.") + AddQuestStepKill(Quest, 7, "I need to find a way into the basement.", 1, 100, "I need to find a way into the basement.", 11, 1780268) + AddQuestStepCompleteAction(Quest, 7, "FoundKey") +end + +function KilledElise(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 1, "I have acquired Elise's Locket.") + CheckForStep7(Quest, Player) +end + +function KilledCrysta(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 2, "I have acquired Crysta's Locket.") + CheckForStep7(Quest, Player) +end + +function KilledMelanie(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 3, "I have acquired Melanie's Locket.") + CheckForStep7(Quest, Player) +end + +function KilledDeirdre(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 4, "I have acquired Deirdre's Locket.") + CheckForStep7(Quest, Player) +end + +function KilledSheila(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 5, "I have acquired Sheila's Locket.") + CheckForStep7(Quest, Player) +end + +function KilledJenni(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 6, "I have acquired Jenni's Locket.") + CheckForStep7(Quest, Player) +end + +function FoundKey(Quest, QuestGiver, Player) + UpdateQuestTaskGroupDescription(Quest, 2, "I found a key on a decaying corpse, but I don't know what it is for.") + AddQuestStepKill(Quest, 8, "I need to figure out what this key goes to.", 1, 100, "I need to figure out what this key goes to.", 11, 1780282) + AddQuestStepCompleteAction(Quest, 8, "KilledCaptain") +end + +function KilledCaptain(Quest, QuestGiver, Player) + UpdateQuestTaskGroupDescription(Quest, 3, "I entered Lord Everling's bedroom and was attacked by the captain of the guard. I found the guard captains sword.") + + AddQuestStepKill(Quest, 9, "I have to find Ollix Everling's pendant.", 1, 100, "I need to find Ollix Everling and take his pendant.", 13, 1780290) + AddQuestStepCompleteAction(Quest, 9, "QuestComplete") +end + +function Accepted(Quest, QuestGiver, Player) + +end + +function Declined(Quest, QuestGiver, Player) + +end + +function QuestComplete(Quest, QuestGiver, Player) + UpdateQuestTaskGroupDescription(Quest, 3, "I have Ollix Everling's Pendant.") + GiveQuestReward(Quest, Player) +end + +function Reload(Quest, QuestGiver, Player, Step) + if Step == 1 then + KilledElise(Quest, QuestGiver, Player) + elseif Step == 2 then + KilledCrysta(Quest, QuestGiver, Player) + elseif Step == 3 then + KilledMelanie(Quest, QuestGiver, Player) + elseif Step == 4 then + KilledDeirdre(Quest, QuestGiver, Player) + elseif Step == 5 then + KilledSheila(Quest, QuestGiver, Player) + elseif Step == 6 then + KilledJenni(Quest, QuestGiver, Player) + elseif Step == 7 then + FoundKey(Quest, QuestGiver, Player) + elseif Step == 8 then + KilledCaptain(Quest, QuestGiver, Player) + elseif Step == 9 then + QuestComplete(Quest, QuestGiver, Player) + end +end + diff --git a/server/Quests/NektroposCastle/TheRedMarble.lua b/server/Quests/NektroposCastle/TheRedMarble.lua new file mode 100644 index 000000000..822f11f2d --- /dev/null +++ b/server/Quests/NektroposCastle/TheRedMarble.lua @@ -0,0 +1,38 @@ +--[[ + Script Name : Quests/NektroposCastle/TheRedMarble.lua + Script Purpose : The Red Marble + Script Author : smash + Script Date : 1/26/2016 + Script Notes : + + Zone : Nektropos Castle + Quest Giver : None + Preceded by : The Boar's Head + Followed by : None +--]] + +function Init(Quest) + AddQuestStep(Quest, 1, "Find a new place to fit this red marble.", 1, 100, "Place the red eye in a hollow socket.", 1187) + AddQuestStepCompleteAction(Quest, 1, "CompleteQuest") +end + +function Accepted(Quest, QuestGiver, Player) + local conversation = CreateConversation() + AddConversationOption(conversation, "Stop inspecting the lockerbox", "CloseConversation") + StartDialogConversation(conversation, 1, QuestGiver, Player, "After rummaging around the tattered clothes and avoiding critters you find a red marble.") +end + +function Deleted(Quest, QuestGiver, Player) +end + +function Declined(Quest, QuestGiver, Player) +end + +function Reload(Quest, QuestGiver, Player, Step) +end + +function CompleteQuest(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 1, "I've placed the eye into the head of the boar.") + UpdateQuestTaskGroupDescription(Quest, 1, "Placed the black eye in a hollow socket.") + GiveQuestReward(Quest, Player) +end \ No newline at end of file diff --git a/server/Quests/NektroposCastle/TrinketsOfTheDead.lua b/server/Quests/NektroposCastle/TrinketsOfTheDead.lua new file mode 100644 index 000000000..d920bcc2d --- /dev/null +++ b/server/Quests/NektroposCastle/TrinketsOfTheDead.lua @@ -0,0 +1,204 @@ +--[[ + Script Name : Quests/NektroposCastle/TrinketsOfTheDead.lua + Script Purpose : Trinkets of the Dead + Script Author : smash + Script Date : 2016.1.24 + + Zone : Nektropos Castle + Quest Giver : Master Eldin Necrosis + Preceded by : None + Followed by : None +--]] + +function Init(Quest) + AddStep1(Quest) + AddStep2(Quest) + AddStep3(Quest) + AddStep4(Quest) + AddStep5(Quest) + AddStep6(Quest) + AddStep7(Quest) + AddStep8(Quest) + AddStep9(Quest) + AddStep10(Quest) +end + +function Accepted(Quest, QuestGiver, Player) + AcceptedDialog(QuestGiver, Player) +end + +function Declined(Quest, QuestGiver, Player) +end + +function Deleted() +end + +function AcceptedDialog(QuestGiver, Player) + FaceTarget(QuestGiver, Player) + conversation = CreateConversation() + + PlayFlavor(QuestGiver, "voiceover/english/master_eldin_necrosis_/nektropos/eldin006.mp3", "", "", 2450617503, 1834362480, Player) + AddConversationOption(conversation, "No problem at all!") + StartConversation(conversation, QuestGiver, Player, "I'll pay you. Just head inside and bring me back whatever treasures you find! Once you finish, return to me, and I'll see about your payment!") +end + +function AddStep1(Quest) + AddQuestStepKill(Quest, 1, "I need to retrieve the Inquisitor of Ullkorruuk's censer.", 1, 100, "Eldin has asked me to retrieve several different kinds of items from the ghosts in Nektropos Castle.", 370, 1780194) + AddQuestStepCompleteAction(Quest, 1, "Step1Completed") +end + +function Step1Completed(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 1, "I have found the censer.") + ShouldAddStep11(Quest, Player) +end + +function AddStep2(Quest) + AddQuestStepKill(Quest, 2, "I need to take the holy water from a priestess of Ullkorruuk.", 1, 100, "Eldin has asked me to retrieve several different kinds of items from the ghosts in Nektropos Castle.", 176, 1780009) + AddQuestStepCompleteAction(Quest, 2, "Step2Completed") +end + +function Step2Completed(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 2, "I have the holy water.") + ShouldAddStep11(Quest, Player) +end + +function AddStep3(Quest) + AddQuestStepKill(Quest, 3, "I need to retrieve one of Lord Everling's shirts from an Everling manservant.", 1, 100, "Eldin has asked me to retrieve several different kinds of items from the ghosts in Nektropos Castle.", 1736, 1780038, 1780040, 1780036) + AddQuestStepCompleteAction(Quest, 3, "Step3Completed") +end + +function Step3Completed(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 3, "I have the shirt.") + ShouldAddStep11(Quest, Player) +end + +function AddStep4(Quest) + AddQuestStepKill(Quest, 4, "I need to get the keyring from an Everling stable boy.", 1, 100, "Eldin has asked me to retrieve several different kinds of items from the ghosts in Nektropos Castle.", 2174, 1780027) + AddQuestStepCompleteAction(Quest, 4, "Step4Completed") +end + +function Step4Completed(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 4, "I have the found the keyring.") + ShouldAddStep11(Quest, Player) +end + +function AddStep5(Quest) + AddQuestStepKill(Quest, 5, "I need to take a scabard from a Thexian guard.", 1, 100, "Eldin has asked me to retrieve several different kinds of items from the ghosts in Nektropos Castle.", 921, 1780015, 1780029) + AddQuestStepCompleteAction(Quest, 5, "Step5Completed") +end + +function Step5Completed(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 5, "I have taken the scabard.") + ShouldAddStep11(Quest, Player) +end + +function AddStep6(Quest) + AddQuestStepKill(Quest, 6, "I should take the coin purse of a dark patron.", 1, 100, "Eldin has asked me to retrieve several different kinds of items from the ghosts in Nektropos Castle.", 10, 1780003, 1780192) + AddQuestStepCompleteAction(Quest, 6, "Step6Completed") +end + +function Step6Completed(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 6, "I have taken the coin purse.") + ShouldAddStep11(Quest, Player) +end + +function AddStep7(Quest) + AddQuestStepKill(Quest, 7, "I need to get the hair brush from Elise's handmaiden.", 1, 100, "Eldin has asked me to retrieve several different kinds of items from the ghosts in Nektropos Castle.", 1228, 1780195) + AddQuestStepCompleteAction(Quest, 7, "Step7Completed") +end + +function Step7Completed(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 7, "I have the brush.") + ShouldAddStep11(Quest, Player) +end + +function AddStep8(Quest) + AddQuestStepKill(Quest, 8, "I should retrieve Sheila Everling's bodice from her handmaiden.", 1, 100, "Eldin has asked me to retrieve several different kinds of items from the ghosts in Nektropos Castle.", 1738, 1780196) + AddQuestStepCompleteAction(Quest, 8, "Step8Completed") +end + +function Step8Completed(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 8, "I have the bodice.") + ShouldAddStep11(Quest, Player) +end + +function AddStep9(Quest) + AddQuestStepKill(Quest, 9, "I need to find Crysta's bracelet. I'm sure her handmaiden has it.", 1, 100, "Eldin has asked me to retrieve several different kinds of items from the ghosts in Nektropos Castle.", 390, 1780197) + AddQuestStepCompleteAction(Quest, 9, "Step9Completed") +end + +function Step9Completed(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 9, "I have Crysta's bracelet.") + ShouldAddStep11(Quest, Player) +end + +function AddStep10(Quest) + AddQuestStepKill(Quest, 10, "I need to find Jenni's hair bow from her handmaiden.", 1, 100, "Eldin has asked me to retrieve several different kinds of items from the ghosts in Nektropos Castle.", 739, 1780198) + AddQuestStepCompleteAction(Quest, 10, "Step10Completed") +end + +function Step10Completed(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 10, "I have the hair bow.") + ShouldAddStep11(Quest, Player) +end + +function ShouldAddStep11(Quest, Player) + --Check if step 1-10 have all been completed + local i = 1 + local should_add = true + while i < 11 do + if not QuestStepIsComplete(Player, 174, i) then + should_add = false + break + end + i = i + 1 + end + + if should_add then + AddStep11(Quest) + end +end + +function AddStep11(Quest) + AddQuestStepChat(Quest, 11, "I should go speak with Eldin.", 1, "Now that I have gathered all of the trinkets I should go give them to Eldin.", 0, 1780008) + AddQuestStepCompleteAction(Quest, 11, "CompleteQuest") + UpdateQuestTaskGroupDescription(Quest, 1, "I have all of the items that Eldin wanted.") + SetCompleteFlag(Quest) +end + +function CompleteQuest(Quest, QuestGiver, Player) + GiveQuestReward(Quest, Player) +end + +function Reload(Quest, QuestGiver, Player, Step) + if Step == 1 then + Step1Completed(Quest, QuestGiver, Player) + end + if Step == 2 then + Step2Completed(Quest, QuestGiver, Player) + end + if Step == 3 then + Step3Completed(Quest, QuestGiver, Player) + end + if Step == 4 then + Step4Completed(Quest, QuestGiver, Player) + end + if Step == 5 then + Step5Completed(Quest, QuestGiver, Player) + end + if Step == 6 then + Step6Completed(Quest, QuestGiver, Player) + end + if Step == 7 then + Step7Completed(Quest, QuestGiver, Player) + end + if Step == 8 then + Step8Completed(Quest, QuestGiver, Player) + end + if Step == 9 then + Step9Completed(Quest, QuestGiver, Player) + end + if Step == 10 then + Step10Completed(Quest, QuestGiver, Player) + end +end \ No newline at end of file diff --git a/server/Quests/NektroposCastle/VisionsOfHatred.lua b/server/Quests/NektroposCastle/VisionsOfHatred.lua new file mode 100644 index 000000000..f584f114f --- /dev/null +++ b/server/Quests/NektroposCastle/VisionsOfHatred.lua @@ -0,0 +1,44 @@ +--[[ + Script Name : Quests/NektroposCastle/VisionsOfHatred.lua + Script Purpose : + Script Author : smash + Script Date : 2016.1.24 + + Zone : Nektropos Castle + Quest Giver : None + Preceded by : None + Followed by : None +--]] + + +function Init(Quest) + AddQuestStepKill(Quest, 1, "The Everling manservants must pay for what they've done!", 1, 100, "I must slay the Everling manservants.", 611, 1780038, 1780040, 1780036) + AddQuestStepCompleteAction(Quest, 1, "AddStep2") +end + +function Accepted(Quest, QuestGiver, Player) +end + +function Declined(Quest, QuestGiver, Player) +end + +function AddStep2(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 1, "I found a guestroom key!") + UpdateQuestTaskGroupDescription(Quest, 1, "I found a guestroom key while slaying Everling manservants.") + GiveQuestItem(Quest, Player, "", 7979) + AddQuestStep(Quest, 2, "Examine the key.", 1, 100, "Inspect the key I found on the manservants.", 1007) + AddQuestStepCompleteAction(Quest, 2, "Completed") +end + +function Completed(Quest, QuestGiver, Player) + SetCompleteFlag(Quest) + UpdateQuestStepDescription(Quest, 2, "I have examined the key.") + UpdateQuestTaskGroupDescription(Quest, 2, "I found a guestroom key!") + GiveQuestReward(Quest, Player) +end + +function Reload(Quest, QuestGiver, Player, Step) + if Step == 1 then + AddStep2(Quest) + end +end \ No newline at end of file diff --git a/server/Quests/Nettleville/CaptainElgrondethsDilemma.lua b/server/Quests/Nettleville/CaptainElgrondethsDilemma.lua new file mode 100644 index 000000000..0cca94f98 --- /dev/null +++ b/server/Quests/Nettleville/CaptainElgrondethsDilemma.lua @@ -0,0 +1,84 @@ +--[[ + Script Name : Quests/Nettleville/CaptainElgrondethsDilemma.lua + Script Purpose : Handles the quest, "Captain Elgrondeth's Dilemma" + Script Author : Jabantiz + Script Date : 6/12/2018 + Script Notes : + + Zone : Nettleville + Quest Giver : Knight-Captain Elgrondeth (2330030) + Preceded by : None + Followed by : None +--]] + +function Init(Quest) + AddQuestStepKill(Quest, 1, "I must kill ten sonic shriekers in Antonica.", 10, 100, "I must seek out and slay the sonic shriekers, young brown bears and timber wolves in Antonica as required by Captain Elgrondeth.", 611, 120297, 121406) + AddQuestStepCompleteAction(Quest, 1, "Step1Complete") +end + +function Accepted(Quest, QuestGiver, Player) +end + +function Deleted(Quest, QuestGiver, Player) +end + +function Declined(Quest, QuestGiver, Player) +end + +function Step1Complete(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 1, "I have killed ten sonic shriekers.") + + AddQuestStepChat(Quest, 2, "I need to speak to Captain Elgrondeth in Nettleville.", 1, "I must seek out and slay the sonic shriekers, young brown bears and timber wolves in Antonica as required by Captain Elgrondeth.", 0, 2330030) + AddQuestStepCompleteAction(Quest, 2, "Step2Complete") +end + +function Step2Complete(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 2, "I spoke to Captain Elgrondeth in Nettleville.") + + AddQuestStepKill(Quest, 3, "I must kill five young brown bears roaming Antonica.", 5, 100, "I must seek out and slay the sonic shriekers, young brown bears and timber wolves in Antonica as required by Captain Elgrondeth.", 611, 120011, 121191) + AddQuestStepCompleteAction(Quest, 3, "Step3Complete") +end + +function Step3Complete(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 3, "I have killed five young brown bears.") + + AddQuestStepChat(Quest, 4, "I need to speak to Captain Elgrondeth in Nettleville.", 1, "I must seek out and slay the sonic shriekers, young brown bears and timber wolves in Antonica as required by Captain Elgrondeth.", 0, 2330030) + AddQuestStepCompleteAction(Quest, 4, "Step4Complete") +end + +function Step4Complete(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 4, "I spoke to Captain Elgrondeth in Nettleville.") + + AddQuestStepKill(Quest, 5, "I must hunt down and slay ten timber wolves in Antonica.", 5, 100, "I must seek out and slay the sonic shriekers, young brown bears and timber wolves in Antonica as required by Captain Elgrondeth.", 611, 120008, 121188) + AddQuestStepCompleteAction(Quest, 5, "Step5Complete") +end + +function Step5Complete(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 5, "I have killed ten timber wolves.") + + AddQuestStepChat(Quest, 6, "I need to speak to Captain Elgrondeth in Nettleville.", 1, "I must seek out and slay the sonic shriekers, young brown bears and timber wolves in Antonica as required by Captain Elgrondeth.", 0, 2330030) + AddQuestStepCompleteAction(Quest, 6, "QuestComplete") +end + +function QuestComplete(Quest, QuestGiver, Player) + -- The following UpdateQuestStepDescription and UpdateTaskGroupDescription are not needed, parser adds them for completion in case stuff needs to be moved around + UpdateQuestStepDescription(Quest, 6, "I spoke to Captain Elgrondeth in Nettleville.") + UpdateQuestTaskGroupDescription(Quest, 1, "I have sought out and slain the creatures required by the Captain.") + + UpdateQuestDescription(Quest, "I have accomplished all the tasks laid out before me by Captain Elgrondeth. He was impressed by my abilities. ") + GiveQuestReward(Quest, Player) +end + +function Reload(Quest, QuestGiver, Player, Step) + if step == 1 then + Step1Complete(Quest, QuestGiver, Player) + elseif step == 2 then + Step2Complete(Quest, QuestGiver, Player) + elseif step == 3 then + Step3Complete(Quest, QuestGiver, Player) + elseif step == 4 then + Step4Complete(Quest, QuestGiver, Player) + elseif step == 5 then + Step5Complete(Quest, QuestGiver, Player) + end +end \ No newline at end of file diff --git a/server/Quests/Nettleville/a_budding_hunter.lua b/server/Quests/Nettleville/a_budding_hunter.lua new file mode 100644 index 000000000..e839eee54 --- /dev/null +++ b/server/Quests/Nettleville/a_budding_hunter.lua @@ -0,0 +1,38 @@ +--[[ + Script Name : Quests/Nettleville/a_budding_hunter.lua + Script Purpose : Handles the quest, "A Budding Hunter" + Script Author : Scatman + Script Date : 2009.08.10 + + Zone : Nettleville + Quest Giver: Johfrit Gythell + Preceded by: Crate and Barrel (crate_and_barrel.lua) + Followed by: None +--]] + +function Init(Quest) + AddQuestStepChat(Quest, 1, "I need to speak with Lieutenant Dawson.", 1, "I need to find Lieutenant Dawson in the Peat Bog and see if she has work for me.", 0, 1980012) + AddQuestStepCompleteAction(Quest, 1, "Quest_Complete") +end + +function Accepted(Quest, QuestGiver, Player) + FaceTarget(QuestGiver, Player) + conversation = CreateConversation() + + PlayFlavor(QuestGiver, "voiceover/english/tutorial_revamp/johfrit_gythell/qey_village01/johfritgythell014.mp3", "", "", 2903854914, 2874917494, Player) + AddConversationOption(conversation, "Hmm. Thank you.") + StartConversation(conversation, QuestGiver, Player, "Lieutenant Dawson in the Peat Bog is always recruiting hands to help. She gives 'honest' work.") +end + +function Declined(Quest, QuestGiver, Player) +end + +function Quest_Complete(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 1, "I have spoken with Lieutenant Dawson.") + UpdateQuestTaskGroupDescription(Quest, 1, "I have found Lieutenant Dawson.") + UpdateQuestDescription(Quest, "I have spoken to Lieutenant Dawson.") + GiveQuestReward(Quest, Player) +end + +function Reload(Quest, QuestGiver, Player, Step) +end \ No newline at end of file diff --git a/server/Quests/Nettleville/book_bound_to_bring_knowldege.lua b/server/Quests/Nettleville/book_bound_to_bring_knowldege.lua new file mode 100644 index 000000000..b3efe91e3 --- /dev/null +++ b/server/Quests/Nettleville/book_bound_to_bring_knowldege.lua @@ -0,0 +1,63 @@ +--[[ + Script Name : Quests/Nettleville/book_bound_to_bring_knowldege.lua + Script Purpose : Handles the quest, "Books Bound to Bring Knowledge" + Script Author : Scatman + Script Date : 2009.08.10 + + Zone : Nettleville + Quest Giver: Helain Conyers + Preceded by: None + Followed by: Wind Blown Brell Serilis (wind_blown_brell_serilis.lua) +--]] + +-- Item ID's +local STACK_OF_BOOKS = 13282 + +function Init(Quest) + AddQuestStepChat(Quest, 1, "Andret can be found at the scribe building, in the Northern corner of town.", 1, "She has asked me to get some books from Andret Surtees.", 718, 2330035) + AddQuestStepCompleteAction(Quest, 1, "Step1_Complete_SpokeWithAndret") +end + +function Accepted(Quest, QuestGiver, Player) + FaceTarget(QuestGiver, Player) + conversation = CreateConversation() + + PlayFlavor(QuestGiver, "voiceover/english/tutorial_revamp/helain_conyers/qey_village01/helainconyers009.mp3", "", "", 154750033, 3665943959, Player) + AddConversationOption(conversation, "Sure thing. Be back soon!") + StartConversation(conversation, QuestGiver, Player, "Uh, thank you! Andret Surtees said that I could borrow some books from him. Always looking for more knowledge! Hehehe. Could you go pick them up for me?") +end + +function Declined(Quest, QuestGiver, Player) +end + +function Step1_Complete_SpokeWithAndret(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 1, "Andret gave me a stack of books for her.") + UpdateQuestTaskGroupDescription(Quest, 1, "Andret gave me a stack of books for her.") + + -- Stack of books + if not HasItem(Player, STACK_OF_BOOKS, 1) then + SummonItem(Player, STACK_OF_BOOKS) + end + + AddQuestStepChat(Quest, 2, "Speak to Helain. She was at the stairs leading to the Mariner's Bell.", 1, "I should return to her, now that I have run the errand.", 0, 2330007) + AddQuestStepCompleteAction(Quest, 2, "Quest_Complete") +end + +function Quest_Complete(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 2, "Helain was very thankful for the books.") + UpdateQuestTaskGroupDescription(Quest, 2, "Helain was very thankful for the books.") + + -- Stack of books + while HasItem(Player, STACK_OF_BOOKS, 1) do + RemoveItem(Player, STACK_OF_BOOKS) + end + + UpdateQuestDescription(Quest, "Helain was very thankful for Andret's books.") + GiveQuestReward(Quest, Player) +end + +function Reload(Quest, QuestGiver, Player, Step) + if Step == 1 then + Step1_Complete_SpokeWithAndret(Quest, QuestGiver, Player) + end +end \ No newline at end of file diff --git a/server/Quests/Nettleville/crate_and_barrel.lua b/server/Quests/Nettleville/crate_and_barrel.lua new file mode 100644 index 000000000..2f3f0dd0e --- /dev/null +++ b/server/Quests/Nettleville/crate_and_barrel.lua @@ -0,0 +1,100 @@ +--[[ + Script Name : Quests/Nettleville/crate_and_barrel.lua + Script Purpose : Handles the quest, "Crate and Barrel" + Script Author : Scatman + Script Date : 2008.09.28 + + Zone : Nettleville + Quest Giver: Johfrit Gythell + Preceded by: Looking for Work is Hard Work (looking_for_work_is_hard_work.lua) + Followed by: A Budding Hunter (a_budding_hunter.lua) +--]] + +-- Item ID's +local WATERLOGGED_CRATE = 15346 +local WATERPROOF_BARREL = 15348 + +function Init(Quest) + AddQuestStepHarvest(Quest, 1, "Get the crate that fell into the waterways at the Mariner's Bell", 1, 100, "Johfrit has asked me to pick up some items that are underwater at the Mariner's Bell.", 655, WATERLOGGED_CRATE) + AddQuestStepCompleteAction(Quest, 1, "Step1_complete_ObtainedCrate") +end + +function Accepted(Quest, QuestGiver, Player) + FaceTarget(QuestGiver, Player) + conversation = CreateConversation() + + PlayFlavor(QuestGiver, "voiceover/english/tutorial_revamp/johfrit_gythell/qey_village01/johfritgythell016.mp3", "", "", 3784629349, 1480348336, Player) + AddConversationOption(conversation, "I do need the work. I'll be back with them soon!") + StartConversation(conversation, QuestGiver, Player, "It is the only task I have at hand. Retrieve both items and you will get paid for your work.") +end + +function Declined(Quest, QuestGiver, Player) +end + +function Step1_complete_ObtainedCrate(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 1, "I have obtained the crate.") + + AddQuestStepHarvest(Quest, 2, "Get the barrel that is also underwater at the Mariner's Bell.", 1, 100, "Johfrit has asked me to pick up some items that are underwater at the Mariner's Bell.", 2285, WATERPROOF_BARREL) + AddQuestStepCompleteAction(Quest, 2, "Step2_Complete_ObtainedBarrel") +end + + +function Step2_Complete_ObtainedBarrel(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 2, "I have obtained the barrel.") + + AddQuestStepChat(Quest, 3, "Return to Johfrit Gythell near The Golden Scabbard armory.", 1, "Johfrit has asked me to pick up some items that are underwater at the Mariner's Bell.", 0, 2330033) + AddQuestStepCompleteAction(Quest, 3, "Step3_Complete_TalkedToJohfrit") +end + +function Step3_Complete_TalkedToJohfrit(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 3, "I returned to Johfrit with both items.") + UpdateQuestTaskGroupDescription(Quest, 1, "I obtained the stinky crate and barrel for Johfrit.") + + AddQuestStepChat(Quest, 4, "I am to deliver the crate to Amazu Kharliko here, in town.", 1, "I am to deliver the barrel and crate for some coin.", 397, 2330015) + AddQuestStepCompleteAction(Quest, 4, "Step4_Complete_TalkedToAmazu") +end + + +function Step4_Complete_TalkedToAmazu(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 4, "I delivered the fish-smelling crate to Amazu.") + + -- a waterlogged crate + while HasItem(Player, WATERLOGGED_CRATE, 1) do + RemoveItem(Player, WATERLOGGED_CRATE) + end + + AddQuestStepChat(Quest, 5, "I should take Luadine Shardalow her barrel. She is in the bank.", 1, "I am to deliver the barrel and crate for some coin.", 397, 2330013) + AddQuestStepCompleteAction(Quest, 5, "Step5_Complete_TalkedToLuadine") +end + +function Step5_Complete_TalkedToLuadine(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 5, "I delivered the barrel to Laudine.") + + -- a waterproof barrel + while HasItem(Player, WATERPROOF_BARREL, 1) do + RemoveItem(Player, WATERPROOF_BARREL) + end + + AddQuestStepChat(Quest, 6, "Return to Johfrit Gythell with the money from Amazu and Laudine.", 1, "I am to deliver the barrel and crate for some coin.", 0, 2330033) + AddQuestStepCompleteAction(Quest, 6, "Quest_Complete") +end + + +function Quest_Complete(Quest, QuestGiver, Player) + UpdateQuestDescription(Quest, "Johfrit paid me for the work that I was able to do for him.") + GiveQuestReward(Quest, Player) +end + +function Reload(Quest, QuestGiver, Player, Step) + if Step == 1 then + Step1_complete_ObtainedCrate(Quest, QuestGiver, Player) + elseif Step == 2 then + Step2_Complete_ObtainedBarrel(Quest, QuestGiver, Player) + elseif Step == 3 then + Step3_Complete_TalkedToJohfrit(Quest, QuestGiver, Player) + elseif Step == 4 then + Step4_Complete_TalkedToAmazu(Quest, QuestGiver, Player) + elseif Step == 5 then + Step5_Complete_TalkedToLuadine(Quest, QuestGiver, Player) + end +end \ No newline at end of file diff --git a/server/Quests/Nettleville/curious_findings.lua b/server/Quests/Nettleville/curious_findings.lua new file mode 100644 index 000000000..e31a3d187 --- /dev/null +++ b/server/Quests/Nettleville/curious_findings.lua @@ -0,0 +1,52 @@ +--[[ + Script Name : Quests/Nettleville/curious_findings.lua + Script Purpose : Handles the quest, "Curious Findings" + Script Author : Scatman + Script Date : 2008.09.23 + + Zone : Nettleville + Quest Giver: Lakosha Maera + Preceded by: Ritual of Hearth (ritual_of_hearth.lua) + Followed by: Required Components (required_components.lua) +--]] + +function Init(Quest) + AddQuestStepChat(Quest, 1, "I need to speak with Spiritualist Laharn Rahai, just north east of the armor shop.", 1, "Lakosha Maera has asked that I speak with Spiritist Laharn Rahai to figure out what the foreign substance was in the soil I gathered.", 0, 2330049) + AddQuestStepCompleteAction(Quest, 1, "step1_complete_talkedToLaharn") +end + +function Accepted(Quest, QuestGiver, Player) + FaceTarget(QuestGiver, Player) + conversation = CreateConversation() + + PlayFlavor(QuestGiver, "voiceover/english/tutorial_revamp/lakosha_maera/qey_village01/quests/lakosha_maera/lakosha_maera013a.mp3", "", "", 529691889, 918351649, Player) + AddConversationOption(conversation, "Me too.") + StartConversation(conversation, QuestGiver, Player, "I hope he can help us.") +end + +function Declined(Quest, QuestGiver, Player) +end + +function Deleted(Quest, QuestGiver, Player) +end + +function step1_complete_talkedToLaharn(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 1, "I have spoken with Laharn Rahai.") + + AddQuestStepChat(Quest, 2, "I should speak with Assistant Alchemist Gunta in the Scribe's shop.", 1, "Lakosha Maera has asked that I speak with Spiritist Laharn Rahai to figure out what the foreign substance was in the soil I gathered.", 0, 2330026) + AddQuestStepCompleteAction(Quest, 2, "step2_complete_talkedToGunta") +end + +function step2_complete_talkedToGunta(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 2, "I have spoken with Assistant Alchemist Gunta, she was not willing to help.") + + AddQuestStepChat(Quest, 3, "I need to speak with Laharn again, near the armor shop.", 1, "Lakosha Maera has asked that I speak with Spiritist Laharn Rahai to figure out what the foreign substance was in the soil I gathered.", 0, 2330049) + AddQuestStepCompleteAction(Quest, 3, "Quest_Complete") +end + +function Quest_Complete(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 3, "I have spoken with Laharn.") + UpdateQuestTaskGroupDescription(Quest, 1, "I have spoken with Laharn Rahai.") + UpdateQuestDescription(Quest, "The alchemist was unwilling to identify the substance in the soil. Because of this Laharn says we will need to take the time to do the test ourselves.") + GiveQuestReward(Quest, Player) +end \ No newline at end of file diff --git a/server/Quests/Nettleville/looking_for_work_is_hard_work.lua b/server/Quests/Nettleville/looking_for_work_is_hard_work.lua new file mode 100644 index 000000000..1ae427c38 --- /dev/null +++ b/server/Quests/Nettleville/looking_for_work_is_hard_work.lua @@ -0,0 +1,75 @@ +--[[ + Script Name : Quests/Nettleville/looking_for_work_is_hard_work.lua + Script Purpose : Handles the quest, "Looking for Work is Hard Work" + Script Author : Scatman + Script Date : 2009.08.10 + + Zone : Nettleville + Quest Giver: Helain Conyers + Preceded by: Wind Blown Brell Serilis (wind_blown_brell_serilis.lua) + Followed by: Crate and Barrel (crate_and_barrel.lua) +--]] + +function Init(Quest) + AddQuestStepChat(Quest, 1, "I should find Amazu Kharliko hanging out in Market Row near the bank.", 1, "I should find her friends within Nettleville.", 0, 2330015) + AddQuestStepCompleteAction(Quest, 1, "Step1_Complete_TalkedToAmazu") +end + +function Accepted(Quest, QuestGiver, Player) + FaceTarget(QuestGiver, Player) + conversation = CreateConversation() + + PlayFlavor(QuestGiver, "voiceover/english/tutorial_revamp/helain_conyers/qey_village01/helainconyers023.mp3", "", "", 455340576, 611384116, Player) + AddConversationOption(conversation, "Good day to you!") + StartConversation(conversation, QuestGiver, Player, "I do not have anything for you to do, but perhaps others do! Amazu Kharliko, Andret Surtees, Bahati Linnxar, and Laudine Shardalow are great friends of mine. I suggest you speak to each of them. May Quellious bless your journey, mighty one!") +end + +function Declined(Quest, QuestGiver, Player) +end + +function Step1_Complete_TalkedToAmazu(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 1, "Amazu Kharliko did not have anything for me to do.") + + AddQuestStepChat(Quest, 2, "Andret Surtees can be found with the scribes in the northern most building.", 1, "I should find her friends within Nettleville.", 0, 2330035) + AddQuestStepCompleteAction(Quest, 2, "Step2_Complete_TalkedToAndret") +end + + +function Step2_Complete_TalkedToAndret(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 2, "Andret Surtees didn't have any work for me, either.") + + AddQuestStepChat(Quest, 3, "The armorsmith building in the southeast corner is where I can find Bahati Linnxar.", 1, "I should find her friends within Nettleville.", 0, 2330040) + AddQuestStepCompleteAction(Quest, 3, "Step3_Complete_TalkedToBahati") +end + +function Step3_Complete_TalkedToBahati(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 3, "I wasn't able to find work with Bahati Linnxar.") + + AddQuestStepChat(Quest, 4, "Luadine Shardalow should be found at the bank in the southwest building.", 1, "I should find her friends within Nettleville.", 0, 2330013) + AddQuestStepCompleteAction(Quest, 4, "Step4_Complete_TalkedToLuadine") +end + +function Step4_Complete_TalkedToLuadine(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 4, "None of Helain's friends had work for me, but Luadine has a lead for me.") + UpdateQuestTaskGroupDescription(Quest, 1, "None of Helain's friends had work for me, but Luadine has a lead for me.") + + AddQuestStepChat(Quest, 5, "Luadine Shardalow has sent me to speak with Johfrit Gythell.", 1, "He is in the southern area of town, near The Golden Scabbard armoy.", 0, 2330033) + AddQuestStepCompleteAction(Quest, 5, "Quest_Complete") +end + +function Quest_Complete(Quest, QuestGiver, Player) + UpdateQuestDescription(Quest, "None of Helain's friends had work for me, but Luadine had a lead for me.") + GiveQuestReward(Quest, Player) +end + +function Reload(Quest, QuestGiver, Player, Step) + if Step == 1 then + Step1_Complete_TalkedToAmazu(Quest, QuestGiver, Player) + elseif Step == 2 then + Step2_Complete_TalkedToAndret(Quest, QuestGiver, Player) + elseif Step == 3 then + Step3_Complete_TalkedToBahati(Quest, QuestGiver, Player) + elseif Step == 4 then + Step4_Complete_TalkedToLuadine(Quest, QuestGiver, Player) + end +end \ No newline at end of file diff --git a/server/Quests/Nettleville/refill_the_oakmyst_spider_silk_jars.lua b/server/Quests/Nettleville/refill_the_oakmyst_spider_silk_jars.lua new file mode 100644 index 000000000..9d503ff13 --- /dev/null +++ b/server/Quests/Nettleville/refill_the_oakmyst_spider_silk_jars.lua @@ -0,0 +1,55 @@ +--[[ + Script Name : Quests/Nettleville/refill_the_oakmyst_spider_silk_jars.lua + Script Purpose : Handles the quest, "Refill the Oakmyst Spider Silk Jars" + Script Author : Jabantiz + Script Date : 6/13/2018 + Script Notes : + + Zone : The City of Qeynos + Quest Giver : + Preceded by : None + Followed by : None +--]] + + +function Init(Quest) + AddQuestStepKill(Quest, 1, "I must slay some Oakmyst spiders in Oakmyst Forest", 8, 100, "I must slay Oakmyst spiders and collect their silk in the local Oakmyst Forest, reachable by any mariner bell within the City of Qeynos.", 354,1950014) + AddQuestStepCompleteAction(Quest, 1, "Step1Complete") +end + +function Step1Complete(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 1, "I have slain some Oakmyst spiders.") + UpdateQuestTaskGroupDescription(Quest, 1, "I have refilled the Oakmyst spider silk jars.") + + AddQuestStepChat(Quest, 2, "I must return to Varion Smitelin", 1, "I must return the spider silk jars to Varion Smitelin, a sage within the Concordium in the Qeynos Capitol District", 354, 2330056) + AddQuestStepCompleteAction(Quest, 2, "QuestComplete") +end + +function QuestComplete(Quest, QuestGiver, Player) + -- The following UpdateQuestStepDescription and UpdateTaskGroupDescription are not needed, parser adds them for completion in case stuff needs to be moved around + UpdateQuestStepDescription(Quest, 2, "I gave Smitelin the jars of spider silk.") + UpdateQuestTaskGroupDescription(Quest, 2, "I gave Smitelin the jars of spider silk.") + + UpdateQuestDescription(Quest, "I refilled the Oakmyst spider silk jars and gave them to Sage Varion Smitelin. Having not had the time to do it himself, he was very thankful.") + GiveQuestReward(Quest, Player) +end + +function Reload(Quest, QuestGiver, Player, Step) + if Step == 1 then + Step1Complete(Quest, QuestGiver, Player) + elseif Step == 2 then + QuestComplete(Quest, QuestGiver, Player) + end +end + +function Accepted(Quest, QuestGiver, Player) + AddConversationOption(conversation, "[Exit]", "CloseConversation") + StartDialogConversation(conversation, 1, QuestGiver, Player, "This jar is filled with spider silk but looks rather low, I should help Varion out by gathering some more.") +end + +function Declined(Quest, QuestGiver, Player) + -- Add dialog here for when the quest is declined +end + +function Deleted(Quest, QuestGiver, Player) +end \ No newline at end of file diff --git a/server/Quests/Nettleville/required_components.lua b/server/Quests/Nettleville/required_components.lua new file mode 100644 index 000000000..4d9f5f45f --- /dev/null +++ b/server/Quests/Nettleville/required_components.lua @@ -0,0 +1,110 @@ +--[[ + Script Name : Quests/Nettleville/required_components.lua + Script Purpose : Handles the quest, "Required Components" + Script Author : Scatman + Script Date : 2008.09.23 + + Zone : Nettleville + Quest Giver: Laharn Rahai + Preceded by: Curious Findings (curious_findings.lua) + Followed by: Unfortunate Mistakes (unfortunate_mistakes.lua) +--]] + +-- Item ID's +local REACTIVE_KESMITH = 11298 +local LITSUTH_BAG = 9088 +local SELKIE_MUSHROOM = 12074 + +-- Quest ID's +local REQUIRED_COMPONENTS = 302 + +function Init(Quest) + AddQuestStepObtainItem(Quest, 1, "I need to buy Reactive Kesmith. Laharn says that Alchemist Garion Dunam in the scribe shop will sell some.", 1, 100, "I need to acquire Reactive Kesmith some moss scrapings and a Litsuth Bag.", 10, REACTIVE_KESMITH) + AddQuestStepObtainItem(Quest, 2, "I need to buy a Litsuth bag. Laharn says that I can get one from Tailor Ehuraa Rotherham on the west side of Nettleville.", 1, 100, "I need to acquire Reactive Kesmith some moss scrapings and a Litsuth Bag.", 179, LITSUTH_BAG) + AddQuestStepObtainItem(Quest, 3, "I need to collect some Selki Mushrooms. Laharn says they can be found in the ferryway near the Mariner's Bell in western Nettleville.", 4, 100, "I need to acquire Reactive Kesmith some moss scrapings and a Litsuth Bag.", 821, SELKIE_MUSHROOM) + AddQuestStepCompleteAction(Quest, 1, "step1_complete_gotReactive") + AddQuestStepCompleteAction(Quest, 2, "step2_complete_gotBag") + AddQuestStepCompleteAction(Quest, 3, "step3_complete_gotMushrooms") +end + +function Accepted(Quest, QuestGiver, Player) + FaceTarget(QuestGiver, Player) + conversation = CreateConversation() + + PlayFlavor(QuestGiver, "voiceover/english/tutorial_revamp/spiritist_laharn_rahai/qey_village01/quests/laharn_rahai/laharn_rahai007a.mp3", "", "", 2216928573, 1758019339, Player) + AddConversationOption(conversation, "All right.") + StartConversation(conversation, QuestGiver, Player, "I will prepare the rest of what is necessary.") +end + +function Declined(Quest, QuestGiver, Player) +end + +function Deleted(Quest, QuestGiver, Player) +end + +function step1_complete_gotReactive(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 1, "I bought the Reactive Kesmith.") + if QuestIsComplete(Player, REQUIRED_COMPONENTS) then + GotAllItems(Quest, QuestGiver, Player) + end +end + +function step2_complete_gotBag(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 2, "I bought a Litsuth Bag.") + if QuestIsComplete(Player, REQUIRED_COMPONENTS) then + GotAllItems(Quest, QuestGiver, Player) + end +end + +function step3_complete_gotMushrooms(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 3, "I have collected some Selki Mushrooms.") + if QuestIsComplete(Player, REQUIRED_COMPONENTS) then + GotAllItems(Quest, QuestGiver, Player) + end +end + +function GotAllItems(Quest, QuestGiver, Player) + UpdateQuestTaskGroupDescription(Quest, 1, "I have acquired the needed reagants.") + AddQuestStepChat(Quest, 4, "I need to return to Laharn, near the armor shop.", 1, "I need to bring these reagants to Laharn and discover what the unknown substance is for Lakosha.", 0, 2330049) + AddQuestStepCompleteAction(Quest, 4, "step4_complete_talkedToLaharn") +end + +function step4_complete_talkedToLaharn(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 4, "I have spoken with Laharn.") + AddQuestStepChat(Quest, 5, "I need to speak with Lakosha, on the west side of Nettleville.", 1, "I need to bring these reagants to Laharn and discover what the unknown substance is for Lakosha.", 0, 2330053) + AddQuestStepCompleteAction(Quest, 5, "Quest_Complete") +end + +function Quest_Complete(Quest, QuestGiver, Player) + -- Reactive Kesmith + while HasItem(Player, REACTIVE_KESMITH, 1) do + RemoveItem(Player, REACTIVE_KESMITH) + end + + -- Litsuth bag + while HasItem(Player, LITSUTH_BAG, 1) do + RemoveItem(Player, LITSUTH_BAG) + end + + -- Selki Mushrooms + while HasItem(Player, SELKIE_MUSHROOM, 1) do + RemoveItem(Player, SELKIE_MUSHROOM) + end + + UpdateQuestStepDescription(Quest, 5, "I have spoken with Lakosha.") + UpdateQuestTaskGroupDescription(Quest, 2, "I have delivered the reagents and discovered what the unknown substance is.") + UpdateQuestDescription(Quest, "After I collect all of Laharn's needed components he performed his test. It turns out someone seems to be performing the Pa'Rok ceremony, in which one mourns for the dead. Unfortunately, according to Laharn, there are other compounds in the soil that may corrupt the ceremony.") + GiveQuestReward(Quest, Player) +end + +function Reload(Quest, QuestGiver, Player, Step) + if Step == 1 then + step1_complete_gotReactive(Quest, QuestGiver, Player) + elseif Step == 2 then + step2_complete_gotBag(Quest, QuestGiver, Player) + elseif Step == 3 then + step3_complete_gotMushrooms(Quest, QuestGiver, Player) + elseif Step == 4 then + step4_complete_talkedToLaharn(Quest, QuestGiver, Player) + end +end \ No newline at end of file diff --git a/server/Quests/Nettleville/restocking_bog_faerie_wings.lua b/server/Quests/Nettleville/restocking_bog_faerie_wings.lua new file mode 100644 index 000000000..1e19f25ec --- /dev/null +++ b/server/Quests/Nettleville/restocking_bog_faerie_wings.lua @@ -0,0 +1,50 @@ +--[[ + Script Name : Quests/Nettleville/restocking_bog_faerie_wings.lua + Script Purpose : Handles the quest, "Restocking Bog Faerie Wings" + Script Author : Scatman + Script Date : 2009.08.12 + + Zone : Nettleville + Quest Giver: Varion Smitelin + Preceded by: None + Followed by: None +--]] + +function Init(Quest) + AddQuestStepKill(Quest, 1, "I need to collect eight bog faerie wings.", 8, 100, "I need to collect eight Bog Faerie Wings from the Peat Bog for Scribe Varion Smitelin.", 110, 1980007, 1980008, 1980010, 1980052, 1980026, 1980056, 1980061) + AddQuestStepCompleteAction(Quest, 1, "Step1_Complete_GotWings") +end + +function Accepted(Quest, QuestGiver, Player) + FaceTarget(QuestGiver, Player) + conversation = CreateConversation() + + PlayFlavor(QuestGiver, "voiceover/english/scribe_varion_smitelin/qey_village01/varionsmitelin004.mp3", "", "", 4154898846, 3738847882, Player) + AddConversationOption(conversation, "You don't have to worry about me.") + StartConversation(conversation, QuestGiver, Player, "Fabulous! I need a handful of the wings to restock my supply. Good luck in that nasty bog and be careful!") +end + +function Declined(Quest, QuestGiver, Player) +end + +function Step1_Complete_GotWings(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 1, "I have collected the wings Varion needed.") + UpdateQuestTaskGroupDescription(Quest, 1, "I collected the eight Bog Faerie Wings for Scribe Varion Smitelin.") + UpdateQuestZone(Quest, "Nettleville") + + AddQuestStepChat(Quest, 2, "I need to return to Scribe Varion Smitelin.", 1, "I should return these eight Bog Faerie Wings to Scribe Varion Smitelin in Nettleville.", 0, 2330056) + AddQuestStepCompleteAction(Quest, 2, "Quest_Complete") +end + +function Quest_Complete(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 2, "I turned in the wings to Scribe Varion.") + UpdateQuestTaskGroupDescription(Quest, 2, "I turned in the eight Bog Faerie Wings to Scribe Varion Smitelin for money.") + UpdateQuestDescription(Quest, "I was able to resupply Scribe Varion Smitelin with Bog Faerie Wings and he paid me for a job well done.") + GiveQuestReward(Quest, Player) +end + +function Reload(Quest, QuestGiver, Player, Step) + if Step == 1 then + Step1_Complete_GotWings(Quest, QuestGiver, Player) + end +end \ No newline at end of file diff --git a/server/Quests/Nettleville/ritual_of_hearth.lua b/server/Quests/Nettleville/ritual_of_hearth.lua new file mode 100644 index 000000000..fd787e642 --- /dev/null +++ b/server/Quests/Nettleville/ritual_of_hearth.lua @@ -0,0 +1,89 @@ +--[[ + Script Name : Quests/Nettleville/ritual_of_hearth.lua + Script Purpose : Handles the quest, "Ritual of Hearth" + Script Author : Scatman + Script Date : 2009.08.21 + + Zone : Nettleville + Quest Giver: Lakosha Maera + Preceded by: None + Followed by: Curious Findings (curious_findings.lua) +--]] + +-- Item ID's +local LOOSE_SOIL = 9143 + +-- Quest ID's +local RITUAL_OF_HEALTH = 300 + +function Init(Quest) + AddQuestStep(Quest, 1, "I need to collect some dirt from under the tree on the west side of The Nettleville Market Row in the south western side of Nettleville.", 1, 100, "Lakosha Maera has asked that I collect some soil from around Nettleville.", 181) + AddQuestStep(Quest, 2, "I need to collect some dirt from under the tree near the entrance to the Peat Bog.", 1, 100, "Lakosha Maera has asked that I collect some soil from around Nettleville.", 181) + AddQuestStep(Quest, 3, "I need to collect some dirt from in front of the gates to South Qeynos in northwestern Nettleville.", 1, 100, "Lakosha Maera has asked that I collect some soil from around Nettleville.", 181) + AddQuestStepCompleteAction(Quest, 1, "step1_complete_gotDirtMarket") + AddQuestStepCompleteAction(Quest, 2, "step2_complete_gotDirtPeatBog") + AddQuestStepCompleteAction(Quest, 3, "step3_complete_gotDirtGates") +end + +function Accepted(Quest, QuestGiver, Player) + FaceTarget(QuestGiver, Player) + conversation = CreateConversation() + + PlayFlavor(QuestGiver, "voiceover/english/tutorial_revamp/lakosha_maera/qey_village01/quests/lakosha_maera/lakosha_maera007.mp3", "", "", 127670911, 3559521649, Player) + AddConversationOption(conversation, "All right.") + StartConversation(conversation, QuestGiver, Player, "Just a handful from each spot should be fine. Bring it back to me once you have it collected.") +end + +function Declined(Quest, QuestGiver, Player) +end + +function Deleted(Quest, QuestGiver, Player) +end + +function step1_complete_gotDirtMarket(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 1, "I have collected some dirt from under the tree on the west side of The Nettleville Mark Row.") + if QuestIsComplete(Player, RITUAL_OF_HEALTH) then + HarvestedAllDirt(Quest, QuestGiver, Player) + end +end + +function step2_complete_gotDirtPeatBog(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 2, "I have collected some dirt from under the tree on the west side of The Nettleville Mark Row.") + if QuestIsComplete(Player, RITUAL_OF_HEALTH) then + HarvestedAllDirt(Quest, QuestGiver, Player) + end +end + +function step3_complete_gotDirtGates(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 3, "I have collected some dirt from in front of the gates to South Qeynos.") + if QuestIsComplete(Player, RITUAL_OF_HEALTH) then + HarvestedAllDirt(Quest, QuestGiver, Player) + end +end + +function HarvestedAllDirt(Quest, QuestGiver, Player) + UpdateQuestTaskGroupDescription(Quest, 1, "I have collected all the needed soil.") + AddQuestStepChat(Quest, 4, "I need to return to Lakosha Maera on the west side of Nettleville.", 1, "Now that I have collected all of the soil I should return to Lakosha", 0, 2330053) + AddQuestStepCompleteAction(Quest, 4, "Quest_Complete") +end + +function Quest_Complete(Quest, QuestGiver, Player) + -- loose soil + while HasItem(Player, LOOSE_SOIL, 1) do + RemoveItem(Player, LOOSE_SOIL) + end + UpdateQuestStepDescription(Quest, 4, "I have spoken with Lakosha Maera.") + UpdateQuestTaskGroupDescription(Quest, 2, "I have spoken with Lakosha.") + UpdateQuestDescription(Quest, "I have gathered the needed soil to complete Lakosha's ritual. Within the gathered soil Lakosha found something disturbing, however.") + GiveQuestReward(Quest, Player) +end + +function Reload(Quest, QuestGiver, Player, Step) + if Step == 1 then + step1_complete_gotDirtMarket(Quest, QuestGiver, Player) + elseif Step == 2 then + step2_complete_gotDirtPeatBog(Quest, QuestGiver, Player) + elseif Step == 3 then + step3_complete_gotDirtGates(Quest, QuestGiver, Player) + end +end \ No newline at end of file diff --git a/server/Quests/Nettleville/to_the_source.lua b/server/Quests/Nettleville/to_the_source.lua new file mode 100644 index 000000000..1e7a577cc --- /dev/null +++ b/server/Quests/Nettleville/to_the_source.lua @@ -0,0 +1,39 @@ +--[[ + Script Name : Quests/Nettleville/to_the_source.lua + Script Purpose : Handles the quest, "To The Source" + Script Author : Scatman + Script Date : 2008.09.27 + + Zone : Nettleville + Quest Giver: Lakosha Maera + Preceded by: Unfortunate Mistakes (unfortunate_mistakes.lua) + Followed by: +--]] + +function Init(Quest) + AddQuestStepChat(Quest, 1, "I should go speak with Botanist Lith in the Peat Bog.", 1, ".", 0, 1980001) + AddQuestStepCompleteAction(Quest, 1, "step1_complete_talkedToBotanist") +end + +function Accepted(Quest, QuestGiver, Player) + if QuestGiver ~= nil then + if GetDistance(Player, QuestGiver) < 30 then + FaceTarget(QuestGiver, Player) + conversation = CreateConversation() + AddConversationOption(conversation, "I shall.") + PlayFlavor(QuestGiver, "voiceover/english/tutorial_revamp/lakosha_maera/qey_village01/quests/lakosha_maera/lakosha_maera025a.mp3", "", "", 3263220772, 3077282581, Player) + StartConversation(conversation, QuestGiver, Player, "I do not know if he was looking for something like this especially, but I am sure the news will interest him. Please, seek him out.") + end + end +end + +function Declined(Quest, QuestGiver, Player) +end + +function Deleted(Quest, QuestGiver, Player) +end + +function step1_complete_talkedToBotanist(Quest, QuestGiver, Player) + UpdateQuestDescription(Quest, "I have spoken with Botanist Lith.") + GiveQuestReward(Quest, Spawn) +end diff --git a/server/Quests/Nettleville/toxic_glands_for_erollisis_bane.lua b/server/Quests/Nettleville/toxic_glands_for_erollisis_bane.lua new file mode 100644 index 000000000..9879152e7 --- /dev/null +++ b/server/Quests/Nettleville/toxic_glands_for_erollisis_bane.lua @@ -0,0 +1,53 @@ +--[[ + Script Name : Quests/Nettleville/toxic_glands_for_erollisis_bane.lua + Script Purpose : Handles the quest, "Toxic Glands for Erollisi's Bane" + Script Author : Scatman + Script Date : 2009.08.12 + + Zone : Nettleville + Quest Giver: Foster Graham (2330025) + Preceded by: None + Followed by: None +--]] + +function Init(Quest) + AddQuestStepKill(Quest, 1, "I must kill some toxic bog slugs.", 6, 100, "I must slay six toxic bog slugs for their poison glands.", 2515, 1980006) + AddQuestStepCompleteAction(Quest, 1, "Step1_Complete_KilledSlugs") +end + +function Accepted(Quest, QuestGiver, Player) + FaceTarget(QuestGiver, Player) + conversation = CreateConversation() + + PlayFlavor(QuestGiver, "voiceover/english/foster_graham/qey_village01/fostergraham002.mp3", "", "", 196177219, 2787738591, Player) + AddConversationOption(conversation, "I will return with your poison.") + StartConversation(conversation, QuestGiver, Player, "Thank you, friend! Your plain looks veil a superior heart. The secret ingredient comes from the gland of the toxic bog slug, which crawls about the local peat bog. I need several of the toxic glands.") +end + +function Declined(Quest, QuestGiver, Player) +end + +function Deleted(Quest, QuestGiver, Player) +end + +function Step1_Complete_KilledSlugs(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 1, "I have killed some toxic bog slugs.") + UpdateQuestTaskGroupDescription(Quest, 1, "I have collected six toxic poison glands.") + UpdateQuestZone(Quest, "Nettleville") + + AddQuestStepChat(Quest, 2, "I must return to Foster Graham.", 1, "I need to bring these toxic glands to Foster Graham in Nettleville.", 0, 2330025) + AddQuestStepCompleteAction(Quest, 2, "Quest_Complete") +end + +function Quest_Complete(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 2, "I returned to Foster Graham.") + UpdateQuestTaskGroupDescription(Quest, 2, "I returned to Foster Graham.") + UpdateQuestDescription(Quest, "I have collected and delivered the six toxic glands for Foster Graham of Nettleville. While condescending at least he pays well.") + GiveQuestReward(Quest, Player) +end + +function Reload(Quest, QuestGiver, Player, Step) + if Step == 1 then + Step1_Complete_KilledSlugs(Quest, QuestGiver, Player) + end +end \ No newline at end of file diff --git a/server/Quests/Nettleville/unfortunate_mistakes.lua b/server/Quests/Nettleville/unfortunate_mistakes.lua new file mode 100644 index 000000000..ef5f518b9 --- /dev/null +++ b/server/Quests/Nettleville/unfortunate_mistakes.lua @@ -0,0 +1,55 @@ +--[[ + Script Name : UnfortunateMistakes.lua + Script Purpose : Handles the quest, "Unfortunate Mistakes" + Script Author : Jabantiz + Script Date : 6/11/2018 + Script Notes : + + Zone : Nettleville + Quest Giver : + Preceded by : Required Components (required_components.lua) + Followed by : To the Source (to_the_source.lua) +--]] + + +function Init(Quest) + AddQuestStepChat(Quest, 1, "I must stop the Pa'Rok ritual.", 1, "I need to stop the Pa'Rok ritual before something bad happens. I should check the three locations I originally gathered dirt from.", 11, 2330065) + AddQuestStepCompleteAction(Quest, 1, "Step1Complete") +end + +function Step1Complete(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 1, "I did not stop the ceremony, but I did stop the corrupted spirit that was inadvertently summoned and learned where the contaminated soil came from.") + + AddQuestStepChat(Quest, 2, "I should return to Lakosha Maera and tell her the news.", 1, "I need to stop the Pa'Rok ritual before something bad happens. I should check the three locations I originally gathered dirt from.", 11, 2330053) + AddQuestStepCompleteAction(Quest, 2, "QuestComplete") +end + +function QuestComplete(Quest, QuestGiver, Player) + -- The following UpdateQuestStepDescription and UpdateTaskGroupDescription are not needed, parser adds them for completion in case stuff needs to be moved around + UpdateQuestStepDescription(Quest, 2, "I have spoken with Lakosha Maera.") + UpdateQuestTaskGroupDescription(Quest, 1, "I have found out who was attempting the Pa'Rok ritual.") + + UpdateQuestDescription(Quest, "I found the person attempting the Pa'Rok ritual. I was too late to stop the ritual, but I did prevent the spirit that was summoned from harming anyone.") + GiveQuestReward(Quest, Player) +end + +function Reload(Quest, QuestGiver, Player, Step) + if Step == 1 then + Step1Complete(Quest, QuestGiver, Player) + end +end + +function Accepted(Quest, QuestGiver, Player) + FaceTarget(QuestGiver, Player) + conversation = CreateConversation() + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/lakosha_maera/qey_village01/quests/lakosha_maera/lakosha_maera019a.mp3", "", "", 3555353396, 4246766258, Spawn) + AddConversationOption(conversation, "Thank you.") + StartConversation(conversation, QuestGiver, Player, "Go quicky, and good luck.") +end + +function Declined(Quest, QuestGiver, Player) + -- Add dialog here for when the quest is declined +end + +function Deleted(Quest, QuestGiver, Player) +end \ No newline at end of file diff --git a/server/Quests/Nettleville/vida_needs_a_new_broom.lua b/server/Quests/Nettleville/vida_needs_a_new_broom.lua new file mode 100644 index 000000000..bb23e9ec5 --- /dev/null +++ b/server/Quests/Nettleville/vida_needs_a_new_broom.lua @@ -0,0 +1,53 @@ +--[[ + Script Name : Quests/Nettleville/vida_needs_a_new_broom.lua + Script Purpose : Handles the quest, "Vida Needs a New Broom" + Script Author : Scatman + Script Date : 2009.08.12 + + Zone : Nettleville + Quest Giver: Vida Sweeps + Preceded by: None + Followed by: None +--]] + +function Init(Quest) + AddQuestStepChat(Quest, 1, "I need to find Tawli Whiskwind.", 1, "I need to find Tawli Whiskwind in the Baubbleshire and pick up Vida's new broom.", 0, 2380047) + AddQuestStepCompleteAction(Quest, 1, "Step1_Complete_SpokeWithTawli") +end + +function Accepted(Quest, QuestGiver, Player) + FaceTarget(QuestGiver, Player) + conversation = CreateConversation() + + PlayFlavor(QuestGiver, "voiceover/english/vida_sweeps/qey_village01/vidasweeps002.mp3", "", "", 1651808120, 3255633748, Player) + AddConversationOption(conversation, "I'll go over to the Baubbleshire and look for her.") + StartConversation(conversation, QuestGiver, Player, "Great! I need you to pick up my new broom. Don't worry! It's already paid for; I just haven't picked it up. Tawli Whiskwind, a halfling lass in the Baubbleshire, should have it ready for me. You may have a difficult time finding her -- she's always running around looking for the finest materials for her brooms.") +end + +function Declined(Quest, QuestGiver, Player) +end + +function Deleted(Quest, QuestGiver, Player) +end + +function Step1_Complete_SpokeWithTawli(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 1, "I found Tawli Whiskwind.") + UpdateQuestTaskGroupDescription(Quest, 1, "I found Tawli Whiskwind and picked up the new broom for Vida.") + UpdateQuestZone(Quest, "Nettleville") + + AddQuestStepChat(Quest, 2, "I should return to Vida Sweeps.", 1, "I should get this new broom to Vida in Nettleville.", 0, 2330011) + AddQuestStepCompleteAction(Quest, 2, "Quest_Complete") +end + +function Quest_Complete(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 2, "I gave the new broom to Vida Sweeps.") + UpdateQuestTaskGroupDescription(Quest, 2, "I gave the new broom to Vida and received the dusty blue stone in payment.") + UpdateQuestDescription(Quest, "Vida seems happy with the new broom and put it to use right away. She gave me the dusty blue stone and suggested I may want to ask a mineral expert about it.") + GiveQuestReward(Quest, Player) +end + +function Reload(Quest, QuestGiver, Player, Step) + if Step == 1 then + Step1_Complete_SpokeWithTawli(Quest, QuestGiver, Player) + end +end \ No newline at end of file diff --git a/server/Quests/Nettleville/wind_blown_brell_serilis.lua b/server/Quests/Nettleville/wind_blown_brell_serilis.lua new file mode 100644 index 000000000..28ef73459 --- /dev/null +++ b/server/Quests/Nettleville/wind_blown_brell_serilis.lua @@ -0,0 +1,58 @@ +--[[ + Script Name : Quests/Nettleville/wind_blown_brell_serilis.lua + Script Purpose : Handles the quest, "Wind Blown Brell Serilis" + Script Author : Scatman + Script Date : 2009.08.10 + + Zone : Nettleville + Quest Giver: Helain Conyers + Preceded by: Book Bound to Bring Knowledge (book_bound_to_bring_knowledge.lua) + Followed by: Looking for Work is Hard Work (looking_for_work_is_hard_work.lua) +--]] + +-- Item ID's +local MISSING_PAGES = 9862 + +function Init(Quest) + AddQuestStepHarvest(Quest, 1, "Find the missing pages of the book.", 6, 100, "With the pages of the book scattered by the wind they could be anywhere in town.", 185, MISSING_PAGES) + AddQuestStepCompleteAction(Quest, 1, "Step1_Complete_FoundPages") +end + +function Accepted(Quest, QuestGiver, Player) + FaceTarget(QuestGiver, Player) + conversation = CreateConversation() + + PlayFlavor(QuestGiver, "voiceover/english/tutorial_revamp/helain_conyers/qey_village01/helainconyers016.mp3", "", "", 1734136541, 86043254, Player) + AddConversationOption(conversation, "I'll be back shortly... I hope.") + StartConversation(conversation, QuestGiver, Player, "That's very nice of you. By now the wind could have carried them anywhere in Nettleville. Good luck!") +end + +function Declined(Quest, QuestGiver, Player) +end + +function Step1_Complete_FoundPages(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 1, "I found all of the missing pages!") + UpdateQuestTaskGroupDescription(Quest, 1, "I found all of the missing pages!") + + AddQuestStepChat(Quest, 2, "Speak with Helain, and give her the pages.", 1, "Even though they are a bit dirty, I bet Helain will still be able to read them.", 0, 2330007) + AddQuestStepCompleteAction(Quest, 2, "Quest_Complete") +end + +function Quest_Complete(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 2, "Helain was very happy to have the pages returned.") + UpdateQuestTaskGroupDescription(Quest, 2, "The dirt didn't bother her at all. She was very thankful to have the book whole, again.") + + --lost book page + while HasItem(Player, MISSING_PAGES, 1) do + RemoveItem(Player, MISSING_PAGES) + end + + UpdateQuestDescription(Quest, "Helain was very happy to have the Followers of Brell Serilis book whole, again.") + GiveQuestReward(Quest, Player) +end + +function Reload(Quest, QuestGiver, Player, Step) + if Step == 1 then + Step1_Complete_FoundPages(Quest, QuestGiver, Player) + end +end \ No newline at end of file diff --git a/server/Quests/Oakmyst/a_citizens_request.lua b/server/Quests/Oakmyst/a_citizens_request.lua new file mode 100644 index 000000000..e74594542 --- /dev/null +++ b/server/Quests/Oakmyst/a_citizens_request.lua @@ -0,0 +1,68 @@ +--[[ + Script Name : Quests/Oakmyst/a_citizens_request.lua + Script Purpose : Handles the quest, "A Citizen's Request" + Script Author : Scatman + Script Date : 2009.05.03 + + Zone : Oakmyst Forest + Quest Giver: Lieutenant Charlin + Preceded by: Cause for Investigation (cause_for_investigation.lua) + Followed by: An Important Meeting (an_important_meeting.lua) +--]] + + +function Init(Quest) + AddQuestStepChat(Quest, 1, "I need to speak with Bardrian Vorsuth on the docks in western Oakmyst Forest.", 1, "Lieutenant Charlin has asked that I head to the docks in Oakmyst Forest on his behalf.", 0, 1950082) + AddQuestStepCompleteAction(Quest, 1, "Step1_Complete_SpokeWithBardrian") +end + +function Accepted(Quest, QuestGiver, Player) + FaceTarget(QuestGiver, Player) + conversation = CreateConversation() + + PlayFlavor(QuestGiver, "voiceover/english/tutorial_revamp/lieutenant_charlin/qey_adv01_oakmyst/quests/charlin/charlin011a.mp3", "", "", 3187068134, 4200320763, Player) + AddConversationOption(conversation, "I'll return with his information.") + StartConversation(conversation, QuestGiver, Player, "Bring his news back to me. We'll add it to what we've already got.") +end + +function Declined(Quest, QuestGiver, Player) +end + +function Step1_Complete_SpokeWithBardrian(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 1, "I have spoken with Bardrian Vorsuth.") + + AddQuestStepChat(Quest, 2, "I need to bring the news of the machine back to Lieutenant Charlin.", 1, "Lieutenant Charlin has asked that I head to the docks in Oakmyst Forest on his behalf.", 0, 1950015) + AddQuestStepCompleteAction(Quest, 2, "Step2_Complete_SpokeWithCharlin") +end + +function Step2_Complete_SpokeWithCharlin(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 2, "I have spoken with Lieutenant Charlin.") + + AddQuestStep(Quest, 3, "Lieutenant Charlin has asked that I search Oakmyst Forest thoroughly for another machine like the one found on the docks. I should check near water.", 1, 100, "Lieutenant Charlin has asked that I head to the docks in Oakmyst Forest on his behalf.", 0) + AddQuestStepCompleteAction(Quest, 3, "Step3_Complete_FoundMachine") +end + +function Step3_Complete_FoundMachine(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 3, "I have found another machine.") + + AddQuestStepChat(Quest, 4, "I need to tell Lieutenant Charlin of my find.", 1, "Lieutenant Charlin has asked that I head to the docks in Oakmyst Forest on his behalf.", 0, 1950015) + AddQuestStepCompleteAction(Quest, 4, "QuestComplete") +end + +function QuestComplete(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 4, "I have spoken to Lieutenant Charlin.") + UpdateQuestTaskGroupDescription(Quest, 1, "I have found a mysterious machine in Oakmyst Forest.") + + UpdateQuestDescription(Quest, "I found some sort of machinery that someone had set up in Oakmyst Forest. Though its purpose was not clear it was done so covertly and as such was probably an attempt of some sort of environmental sabotage.") + GiveQuestReward(Quest, Player) +end + +function Reload(Quest, QuestGiver, Player, Step) + if Step == 1 then + Step1_Complete_SpokeWithBardrian(Quest, QuestGiver, Player) + elseif Step == 2 then + Step2_Complete_SpokeWithCharlin(Quest, QuestGiver, Player) + elseif Step == 3 then + Step3_Complete_FoundMachine(Quest, QuestGiver, Player) + end +end \ No newline at end of file diff --git a/server/Quests/Oakmyst/an_important_meeting.lua b/server/Quests/Oakmyst/an_important_meeting.lua new file mode 100644 index 000000000..870a357f1 --- /dev/null +++ b/server/Quests/Oakmyst/an_important_meeting.lua @@ -0,0 +1,52 @@ +--[[ + Script Name : Quests/Oakmyst/an_important_meeting.lua + Script Purpose : Handles the quest, "An Important Meeting" + Script Author : Scatman + Script Date : 2009.05.03 + + Zone : Oakmyst Forest + Quest Giver: Lieutenant Charlin + Preceded by: A Citizen's Request (a_citizens_request.lua) + Followed by: Clean Up (clean_up.lua) +--]] + + +function Init(Quest) + AddQuestStepKill(Quest, 1, "I need to interrupt the meeting being held on the small hill that overlooks the falls just west of The Western Falls.", 1, 100, ".", 0, 1950066) + AddQuestStepCompleteAction(Quest, 1, "Step1_Complete_KilledGilrix") +end + +function Accepted(Quest, QuestGiver, Player) + FaceTarget(QuestGiver, Player) + conversation = CreateConversation() + + PlayFlavor(QuestGiver, "voiceover/english/tutorial_revamp/lieutenant_charlin/qey_adv01_oakmyst/quests/charlin/charlin019a.mp3", "", "", 1345224197, 2287197630, Player) + AddConversationOption(conversation, "Thanks.") + StartConversation(conversation, QuestGiver, Player, "Be safe. They won't appreciate this, heh.") +end + +function Declined(Quest, QuestGiver, Player) +end + +function Step1_Complete_KilledGilrix(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 1, "I have interrupted the meeting.") + + -- A Gnollish Contingency Book + SummonItem(Player, 210027, 1) + + AddQuestStepChat(Quest, 2, "I need to return to Lieutenant Charlin and tell him what happened.", 1, ".", 0, 1950015) + AddQuestStepCompleteAction(Quest, 2, "QuestComplete") +end + +function QuestComplete(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 1, "I have spoken with Lieutenant Charlin.") + + UpdateQuestDescription(Quest, "I interrupted the meeting just as planned. It was between a few gnolls and a gnome. The gnome ran off but the gnolls were slain. The information found on them will help deconstruct their plans in Oakmyst Forest.") + GiveQuestReward(Quest, Player) +end + +function Reload(Quest, QuestGiver, Player, Step) + if Step == 1 then + Step1_Complete_KilledGilrix(Quest, QuestGiver, Player) + end +end \ No newline at end of file diff --git a/server/Quests/Oakmyst/an_ode_to_oakmyst.lua b/server/Quests/Oakmyst/an_ode_to_oakmyst.lua new file mode 100644 index 000000000..97e12140c --- /dev/null +++ b/server/Quests/Oakmyst/an_ode_to_oakmyst.lua @@ -0,0 +1,81 @@ +--[[ + Script Name : an_ode_to_oakmyst.lua + Script Purpose : Handles the quest, "An Ode to Oakmyst" + Script Author : ememjr + Script Date : 5/9/2017 + Script Notes : + + Zone : Oakmyst Forest + Quest Giver : + Preceded by : None + Followed by : None +--]] + + +function Init(Quest) + AddQuestStepLocation(Quest, 1, "Go to Sloshed Tree", 10, "Visit the Oakmyst location hinted of in the line \"A lonesome trunk drifting amidst the clear blue.\"", 11, 924, 2, -276) + AddQuestStepCompleteAction(Quest, 1, "Step1Complete") +end + +function Step1Complete(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 1, "Visited Sloshed Tree") + UpdateQuestTaskGroupDescription(Quest, 1, "I visited the Sloshed Tree.") + + AddQuestStepLocation(Quest, 2, "Go to Oakmyst Falls", 10, "Visit the Oakmyst location hinted of in the line \"The life giver billows and feeds.\"", 11, 994, 0, -204) + AddQuestStepCompleteAction(Quest, 2, "Step2Complete") +end + +function Step2Complete(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 2, "Visited Oakmyst Falls") + UpdateQuestTaskGroupDescription(Quest, 2, "I visited Oakmyst Falls.") + + AddQuestStepLocation(Quest, 3, "Go to Shaded Tail Glade", 10, "Visit the Oakmyst location hinted of in the line \"Dark beauty with huddled rodent masses hangs over the trailed pass.\"", 11, 866, 11, -226) + AddQuestStepCompleteAction(Quest, 3, "Step3Complete") +end + +function Step3Complete(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 3, "Visited Shaded Tail Glade") + UpdateQuestTaskGroupDescription(Quest, 3, "I visited the Shaded Tail Glade") + + AddQuestStepLocation(Quest, 4, "Go to Fay Overlook", 10, "Visit the Oakmyst location hinted of in the line \"A perch above the trees to gaze down upon the shimmering fay.\"", 11, 853, 13, -314) + AddQuestStepCompleteAction(Quest, 4, "Step4Complete") +end + +function Step4Complete(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 4, "Visited Fay Overlook") + UpdateQuestTaskGroupDescription(Quest, 4, "I visited the Fay Overlook.") + + AddQuestStepLocation(Quest, 5, "Go to Teardrop Cave", 10, "Visit the Oakmyst location hinted of in the line \"A place of secluded beauty, flowering an isolated teardrop.\"", 11, 935, 12, -172 ) + AddQuestStepCompleteAction(Quest, 5, "QuestComplete") +end + +function QuestComplete(Quest, QuestGiver, Player) + -- The following UpdateQuestStepDescription and UpdateTaskGroupDescription are not needed, parser adds them for completion in case stuff needs to be moved around + UpdateQuestStepDescription(Quest, 5, "Visited Teardrop Cave") + UpdateQuestTaskGroupDescription(Quest, 5, "I visited Teardrop Cave.") + + UpdateQuestDescription(Quest, "I visited all the points of interests hinted at within the poem called \"An Ode to Oakmyst\".") + GiveQuestReward(Quest, Player) +end + +function Reload(Quest, QuestGiver, Player, Step) + if Step == 1 then + Step1Complete(Quest, QuestGiver, Player) + elseif Step == 2 then + Step2Complete(Quest, QuestGiver, Player) + elseif Step == 3 then + Step3Complete(Quest, QuestGiver, Player) + elseif Step == 4 then + Step4Complete(Quest, QuestGiver, Player) + elseif Step == 5 then + QuestComplete(Quest, QuestGiver, Player) + end +end + +function Accepted(Quest, QuestGiver, Player) + -- Add dialog here for when the quest is accepted +end + +function Declined(Quest, QuestGiver, Player) + -- Add dialog here for when the quest is declined +end diff --git a/server/Quests/Oakmyst/booze_in_the_drink.lua b/server/Quests/Oakmyst/booze_in_the_drink.lua new file mode 100644 index 000000000..68534ea64 --- /dev/null +++ b/server/Quests/Oakmyst/booze_in_the_drink.lua @@ -0,0 +1,69 @@ +--[[ + Script Name : Quests/Oakmyst/booze_in_the_drink.lua + Script Purpose : Handles the quest, "Booze in the Drink" + Script Author : Scatman + Script Date : 2008.09.19 + + Zone : Oakmyst Forest + Quest Giver: Marv Boilfist + Preceded by: None + Followed by: None +--]] + + +function Init(Quest) + -- a keg of booze + AddQuestStepObtainItem(Quest, 1, "I need to rescue the drowning booze.", 8, 100, "Marv Boilfist has lost a large amount of booze off the docks in Oakmyst Forest. He has asked that I help retrieve it.", 2285, 1807) + AddQuestStepCompleteAction(Quest, 1, "Step1_Complete_RescuedBooze") +end + +function Accepted(Quest, QuestGiver, Player) + FaceTarget(QuestGiver, Player) + conversation = CreateConversation() + + AddConversationOption(conversation, "I'll be back.") + StartConversation(conversation, QuestGiver, Player, "Glad to hear it!") +end + +function Declined(Quest, QuestGiver, Player) +end + +function Step1_Complete_RescuedBooze(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 1, "I have rescued the booze from the water.") + + AddQuestStepChat(Quest, 2, "I need to bring the booze back to Marv Boilfist.", 1, "Marv Boilfist has lost a large amount of booze off the docks in Oakmyst Forest. He has asked that I help retrieve it.", 0, 1950027) + AddQuestStepCompleteAction(Quest, 2, "Step2_Complete_SpokeWithMarv") +end + +function Step2_Complete_SpokeWithMarv(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 2, "I have given Marv his booze.") + + -- a keg of booze + while HasItem(Player, 1807) do + RemoveItem(Player, 1807) + end + + AddQuestStepChat(Quest, 3, "I need to tell Lieutenant Charlin of the Blackburrow Stout I found.", 1, "Marv Boilfist has lost a large amount of booze off the docks in Oakmyst Forest. He has asked that I help retrieve it.", 0, 1950015) + AddQuestStepCompleteAction(Quest, 3, "Quest_Complete") +end + +function Quest_Complete(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 3, "I have spoken with Lieutenant Charlin.") + UpdateQuestTaskGroupDescription(Quest, 1, "I have found Marv's booze as well as some Blackburrow Stout.") + + -- blackburrow stout + while HasItem(Player, 3774) do + RemoveItem(Player, 3774) + end + + UpdateQuestDescription(Quest, "I have found Marv's kegs for him. One keg I brought back wasn't one of Marv's, but was a keg of Blackburrow Stout. I reported this to the Qeynos Guard at Marv's suggestion.") + GiveQuestReward(Quest, Player) +end + +function Reload(Quest, QuestGiver, Player, Step) + if Step == 1 then + Step1_Complete_RescuedBooze(Quest, QuestGiver, Player) + elseif Step == 2 then + Step2_Complete_SpokeWithMarv(Quest, QuestGiver, Player) + end +end \ No newline at end of file diff --git a/server/Quests/Oakmyst/cause_for_investigation.lua b/server/Quests/Oakmyst/cause_for_investigation.lua new file mode 100644 index 000000000..7555a53ef --- /dev/null +++ b/server/Quests/Oakmyst/cause_for_investigation.lua @@ -0,0 +1,61 @@ +--[[ + Script Name : Quests/Oakmyst/cause_for_investigation.lua + Script Purpose : Handles the quest, "Cause for Investigation" + Script Author : Scatman + Script Date : 2009.10.07 + + Zone : Oakmyst Forest + Quest Giver: Lieutenant Charlin + Preceded by: Natural Causes? (natural_causes.lua) + Followed by: A Citizen's Request (a_citizens_request.lua) +--]] + + +function Init(Quest) + -- unearthed soil + Say(NPC, "This is me talking INit") + AddQuestStepObtainItem(Quest, 1, "Lieutenant Charlin would like me to collect soil samples from all around Oakmyst Forest.", 5, 100, "Charlin has asked that I collect soil samples from the dirt piles that are popping up all around Oakmyst Forest.", 10, 15098) + AddQuestStepCompleteAction(Quest, 1, "Step1_Complete_GotSoil") +end + +function Accepted(Quest, QuestGiver, Player) + FaceTarget(QuestGiver, Player) + conversation = CreateConversation() + Say(QuestGiver, "This is me talking try to set spawn to acive") + PlayFlavor(QuestGiver, "voiceover/english/tutorial_revamp/lieutenant_charlin/qey_adv01_oakmyst/quests/charlin/charlin008a.mp3", "", "", 717032559, 738942880, Player) + + AddConversationOption(conversation, "You're welcome.") + StartConversation(conversation, QuestGiver, Player, "It may be nothing, but it may help us. Thanks for doing this.") + +end + +function Declined(Quest, QuestGiver, Player) + +end + + +function Step1_Complete_GotSoil(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 1, "I have collected some soil samples for Lieutenant Charlin.") + + AddQuestStepChat(Quest, 2, "I need to bring this soil to Lieutenant Charlin.", 1, "Charlin has asked that I collect soil samples from the dirt piles that are popping up all around Oakmyst Forest.", 0, 1950008) + AddQuestStepCompleteAction(Quest, 2, "QuestComplete") +end + +function QuestComplete(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 2, "I have spoken with Lieutenant Charlin.") + UpdateQuestTaskGroupDescription(Quest, 1, "I have collected the soil for Charlin.") + + -- remove unearthed soil + while HasItem(Player, 15098) do + RemoveItem(Player, 15098) + end + + UpdateQuestDescription(Quest, "I have gathered the soil samples for Charlin. He hopes something will turn up from the tests.") + GiveQuestReward(Quest, Player) +end + +function Reload(Quest, QuestGiver, Player, Step) + if Step == 1 then + Step1_Complete_GotSoil(Quest, QuestGiver, Player) + end +end diff --git a/server/Quests/Oakmyst/clean_up.lua b/server/Quests/Oakmyst/clean_up.lua new file mode 100644 index 000000000..8f041cab6 --- /dev/null +++ b/server/Quests/Oakmyst/clean_up.lua @@ -0,0 +1,81 @@ +--[[ + Script Name : Quests/Oakmyst/clean_up.lua + Script Purpose : Handles the quest, "Clean Up" + Script Author : Scatman + Script Date : 2009.10.08 + + Zone : Oakmyst Forest + Quest Giver: Lieutenant Charlin + Preceded by: An Important Meeting (an_important_meeting.lua) + Followed by: Reinforcements (reinforcements.lua) +--]] + + +function Init(Quest) + AddQuestStepKill(Quest, 1, "I need to kill Lieutenant Gnar'Sok. I can find him hiding in an alcove just northwest of The Western Falls.", 1, 100, "I need to take out the remaining gnoll lieutenants.", 1220, 1950086) + AddQuestStepKill(Quest, 2, "I need to kill Lieutenant Chorsun. The path west from Lieutenant Charlin leads to him if I turn north before passing under the bridge.", 1, 100, "I need to take out the remaining gnoll lieutenants.", 1220, 1950085) + AddQuestStepKill(Quest, 3, "I need to kill Lieutenant Scyn. He is hiding on a rocky hill southeast of Clearwater Pond.", 1, 100, "I need to take out the remaining gnoll lieutenants.", 1220, 1950084) + AddQuestStepCompleteAction(Quest, 1, "Step1_Complete_KilledGnarSok") + AddQuestStepCompleteAction(Quest, 2, "Step2_Complete_KilledChorsun") + AddQuestStepCompleteAction(Quest, 3, "Step3_Complete_KilledScyn") +end + +function Accepted(Quest, QuestGiver, Player) + FaceTarget(QuestGiver, Player) + conversation = CreateConversation() + + PlayFlavor(QuestGiver, "voiceover/english/tutorial_revamp/lieutenant_charlin/qey_adv01_oakmyst/quests/charlin/charlin024b.mp3", "", "", 2171842973, 3442277052, Player) + AddConversationOption(conversation, "Thank you.") + StartConversation(conversation, QuestGiver, Player, "Taking them out will be a huge victory for us here, good luck.") +end + +function Declined(Quest, QuestGiver, Player) +end + +function Step1_Complete_KilledGnarSok(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 1, "I have slain Lieutenant Gnar'Sok.") + + if QuestIsComplete(Player, 208) then + Multiple_Steps_Complete(Quest, QuestGiver, Player) + end +end +function Step2_Complete_KilledChorsun(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 2, "I have slain Lieutenant Chorsun.") + + if QuestIsComplete(Player, 208) then + Multiple_Steps_Complete(Quest, QuestGiver, Player) + end +end + +function Step3_Complete_KilledScyn(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 3, "I have slain Lieutenant Scyn.") + + if QuestIsComplete(Player, 208) then + Multiple_Steps_Complete(Quest, QuestGiver, Player) + end +end + +function Multiple_Steps_Complete(Quest, QuestGiver, Player) + UpdateQuestTaskGroupDescription(Quest, 1, "I have slain the three gnoll lieutenants.") + + AddQuestStepChat(Quest, 4, "I need to return to Lieutenant Charlin.", 1, "I need to bring the news of the slain lieutenants back to Lieutenant Charlin.", 0, 1950015) + AddQuestStepCompleteAction(Quest, 4, "QuestComplete") +end + +function QuestComplete(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 4, "I have spoken with Lieutenant Charlin.") + UpdateQuestTaskGroupDescription(Quest, 2, "I have spoken with Lieutenant Charlin.") + + UpdateQuestDescription(Quest, "I have slain all three of the gnoll lieutenants. With their deaths the Oakmyst Forest should be free of gnollish corruption for some time.") + GiveQuestReward(Quest, Player) +end + +function Reload(Quest, QuestGiver, Player, Step) + if Step == 1 then + Step1_Complete_KilledGnarSok(Quest, QuestGiver, Player) + elseif Step == 2 then + Step2_Complete_KilledChorsun(Quest, QuestGiver, Player) + elseif Step == 3 then + Step3_Complete_KilledScyn(Quest, QuestGiver, Player) + end +end \ No newline at end of file diff --git a/server/Quests/Oakmyst/destroy_the_corruption.lua b/server/Quests/Oakmyst/destroy_the_corruption.lua new file mode 100644 index 000000000..29604190f --- /dev/null +++ b/server/Quests/Oakmyst/destroy_the_corruption.lua @@ -0,0 +1,49 @@ +--[[ + Script Name : Quests/Oakmyst/destroy_the_corruption.lua + Script Purpose : Handles the quest, "Destroy the Corruption" + Script Author : Scatman + Script Date : 2009.05.09 + + Zone : Oakmyst Forest + Quest Giver: Scholar Neola + Preceded by: Judgement of the Dryads (judgement_of_the_dryads.lua) + Followed by: None +--]] + + +function Init(Quest) + AddQuestStepKill(Quest, 1, "Find and defeat Rotweed.", 1, 100, "I must slay Rotweed. This being can be found in the Teardrop Cave in Oakmyst Forest.", 611, 1950204) + AddQuestStepCompleteAction(Quest, 1, "Step1_Complete_KilledRotweed") +end + +function Accepted(Quest, QuestGiver, Player) + FaceTarget(QuestGiver, Player) + conversation = CreateConversation() + + PlayFlavor(QuestGiver, "voiceover/english/empress_anassa/qey_adv01_oakmyst/empressanassa002.mp3", "", "", 3988531876, 1061259431, Player) + AddConversationOption(conversation, "What is Rotweed?", "WhatIsRotweed") + AddConversationOption(conversation, "I will battle this Rotweed and return victorious.") + StartConversation(conversation, QuestGiver, Player, "The evil calls itself Rotweed and lurks in the darkness of Teardrop Cave. It buries itself in the cave walls and exudes corruption upon this woodland. ") +end + +function Declined(Quest, QuestGiver, Player) +end + +function Step1_Complete_KilledRotweed(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 1, "I have found and defeated Rotweed .") + UpdateQuestTaskGroupDescription(Quest, 1, "I have slain the many creatures that made up Rotweed the plant fiend.") + + AddQuestStepChat(Quest, 2, "Speak to Empress Anassa.", 1, "I must return to speak to Empress Anassa in Oakmyst Forest.", 0, 1950078) + AddQuestStepCompleteAction(Quest, 2, "QuestComplete") +end + +function QuestComplete(Quest, QuestGiver, Player) + UpdateQuestDescription(Quest, "I encountered and defeated the twisted plant fiend Rotweed. Empress Anassa of the Oakmyst dryads was very appreciative.") + GiveQuestReward(Quest, Player) +end + +function Reload(Quest, QuestGiver, Player, Step) + if Step == 1 then + Step1_Complete_KilledRotweed(Quest, QuestGiver, Player) + end +end diff --git a/server/Quests/Oakmyst/druids_legacy.lua b/server/Quests/Oakmyst/druids_legacy.lua new file mode 100644 index 000000000..06941bb10 --- /dev/null +++ b/server/Quests/Oakmyst/druids_legacy.lua @@ -0,0 +1,32 @@ +--[[ + Script Name : Quests/Oakmyst/druids_legacy.lua + Script Author : Jabantiz + Script Date : 2017.12.30 05:12:17 + Script Purpose : + + Zone : Oakmyst + Quest Giver: + Preceded by: None + Followed by: +--]] + +function Init(Quest) + +end + +function Accepted(Quest, QuestGiver, Player) + +end + +function Declined(Quest, QuestGiver, Player) + +end + +function quest_complete(Quest, QuestGiver, Player) + +end + +function Reload(Quest, QuestGiver, Player, Step) + +end + diff --git a/server/Quests/Oakmyst/far_seas_requisition_okf050.lua b/server/Quests/Oakmyst/far_seas_requisition_okf050.lua new file mode 100644 index 000000000..a19d1159b --- /dev/null +++ b/server/Quests/Oakmyst/far_seas_requisition_okf050.lua @@ -0,0 +1,69 @@ +--[[ + Script Name : Quests/Oakmyst/far_seas_requisition_okf050.lua + Script Purpose : Handles the quest, "Far Seas Requisition #OKF050" + Script Author : ememjr + Script Date : 5/9/2017 + Script Notes : + + Zone : Oakmyst Forest + Quest Giver : + Preceded by : None + Followed by : None +--]] + + +function Init(Quest) + AddQuestStepKill(Quest, 1, "I must gather some mystail yearling tails.", 4, 100, "To fill the requisition, I must hunt down the creatures in Oakmyst Forest, reachable by any number of mariner bells in the City of Qeynos.", 172, 1950009) + AddQuestStepCompleteAction(Quest, 1, "Step1Complete") +end + +function Step1Complete(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 1, "I have gathered some mystail yearling tails.") + + AddQuestStepKill(Quest, 2, "I must gather tongues from clearwater frogs.", 3, 100, "To fill the requisition, I must hunt down the creatures in Oakmyst Forest, reachable by any number of mariner bells in the City of Qeynos.", 1104, 1950020) + AddQuestStepCompleteAction(Quest, 2, "Step2Complete") +end + +function Step2Complete(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 2, "I have gathered tongues from clearwater frogs.") + + AddQuestStepKill(Quest, 3, "I must get the hide from one Oakmyst great bear.", 1, 100, "To fill the requisition, I must hunt down the creatures in Oakmyst Forest, reachable by any number of mariner bells in the City of Qeynos.", 127, 1950023) + AddQuestStepCompleteAction(Quest, 3, "Step3Complete") +end + +function Step3Complete(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 3, "I have collected the hide of an Oakmyst great bear.") + UpdateQuestTaskGroupDescription(Quest, 1, "I have hunted down all the resources to fill the requisition.") + + AddQuestStepChat(Quest, 4, "I need to talk to Diggin Diggs", 1, "I must go to the province district of Qeynos to seek out the client for this order.", 10, 6600085) + AddQuestStepCompleteAction(Quest, 4, "QuestComplete") +end + +function QuestComplete(Quest, QuestGiver, Player) + -- The following UpdateQuestStepDescription and UpdateTaskGroupDescription are not needed, parser adds them for completion in case stuff needs to be moved around + UpdateQuestStepDescription(Quest, 4, "I talked to Diggin Diggs.") + UpdateQuestTaskGroupDescription(Quest, 2, "I have delivered the goods to Diggin Diggs.") + + UpdateQuestDescription(Quest, "I filled the Far Seas Requisition and delivered the goods to the client in the Qeynos Province District. I have been paid in full for this work, but the order was late.") + GiveQuestReward(Quest, Player) +end + +function Reload(Quest, QuestGiver, Player, Step) + if Step == 1 then + Step1Complete(Quest, QuestGiver, Player) + elseif Step == 2 then + Step2Complete(Quest, QuestGiver, Player) + elseif Step == 3 then + Step3Complete(Quest, QuestGiver, Player) + elseif Step == 4 then + QuestComplete(Quest, QuestGiver, Player) + end +end + +function Accepted(Quest, QuestGiver, Player) + -- Add dialog here for when the quest is accepted +end + +function Declined(Quest, QuestGiver, Player) + -- Add dialog here for when the quest is declined +end diff --git a/server/Quests/Oakmyst/far_seas_requisition_okf063.lua b/server/Quests/Oakmyst/far_seas_requisition_okf063.lua new file mode 100644 index 000000000..65b0239c3 --- /dev/null +++ b/server/Quests/Oakmyst/far_seas_requisition_okf063.lua @@ -0,0 +1,69 @@ +--[[ + Script Name : Quests/Oakmyst/far_seas_requisition_okf063.lua + Script Purpose : Handles the quest, "Far Seas Requisition #OKF063" + Script Author : ememjr + Script Date : 5/9/2017 + Script Notes : + + Zone : Oakmyst Forest + Quest Giver : + Preceded by : None + Followed by : None +--]] + + +function Init(Quest) + AddQuestStepKill(Quest, 1, "I must collect five Oakmyst fawn pelts.", 5, 100, "To fill the requisition, I must hunt down the creatures in Oakmyst Forest, reachable by any number of mariner bells in the City of Qeynos.", 138, 1950001) + AddQuestStepCompleteAction(Quest, 1, "Step1Complete") +end + +function Step1Complete(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 1, "I have collected five Oakmyst fawn pelts.") + + AddQuestStepKill(Quest, 2, "I must collect five badger cub pelts.", 5, 100, "To fill the requisition, I must hunt down the creatures in Oakmyst Forest, reachable by any number of mariner bells in the City of Qeynos.", 129, 1950035) + AddQuestStepCompleteAction(Quest, 2, "Step2Complete") +end + +function Step2Complete(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 2, "I have collected five badger cub pelts.") + + AddQuestStepKill(Quest, 3, "I must collect a single bear cub pelt.", 1, 100, "To fill the requisition, I must hunt down the creatures in Oakmyst Forest, reachable by any number of mariner bells in the City of Qeynos.", 128, 1950000) + AddQuestStepCompleteAction(Quest, 3, "Step3Complete") +end + +function Step3Complete(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 3, "I have collected a single bear cub pelt.") + UpdateQuestTaskGroupDescription(Quest, 1, "I have collected all of the items listed in the requisition.") + + AddQuestStepChat(Quest, 4, "I need to talk to Diggin Diggs", 1, "I must go to the province district of Qeynos to seek out the client for this order.", 10, 6600085) + AddQuestStepCompleteAction(Quest, 4, "QuestComplete") +end + +function QuestComplete(Quest, QuestGiver, Player) + -- The following UpdateQuestStepDescription and UpdateTaskGroupDescription are not needed, parser adds them for completion in case stuff needs to be moved around + UpdateQuestStepDescription(Quest, 4, "I talked to Diggin Diggs.") + UpdateQuestTaskGroupDescription(Quest, 2, "I have delivered the goods to Diggin Diggs.") + + UpdateQuestDescription(Quest, "I filled the Far Seas Requisition and delivered the goods to the client in the Qeynos Province District. I have been paid in full for this work, but the order was late.") + GiveQuestReward(Quest, Player) +end + +function Reload(Quest, QuestGiver, Player, Step) + if Step == 1 then + Step1Complete(Quest, QuestGiver, Player) + elseif Step == 2 then + Step2Complete(Quest, QuestGiver, Player) + elseif Step == 3 then + Step3Complete(Quest, QuestGiver, Player) + elseif Step == 4 then + QuestComplete(Quest, QuestGiver, Player) + end +end + +function Accepted(Quest, QuestGiver, Player) + -- Add dialog here for when the quest is accepted +end + +function Declined(Quest, QuestGiver, Player) + -- Add dialog here for when the quest is declined +end diff --git a/server/Quests/Oakmyst/feed_the_sapling.lua b/server/Quests/Oakmyst/feed_the_sapling.lua new file mode 100644 index 000000000..454026a0e --- /dev/null +++ b/server/Quests/Oakmyst/feed_the_sapling.lua @@ -0,0 +1,62 @@ +--[[ + Script Name : Quests/Oakmyst/feed_the_sapling.lua + Script Purpose : Handles the quest, "Feed the Sapling" + Script Author : Scatman + Script Date : 2009.10.08 + + Zone : Oakmyst Forest + Quest Giver: Scholar Neola + Preceded by: None + Followed by: Judgement of the Dryads (judgement_of_the_dryads.lua) +--]] + + +function Init(Quest) + AddQuestStep(Quest, 1, "Search the alchemy shelves.", 1, 100, "I must search for the alchemist shop in Nettleville to attain the magical plant nutrient.", 182) + AddQuestStepCompleteAction(Quest, 1, "Step1_Complete_FoundNutrients") +end + +function Accepted(Quest, QuestGiver, Player) + FaceTarget(QuestGiver, Player) + conversation = CreateConversation() + + PlayFlavor(QuestGiver, "voiceover/english/scholar_neola/qey_adv01_oakmyst/scholarneola002.mp3", "", "", 4033827219, 3906200141, Player) + AddConversationOption(conversation, "I will go and find this arcane nutrient.") + StartConversation(conversation, QuestGiver, Player, "I cannot leave this woodland, but you can. Within the villages of Qeynos an alchemist has created a powerful nutrient that will aid the sapling. Retrieve this prized item and feed it to the growing tree. ") +end + +function Declined(Quest, QuestGiver, Player) +end + +function Step1_Complete_FoundNutrients(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 1, "I searched the alchemy shelves.") + UpdateQuestTaskGroupDescription(Quest, 1, "I found Smitelin's Excel-o-gro in Nettleville.") + UpdateQuestZone(Quest, "Oakmyst Forest") + + AddQuestStepChat(Quest, 2, "Find the treant sapling.", 1, "I must sprinkle Smitelin's Excel-o-gro into the treant sapling of Oakmyst Forest.", 0, 1950068) + AddQuestStepCompleteAction(Quest, 2, "Step2_Complete_SpokeToSapling") +end + +function Step2_Complete_SpokeToSapling(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 2, "I poured the nutrient on the treant sapling.") + UpdateQuestTaskGroupDescription(Quest, 2, "I sprinkled the magical nutrient, Smitelin's Excel-o-gro onto the treant sapling.") + + AddQuestStepChat(Quest, 3, "Speak to Scholar Neola.", 1, "I should inform Scholar Neola that I saved the treant sapling.", 0, 1950079) + AddQuestStepCompleteAction(Quest, 3, "QuestComplete") +end + +function QuestComplete(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 3, "I spoke to Scholar Neola.") + UpdateQuestTaskGroupDescription(Quest, 3, "I spoke to Scholar Neola and informed her the sapling was fed.") + + UpdateQuestDescription(Quest, "I found a magical plant food called Smitelin's Excel-o-gro and fed it to the treant sapling in Oakmyst Forest.") + GiveQuestReward(Quest, Player) +end + +function Reload(Quest, QuestGiver, Player, Step) + if Step == 1 then + Step1_Complete_FoundNutrients(Quest, QuestGiver, Player) + elseif Step == 2 then + Step2_Complete_SpokeToSapling(Quest, QuestGiver, Player) + end +end \ No newline at end of file diff --git a/server/Quests/Oakmyst/glowmyst_juice.lua b/server/Quests/Oakmyst/glowmyst_juice.lua new file mode 100644 index 000000000..f45be396b --- /dev/null +++ b/server/Quests/Oakmyst/glowmyst_juice.lua @@ -0,0 +1,50 @@ +--[[ + Script Name : Quests/Oakmyst/glowmyst_juice.lua + Script Purpose : Handles the quest, "Glowmyst Juice" + Script Author : Scatman + Script Date : 2009.10.08 + + Zone : Oakmyst Forest + Quest Giver: Toppa Doppster + Preceded by: None + Followed by: None +--]] + + +function Init(Quest) + AddQuestStepKill(Quest, 1, "I need ten glowmyst beetle fluid sacs for Toppa.", 10, 100, "Toppa would like me to collect some glowmyst juice for her friends.", 146, 1950002) + AddQuestStepCompleteAction(Quest, 1, "step1_complete_killedBeetles") + +end + +function Accepted(Quest, QuestGiver, Player) + FaceTarget(QuestGiver, Player) + conversation = CreateConversation() + + AddConversationOption(conversation, "You're welcome.") + StartConversation(conversation, QuestGiver, Player, "Great! Thank you!") +end + +function Declined(Quest, QuestGiver, Player) +end + +function step1_complete_killedBeetles(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 1, "I have collected the fluid sacs.") + + AddQuestStepChat(Quest, 2, "I need to give these fluid sacs to Toppa", 1, "Toppa would like me to collect some glowmyst juice for her friends.", 146, 1950007) + AddQuestStepCompleteAction(Quest, 2, "Quest_Complete") +end + +function Quest_Complete(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 2, "I have given Toppa the glowmyst juice.") + UpdateQuestTaskGroupDescription(Quest, 1, "I have collected the fluid sacs.") + + UpdateQuestDescription(Quest, "I have given Toppa the glowmyst juice she wanted. She was very thankful.") + GiveQuestReward(Quest, Player) +end + +function Reload(Quest, QuestGiver, Player, Step) + if Step == 1 then + step1_complete_killedBeetles(Quest, QuestGiver, Player) + end +end \ No newline at end of file diff --git a/server/Quests/Oakmyst/judgement_of_the_dryads.lua b/server/Quests/Oakmyst/judgement_of_the_dryads.lua new file mode 100644 index 000000000..13cb9c5da --- /dev/null +++ b/server/Quests/Oakmyst/judgement_of_the_dryads.lua @@ -0,0 +1,51 @@ +--[[ + Script Name : Quests/Oakmyst/judgement_of_the_dryads.lua + Script Purpose : Handles the quest, "Judgement of the Dryads" + Script Author : Scatman + Script Date : 2009.10.08 + + Zone : Oakmyst Forest + Quest Giver: Scholar Neola + Preceded by: Feed the Sapling (feed_the_sapling.lua) + Followed by: Destroy the Corruption (destroy_the_corruption.lua) +--]] + + +function Init(Quest) + AddQuestStepKill(Quest, 1, "Slay five Sunshimmer Sprites.", 5, 100, "I must hunt down and slay five Sunshimmer Sprites in Oakmyst Forest.", 611, 1950100, 1950050, 1950072, 1950099, 1950053, 1950069, 1950052, 1950098, 1950049, 1950071, 1950051, 1950101, 1950070) + AddQuestStepCompleteAction(Quest, 1, "Step1_Complete_KillSprites") +end + +function Accepted(Quest, QuestGiver, Player) + FaceTarget(QuestGiver, Player) + conversation = CreateConversation() + + PlayFlavor(QuestGiver, "voiceover/english/judge_eunomia/qey_adv01_oakmyst/judgeeunomia002.mp3", "", "", 2678200574, 3115032598, Player) + AddConversationOption(conversation, "I shall do my best to lower their numbers.") + StartConversation(conversation, QuestGiver, Player, "They're corrupted fayfolke--bright with beauty but twisted and corrupted to the core. They're called the sunshimmer sprites. You must destroy them.") +end + +function Declined(Quest, QuestGiver, Player) +end + +function Step1_Complete_KillSprites(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 1, "I have slain five Sunshimmer Sprites.") + UpdateQuestTaskGroupDescription(Quest, 1, "I have slain five Sunshimmer Sprites in Oakmyst Forest.") + + AddQuestStepChat(Quest, 2, "Speak to Judge Eunomia.", 1, "I must speak to Judge Eunomia in Oakmyst Forest.", 0, 1950077) + AddQuestStepCompleteAction(Quest, 2, "QuestComplete") +end + +function QuestComplete(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 2, "I spoke to Judge Eunomia.") + UpdateQuestTaskGroupDescription(Quest, 2, "I spoke to Judge Eunomia in Oakmyst Forest.") + + UpdateQuestDescription(Quest, "I have served Judge Eunomia and the dryads of Oakmyst by lowering the population of the Sunshimmer Sprites, a corrupted form of fairies that began to infest the forest.") + GiveQuestReward(Quest, Player) +end + +function Reload(Quest, QuestGiver, Player, Step) + if Step == 1 then + Step1_Complete_KillSprites(Quest, QuestGiver, Player) + end +end \ No newline at end of file diff --git a/server/Quests/Oakmyst/natural_causes.lua b/server/Quests/Oakmyst/natural_causes.lua new file mode 100644 index 000000000..42c5cf29f --- /dev/null +++ b/server/Quests/Oakmyst/natural_causes.lua @@ -0,0 +1,81 @@ +--[[ + Script Name : Quests/Oakmyst/natural_causes.lua + Script Purpose : Handles the quest, "Natural Causes?" + Script Author : Scatman + Script Date : 2009.05.03 + modified by : Ememjr + modified date: 2017.04.21 + + Zone : Oakmyst Forest + Quest Giver: Lieutenant Charlin + Preceded by: None + Followed by: Cause for Investigation (cause_for_investigation.lua) +--]] + + +function Init(Quest) + AddQuestStepKill(Quest, 1, "I need to collect a poison gland from the frogs of Oakmyst Forest, commonly found near The Western Falls.", 1, 25, "Lieutenant Charlin has asked that I collect poison from some of the creatures local to Oakmyst Forest.", 160, 1950020) + AddQuestStepKill(Quest, 2, "I need to collect a poison sac from the spiders found near The Western Falls.", 1, 25, "Lieutenant Charlin has asked that I collect poison from some of the creatures local to Oakmyst Forest.", 158, 1950014,1950015) + AddQuestStepKill(Quest, 3, "I need to collect a poison sac from any of the mystail rats in Oakmyst Forest.", 1, 25, "Lieutenant Charlin has asked that I collect poison from some of the creatures local to Oakmyst Forest.", 112, 1950009,1950017,1950010,1950016) + AddQuestStepCompleteAction(Quest, 1, "Step1_Complete_GotPoison") + AddQuestStepCompleteAction(Quest, 2, "Step2_Complete_GotPoison") + AddQuestStepCompleteAction(Quest, 3, "Step3_Complete_GotPoison") +end + +function Accepted(Quest, QuestGiver, Player) + FaceTarget(QuestGiver, Player) + conversation = CreateConversation() + + PlayFlavor(QuestGiver, "voiceover/english/tutorial_revamp/lieutenant_charlin/qey_adv01_oakmyst/quests/charlin/charlin005a.mp3", "", "", 3816458075, 1868191399, Player) + AddConversationOption(conversation, "I will be.") + StartConversation(conversation, QuestGiver, Player, "Be careful out there.") +end + +function Declined(Quest, QuestGiver, Player) +end + +function Step1_Complete_GotPoison(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 1, "I have collected a frog poison gland.") + + if QuestIsComplete(Player, 207) then + MultipleStepComplete(Quest, QuestGiver, Player) + end +end + +function Step2_Complete_GotPoison(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 2, "I have found a poison sac from a spider in Oakmyst Forest.") + + if QuestIsComplete(Player, 207) then + MultipleStepComplete(Quest, QuestGiver, Player) + end +end + +function Step3_Complete_GotPoison(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 3, "I have collected a poison sac from a mystail rat in Oakmyst Forest.") + + if QuestIsComplete(Player, 207) then + MultipleStepComplete(Quest, QuestGiver, Player) + end +end + +function MultipleStepComplete(Quest, QuestGiver, Player) + UpdateQuestTaskGroupDescription(Quest, 1, "I have collected some poison for Lieutenant Charlin.") + AddQuestStepChat(Quest, 4, "I need to speak with Lieutenant Charlin near the gates to Castleview Hamlet.", 1, "I need to return to Lieutenant Charlin and give him the poison that I have collected.", 0, 1950008) + AddQuestStepCompleteAction(Quest, 4, "QuestComplete") +end + + +function QuestComplete(Quest, QuestGiver, Player) + UpdateQuestDescription(Quest, "I have collected the poisons that Charlin requested. He will send the poisons back to town to have tests run on them.") + GiveQuestReward(Quest, Player) +end + +function Reload(Quest, QuestGiver, Player, Step) + if Step == 1 then + Step1_Complete_GotPoison(Quest, QuestGiver, Player) + elseif Step == 2 then + Step2_Complete_GotPoison(Quest, QuestGiver, Player) + elseif Step == 3 then + Step3_Complete_GotPoison(Quest, QuestGiver, Player) + end +end diff --git a/server/Quests/Oakmyst/proof_of_poachers.lua b/server/Quests/Oakmyst/proof_of_poachers.lua new file mode 100644 index 000000000..8fc17ab32 --- /dev/null +++ b/server/Quests/Oakmyst/proof_of_poachers.lua @@ -0,0 +1,51 @@ +--[[ + Script Name : Quests/Oakmyst/proof_of_poachers.lua + Script Purpose : Handles the quest, "Proof of Poachers" + Script Author : Scatman + Script Date : 2009.10.09 + + Zone : Oakmyst Forest + Quest Giver: Steward Tredo + Preceded by: None + Followed by: None +--]] + + +function Init(Quest) + AddQuestStepKill(Quest, 1, "Slay two shady furriers", 2, 100, "Slay two shady furriers. They can be found at night lurking the Oakmyst Forest.", 2468, 1950006) + AddQuestStepCompleteAction(Quest, 1, "Step1_Complete_KilledPoachers") +end + +function Accepted(Quest, QuestGiver, Player) + FaceTarget(QuestGiver, Player) + conversation = CreateConversation() + + PlayFlavor(QuestGiver, "voiceover/english/optional1/steward_tredo/qey_adv01_oakmyst/stewardtredo001.mp3", "", "", 3490306942, 2253910242, Player) + AddConversationOption(conversation, "I'll keep my eyes out at night.") + StartConversation(conversation, QuestGiver, Player, "A new defender of Oakmyst? Grand! Tracker Galera seeks proof of the poachers' existence. They say they lurk the shadows at night. Bring her proof, and I'm sure she'll be grateful.") +end + +function Declined(Quest, QuestGiver, Player) +end + +function Step1_Complete_KilledPoachers(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 1, "I have collected a frog poison gland.") + UpdateQuestTaskGroupDescription(Quest, 1, "I slew two shady furriers and retrieved poached pelts as proof of their invasion of the woods.") + + AddQuestStepChat(Quest, 2, "Speak to Tracker Galera.", 1, "Speak to Tracker Galera, a wood elf that walks the trails of Oakmyst Forest.", 0, 1950011) + AddQuestStepCompleteAction(Quest, 2, "QuestComplete") +end + +function QuestComplete(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 2, "I have spoken to Tracker Galera.") + UpdateQuestTaskGroupDescription(Quest, 2, "I spoke with Tracker Galera and gave her poached pelts as proof of the poaching activity going on in the forest.") + + UpdateQuestDescription(Quest, "I hunted down the shady furriers and retrieved poached pelts of the Oakmyst creatures. I gave the pelts to Tracker Galera as proof of the poacher's activity within the woods.") + GiveQuestReward(Quest, Player) +end + +function Reload(Quest, QuestGiver, Player, Step) + if Step == 1 then + Step1_Complete_KilledPoachers(Quest, QuestGiver, Player) + end +end \ No newline at end of file diff --git a/server/Quests/Oakmyst/regrowth.lua b/server/Quests/Oakmyst/regrowth.lua new file mode 100644 index 000000000..801a46671 --- /dev/null +++ b/server/Quests/Oakmyst/regrowth.lua @@ -0,0 +1,93 @@ +--[[ + Script Name : Quests/Castleview/regrowth.lua + Script Purpose : Handles the quest, "Regrowth" + Script Author : Scatman + Script Date : 2009.10.02 + + Zone : Oakmyst Forest + Quest Giver: Adalin Emerael + Preceded by: None + Followed by: None +--]] + +function Init(Quest) + AddQuestStep(Quest, 1, "I need to cleanse the tree west of the gates to Castleview Hamlet.", 1, 100, "Adalin has asked for my help in cleansing a number of trees in the Oakmyst Forest.", 0) + AddQuestStep(Quest, 2, "I need to cleanse the tree east of the Western Falls, west of the first tree.", 1, 100, "Adalin has asked for my help in cleansing a number of trees in the Oakmyst Forest.", 0) + AddQuestStep(Quest, 3, "I need to cleanse the tree east of the entrance to the docks.", 1, 100, "Adalin has asked for my help in cleansing a number of trees in the Oakmyst Forest.", 0) + AddQuestStepCompleteAction(Quest, 1, "Step1_Complete_Tree1") + AddQuestStepCompleteAction(Quest, 2, "Step2_Complete_Tree2") + AddQuestStepCompleteAction(Quest, 3, "Step3_Complete_Tree3") +end + +function Accepted(Quest, QuestGiver, Player) + FaceTarget(QuestGiver, Player) + conversation = CreateConversation() + + -- cleansing salve + if not HasItem(Player, 4386, 1) then + SummonItem(Player, 4386, 1) + end + + AddConversationOption(conversation, "I will, thank you.") + StartConversation(conversation, QuestGiver, Player, "This salve should allow you to cleanse them easily enough. May tunare be with you.") +end + +function Declined(Quest, QuestGiver, Player) +end + +function Step1_Complete_Tree1(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 1, "I have cleansed the tree west of the gates to Castleview Hamlet.") + + if QuestIsComplete(Player, 294) then + TreesCleansed(Quest, QuestGiver, Player) + end +end + +function Step2_Complete_Tree2(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 2, "I have cleansed the tree east of the Western Falls.") + + if QuestIsComplete(Player, 294) then + TreesCleansed(Quest, QuestGiver, Player) + end +end + +function Step3_Complete_Tree3(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 3, "I have cleansed the tree east of the entrance to the docks.") + + if QuestIsComplete(Player, 294) then + TreesCleansed(Quest, QuestGiver, Player) + end +end + +function TreesCleansed(Quest, QuestGiver, Player) + UpdateQuestTaskGroupDescription(Quest, 1, "I have cleansed the plants that Adalin has asked me to cleanse.") + + AddQuestStepChat(Quest, 4, "I need to return to Adalin and tell him of the gnoll attack.", 1, "I need to return to Adalin and tell him of the gnoll attack while cleansing.", 0, 1950005) + AddQuestStepCompleteAction(Quest, 4, "Step4_Complete_SpokeWithAdalin") +end + +function Step4_Complete_SpokeWithAdalin(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 4, "I have spoken with Adalin.") + + AddQuestStepChat(Quest, 5, "I need to bring the news of the gnoll presence to Lieutenant Charlin.", 1, "I need to return to Adalin and tell him of the gnoll attack while cleansing.", 0, 1950015) + AddQuestStepCompleteAction(Quest, 5, "Quest_Complete") +end + +function Quest_Complete(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 5, "I have spoken with Lieutenant Charlin.") + UpdateQuestTaskGroupDescription(Quest, 2, "I have informed Lieutenant Charlin of the gnoll presence in Oakmyst Forest.") + UpdateQuestDescription(Quest, "In helping Adalin Emerael cleanse some of the trees in Oakmyst Forest I was attacked by a gnoll. With the gnoll's paw as proof Lieutenant Charlin has agreed that a possible gnoll threat needs to be looked in to.") + GiveQuestReward(Quest, Player) +end + +function Reload(Quest, QuestGiver, Player, Step) + if Step == 1 then + Step1_Complete_Tree1(Quest, QuestGiver, Player) + elseif Step == 2 then + Step2_Complete_Tree2(Quest, QuestGiver, Player) + elseif Step == 3 then + Step3_Complete_Tree3(Quest, QuestGiver, Player) + elseif Step == 4 then + Step4_Complete_SpokeWithAdalin(Quest, QuestGiver, Player) + end +end \ No newline at end of file diff --git a/server/Quests/Oakmyst/reinforcements.lua b/server/Quests/Oakmyst/reinforcements.lua new file mode 100644 index 000000000..268773f00 --- /dev/null +++ b/server/Quests/Oakmyst/reinforcements.lua @@ -0,0 +1,40 @@ +--[[ + Script Name : Quests/Oakmyst/reinforcements.lua + Script Purpose : Handles the quest, "Reinforcements" + Script Author : Scatman + Script Date : 2009.10.08 + + Zone : Oakmyst Forest + Quest Giver: Lieutenant Charlin + Preceded by: Clean Up (clean_up.lua) + Followed by: None +--]] + + +function Init(Quest) + AddQuestStepChat(Quest, 1, "I must report to Consul Bree in The Caves.", 1, "I must report to Consul Bree in The Caves to help in the defense of Qeynos.", 0, 1970010) + AddQuestStepCompleteAction(Quest, 1, "QuestComplete") +end + +function Accepted(Quest, QuestGiver, Player) + FaceTarget(QuestGiver, Player) + conversation = CreateConversation() + + PlayFlavor(QuestGiver, "voiceover/english/tutorial_revamp/lieutenant_charlin/qey_adv01_oakmyst/quests/charlin/charlin027a.mp3", "", "salute", 1196044113, 40498286, Player) + AddConversationOption(conversation, "Thank you.") + StartConversation(conversation, QuestGiver, Player, "I guess that's why they asked for you. Go, " .. GetName(Player) .. ", and be well. Thank you for all your help.") +end + +function Declined(Quest, QuestGiver, Player) +end + +function QuestComplete(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 1, "I have spoken with Consul Bree.") + UpdateQuestTaskGroupDescription(Quest, 1, "I have spoken with Consul Bree.") + + UpdateQuestDescription(Quest, "I have spoken with Consul Bree.") + GiveQuestReward(Quest, Player) +end + +function Reload(Quest, QuestGiver, Player, Step) +end \ No newline at end of file diff --git a/server/Quests/Oakmyst/runed_acorn.lua b/server/Quests/Oakmyst/runed_acorn.lua new file mode 100644 index 000000000..e8a033d9a --- /dev/null +++ b/server/Quests/Oakmyst/runed_acorn.lua @@ -0,0 +1,41 @@ +--[[ + Script Name : RunedAcorn.lua + Script Purpose : Handles the quest, "Runed Acorn" + Script Author : ememjr + Script Date : 5/9/2017 + Script Notes : + + Zone : Oakmyst Forest + Quest Giver : + Preceded by : None + Followed by : None +--]] + + +function Init(Quest) + AddQuestStepKill(Quest, 1, "I need to kill three corrupted dryads.", 3, 100, "Corrupted dryads often hide in dark, dank places such as water-filled caverns.", 611, 1950013, 1950070) + AddQuestStepCompleteAction(Quest, 1, "QuestComplete") +end + +function QuestComplete(Quest, QuestGiver, Player) + -- The following UpdateQuestStepDescription and UpdateTaskGroupDescription are not needed, parser adds them for completion in case stuff needs to be moved around + UpdateQuestStepDescription(Quest, 1, "I have killed three corrupted dryads.") + UpdateQuestTaskGroupDescription(Quest, 1, "I found the corrupted dryads in a secret cave by the waterfall in Oakmyst Forest.") + + UpdateQuestDescription(Quest, "I have killed three corrupted dryads and released their souls to be reborn in the renewal of spring. I am still not sure, however, as to how they came to be corrupted.") + GiveQuestReward(Quest, Player) +end + +function Reload(Quest, QuestGiver, Player, Step) + if Step == 1 then + QuestComplete(Quest, QuestGiver, Player) + end +end + +function Accepted(Quest, QuestGiver, Player) + -- Add dialog here for when the quest is accepted +end + +function Declined(Quest, QuestGiver, Player) + -- Add dialog here for when the quest is declined +end \ No newline at end of file diff --git a/server/Quests/Oakmyst/that_cheating_gnome.lua b/server/Quests/Oakmyst/that_cheating_gnome.lua new file mode 100644 index 000000000..6e65c8966 --- /dev/null +++ b/server/Quests/Oakmyst/that_cheating_gnome.lua @@ -0,0 +1,57 @@ +--[[ + Script Name : Quests/Oakmyst/that_cheating_gnome.lua + Script Purpose : Handles the quest, "That Cheating Gnome!" + Script Author : Scatman + Script Date : 2009.05.03 + + Zone : Oakmyst Forest + Quest Giver: Jorn Sorefoot + Preceded by: None + Followed by: +--]] + +function Init(Quest) + AddQuestStepKill(Quest, 1, "I need to recover Jorn's money from Fluwkowir Haggleton. Jorn last saw Fluwkowir heading west toward the docks.", 1, 100, ".", 399, 1950094) + AddQuestStepCompleteAction(Quest, 1, "Step1_Complete_GotJornsPack") +end + +function Accepted(Quest, QuestGiver, Player) + FaceTarget(QuestGiver, Player) + conversation = CreateConversation() + + PlayFlavor(QuestGiver, "voiceover/english/tutorial_revamp/jorn_sorefoot/qey_adv01_oakmyst/quests/jorn/jorn005a.mp3", "", "", 1536076306, 896415484, Player) + AddConversationOption(conversation, "You're welcome.") + StartConversation(conversation, QuestGiver, Player, "Thanks for your help. I'm just about worn out from all this looking.") +end + +function Declined(Quest, QuestGiver, Player) +end + +function Step1_Complete_GotJornsPack(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 1, "I have recovered Jorn's money.") + AddQuestStepChat(Quest, 2, "I need to return the money to Jorn.", 1, ".", 2165, 1950022) + AddQuestStepCompleteAction(Quest, 2, "Step2_Complete_SpokeWithJorn") +end + +function Step2_Complete_SpokeWithJorn(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 2, "I have recovered Jorn's money.") + AddQuestStepChat(Quest, 3, "I need to give Fluwkowir's book to Lieutenant Charlin.", 1, ".", 0, 1950015) + AddQuestStepCompleteAction(Quest, 3, "QuestComplete") +end + + +function QuestComplete(Quest, QuestGiver, Player) + -- Flukowir's Satchel + RemoveItem(Player, 6389) + + UpdateQuestDescription(Quest, "I found Fluwkowir. After confronting him he attacked me. On him he had a small satchel, in that satchel I found Jorn's money but also some strange notes written in Lucanic.") + GiveQuestReward(Quest, Player) +end + +function Reload(Quest, QuestGiver, Player, Step) + if Step == 1 then + Step1_Complete_GotJornsPack(Quest, QuestGiver, Player) + elseif Step == 2 then + Step2_Complete_SpokeWithJorn(Quest, QuestGiver, Player) + end +end diff --git a/server/Quests/Oakmyst/the_patchwork_tapestry.lua b/server/Quests/Oakmyst/the_patchwork_tapestry.lua new file mode 100644 index 000000000..15396cfe6 --- /dev/null +++ b/server/Quests/Oakmyst/the_patchwork_tapestry.lua @@ -0,0 +1,37 @@ +--[[ + Script Name : Quests/Oakmyst/the_patchwork_tapestry.lua + Script Purpose : Handles the quest, "The Patchwork Tapestry" + Script Author : Scatman + Script Date : 2009.10.08 + + Zone : Unknown + Quest Giver: None + Preceded by: None + Followed by: None +--]] + + +function Init(Quest) + -- Fabric Patch + AddQuestStepObtainItem(Quest, 1, "Hunt fairies in Norrath to gain fay fabric patches to study.", 7, 100, "I must obtain more patches of fay fabric to piece together the foundation of the fairy language. I must get the fabric patches from fairies of Norrath.", 417, 6079) + AddQuestStepCompleteAction(Quest, 1, "Quest_Complete") +end + +function Accepted(Quest, QuestGiver, Player) +end + +function Declined(Quest, QuestGiver, Player) +end + +function QuestComplete(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 1, "I have a studied a fay fabric patch.") + UpdateQuestTaskGroupDescription(Quest, 1, "I have learned Fayfolk, language of the fairies.") + + -- Learn language (fayfolk) + + UpdateQuestDescription(Quest, "I pieced together patches of fay fabric to discover the foundation of two languages, Norrathian and Fay. I have used the fabric patches to learn the language of the fairies, Fayfolk.") + GiveQuestReward(Quest, Player) +end + +function Reload(Quest, QuestGiver, Player, Step) +end \ No newline at end of file diff --git a/server/Quests/OutpostOverlord/WelcometoNorrath.lua b/server/Quests/OutpostOverlord/WelcometoNorrath.lua new file mode 100644 index 000000000..817b90bb4 --- /dev/null +++ b/server/Quests/OutpostOverlord/WelcometoNorrath.lua @@ -0,0 +1,42 @@ +--[[ + Script Name : Quests/OutpostOverlord/WelcometoNorrath.lua + Script Author : Cynnar + Script Date : 2018.09.22 01:09:08 + Script Purpose : Handles the quest, "Welcome to Norrath" + Script Notes : Reward Tayil's Dark Inspiration Item is missing in our database. + + Zone : OutpostOverlord + Quest Giver: Offered upon first arriving on the island (Proximity) + Preceded by: None + Followed by: The Art of Combat +--]] + +function Init(Quest) + -- Tayil's Dark Inspiration + + AddQuestStepChat(Quest, 1, "Speak to Tayil N'Velex, outside the entrance of Sythor's Spire in the center of the outpost.", 1, "I should speak with Tayil N'Velex. She is at the entrance to Sythor's Spire in the center of the outpost.", 11, 2780038) + AddQuestStepCompleteAction(Quest, 1, "QuestComplete") +end + +function QuestComplete(Quest, QuestGiver, Player) + -- The following UpdateQuestStepDescription and UpdateTaskGroupDescription are not needed, parser adds them for completion in case stuff needs to be moved around + UpdateQuestStepDescription(Quest, 1, "I spoke with Tayil N'Velex.") + UpdateQuestTaskGroupDescription(Quest, 1, "I spoke with Tayil N'Velex.") + + UpdateQuestDescription(Quest, "I have spoken to Tayil N'Velex.") + GiveQuestReward(Quest, Player) +end + +function Reload(Quest, QuestGiver, Player, Step) + if Step == 1 then + QuestComplete(Quest, QuestGiver, Player) + end +end + +function Accepted(Quest, QuestGiver, Player) + -- Add dialog here for when the quest is accepted +end + +function Declined(Quest, QuestGiver, Player) + -- Add dialog here for when the quest is declined +end \ No newline at end of file diff --git a/server/Quests/OutpostOverlord/disruption_for_distraction.lua b/server/Quests/OutpostOverlord/disruption_for_distraction.lua new file mode 100644 index 000000000..e8c471d47 --- /dev/null +++ b/server/Quests/OutpostOverlord/disruption_for_distraction.lua @@ -0,0 +1,130 @@ +--[[ + Script Name: Quests/OutpostOverlord/disruption_for_distraction.lua + Script Purpose: Handles the quest, "Disruption for Distraction" + Script Author: vo1d + Script Date: 10/4/2019 + + Zone: Outpost of the Overlord + Quest Giver: Tayil N'Velex + Preceded by: Preventative Maintenance (preventative_maintenance.lua) + Followed by: The Final Assault (the_final_assault.lua) +--]] + +local CoercerZlith = 2780072 +local TunarianHorseSentry = 2780070 +local TunarianMiner = 2780052 +local LapisLazuliShards = 8715 + +function Init(Quest) + AddQuestStepChat(Quest, 1, "Seek out Coercer Zlith at the camp in west Seaside Glade.", 1, + "I need to speak with Coercer Zlith at the camp in west Seaside Glade. " .. + "He will have details regarding the Tunarian mine.", 11, CoercerZlith) + AddQuestStepCompleteAction(Quest, 1, "Step1Complete") +end + +function Accepted(Quest, QuestGiver, Player) + if QuestGiver ~= nil then + if GetDistance(Player, QuestGiver) < 30 then + FaceTarget(QuestGiver, Player) + conversation = CreateConversation() + + AddConversationOption(conversation, "I will return.") + + StartConversation(conversation, QuestGiver, Player, + "Who better to teach you the fine arts of distraction than a coercer? " .. + "Return to the camp in Seaside Glade where Coercer Zlith will fill you in on the details of our plan. " .. + "Report back to me after you have succeeded against the Tunarians.") + end + end +end + +function Declined(Quest, QuestGiver, Player) + -- Add dialog here for when the quest is declined +end + +function Deleted(Quest, QuestGiver, Player) + -- Remove any quest specific items here when the quest is deleted +end + +function Step1Complete(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 1, "I spoke with Coercer Zlith.") + UpdateQuestTaskGroupDescription(Quest, 1, "I spoke with Coercer Zlith at the camp in west Seaside Glade.") + + AddQuestStepKill(Quest, 2, "Kill Tunarian miners at the mine in the eastern Wilderwood.", 3, 100, + "I need to head to the Tunarian mine and cause the disruption. The mine is in the eastern Wilderwood.", + 611, TunarianMiner) + + AddQuestStepCompleteAction(Quest, 2, "Step2Complete") +end + +function Step2Complete(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 2, "I killed enough Tunarian miners.") + AddQuestStepHarvest(Quest, 3, "Retrieve glimmering ore samples near the mine.", 2, 100, + "I need to head to the Tunarian mine and cause the disruption. The mine is in the eastern Wilderwood.", + 1118, LapisLazuliShards) + + AddQuestStepCompleteAction(Quest, 3, "Step3Complete") +end + +function Step3Complete(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 3, "I retrieved enough ore samples.") + UpdateQuestTaskGroupDescription(Quest, 2, + "I killed the miners and retrieved the ore samples that Coercer Zlith requested.") + + AddQuestStepChat(Quest, 4, "Return to Coercer Zlith.", 1, + "I've caused some havoc at the mine and should return to Coercer Zlith now.", 11, CoercerZlith) + AddQuestStepCompleteAction(Quest, 4, "Step4Complete") +end + +function Step4Complete(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 4, "I returned to Coercer Zlith.") + UpdateQuestTaskGroupDescription(Quest, 3, "I returned and spoke to Coercer Zlith.") + + AddQuestStepKill(Quest, 5, + "Kill Tunarian horse sentries in the Wilderwood.", 2, 100, + "To cause a bigger distraction and take my revenge for their meddling, " .. + "I should head back into the Wilderwood and slay some of the Tunarian horse sentries.", + 2595, TunarianHorseSentry) + AddQuestStepCompleteAction(Quest, 5, "Step5Complete") +end + +function Step5Complete(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 5, "I killed enough horse sentries.") + UpdateQuestTaskGroupDescription(Quest, 4, + "I took out the horse sentries in the Wilderwood. This should really stir up the hornet's nest.") + + AddQuestStepChat(Quest, 6, "Return to Coercer Zlith.", 1, + "I've killed the horse sentries and should return to Coercer Zlith.", 11, CoercerZlith) + AddQuestStepCompleteAction(Quest, 6, "QuestComplete") +end + +function QuestComplete(Quest, QuestGiver, Player) + -- The following UpdateQuestStepDescription and UpdateTaskGroupDescription are not needed, + -- parser adds them for completion in case stuff needs to be moved around + UpdateQuestStepDescription(Quest, 6, "I returned to Coercer Zlith.") + UpdateQuestTaskGroupDescription(Quest, 5, "I returned to Coercer Zlith.") + + UpdateQuestDescription(Quest, + "I talked with Coercer Zlith at the camp in Seaside Glade and was given details on how to cause the " .. + "distraction at the Tunarian Mine. I attacked the mine and retrieved some ore samples for Tayil, " .. + "and then took out some horse sentries for good measure. " .. + "Zlith said that the distraction worked and forces were being sent to check on my havoc. " .. + "We should now be ready for our final assault.") + GiveQuestReward(Quest, Player) +end + +function Reload(Quest, QuestGiver, Player, Step) + if Step == 1 then + Step1Complete(Quest, QuestGiver, Player) + elseif Step == 2 then + Step2Complete(Quest, QuestGiver, Player) + elseif Step == 3 then + Step3Complete(Quest, QuestGiver, Player) + elseif Step == 4 then + Step4Complete(Quest, QuestGiver, Player) + elseif Step == 5 then + Step5Complete(Quest, QuestGiver, Player) + elseif Step == 6 then + QuestComplete(Quest, QuestGiver, Player) + end +end diff --git a/server/Quests/OutpostOverlord/preventative_maintenance.lua b/server/Quests/OutpostOverlord/preventative_maintenance.lua new file mode 100644 index 000000000..90ec77ae8 --- /dev/null +++ b/server/Quests/OutpostOverlord/preventative_maintenance.lua @@ -0,0 +1,108 @@ +--[[ + Script Name : Quests/OutpostOverlord/preventative_maintenance.lua + Script Purpose : Handles the quest, "Preventative Maintenance" + Script Author : Scatman (Updted by Cynnar 2018.09.22 02:25:24) + Script Date : 2008.09.07 + + Zone : Outpost of the Overlord + Quest Giver: Tayil N'Velex + Preceded by: Seaside Stew (seaside_stew.lua) + Followed by: Disruption for Distraction (disruption_for_distraction.lua) + Issues: Issue with quest helper after killing wilderbears + Issues: after killing the final wilderbear it does not update the quest helper +--]] + +local AssassinVamir = 2780073 +local HawkBait = 8060 + +function Init(Quest) + -- A Note from Tayil + -- Freeportian Cloth Hood + -- Freeportian Leather Cap + -- Freeportian Plated Coif + -- Freeportian Studded Helm + + AddQuestStepChat(Quest, 1, "Talk to Assassin Vamir at the camp in western Seaside Glade.", 1, "I need to find Assassin Vamir in western Seaside Glade. He should have a mission for me.", 0, AssassinVamir) + AddQuestStepCompleteAction(Quest, 1, "step1_complete_talkedToVamir") + +end + +function Accepted(Quest, QuestGiver, Player) + if QuestGiver ~= nil then + if GetDistance(Player, QuestGiver) < 30 then + FaceTarget(QuestGiver, Player) + conversation = CreateConversation() + AddConversationOption(conversation, "Thank you.") + StartConversation(conversation, QuestGiver, Player, "Assassin Vamir will explain the details. Good luck.") + end + end +end + +function Declined(Quest, QuestGiver, Player) +end + +function step1_complete_talkedToVamir(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 1, "I reported to Assassin Vamir and was given my first task.") + UpdateQuestTaskGroupDescription(Quest, 1, "I reported to Assassin Vamir and was given my first task.") + + AddQuestStepKill(Quest, 2, "Kill wilderbears. They can be found north in the Wilderwood, or west in Cliffdiver Canyon.", 4, 100, "To prevent the Tunarians from recruiting more animals once the attack has begun, I need to take out the animals they use. Bears are up first on the list. I can find bears north up the slope in the Wilderwood, or west in Cliffdiver Canyon.", 611, 2780071, 2780069, 2780080) + AddQuestStepCompleteAction(Quest, 2, "step2_complete_killedBears") +end + +function step2_complete_killedBears(Quest, QuestGiver, Player) + --UpdateQuestStepDescription(Quest, 2, "I killed enough bears and I should return to Assassin Vamir at the camp in Seaside Glade.") + UpdateQuestTaskGroupDescription(Quest, 2, "I killed enough bears to hopefully thwart any training attempts.") + + AddQuestStepChat(Quest, 3, "Return to Assassin Vamir.", 1, "I killed enough bears and I should return to Assassin Vamir at the camp in Seaside Glade.", 0, AssassinVamir) + AddQuestStepCompleteAction(Quest, 3, "step3_complete_talkedToVamir") +end + +function step3_complete_talkedToVamir(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 3, "I returned to Assassin Vamir.") + UpdateQuestTaskGroupDescription(Quest, 3, "I returned to Assassin Vamir.") + --while HasItem(Player, HawkBait) < 5 then + SummonItem(Player, HawkBait) + SummonItem(Player, HawkBait) + SummonItem(Player, HawkBait) + SummonItem(Player, HawkBait) + SummonItem(Player, HawkBait) + + + -- temporary + --SpawnMob(GetZone(Player), 2780144, false, GetX(Player), GetY(Player), GetZ(Player)) + --SpawnMob(GetZone(Player), 2780144, false, GetX(Player) + 5, GetY(Player), GetZ(Player) + 5) + --SpawnMob(GetZone(Player), 2780144, false, GetX(Player) + 10, GetY(Player), GetZ(Player) + 10) + AddQuestStepKill(Quest, 4, "Lure down hawks to kill in Cliffdiver Canyon to the west. I must examine and then release a mole rat in my inventory as bait when I'm in position under a hawk.", 3, 100, "I now need to kill hawks. Vamir gave me some mole rats to use as bait to lure down the hawks that perch high above the cliffs. When I am in position, I need to examine the mole rats in my inventory and then release one. Hopefully it works to lure down the hawks so I can take them out.", 611, 2780077, 2780109) + AddQuestStepCompleteAction(Quest, 4, "step4_complete_killedHawks") +end + +function step4_complete_killedHawks(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 4, "I used the mole rats to lure down some hawks and take them out.") + UpdateQuestTaskGroupDescription(Quest, 4, "I used the mole rats to lure down some hawks and take them out.") + + AddQuestStepChat(Quest, 5, "Return to Assassin Vamir.", 1, "I've killed enough hawks and should now return to Assassin Vamir.", 0, AssassinVamir) + AddQuestStepCompleteAction(Quest, 5, "step5_complete_talkedToVamir") +end + +function step5_complete_talkedToVamir(Quest, QuestGiver, Player) + -- GIVE ANOTHER QUEST REWARD ITEM, , WHICH GIVES THE NEXT QUEST IN THIS SERIES + UpdateQuestDescription(Quest, "I reported to Assassin Vamir in Seaside Glade. It turns out the Tunarians on the island are masters of the animals here. To prevent them from gaining extra recruits when the attack happens, I helped to thin out the bears and hawks that they might use. I returned to Tayil after my missions with Vamir were complete and was rewarded.") + GiveQuestReward(Quest, Player) +end + +function Reload(Quest, QuestGiver, Player, Step) + if Step == 1 then + step1_complete_talkedToVamir(Quest, QuestGiver, Player) + elseif Step == 2 then + step2_complete_killedBears(Quest, QuestGiver, Player) + elseif Step == 3 then + step3_complete_talkedToVamir(Quest, QuestGiver, Player) + elseif Step == 4 then + step4_complete_killedHawks(Quest, QuestGiver, Player) + elseif Step == 5 then + step5_complete_talkedToVamir(Quest, QuestGiver, Player) + end +end + +function Deleted(Quest, QuestGiver, Player) +end diff --git a/server/Quests/OutpostOverlord/the_art_of_combat_evil.lua b/server/Quests/OutpostOverlord/the_art_of_combat_evil.lua new file mode 100644 index 000000000..d1b1d4150 --- /dev/null +++ b/server/Quests/OutpostOverlord/the_art_of_combat_evil.lua @@ -0,0 +1,73 @@ +--[[ + Script Name : Quests/OutpostOverlord/the_art_of_combat_evil.lua + Script Purpose : Handles the quest, "The Art of Combat" + Script Author : Scatman (Updated by Cynnar 2018.09.16 09:09:47) + Script Date : 2008.09.04 + + Zone : Outpost of the Overlord + Quest Giver: Tayil N'Velex + Preceded by: None + Followed by: Seaside Stew (seaside_stew.lua) +--]] + +function Init(Quest) + -- Freeportian Cloth Mitts + -- Freeportian Leather Gloves + -- Freeportian Studded Gloves + -- Freeportian Plated Gauntlets + + AddQuestStepChat(Quest, 1, "I need to speak with Trainer Darg Frostwind at Combat Clearing, northwest of Tayil N'Velex.", 1, "I need to speak with Darg Frostwind. He will train me in the ways of combat.", 0, 2780045) + AddQuestStepCompleteAction(Quest, 1, "step1_complete_talkedToDarg") +end + +function Accepted(Quest, QuestGiver, Player) + FaceTarget(QuestGiver, Player) + conversation = CreateConversation() + + PlayFlavor(QuestGiver, "voiceover/english/tutorial_revamp/tayil_n_velex/tutorial_island02_evil_revamp/quests/citizenship/tayilnvelex/tayilnvelex035.mp3", "", "", 613247670, 1228791827, Player) + AddConversationOption(conversation, "Thanks.") + StartConversation(conversation, QuestGiver, Player, "In case you forgot, I've written down his name and location in your quest journal.") +end + +function Declined(Quest, QuestGiver, Player) +end + +function step1_complete_talkedToDarg(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 1, "I have spoken with Darg Frostwind.") + + AddQuestStepKill(Quest, 2, "I need to defeat a sparring partner in combat. There are several sparring partners just north of Trainer Darg Frostwind.", 1, 100, "I need to speak with Darg Frostwind. He will train me in the ways of combat.", 611, 2780002,2780000,2780001) + AddQuestStepCompleteAction(Quest, 2, "step2_complete_killedSparringPartner") +end + +function step2_complete_killedSparringPartner(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 2, "I have defeated a sparring partner in combat.") + + AddQuestStepChat(Quest, 3, "I need to speak with Trainer Darg Frostwind again.", 1, "I need to speak with Darg Frostwind. He will train me in the ways of combat.", 0, 2780045) + AddQuestStepCompleteAction(Quest, 3, "step3_complete_talkedToDarg") +end + +function step3_complete_talkedToDarg(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 3, "I have spoken to Sergeant Darg Frostwind.") + UpdateQuestTaskGroupDescription(Quest, 1, "I have defeated a sparring partner in combat.") + + AddQuestStepChat(Quest, 4, "I need to return to Tayil N'Velex.", 1, "Now that I have completed my combat training I should speak with Tayil N'Velex.", 0, 2780038) + AddQuestStepCompleteAction(Quest, 4, "step4_complete_talkToTayil") +end + +function step4_complete_talkToTayil(Quest, QuestGiver, Player) + UpdateQuestDescription(Quest, "I have learned some of the basics of combat from Trainer Darg Frostwind at the Outpost of the Overlord. Hopefully this knowledge helps me serve Freeport and uncover the trouble here.") + GiveQuestReward(Quest, Player) +end + +function Reload(Quest, QuestGiver, Player, Step) + if Step == 1 then + step1_complete_talkedToDarg(Quest, QuestGiver, Player) + elseif Step == 2 then + step2_complete_killedSparringPartner(Quest, QuestGiver, Player) + elseif Step == 3 then + step3_complete_talkedToDarg(Quest, QuestGiver, Player) + end +end + +function Deleted(Quest, QuestGiver, Player) +end diff --git a/server/Quests/OutpostOverlord/the_final_assault.lua b/server/Quests/OutpostOverlord/the_final_assault.lua new file mode 100644 index 000000000..e0c8811db --- /dev/null +++ b/server/Quests/OutpostOverlord/the_final_assault.lua @@ -0,0 +1,111 @@ +--[[ + Script Name : Quests/OutpostOverlord/the_final_assault.lua + Script Purpose : Handles the quest, "The Final Assault" + Script Author : Scatman (Updated by Cynnar 2018.09.24 12:09:08) + Script Date : 2008.12.29 + + Zone : Outpost of the Overlord + Quest Giver : Tayil N'Velex + Preceded by : Disruption for Distraction (disruption_for_distraction.lua) + Followed by : None +--]] + +local CaptainTyreth = 2780099 +local KeyOfTheElders = 8588 +local TayilNVelex = 3480005 + +function Init(Quest) + -- Freeportian Bard's Dagger + -- Freeportian Brawler's Wraps + -- Freeportian Cleric's Hammer + -- Freeportian Crusader's Greatsword + -- Freeportian Druid's Scimitar + -- Freeportian Enchanter's Wand + -- Freeportian Predator's Dagger + -- Freeportian Rogue's Rapier + -- Freeportian Shaman's Spear + -- Freeportian Sorcerer's Staff + -- Freeportian Summoner's Dagger + -- Freeportian Warrior's Axe + + + AddQuestStepChat(Quest, 1, "Find Captain Tyreth in the Valley of Discipline, north of Cliffdiver Canyon. The camp is setup in an alcove on the eastern side of the valley near an archway.", 1, "I need to speak with Captain Tyreth in the Valley of Discipline. The forward camp is north past Cliffdiver Canyon and then east through the valley.", 0, CaptainTyreth) + AddQuestStepCompleteAction(Quest, 1, "step1_complete_talkedToCaptain") + +end + +function Accepted(Quest, QuestGiver, Player) + if QuestGiver ~= nil then + if GetDistance(Player, QuestGiver) < 30 then + FaceTarget(QuestGiver, Player) + conversation = CreateConversation() + + AddConversationOption(conversation, "He will not be disappointed.") + StartConversation(conversation, QuestGiver, Player, "The Overlord is counting on you.") + end + end +end + +function Declined(Quest, QuestGiver, Player) +end + +function step1_complete_talkedToCaptain(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 1, "I found and spoke with Captain Tyreth.") + UpdateQuestTaskGroupDescription(Quest, 1, "I found and spoke with Captain Tyreth.") + + AddQuestStepKill(Quest, 2, "Set fire to Tunarian tents with the torch Tyreth gave me. There are tents in the Valley of Discipline and farther northeast through the archway.", 2, 100, "The attack has begun. I am to use a torch Captain Tyreth gave me to burn down a couple of the Tunarian tents in the Valley of Discipline and also to the end near Fisher Falls. If I lose the torch, I should return to Tyreth for another.", 611, 2780220, 2780216) + AddQuestStepCompleteAction(Quest, 2, "step2_complete_burntTents") +end + +function step2_complete_burntTents(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 2, "I burned down the Tunarian tents and should return to Captain Tyreth.") + UpdateQuestTaskGroupDescription(Quest, 2, "I burned down the Tunarian tents and should return to Captain Tyreth.") + + AddQuestStepChat(Quest, 3, "Return to Captain Tyreth and tell him you burned the tents.", 1, "The tents are burning. I should return to Captain Tyreth.", 0, CaptainTyreth) + AddQuestStepCompleteAction(Quest, 3, "step3_complete_talkedToCaptain") +end + +function step3_complete_talkedToCaptain(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 3, "I returned and spoke to Captain Tyreth.") + UpdateQuestTaskGroupDescription(Quest, 3, "I returned and spoke to Captain Tyreth.") + + AddQuestStepKill(Quest, 4, "Kill Overseer Adrium in his tree house near Fisher Falls to the east of the Valley of Discipline.", 1, 100, "The leader of the Tunarians on the island resides in a tree house to the east of the Valley of Discipline. I am to find Overseer Adrium and kill the Qeynosian before he has a chance to escape.", 611, 2780166) + AddQuestStepCompleteAction(Quest, 4, "step4_complete_killedOverseer") +end + +function step4_complete_killedOverseer(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 4, "I found Overseer Adrium in the tree house and killed him.") + UpdateQuestTaskGroupDescription(Quest, 4, "I found Overseer Adrium in the tree house and killed him.") + + --key of the elders + SummonItem(Spawn, KeyOfTheElders) + AddQuestStepChat(Quest, 5, "I should return to Captain Tyreth and tell him that I have slain the Tunarian leader.", 1, "I need to report back to Captain Tyreth and tell him that I have slain the Tunarian leader.", 0, CaptainTyreth) + AddQuestStepCompleteAction(Quest, 5, "step5_complete_talkedToCaptain") +end + +function step5_complete_talkedToCaptain(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 5, "I returned to Captain Tyreth.") + UpdateQuestTaskGroupDescription(Quest, 5, "I returned to Captain Tyreth.") + + AddQuestStepChat(Quest, 6, "Head into the cave north of Adrium's tree house and take out the Tunarian Circle of Elders.", 1, "A larger plot has emerged. Adrium was not the leader of the Tunarians. I am to use the key I found to enter a cave to the north of Adrium's tree house and confront the true leaders, the Circle of Elders. The precious gems from the Tunarian mine have also been stockpiled there, which is of interest to Tayil.", 0, TayilNVelex) + AddQuestStepCompleteAction(Quest, 6, "QuestComplete") +end + +function QuestComplete(Quest, QuestGiver, Player) + UpdateQuestDescription(Quest, "I burned down the Tunarian tents and killed what I thought to be the Tunarian leader, Overseer Adrium. It turned out that Tayil had known all along that there was a Circle of Elders and a horde of treasure. I was sent inside the Cave of Elders and destroyed them, with a little help from Tyil. I was given my choice from the treasure and have finished my duties helping Tayil N'Velex to take the island.") + GiveQuestReward(Quest, Player) +end + +function Reload(Quest, QuestGiver, Player, Step) + if Step == 1 then + step1_complete_talkedToCaptain(Quest, QuestGiver, Player) + elseif Step == 2 then + step2_complete_burntTents(Quest, QuestGiver, Player) + elseif Step == 3 then + step3_complete_talkedToCaptain(Quest, QuestGiver, Player) + elseif Step == 4 then + step4_complete_killedOverseer(Quest, QuestGiver, Player) + elseif Step == 5 then + step5_complete_talkedToCaptain(Quest, QuestGiver, Player) + end +end diff --git a/server/Quests/PeatBog/a_final_foe.lua b/server/Quests/PeatBog/a_final_foe.lua new file mode 100644 index 000000000..e5391d324 --- /dev/null +++ b/server/Quests/PeatBog/a_final_foe.lua @@ -0,0 +1,50 @@ +--[[ + Script Name : Quests/PeatBog/a_final_foe.lua + Script Purpose : Handles the quest, "A Final Foe" + Script Author : Scatman + Script Date : 2009.05.10 + + Zone : The Peat Bog + Quest Giver: Lieutenant Dawson + Preceded by: On the Move (on_the_move.lua) + Followed by: Reinforcements (reinforcements.lua) +--]] + + +function Init(Quest) + + + AddQuestStepKill(Quest, 1, "I need to kill Dentfang.", 1, 100, "I need to kill Dentfang for Lieutenant Dawson.", 0, 1980127) + AddQuestStepCompleteAction(Quest, 1, "Step1_Complete_KilledDentFang") + +end + +function Accepted(Quest, QuestGiver, Player) + FaceTarget(QuestGiver, Player) + conversation = CreateConversation() + + PlayFlavor(QuestGiver, "voiceover/english/tutorial_revamp/lieutenant_dawson/qey_adv04_bog/quests/dawson/dawson019a.mp3", "", "", 2166332707, 347747136, Player) + AddConversationOption(conversation, "All right.") + StartConversation(conversation, QuestGiver, Player, "He may have bodyguards, but I'm sure you can handle them.") +end + +function Declined(Quest, QuestGiver, Player) +end + +function Step1_Complete_KilledDentFang(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 1, "I have killed Dentfang.") + + AddQuestStepChat(Quest, 2, "I need to return to Lieutenant Dawson.", 1, "I need to kill Dentfang for Lieutenant Dawson.", 0, 1980022) + AddQuestStepCompleteAction(Quest, 2, "QuestComplete") +end + +function QuestComplete(Quest, QuestGiver, Player) + UpdateQuestDescription(Quest, "I have slain Dentfang. Lieutenant Dawson was very pleased with my work.") + GiveQuestReward(Quest, Player) +end + +function Reload(Quest, QuestGiver, Player, Step) + if Step == 1 then + Step1_Complete_KilledDentFang(Quest, QuestGiver, Player) + end +end diff --git a/server/Quests/PeatBog/ambushed.lua b/server/Quests/PeatBog/ambushed.lua new file mode 100644 index 000000000..6768fc9b3 --- /dev/null +++ b/server/Quests/PeatBog/ambushed.lua @@ -0,0 +1,93 @@ +--[[ + Script Name : Quests/PeatBog/ambushed.lua + Script Purpose : Handles the quest, "Ambushed" + Script Author : Scatman + Script Date : 2009.05.10 + + Zone : The Peat Bog + Quest Giver: Lieutenant Dawson + Preceded by: Mysterious Machine (mysterious_machine.lua) + Followed by: On the Move (on_the_move.lua) +--]] + + +function Init(Quest) + + + AddQuestStep(Quest, 1, "I need to investigate the ambush site west of Two Logs Pond, which is south of the sewer grate.", 1, 100, "Lieutenant Dawson has asked me to investigate three ambush sites.", 0) + AddQuestStep(Quest, 2, "I need to investigate the ambush site in the north eastern corner of the area east of Two Logs Pond.", 1, 100, "Lieutenant Dawson has asked me to investigate three ambush sites.", 0) + AddQuestStep(Quest, 3, "I need to investigate the ambush site in the south end of the area east of Two Logs Pond.", 1, 100, "Lieutenant Dawson has asked me to investigate three ambush sites.", 0) + AddQuestStepCompleteAction(Quest, 1, "Step1_Complete_Site1") + AddQuestStepCompleteAction(Quest, 2, "Step2_Complete_Site2") + AddQuestStepCompleteAction(Quest, 3, "Step3_Complete_Site3") + +end + +function Accepted(Quest, QuestGiver, Player) + FaceTarget(QuestGiver, Player) + conversation = CreateConversation() + + PlayFlavor(QuestGiver, "voiceover/english/tutorial_revamp/lieutenant_dawson/qey_adv04_bog/quests/dawson/dawson011a.mp3", "", "", 3239354610, 1196418998, Player) + AddConversationOption(conversation, "You're welcome, and thank you.") + StartConversation(conversation, QuestGiver, Player, "Thank you for your help, be safe.") +end + +function Declined(Quest, QuestGiver, Player) +end + +function Step1_Complete_Site1(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 1, "I have investigated the ambush site near Two Logs Pond.") + + if QuestIsComplete(Player, 217) then + Multiple_Steps_Complete(Quest, QuestGiver, Player) + end +end + +function Step2_Complete_Site2(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 2, "I have investigated the ambush site in the area east of Two Logs Pond.") + + if QuestIsComplete(Player, 217) then + Multiple_Steps_Complete(Quest, QuestGiver, Player) + end +end + +function Step3_Complete_Site3(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 3, "I have investigated the ambush site in the southern end of the area east of Two Logs Pond.") + + if QuestIsComplete(Player, 217) then + Multiple_Steps_Complete(Quest, QuestGiver, Player) + end +end + +function Multiple_Steps_Complete(Quest, QuestGiver, Player) + UpdateQuestTaskGroupDescription(Quest, 1, "I have investigated all three ambush sites.") + + -- a gnoll paw + if not HasItem(Player, 1711) then + SummonItem(Player, 1711) + SendMessage(Player, "You receieve [a gnoll paw].", "yellow") + end + + AddQuestStepChat(Quest, 4, "I need to return to Lieutenant Dawson.", 1, "I need to tell Lieutenant Dawson of what I found at one of the ambush sites.", 0, 1980022) + AddQuestStepCompleteAction(Quest, 4, "QuestComplete") +end + +function QuestComplete(Quest, QuestGiver, Player) + -- a gnoll paw + while HasItem(Player, 1711) do + RemoveItem(Player, 1711) + end + + UpdateQuestDescription(Quest, "I found evidence of gnolls at one of the ambush sites.") + GiveQuestReward(Quest, Player) +end + +function Reload(Quest, QuestGiver, Player, Step) + if Step == 1 then + Step1_Complete_Site1(Quest, QuestGiver, Player) + elseif Step == 2 then + Step2_Complete_Site2(Quest, QuestGiver, Player) + elseif Step == 3 then + Step3_Complete_Site3(Quest, QuestGiver, Player) + end +end diff --git a/server/Quests/PeatBog/muck_slime.lua b/server/Quests/PeatBog/muck_slime.lua new file mode 100644 index 000000000..5a2c48752 --- /dev/null +++ b/server/Quests/PeatBog/muck_slime.lua @@ -0,0 +1,49 @@ +--[[ + Script Name : Quests/PeatBog/muck_slime.lua + Script Purpose : Handles the quest, "Muck Slim" + Script Author : Scatman + Script Date : 2009.05.10 + + Zone : The Peat Bog + Quest Giver: Ferius Mentus + Preceded by: None + Followed by: None +--]] + + +function Init(Quest) + + + AddQuestStepKill(Quest, 1, "I need to collect some muck toad sludge.", 10, 100, "Ferius would like me to collect some muck toad sludge.", 343, 1980007) + AddQuestStepCompleteAction(Quest, 1, "Step1_Complete_KilledFrogs") + +end + +function Accepted(Quest, QuestGiver, Player) + FaceTarget(QuestGiver, Player) + conversation = CreateConversation() + + AddConversationOption(conversation, "All right.") + StartConversation(conversation, QuestGiver, Player, "I should hope so; it isn't hard work. Come back quick!") +end + +function Declined(Quest, QuestGiver, Player) +end + +function Step1_Complete_KilledFrogs(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 1, "I have collected some muck toad sludge.") + + AddQuestStepChat(Quest, 2, "I need to return to Ferius.", 1, "Ferius would like me to collect some muck toad sludge.", 355, 1980023) + AddQuestStepCompleteAction(Quest, 2, "QuestComplete") +end + +function QuestComplete(Quest, QuestGiver, Player) + UpdateQuestDescription(Quest, "I have given Ferius his frogs. He was very pleased.") + GiveQuestReward(Quest, Player) +end + +function Reload(Quest, QuestGiver, Player, Step) + if Step == 1 then + Step1_Complete_KilledFrogs(Quest, QuestGiver, Player) + end +end diff --git a/server/Quests/PeatBog/mysterious_machine.lua b/server/Quests/PeatBog/mysterious_machine.lua new file mode 100644 index 000000000..eeed31bb1 --- /dev/null +++ b/server/Quests/PeatBog/mysterious_machine.lua @@ -0,0 +1,61 @@ +--[[ + Script Name : Quests/PeatBog/mysterious_machine.lua + Script Purpose : Handles the quest, \\\"Mysterious Machine\\\" + Script Author : Scatman + Script Date : 2009.05.10 + + Zone : The Peat Bog + Quest Giver: Lieutenant Dawson + Preceded by: Reclaiming the Bog (reclaiming_the_bog.lua) + Followed by: Ambushed (ambushed.lua) +--]] + + +function Init(Quest) + + + AddQuestStep(Quest, 1, "I need to find the machine in the water in the Peat Bog and attach the arcanic beacon.", 1, 100, "Lieutenant Dawson has asked that I find a machine that is supposedly in the water in the Peat Bog.", 0) + AddQuestStepCompleteAction(Quest, 1, "Step1_Complete_PlacedBeacon") + +end + +function Accepted(Quest, QuestGiver, Player) + FaceTarget(QuestGiver, Player) + conversation = CreateConversation() + + -- arcanic beacon + if not HasItem(Player, 3476) then + SummonItem(Player, 3476) + SendMessage(Player, "You receive 1 arcanic beacon.", "yellow") + SendPopUpMessage(Player, "You receive 1 arcanic beacon.", 255, 255, 255) + end + + PlayFlavor(QuestGiver, "voiceover/english/tutorial_revamp/lieutenant_dawson/qey_adv04_bog/quests/dawson/dawson007a.mp3", "", "", 3084758614, 2492710708, Player) + AddConversationOption(conversation, "You're welcome.") + StartConversation(conversation, QuestGiver, Player, "That should help the research teams find it when they do get the time. Thank you.") +end + +function Declined(Quest, QuestGiver, Player) +end + +function Step1_Complete_PlacedBeacon(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 1, "I have attached the arcanic beacon.") + + AddQuestStepChat(Quest, 2, "I need to return to Lieutenant Dawson near the gates to Nettleville hovel.", 1, "Lieutenant Dawson has asked that I find a machine that is supposedly in the water in the Peat Bog.", 0, 1980022) + AddQuestStepCompleteAction(Quest, 2, "QuestComplete") +end + +function QuestComplete(Quest, QuestGiver, Player) + -- arcanic beacon + while HasItem(Player, 3476) do + RemoveItem(Player, 3476) + end + UpdateQuestDescription(Quest, "I have found the machine that Lieutenant Dawson heard about. While I was hooking the beacon up I was attacked by a gnoll. After killing the gnoll I was able to attach the beacon.") + GiveQuestReward(Quest, Player) +end + +function Reload(Quest, QuestGiver, Player, Step) + if Step == 1 then + Step1_Complete_PlacedBeacon(Quest, QuestGiver, Player) + end +end diff --git a/server/Quests/PeatBog/on_the_move.lua b/server/Quests/PeatBog/on_the_move.lua new file mode 100644 index 000000000..1664b6717 --- /dev/null +++ b/server/Quests/PeatBog/on_the_move.lua @@ -0,0 +1,82 @@ +--[[ + Script Name : Quests/PeatBog/on_the_move.lua + Script Purpose : Handles the quest, "On the Move" + Script Author : Scatman + Script Date : 2009.05.10 + + Zone : The Peat Bog + Quest Giver: Lieutenant Dawson + Preceded by: Ambushed (ambushed.lua) + Followed by: A Final Foe (a_final_foe.lua) +--]] + + +function Init(Quest) + + + AddQuestStep(Quest, 1, "I need to destroy the first machine.", 1, 100, "I need to kill the gnolls that are attempting to bring the three machines out of the Peat Bog.", 0) + AddQuestStep(Quest, 2, "I need to destroy the second machine.", 1, 100, "I need to kill the gnolls that are attempting to bring the three machines out of the Peat Bog.", 0) + AddQuestStep(Quest, 3, "I need to destroy the third machine.", 1, 100, "I need to kill the gnolls that are attempting to bring the three machines out of the Peat Bog.", 0) + AddQuestStepCompleteAction(Quest, 1, "Step1_Complete_Machine1") + AddQuestStepCompleteAction(Quest, 2, "Step2_Complete_Machine2") + AddQuestStepCompleteAction(Quest, 3, "Step3_Complete_Machine3") + +end + +function Accepted(Quest, QuestGiver, Player) + FaceTarget(QuestGiver, Player) + conversation = CreateConversation() + + PlayFlavor(QuestGiver, "voiceover/english/tutorial_revamp/lieutenant_dawson/qey_adv04_bog/quests/dawson/dawson011a.mp3", "", "", 3239354610, 1196418998, Player) + AddConversationOption(conversation, "You're welcome, and thank you.") + StartConversation(conversation, QuestGiver, Player, "Thank you for your help, be safe.") +end + +function Declined(Quest, QuestGiver, Player) +end + +function Step1_Complete_Machine1(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 1, "The first machine has been destroyed.") + + if QuestIsComplete(Player, 218) then + Multiple_Steps_Complete(Quest, QuestGiver, Player) + end +end + +function Step2_Complete_Machine2(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 2, "The second machine has been destroyed.") + + if QuestIsComplete(Player, 218) then + Multiple_Steps_Complete(Quest, QuestGiver, Player) + end +end + +function Step3_Complete_Machine3(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 3, "The third machine has been destroyed.") + + if QuestIsComplete(Player, 218) then + Multiple_Steps_Complete(Quest, QuestGiver, Player) + end +end + +function Multiple_Steps_Complete(Quest, QuestGiver, Player) + UpdateQuestTaskGroupDescription(Quest, 1, "I have killed the gnolls moving the machines.") + + AddQuestStepChat(Quest, 4, "I need to return to Lieutenant Dawson.", 1, "Now that the gnolls guarding the machines have been killed I should return to Lieutenant Dawson.", 0, 1980022) + AddQuestStepCompleteAction(Quest, 4, "QuestComplete") +end + +function QuestComplete(Quest, QuestGiver, Player) + UpdateQuestDescription(Quest, "I have killed the gnolls were trying to get the machines out of the Peat Bog.") + GiveQuestReward(Quest, Player) +end + +function Reload(Quest, QuestGiver, Player, Step) + if Step == 1 then + Step1_Complete_Machine1(Quest, QuestGiver, Player) + elseif Step == 2 then + Step2_Complete_Machine2(Quest, QuestGiver, Player) + elseif Step == 3 then + Step3_Complete_Machine3(Quest, QuestGiver, Player) + end +end diff --git a/server/Quests/PeatBog/reclaiming_the_bog.lua b/server/Quests/PeatBog/reclaiming_the_bog.lua new file mode 100644 index 000000000..a549866c7 --- /dev/null +++ b/server/Quests/PeatBog/reclaiming_the_bog.lua @@ -0,0 +1,70 @@ +--[[ + Script Name : Quests/PeatBog/reclaiming_the_bog.lua + Script Purpose : Handles the quest, "Reclaiming the Bog" + Script Author : Scatman + Script Date : 2009.05.10 + + Zone : The Peat Bog + Quest Giver: Lieutenant Dawson + Preceded by: None + Followed by: Mysterious Machine (mysterious_machine.lua) +--]] + + +function Init(Quest) + + + AddQuestStepKill(Quest, 1, "I need to kill six fungus men.", 6, 100, "Lieutenant Dawson has asked that I kill some ravenous bog slugs and fungus men for her.", 611, 1980078, 1980011, 1980079, 1980033, 1980034) + AddQuestStepKill(Quest, 2, "I need to kill four ravenous bog slugs.", 4, 100, "Lieutenant Dawson has asked that I kill some ravenous bog slugs and fungus men for her.", 611, 1980089, 1980086) + AddQuestStepCompleteAction(Quest, 1, "Step1_Complete_KilledFungusMen") + AddQuestStepCompleteAction(Quest, 2, "Step2_Complete_KilledSlugs") + +end + +function Accepted(Quest, QuestGiver, Player) + FaceTarget(QuestGiver, Player) + conversation = CreateConversation() + + PlayFlavor(QuestGiver, "voiceover/english/tutorial_revamp/lieutenant_dawson/qey_adv04_bog/quests/dawson/dawson004a.mp3", "", "", 2845036711, 1744152200, Player) + AddConversationOption(conversation, "Ok.") + StartConversation(conversation, QuestGiver, Player, "Once you're done with that return to me.") +end + +function Declined(Quest, QuestGiver, Player) +end + +function Step1_Complete_KilledFungusMen(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 1, "I have slain six fungus men.") + + if QuestIsComplete(Player, 215) then + Multiple_Steps_Complete(Quest, QuestGiver, Player) + end +end + +function Step2_Complete_KilledSlugs(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 2, "I have killed four ravenous bog slugs.") + + if QuestIsComplete(Player, 215) then + Multiple_Steps_Complete(Quest, QuestGiver, Player) + end +end + +function Multiple_Steps_Complete(Quest, QuestGiver, Player) + UpdateQuestTaskGroupDescription(Quest, 1, "I have slain the ravenous bog slugs and the fungus men.") + + AddQuestStepChat(Quest, 3, "I need to return to Lieutenant Dawson near the gates to Nettleville hovel.", 1, "I need to return to Lieutenant Dawson now that I have completed her task.", 0, 1980022) + AddQuestStepCompleteAction(Quest, 3, "QuestComplete") +end + +function QuestComplete(Quest, QuestGiver, Player) + UpdateQuestDescription(Quest, "I have completed the small task for Lieutenant Dawson.") + GiveQuestReward(Quest, Player) +end + +function Reload(Quest, QuestGiver, Player, Step) + if Step == 1 then + Step1_Complete_KilledFungusMen(Quest, QuestGiver, Player) + elseif Step == 2 then + Step2_Complete_KilledSlugs(Quest, QuestGiver, Player) + end +end diff --git a/server/Quests/PeatBog/reinforcements.lua b/server/Quests/PeatBog/reinforcements.lua new file mode 100644 index 000000000..9e1a90ee6 --- /dev/null +++ b/server/Quests/PeatBog/reinforcements.lua @@ -0,0 +1,39 @@ +--[[ + Script Name : Quests/PeatBog/reinforcements.lua + Script Purpose : Handles the quest, "Reinforcements" + Script Author : Scatman + Script Date : 2009.05.11 + + Zone : The Peat Bog + Quest Giver: Lieutenant Dawson + Preceded by: A Final Foe (a_final_foe.lua) + Followed by: None +--]] + + +function Init(Quest) + + + AddQuestStepChat(Quest, 1, "I must report to Consul Bree in The Caves.", 1, "I must report to Consul Bree in The Caves to help in the defense of Qeynos.", 0, 1970010) + AddQuestStepCompleteAction(Quest, 1, "QuestComplete") + +end + +function Accepted(Quest, QuestGiver, Player) + FaceTarget(QuestGiver, Player) + conversation = CreateConversation() + + AddConversationOption(conversation, "I can do this.") + StartConversation(conversation, QuestGiver, Player, "I know you can. Qeynos is counting on you, " .. GetName(Player) .. ". Make us proud!") +end + +function Declined(Quest, QuestGiver, Player) +end + +function QuestComplete(Quest, QuestGiver, Player) + UpdateQuestDescription(Quest, "I have spoken with Consul Bree.") + GiveQuestReward(Quest, Player) +end + +function Reload(Quest, QuestGiver, Player, Step) +end diff --git a/server/Quests/QueensColny/welcome_to_norrath.lua b/server/Quests/QueensColny/welcome_to_norrath.lua new file mode 100644 index 000000000..e74059ff7 --- /dev/null +++ b/server/Quests/QueensColny/welcome_to_norrath.lua @@ -0,0 +1,34 @@ +--[[ + Script Name : Quests/QueensColny/welcome_to_norrath.lua + Script Author : Zcoretri + Script Date : 2015.08.03 + Script Purpose : Handles the quest, "Welcome to Norrath" + + Zone : The Queens Colony + Quest Giver: Proximity + Preceded by: None + Followed by: The Art of Combat +--]] + +function Init(Quest) + AddQuestStepChat(Quest, 1, "I need to speak with Murrar Shar. He is at the entrance to Myrrin's Tower in the center of the Colony.", 1, "Speak to Murrar Shar, outside the entrance of Myrrin's Tower in the center of the colony.", 0, 2530076) + AddQuestStepCompleteAction(Quest, 1, "step1_complete") +end + +function Accepted(Quest, QuestGiver, Player) + +end + +function Declined(Quest, QuestGiver, Player) + +end + +function step1_complete(Quest, QuestGiver, Player) + UpdateQuestDescription(Quest, "I spoke with Murrar Shar.") + GiveQuestReward(Quest, Player) +end + +function Reload(Quest, QuestGiver, Player, Step) + +end + diff --git a/server/Quests/QueensColony/LasydiasCall.lua b/server/Quests/QueensColony/LasydiasCall.lua new file mode 100644 index 000000000..6f55d433e --- /dev/null +++ b/server/Quests/QueensColony/LasydiasCall.lua @@ -0,0 +1,44 @@ +--[[ + Script Name : LasydiasCall.lua + Script Purpose : Handles the quest, "Lasydia's Call" + Script Author : QuestParser (Replace this) + Script Date : 9/12/2016 + Script Notes : + + Zone : Queen's Colony + Quest Giver : statue_widget (2530133) + Preceded by : None + Followed by : None +--]] + + +function Init(Quest) + AddQuestStepKill(Quest, 1, "It is Lasydia's desire that I slay 5 razortooth sharks.", 5, 100, "I feel an overwhelming urge to end the threat that these razortooth sharks present to the refuges and inhabitants of this isle.", 611, 2530014) + AddQuestStepCompleteAction(Quest, 1, "QuestComplete") +end + +function QuestComplete(Quest, QuestGiver, Player) + -- The following UpdateQuestStepDescription and UpdateTaskGroupDescription are not needed, parser adds them for completion in case stuff needs to be moved around + UpdateQuestStepDescription(Quest, 1, "I killed 5 razortooth sharks.") + UpdateQuestTaskGroupDescription(Quest, 1, "Lasydia has comforted me and the feeling to slay sharks left me after I had slain a number of them.") + + UpdateQuestDescription(Quest, "A mysterious sash floated to me out of the water after my desire to slay the vicious sharks left me. I can only guess if it was by accident or by design that the sash found me.") + GiveQuestReward(Quest, Player) +end + +function Reload(Quest, QuestGiver, Player, Step) + if Step == 1 then + QuestComplete(Quest, QuestGiver, Player) + end +end + +function Accepted(Quest, QuestGiver, Player) + local con = CreateConversation() + + AddConversationOption(con, "[exit]", "CloseConversation") + StartDialogConversation(con, 1, QuestGiver, Player, "\"Lasydia - as divinely merciful as she is beautiful. Deliverer of the drowned and caretaker of the castaway.\" A feeling of purpose surrounds and penetrates you. You feel a sudden desire to make the waters around you a safer place.") +end + +function Declined(Quest, QuestGiver, Player) + -- Add dialog here for when the quest is declined +end \ No newline at end of file diff --git a/server/Quests/QueensColony/a_diplomatic_mission.lua b/server/Quests/QueensColony/a_diplomatic_mission.lua new file mode 100644 index 000000000..7e8a54032 --- /dev/null +++ b/server/Quests/QueensColony/a_diplomatic_mission.lua @@ -0,0 +1,136 @@ +--[[ + Script Name : Quests/QueensColony/a_diplomatic_mission.lua + Script Author : Zcoretri + Script Date : 2015.09.05 + Script Purpose : Handles the quest "A Diplomatic Mission" + + Zone : Queen's Colony + Quest Giver: a Sapswill soothsayer + Preceded by: Doggone It! (doggone_it.lua) + Followed by: None +--]] + +local ADiplomaticMission = 166 + +function Init(Quest) + -- Diplomat's Badge + + AddQuestStepChat(Quest, 1, "Greet a musician.", 1, "The Sapswill soothsayer said I need to get the members of their community. Guess it's all part of the diplomatic stuff.", 0, 2530039) + AddQuestStepChat(Quest, 2, "Greet an incapacitated Sapswill.", 1, "The Sapswill soothsayer said I need to get the members of their community. Guess it's all part of the diplomatic stuff.", 0, 2530039) + AddQuestStepChat(Quest, 3, "Greet a seated Sapswill.", 1, "The Sapswill soothsayer said I need to get the members of their community. Guess it's all part of the diplomatic stuff.", 0, 2530036) + AddQuestStepChat(Quest, 4, "Greet an active Sapswill.", 1, "The Sapswill soothsayer said I need to get the members of their community. Guess it's all part of the diplomatic stuff.", 0, 2530039) + AddQuestStepChat(Quest, 5, "Greet a happy Sapswill.", 1, "The Sapswill soothsayer said I need to get the members of their community. Guess it's all part of the diplomatic stuff.", 0, 2530039) + AddQuestStepChat(Quest, 6, "Greet Durg.", 1, "The Sapswill soothsayer said I need to get the members of their community. Guess it's all part of the diplomatic stuff.", 0, 2530035) + AddQuestStepChat(Quest, 7, "Greet Gonk.", 1, "The Sapswill soothsayer said I need to get the members of their community. Guess it's all part of the diplomatic stuff.", 0, 2530034) + + AddQuestStepCompleteAction(Quest, 1, "step1_complete_greetedMusician") + AddQuestStepCompleteAction(Quest, 2, "step2_complete_greetedIncapacitated") + AddQuestStepCompleteAction(Quest, 3, "step3_complete_greetedSeated") + AddQuestStepCompleteAction(Quest, 4, "step4_complete_greetedActive") + AddQuestStepCompleteAction(Quest, 5, "step5_complete_greetedHappy") + AddQuestStepCompleteAction(Quest, 6, "step6_complete_greetedDurg") + AddQuestStepCompleteAction(Quest, 7, "step7_complete_greetedGonk") +end + +function Accepted(Quest, QuestGiver, Player) + if QuestGiver ~= nil then + if GetDistance(Player, QuestGiver) < 30 then + FaceTarget(QuestGiver, Player) + conversation = CreateConversation() + + AddConversationOption(conversation, "To long life!") + StartConversation(conversation, QuestGiver, Player, "To long life, and happy friendships!") + end + end +end + +function Declined(Quest, QuestGiver, Player) + +end + +function step1_complete_greetedMusician(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 1, "I've greeted a Sapswill musician.") + + if QuestIsComplete(Player, ADiplomaticMission) then + multiple_steps_complete(Quest, QuestGiver, Player) + end +end + +function step2_complete_greetedIncapacitated(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 2, "Greeted a passed out Sapswill.") + + if QuestIsComplete(Player, ADiplomaticMission) then + multiple_steps_complete(Quest, QuestGiver, Player) + end +end + +function step3_complete_greetedSeated(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 3, "Greeted a leisurely Sapswill.") + + if QuestIsComplete(Player, ADiplomaticMission) then + multiple_steps_complete(Quest, QuestGiver, Player) + end +end + +function step4_complete_greetedActive(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 4, "Greeted a frenzied dancer.") + + if QuestIsComplete(Player, ADiplomaticMission) then + multiple_steps_complete(Quest, QuestGiver, Player) + end +end + +function step5_complete_greetedHappy(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 5, "Greeted a very happy Sapswill.") + + if QuestIsComplete(Player, ADiplomaticMission) then + multiple_steps_complete(Quest, QuestGiver, Player) + end +end + +function step6_complete_greetedDurg(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 6, "I've greeted Durg.") + + if QuestIsComplete(Player, ADiplomaticMission) then + multiple_steps_complete(Quest, QuestGiver, Player) + end +end + +function step7_complete_greetedGonk(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 7, "I've greeted Gonk.") + + if QuestIsComplete(Player, ADiplomaticMission) then + multiple_steps_complete(Quest, QuestGiver, Player) + end +end + +function multiple_steps_complete(Quest, QuestGiver, Player) + UpdateQuestTaskGroupDescription(Quest, 1, "I've greeted as many Sapswills as I could.") + + AddQuestStepChat(Quest, 8, "Pay respects to High Chieftain Grexx.", 1, "Now that I've introduced myself to several Sapswill goblins, I should pay my respects to High Chieftain Grexx.", 0, 2530038) + AddQuestStepCompleteAction(Quest, 8, "quest_complete") +end + +function quest_complete(Quest, QuestGiver, Player) + UpdateQuestDescription(Quest, "I greeted many of the Sapswills, including their High Chieftan Grexx. They seem like such a harmless bunch; it's hard to imagine that anyone would want to turn them from their simple ways.") + GiveQuestReward(Quest, Player) +end + +function Reload(Quest, QuestGiver, Player, Step) + if Step == 1 then + step1_complete_greetedMusician(Quest, QuestGiver, Player) + elseif Step == 2 then + step2_complete_greetedIncapacitated(Quest, QuestGiver, Player) + elseif Step == 3 then + step3_complete_greetedSeated(Quest, QuestGiver, Player) + elseif Step == 4 then + step4_complete_greetedActive(Quest, QuestGiver, Player) + elseif Step == 5 then + step5_complete_greetedHappy(Quest, QuestGiver, Player) + elseif Step == 6 then + step6_complete_greetedDurg(Quest, QuestGiver, Player) + elseif Step == 7 then + step7_complete_greetedGonk(Quest, QuestGiver, Player) + end +end + diff --git a/server/Quests/QueensColony/a_presence_of_evil.lua b/server/Quests/QueensColony/a_presence_of_evil.lua new file mode 100644 index 000000000..e3fc6abd2 --- /dev/null +++ b/server/Quests/QueensColony/a_presence_of_evil.lua @@ -0,0 +1,91 @@ +--[[ + Script Name : Quests/QueensColony/a_presence_of_evil.lua + Script Author : Zcoretri + Script Date : 2015.07.30 + Script Purpose : Handles the quest, "A Presence of Evil" + Modified : 2017.04.17 + Modified by: Ememjr + Note : Quest step 3 complete changed from AddQuestStep to AddQuestStepChat, was causing a quest listing erroro in journal + Zone : The Queen's Colony + Quest Giver: Murrar Shar + Preceded by: The Art of Combat + Followed by: Into the Tainted Forest +--]] + +function Init(Quest) + AddQuestStepChat(Quest, 1, "Report to Sergeant Haggus outside the west archway.", 1, "I need to report to Sergeant Haggus outside the west archway. He should have some tasks for me to help the colony.", 0, 2530078) + AddQuestStepCompleteAction(Quest, 1, "step1_complete_talkToHaggus") +end + +function Accepted(Quest, QuestGiver, Player) + if QuestGiver ~= nil then + if GetDistance(Player, QuestGiver) < 30 then + FaceTarget(QuestGiver, Player) + conversation = CreateConversation() + AddConversationOption(conversation, "Thanks.") + StartConversation(conversation, QuestGiver, Player, "Good luck, " .. GetName(Player) .. ".") + end + end +end + +function Declined(Quest, QuestGiver, Player) + +end + +function step1_complete_talkToHaggus(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 1, "I reported to Sergeant Haggus and have been assigned my first duty.") + UpdateQuestTaskGroupDescription(Quest, 1, "I reported to Sergeant Haggus and have been assigned my first duty.") + + AddQuestStepKill(Quest, 2, "Kill tainted Sapswill invaders. They are attacking the barricades.", 3, 100, "Sergeant Haggus and the other defenders need help defending the colony. I should help fend off the attacking goblin horder.", 611, 2530085) + AddQuestStepCompleteAction(Quest, 2, "step2_complete_killedInvaders") +end + +function step2_complete_killedInvaders(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 2, "I was able to help fend off the attacking goblins.") + UpdateQuestTaskGroupDescription(Quest, 2, "I was able to help fend off the attacking goblins.") + AddQuestStepChat(Quest, 3, "Return to Sergeant Haggus.", 1, "I helped defend the colony and should return to Segeant Haggus to see if there is anything else I can do.", 0, 2530078) + AddQuestStepCompleteAction(Quest, 3, "step3_complete_talkToHaggus") +end + +function step3_complete_talkToHaggus(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 3, "I returned to Sergeant Haggus.") + UpdateQuestTaskGroupDescription(Quest, 3, "I returned to Sergeant Haggus.") + AddQuestStepChat(Quest, 4, "I should search past the barricades in Sunset Meadow for signs of the missing soldiers.", 1, "Sergeant Haggus has sent me to find out about some missing soldiers that have not returned. I should look for any sign of the missing soldiers in Sunset Meadow.", 220) + AddQuestStepCompleteAction(Quest, 4, "step4_complete_foundDeadSoldier") +end + + +function step4_complete_foundDeadSoldier(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 4, "The missing soldiers were dead. Even worse, their remains seemed to rise from the dead and attack me as if controlled by some diabolical force.") + UpdateQuestTaskGroupDescription(Quest, 4, "The missing soldiers were dead. Even worse, their remains seemed to rise from the dead and attack me as if controlled by some diabolical force.") + SpawnMob(GetZone(Player), 2530174, false, GetX(Player), GetY(Player), GetZ(Player)) + AddQuestStepChat(Quest, 5, "Report the bad news to Sergeant Haggus.", 1, "I need to report back to Sergeant Haggus with this grim information.", 0, 2530078) + AddQuestStepCompleteAction(Quest, 5, "step5_complete_talkToHaggus") +end + +function step5_complete_talkToHaggus(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 5, "I reported to Sergeant Haggus that his missing soldiers are dead.") + UpdateQuestTaskGroupDescription(Quest, 5, "I reported to Sergeant Haggus that his missing soldiers are dead.") + AddQuestStepChat(Quest, 6, "Take this information back to Murrar Shar.", 1, "Sergeant Haggus would like me to take this information back to Murrar Shar.", 0, 2530076) + AddQuestStepCompleteAction(Quest, 6, "quest_complete") +end + +function quest_complete(Quest, QuestGiver, Player) + UpdateQuestDescription(Quest, "I reported to Sergeant Haggus and helped out at the barricades. The goblins were relentless, but I was able to help fend them off. It was a sad sight to see the soldier that had been killed, but the information I collected should prove useful to the colony.") + GiveQuestReward(Quest, Player) +end + +function Reload(Quest, QuestGiver, Player, Step) + if Step == 1 then + step1_complete_talkToHaggus(Quest, QuestGiver, Player) + elseif Step == 2 then + step2_complete_killedInvaders(Quest, QuestGiver, Player) + elseif Step == 3 then + step3_complete_talkToHaggus(Quest, QuestGiver, Player) + elseif Step == 4 then + step4_complete_foundDeadSoldier(Quest, QuestGiver, Player) + elseif Step == 5 then + step5_complete_talkToHaggus(Quest, QuestGiver, Player) + end +end + diff --git a/server/Quests/QueensColony/a_sandy_bone_shard.lua b/server/Quests/QueensColony/a_sandy_bone_shard.lua new file mode 100644 index 000000000..eb5f740b5 --- /dev/null +++ b/server/Quests/QueensColony/a_sandy_bone_shard.lua @@ -0,0 +1,53 @@ +--[[ + Script Name : quests/QueensColony/a_sandy_bone_shard.lua + Script Purpose : This script is for the quest, "A Sandy Bone Shard". + quest Name : Tainted + + Zone : The Queen's Colony + quest Starter : + Preceded By: Nothing + Followed By: + + Script Author : Ememjr + Script Date : 2017.04.14 +--]] + +function Init(quest) + AddQuestStepKill(quest, 1, "I should try to see if other crabs have more missing pieces to the token.", 5, 60, "I need to find the other pieces to the shattered token.", 1085, 2530051,2530052,2530079) + AddQuestStepCompleteAction(quest, 1, "step1") + +end + +function Declined(quest, questGiver, player) +end +function step1(quest, questGiver, player) + + UpdateQuestTaskGroupDescription(quest, 1, "I have found the remaining pieces.") + AddQuestStepKill(quest, 2, "I should find some fish to make glue from.", 6, 100, "The easiest and nearest source of glue is probably the skin off the fish that can be found in the waters near the docks. I should collect a few.", 2540, 2530014,2530004,2530005,2530007) + + + AddQuestStepCompleteAction(quest, 2, "step2") + +end +function step2(quest, questGiver, player) + UpdateQuestTaskGroupDescription(quest, 2, "I have glued the pieces of the token back together using the sticky gelatin from the fish skins I collected.") + AddQuestStepKill(quest, 3, "I should find a replacement cord on the goblins found on the island.", 1, 25, "The pieces of the token are now glued back together I just need a leather cord to wear it. The goblins on the island must have a suitable one somewhere.", 2180, 2530027,2530037,2530036,2530039,2530028,2530019,2530090,2530010,2530085,2530018,2530021,2530011,2530030,2530031,2530020,2530024) + AddQuestStepCompleteAction(quest, 3, "completed") +end + + +function completed(quest, questGiver, player) + UpdateQuestDescription(quest, "I have found all the pieces I needed and put the Scrimshaw Token back together.") + GiveQuestReward(quest, player) +end + +function Reload(quest, questGiver, player, Step) +SendMessage(player, "before step 1","yellow") + if Step == 1 then + step1(quest, questGiver, player) + elseif Step == 2 then + step2(quest, questGiver, player) + elseif Step == 3 then + step3(quest, questGiver, player) + end +end \ No newline at end of file diff --git a/server/Quests/QueensColony/doggone_it.lua b/server/Quests/QueensColony/doggone_it.lua new file mode 100644 index 000000000..0af928e32 --- /dev/null +++ b/server/Quests/QueensColony/doggone_it.lua @@ -0,0 +1,116 @@ +--[[ + Script Name : Quests/QueensColony/doggone_it.lua + Script Author : Zcoretri + Script Date : 2015.09.05 + Script Purpose : Handles the quest "Doggone It!" + + Zone : QueensColony + Quest Giver: a lost scout + Preceded by: None + Followed by: A Diplomatic Mission (a_diplomatic_mission.lua) +--]] + +local DoggoneIt = 165 + +function Init(Quest) + -- Torn Scout Pants + AddQuestStepKill(Quest, 1, "I need to clear out the Morak devourers near the Dead Canyon.", 5, 100, "A Qeynosian Scout has asked me to help him rid the Colony of the ferocious hounds known as Moraks.", 1222, 2530015) + AddQuestStepCompleteAction(Quest, 1, "step1_complete_killedMoraks") +end + +function Accepted(Quest, QuestGiver, Player) + if QuestGiver ~= nil then + if GetDistance(Player, QuestGiver) < 30 then + FaceTarget(QuestGiver, Player) + conversation = CreateConversation() + + AddConversationOption(conversation, "Well Okay.") + StartConversation(conversation, QuestGiver, Player, "If they come back, you know where you'll find me -- up in this tree!") + end + end +end + +function Declined(Quest, QuestGiver, Player) + +end + +function step1_complete_killedMoraks(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 1, "I've removed the Morak devourer menace.") + + AddQuestStepChat(Quest, 2, "I should tell the lost Qeynosian scout to run while he still can!", 1, "A Qeynosian Scout has asked me to help him rid the Colony of the ferocious hounds known as Moraks.", 0, 2530197) + AddQuestStepCompleteAction(Quest, 2, "step2_complete_talkedToScout") +end + +function step2_complete_talkedToScout(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 2, "I've spoken with the Qeynosian scout.") + UpdateQuestTaskGroupDescription(Quest, 1, "I've helped the Qeynosian scout by clearing out the Moraks.") + + numMoraks = math.random(4, 6) + + AddQuestStepLocation(Quest, 3, "Explore the Abondoned Village.", 80, "The Qeynosian scout is too terrified of the Morak to continue his mission forward and has asked me to do some unofficial scouting.", 0, 200.33, 0.01, -183.14) + AddQuestStepLocation(Quest, 4, "Explore Sapswill Hill.", 80, "The Qeynosian scout is too terrified of the Morak to continue his mission forward and has asked me to do some unofficial scouting.", 0, 148.54, 5.53, -153.11) + AddQuestStepKill(Quest, 5, "Clear away more Moraks.", numMoraks, 100, "The Qeynosian scout is too terrified of the Morak to continue his mission forward and has asked me to do some unofficial scouting.", 1222, 2530015) + AddQuestStepCompleteAction(Quest, 3, "step3_complete_exploredVillage") + AddQuestStepCompleteAction(Quest, 4, "step4_complete_exploredHill") + AddQuestStepCompleteAction(Quest, 5, "step5_complete_killedMoraks") +end + +function step3_complete_exploredVillage(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 3, "Explored the Abandoned Village.") + + if QuestIsComplete(Player, DoggoneIt) then + multiple_steps_complete(Quest, QuestGiver, Player) + end +end + +function step4_complete_exploredHill(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 4, "Explored Sapswill Hill.") + + if QuestIsComplete(Player, DoggoneIt) then + multiple_steps_complete(Quest, QuestGiver, Player) + end +end + +function step5_complete_killedMoraks(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 5, "Cleared away more Moraks.") + + if QuestIsComplete(Player, DoggoneIt) then + multiple_steps_complete(Quest, QuestGiver, Player) + end +end + +function multiple_steps_complete(Quest, QuestGiver, Player) + UpdateQuestTaskGroupDescription(Quest, 2, "I've done a bit of scouting ahead and find that this area is teeming with Moraks.") + + AddQuestStepChat(Quest, 6, "Tell the lost Qeynosian scout about the abundant Moraks in the area.", 1, "The lost Qeynosian scout will be dismayed when he hears my report.", 0, 2530197) + AddQuestStepCompleteAction(Quest, 6, "step6_complete_talkedToScout") +end + +function step6_complete_talkedToScout(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 6, "I've delivered the bad news to the Qeynosian scout.") + UpdateQuestTaskGroupDescription(Quest, 3, "I've delivered the bad news to the Qeynosian scout.") + + AddQuestStepChat(Quest, 7, "This package must be given to the Sapswill soothsayer at the Last Stand.", 1, "As a diplomatic gesture, I need to take this package to the Sapswill soothsayer.", 0, 2530037) + AddQuestStepCompleteAction(Quest, 7, "quest_complete") +end + +function quest_complete(Quest, QuestGiver, Player) + UpdateQuestDescription(Quest, "The lost Qeynosian scout will have a difficult time if his work takes him through the Sapswill Village with any frequency; the place is full of Moraks! Though I cleared a path for him, there are many more Moraks. Hopefully, my new friend will be able to overcome his fears and continue scouting on behalf of Qeynos. To further help him, I played diplomat-in-training and visited the Sapswill soothsayer.") + GiveQuestReward(Quest, Player) +end + +function Reload(Quest, QuestGiver, Player, Step) + if Step == 1 then + step1_complete_killedMoraks(Quest, QuestGiver, Player) + elseif Step == 2 then + step2_complete_talkedToScout(Quest, QuestGiver, Player) + elseif Step == 3 then + step3_complete_exploredVillage(Quest, QuestGiver, Player) + elseif Step == 4 then + step4_complete_exploredHill(Quest, QuestGiver, Player) + elseif Step == 5 then + step5_complete_killedMoraks(Quest, QuestGiver, Player) + elseif Step == 6 then + step6_complete_talkedToScout(Quest, QuestGiver, Player) + end +end \ No newline at end of file diff --git a/server/Quests/QueensColony/ebiks_missing_parts.lua b/server/Quests/QueensColony/ebiks_missing_parts.lua new file mode 100644 index 000000000..d8c10ab3b --- /dev/null +++ b/server/Quests/QueensColony/ebiks_missing_parts.lua @@ -0,0 +1,85 @@ +--[[ + Script Name : Quests/QueensColony/ebiks_missing_parts.lua + Script Purpose : Handles the quest, "Ebik's Missing Parts" + Script Author : Scatman + Script Date : 2008.09.04 + + Zone : The Queen's Colony + Quest Giver: Ebik Wobblecog + Preceded by: None + Followed by: None +--]] + +local EbiksMissingParts = 185 + +function Init(Quest) + -- Constructed Wrist Spanner + + AddQuestStep(Quest, 1, "I still need to get a size 7 clunker. Perhaps Ebik lost it while getting a better view of the bay.", 1, 100, "I need to find the three items that were lost on this island. I should keep an eye out while I explore the colony.", 173) + AddQuestStep(Quest, 2, "I still need to get a copper-coated springer. It's possible Ebik could have lost it over the side of the ship.", 1, 100, "I need to find the three items that were lost on this island. I should keep an eye out while I explore the colony.", 216) + AddQuestStep(Quest, 3, "I still need to get a triangle spinner. Maybe Ebik was trying to run from something and dropped it?", 1, 100, "I need to find the three items that were lost on this island. I should keep an eye out while I explore the colony.", 86) + AddQuestStepCompleteAction(Quest, 1, "step1_complete") + AddQuestStepCompleteAction(Quest, 2, "step2_complete") + AddQuestStepCompleteAction(Quest, 3, "step3_complete") + + +end + +function Accepted(Quest, QuestGiver, Player) + if QuestGiver ~= nil then + if GetDistance(Player, QuestGiver) < 30 then + FaceTarget(QuestGiver, Player) + conversation = CreateConversation() + + PlayFlavor(QuestGiver, "voiceover/english/ebik_wobblecog/tutorial_island01/ebik/ebik_secondtalk_01.mp3", "", "", 688070292, 1255284608, Player) + AddConversationOption(conversation, "Okay.") + StartConversation(conversation, QuestGiver, Player, "I need all the parts, I can't leave without them and luckily the boat to Qeynos hasn't showed up yet. Please help me find all of the parts.") + end + end +end + +function Declined(Quest, QuestGiver, Player) +end + +function step1_complete(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 1, "I have Ebik's size 7 clunker.") + if QuestIsComplete(Player, EbiksMissingParts) then + givePartsToEbik(Quest, QuestGiver, Player) + end +end + +function step2_complete(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 2, "I have Ebik's copper-coated springer.") + if QuestIsComplete(Player, EbiksMissingParts) then + givePartsToEbik(Quest, QuestGiver, Player) + end +end + +function step3_complete(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 3, "I have Ebik's triangle spinner.") + if QuestIsComplete(Player, EbiksMissingParts) then + givePartsToEbik(Quest, QuestGiver, Player) + end +end + +function givePartsToEbik(Quest, QuestGiver, Player) + UpdateQuestTaskGroupDescription(Quest, 1, "I have found all of Ebik's parts.") + AddQuestStepChat(Quest, 4, "I should bring these parts back to Ebik.", 1, "I found all the parts Ebik needs and I should return them to him.", 0, 2530059) + AddQuestStepCompleteAction(Quest, 4, "quest_complete_gavePartsToEbik") +end + +function quest_complete_gavePartsToEbik(Quest, QuestGiver, Player) + UpdateQuestTaskGroupDescription(Quest, 2, "I have given Ebik the parts I collected.") + UpdateQuestDescription(Quest, "I gave Ebik Wobblecog all the parts he needed. Hopefully now he can meet up with his father and evade their family's famous curse.") + GiveQuestReward(Quest, Player) +end + +function Reload(Quest, QuestGiver, Player, Step) + if Step == 1 then + step1_complete(Quest, QuestGiver, Player) + elseif Step == 2 then + step2_complete(Quest, QuestGiver, Player) + elseif Step == 3 then + step3_complete(Quest, QuestGiver, Player) + end +end diff --git a/server/Quests/QueensColony/ghosts_and_goblins.lua b/server/Quests/QueensColony/ghosts_and_goblins.lua new file mode 100644 index 000000000..84c75353b --- /dev/null +++ b/server/Quests/QueensColony/ghosts_and_goblins.lua @@ -0,0 +1,132 @@ +--[[ + Script Name : Quests/QueensColony/ghosts_and_goblins.lua + Script Purpose : This script is for the quest, "Ghosts and Goblins". + Quest Name : Ghosts and Goblins + + Zone : The Queen's Colony + Quest Starter : Deianeira + Preceded By: Tainted (tainted.lua) + Followed By: Nothing + + Script Author : Scatman + Script Date : 2008.08.14 +--]] + +local GhostsAndGoblins = 184 + +function Init(quest) + -- Sapswill hip sack + -- Sapswill swill + AddQuestStepChat(quest, 1, "The Forest Keeper is a treant who is resisting the corruption spreading through the Queen's Colony.", 1, "I must seek the cause of the corruption in the Tainted Forest.", 0, 2530105) + AddQuestStepCompleteAction(quest, 1, "step1_complete_talkedToKeeper") +end + +function Accepted(quest, questGiver, player) + if questGiver ~= nil then + if GetDistance(player, questGiver) < 30 then + FaceTarget(questGiver, player) + conversation = CreateConversation() + PlayFlavor(questGiver, "voiceover/english/tutorial_revamp/deianeira/tutorial_island02_revamp/quest/qst_deianeira_complete_111dc711.mp3", "", "", 796380527, 3559718915, player) + AddConversationOption(conversation, "Glad to be of service.") + StartConversation(conversation, questGiver, player, "It's up to us to find the answers; they're never handed to us.") + end + end +end + +function Declined(quest, questGiver, player) +end + +function step1_complete_talkedToKeeper(quest, questGiver, player) + UpdateQuestStepDescription(quest, 1, "I've spoken with the Forest Keeper.") + + AddQuestStepKill(quest, 2, "The Forest Keeper asked me to release the ghostly treants so that they can be reborn.", 3, 100, "I must seek the cause of the corruption in the Tainted Forest.", 194, 2530012) + AddQuestStepCompleteAction(quest, 2, "step2_complete_killedTreants") +end + +function step2_complete_killedTreants(quest, questGiver, player) + UpdateQuestStepDescription(quest, 2, "I've released the ghostly treants.") + + AddQuestStepChat(quest, 3, "Return to the Forest Keeper.", 1, "I must seek the cause of the corruption in the Tainted Forest.", 0, 2530105) + AddQuestStepCompleteAction(quest, 3, "step3_complete_talkedToKeeper") +end + +function step3_complete_talkedToKeeper(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 3, "I've spoken to the Forest Keeper.") + + AddQuestStepChat(Quest, 4, "The Forest Keeper suggested I speak with a soothsayer at the Last Stand, the old goblin base northeast of the Tainted Forest.", 1, "I must seek the cause of the corruption in the Tainted Forest.", 0, 2530037) + AddQuestStepCompleteAction(Quest, 4, "step4_complete_talkedToSoothsayer") +end + +function step4_complete_talkedToSoothsayer(quest, questGiver, player) + UpdateQuestStepDescription(quest, 4, "The Forest Keeper referred me to a Sapswill Soothsayer.") + UpdateQuestTaskGroupDescription(quest, 1, "The Forest Keeper referred me to a Sapswill Soothsayer.", 1) + + AddQuestStepLocation(quest, 5, "I must get water from the Hope Falls waterfall.", 30, "The Sapswill soothsayer suggested that if I gather some roots and bring him water, he could remove the taint from the Colony.", 313, -11, 0, -250) + AddQuestStepLocation(quest, 6, "I must get water from the Razortooth Falls waterfall.", 30, "The Sapswill soothsayer suggested that if I gather some roots and bring him water, he could remove the taint from the Colony.", 313, 16, -10, -88) + AddQuestStepLocation(quest, 7, "I must get water from the Sapswill Falls waterfall.", 30, "The Sapswill soothsayer suggested that if I gather some roots and bring him water, he could remove the taint from the Colony.", 313, -72, 0, -251) + AddQuestStepHarvest(quest, 8, "I must gather some roots. They're scattered around the ground in large clumps and should be easy for me to locate.", 3, 100, "The Sapswill soothsayer suggested that if I gather some roots and bring him water, he could remove the taint from the Colony.", 194, 11637) + AddQuestStepCompleteAction(quest, 5, "step5_complete_hopeFalls") + AddQuestStepCompleteAction(quest, 6, "step6_complete_razortoothFalls") + AddQuestStepCompleteAction(quest, 7, "step7_complete_sapswillFalls") + AddQuestStepCompleteAction(quest, 8, "step8_complete_gatheredRoots") +end + +function step5_complete_hopeFalls(Quest, QuestGiver, Player) + UpdateQuestStepDescription(quest, 5, "I've collected some water from Hope Falls.") + if QuestIsComplete(Player, GhostsAndGoblins) then + GotWaterAndRoots(Quest, QuestGiver, Player) + end +end + +function step6_complete_razortoothFalls(Quest, QuestGiver, Player) + UpdateQuestStepDescription(quest, 6, "I've collected some water from Razortooth falls.") + if QuestIsComplete(Player, GhostsAndGoblins) then + GotWaterAndRoots(Quest, QuestGiver, Player) + end +end + +function step7_complete_sapswillFalls(Quest, QuestGiver, Player) + UpdateQuestStepDescription(quest, 7, "I've collected some water from Sapswill Falls.") + if QuestIsComplete(Player, GhostsAndGoblins) then + GotWaterAndRoots(Quest, QuestGiver, Player) + end +end + +function step8_complete_gatheredRoots(Quest, QuestGiver, Player) + UpdateQuestStepDescription(quest, 8, "I've gathered some roots.") + if QuestIsComplete(Player, GhostsAndGoblins) then + GotWaterAndRoots(Quest, QuestGiver, Player) + end +end + +function GotWaterAndRoots(Quest, QuestGiver, Player) + --UpdateQuestStepDescription(quest, 4, "The Forest Keeper referred me to a Sapswill Soothsayer.") + UpdateQuestTaskGroupDescription(Quest, 2, "I've gathered the resources Sapswill soothsayer needs.") + AddQuestStepChat(Quest, 9, "I must speak with the Sapswill soothsayer and give him these items so that he can remove the Colony's taint!", 1, "Now that I've done what the Sapswill soothsayer asked, I should return to him at the Last Stand.", 0, 2530037) + AddQuestStepCompleteAction(Quest, 9, "questComplete") +end + +function questComplete(quest, questGiver, player) + UpdateQuestDescription(quest, "Releasing the ghostly treants did not lessen the corruption seeping through the Tainted Forest, so the Forest Keeper sent me to consult with a Sapswill soothsayer. After gathering some roots and water that I thought would be used for divination, I returned to find out he was only using me to get things to ferment!") + GiveQuestReward(quest, player) +end + +function Reload(Quest, QuestGiver, Player, Step) + if Step == 1 then + step1_complete_talkedToKeeper(Quest, QuestGiver, Player) + elseif Step == 2 then + step2_complete_killedTreants(Quest, QuestGiver, Player) + elseif Step == 3 then + step3_complete_talkedToKeeper(Quest, QuestGiver, Player) + elseif Step == 4 then + step4_complete_talkedToSoothsayer(Quest, QuestGiver, Player) + elseif Step == 5 then + step5_complete_hopeFalls(Quest, QuestGiver, Player) + elseif Step == 6 then + step6_complete_razortoothFalls(Quest, QuestGiver, Player) + elseif Step == 7 then + step7_complete_sapswillFalls(Quest, QuestGiver, Player) + elseif Step == 8 then + step8_complete_gatheredRoots(Quest, QuestGiver, Player) + end +end diff --git a/server/Quests/QueensColony/into_the_tainted_forest.lua b/server/Quests/QueensColony/into_the_tainted_forest.lua new file mode 100644 index 000000000..d700558d9 --- /dev/null +++ b/server/Quests/QueensColony/into_the_tainted_forest.lua @@ -0,0 +1,86 @@ +--[[ + Script Name : Quests/QueensColony/into_the_tainted_forest.lua + Script Author : Zcoretri + Script Date : 2015.09.04 + Script Purpose : Handles the quest "Into the Tainted Forest" + + Zone : Queen's Colony + Quest Giver: + Preceded by: A Presence of Evil (a_presence_of_evil.lua) + Followed by: Joining the Forward Ranks (joining_the_forward_ranks.lua) +--]] + +function Init(Quest) + AddQuestStepChat(Quest, 1, "Seek out Predator Sha'dur in the Tainted Forest. Head west into the Sunset Meadow and then north up the hill.", 1, "I need to seek out Predator Sha'dur in the Tainted Forest. He is collecting tainted wildlife samples and may need my help. The Tainted Forest can be found north up the hill from the Sunset Meadow.", 0, 2530108) + AddQuestStepCompleteAction(Quest, 1, "step1_completed_talkedToPredator") +end + +function Accepted(Quest, QuestGiver, Player) + if QuestGiver ~= nil then + if GetDistance(Player, QuestGiver) < 30 then + FaceTarget(QuestGiver, Player) + conversation = CreateConversation() + AddConversationOption(conversation, "Of course.") + StartConversation(conversation, QuestGiver, Player, "Thank you for the help.") + end + end +end + +function Declined(Quest, QuestGiver, Player) + +end + +function step1_completed_talkedToPredator(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 1, "I found Predator Sha'dur. He was distraught about losing his bow and arrows.") + UpdateQuestTaskGroupDescription(Quest, 1, "I found Predator Sha'dur. He was distraught about losing his bow and arrows.") + AddQuestStepKill(Quest, 2, "One of the nearby Sapswill tappers should have Sha'dur's bow.", 1, 25, "Predator Sha'dur is down on his luck and has lost his bow and arrows. I am to find the goblins that took his bow and get it back through any means necessary.", 629, 2530021) + AddQuestStepCompleteAction(Quest, 2, "step2_complete_killedTapper") +end + +function step2_complete_killedTapper(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 2, "I was able to reclaim Sha'dur's Bow from a group of goblins in the Tainted Forest.") + UpdateQuestTaskGroupDescription(Quest, 2, "I was able to reclaim Sha'dur's Bow from a group of goblins in the Tainted Forest.") + AddQuestStepChat(Quest, 3, "Return the bow to Predator Sha'dur.", 1, "I found Sha'dur's bow off a nearby Sapswill tapper. I should return the bow to him.", 0, 2530108) + AddQuestStepCompleteAction(Quest, 3, "step3_completed_talkedToPredator") +end + +function step3_completed_talkedToPredator(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 3, "I returned Sha'dur his lost bow.") + UpdateQuestTaskGroupDescription(Quest, 3, "I returned Sha'dur his lost bow.") + AddQuestStepObtainItem(Quest, 4, "Search the wood near the spider den in the Tainted Forest. The den is to the southeast within the forest.", 3, 100, "I should find some wood suitable for arrows to replace the ones Sha'dur lost. Sha'dur says he saw some piles of sticks to the east in the Tainted Forest near a large spider den.", 2359, 2394) + AddQuestStepCompleteAction(Quest, 4, "step4_complete_gotSticks") +end + +function step4_complete_gotSticks(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 4, "I gathered enough piles of sticks to provide enough wood for Sha'dur to make new arrows.") + UpdateQuestTaskGroupDescription(Quest, 4, "I gathered enough piles of sticks to provide enough wood for Sha'dur to make new arrows.") + AddQuestStepChat(Quest, 5, "Take the wood back to Predator Sha'dur.", 1, "I need to take the wood back to Predator Sha'dur.", 0, 2530108) + AddQuestStepCompleteAction(Quest, 5, "step5_complete_talkedToPredator") +end + +function step5_complete_talkedToPredator(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 5, "I gathered enough piles of sticks to provide enough wood for Sha'dur to make new arrows.") + UpdateQuestTaskGroupDescription(Quest, 5, "I gathered enough piles of sticks to provide enough wood for Sha'dur to make new arrows.") + AddQuestStepChat(Quest, 6, "Take the samples back to Murrar Shar.", 1, "Predator Sha'dur was able to collect a few samples before he lost his gear. I need to take these samples back to Murrar Shar.", 0, 2530076) + AddQuestStepCompleteAction(Quest, 6, "step6_complete_talkedToMurrar") +end + +function step6_complete_talkedToMurrar(Quest, QuestGiver, Player) + UpdateQuestTaskGroupDescription(Quest, 2, "I gave Murrar Shar the samples.") + UpdateQuestDescription(Quest, "I found Predator Sha'dur in the Tainted Forest. He was distraught about being attacked and losing his bow and arrows. I helped him to reclaim his bow and then gathered some sticks for use in making some new arrows. I then returned to Murrar Shar with some samples from the tainted wildlife.") + GiveQuestReward(Quest, Player) +end + +function Reload(Quest, QuestGiver, Player, Step) + if Step == 1 then + step1_completed_talkedToPredator(Quest, QuestGiver, Player) + elseif Step == 2 then + step2_complete_killedTapper(Quest, QuestGiver, Player) + elseif Step == 3 then + step3_completed_talkedToPredator(Quest, QuestGiver, Player) + elseif Step == 4 then + step4_complete_gotSticks(Quest, QuestGiver, Player) + elseif Step == 5 then + step5_complete_talkedToPredator(Quest, QuestGiver, Player) + end +end \ No newline at end of file diff --git a/server/Quests/QueensColony/joining_the_forward_ranks.lua b/server/Quests/QueensColony/joining_the_forward_ranks.lua new file mode 100644 index 000000000..22c749747 --- /dev/null +++ b/server/Quests/QueensColony/joining_the_forward_ranks.lua @@ -0,0 +1,79 @@ +--[[ + Script Name : Quests/QueensColony/joining_the_forward_ranks.lua + Script Author : Zcoretri + Script Date : 2015.09.04 + Script Purpose : Handles the quest "Joining the Forward Ranks" + + Zone : The Queen's Colony + Quest Giver: Murrar Shar + Preceded by: Into the Tainted Forest (into_the_tainted_forest.lua) + Followed by: The Source of Evil (the_source_of_evil.lua) +--]] + +function Init(Quest) + AddQuestStepChat(Quest, 1, "Find Cleric Mara'Vaen at the head of Dead Canyon to the west past Sunset Meadow.", 1, "Find Cleric Mara'Vaen in the Dead Canyon to the west of the colony past Sunset Meadow.", 0, 2530111) + AddQuestStepCompleteAction(Quest, 1, "step1_complete_talkedToCleric") +end + +function Accepted(Quest, QuestGiver, Player) + if QuestGiver ~= nil then + if GetDistance(Player, QuestGiver) < 30 then + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + PlayFlavor(QuestGiver, "voiceover/english/tutorial_revamp/murrar_shar/tutorial_island02_revamp/quests/citizenship/murrarshar/murrarshar034.mp3", "", "", 682752455, 1067974299) + AddConversationOption(conversation, "I'll head there now.") + StartConversation(conversation, QuestGiver, Player, "She can be found at the head of Dead Canyon to the west.") + end + end +end + +function Declined(Quest, QuestGiver, Player) + +end + +function step1_complete_talkedToCleric(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 1, "I talked with Cleric Mara'Vaen, She already knew of my coming.") + UpdateQuestTaskGroupDescription(Quest, 1, "I talked with Cleric Mara'Vaen, She already knew of my coming.") + AddQuestStep(Quest, 2, "Pull lost scouts back to Cleric Mara'Vaen from Dead Canyon.", 3, 100, "Cleric Mara'Vaen thinks that she can resurrect some of the scouts that were consumed by evil. I need to somehow get them back to Mara'Vaen and she will attempt the resurrection.", 2516) + AddQuestStepCompleteAction(Quest, 2, "step2_complete_pulledScouts") +end + +function step2_complete_pulledScouts(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 2, "I pulled the lost scouts back To Cleric Mara'Vaen and she was able to resurrect them.") + UpdateQuestTaskGroupDescription(Quest, 2, "I pulled the lost scouts back To Cleric Mara'Vaen and she was able to resurrect them.") + AddQuestStepChat(Quest, 3, "Talk to Cleric Mara'Vaen.", 1, "I need to talk to Mara'Vaen now that the scouts have been resurrected.", 0, 2530111) + AddQuestStepCompleteAction(Quest, 3, "step3_complete_talkedToMara") +end + +function step3_complete_talkedToMara(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 3, "I talked to Cleric Mara'Vaen.") + UpdateQuestTaskGroupDescription(Quest, 3, "I talked to Cleric Mara'Vaen and she informed me of the Morak that have risen from the dead.") + AddQuestStepKill(Quest, 4, "Kill Morak devourers to the north in Dead Canyon.", 4, 100, "Cleric Mara'Vaen informed me of a breed of wolves that was once cleansed from the island. The evil that resides now has risen them from the dead and they now feed again. They are blocking the path of the scouts to get to the Abandoned Way, so I need to clear the way.", 142, 2530015) + AddQuestStepCompleteAction(Quest, 4, "step4_complete_killedMorak") +end + + +function step4_complete_killedMorak(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 4, "I cleared the way for the scouts to get to the Abandoned Village.") + UpdateQuestTaskGroupDescription(Quest, 4, "I cleared the way for the scouts to get to the Abandoned Village.") + AddQuestStepChat(Quest, 5, "Return to Cleric Mara'Vaen.", 1, "I killed the Morak Devourers and I should return to Cleric Mara'Vaen.", 0, 2530111) + AddQuestStepCompleteAction(Quest, 5, "questComplete") +end + +function questComplete(Quest, QuestGiver, Player) + UpdateQuestDescription(Quest, "I was able to help Cleric Mara'Vaen to resurrect some of the fallen scouts. I then cleared the way through the Morak so that the scouts could push through to the Abandoned Village. Cleric Mara'Vaen rewarded me for my assistance.") + GiveQuestReward(Quest, Player) +end + +function Reload(Quest, QuestGiver, Player, Step) + if Step == 1 then + step1_complete_talkedToCleric(Quest, QuestGiver, Player) + elseif Step == 2 then + step2_complete_pulledScouts(Quest, QuestGiver, Player) + elseif Step == 3 then + step3_complete_talkedToMara(Quest, QuestGiver, Player) + elseif Step == 4 then + step4_complete_killedMorak(Quest, QuestGiver, Player) + end +end + diff --git a/server/Quests/QueensColony/seaside_stew.lua b/server/Quests/QueensColony/seaside_stew.lua new file mode 100644 index 000000000..ba5cad6cc --- /dev/null +++ b/server/Quests/QueensColony/seaside_stew.lua @@ -0,0 +1,107 @@ +--[[ + Script Name : Quests/OutpostOverlord/seaside_stew.lua + Script Purpose : Handles the quest, "Seaside Stew" + Script Author : Scatman (Updted by Cynnar 2018.09.16 10:09:24) + Script Date : 2008.09.07 + + Zone : Outpost of the Overlord + Quest Giver: Tayil N'Velex + Preceded by: The Art of Combat (the_art_of_combat_evil.lua) + Followed by: Preventative Maintenance (preventative_maintenance.lua) +--]] + +local ChefGorga = 2780057 +local TayilNVelex = 2780038 +local WorkerBees = 2780064 +local SoldierBees = 2780078 +local QueenBee = 2780076 +local CowElk = 2780066 +local ElkCalf = 2780065 +local BullElk = 2780068 + +function Init(Quest) + -- Freeportian Cloth Cuffs + -- Freeportian Leather Sleeves + -- Freeportian Plated Bracers + -- Freeportian Studded Wristguards + + AddQuestStepChat(Quest, 1, "Seek out Chef Gorga outside the west gate.", 1, "I need to seek out Chef Gorga outside the west gate. She should have some tasks for me to test out my combat skills.", 0, ChefGorga) + AddQuestStepCompleteAction(Quest, 1, "step1_complete_talkedToGorga") + +end + + +function Accepted(Quest, QuestGiver, Player) + if QuestGiver ~= nil then + if GetDistance(Player, QuestGiver) < 30 then + FaceTarget(QuestGiver, Player) + conversation = CreateConversation + + PlayFlavor(QuestGiver, "voiceover/english/tutorial_revamp/tayil_n_velex/tutorial_island02_evil_revamp/quests/citizenship/tayilnvelex/tayilnvelex036.mp3", "", "", 3316986332, 3271769196, Player) + AddConversationOption(conversation, "I will.") + StartConversation(conversation, QuestGiver, Player, "Report back to me when your duties with Chef Gorga are done.") + end + end +end + +function Declined(Quest, QuestGiver, Player) +end + +function step1_complete_talkedToGorga(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 1, "I reported to Chef Gorga and have been given my first task.") + UpdateQuestTaskGroupDescription(Quest, 1, "I reported to Chef Gorga and have been given my first task.") + + AddQuestStepKill(Quest, 2, "Kill the nearby bees to add to Gorga's stew.", 3, 100, "The first ingredient for the Seaside Stew is the nearby bees. I need to kill some for Gorga.", 611, WorkerBees, SoldierBees, QueenBee) + AddQuestStepCompleteAction(Quest, 2, "step2_complete_killedBees") +end + +function step2_complete_killedBees(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 2, "I killed enough bees for the first ingredient of Gorgia's Seaside Stew.") + UpdateQuestTaskGroupDescription(Quest, 2, "I killed enough bees for the first ingredient of Gorgia's Seaside Stew.") + + AddQuestStepChat(Quest, 3, "Return to Chef Gorga.", 1, "I killed the bees that Gorga wants for her stew. I should return to her now.", 0, ChefGorga) + AddQuestStepCompleteAction(Quest, 3, "step3_complete_talkedToGorga") +end + +function step3_complete_talkedToGorga(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 3, "I returned to Chef Gorga.") + UpdateQuestTaskGroupDescription(Quest, 3, "I returned to Chef Gorga.") + + AddQuestStepKill(Quest, 4, "Kill the elk for their livers.", 4, 100, "The second ingredient is elk livers. The elk roam throughout the Seaside Glade, out past the barricades.", 611, CowElk, ElkCalf, BullElk) + AddQuestStepCompleteAction(Quest, 4, "step4_complete_killedElk") +end + +function step4_complete_killedElk(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 4, "I gathered enough elk livers for Gorga's Seaside Stew.") + UpdateQuestTaskGroupDescription(Quest, 4, "I gathered enough elk livers for Gorga's Seaside Stew.") + + AddQuestStepChat(Quest, 5, "Return the livers to Chef Gorga.", 1, "I've gathered the elk livers and need to return to Chef Gorga.", 0, ChefGorga) + AddQuestStepCompleteAction(Quest, 5, "step5_complete_talkedToGorga") +end + +function step5_complete_talkedToGorga(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 5, "I returned to Chef Gorga with the elk livers for her stew.") + UpdateQuestTaskGroupDescription(Quest, 5, "I returned to Chef Gorga with the elk livers for her stew.") + + AddQuestStepChat(Quest, 6, "Return to Tayil N'Velex.", 1, "I should return to Tayil N'Velex and let her know that I've finished helping Gorga.", 0, TayilNVelex) + AddQuestStepCompleteAction(Quest, 6, "step6_complete_talkedToTayil") +end + +function step6_complete_talkedToTayil(Quest, QuestGiver, Player) + UpdateQuestDescription(Quest, "I reported to Chef Gorga and gathered some ingredients for her Seaside Stew. Livers! Upon returning to Tayil, I was rewarded for my efforts.") + GiveQuestReward(Quest, Player) +end + +function Reload(Quest, QuestGiver, Player, Step) + if Step == 1 then + step1_complete_talkedToGorga(Quest, QuestGiver, Player) + elseif Step == 2 then + step2_complete_killedBees(Quest, QuestGiver, Player) + elseif Step == 3 then + step3_complete_talkedToGorga(Quest, QuestGiver, Player) + elseif Step == 4 then + step4_complete_killedElk(Quest, QuestGiver, Player) + elseif Step == 5 then + step5_complete_talkedToGorga(Quest, QuestGiver, Player) + end +end diff --git a/server/Quests/QueensColony/tainted.lua b/server/Quests/QueensColony/tainted.lua new file mode 100644 index 000000000..4c3c743fd --- /dev/null +++ b/server/Quests/QueensColony/tainted.lua @@ -0,0 +1,165 @@ +--[[ + Script Name : Quests/QueensColony/tainted.lua + Script Purpose : This script is for the quest, "Tainted". + Quest Name : Tainted + + Zone : The Queen's Colony + Quest Starter : Deianeira + Preceded By: Nothing + Followed By: Ghosts and Goblins () + + Script Author : Scatman + Script Date : 2008.08.13 +--]] + +function Init(quest) + + -- spider fang ring + AddQuestStepKill(quest, 1, "I need to clear the Tainted Forest of these toxic crawlers!", 4, 100, "I need to clear out the toxic crawlers to keep their poison from spreading throughout the Colony.", 1857, 2530084) + AddQuestStepCompleteAction(quest, 1, "step1_toxicCrawlers") + +end + +function Accepted(quest, questGiver, player) + if questGiver ~= nil then + if GetDistance(player, questGiver) < 30 then + FaceTarget(questGiver, player) + + conversation = CreateConversation() + PlayFlavor(questGiver, "voiceover/english/tutorial_revamp/deianeira/tutorial_island02_revamp/quest/qst_deianeira_complete_111dc711.mp3", "", "", 796380527, 3559718915, player) + AddConversationOption(conversation, "I'll be back when I'm done with the spiders.") + StartConversation(conversation, questGiver, player, "It's up to us to find the answers; they're never handed to us.") + end + end +end + +function Declined(quest, questGiver, player) +end + +function step1_toxicCrawlers(quest, questGiver, player) + if player ~= nil then + GiveQuestItem(quest, player, "I've cleared out many spiders and as a result found an unusual item.", 10317) + end + + UpdateQuestStepDescription(quest, 1, "I've cleared out many spiders and as a result found an unusual item.") + UpdateQuestTaskGroupDescription(quest, 1, "I've cleared out many spiders and as a result found an unusual item.") + -- SPAWN Parchment Scrap (right-click this item to Examine it), spawn this in the Quest Reward window + -- Description = I've cleared out many spiders and as a result found an unusual item. + + -- The edges of the parchment are torn and jagged as though ripped from a much larger document. + -- Examine the parchment (). + -- Put the parchment away. + -- update quest step + -- You can barely make out some writing on this scrap: "The toxic crawlers will be useful to cover our ... the + -- totem ..." The reference to a totem is puzzling. Why would someone want a totem covered in spiders? There must + -- be more pieces of this parchment amongst the toxic crawlers. + -- Put the parchment away. + + AddQuestStepChat(quest, 2, "I need to examine the parchment scrap to see if I can decipher anything.", 1, "There is more to be learned in the Tainted Forest.", 0, 2530092) + AddQuestStepCompleteAction(quest, 2, "step2_complete_examinedParchment") +end + +function step2_complete_examinedParchment(quest, questGiver, player) + UpdateQuestStepDescription(quest, 2, "I've examined the scrap.") + AddQuestStepKill(quest, 3, "While hard to decipher, the writings indicate that there is a problem with the toxic crawlers. I'll try to find another piece of parchment on one of these spiders though it may take me a while to find one with more of this parchment.", 1, 25, "There is more to be learned in the Tainted Forest.", 2180, 2530084) + AddQuestStepCompleteAction(quest, 3, "step3_complete_toxicCrawlers") +end + +function step3_complete_toxicCrawlers(quest, questGiver, player) + UpdateQuestStepDescription(quest, 3, "I've found another piece of parchment.") + -- The edges of the parchment are torn and jagged as though ripped from a much larger document. + -- Put together the parchment pieces. (). + -- Put the parchment away. + -- You line up the parchment pieces. The newest piece adds enough new words that you can read: "The toxic crawlers + -- will be useful to cover our tracks. Leave the totem in the eastern rocks..." Apparently Deianeira's concern + -- about the spiders is well-placed, though not for the reasons she thinks. I must find more of this parchment + -- to learn what this totem means. + -- Roll the parchment up. () + -- update quest + -- You carefully roll the parchment and stow it away. + -- Put the parchment away. + AddQuestStepChat(quest, 4, "I need to put the parchment pieces together to learn more about the toxic crawlers.", 1, "There is more to be learned in the Tainted Forest.", 0, 2530092) + AddQuestStepCompleteAction(quest, 4, "step4_complete_putParchmentTogether") +end + +function step4_complete_putParchmentTogether(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 4, "I've put the parchment together.") + + AddQuestStepLocation(Quest, 5, "According to the parchment, there is something hidden in the rockpile at the eastern end of the Tainted Forest. I'll need to take a closer look.", 15, "There is more to be learned in the Tainted Forest.", 0, 92, 1, 122) + AddQuestStepCompleteAction(Quest, 5, "step5_complete_foundParchment") + + -- remove the old parchment + -- summon Parchment Scrap + RemoveItem(Player, 10317) + SummonItem(Player, 10313, 0) +end + +function step5_complete_foundParchment(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 5, "I've located the rest of the parchment.") + --spawn "a piece of parchment harvestable" + --only let Player see it + --set harvestable to "Parchment Scrap" the one that looks like it was unrolled. + SpawnMob(GetZone(Player), 2530194, true, 92.6042, 1.6355, 123.73, 290) + AddQuestStepObtainItem(Quest, 6, "Now I need to gather the parchment pieces from the spider's nest. Hopefully they are from the parchment I'm trying to put together!", 1, 100, "There is more to be learned in the Tainted Forest.", 75, 10315) + AddQuestStepCompleteAction(Quest, 6, "step6_complete_harvestedParchment") +end + +function step6_complete_harvestedParchment(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 6, "I've gathered the pieces of parchment from the spider's nest.") + -- The edges of the parchment are torn and jagged as though ripped from a much larger document. + -- Piece together the parchment (). + -- Put the parchment away. + -- The last bit of parchment was caught on the web near the large pile of rocks. You piece it together and read: + -- "The toxic crawlers will be useful to cover our tracks. Leave the totem in the eastern rocks beneath Direspike." + -- Direspike must be a tainted spider with greater power. You realize you may have to flush him from his lair + -- by picking off the nearby spiders until he appears to meet your challenge. + -- Roll the parchment up. () + -- update quest + -- You carefully roll the parchment and stow it away. + -- Put the parchment away. + AddQuestStepChat(Quest, 7, "I need to put together all the pieces of the parchment.", 1, "There is more to be learned in the Tainted Forest.", 0, 2530092) + AddQuestStepCompleteAction(Quest, 7, "step7_complete_putParchmentTogether") +end + +function step7_complete_putParchmentTogether(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 7, "I've pieced the parchment together.") + + -- remove old parchment + RemoveItem(Player, 10313) + RemoveItem(Player, 10315) + -- spawn direspike when player gets close to his loc + SpawnMob(GetZone(Player), 2530106, false, 89.7797, 4.85852, 124.289, 300) + AddQuestStepKill(Quest, 8, "The parchment refers to Direspike. I must slay Direspike, the spider that must be at the root of this problem.", 1, 100, "There is more to be learned in the Tainted Forest.", 1859, 2530106) + AddQuestStepCompleteAction(Quest, 8, "step8_complete_killedDireSpike") +end + +function step8_complete_killedDireSpike(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 8, "I've slain Direspike and in the process destroyed the tainted totem.") + AddQuestStepChat(Quest, 9, "I should tell Deianeira that the toxic crawlers are not the source of the taint.", 1, "There is more to be learned in the Tainted Forest.", 0, 2530107) + AddQuestStepCompleteAction(Quest, 9, "completed") +end + +function completed(quest, questGiver, player) + UpdateQuestDescription(quest, "While killing toxic crawlers to test Deianeira's theory on poison, I found a piece of parchment hinting that someone had influenced the toxic crawlers by hiding some kind of totem in their main nest. After I removed Direspike from the lair, the totem shattered on its own. The poison theory seems shattered as well.") + GiveQuestReward(quest, player) +end + +function Reload(Quest, QuestGiver, Player, Step) + if Step == 1 then + step1_toxicCrawlers(Quest, QuestGiver, Player) + elseif Step == 2 then + step2_complete_examinedParchment(Quest, QuestGiver, Player) + elseif Step == 3 then + step3_complete_toxicCrawlers(Quest, QuestGiver, Player) + elseif Step == 4 then + step4_complete_putParchmentTogether(Quest, QuestGiver, Player) + elseif Step == 5 then + step5_complete_foundParchment(Quest, QuestGiver, Player) + elseif Step == 6 then + step6_complete_harvestedParchment(Quest, QuestGiver, Player) + elseif Step == 7 then + step7_complete_putParchmentTogether(Quest, QuestGiver, Player) + elseif Step == 8 then + step8_complete_killedDireSpike(Quest, QuestGiver, Player) + end +end diff --git a/server/Quests/QueensColony/the_art_of_combat.lua b/server/Quests/QueensColony/the_art_of_combat.lua new file mode 100644 index 000000000..ebeef477e --- /dev/null +++ b/server/Quests/QueensColony/the_art_of_combat.lua @@ -0,0 +1,73 @@ +--[[ + Script Name : Quests/QueensColony/the_art_of_combat.lua + Script Author : Zcoretri + Script Date : 2015.07.30 + Script Purpose : Handles the quest, "The Art of Combat" + + Zone : The Queens Colony + Quest Giver: Murrar Shar + Preceded by: None + Followed by: A Presence of Evil +--]] + +function Init(Quest) + -- Qeynosian Cloth Mitts + -- Qeynosian Leather Gloves + -- Qeynosian Studded Gloves + -- Qeynosian Plated Gauntlets + AddQuestStepChat(Quest, 1, "I need to speak to Trainer Hayl McGuinness at the Training Grounds northwest of Murrar Shar.", 1, "I need to learn about combat from Trainer Hayl McGuinness.", 0, 2530070) + AddQuestStepCompleteAction(Quest, 1, "step1_complete_talkToHayl") +end + +function Accepted(Quest, QuestGiver, Player) + if QuestGiver ~= nil then + if GetDistance(Player, QuestGiver) < 30 then + FaceTarget(QuestGiver, Player) + conversation = CreateConversation() + AddConversationOption(conversation, "Thanks.") + StartConversation(conversation, QuestGiver, Player, "Goodluck.") + end + end +end + +function Declined(Quest, QuestGiver, Player) + +end + +function step1_complete_talkToHayl(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 1, "I have spoken with Hayl McGuinness.") + + AddQuestStepKill(Quest, 2, "I need to defeat a sparring partner in combat. There are several sparring partners just north of Trainer Hayl McGuinness.", 1, 100, "I need to learn about combat from Trainer Hayl McGuinness.", 0, 2530000, 2530001, 2530002) + AddQuestStepCompleteAction(Quest, 2, "step2_complete_killedSparringPartner") +end + +function step2_complete_killedSparringPartner(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 2, "I have defeated a sparring partner in combat.") + + AddQuestStepChat(Quest, 3, "I should speak with Trainer Hayl McGuinness and tell him of my victory.", 1, "I need to learn about combat from Trainer Hayl McGuinness.", 0, 2530070) + AddQuestStepCompleteAction(Quest, 3, "step3_complete_talkToHayl") +end + +function step3_complete_talkToHayl(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 3, "I have spoken to Sergeant Hayl McGuinness.") + UpdateQuestTaskGroupDescription(Quest, 1, "I have won a match against one of the sparring partners.") + + AddQuestStepChat(Quest, 4, "I should tell Murrar that my training was successful.", 1, "I should return to Murrar Shar to show that I am ready for my next challenege.", 0, 2530076) + AddQuestStepCompleteAction(Quest, 4, "step4_complete_talkToMurrar") +end + +function step4_complete_talkToMurrar(Quest, QuestGiver, Player) + UpdateQuestDescription(Quest, "I have learned some of the basics of combat from Trainer Hayl McGuinness at the Queen's Colony. Hopefully this knowledge helps me serve Qeynos and uncover the trouble here.") + GiveQuestReward(Quest, Player) +end + +function Reload(Quest, QuestGiver, Player, Step) + if Step == 1 then + step1_complete_talkToHayl(Quest, QuestGiver, Player) + elseif Step == 2 then + step2_complete_killedSparringPartner(Quest, QuestGiver, Player) + elseif Step == 3 then + step3_complete_talkToHayl(Quest, QuestGiver, Player) + end +end + diff --git a/server/Quests/QueensColony/the_source_of_evil.lua b/server/Quests/QueensColony/the_source_of_evil.lua new file mode 100644 index 000000000..7a21bf7fa --- /dev/null +++ b/server/Quests/QueensColony/the_source_of_evil.lua @@ -0,0 +1,115 @@ +--[[ + Script Name : Quests/QueensColony/the_source_of_evil.lua + Script Author : Zcoretri + Script Date : 2015.09.05 + Script Purpose : Handles the quest "The Source of Evil" + + Zone : Queen's Colony + Quest Giver: Cleric Mara'Vaen + Preceded by: Joining the Forward Ranks (joining_the_forward_ranks.lua) + Followed by: None +--]] + +function Init(Quest) + AddQuestStepChat(Quest, 1, "Seek Sorcerer Oofala. His camp is set up north past Dead Canyon and then east down the wall of the Abandoned Village.", 1, "Head into and around the Abandoned Village in search of Sorcerer Oofala, protector of the scout camp set up there.", 0, 2530026) + AddQuestStepCompleteAction(Quest, 1, "step1_complete_talkedToSorcerer") +end + +function Accepted(Quest, QuestGiver, Player) + if QuestGiver ~= nil then + if GetDistance(Player, QuestGiver) < 30 then + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + AddConversationOption(conversation, "Thanks") + StartConversation(conversation, QuestGiver, Player, "Bless you, child.") + end + end +end + +function Declined(Quest, QuestGiver, Player) + +end + +function step1_complete_talkedToSorcerer(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 1, "I spoke with Sorcerer Oofala.") + UpdateQuestTaskGroupDescription(Quest, 1, "I spoke with Sorcerer Oofala.") + AddQuestStepKill(Quest, 2, "Seek and destroy the evil totems scattered around the Abandoned Village.", 3, 100, "New information gained from goblins that survived has revealed that the goblins were victims of the evil themselves. Evil totems sprang up around their village and spread a fog that devoured all that it consumed. I need to seek and destroy the evil totems.", 861, 2530153) + AddQuestStepCompleteAction(Quest, 2, "step2_complete_killedTotems") +end + +function step2_complete_killedTotems(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 2, "I was able to find and destroy the evil totems.") + UpdateQuestTaskGroupDescription(Quest, 2, "I was able to find and destroy the evil totems.") + AddQuestStepChat(Quest, 3, "Return to Sorcerer Oofala.", 1, "I destroyed the totems and I should return to Sorcerer Oofala.", 0, 2530026) + AddQuestStepCompleteAction(Quest, 3, "step3_complete_talkedToSorcerer") +end + +function step3_complete_talkedToSorcerer(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 3, "I spoke with Sorcerer Oofala.") + UpdateQuestTaskGroupDescription(Quest, 3, "I spoke with Sorcerer Oofala.") + --Spawn(GetZone(Player), 2530142, false, GetX(Player), GetY(Player), GetZ(Player)) + --Spawn the Dark Blademaster once you approach his location only if the player has a quest (zonescript) + --x = 154.66 y = 1.38397 z = -178.158 heading = 349.984 + AddQuestStepKill(Quest, 4, "Kill the Dark Blademaster near the fog on Sapswill Hill.", 1, 100, "Oofala explained that by removing the totems, the evil has been disturbed and produced a champion to fight back. I will need to confront the Dark Blademaster. He has emerged from a tent on Sapswill Hill.", 611, 2530032) + AddQuestStepCompleteAction(Quest, 4, "step4_complete_killedBlademaster") +end + +function step4_complete_killedBlademaster(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 4, "I have slain the Dark Blademaster.") + UpdateQuestTaskGroupDescription(Quest, 4, "I have slain the Dark Blademaster.") + AddQuestStepChat(Quest, 5, "Return the news of my victory to Sorcerer Oofala.", 1, "I have slain the Dark Blademaster and should return to Sorcerer Oofala. I should mention the Freeport insignia that the Dark Blademaster has in his belongings.", 0, 2530026) + AddQuestStepCompleteAction(Quest, 5, "step5_complete_talkedToSorcerer") +end + +function step5_complete_talkedToSorcerer(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 5, "I returned to sorcerer Oofala.") + UpdateQuestTaskGroupDescription(Quest, 5, "I returned to sorcerer Oofala with the news of my victory and of the insignia that the Blademaster dropped.") + AddQuestStepChat(Quest, 6, "Seek High Chieftan Grexx in the tree house east of the Abandoned Village.", 1, "Sorcerer Oofala is disturbed by the news that Freeport is involved. I need to seek out High Chieftan Grexx at his tree house to the east of the Abandoned Village.", 0, 2530038) + AddQuestStepCompleteAction(Quest, 6, "step6_complete_talkedToGrexx") +end + +function step6_complete_talkedToGrexx(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 6, "I have slain the Dark Blademaster.") + UpdateQuestTaskGroupDescription(Quest, 6, "I have slain the Dark Blademaster.") + AddQuestStepKill(Quest, 7, "Enter the cave to the northeast of the tree house and deal with the source of evil.", 1, 100, "High Chieftan Grexx has pointed out that he believes the source of evil to emanate from a cave to the northeast of his tree house. I need to head inside and confront the evil.", 611, 2540005) + AddQuestStepCompleteAction(Quest, 7, "step7_complete_killedVith") +end + +function step7_complete_killedVith(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 7, "I have slain the necromancer.") + UpdateQuestTaskGroupDescription(Quest, 7, "I have slain the necromancer.") + AddQuestStepChat(Quest, 8, "Return to High Chieftan Grexx.", 1, "I should return to High Chieftan Grexx and let him know that the island is saved.", 0, 2530038) + AddQuestStepCompleteAction(Quest, 8, "step8_complete_talkedToGrexx") +end + +function step8_complete_talkedToGrexx(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 8, "I returned to High Chieftain Grexx.") + UpdateQuestTaskGroupDescription(Quest, 8, "I returned to High Chieftain Grexx.") + AddQuestStepChat(Quest, 9, "Return to Murrar Shar.", 1, "I should now return to Murrar Shar with news about my victory against the necromancer.", 0, 2530076) + AddQuestStepCompleteAction(Quest, 9, "questComplete") +end + +function questComplete(Quest, QuestGiver, Player) + UpdateQuestDescription(Quest, "I was able to help Sorcerer Oofala and destroyed the totems that had spread the evil into the village. Removing the totems brought forth an evil champion that I took care of as well. The Dark Blademaster had an insignia of the Freeport Militia in his belongings. Sorcerer Oofala then sent me to try and help High Chieftan Grexx at the nearby tree house as time was pressing to try and save them. High Chieftan Grexx sent me into the nearby cave to take care of the necromancer that was tainting the island. I took care of the necromancer and returned to both High Chieftan Grexx and Murrar Shar for their respective rewards.") + GiveQuestReward(Quest, Player) +end + +function Reload(Quest, QuestGiver, Player, Step) + if Step == 1 then + step1_complete_talkedToSorcerer(Quest, QuestGiver, Player) + elseif Step == 2 then + step2_complete_killedTotems(Quest, QuestGiver, Player) + elseif Step == 3 then + step3_complete_talkedToSorcerer(Quest, QuestGiver, Player) + elseif Step == 4 then + step4_complete_killedBlademaster(Quest, QuestGiver, Player) + elseif Step == 5 then + step5_complete_talkedToSorcerer(Quest, QuestGiver, Player) + elseif Step == 6 then + step6_complete_talkedToGrexx(Quest, QuestGiver, Player) + elseif Step == 7 then + step7_complete_killedVith(Quest, QuestGiver, Player) + elseif Step == 8 then + step8_complete_talkedToGrexx(Quest, QuestGiver, Player) + end +end \ No newline at end of file diff --git a/server/Quests/Ruins/anger_fang.lua b/server/Quests/Ruins/anger_fang.lua new file mode 100644 index 000000000..e91b6cc71 --- /dev/null +++ b/server/Quests/Ruins/anger_fang.lua @@ -0,0 +1,47 @@ +--[[ + Script Name : Quests/Ruins/anger_fang.lua + Script Purpose : Handles the quest, "Anger-Fang" + Script Author : Scatman + Script Date : 2009.07.28 + + Zone : The Ruins + Quest Giver: Mardyp Prunt + Preceded by: None + Followed by: None +--]] + +function Init(Quest) + AddQuestStepKill(Quest, 1, "I need 20 orc fangs.", 20, 100, "Mardyp would like me to collect some orc fangs for him.", 102, 1270012, 1270153, 1270055, 1270013, 1270131, 1270035, 1270045, 1270095, 1270044, 1270010, 1270130, 1270027, 1270039, 1270022, 1270019, 1270087, 1270050, 1270066, 1270053, 1270047, 1270096, 1270067, 1270058, 1270068, 1270046, 1270057, 1270037, 1270056, 1270093, 1270170, 1270161, 1270114, 1270112, 1270082, 1270063, 1270081, 1270117, 1270118, 1270049, 1270048, 1270059, 1270041, 1270051, 1270052, 1270116, 1270113, 1270133, 1270115, 1270119, 1270120, 1270181) + AddQuestStepCompleteAction(Quest, 1, "Step1_Complete_KilledOrcs") +end + +function Accepted(Quest, QuestGiver, Player) + FaceTarget(QuestGiver, Player) + conversation = CreateConversation() + + AddConversationOption(conversation, "I'll go get your fangs.") + StartConversation(conversation, QuestGiver, Player, "Good! Mardyp go back to crushing.") +end + +function Declined(Quest, QuestGiver, Player) +end + +function Step1_Complete_KilledOrcs(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 1, "I have collected the orc fangs.") + + AddQuestStepChat(Quest, 2, "I need to bring the orc fangs to Mardyp.", 1, "Mardyp would like me to collect some orc fangs for him.", 0, 1270016) + AddQuestStepCompleteAction(Quest, 2, "Quest_Complete") +end + +function Quest_Complete(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 2, "I have given Mardyp the fangs he asked for.") + UpdateQuestTaskGroupDescription(Quest, 1, "I collected the orc fangs for Mardyp.") + GiveQuestReward(Quest, Player) + UpdateQuestDescription(Quest, "I have gotten the orc fangs for Mardyp. He was pleased.") +end + +function Reload(Quest, QuestGiver, Player, Step) + if Step == 1 then + Step1_Complete_KilledOrcs(Quest, QuestGiver, Player) + end +end \ No newline at end of file diff --git a/server/Quests/Ruins/file_a_final_report.lua b/server/Quests/Ruins/file_a_final_report.lua new file mode 100644 index 000000000..64a6ebd15 --- /dev/null +++ b/server/Quests/Ruins/file_a_final_report.lua @@ -0,0 +1,38 @@ +--[[ + Script Name : Quests/Ruins/file_a_final_report.lua + Script Purpose : Handles the quest, "File a Final Report" + Script Author : Scatman + Script Date : 2009.08.20 + + Zone : The Ruins + Quest Giver: Captain Arellius + Preceded by: Identifying the Lonetusk Ally (identifying_the_lonetusk_ally.lua) + Followed by: None +--]] + +function Init(Quest) + AddQuestStepChat(Quest, 1, "I should return to the docks and tell Captain Arellius what I have learned about the Rujarkian orcs.", 1, "I must report to Captain Arellius on the docks of the Ruins.", 0, 1270003) + AddQuestStepCompleteAction(Quest, 1, "Quest_Complete") +end + +function Accepted(Quest, QuestGiver, Player) + FaceTarget(QuestGiver, Player) + conversation = CreateConversation() + + PlayFlavor(QuestGiver, "voiceover/english/tutorial_revamp/lieutenant_imperidus/fprt_adv04_ruins/revamp/lieutenant_imperidus022.mp3", "", "", 3956036992, 4003496180, Player) + AddConversationOption(conversation, "Thank you, lieutenant. You have earned mine as well.") + StartConversation(conversation, QuestGiver, Player, "Report back to the captain. She will take word of this discovery back to our superiors in the Militia. This is extremely valuable information, my friend. You just might have given Freeport the edge it needs to ensure its safety. You have earned my respect.") +end + +function Declined(Quest, QuestGiver, Player) +end + +function Quest_Complete(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 1, "I have informed the captain that the Rujarkians are supplying the orcs in the Ruins with weapons and armor.") + UpdateQuestTaskGroupDescription(Quest, 1, "I have reported back to Captain Arellius.") + UpdateQuestDescription(Quest, "I informed Captain Arellius that the Rujarkian orcs are supplying the Brokentusk and Lonetusk orcs in the Ruins with improved weapons and armor. The captain was very pleased with my work and rewarded me well. I will now read the note she gave me to lead me to my next adventure.") + GiveQuestReward(Quest, Player) +end + +function Reload(Quest, QuestGiver, Player, Step) +end \ No newline at end of file diff --git a/server/Quests/Ruins/identifying_the_lonetusk_ally.lua b/server/Quests/Ruins/identifying_the_lonetusk_ally.lua new file mode 100644 index 000000000..b52d25a00 --- /dev/null +++ b/server/Quests/Ruins/identifying_the_lonetusk_ally.lua @@ -0,0 +1,83 @@ +--[[ + Script Name : Quests/Ruins/identifying_the_lonetusk_ally.lua + Script Purpose : Handles the quest, \\\"Identifying the Lonetusk Ally\\\" + Script Author : Scatman + Script Date : 2009.08.20 + + Zone : The Ruins + Quest Giver: Captain Arellius + Preceded by: Vengeance for Shoreside (vengeance_for_shoreside.lua) + Followed by: File a Final Report (file_a_final_report.lua) +--]] + +function Init(Quest) + AddQuestStepChat(Quest, 1, "I must interrogate the orc prisoner to find out the identity of the Lonetusk weapon supplier.", 1, "I must interrogate the orc prisoner to find out the identity of the Lonetusk\\\'s new benfactor.", 0, 1270104) + AddQuestStepCompleteAction(Quest, 1, "Step1_Complete_SpokeWithOrc") +end + +function Accepted(Quest, QuestGiver, Player) + FaceTarget(QuestGiver, Player) + conversation = CreateConversation() + + PlayFlavor(QuestGiver, "voiceover/english/tutorial_revamp/lieutenant_imperidus/fprt_adv04_ruins/revamp/lieutenant_imperidus018.mp3", "", "", 1717970804, 3719629105, Player) + AddConversationOption(conversation, "I'll return when I have the information you need, lieutenant.") + StartConversation(conversation, QuestGiver, Player, "I knew we could rely on you! Take any measures necessary to get the beast to talk. ANY measures... got it?") +end + +function Declined(Quest, QuestGiver, Player) +end + +function Step1_Complete_KilledSentries(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 1, "The prisoner didn't know who is supplying the weapons and armor, but told me of a hidden document that might.") + UpdateQuestTaskGroupDescription(Quest, 1, "I have questioned the orc prisoner and found out that the Lonetusk are hiding a document that may reveal the identity of their supplier.") + + AddQuestStepChat(Quest, 2, "I should tell the lieutenant that the orcs have a hidden document that may reveal the identity of their benefactor.", 1, "I must tell Lieutenant Imperidus what I found out from the prisoner.", 0, 1270070) + AddQuestStepCompleteAction(Quest, 2, "Step2_Complete_SpokeWithLieutenant") +end + +function Step2_Complete_SpokeWithLieutenant(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 2, "I told the lieutenant that the Lonetusk have some kind of letter from their mysterious benefactor") + UpdateQuestTaskGroupDescription(Quest, 2, "I have told Lieutenant Imperidus what I learned from the prisoner.") + + AddQuestStep(Quest, 3, "I must search for an underground bunker where the Lonetusk are hiding some kind of document.", 1, 100, "I must search underground areas in the Ruins for a secret document in the possession of the Lonetusk orcs.", 374, 5048) + AddQuestStepCompleteAction(Quest, 3, "Step3_Complete_FoundNote") +end + +function Step3_Complete_FoundNote(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 3, "I found an orcish document hidden in a chest in an underground bunker.") + UpdateQuestTaskGroupDescription(Quest, 3, "I have found the hidden orcish document. I should examine it and report back to Lieutenant Imperidus.") + + SendMessage(Player, "You search the strongbox and find a parchment with orcish writing. You place it in your inventory.") + SendPopUpMessage(Player, "You search the strongbox and find a parchment with orcish writing. You place it in your inventory.", 255, 255, 0) + -- an orcish parchment + if not HasItem(Player, 3393, 1) then + SummonItem(Player, 3393) + SendMessage(Player, "You receive [an orcish parchment].") + end + + AddQuestStepSpell(Quest, 4, "I should report back to the lieutenant.", 1, 100, "I should report back to Lieutenant Imperidus at the second Militia outpost and give her the document I found.", 0, 1270070) + AddQuestStepCompleteAction(Quest, 4, "Quest_Complete") +end + +function Quest_Complete(Quest, QuestGiver, Player) + -- an orcish parchment + while HasItem(Player, 3393, 1) do + RemoveItem(Player, 3393) + end + SendMessage(Player, "You give the parchment to Lieutenant Imperidus.") + SendPopUpMessage(Player, "You give the parchment to Lieutenant Imperidus.", 255, 255, 0) + UpdateQuestStepDescription(Quest, 4, "I have reported back to the lieutenant.") + UpdateQuestTaskGroupDescription(Quest, 4, "I have reported back to Lieutenant Imperidus and gave her the orcish document.") + UpdateQuestDescription(Quest, "I interrogated the orc prisoner and learned of a document the Lonetusk were guarding. I retrieved the document and returned it to Lieutenant Imperidus of the Freeport Militia, who determined that the Lonetusk and Brokentusk are being supplied by the Rujarkian orcs, a tribe operating out of the Clefts of Rujark in the Desert of Ro. This is important information that must be given to Captain Arellius at the docks.") + GiveQuestReward(Quest, Player) +end + +function Reload(Quest, QuestGiver, Player, Step) + if Step == 1 then + Step1_Complete_KilledSentries(Quest, QuestGiver, Player) + elseif Step == 2 then + Step2_Complete_SpokeWithLieutenant(Quest, QuestGiver, Player) + elseif Step == 3 then + Step3_Complete_FoundNote(Quest, QuestGiver, Player) + end +end \ No newline at end of file diff --git a/server/Quests/Ruins/knock_the_fight_out_of_em.lua b/server/Quests/Ruins/knock_the_fight_out_of_em.lua new file mode 100644 index 000000000..4c41ea10b --- /dev/null +++ b/server/Quests/Ruins/knock_the_fight_out_of_em.lua @@ -0,0 +1,97 @@ +--[[ + Script Name : Quests/Ruins/knock_the_fight_out_of_em.lua + Script Purpose : Handles the quest, "Knock the Fight Out of 'Em" + Script Author : Scatman + Script Date : 2009.08.18 + + Zone : The Ruins + Quest Giver: Captain Arellius + Preceded by: Stepping Up the Offense (stepping_up_the_offense.lua) + Followed by: Vengeance for Shoreside (vengeance_for_shoreside.lua) +--]] + +function Init(Quest) + AddQuestStepSpell(Quest, 1, "I should throw some dirt in the orcs' dinner pot.", 1, 100, "I must seek out the symbols that the orcs use to inspire themselves. Then I will defile these objects to crush their spirits.", 943, 5044) + AddQuestStepSpell(Quest, 2, "I must find and deface the statue of an orc knight.", 1, 100, "I must seek out the symbols that the orcs use to inspire themselves. Then I will defile these objects to crush their spirits.", 1214, 5045) + AddQuestStepSpell(Quest, 3, "I must find and deface one of the Lonetusk worship idols.", 1, 100, "I must seek out the symbols that the orcs use to inspire themselves. Then I will defile these objects to crush their spirits.", 1058, 5046) + AddQuestStepSpell(Quest, 4, "I should poke a hole in the orcs' wine cask.", 1, 100, "I must seek out the symbols that the orcs use to inspire themselves. Then I will defile these objects to crush their spirits.", 2284, 5047) + AddQuestStepCompleteAction(Quest, 1, "Step1_Complete_ThrewDirt") + AddQuestStepCompleteAction(Quest, 2, "Step2_Complete_DefacedStatue") + AddQuestStepCompleteAction(Quest, 3, "Step3_Complete_DefacedIdols") + AddQuestStepCompleteAction(Quest, 4, "Step4_Complete_PokedHole") +end + +function Accepted(Quest, QuestGiver, Player) + FaceTarget(QuestGiver, Player) + conversation = CreateConversation() + + PlayFlavor(QuestGiver, "voiceover/english/tutorial_revamp/lieutenant_imperidus/fprt_adv04_ruins/revamp/lieutenant_imperidus009.mp3", "", "", 3046376303, 2999823619, Player) + AddConversationOption(conversation, "Do you really think wrecking statues and ruining food is going to ensure victory?", "dlg_3_8") + AddConversationOption(conversation, "I'll get to it.") + StartConversation(conversation, QuestGiver, Player, "Our surest path to victory is to take the fight out of them. Go out there and face the Lonetusk, and deface any statues you see. Seek out their supplies of food and drink and spoil them. Without symbols of victory to inspire them and food in their bellies, their spirits will crumble and they will become easy pickings for us.") +end + +function Declined(Quest, QuestGiver, Player) +end + +function Step1_Complete_ThrewDirt(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 1, "I threw dirt in the orcs' dinner pot. Take that, orcs!") + SendMessage(Player, "You throw some dirt in the orc cooking pot.") + + if QuestIsComplete(Player, 286) then + Multiple_Steps_Complete(Player, QuestGiver, Player) + end +end + +function Step2_Complete_DefacedStatue(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 2, "I have defaced the statue of an orc knight.") + SendMessage(Player, "You draw a mustace on the face of the orc statue.") + + if QuestIsComplete(Player, 286) then + Multiple_Steps_Complete(Player, QuestGiver, Player) + end +end + +function Step3_Complete_DefacedIdols(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 3, "I have defaced an idol that the Lonetusk seem to worship.") + SendMessage(Player, "You draw crazy eyes and a beard on the orc idol.") + + if QuestIsComplete(Player, 286) then + Multiple_Steps_Complete(Player, QuestGiver, Player) + end +end + +function Step4_Complete_PokedHole(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 4, "I poked a hole in the orcs' wine cask. Now they'll be thirsty!") + SendMessage(Player, "You have poked a hole in the cask and watched the wine drain out.") + + if QuestIsComplete(Player, 286) then + Multiple_Steps_Complete(Player, QuestGiver, Player) + end +end + +function Multiple_Steps_Complete(Quest, QuestGiver, Player) + UpdateQuestTaskGroupDescription(Quest, 1, "I found and defaced many objects the orcs hold dear. Hopefully this takes the fight out of them.") + + AddQuestStep(Quest, 5, "I should report back to Lieutenant Imperidus.", 1, "Having defaced the orc artifacts, I should return to Lieutenant Imperidus at the second outpost.", 0, 1270070) + AddQuestStepCompleteAction(Quest, 5, "Quest_Complete") +end + +function Quest_Complete(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 5, "I have reported back to Lieutenant Imperidus.") + UpdateQuestTaskGroupDescription(Quest, 2, "I have reported back to Lieutenant Imperidus.") + UpdateQuestDescription(Quest, "I followed the orders of Lieutenant Imperidus, defacing statues the Lonetusk orcs use to inspire their troops. I also threw dirt into their food and drained their supply of wine. Hopefully the lieutenant's plan will work and my actions will have takens some of the fight out of the orcs.") + GiveQuestReward(Quest, Player) +end + +function Reload(Quest, QuestGiver, Player, Step) + if Step == 1 then + Step1_Complete_ThrewDirt(Quest, QuestGiver, Player) + elseif Step == 2 then + Step2_Complete_DefacedStatue(Quest, QuestGiver, Player) + elseif Step == 3 then + Step3_Complete_DefacedIdols(Quest, QuestGiver, Player) + elseif Step == 4 then + Step4_Complete_PokedHole(Quest, QuestGiver, Player) + end +end \ No newline at end of file diff --git a/server/Quests/Ruins/pawns_in_the_game.lua b/server/Quests/Ruins/pawns_in_the_game.lua new file mode 100644 index 000000000..1e02751fd --- /dev/null +++ b/server/Quests/Ruins/pawns_in_the_game.lua @@ -0,0 +1,49 @@ +--[[ + Script Name : Quests/Ruins/pawns_in_the_game.lua + Script Purpose : Handles the quest, "Pawns in the Game" + Script Author : Scatman + Script Date : 2009.07.28 + + Zone : The Ruins + Quest Giver: Captain Arellius + Preceded by: Reporting for Duty (reporting_for_duty.lua) + Followed by: Pounding the Enemy (pounding_the_enemy.lua) +--]] + +function Init(Quest) + AddQuestStepKill(Quest, 1, "I must defeat ten Brokentusk pawns to prove my value to the Militia.", 10, 100, "I must aid Freeport by defeating the Brokentusk pawns.", 2489, 1270130, 1270027, 1270039, 1270022, 1270019, 1270087) + AddQuestStepCompleteAction(Quest, 1, "Step1_Complete_KilledOrcs") +end + +function Accepted(Quest, QuestGiver, Player) + FaceTarget(QuestGiver, Player) + conversation = CreateConversation() + + PlayFlavor(QuestGiver, "voiceover/english/tutorial_revamp/lieutenant_argosian/fprt_adv04_ruins/revamp/lieutenant_argosian009b.mp3", "", "", 3351588566, 3135177671, Player) + AddConversationOption(conversation, "I will do so.") + StartConversation(conversation, QuestGiver, Player, "Get to work, citizen. You have your orders, now carry them out.") +end + +function Declined(Quest, QuestGiver, Player) +end + +function Step1_Complete_KilledOrcs(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 1, "I defeated 10 Brokentusk pawns and proved my worth.") + UpdateQuestTaskGroupDescription(Quest, 1, "I crushed the Brokentusk pawns as ordered.") + + AddQuestStepChat(Quest, 2, "I should report back to Lieutenant Argosian at the first outpost.", 1, "I should return to the lieutenant and tell him of my victory.", 0, 1270031) + AddQuestStepCompleteAction(Quest, 2, "Quest_Complete") +end + +function Quest_Complete(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 2, "I have reported back to Lieutenant Argosian.") + UpdateQuestTaskGroupDescription(Quest, 2, "I have returned to the lieutenant.") + GiveQuestReward(Quest, Player) + UpdateQuestDescription(Quest, "Following the orders of Lieutenant Argosian, I defeated a number of the Brokentusk pawns. They were relatively easy prey, so I will ask Argosian for a more challenging assignment.") +end + +function Reload(Quest, QuestGiver, Player, Step) + if Step == 1 then + Step1_Complete_KilledOrcs(Quest, QuestGiver, Player) + end +end \ No newline at end of file diff --git a/server/Quests/Ruins/pounding_the_enemy.lua b/server/Quests/Ruins/pounding_the_enemy.lua new file mode 100644 index 000000000..0e880117b --- /dev/null +++ b/server/Quests/Ruins/pounding_the_enemy.lua @@ -0,0 +1,80 @@ +--[[ + Script Name : Quests/Ruins/pounding_the_enemy.lua + Script Purpose : Handles the quest, "Pounding the Enemy" + Script Author : Scatman + Script Date : 2009.07.28 + + Zone : The Ruins + Quest Giver: Lieutenant Argosian + Preceded by: Pawns in the Game (pawns_in_the_game.lua) + Followed by: Prophet and Loss (prophet_and_loss.lua) +--]] + +function Init(Quest) + AddQuestStepKill(Quest, 1, "I must defeat five Brokentusk guards.", 5, 100, "I have been ordered to defeat the Brokentusk orcs and defend the vagrant squatters.", 2489, 1270035, 1270045, 1270095, 1270044) + AddQuestStepKill(Quest, 2, "I must defeat five Brokentusk warriors.", 5, 100, "I have been ordered to defeat the Brokentusk orcs and defend the vagrant squatters.", 2489, 1270037, 1270056) + AddQuestStepKill(Quest, 3, "I must defend the vagrants by slaying their overseer.", 1, 100, "I have been ordered to defeat the Brokentusk orcs and defend the vagrant squatters.", 2489, 1270010) + AddQuestStepCompleteAction(Quest, 1, "Step1_Complete_KilledGuards") + AddQuestStepCompleteAction(Quest, 2, "Step2_Complete_KilledWarriors") + AddQuestStepCompleteAction(Quest, 3, "Step3_Complete_KilledOverseer") +end + +function Accepted(Quest, QuestGiver, Player) + FaceTarget(QuestGiver, Player) + conversation = CreateConversation() + + PlayFlavor(QuestGiver, "voiceover/english/tutorial_revamp/lieutenant_argosian/fprt_adv04_ruins/revamp/lieutenant_argosian015b.mp3", "", "", 102436079, 1387861460, Player) + AddConversationOption(conversation, "I will.") + StartConversation(conversation, QuestGiver, Player, "I knew I could count on you. Return to me when the orcs have paid for their crimes.") +end + +function Declined(Quest, QuestGiver, Player) +end + +function Step1_Complete_KilledGuards(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 1, "I have defeated five Brokentusk guards") + + if QuestIsComplete(Player, 264) then + KilledAllOrcs(Quest, QuestGiver, Player) + end +end + +function Step2_Complete_KilledWarriors(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 2, "I have defeated five Brokentusk warriors.") + + if QuestIsComplete(Player, 264) then + KilledAllOrcs(Quest, QuestGiver, Player) + end +end + +function Step3_Complete_KilledOverseer(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 3, "I have slain the orc overseer.") + + if QuestIsComplete(Player, 264) then + KilledAllOrcs(Quest, QuestGiver, Player) + end +end + +function KilledAllOrcs(Quest, QuestGiver, Player) + UpdateQuestTaskGroupDescription(Quest, 1, "I have defeated the orcs, keeping the vagrants safe for now.") + + AddQuestStepChat(Quest, 4, "I must report back to Lieutenant Argosian.", 1, "I should return to the lieutenant and report that the vagrants are safe for now.", 0, 1270031) + AddQuestStepCompleteAction(Quest, 4, "Quest_Complete") +end + +function Quest_Complete(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 4, "I have reported back to Lieutenant Argosian.") + UpdateQuestTaskGroupDescription(Quest, 2, "I have returned to Lieutenant Argosian.") + GiveQuestReward(Quest, Player) + UpdateQuestDescription(Quest, "I defeated a variety of Brokentusk orcs and kept the squatters safe in the Ruins. The threat is far from over, however.") +end + +function Reload(Quest, QuestGiver, Player, Step) + if Step == 1 then + Step1_Complete_KilledGuards(Quest, QuestGiver, Player) + elseif Step == 2 then + Step2_Complete_KilledWarriors(Quest, QuestGiver, Player) + elseif Step == 3 then + Step3_Complete_KilledOverseer(Quest, QuestGiver, Player) + end +end \ No newline at end of file diff --git a/server/Quests/Ruins/prophet_and_loss.lua b/server/Quests/Ruins/prophet_and_loss.lua new file mode 100644 index 000000000..372883ef4 --- /dev/null +++ b/server/Quests/Ruins/prophet_and_loss.lua @@ -0,0 +1,80 @@ +--[[ + Script Name : Quests/Ruins/Prophet and Loss + Script Purpose : Handles the quest, "prophet_and_loss.lua" + Script Author : Scatman + Script Date : 2009.08.02 + + Zone : The Ruins + Quest Giver: Lieutenant Argosian + Preceded by: Pounding the Enemy (pounding_the_enemy.lua) + Followed by: Requesting Further Orders (requesting_further_orders.lua) +--]] + +function Init(Quest) + AddQuestStepLocation(Quest, 1, "I must find and examine an old shrine guarded by Brokentusk prophets.", 20, "I should search for an old shrine guarded by prophets past the Brokentusks north of the docks. Then I should eliminate the orcs guarding it.", 1215, -67, 0, 65) + AddQuestStepKill(Quest, 2, "I must defeat four Brokentusk warriors guarding the shrine.", 4, 100, "I should search for an old shrine guarded by prophets past the Brokentusks north of the docks. Then I should eliminate the orcs guarding it.", 2489, 1270037, 1270056) + AddQuestStepKill(Quest, 3, "I must defeat four prophets around the shrine to see if they draw power from it.", 4, 100, "I should search for an old shrine guarded by prophets past the Brokentusks north of the docks. Then I should eliminate the orcs guarding it.", 2489, 1270053, 1270047) + AddQuestStepCompleteAction(Quest, 1, "Step1_Complete_ExaminedShrine") + AddQuestStepCompleteAction(Quest, 2, "Step2_Complete_KilledWarriors") + AddQuestStepCompleteAction(Quest, 3, "Step3_Complete_KilledProphets") +end + +function Accepted(Quest, QuestGiver, Player) + FaceTarget(QuestGiver, Player) + conversation = CreateConversation() + + PlayFlavor(QuestGiver, "voiceover/english/tutorial_revamp/lieutenant_argosian/fprt_adv04_ruins/revamp/lieutenant_argosian022b.mp3", "", "", 3696168160, 1150705872, Player) + AddConversationOption(conversation, "Yes, sir.") + StartConversation(conversation, QuestGiver, Player, "Go now, and report back when your duty is done.") +end + +function Declined(Quest, QuestGiver, Player) +end + +function Step1_Complete_ExaminedShrine(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 1, "I found the old shrine, which seems to be a relic of Shoreside.") + + if QuestIsComplete(Player, 264) then + KilledAllOrcs(Quest, QuestGiver, Player) + end +end + +function Step2_Complete_KilledWarriors(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 2, "I have defeated four Brokentusk warriors guarding the old shrine.") + + if QuestIsComplete(Player, 264) then + KilledAllOrcs(Quest, QuestGiver, Player) + end +end + +function Step3_Complete_KilledProphets(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 3, "I have defeated four Brokentusk prophets, but they don't seem to gain any strength from this shrine.") + + if QuestIsComplete(Player, 264) then + KilledAllOrcs(Quest, QuestGiver, Player) + end +end + +function KilledAllOrcs(Quest, QuestGiver, Player) + UpdateQuestTaskGroupDescription(Quest, 1, "I found the shrine and defeated the orcs guarding it.") + + AddQuestStepChat(Quest, 4, "I must report back to Lieutenant Argosian with news on the shrine.", 1, "I should report back to the lieutenant.", 0, 1270031) + AddQuestStepCompleteAction(Quest, 4, "Quest_Complete") +end + +function Quest_Complete(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 4, "I have informed the lieutenant that I found the shrine.") + UpdateQuestTaskGroupDescription(Quest, 2, "I reported back to the lieutenant.") + GiveQuestReward(Quest, Player) + UpdateQuestDescription(Quest, "I found the remains of an old shrine in the Ruins, but it does not seem to be giving any divine strength to the orcs. In fact, it seems to be a remnant of the lost community of Shoreside, which is what this area used to be called. I have reported back to Lieutenant Argosian of the Freeport Militia and told him what I found.") +end + +function Reload(Quest, QuestGiver, Player, Step) + if Step == 1 then + Step1_Complete_ExaminedShrine(Quest, QuestGiver, Player) + elseif Step == 2 then + Step2_Complete_KilledWarriors(Quest, QuestGiver, Player) + elseif Step == 3 then + Step3_Complete_KilledProphets(Quest, QuestGiver, Player) + end +end \ No newline at end of file diff --git a/server/Quests/Ruins/reporting_for_duty.lua b/server/Quests/Ruins/reporting_for_duty.lua new file mode 100644 index 000000000..6c3d9d940 --- /dev/null +++ b/server/Quests/Ruins/reporting_for_duty.lua @@ -0,0 +1,46 @@ +--[[ + Script Name : Quests/Ruins/reporting_for_duty.lua + Script Purpose : Handles the quest, "Driving Back the Dervish" + Script Author : Scatman + Script Date : 2009.07.28 + + Zone : The Ruins + Quest Giver: Captain Arellius + Preceded by: None + Followed by: Pawns in the Game (pawns_in_the_game.lua) +--]] + +function Init(Quest) + AddQuestStepChat(Quest, 1, "I should seek out Lieutenant Argosian at the first outpost in the Ruins.", 1, "I have been ordered to speak to Lieutenant Argosian.", 0, 1270031) + AddQuestStepCompleteAction(Quest, 1, "Quest_Complete") +end + +function Accepted(Quest, QuestGiver, Player) + FaceTarget(QuestGiver, Player) + conversation = CreateConversation() + + AddConversationOption(conversation, "Thank you for the advice.", "dlg_2_14") + StartConversation(conversation, QuestGiver, Player, "Good. Oh, be sure to pay homage to the statue of our beloved Overlord. It would prove most beneficial for you to bask in the wisdom of his visage.") +end + +function Declined(Quest, QuestGiver, Player) +end + +function dlg_2_14(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/captain_arellius/fprt_adv04_ruins/revamp/captain_arellius018.mp3", "", "", 377300022, 2983031406, Spawn) + AddConversationOption(conversation, "I'll go see him.") + StartConversation(conversation, NPC, Spawn, "Lieutenant Argosian at the first outpost will be responsible for your initial training. Do not return to me until he has ordered you to do so.") +end + +function Quest_Complete(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 1, "I spoke to the lieutenant.") + UpdateQuestTaskGroupDescription(Quest, 1, "I have reported to Lietenant Argosian.") + GiveQuestReward(Quest, Player) + UpdateQuestDescription(Quest, "I followed the orders of Captain Arellius, who had me report to Lieutenant Argosian at the first outpost in the Ruins. I will now be aiding him in his quest to battle the Brokentusk orcs.") +end + +function Reload(Quest, QuestGiver, Player) +end \ No newline at end of file diff --git a/server/Quests/Ruins/requesting_further_orders.lua b/server/Quests/Ruins/requesting_further_orders.lua new file mode 100644 index 000000000..8847c3ab9 --- /dev/null +++ b/server/Quests/Ruins/requesting_further_orders.lua @@ -0,0 +1,38 @@ +--[[ + Script Name : Quests/Ruins/requesting_further_orders.lua + Script Purpose : Handles the quest, "Requesting Further Orders" + Script Author : Scatman + Script Date : 2009.08.02 + + Zone : The Ruins + Quest Giver: Lieutenant Argosian + Preceded by: Prophet and Loss (prophet_and_loss.lua) + Followed by: Stepping up the Offensive (stepping_up_the_offensive.lua) +--]] + +function Init(Quest) + AddQuestStepChat(Quest, 1, "I must return to Captain Arellius to receive further orders.", 1, "I have been ordered to return to Captain Arellius.", 0, 1270003) + AddQuestStepCompleteAction(Quest, 1, "Quest_Complete") +end + +function Accepted(Quest, QuestGiver, Player) + FaceTarget(QuestGiver, Player) + conversation = CreateConversation() + + PlayFlavor(QuestGiver, "voiceover/english/tutorial_revamp/lieutenant_argosian/fprt_adv04_ruins/revamp/lieutenant_argosian027b.mp3", "", "", 3190269915, 3618413640, Player) + AddConversationOption(conversation, "I will.") + StartConversation(conversation, QuestGiver, Player, "Travel safely, citizen of Freeport.") +end + +function Declined(Quest, QuestGiver, Player) +end + +function Quest_Complete(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 1, "I have spoken to Captain Arellius.") + UpdateQuestTaskGroupDescription(Quest, 1, "I have spoken to Captain Arellius.") + GiveQuestReward(Quest, Player) + UpdateQuestDescription(Quest, "I followed the orders of Lieutenant Argosian, who told me to report back to Captain Arellius at the docks in the Ruins. I will now see if I can be of further assistance in the defense of Freeport.") +end + +function Reload(Quest, QuestGiver, Player, Step) +end \ No newline at end of file diff --git a/server/Quests/Ruins/stepping_up_the_offense.lua b/server/Quests/Ruins/stepping_up_the_offense.lua new file mode 100644 index 000000000..aae8cac28 --- /dev/null +++ b/server/Quests/Ruins/stepping_up_the_offense.lua @@ -0,0 +1,38 @@ +--[[ + Script Name : Quests/Ruins/stepping_up_the_offense.lua + Script Purpose : Handles the quest, "Stepping Up the Offense" + Script Author : Scatman + Script Date : 2009.08.18 + + Zone : The Ruins + Quest Giver: Captain Arellius + Preceded by: Request Further Orders (requesting_further_orders.lua) + Followed by: Knock the Fight Out of 'Em (knock_the_fight_out_of_em.lua) +--]] + +function Init(Quest) + AddQuestStepChat(Quest, 1, "I should locate Lieutenant Imperidus at the second Militia outpost in the Ruins and speak to her.", 1, "I have been ordered by the captain to report to Lieutenant Imperidus.", 0, 1270070) + AddQuestStepCompleteAction(Quest, 1, "Quest_Complete") +end + +function Accepted(Quest, QuestGiver, Player) + FaceTarget(QuestGiver, Player) + conversation = CreateConversation() + + PlayFlavor(QuestGiver, "voiceover/english/tutorial_revamp/captain_arellius/fprt_adv04_ruins/revamp/captain_arellius028.mp3", "", "", 11330989, 3299447227, Player) + AddConversationOption(conversation, "I understand, Captain.") + StartConversation(conversation, QuestGiver, Player, "Again, keep in mind that even travel to the second outpost will be dangerous. Travel with companions to ensure your safety. Do not report back to me until you have followed the lieutenant's orders.") +end + +function Declined(Quest, QuestGiver, Player) +end + +function Quest_Complete(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 1, "I found Lietenant Imperidus deep in the Ruins.") + UpdateQuestTaskGroupDescription(Quest, 1, "I have reported to Lieutenant Imperidus.") + UpdateQuestDescription(Quest, "I made my way through the Ruins and found the second Militia outpost, where I reported to Lieutenant Imperidus for duty.") + GiveQuestReward(Quest, Player) +end + +function Reload(Quest, QuestGiver, Player, Step) +end \ No newline at end of file diff --git a/server/Quests/Ruins/vengeance_for_shoreside.lua b/server/Quests/Ruins/vengeance_for_shoreside.lua new file mode 100644 index 000000000..7ba357cf6 --- /dev/null +++ b/server/Quests/Ruins/vengeance_for_shoreside.lua @@ -0,0 +1,116 @@ +--[[ + Script Name : Quests/Ruins/vengeance_for_shoreside.lua + Script Purpose : Handles the quest, "Vengeance for Shoreside" + Script Author : Scatman + Script Date : 2009.08.20 + + Zone : The Ruins + Quest Giver: Captain Arellius + Preceded by: Knock the Fight Out of 'Em (knock_the_fight_out_of_em.lua) + Followed by: Identifying the Lonetusk Ally (identifying_the_lonetusk_ally.lua) +--]] + +function Init(Quest) + AddQuestStepKill(Quest, 1, "I must slay five Lonetusk sentries.", 5, 100, "In memory of the fallen citizens of Shoreside, I will take revenge upon the Lonetusk orcs.", 2488, 1270041, 1270049, 1270048, 1270059) + AddQuestStepKill(Quest, 2, "I must slay five Lonetusk warriors.", 5, 100, "In memory of the fallen citizens of Shoreside, I will take revenge upon the Lonetusk orcs.", 2488, 1270115, 1270116, 1270113, 1270133) + AddQuestStepKill(Quest, 3, "I must slay five Lonetusk crushers.", 5, 100, "In memory of the fallen citizens of Shoreside, I will take revenge upon the Lonetusk orcs.", 2488, 1270112, 1270114) + AddQuestStepKill(Quest, 4, "I must slay five Lonetusk pounders.", 5, 100, "In memory of the fallen citizens of Shoreside, I will take revenge upon the Lonetusk orcs.", 2488, 1270063, 1270081) + AddQuestStepKill(Quest, 5, "I must slay five Lonetusk shamans.", 5, 100, "In memory of the fallen citizens of Shoreside, I will take revenge upon the Lonetusk orcs.", 2488, 1270051, 1270052) + AddQuestStepKill(Quest, 6, "I must slay five Lonetusk prophets.", 5, 100, "In memory of the fallen citizens of Shoreside, I will take revenge upon the Lonetusk orcs.", 2488, 1270117, 1270118) + AddQuestStepCompleteAction(Quest, 1, "Step1_Complete_KilledSentries") + AddQuestStepCompleteAction(Quest, 2, "Step2_Complete_KilledWarriors") + AddQuestStepCompleteAction(Quest, 3, "Step3_Complete_KilledCrushers") + AddQuestStepCompleteAction(Quest, 4, "Step4_Complete_KilledPounders") + AddQuestStepCompleteAction(Quest, 5, "Step5_Complete_KilledShaman") + AddQuestStepCompleteAction(Quest, 6, "Step6_Complete_KilledProphets") +end + +function Accepted(Quest, QuestGiver, Player) + FaceTarget(QuestGiver, Player) + conversation = CreateConversation() + + PlayFlavor(QuestGiver, "voiceover/english/tutorial_revamp/lieutenant_imperidus/fprt_adv04_ruins/revamp/lieutenant_imperidus013.mp3", "", "", 1435258692, 228785667, Player) + AddConversationOption(conversation, "I like the sound of this plan.", "dlg_6_3") + StartConversation(conversation, QuestGiver, Player, "The surest way to take the fight out of the orcs is to thin their numbers. We have to show we will not tolerate their presence anymore. I need you to make a serious dent in the Lonetusk population. The streets of Shoreside must swell with the blood of these brutes.") +end + +function Declined(Quest, QuestGiver, Player) +end + +function Step1_Complete_KilledSentries(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 1, "I have slain five Lonetusk sentries.") + + if QuestIsComplete(Player, 287) then + Multiple_Steps_Complete(Player, QuestGiver, Player) + end +end + +function Step2_Complete_KilledWarriors(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 2, "I have slain five Lonetusk warriors.") + + if QuestIsComplete(Player, 287) then + Multiple_Steps_Complete(Player, QuestGiver, Player) + end +end + +function Step3_Complete_KilledCrushers(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 3, "I have slain five Lonetusk crushers.") + + if QuestIsComplete(Player, 287) then + Multiple_Steps_Complete(Player, QuestGiver, Player) + end +end + +function Step4_Complete_KilledPounders(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 4, "I have slain five Lonetusk pounders.") + + if QuestIsComplete(Player, 287) then + Multiple_Steps_Complete(Player, QuestGiver, Player) + end +end + +function Step5_Complete_KilledShaman(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 5, "I have slain five Lonetusk shamans.") + + if QuestIsComplete(Player, 287) then + Multiple_Steps_Complete(Player, QuestGiver, Player) + end +end + +function Step6_Complete_KilledProphets(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 6, "I have slain five Lonetusk prophets.") + + if QuestIsComplete(Player, 287) then + Multiple_Steps_Complete(Player, QuestGiver, Player) + end +end + +function Multiple_Steps_Complete(Quest, QuestGiver, Player) + UpdateQuestTaskGroupDescription(Quest, 1, "I have honored the memory of Freeport's fallen by taking revenge on the Lonetusk.") + + AddQuestStepChat(Quest, 7, "I should report back to the lieutenant.", 1, "Having wiped out a considerable number of Lonetusk, I should report back to Lieutenant Imperidus.", 0, 1270070) + AddQuestStepCompleteAction(Quest, 7, "Quest_Complete") +end + +function Quest_Complete(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 7, "I have reported back to the lieutenant.") + UpdateQuestTaskGroupDescription(Quest, 2, "I have reported back to Lieutenant Imperidus.") + UpdateQuestDescription(Quest, "I killed Lonetusk orcs. Lots and lots of orcs. Lieutenant Imperidus and I both feel that we're making progress against these foul beasts, but more must be done to ensure Freeport's safety. The lieutenant has further orders for me that will hopefully help us turn the tide at last. Perhaps my efforts here have brought some measure of peace to the dead citizens of Shoreside.") + GiveQuestReward(Quest, Player) +end + +function Reload(Quest, QuestGiver, Player, Step) + if Step == 1 then + Step1_Complete_KilledSentries(Quest, QuestGiver, Player) + elseif Step == 2 then + Step2_Complete_KilledWarriors(Quest, QuestGiver, Player) + elseif Step == 3 then + Step3_Complete_KilledCrushers(Quest, QuestGiver, Player) + elseif Step == 4 then + Step4_Complete_KilledPounders(Quest, QuestGiver, Player) + elseif Step == 5 then + Step5_Complete_KilledShaman(Quest, QuestGiver, Player) + elseif Step == 6 then + Step6_Complete_KilledProphets(Quest, QuestGiver, Player) + end +end \ No newline at end of file diff --git a/server/Quests/ScaleYard/a_puppy_for_your_potion.lua b/server/Quests/ScaleYard/a_puppy_for_your_potion.lua new file mode 100644 index 000000000..0804efbac --- /dev/null +++ b/server/Quests/ScaleYard/a_puppy_for_your_potion.lua @@ -0,0 +1,79 @@ +--[[ + Script Name : Quests/ScaleYard/a_puppy_for_your_potion.lua + Script Purpose : Handles the quest, "A Puppy for Your Potion" + Script Author : Xanibunib + Script Date : 2009.03.13 + + Zone : The Scale Yard + Quest Giver: Brood Matron Vrim Malthyk + QuestID # : 340 + Preceded by: None + Followed by: He Said, he said (He_said_he_said.lua) +--]] + +-- Item ID's +local BOX_OF_ALCHEMY_COMPONENTS = 4537 + +function Init(Quest) + --Ancient Sebilisian Haversack + AddQuestStepChat(Quest, 1, "I need to speak with Melvin Dunford. He was last seen in a tavern located North of the Fountain of the Fallen Soldier.", 1, "Melvin Dunford, a freeport dockworker knows the location of a box of alchemy componenets that belong to Brood Matron Vrim. I need to blackmail Melvin into giving me the box.", 0, 1390050) + AddQuestStepCompleteAction(Quest, 1, "Step1_Complete_Threat") +end + +function Accepted(Quest, QuestGiver, Player) + if QuestGiver ~= nil then + if GetDistance(Player, QuestGiver) < 30 then + FaceTarget(QuestGiver, Player) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/brood_matron_vrim_malthyk/fprt_hood06/rcp_vrim007.mp3", "", "", 3926366236, 3342203469, Spawn) + AddConversationOption(conversation, "With pleasure.") + StartConversation(conversation, QuestGiver, Player, "You , I want you to take this. It is the collar of his most beloved puppy, Wittens. Show it to him and inform Mr. Dunford if he does not tell me the location of the alchemy components poor little Wittens here will find himself in the company of a rather insatiable and ravenous friend of mine. One of... trollish persuasion.") + end + end +end + +function Declined(Quest, QuestGiver, Player) +end + +function Deleted(Quest, QuestGiver, Player) + RemoveAlchemyComponents(Player) +end + +function RemoveAlchemyComponents(Player) + while HasItem(Player, BOX_OF_ALCHEMY_COMPONENTS, 1) do + RemoveItem(Player, BOX_OF_ALCHEMY_COMPONENTS) + end +end + +function Step1_Complete_Threat(Quest, QuestGiver, Player) + UpdateQuestTaskGroupDescription(Quest, 1, "My threats were successful! Melvin told me where I could find the alchemy compnents.") + + AddQuestStep(Quest, 2, "I must recover the box of alchemy components. They are suppose to be near the enterance to the Thieve's Way.", 1, 100, "I need to look for the stolen box of alchemy components.", 654) + + AddQuestStepCompleteAction(Quest, 2, "Step2_Complete_HaveBox") +end + +function Step2_Complete_HaveBox(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 2, "I recovered the box of stolen alchemy components. I need to bring them to Vrim.") + UpdateQuestTaskGroupDescription(Quest, 2, "I recovered the box of stolen alchemy components. I need to bring them to Vrim.") + + AddQuestStepChat(Quest, 3, "I've recovered the box of stolen alchemy components. I need to bring them to Vrim.", 1, "I need to return the box of alchemy componenets to Vrim.", 654, 1260055) + AddQuestStepCompleteAction(Quest, 3, "Step3_Quest_Complete") +end + +function Step3_Quest_Complete(Quest, QuestGiver, Player) + UpdateQuestTaskGroupDescription(Quest, 1, "I've located the box of stolen alchemy components and returned them to Vrim. She is most pleased!") + GiveQuestReward(Quest, Player) + RemoveAlchemyComponents(Player) +end + +function Reload(Quest, QuestGiver, Player, Step) + if Step == 1 then + Step1_Complete_Threat(Quest, QuestGiver, Player) + elseif Step == 2 then + Step2_Complete_RecoBox(Quest, QuestGiver, Player) + elseif Step == 3 then + Step3_QuestComplete(Quest, QuestGiver, Player) + end +end \ No newline at end of file diff --git a/server/Quests/ScaleYard/battle_on_the_home_front.lua b/server/Quests/ScaleYard/battle_on_the_home_front.lua new file mode 100644 index 000000000..99e00b003 --- /dev/null +++ b/server/Quests/ScaleYard/battle_on_the_home_front.lua @@ -0,0 +1,111 @@ +--[[ + Script Name : Quests/ScaleYard/battle_on_the_home_front.lua + Script Purpose : Quest 185, Battle On The Home Front + Script Author : Xanibunib + Script Date : 4.9.2009 + + Zone : Scale Yard + Quest Giver: Clan Chief Malachi Sleetspear + Quest ID # : 185 + Preceded by: Sound off! + Followed by: What Happens In The Scale Yard Stays... +--]] + +-- Quest ID's +local QUEST_3 = 348 -- 185 --Battle On The Home Front + +function Init(Quest) + AddQuestStepChat(Quest, 1, "Malachi has asked me to speak with an Iksar named Issik. Issik was last seen talking to Arms Dealer Shilza.", 1, "Malachi wants me to speak with Issik, an Iksar in charge of Commonland Orc raiding parties. Malachi wants to know when his group will get to goon a raid.", 0, 1390043) + AddQuestStepCompleteAction(Quest, 1, "Step1_TalkedToIssik") +end + + +function Accepted(Quest, QuestGiver, Player) + if QuestGiver ~= nil then + if GetDistance(Player, QuestGiver) < 30 then + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/gu38/tutorial_revamp/clan_chief_malachi_sleetspear/fprt_hood06/malachi058.mp3", "", "", 3619805885, 1780261513, Spawn) + AddConversationOption(conversation, "Sounds simple enough.") + StartConversation(conversation, NPC, Spawn, "You can find him west of the fountain at the end of the alley, near Arms Dealer Shilza. Go now.") + end + end +end + +function Declined(Quest, QuestGiver, Player) +end + +function Deleted(Quest, QuestGiver, Player) +end + +function Step1_TalkedToIssik(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 1, "I spoke to Issik. Malachi is not going to be happy. I should go tell him the news.") + + AddQuestStepChat(Quest, 2, "I need to let Malachi know the bad news.", 1, "Malachi wants me to speak with Issik, an Iksar in charge of Commonland Orc raiding parties. Malachi wants to know when his group will get to goon a raid.", 0, 1390004) + AddQuestStepCompleteAction(Quest, 2, "Step2_TalkedToChief") +end + +function Step2_TalkedToChief(Quest, QuestGiver, Player) + UpdateQuestTaskGroupDescription(Quest, 1, "Issik told me he chose another group of raiders instead of Malachi's group. I don't think he willbe very happy about this at all. Regardless, I need to let him know the news.") + + AddQuestStep(Quest, 3, "I need to smash the desk.", 1, 100, "Malachi is furious as Issik! Rather than kill him, Malachi has something different in mind. I am to smash the furniture in Issik's quarters and teach the Iskar a lesson! His quarters are up the stiars, just east of the docks.", 0) + AddQuestStep(Quest, 4, "I need to smash the chair.", 1, 100, "Malachi is furious as Issik! Rather than kill him, Malachi has something different in mind. I am to smash the furniture in Issik's quarters and teach the Iskar a lesson! His quarters are up the stiars, just east of the docks.", 0) + AddQuestStep(Quest, 5, "I need to smash the weapon rack.", 1, 100, "Malachi is furious as Issik! Rather than kill him, Malachi has something different in mind. I am to smash the furniture in Issik's quarters and teach the Iskar a lesson! His quarters are up the stiars, just east of the docks.", 0) + + AddQuestStepCompleteAction(Quest, 3, "Step3_SmashDesk") + AddQuestStepCompleteAction(Quest, 4, "Step4_SmashChair") + AddQuestStepCompleteAction(Quest, 5, "Step5_SmashWeaponRack") +end + +function Step3_SmashDesk(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 3, "I have smashed the desk.") + + if QuestIsComplete(Player, QUEST_3) then + SmashingDone(Quest, QuestGiver, Player) + end +end + +function Step4_SmashChair(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 4, "I have smashed the chair.") + + if QuestIsComplete(Player, QUEST_3) then + SmashingDone(Quest, QuestGiver, Player) + end +end + +function Step5_SmashWeaponRack(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 5, "I have smashed the weapon rack.") + + if QuestIsComplete(Player, QUEST_3) then + SmashingDone(Quest, QuestGiver, Player) + end +end + +function SmashingDone(Quest, QuestGiver, Player) + UpdateQuestTaskGroupDescription(Quest, 2, "I have smashed the furiture in Issik's office. I should go speak with Malachi.") + + AddQuestStepChat(Quest, 6, "I need to tell Malachi the deed has been done.", 1, "I need to speak with Malachi", 0, 1390004) + AddQuestStepCompleteAction(Quest, 6, "QuestComplete") +end + +function QuestComplete(Quest, QuestGiver, Player) + UpdateQuestDescription(Quest, "Malachi may not be leading any raiding parties soon, but I'm sure we taught Issik a lesson!") +--*Replace this line with the one above* UpdateQuestTaskGroupDescription(Quest, 1, "Malachi may not be leading any raiding parties soon, but I'm sure we taught Issik a lesson!") + GiveQuestReward(Quest, Player) +end + + +function Reload(Quest, QuestGiver, Player) + if Step == 1 then + Step1_TalkedToIssik(Quest, QuestGiver, Player) + elseif Step == 2 then + Step2_TalkToChief(Quest, QuestGiver, Player) + elseif Step == 3 then + Step3_SmashDesk(Quest, QuestGiver, Player) + elseif Step == 4 then + Step4_SmashChair(Quest, QuestGiver, Player) + elseif Step == 5 then + Step5_SmashWeaponRack(Quest, QuestGiver, Player) + end +end \ No newline at end of file diff --git a/server/Quests/ScaleYard/go_visit_the_sprawl.lua b/server/Quests/ScaleYard/go_visit_the_sprawl.lua new file mode 100644 index 000000000..d3ede58c7 --- /dev/null +++ b/server/Quests/ScaleYard/go_visit_the_sprawl.lua @@ -0,0 +1,50 @@ +--[[ + Script Name : Quests/ScaleYard/go_visit_the_sprawl.lua + Script Purpose : Quest 203, Go Visit The Sprawl + Script Author : Xanibunib + Script Date : 4.10.2009 + + Zone : Scale Yard + Quest Giver: Clan Cheif Malachi Sleetspear + Preceded by: What Happens In The Scale Yard Stays... + Followed by: +--]] + + +function Init(Quest) + AddQuestStepChat(Quest, 1, "I need to speak to Enforcer Kurdek in the Sprawl.", 1, "", 0, 1260017) + AddQuestStepCompleteAction(Quest, 1, "Step1_Kurdek") +end + +function Accepted(Quest, QuestGiver, Player) + if QuestGiver ~= nil then + if GetDistance(Player, QuestGiver) < 30 then + PlayFlavor(QuestGiver, "voiceover/english/gu38/tutorial_revamp/clan_chief_malachi_sleetspear/fprt_hood06/malachi056.mp3", "", "", 3512384326, 3311708493, Player) + AddConversationOption(conversation, "Okay.", "dlg_0_0") + StartConversation(conversation, QuestGiver, Player, "Aye, you've done much already but I'm afraid after all the ruckus you stirred up, its best you find work elsewhere. Go speak to Enforcer Kurdek in the Sprawl and see if he could use your help.") + end + end +end + +function Declined(Quest, QuestGiver, Player) +end + +function dlg_0_0(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/gu38/tutorial_revamp/clan_chief_malachi_sleetspear/fprt_hood06/malachi057.mp3", "", "", 3904497109, 418111137, Spawn) + AddConversationOption(conversation, "For New Halas!") + StartConversation(conversation, NPC, Spawn, "Good luck Fuhe, and remember... For New Halas!") +end + +function Step1_Kurdek(Quest, QuestGiver, Spawn) + UpdateQuestDescription(Quest, "I have spoken to Enforcer Kurdek.") + GiveQuestReward(Quest, Player) +end + +function Reload(Quest, QuestGiver, Player) + if Step == 1 then + Step1_Kurdek(Quest, QuestGiver, Player) + end +end \ No newline at end of file diff --git a/server/Quests/ScaleYard/he_said_he_said.lua b/server/Quests/ScaleYard/he_said_he_said.lua new file mode 100644 index 000000000..1c13fa1d4 --- /dev/null +++ b/server/Quests/ScaleYard/he_said_he_said.lua @@ -0,0 +1,73 @@ +--[[ + Script Name : Quests/ScaleYard/he_said_he_said.lua + Script Purpose : Handles the quest, "He said, he said" + Script Author : Xanibunib + Script Date : 2009.03.13 + + + Zone : The Scale Yard + Quest Giver: Brood Matron Vrim Malthyk + QuestID # : 341 + Preceded by: A Puppy for Your Potion + Followed by: Paying Homage to the Past +--]] + + +function Init(Quest) + + -- Brood Matron's Private Reserve + -- Kunark Krisps + + AddQuestStepChat(Quest, 1, "I must speak with Tristan. He is standing near the Heated Stone Inn.", 1, "I need to manipulate two Barbarians into hating each other.", 0, 1390015) + + AddQuestStepCompleteAction(Quest, 1, "Step1_Complete_Tristan") + +end + +function Accepted(Quest, QuestGiver, Player) + if QuestGiver ~= nil then + if GetDistance (Player, QuestGiver) < 30 then + FaceTarget (QuestGiver, Player) + conversation = CreateConversation() + + AddConversationOption(conversation, "Then, I'm off!") + StartConversation(conversation, QuestGiver, Player, "No, that should be enough to send thouse two off the deep end. You should be able to find Tristan near the Heated Stone Inn and Wesley tends to lurk around the South Freeport Gate.") + end + end +end + +function Declined(Quest, GuestGiver, Player) +end + +function Deleted(Quest, QuestGiver, Player) +end + +function Step1_Complete_Tristan(Quest, QestGiver, Player) + UpdateQuestStepDescription(Quest, 1, "I have spoken with Tristan.") + + AddQuestStepChat(Quest, 2, "I must speak with Wesley Tundrafoot. He is standing near the South Freeport gate.", 1, "I need to manipulate two Barbarians into hating each other.", 0, 1390026) + AddQuestStepCompleteAction(Quest, 2, "Step2_Complete_Wesley") +end + +function Step2_Complete_Wesley(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 2, "Sucess! Tristan and Wesley are furious at one another!") + UpdateQuestTaskGroupDescription(Quest, 1, "Sucess! Tristan and Wesley are furious at one another!") + + AddQuestStepChat(Quest, 3, "These two Barbarians have completely fallen for my ruse. I must report back to Vrim.", 1, "I need to speak with Vrim", 0, 1260003) + AddQuestStepCompleteAction(Quest, 3, "Step3_QuestComplete") +end + +function Step3_QuestComplete(Quest, QuestGiver, Player) + UpdateQuestTaskGroupDescription(Quest, 1, "Success! I have fooled the Barbarians and turned them agaisnt one another.") + GiveQuestReward(Quest, Player) +end + +function Reload(Quest, QuestGiver, Player) + if Step == 1 then + Step1_Complete_Tristan(Quest, QuestGiver, Player) + elseif Step == 2 then + Step2_Complete_Wesley(Quest, QuestGiver, Player) + elseif Step == 3 then + Step3_QuestComplete(Quest, QuestGiver, Player) + end +end \ No newline at end of file diff --git a/server/Quests/ScaleYard/kill_or_be_killed.lua b/server/Quests/ScaleYard/kill_or_be_killed.lua new file mode 100644 index 000000000..cfae6b55a --- /dev/null +++ b/server/Quests/ScaleYard/kill_or_be_killed.lua @@ -0,0 +1,53 @@ +--[[ + Script Name : Quests/ScaleYard/kill_or_be_killed.lua + Script Purpose : Quest 343, Kill or be killed. + Script Author : Xanibunib + Script Date : 3.30.2009 + + Zone : Scale Yard + Quest Giver: Brood Matron Vrim Malthyk + Quest ID# : 343 + Preceded by: Paying Homeage To The Past + Followed by: Report To Enforcer Kurdak +--]] + +function Init(Quest) + --Brood Matron's Bangle of the Primogenitor + AddQuestStepKill(Quest, 1, "Anthony Glavias must be relived of his duty as a member of the Freeport Militia.", 1, 100, "Militia member, Anthony Glvias, has proven to be too incompetant to serve in the Freeport Militia. He must be relived of his duty. He is currently stationed West of the Fountain of the Fallen Soldier.", 0, 1390038) + AddQuestStepCompleteAction(Quest, 1, "AnthonyDead") +end + +function Accepted(Quest, QuestGiver, Player) + if QuestGiver ~= nil then + if GetDistance (Player, QuestGiver) < 30 then + FaceTarget (QuestGiver, Player) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/brood_matron_vrim_malthyk/fprt_hood06/rcp_vrim036.mp3", "", "", 3345203705, 2408614113, Spawn) + AddConversationOption(conversation, "I understand. He will be disposed of immediately!") + StartConversation(conversation, NPC, Spawn, "Let me tell you something. After the Iksar proved their mettle tenfold to the Overlord, he pretty much allows us to run this yard anyway we see fit. Militia members included. If someone's not up to snuff... replace them.") + end + end +end + +function Declined(Quest, QuestGiver, Player) +end + +function AnthonyDead(Quest, QuestGiver, Player) + UpdateQuestTaskGroupDescription(Quest, 1, "I have relived Anthony of his duty..") + + AddQuestStepChat(Quest, 2, "I must inform Vrim of my actions.", 1, "I must speak with Vrim.", 0, 1260003) + AddQuestStepCompleteAction(Quest, 2, "QuestComplete") +end + +function QuestComplete(Quest, QuestGiver, Player) + UpdateQuestTaskGroupDescription(Quest, 2, "Anthony Glavias has been retired.") + GiveQuestReward(Quest, Player) +end + + +function Reload(Quest, QuestGiver, Player, Step) + if Step == 1 then + AnthonyDead(Quest, QuestGiver, Player) + end +end \ No newline at end of file diff --git a/server/Quests/ScaleYard/paying_homage_to_the_past.lua b/server/Quests/ScaleYard/paying_homage_to_the_past.lua new file mode 100644 index 000000000..6eec71c23 --- /dev/null +++ b/server/Quests/ScaleYard/paying_homage_to_the_past.lua @@ -0,0 +1,106 @@ +--[[ + Script Name : Quests/ScaleYard/paying_homage_to_the_past.lua + Script Purpose : Handles the quest, "Paying Homage to the Past" + Script Author : Xanibunib + Script Date : 2009.03.14 + + Zone : The Scale Yard + Quest Giver : Brood Matron Vrim Malthyk + QuestID # : 342 + Preceded by : He said, he said + Followed by : Kill or be Killed +--]] + +-- Item ID's +local IKSAR_SKULL = 8251 + +function Init(Quest) + + + AddQuestStepKill(Quest, 1, "I must smash the ancient Shissar vase. No remants of our former oppressors shouldbe allowed to exist.", 1, 100, "The ritual states that I must destroy an object from the ancient Shissar civilization. I should look around Vrim's quarters. She lives up the stairs, northeast of the docks.", 569, 1390059) + AddQuestStepCompleteAction(Quest, 1, "Step1_Complete_Asp") + +end + +function Accepted(Quest, QuestGiver, Player) + if QuestGiver ~= nil then + if GetDistance (Player, QuestGiver) < 30 then + FaceTarget (QuestGiver, Player) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/brood_matron_vrim_malthyk/fprt_hood06/rcp_vrim028.mp3", "", "", 2174236902, 836114620, Spawn) + AddConversationOption(conversation, "I take my leave.") + StartConversation(conversation, NPC, Spawn, "Good. This ritual will begin to teach you about our people. Go now to my quarters, up the stairs to the East. I have prepared most everything you will need to complete the ritual.") + end + end +end + +function Declined(Quest, QuestGiver, Player) +end + +function Deleted(Quest, QuestGiver, Player) + RemoveIksarSkull(Player) +end + +function RemoveIksarSkull(Player) + while HasItem(Player, IKSAR_SKULL, 1) do + RemoveItem(Player, IKSAR_SKULL) + end +end + +function Step1_Complete_Asp(Quest, QuestGiver, Player) + UpdateQuestTaskGroupDescription(Quest, 1, "I have destroyed the Shissar vase and killed an asp that was hiding within it...") + + AddQuestStepHarvest(Quest, 2, "I must collect five skulls of fallen Iksar.", 5, 100, "I Must gather several Iksar skulls scattered across the Scale Yard.", 91, IKSAR_SKULL) + + AddQuestStepCompleteAction(Quest, 2, "Step2_Complete_GotSkulls") +end + +function Step2_Complete_GotSkulls(Quest, QuestGiver, Player) + UpdateQuestTaskGroupDescription(Quest, 2, "I have collected the skulls.") + + + AddQuestStep(Quest, 3, "I must place the skulls in the brazier.", 1, 100, "I must place the skulls in the brazier and set them ablaze. I saw a brazier in Vrim's quarters, up the stairs, northeast of the docks.", 0) + AddQuestStepCompleteAction(Quest, 3, "Step3_Complete_SkullsInFire") +end + +function Step3_Complete_SkullsInFire(Quest, QuestGiver, Player) + UpdateQuestTaskGroupDescription(Quest, 3, "I have placed the skulls in the fire.") + + RemoveIksarSkull(Player) + AddQuestStep(Quest, 4, "I need to take the shackles off the wall.", 1, 100, "It Appears that the Iksar were once enslave by the Overlord. However, after proving their mettle during the Battle of Defiance, the Iksar were allowed to live freely in the Scale Yard. I am to take the old shackles from the time of enslavement and cast them into the sea!", 0) + AddQuestStepCompleteAction(Quest, 4, "Step4_Complete_HaveShackles") +end + +function Step4_Complete_HaveShackles(Quest, QuestGiver, Player) + UpdateQuestTaskGroupDescription(Quest, 4, "I've taken the shackles.") + + AddQuestStepLocation(Quest, 5, "I must cast the shackles into the sea.", 30, "I need to toss the shackles into the sea. I can do so at the docks.", 0, 0, -4.5, 105) + AddQuestStepCompleteAction(Quest, 5, "Step5_Complete_TossShackles") +end + +function Step5_Complete_TossShackles(Quest, QuestGiver, Player) + UpdateQuestTaskGroupDescription(Quest, 5, "I have cast the shackles into the sea! Never again will the Iksar be imprisoned by a lesser race!") + + AddQuestStepChat(Quest, 6, "I have completed all the tasks mentioned in the tome. Though only a short lesson, I feel I know much more about the past glories and struggles my people have endured.", 1, "The ritual is complete. I must speak with Vrim", 0, 1260003) + AddQuestStepCompleteAction(Quest, 6, "QuestComplete") +end + +function QuestComplete(Quest, QuestGiver, Player) + UpdateQuestTaskGroupDescription(Quest, 1, "I have completed the ritual described in the ancient tome.") + GiveQuestReward(Quest, Player) +end + +function Reload(Quest, QuestGiver, Player, Step) + if Step == 1 then + Step1_Complete_Asp(Quest, QuestGiver, Player) + elseif Step == 2 then + Step2_Complete_GotSkulls(Quest, QuestGiver, Player) + elseif Step == 3 then + Step3_Complete_SkullsInFire(Quest, QuestGiver, Player) + elseif Step == 4 then + Step4_Complete_HaveShackles(Quest, QuestGiver, Player) + elseif Step == 5 then + Step5_Complete_TossShackles(Quest, QuestGiver, Player) + end +end \ No newline at end of file diff --git a/server/Quests/ScaleYard/report_to_enforcer_kurdek.lua b/server/Quests/ScaleYard/report_to_enforcer_kurdek.lua new file mode 100644 index 000000000..8e4049379 --- /dev/null +++ b/server/Quests/ScaleYard/report_to_enforcer_kurdek.lua @@ -0,0 +1,39 @@ +--[[ + Script Name : Quests/ScaleYard/report_to_enforcer_kurdek.lua + Script Purpose : Quest 344, Report To Enforcer Kurdek + Script Author : Xanibunib + Script Date : 4.10.2009 + + Zone : Scale Yard + Quest Giver: Brood Matron Vrim Malthyk + Preceded by: Report To Enforcer Kurdek + Followed by: +--]] + + +function Init(Quest) + + + AddQuestStepChat(Quest, 1, "I need to speak to Enforcer Kurdek in the Sprawl.", 1, "", 0, 1260017) + AddQuestStepCompleteAction(Quest, 1, "Step1_Kurdek") + + + +end + +function Accepted(Quest, QuestGiver, Player) +end + +function Declined(Quest, QuestGiver, Player) +end + +function Step1_Kurdek(Quest, QuestGiver, Spawn) + UpdateQuestDescription(Quest, "I have spoken to Enforcer Kurdek.") + GiveQuestReward(Quest, Player) +end + +function Reload(Quest, QuestGiver, Player) + if Step == 1 then + Step1_Kurdek(Quest, QuestGiver, Player) + end +end \ No newline at end of file diff --git a/server/Quests/ScaleYard/sound_off.lua b/server/Quests/ScaleYard/sound_off.lua new file mode 100644 index 000000000..e0662f261 --- /dev/null +++ b/server/Quests/ScaleYard/sound_off.lua @@ -0,0 +1,73 @@ +--[[ + Script Name : Quests/ScaleYard/sound_off.lua + Script Purpose : Quest "Sound Off!" + Script Author : Xanibunib + Script Date : 4.5.2009 + + Zone : Scale Yard + Quest Giver: Clan Cheif Malachi Sleetspear + Quest ID # : 183 + Preceded by: Wasp What I Can Do + Followed by: Battle On The Home Front +--]] + + +function Init(Quest) + AddQuestStepChat(Quest, 1, "I need to yell at Vleske Vylkle. I think I see him standing near some stairs.", 1, "I need to yell a fierce war cry at several people here in the Scale Yard!", 0, 1390005) + AddQuestStepCompleteAction(Quest, 1, "Step1_YelledAtVleske") +end + + +function Accepted(Quest, QuestGiver, Player) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/gu38/tutorial_revamp/clan_chief_malachi_sleetspear/fprt_hood06/malachi046.mp3", "", "", 408175612, 3827489644, Spawn) + AddConversationOption(conversation, "They're going to be begging me for forgiveness!") + StartConversation(conversation, NPC, Spawn, "That's it! Scare the ugly right off an ogre, I bet you could. Now let me see that journal of yours. I got a list of people who could use a good yellin'. Go to each of these people, look 'em in the eye and let loose your fiercest howl.") +end + +function Declined(Quest, QuestGiver, Player) +end + +function Deleted(Quest, QuestGiver, Player) +end + +function Step1_YelledAtVleske(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 1, "Vleske did not seem impressed at my war cry.") + + AddQuestStepChat(Quest, 2, "I need to yell at Caleb Brazenroot. He was seen near the Heated Stone Inn.", 1, "I need to yell a fierce war cry at several people here in the Scale Yard!", 0, 1390016) + AddQuestStepCompleteAction(Quest, 2, "Step2_YelledAtCaleb") +end + +function Step2_YelledAtCaleb(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 2, "Apparently Malachi taught Caleb his war cry as well.") + + AddQuestStepChat(Quest, 3, "I need to yell at Jondy Cobbleblork. He is said to be near the Freeport Reserve.", 1, "I need to yell a fierce war cry at several people here in the Scale Yard!", 0, 1390042) + AddQuestStepCompleteAction(Quest, 3, "Step3_YelledAtJondy") +end + +function Step3_YelledAtJondy(Quest, QuestGiver, Player) + UpdateQuestTaskGroupDescription(Quest, 1, "I yelled at everyone Malachi told me to yell at.") + + AddQuestStepChat(Quest, 4, "I should let Malachi know I've yelled at everyone.", 1, "I should go speak with Malachi", 0, 1390004) + AddQuestStepCompleteAction(Quest, 4, "QuestComplete") +end + +function QuestComplete(Quest, QuestGiver, Player) + UpdateQuestDescription(Quest, "Though not everyone was blindly intimidated by my menancing war cry, I did manage to frighten a rather... tenacious looking gnome into submission! I must practice on more people... after I gargle with some saltwater.") + GiveQuestReward(Quest, Player) +end + + +function Reload(Quest, QuestGiver, Player, Step) + if Step == 1 then + Step1_YelledAtVleske(Quest, QuestGiver, Player) + elseif Step == 2 then + Step2_YelledAtCaleb(Quest, QuestGiver, Player) + elseif Step == 3 then + Step3_YelledAtJondy(Quest, QuestGiver, Player) + elseif Step == 4 then + QuestComplete(Quest, QuestGiver, Player) + end +end \ No newline at end of file diff --git a/server/Quests/ScaleYard/wasp_what_i_can_do.lua b/server/Quests/ScaleYard/wasp_what_i_can_do.lua new file mode 100644 index 000000000..d3dd58219 --- /dev/null +++ b/server/Quests/ScaleYard/wasp_what_i_can_do.lua @@ -0,0 +1,83 @@ +--[[ + Script Name : Quests/ScaleYard/wasp_what_i_can_do.lua + Script Purpose : Quest, "Wasp What I Can Do" + Script Author : Xanibunib + Script Date : 4.4.209 + + Zone : Scale Yard + Quest Giver: Clan Chief Malachi Sleetspear + Quest ID# : 175 + Preceded by: none + Followed by: Sound Off! +--]] + +-- Quest ID's +QUEST_1 = 346 -- 175 --Wasp What I Can Do + +function Init(Quest) + + AddQuestStepKill(Quest, 1, "I need to kill several wasps.", 4, 100, "I need to take care of the wasps near the Freeport Reserve.", 611, 1390035) + AddQuestStep(Quest, 2, "I must destroy the wasp hive.", 1, 100, "I need to take care of the wasps near the Freeport Reserve.", 0) + + AddQuestStepCompleteAction(Quest, 1, "Step1_WaspsDead") + AddQuestStepCompleteAction(Quest, 2, "Step2_HiveDestro") + + +end + +function Accepted(Quest, QuestGiver, Player) + if QuestGiver ~= nil then + if GetDistance(Player, QuestGiver) < 30 then + PlayFlavor(NPC, "voiceover/english/gu38/tutorial_revamp/clan_chief_malachi_sleetspear/fprt_hood06/malachi007.mp3", "", "", 3983810535, 3176793285, Spawn) + AddConversationOption(conversation, "Ha! I thought this was going to be challenging! I’ll be right back!") + StartConversation(conversation, NPC, Spawn, "Go over there and get rid of that flying vermin and dispose of their hive. You’ll make fast friends clearing up this mess and establish the fact that yer handy in a tussle.") + end + end +end + +function Declined(Quest, QuestGiver, Player) +end + +function Deleted(Quest, QuestGiver, Player) +end + +function Step1_WaspsDead(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 1, "I have killed several wasps.") + + if QuestIsComplete(Player, QUEST_1) then + OneAndTwoComplete(Quest, QuestGiver, Player) + end +end + +function Step2_HiveDestro(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 2, "I have destroyed the wasp hive.") + + if QuestIsComplete(Player, QUEST_1) then + OneAndTwoComplete(Quest, QuestGiver, Player) + end +end + +function OneAndTwoComplete(Quest,QuestGiver, Player) + UpdateQuestTaskGroupDescription(Quest, 1, "I have proved that I am indeed strong enough to survive in the Scale Yard.") + + AddQuestStepChat(Quest, 3, "I should let malachi know I've delt with the wasps.", 1, "I've taken care of the wasps and need to talk to Malachi.", 0, 1390004) + AddQuestStepCompleteAction(Quest, 3, "QuestComplete") +end + +function QuestComplete(Quest, QuestGiver, Player) + UpdateQuestDescription(Quest, "I have destroyed the wasps and their hive at Malachi's request. Though they may not openly showit, I'm sure the residents of the Scale Yard appreciate my efforts.") + GiveQuestReward(Quest, Player) +end + + +function Reload(Quest, QuestGiver, Player, Step) + if Step == 1 then + Step1_WaspDead(Quest, QuestGiver, Player) + elseif Step == 2 then + Step2_HiveDestro(Quest, QuestGiver, Player) + elseif Step == 3 then + Step3_OneAndTwoComplete(Quest, QuestGiver, Player) + elseif Step == 4 then + QuestComplete(Quest, QuestGiver, Player) + end +end \ No newline at end of file diff --git a/server/Quests/ScaleYard/what_happens_in_the_scale_yard_stays.lua b/server/Quests/ScaleYard/what_happens_in_the_scale_yard_stays.lua new file mode 100644 index 000000000..14df1e69e --- /dev/null +++ b/server/Quests/ScaleYard/what_happens_in_the_scale_yard_stays.lua @@ -0,0 +1,53 @@ +--[[ + Script Name : Quests/ScaleYard/what_happens_in_the_scale_yard_stays.lua + Script Purpose : Quest 185, What Happens In The Scale Yard Stays... + Script Author : Xanibunib + Script Date : 4.10.2009 + + + Zone : Scale Yard + Quest Giver: Clan Cheif Malachi Sleetspear + Preceded by: Battle On The Home Front + Followed by: Report to Kurdek. +--]] + +function Init(Quest) + AddQuestStepKill(Quest, 1, "I need to slay the shadowy agents!", 2, 100, "I must intercept the agents that saw me trash Issik's quarters!", 611, 1390007) + AddQuestStepCompleteAction(Quest, 1, "Step1_KillAgents") +end + +function Accepted(Quest, QuestGiver, Player) + if QuestGiver ~= nil then + if GetDistance(Player, QuestGiver) < 30 then + PlayFlavor(NPC, "voiceover/english/gu38/tutorial_revamp/clan_chief_malachi_sleetspear/fprt_hood06/malachi050.mp3", "", "", 2097942464, 2987521072, Spawn) + AddConversationOption(conversation, "Won't the guards assist the agents?", "dlg_4_3") + AddConversationOption(conversation, "I'm gone!") + StartConversation(conversation, NPC, Spawn, "Go and silence the agents. They're probably still lurking near Issik's quarters. Go now and strike quickly before they slip away.") + end + end +end + +function Declined(Quest, QuestGiver, Player) +end + +function Deleted(Quest, QuestGiver, Player) +end + +function Step1_KillAgents(Quest, QuestGiver, Player) + UpdateQuestTaskGroupDescription(Quest, 1, "I have disposed of the agents and prevented them from finishing their report.") + + AddQuestStepChat(Quest, 2, "I need to speak with Malachi.", 1, "I need to tell Malachi that I have silenced the agents!", 0, 1390004) + AddQuestStepCompleteAction(Quest, 2, "QuestComplete") +end + +function QuestComplete(Quest, QuestGiver, Player) + UpdateQuestDescription(Quest, "I arrived just in time! The gents were still there and I was able to dispatch them before they had a chance to submit their report.") + + GiveQuestReward(Quest, Player) +end + +function Reload(Quest, QuestGiver, Player) + if Step == 1 then + Step1_KillAgents(Quest, QuestGiver, Player) + end +end \ No newline at end of file diff --git a/server/Quests/Sprawl/advanced_problem_solving.lua b/server/Quests/Sprawl/advanced_problem_solving.lua new file mode 100644 index 000000000..a4507eeea --- /dev/null +++ b/server/Quests/Sprawl/advanced_problem_solving.lua @@ -0,0 +1,48 @@ +--[[ + Script Name : Quests/TheSprawl/advanced_problem_solving.lua + Script Purpose : Handles the quest, "Advanced Problem Solving" + Script Author : Scatman + Script Date : 2009.07.26 + + Zone : The Sprawl + Quest Giver: Crispin Luvinius + Preceded by: Problem Solving (problem_solving.lua) + Followed by: None +--]] + +function Init(Quest) + AddQuestStepKill(Quest, 1, "I need to beat up five Giantslayer bashers.", 5, 100, "I've heard that Giantslayer bashers hang out in the Sprawl. I should pay them a little visit.", 611, 1260122, 1260032, 1260041, 1260043, 1260031, 1260121, 1260123) + AddQuestStepCompleteAction(Quest, 1, "Step1_Complete_KilledBashers") +end + +function Accepted(Quest, QuestGiver, Player) + FaceTarget(QuestGiver, Player) + conversation = CreateConversation() + + AddConversationOption(conversation, "Yah, yah.") + StartConversation(conversation, QuestGiver, Player, "Good, maybe you'll earn some respect with us.") +end + +function Declined(Quest, QuestGiver, Player) +end + +function Step1_Complete_KilledBashers(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 1, "I've beat down five Giantslayer bashers.") + UpdateQuestTaskGroupDescription(Quest, 1, "I've sent the Giantslayers a message that they shouldn't listen to vagrants who tell tall tales.") + + AddQuestStepChat(Quest, 2, "I need to talk with Crispin.", 1, "I should let Crispin know that he and his gang have nothing to worry about.", 0, 1260004) + AddQuestStepCompleteAction(Quest, 2, "Quest_Complete") +end + +function Quest_Complete(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 2, "I've spoken with Crispin.") + UpdateQuestTaskGroupDescription(Quest, 2, "I've let Crispin know these guys won't be bothering them anymore.") + GiveQuestReward(Quest, Player) + UpdateQuestDescription(Quest, "I've taken care of Crispin's problem. It seems that the guy isn't as tough as he acts.") +end + +function Reload(Quest, QuestGiver, Player) + if Step == 1 then + Step1_Complete_KilledBashers(Quest, QuestGiver, Player) + end +end \ No newline at end of file diff --git a/server/Quests/Sprawl/bullying_the_bully.lua b/server/Quests/Sprawl/bullying_the_bully.lua new file mode 100644 index 000000000..8e80a73f6 --- /dev/null +++ b/server/Quests/Sprawl/bullying_the_bully.lua @@ -0,0 +1,49 @@ +--[[ + Script Name : Quests/TheSprawl/bullying_the_bully.lua + Script Purpose : Handles the quest, "Bullying the Bully" + Script Author : Scatman + Script Date : 2009.07.25 + + Zone : The Sprawl + Quest Giver: Enforcer Kurdek + Preceded by: Training Will Get You Everywhere (training_will_get_you_everywhere.lua) + Followed by: Investigating the Black Magi (investigating_the_black_magi.lua) +--]] + +function Init(Quest) + AddQuestStepChat(Quest, 1, "I should confront Brutemaster Tarden and make him shape up.", 1, "I should find Brutemaster Tarden and show him who's boss.", 0, 1260044) + AddQuestStepCompleteAction(Quest, 1, "Step1_Complete_SpokeWithTarden") +end + +function Accepted(Quest, QuestGiver, Player) + FaceTarget(QuestGiver, Player) + conversation = CreateConversation() + + PlayFlavor(QuestGiver, "voiceover/english/tutorial_revamp/enforcer_kurdek/fprt_adv03_sprawl/quests/enforcer_kurdek025.mp3", "", "point", 3099557772, 3849829090, Player) + AddConversationOption(conversation, "I'll do it!") + StartConversation(conversation, QuestGiver, Player, "Use whatever means are necessary to teach him a lesson. Don't be afraid to push him around, because all these Giantslayers understand is violence. Now get going!") +end + +function Declined(Quest, QuestGiver, Player) +end + +function Step1_Complete_SpokeWithTarden(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 1, "I intimidated Brutemaster Tarden into doing a better job.") + UpdateQuestTaskGroupDescription(Quest, 1, "I cornered Brutemaster Tardin and roughed him up a bit.") + + AddQuestStepChat(Quest, 2, "I should return to Enforcer Kurdek near the gate to Big Bend.", 1, "I should return to Enforcer Kurdek and tell him my task was a success.", 0, 1260006) + AddQuestStepCompleteAction(Quest, 2, "Quest_Complete") +end + +function Quest_Complete(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 2, "I have returned to Enforcer Kurdek.") + UpdateQuestTaskGroupDescription(Quest, 2, "Enforcer Kurdek is pleased that I taught Brutemaster Tarden a lesson.") + GiveQuestReward(Quest, Player) + UpdateQuestDescription(Quest, "I confronted the leader of the Giantslayers, a barbarian named Brutemaster Tarden. He didn't show me much respect, but after using Dreadnaught tactics to rough him up a bit, he wisened up. Enforcer Kurdek seemed very pleased with my performance.") +end + +function Reload(Quest, QuestGiver, Player) + if Step == 1 then + Step1_Complete_SpokeWithTarden(Quest, QuestGiver, Player) + end +end \ No newline at end of file diff --git a/server/Quests/Sprawl/dominating_the_dervish.lua b/server/Quests/Sprawl/dominating_the_dervish.lua new file mode 100644 index 000000000..60344281e --- /dev/null +++ b/server/Quests/Sprawl/dominating_the_dervish.lua @@ -0,0 +1,80 @@ +--[[ + Script Name : Quests/TheSprawl/dominating_the_dervish.lua + Script Purpose : Handles the quest, "Dominating the Dervish" + Script Author : Scatman + Script Date : 2009.07.26 + + Zone : The Sprawl + Quest Giver: Enforcer Kurdek + Preceded by: Investigating the Black Magi (investigating_the_black_magi.lua) + Followed by: Heading into the Ruins (heading_into_the_ruins.lua) +--]] + +function Init(Quest) + AddQuestStepKill(Quest, 1, "I need to deliver a beating to four Dervish hooligans.", 4, 100, "I need to defeat some Dervish in battle.", 0, 1260014, 1260008, 1260015, 1260010, 1260011, 1260012, 1260118, 1260021) + AddQuestStepKill(Quest, 2, "I must defeat four Dervish hoodlums.", 4, 100, "I need to defeat some Dervish in battle.", 0, 1260110, 1260091, 1260067, 1260092, 1260111, 1260073, 1260073, 1260119, 1260103, 1260090, 1260065, 1260066, 1260113) + AddQuestStepKill(Quest, 3, "I must best two Dervish crooks in battle.", 2, 100, "I need to defeat some Dervish in battle.", 0, 1260098, 1260105, 1260100, 1260096, 1260117, 1260099, 1260089, 1260115, 1260114, 1260102, 1260101, 1260116) + AddQuestStepCompleteAction(Quest, 1, "Step1_Complete_KilledHooligans") + AddQuestStepCompleteAction(Quest, 2, "Step2_Complete_KilledHoodlums") + AddQuestStepCompleteAction(Quest, 3, "Step3_Complete_KilledCrooks") +end + +function Accepted(Quest, QuestGiver, Player) + FaceTarget(QuestGiver, Player) + conversation = CreateConversation() + + PlayFlavor(QuestGiver, "voiceover/english/tutorial_revamp/enforcer_kurdek/fprt_adv03_sprawl/quests/enforcer_kurdek039.mp3", "", "", 2511484682, 858916391, Player) + AddConversationOption(conversation, "I'll do my best.") + StartConversation(conversation, QuestGiver, Player, "Take out some of the Dervish hooligans, hoodlums, and crooks. You may have to fight your way deeper in to find some of them. Watch your back, because the Dervish don't fight fairly. But then again, neither should you! Return to me when you've taught them a lesson, and I'll reward you handsomely on behalf of the Dreadnaughts.") +end + +function Declined(Quest, QuestGiver, Player) +end + +function Step1_Complete_KilledHooligans(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 1, "I have defeated four Dervish hooligans.") + + if QuestIsComplete(Player, 256) then + Multiple_Steps_Complete(Quest, QuestGiver, Player) + end +end + +function Step2_Complete_KilledHoodlums(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 2, "I have crushed four Dervish hoodlums") + + if QuestIsComplete(Player, 256) then + Multiple_Steps_Complete(Quest, QuestGiver, Player) + end +end + +function Step3_Complete_KilledCrooks(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 3, "I must best two Dervish crooks in battle.") + + if QuestIsComplete(Player, 256) then + Multiple_Steps_Complete(Quest, QuestGiver, Player) + end +end + +function Multiple_Steps_Complete(Quest, QuestGiver, Player) + UpdateQuestTaskGroupDescription(Quest, 1, "I have taught the Dervish a lesson they won't soon forget") + + AddQuestStepChat(Quest, 4, "I should proclaim my victory to Enforcer Kurdek.", 1, "I should return to Enforcer Kurdek and tell him that I punished the Dervish.", 0, 1260006) + AddQuestStepCompleteAction(Quest, 4, "Quest_Complete") +end + +function Quest_Complete(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 4, "I have informed Enforcer Kurdek of my success.") + UpdateQuestTaskGroupDescription(Quest, 2, "I reported back to Enforcer Kurdek.") + GiveQuestReward(Quest, Player) + UpdateQuestDescription(Quest, "I defeated a lot of Dervish, but they seem to have established a strong foothold here in the Sprawl. Hopefully my efforts will help the Dreadnaughts maintain control and keep them out of Freeport proper.") +end + +function Reload(Quest, QuestGiver, Player) + if Step == 1 then + Step1_Complete_KilledHooligans(Quest, QuestGiver, Player) + elseif Step == 2 then + Step2_Complete_KilledHoodlums(Quest, QuestGiver, Player) + elseif Step == 3 then + Step3_Complete_KilledCrooks(Quest, QuestGiver, Player) + end +end \ No newline at end of file diff --git a/server/Quests/Sprawl/driving_back_the_dervish.lua b/server/Quests/Sprawl/driving_back_the_dervish.lua new file mode 100644 index 000000000..f62ef9db8 --- /dev/null +++ b/server/Quests/Sprawl/driving_back_the_dervish.lua @@ -0,0 +1,48 @@ +--[[ + Script Name : Quests/TheSprawl/driving_back_the_dervish.lua + Script Purpose : Handles the quest, "Driving Back the Dervish" + Script Author : Scatman + Script Date : 2009.07.27 + + Zone : The Sprawl + Quest Giver: Liege Aquila + Preceded by: None + Followed by: None +--]] + +function Init(Quest) + AddQuestStepKill(Quest, 1, "I must defeat eight Dervish crooks.", 8, 100, "I must battle the Dervish to keep them in line.", 611, 1260115, 1260114, 1260102, 1260101, 1260116, 1260098, 1260105, 1260100, 1260096, 1260117, 1260099, 1260089) + AddQuestStepCompleteAction(Quest, 1, "Step1_Complete_KilledCrooks") +end + +function Accepted(Quest, QuestGiver, Player) + FaceTarget(QuestGiver, Player) + conversation = CreateConversation() + + AddConversationOption(conversation, "I will do so.") + StartConversation(conversation, QuestGiver, Player, "Glad to hear it. Defeat them and return to me for your payment.") +end + +function Declined(Quest, QuestGiver, Player) +end + +function Step1_Complete_KilledCrooks(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 1, "I've defeated the Dervish in battle.") + UpdateQuestTaskGroupDescription(Quest, 1, "I've taught the Dervish a lesson.") + + AddQuestStepChat(Quest, 2, "I should report back to Liege Aquila.", 1, "I should report back to Liege Aquila near the gate to the Ruins.", 0, 1260109) + AddQuestStepCompleteAction(Quest, 2, "Quest_Complete") +end + +function Quest_Complete(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 2, "I have reported back to Liege Aquila.") + UpdateQuestTaskGroupDescription(Quest, 2, "I reported back to Liege Aquila.") + GiveQuestReward(Quest, Player) + UpdateQuestDescription(Quest, "I fought back against the Dervish in the Sprawl. So far they seem to be contained, but their numbers are significant. I fear this battle will be ongoing.") +end + +function Reload(Quest, QuestGiver, Player) + if Step == 1 then + Step1_Complete_KilledCrooks(Quest, QuestGiver, Player) + end +end \ No newline at end of file diff --git a/server/Quests/Sprawl/heading_to_the_ruins.lua b/server/Quests/Sprawl/heading_to_the_ruins.lua new file mode 100644 index 000000000..b3105d658 --- /dev/null +++ b/server/Quests/Sprawl/heading_to_the_ruins.lua @@ -0,0 +1,38 @@ +--[[ + Script Name : Quests/TheSprawl/heading_into_the_ruins.lua + Script Purpose : Handles the quest, "Heading into the Ruins" + Script Author : Scatman + Script Date : 2009.07.26 + + Zone : The Sprawl + Quest Giver: Enforcer Kurdek + Preceded by: Dominating the Dervish (dominating_the_dervish.lua) + Followed by: None +--]] + +function Init(Quest) + AddQuestStepChat(Quest, 1, "I must make my way to the Freeport Ruins and speak to Captain Arellius. I should return to the docks of my home district and use the bell to summon transport outside of Freeport proper.", 1, "I should make my way to the Ruins and speak to to Captain Arellius.", 0, 1270003) + AddQuestStepCompleteAction(Quest, 1, "Quest_Complete") +end + +function Accepted(Quest, QuestGiver, Player) + FaceTarget(QuestGiver, Player) + conversation = CreateConversation() + + PlayFlavor(QuestGiver, "voiceover/english/tutorial_revamp/enforcer_kurdek/fprt_adv03_sprawl/quests/enforcer_kurdek043.mp3", "", "", 1861012696, 1699746787, Player) + AddConversationOption(conversation, "How should I get there?", "dlg_32_4") + StartConversation(conversation, QuestGiver, Player, "Don't linger here too long, adventurer. I just got word of something major happening in the Ruins of old Freeport. You need to get there as soon as possible and lend a hand in defending the city.") +end + +function Declined(Quest, QuestGiver, Player) +end + +function Quest_Complete(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 1, "I made my way to the Ruins and have spoken to Captain Arellius.") + UpdateQuestTaskGroupDescription(Quest, 1, "I have found Captain Arellius in the Ruins.") + GiveQuestReward(Quest, Player) + UpdateQuestDescription(Quest, "I found the Ruins and have reported to Captain Arellius. I will now see what duties she needs me to perform.") +end + +function Reload(Quest, QuestGiver, Player) +end \ No newline at end of file diff --git a/server/Quests/Sprawl/investigating_the_black_magi.lua b/server/Quests/Sprawl/investigating_the_black_magi.lua new file mode 100644 index 000000000..8aa8ddef7 --- /dev/null +++ b/server/Quests/Sprawl/investigating_the_black_magi.lua @@ -0,0 +1,50 @@ +--[[ + Script Name : Quests/TheSprawl/investigating_the_black_magi.lua + Script Purpose : Handles the quest, "Investigating the Black Magi" + Script Author : Scatman + Script Date : 2009.07.26 + + Zone : The Sprawl + Quest Giver: Enforcer Kurdek + Preceded by: Bullying the Bully (bullying_the_bully.lua) + Followed by: Dominating the Dervish (dominating_the_dervish.lua) +--]] + +function Init(Quest) + AddQuestStepChat(Quest, 1, "I should look for a ratonga named Tikkeri and trick her into revealing information about the Black Magi.", 1, "I should seek a ratonga named Tikkeri deep inside the Black Magi area.", 0, 1260094) + AddQuestStepCompleteAction(Quest, 1, "Step1_Complete_SpokeWithTikkeri") +end + +function Accepted(Quest, QuestGiver, Player) + FaceTarget(QuestGiver, Player) + conversation = CreateConversation() + + PlayFlavor(QuestGiver, "voiceover/english/tutorial_revamp/enforcer_kurdek/fprt_adv03_sprawl/quests/enforcer_kurdek030.mp3", "", "", 903390823, 1009474399, Player) + AddConversationOption(conversation, "Do you have any suggestions on how I could get her to trust me?", "dlg_27_5") + AddConversationOption(conversation, "This sounds like a lost cause.") + StartConversation(conversation, QuestGiver, Player, "Far back among the burned-out houses they inhabit is one of their leaders, a rat named Tikkeri. Find her and see if she'll talk to you. The Black Magi are extremely secretive, so I'm not sure if Tikkeri will trust you.") +end + +function Declined(Quest, QuestGiver, Player) +end + +function Step1_Complete_SpokeWithTikkeri(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 1, "I found Arcanist Tikkeri and learned a clue about some organization called 'the Marked.'") + UpdateQuestTaskGroupDescription(Quest, 1, "I found Arcanist Tikkeri and found out about some organization called 'the Marked.'") + + AddQuestStepChat(Quest, 2, "I should return to Enforcer Kurdek near the gate to Big Bend.", 1, "I should return to Enforcer Kurdek and tell him what I learned.", 0, 1260006) + AddQuestStepCompleteAction(Quest, 2, "Quest_Complete") +end + +function Quest_Complete(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 2, "I have reported back to Enforcer Kurdek.") + UpdateQuestTaskGroupDescription(Quest, 2, "I have reported back to Enforcer Kurdek.") + GiveQuestReward(Quest, Player) + UpdateQuestDescription(Quest, "I found Arcanish Tikkeri deep inside the Sprawl and tried to trick her by pretending that I had information about some kind of wheel. She saw through my plan, but not before I found out about some organization called 'the Marked.' I let Enforcer Kurdek know what I found out, and he will let the Dreadnaughts know so that the matter can be investigated more fully.") +end + +function Reload(Quest, QuestGiver, Player) + if Step == 1 then + Step1_Complete_SpokeWithTikkeri(Quest, QuestGiver, Player) + end +end \ No newline at end of file diff --git a/server/Quests/Sprawl/problem_solving.lua b/server/Quests/Sprawl/problem_solving.lua new file mode 100644 index 000000000..2573859e1 --- /dev/null +++ b/server/Quests/Sprawl/problem_solving.lua @@ -0,0 +1,48 @@ +--[[ + Script Name : Quests/TheSprawl/problem_solving.lua + Script Purpose : Handles the quest, "Problem Solving" + Script Author : Scatman + Script Date : 2009.07.26 + + Zone : The Sprawl + Quest Giver: Crispin Luvinius + Preceded by: None + Followed by: Advanced Problem Solving (advanced_problem_solving.lua) +--]] + +function Init(Quest) + AddQuestStepKill(Quest, 1, "I need to kill five Dervish hoodlums.", 5, 100, "I need to send a message to the Dervish hoodlums in the Sprawl. The message will involve a lot of them breathing dirt.", 611, 1260092, 1260067, 1260111, 1260073, 1260112, 1260119, 1260103, 1260090, 1260065, 1260066, 1260113, 1260110, 1260091) + AddQuestStepCompleteAction(Quest, 1, "Step1_Complete_KilledHoodlums") +end + +function Accepted(Quest, QuestGiver, Player) + FaceTarget(QuestGiver, Player) + conversation = CreateConversation() + + AddConversationOption(conversation, "All right.") + StartConversation(conversation, QuestGiver, Player, "Come back when you're done.") +end + +function Declined(Quest, QuestGiver, Player) +end + +function Step1_Complete_KilledHoodlums(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 1, "I've dealt with the hoodlums.") + UpdateQuestTaskGroupDescription(Quest, 1, "Those hoodlums got the message loud and clear.") + + AddQuestStepChat(Quest, 2, "I need to talk with Crispin.", 1, "I should let Crispin in know that his problem has been solved. I should get paid, too.", 0, 1260004) + AddQuestStepCompleteAction(Quest, 2, "Quest_Complete") +end + +function Quest_Complete(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 2, "I've spoken with Crispin.") + UpdateQuestTaskGroupDescription(Quest, 2, "I've let Crispin know that I've solved his problem.") + GiveQuestReward(Quest, Player) + UpdateQuestDescription(Quest, "I've taken care of Crispin's problem. I think it won't be too long before his business partner decides to do what he was told to do.") +end + +function Reload(Quest, QuestGiver, Player) + if Step == 1 then + Step1_Complete_KilledHoodlums(Quest, QuestGiver, Player) + end +end \ No newline at end of file diff --git a/server/Quests/Sprawl/show_em_whos_boss.lua b/server/Quests/Sprawl/show_em_whos_boss.lua new file mode 100644 index 000000000..af1cad675 --- /dev/null +++ b/server/Quests/Sprawl/show_em_whos_boss.lua @@ -0,0 +1,109 @@ +--[[ + Script Name : Quests/TheSprawl/show_em_whos_boss.lua + Script Purpose : Handles the quest, "Show 'Em Who's Boss" + Script Author : Scatman + Script Date : 2009.07.26 + + Zone : The Sprawl + Quest Giver: Trainer Durbok + Preceded by: None + Followed by: None +--]] + +function Init(Quest) + local choice = math.random(1, 6) + if choice == 1 then + AddQuestStepKill(Quest, 1, "I should deliver a beating to six Dervish crooks.", 6, 100, "I need to defeat some rival gang members to show them the Dreadnaughts cannot be trifled with.", 611, ID) + AddQuestStepCompleteAction(Quest, 1, "Step1_Complete_KilledCrooks") + elseif choice == 2 then + AddQuestStepKill(Quest, 1, "I should deliver a beating to six Dervish hoodlums.", 6, 100, "I need to defeat some rival gang members to show them the Dreadnaughts cannot be trifled with.", 611, ID) + AddQuestStepCompleteAction(Quest, 1, "Step1_Complete_KilledHoodlums") + elseif choice == 3 then + AddQuestStepKill(Quest, 1, "I should deliver a beating to six Black Magi anarchists.", 6, 100, "I need to defeat some rival gang members to show them the Dreadnaughts cannot be trifled with.", 611, ID) + AddQuestStepCompleteAction(Quest, 1, "Step1_Complete_KilledAnarchists") + elseif choice == 4 then + AddQuestStepKill(Quest, 1, "I should deliver a beating to six Black Magi fanatics.", 6, 100, "I need to defeat some rival gang members to show them the Dreadnaughts cannot be trifled with.", 611, ID) + AddQuestStepCompleteAction(Quest, 1, "Step1_Complete_KilledFanatics") + elseif choice == 5 then + AddQuestStepKill(Quest, 1, "I should deliver a beating to six Black Magi dissidents.", 6, 100, "I need to defeat some rival gang members to show them the Dreadnaughts cannot be trifled with.", 611, ID) + AddQuestStepCompleteAction(Quest, 1, "Step1_Complete_KilledDissidents") + elseif choice == 6 then + AddQuestStepKill(Quest, 1, "I should deliver a beating to six Black Magi insurgents.", 6, 100, "I need to defeat some rival gang members to show them the Dreadnaughts cannot be trifled with.", 611, ID) + AddQuestStepCompleteAction(Quest, 1, "Step1_Complete_KilledInsurgents") + end +end + +function Accepted(Quest, QuestGiver, Player) + FaceTarget(QuestGiver, Player) + conversation = CreateConversation() + + PlayFlavor(QuestGiver, "voiceover/english/tutorial_revamp/trainer_durbok/fprt_adv03_sprawl/quests/trainer_durbok008.mp3", "", "", 2693497223, 3993753671, Player) + AddConversationOption(conversation, "Will do.") + StartConversation(conversation, QuestGiver, Player, "Sounds good. I'll jot down the particulars in your journal. Come back to me for payment when you're finished showing those scum who's boss.") +end + +function Declined(Quest, QuestGiver, Player) +end + +function Step1_Complete_KilledCrooks(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 1, "I have defeated six Dervish crooks.") + Step1_Complete_NextStep(Quest, QuestGiver, Player) +end + +function Step1_Complete_KilledHoodlums(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 1, "I have defeated six Dervish hoodlums.") + Step1_Complete_NextStep(Quest, QuestGiver, Player) +end + +function Step1_Complete_KilledAnarchists(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 1, "I have defeated six Black Magi anarchists.") + Step1_Complete_NextStep(Quest, QuestGiver, Player) +end + +function Step1_Complete_KilledFanatics(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 1, "I have defeated six Black Magi fanatics.") + Step1_Complete_NextStep(Quest, QuestGiver, Player) +end + +function Step1_Complete_KilledDissidents(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 1, "I have defeated six Black Magi dissidents.") + Step1_Complete_NextStep(Quest, QuestGiver, Player) +end + +function Step1_Complete_KilledInsurgents(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 1, "I have defeated six Black Magi insurgents.") + Step1_Complete_NextStep(Quest, QuestGiver, Player) +end + +function Step1_Complete_NextStep(Quest, QuestGiver, Player) + UpdateQuestTaskGroupDescription(Quest, 1, "I taught the Dreadnaughts' rivals a valuable lesson in pain.") + + AddQuestStepChat(Quest, 2, "I should return to Trainer Durbok near the Giantslayers for my reward.", 1, "Having taught those thugs a lesson, I should return to Trainer Durbok.", 0, 1260027) + AddQuestStepCompleteAction(Quest, 2, "Quest_Complete") +end + +function Quest_Complete(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 2, "I have received my reward from Trainer Durbok.") + UpdateQuestTaskGroupDescription(Quest, 2, "I let Trainer Durbok know my efforts were a success.") + GiveQuestReward(Quest, Player) + UpdateQuestDescription(Quest, "I have defeated the enemies of the Dreadnaughts and taught those rival gangs a lesson. The Sprawl should be a bit more orderly thanks to my efforts.") +end + +function Reload(Quest, QuestGiver, Player) + if Step == 1 then + local choice = math.random(1, 6) + if choice == 1 then + Step1_Complete_KilledCrooks(Quest, QuestGiver, Player) + elseif choice == 2 then + Step1_Complete_KilledHoodlums(Quest, QuestGiver, Player) + elseif choice == 3 then + Step1_Complete_KilledAnarchists(Quest, QuestGiver, Player) + elseif choice == 4 then + Step1_Complete_KilledFanatics(Quest, QuestGiver, Player) + elseif choice == 5 then + Step1_Complete_KilledDissidents(Quest, QuestGiver, Player) + elseif choice == 6 then + Step1_Complete_KilledInsurgents(Quest, QuestGiver, Player) + end + end +end \ No newline at end of file diff --git a/server/Quests/Sprawl/training_will_get_you_everywhere.lua b/server/Quests/Sprawl/training_will_get_you_everywhere.lua new file mode 100644 index 000000000..455c3641c --- /dev/null +++ b/server/Quests/Sprawl/training_will_get_you_everywhere.lua @@ -0,0 +1,49 @@ +--[[ + Script Name : Quests/TheSprawl/training_will_get_you_everywhere.lua + Script Purpose : Handles the quest, "Training Will Get You Everywhere" + Script Author : Scatman + Script Date : 2009.07.25 + + Zone : The Sprawl + Quest Giver: Enforcer Kurdek + Preceded by: None + Followed by: Bullying the Bully (bullying_the_bully.lua) +--]] + +function Init(Quest) + AddQuestStepChat(Quest, 1, "I must find Trainer Durbok and ask him how his training of the Giantslayers is progressing.", 1, "I need to speak to Trainer Durbok, who is teaching combat to the Giantslayers.", 0, 1260027) + AddQuestStepCompleteAction(Quest, 1, "Step1_Complete_SpokeWithDurbok") +end + +function Accepted(Quest, QuestGiver, Player) + FaceTarget(QuestGiver, Player) + conversation = CreateConversation() + + PlayFlavor(QuestGiver, "voiceover/english/tutorial_revamp/enforcer_kurdek/fprt_adv03_sprawl/quests/enforcer_kurdek020.mp3", "", "", 593639931, 1053980414, Player) + AddConversationOption(conversation, "I'll be back when I have your information.") + StartConversation(conversation, QuestGiver, Player, "Trainer Durbok can be found ahead and to the right. Just follow the path to the west and north. You'll pass a whole lot of Giantslayers, but don't let them intimidate you. Remember, you're on official Dreadnaught business!") +end + +function Declined(Quest, QuestGiver, Player) +end + +function Step1_Complete_SpokeWithDurbok(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 1, "I have spoken to Trainer Durbok, who is displeased with the progress of the Giantslayers.") + UpdateQuestTaskGroupDescription(Quest, 1, "I have spoken to Trainer Durbok and must tell Enforcer Kurdek what I have learned.") + + AddQuestStepChat(Quest, 2, "I should return to Enforcer Kurdek near the gate to Big Bend.", 1, "I must return to Enforcer Kurdek with my report.", 0, 1260006) + AddQuestStepCompleteAction(Quest, 2, "Quest_Complete") +end + +function Quest_Complete(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 2, "I have returned to Enforcer Kurdek and told him what I learned from Trainer Durbok.") + UpdateQuestTaskGroupDescription(Quest, 2, "I have reported back to Enforcer Kurdek.") + GiveQuestReward(Quest, Player) + UpdateQuestDescription(Quest, "I spoke with Trainer Durbok, who feels that the Giantslayers are not focused enough on their training. He feels that their leader, Brutemaster Tarden, is responsible for this failing. Enforcer Kurdek has been notified and is none too happy about it.") +end + +function Reload(Quest, QuestGiver, Player) + if Step == 1 then + Step1_Complete_SpokeWithDurbok(Quest, QuestGiver, Player) + end +end \ No newline at end of file diff --git a/server/Quests/StarcrestCommune/AngeliasCorrespondence.lua b/server/Quests/StarcrestCommune/AngeliasCorrespondence.lua new file mode 100644 index 000000000..4f2012d4a --- /dev/null +++ b/server/Quests/StarcrestCommune/AngeliasCorrespondence.lua @@ -0,0 +1,32 @@ +--[[ + Script Name : Quests/StarcrestCommune/AngeliasCorrespondence.lua + Script Author : Jabantiz + Script Date : 2018.06.14 08:06:17 + Script Purpose : + + Zone : StarcrestCommune + Quest Giver: + Preceded by: None + Followed by: +--]] + +function Init(Quest) + +end + +function Accepted(Quest, QuestGiver, Player) + +end + +function Declined(Quest, QuestGiver, Player) + +end + +function quest_complete(Quest, QuestGiver, Player) + +end + +function Reload(Quest, QuestGiver, Player, Step) + +end + diff --git a/server/Quests/StarcrestCommune/BogSludgeHunt.lua b/server/Quests/StarcrestCommune/BogSludgeHunt.lua new file mode 100644 index 000000000..6039a17fb --- /dev/null +++ b/server/Quests/StarcrestCommune/BogSludgeHunt.lua @@ -0,0 +1,52 @@ +--[[ + Script Name : BogSludgeHunt.lua + Script Purpose : Handles the quest, "Bog Sludge Hunt" + Script Author : EmemJr + Script Date : 10/28/2017 + Script Notes : + + Zone : Peat Bog + Quest Giver : + Preceded by : None + Followed by : None +--]] + + +function Init(Quest) + AddQuestStepKill(Quest, 1, "I must kill several bog sludges", 10, 100, "I need to kill Bog Sludges in the Peat Bog.", 346, 1980002) + AddQuestStepCompleteAction(Quest, 1, "Step1Complete") +end + +function Step1Complete(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 1, "I have killed the bog sludges.") + + AddQuestStepChat(Quest, 2, "I need to return to Captain Santis.", 1, "I should return to Captain Santis for my reward.", 11, 2340018) + AddQuestStepCompleteAction(Quest, 2, "QuestComplete") +end + +function QuestComplete(Quest, QuestGiver, Player) + -- The following UpdateQuestStepDescription and UpdateTaskGroupDescription are not needed, parser adds them for completion in case stuff needs to be moved around + UpdateQuestStepDescription(Quest, 2, "I spoke to Captain Santis.") + UpdateQuestTaskGroupDescription(Quest, 2, "I received my reward for defeating the Bog Sludges.") + + UpdateQuestDescription(Quest, "I was able to make the Peat Bog a little safer for others by getting rid of several Bog Sludges. I also made a little coin on the side thanks to the payment from Captain Santis.
") + GiveQuestReward(Quest, Player) +end + +function Reload(Quest, QuestGiver, Player, Step) + if Step == 1 then + Step1Complete(Quest, QuestGiver, Player) + elseif Step == 2 then + QuestComplete(Quest, QuestGiver, Player) + end +end + +function Accepted(Quest, QuestGiver, Player) + -- Add dialog here for when the quest is accepted +end + +function Declined(Quest, QuestGiver, Player) + -- Add dialog here for when the quest is declined +end + + diff --git a/server/Quests/StarcrestCommune/BuildingFawnsGarden.lua b/server/Quests/StarcrestCommune/BuildingFawnsGarden.lua new file mode 100644 index 000000000..ea9ef5c04 --- /dev/null +++ b/server/Quests/StarcrestCommune/BuildingFawnsGarden.lua @@ -0,0 +1,72 @@ +--[[ + Script Name : BuildingFawnsGarden.lua + Script Purpose : Handles the quest, "Building Fawn's Garden" + Script Author : Ememjr + Script Date : 10/29/2017 + Script Notes : + + Zone : Starcrest Commune + Quest Giver : + Preceded by : None + Followed by : None +--]] + + +function Init(Quest) + AddQuestStepKill(Quest, 1, "I need to kill sand covered crabs to obtain their diatomaceous sand for Fawn's garden.", 5, 90, "She told me that I can probably find what she requires off of various creatures in Antonica. Some diatomaceous sand to add to her soil will help protect her garden, some fish eggs for fertilizer and some seeds to get her started should be a good start.", 11, 120417,120750,121479) + AddQuestStepKill(Quest, 2, "I need to gather some fish eggs from Coldwind barracuda off the coast of Antonica.", 5, 90, "She told me that I can probably find what she requires off of various creatures in Antonica. Some diatomaceous sand to add to her soil will help protect her garden, some fish eggs for fertilizer and some seeds to get her started should be a good start.", 11, 120081, 121238) + AddQuestStepKill(Quest, 3, "I need to gather some seeds from the fur of Antonican mammals.", 5, 90, "She told me that I can probably find what she requires off of various creatures in Antonica. Some diatomaceous sand to add to her soil will help protect her garden, some fish eggs for fertilizer and some seeds to get her started should be a good start.", 11, 120257,120119,120008) + + + + AddQuestStepCompleteAction(Quest, 1, "Step1_Complete") + AddQuestStepCompleteAction(Quest, 2, "Step2_Complete") + AddQuestStepCompleteAction(Quest, 3, "Step3_Complete") + +end + +function step1_complete(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 1, "I've managed to gather the sand needed for Fawn's garden.") + if QuestIsComplete(Player, EbiksMissingParts) then + givePartsToEbik(Quest, QuestGiver, Player) + end +end + +function step2_complete(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 2, " I've gathered enough fish eggs for Fawn's garden.") + if QuestIsComplete(Player, EbiksMissingParts) then + givePartsToEbik(Quest, QuestGiver, Player) + end +end + +function step3_complete(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 3, " I've gathered enough seeds for Fawn to use in her garden.") + if QuestIsComplete(Player, EbiksMissingParts) then + givePartsToEbik(Quest, QuestGiver, Player) + end +end +function giveitemstoFawn(Quest, QuestGiver, Player) + UpdateQuestTaskGroupDescription(Quest, 1, "I've managed to gather everything for Fawn Starstone's garden.") + AddQuestStepChat(Quest, 4, " Return to Fawn in Starcrest Commune.", 1, "I need to give these items to Fawn for her garden.", 0, 2530059) + AddQuestStepCompleteAction(Quest, 4, "quest_complete_gavePartsToEbik") +end +function quest_complete_gaveitemstoFawn(Quest, QuestGiver, Player) + UpdateQuestTaskGroupDescription(Quest, 2, "I've given Fawn the items she needs for her garden.") + UpdateQuestDescription(Quest, "I've gathered the items Fawn needs for her garden. She was so appreciative, she gave me a little gift for my efforts.") + GiveQuestReward(Quest, Player) +end + + +function Reload(Quest, QuestGiver, Player, Step) + --if Step == 1 then + -- QuestComplete(Quest, QuestGiver, Player) + --end +end + +function Accepted(Quest, QuestGiver, Player) + -- Add dialog here for when the quest is accepted +end + +function Declined(Quest, QuestGiver, Player) + -- Add dialog here for when the quest is declined +end \ No newline at end of file diff --git a/server/Quests/StarcrestCommune/EruditeDebate.lua b/server/Quests/StarcrestCommune/EruditeDebate.lua new file mode 100644 index 000000000..a5e892455 --- /dev/null +++ b/server/Quests/StarcrestCommune/EruditeDebate.lua @@ -0,0 +1,32 @@ +--[[ + Script Name : Quests/StarcrestCommune/EruditeDebate.lua + Script Author : Jabantiz + Script Date : 2017.12.30 05:12:26 + Script Purpose : + + Zone : StarcrestCommune + Quest Giver: + Preceded by: None + Followed by: +--]] + +function Init(Quest) + +end + +function Accepted(Quest, QuestGiver, Player) + +end + +function Declined(Quest, QuestGiver, Player) + +end + +function quest_complete(Quest, QuestGiver, Player) + +end + +function Reload(Quest, QuestGiver, Player, Step) + +end + diff --git a/server/Quests/StarcrestCommune/FarnsbysNewAxe.lua b/server/Quests/StarcrestCommune/FarnsbysNewAxe.lua new file mode 100644 index 000000000..67559a96a --- /dev/null +++ b/server/Quests/StarcrestCommune/FarnsbysNewAxe.lua @@ -0,0 +1,32 @@ +--[[ + Script Name : Quests/StarcrestCommune/FarnsbysNewAxe.lua + Script Author : Jabantiz + Script Date : 2017.12.30 05:12:15 + Script Purpose : + + Zone : StarcrestCommune + Quest Giver: + Preceded by: None + Followed by: +--]] + +function Init(Quest) + +end + +function Accepted(Quest, QuestGiver, Player) + +end + +function Declined(Quest, QuestGiver, Player) + +end + +function quest_complete(Quest, QuestGiver, Player) + +end + +function Reload(Quest, QuestGiver, Player, Step) + +end + diff --git a/server/Quests/StarcrestCommune/GatheringGlowmyst.lua b/server/Quests/StarcrestCommune/GatheringGlowmyst.lua new file mode 100644 index 000000000..15c086ce7 --- /dev/null +++ b/server/Quests/StarcrestCommune/GatheringGlowmyst.lua @@ -0,0 +1,55 @@ +--[[ + Script Name : Quests/StarcrestCommune/GatheringGlowmyst.lua + Script Purpose : Handles the quest, "Gathering Glowmyst" + Script Author : Jabantiz + Script Date : 6/15/2018 + Script Notes : + + Zone : Starcrest Commune + Quest Giver : Bermo (2340025) + Preceded by : None + Followed by : None +--]] + + +function Init(Quest) + AddQuestStepKill(Quest, 1, "I must gather glowmyst from the beetles in Oakmyst Forest", 10, 100, "I need to gather up glowmyst juice from Oakmyst Forest, reachable by any number of mariner bells within Qeynos, by hunting down glowmyst beetles.", 1204, 1950002) + AddQuestStepCompleteAction(Quest, 1, "Step1Complete") +end + +function Step1Complete(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 1, "I have gathered the glowmyst Bermo needed.") + UpdateQuestTaskGroupDescription(Quest, 1, "I've successfully gathered the glowmyst juice I need!") + + AddQuestStepChat(Quest, 2, "I need to return to Bartender Bermo", 1, "I should return to Bartender Bermo in the Lion's Mane Inn and Tavern in the Qeynos Capitol District.", 11, 2340025) + AddQuestStepCompleteAction(Quest, 2, "QuestComplete") +end + +function QuestComplete(Quest, QuestGiver, Player) + -- The following UpdateQuestStepDescription and UpdateTaskGroupDescription are not needed, parser adds them for completion in case stuff needs to be moved around + UpdateQuestStepDescription(Quest, 2, "I've spoken with Bartender Bermo.") + UpdateQuestTaskGroupDescription(Quest, 2, "I spoke with Bartender Bermo regarding the glowmyst juice I brought him.") + + UpdateQuestDescription(Quest, "I returned to Bartender Bermo with all the juice he needed. Finding all ten beetles took quite some time, but in the end I persevered!") + GiveQuestReward(Quest, Player) +end + +function Reload(Quest, QuestGiver, Player, Step) + if Step == 1 then + Step1Complete(Quest, QuestGiver, Player) + elseif Step == 2 then + QuestComplete(Quest, QuestGiver, Player) + end +end + +function Accepted(Quest, QuestGiver, Player) + -- Add dialog here for when the quest is accepted +end + +function Declined(Quest, QuestGiver, Player) + -- Add dialog here for when the quest is declined +end + +function Deleted(Quest, QuestGiver, Player) + -- Remove any quest specific items here when the quest is deleted +end \ No newline at end of file diff --git a/server/Quests/StarcrestCommune/KittyWantstoPlay.lua b/server/Quests/StarcrestCommune/KittyWantstoPlay.lua new file mode 100644 index 000000000..c9e0e853a --- /dev/null +++ b/server/Quests/StarcrestCommune/KittyWantstoPlay.lua @@ -0,0 +1,32 @@ +--[[ + Script Name : Quests/StarcrestCommune/KittyWantstoPlay.lua + Script Author : Jabantiz + Script Date : 2017.12.30 05:12:38 + Script Purpose : + + Zone : StarcrestCommune + Quest Giver: + Preceded by: None + Followed by: +--]] + +function Init(Quest) + +end + +function Accepted(Quest, QuestGiver, Player) + +end + +function Declined(Quest, QuestGiver, Player) + +end + +function quest_complete(Quest, QuestGiver, Player) + +end + +function Reload(Quest, QuestGiver, Player, Step) + +end + diff --git a/server/Quests/StarcrestCommune/SoberingRemedy.lua b/server/Quests/StarcrestCommune/SoberingRemedy.lua new file mode 100644 index 000000000..8725c738d --- /dev/null +++ b/server/Quests/StarcrestCommune/SoberingRemedy.lua @@ -0,0 +1,92 @@ +--[[ + Script Name : SoberingRemedy.lua + Script Purpose : Handles the quest, "Sobering Remedy" + Script Author : QuestParser (Replace this) + Script Date : 6/15/2018 + Script Notes : + + Zone : Starcrest Commune + Quest Giver : Vondorinsarnoo (2340023) + Preceded by : None + Followed by : None +--]] + +-- Quest ID's +local SOBERING_REMEDY = 246 + +function Init(Quest) + AddQuestStepKill(Quest, 1, "I must gather pieces from bog slugs", 1, 100, "I need to gather the components for Vondorinsarnoo's concoction from the Peat Bog, reachable by mariner bell within the City of Qeynos.", 289, 1980018) + AddQuestStepKill(Quest, 2, "I must gather whiskers from large scavengers", 1, 100, "I need to gather the components for Vondorinsarnoo's concoction from the Peat Bog, reachable by mariner bell within the City of Qeynos.", 2123, 1980017) + AddQuestStepKill(Quest, 3, "I must gather bile from bog sludges", 1, 100, "I need to gather the components for Vondorinsarnoo's concoction from the Peat Bog, reachable by mariner bell within the City of Qeynos.", 1162, 1980002) + AddQuestStepCompleteAction(Quest, 1, "Step1Complete") + AddQuestStepCompleteAction(Quest, 2, "Step2Complete") + AddQuestStepCompleteAction(Quest, 3, "Step3Complete") +end + +function Step1Complete(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 1, "I have what I need from the bog slugs") + + DoneWithSteps(Quest, QuestGiver, Player) +end + +function Step2Complete(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 2, "I have gathered the whiskers I need.") + + DoneWithSteps(Quest, QuestGiver, Player) +end + +function Step3Complete(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 3, "I have gathered the bile I needed.") + + DoneWithSteps(Quest, QuestGiver, Player) +end + +function DoneWithSteps(Quest, QuestGiver, Player) + if QuestIsComplete(Player, SOBERING_REMEDY) then + GiveStep4(Quest, QuestGiver, Player) + end +end + +function GiveStep4(Quest, QuestGiver, Player) + UpdateQuestTaskGroupDescription(Quest, 1, "I've successfully gathered what Vondorinsarnoo's concoction calls for.") + + AddQuestStepChat(Quest, 4, "I must return to Vondorinsarnoo", 1, "I need to return to Vondorinsarnoo to give him the items for the concoction.", 11, 2340023) + AddQuestStepCompleteAction(Quest, 4, "QuestComplete") +end + +function QuestComplete(Quest, QuestGiver, Player) + -- The following UpdateQuestStepDescription and UpdateTaskGroupDescription are not needed, parser adds them for completion in case stuff needs to be moved around + UpdateQuestStepDescription(Quest, 4, "I've spoken with Vondorinsarnoo.") + UpdateQuestTaskGroupDescription(Quest, 2, "I've spoken with Vondorinsarnoo and given him the components he needed.") + + UpdateQuestDescription(Quest, "I retrieved the items Vondorinsarnoo required for the concoction. The mixture will undoubtedly be strong enough to bring an ogre to its knees, and should perform quite well in removing whatever contents that drunk's stomach held, including the ale.") + GiveQuestReward(Quest, Player) +end + +function Reload(Quest, QuestGiver, Player, Step) + if Step == 1 then + Step1Complete(Quest, QuestGiver, Player) + elseif Step == 2 then + Step2Complete(Quest, QuestGiver, Player) + elseif Step == 3 then + Step3Complete(Quest, QuestGiver, Player) + elseif Step == 4 then + QuestComplete(Quest, QuestGiver, Player) + end +end + +function Accepted(Quest, QuestGiver, Player) + FaceTarget(QuestGiver, Player) + local conversation = CreateConversation() + + AddConversationOption(conversation, "These items shouldn't be too difficult to find.", "dlg_59_3") + StartConversation(conversation, QuestGiver, Player, "I'll write in your journal what I need from the local Peat Bog. I'll create a concoction so foul that he'll expel what resides in his belly.") +end + +function Declined(Quest, QuestGiver, Player) + -- Add dialog here for when the quest is declined +end + +function Deleted(Quest, QuestGiver, Player) + -- Remove any quest specific items here when the quest is deleted +end \ No newline at end of file diff --git a/server/Quests/StarcrestCommune/confrontation.lua b/server/Quests/StarcrestCommune/confrontation.lua new file mode 100644 index 000000000..a78ee2257 --- /dev/null +++ b/server/Quests/StarcrestCommune/confrontation.lua @@ -0,0 +1,82 @@ +--[[ + Script Name : Quests/StarcrestCommune/confrontation.lua + Script Purpose : Handles the quest, "Confrontation" + Script Author : Scatman + Script Date : 2008.09.21 + + Zone : Starcrest Commune + Quest Giver: Maareona Ludimintium + Preceded by: Hidden Treasures (hidden_treasures.lua) + Followed by: +--]] + +-- Items ID's +local FOLDING_STAND = 7379 +local NULLIFICATION_STONE = 10087 +local SOUL_SPIKE = 13134 + +function Init(Quest) + AddQuestStepChat(Quest, 1, "I need to retrieve materials for a public demonstration from Cayan Sable. I can get to Cayan by climbing the bench behind the northwest corner of the armor shop.", 1, "I will need to confront the intended recipient of the package we intercepted. Cayan may know where to find him.", 0, 2340009) + AddQuestStepCompleteAction(Quest, 1, "step1_complete_talkedToCayan") +end + +function Accepted(Quest, QuestGiver, Player) + if QuestGiver ~= nil then + if GetDistance(Player, QuestGiver) < 30 then + FaceTarget(QuestGiver, Player) + conversation = CreateConversation() + + PlayFlavor(QuestGiver, "voiceover/english/tutorial_revamp/maareona_ludimintium/qey_village02/quests/maareona/maareona029.mp3", "", "", 2162492923, 520954117, Player) + AddConversationOption(conversation, "How do I destroy the soul spike?", "TapIt") + StartConversation(conversation, QuestGiver, Player, "He might, but do not worry. He will not harm you, not here. At most he will attempt to pull you to Freeport with him. I do not think I need to lecture you on that.") + end + end +end + +function Declined(Quest, QuestGiver, Player) +end + +function Deleted(Quest, QuestGiver, Player) + while HasItem(Player, FOLDING_STAND, 1) do + RemoveItem(Player, FOLDING_STAND) + end + + while HasItem(Player, NULLIFICATION_STONE, 1) do + RemoveItem(Player, NULLIFICATION_STONE) + end + + while HasItem(Player, SOUL_SPIKE, 1) do + RemoveItem(Player, SOUL_SPIKE) + end +end + +function step1_complete_talkedToCayan(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 1, "I have gotten the needed materials.") + + -- folding stand + SummonItem(Spawn, FOLDING_STAND) + + AddQuestStep(Quest, 2, "I need to put a display in the central area of the Starcrest Commune, near the fountain of Deep Reflection.", 1, 100, "I will need to confront the intended recipient of the package we intercepted. Cayan may know where to find him.") + AddQuestStepCompleteAction(Quest, 2, "step2_complete_placedDisplay") +end + +function step2_complete_placedDisplay(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 2, "I put on my demonstration. Velderoth Malraen attempted to interrupt me.") + + AddQuestStepChat(Quest, 3, "I need to return to Maareona and tell her what happened.", 1, "I will need to confront the intended recipient of the package we intercepted. Cayan may know where to find him.", 0, 2340006) + AddQuestStepCompleteAction(Quest, 3, "QuestComplete") +end + +function QuestComplete(Quest, QuestGiver, Player) + UpdateQuestDescription(Quest, 3, "I have spoken with Maareona.") + UpdateQuestTaskGroupDescription(Quest, 1, "Velderoth Malraen escaped after I confronted him.") + GiveQuestReward(Quest, Player) +end + +function Reload(Quest, QuestGiver, Player, Step) + if Step == 1 then + step1_complete_talkedToCayan(Quest, QuestGiver, Player) + elseif Step == 2 then + step2_complete_placedDisplay(Quest, QuestGiver, Player) + end +end \ No newline at end of file diff --git a/server/Quests/StarcrestCommune/delivering_news.lua b/server/Quests/StarcrestCommune/delivering_news.lua new file mode 100644 index 000000000..f92f51f5e --- /dev/null +++ b/server/Quests/StarcrestCommune/delivering_news.lua @@ -0,0 +1,49 @@ +--[[ + Script Name : Quests/StarcrestCommune/delivering_news.lua + Script Purpose : Handles the quest, "Delivering News" + Script Author : Jabantiz + Script Date : 6/15/2018 + Script Notes : + + Zone : Starcrest Commune + Quest Giver : Maareona Ludimintium (2340006) + Preceded by : Confrontation (confrontation.lua) + Followed by : None +--]] + + +function Init(Quest) + AddQuestStepChat(Quest, 1, "I need to speak with Rujiarmo Oolamein in the Peat Bog.", 1, "Maareona has asked that I speak with Rujiarmo Oolamein in the Peat Bog.", 11, 1980024) + AddQuestStepCompleteAction(Quest, 1, "QuestComplete") +end + +function QuestComplete(Quest, QuestGiver, Player) + -- The following UpdateQuestStepDescription and UpdateTaskGroupDescription are not needed, parser adds them for completion in case stuff needs to be moved around + UpdateQuestStepDescription(Quest, 1, "I have spoken with Rujiarmo Oolamein.") + UpdateQuestTaskGroupDescription(Quest, 1, "I have spoken with Rujiarmo as Maareona asked.") + + UpdateQuestDescription(Quest, "I have found Rujiarmo Oolamein and delivered the news.") + GiveQuestReward(Quest, Player) +end + +function Reload(Quest, QuestGiver, Player, Step) + if Step == 1 then + QuestComplete(Quest, QuestGiver, Player) + end +end + +function Accepted(Quest, QuestGiver, Player) + FaceTarget(QuestGiver, Player) + local conversation = CreateConversation() + + PlayFlavor(QuestGiver, "voiceover/english/tutorial_revamp/maareona_ludimintium/qey_village02/quests/maareona/maareona036a.mp3", "", "", 625407969, 2282669599, Player) + AddConversationOption(conversation, "Thank you.") + StartConversation(conversation, QuestGiver, Player, "One more thing, " .. GetName(Player) .. ". It was nice working with you.") +end + +function Declined(Quest, QuestGiver, Player) + -- Add dialog here for when the quest is declined +end + +function Deleted(Quest, QuestGiver, Player) +end \ No newline at end of file diff --git a/server/Quests/StarcrestCommune/hidden_treasures.lua b/server/Quests/StarcrestCommune/hidden_treasures.lua new file mode 100644 index 000000000..96c0d0815 --- /dev/null +++ b/server/Quests/StarcrestCommune/hidden_treasures.lua @@ -0,0 +1,61 @@ +--[[ + Script Name : Quests/StarcrestCommune/hidden_treasures.lua + Script Purpose : Handles the quest, "Hidden Treasures" + Script Author : Scatman + Script Date : 2008.09.21 + + Zone : Starcrest Commune + Quest Giver: Maareona Ludimintium + Preceded by: Information Merchants (information_merchants.lua) + Followed by: Confrontation (confrontation.lua) +--]] + +-- Item ID's +local SMALL_METAL_BOX_AND_PAPER = 12950 + +function Init(Quest) + AddQuestStep(Quest, 1, "I need to swim in the ferryway in the eastern portion of Starcrest Commune and see if anything is stuck behind the grate.", 1, 100, "I need to see if the undelivered package is stuck in the ferryway in Starcrest Commune.") + AddQuestStepCompleteAction(Quest, 1, "step1_complete_inspectedBox") +end + +function Accepted(Quest, QuestGiver, Player) + if QuestGiver ~= nil then + if GetDistance(Player, QuestGiver) < 30 then + FaceTarget(QuestGiver, Player) + conversation = CreateConversation() + + PlayFlavor(QuestGiver, "voiceover/english/tutorial_revamp/maareona_ludimintium/qey_village02/quests/maareona/maareona020a.mp3", "", "", 2218692163, 3483095154, Player) + AddConversationOption(conversation, "Thank you.") + StartConversation(conversation, QuestGiver, Player, "Good luck.") + end + end +end + +function Declined(Quest, QuestGiver, Player) +end + +function Deleted(Quest, QuestGiver, Player) +end + +function step1_complete_inspectedBox(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 1, "I have found the package Maareona spoke of.") + UpdateQuestTaskGroupDescription(Quest, 1, "I have found the package Maareona spoke of.") + + AddQuestStepChat(Quest, 2, "I must return this package to Maaereona in the eastern portion of Starcrest Commune.", 1, "I need to see if the undelivered package is stuck in the ferryway in Starcrest Commune.", 0, 2340006) + AddQuestStepCompleteAction(Quest, 2, "quest_complete") +end + +function quest_complete(Quest, QuestGiver, Player) + UpdateQuestDescription(Quest, "") + GiveQuestReward(Quest, Player) + + while HasItem(Player, SMALL_METAL_BOX_AND_PAPER, 1) do + RemoveItem(Player, SMALL_METAL_BOX_AND_PAPER) + end +end + +function Reload(Quest, QuestGiver, Player, Step) + if Step == 1 then + step1_complete_inspectedBox(Quest, QuestGiver, Player) + end +end diff --git a/server/Quests/StarcrestCommune/information_merchants.lua b/server/Quests/StarcrestCommune/information_merchants.lua new file mode 100644 index 000000000..989617a4f --- /dev/null +++ b/server/Quests/StarcrestCommune/information_merchants.lua @@ -0,0 +1,62 @@ +--[[ + Script Name : Quests/StarcrestCommune/information_merchants.lua + Script Purpose : Handles the quest, "Information Merchants" + Script Author : Scatman + Script Date : 2008.09.21 + + Zone : Starcrest Commune + Quest Giver: Maareona Ludimintium + Preceded by: Meeting with Cayan (meeting_with_cayan.lua) + Followed by: Hidden Treasures (hidden_treasures.lua) +--]] + +function Init(Quest) + -- worthless bronze statuette + AddQuestStepObtainItem(Quest, 1, "I need to purchase a bronze statuette from Merchant Zinun Loospankina just northwest of the entrance to the Peat Bog.", 1, 100, "I need to get Maareona's information from Zinun Loospakina in Starcrest Commune.", 1059, 15571) + AddQuestStepCompleteAction(Quest, 1, "step1_complete_obtainedStatue") +end + +function Accepted(Quest, QuestGiver, Player) + if QuestGiver ~= nil then + if GetDistance(Player, QuestGiver) < 30 then + FaceTarget(QuestGiver, Player) + conversation = CreateConversation() + + PlayFlavor(QuestGiver, "voiceover/english/tutorial_revamp/cayan_sable/qey_village02/quests/cayan_sable/cayan_sable013a.mp3", "", "bow", 2406319678, 1434130925, Player) + AddConversationOption(conversation, "Thank you.") + StartConversation(conversation, QuestGiver, Player, "You don't need to return once you've acquired it. It was a pleasure.") + end + end +end + +function Declined(Quest, QuestGiver, Player) +end + +function step1_complete_obtainedStatue(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 1, "I have purchased the bronze statuette.") + UpdateQuestTaskGroupDescription(Quest, 1, "I have purchased the bronze statuette.") + + AddQuestStep(Quest, 2, "I need to inspect the bronze statuette and discover where the information is hidden.", 1, 100, "I need to get Maareona's information from Zinun Loospakina in Starcrest Commune.") + AddQuestStepCompleteAction(Quest, 2, "step2_complete_inspectedStatuette") +end + +function step2_complete_inspectedStatuette(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 2, "I have found the hidden message.") + UpdateQuestTaskGroupDescription(Quest, 2, "I have found the hidden message.") + + AddQuestStepChat(Quest, 3, "I need to deliver the message to Maareona in the south eastern area of Starcrest Commune.", 1, "I need to get Maareona's information from Zinun Loospakina in Starcrest Commune.", 0, 2340006) + AddQuestStepCompleteAction(Quest, 3, "quest_complete") +end + +function quest_complete(Quest, QuestGiver, Player) + UpdateQuestDescription(Quest, "I have given Maareona the information she needed.") + GiveQuestReward(Quest, Player) +end + +function Reload(Quest, QuestGiver, Player, Step) + if Step == 1 then + step1_complete_talkedToCayan(Quest, QuestGiver, Player) + elseif Step == 2 then + step2_complete_inspectedStatuette(Quest, QuestGiver, Player) + end +end \ No newline at end of file diff --git a/server/Quests/StarcrestCommune/meeting_with_cayan.lua b/server/Quests/StarcrestCommune/meeting_with_cayan.lua new file mode 100644 index 000000000..32c601824 --- /dev/null +++ b/server/Quests/StarcrestCommune/meeting_with_cayan.lua @@ -0,0 +1,64 @@ +--[[ + Script Name : Quests/StarcrestCommune/meeting_with_cayan.lua + Script Purpose : Handles the quest, "Meeting with Cayan" + Script Author : Scatman + Script Date : 2008.09.21 + + Zone : Starcrest Commune + Quest Giver: Maareona Ludimintium + Preceded by: None + Followed by: Information Merchants (information_merchants.lua) +--]] + +function Init(Quest) + AddQuestStepChat(Quest, 1, "I need to speak with Cayan Sable, he is in a hiding spot that can be reached by climbing the bench behind the northwestern corner of the armor shop.", 1, "I need to find Cayan Sable and get some needed information from him.", 0, 2340017) + AddQuestStepCompleteAction(Quest, 1, "step1_complete_talkedToCayan") +end + +function Accepted(Quest, QuestGiver, Player) + if QuestGiver ~= nil then + if GetDistance(Player, QuestGiver) < 30 then + FaceTarget(QuestGiver, Player) + conversation = CreateConversation() + + AddConversationOption(conversation, "I will return once I get the information.") + StartConversation(conversation, QuestGiver, Player, "He will ask a favor of you. He doesn't accept payment in a traditional sense, but he will ask something of you. The more friends he has, and the more people for whom he does favors, who who do favors for him, the more information he can provide. So, please, indulge him.") + end + end +end + +function Declined(Quest, QuestGiver, Player) +end + +function Deleted(Quest, QuestGiver, Player) +end + +function step1_complete_talkedToCayan(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 1, "I have spoken with Cayan Sable.") + UpdateQuestTaskGroupDescription(Quest, 1, "I have spoken with Cayan Sable.") + + -- Red Sun Berries + AddQuestStepHarvest(Quest, 2, "In exchange for his help Cayan Sable requires I help him by collecting Red Sun Berries from the bushes that grow around Starcrest Commune.", 10, 100, "I need to find Cayan Sable and get some needed information from him.", 788, 11348) + AddQuestStepCompleteAction(Quest, 2, "step2_complete_obtainedBerries") +end + +function step2_complete_obtainedBerries(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 2, "I have collected the Red Sun Berries.") + UpdateQuestTaskGroupDescription(Quest, 2, "I have collected the Red Sun Berries.") + + AddQuestStepChat(Quest, 3, "I must return to Cayan Sable, I can use the bench behind the northwest corner of the armor shop to get to him.", 1, "I need to find Cayan Sable and get some needed information from him.", 0, 2340006) + AddQuestStepCompleteAction(Quest, 3, "step3_complete_talkedToCayan") +end + +function step3_complete_talkedToCayan(Quest, QuestGiver, Player) + UpdateQuestDescription(Quest, "I have done a task for Cayan in exchange for certain information. According to him I will get this information from a merchant in Starcrest Commune.") + GiveQuestReward(Quest, Player) +end + +function Reload(Quset, QuestGiver, Player, Step) + if Step == 1 then + step1_complete_talkedToCayan(Quest, QuestGiver, Player) + elseif Step == 2 then + step2_complete_obtainedBerries(Quest, QuestGiver, Player) + end +end diff --git a/server/Quests/Stonestair/abolishing_curiosity.lua b/server/Quests/Stonestair/abolishing_curiosity.lua new file mode 100644 index 000000000..963331322 --- /dev/null +++ b/server/Quests/Stonestair/abolishing_curiosity.lua @@ -0,0 +1,60 @@ +--[[ + Script Name : Quests/Stonestair/abolishing_curiosity.lua + Script Purpose : Handles the quest, "Abolishing Curiosity" + Script Author : QuestParser (Replace this) + Script Date : 6/22/2018 + Script Notes : + + Zone : Stonestair Byway + Quest Giver : + Preceded by : incantation_oration.lua + Followed by : None +--]] + + +function Init(Quest) + AddQuestStepChat(Quest, 1, "Speak with Sevri and pick up the herbal mixture from her.", 1, "Speak with Sevri and pick up the mixture she's created.", 11, 1350011) + AddQuestStepCompleteAction(Quest, 1, "Step1Complete") +end + +function Accepted(Quest, QuestGiver, Player) + FaceTarget(QuestGiver, Player) + conversation = CreateConversation() + + PlayFlavor(QuestGiver, "voiceover/english/tutorial_revamp/vess_al_ishni/fprt_hood02/vesh_alishni045.mp3", "", "", 1857671823, 602774054, Player) + AddConversationOption(conversation, "I wish you well, Vess.") + StartConversation(conversation, QuestGiver, Player, "That is correct. I know we can count on you. Good luck, " .. GetName(Player) .. ".") +end + +function Declined(Quest, QuestGiver, Player) + -- Add dialog here for when the quest is declined +end + +function Deleted(Quest, QuestGiver, Player) + -- Remove any quest specific items here when the quest is deleted +end + +function Step1Complete(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 1, "I've picked up the herbal mixutre from Sevri.") + + AddQuestStepLocation(Quest, 2, "Enact the barrier.", 5, "Speak with Sevri and pick up the mixture she's created.", 0, 40, -4, -59) + AddQuestStepCompleteAction(Quest, 2, "Step2Complete") +end + +function Step2Complete(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 1, "I've completed the incantation.") + + AddQuestStepChat(Quest, 3, "I need to return to Vess to let him know it is done.", 1, "Speak with Sevri and pick up the mixture she's created.", 11, 1350010) + AddQuestStepCompleteAction(Quest, 3, "QuestComplete") +end + +function QuestComplete(Quest, QuestGiver, Player) + UpdateQuestDescription(Quest, "I've completed the incantation and the barrier looks to be intact. Vess, Sevri, and the others affiliated with the Abbatoirs should now have some privacy, away from the prying eyes of the Stonestair inhabitants.") + GiveQuestReward(Quest, Player) +end + +function Reload(Quest, QuestGiver, Player, Step) + if Step == 1 then + QuestComplete(Quest, QuestGiver, Player) + end +end diff --git a/server/Quests/Stonestair/erudite_adventures.lua b/server/Quests/Stonestair/erudite_adventures.lua new file mode 100644 index 000000000..17be78968 --- /dev/null +++ b/server/Quests/Stonestair/erudite_adventures.lua @@ -0,0 +1,45 @@ +--[[ + Script Name : Quests/Stonestair/erudite_adventures.lua + Script Purpose : Handles the quest, "Erudite Adventures" + Script Author : Jabantiz + Script Date : 6/22/2018 + Script Notes : + + Zone : Stonestair Byway + Quest Giver : + Preceded by : abolishing_curiosity.lua + Followed by : None +--]] + + +function Init(Quest) + AddQuestStepChat(Quest, 1, "Speak to Custodian Zaddar in the Graveyard.", 1, "Head out to the Graveyard and speak with Custodian Zaddar.", 11, 1250002) + AddQuestStepCompleteAction(Quest, 1, "QuestComplete") +end + +function Accepted(Quest, QuestGiver, Player) + -- Add dialog here for when the quest is accepted +end + +function Declined(Quest, QuestGiver, Player) + -- Add dialog here for when the quest is declined +end + +function Deleted(Quest, QuestGiver, Player) + -- Remove any quest specific items here when the quest is deleted +end + +function QuestComplete(Quest, QuestGiver, Player) + -- The following UpdateQuestStepDescription and UpdateTaskGroupDescription are not needed, parser adds them for completion in case stuff needs to be moved around + UpdateQuestStepDescription(Quest, 1, "I've spoken to Custodian Zaddar.") + UpdateQuestTaskGroupDescription(Quest, 1, "I've spoken with Custodian Zaddar.") + + UpdateQuestDescription(Quest, "I've spoken with Custodian Zaddar in the Graveyard about tasks he may have.") + GiveQuestReward(Quest, Player) +end + +function Reload(Quest, QuestGiver, Player, Step) + if Step == 1 then + QuestComplete(Quest, QuestGiver, Player) + end +end diff --git a/server/Quests/Stonestair/erudite_alchemy.lua b/server/Quests/Stonestair/erudite_alchemy.lua new file mode 100644 index 000000000..352304026 --- /dev/null +++ b/server/Quests/Stonestair/erudite_alchemy.lua @@ -0,0 +1,76 @@ +--[[ + Script Name : Quests/Stonestair/erudite_alchemy.lua + Script Purpose : Handles the quest, "Erudite Alchemy" + Script Author : QuestParser (Replace this) + Script Date : 6/22/2018 + Script Notes : + + Zone : Stonestair Byway + Quest Giver : + Preceded by : None + Followed by : tweezing_kerra.lua +--]] + +-- Item ID's +local HERBS = 8376 + +function Init(Quest) + AddQuestStepHarvest(Quest, 1, "Gather some of the herbs from around the Stonestair Byway.", 5, 100, "Find the herbs growing in the Byway for Vess.", 2312, HERBS) + AddQuestStepCompleteAction(Quest, 1, "Step1Complete") +end + +function Accepted(Quest, QuestGiver, Player) + FaceTarget(QuestGiver, Player) + conversation = CreateConversation() + + PlayFlavor(QuestGiver, "voiceover/english/tutorial_revamp/vesh_al_ishni/fprt_hood02/vesh_alishni013.mp3", "", "", 2691616073, 3518000896, Player) + AddConversationOption(conversation, "Very well, it shall be done.") + StartConversation(conversation, QuestGiver, Player, "I could use some assistance with gathering a few seeds from the herbs growing here in the Byway. Once you gather them, take them over to the scribe's shop, and grind them up there.") +end + +function Declined(Quest, QuestGiver, Player) + -- Add dialog here for when the quest is declined +end + +function Deleted(Quest, QuestGiver, Player) + RemoveHerbs(Player) +end + +function RemoveHerbs(Player) + while HasItem(Player, HERBS, 1) do + RemoveItem(Player, HERBS) + end +end + +function Step1Complete(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 1, "I've gathered enough herbs for Vess' mixture.") + + AddQuestStep(Quest, 2, "Crush the herbs in the pestle.", 1, 100, "Find the herbs growing in the Byway for Vess.", 0) + AddQuestStepCompleteAction(Quest, 2, "Step2Complete") +end + +function Step2Complete(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 2, "The herbs have been crushed in the pestle.") + + RemoveHerbs(Player) + AddQuestStepChat(Quest, 3, "I must bring the crushed herbs back to Vess.", 1, "Find the herbs growing in the Byway for Vess.", 0, 1350010) + AddQuestStepCompleteAction(Quest, 3, "QuestComplete") +end + +function QuestComplete(Quest, QuestGiver, Player) + + UpdateQuestTaskGroupDescription(Quest, 1, "The herbs have been crushed in the pestle.") + + UpdateQuestDescription(Quest, "I've completed the mixture for Vess, but at this point, am unsure as to its use.") + GiveQuestReward(Quest, Player) +end + +function Reload(Quest, QuestGiver, Player, Step) + if Step == 1 then + Step1Complete(Quest, QuestGiver, Player) + elseif Step == 2 then + Step2Complete(Quest, QuestGiver, Player) + elseif Step == 3 then + QuestComplete(Quest, QuestGiver, Player) + end +end diff --git a/server/Quests/Stonestair/incantation_oration.lua b/server/Quests/Stonestair/incantation_oration.lua new file mode 100644 index 000000000..212e13cca --- /dev/null +++ b/server/Quests/Stonestair/incantation_oration.lua @@ -0,0 +1,57 @@ +--[[ + Script Name : Quests/Stonestair/incantation_oration.lua + Script Purpose : Handles the quest, "Incantation Oration" + Script Author : QuestParser (Replace this) + Script Date : 6/22/2018 + Script Notes : + + Zone : Stonestair Byway + Quest Giver : + Preceded by : tweezing_kerra.lua + Followed by : abolishing_curiosity.lua +--]] + + +function Init(Quest) + AddQuestStepChat(Quest, 1, "Return to Vess at the dock and speak with him as Sevri asked.", 1, "Speak with Vess at the dock again.", 11, 1350010) + AddQuestStepCompleteAction(Quest, 1, "Step1Complete") +end + +function Accepted(Quest, QuestGiver, Player) + -- Add dialog here for when the quest is accepted + FaceTarget(QuestGiver, Player) + conversation = CreateConversation() + + PlayFlavor(QuestGiver, "voiceover/english/tutorial_revamp/sevri_il_bethod/fprt_hood02/sevri_ilbethod011.mp3", "", "", 1345707092, 3707746556, Player) + AddConversationOption(conversation, "Alright, I'll do that. Good luck with what you're making.", "dlg_30_4") + StartConversation(conversation, QuestGiver, Player, "Wonderful. I'll look into adding this as a component. In the meantime, why don't you head back and talk to Vess? I'm sure he'd like to explain a bit more about what we've gone through here.") +end + +function Declined(Quest, QuestGiver, Player) + -- Add dialog here for when the quest is declined +end + +function Deleted(Quest, QuestGiver, Player) + -- Remove any quest specific items here when the quest is deleted +end + +function Step1Complete(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 1, "I've spoken to Vess.") + + AddQuestStepChat(Quest, 2, "I must learn the from Vess.", 1, "Speak with Vess at the dock again.", 11, 1350010) + AddQuestStepCompleteAction(Quest, 2, "QuestComplete") +end + +function QuestComplete(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 2, "I've learned the incantation from Vess.") + UpdateQuestTaskGroupDescription(Quest, 1, "I've spoken with Vess Al'Ishni again.") + + UpdateQuestDescription(Quest, "Vess has taught me an incantation I'll need to use to seal the entrance.") + GiveQuestReward(Quest, Player) +end + +function Reload(Quest, QuestGiver, Player, Step) + if Step == 1 then + Step1Complete(Quest, QuestGiver, Player) + end +end diff --git a/server/Quests/Stonestair/tweezing_kerra.lua b/server/Quests/Stonestair/tweezing_kerra.lua new file mode 100644 index 000000000..4b0a6d0e4 --- /dev/null +++ b/server/Quests/Stonestair/tweezing_kerra.lua @@ -0,0 +1,80 @@ +--[[ + Script Name : Quests/Stonestair/tweezing_kerra.lua + Script Purpose : Handles the quest, "Tweezing Kerra" + Script Author : QuestParser (Replace this) + Script Date : 6/22/2018 + Script Notes : + + Zone : Stonestair Byway + Quest Giver : + Preceded by : erudite_alchemy.lua + Followed by : incantation_oration.lua +--]] + +-- Item ID's +local SILVER_TWEEZERS = 48065 + +function Init(Quest) + AddQuestStepChat(Quest, 1, "Speak with Sevri Il'Bethod and give her the mixture. She should be near the Inn.", 1, "Speak to Sevri Il'Bethod and give her the herbal mixture.", 11, 1350011) + AddQuestStepCompleteAction(Quest, 1, "Step1Complete") +end + +function Accepted(Quest, QuestGiver, Player) + FaceTarget(QuestGiver, Player) + conversation = CreateConversation() + + PlayFlavor(QuestGiver, "voiceover/english/tutorial_revamp/vesh_al_ishni/fprt_hood02/vesh_alishni017.mp3", "", "", 2088321300, 3465986991, Player) + AddConversationOption(conversation, "I'll take it to her.") + StartConversation(conversation, QuestGiver, Player, "Straight down the path, up the stairs, and to the right of the inn.") +end + +function Declined(Quest, QuestGiver, Player) + -- Add dialog here for when the quest is declined +end + +function Deleted(Quest, QuestGiver, Player) + RemoveTweezers(Player) +end + +function RemoveTweezers(Player) + while HasItem(Player, SILVER_TWEEZERS, 1) do + RemoveItem(Player, SILVER_TWEEZERS) + end +end + +function Step1Complete(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 1, "I've spoken with Sevri and given her the mixture.") + + SummonItem(Player, SILVER_TWEEZERS) + + AddQuestStepSpell(Quest, 2, "I need to pluck some fur from kerrans.", 5, 100, "Speak to Sevri Il'Bethod and give her the herbal mixture.", 0, 2550000) + AddQuestStepCompleteAction(Quest, 2, "Step2Complete") +end + +function Step2Complete(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 2, "I've plucked fur from several kerrans.") + + AddQuestStepChat(Quest, 3, "I need to bring this fur back to Sevri.", 1, "Speak to Sevri Il'Bethod and give her the herbal mixture.", 11, 1350011) + AddQuestStepCompleteAction(Quest, 3, "QuestComplete") +end + +function QuestComplete(Quest, QuestGiver, Player) + -- The following UpdateQuestStepDescription and UpdateTaskGroupDescription are not needed, parser adds them for completion in case stuff needs to be moved around + UpdateQuestStepDescription(Quest, 3, "I've spoken with Sevri and given her the fur.") + UpdateQuestTaskGroupDescription(Quest, 1, "The kerra have been tweezed! I've got all the fur Sevri asked for.") + + UpdateQuestDescription(Quest, "After tweezing several of the kerra, no doubt to their complete discomfort, I returned their fur to Sevri.") + GiveQuestReward(Quest, Player) + + RemoveTweezers(Player) +end + +function Reload(Quest, QuestGiver, Player, Step) + if Step == 1 then + Step1Complete(Quest, QuestGiver, Player) + elseif Step == 2 then + Step2Complete(Quest, QuestGiver, Player) + elseif Step == 3 then + QuestComplete(Quest, QuestGiver, Player) + end +end \ No newline at end of file diff --git a/server/Quests/SunkenCity/a_flowing_conversation.lua b/server/Quests/SunkenCity/a_flowing_conversation.lua new file mode 100644 index 000000000..9f536ee42 --- /dev/null +++ b/server/Quests/SunkenCity/a_flowing_conversation.lua @@ -0,0 +1,48 @@ +--[[ + Script Name : Quests/SunkenCity/a_flowing_conversation.lua + Script Purpose : Handles the quest, "A Flowing Conversation" + Script Author : Scatman + Script Date : 2009.07.28 + + Zone : Sunken City + Quest Giver: Inquisitor Thorson + Preceded by: None + Followed by: Spirits of the Night (spirits_of_the_night.lua) +--]] + +function Init(Quest) + AddQuestStepChat(Quest, 1, "I need to speak to the iksar named Saydith Yarr and listen to everything he has to say.", 1, "I should find and talk to the iksar named Saydith Yarr.", 0, 1240014) + AddQuestStepCompleteAction(Quest, 1, "Step1_Complete_SpokeWithSaydith") +end + +function Accepted(Quest, QuestGiver, Player) + FaceTarget(QuestGiver, Player) + conversation = CreateConversation() + + AddConversationOption(conversation, "I'll return shortly.") + StartConversation(conversation, QuestGiver, Player, "Excellent. Return to me after you have spoken to him.") +end + +function Declined(Quest, QuestGiver, Player) +end + +function Step1_Complete_SpokeWithSaydith(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 1, "I have spoken to Saydith Yarr and learned a bit about the Sunken City.") + UpdateQuestTaskGroupDescription(Quest, 1, "I have spoken to Saydith Yarr.") + + AddQuestStepChat(Quest, 2, "I should return to Inquisitor Thorson.", 1, "I should let Thorson know that I talked to Yarr.", 0, 1240007) + AddQuestStepCompleteAction(Quest, 2, "Quest_Complete") +end + +function Quest_Complete(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 2, "I have returned to Inquisitor Thorson.") + UpdateQuestTaskGroupDescription(Quest, 2, "I told Thorson that I spoke to the strange iksar named Yarr.") + GiveQuestReward(Quest, Player) + UpdateQuestDescription(Quest, "I have found and spoken to Saydith Yarr. He was a very disturbed fellow who gave me some basic background on the area. I will find out more details from Inquisitor Thorson, who is much more coherent.") +end + +function Reload(Quest, QuestGiver, Player, Step) + if Step == 1 then + Step1_Complete_SpokeWithSaydith(Quest, QuestGiver, Player) + end +end \ No newline at end of file diff --git a/server/Quests/SunkenCity/back_to_the_inquisitor.lua b/server/Quests/SunkenCity/back_to_the_inquisitor.lua new file mode 100644 index 000000000..6f5a9dfca --- /dev/null +++ b/server/Quests/SunkenCity/back_to_the_inquisitor.lua @@ -0,0 +1,38 @@ +--[[ + Script Name : Quests/SunkenCity/back_to_the_inquisitor.lua + Script Purpose : Handles the quest, "Back to the Inquisitor" + Script Author : Scatman + Script Date : 2009.07.28 + + Zone : Sunken City + Quest Giver: Investigator Curfield + Preceded by: Finding the Shrine (finding_the_shrine.lua) + Followed by: Time to Stop a Madman (time_to_stop_a_madman.lua) +--]] + +function Init(Quest) + AddQuestStepChat(Quest, 1, "I should return to Inquisitor Thorson.", 1, "I should return to Inquisitor Thorson and let him know that I have the research he needs.", 0, 1240007) + AddQuestStepCompleteAction(Quest, 1, "Quest_Complete") +end + +function Accepted(Quest, QuestGiver, Player) + FaceTarget(QuestGiver, Player) + conversation = CreateConversation() + + PlayFlavor(QuestGiver, "voiceover/english/tutorial_revamp/investigator_curfeld/fprt_adv01_sunken/investigator_curfeld018.mp3", "", "", 3880047652, 3528846773, Player) + AddConversationOption(conversation, "I'll take it to him.") + StartConversation(conversation, QuestGiver, Player, "Why must I be constantly bogged down by the trivialities of lesser beings? Fine, anything to be rid of you. Take this journal to Thorson and trouble me no more.") +end + +function Declined(Quest, QuestGiver, Player) +end + +function Quest_Complete(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 1, "I have spoken to Inquisitor Thorson.") + UpdateQuestTaskGroupDescription(Quest, 1, "I returned to Inquisitor Thorson with Curfeld's journal.") + GiveQuestReward(Quest, Player) + UpdateQuestDescription(Quest, "I took Investigator Curfeld's journal to Thorson, but the book reveals some troubling information. It seems Curfeld is a Prexian who wants to recreate the old ritual that nearly destoyed Freeport! Something must be done to stop him!") +end + +function Reload(Quest, QuestGiver, Player, Step) +end \ No newline at end of file diff --git a/server/Quests/SunkenCity/cataloging_local_critters.lua b/server/Quests/SunkenCity/cataloging_local_critters.lua new file mode 100644 index 000000000..4423dc582 --- /dev/null +++ b/server/Quests/SunkenCity/cataloging_local_critters.lua @@ -0,0 +1,91 @@ +--[[ + Script Name : Quests/SunkenCity/cataloging_local_critters.lua + Script Purpose : Handles the quest, "Cataloging Local Critters" + Script Author : Scatman + Script Date : 2009.07.28 + + Zone : Sunken City + Quest Giver: Inquisitor Thorson + Preceded by: Spirits of the Night (spirits_of_the_night.lua) + Followed by: Finding the Investigator (finding_the_investigator) +--]] + +function Init(Quest) + AddQuestStep(Quest, 1, "I need to catalog the presence of a brine sifter.", 1, 100, "I need to use the Catalogue Creature ability found in my Knowledge Book to obtain information on the local vermin.", 0) + AddQuestStep(Quest, 2, "I need to catalog the presence of a small rust monster.", 1, 100, "I need to use the Catalogue Creature ability found in my Knowledge Book to obtain information on the local vermin.", 0) + AddQuestStep(Quest, 3, "I must catalog the presence of a rust monster.", 1, 100, "I need to use the Catalogue Creature ability found in my Knowledge Book to obtain information on the local vermin.", 0) + AddQuestStep(Quest, 4, "I need to catalog the presence of a small scorpion.", 1, 100, "I need to use the Catalogue Creature ability found in my Knowledge Book to obtain information on the local vermin.", 0) + AddQuestStepCompleteAction(Quest, 1, "Step1_Complete_BrineSifter") + AddQuestStepCompleteAction(Quest, 2, "Step2_Complete_SmallRustMonster") + AddQuestStepCompleteAction(Quest, 3, "Step3_Complete_RustMonster") + AddQuestStepCompleteAction(Quest, 4, "Step4_Complete_SmallScorpion") +end + +function Accepted(Quest, QuestGiver, Player) + FaceTarget(QuestGiver, Player) + conversation = CreateConversation() + + AddConversationOption(conversation, "I'll return when I'm done.") + StartConversation(conversation, QuestGiver, Player, "The Knowledge Book you obtained on the Outpost of the Overlord contains many Abilities that will prove useful to you. Among these Abilities is one called Catalogue Creature. If you draw close to a creature, you can use this ability to obtain information about it. Everything I need to know will be recorded in your Quest Journal. There is no need to attack any of these creatures, simply use the Catalogue Creature ability on them.") +end + +function Declined(Quest, QuestGiver, Player) +end + +function Step1_Complete_BrineSifter(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 1, "I have found that there are quite a lot of brine sifters here.") + + if QuestIsComplete(Player, 268) then + AllCreaturesCataloged(Quest, QuestGiver, Player) + end +end + +function Step2_Complete_SmallRustMonster(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 2, "I have discovered that small rust monsters live in this area.") + + if QuestIsComplete(Player, 268) then + AllCreaturesCataloged(Quest, QuestGiver, Player) + end +end + +function Step3_Complete_RustMonster(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 3, "I have found rust monsters here in the Sunken City.") + + if QuestIsComplete(Player, 268) then + AllCreaturesCataloged(Quest, QuestGiver, Player) + end +end + +function Step4_Complete_SmallScorpion(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 4, "I have found small scorpions here in the Sunken City.") + + if QuestIsComplete(Player, 268) then + AllCreaturesCataloged(Quest, QuestGiver, Player) + end +end + +function AllCreaturesCataloged(Quest, QuestGiver, Player) + UpdateQuestTaskGroupDescription(Quest, 1, "I have obtained information on the local creatures.") + + AddQuestStepChat(Quest, 5, "I should take the information I obtained back to Inquisitor Thorson..", 1, "I should return to Inquisitor Thorson with what I have learned.", 0, 1240007) + AddQuestStepCompleteAction(Quest, 5, "Quest_Complete") +end + +function Quest_Complete(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 5, "I have taken the information back to Inquisitor Thorson.") + UpdateQuestTaskGroupDescription(Quest, 2, "I gave my information to Inquisitor Thorson.") + GiveQuestReward(Quest, Player) + UpdateQuestDescription(Quest, "I successfully gathered information on several different kinds of creatures. Though a haunted place, the Sunken City is alive with small creatures... and some larger ones.") +end + +function Reload(Quest, QuestGiver, Player, Step) + if Step == 1 then + Step1_Complete_BrineSifter(Quest, QuestGiver, Player) + elseif Step == 2 then + Step2_Complete_SmallRustMonster(Quest, QuestGiver, Player) + elseif Step == 3 then + Step3_Complete_RustMonster(Quest, QuestGiver, Player) + elseif Step == 4 then + Step4_Complete_SmallScorpion(Quest, QuestGiver, Player) + end +end \ No newline at end of file diff --git a/server/Quests/SunkenCity/exacting_revenge_on_the_crabs.lua b/server/Quests/SunkenCity/exacting_revenge_on_the_crabs.lua new file mode 100644 index 000000000..b46ea6724 --- /dev/null +++ b/server/Quests/SunkenCity/exacting_revenge_on_the_crabs.lua @@ -0,0 +1,45 @@ +--[[ + Script Name : exacting_revenge_on_the_crabs.lua + Script Purpose : Handles the quest, "Exacting Revenge on the Crabs" + Script Author : Neatz09 + Script Date : 12/31/2018 + Script Notes : Examined item (a twitching crab claw) + + Zone : Sunken City + Quest Giver : item #3034 + Preceded by : None + Followed by : None +--]] + +local crabs = 1240007 +function Init(Quest) + AddQuestStepKill(Quest, 1, "Kill crabs", 30, 100, "I need to kill crabs in the Sunken City until my rage subsides. I can reach the Sunken City by using any of the bells in and around the City of Freeport.", 77, crabs) + AddQuestStepCompleteAction(Quest, 1, "QuestComplete") +end + +function Accepted(Quest, QuestGiver, Player) + -- Add dialog here for when the quest is accepted +end + +function Declined(Quest, QuestGiver, Player) + -- Add dialog here for when the quest is declined +end + +function Deleted(Quest, QuestGiver, Player) + -- Remove any quest specific items here when the quest is deleted +end + +function QuestComplete(Quest, QuestGiver, Player) + -- The following UpdateQuestStepDescription and UpdateTaskGroupDescription are not needed, parser adds them for completion in case stuff needs to be moved around + UpdateQuestStepDescription(Quest, 1, "I have killed many crabs.") + UpdateQuestTaskGroupDescription(Quest, 1, "I've killed many crabs and this task now bores me.") + + UpdateQuestDescription(Quest, "Many crabs were slain in retaliation for that pinch. I feel much better now.
") + GiveQuestReward(Quest, Player) +end + +function Reload(Quest, QuestGiver, Player, Step) + if Step == 1 then + QuestComplete(Quest, QuestGiver, Player) + end +end diff --git a/server/Quests/SunkenCity/exotic_soups.lua b/server/Quests/SunkenCity/exotic_soups.lua new file mode 100644 index 000000000..f0922074a --- /dev/null +++ b/server/Quests/SunkenCity/exotic_soups.lua @@ -0,0 +1,52 @@ +--[[ + Script Name : Quests/SunkenCity/exotic_soups.lua + Script Purpose : Handles the quest, "Exotic Soups" + Script Author : Scatman + Script Date : 2009.08.01 + + Zone : Sunken City + Quest Giver: Tilzak N'Lim + Preceded by: None + Followed by: None +--]] + +local TilzakNLim = 1240026 +local DuskSharks = 1240025 + +function Init(Quest) + AddQuestStepKill(Quest, 1, "I need to collect a meaty shark fin", 1, 25, "I should start looking for the dusk sharks. I'll need a big enough fin to bring back to Tilzak.", 122, DuskSharks) + AddQuestStepCompleteAction(Quest, 1, "Step1_Complete_KilledSharks") +end + +function Accepted(Quest, QuestGiver, Player) + FaceTarget(QuestGiver, Player) + conversation = CreateConversation() + + PlayFlavor(QuestGiver, "voiceover/english/optional5/standard_dark_elf_male/fprt_hood05/quests/tilzaknlim/tilzak_x1_accept.mp3", "", "", 16004203, 2050489897, Player) + AddConversationOption(conversation, "I'll be back when I have them.", "dlg_3_3") + StartConversation(conversation, QuestGiver, Player, "OH! You'll help me? Oh thank you so much, friend! I wish to make a nice souffle from the fins of the Dusk Sharks that roam the waters here in the Sunken City. I need a large fin in order to make this souffle. I will be eagerly anticipating your return!") +end + +function Declined(Quest, QuestGiver, Player) +end + +function Step1_Complete_KilledSharks(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 1, "I've collected the meaty shark fin.") + UpdateQuestTaskGroupDescription(Quest, 1, "I have the shark fin Tilzak was asking for.") + + AddQuestStepChat(Quest, 2, "I need to speak with Tilzak", 1, "I should return to Tilzak then get on with my business. I don't even know why I offered to help him with this stupid task.", 0, TilzakNLim) + AddQuestStepCompleteAction(Quest, 2, "Quest_Complete") +end + +function Quest_Complete(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 2, "I've spoken with Tilzak") + UpdateQuestTaskGroupDescription(Quest, 2, "I've given the fin to Tilzak the Fishmonger.") + GiveQuestReward(Quest, Player) + UpdateQuestDescription(Quest, "Tilzak was pleased with the shark fin, and plans on trying his recipe right away.") +end + +function Reload(Quest, QuestGiver, Player, Step) + if Step == 1 then + Step1_Complete_KilledSharks(Quest, QuestGiver, Player) + end +end \ No newline at end of file diff --git a/server/Quests/SunkenCity/finding_the_investigator.lua b/server/Quests/SunkenCity/finding_the_investigator.lua new file mode 100644 index 000000000..f1bf986c5 --- /dev/null +++ b/server/Quests/SunkenCity/finding_the_investigator.lua @@ -0,0 +1,38 @@ +--[[ + Script Name : Quests/SunkenCity/finding_the_investigator + Script Purpose : Handles the quest, "Finding the Investigator" + Script Author : Scatman + Script Date : 2009.07.28 + + Zone : Sunken City + Quest Giver: Inquisitor Thorson + Preceded by: Cataloging Local Critters (cataloging_local_critters.lua) + Followed by: Taking Back from the Blackshields (taking_back_from_the_blackshields.lua) +--]] + +function Init(Quest) + AddQuestStepChat(Quest, 1, "I need to speak to Investigator Curfeld of the Dismal Rage.", 1, "I need to seek out Investigator Curfeld and speak to him.", 0, 1240083) + AddQuestStepCompleteAction(Quest, 1, "Quest_Complete") +end + +function Accepted(Quest, QuestGiver, Player) + FaceTarget(QuestGiver, Player) + conversation = CreateConversation() + + AddConversationOption(conversation, "I will do so.") + StartConversation(conversation, QuestGiver, Player, "You can find Investigator Curfeld by going north through the archway, then west and south. He stands past the scorpions you discovered near the gateway to the Graveyard. He knows that additional help is coming, so tell him that I sent you.") +end + +function Declined(Quest, QuestGiver, Player) +end + + +function Quest_Complete(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 1, "I have spoken to Investigator Curfeld.") + UpdateQuestTaskGroupDescription(Quest, 1, "I have found Investigator Curfeld.") + GiveQuestReward(Quest, Player) + UpdateQuestDescription(Quest, "I have found Investigator Curfeld just where Thorson said he would be. Now I will see if the investigator needs my assistance.") +end + +function Reload(Quest, QuestGiver, Player, Step) +end \ No newline at end of file diff --git a/server/Quests/SunkenCity/finding_the_shrine.lua b/server/Quests/SunkenCity/finding_the_shrine.lua new file mode 100644 index 000000000..4255832d5 --- /dev/null +++ b/server/Quests/SunkenCity/finding_the_shrine.lua @@ -0,0 +1,49 @@ +--[[ + Script Name : Quests/SunkenCity/finding_the_shrine.lua + Script Purpose : Handles the quest, "Finding the Shrine" + Script Author : Scatman + Script Date : 2009.07.28 + + Zone : Sunken City + Quest Giver: Investigator Curfield + Preceded by: Taking Back from the Blackshields (taking_back_from_the_blackshields.lua) + Followed by: Back to the Inquisitor (back_to_the_inquisitor.lua) +--]] + +function Init(Quest) + AddQuestStepLocation(Quest, 1, "I need to determine if anything remains of the shrine to Prexus", 30, "I must search the Sunken City for a ruined shrine of Prexus.", 0, 6.9727, 2.36759, -54.6769) + AddQuestStepCompleteAction(Quest, 1, "Step1_Complete_FoundShrine") +end + +function Accepted(Quest, QuestGiver, Player) + FaceTarget(QuestGiver, Player) + conversation = CreateConversation() + + PlayFlavor(QuestGiver, "voiceover/english/tutorial_revamp/investigator_curfeld/fprt_adv01_sunken/investigator_curfeld014.mp3", "", "", 4099914097, 989172019, Player) + AddConversationOption(conversation, "I will do so. Hopefully I'll be in one piece.") + StartConversation(conversation, QuestGiver, Player, "I heard the shrine used to be found in the northern central part of Plank's Edge. Try going east a bit, then north. Return to me when you have the knowledge I require.") +end + +function Declined(Quest, QuestGiver, Player) +end + +function Step1_Complete_FoundShrine(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 1, "I have found a shrine that seems to hum with mystical power.") + UpdateQuestTaskGroupDescription(Quest, 1, "I found the haunted ruins of an old shrine.") + + AddQuestStepChat(Quest, 2, "I should return to Investigator Curfeld and tell him what I found.", 1, "I must return to Investigator Curfeld and tell him I found the shrine.", 0, 1240083) + AddQuestStepCompleteAction(Quest, 2, "Quest_Complete") +end + +function Quest_Complete(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 2, "I reported back to Investigator Curfeld.") + UpdateQuestTaskGroupDescription(Quest, 2, "I reported back to Curfeld.") + GiveQuestReward(Quest, Player) + UpdateQuestDescription(Quest, "I found the remains of the shrine to Prexus, which was guarded by the remains of the fallen Darkfathom members. I heard a distinct hum, which indicated to me that the shrine still has some sort of power. I reported back to Investigator Curfeld and let him know.") +end + +function Reload(Quest, QuestGiver, Player, Step) + if Step == 1 then + Step1_Complete_FoundShrine(Quest, QuestGiver, Player) + end +end \ No newline at end of file diff --git a/server/Quests/SunkenCity/gerbards_coins.lua b/server/Quests/SunkenCity/gerbards_coins.lua new file mode 100644 index 000000000..c85ba994d --- /dev/null +++ b/server/Quests/SunkenCity/gerbards_coins.lua @@ -0,0 +1,49 @@ +--[[ + Script Name : Quests/SunkenCity/gerbards_necklace.lua + Script Purpose : Handles the quest, "Gerbard's Necklace + Script Author : Scatman + Script Date : 2009.08.01 + + Zone : Sunken City + Quest Giver: Gerbard the Snitch + Preceded by: None + Followed by: None +--]] + +function Init(Quest) + AddQuestStepKill(Quest, 1, "I need to find five pirate coins.", 5, 50, "I need to find five pirate coins.", 1763, 1240133, 1240058, 1240109, 1240045, 1240107, 1240040, 1240132, 1240038, 1240063, 1240144, 1240050, 1240061, 1240051, 1240146, 1240052, 1240057, 1240062, 1240108) + AddQuestStepCompleteAction(Quest, 1, "Step1_Complete_FoundCoins") +end + +function Accepted(Quest, QuestGiver, Player) + FaceTarget(QuestGiver, Player) + conversation = CreateConversation() + + PlayFlavor(QuestGiver, "voiceover/english/gerbard_the_snitch/fprt_adv01_sunken/gerbard_the_snitch002.mp3", "", "", 4172245160, 2238267271, Player) + AddConversationOption(conversation, "Thanks, I'll search out some pirate coins.") + StartConversation(conversation, QuestGiver, Player, "Where do you think they come from? They're pirate coins! Those undead buggers roam around where it's wet. I'd go get them myself, but I gambled my sword away in a sure bet.") +end + +function Declined(Quest, QuestGiver, Player) +end + +function Step1_Complete_FoundCoins(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 1, "I found five pirate coins.") + UpdateQuestTaskGroupDescription(Quest, 1, "I found five pirate coins.") + + AddQuestStepChat(Quest, 2, "I need to return to Gerbard.", 1, "I need to return to Gerbard.", 0, 1240020) + AddQuestStepCompleteAction(Quest, 2, "Quest_Complete") +end + +function Quest_Complete(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 2, "I returned to Gerbard.") + UpdateQuestTaskGroupDescription(Quest, 2, "I returned to Gerbard.") + GiveQuestReward(Quest, Player) + UpdateQuestDescription(Quest, "I found the five pirate coins that Gerbard the Snitch needed.") +end + +function Reload(Quest, QuestGiver, Player, Step) + if Step == 1 then + Step1_Complete_FoundCoins(Quest, QuestGiver, Player) + end +end \ No newline at end of file diff --git a/server/Quests/SunkenCity/jezranazs_hideous_locket.lua b/server/Quests/SunkenCity/jezranazs_hideous_locket.lua new file mode 100644 index 000000000..f1940daef --- /dev/null +++ b/server/Quests/SunkenCity/jezranazs_hideous_locket.lua @@ -0,0 +1,32 @@ +--[[ + Script Name : Quests/Sunkencity/jezranazs_hideous_locket.lua + Script Author : neatz09 + Script Date : 2018.12.31 12:12:13 + Script Purpose : + + Zone : Sunkencity + Quest Giver: + Preceded by: None + Followed by: +--]] + +function Init(Quest) + +end + +function Accepted(Quest, QuestGiver, Player) + +end + +function Declined(Quest, QuestGiver, Player) + +end + +function quest_complete(Quest, QuestGiver, Player) + +end + +function Reload(Quest, QuestGiver, Player, Step) + +end + diff --git a/server/Quests/SunkenCity/joining_the_gang.lua b/server/Quests/SunkenCity/joining_the_gang.lua new file mode 100644 index 000000000..34d6d11ea --- /dev/null +++ b/server/Quests/SunkenCity/joining_the_gang.lua @@ -0,0 +1,104 @@ +--[[ + Script Name : Quests/SunkenCity/joining_the_gang.lua + Script Purpose : Handles the quest, "Joining the Gang" + Script Author : Scatman + Script Date : 2009.08.01 + + Zone : Sunken City + Quest Giver: Manius Galla + Preceded by: None + Followed by: None +--]] + +function Init(Quest) + AddQuestStepKill(Quest, 1, "I must kill two Blackshield raiders.", 2, 100, "I need to kill some of the Blackshields in the Sunken City.", 611, 1240123, 1240126, 1240117, 1240098, 1240124, 1240073, 1240067, 1240119, 1240140, 1240081, 1240118) + AddQuestStepKill(Quest, 2, "I must kill two Blackshield plunderers.", 2, 100, "I need to kill some of the Blackshields in the Sunken City.", 611, 1240129, 1240092, 1240111, 1240095, 1240114, 1240078, 1240068) + AddQuestStepKill(Quest, 3, "I must kill two Blackshield pillagers.", 2, 100, "I need to kill some of the Blackshields in the Sunken City.", 611, 1240090, 1240142, 1240113, 1240128, 1240069, 1240120, 1240099, 1240085, 1240148) + AddQuestStepKill(Quest, 4, "I must kill two Blackshield ravagers.", 2, 100, "I need to kill some of the Blackshields in the Sunken City.", 611, 1240094, 1240088, 1240136, 1240077, 1240130, 1240101, 1240100, 1240087, 1240074) + AddQuestStepKill(Quest, 5, "I must kill two Blackshield pirates.", 2, 100, "I need to kill some of the Blackshields in the Sunken City.", 611, 1240064, 1240093, 1240097, 1240134, 1240143, 1240055, 1240137, 1240089, 1240082, 1240147, 1240121) + AddQuestStepCompleteAction(Quest, 1, "Step1_Complete_KilledRaiders") + AddQuestStepCompleteAction(Quest, 2, "Step2_Complete_KilledPlunderers") + AddQuestStepCompleteAction(Quest, 3, "Step3_Complete_KilledPillagers") + AddQuestStepCompleteAction(Quest, 4, "Step4_Complete_KilledRavagers") + AddQuestStepCompleteAction(Quest, 5, "Step5_Complete_KilledPirates") +end + +function Accepted(Quest, QuestGiver, Player) + FaceTarget(QuestGiver, Player) + conversation = CreateConversation() + + PlayFlavor(QuestGiver, "voiceover/english/optional5/standard_dark_elf_male/fprt_hood05/quests/tilzaknlim/tilzak_x1_accept.mp3", "", "", 16004203, 2050489897, Player) + AddConversationOption(conversation, "I'll be back when I have them.", "dlg_3_3") + StartConversation(conversation, QuestGiver, Player, "OH! You'll help me? Oh thank you so much, friend! I wish to make a nice souffle from the fins of the Dusk Sharks that roam the waters here in the Sunken City. I need a large fin in order to make this souffle. I will be eagerly anticipating your return!") +end + +function Declined(Quest, QuestGiver, Player) +end + +function Step1_Complete_KilledRaiders(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 1, "I have killed the Blackshield raiders.") + + if QuestIsComplete(Player, 278) then + KilledBlacksields(Quest, QuestGiver, Player) + end +end + +function Step2_Complete_KilledPlunderers(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 2, "I have killed the Blackshield plunderers.") + + if QuestIsComplete(Player, 278) then + KilledBlacksields(Quest, QuestGiver, Player) + end +end + +function Step3_Complete_KilledPillagers(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 3, "I have killed the Blackshield pillagers.") + + if QuestIsComplete(Player, 278) then + KilledBlacksields(Quest, QuestGiver, Player) + end +end + +function Step4_Complete_KilledRavagers(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 4, "I have killed the Blackshield ravagers.") + + if QuestIsComplete(Player, 278) then + KilledBlacksields(Quest, QuestGiver, Player) + end +end + +function Step5_Complete_KilledPirates(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 5, "I have killed the Blackshield pirates.") + + if QuestIsComplete(Player, 278) then + KilledBlacksields(Quest, QuestGiver, Player) + end +end + +function KilledBlacksields(Quest, QuestGiver, Player) + UpdateQuestTaskGroupDescription(Quest, 1, "I've killed all of the Blackshields that were part of my test.") + + AddQuestStepChat(Quest, 2, "I need to speak with Manius.", 1, "I should return to Manius and let him know that I've passed his test.", 0, 1240079) + AddQuestStepCompleteAction(Quest, 2, "Quest_Complete") +end + +function Quest_Complete(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 2, "I've spoken with Manius.") + UpdateQuestTaskGroupDescription(Quest, 2, "I've let Manius know that I've done what it takes to pass his test.") + GiveQuestReward(Quest, Player) + UpdateQuestDescription(Quest, "I've killed the raider lackeys like Manius has asked, and completed my test. He said he'll think about letting me join, but hasn't decided yet. Maybe I should check back with him later.") +end + +function Reload(Quest, QuestGiver, Player, Step) + if Step == 1 then + Step1_Complete_KilledRaiders(Quest, QuestGiver, Player) + elseif Step == 2 then + Step2_Complete_KilledPlunderers(Quest, QuestGiver, Player) + elseif Step == 3 then + Step3_Complete_KilledPillagers(Quest, QuestGiver, Player) + elseif Step == 4 then + Step4_Complete_KilledRavagers(Quest, QuestGiver, Player) + elseif Step == 5 then + Step5_Complete_KilledPirates(Quest, QuestGiver, Player) + end +end \ No newline at end of file diff --git a/server/Quests/SunkenCity/lukurs_antiques.lua b/server/Quests/SunkenCity/lukurs_antiques.lua new file mode 100644 index 000000000..9a0fba33b --- /dev/null +++ b/server/Quests/SunkenCity/lukurs_antiques.lua @@ -0,0 +1,83 @@ +--[[ + Script Name : LukursAntiques.lua + Script Purpose : Handles the quest, "Lukur's Antiques" + Script Author : Neatz09 + Script Date : 12/27/2018 + Script Notes : Auto generated with QuestParser. + + Zone : Sunken City + Quest Giver : Lukur + Preceded by : None + Followed by : None +--]] + +local Lukur = 1240020 +local BloodMask +local ShadowedMask +local DawnMask + + +function Init(Quest) + AddQuestStepObtainItem(Quest, 1, "I need to find the Blood Mask.", 1, 100, "I need to find three ceremonial masks in the Sunken City. I can reach the Sunken City by using any of the bells in and around the City of Freeport.", 878, BloodMask) + AddQuestStepCompleteAction(Quest, 1, "Step1Complete") +end + +function Accepted(Quest, QuestGiver, Player) + FaceTarget(QuestGiver, Player) + conversation = CreateConversation() + + PlayFlavor(QuestGiver, "voiceover/english/optional1/lukur/fprt_adv01_sunken/lukur002.mp3", "", "", 2636400793, 1337735741, Player) + AddConversationOption(conversation, "Thanks, I'll start searching the area.") + StartConversation(conversation, QuestGiver, Player, "I need to add a few specific relics to my collection. Return when you fulfill my order.") +end + +function Declined(Quest, QuestGiver, Player) + -- Add dialog here for when the quest is declined +end + +function Deleted(Quest, QuestGiver, Player) + -- Remove any quest specific items here when the quest is deleted +end + +function Step1Complete(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 1, "I found the Blood Mask.") + + AddQuestStepObtainItem(Quest, 2, "I need to find the Shadowed Mask.", 1, 100, "I need to find three ceremonial masks in the Sunken City. I can reach the Sunken City by using any of the bells in and around the City of Freeport.", 879, ShadowedMask) + AddQuestStepCompleteAction(Quest, 2, "Step2Complete") +end + +function Step2Complete(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 2, "I found the Shadowed Mask.") + + AddQuestStepObtainItem(Quest, 3, "I need to find the Dawn Mask.", 1, 100, "I need to find three ceremonial masks in the Sunken City. I can reach the Sunken City by using any of the bells in and around the City of Freeport.", 880, DawnMask) + AddQuestStepCompleteAction(Quest, 3, "Step3Complete") +end + +function Step3Complete(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 3, "I found the Dawn Mask.") + UpdateQuestTaskGroupDescription(Quest, 1, "I found three ceremonial masks.") + + AddQuestStepChat(Quest, 4, "I need to return to Lukur.", 1, "I need to return to Lukur in the Sunken City. I can reach the Sunken City by using any of the bells in and around the City of Freeport.", 11, Lukur) + AddQuestStepCompleteAction(Quest, 4, "QuestComplete") +end + +function QuestComplete(Quest, QuestGiver, Player) + -- The following UpdateQuestStepDescription and UpdateTaskGroupDescription are not needed, parser adds them for completion in case stuff needs to be moved around + UpdateQuestStepDescription(Quest, 4, "I returned to Lukur.") + UpdateQuestTaskGroupDescription(Quest, 2, "I returned to Lukur.") + + UpdateQuestDescription(Quest, "I found the three ceremonial masks that Lukur needed.") + GiveQuestReward(Quest, Player) +end + +function Reload(Quest, QuestGiver, Player, Step) + if Step == 1 then + Step1Complete(Quest, QuestGiver, Player) + elseif Step == 2 then + Step2Complete(Quest, QuestGiver, Player) + elseif Step == 3 then + Step3Complete(Quest, QuestGiver, Player) + elseif Step == 4 then + QuestComplete(Quest, QuestGiver, Player) + end +end \ No newline at end of file diff --git a/server/Quests/SunkenCity/searching_for_the_ruins.lua b/server/Quests/SunkenCity/searching_for_the_ruins.lua new file mode 100644 index 000000000..25d070c57 --- /dev/null +++ b/server/Quests/SunkenCity/searching_for_the_ruins.lua @@ -0,0 +1,79 @@ +--[[ + Script Name : Quests/SunkenCity/searching_for_the_ruins.lua + Script Purpose : Handles the quest, "Searching for the Ruins" + Script Author : Scatman + Script Date : 2009.07.28 + + Zone : Sunken City + Quest Giver: Inquisitor Thorson + Preceded by: Time to Stop a Madman (time_to_stop_a_madman.lua) + Followed by: None +--]] + +function Init(Quest) + AddQuestStepChat(Quest, 1, "I should make my way to the Freeport Ruins and speak to Captain Arellius.", 1, "I should go to the Ruins and speak to Captain Arellius.", 0, 1270003) + AddQuestStepCompleteAction(Quest, 1, "Quest_Complete") +end + +function Accepted(Quest, QuestGiver, Player) + FaceTarget(QuestGiver, Player) + conversation = CreateConversation() + + AddConversationOption(conversation, "How do I get there?", "dlg_24_3") + AddConversationOption(conversation, "I'm leaving.") + StartConversation(conversation, QuestGiver, Player, "I must remain here to finish my report for the Dismal Rage. However, I would like you to journey to the Freeport Ruins and seek out an acquaintance of mine named Captain Arellius. I have heard that your help is much needed there. I will send word that you are coming, hero of Freeport.") +end + +function dlg_24_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/inquisitor_thorson/fprt_adv01_sunken/inquisitor_thorson049.mp3", "", "", 3163252250, 288796806, Spawn) + AddConversationOption(conversation, "Are there any other places you could recommend where I can find adventures?", "dlg_24_4") + AddConversationOption(conversation, "Thank you, Inquisitor Thorson. Farewell.") + StartConversation(conversation, NPC, Spawn, "The fastest route to the Ruins is to use the mariner's bell at the end of the dock for traveling outside the city proper. This will summon transportation to take you to the Ruins, where Captain Arellius of the Freeport Militia will be awaiting your assistance.") +end + +function dlg_24_4(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/inquisitor_thorson/fprt_adv01_sunken/inquisitor_thorson061.mp3", "", "", 2845086086, 1715171802, Spawn) + AddConversationOption(conversation, "Tell me more about Custodian Zaddar.", "dlg_24_5") + AddConversationOption(conversation, "Tell me more about Enforcer Kurdek.", "dlg_24_6") + AddConversationOption(conversation, "I may seek them out. Thank you.") + StartConversation(conversation, NPC, Spawn, "You can speak to Custodian Zaddar in the Graveyard and Enforcer Kurdek in the Sprawl. They could both use assistance from an able adventurer.") +end + +function dlg_24_5(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/inquisitor_thorson/fprt_adv01_sunken/inquisitor_thorson062.mp3", "", "", 4025975768, 1084751097, Spawn) + AddConversationOption(conversation, "Tell me more about Enforcer Kurdek.", "dlg_24_6") + AddConversationOption(conversation, "Thank you for the advice.") + StartConversation(conversation, NPC, Spawn, "Custodian Zaddar in the Graveyard is trying to determine what's behind a recent increase in undead attacks. Use the mariner's bell on the docks of your home district to travel to Stonestair Byway. Head west until you see a passage to the south. The gate at the end leads to the Graveyard.") +end + +function dlg_24_6(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/inquisitor_thorson/fprt_adv01_sunken/inquisitor_thorson063.mp3", "", "", 3377387482, 1184471101, Spawn) + AddConversationOption(conversation, "Tell me more about Custodian Zaddar.", "dlg_24_5") + AddConversationOption(conversation, "Thank you for the advice.") + StartConversation(conversation, NPC, Spawn, "Enforcer Kurdek in the Sprawl could use a hand keeping the local gangs in line. To journey to the Sprawl, use the mariner's bell on the docks of your home district to travel to Big Bend. Follow the halls north, then take the west passageway to the west gate.") +end + +function Declined(Quest, QuestGiver, Player) +end + +function Quest_Complete(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 1, "I have spoken to Captain Arellius in the Ruins.") + UpdateQuestTaskGroupDescription(Quest, 1, "I have spoken to Captain Arellius.") + GiveQuestReward(Quest, Player) + UpdateQuestDescription(Quest, "I found the Ruins and have reported to Captain Arellius. I will now see what duties she needs me to perform.") +end + +function Reload(Quest, QuestGiver, Player, Step) +end \ No newline at end of file diff --git a/server/Quests/SunkenCity/spirits_of_the_night.lua b/server/Quests/SunkenCity/spirits_of_the_night.lua new file mode 100644 index 000000000..da8360e5f --- /dev/null +++ b/server/Quests/SunkenCity/spirits_of_the_night.lua @@ -0,0 +1,48 @@ +--[[ + Script Name : Quests/SunkenCity/spirits_of_the_night.lua + Script Purpose : Handles the quest, "Spirits of the Night" + Script Author : Scatman + Script Date : 2009.07.28 + + Zone : Sunken City + Quest Giver: Inquisitor Thorson + Preceded by: A Flowing Conversation (a_flowing_conversation.lua) + Followed by: Cataloging Local Critters (cataloging_local_critters.lua) +--]] + +function Init(Quest) + AddQuestStepKill(Quest, 1, "I should defeat four undead creatures to obtain their spectral essences.", 4, 100, "I must search the Sunken City by night and collect the spectral essences of the undead that haunt this place.", 2515, 1240015, 1240012, 1240103, 1240028, 1240017, 1240030, 1240018, 1240135, 1240011, 1240016, 1240049, 1240060, 1240035, 1240059, 1240036, 1240054, 1240048, 1240053, 1240046, 1240026, 1240027, 1240034, 1240021, 1240022, 1240024, 1240070, 1240056, 1240112, 1240104, 1240045, 1240107, 1240040, 1240132, 1240038, 1240063, 1240144, 1240050, 1240061, 1240051, 1240146, 1240052, 1240057, 1240062, 1240108, 1240058, 1240109) + AddQuestStepCompleteAction(Quest, 1, "Step1_Complete_KilledSkeletons") +end + +function Accepted(Quest, QuestGiver, Player) + FaceTarget(QuestGiver, Player) + conversation = CreateConversation() + + AddConversationOption(conversation, "I will return.") + StartConversation(conversation, QuestGiver, Player, "The undead walk just ahead, though some lurk a bit farther in. Remember, more of these ghastly creatures can be found after night falls. Return to me when you have their essences.") +end + +function Declined(Quest, QuestGiver, Player) +end + +function Step1_Complete_KilledSkeletons(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 1, "I have obtained four spectral essences from the undead.") + UpdateQuestTaskGroupDescription(Quest, 1, "I have defeated undead creatures and collected their spectral essences.") + + AddQuestStepChat(Quest, 2, "I should take the spectral essences to Inquisitor Thorson.", 1, "I need to return to Inquisitor Thorson and give him the essences.", 0, 1240007) + AddQuestStepCompleteAction(Quest, 2, "Quest_Complete") +end + +function Quest_Complete(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 2, "I have returned to Inquisitor Thorson.") + UpdateQuestTaskGroupDescription(Quest, 2, "I told Thorson that I spoke to the strange iksar named Yarr.") + GiveQuestReward(Quest, Player) + UpdateQuestDescription(Quest, "I have obtained the essences of four undead beings in the Sunken City. It is my hope that studying these essences can help Investigator Thorson uncover the mysteries of this haunted place.") +end + +function Reload(Quest, QuestGiver, Player, Step) + if Step == 1 then + Step1_Complete_KilledSkeletons(Quest, QuestGiver, Player) + end +end \ No newline at end of file diff --git a/server/Quests/SunkenCity/taking_back_from_the_blackshields.lua b/server/Quests/SunkenCity/taking_back_from_the_blackshields.lua new file mode 100644 index 000000000..62a015954 --- /dev/null +++ b/server/Quests/SunkenCity/taking_back_from_the_blackshields.lua @@ -0,0 +1,49 @@ +--[[ + Script Name : Quests/SunkenCity/taking_back_from_the_blackshields.lua + Script Purpose : Handles the quest, "Taking Back from the Blackshields" + Script Author : Scatman + Script Date : 2009.07.28 + + Zone : Sunken City + Quest Giver: Investigator Curfield + Preceded by: Finding the Investigator (finding_the_investigator) + Followed by: Finding the Shrine (finding_the_shrine.lua) +--]] + +function Init(Quest) + AddQuestStep(Quest, 1, "I should examine the barrels I see near the Blackshield pirates.", 1, 100, "I need to search barrels near the Blackshields to find the stolen research for Curfeld.", 2285) + AddQuestStepCompleteAction(Quest, 1, "Step1_Complete_FoundBarrel") +end + +function Accepted(Quest, QuestGiver, Player) + FaceTarget(QuestGiver, Player) + conversation = CreateConversation() + + PlayFlavor(QuestGiver, "voiceover/english/tutorial_revamp/investigator_curfeld/fprt_adv01_sunken/investigator_curfeld008.mp3", "", "", 2335171554, 1884234984, Player) + AddConversationOption(conversation, "I will watch my back.") + StartConversation(conversation, QuestGiver, Player, "My observers tell me that the Blackshields are concealing stolen goods in the old wooden barrels scattered about to the north. Be careful, though. They're an unruly bunch that won't hesitate to attack someone they think might be after their ill-gotten gain.") +end + +function Declined(Quest, QuestGiver, Player) +end + +function Step1_Complete_FoundBarrel(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 1, "I found the research notes inside a barrel.") + UpdateQuestTaskGroupDescription(Quest, 1, "I found the stolen research materials inside a barrel.") + + AddQuestStepChat(Quest, 2, "I must return to Investigator Curfeld.", 1, "I should take the stolen research back to Investigator Curfeld.", 0, 1240083) + AddQuestStepCompleteAction(Quest, 2, "Quest_Complete") +end + +function Quest_Complete(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 2, "I have returned to Investigator Curfeld.") + UpdateQuestTaskGroupDescription(Quest, 2, "I have returned the research to Investigator Curfeld.") + GiveQuestReward(Quest, Player) + UpdateQuestDescription(Quest, "I found Investigator Curfeld's stolen research inside one of the Blackshields' barrels and have returned the papers to Curfeld. Maybe now he won't be so curt with me.") +end + +function Reload(Quest, QuestGiver, Player, Step) + if Step == 1 then + Step1_Complete_FoundBarrel(Quest, QuestGiver, Player) + end +end \ No newline at end of file diff --git a/server/Quests/SunkenCity/time_to_stop_a_madman.lua b/server/Quests/SunkenCity/time_to_stop_a_madman.lua new file mode 100644 index 000000000..61d46bb24 --- /dev/null +++ b/server/Quests/SunkenCity/time_to_stop_a_madman.lua @@ -0,0 +1,49 @@ +--[[ + Script Name : Quests/SunkenCity/time_to_stop_a_madman.lua + Script Purpose : Handles the quest, "Time to Stop a Madman" + Script Author : Scatman + Script Date : 2009.07.28 + + Zone : Sunken City + Quest Giver: Inquisitor Thorson + Preceded by: Back to the Inquisitor (back_to_the_inquisitor.lua) + Followed by: Searching for the Ruins (searching_for_the_ruins.lua) +--]] + +function Init(Quest) + AddQuestStepKill(Quest, 1, "I must stop Curfeld's deadly scheme at all costs!", 1, 100, "I must confront Investigator Curfeld and do whatever it takes to stop him.", 0, 1240083) + AddQuestStepCompleteAction(Quest, 1, "Step1_complete_KilledCurfield") +end + +function Accepted(Quest, QuestGiver, Player) + FaceTarget(QuestGiver, Player) + conversation = CreateConversation() + + PlayFlavor(QuestGiver, "voiceover/english/tutorial_revamp/inquisitor_thorson/fprt_adv01_sunken/inquisitor_thorson045.mp3", "", "", 1129031439, 214486034, Player) + AddConversationOption(conversation, "I will return... I hope.") + StartConversation(conversation, QuestGiver, Player, "You have my full authority to take whatever action is necessary. Fear not; I will ensure that the high priestess and the rest of the Dismal Rage know that your actions were necessary to save our city. Do this, and not only will you be rewarded but your fame will grow. Hurry, go!") +end + +function Declined(Quest, QuestGiver, Player) +end + +function Step1_complete_KilledCurfield(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 1, "I faced Curfeld and defeated him in battle.") + UpdateQuestTaskGroupDescription(Quest, 1, "I have ended Curfeld's threat once and for all.") + + AddQuestStepChat(Quest, 2, "I should return to Inquisitor Thorson and let him know I was victorious.", 1, "I should tell Inquisitor Thorson that Curfeld is no more.", 0, 1240007) + AddQuestStepCompleteAction(Quest, 2, "Quest_Complete") +end + +function Quest_Complete(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 2, "I let Thorson know that I helped save Freeport.") + UpdateQuestTaskGroupDescription(Quest, 2, "I told Thorson what transpired.") + GiveQuestReward(Quest, Player) + UpdateQuestDescription(Quest, "I defeated Investigator Curfeld in battle, ending the threat he posed to Freeport. Hopefully Thorson will be true to his word and let the Dismal Rage know that I helped uncover this plot. It would certainly help increase my standing with the Overlord.") +end + +function Reload(Quest, QuestGiver, Player, Step) + if Step == 1 then + Step1_complete_KilledCurfield(Quest, QuestGiver, Player) + end +end \ No newline at end of file diff --git a/server/Quests/TheFeerrott/history_of_the_ayrdal_part_iii.lua b/server/Quests/TheFeerrott/history_of_the_ayrdal_part_iii.lua new file mode 100644 index 000000000..f6828bf8a --- /dev/null +++ b/server/Quests/TheFeerrott/history_of_the_ayrdal_part_iii.lua @@ -0,0 +1,93 @@ +--[[ + Script Name : Quests/TheFeerrott/history_of_the_ayrdal_part_iii.lua + Script Author : Ememjr + Script Date : 2019.03.25 06:03:41 + Script Purpose : + + Zone : TheFeerrott + Quest Giver: + Preceded by: None + Followed by: +--]] + +function Init(Quest) + AddQuestStepLocation(Quest, 1, "I need to visit The Drowning Causeway.", 10, "I must see The Drowning Causeway in the Feerrott.", 11, 105, 0, -131) + AddQuestStepCompleteAction(Quest, 1, "Step1Complete") +end + +function Accepted(Quest, QuestGiver, Player) + -- Add dialog here for when the quest is accepted +end + +function Declined(Quest, QuestGiver, Player) + -- Add dialog here for when the quest is declined +end + +function Deleted(Quest, QuestGiver, Player) + -- Remove any quest specific items here when the quest is deleted +end + +function Step1Complete(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 1, "I have visited The Drowning Causeway.") + UpdateQuestTaskGroupDescription(Quest, 1, "I have seen The Drowning Causeway.") + + AddQuestStep(Quest, 2, "I should read the book.", 1, 100, "I should read the book now that I have a new page.", 2180) + AddQuestStepCompleteAction(Quest, 2, "Step2Complete") +end + +function Step2Complete(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 2, "I have read the book.") + UpdateQuestTaskGroupDescription(Quest, 2, "I have read the book.") + + AddQuestStepLocation(Quest, 3, "I need to visit The Jungle of Alliz Evol.", 10, "I need to visit The Jungle of Alliz Evol in the Feerrott.", 11, 10, 2, -23) + AddQuestStepCompleteAction(Quest, 3, "Step3Complete") +end + +function Step3Complete(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 3, "I have seen The Jungle of Alliz Evol.") + UpdateQuestTaskGroupDescription(Quest, 3, "I have seen The Jungle of Alliz Evol.") + + AddQuestStep(Quest, 4, "I should read the book.", 1, 100, "I should read the book now that I have a new page.", 2180) + AddQuestStepCompleteAction(Quest, 4, "Step4Complete") +end + +function Step4Complete(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 4, "I have read the book.") + UpdateQuestTaskGroupDescription(Quest, 4, "I have read the book.") + + AddQuestStepLocation(Quest, 5, "I need to visit Altar of the Four Canons.", 10, "I need to see the Altar of the Four Canons in the Feerrott.", 11, -730, 8, 220) + AddQuestStepCompleteAction(Quest, 5, "Step5Complete") +end + +function Step5Complete(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 5, "I have seen Altar of the Four Canons.") + UpdateQuestTaskGroupDescription(Quest, 5, "I have seen Altar of the Four Canons.") + + AddQuestStep(Quest, 6, "I should read the book.", 1, 100, "I should read the book now that I have a new page.", 2180) + AddQuestStepCompleteAction(Quest, 6, "QuestComplete") +end + +function QuestComplete(Quest, QuestGiver, Player) + -- The following UpdateQuestStepDescription and UpdateTaskGroupDescription are not needed, parser adds them for completion in case stuff needs to be moved around + UpdateQuestStepDescription(Quest, 6, "I have read the book.") + UpdateQuestTaskGroupDescription(Quest, 6, "I have read the book.") + + UpdateQuestDescription(Quest, "I have finished reading this history tome. Perhaps I understand more than I did before.") + GiveQuestReward(Quest, Player) +end + +function Reload(Quest, QuestGiver, Player, Step) + if Step == 1 then + Step1Complete(Quest, QuestGiver, Player) + elseif Step == 2 then + Step2Complete(Quest, QuestGiver, Player) + elseif Step == 3 then + Step3Complete(Quest, QuestGiver, Player) + elseif Step == 4 then + Step4Complete(Quest, QuestGiver, Player) + elseif Step == 5 then + Step5Complete(Quest, QuestGiver, Player) + elseif Step == 6 then + QuestComplete(Quest, QuestGiver, Player) + end +end \ No newline at end of file diff --git a/server/Quests/TheRuins/AJourneyOutsidetheCity b/server/Quests/TheRuins/AJourneyOutsidetheCity new file mode 100644 index 000000000..0935dd726 --- /dev/null +++ b/server/Quests/TheRuins/AJourneyOutsidetheCity @@ -0,0 +1,32 @@ +--[[ + Script Name : Quests/TheRuins/AJourneyOutsidetheCity + Script Author : neatz09 + Script Date : 2018.12.30 11:12:59 + Script Purpose : + + Zone : TheRuins + Quest Giver: + Preceded by: None + Followed by: +--]] + +function Init(Quest) + +end + +function Accepted(Quest, QuestGiver, Player) + +end + +function Declined(Quest, QuestGiver, Player) + +end + +function quest_complete(Quest, QuestGiver, Player) + +end + +function Reload(Quest, QuestGiver, Player, Step) + +end + diff --git a/server/Quests/TheRuins/AngerFang.lua b/server/Quests/TheRuins/AngerFang.lua new file mode 100644 index 000000000..51b1031c7 --- /dev/null +++ b/server/Quests/TheRuins/AngerFang.lua @@ -0,0 +1,32 @@ +--[[ + Script Name : Quests/TheRuins/AngerFang.lua + Script Author : neatz09 + Script Date : 2018.12.30 11:12:54 + Script Purpose : + + Zone : TheRuins + Quest Giver: + Preceded by: None + Followed by: +--]] + +function Init(Quest) + +end + +function Accepted(Quest, QuestGiver, Player) + +end + +function Declined(Quest, QuestGiver, Player) + +end + +function quest_complete(Quest, QuestGiver, Player) + +end + +function Reload(Quest, QuestGiver, Player, Step) + +end + diff --git a/server/Quests/TheRuins/FileaFinalReport.lua b/server/Quests/TheRuins/FileaFinalReport.lua new file mode 100644 index 000000000..ca02606f1 --- /dev/null +++ b/server/Quests/TheRuins/FileaFinalReport.lua @@ -0,0 +1,47 @@ +--[[ + Script Name : FileaFinalReport.lua + Script Purpose : Handles the quest, "File a Final Report" + Script Author : jakejp + Script Date : 12/29/2018 + Script Notes : + + Zone : The Ruins + Quest Giver : Lieutenant Imperidus + Preceded by : Identifying the Lonetusk Ally + Followed by : A Journey Outside the City +--]] + +local CaptainArellius = 1270000 + +function Init(Quest) + AddQuestStepChat(Quest, 1, "Speak to Captain Arellius", 1, "I must report to Captain Arellius on the docks of the Ruins. I can reach the Ruins by using any of the bells in and around the City of Freeport.", 11, CaptainArellius) + AddQuestStepCompleteAction(Quest, 1, "QuestComplete") +end + +function QuestComplete(Quest, QuestGiver, Player) + -- The following UpdateQuestStepDescription and UpdateTaskGroupDescription are not needed, parser adds them for completion in case stuff needs to be moved around + UpdateQuestStepDescription(Quest, 1, "I have informed the captain that the Rujarkians are supplying the orcs in the Ruins with weapons and armor.") + UpdateQuestTaskGroupDescription(Quest, 1, "I have reported back to Captain Arellius.") + + UpdateQuestDescription(Quest, "I informed Captain Arellius that the Rujarkian orcs are supplying the Brokentusk and Lonetusk orcs in the Ruins with improved weapons and armor. The captain was very pleased with my work and rewarded me well. I will now read the note she gave me to lead me to my next adventure.") + GiveQuestReward(Quest, Player) +end + +function Reload(Quest, QuestGiver, Player, Step) + if Step == 1 then + QuestComplete(Quest, QuestGiver, Player) + end +end + +function Accepted(Quest, QuestGiver, Player) + FaceTarget(QuestGiver, Player) + conversation = CreateConversation() + + PlayFlavor(QuestGiver, "voiceover/english/tutorial_revamp/lieutenant_imperidus/fprt_adv04_ruins/revamp/lieutenant_imperidus022.mp3", "", "", 3956036992, 4003496180, Player) + AddConversationOption(conversation, "Thank you, lieutenant. You have earned mine as well.", "dlg_37_3") + StartConversation(conversation, QuestGiver, Player, "Report back to the captain. She will take word of this discovery back to our superiors in the Militia. This is extremely valuable information, my friend. You just might have given Freeport the edge it needs to ensure its safety. You have earned my respect.") +end + +function Declined(Quest, QuestGiver, Player) + -- Add dialog here for when the quest is declined +end \ No newline at end of file diff --git a/server/Quests/TheRuins/IdentifyingtheLonetuskAlly.lua b/server/Quests/TheRuins/IdentifyingtheLonetuskAlly.lua new file mode 100644 index 000000000..13ed56fe7 --- /dev/null +++ b/server/Quests/TheRuins/IdentifyingtheLonetuskAlly.lua @@ -0,0 +1,79 @@ +--[[ + Script Name : IdentifyingtheLonetuskAlly.lua + Script Purpose : Handles the quest, "Identifying the Lonetusk Ally" + Script Author : jakejp + Script Date : 12/29/2018 + Script Notes : + + Zone : The Ruins + Quest Giver : Lieutenant Imperidus + Preceded by : Vengeance for Shoreside + Followed by : File a Final Report +--]] + +local LieutenantImperidus = 1270031 +local prisoner = 1270034 +local OrcDocumentBox = 1270060 + +function Init(Quest) + AddQuestStepChat(Quest, 1, "Interrogate the orc prisoner", 1, "I must interrogate the orc prisoner in the Ruins to find out the identity of the Lonetusk's new benfactor. I can reach the Ruins by using any of the bells in and around the City of Freeport.", 11, prisoner) + AddQuestStepCompleteAction(Quest, 1, "Step1Complete") +end + +function Step1Complete(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 1, "The prisoner didn't know who is supplying the weapons and armor, but told me of a hidden document that might.") + UpdateQuestTaskGroupDescription(Quest, 1, "I have questioned the orc prisoner and found out that the Lonetusk are hiding a document that may reveal the identity of their supplier.") + + AddQuestStepChat(Quest, 2, "Speak to Lieutenant Imperidus", 1, "I must tell Lieutenant Imperidus in the Ruins what I learned from the prisoner. I can reach the Ruins by using any of the bells in and around the City of Freeport.", 11, LieutenantImperidus) + AddQuestStepCompleteAction(Quest, 2, "Step2Complete") +end + +function Step2Complete(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 2, "I told the lieutenant that the Lonetusk have some kind of letter from their mysterious benefactor.") + UpdateQuestTaskGroupDescription(Quest, 2, "I have told Lieutenant Imperidus what I learned from the prisoner.") + + AddQuestStepObtainItem(Quest, 3, "Search for an underground bunker", 1, 100, "I must search underground areas in the Ruins for a secret document in the possession of the Lonetusk orcs. I can reach the Ruins by using any of the bells in and around the City of Freeport.", 374, OrcDocumentBox) + AddQuestStepCompleteAction(Quest, 3, "Step3Complete") +end + +function Step3Complete(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 3, "I found an orcish document hidden in a chest in an underground bunker.") + UpdateQuestTaskGroupDescription(Quest, 3, "I have found the hidden orcish document. I should examine it and report back to Lieutenant Imperidus.") + + AddQuestStepChat(Quest, 4, "Report to Lieutenant Imperidus", 1, "I should report back to Lieutenant Imperidus in the Ruins at the second Militia outpost and give her the document I found. I can reach the Ruins by using any of the bells in and around the City of Freeport.", 11, LieutenantImperidus) + AddQuestStepCompleteAction(Quest, 4, "QuestComplete") +end + +function QuestComplete(Quest, QuestGiver, Player) + -- The following UpdateQuestStepDescription and UpdateTaskGroupDescription are not needed, parser adds them for completion in case stuff needs to be moved around + UpdateQuestStepDescription(Quest, 4, "I have reported back to the lieutenant.") + UpdateQuestTaskGroupDescription(Quest, 4, "I have reported back to Lieutenant Imperidus and gave her the orcish document.") + + UpdateQuestDescription(Quest, "I interrogated the orc prisoner and learned of a document the Lonetusk were guarding. I retrieved the document and returned it to Lieutenant Imperidus of the Freeport Militia, who determined that the Lonetusk and Brokentusk are being supplied by the Rujarkian orcs, a tribe operating out of the Clefts of Rujark in the Desert of Ro. This is important information that must be given to Captain Arellius at the docks.") + GiveQuestReward(Quest, Player) +end + +function Reload(Quest, QuestGiver, Player, Step) + if Step == 1 then + Step1Complete(Quest, QuestGiver, Player) + elseif Step == 2 then + Step2Complete(Quest, QuestGiver, Player) + elseif Step == 3 then + Step3Complete(Quest, QuestGiver, Player) + elseif Step == 4 then + QuestComplete(Quest, QuestGiver, Player) + end +end + +function Accepted(Quest, QuestGiver, Player) + FaceTarget(QuestGiver, Player) + conversation = CreateConversation() + + PlayFlavor(QuestGiver, "voiceover/english/tutorial_revamp/lieutenant_imperidus/fprt_adv04_ruins/revamp/lieutenant_imperidus018.mp3", "", "", 1717970804, 3719629105, Player) + AddConversationOption(conversation, "I'll return when I have the information you need, lieutenant.", "dlg_30_4") + StartConversation(conversation, QuestGiver, Player, "I knew we could rely on you! Take any measures necessary to get the beast to talk. ANY measures... got it?") +end + +function Declined(Quest, QuestGiver, Player) + -- Add dialog here for when the quest is declined +end \ No newline at end of file diff --git a/server/Quests/TheRuins/IfIHadAHammer.lua b/server/Quests/TheRuins/IfIHadAHammer.lua new file mode 100644 index 000000000..f17ec1e5b --- /dev/null +++ b/server/Quests/TheRuins/IfIHadAHammer.lua @@ -0,0 +1,32 @@ +--[[ + Script Name : Quests/TheRuins/IfIHadAHammer.lua + Script Author : neatz09 + Script Date : 2018.12.30 11:12:40 + Script Purpose : + + Zone : TheRuins + Quest Giver: + Preceded by: None + Followed by: +--]] + +function Init(Quest) + +end + +function Accepted(Quest, QuestGiver, Player) + +end + +function Declined(Quest, QuestGiver, Player) + +end + +function quest_complete(Quest, QuestGiver, Player) + +end + +function Reload(Quest, QuestGiver, Player, Step) + +end + diff --git a/server/Quests/TheRuins/KnocktheFightOutofEm.lua b/server/Quests/TheRuins/KnocktheFightOutofEm.lua new file mode 100644 index 000000000..8bd91131d --- /dev/null +++ b/server/Quests/TheRuins/KnocktheFightOutofEm.lua @@ -0,0 +1,104 @@ +--[[ + Script Name : KnocktheFightOutofEm.lua + Script Purpose : Handles the quest, "Knock the Fight Out of 'Em" + Script Author : jakejp + Script Date : 12/28/2018 + Script Notes : + + Zone : The Ruins + Quest Giver : Lieutenant Imperidus + Preceded by : Stepping Up The Offensive + Followed by : Vengeance For Shoreside +--]] + +local KnocktheFightOutofEm = 392 + +local LieutenantImperidus = 1270031 + +local OrcCauldron = 1270075 +local OrcKnight = 1270076 +local WorshipIdol = 1270074 +local WineCask = 1270073 + +function Init(Quest) + AddQuestStepObtainItem(Quest, 1, "Throw dirt in the orcs' dinner pot", 1, 100, "I must seek out the symbols in the Ruins that the orcs use to inspire themselves. Then I will defile these objects to crush their spirits. I can reach the Ruins by using any of the bells in and around the City of Freeport.", 650, OrcCauldron) + AddQuestStepCompleteAction(Quest, 1, "Step1Complete") + AddQuestStepObtainItem(Quest, 2, "Deface the statue of an orc knight", 1, 100, "I must seek out the symbols in the Ruins that the orcs use to inspire themselves. Then I will defile these objects to crush their spirits. I can reach the Ruins by using any of the bells in and around the City of Freeport.", 1214, OrcKnight) + AddQuestStepCompleteAction(Quest, 2, "Step2Complete") + AddQuestStepObtainItem(Quest, 3, "Deface a Lonetusk worship idol", 1, 100, "I must seek out the symbols in the Ruins that the orcs use to inspire themselves. Then I will defile these objects to crush their spirits. I can reach the Ruins by using any of the bells in and around the City of Freeport.", 1058, WorshipIdol) + AddQuestStepCompleteAction(Quest, 3, "Step3Complete") + AddQuestStepObtainItem(Quest, 4, "Poke a hole in the orcs' wine cask", 1, 100, "I must seek out the symbols in the Ruins that the orcs use to inspire themselves. Then I will defile these objects to crush their spirits. I can reach the Ruins by using any of the bells in and around the City of Freeport.", 2287, WineCask) + AddQuestStepCompleteAction(Quest, 4, "Step4Complete") +end + +function CheckProgress(Quest, QuestGiver, Player) + if QuestStepIsComplete(Player, KnocktheFightOutofEm, 1) and QuestStepIsComplete(Player, KnocktheFightOutofEm, 2) and QuestStepIsComplete(Player, KnocktheFightOutofEm, 3) and QuestStepIsComplete(Player, KnocktheFightOutofEm, 4) then + NextStep(Quest, QuestGiver, Player) + end +end + +function Step1Complete(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 1, "I threw dirt in the orcs' dinner pot. Take that, orcs!") + CheckProgress(Quest, QuestGiver, Player) + +end + +function Step2Complete(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 2, "I have defaced the statue of an orc knight.") + CheckProgress(Quest, QuestGiver, Player) + +end + +function Step3Complete(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 3, "I have defaced an idol that the Lonetusk seem to worship.") + CheckProgress(Quest, QuestGiver, Player) +end + +function Step4Complete(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 4, "I poked a hole in the orcs' wine cask. Now they'll be thirsty!") + CheckProgress(Quest, QuestGiver, Player) +end + +function NextStep(Quest, QuestGiver, Player) + UpdateQuestTaskGroupDescription(Quest, 1, "I found and defaced many objects the orcs hold dear. Hopefully this takes the fight out of them.") + + AddQuestStepChat(Quest, 5, "Report to Lieutenant Imperidus", 1, "Having defaced the orc artifacts, I should return to Lieutenant Imperidus at the second outpost in the Ruins. I can reach the Ruins by using any of the bells in and around the City of Freeport.", 11, LieutenantImperidus) + AddQuestStepCompleteAction(Quest, 5, "QuestComplete") +end + +function QuestComplete(Quest, QuestGiver, Player) + -- The following UpdateQuestStepDescription and UpdateTaskGroupDescription are not needed, parser adds them for completion in case stuff needs to be moved around + UpdateQuestStepDescription(Quest, 5, "I have reported back to Lieutenant Imperidus.") + UpdateQuestTaskGroupDescription(Quest, 2, "I have reported back to Lieutenant Imperidus.") + + UpdateQuestDescription(Quest, "I followed the orders of Lieutenant Imperidus, defacing statues the Lonetusk orcs use to inspire their troops. I also threw dirt into their food and drained their supply of wine. Hopefully the lieutenant's plan will work and my actions will have takens some of the fight out of the orcs.") + GiveQuestReward(Quest, Player) +end + +function Reload(Quest, QuestGiver, Player, Step) + if Step == 1 then + Step1Complete(Quest, QuestGiver, Player) + elseif Step == 2 then + Step2Complete(Quest, QuestGiver, Player) + elseif Step == 3 then + Step3Complete(Quest, QuestGiver, Player) + elseif Step == 4 then + Step4Complete(Quest, QuestGiver, Player) + elseif Step == 5 then + QuestComplete(Quest, QuestGiver, Player) + end +end + +function Accepted(Quest, QuestGiver, Player) + FaceTarget(QuestGiver, Player) + conversation = CreateConversation() + + PlayFlavor(QuestGiver, "voiceover/english/tutorial_revamp/lieutenant_imperidus/fprt_adv04_ruins/revamp/lieutenant_imperidus009.mp3", "", "", 3046376303, 2999823619, Player) + AddConversationOption(conversation, "Do you really think wrecking statues and ruining food is going to ensure victory?", "dlg_3_8") + AddConversationOption(conversation, "I'll get to it.") + StartConversation(conversation, QuestGiver, Player, "Our surest path to victory is to take the fight out of them. Go out there and face the Lonetusk, and deface any statues you see. Seek out their supplies of food and drink and spoil them. Without symbols of victory to inspire them and food in their bellies, their spirits will crumble and they will become easy pickings for us.") +end + +function Declined(Quest, QuestGiver, Player) + -- Add dialog here for when the quest is declined +end \ No newline at end of file diff --git a/server/Quests/TheRuins/PawnsInTheGame.lua b/server/Quests/TheRuins/PawnsInTheGame.lua new file mode 100644 index 000000000..f47bff429 --- /dev/null +++ b/server/Quests/TheRuins/PawnsInTheGame.lua @@ -0,0 +1,59 @@ +--[[ + Script Name : PawnsintheGame.lua + Script Purpose : Handles the quest, "Pawns in the Game" + Script Author : jakejp + Script Date : 10/4/2018 + Script Notes : + + Zone : The Ruins + Quest Giver : Lieutenant Argosian + Preceded by : Reporting For Duty + Followed by : Pounding the Enemy +--]] + +local brokentuskpawn1 = 1270005 +local brokentuskpawn2 = 1270017 +local LieutenantArgosian = 1270019 + +function Init(Quest) + AddQuestStepKill(Quest, 1, "Defeat Brokentusk pawns", 10, 100, "I must aid Freeport by defeating the Brokentusk pawns in the Ruins. I can reach the Ruins by using any of the bells in and around the City of Freeport.", 2489, brokentuskpawn1, brokentuskpawn2) + AddQuestStepCompleteAction(Quest, 1, "Step1Complete") +end + +function Step1Complete(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 1, "I defeated 10 Brokentusk pawns and proved my worth.") + UpdateQuestTaskGroupDescription(Quest, 1, "I crushed the Brokentusk pawns as ordered.") + + AddQuestStepChat(Quest, 2, "Report to Lieutenant Argosian", 1, "I should return to Lieutenant Argosian in the Ruins and tell him of my victory. I can reach the Ruins by using any of the bells in and around the City of Freeport.", 11, LieutenantArgosian) + AddQuestStepCompleteAction(Quest, 2, "QuestComplete") +end + +function QuestComplete(Quest, QuestGiver, Player) + -- The following UpdateQuestStepDescription and UpdateTaskGroupDescription are not needed, parser adds them for completion in case stuff needs to be moved around + UpdateQuestStepDescription(Quest, 2, "I have reported back to Lieutenant Argosian.") + UpdateQuestTaskGroupDescription(Quest, 2, "I have returned to the lieutenant.") + + UpdateQuestDescription(Quest, "Following the orders of Lieutenant Argosian, I defeated a number of the Brokentusk pawns. They were relatively easy prey, so I will ask Argosian for a more challenging assignment.") + GiveQuestReward(Quest, Player) +end + +function Reload(Quest, QuestGiver, Player, Step) + if Step == 1 then + Step1Complete(Quest, QuestGiver, Player) + elseif Step == 2 then + QuestComplete(Quest, QuestGiver, Player) + end +end + +function Accepted(Quest, QuestGiver, Player) + FaceTarget(QuestGiver, Player) + conversation = CreateConversation() + + PlayFlavor(QuestGiver, "voiceover/english/tutorial_revamp/lieutenant_argosian/fprt_adv04_ruins/revamp/lieutenant_argosian009b.mp3", "", "", 3351588566, 3135177671, Player) + AddConversationOption(conversation, "I will do so.", "dlg_4_9") + StartConversation(conversation, QuestGiver, Player, "Get to work, citizen. You have your orders, now carry them out.") +end + +function Declined(Quest, QuestGiver, Player) + -- Add dialog here for when the quest is declined +end \ No newline at end of file diff --git a/server/Quests/TheRuins/PoundingTheEnemy.lua b/server/Quests/TheRuins/PoundingTheEnemy.lua new file mode 100644 index 000000000..8feb4d9b5 --- /dev/null +++ b/server/Quests/TheRuins/PoundingTheEnemy.lua @@ -0,0 +1,109 @@ +--[[ + Script Name : PoundingtheEnemy.lua + Script Purpose : Handles the quest, "Pounding the Enemy" + Script Author : jakejp + Script Date : 10/4/2018 + Script Notes : + + Zone : The Ruins + Quest Giver : Lieutenant Argosian + Preceded by : Pawns in the Game + Followed by : Prophet and Loss +--]] + +-- QUEST ID'S -- +local PoundingTheEnemy = 370 + +-- MOB ID'S -- +local BrokentuskGuard = 1270014 +local BrokentuskWarrior = 1270013 +local BrokentuskOverseer = 1270006 + +-- NPC ID's -- +local LieutenantArgosian = 1270019 + +function Init(Quest) + AddQuestStepKill(Quest, 1, "Defeat Brokentusk guards", 5, 100, "I have been ordered to defeat the Brokentusk orcs in the Ruins and defend the vagrant squatters. I can reach the Ruins by using any of the bells in and around the City of Freeport.", 2489, BrokentuskGuard) + AddQuestStepKill(Quest, 2, "Defeat Brokentusk warriors", 5, 100, "I have been ordered to defeat the Brokentusk orcs in the Ruins and defend the vagrant squatters. I can reach the Ruins by using any of the bells in and around the City of Freeport.", 2489, BrokentuskWarrior) + AddQuestStepKill(Quest, 3, "Slay the overseer", 1, 100, "I have been ordered to defeat the Brokentusk orcs in the Ruins and defend the vagrant squatters. I can reach the Ruins by using any of the bells in and around the City of Freeport.", 2489, BrokentuskOverseer) + AddQuestStepCompleteAction(Quest, 1, "Step1Complete") + AddQuestStepCompleteAction(Quest, 2, "Step2Complete") + AddQuestStepCompleteAction(Quest, 3, "Step3Complete") +end + +function CheckProgress(Quest, QuestGiver, Player) + if QuestStepIsComplete(Player, PoundingTheEnemy, 1) and QuestStepIsComplete(Player, PoundingTheEnemy, 2) and QuestStepIsComplete(Player, PoundingTheEnemy, 3) then + Step4Complete(Quest, QuestGiver, Player) + end +end + +function Step1Complete(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 1, "I have defeated five Brokentusk guards.") + CheckProgress(Quest, QuestGiver, Player) + +end + +function Step2Complete(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 2, "I have defeated five Brokentusk warriors.") + CheckProgress(Quest, QuestGiver, Player) + +end + +function Step3Complete(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 3, "I have slain the orc overseer.") + CheckProgress(Quest, QuestGiver, Player) +end + +function Step4Complete(Quest, QuestGiver, Player) + UpdateQuestTaskGroupDescription(Quest, 1, "I have defeated the orcs, keeping the vagrants safe for now.") + + AddQuestStepChat(Quest, 4, "Report to Lieutenant Argosian", 1, "I should return to Lieutenant Argosian in the Ruins and report that the vagrants are safe for now. I can reach the Ruins by using any of the bells in and around the City of Freeport.", 11, LieutenantArgosian) + AddQuestStepCompleteAction(Quest, 4, "QuestComplete") +end + +function QuestComplete(Quest, QuestGiver, Player) + -- The following UpdateQuestStepDescription and UpdateTaskGroupDescription are not needed, parser adds them for completion in case stuff needs to be moved around + UpdateQuestStepDescription(Quest, 4, "I have reported back to Lieutenant Argosian.") + UpdateQuestTaskGroupDescription(Quest, 2, "I have returned to Lieutenant Argosian.") + + UpdateQuestDescription(Quest, "I defeated a variety of Brokentusk orcs and kept the squatters safe in the Ruins. The threat is far from over, however.") + GiveQuestReward(Quest, Player) +end + +function Reload(Quest, QuestGiver, Player, Step) + --[[ if Step == 1 then + Step1Complete(Quest, QuestGiver, Player) + elseif Step == 2 then + Step2Complete(Quest, QuestGiver, Player) + elseif Step == 3 then + Step3Complete(Quest, QuestGiver, Player) + elseif Step == 4 then + QuestComplete(Quest, QuestGiver, Player) + end + --]] + if QuestStepIsComplete(Player, PoundingTheEnemy, 1) then + Step1Complete(Quest, QuestGiver, Player) + end + if QuestStepIsComplete(Player, PoundingTheEnemy, 2) then + Step2Complete(Quest, QuestGiver, Player) + end + if QuestStepIsComplete(Player, PoundingTheEnemy, 3) then + Step3Complete(Quest, QuestGiver, Player) + end + if QuestStepIsComplete(Player, PoundingTheEnemy, 4) then + Step4Complete(Quest, QuestGiver, Player) + end +end + +function Accepted(Quest, QuestGiver, Player) + FaceTarget(QuestGiver, Player) + conversation = CreateConversation() + + PlayFlavor(QuestGiver, "voiceover/english/tutorial_revamp/lieutenant_argosian/fprt_adv04_ruins/revamp/lieutenant_argosian015b.mp3", "", "", 102436079, 1387861460, Player) + AddConversationOption(conversation, "I will.", "dlg_10_5") + StartConversation(conversation, QuestGiver, Player, "I knew I could count on you. Return to me when the orcs have paid for their crimes.") +end + +function Declined(Quest, QuestGiver, Player) + -- Add dialog here for when the quest is declined +end \ No newline at end of file diff --git a/server/Quests/TheRuins/ProphetAndLoss.lua b/server/Quests/TheRuins/ProphetAndLoss.lua new file mode 100644 index 000000000..cd50a00c1 --- /dev/null +++ b/server/Quests/TheRuins/ProphetAndLoss.lua @@ -0,0 +1,97 @@ +--[[ + Script Name : ProphetandLoss.lua + Script Purpose : Handles the quest, "Prophet and Loss" + Script Author : jakejp + Script Date : 10/4/2018 + Script Notes : + + Zone : The Ruins + Quest Giver : Lieutenant Argosian + Preceded by : Pounding the Enemy + Followed by : Requesting Further Orders +--]] + +-- QUEST ID'S -- +local ProphetandLoss = 371 + +-- LOCATION ID'S -- + +-- MOB ID'S -- +local BrokentuskWarrior = 1270013 +local BrokentuskProphet = 1270009 + +-- NPC ID'S -- +local LieutenantArgosian = 1270019 + +function Init(Quest) + AddQuestStepLocation(Quest, 1, "Find an old shrine guarded by Brokentusk orcs", 10, "I should search for an old shrine in the Ruins guarded by prophets past the Brokentusks north of the docks. Then I should eliminate the orcs guarding it. I can reach the Ruins by using any of the bells in and around the City of Freeport.", 1215, -69, 0, 68) + AddQuestStepKill(Quest, 2, "Defeat Brokentusk warriors", 4, 100, "I should search for an old shrine in the Ruins guarded by prophets past the Brokentusks north of the docks. Then I should eliminate the orcs guarding it. I can reach the Ruins by using any of the bells in and around the City of Freeport.", 2489, BrokentuskWarrior) + AddQuestStepKill(Quest, 3, "Defeat Brokentusk prophets", 4, 100, "I should search for an old shrine in the Ruins guarded by prophets past the Brokentusks north of the docks. Then I should eliminate the orcs guarding it. I can reach the Ruins by using any of the bells in and around the City of Freeport.", 2489, BrokentuskProphet) + AddQuestStepCompleteAction(Quest, 1, "Step1Complete") + AddQuestStepCompleteAction(Quest, 2, "Step2Complete") + AddQuestStepCompleteAction(Quest, 3, "Step3Complete") +end + +function CheckProgress(Quest, QuestGiver, Player) + if QuestStepIsComplete(Player, ProphetandLoss, 1) and QuestStepIsComplete(Player, ProphetandLoss, 2) and QuestStepIsComplete(Player, ProphetandLoss, 3) then + ReturnToArgosian(Quest, QuestGiver, Player) + end +end + +function Step1Complete(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 1, "I found the old shrine, which seems to be a relic of Shoreside.") + CheckProgress(Quest, QuestGiver, Player) + +end + +function Step2Complete(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 2, "I have defeated four Brokentusk warriors guarding the old shrine.") + CheckProgress(Quest, QuestGiver, Player) + +end + +function Step3Complete(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 3, "I have defeated four Brokentusk prophets, but they don't seem to gain any strength from this shrine.") + UpdateQuestTaskGroupDescription(Quest, 1, "I found the shrine and defeated the orcs guarding it.") + CheckProgress(Quest, QuestGiver, Player) + +end + +function ReturnToArgosian(Quest, QuestGiver, Player) + AddQuestStepChat(Quest, 4, "Report to Lieutenant Argosian", 1, "I should report back to Lieutenant Argosian in the Ruins. I can reach the Ruins by using any of the bells in and around the City of Freeport.", 11, LieutenantArgosian) + AddQuestStepCompleteAction(Quest, 4, "QuestComplete") +end + +function QuestComplete(Quest, QuestGiver, Player) + -- The following UpdateQuestStepDescription and UpdateTaskGroupDescription are not needed, parser adds them for completion in case stuff needs to be moved around + UpdateQuestStepDescription(Quest, 4, "I have informed the lieutenant that I found the shrine.") + UpdateQuestTaskGroupDescription(Quest, 2, "I reported back to the lieutenant.") + + UpdateQuestDescription(Quest, "I found the remains of an old shrine in the Ruins, but it does not seem to be giving any divine strength to the orcs. In fact, it seems to be a remnant of the lost community of Shoreside, which is what this area used to be called. I have reported back to Lieutenant Argosian of the Freeport Militia and told him what I found.") + GiveQuestReward(Quest, Player) +end + +function Reload(Quest, QuestGiver, Player, Step) + if Step == 1 then + Step1Complete(Quest, QuestGiver, Player) + elseif Step == 2 then + Step2Complete(Quest, QuestGiver, Player) + elseif Step == 3 then + Step3Complete(Quest, QuestGiver, Player) + elseif Step == 4 then + QuestComplete(Quest, QuestGiver, Player) + end +end + +function Accepted(Quest, QuestGiver, Player) + FaceTarget(QuestGiver, Player) + conversation = CreateConversation() + + PlayFlavor(QuestGiver, "voiceover/english/tutorial_revamp/lieutenant_argosian/fprt_adv04_ruins/revamp/lieutenant_argosian022b.mp3", "", "", 3696168160, 1150705872, Player) + AddConversationOption(conversation, "Yes, sir.", "dlg_0_8") + StartConversation(conversation, QuestGiver, Player, "Go now, and report back when your duty is done.") +end + +function Declined(Quest, QuestGiver, Player) + -- Add dialog here for when the quest is declined +end \ No newline at end of file diff --git a/server/Quests/TheRuins/ReportingForDuty.lua b/server/Quests/TheRuins/ReportingForDuty.lua new file mode 100644 index 000000000..f31803caa --- /dev/null +++ b/server/Quests/TheRuins/ReportingForDuty.lua @@ -0,0 +1,46 @@ +--[[ + Script Name : ReportingforDuty.lua + Script Purpose : Handles the quest, "Reporting for Duty" + Script Author : jakejp + Script Date : 10/1/2018 + Script Notes : + + Zone : The Ruins + Quest Giver : Captain Arellius + Preceded by : None + Followed by : Pawns in the Game +--]] + + +function Init(Quest) + AddQuestStepChat(Quest, 1, "Seek out Lieutenant Argosian", 1, "I have been ordered to speak to Lieutenant Argosian in the Ruins. I can reach the Ruins by using any of the bells in and around the City of Freeport.", 11, 1270019) + AddQuestStepCompleteAction(Quest, 1, "QuestComplete") +end + +function QuestComplete(Quest, QuestGiver, Player) + -- The following UpdateQuestStepDescription and UpdateTaskGroupDescription are not needed, parser adds them for completion in case stuff needs to be moved around + UpdateQuestStepDescription(Quest, 1, "I spoke to the lieutenant.") + UpdateQuestTaskGroupDescription(Quest, 1, "I have reported to Lieutenant Argosian.") + + UpdateQuestDescription(Quest, "I followed the orders of Captain Arellius, who had me report to Lieutenant Argosian at the first outpost in the Ruins. I will now be aiding him in his quest to battle the Brokentusk orcs.") + GiveQuestReward(Quest, Player) +end + +function Reload(Quest, QuestGiver, Player, Step) + if Step == 1 then + QuestComplete(Quest, QuestGiver, Player) + end +end + +function Accepted(Quest, QuestGiver, Player) + FaceTarget(QuestGiver, Player) + conversation = CreateConversation() + + PlayFlavor(QuestGiver, "voiceover/english/tutorial_revamp/captain_arellius/fprt_adv04_ruins/revamp/captain_arellius017.mp3", "", "", 3161105606, 1921169647, Player) + AddConversationOption(conversation, "Thank you for the advice.", "dlg_1_14") + StartConversation(conversation, QuestGiver, Player, "Good. Oh, be sure to pay homage to the statue of our beloved Overlord. It would prove most beneficial for you to bask in the wisdom of his visage.") +end + +function Declined(Quest, QuestGiver, Player) + -- Add dialog here for when the quest is declined +end \ No newline at end of file diff --git a/server/Quests/TheRuins/RequestingFurtherOrders.lua b/server/Quests/TheRuins/RequestingFurtherOrders.lua new file mode 100644 index 000000000..11e529fe2 --- /dev/null +++ b/server/Quests/TheRuins/RequestingFurtherOrders.lua @@ -0,0 +1,48 @@ +--[[ + Script Name : RequestingFurtherOrders.lua + Script Purpose : Handles the quest, "Requesting Further Orders" + Script Author : jakejp + Script Date : 10/4/2018 + Script Notes : + + Zone : The Ruins + Quest Giver : Lieutenant Argosian + Preceded by : Prophet and Loss + Followed by : Stepping Up the Offensive +--]] + +-- NPC ID'S -- +local CaptainArellius = 1270000 + +function Init(Quest) + AddQuestStepChat(Quest, 1, "Return to Captain Arellius", 1, "I have been ordered to return to Captain Arellius in the Ruins. I can reach the Ruins by using any of the bells in and around the City of Freeport.", 11, CaptainArellius) + AddQuestStepCompleteAction(Quest, 1, "QuestComplete") +end + +function QuestComplete(Quest, QuestGiver, Player) + -- The following UpdateQuestStepDescription and UpdateTaskGroupDescription are not needed, parser adds them for completion in case stuff needs to be moved around + UpdateQuestStepDescription(Quest, 1, "I have spoken to Captain Arellius.") + UpdateQuestTaskGroupDescription(Quest, 1, "I returned to the captain for further orders.") + + UpdateQuestDescription(Quest, "I followed the orders of Lieutenant Argosian, who told me to report back to Captain Arellius at the docks in the Ruins. I will now see if I can be of further assistance in the defense of Freeport.") + GiveQuestReward(Quest, Player) +end + +function Reload(Quest, QuestGiver, Player, Step) + if Step == 1 then + QuestComplete(Quest, QuestGiver, Player) + end +end + +function Accepted(Quest, QuestGiver, Player) + FaceTarget(QuestGiver, Player) + conversation = CreateConversation() + + PlayFlavor(QuestGiver, "voiceover/english/tutorial_revamp/lieutenant_argosian/fprt_adv04_ruins/revamp/lieutenant_argosian027b.mp3", "", "", 3190269915, 3618413640, Player) + AddConversationOption(conversation, "I will.") + StartConversation(conversation, QuestGiver, Player, "Travel safely, citizen of Freeport.") +end + +function Declined(Quest, QuestGiver, Player) + -- Add dialog here for when the quest is declined +end \ No newline at end of file diff --git a/server/Quests/TheRuins/SteppingUpTheOffensive.lua b/server/Quests/TheRuins/SteppingUpTheOffensive.lua new file mode 100644 index 000000000..7f82edcfc --- /dev/null +++ b/server/Quests/TheRuins/SteppingUpTheOffensive.lua @@ -0,0 +1,48 @@ +--[[ + Script Name : SteppingUptheOffensive.lua + Script Purpose : Handles the quest, "Stepping Up the Offensive" + Script Author : jakejp + Script Date : 10/4/2018 + Script Notes : + + Zone : The Ruins + Quest Giver : Captain Arellius + Preceded by : Requesting Further Orders + Followed by : Knock the Fight Out of 'Em +--]] + +-- NPC ID'S -- +local LieutenantImperidus = 1270031 + +function Init(Quest) + AddQuestStepChat(Quest, 1, "Speak to Lieutenant Imperidus", 1, "I have been ordered by the captain to report to Lieutenant Imperidus in the Ruins. I can reach the Ruins by using any of the bells in and around the City of Freeport.", 11, LieutenantImperidus) + AddQuestStepCompleteAction(Quest, 1, "QuestComplete") +end + +function QuestComplete(Quest, QuestGiver, Player) + -- The following UpdateQuestStepDescription and UpdateTaskGroupDescription are not needed, parser adds them for completion in case stuff needs to be moved around + UpdateQuestStepDescription(Quest, 1, "I found Lieutenant Imperidus deep in the Ruins.") + UpdateQuestTaskGroupDescription(Quest, 1, "I have reported to Lieutenant Imperidus.") + + UpdateQuestDescription(Quest, "I made my way through the Ruins and found the second Militia outpost, where I reported to Lieutenant Imperidus for duty.") + GiveQuestReward(Quest, Player) +end + +function Reload(Quest, QuestGiver, Player, Step) + if Step == 1 then + QuestComplete(Quest, QuestGiver, Player) + end +end + +function Accepted(Quest, QuestGiver, Player) + FaceTarget(QuestGiver, Player) + conversation = CreateConversation() + + PlayFlavor(QuestGiver, "voiceover/english/tutorial_revamp/captain_arellius/fprt_adv04_ruins/revamp/captain_arellius028.mp3", "", "", 11330989, 3299447227, Player) + AddConversationOption(conversation, "I understand, Captain.") + StartConversation(conversation, QuestGiver, Player, "Again, keep in mind that even travel to the second outpost will be dangerous. Travel with companions to ensure your safety. Do not report back to me until you have followed the lieutenant's orders.") +end + +function Declined(Quest, QuestGiver, Player) + -- Add dialog here for when the quest is declined +end \ No newline at end of file diff --git a/server/Quests/TheRuins/VengeanceforShoreside.lua b/server/Quests/TheRuins/VengeanceforShoreside.lua new file mode 100644 index 000000000..8a07ccf39 --- /dev/null +++ b/server/Quests/TheRuins/VengeanceforShoreside.lua @@ -0,0 +1,177 @@ +--[[ + Script Name : VengeanceforShoreside.lua + Script Purpose : Handles the quest, "Vengeance for Shoreside" + Script Author : jakejp + Script Date : 12/29/2018 + Script Notes : Wiki says mobs are chosen randomly, attempt at making quest steps random + + Zone : The Ruins + Quest Giver : Lieutenant Imperidus + Preceded by : Knock the Fight Out of 'Em + Followed by : Identifying the Lonetusk Ally +--]] + +local VengeanceforShoreside = 393 + +local LieutenantImperidus = 1270031 +local LonetuskSentry = 1270021 +local LonetuskWarrior = 1270032 +local LonetuskCrusher = 1270036 +local LonetuskPounder = 1270026 +local LonetuskShaman = 1270023 +local LonetuskProphet = 1270037 +choice = math.random(1, 6) + + +function Init(Quest) + AddQuestStepKill(Quest, 1, "Slay Lonetusk sentries", 5, 100, "In memory of the fallen citizens of Shoreside, I will take revenge upon the Lonetusk orcs in the Ruins. I can reach the Ruins by using any of the bells in and around the City of Freeport.", 2489, LonetuskSentry) + AddQuestStepCompleteAction(Quest, 1, "Step1Complete") + AddQuestStepKill(Quest, 2, "Slay Lonetusk warriors", 5, 100, "In memory of the fallen citizens of Shoreside, I will take revenge upon the Lonetusk orcs in the Ruins. I can reach the Ruins by using any of the bells in and around the City of Freeport.", 2489, LonetuskWarrior) + AddQuestStepCompleteAction(Quest, 2, "Step2Complete") + if choice == 1 then + AddQuestStepKill(Quest, 3, "Slay Lonetusk crushers", 5, 100, "In memory of the fallen citizens of Shoreside, I will take revenge upon the Lonetusk orcs in the Ruins. I can reach the Ruins by using any of the bells in and around the City of Freeport.", 2489, LonetuskCrusher) + AddQuestStepCompleteAction(Quest, 3, "Step3Complete") + AddQuestStepKill(Quest, 4, "Slay Lonetusk pounders", 5, 100, "In memory of the fallen citizens of Shoreside, I will take revenge upon the Lonetusk orcs in the Ruins. I can reach the Ruins by using any of the bells in and around the City of Freeport.", 2489, LonetuskPounder) + AddQuestStepCompleteAction(Quest, 4, "Step4Complete") + elseif choice == 2 then + AddQuestStepKill(Quest, 3, "Slay Lonetusk crushers", 5, 100, "In memory of the fallen citizens of Shoreside, I will take revenge upon the Lonetusk orcs in the Ruins. I can reach the Ruins by using any of the bells in and around the City of Freeport.", 2489, LonetuskCrusher) + AddQuestStepCompleteAction(Quest, 3, "Step3Complete") + AddQuestStepKill(Quest, 4, "Slay Lonetusk shamans", 5, 100, "In memory of the fallen citizens of Shoreside, I will take revenge upon the Lonetusk orcs in the Ruins. I can reach the Ruins by using any of the bells in and around the City of Freeport.", 2489, LonetuskShaman) + AddQuestStepCompleteAction(Quest, 4, "Step5Complete") + elseif choice == 3 then + AddQuestStepKill(Quest, 3, "Slay Lonetusk crushers", 5, 100, "In memory of the fallen citizens of Shoreside, I will take revenge upon the Lonetusk orcs in the Ruins. I can reach the Ruins by using any of the bells in and around the City of Freeport.", 2489, LonetuskCrusher) + AddQuestStepCompleteAction(Quest, 3, "Step3Complete") + AddQuestStepKill(Quest, 4, "Slay Lonetusk prophets", 5, 100, "In memory of the fallen citizens of Shoreside, I will take revenge upon the Lonetusk orcs in the Ruins. I can reach the Ruins by using any of the bells in and around the City of Freeport.", 2489, LonetuskProphet) + AddQuestStepCompleteAction(Quest, 4, "Step6Complete") + elseif choice == 4 then + AddQuestStepKill(Quest, 3, "Slay Lonetusk pounders", 5, 100, "In memory of the fallen citizens of Shoreside, I will take revenge upon the Lonetusk orcs in the Ruins. I can reach the Ruins by using any of the bells in and around the City of Freeport.", 2489, LonetuskPounder) + AddQuestStepCompleteAction(Quest, 3, "Step4Complete") + AddQuestStepKill(Quest, 4, "Slay Lonetusk shamans", 5, 100, "In memory of the fallen citizens of Shoreside, I will take revenge upon the Lonetusk orcs in the Ruins. I can reach the Ruins by using any of the bells in and around the City of Freeport.", 2489, LonetuskShaman) + AddQuestStepCompleteAction(Quest, 4, "Step5Complete") + elseif choice == 5 then + AddQuestStepKill(Quest, 3, "Slay Lonetusk pounders", 5, 100, "In memory of the fallen citizens of Shoreside, I will take revenge upon the Lonetusk orcs in the Ruins. I can reach the Ruins by using any of the bells in and around the City of Freeport.", 2489, LonetuskPounder) + AddQuestStepCompleteAction(Quest, 3, "Step4Complete") + AddQuestStepKill(Quest, 4, "Slay Lonetusk prophets", 5, 100, "In memory of the fallen citizens of Shoreside, I will take revenge upon the Lonetusk orcs in the Ruins. I can reach the Ruins by using any of the bells in and around the City of Freeport.", 2489, LonetuskProphet) + AddQuestStepCompleteAction(Quest, 4, "Step6Complete") + elseif choice == 6 then + AddQuestStepKill(Quest, 3, "Slay Lonetusk shamans", 5, 100, "In memory of the fallen citizens of Shoreside, I will take revenge upon the Lonetusk orcs in the Ruins. I can reach the Ruins by using any of the bells in and around the City of Freeport.", 2489, LonetuskShaman) + AddQuestStepCompleteAction(Quest, 3, "Step5Complete") + AddQuestStepKill(Quest, 4, "Slay Lonetusk prophets", 5, 100, "In memory of the fallen citizens of Shoreside, I will take revenge upon the Lonetusk orcs in the Ruins. I can reach the Ruins by using any of the bells in and around the City of Freeport.", 2489, LonetuskProphet) + AddQuestStepCompleteAction(Quest, 4, "Step6Complete") + end + + --AddQuestStepKill(Quest, 3, "Slay Lonetusk crushers", 5, 100, "In memory of the fallen citizens of Shoreside, I will take revenge upon the Lonetusk orcs in the Ruins. I can reach the Ruins by using any of the bells in and around the City of Freeport.", 2489, --[[ ID's --]]) + --AddQuestStepCompleteAction(Quest, 3, "Step3Complete") + --AddQuestStepKill(Quest, 4, "Slay Lonetusk pounders", 5, 100, "In memory of the fallen citizens of Shoreside, I will take revenge upon the Lonetusk orcs in the Ruins. I can reach the Ruins by using any of the bells in and around the City of Freeport.", 2489, --[[ ID's --]]) + --AddQuestStepCompleteAction(Quest, 4, "Step4Complete") + --AddQuestStepKill(Quest, 5, "Slay Lonetusk shamans", 5, 100, "In memory of the fallen citizens of Shoreside, I will take revenge upon the Lonetusk orcs in the Ruins. I can reach the Ruins by using any of the bells in and around the City of Freeport.", 2489, --[[ ID's --]]) + --AddQuestStepCompleteAction(Quest, 5, "Step5Complete") + --AddQuestStepKill(Quest, 6, "Slay Lonetusk prophets", 5, 100, "In memory of the fallen citizens of Shoreside, I will take revenge upon the Lonetusk orcs in the Ruins. I can reach the Ruins by using any of the bells in and around the City of Freeport.", 2489, --[[ ID's --]]) + --AddQuestStepCompleteAction(Quest, 6, "Step6Complete") +end + +function CheckProgress(Quest, QuestGiver, Player) + if QuestStepIsComplete(Player, VengeanceforShoreside, 1) and QuestStepIsComplete(Player, VengeanceforShoreside, 2) and QuestStepIsComplete(Player, VengeanceforShoreside, 3) and QuestStepIsComplete(Player, VengeanceforShoreside, 4) then + LastStep(Quest, QuestGiver, Player) + end +end + +function Step1Complete(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 1, "I have slain five Lonetusk sentries.") + CheckProgress(Quest, QuestGiver, Player) + +end + +function Step2Complete(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 2, "I have slain five Lonetusk warriors.") + CheckProgress(Quest, QuestGiver, Player) + +end + +function Step3Complete(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 3, "I have slain five Lonetusk crushers.") + CheckProgress(Quest, QuestGiver, Player) + +end + +function Step4Complete(Quest, QuestGiver, Player) + if choice == 1 then + UpdateQuestStepDescription(Quest, 4, "I have slain five Lonetusk pounders.") + elseif choice == 4 then + UpdateQuestStepDescription(Quest, 3, "I have slain five Lonetusk pounders.") + elseif choice == 5 then + UpdateQuestStepDescription(Quest, 3, "I have slain five Lonetusk pounders.") + end + CheckProgress(Quest, QuestGiver, Player) + +end + +function Step5Complete(Quest, QuestGiver, Player) + if choice == 2 then + UpdateQuestStepDescription(Quest, 4, "I have slain five Lonetusk shamans.") + elseif choice == 4 then + UpdateQuestStepDescription(Quest, 4, "I have slain five Lonetusk shamans.") + elseif choice == 6 then + UpdateQuestStepDescription(Quest, 3, "I have slain five Lonetusk shamans.") + end + CheckProgress(Quest, QuestGiver, Player) + +end + +function Step6Complete(Quest, QuestGiver, Player) + if choice == 3 then + UpdateQuestStepDescription(Quest, 4, "I have slain five Lonetusk prophets.") + elseif choice == 5 then + UpdateQuestStepDescription(Quest, 4, "I have slain five Lonetusk prophets.") + elseif choice == 6 then + UpdateQuestStepDescription(Quest, 4, "I have slain five Lonetusk prophets.") + end + CheckProgress(Quest, QuestGiver, Player) +end + +function LastStep(Quest, QuestGiver, Player) + UpdateQuestTaskGroupDescription(Quest, 1, "I have honored the memory of Freeport's fallen by taking revenge on the Lonetusk.") + + AddQuestStepChat(Quest, 5, "Report to Lieutenant Imperidus", 1, "Having wiped out a considerable number of Lonetusk, I should report back to Lieutenant Imperidus in the Ruins. I can reach the Ruins by using any of the bells in and around the City of Freeport.", 11, LieutenantImperidus) + AddQuestStepCompleteAction(Quest, 5, "QuestComplete") +end + +function QuestComplete(Quest, QuestGiver, Player) + -- The following UpdateQuestStepDescription and UpdateTaskGroupDescription are not needed, parser adds them for completion in case stuff needs to be moved around + UpdateQuestStepDescription(Quest, 5, "I have reported back to the lieutenant.") + UpdateQuestTaskGroupDescription(Quest, 2, "I have reported back to Lieutenant Imperidus.") + + UpdateQuestDescription(Quest, "I killed Lonetusk orcs. Lots and lots of orcs. Lieutenant Imperidus and I both feel that we're making progress against these foul beasts, but more must be done to ensure Freeport's safety. The lieutenant has further orders for me that will hopefully help us turn the tide. Perhaps my efforts here have brought some measure of peace to the dead citizens of Shoreside.") + GiveQuestReward(Quest, Player) +end + +function Reload(Quest, QuestGiver, Player, Step) + if Step == 1 then + Step1Complete(Quest, QuestGiver, Player) + elseif Step == 2 then + Step2Complete(Quest, QuestGiver, Player) + elseif Step == 3 then + Step3Complete(Quest, QuestGiver, Player) + elseif Step == 4 then + Step4Complete(Quest, QuestGiver, Player) + elseif Step == 5 then + Step5Complete(Quest, QuestGiver, Player) + elseif Step == 6 then + Step6Complete(Quest, QuestGiver, Player) + elseif Step == 7 then + QuestComplete(Quest, QuestGiver, Player) + end +end + +function Accepted(Quest, QuestGiver, Player) + FaceTarget(QuestGiver, Player) + conversation = CreateConversation() + + PlayFlavor(QuestGiver, "voiceover/english/tutorial_revamp/lieutenant_imperidus/fprt_adv04_ruins/revamp/lieutenant_imperidus013.mp3", "", "", 1435258692, 228785667, Player) + AddConversationOption(conversation, "I like the sound of this plan.", "dlg_6_3") + StartConversation(conversation, QuestGiver, Player, "The surest way to take the fight out of the orcs is to thin their numbers. We have to show we will not tolerate their presence anymore. I need you to make a serious dent in the Lonetusk population. The streets of Shoreside must swell with the blood of these brutes.") +end + +function Declined(Quest, QuestGiver, Player) + -- Add dialog here for when the quest is declined +end \ No newline at end of file diff --git a/server/Quests/TheSprawl/TrainingWillGetYouEverywhere.lua b/server/Quests/TheSprawl/TrainingWillGetYouEverywhere.lua new file mode 100644 index 000000000..ebf81dbd7 --- /dev/null +++ b/server/Quests/TheSprawl/TrainingWillGetYouEverywhere.lua @@ -0,0 +1,58 @@ +--[[ + Script Name : training_will_get_you_everywhere.lua + Script Purpose : Handles the quest, "Training Will Get You Everywhere" + Script Author : Neatz09 + Script Date : 1/19/2019 + Script Notes : Auto generated with QuestParser. + + Zone : The Sprawl + Quest Giver : Enforcer Kurdek + Preceded by : None + Followed by : None +--]] + +local Enforcer_Kurdek = 1260017 +local Trainer_Durbok = 1260016 + + +function Init(Quest) + AddQuestStepChat(Quest, 1, "Speak to Trainer Durbok", 1, "I need to speak to Trainer Durbok in the Sprawl, who is teaching combat to the Giantslayers. I can reach the Sprawl by using any of the bells in and around the City of Freeport.", 11, Trainer_Durbok) + AddQuestStepCompleteAction(Quest, 1, "Step1Complete") +end + +function Accepted(Quest, QuestGiver, Player) + -- Add dialog here for when the quest is accepted +end + +function Declined(Quest, QuestGiver, Player) + -- Add dialog here for when the quest is declined +end + +function Deleted(Quest, QuestGiver, Player) + -- Remove any quest specific items here when the quest is deleted +end + +function Step1Complete(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 1, "I have spoken to Trainer Durbok, who is displeased with the progress of the Giantslayers.") + UpdateQuestTaskGroupDescription(Quest, 1, "I have spoken to Trainer Durbok and must tell Enforcer Kurdek what I have learned.") + + AddQuestStepChat(Quest, 2, "Return to Enforcer Kurdek", 1, "I must return to Enforcer Kurdek in the Sprawl with my report. I can reach the Sprawl by using any of the bells in and around the City of Freeport.", 11, Enforcer_Kurdek) + AddQuestStepCompleteAction(Quest, 2, "QuestComplete") +end + +function QuestComplete(Quest, QuestGiver, Player) + -- The following UpdateQuestStepDescription and UpdateTaskGroupDescription are not needed, parser adds them for completion in case stuff needs to be moved around + UpdateQuestStepDescription(Quest, 2, "I have returned to Enforcer Kurdek and told him what I learned from Trainer Durbok.") + UpdateQuestTaskGroupDescription(Quest, 2, "I have reported back to Enforcer Kurdek.") + + UpdateQuestDescription(Quest, "I spoke with Trainer Durbok, who feels that the Giantslayers are not focused enough on their training. He feels that their leader, Brutemaster Tarden, is responsible for this failing. Enforcer Kurdek has been notified and is none too happy about it.") + GiveQuestReward(Quest, Player) +end + +function Reload(Quest, QuestGiver, Player, Step) + if Step == 1 then + Step1Complete(Quest, QuestGiver, Player) + elseif Step == 2 then + QuestComplete(Quest, QuestGiver, Player) + end +end diff --git a/server/Quests/ThievesWay/TheStolenChest.lua b/server/Quests/ThievesWay/TheStolenChest.lua new file mode 100644 index 000000000..115bf11bb --- /dev/null +++ b/server/Quests/ThievesWay/TheStolenChest.lua @@ -0,0 +1,47 @@ +--[[ + Script Name : the_stolen_chest.lua + Script Purpose : Handles the quest, "The Stolen Chest" + Script Author : EmemJR + Script Date : 10/7/2019 + Script Notes : Auto generated with QuestParser. + + Zone : Thieves' Way + Quest Giver : + Preceded by : None + Followed by : None +--]] + +local itemId = 2115 +function Init(Quest) + AddQuestStepKill(Quest, 1, "I must kill one darkblade brigand.", 1, 100, "I must kill a darkblade brigand.", 11, 1540018,1540023) + AddQuestStepCompleteAction(Quest, 1, "QuestComplete") +end + +function Accepted(Quest, QuestGiver, Player) + while HasItem(Player, itemId, 1) do + RemoveItem(Player, itemId) + end +end + +function Declined(Quest, QuestGiver, Player) + -- Add dialog here for when the quest is declined +end + +function Deleted(Quest, QuestGiver, Player) + -- Remove any quest specific items here when the quest is deleted +end + +function QuestComplete(Quest, QuestGiver, Player) + -- The following UpdateQuestStepDescription and UpdateTaskGroupDescription are not needed, parser adds them for completion in case stuff needs to be moved around + UpdateQuestStepDescription(Quest, 1, "I have killed one darkblade brigand.") + UpdateQuestTaskGroupDescription(Quest, 1, "I have killed a darkblade brigand.") + + UpdateQuestDescription(Quest, "I found a bounty that promised a reward for the return of a stolen chest. After I recovered the chest from the Darkblade brigands, I returned it to Anrean Velvinna. She awarded me some money for returning the chest.") + GiveQuestReward(Quest, Player) +end + +function Reload(Quest, QuestGiver, Player, Step) + if Step == 1 then + QuestComplete(Quest, QuestGiver, Player) + end +end \ No newline at end of file diff --git a/server/Quests/ThievesWay/chuggles_toolbox.lua b/server/Quests/ThievesWay/chuggles_toolbox.lua new file mode 100644 index 000000000..8c5bd2709 --- /dev/null +++ b/server/Quests/ThievesWay/chuggles_toolbox.lua @@ -0,0 +1,32 @@ +--[[ + Script Name : Quests/ThievesWay/chuggles_toolbox.lua + Script Author : Ememjr + Script Date : 2019.10.08 04:10:09 + Script Purpose : + + Zone : ThievesWay + Quest Giver: + Preceded by: None + Followed by: +--]] + +function Init(Quest) + +end + +function Accepted(Quest, QuestGiver, Player) + +end + +function Declined(Quest, QuestGiver, Player) + +end + +function quest_complete(Quest, QuestGiver, Player) + +end + +function Reload(Quest, QuestGiver, Player, Step) + +end + diff --git a/server/Quests/ThievesWay/the_darkblade_dagger.lua b/server/Quests/ThievesWay/the_darkblade_dagger.lua new file mode 100644 index 000000000..a1e937a85 --- /dev/null +++ b/server/Quests/ThievesWay/the_darkblade_dagger.lua @@ -0,0 +1,47 @@ +--[[ + Script Name : the_darkblade_dagger.lua + Script Purpose : Handles the quest, "The Darkblade Dagger" + Script Author : EmemJR + Script Date : 10/7/2019 + Script Notes : Auto generated with QuestParser. + + Zone : Thieves' Way + Quest Giver : + Preceded by : None + Followed by : None +--]] + +local itemId = 3767 +function Init(Quest) + AddQuestStepKill(Quest, 1, "I must kill some diseased ratongas.", 10, 100, "I must kill ten diseased ratonga to unlock the power in this blade.", 611, 1540002, 1540022, 1540072, 1540024, 1540028, 1540021, 1540073) + AddQuestStepCompleteAction(Quest, 1, "QuestComplete") +end + +function Accepted(Quest, QuestGiver, Player) + while HasItem(Player, itemId, 1) do + RemoveItem(Player, itemId) + end +end + +function Declined(Quest, QuestGiver, Player) + -- Add dialog here for when the quest is declined +end + +function Deleted(Quest, QuestGiver, Player) + -- Remove any quest specific items here when the quest is deleted +end + +function QuestComplete(Quest, QuestGiver, Player) + -- The following UpdateQuestStepDescription and UpdateTaskGroupDescription are not needed, parser adds them for completion in case stuff needs to be moved around + UpdateQuestStepDescription(Quest, 1, "I have killed some diseased ratongas.") + UpdateQuestTaskGroupDescription(Quest, 1, "I have killed ten diseased ratonga.") + + UpdateQuestDescription(Quest, "I found a call to duty hidden within the hilt of a Darkblade dagger. In the hope of benefiting from this order and gaining the rewards it promised, I killed ten diseased ratonga. The fulfillment of the duty by my hand awakened an enchantment that had been stored within the blade.") + GiveQuestReward(Quest, Player) +end + +function Reload(Quest, QuestGiver, Player, Step) + if Step == 1 then + QuestComplete(Quest, QuestGiver, Player) + end +end diff --git a/server/Quests/ThievesWay/the_spirits_release.lua b/server/Quests/ThievesWay/the_spirits_release.lua new file mode 100644 index 000000000..5cbe507b7 --- /dev/null +++ b/server/Quests/ThievesWay/the_spirits_release.lua @@ -0,0 +1,56 @@ +--[[ + Script Name : the_spirits_release.lua + Script Purpose : Handles the quest, "The Spirit's Release" + Script Author : EmemJR + Script Date : 10/7/2019 + Script Notes : Auto generated with QuestParser. + + Zone : Thieves' Way + Quest Giver : item A mystical Sphere(id# 2304 + Preceded by : None + Followed by : None +--]] + +local itemId = 2304 +function Init(Quest) + AddQuestStepKill(Quest, 1, "I must kill some netherot chanters.", 5, 100, "I must kill five netherot chanters.", 611, 1540015) + AddQuestStepCompleteAction(Quest, 1, "Step1Complete") +end + +function Accepted(Quest, QuestGiver, Player) + -- Add dialog here for when the quest is accepted + +end + +function Declined(Quest, QuestGiver, Player) + -- Add dialog here for when the quest is declined +end + +function Deleted(Quest, QuestGiver, Player) + -- Remove any quest specific items here when the quest is deleted +end + +function Step1Complete(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 1, "I have killed some netherot chanters.") + UpdateQuestTaskGroupDescription(Quest, 1, "I have killed five netherot chanters") + + AddQuestStep(Quest, 2, "I should inspect the orb.", 1, 100, "I should inspect the orb.", 11) + AddQuestStepCompleteAction(Quest, 2, "QuestComplete") +end + +function QuestComplete(Quest, QuestGiver, Player) + -- The following UpdateQuestStepDescription and UpdateTaskGroupDescription are not needed, parser adds them for completion in case stuff needs to be moved around + UpdateQuestStepDescription(Quest, 2, "I have inspected the orb.") + UpdateQuestTaskGroupDescription(Quest, 2, "I have inspected the orb.") + + UpdateQuestDescription(Quest, "I found a magic stone that contained the spirit of a former Darkblade rogue. The spirit was freed when I killed the Netherot Chanters. The power of the stone is now mine.") + GiveQuestReward(Quest, Player) +end + +function Reload(Quest, QuestGiver, Player, Step) + if Step == 1 then + Step1Complete(Quest, QuestGiver, Player) + elseif Step == 2 then + QuestComplete(Quest, QuestGiver, Player) + end +end diff --git a/server/Quests/ThunderingSteppes/AScryingShame.lua b/server/Quests/ThunderingSteppes/AScryingShame.lua new file mode 100644 index 000000000..692b21f9a --- /dev/null +++ b/server/Quests/ThunderingSteppes/AScryingShame.lua @@ -0,0 +1,56 @@ +--[[ + Script Name : Quests/ThunderingSteppes/AScryingShame.lua + Script Author : Jabantiz + Script Date : 2014.07.08 08:07:47 + Script Purpose : + + Zone : ThunderingSteppes + Quest Giver: Tish Tickers (2490042) + Preceded by: Watch your step in The Thundering Steppes, Part II + Followed by: The Gnoll Cave +--]] + +-- Quests +local WatchYourStepInTheTSPartII = 100 + +-- Items +local AnAncientSilverCoin = 3513 + +function Init(Quest) + AddQuestStepObtainItem(Quest, 1, "Find five ancient silver coins for Tish.", 5, 100, "I must use the scrying stones that Tish gave me to try to find five ancient silver coins.", 2166, AnAncientSilverCoin) + AddQuestStepCompleteAction(Quest, 1, "Step1Complete") +end + +function Step1Complete(Quest, QuestGiver, Player) + UpdateQuestTaskGroupDescription(Quest, 1, "I have used the scrying stones to find the five ancient silver coins for Tish.") + + AddQuestStepChat(Quest, 2, "Return to Tish Tickers.", 1, "I must bring Tish her coins so that she can repay her debt and avoid a visit from the collection clockworks.", 11, 2490042) + AddQuestStepCompleteAction(Quest, 2, "Step2Complete") +end + +function Step2Complete(Quest, QuestGiver, Player) + GiveQuestReward(Quest, Player) +end + +function Accepted(Quest, QuestGiver, Player) + FaceTarget(QuestGiver, Player) + conversation = CreateConversation() + + AddConversationOption(conversation, "Okay.") + StartConversation(conversation, QuestGiver, Player, "Great! Thank you! Here, take these five scrying stones and see if you can get me my ancient silver coins. If you run out of stones, you might need to shop around and see if some of the local merchants have some. Please be fast. I don't want to get a visit from the clockworks...") + SetStepComplete(Player, WatchYourStepInTheTSPartII, 1) +end + +function Deleted(Quest, QuestGiver, Player) +end + +function Declined(Quest, QuestGiver, Player) +end + +function Reload(Quest, QuestGiver, Player, Step) + if Step == 1 then + Step1Complete(Quest, QuestGiver, Player) + elseif Step == 2 then + Step2Complete(Quest, QuestGiver, Player) + end +end \ No newline at end of file diff --git a/server/Quests/ThunderingSteppes/BlumbleBlunder.lua b/server/Quests/ThunderingSteppes/BlumbleBlunder.lua new file mode 100644 index 000000000..780978582 --- /dev/null +++ b/server/Quests/ThunderingSteppes/BlumbleBlunder.lua @@ -0,0 +1,54 @@ +--[[ + Script Name : Quests/ThunderingSteppes/BlumbleBlunder.lua + Script Author : Jabantiz + Script Date : 2014.07.07 08:07:18 + Script Purpose : + + Zone : ThunderingSteppes + Quest Giver: Blerton Blumble (2490025) + Preceded by: Watch your step in The Thundering Steppes, Part I + Followed by: Search for Grandma Blumble +--]] + +local WatchYourStepInTSPartI = 99 + +function Init(Quest) + AddQuestStepChat(Quest, 1, "Look for some sign of Grandpa Blumble on the beaches north of the docks.", 1, "I must check the beaches north of the docks for some trace of Grandpa Blumble.", 11, 4490008) + AddQuestStepCompleteAction(Quest, 1, "Step1Complete") +end + +function Step1Complete(Quest, QuestGiver, Player) + UpdateQuestTaskGroupDescription(Quest, 1, "I have found Grandpa Blumble in a cave on the beaches north of the docks.") + + AddQuestStepChat(Quest, 2, "Return to Blerton Blumble.", 1, "I must return to Blerton Blumble and inform him that I have found Grandpa Blumble.", 11, 2490025) + AddQuestStepCompleteAction(Quest, 2, "Step2Complete") +end + +function Step2Complete(Quest, QuestGiver, Player) + GiveQuestReward(Quest, Player) +end + +function Accepted(Quest, QuestGiver, Player) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "Okay.") + StartConversation(conversation, NPC, Spawn, "Thank you very much. Grandpa sometimes gets it into his head to go searching for pirate treasure. None of us are quite sure why, but the whole family worries about him. He has a knack for getting lost. Last time we found him he had fallen asleep digging over on the beach to the north of the docks here and we've been wondering when he'd try it again. You can't miss it, he always marks his dig with a big 'X'.") + + -- Advance step 1 of Watch Your Step in The Thundering Steppes, Part I + SetStepComplete(Player, WatchYourStepInTSPartI, 1) +end + +function Deleted(Quest, QuestGiver, Player) +end + +function Declined(Quest, QuestGiver, Player) +end + +function Reload(Quest, QuestGiver, Player, Step) + if Step == 1 then + Step1Complete(Quest, QuestGiver, Player) + elseif Step == 2 then + Step2Complete(Quest, QuestGiver, Player) + end +end diff --git a/server/Quests/ThunderingSteppes/DesperatelySeekingAnts.lua b/server/Quests/ThunderingSteppes/DesperatelySeekingAnts.lua new file mode 100644 index 000000000..38de52c8a --- /dev/null +++ b/server/Quests/ThunderingSteppes/DesperatelySeekingAnts.lua @@ -0,0 +1,32 @@ +--[[ + Script Name : Quests/ThunderingSteppes/DesperatelySeekingAnts.lua + Script Author : XionnaeEQ + Script Date : 2016.07.17 06:07:19 + Script Purpose : + + Zone : ThunderingSteppes + Quest Giver: + Preceded by: None + Followed by: +--]] + +function Init(Quest) + +end + +function Accepted(Quest, QuestGiver, Player) + +end + +function Declined(Quest, QuestGiver, Player) + +end + +function quest_complete(Quest, QuestGiver, Player) + +end + +function Reload(Quest, QuestGiver, Player, Step) + +end + diff --git a/server/Quests/ThunderingSteppes/DesperatelySeekingButterflies.lua b/server/Quests/ThunderingSteppes/DesperatelySeekingButterflies.lua new file mode 100644 index 000000000..2f145fb3b --- /dev/null +++ b/server/Quests/ThunderingSteppes/DesperatelySeekingButterflies.lua @@ -0,0 +1,76 @@ +--[[ + Script Name : Quests/ThunderingSteppes/DesperatelySeekingButterflies.lua + Script Author : Jabantiz + Script Date : 2014.07.30 04:07:06 + Script Purpose : + + Zone : Thundering Steppes + Quest Giver : Elowys Laceleaf (2490013) + Preceded by : None + Followed by : Desperately Seeking Moths! +--]] + +function Init(Quest) + AddQuestStepObtainItem(Quest, 1, "I'm looking for a striped blue butterfly for Elowys Laceleaf.", 1, 100, "I need to find some butterflies for Elowys Laceleaf in the Thundering Steppes.", 1833, 13464) + AddQuestStepCompleteAction(Quest, 1, "Step1Complete") +end + +function Step1Complete(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 1, "I've found a striped blue butterfly.") + AddQuestStepChat(Quest, 2, "I need to take this butterfly to Elowys Laceleaf on the docks of the Thundering Steppes.", 1, "I need to find some butterflies for Elowys Laceleaf in the Thundering Steppes.", 11, 2490013) + AddQuestStepCompleteAction(Quest, 2, "Step2Complete") +end + +function Step2Complete(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 2, "I've given the butterfly to Elowys.") + AddQuestStepObtainItem(Quest, 3, "I'm looking for a striped violet butterfly for Elowys Laceleaf.", 1, 100, "I need to find some butterflies for Elowys Laceleaf in the Thundering Steppes.", 1836, 13494) + AddQuestStepCompleteAction(Quest, 3, "Step3Complete") +end + +function Step3Complete(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 3, "I've found a striped violet butterfly.") + AddQuestStepChat(Quest, 4, "I need to take this butterfly to Elowys Laceleaf on the docks of the Thundering Steppes.", 1, "I need to find some butterflies for Elowys Laceleaf in the Thundering Steppes.", 11, 2490013) + AddQuestStepCompleteAction(Quest, 4, "Step4Complete") +end + +function Step4Complete(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 4, "I've given the butterfly to Elowys.") + AddQuestStepObtainItem(Quest, 5, "I'm looking for a spotted yellow butterfly for Elowys Laceleaf.", 1, 100, "I need to find some butterflies for Elowys Laceleaf in the Thundering Steppes.", 1830, 13265) + AddQuestStepCompleteAction(Quest, 5, "Step5Complete") +end + +function Step5Complete(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 5, "I've found the butterfly.") + AddQuestStepChat(Quest, 6, "I need to take this butterfly to Elowys Laceleaf on the docks of the Thundering Steppes.", 1, "I need to find some butterflies for Elowys Laceleaf in the Thundering Steppes.", 11, 2490013) + AddQuestStepCompleteAction(Quest, 6, "Step6Complete") + SetCompleteFlag(Quest) +end + +function Step6Complete(Quest, QuestGiver, Player) + GiveQuestReward(Quest, Player) +end + +function Accepted(Quest, QuestGiver, Player) +end + +function Deleted(Quest, QuestGiver, Player) +end + +function Declined(Quest, QuestGiver, Player) +end + +function Reload(Quest, QuestGiver, Player, Step) + if Step == 1 then + Step1Complete(Quest, QuestGiver, Player) + elseif Step == 2 then + Step2Complete(Quest, QuestGiver, Player) + elseif Step == 3 then + Step3Complete(Quest, QuestGiver, Player) + elseif Step == 4 then + Step4Complete(Quest, QuestGiver, Player) + elseif Step == 5 then + Step5Complete(Quest, QuestGiver, Player) + elseif Step == 6 then + Step6Complete(Quest, QuestGiver, Player) + end +end \ No newline at end of file diff --git a/server/Quests/ThunderingSteppes/DesperatelySeekingMoths.lua b/server/Quests/ThunderingSteppes/DesperatelySeekingMoths.lua new file mode 100644 index 000000000..1d46c1cb9 --- /dev/null +++ b/server/Quests/ThunderingSteppes/DesperatelySeekingMoths.lua @@ -0,0 +1,90 @@ +--[[ + Script Name : DesperatelySeekingMoths!.lua + Script Purpose : + Script Author : XionnaeEQ + Script Date : 6/11/2016 + Script Notes : + + Zone : Thundering Steppes + Quest Giver : Elowys Laceleaf (2490013) + Preceded by : Desperately Seeking Butterflies! + Followed by : Desperately Seeking Ants! +--]] + + +function Init(Quest) + AddQuestStepObtainItem(Quest, 1, "I'm looking for a plain brown moth for Elowys Laceleaf.", 1, 100, "I need to find some moths for Elowys Laceleaf in the Thundering Steppes.", 1899, 10409) + AddQuestStepCompleteAction(Quest, 1, "Step1Complete") +end + +function Step1Complete(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 1, "I've found a plain brown moth.") + AddQuestStepChat(Quest, 2, "I need to take the moth to Elowys Laceleaf on the docks of the Thundering Steppes.", 1, "I need to find some moths for Elowys Laceleaf in the Thundering Steppes.", 11, 10409) + AddQuestStepCompleteAction(Quest, 2, "Step2Complete") +end + +function Step2Complete(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 2, "I've given the moth to Elowys.") + AddQuestStepObtainItem(Quest, 3, "I'm looking for a spotted brown moth for Elowys Laceleaf.", 1, 100, "I need to find some moths for Elowys Laceleaf in the Thundering Steppes.", 1903, 13234) + AddQuestStepCompleteAction(Quest, 3, "Step3Complete") +end + +function Step3Complete(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 3, "I've found a spotted brown moth.") + AddQuestStepObtainItem(Quest, 4, "I'm looking for a striped brown moth for Elowys Laceleaf.", 1, 100, "I need to find some moths for Elowys Laceleaf in the Thundering Steppes.", 1907, 13471) + AddQuestStepCompleteAction(Quest, 4, "Step4Complete") +end + +function Step4Complete(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 4, "I've found a striped brown moth.") + AddQuestStepChat(Quest, 5, "I need to take this moth to Elowys Laceleaf on the docks of the Thundering Steppes.", 1, "I need to find some moths for Elowys Laceleaf in the Thundering Steppes.", 11, 13471) + AddQuestStepCompleteAction(Quest, 5, "Step5Complete") +end + +function Step5Complete(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 5, "I've given the moth to Elowys.") + AddQuestStepObtainItem(Quest, 6, "I'm looking for a spotted yellow butterfly for Elowys Laceleaf.", 1, 100, "I need to find some moths for Elowys Laceleaf in the Thundering Steppes.", 1830, 13265) + AddQuestStepCompleteAction(Quest, 6, "Step6Complete") +end + +function Step6Complete(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 6, "I've found the butterfly.") + AddQuestStepChat(Quest, 7, "I need to take this butterfly to Elowys Laceleaf on the docks of the Thundering Steppes.", 1, "I need to find some moths for Elowys Laceleaf in the Thundering Steppes.", 11, 13265) + AddQuestStepCompleteAction(Quest, 7, "QuestComplete") + SetCompleteFlag(Quest) +end + + +function Step7Complete(Quest, QuestGiver, Player) + GiveQuestReward(Quest, Player) +end + +function Accepted(Quest, QuestGiver, Player) +end + +function Deleted(Quest, QuestGiver, Player) +end + +function Declined(Quest, QuestGiver, Player) +end + + + + +function Reload(Quest, QuestGiver, Player, Step) + if Step == 1 then + Step1Complete(Quest, QuestGiver, Player) + elseif Step == 2 then + Step2Complete(Quest, QuestGiver, Player) + elseif Step == 3 then + Step3Complete(Quest, QuestGiver, Player) + elseif Step == 4 then + Step4Complete(Quest, QuestGiver, Player) + elseif Step == 5 then + Step5Complete(Quest, QuestGiver, Player) + elseif Step == 6 then + Step6Complete(Quest, QuestGiver, Player) + elseif Step == 7 then + QuestComplete(Quest, QuestGiver, Player) + end +end \ No newline at end of file diff --git a/server/Quests/ThunderingSteppes/GranvillesRestaurantAntonica.lua b/server/Quests/ThunderingSteppes/GranvillesRestaurantAntonica.lua new file mode 100644 index 000000000..778cda28c --- /dev/null +++ b/server/Quests/ThunderingSteppes/GranvillesRestaurantAntonica.lua @@ -0,0 +1,90 @@ +--[[ + Script Name : GranvillesRestaurantAntonica.lua + Script Purpose : Handles the quest, "Granville's Restaurant, Antonica" + Script Author : Jabantiz + Script Date : 6/14/2016 + Script Notes : + + Zone : Thundering Steppes + Quest Giver : Tobias Granville (2490178) + Preceded by : None + Followed by : None +--]] + + +function Init(Quest) + AddQuestStepKill(Quest, 1, "I must bring back large shore crab shells for Tobias' crab bisque.", 15, 100, "I will need to obtain what Tobias needs in and around the Thundering Steppes.", 77, 2490280) + AddQuestStepCompleteAction(Quest, 1, "Step1Complete") +end + +function Step1Complete(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 1, "I've collected several large shore crab shells.") + + AddQuestStepChat(Quest, 2, "I should take these shells back to Tobias Granville in the Village of Thundermist.", 1, "I will need to obtain what Tobias needs in and around the Thundering Steppes.", 2545, 2490178) + AddQuestStepCompleteAction(Quest, 2, "Step2Complete") +end + +function Step2Complete(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 2, "I've spoken with Tobias.") + + AddQuestStepHarvest(Quest, 3, "I need to obtain a variety of high quality seafood for Tobias' seafood bisque, thicket crayfish should suffice.", 20, 100, "I will need to obtain what Tobias needs in and around the Thundering Steppes.", 2545, 14395) + AddQuestStepCompleteAction(Quest, 3, "Step3Complete") +end + +function Step3Complete(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 3, "I've obtained several thicket crayfish for Tobia's bisque.") + + AddQuestStepChat(Quest, 4, "I need to take these ingredients to Tobias Granville in the Village of Thundermist.", 1, "I will need to obtain what Tobias needs in and around the Thundering Steppes.", 11, 2490178) + AddQuestStepCompleteAction(Quest, 4, "Step4Complete") +end + +function Step4Complete(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 4, "I've spoken with Tobias.") + + AddQuestStepLocation(Quest, 5, "I need to check on what might be keeping the creature population low near the shore.", 30, "I will need to obtain what Tobias needs in and around the Thundering Steppes.", 11, 1481, -20, 239 ) + AddQuestStepCompleteAction(Quest, 5, "Step5Complete") +end + +function Step5Complete(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 5, "I've seen a siren's temple; they might be keeping the populations low.") + + AddQuestStepChat(Quest, 6, "I need to report back to Tobias Granville in the Village of Thundermist.", 1, "I will need to obtain what Tobias needs in and around the Thundering Steppes.", 11, 2490178) + AddQuestStepCompleteAction(Quest, 6, "QuestComplete") +end + +function QuestComplete(Quest, QuestGiver, Player) + -- The following UpdateQuestStepDescription and UpdateTaskGroupDescription are not needed, parser adds them for completion in case stuff needs to be moved around + UpdateQuestStepDescription(Quest, 6, "I've spoken with Tobias.") + UpdateQuestTaskGroupDescription(Quest, 1, "I've provided everything Tobias requested.") + + UpdateQuestDescription(Quest, "I've procured the basic ingredients Tobias requested. He paid part of what he owes me, but told me that his sister Tanny Granville has the rest of their funds. I will have to look Miss Granville up when I pass through Nektulos Forest to collect what's owed me...or I can forget the whole thing. Hmm...decisions, decisions.") + GiveQuestReward(Quest, Player) +end + +function Reload(Quest, QuestGiver, Player, Step) + if Step == 1 then + Step1Complete(Quest, QuestGiver, Player) + elseif Step == 2 then + Step2Complete(Quest, QuestGiver, Player) + elseif Step == 3 then + Step3Complete(Quest, QuestGiver, Player) + elseif Step == 4 then + Step4Complete(Quest, QuestGiver, Player) + elseif Step == 5 then + Step5Complete(Quest, QuestGiver, Player) + elseif Step == 6 then + QuestComplete(Quest, QuestGiver, Player) + end +end + +function Accepted(Quest, QuestGiver, Player) + FaceTarget(QuestGiver, Player) + local conversation = CreateConversation() + + AddConversationOption(conversation, "All right, I'll be back.") + StartConversation(conversation, QuestGiver, Player, "We start by taking the shells of large shore crabs and seasoning them, then we cook them over low heat in just the right amount of liquid. The flavor intensifies over time into something completely sublime. We'll see how you handle this task before entrusting you with something a bit more delicate, eh?", "voiceover/english/tobias_granville/steppes/quests/quest_tobias_granville/tobias_granville003.mp3", 11212970, 2895684237) +end + +function Declined(Quest, QuestGiver, Player) + -- Add dialog here for when the quest is declined +end \ No newline at end of file diff --git a/server/Quests/ThunderingSteppes/GriffinEggForTheSteppesTowerStations.lua b/server/Quests/ThunderingSteppes/GriffinEggForTheSteppesTowerStations.lua new file mode 100644 index 000000000..9e19f2d39 --- /dev/null +++ b/server/Quests/ThunderingSteppes/GriffinEggForTheSteppesTowerStations.lua @@ -0,0 +1,44 @@ +--[[ + Script Name : Quests/ThunderingSteppes/GriffinEggForTheSteppesTowerStations.lua + Script Author : Jabantiz + Script Date : 2014.07.14 10:07:24 + Script Purpose : + + Zone : ThunderingSteppes + Quest Giver: a griffin tamer (2490000) + Preceded by: None + Followed by: None +--]] + +function Init(Quest) + AddQuestStepHarvest(Quest, 1, "I'll have to look around the Thundering Steppes for griffin eggs. It's likely I'd find eggs near the prides that fly about the western steppes.", 1, 100, "I need to find a griffin egg for the griffin tower station trainer!", 2346, 6675) + AddQuestStepCompleteAction(Quest, 1, "Step1Complete") +end + +function Step1Complete(Quest, QuestGiver, Player) + UpdateQuestTaskGroupDescription(Quest, 1, "I've found an egg for the griffin tower trainer.") + + AddQuestStepChat(Quest, 2, "Return the unhatched egg to the griffin trainer at the nearest griffin station.", 1, "Return the egg to the nearest griffin tower station quickly! If the egg cools, the only thing it'll be useful for is a really big omlette!", 11, 2490000) + AddQuestStepCompleteAction(Quest, 2, "Step2Complete") +end + +function Step2Complete(Quest, QuestGiver, Player) + GiveQuestReward(Quest, Player) +end + +function Accepted(Quest, QuestGiver, Player) +end + +function Deleted(Quest, QuestGiver, Player) +end + +function Declined(Quest, QuestGiver, Player) +end + +function Reload(Quest, QuestGiver, Player, Step) + if Step == 1 then + Step1Complete(Quest, QuestGiver, Player) + elseif Step == 2 then + Step2Complete(Quest, QuestGiver, Player) + end +end diff --git a/server/Quests/ThunderingSteppes/HidesForBrianna.lua b/server/Quests/ThunderingSteppes/HidesForBrianna.lua new file mode 100644 index 000000000..886d1fcbf --- /dev/null +++ b/server/Quests/ThunderingSteppes/HidesForBrianna.lua @@ -0,0 +1,50 @@ +--[[ + Script Name : Quests/ThunderingSteppes/HidesForBrianna.lua + Script Author : Jabantiz + Script Date : 2014.07.11 02:07:04 + Script Purpose : + + Zone : ThunderingSteppes + Quest Giver: Brianna (2490170) + Preceded by: Supplies for Brianna + Followed by: +--]] + +function Init(Quest) + AddQuestStepKill(Quest, 1, "Collect tough rumbler hides.", 15, 100, "Brianna in Thundermist village has asked me to gather tough hides from rumblers in the Steppes.", 2536, 3570000, 3570001, 3570002, 3570003, 3570004, 3570005, 3570006, 3570007, 3570008) + AddQuestStepCompleteAction(Quest, 1, "Step1Complete") + +end + +function Step1Complete(Quest, QuestGiver, Player) + UpdateQuestTaskGroupDescription(Quest, 1, "I gathered the rumbler hides for Brianna.") + + AddQuestStepChat(Quest, 2, "Return these hides to Brianna in Thundermist Village.", 1, "I should return these rumbler hides to Brianna in Thundermist Village.", 11, 2490170) + AddQuestStepCompleteAction(Quest, 2, "Step2Complete") +end + +function Step2Complete(Quest, QuestGiver, Player) + GiveQuestReward(Quest, Player) +end + +function Accepted(Quest, QuestGiver, Player) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "I'm on it.") + StartConversation(conversation, NPC, Spawn, "Well, the first thing I am going to need today is some tough rumbler hides, but only from the subterranean ones. If they have ever seen daylight, they just won't do. There is a special cave I found once where they tend to gather. If you can bring me 15 of them that would be great.") +end + +function Deleted(Quest, QuestGiver, Player) +end + +function Declined(Quest, QuestGiver, Player) +end + +function Reload(Quest, QuestGiver, Player, Step) + if Step == 1 then + Step1Complete(Quest, QuestGiver, Player) + elseif Step == 2 then + Step2Complete(Quest, QuestGiver, Player) + end +end diff --git a/server/Quests/ThunderingSteppes/HuntingForTrapperBorgus.lua b/server/Quests/ThunderingSteppes/HuntingForTrapperBorgus.lua new file mode 100644 index 000000000..28d4a7e7c --- /dev/null +++ b/server/Quests/ThunderingSteppes/HuntingForTrapperBorgus.lua @@ -0,0 +1,152 @@ +--[[ + Script Name : Quests/ThunderingSteppes/HuntingForTrapperBorgus.lua + Script Author : Jabantiz + Script Date : 2014.07.03 08:07:38 + Script Purpose : + + Zone : ThunderingSteppes + Quest Giver: + Preceded by: None + Followed by: +--]] + +local beetles = 1 +local crabs = 2 +local antelope = 4 +local snakes = 8 + +local kill8 = 16 +local kill9 = 32 +local kill10 = 64 +local kill11 = 128 +local kill12 = 256 + +function Init(Quest) + SetQuestFeatherColor(Quest, 3) + SetQuestRepeatable(Quest) +end + +function FinishedKilling(Quest, QuestGiver, Player) + UpdateQuestTaskGroupDescription(Quest, 1, "I've slain quite a few of the local Steppes creatures, this should be enough for the needed provisions.") + AddQuestStepChat(Quest, 6, "I should return to Trapper Borgus on the road to Antonica in the Thundering Steppes.", 1, "I should report back to Trapper Borgus.", 11, 2490327) + AddQuestStepCompleteAction(Quest, 6, "CompleteQuest") + SetCompleteFlag(Quest) +end + +function Accepted(Quest, QuestGiver, Player) + FaceTarget(QuestGiver, Player) + conversation = CreateConversation() + + if GetTempVariable(Player, "RepeatHuntingForTrapperBorgus") == "true" then + -- agree to do it again after turn in + PlayFlavor(QuestGiver, "voiceover/english/trapper_borgus/steppes/trapper_borgus005.mp3", "", "", 3731275829, 2804607060, Player) + AddConversationOption(conversation, "No problem.") + StartConversation(conversation, QuestGiver, Player, "Righto, I need yeh to slay some more beasts for me.") + else + PlayFlavor(QuestGiver, "voiceover/english/trapper_borgus/steppes/trapper_borgus002.mp3", "", "", 2714498539, 3912364452, Player) + AddConversationOption(conversation, "I'm ready to hunt.") + StartConversation(conversation, QuestGiver, Player, "I thank yeh, and me back thanks yeh! I just need several of each kind o' Steppes beasts that wander in these parts, they should provide enough food for the coming months! Slay them n' bring their bodies to me.") + end + + SetTempVariable(Player, "RepeatHuntingForTrapperBorgus", nil) + + if GetQuestFlags(Quest) == 0 then + -- needs to be in accept to make it random per person + local mob_type = math.random(1, 4) -- what to kill + local quantity = math.random(8, 12) + local flags = 0 + + if mob_type == 1 then -- Beetles + flags = beetles + elseif mob_type == 2 then -- Crabs + flags = crabs + elseif mob_type == 3 then -- Antelope + flags = antelope + elseif mob_type == 4 then -- Snakes + flags = snakes + end + + if quantity == 8 then + flags = flags + kill8 + elseif quantity == 9 then + flags = flags + kill9 + elseif quantity == 10 then + flags = flags + kill10 + elseif quantity == 11 then + flags = flags + kill11 + elseif quantity == 12 then + flags = flags + kill12 + end + + SetQuestFlags(Quest, flags) + SetStep(Quest, Player, mob_type, quantity) + else -- need the else for /reload quest + CheckBitMask(Quest, Player, GetQuestFlags(Quest)) + end +end + +function hasflag(flags, flag) + return flags % (2*flag) >= flag +end + +function CheckBitMask(Quest, Player, Flags) + local mob_type = 0 + local quantity = 0 + + if hasflag(Flags, beetles) then + mob_type = 1 + elseif hasflag(Flags, crabs) then + mob_type = 2 + elseif hasflag(Flags, antelope) then + mob_type = 3 + elseif hasflag(Flags, snakes) then + mob_type = 4 + end + + if hasflag(Flags, kill8) then + quantity = 8 + elseif hasflag(Flags, kill9) then + quantity = 9 + elseif hasflag(Flags, kill10) then + quantity = 10 + elseif hasflag(Flags, kill11) then + quantity = 11 + elseif hasflag(Flags, kill12) then + quantity = 12 + end + + SetStep(Quest, Player, mob_type, quantity) +end + +function Declined(Quest, QuestGiver, Player) + SetTempVariable(Player, "RepeatHuntingForTrapperBorgus", nil) +end + +function CompleteQuest(Quest, QuestGiver, Player) + GiveQuestReward(Quest, Player) +end + +function SetStep(Quest, Player, mob, quantity) + if mob == 1 then + AddQuestStepKill(Quest, 1, "Hunt beetles in the Thundering Steppes.", quantity, 100, "I'm supposed to help Trapper Borgus get the provisions his family requires, I should get them back to him as soon as I am done.", 0, 2490206, 2490050, 2490058) + elseif mob == 2 then + AddQuestStepKill(Quest, 1, "Hunt crabs in the Thundering Steppes.", quantity, 100, "I'm supposed to help Trapper Borgus get the provisions his family requires, I should get them back to him as soon as I am done.", 0, 2490280, 2490007, 2490128, 2490200) + elseif mob == 3 then + AddQuestStepKill(Quest, 1, "Hunt antelope in the Thundering Steppes.", quantity, 100, "I'm supposed to help Trapper Borgus get the provisions his family requires, I should get them back to him as soon as I am done.", 0, 2490056, 2490052, 2490047) + else + AddQuestStepKill(Quest, 1, "Hunt snakes in the Thundering Steppes.", quantity, 100, "I'm supposed to help Trapper Borgus get the provisions his family requires, I should get them back to him as soon as I am done.", 0, 2490181, 2490110) + end + + AddQuestStepCompleteAction(Quest, 1, "FinishedKilling") +end + +function Reload(Quest, QuestGiver, Player, Step) + if Step == 0 then + CheckBitMask(Quest, Player, GetQuestFlags(Quest)) + elseif Step == 1 then + FinishedKilling(Quest, QuestGiver, Player) + end +end + +function Deleted(Quest, QuestGiver, Player) +end \ No newline at end of file diff --git a/server/Quests/ThunderingSteppes/HuntingtheHuntresses.lua b/server/Quests/ThunderingSteppes/HuntingtheHuntresses.lua new file mode 100644 index 000000000..a7c36168c --- /dev/null +++ b/server/Quests/ThunderingSteppes/HuntingtheHuntresses.lua @@ -0,0 +1,41 @@ +--[[ + Script Name : Quests/ThunderingSteppes/HuntingtheHuntresses.lua + Script Author : Jabantiz + Script Date : 2015.05.09 06:05:41 + Script Purpose : + + Zone : ThunderingSteppes + Quest Giver: Click barrel at (217, -1, -159) + Preceded by: None + Followed by: None +--]] + +function Init(Quest) + AddQuestStepKill(Quest, 1, "I need to slay fifteen Amazon huntresses in the Thundering Steppes.", 15, 100, "The Amazon huntresses in the Thundering Steppes are too dangerous to just allow to roam freely. They must be slain for the good of all who come through the area.", 611, 2490138) + AddQuestStepCompleteAction(Quest, 1, "QuestComplete") +end + +function Accepted(Quest, QuestGiver, Player) + local con = CreateConversation() + + AddConversationOption(con, "I will slay them.", "Close") + AddConversationOption(con, "exit", "Close") + StartDialogConversation(con, 1, QuestGiver, Player, 'Looking inside the barrel you find a large horseshoe with a scroll attached to it that reads: "This horseshoe belonged to the Amazon huntress that attacked my family caravan on a trip to Windstalker Village. It is all that I have left of that terrible day - Bjorn Stormpeak." The Amazon huntresses should be destroyed!') +end + +function Declined(Quest, QuestGiver, Player) + +end + +function Deleted(Quest, QuestGiver, Player) + +end + +function QuestComplete(Quest, QuestGiver, Player) + GiveQuestReward(Quest, Player) +end + +function Reload(Quest, QuestGiver, Player, Step) + +end + diff --git a/server/Quests/ThunderingSteppes/MysteriousAssailants.lua b/server/Quests/ThunderingSteppes/MysteriousAssailants.lua new file mode 100644 index 000000000..9dded0992 --- /dev/null +++ b/server/Quests/ThunderingSteppes/MysteriousAssailants.lua @@ -0,0 +1,45 @@ +--[[ + Script Name : Quests/ThunderingSteppes/MysteriousAssailants.lua + Script Author : Jabantiz + Script Date : 2014.09.26 06:09:17 + Script Purpose : + + Zone : ThunderingSteppes + Quest Giver: Reinkor McCollin (2490027) + Preceded by: None + Followed by: Travelers Beware +--]] + +function Init(Quest) + AddQuestStepKill(Quest, 1, "Find and slay ten drowned footsoldiers.", 10, 100, "Reinkor believes that drowned footsoldiers may be responsible for the deaths of his couriers and theft of his merchandise. Find and slay ten drowned footsoldiers.", 611, 2490137) + AddQuestStepCompleteAction(Quest, 1, "Step1Complete") +end + +function Step1Complete(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 1, "I've found and slain ten of the drowned footsoldiers.") + UpdateQuestTaskGroupDescription(Quest, 1, "I was able to track down a group of drowned footsoldiers and destroy wretched souls.") + + AddQuestStepChat(Quest, 2, "Return to Reinkor McCollin.", 1, "I was successful in finding a group of drowned footsoldiers and eliminating them. I should return to Reinkor and inform him of the incident.", 11, 2490027) + AddQuestStepCompleteAction(Quest, 2, "Step2Complete") +end + +function Step2Complete(Quest, QuestGiver, Player) + GiveQuestReward(Quest, Player) +end + +function Accepted(Quest, QuestGiver, Player) +end + +function Deleted(Quest, QuestGiver, Player) +end + +function Declined(Quest, QuestGiver, Player) +end + +function Reload(Quest, QuestGiver, Player, Step) + if Step == 1 then + Step1Complete(Quest, QuestGiver, Player) + elseif Step == 2 then + Step2Complete(Quest, QuestGiver, Player) + end +end \ No newline at end of file diff --git a/server/Quests/ThunderingSteppes/OutlandBrigadeReports.lua b/server/Quests/ThunderingSteppes/OutlandBrigadeReports.lua new file mode 100644 index 000000000..b68c202e1 --- /dev/null +++ b/server/Quests/ThunderingSteppes/OutlandBrigadeReports.lua @@ -0,0 +1,32 @@ +--[[ + Script Name : Quests/ThunderingSteppes/OutlandBrigadeReports.lua + Script Author : geordie0511 + Script Date : 2019.03.19 04:03:44 + Script Purpose : + + Zone : ThunderingSteppes + Quest Giver: + Preceded by: None + Followed by: +--]] + +function Init(Quest) + +end + +function Accepted(Quest, QuestGiver, Player) + +end + +function Declined(Quest, QuestGiver, Player) + +end + +function quest_complete(Quest, QuestGiver, Player) + +end + +function Reload(Quest, QuestGiver, Player, Step) + +end + diff --git a/server/Quests/ThunderingSteppes/StopTheElementals.lua b/server/Quests/ThunderingSteppes/StopTheElementals.lua new file mode 100644 index 000000000..94f243e11 --- /dev/null +++ b/server/Quests/ThunderingSteppes/StopTheElementals.lua @@ -0,0 +1,44 @@ +--[[ + Script Name : Quests/ThunderingSteppes/StopTheElementals.lua + Script Author : Jabantiz + Script Date : 2014.07.09 01:07:13 + Script Purpose : + + Zone : ThunderingSteppes + Quest Giver: N/A + Preceded by: The Gnoll Cave + Followed by: None +--]] + +function Init(Quest) + AddQuestStepKill(Quest, 1, "Locate the source of the released fire elementals.", 1, 100, "If Tish's magical equipment caused this, then I should find the source to recover her property.", 11, 5940005) + AddQuestStepCompleteAction(Quest, 1, "Step1Complete") +end + +function Step1Complete(Quest, QuestGiver, Player) + UpdateQuestTaskGroupDescription(Quest, 1, "I have found what appears to be Tish's lost equipment.") + + AddQuestStepChat(Quest, 2, "Return the equipment to Tish Tickers.", 1, "The Rampaging Elemental was carrying some strange arcane equipment. I should bring this to Tish in the Thundering Steppes.", 11, 2490042) + AddQuestStepCompleteAction(Quest, 2, "Step2Complete") +end + +function Step2Complete(Quest, QuestGiver, Player) + GiveQuestReward(Quest, Player) +end + +function Accepted(Quest, QuestGiver, Player) +end + +function Deleted(Quest, QuestGiver, Player) +end + +function Declined(Quest, QuestGiver, Player) +end + +function Reload(Quest, QuestGiver, Player, Step) + if Step == 1 then + Step1Complete(Quest, QuestGiver, Player) + elseif Step == 2 then + Step2Complete(Quest, QuestGiver, Player) + end +end \ No newline at end of file diff --git a/server/Quests/ThunderingSteppes/SuppliesForBrianna.lua b/server/Quests/ThunderingSteppes/SuppliesForBrianna.lua new file mode 100644 index 000000000..3b29ea39c --- /dev/null +++ b/server/Quests/ThunderingSteppes/SuppliesForBrianna.lua @@ -0,0 +1,49 @@ +--[[ + Script Name : Quests/ThunderingSteppes/SuppliesForBrianna.lua + Script Author : Jabantiz + Script Date : 2014.07.11 02:07:46 + Script Purpose : + + Zone : ThunderingSteppes + Quest Giver: Brianna (2490170) + Preceded by: Watch Your Step in the Thundering Steppes, Part III + Followed by: Hides for Brianna +--]] + +function Init(Quest) + AddQuestStepObtainItem(Quest, 1, "I need to get five Tin Long Swords for Brianna since I lost the original ones.", 5, 100, "I need to make the replacement items that Brianna needs.", 656, 89137) + AddQuestStepCompleteAction(Quest, 1, "Step1Complete") +end + +function Step1Complete(Quest, QuestGiver, Player) + UpdateQuestTaskGroupDescription(Quest, 1, "I have the items that Brianna needs now.") + + AddQuestStepChat(Quest, 2, "I need to give Brianna the five Tin Long Swords.", 1, "Now that I have all the items that Brianna needs, I should return them to her in The Thundering Steppes.", 654, 2490170) + AddQuestStepCompleteAction(Quest, 2, "Step2Complete") +end + +function Step2Complete(Quest, QuestGiver, Player) + GiveQuestReward(Quest, Player) +end + +function Accepted(Quest, QuestGiver, Player) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "Thank you for being so generous.") + StartConversation(conversation, NPC, Spawn, "Well here it looks like 5 Forged Tin Long Swords were damaged. I am going to need you either to buy me some new ones or make them for me. Why don't I keep this delivery receipt until you bring them to me, so I know you will return.") +end + +function Deleted(Quest, QuestGiver, Player) +end + +function Declined(Quest, QuestGiver, Player) +end + +function Reload(Quest, QuestGiver, Player, Step) + if Step == 1 then + Step1Complete(Quest, QuestGiver, Player) + elseif Step == 2 then + Step2Complete(Quest, QuestGiver, Player) + end +end \ No newline at end of file diff --git a/server/Quests/ThunderingSteppes/TheGnollCave.lua b/server/Quests/ThunderingSteppes/TheGnollCave.lua new file mode 100644 index 000000000..51875c200 --- /dev/null +++ b/server/Quests/ThunderingSteppes/TheGnollCave.lua @@ -0,0 +1,78 @@ +--[[ + Script Name : Quests/ThunderingSteppes/TheGnollCave.lua + Script Author : Jabantiz + Script Date : 2014.07.08 10:07:08 + Script Purpose : + + Zone : ThunderingSteppes + Quest Giver: Tish Tickers (2490042) + Preceded by: A Scrying Shame + Followed by: +--]] + +-- Quests +local TheGnollCave = 106 + +function Init(Quest) + AddQuestStepKill(Quest, 1, "Get cursed bone marrow from some skeletal troopers.", 5, 100, "I must collect some components for Tish Tickers.", 181, 2490218) + AddQuestStepCompleteAction(Quest, 1, "Step1Complete") + + AddQuestStepKill(Quest, 2, "Collect spirit essence from some spirited orbs.", 3, 100, "I must collect some components for Tish Tickers.", 343, 2490219) + AddQuestStepCompleteAction(Quest, 2, "Step2Complete") + + AddQuestStepKill(Quest, 3, "Gather some imbued bones from Varsoon apprentices.", 5, 100, "I must collect some components for Tish Tickers.", 418, 2490226) + AddQuestStepCompleteAction(Quest, 3, "Step3Complete") +end + +function Step1Complete(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 1, "I have gathered some cursed bone marrow.") + CheckProgress(Quest, Player) +end + +function Step2Complete(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 2, "I have collected some spirit essence.") + CheckProgress(Quest, Player) +end + +function Step3Complete(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 3, "I have gathered some imbued bones.") + CheckProgress(Quest, Player) +end + +function CheckProgress(Quest, Player) + if QuestStepIsComplete(Player, TheGnollCave, 1) and QuestStepIsComplete(Player, TheGnollCave, 2) and QuestStepIsComplete(Player, TheGnollCave, 3) then + UpdateQuestTaskGroupDescription(Quest, 1, "I have collected the necessary components for Tish Tickers.") + AddQuestStepChat(Quest, 4, "Return to Tish Tickers.", 1, "I must bring these components I have collected back to Tish.", 11, 2490042) + AddQuestStepCompleteAction(Quest, 4, "Step4Complete") + end +end + +function Step4Complete(Quest, QuestGiver, Player) + GiveQuestReward(Quest, Player) +end + +function Accepted(Quest, QuestGiver, Player) + FaceTarget(QuestGiver, Player) + conversation = CreateConversation() + + AddConversationOption(conversation, "Okay.") + StartConversation(conversation, QuestGiver, Player, "Great! The gnolls have taken my equipment to a cave near here, but they have used some of my own magic to seal the entrance. I'll need you to gather a few key components for me so that we can break in. Here is a list of items I will need in order to prepare a spell to counter their lock. Come see me once you've finished.") +end + +function Deleted(Quest, QuestGiver, Player) +end + +function Declined(Quest, QuestGiver, Player) +end + +function Reload(Quest, QuestGiver, Player, Step) + if Step == 1 then + Step1Complete(Quest, QuestGiver, Player) + elseif Step == 2 then + Step2Complete(Quest, QuestGiver, Player) + elseif Step == 3 then + Step3Complete(Quest, QuestGiver, Player) + elseif Step == 4 then + Step4Complete(Quest, QuestGiver, Player) + end +end \ No newline at end of file diff --git a/server/Quests/ThunderingSteppes/TheWanderersThreeMeaningsOfLife.lua b/server/Quests/ThunderingSteppes/TheWanderersThreeMeaningsOfLife.lua new file mode 100644 index 000000000..53c5ccbf1 --- /dev/null +++ b/server/Quests/ThunderingSteppes/TheWanderersThreeMeaningsOfLife.lua @@ -0,0 +1,228 @@ +--[[ + Script Name : Quests/ThunderingSteppes/TheWanderersThreeMeaningsOfLife.lua + Script Author : Jabantiz + Script Date : 2014.07.11 07:07:40 + Script Purpose : + + Zone : ThunderingSteppes + Quest Giver: The Wandering Augur (2490318) + Preceded by: None + Followed by: None +--]] + +local STEP1_SERPENTS = 1 +local STEP1_HAWKS = 2 +local STEP1_GORGERS = 4 + +local STEP3_CRABS = 8 +local STEP3_SIRENS = 16 + +local STEP5_CEMETERY = 32 +local STEP5_LASTSTAND = 64 +local STEP5_DECAY = 128 + +function Init(Quest) + +end + +function Step1Complete(Quest, QuestGiver, Player) + local Flags = GetQuestFlags(Quest) + if hasflag(Flags, STEP1_SERPENTS) then + UpdateQuestStepDescription(Quest, 1, "I've slain a plains serpent.") + elseif hasflag(Flags, STEP1_HAWKS) then + UpdateQuestStepDescription(Quest, 1, "I've slain an elder hawk.") + elseif hasflag(Flags, STEP1_GORGERS) then + UpdateQuestStepDescription(Quest, 1, "I've slain a carrion gorger.") + end + + AddQuestStepChat(Quest, 2, "I must speak with the Wandering Augur.", 1, "The Wandering Augur is teaching me three meanings of life.", 11, 2490318) + AddQuestStepCompleteAction(Quest, 2, "Step2Complete") +end + +function Step2Complete(Quest, QuestGiver, Player) + local step3 = math.random(1, 2) + local Flags = GetQuestFlags(Quest) + if step3 == 1 then + Flags = Flags + STEP3_CRABS + elseif step3 == 2 then + Flags = Flags + STEP3_SIRENS + end + + SetStep3Description(Quest, step3) + SetQuestFlags(Quest, Flags) +end + +function SetStep3Description(Quest, step3) + UpdateQuestStepDescription(Quest, 2, "I've spoken with the Wandering Augur.") + if step3 == 1 then + AddQuestStepKill(Quest, 3, "Learn inner strength by hunting large shore crabs in the Thundering Steppes.", 5, 100, "The Wandering Augur is teaching me three meanings of life.", 86, 2490280) + elseif step3 == 2 then + AddQuestStepKill(Quest, 3, "Learn inner strength by hunting irresistible sirens in the Thundering Steppes.", 5, 100, "The Wandering Augur is teaching me three meanings of life.", 86, 2490117) + end + AddQuestStepCompleteAction(Quest, 3, "Step3Complete") +end + +function CheckStep3Bitmask(Quest) + local step3 = 0 + local Flags = GetQuestFlags(Quest) + if hasflag(Flags, STEP3_CRABS) then + step3 = 1 + elseif hasflag(Flags, STEP3_SIRENS) then + step3 = 2 + end + + SetStep3Description(Quest, step3) +end + +function Step3Complete(Quest, QuestGiver, Player) + local Flags = GetQuestFlags(Quest) + if hasflag(Flags, STEP3_CRABS) then + UpdateQuestStepDescription(Quest, 3, "I've slain some large shore crabs.") + elseif hasflag(Flags, STEP3_SIRENS) then + UpdateQuestStepDescription(Quest, 3, "I've slain some irresistible sirens.") + end + + AddQuestStepChat(Quest, 4, "I must speak with the Wandering Augur.", 1, "The Wandering Augur is teaching me three meanings of life.", 11, 2490318) + AddQuestStepCompleteAction(Quest, 4, "Step4Complete") +end + +function Step4Complete(Quest, QuestGiver, Player) + local step5 = math.random(1, 3) + local Flags = GetQuestFlags(Quest) + if step5 == 1 then + Flags = Flags + STEP5_CEMETERY + elseif step5 == 2 then + Flags = Flags + STEP5_LASTSTAND + elseif step5 == 3 then + Flags = Flags + STEP5_DECAY + end + + SetStep5Description(Quest, step5) + SetQuestFlags(Quest, Flags) +end + +function SetStep5Description(Quest, step5) + UpdateQuestStepDescription(Quest, 4, "I've spoken with the Wandering Augur.") + + if step5 == 1 then + AddQuestStepLocation(Quest, 5, "I've seen the Coldwind Shores Cemetery.", 20, "The Wandering Augur is teaching me three meanings of life.", 11, 1317, -6, -80) + elseif step5 == 2 then + AddQuestStepLocation(Quest, 5, "I need the patience to find the Last Stand in the Thundering Steppes.", 20, "The Wandering Augur is teaching me three meanings of life.", 11, -380, 6, 761) + elseif step5 == 3 then + AddQuestStepLocation(Quest, 5, "I've located the Shrine of Decay.", 20, "The Wandering Augur is teaching me three meanings of life.", 11, 357, 5, 1189) + end + + AddQuestStepCompleteAction(Quest, 5, "Step5Complete") +end + +function CheckStep5Bitmask(Quest) + local step5 = 0 + local Flags = GetQuestFlags(Quest) + if hasflag(Flags, STEP5_CEMETERY) then + step5 = 1 + elseif hasflag(Flags, STEP5_LASTSTAND) then + step5 = 2 + elseif hasflag(Flags, STEP5_DECAY) then + step5 = 3 + end + + SetStep5Description(Quest, step5) +end + +function Step5Complete(Quest, QuestGiver, Player) + local Flags = GetQuestFlags(Quest) + if hasflag(Flags, STEP5_CEMETERY) then + UpdateQuestStepDescription(Quest, 5, "I've seen the Coldwind Shores Cemetery.") + elseif hasflag(Flags, STEP5_LASTSTAND) then + UpdateQuestStepDescription(Quest, 5, "I've located the Last Stand.") + elseif hasflag(Flags, STEP5_DECAY) then + UpdateQuestStepDescription(Quest, 5, "I've located the Shrine of Decay.") + end + + AddQuestStepChat(Quest, 6, "I must speak with the Wandering Augur.", 1, "The Wandering Augur is teaching me three meanings of life.", 11, 2490318) + AddQuestStepCompleteAction(Quest, 6, "Step6Complete") +end + +function Step6Complete(Quest, QuestGiver, Player) + GiveQuestReward(Quest, Player) +end + +function Accepted(Quest, QuestGiver, Player) + FaceTarget(QuestGiver, Player) + conversation = CreateConversation() + + PlayFlavor(QuestGiver, "voiceover/english/the_wandering_augur/steppes/quests/quest_wandering_augur/wandering_augur003.mp3", "", "", 430514653, 1419831869, Player) + AddConversationOption(conversation, "Well, okay.") + StartConversation(conversation, QuestGiver, Player, "Splendid! There are three meanings to which I can lead you, my child. What you take from them is your choice; I am but the augur. The first meaning is physical. Without a corporeal body, how can we experience life? Go, then, and seek the physicality of life as I have written down for you. Return to me when you are ready for the next meaning.") + + local Flags = GetQuestFlags(Quest) + if Flags == 0 then + local step1 = math.random(1, 3) + if step1 == 1 then + Flags = Flags + STEP1_SERPENTS + elseif step1 == 2 then + Flags = Flags + STEP1_HAWKS + elseif step1 == 3 then + Flags = Flags + STEP1_GORGERS + end + + SetStep1Description(Quest, step1) + SetQuestFlags(Quest, Flags) + else + CheckStep1Bitmask(Quest) + end +end + +function SetStep1Description(Quest, step1) + if step1 == 1 then + AddQuestStepKill(Quest, 1, "Learn the physical meaning of life by hunting plains serpents in the Thundering Steppes.", 3, 100, "The Wandering Augur is teaching me three meanings of life.", 98, 2490110) + elseif step1 == 2 then + AddQuestStepKill(Quest, 1, "Learn physical meaning of life by hunting elder hawks in the Thundering Steppes.", 3, 100, "The Wandering Augur is teaching me three meanings of life.", 98, 2490108) + elseif step1 == 3 then + AddQuestStepKill(Quest, 1, "Learn the physical meaning of life by hunting carrion gorgers in the Thundering Steppes.", 3, 100, "The Wandering Augur is teaching me three meanings of life.", 98, 2490118) + end + + AddQuestStepCompleteAction(Quest, 1, "Step1Complete") +end + +function CheckStep1Bitmask(Quest) + local step1 = 0 + local Flags = GetQuestFlags(Quest) + if hasflag(Flags, STEP1_SERPENTS) then + step1 = 1 + elseif hasflag(Flags, STEP1_HAWKS) then + step1 = 2 + elseif hasflag(Flags, STEP1_GORGERS) then + step1 = 3 + end + + SetStep1Description(Quest, step1) +end + +function Deleted(Quest, QuestGiver, Player) +end + +function Declined(Quest, QuestGiver, Player) +end + +function hasflag(flags, flag) + return flags % (2*flag) >= flag +end + +function Reload(Quest, QuestGiver, Player, Step) + if Step == 0 then + CheckStep1Bitmask(Quest) + elseif Step == 1 then + Step1Complete(Quest, QuestGiver, Player) + elseif Step == 2 then + CheckStep3Bitmask(Quest) + elseif Step == 3 then + Step3Complete(Quest, QuestGiver, Player) + elseif Step == 4 then + CheckStep5Bitmask(Quest) + elseif Step == 5 then + Step5Complete(Quest, QuestGiver, Player) + elseif Step == 6 then + Step6Complete(Quest, QuestGiver, Player) + end +end diff --git a/server/Quests/ThunderingSteppes/WatchyourstepinTheThunderingSteppesPartI.lua b/server/Quests/ThunderingSteppes/WatchyourstepinTheThunderingSteppesPartI.lua new file mode 100644 index 000000000..27964b3a5 --- /dev/null +++ b/server/Quests/ThunderingSteppes/WatchyourstepinTheThunderingSteppesPartI.lua @@ -0,0 +1,59 @@ +--[[ + Script Name : Quests/ThunderingSteppes/WatchyourstepinTheThunderingSteppesPartI.lua + Script Author : Jabantiz + Script Date : 2014.07.05 10:07:30 + Script Purpose : + + Zone : ThunderingSteppes + Quest Giver: Jacques + Preceded by: None + Followed by: Watch your step in The Thundering Steppes, Part II +--]] + +function Init(Quest) + AddQuestStepChat(Quest, 1, "Jacques has hired me to deliver mail to Blerton Blumble on the docks of The Thundering Steppes.", 1, "I should deliver this letter to Blerton Blumble on the docks in The Thundering Steppes.", 185, 2490025) + AddQuestStepCompleteAction(Quest, 1, "Step1Complete") +end + +function Step1Complete(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 1, "Now that I have delivered this mail, I should get the return mail.") + + AddQuestStep(Quest, 2, "I must not return to Jacques until I have gotten the return mail from Blerton, and he won't give it to me until I have helped him.", 1, 100, "I should deliver this letter to Blerton Blumble on the docks in The Thundering Steppes.", 11) + AddQuestStepCompleteAction(Quest, 2, "Step2Complete") +end + +function Step2Complete(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 2, "I have the return mail from Blerton.") + UpdateQuestTaskGroupDescription(Quest, 1, "I have delivered the letter to Blerton. I am to pick up his mail also, but he will not give me the mail until I find his grandfather.") + + AddQuestStepChat(Quest, 3, "Now that I have the return mail from Blerton I should deliver it to Jacques.", 1, "I have delivered the Mail to Blerton, but he will not give me the return mail until I have helped him.", 11, 2490212) + AddQuestStepCompleteAction(Quest, 3, "Step3Complete") +end + +function Step3Complete(Quest, QuestGiver, Player) + GiveQuestReward(Quest, Player) +end + +function Accepted(Quest, QuestGiver, Player) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "Okay.") + StartConversation(conversation, QuestGiver, Player, "For your first delivery, please take this letter to a halfling named Blerton Blumble. He can usually be found at the docks. It's from his cousin, Matsy. Now that you work for me, feel free to read any letters you deliver. I always do. It's just about the only fun to be found out here. After you've delivered it, bring me back any mail he has to send.") +end + +function Deleted(Quest, QuestGiver, Player) +end + +function Declined(Quest, QuestGiver, Player) +end + +function Reload(Quest, QuestGiver, Player, Step) + if Step == 1 then + Step1Complete(Quest, QuestGiver, Player) + elseif Step == 2 then + Step2Complete(Quest, QuestGiver, Player) + elseif Step == 3 then + Step3Complete(Quest, QuestGiver, Player) + end +end \ No newline at end of file diff --git a/server/Quests/ThunderingSteppes/WatchyourstepinTheThunderingSteppesPartII.lua b/server/Quests/ThunderingSteppes/WatchyourstepinTheThunderingSteppesPartII.lua new file mode 100644 index 000000000..4baea2f8c --- /dev/null +++ b/server/Quests/ThunderingSteppes/WatchyourstepinTheThunderingSteppesPartII.lua @@ -0,0 +1,58 @@ +--[[ + Script Name : Quests/ThunderingSteppes/WatchyourstepinTheThunderingSteppesPartII.lua + Script Author : Jabantiz + Script Date : 2014.07.05 10:07:39 + Script Purpose : + + Zone : ThunderingSteppes + Quest Giver: Jacques + Preceded by: Watch your step in The Thundering Steppes, Part I + Followed by: Watch your step in The Thundering Steppes, Part III +--]] + +function Init(Quest) + AddQuestStepChat(Quest, 1, "I need to take this letter to Tish Tickers who resides in a watch tower in The Thundering Steppes.", 1, "Jacques has given me more mail to deliver, this time to a gnome named Tish Tickers by the third guard tower.", 11, 2490042) + AddQuestStepCompleteAction(Quest, 1, "Step1Complete") +end + +function Step1Complete(Quest, QuestGiver, Player) + UpdateQuestTaskGroupDescription(Quest, 1, "I have delivered the mail to Tish Tickers, but she will not give me the return mail until I have helped her.") + + AddQuestStep(Quest, 2, "To get the return mail from Tish I need to help her out.", 1, 100, "Tish can't give me the return mail until I help her gather the things she needs.", 11) + AddQuestStepCompleteAction(Quest, 2, "Step2Complete") +end + +function Step2Complete(Quest, QuestGiver, Player) + UpdateQuestTaskGroupDescription(Quest, 2, "I helped Tish gather the things she needed.") + + AddQuestStepChat(Quest, 3, "Now that I have the return mail from Tish, I should take it to Jacques in The Thundering Steppes.", 1, "Now that I have the return mail from Tish Tickers, I need to take it to Jacques.", 11, 2490212) + AddQuestStepCompleteAction(Quest, 3, "Step3Complete") +end + +function Step3Complete(Quest, QuestGiver, Player) + GiveQuestReward(Quest, Player) +end + +function Accepted(Quest, QuestGiver, Player) + FaceTarget(NPC, Player) + conversation = CreateConversation() + + AddConversationOption(conversation, "Okay.") + StartConversation(conversation, NPC, Player, "That's the spirit! Here, take this letter to a gnome named Tish Tickers at guard tower three. She's being harassed by a collection agency again. They sound pretty serious now. I can't wait to see what her excuse for not paying will be this time. Come back when you have her reply.") +end + +function Deleted(Quest, QuestGiver, Player) +end + +function Declined(Quest, QuestGiver, Player) +end + +function Reload(Quest, QuestGiver, Player, Step) + if Step == 1 then + Step1Complete(Quest, QuestGiver, Player) + elseif Step == 2 then + Step2Complete(Quest, QuestGiver, Player) + elseif Step == 3 then + Step3Complete(Quest, QuestGiver, Player) + end +end diff --git a/server/Quests/ThunderingSteppes/WatchyourstepinTheThunderingSteppesPartIII.lua b/server/Quests/ThunderingSteppes/WatchyourstepinTheThunderingSteppesPartIII.lua new file mode 100644 index 000000000..92aab8ad5 --- /dev/null +++ b/server/Quests/ThunderingSteppes/WatchyourstepinTheThunderingSteppesPartIII.lua @@ -0,0 +1,82 @@ +--[[ + Script Name : Quests/ThunderingSteppes/WatchyourstepinTheThunderingSteppesPartIII.lua + Script Author : Jabantiz + Script Date : 2014.07.05 10:07:29 + Script Purpose : + + Zone : ThunderingSteppes + Quest Giver: Jacques (2490212) + Preceded by: Watch your step in The Thundering Steppes, Part II + Followed by: Watch your step in The Thundering Steppes, Part IV +--]] + +function Init(Quest) + AddQuestStepLocation(Quest, 1, "I need to take this package to Brianna in Thundermist village. It looks to be important.", 30, "I have a package to take to Brianna in Thundermist village.", 11, 582.28, 2.81, -168.36) + AddQuestStepCompleteAction(Quest, 1, "Step1Complete") +end + +function Step1Complete(Quest, QuestGiver, Player) + local wolf1 = SpawnMob(GetZone(Player), 2490679, 0, 586.24, 1.23, -158.22, 88.04) + local wolf2 = SpawnMob(GetZone(Player), 2490679, 0, 585.60, 1.43, -163.06, 117.90) + + if wolf1 ~= nil then + Attack(wolf1, Player) + end + + if wolf2 ~= nil then + Attack(wolf2, Player) + end + + Step1CompleteUpdate(Quest, QuestGiver, Player) +end + +function Step1CompleteUpdate(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 1, "I was chased by dogs and dropped the package on the way to Thundermist village.") + + AddQuestStepChat(Quest, 2, "I dropped the package and some of the items inside fell out. At least I made it away from those dogs. I should take what's left to Brianna.", 1, "I have a package to take to Brianna in Thundermist village.", 11, 2490170) + AddQuestStepCompleteAction(Quest, 2, "Step2Complete") +end + +function Step2Complete(Quest, QuestGiver, Player) + UpdateQuestTaskGroupDescription(Quest, 1, "I have taken the Package to Brianna In Thundermist village.") + + AddQuestStep(Quest, 3, "I still need to get Brianna her replacement items so I can get the delivery receipt from her and take it back to Jacques.", 1, 100, "Brianna will not give me my delivery receipt until I have replaced the items that were in the package.", 11) + AddQuestStepCompleteAction(Quest, 3, "Step3Complete") +end + +function Step3Complete(Quest, QuestGiver, Player) + UpdateQuestTaskGroupDescription(Quest, 2, "I finally got all the items to Brianna.") + + AddQuestStepChat(Quest, 4, "Now that I have the receipt from Brianna, I need to take it to Jacques.", 1, "I should return to Jacques and get this receipt from Brianna to him. I hope he will compensate me for those Tin Long Swords.", 11, 2490212) + AddQuestStepCompleteAction(Quest, 4, "Step4Complete") +end + +function Step4Complete(Quest, QuestGiver, Player) + GiveQuestReward(Quest, Player) +end + +function Accepted(Quest, QuestGiver, Player) + FaceTarget(QuestGiver, Player) + conversation = CreateConversation() + + AddConversationOption(conversation, "Okay.") + StartConversation(conversation, QuestGiver, Player, "This delivery is for Brianna in Thundermist Village. Since we're delivering a package this time, you'll need to get her to sign a receipt for it before you come back.") +end + +function Deleted(Quest, QuestGiver, Player) +end + +function Declined(Quest, QuestGiver, Player) +end + +function Reload(Quest, QuestGiver, Player, Step) + if Step == 1 then + Step1CompleteUpdate(Quest, QuestGiver, Player) + elseif Step == 2 then + Step2Complete(Quest, QuestGiver, Player) + elseif Step == 3 then + Step3Complete(Quest, QuestGiver, Player) + elseif Step == 4 then + Step4Complete(Quest, QuestGiver, Player) + end +end \ No newline at end of file diff --git a/server/Quests/ThunderingSteppes/WatchyourstepinTheThunderingSteppesPartIV.lua b/server/Quests/ThunderingSteppes/WatchyourstepinTheThunderingSteppesPartIV.lua new file mode 100644 index 000000000..5b7079982 --- /dev/null +++ b/server/Quests/ThunderingSteppes/WatchyourstepinTheThunderingSteppesPartIV.lua @@ -0,0 +1,40 @@ +--[[ + Script Name : Quests/ThunderingSteppes/WatchyourstepinTheThunderingSteppesPartIV.lua + Script Author : Jabantiz + Script Date : 2014.07.05 10:07:48 + Script Purpose : + + Zone : ThunderingSteppes + Quest Giver: Jacques (2490212) + Preceded by: Watch your step in The Thundering Steppes Part IV + Followed by: +--]] + +function Init(Quest) + AddQuestStep(Quest, 1, "I am to deliver the mail to Deputy Nettlebrine in The Enchanted Lands.", 1, "My mail delivery job is about over, and my final task is to deliver a letter to Deputy Nettlebrine in The Enchanted Lands.", 11) + AddQuestStepCompleteAction(Quest, 1, "Step1Complete") +end + +function Step1Complete(Quest, QuestGiver, Player) + GiveQuestReward(Quest, Player) +end + +function Accepted(Quest, QuestGiver, Player) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "Ok, I will do it for you then.") + StartConversation(conversation, NPC, Spawn, "This letter needs to go out to Deputy Nettlebrine in The Enchanted Lands. I would take it myself, but after my last trip on a boat I think its best that I don't.") +end + +function Deleted(Quest, QuestGiver, Player) +end + +function Declined(Quest, QuestGiver, Player) +end + +function Reload(Quest, QuestGiver, Player, Step) + if Step == 1 then + Step1Complete(Quest, QuestGiver, Player) + end +end \ No newline at end of file diff --git a/server/Quests/ThunderingSteppes/history_of_the_ayrdal_part_ii.lua b/server/Quests/ThunderingSteppes/history_of_the_ayrdal_part_ii.lua new file mode 100644 index 000000000..b445a8c11 --- /dev/null +++ b/server/Quests/ThunderingSteppes/history_of_the_ayrdal_part_ii.lua @@ -0,0 +1,93 @@ +--[[ + Script Name : Quests/ThunderingSteppes/history_of_the_ayrdal_part_ii.lua + Script Author : Ememjr + Script Date : 2019.03.25 05:03:34 + Script Purpose : + + Zone : ThunderingSteppes + Quest Giver: + Preceded by: None + Followed by: +--]] + +function Init(Quest) + AddQuestStepLocation(Quest, 1, "I need to visit The Grave Pool.", 10, "I must see The Grave Pool in the Thundering Steppes.", 11, -39, -18, 862) + AddQuestStepCompleteAction(Quest, 1, "Step1Complete") +end + +function Accepted(Quest, QuestGiver, Player) + -- Add dialog here for when the quest is accepted +end + +function Declined(Quest, QuestGiver, Player) + -- Add dialog here for when the quest is declined +end + +function Deleted(Quest, QuestGiver, Player) + -- Remove any quest specific items here when the quest is deleted +end + +function Step1Complete(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 1, "I have seen The Grave Pool.") + UpdateQuestTaskGroupDescription(Quest, 1, "I have seen The Grave Pool.") + + AddQuestStep(Quest, 2, "I should read the book.", 1, 100, "I should read the book now that I have a new page.", 2180) + AddQuestStepCompleteAction(Quest, 2, "Step2Complete") +end + +function Step2Complete(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 2, "I have read the book.") + UpdateQuestTaskGroupDescription(Quest, 2, "I have read the book.") + + AddQuestStepLocation(Quest, 3, "I need to visit Coldwind Point.", 10, "I need to visit Coldwind Point in Antonica.", 11, 353, -10, 803) + AddQuestStepCompleteAction(Quest, 3, "Step3Complete") +end + +function Step3Complete(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 3, "I have seen Coldwind Point.") + UpdateQuestTaskGroupDescription(Quest, 3, "I have seen Coldwind Point.") + + AddQuestStep(Quest, 4, "I should read the book.", 1, 100, "I should read the book now that I have a new page.", 2180) + AddQuestStepCompleteAction(Quest, 4, "Step4Complete") +end + +function Step4Complete(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 4, "I have read the book.") + UpdateQuestTaskGroupDescription(Quest, 4, "I have read the book.") + + AddQuestStepLocation(Quest, 5, "I need to visit The Last Stand.", 1, "I need to see The Last Stand in the Thundering Steppes.", 11, -377, 5, 761) + AddQuestStepCompleteAction(Quest, 5, "Step5Complete") +end + +function Step5Complete(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 5, "I have seen The Last Stand.") + UpdateQuestTaskGroupDescription(Quest, 5, "I have seen The Last Stand.") + + AddQuestStep(Quest, 6, "I should read the book.", 1, 100, "I should read the book now that I have a new page.", 2180) + AddQuestStepCompleteAction(Quest, 6, "QuestComplete") +end + +function QuestComplete(Quest, QuestGiver, Player) + -- The following UpdateQuestStepDescription and UpdateTaskGroupDescription are not needed, parser adds them for completion in case stuff needs to be moved around + UpdateQuestStepDescription(Quest, 6, "I have read the book.") + UpdateQuestTaskGroupDescription(Quest, 6, "I have read the book.") + + UpdateQuestDescription(Quest, "I have visited several sites and pondered their meaning, reading more of this tome along the way. Soon I shall have enough experience to consider Part Three.") + GiveQuestReward(Quest, Player) +end + +function Reload(Quest, QuestGiver, Player, Step) + if Step == 1 then + Step1Complete(Quest, QuestGiver, Player) + elseif Step == 2 then + Step2Complete(Quest, QuestGiver, Player) + elseif Step == 3 then + Step3Complete(Quest, QuestGiver, Player) + elseif Step == 4 then + Step4Complete(Quest, QuestGiver, Player) + elseif Step == 5 then + Step5Complete(Quest, QuestGiver, Player) + elseif Step == 6 then + QuestComplete(Quest, QuestGiver, Player) + end +end diff --git a/server/Quests/ThunderingSteppes/recycling_the_old-fashioned_way.lua b/server/Quests/ThunderingSteppes/recycling_the_old-fashioned_way.lua new file mode 100644 index 000000000..6ed99af5b --- /dev/null +++ b/server/Quests/ThunderingSteppes/recycling_the_old-fashioned_way.lua @@ -0,0 +1,62 @@ +--[[ + Script Name : Quests/ThunderingSteppes/recycling_the_old-fashioned_way.lua + Script Author : Zcoretri + Script Date : 2014.07.14 07:07:41 + Script Purpose : + + Zone : ThunderingSteppes + Quest Giver: + Preceded by: None + Followed by: +--]] + +function Init(Quest) + SetQuestFeatherColor(Quest, 1) + SetQuestRepeatable(Quest) + AddQuestStepKill(Quest, 1, "Get five young antelope bones in the Thundering Steppes.", 5, 100, "Get various bones for Grenn's fertilizer mix.", 418, 2490047) + AddQuestStepCompleteAction(Quest, 1, "Step1Complete") +end + +function Step1Complete(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 1, "Got five antelope bones.") + UpdateQuestTaskGroupDescription(Quest, 1, "I obtained all the bones necessary") + AddQuestStepChat(Quest, 2, "I need to speak with Grenn Stiles.", 1, "Take the bones back to Grenn in the Thundering Steppes.", 11, 2490174) + AddQuestStepKill(Quest, 2, "Get five highland lioness bones in the Thundering Steppes.", 5, 100, "Get various bones for Grenn's fertilizer mix.", 322, 2490043) + AddQuestStepCompleteAction(Quest, 2, "Step2Complete") +end +function Step2Complete(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 2, "Got five highland lioness bones.") + UpdateQuestTaskGroupDescription(Quest, 2, "I obtained all the bones necessary") + AddQuestStepChat(Quest, 3, "I need to speak with Grenn Stiles.", 1, "Take the bones back to Grenn in the Thundering Steppes.", 11, 2490174) + AddQuestStepKill(Quest, 3, "Get five entrancing siren bones in the Thundering Steppes.", 5, 100, "Get various bones for Grenn's fertilizer mix.", 322, 2490245) + AddQuestStepCompleteAction(Quest, 3, "Step3Complete") +end +function Step3Complete(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 3, "Got five entrancing siren bones.") + UpdateQuestTaskGroupDescription(Quest, 3, "I obtained all the bones necessary") + GiveQuestReward(Quest, Player) +end + +function Accepted(Quest, QuestGiver, Player) + conversation = CreateConversation() + + AddConversationOption(conversation, "All right, I'll be back") + StartConversation(conversation, QuestGiver, Player, "Oh, the price is right, my friend! It's free! And I'll even pay you for your work! I need a variety of bones: some antelope, huntress and siren bones for a sort of 'surf and turf' fertilizer. The Steppes abound with these creatures. Think of this as recycling. We're helping the environment, eh?") +end + +function Deleted(Quest, QuestGiver, Player) +end + +function Declined(Quest, QuestGiver, Player) +end + +function Reload(Quest, QuestGiver, Player, Step) + if Step == 1 then + Step1Complete(Quest, QuestGiver, Player) + elseif Step == 2 then + Step2Complete(Quest, QuestGiver, Player) + elseif Step == 3 then + Step3Complete(Quest, QuestGiver, Player) + end +end + diff --git a/server/Quests/TimorousDeep/a_reverse_supply_run.lua b/server/Quests/TimorousDeep/a_reverse_supply_run.lua new file mode 100644 index 000000000..4e7ede448 --- /dev/null +++ b/server/Quests/TimorousDeep/a_reverse_supply_run.lua @@ -0,0 +1,51 @@ +--[[ + Script Name : Quests/TimorousDeep/a_reverse_supply_run.lua + Script Purpose : Handles the quest, "A Reverse Supply Run" + Script Author : Scatman + Script Date : 2009.03.10 + + Zone : Timorous Deep + Quest Giver: Tanzikla Hir'Ki + Preceded by: None + Followed by: Stealing Their Steel (stealing_their_steel.lua) +--]] + + +function Init(Quest) + + + AddQuestStepSpell(Quest, 1, "I need to destroy the Haoaeran supplies.", 5, 100, ".", 611, 5019) + AddQuestStepCompleteAction(Quest, 1, "Step1_Complete_DestroyedSupplies") + +end + +function Accepted(Quest, QuestGiver, Player) + FaceTarget(QuestGiver, Player) + conversation = CreateConversation() + + PlayFlavor(QuestGiver, "voiceover/english/rok_questvo/tanzikla_hir_ki/_exp04/exp04_rgn_timorous_deep/chrykori_tie/hirki/hirki002.mp3", "", "", 610788422, 391234971, Player) + AddConversationOption(conversation, "Ok.") + StartConversation(conversation, QuestGiver, Player, "Return to me when this is done.") +end + +function Declined(Quest, QuestGiver, Player) +end + +function Step1_Complete_DestroyedSupplies(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 1, "I have destroyed the Haoaeran supplies.") + + AddQuestStepChat(Quest, 2, "I need to return to Tanzikla Hir'Ki.", 1, ".", 0, 2630611) + AddQuestStepCompleteAction(Quest, 2, "Quest_Complete") +end + +function Quest_Complete(Quest, QuestGiver, Player) + RemoveItem(Spawn, 2931) + UpdateQuestDescription(Quest, "I've destroyed the Haoaeran caches.") + GiveQuestReward(Quest, Player) +end + +function Reload(Quest, QusetGiver, Player, Step) + if Step == 1 then + Step1_Complete_DestroyedSupplies(Quest, QuestGiver, Player) + end +end diff --git a/server/Quests/TimorousDeep/bigger_fish_to_fry.lua b/server/Quests/TimorousDeep/bigger_fish_to_fry.lua new file mode 100644 index 000000000..23a914622 --- /dev/null +++ b/server/Quests/TimorousDeep/bigger_fish_to_fry.lua @@ -0,0 +1,58 @@ +--[[ + Script Name : Quests/TimorousDeep/bigger_fish_to_fry.lua + Script Purpose : Handles the quest, "Bigger Fish to Fry" + Script Author : Scatman + Script Date : 2009.02.06 + + Zone : Timorous Deep + Quest Giver: Citizen Niba'Ouz + Preceded by: Fish of the Chrykori Island (fish_of_the_chrykori_island.lua) + Followed by: None +--]] + + +function Init(Quest) + -- Barnacled Scepter + -- Fish-wrangler's Grips + -- Poacher's Talon + -- Sandstorm Staff + -- Saltspray Slicer + -- Sharkblade + + + -- bull saltfin + AddQuestStepObtainItem(Quest, 1, "Niba'Ouz wants me to try to fish up a bull saltfin.", 1, 100, ".", 2540, 3515) + + AddQuestStepCompleteAction(Quest, 1, "step1_complete_gotSaltfin") + +end + +function Accepted(Quest, QuestGiver, Player) + FaceTarget(QuestGiver, Player) + conversation = CreateConversation() + + PlayFlavor(QuestGiver, "voiceover/english/rok_questvo/citizen_niba_ouz/_exp04/exp04_rgn_timorous_deep/chrykori_tie/nibaouz/nibaouz006.mp3", "", "", 3393303954, 1028332139, Player) + AddConversationOption(conversation, "I will be back.") + StartConversation(conversation, QuestGiver, Player, "I appreciate it! Return to me when you find one.") +end + +function Declined(Quest, QuestGiver, Player) +end + +function step1_complete_gotSaltfin(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 1, "I have fished up a bull saltfin.") + + AddQuestStepChat(Quest, 2, "I need to return to Citizen Niba'Ouz.", 1, ".", 2540, 2630024) + AddQuestStepCompleteAction(Quest, 2, "quest_complete") +end + +function quest_complete(Quest, QuestGiver, Player) + UpdateQuestDescription(Quest, "I have brought a bull saltfin to Citizen Niba'Ouz.") + GiveQuestReward(Quest, Player) +end + +function Reload(Quest, QuestGiver, Player, Step) + if Step == 1 then + step1_complete_gotSaltfin(Quest, QuestGiver, Player, Step) + end +end diff --git a/server/Quests/TimorousDeep/chrykori_relics.lua b/server/Quests/TimorousDeep/chrykori_relics.lua new file mode 100644 index 000000000..92e87700d --- /dev/null +++ b/server/Quests/TimorousDeep/chrykori_relics.lua @@ -0,0 +1,53 @@ +--[[ + Script Name : Quests/TimorousDeep/chrykori_relics.lua + Script Purpose : Handles the quest, "Chrykori Relics" + Script Author : Scatman + Script Date : 2009.02.07 + + Zone : Timorous Deep + Quest Giver: Civ-Parser Di'Xin + Preceded by: None + Followed by: The Ends Justify the Means (the_ends_justify_the_means.lua) +--]] + + +function Init(Quest) + + + -- unearthed relic + AddQuestStepObtainItem(Quest, 1, "I need some unearthed relics from the shore near Chrykori Village.", 6, 100, ".", 371, 10523) + + AddQuestStepCompleteAction(Quest, 1, "step1_complete_gotRelics") + +end + +function Accepted(Quest, QuestGiver, Player) + FaceTarget(QuestGiver, Player) + conversation = CreateConversation() + + PlayFlavor(QuestGiver, "voiceover/english/rok_questvo/civ-parser_di_xin/_exp04/exp04_rgn_timorous_deep/chrykori_tie/dixin/dixin004.mp3", "", "", 1900559270, 3494700386, Player) + AddConversationOption(conversation, "I will.") + StartConversation(conversation, QuestGiver, Player, "I am glad to hear it. I am sure you can find the relics anywhere on the shore near Chrykori Village. Find some and bring them back to me, please.") +end + +function Declined(Quest, QuestGiver, Player) +end + +function step1_complete_gotRelics(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 1, "I have obtained the relics.") + + AddQuestStepChat(Quest, 2, "I need to bring these relics back to Civ-Parser Di'Xin.", 1, ".", 371, 2630045) + AddQuestStepCompleteAction(Quest, 2, "quest_complete") +end + +function quest_complete(Quest, QuestGiver, Player) + -- remove 'unearthed relic' + UpdateQuestDescription(Quest, "I have brought the artifacts I dug up to Civ-Parser Di'Xin.") + GiveQuestReward(Quest, Player) +end + +function Reload(Quest, QuestGiver, Player, Step) + if Step == 1 then + step1_complete_gotRelics(Quest, QuestGiver, Player) + end +end diff --git a/server/Quests/TimorousDeep/curious_ore.lua b/server/Quests/TimorousDeep/curious_ore.lua new file mode 100644 index 000000000..f0e08b989 --- /dev/null +++ b/server/Quests/TimorousDeep/curious_ore.lua @@ -0,0 +1,53 @@ +--[[ + Script Name : Quests/TimorousDeep/curious_ore.lua + Script Purpose : Handles the quest, "Curious Ore" + Script Author : Scatman + Script Date : 2009.02.06 + + Zone : Timorous Deep + Quest Giver: Tykor Gi'Lok + Preceded by: Poaching the Poachers (poaching_the_poachers.lua) + Followed by: Report to the Primary (report_to_the_primary.lua) +--]] + + +function Init(Quest) + -- Reinforced Miners Sack + + + -- curious ore + AddQuestStepObtainItem(Quest, 1, "I need some samples of the ore the Haoaerans are mining to the west.", 3, 100, ".", 1086, 4401) + + AddQuestStepCompleteAction(Quest, 1, "step1_complete_gotOre") + +end + +function Accepted(Quest, QuestGiver, Player) + FaceTarget(QuestGiver, Player) + conversation = CreateConversation() + + PlayFlavor(QuestGiver, "voiceover/english/rok_questvo/tykor_gi_lok/_exp04/exp04_rgn_timorous_deep/chrykori_tie/gilok/gilok004.mp3", "", "", 2401252534, 3431113694, Player) + AddConversationOption(conversation, "I will return with the ore.") + StartConversation(conversation, QuestGiver, Player, "Good. Some think the spirocs are just pretty birds with bad attitudes, but I think differently. They're up to something, I know it.") +end + +function Declined(Quest, QuestGiver, Player) +end + +function step1_complete_gotOre(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 1, "I have the ore samples.") + + AddQuestStepChat(Quest, 2, "I need to bring these ore samples back to Tykor Gi'Lok.", 1, ".", 1086, 2630018) + AddQuestStepCompleteAction(Quest, 2, "quest_complete") +end + +function quest_complete(Quest, QuestGiver, Player) + UpdateQuestDescription(Quest, "I have brought the ore samples to Tykor Gi'Lok.") + GiveQuestReward(Quest, Player) +end + +function Reload(Quest, QuestGiver, Player, Step) + if Step == 1 then + step1_complete_gotOre(Quest, QuestGiver, Player) + end +end diff --git a/server/Quests/TimorousDeep/decoder_glyph.lua b/server/Quests/TimorousDeep/decoder_glyph.lua new file mode 100644 index 000000000..5d8432c7e --- /dev/null +++ b/server/Quests/TimorousDeep/decoder_glyph.lua @@ -0,0 +1,54 @@ +--[[ + Script Name : Quests/TimorousDeep/decoder_glyph.lua + Script Purpose : Handles the quest, "Decoder Glyph" + Script Author : Scatman + Script Date : 2009.02.27 + + Zone : Timorous Deep + Quest Giver: Arozik Sky'Ki + Preceded by: Haoaeran Orders (haoaeran_orders.lua) + Followed by: War (war.lua) +--]] + + +function Init(Quest) + -- Channeler's Belt + -- Pyrrin Amulet + -- Ritualist's Mantle + -- Raptor-scaled Cowl + + + AddQuestStepKill(Quest, 1, "I need a decoder glyph from a Haoaeran turf-hunter.", 1, 100, ".", 373, 2630077) + AddQuestStepCompleteAction(Quest, 1, "step1_complete_gotGlyph") + +end + +function Accepted(Quest, QuestGiver, Player) + FaceTarget(QuestGiver, Player) + conversation = CreateConversation() + + PlayFlavor(QuestGiver, "voiceover/english/rok_questvo/arozik_sky_ki/_exp04/exp04_rgn_timorous_deep/chrykori_tie/skyki/skyki017.mp3", "", "", 709686282, 1141832013, Player) + AddConversationOption(conversation, "I will be swift.") + StartConversation(conversation, QuestGiver, Player, "I await your return.") +end + +function Declined(Quest, QuestGiver, Player) +end + +function step1_complete_gotGlyph(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 1, "I have the decoder glyph.") + + AddQuestStepChat(Quest, 2, "I need to bring the glyph to Secondary Arozik Sky'Ki.", 1, ".", 373, 2630081) + AddQuestStepCompleteAction(Quest, 2, "quest_complete") +end + +function quest_complete(Quest, QuestGiver, Player) + UpdateQuestDescription(Quest, "I obtained a Haoaeran decoder glyph and brought it back to Secondary Arozik Sky'Ki.") + GiveQuestReward(Quest, Player) +end + +function Reload(Quest, QuestGiver, Player, Step) + if Step == 1 then + step1_complete_gotGlyph(Quest, QuestGiver, Player) + end +end diff --git a/server/Quests/TimorousDeep/delivery_to_a_veteran.lua b/server/Quests/TimorousDeep/delivery_to_a_veteran.lua new file mode 100644 index 000000000..b0305e513 --- /dev/null +++ b/server/Quests/TimorousDeep/delivery_to_a_veteran.lua @@ -0,0 +1,40 @@ +--[[ + Script Name : Quests/TimorousDeep/delivery_to_a_veteran.lua + Script Purpose : Handles the quest, "Delivery to a Veteran" + Script Author : Scatman + Script Date : 2009.02.06 + + Zone : Timorous Deep + Quest Giver: Taroche Dry'Zok + Preceded by: Stuffed Gorger Claws (stuffed_gorger_claws.lua) + Followed by: None +--]] + + +function Init(Quest) + + + AddQuestStepChat(Quest, 1, "I need to deliver this bait to Citizen Niba'Ouz, fishing just to the east.", 1, ".", 78, 2630024) + AddQuestStepCompleteAction(Quest, 1, "quest_complete") + +end + +function Accepted(Quest, QuestGiver, Player) + FaceTarget(QuestGiver, Player) + conversation = CreateConversation() + + PlayFlavor(QuestGiver, "voiceover/english/rok_questvo/taroche_dry_zok/_exp04/exp04_rgn_timorous_deep/chrykori_tie/dryzok/dryzok004.mp3", "", "", 3720573202, 68445257, Player) + AddConversationOption(conversation, "You're welcome.") + StartConversation(conversation, QuestGiver, Player, "Thank you. I appreciate it, and I am certain he will as well.") +end + +function Declined(Quest, QuestGiver, Player) +end + +function quest_complete(Quest, QuestGiver, Player) + UpdateQuestDescription(Quest, "I have delivered the special bait to Citizen Niba'Ouz.") + GiveQuestReward(Quest, Player) +end + +function Reload(Quest, QuestGiver, Player, Step) +end diff --git a/server/Quests/TimorousDeep/disrupting_haoaeran_rituals.lua b/server/Quests/TimorousDeep/disrupting_haoaeran_rituals.lua new file mode 100644 index 000000000..6bfc4a1e8 --- /dev/null +++ b/server/Quests/TimorousDeep/disrupting_haoaeran_rituals.lua @@ -0,0 +1,53 @@ +--[[ + Script Name : Quests/TimorousDeep/disrupting_haoaeran_rituals.lua + Script Purpose : Handles the quest, "Disrupting Haoaeran Rituals" + Script Author : Scatman + Script Date : 2009.02.06 + + Zone : Timorous Deep + Quest Giver: Primary Conzuk Zum'Ha + Preceded by: Disrupting Haoaeran Studies (disrupting_haoaeran_studies.lua) + Followed by: Further Assistance to Chrykori Island (further_assistance_to_chrykori_island.lua) +--]] + + +function Init(Quest) + -- Earring of Zum'Ha + -- Ritualist's Skullcap + -- Timeworn Necklace + + + AddQuestStepKill(Quest, 1, "I need to interrupt the Haoaeran rituals being performed south of the Timeworn Pools.", 1, 100, ".", 611, 2630090) + AddQuestStepCompleteAction(Quest, 1, "step1_complete_interruptedRituals") + +end + +function Accepted(Quest, QuestGiver, Player) + FaceTarget(QuestGiver, Player) + conversation = CreateConversation() + + PlayFlavor(Player, "voiceover/english/rok_questvo/primary_conzuk_zum_ha/_exp04/exp04_rgn_timorous_deep/chrykori_tie/zumha/zumha005.mp3", "", "", 3636164534, 195709571, Player) + AddConversationOption(conversation, "I will be as swift as I can.") + StartConversation(conversation, QuestGiver, Player, "And be swift about it! There's obviously far more to the spiroc than we had thought. The more " .. GetName(Spawn) .. ". we give the Haoaerans to experiment with artifacts of power, the more likely they are to turn this power against us -- effectively!") +end + +function Declined(Quest, QuestGiver, Player) +end + +function step1_complete_interruptedRituals(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 1, "I have slain the power infused Haoaeran.") + + AddQuestStepChat(Quest, 2, "I need to return to Primary Zum'Ha.", 1, ".", 0, 2630042) + AddQuestStepCompleteAction(Quest, 2, "quest_complete") +end + +function quest_complete(Quest, QuestGiver, Player) + UpdateQuestDescription(Quest, "I have stopped the strange ritual.") + GiveQuestReward(Quest, Player) +end + +function Reload(Quest, QuestGiver, Player, Step) + if Step == 1 then + step1_complete_interruptedRituals(Quest, QuestGiver, Player) + end +end diff --git a/server/Quests/TimorousDeep/disrupting_haoaeran_studies.lua b/server/Quests/TimorousDeep/disrupting_haoaeran_studies.lua new file mode 100644 index 000000000..ee609f01d --- /dev/null +++ b/server/Quests/TimorousDeep/disrupting_haoaeran_studies.lua @@ -0,0 +1,73 @@ +--[[ + Script Name : Quests/TimorousDeep/disrupting_haoaeran_studies.lua + Script Purpose : Handles the quest, "Disrupting Haoaeran Studies" + Script Author : Scatman + Script Date : 2009.02.06 + + Zone : Timorous Deep + Quest Giver: Primary Conzuk Zum'Ha + Preceded by: Report to the Primary (report_to_the_primary.lua) + Followed by: Disrupting Haoaeran Rituals (disrupting_haoaeran_rituals.lua) +--]] + + +function Init(Quest) + + + AddQuestStepKill(Quest, 1, "I need to kill the Haoaerans excavating the tunnel northwest across the sand.", 4, 100, "I need to travel to the cave to the west of Chrykori Village and kill the Haoaerans excavating the cave, and gather a sample of what they are digging up.", 611, 2630102, 2630103) + -- inscribed pottery + AddQuestStepObtainItem(Quest, 2, "I need a sample of whatever the Haoaerans are digging up.", 1, 100, "I need to travel to the cave to the west of Chrykori Village and kill the Haoaerans excavating the cave and gather a sample of what they are digging up.", 1085, 5836) + + AddQuestStepCompleteAction(Quest, 1, "step1_complete_killedBirds") + AddQuestStepCompleteAction(Quest, 2, "step2_complete_gotOre") + +end + +function Accepted(Quest, QuestGiver, Player) + FaceTarget(QuestGiver, Player) + conversation = CreateConversation() + + PlayFlavor(QuestGiver, "voiceover/english/rok_questvo/primary_conzuk_zum_ha/_exp04/exp04_rgn_timorous_deep/chrykori_tie/zumha/zumha002.mp3", "", "", 4256377624, 3387696567, Player) + AddConversationOption(conversation, "All right. I owe him no loyalty.") + StartConversation(conversation, QuestGiver, Player, "Then you will return to me as soon as you have found something. Oh, and we should leave Tykor out of this from here on out. He has done his part, but just in case his supposed incompetence has nothing to do with his griffon riding skills... let's leave this to those better qualified.") +end + +function Declined(Quest, QuestGiver, Player) +end + +function step1_complete_killedBirds(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 1, "I have slain the Haoaerans.") + + if QuestIsComplete(Player, 112) then + multiple_steps_complete(Quest, QuestGiver, Player) + end +end + +function step2_complete_gotOre(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 2, "I found some inscribed pottery.") + + if QuestIsComplete(Player, 112) then + multiple_steps_complete(Quest, QuestGiver, Player) + end +end + +function multiple_steps_complete(Quest, QuestGiver, Player) + UpdateQuestTaskGroupDescription(Quest, 1, "I have killed the Haoaerans and obtained a sample of what they're digging up.") + + AddQuestStepChat(Quest, 3, "I must speak with Primary Conzuk Zum'Ha in Chrykori Village.", 1, "I must show Primary Conzuk Zum'Ha in Chrykori Village these ore samples.", 0, 2630042) + AddQuestStepCompleteAction(Quest, 3, "quest_complete") +end + +function quest_complete(Quest, QuestGiver, Player) + -- remove 'inscribed pottery' + UpdateQuestDescription(Quest, "I have brought the inscribed pottery back to Primary Conzuk Zum'Ha.") + GiveQuestReward(Quest, Player) +end + +function Reload(Quest, QuestGiver, Player, Step) + if Step == 1 then + step1_complete_killedBirds(Quest, QuestGiver, Player) + elseif Step == 2 then + step2_complete_gotOre(Quest, QuestGiver, Player) + end +end diff --git a/server/Quests/TimorousDeep/dont_get_it_in_aroziks_eyes.lua b/server/Quests/TimorousDeep/dont_get_it_in_aroziks_eyes.lua new file mode 100644 index 000000000..3cff7566e --- /dev/null +++ b/server/Quests/TimorousDeep/dont_get_it_in_aroziks_eyes.lua @@ -0,0 +1,40 @@ +--[[ + Script Name : Quests/TimorousDeep/dont_get_it_in_aroziks_eyes.lua + Script Purpose : Handles the quest, "Don't Get It in Arozik's Eyes" + Script Author : Scatman + Script Date : 2009.02.22 + + Zone : Timorous Deep + Quest Giver: Tertiary Mak'Ki + Preceded by: Don't Get It in Arozik's Eyes (dont_get_it_in_aroziks_eyes.lua) + Followed by: None +--]] + + +function Init(Quest) + + + AddQuestStepChat(Quest, 1, "I need to give these acid glands to Secondary Arozik Sky'Ki. I can find him in Trythec Loft, south west of Chrykori Village.", 1, ".", 111, 2630081) + AddQuestStepCompleteAction(Quest, 1, "quest_complete") + +end + +function Accepted(Quest, QuestGiver, Player) + FaceTarget(QuestGiver, Player) + conversation = CreateConversation() + + PlayFlavor(QuestGiver, "voiceover/english/rok_questvo/tertiary_mak_ki/_exp04/exp04_rgn_timorous_deep/chrykori_tie/makki/makki004.mp3", "", "", 117800882, 151216823, Player) + AddConversationOption(conversation, "All right.") + StartConversation(conversation, QuestGiver, Player, "I'm sure he'll put these to good use. Thank you for your help. I think I will keep a few on hand to continue studying them for other potential applications.") +end + +function Declined(Quest, QuestGiver, Player) +end + +function quest_complete(Quest, QuestGiver, Player) + UpdateQuestDescription(Quest, "I have delivered the rustbeast acid to Secondary Arozik Sky'Ki.") + GiveQuestReward(Quest, Player) +end + +function Reload(Quest, QuestGiver, Player, Step) +end diff --git a/server/Quests/TimorousDeep/dont_get_it_in_your_eyes.lua b/server/Quests/TimorousDeep/dont_get_it_in_your_eyes.lua new file mode 100644 index 000000000..9f165c065 --- /dev/null +++ b/server/Quests/TimorousDeep/dont_get_it_in_your_eyes.lua @@ -0,0 +1,55 @@ +--[[ + Script Name : Quests/TimorousDeep/dont_get_it_in_your_eyes.lua + Script Purpose : Handles the quest, "Don't Get it in Your Eyes" + Script Author : Scatman + Script Date : 2009.02.22 + + Zone : Timorous Deep + Quest Giver: Tertiary Mak'Ki + Preceded by: None + Followed by: Don't Get It in Arozik's Eyes (dont_get_it_in_aroziks_eyes.lua) +--]] + + +function Init(Quest) + -- Acid-inscribed Ring + -- Empowered Belt Buckle + -- Geo-Parser's Sandals + -- Lightfoot Boots + -- Pridefeather Gloves + + + AddQuestStepKill(Quest, 1, "I need to collect some acid sacs from the crusty rustbeats in the Timeworn Pools to the far west.", 5, 100, ".", 111, 2630088) + AddQuestStepCompleteAction(Quest, 1, "step1_complete_gotSacs") + +end + +function Accepted(Quest, QuestGiver, Player) + FaceTarget(QuestGiver, Player) + conversation = CreateConversation() + + PlayFlavor(QuestGiver, "voiceover/english/rok_questvo/tertiary_mak_ki/_exp04/exp04_rgn_timorous_deep/chrykori_tie/makki/makki001.mp3", "", "", 493055833, 1386500229, Player) + AddConversationOption(conversation, "I will be back soon.") + StartConversation(conversation, QuestGiver, Player, "Could you? That would help me greatly.") +end + +function Declined(Quest, QuestGiver, Player) +end + +function step1_complete_gotSacs(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 1, "I have collected the acid sacs.") + + AddQuestStepChat(Quest, 2, "I need to bring these acid sacs back to Tertiary Mak'Ki.", 1, ".", 111, 2630044) + AddQuestStepCompleteAction(Quest, 2, "quest_complete") +end + +function quest_complete(Quest, QuestGiver, Player) + UpdateQuestDescription(Quest, "I have brought Tertiary Mak'Ki the sacs.") + GiveQuestReward(Quest, Player) +end + +function Reload(Quest, QuestGiver, Player, Step) + if Step == 1 then + step1_complete_gotSacs(Quest, QuestGiver, Player) + end +end diff --git a/server/Quests/TimorousDeep/fish_of_the_chrykori_island.lua b/server/Quests/TimorousDeep/fish_of_the_chrykori_island.lua new file mode 100644 index 000000000..5fb0cf07b --- /dev/null +++ b/server/Quests/TimorousDeep/fish_of_the_chrykori_island.lua @@ -0,0 +1,57 @@ +--[[ + Script Name : Quests/TimorousDeep/fish_of_the_chrykori_island.lua + Script Purpose : Handles the quest, "Fish of the Chrykori Island" + Script Author : Scatman + Script Date : 2009.02.06 + + Zone : Timorous Deep + Quest Giver: Citizen Niba'Ouz + Preceded by: None + Followed by: Bigger Fish to Fry (bigger_fish_to_fry.lua) +--]] + + +function Init(Quest) + + + -- Chrykori saltfin + AddQuestStepObtainItem(Quest, 1, "I need to fish up some Chrykori saltfin.", 3, 100, ".", 2540, 3726) + + AddQuestStepCompleteAction(Quest, 1, "step1_complete_gotSaltfin") + +end + +function Accepted(Quest, QuestGiver, Player) + FaceTarget(QuestGiver, Player) + conversation = CreateConversation() + + PlayFlavor(QuestGiver, "voiceover/english/rok_questvo/citizen_niba_ouz/_exp04/exp04_rgn_timorous_deep/chrykori_tie/nibaouz/nibaouz003.mp3", "", "", 3742615555, 2339583945, Player) + AddConversationOption(conversation, "Ok.") + StartConversation(conversation, QuestGiver, Player, "Great. You can find them all around this side of the island.") +end + +function Declined(Quest, QuestGiver, Player) +end + +function step1_complete_gotSaltfin(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 1, "I have fished up the saltfin.") + + AddQuestStepChat(Quest, 2, "I need to return to Citizen Niba'Ouz.", 1, ".", 2540, 2630024) + AddQuestStepCompleteAction(Quest, 2, "quest_complete") +end + +function quest_complete(Quest, QuestGiver, Player) + -- remove Chrykori saltfin + while HasItem(Player, 4363) do + RemoveItem(Player, 4363) + end + + UpdateQuestDescription(Quest, "I have brought the Chrykori saltfin to Citizen Niba'Ouz.") + GiveQuestReward(Quest, Player) +end + +function Reload(Quest, QuestGiver, Player, Step) + if Step == 1 then + step1_complete_gotSaltfin(Quest, QuestGiver, Player, Step) + end +end diff --git a/server/Quests/TimorousDeep/further_assistance_to_chrykori_island.lua b/server/Quests/TimorousDeep/further_assistance_to_chrykori_island.lua new file mode 100644 index 000000000..34e074628 --- /dev/null +++ b/server/Quests/TimorousDeep/further_assistance_to_chrykori_island.lua @@ -0,0 +1,41 @@ +--[[ + Script Name : Quests/TimorousDeep/further_assistance_to_chrykori_island.lua + Script Purpose : Handles the quest, "Further Assistance to Chrykori Island" + Script Author : Scatman + Script Date : 2009.02.06 + + Zone : Timorous Deep + Quest Giver: Primary Conzuk Zum'Ha + Preceded by: Disrupting Haoaeran Rituals (disrupting_haoaeran_rituals.lua) + Followed by: None +--]] + + +function Init(Quest) + + + + AddQuestStepChat(Quest, 1, "I need to report to Secondary Arozik Sky'Ki on the Trythec Loft to the southwest.", 1, ".", 0, 2630081) + AddQuestStepCompleteAction(Quest, 1, "quest_complete") + +end + +function Accepted(Quest, QuestGiver, Player) + FaceTarget(QuestGiver, Player) + conversation = CreateConversation() + + PlayFlavor(QuestGiver, "voiceover/english/rok_questvo/primary_conzuk_zum_ha/_exp04/exp04_rgn_timorous_deep/chrykori_tie/zumha/zumha008.mp3", "", "", 1945530557, 2152827601, Player) + AddConversationOption(conversation, "I will do as I can.") + StartConversation(conversation, QuestGiver, Player, "You are a fine soldier, obedient and skilled, and I am sure you will help him in whatever way you can. Correct?") +end + +function Declined(Quest, QuestGiver, Player) +end + +function quest_complete(Quest, QuestGiver, Player) + UpdateQuestDescription(Quest, "I have reported to Secondary Arozik Sky'Ki.") + GiveQuestReward(Quest, Player) +end + +function Reload(Quest, QuestGiver, Player, Step) +end diff --git a/server/Quests/TimorousDeep/haoaeran_orders.lua b/server/Quests/TimorousDeep/haoaeran_orders.lua new file mode 100644 index 000000000..6264e7862 --- /dev/null +++ b/server/Quests/TimorousDeep/haoaeran_orders.lua @@ -0,0 +1,50 @@ +--[[ + Script Name : Quests/TimorousDeep/haoaeran_orders.lua + Script Purpose : Handles the quest, "Haoaeran Orders" + Script Author : Scatman + Script Date : 2009.02.27 + + Zone : Timorous Deep + Quest Giver: Arozik Sky'Ki + Preceded by: Scout Scouting (scout_scouting.lua) + Followed by: Decoder Glyph (decoder_glyph.lua) +--]] + + +function Init(Quest) + + + AddQuestStepKill(Quest, 1, "I need Haoaeran orders from the spiroc to the south.", 1, 25, ".", 374, 2630074) + AddQuestStepCompleteAction(Quest, 1, "step1_complete_gotOrders") + +end + +function Accepted(Quest, QuestGiver, Player) + FaceTarget(QuestGiver, Player) + conversation = CreateConversation() + + PlayFlavor(QuestGiver, "voiceover/english/rok_questvo/arozik_sky_ki/_exp04/exp04_rgn_timorous_deep/chrykori_tie/skyki/skyki013.mp3", "", "", 248677146, 615720280, Player) + AddConversationOption(conversation, "You're welcome.") + StartConversation(conversation, QuestGiver, Player, "Thank you.") +end + +function Declined(Quest, QuestGiver, Player) +end + +function step1_complete_gotOrders(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 1, "I have the Haoaeran orders.") + + AddQuestStepChat(Quest, 2, "I need to bring these orders back to Secondary Arozik Sky'Ki.", 1, ".", 374, 2630081) + AddQuestStepCompleteAction(Quest, 2, "quest_complete") +end + +function quest_complete(Quest, QuestGiver, Player) + UpdateQuestDescription(Quest, "I obtained a set of Haoaeran orders and brought them to Secondary Sky'Ki.") + GiveQuestReward(Quest, Player) +end + +function Reload(Quest, QuestGiver, Player, Step) + if Step == 1 then + step1_complete_gotOrders(Quest, QuestGiver, Player) + end +end diff --git a/server/Quests/TimorousDeep/haoaeran_poisons.lua b/server/Quests/TimorousDeep/haoaeran_poisons.lua new file mode 100644 index 000000000..33647e951 --- /dev/null +++ b/server/Quests/TimorousDeep/haoaeran_poisons.lua @@ -0,0 +1,50 @@ +--[[ + Script Name : Quests/TimorousDeep/haoaeran_poisons.lua + Script Purpose : Handles the quest, "Haoaeran Poisons" + Script Author : Scatman + Script Date : 2009.02.27 + + Zone : Timorous Deep + Quest Giver: Arozik Sky'Ki + Preceded by: None + Followed by: Scout Scouting (scout_scouting.lua) +--]] + + +function Init(Quest) + + + AddQuestStepKill(Quest, 1, "I need poison glands from the skittering monitors on Trythec Loft.", 6, 100, ".", 336, 2630070) + AddQuestStepCompleteAction(Quest, 1, "step1_complete_gotGlands") + +end + +function Accepted(Quest, QuestGiver, Player) + FaceTarget(QuestGiver, Player) + conversation = CreateConversation() + + PlayFlavor(QuestGiver, "voiceover/english/rok_questvo/arozik_sky_ki/_exp04/exp04_rgn_timorous_deep/chrykori_tie/skyki/skyki003.mp3", "", "", 1707113595, 2002626119, Player) + AddConversationOption(conversation, "I will handle myself carefully.") + StartConversation(conversation, QuestGiver, Player, "Good. Careful handling the monitors and their sacs; remember, we don't have an antidote yet, and I do not need another invalid to care for. Return once you have enough for a thorough study.") +end + +function Declined(Quest, QuestGiver, Player) +end + +function step1_complete_gotGlands(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 1, "I have the poison glands.") + + AddQuestStepChat(Quest, 2, "I need to bring these poison glands to Secondary Arozik Sky'Ki.", 1, ".", 336, 2630081) + AddQuestStepCompleteAction(Quest, 2, "quest_complete") +end + +function quest_complete(Quest, QuestGiver, Player) + UpdateQuestDescription(Quest, "I have brought the poison glands of the skittering monitors back to Secondary Arozik Sky'Ki.") + GiveQuestReward(Quest, Player) +end + +function Reload(Quest, QuestGiver, Player, Step) + if Step == 1 then + step1_complete_gotGlands(Quest, QuestGiver, Player) + end +end diff --git a/server/Quests/TimorousDeep/hopefully_the_meat_isnt_timeworn.lua b/server/Quests/TimorousDeep/hopefully_the_meat_isnt_timeworn.lua new file mode 100644 index 000000000..95afbc29a --- /dev/null +++ b/server/Quests/TimorousDeep/hopefully_the_meat_isnt_timeworn.lua @@ -0,0 +1,50 @@ +--[[ + Script Name : Quests/TimorousDeep/hopefully_the_meat_isnt_timeworn.lua + Script Purpose : Handles the quest, "Hopefully the Meat Isn't Timeworn" + Script Author : Scatman + Script Date : 2009.02.10 + + Zone : Timorous Deep + Quest Giver: Varkori Riz'Lul + Preceded by: None + Followed by: Sandy Eggs (sandy_eggs.lua) +--]] + + +function Init(Quest) + + + AddQuestStepKill(Quest, 1, "I need some briny lizard meat from the lizards in the Timeworn Pools west of Chrykori Village.", 4, 100, ".", 139, 2630083) + AddQuestStepCompleteAction(Quest, 1, "step1_complete_killedLizards") + +end + +function Accepted(Quest, QuestGiver, Player) + FaceTarget(QuestGiver, Player) + conversation = CreateConversation() + + PlayFlavor(QuestGiver, "voiceover/english/rok_questvo/varkori_riz_lul/_exp04/exp04_rgn_timorous_deep/chrykori_tie/rizlul/rizlul001.mp3", "", "", 1972473001, 1216175625, Player) + AddConversationOption(conversation, "I will get the lizard meat.") + StartConversation(conversation, QuestGiver, Player, "Great, thank you. I'd send Taroche, but every time I try to send him out, he tells me he's perfecting his stuffed grit gorger claw recipe. Hmph! One meaningless soldier tells him they're the best thing he's ever tasted, and now Taroche just won't let it go. He seems to believe he's some sort of culinary genius, but I don't have the heart to tell him he was bred without taste buds.") +end + +function Declined(Quest, QuestGiver, Player) +end + +function step1_complete_killedLizards(Quest, QuestGiver, Player) + SetStepComplete(Quest, 1, "I have the lizard meat.") + + AddQuestStepChat(Quest, 2, "I need to bring this meat back to Varkori Riz'Lul in Chrykori Village.", 1, ".", 139, 2630043) + AddQuestStepCompleteAction(Quest, 2, "quest_complete") +end + +function quest_complete(Quest, QuestGiver, Player) + UpdateQuestDescription(Quest, "I have brought some briny lizard meat back to Varkori Riz'Lul.") + GiveQuestReward(Quest, Player) +end + +function Reload(Quest, QuestGiver, Player, Step) + if Step == 1 then + step1_complete_killedLizards(Quest, QuestGiver, Player) + end +end diff --git a/server/Quests/TimorousDeep/it_cant_all_be_interesting_work.lua b/server/Quests/TimorousDeep/it_cant_all_be_interesting_work.lua new file mode 100644 index 000000000..5c60c9e3d --- /dev/null +++ b/server/Quests/TimorousDeep/it_cant_all_be_interesting_work.lua @@ -0,0 +1,56 @@ +--[[ + Script Name : Quests/TimorousDeep/it_cant_all_be_interesting_work.lua + Script Purpose : Handles the quest, "It Can't ALL Be Interesting Work" + Script Author : Scatman + Script Date : 2009.02.27 + + Zone : Timorous Deep + Quest Giver: Bio-Parser Zo'Dok + Preceded by: The Filament Strangler (the_filament_strangler.lua) + Followed by: None +--]] + + +function Init(Quest) + -- Geo-Parser's Mantle + -- Raptor-scaled Shoulders + ---Steel Belt Buckle + -- Woven Trythec Band + + + -- filament encapsulated monitor + AddQuestStepObtainItem(Quest, 1, "I need to collect some Trythec roots.", 5, 100, ".", 197, 10162) + + AddQuestStepCompleteAction(Quest, 1, "step1_complete_gotRoots") + +end + +function Accepted(Quest, QuestGiver, Player) + FaceTarget(QuestGiver, Player) + conversation = CreateConversation() + + PlayFlavor(QuestGiver, "voiceover/english/rok_questvo/bio-parser_zo_dok/_exp04/exp04_rgn_timorous_deep/chrykori_tie/zodok/zodok005.mp3", "", "", 631994301, 82902587, Player) + AddConversationOption(conversation, "I will return with the roots.") + StartConversation(conversation, QuestGiver, Player, "Great. I was studying them before I ran across this carnivorous plant, and while it captured my interest, I've no desire to abandon them completely.") +end + +function Declined(Quest, QuestGiver, Player) +end + +function step1_complete_gotRoots(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 1, "I have collected the Trythec roots.") + + AddQuestStepChat(Quest, 2, "I need to bring these roots to Bio-Parser Zo'Dok.", 1, ".", 197, 2630080) + AddQuestStepCompleteAction(Quest, 2, "quest_complete") +end + +function quest_complete(Quest, QuestGiver, Player) + UpdateQuestDescription(Quest, "I have brought the Trythec roots back to Zo'Dok.") + GiveQuestReward(Quest, Player) +end + +function Reload(Quest, QuestGiver, Player, Step) + if Step == 1 then + step1_complete_gotRoots(Quest, QuestGiver, Player) + end +end diff --git a/server/Quests/TimorousDeep/killing_the_advance.lua b/server/Quests/TimorousDeep/killing_the_advance.lua new file mode 100644 index 000000000..449e5c14c --- /dev/null +++ b/server/Quests/TimorousDeep/killing_the_advance.lua @@ -0,0 +1,51 @@ +--[[ + Script Name : Quests/TimorousDeep/killing_the_advance.lua + Script Purpose : Handles the quest, "Killing the Advance" + Script Author : Scatman + Script Date : 2009.03.10 + + Zone : Timorous Deep + Quest Giver: Tertiary Dih'Ha + Preceded by: None + Followed by: Reinforcements of a Sort (reinforcements_of_a_sort.lua) +--]] + + +function Init(Quest) + + + AddQuestStepKill(Quest, 1, "I need to kill some Haoaeran advancers.", 7, 100, "", 611, 2630124) + AddQuestStepCompleteAction(Quest, 1, "Step1_Complete_KilledAdvancers") + +end + +function Accepted(Quest, QuestGiver, Player) + FaceTarget(QuestGiver, Player) + conversation = CreateConversation() + + PlayFlavor(QuestGiver, "voiceover/english/rok_questvo/tertiary_dih_ha/_exp04/exp04_rgn_timorous_deep/chrykori_tie/dihha/dihha003.mp3", "", "", 187701860, 3892292625, Player) + AddConversationOption(conversation, "Ok.") + StartConversation(conversation, QuestGiver, Player, "You had better. Return to me when it's done.") +end + +function Declined(Quest, QuestGiver, Player) +end + +function Step1_Complete_KilledAdvancers(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 1, "I have slain the Haoaeran advancers.") + + AddQuestStepChat(Quest, 2, "I need to return to Tertiary Dih'Ha.", 1, "", 0, 2630108) + AddQuestStepCompleteAction(Quest, 2, "Quest_Complete") +end + +function Quest_Complete(Quest, QuestGiver, Player) + RemoveItem(Spawn, 2931) + UpdateQuestDescription(Quest, "I have slain the Haoaeran advancers and returned to Tertiary Dih'Ha.") + GiveQuestReward(Quest, Player) +end + +function Reload(Quest, QusetGiver, Player, Step) + if Step == 1 then + Step1_Complete_KilledAdvancers(Quest, QuestGiver, Player) + end +end diff --git a/server/Quests/TimorousDeep/kuvis_vengeance.lua b/server/Quests/TimorousDeep/kuvis_vengeance.lua new file mode 100644 index 000000000..6506dda2e --- /dev/null +++ b/server/Quests/TimorousDeep/kuvis_vengeance.lua @@ -0,0 +1,57 @@ +--[[ + Script Name : Quests/TimorousDeep/kuvis_vengeance.lua + Script Purpose : Handles the quest, "Ku'Vi's Vengeance" + Script Author : Scatman + Script Date : 2009.02.27 + + Zone : Timorous Deep + Quest Giver: Craewem Ku'Vi + Preceded by: Pluck Them of Their Pride (pluck_them_of_their_pride.lua) + Followed by: None +--]] + + +function Init(Quest) + -- Geo-Parser's Robe + -- Layered Scale Breastplate + -- Pridefeather Headdress + -- Raptor-scaled Tunic + -- Ritualist's Tunic + -- Turf-hunter Tunic + -- Thulwun Defender's Breastplate + + + AddQuestStepKill(Quest, 1, "I need to kill Turf-Hunter Valcryn.", 1, 100, ".", 611, 2630087) + AddQuestStepCompleteAction(Quest, 1, "step1_complete_killedValcryn") + +end + +function Accepted(Quest, QuestGiver, Player) + FaceTarget(QuestGiver, Player) + conversation = CreateConversation() + + PlayFlavor(QuestGiver, "voiceover/english/rok_questvo/craewen_ku_vi/_exp04/exp04_rgn_timorous_deep/chrykori_tie/kuvi/kuvi005.mp3", "", "", 3507521870, 672894658, Player) + AddConversationOption(conversation, "I will return when I have his head.") + StartConversation(conversation, QuestGiver, Player, "Thank you. Seeing him fall will be a rare joy.") +end + +function Declined(Quest, QuestGiver, Player) +end + +function step1_complete_killedValcryn(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 1, "I have slain Turf-Hunter Valcryn.") + + AddQuestStepChat(Quest, 2, "I need to return to Craewen Ku'Vi.", 1, ".", 0, 2630073) + AddQuestStepCompleteAction(Quest, 2, "quest_complete") +end + +function quest_complete(Quest, QuestGiver, Player) + UpdateQuestDescription(Quest, "I have slain Turf-Hunter Valcryn and brought his head and pride feathers to Craewen Ku'Vi.") + GiveQuestReward(Quest, Player) +end + +function Reload(Quest, QuestGiver, Player, Step) + if Step == 1 then + step1_complete_killedValcryn(Quest, QuestGiver, Player) + end +end diff --git a/server/Quests/TimorousDeep/pluck_them_of_their_pride.lua b/server/Quests/TimorousDeep/pluck_them_of_their_pride.lua new file mode 100644 index 000000000..39c305a61 --- /dev/null +++ b/server/Quests/TimorousDeep/pluck_them_of_their_pride.lua @@ -0,0 +1,51 @@ +--[[ + Script Name : Quests/TimorousDeep/pluck_them_of_their_pride.lua + Script Purpose : Handles the quest, "Pluck Them of Their Pride" + Script Author : Scatman + Script Date : 2009.02.27 + + Zone : Timorous Deep + Quest Giver: Craewem Ku'Vi + Preceded by: None + Followed by: Ku'Vi's Vengeance (kuvis_vengeance.lua) +--]] + + +function Init(Quest) + + + AddQuestStepKill(Quest, 1, "I need some pride feathers from the Haoaeran turf-hunters to the south.", 10, 100, ".", 150, 2630077) + AddQuestStepCompleteAction(Quest, 1, "step1_complete_killedBirds") + +end + +function Accepted(Quest, QuestGiver, Player) + FaceTarget(QuestGiver, Player) + conversation = CreateConversation() + + PlayFlavor(QuestGiver, "voiceover/english/rok_questvo/craewen_ku_vi/_exp04/exp04_rgn_timorous_deep/chrykori_tie/kuvi/kuvi002.mp3", "", "", 324579697, 4108613532, Player) + AddConversationOption(conversation, "Very well.") + StartConversation(conversation, QuestGiver, Player, "Bring me their pride feathers, " .. GetName(Player) .. ". and leave their corpses to rot.") +end + +function Declined(Quest, QuestGiver, Player) +end + +function step1_complete_killedBirds(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 1, "I have collected the Haoaeran pride feathers.") + + AddQuestStepChat(Quest, 2, "I need to bring these feathers back to Craewen Ku'Vi.", 1, ".", 150, 2630073) + AddQuestStepCompleteAction(Quest, 2, "quest_complete") +end + +function quest_complete(Quest, QuestGiver, Player) + UpdateQuestDescription(Quest, "I have brought the pride feathers to Craewen Ku'Vi.") + GiveQuestReward(Quest, Player) +end + +function Reload(Quest, QuestGiver, Player, Step) + if Step == 1 then + step1_complete_killedBirds(Quest, QuestGiver, Player) + end +end + diff --git a/server/Quests/TimorousDeep/poaching_the_poachers.lua b/server/Quests/TimorousDeep/poaching_the_poachers.lua new file mode 100644 index 000000000..3a74a0f32 --- /dev/null +++ b/server/Quests/TimorousDeep/poaching_the_poachers.lua @@ -0,0 +1,55 @@ +--[[ + Script Name : Quests/TimorousDeep/poaching_the_poachers.lua + Script Purpose : Handles the quest, "Poaching the Poachers" + Script Author : Scatman + Script Date : 2009.02.06 + + Zone : Timorous Deep + Quest Giver: Tykor Gi'Lok + Preceded by: None + Followed by: Curious Ore (curious_ore.lua) +--]] + + +function Init(Quest) + -- Raptor-scaled Armguards + -- Scaled Armguards + -- Sunburnt Bracers + -- Empowered Earring + -- Geo-Parser's Sleeves + + + AddQuestStepKill(Quest, 1, "I need to kill four Haoaeran poachers.", 4, 100, ".", 611, 2630017) + AddQuestStepCompleteAction(Quest, 1, "step1_complete_killedPoachers") + +end + +function Accepted(Quest, QuestGiver, Player) + FaceTarget(QuestGiver, Player) + conversation = CreateConversation() + + PlayFlavor(QuestGiver, "voiceover/english/rok_questvo/tykor_gi_lok/_exp04/exp04_rgn_timorous_deep/chrykori_tie/gilok/gilok001.mp3", "", "", 611409560, 797692345, Player) + AddConversationOption(conversation, "As good as done.") + StartConversation(conversation, QuestGiver, Player, "No hesitation, I like it. You will kill the poachers, and they will know Gi'Lok knows how to delegate.") +end + +function Declined(Quest, QuestGiver, Player) +end + +function step1_complete_killedPoachers(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 1, "I have slain the Haoaeran poachers.") + + AddQuestStepChat(Quest, 2, "I need to return to Tykor Gi'Lok.", 1, ".", 0, 2630018) + AddQuestStepCompleteAction(Quest, 2, "quest_complete") +end + +function quest_complete(Quest, QuestGiver, Player) + UpdateQuestDescription(Quest, "I have slain the Haoaeran poachers for Tykor Gi'Lok.") + GiveQuestReward(Quest, Player) +end + +function Reload(Quest, QuestGiver, Player, Step) + if Step == 1 then + step1_complete_killedPoachers(Quest, QuestGiver, Player) + end +end diff --git a/server/Quests/TimorousDeep/prison_break.lua b/server/Quests/TimorousDeep/prison_break.lua new file mode 100644 index 000000000..a7f73e25d --- /dev/null +++ b/server/Quests/TimorousDeep/prison_break.lua @@ -0,0 +1,54 @@ +--[[ + Script Name : Quests/TimorousDeep/prison_break.lua + Script Purpose : Handles the quest, "Prison Break" + Script Author : Scatman + Script Date : 2009.02.27 + + Zone : Timorous Deep + Quest Giver: Bezok Myli'Ki + Preceded by: None + Followed by: None +--]] + + +function Init(Quest) + -- Channeler's Loop + -- Earthen Bracer + -- Feathered Turf-hunter Cap + -- Standard-issue Soldier's Ring + + + AddQuestStepChat(Quest, 1, "I need to free some captives held in Pyrrin Roost.", 5, ".", 1010, 2630104, 2630096, 2630131, 2630094) + AddQuestStepCompleteAction(Quest, 1, "step1_complete_freedSarnaks") + +end + +function Accepted(Quest, QuestGiver, Player) + FaceTarget(QuestGiver, Player) + conversation = CreateConversation() + + PlayFlavor(QuestGiver, "voiceover/english/rok_questvo/bezok_myli_ki/_exp04/exp04_rgn_timorous_deep/chrykori_tie/myliki/myliki001.mp3", "", "", 3631592040, 195858381, Player) + AddConversationOption(conversation, "I will return quickly.") + StartConversation(conversation, QuestGiver, Player, "Excellent.") +end + +function Declined(Quest, QuestGiver, Player) +end + +function step1_complete_freedSarnaks(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 1, "I have freed some captives in Pyrrin Roost.") + + AddQuestStepChat(Quest, 2, "I need to return to Bezok Myli'Ki.", 1, ".", 0, 2630098) + AddQuestStepCompleteAction(Quest, 2, "quest_complete") +end + +function quest_complete(Quest, QuestGiver, Player) + UpdateQuestDescription(Quest, "I have freed the sarnak held captive in Pyrrin Roost.") + GiveQuestReward(Quest, Player) +end + +function Reload(Quest, QuestGiver, Player, Step) + if Step == 1 then + step1_complete_freedSarnaks(Quest, QuestGiver, Player) + end +end diff --git a/server/Quests/TimorousDeep/report_to_the_primary.lua b/server/Quests/TimorousDeep/report_to_the_primary.lua new file mode 100644 index 000000000..63cba396f --- /dev/null +++ b/server/Quests/TimorousDeep/report_to_the_primary.lua @@ -0,0 +1,45 @@ +--[[ + Script Name : Quests/TimorousDeep/report_to_the_primary.lua + Script Purpose : Handles the quest, "Report to the Primary" + Script Author : Scatman + Script Date : 2009.02.06 + + Zone : Timorous Deep + Quest Giver: Tykor Gi'Lok + Preceded by: Curious Ore (curious_ore.lua) + Followed by: Disrupting Haoaeran Studies (disrupting_haoaeran_studies.lua) +--]] + + +function Init(Quest) + -- Acid-Carved Bracer + -- Empowered Bracelet + -- Sand-scoured Armguards + -- Tykor's Bracers + -- Zum'Ha's Armwraps + + + AddQuestStepChat(Quest, 1, "I must speak with Primary Conzuk Zum'Ha in Chrykori Village, up the ramp to the north.", 1, ".", 0, 2630042) + AddQuestStepCompleteAction(Quest, 1, "quest_complete") + +end + +function Accepted(Quest, QuestGiver, Player) + FaceTarget(QuestGiver, Player) + conversation = CreateConversation() + + PlayFlavor(QuestGiver, "voiceover/english/rok_questvo/tykor_gi_lok/_exp04/exp04_rgn_timorous_deep/chrykori_tie/gilok/gilok007.mp3", "", "", 4113737431, 1405861806, Player) + AddConversationOption(conversation, "Hopefully it will be revealed then.") + StartConversation(conversation, QuestGiver, Player, "This only supports my claims. The spirocs are not so empty headed as to think this will be of any use to them... It stinks of a greater design!") +end + +function Declined(Quest, QuestGiver, Player) +end + +function quest_complete(Quest, QuestGiver, Player) + UpdateQuestDescription(Quest, "I have shown Primary Conzuk Zum'Ha the ore sample.") + GiveQuestReward(Quest, Player) +end + +function Reload(Quest, QuestGiver, Player, Step) +end diff --git a/server/Quests/TimorousDeep/sandy_eggs.lua b/server/Quests/TimorousDeep/sandy_eggs.lua new file mode 100644 index 000000000..a7584c3b3 --- /dev/null +++ b/server/Quests/TimorousDeep/sandy_eggs.lua @@ -0,0 +1,56 @@ +--[[ + Script Name : Quests/TimorousDeep/sandy_eggs.lua + Script Purpose : Handles the quest, "Sandy Eggs" + Script Author : Scatman + Script Date : 2009.02.10 + + Zone : Timorous Deep + Quest Giver: Varkori Riz'Lul + Preceded by: Hopefully the Meat Isn't Timeworn (hopefully_the_meat_isnt_timeworn.lua) + Followed by: None +--]] + + +function Init(Quest) + -- Geo-Parser's Gloves + -- Layered Scale Gauntlets + -- Rune-covered Band + -- Sand-scoured Sandals + + + -- tortoise egg + AddQuestStepObtainItem(Quest, 1, "I need to collect some tortoise eggs from the dunes north and west of Chrykori Tie.", 6, 100, ".", 2148, 10111) + + AddQuestStepCompleteAction(Quest, 1, "step1_complete_gotEggs") + +end + +function Accepted(Quest, QuestGiver, Player) + FaceTarget(QuestGiver, Player) + conversation = CreateConversation() + + PlayFlavor(QuestGiver, "voiceover/english/rok_questvo/varkori_riz_lul/_exp04/exp04_rgn_timorous_deep/chrykori_tie/rizlul/rizlul005.mp3", "", "", 425764680, 2034208985, Player) + AddConversationOption(conversation, "You're welcome.") + StartConversation(conversation, QuestGiver, Player, "Thank you.") +end + +function Declined(Quest, QuestGiver, Player) +end + +function step1_complete_gotEggs(Quest, QuestGiver, Player) + SetStepComplete(Quest, 1, "I have collected the tortoise eggs.") + + AddQuestStepChat(Quest, 2, "I need to bring these eggs to Varkori Riz'Lul.", 1, ".", 2148, 2630043) + AddQuestStepCompleteAction(Quest, 2, "quest_complete") +end + +function quest_complete(Quest, QuestGiver, Player) + UpdateQuestDescription(Quest, "I have brought the tortoise eggs back to Varkori Riz'Lul.") + GiveQuestReward(Quest, Player) +end + +function Reload(Quest, QuestGiver, Player, Step) + if Step == 1 then + step1_complete_gotEggs(Quest, QuestGiver, Player) + end +end diff --git a/server/Quests/TimorousDeep/scout_scouting.lua b/server/Quests/TimorousDeep/scout_scouting.lua new file mode 100644 index 000000000..a9f99bef8 --- /dev/null +++ b/server/Quests/TimorousDeep/scout_scouting.lua @@ -0,0 +1,55 @@ +--[[ + Script Name : Quests/TimorousDeep/scout_scouting.lua + Script Purpose : Handles the quest, "Scout Scouting" + Script Author : Scatman + Script Date : 2009.02.27 + + Zone : Timorous Deep + Quest Giver: Arozik Sky'Ki + Preceded by: Haoaeran Poisons (haoaeran_poisons.lua) + Followed by: Haoaeran Orders (haoaeran_orders.lua) +--]] + + +function Init(Quest) + -- Band of Weaving + -- Barnacled Hoop + -- Layered Scale Barbute + -- Lightfoot Sash + -- Pridefeather Mantle + + + AddQuestStep(Quest, 1, "I need to travel south and search for the missing Chrykori Scout.", 1, 100, ".", 0) + AddQuestStepCompleteAction(Quest, 1, "step1_complete_foundScout") + +end + +function Accepted(Quest, QuestGiver, Player) + FaceTarget(QuestGiver, Player) + conversation = CreateConversation() + + PlayFlavor(QuestGiver, "voiceover/english/rok_questvo/arozik_sky_ki/_exp04/exp04_rgn_timorous_deep/chrykori_tie/skyki/skyki009.mp3", "", "", 3728908332, 3305312400, Player) + AddConversationOption(conversation, "You're welcome.") + StartConversation(conversation, QuestGiver, Player, "Thank you. Remember, the log book is enough.") +end + +function Declined(Quest, QuestGiver, Player) +end + +function step1_complete_foundScout(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 1, "I have the log book of the missing scout.") + + AddQuestStepChat(Quest, 2, "I need to bring this log book to Secondary Arozik Sky'Ki.", 1, ".", 716, 2630081) + AddQuestStepCompleteAction(Quest, 2, "quest_complete") +end + +function quest_complete(Quest, QuestGiver, Player) + UpdateQuestDescription(Quest, "Sky'Ki's scout was dead, but I was able to bring his log book back.") + GiveQuestReward(Quest, Player) +end + +function Reload(Quest, QuestGiver, Player, Step) + if Step == 1 then + step1_complete_foundScout(Quest, QuestGiver, Player) + end +end diff --git a/server/Quests/TimorousDeep/stealing_their_steel.lua b/server/Quests/TimorousDeep/stealing_their_steel.lua new file mode 100644 index 000000000..fe60ecd6f --- /dev/null +++ b/server/Quests/TimorousDeep/stealing_their_steel.lua @@ -0,0 +1,54 @@ +--[[ + Script Name : Quests/TimorousDeep/stealing_their_steel.lua + Script Purpose : Handles the quest, "Stealing Their Steel" + Script Author : Scatman + Script Date : 2009.03.10 + + Zone : Timorous Deep + Quest Giver: Tanzikla Hir'Ki + Preceded by: A Reverse Supply Run (a_reverse_supply_run.lua) + Followed by: None +--]] + + +function Init(Quest) + -- Earthen Loop + -- Layered Scale Stompers + -- Woven Trythec Earring + + + AddQuestStepKill(Quest, 1, "I need some weapons from the Haoaeran lightfoot attackers.", 5, 100, ".", 287, 2630105) + AddQuestStepCompleteAction(Quest, 1, "Step1_Complete_KilledAttackers") + +end + +function Accepted(Quest, QuestGiver, Player) + FaceTarget(QuestGiver, Player) + conversation = CreateConversation() + + PlayFlavor(QuestGiver, "voiceover/english/rok_questvo/tanzikla_hir_ki/_exp04/exp04_rgn_timorous_deep/chrykori_tie/hirki/hirki005.mp3", "", "", 2732146022, 3045462699, Player) + AddConversationOption(conversation, "I will.") + StartConversation(conversation, QuestGiver, Player, "Though we hope the Haoaerans are not receiving outside help, it would be something of a relief to know that they were -- for them to be capable of making weapons of such quality would be a concern. Be swift, " .. GetName(Player) .. ". We must know what we are up against.") +end + +function Declined(Quest, QuestGiver, Player) +end + +function Step1_Complete_KilledAttackers(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 1, "I have the Haoaeran lightfoot weapons.") + + AddQuestStepChat(Quest, 2, "I need to return to Tanzikla Hir'Ki.", 1, ".", 0, 2630611) + AddQuestStepCompleteAction(Quest, 2, "Quest_Complete") +end + +function Quest_Complete(Quest, QuestGiver, Player) + RemoveItem(Spawn, 2931) + UpdateQuestDescription(Quest, "I have brought the Haoaeran weapons back to Tanzikla Hir'Ki.") + GiveQuestReward(Quest, Player) +end + +function Reload(Quest, QusetGiver, Player, Step) + if Step == 1 then + Step1_Complete_KilledAttackers(Quest, QuestGiver, Player) + end +end diff --git a/server/Quests/TimorousDeep/stuffed_gorger_claws.lua b/server/Quests/TimorousDeep/stuffed_gorger_claws.lua new file mode 100644 index 000000000..be02b51fb --- /dev/null +++ b/server/Quests/TimorousDeep/stuffed_gorger_claws.lua @@ -0,0 +1,50 @@ +--[[ + Script Name : Quests/TimorousDeep/stuffed_gorger_claws.lua + Script Purpose : Handles the quest, "Stuffed Gorger Claws" + Script Author : Scatman + Script Date : 2009.02.06 + + Zone : Timorous Deep + Quest Giver: Taroche Dry'Zok + Preceded by: None + Followed by: Delivery to a Veteran (delivery_to_a_veteran.lua) +--]] + + +function Init(Quest) + + + AddQuestStepKill(Quest, 1, "I need some grit gorger claws.", 4, 100, ".", 78, 2630022) + AddQuestStepCompleteAction(Quest, 1, "step1_complete_gotClaws") + +end + +function Accepted(Quest, QuestGiver, Player) + FaceTarget(QuestGiver, Player) + conversation = CreateConversation() + + PlayFlavor(QuestGiver, "voiceover/english/rok_questvo/taroche_dry_zok/_exp04/exp04_rgn_timorous_deep/chrykori_tie/dryzok/dryzok001.mp3", "", "", 3402230050, 3099804897, Player) + AddConversationOption(conversation, "I will.") + StartConversation(conversation, QuestGiver, Player, "Excellent. Return to me once you have them.") +end + +function Declined(Quest, QuestGiver, Player) +end + +function step1_complete_gotClaws(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 1, "I have the claws.") + + AddQuestStepChat(Quest, 2, "I need to bring these claws to Taroche Dry'Zok", 1, ".", 77, 2630014) + AddQuestStepCompleteAction(Quest, 2, "quest_complete") +end + +function quest_complete(Quest, QuestGiver, Player) + UpdateQuestDescription(Quest, "I have brought Taroche Dry'Zok the grit gorger claws he asked for.") + GiveQuestReward(Quest, Player) +end + +function Reload(Quest, QuestGiver, Player, Step) + if Step == 1 then + step1_complete_gotClaws(Quest, QuestGiver, Player) + end +end diff --git a/server/Quests/TimorousDeep/the_ends_justify_the_means.lua b/server/Quests/TimorousDeep/the_ends_justify_the_means.lua new file mode 100644 index 000000000..4f9ffc43b --- /dev/null +++ b/server/Quests/TimorousDeep/the_ends_justify_the_means.lua @@ -0,0 +1,55 @@ +--[[ + Script Name : Quests/TimorousDeep/the_ends_justify_the_means.lua + Script Purpose : Handles the quest, "The Ends Justify the Means" + Script Author : Scatman + Script Date : 2009.02.07 + + Zone : Timorous Deep + Quest Giver: Civ-Parser Di'Xin + Preceded by: Chrykori Relics (chrykori_relics.lua) + Followed by: None +--]] + + +function Init(Quest) + -- Layered Scale Mantle + -- Lightfoot Gloves + -- Timeworn Helm + -- Timeworn Hoop + -- Timeworn Stud + + + AddQuestStepKill(Quest, 1, "I need to collect some scavenged relics from the Haoaeran scavengers in the Timeworn Pools to the west.", 4, 100, ".", 368, 2630086) + AddQuestStepCompleteAction(Quest, 1, "step1_complete_gotRelics") + +end + +function Accepted(Quest, QuestGiver, Player) + FaceTarget(QuestGiver, Player) + conversation = CreateConversation() + + PlayFlavor(QuestGiver, "voiceover/english/rok_questvo/civ-parser_di_xin/_exp04/exp04_rgn_timorous_deep/chrykori_tie/dixin/dixin008.mp3", "", "", 76732508, 856374115, Player) + AddConversationOption(conversation, "I will return.") + StartConversation(conversation, QuestGiver, Player, "That would be wonderful. It is a shame that any sentient can be so careless when it comes to something as important as history.") +end + +function Declined(Quest, QuestGiver, Player) +end + +function step1_complete_gotRelics(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 1, "I have collected the scavenged relics.") + + AddQuestStepChat(Quest, 2, "I need to bring these relics back to Civ-Parser Di'Xin.", 1, ".", 368, 2630045) + AddQuestStepCompleteAction(Quest, 2, "quest_complete") +end + +function quest_complete(Quest, QuestGiver, Player) + UpdateQuestDescription(Quest, "I brought relics obtained from the Haoaeran scavengers back to Civ-Parser Di'Xin.") + GiveQuestReward(Quest, Player) +end + +function Reload(Quest, QuestGiver, Player, Step) + if Step == 1 then + step1_complete_gotRelics(Quest, QuestGiver, Player) + end +end diff --git a/server/Quests/TimorousDeep/the_filament_strangler.lua b/server/Quests/TimorousDeep/the_filament_strangler.lua new file mode 100644 index 000000000..4eda08bf8 --- /dev/null +++ b/server/Quests/TimorousDeep/the_filament_strangler.lua @@ -0,0 +1,53 @@ +--[[ + Script Name : Quests/TimorousDeep/the_filament_strangler.lua + Script Purpose : Handles the quest, "The Filament Strangler" + Script Author : Scatman + Script Date : 2009.02.27 + + Zone : Timorous Deep + Quest Giver: Bio-Parser Zo'Dok + Preceded by: None + Followed by: It Can't ALL Be Interesting Work (it_cant_all_be_interesting_work.lua) +--]] + + +function Init(Quest) + + + -- filament encapsulated monitor + AddQuestStepObtainItem(Quest, 1, "I need some filament encapsulated monitors for Bio-Parser Zo'Dok.", 3, 100, ".", 136, 5080) + + AddQuestStepCompleteAction(Quest, 1, "step1_complete_gotFilaments") + +end + +function Accepted(Quest, QuestGiver, Player) + FaceTarget(QuestGiver, Player) + conversation = CreateConversation() + + PlayFlavor(QuestGiver, "voiceover/english/rok_questvo/bio-parser_zo_dok/_exp04/exp04_rgn_timorous_deep/chrykori_tie/zodok/zodok002.mp3", "", "", 4085643923, 1538179326, Player) + AddConversationOption(conversation, "Ok.") + StartConversation(conversation, QuestGiver, Player, "And don't worry, the plant won't try to eat you. It can recognize the lizards somehow and only attacks them. Besides, you're much too big to wrap up.") +end + +function Declined(Quest, QuestGiver, Player) +end + +function step1_complete_gotFilaments(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 1, "I have collected the filament encapsulated monitors.") + + AddQuestStepChat(Quest, 2, "I need to bring these monitors to Bio-Parser Zo'Dok.", 1, ".", 141, 2630080) + AddQuestStepCompleteAction(Quest, 2, "quest_complete") +end + +function quest_complete(Quest, QuestGiver, Player) + UpdateQuestDescription(Quest, "I have brought some samples of the lizards the plant preys on back to Zo'Dok.") + GiveQuestReward(Quest, Player) +end + +function Reload(Quest, QuestGiver, Player, Step) + if Step == 1 then + step1_complete_gotFilaments(Quest, QuestGiver, Player) + end +end + diff --git a/server/Quests/TimorousDeep/war.lua b/server/Quests/TimorousDeep/war.lua new file mode 100644 index 000000000..7845a5cfb --- /dev/null +++ b/server/Quests/TimorousDeep/war.lua @@ -0,0 +1,40 @@ +--[[ + Script Name : Quests/TimorousDeep/war.lua + Script Purpose : Handles the quest, "War" + Script Author : Scatman + Script Date : 2009.02.27 + + Zone : Timorous Deep + Quest Giver: Arozik Sky'Ki + Preceded by: Decoder Glyph (decoder_glyph.lua) + Followed by: None +--]] + + +function Init(Quest) + + + AddQuestStepChat(Quest, 1, "I need to speak with Tertiary Dih'Ha.", 1, ".", 0, 2630108) + AddQuestStepCompleteAction(Quest, 1, "quest_complete") + +end + +function Accepted(Quest, QuestGiver, Player) + FaceTarget(QuestGiver, Player) + conversation = CreateConversation() + + PlayFlavor(QuestGiver, "voiceover/english/rok_questvo/arozik_sky_ki/_exp04/exp04_rgn_timorous_deep/chrykori_tie/skyki/skyki021.mp3", "", "", 3157661063, 692355450, Player) + AddConversationOption(conversation, "All right.") + StartConversation(conversation, QuestGiver, Player, "Thulwun Station needs our help. Be strong, " .. GetName(Player) .. ". I will see about sending further reinforcements in your wake.") +end + +function Declined(Quest, QuestGiver, Player) +end + +function quest_complete(Quest, QuestGiver, Player) + UpdateQuestDescription(Quest, "I have met up with Tertiary Dih'Ha.") + GiveQuestReward(Quest, Player) +end + +function Reload(Quest, QuestGiver, Player, Step) +end diff --git a/server/Quests/TimorousDeep/weapon_break.lua b/server/Quests/TimorousDeep/weapon_break.lua new file mode 100644 index 000000000..034009889 --- /dev/null +++ b/server/Quests/TimorousDeep/weapon_break.lua @@ -0,0 +1,58 @@ +--[[ + Script Name : Quests/TimorousDeep/weapon_break.lua + Script Purpose : Handles the quest, "Weapon Break" + Script Author : Scatman + Script Date : 2009.03.10 + + Zone : Timorous Deep + Quest Giver: Gerwen Di'Ki + Preceded by: None + Followed by: None +--]] + + +function Init(Quest) + -- Pridefeather Leggings + -- Geo-Parser's Leggings + -- Layered Scale Greaves + -- Raptor-scaled Leggings + -- Ritualist's Pants + -- Turf-hunter Breeches + -- Thulwun Defender's Greaves + + + AddQuestStepSpell(Quest, 1, "I need to spray the weapons of Pyrrin Roost with acid.", 5, 100, ".", 287, 5018) + AddQuestStepCompleteAction(Quest, 1, "Step1_Complete_SprayedAcid") + +end + +function Accepted(Quest, QuestGiver, Player) + -- Acid + if not HasItem(Player, 2931) then + SummonItem(Player, 2931) + end + + FaceTarget(QuestGiver, Player) + conversation = CreateConversation() + + PlayFlavor(QuestGiver, "voiceover/english/rok_questvo/gerwen_di_ki/_exp04/exp04_rgn_timorous_deep/chrykori_tie/diki/diki001.mp3", "", "", 2073303618, 4008999322, Player) + AddConversationOption(conversation, "I will be swift.") + StartConversation(conversation, QuestGiver, Player, "If we destroy these weapons, it will take more time for the Haoaerans to reinforce their assault force at Thulwun Station. They will need to rearm before moving on. Let us show them that two can play at the delay game.") +end + +function Declined(Quest, QuestGiver, Player) +end + +function Step1_Complete_SprayedAcid(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 1, "I have sprayed acid on the weapons in Pyrrin Roost.") + + AddQuestStepChat(Quest, 2, "I need to return to Gerwen Di'Ki.", 1, ".", 0, 2630593) + AddQuestStepCompleteAction(Quest, 2, "Quest_Complete") +end + +function Quest_Complete(Quest, QuestGiver, Player) + -- remove Acid + RemoveItem(Player, 2931) + UpdateQuestDescription(Quest, "I've rusted the Haoaeran weapons laying around in Pyrrin Roost.") + GiveQuestReward(Quest, Player) +end diff --git a/server/Quests/WailingCaves/CombustibleGnome.lua b/server/Quests/WailingCaves/CombustibleGnome.lua new file mode 100644 index 000000000..a945091d8 --- /dev/null +++ b/server/Quests/WailingCaves/CombustibleGnome.lua @@ -0,0 +1,56 @@ +--[[ + Script Name : combustible_gnome.lua + Script Purpose : Handles the quest, "Combustible Gnome" + Script Author : QuestParser (Replace this) + Script Date : 8/30/2019 + Script Notes : Auto generated with QuestParser. + + Zone : Wailing Caves + Quest Giver : + Preceded by : None + Followed by : None +--]] +local Cog Burn = 2580001 +require "SpawnScripts/Generic/DialogModule" + +function Init(Quest) + AddQuestStepKill(Quest, 1, "Slay skeletal orcs.", 30, 100, "Cog Burn wants me to slay about thirty of the undead orcs down here in the Wailing Caves. I guess he wants their bones for some kind of experiment.", 611, 2580043) + AddQuestStepCompleteAction(Quest, 1, "Step1Complete") +end + +function Accepted(Quest, QuestGiver, Player) + -- Add dialog here for when the quest is accepted +end + +function Declined(Quest, QuestGiver, Player) + -- Add dialog here for when the quest is declined +end + +function Deleted(Quest, QuestGiver, Player) + -- Remove any quest specific items here when the quest is deleted +end + +function Step1Complete(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 1, "I have slain many undead orcs.") + UpdateQuestTaskGroupDescription(Quest, 1, "I've slain the undead orcs and have their remains. All that's left to do is return the remains to Cog Burn.") + + AddQuestStepChat(Quest, 2, "Give Cog Burn the orc parts.", 1, "What a daunting task! I've slain many of the undead orcs, now I must return to Cog Burn and give him the bones.", 11, 2580043) + AddQuestStepCompleteAction(Quest, 2, "QuestComplete") +end + +function QuestComplete(Quest, QuestGiver, Player) + -- The following UpdateQuestStepDescription and UpdateTaskGroupDescription are not needed, parser adds them for completion in case stuff needs to be moved around + UpdateQuestStepDescription(Quest, 2, "I have given Cog Burn the orc parts.") + UpdateQuestTaskGroupDescription(Quest, 2, "I've given Cog Burn all of the undead orc remains. Now to see what he gave me for my efforts.") + + UpdateQuestDescription(Quest, "It sure was a lot of work, but well worth the reward. I wonder what it was that he was going to give me at first. Hmm, I may never know.") + GiveQuestReward(Quest, Player) +end + +function Reload(Quest, QuestGiver, Player, Step) + if Step == 1 then + Step1Complete(Quest, QuestGiver, Player) + elseif Step == 2 then + QuestComplete(Quest, QuestGiver, Player) + end +end diff --git a/server/Quests/WailingCaves/GroaningBracers.lua b/server/Quests/WailingCaves/GroaningBracers.lua new file mode 100644 index 000000000..6d2cbd7b8 --- /dev/null +++ b/server/Quests/WailingCaves/GroaningBracers.lua @@ -0,0 +1,45 @@ +--[[ + Script Name : groaning_bracers.lua + Script Purpose : Handles the quest, "Groaning Bracers" + Script Author : Neatz09 + Script Date : 8/30/2019 + Script Notes : Auto generated with QuestParser. + + Zone : Wailing Caves + Quest Giver : + Preceded by : None + Followed by : None +--]] + + +function Init(Quest) + AddQuestStepLocation(Quest, 1, "I need to bring these bracers to the Burial Pit in the Wailing Caves.", 1, "With a little effort, I believe I can transform these mysterious bracers into something better.", 11, -175, -55, -13) + AddQuestStepCompleteAction(Quest, 1, "QuestComplete") +end + +function Accepted(Quest, QuestGiver, Player) + -- Add dialog here for when the quest is accepted +end + +function Declined(Quest, QuestGiver, Player) + -- Add dialog here for when the quest is declined +end + +function Deleted(Quest, QuestGiver, Player) + -- Remove any quest specific items here when the quest is deleted +end + +function QuestComplete(Quest, QuestGiver, Player) + -- The following UpdateQuestStepDescription and UpdateTaskGroupDescription are not needed, parser adds them for completion in case stuff needs to be moved around + UpdateQuestStepDescription(Quest, 1, "A wisp of light streaked across the cavern and darted straight for the bracers.") + UpdateQuestTaskGroupDescription(Quest, 1, "I've been able to change the mysterious bracers into the Groaning Bracers.") + + UpdateQuestDescription(Quest, "Applying a little bit of effort, I've been able to change the mysterious bracers into the Groaning Bracers.

") + GiveQuestReward(Quest, Player) +end + +function Reload(Quest, QuestGiver, Player, Step) + if Step == 1 then + QuestComplete(Quest, QuestGiver, Player) + end +end diff --git a/server/Quests/WillowWood/a_joined_heritage.lua b/server/Quests/WillowWood/a_joined_heritage.lua new file mode 100644 index 000000000..47b9a58ff --- /dev/null +++ b/server/Quests/WillowWood/a_joined_heritage.lua @@ -0,0 +1,57 @@ +--[[ + Script Name : Quests/WillowWood/a_joined_heritage.lua + Script Purpose : Handles the quest, "A Joined Heritage" + Script Author : Scatman + Script Date : 2009.09.26 + + Zone : The Willow Wood + Quest Giver: Daelyn Twinstar + Preceded by: A Split Heritage (a_split_heritage.lua) + Followed by: Wisdom in the Wild (wisdom_in_the_wild.lua) +--]] + +function Init(Quest) + AddQuestStepChat(Quest, 1, "I must speak with a human named Milo Faren. Daelyn says he should be in the scribe's shop.", 1, "Daelyn Twinstar has offered to help teach me about Half Elves. He has asked that I speak with a couple of people here within the Willow Wood.", 0, 2370028) + AddQuestStepCompleteAction(Quest, 1, "Step1_Complete_SpokeWithMilo") +end + +function Accepted(Quest, QuestGiver, Player) + FaceTarget(QuestGiver, Player) + conversation = CreateConversation() + + PlayFlavor(QuestGiver, "voiceover/english/tutorial_revamp/daelyn_twinstar/qey_village05/quests/daelyn_twinstar/daelyn_twinstar022b.mp3", "", "", 719307287, 3769426706, Player) + AddConversationOption(conversation, "I'll be back.") + StartConversation(conversation, QuestGiver, Player, "Good. Return to me once this is done and we will speak of what you heard.") +end + +function Declined(Quest, QuestGiver, Player) +end + +function Step1_Complete_SpokeWithMilo(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 1, "I have spoken with Milo Faren.") + + AddQuestStepChat(Quest, 2, "I must speak with an elf named Lyssia Delnara. Daelyn said she is probably on the small overlook near the gates to the Elddar Grove.", 1, "Daelyn Twinstar has offered to help teach me about Half Elves. He has asked that I speak with a couple of people here within the Willow Wood.", 0, 2370029) + AddQuestStepCompleteAction(Quest, 2, "Step2_Complete_SpokeWithLyssia") +end + +function Step2_Complete_SpokeWithLyssia(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 2, "I have spoken with Lyssia.") + + AddQuestStepChat(Quest, 3, "I should return to Daelyn now that I have spoken to Lyssia and Milo.", 1, "Daelyn Twinstar has offered to help teach me about Half Elves. He has asked that I speak with a couple of people here within the Willow Wood.", 0, 2370037) + AddQuestStepCompleteAction(Quest, 3, "Quest_Complete") +end + +function Quest_Complete(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 3, "I have spoken with Daelyn.") + UpdateQuestTaskGroupDescription(Quest, 1, "I have completed Daelyn's task.") + UpdateQuestDescription(Quest, "Daelyn promised to speak to me about Milo and Lyssia after I help him with an important task.") + GiveQuestReward(Quest, Player) +end + +function Reload(Quest, QuestGiver, Player, Step) + if Step == 1 then + Step1_Complete_SpokeWithMilo(Quest, QuestGiver, Player) + elseif Step == 2 then + Step2_Complete_SpokeWithLyssia(Quest, QuestGiver, Player) + end +end \ No newline at end of file diff --git a/server/Quests/WillowWood/a_split_heritage.lua b/server/Quests/WillowWood/a_split_heritage.lua new file mode 100644 index 000000000..57fa4bb55 --- /dev/null +++ b/server/Quests/WillowWood/a_split_heritage.lua @@ -0,0 +1,130 @@ +--[[ + Script Name : Quests/WillowWood/a_split_heritage.lua + Script Purpose : Handles the quest, "A Split Heritage" + Script Author : Scatman + Script Date : 2009.09.20 + + Zone : The Willow Wood + Quest Giver: Daelyn Twinstar + Preceded by: None + Followed by: A Joined Heritage (a_joined_heritage.lua) +--]] + +local ASplitHeritage = 218 + +function Init(Quest) + AddQuestStepChat(Quest, 1, "I need to speak with Gar Smolten behind the inn.", 1, "I need to speak with a human named Gar Smolten. Daelyn said he should be behind the inn.", 0, 2370026) + AddQuestStepCompleteAction(Quest, 1, "Step1_Complete_SpokeWithGar") +end + +function Accepted(Quest, QuestGiver, Player) + FaceTarget(QuestGiver, Player) + conversation = CreateConversation() + + PlayFlavor(QuestGiver, "voiceover/english/tutorial_revamp/daelyn_twinstar/qey_village05/quests/daelyn_twinstar/daelyn_twinstar015.mp3", "", "", 1728941496, 2387813278, Player) + AddConversationOption(conversation, "Very well.") + StartConversation(conversation, QuestGiver, Player, "I'm glad to hear it. Return to me when you have spoken to them.") +end + +function Declined(Quest, QuestGiver, Player) +end + +function Step1_Complete_SpokeWithGar(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 1, "I have spoken with Gar Smolten.") + UpdateQuestTaskGroupDescription(Quest, 1, "I have spoken with Gar Smolten.") + + AddQuestStepChat(Quest, 2, "I need to speak with Gar Smolten once I know the contents of the boxes.", 1, "I should speak with Gar Smolten behind the inn again when I know which boxes contain what.", 0, 2370026) + AddQuestStepCompleteAction(Quest, 2, "Step2_Complete_SpokeWithGar") +end + +function Step2_Complete_SpokeWithGar(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 2, "I have spoken with Gar Smolten.") + UpdateQuestTaskGroupDescription(Quest, 2, "I have completed the task for Gar.") + + AddQuestStepChat(Quest, 3, "I need to speak with Lia Serene near the entrance to the Elddar Grove.", 1, "I need to speak with an elf named Lia Serene. Daelyn said she should be near the entrance to the Elddar Grove.", 0, 2370030) + AddQuestStepCompleteAction(Quest, 3, "Step3_Complete_SpokeWithLia") +end + +function Step3_Complete_SpokeWithLia(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 3, "I have spoken with Lia Serene.") + UpdateQuestTaskGroupDescription(Quest, 3, "I have spoken with Lia Serene.") + + AddQuestStep(Quest, 4, "I need to check under the north-east corner of the inn-roof for a nest or eggs.", 1, 100, "I need to go check the spots in the Willow Wood that Lia mentioned may have eggs or nests near them.", 0) + AddQuestStep(Quest, 5, "I need to check under the tree near the entrance to the docks for a nest or eggs.", 1, 100, "I need to go check the spots in the Willow Wood that Lia mentioned may have eggs or nests near them.", 0) + AddQuestStep(Quest, 6, "I need to check under the tree on the path to the entrance to the Forest Ruins for a nest or eggs.", 1, 100, "I need to go check the spots in the Willow Wood that Lia mentioned may have eggs or nests near them.", 0) + AddQuestStepCompleteAction(Quest, 4, "Step4_Complete_FoundEgg") + AddQuestStepCompleteAction(Quest, 5, "Step5_Complete_FoundEgg") + AddQuestStepCompleteAction(Quest, 6, "Step6_Complete_FoundEgg") +end + +function Step4_Complete_FoundEgg(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 4, "I have found an egg near the inn.") + + if QuestIsComplete(Player, ASplitHeritage) then + FoundAllEggs(Quest, QuestGiver, Player) + end +end + +function Step5_Complete_FoundEgg(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 5, "I have found an egg from under the tree near the entrance to the docks.") + + if QuestIsComplete(Player, ASplitHeritage) then + FoundAllEggs(Quest, QuestGiver, Player) + end +end + +function Step6_Complete_FoundEgg(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 6, "I have found an egg from the tree on the path to the Forest Ruins.") + + if QuestIsComplete(Player, ASplitHeritage) then + FoundAllEggs(Quest, QuestGiver, Player) + end +end + +function FoundAllEggs(Quest, QuestGiver, Player) + local egg1 = SpawnMob(GetZone(QuestGiver), 2370105, 0, 815.854, -19.6821, -585.67, 257) + local egg2 = SpawnMob(GetZone(QuestGiver), 2370105, 0, 815.888, -19.6638, -585.578, 155) + local egg3 = SpawnMob(GetZone(QuestGiver), 2370105, 0, 815.941, -19.6429, -585.632, 221) + Despawn(egg1, 300000) + Despawn(egg2, 300000) + Despawn(egg3, 300000) + + + UpdateQuestTaskGroupDescription(Quest, 4, "I have collected eggs from the spots Lia mentioned.") + + AddQuestStepChat(Quest, 7, "I need to speak with Lia Serene again.", 1, "I should speak with Lia near the entrance to the Elddar Grove again and give her these eggs.", 0, 2370030) + AddQuestStepCompleteAction(Quest, 7, "Step7_Complete_SpokeWithLia") +end + +function Step7_Complete_SpokeWithLia(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 7, "I have spoken with Lia Serene again.") + UpdateQuestTaskGroupDescription(Quest, 5, "I have completed the task for Lia.") + + AddQuestStepChat(Quest, 8, "I need to speak with Daelyn.", 1, "I should return to Daelyn Twinstar now that I have done what he asked of me.", 0, 2370037) + AddQuestStepCompleteAction(Quest, 8, "Quest_Complete") +end + +function Quest_Complete(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 8, "I have spoken with Daelyn.") + UpdateQuestTaskGroupDescription(Quest, 6, "I have spoken with Daelyn Twinstar.") + UpdateQuestDescription(Quest, "After speaking with Gar and Lia I returned to Daelyn, he asked about how they treated me.") + GiveQuestReward(Quest, Player) +end + +function Reload(Quest, QuestGiver, Player, Step) + if Step == 1 then + Step1_Complete_SpokeWithGar(Quest, QuestGiver, Player) + elseif Step == 2 then + Step2_Complete_SpokeWithGar(Quest, QuestGiver, Player) + elseif Step == 3 then + Step3_Complete_SpokeWithLia(Quest, QuestGiver, Player) + elseif Step == 4 then + Step4_Complete_FoundEgg(Quest, QuestGiver, Player) + elseif Step == 5 then + Step5_Complete_FoundEgg(Quest, QuestGiver, Player) + elseif Step == 6 then + Step6_Complete_FoundEgg(Quest, QuestGiver, Player) + elseif Step == 7 then + Step7_Complete_SpokeWithLia(Quest, QuestGiver, Player) + end +end \ No newline at end of file diff --git a/server/Quests/WillowWood/a_task_for_daelyn.lua b/server/Quests/WillowWood/a_task_for_daelyn.lua new file mode 100644 index 000000000..fe8c94178 --- /dev/null +++ b/server/Quests/WillowWood/a_task_for_daelyn.lua @@ -0,0 +1,38 @@ +--[[ + Script Name : Quests/WillowWood/a_task_for_daelyn.lua + Script Purpose : Handles the quest, "A Task for Daelyn" + Script Author : Scatman + Script Date : 2009.09.26 + + Zone : The Willow Wood + Quest Giver: Daelyn Twinstar + Preceded by: Wisdom in the Wild (wisdom_in_the_wild.lua) + Followed by: None +--]] + +function Init(Quest) + AddQuestStepChat(Quest, 1, "I must find Elvic Garrett.", 1, "Daelyn Twinstar would like me to deliver his latest work to Elvic Garrett in the Forest Ruins.", 0, 1960007) + AddQuestStepCompleteAction(Quest, 1, "Quest_Complete") +end + +function Accepted(Quest, QuestGiver, Player) + FaceTarget(QuestGiver, Player) + conversation = CreateConversation() + + PlayFlavor(QuestGiver, "voiceover/english/tutorial_revamp/daelyn_twinstar/qey_village05/quests/daelyn_twinstar/daelyn_twinstar031b.mp3", "", "", 2282006667, 2437930870, Player) + AddConversationOption(conversation, "Thank you.") + StartConversation(conversation, QuestGiver, Player, "Thanks for your help, " .. GetName(Player) .. ". I hope our discussions about our race will prove useful to you.") +end + +function Declined(Quest, QuestGiver, Player) +end + +function Quest_Complete(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 1, "I have found Elvic Garrett.") + UpdateQuestTaskGroupDescription(Quest, 1, "I have delivered Daelyn Twinstar's essay to Elvic Garrett.") + UpdateQuestDescription(Quest, "I have delivered Daelyn's work to Elvic Garrett.") + GiveQuestReward(Quest, Player) +end + +function Reload(Quest, QuestGiver, Player, Step) +end \ No newline at end of file diff --git a/server/Quests/WillowWood/a_task_for_davyn.lua b/server/Quests/WillowWood/a_task_for_davyn.lua new file mode 100644 index 000000000..317216874 --- /dev/null +++ b/server/Quests/WillowWood/a_task_for_davyn.lua @@ -0,0 +1,87 @@ +--[[ + Script Name : Quests/WillowWood/a_task_for_davyn.lua + Script Purpose : Handles the quest, "A Task for Davyn" + Script Author : Scatman + Script Date : 2009.01.17 + + Zone : The Willow Wood + Quest Giver: Davyn Thornbranch + Preceded by: Tribute Leaves (tribute_leaves.lua) + Followed by: Tribute Flowers (tribute_flowers.lua) +--]] + + +function Init(Quest) + AddQuestStepChat(Quest, 1, "Davyn mentioned that Taval Zane, an inn patron, was the most recent person to report seeing the rabid wolf. I should start by speaking with him in the in.", 1, "Davyn has told me of reports of a rabid wolf in the Willow Wood. He has asked that I find it and put it out of its misery before anyone is harmed.", 0, 2370009) + AddQuestStepCompleteAction(Quest, 1, "Step1_Complete_TalkedToTaval") +end + +function Accepted(Quest, QuestGiver, Player) + FaceTarget(QuestGiver, Player) + conversation = CreateConversation() + + PlayFlavor(QuestGiver, "voiceover/english/tutorial_revamp/davyn_thornbranch/qey_village05/quests/davyn_thornbranch/davyn_thornbranch023.mp3", "", "", 2446328740, 3651016951, Player) + AddConversationOption(conversation, "No problem.") + StartConversation(conversation, QuestGiver, Player, "Thank you for looking into this matter. Oh! If you have not already done so, you can get lodgings at the inn by speaking with Innkeeper Yeoni.") +end + +function Declined(Quest, QuestGiver, Player) +end + +function Step1_Complete_TalkedToTaval(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 1, "Taval said he saw the wolf run toward the scribe's shop.") + + AddQuestStepChat(Quest, 2, "I should speak to Jana Windstream outside the scribe shop.", 1, "Davyn has told me of reports of a rabid wolf in the Willow Wood. He has asked that I find it and put it out of its misery before anyone is harmed.", 0, 2370024) + AddQuestStepCompleteAction(Quest, 2, "Step2_Complete_TalkedToJana") +end + +function Step2_Complete_TalkedToJana(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 2, "Jana said the wolf was probably after something in the cart.") + + AddQuestStep(Quest, 3, "I should search the cart Jana mentioned. She said it was at the northern edge of the scribe shop.", 1, 100, "Davyn has told me of reports of a rabid wolf in the Willow Wood. He has asked that I find it and put it out of its misery before anyone is harmed.", 0) + AddQuestStepCompleteAction(Quest, 3, "Step3_Complete_SearchedCrate") +end + +function Step3_Complete_SearchedCrate(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 3, "I found wolf tracks.") + UpdateQuestTaskGroupDescription(Quest, 1, "I found wolf tracks.") + + AddQuestStepKill(Quest, 4, "I should follow the wolf tracks that lead eastward up the hill behind the scribe's shop.", 1, 100, "Some wolf tracks lead east of the scribe's shop from the cart. Where there are tracks, there may be a wolf.", 0, 2370107) + AddQuestStepCompleteAction(Quest, 4, "Step4_Complete_KilledWolf") +end + +function Step4_Complete_KilledWolf(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 4, "The rabid wolf has been slain.") + UpdateQuestTaskGroupDescription(Quest, 2, "The rabid wolf has been slain.") + + AddQuestStepChat(Quest, 5, "I must speak with Davyn.", 1, "Now that the wolf has been slain, I need to speak with Davyn and then Aelis.", 0, 2370033) + AddQuestStepCompleteAction(Quest, 5, "Step5_Complete_TalkedToDavyn") +end + +function Step5_Complete_TalkedToDavyn(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 5, "I spoke to Davyn.") + + AddQuestStepChat(Quest, 6, "I need to speak with Aelis now that I have done a task for Davyn.", 1, "Now that the wolf has been slain, I need to speak with Davyn and then Aelis.", 0, 2370038) + AddQuestStepCompleteAction(Quest, 6, "Quest_Complete") +end + +function Quest_Complete(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 6, "I have spoken with Aelis.") + UpdateQuestTaskGroupDescription(Quest, 3, "I have spoken with Davyn and Aelis.") + UpdateQuestDescription(Quest, "I have slain the rabid wolf that was living in the Willow Wood as Davyn Thornbranch requested.") + GiveQuestReward(Quest, Player) +end + +function Reload(Quest, QuestGiver, Player, Step) + if Step == 1 then + Step1_Complete_TalkedToTaval(Quest, QuestGiver, Player) + elseif Step == 2 then + Step2_Complete_TalkedToJana(Quest, QuestGiver, Player) + elseif Step == 3 then + Step3_Complete_SearchedCrate(Quest, QuestGiver, Player) + elseif Step == 4 then + Step4_Complete_KilledWolf(Quest, QuestGiver, Player) + elseif Step == 5 then + Step5_Complete_TalkedToDavyn(Quest, QuestGiver, Player) + end +end \ No newline at end of file diff --git a/server/Quests/WillowWood/a_tribute_to_ulinir.lua b/server/Quests/WillowWood/a_tribute_to_ulinir.lua new file mode 100644 index 000000000..c5315ab8c --- /dev/null +++ b/server/Quests/WillowWood/a_tribute_to_ulinir.lua @@ -0,0 +1,38 @@ +--[[ + Script Name : Quests/WillowWood/a_tribute_to_ulinir.lua + Script Purpose : Handles the quest, "A Tribute to Ulinir" + Script Author : Scatman + Script Date : 2009.09.26 + + Zone : The Willow Wood + Quest Giver: Davyn Thornbranch + Preceded by: Tribute Flowers (tribute_flowers.lua) + Followed by: None +--]] + +function Init(Quest) + AddQuestStep(Quest, 1, "I need to place Ulinir's tribute on his grave in the northeastern edge of the Forest Ruins.", 1, 100, "Davyn has asked me to deliver Ulinir's tribute to his grave in the Forest Ruins.", 0) + AddQuestStepCompleteAction(Quest, 1, "Quest_Complete") +end + +function Accepted(Quest, QuestGiver, Player) + FaceTarget(QuestGiver, Player) + conversation = CreateConversation() + + PlayFlavor(QuestGiver, "voiceover/english/tutorial_revamp/davyn_thornbranch/qey_village05/quests/davyn_thornbranch/davyn_thornbranch024.mp3", "", "", 1462985886, 2661740448, Player) + AddConversationOption(conversation, "I'll be careful.") + StartConversation(conversation, QuestGiver, Player, "Be cautious. The Forest Ruins are not the safe haven that the Willow Wood is.") +end + +function Declined(Quest, QuestGiver, Player) +end + +function Quest_Complete(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 1, "I have placed Ulinir's tribute.") + UpdateQuestTaskGroupDescription(Quest, 1, "I have delivered Ulinir's tribute.") + UpdateQuestDescription(Quest, "I have placed Ulinir's tribute as Davyn Thornbranch requested. I hope that I inspire such friendship in others.") + GiveQuestReward(Quest, Player) +end + +function Reload(Quest, QuestGiver, Player, Step) +end \ No newline at end of file diff --git a/server/Quests/WillowWood/offering_help.lua b/server/Quests/WillowWood/offering_help.lua new file mode 100644 index 000000000..c8e3591a6 --- /dev/null +++ b/server/Quests/WillowWood/offering_help.lua @@ -0,0 +1,49 @@ +--[[ + Script Name : Quests/WillowWood/offering_help.lua + Script Purpose : Handles the quest, "Offering Help" + Script Author : Scatman + Script Date : 2009.09.26 + + Zone : The Willow Wood + Quest Giver: Aelis + Preceded by: None + Followed by: Tribute Leaves (tribute_leaves.lua) +--]] + +function Init(Quest) + AddQuestStepChat(Quest, 1, "I need to speak with Davyn Thornbranch just inside the tunnel from the docks.", 1, "I need to go into the Willow Wood and find Davyn Thornbranch. Once I find him, I must offer to help him.", 0, 2370033) + AddQuestStepCompleteAction(Quest, 1, "Step1_Complete_TalkedToDavyn") +end + +function Accepted(Quest, QuestGiver, Player) + FaceTarget(QuestGiver, Player) + conversation = CreateConversation() + + PlayFlavor(QuestGiver, "voiceover/english/tutorial_revamp/aelis/qey_village05/quests/aelis/aelis_intro004.mp3", "", "", 3255317830, 86303468, Player) + AddConversationOption(conversation, "Thank you.") + StartConversation(conversation, QuestGiver, Player, "Follow this tunnel into the Willow Wood. I am confident Davyn is just inside.") +end + +function Declined(Quest, QuestGiver, Player) +end + +function Step1_Complete_TalkedToDavyn(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 1, "I have spoken with Davyn Thornbranch.") + + AddQuestStepChat(Quest, 2, "I need to return to Aelis on the docks for further instruction about creating Davyn's Tier'Dal tribute.", 1, "I need to go into the Willow Wood and find Davyn Thornbranch. Once I find him, I must offer to help him.", 0, 2370038) + AddQuestStepCompleteAction(Quest, 2, "Quest_Complete") +end + +function Quest_Complete(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 2, "I have spoken with Aelis.") + UpdateQuestTaskGroupDescription(Quest, 1, "I have offered to help Davyn Thornbranch make his Feir'Dal tribute.") + + UpdateQuestDescription(Quest, "I have spoken with Davyn and agreed to help him create his tribute. Aelis will guide me through the process.") + GiveQuestReward(Quest, Player) +end + +function Reload(Quest, QuestGiver, Player, Step) + if Step == 1 then + Step1_Complete_TalkedToDavyn(Quest, QuestGiver, Player) + end +end \ No newline at end of file diff --git a/server/Quests/WillowWood/snake_slaying.lua b/server/Quests/WillowWood/snake_slaying.lua new file mode 100644 index 000000000..acd014f79 --- /dev/null +++ b/server/Quests/WillowWood/snake_slaying.lua @@ -0,0 +1,50 @@ +--[[ + Script Name : Quests/WillowWood/snake_slaying.lua + Script Purpose : Handles the quest, "Snake Slaying" + Script Author : Scatman + Script Date : 2009.09.27 + + Zone : The Willow Wood + Quest Giver: Hunter Vannil + Preceded by: None + Followed by: None +--]] + + +function Init(Quest) + AddQuestStepKill(Quest, 1, "I must kill some rock adders.", 8, 100, "I need to kill eight rock adders in the Forest Ruins.", 611, 1960018) + AddQuestStepCompleteAction(Quest, 1, "Step1_Complete_KilledSnakes") +end + +function Accepted(Quest, QuestGiver, Player) + FaceTarget(QuestGiver, Player) + conversation = CreateConversation() + + PlayFlavor(QuestGiver, "voiceover/english/hunter_vannil/qey_village05/huntervannil002.mp3", "", "", 2784879734, 2610513967, Player) + AddConversationOption(conversation, "Thanks, this shouldn't be too difficult a hunt.") + StartConversation(conversation, QuestGiver, Player, "Good. Killing the deadly adders shall make our village a safer place. Good luck on your hunt. Please be careful.") +end + +function Declined(Quest, QuestGiver, Player) +end + +function Step1_Complete_KilledSnakes(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 1, "I have killed some rock adders.") + UpdateQuestZone(Quest, "The Willow Wood") + + AddQuestStepChat(Quest, 2, "I should return to Hunter Vannil.", 1, "I need to kill eight rock adders in the Forest Ruins.", 0, 2370032) + AddQuestStepCompleteAction(Quest, 2, "Quest_Complete") +end + +function Quest_Complete(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 2, "I have spoken with Hunter Vannil.") + UpdateQuestTaskGroupDescription(Quest, 1, "I killed eight rock adders.") + UpdateQuestDescription(Quest, "I eliminated eight rock adders to make the area safer for the populace of the Willow Wood.") + GiveQuestReward(Quest, Player) +end + +function Reload(Quest, QuestGiver, Player, Step) + if Step == 1 then + Step1_Complete_KilledSnakes(Quest, QuestGiver, Player) + end +end \ No newline at end of file diff --git a/server/Quests/WillowWood/tribute_flowers.lua b/server/Quests/WillowWood/tribute_flowers.lua new file mode 100644 index 000000000..d513a6ac3 --- /dev/null +++ b/server/Quests/WillowWood/tribute_flowers.lua @@ -0,0 +1,69 @@ +--[[ + Script Name : Quests/WillowWood/tribute_flowers.lua + Script Purpose : Handles the quest, "Tribute Flowers" + Script Author : Scatman + Script Date : 2009.01.17 + + Zone : The Willow Wood + Quest Giver: Aelis + Preceded by: A Task for Davyn (a_task_for_davyn.lua) + Followed by: A Tribute to Ulinir (a_tribute_to_ulinir.lua) +--]] + + +function Init(Quest) + -- Tribute Flower + AddQuestStepObtainItem(Quest, 1, "I need to pick some flowers from the Willow Wood and bring them to Aelis.", 8, 100, "I need to collect some flowers for Davyn's tribute and return them to Aelis.", 1952, 14666) + AddQuestStepCompleteAction(Quest, 1, "Step1_Complete_GotFlowers") +end + +function Accepted(Quest, QuestGiver, Player) + FaceTarget(QuestGiver, Player) + conversation = CreateConversation() + + PlayFlavor(QuestGiver, "voiceover/english/tutorial_revamp/aelis/qey_village05/quests/aelis/aelis021b.mp3", "", "", 810591684, 4247178806, Player) + AddConversationOption(conversation, "All right, I will return.") + StartConversation(conversation, QuestGiver, Player, "By the time you have collected enough, I am sure I will have written the tribute.") +end + +function Declined(Quest, QuestGiver, Player) +end + +function Step1_Complete_GotFlowers(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 1, "I have picked the flowers.") + + AddQuestStepChat(Quest, 2, "I need to take these flowers Aelis in the Willow Wood.", 1, "I need to collect some flowers for Davyn's tribute and return them to Aelis.", 0, 2370038) + AddQuestStepCompleteAction(Quest, 2, "Step2_Complete_TalkedToAelis") +end + +function Step2_Complete_TalkedToAelis(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 2, "I have given Aelis the flowers she requires.") + + -- remove Tribute Flowers + while HasItem(Player, 14666) do + RemoveItem(Player, 14666) + end + + -- summon Tribute for Ulinir + if not HasItem(Player, 14667, 1) then + SummonItem(Player, 14667, 1) + end + + AddQuestStepChat(Quest, 3, "I need to take the completed tribute to Davyn Thornbranch in Willow Wood.", 1, "I need to collect some flowers for Davyn's tribute and return them to Aelis.", 0, 2370033) + AddQuestStepCompleteAction(Quest, 3, "quest_complete") +end + +function quest_complete(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 3, "I have taken the tribute to Davyn.") + UpdateQuestTaskGroupDescription(Quest, 1, "I have given the flowers to Aelis.") + UpdateQuestDescription(Quest, "I gave Aelis the flowers she requested. She will use them to help build Davyn's tribute.") + GiveQuestReward(Quest, Player) +end + +function Reload(Quest, QuestGiver, Player, Step) + if Step == 1 then + Step1_Complete_GotFlowers(Quest, QuestGiver, Player) + elseif Step == 2 then + Step2_Complete_TalkedToAelis(Quest, QuestGiver, Player) + end +end \ No newline at end of file diff --git a/server/Quests/WillowWood/tribute_leaves.lua b/server/Quests/WillowWood/tribute_leaves.lua new file mode 100644 index 000000000..7dab3b696 --- /dev/null +++ b/server/Quests/WillowWood/tribute_leaves.lua @@ -0,0 +1,64 @@ +--[[ + Script Name : Quests/WillowWood/tribute_leaves.lua + Script Purpose : Handles the quest, "Tribute Leaves" + Script Author : Scatman + Script Date : 2009.09.26 + + Zone : The Willow Wood + Quest Giver: Aelis + Preceded by: Offering Help (offering_help.lua) + Followed by: A Task for Davyn (a_task_for_davyn.lua) +--]] + +function Init(Quest) + -- Tribute Leaf + AddQuestStepObtainItem(Quest, 1, "I need to collect some leaves from the Dewdrop bushes in Willow Wood and bring them to Aelis.", 6, 100, "I need to collect some leaves for Davyn's tribute and return them to Aelis.", 2098, 14668) + AddQuestStepCompleteAction(Quest, 1, "Step1_Complete_GotLeaves") +end + +function Accepted(Quest, QuestGiver, Player) + FaceTarget(QuestGiver, Player) + conversation = CreateConversation() + + PlayFlavor(QuestGiver, "voiceover/english/tutorial_revamp/aelis/qey_village05/quests/aelis/aelis006a.mp3", "", "", 1165853979, 3023910277, Player) + AddConversationOption(conversation, "All right.") + StartConversation(conversation, QuestGiver, Player, "As you collect them I will determine what will next be required for the tribute.") +end + +function Declined(Quest, QuestGiver, Player) +end + +function Step1_Complete_GotLeaves(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 1, "I have collected the leaves.") + + AddQuestStepChat(Quest, 2, "I need to take these leaves back to Aelis in the Willow Wood.", 1, "I need to collect some leaves for Davyn's tribute and return them to Aelis.", 0, 2370038) + AddQuestStepCompleteAction(Quest, 2, "Step2_Complete_TalkedToAelis") +end + +function Step2_Complete_TalkedToAelis(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 2, "I have given Aelis the leaves she requires.") + + -- Tribute Leaf + while HasItem(Player, 14668) do + RemoveItem(Player, 14668) + end + + AddQuestStepChat(Quest, 3, "I need to speak with Davyn and do a task for him.", 1, "I need to collect some leaves for Davyn's tribute and return them to Aelis.", 0, 2370033) + AddQuestStepCompleteAction(Quest, 3, "Quest_Complete") +end + +function Quest_Complete(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 3, "I have collected the leaves.") + UpdateQuestTaskGroupDescription(Quest, 1, "I have collected the leaves.") + + UpdateQuestDescription(Quest, "I have given Aelis the leaves she asked for and spoken with Davyn. While Aelis works on the first part of the tribute, she has asked that I do a favor for Davyn.") + GiveQuestReward(Quest, Player) +end + +function Reload(Quest, QuestGiver, Player, Step) + if Step == 1 then + Step1_Complete_GotLeaves(Quest, QuestGiver, Player) + elseif Step == 2 then + Step2_Complete_TalkedToAelis(Quest, QuestGiver, Player) + end +end \ No newline at end of file diff --git a/server/Quests/WillowWood/wisdom_in_the_wild.lua b/server/Quests/WillowWood/wisdom_in_the_wild.lua new file mode 100644 index 000000000..b31421f60 --- /dev/null +++ b/server/Quests/WillowWood/wisdom_in_the_wild.lua @@ -0,0 +1,106 @@ +--[[ + Script Name : Quests/WillowWood/wisdom_in_the_wild.lua + Script Purpose : Handles the quest, "Wisdom in the Wild" + Script Author : Scatman + Script Date : 2009.09.26 + + Zone : The Willow Wood + Quest Giver: Daelyn Twinstar + Preceded by: A Joined Heritage (a_joined_heritage.lua) + Followed by: A Task for Daelyn (a_task_for_daelyn.lua) +--]] + +local WisdomInTheWind = 220 + +function Init(Quest) + AddQuestStep(Quest, 1, "I need to find page 3.", 1, 100, "I need to collect 5 missing pages from Daelyn's essay.", 0) + AddQuestStep(Quest, 2, "I need to find page 4.", 1, 100, "I need to collect 5 missing pages from Daelyn's essay.", 0) + AddQuestStep(Quest, 3, "I need to find page 7.", 1, 100, "I need to collect 5 missing pages from Daelyn's essay.", 0) + AddQuestStep(Quest, 4, "I need to find page 11.", 1, 100, "I need to collect 5 missing pages from Daelyn's essay.", 0) + AddQuestStep(Quest, 5, "I need to find page 12.", 1, 100, "I need to collect 5 missing pages from Daelyn's essay.", 0) + AddQuestStepCompleteAction(Quest, 1, "Step1_Complete_FoundPage3") + AddQuestStepCompleteAction(Quest, 2, "Step2_Complete_FoundPage4") + AddQuestStepCompleteAction(Quest, 3, "Step3_Complete_FoundPage7") + AddQuestStepCompleteAction(Quest, 4, "Step4_Complete_FoundPage11") + AddQuestStepCompleteAction(Quest, 5, "Step5_Complete_FoundPage12") +end + +function Accepted(Quest, QuestGiver, Player) + FaceTarget(QuestGiver, Player) + conversation = CreateConversation() + + PlayFlavor(QuestGiver, "voiceover/english/tutorial_revamp/daelyn_twinstar/qey_village05/quests/daelyn_twinstar/daelyn_twinstar025.mp3", "", "", 3754562839, 1931475436, Player) + AddConversationOption(conversation, "I'm sure I can find them.") + StartConversation(conversation, QuestGiver, Player, "Wonderful, I knew I could count on you. This will save me a lot of time. It looks like there are five pages missing, assuming they're not destroyed. They could be anywhere in the village by now.") +end + +function Declined(Quest, QuestGiver, Player) +end + +function Step1_Complete_FoundPage3(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 1, "I found page 3.") + + if QuestIsComplete(Player, WisdomInTheWind) then + FoundAllPages(Quest, QuestGiver, Player) + end +end + +function Step2_Complete_FoundPage4(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 2, "I found page 4.") + + if QuestIsComplete(Player, WisdomInTheWind) then + FoundAllPages(Quest, QuestGiver, Player) + end +end + +function Step3_Complete_FoundPage7(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 3, "I found page 7.") + + if QuestIsComplete(Player, WisdomInTheWind) then + FoundAllPages(Quest, QuestGiver, Player) + end +end + +function Step4_Complete_FoundPage11(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 4, "I found page 11.") + + if QuestIsComplete(Player, WisdomInTheWind) then + FoundAllPages(Quest, QuestGiver, Player) + end +end + +function Step5_Complete_FoundPage12(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 5, "I found page 12.") + + if QuestIsComplete(Player, WisdomInTheWind) then + FoundAllPages(Quest, QuestGiver, Player) + end +end + +function FoundAllPages(Quest, QuestGiver, Player) + UpdateQuestTaskGroupDescription(Quest, 1, "I have collected the 5 missing pages from Daelyn's essay.") + + AddQuestStepChat(Quest, 6, "I must speak with Daelyn.", 1, "Now that I have collected the missing pages I need to return to Daelyn and speak to him about Milo and Lyssia.", 0, 2370037) + AddQuestStepCompleteAction(Quest, 6, "Quest_Complete") +end + +function Quest_Complete(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 6, "I have spoken with Daelyn.") + UpdateQuestTaskGroupDescription(Quest, 2, "I have spoken with Daelyn.") + UpdateQuestDescription(Quest, "I have found the missing pages of Daelyn Twinstar's essay and we have spoken of Milo and Lyssia.") + GiveQuestReward(Quest, Player) +end + +function Reload(Quest, QuestGiver, Player, Step) + if Step == 1 then + Step1_Complete_FoundPage3(Quest, QuestGiver, Player) + elseif Step == 2 then + Step2_Complete_FoundPage4(Quest, QuestGiver, Player) + elseif Step == 3 then + Step3_Complete_FoundPage7(Quest, QuestGiver, Player) + elseif Step == 4 then + Step4_Complete_FoundPage11(Quest, QuestGiver, Player) + elseif Step == 5 then + Step5_Complete_FoundPage12(Quest, QuestGiver, Player) + end +end \ No newline at end of file diff --git a/server/Quests/Zek/reliving_the_past.lua b/server/Quests/Zek/reliving_the_past.lua new file mode 100644 index 000000000..4241ba687 --- /dev/null +++ b/server/Quests/Zek/reliving_the_past.lua @@ -0,0 +1,95 @@ +--[[ + Script Name : reliving_the_past.lua + Script Purpose : Handles the quest, "Reliving the Past" + Script Author : Jabantiz + Script Date : 6/19/2018 + Script Notes : + + Zone : Zek, the Orcish Wastes + Quest Giver : + Preceded by : None + Followed by : None +--]] + + +function Init(Quest) + AddQuestStepLocation(Quest, 1, "I need to check whether Tallon grunts are still in the hills just beyond the docks.", 10, "I will do the things Ismena Cellus requested.", 11, 496.05, -40.71, 208.04) + AddQuestStepCompleteAction(Quest, 1, "Step1Complete") +end + +function Accepted(Quest, QuestGiver, Player) + -- Add dialog here for when the quest is accepted + FaceTarget(QuestGiver, Player) + local con = CreateConversation() + + AddConversationOption(con, "I'll be back.") + StartConversation(con, QuestGiver, Player, "You're very kind. I recall that after leaving the safety of the docks, we were set upon by Tallon orcs. While many orcs seem to favor working in groups, the Tallon grunts preferred one-on-one battles. Would you check whether they are still along the hills just outside the fort?") +end + +function Declined(Quest, QuestGiver, Player) + -- Add dialog here for when the quest is declined +end + +function Deleted(Quest, QuestGiver, Player) + -- Remove any quest specific items here when the quest is deleted +end + +function Step1Complete(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 1, "I've seen the orc's encampment.") + + AddQuestStepChat(Quest, 2, "I need to return to Ismena Cellus on the Warship Dock in Zek.", 1, "I will do the things Ismena Cellus requested.", 11, 1900056) + AddQuestStepCompleteAction(Quest, 2, "Step2Complete") +end + +function Step2Complete(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 2, "I've spoken with Ismena Cellus.") + + AddQuestStepKill(Quest, 3, "I will slay some Tallon grunts for Ismena's sake.", 10, 100, "I will do the things Ismena Cellus requested.", 611, 1900020) + AddQuestStepCompleteAction(Quest, 3, "Step3Complete") +end + +function Step3Complete(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 3, "I have slain some Tallon grunts.") + + AddQuestStepChat(Quest, 4, "I need to return to Ismena Cellus on the Warship Dock in Zek.", 1, "I will do the things Ismena Cellus requested.", 11, 1900056) + AddQuestStepCompleteAction(Quest, 4, "Step4Complete") +end + +function Step4Complete(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 4, "I've spoken with Ismena Cellus.") + + AddQuestStep(Quest, 5, "I need to visit the Grove of Stones in Zek.", 1, 100, "I will do the things Ismena Cellus requested.", 11) + AddQuestStepCompleteAction(Quest, 5, "Step5Complete") +end + +function Step5Complete(Quest, QuestGiver, Player) + UpdateQuestStepDescription(Quest, 5, "I've seen the Grove of Stones.") + + AddQuestStepChat(Quest, 6, "I need to return to Ismena Cellus on the Warship Dock in Zek.", 1, "I will do the things Ismena Cellus requested.", 11, 1900056) + AddQuestStepCompleteAction(Quest, 6, "QuestComplete") +end + +function QuestComplete(Quest, QuestGiver, Player) + -- The following UpdateQuestStepDescription and UpdateTaskGroupDescription are not needed, parser adds them for completion in case stuff needs to be moved around + UpdateQuestStepDescription(Quest, 6, "I've spoken with Ismena Cellus.") + UpdateQuestTaskGroupDescription(Quest, 1, "I've done what I could for Ismena Cellus.") + + UpdateQuestDescription(Quest, "I've done what Ismena requested. Hopefully, she'll now be able to get her memoirs written.") + GiveQuestReward(Quest, Player) +end + +function Reload(Quest, QuestGiver, Player, Step) + if Step == 1 then + Step1Complete(Quest, QuestGiver, Player) + elseif Step == 2 then + Step2Complete(Quest, QuestGiver, Player) + elseif Step == 3 then + Step3Complete(Quest, QuestGiver, Player) + elseif Step == 4 then + Step4Complete(Quest, QuestGiver, Player) + elseif Step == 5 then + Step5Complete(Quest, QuestGiver, Player) + elseif Step == 6 then + QuestComplete(Quest, QuestGiver, Player) + end +end diff --git a/server/SpawnScripts/Antonica/AGriffonTamer.lua b/server/SpawnScripts/Antonica/AGriffonTamer.lua new file mode 100644 index 000000000..ad13cf27c --- /dev/null +++ b/server/SpawnScripts/Antonica/AGriffonTamer.lua @@ -0,0 +1,128 @@ +--[[ + Script Name : SpawnScripts/Antonica/AGriffonTamer.lua + Script Purpose : a griffon tamer (2490000) + Script Author : Neatz09 + Script Date : 2/5/19 + Script Notes : +--]] + +local GriffonEggs = 112 + +function spawn(NPC) + ProvidesQuest(NPC, GriffonEggs) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + if CanReceiveQuest(Spawn, GriffonEggs) then + -- Start Quest + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_2_1052.mp3", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "I was wondering if there were any errands you needed help with.", "dlg_0_1") + AddConversationOption(conversation, "I would like to travel.", "dlg_1_1") + AddConversationOption(conversation, "I am fine staying here, thanks.") + StartConversation(conversation, NPC, Spawn, "Greetings traveler, how can I assist you today?") + elseif GetQuestStep(Spawn, GriffonEggs) == 2 then + -- Turn in the quest + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_1_1004.mp3", "", "", 0, 0, Spawn) + SetStepComplete(Spawn, GriffonEggs, 2) + AddConversationOption(conversation, "I hope she grows up healthy and strong!") + StartConversation(conversation, NPC, Spawn, "Oh, my, that's a gorgeous egg! Let me just put it down right over here. Our thanks, it's going to be rough for the handlers to raise all these!") + else + -- Finished Quest + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_2_1042.mp3", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "I would like to travel.", "dlg_1_1") + AddConversationOption(conversation, "Nowhere.") + StartConversation(conversation, NPC, Spawn, "Greetings traveler, how can I assist you today?") + end +end + +function dlg_0_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "They certainly have. These look very sturdy, but I don't see many griffins about.", "dlg_0_2") + StartConversation(conversation, NPC, Spawn, "It's been a real treat watching this tower be built by all the artisans. They've done a marvelous job getting it ready for our flying friends.") +end + +function dlg_0_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "So if you had some more griffons, the scheduling would be better?", "dlg_0_3") + AddConversationOption(conversation, "This sounds like a scheduling problem I don't want anything to do with.") + StartConversation(conversation, NPC, Spawn, "These towers were built very fast, and we were unable to get the griffin stock up to what it should be. This has made scheduling flights very difficult.") +end + +function dlg_0_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "Sure, sounds like a deal.", "dlg_0_4") + StartConversation(conversation, NPC, Spawn, "Oh, certainly. But they've got to be trained properly from birth, really. I'll tell you what, if you grab an unhatched griffin egg and return it to any of us tamers, you will be rewarded handsomely. How's that sound?") +end + +function dlg_0_4(NPC, Spawn) + OfferQuest(NPC, Spawn, GriffonEggs) +end + +function dlg_1_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + local con = CreateConversation() + + if GetSpawnLocationID(NPC) == 182250 then + AddConversationOption(con, "To Steppes Station.", "QeynosToSteppes") + AddConversationOption(con, "To Oracle Station.", "QeynosToOracle") + elseif GetSpawnLocationID(NPC) == 182249 then + AddConversationOption(con, "To Qeynos Station.", "OracleToQeynos") + AddConversationOption(con, "To Steppes Station.", "OracleToSteppes") + elseif GetSpawnLocationID(NPC) == 182248 then + AddConversationOption(con, "To Qeynos Station.", "SteppesToQeynos") + AddConversationOption(con, "To Oracle Station.", "SteppesToOracle") + else + PlayFlavor(NPC, "", "Not implemented yet!", "cry", 0, 0, Spawn) + end + AddConversationOption(con, "Nowhere.") + StartConversation(con, NPC, Spawn, "Where to?") +end + +function QeynosToSteppes(NPC, Spawn) + StartAutoMount(Spawn, 84) + SetMount(Spawn, 225) +end + +function QeynosToOracle(NPC, Spawn) + StartAutoMount(Spawn, 85) + SetMount(Spawn, 225) +end + +function OracleToQeynos(NPC, Spawn) + StartAutoMount(Spawn, 88) + SetMount(Spawn, 225) +end + +function OracleToSteppes(NPC, Spawn) + StartAutoMount(Spawn, 89) + SetMount(Spawn, 225) +end + +function SteppesToQeynos(NPC, Spawn) + StartAutoMount(Spawn, 86) + SetMount(Spawn, 225) +end + +function SteppesToOracle(NPC, Spawn) + StartAutoMount(Spawn, 87) + SetMount(Spawn, 225) +end + +--[[ raw_conversations + PlayFlavor(NPC, "", "Fun, fun, fun! This big old tower, built for griffons, and yet... there just don't seem to be any around. Thinking about helping us out?", "", 1689589577, 4560189, Spawn) + PlayFlavor(NPC, "", "You can scramble 'em, boil 'em, fry 'em... oh, wait... were we talking about griffon eggs or chicken eggs?", "", 1689589577, 4560189, Spawn) + PlayFlavor(NPC, "", "I say... you haven't seen any griffon eggs around, have you? We sure could use some!", "", 1689589577, 4560189, Spawn) +--]] diff --git a/server/SpawnScripts/Antonica/AroofWolfchaser.lua b/server/SpawnScripts/Antonica/AroofWolfchaser.lua new file mode 100644 index 000000000..b23232c03 --- /dev/null +++ b/server/SpawnScripts/Antonica/AroofWolfchaser.lua @@ -0,0 +1,78 @@ +--[[ + Script Name : SpawnScripts/Antonica/AroofWolfchaser.lua + Script Purpose : Aroof Wolfchaser + Script Author : geordie0511 + Script Date : 2019.03.18 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +local Killing = 466 + +function spawn(NPC) + SetPlayerProximityFunction(NPC, 10, "InRange", "LeaveRange") +end + +function respawn(NPC) + spawn(NPC) +end + +function InRange(NPC, Spawn) + local choice = math.random(1,4) + if choice == 1 then + PlayFlavor(NPC, "", "What? Where?", "confused", 1689589577, 4560189, Spawn) + elseif choice == 2 then + PlayFlavor(NPC, "", "Hic...", "", 1689589577, 4560189, Spawn) + elseif choice == 3 then + PlayFlavor(NPC, "", "Urrp, ello there, why are there two of you...", "squeal", 1689589577, 4560189, Spawn) + elseif choice == 4 then + PlayFlavor(NPC, "", "Hail to you too!", "wave", 1689589577, 4560189, Spawn) + else + end +end + +function LeaveRange(NPC, Spawn) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + if GetQuestStep(Spawn, Killing) == 1 then + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_2_1002.mp3", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Have some soup.", "dlg_2_1") + AddConversationOption(conversation, "Eww...") + StartConversation(conversation, NPC, Spawn, "Hail!") + else + AddConversationOption(conversation, "Eww...") + StartConversation(conversation, NPC, Spawn, "Hail!") + end +end + +function dlg_2_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Sober up.", "dlg_2_2") + StartConversation(conversation, NPC, Spawn, "Thanks!") + SetStepComplete(Spawn, Killing, 1) +end + +function dlg_2_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Sober up.", "dlg_2_3") + StartConversation(conversation, NPC, Spawn, "What?!") +end + +function dlg_2_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Okay...", "dlg_2_4") + StartConversation(conversation, NPC, Spawn, "Yeah!") + SetStepComplete(Spawn, Achoo, 2) +end diff --git a/server/SpawnScripts/Antonica/BlartonBlumble.lua b/server/SpawnScripts/Antonica/BlartonBlumble.lua new file mode 100644 index 000000000..6843786a6 --- /dev/null +++ b/server/SpawnScripts/Antonica/BlartonBlumble.lua @@ -0,0 +1,166 @@ +--[[ + Script Name : SpawnScripts/Antonica/BlartonBlumble.lua + Script Purpose : Blarton Blumble + Script Author : geordie0511 + Script Date : 2019.01.29 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +local Lucky = 457 +local Care = 467 + +function spawn(NPC) +end + +function respawn(NPC) + spawn(NPC) +end + +function InRange(NPC, Spawn) + local choice = math.random(1,5) + if choice == 1 then + PlayFlavor(NPC, "", "I'll just have a sip for now...", "", 1689589577, 4560189, Spawn) + elseif choice == 2 then + PlayFlavor(NPC, "", "...", "", 1689589577, 4560189, Spawn) + elseif choice == 3 then + PlayFlavor(NPC, "", "Ugh... just breathing is painful.", "", 1689589577, 4560189, Spawn) + elseif choice == 4 then + PlayFlavor(NPC, "", "Hello again! Please hurry back when you're done.", "", 1689589577, 4560189, Spawn) + elseif choice == 5 then + PlayFlavor(NPC, "", "Thank you so much for all of your help! I can't wait to get back to fishing again.", "", 1689589577, 4560189, Spawn) + else + end +end + +function LeaveRange(NPC, Spawn) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_1_1040.mp3", "", "", 0, 0, Spawn) + if GetQuestStep(Spawn, Care) == 1 then + AddConversationOption(conversation, "Oh, it's not from me.", "dlg_27_2") + StartConversation(conversation, NPC, Spawn, "Really? Why thank you, you shouldn't have.") + else + AddConversationOption(conversation, "Don't worry about it. It was my pleasure.", "dlg_3_1") + StartConversation(conversation, NPC, Spawn, "Great. Thank you kindly. You have been very helpful to me. Hopefully I can repay the favor sometime.") + end +end + +function dlg_7_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Yes, I'd be happy to help again.", "dlg_7_2") + AddConversationOption(conversation, "I think I've helped you enough already, Blarton.") + StartConversation(conversation, NPC, Spawn, "His name is Ol' One Eye. He's been living in these waters for some time and has eluded many a would-be fisherman. Can you go look for him and let me know if he's still out there? I just can't stop wonderin' where he is.") +end + +function dlg_8_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "See you soon!", "dlg_8_3") + StartConversation(conversation, NPC, Spawn, "Thanks again, friend. Please, don't try to catch or harm him. I've been waiting a long time to catch up with him and I want to catch him myself. Good luck with the search!") +end + +function dlg_9_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Really?", "dlg_9_2") + AddConversationOption(conversation, "I'm sorry, but I have pressing business elsewhere.") + StartConversation(conversation, NPC, Spawn, "Ah, I can't believe I was such a darn fool. How'd I manage to hurt my leg and lose my best fishin' lure all in one day? There I was up on the coast, north of here, having a nice walk before settling down for a long day of fishin' when I slipped and hurt my poor leg.") +end + +function dlg_9_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Sure, I'd be happy to help.", "dlg_9_3") + AddConversationOption(conversation, "No thanks.") + StartConversation(conversation, NPC, Spawn, "It hurt somethin' fierce and I only barely managed to drag myself back here. The next morning I found I could stand on it okay, but not for too long. I thought I'd try to do some fishin' here at this nice pond since I'm stuck until I can heal enough to get back to my favorite fishin' holes. Just as I was getting set up, I realized I'd lost my favorite lure! I must have dropped it somewhere up on the beach north of here near where I fell. With my leg like this, I can't go and look for it myself. I don't suppose you might be able to help find it for me?") +end + +function dlg_9_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Okay.", "dlg_9_4") + StartConversation(conversation, NPC, Spawn, "Thank you very much! As I was saying, it should be somewhere near the beach to the north of here. Good luck!") +end + +function dlg_11_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Shouldn't be a problem. I'll see how it goes.", "dlg_11_2") + AddConversationOption(conversation, "I'm not in the mood to deal with more gnolls right now.") + StartConversation(conversation, NPC, Spawn, "My cousin had a tin of bait for me, but he left it sitting at an abandoned camp to the south of here while he was out and about. Now I hear some gnolls have moved in. Do you think you can pick up the bait for me?") +end + +function dlg_12_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "I'll be back as soon as I can.", "dlg_12_3") + StartConversation(conversation, NPC, Spawn, "Thank you, and good luck.") +end + +function dlg_21_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Alright.", "dlg_21_2") + AddConversationOption(conversation, "Sorry, I can't.") + StartConversation(conversation, NPC, Spawn, "Oh, thank you so much. If I can't get out there and fish, at least I can find out what's going on. Here, let me see that journal you've got there and I'll write down all my favorite spots for you. Mind you, I'd take it as a favor if you don't go showin' this to anyone else. These spots are nice and quiet and I'd like to keep 'em that way.") +end + +function dlg_22_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Okay. I'll be back soon.", "dlg_22_3") + StartConversation(conversation, NPC, Spawn, "I couldn't bear to go through all this time healing only to finally get back out there and have a crowd of people fishin' in my spot.") +end + +------------ Care -------------------- + +function dlg_27_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Uh, your good friend from the bar.", "dlg_27_3") + StartConversation(conversation, NPC, Spawn, "Oh? Who is it from?") +end + +function dlg_27_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Yeah, her. I delivered it for her. Drink up!", "dlg_28_1") + StartConversation(conversation, NPC, Spawn, "Matsy? She's my cousin, she's so nice!") +end + +function dlg_28_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "You're welcome.") + StartConversation(conversation, NPC, Spawn, "Thank you so much!") + SetStepComplete(Spawn, Care, 1) +end \ No newline at end of file diff --git a/server/SpawnScripts/Antonica/CaptainBeltho.lua b/server/SpawnScripts/Antonica/CaptainBeltho.lua new file mode 100644 index 000000000..31ce0a1dd --- /dev/null +++ b/server/SpawnScripts/Antonica/CaptainBeltho.lua @@ -0,0 +1,60 @@ +--[[ + Script Name : SpawnScripts/Antonica/CaptainBeltho.lua + Script Purpose : Captain Beltho + Script Author : geordie0511 + Script Date : 2019.03.19 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +local Gnoll = 471 + +function spawn(NPC) + SetPlayerProximityFunction(NPC, 10, "InRange", "LeaveRange") +end + +function respawn(NPC) + spawn(NPC) +end + +function InRange(NPC, Spawn) +end + +function LeaveRange(NPC, Spawn) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/captain_beltho/antonica/captainbeltho000.mp3", "", "", 3094633969, 1366545559, Spawn) + if GetQuestStep(Spawn, Gnoll) == 1 then + PlayFlavor(NPC, "voiceover/english/captain_beltho/antonica/captainbeltho001.mp3", "", "", 637123636, 1668683266, Spawn) + AddConversationOption(conversation, "I don't want to go back to Eitoa empty-handed. ", "dlg_9_2") + AddConversationOption(conversation, "Fine. I'll do whatever it takes.", "dlg_9_2") + StartConversation(conversation, NPC, Spawn, "I have no report, because there's nothing to report. We've had no luck finding the hidden entrance to the gnolls' lair. I need more time and more men to track them down.") + SetStepComplete(Spawn, Gnoll, 1) + elseif GetQuestStep(Spawn, Gnoll) == 3 then + AddConversationOption(conversation, "It seems the gnolls do indeed have a lair where you mentioned.", "dlg_0_1") + AddConversationOption(conversation, "I'm not on official business.") + StartConversation(conversation, NPC, Spawn, "On your way -- unless you're here on official business. I've got enough work here for ten men, and only two at my disposal!") + SetStepComplete(Spawn, Gnoll, 3) + end +end + +function dlg_0_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/captain_beltho/antonica/captainbeltho003.mp3", "", "", 4118902248, 2953766683, Spawn) + AddConversationOption(conversation, "Thank you for the report. I will return it to Eitoa at once.") + StartConversation(conversation, NPC, Spawn, "Well done indeed! I'll finish the report, along with your description of the area, and you may take it to Captain Eitoa. ") +end + +function dlg_9_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/captain_beltho/antonica/captainbeltho002.mp3", "", "", 1781496850, 130411923, Spawn) + AddConversationOption(conversation, "I'll have the place searched out as quickly as possible.") + StartConversation(conversation, NPC, Spawn, "I appreciate your help. I'd like you to search the most southern lands. One of our scouts mentioned seeing gnolls in the area, and another scout mentioned a number of bridges connecting the islands. It's probably another dead end, but if you do find the gnoll lair, return to me and I'll finish the report.") +end \ No newline at end of file diff --git a/server/SpawnScripts/Antonica/CaptainEitoa.lua b/server/SpawnScripts/Antonica/CaptainEitoa.lua new file mode 100644 index 000000000..84b5c52c4 --- /dev/null +++ b/server/SpawnScripts/Antonica/CaptainEitoa.lua @@ -0,0 +1,113 @@ +--[[ + Script Name : SpawnScripts/Antonica/CaptainEitoa.lua + Script Purpose : Captain Eitoa + Script Author : geordie0511 + Script Date : 2019.03.19 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +local Keep = 470 +local Gnoll = 471 +local Captain = 472 + +function spawn(NPC) + SetPlayerProximityFunction(NPC, 10, "InRange", "LeaveRange") + ProvidesQuest(NPC, Keep) + ProvidesQuest(NPC, Gnoll) + ProvidesQuest(NPC, Captain) +end + +function respawn(NPC) + spawn(NPC) +end + +function InRange(NPC, Spawn) +end + +function LeaveRange(NPC, Spawn) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/captain_eitoa/antonica/captaineitoa000.mp3", "", "", 1089362944, 4215517300, Spawn) + if GetQuestStep(Spawn, Keep) == 2 then + PlayFlavor(NPC, "voiceover/english/captain_eitoa/antonica/captaineitoa003.mp3", "", "", 1980389994, 2821940048, Spawn) + AddConversationOption(conversation, "I was happy to be of assistance.") + StartConversation(conversation, NPC, Spawn, "Good. I worry about our outposts, especially the ones that... well, let's just say I'm relieved. At any rate, here's a bit of coin from the city's coffers. Qeynos thanks you for your service.") + SetStepComplete(Spawn, Keep, 2) + elseif GetQuestStep(Spawn, Gnoll) == 4 then + AddConversationOption(conversation, "Beltho's report, as you requested.", "dlg_18_1") + AddConversationOption(conversation, "Ok, thanks anyway.") + StartConversation(conversation, NPC, Spawn, "I wouldn't mind chatting with you in Irontoe's East, but here I've got work to do.") + elseif GetQuestStep(Spawn, Captain) == 2 then + SetStepComplete(Spawn, Captain, 2) + elseif HasCompletedQuest(Spawn, Keep) == false and HasQuest(Spawn, Keep) == false then + PlayFlavor(NPC, "voiceover/english/captain_eitoa/antonica/captaineitoa001.mp3", "", "", 1114858162, 289977028, Spawn) + AddConversationOption(conversation, "It is the least I can do for Qeynos.", "dlg_2_2") + AddConversationOption(conversation, "That sounds a bit too far for me.") + StartConversation(conversation, NPC, Spawn, "There is something you can do. I've posted a guard at the Keep of the Ardent Needle, and he hasn't been reporting to me as often as I'd like. Would you go inspect the keep and make sure everything is in order?") + elseif HasCompletedQuest(Spawn, Gnoll) == false and HasQuest(Spawn, Gnoll) == false and HasCompletedQuest(Spawn, Keep) then + PlayFlavor(NPC, "voiceover/english/captain_eitoa/antonica/captaineitoa004.mp3", "", "", 14052338, 3802502153, Spawn) + AddConversationOption(conversation, "I suppose I can do that.", "dlg_4_2") + AddConversationOption(conversation, "Let someone else deal with it, I'm not interested.") + StartConversation(conversation, NPC, Spawn, "I do. I need someone to check with Captain Beltho at Gnollslayer Keep and return with his report about the gnolls. I hope he's made progress since the last one.") + elseif HasCompletedQuest(Spawn, Captain) == false and HasQuest(Spawn, Captain) == false and HasCompletedQuest(Spawn, Gnoll) then + OfferQuest(NPC, Spawn, Captain) + end +end + +function Quest1(NPC, Spawn) + OfferQuest(NPC, Spawn, Keep) +end + +function Quest2(NPC, Spawn) + OfferQuest(NPC, Spawn, Gnoll) +end + +--------------- Keep + +function dlg_2_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/captain_eitoa/antonica/captaineitoa002.mp3", "", "", 2766073172, 817198256, Spawn) + AddConversationOption(conversation, "I'll return after I've performed the inspection.", "Quest1") + StartConversation(conversation, NPC, Spawn, "Go then. You'll find the Keep on the north side of the ridge, just this side of the Tower of the Oracles. It's one of the few keeps in pristine condition.") +end + +--------------- Quest2 + + +function dlg_4_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/captain_eitoa/antonica/captaineitoa005.mp3", "", "", 1672181328, 1405369900, Spawn) + AddConversationOption(conversation, "I'll return when I'm finished.", "Quest2") + StartConversation(conversation, NPC, Spawn, "It's a fair distance, but not hard to find. Take the south path around the mountain range that splits Antonica. Once you cross the bridge at the far side of the valley, follow the river a hundred cogs or so, then turn east until you see a small keep with a moat. Captain Beltho should be there. If he's not, I'll want to know why he's not at his post.") +end + +---- Gnoll + +function dlg_18_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/captain_eitoa/antonica/captaineitoa006.mp3", "", "", 3813922311, 2543607309, Spawn) + AddConversationOption(conversation, "I suppose I was lucky to some extent. ", "dlg_18_2") + StartConversation(conversation, NPC, Spawn, "Give me a moment to read over this... Finally, some real progress! Beltho mentions your involvement with finding the hidden entrance to the gnoll lair. Well done!") +end + +function dlg_18_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/captain_eitoa/antonica/captaineitoa007.mp3", "", "", 193114966, 1655403283, Spawn) + AddConversationOption(conversation, "Thank you very much. Once again, I am happy to have been of service.") + StartConversation(conversation, NPC, Spawn, "Don't underplay your skills. Without your help, Beltho would still be searching for the hidden entrance to the lair. Take this signet ring as a mark of my gratitude and trust.") + SetStepComplete(Spawn, Gnoll, 4) +end + +--------------------- diff --git a/server/SpawnScripts/Antonica/CorporalBatton.lua b/server/SpawnScripts/Antonica/CorporalBatton.lua new file mode 100644 index 000000000..3dfe60450 --- /dev/null +++ b/server/SpawnScripts/Antonica/CorporalBatton.lua @@ -0,0 +1,36 @@ +--[[ + Script Name : CorporalBatton.lua + Script Purpose : Corporal Batton + Script Author : Jabantiz + Script Date : 08/29/2019 + Script Notes : Auto-Generated from a chat log using SpawnScriptDesigner +--]] + +require "SpawnScripts/Generic/DialogModule" + +function spawn(NPC) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + Dialog.New(NPC, Spawn) + + Dialog.AddDialog("I am afraid I must ask you to move along, citizen. This is a place of duty, not chatter.") + Dialog.AddVoiceover("voiceover/english/corporal_batton/mudlib/vdl/quests/antonica/corporalbatton000.mp3", 3155813947, 2657899917) + Dialog.AddOption("Excuse my interruption, guard.") + + Dialog.Start() + + --[[ Say() from this NPC + + + Orphaned PlayFlavors + PlayFlavor(NPC, "voiceover/english/corporal_batton/antonica/corporalbatton001.mp3", "", "", 77618874, 840266759, Spawn) + + --]] + +end \ No newline at end of file diff --git a/server/SpawnScripts/Antonica/CorporalPeckett.lua b/server/SpawnScripts/Antonica/CorporalPeckett.lua new file mode 100644 index 000000000..f78d0b628 --- /dev/null +++ b/server/SpawnScripts/Antonica/CorporalPeckett.lua @@ -0,0 +1,27 @@ +--[[ + Script Name : CorporalPeckett.lua + Script Purpose : Corporal Peckett + Script Author : Jabantiz + Script Date : 08/27/2019 + Script Notes : Auto-Generated from a chat log using SpawnScriptDesigner +--]] + +require "SpawnScripts/Generic/DialogModule" + +function spawn(NPC) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + Dialog.New(NPC, Spawn) + + Dialog.AddDialog("Hail, adventurer. I must warn you that Coldwind Point is not the safest place. Most of the garrison is on the march and the gnolls have been sighted nearby. I cannot guarantee your safety.") + Dialog.AddVoiceover("voiceover/english/corporal_peckett/antonica/corporalpeckett000.mp3", 1322495237, 1823181494) + Dialog.AddOption("I shall be fine. Thank you for the warning.") + + Dialog.Start() +end \ No newline at end of file diff --git a/server/SpawnScripts/Antonica/CruNaseto.lua b/server/SpawnScripts/Antonica/CruNaseto.lua new file mode 100644 index 000000000..7ac820917 --- /dev/null +++ b/server/SpawnScripts/Antonica/CruNaseto.lua @@ -0,0 +1,24 @@ +--[[ + Script Name : CruNaseto-Say.lua + Script Purpose : Cru Naseto + Script Author : Jabantiz + Script Date : 08/29/2019 + Script Notes : Auto-Generated from a chat log using SpawnScriptDesigner, Say()'s ONLY +--]] + +require "SpawnScripts/Generic/DialogModule" + +function spawn(NPC) + +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + + + Say(NPC, "Come back later. You look like a good runner.", Spawn) + +end \ No newline at end of file diff --git a/server/SpawnScripts/Antonica/CurysKasin.lua b/server/SpawnScripts/Antonica/CurysKasin.lua new file mode 100644 index 000000000..bf892e869 --- /dev/null +++ b/server/SpawnScripts/Antonica/CurysKasin.lua @@ -0,0 +1,24 @@ +--[[ + Script Name : CurysKasin-Say.lua + Script Purpose : Curys Kasin + Script Author : Jabantiz + Script Date : 08/29/2019 + Script Notes : Auto-Generated from a chat log using SpawnScriptDesigner, Say()'s ONLY +--]] + +require "SpawnScripts/Generic/DialogModule" + +function spawn(NPC) + +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + + + Say(NPC, "All praise Rodcet Nife and his greatness!", Spawn) + +end \ No newline at end of file diff --git a/server/SpawnScripts/Antonica/Dancer.lua b/server/SpawnScripts/Antonica/Dancer.lua new file mode 100644 index 000000000..8d6a28fef --- /dev/null +++ b/server/SpawnScripts/Antonica/Dancer.lua @@ -0,0 +1,612 @@ +--[[ + Script Name : SpawnScripts/Antonica/Dancer.lua + Script Purpose : Dancer + Script Author : John Adams + Script Date : 2016.09.03 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +function spawn(NPC) + SetPlayerProximityFunction(NPC, 10, "InRange", "LeaveRange") +end + +function respawn(NPC) + spawn(NPC) +end + +function InRange(NPC, Spawn) +end + +function LeaveRange(NPC, Spawn) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/verona/antonica/verona000.mp3", "", "", 2049178803, 173582214, Spawn) + AddConversationOption(conversation, "I tried my best, but their numbers are strong.", "dlg_0_1") + AddConversationOption(conversation, "You so quickly forget the world's greatest adventurer.") + AddConversationOption(conversation, "I cannot chat now. Farewell.") + StartConversation(conversation, NPC, Spawn, "You must be an adventurer who's new to these parts. Who else would brave the wilds so far from the watchful eye of the Qeynos Guard?") + if convo==1 then + PlayFlavor(NPC, "voiceover/english/verona/antonica/verona000.mp3", "", "", 2049178803, 173582214, Spawn) + AddConversationOption(conversation, "I tried my best, but their numbers are strong.", "dlg_1_1") + AddConversationOption(conversation, "You so quickly forget the world's greatest adventurer.") + AddConversationOption(conversation, "I cannot chat now. Farewell.") + StartConversation(conversation, NPC, Spawn, "You must be an adventurer who's new to these parts. Who else would brave the wilds so far from the watchful eye of the Qeynos Guard?") + end + + if convo==2 then + PlayFlavor(NPC, "voiceover/english/verona/antonica/verona000.mp3", "", "", 2049178803, 173582214, Spawn) + AddConversationOption(conversation, "I tried my best, but their numbers are strong.", "dlg_2_1") + AddConversationOption(conversation, "You so quickly forget the world's greatest adventurer.") + AddConversationOption(conversation, "I cannot chat now. Farewell.") + StartConversation(conversation, NPC, Spawn, "You must be an adventurer who's new to these parts. Who else would brave the wilds so far from the watchful eye of the Qeynos Guard?") + end + + if convo==3 then + PlayFlavor(NPC, "voiceover/english/verona/antonica/verona000.mp3", "", "", 2049178803, 173582214, Spawn) + AddConversationOption(conversation, "I cannot chat now. Farewell.", "dlg_3_1") + StartConversation(conversation, NPC, Spawn, "You must be an adventurer who's new to these parts. Who else would brave the wilds so far from the watchful eye of the Qeynos Guard?") + end + + if convo==4 then + PlayFlavor(NPC, "voiceover/english/verona/antonica/verona000.mp3", "", "", 2049178803, 173582214, Spawn) + AddConversationOption(conversation, "Sighard gave me this special arrow.", "dlg_4_1") + AddConversationOption(conversation, "I cannot chat now. Farewell.") + StartConversation(conversation, NPC, Spawn, "You must be an adventurer who's new to these parts. Who else would brave the wilds so far from the watchful eye of the Qeynos Guard?") + end + + if convo==5 then + PlayFlavor(NPC, "voiceover/english/verona/antonica/verona000.mp3", "", "", 2049178803, 173582214, Spawn) + AddConversationOption(conversation, "The arrow is in the training dummy.", "dlg_5_1") + AddConversationOption(conversation, "I cannot chat now. Farewell.") + StartConversation(conversation, NPC, Spawn, "You must be an adventurer who's new to these parts. Who else would brave the wilds so far from the watchful eye of the Qeynos Guard?") + end + + if convo==6 then + PlayFlavor(NPC, "voiceover/english/verona/antonica/verona000.mp3", "", "", 2049178803, 173582214, Spawn) + AddConversationOption(conversation, "I am a bit of an adventurer and a bit of an explorer.", "dlg_6_1") + AddConversationOption(conversation, "I cannot chat now. Farewell.") + StartConversation(conversation, NPC, Spawn, "You must be an adventurer who's new to these parts. Who else would brave the wilds so far from the watchful eye of the Qeynos Guard?") + end + + if convo==7 then + PlayFlavor(NPC, "voiceover/english/verona/antonica/verona000.mp3", "", "", 2049178803, 173582214, Spawn) + AddConversationOption(conversation, "The arrow is in the training dummy.", "dlg_7_1") + AddConversationOption(conversation, "I cannot chat now. Farewell.") + StartConversation(conversation, NPC, Spawn, "You must be an adventurer who's new to these parts. Who else would brave the wilds so far from the watchful eye of the Qeynos Guard?") + end + + if convo==8 then + PlayFlavor(NPC, "voiceover/english/verona/antonica/verona000.mp3", "", "", 2049178803, 173582214, Spawn) + AddConversationOption(conversation, "I tried my best, but their numbers are strong.", "dlg_8_1") + AddConversationOption(conversation, "You so quickly forget the world's greatest adventurer.") + AddConversationOption(conversation, "I cannot chat now. Farewell.") + StartConversation(conversation, NPC, Spawn, "You must be an adventurer who's new to these parts. Who else would brave the wilds so far from the watchful eye of the Qeynos Guard?") + end + + if convo==9 then + PlayFlavor(NPC, "voiceover/english/verona/antonica/verona000.mp3", "", "", 2049178803, 173582214, Spawn) + AddConversationOption(conversation, "I cannot chat now. Farewell.", "dlg_9_1") + StartConversation(conversation, NPC, Spawn, "You must be an adventurer who's new to these parts. Who else would brave the wilds so far from the watchful eye of the Qeynos Guard?") + end + + if convo==13 then + PlayFlavor(NPC, "voiceover/english/verona/antonica/verona000.mp3", "", "", 2049178803, 173582214, Spawn) + AddConversationOption(conversation, "I tried my best, but their numbers are strong.", "dlg_13_1") + AddConversationOption(conversation, "You so quickly forget the world's greatest adventurer.") + AddConversationOption(conversation, "I cannot chat now. Farewell.") + StartConversation(conversation, NPC, Spawn, "You must be an adventurer who's new to these parts. Who else would brave the wilds so far from the watchful eye of the Qeynos Guard?") + end + + if convo==19 then + PlayFlavor(NPC, "voiceover/english/verona/antonica/verona000.mp3", "", "", 2049178803, 173582214, Spawn) + AddConversationOption(conversation, "I am a bit of an adventurer and a bit of an explorer.", "dlg_19_1") + AddConversationOption(conversation, "I cannot chat now. Farewell.") + StartConversation(conversation, NPC, Spawn, "You must be an adventurer who's new to these parts. Who else would brave the wilds so far from the watchful eye of the Qeynos Guard?") + end + + if convo==20 then + PlayFlavor(NPC, "voiceover/english/verona/antonica/verona000.mp3", "", "", 2049178803, 173582214, Spawn) + AddConversationOption(conversation, "I am a bit of an adventurer and a bit of an explorer.", "dlg_20_1") + AddConversationOption(conversation, "I cannot chat now. Farewell.") + StartConversation(conversation, NPC, Spawn, "You must be an adventurer who's new to these parts. Who else would brave the wilds so far from the watchful eye of the Qeynos Guard?") + end + + if convo==21 then + PlayFlavor(NPC, "voiceover/english/verona/antonica/verona000.mp3", "", "", 2049178803, 173582214, Spawn) + AddConversationOption(conversation, "I am a bit of an adventurer and a bit of an explorer.", "dlg_21_1") + AddConversationOption(conversation, "I cannot chat now. Farewell.") + StartConversation(conversation, NPC, Spawn, "You must be an adventurer who's new to these parts. Who else would brave the wilds so far from the watchful eye of the Qeynos Guard?") + end + + if convo==22 then + PlayFlavor(NPC, "voiceover/english/verona/antonica/verona000.mp3", "", "", 2049178803, 173582214, Spawn) + AddConversationOption(conversation, "I cannot chat now. Farewell.", "dlg_22_1") + StartConversation(conversation, NPC, Spawn, "You must be an adventurer who's new to these parts. Who else would brave the wilds so far from the watchful eye of the Qeynos Guard?") + end + + if convo==30 then + PlayFlavor(NPC, "voiceover/english/verona/antonica/verona000.mp3", "", "", 2049178803, 173582214, Spawn) + AddConversationOption(conversation, "Sighard gave me this special arrow.", "dlg_30_1") + AddConversationOption(conversation, "I cannot chat now. Farewell.") + StartConversation(conversation, NPC, Spawn, "You must be an adventurer who's new to these parts. Who else would brave the wilds so far from the watchful eye of the Qeynos Guard?") + end + + if convo==31 then + PlayFlavor(NPC, "voiceover/english/verona/antonica/verona000.mp3", "", "", 2049178803, 173582214, Spawn) + AddConversationOption(conversation, "Sighard gave me this special arrow.", "dlg_31_1") + AddConversationOption(conversation, "I cannot chat now. Farewell.") + StartConversation(conversation, NPC, Spawn, "You must be an adventurer who's new to these parts. Who else would brave the wilds so far from the watchful eye of the Qeynos Guard?") + end + + if convo==32 then + PlayFlavor(NPC, "voiceover/english/verona/antonica/verona000.mp3", "", "", 2049178803, 173582214, Spawn) + AddConversationOption(conversation, "I cannot chat now. Farewell.", "dlg_32_1") + StartConversation(conversation, NPC, Spawn, "You must be an adventurer who's new to these parts. Who else would brave the wilds so far from the watchful eye of the Qeynos Guard?") + end + + if convo==33 then + PlayFlavor(NPC, "voiceover/english/verona/antonica/verona000.mp3", "", "", 2049178803, 173582214, Spawn) + AddConversationOption(conversation, "I am a bit of an adventurer and a bit of an explorer.", "dlg_33_1") + AddConversationOption(conversation, "I cannot chat now. Farewell.") + StartConversation(conversation, NPC, Spawn, "You must be an adventurer who's new to these parts. Who else would brave the wilds so far from the watchful eye of the Qeynos Guard?") + end + + if convo==35 then + PlayFlavor(NPC, "voiceover/english/verona/antonica/verona000.mp3", "", "", 2049178803, 173582214, Spawn) + AddConversationOption(conversation, "Sighard gave me this special arrow.", "dlg_35_1") + AddConversationOption(conversation, "I cannot chat now. Farewell.") + StartConversation(conversation, NPC, Spawn, "You must be an adventurer who's new to these parts. Who else would brave the wilds so far from the watchful eye of the Qeynos Guard?") + end + + if convo==36 then + PlayFlavor(NPC, "voiceover/english/verona/antonica/verona000.mp3", "", "", 2049178803, 173582214, Spawn) + AddConversationOption(conversation, "I cannot chat now. Farewell.", "dlg_36_1") + StartConversation(conversation, NPC, Spawn, "You must be an adventurer who's new to these parts. Who else would brave the wilds so far from the watchful eye of the Qeynos Guard?") + end + + if convo==37 then + PlayFlavor(NPC, "voiceover/english/verona/antonica/verona000.mp3", "", "", 2049178803, 173582214, Spawn) + AddConversationOption(conversation, "I am a bit of an adventurer and a bit of an explorer.", "dlg_37_1") + AddConversationOption(conversation, "I cannot chat now. Farewell.") + StartConversation(conversation, NPC, Spawn, "You must be an adventurer who's new to these parts. Who else would brave the wilds so far from the watchful eye of the Qeynos Guard?") + end + + if convo==39 then + PlayFlavor(NPC, "voiceover/english/verona/antonica/verona000.mp3", "", "", 2049178803, 173582214, Spawn) + AddConversationOption(conversation, "Sighard gave me this special arrow.", "dlg_39_1") + AddConversationOption(conversation, "I cannot chat now. Farewell.") + StartConversation(conversation, NPC, Spawn, "You must be an adventurer who's new to these parts. Who else would brave the wilds so far from the watchful eye of the Qeynos Guard?") + end + + if convo==42 then + PlayFlavor(NPC, "voiceover/english/verona/antonica/verona000.mp3", "", "", 2049178803, 173582214, Spawn) + AddConversationOption(conversation, "The arrow is in the training dummy.", "dlg_42_1") + AddConversationOption(conversation, "I cannot chat now. Farewell.") + StartConversation(conversation, NPC, Spawn, "You must be an adventurer who's new to these parts. Who else would brave the wilds so far from the watchful eye of the Qeynos Guard?") + end + + if convo==59 then + PlayFlavor(NPC, "voiceover/english/verona/antonica/verona000.mp3", "", "", 2049178803, 173582214, Spawn) + AddConversationOption(conversation, "I am a bit of an adventurer and a bit of an explorer.", "dlg_59_1") + AddConversationOption(conversation, "I cannot chat now. Farewell.") + StartConversation(conversation, NPC, Spawn, "You must be an adventurer who's new to these parts. Who else would brave the wilds so far from the watchful eye of the Qeynos Guard?") + end + + if convo==60 then + PlayFlavor(NPC, "voiceover/english/verona/antonica/verona000.mp3", "", "", 2049178803, 173582214, Spawn) + AddConversationOption(conversation, "I am a bit of an adventurer and a bit of an explorer.", "dlg_60_1") + AddConversationOption(conversation, "I cannot chat now. Farewell.") + StartConversation(conversation, NPC, Spawn, "You must be an adventurer who's new to these parts. Who else would brave the wilds so far from the watchful eye of the Qeynos Guard?") + end + + if convo==61 then + PlayFlavor(NPC, "voiceover/english/verona/antonica/verona000.mp3", "", "", 2049178803, 173582214, Spawn) + AddConversationOption(conversation, "I am a bit of an adventurer and a bit of an explorer.", "dlg_61_1") + AddConversationOption(conversation, "I cannot chat now. Farewell.") + StartConversation(conversation, NPC, Spawn, "You must be an adventurer who's new to these parts. Who else would brave the wilds so far from the watchful eye of the Qeynos Guard?") + end + + if convo==62 then + PlayFlavor(NPC, "voiceover/english/verona/antonica/verona000.mp3", "", "", 2049178803, 173582214, Spawn) + AddConversationOption(conversation, "I am a bit of an adventurer and a bit of an explorer.", "dlg_62_1") + AddConversationOption(conversation, "I cannot chat now. Farewell.") + StartConversation(conversation, NPC, Spawn, "You must be an adventurer who's new to these parts. Who else would brave the wilds so far from the watchful eye of the Qeynos Guard?") + end + + if convo==63 then + PlayFlavor(NPC, "voiceover/english/verona/antonica/verona000.mp3", "", "", 2049178803, 173582214, Spawn) + AddConversationOption(conversation, "I cannot chat now. Farewell.", "dlg_63_1") + StartConversation(conversation, NPC, Spawn, "You must be an adventurer who's new to these parts. Who else would brave the wilds so far from the watchful eye of the Qeynos Guard?") + end + + if convo==66 then + PlayFlavor(NPC, "voiceover/english/verona/antonica/verona000.mp3", "", "", 2049178803, 173582214, Spawn) + AddConversationOption(conversation, "I cannot chat now. Farewell.", "dlg_66_1") + StartConversation(conversation, NPC, Spawn, "You must be an adventurer who's new to these parts. Who else would brave the wilds so far from the watchful eye of the Qeynos Guard?") + end + +end + +function dlg_1_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/verona/antonica/verona008.mp3", "", "", 3282299207, 1917374337, Spawn) + AddConversationOption(conversation, "They will know me when I rid the woods of them!") + StartConversation(conversation, NPC, Spawn, "Forget the world's greatest? I think not, but your name may have slipped my mind. Ha! Fear not, my brave courier. The gnolls of Archer Woods are the only ones near here that have yet to know your name.") +end + +function dlg_2_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/verona/antonica/verona010.mp3", "", "", 3182250399, 3459878429, Spawn) + AddConversationOption(conversation, "Thank you, Dancer.", "dlg_2_2") + StartConversation(conversation, NPC, Spawn, "Your best is all that we ask. I shall reward you for servicing what remains of Archer Woods. I shall mention your name among my friends.") +end + +function dlg_2_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/verona/antonica/verona011.mp3", "", "", 2906971481, 4178549824, Spawn) + AddConversationOption(conversation, "Is your name really Dancer?", "dlg_2_3") + AddConversationOption(conversation, "Thank you, Dancer.") + StartConversation(conversation, NPC, Spawn, "By the way, courier, Sighard asked me about you. He wishes to speak with you.") +end + +function dlg_3_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/verona/antonica/verona003.mp3", "", "", 1306460538, 3525298419, Spawn) + AddConversationOption(conversation, "What is this arrow?", "dlg_3_2") + AddConversationOption(conversation, "I shall do as requested.") + StartConversation(conversation, NPC, Spawn, "Now, can you take that arrow and apply it to a training dummy in Archer Woods? Search for the dummy with the symbol of a golden tree and green arrow.") +end + +function dlg_3_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/verona/antonica/verona004.mp3", "", "", 2295000938, 2111794040, Spawn) + AddConversationOption(conversation, "I understand.", "dlg_3_3") + StartConversation(conversation, NPC, Spawn, "The arrow is a special marker for some friends of mine.") +end + +function dlg_4_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/verona/antonica/verona003.mp3", "", "", 1306460538, 3525298419, Spawn) + AddConversationOption(conversation, "What is this arrow?", "dlg_4_2") + AddConversationOption(conversation, "I shall do as requested.") + StartConversation(conversation, NPC, Spawn, "Now, can you take that arrow and apply it to a training dummy in Archer Woods? Search for the dummy with the symbol of a golden tree and green arrow.") +end + +function dlg_4_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/verona/antonica/verona004.mp3", "", "", 2295000938, 2111794040, Spawn) + AddConversationOption(conversation, "I understand.", "dlg_4_3") + StartConversation(conversation, NPC, Spawn, "The arrow is a special marker for some friends of mine.") +end + +function dlg_5_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/verona/antonica/verona005.mp3", "", "", 3454016717, 1472655172, Spawn) + AddConversationOption(conversation, "I did not see any Trusaris.", "dlg_5_2") + AddConversationOption(conversation, "Farewell.") + StartConversation(conversation, NPC, Spawn, "Thank you, courier. I trust you have done as I requested. If not, Trusaris will tell me. He sees all in Archer Woods, including your every step.") +end + +function dlg_5_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/verona/antonica/verona006.mp3", "", "", 4166511705, 1130362343, Spawn) + AddConversationOption(conversation, "I will help clear his home.", "dlg_5_3") + StartConversation(conversation, NPC, Spawn, "Trusaris is the great oak of Archer Woods. He has lived in these hills for many ages. He has seen much grief in his lifetime. Now gnolls are taking over what is left of his home.") +end + +function dlg_5_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/verona/antonica/verona009.mp3", "", "", 2472618059, 207846586, Spawn) + AddConversationOption(conversation, "I shall do my best.", "dlg_5_4") + StartConversation(conversation, NPC, Spawn, "You think you can clear all of Archer Woods? I doubt that, but I would be glad to see you try, as would Trusaris.") +end + +function dlg_6_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/verona/antonica/verona001.mp3", "", "", 3474200771, 3431607508, Spawn) + AddConversationOption(conversation, "I am always available to assist a frontiersman.", "dlg_6_2") + AddConversationOption(conversation, "I cannot assist. Farewell.") + StartConversation(conversation, NPC, Spawn, "Adventurer ... explorer ... how would you like to be a courier too?") +end + +function dlg_6_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/verona/antonica/verona002.mp3", "", "", 4018838958, 826695955, Spawn) + AddConversationOption(conversation, "I will find Sighard and see that he gets the note.", "dlg_6_3") + StartConversation(conversation, NPC, Spawn, "I prefer the term frontierslady, but who am I to argue with a legendary adventurer. Please take this note to Sighard Sayer, proprietor of Sayer's Outfitters, the frontier trading post just to the north of here.") +end + +function dlg_7_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/verona/antonica/verona005.mp3", "", "", 3454016717, 1472655172, Spawn) + AddConversationOption(conversation, "I did not see any Trusaris.", "dlg_7_2") + AddConversationOption(conversation, "Farewell.") + StartConversation(conversation, NPC, Spawn, "Thank you, courier. I trust you have done as I requested. If not, Trusaris will tell me. He sees all in Archer Woods, including your every step.") +end + +function dlg_7_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/verona/antonica/verona006.mp3", "", "", 4166511705, 1130362343, Spawn) + AddConversationOption(conversation, "I will help clear his home.", "dlg_7_3") + StartConversation(conversation, NPC, Spawn, "Trusaris is the great oak of Archer Woods. He has lived in these hills for many ages. He has seen much grief in his lifetime. Now gnolls are taking over what is left of his home.") +end + +function dlg_7_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/verona/antonica/verona009.mp3", "", "", 2472618059, 207846586, Spawn) + AddConversationOption(conversation, "I shall do my best.", "dlg_7_4") + StartConversation(conversation, NPC, Spawn, "You think you can clear all of Archer Woods? I doubt that, but I would be glad to see you try, as would Trusaris.") +end + +function dlg_8_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/verona/antonica/verona010.mp3", "", "", 3182250399, 3459878429, Spawn) + AddConversationOption(conversation, "Thank you, Dancer.", "dlg_8_2") + StartConversation(conversation, NPC, Spawn, "Your best is all that we ask. I shall reward you for servicing what remains of Archer Woods. I shall mention your name among my friends.") +end + +function dlg_8_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/verona/antonica/verona011.mp3", "", "", 2906971481, 4178549824, Spawn) + AddConversationOption(conversation, "Is your name really Dancer?", "dlg_8_3") + AddConversationOption(conversation, "Thank you, Dancer.") + StartConversation(conversation, NPC, Spawn, "By the way, courier, Sighard asked me about you. He wishes to speak with you.") +end + +function dlg_8_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/verona/antonica/verona007.mp3", "", "", 1777708143, 1227602978, Spawn) + AddConversationOption(conversation, "Farewell, Dancer.", "dlg_8_4") + StartConversation(conversation, NPC, Spawn, "There was a dark time in my life when dancing was not a thing of joy, but a subjugated torment. It is a time I choose not to recall. But Dancer is my name among my new circle of friends, friends you may some day meet.") +end + +function dlg_13_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/verona/antonica/verona010.mp3", "", "", 3182250399, 3459878429, Spawn) + AddConversationOption(conversation, "Thank you, Dancer.", "dlg_13_2") + StartConversation(conversation, NPC, Spawn, "Your best is all that we ask. I shall reward you for servicing what remains of Archer Woods. I shall mention your name among my friends.") +end + +function dlg_13_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/verona/antonica/verona011.mp3", "", "", 2906971481, 4178549824, Spawn) + AddConversationOption(conversation, "Is your name really Dancer?", "dlg_13_3") + AddConversationOption(conversation, "Thank you, Dancer.") + StartConversation(conversation, NPC, Spawn, "By the way, courier, Sighard asked me about you. He wishes to speak with you.") +end + +function dlg_13_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/verona/antonica/verona007.mp3", "", "", 1777708143, 1227602978, Spawn) + AddConversationOption(conversation, "Farewell, Dancer.", "dlg_13_4") + StartConversation(conversation, NPC, Spawn, "There was a dark time in my life when dancing was not a thing of joy, but a subjugated torment. It is a time I choose not to recall. But Dancer is my name among my new circle of friends, friends you may some day meet.") +end + +function dlg_20_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/verona/antonica/verona001.mp3", "", "", 3474200771, 3431607508, Spawn) + AddConversationOption(conversation, "I am always available to assist a frontiersman.", "dlg_20_2") + AddConversationOption(conversation, "I cannot assist. Farewell.") + StartConversation(conversation, NPC, Spawn, "Adventurer ... explorer ... how would you like to be a courier too?") +end + +function dlg_21_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/verona/antonica/verona001.mp3", "", "", 3474200771, 3431607508, Spawn) + AddConversationOption(conversation, "I am always available to assist a frontiersman.", "dlg_21_2") + AddConversationOption(conversation, "I cannot assist. Farewell.") + StartConversation(conversation, NPC, Spawn, "Adventurer ... explorer ... how would you like to be a courier too?") +end + +function dlg_21_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/verona/antonica/verona002.mp3", "", "", 4018838958, 826695955, Spawn) + AddConversationOption(conversation, "I will find Sighard and see that he gets the note.", "dlg_21_3") + StartConversation(conversation, NPC, Spawn, "I prefer the term frontierslady, but who am I to argue with a legendary adventurer. Please take this note to Sighard Sayer, proprietor of Sayer's Outfitters, the frontier trading post just to the north of here.") +end + +function dlg_31_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/verona/antonica/verona003.mp3", "", "", 1306460538, 3525298419, Spawn) + AddConversationOption(conversation, "What is this arrow?", "dlg_31_2") + AddConversationOption(conversation, "I shall do as requested.") + StartConversation(conversation, NPC, Spawn, "Now, can you take that arrow and apply it to a training dummy in Archer Woods? Search for the dummy with the symbol of a golden tree and green arrow.") +end + +function dlg_33_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/verona/antonica/verona001.mp3", "", "", 3474200771, 3431607508, Spawn) + AddConversationOption(conversation, "I am always available to assist a frontiersman.", "dlg_33_2") + AddConversationOption(conversation, "I cannot assist. Farewell.") + StartConversation(conversation, NPC, Spawn, "Adventurer ... explorer ... how would you like to be a courier too?") +end + +function dlg_33_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/verona/antonica/verona002.mp3", "", "", 4018838958, 826695955, Spawn) + AddConversationOption(conversation, "I will find Sighard and see that he gets the note.", "dlg_33_3") + StartConversation(conversation, NPC, Spawn, "I prefer the term frontierslady, but who am I to argue with a legendary adventurer. Please take this note to Sighard Sayer, proprietor of Sayer's Outfitters, the frontier trading post just to the north of here.") +end + +function dlg_35_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/verona/antonica/verona003.mp3", "", "", 1306460538, 3525298419, Spawn) + AddConversationOption(conversation, "What is this arrow?", "dlg_35_2") + AddConversationOption(conversation, "I shall do as requested.") + StartConversation(conversation, NPC, Spawn, "Now, can you take that arrow and apply it to a training dummy in Archer Woods? Search for the dummy with the symbol of a golden tree and green arrow.") +end + +function dlg_35_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/verona/antonica/verona004.mp3", "", "", 2295000938, 2111794040, Spawn) + AddConversationOption(conversation, "I understand.", "dlg_35_3") + StartConversation(conversation, NPC, Spawn, "The arrow is a special marker for some friends of mine.") +end + +function dlg_37_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/verona/antonica/verona001.mp3", "", "", 3474200771, 3431607508, Spawn) + AddConversationOption(conversation, "I am always available to assist a frontiersman.", "dlg_37_2") + AddConversationOption(conversation, "I cannot assist. Farewell.") + StartConversation(conversation, NPC, Spawn, "Adventurer ... explorer ... how would you like to be a courier too?") +end + +function dlg_37_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/verona/antonica/verona002.mp3", "", "", 4018838958, 826695955, Spawn) + AddConversationOption(conversation, "I will find Sighard and see that he gets the note.", "dlg_37_3") + StartConversation(conversation, NPC, Spawn, "I prefer the term frontierslady, but who am I to argue with a legendary adventurer. Please take this note to Sighard Sayer, proprietor of Sayer's Outfitters, the frontier trading post just to the north of here.") +end + +function dlg_39_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/verona/antonica/verona003.mp3", "", "", 1306460538, 3525298419, Spawn) + AddConversationOption(conversation, "What is this arrow?", "dlg_39_2") + AddConversationOption(conversation, "I shall do as requested.") + StartConversation(conversation, NPC, Spawn, "Now, can you take that arrow and apply it to a training dummy in Archer Woods? Search for the dummy with the symbol of a golden tree and green arrow.") +end + +function dlg_39_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/verona/antonica/verona004.mp3", "", "", 2295000938, 2111794040, Spawn) + AddConversationOption(conversation, "I understand.", "dlg_39_3") + StartConversation(conversation, NPC, Spawn, "The arrow is a special marker for some friends of mine.") +end + +function dlg_42_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/verona/antonica/verona005.mp3", "", "", 3454016717, 1472655172, Spawn) + AddConversationOption(conversation, "I did not see any Trusaris.", "dlg_42_2") + AddConversationOption(conversation, "Farewell.") + StartConversation(conversation, NPC, Spawn, "Thank you, courier. I trust you have done as I requested. If not, Trusaris will tell me. He sees all in Archer Woods, including your every step.") +end + +function dlg_42_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/verona/antonica/verona006.mp3", "", "", 4166511705, 1130362343, Spawn) + AddConversationOption(conversation, "I will help clear his home.", "dlg_42_3") + StartConversation(conversation, NPC, Spawn, "Trusaris is the great oak of Archer Woods. He has lived in these hills for many ages. He has seen much grief in his lifetime. Now gnolls are taking over what is left of his home.") +end + +function dlg_42_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/verona/antonica/verona009.mp3", "", "", 2472618059, 207846586, Spawn) + AddConversationOption(conversation, "I shall do my best.", "dlg_42_4") + StartConversation(conversation, NPC, Spawn, "You think you can clear all of Archer Woods? I doubt that, but I would be glad to see you try, as would Trusaris.") +end + +function dlg_60_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/verona/antonica/verona001.mp3", "", "", 3474200771, 3431607508, Spawn) + AddConversationOption(conversation, "I am always available to assist a frontiersman.", "dlg_60_2") + AddConversationOption(conversation, "I cannot assist. Farewell.") + StartConversation(conversation, NPC, Spawn, "Adventurer ... explorer ... how would you like to be a courier too?") +end + +function dlg_61_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/verona/antonica/verona001.mp3", "", "", 3474200771, 3431607508, Spawn) + AddConversationOption(conversation, "I am always available to assist a frontiersman.", "dlg_61_2") + AddConversationOption(conversation, "I cannot assist. Farewell.") + StartConversation(conversation, NPC, Spawn, "Adventurer ... explorer ... how would you like to be a courier too?") +end + +function dlg_62_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/verona/antonica/verona001.mp3", "", "", 3474200771, 3431607508, Spawn) + AddConversationOption(conversation, "I am always available to assist a frontiersman.", "dlg_62_2") + AddConversationOption(conversation, "I cannot assist. Farewell.") + StartConversation(conversation, NPC, Spawn, "Adventurer ... explorer ... how would you like to be a courier too?") +end + +function dlg_62_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/verona/antonica/verona002.mp3", "", "", 4018838958, 826695955, Spawn) + AddConversationOption(conversation, "I will find Sighard and see that he gets the note.", "dlg_62_3") + StartConversation(conversation, NPC, Spawn, "I prefer the term frontierslady, but who am I to argue with a legendary adventurer. Please take this note to Sighard Sayer, proprietor of Sayer's Outfitters, the frontier trading post just to the north of here.") +end + diff --git a/server/SpawnScripts/Antonica/DarmenSproutmore.lua b/server/SpawnScripts/Antonica/DarmenSproutmore.lua new file mode 100644 index 000000000..2883799e1 --- /dev/null +++ b/server/SpawnScripts/Antonica/DarmenSproutmore.lua @@ -0,0 +1,39 @@ +--[[ + Script Name : DarmenSproutmore.lua + Script Purpose : Darmen Sproutmore + Script Author : Jabantiz + Script Date : 08/29/2019 + Script Notes : Auto-Generated from a chat log using SpawnScriptDesigner +--]] + +require "SpawnScripts/Generic/DialogModule" + +function spawn(NPC) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + Dialog.New(NPC, Spawn) + + Dialog.AddDialog("Hail to you, adventurer! Mind your feet, and don't step on my dear little flowers! Just coming into bloom, they are.") + Dialog.AddVoiceover("voiceover/english/darmen_sproutmore/antonica/darmensproutmore000.mp3", 2138797897, 3113209185) + Dialog.AddOption("I must be off. Good day to you. ") + + Dialog.Start() + + --[[ Say() from this NPC + + + Orphaned PlayFlavors + PlayFlavor(NPC, "voiceover/english/darmen_sproutmore/antonica/darmensproutmore001.mp3", "", "", 3489573816, 2242982097, Spawn) + PlayFlavor(NPC, "voiceover/english/darmen_sproutmore/antonica/darmensproutmore002.mp3", "", "", 2498400696, 3478793084, Spawn) + PlayFlavor(NPC, "voiceover/english/darmen_sproutmore/antonica/darmensproutmore003.mp3", "", "", 1491369381, 2303497363, Spawn) + PlayFlavor(NPC, "voiceover/english/darmen_sproutmore/antonica/darmensproutmore004.mp3", "", "", 3378309886, 1783566743, Spawn) + + --]] + +end \ No newline at end of file diff --git a/server/SpawnScripts/Antonica/Duffy.lua b/server/SpawnScripts/Antonica/Duffy.lua new file mode 100644 index 000000000..0f563f647 --- /dev/null +++ b/server/SpawnScripts/Antonica/Duffy.lua @@ -0,0 +1,36 @@ +--[[ + Script Name : Duffy.lua + Script Purpose : Duffy + Script Author : Jabantiz + Script Date : 08/29/2019 + Script Notes : Auto-Generated from a chat log using SpawnScriptDesigner +--]] + +require "SpawnScripts/Generic/DialogModule" + +function spawn(NPC) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + Dialog.New(NPC, Spawn) + + Dialog.AddDialog("Take a look around. Never have you seen such finely crafted or wondrous artifacts for sale ... for such little coin!") + Dialog.AddVoiceover("voiceover/english/merchant_duffy/antonica/merchantduffy000.mp3", 2930671172, 614117388) + Dialog.AddOption("I'll just look about. ") + + Dialog.Start() + + --[[ Say() from this NPC + + + Orphaned PlayFlavors + PlayFlavor(NPC, "voiceover/english/merchant_duffy/antonica/merchantduffy001.mp3", "", "", 3538554208, 285621501, Spawn) + + --]] + +end \ No newline at end of file diff --git a/server/SpawnScripts/Antonica/FarmerHelver.lua b/server/SpawnScripts/Antonica/FarmerHelver.lua new file mode 100644 index 000000000..e26368682 --- /dev/null +++ b/server/SpawnScripts/Antonica/FarmerHelver.lua @@ -0,0 +1,24 @@ +--[[ + Script Name : FarmerHelver-Say.lua + Script Purpose : Farmer Helver + Script Author : Jabantiz + Script Date : 08/29/2019 + Script Notes : Auto-Generated from a chat log using SpawnScriptDesigner, Say()'s ONLY +--]] + +require "SpawnScripts/Generic/DialogModule" + +function spawn(NPC) + +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + + + Say(NPC, "These farms provide a lot of necessary food to Qeynos. It's a lot of work, but it is rewarding.", Spawn) + +end \ No newline at end of file diff --git a/server/SpawnScripts/Antonica/FarmerWalcott.lua b/server/SpawnScripts/Antonica/FarmerWalcott.lua new file mode 100644 index 000000000..1568eeace --- /dev/null +++ b/server/SpawnScripts/Antonica/FarmerWalcott.lua @@ -0,0 +1,201 @@ +--[[ + Script Name : SpawnScripts/Antonica/FarmerWalcott.lua + Script Purpose : Farmer Walcott + Script Author : geordie0511 + Script Date : 2019.03.12 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +local ThereMite = 458 + +function spawn(NPC) + ProvidesQuest(NPC, ThereMite) +end + +function respawn(NPC) + spawn(NPC) +end + +function InRange(NPC, Spawn) +end + +function LeaveRange(NPC, Spawn) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + if GetQuestStep(Spawn, ThereMite) == 2 then + SetStepComplete(Spawn, ThereMite, 2) + PlayFlavor(NPC, "voiceover/english/farmer_walcott/antonica/farmerwalcott003.mp3", "", "", 2680820592, 3831371965, Spawn) + AddConversationOption(conversation, "Not a problem. Anything for an Antonican.") + StartConversation(conversation, NPC, Spawn, "Yes! You did a great job, adventurer! The crops live another day. Please take this for your kind deeds. ") + else + PlayFlavor(NPC, "voiceover/english/farmer_walcott/antonica/farmerwalcott000.mp3", "", "", 1905672247, 2052203858, Spawn) + if HasQuest(Spawn, ThereMite) == false and HasCompletedQuest(Spawn, ThereMite) == false then + AddConversationOption(conversation, "Sounds like you need a beetle charmer. ", "dlg_1_1") + end + AddConversationOption(conversation, "I found this map on a gnoll. ") + AddConversationOption(conversation, "I am sorry I cannot help you. Farewell.") + StartConversation(conversation, NPC, Spawn, "Oh! My poor crops! What will I do with all these ravenous beetles scurrying about?") + end +end + +function dlg_1_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/farmer_walcott/antonica/farmerwalcott001.mp3", "", "", 2875116766, 2106137000, Spawn) + AddConversationOption(conversation, "Then today is your lucky day. Here I am! ", "dlg_1_2") + AddConversationOption(conversation, "If I see any I will send them your way. Farewell.") + StartConversation(conversation, NPC, Spawn, "A beetle charmer would be grand -- if there were such a thing. I would be satisfied just hiring an adventurer to stomp a bunch of the beetles. Oh my poor barley!") +end + +function dlg_1_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/farmer_walcott/antonica/farmerwalcott002.mp3", "", "", 1854564329, 3891746852, Spawn) + AddConversationOption(conversation, "I will end your mite problems.", "Quest1") + StartConversation(conversation, NPC, Spawn, "Thank the lost gods! I know you can't exterminate all these pests, but please do your best. I'll reward you with what I can. Don't worry, little barley ... help is on the way.") +end + +function Quest1(NPC, Spawn) + OfferQuest(NPC, Spawn, ThereMite) +end + +function dlg_2_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/farmer_walcott/antonica/farmerwalcott004.mp3", "", "", 1213446973, 2066498477, Spawn) + AddConversationOption(conversation, "It's all in a day's work for us adventurers. ") + AddConversationOption(conversation, "I don't have time to chat with you.") + StartConversation(conversation, NPC, Spawn, "I saw a moat rat chewing that slip this morning. I thought I would never get it back! You must be an amazing hero to face moat rats with such ease!") +end + +function dlg_3_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/farmer_walcott/antonica/farmerwalcott005.mp3", "", "", 3107851027, 3585937746, Spawn) + AddConversationOption(conversation, "I will hack a couple down for you.", "dlg_3_3") + StartConversation(conversation, NPC, Spawn, "I can use a person with your strength and bravado. See those evil looking scarecrows in my fields? I sure would appreciate it if you would get rid of 'em for me.") +end + +function dlg_6_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/farmer_walcott/antonica/farmerwalcott006.mp3", "", "", 3891109775, 3345154753, Spawn) + AddConversationOption(conversation, "Farewell, farmer. ") + StartConversation(conversation, NPC, Spawn, "Thank you for your help, adventurer. There was no way a simple farmer could face such creatures and live. Now maybe I can get some work done around here. ") +end + +function dlg_10_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/farmer_walcott/antonica/farmerwalcott007.mp3", "", "", 2816178732, 3621841778, Spawn) + AddConversationOption(conversation, "The gnoll was creating scarecrows, evil ones! ") + AddConversationOption(conversation, "I don't want to get involved. Farewell. ", "dlg_10_2") + StartConversation(conversation, NPC, Spawn, "Just a minute here ... this looks like a child's sketch of me fields! Just what was this gnoll doing? ") +end + +function dlg_10_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/farmer_walcott/antonica/farmerwalcott008.mp3", "", "", 1206894627, 4263746663, Spawn) + AddConversationOption(conversation, "I'll help you any way I can. ", "dlg_10_3") + AddConversationOption(conversation, "You must fight it without me. Farewell.") + StartConversation(conversation, NPC, Spawn, "Aha! Recently, my scarecrows came to life with fierce rage! I had no idea how this happened. I think I know how I can fight it. ") +end + +function dlg_10_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/farmer_walcott/antonica/farmerwalcott009.mp3", "", "", 970639118, 3821730719, Spawn) + AddConversationOption(conversation, "I will collect the items.", "dlg_10_4") + StartConversation(conversation, NPC, Spawn, "You can handle the wilderness better than a simple farmer. I'll need a few components. Collect them for me so I can begin my plan. ") +end + +function dlg_12_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/farmer_walcott/antonica/farmerwalcott010.mp3", "", "", 3414706112, 3583405611, Spawn) + AddConversationOption(conversation, "I am glad I could help. ") + StartConversation(conversation, NPC, Spawn, "Fantastic! Now I can bring to life a good scarecrow, one who I can place in the fields and who will destroy the evil ones! ") +end + +function dlg_18_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/farmer_walcott/antonica/farmerwalcott007.mp3", "", "", 2816178732, 3621841778, Spawn) + AddConversationOption(conversation, "The gnoll was creating scarecrows, evil ones! ") + AddConversationOption(conversation, "I don't want to get involved. Farewell. ", "dlg_18_2") + StartConversation(conversation, NPC, Spawn, "Just a minute here ... this looks like a child's sketch of me fields! Just what was this gnoll doing? ") +end + +function dlg_19_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/farmer_walcott/antonica/farmerwalcott007.mp3", "", "", 2816178732, 3621841778, Spawn) + AddConversationOption(conversation, "The gnoll was creating scarecrows, evil ones! ") + AddConversationOption(conversation, "I don't want to get involved. Farewell. ", "dlg_19_2") + StartConversation(conversation, NPC, Spawn, "Just a minute here ... this looks like a child's sketch of me fields! Just what was this gnoll doing? ") +end + +function dlg_19_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/farmer_walcott/antonica/farmerwalcott008.mp3", "", "", 1206894627, 4263746663, Spawn) + AddConversationOption(conversation, "I'll help you any way I can. ", "dlg_19_3") + AddConversationOption(conversation, "You must fight it without me. Farewell.") + StartConversation(conversation, NPC, Spawn, "Aha! Recently, my scarecrows came to life with fierce rage! I had no idea how this happened. I think I know how I can fight it. ") +end + +function dlg_20_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/farmer_walcott/antonica/farmerwalcott007.mp3", "", "", 2816178732, 3621841778, Spawn) + AddConversationOption(conversation, "The gnoll was creating scarecrows, evil ones! ") + AddConversationOption(conversation, "I don't want to get involved. Farewell. ", "dlg_20_2") + StartConversation(conversation, NPC, Spawn, "Just a minute here ... this looks like a child's sketch of me fields! Just what was this gnoll doing? ") +end + +function dlg_20_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/farmer_walcott/antonica/farmerwalcott008.mp3", "", "", 1206894627, 4263746663, Spawn) + AddConversationOption(conversation, "I'll help you any way I can. ", "dlg_20_3") + AddConversationOption(conversation, "You must fight it without me. Farewell.") + StartConversation(conversation, NPC, Spawn, "Aha! Recently, my scarecrows came to life with fierce rage! I had no idea how this happened. I think I know how I can fight it. ") +end + +function dlg_20_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/farmer_walcott/antonica/farmerwalcott009.mp3", "", "", 970639118, 3821730719, Spawn) + AddConversationOption(conversation, "I will collect the items.", "dlg_20_4") + StartConversation(conversation, NPC, Spawn, "You can handle the wilderness better than a simple farmer. I'll need a few components. Collect them for me so I can begin my plan. ") +end + +function dlg_26_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/farmer_walcott/antonica/farmerwalcott010.mp3", "", "", 3414706112, 3583405611, Spawn) + AddConversationOption(conversation, "I am glad I could help. ") + StartConversation(conversation, NPC, Spawn, "Fantastic! Now I can bring to life a good scarecrow, one who I can place in the fields and who will destroy the evil ones! ") +end + diff --git a/server/SpawnScripts/Antonica/Flores.lua b/server/SpawnScripts/Antonica/Flores.lua new file mode 100644 index 000000000..fcfe90698 --- /dev/null +++ b/server/SpawnScripts/Antonica/Flores.lua @@ -0,0 +1,39 @@ +--[[ + Script Name : Flores.lua + Script Purpose : Flores + Script Author : Jabantiz + Script Date : 08/29/2019 + Script Notes : Auto-Generated from a chat log using SpawnScriptDesigner +--]] + +require "SpawnScripts/Generic/DialogModule" + +function spawn(NPC) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + Dialog.New(NPC, Spawn) + + Dialog.AddDialog("Step right up! My wares stand up to any found in the city! Made by the finest Qeynosian crafters, they are!") + Dialog.AddVoiceover("voiceover/english/merchant_flores/antonica/merchantflores000.mp3", 149465216, 3128258097) + Dialog.AddOption("I don't need anything right now, thanks.") + + Dialog.Start() + + --[[ Say() from this NPC + + + Orphaned PlayFlavors + PlayFlavor(NPC, "voiceover/english/merchant_flores/antonica/merchantflores001.mp3", "", "", 4230827236, 573418930, Spawn) + PlayFlavor(NPC, "voiceover/english/merchant_flores/antonica/merchantflores004.mp3", "", "", 2648431364, 4291369549, Spawn) + PlayFlavor(NPC, "voiceover/english/merchant_flores/antonica/merchantflores002.mp3", "", "", 2413854703, 2789428713, Spawn) + PlayFlavor(NPC, "voiceover/english/merchant_flores/antonica/merchantflores003.mp3", "", "", 741997082, 1076579882, Spawn) + + --]] + +end \ No newline at end of file diff --git a/server/SpawnScripts/Antonica/GhilVentur.lua b/server/SpawnScripts/Antonica/GhilVentur.lua new file mode 100644 index 000000000..40d879dc2 --- /dev/null +++ b/server/SpawnScripts/Antonica/GhilVentur.lua @@ -0,0 +1,26 @@ +--[[ + Script Name : GhilVentur.lua + Script Purpose : Ghil Ventur + Script Author : Jabantiz + Script Date : 08/27/2019 + Script Notes : Auto-Generated from a chat log using SpawnScriptDesigner +--]] + +require "SpawnScripts/Generic/DialogModule" + +function spawn(NPC) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + Dialog.New(NPC, Spawn) + + Dialog.AddDialog("How can I help you?") + Dialog.AddOption("It's nothing. Sorry to bother you.", "dlg_1") + + Dialog.Start() +end \ No newline at end of file diff --git a/server/SpawnScripts/Antonica/GolMTun.lua b/server/SpawnScripts/Antonica/GolMTun.lua new file mode 100644 index 000000000..85acfb4cc --- /dev/null +++ b/server/SpawnScripts/Antonica/GolMTun.lua @@ -0,0 +1,39 @@ +--[[ + Script Name : GolMtun.lua + Script Purpose : Gol M'Tun + Script Author : Jabantiz + Script Date : 08/29/2019 + Script Notes : Auto-Generated from a chat log using SpawnScriptDesigner +--]] + +require "SpawnScripts/Generic/DialogModule" + +function spawn(NPC) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + Dialog.New(NPC, Spawn) + + Dialog.AddDialog("Stand away, fool! Long live the Queen!") + Dialog.AddVoiceover("voiceover/english/voice_emotes/greetings/greetings_2_1008.mp3", 0, 0) + Dialog.AddOption("Ok.") + + Dialog.Start() + + --[[ Say() from this NPC + + + Orphaned PlayFlavors + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_1_1008.mp3", "", "", 0, 0, Spawn) + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_2_1008.mp3", "", "", 0, 0, Spawn) + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_3_1008.mp3", "", "", 0, 0, Spawn) + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + + --]] + +end \ No newline at end of file diff --git a/server/SpawnScripts/Antonica/HaddekVimki.lua b/server/SpawnScripts/Antonica/HaddekVimki.lua new file mode 100644 index 000000000..97273899f --- /dev/null +++ b/server/SpawnScripts/Antonica/HaddekVimki.lua @@ -0,0 +1,101 @@ +--[[ + Script Name : HaddekVimki.lua + Script Purpose : Haddek Vimki + Script Author : Jabantiz + Script Date : 08/29/2019 + Script Notes : Auto-Generated from a chat log using SpawnScriptDesigner +--]] + +require "SpawnScripts/Generic/DialogModule" + +function spawn(NPC) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + Dialog.New(NPC, Spawn) + + Dialog.AddDialog("So, then I said, \"That's what the Gnome is for!\" Wraahaahaa! Huh? What? If you're goin' to come over here and badger me, why don't you make yourself useful?") + Dialog.AddOption("Sure, what do you need from me?", "dlg_2") + Dialog.AddOption("Why don't you make yourself useful?!") + + Dialog.Start() + + --[[ Say() from this NPC + + + Orphaned PlayFlavors + PlayFlavor(NPC, "", "Hruh? What? I thought I told you what I wanted from you. If you're not going to take care of it I'm going to have old Aroof here take care of... Well... it don't look like he is going to be taking care of much... but when I tell him tomorrow, he will be awful angry!", "", 1689589577, 4560189, Spawn) + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_1_1060.mp3", "", "", 0, 0, Spawn) + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_2_1060.mp3", "", "", 0, 0, Spawn) + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_3_1060.mp3", "", "", 0, 0, Spawn) + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_3_1004.mp3", "", "", 0, 0, Spawn) + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + + --]] + +end + +function dlg_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + Dialog.New(NPC, Spawn) + + Dialog.AddDialog("Ahhh, Aroof... He's a good chap, but he's about as smart as a trog. Me an' the big guy here are in the middle of something. What do you want? ") + Dialog.AddVoiceover("", "", 0) + Dialog.AddOption("I'm looking for some work.", "dlg_3") + Dialog.AddOption("I think I'll be going now.") + + Dialog.Start() +end + +function dlg_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + Dialog.New(NPC, Spawn) + + Dialog.AddDialog("Ya see, twinkletoes over here has had quite a bit to drink. The big oaf isn't as coordinated as the barkeep would like him to be. Seems last time I sent him up to get us another round, he tripped over a ratonga sitting by the bar.") + Dialog.AddVoiceover("", "", 0) + Dialog.AddOption("And?", "dlg_4") + Dialog.AddOption("Okay, I have had enough. Bye.") + + Dialog.Start() +end + +function dlg_4(NPC, Spawn) + FaceTarget(NPC, Spawn) + Dialog.New(NPC, Spawn) + + Dialog.AddDialog("... And, it turns out the ratonga had what you might call... financial responsibilities to take care of for the proprietor. Looks like the little fur ball won't be back for quite some time! Hraahaha! The barkeep will throw us both out if the big guy over here comes stumbling upstairs one more time. Besides, I don't think he's feeling up to going anywhere right now.") + Dialog.AddVoiceover("", "", 0) + Dialog.AddOption("Okay. So?", "dlg_5") + Dialog.AddOption("Umm, never mind.") + + Dialog.Start() +end + +function dlg_5(NPC, Spawn) + FaceTarget(NPC, Spawn) + Dialog.New(NPC, Spawn) + + Dialog.AddDialog("You're an impatient one, aren't you? You need to slow down a bit! Sit back, grab an ale, and enjoy the sights. Get up you drunken fool! You know, when I was a young pup like yourself I used to be all over Norrath fighting Drakota... with my bare hands.") + Dialog.AddVoiceover("", "", 0) + Dialog.AddOption("Okay, get on with it.", "dlg_6") + Dialog.AddOption("Uphill? I think I've heard this one.") + + Dialog.Start() +end + +function dlg_6(NPC, Spawn) + FaceTarget(NPC, Spawn) + Dialog.New(NPC, Spawn) + + Dialog.AddDialog("And look where it got me. Sitting here with a drunken fool who can't keep both feet on the ground, and talking to a whelp like you. Where was I? Aye, I want a drink! Why don't you grab the big guy and I an ale.") + Dialog.AddVoiceover("", "", 0) + Dialog.AddOption("Sure, I will be right back") + Dialog.AddOption("No, it looks like you two have had enough.") + + Dialog.Start() +end \ No newline at end of file diff --git a/server/SpawnScripts/Antonica/HarbormasterLarra.lua b/server/SpawnScripts/Antonica/HarbormasterLarra.lua new file mode 100644 index 000000000..fe39652f8 --- /dev/null +++ b/server/SpawnScripts/Antonica/HarbormasterLarra.lua @@ -0,0 +1,22 @@ +--[[ + Script Name : HarbormasterLarra.lua + Script Purpose : Harbormaster Larra + Script Author : ParserGenerated (Replace this) + Script Date : 08/29/2019 + Script Notes : Auto-Generated from a chat log using SpawnScriptDesigner +--]] + +require "SpawnScripts/Generic/DialogModule" + +function spawn(NPC) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + + Say(NPC, "The Maiden's Grace is currently in Kylong Plains.", Spawn) +end \ No newline at end of file diff --git a/server/SpawnScripts/Antonica/HollyWindstalker.lua b/server/SpawnScripts/Antonica/HollyWindstalker.lua new file mode 100644 index 000000000..321883b32 --- /dev/null +++ b/server/SpawnScripts/Antonica/HollyWindstalker.lua @@ -0,0 +1,31 @@ +--[[ + Script Name : SpawnScripts/Antonica/HollyWindstalker.lua + Script Purpose : Holly Windstalker + Script Author : TyroneSWG + Script Date : 2019.01.15 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +function spawn(NPC) + SetPlayerProximityFunction(NPC, 10, "PlayerInRange", "PlayerLeaveRange") +end + +function respawn(NPC) + spawn(NPC) +end + +function PlayerInRange(NPC, Spawn) + FaceTarget(NPC, Spawn) + PlayFlavor(NPC, "voiceover/english/optional3/ghost_human_base_1/ft/ghost/ghost_human_base_1_1_victory_gf_65116994.mp3", "One down! An eternity to go.", "", 3147020467, 1377166074, Spawn) + +end + +function PlayerLeaveRange(NPC, Spawn) + FaceTarget(NPC, "Run cowards!") -- not actual line. just testing +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + Say(NPC, "Hello") +end + diff --git a/server/SpawnScripts/Antonica/HucklethinGorsefoot.lua b/server/SpawnScripts/Antonica/HucklethinGorsefoot.lua new file mode 100644 index 000000000..5b199c20b --- /dev/null +++ b/server/SpawnScripts/Antonica/HucklethinGorsefoot.lua @@ -0,0 +1,35 @@ +--[[ + Script Name : HucklethinGorsefoot.lua + Script Purpose : Hucklethin Gorsefoot + Script Author : Jabantiz + Script Date : 08/29/2019 + Script Notes : Auto-Generated from a chat log using SpawnScriptDesigner +--]] + +require "SpawnScripts/Generic/DialogModule" + +function spawn(NPC) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + Dialog.New(NPC, Spawn) + + Dialog.AddDialog("By leaf and lake, it's another fine day in Antonica!") + Dialog.AddVoiceover("voiceover/english/voice_emotes/greetings/greetings_2_1024.mp3", 0, 0) + Dialog.AddOption("I have to agree! Goodbye!") + + Dialog.Start() + + --[[ Say() from this NPC + + + Orphaned PlayFlavors + + --]] + +end \ No newline at end of file diff --git a/server/SpawnScripts/Antonica/IgnarSteadirt.lua b/server/SpawnScripts/Antonica/IgnarSteadirt.lua new file mode 100644 index 000000000..0ff23461f --- /dev/null +++ b/server/SpawnScripts/Antonica/IgnarSteadirt.lua @@ -0,0 +1,68 @@ +--[[ + Script Name : IgnarSteadirt.lua + Script Purpose : Ignar Steadirt + Script Author : Jabantiz + Script Date : 08/29/2019 + Script Notes : Auto-Generated from a chat log using SpawnScriptDesigner +--]] + +require "SpawnScripts/Generic/DialogModule" + +function spawn(NPC) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + Dialog.New(NPC, Spawn) + + Dialog.AddDialog("The great Qeynos Claymore -- folks come from all over to pray here.") + Dialog.AddVoiceover("voiceover/english/voice_emotes/greetings/greetings_2_1004.mp3", 0, 0) + Dialog.AddOption("Is that why you are here?", "dlg_2") + Dialog.AddOption("Well, not me. At least, not right now.") + + Dialog.Start() + + --[[ Say() from this NPC + + Say(NPC, "That is a shame. Please leave me to my prayers.", Spawn) + + + Orphaned PlayFlavors + PlayFlavor(NPC, "", "Hmm, I'll keep praying then. Good day.", "", 1689589577, 4560189, Spawn) + PlayFlavor(NPC, "", "Return when you are ready, but be quick. They grow stronger by the hour.", "", 1689589577, 4560189, Spawn) + PlayFlavor(NPC, "voiceover/english/ignar_steadirt/antonica/quest/045_dwarf_ignar_steadirt_g1_onstage7_68f3d9e4.mp3", "Well? Have you spoken with the dwarven centurion yet? His name's Grimbold Steadirt -- you can't miss him, he's near the gates to Firemyst.", "", 1513486151, 2077778983, Spawn) + PlayFlavor(NPC, "voiceover/english/ignar_steadirt/antonica/quest/045_dwarf_ignar_steadirt_g1_shame_b6fbc6ba.mp3", "That is a shame. Please leave me to my prayers.", "", 2730895874, 3053314534, Spawn) + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_2_1004.mp3", "", "", 0, 0, Spawn) + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_3_1004.mp3", "", "", 0, 0, Spawn) + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_1_1004.mp3", "", "", 0, 0, Spawn) + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + + --]] + +end + +function dlg_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + Dialog.New(NPC, Spawn) + + Dialog.AddDialog("I came here seeking strength to defeat my enemies.") + Dialog.AddVoiceover("", "", 0) + Dialog.AddOption("Who are your enemies?", "dlg_3") + + Dialog.Start() +end + +function dlg_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + Dialog.New(NPC, Spawn) + + Dialog.AddDialog("I pray for the strength to conquer the undead, but they are not just my enemies; the undead are the enemies of us all. Several days ago, patrols were sent to see how our battle against the undead was faring. And I -- I have the most disagreeable task of all. I have to stand here and wait for the reports to return. Me! Standing around waiting when there's undead to cleave! Pah!") + Dialog.AddVoiceover("", "", 0) + Dialog.AddOption("Wish I had time to help. Perhaps later.") + + Dialog.Start() +end \ No newline at end of file diff --git a/server/SpawnScripts/Antonica/Jenkins.lua b/server/SpawnScripts/Antonica/Jenkins.lua new file mode 100644 index 000000000..637d226fa --- /dev/null +++ b/server/SpawnScripts/Antonica/Jenkins.lua @@ -0,0 +1,24 @@ +--[[ + Script Name : Jenkins-Say.lua + Script Purpose : Jenkins + Script Author : Jabantiz + Script Date : 08/29/2019 + Script Notes : Auto-Generated from a chat log using SpawnScriptDesigner, Say()'s ONLY +--]] + +require "SpawnScripts/Generic/DialogModule" + +function spawn(NPC) + +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + + + Say(NPC, "I am rather busy.", Spawn) + +end \ No newline at end of file diff --git a/server/SpawnScripts/Antonica/KinamerGalemaul.lua b/server/SpawnScripts/Antonica/KinamerGalemaul.lua new file mode 100644 index 000000000..a2ff03343 --- /dev/null +++ b/server/SpawnScripts/Antonica/KinamerGalemaul.lua @@ -0,0 +1,40 @@ +--[[ + Script Name : KinamerGalemaul.lua + Script Purpose : Kinamer Galemaul + Script Author : Jabantiz + Script Date : 08/29/2019 + Script Notes : Auto-Generated from a chat log using SpawnScriptDesigner +--]] + +require "SpawnScripts/Generic/DialogModule" + +function spawn(NPC) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + Dialog.New(NPC, Spawn) + + Dialog.AddDialog("Keep clear of the forge, my friend. The metal is hot and my hammer swings where it will!") + Dialog.AddVoiceover("voiceover/english/kinamer_galemaul/antonica/kinamergalemaul000.mp3", 165936049, 625468658) + Dialog.AddOption("I think I'll play it safe and stay back here. ") + + Dialog.Start() + + --[[ Say() from this NPC + + + Orphaned PlayFlavors + PlayFlavor(NPC, "voiceover/english/kinamer_galemaul/antonica/kinamergalemaul005.mp3", "", "", 4275576159, 2433123313, Spawn) + PlayFlavor(NPC, "voiceover/english/kinamer_galemaul/antonica/kinamergalemaul001.mp3", "", "", 2027558019, 1718672799, Spawn) + PlayFlavor(NPC, "voiceover/english/kinamer_galemaul/antonica/kinamergalemaul002.mp3", "", "", 1072576802, 3460847281, Spawn) + PlayFlavor(NPC, "voiceover/english/kinamer_galemaul/antonica/kinamergalemaul003.mp3", "", "", 4028492463, 2669208994, Spawn) + PlayFlavor(NPC, "voiceover/english/kinamer_galemaul/antonica/kinamergalemaul004.mp3", "", "", 2013410863, 3232485103, Spawn) + + --]] + +end \ No newline at end of file diff --git a/server/SpawnScripts/Antonica/Knight-LieutenantAlesso.lua b/server/SpawnScripts/Antonica/Knight-LieutenantAlesso.lua new file mode 100644 index 000000000..f33c108dc --- /dev/null +++ b/server/SpawnScripts/Antonica/Knight-LieutenantAlesso.lua @@ -0,0 +1,110 @@ +--[[ + Script Name : SpawnScripts/Antonica/Knight-LieutenantAlesso.lua + Script Purpose : Knight-Lieutenant Alesso + Script Author : geordie0511 + Script Date : 2019.03.13 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +local Qeynos1 = 459 +local Qeynos2 = 460 +local Qeynos3 = 461 +local Qeynos4 = 462 +local Qeynos5 = 463 + +function spawn(NPC) + ProvidesQuest(NPC, Qeynos1) + ProvidesQuest(NPC, Qeynos2) + ProvidesQuest(NPC, Qeynos3) + ProvidesQuest(NPC, Qeynos4) + ProvidesQuest(NPC, Qeynos5) +end + +function respawn(NPC) + spawn(NPC) +end + +function InRange(NPC, Spawn) +end + +function LeaveRange(NPC, Spawn) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + if GetQuestStep(Spawn, Qeynos1) == 4 or GetQuestStep(Spawn, Qeynos2) == 4 or GetQuestStep(Spawn, Qeynos3) == 4 or GetQuestStep(Spawn, Qeynos4) == 4 or GetQuestStep(Spawn, Qeynos5) == 4 then + if GetQuestStep(Spawn, Qeynos1) == 4 then + SetStepComplete(Spawn, Qeynos1, 4) + end + if GetQuestStep(Spawn, Qeynos2) == 4 then + SetStepComplete(Spawn, Qeynos2, 4) + end + if GetQuestStep(Spawn, Qeynos3) == 4 then + SetStepComplete(Spawn, Qeynos3, 4) + end + if GetQuestStep(Spawn, Qeynos4) == 4 then + SetStepComplete(Spawn, Qeynos4, 4) + end + if GetQuestStep(Spawn, Qeynos5) == 4 then + SetStepComplete(Spawn, Qeynos5, 4) + end + PlayFlavor(NPC, "voiceover/english/sir_alesso/qey_north/sir_alesso003.mp3", "", "", 4137826818, 1228273355, Spawn) + AddConversationOption(conversation, "Thanks.") + StartConversation(conversation, NPC, Spawn, "You served Qeynos well and shall be rewarded.") + else + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_3_1012.mp3", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Yes, but where?", "dlg_1_1") + AddConversationOption(conversation, "I'll be on my way.") + StartConversation(conversation, NPC, Spawn, "Hello! As you journey into the city, keep in mind that you may not enter the citadel within North Qeynos at this time. You'll find better adventuring elsewhere.") + end +end + +function dlg_1_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/sir_alesso/qey_north/sir_alesso001.mp3", "", "", 446291068, 907364683, Spawn) + AddConversationOption(conversation, "Okay, but what exactly should I do?", "dlg_2_2") + StartConversation(conversation, NPC, Spawn, "Outside the gates of Qeynos, Antonica is riddled with vermin. Serve Qeynos by destroying these infectious beasts.") +end + +function dlg_2_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/sir_alesso/qey_north/sir_alesso002.mp3", "", "", 2041064542, 2502837283, Spawn) + if HasCompletedQuest(Spawn, Qeynos1) == false and HasQuest(Spawn, Qeynos1) == false then + AddConversationOption(conversation, "I'll do it for Qeynos.", "Quest1") + elseif HasCompletedQuest(Spawn, Qeynos2) == false and HasQuest(Spawn, Qeynos2) == false and HasCompletedQuest(Spawn, Qeynos1) then + AddConversationOption(conversation, "I'll do it for Qeynos.", "Quest2") + elseif HasCompletedQuest(Spawn, Qeynos3) == false and HasQuest(Spawn, Qeynos3) == false and HasCompletedQuest(Spawn, Qeynos2) then + AddConversationOption(conversation, "I'll do it for Qeynos.", "Quest3") + elseif HasCompletedQuest(Spawn, Qeynos4) == false and HasQuest(Spawn, Qeynos4) == false and HasCompletedQuest(Spawn, Qeynos3) then + AddConversationOption(conversation, "I'll do it for Qeynos.", "Quest4") + elseif HasCompletedQuest(Spawn, Qeynos5) == false and HasQuest(Spawn, Qeynos5) == false and HasCompletedQuest(Spawn, Qeynos4) then + AddConversationOption(conversation, "I'll do it for Qeynos.", "Quest5") + end + StartConversation(conversation, NPC, Spawn, "Rid Antonica of the rats, snakes and beetles that plague Qeynos. Dispatch of no less than ten of each and we shall reward your service.") +end + +function Quest1(NPC, Spawn) + OfferQuest(NPC, Spawn, Qeynos1) +end + +function Quest2(NPC, Spawn) + OfferQuest(NPC, Spawn, Qeynos2) +end + +function Quest3(NPC, Spawn) + OfferQuest(NPC, Spawn, Qeynos3) +end + +function Quest4(NPC, Spawn) + OfferQuest(NPC, Spawn, Qeynos4) +end + +function Quest5(NPC, Spawn) + OfferQuest(NPC, Spawn, Qeynos5) +end diff --git a/server/SpawnScripts/Antonica/KnightCaptainAntillin.lua b/server/SpawnScripts/Antonica/KnightCaptainAntillin.lua new file mode 100644 index 000000000..3ac4f5b5b --- /dev/null +++ b/server/SpawnScripts/Antonica/KnightCaptainAntillin.lua @@ -0,0 +1,37 @@ +--[[ + Script Name : Knight-CaptainAntillin.lua + Script Purpose : Knight-Captain Antillin + Script Author : Jabantiz + Script Date : 08/29/2019 + Script Notes : Auto-Generated from a chat log using SpawnScriptDesigner +--]] + +require "SpawnScripts/Generic/DialogModule" + +function spawn(NPC) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + Dialog.New(NPC, Spawn) + + Dialog.AddDialog("I am Captain Antillin of the Coldwind Point Garrison. The roads ahead are infested with gnolls. No Antonican is safe. Turn back now.") + Dialog.AddVoiceover("voiceover/english/knight-captain_antillin/antonica/captainantillin000.mp3", 135895240, 1341774897) + Dialog.AddOption("I shall heed your warning, Captain.") + + Dialog.Start() + + --[[ Say() from this NPC + + + Orphaned PlayFlavors + PlayFlavor(NPC, "voiceover/english/knight-captain_antillin/antonica/captainantillin001.mp3", "", "", 841411724, 1572096111, Spawn) + PlayFlavor(NPC, "voiceover/english/knight-captain_antillin/antonica/captainantillin002.mp3", "", "", 4242603088, 1602660198, Spawn) + + --]] + +end \ No newline at end of file diff --git a/server/SpawnScripts/Antonica/LandwynVelamir.lua b/server/SpawnScripts/Antonica/LandwynVelamir.lua new file mode 100644 index 000000000..a951c047e --- /dev/null +++ b/server/SpawnScripts/Antonica/LandwynVelamir.lua @@ -0,0 +1,79 @@ +--[[ + Script Name : LandwynVelamir.lua + Script Purpose : Landwyn Velamir + Script Author : Jabantiz + Script Date : 08/29/2019 + Script Notes : Auto-Generated from a chat log using SpawnScriptDesigner +--]] + +require "SpawnScripts/Generic/DialogModule" + +function spawn(NPC) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + Dialog.New(NPC, Spawn) + + Dialog.AddDialog("Do you know love, my friend?") + Dialog.AddVoiceover("voiceover/english/voice_emotes/greetings/greetings_1_1034.mp3", 0, 0) + Dialog.AddOption("It seems not as well as you.", "dlg_2") + Dialog.AddOption("I have no time for love.") + + Dialog.Start() + + --[[ Say() from this NPC + + + Orphaned PlayFlavors + PlayFlavor(NPC, "", "I may have lost love, but I have grown as a person.", "", 1689589577, 4560189, Spawn) + PlayFlavor(NPC, "", "Returning to me with information of love?", "", 1689589577, 4560189, Spawn) + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_1_1034.mp3", "", "", 0, 0, Spawn) + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_2_1034.mp3", "", "", 0, 0, Spawn) + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_3_1034.mp3", "", "", 0, 0, Spawn) + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_1_1012.mp3", "", "", 0, 0, Spawn) + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_3_1012.mp3", "", "", 0, 0, Spawn) + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + + --]] + +end + +function dlg_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + Dialog.New(NPC, Spawn) + + Dialog.AddDialog("How lucky I am. I have been holding this gift for my love for quite some time, but, alas, my duties keep me here. How sad it is that this flower shall wilt in the wait. Still, I am lucky, for her beauty shall never wane.") + Dialog.AddVoiceover("", "", 0) + Dialog.AddOption("Oh, what does she look like?", "dlg_3") + Dialog.AddOption("Well, good luck to you. Bye.") + + Dialog.Start() +end + +function dlg_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + Dialog.New(NPC, Spawn) + + Dialog.AddDialog("How does one compare the beauty of a goddess using the words of mere mortals? Her hair is the color of the rising sun, containing the most glorious hues of the dawn. Her skin is akin to porcelain, flawless and immaculate. Her eyes are the green of a springtime meadow, with small bursts like the yellow of daisies in their center. Her lithe body is soft and curved like the waves of the sea. I only wish my eyes could witness her beauty once again.") + Dialog.AddVoiceover("", "", 0) + Dialog.AddOption("She sounds beautiful. Your flowers are wilted though. Let me gather some new ones for you.", "dlg_4") + Dialog.AddOption("Good luck giving her the present. Bye.") + + Dialog.Start() +end + +function dlg_4(NPC, Spawn) + FaceTarget(NPC, Spawn) + Dialog.New(NPC, Spawn) + + Dialog.AddDialog("That would be splendid! Last I saw, there were some beneath a shaded tree north of here.") + Dialog.AddVoiceover("", "", 0) + Dialog.AddOption("I will find them.") + + Dialog.Start() +end \ No newline at end of file diff --git a/server/SpawnScripts/Antonica/MatsyRollingpin.lua b/server/SpawnScripts/Antonica/MatsyRollingpin.lua new file mode 100644 index 000000000..720391501 --- /dev/null +++ b/server/SpawnScripts/Antonica/MatsyRollingpin.lua @@ -0,0 +1,169 @@ +--[[ + Script Name : SpawnScripts/Antonica/MatsyRollingpin.lua + Script Purpose : Matsy Rollingpin + Script Author : geordie0511 + Script Date : 2019.03.14 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +local Achoo = 464 +local Blub = 465 +local Killing = 466 +local Care = 467 +local Pie = 468 +local Mail = 469 + +function spawn(NPC) + SetPlayerProximityFunction(NPC, 10, "InRange", "LeaveRange") + ProvidesQuest(NPC, Achoo) + ProvidesQuest(NPC, Blub) + ProvidesQuest(NPC, Killing) + ProvidesQuest(NPC, Care) + ProvidesQuest(NPC, Pie) + ProvidesQuest(NPC, Mail) +end + +function respawn(NPC) + spawn(NPC) +end + +function InRange(NPC, Spawn) + local choice = math.random(1,7) + if choice == 1 then + PlayFlavor(NPC, "", "I need the extra fish if I am going to make more chowder. Were you still going to fetch that for me?", "", 1689589577, 4560189, Spawn) + elseif choice == 2 then + PlayFlavor(NPC, "", "That poor soul, is he still staggering around? Aroof is such a large one, you'd think he could hold his liquor better then most.", "", 1689589577, 4560189, Spawn) + elseif choice == 3 then + PlayFlavor(NPC, "", "Did you take that letter to Jacque yet?", "", 1689589577, 4560189, Spawn) + elseif choice == 4 then + PlayFlavor(NPC, "", "I need that pepper as soon as possible...oh my water is boiling.", "", 1689589577, 4560189, Spawn) + elseif choice == 5 then + PlayFlavor(NPC, "", "Please give Blarton the cookies and my best wishes. Sweets to sweeten a sour disposition I always say.", "", 1689589577, 4560189, Spawn) + elseif choice == 6 then + PlayFlavor(NPC, "", "As soon as you can gather those ingredients for me, we will make something new and scrumptious!", "", 1689589577, 4560189, Spawn) + elseif choice == 7 then + PlayFlavor(NPC, "", "I need that pepper as soon as possible...oh, my water is boiling.", "", 1689589577, 4560189, Spawn) + else + end +end + +function LeaveRange(NPC, Spawn) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_3_1039.mp3", "", "", 0, 0, Spawn) + + if GetQuestStep(Spawn, Achoo) == 2 then + AddConversationOption(conversation, "Thanks a lot. I'm starving!") + StartConversation(conversation, NPC, Spawn, "Oh my! Pepper! That is exactly what I needed! Here, eat something. You look flush. Have you seen my ladle?") + SetStepComplete(Spawn, Achoo, 2) + elseif GetQuestStep(Spawn, Blub) == 2 then + SetStepComplete(Spawn, Blub, 2) + elseif GetQuestStep(Spawn, Killing) == 2 then + SetStepComplete(Spawn, Killing, 2) + elseif GetQuestStep(Spawn, Care) == 2 then + SetStepComplete(Spawn, Care, 2) + elseif GetQuestStep(Spawn, Pie) == 4 then + SetStepComplete(Spawn, Pie, 4) + elseif HasCompletedQuest(Spawn, Achoo) == false and HasQuest(Spawn, Achoo) == false then + AddConversationOption(conversation, "I have time. What did you need?", "dlg_1_2") + AddConversationOption(conversation, "Sorry, I'm kind of busy.") + StartConversation(conversation, NPC, Spawn, "I'm making a lovely, warm chowder to share with those in need. However, I seem to have forgotten an ingredient. Could you be a doll and run an errand for me?") + elseif HasCompletedQuest(Spawn, Blub) == false and HasQuest(Spawn, Blub) == false and HasCompletedQuest(Spawn, Achoo) then + AddConversationOption(conversation, "Sure, I will go get that now.", "dlg_0_2") + AddConversationOption(conversation, "I don't have time for that today.") + StartConversation(conversation, NPC, Spawn, "So many hungry folks. I am afraid I haven't made enough for everyone! If you want to eat, you'll need to fetch me some extra Coldwind fish so I can stir up another pot.") + elseif HasCompletedQuest(Spawn, Killing) == false and HasQuest(Spawn, Killing) == false and HasCompletedQuest(Spawn, Blub) then + AddConversationOption(conversation, "Sure, I will take it to him now.", "dlg_8_2") + AddConversationOption(conversation, "Sorry, I don't have time for this.") + StartConversation(conversation, NPC, Spawn, "If there is one thing wholesome, hot food is good for it's warming the soul. That, and it helps those who have partaken of the good ale a bit heavily as well. Please, take this to Aroof.") + elseif HasCompletedQuest(Spawn, Care) == false and HasQuest(Spawn, Care) == false and HasCompletedQuest(Spawn, Killing) then + AddConversationOption(conversation, "Sure, I will do that for you.", "dlg_21_2") + AddConversationOption(conversation, "Sorry, no time today.") + StartConversation(conversation, NPC, Spawn, "You have been so helpful today! My cousin, Blarton Blumble, has happened on some terrible luck and broke his leg while fishing. He is the sad sack today and in such a terrible mood. If you could deliver these lovely cookies to him for me, there will be plenty for you when you return!") + elseif HasCompletedQuest(Spawn, Pie) == false and HasQuest(Spawn, Pie) == false and HasCompletedQuest(Spawn, Care) then + AddConversationOption(conversation, "Ok, I will go get those ingredients for you.", "Quest5") + AddConversationOption(conversation, "Sorry, I have to meet someone.") + StartConversation(conversation, NPC, Spawn, "Every cook has their experimental side, which must be nurtured! If you could run out and rustle up these ingredients for me, I think we would make something new and exciting!") + elseif HasCompletedQuest(Spawn, Mail) == false and HasQuest(Spawn, Mail) == false and HasCompletedQuest(Spawn, Pie) then + OfferQuest(NPC, Spawn, Mail) + end +end + +function Quest1(NPC, Spawn) + OfferQuest(NPC, Spawn, Achoo) +end + +function Quest2(NPC, Spawn) + OfferQuest(NPC, Spawn, Blub) +end + +function Quest3(NPC, Spawn) + OfferQuest(NPC, Spawn, Killing) +end + +function Quest4(NPC, Spawn) + OfferQuest(NPC, Spawn, Care) +end + +function Quest5(NPC, Spawn) + OfferQuest(NPC, Spawn, Pie) +end + +------------- Blub + +function dlg_0_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "I will return as quickly as I can.", "Quest2") + StartConversation(conversation, NPC, Spawn, "Wonderful! I'll be waiting for your return.") +end + +-------------- Achoo + +function dlg_1_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Alright.", "dlg_1_3") + StartConversation(conversation, NPC, Spawn, "I need you to purchase some pepper from Merchant Novak and bring it back here. She makes her stand out by the lighthouse near the docks.") +end + +function dlg_1_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Sure, you bet!", "Quest1") + StartConversation(conversation, NPC, Spawn, "Be as swift as you can... I wouldn't want my roux to clump!") +end + +---------------- Killing + +function dlg_8_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Let's hope that's not the case.", "Quest3") + StartConversation(conversation, NPC, Spawn, "If he doesn't sober up we will be needing more than food to save him!") +end + +--------------- Care + +function dlg_21_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "I will return.", "Quest4") + StartConversation(conversation, NPC, Spawn, "Bless your heart.") +end + + diff --git a/server/SpawnScripts/Antonica/Novak.lua b/server/SpawnScripts/Antonica/Novak.lua new file mode 100644 index 000000000..8524c0db9 --- /dev/null +++ b/server/SpawnScripts/Antonica/Novak.lua @@ -0,0 +1,46 @@ +--[[ + Script Name : SpawnScripts/Antonica/Novak.lua + Script Purpose : Novak + Script Author : geordie0511 + Script Date : 2019.03.13 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +local Achoo = 464 + +function spawn(NPC) +end + +function respawn(NPC) + spawn(NPC) +end + +function InRange(NPC, Spawn) +end + +function LeaveRange(NPC, Spawn) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + if GetQuestStep(Spawn, Achoo) == 1 then + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Ok, thanks very much.") + StartConversation(conversation, NPC, Spawn, "Oh, here you go! I will put it on her bill.") + SetStepComplete(Spawn, Achoo, 1) + else + PlayFlavor(NPC, "voiceover/english/merchant_novak/antonica/merchantnovak000.mp3", "", "", 4148197515, 1288700917, Spawn) + AddConversationOption(conversation, "Not right now.") + StartConversation(conversation, NPC, Spawn, "Greetings, perhaps you need to replenish your supplies, or maybe just sell some of what you picked up along the trail?") + end +end + +function dlg_7_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/merchant_novak/antonica/merchantnovak001.mp3", "", "", 1938438342, 930282390, Spawn) + AddConversationOption(conversation, "Thanks. I'll make sure he gets it.", "dlg_7_2") + StartConversation(conversation, NPC, Spawn, "Great, I was almost out of supplies as it stands. I would hate to hike all the way back to Flores. Here's a pouch for Flores. Make sure he gets this, okay?") +end \ No newline at end of file diff --git a/server/SpawnScripts/Antonica/Quallium.lua b/server/SpawnScripts/Antonica/Quallium.lua new file mode 100644 index 000000000..2bc359d85 --- /dev/null +++ b/server/SpawnScripts/Antonica/Quallium.lua @@ -0,0 +1,80 @@ +--[[ + Script Name : Quallium.lua + Script Purpose : Quallium + Script Author : Jabantiz + Script Date : 09/01/2019 + Script Notes : Auto-Generated from a chat log using SpawnScriptDesigner +--]] + +require "SpawnScripts/Generic/DialogModule" + +-- Quest ID's +local ONCE_UPON_AN_ISLE_DREARY = 479 + +-- Item ID's +local VISIONS_OF_COLDWIND_POINT = 15265 + +function spawn(NPC) + ProvidesQuest(NPC, ONCE_UPON_AN_ISLE_DREARY) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + Dialog.New(NPC, Spawn) + + Dialog.AddDialog("Oh look at the mess I am in! My thoughts of wonderment have been stolen from me.") + Dialog.AddVoiceover("voiceover/english/quallium/antonica/quallium000.mp3", 1763017248, 3571952103) + Dialog.AddOption("How can someone steal your thoughts?", "dlg_2") + Dialog.AddOptionRequirement(REQ_QUEST_ELIGIBLE, ONCE_UPON_AN_ISLE_DREARY) + Dialog.AddOption("I have your scrolls.", "dlg_4") + Dialog.AddOptionRequirement(REQ_QUEST_ON_STEP, ONCE_UPON_AN_ISLE_DREARY, 2) + Dialog.AddOption("I don't speak to rathed people. Farewell.") + + Dialog.Start() + +end + +function dlg_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + Dialog.New(NPC, Spawn) + + Dialog.AddDialog("They have my scrolls ... my poems! I was just sitting upon the isles, like I always do, searching for inspiration, when all of the sudden they appeared! I ran and now have lost my scrolls to the howling beasts.") + Dialog.AddVoiceover("voiceover/english/quallium/antonica/quallium001.mp3", 3573977822, 664973830) + Dialog.AddOption("Don't fret. I will go and claim your scrolls.", "OfferQuest1") + Dialog.AddOption("You'll never see the scrolls again. Sorry.") + + Dialog.Start() +end + +function OfferQuest1(NPC, Spawn) + OfferQuest(NPC, Spawn, ONCE_UPON_AN_ISLE_DREARY) +end + +function dlg_4(NPC, Spawn) + FaceTarget(NPC, Spawn) + Dialog.New(NPC, Spawn) + + Dialog.AddDialog("You saved me! These scrolls will take me from being a simple wordsmith to a legendary poet. You have read my work, have you not?") + Dialog.AddVoiceover("voiceover/english/quallium/antonica/quallium003.mp3", 1726246143, 2173439902) + Dialog.AddOption("Uh...yeah. Good stuff. Best ever.", "dlg_5") + + Dialog.Start() +end + +function dlg_5(NPC, Spawn) + + SummonItem(Spawn, VISIONS_OF_COLDWIND_POINT, 1) + + FaceTarget(NPC, Spawn) + Dialog.New(NPC, Spawn) + + Dialog.AddDialog("Well of course you did! You should really visit the sights I wrote about. All four poems were based on actual images I spied from the isle. I am such a genius! Here, read for yourself!") + Dialog.AddVoiceover("voiceover/english/quallium/antonica/quallium004.mp3", 2352960393, 543339399) + Dialog.AddOption("Thanks for the literature my friend.") + + Dialog.Start() +end \ No newline at end of file diff --git a/server/SpawnScripts/Antonica/SelindaWhispersong.lua b/server/SpawnScripts/Antonica/SelindaWhispersong.lua new file mode 100644 index 000000000..36bb1c755 --- /dev/null +++ b/server/SpawnScripts/Antonica/SelindaWhispersong.lua @@ -0,0 +1,24 @@ +--[[ + Script Name : SelindaWhispersong-Say.lua + Script Purpose : Selinda Whispersong + Script Author : Jabantiz + Script Date : 08/29/2019 + Script Notes : Auto-Generated from a chat log using SpawnScriptDesigner, Say()'s ONLY +--]] + +require "SpawnScripts/Generic/DialogModule" + +function spawn(NPC) + +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + + + Say(NPC, "If you're looking for a challenge, you might want to speak with Cru Naseto, and he'll explain our circuit", Spawn) + +end \ No newline at end of file diff --git a/server/SpawnScripts/Antonica/SoldierHomrie.lua b/server/SpawnScripts/Antonica/SoldierHomrie.lua new file mode 100644 index 000000000..915b5a58e --- /dev/null +++ b/server/SpawnScripts/Antonica/SoldierHomrie.lua @@ -0,0 +1,35 @@ +--[[ + Script Name : SoldierHomrie.lua + Script Purpose : Soldier Homrie + Script Author : Jabantiz + Script Date : 08/29/2019 + Script Notes : Auto-Generated from a chat log using SpawnScriptDesigner +--]] + +require "SpawnScripts/Generic/DialogModule" + +function spawn(NPC) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + Dialog.New(NPC, Spawn) + + Dialog.AddDialog("Please, someone help me! One of those ... blasted gnolls got me ... with a poison arrow. Don't know how much time I have.") + Dialog.AddVoiceover("voiceover/english/soldier_homrie/antonica/soldierhomrie000.mp3", 2620699462, 3560167645) + Dialog.AddOption("This is more than I can handle") + + Dialog.Start() + + --[[ Say() from this NPC + + + Orphaned PlayFlavors + + --]] + +end \ No newline at end of file diff --git a/server/SpawnScripts/Antonica/SoldierPellenos.lua b/server/SpawnScripts/Antonica/SoldierPellenos.lua new file mode 100644 index 000000000..d03f901b0 --- /dev/null +++ b/server/SpawnScripts/Antonica/SoldierPellenos.lua @@ -0,0 +1,33 @@ +--[[ + Script Name : SoldierPellenos.lua + Script Purpose : Soldier Pellenos + Script Author : Jabantiz + Script Date : 08/29/2019 + Script Notes : Auto-Generated from a chat log using SpawnScriptDesigner +--]] + +require "SpawnScripts/Generic/DialogModule" + +function spawn(NPC) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + Dialog.New(NPC, Spawn) + + Dialog.AddDialog("Hello there! Come for tea? I'm sorry, but I'm completely out of sugar! Ask the gnolls; they killed everyone here. Yes, everyone ... but me. And now I don't know where the teapot is. But there's no sugar, so it doesn't matter. Hee hee!") + Dialog.AddOption("Goodbye.") + + Dialog.Start() + + --[[ Say() from this NPC + + + Orphaned PlayFlavors + --]] + +end \ No newline at end of file diff --git a/server/SpawnScripts/Antonica/TaskmasterLynette.lua b/server/SpawnScripts/Antonica/TaskmasterLynette.lua new file mode 100644 index 000000000..3b3fb0ad8 --- /dev/null +++ b/server/SpawnScripts/Antonica/TaskmasterLynette.lua @@ -0,0 +1,143 @@ +--[[ + Script Name : SpawnScripts/Antonica/TaskmasterLynette.lua + Script Purpose : Taskmaster Lynette + Script Author : geordie0511 + Script Date : 2019.03.19 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +local A1 = 474 +local A2 = 475 +local A3 = 476 +local A4 = 477 +local A5 = 478 +local A6 = 479 +local A7 = 480 +local A8 = 481 +local A9 = 482 +local A10 = 483 + +function spawn(NPC) + SetPlayerProximityFunction(NPC, 10, "InRange", "LeaveRange") +end + +function respawn(NPC) + spawn(NPC) +end + +function InRange(NPC, Spawn) +end + +function LeaveRange(NPC, Spawn) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/taskmaster_lynette/qey_harbor/taskmasterlynette000.mp3", "", "", 2422547870, 3187249838, Spawn) + if GetQuestStep(Spawn, A1) == 4 then + AddConversationOption(conversation, "I won't bother you then.") + AddConversationOption(conversation, "What is a Far Seas Requisition?", "dlg_3_1") + AddConversationOption(conversation, "I have filled requisition ANT0221.", "dlg_4_1") + StartConversation(conversation, NPC, Spawn, "Unless you're filling a Far Seas Requisition of Antonica I do not have time for you. Time is money.") + elseif GetQuestStep(Spawn, A2) == 3 then + AddConversationOption(conversation, "I won't bother you then.") + AddConversationOption(conversation, "What is a Far Seas Requisition?", "dlg_3_1") + AddConversationOption(conversation, "I have filled requisition ANT0229.", "dlg_4_1") + StartConversation(conversation, NPC, Spawn, "Unless you're filling a Far Seas Requisition of Antonica I do not have time for you. Time is money.") + elseif GetQuestStep(Spawn, A3) == 4 then + AddConversationOption(conversation, "I won't bother you then.") + AddConversationOption(conversation, "What is a Far Seas Requisition?", "dlg_3_1") + AddConversationOption(conversation, "I have filled requisition ANT0235.", "dlg_4_1") + StartConversation(conversation, NPC, Spawn, "Unless you're filling a Far Seas Requisition of Antonica I do not have time for you. Time is money.") + elseif GetQuestStep(Spawn, A4) == 2 then + AddConversationOption(conversation, "I won't bother you then.") + AddConversationOption(conversation, "What is a Far Seas Requisition?", "dlg_3_1") + AddConversationOption(conversation, "I have filled requisition ANT0243.", "dlg_4_1") + StartConversation(conversation, NPC, Spawn, "Unless you're filling a Far Seas Requisition of Antonica I do not have time for you. Time is money.") + elseif GetQuestStep(Spawn, A5) == 2 then + AddConversationOption(conversation, "I won't bother you then.") + AddConversationOption(conversation, "What is a Far Seas Requisition?", "dlg_3_1") + AddConversationOption(conversation, "I have filled requisition ANT0244.", "dlg_4_1") + StartConversation(conversation, NPC, Spawn, "Unless you're filling a Far Seas Requisition of Antonica I do not have time for you. Time is money.") + elseif GetQuestStep(Spawn, A6) == 3 then + AddConversationOption(conversation, "I won't bother you then.") + AddConversationOption(conversation, "What is a Far Seas Requisition?", "dlg_3_1") + AddConversationOption(conversation, "I have filled requisition ANT0351.", "dlg_4_1") + StartConversation(conversation, NPC, Spawn, "Unless you're filling a Far Seas Requisition of Antonica I do not have time for you. Time is money.") + elseif GetQuestStep(Spawn, A7) == 3 then + AddConversationOption(conversation, "I won't bother you then.") + AddConversationOption(conversation, "What is a Far Seas Requisition?", "dlg_3_1") + AddConversationOption(conversation, "I have filled requisition ANT037.", "dlg_4_1") + StartConversation(conversation, NPC, Spawn, "Unless you're filling a Far Seas Requisition of Antonica I do not have time for you. Time is money.") + elseif GetQuestStep(Spawn, A8) == 3 then + AddConversationOption(conversation, "I won't bother you then.") + AddConversationOption(conversation, "What is a Far Seas Requisition?", "dlg_3_1") + AddConversationOption(conversation, "I have filled requisition ANT0424.", "dlg_4_1") + StartConversation(conversation, NPC, Spawn, "Unless you're filling a Far Seas Requisition of Antonica I do not have time for you. Time is money.") + elseif GetQuestStep(Spawn, A9) == 3 then + AddConversationOption(conversation, "I won't bother you then.") + AddConversationOption(conversation, "What is a Far Seas Requisition?", "dlg_3_1") + AddConversationOption(conversation, "I have filled requisition ANT0437.", "dlg_4_1") + StartConversation(conversation, NPC, Spawn, "Unless you're filling a Far Seas Requisition of Antonica I do not have time for you. Time is money.") + elseif GetQuestStep(Spawn, A10) == 2 then + AddConversationOption(conversation, "I won't bother you then.") + AddConversationOption(conversation, "What is a Far Seas Requisition?", "dlg_3_1") + AddConversationOption(conversation, "I have filled requisition ANT0724.", "dlg_4_1") + StartConversation(conversation, NPC, Spawn, "Unless you're filling a Far Seas Requisition of Antonica I do not have time for you. Time is money.") + else + AddConversationOption(conversation, "I won't bother you then.") + AddConversationOption(conversation, "What is a Far Seas Requisition?", "dlg_3_1") + StartConversation(conversation, NPC, Spawn, "Unless you're filling a Far Seas Requisition of Antonica I do not have time for you. Time is money.") + end +end + +function dlg_4_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/taskmaster_lynette/qey_harbor/taskmasterlynette003.mp3", "", "", 2958849260, 4083022013, Spawn) + AddConversationOption(conversation, "It's a pleasure doing business with the Far Seas Trading Company.") + StartConversation(conversation, NPC, Spawn, "This order is overdue! Our policy clearly states that the Far Seas Trading Company does not pay full price for late requisitions. Wait... I see that you are not the huntsman who was issued the order. That means I'll have to file a change of vendor form. Still, you've filled the order and that deserves compensation. Perhaps someday we'll add you to our list of independent contractors. ") + if GetQuestStep(Spawn, A1) == 4 then + SetStepComplete(Spawn, A1, 4) + elseif GetQuestStep(Spawn, A2) == 3 then + SetStepComplete(Spawn, A2, 3) + elseif GetQuestStep(Spawn, A3) == 4 then + SetStepComplete(Spawn, A3, 4) + elseif GetQuestStep(Spawn, A4) == 2 then + SetStepComplete(Spawn, A4, 2) + elseif GetQuestStep(Spawn, A5) == 2 then + SetStepComplete(Spawn, A5, 2) + elseif GetQuestStep(Spawn, A6) == 3 then + SetStepComplete(Spawn, A6, 3) + elseif GetQuestStep(Spawn, A7) == 3 then + SetStepComplete(Spawn, A7, 3) + elseif GetQuestStep(Spawn, A8) == 3 then + SetStepComplete(Spawn, A8, 3) + elseif GetQuestStep(Spawn, A9) == 3 then + SetStepComplete(Spawn, A9, 3) + elseif GetQuestStep(Spawn, A10) == 2 then + SetStepComplete(Spawn, A10, 2) + end +end + +function dlg_3_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/taskmaster_lynette/qey_harbor/taskmasterlynette001.mp3", "", "", 4078840595, 1358943922, Spawn) + AddConversationOption(conversation, "Thanks for the information. ") + AddConversationOption(conversation, "Hire me as your huntsman. ", "dlg_3_2") + StartConversation(conversation, NPC, Spawn, "The Far Seas Trading Company pays huntsmen to gather hides. We issue a requisition order for the kind of hide we wish to buy. The huntsman takes the order and brings us the hides. We pay the huntsman for the hides; if he doesn't return, we don't pay him. For legal purposes, the huntsman is considered a consultant for the Far Seas Trading Company and not a full-time employee; therefore, we assume no liability for the actions, expenses, or injuries of the consultant. ") +end + +function dlg_3_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/taskmaster_lynette/qey_harbor/taskmasterlynette002.mp3", "", "", 3001837794, 1766542530, Spawn) + AddConversationOption(conversation, "Good day to you. ") + StartConversation(conversation, NPC, Spawn, "This is the office for processing requisition orders, not the office for employment. We have more than enough huntsmen on staff. So, unless you happen to find an unclaimed Far Seas Requisition and fill its order... our business is done. Good day. Next!") +end \ No newline at end of file diff --git a/server/SpawnScripts/Antonica/TylliaNavar.lua b/server/SpawnScripts/Antonica/TylliaNavar.lua new file mode 100644 index 000000000..49ea86244 --- /dev/null +++ b/server/SpawnScripts/Antonica/TylliaNavar.lua @@ -0,0 +1,24 @@ +--[[ + Script Name : TylliaNavar-Say.lua + Script Purpose : Tyllia Navar + Script Author : Jabantiz + Script Date : 08/29/2019 + Script Notes : Auto-Generated from a chat log using SpawnScriptDesigner, Say()'s ONLY +--]] + +require "SpawnScripts/Generic/DialogModule" + +function spawn(NPC) + +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + + + Say(NPC, "I have heard stories and legends, but I have never seen the gnolls march like an army should.", Spawn) + +end \ No newline at end of file diff --git a/server/SpawnScripts/Antonica/Vishra.lua b/server/SpawnScripts/Antonica/Vishra.lua new file mode 100644 index 000000000..44dce13bc --- /dev/null +++ b/server/SpawnScripts/Antonica/Vishra.lua @@ -0,0 +1,28 @@ +--[[ + Script Name : SpawnScripts/Antonica/Vishra.lua + Script Purpose : Vishra + Script Author : TyroneSWG + Script Date : 2019.01.15 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +function spawn(NPC) + SetPlayerProximityFunction(NPC, 10, "InRange", "LeaveRange") +end + +function respawn(NPC) + spawn(NPC) +end + +function InRange(NPC, Spawn) +end + +function LeaveRange(NPC, Spawn) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + + PlayFlavor(NPC, "voiceover/english/vishra/antonica/service/050_quest_vishra_callout1_a2281965.mp3", "Beware of the gnolls that prowl nearby.", "", 3599735399, 999434437, Spawn) +end + diff --git a/server/SpawnScripts/Antonica/aGigglegibberGoblinGamblinGameVendor.lua b/server/SpawnScripts/Antonica/aGigglegibberGoblinGamblinGameVendor.lua new file mode 100644 index 000000000..227fedfc1 --- /dev/null +++ b/server/SpawnScripts/Antonica/aGigglegibberGoblinGamblinGameVendor.lua @@ -0,0 +1,55 @@ +--[[ + Script Name : AGigglegibberGoblinGamblinGameVendor.lua + Script Purpose : a Gigglegibber Goblin Gamblin' Game Vendor + Script Author : Jabantiz + Script Date : 08/29/2019 + Script Notes : Auto-Generated from a chat log using SpawnScriptDesigner +--]] + +require "SpawnScripts/Generic/DialogModule" + +function spawn(NPC) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + Dialog.New(NPC, Spawn) + + Dialog.AddDialog("Buy ticket, you! Only ten shiny coins! You give just ten shiny coins and maybe you get um... many shinier coins!") + Dialog.AddOption("How did a goblin get in here? Don't you kill people?", "dlg_2") + Dialog.AddOption("I think I'd rather keep my money, thanks.") + + Dialog.Start() + + --[[ Say() from this NPC + + + Orphaned PlayFlavors + --]] + +end + +function dlg_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + Dialog.New(NPC, Spawn) + + Dialog.AddDialog("Gigglegibber goblins not kill people! War no fun at all. Gigglegibber goblins like shiny coins and funny things! We like frogs, fluffy kittens, potatoes... You have potatoes?") + Dialog.AddOption("Why are potatoes funny?", "dlg_3") + Dialog.AddOption("On second thought, I'll be going now.") + + Dialog.Start() +end + +function dlg_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + Dialog.New(NPC, Spawn) + + Dialog.AddDialog("They tasty! Not funny!... though Gribbik carved funny face in a potato once. That was funny until he eated it. Hey! No try to tricks me with talk about potatoes. You still pays ten shiny coins for ticket! Buy many tickets! If you buys more maybe you win more than many shiny coins!") + Dialog.AddOption("I'll think about it.") + + Dialog.Start() +end \ No newline at end of file diff --git a/server/SpawnScripts/Baubbleshire/AlganTinmizer.lua b/server/SpawnScripts/Baubbleshire/AlganTinmizer.lua new file mode 100644 index 000000000..8ee1d3f98 --- /dev/null +++ b/server/SpawnScripts/Baubbleshire/AlganTinmizer.lua @@ -0,0 +1,22 @@ +--[[ + Script Name : SpawnScripts/Baubbleshire/AlganTinmizer.lua + Script Purpose : Algan Tinmizer + Script Author : Scatman + Script Date : 2009.09.27 + Script Notes : +--]] + +dofile("SpawnScripts/Generic/GenericVoiceOvers.lua") + +function spawn(NPC) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + GenericHail(NPC, Spawn) + Say(NPC, "Greetings! Looking for a bashcogglinator or perhaps a metefozic thermogauge?", Spawn) +end \ No newline at end of file diff --git a/server/SpawnScripts/Baubbleshire/ArbuthnotJumroller.lua b/server/SpawnScripts/Baubbleshire/ArbuthnotJumroller.lua new file mode 100644 index 000000000..ece1a2f67 --- /dev/null +++ b/server/SpawnScripts/Baubbleshire/ArbuthnotJumroller.lua @@ -0,0 +1,25 @@ +--[[ + Script Name : SpawnScripts/Baubbleshire/ArbuthnotJumroller.lua + Script Purpose : Arbuthnot Jumroller + Script Author : Scatman + Script Date : 2009.09.27 + Script Notes : +--]] + +dofile("SpawnScripts/Generic/GenericVoiceOvers.lua") + +function spawn(NPC) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + GenericHail(NPC, Spawn) + AddConversationOption(conversation, "Thanks, but I need to leave now.") + StartConversation(conversation, NPC, Spawn, "Well, then, what can I do for you?") +end \ No newline at end of file diff --git a/server/SpawnScripts/Baubbleshire/BizrinnClamorclang.lua b/server/SpawnScripts/Baubbleshire/BizrinnClamorclang.lua new file mode 100644 index 000000000..4f68619b8 --- /dev/null +++ b/server/SpawnScripts/Baubbleshire/BizrinnClamorclang.lua @@ -0,0 +1,23 @@ +--[[ + Script Name : SpawnScripts/Baubbleshire/BizrinnClamorclang.lua + Script Purpose : Bizrinn Clamorclang + Script Author : Scatman + Script Date : 2009.09.27 + Script Notes : +--]] + +function spawn(NPC) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/bizrinn_clamorclang/qey_village06/bizrinnclamorclang.mp3", "", "", 3866517974, 2558850199, Spawn) + AddConversationOption(conversation, "Ah, that's too bad. I guess I'll get my thingamajig whatchamacalit made somewhere else") + StartConversation(conversation, NPC, Spawn, "Oh! Why hello there! I am so behind on tinker work that I am not taking anymore orders at the moment ... What is it you want?") +end \ No newline at end of file diff --git a/server/SpawnScripts/Baubbleshire/BoloBrassharp.lua b/server/SpawnScripts/Baubbleshire/BoloBrassharp.lua new file mode 100644 index 000000000..3a1a7e17b --- /dev/null +++ b/server/SpawnScripts/Baubbleshire/BoloBrassharp.lua @@ -0,0 +1,135 @@ +--[[ + Script Name : SpawnScripts/Baubbleshire/BoloBrassharp.lua + Script Purpose : Bolo Brassharp + Script Author : John Adams + Script Date : 2009.01.30 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +-- Quest ID's +local HELPING_SOME_FRIENDS = 325 -- was 72 + +function spawn(NPC) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + if HasCompletedQuest(Spawn, HELPING_SOME_FRIENDS) then + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/bolo_brassharp/qey_village06/qst_bolo_brassharp_pranking_78f2abf4.mp3", "I really should leave soon. I can't wait, I can't wait!", "", 571318150, 1838754800, Spawn) + elseif HasQuest(Spawn, HELPING_SOME_FRIENDS) then + if GetQuestStep(Spawn, HELPING_SOME_FRIENDS) >= 2 and not QuestStepIsComplete(Spawn, HELPING_SOME_FRIENDS, 4) then + HelloHello(NPC, Spawn) + else + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/bolo_brassharp/qey_village06/qst_bolo_brassharp_pranking_78f2abf4.mp3", "I really should leave soon. I can't wait, I can't wait!", "", 571318150, 1838754800, Spawn) + end + else + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/bolo_brassharp/qey_village06/qst_bolo_brassharp_notonquest_b910a0ae.mp3", "I know you'd love to speak with me, but I'm a little busy right now.", "", 2952662835, 3836420976, Spawn) + end +end + +function HelloHello(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/bolo_brassharp/qey_village06/quests/bolo_brassharp/bolo_brassharp001.mp3", "", "", 1093318327, 1301148449, Spawn) + AddConversationOption(conversation, "No, sorry. I am here on behalf of someone else.", "dlg_20_1") + AddConversationOption(conversation, "Not now.") + StartConversation(conversation, NPC, Spawn, "Hello? Hello! I take it you seek interesting conversation, no?") +end + +function dlg_20_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/bolo_brassharp/qey_village06/quests/bolo_brassharp/bolo_brassharp002.mp3", "", "", 1427735869, 407597046, Spawn) + AddConversationOption(conversation, "Hmm, I forget her name.", "dlg_20_2") + AddConversationOption(conversation, "Jayla Midhop.", "WhatIDontThinkSo") + StartConversation(conversation, NPC, Spawn, "Oh? And who might that be?") +end + +function dlg_20_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/bolo_brassharp/qey_village06/quests/bolo_brassharp/bolo_brassharp003.mp3", "", "", 3121914646, 3365197240, Spawn) + AddConversationOption(conversation, "Oh, she's the pretty type. She seems to care a great deal about how she looks. What was her name... Jala? Or something.", "dlg_20_3") + StartConversation(conversation, NPC, Spawn, "HER name, eh? Well what does she look like?") +end + +function WhatIDontThinkSo(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "All right, she had another halfling in mind in the event you turned her down, good day!", "WaitWhatDidSheWant") + StartConversation(conversation, NPC, Spawn, "What? I don't think so. That's a little hard to believe.") +end + +function WaitWhatDidSheWant(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "She said she wanted to meet you.", "dlg_20_5") + StartConversation(conversation, NPC, Spawn, "WAIT! What did she want?") +end + +function dlg_20_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/bolo_brassharp/qey_village06/quests/bolo_brassharp/bolo_brassharp004.mp3", "", "", 267219328, 3581650998, Spawn) + AddConversationOption(conversation, "Hmm, yes! That was it! I come on behalf of Jayla Midhop.", "dlg_20_4") + StartConversation(conversation, NPC, Spawn, "Jayla? Jayla Midhop?") +end + +function dlg_20_4(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/bolo_brassharp/qey_village06/quests/bolo_brassharp/bolo_brassharp005.mp3", "", "", 4089683737, 1175948805, Spawn) + AddConversationOption(conversation, "She said she wanted to meet you.", "dlg_20_5") + StartConversation(conversation, NPC, Spawn, "Oh wow! That's great, what does she want?") +end + +function dlg_20_5(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/bolo_brassharp/qey_village06/quests/bolo_brassharp/bolo_brassharp008.mp3", "", "", 1904776578, 2004574358, Spawn) + AddConversationOption(conversation, "In the Oakmyst Forest, in one hour. And she wants you to bring a pie.", "dlg_20_6") + StartConversation(conversation, NPC, Spawn, "Where? When? This is important, speak quickly!") +end + +function dlg_20_6(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/bolo_brassharp/qey_village06/quests/bolo_brassharp/bolo_brassharp009.mp3", "", "", 3533611364, 2889663261, Spawn) + AddConversationOption(conversation, "Marybelle's Meadowberry Pie is probably your best choice.", "dlg_20_7") + StartConversation(conversation, NPC, Spawn, "Wonderful! I KNEW she was interested. Uh, bring a pie? Hmmm, what kind of pie is romantic?") +end + +function dlg_20_7(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/bolo_brassharp/qey_village06/quests/bolo_brassharp/bolo_brassharp010.mp3", "", "", 3936791601, 1760013312, Spawn) + AddConversationOption(conversation, "Well, I happen to have one right now. I'm supposed to deliver it to someone but I have enough time to get another. I'll let you have it, but you'll owe me one.", "dlg_20_8") + StartConversation(conversation, NPC, Spawn, "You're very right, but those take so long to make, I don't think I'll be able to get one.") +end + +function dlg_20_8(NPC, Spawn) + SetStepComplete(Spawn, HELPING_SOME_FRIENDS, 4) + + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/bolo_brassharp/qey_village06/quests/bolo_brassharp/bolo_brassharp011.mp3", "", "", 3760245356, 3275375450, Spawn) + AddConversationOption(conversation, "Er, just doing my job.") + StartConversation(conversation, NPC, Spawn, "That's perfect! Thank you, kind courier.") +end \ No newline at end of file diff --git a/server/SpawnScripts/Baubbleshire/ByrtleBobblepeg.lua b/server/SpawnScripts/Baubbleshire/ByrtleBobblepeg.lua new file mode 100644 index 000000000..a3841d1b4 --- /dev/null +++ b/server/SpawnScripts/Baubbleshire/ByrtleBobblepeg.lua @@ -0,0 +1,32 @@ +--[[ + Script Name : SpawnScripts/Baubbleshire/ByrtleBobblepeg.lua + Script Purpose : Byrtle Bobblepeg + Script Author : Scatman + Script Date : 2009.09.27 + Script Notes : +--]] + +dofile("SpawnScripts/Generic/GenericMerchantVoiceOvers.lua") + +function spawn(NPC) + SetPlayerProximityFunction(NPC, 10, "InRange", "LeaveRange") +end + +function respawn(NPC) + spawn(NPC) +end + +function InRange(NPC, Spawn) + if math.random(0, 100) <= 25 then + FaceTarget(NPC, Spawn) + GenericMerchantHail(NPC, Spawn) + end +end + +function LeaveRange(NPC, Spawn) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + GenericMerchantHail(NPC, Spawn) +end diff --git a/server/SpawnScripts/Baubbleshire/DeputyCliffordson.lua b/server/SpawnScripts/Baubbleshire/DeputyCliffordson.lua new file mode 100644 index 000000000..0c50f4312 --- /dev/null +++ b/server/SpawnScripts/Baubbleshire/DeputyCliffordson.lua @@ -0,0 +1,29 @@ +--[[ + Script Name : SpawnScripts/Baubbleshire/DeputyCliffordson.lua + Script Purpose : Deputy Cliffordson + Script Author : Scatman + Script Date : 2009.09.25 + Script Notes : +--]] + +dofile("SpawnScripts/Generic/GenericGuardVoiceOvers.lua") + +function spawn(NPC) + SetPlayerProximityFunction(NPC, 10, "InRange", "LeaveRange") +end + +function respawn(NPC) + spawn(NPC) +end + +function InRange(NPC, Spawn) + CheckFaction(NPC, Spawn, "Qeynos") +end + +function LeaveRange(NPC, Spawn) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + GenericGuardHail(NPC, Spawn) +end diff --git a/server/SpawnScripts/Baubbleshire/DeputySplitshin.lua b/server/SpawnScripts/Baubbleshire/DeputySplitshin.lua new file mode 100644 index 000000000..7f1b8c3a6 --- /dev/null +++ b/server/SpawnScripts/Baubbleshire/DeputySplitshin.lua @@ -0,0 +1,34 @@ +--[[ + Script Name : SpawnScripts/Baubbleshire/DeputySplitshin.lua + Script Purpose : Deputy Splitshin + Script Author : Scatman + Script Date : 2009.09.25 + Script Notes : +--]] + +dofile("SpawnScripts/Generic/GenericGuardVoiceOvers.lua") + +function spawn(NPC) + SetPlayerProximityFunction(NPC, 10, "InRange", "LeaveRange") +end + +function respawn(NPC) + spawn(NPC) +end + +function InRange(NPC, Spawn) + if math.random(0, 100) <= 25 then + FaceTarget(NPC, Spawn) + GenericGuardHail(NPC, Spawn) + else + CheckFaction(NPC, Spawn, "Qeynos") + end +end + +function LeaveRange(NPC, Spawn) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + GenericGuardHail(NPC, Spawn) +end \ No newline at end of file diff --git a/server/SpawnScripts/Baubbleshire/DigginDiggs.lua b/server/SpawnScripts/Baubbleshire/DigginDiggs.lua new file mode 100644 index 000000000..df19ae8d2 --- /dev/null +++ b/server/SpawnScripts/Baubbleshire/DigginDiggs.lua @@ -0,0 +1,68 @@ +--[[ + Script Name : SpawnScripts/Baubbleshire/DigginDiggs.lua + Script Purpose : Diggin Diggs + Script Author : John Adams + Script Date : 2008.09.23 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +-- Quest ID's +local BADGER_PELTS_FOR_DIGGS = 332 -- was 58 + +function spawn(NPC) + ProvidesQuest(NPC, BADGER_PELTS_FOR_DIGGS) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_3_1006.mp3", "", "", 0, 0, Spawn) + Begin(NPC, Spawn, conversation) +end + +function Begin(NPC, Spawn, conversation) + if not HasQuest(Spawn, BADGER_PELTS_FOR_DIGGS) and not HasCompletedQuest(Spawn, BADGER_PELTS_FOR_DIGGS) then + AddConversationOption(conversation, "I don't need a sales pitch. Got any work?", "GotAnyWork") + elseif HasQuest(Spawn, BADGER_PELTS_FOR_DIGGS) and GetQuestStep(Spawn, BADGER_PELTS_FOR_DIGGS) == 2 then + AddConversationOption(conversation, "Here is your bundle of badget pelts.", "BundleOfPelts") + end + + AddConversationOption(conversation, "Sorry. Just passing by.") + StartConversation(conversation, NPC, Spawn, "You're looking a might shabby there. You could use some fine armor from Diggs' inventory. I carry only the finest quality and sell at outrageously low, low prices! I live for the community.") +end + +function GotAnyWork(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "I'm interested.", "ImInterested") + AddConversationOption(conversation, "I don't have time to hunt.") + StartConversation(conversation, NPC, Spawn, "So, you're a worker with no task, eh? If you're itchin' to fill your pockets with heavy coin, then I have a task for you. Are you interested in hunting?") +end + +function ImInterested(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "I will return with the bundle of badger pelts. ", "OfferQuest1") + StartConversation(conversation, NPC, Spawn, "Then prepare for a hunting trip in the Forest Ruins. I'll pay you handsomely for a bundle of badger pelts. I may even toss in a bit of Diggs' finest armor.") +end + +function OfferQuest1(NPC, Spawn) + FaceTarget(NPC, Spawn) + OfferQuest(NPC, Spawn, BADGER_PELTS_FOR_DIGGS) +end + +function BundleOfPelts(NPC, Spawn) + SetStepComplete(Spawn, BADGER_PELTS_FOR_DIGGS, 2) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "I guess this is better than nothing.") + StartConversation(conversation, NPC, Spawn, "Fine work ... fine work! I must tell you, I just paid my merchant taxes. 'Fraid the coin ain't as heavy as I promised. Sorry, taxes you know? I speak the truth!") +end \ No newline at end of file diff --git a/server/SpawnScripts/Baubbleshire/DondlFuzzlecutter.lua b/server/SpawnScripts/Baubbleshire/DondlFuzzlecutter.lua new file mode 100644 index 000000000..b27ed50b0 --- /dev/null +++ b/server/SpawnScripts/Baubbleshire/DondlFuzzlecutter.lua @@ -0,0 +1,23 @@ +--[[ + Script Name : SpawnScripts/Baubbleshire/DondlFuzzlecutter.lua + Script Purpose : Dondl Fuzzlecutter + Script Author : Scatman + Script Date : 2009.09.27 + Script Notes : +--]] + +function spawn(NPC) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/dondl_fuzzlecutter/qey_village06/dondlfuzzlecutter000.mp3", "", "", 605011151, 3443405792, Spawn) + AddConversationOption(conversation, "I am not a tinkerer. I don't know. ", "dlg_36_1") + StartConversation(conversation, NPC, Spawn, "...The tract-o-fizzle attaches to the wizgiggler. Or is it the other way around? What do you think my friend?") +end \ No newline at end of file diff --git a/server/SpawnScripts/Baubbleshire/Drizzcopper.lua b/server/SpawnScripts/Baubbleshire/Drizzcopper.lua new file mode 100644 index 000000000..2f8395133 --- /dev/null +++ b/server/SpawnScripts/Baubbleshire/Drizzcopper.lua @@ -0,0 +1,23 @@ +--[[ + Script Name : SpawnScripts/Baubbleshire/Drizzcopper.lua + Script Purpose : Drizzcopper + Script Author : Scatman + Script Date : 2009.09.27 + Script Notes : +--]] + +function spawn(NPC) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/banker_drizzcopper/qey_village06/banker_drizzcopper001.mp3", "", "", 2748969711, 2912964073, Spawn) + AddConversationOption(conversation, "Oh. Thank you anyway.") + StartConversation(conversation, NPC, Spawn, "The answer to your question is no. I'm afraid we don't extend lines of credit at this time.") +end \ No newline at end of file diff --git a/server/SpawnScripts/Baubbleshire/DrundoParn.lua b/server/SpawnScripts/Baubbleshire/DrundoParn.lua new file mode 100644 index 000000000..154dbb46a --- /dev/null +++ b/server/SpawnScripts/Baubbleshire/DrundoParn.lua @@ -0,0 +1,209 @@ +--[[ + Script Name : SpawnScripts/Baubbleshire/DrundoParn.lua + Script Purpose : Drundo Parn + Script Author : John Adams + Script Date : 2008.09.23 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +-- Quest ID's +local HELPING_SOME_FRIENDS = 325 -- was 72 +local NEEZERS_SURVEY = 330 -- was 28 + +function spawn(NPC) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + if HasQuest(Spawn, NEEZERS_SURVEY) and not QuestStepIsComplete(Spawn, NEEZERS_SURVEY, 2) then + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/drundo_parn/qey_village06/quests/drundo_parn/drundo_parn001.mp3", "", "", 1538510210, 1256846225, Spawn) + AddConversationOption(conversation, "I'm not selling! I have a few questions for you though.", "dlg_53_1") + AddConversationOption(conversation, "All right, I'm leaving.") + StartConversation(conversation, NPC, Spawn, "Go away! I'm not buying.") + elseif HasCompletedQuest(Spawn, HELPING_SOME_FRIENDS) then + Say(NPC, "My face is so itchy all of a sudden. Gosh, and my eyes are watering. Ugh, is it me or is my face a little pudgy?", Spawn) + elseif HasQuest(Spawn, HELPING_SOME_FRIENDS) then + if GetQuestStep(Spawn, HELPING_SOME_FRIENDS) >= 2 and not QuestStepIsComplete(Spawn, HELPING_SOME_FRIENDS, 2) then + GoAwayNotSelling(NPC, Spawn) + else + Say(NPC, "My face is so itchy all of a sudden. Gosh, and my eyes are watering. Ugh, is it me or is my face a little pudgy?", Spawn) + end + else + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/drundo_parn/qey_village06/qst_drundo_parn_notonquest_976bcd41.mp3", "Don't bother me, I'm drinking!", "", 2257928198, 1328794704, Spawn) + end + + +end + +-------------------------------------------------------------------------------------- +-- GNOME QUEST +-------------------------------------------------------------------------------------- + +function dlg_53_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/drundo_parn/qey_village06/quests/drundo_parn/drundo_parn002.mp3", "", "", 566362818, 2943772990, Spawn) + AddConversationOption(conversation, "No of course not! These questions are very simple and will only take a moment of your time.", "dlg_53_2") + StartConversation(conversation, NPC, Spawn, "Bah! You want to ruin my jolly, ya do!") +end + +function dlg_53_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/drundo_parn/qey_village06/quests/drundo_parn/drundo_parn003.mp3", "", "", 1283631971, 1107457103, Spawn) + AddConversationOption(conversation, "Ok, first question: If you were to calibrate a Fizzo Torque Wrench for work in Lavastorm and then attempt precisely the same work in Everfrost what difference of calibration would be needed?", "dlg_53_3") + AddConversationOption(conversation, "All right, I'm leaving.") + StartConversation(conversation, NPC, Spawn, "Fine, fine. Make it quick. I'm getting behind on my ale consumption.") +end + +function dlg_53_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/drundo_parn/qey_village06/quests/drundo_parn/drundo_parn004.mp3", "", "", 2966163409, 3279443882, Spawn) + AddConversationOption(conversation, "Well?", "dlg_53_4") + StartConversation(conversation, NPC, Spawn, "...") +end + +function dlg_53_4(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/drundo_parn/qey_village06/quests/drundo_parn/drundo_parn005.mp3", "", "", 1855808579, 632330066, Spawn) + AddConversationOption(conversation, "Oh, ok. First question: If you were to calibrate a Fizzo Torque Wrench for work in Lavastorm and then attempt precisely the same work in Everfrost what difference of calibration would be needed?", "dlg_53_5") + StartConversation(conversation, NPC, Spawn, "Okay, I think I'm ready for your questions now.") +end + +function dlg_53_5(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/drundo_parn/qey_village06/quests/drundo_parn/drundo_parn006.mp3", "", "", 3959523964, 427971299, Spawn) + AddConversationOption(conversation, "...", "dlg_53_6") + StartConversation(conversation, NPC, Spawn, "...") +end + +function dlg_53_6(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/drundo_parn/qey_village06/quests/drundo_parn/drundo_parn007.mp3", "", "", 2289626536, 947893658, Spawn) + AddConversationOption(conversation, "All right, next question: what is the average measurement between Keen and Preen on a Spectromatic Nest-Druther?", "dlg_53_7") + StartConversation(conversation, NPC, Spawn, "... erm ...") +end + +function dlg_53_7(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/drundo_parn/qey_village06/quests/drundo_parn/drundo_parn008.mp3", "", "", 3683047633, 2681247972, Spawn) + AddConversationOption(conversation, "Question three: if given the choice in a vote for the new Queen of Qeynos, would you cast your vote for a nut or a bolt?", "dlg_53_8") + StartConversation(conversation, NPC, Spawn, "What did you say about my mother?") +end + +function dlg_53_8(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/drundo_parn/qey_village06/quests/drundo_parn/drundo_parn009.mp3", "", "", 3764415585, 1874332902, Spawn) + AddConversationOption(conversation, "Next question! Though not yet officially proven, which theory concerning thermodynamic particle acceleration and its correlation to metaphysical tides is widely accepted?", "dlg_53_9") + StartConversation(conversation, NPC, Spawn, "I don't understand the question.") +end + +function dlg_53_9(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/drundo_parn/qey_village06/quests/drundo_parn/drundo_parn010.mp3", "", "", 566977886, 741493356, Spawn) + AddConversationOption(conversation, "Almost done. Isn't Neezer Grund amazing?", "dlg_53_10") + StartConversation(conversation, NPC, Spawn, "Thermo-what?") +end + +function dlg_53_10(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/drundo_parn/qey_village06/quests/drundo_parn/drundo_parn011.mp3", "", "", 475313112, 1703279619, Spawn) + AddConversationOption(conversation, "Final question: the Banton particle is supposed to generate high amounts of what?", "dlg_53_11") + StartConversation(conversation, NPC, Spawn, "Who?") +end + +function dlg_53_11(NPC, Spawn) + SetStepComplete(Spawn, NEEZERS_SURVEY, 2) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/drundo_parn/qey_village06/quests/drundo_parn/drundo_parn012.mp3", "", "", 3760395397, 1228652719, Spawn) + AddConversationOption(conversation, "That's fine, I'm done! Thank you for your time.") + StartConversation(conversation, NPC, Spawn, "I don't understand a word you're saying.") +end + +-------------------------------------------------------------------------------------- +-- HALFLING QUEST +-------------------------------------------------------------------------------------- + +function GoAwayNotSelling(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/drundo_parn/qey_village06/quests/drundo_parn/drundo_parn020.mp3", "", "", 3126100476, 608366249, Spawn) + AddConversationOption(conversation, "Oh, I'm sorry. I was just looking for a place to set this pie.", "dlg_19_1") + AddConversationOption(conversation, "All right, I'm leaving.") + StartConversation(conversation, NPC, Spawn, "Go away, I'm not buying.") +end + +function dlg_19_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/drundo_parn/qey_village06/quests/drundo_parn/drundo_parn021.mp3", "", "", 2279001986, 4287954077, Spawn) + AddConversationOption(conversation, "Oh, it is, I assure you. I just finished a pie just like it.", "dlg_19_2") + StartConversation(conversation, NPC, Spawn, "Say, that looks mighty tasty.") +end + +function dlg_19_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/drundo_parn/qey_village06/quests/drundo_parn/drundo_parn022.mp3", "", "", 2543676358, 1458545177, Spawn) + AddConversationOption(conversation, "Not really, I'm so full after the last one that I just don't know what to do with this one.", "dlg_19_3") + StartConversation(conversation, NPC, Spawn, "Twin, tasty pies. That sounds like a wonderful position to be in!") +end + +function dlg_19_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/drundo_parn/qey_village06/quests/drundo_parn/drundo_parn023.mp3", "", "", 1247528637, 571600340, Spawn) + AddConversationOption(conversation, "Berry-frosted cream pie.", "dlg_19_4") + StartConversation(conversation, NPC, Spawn, "Well, I must admit that I've given many pies a good, good home in my time. I would be willing to do so again, if you saw fit, of course. What kind of pie is it?") +end + +function dlg_19_4(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/drundo_parn/qey_village06/quests/drundo_parn/drundo_parn024.mp3", "", "", 2314010653, 3275188878, Spawn) + AddConversationOption(conversation, "Well, I DO have to be leaving very soon anyway. I suppose it wouldn't hurt to let you have it.", "dlg_19_5") + StartConversation(conversation, NPC, Spawn, "Oooooh! That sounds delicious! Whadya say, can I take care of it for you?") +end + +function dlg_19_5(NPC, Spawn) + SetStepComplete(Spawn, HELPING_SOME_FRIENDS, 2) + + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/drundo_parn/qey_village06/quests/drundo_parn/drundo_parn025.mp3", "", "", 3579370961, 357837589, Spawn) + AddConversationOption(conversation, "Don't eat it too fast!") + StartConversation(conversation, NPC, Spawn, "Luck of the Surefoot! Thanks, stranger! I'll put it to good use!") +end \ No newline at end of file diff --git a/server/SpawnScripts/Baubbleshire/FillzerFuzzle.lua b/server/SpawnScripts/Baubbleshire/FillzerFuzzle.lua new file mode 100644 index 000000000..a1d40bc89 --- /dev/null +++ b/server/SpawnScripts/Baubbleshire/FillzerFuzzle.lua @@ -0,0 +1,113 @@ +--[[ + Script Name : SpawnScripts/Baubbleshire/FillzerFuzzle.lua + Script Purpose : Fillzer Fuzzle + Script Author : John Adams + Script Date : 2008.09.23 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +-- Quest ID's +local NEEZERS_SURVEY = 330 -- was 28 + +function spawn(NPC) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + if HasQuest(Spawn, NEEZERS_SURVEY) and not QuestStepIsComplete(Spawn, NEEZERS_SURVEY, 4) then + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/fillzer_fuzzle/qey_village06/quests/fillzer_fuzzle/fillzer_fuzzle001.mp3", "", "", 3200743404, 1664835726, Spawn) + AddConversationOption(conversation, "Luck is an amazing thing.", "dlg_56_1") + AddConversationOption(conversation, "No, I did not know that.") + StartConversation(conversation, NPC, Spawn, "Hello, hello, did you know sometimes jewels can be found in the most surprising places?") + else + Say(NPC, "Not now, I'm looking for treasure!", Spawn) + end +end + +function dlg_56_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/fillzer_fuzzle/qey_village06/quests/fillzer_fuzzle/fillzer_fuzzle002.mp3", "", "", 684618694, 1163926125, Spawn) + AddConversationOption(conversation, "Seventeen years is a long time. How about you take a break and answer some questions for me?", "dlg_57_2") + StartConversation(conversation, NPC, Spawn, "I'll say. I found an amazing gem seventeen years ago. I've been searching for another ever since.") +end + +function dlg_57_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/fillzer_fuzzle/qey_village06/quests/fillzer_fuzzle/fillzer_fuzzle003.mp3", "", "", 1972808563, 2405754009, Spawn) + AddConversationOption(conversation, "Fair enough. Ok, question one: if you were to calibrate a Fizzo Torque Wrench for work in Lavastorm and then attempt precisely the same work in Everfrost what difference of calibration would be needed?", "dlg_57_3") + StartConversation(conversation, NPC, Spawn, "How about you do what you need to do and I keep looking?") +end + +function dlg_57_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/fillzer_fuzzle/qey_village06/quests/fillzer_fuzzle/fillzer_fuzzle004.mp3", "", "", 3369234960, 1114092403, Spawn) + AddConversationOption(conversation, "Question two: what is the average measurement between Keen and Preen on a Spectromatic Nest-Druther?", "dlg_57_4") + StartConversation(conversation, NPC, Spawn, "Variable dependent on precise temperature differences in the two regions. I'd say correct -0.034% at minimum.") +end + +function dlg_57_4(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/fillzer_fuzzle/qey_village06/quests/fillzer_fuzzle/fillzer_fuzzle005.mp3", "", "", 1305378583, 3342464494, Spawn) + AddConversationOption(conversation, "Next question: if given the choice in a vote for the new Queen of Qeynos, would you cast your vote for a nut or a bolt?", "dlg_57_5") + StartConversation(conversation, NPC, Spawn, "In bolts: uh, twenty-nine over fifty, roughly.") +end + +function dlg_57_5(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/fillzer_fuzzle/qey_village06/quests/fillzer_fuzzle/fillzer_fuzzle006.mp3", "", "", 1049508537, 3160462973, Spawn) + AddConversationOption(conversation, "Question four: though not yet officially proven, which theory concerning thermodynamic particle acceleration and its correlation to metaphysical tides is widely accepted?", "dlg_57_6") + StartConversation(conversation, NPC, Spawn, "Going to have to abstain.") +end + +function dlg_57_6(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/fillzer_fuzzle/qey_village06/quests/fillzer_fuzzle/fillzer_fuzzle007.mp3", "", "", 916053189, 3125242157, Spawn) + AddConversationOption(conversation, "Question five: isn't Neezer Grund amazing?", "dlg_57_7") + StartConversation(conversation, NPC, Spawn, "No idea.") +end + +function dlg_57_7(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/fillzer_fuzzle/qey_village06/quests/fillzer_fuzzle/fillzer_fuzzle008.mp3", "", "", 2401347894, 3730158053, Spawn) + AddConversationOption(conversation, "Final question: the Banton particle is supposed to generate high amounts of what?", "dlg_57_8") + StartConversation(conversation, NPC, Spawn, "Who?") +end + +function dlg_57_8(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/fillzer_fuzzle/qey_village06/quests/fillzer_fuzzle/fillzer_fuzzle009.mp3", "", "", 2433452263, 1166262943, Spawn) + AddConversationOption(conversation, "You'll have to wait for the results to come back first.", "dlg_57_9") + StartConversation(conversation, NPC, Spawn, "I think the answer is tension. Did I win? Did I win?") +end + +function dlg_57_9(NPC, Spawn) + SetStepComplete(Spawn, NEEZERS_SURVEY, 4) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/fillzer_fuzzle/qey_village06/quests/fillzer_fuzzle/fillzer_fuzzle010.mp3", "", "", 3356549630, 296738161, Spawn) + AddConversationOption(conversation, "You're welcome.", "dlg_57_10") + StartConversation(conversation, NPC, Spawn, "Ooh I hope I win something. That was great fun, thanks.") +end \ No newline at end of file diff --git a/server/SpawnScripts/Baubbleshire/Fullgrin.lua b/server/SpawnScripts/Baubbleshire/Fullgrin.lua new file mode 100644 index 000000000..2057dd849 --- /dev/null +++ b/server/SpawnScripts/Baubbleshire/Fullgrin.lua @@ -0,0 +1,29 @@ +--[[ + Script Name : SpawnScripts/Baubbleshire/Fullgrin.lua + Script Purpose : Fullgrin + Script Author : Scatman + Script Date : 2009.09.25 + Script Notes : +--]] + +dofile("SpawnScripts/Generic/GenericGuardVoiceOvers.lua") + +function spawn(NPC) + SetPlayerProximityFunction(NPC, 10, "InRange", "LeaveRange") +end + +function respawn(NPC) + spawn(NPC) +end + +function InRange(NPC, Spawn) + CheckFaction(NPC, Spawn, "Qeynos") +end + +function LeaveRange(NPC, Spawn) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + GenericGuardHail(NPC, Spawn) +end diff --git a/server/SpawnScripts/Baubbleshire/GanlaDindlenod.lua b/server/SpawnScripts/Baubbleshire/GanlaDindlenod.lua new file mode 100644 index 000000000..282f33654 --- /dev/null +++ b/server/SpawnScripts/Baubbleshire/GanlaDindlenod.lua @@ -0,0 +1,22 @@ +--[[ + Script Name : SpawnScripts/Baubbleshire/GanlaDindlenod.lua + Script Purpose : Ganla Dindlenod + Script Author : Scatman + Script Date : 2009.09.27 + Script Notes : +--]] + +dofile("SpawnScripts/Generic/GenericVoiceOvers.lua") + +function spawn(NPC) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + GenericHail(NPC, Spawn) + PlayFlavor(NPC, mp3, "What brings you to the fair vale of Baubbleshire? Seeking a bit of merriment among the stouts? ", "", 1689589577, 4560189, Spawn) +end \ No newline at end of file diff --git a/server/SpawnScripts/Baubbleshire/GeologistQuardifle.lua b/server/SpawnScripts/Baubbleshire/GeologistQuardifle.lua new file mode 100644 index 000000000..f23e738a0 --- /dev/null +++ b/server/SpawnScripts/Baubbleshire/GeologistQuardifle.lua @@ -0,0 +1,23 @@ +--[[ + Script Name : SpawnScripts/Baubbleshire/GeologistQuardifle.lua + Script Purpose : Geologist Quardifle + Script Author : Scatman + Script Date : 2009.09.27 + Script Notes : Speaks Gnomish +--]] + +function spawn(NPC) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/geologist_quardifle/qey_village06/geologistquardifle000.mp3", "", "", 1675886861, 3931018482, Spawn) + AddConversationOption(conversation, "Have fun with your rocks, I'm not interested.") + StartConversation(conversation, NPC, Spawn, "These rocks here are interesting... I'm not sure where they came from. It's rather strange... they simply don't fit this area at all...") +end \ No newline at end of file diff --git a/server/SpawnScripts/Baubbleshire/InnkeeperMillbanks.lua b/server/SpawnScripts/Baubbleshire/InnkeeperMillbanks.lua new file mode 100644 index 000000000..c8ec66906 --- /dev/null +++ b/server/SpawnScripts/Baubbleshire/InnkeeperMillbanks.lua @@ -0,0 +1,24 @@ +--[[ + Script Name : SpawnScripts/Baubbleshire/InnkeeperMillbanks.lua + Script Purpose : Innkeeper Millbanks + Script Author : John Adams + Script Date : 2008.09.23 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +function spawn(NPC) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "innkeeper_millbanks/qey_village06/innkeeper010.mp3", "", "", 3433721579, 62806591, Spawn) + AddConversationOption(conversation, "Yes, please.", "dlg_29_1") + AddConversationOption(conversation, "Not right now, thanks.") + StartConversation(conversation, NPC, Spawn, "Hello " .. GetName(Spawn) .. ", I am the Innkeeper for this village. We have received word of your arrival and have a room prepared for you. Would you like to know more about housing?") +end \ No newline at end of file diff --git a/server/SpawnScripts/Baubbleshire/JaylaMidhop.lua b/server/SpawnScripts/Baubbleshire/JaylaMidhop.lua new file mode 100644 index 000000000..46d700d97 --- /dev/null +++ b/server/SpawnScripts/Baubbleshire/JaylaMidhop.lua @@ -0,0 +1,91 @@ +--[[ + Script Name : SpawnScripts/Baubbleshire/JaylaMidhop.lua + Script Purpose : Jayla Midhop + Script Author : John Adams + Script Date : 2009.01.30 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +-- Quest ID's +local HELPING_SOME_FRIENDS = 325 -- was 72 + +function spawn(NPC) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + if HasCompletedQuest(Spawn, HELPING_SOME_FRIENDS) then + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/jayla_midhop/qey_village06/qst_jayla_midhop_pranking_5fde850b.mp3", "Ooh I can't wait to see him.", "", 1235275009, 1310440527, Spawn) + elseif HasQuest(Spawn, HELPING_SOME_FRIENDS) then + if GetQuestStep(Spawn, HELPING_SOME_FRIENDS) >= 2 and not QuestStepIsComplete(Spawn, HELPING_SOME_FRIENDS, 3) then + HelloNeedSomething(NPC, Spawn) + else + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/jayla_midhop/qey_village06/qst_jayla_midhop_pranking_5fde850b.mp3", "Ooh I can't wait to see him.", "", 1235275009, 1310440527, Spawn) + end + else + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/jayla_midhop/qey_village06/qst_jayla_midhop_notonquest_962918cb.mp3", "Sorry, I'd prefer not to talk right now.", "", 286304583, 2343816397, Spawn) + end +end + +function HelloNeedSomething(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/jayla_midhop/qey_village06/quests/jayla_midhop/jayla_midhop001.mp3", "", "", 2550158970, 308187023, Spawn) + AddConversationOption(conversation, "Delivery for Ms. Midhop.", "dlg_21_1") + AddConversationOption(conversation, "No, sorry.") + StartConversation(conversation, NPC, Spawn, "Hello! Do you need something?") +end + +function dlg_21_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/jayla_midhop/qey_village06/quests/jayla_midhop/jayla_midhop002.mp3", "", "", 162007353, 3764356786, Spawn) + AddConversationOption(conversation, "Someone named Remmy.", "dlg_21_2") + StartConversation(conversation, NPC, Spawn, "Ooh, who is it from?") +end + +function dlg_21_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/jayla_midhop/qey_village06/quests/jayla_midhop/jayla_midhop003.mp3", "", "", 2425959259, 2140362898, Spawn) + AddConversationOption(conversation, "He said it should all be in the note there. Oh, and that you should arrive hungry, he'll bring pie.", "dlg_21_3") + StartConversation(conversation, NPC, Spawn, "Oooh! Wonderful! Did he say anything?") +end + +function dlg_21_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/jayla_midhop/qey_village06/quests/jayla_midhop/jayla_midhop004.mp3", "", "", 178679879, 3210897279, Spawn) + AddConversationOption(conversation, "I should hope so.", "dlg_21_4") + StartConversation(conversation, NPC, Spawn, "Perfect, I was just about to eat. I should be perfectly peckish by the time I get to the forest.") +end + +function dlg_21_4(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/jayla_midhop/qey_village06/quests/jayla_midhop/jayla_midhop005.mp3", "", "", 3900670960, 2248772947, Spawn) + AddConversationOption(conversation, "Sorry, was thinking about something else. Have a nice day, Ms. Midhop.", "dlg_21_5") + StartConversation(conversation, NPC, Spawn, "How do you mean?") +end + +function dlg_21_5(NPC, Spawn) + SetStepComplete(Spawn, HELPING_SOME_FRIENDS, 3) + + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/jayla_midhop/qey_village06/quests/jayla_midhop/jayla_midhop006.mp3", "", "", 1071561763, 3714867768, Spawn) + AddConversationOption(conversation, "You're quite welcome.") + StartConversation(conversation, NPC, Spawn, "Oh I most certainly will, thank you very much!") +end \ No newline at end of file diff --git a/server/SpawnScripts/Baubbleshire/JumJum.lua b/server/SpawnScripts/Baubbleshire/JumJum.lua new file mode 100644 index 000000000..630e0f174 --- /dev/null +++ b/server/SpawnScripts/Baubbleshire/JumJum.lua @@ -0,0 +1,47 @@ +--[[ + Script Name : SpawnScripts/Baubbleshire/JumJum.lua + Script Purpose : Jum Jum + Script Author : Scatman + Script Date : 2009.05.11 + Script Notes : +--]] + +function spawn(NPC) + MovementLoopAddLocation(NPC, 875.58, -14.85, -425.02, 3, 0) + MovementLoopAddLocation(NPC, 872.4, -18.42, -439.51, 3, 0) + MovementLoopAddLocation(NPC, 857.69, -18.47, -453.94, 3, 0) + MovementLoopAddLocation(NPC, 854.45, -18.81, -460.17, 3, 0) + MovementLoopAddLocation(NPC, 846.24, -17.61, -460.55, 3, 0) + MovementLoopAddLocation(NPC, 840.82, -14.64, -465.98, 3, 0) + MovementLoopAddLocation(NPC, 834.44, -10.29, -466.54, 3, 0) + MovementLoopAddLocation(NPC, 819.85, -9.08, -479.2, 3, 0) + MovementLoopAddLocation(NPC, 819.3, -9.92, -486.05, 3, math.random(0, 30)) + MovementLoopAddLocation(NPC, 814.71, -11.45, -488.68, 3, 0) + MovementLoopAddLocation(NPC, 814.92, -12.61, -494.18, 3, 0) + MovementLoopAddLocation(NPC, 825.57, -13.73, -495.76, 3, 0) + MovementLoopAddLocation(NPC, 823.85, -19.09, -512.36, 3, 0) + MovementLoopAddLocation(NPC, 829.99, -18.24, -506.78, 3, 0) + MovementLoopAddLocation(NPC, 829.92, -17.88, -499.49, 3, 0) + MovementLoopAddLocation(NPC, 833.51, -18.22, -496.33, 3, 0) + MovementLoopAddLocation(NPC, 833.57, -18.01, -492.46, 3, 0) + MovementLoopAddLocation(NPC, 832.61, -17.83, -489.74, 3, 0) + MovementLoopAddLocation(NPC, 835.43, -17.71, -483.41, 3, math.random(0, 30)) + MovementLoopAddLocation(NPC, 841.16, -17.87, -481.63, 3, 0) + MovementLoopAddLocation(NPC, 843.88, -17.84, -472.36, 3, 0) + MovementLoopAddLocation(NPC, 847.53, -18.14, -466.67, 3, 0) + MovementLoopAddLocation(NPC, 852.22, -18.46, -465.15, 3, 0) + MovementLoopAddLocation(NPC, 863.47, -18.73, -446.32, 3, 0) + MovementLoopAddLocation(NPC, 871.74, -18.5, -441.79, 3, 0) + MovementLoopAddLocation(NPC, 881.84, -18.62, -449.61, 3, 0) + MovementLoopAddLocation(NPC, 891.23, -18.87, -457.63, 3, 0) + MovementLoopAddLocation(NPC, 894.72, -18.41, -454.69, 3, math.random(0, 30)) + MovementLoopAddLocation(NPC, 893.33, -14.96, -442.13, 3, 0) + MovementLoopAddLocation(NPC, 880.45, -14.09, -425.4, 3, 0) +end + +function respawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) +end \ No newline at end of file diff --git a/server/SpawnScripts/Baubbleshire/MaelaMeadows.lua b/server/SpawnScripts/Baubbleshire/MaelaMeadows.lua new file mode 100644 index 000000000..6d65f18fc --- /dev/null +++ b/server/SpawnScripts/Baubbleshire/MaelaMeadows.lua @@ -0,0 +1,197 @@ +--[[ + Script Name : SpawnScripts/Baubbleshire/MaelaMeadows.lua + Script Purpose : Maela Meadows + Script Author : John Adams + Script Date : 2009.01.24 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +-- Quest ID's +local HELPING_A_FRIEND = 323 -- was 70 +local HELPING_A_FRIEND_AGAIN = 324 -- was 71 + +function spawn(NPC) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + + if HasQuest(Spawn, HELPING_A_FRIEND) and GetQuestStep(Spawn, HELPING_A_FRIEND) == 1 then + WaterfallCalming(NPC, Spawn) + elseif HasQuest(Spawn, HELPING_A_FRIEND_AGAIN) and GetQuestStep(Spawn, HELPING_A_FRIEND_AGAIN) == 2 then + HelloAgain(NPC, Spawn) + else + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/maela_meadows/qey_village06/qst_maela_meadows_notonquest_16832d73.mp3", "I simply love this view.", "", 3857807927, 2547090735, Spawn) + end +end + +------------------------------------------------------------------------------------ +-- QUEST 1 +------------------------------------------------------------------------------------ + +function WaterfallCalming(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "Sometimes we all need to be calmed.", "dlg_14_1") + AddConversationOption(conversation, "Perhaps I will view it later.") + StartConversation(conversation, NPC, Spawn, "The waterfall can be so calming. Don't you think?") +end + +function dlg_14_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/maela_meadows/qey_village06/quests/maela_meadows/maela_meadows002.mp3", "", "", 1134137897, 143123492, Spawn) + AddConversationOption(conversation, "Oh, no reason. Life can get to us all. What about yourself?", "dlg_6_1") + StartConversation(conversation, NPC, Spawn, "You read my thoughts! Why have you come to calm yourself, friend?") +end + +function dlg_6_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/maela_meadows/qey_village06/quests/maela_meadows/maela_meadows003.mp3", "", "", 3490828923, 1776770993, Spawn) + AddConversationOption(conversation, "Are you certain?", "IAmCertain") + StartConversation(conversation, NPC, Spawn, "No reason for me either.") +end + +function IAmCertain(NPC, Spawn) + SetStepComplete(Spawn, HELPING_A_FRIEND, 1) + + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "Good day.") + StartConversation(conversation, NPC, Spawn, "I am certain, but thanks.") +end + +------------------------------------------------------------------------------ +-- QUEST 2 +------------------------------------------------------------------------------ + +function HelloAgain(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/maela_meadows/qey_village06/quests/maela_meadows/maela_meadows002.mp3", "", "", 1134137897, 143123492, Spawn) + AddConversationOption(conversation, "Yes. I also brought these for you.", "dlg_10_1") + AddConversationOption(conversation, "Not right now.") + StartConversation(conversation, NPC, Spawn, "Hello again. Come to watch the calming waters?") +end + +function dlg_10_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/maela_meadows/qey_village06/quests/maela_meadows/maela_meadows006.mp3", "", "", 89578648, 3127754238, Spawn) + AddConversationOption(conversation, "You suppose?", "dlg_10_2") + AddConversationOption(conversation, "Don't you like them?", "dlg_10_2") + AddConversationOption(conversation, "Don't you think they're pretty?", "dlg_10_2") + StartConversation(conversation, NPC, Spawn, "Oh... Shadebloom. Hmm, thank you, I suppose.") +end + +function dlg_10_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/maela_meadows/qey_village06/quests/maela_meadows/maela_meadows007.mp3", "", "", 3571289059, 2379238420, Spawn) + AddConversationOption(conversation, "I just thought you could use them.", "dlg_12_3") + AddConversationOption(conversation, "Rondo was hoping they would open you up some.", "dlg_13_3") + StartConversation(conversation, NPC, Spawn, "I'm sorry. Please don't take offense, I just don't understand why you picked these flowers for me.") +end + +function dlg_12_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/maela_meadows/qey_village06/quests/maela_meadows/maela_meadows008.mp3", "", "", 3621726001, 463966533, Spawn) + AddConversationOption(conversation, "What significance do the flowers have?", "dlg_13_4") + StartConversation(conversation, NPC, Spawn, "Well... these flowers are special to me. I'm sure there is no way you could've known.") +end + +function dlg_13_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/maela_meadows/qey_village06/quests/maela_meadows/maela_meadows009.mp3", "", "", 1834924938, 3448661763, Spawn) + AddConversationOption(conversation, "What significance do the flowers have?", "dlg_13_4") + StartConversation(conversation, NPC, Spawn, "That little ruffian! He always knows how to get to me. He must know these flowers mean something to me.") +end + +function dlg_13_4(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/maela_meadows/qey_village06/quests/maela_meadows/maela_meadows010.mp3", "", "", 1115627334, 19199546, Spawn) + AddConversationOption(conversation, "Oh, I'm terribly sorry. I didn't realize.", "dlg_14_5") + StartConversation(conversation, NPC, Spawn, "Well, I suppose it won't hurt to tell you. These are the flowers my husband used to give me.") +end + +function dlg_14_5(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/maela_meadows/qey_village06/quests/maela_meadows/maela_meadows011.mp3", "", "", 2910641607, 257093534, Spawn) + AddConversationOption(conversation, "What is he doing there?", "dlg_14_6") + StartConversation(conversation, NPC, Spawn, "Oh, don't get too upset. He's not gone, not forever at least. He's just off in the Enchanted Lands.") +end + +function dlg_14_6(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/maela_meadows/qey_village06/quests/maela_meadows/maela_meadows011a.mp3", "", "", 2125755974, 213215636, Spawn) + AddConversationOption(conversation, "How long has he been gone?", "dlg_14_7") + StartConversation(conversation, NPC, Spawn, "He's responding to the call that all halflings get. He has returned to what was once our homeland. After we lost Rivervale many of us never thought we would ever get it back. Now, and to my husband especially, reclaiming it seems possible. He couldn't wait that long, however, and has decided he needed to visit.") +end + +function dlg_14_7(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/maela_meadows/qey_village06/quests/maela_meadows/maela_meadows012.mp3", "", "", 3231833073, 1031763109, Spawn) + AddConversationOption(conversation, "You have friends you can talk to, right?", "dlg_14_8") + StartConversation(conversation, NPC, Spawn, "Only a couple of weeks. That's why it's so upsetting that I miss him so much. He isn't scheduled back for three months. I don't know if I'll be able to handle it.") +end + +function dlg_14_8(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/maela_meadows/qey_village06/quests/maela_meadows/maela_meadows013.mp3", "", "", 9272878, 2191624347, Spawn) + AddConversationOption(conversation, "Do you think any less of the many people who come to you for advice?", "dlg_14_9") + StartConversation(conversation, NPC, Spawn, "Yes, but I hate to complain. I don't like to burden other people with my problems, it makes me feel like I'm not being a good friend.") +end + +function dlg_14_9(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/maela_meadows/qey_village06/quests/maela_meadows/maela_meadows014.mp3", "", "", 2061524224, 2107406265, Spawn) + AddConversationOption(conversation, "I'm sure your friends would be very happy to keep you company and lend you support. From what I hear you're a very good listener yourself, I'm sure your friends would jump at the chance to return the favor.", "dlg_14_10") + StartConversation(conversation, NPC, Spawn, "No, I do not.") +end + +function dlg_14_10(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/maela_meadows/qey_village06/quests/maela_meadows/maela_meadows015.mp3", "", "", 3752197711, 2604822585, Spawn) + AddConversationOption(conversation, "Probably not.", "dlg_14_11") + StartConversation(conversation, NPC, Spawn, "Oh, you're probably right. I don't suppose I'm doing myself any good trying to bottle up these feelings, either.") +end + +function dlg_14_11(NPC, Spawn) + SetStepComplete(Spawn, HELPING_A_FRIEND_AGAIN, 2) + + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/maela_meadows/qey_village06/quests/maela_meadows/maela_meadows016.mp3", "", "", 1285927202, 381670493, Spawn) + AddConversationOption(conversation, "You're quite welcome.") + StartConversation(conversation, NPC, Spawn, "Thank you so much for your help.") +end \ No newline at end of file diff --git a/server/SpawnScripts/Baubbleshire/ManglerXII.lua b/server/SpawnScripts/Baubbleshire/ManglerXII.lua new file mode 100644 index 000000000..11a58e59c --- /dev/null +++ b/server/SpawnScripts/Baubbleshire/ManglerXII.lua @@ -0,0 +1,69 @@ +--[[ + Script Name : SpawnScripts/Baubbleshire/ManglerXII + Script Purpose : ManglerXII + Script Author : John Adams + Script Date : 2008.09.23 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +function spawn(NPC) + SetPlayerProximityFunction(NPC, 10, "InRange", "LeaveRange") + MovementLoopAddLocation(NPC, 827.66, -14.06, -480.5, 3, 0) + MovementLoopAddLocation(NPC, 834.32, -14.02, -476.03, 3, 0) + MovementLoopAddLocation(NPC, 839.95, -13.49, -469.79, 3, 0) + MovementLoopAddLocation(NPC, 847.06, -18.88, -454.96, 3, 0) + MovementLoopAddLocation(NPC, 844.23, -18.96, -434.01, 3, 0) + MovementLoopAddLocation(NPC, 846.6, -19.35, -430.72, 3, 0) + MovementLoopAddLocation(NPC, 842.07, -18.98, -435.68, 3, 0) + MovementLoopAddLocation(NPC, 847.61, -18.01, -458.75, 3, 0) + MovementLoopAddLocation(NPC, 853.84, -18.85, -459.52, 3, 0) + MovementLoopAddLocation(NPC, 866.67, -18.41, -442.31, 3, 0) + MovementLoopAddLocation(NPC, 873.2, -18.48, -436.76, 3, math.random(0, 30)) + MovementLoopAddLocation(NPC, 874.93, -14.53, -423.92, 3, 0) + MovementLoopAddLocation(NPC, 864.92, -13.09, -422.42, 3, 0) + MovementLoopAddLocation(NPC, 860.02, -12, -417.94, 3, 0) + MovementLoopAddLocation(NPC, 865.7, -13.2, -422.96, 3, 0) + MovementLoopAddLocation(NPC, 873.41, -14.27, -422.8, 3, 0) + MovementLoopAddLocation(NPC, 884.48, -13.88, -431.04, 3, 0) + MovementLoopAddLocation(NPC, 891.23, -14.67, -441.9, 3, 0) + MovementLoopAddLocation(NPC, 893.57, -16.73, -448.56, 3, 0) + MovementLoopAddLocation(NPC, 891.52, -19.16, -461.79, 3, math.random(0, 30)) + MovementLoopAddLocation(NPC, 882.27, -19.14, -471.52, 3, 0) + MovementLoopAddLocation(NPC, 882.74, -18.56, -481.89, 3, 0) + MovementLoopAddLocation(NPC, 892.26, -17.73, -494.28, 3, 0) + MovementLoopAddLocation(NPC, 893.76, -17.4, -500.52, 3, 0) + MovementLoopAddLocation(NPC, 887.51, -16.56, -510.72, 3, 0) + MovementLoopAddLocation(NPC, 877.19, -17.75, -506.52, 3, 0) + MovementLoopAddLocation(NPC, 868.95, -17.85, -490.44, 3, 0) + MovementLoopAddLocation(NPC, 862.42, -18.29, -485.48, 3, 0) + MovementLoopAddLocation(NPC, 864.92, -18.93, -478.97, 3, 0) + MovementLoopAddLocation(NPC, 860.79, -19.12, -468.87, 3, 0) + MovementLoopAddLocation(NPC, 853.01, -18.57, -465.74, 3, 0) + MovementLoopAddLocation(NPC, 846.36, -17.98, -467.82, 3, math.random(0, 30)) + MovementLoopAddLocation(NPC, 841.69, -17.75, -479.52, 3, 0) + MovementLoopAddLocation(NPC, 835.11, -17.73, -483.31, 3, 0) + MovementLoopAddLocation(NPC, 832.7, -17.82, -488.98, 3, 0) + MovementLoopAddLocation(NPC, 833.92, -18.19, -495.19, 3, 0) + MovementLoopAddLocation(NPC, 829.61, -17.9, -500.32, 3, 0) + MovementLoopAddLocation(NPC, 828.01, -18.23, -508.81, 3, 0) + MovementLoopAddLocation(NPC, 823.92, -17.52, -507.18, 3, 0) + MovementLoopAddLocation(NPC, 822.69, -14.27, -500.15, 3, 0) + MovementLoopAddLocation(NPC, 827.67, -13.96, -494.09, 3, 0) +end + +function respawn(NPC) + spawn(NPC) +end + +function InRange(NPC, Spawn) + if math.random(1, 100) <= 25 then + SendMessage(Spawn, GetName(NPC) .. " barks at you.") + end +end + +function LeaveRange(NPC, Spawn) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) +end \ No newline at end of file diff --git a/server/SpawnScripts/Baubbleshire/ManglerXIII.lua b/server/SpawnScripts/Baubbleshire/ManglerXIII.lua new file mode 100644 index 000000000..47b8f6569 --- /dev/null +++ b/server/SpawnScripts/Baubbleshire/ManglerXIII.lua @@ -0,0 +1,69 @@ +--[[ + Script Name : SpawnScripts/Baubbleshire/ManglerXIII.lua + Script Purpose : ManglerXIII + Script Author : Scatman + Script Date : 2009.05.11 + Script Notes : +--]] + +function spawn(NPC) + SetPlayerProximityFunction(NPC, 10, "InRange", "LeaveRange") + MovementLoopAddLocation(NPC, 826.91, -13.66, -490.21, 3, 0) + MovementLoopAddLocation(NPC, 824.42, -13.35, -493.6, 3, 0) + MovementLoopAddLocation(NPC, 825.03, -13.73, -497.5, 3, 0) + MovementLoopAddLocation(NPC, 822.44, -17.12, -506.62, 3, 0) + MovementLoopAddLocation(NPC, 824.83, -18.54, -510.6, 3, 0) + MovementLoopAddLocation(NPC, 828.88, -18.33, -509.13, 3, 0) + MovementLoopAddLocation(NPC, 829.91, -17.86, -499.07, 3, 0) + MovementLoopAddLocation(NPC, 833.47, -18.14, -495.41, 3, 0) + MovementLoopAddLocation(NPC, 832.5, -17.83, -490.37, 3, 0) + MovementLoopAddLocation(NPC, 835.44, -17.73, -482.96, 3, 0) + MovementLoopAddLocation(NPC, 839.68, -17.81, -482.37, 3, 0) + MovementLoopAddLocation(NPC, 842.27, -17.76, -477.8, 3, math.random(0, 30)) + MovementLoopAddLocation(NPC, 843.31, -17.91, -473.83, 3, 0) + MovementLoopAddLocation(NPC, 848.14, -18.12, -465.73, 3, 0) + MovementLoopAddLocation(NPC, 858.82, -18.92, -466.15, 3, 0) + MovementLoopAddLocation(NPC, 864.6, -19.15, -476.37, 3, 0) + MovementLoopAddLocation(NPC, 851.8, -18.62, -485.51, 3, 0) + MovementLoopAddLocation(NPC, 855.88, -18.35, -489.41, 3, 0) + MovementLoopAddLocation(NPC, 863.1, -18.19, -486.36, 3, 0) + MovementLoopAddLocation(NPC, 872.71, -18.18, -498.09, 3, 0) + MovementLoopAddLocation(NPC, 878.42, -17.27, -509.24, 3, 0) + MovementLoopAddLocation(NPC, 886.65, -16.56, -510.88, 3, 0) + MovementLoopAddLocation(NPC, 893.2, -17.23, -501.53, 3, math.random(0, 30)) + MovementLoopAddLocation(NPC, 891.85, -17.72, -493.99, 3, 0) + MovementLoopAddLocation(NPC, 883.9, -18.4, -484.02, 3, 0) + MovementLoopAddLocation(NPC, 882.57, -19.12, -471.32, 3, 0) + MovementLoopAddLocation(NPC, 889.05, -19.18, -464.32, 3, 0) + MovementLoopAddLocation(NPC, 894.13, -18.26, -453.89, 3, 0) + MovementLoopAddLocation(NPC, 892.86, -14.82, -441.7, 3, 0) + MovementLoopAddLocation(NPC, 882.21, -14.02, -427.67, 3, 0) + MovementLoopAddLocation(NPC, 872, -14.36, -423.21, 3, 0) + MovementLoopAddLocation(NPC, 864.06, -13.03, -422.22, 3, 0) + MovementLoopAddLocation(NPC, 859.19, -11.86, -418.61, 3, 0) + MovementLoopAddLocation(NPC, 863.71, -12.97, -422.26, 3, 0) + MovementLoopAddLocation(NPC, 875.75, -14.65, -424.42, 3, 0) + MovementLoopAddLocation(NPC, 869.91, -18.54, -441.16, 3, 0) + MovementLoopAddLocation(NPC, 858.68, -18.65, -452.03, 3, math.random(0, 30)) + MovementLoopAddLocation(NPC, 853.68, -18.78, -459.91, 3, 0) + MovementLoopAddLocation(NPC, 843.88, -17.12, -462.44, 3, 0) + MovementLoopAddLocation(NPC, 837.31, -13.68, -472.08, 3, 0) + MovementLoopAddLocation(NPC, 828.05, -14.44, -482.45, 3, 0) +end + +function respawn(NPC) + spawn(NPC) +end + +function InRange(NPC, Spawn) + if math.random(1, 100) <= 25 then + SendMessage(Spawn, GetName(NPC) .. " barks at you.") + end +end + +function LeaveRange(NPC, Spawn) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) +end \ No newline at end of file diff --git a/server/SpawnScripts/Baubbleshire/MarshalSurefoot.lua b/server/SpawnScripts/Baubbleshire/MarshalSurefoot.lua new file mode 100644 index 000000000..16e33b310 --- /dev/null +++ b/server/SpawnScripts/Baubbleshire/MarshalSurefoot.lua @@ -0,0 +1,68 @@ +--[[ + Script Name : SpawnScripts/Baubbleshire/MarshalSurefoot.lua + Script Purpose : Marshal Surefoot + Script Author : John Adams + Script Date : 2008.09.23 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +-- Quest ID's +local FIGHT_THE_FORGOTTEN_GUARDIANS = 334 -- was 59 + +function spawn(NPC) + ProvidesQuest(NPC, FIGHT_THE_FORGOTTEN_GUARDIANS) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_3_1006.mp3", "", "", 0, 0, Spawn) + Begin(NPC, Spawn, conversation) +end + +function Begin(NPC, Spawn, conversation) + if not HasQuest(Spawn, FIGHT_THE_FORGOTTEN_GUARDIANS) and not HasCompletedQuest(Spawn, FIGHT_THE_FORGOTTEN_GUARDIANS) and GetLevel(Spawn) >= 5 then + AddConversationOption(conversation, "Do deputies get paid well?", "PaidWell") + elseif HasQuest(Spawn, FIGHT_THE_FORGOTTEN_GUARDIANS) and GetQuestStep(Spawn, FIGHT_THE_FORGOTTEN_GUARDIANS) == 2 then + AddConversationOption(conversation, "It was amazing! I defeated five forgotten guardians.", "KilledGuardians") + end + + AddConversationOption(conversation, "Sorry to hear that. I must be going.") + StartConversation(conversation, NPC, Spawn, "Stand stout! You'd make a fine deputy.") +end + +function PaidWell(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "I can face the titans of the forest.", "CanFaceTitans") + AddConversationOption(conversation, "I'm not facing any titans today.") + StartConversation(conversation, NPC, Spawn, "Aha! A mercenary! I can use your mettle for testing the strengths of the enemy. Can you overcome the titants of the forest? What do ya say, soldier?") +end + +function CanFaceTitans(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "I will face the titans.", "OfferQuest1") + StartConversation(conversation, NPC, Spawn, "Then stand firm and venture to the Forest Ruins. The foes act as Forgotten Guardians. They prey upon the people ... stand tall soldier! Crush a few and return with a tale of victory!") +end + +function OfferQuest1(NPC, Spawn) + FaceTarget(NPC, Spawn) + OfferQuest(NPC, Spawn, FIGHT_THE_FORGOTTEN_GUARDIANS) +end + +function KilledGuardians(NPC, Spawn) + SetStepComplete(Spawn, FIGHT_THE_FORGOTTEN_GUARDIANS, 2) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "Farewell Marshal Surefoot.") + StartConversation(conversation, NPC, Spawn, "What bravery! You laughed in the face of death! You are a true protector of the forest realms. I shall seek you out when I recruit my force of Leatherfoot deputies. You are relieved for now.") +end \ No newline at end of file diff --git a/server/SpawnScripts/Baubbleshire/MirfGuinders.lua b/server/SpawnScripts/Baubbleshire/MirfGuinders.lua new file mode 100644 index 000000000..39fc260b3 --- /dev/null +++ b/server/SpawnScripts/Baubbleshire/MirfGuinders.lua @@ -0,0 +1,24 @@ +--[[ + Script Name : SpawnScripts/Baubbleshire/MirfGuinders.lua + Script Purpose : Mirf Guinders + Script Author : Scatman + Script Date : 2009.09.27 + Script Notes : +--]] + +function spawn(NPC) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + local choice = math.random(1, 2) + if choice == 1 then + PlayFlavor(NPC, "", "Search within your soul! Reclaim your faith! Bristlebane lives within us. Do not abandon his mirth! We are not forsaken!", "", 1689589577, 4560189, Spawn) + elseif choice == 2 then + PlayFlavor(NPC, "voiceover/english/mirf_guinders/qey_village06/100_mirf_guinders_multhail1_59e52ebd.mp3", "Good adventurer, have faith and be well! Perhaps one day you too may serve Bristlebane!", "", 300423478, 2139393363, Spawn) + end +end \ No newline at end of file diff --git a/server/SpawnScripts/Baubbleshire/Misty.lua b/server/SpawnScripts/Baubbleshire/Misty.lua new file mode 100644 index 000000000..5d2507d16 --- /dev/null +++ b/server/SpawnScripts/Baubbleshire/Misty.lua @@ -0,0 +1,39 @@ +--[[ + Script Name : SpawnScripts/Baubbleshire/Misty.lua + Script Purpose : Misty + Script Author : Scatman + Script Date : 2009.05.11 + Script Notes : +--]] + +function spawn(NPC) + MovementLoopAddLocation(NPC, 886.51, -13.74, -433.7, 3, 0) + MovementLoopAddLocation(NPC, 893.35, -15.1, -442.65, 3, 0) + MovementLoopAddLocation(NPC, 893.22, -18.07, -453.45, 3, 0) + MovementLoopAddLocation(NPC, 897.16, -18.12, -463.73, 3, 0) + MovementLoopAddLocation(NPC, 896.33, -17.98, -468.75, 3, 0) + MovementLoopAddLocation(NPC, 884.48, -18.47, -479.11, 3, 0) + MovementLoopAddLocation(NPC, 888.89, -17.96, -490.04, 3, math.random(0, 30)) + MovementLoopAddLocation(NPC, 893.55, -17.65, -496.84, 3, 0) + MovementLoopAddLocation(NPC, 894.02, -16.24, -519.28, 3, 0) + MovementLoopAddLocation(NPC, 888.24, -13.86, -538.79, 3, 0) + MovementLoopAddLocation(NPC, 880.94, -14.64, -532.11, 3, 0) + MovementLoopAddLocation(NPC, 870.38, -16.37, -530.64, 3, 0) + MovementLoopAddLocation(NPC, 878.59, -16.88, -514.71, 3, 0) + MovementLoopAddLocation(NPC, 870.89, -17.85, -491.59, 3, 0) + MovementLoopAddLocation(NPC, 864.27, -18.18, -485.9, 3, 0) + MovementLoopAddLocation(NPC, 863.76, -18.43, -474.64, 3, 0) + MovementLoopAddLocation(NPC, 855.6, -18.89, -460.24, 3, math.random(0, 30)) + MovementLoopAddLocation(NPC, 863.53, -18.78, -446.69, 3, 0) + MovementLoopAddLocation(NPC, 872.08, -18.49, -442.15, 3, 0) + MovementLoopAddLocation(NPC, 875.7, -15.04, -425.86, 3, 0) + MovementLoopAddLocation(NPC, 880.6, -13.86, -432.16, 3, 0) + MovementLoopAddLocation(NPC, 880.84, -13.44, -438.9, 3, 0) +end + +function respawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) +end \ No newline at end of file diff --git a/server/SpawnScripts/Baubbleshire/NeezerGrund.lua b/server/SpawnScripts/Baubbleshire/NeezerGrund.lua new file mode 100644 index 000000000..b396729fe --- /dev/null +++ b/server/SpawnScripts/Baubbleshire/NeezerGrund.lua @@ -0,0 +1,627 @@ +--[[ + Script Name : SpawnScripts/Baubbleshire/NeezerGrund.lua + Script Purpose : Neezer Grund + Script Author : Scatman + Script Date : 2009.09.27 + Script Notes : +--]] + +-- Race ID's +local GNOME = 5 + +-- Quest ID's +local SCRAPTASTIC = 328 -- was 26 +local NOGGINSPARK_REACTORS = 329 -- was 27 +local NEEZERS_SURVEY = 330 -- was 28 +local GETTING_TO_KNOW_POKO = 331 -- was 29 + +-- Item ID's +local NEEZERS_QUESTIONS = 10030 + +function spawn(NPC) + ProvidesQuest(NPC, SCRAPTASTIC) + ProvidesQuest(NPC, NOGGINSPARK_REACTORS) + ProvidesQuest(NPC, NEEZERS_SURVEY) + ProvidesQuest(NPC, GETTING_TO_KNOW_POKO) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + if GetRace(Spawn) == GNOME then + Begin(NPC, Spawn, conversation) + else + NotGnome(NPC, Spawn, conversation) + end +end + +function NotGnome(NPC, Spawn, conversation) + AddConversationOption(conversation, "Busy with what?", "BusyWithWhat") + StartConversation(conversation, NPC, Spawn, "Ah yes, hello, hello. I'm afraid I'm quite busy at the moment.") +end + +function BusyWithWhat(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "Oh...") + AddConversationOption(conversation, "Fine.") + StartConversation(conversation, NPC, Spawn, "Erm... thinking... I'm busy thinking... about gnomish things! I'm busy thinking about gnomish things, I'm afraid you wouldn't understand.") +end + +function Begin(NPC, Spawn, conversation) + if HasCompletedQuest(Spawn, SCRAPTASTIC) then + if HasCompletedQuest(Spawn, NOGGINSPARK_REACTORS) then + if HasCompletedQuest(Spawn, NEEZERS_SURVEY) then + if HasCompletedQuest(Spawn, GETTING_TO_KNOW_POKO) then + SpokenToPokoYet(NPC, Spawn) + elseif HasQuest(Spawn, GETTING_TO_KNOW_POKO) then + SpokenToPokoYet(NPC, Spawn) + else + GatheredInfoYet(NPC, Spawn) + end + elseif HasQuest(Spawn, NEEZERS_SURVEY) then + if GetQuestStep(Spawn, NEEZERS_SURVEY) == 1 then + HelloHowDidItGo(NPC, Spawn) + else + GatheredInfoYet(NPC, Spawn) + end + else + HaveTheReactorsYet(NPC, Spawn) + end + elseif HasQuest(Spawn, NOGGINSPARK_REACTORS) then + HaveTheReactorsYet(NPC, Spawn) + else + CollectMetalYet(NPC, Spawn) + end + elseif HasQuest(Spawn, SCRAPTASTIC) then + CollectMetalYet(NPC, Spawn) + else + NoQuests(NPC, Spawn) + end +end + +function NoQuests(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/neezer_grund/qey_village06/quests/neezer_grund/neezer_grund003.mp3", "", "", 2398754480, 2380734970, Spawn) + AddConversationOption(conversation, "Wonderful!", "Wonderful") + AddConversationOption(conversation, "Well enough.", "Wonderful") + AddConversationOption(conversation, "I cannot complain.", "Wonderful") + AddConversationOption(conversation, "Not too well.", "NotTooWell") + AddConversationOption(conversation, "Horrible.", "NotTooWell") + StartConversation(conversation, NPC, Spawn, "Hello, hello. Good day to you! How are you doing, my friend?") +end + +function Wonderful(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/neezer_grund/qey_village06/quests/neezer_grund/neezer_grund004.mp3", "", "", 159402035, 3144243317, Spawn) + AddConversationOption(conversation, "Indeed!", "Indeed") + AddConversationOption(conversation, "I suppose so.", "Indeed") + StartConversation(conversation, NPC, Spawn, "That's good to hear! Nothing helps the mind learn like a sunny disposition.") +end + +function NotTooWell(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/neezer_grund/qey_village06/quests/neezer_grund/neezer_grund005.mp3", "", "", 3561294899, 2382387513, Spawn) + AddConversationOption(conversation, "Indeed!", "Indeed") + AddConversationOption(conversation, "I suppose so.", "Indeed") + StartConversation(conversation, NPC, Spawn, "Can't win them all, I suppose. But even an upset provides ample opportunity to learn!") +end + +function Indeed(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/neezer_grund/qey_village06/quests/neezer_grund/neezer_grund006.mp3", "", "", 383028818, 2731292797, Spawn) + AddConversationOption(conversation, "Oh, I agree!", "LearningUsefulForAll") + AddConversationOption(conversation, "Sure, I guess.", "LearningUsefulForAll") + StartConversation(conversation, NPC, Spawn, "Learning is what I've structured my life around. Really, most gnomes I know tend to thrive on the thrill of discovery. It's just naturally exhilarating, wouldn't you say?") +end + +function LearningUsefulForAll(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/neezer_grund/qey_village06/quests/neezer_grund/neezer_grund010.mp3", "", "", 2512061908, 1584382933, Spawn) + AddConversationOption(conversation, "What can you teach me?", "TeachYouAlot") + StartConversation(conversation, NPC, Spawn, "Learning is useful for us all. Heck, I'm sure I could teach you a lot. What do you say, care to learn something?") +end + +function TeachYouAlot(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/neezer_grund/qey_village06/quests/neezer_grund/neezer_grund011a.mp3", "", "", 1024129290, 1515220544, Spawn) + AddConversationOption(conversation, "Sounds complicated.", "LessonMostGnomesNeverLearn") + StartConversation(conversation, NPC, Spawn, "Well, I can teach you a lot. At least, I hope I can! But if I can't teach you maybe you can teach me! Great how that works! The first thing I'd like to teach you is the importance of not losing sight of things around you even when you're trying to focus on something very specific.") +end + +function LessonMostGnomesNeverLearn(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/neezer_grund/qey_village06/quests/neezer_grund/neezer_grund011.mp3", "", "", 1744061266, 2073767999, Spawn) + AddConversationOption(conversation, "Socialization?", "BigRoleToPlay") + AddConversationOption(conversation, "The thing after which you're modeling the clockwork?", "ForgetAboutTargetModel") + AddConversationOption(conversation, "Basic needs?", "BigRoleToPlay") + AddConversationOption(conversation, "Complex math?", "BigRoleToPlay") + StartConversation(conversation, NPC, Spawn, "This is a lesson most gnomes never learn, so it's best you get an early start on it. Specifically, in my life at least, it applies to tinkering. The thing is, my ultimate goal when it comes to my clockworks is to make them as realistic as possible. So when I'm tinkering away, what do you imagine the first thing is I lose sight of?") +end + +function BigRoleToPlay(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/neezer_grund/qey_village06/quests/neezer_grund/neezer_grund012.mp3", "", "", 400046078, 4032605046, Spawn) + AddConversationOption(conversation, "Why is it so important?", "CarveAnOrange") + StartConversation(conversation, NPC, Spawn, "Well, sure, partially. That does have a big role to play, no doubt. But the biggest, most important thing that I outright forget always ends up being the target model.") +end + +function CarveAnOrange(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/neezer_grund/qey_village06/quests/neezer_grund/neezer_grund014.mp3", "", "", 560118172, 3267242459, Spawn) + AddConversationOption(conversation, "Not very hard.", "CarveSnapSnafu") + StartConversation(conversation, NPC, Spawn, "Well think about this. If you wanted to carve an orange out of a block of wood how hard would it be?") +end + +function CarveSnapSnafu(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/neezer_grund/qey_village06/quests/neezer_grund/neezer_grund015.mp3", "", "", 1479998599, 3063831444, Spawn) + AddConversationOption(conversation, "A what?", "BetterClockWorkRat") + StartConversation(conversation, NPC, Spawn, "What if you wanted to carve a Compartmental Snap-Snafu?") +end + +function BetterClockWorkRat(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/neezer_grund/qey_village06/quests/neezer_grund/neezer_grund016.mp3", "", "", 1777801851, 3121337531, Spawn) + AddConversationOption(conversation, "Clockwork pineapple?", "PineapplesArentThePoint") + StartConversation(conversation, NPC, Spawn, "Precisely! If I want to make a better clockwork rat I need to study rats. If I want to make a better clockwork wolf I need to study wolves. If I want to make a better clockwork gnome I need to study gnomes. If I want to make a better clockwork pineapple I need to study pineapples!") +end + +function PineapplesArentThePoint(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/neezer_grund/qey_village06/quests/neezer_grund/neezer_grund017.mp3", "", "", 1454499140, 4215645266, Spawn) + AddConversationOption(conversation, "Yes.", "GettingThingsMostExcellent") + AddConversationOption(conversation, "No.", "ThePointIs") + StartConversation(conversation, NPC, Spawn, "Genius, I know. I'm sure it can be done. But pineapples aren't the point here, the point is to make a point, get it?") +end + +function GettingThingsMostExcellent(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/neezer_grund/qey_village06/quests/neezer_grund/neezer_grund019.mp3", "", "", 2892273855, 3107559798, Spawn) + AddConversationOption(conversation, "Huh?", "NeedMetalMyGoodGnome") + StartConversation(conversation, NPC, Spawn, "Good! Getting things is most excellent. Speaking of getting things I need you to get something for me.") +end + +function NeedMetalMyGoodGnome(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/neezer_grund/qey_village06/quests/neezer_grund/neezer_grund020.mp3", "", "", 4025541555, 1679896535, Spawn) + AddConversationOption(conversation, "Am I supposed to learn from this?", "BaubbleshireOverloaded") + StartConversation(conversation, NPC, Spawn, "Metal, my good gnome, metal. The prices have been on a steady rise as of late and, while I can afford it, I am a gnome who enjoys the finer things in life: such as cheap or free metal. That's where you come in.") +end + +function BaubbleshireOverloaded(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/neezer_grund/qey_village06/quests/neezer_grund/neezer_grund021.mp3", "", "", 695807949, 2739522754, Spawn) + AddConversationOption(conversation, "Sure, I'll help.", "MetalCanBeFoundAllAround") + AddConversationOption(conversation, "Sorry, not right now.") + StartConversation(conversation, NPC, Spawn, "Er, why yes. It is vitally important that you do this task in order to expand your horizons. The Baubbleshire is absolutely overloaded with scrap metal, we've got more than we know what to do with. Despite that the brokers are charging outrageous amounts of coin for refined metal. Unfortunately it means more work for me, but I'm going to need you to search the Baubbleshire and collect some scrap metal for me. What do you say?") +end + +function MetalCanBeFoundAllAround(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/neezer_grund/qey_village06/quests/neezer_grund/neezer_grund022.mp3", "", "", 3604190287, 3119663481, Spawn) + AddConversationOption(conversation, "All right.", "OfferQuest1") + StartConversation(conversation, NPC, Spawn, "Great! The metal itself can be found all around the Baubbleshire. Bring it directly back to me once you've found enough.") +end + +function ForgetAboutTargetModel(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/neezer_grund/qey_village06/quests/neezer_grund/neezer_grund013.mp3", "", "", 3876182189, 1831808866, Spawn) + AddConversationOption(conversation, "Why is it so important?", "CarveAnOrange") + StartConversation(conversation, NPC, Spawn, "Precisely! More than anything else I tend to forget about my target model. And that's a huge mistake.") +end + +function ThePointIs(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/neezer_grund/qey_village06/quests/neezer_grund/neezer_grund018.mp3", "", "", 2698816568, 2514712329, Spawn) + AddConversationOption(conversation, "I think I get it now.", "GettingThingsMostExcellent") + StartConversation(conversation, NPC, Spawn, "The point is if you lose sight of all but your creations you may forget what you were trying to create in the first place. For some this is acceptable, for others--like myself--it is to be avoided at all costs. Because of this I study people. I'm studying you right now! And, in the end, it helps me in all aspects of my life.") +end + +function OfferQuest1(NPC, Spawn) + FaceTarget(NPC, Spawn) + OfferQuest(NPC, Spawn, SCRAPTASTIC) +end + +function CollectMetalYet(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/neezer_grund/qey_village06/quests/neezer_grund/neezer_grund023.mp3", "", "", 3712250731, 444462007, Spawn) + + if (HasCompletedQuest(Spawn, SCRAPTASTIC) and not HasCompletedQuest(Spawn, NOGGINSPARK_REACTORS)) or (HasQuest(Spawn, SCRAPTASTIC) and GetQuestStep(Spawn, SCRAPTASTIC) == 2) then + AddConversationOption(conversation, "Yes I have.", "GotMetal") + end + + AddConversationOption(conversation, "No, not yet.") + StartConversation(conversation, NPC, Spawn, "Have you collected the metal yet?") +end + +function GotMetal(NPC, Spawn) + if HasQuest(Spawn, SCRAPTASTIC) then + SetStepComplete(Spawn, SCRAPTASTIC, 2) + end + + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/neezer_grund/qey_village06/quests/neezer_grund/neezer_grund024.mp3", "", "", 699637292, 2939226911, Spawn) + AddConversationOption(conversation, "How so?", "LogicPractically") + StartConversation(conversation, NPC, Spawn, "Brilliant! I hope you learned a valuable lesson. I'm learning, too! Gullibility is an important aspect that I have previously completely ignored when trying to design Clockwork Logical Applications. Working with you is really great, by the way. Working with gnomes and understanding them can help you understand your own creations better. There is far more to tinkering than straight mechanics.") +end + +-------------------------------------------------------------------------------------------------------------------------------- +-- QUEST 2 +-------------------------------------------------------------------------------------------------------------------------------- + +function LogicPractically(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/neezer_grund/qey_village06/quests/neezer_grund/neezer_grund025.mp3", "", "", 695225922, 1471596605, Spawn) + AddConversationOption(conversation, "Nogginspark?", "DontKnowTheName") + StartConversation(conversation, NPC, Spawn, "Well, logic and practicality are the basic reasons that drive a machine's existence. If you break gnomes down we're really only made up of logic and practicality too. I know it sounds weird, but I think it will eventually lead to my own breakthrough. Maybe it'll be bigger than Nogginspark!") +end + +function DontKnowTheName(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/neezer_grund/qey_village06/quests/neezer_grund/neezer_grund026.mp3", "", "", 1318729135, 1687338620, Spawn) + AddConversationOption(conversation, "But who is he?", "NogginsparkWasOnce") + StartConversation(conversation, NPC, Spawn, "It's good that you don't know the name, it means he's keeping out of the public eye.") +end + +function NogginsparkWasOnce(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/neezer_grund/qey_village06/quests/neezer_grund/neezer_grund027.mp3", "", "", 2506302340, 2745721634, Spawn) + AddConversationOption(conversation, "That isn't surprising.", "NogginsparkWasntVeryKeen") + StartConversation(conversation, NPC, Spawn, "Nogginspark was once a resident of the Baubbleshire. Like myself he was very interested in making his creations more and more life-like. Unlike myself he spent most of his time studying rats. This really started to creep out the citizens of the Baubbleshire.") +end + +function NogginsparkWasntVeryKeen(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/neezer_grund/qey_village06/quests/neezer_grund/neezer_grund028.mp3", "", "", 801212880, 3491241694, Spawn) + AddConversationOption(conversation, "What did he do?", "HeLeft") + StartConversation(conversation, NPC, Spawn, "Nogginspark wasn't very keen on social politics, but it wasn't hard for him to pick up on how everyone was treating him. Rumors about him were being spread and it became too much for him.") +end + +function HeLeft(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/neezer_grund/qey_village06/quests/neezer_grund/neezer_grund029.mp3", "", "", 494301261, 212992841, Spawn) + AddConversationOption(conversation, "What is a Nogginspark Reactor?", "AmazingDevice") + StartConversation(conversation, NPC, Spawn, "He left. Disappeared. Just before his greatest breakthrough ever, the Nogginspark Reactor. Those of us that knew him well tried to replicate his work with no success. We don't know how far along in his work he was, but when he disappeared so did the promise of the Nogginspark Reactor.") +end + +function AmazingDevice(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/neezer_grund/qey_village06/quests/neezer_grund/neezer_grund030.mp3", "", "", 3630655555, 2040609157, Spawn) + AddConversationOption(conversation, "How do you know so much about it.", "SomeWhatClose") + StartConversation(conversation, NPC, Spawn, "It's an amazing device. No bigger than the thumb of a half elf it can produce far more power than any other device of its size. It won't save the world, but it does have a great number of uses. Anything that is small and needs power is best served by a Nogginspark Reactor.") +end + +function SomeWhatClose(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/neezer_grund/qey_village06/quests/neezer_grund/neezer_grund031.mp3", "", "", 1026846973, 2969612033, Spawn) + AddConversationOption(conversation, "How so?", "VesselsNogginspark") + StartConversation(conversation, NPC, Spawn, "Like I said, Nogginspark and I were somewhat close. In fact, and don't let anyone know this, Nogginspark is still very much alive and well. He didn't like the effect he had on the townspeople so he fled into the Catacombs. But, at the same time, he wanted his device to do good. A few weeks after he disappeared we started noticing more rats in the Baubbleshire. These rats were the key.") +end + +function VesselsNogginspark(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/neezer_grund/qey_village06/quests/neezer_grund/neezer_grund032.mp3", "", "", 1856257557, 1013614090, Spawn) + AddConversationOption(conversation, "That's amazing.", "UseThemInGadgets") + StartConversation(conversation, NPC, Spawn, "They were the vessels through which Nogginspark would transport his reactors to other tinkerers. Rats are annoying but this was no plague, so most people ignored them. As it turns out, these weren't rats at all, merely very well-crafted replicas. Some of Nogginspark's finest work. And each rat is powered by a Nogginspark Reactor. He sends them on a regular basis, and we collect them. He really is a philanthropist.") +end + +function UseThemInGadgets(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/neezer_grund/qey_village06/quests/neezer_grund/neezer_grund033.mp3", "", "", 3293153605, 462704824, Spawn) + AddConversationOption(conversation, "What must I do?", "FalseRats") + StartConversation(conversation, NPC, Spawn, "Yes, it is! What I'd like you to do is collect some for me. I use them in a number of gadgets and nobody has figured out how to create them yet. This is why we rely on Nogginspark to send more. There are plenty of his rats in the Baubbleshire, they usually hang out near the entrance to the Catacombs.") +end + +function FalseRats(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/neezer_grund/qey_village06/quests/neezer_grund/neezer_grund034.mp3", "", "", 403739352, 2116282291, Spawn) + AddConversationOption(conversation, "Are they dangerous?", "OfferQuest2") + StartConversation(conversation, NPC, Spawn, "Just knock those false-rats senseless and remove the reactors. Get seven of them for me, if you would be so kind.") +end + +function OfferQuest2(NPC, Spawn) + FaceTarget(NPC, Spawn) + OfferQuest(NPC, Spawn, NOGGINSPARK_REACTORS) +end + +function HaveTheReactorsYet(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/neezer_grund/qey_village06/quests/neezer_grund/neezer_grund035.mp3", "", "", 394906506, 3033570210, Spawn) + + if (HasCompletedQuest(Spawn, NOGGINSPARK_REACTORS) and not HasCompletedQuest(Spawn, NEEZERS_SURVEY)) or (HasQuest(Spawn, NOGGINSPARK_REACTORS) and GetQuestStep(Spawn, NOGGINSPARK_REACTORS) == 2) then + AddConversationOption(conversation, "Yes, I do.", "GotReactors") + end + + AddConversationOption(conversation, "No, not yet.") + StartConversation(conversation, NPC, Spawn, "Do you have the reactors?") +end + +function GotReactors(NPC, Spawn) + if HasQuest(Spawn, NOGGINSPARK_REACTORS) then + SetStepComplete(Spawn, NOGGINSPARK_REACTORS, 2) + end + + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/neezer_grund/qey_village06/quests/neezer_grund/neezer_grund036.mp3", "", "", 813222908, 4004987438, Spawn) + AddConversationOption(conversation, "Halflings?", "YouThoughtAboutHalflings") + StartConversation(conversation, NPC, Spawn, "Ahhh, magnificent. I do appreciate this, really I do. Quickly now, don't think about halflings!") +end + +-------------------------------------------------------------------------------------------------------------- +-- QUEST 3 +-------------------------------------------------------------------------------------------------------------- + +function YouThoughtAboutHalflings(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/neezer_grund/qey_village06/quests/neezer_grund/neezer_grund037.mp3", "", "", 2556511824, 3361874688, Spawn) + AddConversationOption(conversation, "Does it work?", "WorksWonderfully") + StartConversation(conversation, NPC, Spawn, "You thought about halflings when I said that, didn't you? It's a new technique I'm working on to help gather data about people. Raw data, nothing but the foremost thoughts on the brain. That's why it's got to be quick.") +end + +function WorksWonderfully(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/neezer_grund/qey_village06/quests/neezer_grund/neezer_grund038.mp3", "", "", 2990773465, 2059831606, Spawn) + AddConversationOption(conversation, "Sure, I guess.", "AskAllOfTheQuestions") + StartConversation(conversation, NPC, Spawn, "Oh it works wonderfully! I bet you're still thinking about halflings. You seem interested, how would you like to help me collect some data?") +end + +function AskAllOfTheQuestions(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/neezer_grund/qey_village06/quests/neezer_grund/neezer_grund039.mp3", "", "", 1467938151, 2246844233, Spawn) + AddConversationOption(conversation, "What questions?", "SorryHereTheyAre") + StartConversation(conversation, NPC, Spawn, "Great! Go and ask all of the questions to Drundo in the tavern, Remo, who I think may be hiding out in the eastern hills of the Baubbleshire, and Fillzer who was also in the eastern hills last I saw him. Keep in mind, the answers aren't the only important things to note here.") +end + +function SorryHereTheyAre(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/neezer_grund/qey_village06/quests/neezer_grund/neezer_grund039a.mp3", "", "", 1439058546, 1389547628, Spawn) + AddConversationOption(conversation, "That's strange.", "OfferQuest3") + StartConversation(conversation, NPC, Spawn, "Sorry, here they are. Ask the questions rapidly once you start, keep their answers fresh. Also, and this is also very important, you must write down the very first word in their answer. With that information I will be able to determine what is on their mind specifically, and whether or not they're actually understanding the question.") +end + +function OfferQuest3(NPC, Spawn) + FaceTarget(NPC, Spawn) + OfferQuest(NPC, Spawn, NEEZERS_SURVEY) +end + +function GatheredInfoYet(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/neezer_grund/qey_village06/quests/neezer_grund/neezer_grund040.mp3", "", "", 167402545, 3218119097, Spawn) + + if (HasCompletedQuest(Spawn, NEEZERS_SURVEY) and not HasCompletedQuest(Spawn, GETTING_TO_KNOW_POKO)) or (HasQuest(Spawn, NEEZERS_SURVEY) and GetQuestStep(Spawn, NEEZERS_SURVEY) == 5) then + AddConversationOption(conversation, "Yes I did.", "GatheredInfo") + elseif HasQuest(Spawn, NEEZERS_SURVEY) then + HelloHowDidItGo(NPC, Spawn) + end + + AddConversationOption(conversation, "Not yet.") + StartConversation(conversation, NPC, Spawn, "Did you gather the information?") +end + +function HelloHowDidItGo(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "I need a copy of the questions.", "NeedCopyQuestions") + StartConversation(conversation, NPC, Spawn, "Hello, how did it go?") +end + +function NeedCopyQuestions(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "Ok, I'll be back once I've gotten the answers.") + + -- Neezer's Questions + if HasItem(Spawn, NEEZERS_QUESTIONS) then + StartConversation(conversation, NPC, Spawn, "I already gave you a copy, make sure you check your bags and maybe even your bank, then examine them!") + else + SummonItem(Spawn, NEEZERS_QUESTIONS, 1) + StartConversation(conversation, NPC, Spawn, "Here you go. Come back if you need another copy.") + end +end + +function GatheredInfo(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/neezer_grund/qey_village06/quests/neezer_grund/neezer_grund041.mp3", "", "", 89357876, 2587237282, Spawn) + AddConversationOption(conversation, "Yes.", "Question1") + StartConversation(conversation, NPC, Spawn, "Ok. I'm all set up to record the data but I need you to give it to me in a specific fashion. I'll say 'question one' and you'll give me Drundo's answer, then Remo's answer, then Fillzer's answer. Do you understand?") +end + +function Question1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/neezer_grund/qey_village06/quests/neezer_grund/neezer_grund042.mp3", "", "", 3205382465, 4154417613, Spawn) + AddConversationOption(conversation, "Erm, leave, variable.", "Question2") + StartConversation(conversation, NPC, Spawn, "Ok. Question one.") +end + +function Question2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/neezer_grund/qey_village06/quests/neezer_grund/neezer_grund043.mp3", "", "", 1399090384, 3898684702, Spawn) + AddConversationOption(conversation, "What, the, in.", "Question3") + StartConversation(conversation, NPC, Spawn, "All right. Question two.") +end + +function Question3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/neezer_grund/qey_village06/quests/neezer_grund/neezer_grund044.mp3", "", "", 798104376, 2325700503, Spawn) + AddConversationOption(conversation, "I, nut, going.", "Question4") + StartConversation(conversation, NPC, Spawn, "Question three.") +end + +function Question4(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/neezer_grund/qey_village06/quests/neezer_grund/neezer_grund045.mp3", "", "", 1339784146, 2591203703, Spawn) + AddConversationOption(conversation, "Thermo-what, I, no.", "Question5") + StartConversation(conversation, NPC, Spawn, "All right. Question four.") +end + +function Question5(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/neezer_grund/qey_village06/quests/neezer_grund/neezer_grund046.mp3", "", "", 2378626494, 4165116500, Spawn) + AddConversationOption(conversation, "Who, who, who.", "Question6") + StartConversation(conversation, NPC, Spawn, "Theramwatt?! I can't believe Drundo knew that one! Ok, question five.") +end + +function Question6(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/neezer_grund/qey_village06/quests/neezer_grund/neezer_grund047.mp3", "", "", 2355834496, 4028717093, Spawn) + AddConversationOption(conversation, "I, is, I.", "ATautology") + StartConversation(conversation, NPC, Spawn, "Ouch. Ok, question six.") +end + +function ATautology(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/neezer_grund/qey_village06/quests/neezer_grund/neezer_grund048.mp3", "", "", 1677411622, 1337570204, Spawn) + AddConversationOption(conversation, "I guess so.", "TakeMeLongTime") + StartConversation(conversation, NPC, Spawn, "A tautology! Interesting! So my answers are: erm leave variable what the in I nut going Thermawatt I no who who who I is I. Wow, this is exciting stuff!") +end + +function TakeMeLongTime(NPC, Spawn) + if HasQuest(Spawn, NEEZERS_SURVEY) then + SetStepComplete(Spawn, NEEZERS_SURVEY, 5) + end + + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/neezer_grund/qey_village06/quests/neezer_grund/neezer_grund049.mp3", "", "", 305933006, 365026974, Spawn) + AddConversationOption(conversation, "Who am I taking this to?", "PokoZing") + AddConversationOption(conversation, "Not a chance.") + StartConversation(conversation, NPC, Spawn, "This is going to take me a long time to decipher. I may never figure it out! Sorry, I'm a bit excited. Listen, while I take care of this I've got a friend who can keep you occupied. In fact, take this part to him for me!") +end + +------------------------------------------------------------------------------------------------------------------------ +-- Quest 4 +------------------------------------------------------------------------------------------------------------------------ + +function PokoZing(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/neezer_grund/qey_village06/quests/neezer_grund/neezer_grund050.mp3", "", "", 2003101354, 3738442152, Spawn) + AddConversationOption(conversation, "I'll deliver this right away.", "OfferQuest4") + StartConversation(conversation, NPC, Spawn, "Poko Zing! You'll find him in the Forest Ruins, which you can get to from here.") +end + +function OfferQuest4(NPC, Spawn) + FaceTarget(NPC, Spawn) + OfferQuest(NPC, Spawn, GETTING_TO_KNOW_POKO) +end + +function SpokenToPokoYet(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + if HasCompletedQuest(Spawn, GETTING_TO_KNOW_POKO) then + AddConversationOption(conversation, "Yes, I have.", "WonderfulGladToHear") + end + + AddConversationOption(conversation, "Not yet.") + StartConversation(conversation, NPC, Spawn, "Have you spoken to Poko yet?") +end + +function WonderfulGladToHear(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "All right.") + StartConversation(conversation, NPC, Spawn, "Wonderful! I'm glad to hear that. Anyway, back to my studying! Keep learning!") +end \ No newline at end of file diff --git a/server/SpawnScripts/Baubbleshire/NylaDiggs.lua b/server/SpawnScripts/Baubbleshire/NylaDiggs.lua new file mode 100644 index 000000000..572322d77 --- /dev/null +++ b/server/SpawnScripts/Baubbleshire/NylaDiggs.lua @@ -0,0 +1,25 @@ +--[[ + Script Name : SpawnScripts/Baubbleshire/NylaDiggs.lua + Script Purpose : Nyla Diggs + Script Author : Scatman + Script Date : 2009.09.27 + Script Notes : Speaks Stout. +--]] + +function spawn(NPC) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + local choice = math.random(1, 2) + + if choice == 1 then + PlayFlavor(NPC, "voiceover/english/halfling_base_1/ft/halfling/halfling_base_1_1_garbled_gf_54e55451.mp3", "garbled text not to be translated", "", 1486303618, 2371451914, Spawn) + elseif choice == 2 then + PlayFlavor(NPC, "voiceover/english/halfling_base_1/ft/halfling/halfling_base_1_1_garbled_gf_823f1021.mp3", "garbled text not to be translated", "", 3051197299, 2401133915, Spawn) + end +end \ No newline at end of file diff --git a/server/SpawnScripts/Baubbleshire/Oatheaver.lua b/server/SpawnScripts/Baubbleshire/Oatheaver.lua new file mode 100644 index 000000000..f78fb16a0 --- /dev/null +++ b/server/SpawnScripts/Baubbleshire/Oatheaver.lua @@ -0,0 +1,41 @@ +--[[ + Script Name : SpawnScripts/Baubbleshire/Oatheaver.lua + Script Purpose : Oatheaver + Script Author : John Adams + Script Date : 2008.09.23 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +function spawn(NPC) + SetPlayerProximityFunction(NPC, 10, "InRange", "LeaveRange") +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + SaySomethingRandom(NPC, Spawn) +end + +function InRange(NPC, Spawn) + FaceTarget(NPC, Spawn) + if math.random(1, 100) <= 25 then + SaySomethingRandom(NPC, Spawn) + end +end + +function LeaveRange(NPC, Spawn) +end + +function SaySomethingRandom(NPC, Spawn) + local choice = math.random(1, 5) + if choice == 1 then + PlayFlavor(NPC, "voiceover/english/halfling_eco_good_1/ft/service/merchant/halfling_merchant_service_good_1_aoi_gm_c5e79ff5.mp3", "Hello there! Can I interest you in some of the finest merchandise this side of Norrath?", "wave", 1226726886, 4190877381, Spawn) + elseif choice == 2 then + PlayFlavor(NPC, "voiceover/english/halfling_eco_good_1/ft/service/merchant/halfling_merchant_service_good_1_hail_gm_24322c5d.mp3", "Greetings, friend traveler! We have the finest supplies to fill your adventuring needs.", "smile", 3623244639, 2766324485, Spawn) + elseif choice == 3 then + PlayFlavor(NPC, "voiceover/english/halfling_eco_good_1/ft/service/merchant/halfling_merchant_service_good_1_hail_gm_45d92a75.mp3", "Welcome! What can I help you with?", "bow", 1035878974, 1582137754, Spawn) + elseif choice == 4 then + PlayFlavor(NPC, "voiceover/english/halfling_eco_good_1/ft/service/merchant/halfling_merchant_service_good_1_hail_gf_ae84abf9.mp3", "Go on, take a look at the stock. You'll never beat this price in the city. I guarantee it!", "wink", 2106259105, 3779666567, Spawn) + elseif choice == 5 then + PlayFlavor(NPC, "voiceover/english/halfling_eco_good_1/ft/service/merchant/halfling_merchant_service_good_1_hail_gm_e4fa2bd8.mp3", "Confound it! Where did I put that ledger? It must be around here somewhere!", "confused", 1122140911, 2707150069, Spawn) + end +end diff --git a/server/SpawnScripts/Baubbleshire/PeonaToughins.lua b/server/SpawnScripts/Baubbleshire/PeonaToughins.lua new file mode 100644 index 000000000..13846ae27 --- /dev/null +++ b/server/SpawnScripts/Baubbleshire/PeonaToughins.lua @@ -0,0 +1,36 @@ +--[[ + Script Name : SpawnScripts/Baubbleshire/PeonaToughins.lua + Script Purpose : Peona Toughins + Script Author : Scatman + Script Date : 2009.09.27 + Script Notes : +--]] + +dofile("SpawnScripts/Generic/GenericArmorsmithVoiceOvers.lua") + +function spawn(NPC) + SetPlayerProximityFunction(NPC, 10, "InRange", "LeaveRange") +end + +function respawn(NPC) + spawn(NPC) +end + +function InRange(NPC, Spawn) + if math.random(0, 100) <= 25 then + FaceTarget(NPC, Spawn) + GenericArmorsmithHail(NPC, Spawn) + end +end + +function LeaveRange(NPC, Spawn) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/armorer_peona_toughins/qey_village06/quests/armorer_peona_toughins/armorer_peona_toughins001.mp3", "", "", 3593368605, 1432200573, Spawn) + AddConversationOption(conversation, "Maybe some other time.") + StartConversation(conversation, NPC, Spawn, "Dare I say, it's a fine day for shopping. How can I help you?") +end diff --git a/server/SpawnScripts/Baubbleshire/PirnookValewine.lua b/server/SpawnScripts/Baubbleshire/PirnookValewine.lua new file mode 100644 index 000000000..57688b407 --- /dev/null +++ b/server/SpawnScripts/Baubbleshire/PirnookValewine.lua @@ -0,0 +1,99 @@ +--[[ + Script Name : SpawnScripts/Baubbleshire/PirnookValewine.lua + Script Purpose : Pirnook Valewine + Script Author : Scatman + Script Date : 2009.09.27 + Script Notes : +--]] + +function spawn(NPC) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/optional1/pirnook_valewine/qey_village06/lore_pirnook_000.mp3", "", "", 1161953593, 3861334059, Spawn) + AddConversationOption(conversation, "Why the long face?", "dlg_45_1") + AddConversationOption(conversation, "Just as we all have.") + StartConversation(conversation, NPC, Spawn, "Oh! Excuse me for not recognizing your face. I've only just arrived. You know, this place is nice enough, but it still doesn't compare to the Vale ... Aaah, I guess I'll just have to make the best of it.") +end + +function dlg_45_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/optional1/pirnook_valewine/qey_village06/lore_pirnook_001.mp3", "", "", 469707323, 1438321644, Spawn) + AddConversationOption(conversation, "Well, it sounds like you need to talk about something.", "dlg_45_2") + AddConversationOption(conversation, "So much is lost to us all, but you're among friends now.") + StartConversation(conversation, NPC, Spawn, "Oh, I just miss the Vale terribly, and I know that I'll never see it again. It'll never be as it was before, well, before I came here, anyway.") +end + +function dlg_45_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/optional1/pirnook_valewine/qey_village06/lore_pirnook_002.mp3", "", "", 2224643347, 542143669, Spawn) + AddConversationOption(conversation, "What have you seen? It's ok, talking will make you feel better.", "dlg_47_3") + AddConversationOption(conversation, "Okay, when you're ready, you'll tell your tale.") + StartConversation(conversation, NPC, Spawn, "You're ... you're right, I do, but I'm hesitant. I think that if I talk about it ... if someone else knows what I've seen, then ... then it'll be real. I don't want it to be real.") +end + +function dlg_47_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/optional1/pirnook_valewine/qey_village06/lore_pirnook_003.mp3", "", "", 731206016, 291679412, Spawn) + AddConversationOption(conversation, "A lot of things have changed since the Cataclysms. Nothing's the same anymore. ", "dlg_47_4") + StartConversation(conversation, NPC, Spawn, "Well ... I ... I can't, I just can't describe the things I've seen. I can tell you what I feel, and what I think, I suppose. Yes, it's better this way. The world should know that the Vale ... well, it just might not be there anymore, at least not in the way we know it.") +end + +function dlg_47_4(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/optional1/pirnook_valewine/qey_village06/lore_pirnook_004.mp3", "", "", 493600233, 1483940215, Spawn) + AddConversationOption(conversation, "Something recently happened in Rivervale?", "dlg_47_5") + StartConversation(conversation, NPC, Spawn, "Oh, I know. But you see, Rivervale and the Misty Thicket were special; they weren't harmed in the Cataclysms! Somehow our lands survived unscathed! It was a paradise when the rest of the world was broken and shattered.") +end + +function dlg_47_5(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/optional1/pirnook_valewine/qey_village06/lore_pirnook_005.mp3", "", "", 2664299681, 2936484351, Spawn) + AddConversationOption(conversation, "This sounds really serious. You shouldn't hide this from the world.", "dlg_48_6") + AddConversationOption(conversation, "Alright. You will talk when you're ready.") + StartConversation(conversation, NPC, Spawn, "Yes. It did. Something is happening in the vale at this very moment! It's ... it's terrible! I just ... I just don't want to think about it! I can't! I'm really very sorry, but I just can't. Not yet. I need time, just a little time for the nightmares to go away...") +end + +function dlg_48_6(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/optional1/pirnook_valewine/qey_village06/lore_pirnook_006.mp3", "", "", 1731561500, 3691799364, Spawn) + AddConversationOption(conversation, "Calm down! What's happened?! What have you seen?", "dlg_48_7") + StartConversation(conversation, NPC, Spawn, "I know, I know, but you haven't seen what I've seen! You haven't heard the screams in the night! Oh, those ghastly, horrific screams of pain and ... and merriment! Cries of merriment in the slaughter! It's ... it's happening now! Right now! They're suffering and I can't help them! No one can help them!") +end + +function dlg_48_7(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/optional1/pirnook_valewine/qey_village06/lore_pirnook_007.mp3", "", "", 3860679298, 1354308742, Spawn) + AddConversationOption(conversation, "Who brings death and suffering?!", "dlg_48_8") + StartConversation(conversation, NPC, Spawn, "Death and suffering! All of them dead and suffering! They ... they bring it! They revel in it! It's like wine and song to them! They're beyond evil, and they won't stop until they reave every last bit of life from the land!") +end + +function dlg_48_8(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/optional1/pirnook_valewine/qey_village06/lore_pirnook_008.mp3", "", "", 3545121720, 1853628282, Spawn) + AddConversationOption(conversation, "Pirnook? Pirnook?", "dlg_48_9") + StartConversation(conversation, NPC, Spawn, "Terrible, horrible things in the night. They shriek and howl, and then they sing softly and tenderly and sooth the nightmares away. They're here for all of us; they won't stop until they've drained all life away. Oh no, Launa! My sweet Launa! She's still there! I abandoned her! I had to, my sweet Launa, I had to ... you were lost to them, but I couldn't do it! I just couldn't do it! Oh, please forgive me...") +end \ No newline at end of file diff --git a/server/SpawnScripts/Baubbleshire/RalaEurocarry.lua b/server/SpawnScripts/Baubbleshire/RalaEurocarry.lua new file mode 100644 index 000000000..df5cc69b9 --- /dev/null +++ b/server/SpawnScripts/Baubbleshire/RalaEurocarry.lua @@ -0,0 +1,45 @@ +--[[ + Script Name : SpawnScripts/Baubbleshire/RalaEurocarry.lua + Script Purpose : Rala Eurocarry + Script Author : Scatman + Script Date : 2009.09.27 + Script Notes : +--]] + +dofile("SpawnScripts/Generic/GenericVoiceOvers.lua") + +-- Item ID's +local ARTISAN_ESSENTIALS_VOLUME_2 = 31373 + +function spawn(NPC) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + GenericHail(NPC, Spawn) + + if not HasItem(Spawn, ARTISAN_ESSENTIALS_VOLUME_2, 1) then + AddConversationOption(conversation, "Yes, please teach me.", "dlg_39_1") + AddConversationOption(conversation, "No, not at the moment.") + StartConversation(conversation, NPC, Spawn, "You show interest in the crafting trade, good. We can always use talented artisans. I can help you get started, would you be interested?") + else + Say(NPC, "I have nothing else to teach you for the moment. Please return to me when you have earned enough experience to choose your profession.", Spawn) + end +end + +function dlg_39_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + -- artisan essentials volume 2 + SummonItem(Spawn, ARTISAN_ESSENTIALS_VOLUME_2, 1) + + AddConversationOption(conversation, "I will start on that now.", "dlg_39_2") + StartConversation(conversation, NPC, Spawn, "There, you now have knowledge required to begin crafting. Speak to the Tradeskill Tutor for more detailed guidance on learning to craft, if you are interested in more information. Return to me when you are ready to select a crafting specialty.") +end \ No newline at end of file diff --git a/server/SpawnScripts/Baubbleshire/RebikSprocketrock.lua b/server/SpawnScripts/Baubbleshire/RebikSprocketrock.lua new file mode 100644 index 000000000..727feaaae --- /dev/null +++ b/server/SpawnScripts/Baubbleshire/RebikSprocketrock.lua @@ -0,0 +1,23 @@ +--[[ + Script Name : SpawnScripts/Baubbleshire/RebikSprocketrock.lua + Script Purpose : Rebik Sprocketrock + Script Author : Scatman + Script Date : 2009.09.27 + Script Notes : +--]] + +function spawn(NPC) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/rebik_sprocketrock/qey_village06/rebiksprocketrock000.mp3", "", "", 2926752471, 973291816, Spawn) + AddConversationOption(conversation, "Well then, I guess I'll let you get back to your work.") + StartConversation(conversation, NPC, Spawn, "Well met, good friend! I'm busy working on this new lock here! I think it'll be unpickable once I'm done!") +end \ No newline at end of file diff --git a/server/SpawnScripts/Baubbleshire/RemoZigg.lua b/server/SpawnScripts/Baubbleshire/RemoZigg.lua new file mode 100644 index 000000000..6aebe2349 --- /dev/null +++ b/server/SpawnScripts/Baubbleshire/RemoZigg.lua @@ -0,0 +1,116 @@ +--[[ + Script Name : SpawnScripts/Baubbleshire/RemoZigg.lua + Script Purpose : Remo Zigg + Script Author : Scatman + Script Date : 2009.09.27 + Script Notes : +--]] + +dofile("SpawnScripts/Generic/GenericVoiceOvers.lua") + +-- Quest ID's +local NEEZERS_SURVEY = 330 -- was 28 + +function spawn(NPC) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + if HasQuest(Spawn, NEEZERS_SURVEY) and not QuestStepIsComplete(Spawn, NEEZERS_SURVEY, 3) then + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/remo_zigg/qey_village06/quests/remo_zigg/remo_zigg001.mp3", "", "", 530397481, 3156402510, Spawn) + AddConversationOption(conversation, "I came all the way up here to ask you some questions.", "dlg_55_1") + AddConversationOption(conversation, "Yikes! I'm sorry.") + StartConversation(conversation, NPC, Spawn, "Go away!") + else + GenericHail(NPC, Spawn) + Say(NPC, "Leave me alone!", Spawn) + end +end + +function dlg_55_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/remo_zigg/qey_village06/quests/remo_zigg/remo_zigg002.mp3", "", "", 1696882002, 3766703540, Spawn) + AddConversationOption(conversation, "But this is important. It's for research.", "dlg_55_2") + StartConversation(conversation, NPC, Spawn, "And I came all the way up here to get away from folks like you asking me questions!") +end + +function dlg_55_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/remo_zigg/qey_village06/quests/remo_zigg/remo_zigg003.mp3", "", "", 969902427, 1340115911, Spawn) + AddConversationOption(conversation, "First question: if you were to calibrate a Fizzo Torque Wrench for work in Lavastorm and then attempt precisely the same work in Everfrost what difference of calibration would be needed?", "dlg_55_3") + StartConversation(conversation, NPC, Spawn, "Not dealing with you is important to me!") +end + +function dlg_55_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/remo_zigg/qey_village06/quests/remo_zigg/remo_zigg004.mp3", "", "", 24321375, 955243760, Spawn) + AddConversationOption(conversation, "Probably incorrect! Next question: what is the average measurement between Keen and Preen on a Spectromatic Nest-Druther?", "dlg_55_4") + StartConversation(conversation, NPC, Spawn, "Leave me alone!") +end + +function dlg_55_4(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/remo_zigg/qey_village06/quests/remo_zigg/remo_zigg005.mp3", "", "", 919014219, 498815422, Spawn) + AddConversationOption(conversation, "A few more! If given the choice in a vote for the new Queen of Qeynos, would you cast your vote for a nut or a bolt?", "dlg_55_5") + StartConversation(conversation, NPC, Spawn, "The answer is twenty-nine fiftieths of a bolt! Now go!") +end + +function dlg_55_5(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/remo_zigg/qey_village06/quests/remo_zigg/remo_zigg006.mp3", "", "", 2991931865, 2089278988, Spawn) + AddConversationOption(conversation, "Though not yet officially proven, which theory concerning thermodynamic particle acceleration and its correlation to metaphysical tides is widely accepted?", "dlg_55_6") + StartConversation(conversation, NPC, Spawn, "Nut! Now leave!") +end + +function dlg_55_6(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/remo_zigg/qey_village06/quests/remo_zigg/remo_zigg008.mp3", "", "", 3575168349, 3865802966, Spawn) + AddConversationOption(conversation, "Last question: the Banton particle is supposed to generate high amounts of what?", "dlg_55_7") + StartConversation(conversation, NPC, Spawn, "Who?") +end + +function dlg_55_7(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/remo_zigg/qey_village06/quests/remo_zigg/remo_zigg009.mp3", "", "", 995350190, 2609073467, Spawn) + AddConversationOption(conversation, "That's all, thank you for your time!", "dlg_55_8") + StartConversation(conversation, NPC, Spawn, "Is it tension? Is it tension? It's tension, right?") +end + +function dlg_55_8(NPC, Spawn) + SetStepComplete(Spawn, NEEZERS_SURVEY, 3) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/remo_zigg/qey_village06/quests/remo_zigg/remo_zigg010.mp3", "", "", 1931580317, 4141303042, Spawn) + AddConversationOption(conversation, "You'll have to ask Neezer Grund.", "dlg_55_9") + StartConversation(conversation, NPC, Spawn, "Wait, how did I score?") +end + +function dlg_55_9(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/remo_zigg/qey_village06/quests/remo_zigg/remo_zigg011.mp3", "", "", 2835311022, 1920113561, Spawn) + AddConversationOption(conversation, "That's what everyone says!", "dlg_55_10") + StartConversation(conversation, NPC, Spawn, "Who?") +end \ No newline at end of file diff --git a/server/SpawnScripts/Baubbleshire/RondoTheBellyRoundstew.lua b/server/SpawnScripts/Baubbleshire/RondoTheBellyRoundstew.lua new file mode 100644 index 000000000..c24c8b5d0 --- /dev/null +++ b/server/SpawnScripts/Baubbleshire/RondoTheBellyRoundstew.lua @@ -0,0 +1,393 @@ +--[[ + Script Name : SpawnScripts/Baubbleshire/RondoTheBellyRoundstew.lua + Script Purpose : Rondo "The Belly" Roundstew + Script Author : Scatman + Script Date : 2009.09.27 + Script Notes : +--]] + +-- Race ID's +local Halfling = 7 + +-- Quest ID's +local HELPING_A_FRIEND = 323 -- was 70 +local HELPING_A_FRIEND_AGAIN = 324 -- was 71 +local HELPING_SOME_FRIENDS = 325 -- was 72 +local PAYING_OFF_A_SWEET_DEBT = 326 -- was 73 +local A_BUDDING_PRANKSTER = 327 -- was 74 + +-- Item ID's +local PRANK_PREPAREDNESS_KIT = 10574 + +dofile("SpawnScripts/Generic/GenericVoiceOvers.lua") + +function spawn(NPC) + ProvidesQuest(NPC, HELPING_A_FRIEND) + ProvidesQuest(NPC, HELPING_A_FRIEND_AGAIN) + ProvidesQuest(NPC, HELPING_SOME_FRIENDS) + ProvidesQuest(NPC, PAYING_OFF_A_SWEET_DEBT) + ProvidesQuest(NPC, A_BUDDING_PRANKSTER) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + GenericHail(NPC, Spawn) + + if GetRace(Spawn) == Halfling then + Begin(NPC, Spawn) + else + NotHalfling(NPC, Spawn) + end +end + +function NotHalfling(NPC, Spawn) + FaceTarget(NPC, Spawn) + Say(NPC, "Well hello there. I'd love to help you, but I'm currently busy with folk of a short, round nature. My apologies.", Spawn) +end + +function Begin(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + if HasCompletedQuest(Spawn, HELPING_A_FRIEND) then + if HasCompletedQuest(Spawn, HELPING_A_FRIEND_AGAIN) then + if HasCompletedQuest(Spawn, HELPING_SOME_FRIENDS) then + if HasCompletedQuest(Spawn, PAYING_OFF_A_SWEET_DEBT) then + if HasCompletedQuest(Spawn, A_BUDDING_PRANKSTER) then + TalkedToRemmyYet(NPC, Spawn, conversation) + elseif HasQuest(Spawn, A_BUDDING_PRANKSTER) then + TalkedToRemmyYet(NPC, Spawn, conversation) + else + DoYouHaveTheHoney(NPC, Spawn, conversation) + end + elseif HasQuest(Spawn, PAYING_OFF_A_SWEET_DEBT) then + DoYouHaveTheHoney(NPC, Spawn, conversation) + else + DidTheySuspectAnything(NPC, Spawn, conversation) + end + elseif HasQuest(Spawn, HELPING_SOME_FRIENDS) then + if GetQuestStep(Spawn, HELPING_SOME_FRIENDS) == 1 then + Yes(NPC, Spawn, conversation) + else + DidTheySuspectAnything(NPC, Spawn, conversation) + end + else + DidFlowersWork(NPC, Spawn, conversation) + end + elseif HasQuest(Spawn, HELPING_A_FRIEND_AGAIN) then + DidFlowersWork(NPC, Spawn, conversation) + else + HowIsMaela(NPC, Spawn, conversation) + end + elseif HasQuest(Spawn, HELPING_A_FRIEND) then + HowIsMaela(NPC, Spawn, conversation) + else + HelloFriend(NPC, Spawn, conversation) + end +end + +--------------------------------------------------------------------------------- +-- QUEST 1 +--------------------------------------------------------------------------------- + +function HelloFriend(NPC, Spawn, conversation) + AddConversationOption(conversation, "We're friends already?", "dlg_2_1") + AddConversationOption(conversation, "Hello and goodbye, friendliest friend.") + StartConversation(conversation, NPC, Spawn, "Hello there, friendly friend.") +end + +function dlg_2_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "Oh, definitely.", "ThatsRightWeDo") + AddConversationOption(conversation, "Sure, I suppose.", "ThatsRightWeDo") + StartConversation(conversation, NPC, Spawn, "Of course we are! You just offered to buy me a pint if I'm not mistaken, hah! You're the friendly sort, I can tell. And so am I! Perfectly matched to be pals, I'd say. Halflings like us need to stick together, wouldn't you say?") +end + +function ThatsRightWeDo(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "What can I do to help?", "dlg_4_3") + StartConversation(conversation, NPC, Spawn, "That's right we do! I'm glad you agree, it's better when we all agree. We've lost so much. Needless arguments and anger and pain and sadness only upset what otherwise could be a fun situation! Sure, we all try to live by this philosophy but for some of us it's tougher than others.") +end + +function dlg_4_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "I will try to help her.", "OfferQuest1") + StartConversation(conversation, NPC, Spawn, "To start you can find my friend Maela. The poor lass has been emotional support for myself--and countless other halflings--more times than I can count. The thing is, I don't think anyone's ever taken the time to listen to her problems. I think she would feel bad about asking, and whenever I try to help she backs away. She needs an outlet.") +end + +function OfferQuest1(NPC, Spawn) + FaceTarget(NPC, Spawn) + OfferQuest(NPC, Spawn, HELPING_A_FRIEND) +end + +function HowIsMaela(NPC, Spawn, conversation) + if (HasCompletedQuest(Spawn, HELPING_A_FRIEND) and not HasCompletedQuest(Spawn, HELPING_A_FRIEND_AGAIN)) or (HasQuest(Spawn, HELPING_A_FRIEND) and GetQuestStep(Spawn, HELPING_A_FRIEND) == 2) then + AddConversationOption(conversation, "She seems perfectly fine. She didn't want to open up at all.", "dlg_7_1") + end + + AddConversationOption(conversation, "I do not know yet.") + StartConversation(conversation, NPC, Spawn, "How is Maela?") +end + +function dlg_7_1(NPC, Spawn) + if HasQuest(Spawn, HELPING_A_FRIEND) then + SetStepComplete(Spawn, HELPING_A_FRIEND, 2) + end + + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "All right.", "OfferQuest2") + StartConversation(conversation, NPC, Spawn, "That sounds just like her. I hate to have to do this to her, but she's helped me too much for me to ignore her. Around the Baubbleshire you'll find some Misty Thicket Shadebloom flowers. Pick a bouquet for her, I have a feeling that will get her to open up some.") +end + +---------------------------------------------------------------------------------------------- +-- QUEST 2 +---------------------------------------------------------------------------------------------- + +function OfferQuest2(NPC, Spawn) + FaceTarget(NPC, Spawn) + OfferQuest(NPC, Spawn, HELPING_A_FRIEND_AGAIN) +end + +function DidFlowersWork(NPC, Spawn, conversation) + if (HasCompletedQuest(Spawn, HELPING_A_FRIEND_AGAIN) and not HasCompletedQuest(Spawn, HELPING_SOME_FRIENDS)) or (HasQuest(Spawn, HELPING_A_FRIEND_AGAIN) and GetQuestStep(Spawn, HELPING_A_FRIEND_AGAIN) == 3) then + AddConversationOption(conversation, "Yes, I think she is doing well.", "dlg_15_1") + end + + AddConversationOption(conversation, "I'm not sure yet.") + StartConversation(conversation, NPC, Spawn, "Did the flowers work?") +end + +function dlg_15_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "She told me about her husband and the Shadebloom. I think it helped her a lot to finally share with someone, and I think she'll work on sharing more in the future. How did you know about the Shadebloom?", "dlg_15_2") + StartConversation(conversation, NPC, Spawn, "Oh?") +end + +function dlg_15_2(NPC, Spawn) + if HasQuest(Spawn, HELPING_A_FRIEND_AGAIN) then + SetStepComplete(Spawn, HELPING_A_FRIEND_AGAIN, 3) + end + + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "Yes, it does.", "dlg_15_3") + StartConversation(conversation, NPC, Spawn, "Maela is my friend. I've seen her reaction to those flowers change in the recent weeks. It doesn't take a magician to figure out her husband's absence has gotten to her, but until she admitted it was bothering her there wasn't much we could do to help her. Now that she's admitted it, I'm sure she'll get as much support as she needs. It feels good to help people, doesn't it?") +end + +----------------------------------------------------------------------------------------- +-- QUEST 3 +------------------------------------------------------------------------------------------ + +function dlg_15_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "What do you mean?", "dlg_15_4") + StartConversation(conversation, NPC, Spawn, "I was hoping you would say that. You know there are many, many ways to help people, right?") +end + +function dlg_15_4(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "What are you saying, exactly?", "dlg_15_5") + StartConversation(conversation, NPC, Spawn, "Well, one thing I love to do is help. Another thing I love to do is joke around and play pranks. And, as luck would have it, playing pranks on people is a good way to let them know someone is paying attention to them. It's therapy, really, I think. Now, I would never think of playing a prank on Maela, she's far too sweet for that. But other halflings don't have the benefit of her disposition, and that makes them targets.") +end + +function dlg_15_5(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "What reputation?", "dlg_15_6") + AddConversationOption(conversation, "Bristlebane?", "dlg_16_6") + StartConversation(conversation, NPC, Spawn, "I'm talking about Bristlebane's Gift, his gift to US. The capacity to learn and grow and laugh and laugh from pranks! Pulling them, having them pulled on us, the benefit of Bristlebane is astounding on the halfling soul. And, I need someone to help me pull off my pranks due to my, eh, reputation.") +end + +function dlg_15_6(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "Well, all right.", "OfferQuest3") + StartConversation(conversation, NPC, Spawn, "Never mind that, for now. Listen, I've got everything prepared, all I need is a little help from you. It shouldn't take too long, and should prove to be immensely hilarious! What do you say?") +end + +function dlg_16_6(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "What reputation?", "dlg_15_6") + StartConversation(conversation, NPC, Spawn, "Bristlebane? Bristlebane? He's inside you right now and you don't even know it. He is of course the god of healing, love and kindness. Or, rather, the god of achieving those things through well-timed pranks. A halfling who doesn't know Bristlebane is, well, is like a flower without petals, or a pie without filling. Trust me, the more you get to know him the more you'll get to like him. Now, what do you say about helping me sidestep my reputation?") +end + +function OfferQuest3(NPC, Spawn) + FaceTarget(NPC, Spawn) + OfferQuest(NPC, Spawn, HELPING_SOME_FRIENDS) +end + +function GiveMeKit(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + -- Prank Preparedness Kit + if not HasItem(Spawn, PRANK_PREPAREDNESS_KIT, 1) then + SummonItem(Spawn, PRANK_PREPAREDNESS_KIT, 1) + end + + AddConversationOption(conversation, "Thanks!") + StartConversation(conversation, NPC, Spawn, "Here you go. Good luck!") +end + +function Yes(NPC, Spawn, conversation) + AddConversationOption(conversation, "I need the Prank Preparedness Kit.", "dlg_17_1") + StartConversation(conversation, NPC, Spawn, "Yes?") +end + +function dlg_17_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + -- Prank Preparedness Kit + if HasItem(Spawn, PRANK_PREPAREDNESS_KIT, 1) then + AddConversationOption(conversation, "Thanks!") + StartConversation(conversation, NPC, Spawn, "It looks like you already have one. You need to examine it, it's in one of your bags or backpacks somewhere.") + else + SummonItem(Spawn, PRANK_PREPAREDNESS_KIT, 1) + AddConversationOption(conversation, "Thanks!") + StartConversation(conversation, NPC, Spawn, "Here you go. Good luck!") + end +end + +function DidTheySuspectAnything(NPC, Spawn, conversation) + if (HasCompletedQuest(Spawn, HELPING_SOME_FRIENDS) and not HasCompletedQuest(Spawn, PAYING_OFF_A_SWEET_DEBT)) or (HasQuest(Spawn, HELPING_SOME_FRIENDS) and GetQuestStep(Spawn, HELPING_SOME_FRIENDS) == 5) then + AddConversationOption(conversation, "I don't think anyone suspected anything.", "dlg_22_1") + end + + AddConversationOption(conversation, "I'm not done yet.") + StartConversation(conversation, NPC, Spawn, "Well? How did it go? Did they suspect anything?") +end + +function dlg_22_1(NPC, Spawn) + if HasQuest(Spawn, HELPING_SOME_FRIENDS) then + SetStepComplete(Spawn, HELPING_SOME_FRIENDS, 5) + end + + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "That didn't seem very expensive.", "dlg_22_2") + StartConversation(conversation, NPC, Spawn, "Wonderful! I can't wait until I next talk to them. That's really the best part, you know. When you tell someone about something that they know you shouldn't know. The look on their face when they realize you must've had some part in their prank is, well, priceless. Ah, I couldn't live life any other way. I just wish pranking wasn't so expensive.") +end + +------------------------------------------------------------------------------------------------------------- +-- QUEST 4 +------------------------------------------------------------------------------------------------------------- + +function dlg_22_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "Is that some kind of threat?", "dlg_22_3") + StartConversation(conversation, NPC, Spawn, "I'm a halfling of modest means. I had to call in a number of favors in order to get everything together for that series of pranks. Say, you're just as indictable as I am in this incident, you really should help me pay off some of this debt.") +end + +function dlg_22_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "What do you need?", "dlg_22_4") + StartConversation(conversation, NPC, Spawn, "No, of course not. But I really would appreciate some help. What do you say?") +end + +function dlg_22_4(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "I can help. Which trees will have honey?", "OfferQuest4") + StartConversation(conversation, NPC, Spawn, "I used up some favors--and then some--to get those pies just perfect. I owe a chef friend of mine now, and I don't like owing people. I think I know the perfect way to pay her back though. If you could collect some honey from the trees around the Baubbleshire I'm sure that would be a perfect way to pay her back.") +end + +function OfferQuest4(NPC, Spawn) + FaceTarget(NPC, Spawn) + OfferQuest(NPC, Spawn, PAYING_OFF_A_SWEET_DEBT) +end + +function DoYouHaveTheHoney(NPC, Spawn, conversation) + if (HasCompletedQuest(Spawn, PAYING_OFF_A_SWEET_DEBT) and not HasCompletedQuest(Spawn, A_BUDDING_PRANKSTER)) or (HasQuest(Spawn, PAYING_OFF_A_SWEET_DEBT) and GetQuestStep(Spawn, PAYING_OFF_A_SWEET_DEBT) == 2) then + AddConversationOption(conversation, "Yes I do.", "dlg_24_1") + end + + AddConversationOption(conversation, "Not yet.") + StartConversation(conversation, NPC, Spawn, "Do you have the honey?") +end + +function dlg_24_1(NPC, Spawn) + if HasQuest(Spawn, PAYING_OFF_A_SWEET_DEBT) then + SetStepComplete(Spawn, PAYING_OFF_A_SWEET_DEBT, 2) + end + + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "Sure, what do I need to do?", "dlg_24_2") + AddConversationOption(conversation, "No, but thanks.") + StartConversation(conversation, NPC, Spawn, "Ah, wonderful. You're really a big help, you know that? Listen, I've got an idea of how I can pay you back. How would you like to pull a prank of your own?") +end + +---------------------------------------------------------------------------------------- +-- QUEST 5 +---------------------------------------------------------------------------------------- + +function dlg_24_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "Ok!", "OfferQuest5") + StartConversation(conversation, NPC, Spawn, "My friend Remmy is out in the Forest Ruins. He's currently in a small bind with the law, so he's in hiding. It's nothing serious, of course, but it involves a few stolen pies and he doesn't quite have the funds saved up to pay the charges. This is a simple prank but I think it'll be worth it. Just go up to him, act like a Qeynos guard, and call him 'Pie Man Sam.' I'm sure he'll get a huge kick out of it.") +end + +function OfferQuest5(NPC, Spawn) + FaceTarget(NPC, Spawn) + OfferQuest(NPC, Spawn, A_BUDDING_PRANKSTER) +end + +function TalkedToRemmyYet(NPC, Spawn, conversation) + if HasCompletedQuest(Spawn, A_BUDDING_PRANKSTER) then + AddConversationOption(conversation, "Yeah, I did.", "HowDidPrankGo") + end + + AddConversationOption(conversation, "I haven't spoken to him yet.") + StartConversation(conversation, NPC, Spawn, "Have you talked to Remmy yet?") +end + +function HowDidPrankGo(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "He fell for it big time.", "HahaThatsGreat") + StartConversation(conversation, NPC, Spawn, "How did the prank go?") +end + +function HahaThatsGreat(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "It was great!") + AddConversationOption(conversation, "It was much more fun than I thought it was going to be.") + AddConversationOption(conversation, "It was okay.") + AddConversationOption(conversation, "It wasn't that exciting.") + StartConversation(conversation, NPC, Spawn, "Ha hah! That's great! I can't wait until I talk to him next, he's going to deny this ever happened, it's going to be great to rub his face in it. I hope you enjoyed pulling the prank!") +end \ No newline at end of file diff --git a/server/SpawnScripts/Baubbleshire/SageXoort.lua b/server/SpawnScripts/Baubbleshire/SageXoort.lua new file mode 100644 index 000000000..44941c499 --- /dev/null +++ b/server/SpawnScripts/Baubbleshire/SageXoort.lua @@ -0,0 +1,90 @@ +--[[ + Script Name : SpawnScripts/Baubbleshire/SageXoort.lua + Script Purpose : Sage Xoort + Script Author : John Adams + Script Date : 2008.09.23 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +-- Quest ID's +local EMBERS_FOR_XOOT = 333 -- was 57 + +function spawn(NPC) + ProvidesQuest(NPC, EMBERS_FOR_XOOT) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_2_1006.mp3", "", "", 0, 0, Spawn) + + if not HasCompletedQuest(Spawn, EMBERS_FOR_XOOT) then + Begin(NPC, Spawn, conversation) + else + DoneQuests(NPC, Spawn) + end +end + +function Begin(NPC, Spawn, conversation) + if not HasQuest(Spawn, EMBERS_FOR_XOOT) and not HasCompletedQuest(Spawn, EMBERS_FOR_XOOT) and GetLevel(Spawn) >= 5 then + AddConversationOption(conversation, "I was just looking at what you were writing there.", "LookingAtWriting") + elseif HasQuest(Spawn, EMBERS_FOR_XOOT) and GetQuestStep(Spawn, EMBERS_FOR_XOOT) == 2 then + AddConversationOption(conversation, "I'm actually the one that's of service here!", "ImOfService") + end + + AddConversationOption(conversation, "I'm just looking around, thanks. ") + StartConversation(conversation, NPC, Spawn, "Hello there! How can I be of service?") +end + +function LookingAtWriting(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "What's wrong with fire as a power source?", "WhatsWrongWithFire") + AddConversationOption(conversation, "I don't know. Good luck with that.") + StartConversation(conversation, NPC, Spawn, "Nothing much, just a schematic I'm working on. I can't find a power source for it ... Oh, Solusek's flame! How in the name of Brell can I make this thing work?") +end + +function WhatsWrongWithFire(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "I'll get some.", "OfferQuest1") + StartConversation(conversation, NPC, Spawn, "Fire's no good. It doesn't get hot enough or burn long enough. WAIT! HAH! Oh, you're right! I need a special type of coal. You thought of it, so you can fetch it. I need still-burning embers from the forgotten guardians in the Forest Ruins.") +end + +function OfferQuest1(NPC, Spawn) + FaceTarget(NPC, Spawn) + OfferQuest(NPC, Spawn, EMBERS_FOR_XOOT) +end + +function ImOfService(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "Here you are. ", "HereYouAre") + StartConversation(conversation, NPC, Spawn, "So, you return with the coals ... I hope you didn't get burned! Let me take a look...") +end + +function HereYouAre(NPC, Spawn) + SetStepComplete(Spawn, EMBERS_FOR_XOOT, 2) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "Thanks, it's appreciated.") + StartConversation(conversation, NPC, Spawn, "Oh yes! These shall work nicely! Tell you what -- take this money for your work. I planned on buying a spell for creating a power source but because of your smart thinking and hard work, I need no spell!") +end + +function DoneQuests(NPC, Spawn) + choice = math.random(1, 2) + if choice == 1 then + PlayFlavor(NPC, "", "Oh to Drunder with this! How will I ever be able to get this thing working?", "frustrated", 1689589577, 4560189, Spawn) + else + Say(NPC, "Oops! Sorry friend! I thought you were someone else. Good day now!") + end +end \ No newline at end of file diff --git a/server/SpawnScripts/Baubbleshire/SmithyFindlebop.lua b/server/SpawnScripts/Baubbleshire/SmithyFindlebop.lua new file mode 100644 index 000000000..6b9b98a73 --- /dev/null +++ b/server/SpawnScripts/Baubbleshire/SmithyFindlebop.lua @@ -0,0 +1,32 @@ +--[[ + Script Name : SpawnScripts/Baubbleshire/SmithyFindlebop.lua + Script Purpose : Smithy Findlebop + Script Author : Scatman + Script Date : 2009.09.27 + Script Notes : +--]] + +dofile("SpawnScripts/Generic/GenericWeaponsmithVoiceOvers.lua") + +function spawn(NPC) + SetPlayerProximityFunction(NPC, 10, "InRange", "LeaveRange") +end + +function respawn(NPC) + spawn(NPC) +end + +function InRange(NPC, Spawn) + if math.random(0, 100) <= 25 then + FaceTarget(NPC, Spawn) + GenericWeaponsmithHail(NPC, Spawn) + end +end + +function LeaveRange(NPC, Spawn) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + GenericWeaponsmithHail(NPC, Spawn) +end diff --git a/server/SpawnScripts/Baubbleshire/TawliWhiskwind.lua b/server/SpawnScripts/Baubbleshire/TawliWhiskwind.lua new file mode 100644 index 000000000..89cd73aa1 --- /dev/null +++ b/server/SpawnScripts/Baubbleshire/TawliWhiskwind.lua @@ -0,0 +1,39 @@ +--[[ + Script Name : SpawnScripts/Baubbleshire/TawliWhiskwind.lua + Script Purpose : Tawli Whiskwind + Script Author : Scatman + Script Date : 2009.08.12 + Script Notes : +--]] + +local QUEST_FROM_VIDA_NETTLEVILE = 310 + +function spawn(NPC) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tawli_whiskwind/qey_village06/tawliwhiskwind000.mp3", "", "", 2721335951, 3874016215, Spawn) + if HasQuest(Spawn, QUEST_FROM_VIDA_NETTLEVILE) and GetQuestStep(Spawn, QUEST_FROM_VIDA_NETTLEVILE) == 1 then + AddConversationOption(conversation, "Vida Sweeps asked me to pick up a broom for her. She wore her old one out.", "dlg_2_1") + end + AddConversationOption(conversation, "I'm not really looking for a broom today, but thanks anyway.") + StartConversation(conversation, NPC, Spawn, "Good day to you, deary! I make the most wonderful brooms--strong bristles, stout handles, and quite stylish if you ask me. Great for sweeping off your doorstep or scaring off little critters!") +end + +function dlg_2_1(NPC, Spawn) + SetStepComplete(Spawn, QUEST_FROM_VIDA_NETTLEVILE, 1) + + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tawli_whiskwind/qey_village06/tawliwhiskwind001.mp3", "", "", 1438734412, 3399833695, Spawn) + AddConversationOption(conversation, "Thank you. I know she'll put it to work right away.") + StartConversation(conversation, NPC, Spawn, "Well, if anyone can wear out a broom, it's Vida. She sweeps so much you could eat off her spotless floor! Here's her new broom. I hope she uses it well.") +end \ No newline at end of file diff --git a/server/SpawnScripts/Baubbleshire/TinkererSpindlecog.lua b/server/SpawnScripts/Baubbleshire/TinkererSpindlecog.lua new file mode 100644 index 000000000..8753c0b90 --- /dev/null +++ b/server/SpawnScripts/Baubbleshire/TinkererSpindlecog.lua @@ -0,0 +1,33 @@ +--[[ + Script Name : SpawnScripts/Baubbleshire/TinkererSpindlecog.lua + Script Purpose : Tinkerer Spindlecog + Script Author : Scatman + Script Date : 2009.09.27 + Script Notes : Speaking Gnomish +--]] + +function spawn(NPC) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tinkerer_spindlecog/qey_village06/tinkererspindlecog001.mp3", "", "", 1759041547, 1110190424, Spawn) + AddConversationOption(conversation, "What would you need the stamping device for anyway?", "dlg_27_1") + AddConversationOption(conversation, "Yes, a pity indeed. ") + StartConversation(conversation, NPC, Spawn, "Errgh... If only I could get this blasted stamping mechanism working again! What a pity! I really need this confounded contraption to run smoothly!") +end + +function dlg_27_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tinkerer_spindlecog/qey_village06/tinkererspindlecog002.mp3", "", "", 233880122, 4191683346, Spawn) + AddConversationOption(conversation, "I'm afraid I can't right now. Good luck getting it fixed. ") + StartConversation(conversation, NPC, Spawn, "For part of my official duties that I can't tell you about! No matter how rudimentary the system, all government officials must be mysterious about what they do--didn't you know? Someday, I might need to officially stamp something! Say, maybe you can help me!") +end \ No newline at end of file diff --git a/server/SpawnScripts/Baubbleshire/Wazzleburn.lua b/server/SpawnScripts/Baubbleshire/Wazzleburn.lua new file mode 100644 index 000000000..de4a0c359 --- /dev/null +++ b/server/SpawnScripts/Baubbleshire/Wazzleburn.lua @@ -0,0 +1,32 @@ +--[[ + Script Name : SpawnScripts/Baubbleshire/Wazzleburn.lua + Script Purpose : Wazzleburn + Script Author : Scatman + Script Date : 2009.09.27 + Script Notes : +--]] + +dofile("SpawnScripts/Generic/GenericScribeVoiceOvers.lua") + +function spawn(NPC) + SetPlayerProximityFunction(NPC, 10, "InRange", "LeaveRange") +end + +function respawn(NPC) + spawn(NPC) +end + +function InRange(NPC, Spawn) + if math.random(0, 100) <= 25 then + FaceTarget(NPC, Spawn) + GenericScribeHail(NPC, Spawn) + end +end + +function LeaveRange(NPC, Spawn) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + GenericScribeHail(NPC, Spawn) +end diff --git a/server/SpawnScripts/Baubbleshire/YolaSindlefop.lua b/server/SpawnScripts/Baubbleshire/YolaSindlefop.lua new file mode 100644 index 000000000..0fc4edd30 --- /dev/null +++ b/server/SpawnScripts/Baubbleshire/YolaSindlefop.lua @@ -0,0 +1,23 @@ +--[[ + Script Name : SpawnScripts/Baubbleshire/YolaSindlefop.lua + Script Purpose : Yola Sindlefop + Script Author : Scatman + Script Date : 2009.09.27 + Script Notes : +--]] + +function spawn(NPC) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/yola_sindlefop/qey_village06/yolasindlefop000.mp3", "", "", 2042293032, 669099653, Spawn) + AddConversationOption(conversation, "Sorry to hear that.") + StartConversation(conversation, NPC, Spawn, "Hello there! Isn't this a lovely spot? It's not the vale, but I was too young to really remember much when we left anyway.") +end \ No newline at end of file diff --git a/server/SpawnScripts/Baubbleshire/ZipiffClamorclang.lua b/server/SpawnScripts/Baubbleshire/ZipiffClamorclang.lua new file mode 100644 index 000000000..cc6051551 --- /dev/null +++ b/server/SpawnScripts/Baubbleshire/ZipiffClamorclang.lua @@ -0,0 +1,23 @@ +--[[ + Script Name : SpawnScripts/Baubbleshire/ZipiffClamorclang.lua + Script Purpose : Zipiff Clamorclang + Script Author : Scatman + Script Date : 2009.09.27 + Script Notes : +--]] + +function spawn(NPC) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/zipiff_clamorclang/qey_village06/zipiffclamorclang000.mp3", "", "", 2450977341, 1936083009, Spawn) + AddConversationOption(conversation, "I think I'll move back. It sounds like I really don't want to crimp a cog.") + StartConversation(conversation, NPC, Spawn, "Careful where you walk! I don't want you bending a sprocket or tweaking a spring, and you mustn't crimp a cog! If I have to uncrimp just one more cog...") +end \ No newline at end of file diff --git a/server/SpawnScripts/Baubbleshire/aMistyThicketShadebloom.lua b/server/SpawnScripts/Baubbleshire/aMistyThicketShadebloom.lua new file mode 100644 index 000000000..d528d5e69 --- /dev/null +++ b/server/SpawnScripts/Baubbleshire/aMistyThicketShadebloom.lua @@ -0,0 +1,20 @@ + --[[ + Script Name : SpawnScripts/Baubbleshire/aMistyThicketShadebloom.lua + Script Purpose : a Misty Thicket Shadebloom + Script Author : Scatman + Script Date : 2009.09.26 + Script Notes : +--]] + +local HELPING_A_FRIEND_AGAIN = 324 -- was 71 + +function spawn(NPC) + SetRequiredQuest(NPC, HELPING_A_FRIEND_AGAIN, 1) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) +end \ No newline at end of file diff --git a/server/SpawnScripts/Baubbleshire/aduck1.lua b/server/SpawnScripts/Baubbleshire/aduck1.lua new file mode 100644 index 000000000..445d98252 --- /dev/null +++ b/server/SpawnScripts/Baubbleshire/aduck1.lua @@ -0,0 +1,35 @@ +--[[ + Script Name : SpawnScripts/Baubbleshire/aduck1.lua + Script Purpose : a duck + Script Author : Scatman + Script Date : 2009.05.11 + Script Notes : +--]] + +function spawn(NPC) + MovementLoopAddLocation(NPC, 884.95, -16.29, -517.31, 3, 0) + MovementLoopAddLocation(NPC, 886.49, -16.56, -511.8, 3, 0) + MovementLoopAddLocation(NPC, 893.66, -17.41, -500.2, 3, 0) + MovementLoopAddLocation(NPC, 893.51, -17.7, -496.18, 3, 0) + MovementLoopAddLocation(NPC, 883.13, -18.43, -483.9, 3, 0) + MovementLoopAddLocation(NPC, 882.44, -19.07, -473.49, 3, math.random(0, 30)) + MovementLoopAddLocation(NPC, 884.19, -19.25, -468.98, 3, 0) + MovementLoopAddLocation(NPC, 890.28, -19.16, -463.74, 3, 0) + MovementLoopAddLocation(NPC, 892.22, -18.87, -457.62, 3, 0) + MovementLoopAddLocation(NPC, 870.25, -18.65, -443.54, 3, 0) + MovementLoopAddLocation(NPC, 863.65, -18.82, -447.37, 3, 0) + MovementLoopAddLocation(NPC, 856.23, -19.49, -457.42, 3, 0) + MovementLoopAddLocation(NPC, 864.64, -19.07, -478.05, 3, math.random(0, 30)) + MovementLoopAddLocation(NPC, 864.75, -18.1, -486.71, 3, 0) + MovementLoopAddLocation(NPC, 870.82, -17.82, -493.26, 3, 0) + MovementLoopAddLocation(NPC, 884.55, -15.57, -527.9, 3, 0) + MovementLoopAddLocation(NPC, 889.13, -15.57, -526.2, 3, 0) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) +end \ No newline at end of file diff --git a/server/SpawnScripts/Baubbleshire/aduck2.lua b/server/SpawnScripts/Baubbleshire/aduck2.lua new file mode 100644 index 000000000..2c7820bf9 --- /dev/null +++ b/server/SpawnScripts/Baubbleshire/aduck2.lua @@ -0,0 +1,45 @@ +--[[ + Script Name : SpawnScripts/Baubbleshire/aduck2.lua + Script Purpose : a duck + Script Author : Scatman + Script Date : 2009.05.11 + Script Notes : +--]] + +function spawn(NPC) + MovementLoopAddLocation(NPC, 893.18, -15.07, -442.53, 3, 0) + MovementLoopAddLocation(NPC, 882.04, -14.06, -427.71, 3, 0) + MovementLoopAddLocation(NPC, 876.31, -14.85, -425.49, 3, 0) + MovementLoopAddLocation(NPC, 871.78, -18.49, -441.44, 3, 0) + MovementLoopAddLocation(NPC, 861.72, -19.09, -449.21, 3, 0) + MovementLoopAddLocation(NPC, 853.59, -18.92, -458.83, 3, 0) + MovementLoopAddLocation(NPC, 850.55, -18.4, -465.92, 3, 0) + MovementLoopAddLocation(NPC, 845.43, -17.83, -468.68, 3, math.random(0, 30)) + MovementLoopAddLocation(NPC, 841.25, -17.88, -481.68, 3, 0) + MovementLoopAddLocation(NPC, 835.32, -17.72, -482.92, 3, 0) + MovementLoopAddLocation(NPC, 832.96, -17.83, -488.91, 3, 0) + MovementLoopAddLocation(NPC, 834.34, -18.18, -493.91, 3, 0) + MovementLoopAddLocation(NPC, 829.86, -17.86, -499.12, 3, 0) + MovementLoopAddLocation(NPC, 828.85, -18.26, -507.2, 3, 0) + MovementLoopAddLocation(NPC, 825.29, -18.04, -508.55, 3, 0) + MovementLoopAddLocation(NPC, 823.22, -13.98, -498.94, 3, 0) + MovementLoopAddLocation(NPC, 824.03, -13.34, -494.75, 3, 0) + MovementLoopAddLocation(NPC, 820.18, -9.74, -485.21, 3, 0) + MovementLoopAddLocation(NPC, 820.74, -8.89, -476.69, 3, 0) + MovementLoopAddLocation(NPC, 831.88, -9.6, -468.74, 3, math.random(0, 30)) + MovementLoopAddLocation(NPC, 836.16, -10.86, -465.54, 3, 0) + MovementLoopAddLocation(NPC, 842.85, -16.52, -464.61, 3, 0) + MovementLoopAddLocation(NPC, 850.46, -18.57, -466.87, 3, 0) + MovementLoopAddLocation(NPC, 853.32, -18.56, -464.35, 3, 0) + MovementLoopAddLocation(NPC, 860.08, -19.4, -450.12, 3, 0) + MovementLoopAddLocation(NPC, 871.56, -18.66, -444.38, 3, 0) + MovementLoopAddLocation(NPC, 895.61, -18.79, -457.92, 3, 0) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) +end \ No newline at end of file diff --git a/server/SpawnScripts/Baubbleshire/beehive.lua b/server/SpawnScripts/Baubbleshire/beehive.lua new file mode 100644 index 000000000..8204986f1 --- /dev/null +++ b/server/SpawnScripts/Baubbleshire/beehive.lua @@ -0,0 +1,41 @@ +--[[ + Script Name : SpawnScripts/Baubbleshire/beehive.lua + Script Purpose : beehive + Script Author : Scatman + Script Date : 2009.09.27 + Script Notes : +--]] + +-- Quest ID's +local PAYING_OFF_A_SWEET_DEBT = 326 -- was 73 + +function spawn(NPC) + SetRequiredQuest(NPC, PAYING_OFF_A_SWEET_DEBT, 1) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) +end + +function casted_on(Target, Caster, SpellName) + if HasQuest(Caster, PAYING_OFF_A_SWEET_DEBT) and GetQuestStep(Caster, PAYING_OFF_A_SWEET_DEBT) == 1 and SpellName == "Collect Honey" then + AddStepProgress(Caster, PAYING_OFF_A_SWEET_DEBT, 1, 1) + + if math.random(0, 100) <= 50 then + local bee = SpawnMob(GetZone(Target), 2380067, false, GetX(Caster), GetY(Caster), GetZ(Caster)) + AddHate(Caster, bee, 100) + end + + SpawnSet(Target, "show_command_icon", 0) + SpawnSet(NPC, "show_hand_icon", 0) + AddTimer(Target, 60000, "MakeTargetable") + end +end + +function MakeTargetable(NPC) + SpawnSet(NPC, "show_command_icon", 1) + SpawnSet(NPC, "show_hand_icon", 1) +end \ No newline at end of file diff --git a/server/SpawnScripts/Baubbleshire/scrapmetal.lua b/server/SpawnScripts/Baubbleshire/scrapmetal.lua new file mode 100644 index 000000000..0e1944cbb --- /dev/null +++ b/server/SpawnScripts/Baubbleshire/scrapmetal.lua @@ -0,0 +1,20 @@ +--[[ + Script Name : SpawnScripts/Baubbleshire/scrapmetal.lua + Script Purpose : scrap metal + Script Author : Scatman + Script Date : 2009.09.27 + Script Notes : +--]] + +local SCRAPTASTIC = 328 -- was 26 + +function spawn(NPC) + SetRequiredQuest(NPC, SCRAPTASTIC, 1) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) +end \ No newline at end of file diff --git a/server/SpawnScripts/BeggarsCourt/AdjunctCaptainRommuls.lua b/server/SpawnScripts/BeggarsCourt/AdjunctCaptainRommuls.lua new file mode 100644 index 000000000..ce8404c17 --- /dev/null +++ b/server/SpawnScripts/BeggarsCourt/AdjunctCaptainRommuls.lua @@ -0,0 +1,67 @@ +--[[ + Script Name : SpawnScripts/BeggarsCourt/Adjunct-CaptainRommuls.lua + Script Purpose : Adjunct-Captain Rommuls + Script Author : John Adams (rewritten by Cynnar) + Script Date : 2009.04.07 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +local A_BROTHERHOOD_ENFORCER = 1370064 + +function spawn(NPC) + SetMount(NPC, 6831) + SetMountColor(NPC, 1, 1, 1, 255, 1, 1) + + MoveToLocation(NPC, -8.13, 4.00, -42.68, 3, "", true) + MoveToLocation(NPC, -14.43, 3.57, -27.02, 3, "", false) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) +end + +function Talk1(NPC) + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/adjunct-captain_rommuls/fprt_hood04/qst_rommuls_seeexplosion_f4d0194c.mp3", "What's all this?!", "", 2343755495, 1390123839) + local enforcer = GetSpawn(NPC, A_BROTHERHOOD_ENFORCER) + + if enforcer ~= nil then + AddTimer(enforcer, 1500, "E_Talk1") + end +end + +function Talk2(NPC) + local zone = GetZone(NPC) + + local enforcer1 = GetSpawnByLocationID(zone, 403031) + local enforcer2 = GetSpawnByLocationID(zone, 403032) + local enforcer3 = GetSpawnByLocationID(zone, 403033) + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/adjunct-captain_rommuls/fprt_hood04/qst_rommuls_grrr_5833be16.mp3", "I have fared better against worse odds... but I shall comply, for now.", "", 148659455, 3381420393) + AddTimer(NPC, 1999, "moveRommuls") + AddTimer(enforcer1, 1999, "move_enforcer1") + AddTimer(enforcer2, 1999, "move_enforcer2") + AddTimer(enforcer3, 1999, "move_enforcer3") +end + +function Talk3(NPC) + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/adjunct-captain_rommuls/fprt_hood04/qst_rommuls_ohno_48ef4e64.mp3", "You won't get away with this you... you elves!", "", 2960277190, 1354555525) + AddTimer(NPC, 10000, "DespawnRommulus") +end + +function DespawnRommulus(NPC) + Despawn(NPC) +end + +function moveRommuls(NPC) + MoveToLocation(NPC, -24.59, 2.00, -7.14, 3, "Talk3", true) + MoveToLocation(NPC, -24.59, 2.00, -7.14, 3, "DespawnRommulus", false) + + --if enforcer ~= nil then + --MoveToLocation(enforcer1, -8.13, 4.00, -42.68, 3, "DespawnRommulus", false) + --MoveToLocation(enforcer2, -24.59, 2.00, -7.14, 3, "DespawnRommulus", false) + --MoveToLocation(enforcer3, -24.59, 2.00, -7.14, 3, "DespawnRommulus", false) + --end +end \ No newline at end of file diff --git a/server/SpawnScripts/BeggarsCourt/BankerVoranius.lua b/server/SpawnScripts/BeggarsCourt/BankerVoranius.lua new file mode 100644 index 000000000..18914dea1 --- /dev/null +++ b/server/SpawnScripts/BeggarsCourt/BankerVoranius.lua @@ -0,0 +1,24 @@ +--[[ + Script Name : SpawnScripts/BeggarsCourt/BankerVoranius.lua + Script Purpose : Banker Voranius + Script Author : John Adams + Script Date : 2009.04.05 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +function spawn(NPC) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/banker_voranius/fprt_hood04/bnk_banker_voranius.mp3", "", "", 2601161199, 994867740, Spawn) + AddConversationOption(conversation, "Thanks.") + StartConversation(conversation, NPC, Spawn, "Hello there. Voranius is my name. I can help you with all your banking needs.") + +end \ No newline at end of file diff --git a/server/SpawnScripts/BeggarsCourt/Beggars_Court_Wanderers.lua b/server/SpawnScripts/BeggarsCourt/Beggars_Court_Wanderers.lua new file mode 100644 index 000000000..eeedce3f4 --- /dev/null +++ b/server/SpawnScripts/BeggarsCourt/Beggars_Court_Wanderers.lua @@ -0,0 +1,166 @@ +--[[ + Script Name : SpawnScripts/BeggarsCourt/Beggars_Court_Wanderers.luaBeggars_Court_Wanderers.lua + Script Purpose : Waypoint Path for Beggars_Court_Wanderers.lua + Script Author : Cynnar + Script Date : 7/8/2018 04:07:20 PM + Script Notes : +--]] + +function spawn(NPC) + waypoints(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) +end + +function respawn(NPC) + spawn(NPC) +end + +function waypoints(NPC) + MovementLoopAddLocation(NPC, 76.51, -7.08, 101.84, 2, 0) + MovementLoopAddLocation(NPC, 72.4, -7.08, 101.96, 2, 0) + path = math.random(0, 1) + + if path == 1 then + path_1(NPC) + else + path_2(NPC) + end + MovementLoopAddLocation(NPC, 62.84, -7.08, 94.95, 2, 0) + MovementLoopAddLocation(NPC, 58.33, -7.05, 86.02, 2, 0) + MovementLoopAddLocation(NPC, 57.45, -6.58, 83.55, 2, 0, "ChangeGrid_1") + MovementLoopAddLocation(NPC, 55.85, -6.5, 79.19, 2, 0) + MovementLoopAddLocation(NPC, 52.89, -6.99, 69.56, 2, 0, "ChangeGrid_2") + MovementLoopAddLocation(NPC, 51.17, -6.95, 62.54, 2, 0) + MovementLoopAddLocation(NPC, 45.78, -7, 55.28, 2,0) + MovementLoopAddLocation(NPC, 41.8, -7, 51.68, 2, 3) + path = math.random(0, 1) + + if path == 1 then + path_1_A(NPC) + end + MovementLoopAddLocation(NPC, 42.64, -5, 40.87, 2, 3) + MovementLoopAddLocation(NPC, 43.89, -5, 40.21, 2, 3) + MovementLoopAddLocation(NPC, 27.27, -6, 40.12, 2, 3) + MovementLoopAddLocation(NPC, 24.88, -6, 34.74, 2, 3) + MovementLoopAddLocation(NPC, 16.71, -5.75, 34.48, 2, 3) + MovementLoopAddLocation(NPC, 13.11, -6, 36.49, 2, 3) + MovementLoopAddLocation(NPC, 14.42, -6, 40.24, 2, 3) + MovementLoopAddLocation(NPC, 11.33, -6.25, 43.25, 2, 3) + MovementLoopAddLocation(NPC, -6.66, -6, 35.16, 2, 3) + MovementLoopAddLocation(NPC, -7.45, -6, 33.4, 2, 3) + MovementLoopAddLocation(NPC, -7.41, -6, 33.09, 2, 3) + MovementLoopAddLocation(NPC, -11.25, -6, 30.03, 2, 3) + MovementLoopAddLocation(NPC, -13.45, -6, 23.67, 2, 3) + MovementLoopAddLocation(NPC, -11.78, -5.1, 16.14, 2, 3) + MovementLoopAddLocation(NPC, -16.93, -5, 12.21, 2, 3) + MovementLoopAddLocation(NPC, -20.48, -3.96, 9.01, 2, 3) + MovementLoopAddLocation(NPC, -28.12, -0.75, 5.29, 2, 3) + MovementLoopAddLocation(NPC, -26.82, -0.76, 2.13, 2, 3) + MovementLoopAddLocation(NPC, -19.68, 1.82, 4.93, 2, 3) + MovementLoopAddLocation(NPC, -17.61, 2, 0.15, 2, 3) + MovementLoopAddLocation(NPC, -19.44, 2, -2.54, 2, 3) + MovementLoopAddLocation(NPC, -15.69, 2.09, -6.11, 2, 3) + MovementLoopAddLocation(NPC, -15.05, 3.75, -28.85, 2, 3) + MovementLoopAddLocation(NPC, -12.61, 4, -34.72, 2, 3) + MovementLoopAddLocation(NPC, -14.26, 4, -37.55, 2, 3) + MovementLoopAddLocation(NPC, -8.02, 3, -36.51, 2, 3) + MovementLoopAddLocation(NPC, -5.93, 3.75, -37.63, 2, 3) + MovementLoopAddLocation(NPC, -4.4, 4.44, -39.8, 2, 3) + MovementLoopAddLocation(NPC, 0.06, 5, -38.61, 2, 3) + MovementLoopAddLocation(NPC, -0.62, 5, -37.87, 2, 3) + MovementLoopAddLocation(NPC, -1.49, 5, -34.88, 2, 3) + MovementLoopAddLocation(NPC, 5.47, 4.75, -28.55, 2, 3) + MovementLoopAddLocation(NPC, 12.6, 4.75, -27.41, 2, 3) + MovementLoopAddLocation(NPC, 20.15, 5.25, -32.81, 2, 3) + MovementLoopAddLocation(NPC, 21.55, 5.25, -31.33, 2, 3) + MovementLoopAddLocation(NPC, 19.59, 5.03, -28.83, 2, 3) + MovementLoopAddLocation(NPC, 19.96, 5, -23.39, 2, 3) + MovementLoopAddLocation(NPC, 26.94, 5.25, -20.26, 2, 3) + MovementLoopAddLocation(NPC, 23.5, 5.25, -14.64, 2, 3) + MovementLoopAddLocation(NPC, 31.51, 5.25, -11.6, 2, 3) + MovementLoopAddLocation(NPC, 42.69, 5.25, -15.26, 2, 3) + MovementLoopAddLocation(NPC, 52.8, 5, -21.17, 2, 3) + MovementLoopAddLocation(NPC, 58.2, 5.01, -23.22, 2, 3) + MovementLoopAddLocation(NPC, 53.74, 5, -15.59, 2, 3) + MovementLoopAddLocation(NPC, 45.41, 3.67, -8.05, 2, 3) + MovementLoopAddLocation(NPC, 43.38, 3.5, -5.24, 2, 3) + MovementLoopAddLocation(NPC, 30.73, 3.83, -2.81, 2, 3) + MovementLoopAddLocation(NPC, 17.58, 3.5, -3.76, 2, 3) + MovementLoopAddLocation(NPC, 10.47, 3.5, -5.34, 2, 3) + MovementLoopAddLocation(NPC, 10.93, 3.5, -1.67, 2, 3) + MovementLoopAddLocation(NPC, 20.03, 3.5, 6.08, 2, 3) + MovementLoopAddLocation(NPC, 27.67, 2, 15.87, 2, 3) + MovementLoopAddLocation(NPC, 20.5, 2.08, 17.41, 2, 3) + MovementLoopAddLocation(NPC, 20.81, 2.98, 20.05, 2, 3) + MovementLoopAddLocation(NPC, 20.64, 2, 19.12, 2, 3) + MovementLoopAddLocation(NPC, 34, 2, 14.51, 2, 3) + MovementLoopAddLocation(NPC, 43.07, 2, 16.15, 2, 3) + MovementLoopAddLocation(NPC, 48.67, 2, 17.8, 2, 3) + MovementLoopAddLocation(NPC, 49.89, 2, 22.67, 2, 3) + MovementLoopAddLocation(NPC, 49.77, 1.9, 24.77, 2, 3) + MovementLoopAddLocation(NPC, 46.84, 1.27, 25.5, 2, 3) + MovementLoopAddLocation(NPC, 32.56, -5, 23.54, 2, 3) + MovementLoopAddLocation(NPC, 31.55, -5, 27.34, 2, 3) + MovementLoopAddLocation(NPC, 40.3, -5, 36.87, 2, 3) + MovementLoopAddLocation(NPC, 41.7, -6, 45.4, 2, 3) + MovementLoopAddLocation(NPC, 47.45, -7, 56.29, 2, 3) + MovementLoopAddLocation(NPC, 57.56, -6.97, 62.99, 2, 3, "depop") +end + +function depop(NPC) + Despawn(NPC) +end + +function ChangeGrid_1(NPC) + SetGridID(NPC, 4022248764) +end + +function ChangeGrid_2(NPC) + SetGridID(NPC, 2799241780) +end + +function path_1(NPC) + MovementLoopAddLocation(NPC, 69.32, -7.08, 108.95, 2, 3) + MovementLoopAddLocation(NPC, 64.66, -7.08, 109.92, 2, 3) + MovementLoopAddLocation(NPC, 62.35, -7.08, 109.55, 2, 0) + MovementLoopAddLocation(NPC, 59.48, -7.08, 109.09, 2, 0) + MovementLoopAddLocation(NPC, 58.84, -7.08, 107.72, 2, 0) + MovementLoopAddLocation(NPC, 57.73, -7.08, 105.35, 2, 0) + MovementLoopAddLocation(NPC, 57.57, -7.08, 101.5, 2, 0) + MovementLoopAddLocation(NPC, 58.9, -7.08, 98.79, 2, 0) +end + +function path_2(NPC) + MovementLoopAddLocation(NPC, 68.09, -7.08, 97.75, 2, 0) +end + +function path_1_A(NPC) + MovementLoopAddLocation(NPC, 25, -7, 56.25, 2, 0) + MovementLoopAddLocation(NPC, 17.17, -7, 58.82, 2, 0) + MovementLoopAddLocation(NPC, 16.53, -0.75, 72.89, 2, 0) + MovementLoopAddLocation(NPC, 13.47, -0.12, 75.39, 2, 0) + MovementLoopAddLocation(NPC, 10.45, -0.05, 76.46, 2, 0) + MovementLoopAddLocation(NPC, 10.46, 0.01, 77.78, 2, 0) + MovementLoopAddLocation(NPC, 10.55, -0.05, 76.39, 2, 0) + MovementLoopAddLocation(NPC, 6.8, -1.93, 70.46, 2, 0) + MovementLoopAddLocation(NPC, 7.41, -7, 59.23, 2, 0) + MovementLoopAddLocation(NPC, 2.35, -7, 59.67, 2, 0) + MovementLoopAddLocation(NPC, -6.62, -7, 58.65, 2, 0) + MovementLoopAddLocation(NPC, -15.4, -7, 58.49, 2, 0) + MovementLoopAddLocation(NPC, -20.39, -7, 59.96, 2, 0) + MovementLoopAddLocation(NPC, -23.43, -7, 58.81, 2, 0) + MovementLoopAddLocation(NPC, -23.03, -7, 60.95, 2, 0) + MovementLoopAddLocation(NPC, -23.37, -7, 63.33, 2, 0) + MovementLoopAddLocation(NPC, -21.73, -7, 66.38, 2, 0) + MovementLoopAddLocation(NPC, -20.28, -7, 64.77, 2, 0) + MovementLoopAddLocation(NPC, -15.87, -7, 56.06, 2, 0) + MovementLoopAddLocation(NPC, -11.31, -7, 57.61, 2, 0) + MovementLoopAddLocation(NPC, -9.91, -7, 46.9, 2, 0) + MovementLoopAddLocation(NPC, -10.81, -7, 40.38, 2, 0) + MovementLoopAddLocation(NPC, -27.28, -6.5, 30.38, 2, 0) + MovementLoopAddLocation(NPC, -31.12, -5.75, 25.53, 2, 0) + MovementLoopAddLocation(NPC, -34.9, -5.75, 25, 2, 0) +end \ No newline at end of file diff --git a/server/SpawnScripts/BeggarsCourt/DelcairnSebastian.lua b/server/SpawnScripts/BeggarsCourt/DelcairnSebastian.lua new file mode 100644 index 000000000..eebc88eff --- /dev/null +++ b/server/SpawnScripts/BeggarsCourt/DelcairnSebastian.lua @@ -0,0 +1,287 @@ +--[[ + Script Name : SpawnScripts/BeggarsCourt/DelcairnSebastian.lua + Script Purpose : Delcairn Sebastian + Script Author : Unknown (updated by Cynnar 2018.06.13 03:06:49) + Script Date : Unknown + Script Notes : Info was not filled out. Credit goes to the one who wrote the script. +--]] + +local HALFELF_MENTOR_QUEST_1 = 307 -- A Delivery +local HALFELF_MENTOR_QUEST_2 = 308 -- Dirty Work +local HALFELF_MENTOR_QUEST_3 = 315 -- Reel Him In +local HALFELF_MENTOR_QUEST_4 = 317 -- Thaen Sevellos +local HALFELF_MENTOR_QUEST_5 = 319 -- One Last Request + +local LIEUTENANT_CERVAEN = 1370037 +local DELCAIRN_SEBASTIAN = 1370038 + +function spawn(NPC) + ProvidesQuest(NPC, HALFELF_MENTOR_QUEST_2) + ProvidesQuest(NPC, HALFELF_MENTOR_QUEST_4) + ProvidesQuest(NPC, HALFELF_MENTOR_QUEST_5) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + if HasCompletedQuest(Spawn, HALFELF_MENTOR_QUEST_1) then + if HasCompletedQuest(Spawn, HALFELF_MENTOR_QUEST_2) then + if HasCompletedQuest(Spawn, HALFELF_MENTOR_QUEST_3) then + if HasCompletedQuest(Spawn, HALFELF_MENTOR_QUEST_4) then + if HasCompletedQuest(Spawn, HALFELF_MENTOR_QUEST_5) then + Say(NPC, "Good work. We appreciate it more than you know.", Spawn) + elseif HasQuest(Spawn, HALFELF_MENTOR_QUEST_5) then + Say(NPC, "Good work. We appreciate it more than you know.", Spawn) + else + OnQuest4(NPC, Spawn, conversation) + end + elseif HasQuest(Spawn, HALFELF_MENTOR_QUEST_4) then + OnQuest4(NPC, Spawn, conversation) + else + OnQuest3(NPC, Spawn, conversation) + end + elseif HasQuest(Spawn,HALFELF_MENTOR_QUEST_3) then + OnQuest3(NPC, Spawn, conversation) + else + Say(NPC, "Speak with Cervaen, he will brief you on the plan.", Spawn) + end + elseif HasQuest(Spawn, HALFELF_MENTOR_QUEST_2) then + OnQuest2(NPC, Spawn, conversation) + else + Welcome(NPC, Spawn, conversation) + end + elseif HasQuest(Spawn, HALFELF_MENTOR_QUEST_1) then + OnQuest1(NPC, Spawn, conversation) + else + Say(NPC, "Please, leave while it still doesn't matter.", Spawn) + end +end + +function respawn(NPC) + spawn(NPC) +end + +-------------------------------------------------------------------------------------------------------------------------------------------- +-- HALFELF_MENTOR_QUEST_1 +-------------------------------------------------------------------------------------------------------------------------------------------- + +function OnQuest1(NPC, Spawn, conversation) + if GetQuestStep(Spawn, HALFELF_MENTOR_QUEST_1) == 1 then + Say(NPC, "Please, leave while it still doesn't matter.", Spawn) + elseif GetQuestStep(Spawn, HALFELF_MENTOR_QUEST_1) == 2 then + Welcome(NPC, Spawn, conversation) + end +end + +function Welcome(NPC, Spawn, conversation) + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/delcairn_sebastian/fprt_hood04/quests/delcairn/delcairn001.mp3", "", "", 144616361, 2775223006, Spawn) + AddConversationOption(conversation, "I would like to help.", "dlg_8_1") + StartConversation(conversation, NPC, Spawn, "Welcome, " .. GetName(Spawn) .. ". What can The Brotherhood do for you? Our conversation can be long or it can be short. Worry not, we will pay you for your delivery.") +end + +function dlg_8_1(NPC, Spawn) + if HasQuest(Spawn, HALFELF_MENTOR_QUEST_1) then + SetStepComplete(Spawn, HALFELF_MENTOR_QUEST_1, 2) + end + + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/delcairn_sebastian/fprt_hood04/quests/delcairn/delcairn002.mp3", "", "", 718931857, 2390994276, Spawn) + AddConversationOption(conversation, "Rommuls?", "dlg_8_2") + StartConversation(conversation, NPC, Spawn, "Ah. But do you know what you want to help with? The Brotherhood attracts many who do not truly believe in its cause. It attracts radicals and anarchists who wish only for pain and torment. We are not that, " .. GetName(Spawn) .. ". We seek only justice. There is a great injustice walking the streets of Beggar's Court even as we speak.") +end + +-------------------------------------------------------------------------------------------------------------------------------------------- +-- HALFELF_MENTOR_QUEST_2 +-------------------------------------------------------------------------------------------------------------------------------------------- + +function dlg_8_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/delcairn_sebastian/fprt_hood04/quests/delcairn/delcairn003.mp3", "", "", 982292673, 517388621, Spawn) + AddConversationOption(conversation, "[listen to conversation]", "CervaenTalk1") + StartConversation(conversation, NPC, Spawn, "Yes, Rommuls. He dislikes us, and so he uses his power to harass, harm, even kill us. Few in Freeport care of his deeds, let them remain indifferent. The Brotherhood will solve its own problems. I- Cervaen, what is it?") +end + +function CervaenTalk1(NPC, Spawn) + local Cervaen = GetSpawn(Spawn, LIEUTENANT_CERVAEN) + + FaceTarget(Cervaen, NPC) + conversation = CreateConversation() + + PlayFlavor(Cervaen, "voiceover/english/tutorial_revamp/lieutenant_cervaen/fprt_hood04/quests/cervaen/cervaen_tradeoff000.mp3", "", "", 3243592736, 1629677067, Spawn) + AddConversationOption(conversation, "[listen to conversation]", "SebastianTalk1") + StartConversation(conversation, Cervaen, Spawn, "Sir... Thaen, Revlos, Jalya... their mission failed.") +end + +function CervaenTalk2(NPC, Spawn) + local Cervaen = GetSpawn(Spawn, LIEUTENANT_CERVAEN) + + FaceTarget(Cervaen, NPC) + conversation = CreateConversation() + + PlayFlavor(Cervaen, "voiceover/english/tutorial_revamp/lieutenant_cervaen/fprt_hood04/quests/cervaen/cervaen_tradeoff001.mp3", "", "", 1068640212, 1975761301, Spawn) + AddConversationOption(conversation, "[listen to conversation]", "SebastianTalk2") + StartConversation(conversation, Cervaen, Spawn, "I just got word from Thavian. Jalya is dead and Thaen is in captivity. Revlos has betrayed us.") +end + +function CervaenTalk3(NPC, Spawn) + local Cervaen = GetSpawn(Spawn, LIEUTENANT_CERVAEN) + + FaceTarget(Cervaen, NPC) + conversation = CreateConversation() + + PlayFlavor(Cervaen, "voiceover/english/tutorial_revamp/lieutenant_cervaen/fprt_hood04/quests/cervaen/cervaen_tradeoff002.mp3", "", "", 872569358, 130933055, Spawn) + AddConversationOption(conversation, "[listen to conversation]", "SebastianTalk3") + StartConversation(conversation, Cervaen, Spawn, "Thavian doesn't know, sir. All he knows is that Revlos has betrayed us.") +end + +function CervaenTalk4(NPC, Spawn) + local Cervaen = GetSpawn(Spawn, LIEUTENANT_CERVAEN) + + FaceTarget(Cervaen, NPC) + conversation = CreateConversation() + + PlayFlavor(Cervaen, "voiceover/english/tutorial_revamp/lieutenant_cervaen/fprt_hood04/quests/cervaen/cervaen_tradeoff003.mp3", "", "", 3371521952, 284772411, Spawn) + AddConversationOption(conversation, "[listen to conversation]", "SebastianTalk4") + StartConversation(conversation, Cervaen, Spawn, "No, sir. But he does know that Revlos' cohorts are meeting to discuss his debriefing. They're meeting at the gates to North Freeport, soon.") +end + +function GoodLoam(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/delcairn_sebastian/fprt_hood04/quests/delcairn/delcairn005.mp3", "", "", 549706285, 563599321, Spawn) + AddConversationOption(conversation, "Both cups?", "OfferQuest2") + StartConversation(conversation, NPC, Spawn, "Good. Loamshallow is not a member of The Brotherhood but he is sympathetic. He will sell you a vial of poison, Fate's Whisper. Buy it, then proceed to the gates to North Freeport and hide behind the gate. The western side should provide ample cover. Listen to their conversation and learn where Revlos' meeting is to take place, then go there. They will have already set it up for a meeting, there should be cups present, poison them.") +end + +function OfferQuest2(NPC, Spawn) + FaceTarget(NPC, Spawn) + OfferQuest(NPC, Spawn, HALFELF_MENTOR_QUEST_2) +end + +function OnQuest2(NPC, Spawn, conversation) + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/delcairn_sebastian/fprt_hood04/quests/delcairn/delcairn006.mp3", "", "", 3829362296, 3731812523, Spawn) + + if GetQuestStep(Spawn, HALFELF_MENTOR_QUEST_2) == 4 then + AddConversationOption(conversation, "Yes, the cups are poisoned.", "dlg_22_1") + else + AddConversationOption(conversation, "No, not yet.") + end + + StartConversation(conversation, NPC, Spawn, "Have you done what was required?") +end + +function dlg_22_1(NPC, Spawn) + SetStepComplete(Spawn, HALFELF_MENTOR_QUEST_2, 4) + + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/delcairn_sebastian/fprt_hood04/quests/delcairn/delcairn007.mp3", "", "", 2362160812, 2895340086, Spawn) + AddConversationOption(conversation, "All right.") + StartConversation(conversation, NPC, Spawn, "Good. Revlos... we didn't deserve this. While you were gone Cervaen and I worked over a new plan, speak with him to be briefed.") +end + +--------------------------------------------------------------------------------------------------------------------- +-- HALFELF_MENTOR_QUEST_3 +--------------------------------------------------------------------------------------------------------------------- + +function OnQuest3(NPC, Spawn, conversation) + if (HasQuest(Spawn,HALFELF_MENTOR_QUEST_3) and GetQuestStep(Spawn, HALFELF_MENTOR_QUEST_3) == 4) or (HasCompletedQuest(Spawn, HALFELF_MENTOR_QUEST_3) and not HasCompletedQuest(Spawn, HALFELF_MENTOR_QUEST_4)) then + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/delcairn_sebastian/fprt_hood04/quests/delcairn/delcairn008.mp3", "", "", 3033653265, 2915705439, Spawn) + AddConversationOption(conversation, "That was fast.", "dlg_25_1") + StartConversation(conversation, NPC, Spawn, "You did good, " .. GetName(Spawn) .. ". Rommuls was captured. He will be given justice. The Overlord released a public statement informing the populace of Rommuls' weakness and subsequent termination from his post, his followers will be allowed to remain in the militia but under strict watch.") + else + Say(NPC, "Speak with Cervaen, he will brief you on the plan.", Spawn) + end +end + +function dlg_25_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/delcairn_sebastian/fprt_hood04/quests/delcairn/delcairn009.mp3", "", "", 2387230376, 93430481, Spawn) + AddConversationOption(conversation, "I see.", "dlg_25_2") + StartConversation(conversation, NPC, Spawn, "Heh, do you think the Overlord really cares about what goes on in these districts? Some office of the government--who knew it was going to happen a long time ago--released the statement. The Overlord was made aware but obviously didn't care. The Brotherhood has friends in high places. And so, to turn indifference into support is not a hard thing.") +end + +function dlg_25_2(NPC, Spawn) + if HasQuest(Spawn, HALFELF_MENTOR_QUEST_3) then + SetStepComplete(Spawn, HALFELF_MENTOR_QUEST_3, 4) + end + + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/delcairn_sebastian/fprt_hood04/quests/delcairn/delcairn010.mp3", "", "", 2380606037, 663564868, Spawn) + AddConversationOption(conversation, "You mean Thaen?", "dlg_25_3") + AddConversationOption(conversation, "I cannot help right now.") + StartConversation(conversation, NPC, Spawn, "There is one more mess to clean up, " .. GetName(Spawn) .. ". We would like your help. What do you say?") +end + +--------------------------------------------------------------------------------------------------------------------- +-- HALFELF_MENTOR_QUEST_4 +--------------------------------------------------------------------------------------------------------------------- + +function dlg_25_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/delcairn_sebastian/fprt_hood04/quests/delcairn/delcairn011.mp3", "", "", 2589243361, 2803092595, Spawn) + AddConversationOption(conversation, "That doesn't sound too hard.", "OfferQuest4") + StartConversation(conversation, NPC, Spawn, "Yes, Thaen. We've gotten word of where they're holding him, we'd like you to go free him. Their forces are weak, you should have no trouble. He's just north of here, in a run down building.") +end + +function OfferQuest4(NPC, Spawn) + FaceTarget(NPC, Spawn) + OfferQuest(NPC, Spawn, HALFELF_MENTOR_QUEST_4) +end + +function OnQuest4(NPC, Spawn, conversation) + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/delcairn_sebastian/fprt_hood04/quests/delcairn/delcairn013.mp3", "", "", 284231717, 1738375836, Spawn) + + if (HasQuest(Spawn, HALFELF_MENTOR_QUEST_4) and GetQuestStep(Spawn, HALFELF_MENTOR_QUEST_4) == 2) or (HasCompletedQuest(Spawn, HALFELF_MENTOR_QUEST_4) and not HasCompletedQuest(Spawn, HALFELF_MENTOR_QUEST_5)) then + AddConversationOption(conversation, "Yes, Thaen is safe.", "dlg_30_1") + else + AddConversationOption(conversation, "Not yet.") + end + + StartConversation(conversation, NPC, Spawn, "Have you freed Thaen?") +end + +function dlg_30_1(NPC, Spawn) + if HasQuest(Spawn, HALFELF_MENTOR_QUEST_4) then + SetStepComplete(Spawn, HALFELF_MENTOR_QUEST_4, 2) + end + + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/delcairn_sebastian/fprt_hood04/quests/delcairn/delcairn014.mp3", "", "", 2285068924, 2141156467, Spawn) + AddConversationOption(conversation, "Yes.", "dlg_30_2") + AddConversationOption(conversation, "No, sorry.") + StartConversation(conversation, NPC, Spawn, "Wonderful. Your arrival was at a key moment, a tragedy--a severe tragedy--ended with your help. As the Brotherhood preaches, balance is everything. I would like you to speak with someone. He is not of the Brotherhood, but his goals and ours are paired. Will you help us more?") +end + +--------------------------------------------------------------------------------------------------------------------- +-- HALFELF_MENTOR_QUEST_5 +--------------------------------------------------------------------------------------------------------------------- + +function dlg_30_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/delcairn_sebastian/fprt_hood04/quests/delcairn/delcairn015.mp3", "", "", 3978499677, 3940019071, Spawn) + AddConversationOption(conversation, "All right.", "OfferQuest5") + StartConversation(conversation, NPC, Spawn, "Good. Go speak with Inquisitor Thorson in the Sunken City. Do as he asks, you will help us more than you know. Thank you again for all your help. If you go to the docks here in Beggar's Court you can use the Mariner's Bell to get to Sunken City.") +end + +function OfferQuest5(NPC, Spawn) + FaceTarget(NPC, Spawn) + OfferQuest(NPC, Spawn, HALFELF_MENTOR_QUEST_5) +end \ No newline at end of file diff --git a/server/SpawnScripts/BeggarsCourt/Kith.lua b/server/SpawnScripts/BeggarsCourt/Kith.lua new file mode 100644 index 000000000..0419b2e3d --- /dev/null +++ b/server/SpawnScripts/BeggarsCourt/Kith.lua @@ -0,0 +1,29 @@ +--[[ + Script Name : SpawnScripts/BeggarsCourt/Kith.lua + Script Author : Cynnar + Script Date : 2018.07.08 10:07:36 + Script Purpose : + : +--]] + +function spawn(NPC) + waypoints(NPC) +end + +function respawn(NPC) + spawn(NPC) +end + +function waypoints(NPC)local X = GetX(NPC) + local X = GetX(NPC) + local Y = GetY(NPC) + local Z = GetZ(NPC) + MoveToLocation(NPC, 24.70, 3.50, 1.07) + MovementLoopAddLocation(NPC, X + math.random(3,10), Y, Z + math.random(3,10), 2, math.random(20,45)) + MovementLoopAddLocation(NPC, 24.70, 3.50, 1.07, 2, 0) + MovementLoopAddLocation(NPC, X - math.random(3,10), Y, Z - math.random(3,10), 2, math.random(20,45)) + MovementLoopAddLocation(NPC, 24.70, 3.50, 1.07, 2, 0) + MovementLoopAddLocation(NPC, X + math.random(3,10), Y, Z + math.random(3,10), 2, math.random(20,45)) + MovementLoopAddLocation(NPC, 24.70, 3.50, 1.07, 2, 0) + MovementLoopAddLocation(NPC, X - math.random(3,10), Y, Z - math.random(3,10), 2, math.random(20,45)) +end diff --git a/server/SpawnScripts/BeggarsCourt/LieutenantCervaen.lua b/server/SpawnScripts/BeggarsCourt/LieutenantCervaen.lua new file mode 100644 index 000000000..13dcd6ff3 --- /dev/null +++ b/server/SpawnScripts/BeggarsCourt/LieutenantCervaen.lua @@ -0,0 +1,200 @@ +--[[ + Script Name : SpawnScripts/BeggarsCourt/LieutenantCervaen.lua + Script Purpose : Lieutenant Cervaen + Script Author : John Adams (updated by Cynnar 2018.06.13 02:06:19) + Script Date : 2009.04.05 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +local HALFELF_MENTOR_QUEST_1 = 307 -- A Delivery +local HALFELF_MENTOR_QUEST_2 = 308 -- Dirty Work +local HALFELF_MENTOR_QUEST_3 = 315 -- Reel Him In +local HALFELF_MENTOR_QUEST_4 = 317 -- Thaen Sevellos + +local LIEUTENANT_CERVAEN = 1370037 +local DELCAIRN_SEBASTIAN = 1370038 + +function spawn(NPC) + ProvidesQuest(NPC, HALFELF_MENTOR_QUEST_3) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + if HasCompletedQuest(Spawn, HALFELF_MENTOR_QUEST_1) then + if HasCompletedQuest(Spawn, HALFELF_MENTOR_QUEST_2) then + if HasCompletedQuest(Spawn, HALFELF_MENTOR_QUEST_3) then + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/lieutenant_cervaen/fprt_hood04/qst_cervaen_quest3complete_2605c4d2.mp3", "Nicely done, I heard it from 'ere. This should put Beggar's Court in a much better state.", "", 2938982399, 3355150485, Spawn) + elseif HasQuest(Spawn, HALFELF_MENTOR_QUEST_3) then + OnQuest3(NPC, Spawn, conversation) + else + OurPlan(NPC, Spawn, conversation) + end + elseif HasQuest(Spawn, HALFELF_MENTOR_QUEST_2) then + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/lieutenant_cervaen/fprt_hood04/qst_cervaen_quest1done_b206a1e8.mp3", "Speak with Delcairn for now, please.", "", 3252334581, 753438143, Spawn) + else + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/lieutenant_cervaen/fprt_hood04/qst_cervaen_quest1done_b206a1e8.mp3", "Speak with Delcairn for now, please.", "", 3252334581, 753438143, Spawn) + end + elseif HasQuest(Spawn, HALFELF_MENTOR_QUEST_1) then + OnQuest1(NPC, Spawn, conversation) + else + Say(NPC, "Yeah? Whadya need?", Spawn) + end +end + +-------------------------------------------------------------------------------------------------------------- +-- HALFELF_MENTOR_QUEST_1 +-------------------------------------------------------------------------------------------------------------- + +function OnQuest1(NPC, Spawn, conversation) + if GetQuestStep(Spawn, HALFELF_MENTOR_QUEST_1) == 1 then + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/lieutenant_cervaen/fprt_hood04/quests/cervaen/cervaen001.mp3", "", "", 95573357, 894655204, Spawn) + AddConversationOption(conversation, "The Brotherhood Awaits. [hand him the note]", "dlg_7_1") + StartConversation(conversation, NPC, Spawn, "Yes, what do you need?") + elseif GetQuestStep(Spawn, HALFELF_MENTOR_QUEST_1) == 2 then + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/lieutenant_cervaen/fprt_hood04/qst_cervaen_quest1done_b206a1e8.mp3", "Speak with Delcairn for now, please.", "", 3252334581, 753438143, Spawn) + end +end + +function dlg_7_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/lieutenant_cervaen/fprt_hood04/quests/cervaen/cervaen002.mp3", "", "", 2727322832, 3944021751, Spawn) + AddConversationOption(conversation, "Yes.", "dlg_7_2") + StartConversation(conversation, NPC, Spawn, "That we do. Are you interested in helping?") +end + +function dlg_7_2(NPC, Spawn) + SetStepComplete(Spawn, HALFELF_MENTOR_QUEST_1, 1) + + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/lieutenant_cervaen/fprt_hood04/quests/cervaen/cervaen003.mp3", "", "", 1755611144, 3257122999, Spawn) + AddConversationOption(conversation, "I will, thank you.") + StartConversation(conversation, NPC, Spawn, "Good. Speak with Delcairn. He'll tell you what you must know.") +end + +-------------------------------------------------------------------------------------------------------------- +-- HALFELF_MENTOR_QUEST_2 +-------------------------------------------------------------------------------------------------------------- + +function SebastianTalk1(NPC, Spawn) + local Sebastian = GetSpawn(Spawn, DELCAIRN_SEBASTIAN) + + FaceTarget(Sebastian, NPC) + conversation = CreateConversation() + + PlayFlavor(Sebastian, "voiceover/english/tutorial_revamp/delcairn_sebastian/fprt_hood04/quests/delcairn/delcairn_tradeoff000.mp3", "", "", 3389160540, 2015613299, Spawn) + AddConversationOption(conversation, "[listen to conversation]", "CervaenTalk2") + StartConversation(conversation, Sebastian, Spawn, "What? What happened?") +end + +function SebastianTalk2(NPC, Spawn) + local Sebastian = GetSpawn(Spawn, DELCAIRN_SEBASTIAN) + + FaceTarget(Sebastian, NPC) + conversation = CreateConversation() + + PlayFlavor(Sebastian, "voiceover/english/tutorial_revamp/delcairn_sebastian/fprt_hood04/quests/delcairn/delcairn_tradeoff001.mp3", "", "", 1732950477, 2016689454, Spawn) + AddConversationOption(conversation, "[listen to conversation]", "CervaenTalk3") + StartConversation(conversation, Sebastian, Spawn, "What?! Revlos' wife is in the ground because of Rommuls, why would he side with him?") +end + +function SebastianTalk3(NPC, Spawn) + local Sebastian = GetSpawn(Spawn, DELCAIRN_SEBASTIAN) + + FaceTarget(Sebastian, NPC) + conversation = CreateConversation() + + PlayFlavor(Sebastian, "voiceover/english/tutorial_revamp/delcairn_sebastian/fprt_hood04/quests/delcairn/delcairn_tradeoff002.mp3", "", "", 2504673641, 4239966724, Spawn) + AddConversationOption(conversation, "[listen to conversation]", "CervaenTalk4") + StartConversation(conversation, Sebastian, Spawn, "To Drundar with Revlos. And Jalya... her loss hurts us. Did Thavian know where they're holding Thaen?") +end + +function SebastianTalk4(NPC, Spawn) + local Sebastian = GetSpawn(Spawn, DELCAIRN_SEBASTIAN) + + FaceTarget(Sebastian, Spawn) + conversation = CreateConversation() + + PlayFlavor(Sebastian, "voiceover/english/tutorial_revamp/delcairn_sebastian/fprt_hood04/quests/delcairn/delcairn004.mp3", "", "", 892666129, 4114076052, Spawn) + AddConversationOption(conversation, "Yes, to the end.", "GoodLoam") + AddConversationOption(conversation, "No, I am sorry.") + StartConversation(conversation, Sebastian, Spawn, "Thank you, Cervaen. You, " .. GetName(Spawn) .. ", we're undermanned, the time to decide is now. Will you help us--to the end?") +end + +-------------------------------------------------------------------------------------------------------------------------------------- +-- HALFELF_MENTOR_QUEST_3 +-------------------------------------------------------------------------------------------------------------------------------------- + +function OurPlan(NPC, Spawn, conversation) + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/lieutenant_cervaen/fprt_hood04/quests/cervaen/cervaen004.mp3", "", "", 890059642, 2034176036, Spawn) + AddConversationOption(conversation, "Where do I fit in?", "dlg_23_1") + StartConversation(conversation, NPC, Spawn, "All right. Our plan revolves around a shipment that's been sitting in Beggar's Court--untouched--for some time now. Rommuls has had his eyes on this shipment ever since it arrived. Obviously it's something important to him, right? Well we looked into it, it's contraband reclaimed from members of the militia in all of Freeport's districts. Rommuls believes some of his men know this, and he's trying to catch any of them in a trap.") +end + +function dlg_23_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/lieutenant_cervaen/fprt_hood04/quests/cervaen/cervaen005.mp3", "", "", 1443615249, 408645931, Spawn) + AddConversationOption(conversation, "All right.", "OfferQuest3") + StartConversation(conversation, NPC, Spawn, "Everywhere. We have some supplies stashed around Beggar's court specifically for times like now. They're in barrels marked by The Brotherhood. Go collect some component packs for me, then return here.") +end + +function OfferQuest3(NPC, Spawn) + FaceTarget(NPC, Spawn) + OfferQuest(NPC, Spawn, HALFELF_MENTOR_QUEST_3) +end + +function OnQuest3(NPC, Spawn, conversation) + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/lieutenant_cervaen/fprt_hood04/quests/cervaen/cervaen006.mp3", "", "", 1369664151, 2007400535, Spawn) + + if GetQuestStep(Spawn, HALFELF_MENTOR_QUEST_3) == 1 then + AddConversationOption(conversation, "Not yet.") + StartConversation(conversation, NPC, Spawn, "Have you collected the supplies?") + elseif GetQuestStep(Spawn, HALFELF_MENTOR_QUEST_3) == 2 then + AddConversationOption(conversation, "Yes.", "dlg_24_1") + StartConversation(conversation, NPC, Spawn, "Have you collected the supplies?") + elseif GetQuestStep(Spawn, HALFELF_MENTOR_QUEST_3) == 3 then + Say(NPC, "Get to it! This is important.", Spawn) + elseif GetQuestStep(Spawn, HALFELF_MENTOR_QUEST_3) == 4 then + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/lieutenant_cervaen/fprt_hood04/qst_cervaen_quest3complete_2605c4d2.mp3", "Nicely done, I heard it from 'ere. This should put Beggar's Court in a much better state.", "", 2938982399, 3355150485, Spawn) + end +end + +function dlg_24_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/lieutenant_cervaen/fprt_hood04/quests/cervaen/cervaen007.mp3", "", "", 1901158863, 3341418842, Spawn) + AddConversationOption(conversation, "Where is the shipment?", "dlg_24_2") + AddConversationOption(conversation, "A bomb? That sounds too dangerous.", "NobodyWillGetHurt") + StartConversation(conversation, NPC, Spawn, "Good. Now I can use these to put together something that will grab Rommuls' attention. You will be its vehicle, " .. GetName(Spawn) .. ". Take this, it's an explosive device, plant it on the shipment that Rommuls has been watching. It doesn't matter if he sees you do it or not, it will get his attention either way. Get clear of the blast. When Rommuls comes running our people will be in place to escort him quickly out of the public eye.") +end + +function NobodyWillGetHurt(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "I can.", "dlg_24_2") + StartConversation(conversation, NPC, Spawn, "Nobody will get hurt, trust me. It's a very low-power explosive. This must be done. Can you do this or not?") +end + +function dlg_24_2(NPC, Spawn) + SetStepComplete(Spawn, HALFELF_MENTOR_QUEST_3, 2) + + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/lieutenant_cervaen/fprt_hood04/quests/cervaen/cervaen009.mp3", "", "", 591461731, 3072537228, Spawn) + AddConversationOption(conversation, "I will.") + StartConversation(conversation, NPC, Spawn, "The shipment is in the east end of the northern part of Beggar's Court. It's just a few barrels sitting out all alone, they shouldn't be hard to find. I've given the arcane fuse on the bomb a five second timer. Return to Delcairn when you're done") +end \ No newline at end of file diff --git a/server/SpawnScripts/BeggarsCourt/MarcusLevidius.lua b/server/SpawnScripts/BeggarsCourt/MarcusLevidius.lua new file mode 100644 index 000000000..7ccb5c986 --- /dev/null +++ b/server/SpawnScripts/BeggarsCourt/MarcusLevidius.lua @@ -0,0 +1,30 @@ +--[[ + Script Name : SpawnScripts/BeggarsCourt/MarcusLevidius.lua + Script Purpose : Marcus Levidius + Script Author : John Adams + Script Date : 2009.04.05 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +function spawn(NPC) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + + choice = math.random(1, 4) + + if choice == 1 then + PlayFlavor(NPC, "", "Yes, yes, hello. I'm busy.", "hello", 1689589577, 4560189, Spawn) + elseif choice == 2 then + PlayFlavor(NPC, "", "Oh, drat, I hope not. Oh, sorry, I thought you might have meant the weather.", "confused", 1689589577, 4560189, Spawn) + elseif choice == 3 then + PlayFlavor(NPC, "", "Grim determination has gotten us to where we are now.", "agree", 1689589577, 4560189, Spawn) + elseif choice == 4 then + PlayFlavor(NPC, "", "One day, we shall reign supreme over the lessers.", "brandish", 1689589577, 4560189, Spawn) + end +end \ No newline at end of file diff --git a/server/SpawnScripts/BeggarsCourt/Ro.lua b/server/SpawnScripts/BeggarsCourt/Ro.lua new file mode 100644 index 000000000..fb58b38af --- /dev/null +++ b/server/SpawnScripts/BeggarsCourt/Ro.lua @@ -0,0 +1,276 @@ +--[[ + Script Name : Ro.lua + Script Purpose : Waypoint Path for Ro.lua + Script Author : Cynnar + Script Date : 6/24/2018 12:06:55 PM + Script Notes : +--]] + +function spawn(NPC) + waypoints(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) +end + +function respawn(NPC) +end + +function waypoints(NPC) + MovementLoopAddLocation(NPC, 31.89, 5.25, -13.94, 2, 3) + MovementLoopAddLocation(NPC, 39.12, 5.25, -20.88, 2, 3) + MovementLoopAddLocation(NPC, 45.32, 5.25, -18.9, 2, 3) + MovementLoopAddLocation(NPC, 51.19, 5, -23.3, 2, 3) + MovementLoopAddLocation(NPC, 57.85, 5, -22.87, 2, 3) + MovementLoopAddLocation(NPC, 58.4, 5, -23.09, 2, 3) + MovementLoopAddLocation(NPC, 58.69, 5, -22.28, 2, 3) + MovementLoopAddLocation(NPC, 54.85, 4.23, -6.04, 2, 3) + MovementLoopAddLocation(NPC, 44.46, 3.5, -1.09, 2, 3) + MovementLoopAddLocation(NPC, 29.14, 2, 16.16, 2, 3) + MovementLoopAddLocation(NPC, 21.76, 2, 17.66, 2, 3) + MovementLoopAddLocation(NPC, 21.6, 2, 18.49, 2, 3) + MovementLoopAddLocation(NPC, 19.53, 2, 18.84, 2, 3) + MovementLoopAddLocation(NPC, 12.68, 3.5, 1.59, 2, 3) + MovementLoopAddLocation(NPC, 12.97, 3.62, -1.71, 2, 3) + MovementLoopAddLocation(NPC, 9.07, 3.5, -3.65, 2, 3) + MovementLoopAddLocation(NPC, 6.06, 3.5, -3.35, 2, 3) + MovementLoopAddLocation(NPC, 3.66, 3.5, -4.42, 2, 3) + MovementLoopAddLocation(NPC, 4.28, 3.5, -5.76, 2, 3) + MovementLoopAddLocation(NPC, 3.9, 3.5, -8.04, 2, 3) + MovementLoopAddLocation(NPC, 6.76, 3.5, -9.58, 2, 3) + MovementLoopAddLocation(NPC, 8.22, 3.5, -10.58, 2, 3) + MovementLoopAddLocation(NPC, 20.09, 5, -24.6, 2, 3) + MovementLoopAddLocation(NPC, 23.36, 5.25, -27.31, 2, 3) + MovementLoopAddLocation(NPC, 25.49, 5.25, -31.64, 2, 3) + MovementLoopAddLocation(NPC, 24.52, 5.25, -31.48, 2, 3) + MovementLoopAddLocation(NPC, 23.62, 5.25, -34.22, 2, 3) + MovementLoopAddLocation(NPC, 12.21, 4.75, -27.85, 2, 3) + MovementLoopAddLocation(NPC, 9.67, 4.93, -29.19, 2, 3) + MovementLoopAddLocation(NPC, 11.36, 9.07, -37.79, 2, 3) + MovementLoopAddLocation(NPC, 7.93, 8.48, -37.17, 2, 3) + MovementLoopAddLocation(NPC, 4.76, 5, -30.44, 2, 3) + MovementLoopAddLocation(NPC, -2.63, 5, -36.63, 2, 3) + MovementLoopAddLocation(NPC, 1.2, 5, -42.64, 2, 3) + MovementLoopAddLocation(NPC, 2.48, 5, -41.18, 2, 3) + MovementLoopAddLocation(NPC, 2.13, 5, -39.2, 2, 3) + MovementLoopAddLocation(NPC, 3.5, 5, -41.23, 2, 3) + MovementLoopAddLocation(NPC, 3.78, 5, -42.99, 2, 3) + MovementLoopAddLocation(NPC, -5.63, 4, -49.31, 2, 3) + MovementLoopAddLocation(NPC, -9.08, 4, -50.88, 2, 3) + MovementLoopAddLocation(NPC, -10.09, 4.14, -52.67, 2, 3) + MovementLoopAddLocation(NPC, -13.84, 4.35, -59.91, 2, 3) + MovementLoopAddLocation(NPC, -15.72, 4.18, -64.15, 2, 3) + MovementLoopAddLocation(NPC, -13.52, 4.18, -65.1, 2, 3) + MovementLoopAddLocation(NPC, -12.5, 4.18, -66.55, 2, 3) + MovementLoopAddLocation(NPC, -6.27, 4.18, -69.28, 2, 3) + MovementLoopAddLocation(NPC, -8.27, 4.18, -69.36, 2, 3) + MovementLoopAddLocation(NPC, -13.49, 4.18, -67.45, 2, 3) + MovementLoopAddLocation(NPC, -17.19, 4.18, -61.48, 2, 3) + MovementLoopAddLocation(NPC, -15.69, 4.18, -60.48, 2, 3) + MovementLoopAddLocation(NPC, -14.42, 4.45, -58.83, 2, 3) + MovementLoopAddLocation(NPC, -10.21, 4, -50.77, 2, 3) + MovementLoopAddLocation(NPC, -17.42, 4, -45.27, 2, 3) + MovementLoopAddLocation(NPC, -18.65, 4, -42.65, 2, 3) + MovementLoopAddLocation(NPC, -17.96, 4, -41.09, 2, 3) + MovementLoopAddLocation(NPC, -16.12, 4, -40.04, 2, 3) + MovementLoopAddLocation(NPC, -19.01, 4, -41.14, 2, 3) + MovementLoopAddLocation(NPC, -20.76, 4, -38.65, 2, 3) + MovementLoopAddLocation(NPC, -20.24, 3, -26.52, 2, 3) + MovementLoopAddLocation(NPC, -22.28, 2.75, -23.44, 2, 3) + MovementLoopAddLocation(NPC, -21.15, 2, -5.33, 2, 3) + MovementLoopAddLocation(NPC, -17.39, 2, -3.77, 2, 3) + MovementLoopAddLocation(NPC, -18.6, 2, 2.82, 2, 3) + MovementLoopAddLocation(NPC, -19.16, 1.93, 3.8, 2, 3) + MovementLoopAddLocation(NPC, -20.82, 1.86, 3.45, 2, 3) + MovementLoopAddLocation(NPC, -26.74, -0.75, 3.32, 2, 3) + MovementLoopAddLocation(NPC, -27.73, -0.75, 4, 2, 3) + MovementLoopAddLocation(NPC, -27.18, -0.75, 4.97, 2, 3) + MovementLoopAddLocation(NPC, -19.11, -4.9, 10.33, 2, 3) + MovementLoopAddLocation(NPC, -10.74, -6, 28.45, 2, 3) + MovementLoopAddLocation(NPC, -10.09, -6, 31.7, 2, 3) + MovementLoopAddLocation(NPC, -8.78, -6, 32.02, 2, 3) + MovementLoopAddLocation(NPC, -11.76, -7, 46.34, 2, 3) + MovementLoopAddLocation(NPC, -10.38, -7, 52.35, 2, 3) + MovementLoopAddLocation(NPC, -20.36, -7, 59.75, 2, 3) + MovementLoopAddLocation(NPC, -28.29, -7, 62.64, 2, 3) + MovementLoopAddLocation(NPC, -29.92, -7, 61.09, 2, 3) + MovementLoopAddLocation(NPC, -28, -7, 58.89, 2, 3) + MovementLoopAddLocation(NPC, -29.5, -7, 59.88, 2, 3) + MovementLoopAddLocation(NPC, -27.3, -7, 64.82, 2, 3) + MovementLoopAddLocation(NPC, -17.91, -7, 64.97, 2, 3) + MovementLoopAddLocation(NPC, -16.2, -7, 58.23, 2, 3) + MovementLoopAddLocation(NPC, -5.41, -7, 60.05, 2, 3) + MovementLoopAddLocation(NPC, -4.88, -7, 69.88, 2, 3) + MovementLoopAddLocation(NPC, -2.36, -7, 72.47, 2, 3) + MovementLoopAddLocation(NPC, -0.2, -7, 71.85, 2, 3) + MovementLoopAddLocation(NPC, 1.37, -7, 68.81, 2, 3) + MovementLoopAddLocation(NPC, 1.22, -7, 65.93, 2, 3) + MovementLoopAddLocation(NPC, 1.08, -7, 61.67, 2, 3) + MovementLoopAddLocation(NPC, 5.09, -7, 58.3, 2, 3) + MovementLoopAddLocation(NPC, 9.73, -0.07, 76.07, 2, 3) + MovementLoopAddLocation(NPC, 11.93, -0.12, 75.38, 2, 3) + MovementLoopAddLocation(NPC, 14.12, -0.8, 72.82, 2, 3) + MovementLoopAddLocation(NPC, 14.99, -2.13, 70.12, 2, 3) + MovementLoopAddLocation(NPC, 16.25, -2.88, 68.48, 2, 3) + MovementLoopAddLocation(NPC, 15.86, -4.25, 65.81, 2, 3) + MovementLoopAddLocation(NPC, 17.35, -6, 62.35, 2, 3) + MovementLoopAddLocation(NPC, 18.89, -7, 58.81, 2, 3) + MovementLoopAddLocation(NPC, 20.95, -7, 60.44, 2, 3) + MovementLoopAddLocation(NPC, 22.46, -7.07, 62.96, 2, 3) + MovementLoopAddLocation(NPC, 23.77, -7.18, 66.11, 2, 3) + MovementLoopAddLocation(NPC, 25.7, -7.24, 72.83, 2, 3) + MovementLoopAddLocation(NPC, 23.85, -7.18, 73.26, 2, 3) + MovementLoopAddLocation(NPC, 22.32, -7.06, 71.8, 2, 3) + MovementLoopAddLocation(NPC, 23.21, -7.13, 69.35, 2, 3) + MovementLoopAddLocation(NPC, 26.34, -7, 57.37, 2, 3) + MovementLoopAddLocation(NPC, 12.3, -6, 41.11, 2, 3) + MovementLoopAddLocation(NPC, 11.81, -6, 39.58, 2, 3) + MovementLoopAddLocation(NPC, 13.49, -6, 39.86, 2, 3) + MovementLoopAddLocation(NPC, 18.17, -5.95, 35.19, 2, 3) + MovementLoopAddLocation(NPC, 26.94, -6, 35.45, 2, 3) + MovementLoopAddLocation(NPC, 26.08, -6, 38.73, 2, 3) + MovementLoopAddLocation(NPC, 40.11, -5, 37.63, 2, 3) + MovementLoopAddLocation(NPC, 50.26, -5, 35.59, 2, 3) + MovementLoopAddLocation(NPC, 51.44, -5, 40.02, 2, 3) + MovementLoopAddLocation(NPC, 48.81, -5, 40.49, 2, 3) + MovementLoopAddLocation(NPC, 48.14, -5.25, 44.05, 2, 3) + MovementLoopAddLocation(NPC, 49.21, -6.75, 50.11, 2, 3) + MovementLoopAddLocation(NPC, 55.7, -7, 55.11, 2, 3) + MovementLoopAddLocation(NPC, 53.09, -7, 68.61, 2, 3) + MovementLoopAddLocation(NPC, 58.77, -7.05, 86.46, 2, 3) + MovementLoopAddLocation(NPC, 64.03, -7.08, 92.59, 2, 3) + MovementLoopAddLocation(NPC, 74.3, -7.08, 105.02, 2, 3) + MovementLoopAddLocation(NPC, 69.89, -7.08, 109.34, 2, 3) + MovementLoopAddLocation(NPC, 63.19, -7.08, 111.79, 2, 3) + MovementLoopAddLocation(NPC, 59.29, -7.08, 108.61, 2, 3) + MovementLoopAddLocation(NPC, 57.09, -7.08, 99.65, 2, 3) + MovementLoopAddLocation(NPC, 59.29, -7.08, 108.61, 2, 3) + MovementLoopAddLocation(NPC, 63.19, -7.08, 111.79, 2, 3) + MovementLoopAddLocation(NPC, 69.89, -7.08, 109.34, 2, 3) + MovementLoopAddLocation(NPC, 74.3, -7.08, 105.02, 2, 3) + MovementLoopAddLocation(NPC, 64.03, -7.08, 92.59, 2, 3) + MovementLoopAddLocation(NPC, 58.77, -7.05, 86.46, 2, 3) + MovementLoopAddLocation(NPC, 53.09, -7, 68.61, 2, 3) + MovementLoopAddLocation(NPC, 55.7, -7, 55.11, 2, 3) + MovementLoopAddLocation(NPC, 49.21, -6.75, 50.11, 2, 3) + MovementLoopAddLocation(NPC, 48.14, -5.25, 44.05, 2, 3) + MovementLoopAddLocation(NPC, 48.81, -5, 40.49, 2, 3) + MovementLoopAddLocation(NPC, 51.44, -5, 40.02, 2, 3) + MovementLoopAddLocation(NPC, 50.26, -5, 35.59, 2, 3) + MovementLoopAddLocation(NPC, 40.11, -5, 37.63, 2, 3) + MovementLoopAddLocation(NPC, 26.08, -6, 38.73, 2, 3) + MovementLoopAddLocation(NPC, 26.94, -6, 35.45, 2, 3) + MovementLoopAddLocation(NPC, 18.17, -5.95, 35.19, 2, 3) + MovementLoopAddLocation(NPC, 13.49, -6, 39.86, 2, 3) + MovementLoopAddLocation(NPC, 11.81, -6, 39.58, 2, 3) + MovementLoopAddLocation(NPC, 12.3, -6, 41.11, 2, 3) + MovementLoopAddLocation(NPC, 26.34, -7, 57.37, 2, 3) + MovementLoopAddLocation(NPC, 23.21, -7.13, 69.35, 2, 3) + MovementLoopAddLocation(NPC, 22.32, -7.06, 71.8, 2, 3) + MovementLoopAddLocation(NPC, 23.85, -7.18, 73.26, 2, 3) + MovementLoopAddLocation(NPC, 25.7, -7.24, 72.83, 2, 3) + MovementLoopAddLocation(NPC, 23.77, -7.18, 66.11, 2, 3) + MovementLoopAddLocation(NPC, 22.46, -7.07, 62.96, 2, 3) + MovementLoopAddLocation(NPC, 20.95, -7, 60.44, 2, 3) + MovementLoopAddLocation(NPC, 18.89, -7, 58.81, 2, 3) + MovementLoopAddLocation(NPC, 17.35, -6, 62.35, 2, 3) + MovementLoopAddLocation(NPC, 15.86, -4.25, 65.81, 2, 3) + MovementLoopAddLocation(NPC, 16.25, -2.88, 68.48, 2, 3) + MovementLoopAddLocation(NPC, 14.99, -2.13, 70.12, 2, 3) + MovementLoopAddLocation(NPC, 14.12, -0.8, 72.82, 2, 3) + MovementLoopAddLocation(NPC, 11.93, -0.12, 75.38, 2, 3) + MovementLoopAddLocation(NPC, 9.73, -0.07, 76.07, 2, 3) + MovementLoopAddLocation(NPC, 5.09, -7, 58.3, 2, 3) + MovementLoopAddLocation(NPC, 1.08, -7, 61.67, 2, 3) + MovementLoopAddLocation(NPC, 1.22, -7, 65.93, 2, 3) + MovementLoopAddLocation(NPC, 1.37, -7, 68.81, 2, 3) + MovementLoopAddLocation(NPC, -0.2, -7, 71.85, 2, 3) + MovementLoopAddLocation(NPC, -2.36, -7, 72.47, 2, 3) + MovementLoopAddLocation(NPC, -4.88, -7, 69.88, 2, 3) + MovementLoopAddLocation(NPC, -5.41, -7, 60.05, 2, 3) + MovementLoopAddLocation(NPC, -16.2, -7, 58.23, 2, 3) + MovementLoopAddLocation(NPC, -17.91, -7, 64.97, 2, 3) + MovementLoopAddLocation(NPC, -27.3, -7, 64.82, 2, 3) + MovementLoopAddLocation(NPC, -29.5, -7, 59.88, 2, 3) + MovementLoopAddLocation(NPC, -28, -7, 58.89, 2, 3) + MovementLoopAddLocation(NPC, -29.92, -7, 61.09, 2, 3) + MovementLoopAddLocation(NPC, -28.29, -7, 62.64, 2, 3) + MovementLoopAddLocation(NPC, -20.36, -7, 59.75, 2, 3) + MovementLoopAddLocation(NPC, -10.38, -7, 52.35, 2, 3) + MovementLoopAddLocation(NPC, -11.76, -7, 46.34, 2, 3) + MovementLoopAddLocation(NPC, -8.78, -6, 32.02, 2, 3) + MovementLoopAddLocation(NPC, -10.09, -6, 31.7, 2, 3) + MovementLoopAddLocation(NPC, -10.74, -6, 28.45, 2, 3) + MovementLoopAddLocation(NPC, -19.11, -4.9, 10.33, 2, 3) + MovementLoopAddLocation(NPC, -27.18, -0.75, 4.97, 2, 3) + MovementLoopAddLocation(NPC, -27.73, -0.75, 4, 2, 3) + MovementLoopAddLocation(NPC, -26.74, -0.75, 3.32, 2, 3) + MovementLoopAddLocation(NPC, -20.82, 1.86, 3.45, 2, 3) + MovementLoopAddLocation(NPC, -19.16, 1.93, 3.8, 2, 3) + MovementLoopAddLocation(NPC, -18.6, 2, 2.82, 2, 3) + MovementLoopAddLocation(NPC, -17.39, 2, -3.77, 2, 3) + MovementLoopAddLocation(NPC, -21.15, 2, -5.33, 2, 3) + MovementLoopAddLocation(NPC, -22.28, 2.75, -23.44, 2, 3) + MovementLoopAddLocation(NPC, -20.24, 3, -26.52, 2, 3) + MovementLoopAddLocation(NPC, -20.76, 4, -38.65, 2, 3) + MovementLoopAddLocation(NPC, -19.01, 4, -41.14, 2, 3) + MovementLoopAddLocation(NPC, -16.12, 4, -40.04, 2, 3) + MovementLoopAddLocation(NPC, -17.96, 4, -41.09, 2, 3) + MovementLoopAddLocation(NPC, -18.65, 4, -42.65, 2, 3) + MovementLoopAddLocation(NPC, -17.42, 4, -45.27, 2, 3) + MovementLoopAddLocation(NPC, -10.21, 4, -50.77, 2, 3) + MovementLoopAddLocation(NPC, -14.42, 4.45, -58.83, 2, 3) + MovementLoopAddLocation(NPC, -15.69, 4.18, -60.48, 2, 3) + MovementLoopAddLocation(NPC, -17.19, 4.18, -61.48, 2, 3) + MovementLoopAddLocation(NPC, -13.49, 4.18, -67.45, 2, 3) + MovementLoopAddLocation(NPC, -8.27, 4.18, -69.36, 2, 3) + MovementLoopAddLocation(NPC, -6.27, 4.18, -69.28, 2, 3) + MovementLoopAddLocation(NPC, -12.5, 4.18, -66.55, 2, 3) + MovementLoopAddLocation(NPC, -13.52, 4.18, -65.1, 2, 3) + MovementLoopAddLocation(NPC, -15.72, 4.18, -64.15, 2, 3) + MovementLoopAddLocation(NPC, -13.84, 4.35, -59.91, 2, 3) + MovementLoopAddLocation(NPC, -10.09, 4.14, -52.67, 2, 3) + MovementLoopAddLocation(NPC, -9.08, 4, -50.88, 2, 3) + MovementLoopAddLocation(NPC, -5.63, 4, -49.31, 2, 3) + MovementLoopAddLocation(NPC, 3.78, 5, -42.99, 2, 3) + MovementLoopAddLocation(NPC, 3.5, 5, -41.23, 2, 3) + MovementLoopAddLocation(NPC, 2.13, 5, -39.2, 2, 3) + MovementLoopAddLocation(NPC, 2.48, 5, -41.18, 2, 3) + MovementLoopAddLocation(NPC, 1.2, 5, -42.64, 2, 3) + MovementLoopAddLocation(NPC, -2.63, 5, -36.63, 2, 3) + MovementLoopAddLocation(NPC, 4.76, 5, -30.44, 2, 3) + MovementLoopAddLocation(NPC, 7.93, 8.48, -37.17, 2, 3) + MovementLoopAddLocation(NPC, 11.36, 9.07, -37.79, 2, 3) + MovementLoopAddLocation(NPC, 9.67, 4.93, -29.19, 2, 3) + MovementLoopAddLocation(NPC, 12.21, 4.75, -27.85, 2, 3) + MovementLoopAddLocation(NPC, 23.62, 5.25, -34.22, 2, 3) + MovementLoopAddLocation(NPC, 24.52, 5.25, -31.48, 2, 3) + MovementLoopAddLocation(NPC, 25.49, 5.25, -31.64, 2, 3) + MovementLoopAddLocation(NPC, 23.36, 5.25, -27.31, 2, 3) + MovementLoopAddLocation(NPC, 20.09, 5, -24.6, 2, 3) + MovementLoopAddLocation(NPC, 8.22, 3.5, -10.58, 2, 3) + MovementLoopAddLocation(NPC, 6.76, 3.5, -9.58, 2, 3) + MovementLoopAddLocation(NPC, 3.9, 3.5, -8.04, 2, 3) + MovementLoopAddLocation(NPC, 4.28, 3.5, -5.76, 2, 3) + MovementLoopAddLocation(NPC, 3.66, 3.5, -4.42, 2, 3) + MovementLoopAddLocation(NPC, 6.06, 3.5, -3.35, 2, 3) + MovementLoopAddLocation(NPC, 9.07, 3.5, -3.65, 2, 3) + MovementLoopAddLocation(NPC, 12.97, 3.62, -1.71, 2, 3) + MovementLoopAddLocation(NPC, 12.68, 3.5, 1.59, 2, 3) + MovementLoopAddLocation(NPC, 19.53, 2, 18.84, 2, 3) + MovementLoopAddLocation(NPC, 21.6, 2, 18.49, 2, 3) + MovementLoopAddLocation(NPC, 21.76, 2, 17.66, 2, 3) + MovementLoopAddLocation(NPC, 29.14, 2, 16.16, 2, 3) + MovementLoopAddLocation(NPC, 44.46, 3.5, -1.09, 2, 3) + MovementLoopAddLocation(NPC, 54.85, 4.23, -6.04, 2, 3) + MovementLoopAddLocation(NPC, 58.69, 5, -22.28, 2, 3) + MovementLoopAddLocation(NPC, 58.4, 5, -23.09, 2, 3) + MovementLoopAddLocation(NPC, 57.85, 5, -22.87, 2, 3) + MovementLoopAddLocation(NPC, 51.19, 5, -23.3, 2, 3) + MovementLoopAddLocation(NPC, 45.32, 5.25, -18.9, 2, 3) + MovementLoopAddLocation(NPC, 39.12, 5.25, -20.88, 2, 3) + MovementLoopAddLocation(NPC, 31.89, 5.25, -13.94, 2, 3) +end + + diff --git a/server/SpawnScripts/BeggarsCourt/RommulsShipment.lua b/server/SpawnScripts/BeggarsCourt/RommulsShipment.lua new file mode 100644 index 000000000..6834d0acc --- /dev/null +++ b/server/SpawnScripts/BeggarsCourt/RommulsShipment.lua @@ -0,0 +1,61 @@ +--[[ + Script Name : + Script Purpose : + Script Author : + Script Date : + Script Notes : +--]] + +local HALFELF_MENTOR_QUEST_3 = 315 -- Reel Him In + + +function spawn(NPC) + --SetRequiredQuest(NPC, HALFELF_MENTOR_QUEST_3, 3) + BlownUpBarrel = GetSpawn(NPC, 1370125) + Despawn(BlownUpBarrel) +end + +function hailed(NPC, Spawn) +end + +function respawn(NPC) + spawn(NPC) +end + +function casted_on(Target, Caster) + if HasQuest(Caster, HALFELF_MENTOR_QUEST_3) and GetQuestStep(Caster, HALFELF_MENTOR_QUEST_3) == 3 then + SendMessage(Caster, "You place the explosives.") + local barrel1 = GetSpawnByLocationID(GetZone(Caster), 467614) + local barrel2 = GetSpawnByLocationID(GetZone(Caster), 1585458) + local barrel3 = GetSpawnByLocationID(GetZone(Caster), 1585459) + if barrel1 ~= nil then + Despawn(barrel1) + end + + if barrel2 ~= nil then + Despawn(barrel2) + end + + if barrel3 ~= nil then + Despawn(barrel3) + end + + SetStepComplete(Caster, HALFELF_MENTOR_QUEST_3, 3) + + -- Spawn the blown up barrels + SpawnMob(GetZone(Caster), 1370125, false, -19.714, 3.0022, -25.172) + SpawnMob(GetZone(Caster), 1370125, false, -18.3729, 3.00219, -25.7906) + SpawnMob(GetZone(Caster), 1370125, false, -18.1974, 3.0020, -24.3421) + + -- Spawn Adjunct-Captain Rommuls + SpawnMob(GetZone(Caster), 1370065, false, -10.97, 4.13, -53.93) + + -- Spawn 3 Brotherhood enforcers + SpawnByLocationID(GetZone(Caster), 403031) + SpawnByLocationID(GetZone(Caster), 403032) + SpawnByLocationID(GetZone(Caster), 403033) + --SpawnMob(GetZone(Caster), 1370064, false, -13.58, 4.37, -58.36) + --SpawnMob(GetZone(Caster), 1370064, false, -17.60, 2.00, 0.77) + --SpawnMob(GetZone(Caster), 1370064, false, 7.93, 9.12, -39.78) + end +end \ No newline at end of file diff --git a/server/SpawnScripts/BeggarsCourt/ThaenSevellos.lua b/server/SpawnScripts/BeggarsCourt/ThaenSevellos.lua new file mode 100644 index 000000000..041b1fd9a --- /dev/null +++ b/server/SpawnScripts/BeggarsCourt/ThaenSevellos.lua @@ -0,0 +1,29 @@ +--[[ + Script Name : SpawnScripts/BeggarsCourt/ThaenSevellos.lua + Script Purpose : Thaen Sevellos + Script Author : John Adams (updated by Cynnar 2018.06.14 11:06:08) + Script Date : 2009.04.10 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +local HALFELF_MENTOR_QUEST_4 = 317 -- Thaen Sevellos + +function spawn(NPC) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + + if HasQuest(Spawn, HALFELF_MENTOR_QUEST_4) then + if GetQuestStep(Spawn, HALFELF_MENTOR_QUEST_4) == 1 then + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/thaen_sevellos/fprt_hood04/qst_thaen_onquestfree_b253d1ee.mp3", "I never did get to tell Jalya how I felt... Please... go. I am safe, thank you... but please go.", "", 2501604791, 291772649, Spawn) + elseif GetQuestStep(Spawn, HALFELF_MENTOR_QUEST_4) == 2 then + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/thaen_sevellos/fprt_hood04/qst_thaen_free_d04696a6.mp3", "I can leave now, but Jalya's fate has already been determined.", "", 3783338515, 2630298839, Spawn) + end + end +end + diff --git a/server/SpawnScripts/BeggarsCourt/ThavianDestrus.lua b/server/SpawnScripts/BeggarsCourt/ThavianDestrus.lua new file mode 100644 index 000000000..5d6c2a9b2 --- /dev/null +++ b/server/SpawnScripts/BeggarsCourt/ThavianDestrus.lua @@ -0,0 +1,177 @@ +--[[ + Script Name : SpawnScripts/BeggarsCourt/ThavianDestrus.lua + Script Purpose : Thavian Destrus + Script Author : Scatman (updated by Cynnar 2018.06.13 02:06:21) + Script Date : 2009.04.05 + Script Notes : +--]] + +local HALF_ELF = 6 +local HALFELF_MENTOR_QUEST_1= 307 + +function spawn(NPC) + ProvidesQuest(NPC, HALFELF_MENTOR_QUEST_1) +end + +function respawn(NPC) + spawn(NPC) +end + + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + if HasCompletedQuest(Spawn, HALFELF_MENTOR_QUEST_1) then + Say(NPC, "The Brotherhood awaits.", Spawn) + elseif HasQuest(Spawn, HALFELF_MENTOR_QUEST_1) then + Say(NPC, "The Brotherhood awaits.", Spawn) + else + if GetRace(Spawn) == HALF_ELF then + WhyDoYouComeHere(NPC, Spawn, conversation) + else + --PlayFlavor(NPC, "voiceover/english/tutorial_revamp/thavian_destrus/fprt_hood04/qst_thavian_nothalfelf_ccca9558.mp3", "I am not charged with helping you, and so I will not. Good day.", "", 3519862132, 3162907457, Spawn) + end + end +end + +----------------------------------------------------------------------------------------------------------------- +-- A Delivery +----------------------------------------------------------------------------------------------------------------- + +function WhyDoYouComeHere(NPC, Spawn, conversation) + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/thavian_destrus/fprt_hood04/quests/thavian/thavian000.mp3", "", "", 2783991640, 3181833189, Spawn) + AddConversationOption(conversation, "What do you mean?", "dlg_1_1") + StartConversation(conversation, NPC, Spawn, "Why do you come here, Ayr'Dal?") +end + +function dlg_1_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/thavian_destrus/fprt_hood04/quests/thavian/thavian001.mp3", "", "", 3101830372, 2951993261, Spawn) + AddConversationOption(conversation, "I am part high elf.", "dlg_3_2") + AddConversationOption(conversation, "I am part wood elf.", "dlg_2_2") + AddConversationOption(conversation, "I am part dark elf.", "dlg_1_2") + AddConversationOption(conversation, "I have never known.", "MaybeBetter") + StartConversation(conversation, NPC, Spawn, "It is not a hard question, but it is an important one. Look around you, care to notice a certain lack of, shall we say, aesthetics? What is your heritage, from what elves do you come?") +end + +function MaybeBetter(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/thavian_destrus/fprt_hood04/quests/thavian/thavian005.mp3", "", "", 3937144188, 532707745, Spawn) + AddConversationOption(conversation, "Why do you say that?", "dlg_5_4") + StartConversation(conversation, NPC, Spawn, "Maybe it's better that way. It will keep people on their toes. The more people think they don't know about you the more powerful you become in their mind. Use this to its full advantage. In these times you need every advantage you can get.") +end + +function dlg_1_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/thavian_destrus/fprt_hood04/quests/thavian/thavian004.mp3", "", "", 1381606320, 1550291575, Spawn) + AddConversationOption(conversation, "Yes.", "dlg_3_3") + AddConversationOption(conversation, "No.", "WhatIMeanIs") + StartConversation(conversation, NPC, Spawn, "Heh, I believe it. That will make things harder for you, unfortunately. People will expect more from you than they would a half breed from a lesser elf. But it's hard, being part human and all, to live up to their expectations. You'll make it all right, but you need to use both sides of your heritage to their full advantage. You're not as strong as a human or an elf, but you're not nearly as weak, either. Understand?") +end + +function dlg_2_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/thavian_destrus/fprt_hood04/quests/thavian/thavian003.mp3", "", "", 1928672703, 433177199, Spawn) + AddConversationOption(conversation, "Yes.", "dlg_3_3") + AddConversationOption(conversation, "No.", "WhatIMeanIs") + StartConversation(conversation, NPC, Spawn, "I pity you, then. One important thing you need to learn about Freeport is that nobody cares for the concerns of a tree-happy elf. Your elven blood gives you a lithe stride, but let only your enemies appreciate that. You must rely on your human nature to survive here, otherwise you'll just be another lost elf with nowhere to call home. Understand?") +end + +function WhatIMeanIs(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "The brotherhood?", "dlg_5_5") + StartConversation(conversation, NPC, Spawn, "What I mean is, don't limit yourself. Cultures differ even within species. Don't try to fit in where you don't belong and will never be welcomed. Instead, be welcomed into the fold of The Brotherhood. We are an advantage few Ayr'Dal--none of those within Qeynos--have. It is a useful tool indeed.") +end + +function dlg_3_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/thavian_destrus/fprt_hood04/quests/thavian/thavian002.mp3", "", "", 119866088, 1685337170, Spawn) + AddConversationOption(conversation, "Yes.", "dlg_3_3") + AddConversationOption(conversation, "No.", "WhatIMeanIs") + StartConversation(conversation, NPC, Spawn, "Look around, feigned Koada, see any others like you? No, no you don't. Take that to heart. You get by here using your human nature. Your elven abilities come in handy, but try not to broadcast them. Nobody cares if you think something is pretty, or cute. Understand?") +end + +function dlg_3_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/thavian_destrus/fprt_hood04/quests/thavian/thavian007.mp3", "", "", 3875610028, 3096383378, Spawn) + AddConversationOption(conversation, "Why do you say that?", "dlg_5_4") + StartConversation(conversation, NPC, Spawn, "Good. Understanding is a key advantage, and in these times we need all the advantages we can get.") +end + +function dlg_5_4(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/thavian_destrus/fprt_hood04/quests/thavian/thavian008.mp3", "", "", 753788028, 2113721405, Spawn) + AddConversationOption(conversation, "The Brotherhood?", "dlg_5_5") + StartConversation(conversation, NPC, Spawn, "Look around you. Things are bad everywhere, and getting worse. For the Ayr'Dal of Beggar's Court it has recently become a struggle to survive in day-to-day affairs. And, so, The Brotherhood was formed.") +end + +function dlg_5_5(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/thavian_destrus/fprt_hood04/quests/thavian/thavian009.mp3", "", "", 1489419097, 2704508898, Spawn) + AddConversationOption(conversation, "Against the militia?", "dlg_5_6") + StartConversation(conversation, NPC, Spawn, "The Ayr'Dal Brotherhood. In the past we would not have been necessary. But, as of late, we are unfortunately needed. By his own machinations Captain Lusarius Rommuls was transferred to this district. He now serves as Adjunct-Captain of Beggar's Court. Rommuls hates us, Vlaru. And he is doing everything in his power to rid Freeport of our kind. We have no wish to leave, naturally, so we will fight back.") +end + +function dlg_5_6(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/thavian_destrus/fprt_hood04/quests/thavian/thavian010.mp3", "", "", 1491391518, 212658016, Spawn) + AddConversationOption(conversation, "Yes.", "dlg_5_7") + AddConversationOption(conversation, "No, I cannot.") + StartConversation(conversation, NPC, Spawn, "No, against Rommuls. Most do not agree with him, but are too afraid to openly oppose him. We are not afraid. Will you help us?") +end + +function dlg_5_7(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/thavian_destrus/fprt_hood04/quests/thavian/thavian011.mp3", "", "", 3880227790, 3152826653, Spawn) + AddConversationOption(conversation, "I would like to help here.", "dlg_5_9") + AddConversationOption(conversation, "I would like to help elsewhere.", "dlg_5_8") + StartConversation(conversation, NPC, Spawn, "Good. You can help here, or elsewhere if you wish. It just depends on how much you're willing to risk.") +end + +function dlg_5_8(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/thavian_destrus/fprt_hood04/quests/thavian/thavian012.mp3", "", "", 4017582198, 2037655220, Spawn) + AddConversationOption(conversation, "All right, thank you.") + AddConversationOption(conversation, "I changed my mind, I would like to help out here.", "dlg_5_9") + StartConversation(conversation, NPC, Spawn, "All right. Travel to the Sunken City. Speak with Inquisitor Thorson there, his tasks are not those of The Brotherhood, but they serve our needs. Speak not to him of The Brotherhood.") +end + +function dlg_5_9(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/thavian_destrus/fprt_hood04/quests/thavian/thavian013.mp3", "", "", 2160728632, 1584767054, Spawn) + AddConversationOption(conversation, "All right.", "OfferQuest1") + AddConversationOption(conversation, "No.") + StartConversation(conversation, NPC, Spawn, "All right. You can start by delivering a message to the Lieutenant of the Ayr'Dal Brotherhood for me. What do you say? You'll find him on the western end of the northern portion of Beggar's Court. He'll be in a second level room. When you speak to him, tell him The Brotherhood Awaits, he will recognize you.") +end + +function OfferQuest1(NPC, Spawn) + FaceTarget(NPC, Spawn) + OfferQuest(NPC, Spawn, HALFELF_MENTOR_QUEST_1) +end \ No newline at end of file diff --git a/server/SpawnScripts/BeggarsCourt/aBrotherhoodcache.lua b/server/SpawnScripts/BeggarsCourt/aBrotherhoodcache.lua new file mode 100644 index 000000000..42783a22a --- /dev/null +++ b/server/SpawnScripts/BeggarsCourt/aBrotherhoodcache.lua @@ -0,0 +1,22 @@ +--[[ + Script Name : SpawnScripts/BeggarsCourt/aBrotherhoodcache.lua + Script Author : Cynnar + Script Date : 2018.06.22 06:06:40 + Script Purpose : + : +--]] + +local HALFELF_MENTOR_QUEST_3 = 315 -- Reel Him In + +function spawn(NPC) + SetRequiredQuest(NPC, HALFELF_MENTOR_QUEST_3, 1) +end + +function hailed(NPC, Spawn) +end + +function respawn(NPC) + spawn(NPC) +end + + diff --git a/server/SpawnScripts/BeggarsCourt/aBrotherhoodenforcer.lua b/server/SpawnScripts/BeggarsCourt/aBrotherhoodenforcer.lua new file mode 100644 index 000000000..0374ed486 --- /dev/null +++ b/server/SpawnScripts/BeggarsCourt/aBrotherhoodenforcer.lua @@ -0,0 +1,66 @@ +--[[ + Script Name : SpawnScripts/BeggarsCourt/aBrotherhoodenforcer.lua + Script Purpose : a Brotherhood enforcer + Script Author : John Adams (rewritten by Cynnar) + Script Date : 2009.04.07 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +local ADJUNCT_CAPTAIN_ROMMULS = 1370065 + +function spawn(NPC) + if GetSpawnLocationID(NPC) == 403031 then + MoveToLocation(NPC, -14.62, 2.25, -6.99, 3, "", true) + MoveToLocation(NPC, -17.68, 3.00, -21.58, 3, "", false) + end + if GetSpawnLocationID(NPC) == 403032 then + MoveToLocation(NPC, -7.44, 4.00, -46.95, 3, "", true) + MoveToLocation(NPC, -15.15, 3.75, -31.27, 3, "checkspawn", false) + end + if GetSpawnLocationID(NPC) == 403033 then + MoveToLocation(NPC, 4.64, 4.75, -27.67, 3, "", true) + MoveToLocation(NPC, -12.87, 3.26, -25.76, 3, "", false) + end +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) +end + +function E_Talk1(NPC) + PlayFlavor(NPC, "", "Be quiet, don't struggle, and come with us, Rommuls.", "", 1689589577, 4560189, Spawn) + local Rommuls = GetSpawn(NPC, ADJUNCT_CAPTAIN_ROMMULS) + + if Rommuls ~= nil then + AddTimer(Rommuls , 1998, "Talk2") + end +end + +function checkspawn(NPC, Spawn) + local Rommuls = GetSpawn(NPC, ADJUNCT_CAPTAIN_ROMMULS) + + if Rommuls ~= nil then + AddTimer(Rommuls , 30, "Talk1") + end +end + +function move_enforcer1(NPC) + --MoveToLocation(NPC, -8.13, 4.00, -42.68, 3, "Despawn_All", false) was in old spawn script + MoveToLocation(NPC, -24.59, 2.00, -7.14, 3, "Despawn_All", false) +end + +function move_enforcer2(NPC) + MoveToLocation(NPC, -24.59, 2.00, -7.14, 3, "Despawn_All", false) +end + +function move_enforcer3(NPC) + MoveToLocation(NPC, -24.59, 2.00, -7.14, 3, "Despawn_All", false) +end + +function Despawn_All(NPC) + Despawn(NPC) +end \ No newline at end of file diff --git a/server/SpawnScripts/BeggarsCourt/aBrotherhoodenforcer1.lua b/server/SpawnScripts/BeggarsCourt/aBrotherhoodenforcer1.lua new file mode 100644 index 000000000..97e9426a2 --- /dev/null +++ b/server/SpawnScripts/BeggarsCourt/aBrotherhoodenforcer1.lua @@ -0,0 +1,23 @@ +--[[ + Script Name : + Script Purpose : + Script Author : + Script Date : + Script Notes : +--]] + +function spawn(NPC) + MovementLoopAddLocation(NPC, -14.62, 2.25, -6.99, 3, 0) + MovementLoopAddLocation(NPC, -17.68, 3.00, -21.58, 3, 10) + MovementLoopAddLocation(NPC, -24.59, 2.00, -7.14, 3, 10, "DespawnBE1") +end + +function hailed(NPC, Spawn) +end + +function respawn(NPC) +end + +function DespawnBE1(NPC) + Despawn(NPC) +end \ No newline at end of file diff --git a/server/SpawnScripts/BeggarsCourt/aBrotherhoodenforcer2.lua b/server/SpawnScripts/BeggarsCourt/aBrotherhoodenforcer2.lua new file mode 100644 index 000000000..95fdba458 --- /dev/null +++ b/server/SpawnScripts/BeggarsCourt/aBrotherhoodenforcer2.lua @@ -0,0 +1,29 @@ +--[[ + Script Name : + Script Purpose : + Script Author : + Script Date : + Script Notes : +--]] + +function spawn(NPC) + MovementLoopAddLocation(NPC, -7.44, 4.00, -46.95, 3, 0) + MovementLoopAddLocation(NPC, -15.15, 3.75, -31.27, 3, 6) + MovementLoopAddLocation(NPC, -24.59, 2.00, -7.14, 3, 10, "DespawnBE2") + AddTimer(NPC, 18000, "ComeWithUs") +end + +function hailed(NPC, Spawn) +end + +function respawn(NPC) +end + +function DespawnBE2(NPC) + Despawn(NPC) +end + +function ComeWithUs(NPC) + PlayFlavor(NPC, "", "Be quiet, don't struggle, and come with us, Rommuls.", "", 1689589577, 4560189, Spawn) +end + diff --git a/server/SpawnScripts/BeggarsCourt/aBrotherhoodenforcer3.lua b/server/SpawnScripts/BeggarsCourt/aBrotherhoodenforcer3.lua new file mode 100644 index 000000000..5e7576b73 --- /dev/null +++ b/server/SpawnScripts/BeggarsCourt/aBrotherhoodenforcer3.lua @@ -0,0 +1,25 @@ +--[[ + Script Name : + Script Purpose : + Script Author : + Script Date : + Script Notes : +--]] + +function spawn(NPC) + MovementLoopAddLocation(NPC, 4.64, 4.75, -27.67, 3, 0) + MovementLoopAddLocation(NPC, -12.87, 3.26, -25.76, 3, 6) + MovementLoopAddLocation(NPC, -24.59, 2.00, -7.14, 3, 10, "DespawnBE3") +end + +function hailed(NPC, Spawn) +end + +function respawn(NPC) +end + + +function DespawnBE3(NPC) + Despawn(NPC) +end + diff --git a/server/SpawnScripts/BeggarsCourt/aRommulsloyalist.lua b/server/SpawnScripts/BeggarsCourt/aRommulsloyalist.lua new file mode 100644 index 000000000..851c6aa9e --- /dev/null +++ b/server/SpawnScripts/BeggarsCourt/aRommulsloyalist.lua @@ -0,0 +1,75 @@ +--[[ + Script Name : SpawnScripts/BeggarsCourt/aRommulsloyalist.lua + Script Purpose : a Rommuls loyalist + Script Author : John Adams (Updated by Cynnar 2018.06.22 09:06:28) + Script Date : 2009.04.10 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +local HALFELF_MENTOR_QUEST_4 = 317 -- Thaen Sevellos + +function spawn(NPC) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + if HasQuest(Spawn, HALFELF_MENTOR_QUEST_4) and GetQuestStep(Spawn, HALFELF_MENTOR_QUEST_4) == 1 then + conversation = CreateConversation() + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/a_rommuls_loyalist/fprt_hood04/quests/captor/thug000.mp3", "", "", 1922921489, 2760341303, Spawn) + AddConversationOption(conversation, "I know what I'm doing; release your prisoner.", "dlg_27_1") + AddConversationOption(conversation, "Fine, I'll leave.") + StartConversation(conversation, NPC, Spawn, "Watch where you point your nose, pal, you don't want to lose it.") + end +end + +function dlg_27_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/a_rommuls_loyalist/fprt_hood04/quests/captor/thug001.mp3", "", "", 835606330, 2405395928, Spawn) + AddConversationOption(conversation, "Your prisoner is of the Ayr'Dal Brotherhood. You hold him yet he has committed no crime.", "dlg_27_2") + StartConversation(conversation, NPC, Spawn, "Hah, not a chance!") +end + +function dlg_27_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/a_rommuls_loyalist/fprt_hood04/quests/captor/thug002.mp3", "", "", 3750086716, 2767526036, Spawn) + AddConversationOption(conversation, "I am not afraid of using force.", "dlg_27_3") + StartConversation(conversation, NPC, Spawn, "Oooh, so you're one of them, huh? Well guess what, I ain't moving.") +end + +function dlg_27_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/a_rommuls_loyalist/fprt_hood04/quests/captor/thug003.mp3", "", "", 1311881842, 4106998175, Spawn) + AddConversationOption(conversation, "Very well. [fight]", "MakeAttackablePlease") + StartConversation(conversation, NPC, Spawn, "Make your move.") +end + +function MakeAttackablePlease(NPC, Spawn) + --Rom2 = GetSpawn(Spawn, 1370157) + local zone = GetZone(NPC) + local Rom2 = GetSpawnByLocationID(zone, 403037) + SpawnSet(NPC, "show_level", 1) + SpawnSet(Rom2, "show_level", 1) + AddHate(Spawn, NPC, 100) + AddHate(Spawn, Rom2, 100) +end + +function death(NPC, Spawn) + --Rom2 = GetSpawn(Spawn, 1370157) + local zone = GetZone(NPC) + local Rom2 = GetSpawnByLocationID(zone, 403037) + if Rom2 == nil or not IsAlive(Rom2) then + SetStepComplete(Spawn, HALFELF_MENTOR_QUEST_4, 1) + local Thaen = GetSpawn(Spawn, 1370066) + Despawn(Thaen, 30000) + end +end \ No newline at end of file diff --git a/server/SpawnScripts/BeggarsCourt/aRommulsloyalistNoTalk.lua b/server/SpawnScripts/BeggarsCourt/aRommulsloyalistNoTalk.lua new file mode 100644 index 000000000..7ec26359b --- /dev/null +++ b/server/SpawnScripts/BeggarsCourt/aRommulsloyalistNoTalk.lua @@ -0,0 +1,34 @@ +--[[ + Script Name : SpawnScripts/BeggarsCourt/aRommulsloyalistNoTalk.lua + Script Purpose : a Rommuls loyalist + Script Author : (Updated by Cynnar 2018.06.22 09:06:43) + Script Date : + Script Notes : +--]] + +local HALFELF_MENTOR_QUEST_4 = 317 -- Thaen Sevellos + +function spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + + choice = math.random(1, 2) + if choice == 1 then + PlayFlavor(NPC, "", "Uh, maybe you shouldn't talk to me. I'm new at this.", "", 1689589577, 4560189, Spawn) + elseif choice == 2 then + PlayFlavor(NPC, "", "Alright, this is why I joined the militia!", "", 1689589577, 4560189, Spawn) + end +end + +function death(NPC, Spawn) + --Rom1 = GetSpawn(Spawn, 1370157) + local zone = GetZone(NPC) + local Rom1 = GetSpawnByLocationID(zone, 403036) + if Rom1 == nil or not IsAlive(Rom1) then + SetStepComplete(Spawn, HALFELF_MENTOR_QUEST_4, 1) + local Thaen = GetSpawn(Spawn, 1370066) + Despawn(Thaen, 30000) + end +end \ No newline at end of file diff --git a/server/SpawnScripts/BeggarsCourt/a_rat_a.lua b/server/SpawnScripts/BeggarsCourt/a_rat_a.lua new file mode 100644 index 000000000..8ccb6a495 --- /dev/null +++ b/server/SpawnScripts/BeggarsCourt/a_rat_a.lua @@ -0,0 +1,281 @@ +--[[ + Script Name : SpawnScripts/BeggarsCourt/a_rat_a.lua + Script Purpose : Waypoint Path for arat_a.lua + Script Author : Cynnar + Script Date : 7/8/2018 08:07:43 AM + Script Notes : +--]] + +function spawn(NPC) + waypoints(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) +end + +function respawn(NPC) + spawn(NPC) +end + +function waypoints(NPC) + MovementLoopAddLocation(NPC, 24.95, 5.25, -13.04, 2, 0) + MovementLoopAddLocation(NPC, 29.51, 4.49, -4.96, 2, 5, 0) + local route = math.random(1,4) + if route == 1 then + RouteOne(NPC) + elseif route == 2 then + RouteTwo(NPC) + elseif route == 3 then + RouteThree(NPC) + elseif route == 4 then + RouteFour(NPC) + end + MovementLoopAddLocation(NPC, 34.27, 3.5, 3.44, 2, 0) + MovementLoopAddLocation(NPC, 37.97, 2.18, 9.85, 2, 5, 0) + local route = math.random(1,4) + if route == 1 then + RouteOne(NPC) + elseif route == 2 then + RouteTwo(NPC) + elseif route == 3 then + RouteThree(NPC) + elseif route == 4 then + RouteFour(NPC) + end + MovementLoopAddLocation(NPC, 37.97, 2.18, 9.85, 2, 0) + MovementLoopAddLocation(NPC, 48.17, 3, 1.59, 2, 5, 0) + local route = math.random(1,4) + if route == 1 then + RouteOne(NPC) + elseif route == 2 then + RouteTwo(NPC) + elseif route == 3 then + RouteThree(NPC) + elseif route == 4 then + RouteFour(NPC) + end + MovementLoopAddLocation(NPC, 51.3, 4.75, -11.23, 2, 5, 0) + local route = math.random(1,4) + if route == 1 then + RouteOne(NPC) + elseif route == 2 then + RouteTwo(NPC) + elseif route == 3 then + RouteThree(NPC) + elseif route == 4 then + RouteFour(NPC) + end + MovementLoopAddLocation(NPC, 45.74, 5.25, -15.61, 2, 0) + MovementLoopAddLocation(NPC, 41.37, 5.25, -16.54, 2, 0) + MovementLoopAddLocation(NPC, 37.65, 5.25, -15.89, 2, 0) + MovementLoopAddLocation(NPC, 34.17, 5.25, -12.55, 2, 0) + MovementLoopAddLocation(NPC, 28.42, 5.25, -9.08, 2, 0) + MovementLoopAddLocation(NPC, 17.41, 3.5, -6.64, 2, 5, 0) + local route = math.random(1,4) + if route == 1 then + RouteOne(NPC) + elseif route == 2 then + RouteTwo(NPC) + elseif route == 3 then + RouteThree(NPC) + elseif route == 4 then + RouteFour(NPC) + end + MovementLoopAddLocation(NPC, 12.45, 3.88, -14.56, 2, 5, 0) + local route = math.random(1,4) + if route == 1 then + RouteOne(NPC) + elseif route == 2 then + RouteTwo(NPC) + elseif route == 3 then + RouteThree(NPC) + elseif route == 4 then + RouteFour(NPC) + end + MovementLoopAddLocation(NPC, 16.36, 4.75, -23.02, 2, 5, 0) + local route = math.random(1,4) + if route == 1 then + RouteOne(NPC) + elseif route == 2 then + RouteTwo(NPC) + elseif route == 3 then + RouteThree(NPC) + elseif route == 4 then + RouteFour(NPC) + end + MovementLoopAddLocation(NPC, 3.95, 4.25, -23.47, 2, 5, 0) + local route = math.random(1,4) + if route == 1 then + RouteOne(NPC) + elseif route == 2 then + RouteTwo(NPC) + elseif route == 3 then + RouteThree(NPC) + elseif route == 4 then + RouteFour(NPC) + end + MovementLoopAddLocation(NPC, -4.72, 3.24, -29.14, 2, 5, 0) + local route = math.random(1,4) + if route == 1 then + RouteOne(NPC) + elseif route == 2 then + RouteTwo(NPC) + elseif route == 3 then + RouteThree(NPC) + elseif route == 4 then + RouteFour(NPC) + end + MovementLoopAddLocation(NPC, -7.65, 4, -43.74, 2, 5, 0) + local route = math.random(1,4) + if route == 1 then + RouteOne(NPC) + elseif route == 2 then + RouteTwo(NPC) + elseif route == 3 then + RouteThree(NPC) + elseif route == 4 then + RouteFour(NPC) + end + MovementLoopAddLocation(NPC, -8.79, 4, -49.24, 5, 0) + MovementLoopAddLocation(NPC, -14.78, 4.18, -60.38, 2, 0) + MovementLoopAddLocation(NPC, -20.49, 4.18, -70.93, 2, 0) + MovementLoopAddLocation(NPC, -21.05, 4.18, -74.31, 2, 0) + MovementLoopAddLocation(NPC, -24.93, 4.18, -77.84, 2, 0) + MovementLoopAddLocation(NPC, -26.03, 4.18, -81.13, 2, 0) + MovementLoopAddLocation(NPC, -28.21, 4.18, -84.56, 2, 0) + MovementLoopAddLocation(NPC, -29.13, 4.18, -88.63, 2, 0) + MovementLoopAddLocation(NPC, -29.06, 4.16, -84.84, 2, 0) + MovementLoopAddLocation(NPC, -27.09, 4.17, -80.11, 2, 0) + MovementLoopAddLocation(NPC, -25.69, 4.17, -76.01, 2, 0) + MovementLoopAddLocation(NPC, -21.33, 4.18, -75.09, 2, 0) + MovementLoopAddLocation(NPC, -19.07, 4.18, -70.85, 5, 0) + MovementLoopAddLocation(NPC, -13.68, 4.34, -59, 2, 0) + MovementLoopAddLocation(NPC, -9.89, 4, -51.21, 2, 0) + MovementLoopAddLocation(NPC, -13.96, 4, -47.39, 2, 0) + MovementLoopAddLocation(NPC, -18.03, 4, -45.48, 2, 0) + MovementLoopAddLocation(NPC, -19.44, 4, -40.95, 2, 0) + MovementLoopAddLocation(NPC, -21.04, 4, -38.5, 2, 0) + MovementLoopAddLocation(NPC, -21.16, 4, -36.67, 2, 0) + MovementLoopAddLocation(NPC, -18.25, 3.46, -28.66, 2, 5, 0) + local route = math.random(1,4) + if route == 1 then + RouteOne(NPC) + elseif route == 2 then + RouteTwo(NPC) + elseif route == 3 then + RouteThree(NPC) + elseif route == 4 then + RouteFour(NPC) + end + MovementLoopAddLocation(NPC, -13.49, 3, -16.79, 2, 5, 0) + local route = math.random(1,4) + if route == 1 then + RouteOne(NPC) + elseif route == 2 then + RouteTwo(NPC) + elseif route == 3 then + RouteThree(NPC) + elseif route == 4 then + RouteFour(NPC) + end + MovementLoopAddLocation(NPC, -1.69, 3.5, -5.6, 2, 5, 0) + local route = math.random(1,4) + if route == 1 then + RouteOne(NPC) + elseif route == 2 then + RouteTwo(NPC) + elseif route == 3 then + RouteThree(NPC) + elseif route == 4 then + RouteFour(NPC) + end + MovementLoopAddLocation(NPC, 9.23, 3.25, 6.03, 2, 5, 0) + local route = math.random(1,4) + if route == 1 then + RouteOne(NPC) + elseif route == 2 then + RouteTwo(NPC) + elseif route == 3 then + RouteThree(NPC) + elseif route == 4 then + RouteFour(NPC) + end + MovementLoopAddLocation(NPC, 19.22, 3.5, 8.17, 2, 5, 0) + local route = math.random(1,4) + if route == 1 then + RouteOne(NPC) + elseif route == 2 then + RouteTwo(NPC) + elseif route == 3 then + RouteThree(NPC) + elseif route == 4 then + RouteFour(NPC) + end + MovementLoopAddLocation(NPC, 33.96, 2.75, 8.04, 2, 5, 0) + local route = math.random(1,4) + if route == 1 then + RouteOne(NPC) + elseif route == 2 then + RouteTwo(NPC) + elseif route == 3 then + RouteThree(NPC) + elseif route == 4 then + RouteFour(NPC) + end + MovementLoopAddLocation(NPC, 49.46, 2, 18.51, 2, 0) + MovementLoopAddLocation(NPC, 49.84, 2, 22.47, 2, 0, "depop") +end + + +function RouteOne(NPC) + local X = GetX(NPC) + local Y = GetY(NPC) + local Z = GetZ(NPC) + MovementLoopAddLocation(NPC, X, Y, Z, 2, math.random(2,10)) + MovementLoopAddLocation(NPC, X + 4, Y, Z, 2, math.random(20,45)) + MovementLoopAddLocation(NPC, X + 4, Y, Z + 4, 2, math.random(20,45)) + MovementLoopAddLocation(NPC, X + 7, Y, Z, 2, math.random(20,45)) + MovementLoopAddLocation(NPC, X + 4, Y, Z + 4, 2, math.random(20,45)) + MovementLoopAddLocation(NPC, X, Y, Z, 2, math.random(20,45)) +end + +function RouteTwo(NPC) + local X = GetX(NPC) + local Y = GetY(NPC) + local Z = GetZ(NPC) + MovementLoopAddLocation(NPC, X, Y, Z, 2, math.random(2,10)) + MovementLoopAddLocation(NPC, X - 4, Y, Z, 2, math.random(20,45)) + MovementLoopAddLocation(NPC, X - 4, Y, Z - 4, 2, math.random(20,45)) + MovementLoopAddLocation(NPC, X - 7, Y, Z, 2, math.random(20,45)) + MovementLoopAddLocation(NPC, X - 4, Y, Z - 4, 2, math.random(20,45)) + MovementLoopAddLocation(NPC, X, Y, Z, 1, math.random(20,45)) +end + +function RouteThree(NPC) + local X = GetX(NPC) + local Y = GetY(NPC) + local Z = GetZ(NPC) + MovementLoopAddLocation(NPC, X, Y, Z, 2, math.random(2,10)) + MovementLoopAddLocation(NPC, X + 4, Y, Z, 2, math.random(20,45)) + MovementLoopAddLocation(NPC, X + 4, Y, Z - 4, 2, math.random(20,45)) + MovementLoopAddLocation(NPC, X + 7, Y, Z, 2, math.random(20,45)) + MovementLoopAddLocation(NPC, X + 4, Y, Z - 4, 2, math.random(20,45)) + MovementLoopAddLocation(NPC, X, Y, Z, 2, math.random(20,45)) +end + +function RouteFour(NPC) + local X = GetX(NPC) + local Y = GetY(NPC) + local Z = GetZ(NPC) + MovementLoopAddLocation(NPC, X, Y, Z, 2, math.random(2,10)) + MovementLoopAddLocation(NPC, X - 4, Y, Z, 2, math.random(20,45)) + MovementLoopAddLocation(NPC, X - 4, Y, Z + 4, 2, math.random(20,45)) + MovementLoopAddLocation(NPC, X - 7, Y, Z, 2, math.random(20,45)) + MovementLoopAddLocation(NPC, X - 4, Y, Z + 4, 2, math.random(20,45)) + MovementLoopAddLocation(NPC, X, Y, Z, 2, math.random(20,45)) +end + +function depop(NPC) + Despawn(NPC) +end diff --git a/server/SpawnScripts/BeggarsCourt/muffledvoices.lua b/server/SpawnScripts/BeggarsCourt/muffledvoices.lua new file mode 100644 index 000000000..b92b9964e --- /dev/null +++ b/server/SpawnScripts/BeggarsCourt/muffledvoices.lua @@ -0,0 +1,130 @@ +--[[ + Script Name : SpawnScripts/BeggarsCourt/muffledvoices.lua + Script Purpose : muffled voices + Script Author : John Adams (Updated by Cynnar 2018.06.18 01:06:26) + Script Date : 2009.04.07 + Script Notes : Is part of the Dirty Work Quest. +--]] + +local HALFELF_MENTOR_QUEST_2 = 308 -- Dirty Work + +function spawn(NPC) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + dlg_18_1(NPC, Spawn) +end + +function dlg_18_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/muffled_voices/fprt_hood04/quests/muffled_voice/voice001.mp3", "", "", 1452179347, 296391595, Spawn) + AddConversationOption(conversation, "[continue listening]", "dlg_18_5") + StartConversation(conversation, NPC, Spawn, "Yes.") +end + +function dlg_18_5(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/muffled_voices/fprt_hood04/quests/muffled_voice/voice002.mp3", "", "", 587067158, 3131442190, Spawn) + AddConversationOption(conversation, "[continue listening]", "dlg_18_6") + StartConversation(conversation, NPC, Spawn, "Where is he?") +end + +function dlg_18_6(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/muffled_voices/fprt_hood04/quests/muffled_voice/voice003.mp3", "", "", 3976503175, 1131531976, Spawn) + AddConversationOption(conversation, "[continue listening]", "dlg_18_7") + StartConversation(conversation, NPC, Spawn, "That doesn't matter, he is safe. I have made preparations, you will not be interrupted during your meeting.") +end + +function dlg_18_7(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/muffled_voices/fprt_hood04/quests/muffled_voice/voice004.mp3", "", "", 431474593, 1293164609, Spawn) + AddConversationOption(conversation, "[continue listening]", "dlg_18_8") + StartConversation(conversation, NPC, Spawn, "Good. Good work. When is it?") +end + +function dlg_18_8(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/muffled_voices/fprt_hood04/quests/muffled_voice/voice005.mp3", "", "", 2860604224, 2220621693, Spawn) + AddConversationOption(conversation, "[continue listening]", "dlg_18_9") + StartConversation(conversation, NPC, Spawn, "Very soon.") +end + +function dlg_18_9(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/muffled_voices/fprt_hood04/quests/muffled_voice/voice006.mp3", "", "", 1982248437, 3493440626, Spawn) + AddConversationOption(conversation, "[continue listening]", "dlg_18_10") + StartConversation(conversation, NPC, Spawn, "Where is it?") +end + +function dlg_18_10(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/muffled_voices/fprt_hood04/quests/muffled_voice/voice007.mp3", "", "", 3618887376, 683725922, Spawn) + AddConversationOption(conversation, "[continue listening]", "dlg_18_11") + StartConversation(conversation, NPC, Spawn, "In the southern portion of Beggar's Court. There is a small room just east of the inn, we will meet with him there and learn all that we need of this Ayr'Dal Brotherhood.") +end + +function dlg_18_11(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/muffled_voices/fprt_hood04/quests/muffled_voice/voice008.mp3", "", "", 2712447744, 1525191676, Spawn) + AddConversationOption(conversation, "[continue listening]", "dlg_18_12") + StartConversation(conversation, NPC, Spawn, "What did you promise him for his cooperation?") +end + +function dlg_18_12(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/muffled_voices/fprt_hood04/quests/muffled_voice/voice009.mp3", "", "", 3844115547, 1386660150, Spawn) + AddConversationOption(conversation, "[continue listening]", "dlg_20_10") + StartConversation(conversation, NPC, Spawn, "Much. Much that Rommuls would never agree to.") +end + +function dlg_20_10(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/muffled_voices/fprt_hood04/quests/muffled_voice/voice010.mp3", "", "", 2124749615, 3751504060, Spawn) + AddConversationOption(conversation, "[continue listening]", "dlg_20_11") + StartConversation(conversation, NPC, Spawn, "And what will you give him?") +end + +function dlg_20_11(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/muffled_voices/fprt_hood04/quests/muffled_voice/voice011.mp3", "", "", 516736485, 2856945814, Spawn) + AddConversationOption(conversation, "[continue listening]", "dlg_20_12") + StartConversation(conversation, NPC, Spawn, "A painless death. A pet as loyal as him deserves as much. I must go, do NOT miss the meeting.") +end + +function dlg_20_12(NPC, Spawn) + SetStepComplete(Spawn, HALFELF_MENTOR_QUEST_2, 2) + + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/muffled_voices/fprt_hood04/quests/muffled_voice/voice012.mp3", "", "", 23409635, 3384835777, Spawn) + AddConversationOption(conversation, "[stop listening]", "dlg_20_13") + StartConversation(conversation, NPC, Spawn, "I won't.") +end \ No newline at end of file diff --git a/server/SpawnScripts/BeggarsCourt/mugtopoison.lua b/server/SpawnScripts/BeggarsCourt/mugtopoison.lua new file mode 100644 index 000000000..4eaf473c0 --- /dev/null +++ b/server/SpawnScripts/BeggarsCourt/mugtopoison.lua @@ -0,0 +1,29 @@ +--[[ + Script Name : SpawnScripts/BeggarsCourt/mugtopoison.lua + Script Author : Cynnar + Script Date : 2018.06.18 07:06:59 + Script Purpose : + : +--]] + +local HALFELF_MENTOR_QUEST_2 = 308 -- Dirty Work + +function spawn(NPC) + +end + +function hailed(NPC, Spawn) +end + +function respawn(NPC) + spawn(NPC) +end + +function casted_on(NPC, Spawn, SpellName) + if HasQuest(Spawn, HALFELF_MENTOR_QUEST_2) and GetQuestStep(Spawn, HALFELF_MENTOR_QUEST_2) == 3 then + if SpellName == 'Poison Mug' then + SetStepComplete(Spawn, HALFELF_MENTOR_QUEST_2, 3) + end + end +end + diff --git a/server/SpawnScripts/BeggarsCourt/mugtopoison2.lua b/server/SpawnScripts/BeggarsCourt/mugtopoison2.lua new file mode 100644 index 000000000..4eaf473c0 --- /dev/null +++ b/server/SpawnScripts/BeggarsCourt/mugtopoison2.lua @@ -0,0 +1,29 @@ +--[[ + Script Name : SpawnScripts/BeggarsCourt/mugtopoison.lua + Script Author : Cynnar + Script Date : 2018.06.18 07:06:59 + Script Purpose : + : +--]] + +local HALFELF_MENTOR_QUEST_2 = 308 -- Dirty Work + +function spawn(NPC) + +end + +function hailed(NPC, Spawn) +end + +function respawn(NPC) + spawn(NPC) +end + +function casted_on(NPC, Spawn, SpellName) + if HasQuest(Spawn, HALFELF_MENTOR_QUEST_2) and GetQuestStep(Spawn, HALFELF_MENTOR_QUEST_2) == 3 then + if SpellName == 'Poison Mug' then + SetStepComplete(Spawn, HALFELF_MENTOR_QUEST_2, 3) + end + end +end + diff --git a/server/SpawnScripts/Blumbles/GrandpaBlumble.lua b/server/SpawnScripts/Blumbles/GrandpaBlumble.lua new file mode 100644 index 000000000..14ff976f8 --- /dev/null +++ b/server/SpawnScripts/Blumbles/GrandpaBlumble.lua @@ -0,0 +1,82 @@ +--[[ + Script Name : SpawnScripts/Blumbles/GrandpaBlumble.lua + Script Author : Jabantiz + Script Date : 2014.07.07 11:07:58 + Script Purpose : Grandpa Blumble (4490008) + : +--]] + +local SearchForGrandmaBlumble = 104 + +function spawn(NPC) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + if HasQuest(Spawn, SearchForGrandmaBlumble) then + PlayFlavor(NPC, "", "So did you find Grandma yet?", "", 1689589577, 4560189, Spawn) + else + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_1_1026.mp3", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Are you Grandpa Blumble?", "dlg_0_1") + StartConversation(conversation, NPC, Spawn, "Why, hello there! Found the hole I dug, did ya? You see, I had this map, and it said there was treasure here. I have yet to see any, though.") + end +end + +-- All the below dialog was taken from a text log +function dlg_0_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "Ok, so what happened to Grandma?", "dlg_0_2") + StartConversation(conversation, NPC, Spawn, "Yes yes, you haven't seen Grandma around have you? I figured she always liked shiny things and I would find her with the pirate treasure, but I guess not.") +end + +function dlg_0_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "Go on.", "dlg_0_3") + StartConversation(conversation, NPC, Spawn, "Oh, well, you see we set out on a grand fishing adventure, I tell ya. We decided to fish up one of those giant fish near the dock in Nektulos, so we got in our boat, the one I made, and set sail for Nektulos.") +end + +function dlg_0_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "Wow, that's amazing! What happened next?", "dlg_0_4") + StartConversation(conversation, NPC, Spawn, "Well Ol'Grandma there, she brought along... I would say about half a dozen pies, hot from the oven, she did. Using her skills, she even kept them warm as we sailed across the sea. But it seems that the smell drifted out to the nose of a great pirate captain and he sailed his ship towards us.") +end + +function dlg_0_4(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "What happened after that?", "dlg_0_5") + StartConversation(conversation, NPC, Spawn, "To be honest, I finally got a hook up on the biggest fish you ever did see... right as we saw the pirate ship coming through the fog. I guess the sudden jerk from the fish knocked the pies right out of the boat. Then, the pirate ship crashed right smack into us.") +end + +function dlg_0_5(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "What a shame.", "dlg_0_6") + StartConversation(conversation, NPC, Spawn, "Well that's about it. I washed up on shore, searched for Grandma, and after a few days of searching I decided to head home, because she would never leave her oven for that long. I hoped she would be back in the Baubbleshire, but sadly, she wasn't. ") +end + +function dlg_0_6(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "Okay, thanks.", "OfferSearchForGrandma") + StartConversation(conversation, NPC, Spawn, "Well I got to thinking, and a pirate would have picked up a cute halfling like her for sure. So if she ended up becoming a pirate, she would be with the treasure. So that's why I am out hunting down pirate treasure, you see. Do you think you could help me find Grandma? You can keep any of the treasure you find, just let one of the family know as soon as you find her.") +end + +function OfferSearchForGrandma(NPC, Spawn) + OfferQuest(NPC, Spawn, SearchForGrandmaBlumble) +end \ No newline at end of file diff --git a/server/SpawnScripts/Butcherblock/AlmarShiiz.lua b/server/SpawnScripts/Butcherblock/AlmarShiiz.lua new file mode 100644 index 000000000..cddfb5ce0 --- /dev/null +++ b/server/SpawnScripts/Butcherblock/AlmarShiiz.lua @@ -0,0 +1,22 @@ +--[[ + Script Name : SpawnScripts/ButcherblockMountains/AlmarShiiz.lua + Script Purpose : Almar Shi'iz + Script Author : jakejp + Script Date : 2018.06.04 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +function spawn(NPC) + +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + + PlayFlavor(NPC, "", "Be on your way. I have matters to attend to.", "point", 1689589577, 4560189, Spawn) +end + diff --git a/server/SpawnScripts/Butcherblock/ArgroDurthor.lua b/server/SpawnScripts/Butcherblock/ArgroDurthor.lua new file mode 100644 index 000000000..6fd6db691 --- /dev/null +++ b/server/SpawnScripts/Butcherblock/ArgroDurthor.lua @@ -0,0 +1,290 @@ +--[[ + Script Name : SpawnScripts/ButcherblockMountains/ArgroDurthor.lua + Script Purpose : Argro Durthor + Script Author : jakejp + Script Date : 2018.06.08 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +local TheYarpsnarls = 280 +local TheManyUsesOfCarapace = 281 +local IrontoeBrigadeRequisitionLists = 282 +local DeliveryToVerung + +function spawn(NPC) + ProvidesQuest(NPC, TheYarpsnarls) + ProvidesQuest(NPC, TheManyUsesOfCarapace) + ProvidesQuest(NPC, IrontoeBrigadeRequisitionLists) + ProvidesQuest(NPC, DeliveryToVerung) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + if HasCompletedQuest(Spawn, TheYarpsnarls) == false and HasQuest(Spawn, TheYarpsnarls) == false and CanReceiveQuest(Spawn, TheYarpsnarls) == true then + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_2_1010.mp3", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "I am " .. GetName(Spawn) .. ". What do you mean, 'convenient'?", "dlg_3_1") + StartConversation(conversation, NPC, Spawn, "Well met! Argro Durthor's the name, right convenient to meet you.") + elseif GetQuestStep(Spawn, TheYarpsnarls) == 1 or GetQuestStep(Spawn, TheYarpsnarls) == 2 then + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_2_1010.mp3", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Not yet.") + StartConversation(conversation, NPC, Spawn, "Have you taken care of the kobolds?") + elseif GetQuestStep(Spawn, TheYarpsnarls) == 3 then + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_2_1004.mp3", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "I have.", "dlg_16_1") + StartConversation(conversation, NPC, Spawn, "Have you taken care of the kobolds?") + elseif HasCompletedQuest(Spawn, TheManyUsesOfCarapace) == false and HasQuest(Spawn, TheManyUsesOfCarapace) == false and CanReceiveQuest(Spawn, TheManyUsesOfCarapace) == true then + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_2_1004.mp3", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "I have.", "dlg_16_1") + StartConversation(conversation, NPC, Spawn, "Have you taken care of the kobolds?") + elseif GetQuestStep(Spawn, TheManyUsesOfCarapace) == 1 then + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_2_1004.mp3", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Not yet.") + StartConversation(conversation, NPC, Spawn, "Have you gathered the materials?") + elseif GetQuestStep(Spawn, TheManyUsesOfCarapace) == 2 then + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_1_1004.mp3", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Yup, here you go.", "dlg_0_1") + StartConversation(conversation, NPC, Spawn, "Have you gathered the materials?") + elseif HasCompletedQuest(Spawn, IrontoeBrigadeRequisitionLists) == false and HasQuest(Spawn, IrontoeBrigadeRequisitionLists) == false and CanReceiveQuest(Spawn, IrontoeBrigadeRequisitionLists) == true then + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_1_1004.mp3", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Yup, here you go.", "dlg_0_1") + StartConversation(conversation, NPC, Spawn, "Have you gathered the materials?") + elseif GetQuestStep(Spawn, IrontoeBrigadeRequisitionLists) <= 1 and GetQuestStep(Spawn, IrontoeBrigadeRequisitionLists) >= 3 then + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_3_1004.mp3", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "I haven't collected them yet.") + StartConversation(conversation, NPC, Spawn, "Do you have the requisition lists?") + elseif GetQuestStep(Spawn, IrontoeBrigadeRequisitionLists) == 4 then + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_3_1004.mp3", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Yes, I do.", "dlg_4_1") + StartConversation(conversation, NPC, Spawn, "Do you have the requisition lists?") + elseif HasCompletedQuest(Spawn, DeliveryToVerung) == false and HasQuest(Spawn, DeliveryToVerung) == false and CanReceiveQuest(Spawn, DeliveryToVerung) == true then + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_3_1004.mp3", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Yes, I do.", "dlg_4_1") + StartConversation(conversation, NPC, Spawn, "Do you have the requisition lists?") + elseif GetQuestStep(Spawn, DeliveryToVerung) == 1 then + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_3_1004.mp3", "", "", 0, 0, Spawn) + Say(NPC, "Thanks again for all yer help!") + elseif HasCompletedQuest(Spawn, DeliveryToVerung) then + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_3_1004.mp3", "", "", 0, 0, Spawn) + Say(NPC, "Thanks again for all yer help!") + end +end + +function dlg_0_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + if HasQuest(Spawn, TheManyUsesOfCarapace) then + SetStepComplete(Spawn, TheManyUsesOfCarapace, 2) + end + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Sure, what do you need?", "dlg_0_2") + StartConversation(conversation, NPC, Spawn, "Ah, excellent. These will do nicely. I'd like to get started on creating the armor as soon as possible. Would you mind doing another favor for me while I work on this?") +end + +function dlg_0_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "So I have to find out what the miners need?", "dlg_0_3") + StartConversation(conversation, NPC, Spawn, "In the area south of here, on the south eastern wall there is a cave. In these caves we have a number of miners extracting minerals. We use these minerals for--well, that's not important, at least not to me so I never bothered to learn what we use the minerals for. The important thing is that I've been tasked with collecting the requisition forms from the miners. If we don't keep the miners supplied then they can't work, obviously.") +end + +function dlg_0_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "All right.", "GiveIrontoeBrigadeRequisitionLists") + AddConversationOption(conversation, "You will have to find someone else for this task.") + StartConversation(conversation, NPC, Spawn, "Yeah, but it's not as hard as it sounds. There are three dig supervisors in the caves, one for each section. Among other things, they are tasked with having and maintaining these requisition lists. All you need to do is find the supervisors and collect the lists from them.") +end + +function dlg_0_4(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Ok.", "dlg_0_5") + StartConversation(conversation, NPC, Spawn, "Once you get the lists, bring them back to me.") +end + +function dlg_3_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Just in time for what?", "dlg_3_2") + StartConversation(conversation, NPC, Spawn, "Well you're here just in time!") +end + +function dlg_3_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "What do you want of me?", "dlg_3_3") + AddConversationOption(conversation, "Absolutely not! Find yourself another sentient shield.") + StartConversation(conversation, NPC, Spawn, "For the dwarven reclamation of Kaladim, of course! We're on the eve of it, .. GetName(Spawn) .. , and soon no dwarf will have to settle for living anywhere else. Er, well not literally on the eve. Make no mistake we've still got plenty of hard years of work ahead of us, but the day will come when Kaladim will once again be ours. And you're in the right place at the right time to do your part, what do you say?") +end + +function dlg_3_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "So what do I need to do?", "dlg_3_4") + StartConversation(conversation, NPC, Spawn, "The first order of business involves cleaning up the Butcherblock Mountains. I am but one of many tasked with such a project, we have other projects as well but the most pressing one is to make Butcherblock safe. Kobolds, bugbears, goblins, sirens, aviaks--these all have some hold on Butcherblock. It is our job to lessen their hold and prepare for our eventual liberation of Kaladim.") +end + +function dlg_3_4(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Okay, I'll take them out.", "GiveTheYarpsnarls") + StartConversation(conversation, NPC, Spawn, "If you'd like to help me we can start with the Yarpsnarl kobolds. They are all over Butcherblock, but east of here it is very common to run into some of their lesser ranks: lookouts and ravagers. While taking them out won't topple the kobold army, it will keep them on the defensive in this region.") +end + +function dlg_3_5(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "I'll be back.") + StartConversation(conversation, NPC, Spawn, "That's what I like to hear!") +end + +function dlg_4_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + if HasQuest(Spawn, IrontoeBrigadeRequisitionLists) then + SetStepComplete(Spawn, IrontoeBrigadeRequisitionLists, 4) + end + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Thank you. What favor is that?", "dlg_4_2") + StartConversation(conversation, NPC, Spawn, "Ah good work! I appreciate all the help you've given me. Here, please, take one of these as a token of my gratitude. If you could do one last favor for me I'd be ever-grateful.") +end + +function dlg_4_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Ok, I'll drop these off with him.", "GiveDeliveryToVerung") + StartConversation(conversation, NPC, Spawn, "These requisition lists need to get to Verung Kae'Rush at the western Irontoe Brigade outpost. In the eastern outpost--just south east of here--there is a tunnel that will take you to the western outpost.") +end + +function dlg_4_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Ok.") + StartConversation(conversation, NPC, Spawn, "Verung is my commanding officer, so try not to mention how much you helped me if you can avoid it.") +end + +function dlg_16_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + if HasQuest(Spawn, TheYarpsnarls) then + SetStepComplete(Spawn, TheYarpsnarls, 3) + end + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Why not?", "dlg_16_2") + StartConversation(conversation, NPC, Spawn, "Great! If we keep the kobolds busy defending then we'll have an easier time building and training an army to retake Kaladim. That's another thing I've volunteered to help with, the creation of the army. I've been tasked with coming up with 'non-standard' methods of outfitting an army for combat. By 'nonstandard' they mean cheap. But that doesn't worry Ol' Argro...") +end + +function dlg_16_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "To use for armor?", "dlg_16_3") + StartConversation(conversation, NPC, Spawn, "Since time began wars have been fought and more often than not the soldiers didn't have access to refined metals and hot forges. They made do with what they had available to them, and that's what I intend to do. West of here, in front of Kaladim herself, there's a large number of beetles. I need you to collect some of their carapaces for me!") +end + +function dlg_16_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "I'll go see what I can gather.", "GiveTheManyUsesOfCarapace") + AddConversationOption(conversation, "Get someone else to smash your bugs.") + StartConversation(conversation, NPC, Spawn, "Exactly! In my experience the harder shells come from the smaller beetles: the ones we call the stone and granite beetles--obviously they got those names for a reason, eh? Anyway, I'd like ten of each carapace type, that should be enough to come up with some armor sets I can propose to my uppers. If they like it, maybe I'll become famous! 'Argro's Armor,' they'll say, 'the recapture of Kaladim wasn't possible without it!'") +end + +function dlg_16_4(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "All right, all right.", "dlg_16_5") + StartConversation(conversation, NPC, Spawn, "'Why, if it wasn't for Argro, we might still be living out in the Butcherblock mountains, or worse still Freeport! Oh, that Argro, he sure did attract the ladies--even the non dwarven ones!'") +end + +function dlg_19_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Just in time for what?", "dlg_19_2") + StartConversation(conversation, NPC, Spawn, "Well you're here just in time!") +end + +function dlg_19_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "What do you want of me?", "dlg_19_3") + StartConversation(conversation, NPC, Spawn, "For the dwarven reclamation of Kaladim, of course! We're on the eve of it, Calisharoo, and soon no dwarf will have to settle for living anywhere else. Er, well not literally on the eve. Make no mistake we've still got plenty of hard years of work ahead of us, but the day will come when Kaladim will once again be ours. And you're in the right place at the right time to do your part, what do you say?") +end + +function dlg_19_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "So what do I need to do?", "dlg_19_4") + StartConversation(conversation, NPC, Spawn, "The first order of business involves cleaning up the Butcherblock Mountains. I am but one of many tasked with such a project, we have other projects as well but the most pressing one is to make Butcherblock safe. Kobolds, bugbears, goblins, sirens, aviaks--these all have some hold on Butcherblock. It is our job to lessen their hold and prepare for our eventual liberation of Kaladim.") +end + +function dlg_19_4(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Ok, I'll take them out.", "dlg_19_5") + StartConversation(conversation, NPC, Spawn, "If you'd like to help me we can start with the Yarpsnarl kobolds. They are all over Butcherblock, but east of here it is very common to run into some of their lesser ranks: lookouts and ravagers. While taking them out won't topple the kobold army, it will keep them on the defensive in this region.") +end + +function dlg_19_5(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "I'll be back.", "dlg_19_6") + StartConversation(conversation, NPC, Spawn, "That's what I like to hear!") +end + +function GiveTheYarpsnarls(NPC, Spawn) + OfferQuest(NPC, Spawn, TheYarpsnarls) +end + +function GiveTheManyUsesOfCarapace(NPC, Spawn) + OfferQuest(NPC, Spawn, TheManyUsesOfCarapace) +end + +function GiveIrontoeBrigadeRequisitionLists(NPC, Spawn) + OfferQuest(NPC, Spawn, IrontoeBrigadeRequisitionLists) +end + +function GiveDeliveryToVerung(NPC, Spawn) + OfferQuest(NPC, Spawn, DeliveryToVerung) +end diff --git a/server/SpawnScripts/Butcherblock/AssistantDeldry.lua b/server/SpawnScripts/Butcherblock/AssistantDeldry.lua new file mode 100644 index 000000000..8c2d5048c --- /dev/null +++ b/server/SpawnScripts/Butcherblock/AssistantDeldry.lua @@ -0,0 +1,46 @@ +--[[ + Script Name : SpawnScripts/ButcherblockMountains/AssistantDeldry.lua + Script Purpose : Assistant Deldry + Script Author : jakejp + Script Date : 2018.06.04 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +local NecessaryPrecautions = 273 + +function spawn(NPC) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + if HasQuest(Spawn, NecessaryPrecautions) == true and GetQuestStep(Spawn, NecessaryPrecautions) == 1 then + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_2_1003.mp3", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Forgiving your tone, I do have a message to you from the camp. They wish to establish some manner of cooperation with you and your kin.", "dlg_15_1") + StartConversation(conversation, NPC, Spawn, "Ach! What is this? Come from the walking lizards, have you? I thought those things were keeping to their shanties over on the far side of the beach!") + else + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_3_1009.mp3", "", "", 0, 0, Spawn) + PlayFlavor(NPC, "", "There are plenty of duties to tend to around here, and I aim to see they all get done.", "", 1689589577, 4560189, Spawn) + end +end + +function dlg_15_1(NPC, Spawn) + SetStepComplete(Spawn, NecessaryPrecautions, 1) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Thanks, I guess. Farewell.", "dlg_15_2") + StartConversation(conversation, NPC, Spawn, "I can't see how we would need any help from the likes of them - things seem to be more or less well in hand for us. But I suppose this isn't really about what we need. Very well, I'll look over this proposal and see what they have to offer. In the meantime, you might as well make yourself useful around here. I'm sure you can find plenty to do if you look hard enough.") +end + +--[[ raw_conversations + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_3_1009.mp3", "", "", 0, 0, Spawn) + PlayFlavor(NPC, "", "There are plenty of duties to tend to around here, and I aim to see they all get done.", "", 1689589577, 4560189, Spawn) +--]] + diff --git a/server/SpawnScripts/Butcherblock/BiminiBowchaser.lua b/server/SpawnScripts/Butcherblock/BiminiBowchaser.lua new file mode 100644 index 000000000..c3500c0cd --- /dev/null +++ b/server/SpawnScripts/Butcherblock/BiminiBowchaser.lua @@ -0,0 +1,65 @@ +--[[ + Script Name : SpawnScripts/ButcherblockMountains/BiminiBowchaser.lua + Script Purpose : Bimini Bowchaser + Script Author : jakejp + Script Date : 2018.06.02 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +local CaptainSays = 267 + +function spawn(NPC) + +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + if HasQuest(Spawn, CaptainSays) and GetQuestStep(Spawn, CaptainSays) == 1 then + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_2_1006.mp3", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Avast ye, shortie! I come with Cap'n Stonnacky new orders for you!", "dlg_6_1") + AddConversationOption(conversation, "Blimmey! You're three sheets to the wind!") + StartConversation(conversation, NPC, Spawn, "Oooooh, what do ya do wit' a drunken halfling? What do ya do wit' a drunken' halfling? What do ya do wit' meeee.... *hick-up*.") + else + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_2_1040.mp3", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Blimey! You're three sheets to the wind!") + StartConversation(conversation, NPC, Spawn, "Oooooh, what do ya do wit' a drunken halfling? What do ya do wit' a drunken' halfling? What do ya do wit' meeee.... *hick-up*.") + end + +end + +function dlg_6_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "You're to coil down the lines an' be sure the flemish boat falls correctly!", "WrongChoice") + AddConversationOption(conversation, "You're to flemish down the boat falls an' be sure all the lines are coiled correctly!", "dlg_6_2") + AddConversationOption(conversation, "You're to flemish down the lines an' be sure the boat is coiled correctly.", "WrongChoice") + StartConversation(conversation, NPC, Spawn, "Oh yeah? And just what exactly do he want me to do?") +end + +function dlg_6_2(NPC, Spawn) + SetStepComplete(Spawn, CaptainSays, 1) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "On the double, matey!") + StartConversation(conversation, NPC, Spawn, "Oh! Aye aye. You tell the Cap'n I'll be right on it!") +end + +function WrongChoice(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "Wait, maybe I had that wrong. Let me try again.", "dlg_6_1") + StartConversation(conversation, NPC, Spawn, "He wants me to do what?! Ha ha ha! Tha's a good one. Almost made me believe you really did have orders from the ol' Cap'n hisself? *hick-up*.") +end + + diff --git a/server/SpawnScripts/Butcherblock/BrultenHiltstill.lua b/server/SpawnScripts/Butcherblock/BrultenHiltstill.lua new file mode 100644 index 000000000..8a7a02afb --- /dev/null +++ b/server/SpawnScripts/Butcherblock/BrultenHiltstill.lua @@ -0,0 +1,291 @@ +--[[ + Script Name : SpawnScripts/ButcherblockMountains/BrultenHiltstill.lua + Script Purpose : Brulten Hiltstill + Script Author : jakejp + Script Date : 2018.06.05 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +local SeekingBrultenHiltstill = 270 +local TheKoboldAndTheBeautiful = 276 +local MuckflickMessageIntercepted = 277 +local SeekingTheKilnkors = 278 + + +function spawn(NPC) + ProvidesQuest(NPC, TheKoboldAndTheBeautiful) + ProvidesQuest(NPC, MuckflickMessageIntercepted) + ProvidesQuest(NPC, SeekingTheKilnkors) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + if HasQuest(Spawn, SeekingBrultenHiltstill) then + -- Start first quest (Add if you don't do this quest from start zone) + -- Add Conversation to complete that side quest + SetStepComplete(Spawn, SeekingBrultenHiltstill, 1) + if HasCompletedQuest(Spawn, TheKoboldAndTheBeautiful) == false and HasQuest(Spawn, TheKoboldAndTheBeautiful ) == false and CanReceiveQuest(Spawn, TheKoboldAndTheBeautiful) then + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_3_1004.mp3", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "I'm " .. GetName(Spawn).. ". Where am I?", "dlg_5_1") + StartConversation(conversation, NPC, Spawn, "There really is nothing like the smell of the earth here in these mountains. One can almost taste the gems and minerals wafting up from the ground... Oh, ahoy there young one. You look new to these parts. Tell me, who might you be?") + end + elseif HasCompletedQuest(Spawn, TheKoboldAndTheBeautiful) == false and HasQuest(Spawn, TheKoboldAndTheBeautiful ) == false and CanReceiveQuest(Spawn, TheKoboldAndTheBeautiful) then + -- Offer The Kobold And The Beautiful if not completed or started + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_3_1004.mp3", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "I'm " .. GetName(Spawn).. ". Where am I?", "dlg_5_1") + StartConversation(conversation, NPC, Spawn, "There really is nothing like the smell of the earth here in these mountains. One can almost taste the gems and minerals wafting up from the ground... Oh, ahoy there young one. You look new to these parts. Tell me, who might you be?") + elseif GetQuestStep(Spawn, TheKoboldAndTheBeautiful) == 1 then + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_1_1004.mp3", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "I'm going. I'm going!") + StartConversation(conversation, NPC, Spawn, "Friend, you return too soon! Kobolds lurk in every corner of these lands. You must slay more still! Go now!") + elseif GetQuestStep(Spawn, TheKoboldAndTheBeautiful) == 2 then + Say(Player, "TEST") + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_1_1004.mp3", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "I have slain several kobolds, though I'm sure more will take their place.", "Option2") + StartConversation(conversation, NPC, Spawn, "The yapping... It's stopped. I judge you were successful then?") + --StartConversation(conversation, NPC, Spawn, "The yapping... It's stopped. I judge you were successful then?") + elseif HasCompletedQuest(Spawn, MuckflickMessageIntercepted) == false and HasQuest(Spawn, MuckflickMessageIntercepted) == false and CanReceiveQuest(Spawn, MuckflickMessageIntercepted) then + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_1_1004.mp3", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "I have slain several kobolds, though I'm sure more will take their place.", "Option2_b") + StartConversation(conversation, NPC, Spawn, "The yapping... It's stopped. I judge you were successful then?") + elseif GetQuestStep(Spawn, MuckflickMessageIntercepted) == 1 then + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_1_1004.mp3", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "I shall return.") + StartConversation(conversation, NPC, Spawn, "Well?! Where's the note. Go on, those runners have been seen running between the various camps between here and Kaladim.") + elseif GetQuestStep(Spawn, MuckflickMessageIntercepted) == 2 then + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_3_1004.mp3", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Here's the note.", "dlg_12_1") + StartConversation(conversation, NPC, Spawn, "You return, and by the look on your face, you were triumphant. Here, let me see the note you acquired.") + elseif HasCompletedQuest(Spawn, SeekingTheKilnkors) == false and HasQuest(Spawn, SeekingTheKilnkors) == false and CanReceiveQuest(Spawn, SeekingTheKilnkors) then + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_3_1004.mp3", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "The Kilnkor brothers? Where can I find them?", "dlg_12_2") + AddConversationOption(conversation, "Nah, forget it. I've done more than enough. I'll be on my way.") + StartConversation(conversation, NPC, Spawn, "Ack, this is what I feared. It is encrypted... or at least written in a language not familiar to these weary old eyes. This note's meaning is beyond me. You'll need to take this to my superiors, the Kilnkor brothers.") + elseif GetQuestStep(Spawn, MuckflickMessageIntercepted) == 1 then + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_3_1004.mp3", "", "", 0, 0, Spawn) + Say(NPC, "Your help is much appreciated. Go speak with Jonedorn Kilnkor if you haven't already.") + elseif HasCompletedQuest(Spawn, SeekingTheKilnkors) == true then + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_3_1004.mp3", "", "", 0, 0, Spawn) + Say(NPC, "Your help is much appreciated. Go speak with Jonedorn Kilnkor if you haven't already.") + end +end + +function dlg_2_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Go on.", "dlg_2_2") + StartConversation(conversation, NPC, Spawn, "Head west for a bit, past the goblin camps and head south until you see the dwarven outpost. The Kilnkor brothers run the show there, working with the Irontoe Brigade.") +end + +function dlg_2_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "I'm on my way! Good day and good luck.", "dlg_2_3") + StartConversation(conversation, NPC, Spawn, "Find Jonedorn Kilnkor first. Give him this note and tell him where you got it. He'll be sure to help.") +end + +function dlg_5_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "How do you mean?", "dlg_5_2") + StartConversation(conversation, NPC, Spawn, "You've just set foot in Butcherblock Mountains, the beloved homeland of the dwarves... Though since I last traversed these peaks, these mountains have changed in ways this old dwarf would never have imagined.") +end + +function dlg_5_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Where did they come from?", "dlg_5_3") + StartConversation(conversation, NPC, Spawn, "Kobolds, terrible drooling heathens who dare to claim the almighty Brell as their maker have recently made their way to the surface and have infested these beautiful mountains with their presence.") +end + +function dlg_5_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Kobolds, in the home of the dwarves? How?", "dlg_5_4") + StartConversation(conversation, NPC, Spawn, "It saddens me to say, but it appears the kobolds have sprung forth from the halls of Kaladim itself!") +end + +function dlg_5_4(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "What can I do?", "dlg_5_5") + AddConversationOption(conversation, "Okay. Well, I'll be going now. No sense involving myself in matters of violence.") + StartConversation(conversation, NPC, Spawn, "I've no time to explain now... We must act now before the kobolds around us organize themselves and attack!") +end + +function dlg_5_5(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "It would be an honor!", "GiveTheKoboldAndTheBeautiful") + AddConversationOption(conversation, "I shall take joy in the slaughter of each and every one of the beasts I kill!", "GiveTheKoboldAndTheBeautiful") + AddConversationOption(conversation, "Drooling heathens?! Forget it!") + StartConversation(conversation, NPC, Spawn, "The loose bands of kobold camps in these woods here seem to be slowly assembling into a larger and more organized force. An army no doubt meant to challenge the resistance of dwarves who have constructed outposts here in the Butcherblock Mountains. I need you to whittle down their forces as best you can so that we might stymie their effort and buy my brethren more time as they prepare to make their counter-attack!") +end + +function dlg_12_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + SetStepComplete(Spawn, MuckflickMessageIntercepted, 2) + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "The Kilnkor brothers? Where can I find them?", "dlg_12_2") + AddConversationOption(conversation, "Nah, forget it. I've done more than enough. I'll be on my way.") + StartConversation(conversation, NPC, Spawn, "Ack, this is what I feared. It is encrypted... or at least written in a language not familiar to these weary old eyes. This note's meaning is beyond me. You'll need to take this to my superiors, the Kilnkor brothers.") +end + +function dlg_12_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Go on.", "dlg_12_3") + StartConversation(conversation, NPC, Spawn, "Head west for a bit, past the goblin camps and head south until you see the dwarven outpost. The Kilnkor brothers run the show there, working with the Irontoe Brigade.") +end + +function dlg_12_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "I'm on my way! Good day and good luck.", "GiveSeekingTheKilnkors") + StartConversation(conversation, NPC, Spawn, "Find Jonedorn Kilnkor first. Give him this note and tell him where you got it. He'll be sure to help.") +end + +function dlg_22_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "How do you mean?", "dlg_22_2") + StartConversation(conversation, NPC, Spawn, "You've just set foot in Butcherblock Mountains, the beloved homeland of the dwarves... Though since I last traversed these peaks, these mountains have changed in ways this old dwarf would never have imagined.") +end + +function dlg_22_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Where did they come from?", "dlg_22_3") + StartConversation(conversation, NPC, Spawn, "Kobolds, terrible drooling heathens who dare to claim the almighty Brell as their maker have recently made their way to the surface and have infested these beautiful mountains with their presence.") +end + +function dlg_22_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Kobolds, in the home of the dwarves? How?", "dlg_22_4") + StartConversation(conversation, NPC, Spawn, "It saddens me to say, but it appears the kobolds have sprung forth from the halls of Kaladim itself!") +end + +function dlg_22_4(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "What can I do?", "dlg_22_5") + AddConversationOption(conversation, "Ok, well I'll be going now. No sense involving myself in matters of violence.") + StartConversation(conversation, NPC, Spawn, "I've no time to explain now... We must act now before the kobolds around us organize themselves and attack!") +end + +function dlg_22_5(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "It would be an honor!", "dlg_22_6") + AddConversationOption(conversation, "I shall take joy in the slaughter of each and every one of the beasts I kill!") + AddConversationOption(conversation, "Drooling heathens?! Forget it!") + StartConversation(conversation, NPC, Spawn, "The loose bands of kobold camps in these woods here seem to be slowly assembling into a larger and more organized force. An army no doubt meant to challenge the resistance of dwarves who have constructed outposts here in the Butcherblock Mountains. I need you to whittle down their forces as best you can so that we might stymie their effort and buy my brethren more time as they prepare to make their counter-attack!") +end + +function dlg_22_6(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "I'm off!", "dlg_22_7") + AddConversationOption(conversation, "I don't have a blade, but thanks for the well wishes!") + StartConversation(conversation, NPC, Spawn, "Good. Now just up ahead are scores of kobold camps. Go and slay at least twenty kobolds. That should thin their ranks enough to stall any assault they have planned. Go swiftly, and may Brell guide your blade!") +end + +function Option2(NPC, Spawn) + FaceTarget(NPC, Spawn) + local conversation = CreateConversation() + SetStepComplete(Spawn, TheKoboldAndTheBeautiful, 2) + AddConversationOption(conversation, "Any clues as to who or what could be responsible?", "Option9") + StartConversation(conversation, NPC, Spawn, "Aye, there always seem to be more no matter how many we slay. Someone must be organizing the camps into effective fighting forces.") +end + +function Option2_b(NPC, Spawn) + FaceTarget(NPC, Spawn) + local conversation = CreateConversation() + SetStepComplete(Spawn, TheKoboldAndTheBeautiful, 2) + AddConversationOption(conversation, "Any clues as to who or what could be responsible?", "Option9") + StartConversation(conversation, NPC, Spawn, "Aye, there always seem to be more no matter how many we slay. Someone must be organizing the camps into effective fighting forces.") +end + +function Option9(NPC, Spawn) + FaceTarget(NPC, Spawn) + local conversation = CreateConversation() + + AddConversationOption(conversation, "Go on.", "Option10") + StartConversation(conversation, NPC, Spawn, "The other evening, as I was investigating the kobolds' behavior, I happened upon a most unexpected sort of meeting...") +end + +function Option10(NPC, Spawn) + FaceTarget(NPC, Spawn) + local conversation = CreateConversation() + + AddConversationOption(conversation, "Then what happened?", "Option11") + StartConversation(conversation, NPC, Spawn, "A troop of goblins, larger and more sinister than the ones I've seen near the coast, emerged from the darkness. I expected a battle between them and the kobolds, but instead I saw the two parties discuss some matter in a tongue I could not quite decipher.") +end + +function Option11(NPC, Spawn) + FaceTarget(NPC, Spawn) + local conversation = CreateConversation() + + AddConversationOption(conversation, "Perhaps if I intercepted a message from one of the Muckflick runners, we could learn more about their plans.", "Option3") + AddConversationOption(conversation, "Giant, kobold-loving goblins? Hmm, I think I'll be on my way then.") + StartConversation(conversation, NPC, Spawn, "The goblins, uh, Muckflicks I think they're called, have established themselves here in the mountains. There they wait for messages from their runners and continue to plot with the Yarpsnarls.") +end + +function Option3(NPC, Spawn) + FaceTarget(NPC, Spawn) + local conversation = CreateConversation() + + AddConversationOption(conversation, "I'll be back before you know it!", "GiveMuckflickMessageIntercepted") + StartConversation(conversation, NPC, Spawn, "That's a great idea! Go, slay one of their runners and bring back the message it carries. Perhaps we can learn more.") +end + + +function GiveTheKoboldAndTheBeautiful(NPC, Spawn) + OfferQuest(NPC, Spawn, TheKoboldAndTheBeautiful) +end + +function GiveMuckflickMessageIntercepted(NPC, Spawn) + OfferQuest(NPC, Spawn, MuckflickMessageIntercepted) +end + +function GiveSeekingTheKilnkors(NPC, Spawn) + OfferQuest(NPC, Spawn, SeekingTheKilnkors) +end diff --git a/server/SpawnScripts/Butcherblock/CaptainStonnacky.lua b/server/SpawnScripts/Butcherblock/CaptainStonnacky.lua new file mode 100644 index 000000000..732d7c4c4 --- /dev/null +++ b/server/SpawnScripts/Butcherblock/CaptainStonnacky.lua @@ -0,0 +1,139 @@ +--[[ + Script Name : SpawnScripts/Butcherblock/CaptainStonnacky.lua + Script Purpose : Captain Stonnacky + Script Author : jakejp + Script Date : 2018.06.01 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +local CoinForTheCaptain = 255 +local CaptainSays = 267 + +function spawn(NPC) + ProvidesQuest(NPC, CaptainSays) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + if HasQuest (Spawn, CoinForTheCaptain) and GetQuestStep(Spawn, CoinForTheCaptain) == 1 and HasCompletedQuest(Spawn, CaptainSays) == false then + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_2_1004.mp3", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Um, Dockmaster Highpebble wanted me to give you this sack of coin. I believe it's the week's pay for your crew.", "dlg_4_1") + AddConversationOption(conversation, "Hmm, perhaps I should come back another time...") + StartConversation(conversation, NPC, Spawn, "Yarr! An' after I asked if he wanted ta kiss the captain's daughter, he closed his eyes an' puckered up. Well, naturally I let the cat out o' the bag then! Har har har...") + elseif HasQuest (Spawn, CoinForTheCaptain) == true and GetQuestStep(Spawn, CoinForTheCaptain) == 1 and HasCompletedQuest(Spawn, CaptainSays) == true then + SetStepComplete(Spawn, CoinForTheCaptain, 1) + SetStepComplete(Spawn, CoinForTheCaptain, 2) + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_2_1004.mp3", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Um, Dockmaster Highpebble wanted me to give you this sack of coin. I believe it's the week's pay for your crew.") + AddConversationOption(conversation, "Hmm, perhaps I should come back another time...") + StartConversation(conversation, NPC, Spawn, "Yarr! An' after I asked if he wanted ta kiss the captain's daughter, he closed his eyes an' puckered up. Well, naturally I let the cat out o' the bag then! Har har har...") + elseif HasQuest (Spawn, CaptainSays) == false and GetQuestStep(Spawn, CoinForTheCaptain) == 2 and HasCompletedQuest(Spawn, CaptainSays) == false and HasQuest(Spawn, CaptainSays) == false then + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_2_1004.mp3", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Um, Dockmaster Highpebble wanted me to give you this sack of coin. I believe it's the week's pay for your crew.", "dlg_4_1_b") + AddConversationOption(conversation, "Hmm, perhaps I should come back another time...") + StartConversation(conversation, NPC, Spawn, "Yarr! An' after I asked if he wanted ta kiss the captain's daughter, he closed his eyes an' puckered up. Well, naturally I let the cat out o' the bag then! Har har har...") + elseif HasQuest(Spawn, CaptainSays) == true and GetQuestStep(Spawn, CaptainSays) <= 3 then + Say(NPC, "Arrrr you sure you spoke with all me crew yet, matey?") + elseif HasQuest(Spawn, CaptainSays) and GetQuestStep(Spawn, CaptainSays) == 4 then + SetStepComplete(Spawn, CaptainSays, 4) + SetStepComplete(Spawn, CoinForTheCaptain, 2) + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_1_1004.mp3", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Uh, Cap'n? There is the small matter of the gold you promised to pay me...", "dlg_9_1") + StartConversation(conversation, NPC, Spawn, "Ahoy ye return! Me hearties 'ave all reported in an are ready to work. We'll be on the trail of that salty dog, Blackguard the Pirate in no time! No quarter for 'im! Har har! Now, where's me ship at...") + elseif HasQuest(Spawn, CoinForTheCaptain) == false and HasCompletedQuest(Spawn, CaptainSays) == true then + Say(NPC, "Your days are numbered, Pirate Blackguard! Soon as the ship is ready, I'm settin' out find ye! Yarrr!!!") + else + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_2_1048.mp3", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Riiiight.") + StartConversation(conversation, NPC, Spawn, "Yarr! An' after I asked if he wanted ta kiss the captain's daughter, he closed his eyes an' puckered up. Well, naturally I let the cat out o' the bag then! Har har har...") + end + +end + +function dlg_4_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + SetStepComplete(Spawn, CoinForTheCaptain, 1) + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Who? I'm not Bosun Oxeye. You must have me confused with someone else.", "dlg_4_2") + StartConversation(conversation, NPC, Spawn, "Bosun Oxeye is that you? We be needin' to prepare the Terror of Timorous for launch if'n we ever hope ta catch that scurvy dog! Gather the other lads an' tell 'em we be fixin' to weigh anchor handsomely!") +end + +function dlg_4_1_b(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Who? I'm not Bosun Oxeye. You must have me confused with someone else.", "dlg_4_2") + StartConversation(conversation, NPC, Spawn, "Bosun Oxeye is that you? We be needin' to prepare the Terror of Timorous for launch if'n we ever hope ta catch that scurvy dog! Gather the other lads an' tell 'em we be fixin' to weigh anchor handsomely!") +end + +function dlg_4_1_c(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + SetStepComplete(Spawn, CoinForTheCaptain, 1) + SetStepComplete(Spawn, CoinForTheCaptain, 2) + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Who? I'm not Bosun Oxeye. You must have me confused with someone else.", "dlg_4_2") + StartConversation(conversation, NPC, Spawn, "Bosun Oxeye is that you? We be needin' to prepare the Terror of Timorous for launch if'n we ever hope ta catch that scurvy dog! Gather the other lads an' tell 'em we be fixin' to weigh anchor handsomely!") +end + +function dlg_4_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "My week's pay? Oh, well of course, Captain. What are your orders?", "GiveCaptainSays") + AddConversationOption(conversation, "I really don't have time for this.") + StartConversation(conversation, NPC, Spawn, "You keep talkin' like that an' ye'll meet the rope's end of me togey, bucko! Now, I need you to gather up the crew and deliver their next orders. As soon as the ships been givin' a clean bill o' health I want 'em on board at workin' smartly! Do that an' you'll get yer week's pay 'ere.") +end + +function dlg_4_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Alright, next?", "dlg_4_4") + StartConversation(conversation, NPC, Spawn, "Go seek out me crew members. First I want ye ta tell Bimine Bowchaser to flemish down the boat falls an' be sure all the lines are coiled correctly!") +end + +function dlg_4_4(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "OK. Who's next?", "dlg_4_5") + StartConversation(conversation, NPC, Spawn, "Next find that jack tar, Mizzen Staysail. Tell that lil one to knock off the bright work an' clamp down the deck!") +end + +function dlg_4_5(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Got it! I'll tell them right away!") + AddConversationOption(conversation, "Wait, I have a question about your crew's orders.", "dlg_4_3") + StartConversation(conversation, NPC, Spawn, "Finally, look for that lass, Tally Topgallant. Tell her ta lash up an' stow afore she batten down the hatches!") +end + +function dlg_9_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Um... Aye aye, Cap'n?") + AddConversationOption(conversation, "Really, I'm not Bosun Oxeye!") + StartConversation(conversation, NPC, Spawn, "At ease there, Bosun. 'Ere be your share 'o the booty. Don' go spendin' all on one port now. Just make sure you report back in time for your turn in the dogwatch!") +end + +function GiveCaptainSays(NPC, Spawn) + OfferQuest(NPC, Spawn, CaptainSays) +end \ No newline at end of file diff --git a/server/SpawnScripts/Butcherblock/DockmasterWaulon.lua b/server/SpawnScripts/Butcherblock/DockmasterWaulon.lua new file mode 100644 index 000000000..7a291e481 --- /dev/null +++ b/server/SpawnScripts/Butcherblock/DockmasterWaulon.lua @@ -0,0 +1,261 @@ +--[[ + Script Name : SpawnScripts/Butcherblock/DockmasterWaulon.lua + Script Purpose : Dockmaster Waulon + Script Author : jakejp + Script Date : 2018.05.31 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +local DockDelinquency = 249 +local CoinForTheCaptain = 255 +local NauticalDisaster = 268 +local SeekingBrultenHiltstill = 270 + +function spawn(NPC) + ProvidesQuest(NPC, DockDelinquency) + ProvidesQuest(NPC, CoinForTheCaptain) + ProvidesQuest(NPC, NauticalDisaster) + ProvidesQuest(NPC, SeekingBrultenHiltstill) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + if HasQuest(Spawn, HalasianWelcome) then + -- Start first quest (Add if you don't do this quest from start zone) + -- Add Conversation to complete that side quest + AddConversationOption(conversation, "") + StartConversation(conversation, NPC, Spawn, "") + elseif HasCompletedQuest(Spawn, DockDelinquency) == false and HasQuest(Spawn, DockDelinquency ) == false and CanReceiveQuest(Spawn, DockDelinquency) == true then + -- Offer Dock Delinquency if not completed or started + AddConversationOption(conversation, "Greetings. I am " .. GetName(Spawn) .. ". Perhaps I could help you?", "Option1") + AddConversationOption(conversation, "That's some hat you got there.", "Option2") + StartConversation(conversation, NPC, Spawn, "Ahoy there, newcomer! Welcome to the Butcherblock Mountains! I'm Dockmaster Waulon Highpebble. You can just call me Waulon though. I'm sorry I can't spend more time chatting wit' ya, but keepin' track o' every box, crate an' person that arrives here is more than one dwarf can handle!") + elseif GetQuestStep(Spawn, DockDelinquency) >=1 and GetQuestStep(Spawn, DockDelinquency) <= 3 then + -- Dockmaster Waulon dialogue while on quest + Say(NPC, "Have you killed all the beasties yet? Ah! They're makin' a mess of my whole operation!") + elseif GetQuestStep(Spawn, DockDelinquency) == 4 then + -- Finish Dock Delinquency and start next quest CoinForTheCaptain + SetStepComplete(Spawn, DockDelinquency, 4) + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_1_1004.mp3", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "My pleasure, Waulon. Anything else I can do to help?", "dlg_3_1") + AddConversationOption(conversation, "I've done my part. I'll be on my way now.") + StartConversation(conversation, NPC, Spawn, "You know, it seems a little bit less chaotic around here already! Thanks for your help!") + elseif HasCompletedQuest(Spawn, DockDelinquency) and HasCompletedQuest(Spawn, CoinForTheCaptain) == false and HasQuest(Spawn, CoinForTheCaptain) == false then + -- Start CoinForTheCaptain if one didn't get it yet + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_1_1004.mp3", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "My pleasure, Waulon. Anything else I can do to help?", "dlg_3_1") + AddConversationOption(conversation, "I've done my part. I'll be on my way now.") + StartConversation(conversation, NPC, Spawn, "You know, it seems a little bit less chaotic around here already! Thanks for your help!") + elseif GetQuestStep(Spawn, CoinForTheCaptain) == 1 or GetQuestStep(Spawn, CoinForTheCaptain) == 2 then + -- Dialogue while on quest + Say(NPC, "So, how is the ol' Captain? Oh, you haven't spoken with him yet. Well of wit' ya.") + elseif GetQuestStep(Spawn, CoinForTheCaptain) == 3 then + -- Finish CoinForTheCaptain and start next quest NauticalDisaster + SetStepComplete(Spawn, CoinForTheCaptain, 3) + FaceTarget(NPC, Spawn) + AddConversationOption(conversation, "I gave the coin to him.", "dlg_10_1") + AddConversationOption(conversation, "Honestly, I have no idea.", "dlg_10_1") + StartConversation(conversation, NPC, Spawn, "Hello again. What say Captain Stonnacky") + elseif HasCompletedQuest(Spawn, CoinForTheCaptain) and HasCompletedQuest(Spawn, NauticalDisaster) == false and HasQuest(Spawn, NauticalDisaster) == false then + -- start next quest NauticalDisaster if didn't get from previous + FaceTarget(NPC, Spawn) + AddConversationOption(conversation, "I gave the coin to him.", "dlg_10_1") + AddConversationOption(conversation, "Honestly, I have no idea.", "dlg_10_1") + StartConversation(conversation, NPC, Spawn, "Hello again. What say Captain Stonnacky") + elseif GetQuestStep(Spawn, NauticalDisaster) == 1 then + -- dialogue while on quest + Say(NPC, "The tome! Did you find the tome?!") + elseif GetQuestStep(Spawn, NauticalDisaster) == 2 then + -- dialogue while on quest + AddConversationOption(conversation, "Yes! Here it is!", "NauticalDisasterDialogue1") + StartConversation(conversation, NPC, Spawn, "Were you successful in finding the tome?") + elseif GetQuestStep(Spawn, NauticalDisaster) == 3 then + Say(NPC, "The pages! Did you find all the pages?!") + elseif GetQuestStep(Spawn, NauticalDisaster) == 4 then + SetStepComplete(Spawn, NauticalDisaster, 4) + AddConversationOption(conversation, "Thanks. I'm actually looking for more work. Is there anyone else that could use my help?", "SeekingBrultenHiltstillDialogue1") + AddConversationOption(conversation, "Well, now that our business is done, I bid you a good day. Farewell.") + StartConversation(conversation, NPC, Spawn, "You found the pages! Ah, I knew you could do it! Here, please take this as payment. I owe you a debt of thanks!") + elseif HasCompletedQuest(Spawn, NauticalDisaster) and HasCompletedQuest(Spawn, SeekingBrultenHiltstill) == false and HasQuest(Spawn, SeekingBrultenHiltstill) == false then + AddConversationOption(conversation, "Thanks. I'm actually looking for more work. Is there anyone else that could use my help?", "SeekingBrultenHiltstillDialogue1") + AddConversationOption(conversation, "Well, now that our business is done, I bid you a good day. Farewell.") + StartConversation(conversation, NPC, Spawn, "You found the pages! Ah, I knew you could do it! Here, please take this as payment. I owe you a debt of thanks!") + elseif GetQuestStep(Spawn, SeekingBrultenHiltstill) == 1 then + Say(NPC, "Allo there. Have you spoken with Brulten Hiltstill yet?") + elseif HasCompletedQuest(Spawn, SeekingBrultenHiltstill) then + local choice = math.random(1,2) + if choice == 1 then + Say(NPC, "Thanks again for all your help!") + elseif choice == 2 then + Say(NPC, "Thanks for all your help! Go speak with Brulten Hiltstill if ya haven't already.") + end + else + Say(NPC, "Hello, newcomer! Welcome to the Butcherblock Docks.") + + end + +end + +function dlg_0_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "I will pay him a visit. How do I find him?", "dlg_0_2") + AddConversationOption(conversation, "That doesn't interest me. Good bye.") + StartConversation(conversation, NPC, Spawn, "As a matter of fact, there is someone who could use your help. Seek out Brulten Hiltstill. He protects the caravans arriving from the Greater Faydark. ") +end + + +function dlg_3_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Of course! Where can I find the Captain?", "GiveCoinForTheCaptain") + AddConversationOption(conversation, "Yes, actually I would.") + StartConversation(conversation, NPC, Spawn, "As a matter of fact there is. A merchant ship has recently arrived and delivered the payrolls of several ship's crews. Would you mind taking this sack of coins to Captain Stonnacky?") +end + +function dlg_3_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "I'll be right back!", "dlg_3_3") + StartConversation(conversation, NPC, Spawn, "That old salt is just over there at the end of the dock. He's a bit senile in his old age, but still a rugged captain nonetheless. After you deliver the sack, report back to me for your reward.") +end + +function dlg_10_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "What happened?", "dlg_10_2") + StartConversation(conversation, NPC, Spawn, "Aye, the Captain's had a bit too much time at sea. But alas, I'm afraid I've just learned of terrible event. It seems there's been an attack!") +end + +function dlg_10_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Is there anything I can do to help?", "dlg_10_3") + AddConversationOption(conversation, "Wow, glad I wasn't on that ship. Good day!") + StartConversation(conversation, NPC, Spawn, "A ship, bound for this very dock, was attacked by aqua goblins just off the coast. Despite the valiant efforts of the crew, many of the passengers were robbed of all their possessions.") +end + +function dlg_10_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Alright, you've got a deal!", "GiveNauticalDisaster") + StartConversation(conversation, NPC, Spawn, "Aye, would you mind helping me one last time? One of the passengers, an erudite sage, was relieved of an ancient magical tome which detailed much of the history of Norrath. He's paid me handsomely for its return. I assure you, I'll cut you in on his reward if you recover that tome for me.") +end + +function dlg_10_4(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "I'll return when I've recovered the tome.") + StartConversation(conversation, NPC, Spawn, "Ye'd best check them islands out thar in the bay. I'm sure those nasties brought it back to their camp. I just hope those wicked aqua goblins haven't destroyed it yet.") +end + + +function Option1(NPC, Spawn) + FaceTarget(NPC, Spawn) + local conversation = CreateConversation() + + AddConversationOption(conversation, "Sure, I'm not afraid to get my hands dirty!", "GiveDockDelinquency") + AddConversationOption(conversation, "On second thought, it sounds like it might possibly be dangerous!") + StartConversation(conversation, NPC, Spawn, "Aye, that would be wonderful. I could use your help in takin' care of several pests that have been makin' a big mess here. What do you say?") +end + +function Option2(NPC, Spawn) + FaceTarget(NPC, Spawn) + local conversation = CreateConversation() + + AddConversationOption(conversation, "I see. So, could you use any help?", "Option1") + StartConversation(conversation, NPC, Spawn, "Aye, tis me lucky hat. It brings me the luck! I had me another lucky hat but... I lost it on one me many voyages.") +end + +function NauticalDisasterDialogue1(NPC, Spawn) + FaceTarget(NPC, Spawn) + local conversation = CreateConversation() + + AddConversationOption(conversation, "You asked for the tome, not necessarily all the pages inside the tome. I'd like my payment please.", "NauticalDisasterDialogue2") + StartConversation(conversation, NPC, Spawn, "Bah, look at it! Nearly half the pages have been ripped out! This will never do!") +end + +function NauticalDisasterDialogue2(NPC, Spawn) + FaceTarget(NPC, Spawn) + local conversation = CreateConversation() + + AddConversationOption(conversation, "I have a hard time believing a goblin would study anything...", "NauticalDisasterDialogue3") + StartConversation(conversation, NPC, Spawn, "I'm afraid I can't pay you if I haven't been paid meself! Hmm, judging by these scratch marks, it's no doubt that the aqua goblins tore the pages out. Perhaps the aqua goblin finger wagglers took the pages for their own research.") +end + +function NauticalDisasterDialogue3(NPC, Spawn) + FaceTarget(NPC, Spawn) + local conversation = CreateConversation() + + AddConversationOption(conversation, "...", "NauticalDisasterDialogue4") + StartConversation(conversation, NPC, Spawn, "Well, if you have a better idea on who took the pages, I'd like to hear it now.") +end + +function NauticalDisasterDialogue4(NPC, Spawn) + SetStepComplete(Spawn, NauticalDisaster, 2) + FaceTarget(NPC, Spawn) + local conversation = CreateConversation() + + AddConversationOption(conversation, "Okay, but only because it's you.") + StartConversation(conversation, NPC, Spawn, "I'm sorry, I didn't mean ta be short wit' you. Must be the stress of this 'ere job weighin' on me. Please, find the aqua goblin wizards and see if they have the pages on 'em.") +end + +function SeekingBrultenHiltstillDialogue1(NPC, Spawn) + FaceTarget(NPC, Spawn) + local conversation = CreateConversation() + + AddConversationOption(conversation, "I will pay him a visit. How do I find him?", "GiveSeekingBrultenHiltstill") + AddConversationOption(conversation, "That doesn't interest me. Good bye.") + StartConversation(conversation, NPC, Spawn, "As a matter of fact, there is someone who could use your help. You should seek out Brulten Hiltstill. He's just been stationed out at the newly Established Highland Outpost.") +end + +function SeekingBrultenHiltstillDialogue2(NPC, Spawn) + FaceTarget(NPC, Spawn) + local conversation = CreateConversation() + + AddConversationOption(conversation, "Excellent. Then I'm off. Good day!", "GiveSeekingBrultenHiltstill") + StartConversation(conversation, NPC, Spawn, "To get there, you should take the trail that runs along the cliff face to the east. Once you reach the top of the cliff, look for ol' Brulten near the griffin tower.") +end + +function GiveDockDelinquency(NPC, Spawn) + OfferQuest(NPC, Spawn, DockDelinquency) +end + +function GiveCoinForTheCaptain(NPC, Spawn) + if HasCompletedQuest(Spawn, DockDelinquency) then + OfferQuest(NPC, Spawn, CoinForTheCaptain) + end +end + + +function GiveNauticalDisaster(NPC, Spawn) + if HasCompletedQuest(Spawn, CoinForTheCaptain) then + OfferQuest(NPC, Spawn, NauticalDisaster) + end +end + +function GiveSeekingBrultenHiltstill(NPC, Spawn) + if HasCompletedQuest(Spawn, NauticalDisaster) then + OfferQuest(NPC, Spawn, SeekingBrultenHiltstill) + end +end diff --git a/server/SpawnScripts/Butcherblock/DockworkerAlesford.lua b/server/SpawnScripts/Butcherblock/DockworkerAlesford.lua new file mode 100644 index 000000000..09efcc958 --- /dev/null +++ b/server/SpawnScripts/Butcherblock/DockworkerAlesford.lua @@ -0,0 +1,33 @@ +--[[ + Script Name : SpawnScripts/ButcherblockMountains/DockworkerAlesford.lua + Script Purpose : Dockworker Alesford + Script Author : jakejp + Script Date : 2018.06.04 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +function spawn(NPC) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + + local choice = math.random(1,3) + + if choice == 1 then + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_2_1062.mp3", "", "", 0, 0, Spawn) + PlayFlavor(NPC, "", "Not now, Mizzen is about to get to the best part!", "", 1689589577, 4560189, Spawn) + elseif choice == 2 then + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_2_1062.mp3", "", "", 0, 0, Spawn) + PlayFlavor(NPC, "", "Ole Mizzen is telling one of his adventures again. A life at sea sounds perilous!", "", 1689589577, 4560189, Spawn) + elseif choice == 3 then + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_2_1062.mp3", "", "", 0, 0, Spawn) + PlayFlavor(NPC, "", "If you're looking for something to do, go see Dockmaster Waulon. Brell knows he has enough work for me to do.", "", 1689589577, 4560189, Spawn) + end + +end + diff --git a/server/SpawnScripts/Butcherblock/DockworkerBrawley.lua b/server/SpawnScripts/Butcherblock/DockworkerBrawley.lua new file mode 100644 index 000000000..6d6de649e --- /dev/null +++ b/server/SpawnScripts/Butcherblock/DockworkerBrawley.lua @@ -0,0 +1,31 @@ +--[[ + Script Name : SpawnScripts/Butcherblock/DockworkerBrawley.lua + Script Purpose : Dockworker Brawley + Script Author : jakejp + Script Date : 2018.05.30 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +function spawn(NPC) + MovementLoopAddLocation(NPC, 681.01, 24.00, 600.88, 2, 0) + MovementLoopAddLocation(NPC, 670.58, 24.00, 610.84, 2, 0) + MovementLoopAddLocation(NPC, 714.49, 24.00, 576.52, 2, 0) + MovementLoopAddLocation(NPC, 735.35, 25.91, 575.73, 2, 0) + MovementLoopAddLocation(NPC, 735.56, 25.91, 578.77, 2, 0) + MovementLoopAddLocation(NPC, 714.46, 24.00, 577.21, 2, 0) + MovementLoopAddLocation(NPC, 703.50, 24.00, 592.02, 2, 0) + MovementLoopAddLocation(NPC, 706.65, 24.00, 598.91, 2, 0) + MovementLoopAddLocation(NPC, 711.23, 24.00, 600.93, 2, 0) + MovementLoopAddLocation(NPC, 695.57, 24.00, 601.45, 2, 0) + +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + + PlayFlavor(NPC, "", "Welcome to the Butcherblock Docks. Now, grab a hammer and make yourself useful.", "", 1689589577, 4560189, Spawn) +end diff --git a/server/SpawnScripts/Butcherblock/DockworkerKelson.lua b/server/SpawnScripts/Butcherblock/DockworkerKelson.lua new file mode 100644 index 000000000..286f0546b --- /dev/null +++ b/server/SpawnScripts/Butcherblock/DockworkerKelson.lua @@ -0,0 +1,41 @@ +--[[ + Script Name : SpawnScripts/Butcherblock/DockworkerKelson.lua + Script Purpose : Dockworker Kelson + Script Author : jakejp + Script Date : 2018.05.30 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +function spawn(NPC) + MovementLoopAddLocation(NPC, 654.00, 24.01, 549.97, 2) + MovementLoopAddLocation(NPC, 649.91, 25.91, 566.57, 2) + MovementLoopAddLocation(NPC, 641.86, 25.92, 565.96, 2) + MovementLoopAddLocation(NPC, 624.84, 25.91, 564.94, 2) + MovementLoopAddLocation(NPC, 624.93, 25.91, 589.13, 2) + MovementLoopAddLocation(NPC, 632.71, 26.00, 596.75, 2) + MovementLoopAddLocation(NPC, 624.93, 25.91, 589.13, 2) + MovementLoopAddLocation(NPC, 624.84, 25.91, 564.94, 2) + MovementLoopAddLocation(NPC, 641.86, 25.92, 565.96, 2) + MovementLoopAddLocation(NPC, 649.91, 25.91, 566.57, 2) + MovementLoopAddLocation(NPC, 654.00, 24.01, 549.97, 2) + +end + +function respawn(NPC) + spawn(NPC) +end + + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + + local choice = math.random(1,2) + + if choice == 1 then + PlayFlavor(NPC, "", "Welcome to the Butcherblock Docks. Now, grab a hammer and make yourself useful.", "", 1689589577, 4560189, Spawn) + elseif choice == 2 then + PlayFlavor(NPC, "", "If those rustfiends eat another one of my tools, I'll have to hammer those nails in with my fist!", "", 1689589577, 4560189, Spawn) + else + end + +end \ No newline at end of file diff --git a/server/SpawnScripts/Butcherblock/DockworkerOgilby.lua b/server/SpawnScripts/Butcherblock/DockworkerOgilby.lua new file mode 100644 index 000000000..e6f1aae5a --- /dev/null +++ b/server/SpawnScripts/Butcherblock/DockworkerOgilby.lua @@ -0,0 +1,27 @@ +--[[ + Script Name : SpawnScripts/ButcherblockMountains/DockworkerOgilby.lua + Script Purpose : Dockworker Ogilby + Script Author : jakejp + Script Date : 2018.06.04 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +function spawn(NPC) + +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + local choice = math.random(1,2) + if choice == 1 then + PlayFlavor(NPC, "", "Mizzen says he has actually done time in the Hold of Prexus!", "", 1689589577, 4560189, Spawn) + elseif choice == 2 then + PlayFlavor(NPC, "", "I love Mizzen's story. There's always a happy ending!", "", 1689589577, 4560189, Spawn) + end + +end + diff --git a/server/SpawnScripts/Butcherblock/DockworkerSeeley.lua b/server/SpawnScripts/Butcherblock/DockworkerSeeley.lua new file mode 100644 index 000000000..493e49d57 --- /dev/null +++ b/server/SpawnScripts/Butcherblock/DockworkerSeeley.lua @@ -0,0 +1,35 @@ +--[[ + Script Name : SpawnScripts/ButcherblockMountains/DockworkerSeeley.lua + Script Purpose : Dockworker Seeley + Script Author : jakejp + Script Date : 2018.06.04 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +function spawn(NPC) + +end + +function respawn(NPC) + spawn(NPC) +end + +function InRange(NPC, Spawn) +end + +function LeaveRange(NPC, Spawn) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + + local choice = math.random(1,2) + + if choice == 1 then + PlayFlavor(NPC, "", "Thank Brell we built that wall. Who knows what sort of evil lurks within that old mansion.", "", 1689589577, 4560189, Spawn) + elseif choice == 2 then + PlayFlavor(NPC, "", "Best of luck to you, adventurer. These lands are sure to offer more than your share of excitement.", "", 1689589577, 4560189, Spawn) + end + +end + diff --git a/server/SpawnScripts/Butcherblock/GeldraniAZhiTel.lua b/server/SpawnScripts/Butcherblock/GeldraniAZhiTel.lua new file mode 100644 index 000000000..408fac1f6 --- /dev/null +++ b/server/SpawnScripts/Butcherblock/GeldraniAZhiTel.lua @@ -0,0 +1,172 @@ +--[[ + Script Name : SpawnScripts/ButcherblockMountains/GeldraniAZhiTel.lua + Script Purpose : Geldrani A'Zhi'Tel + Script Author : jakejp + Script Date : 2018.06.13 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +local EmptyVial = 46457 +local FilledVial = 7641 + +local ADimLight = 306 +local DiggingInTheYard = 313 +local AStrangeMix = 314 + + +function spawn(NPC) + ProvidesQuest(NPC, ADimLight) + ProvidesQuest(NPC, DiggingInTheYard) + ProvidesQuest(NPC, AStrangeMix) + +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + if HasCompletedQuest(Spawn, ADimLight) == false and HasQuest(Spawn, ADimLight) == false and CanReceiveQuest(Spawn, ADimLight) then + -- Offer A Dim Light if not completed or started + PlayFlavor(NPC, "geldrani_a_zhi_tel/_exp03/exp03_rgn_butcherblock/geldrani/qst_geldrani_001.mp3", "", "", 1446762141, 4155654886, Spawn) + AddConversationOption(conversation, "Okay, I'll bite. What is it you have been researching?", "dlg_9_1") + AddConversationOption(conversation, "It sounds like you are doing just fine, then. Farewell to you.") + StartConversation(conversation, NPC, Spawn, "The Arasai can take their destiny into their own hands. My research has led me here, and I am so close to completion that I can taste success.") + elseif GetQuestStep(Spawn, ADimLight) == 1 then + PlayFlavor(NPC, "geldrani_a_zhi_tel/_exp03/exp03_rgn_butcherblock/geldrani/qst_geldrani_001.mp3", "", "", 1446762141, 4155654886, Spawn) + AddConversationOption(conversation, "Unfortunately, I haven't found one of the orbs yet, but I will.") + StartConversation(conversation, NPC, Spawn, "The mystics will be carrying the luminescent orbs. Have you confronted them?") + elseif GetQuestStep(Spawn, ADimLight) == 2 then + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_1_1048.mp3", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "I have, and I was able to find one of the orbs for you.", "dlg_2_1") + StartConversation(conversation, NPC, Spawn, "The mystics will be carrying the luminescent orbs. Have you confronted them?") + elseif HasCompletedQuest(Spawn, DiggingInTheYard) == false and HasQuest(Spawn, DiggingInTheYard) == false and CanReceiveQuest(Spawn, DiggingInTheYard) then + PlayFlavor(NPC, "geldrani_a_zhi_tel/_exp03/exp03_rgn_butcherblock/geldrani/qst_geldrani_006.mp3", "", "", 2140158429, 3749106797, Spawn) + AddConversationOption(conversation, "If I were looking for this soil, where might I find it?", "GiveDiggingInTheYard") + AddConversationOption(conversation, "Get a shovel, then. I need to be going.") + StartConversation(conversation, NPC, Spawn, "Now, in order to conduct my experiment, I need a couple of elements that can be found within the Butcherblock Mountains. First, I will need a pile of soil. The soil I need can be found just below the surface, a few feet down. The kobolds, in their savage fervor, will occasionally dig some of this soil up from what would otherwise be rock-solid impacted dirt. See if you can find some of these piles of pure soil.") + elseif GetQuestStep(Spawn, DiggingInTheYard) == 1 then + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_2_1048.mp3", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "The soil is well-guarded, but I will return with it soon.") + StartConversation(conversation, NPC, Spawn, "I will need the soil as soon as possible. Did you find it yet?") + elseif GetQuestStep(Spawn, DiggingInTheYard) == 2 then + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_2_1048.mp3", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "I found the soil you were asking for.", "dlg_8_1") + StartConversation(conversation, NPC, Spawn, "I will need the soil as soon as possible. Did you find it yet?") + elseif HasCompletedQuest(Spawn, AStrangeMix) == false and HasQuest(Spawn, AStrangeMix) == false and CanReceiveQuest(Spawn, AStrangeMix) then + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_2_1048.mp3", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "This vial doesn't seem like it would hold much. This is all you need?", "GiveAStrangeMix") + AddConversationOption(conversation, "You can find someone else to fetch your water.") + StartConversation(conversation, NPC, Spawn, "As I'm sure you can well imagine, in order to plant a mystical seedling, you need water that is itself mystical in nature. There is a pool of water not far from here that will provide me with the water I need. The pool within the nearby druid rings absorbs much of the latent magic properties of that ancient place, and will be perfect for what I need. Please take this vial, and fill it with the water you find there.") + elseif GetQuestStep(Spawn, AStrangeMix) == 1 then + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_2_1048.mp3", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "No, I have not collected it yet. I will return.") + StartConversation(conversation, NPC, Spawn, "Were you able to find the water I need?") + elseif GetQuestStep(Spawn, AStrangeMix) == 2 then + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_2_1048.mp3", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Yes, I have it right here.", "dlg_13_1") + StartConversation(conversation, NPC, Spawn, "Were you able to find the water I need?") + elseif HasCompletedQuest(Spawn, AStrangeMix) then + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_2_1048.mp3", "", "", 0, 0, Spawn) + Say(NPC, "My research will shape the direction of fate for all Arasai one day. Remember this.") + end +end + +function dlg_2_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + SetStepComplete(Spawn, ADimLight, 2) + PlayFlavor(NPC, "geldrani_a_zhi_tel/_exp03/exp03_rgn_butcherblock/geldrani/qst_geldrani_005.mp3", "", "", 3939464934, 409091383, Spawn) + AddConversationOption(conversation, "Let's see what you would be having me do first.", "dlg_2_2") + StartConversation(conversation, NPC, Spawn, "Ah, there we are. Now be careful with that, they are quite fragile, and can be easily disrupted. Ah, yes, this will do perfectly. You did a fine job retrieving this, and there is still more to be done. I trust I can rely on your help for a bit longer, yes?") +end + +function dlg_3_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "geldrani_a_zhi_tel/_exp03/exp03_rgn_butcherblock/geldrani/qst_geldrani_007.mp3", "", "", 4076175152, 3212649291, Spawn) + AddConversationOption(conversation, "I will see what I can do.", "dlg_3_2") + StartConversation(conversation, NPC, Spawn, "Who knows what those curs are digging for, but in the end, they are doing the hard work for me, anyway. Bring me as much of the soil as you can find.") +end + +function dlg_8_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + PlayFlavor(NPC, "geldrani_a_zhi_tel/_exp03/exp03_rgn_butcherblock/geldrani/qst_geldrani_008.mp3", "", "", 1548158395, 1047801679, Spawn) + AddConversationOption(conversation, "Umm... sure. Seedling? I thought you had some dim ball of light.", "dlg_8_2") + StartConversation(conversation, NPC, Spawn, "I had little doubt you would return with the soil I needed. Yes, everything is coming together nicely. All I need is the water, and I can plant the seedling. Isn't this exciting?") +end + +function dlg_8_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + SetStepComplete(Spawn, DiggingInTheYard, 2) + + PlayFlavor(NPC, "geldrani_a_zhi_tel/_exp03/exp03_rgn_butcherblock/geldrani/qst_geldrani_009.mp3", "", "", 172858727, 2005436455, Spawn) + AddConversationOption(conversation, "Fine by me.", "dlg_8_3") + StartConversation(conversation, NPC, Spawn, "Yes, well, I would explain it, but I'm certain it would not make much sense to you. Now, if you're still willing, I have one more thing that needs to be gathered, and you can be on your way if you choose.") +end + +function dlg_8_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_2_1048.mp3", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "This vial doesn't seem like it would hold much. This is all you need?", "GiveAStrangeMix") + AddConversationOption(conversation, "You can find someone else to fetch your water.") + StartConversation(conversation, NPC, Spawn, "As I'm sure you can well imagine, in order to plant a mystical seedling, you need water that is itself mystical in nature. There is a pool of water not far from here that will provide me with the water I need. The pool within the nearby druid rings absorbs much of the latent magic properties of that ancient place, and will be perfect for what I need. Please take this vial, and fill it with the water you find there.") +end + +function dlg_9_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "geldrani_a_zhi_tel/_exp03/exp03_rgn_butcherblock/geldrani/qst_geldrani_002.mp3", "", "", 1171507334, 3736299581, Spawn) + AddConversationOption(conversation, "Perhaps. What is it you need to have done?", "dlg_9_2") + AddConversationOption(conversation, "I've got enough to deal with at the present. Good day to you.") + StartConversation(conversation, NPC, Spawn, "I believe I've found a... well, an energy source that could prove quite helpful if we learn how to properly harness it. I've been running some studies back in Darklight Wood, and the trail of my findings has led me here. I'm wondering if you might be able to lend me some assistance.") +end + +function dlg_9_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "geldrani_a_zhi_tel/_exp03/exp03_rgn_butcherblock/geldrani/qst_geldrani_003.mp3", "", "", 46316574, 116030881, Spawn) + AddConversationOption(conversation, "Hmm... well, it sounds simple enough. If the pay is worth it, I'll see if I can get one of these orbs for you.", "GiveADimLight") + AddConversationOption(conversation, "This doesn't sound like it's worth my time. I need to be going.") + StartConversation(conversation, NPC, Spawn, "It's quite simple, really. The energy manifests itself as a small, floating luminescent light. The Yarpsnarl mystics have found a way to entrap these orbs, and they use them as charms, completely unaware as to what it is they actually have. It's probably easiest to just gather one of the orbs from the Yarpsnarl, rather than trying to catch one yourself.") +end + +function dlg_13_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "geldrani_a_zhi_tel/_exp03/exp03_rgn_butcherblock/geldrani/qst_geldrani_012.mp3", "", "", 739319511, 2263918899, Spawn) + AddConversationOption(conversation, "Control their destiny? What exactly is it you are doing here?", "dlg_13_2") + StartConversation(conversation, NPC, Spawn, "Ah, here is the water. I now have the ingredients I need to cultivate the seedling, and see if my research was indeed accurate. If so, this could mean a good deal to the Arasai people, and their ability to control their destiny.") +end + +function dlg_13_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + SetStepComplete(Spawn, AStrangeMix, 2) + PlayFlavor(NPC, "geldrani_a_zhi_tel/_exp03/exp03_rgn_butcherblock/geldrani/qst_geldrani_013.mp3", "", "", 3301309951, 3942968739, Spawn) + AddConversationOption(conversation, "Your rudeness will earn you no friends, Arasai. There might be others interested in what is happening here, so tread lightly.", "dlg_13_3") + StartConversation(conversation, NPC, Spawn, "That is none of your concern! You have done what I asked and received your payment for your services. Now be off with you - I have much work to do.") +end + + +function GiveADimLight(NPC, Spawn) + OfferQuest(NPC, Spawn, ADimLight) +end + +function GiveDiggingInTheYard(NPC, Spawn) + OfferQuest(NPC, Spawn, DiggingInTheYard) +end + +function GiveAStrangeMix(NPC, Spawn) + OfferQuest(NPC, Spawn, AStrangeMix) +end \ No newline at end of file diff --git a/server/SpawnScripts/Butcherblock/GherranaCobbleblork.lua b/server/SpawnScripts/Butcherblock/GherranaCobbleblork.lua new file mode 100644 index 000000000..882ff3e23 --- /dev/null +++ b/server/SpawnScripts/Butcherblock/GherranaCobbleblork.lua @@ -0,0 +1,107 @@ +--[[ + Script Name : SpawnScripts/ButcherblockMountains/GherranaCobbleblork.lua + Script Purpose : Gherrana Cobbleblork + Script Author : jakejp + Script Date : 2018.06.07 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +local FeathersForGherrana = 279 + +function spawn(NPC) + ProvidesQuest(NPC, FeathersForGherrana) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + if HasCompletedQuest(Spawn, FeathersForGherrana) == false and HasQuest(Spawn, FeathersForGherrana) == false and CanReceiveQuest(Spawn, FeathersForGherrana) then + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_1_1023.mp3", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Excuse me?", "dlg_5_1") + StartConversation(conversation, NPC, Spawn, "To fly about the heavens is all this gnome wants to do!") + elseif GetQuestStep(Spawn, FeathersForGherrana) == 1 then + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_1_1023.mp3", "", "", 0, 0, Spawn) + Say(NPC, "Feathers! I need more scavenger feathers!") + elseif GetQuestStep(Spawn, FeathersForGherrana) == 2 then + SetStepComplete(Spawn, FeathersForGherrana, 2) + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Glad to be of help!") + StartConversation(conversation, NPC, Spawn, "Neato! Look at all these feathers! Wonderful, just wonderful! Here you are. Take this for your efforts. Oh, Jondy and I will be flying along in no time!") + elseif HasCompletedQuest(Spawn, FeathersForGherrana) == true then + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_1_1023.mp3", "", "", 0, 0, Spawn) + else + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_1_1023.mp3", "", "", 0, 0, Spawn) + end +end + +function dlg_5_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "I've heard of aviaks before. What of them?", "dlg_5_2") + StartConversation(conversation, NPC, Spawn, "You see out there? Waaaaaaaay out there, up high? That's the home of the Kragplooms, a tribe of aviaks that have lived in the Butcherblock Mountains for hundreds of years.") +end + +function dlg_5_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Are the Kragplooms peaceful?", "dlg_5_3") + StartConversation(conversation, NPC, Spawn, "It has been said that hundreds of years ago, they once lived atop the trees here in giant platforms. What a sight that must have been! Now though, after the cataclysm, the Kragploom have flocked to that mesa up there near those huge crystalline formations.") +end + +function dlg_5_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "How is that?", "dlg_5_4") + StartConversation(conversation, NPC, Spawn, "Peaceful? Ha! Not exactly. You see the Kragplooms are a bit xenophobic... That means distrustful of others. Um, anyways they tend to attack anyone who gets near them. This of course has hindered the flying contraption my husband and I are working on.") +end + +function dlg_5_4(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Perhaps I could help you?", "dlg_5_5") + StartConversation(conversation, NPC, Spawn, "Well, my husband is off in Freeport collecting iksar scales which he has told me is quite a difficult task. But, I think my task is even harder!") +end + +function dlg_5_5(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Sure, if the price is right.", "GiveFeathersForGherrana") + AddConversationOption(conversation, "Forget it. Sounds too dangerous!") + StartConversation(conversation, NPC, Spawn, "Well my first task is to gather up a crate of kittens, which I've already done and shipped back to my laboratory. I'm having a heck of a time getting all the feathers I need, however. Would you mind gathering some feathers from the Kragploom scavengers?") +end + +function dlg_5_6(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Off I go!") + StartConversation(conversation, NPC, Spawn, "Splendid! You might have an easier time getting them than I did. When I asked the Kragplooms themselves, they tried to eat me! Can you believe that! Me! I don't taste very good... At least I don't think I do. Anyways I'll need a great deal of feathers, so you better start now. Oh, and you will be fully compensated for your efforts.") +end + +function dlg_5_7(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Glad to be of help!") + StartConversation(conversation, NPC, Spawn, "Neato! Look at all these feathers! Wonderful, just wonderful! Here you are. Take this for your efforts. Oh, Jondy and I will be flying along in no time!") +end + +function GiveFeathersForGherrana(NPC, Spawn) + OfferQuest(NPC, Spawn, FeathersForGherrana) +end diff --git a/server/SpawnScripts/Butcherblock/GrissBrumbaugh.lua b/server/SpawnScripts/Butcherblock/GrissBrumbaugh.lua new file mode 100644 index 000000000..29e8ceca0 --- /dev/null +++ b/server/SpawnScripts/Butcherblock/GrissBrumbaugh.lua @@ -0,0 +1,142 @@ +--[[ + Script Name : SpawnScripts/ButcherblockMountains/GrissBrumbaugh.lua + Script Purpose : Griss Brumbaugh + Script Author : jakejp + Script Date : 2018.06.04 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +local SarnakSympathizerPart1 = 274 +local DarkTides = 275 + + +function spawn(NPC) + ProvidesQuest(NPC, DarkTides) + MovementLoopAddLocation(NPC, 683.90, 24.00, 604.82, 2, 5) + MovementLoopAddLocation(NPC, 675.10, 24.00, 600.29, 2, 5) + MovementLoopAddLocation(NPC, 684.99, 24.00, 594.37, 2, 5) + MovementLoopAddLocation(NPC, 680.69, 24.00, 594.31, 2, 5) + MovementLoopAddLocation(NPC, 684.62, 24.00, 596.14, 2, 5) + MovementLoopAddLocation(NPC, 679.45, 24.00, 597.47, 2, 5) + MovementLoopAddLocation(NPC, 685.68, 24.00, 593.50, 2, 5) + MovementLoopAddLocation(NPC, 679.07, 24.00, 601.21, 2, 5) + +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + if HasQuest(Spawn, SarnakSympathizerPart1) == true and GetQuestStep(Spawn, SarnakSympathizerPart1) == 1 then + SetStepComplete(Spawn, SarnakSympathizerPart1, 1) + PlayFlavor(NPC, "griss_brumbaugh/_exp03/exp03_rgn_butcherblock/sarnak_sympathizer/griss_brumbaugh/griss_brumbaugh001.mp3", "", "", 3709174333, 649188758, Spawn) + AddConversationOption(conversation, "Yes, I've agreed to help your cause.", "dlg_16_1") + AddConversationOption(conversation, "Sorry, wrong person.") + StartConversation(conversation, NPC, Spawn, "Aye, you must be the person Raghuntha told me about. Is this true?") + elseif HasCompletedQuest(Spawn, DarkTides) == false and HasQuest(Spawn, DarkTides) == false and CanReceiveQuest(Spawn, DarkTides) == true then + PlayFlavor(NPC, "griss_brumbaugh/_exp03/exp03_rgn_butcherblock/sarnak_sympathizer/griss_brumbaugh/griss_brumbaugh001.mp3", "", "", 3709174333, 649188758, Spawn) + AddConversationOption(conversation, "Yes, I've agreed to help your cause.", "dlg_16_1") + AddConversationOption(conversation, "Sorry, wrong person.") + StartConversation(conversation, NPC, Spawn, "Aye, you must be the person Raghuntha told me about. Is this true?") + elseif GetQuestStep(Spawn, DarkTides) == 1 then + PlayFlavor(NPC, "griss_brumbaugh/_exp03/exp03_rgn_butcherblock/sarnak_sympathizer/griss_brumbaugh/griss_brumbaugh001.mp3", "", "", 3709174333, 649188758, Spawn) + AddConversationOption(conversation, "Not yet.", "dlg_Step1_cont") + StartConversation(conversation, NPC, Spawn, "Welcome back. Have you completed your task?") + elseif GetQuestStep(Spawn, DarkTides) == 2 then + PlayFlavor(NPC, "griss_brumbaugh/_exp03/exp03_rgn_butcherblock/sarnak_sympathizer/griss_brumbaugh/griss_brumbaugh008.mp3", "", "", 1631651215, 3306624777, Spawn) + AddConversationOption(conversation, "Yes, I have slain several Tidesylph ritualists.", "dlg_5_1") + StartConversation(conversation, NPC, Spawn, "Welcome back. Have you completed your task?") + elseif HasCompletedQuest(Spawn, DarkTides) == true then + PlayFlavor(NPC, "", "Thanks again for the help with the Tidesylph ritualists! Now, go find Grimshaw Packwright at East Fort Irontoe and see if he still needs help.", "", 1689589577, 4560189, Spawn) + else + PlayFlavor(NPC, "", "Hail? Where I come from you simply say, 'Hello' to a passing stranger.", "", 1689589577, 4560189, Spawn) + end + + + +end + +function dlg_5_1(NPC, Spawn) + SetStepComplete(Spawn, DarkTides, 2) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "griss_brumbaugh/_exp03/exp03_rgn_butcherblock/sarnak_sympathizer/griss_brumbaugh/griss_brumbaugh009.mp3", "", "", 5065708, 712148895, Spawn) + AddConversationOption(conversation, "Thanks, who should I speak with now?", "dlg_5_2") + StartConversation(conversation, NPC, Spawn, "Excellent. Thanks for the help. I'll be sure to pass along the word that you've done your part.") +end + +function dlg_5_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "griss_brumbaugh/_exp03/exp03_rgn_butcherblock/sarnak_sympathizer/griss_brumbaugh/griss_brumbaugh010.mp3", "", "", 1757082804, 2660421525, Spawn) + AddConversationOption(conversation, "Alright, good-bye!", "dlg_5_3") + StartConversation(conversation, NPC, Spawn, "Go find Grimshaw Packwright. He should be somewhere in East Fort Irontoe. I'm certain he'll have something you can assist him with.") +end + +function dlg_16_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "griss_brumbaugh/_exp03/exp03_rgn_butcherblock/sarnak_sympathizer/griss_brumbaugh/griss_brumbaugh002.mp3", "", "", 3374372564, 3071968430, Spawn) + AddConversationOption(conversation, "Alright, what shall you have me do?", "dlg_16_2") + StartConversation(conversation, NPC, Spawn, "Good, good. Let's get started right away.") +end + +function dlg_16_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "griss_brumbaugh/_exp03/exp03_rgn_butcherblock/sarnak_sympathizer/griss_brumbaugh/griss_brumbaugh003.mp3", "", "", 174914764, 48692594, Spawn) + AddConversationOption(conversation, "What do you mean?", "dlg_16_3") + StartConversation(conversation, NPC, Spawn, "If it's not the Yarpsnals, it's the Krulkiels. If it's not them it's the Muckflicks. Oh, but now apparently the Tidesylphs are getting out of hand.") +end + +function dlg_16_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "griss_brumbaugh/_exp03/exp03_rgn_butcherblock/sarnak_sympathizer/griss_brumbaugh/griss_brumbaugh004.mp3", "", "", 1048101023, 1626003091, Spawn) + AddConversationOption(conversation, "Go on.", "dlg_16_4") + StartConversation(conversation, NPC, Spawn, "We normally don't have too many problems involving the Tidesylph sirens. Their constant fight with the aqua goblins keep them more than occupied.") +end + +function dlg_16_4(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "griss_brumbaugh/_exp03/exp03_rgn_butcherblock/sarnak_sympathizer/griss_brumbaugh/griss_brumbaugh005.mp3", "", "", 906540546, 3167837346, Spawn) + AddConversationOption(conversation, "Sounds like necromancy.", "dlg_16_5") + StartConversation(conversation, NPC, Spawn, "However, something strange has been seen more recently. Zombies and skeletons in the water and the constant stench of death wafting in over the normally refreshing coastal air.") +end + +function dlg_16_5(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "griss_brumbaugh/_exp03/exp03_rgn_butcherblock/sarnak_sympathizer/griss_brumbaugh/griss_brumbaugh006.mp3", "", "", 1578749521, 2367042954, Spawn) + AddConversationOption(conversation, "So what should we do?", "GiveDarkTides") + StartConversation(conversation, NPC, Spawn, "Aye, I'm afraid the taint of Bertoxxulous may have touched some of the Tidesylph sirens and turned their interests towards necromancy as a way to combat the aqua goblins.") +end + + +function dlg_Step1_cont(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "griss_brumbaugh/_exp03/exp03_rgn_butcherblock/sarnak_sympathizer/griss_brumbaugh/griss_brumbaugh007.mp3", "", "", 1790400537, 2286410199, Spawn) + StartConversation(conversation, NPC, Spawn, "Return to me once you've finished your current task.") +end + +function GiveDarkTides(NPC, Spawn) + OfferQuest(NPC, Spawn, DarkTides) +end +--[[ raw_conversations + PlayFlavor(NPC, "", "Hail? Where I come from you simply say, 'Hello' to a passing stranger.", "", 1689589577, 4560189, Spawn) +--]] + diff --git a/server/SpawnScripts/Butcherblock/GuardBanning.lua b/server/SpawnScripts/Butcherblock/GuardBanning.lua new file mode 100644 index 000000000..0ae6cf97c --- /dev/null +++ b/server/SpawnScripts/Butcherblock/GuardBanning.lua @@ -0,0 +1,34 @@ +--[[ + Script Name : SpawnScripts/Butcherblock/GuardBanning.lua + Script Author : jakejp + Script Date : 2018.05.30 08:05:41 + Script Purpose : + : +--]] + +function spawn(NPC) + MovementLoopAddLocation(NPC, 607.97, 24.21, 589.22, 2) + MovementLoopAddLocation(NPC, 623.78, 25.91, 591.10, 2) + MovementLoopAddLocation(NPC, 626.74, 25.91, 563.09, 2) + MovementLoopAddLocation(NPC, 650.17, 25.91, 567.49, 2) + MovementLoopAddLocation(NPC, 657.09, 25.91, 579.54, 2) + MovementLoopAddLocation(NPC, 734.28, 25.91, 579.42, 2) + MovementLoopAddLocation(NPC, 741.71, 24.00, 546.19, 2) + MovementLoopAddLocation(NPC, 734.28, 25.91, 579.42, 2) + MovementLoopAddLocation(NPC, 657.09, 25.91, 579.54, 2) + MovementLoopAddLocation(NPC, 650.17, 25.91, 567.49, 2) + MovementLoopAddLocation(NPC, 626.74, 25.91, 563.09, 2) + MovementLoopAddLocation(NPC, 623.78, 25.91, 591.10, 2) + MovementLoopAddLocation(NPC, 605.66, 24.21, 590.12, 2) + +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + +end + + +function respawn(NPC) + spawn(NPC) +end \ No newline at end of file diff --git a/server/SpawnScripts/Butcherblock/GuardDaarwyn.lua b/server/SpawnScripts/Butcherblock/GuardDaarwyn.lua new file mode 100644 index 000000000..b8a01f0a3 --- /dev/null +++ b/server/SpawnScripts/Butcherblock/GuardDaarwyn.lua @@ -0,0 +1,79 @@ +--[[ + Script Name : SpawnScripts/ButcherblockMountains/GuardDaarwyn.lua + Script Purpose : Guard Daarwyn + Script Author : jakejp + Script Date : 2018.06.04 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +local ThievingRunts = 272 + +function spawn(NPC) + ProvidesQuest(NPC, ThievingRunts) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + if HasCompletedQuest(Spawn, ThievingRunts) == false and HasQuest(Spawn, ThievingRunts) == false and CanReceiveQuest(Spawn, ThievingRunts) == true then + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_3_1003.mp3", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "What is happening?", "dlg_3_1") + AddConversationOption(conversation, "That's unfortunate. Farewell.") + StartConversation(conversation, NPC, Spawn, "Blast those beasts. As if we don't have few enough supplies, they sneak into our camp and steal what little we have! It is maddening!") + elseif GetQuestStep(Spawn, ThievingRunts) == 1 then + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_1_1003.mp3", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "I am still hunting them down. I will return soon.") + StartConversation(conversation, NPC, Spawn, "Well? How goes your hunt?") + elseif GetQuestStep(Spawn, ThievingRunts) == 2 then + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_1_1003.mp3", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "I have gathered up a good batch of ears for you.", "dlg_1_1") + StartConversation(conversation, NPC, Spawn, "Well? How goes your hunt?") + elseif HasCompletedQuest(Spawn, ThievingRunts) == true then + PlayFlavor(NPC, "", "The dangers here are unique, but it isn't anything we cannot deal with.", "converse", 1689589577, 4560189, Spawn) + else + PlayFlavor(NPC, "", "The dangers here are unique, but it isn't anything we cannot deal with.", "converse", 1689589577, 4560189, Spawn) + end +end + +function dlg_1_1(NPC, Spawn) + SetStepComplete(Spawn, ThievingRunts, 2) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Thank you. Farewell.", "dlg_1_2") + StartConversation(conversation, NPC, Spawn, "Now this is good to see! I may not have the supplies back, but perhaps hanging some of these around might deter them from taking any more. Well, I promised you a bounty, and you have earned it. A job well done.") +end + +function dlg_3_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Perhaps I could help with that. I am looking for work in the area, anyway.", "dlg_3_2") + AddConversationOption(conversation, "Maybe you'll get your chance sometime. Farewell.") + StartConversation(conversation, NPC, Spawn, "The goblins! They creep up from the water in the night, and take anything that is close to the edge of the camp. We have to post guards all around at all hours, which puts a further strain on our already thin numbers. If I could, I would hunt them down myself!") +end + +function dlg_3_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Sounds fair, then. I will return soon.", "GiveThievingRunts") + StartConversation(conversation, NPC, Spawn, "Eager to get into the fight, are you? Well, I won't stop you, then... have at them. I'll even give you a bounty for clearing some of the wretches out. Bring me their ears as proof. Come back to me when you've finished up, and we'll see how you do. Now get to it.") +end + +function GiveThievingRunts(NPC, Spawn) + OfferQuest(NPC, Spawn, ThievingRunts) +end + +--[[ raw_conversations + PlayFlavor(NPC, "", "The dangers here are unique, but it isn't anything we cannot deal with.", "converse", 1689589577, 4560189, Spawn) +--]] + diff --git a/server/SpawnScripts/Butcherblock/GuardGasden.lua b/server/SpawnScripts/Butcherblock/GuardGasden.lua new file mode 100644 index 000000000..33e70e930 --- /dev/null +++ b/server/SpawnScripts/Butcherblock/GuardGasden.lua @@ -0,0 +1,45 @@ +--[[ + Script Name : SpawnScripts/Butcherblock/GuardGasden.lua + Script Purpose : Guard Gasden + Script Author : jakejp + Script Date : 2018.05.30 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +leader = 1080032 + +function spawn(NPC) + MovementLoopAddLocation(NPC, 607.97, 24.21, 589.22, 2) + MovementLoopAddLocation(NPC, 623.07, 25.91, 588.79, 2) + MovementLoopAddLocation(NPC, 623.52, 25.91, 566.96, 2) + MovementLoopAddLocation(NPC, 650.37, 25.91, 563.87, 2) + MovementLoopAddLocation(NPC, 652.73, 25.91, 565.34, 2) + MovementLoopAddLocation(NPC, 653.51, 25.91, 575.43, 2) + MovementLoopAddLocation(NPC, 722.53, 24.00, 574.92, 2) + MovementLoopAddLocation(NPC, 734.92, 25.91, 575.06, 2) + MovementLoopAddLocation(NPC, 740.40, 24.00, 537.17, 2) + MovementLoopAddLocation(NPC, 734.92, 25.91, 575.06, 2) + MovementLoopAddLocation(NPC, 653.51, 25.91, 575.43, 2) + MovementLoopAddLocation(NPC, 652.73, 25.91, 565.34, 2) + MovementLoopAddLocation(NPC, 650.37, 25.91, 563.87, 2) + MovementLoopAddLocation(NPC, 623.52, 25.91, 566.96, 2) + MovementLoopAddLocation(NPC, 623.07, 25.91, 588.79, 2) + MovementLoopAddLocation(NPC, 605.66, 24.21, 590.12, 2) +end + +function respawn(NPC) + spawn(NPC) +end + +function InRange(NPC, Spawn) +end + +function LeaveRange(NPC, Spawn) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + +end + + diff --git a/server/SpawnScripts/Butcherblock/GuardTellik.lua b/server/SpawnScripts/Butcherblock/GuardTellik.lua new file mode 100644 index 000000000..e8b8fedc3 --- /dev/null +++ b/server/SpawnScripts/Butcherblock/GuardTellik.lua @@ -0,0 +1,69 @@ +--[[ + Script Name : SpawnScripts/ButcherblockMountains/GuardTellik.lua + Script Purpose : Guard Tellik + Script Author : jakejp + Script Date : 2018.06.04 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +local NecessaryPrecautions = 273 + +function spawn(NPC) + ProvidesQuest(NPC, NecessaryPrecautions) +end + +function respawn(NPC) + spawn(NPC) +end + + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + if HasCompletedQuest(Spawn, NecessaryPrecautions) == false and HasQuest(Spawn, NecessaryPrecautions) == false and CanReceiveQuest(Spawn, NecessaryPrecautions) == true then + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_1_1004.mp3", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Really? Why is that?", "dlg_2_1") + AddConversationOption(conversation, "I imagine. Farewell.") + StartConversation(conversation, NPC, Spawn, "So this is Faydwer. There have always been stories in Gorowyn about this place, but I never thought I would see it. It's no Timorous Deep of course, but it is beautiful in its own right. Coming here was a challenge all by itself, but it has proven to be quite difficult to remain here.") + elseif GetQuestStep(Spawn, NecessaryPrecautions) == 1 then + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_1_1003.mp3", "", "", 0, 0, Spawn) + Say(NPC, "Whether here or home in Gorowyn, my duty does not change.") + elseif HasCompletedQuest(Spawn, NecessaryPrecautions) == true then + Say(NPC, "Whether here or home in Gorowyn, my duty does not change.") + else + Say(NPC, "Whether here or home in Gorowyn, my duty does not change.") + end +end + +function dlg_2_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "That is frustrating. What are you planning to do, then?", "dlg_2_2") + AddConversationOption(conversation, "I'm sorry to hear that. Farewell.") + StartConversation(conversation, NPC, Spawn, "A myriad of reasons, but not the least of which are the dwarves. They have claim over much of the Butcherblock Mountains, and quite loathe to have anyone they consider to be intruders on their lands. They haven't been openly hostile as of yet, but sending out patrols at this point would certainly not be a good plan, given how few in number we are... if the dwarves did not take kindly to what they see as trespassing, it could be disastrous for us.") +end + +function dlg_2_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Hire? As a negotiator?", "dlg_2_3") + AddConversationOption(conversation, "I'm not really interested. Farewell.") + StartConversation(conversation, NPC, Spawn, "It may be imperative to our continued presence here that we establish some kind of cooperation with the dwarves. Unfortunately, our numbers here are fairly small, and we don't have anyone who might be able to begin the negotiations necessary. I know this probably isn't normally what you do, but might you be available for hire?") +end + +function dlg_2_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Well, it couldn't hurt to see what I can get done, then. Farewell.", "GiveNecessaryPrecautions") + StartConversation(conversation, NPC, Spawn, "Something like that, yes. All I really need you to do is speak with the assistant dockmaster, and give her a note from us. I know she has worked with Emissary Raghuntha, and might be more amicable to our offer. Perhaps if you can perform deeds for others on the docks, it will show the dwarves that we are serious about our offer for cooperation. And I'm sure there will be plenty of reward in it for you, too.") +end + +function GiveNecessaryPrecautions(NPC, Spawn) + OfferQuest(NPC, Spawn, NecessaryPrecautions) +end \ No newline at end of file diff --git a/server/SpawnScripts/Butcherblock/HessekThornton.lua b/server/SpawnScripts/Butcherblock/HessekThornton.lua new file mode 100644 index 000000000..cba6387e8 --- /dev/null +++ b/server/SpawnScripts/Butcherblock/HessekThornton.lua @@ -0,0 +1,37 @@ +--[[ + Script Name : SpawnScripts/Butcherblock/HessekThornton.lua + Script Purpose : Hessek Thornton + Script Author : jakejp + Script Date : 2018.05.30 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] +--]] + +function spawn(NPC) + MovementLoopAddLocation(NPC, 607.97, 24.21, 589.22, 2) + MovementLoopAddLocation(NPC, 624.88, 25.91, 590.14, 2) + MovementLoopAddLocation(NPC, 625.14, 25.91, 565.13, 2) + MovementLoopAddLocation(NPC, 652.73, 25.91, 565.34, 2) + MovementLoopAddLocation(NPC, 655.41, 25.91, 577.74, 2) + MovementLoopAddLocation(NPC, 739.92, 25.91, 576.86, 2) + MovementLoopAddLocation(NPC, 740.40, 24.00, 537.17, 2) + MovementLoopAddLocation(NPC, 739.92, 25.91, 576.86, 2) + MovementLoopAddLocation(NPC, 655.41, 25.91, 577.74, 2) + MovementLoopAddLocation(NPC, 652.73, 25.91, 565.34, 2) + MovementLoopAddLocation(NPC, 625.14, 25.91, 565.13, 2) + MovementLoopAddLocation(NPC, 624.88, 25.91, 590.14, 2) + MovementLoopAddLocation(NPC, 605.66, 24.21, 590.12, 2) + +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + + PlayFlavor(NPC, "", "Greetings, welcome to the Butcherblock Mountains.", "hello", 1689589577, 4560189, Spawn) +end + + +function respawn(NPC) + spawn(NPC) +end + diff --git a/server/SpawnScripts/Butcherblock/IrontoeForeman.lua b/server/SpawnScripts/Butcherblock/IrontoeForeman.lua new file mode 100644 index 000000000..db867a89a --- /dev/null +++ b/server/SpawnScripts/Butcherblock/IrontoeForeman.lua @@ -0,0 +1,55 @@ +--[[ + Script Name : SpawnScripts/ButcherblockMountains/IrontoeForeman.lua + Script Purpose : Irontoe Foreman + Script Author : jakejp + Script Date : 2018.06.08 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +local IrontoeBrigadeRequisitionLists = 282 + + +function spawn(NPC) + +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + local choice = math.random(1,3) + + if HasQuest(Spawn, IrontoeBrigadeRequisitionLists) == true and GetQuestStep(Spawn, IrontoeBrigadeRequisitionLists) == 2 then + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_2_1004.mp3", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "I am here for your requisition list.", "dlg_3_1") + StartConversation(conversation, NPC, Spawn, "Yeah?") + else + if choice == 1 then + PlayFlavor(NPC, "", "I hope we get those shovels we need.", "", 1689589577, 4560189, Spawn) + elseif choice == 2 then + PlayFlavor(NPC, "", "Not much to see in here. It's pretty boring.", "", 1689589577, 4560189, Spawn) + elseif choice == 3 then + PlayFlavor(NPC, "", "Hello there!", "", 1689589577, 4560189, Spawn) + end + end + +end + +function dlg_3_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + SetStepComplete(Spawn, IrontoeBrigadeRequisitionLists, 2) + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Thank you.") + StartConversation(conversation, NPC, Spawn, "Ah, so you guys can tell us we don't have the budget... I know the drill, here ya go.") +end + +--[[ raw_conversations + PlayFlavor(NPC, "", "Why must you bother me?", "", 1689589577, 4560189, Spawn) + PlayFlavor(NPC, "", "What is it? What do you want?", "", 1689589577, 4560189, Spawn) +--]] + diff --git a/server/SpawnScripts/Butcherblock/IrontoeForemanOne.lua b/server/SpawnScripts/Butcherblock/IrontoeForemanOne.lua new file mode 100644 index 000000000..7b19e9716 --- /dev/null +++ b/server/SpawnScripts/Butcherblock/IrontoeForemanOne.lua @@ -0,0 +1,46 @@ +--[[ + Script Name : SpawnScripts/ButcherblockMountains/IrontoeForemanOne.lua + Script Purpose : Irontoe Foreman + Script Author : jakejp + Script Date : 2018.06.08 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +local IrontoeBrigadeRequisitionLists = 282 + + +function spawn(NPC) + +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + local choice = math.random(1,2) + + if HasQuest(Spawn, IrontoeBrigadeRequisitionLists) == true and GetQuestStep(Spawn, IrontoeBrigadeRequisitionLists) == 1 then + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_3_1004.mp3", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "I am here for your requisition list.", "dlg_2_1") + StartConversation(conversation, NPC, Spawn, "Yes?") + else + if choice == 1 then + PlayFlavor(NPC, "", "Why must you bother me?", "", 1689589577, 4560189, Spawn) + elseif choice == 2 then + PlayFlavor(NPC, "", "What is it? What do you want?", "", 1689589577, 4560189, Spawn) + end + end +end + +function dlg_2_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + SetStepComplete(Spawn, IrontoeBrigadeRequisitionLists, 1) + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Thank you.") + StartConversation(conversation, NPC, Spawn, "Here.") +end diff --git a/server/SpawnScripts/Butcherblock/IrontoeForewoman.lua b/server/SpawnScripts/Butcherblock/IrontoeForewoman.lua new file mode 100644 index 000000000..2b2200c49 --- /dev/null +++ b/server/SpawnScripts/Butcherblock/IrontoeForewoman.lua @@ -0,0 +1,50 @@ +--[[ + Script Name : SpawnScripts/ButcherblockMountains/IrontoeForewoman.lua + Script Purpose : Irontoe Forewoman + Script Author : jakejp + Script Date : 2018.06.08 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +local IrontoeBrigadeRequisitionLists = 282 + + +function spawn(NPC) + +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + local choice = math.random(1,3) + + if HasQuest(Spawn, IrontoeBrigadeRequisitionLists) == true and GetQuestStep(Spawn, IrontoeBrigadeRequisitionLists) == 3 then + AddConversationOption(conversation, "I am here to collect your requisition list.", "dlg_1_1") + StartConversation(conversation, NPC, Spawn, "What do ya need?") + else + if choice == 1 then + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_1_1003.mp3", "", "", 0, 0, Spawn) + Say(NPC, "Well met!") + elseif choice == 2 then + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_1_1003.mp3", "", "", 0, 0, Spawn) + Say(NPC, "The work never stops!") + elseif choice == 3 then + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_1_1003.mp3", "", "", 0, 0, Spawn) + Say(NPC, "Kaladim WILL be ours!") + end + end +end + +function dlg_1_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + SetStepComplete(Spawn, IrontoeBrigadeRequisitionLists, 3) + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Thank you.", "dlg_1_2") + StartConversation(conversation, NPC, Spawn, "Ah, great! Here you go.") +end + diff --git a/server/SpawnScripts/Butcherblock/MizzenStaysail.lua b/server/SpawnScripts/Butcherblock/MizzenStaysail.lua new file mode 100644 index 000000000..6837888ca --- /dev/null +++ b/server/SpawnScripts/Butcherblock/MizzenStaysail.lua @@ -0,0 +1,68 @@ +--[[ + Script Name : SpawnScripts/Butcherblock/MizzenStaysail.lua + Script Purpose : Mizzen Staysail + Script Author : jakejp + Script Date : 2018.06.02 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +local CaptainSays = 267 + +function spawn(NPC) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + if HasQuest(Spawn, CaptainSays) and GetQuestStep(Spawn, CaptainSays) == 2 then + PlayFlavor(NPC, "mizzen_staysail/_exp03/exp03_rgn_butcherblock/staysail/staysail001.mp3", "", "", 1029519275, 2649145859, Spawn) + AddConversationOption(conversation, "Orders from the Cap'n, Shorty!", "dlg_7_1") + AddConversationOption(conversation, "I'll let you get back to your story.") + StartConversation(conversation, NPC, Spawn, "So there I was! Surrounded by a marauding band of... Undead... Elemental... Orc pirates! Armed with only a flanger-poozle and frik-fork! So I says to 'em...") + else + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_3_1006.mp3", "", "", 0, 0, Spawn) + PlayFlavor(NPC, "", "So there I was! Surrounded by a marauding band of... Undead... Elemental... Orc pirates! Armed with only a flanger-poozle and frak-fork! So I says to 'em...", "", 1689589577, 4560189, Spawn) + end + + +end + +function dlg_7_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Cap'n says ta knock off the deck work an' brighten the clamp!", "WrongChoice") + AddConversationOption(conversation, "Cap'n says ta brighten the clamp off an' work on the deck knock!", "WrongChoice") + AddConversationOption(conversation, "Cap'n says to knock off the bright work an' clamp down the deck!", "dlg_7_2") + StartConversation(conversation, NPC, Spawn, "Bah! I was just gettin' ta the good part. Alright then, if you be a representative of ta' Cap'n, then lemme 'ave it!") +end + +function dlg_7_2(NPC, Spawn) + SetStepComplete(Spawn, CaptainSays, 2) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Aye aye!") + StartConversation(conversation, NPC, Spawn, "Well, why didn't you say so?! Tell the Cap'n I'll be right over!") +end + +function WrongChoice(NPC,Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Hmm, perhaps I mixed that one up. Let me start over.", "dlg_7_1") + StartConversation(conversation, NPC, Spawn, "Whaaa? Ho ho ho. He he he. That thar is what we call a good fisherman's tale. Oooh-hoo. Too funny friend, too funny!") +end +--[[ raw_conversations + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_3_1006.mp3", "", "", 0, 0, Spawn) + PlayFlavor(NPC, "", "So there I was! Surrounded by a marauding band of... Undead... Elemental... Orc pirates! Armed with only a flanger-poozle and frak-fork! So I says to 'em...", "", 1689589577, 4560189, Spawn) +--]] + diff --git a/server/SpawnScripts/Butcherblock/NinoinDsyl.lua b/server/SpawnScripts/Butcherblock/NinoinDsyl.lua new file mode 100644 index 000000000..acc1b2a0d --- /dev/null +++ b/server/SpawnScripts/Butcherblock/NinoinDsyl.lua @@ -0,0 +1,198 @@ +--[[ + Script Name : NinoinDsyl.lua + Script Purpose : Ninoin D'syl + Script Author : jakejp + Script Date : 06/22/2018 + Script Notes : Auto-Generated from a chat log using SpawnScriptDesigner +--]] + +-- Quest ID's +local TEIRDALTIMBER = 352 +local FLETCHMEMORE = 353 +local STRAIGHTANDTOTHEPOINT = 354 + +function spawn(NPC) + ProvidesQuest(NPC, TEIRDALTIMBER) + ProvidesQuest(NPC, FLETCHMEMORE) + ProvidesQuest(NPC, STRAIGHTANDTOTHEPOINT) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + local con = CreateConversation() + + if CanReceiveQuest(Spawn, TEIRDALTIMBER) then + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_1_1007.mp3", "", "", 0, 0, Spawn) + AddConversationOption(con, "What's this about arrows?", "dlg_2") + AddConversationOption(con, "A wise man once told me never to speak with the Teir'Dal when they are angry. Good day, ma'am.") + StartConversation(con, NPC, Spawn, "Curse these warped arrows! How do they expect us to hit our enemies if our arrows are curved rounder than a halfling's belly?!") + elseif HasQuest(Spawn, TEIRDALTIMBER) and GetQuestStep(Spawn, TEIRDALTIMBER) == 1 then + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_2_1007.mp3", "", "", 0, 0, Spawn) + Say(NPC, "Do not return until you have an ample supply of timber. There should be plenty laying around here. If you lack the skill to gather lumber here, harvest lumber in the Great Faydark forest until you have the skill to gather timber here.", Spawn) + elseif HasQuest(Spawn, TEIRDALTIMBER) and GetQuestStep(Spawn, TEIRDALTIMBER) == 2 then + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_2_1007.mp3", "", "", 0, 0, Spawn) + SetStepComplete(Spawn, TEIRDALTIMBER, 2) + AddConversationOption(con, "Who said anything about feathers?", "dlg_9") + StartConversation(con, NPC, Spawn, "Well, well. That's quite a pile of lumber you have there. Good work. I can begin making the arrow shafts at once. Now, give me the feathers.") + elseif CanReceiveQuest(Spawn, FLETCHMEMORE) then + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_2_1007.mp3", "", "", 0, 0, Spawn) + AddConversationOption(con, "Who said anything about feathers?", "dlg_9") + StartConversation(con, NPC, Spawn, "Well, well. That's quite a pile of lumber you have there. Good work. I can begin making the arrow shafts at once. Now, give me the feathers.") + elseif HasQuest(Spawn, FLETCHMEMORE) and GetQuestStep(Spawn, FLETCHMEMORE) == 1 then + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_2_1007.mp3", "", "", 0, 0, Spawn) + Say(NPC, "Hmm, now what is it you don't have for me? Oh, that's right. Feathers! Go, and don't come back until you have a decent amount.", Spawn) + elseif HasQuest(Spawn, FLETCHMEMORE) and GetQuestStep(Spawn, FLETCHMEMORE) == 2 then + SetStepComplete(Spawn, FLETCHMEMORE, 2) + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_2_1007.mp3", "", "", 0, 0, Spawn) + AddConversationOption(con, "You can't use the arrowheads from the old arrows?", "dlg_13") + StartConversation(con, NPC, Spawn, "Yes... These will do nicely. Excellent work. I have nearly completed whittling the shafts from the timber you brought, and with these feathers I can attach the fletching. That only leaves the arrowheads to deal with now.") + elseif CanReceiveQuest(Spawn, STRAIGHTANDTOTHEPOINT) then + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_2_1007.mp3", "", "", 0, 0, Spawn) + AddConversationOption(con, "You can't use the arrowheads from the old arrows?", "dlg_13") + StartConversation(con, NPC, Spawn, "Yes... These will do nicely. Excellent work. I have nearly completed whittling the shafts from the timber you brought, and with these feathers I can attach the fletching. That only leaves the arrowheads to deal with now.") + elseif HasQuest(Spawn, STRAIGHTANDTOTHEPOINT) and GetQuestStep(Spawn, STRAIGHTANDTOTHEPOINT) == 1 then + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_2_1007.mp3", "", "", 0, 0, Spawn) + Say(NPC, "What, did one of those brutes smack you so hard you forgot what you are doing? Leave and do not return until you have gathered an arsenal's worth of stone weapons.", Spawn) + elseif HasQuest(Spawn, STRAIGHTANDTOTHEPOINT) and GetQuestStep(Spawn, STRAIGHTANDTOTHEPOINT) == 2 then + SetStepComplete(Spawn, STRAIGHTANDTOTHEPOINT, 2) + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_1_1007.mp3", "", "", 0, 0, Spawn) + AddConversationOption(con, "What?! After all that I've done for you?", "dlg_17") + StartConversation(con, NPC, Spawn, "Well done! These will do nicely. Now, as a token of my appreciation I will refrain from slaying you. You may leave now.") + elseif HasCompletedQuest(Spawn, STRAIGHTANDTOTHEPOINT) then + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_2_1007.mp3", "", "", 0, 0, Spawn) + Say(NPC, "You're still alive? Pity.", Spawn) + end +end + +function dlg_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + local con = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(con, "Perhaps I could be of service. Could I help?", "dlg_3") + StartConversation(con, NPC, Spawn, "These arrows! I just received a shipment of them from... Well, that's not important for you to know. The point is, they are ruined! All of them water-logged and warped. I have no choice but to find new ones.") +end + +function dlg_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + local con = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(con, "Uh...", "dlg_4") + StartConversation(con, NPC, Spawn, "Hmm, yes that would be excellent. First I need you to find a master fletcher. When you do, beat him to submission until he agrees to follow your every command. Slaughter a family member or two if necessary. Just make sure he can follow orders and that his hands remain in working order.") +end + +function dlg_4(NPC, Spawn) + FaceTarget(NPC, Spawn) + local con = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(con, "I don't have the time to go find a master fletcher, much less beat him up.", "dlg_5") + AddConversationOption(con, "Perhaps we could find a solution that does not involve as much violence.", "dlg_5") + StartConversation(con, NPC, Spawn, "Pretty standard, really. What? Oh, is that too drastic for you?") +end + +function dlg_5(NPC, Spawn) + FaceTarget(NPC, Spawn) + local con = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(con, "Why don't I collect the items you need to make new arrows?", "OfferQuest1") + AddConversationOption(con, "Forget it. I'm not interested.") + StartConversation(con, NPC, Spawn, "Well, what do you suggest?") +end + +function OfferQuest1(NPC, Spawn) + OfferQuest(NPC, Spawn, TEIRDALTIMBER) + + --[[ Move the following conversation to the Accepted function of the quest script + FaceTarget(NPC, Spawn) + local con = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(con, "Right away!") + AddConversationOption(con, "What's in it for me?", "dlg_7") + StartConversation(con, NPC, Spawn, "Hmm, I suppose that would work. Though I do like the idea of beating someone into submission... Anyways, I need fresh cut timber to whittle down into arrow shafts. Bring me a substantial pile of timber from the trees around here.") + --]] +end + +function dlg_7(NPC, Spawn) + FaceTarget(NPC, Spawn) + local con = CreateConversation() + + AddConversationOption(con, "Perfect.") + StartConversation(con, NPC, Spawn, "Fear not, young one. I will pay you for your time.") +end + +function dlg_9(NPC, Spawn) + FaceTarget(NPC, Spawn) + local con = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(con, "I know that, you didn't mention you wanted me to get you feathers though.", "dlg_10") + StartConversation(con, NPC, Spawn, "You can't make arrows without suitable fletching!") +end + +function dlg_10(NPC, Spawn) + FaceTarget(NPC, Spawn) + local con = CreateConversation() + + AddConversationOption(con, "I could bring back feathers from the aviaks that make their home here.", "OfferQuest2") + AddConversationOption(con, "Nope. Forget it. I'm done working for you.") + StartConversation(con, NPC, Spawn, "Well, it seemed plain obvious to me. Sheesh. Now, I've tried using the feathers from the hawks here, but they're too... dainty. I need feathers from a larger, more... sturdy beast.") +end + +function OfferQuest2(NPC, Spawn) + OfferQuest(NPC, Spawn, FLETCHMEMORE) + + --[[ Move the following conversation to the Accepted function of the quest script + FaceTarget(NPC, Spawn) + local con = CreateConversation() + + AddConversationOption(con, "It will be done in due course.") + StartConversation(con, NPC, Spawn, "Yes, Kragploom should work quite well. Bring me several feathers from any type of Kragploom you're able to hunt down. Their plumage would be best to make my arrows from.") + --]] +end + +function dlg_13(NPC, Spawn) + FaceTarget(NPC, Spawn) + local con = CreateConversation() + + AddConversationOption(con, "Where might I find material like that?", "OfferQuest3") + AddConversationOption(con, "Sigh, not again. You'll have to find it without me.") + StartConversation(con, NPC, Spawn, "I'm afraid not. Those arrowheads were all rusted and brittle. I can't go slaying people with shoddy arrowheads now can I? Of course not! I need you to procure some sharpened stone which I can use as a substitute.") +end + +function OfferQuest3(NPC, Spawn) + OfferQuest(NPC, Spawn, STRAIGHTANDTOTHEPOINT) + + --[[ Move the following conversation to the Accepted function of the quest script + FaceTarget(NPC, Spawn) + local con = CreateConversation() + + AddConversationOption(con, "I take my leave.") + AddConversationOption(con, "Where are they located?", "dlg_15") + StartConversation(con, NPC, Spawn, "I've seen lumbering brutes patrolling the Northern reaches of these mountains. Bugbears, I believe they are called. They carry massive weapons made of flint or obsidian. Bring me back a pile of those weapons. I should be able to craft some new arrowheads out of them.") + --]] +end + +function dlg_15(NPC, Spawn) + FaceTarget(NPC, Spawn) + local con = CreateConversation() + + AddConversationOption(con, "I'm going. I'm going!") + StartConversation(con, NPC, Spawn, "As I said, in the Northern parts of these mountains. Travel North from the Highlands and look for a natural ramp that stretches Northeast. The brutes have established a formidable camp there. Now go! ") +end + +function dlg_17(NPC, Spawn) + FaceTarget(NPC, Spawn) + local con = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(con, "That's more like it!") + StartConversation(con, NPC, Spawn, "Fine! You see, this is why I insist on working with only those who are easily subjugated and mute. Soooooo fewer incidents like this. Here, take this. I suppose you've earned it.") +end \ No newline at end of file diff --git a/server/SpawnScripts/Butcherblock/PhilosopherRhimes.lua b/server/SpawnScripts/Butcherblock/PhilosopherRhimes.lua new file mode 100644 index 000000000..7f2d74faf --- /dev/null +++ b/server/SpawnScripts/Butcherblock/PhilosopherRhimes.lua @@ -0,0 +1,222 @@ +--[[ + Script Name : SpawnScripts/Butcherblock/PhilosopherRhimes.lua + Script Purpose : Philosopher Rhimes + Script Author : jakejp + Script Date : 2018.05.30 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +function spawn(NPC) + +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "It's so wonderful! I just want to go out and start basking in their glory right away!", "dlg_9_1") + AddConversationOption(conversation, "Feh. Gods, who needs em? Always a pain in yer neck! I'd sooner stick a knife in their gut than worship those churlish manifestations.", "dlg_9_1") + AddConversationOption(conversation, "I'm really not interested at all.") + StartConversation(conversation, NPC, Spawn, "Hello there! I'm sure you've heard all the hubbub about the deities coming back to us! Some people think it's grand, others not so much.") + +end + +function dlg_9_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "philosopher_rhimes/_exp03/deity/deity_historian011.mp3", "", "", 1707355458, 1531415457, Spawn) + AddConversationOption(conversation, "I am interested in the powers of Good. Where might I find their prophets?", "dlg_9_2") + AddConversationOption(conversation, "I walk my own path, and serve neither good nor evil. Where might I find the gods of neutrality?", "dlg_9_4") + AddConversationOption(conversation, "If you know what is good for you, then tell me where I can find the servants of the evil gods!", "dlg_9_6") + AddConversationOption(conversation, "I don't have time to make this decision now. I will return another time.") + StartConversation(conversation, NPC, Spawn, "Ah ha! You're one of the people who think their return is wonderful! Well, if you're interested, I've been taking notes on where their prophets have gone. You can talk to them for more information. Prophets are always ready to welcome new followers to the flock.") +end + +function dlg_9_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Please tell me where I may find the prophet of Mithaniel Marr.", "MarrEnd") + AddConversationOption(conversation, "Tunare...tell me where to speak with her prophet.", "TunareEnd") + AddConversationOption(conversation, "Where might I find Quellious' prophet?", "QuelliousEnd") + AddConversationOption(conversation, "I am searching for the prophet of the Prime Healer, Rodcet Nife.", "RodcetEnd") + AddConversationOption(conversation, "I would love to speak with Erollisi Marr's prophet. Surely she has one!", "ErollisiEnd") + AddConversationOption(conversation, "My apologies, I don't think I'm interested in any of those. What other choices might I have?", "dlg_9_1") + AddConversationOption(conversation, "Actually, this is something I want to consider more carefully right now. Perhaps another time.") + StartConversation(conversation, NPC, Spawn, "Which one were you inquiring about?") +end + + +function dlg_9_4(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "I'm born of the earth, now tell me about Brell Serilis!", "BrellEnd") + AddConversationOption(conversation, "I hear the prophet of Bristlebane is looking for a devoted prankster. Where might I find him?", "BristlebaneEnd") + AddConversationOption(conversation, "I've always been interested in Solusek Ro.", "SolusekEnd") + AddConversationOption(conversation, "I want to work with the law. Where is the Tribunal's prophet?", "TribunalEnd") + AddConversationOption(conversation, "I serve the father of storms. Where can I find the prophet of Karana?", "KaranaEnd") + AddConversationOption(conversation, "My apologies, I don't think I'm interested in any of those. What other choices might I have?", "dlg_9_1") + AddConversationOption(conversation, "Actually, this is something I want to consider more carefully right now. Perhaps another time.") + StartConversation(conversation, NPC, Spawn, "Which one were you inquiring about?") +end + + +function dlg_9_6(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "You will tell me where to find the prophet of Cazic-Thule. Now!", "CazicEnd") + AddConversationOption(conversation, "Tell me where I can find the prophet of Rallos Zek.", "RallosEnd") + AddConversationOption(conversation, "I want to find out more about Innoruuk.", "InnoruukEnd") + AddConversationOption(conversation, "I wish to learn more about Bertoxxulous, the Plaguebringer.", "BertoxxulousEnd") + AddConversationOption(conversation, "I am interested in learning more about the Forgotten One, Anashti Sul.", "AnashtiEnd") + AddConversationOption(conversation, "My apologies, I don't think I'm interested in any of those. What other choices might I have?", "dlg_9_1") + AddConversationOption(conversation, "Actually, this is something I want to consider more carefully right now. Perhaps another time.") + StartConversation(conversation, NPC, Spawn, "Which one were you inquiring about?") +end + + +function MarrEnd(NPC, Spawn) + FaceTarget(NPC, Spawn) + local conversation = CreateConversation() + + AddConversationOption(conversation, "Very good, I will be on my way then.") + AddConversationOption(conversation, "On second thought...", "dlg_9_1") + StartConversation(conversation, NPC, Spawn, "Sir Bayden Cauldthorn may be found in Old Kelethin, not far from the research library. He seeks all brave and valorous enough to follow Mithaniel Marr!") +end + +function TunareEnd(NPC, Spawn) + FaceTarget(NPC, Spawn) + local conversation = CreateConversation() + + AddConversationOption(conversation, "Very good, I will be on my way then.") + AddConversationOption(conversation, "On second thought...", "dlg_9_1") + StartConversation(conversation, NPC, Spawn, "Tunare's prophet, Kurista, has taken up residence within Old Kelethin. If you wish to learn more about the Earthmother, I am certain she would be willing to share her faith with you.") +end + +function QuelliousEnd(NPC, Spawn) + FaceTarget(NPC, Spawn) + local conversation = CreateConversation() + + AddConversationOption(conversation, "Very good, I will be on my way then.") + AddConversationOption(conversation, "On second thought...", "dlg_9_1") + StartConversation(conversation, NPC, Spawn, "Sensei Shoda has delegated responsibility to an erudite named Merrek. You can find him at the top of the cliffs in Butcherblock overlooking the ocean.") +end + +function RodcetEnd(NPC, Spawn) + FaceTarget(NPC, Spawn) + local conversation = CreateConversation() + + AddConversationOption(conversation, "Thank you for your guidance. Farewell to you.") + AddConversationOption(conversation, "On second thought...", "dlg_9_1") + StartConversation(conversation, NPC, Spawn, "Following in the footsteps of Seeress Ealaynya Ithis, the Prophet Bainyn Fairwind has been preaching the word of the Prime Healer from within the Temple of Life in North Qeynos. If you wish to learn more about Rodcet Nife, then seek out Bainyn within the sacred temple.") +end + +function ErollisiEnd(NPC, Spawn) + FaceTarget(NPC, Spawn) + local conversation = CreateConversation() + + AddConversationOption(conversation, "Thank you for your guidance. Farewell to you.") + AddConversationOption(conversation, "On second thought...", "dlg_9_1") + StartConversation(conversation, NPC, Spawn, "Erollisi Marr's return to Norrath was quite extraordinary! If she is to take a prophet it would be Priest Aaronolis Swornlove, but he has not been bestowed with such a mantle, yet. I encourage you to speak with Sister Leela Prendyn of the Sisterhood of Erollisi. You will find her at the Cairn of the Huntress in the city of New Halas, in Frostfang Sea. She will tell you more of the Loving Huntress.") +end + +function BrellEnd(NPC, Spawn) + FaceTarget(NPC, Spawn) + local conversation = CreateConversation() + + AddConversationOption(conversation, "Very good, I will be on my way then.") + AddConversationOption(conversation, "On second thought...", "dlg_9_1") + StartConversation(conversation, NPC, Spawn, "Bronlor Stormhammer has gone to Highlands Outpost, here in the Butcherblock Mountains. You will need to seek him out if it is Brell Serilis you are interested in learning about.") +end + +function BristlebaneEnd(NPC, Spawn) + FaceTarget(NPC, Spawn) + local conversation = CreateConversation() + + AddConversationOption(conversation, "Very good, I will be on my way then.") + AddConversationOption(conversation, "On second thought...", "dlg_9_1") + StartConversation(conversation, NPC, Spawn, "I believe Tobel Patadash is the one you should seek out. He's currently residing on the docks of the Enchanted Lands, near the Lost Village of Bobick.") +end + +function SolusekEnd(NPC, Spawn) + FaceTarget(NPC, Spawn) + local conversation = CreateConversation() + + AddConversationOption(conversation, "Very good, I will be on my way then.") + AddConversationOption(conversation, "On second thought...", "dlg_9_1") + StartConversation(conversation, NPC, Spawn, "Civean Il'Pernod stares out across the Butcherblock above the King's Rest ravine. You will need to speak to him if you wish to learn about Solusek Ro.") +end + +function TribunalEnd(NPC, Spawn) + FaceTarget(NPC, Spawn) + local conversation = CreateConversation() + + AddConversationOption(conversation, "Very good, I will be on my way then.") + AddConversationOption(conversation, "On second thought...", "dlg_9_1") + StartConversation(conversation, NPC, Spawn, "Justinian Theo is near the settlement of Chrykori Village in Timorous Deep. His eyes scan the horizon, searching for those who seek justice and balance in Norrath. If that is what you seek, then speak with him.") +end + +function KaranaEnd(NPC, Spawn) + FaceTarget(NPC, Spawn) + local conversation = CreateConversation() + + AddConversationOption(conversation, "Then I will go to him swiftly.") + AddConversationOption(conversation, "On second thought...", "dlg_9_1") + StartConversation(conversation, NPC, Spawn, "Askr can be found near the city of Gorowyn in Timorous Deep -- on the Green Outlook. He can tell you how to return the father of storms to the skies of Norrath.") +end + +function CazicEnd(NPC, Spawn) + FaceTarget(NPC, Spawn) + local conversation = CreateConversation() + + AddConversationOption(conversation, "Very good, I will be on my way then.") + AddConversationOption(conversation, "On second thought...", "dlg_9_1") + StartConversation(conversation, NPC, Spawn, "The Prophet of Fear, Danak Dhorentath, has gone to Dagnor's Pass here in Butcherblock. If you wish to learn more about Cazic-Thule, I would seek him out there.") +end + +function RallosEnd(NPC, Spawn) + FaceTarget(NPC, Spawn) + local conversation = CreateConversation() + + AddConversationOption(conversation, "Very good, I will be on my way then.") + AddConversationOption(conversation, "On second thought...", "dlg_9_1") + StartConversation(conversation, NPC, Spawn, "Tychus Zeksworn has taken up a position east of East Fort Irontoe, overlooking one of the treacherous mountain passes. Perhaps he seeks to recruit the bugbears and kobolds to join an army of Rallos Zek!") +end + +function InnoruukEnd(NPC, Spawn) + FaceTarget(NPC, Spawn) + local conversation = CreateConversation() + + AddConversationOption(conversation, "Very good, I will be on my way then.") + AddConversationOption(conversation, "On second thought...", "dlg_9_1") + StartConversation(conversation, NPC, Spawn, "Xilania Nevagon has gone to Greater Faydark, though to what end I do not know. I am certain that the Prophet of Innoruuk has only nefarious things in mind if she has gone to the home of the Fae!") +end + +function BertoxxulousEnd(NPC, Spawn) + FaceTarget(NPC, Spawn) + local conversation = CreateConversation() + + AddConversationOption(conversation, "Very good, I will be on my way then.") + AddConversationOption(conversation, "On second thought...", "dlg_9_1") + StartConversation(conversation, NPC, Spawn, "Hrath Everstill can be found near the entrance to the city of Gorowyn in Timorous Deep. It's been said that he's been conducting some rather gruesome experiments on some of the locals in an attempt to unleash the wrath of Bertoxxulous, the Plaguebringer. Perhaps he could use your assistance.") +end + +function AnashtiEnd(NPC, Spawn) + FaceTarget(NPC, Spawn) + local conversation = CreateConversation() + + AddConversationOption(conversation, "You have been most helpful. I will take my leave now.") + AddConversationOption(conversation, "On second thought...", "dlg_9_1") + StartConversation(conversation, NPC, Spawn, "Once thought lost to the nothingness of the Void, Anashti Sul has found her way back to Norrath. Her Prophet, Plumetor Dul'Sadma, has taken up residence on the docks of the Sinking Sands. It is there you will need to travel if you wish to learn more about the nature of the Forgotten One.") +end \ No newline at end of file diff --git a/server/SpawnScripts/Butcherblock/Raghunatha.lua b/server/SpawnScripts/Butcherblock/Raghunatha.lua new file mode 100644 index 000000000..c0ad20c69 --- /dev/null +++ b/server/SpawnScripts/Butcherblock/Raghunatha.lua @@ -0,0 +1,197 @@ +--[[ + Script Name : SpawnScripts/ButcherblockMountains/Raghunatha.lua + Script Purpose : Raghunatha + Script Author : jakejp + Script Date : 2018.06.04 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +local SarnakSympathizerPart1 = 274 + +function spawn(NPC) + ProvidesQuest(NPC, SarnakSympathizerPart1) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + if HasCompletedQuest(Spawn, SarnakSympathizerPart1) == false and HasQuest(Spawn, SarnakSympathizerPart1) == false and CanReceiveQuest(Spawn, SarnakSympathizerPart1) == true then + PlayFlavor(NPC, "raghuntha/_exp03/exp03_rgn_butcherblock/sarnak_sympathizer/raghunatha/raghunatha001.mp3", "", "", 62910123, 2692407233, Spawn) + AddConversationOption(conversation, "Indeed, I was wondering. Care to explain?", "dlg_1_1") + AddConversationOption(conversation, "Not at all, actually.") + StartConversation(conversation, NPC, Spawn, "Greetings, stranger. I'm sure you're wondering what a sarnak like myself is doing all the way here in the Butcherblock Mountains.") + elseif GetQuestStep(Spawn, SarnakSympathizerPart1) == 1 then + PlayFlavor(NPC, "", "Please return to me once you've completed all the Irontoe Dwarf Tasks", "thanks", 1689589577, 4560189, Spawn) + elseif HasCompletedQuest(Spawn, SarnakSympathizerPart2) == true then + PlayFlavor(NPC, "", "Thanks again for all your help!", "thanks", 1689589577, 4560189, Spawn) + else + PlayFlavor(NPC, "raghuntha/_exp03/exp03_rgn_butcherblock/sarnak_sympathizer/raghunatha/raghunatha001.mp3", "", "", 62910123, 2692407233, Spawn) + end + + if convo==6 then + PlayFlavor(NPC, "raghuntha/_exp03/exp03_rgn_butcherblock/sarnak_sympathizer/raghunatha/raghunatha009.mp3", "", "", 3098514065, 2686440714, Spawn) + AddConversationOption(conversation, "I'm just glad I could help.", "dlg_6_1") + StartConversation(conversation, NPC, Spawn, "Friend, it's so very good to see you again. I've spoken with all the dwarves on the list I gave you. They've all said very kind things about your dedication to the tasks they've given you.") + end +end + +function dlg_1_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "raghuntha/_exp03/exp03_rgn_butcherblock/sarnak_sympathizer/raghunatha/raghunatha002.mp3", "", "", 1071485609, 2454621762, Spawn) + AddConversationOption(conversation, "Were the Haoaerans successful?", "dlg_1_2") + StartConversation(conversation, NPC, Spawn, "A small delegation of Gorwynian citizens have traveled across the Timorous Deep to enlist the help of the dwarves of Butcherblock and Kaladim. Our first concern was that the blasted Haoaerans would rouse the Kragploom aviaks into action and cause them to join their cause.") +end + +function dlg_1_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "raghuntha/_exp03/exp03_rgn_butcherblock/sarnak_sympathizer/raghunatha/raghunatha003.mp3", "", "", 3690188667, 1562372666, Spawn) + AddConversationOption(conversation, "Are the dwarves unwilling to help at all?", "dlg_1_3") + StartConversation(conversation, NPC, Spawn, "So far, no. Our allies have prevented the two aviak tribes from conspiring with one another, though convincing the dwarves to assist us has proved more difficult than we originally anticipated.") +end + +function dlg_1_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "raghuntha/_exp03/exp03_rgn_butcherblock/sarnak_sympathizer/raghunatha/raghunatha004.mp3", "", "", 833410768, 1027249809, Spawn) + AddConversationOption(conversation, "I'll help if I can. What's the problem?", "dlg_1_4") + AddConversationOption(conversation, "Ah, good luck then!") + StartConversation(conversation, NPC, Spawn, "Not exactly. The dwarves here are actually sympathetic to our plight. Afterall, they know firsthand what it's like to have an enemy encroach upon your ancestral lands.") +end + +function dlg_1_4(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "raghuntha/_exp03/exp03_rgn_butcherblock/sarnak_sympathizer/raghunatha/raghunatha005.mp3", "", "", 518757181, 1757436789, Spawn) + AddConversationOption(conversation, "I can. Is there anything I can do to help?", "dlg_1_5") + AddConversationOption(conversation, "Sorry to hear that. Well, I need to leave. Good-bye!") + + StartConversation(conversation, NPC, Spawn, "Simply put, it is a matter of resources. The dwarves here in this outpost are an extremely busy lot. As much as they would like to assist us, they need to take care of their own problems first. A most frustrating dilemma for our cause, I'm sure you can imagine.") +end + +function dlg_1_5(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "raghuntha/_exp03/exp03_rgn_butcherblock/sarnak_sympathizer/raghunatha/raghunatha006.mp3", "", "", 1066732182, 1623424378, Spawn) + AddConversationOption(conversation, "Yes, I will help.", "GiveSarnakSympathizerPart1") + StartConversation(conversation, NPC, Spawn, "You would be willing to assist us? Marvelous! Yes, please, I've taken it upon myself to assist the dwarves in their own problems in hope that with enough assistance, they would be able to return the favor. Would you be willing to speak with several of the dwarves around these lands, and help them in their duties?") +end + +function dlg_1_12(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "raghuntha/_exp03/exp03_rgn_butcherblock/sarnak_sympathizer/raghunatha/raghunatha007.mp3", "", "", 3396264823, 906309207, Spawn) + AddConversationOption(conversation, "I'll begin at once!", "dlg_1_13") + StartConversation(conversation, NPC, Spawn, "Thank you, friend, I'll do my best to make sure you're rewarded kindly. Now, let me write down the names of all the dwarves you'll need to speak with. Complete their tasks and then return to me. Time is of the essence, and the Haoaeran's attacks grow stronger every day.") +end + +function dlg_6_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "raghuntha/_exp03/exp03_rgn_butcherblock/sarnak_sympathizer/raghunatha/raghunatha010.mp3", "", "", 3327757984, 2621465746, Spawn) + AddConversationOption(conversation, "Good to hear. Good-bye, Raghuntha.", "dlg_6_2") + StartConversation(conversation, NPC, Spawn, "Indeed, you've helped both our causes tremendously. I'm happy to add that just this morning the dwarves here have agreed to lend both military and engineering support back to Gorowyn so we can finally gain the upper hand in our fight against the Haoaerans and drive them back whence they came!") +end + +function dlg_10_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "raghuntha/_exp03/exp03_rgn_butcherblock/sarnak_sympathizer/raghunatha/raghunatha002.mp3", "", "", 1071485609, 2454621762, Spawn) + AddConversationOption(conversation, "Were the Haoaerans successful?", "dlg_10_2") + StartConversation(conversation, NPC, Spawn, "A small delegation of Gorwynian citizens have traveled across the Timorous Deep to enlist the help of the dwarves of Butcherblock and Kaladim. Our first concern was that the blasted Haoaerans would rouse the Kragploom aviaks into action and cause them to join their cause.") +end + +function dlg_10_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "raghuntha/_exp03/exp03_rgn_butcherblock/sarnak_sympathizer/raghunatha/raghunatha003.mp3", "", "", 3690188667, 1562372666, Spawn) + AddConversationOption(conversation, "Are the dwarves unwilling to help at all?", "dlg_10_3") + StartConversation(conversation, NPC, Spawn, "So far, no. Our allies have prevented the two aviak tribes from conspiring with one another, though convincing the dwarves to assist us has proved more difficult than we originally anticipated.") +end + +function dlg_10_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "raghuntha/_exp03/exp03_rgn_butcherblock/sarnak_sympathizer/raghunatha/raghunatha004.mp3", "", "", 833410768, 1027249809, Spawn) + AddConversationOption(conversation, "Then what's the problem?", "dlg_10_4") + StartConversation(conversation, NPC, Spawn, "Not exactly. The dwarves here are actually sympathetic to our plight. Afterall, they know firsthand what it's like to have an enemy encroach upon your ancestral lands.") +end + +function dlg_14_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "raghuntha/_exp03/exp03_rgn_butcherblock/sarnak_sympathizer/raghunatha/raghunatha002.mp3", "", "", 1071485609, 2454621762, Spawn) + AddConversationOption(conversation, "Were the Haoaerans successful?", "dlg_14_2") + StartConversation(conversation, NPC, Spawn, "A small delegation of Gorwynian citizens have traveled across the Timorous Deep to enlist the help of the dwarves of Butcherblock and Kaladim. Our first concern was that the blasted Haoaerans would rouse the Kragploom aviaks into action and cause them to join their cause.") +end + +function dlg_14_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "raghuntha/_exp03/exp03_rgn_butcherblock/sarnak_sympathizer/raghunatha/raghunatha003.mp3", "", "", 3690188667, 1562372666, Spawn) + AddConversationOption(conversation, "Are the dwarves unwilling to help at all?", "dlg_14_3") + StartConversation(conversation, NPC, Spawn, "So far, no. Our allies have prevented the two aviak tribes from conspiring with one another, though convincing the dwarves to assist us has proved more difficult than we originally anticipated.") +end + +function dlg_14_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "raghuntha/_exp03/exp03_rgn_butcherblock/sarnak_sympathizer/raghunatha/raghunatha004.mp3", "", "", 833410768, 1027249809, Spawn) + AddConversationOption(conversation, "Then what's the problem?", "dlg_14_4") + StartConversation(conversation, NPC, Spawn, "Not exactly. The dwarves here are actually sympathetic to our plight. Afterall, they know firsthand what it's like to have an enemy encroach upon your ancestral lands.") +end + +function dlg_14_4(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "raghuntha/_exp03/exp03_rgn_butcherblock/sarnak_sympathizer/raghunatha/raghunatha005.mp3", "", "", 518757181, 1757436789, Spawn) + AddConversationOption(conversation, "I can. Is there anything I can do to help?", "dlg_14_5") + StartConversation(conversation, NPC, Spawn, "Simply put, it is a matter of resources. The dwarves here in this outpost are an extremely busy lot. As much as they would like to assist us, they need to take care of their own problems first. A most frustrating dilemma for our cause, I'm sure you can imagine.") +end + +function dlg_14_5(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "raghuntha/_exp03/exp03_rgn_butcherblock/sarnak_sympathizer/raghunatha/raghunatha006.mp3", "", "", 1066732182, 1623424378, Spawn) + AddConversationOption(conversation, "Yes, I will help.", "dlg_14_6") + StartConversation(conversation, NPC, Spawn, "You would be willing to assist us? Marvelous! Yes, please, I've taken it upon myself to assist the dwarves in their own problems in hope that with enough assistance, they would be able to return the favor. Would you be willing to speak with several of the dwarves around these lands, and help them in their duties?") +end + +function dlg_14_6(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "raghuntha/_exp03/exp03_rgn_butcherblock/sarnak_sympathizer/raghunatha/raghunatha007.mp3", "", "", 3396264823, 906309207, Spawn) + AddConversationOption(conversation, "I'll begin at once!", "dlg_14_7") + StartConversation(conversation, NPC, Spawn, "Thank you, friend, I'll do my best to make sure you're rewarded kindly. Now, let me write down the names of all the dwarves you'll need to speak with. Complete their tasks and then return to me. Time is of the essence, and the Haoaeran's attacks grow stronger every day.") +end + +function GiveSarnakSympathizerPart1(NPC, Spawn) + OfferQuest(NPC, Spawn, SarnakSympathizerPart1) +end + +--[[ raw_conversations + PlayFlavor(NPC, "", "Thanks again for all your help!", "thanks", 1689589577, 4560189, Spawn) +--]] + diff --git a/server/SpawnScripts/Butcherblock/ResearcherEruwun.lua b/server/SpawnScripts/Butcherblock/ResearcherEruwun.lua new file mode 100644 index 000000000..9aa71bbdc --- /dev/null +++ b/server/SpawnScripts/Butcherblock/ResearcherEruwun.lua @@ -0,0 +1,95 @@ +--[[ + Script Name : SpawnScripts/ButcherblockMountains/ResearcherEruwun.lua + Script Purpose : Researcher Eruwun + Script Author : jakejp + Script Date : 2018.06.04 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +local UnusualPalate = 271 + +function spawn(NPC) + ProvidesQuest(NPC, UnusualPalate) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + local choice = math.random(1,1) + + if HasCompletedQuest(Spawn, UnusualPalate) == false and HasQuest(Spawn, UnusualPalate) == false and CanReceiveQuest(Spawn, UnusualPalate) == true then + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_3_1004.mp3", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "I am. What is it you are looking to have done?", "dlg_1_1") + AddConversationOption(conversation, "Not at the moment. Farewell for now.") + StartConversation(conversation, NPC, Spawn, "Ah, you might be just who I was hoping for. I am assuming you are here looking for some work, are you not?") + elseif GetQuestStep(Spawn, UnusualPalate) == 1 then + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_3_1004.mp3", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Not yet, but I will return soon.") + StartConversation(conversation, NPC, Spawn, "Were you able to find the glands I need?") + elseif GetQuestStep(Spawn, UnusualPalate) == 2 then + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_3_1004.mp3", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "I have them right here.", "dlg_11_1") + StartConversation(conversation, NPC, Spawn, "Were you able to find the glands I need?") + elseif HasCompletedQuest(Spawn, UnusualPalate) == true then + Say(NPC, "What a wealth of knowledge Faydwer is! If I spend the rest of my days in study here, it will not be enough time.") + else + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_3_1004.mp3", "", "", 0, 0, Spawn) + end +end + +function dlg_1_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "That's interesting, but what does that have to do with me?", "dlg_1_2") + AddConversationOption(conversation, "Well, that is definitely a boon for them. Farewell.") + StartConversation(conversation, NPC, Spawn, "Excellent. I am looking to research some of the more unique creatures to Faydwer, and one in particular is fascinating to me. The rust creatures that wander the beach can turn metal into rust in very short order, and then consume the corrosion as sustenance. With all the activity on the docks and what comes up on the beaches, they never seem to have a shortage of food.") +end + +function dlg_1_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "We have a deal, then. I will return soon.", "GiveUnusualPalate") + StartConversation(conversation, NPC, Spawn, "I want to know how they turn metal into rust so quickly. I imagine this has something to do with their saliva, and I want to study it. Bring me a few of their saliva glands, if you can extract them without damaging them. I will, of course, pay you for your time.") +end + +function dlg_8_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "That's interesting, but what does that have to do with me?", "dlg_8_2") + AddConversationOption(conversation, "Well, that is definitely a boon for them. Farewell.") + StartConversation(conversation, NPC, Spawn, "Excellent. I am looking to research some of the more unique creatures to Faydwer, and one in particular is fascinating to me. The rust creatures that wander the beach can turn metal into rust in very short order, and then consume the corrosion as sustenance. With all the activity on the docks and what comes up on the beaches, they never seem to have a shortage of food.") +end + +function dlg_8_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "We have a deal, then. I will return soon.", "dlg_8_3") + StartConversation(conversation, NPC, Spawn, "I want to know how they turn metal into rust so quickly. I imagine this has something to do with their saliva, and I want to study it. Bring me a few of their saliva glands, if you can extract them without damaging them. I will, of course, pay you for your time.") +end + +function dlg_11_1(NPC, Spawn) + SetStepComplete(Spawn, UnusualPalate, 2) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Thanks to you as well. Farewell.") + StartConversation(conversation, NPC, Spawn, "Well, well! This is excellent! I may have to get these back to Gorowyn before I can really study them, but I am certainly looking forward to it. Here is the payment you were promised. My thanks again for your work. Farewell.") +end + +function GiveUnusualPalate(NPC, Spawn) + OfferQuest(NPC, Spawn, UnusualPalate) +end diff --git a/server/SpawnScripts/Butcherblock/SchmittyMcEricson.lua b/server/SpawnScripts/Butcherblock/SchmittyMcEricson.lua new file mode 100644 index 000000000..103da59fe --- /dev/null +++ b/server/SpawnScripts/Butcherblock/SchmittyMcEricson.lua @@ -0,0 +1,160 @@ +--[[ + Script Name : SpawnScripts/Butcherblock/SchmittyMcEricson.lua + Script Author : jakejp + Script Date : 2018.05.29 10:05:02 + Script Purpose : + : +--]] + +require "SpawnScripts/Generic/PlayerHistory" +local SchmittysSandals = 266 + +function spawn(NPC) + ProvidesQuest(NPC, SchmittysSandals) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + local conversation = CreateConversation() + + if HasQuest(Spawn, SchmittysSandals) and GetQuestStep(Spawn, SchmittysSandals) < 6 then + if GetQuestStep(Spawn, SchmittysSandals) == 1 then + --on 1st part of quest + Say(NPC, "Did you get everything on the list? I can't make me new sandals until ye come back with all the parts I need.") + elseif GetQuestStep(Spawn, SchmittysSandals) == 2 then + -- on 2nd part of quest + Say(NPC, "Did you get everything on the list? I can't make me new sandals until ye come back with all the parts I need.") + elseif GetQuestStep(Spawn, SchmittysSandals) == 3 then + --on 3rd part of quest + Say(NPC, "Did you get everything on the list? I can't make me new sandals until ye come back with all the parts I need.") + elseif GetQuestStep(Spawn, SchmittysSandals) == 4 then + --on 4th part of quest + --PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_2_1002.mp3", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Right, anyways I brought back all the parts you need.", "dlg_2_1") + StartConversation(conversation, NPC, Spawn, "Phew! Something smells fishy! Oh, it's you... Sorry.") + elseif GetQuestStep(Spawn, SchmittysSandals) == 5 then + --on 5th part of quest + local time = GetPlayerHistory(Spawn, HISTORY.BB_SCHMITTYSANDALS_STEP5_WAIT) + 300 + if os.time() < time then + Say(NPC, "Sorry, friend. I still haven't finished the sandals. Give me a few more minutes, please.") + elseif os.time() > time then + SetStepComplete(Spawn, SchmittysSandals, 5) + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_1_1002.mp3", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Sounds like a win-win situation to me!") + StartConversation(conversation, NPC, Spawn, "Here you are. Some of me best work! Thanks again for your help. I probably never would have found me old sandals were it not fer you.") + end + + end + elseif HasCompletedQuest(Spawn, SchmittysSandals) then + FaceTarget(NPC, Spawn) + Say(NPC, "I'm so happy I found me old sandals, I could kick them off in a fit of joy.") + + elseif CanReceiveQuest(Spawn, SchmittysSandals) then + AddConversationOption(conversation, "I beg your pardon? I was just saying hello.", "Option1") + StartConversation(conversation, NPC, Spawn, "Oh, what? You wanna fight er somethin'?") + else + local choice = math.random(1,2) + if choice == 1 then + Say(NPC, "Whoops! I almost hit you with my pole. What a tragedy THAT would have been!") + elseif choice == 2 then + Say(NPC, "You don't know me. You think you're better than me?!") + end + end +end + +function Option1(NPC, Spawn) + FaceTarget(NPC, Spawn) + local conversation = CreateConversation() + + AddConversationOption(conversation, "Are the fish not biting?", "Option2") + AddConversationOption(conversation, "Don't blame me. Bye!") + StartConversation(conversation, NPC, Spawn, "Ah, jeez. I'm sorry, friend. I didn't mean ta come at ya like that. You see, I'm just a poor fisherman who's fallen on hard times and is lookin' to blame everyone else for me problems besides meself.") +end + +function Option2(NPC, Spawn) + FaceTarget(NPC, Spawn) + local conversation = CreateConversation() + + AddConversationOption(conversation, "How did you lose them?", "Option3") + StartConversation(conversation, NPC, Spawn, "Oh no, the fishing is great. It's just... well, it may seem silly ta you but... I've gone and lost me sandals.") +end + +function Option3(NPC, Spawn) + FaceTarget(NPC, Spawn) + local conversation = CreateConversation() + + AddConversationOption(conversation, "I see... So, can I help you find them?", "Option4") + StartConversation(conversation, NPC, Spawn, "I dunno! One moment I'm standing here, doin' my job. You know, fishing and making sure the ale hasn't been poisoned. Next thing I know, I'm looking down at my bare feet. Twas the strangest thing.") +end + +function Option4(NPC, Spawn) + FaceTarget(NPC, Spawn) + local conversation = CreateConversation() + + AddConversationOption(conversation, "Alright. What do you need to make the new sandals?", "GiveSchmittysSandals") + AddConversationOption(conversation, "All this talk of ale and fish has gotten me hungry. I must go.") + StartConversation(conversation, NPC, Spawn, "I appreciate the offer friend, but I've looked all over for 'em wit no luck at all. You know... I think I could use your help! I'll just make me some new sandals! Haha!") +end + +function GiveSchmittysSandals(NPC, Spawn) + OfferQuest(NPC, Spawn, SchmittysSandals) +end + + +function Option6(NPC, Spawn) + FaceTarget(NPC, Spawn) + local conversation = CreateConversation() + + AddConversationOption(conversation, "Off I go!") + StartConversation(conversation, NPC, Spawn, "Excellent! All the things I need can be found around this bay. You shouldn't have much trouble finding them.") +end + +function dlg_2_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Remarkable... Though, what am I going to do with all these odd animal parts?", "dlg_2_2") + AddConversationOption(conversation, "Actually, I can believe it. Here are the parts you asked for.") + StartConversation(conversation, NPC, Spawn, "Huh? Ohhhh! For the sandals. Right, right. Well, yer not gonna believe this, but I found me ol' sandals! Turns out they were just buried under a pile o' sand! Haha!") +end + +function dlg_2_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Yeah, why don't you make the sandals anyway. I could always use them.", "dlg_2_3") + StartConversation(conversation, NPC, Spawn, "Well, no sense in lettin' it all go ta waste now, right?") +end + +function dlg_2_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "This is going to be a bit. Isn't it?", "dlg_2_4") + StartConversation(conversation, NPC, Spawn, "That's a great idea! Now let's see here. This thread goes through that hole here...") +end + +function dlg_2_4(NPC, Spawn) + SetStepComplete(Spawn, SchmittysSandals, 4) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "I'll be back.", "dlg_2_5") + StartConversation(conversation, NPC, Spawn, "And that connects there... Aye. Come back in a few minutes. I'll have your sandals for you then.") + + +end + +function StillWorking(NPC, Spawn) + FaceTarget(NPC, Spawn) + Say(NPC, "Sorry, friend. I still haven't finished the sandals. Give me a few more minutes, please.") + +end diff --git a/server/SpawnScripts/Butcherblock/TallyTopgallant.lua b/server/SpawnScripts/Butcherblock/TallyTopgallant.lua new file mode 100644 index 000000000..19a1d487a --- /dev/null +++ b/server/SpawnScripts/Butcherblock/TallyTopgallant.lua @@ -0,0 +1,65 @@ +--[[ + Script Name : SpawnScripts/Butcherblock/TallyTopgallant.lua + Script Purpose : Tally Topgallant + Script Author : jakejp + Script Date : 2018.06.02 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +local CaptainSays = 267 + + +function spawn(NPC) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + if HasQuest(Spawn, CaptainSays) and GetQuestStep(Spawn, CaptainSays) == 3 then + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_3_1001.mp3", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Orders from the Cap'n, m'lady!", "dlg_8_1") + AddConversationOption(conversation, "Oh, you caught me! I'll be leaving now.") + StartConversation(conversation, NPC, Spawn, "Aye, wot do we got 'ere? Some land lubber think they can git the drop on ole Tally Topgallant? Ha ha! I think not!") + else + PlayFlavor(NPC, "", "Aye, wot do we got 'ere? Some land lubber think they can git the drop on ole Tally Topgallant? Ha ha! I think not!", "", 1689589577, 4560189, Spawn) + end +end + +function dlg_8_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Cap'n wants you ta lash up an' stow 'afore you batten down the hatches!", "dlg_8_2") + AddConversationOption(conversation, "Cap'n wants you ta stow the hatches 'afore you batten down the lash!", "WrongChoice") + AddConversationOption(conversation, "Cap'n wants you ta lash up the batten 'afore you stow the hatches.", "WrongChoice") + StartConversation(conversation, NPC, Spawn, "Hmph. He best pay me 'afor he can expect me ta take another run aboard that floatin' heap he be callin' a ship. Now then, wot's the Cap'n got ta say ta me?") +end + +function dlg_8_2(NPC, Spawn) + SetStepComplete(Spawn, CaptainSays, 3) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "I'll report back to the Cap'n at once!") + StartConversation(conversation, NPC, Spawn, "Aye, that's wot he always be tellin' me. Day in an' day out. Tell the Cap'n I'll be there promptly. Blimmey, I'm gettin' too old for this 'ere kinda work.") +end + +function WrongChoice(NPC,Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Wait, let me try that again!", "dlg_8_1") + StartConversation(conversation, NPC, Spawn, "Is this some sorta joke? Let me guess, one too many hits wit a belay pin got you all scrambled in yer noggin', right? You ain't talk to no Cap'n I work for! Off wit ye!") +end +--[[ raw_conversations + PlayFlavor(NPC, "", "Aye, wot do we got 'ere? Some land lubber think they can git the drop on ole Tally Topgallant? Ha ha! I think not!", "", 1689589577, 4560189, Spawn) +--]] + diff --git a/server/SpawnScripts/Butcherblock/TalvraeTZyth.lua b/server/SpawnScripts/Butcherblock/TalvraeTZyth.lua new file mode 100644 index 000000000..5afb4f57d --- /dev/null +++ b/server/SpawnScripts/Butcherblock/TalvraeTZyth.lua @@ -0,0 +1,235 @@ +--[[ + Script Name : SpawnScripts/ButcherblockMountains/TalvraeTZyth.lua + Script Purpose : Talvrae T'Zyth + Script Author : jakejp + Script Date : 2018.06.08 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +local TerratrodderChuck = 45400 + +local ForTheDogs = 284 +local AMindOfMyOwn = 294 + +function spawn(NPC) + ProvidesQuest(NPC, ForTheDogs) + ProvidesQuest(NPC, AMindOfMyOwn) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + if HasQuest(Spawn, SeekingBrultenHiltstill) then + -- Start first quest (Add if you don't do this quest from start zone) + -- Add Conversation to complete that side quest + SetStepComplete(Spawn, SeekingBrultenHiltstill, 1) + if HasCompletedQuest(Spawn, ForTheDogs) == false and HasQuest(Spawn, ForTheDogs ) == false and CanReceiveQuest(Spawn, ForTheDogs) then + PlayFlavor(NPC, "talvrae_t_zyth/_exp03/exp03_rgn_butcherblock/talvrae/qst_talvrae_001.mp3", "", "", 4232138815, 4269349384, Spawn) + AddConversationOption(conversation, "Is that so? And what would you rather be doing then, given the chance?", "dlg_8_1") + AddConversationOption(conversation, "Well, this is the job you were given. Farewell.") + StartConversation(conversation, NPC, Spawn, "Collecting samples. A coercer of my talents is sent to Faydwer to collect samples for magical research. This is work that should be relegated to students or apprentices. My abilities have far more practical and advantageous applications.") + end + elseif HasCompletedQuest(Spawn, ForTheDogs) == false and HasQuest(Spawn, ForTheDogs ) == false and CanReceiveQuest(Spawn, ForTheDogs) then + -- Offer For the Dogs if not completed or started + PlayFlavor(NPC, "talvrae_t_zyth/_exp03/exp03_rgn_butcherblock/talvrae/qst_talvrae_001.mp3", "", "", 4232138815, 4269349384, Spawn) + AddConversationOption(conversation, "Is that so? And what would you rather be doing then, given the chance?", "dlg_8_1") + AddConversationOption(conversation, "Well, this is the job you were given. Farewell.") + StartConversation(conversation, NPC, Spawn, "Collecting samples. A coercer of my talents is sent to Faydwer to collect samples for magical research. This is work that should be relegated to students or apprentices. My abilities have far more practical and advantageous applications.") + elseif GetQuestStep(Spawn, ForTheDogs) == 1 then + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_1_1004.mp3", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "I have not found it all just yet. I will return.") + StartConversation(conversation, NPC, Spawn, "Where is the terratrodder meat I need?") + elseif GetQuestStep(Spawn, ForTheDogs) == 2 then + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_1_1004.mp3", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Right here.", "dlg_6_1") + StartConversation(conversation, NPC, Spawn, "Where is the terratrodder meat I need?") + elseif HasCompletedQuest(Spawn, AMindOfMyOwn) == false and HasQuest(Spawn, AMindOfMyOwn) == false and CanReceiveQuest(Spawn, AMindOfMyOwn) then + PlayFlavor(NPC, "talvrae_t_zyth/_exp03/exp03_rgn_butcherblock/talvrae/qst_talvrae_006.mp3", "", "", 2533203842, 1528968842, Spawn) + AddConversationOption(conversation, "I understand. What happens once they eat the food?", "dlg_7_1") + AddConversationOption(conversation, "I have other things to do at the moment. Farewell.") + StartConversation(conversation, NPC, Spawn, "There, I have completed my task, and now it is your turn. You want to take this bowl of food to the Yapsnarl camp, and place it nearby one of the kobolds there. Do not let him see you, or he will probably just ignore the dish and try to eat you instead... and if that happens, you probably deserve it. If no kobold comes to eat it, pick it back up and move it somewhere else. If one of them does not eat the food in here, you cannot run the test.") + elseif GetQuestStep(Spawn, AMindOfMyOwn) == 1 then + if HasItem(Spawn, TerratrodderChuck) == false then + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_3_1047.mp3", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "The bait was lost. Might you have another?", "MoreBait") + AddConversationOption(conversation, "I'm not quite finished yet. I will return soon.") + StartConversation(conversation, NPC, Spawn, "Tell me how the experiment is going.") + else + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_3_1047.mp3", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "I'm not quite finished yet. I will return soon.") + StartConversation(conversation, NPC, Spawn, "Tell me how the experiment is going.") + end + end + + + + --PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_2_1047.mp3", "", "", 0, 0, Spawn) + --AddConversationOption(conversation, "Right here.", "dlg_6_1") +-- StartConversation(conversation, NPC, Spawn, "Where is the bear meat I need?") + + if convo==14 then + PlayFlavor(NPC, "talvrae_t_zyth/_exp03/exp03_rgn_butcherblock/talvrae/qst_talvrae_006.mp3", "", "", 2533203842, 1528968842, Spawn) + AddConversationOption(conversation, "I understand. What happens once they eat the food?", "dlg_14_1") + AddConversationOption(conversation, "I have other things to do at the moment. Farewell.") + StartConversation(conversation, NPC, Spawn, "There, I have completed my task, and now it is your turn. You want to take this bowl of food to the Yapsnarl camp, and place it nearby one of the kobolds there. Do not let him see you, or he will probably just ignore the dish and try to eat you instead... and if that happens, you probably deserve it. If no kobold comes to eat it, pick it back up and move it somewhere else. If one of them does not eat the food in here, you cannot run the test.") + end + + if convo==15 then + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_3_1047.mp3", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Everything seems to have gone as you predicted.", "dlg_15_1") + StartConversation(conversation, NPC, Spawn, "Tell me how the experiment is going.") + end + + if convo==23 then + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_3_1047.mp3", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Hulis sent me here. He said that you might be looking for some help.", "dlg_23_1") + StartConversation(conversation, NPC, Spawn, "I don’t remember calling for you. What is it you need?") + end + +end + +function dlg_6_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + SetStepComplete(Spawn, ForTheDogs, 2) + PlayFlavor(NPC, "talvrae_t_zyth/_exp03/exp03_rgn_butcherblock/talvrae/qst_talvrae_005.mp3", "", "", 2314822935, 2368990546, Spawn) + AddConversationOption(conversation, "As long as there's more pay, I'll be right here.") + StartConversation(conversation, NPC, Spawn, "Ah, you have done well! This should be exactly what I need to execute the experiment... well, aside from a little more help from you, that is. Now, if you will excuse me a moment, I will prepare this for the next step in my plan.") +end + +function dlg_7_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "talvrae_t_zyth/_exp03/exp03_rgn_butcherblock/talvrae/qst_talvrae_007.mp3", "", "", 3385211924, 1859135719, Spawn) + AddConversationOption(conversation, "Okay, so, feed this to a kobold, and it will suddenly follow me around? Are you sure about this?", "GiveAMindOfMyOwn") + AddConversationOption(conversation, "I'm not sure I feel like hand-feeding kobolds at the moment. Farewell.") + StartConversation(conversation, NPC, Spawn, "The food is enchanted to make the kobolds open to suggestion, and should make them follow your commands without question. Once a kobold has eaten the food, I want you to try to get him to attack and kill his own packmates. If he will do that, then I will know that I have complete control over the creature, and I will consider the experiment a success.") +end + +function dlg_7_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "talvrae_t_zyth/_exp03/exp03_rgn_butcherblock/talvrae/qst_talvrae_008.mp3", "", "", 1081612079, 3658293484, Spawn) + AddConversationOption(conversation, "I see. Well then, I will return and let you know how things went.", "dlg_7_3") + StartConversation(conversation, NPC, Spawn, "While I have no reason to question my own magic craft, I don't know how well the enchantment will work on what is essentially a simple creature. It might just go primal and attack everything nearby, or might just run off to the hills. I wouldn't attempt walking too far from the camp this time, as I don't know how long the enchantment will last.") +end + +function dlg_8_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "talvrae_t_zyth/_exp03/exp03_rgn_butcherblock/talvrae/qst_talvrae_002.mp3", "", "", 201730222, 3203333132, Spawn) + AddConversationOption(conversation, "So I take it that you have a plan, then?", "dlg_8_2") + AddConversationOption(conversation, "That may be true, but that's not your choice to make. Good luck with your work. Goodbye.") + StartConversation(conversation, NPC, Spawn, "Well, I see the need for study. But why would we be picking flowers and collecting stones when we could be instead learning more about the lesser races and creatures that now inhabit this land. Who they are, what they live like... what their weaknesses are. This information would be far more useful to the Teir'Dal than the latent magic properties of flower petals.") +end + +function dlg_8_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "talvrae_t_zyth/_exp03/exp03_rgn_butcherblock/talvrae/qst_talvrae_003.mp3", "", "", 1922846233, 313729102, Spawn) + AddConversationOption(conversation, "Sounds interesting. I might be willing to help, if there is pay involved. What is it you are proposing?", "GiveForTheDogs") + AddConversationOption(conversation, "I'm not here to do your dirty work. Good day to you.") + StartConversation(conversation, NPC, Spawn, "Indeed I do, but I will need help to execute it. You see, I still have my assigned work, and thanks to my... partner here, I can't really abandon my duties. However, if you could provide me with some assistance, we can together test a theory I have. I will need several pounds of bear meat to begin with. The meat needs to be fresh, so I would prefer if the meat came from nearby bears.") +end + +function dlg_14_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "talvrae_t_zyth/_exp03/exp03_rgn_butcherblock/talvrae/qst_talvrae_007.mp3", "", "", 3385211924, 1859135719, Spawn) + AddConversationOption(conversation, "Okay, so, feed this to a kobold, and it will suddenly follow me around? Are you sure about this?", "dlg_14_2") + AddConversationOption(conversation, "I'm not sure I feel like hand-feeding kobolds at the moment. Farewell.") + StartConversation(conversation, NPC, Spawn, "The food is enchanted to make the kobolds open to suggestion, and should make them follow your commands without question. Once a kobold has eaten the food, I want you to try to get him to attack and kill his own packmates. If he will do that, then I will know that I have complete control over the creature, and I will consider the experiment a success.") +end + +function dlg_14_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "talvrae_t_zyth/_exp03/exp03_rgn_butcherblock/talvrae/qst_talvrae_008.mp3", "", "", 1081612079, 3658293484, Spawn) + AddConversationOption(conversation, "I see. Well then, I will return and let you know how things went.", "dlg_14_3") + StartConversation(conversation, NPC, Spawn, "While I have no reason to question my own magic craft, I don't know how well the enchantment will work on what is essentially a simple creature. It might just go primal and attack everything nearby, or might just run off to the hills. I wouldn't attempt walking too far from the camp this time, as I don't know how long the enchantment will last.") +end + +function dlg_15_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "talvrae_t_zyth/_exp03/exp03_rgn_butcherblock/talvrae/qst_talvrae_009.mp3", "", "", 2505068723, 2862902650, Spawn) + AddConversationOption(conversation, "Err... thanks, I guess.", "dlg_15_2") + StartConversation(conversation, NPC, Spawn, "So it worked then? Not that I had any doubt in my theory, but nonetheless I am glad to hear that it went as I expected. I will work on enhancing the enchantment further, but I can do that on my own. In the meantime, you served me well, and you can be proud of yourself for that. You may go now.") +end + +function dlg_23_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + StartConversation(conversation, NPC, Spawn, "I see – Hulis is being a good little pet. Sending me some help when he knows I have no need of it, but just for my own convenience. Well, I guess since you are here, I can put you to some good. I’ve had just about enough of all of this menial work anyway.") +end + +function dlg_23_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "talvrae_t_zyth/_exp03/exp03_rgn_butcherblock/talvrae/qst_talvrae_001.mp3", "", "", 4232138815, 4269349384, Spawn) + AddConversationOption(conversation, "Is that so? And what would you rather be doing then, given the chance?", "dlg_23_3") + AddConversationOption(conversation, "Well, this is the job you were given. Farewell.") + StartConversation(conversation, NPC, Spawn, "Collecting samples. A coercer of my talents is sent to Faydwer to collect samples for magical research. This is work that should be relegated to students or apprentices. My abilities have far more practical and advantageous applications.") +end + +function dlg_23_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "talvrae_t_zyth/_exp03/exp03_rgn_butcherblock/talvrae/qst_talvrae_002.mp3", "", "", 201730222, 3203333132, Spawn) + AddConversationOption(conversation, "So I take it that you have a plan, then?", "dlg_23_4") + AddConversationOption(conversation, "That may be true, but that's not your choice to make. Good luck with your work. Goodbye.") + StartConversation(conversation, NPC, Spawn, "Well, I see the need for study. But why would we be picking flowers and collecting stones when we could be instead learning more about the lesser races and creatures that now inhabit this land. Who they are, what they live like... what their weaknesses are. This information would be far more useful to the Teir'Dal than the latent magic properties of flower petals.") +end + +function dlg_23_4(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "talvrae_t_zyth/_exp03/exp03_rgn_butcherblock/talvrae/qst_talvrae_003.mp3", "", "", 1922846233, 313729102, Spawn) + AddConversationOption(conversation, "Sounds interesting. I might be willing to help, if there is pay involved. What is it you are proposing?", "dlg_23_5") + AddConversationOption(conversation, "I'm not here to do your dirty work. Good day to you.") + StartConversation(conversation, NPC, Spawn, "Indeed I do, but I will need help to execute it. You see, I still have my assigned work, and thanks to my... partner here, I can't really abandon my duties. However, if you could provide me with some assistance, we can together test a theory I have. I will need several pounds of bear meat to begin with. The meat needs to be fresh, so I would prefer if the meat came from nearby bears.") +end + +function dlg_23_5(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "talvrae_t_zyth/_exp03/exp03_rgn_butcherblock/talvrae/qst_talvrae_004.mp3", "", "", 1310097835, 2111544733, Spawn) + AddConversationOption(conversation, "I'm sure that I can. I'll gather the meat and return soon.", "dlg_23_6") + StartConversation(conversation, NPC, Spawn, "I could not explain the details of exactly what I am doing to the likes of you, for I doubt you would understand it. The only parts important to you are the task, and the result. Can you handle that?") +end + +function MoreBait(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + SummonItem(Spawn, TerratrodderChuck, 1) + + AddConversationOption(conversation, "I'll keep that in mind. Farewell.") + StartConversation(conversation, NPC, Spawn, "I thought you might, so I kept some here with me for that eventuality. Now be more careful with this bowl. I do not have much more.") +end + +function GiveForTheDogs(NPC, Spawn) + OfferQuest(NPC, Spawn, ForTheDogs) +end + +function GiveAMindOfMyOwn(NPC, Spawn) + OfferQuest(NPC, Spawn, AMindOfMyOwn) +end diff --git a/server/SpawnScripts/Butcherblock/ThayvlUlthonis.lua b/server/SpawnScripts/Butcherblock/ThayvlUlthonis.lua new file mode 100644 index 000000000..f714914bf --- /dev/null +++ b/server/SpawnScripts/Butcherblock/ThayvlUlthonis.lua @@ -0,0 +1,103 @@ +--[[ + Script Name : SpawnScripts/ButcherblockMountains/ThayvlUlthonis.lua + Script Purpose : Thayvl Ulthonis + Script Author : jakejp + Script Date : 2018.06.17 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +local StockComponents = 345 + +function spawn(NPC) + ProvidesQuest(NPC, StockComponents) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + if HasCompletedQuest(Spawn, StockComponents) == false and HasQuest(Spawn, StockComponents) == false and CanReceiveQuest(Spawn, StockComponents) == true then + -- Offer first quest if not completed or started + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_1_1008.mp3", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "What are you seeking?", "dlg_5_1") + AddConversationOption(conversation, "Spell components?", "dlg_5_4") + StartConversation(conversation, NPC, Spawn, "A thousand curses on the Master! A mage of my stature shouldn't have to stoop so low as to be forced to collect spell components for his experiments.") + elseif GetQuestStep(Spawn, StockComponents) == 1 then + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_1_1008.mp3", "", "", 0, 0, Spawn) + Say(NPC, "Do not return until you have gathered all the wandering essence dust that I require!") + elseif GetQuestStep(Spawn, StockComponents) == 2 then + SetStepComplete(Spawn, StockComponents, 2) + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_1_1008.mp3", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Indeed.") + AddConversationOption(conversation, "Um, I've actually heard otherwise but... Nevermind.") + StartConversation(conversation, NPC, Spawn, "Good. The Master will be most pleased with me. Perhaps now, after securing his trust I can... well, my plans are of little matter to you. Here take this. Let it not be said that the Teir'Dal do not keep their word.") + elseif HasCompletedQuest(Spawn, StockComponents) == true then + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_1_1008.mp3", "", "", 0, 0, Spawn) + Say(NPC, "Your efforts are appreciated. If the Master demands another cadaver, I'll make sure you're not it.") + end +end + +function dlg_5_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "For a reward I might be able to collect the essence dust for you.", "GiveStockComponents") + AddConversationOption(conversation, "Interesting. What sort of spell is he preparing?", "dlg_5_3") + StartConversation(conversation, NPC, Spawn, "My... benefactor is most insistent that I gather the dust from the wandering essences that meander throughout these mountains. Something about their nature adds to the potency of a spell he is creating.") +end + +function AcceptedDialogue(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "We have a deal. I will return with a large amount of dust shortly.") + StartConversation(conversation, NPC, Spawn, "Hmm. Alright, I might be able to part with a trinket of sorts in exchange for your help. The sooner I have all the material components I've been... asked to bring back, the sooner I can return to... home. Yes, home.") +end + +function dlg_5_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Fine, fine. Though, for a reward I might be able to collect the essence dust for you.", "GiveStockComponents") + StartConversation(conversation, NPC, Spawn, "Many questions should remain unanswered, my friend. I've seen the Master kill people for asking too much. I'll not risk a similar fate in divulging secrets to a newly met adventurer.") +end + +function dlg_5_4(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Yes, I've seen that. What other components are there?", "dlg_5_5") + AddConversationOption(conversation, "Actually, I'm not looking for a lesson on spell casting. What are you out doing out here?", "dlg_5_1") + StartConversation(conversation, NPC, Spawn, "Yes, often times special components are required to cast a spell. As an adventurer you no doubt have come across mages who use verbal components when they cast a spell.") +end + +function dlg_5_5(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Yes, I've seen that. What other components are there?", "dlg_5_6") + AddConversationOption(conversation, "Actually, I'm not looking for a lesson on spell casting. What are you out doing out here?", "dlg_5_1") + StartConversation(conversation, NPC, Spawn, "A mage might also be required to gesture or, more simply put, move one's hands in a particular fashion to complete a spell. This type of component is called a somatic component.") +end + +function dlg_5_6(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "So what sort of component are you gathering?", "dlg_5_1") + StartConversation(conversation, NPC, Spawn, "The third type of component, which happens to be the type I've been sent to these acursed mountains to harvest, is the material type. A pinch of dirt from a particular location, the wing of a shriller, or a gem are all examples.") +end + +function GiveStockComponents(NPC, Spawn) + OfferQuest(NPC, Spawn, StockComponents) +end \ No newline at end of file diff --git a/server/SpawnScripts/Butcherblock/TrapperCoalbear.lua b/server/SpawnScripts/Butcherblock/TrapperCoalbear.lua new file mode 100644 index 000000000..fd2e02eda --- /dev/null +++ b/server/SpawnScripts/Butcherblock/TrapperCoalbear.lua @@ -0,0 +1,82 @@ +--[[ + Script Name : SpawnScripts/ButcherblockMountains/TrapperCoalbear.lua + Script Purpose : Trapper Coalbear + Script Author : jakejp + Script Date : 2018.06.07 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +local TheNumberOneThreatInButcherblock = 265 + +function spawn(NPC) + ProvidesQuest(NPC, TheNumberOneThreatInButcherblock) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + if HasCompletedQuest(Spawn, TheNumberOneThreatInButcherblock) == false and HasQuest(Spawn, TheNumberOneThreatInButcherblock) == false and CanReceiveQuest(Spawn, TheNumberOneThreatInButcherblock) then + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_2_1004.mp3", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Huh?", "dlg_20_4") + AddConversationOption(conversation, "You mean kobolds, right?", "dlg_20_1") + StartConversation(conversation, NPC, Spawn, "Be on the look out! Danger lurks everywhere. I've seen two today already. Ferocious quadrupedal beasts who's insatiable appetite for adventurers like you and me can only be met with an equal disdain!") + elseif GetQuestStep(Spawn, TheNumberOneThreatInButcherblock) == 1 then + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_2_1004.mp3", "", "", 0, 0, Spawn) + Say(NPC, "You're back? Already? No, no no. You couldn't have come clsoe to exterminating nearly enough bears yet. I told you, the threat of bears must be significantly reduced! Now, go!") + elseif GetQuestStep(Spawn, TheNumberOneThreatInButcherblock) == 2 then + SetStepComplete(Spawn, TheNumberOneThreatInButcherblock, 2) + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_3_1004.mp3", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "We can only hope for the best!", "dlg_4_1") + AddConversationOption(conversation, "Um, sure. Right... ") + StartConversation(conversation, NPC, Spawn, "Thanks for your help! Perhaps one day we'll be free from the furry clutches of their terrifying wrath... But for now we must remain vigilant, mindful of our berry patches and cautious when eating outside with family members on beautiful sun-filled days.") + elseif HasCompletedQuest(Spawn, TheNumberOneThreatInButcherblock) == true then + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_2_1004.mp3", "", "", 0, 0, Spawn) + Say(NPC, "Thanks again for your help. May the gods have mercy on us all and deliver us from a bear-filled destiny soon!") + end +end + +function dlg_20_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Bears?", "dlg_20_2") + StartConversation(conversation, NPC, Spawn, "Oh no. Kobolds' pack-like nature, hierarchical command structure and base knowledge of divine magic have nothing on the raw paw-swatting tenacity of a bear! They're like the personification of chaotic evil... in bear form!") +end + +function dlg_20_4(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Bears?", "dlg_20_2") + StartConversation(conversation, NPC, Spawn, "Bears!") +end + +function dlg_20_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Sure... I suppose I could help.", "GiveTheNumberOneThreatInButcherblock") + AddConversationOption(conversation, "Forget it. I have far more important things to do.") + StartConversation(conversation, NPC, Spawn, "Yes, bears. The number one threat in Butcherblock! Tell me, can you help? I may be an accomplished hunter, put on this world with the single purpose of removing all mammalian calamites... But I can't do it all alone. If not for me, could you do it to help protect everyone else?") +end + +function dlg_20_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Will do!", "dlg_20_4") + StartConversation(conversation, NPC, Spawn, "Great! You can get started right away. As I said, I've seen several already. Come see me again when you've significantly reduced the threat of bears in the area!") +end + +function GiveTheNumberOneThreatInButcherblock(NPC, Spawn) + OfferQuest(NPC, Spawn, TheNumberOneThreatInButcherblock) +end diff --git a/server/SpawnScripts/Butcherblock/afaetailor.lua b/server/SpawnScripts/Butcherblock/afaetailor.lua new file mode 100644 index 000000000..c3b0bcc71 --- /dev/null +++ b/server/SpawnScripts/Butcherblock/afaetailor.lua @@ -0,0 +1,21 @@ +--[[ + Script Name : SpawnScripts/Butcherblock/afaetailor.lua + Script Author : jakejp + Script Date : 2018.06.04 07:06:21 + Script Purpose : + : +--]] + +function spawn(NPC) + +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + Say(NPC, "Sorry, can't chat, very busy with a rush order right now. Safe travels!") +end + +function respawn(NPC) + +end + diff --git a/server/SpawnScripts/Butcherblock/agriffintamer.lua b/server/SpawnScripts/Butcherblock/agriffintamer.lua new file mode 100644 index 000000000..337af1813 --- /dev/null +++ b/server/SpawnScripts/Butcherblock/agriffintamer.lua @@ -0,0 +1,52 @@ +--[[ + Script Name : SpawnScripts/Butcherblock/agriffintamer.lua + Script Purpose : a griffin tamer + Script Author : jakejp + Script Date : 2018.06.01 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +local GriffinStationsButcherblock = 269 + +function spawn(NPC) + ProvidesQuest(NPC, GriffinStationsButcherblock) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + +if CanReceiveQuest(Spawn, GriffinStationsButcherblock) then + -- Start Quest + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_2_1042.mp3", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "I would like to travel.", "dlg_4_1") + AddConversationOption(conversation, "I am fine staying here, thanks.") + StartConversation(conversation, NPC, Spawn, "Greetings traveler, how can I assist you today?") + elseif HasQuest(Spawn, GriffinStationsButcherblock) and GetQuestStep(Spawn, GriffinStationsButcherblock) < 3 then + -- Still on quest + Say(NPC, "Did you discover all of the routes yet?") + elseif HasCompletedQuest(Spawn, GriffinStationsButcherblock) then + -- Finished Quest + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_2_1042.mp3", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "I would like to travel.", "dlg_1_1") + AddConversationOption(conversation, "Nowhere.") + StartConversation(conversation, NPC, Spawn, "Greetings traveler, how can I assist you today?") + end +end + +function dlg_4_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "That makes sense.", "GiveGriffinStationsButcherblock") + StartConversation(conversation, NPC, Spawn, "Well, before I can send you off you must discover the routes for yourself. There are stations near the docks, Greater Faydark and Lesser Faydark. Once you map the location of each you can borrow one of our griffons. We have to be sure you won't get lost up there.") +end + +function GiveGriffinStationsButcherblock(NPC, Spawn) + OfferQuest(NPC, Spawn, GriffinStationsButcherblock) +end \ No newline at end of file diff --git a/server/SpawnScripts/Butcherblock/agriffontamer.lua b/server/SpawnScripts/Butcherblock/agriffontamer.lua new file mode 100644 index 000000000..db5bf15a9 --- /dev/null +++ b/server/SpawnScripts/Butcherblock/agriffontamer.lua @@ -0,0 +1,152 @@ +--[[ + Script Name : SpawnScripts/Butcherblock/agriffintamer.lua + Script Purpose : a griffin tamer (1080164) + Script Author : Neatz09 + Script Date : 4/17/2019 + Script Notes : +--]] + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_2_1042.mp3", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "I would like to travel.", "dlg_1_1") + AddConversationOption(conversation, "Nowhere.") + StartConversation(conversation, NPC, Spawn, "Greetings traveler, how can I assist you today?") + end + +function dlg_1_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + local con = CreateConversation() + + if GetSpawnLocationID(NPC) == 72449 then + --Docks-- + AddConversationOption(con, "To Greater Faydark.", "DocksToGFay") + AddConversationOption(con, "To The Highland Station.", "DocksToHigh") + AddConversationOption(con, "To Lesser Faydark.", "DocksToLFay") + elseif GetSpawnLocationID(NPC) == 1586031 then + --Greater Faydark-- + AddConversationOption(con, "To The Docks.", "GfayToDocks") + AddConversationOption(con, "To The Highland Station.", "GFayToHigh") + AddConversationOption(con, "To Lesser Faydark.", "GfayToLFay") + elseif GetSpawnLocationID(NPC) == 72602 then + --Highland-- + AddConversationOption(con, "To The Docks.", "HighToDocks") + elseif GetSpawnLocationID(NPC) == 72601 then + --Lesser Faydark-- + AddConversationOption(con, "To The Docks.", "LFayToDocks") + AddConversationOption(con, "To Greater Faydark.", "LFayToGFay") + AddConversationOption(con, "To The Highland Station.", "LFayToHigh") + else + PlayFlavor(NPC, "", "Not implemented yet!", "cry", 0, 0, Spawn) + end + AddConversationOption(con, "Nowhere.") + StartConversation(con, NPC, Spawn, "Where to?") +end + +function DocksToGFay(NPC, Spawn) + StartAutoMount(Spawn, 241) + SetMount(Spawn, 225) +end + +function DocksToHigh(NPC, Spawn) + StartAutoMount(Spawn, 238) + SetMount(Spawn, 225) +end + +function DocksToLFay(NPC, Spawn) + StartAutoMount(Spawn, 242) + SetMount(Spawn, 225) +end + +function GfayToDocks(NPC, Spawn) + StartAutoMount(Spawn, 231) + SetMount(Spawn, 225) +end + +function GFayToHigh(NPC, Spawn) + StartAutoMount(Spawn, 232) + SetMount(Spawn, 225) +end + +function GfayToLFay(NPC, Spawn) + StartAutoMount(Spawn, 243) + SetMount(Spawn, 225) +end + +function HighToDocks(NPC, Spawn) + StartAutoMount(Spawn, 228) + SetMount(Spawn, 225) +end + +function LFayToDocks(NPC, Spawn) + StartAutoMount(Spawn, 240) + SetMount(Spawn, 225) +end + +function LFayToGFay(NPC, Spawn) + StartAutoMount(Spawn, 239) + SetMount(Spawn, 225) +end + +function LFayToHigh(NPC, Spawn) + StartAutoMount(Spawn, 233) + SetMount(Spawn, 225) +end + +--[[Replaced script + Script Name : SpawnScripts/Butcherblock/agriffintamer.lua + Script Purpose : a griffin tamer + Script Author : jakejp + Script Date : 2018.06.01 + Script Notes : Auto-Generated Conversation from PacketParser Data + + +local GriffinStationsButcherblock = 269 + +function spawn(NPC) + ProvidesQuest(NPC, GriffinStationsButcherblock) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + if CanReceiveQuest(Spawn, GriffinStationsButcherblock) then + -- Start Quest + -- PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_2_1042.mp3", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "I would like to travel.", "dlg_4_1") + AddConversationOption(conversation, "I am fine staying here, thanks.") + StartConversation(conversation, NPC, Spawn, "Greetings traveler, how can I assist you today?") + elseif HasQuest(Spawn, GriffinStationsButcherblock) and GetQuestStep(Spawn, GriffinStationsButcherblock) < 3 then + -- Still on quest + Say(NPC, "Did you discover all of the routes yet?") + elseif HasCompletedQuest(Spawn, GriffinStationsButcherblock) then + -- Finished Quest + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_2_1042.mp3", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "I would like to travel.", "dlg_1_1") + AddConversationOption(conversation, "Nowhere.") + StartConversation(conversation, NPC, Spawn, "Greetings traveler, how can I assist you today?") + end +end + +function dlg_4_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "That makes sense.", "GiveGriffinStationsButcherblock") + StartConversation(conversation, NPC, Spawn, "Well, before I can send you off you must discover the routes for yourself. There are stations near the docks, Greater Faydark and Lesser Faydark. Once you map the location of each you can borrow one of our griffons. We have to be sure you won't get lost up there.") +end + +function GiveGriffinStationsButcherblock(NPC, Spawn) + OfferQuest(NPC, Spawn, GriffinStationsButcherblock) +end--]] \ No newline at end of file diff --git a/server/SpawnScripts/Butcherblock/apatchofpuresoil.lua b/server/SpawnScripts/Butcherblock/apatchofpuresoil.lua new file mode 100644 index 000000000..432cbea8c --- /dev/null +++ b/server/SpawnScripts/Butcherblock/apatchofpuresoil.lua @@ -0,0 +1,34 @@ +--[[ + Script Name : SpawnScripts/Butcherblock/apatchofpuresoil.lua + Script Author : jakejp + Script Date : 2018.06.13 09:06:04 + Script Purpose : + : +--]] + +local DiggingInTheYard = 313 + +function spawn(NPC) + AddSpawnAccess(NPC, NPC) + SetPlayerProximityFunction(NPC, 40, "CheckQuest", "CheckQuest") + SetRequiredQuest(NPC, DiggingInTheYard, 1) + +end + +function casted_on(Target, Caster, SpellName) + if SpellName == "gather" and GetQuestStep(Caster, DiggingInTheYard) == 1 then + Despawn(Target) + end +end + +function respawn(NPC) + spawn(NPC) +end + +function CheckQuest(NPC, Player) + if HasQuest(Player, DiggingInTheYard) and GetQuestStep(Player, DiggingInTheYard) == 1 then + AddSpawnAccess(NPC, Player) + else + RemoveSpawnAccess(NPC, Player) + end +end \ No newline at end of file diff --git a/server/SpawnScripts/Butcherblock/qsttalvraesbowl.lua b/server/SpawnScripts/Butcherblock/qsttalvraesbowl.lua new file mode 100644 index 000000000..2751edad5 --- /dev/null +++ b/server/SpawnScripts/Butcherblock/qsttalvraesbowl.lua @@ -0,0 +1,42 @@ +--[[ + Script Name : SpawnScripts/Butcherblock/qsttalvraesbowl.lua + Script Author : jakejp + Script Date : 2018.06.10 06:06:14 + Script Purpose : + : +--]] + +Whelp_SpawnIDs = {1080383, 1080612, 1080701, 1081148, 1081151, 1081154} +local whelp = nil +local five_minutes_ms = 5 * 60000 +local AMindOfMyOwn = 294 + +function spawn(NPC) + AddTimer(NPC, 500, "QuestCheckLoop") + AddTimer(NPC, five_minutes_ms, "Despawn") +end + +function QuestCheckLoop(NPC) + AddTimer(NPC, 500, "QuestCheckLoop") + local Player = GetTempVariable(NPC, "PlayerPointer") + if Player == nil then + return + end + + for index, id in ipairs(Whelp_SpawnIDs) do + whelp = GetSpawn(NPC, id) + if whelp ~= nil and GetDistance(NPC, whelp) < 20 then + break + else + whelp = nil + end + end + + if whelp ~= nil then + Charm(Player, whelp) + if GetQuestStep(Player, AMindOfMyOwn) == 1 then + SetStepComplete(Player, AMindOfMyOwn, 1) + end + end +end + diff --git a/server/SpawnScripts/Butcherblock/questhighpebbletome.lua b/server/SpawnScripts/Butcherblock/questhighpebbletome.lua new file mode 100644 index 000000000..2867796f1 --- /dev/null +++ b/server/SpawnScripts/Butcherblock/questhighpebbletome.lua @@ -0,0 +1,30 @@ +--[[ + Script Name : SpawnScripts/Butcherblock/questhighpebbletome.lua + Script Author : jakejp + Script Date : 2018.06.02 09:06:56 + Script Purpose : + : +--]] + +local NauticalDisaster = 252 + +function spawn(NPC) + SetRequiredQuest(NPC, NauticalDisaster, 1) +end + +function casted_on(Target, Caster, SpellName) + if SpellName == "Take the tome" then + if GetQuestStep(Caster, NauticalDisaster) == 1 then + SetStepComplete(Caster, NauticalDisaster, 1) + end + end +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) +end + +function respawn(NPC) + spawn(NPC) +end + diff --git a/server/SpawnScripts/Castleview/AadalianFarenair.lua b/server/SpawnScripts/Castleview/AadalianFarenair.lua new file mode 100644 index 000000000..a2a33ba0f --- /dev/null +++ b/server/SpawnScripts/Castleview/AadalianFarenair.lua @@ -0,0 +1,19 @@ +--[[ + Script Name : SpawnScripts/Castleview/AadalianFarenair.lua + Script Purpose : Aadalian Farenair + Script Author : Scatman + Script Date : 2009.10.02 + Script Notes : +--]] + +function spawn(NPC) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + PlayFlavor(NPC, "voiceover/english/highelf_base_1/ft/highelf/highelf_base_1_1_garbled_gm_755db2c3.mp3", "garbled text not to be translated", "", 2766992983, 3224256482) +end \ No newline at end of file diff --git a/server/SpawnScripts/Castleview/ApprenticeBoggi.lua b/server/SpawnScripts/Castleview/ApprenticeBoggi.lua new file mode 100644 index 000000000..01c89e4bf --- /dev/null +++ b/server/SpawnScripts/Castleview/ApprenticeBoggi.lua @@ -0,0 +1,23 @@ +--[[ + Script Name : SpawnScripts/Castleview/ApprenticeBoggi.lua + Script Purpose : Apprentice Boggi + Script Author : Scatman + Script Date : 2009.10.03 + Script Notes : +--]] + +function spawn(NPC) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/apprentice_boggi/qey_village04/apprenticeboggi.mp3", "", "", 1068299089, 2686342617) + AddConversationOption(conversation, "I think I'll let you get back to resting your \"injury.\" Good bye.") + StartConversation(conversation, NPC, Spawn, "Oh! Hello! I wasn't... um... napping. I was just resting my injured leg. That's it!") +end \ No newline at end of file diff --git a/server/SpawnScripts/Castleview/ArmsdealerFroptub.lua b/server/SpawnScripts/Castleview/ArmsdealerFroptub.lua new file mode 100644 index 000000000..365817a22 --- /dev/null +++ b/server/SpawnScripts/Castleview/ArmsdealerFroptub.lua @@ -0,0 +1,19 @@ +--[[ + Script Name : SpawnScripts/Castleview/ArmsdealerFroptub.lua + Script Purpose : Armsdealer Froptub + Script Author : Scatman + Script Date : 2009.10.03 + Script Notes : +--]] + +function spawn(NPC) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + PlayFlavor(NPC, "voiceover/english/armsdealer_froptub/qey_village04/100_armsdealer_froptub_multhail1_14614e12.mp3", "Graciously accept my pardon for I am a quite the bit busy. Mayhaps I couldst speak with thee anon?", "", 1509622466, 1792291092, Spawn) +end \ No newline at end of file diff --git a/server/SpawnScripts/Castleview/Bhalastia.lua b/server/SpawnScripts/Castleview/Bhalastia.lua new file mode 100644 index 000000000..cdf049737 --- /dev/null +++ b/server/SpawnScripts/Castleview/Bhalastia.lua @@ -0,0 +1,21 @@ +--[[ + Script Name : SpawnScripts/Castleview/Bhalastia.lua + Script Purpose : Bhalastia + Script Author : Scatman + Script Date : 2009.10.03 + Script Notes : +--]] + +dofile("SpawnScripts/Generic/GenericMerchantVoiceOvers.lua") + +function spawn(NPC) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + GenericMerchantHail(NPC, Spawn) +end \ No newline at end of file diff --git a/server/SpawnScripts/Castleview/Bleemeb.lua b/server/SpawnScripts/Castleview/Bleemeb.lua new file mode 100644 index 000000000..632c0a617 --- /dev/null +++ b/server/SpawnScripts/Castleview/Bleemeb.lua @@ -0,0 +1,21 @@ +--[[ + Script Name : SpawnScripts/Castleview/Bleemeb.lua + Script Purpose : Bleemeb + Script Author : Jabantiz + Script Date : 4/24/2017 + Script Notes : Old script was just a note to collect on live so gave a generic merchant script. +--]] + +dofile("SpawnScripts/Generic/GenericMerchantVoiceOvers.lua") + +function spawn(NPC) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + GenericMerchantHail(NPC, Spawn) +end \ No newline at end of file diff --git a/server/SpawnScripts/Castleview/Bubbler.lua b/server/SpawnScripts/Castleview/Bubbler.lua new file mode 100644 index 000000000..bd99a5a55 --- /dev/null +++ b/server/SpawnScripts/Castleview/Bubbler.lua @@ -0,0 +1,21 @@ +--[[ + Script Name : SpawnScripts/Castleview/Bubbler.lua + Script Purpose : Bubbler + Script Author : Scatman + Script Date : 2009.10.03 + Script Notes : +--]] + +dofile("SpawnScripts/Generic/GenericMerchantVoiceOvers.lua") + +function spawn(NPC) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + GenericMerchantHail(NPC, Spawn) +end \ No newline at end of file diff --git a/server/SpawnScripts/Castleview/Bulurg.lua b/server/SpawnScripts/Castleview/Bulurg.lua new file mode 100644 index 000000000..9fc14eb44 --- /dev/null +++ b/server/SpawnScripts/Castleview/Bulurg.lua @@ -0,0 +1,21 @@ +--[[ + Script Name : SpawnScripts/Castleview/Bulurg.lua + Script Purpose : Bulurg + Script Author : Scatman + Script Date : 2009.10.03 + Script Notes : +--]] + +dofile("SpawnScripts/Generic/GenericBartenderVoiceOvers.lua") + +function spawn(NPC) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + GenericBartenderHail(NPC, Spawn) +end \ No newline at end of file diff --git a/server/SpawnScripts/Castleview/BupipaGuryup.lua b/server/SpawnScripts/Castleview/BupipaGuryup.lua new file mode 100644 index 000000000..8e67212c5 --- /dev/null +++ b/server/SpawnScripts/Castleview/BupipaGuryup.lua @@ -0,0 +1,27 @@ +--[[ + Script Name : SpawnScripts/Castleview/BupipaGuryup.lua + Script Purpose : Bupipa Guryup + Script Author : Scatman + Script Date : 2009.10.03 + Script Notes : +--]] + +dofile("SpawnScripts/Generic/GenericVoiceOvers.lua") + +function spawn(NPC) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + GenericHail(NPC, Spawn) + local choice = math.random(1, 2) + if choice == 1 then + PlayFlavor(NPC, "", "The sounds of the swamp are sweet to hear! FROAK! FROAK FROAK! The bugs so sweet it brings a tear! FROAK! FROAK FROOOOAAAAKKK! ", "orate", 0, 0, Spawn) + elseif choice == 2 then + PlayFlavor(NPC, "", "Graciously accept my pardon for I am a quite the bit busy. Mayhaps I couldst speak with thee anon?", "fullcurtsey", 0, 0, Spawn) + end +end \ No newline at end of file diff --git a/server/SpawnScripts/Castleview/CarpenterGoroop.lua b/server/SpawnScripts/Castleview/CarpenterGoroop.lua new file mode 100644 index 000000000..e9f6a6009 --- /dev/null +++ b/server/SpawnScripts/Castleview/CarpenterGoroop.lua @@ -0,0 +1,24 @@ +--[[ + Script Name : SpawnScripts/Castleview/CarpenterGoroop.lua + Script Purpose : Carpenter Goroop + Script Author : Scatman + Script Date : 2009.10.03 + Script Notes : +--]] + +function spawn(NPC) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/carpenter_goroop/qey_village04/newbie_path_froglok/carpentergoroop007.mp3", "", "", 437901215, 87177442) + AddConversationOption(conversation, "Indeed. I hope you enjoy it!") + AddConversationOption(conversation, "I have no time to talk, as I am on a task.") + StartConversation(conversation, NPC, Spawn, "Hail! 'Tis a great day!") +end \ No newline at end of file diff --git a/server/SpawnScripts/Castleview/Cilindari.lua b/server/SpawnScripts/Castleview/Cilindari.lua new file mode 100644 index 000000000..e34cec897 --- /dev/null +++ b/server/SpawnScripts/Castleview/Cilindari.lua @@ -0,0 +1,31 @@ +--[[ + Script Name : SpawnScripts/Castleview/Cilindari.lua + Script Purpose : Cilindari + Script Author : Scatman + Script Date : 2009.10.03 + Script Notes : +--]] + +dofile("SpawnScripts/Generic/GenericAlchemistVoiceOvers.lua") + +function spawn(NPC) + SetPlayerProximityFunction(NPC, 10, "InRange", "LeaveRange") +end + +function respawn(NPC) + spawn(NPC) +end + +function InRange(NPC, Spawn) + if math.random(0, 100) <= 25 then + GenericAlchemistHail(NPC, Spawn) + end +end + +function LeaveRange(NPC, Spawn) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + GenericAlchemistHail(NPC, Spawn) +end diff --git a/server/SpawnScripts/Castleview/Cinaldar.lua b/server/SpawnScripts/Castleview/Cinaldar.lua new file mode 100644 index 000000000..5c1a4c0fa --- /dev/null +++ b/server/SpawnScripts/Castleview/Cinaldar.lua @@ -0,0 +1,29 @@ +--[[ + Script Name : SpawnScripts/Castleview/Cinaldar.lua + Script Purpose : Cinaldar + Script Author : Scatman + Script Date : 2009.09.25 + Script Notes : +--]] + +dofile("SpawnScripts/Generic/GenericGuardVoiceOvers.lua") + +function spawn(NPC) + SetPlayerProximityFunction(NPC, 10, "InRange", "LeaveRange") +end + +function respawn(NPC) + spawn(NPC) +end + +function InRange(NPC, Spawn) + CheckFaction(NPC, Spawn, "Qeynos") +end + +function LeaveRange(NPC, Spawn) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + GenericGuardHail(NPC, Spawn) +end diff --git a/server/SpawnScripts/Castleview/CorruptedGreenWisp.lua b/server/SpawnScripts/Castleview/CorruptedGreenWisp.lua new file mode 100644 index 000000000..c28a806f6 --- /dev/null +++ b/server/SpawnScripts/Castleview/CorruptedGreenWisp.lua @@ -0,0 +1,41 @@ +--[[ + Script Name : SpawnScripts/Castleview/CorruptedGreenWisp.lua + Script Purpose : CorruptedGreenWisp + Script Author : Scatman + Script Date : 2009.10.02 + Script Notes : +--]] + +local HIGH_ELF_MENTOR_QUEST_3 = 225 + +function spawn(NPC) + AddSpawnAccess(NPC, NPC) + --SetRequiredQuest(NPC, HIGH_ELF_MENTOR_QUEST_3, 2) + SetPlayerProximityFunction(NPC, 10, "InRange", "LeaveRange") +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) +end + +function casted_on(Target, Caster, SpellName) + if HasQuest(Caster, HIGH_ELF_MENTOR_QUEST_3) and GetQuestStep(Caster, HIGH_ELF_MENTOR_QUEST_3) == 2 and SpellName == "Cleanse" then + SetStepComplete(Caster, HIGH_ELF_MENTOR_QUEST_3, 2) + local devious_sunshimmer_sprite = SpawnMob(GetZone(Target), 2360058, false, 710.408, -15.5306, -161.493, 200) + AddHate(Caster, devious_sunshimmer_sprite, 100) + RemoveSpawnAccess(Target, Caster) + --Despawn(Target, 180000) + end +end + +function InRange(NPC, Spawn) + if HasQuest(Spawn, HIGH_ELF_MENTOR_QUEST_3) and GetQuestStep(Spawn, HIGH_ELF_MENTOR_QUEST_3) == 2 then + AddSpawnAccess(NPC, Spawn) + end +end + +function LeaveRange(NPC, Spawn) +end \ No newline at end of file diff --git a/server/SpawnScripts/Castleview/Dalonalis.lua b/server/SpawnScripts/Castleview/Dalonalis.lua new file mode 100644 index 000000000..ed19d67d1 --- /dev/null +++ b/server/SpawnScripts/Castleview/Dalonalis.lua @@ -0,0 +1,23 @@ +--[[ + Script Name : SpawnScripts/Castleview/Dalonalis.lua + Script Purpose : Dalonalis + Script Author : Scatman + Script Date : 2009.10.03 + Script Notes : +--]] + +function spawn(NPC) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/banker_dalonalis/qey_village04/banker_dalonalis001.mp3", "", "", 2898017630, 956866327) + AddConversationOption(conversation, "I have all the trust in you.") + StartConversation(conversation, NPC, Spawn, "Good day to you, adventurer. Your valuables will be safe in our vaults, I promise you that.") +end \ No newline at end of file diff --git a/server/SpawnScripts/Castleview/DaylenaTelanthis.lua b/server/SpawnScripts/Castleview/DaylenaTelanthis.lua new file mode 100644 index 000000000..bf76a22f6 --- /dev/null +++ b/server/SpawnScripts/Castleview/DaylenaTelanthis.lua @@ -0,0 +1,44 @@ +--[[ + Script Name : SpawnScripts/Castleview/DaylenaTelanthis.lua + Script Purpose : Daylena Telanthis + Script Author : Scatman + Script Date : 2009.10.03 + Script Notes : +--]] + +function spawn(NPC) + SetPlayerProximityFunction(NPC, 10, "InRange", "LeaveRange") +end + +function respawn(NPC) + spawn(NPC) +end + +function InRange(NPC, Spawn) + if math.random(0, 100) <= 25 then + Talk(NPC, Spawn) + end +end + +function LeaveRange(NPC, Spawn) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + Talk(NPC, Spawn) +end + +function Talk(NPC, Spawn) + local choice = math.random(1, 5) + if choice == 1 then + PlayFlavor(NPC, "voiceover/english/highelf_eco_good_concordium/ft/eco/good/highelf_eco_good_concordium_hail_gf_15aa4eed.mp3", "Those who have neither the abilities nor the aspirations to pursue the intellectual arts will find a home at the Ironforge Exchange.", "", 523104392, 3732258776, Spawn) + elseif choice == 2 then + PlayFlavor(NPC, "voiceover/english/highelf_eco_good_concordium/ft/eco/good/highelf_eco_good_concordium_hail_gf_4121a9b2.mp3", "The Concordium uses ancient and forgotten knowledge to protect us from the shadows that surround Qeynos.", "", 1945306751, 352506246, Spawn) + elseif choice == 3 then + PlayFlavor(NPC, "voiceover/english/highelf_eco_good_concordium/ft/eco/good/highelf_eco_good_concordium_hail_gf_88bbd1aa.mp3", "The Tunarian Alliance does not see the greater issues beyond individual evils. Their forests might be scorched wastelands and they would still be fending off poachers.", "", 3133325899, 3316523299, Spawn) + elseif choice == 4 then + PlayFlavor(NPC, "voiceover/english/highelf_eco_good_concordium/ft/eco/good/highelf_eco_good_concordium_hail_gf_987a9a3c.mp3", "While the Celestial Watch futilely awaits word from its forgotten gods the Concordium has harnessed the true power that blazes within each of us.", "", 3806603086, 3205979382, Spawn) + elseif choice == 5 then + PlayFlavor(NPC, "voiceover/english/highelf_eco_good_concordium/ft/eco/good/highelf_eco_good_concordium_hail_gf_b52cd580.mp3", "The Qeynos Guard cannot defend us from dark forces it neither sees nor understands.", "", 1941375851, 1104708565, Spawn) + end +end diff --git a/server/SpawnScripts/Castleview/DolthyryrHelyanwe.lua b/server/SpawnScripts/Castleview/DolthyryrHelyanwe.lua new file mode 100644 index 000000000..a929e7e56 --- /dev/null +++ b/server/SpawnScripts/Castleview/DolthyryrHelyanwe.lua @@ -0,0 +1,24 @@ +--[[ + Script Name : SpawnScripts/Castleview/DolthyryrHelyanwe.lua + Script Purpose : Dolthyryr Helyanwe + Script Author : Scatman + Script Date : 2009.10.03 + Script Notes : +--]] + +function spawn(NPC) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/dolthyryr_helyanwe/qey_village04/newbie_path_froglok/dolthyryrhelyanwe004.mp3", "", "", 848573287, 2779070481) + AddConversationOption(conversation, "Indeed, for at least those within the walls.") + AddConversationOption(conversation, "Rather beautiful, I would agree.") + StartConversation(conversation, NPC, Spawn, "Another glorious day in the city of Qeynos, wouldn't you agree?") +end \ No newline at end of file diff --git a/server/SpawnScripts/Castleview/EireneithAlannia.lua b/server/SpawnScripts/Castleview/EireneithAlannia.lua new file mode 100644 index 000000000..87756620d --- /dev/null +++ b/server/SpawnScripts/Castleview/EireneithAlannia.lua @@ -0,0 +1,22 @@ +--[[ + Script Name : SpawnScripts/Castleview/EireneithAlannia.lua + Script Purpose : Eireneith Alannia + Script Author : Scatman + Script Date : 2009.10.03 + Script Notes : +--]] + +dofile("SpawnScripts/Generic/GenericVoiceOvers.lua") + +function spawn(NPC) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + GenericHail(NPC, Spawn) + PlayFlavor(NPC, "", "One of my responsibilities is controlling the population of creatures in the area, and I'm barely keeping up! The glade deer population has grown out of control. Once their numbers rise, those deer are hard to manage!", "", 1689589577, 4560189) +end \ No newline at end of file diff --git a/server/SpawnScripts/Castleview/EntertainerFaeadaen.lua b/server/SpawnScripts/Castleview/EntertainerFaeadaen.lua new file mode 100644 index 000000000..88cef5057 --- /dev/null +++ b/server/SpawnScripts/Castleview/EntertainerFaeadaen.lua @@ -0,0 +1,37 @@ +--[[ + Script Name : SpawnScripts/Castleview/EntertainerFaeadaen.lua + Script Purpose : Entertainer Faeadaen + Script Author : Scatman + Script Date : 2009.10.03 + Script Notes : +--]] + +local Quest = 238 +function spawn(NPC) + ProvidesQuest(NPC, Quest) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + PlayFlavor(NPC, "voiceover/english/entertainer_faeadaen/qey_village04/100_entertainer_faeadaen_multhail2_2d3351bb.mp3", "Step up and watch as I make lights dance and coins disappear into thin air!", "flirt", 3189499038, 1784304503) + local con = CreateConversation() + AddConversationOption(con, "I want a quest", "GiveQuest") + AddConversationOption(con, "Nothing, goodbye.") + StartConversation(con, NPC, Spawn, "Hello, what can I do for you today?") +end + +function GiveQuest(NPC, Spawn) + OfferQuest(NPC, Spawn, Quest) +end + +function AcceptedQuest(NPC, Spawn) + FaceTarget(NPC, Spawn) + + local con = CreateConversation() + AddConversationOption(con, "You won't.") + StartConversation(con, NPC, Spawn, "I hope I won't regret this.") +end \ No newline at end of file diff --git a/server/SpawnScripts/Castleview/Fevalin.lua b/server/SpawnScripts/Castleview/Fevalin.lua new file mode 100644 index 000000000..d07a1ac19 --- /dev/null +++ b/server/SpawnScripts/Castleview/Fevalin.lua @@ -0,0 +1,21 @@ +--[[ + Script Name : SpawnScripts/Castleview/Fevalin.lua + Script Purpose : Fevalin + Script Author : John Adams + Script Date : 2009.04.25 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +function spawn(NPC) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_2_1012.mp3", "", "", 0, 0, Spawn) +end + diff --git a/server/SpawnScripts/Castleview/Fibrone.lua b/server/SpawnScripts/Castleview/Fibrone.lua new file mode 100644 index 000000000..2ba6ba35c --- /dev/null +++ b/server/SpawnScripts/Castleview/Fibrone.lua @@ -0,0 +1,29 @@ +--[[ + Script Name : SpawnScripts/Castleview/ + Script Purpose : Fibrone + Script Author : Scatman + Script Date : 2009.09.25 + Script Notes : +--]] + +dofile("SpawnScripts/Generic/GenericGuardVoiceOvers.lua") + +function spawn(NPC) + SetPlayerProximityFunction(NPC, 10, "InRange", "LeaveRange") +end + +function respawn(NPC) + spawn(NPC) +end + +function InRange(NPC, Spawn) + CheckFaction(NPC, Spawn, "Qeynos") +end + +function LeaveRange(NPC, Spawn) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + GenericGuardHail(NPC, Spawn) +end diff --git a/server/SpawnScripts/Castleview/FoorogGallantblade.lua b/server/SpawnScripts/Castleview/FoorogGallantblade.lua new file mode 100644 index 000000000..38e3c578f --- /dev/null +++ b/server/SpawnScripts/Castleview/FoorogGallantblade.lua @@ -0,0 +1,26 @@ +--[[ + Script Name : SpawnScripts/Castleview/FoorogGallantblade.lua + Script Purpose : Foorog Gallantblade + Script Author : Scatman + Script Date : 2009.10.03 + Script Notes : +--]] + +dofile("SpawnScripts/Generic/GenericVoiceOvers.lua") + +function spawn(NPC) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + GenericHail(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/foorog_gallantblade/qey_village04/newbie_path_froglok/fooroggallantblade005.mp3", "", "", 4022799450, 3509477944, Spawn) + AddConversationOption(conversation, "Enjoy the day!") + StartConversation(conversation, NPC, Spawn, "Glory to Marr, and a hearty welcome to you, mighty traveler!") +end \ No newline at end of file diff --git a/server/SpawnScripts/Castleview/GilcirithElensar.lua b/server/SpawnScripts/Castleview/GilcirithElensar.lua new file mode 100644 index 000000000..152764553 --- /dev/null +++ b/server/SpawnScripts/Castleview/GilcirithElensar.lua @@ -0,0 +1,23 @@ +--[[ + Script Name : SpawnScripts/Castleview/GilcirithElensar.lua + Script Purpose : Gilcirith Elensar + Script Author : Scatman + Script Date : 2009.10.03 + Script Notes : +--]] + +function spawn(NPC) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/gilcirith_elensar/qey_village04/newbie_path_froglok/gilcirithelensar004.mp3", "", "", 259212641, 3674286430) + AddConversationOption(conversation, "Thank you.") + StartConversation(conversation, NPC, Spawn, "Welcome, traveler.") +end \ No newline at end of file diff --git a/server/SpawnScripts/Castleview/GlumpMarrblade.lua b/server/SpawnScripts/Castleview/GlumpMarrblade.lua new file mode 100644 index 000000000..cb2ed2f1d --- /dev/null +++ b/server/SpawnScripts/Castleview/GlumpMarrblade.lua @@ -0,0 +1,41 @@ +--[[ + Script Name : SpawnScripts/Castleview/GlumpMarrblade.lua + Script Purpose : Glump Marrblade + Script Author : Scatman + Script Date : 2009.10.03 + Script Notes : +--]] + +dofile("SpawnScripts/Generic/GenericVoiceOvers.lua") + +function spawn(NPC, Spawn) +end + +function respawn(NPC, Spawn) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + GenericHail(NPC, Spawn) + conversation = CreateConversation() + + -- artisan essentials volume 2 + if HasItem(Spawn, 31373, 1) then + Say(NPC, "I have nothing else to teach you for the moment. Please return to me when you have earned enough experience to choose your profession.", Spawn) + else + AddConversationOption(conversation, "Yes, please teach me.", "TeachMe") + AddConversationOption(conversation, "No, not at the moment.") + StartConversation(conversation, NPC, Spawn, "You show interest in the crafting trade, good. We can always use talented artisans. I can help you get started, would you be interested?") + end +end + +function TeachMe(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + -- artisan essentials volume 2 + SummonItem(Spawn, 31373, 1) + + AddConversationOption(conversation, "I will start on that now.") + StartConversation(conversation, NPC, Spawn, "There, you now have knowledge required to begin crafting. Speak to the Tradeskill Tutor for more detailed guidance on learning to craft, if you are interested in more information. Return to me when you are ready to select a crafting speciality.") +end \ No newline at end of file diff --git a/server/SpawnScripts/Castleview/GraacJustheart.lua b/server/SpawnScripts/Castleview/GraacJustheart.lua new file mode 100644 index 000000000..7f4f6f52a --- /dev/null +++ b/server/SpawnScripts/Castleview/GraacJustheart.lua @@ -0,0 +1,25 @@ +--[[ + Script Name : SpawnScripts/Castleview/GraacJustheart.lua + Script Purpose : Graac Justheart + Script Author : Scatman + Script Date : 2009.10.02 + Script Notes : +--]] + +dofile("SpawnScripts/Generic/GenericVoiceOvers.lua") + +function spawn(NPC) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + GenericHail(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "And a blessing upon your house, good lady!") + StartConversation(conversation, NPC, Spawn, "Mighty adventurer, I greet you with a hearty welcome! ") +end \ No newline at end of file diff --git a/server/SpawnScripts/Castleview/GreenWisp.lua b/server/SpawnScripts/Castleview/GreenWisp.lua new file mode 100644 index 000000000..678478122 --- /dev/null +++ b/server/SpawnScripts/Castleview/GreenWisp.lua @@ -0,0 +1,20 @@ +--[[ + Script Name : SpawnScripts/Castleview/GreenWisp.lua + Script Purpose : Green Wisp + Script Author : Scatman + Script Date : 2009.10.02 + Script Notes : +--]] + +local HIGH_ELF_MENTOR_QUEST_1 = 223 + +function spawn(NPC) + SetRequiredQuest(NPC, HIGH_ELF_MENTOR_QUEST_1, 1) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) +end \ No newline at end of file diff --git a/server/SpawnScripts/Castleview/GrommlukOognee.lua b/server/SpawnScripts/Castleview/GrommlukOognee.lua new file mode 100644 index 000000000..49aa72539 --- /dev/null +++ b/server/SpawnScripts/Castleview/GrommlukOognee.lua @@ -0,0 +1,12 @@ +--[[ + Script Name : SpawnScripts/Castleview/GrommlukOognee.lua + Script Purpose : Grommluk Oognee + Script Author : Scatman + Script Date : 2009.10.02 + Script Notes : +--]] + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + PlayFlavor(NPC, "voiceover/english/grommluk_oognee/qey_village04/100_swimmer_grommluk_multhail2_b5e61808.mp3", "I profess that I am not mad, but I do thinketh this water is too clean. And the stones! They doth not squish under thy feet!", "crazy", 2658355916, 3677777453) +end \ No newline at end of file diff --git a/server/SpawnScripts/Castleview/InnkeeperValean.lua b/server/SpawnScripts/Castleview/InnkeeperValean.lua new file mode 100644 index 000000000..0343f44c3 --- /dev/null +++ b/server/SpawnScripts/Castleview/InnkeeperValean.lua @@ -0,0 +1,36 @@ +--[[ + Script Name : SpawnScripts/Castleview/InnkeeperValean.lua + Script Purpose : Innkeeper Valean + Script Author : Scatman + Script Date : 2009.10.02 + Script Notes : +--]] + +function spawn(NPC) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "Yes.", "OfferQuest1") + AddConversationOption(conversation, "No thanks.") + StartConversation(conversation, NPC, Spawn, "Hello " .. GetName(Spawn) .. ", I am the Innkeeper for this village. We have received word of your arrival and have a room prepared for you. Would you like to know more about housing?") +end + +function OfferQuest1(NPC, Spawn) +end + +--[[ + PlayFlavor(NPC, "innkeeper_uglar_splinterthumb/qey_village04/innkeeper001.mp3", "", "", 1553251638, 3978555092) + AddConversationOption(conversation, "How can I place an item in my house?", "dlg_7_1") + AddConversationOption(conversation, "What kind of housing is available to me?") + AddConversationOption(conversation, "What is the marketboard for?") + AddConversationOption(conversation, "What is my house for?") + AddConversationOption(conversation, "Nothing right now.") + StartConversation(conversation, NPC, Spawn, "Hello there" .. GetName(Spawn) .. ". what can I help you with?") + --]] \ No newline at end of file diff --git a/server/SpawnScripts/Castleview/KethelinShadowcross.lua b/server/SpawnScripts/Castleview/KethelinShadowcross.lua new file mode 100644 index 000000000..f938d2578 --- /dev/null +++ b/server/SpawnScripts/Castleview/KethelinShadowcross.lua @@ -0,0 +1,42 @@ +--[[ + Script Name : SpawnScripts/Castleview/KethelinShadowcross.lua + Script Purpose : Kethelin Shadowcross + Script Author : Scatman + Script Date : 2009.10.03 + Script Notes : +--]] + +function spawn(NPC) + SetPlayerProximityFunction(NPC, 10, "InRange", "LeaveRange") +end + +function respawn(NPC) + spawn(NPC) +end + +function InRange(NPC, Spawn) + if math.random(0, 100) <= 25 then + Talk(NPC, Spawn) + end +end + +function LeaveRange(NPC, Spawn) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + Talk(NPC, Spawn) +end + +function Talk(NPC, Spawn) + local choice = math.random(1, 4) + if choice == 1 then + PlayFlavor(NPC, "voiceover/english/highelf_eco_good_celestialwatch/ft/eco/good/highelf_eco_good_celestialwatch_hail_gm_1a077d47.mp3", "The Qeynos Guard blindly strikes at the darkness rather than see the opportunity for redemption that lies within even the most lost of us.", "", 970013852, 575367438, Spawn) + elseif choice == 2 then + PlayFlavor(NPC, "voiceover/english/highelf_eco_good_celestialwatch/ft/eco/good/highelf_eco_good_celestialwatch_hail_gm_3af79ac9.mp3", "While their fellow citizens struggle against the tides of evil, the Tunarian Alliance worries itself with the plight of soulless plants and animals.", "", 3394764444, 3959777727, Spawn) + elseif choice == 3 then + PlayFlavor(NPC, "voiceover/english/highelf_eco_good_celestialwatch/ft/eco/good/highelf_eco_good_celestialwatch_hail_gm_87dd538b.mp3", "Were they to encounter a god, the Concordium would drop their staves and bow before the might of a true power.", "", 3531845971, 679110479, Spawn) + elseif choice == 4 then + PlayFlavor(NPC, "voiceover/english/highelf_eco_good_celestialwatch/ft/eco/good/highelf_eco_good_celestialwatch_hail_gm_d1a0f4da.mp3", "The Celestial Watch preserves the rituals of servitude to the gods so that all might experience through worship the return of the ancient deities.", "", 3161458185, 1498528167, Spawn) + end +end diff --git a/server/SpawnScripts/Castleview/KnightCaptainGerathalas.lua b/server/SpawnScripts/Castleview/KnightCaptainGerathalas.lua new file mode 100644 index 000000000..55a0a9b34 --- /dev/null +++ b/server/SpawnScripts/Castleview/KnightCaptainGerathalas.lua @@ -0,0 +1,22 @@ +--[[ + Script Name : SpawnScripts/Castleview/Knight-CaptainGerathalas.lua + Script Purpose : Knight-Captain Gerathalas + Script Author : Scatman + Script Date : 2009.10.03 + Script Notes : +--]] + +dofile("SpawnScripts/Generic/GenericVoiceOvers.lua") + +function spawn(NPC) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + GenericHail(NPC, Spawn) + Say(NPC, "Good day to you, adventurer. I hope you have been keeping yourself safe.", Spawn) +end \ No newline at end of file diff --git a/server/SpawnScripts/Castleview/Kruuprum.lua b/server/SpawnScripts/Castleview/Kruuprum.lua new file mode 100644 index 000000000..a3641786a --- /dev/null +++ b/server/SpawnScripts/Castleview/Kruuprum.lua @@ -0,0 +1,28 @@ +--[[ + Script Name : SpawnScripts/Castleview/Kruuprum.lua + Script Purpose : Kruuprum + Script Author : Scatman + Script Date : 2009.10.03 + Script Notes : +--]] + +function spawn(NPC) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + local choice = math.random(1, 4) + if choice == 1 then + PlayFlavor(NPC, "voiceover/english/merchant_kruuprum/qey_village04/100_merchant_left_kuuprum_callout _7959ca4b.mp3", "Verily, 'tis fine to havest thou here in Castleview! FroooOOOooaak! Fevalin and I here hath set up a nice arrangement and canst offer thou the widest variety of Qeynosian goods! Come view our wares!", "", 19553490, 2117485462, Spawn) + elseif choice == 2 then + PlayFlavor(NPC, "voiceover/english/merchant_kruuprum/qey_village04/100_merchant_left_kuuprum_multhail1_9d28d570.mp3", "Were I to possess the time to speak, 'twould be a gracious thing. I must continue selling mine items so I might catch a bite to eat. Mayhaps we can speak again.", "", 2901211010, 2505702223, Spawn) + elseif choice == 3 then + PlayFlavor(NPC, "voiceover/english/merchant_kruuprum/qey_village04/100_merchant_left_kuuprum_multhail2_9a6056e9.mp3", "'Tis a great day when one browses mine wares. Mine stomach grumbles, yet I have so much to do.", "", 3873091282, 3521185500, Spawn) + elseif choice == 4 then + PlayFlavor(NPC, "voiceover/english/merchant_kruuprum/qey_village04/100_merchant_left_kuuprum_multhail3_f6fcb534.mp3", "Pray tell, wouldst thou be in possession of the flies? Ah ... I see ... then I shall wait to eat.", "", 1179465815, 2252444306, Spawn) + end +end \ No newline at end of file diff --git a/server/SpawnScripts/Castleview/ListalaniaVainederian.lua b/server/SpawnScripts/Castleview/ListalaniaVainederian.lua new file mode 100644 index 000000000..d222ecaa9 --- /dev/null +++ b/server/SpawnScripts/Castleview/ListalaniaVainederian.lua @@ -0,0 +1,24 @@ +--[[ + Script Name : SpawnScripts/Castleview/ListalaniaVainederian.lua + Script Purpose : Listalania Vainederian + Script Author : Scatman + Script Date : 2009.10.03 + Script Notes : Speak Koada'Dal +--]] + +function spawn(NPC) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + local choice = math.random(1, 2) + if choice == 1 then + PlayFlavor(NPC, "voiceover/english/highelf_base_1/ft/highelf/highelf_base_1_1_garbled_gf_a002225a.mp3", "garbled text not to be translated", "", 3121965781, 2073270812, Spawn) + elseif choice == 2 then + PlayFlavor(NPC, "voiceover/english/highelf_base_1/ft/highelf/highelf_base_1_1_garbled_gf_fde7b8f7.mp3", "garbled text not to be translated", "", 595061935, 2035542297, Spawn) + end +end \ No newline at end of file diff --git a/server/SpawnScripts/Castleview/PaygeMenedor.lua b/server/SpawnScripts/Castleview/PaygeMenedor.lua new file mode 100644 index 000000000..1c11320fb --- /dev/null +++ b/server/SpawnScripts/Castleview/PaygeMenedor.lua @@ -0,0 +1,21 @@ +--[[ + Script Name : SpawnScripts/Castleview/PaygeMenedor.lua + Script Purpose : Payge Menedor + Script Author : Scatman + Script Date : 2009.10.03 + Script Notes : +--]] + +dofile("SpawnScripts/Generic/GenericMerchantVoiceOvers.lua") + +function spawn(NPC) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + GenericMerchantHail(NPC, Spawn) +end \ No newline at end of file diff --git a/server/SpawnScripts/Castleview/RrakBoldfist.lua b/server/SpawnScripts/Castleview/RrakBoldfist.lua new file mode 100644 index 000000000..b86b053f0 --- /dev/null +++ b/server/SpawnScripts/Castleview/RrakBoldfist.lua @@ -0,0 +1,23 @@ +--[[ + Script Name : SpawnScripts/Castleview/RrakBoldfist.lua + Script Purpose : Rrak Boldfist + Script Author : Scatman + Script Date : 2009.10.03 + Script Notes : +--]] + +function spawn(NPC) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/rrak_boldfist/qey_village04/newbie_path_froglok/rrakboldfist001.mp3", "", "", 4249735014, 1158423101) + AddConversationOption(conversation, "Very well, kind sir. Thank you.") + StartConversation(conversation, NPC, Spawn, "Greetings! Fare thee well?") +end \ No newline at end of file diff --git a/server/SpawnScripts/Castleview/ShaeAhla.lua b/server/SpawnScripts/Castleview/ShaeAhla.lua new file mode 100644 index 000000000..4c4cf28f5 --- /dev/null +++ b/server/SpawnScripts/Castleview/ShaeAhla.lua @@ -0,0 +1,114 @@ +--[[ + Script Name : SpawnScripts/Castleview/ShaeAhla.lua + Script Purpose : Shae'Ahla + Script Author : Scatman + Script Date : 2009.10.03 + Script Notes : +--]] + +dofile("SpawnScripts/Generic/GenericVoiceOvers.lua") + +local TargetingCorruption = 225 + +function spawn(NPC) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + GenericHail(NPC, Spawn) + + if HasQuest(Spawn, TargetingCorruption) and GetQuestStep(Spawn, TargetingCorruption) == 1 then + WherePainGose(NPC, Spawn, conversation) + else + RandomChat(NPC, Spawn) + end +end + +function RandomChat(NPC, Spawn) + local choice = math.random(1, 3) + if choice == 1 then + Say(NPC, "To be lost is to avoid being found.", Spawn) + elseif choice == 2 then + Say(NPC, "A life cut off from your senses is no life at all.", Spawn) + elseif choice == 3 then + Say(NPC, "If you do not seek out pain, it will still find you.", Spawn) + end +end + +function WherePainGose(NPC, Spawn, conversation) + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/shae_ahla/qey_village04/quests/sheaahla/sheaahla000.mp3", "", "", 4274300137, 4254333791, Spawn) + AddConversationOption(conversation, "Vindain sent me, I need your help.", "dlg_20_3") + AddConversationOption(conversation, "What does that mean?", "dlg_20_1") + AddConversationOption(conversation, "I agree.") + StartConversation(conversation, NPC, Spawn, "Where pain goes, all sentient beings tend to follow.") +end + +function dlg_20_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/shae_ahla/qey_village04/quests/sheaahla/sheaahla001.mp3", "", "", 3064229666, 2077041902, Spawn) + AddConversationOption(conversation, "That is a rather pessimistic view.", "dlg_20_2") + AddConversationOption(conversation, "That makes sense.", "RareYouAndI") + StartConversation(conversation, NPC, Spawn, "It means that we--elves, humans, gnomes, trolls, all races--blindly plunge ourselves into darkness and chaos. We do not 'intend' to do this, but without fail we do.") +end + +function RareYouAndI(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "Vindain sent me, I need your help.", "dlg_20_3") + StartConversation(conversation, NPC, Spawn, "We are rare, you and I. Why do you come to me?") +end + +function dlg_20_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/shae_ahla/qey_village04/quests/sheaahla/sheaahla003.mp3", "", "", 3991540822, 537258105, Spawn) + AddConversationOption(conversation, "Vindain sent me, I need your help.", "dlg_20_3") + StartConversation(conversation, NPC, Spawn, "Worlds that are lost in strife and pain do tend to produce pessimists. Tell me, why are you here?") +end + +function dlg_20_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/shae_ahla/qey_village04/quests/sheaahla/sheaahla004.mp3", "", "", 1399643965, 359394892, Spawn) + AddConversationOption(conversation, "I was planting Green Wisps here in Castleview Hamlet. One wisp came alive and attacked me.", "dlg_21_2") + StartConversation(conversation, NPC, Spawn, "What do you require?") +end + +function dlg_21_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/shae_ahla/qey_village04/quests/sheaahla/sheaahla005.mp3", "", "", 2035237242, 2834747464, Spawn) + AddConversationOption(conversation, "Can you help?", "dlg_21_3") + StartConversation(conversation, NPC, Spawn, "You see? Corruption is everywhere.") +end + +function dlg_21_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/shae_ahla/qey_village04/quests/sheaahla/sheaahla006.mp3", "", "", 1528947055, 3565435961, Spawn) + AddConversationOption(conversation, "All right.", "dlg_21_4") + StartConversation(conversation, NPC, Spawn, "Yes, I can help. Please, give me your hand.") +end + +function dlg_21_4(NPC, Spawn) + SetStepComplete(Spawn, TargetingCorruption, 1) + + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/shae_ahla/qey_village04/quests/sheaahla/sheaahla007.mp3", "", "", 2043489074, 1826207926, Spawn) + AddConversationOption(conversation, "Thank you, Shae'Ahla.") + StartConversation(conversation, NPC, Spawn, "It is done. Your fingers are blessed in a way that will counter the corruption, simply rub the leaves of the plant to cleanse it.") +end \ No newline at end of file diff --git a/server/SpawnScripts/Castleview/Sinanyala.lua b/server/SpawnScripts/Castleview/Sinanyala.lua new file mode 100644 index 000000000..650d61b44 --- /dev/null +++ b/server/SpawnScripts/Castleview/Sinanyala.lua @@ -0,0 +1,29 @@ +--[[ + Script Name : SpawnScripts/Castleview/Sinanyala.lua + Script Purpose : Sinanyala + Script Author : Scatman + Script Date : 2009.09.25 + Script Notes : +--]] + +dofile("SpawnScripts/Generic/GenericGuardVoiceOvers.lua") + +function spawn(NPC) + SetPlayerProximityFunction(NPC, 10, "InRange", "LeaveRange") +end + +function respawn(NPC) + spawn(NPC) +end + +function InRange(NPC, Spawn) + CheckFaction(NPC, Spawn, "Qeynos") +end + +function LeaveRange(NPC, SPawn) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + GenericGuardHail(NPC, Spawn) +end diff --git a/server/SpawnScripts/Castleview/SirAntylusTeraeth.lua b/server/SpawnScripts/Castleview/SirAntylusTeraeth.lua new file mode 100644 index 000000000..41b9a72f0 --- /dev/null +++ b/server/SpawnScripts/Castleview/SirAntylusTeraeth.lua @@ -0,0 +1,133 @@ +--[[ + Script Name : SpawnScripts/Castleview/SirAntylusTeraeth.lua + Script Purpose : Sir Antylus Teraeth + Script Author : Scatman + Script Date : 2009.10.03 + Script Notes : +--]] + +function spawn(NPC) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/sir_antylus_teraeth/qey_village04/antylus_teraeth000.mp3", "", "", 2410300960, 837808802) + AddConversationOption(conversation, "Who are the Priests of Life? ", "dlg_4_1") + AddConversationOption(conversation, "Thanks for your words, but I must go now.") + StartConversation(conversation, NPC, Spawn, "Another beautiful day in the city of Qeynos! As the Priests of Life would say, 'The light of life shines bright upon Qeynos.' ") + +end + +function dlg_4_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/sir_antylus_teraeth/qey_village04/antylus_teraeth001.mp3", "", "", 3149606154, 2024355118) + AddConversationOption(conversation, "What is the Crusade of the Fallen?", "dlg_4_2") + AddConversationOption(conversation, "I am more concerned with Qeynos present. Farewell.") + StartConversation(conversation, NPC, Spawn, "Friends of mine from my past, a benevolent order of Qeynos yore. I marched with them on the Crusade of the Fallen. ") +end + +function dlg_4_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/sir_antylus_teraeth/qey_village04/antylus_teraeth002.mp3", "", "", 663436168, 3617497960) + AddConversationOption(conversation, "I wish to hear this tale. ", "dlg_4_3") + AddConversationOption(conversation, "I am sorry. I have no time for the tale. ") + StartConversation(conversation, NPC, Spawn, "You never heard of the Crusade of the Fallen? Oh my! It was, perhaps, the finest moment for the Priests of Life. It's a simple tale of respect and honor. ") +end + +function dlg_4_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/sir_antylus_teraeth/qey_village04/antylus_teraeth003.mp3", "", "", 3201920823, 1156394229) + AddConversationOption(conversation, "So many deaths. How sad. ", "dlg_4_6") + AddConversationOption(conversation, "You are not a Qeynosian?", "dlg_4_4") + AddConversationOption(conversation, "I must leave now. Farewell.") + StartConversation(conversation, NPC, Spawn, "It began with the Shattering, when a reign of fire from the death throes of the moon Luclin barraged Norrath. Millions died in this apocalyptic fury. Bodies littered the land. Even the royal family of Bayle could not escape this violence. My new home was battered and its people nearly all lost. ") +end + +function dlg_4_4(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/sir_antylus_teraeth/qey_village04/antylus_teraeth010.mp3", "", "", 3512678812, 1974187666) + AddConversationOption(conversation, "What of the Crusade of the Fallen?", "dlg_4_6") + AddConversationOption(conversation, "What is Felwithe?", "dlg_4_5") + AddConversationOption(conversation, "I must leave now. Farewell.") + StartConversation(conversation, NPC, Spawn, "No. I'm a citizen of the halls of Felwithe, a place I departed more than 150-years ago, near the start of the Age of Cataclysms. My only goal was to find the lost city of Fayspire, but the oceans became violent and impassable. I couldn't turn back, so I trekked on in my search.") +end + +function dlg_4_5(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/sir_antylus_teraeth/qey_village04/antylus_teraeth011.mp3", "", "", 903203081, 3867676461) + AddConversationOption(conversation, "But the city was in ruins.", "dlg_4_6") + StartConversation(conversation, NPC, Spawn, "Felwithe was the home of my people, the Koada'Dal! Our grand city sat high atop the clouds where the sun always shined. It rests many leagues away on the continent of Faydwer. I do miss my city in the clouds, but Qeynos has embraced me and is my new sanctuary from the violence of this world.") +end + +function dlg_4_6(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/sir_antylus_teraeth/qey_village04/antylus_teraeth004.mp3", "", "", 1716743258, 3118361328) + AddConversationOption(conversation, "How long did this horror last?", "dlg_4_7") + AddConversationOption(conversation, "I thank you for the tale. Farewell.") + StartConversation(conversation, NPC, Spawn, "Qeynos lay in rubble, and its kingdom, which spread across the horizon, was littered with the bodies of those who couldn't escape the torment of the land. Such carnage brought disease and scavengers to plague the lands. ") +end + +function dlg_4_7(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/sir_antylus_teraeth/qey_village04/antylus_teraeth005.mp3", "", "", 360171820, 1225175245) + AddConversationOption(conversation, "But you mentioned the Priests of Life.", "dlg_4_8") + AddConversationOption(conversation, "I must leave now. Farewell.") + StartConversation(conversation, NPC, Spawn, "The horror of fields of the fallen could not be cleansed. Most of the kingdom lay in rubble. Outland residents flooded in and aided with the reconstruction of the great city. When this was complete, and the army was replenished, then the time was right to clear the ravaged countryside and all its chaos.") +end + +function dlg_4_8(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/sir_antylus_teraeth/qey_village04/antylus_teraeth006.mp3", "", "", 1680809797, 715676428) + AddConversationOption(conversation, "Why did they want to gather the bodies?", "dlg_4_9") + StartConversation(conversation, NPC, Spawn, "The Priests of Life, defenders of all souls. Their numbers were small. They took many losses, but still, they rose to march. They traveled the lands gathering forgotten souls. I was in awe of their humble valor. So taken was I, that I joined their crusade. ") +end + +function dlg_4_9(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/sir_antylus_teraeth/qey_village04/antylus_teraeth007.mp3", "", "", 1110308997, 819506069) + AddConversationOption(conversation, "What did they do with all the bodies?", "dlg_4_10") + AddConversationOption(conversation, "This is interesting, but I must leave.") + StartConversation(conversation, NPC, Spawn, "To them, life was precious. No soul could rest easily if their body was not given a proper burial. So the Priests of Life trod into the land and fought scavengers and bandits to gather all the Antonican bodies they could find. A massive line of bodies flooded the path to Qeynos. ") +end + +function dlg_4_10(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/sir_antylus_teraeth/qey_village04/antylus_teraeth008.mp3", "", "", 1255692585, 2313041410) + AddConversationOption(conversation, "The bodies are in the catacombs?", "dlg_4_11") + StartConversation(conversation, NPC, Spawn, "Qeynos is larger than it seems. A whole undercity exists below us. Under the roads of the city, rest the extensive Qeynos Waterworks and the labyrinth of the Qeynos Catacombs, both of which still stand with little damage from the cataclysms. ") +end + +function dlg_4_11(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/sir_antylus_teraeth/qey_village04/antylus_teraeth009.mp3", "", "", 2009817836, 2128199220) + AddConversationOption(conversation, "I thank you for the tale. Farewell.") + StartConversation(conversation, NPC, Spawn, "Yes. Every soul was given an honorable burial and was laid to rest with the bodies of the Priests of Life who fell before and after the Crusade of the Fallen. Below the feet of every Qeynosian rests a sanctuary for the fallen souls of the Age of Cataclysms. ") +end \ No newline at end of file diff --git a/server/SpawnScripts/Castleview/TaneranthalisNedaiveren.lua b/server/SpawnScripts/Castleview/TaneranthalisNedaiveren.lua new file mode 100644 index 000000000..39be8ba21 --- /dev/null +++ b/server/SpawnScripts/Castleview/TaneranthalisNedaiveren.lua @@ -0,0 +1,26 @@ +--[[ + Script Name : SpawnScripts/Castleview/TaneranthalisNedaiveren.lua + Script Purpose : Taneranthalis Nedaiveren + Script Author : Scatman + Script Date : 2009.10.03 + Script Notes : +--]] + +function spawn(NPC) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + local choice = math.random(1, 3) + if choice == 1 then + PlayFlavor(NPC, "voiceover/english/taneranthalis_nedaiveren/qey_village04/100_park_taneranthalis_callout_b8c9bef.mp3", "Please be at ease. Though we stand outside the great gates of the city proper, you are as safe in Castleview as anywhere in Norrath!", "", 4095321012, 2558651917, Spawn) + elseif choice == 2 then + PlayFlavor(NPC, "voiceover/english/taneranthalis_nedaiveren/qey_village04/100_park_taneranthalis_multhail1_d1775db6.mp3", "Please move on, traveler. I must attend to important business matters.", "", 3098654696, 1348141498, Spawn) + elseif choice == 3 then + PlayFlavor(NPC, "voiceover/english/taneranthalis_nedaiveren/qey_village04/100_park_taneranthalis_multhail2_c2e4d5a7.mp3", "It seems like just yesterday I was a small child brought to Qeynos from Felwithe. Though its white towers are but a distant memory, the Koada'dal in Castleview keep the elven spirit alive.", "", 2103458666, 2948247370, Spawn) + end +end \ No newline at end of file diff --git a/server/SpawnScripts/Castleview/Valinar.lua b/server/SpawnScripts/Castleview/Valinar.lua new file mode 100644 index 000000000..eb5eb235a --- /dev/null +++ b/server/SpawnScripts/Castleview/Valinar.lua @@ -0,0 +1,21 @@ +--[[ + Script Name : SpawnScripts/Castleview/Valinar.lua + Script Purpose : Valinar + Script Author : Scatman + Script Date : 2009.10.03 + Script Notes : +--]] + +dofile("SpawnScripts/Generic/GenericMerchantVoiceOvers.lua") + +function spawn(NPC) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + GenericMerchantHail(NPC, Spawn) +end \ No newline at end of file diff --git a/server/SpawnScripts/Castleview/VindainGreenfaith.lua b/server/SpawnScripts/Castleview/VindainGreenfaith.lua new file mode 100644 index 000000000..73ab06c84 --- /dev/null +++ b/server/SpawnScripts/Castleview/VindainGreenfaith.lua @@ -0,0 +1,486 @@ +--[[ + Script Name : SpawnScripts/Castleview/VindainGreenfaith.lua + Script Purpose : Vindain Greenfaith + Script Author : Scatman + Script Date : 2009.10.02 + Script Notes : Updated by Jabantiz (4/24/2017) +--]] + +local HIGHELF = 8 +local ComponentsOfGrowth = 223 +local SowingBeauty = 224 +local TargetingCorruption = 225 +local TheCommune = 226 +local SendingWord = 227 + +function spawn(NPC) + ProvidesQuest(NPC, ComponentsOfGrowth) + ProvidesQuest(NPC, SowingBeauty) + ProvidesQuest(NPC, TargetingCorruption) + ProvidesQuest(NPC, TheCommune) + ProvidesQuest(NPC, SendingWord) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + if GetRace(Spawn) == HIGHELF then + Begin(NPC, Spawn) + else + NotHighElf(NPC, Spawn) + end +end + +function NotHighElf(NPC, Spawn) + FaceTarget(NPC, Spawn) + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/vindain_greenfaith/qey_village04/qst_vindain_nothighelf_57692d23.mp3", "The Koada'Dal need heroes and leaders like myself, now more than ever. But I am here for them, my friend, and cannot help you now.", "", 2055920001, 877280336, Spawn) +end + +function Begin(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + if HasCompletedQuest(Spawn, ComponentsOfGrowth) then + if HasCompletedQuest(Spawn, SowingBeauty) then + if HasCompletedQuest(Spawn, TargetingCorruption) then + if HasCompletedQuest(Spawn, TheCommune) then + if HasCompletedQuest(Spawn, SendingWord) then + SpokenWithAdalinYet(NPC, Spawn, conversation) + elseif HasQuest(Spawn, SendingWord) then + SpokenWithAdalinYet(NPC, Spawn, conversation) + else + SpokenWithSpiritYet(NPC, Spawn, conversation) + end + elseif HasQuest(Spawn, TheCommune) then + SpokenWithSpiritYet(NPC, Spawn, conversation) + else + GreenMistCleared(NPC, Spawn, conversation) + end + elseif HasQuest(Spawn, TargetingCorruption) then + GreenMistCleared(NPC, Spawn, conversation) + else + PlantedBushesYet(NPC, Spawn, conversation) + end + elseif HasQuest(Spawn, SowingBeauty) then + PlantedBushesYet(NPC, Spawn, conversation) + else + GatheredComponentsYet(NPC, Spawn, conversation) + end + elseif HasQuest(Spawn, ComponentsOfGrowth) then + GatheredComponentsYet(NPC, Spawn, conversation) + else + KoadaDalNeedYou(NPC, Spawn, conversation) + end +end + +---------------------------------------------------------------------------------------------------------------- +-- QUEST 1 +---------------------------------------------------------------------------------------------------------------- + +function KoadaDalNeedYou(NPC, Spawn, conversation) + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/vindain_greenfaith/qey_village04/quests/vindain/vindain001.mp3", "", "", 3275063525, 1876910304, Spawn) + AddConversationOption(conversation, "I do not deny my help.", "DoNotDeny") + AddConversationOption(conversation, "Koada'Dal?", "KoadaDal") + AddConversationOption(conversation, "I will choose when and where to offer my help.") + StartConversation(conversation, NPC, Spawn, "The Koada'Dal need you, do you deny them your help?") +end + +function DoNotDeny(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/vindain_greenfaith/qey_village04/quests/vindain/vindain005.mp3", "", "", 2071218193, 1536623710, Spawn) + AddConversationOption(conversation, "Did you fight?", "DidYouFight") + StartConversation(conversation, NPC, Spawn, "I am glad to hear that. In ages past the Koada'Dal have rallied to Tunare's aid. We have fought--and died--in countless wars against forces both small and great. This was our charge and we accepted it without hesitation or regret.") +end + +function DidYouFight(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/vindain_greenfaith/qey_village04/quests/vindain/vindain006.mp3", "", "", 558239952, 3089092887, Spawn) + AddConversationOption(conversation, "How will we bring about a rebirth for our people?", "RebirthForOurPeople") + AddConversationOption(conversation, "Did you need help or not?", "DidYouNeedHelp") + StartConversation(conversation, NPC, Spawn, "Not in any of the great wars, no. Though I had more than my share of battle. And now, here we are, a displaced people. We rest within the walls of Qeynos as if refugees. And, though it is a bitter taste to even speak it, we are refugees. Our time has gone and not yet come again, " .. GetName(Spawn) .. ".") +end + +function RebirthForOurPeople(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/vindain_greenfaith/qey_village04/quests/vindain/vindain007.mp3", "", "", 2133745057, 422152869, Spawn) + AddConversationOption(conversation, "How do you cope?", "HowDoYouCope") + StartConversation(conversation, NPC, Spawn, "That is not for me to know or plan, I leave that to the scholars. Me, all I can do is wait for our time. It is a heavy burden on one's soul, to wait for a time you may not ever see.") +end + +function HowDoYouCope(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/vindain_greenfaith/qey_village04/quests/vindain/vindain008.mp3", "", "", 2132206040, 1773497371, Spawn) + AddConversationOption(conversation, "The reasons alone mean that those who see it will be helped.", "TheReasonsAlone") + StartConversation(conversation, NPC, Spawn, "Heh... I try to bring my people closer to themselves. It is a thankless duty, and may not even help, but it is all I can do.") +end + +function TheReasonsAlone(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/vindain_greenfaith/qey_village04/quests/vindain/vindain009.mp3", "", "", 3987444274, 3750842326, Spawn) + AddConversationOption(conversation, "I would like to help out around here.", "IWouldLikeToHelp") + AddConversationOption(conversation, "Who are your contacts?", "WhoAreYourContacts") + AddConversationOption(conversation, "Not now, thanks.") + StartConversation(conversation, NPC, Spawn, "I am glad to hear you say that. Would you like to give some effort of your own to help our people? There are tasks around here that must be attended to, or I have contacts if you're interested in something more adventurous. What say you?") +end + +function IWouldLikeToHelp(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/vindain_greenfaith/qey_village04/quests/vindain/vindain011.mp3", "", "", 2903193382, 1971757298, Spawn) + AddConversationOption(conversation, "Sure, I am willing to do that.", "SureIAmWilling") + AddConversationOption(conversation, "What are Green Wisps?", "DidYouNeedHelp") + StartConversation(conversation, NPC, Spawn, "That is good. Our people are not as strong in spirit as we once were. Every little thing we do helps, or so I believe. One plan I have had to help our people is to plant more Green Wisp bushes around Castleview Hamlet. I believe this would be a perfect job for you, what do you say?") +end + +function SureIAmWilling(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/vindain_greenfaith/qey_village04/quests/vindain/vindain013.mp3", "", "", 344140216, 1983346323, Spawn) + AddConversationOption(conversation, "And the blessed water?", "AndTheBlessedWater") + StartConversation(conversation, NPC, Spawn, "Good. You will need Green Wisp seeds, some enriched soil, and blessed water. The seeds you can get from the Green Wisps that surround the Fountain of Valor. The soil you can get from a barrel that holds it, northwest of the armor shop on the level above this one.") +end + +function AndTheBlessedWater(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/vindain_greenfaith/qey_village04/quests/vindain/vindain014.mp3", "", "", 1499994650, 3739794099, Spawn) + AddConversationOption(conversation, "All right.", "OfferQuest1") + StartConversation(conversation, NPC, Spawn, "Collect some blessed water from the Fountain of Valor. Examine the flask while near it to do so.") +end + +function KoadaDal(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/vindain_greenfaith/qey_village04/quests/vindain/vindain002.mp3", "", "", 1275465348, 3317665592, Spawn) + AddConversationOption(conversation, "I have not, what does it mean?", "WhatDoesItMean") + AddConversationOption(conversation, "Oh, I've heard it. I was just joking. Sorry.", "JustJoking") + StartConversation(conversation, NPC, Spawn, "You cannot be serious. From where were you raised? Have you, in seriousness, not heard that term before?") +end + +function WhatDoesItMean(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/vindain_greenfaith/qey_village04/quests/vindain/vindain004.mp3", "", "", 3729119270, 3986173886, Spawn) + AddConversationOption(conversation, "I am Koada'Dal. What can I do?", "DoNotDeny") + AddConversationOption(conversation, "I will leave for now then.") + StartConversation(conversation, NPC, Spawn, "By Tunare, when did it all go so wrong? Koada'Dal... this is you, this is me, this is all of our people. Though, and some would disagree with me on this, there is a difference between a high elf and a Koada'Dal. True Koada'Dal know their lives are forfeit if it is the will of Tunare. High elves... well they're just humans with pointy ears.") +end + +function JustJoking(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/vindain_greenfaith/qey_village04/quests/vindain/vindain003.mp3", "", "", 934395148, 2380624550, Spawn) + AddConversationOption(conversation, "I apologize, I wish to help.", "DoNotDeny") + StartConversation(conversation, NPC, Spawn, "Jokes are for those who lack the bravery to take action when it is needed. You do what you like, I will be busy helping our people.") +end + +function DidYouNeedHelp(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/vindain_greenfaith/qey_village04/quests/vindain/vindain012.mp3", "", "", 4192139867, 2744580245, Spawn) + AddConversationOption(conversation, "Yes.", "SureIAmWilling") + AddConversationOption(conversation, "No, not right now.") + StartConversation(conversation, NPC, Spawn, "Green Wisps are the beautiful bushes that once adorned the noble houses of Felwithe. They spend most of the day as any other plant, but as day turns to night and night turns to day they glow with a pulsing green light. It is breathtaking. I wish to spread them around Felw- er, around Castleview Hamlet for all to see. Will you help me?") +end + +function WhoAreYourContacts(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/vindain_greenfaith/qey_village04/quests/vindain/vindain010.mp3", "", "", 3834761356, 938291768, Spawn) + AddConversationOption(conversation, "I will find him, thank you.") + StartConversation(conversation, NPC, Spawn, "They are currently in Oakmyst Forest. They should not be hard to find, speak with Adalin Emerael just within Oakmyst, he will point you in the right direction.") +end + +function OfferQuest1(NPC, Spawn) + FaceTarget(NPC, Spawn) + OfferQuest(NPC, Spawn, ComponentsOfGrowth) +end + +function GatheredComponentsYet(NPC, Spawn, conversation) + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/vindain_greenfaith/qey_village04/quests/vindain/vindain015.mp3", "", "", 3988898427, 1857718440, Spawn) + + if (HasQuest(Spawn, ComponentsOfGrowth) and QuestStepIsComplete(Spawn, ComponentsOfGrowth, 1) and QuestStepIsComplete(Spawn, ComponentsOfGrowth, 2) and QuestStepIsComplete(Spawn, ComponentsOfGrowth, 3) and GetQuestStep(Spawn, ComponentsOfGrowth) == 4) or HasCompletedQuest(Spawn, ComponentsOfGrowth) then + AddConversationOption(conversation, "Yes, I have.", "GotComponents") + end + + AddConversationOption(conversation, "I need the water flask.", "NeedWaterFlask") + AddConversationOption(conversation, "No, not yet.") + StartConversation(conversation, NPC, Spawn, "Have you gathered the components yet?") +end + +function NeedWaterFlask(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + -- Water Flask + if HasItem(Spawn, 15337, 1) then + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/vindain_greenfaith/qey_village04/quests/vindain/vindain017.mp3", "", "", 1348687410, 1688928730, Spawn) + AddConversationOption(conversation, "All right.") + StartConversation(conversation, NPC, Spawn, "I believe you already have it. Please check all of your bags, it may even be in the bank. Once you find it, get close to the Fountain of Valor and examine it.") + else + AddConversationOption(conversation, "Thanks you.") + StartConversation(conversation, NPC, Spawn, "Certainly, here you are.") + SummonItem(Spawn, 15337, 1) + end +end + +function GotComponents(NPC, Spawn) + if HasQuest(Spawn, ComponentsOfGrowth) then + SetStepComplete(Spawn, ComponentsOfGrowth, 4) + end + ReadyForNextStep(NPC, Spawn) +end + +---------------------------------------------------------------------------------------------------------------- +-- QUEST 2 +---------------------------------------------------------------------------------------------------------------- + + +function ReadyForNextStep(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/vindain_greenfaith/qey_village04/quests/vindain/vindain018.mp3", "", "", 3208917088, 31436847, Spawn) + AddConversationOption(conversation, "Sure.", "SureQuest2") + AddConversationOption(conversation, "Not right now.") + StartConversation(conversation, NPC, Spawn, "Excellent. You are ready for the next step. There are eight planters around Castleview Hamlet. Currently, each has a tree in it. I would like you to plant Green Mists in them as well. Between the enriched soil and the blessed water it should not be too difficult. What do you say?") +end + +function SureQuest2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/vindain_greenfaith/qey_village04/quests/vindain/vindain019.mp3", "", "", 2622235887, 2432498099, Spawn) + AddConversationOption(conversation, "I can go plant them now.", "OfferQuest2") + StartConversation(conversation, NPC, Spawn, "Great. There are eight planters: two on the south western corner of the inn, two north of the bank, one on the north west corner of the scribe's shop, one west of the scribe's shop on the level below it, and two north of the armor shop on the level above our current one.") +end + +function OfferQuest2(NPC, Spawn) + FaceTarget(NPC, Spawn) + OfferQuest(NPC, Spawn, SowingBeauty) +end + +function PlantedBushesYet(NPC, Spawn, conversation) + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/vindain_greenfaith/qey_village04/quests/vindain/vindain020.mp3", "", "", 1860236238, 2496988444, Spawn) + + if (HasCompletedQuest(Spawn, SowingBeauty) and not HasCompletedQuest(Spawn, TargetingCorruption)) or (HasQuest(Spawn, SowingBeauty) and GetQuestStep(Spawn, SowingBeauty) == 9) then + AddConversationOption(conversation, "Yes, I have, there was a problem.", "dlg_19_1") + else + AddConversationOption(conversation, "No, not yet.") + end + + StartConversation(conversation, NPC, Spawn, "Have you planted all of the Green Mist bushes?") +end + +function dlg_19_1(NPC, Spawn) + if HasQuest(Spawn, SowingBeauty) then + SetStepComplete(Spawn, SowingBeauty, 9) + end + + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/vindain_greenfaith/qey_village04/quests/vindain/vindain021.mp3", "", "", 1190805988, 2574516810, Spawn) + AddConversationOption(conversation, "When I tried to plant the seed at the planter north west of the scribe's shop part of the plant came alive and attacked me.", "dlg_19_2") + StartConversation(conversation, NPC, Spawn, "Oh? Nothing serious I hope.") +end + +-------------------------------------------------------------------------------------------------------------- +-- QUEST 3 +-------------------------------------------------------------------------------------------------------------- + +function dlg_19_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/vindain_greenfaith/qey_village04/quests/vindain/vindain022.mp3", "", "", 2234653654, 1673262997, Spawn) + AddConversationOption(conversation, "It looks corrupted.", "dlg_19_3") + StartConversation(conversation, NPC, Spawn, "By Tunare! How could that have happened? You seem all right, how is the plant?") +end + +function dlg_19_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/vindain_greenfaith/qey_village04/quests/vindain/vindain023.mp3", "", "", 1015908882, 1417407767, Spawn) + AddConversationOption(conversation, "Yes, I will.", "OfferQuest3") + AddConversationOption(conversation, "No, not right now.") + StartConversation(conversation, NPC, Spawn, "We must fix this, " .. GetName(Spawn) .. ". I know someone who can help. Shae'Ahla, you will find her northeast of the entrance to Qeynos Harbor. If anyone can help cleanse the Green Mist she can. Will you seek her out?") +end + +function OfferQuest3(NPC, Spawn) + FaceTarget(NPC, Spawn) + OfferQuest(NPC, Spawn, TargetingCorruption) +end + +function GreenMistCleared(NPC, Spawn, conversation) + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/vindain_greenfaith/qey_village04/quests/vindain/vindain025.mp3", "", "", 3990599486, 444977837, Spawn) + + if (HasCompletedQuest(Spawn, TargetingCorruption) and not HasCompletedQuest(Spawn, TheCommune)) or (HasQuest(Spawn, TargetingCorruption) and GetQuestStep(Spawn, TargetingCorruption) == 3) then + AddConversationOption(conversation, "Yes, a sprite attacked me as I cleansed it.", "dlg_22_1") + else + AddConversationOption(conversation, "Not, not yet.") + end + + StartConversation(conversation, NPC, Spawn, "Has the Green Mist been cleansed?") +end + +function dlg_22_1(NPC, Spawn) + SetStepComplete(Spawn, TargetingCorruption, 3) + + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/vindain_greenfaith/qey_village04/quests/vindain/vindain026.mp3", "", "", 622027382, 4205976531, Spawn) + AddConversationOption(conversation, "Yes, I did.", "dlg_22_2") + AddConversationOption(conversation, "No, I did not.", "DidNotKillSprite") + StartConversation(conversation, NPC, Spawn, "A sprite? Here? That must be what caused the corruption, then. Originally I had actually suspected the alchemists to have been dumping chemicals in the planter outside their shop, I am relieved to know that this probably isn't the case. But this sprite... that is unfortunate. Did you kill it?") +end + +------------------------------------------------------------------------------------------------------------- +-- QUEST 4 +-------------------------------------------------------------------------------------------------------------- + +function DidNotKillSprite(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "You could not have known.", "dlg_22_3") + AddConversationOption(conversation, "It was not your fault.", "dlg_22_3") + AddConversationOption(conversation, "It is all right.", "dlg_22_3") + StartConversation(conversation, NPC, Spawn, "I don't suppose that will matter much now. If you cleansed her charge she will have likely died shortly thereafter. I cannot believe this, I sent you out to plant, to encourage growth, and now you have indirectly caused death. I am sorry.") +end + +function dlg_22_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/vindain_greenfaith/qey_village04/quests/vindain/vindain028.mp3", "", "", 1775941301, 1525044387, Spawn) + AddConversationOption(conversation, "You could not have known.", "dlg_22_3") + AddConversationOption(conversation, "It was not your fault.", "dlg_22_3") + AddConversationOption(conversation, "It is all right.", "dlg_22_3") + StartConversation(conversation, NPC, Spawn, "By Tunare... I sent you out to plant, to cause growth, and now I have forced you to cause death instead. I am so sorry, " .. GetName(Spawn) .. ".") +end + +function dlg_22_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/vindain_greenfaith/qey_village04/quests/vindain/vindain029.mp3", "", "", 2832440299, 4280395631, Spawn) + AddConversationOption(conversation, "I can.", "OfferQuest4") + AddConversationOption(conversation, "I can not.", "dlg_22_4") + StartConversation(conversation, NPC, Spawn, "You must seek out the spirit of this sprite. It will remain near her charge. Speak with it, perhaps you can ease your mind. Maybe we will even learn why she did it. Can you do this?") +end + +function OfferQuest4(NPC, Spawn) + FaceTarget(NPC, Spawn) + OfferQuest(NPC, Spawn, TheCommune) +end + +function SpokenWithSpiritYet(NPC, Spawn, conversation) + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/vindain_greenfaith/qey_village04/quests/vindain/vindain031.mp3", "", "", 3214169408, 3875873368, Spawn) + + if (HasCompletedQuest(Spawn, TheCommune) and not HasCompletedQuest(Spawn, SendingWord)) or (HasQuest(Spawn, TheCommune) and GetQuestStep(Spawn, TheCommune) == 2) then + AddConversationOption(conversation, "I have.", "dlg_25_1") + else + AddConversationOption(conversation, "I haven't yet.") + end + StartConversation(conversation, NPC, Spawn, "Have you spoken with the spirit?") +end + +function dlg_25_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/vindain_greenfaith/qey_village04/quests/vindain/vindain032.mp3", "", "", 2910726024, 1590892637, Spawn) + AddConversationOption(conversation, "She said she was sorry.", "dlg_25_2") + StartConversation(conversation, NPC, Spawn, "And what did she say?") +end + +function dlg_25_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/vindain_greenfaith/qey_village04/quests/vindain/vindain033.mp3", "", "", 3033520362, 3912252683, Spawn) + AddConversationOption(conversation, "She mentioned never being able to see Oakmyst Forest again.", "dlg_25_3") + StartConversation(conversation, NPC, Spawn, "I am not surprised. In death, for true creatures of Tunare, all corruption is purged.") +end + +function dlg_25_3(NPC, Spawn) + if HasQuest(Spawn, TheCommune) then + SetStepComplete(Spawn, TheCommune, 2) + end + + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/vindain_greenfaith/qey_village04/quests/vindain/vindain034.mp3", "", "", 2141460256, 860400107, Spawn) + AddConversationOption(conversation, "She mentioned thin green thread while she was corrupted. What did that mean?", "dlg_25_4") + StartConversation(conversation, NPC, Spawn, "I was afraid of this... a sunshimmer sprite.") +end + +------------------------------------------------------------------------------------------------------------------------------ +-- QUEST 5 +------------------------------------------------------------------------------------------------------------------------------ + +function dlg_25_4(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/vindain_greenfaith/qey_village04/quests/vindain/vindain035.mp3", "", "", 405362245, 656678829, Spawn) + AddConversationOption(conversation, "Yes.", "dlg_25_5") + AddConversationOption(conversation, "I can not.") + StartConversation(conversation, NPC, Spawn, "The thin green thread... it represents an unwavering connection with Tunare. She was strong, her death is unfortunate." .. GetName(Spawn) .. ". we must not idle. Will you carry the news of this event to Oakmyst Forest?") +end + +function dlg_25_5(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/vindain_greenfaith/qey_village04/quests/vindain/vindain035a.mp3", "", "", 2092202853, 2822343063, Spawn) + AddConversationOption(conversation, "All right.", "OfferQuest5") + StartConversation(conversation, NPC, Spawn, "Thank you. Please, travel to Oakmyst Forest and speak with Adalin Emerael. Tell him what has occurred here, he will know what to do.") +end + +function OfferQuest5(NPC, Spawn) + FaceTarget(NPC, Spawn) + OfferQuest(NPC, Spawn, SendingWord) +end + +function SpokenWithAdalinYet(NPC, Spawn, conversation) + if HasCompletedQuest(Spawn, SendingWord) then + AddConversationOption(conversation, "Yes, I have.", "SpokeWithAdalin") + else + AddConversationOption(conversation, "Not yet.") + end + + StartConversation(conversation, NPC, Spawn, "Have you spoken with Adalin yet?") +end + +function SpokeWithAdalin(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "Perhaps.") + StartConversation(conversation, NPC, Spawn, "Good, perhaps more corruption can be avoided.") +end \ No newline at end of file diff --git a/server/SpawnScripts/Castleview/WaitressBrooak.lua b/server/SpawnScripts/Castleview/WaitressBrooak.lua new file mode 100644 index 000000000..26c042e6d --- /dev/null +++ b/server/SpawnScripts/Castleview/WaitressBrooak.lua @@ -0,0 +1,23 @@ +--[[ + Script Name : SpawnScripts/Castleview/WaitressBrooak.lua + Script Purpose : Waitress Brooak + Script Author : Scatman + Script Date : 2009.10.03 + Script Notes : +--]] + +function spawn(NPC) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/waitress_brooak/qey_village04/newbie_path_froglok/waitressbrooak004.mp3", "", "", 4277299826, 3957611159) + AddConversationOption(conversation, "Perhaps later, gentle lady.") + StartConversation(conversation, NPC, Spawn, "Care ye for a bog water spirit, kind traveler? 'Tis the specialty of the house!") +end \ No newline at end of file diff --git a/server/SpawnScripts/Castleview/YanariCyellann.lua b/server/SpawnScripts/Castleview/YanariCyellann.lua new file mode 100644 index 000000000..77c5b9b50 --- /dev/null +++ b/server/SpawnScripts/Castleview/YanariCyellann.lua @@ -0,0 +1,54 @@ +--[[ + Script Name : SpawnScripts/Castleview/YanariCyellann.lua + Script Purpose : Yanari Cyellann + Script Author : Scatman + Script Date : 2009.10.03 + Script Notes : +--]] + +function spawn(NPC) + --ProvidesQuest(NPC, 1) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + local choice = math.random(1,2) + if choice == 1 then + PlayFlavor(NPC, "voiceover/english/yanari_cyellann/qey_village04/100_researcher_yanari_multhail1_ba125732.mp3", "I'm very busy and don't want you getting hurt. Please leave me to my work.", "", 2153034813, 3927600348) + elseif choice == 2 then + PlayFlavor(NPC, "voiceover/english/yanari_cyellann/qey_village04/100_researcher_yanari_multhail5_d4faf799.mp3", "Don't touch anything! You could turn yourself into a goo or destroy the entire building! I'm very busy and don't want you getting hurt. On your way, now!", "", 3857840792, 1030063822) + end + +--[[ + if HasCompletedQuest(Spawn, 1) then + else + PlayFlavor(NPC, "voiceover/english/yanari_cyellann/qey_village04/yanaricyellan.mp3", "", "", 3613336528, 1736617695) + AddConversationOption(conversation, "I brought the claws that you asked for.", "dlg_26_1") + AddConversationOption(conversation, "You seem to be a bit busy at the moment. I'll leave you alone. ") + StartConversation(conversation, NPC, Spawn, "Do not touch anything! You could turn yourself into a goo or destroy the entire building. What do you need?") + end +--]] +end + +function dlg_26_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/yanari_cyellann/qey_village04/yanaricyellan002.mp3", "", "", 3385634498, 2633500192) + AddConversationOption(conversation, "I'll just be under this very thick table.", "dlg_26_2") + StartConversation(conversation, NPC, Spawn, "Marvelous! I shall use one of the claws to imbue a wand for you. Um ... just take a few steps back, safety and all.") +end + +function dlg_26_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/yanari_cyellann/qey_village04/yanaricyellan003.mp3", "", "", 3490869984, 2394433819) + AddConversationOption(conversation, "I plan to be very careful with it.", "dlg_26_3") + StartConversation(conversation, NPC, Spawn, "It worked! I mean ... here is a wand for you. Use it well.") +end \ No newline at end of file diff --git a/server/SpawnScripts/Castleview/adevioussunshimmerspritespirit.lua b/server/SpawnScripts/Castleview/adevioussunshimmerspritespirit.lua new file mode 100644 index 000000000..e440dac6e --- /dev/null +++ b/server/SpawnScripts/Castleview/adevioussunshimmerspritespirit.lua @@ -0,0 +1,87 @@ +--[[ + Script Name : SpawnScripts/Castleview/adevioussunshimmerspritespirit.lua + Script Purpose : a devious sunshimmer sprite spirit + Script Author : John Adams + Script Date : 2008.09.21 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +local TheCommune = 226 + +function spawn(NPC) + AddSpawnAccess(NPC, NPC) + SetPlayerProximityFunction(NPC, 10, "InRange", "LeaveRange") +end + +function InRange(NPC, Spawn) + if HasQuest(Spawn, TheCommune) and GetQuestStep(Spawn, TheCommune) == 1 then + AddSpawnAccess(NPC, Spawn) + end +end + +function LeaveRange(NPC, Spawn) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + + if HasQuest(Spawn, TheCommune) then + if GetQuestStep(Spawn, TheCommune) == 1 then + ForWhatIHaveDone(NPC, Spawn) + else + Say(NPC, "For what I have done there is no atonement.", Spawn) + end + end +end + +function ForWhatIHaveDone(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/a_devious_sunshimmer_sprite_spirit/qey_village04/quests/sprite/sprite_000.mp3", "", "", 10752592, 2895198222, Spawn) + AddConversationOption(conversation, "What have you done?", "dlg_24_1") + StartConversation(conversation, NPC, Spawn, "For what I have done there is no atonement.") +end + +function dlg_24_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/a_devious_sunshimmer_sprite_spirit/qey_village04/quests/sprite/sprite_001.mp3", "", "", 3975280832, 3208663156, Spawn) + AddConversationOption(conversation, "Why were you corrupted?", "dlg_24_2") + StartConversation(conversation, NPC, Spawn, "I have fallen to corruption. I will never see Oakmyst Forest again. This is a sad day.") +end + +function dlg_24_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/a_devious_sunshimmer_sprite_spirit/qey_village04/quests/sprite/sprite_002.mp3", "", "", 3139966243, 521548245, Spawn) + AddConversationOption(conversation, "What do you remember from when you were corrupted?", "dlg_24_3") + StartConversation(conversation, NPC, Spawn, "I do not know. It was not my choice, if that is what you are asking.") +end + +function dlg_24_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/a_devious_sunshimmer_sprite_spirit/qey_village04/quests/sprite/sprite_003.mp3", "", "", 2953330382, 2257771207, Spawn) + AddConversationOption(conversation, "A green thread?", "dlg_24_4") + StartConversation(conversation, NPC, Spawn, "Very little. The memories are dark and hazy. Through it all the only tangible thing I recall is a single, green thread, tugging at me always.") +end + +function dlg_24_4(NPC, Spawn) + SetStepComplete(Spawn, TheCommune, 1) + + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/a_devious_sunshimmer_sprite_spirit/qey_village04/quests/sprite/sprite_004.mp3", "", "", 3927425201, 2478568698, Spawn) + AddConversationOption(conversation, "Very well.") + AddConversationOption(conversation, "Very well, Tunare be with you.") + StartConversation(conversation, NPC, Spawn, "I must go now. Tunare be with you, Koada'Dal. I will attend to this Green Wisp, it is the least I can do. Please, I must be alone.") +end \ No newline at end of file diff --git a/server/SpawnScripts/Castleview/barrelwithenrichedsoil.lua b/server/SpawnScripts/Castleview/barrelwithenrichedsoil.lua new file mode 100644 index 000000000..4c68c0f27 --- /dev/null +++ b/server/SpawnScripts/Castleview/barrelwithenrichedsoil.lua @@ -0,0 +1,26 @@ +--[[ + Script Name : SpawnScripts/Castleview/barrel_with_enriched_soil.lua + Script Purpose : barrel_with_enriched_soil + Script Author : Scatman + Script Date : 2009.10.02 + Script Notes : Updated by Jabantiz (4/24/2017) +--]] + +local HIGH_ELF_MENTOR_QUEST_1 = 223 + +function spawn(NPC) + SetRequiredQuest(NPC, HIGH_ELF_MENTOR_QUEST_1, 3) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) +end + +function casted_on(NPC, Spawn, Message) + if not QuestStepIsComplete(Spawn, HIGH_ELF_MENTOR_QUEST_1, 3) then + SummonItem(Spawn, 9305, 1) + end +end \ No newline at end of file diff --git a/server/SpawnScripts/Castleview/planter_1.lua b/server/SpawnScripts/Castleview/planter_1.lua new file mode 100644 index 000000000..13b882ecf --- /dev/null +++ b/server/SpawnScripts/Castleview/planter_1.lua @@ -0,0 +1,38 @@ +--[[ + Script Name : SpawnScripts/Castleview/planter_1.lua + Script Purpose : planter_1 + Script Author : Scatman + Script Date : 2009.10.02 + Script Notes : +--]] + +local HIGH_ELF_MENTOR_QUEST_2 = 224 + +function spawn(NPC) + SetRequiredQuest(NPC, HIGH_ELF_MENTOR_QUEST_2, 1) +end + +function hailed(NPC, Spawn) +end + +function respawn(NPC) + spawn(NPC) +end + +function casted_on(Target, Caster, SpellName) + if HasQuest(Caster, HIGH_ELF_MENTOR_QUEST_2) and not QuestStepIsComplete(Caster, HIGH_ELF_MENTOR_QUEST_2, 1) and SpellName == "Plant Seeds" then + conversation = CreateConversation() + AddConversationOption(conversation, "Plant the seeds.", "PlantSeeds") + StartDialogConversation(conversation, 1, Target, Caster, "This is one of the planters that Vindain spoke of.") + end +end + +function PlantSeeds(NPC, Spawn) + SetStepComplete(Spawn, HIGH_ELF_MENTOR_QUEST_2, 1) + local GreenWisp = SpawnMob(GetZone(Spawn), 2360172, false, 787.97, -15.615, -123.30, 220) + Despawn(GreenWisp, 300000) + + conversation = CreateConversation() + AddConversationOption(conversation, "Leave the planter.", "CloseConversation") + StartDialogConversation(conversation, 1, NPC, Spawn, "You place a seed, some soil, and some water into the planter. A fresh green wisp plant begins to grow at a surprising rate.") +end \ No newline at end of file diff --git a/server/SpawnScripts/Castleview/planter_2.lua b/server/SpawnScripts/Castleview/planter_2.lua new file mode 100644 index 000000000..95ab28ef5 --- /dev/null +++ b/server/SpawnScripts/Castleview/planter_2.lua @@ -0,0 +1,38 @@ +--[[ + Script Name : SpawnScripts/Castleview/planter_2.lua + Script Purpose : planter_2 + Script Author : Scatman + Script Date : 2009.10.02 + Script Notes : +--]] + +local HIGH_ELF_MENTOR_QUEST_2 = 224 + +function spawn(NPC) + SetRequiredQuest(NPC, HIGH_ELF_MENTOR_QUEST_2, 2) +end + +function hailed(NPC, Spawn) +end + +function respawn(NPC) + spawn(NPC) +end + +function casted_on(Target, Caster, SpellName) + if HasQuest(Caster, HIGH_ELF_MENTOR_QUEST_2) and not QuestStepIsComplete(Caster, HIGH_ELF_MENTOR_QUEST_2, 2) and SpellName == "Plant Seeds" then + conversation = CreateConversation() + AddConversationOption(conversation, "Plant the seeds.", "PlantSeeds") + StartDialogConversation(conversation, 1, Target, Caster, "This is one of the planters that Vindain spoke of.") + end +end + +function PlantSeeds(NPC, Spawn) + SetStepComplete(Spawn, HIGH_ELF_MENTOR_QUEST_2, 2) + local GreenWisp = SpawnMob(GetZone(Spawn), 2360173, false, 799.61, -15.529, -127.96, 269.984) + Despawn(GreenWisp, 300000) + + conversation = CreateConversation() + AddConversationOption(conversation, "Leave the planter.", "CloseConversation") + StartDialogConversation(conversation, 1, NPC, Spawn, "You place a seed, some soil, and some water into the planter. A fresh green wisp plant begins to grow at a surprising rate.") +end \ No newline at end of file diff --git a/server/SpawnScripts/Castleview/planter_3.lua b/server/SpawnScripts/Castleview/planter_3.lua new file mode 100644 index 000000000..07d40f4de --- /dev/null +++ b/server/SpawnScripts/Castleview/planter_3.lua @@ -0,0 +1,38 @@ +--[[ + Script Name : SpawnScripts/Castleview/planter_3.lua + Script Purpose : planter_3 + Script Author : Scatman + Script Date : 2009.10.02 + Script Notes : +--]] + +local HIGH_ELF_MENTOR_QUEST_2 = 224 + +function spawn(NPC) + SetRequiredQuest(NPC, HIGH_ELF_MENTOR_QUEST_2, 3) +end + +function hailed(NPC, Spawn) +end + +function respawn(NPC) + spawn(NPC) +end + +function casted_on(Target, Caster, SpellName) + if HasQuest(Caster, HIGH_ELF_MENTOR_QUEST_2) and not QuestStepIsComplete(Caster, HIGH_ELF_MENTOR_QUEST_2, 3) and SpellName == "Plant Seeds" then + conversation = CreateConversation() + AddConversationOption(conversation, "Plant the seeds.", "PlantSeeds") + StartDialogConversation(conversation, 1, Target, Caster, "This is one of the planters that Vindain spoke of.") + end +end + +function PlantSeeds(NPC, Spawn) + SetStepComplete(Spawn, HIGH_ELF_MENTOR_QUEST_2, 3) + local GreenWisp = SpawnMob(GetZone(Spawn), 2360167, false, 760.25, -14.4741, -160.396, 200) + Despawn(GreenWisp, 300000) + + conversation = CreateConversation() + AddConversationOption(conversation, "Leave the planter.", "CloseConversation") + StartDialogConversation(conversation, 1, NPC, Spawn, "You place a seed, some soil, and some water into the planter. A fresh green wisp plant begins to grow at a surprising rate.") +end \ No newline at end of file diff --git a/server/SpawnScripts/Castleview/planter_4.lua b/server/SpawnScripts/Castleview/planter_4.lua new file mode 100644 index 000000000..86aef7ce2 --- /dev/null +++ b/server/SpawnScripts/Castleview/planter_4.lua @@ -0,0 +1,38 @@ +--[[ + Script Name : SpawnScripts/Castleview/planter_4.lua + Script Purpose : planter_4 + Script Author : Scatman + Script Date : 2009.10.02 + Script Notes : +--]] + +local HIGH_ELF_MENTOR_QUEST_2 = 224 + +function spawn(NPC) + SetRequiredQuest(NPC, HIGH_ELF_MENTOR_QUEST_2, 4) +end + +function hailed(NPC, Spawn) +end + +function respawn(NPC) + spawn(NPC) +end + +function casted_on(Target, Caster, SpellName) + if HasQuest(Caster, HIGH_ELF_MENTOR_QUEST_2) and not QuestStepIsComplete(Caster, HIGH_ELF_MENTOR_QUEST_2, 4) and SpellName == "Plant Seeds" then + conversation = CreateConversation() + AddConversationOption(conversation, "Plant the seeds.", "PlantSeeds") + StartDialogConversation(conversation, 1, Target, Caster, "This is one of the planters that Vindain spoke of.") + end +end + +function PlantSeeds(NPC, Spawn) + SetStepComplete(Spawn, HIGH_ELF_MENTOR_QUEST_2, 4) + local GreenWisp = SpawnMob(GetZone(Spawn), 2360166, false, 742.82, -14.4122, -165.919, 229.984) + Despawn(GreenWisp, 300000) + + conversation = CreateConversation() + AddConversationOption(conversation, "Leave the planter.", "CloseConversation") + StartDialogConversation(conversation, 1, NPC, Spawn, "You place a seed, some soil, and some water into the planter. A fresh green wisp plant begins to grow at a surprising rate.") +end \ No newline at end of file diff --git a/server/SpawnScripts/Castleview/planter_5.lua b/server/SpawnScripts/Castleview/planter_5.lua new file mode 100644 index 000000000..17a89bde9 --- /dev/null +++ b/server/SpawnScripts/Castleview/planter_5.lua @@ -0,0 +1,68 @@ +--[[ + Script Name : SpawnScripts/Castleview/planter_5.lua + Script Purpose : planter_5 + Script Author : Scatman + Script Date : 2009.10.02 + Script Notes : +--]] + +local HIGH_ELF_MENTOR_QUEST_2 = 224 +local HIGH_ELF_MENTOR_QUEST_3 = 225 +local HIGH_ELF_MENTOR_QUEST_4 = 226 + +function spawn(NPC) + SetRequiredQuest(NPC, HIGH_ELF_MENTOR_QUEST_2, 5) + SetPlayerProximityFunction(NPC, 10, "InRange2", "LeaveRange") + SetPlayerProximityFunction(NPC, 10, "InRange3", "LeaveRange") +end + +function hailed(NPC, Spawn) +end + +function respawn(NPC) + spawn(NPC) +end + +function casted_on(Target, Caster, SpellName) + if HasQuest(Caster, HIGH_ELF_MENTOR_QUEST_2) and not QuestStepIsComplete(Caster, HIGH_ELF_MENTOR_QUEST_2, 5) and SpellName == "Plant Seeds" then + conversation = CreateConversation() + AddConversationOption(conversation, "Plant the seeds.", "PlantSeeds") + StartDialogConversation(conversation, 1, Target, Caster, "This is one of the planters that Vindain spoke of.") + end +end + +function PlantSeeds(NPC, Spawn) + SetStepComplete(Spawn, HIGH_ELF_MENTOR_QUEST_2, 5) + local GreenWisp = SpawnMob(GetZone(Spawn), 2360169, false, 712, -15.4961, -162.534, 200) + local agitated_spirit = SpawnMob(GetZone(Spawn), 2360057, false, 712, -15.4961, -162.534, 200) + if agitated_spirit ~= nil then + AddHate(agitated_spirit, Spawn, 100) + end + Despawn(GreenWisp, 300000) + + conversation = CreateConversation() + AddConversationOption(conversation, "Leave the planter.") + StartDialogConversation(conversation, 1, NPC, Spawn, "You place a seed, some soil, and some water into the planter. The Green Wisp plant begins to grow, but then gurgles and pulls itself from the planter!") +end + +function InRange2(NPC, Spawn) +Say(NPC, "InRange2") + if HasQuest(Spawn, HIGH_ELF_MENTOR_QUEST_3) and GetQuestStep(Spawn, HIGH_ELF_MENTOR_QUEST_3) == 2 then +Say(NPC, "Passed quest check, spawning shrub") + local corrupted_green_wisp = GetSpawn(Spawn, 2360130) + if corrupted_green_wisp == nil then + corrupted_green_wisp = SpawnMob(GetZone(NPC), 2360130, false, 712.015, -15.4941, -162.501, 200) + Despawn(corrupted_green_wisp, 180000) + end + end +end + +function InRange3(NPC, Spawn) + if HasQuest(Spawn, HIGH_ELF_MENTOR_QUEST_4) and GetQuestStep(Spawn, HIGH_ELF_MENTOR_QUEST_4) == 1 then + local Spirit = SpawnMob(GetZone(NPC), 2360059, false, 710.408, -15.5306, -161.493, 200) + Despawn(Spirit, 120000) + end +end + +function LeaveRange(NPC, Spawn) +end diff --git a/server/SpawnScripts/Castleview/planter_6.lua b/server/SpawnScripts/Castleview/planter_6.lua new file mode 100644 index 000000000..c7c208221 --- /dev/null +++ b/server/SpawnScripts/Castleview/planter_6.lua @@ -0,0 +1,38 @@ +--[[ + Script Name : SpawnScripts/Castleview/planter_6.lua + Script Purpose : planter_6 + Script Author : Scatman + Script Date : 2009.10.02 + Script Notes : +--]] + +local HIGH_ELF_MENTOR_QUEST_2 = 224 + +function spawn(NPC) + SetRequiredQuest(NPC, HIGH_ELF_MENTOR_QUEST_2, 6) +end + +function hailed(NPC, Spawn) +end + +function respawn(NPC) + spawn(NPC) +end + +function casted_on(Target, Caster, SpellName) + if HasQuest(Caster, HIGH_ELF_MENTOR_QUEST_2) and not QuestStepIsComplete(Caster, HIGH_ELF_MENTOR_QUEST_2, 6) and SpellName == "Plant Seeds" then + conversation = CreateConversation() + AddConversationOption(conversation, "Plant the seeds.", "PlantSeeds") + StartDialogConversation(conversation, 1, Target, Caster, "This is one of the planters that Vindain spoke of.") + end +end + +function PlantSeeds(NPC, Spawn) + SetStepComplete(Spawn, HIGH_ELF_MENTOR_QUEST_2, 6) + local GreenWisp = SpawnMob(GetZone(Spawn), 2360168, false, 719.588, -20.4004, -143.931, 0) + Despawn(GreenWisp, 300000) + + conversation = CreateConversation() + AddConversationOption(conversation, "Leave the planter.", "CloseConversation") + StartDialogConversation(conversation, 1, NPC, Spawn, "You place a seed, some soil, and some water into the planter. A fresh green wisp plant begins to grow at a surprising rate.") +end \ No newline at end of file diff --git a/server/SpawnScripts/Castleview/planter_7.lua b/server/SpawnScripts/Castleview/planter_7.lua new file mode 100644 index 000000000..96eb74c08 --- /dev/null +++ b/server/SpawnScripts/Castleview/planter_7.lua @@ -0,0 +1,38 @@ +--[[ + Script Name : SpawnScripts/Castleview/planter_7.lua + Script Purpose : planter_7 + Script Author : Scatman + Script Date : 2009.10.02 + Script Notes : +--]] + +local HIGH_ELF_MENTOR_QUEST_2 = 224 + +function spawn(NPC) + SetRequiredQuest(NPC, HIGH_ELF_MENTOR_QUEST_2, 7) +end + +function hailed(NPC, Spawn) +end + +function respawn(NPC) + spawn(NPC) +end + +function casted_on(Target, Caster, SpellName) + if HasQuest(Caster, HIGH_ELF_MENTOR_QUEST_2) and not QuestStepIsComplete(Caster, HIGH_ELF_MENTOR_QUEST_2, 7) and SpellName == "Plant Seeds" then + conversation = CreateConversation() + AddConversationOption(conversation, "Plant the seeds.", "PlantSeeds") + StartDialogConversation(conversation, 1, Target, Caster, "This is one of the planters that Vindain spoke of.") + end +end + +function PlantSeeds(NPC, Spawn) + SetStepComplete(Spawn, HIGH_ELF_MENTOR_QUEST_2, 7) + local GreenWisp = SpawnMob(GetZone(Spawn), 2360170, false, 749.837, -12.8826, -126.576, 220) + Despawn(GreenWisp, 300000) + + conversation = CreateConversation() + AddConversationOption(conversation, "Leave the planter.", "CloseConversation") + StartDialogConversation(conversation, 1, NPC, Spawn, "You place a seed, some soil, and some water into the planter. A fresh green wisp plant begins to grow at a surprising rate.") +end \ No newline at end of file diff --git a/server/SpawnScripts/Castleview/planter_8.lua b/server/SpawnScripts/Castleview/planter_8.lua new file mode 100644 index 000000000..f8da8a268 --- /dev/null +++ b/server/SpawnScripts/Castleview/planter_8.lua @@ -0,0 +1,38 @@ +--[[ + Script Name : SpawnScripts/Castleview/planter_8.lua + Script Purpose : planter_8 + Script Author : Scatman + Script Date : 2009.10.02 + Script Notes : +--]] + +local HIGH_ELF_MENTOR_QUEST_2 = 224 + +function spawn(NPC) + SetRequiredQuest(NPC, HIGH_ELF_MENTOR_QUEST_2, 8) +end + +function hailed(NPC, Spawn) +end + +function respawn(NPC) + spawn(NPC) +end + +function casted_on(Target, Caster, SpellName) + if HasQuest(Caster, HIGH_ELF_MENTOR_QUEST_2) and not QuestStepIsComplete(Caster, HIGH_ELF_MENTOR_QUEST_2, 8) and SpellName == "Plant Seeds" then + conversation = CreateConversation() + AddConversationOption(conversation, "Plant the seeds.", "PlantSeeds") + StartDialogConversation(conversation, 1, Target, Caster, "This is one of the planters that Vindain spoke of.") + end +end + +function PlantSeeds(NPC, Spawn) + SetStepComplete(Spawn,HIGH_ELF_MENTOR_QUEST_2, 8) + local GreenWisp = SpawnMob(GetZone(Spawn), 2360171, false, 738.12, -12.9465, -115.119, 300) + Despawn(GreenWisp, 300000) + + conversation = CreateConversation() + AddConversationOption(conversation, "Leave the planter.", "CloseConversation") + StartDialogConversation(conversation, 1, NPC, Spawn, "You place a seed, some soil, and some water into the planter. A fresh green wisp plant begins to grow at a surprising rate.") +end \ No newline at end of file diff --git a/server/SpawnScripts/Caves/ConsulBree.lua b/server/SpawnScripts/Caves/ConsulBree.lua new file mode 100644 index 000000000..ab6fd5e82 --- /dev/null +++ b/server/SpawnScripts/Caves/ConsulBree.lua @@ -0,0 +1,457 @@ +--[[ + Script Name : SpawnScripts/Caves/ConsulBree.lua + Script Purpose : Consul Bree + Script Author : Scatman + Script Date : 2008.09.21 + Script Notes : +--]] + +local QUEST_FROM_OAKMYST = 212 +local QUEST_FROM_PEATBOG = 220 +local QUEST_1 = 361 +local QUEST_2 = 224 +local QUEST_3 = 225 +local QUEST_4 = 230 + +function spawn(NPC) + ProvidesQuest(NPC, QUEST_1) + ProvidesQuest(NPC, QUEST_2) + ProvidesQuest(NPC, QUEST_3) + ProvidesQuest(NPC, QUEST_4) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + if HasQuest(Spawn, QUEST_FROM_OAKMYST) or HasQuest(Spawn, QUEST_FROM_PEATBOG) then + AddConversationOption(conversation, "I am here as requested.", "HereAsRequested") + end + + if HasCompletedQuest(Spawn, QUEST_1) then + if HasCompletedQuest(Spawn, QUEST_2) then + if HasCompletedQuest(Spawn, QUEST_3) then + if HasCompletedQuest(Spawn, QUEST_4) then + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/consul_bree/qey_adv03_caves/qst_bree_done_c548f9b0.mp3", "The Queen was right about you. We may yet meet again.", "", 2998869341, 2973499858) + elseif HasQuest(Spawn, QUEST_4) then + OnQuest4(NPC, Spawn, conversation) + else + OnQuest3(NPC, Spawn, conversation) + end + elseif HasQuest(Spawn, QUEST_3) then + OnQuest3(NPC, Spawn, conversation) + else + OnQuest2(NPC, Spawn, conversation) + end + elseif HasQuest(Spawn, QUEST_2) then + OnQuest2(NPC, Spawn, conversation) + else + OnQuest1(NPC, Spawn, conversation) + end + elseif HasQuest(Spawn, QUEST_1) then + OnQuest1(NPC, Spawn, conversation) + else + IAmGladYouAreHere(NPC, Spawn, conversation) + end +end + +------------------------------------------------------------------------------------------------------------------- +-- QUEST FROM OAKMYST +------------------------------------------------------------------------------------------------------------------- + +function HereAsRequested(NPC, Spawn) + if HasQuest(Spawn, QUEST_FROM_OAKMYST) then + SetStepComplete(Spawn, QUEST_FROM_OAKMYST, 1) + elseif HasQuest(Spawn, QUEST_FROM_PEATBOG) then + SetStepComplete(Spawn, QUEST_FROM_PEATBOG, 1) + end + + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/consul_bree/qey_adv03_caves/quests/bree/bree_001.mp3", "", "", 2064805321, 3198467105) + + if not HasCompletedQuest(Spawn, QUEST_1) and not HasQuest(Spawn, QUEST_1) then + AddConversationOption(conversation, "How can I be of service?", "dlg_0_2") + else + AddConversationOption(conversation, "I will get to work on my current task.", "dlg_2_2") + end + + StartConversation(conversation, NPC, Spawn, "That you are. I appreciate your answering the summons.") +end + +------------------------------------------------------------------------------------------------------------------- +-- QUEST 1 +------------------------------------------------------------------------------------------------------------------- + +function IAmGladYouAreHere(NPC, Spawn, conversation) + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/consul_bree/qey_adv03_caves/quests/bree/bree_000.mp3", "", "", 312135119, 4181129061) + AddConversationOption(conversation, "Why is that?", "dlg_0_1") + AddConversationOption(conversation, "What is going on here?", "dlg_1_1") + AddConversationOption(conversation, "I have to go.") + StartConversation(conversation, NPC, Spawn, "I am glad you are here.") +end + +function dlg_0_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/consul_bree/qey_adv03_caves/quests/bree/bree_002.mp3", "", "", 2428180651, 3557450253) + AddConversationOption(conversation, "What must I do?", "dlg_0_2") + StartConversation(conversation, NPC, Spawn, "There are problems here to solve. You and I are part of the solution.") +end + +function dlg_0_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/consul_bree/qey_adv03_caves/quests/bree/bree_003.mp3", "", "", 502817302, 1202580742) + AddConversationOption(conversation, "What can I do to help?", "dlg_0_3") + AddConversationOption(conversation, "How do you know this?", "dlg_1_1") + StartConversation(conversation, NPC, Spawn, "The Rockpaw gnoll clan has wrested control of these caves to themselves. They are planning something very large.") +end + +function dlg_0_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/consul_bree/qey_adv03_caves/quests/bree/bree_004.mp3", "", "", 3518125832, 3106838592) + AddConversationOption(conversation, "Very well.", "OfferQuest1") + StartConversation(conversation, NPC, Spawn, "To begin with you can help me retrieve an updated copy of the gnoll field book. My copy is more than a few weeks old and these gnolls are more organized than one would like to credit their race capable of. The leaders of each clan of gnolls within these caves will have the order book. There is a Dustpaw gnoll camp west of here, on this level. Retrieve their field book. It may be encoded. If you see a small symbol of a paw held to an eye, then it is encoded. If it is then you must find the key to the cipher, this could be carried by any gnoll. Once you have the key, bring it and the book back to me so I can study it.") +end + +function dlg_1_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/consul_bree/qey_adv03_caves/quests/bree/bree_info_000.mp3", "", "", 3394008889, 3046376303) + AddConversationOption(conversation, "Was there a link?", "dlg_1_2") + StartConversation(conversation, NPC, Spawn, "I was here on my own a short time ago. These Caves are home to a few gnoll clans: the Dustpaw, the Mudpaw and the Rockpaw. Previously they had fought amongst themselves. After a series of strange reports from a few of the areas that surround Qeynos, I was sent here to investigate a possible link.") +end + +function dlg_1_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/consul_bree/qey_adv03_caves/quests/bree/bree_info_001.mp3", "", "", 3459374999, 3197214487) + AddConversationOption(conversation, "So what was the link?", "dlg_1_3") + StartConversation(conversation, NPC, Spawn, "A strong link. Among the Rockpaw gnolls a new leader has come, High Shaman Zen/'Durath. He/'s smart, smarter than any other gnoll I know of. He rallied the Rockpaw gnolls and brought them victory over the other two clans. He then reestablished ties with Blackburrow. Blackburrow provided him with some contacts. Through these contacts Zen/'Durath got in touch with a few Freeportian engineers, Fluwkowir and Fulkoir Haggleton.") +end + +function dlg_1_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/consul_bree/qey_adv03_caves/quests/bree/bree_info_002.mp3", "", "", 16239315, 349954635) + AddConversationOption(conversation, "Why not?", "dlg_1_4") + StartConversation(conversation, NPC, Spawn, "There had been gnoll sightings in the Forest Ruins, the Oakmyst Forest and the Peat Bog. That alone is very strange. There were also reports of gnolls possessing strange machines. The purpose of most of these machines has yet to be deciphered. A couple, however, are known to us. One is meant to dig, and the other is meant to poison. When I arrived here things were quiet, for a time. Now that is no longer the case.") +end + +function dlg_1_4(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/consul_bree/qey_adv03_caves/quests/bree/bree_info_003.mp3", "", "", 3632364295, 1198051029) + AddConversationOption(conversation, "They plan on attacking Qeynos?", "dlg_1_5") + StartConversation(conversation, NPC, Spawn, "The gnolls have brought an expert smithy from Blackburrow. They/'ve been creating armor to outfit an army for some time now. And that isn/'t the only source of noise... The Haggletons have provided these gnolls with massive digging machines. When I was last down here the plans were not finalized, but it looked like they were going to tunnel directly into Qeynos. This is why we must act discretely. Panic would only complicate things at this point.") +end + +function dlg_1_5(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/consul_bree/qey_adv03_caves/quests/bree/bree_info_004.mp3", "", "", 1057994736, 896440060) + AddConversationOption(conversation, "How can I help?", "dlg_0_3") + StartConversation(conversation, NPC, Spawn, "I believe so, though not directly.") +end + +function OfferQuest1(NPC, Spawn) + FaceTarget(NPC, Spawn) + OfferQuest(NPC, Spawn, QUEST_1) +end + +function OnQuest1(NPC, Spawn, conversation) + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/consul_bree/qey_adv03_caves/quests/bree/bree_005.mp3", "", "", 3442310120, 962597541) + if (HasQuest(Spawn, QUEST_1) and GetQuestStep(Spawn, QUEST_1) == 4) or (HasCompletedQuest(Spawn, QUEST_1)) then + AddConversationOption(conversation, "I have. Here it is.", "dlg_7_1") + else + AddConversationOption(conversation, "No, not yet.") + end + + --------- TEMPORARY + if HasQuest(Spawn, QUEST_1) and GetQuestStep(Spawn, QUEST_1) == 2 then + SetStepComplete(Spawn, QUEST_1, 2) + end + + AddConversationOption(conversation, "What can you tell me about the Caves?", "AboutCaves") + StartConversation(conversation, NPC, Spawn, "Have you gotten the gnollish order book?") +end + +function AboutCaves(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/consul_bree/qey_adv03_caves/quests/bree/bree_info_000.mp3", "", "", 3394008889, 3046376303) + AddConversationOption(conversation, "Was there a link?", "dlg_4_2") + StartConversation(conversation, NPC, Spawn, "I was here on my own a short time ago. These Caves are home to a few gnoll clans: the Dustpaw, the Mudpaw and the Rockpaw. Previously they had fought amongst themselves. After a series of strange reports from a few of the areas that surround Qeynos, I was sent here to investigate a possible link.") +end + +function dlg_4_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/consul_bree/qey_adv03_caves/quests/bree/bree_info_001.mp3", "", "", 3459374999, 3197214487) + AddConversationOption(conversation, "So what was the link?", "dlg_4_3") + StartConversation(conversation, NPC, Spawn, "A strong link. Among the Rockpaw gnolls a new leader has come, High Shaman Zen/'Durath. He/'s smart, smarter than any other gnoll I know of. He rallied the Rockpaw gnolls and brought them victory over the other two clans. He then reestablished ties with Blackburrow. Blackburrow provided him with some contacts. Through these contacts Zen/'Durath got in touch with a few Freeportian engineers, Fluwkowir and Fulkoir Haggleton.") +end + +function dlg_4_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/consul_bree/qey_adv03_caves/quests/bree/bree_info_002.mp3", "", "", 16239315, 349954635) + AddConversationOption(conversation, "Why not?", "dlg_4_4") + StartConversation(conversation, NPC, Spawn, "There had been gnoll sightings in the Forest Ruins, the Oakmyst Forest and the Peat Bog. That alone is very strange. There were also reports of gnolls possessing strange machines. The purpose of most of these machines has yet to be deciphered. A couple, however, are known to us. One is meant to dig, and the other is meant to poison. When I arrived here things were quiet, for a time. Now that is no longer the case.") +end + +function dlg_4_4(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/consul_bree/qey_adv03_caves/quests/bree/bree_info_003.mp3", "", "", 3632364295, 1198051029) + AddConversationOption(conversation, "They plan on attacking Qeynos?", "dlg_4_5") + StartConversation(conversation, NPC, Spawn, "The gnolls have brought an expert smithy from Blackburrow. They/'ve been creating armor to outfit an army for some time now. And that isn/'t the only source of noise... The Haggletons have provided these gnolls with massive digging machines. When I was last down here the plans were not finalized, but it looked like they were going to tunnel directly into Qeynos. This is why we must act discretely. Panic would only complicate things at this point.") +end + +function dlg_4_5(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/consul_bree/qey_adv03_caves/quests/bree/bree_info_004.mp3", "", "", 1057994736, 896440060) + AddConversationOption(conversation, "I will see what I can find out.") + StartConversation(conversation, NPC, Spawn, "I believe so, though not directly.") +end + +function dlg_7_1(NPC, Spawn) + if HasQuest(Spawn, QUEST_1) then + SetStepComplete(Spawn, QUEST_1, 4) + end + + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/consul_bree/qey_adv03_caves/quests/bree/bree_006.mp3", "", "", 3677963528, 2296083792) + AddConversationOption(conversation, "I am ready.", "dlg_7_2") + StartConversation(conversation, NPC, Spawn, "Great! This will prove to be very useful I am certain... Yes, their plans are as we suspected. " .. GetName(Spawn) .. ", we need to put an immediate halt to their production! Are you ready to act again?") +end + +------------------------------------------------------------------------------------------------------------------- +-- QUEST 2 +------------------------------------------------------------------------------------------------------------------- + +function dlg_7_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/consul_bree/qey_adv03_caves/quests/bree/bree_007.mp3", "", "", 2761151538, 2929645199) + AddConversationOption(conversation, "All right.", "OfferQuest2") + StartConversation(conversation, NPC, Spawn, "The gnolls are creating an army that will be used to invade Qeynos. I had Emma whip up some explosives just for times like this. Take these charges. I need you to destroy the forge in the armory; it/'s on the level above this one. The gnolls also have a number of machine parts scattered around. These are not the two, main digging machines that they are using, but they are still part of the gnoll war machine and should be destroyed.") +end + +function OfferQuest2(NPC, Spawn) + FaceTarget(NPC, Spawn) + OfferQuest(NPC, Spawn, QUEST_2) +end + +function dlg_7_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/consul_bree/qey_adv03_caves/quests/bree/bree_005.mp3", "", "", 3442310120, 962597541) + AddConversationOption(conversation, "I have. Here it is.", "dlg_7_4") + AddConversationOption(conversation, "What can you tell me about the Caves?") + StartConversation(conversation, NPC, Spawn, "Have you gotten the gnollish order book?") +end + +function OnQuest2(NPC, Spawn, conversation) + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/consul_bree/qey_adv03_caves/quests/bree/bree_008.mp3", "", "", 3464612854, 1006122097) + if (HasQuest(Spawn, QUEST_2) and GetQuestStep(Spawn, QUEST_2) == 3) or (HasCompletedQuest(Spawn, QUEST_2)) then + AddConversationOption(conversation, "Yes, I destroyed the machines and the forge.", "dlg_15_1") + else + AddConversationOption(conversation, "I need more explosives.", "MoreExplosives") + AddConversationOption(conversation, "No, not yet.") + end + AddConversationOption(conversation, "What can you tell me about the Caves?", "AboutCaves") + AddConversationOption(conversation, "Have you learned anything new from the book?", "LearnedFromBook") + StartConversation(conversation, NPC, Spawn, "Have you done as I asked?") +end + +function LearnedFromBook(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/consul_bree/qey_adv03_caves/quests/bree/bree_info_005.mp3", "", "", 2808914338, 1740276714) + AddConversationOption(conversation, "Can they be stopped?", "dlg_9_2") + StartConversation(conversation, NPC, Spawn, "The gnolls have a very sophisticated attack plan, especially considering they/'re gnolls. They plan to dig under Qeynos and sneak inside. Once there they will fight, but not with much force. Eventually they will attack, forcing us to defend ourselves. As this happens they plan on attacking from a new entry point, hopefully catching us unaware.") +end + +function dlg_9_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/consul_bree/qey_adv03_caves/quests/bree/bree_info_006.mp3", "", "", 1238557944, 2958306914) + AddConversationOption(conversation, "I see.") + StartConversation(conversation, NPC, Spawn, "Sure, but not without a heavy loss of life. It would be preferable, by far, to stop them here, now. Crippling their ability to dig and produce armor is our best bet at this point.") +end + +function MoreExplosives(NPC, Spawn) + -- 7 explosives + for i = 1, 6, 1 do + SummonItem(Spawn, 4873) + SendMessage(Spawn, "You receive [explosives].") + SendPopUpMessage(Spawn, "You receive explosives.", 255, 255, 255) + end +end + + +function dlg_15_1(NPC, Spawn) + if HasQuest(Spawn, QUEST_2) then + SetStepComplete(Spawn, QUEST_2, 3) + end + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/consul_bree/qey_adv03_caves/quests/bree/bree_009.mp3", "", "", 2550748211, 2686782300) + AddConversationOption(conversation, "What do you mean?", "dlg_15_2") + StartConversation(conversation, NPC, Spawn, "Wonderful. A setback like this will cost them dearly. They may not have proper time to recoup. I do not intend to give them that chance.") +end + +------------------------------------------------------------------------------------------------------------------- +-- QUEST 3 +------------------------------------------------------------------------------------------------------------------- + +function dlg_15_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/consul_bree/qey_adv03_caves/quests/bree/bree_011.mp3", "", "", 980784513, 319939534) + AddConversationOption(conversation, "What is the ritual?", "dlg_15_3") + StartConversation(conversation, NPC, Spawn, "I know enough of these gnolls. I did stay here for quite some time, hidden but among them, you realize. The Rockpaw have a ritual they use when they wish to speak with Zen/'Durath. If we mimic that ritual he will show.") +end + +function dlg_15_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/consul_bree/qey_adv03_caves/quests/bree/bree_012.mp3", "", "", 4286756342, 1858639464) + AddConversationOption(conversation, "I can do it.", "OfferQuest3") + StartConversation(conversation, NPC, Spawn, "First you must collect the necessary items. You will need five crown scales from the albino pythons. You will also need some of the Rockpaw shaman/'s incantation powder, you can find this in the Rockpaw camps. Finally, you will need a river stone from the river behemoths. These can all be found on the uppermost level here. However, the river stone may be difficult to get.") +end + +function OfferQuest3(NPC, Spawn) + FaceTarget(NPC, Spawn) + OfferQuest(NPC, Spawn, QUEST_3) +end + +function OnQuest3(NPC, Spawn, conversation) + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/consul_bree/qey_adv03_caves/quests/bree/bree_013.mp3", "", "", 1041018837, 4007905391) + if (HasQuest(Spawn, QUEST_3) and GetQuestStep(Spawn, QUEST_3) == 5) or (HasCompletedQuest(Spawn, QUEST_3)) then + AddConversationOption(conversation, "Yes, here they are.", "dlg_22_1") + else + AddConversationOption(conversation, "No, not yet.") + end + AddConversationOption(conversation, "What can you tell me about the Caves?", "AboutCaves") + AddConversationOption(conversation, "What can you tell me about the gnoll attack plan?", "GnollAttack") + AddConversationOption(conversation, "Have you learned anything new from the book?", "LearnedFromBook") + StartConversation(conversation, NPC, Spawn, "Have you collected the materials?") +end + +function GnollAttack(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "Can they be stopped?", "CanTheyBeStopped") + StartConversation(conversation, NPC, Spawn, "The gnolls have a very sophistical attack plan, especially considering they/'re gnolls. They plan to dig under Qeynos and attack inside. Once there, they will fight, but not with much force. Eventually they will attack, forcing us to defend ourselves. As this happens they plan on attacking from every entry point hopefully catching us unaware.") +end + +function CanTheyBeStopped(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "I see.") + StartConversation(conversation, NPC, Spawn, "Sure, but not without a heavy loss of life. It would be preferable, by far, to stop them here, now. Crippling their ability to dig and produce armor is our best bet at this point.") +end + +function dlg_22_1(NPC, Spawn) + if HasQuest(Spawn, QUEST_3) then + SetStepComplete(Spawn, QUEST_3, 5) + end + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/consul_bree/qey_adv03_caves/quests/bree/bree_014.mp3", "", "", 247398570, 2593527030) + AddConversationOption(conversation, "Yes.", "dlg_22_2") + StartConversation(conversation, NPC, Spawn, "Then I have all I need. I will make the staff of summoning now. Do not be alarmed, the skeleton that adorns it is not a recent one. With this staff Zen/'Durath will be summoned. Are you ready?") +end + +------------------------------------------------------------------------------------------------------------------- +-- QUEST 4 +------------------------------------------------------------------------------------------------------------------- + +function dlg_22_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/consul_bree/qey_adv03_caves/quests/bree/bree_015.mp3", "", "", 2549188816, 2219129213) + AddConversationOption(conversation, "I will return.", "OfferQuest4") + StartConversation(conversation, NPC, Spawn, "Good. Take this staff to the large skull on the northern end one level above this one. Once there place the staff in the skull, this will bring forth Zen/'Durath. Return to me when he is dead.") +end + +function OfferQuest4(NPC, Spawn) + FaceTarget(NPC, Spawn) + OfferQuest(NPC, Spawn, QUEST_4) +end + +function OnQuest4(NPC, Spawn, conversation) + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/consul_bree/qey_adv03_caves/quests/bree/bree_016.mp3", "", "", 2025655936, 1813056075) + if GetQuestStep(Spawn, QUEST_4) == 2 then + AddConversationOption(conversation, "Yes.", "dlg_28_1") + else + AddConversationOption(conversation, "Not yet.", "dlg_27_1") + AddConversationOption(conversation, "I need the summoning staff.", "NeedStaff") + end + AddConversationOption(conversation, "What can you tell me about the Caves?", "AboutCaves") + AddConversationOption(conversation, "What can you tell me about the gnoll attack plan?", "GnollAttack") + AddConversationOption(conversation, "Is there anything else you can tell me?", "AnythingElse") + StartConversation(conversation, NPC, Spawn, "Is Zen/'Durath dead?") +end + +function AnythingElse(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "Thanks.") + StartConversation(conversation, NPC, Spawn, "The book spoke of /'Haggletons/' who are Freeportian gnomes. We don/'t know if they acted alone or with some element of their government. It/'s not likely we/'ll ever know. From the way things are around here now, it/'s clear the gnoll/'s production is slowing. I do not expect this to last much longer, thanks in large part to you. I am lucky to have you on my side.") +end + +function NeedStaff(NPC, Spawn) + -- summoning staff + if not HasItem(Spawn, 11850) then + SummonItem(Spawn, 11850, 1) + end +end + +function dlg_28_1(NPC, Spawn) + SetStepComplete(Spawn, QUEST_4, 2) + + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/consul_bree/qey_adv03_caves/quests/bree/bree_017.mp3", "", "", 1945105628, 3603406518) + AddConversationOption(conversation, "Thank you.") + StartConversation(conversation, NPC, Spawn, "Then it is done, and the Rockpaw shall soon fall. I am very relieved. I am lucky to have you, " .. GetName(Spawn) .. ". Please, take this as a sign of my thanks, and the thanks of the Queen. You have earned it.") +end \ No newline at end of file diff --git a/server/SpawnScripts/Caves/EmmaTorque.lua b/server/SpawnScripts/Caves/EmmaTorque.lua new file mode 100644 index 000000000..4def4455c --- /dev/null +++ b/server/SpawnScripts/Caves/EmmaTorque.lua @@ -0,0 +1,223 @@ +--[[ + Script Name : SpawnScripts/Caves/EmmaTorque.lua + Script Purpose : Emma Torque + Script Author : Scatman + Script Date : 2009.10.18 + Script Notes : +--]] + +local QUEST1_FROM_CONSULBREE = 223 +local QUEST3_FROM_CONSULBREE = 225 +local QUEST4_FROM_CONSULBREE = 230 +local QUEST_1 = 226 +local QUEST_2 = 227 + +function spawn(NPC) + ProvidesQuest(NPC, QUEST_1) + ProvidesQuest(NPC, QUEST_2) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + -- her quests require QUEST1_FROM_CONSULBREE to be completed first + + if HasQuest(Spawn, QUEST3_FROM_CONSULBREE) then + if GetQuestStep(Spawn, QUEST3_FROM_CONSULBREE) == 1 then + AddConversationOption(conversation, "Consul Bree sent me to you. I need a river stone.", "dlg_17_1") + + -- Drawing Ray + elseif not HasItem(Spawn, 140946) then + AddConversationOption(conversation, "I need the Drawing Ray.", "dlg_17_2") + end + end + + if HasCompletedQuest(Spawn, QUEST1_FROM_CONSULBREE) then + if HasCompletedQuest(Spawn, QUEST_1) then + if HasCompletedQuest(Spawn, QUEST_2) then + if HasCompletedQuest(Spawn, QUEST4_FROM_CONSULBREE) then + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/emma_torque/qey_adv03_caves/qst_emma_done_3b19b0b7.mp3", "Fulkoir had a great mind, but a poor, poor heart.", "", 4051073368, 1187972437, Spawn) + else + OnQuest2(NPC, Spawn, conversation) + end + elseif HasQuest(Spawn, QUEST_2) then + OnQuest2(NPC, Spawn, conversation) + else + OnQuest1(NPC, Spawn, conversation) + end + elseif HasQuest(Spawn, QUEST_1) then + OnQuest1(NPC, Spawn, conversation) + else + HaveAlmostEverything(NPC, Spawn, conversation) + end + elseif HasQuest(Spawn, QUEST1_FROM_CONSULBREE) then + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/emma_torque/qey_adv03_caves/qst_emma_notready_aeac255d.mp3", "Once Consul Bree gets me the information she promised me I'll be able to design these charges! Maybe you can help her.", "", 2803218058, 1631284097, Spawn) + else + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/emma_torque/qey_adv03_caves/qst_emma_notready_aeac255d.mp3", "Once Consul Bree gets me the information she promised me I'll be able to design these charges! Maybe you can help her.", "", 2803218058, 1631284097, Spawn) + end +end + +------------------------------------------------------------------------------------------------------------------- +-- QUEST 3 FROM CONSUL BREE +------------------------------------------------------------------------------------------------------------------- + +function dlg_17_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/emma_torque/qey_adv03_caves/quests/emma/emma_bree_000.mp3", "", "", 1968235016, 878780365, Spawn) + AddConversationOption(conversation, "May I have one?", "dlg_17_2") + StartConversation(conversation, NPC, Spawn, "Ah, yes. She had me studying those a while back. Very complicated procedure to draw the stone from a river behemoth. You need to kill one and then, from its remains, you can draw the stone to the surface. After that it is as simple as grabbing it. You'll need a Drawing Ray--one of my inventions--to get it.") +end + +function dlg_17_2(NPC, Spawn) + SetStepComplete(Spawn, QUEST3_FROM_CONSULBREE, 1) + + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + -- Drawing Ray + if not HasItem(Spawn, 140946) then + SummonItem(Spawn, 140946, 1) + SendMessage(Spawn, "You receive [Drawing Ray].") + end + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/emma_torque/qey_adv03_caves/quests/emma/emma_ray.mp3", "", "", 98468078, 2274575394, Spawn) + AddConversationOption(conversation, "Thanks, I guess.") + StartConversation(conversation, NPC, Spawn, "Sure. Be careful with it. I don't think it will explode and kill you, but I also don't want you using it anywhere near me.") +end + +------------------------------------------------------------------------------------------------------------------- +-- QUEST 1 +------------------------------------------------------------------------------------------------------------------- + +function HaveAlmostEverything(NPC, Spawn) + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/emma_torque/qey_adv03_caves/quests/emma/emma_000.mp3", "", "", 1365042533, 2322859650, Spawn) + AddConversationOption(conversation, "Destruction?", "dlg_12_1") + AddConversationOption(conversation, "I have to go.") + StartConversation(conversation, NPC, Spawn, "I have almost everything I need! You know, most of my people are so preoccupied with creation that they forget to see the value in proper destruction.") +end + +function dlg_12_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/emma_torque/qey_adv03_caves/quests/emma/emma_001.mp3", "", "", 961712587, 2002405652, Spawn) + AddConversationOption(conversation, "To demolish?", "dlg_12_2") + StartConversation(conversation, NPC, Spawn, "Oh? Are you a fan of destruction? The elegant need for precise calculation is unobserved to many, but demolitions are not something suited to an ogre mind. Real demolitions, I mean. Sure an ogre can smash all he wants, but with a fraction of that effort a correctly placed explosive charge can render far more damage. That is why I am here.") +end + +function dlg_12_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/emma_torque/qey_adv03_caves/quests/emma/emma_002.mp3", "", "", 3590999842, 100037735, Spawn) + AddConversationOption(conversation, "What kind of machines?", "dlg_12_3") + StartConversation(conversation, NPC, Spawn, "Consul Bree asked for me. Well, not me specifically, but the Engineering Guild knew I was perfect for the job. These gnolls have come across some terrible machines, " .. GetName(Spawn) .. ".") +end + +function dlg_12_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/emma_torque/qey_adv03_caves/quests/emma/emma_003.mp3", "", "", 3625869581, 925115546, Spawn) + AddConversationOption(conversation, "When will you be ready?", "dlg_12_4") + StartConversation(conversation, NPC, Spawn, "Devices that can be used to tunnel through rock with the speed of dynamite, but the subtlety of manual labor. I have reason to believe that these machines--among others--were provided to the gnolls by Freeportians. A pair of gnomes: Fulkoir and Fluwkowir Haggleton. Consul Bree has seen the machines, that is why she has called for me. And I'm almost ready to move.") +end + +function dlg_12_4(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/emma_torque/qey_adv03_caves/quests/emma/emma_004.mp3", "", "", 1144754177, 2806670128, Spawn) + AddConversationOption(conversation, "How can I help?", "dlg_12_5") + StartConversation(conversation, NPC, Spawn, "As soon as I get a large enough collection of blasting powder. I have enough for the smaller devices, those that Consul Bree will be able to take care of--my precision won't really be needed. But the Freeportian gnomes have finished construction on two monstrous machines. Those machines are here, now in the Caves. And it falls to me to destroy them. But I need help.") +end + +function dlg_12_5(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/emma_torque/qey_adv03_caves/quests/emma/emma_005.mp3", "", "", 2949726626, 4278022809, Spawn) + AddConversationOption(conversation, "All right.", "OfferQuest1") + StartConversation(conversation, NPC, Spawn, "All around here are the wasteful remnants of previous dig projects. You will find copious amounts of blasting powder among the ignored, powdered mineral that is spit out by their digging machines. Collect this powder for me.") +end + +function OfferQuest1(NPC, Spawn) + FaceTarget(NPC, Spawn) + OfferQuest(NPC, Spawn, QUEST_1) +end + +function OnQuest1(NPC, Spawn, conversation) + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/emma_torque/qey_adv03_caves/quests/emma/emma_006.mp3", "", "", 3167880761, 2808104950, Spawn) + if (HasQuest(Spawn, QUEST_1) and GetQuestStep(Spawn, QUEST_1) == 2) or (HasCompletedQuest(Spawn, QUEST_1)) then + AddConversationOption(conversation, "Yes, I have. Here you go.", "dlg_20_1") + else + AddConversationOption(conversation, "No, not yet.") + end + StartConversation(conversation, NPC, Spawn, "Have you collected the powder?") +end + +function dlg_20_1(NPC, Spawn) + if HasQuest(Spawn, QUEST_1) then + SetStepComplete(Spawn, QUEST_1, 2) + end + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/emma_torque/qey_adv03_caves/quests/emma/emma_007.mp3", "", "", 4075800183, 229387878, Spawn) + AddConversationOption(conversation, "I am ready.", "dlg_20_2") + StartConversation(conversation, NPC, Spawn, "Most precise! This will be enough to create both charges. Are you ready to help me again?") +end + +------------------------------------------------------------------------------------------------------------------- +-- QUEST 2 +------------------------------------------------------------------------------------------------------------------- + +function dlg_20_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/emma_torque/qey_adv03_caves/quests/emma/emma_008.mp3", "", "", 3584996398, 1510863126, Spawn) + AddConversationOption(conversation, "I can.", "OfferQuest2") + StartConversation(conversation, NPC, Spawn, "When you find the machines, the 2830 series DDBDs, there should be two of them. For our purposes they are 'A' and 'B.' I doubt they'll even be labeled, but you should know them when you see them. It is important that you place these explosives on the main drive shaft, which is external to the inner workings. It will be outside the hardwood casing, it shouldn't be hard to spot. Consul Bree's information suggests that one of the two gnomes responsible for bringing this technology here is already dead. The remaining gnome, Fulkoir Haggleton, must be stopped. He will be near the Rockpaws, though he may be in hiding. Destroying his machines will certainly draw him out. Can you do this?") +end + +function OfferQuest2(NPC, Spawn) + FaceTarget(NPC, Spawn) + OfferQuest(NPC, Spawn, QUEST_2) +end + +function OnQuest2(NPC, Spawn, conversation) + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/emma_torque/qey_adv03_caves/quests/emma/emma_010.mp3", "", "", 3042855134, 2522255224, Spawn) + if GetQuestStep(Spawn, QUEST_2) == 4 then + AddConversationOption(conversation, "I have done all that you asked.", "dlg_26_1") + end + AddConversationOption(conversation, "Nothing. Bye.") + StartConversation(conversation, NPC, Spawn, "Well?") +end + +function dlg_26_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/emma_torque/qey_adv03_caves/quests/emma/emma_011.mp3", "", "", 3844748719, 1801822798, Spawn) + AddConversationOption(conversation, "Yes, the machines are destroyed and Fulkoir is dead.", "dlg_26_2") + StartConversation(conversation, NPC, Spawn, "Most precise! I heard the explosions from here, I am glad you were not in them and that they were in the proper spots--they WERE in the proper spots, right?") +end + +function dlg_26_2(NPC, Spawn) + SetStepComplete(Spawn, QUEST_2, 4) + + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/emma_torque/qey_adv03_caves/quests/emma/emma_012.mp3", "", "", 514277359, 3372853210, Spawn) + AddConversationOption(conversation, "You are welcome.") + StartConversation(conversation, NPC, Spawn, "Great! Consul Bree will be very pleased. You have done the Qeynos Guard a great service, " .. GetName(Spawn) .. ". Take this, please. And thank you.") +end \ No newline at end of file diff --git a/server/SpawnScripts/Caves/FulkoirHaggleton.lua b/server/SpawnScripts/Caves/FulkoirHaggleton.lua new file mode 100644 index 000000000..6ff2724a8 --- /dev/null +++ b/server/SpawnScripts/Caves/FulkoirHaggleton.lua @@ -0,0 +1,21 @@ +--[[ + Script Name : SpawnScripts/Caves/FulkoirHaggleton.lua + Script Purpose : Fulkoir Haggleton + Script Author : Scatman + Script Date : 2009.10.18 + Script Notes : +--]] + +function spawn(NPC) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) +end + +function aggro(NPC, Spawn) + Say(NPC, "This is entirely unnacceptable!") +end \ No newline at end of file diff --git a/server/SpawnScripts/Caves/GuardBelaire.lua b/server/SpawnScripts/Caves/GuardBelaire.lua new file mode 100644 index 000000000..b25fa0bb8 --- /dev/null +++ b/server/SpawnScripts/Caves/GuardBelaire.lua @@ -0,0 +1,21 @@ +--[[ + Script Name : SpawnScripts/Caves/GuardBelaire.lua + Script Purpose : Guard Belaire + Script Author : Scatman + Script Date : 2009.10.08 + Script Notes : +--]] + +dofile("SpawnScripts/Generic/GenericGuardVoiceOvers.lua") + +function spawn(NPC) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + GenericGuardHail(NPC, Spawn) +end \ No newline at end of file diff --git a/server/SpawnScripts/Caves/HighShamanZenDurath.lua b/server/SpawnScripts/Caves/HighShamanZenDurath.lua new file mode 100644 index 000000000..74039371c --- /dev/null +++ b/server/SpawnScripts/Caves/HighShamanZenDurath.lua @@ -0,0 +1,24 @@ +--[[ + Script Name : SpawnScripts/Caves/HighShamanZenDurath.lua + Script Purpose : High Shaman Zen Durath + Script Author : Scatman + Script Date : 2009.10.18 + Script Notes : +--]] + +function spawn(NPC) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) +end + +function death(NPC, Spawn) + -- Head of High Shaman Zen'Durath + if not HasItem(Spawn, 6922) then + SummonItem(Spawn, 6922) + end +end \ No newline at end of file diff --git a/server/SpawnScripts/Caves/KahlaUlno.lua b/server/SpawnScripts/Caves/KahlaUlno.lua new file mode 100644 index 000000000..6dc7676c5 --- /dev/null +++ b/server/SpawnScripts/Caves/KahlaUlno.lua @@ -0,0 +1,102 @@ +--[[ + Script Name : SpawnScripts/Caves/KahlaUlno.lua + Script Purpose : Kahla Ulno + Script Author : Scatman + Script Date : 2009.09.04 + Script Notes : +--]] + +local QUEST_1 = 228 + +function spawn(NPC) + ProvidesQuest(NPC, QUEST_1) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + RandomVoice(NPC, Spawn) + conversation = CreateConversation() + + if HasCompletedQuest(Spawn, QUEST_1) then + PlayFlavor(NPC, "", "Still no conclusions.", "", 1689589577, 4560189, Spawn) + elseif HasQuest(Spawn, QUEST_1) then + OnQuest1(NPC, Spawn, conversation) + else + Greetings(NPC, Spawn, conversation) + end +end + +function RandomVoice(NPC, Spawn) + local choice = math.random(1, 3) + if choice == 1 then + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_1_1035.mp3", "", "", 0, 0, Spawn) + elseif choice == 2 then + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_2_1035.mp3", "", "", 0, 0, Spawn) + elseif choice == 3 then + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_3_1035.mp3", "", "", 0, 0, Spawn) + end +end + +------------------------------------------------------------------------------------------------------------------------- +-- QUEST 1 +------------------------------------------------------------------------------------------------------------------------- + +function Greetings(NPC, Spawn, conversation) + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_1_1035.mp3", "", "", 0, 0) + AddConversationOption(conversation, "Help how?", "dlg_1_1") + AddConversationOption(conversation, "Nope, sorry.") + StartConversation(conversation, NPC, Spawn, "Greetings! I don't suppose you have some time to help an information-hungry kerra like myself, do you?") +end + +function dlg_1_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "What's that?", "dlg_1_2") + StartConversation(conversation, NPC, Spawn, "Well, I'm very interested in the creatures that inhabit these caves. I am trying to catalog these creatures so I can better compare them with their cousins found elsewhere. But I've run into a problem.") +end + +function dlg_1_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "I can get them for you.", "dlg_2_3") + AddConversationOption(conversation, "I'm not interested.") + StartConversation(conversation, NPC, Spawn, "The amount of information I can get from living specimens is minimal. I tried to kill some, but I am no fighter. If I could get a number of dead specimens it would be a huge boon to my work.") +end + +function dlg_2_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "I can do that.", "OfferQuest1") + StartConversation(conversation, NPC, Spawn, "You can? That would be great. I think four of the spiders, four of the bats, and four of the flying serpents would be enough for me to get most of my research done.") +end + +function OfferQuest1(NPC, Spawn) + FaceTarget(NPC, Spawn) + OfferQuest(NPC, Spawn, QUEST_1) +end + +function OnQuest1(NPC, Spawn, conversation) + if GetQuestStep(Spawn, QUEST_1) == 4 then + AddConversationOption(conversation, "Yes I got them.", "dlg_13_1") + else + AddConversationOption(conversation, "No, not yet.") + end + StartConversation(conversation, NPC, Spawn, "Did you get the creatures?") +end + +function dlg_13_1(NPC, Spawn) + SetStepComplete(Spawn, QUEST_1, 4) + + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "Glad to hear it.") + StartConversation(conversation, NPC, Spawn, "Perfect! Thank you so much! This will help me a great deal.") +end \ No newline at end of file diff --git a/server/SpawnScripts/Caves/LieutenantDelsun.lua b/server/SpawnScripts/Caves/LieutenantDelsun.lua new file mode 100644 index 000000000..290312b4a --- /dev/null +++ b/server/SpawnScripts/Caves/LieutenantDelsun.lua @@ -0,0 +1,111 @@ +--[[ + Script Name : SpawnScripts/Caves/LieutenantDelsun.lua + Script Purpose : Lieutenant Delsun + Script Author : Scatman + Script Date : 2009.10.18 + Script Notes : +--]] + +local QUEST4_FROM_CONSULBREE = 230 +local QUEST_1 = 229 + +function spawn(NPC) + ProvidesQuest(NPC, QUEST_1) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + if HasCompletedQuest(Spawn, QUEST_1) then + if HasCompletedQuest(Spawn, QUEST4_FROM_CONSULBREE) then + PlayFlavor(NPC, "", "Thanks to you, the city of Qeynos will be safe from the Rockpaw gnolls. We are in your debt.", "salute", 0, 0, Spawn) + else + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/lieutenant_delsun/qey_adv03_caves/qst_delsun_done_5c9845fb.mp3", "I appreciate the help. I am confident that soon you and Consul Bree will put an end to this threat.", "", 687681487, 1420406743, Spawn) + end + elseif HasQuest(Spawn, QUEST_1) then + OnQuest1(NPC, Spawn, conversation) + else + WellMet(NPC, Spawn, conversation) + end +end + +--------------------------------------------------------------------------------------------------------------------- +-- QUEST 1 +--------------------------------------------------------------------------------------------------------------------- + +function WellMet(NPC, Spawn, conversation) + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/lieutenant_delsun/qey_adv03_caves/quests/delsun/delsun_000.mp3", "", "", 633173859, 3236436843, Spawn) + AddConversationOption(conversation, "What can I do to help?", "dlg_6_4") + AddConversationOption(conversation, "What is going on down here?", "dlg_5_1") + AddConversationOption(conversation, "I must go for now.") + StartConversation(conversation, NPC, Spawn, "Well met. If you're here it's probably because you can help. I'm Lieutenant Delsun of the Qeynos Guard.") +end + +function dlg_5_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/lieutenant_delsun/qey_adv03_caves/quests/delsun/delsun_003.mp3", "", "", 3979540292, 2231912258, Spawn) + AddConversationOption(conversation, "What are the gnolls planning?", "dlg_5_2") + StartConversation(conversation, NPC, Spawn, "Many things, adventurer, many things. Consul Bree, Emma--over there--and I have been down here for some time now. Consul Bree was here by herself before that. The gnolls here are up to something big. I believe Consul Bree had the Queen herself request the presence of a large number of adventurers who showed great potential. Perhaps that is why you are here.") +end + +function dlg_5_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/lieutenant_delsun/qey_adv03_caves/quests/delsun/delsun_004.mp3", "", "", 2892187663, 805835825, Spawn) + AddConversationOption(conversation, "What can I do to help?", "dlg_6_3") + AddConversationOption(conversation, "I must go for now.") + StartConversation(conversation, NPC, Spawn, "An attack. I do not know their intent. I do not believe they could ever defeat Qeynos in a war, but perhaps they are serving as a distraction. Either way, they must be stopped before it's too late. Consul Bree may know more of their plans.") +end + +function dlg_6_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/lieutenant_delsun/qey_adv03_caves/quests/delsun/delsun_001.mp3", "", "", 339232666, 1307734696, Spawn) + AddConversationOption(conversation, "I will help you.", "dlg_6_4") + AddConversationOption(conversation, "I must go for now.") + StartConversation(conversation, NPC, Spawn, "Well. Consul Bree has a plan of attack that she may need help with. So speak to her if you want to offer your services. As for me, I am more interested in the gnolls than their plans. If you want to help me by taking some of them out, I will gladly accept it.") +end + +function dlg_6_4(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/lieutenant_delsun/qey_adv03_caves/quests/delsun/delsun_002.mp3", "", "", 455797705, 3616046354, Spawn) + AddConversationOption(conversation, "I will do this.", "OfferQuest1") + StartConversation(conversation, NPC, Spawn, "That is good to hear. I'd like you to help me take out the gnollish fighting force. Slay thirty gnolls within the caves. Make sure two of 'em are the Dustpaw armorers from the level above us, and five of 'em are the Rockpaw guards from the level above that. From the same level as the Rockpaw guards, take out five of the gnoll guardians known as alabaster behemoths. Return to me when you're done.") +end + +function OfferQuest1(NPC, Spawn) + FaceTarget(NPC, Spawn) + OfferQuest(NPC, Spawn, QUEST_1) +end + +function OnQuest1(NPC, Spawn, conversation) + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/lieutenant_delsun/qey_adv03_caves/quests/delsun/delsun_005.mp3", "", "", 2158069765, 3678013662, Spawn) + if GetQuestStep(Spawn, QUEST_1) == 5 then + AddConversationOption(conversation, "I have.", "dlg_21_1") + else + AddConversationOption(conversation, "Not yet.") + end + StartConversation(conversation, NPC, Spawn, "Have you done as I asked?") +end + +function dlg_21_1(NPC, Spawn) + SetStepComplete(Spawn, QUEST_1, 5) + + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/lieutenant_delsun/qey_adv03_caves/quests/delsun/delsun_006.mp3", "", "", 718413957, 2288759319, Spawn) + AddConversationOption(conversation, "Thank you.") + StartConversation(conversation, NPC, Spawn, "Good. Though we may not directly attack their production as Consul Bree does, we've done a great part in thinning out their armies. Take this, the Qeynos Guard puts aside such things for times like this. I believe you deserve it.") +end \ No newline at end of file diff --git a/server/SpawnScripts/Caves/Slaverjaw.lua b/server/SpawnScripts/Caves/Slaverjaw.lua new file mode 100644 index 000000000..a3fe0c128 --- /dev/null +++ b/server/SpawnScripts/Caves/Slaverjaw.lua @@ -0,0 +1,20 @@ +--[[ + Script Name : SpawnScripts/Caves/Slaverjaw.lua + Script Author : Shatou + Script Date : 2018.09.01 11:09:39 + Script Purpose : + : +--]] + +function spawn(NPC) + +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) +end + +function respawn(NPC) + +end + diff --git a/server/SpawnScripts/Caves/aDustpawarmorer.lua b/server/SpawnScripts/Caves/aDustpawarmorer.lua new file mode 100644 index 000000000..8f7ce0136 --- /dev/null +++ b/server/SpawnScripts/Caves/aDustpawarmorer.lua @@ -0,0 +1,13 @@ +--[[ + Script Name : SpawnScripts/Caves/aDustpawarmorer.lua + Script Purpose : a Dustpaw armorer + Script Author : John Adams + Script Date : 2008.09.21 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + PlayFlavor(NPC, "voiceover/english/gnoll_base_1/ft/gnoll/gnoll_base_1_2_garbled_fad67c0f.mp3", "Grrrolven brakth kerrtt", "", 1531034367, 952662328) +end + diff --git a/server/SpawnScripts/Caves/aMudpawguard.lua b/server/SpawnScripts/Caves/aMudpawguard.lua new file mode 100644 index 000000000..4f3cfde9a --- /dev/null +++ b/server/SpawnScripts/Caves/aMudpawguard.lua @@ -0,0 +1,23 @@ +--[[ + Script Name : SpawnScripts/Caves/aMudpawguard.lua + Script Purpose : a Mudpaw guard + Script Author : John Adams + Script Date : 2008.09.21 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +function attacked(NPC, Spawn) + FaceTarget(NPC, Spawn) + choice = math.random(1,4) + + if choice == 1 then + PlayFlavor(NPC, "voiceover/english/gnoll_base_1/ft/gnoll/gnoll_base_1_1_aggro_75cd5d19.mp3", "Not allowed here!", "", 1292107958, 2335134714) + elseif choice == 2 then + PlayFlavor(NPC, "voiceover/english/gnoll_base_1/ft/gnoll/gnoll_base_1_1_aggro_d81be55c.mp3", "Bite! Show sharp teeth!", "", 612586564, 102929785) + elseif choice == 3 then + PlayFlavor(NPC, "voiceover/english/gnoll_base_1/ft/gnoll/gnoll_base_1_3_aggro_d81be55c.mp3", "Bite! Show sharp teeth!", "", 3276849474, 2846177216) + else + PlayFlavor(NPC, "voiceover/english/gnoll_base_1/ft/gnoll/gnoll_base_1_2_death_9c1f07cb.mp3", "Another member of the pack down!", "", 3426629421, 3660282518) + end + +end diff --git a/server/SpawnScripts/Caves/aMudpawlookout.lua b/server/SpawnScripts/Caves/aMudpawlookout.lua new file mode 100644 index 000000000..d3c88ef8a --- /dev/null +++ b/server/SpawnScripts/Caves/aMudpawlookout.lua @@ -0,0 +1,30 @@ +--[[ + Script Name : SpawnScripts/Caves/aMudpawlookout.lua + Script Purpose : a Mudpaw lookout + Script Author : John Adams + Script Date : 2008.09.21 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + choice = math.random(1,4) + + if choice == 1 then + PlayFlavor(NPC, "voiceover/english/gnoll_base_1/ft/gnoll/gnoll_base_1_1_garbled_2f8caa7b.mp3", "Krovel grarggt ereverrrn", "", 3999652656, 427507713) + elseif choice == 2 then + PlayFlavor(NPC, "voiceover/english/gnoll_base_1/ft/gnoll/gnoll_base_1_2_garbled_2f8caa7b.mp3", "Krovel grarggt ereverrrn", "", 2385604574, 3717589402) + elseif choice == 3 then + PlayFlavor(NPC, "voiceover/english/gnoll_base_1/ft/gnoll/gnoll_base_1_1_aggro_fda03a16.mp3", "Spin, weave, dodge, attack!!!", "", 1347636574, 484324781) + elseif choice == 4 then + PlayFlavor(NPC, "voiceover/english/gnoll_base_1/ft/gnoll/gnoll_base_1_1_aggro_d81be55c.mp3", "Bite! Show sharp teeth!", "", 612586564, 102929785) + else + end + +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + PlayFlavor(NPC, "", "Spin, weave, dodge, attack!!!", "", 1689589577, 4560189) +end + diff --git a/server/SpawnScripts/Caves/aRockpawguard.lua b/server/SpawnScripts/Caves/aRockpawguard.lua new file mode 100644 index 000000000..66e546355 --- /dev/null +++ b/server/SpawnScripts/Caves/aRockpawguard.lua @@ -0,0 +1,13 @@ +--[[ + Script Name : SpawnScripts/Caves/aRockpawguard.lua + Script Purpose : a Rockpaw guard + Script Author : John Adams + Script Date : 2008.09.21 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + PlayFlavor(NPC, "voiceover/english/gnoll_base_1/ft/gnoll/gnoll_base_1_3_victory_e4520926.mp3", "Packmate not happy with scrawny catch.", "", 1321865956, 173648139) +end + diff --git a/server/SpawnScripts/Caves/aRockpawscout.lua b/server/SpawnScripts/Caves/aRockpawscout.lua new file mode 100644 index 000000000..ba8f4ccdb --- /dev/null +++ b/server/SpawnScripts/Caves/aRockpawscout.lua @@ -0,0 +1,18 @@ +--[[ + Script Name : SpawnScripts/Caves/aRockpawscout.lua + Script Purpose : a Rockpaw scout + Script Author : John Adams + Script Date : 2008.09.21 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + PlayFlavor(NPC, "voiceover/english/gnoll_base_1/ft/gnoll/gnoll_base_1_3_victory_e4520926.mp3", "Packmate not happy with scrawny catch.", "", 1321865956, 173648139) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + PlayFlavor(NPC, "voiceover/english/gnoll_base_1/ft/gnoll/gnoll_base_1_1_victory_f225e591.mp3", "One to bring back to lair!", "", 3397285495, 2608729760) +end + diff --git a/server/SpawnScripts/Caves/aRockpawstriker.lua b/server/SpawnScripts/Caves/aRockpawstriker.lua new file mode 100644 index 000000000..0c32018aa --- /dev/null +++ b/server/SpawnScripts/Caves/aRockpawstriker.lua @@ -0,0 +1,13 @@ +--[[ + Script Name : SpawnScripts/Caves/aRockpawstriker.lua + Script Purpose : a Rockpaw striker + Script Author : John Adams + Script Date : 2008.09.21 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + PlayFlavor(NPC, "", "Spin, weave, dodge, attack!!!", "", 1689589577, 4560189) +end + diff --git a/server/SpawnScripts/Caves/adustpawguard.lua b/server/SpawnScripts/Caves/adustpawguard.lua new file mode 100644 index 000000000..aa7d22464 --- /dev/null +++ b/server/SpawnScripts/Caves/adustpawguard.lua @@ -0,0 +1,33 @@ +--[[ + Script Name : SpawnScripts/Caves/adustpawguard.lua + Script Purpose : + Script Author : Jabantiz + Script Date : 2/23/2019 + Script Notes : +--]] + +function spawn(NPC) + MovementLoopAddLocation(NPC, 48.04, 2.68, -92.89, 2) + MovementLoopAddLocation(NPC, 38.91, 2.60, -90.71, 2) + MovementLoopAddLocation(NPC, 30.94, 3.32, -87.40, 2) + MovementLoopAddLocation(NPC, 28.13, 3.36, -83.55, 2) + MovementLoopAddLocation(NPC, 24.03, 5.10, -76.07, 2) + MovementLoopAddLocation(NPC, 21.20, 4.93, -71.53, 2) + MovementLoopAddLocation(NPC, 24.03, 5.10, -76.07, 2) + MovementLoopAddLocation(NPC, 28.13, 3.36, -83.55, 2) + MovementLoopAddLocation(NPC, 30.94, 3.32, -87.40, 2) + MovementLoopAddLocation(NPC, 38.91, 2.60, -90.71, 2) +end + +function respawn(NPC) + spawn(NPC) +end + +--Moved these from the old script + +--[[ +PlayFlavor(NPC, "voiceover/english/gnoll_base_1/ft/gnoll/gnoll_base_1_2_death_9c1f07cb.mp3", "Another member of the pack down!", "", 3426629421, 3660282518, Spawn) +PlayFlavor(NPC, "voiceover/english/gnoll_base_1/ft/gnoll/gnoll_base_1_2_garbled_2f8caa7b.mp3", "Krovel grarggt ereverrrn", "", 2385604574, 3717589402, Spawn) +PlayFlavor(NPC, "voiceover/english/gnoll_base_1/ft/gnoll/gnoll_base_1_2_garbled_fad67c0f.mp3", "Grrrolven brakth kerrtt", "", 1531034367, 952662328, Spawn) +PlayFlavor(NPC, "voiceover/english/gnoll_base_1/ft/gnoll/gnoll_base_1_2_garbled_fe1eedd8.mp3", "Rrrrevvvvnarrr jahht ttekkkman", "", 1674950709, 3936377565, Spawn) +--]] \ No newline at end of file diff --git a/server/SpawnScripts/Caves/agnollishbook.lua b/server/SpawnScripts/Caves/agnollishbook.lua new file mode 100644 index 000000000..aa5938900 --- /dev/null +++ b/server/SpawnScripts/Caves/agnollishbook.lua @@ -0,0 +1,26 @@ +--[[ + Script Name : SpawnScripts/Caves/agnollishbook.lua + Script Purpose : a gnollish book + Script Author : Scatman + Script Date : 2009.10.08 + Script Notes : +--]] + +local QUEST_1_CONSULBREE = 223 + +function spawn(NPC) + SetRequiredQuest(NPC, QUEST_1_CONSULBREE, 1) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) +end + +function casted_on(NPC, Spawn, SpellName) + if HasQuest(Spawn, QUEST_1_CONSULBREE) and GetQuestStep(Spawn, QUEST_1_CONSULBREE) == 1 and SpellName == "Take book" then + SetStepComplete(Spawn, QUEST_1_CONSULBREE, 1) + end +end \ No newline at end of file diff --git a/server/SpawnScripts/Caves/analabasterbehemoth.lua b/server/SpawnScripts/Caves/analabasterbehemoth.lua new file mode 100644 index 000000000..800231f64 --- /dev/null +++ b/server/SpawnScripts/Caves/analabasterbehemoth.lua @@ -0,0 +1,35 @@ +--[[ + Script Name : SpawnScripts/Caves/analabasterbehemoth.lua + Script Purpose : an alabaster behemoth + Script Author : Scatman + Script Date : 2009.11.20 + Script Notes : +--]] + +local MIN_TIME = 3000 +local MAX_TIME = 10000 + +function spawn(NPC) + local sli = GetSpawnLocationID(NPC) + if sli == 387773 or sli == 387774 or sli == 387772 or sli == 387778 or sli == 1585477 or sli == 387766 then + AddTimer(NPC, math.random(MIN_TIME, MAX_TIME), "MakeAttack") + end +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) +end + +function MakeAttack(NPC) + PlayFlavor(NPC, "", "", "attack", 0, 0) + AddTimer(NPC, math.random(MIN_TIME, MAX_TIME), "MakeAttack") +end + +--[[ +PlayFlavor(NPC, "voiceover/english/optional3/golem_base_1/ft/golem/golem_base_1_1_garbled_e0fead4d.mp3", "Pintoota kolata eldina mastarina", "", 2947217871, 3677590207) +PlayFlavor(NPC, "voiceover/english/optional5/golem_base_2/ft/golem/golem_base_2_1_garbled_48632408.mp3", "Boona vas kontrella", "", 3186320893, 862014285) +--]] \ No newline at end of file diff --git a/server/SpawnScripts/Caves/analabastergolem(388539).lua b/server/SpawnScripts/Caves/analabastergolem(388539).lua new file mode 100644 index 000000000..ee7d25f1c --- /dev/null +++ b/server/SpawnScripts/Caves/analabastergolem(388539).lua @@ -0,0 +1,26 @@ +--[[ + Script Name : SpawnScripts/Caves/analabastergolem(388539).lua + Script Purpose : + Script Author : Jabantiz + Script Date : 2/23/2019 + Script Notes : +--]] + +function spawn(NPC) + MovementLoopAddLocation(NPC, 3.36, 12.13, -109.20, 2) + MovementLoopAddLocation(NPC, 2.21, 12.10, -101.08, 2) + MovementLoopAddLocation(NPC, -5.27, 12.16, -96.08, 2) + MovementLoopAddLocation(NPC, -13.81, 12.23, -91.39, 2) + MovementLoopAddLocation(NPC, -18.10, 12.17, -76.93, 2) + MovementLoopAddLocation(NPC, -15.76, 12.13, -66.19, 2) + MovementLoopAddLocation(NPC, -16.49, 12.12, -53.90, 2) + MovementLoopAddLocation(NPC, -15.76, 12.13, -66.19, 2) + MovementLoopAddLocation(NPC, -18.10, 12.17, -76.93, 2) + MovementLoopAddLocation(NPC, -13.81, 12.23, -91.39, 2) + MovementLoopAddLocation(NPC, -5.27, 12.16, -96.08, 2) + MovementLoopAddLocation(NPC, 2.21, 12.10, -101.08, 2) +end + +function respawn(NPC) + spawn(NPC) +end \ No newline at end of file diff --git a/server/SpawnScripts/Caves/analabastergolem.lua b/server/SpawnScripts/Caves/analabastergolem.lua new file mode 100644 index 000000000..567d0dd1e --- /dev/null +++ b/server/SpawnScripts/Caves/analabastergolem.lua @@ -0,0 +1,38 @@ +--[[ + Script Name : SpawnScripts/Caves/analabastergolem.lua + Script Purpose : an alabaster golem + Script Author : Scatman + Script Date : 2009.11.19 + Script Notes : +--]] + +local MIN_TIME = 3000 +local MAX_TIME = 10000 + +function spawn(NPC) + local sli = GetSpawnLocationID(NPC) + if sli == 388305 or sli == 388308 or sli == 147864 or sli == 159970 or sli == 159971 or sli == 159972 or sli == 147866 or sli == 147867 then + AddTimer(NPC, math.random(MIN_TIME, MAX_TIME), "MakeAttack") + end +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) +end + +function MakeAttack(NPC) + PlayFlavor(NPC, "", "", "attack", 0, 0) + AddTimer(NPC, math.random(MIN_TIME, MAX_TIME), "MakeAttack") +end + +--[[ +PlayFlavor(NPC, "voiceover/english/optional3/golem_base_1/ft/golem/golem_base_1_1_garbled_7c1e7a03.mp3", "Oerbet aertres nuavalen sulana", "", 294229851, 323943279) +PlayFlavor(NPC, "voiceover/english/optional3/golem_base_1/ft/golem/golem_base_1_1_garbled_48632408.mp3", "Boona vas kontrella", "", 2577927628, 312715019) +PlayFlavor(NPC, "voiceover/english/optional3/golem_base_1/ft/golem/golem_base_1_1_garbled_e0fead4d.mp3", "Pintoota kolata eldina mastarina", "", 2947217871, 3677590207) +PlayFlavor(NPC, "voiceover/english/optional3/golem_base_1/ft/golem/golem_base_1_1_garbled_ba1c8454.mp3", "Ervmenta oolaves kor'tenza", "", 422166849, 245170409) +PlayFlavor(NPC, "voiceover/english/optional5/golem_base_2/ft/golem/golem_base_2_1_garbled_7c1e7a03.mp3", "Oerbet aertres nuavalen sulana", "", 2422828991, 2611697218) +--]] \ No newline at end of file diff --git a/server/SpawnScripts/Caves/ariverbehemoth.lua b/server/SpawnScripts/Caves/ariverbehemoth.lua new file mode 100644 index 000000000..b313fb32b --- /dev/null +++ b/server/SpawnScripts/Caves/ariverbehemoth.lua @@ -0,0 +1,22 @@ +--[[ + Script Name : SpawnScripts/Caves/ariverbehemoth.lua + Script Purpose : a river behemoth + Script Author : Scatman + Script Date : 2009.05.18 + Script Notes : +--]] + +function spawn(NPC) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) +end + +function death(NPC, Spawn) + local Remains = SpawnMob(GetZone(Spawn), 1970147, false, GetX(NPC), GetY(NPC), GetZ(NPC)) + Despawn(Remains, 60000) +end \ No newline at end of file diff --git a/server/SpawnScripts/Caves/arockpawstonemaster.lua b/server/SpawnScripts/Caves/arockpawstonemaster.lua new file mode 100644 index 000000000..c40d74ba9 --- /dev/null +++ b/server/SpawnScripts/Caves/arockpawstonemaster.lua @@ -0,0 +1,22 @@ +--[[ + Script Name : SpawnScripts/Caves/arockpawstonemaster.lua + Script Purpose : Activate Atramentor (1970035) when this spawn is killed + Script Author : Jabantiz + Script Date : 2/23/2019 + Script Notes : +--]] + +function spawn(NPC) +end + +function respawn(NPC) + spawn(NPC) +end + +function death(NPC, Spawn) + local Atramentor = GetSpawn(Spawn, 1970035) + if Atramentor ~= nil then + SpawnSet(Atramentor, "attackable", "1") + SpawnSet(Atramentor, "show_level", "1") + end +end diff --git a/server/SpawnScripts/Caves/awhitespider.lua b/server/SpawnScripts/Caves/awhitespider.lua new file mode 100644 index 000000000..f5607172b --- /dev/null +++ b/server/SpawnScripts/Caves/awhitespider.lua @@ -0,0 +1,24 @@ +--[[ + Script Name : SpawnScripts/Caves/awhitespider.lua + Script Purpose : a white spider + Script Author : Scatman + Script Date : 2009.10.27 + Script Notes : +--]] + +dofile("SpawnScripts/Generic/MovementCircleSmall.lua") + +function spawn(NPC) + local sli = GetSpawnLocationID(NPC) + if sli == 147821 or sli == 147820 or sli == 147818 or sli == 147817 then + SpawnChooseRandomMovement(NPC) + end +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) +end \ No newline at end of file diff --git a/server/SpawnScripts/Caves/digging_machine.lua b/server/SpawnScripts/Caves/digging_machine.lua new file mode 100644 index 000000000..ded70e112 --- /dev/null +++ b/server/SpawnScripts/Caves/digging_machine.lua @@ -0,0 +1,34 @@ +--[[ + Script Name : SpawnScripts/Caves/digging_machine.lua + Script Purpose : digging_machine + Script Author : Scatman + Script Date : 2009.05.16 + Script Notes : +--]] + +local QUEST2_FROM_CONSULBREE = 222 + +function spawn(NPC) + --SetRequiredQuest(NPC, QUEST2_FROM_CONSULBREE, 2) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) +end + +function casted_on(Caster, Target) + if HasQuest(Caster, QUEST2_FROM_CONSULBREE) and not QuestStepIsComplete(Caster, QUEST2_FROM_CONSULBREE, 2) then + AddStepProgress(Caster, QUEST2_FROM_CONSULBREE, 2, 1) + SendMessage(Caster, "Charges set for 3 seconds.") + AddTimer(Target, 3000, "BlowUpMachine", 1, Caster) + end +end + +function BlowUpMachine(NPC, Spawn) + Despawn(NPC) + -- explosives + RemoveItem(Spawn, 4873) +end \ No newline at end of file diff --git a/server/SpawnScripts/Caves/digging_machine_1.lua b/server/SpawnScripts/Caves/digging_machine_1.lua new file mode 100644 index 000000000..b9439c51c --- /dev/null +++ b/server/SpawnScripts/Caves/digging_machine_1.lua @@ -0,0 +1,51 @@ +--[[ + Script Name : SpawnScripts/Caves/digging_machine_1.lua + Script Purpose : digging_machine_2 + Script Author : Scatman + Script Date : 2009.10.18 + Script Notes : +--]] + +local QUEST2_FROM_EMMA = 227 + +function spawn(NPC) + SetRequiredQuest(NPC, QUEST2_FROM_EMMA, 1) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) +end + +function casted_on(Target, Caster, SpellName) + if HasQuest(Caster, QUEST2_FROM_EMMA) and not QuestStepIsComplete(Caster, QUEST2_FROM_EMMA, 1) and SpellName == "Place Explosives" then + SetStepComplete(Caster, QUEST2_FROM_EMMA, 1) + AddTimer(Target, 1000, "DespawnMachine") + end +end + +function DespawnMachine(NPC) + local digging_machine1 = GetSpawn(NPC, 1970108) + Despawn(digging_machine1) + + local control_device1 = GetSpawn(NPC, 1970114) + Despawn(control_device1) + + local crate1 = GetSpawn(NPC, 1970116) + Despawn(crate1) + + local instructions1 = GetSpawn(NPC, 1970113) + Despawn(instructions1) + + local shovel1 = GetSpawn(NPC, 1970115) + while shovel1 ~= nil do + Despawn(shovel1) + shovel1 = GetSpawn(NPC, 1970115) + end + + -- spawn smashed machine + + Despawn(NPC) +end \ No newline at end of file diff --git a/server/SpawnScripts/Caves/digging_machine_2.lua b/server/SpawnScripts/Caves/digging_machine_2.lua new file mode 100644 index 000000000..68970c5fd --- /dev/null +++ b/server/SpawnScripts/Caves/digging_machine_2.lua @@ -0,0 +1,51 @@ +--[[ + Script Name : SpawnScripts/Caves/digging_machine_2.lua + Script Purpose : digging_machine_2 + Script Author : Scatman + Script Date : 2009.10.18 + Script Notes : +--]] + +local QUEST2_FROM_EMMA = 227 + +function spawn(NPC) + SetRequiredQuest(NPC, QUEST2_FROM_EMMA, 2) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) +end + +function casted_on(Target, Caster, SpellName) + if HasQuest(Caster, QUEST2_FROM_EMMA) and not QuestStepIsComplete(Caster, QUEST2_FROM_EMMA, 2) and SpellName == "Place Explosives" then + SetStepComplete(Caster, QUEST2_FROM_EMMA, 2) + AddTimer(Target, 1000, "DespawnMachine") + end +end + +function DespawnMachine(NPC) + local digging_machine2 = GetSpawn(NPC, 1970122) + Despawn(digging_machine2) + + local control_device2 = GetSpawn(NPC, 1970128) + Despawn(control_device2) + + local crate2 = GetSpawn(NPC, 1970130) + Despawn(crate2) + + local instructions2 = GetSpawn(NPC, 1970127) + Despawn(instructions2) + + local shovel2 = GetSpawn(NPC, 1970129) + while shovel2 ~= nil do + Despawn(shovel2) + shovel2 = GetSpawn(NPC, 1970129) + end + + -- spawn smashed machine + + Despawn(NPC) +end \ No newline at end of file diff --git a/server/SpawnScripts/Caves/incantationdust.lua b/server/SpawnScripts/Caves/incantationdust.lua new file mode 100644 index 000000000..b9ae681b6 --- /dev/null +++ b/server/SpawnScripts/Caves/incantationdust.lua @@ -0,0 +1,20 @@ +--[[ + Script Name : SpawnScripts/Caves/incantationdust.lua + Script Purpose : incantation dust + Script Author : Scatman + Script Date : 2009.10.18 + Script Notes : +--]] + +local CAVES_CONSUL_BREE_QUEST_3 = 225 + +function spawn(NPC) + SetRequiredQuest(NPC, CAVES_CONSUL_BREE_QUEST_3, 3) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) +end \ No newline at end of file diff --git a/server/SpawnScripts/Caves/powderedminerals.lua b/server/SpawnScripts/Caves/powderedminerals.lua new file mode 100644 index 000000000..55058d43f --- /dev/null +++ b/server/SpawnScripts/Caves/powderedminerals.lua @@ -0,0 +1,20 @@ +--[[ + Script Name : SpawnScripts/Caves/powderedminerals.lua + Script Purpose : powdered minerals + Script Author : Scatman + Script Date : 2009.10.18 + Script Notes : +--]] + +local QUEST_1_FROM_EMMA_TORQUE = 226 + +function spawn(NPC) + SetRequiredQuest(NPC, QUEST_1_FROM_EMMA_TORQUE, 1) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) +end \ No newline at end of file diff --git a/server/SpawnScripts/Caves/qey_blacksmith_oven001.lua b/server/SpawnScripts/Caves/qey_blacksmith_oven001.lua new file mode 100644 index 000000000..5d9e121eb --- /dev/null +++ b/server/SpawnScripts/Caves/qey_blacksmith_oven001.lua @@ -0,0 +1,36 @@ +--[[ + Script Name : SpawnScripts/Caves/qey_blacksmith_oven001.lua + Script Purpose : digging_machine + Script Author : Scatman + Script Date : 2009.10.08 + Script Notes : +--]] + +local QUEST2_FROM_CONSULBREE = 224 + +function spawn(NPC) + SetRequiredQuest(NPC, QUEST2_FROM_CONSULBREE, 1) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) +end + +function casted_on(Target, Caster, SpellName) + if HasQuest(Caster, QUEST2_FROM_CONSULBREE) and not QuestStepIsComplete(Caster, QUEST2_FROM_CONSULBREE, 1) and SpellName == "Place Explosives" then + -- explosives + if HasItem(Caster, 6052) then + RemoveItem(Caster, 6052) + end + SendMessage(Caster, "Charges set for 3 seconds.") + SetStepComplete(Caster, QUEST2_FROM_CONSULBREE, 1) + AddTimer(Target, 3000, "BlowUpMachine") + end +end + +function BlowUpMachine(NPC) + Despawn(NPC) +end \ No newline at end of file diff --git a/server/SpawnScripts/Caves/qst_shaman_spawner_skull.lua b/server/SpawnScripts/Caves/qst_shaman_spawner_skull.lua new file mode 100644 index 000000000..72ccd1bf6 --- /dev/null +++ b/server/SpawnScripts/Caves/qst_shaman_spawner_skull.lua @@ -0,0 +1,41 @@ +--[[ + Script Name : SpawnScripts/Caves/qst_shaman_spawner_skull.lua + Script Purpose : qst_shaman_spawner_skull + Script Author : Scatman + Script Date : 2009.10.18 + Script Notes : +--]] + +local QUEST4_FROM_CONSULBREE = 230 + +function spawn(NPC) + SetRequiredQuest(NPC, QUEST4_FROM_CONSULBREE, 1) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) +end + +function casted_on(Target, Caster) + if HasQuest(Caster, QUEST4_FROM_CONSULBREE) and GetQuestStep(Caster, QUEST4_FROM_CONSULBREE) == 1 then + if HasItem(Caster, 11850) then + local SpearedSkeleton = SpawnMob(GetZone(Caster), 1970139, false, 25.0848, 13.4502, -107.594, 178.328) + SendMessage(Caster, "The skull seems to come alive as a wave of heat blows in from the north.") + -- summoning staff + while HasItem(Caster, 11850) do + RemoveItem(Caster, 11850) + end + local ZenDurath = GetSpawn(Caster, 1970075) + if ZenDurath == nil then + ZenDurath = SpawnMob(GetZone(Caster), 1970075, false, 28.9003, 20.2769, -128.765, 0) + end + Despawn(SpearedSkeleton, 60000) + Despawn(ZenDurath, 60000) + else + SendMessage(Caster, "You need the summoning staff from Consul Bree.") + end + end +end \ No newline at end of file diff --git a/server/SpawnScripts/Caves/riverbehemothremains.lua b/server/SpawnScripts/Caves/riverbehemothremains.lua new file mode 100644 index 000000000..b1f0f33f1 --- /dev/null +++ b/server/SpawnScripts/Caves/riverbehemothremains.lua @@ -0,0 +1,29 @@ +--[[ + Script Name : SpawnScripts/Caves/riverbehemothremains.lua + Script Purpose : river behemoth remains + Script Author : Scatman + Script Date : 2009.10.18 + Script Notes : +--]] + +local CAVES_CONSUL_BREE_QUEST_3 = 225 + +function spawn(NPC) + SetRequiredQuest(NPC, CAVES_CONSUL_BREE_QUEST_3, 4) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) +end + +function casted_on(NPC, Spawn, SpellName) + if HasQuest(Spawn, CAVES_CONSUL_BREE_QUEST_3) and not QuestStepIsComplete(Spawn, CAVES_CONSUL_BREE_QUEST_3, 4) and SpellName == "Remove River Stone" then + -- river stone (quest step gets complete once the player recieves the item (obtainitem) + if not HasItem(Spawn, 10068) then + SummonItem(Spawn, 10068, 1) + end + end +end \ No newline at end of file diff --git a/server/SpawnScripts/Caves/spare_machine_parts.lua b/server/SpawnScripts/Caves/spare_machine_parts.lua new file mode 100644 index 000000000..4fbc867ff --- /dev/null +++ b/server/SpawnScripts/Caves/spare_machine_parts.lua @@ -0,0 +1,36 @@ +--[[ + Script Name : SpawnScripts/Caves/spare_machine_parts.lua + Script Purpose : spare_machine_parts + Script Author : Scatman + Script Date : 2009.10.08 + Script Notes : +--]] + +local QUEST2_FROM_CONSULBREE = 224 + +function spawn(NPC) + SetRequiredQuest(NPC, QUEST2_FROM_CONSULBREE, 2) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) +end + +function casted_on(Target, Caster, SpellName) + if HasQuest(Caster, QUEST2_FROM_CONSULBREE) and not QuestStepIsComplete(Caster, QUEST2_FROM_CONSULBREE, 2) and SpellName == "Place Explosives" then + -- explosives + if HasItem(Caster, 6052) then + RemoveItem(Caster, 6052) + end + SendMessage(Caster, "Charges set for 3 seconds.") + AddStepProgress(Caster, QUEST2_FROM_CONSULBREE, 2, 1) + AddTimer(Target, 3000, "BlowUpMachine") + end +end + +function BlowUpMachine(NPC) + Despawn(NPC) +end \ No newline at end of file diff --git a/server/SpawnScripts/Commonlands/AmuliusRamio.lua b/server/SpawnScripts/Commonlands/AmuliusRamio.lua new file mode 100644 index 000000000..08ccfec63 --- /dev/null +++ b/server/SpawnScripts/Commonlands/AmuliusRamio.lua @@ -0,0 +1,52 @@ +--[[ + Script Name : AmuliusRamio.lua + Script Purpose : Amulius Ramio + Script Author : ParserGenerated (Replace this) + Script Date : 08/28/2019 + Script Notes : Auto-Generated from a chat log using SpawnScriptDesigner +--]] + +require "SpawnScripts/Generic/DialogModule" + +function spawn(NPC) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + Dialog.New(NPC, Spawn) + + Dialog.AddDialog("Quiet you! Can't you see I'm trying to avoid being seen? Get down here before an orc spots you!") + Dialog.AddOption("My mistake, what are you doing here? (crouch)", "dlg_3") + + Dialog.Start() + + --[[ Say() from this NPC + + + Orphaned PlayFlavors + --]] + +end + +function dlg_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + Dialog.New(NPC, Spawn) + + Dialog.AddDialog("Get down and wait a moment, I think I hear an orc passing.") + + Dialog.Start() +end + +function dlg_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + Dialog.New(NPC, Spawn) + + Dialog.AddDialog("Alright listen, the Overlord passed down orders to have me find out where these orcs have been staging their attacks from. As you can see, this looks like an orc forward base if I ever saw one. I don't have time to get back to Freeport to get some extra troops, so I'm going to have to ask for your help on this. What say you?") + Dialog.AddOption("Are you insane? I can't do this, I must go.") + + Dialog.Start() +end \ No newline at end of file diff --git a/server/SpawnScripts/Commonlands/Arconicus.lua b/server/SpawnScripts/Commonlands/Arconicus.lua new file mode 100644 index 000000000..7d7c24093 --- /dev/null +++ b/server/SpawnScripts/Commonlands/Arconicus.lua @@ -0,0 +1,33 @@ +--[[ + Script Name : Arconicus.lua + Script Purpose : Arconicus + Script Author : ParserGenerated (Replace this) + Script Date : 08/28/2019 + Script Notes : Auto-Generated from a chat log using SpawnScriptDesigner +--]] + +require "SpawnScripts/Generic/DialogModule" + +function spawn(NPC) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + Dialog.New(NPC, Spawn) + + Dialog.AddDialog("What do you want? Please don't tell me you're another one of these country bumpkins who has never seen a mage before.") + Dialog.AddOption("I won't. I'll just tell you goodbye.") + + Dialog.Start() + + --[[ Say() from this NPC + + + Orphaned PlayFlavors + --]] + +end \ No newline at end of file diff --git a/server/SpawnScripts/Commonlands/CaptainIsta.lua b/server/SpawnScripts/Commonlands/CaptainIsta.lua new file mode 100644 index 000000000..92f6b23d8 --- /dev/null +++ b/server/SpawnScripts/Commonlands/CaptainIsta.lua @@ -0,0 +1,33 @@ +--[[ + Script Name : CaptainIsta.lua + Script Purpose : Captain Ista + Script Author : ParserGenerated (Replace this) + Script Date : 08/28/2019 + Script Notes : Auto-Generated from a chat log using SpawnScriptDesigner +--]] + +require "SpawnScripts/Generic/DialogModule" + +function spawn(NPC) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + Dialog.New(NPC, Spawn) + + Dialog.AddDialog("Hrmph! What? You expect me to assign a task to a weak little runt like yourself? Get Lost!") + Dialog.AddOption("I will come back later then.") + + Dialog.Start() + + --[[ Say() from this NPC + + + Orphaned PlayFlavors + --]] + +end \ No newline at end of file diff --git a/server/SpawnScripts/Commonlands/GerunPontian.lua b/server/SpawnScripts/Commonlands/GerunPontian.lua new file mode 100644 index 000000000..1ab09dc78 --- /dev/null +++ b/server/SpawnScripts/Commonlands/GerunPontian.lua @@ -0,0 +1,103 @@ +--[[ + Script Name: SpawnScripts/Commonlands/GerunPontian.lua + Script Purpose: Gerun Pontian + Script Author: vo1d + Script Date: 10/8/2019 + Script Notes: n/a +--]] + +require "SpawnScripts/Generic/DialogModule" + +local SpeckledRattlerVenom = 375 + +function spawn(NPC) + spawn(NPC) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + Dialog.New(NPC, Spawn) + + if HasCompletedQuest(Spawn, SpeckledRattlerVenom) == false and HasQuest(Spawn, SpeckledRattlerVenom) == false then + Dialog.AddDialog("Gerun Pontian of the Militia. I watch the gates. I assure you a more dreary job does not exist in all of D'Lere.") + Dialog.AddVoiceover("voiceover/english/voice_emotes/greetings/greetings_3_1022.mp3", 0, 0) + Dialog.AddOption("What makes it so dreary?", "dlg_2") + Dialog.AddOption("I have to go.") + Dialog.Start() + elseif GetQuestStep(Spawn, SpeckledRattlerVenom) == 1 then + Dialog.New(NPC, Spawn) + Dialog.AddDialog("Did you get the venom?") + Dialog.AddOption("Not yet.") + Dialog.Start() + elseif GetQuestStep(Spawn, SpeckledRattlerVenom) == 2 then + Dialog.New(NPC, Spawn) + Dialog.AddDialog("Did you get the venom?") + Dialog.AddOption("Yes, here it is.", "CompleteSpeckledRattlerVenom") + Dialog.Start() + elseif HasCompletedQuest(Spawn, SpeckledRattlerVenom) == true then + Dialog.AddVoiceover("voiceover/english/voice_emotes/greetings/greetings_3_1022.mp3", 0, 0) + end +end + +function dlg_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + Dialog.New(NPC, Spawn) + + Dialog.AddDialog("Who attacks the gates of Freeport? Orcs? Dervish Cutthroats? Qeynosians? Hah! The only good thing about this post is it gives me a lot of time. And even the most daft of fools knows that time equals money.") + Dialog.AddVoiceover("", "", 0) + Dialog.AddOption("How does this post turn profit?", "dlg_3") + + Dialog.Start() +end + +function dlg_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + Dialog.New(NPC, Spawn) + + Dialog.AddDialog("Like I said, I've got free time. So while I'm out here I can acquire commodities that I can then sell to the merchants of Freeport. If I can't be out there earning glory, I'll stay back here and earn coin. Care to help?") + Dialog.AddOption("What do you need?", "dlg_4") + Dialog.AddOption("No thanks.") + + Dialog.Start() +end + +function dlg_4(NPC, Spawn) + FaceTarget(NPC, Spawn) + Dialog.New(NPC, Spawn) + + Dialog.AddDialog("Venom has been selling quite nicely. There are quite a few speckled rattlers around here. They're a great source of venom. If you bring me back the venom from eight of them I'll give you a portion of what the profit will be. Sound good?") + Dialog.AddOption("Sure.", "OfferSpeckledRattlerVenom") + Dialog.Start() +end + +function dlg_5(NPC, Spawn) + FaceTarget(NPC, Spawn) + Dialog.New(NPC, Spawn) + + Dialog.AddDialog("Great! I'll be here, of course.") + Dialog.AddVoiceover("", "", 0) + Dialog.AddOption("I'll be back.") + + Dialog.Start() +end + +function OfferSpeckledRattlerVenom(NPC, Spawn) + OfferQuest(NPC, Spawn, SpeckledRattlerVenom) +end + +function CompleteSpeckledRattlerVenom(NPC, Spawn) + SetStepComplete(Spawn, SpeckledRattlerVenom, 2) + PlaySound(NPC, "sounds/ui/gui_quest_complete.wav", GetX(Spawn), GetY(Spawn), GetZ(Spawn), Spawn) + FaceTarget(NPC, Spawn) + Dialog.New(NPC, Spawn) + + Dialog.AddDialog("Good work. You've made us both quite a bit of coin. Thanks for the help. I'm sorry that my tasks have been so dull, it's hard to pull the important missions when you're a lowly gate patrol. I do have something a bit more exciting if you're interested.") + + Dialog.AddOption("What is it?") + Dialog.AddOption("No thanks.") + Dialog.Start() +end \ No newline at end of file diff --git a/server/SpawnScripts/Commonlands/Graverobber.lua b/server/SpawnScripts/Commonlands/Graverobber.lua new file mode 100644 index 000000000..db69f1a84 --- /dev/null +++ b/server/SpawnScripts/Commonlands/Graverobber.lua @@ -0,0 +1,20 @@ +--[[ + Script Name : SpawnScripts/Commonlands/Graverobber.lua + Script Author : gloat + Script Date : 2019.01.31 01:01:20 + Script Purpose : + : +--]] +require "SpawnScripts/Generic/MovementCircleSmall" +function spawn(NPC) + SpawnChooseRandomMovement(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) +end + +function respawn(NPC) + +end + diff --git a/server/SpawnScripts/Commonlands/MadamVi.lua b/server/SpawnScripts/Commonlands/MadamVi.lua new file mode 100644 index 000000000..edb290884 --- /dev/null +++ b/server/SpawnScripts/Commonlands/MadamVi.lua @@ -0,0 +1,511 @@ +--[[ + Script Name : SpawnScripts/TheCommonlands/MadamVi.lua + Script Purpose : Madam Vi + Script Author : Kinglykrab + Script Date : 2019.02.05 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +function spawn(NPC) + SetPlayerProximityFunction(NPC, 10, "InRange", "LeaveRange") +end + +function respawn(NPC) + spawn(NPC) +end + +function InRange(NPC, Spawn) +end + +function LeaveRange(NPC, Spawn) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + local choice = math.random(1,1) + + if choice == 1 then + PlayFlavor(NPC, "", "Wonderful to see you, thanks again for all of your help.", "", 1689589577, 4560189, Spawn) + else + end + + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_3_1047.mp3", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "I have the things you need for your Seer Stone, Madam.", "dlg_0_1") + AddConversationOption(conversation, "Nothing right now.") + StartConversation(conversation, NPC, Spawn, "Hello again. Any news?") + if convo==1 then + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_2_1047.mp3", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "I have the things you need for your Seer Stone, Madam.", "dlg_1_1") + AddConversationOption(conversation, "Nothing right now.") + StartConversation(conversation, NPC, Spawn, "Hello again. Any news?") + end + + if convo==2 then + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_1_1047.mp3", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "I have filled the flasks for you, Madam.", "dlg_2_1") + AddConversationOption(conversation, "Nothing right now.") + StartConversation(conversation, NPC, Spawn, "Hello again. Any news?") + end + + if convo==3 then + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_2_1047.mp3", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Actually, I do.", "dlg_3_1") + AddConversationOption(conversation, "Not for you.") + StartConversation(conversation, NPC, Spawn, "Hello again. Do you have any further time to spare?") + end + + if convo==4 then + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_3_1047.mp3", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "I was able to find your stone, Madam.", "dlg_4_1") + AddConversationOption(conversation, "Nothing right now.") + StartConversation(conversation, NPC, Spawn, "Hello again. Any news?") + end + + if convo==5 then + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_2_1047.mp3", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "I was able to find your stone, Madam.", "dlg_5_1") + AddConversationOption(conversation, "Nothing right now.") + StartConversation(conversation, NPC, Spawn, "Hello again. Any news?") + end + + if convo==6 then + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_3_1047.mp3", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Some, yes.", "dlg_6_1") + AddConversationOption(conversation, "No, nothing at all. I better go.") + StartConversation(conversation, NPC, Spawn, "You have certainly proven yourself, and it is I who am honored. Tell me, do you know anything of mage craft?") + end + + if convo==7 then + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_3_1047.mp3", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Some, yes.", "dlg_7_1") + AddConversationOption(conversation, "No, nothing at all. I better go.") + StartConversation(conversation, NPC, Spawn, "You have certainly proven yourself, and it is I who am honored. Tell me, do you know anything of mage craft?") + end + + if convo==8 then + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_2_1047.mp3", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Some, yes.", "dlg_8_1") + AddConversationOption(conversation, "No, nothing at all. I better go.") + StartConversation(conversation, NPC, Spawn, "You have certainly proven yourself, and it is I who am honored. Tell me, do you know anything of mage craft?") + end + + if convo==9 then + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_3_1047.mp3", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Some, yes.", "dlg_9_1") + AddConversationOption(conversation, "No, nothing at all. I better go.") + StartConversation(conversation, NPC, Spawn, "You have certainly proven yourself, and it is I who am honored. Tell me, do you know anything of mage craft?") + end + + if convo==10 then + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_2_1047.mp3", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Some, yes.", "dlg_10_1") + AddConversationOption(conversation, "No, nothing at all. I better go.") + StartConversation(conversation, NPC, Spawn, "You have certainly proven yourself, and it is I who am honored. Tell me, do you know anything of mage craft?") + end + + if convo==11 then + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_1_1047.mp3", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Not yet. Patience, my lady.", "dlg_11_1") + StartConversation(conversation, NPC, Spawn, "Have you completed your task?") + end + + if convo==14 then + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_1_1047.mp3", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "What assistance do you require?", "dlg_14_1") + AddConversationOption(conversation, "I'm busy at the moment.") + StartConversation(conversation, NPC, Spawn, "I need some assistance. Would you be willing to aid me?") + end + + if convo==15 then + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_3_1047.mp3", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "What assistance do you require?", "dlg_15_1") + AddConversationOption(conversation, "I'm busy at the moment.") + StartConversation(conversation, NPC, Spawn, "I need some assistance. Would you be willing to aid me?") + end + + if convo==16 then + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_2_1047.mp3", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "What assistance do you require?", "dlg_16_1") + AddConversationOption(conversation, "I'm busy at the moment.") + StartConversation(conversation, NPC, Spawn, "I need some assistance. Would you be willing to aid me?") + end + + if convo==17 then + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_2_1003.mp3", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "What assistance do you require?", "dlg_17_1") + AddConversationOption(conversation, "I'm busy at the moment.") + StartConversation(conversation, NPC, Spawn, "I need some assistance. Would you be willing to aid me?") + end + + if convo==20 then + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_3_1003.mp3", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "I was able to find your stone, Madam.", "dlg_20_1") + AddConversationOption(conversation, "Nothing right now.") + StartConversation(conversation, NPC, Spawn, "Hello again. Any news?") + end + + if convo==21 then + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_1_1047.mp3", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "I was able to find your friends. They were very grateful for the water.", "dlg_21_1") + AddConversationOption(conversation, "Nothing right now.") + StartConversation(conversation, NPC, Spawn, "Hello again. Any news?") + end + + if convo==22 then + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_2_1047.mp3", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "I was able to find your friends. They were very grateful for the water.", "dlg_22_1") + AddConversationOption(conversation, "Nothing right now.") + StartConversation(conversation, NPC, Spawn, "Hello again. Any news?") + end + + if convo==23 then + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_1_1047.mp3", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "It was my pleasure, but you seem distracted. Do you require further assistance?", "dlg_23_1") + AddConversationOption(conversation, "I did do great didn't I? I'll be off now.") + StartConversation(conversation, NPC, Spawn, "Hello friend. My companions are rehydrated and back to themselves, thanks to you.") + end + + if convo==24 then + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_2_1047.mp3", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "It was my pleasure, but you seem distracted. Do you require further assistance?", "dlg_24_1") + AddConversationOption(conversation, "I did do great didn't I? I'll be off now.") + StartConversation(conversation, NPC, Spawn, "Hello friend. My companions are rehydrated and back to themselves, thanks to you.") + end + + if convo==25 then + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_2_1047.mp3", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "It was my pleasure, but you seem distracted. Do you require further assistance?", "dlg_25_1") + AddConversationOption(conversation, "I did do great didn't I? I'll be off now.") + StartConversation(conversation, NPC, Spawn, "Hello friend. My companions are rehydrated and back to themselves, thanks to you.") + end + + if convo==26 then + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_2_1047.mp3", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "It was my pleasure, but you seem distracted. Do you require further assistance?", "dlg_26_1") + AddConversationOption(conversation, "I did do great didn't I? I'll be off now.") + StartConversation(conversation, NPC, Spawn, "Hello friend. My companions are rehydrated and back to themselves, thanks to you.") + end + + if convo==27 then + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_3_1047.mp3", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Not yet. Patience, my lady.", "dlg_27_1") + StartConversation(conversation, NPC, Spawn, "Have you completed your task?") + end + + if convo==31 then + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_2_1047.mp3", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Not yet. Patience, my lady.", "dlg_31_1") + StartConversation(conversation, NPC, Spawn, "Have you completed your task?") + end + + if convo==45 then + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_2_1047.mp3", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "What assistance do you require?", "dlg_45_1") + AddConversationOption(conversation, "I'm busy at the moment.") + StartConversation(conversation, NPC, Spawn, "I need some assistance. Would you be willing to aid me?") + end + + if convo==46 then + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_3_1047.mp3", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "What assistance do you require?", "dlg_46_1") + AddConversationOption(conversation, "I'm busy at the moment.") + StartConversation(conversation, NPC, Spawn, "I need some assistance. Would you be willing to aid me?") + end + + if convo==47 then + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_1_1047.mp3", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "What assistance do you require?", "dlg_47_1") + AddConversationOption(conversation, "I'm busy at the moment.") + StartConversation(conversation, NPC, Spawn, "I need some assistance. Would you be willing to aid me?") + end + + if convo==48 then + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_2_1047.mp3", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Not yet. Patience, my lady.", "dlg_48_1") + StartConversation(conversation, NPC, Spawn, "Have you completed your task?") + end + + if convo==69 then + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_2_1047.mp3", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "I have filled the flasks for you, Madam.", "dlg_69_1") + AddConversationOption(conversation, "Nothing right now.") + StartConversation(conversation, NPC, Spawn, "Hello again. Any news?") + end + + if convo==70 then + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_1_1047.mp3", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "I have filled the flasks for you, Madam.", "dlg_70_1") + AddConversationOption(conversation, "Nothing right now.") + StartConversation(conversation, NPC, Spawn, "Hello again. Any news?") + end + + if convo==71 then + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_1_1047.mp3", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Actually, I do.", "dlg_71_1") + AddConversationOption(conversation, "Not for you.") + StartConversation(conversation, NPC, Spawn, "Hello again. Do you have any further time to spare?") + end + + if convo==72 then + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_3_1047.mp3", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Actually, I do.", "dlg_72_1") + AddConversationOption(conversation, "Not for you.") + StartConversation(conversation, NPC, Spawn, "Hello again. Do you have any further time to spare?") + end + + if convo==73 then + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_3_1047.mp3", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Actually, I do.", "dlg_73_1") + AddConversationOption(conversation, "Not for you.") + StartConversation(conversation, NPC, Spawn, "Hello again. Do you have any further time to spare?") + end + + if convo==74 then + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_1_1047.mp3", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Not yet. Patience, my lady.", "dlg_74_1") + StartConversation(conversation, NPC, Spawn, "Have you completed your task?") + end + +end + +function dlg_0_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Sure.") + AddConversationOption(conversation, "Not right now.", "dlg_0_2") + StartConversation(conversation, NPC, Spawn, "The heat out here is ridiculous and I am parched. I would do anything for some nice cool water. The water around here gets so filthy from the livestock. Even as hot as it is, I can't just drink any water, you know? Do you think you could go out and fill each of these flasks with clean water from the lake and river for me? Oh, and I will also need one of them filled from the sea. Mooshga always needs more salt for curing her specialties.") +end + +function dlg_1_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "You're welcome, Madam.", "dlg_1_2") + StartConversation(conversation, NPC, Spawn, "Excellent work!") +end + +function dlg_2_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "You're welcome, Madam.", "dlg_2_2") + StartConversation(conversation, NPC, Spawn, "Excellent work!") +end + +function dlg_2_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "I will find them.", "dlg_2_3") + StartConversation(conversation, NPC, Spawn, "Head out to the northwest. They have been missing for quite some time.") +end + +function dlg_2_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Perhaps.", "dlg_2_4") + StartConversation(conversation, NPC, Spawn, "I wonder if they've set up camp yet.") +end + +function dlg_3_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "No problem, where are they?", "dlg_3_2") + AddConversationOption(conversation, "I care not for your friends.") + StartConversation(conversation, NPC, Spawn, "A section of my entourage seems to be lost out there. I need you to find them, give them the water you collected earlier, and relay their location to me.") +end + +function dlg_3_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "I will find them.", "dlg_3_3") + StartConversation(conversation, NPC, Spawn, "Head out to the northwest. They have been missing for quite some time.") +end + +function dlg_3_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Perhaps.", "dlg_3_4") + StartConversation(conversation, NPC, Spawn, "I wonder if they've set up camp yet.") +end + +function dlg_11_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "You're welcome, Madam.", "dlg_11_2") + StartConversation(conversation, NPC, Spawn, "Oh, thank you... I can complete my stone, at long last!") +end + +function dlg_15_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Sure.", "dlg_15_2") + AddConversationOption(conversation, "Not right now.") + StartConversation(conversation, NPC, Spawn, "The heat out here is ridiculous and I am parched. I would do anything for some nice cool water. The water around here gets so filthy from the livestock. Even as hot as it is, I can't just drink any water, you know? Do you think you could go out and fill each of these flasks with clean water from the lake and river for me? Oh, and I will also need one of them filled from the sea. Mooshga always needs more salt for curing her specialties.") +end + +function dlg_16_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Sure.", "dlg_16_2") + AddConversationOption(conversation, "Not right now.") + StartConversation(conversation, NPC, Spawn, "The heat out here is ridiculous and I am parched. I would do anything for some nice cool water. The water around here gets so filthy from the livestock. Even as hot as it is, I can't just drink any water, you know? Do you think you could go out and fill each of these flasks with clean water from the lake and river for me? Oh, and I will also need one of them filled from the sea. Mooshga always needs more salt for curing her specialties.") +end + +function dlg_16_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Of course.", "dlg_16_3") + StartConversation(conversation, NPC, Spawn, "Do make sure there are no parasites in the water.") +end + +function dlg_17_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Sure.", "dlg_17_2") + AddConversationOption(conversation, "Not right now.") + StartConversation(conversation, NPC, Spawn, "The heat out here is ridiculous and I am parched. I would do anything for some nice cool water. The water around here gets so filthy from the livestock. Even as hot as it is, I can't just drink any water, you know? Do you think you could go out and fill each of these flasks with clean water from the lake and river for me? Oh, and I will also need one of them filled from the sea. Mooshga always needs more salt for curing her specialties.") +end + +function dlg_17_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Of course.", "dlg_17_3") + StartConversation(conversation, NPC, Spawn, "Do make sure there are no parasites in the water.") +end + +function dlg_20_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "You're welcome.", "dlg_20_2") + StartConversation(conversation, NPC, Spawn, "Oh yes, this is just what I needed. Look here, the gem is right inside. Oh, it's just gorgeous, and will work perfectly for what I have in mind. Thank you.") +end + +function dlg_21_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "I agree.", "dlg_21_2") + StartConversation(conversation, NPC, Spawn, "Great news! Nothing like an ice cold drink on a hot day.") +end + +function dlg_21_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "I am very interested. Where do I look?", "dlg_21_3") + AddConversationOption(conversation, "No, not right now. Maybe later.") + StartConversation(conversation, NPC, Spawn, "Exactly. You are quite intuitive. The gem you retrieved for me is in itself not enough to create the quality item I desire. Would you be interested in fetching the rest of the components I need?") +end + +function dlg_21_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "I'll be off then.", "dlg_21_4") + AddConversationOption(conversation, "I don't think I will help.") + StartConversation(conversation, NPC, Spawn, "To finish my Seer Stone, I will need some components that you can gather for me from different beasts around the Commonlands. I will need some bone dust, a few water glands and, just for good measure, some sparkly bits.") +end + +function dlg_21_4(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "All right.", "dlg_21_5") + StartConversation(conversation, NPC, Spawn, "Please hurry!") +end + +function dlg_22_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "I agree.", "dlg_22_2") + StartConversation(conversation, NPC, Spawn, "Great news! Nothing like an ice cold drink on a hot day.") +end + +function dlg_22_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "I will find the gem for you.", "dlg_22_3") + AddConversationOption(conversation, "Wailing Caves? Are you insane?!") + StartConversation(conversation, NPC, Spawn, "There is a gem that I truly desire which has evaded me. I heard that it can be found by breaking open clumps of rocks inside the wailing caves to the west. Look for dull stone outcroppings near the vibrant blue rocks found inside.") +end + +function dlg_22_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "I am always careful.", "dlg_22_4") + StartConversation(conversation, NPC, Spawn, "Be careful, those caves are dangerous!") +end + +function dlg_23_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "I meant no offense. Is there anything I can do to rid you of this distraction?", "dlg_23_2") + AddConversationOption(conversation, "I think you need to get out of the sun. Goodbye.") + StartConversation(conversation, NPC, Spawn, "Wha..distracted? Hmm, well I suppose you are correct, but please do keep your observations to yourself in the future. ") +end + +function dlg_23_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "I will find the gem for you.", "dlg_23_3") + AddConversationOption(conversation, "Wailing Caves? Are you insane?!") + StartConversation(conversation, NPC, Spawn, "There is a gem that I truly desire which has evaded me. I heard that it can be found by breaking open clumps of rocks inside the wailing caves to the west. Look for dull stone outcroppings near the vibrant blue rocks found inside.") +end + +function dlg_23_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "I am always careful.", "dlg_23_4") + StartConversation(conversation, NPC, Spawn, "Be careful, those caves are dangerous!") +end + +--[[ raw_conversations + PlayFlavor(NPC, "", "Wonderful to see you, thanks again for all of your help.", "", 1689589577, 4560189, Spawn) +--]] + diff --git a/server/SpawnScripts/Commonlands/OgofRunner.lua b/server/SpawnScripts/Commonlands/OgofRunner.lua new file mode 100644 index 000000000..9a94d0776 --- /dev/null +++ b/server/SpawnScripts/Commonlands/OgofRunner.lua @@ -0,0 +1,44 @@ +--[[ + Script Name : SpawnScripts/Generic/OgofRunner.lua + Script Author : gloat + Script Date : 2019.02.03 01:02:21 + Script Purpose : + : +--]] + +function spawn(NPC) + AddTimer(NPC, 900, "follow_Ogof") + +end + +function follow_Ogof(NPC) + local zone = GetZone(NPC) + local captOgof = GetSpawnByLocationID(zone, 1585710) + local whoAmI = GetSpawnLocationID(NPC) + + local ogofX = GetX(captOgof) + local ogofY = GetY(captOgof) + local ogofZ = GetZ(captOgof) + local speed = 2 + + if whoAmI == 286752 then + if GetDistance(NPC, captOgof) >= 5 then + speed = 5 + MoveToLocation(NPC, ogofX - 4, ogofY, ogofZ - 4, speed) + else + speed = 2 + MoveToLocation(NPC, ogofX - 4, ogofY, ogofZ - 4, speed) + end + end + speed = 2 + AddTimer(NPC, 1500, "follow_Ogof") +end + + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) +end + +function respawn(NPC) + +end \ No newline at end of file diff --git a/server/SpawnScripts/Commonlands/VtalNarin.lua b/server/SpawnScripts/Commonlands/VtalNarin.lua new file mode 100644 index 000000000..a1acbd13d --- /dev/null +++ b/server/SpawnScripts/Commonlands/VtalNarin.lua @@ -0,0 +1,20 @@ +--[[ + Script Name : SpawnScripts/Commonlands/VtalNarin.lua + Script Author : neatz09 + Script Date : 2019.08.28 09:08:17 + Script Purpose : + : +--]] + +function spawn(NPC) + +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) +end + +function respawn(NPC) + +end + diff --git a/server/SpawnScripts/Commonlands/aBloodskullpriest.lua b/server/SpawnScripts/Commonlands/aBloodskullpriest.lua new file mode 100644 index 000000000..660b8a321 --- /dev/null +++ b/server/SpawnScripts/Commonlands/aBloodskullpriest.lua @@ -0,0 +1,20 @@ +--[[ + Script Name : SpawnScripts/Commonlands/aBloodskullpriest.lua + Script Author : gloat + Script Date : 2019.01.31 01:01:18 + Script Purpose : + : +--]] +require "SpawnScripts/Generic/MovementCircleSmall" +function spawn(NPC) + SpawnChooseRandomMovement(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) +end + +function respawn(NPC) + +end + diff --git a/server/SpawnScripts/Commonlands/aBloodskullwarrior.lua b/server/SpawnScripts/Commonlands/aBloodskullwarrior.lua new file mode 100644 index 000000000..60c07f57e --- /dev/null +++ b/server/SpawnScripts/Commonlands/aBloodskullwarrior.lua @@ -0,0 +1,20 @@ +--[[ + Script Name : SpawnScripts/Commonlands/aBloodskullwarrior.lua + Script Author : gloat + Script Date : 2019.01.31 01:01:40 + Script Purpose : + : +--]] +require "SpawnScripts/Generic/MovementCircleSmall" +function spawn(NPC) + SpawnChooseRandomMovement(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) +end + +function respawn(NPC) + +end + diff --git a/server/SpawnScripts/Commonlands/aFesteringCadaver.lua b/server/SpawnScripts/Commonlands/aFesteringCadaver.lua new file mode 100644 index 000000000..cf732ba9f --- /dev/null +++ b/server/SpawnScripts/Commonlands/aFesteringCadaver.lua @@ -0,0 +1,22 @@ +--[[ + Script Name : SpawnScripts/Commonlands/aFesteringCadaver.lua + Script Author : gloat + Script Date : 2019.01.31 02:01:55 + Script Purpose : + : +--]] + +require "SpawnScripts/Generic/MovementCircleSmall" +function spawn(NPC) + SpawnChooseRandomMovement(NPC) + +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) +end + +function respawn(NPC) + +end + diff --git a/server/SpawnScripts/Commonlands/aGateCallerscion.lua b/server/SpawnScripts/Commonlands/aGateCallerscion.lua new file mode 100644 index 000000000..6a9a3cf12 --- /dev/null +++ b/server/SpawnScripts/Commonlands/aGateCallerscion.lua @@ -0,0 +1,22 @@ +--[[ + Script Name : SpawnScripts/Commonlands/aGateCallerscion.lua + Script Author : gloat + Script Date : 2019.01.31 02:01:39 + Script Purpose : + : +--]] + +require "SpawnScripts/Generic/MovementCircleSmall" +function spawn(NPC) + SpawnChooseRandomMovement(NPC) + +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) +end + +function respawn(NPC) + +end + diff --git a/server/SpawnScripts/Commonlands/abrittleskeleton.lua b/server/SpawnScripts/Commonlands/abrittleskeleton.lua new file mode 100644 index 000000000..1abb7f29f --- /dev/null +++ b/server/SpawnScripts/Commonlands/abrittleskeleton.lua @@ -0,0 +1,20 @@ +--[[ + Script Name : SpawnScripts/Commonlands/abrittleskeleton.lua + Script Author : gloat + Script Date : 2019.01.31 01:01:39 + Script Purpose : + : +--]] +require "SpawnScripts/Generic/MovementCircleSmall" +function spawn(NPC) + SpawnChooseRandomMovement(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) +end + +function respawn(NPC) + +end + diff --git a/server/SpawnScripts/Commonlands/abullrhinoceros.lua b/server/SpawnScripts/Commonlands/abullrhinoceros.lua new file mode 100644 index 000000000..f4833713e --- /dev/null +++ b/server/SpawnScripts/Commonlands/abullrhinoceros.lua @@ -0,0 +1,20 @@ +--[[ + Script Name : SpawnScripts/Commonlands/abullrhinoceros.lua + Script Author : gloat + Script Date : 2019.01.31 02:01:12 + Script Purpose : + : +--]] +require "SpawnScripts/Generic/MovementCircleSmall" +function spawn(NPC) + SpawnChooseRandomMovement(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) +end + +function respawn(NPC) + +end + diff --git a/server/SpawnScripts/Commonlands/aburlyarmadillo.lua b/server/SpawnScripts/Commonlands/aburlyarmadillo.lua new file mode 100644 index 000000000..946df885b --- /dev/null +++ b/server/SpawnScripts/Commonlands/aburlyarmadillo.lua @@ -0,0 +1,20 @@ +--[[ + Script Name : SpawnScripts/Commonlands/aburlyarmadillo.lua + Script Author : gloat + Script Date : 2019.01.31 12:01:41 + Script Purpose : + : +--]] +require "SpawnScripts/Generic/MovementCircleSmall" +function spawn(NPC) + SpawnChooseRandomMovement(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) +end + +function respawn(NPC) + +end + diff --git a/server/SpawnScripts/Commonlands/acarrionhound.lua b/server/SpawnScripts/Commonlands/acarrionhound.lua new file mode 100644 index 000000000..717b7bae4 --- /dev/null +++ b/server/SpawnScripts/Commonlands/acarrionhound.lua @@ -0,0 +1,20 @@ +--[[ + Script Name : SpawnScripts/Commonlands/acarrionhound.lua + Script Author : gloat + Script Date : 2019.01.31 12:01:33 + Script Purpose : + : +--]] +require "SpawnScripts/Generic/MovementCircleSmall" +function spawn(NPC) + SpawnChooseRandomMovement(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) +end + +function respawn(NPC) + +end + diff --git a/server/SpawnScripts/Commonlands/afallenapostle.lua b/server/SpawnScripts/Commonlands/afallenapostle.lua new file mode 100644 index 000000000..3da4a8595 --- /dev/null +++ b/server/SpawnScripts/Commonlands/afallenapostle.lua @@ -0,0 +1,20 @@ +--[[ + Script Name : SpawnScripts/Commonlands/afallenapostle.lua + Script Author : gloat + Script Date : 2019.01.31 02:01:24 + Script Purpose : + : +--]] +require "SpawnScripts/Generic/MovementCircleSmall" +function spawn(NPC) + SpawnChooseRandomMovement(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) +end + +function respawn(NPC) + +end + diff --git a/server/SpawnScripts/Commonlands/afallenblackguard.lua b/server/SpawnScripts/Commonlands/afallenblackguard.lua new file mode 100644 index 000000000..9232e9995 --- /dev/null +++ b/server/SpawnScripts/Commonlands/afallenblackguard.lua @@ -0,0 +1,20 @@ +--[[ + Script Name : SpawnScripts/Commonlands/afallenblackguard.lua + Script Author : gloat + Script Date : 2019.01.31 02:01:43 + Script Purpose : + : +--]] +require "SpawnScripts/Generic/MovementCircleSmall" +function spawn(NPC) + SpawnChooseRandomMovement(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) +end + +function respawn(NPC) + +end + diff --git a/server/SpawnScripts/Commonlands/afallencaptain.lua b/server/SpawnScripts/Commonlands/afallencaptain.lua new file mode 100644 index 000000000..cca9dbf9e --- /dev/null +++ b/server/SpawnScripts/Commonlands/afallencaptain.lua @@ -0,0 +1,20 @@ +--[[ + Script Name : SpawnScripts/Commonlands/afallencaptain.lua + Script Author : gloat + Script Date : 2019.01.31 02:01:01 + Script Purpose : + : +--]] +require "SpawnScripts/Generic/MovementCircleSmall" +function spawn(NPC) + SpawnChooseRandomMovement(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) +end + +function respawn(NPC) + +end + diff --git a/server/SpawnScripts/Commonlands/afallencrusader.lua b/server/SpawnScripts/Commonlands/afallencrusader.lua new file mode 100644 index 000000000..509c0a4de --- /dev/null +++ b/server/SpawnScripts/Commonlands/afallencrusader.lua @@ -0,0 +1,20 @@ +--[[ + Script Name : SpawnScripts/Commonlands/afallencrusader.lua + Script Author : gloat + Script Date : 2019.01.31 02:01:05 + Script Purpose : + : +--]] +require "SpawnScripts/Generic/MovementCircleSmall" +function spawn(NPC) + SpawnChooseRandomMovement(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) +end + +function respawn(NPC) + +end + diff --git a/server/SpawnScripts/Commonlands/afallendefender.lua b/server/SpawnScripts/Commonlands/afallendefender.lua new file mode 100644 index 000000000..f4f7e12da --- /dev/null +++ b/server/SpawnScripts/Commonlands/afallendefender.lua @@ -0,0 +1,21 @@ +--[[ + Script Name : SpawnScripts/Commonlands/afallendefender.lua + Script Author : gloat + Script Date : 2019.01.31 02:01:44 + Script Purpose : + : +--]] + +require "SpawnScripts/Generic/MovementCircleSmall" +function spawn(NPC) + SpawnChooseRandomMovement(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) +end + +function respawn(NPC) + +end + diff --git a/server/SpawnScripts/Commonlands/afallendiplomat.lua b/server/SpawnScripts/Commonlands/afallendiplomat.lua new file mode 100644 index 000000000..9d3dfe880 --- /dev/null +++ b/server/SpawnScripts/Commonlands/afallendiplomat.lua @@ -0,0 +1,22 @@ +--[[ + Script Name : SpawnScripts/Commonlands/afallendiplomat.lua + Script Author : gloat + Script Date : 2019.01.31 02:01:03 + Script Purpose : + : +--]] + +require "SpawnScripts/Generic/MovementCircleSmall" +function spawn(NPC) + SpawnChooseRandomMovement(NPC) + +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) +end + +function respawn(NPC) + +end + diff --git a/server/SpawnScripts/Commonlands/afallendisciple.lua b/server/SpawnScripts/Commonlands/afallendisciple.lua new file mode 100644 index 000000000..dc10d8eb9 --- /dev/null +++ b/server/SpawnScripts/Commonlands/afallendisciple.lua @@ -0,0 +1,20 @@ +--[[ + Script Name : SpawnScripts/Commonlands/afallendisciple.lua + Script Author : gloat + Script Date : 2019.01.31 02:01:34 + Script Purpose : + : +--]] +require "SpawnScripts/Generic/MovementCircleSmall" +function spawn(NPC) + SpawnChooseRandomMovement(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) +end + +function respawn(NPC) + +end + diff --git a/server/SpawnScripts/Commonlands/afallenguardian.lua b/server/SpawnScripts/Commonlands/afallenguardian.lua new file mode 100644 index 000000000..b106cf982 --- /dev/null +++ b/server/SpawnScripts/Commonlands/afallenguardian.lua @@ -0,0 +1,22 @@ +--[[ + Script Name : SpawnScripts/Commonlands/afallenguardian.lua + Script Author : gloat + Script Date : 2019.01.31 02:01:26 + Script Purpose : + : +--]] + +require "SpawnScripts/Generic/MovementCircleSmall" +function spawn(NPC) + SpawnChooseRandomMovement(NPC) + +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) +end + +function respawn(NPC) + +end + diff --git a/server/SpawnScripts/Commonlands/afallenorc.lua b/server/SpawnScripts/Commonlands/afallenorc.lua new file mode 100644 index 000000000..6e50a83c4 --- /dev/null +++ b/server/SpawnScripts/Commonlands/afallenorc.lua @@ -0,0 +1,22 @@ +--[[ + Script Name : SpawnScripts/Commonlands/afallenorc.lua + Script Author : gloat + Script Date : 2019.01.31 02:01:47 + Script Purpose : + : +--]] + +require "SpawnScripts/Generic/MovementCircleSmall" +function spawn(NPC) + SpawnChooseRandomMovement(NPC) + +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) +end + +function respawn(NPC) + +end + diff --git a/server/SpawnScripts/Commonlands/afallenorclieutenant.lua b/server/SpawnScripts/Commonlands/afallenorclieutenant.lua new file mode 100644 index 000000000..e2dd9fed7 --- /dev/null +++ b/server/SpawnScripts/Commonlands/afallenorclieutenant.lua @@ -0,0 +1,22 @@ +--[[ + Script Name : SpawnScripts/Commonlands/afallenorclieutenant.lua + Script Author : gloat + Script Date : 2019.01.31 02:01:10 + Script Purpose : + : +--]] + +require "SpawnScripts/Generic/MovementCircleSmall" +function spawn(NPC) + SpawnChooseRandomMovement(NPC) + +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) +end + +function respawn(NPC) + +end + diff --git a/server/SpawnScripts/Commonlands/afarmer.lua b/server/SpawnScripts/Commonlands/afarmer.lua new file mode 100644 index 000000000..ea4368754 --- /dev/null +++ b/server/SpawnScripts/Commonlands/afarmer.lua @@ -0,0 +1,22 @@ +--[[ + Script Name : SpawnScripts/Commonlands/afarmer.lua + Script Author : gloat + Script Date : 2019.01.31 02:01:34 + Script Purpose : + : +--]] + +require "SpawnScripts/Generic/MovementCircleSmall" +function spawn(NPC) + SpawnChooseRandomMovement(NPC) + +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) +end + +function respawn(NPC) + +end + diff --git a/server/SpawnScripts/Commonlands/afiercecarrionhound.lua b/server/SpawnScripts/Commonlands/afiercecarrionhound.lua new file mode 100644 index 000000000..cffd3c517 --- /dev/null +++ b/server/SpawnScripts/Commonlands/afiercecarrionhound.lua @@ -0,0 +1,22 @@ +--[[ + Script Name : SpawnScripts/Commonlands/afiercecarrionhound.lua + Script Author : gloat + Script Date : 2019.01.31 02:01:21 + Script Purpose : + : +--]] + +require "SpawnScripts/Generic/MovementCircleSmall" +function spawn(NPC) + SpawnChooseRandomMovement(NPC) + +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) +end + +function respawn(NPC) + +end + diff --git a/server/SpawnScripts/Commonlands/afreshwatercrab.lua b/server/SpawnScripts/Commonlands/afreshwatercrab.lua new file mode 100644 index 000000000..819a9f679 --- /dev/null +++ b/server/SpawnScripts/Commonlands/afreshwatercrab.lua @@ -0,0 +1,20 @@ +--[[ + Script Name : SpawnScripts/Commonlands/afreshwatercrab.lua + Script Author : gloat + Script Date : 2019.01.31 01:01:35 + Script Purpose : + : +--]] +require "SpawnScripts/Generic/MovementCircleSmall" +function spawn(NPC) + SpawnChooseRandomMovement(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) +end + +function respawn(NPC) + +end + diff --git a/server/SpawnScripts/Commonlands/aghostlyorc.lua b/server/SpawnScripts/Commonlands/aghostlyorc.lua new file mode 100644 index 000000000..a70903cd8 --- /dev/null +++ b/server/SpawnScripts/Commonlands/aghostlyorc.lua @@ -0,0 +1,26 @@ +--[[ + Script Name : SpawnScripts/Commonlands/aghostlyorc.lua + Script Author : gloat + Script Date : 2019.01.31 12:01:05 + Script Purpose : + : +--]] + + +require "SpawnScripts/Generic/MovementCircleSmall" + +function spawn(NPC) + + SpawnChooseRandomMovement(NPC) + + +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) +end + +function respawn(NPC) + +end + diff --git a/server/SpawnScripts/Commonlands/aghostlyorcmessenger.lua b/server/SpawnScripts/Commonlands/aghostlyorcmessenger.lua new file mode 100644 index 000000000..61bb8351f --- /dev/null +++ b/server/SpawnScripts/Commonlands/aghostlyorcmessenger.lua @@ -0,0 +1,22 @@ +--[[ + Script Name : SpawnScripts/Commonlands/aghostlyorcmessenger.lua + Script Author : gloat + Script Date : 2019.01.31 02:01:06 + Script Purpose : + : +--]] + +require "SpawnScripts/Generic/MovementCircleSmall" +function spawn(NPC) + SpawnChooseRandomMovement(NPC) + +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) +end + +function respawn(NPC) + +end + diff --git a/server/SpawnScripts/Commonlands/agiantgrovewisp.lua b/server/SpawnScripts/Commonlands/agiantgrovewisp.lua new file mode 100644 index 000000000..6a3698c88 --- /dev/null +++ b/server/SpawnScripts/Commonlands/agiantgrovewisp.lua @@ -0,0 +1,22 @@ +--[[ + Script Name : SpawnScripts/Commonlands/agiantgrovewisp.lua + Script Author : gloat + Script Date : 2019.01.31 02:01:23 + Script Purpose : + : +--]] + +require "SpawnScripts/Generic/MovementCircleSmall" +function spawn(NPC) + SpawnChooseRandomMovement(NPC) + +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) +end + +function respawn(NPC) + +end + diff --git a/server/SpawnScripts/Commonlands/agiantspider.lua b/server/SpawnScripts/Commonlands/agiantspider.lua new file mode 100644 index 000000000..54cecbec2 --- /dev/null +++ b/server/SpawnScripts/Commonlands/agiantspider.lua @@ -0,0 +1,20 @@ +--[[ + Script Name : SpawnScripts/Commonlands/agiantspider.lua + Script Author : gloat + Script Date : 2019.01.31 12:01:46 + Script Purpose : + : +--]] +require "SpawnScripts/Generic/MovementCircleSmall" +function spawn(NPC) + SpawnChooseRandomMovement(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) +end + +function respawn(NPC) + +end + diff --git a/server/SpawnScripts/Commonlands/agiantvulrich.lua b/server/SpawnScripts/Commonlands/agiantvulrich.lua new file mode 100644 index 000000000..1bc4af750 --- /dev/null +++ b/server/SpawnScripts/Commonlands/agiantvulrich.lua @@ -0,0 +1,20 @@ +--[[ + Script Name : SpawnScripts/Commonlands/agiantvulrich.lua + Script Author : gloat + Script Date : 2019.01.31 12:01:25 + Script Purpose : + : +--]] +require "SpawnScripts/Generic/MovementCircleSmall" +function spawn(NPC) + SpawnChooseRandomMovement(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) +end + +function respawn(NPC) + +end + diff --git a/server/SpawnScripts/Commonlands/agriffintamer.lua b/server/SpawnScripts/Commonlands/agriffintamer.lua new file mode 100644 index 000000000..d4ff8130c --- /dev/null +++ b/server/SpawnScripts/Commonlands/agriffintamer.lua @@ -0,0 +1,207 @@ +--[[ + Script Name : SpawnScripts/ThunderingSteppes/agriffontamer.lua + Script Purpose : a griffon tamer (2490000) + Script Author : Jabantiz + Script Date : 2014.07.14 + Script Notes : +--]] + +local GriffonEggs = 112 + +function spawn(NPC) + ProvidesQuest(NPC, GriffonEggs) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + if CanReceiveQuest(Spawn, GriffonEggs) then + -- Start Quest + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_2_1052.mp3", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "I was wondering if there were any errands you needed help with.", "dlg_0_1") + AddConversationOption(conversation, "I would like to travel.", "dlg_1_1") + AddConversationOption(conversation, "I am fine staying here, thanks.") + StartConversation(conversation, NPC, Spawn, "Greetings traveler, how can I assist you today?") + elseif GetQuestStep(Spawn, GriffonEggs) == 2 then + -- Turn in the quest + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_1_1004.mp3", "", "", 0, 0, Spawn) + SetStepComplete(Spawn, GriffonEggs, 2) + AddConversationOption(conversation, "I hope she grows up healthy and strong!") + StartConversation(conversation, NPC, Spawn, "Oh, my, that's a gorgeous egg! Let me just put it down right over here. Our thanks, it's going to be rough for the handlers to raise all these!") + else + -- Finished Quest + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_2_1042.mp3", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "I would like to travel.", "dlg_1_1") + AddConversationOption(conversation, "Nowhere.") + StartConversation(conversation, NPC, Spawn, "Greetings traveler, how can I assist you today?") + end +end + +function dlg_0_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "They certainly have. These look very sturdy, but I don't see many griffins about.", "dlg_0_2") + StartConversation(conversation, NPC, Spawn, "It's been a real treat watching this tower be built by all the artisans. They've done a marvelous job getting it ready for our flying friends.") +end + +function dlg_0_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "So if you had some more griffons, the scheduling would be better?", "dlg_0_3") + AddConversationOption(conversation, "This sounds like a scheduling problem I don't want anything to do with.") + StartConversation(conversation, NPC, Spawn, "These towers were built very fast, and we were unable to get the griffin stock up to what it should be. This has made scheduling flights very difficult.") +end + +function dlg_0_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "Sure, sounds like a deal.", "dlg_0_4") + StartConversation(conversation, NPC, Spawn, "Oh, certainly. But they've got to be trained properly from birth, really. I'll tell you what, if you grab an unhatched griffin egg and return it to any of us tamers, you will be rewarded handsomely. How's that sound?") +end + +function dlg_0_4(NPC, Spawn) + OfferQuest(NPC, Spawn, GriffonEggs) +end + +function dlg_1_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + local con = CreateConversation() + + if GetSpawnLocationID(NPC) == 1214217 then + AddConversationOption(con, "To Antonica Gates.", "DocksToAnt") + AddConversationOption(con, "To South East Station.", "DocksToSE") + AddConversationOption(con, "To Coldwind.", "DocksToCold") + AddConversationOption(con, "To Thundermist Village.", "DocksToThundermist") + elseif GetSpawnLocationID(NPC) == 1214218 then + AddConversationOption(con, "To Antonica Gate.", "SEToAnt") + AddConversationOption(con, "To Coldwind.", "SEToCold") + AddConversationOption(con, "To Thundermist Village.", "SEToThundermist") + AddConversationOption(con, "To Docks.", "SEToDocks") + elseif GetSpawnLocationID(NPC) == 1214219 then + AddConversationOption(con, "To Thundermist Village.", "AntToThundermist") + AddConversationOption(con, "To South East Station.", "AntToSE") + AddConversationOption(con, "To Coldwind.", "AntToCold") + elseif GetSpawnLocationID(NPC) == 1214220 then + AddConversationOption(con, "To Thundermist Village.", "ColdToThundermist") + AddConversationOption(con, "To South East Station.", "ColdToSE") + AddConversationOption(con, "To Antonica Gate.", "ColdToAnt") + AddConversationOption(con, "To Docks.", "ColdToDocks") + elseif GetSpawnLocationID(NPC) == 1214221 then + AddConversationOption(con, "To Antonica Gate.", "ThundermistToAnt") + AddConversationOption(con, "To Coldwind.", "ThundermistToCold") + AddConversationOption(con, "To South East Station.", "ThundermistToSE") + AddConversationOption(con, "To Docks.", "ThundermistToDocks") + else + PlayFlavor(NPC, "", "Not implemented yet!", "cry", 0, 0, Spawn) + end + AddConversationOption(con, "Nowhere.") + StartConversation(con, NPC, Spawn, "Where to?") +end + +function DocksToAnt(NPC, Spawn) + StartAutoMount(Spawn, 16) + SetMount(Spawn, 225) +end + +function DocksToSE(NPC, Spawn) + StartAutoMount(Spawn, 15) + SetMount(Spawn, 225) +end + +function DocksToCold(NPC, Spawn) + StartAutoMount(Spawn, 14) + SetMount(Spawn, 225) +end + +function DocksToThundermist(NPC, Spawn) + StartAutoMount(Spawn, 13) + SetMount(Spawn, 225) +end + +function SEToAnt(NPC, Spawn) + StartAutoMount(Spawn, 4) + SetMount(Spawn, 225) +end + +function SEToCold(NPC, Spawn) + StartAutoMount(Spawn, 7) + SetMount(Spawn, 225) +end + +function SEToThundermist(NPC, Spawn) + StartAutoMount(Spawn, 12) + SetMount(Spawn, 225) +end + +function SEToDocks(NPC, Spawn) + StartAutoMount(Spawn, 18) + SetMount(Spawn, 225) +end + +function AntToThundermist(NPC, Spawn) + StartAutoMount(Spawn, 1) + SetMount(Spawn, 225) +end + +function AntToSE(NPC, Spawn) + StartAutoMount(Spawn, 3) + SetMount(Spawn, 225) +end + +function AntToCold(NPC, Spawn) + StartAutoMount(Spawn, 10) + SetMount(Spawn, 225) +end + +function ColdToThundermist(NPC, Spawn) + StartAutoMount(Spawn, 6) + SetMount(Spawn, 225) +end + +function ColdToSE(NPC, Spawn) + StartAutoMount(Spawn, 8) + SetMount(Spawn, 225) +end + +function ColdToAnt(NPC, Spawn) + StartAutoMount(Spawn, 11) + SetMount(Spawn, 225) +end + +function ColdToDocks(NPC, Spawn) + StartAutoMount(Spawn, 19) + SetMount(Spawn, 225) +end + +function ThundermistToAnt(NPC, Spawn) + StartAutoMount(Spawn, 2) + SetMount(Spawn, 225) +end + +function ThundermistToCold(NPC, Spawn) + StartAutoMount(Spawn, 5) + SetMount(Spawn, 225) +end + +function ThundermistToSE(NPC, Spawn) + StartAutoMount(Spawn, 9) + SetMount(Spawn, 225) +end + +function ThundermistToDocks(NPC, Spawn) + StartAutoMount(Spawn, 17) + SetMount(Spawn, 225) +end +--[[ raw_conversations + PlayFlavor(NPC, "", "Fun, fun, fun! This big old tower, built for griffons, and yet... there just don't seem to be any around. Thinking about helping us out?", "", 1689589577, 4560189, Spawn) + PlayFlavor(NPC, "", "You can scramble 'em, boil 'em, fry 'em... oh, wait... were we talking about griffon eggs or chicken eggs?", "", 1689589577, 4560189, Spawn) + PlayFlavor(NPC, "", "I say... you haven't seen any griffon eggs around, have you? We sure could use some!", "", 1689589577, 4560189, Spawn) +--]] diff --git a/server/SpawnScripts/Commonlands/agriffontamer.lua b/server/SpawnScripts/Commonlands/agriffontamer.lua new file mode 100644 index 000000000..cc8159054 --- /dev/null +++ b/server/SpawnScripts/Commonlands/agriffontamer.lua @@ -0,0 +1,81 @@ +--[[ + Script Name : SpawnScripts/Commonlands/agriffontamer.lua + Script Purpose : a griffin tamer (330209) + Script Author : Neatz09 + Script Date : 2/5/2019 + Script Notes : +--]] + + +function spawn(NPC) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_2_1052.mp3", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "I would like to travel.", "dlg_1_1") + AddConversationOption(conversation, "I am fine staying here, thanks.") + StartConversation(conversation, NPC, Spawn, "Greetings traveler, how can I assist you today?") +end + +function dlg_1_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + local con = CreateConversation() + + if GetSpawnLocationID(NPC) == 295729 then + AddConversationOption(con, "To Freeport Station.", "NekToFreeport") + AddConversationOption(con, "To Hidden Canyon Station.", "NekToCanyon") + elseif GetSpawnLocationID(NPC) == 295727 then + AddConversationOption(con, "To Hidden Canyon Station.", "FreeportToCanyon") + AddConversationOption(con, "To Nektulos Forest Staion", "FreeportToNek") + elseif GetSpawnLocationID(NPC) == 295728 then + AddConversationOption(con, "To Freeport Station.", "CanyonToFreeport") + AddConversationOption(con, "To Nektulos Station.", "CanyonToNek") + + else + PlayFlavor(NPC, "", "Not implemented yet!", "cry", 0, 0, Spawn) + end + AddConversationOption(con, "Nowhere.") + StartConversation(con, NPC, Spawn, "Where to?") +end + +function NekToFreeport(NPC, Spawn) + StartAutoMount(Spawn, 172) + SetMount(Spawn, 225) +end + +function NekToCanyon(NPC, Spawn) + StartAutoMount(Spawn, 171) + SetMount(Spawn, 225) +end + +function FreeportToCanyon(NPC, Spawn) + StartAutoMount(Spawn, 169) + SetMount(Spawn, 225) +end + +function FreeportToNek(NPC, Spawn) + StartAutoMount(Spawn, 170) + SetMount(Spawn, 225) +end + +function CanyonToFreeport(NPC, Spawn) + StartAutoMount(Spawn, 167) + SetMount(Spawn, 225) +end + +function CanyonToNek(NPC, Spawn) + StartAutoMount(Spawn, 168) + SetMount(Spawn, 225) +end + +--[[ raw_conversations + PlayFlavor(NPC, "", "Fun, fun, fun! This big old tower, built for griffons, and yet... there just don't seem to be any around. Thinking about helping us out?", "", 1689589577, 4560189, Spawn) + PlayFlavor(NPC, "", "You can scramble 'em, boil 'em, fry 'em... oh, wait... were we talking about griffon eggs or chicken eggs?", "", 1689589577, 4560189, Spawn) + PlayFlavor(NPC, "", "I say... you haven't seen any griffon eggs around, have you? We sure could use some!", "", 1689589577, 4560189, Spawn) +--]] diff --git a/server/SpawnScripts/Commonlands/agrovewisp.lua b/server/SpawnScripts/Commonlands/agrovewisp.lua new file mode 100644 index 000000000..77f65d668 --- /dev/null +++ b/server/SpawnScripts/Commonlands/agrovewisp.lua @@ -0,0 +1,22 @@ +--[[ + Script Name : SpawnScripts/Commonlands/agrovewisp.lua + Script Author : gloat + Script Date : 2019.01.31 02:01:55 + Script Purpose : + : +--]] + +require "SpawnScripts/Generic/MovementCircleSmall" +function spawn(NPC) + SpawnChooseRandomMovement(NPC) + +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) +end + +function respawn(NPC) + +end + diff --git a/server/SpawnScripts/Commonlands/agruntofRee.lua b/server/SpawnScripts/Commonlands/agruntofRee.lua new file mode 100644 index 000000000..6ec6b7758 --- /dev/null +++ b/server/SpawnScripts/Commonlands/agruntofRee.lua @@ -0,0 +1,22 @@ +--[[ + Script Name : SpawnScripts/Commonlands/agruntofRee.lua + Script Author : gloat + Script Date : 2019.01.31 02:01:18 + Script Purpose : + : +--]] + +require "SpawnScripts/Generic/MovementCircleSmall" +function spawn(NPC) + SpawnChooseRandomMovement(NPC) + +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) +end + +function respawn(NPC) + +end + diff --git a/server/SpawnScripts/Commonlands/ahopelessmercenary.lua b/server/SpawnScripts/Commonlands/ahopelessmercenary.lua new file mode 100644 index 000000000..a69dde76b --- /dev/null +++ b/server/SpawnScripts/Commonlands/ahopelessmercenary.lua @@ -0,0 +1,22 @@ +--[[ + Script Name : SpawnScripts/Commonlands/ahopelessmercenary.lua + Script Author : gloat + Script Date : 2019.01.31 02:01:38 + Script Purpose : + : +--]] + +require "SpawnScripts/Generic/MovementCircleSmall" +function spawn(NPC) + SpawnChooseRandomMovement(NPC) + +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) +end + +function respawn(NPC) + +end + diff --git a/server/SpawnScripts/Commonlands/ahulkingfirebeetle.lua b/server/SpawnScripts/Commonlands/ahulkingfirebeetle.lua new file mode 100644 index 000000000..d2316ad8a --- /dev/null +++ b/server/SpawnScripts/Commonlands/ahulkingfirebeetle.lua @@ -0,0 +1,20 @@ +--[[ + Script Name : SpawnScripts/Commonlands/ahulkingfirebeetle.lua + Script Author : gloat + Script Date : 2019.01.31 12:01:44 + Script Purpose : + : +--]] +require "SpawnScripts/Generic/MovementCircleSmall" +function spawn(NPC) + SpawnChooseRandomMovement(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) +end + +function respawn(NPC) + +end + diff --git a/server/SpawnScripts/Commonlands/ahuntsman.lua b/server/SpawnScripts/Commonlands/ahuntsman.lua new file mode 100644 index 000000000..7ac4b5385 --- /dev/null +++ b/server/SpawnScripts/Commonlands/ahuntsman.lua @@ -0,0 +1,22 @@ +--[[ + Script Name : SpawnScripts/Commonlands/ahuntsman.lua + Script Author : gloat + Script Date : 2019.01.31 02:01:09 + Script Purpose : + : +--]] + +require "SpawnScripts/Generic/MovementCircleSmall" +function spawn(NPC) + SpawnChooseRandomMovement(NPC) + +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) +end + +function respawn(NPC) + +end + diff --git a/server/SpawnScripts/Commonlands/akerranrogue.lua b/server/SpawnScripts/Commonlands/akerranrogue.lua new file mode 100644 index 000000000..118de8b21 --- /dev/null +++ b/server/SpawnScripts/Commonlands/akerranrogue.lua @@ -0,0 +1,22 @@ +--[[ + Script Name : SpawnScripts/Commonlands/akerranrogue.lua + Script Author : gloat + Script Date : 2019.01.31 02:01:38 + Script Purpose : + : +--]] + +require "SpawnScripts/Generic/MovementCircleSmall" +function spawn(NPC) + SpawnChooseRandomMovement(NPC) + +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) +end + +function respawn(NPC) + +end + diff --git a/server/SpawnScripts/Commonlands/akerranvagrant.lua b/server/SpawnScripts/Commonlands/akerranvagrant.lua new file mode 100644 index 000000000..b6df08943 --- /dev/null +++ b/server/SpawnScripts/Commonlands/akerranvagrant.lua @@ -0,0 +1,22 @@ +--[[ + Script Name : SpawnScripts/Commonlands/akerranvagrant.lua + Script Author : gloat + Script Date : 2019.01.31 02:01:36 + Script Purpose : + : +--]] + +require "SpawnScripts/Generic/MovementCircleSmall" +function spawn(NPC) + SpawnChooseRandomMovement(NPC) + +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) +end + +function respawn(NPC) + +end + diff --git a/server/SpawnScripts/Commonlands/alostsoul.lua b/server/SpawnScripts/Commonlands/alostsoul.lua new file mode 100644 index 000000000..abb86d6c8 --- /dev/null +++ b/server/SpawnScripts/Commonlands/alostsoul.lua @@ -0,0 +1,20 @@ +--[[ + Script Name : SpawnScripts/Commonlands/alostsoul.lua + Script Author : gloat + Script Date : 2019.01.31 12:01:47 + Script Purpose : + : +--]] +require "SpawnScripts/Generic/MovementCircleSmall" +function spawn(NPC) + SpawnChooseRandomMovement(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) +end + +function respawn(NPC) + +end + diff --git a/server/SpawnScripts/Commonlands/amarrowsapper.lua b/server/SpawnScripts/Commonlands/amarrowsapper.lua new file mode 100644 index 000000000..c68affa83 --- /dev/null +++ b/server/SpawnScripts/Commonlands/amarrowsapper.lua @@ -0,0 +1,22 @@ +--[[ + Script Name : SpawnScripts/Commonlands/amarrowsapper.lua + Script Author : gloat + Script Date : 2019.01.31 02:01:35 + Script Purpose : + : +--]] + +require "SpawnScripts/Generic/MovementCircleSmall" +function spawn(NPC) + SpawnChooseRandomMovement(NPC) + +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) +end + +function respawn(NPC) + +end + diff --git a/server/SpawnScripts/Commonlands/amassiveemeraldbeetle.lua b/server/SpawnScripts/Commonlands/amassiveemeraldbeetle.lua new file mode 100644 index 000000000..83d732526 --- /dev/null +++ b/server/SpawnScripts/Commonlands/amassiveemeraldbeetle.lua @@ -0,0 +1,20 @@ +--[[ + Script Name : SpawnScripts/Commonlands/amassiveemeraldbeetle.lua + Script Author : gloat + Script Date : 2019.01.31 12:01:10 + Script Purpose : + : +--]] +require "SpawnScripts/Generic/MovementCircleSmall" +function spawn(NPC) + SpawnChooseRandomMovement(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) +end + +function respawn(NPC) + +end + diff --git a/server/SpawnScripts/Commonlands/amereguardian.lua b/server/SpawnScripts/Commonlands/amereguardian.lua new file mode 100644 index 000000000..092351226 --- /dev/null +++ b/server/SpawnScripts/Commonlands/amereguardian.lua @@ -0,0 +1,22 @@ +--[[ + Script Name : SpawnScripts/Commonlands/amereguardian.lua + Script Author : gloat + Script Date : 2019.01.31 02:01:26 + Script Purpose : + : +--]] + +require "SpawnScripts/Generic/MovementCircleSmall" +function spawn(NPC) + SpawnChooseRandomMovement(NPC) + +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) +end + +function respawn(NPC) + +end + diff --git a/server/SpawnScripts/Commonlands/amoltingscorpion.lua b/server/SpawnScripts/Commonlands/amoltingscorpion.lua new file mode 100644 index 000000000..023502448 --- /dev/null +++ b/server/SpawnScripts/Commonlands/amoltingscorpion.lua @@ -0,0 +1,20 @@ +--[[ + Script Name : SpawnScripts/Commonlands/amoltingscorpion.lua + Script Author : gloat + Script Date : 2019.01.31 12:01:40 + Script Purpose : + : +--]] +require "SpawnScripts/Generic/MovementCircleSmall" +function spawn(NPC) + SpawnChooseRandomMovement(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) +end + +function respawn(NPC) + +end + diff --git a/server/SpawnScripts/Commonlands/amonitorbehemoth.lua b/server/SpawnScripts/Commonlands/amonitorbehemoth.lua new file mode 100644 index 000000000..2dfbfd955 --- /dev/null +++ b/server/SpawnScripts/Commonlands/amonitorbehemoth.lua @@ -0,0 +1,20 @@ +--[[ + Script Name : SpawnScripts/Commonlands/amonitorbehemoth.lua + Script Author : gloat + Script Date : 2019.01.31 01:01:52 + Script Purpose : + : +--]] +require "SpawnScripts/Generic/MovementCircleSmall" +function spawn(NPC) + SpawnChooseRandomMovement(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) +end + +function respawn(NPC) + +end + diff --git a/server/SpawnScripts/Commonlands/amonitorlizard.lua b/server/SpawnScripts/Commonlands/amonitorlizard.lua new file mode 100644 index 000000000..cd3b08d47 --- /dev/null +++ b/server/SpawnScripts/Commonlands/amonitorlizard.lua @@ -0,0 +1,20 @@ +--[[ + Script Name : SpawnScripts/Commonlands/amonitorlizard.lua + Script Author : gloat + Script Date : 2019.01.31 01:01:26 + Script Purpose : + : +--]] +require "SpawnScripts/Generic/MovementCircleSmall" +function spawn(NPC) + SpawnChooseRandomMovement(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) +end + +function respawn(NPC) + +end + diff --git a/server/SpawnScripts/Commonlands/anearthenrumbler.lua b/server/SpawnScripts/Commonlands/anearthenrumbler.lua new file mode 100644 index 000000000..5002372b2 --- /dev/null +++ b/server/SpawnScripts/Commonlands/anearthenrumbler.lua @@ -0,0 +1,20 @@ +--[[ + Script Name : SpawnScripts/Commonlands/anearthenrumbler.lua + Script Author : gloat + Script Date : 2019.01.31 01:01:38 + Script Purpose : + : +--]] +require "SpawnScripts/Generic/MovementCircleSmall" +function spawn(NPC) + SpawnChooseRandomMovement(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) +end + +function respawn(NPC) + +end + diff --git a/server/SpawnScripts/Commonlands/anearthentumbler.lua b/server/SpawnScripts/Commonlands/anearthentumbler.lua new file mode 100644 index 000000000..7ee1591ed --- /dev/null +++ b/server/SpawnScripts/Commonlands/anearthentumbler.lua @@ -0,0 +1,20 @@ +--[[ + Script Name : SpawnScripts/Commonlands/anearthentumbler.lua + Script Author : gloat + Script Date : 2019.01.31 01:01:19 + Script Purpose : + : +--]] +require "SpawnScripts/Generic/MovementCircleSmall" +function spawn(NPC) + SpawnChooseRandomMovement(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) +end + +function respawn(NPC) + +end + diff --git a/server/SpawnScripts/Commonlands/anelephant.lua b/server/SpawnScripts/Commonlands/anelephant.lua new file mode 100644 index 000000000..90a934268 --- /dev/null +++ b/server/SpawnScripts/Commonlands/anelephant.lua @@ -0,0 +1,20 @@ +--[[ + Script Name : SpawnScripts/Commonlands/anelephant.lua + Script Author : gloat + Script Date : 2019.01.31 01:01:04 + Script Purpose : + : +--]] +require "SpawnScripts/Generic/MovementCircleSmall" +function spawn(NPC) + SpawnChooseRandomMovement(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) +end + +function respawn(NPC) + +end + diff --git a/server/SpawnScripts/Commonlands/anelephantcalf.lua b/server/SpawnScripts/Commonlands/anelephantcalf.lua new file mode 100644 index 000000000..e971445ad --- /dev/null +++ b/server/SpawnScripts/Commonlands/anelephantcalf.lua @@ -0,0 +1,20 @@ +--[[ + Script Name : SpawnScripts/Commonlands/anelephantcalf.lua + Script Author : gloat + Script Date : 2019.01.31 01:01:42 + Script Purpose : + : +--]] +require "SpawnScripts/Generic/MovementCircleSmall" +function spawn(NPC) + SpawnChooseRandomMovement(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) +end + +function respawn(NPC) + +end + diff --git a/server/SpawnScripts/Commonlands/anorcrunner.lua b/server/SpawnScripts/Commonlands/anorcrunner.lua new file mode 100644 index 000000000..0ae9a876f --- /dev/null +++ b/server/SpawnScripts/Commonlands/anorcrunner.lua @@ -0,0 +1,20 @@ +--[[ + Script Name : SpawnScripts/Commonlands/anorcrunner.lua + Script Author : gloat + Script Date : 2019.01.31 01:01:27 + Script Purpose : + : +--]] +require "SpawnScripts/Generic/MovementCircleSmall" +function spawn(NPC) + SpawnChooseRandomMovement(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) +end + +function respawn(NPC) + +end + diff --git a/server/SpawnScripts/Commonlands/ascourgerat.lua b/server/SpawnScripts/Commonlands/ascourgerat.lua new file mode 100644 index 000000000..198acce65 --- /dev/null +++ b/server/SpawnScripts/Commonlands/ascourgerat.lua @@ -0,0 +1,20 @@ +--[[ + Script Name : SpawnScripts/Commonlands/ascourgerat.lua + Script Author : gloat + Script Date : 2019.01.31 01:01:35 + Script Purpose : + : +--]] +require "SpawnScripts/Generic/MovementCircleSmall" +function spawn(NPC) + SpawnChooseRandomMovement(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) +end + +function respawn(NPC) + +end + diff --git a/server/SpawnScripts/Commonlands/ascrubrat.lua b/server/SpawnScripts/Commonlands/ascrubrat.lua new file mode 100644 index 000000000..1ea2fd121 --- /dev/null +++ b/server/SpawnScripts/Commonlands/ascrubrat.lua @@ -0,0 +1,20 @@ +--[[ + Script Name : SpawnScripts/Commonlands/ascrubrat.lua + Script Author : gloat + Script Date : 2019.01.31 01:01:15 + Script Purpose : + : +--]] +require "SpawnScripts/Generic/MovementCircleSmall" +function spawn(NPC) + SpawnChooseRandomMovement(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) +end + +function respawn(NPC) + +end + diff --git a/server/SpawnScripts/Commonlands/asmallemeraldbeetle.lua b/server/SpawnScripts/Commonlands/asmallemeraldbeetle.lua new file mode 100644 index 000000000..7477be424 --- /dev/null +++ b/server/SpawnScripts/Commonlands/asmallemeraldbeetle.lua @@ -0,0 +1,20 @@ +--[[ + Script Name : SpawnScripts/Commonlands/asmallemeraldbeetle.lua + Script Author : gloat + Script Date : 2019.01.31 12:01:19 + Script Purpose : + : +--]] +require "SpawnScripts/Generic/MovementCircleSmall" +function spawn(NPC) + SpawnChooseRandomMovement(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) +end + +function respawn(NPC) + +end + diff --git a/server/SpawnScripts/Commonlands/aspeckledrattler.lua b/server/SpawnScripts/Commonlands/aspeckledrattler.lua new file mode 100644 index 000000000..86db3ba70 --- /dev/null +++ b/server/SpawnScripts/Commonlands/aspeckledrattler.lua @@ -0,0 +1,20 @@ +--[[ + Script Name : SpawnScripts/Commonlands/aspeckledrattler.lua + Script Author : gloat + Script Date : 2019.01.31 12:01:48 + Script Purpose : + : +--]] +require "SpawnScripts/Generic/MovementCircleSmall" +function spawn(NPC) + SpawnChooseRandomMovement(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) +end + +function respawn(NPC) + +end + diff --git a/server/SpawnScripts/Commonlands/aspectraldefender.lua b/server/SpawnScripts/Commonlands/aspectraldefender.lua new file mode 100644 index 000000000..ee1ed369d --- /dev/null +++ b/server/SpawnScripts/Commonlands/aspectraldefender.lua @@ -0,0 +1,27 @@ +--[[ + Script Name : SpawnScripts/Commonlands/aspectraldefender.lua + Script Author : gloat + Script Date : 2019.01.30 09:01:15 + Script Purpose : + : +--]] + +require "SpawnScripts/Generic/MovementCircleSmall" + +function spawn(NPC) + SpawnChooseRandomMovement(NPC) + --[[if GetSpawnLocationID(NPC) == 272418 then + MovementLoopAddLocation(NPC, -1302.65, -73.65, -218.35, 2, math.random(3,4)) + MovementLoopAddLocation(NPC, -1285.33, -73.75, -221.20, 2, math.random(1,7)) + MovementLoopAddLocation(NPC, -1302.65, -73.65, -218.35, 2, math.random(3,4)) + end]] +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) +end + +function respawn(NPC) + +end + diff --git a/server/SpawnScripts/Commonlands/ayoungvulrich.lua b/server/SpawnScripts/Commonlands/ayoungvulrich.lua new file mode 100644 index 000000000..89647b4d4 --- /dev/null +++ b/server/SpawnScripts/Commonlands/ayoungvulrich.lua @@ -0,0 +1,20 @@ +--[[ + Script Name : SpawnScripts/Commonlands/ayoungvulrich.lua + Script Author : gloat + Script Date : 2019.01.31 12:01:17 + Script Purpose : + : +--]] +require "SpawnScripts/Generic/MovementCircleSmall" +function spawn(NPC) + SpawnChooseRandomMovement(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) +end + +function respawn(NPC) + +end + diff --git a/server/SpawnScripts/Commonlands/darkseepage.lua b/server/SpawnScripts/Commonlands/darkseepage.lua new file mode 100644 index 000000000..5a4998511 --- /dev/null +++ b/server/SpawnScripts/Commonlands/darkseepage.lua @@ -0,0 +1,20 @@ +--[[ + Script Name : SpawnScripts/Commonlands/darkseepage.lua + Script Author : gloat + Script Date : 2019.01.31 01:01:40 + Script Purpose : + : +--]] +require "SpawnScripts/Generic/MovementCircleSmall" +function spawn(NPC) + SpawnChooseRandomMovement(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) +end + +function respawn(NPC) + +end + diff --git a/server/SpawnScripts/CrustaceanCave/Bonesnapper.lua b/server/SpawnScripts/CrustaceanCave/Bonesnapper.lua new file mode 100644 index 000000000..7766e10d8 --- /dev/null +++ b/server/SpawnScripts/CrustaceanCave/Bonesnapper.lua @@ -0,0 +1,56 @@ +--[[ + Script Name : SpawnScripts/CrustaceanCave/Bonesnapper.lua + Script Author : jakejp + Script Date : 2018.12.26 08:12:17 + Script Purpose : Creating a simple raid for testing purposes + : +--]] + +function spawn(NPC) + +end + +function hailed(NPC, Spawn) +end + +function respawn(NPC) + +end + +function casted_on(Target, Caster, SpellName) + local zone = GetZone(Caster) + local disturbed = 0 + if SpellName == "Disturb Crab" and disturbed == 0 then + disturbed = 1 + SpawnSet(Target, "targetable", 1) + SpawnSet(Target, "attackable", 1) + SpawnSet(Target, "show_level", 1) + SpawnSet(Target, "faction", 1) + SpawnSet(Target, "command_primary", 11) + Attack(Target, Caster) + SpawnByLocationID(zone, 378748) + end +end + +function death(NPC, Spawn) + SpawnSet(Target, "targetable", 1) + SpawnSet(Target, "attackable", 0) + SpawnSet(Target, "show_level", 0) + SpawnSet(Target, "faction", 0) +end + +function aggro(NPC, Spawn) + +end + +function healthchanged(NPC, Spawn) + local zone = GetZone(Spawn) + local addSpawned = 0 + local health_percent = GetHP(NPC) / GetMaxHP(NPC) + + if health_percent <= 10 and addSpawned == 0 then + addSpawned = 1 + ClearHate(NPC) + SpawnByLocationID(zone, 378748) + end +end \ No newline at end of file diff --git a/server/SpawnScripts/DarkBargainers/SasitSoroth.lua b/server/SpawnScripts/DarkBargainers/SasitSoroth.lua new file mode 100644 index 000000000..6380d5a5c --- /dev/null +++ b/server/SpawnScripts/DarkBargainers/SasitSoroth.lua @@ -0,0 +1,281 @@ +--[[ + Script Name : SpawnScripts/DarkBargainers/SasitSoroth.lua + Script Purpose : Sasit Soroth + Script Author : jakejp + Script Date : 2018.12.30 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "Tradeskill level.", "TradeskillLevel") + AddConversationOption(conversation, "Tradeskill class.", "TradeskillClass") + StartConversation(conversation, NPC, Spawn, "What do you want to change") +end + +function TradeskillLevel(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + AddConversationOption(conversation, "10", "SetTSLevel10") + AddConversationOption(conversation, "20", "SetTSLevel20") + AddConversationOption(conversation, "30", "SetTSLevel30") + AddConversationOption(conversation, "40", "SetTSLevel40") + AddConversationOption(conversation, "50", "SetTSLevel50") + AddConversationOption(conversation, "60", "SetTSLevel60") + AddConversationOption(conversation, "70", "SetTSLevel70") + AddConversationOption(conversation, "80", "SetTSLevel80") + AddConversationOption(conversation, "90", "SetTSLevel90") + AddConversationOption(conversation, "100", "SetTSLevel100") + AddConversationOption(conversation, "Nevermind") + StartConversation(conversation, NPC, Spawn, "What tradeskill level do you want to be?") +end + +function TradeskillClass(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "Artisan", "SetArtisan") + AddConversationOption(conversation, "Craftsman", "SetCraftsman") + AddConversationOption(conversation, "Provisioner", "SetProvisioner") + AddConversationOption(conversation, "Woodworker", "SetWoodworker") + AddConversationOption(conversation, "Carpenter", "SetCarpenter") + AddConversationOption(conversation, "Outfitter", "SetOutfitter") + AddConversationOption(conversation, "Armorer", "SetArmorer") + AddConversationOption(conversation, "Weaponsmith", "SetWeaponsmith") + AddConversationOption(conversation, "Tailor", "SetTailor") + AddConversationOption(conversation, "Scholar", "SetScholar") + AddConversationOption(conversation, "Jeweler", "SetJeweler") + AddConversationOption(conversation, "Sage", "SetSage") + AddConversationOption(conversation, "Alchemist", "SetAlchemist") + AddConversationOption(conversation, "Nevermind") + StartConversation(conversation, NPC, Spawn, "What class do you want to be?") +end + +function SetArtisan(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + AddConversationOption(conversation, "Thanks.") + StartConversation(conversation, NPC, Spawn, "Your wish is my command.") + SetTradeskillClass(Spawn, 1) +end + +function SetCraftsman(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + AddConversationOption(conversation, "Thanks.") + StartConversation(conversation, NPC, Spawn, "Your wish is my command.") + SetTradeskillClass(Spawn, 2) +end + +function SetProvisioner(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + AddConversationOption(conversation, "Thanks.") + StartConversation(conversation, NPC, Spawn, "Your wish is my command.") + SetTradeskillClass(Spawn, 3) +end + +function SetWoodworker(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + AddConversationOption(conversation, "Thanks.") + StartConversation(conversation, NPC, Spawn, "Your wish is my command.") + SetTradeskillClass(Spawn, 4) +end + +function SetCarpenter(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + AddConversationOption(conversation, "Thanks.") + StartConversation(conversation, NPC, Spawn, "Your wish is my command.") + SetTradeskillClass(Spawn, 5) +end + +function SetOutfitter(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + AddConversationOption(conversation, "Thanks.") + StartConversation(conversation, NPC, Spawn, "Your wish is my command.") + SetTradeskillClass(Spawn, 6) +end + +function SetArmorer(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + AddConversationOption(conversation, "Thanks.") + StartConversation(conversation, NPC, Spawn, "Your wish is my command.") + SetTradeskillClass(Spawn, 7) +end + +function SetWeaponsmith(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + AddConversationOption(conversation, "Thanks.") + StartConversation(conversation, NPC, Spawn, "Your wish is my command.") + SetTradeskillClass(Spawn, 8) +end + +function SetTailor(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + AddConversationOption(conversation, "Thanks.") + StartConversation(conversation, NPC, Spawn, "Your wish is my command.") + SetTradeskillClass(Spawn, 9) +end + +function SetScholar(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + AddConversationOption(conversation, "Thanks.") + StartConversation(conversation, NPC, Spawn, "Your wish is my command.") + SetTradeskillClass(Spawn, 10) +end + +function SetJeweler(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + AddConversationOption(conversation, "Thanks.") + StartConversation(conversation, NPC, Spawn, "Your wish is my command.") + SetTradeskillClass(Spawn, 11) +end + +function SetSage(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + AddConversationOption(conversation, "Thanks.") + StartConversation(conversation, NPC, Spawn, "Your wish is my command.") + SetTradeskillClass(Spawn, 12) +end + +function SetAlchemist(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + AddConversationOption(conversation, "Thanks.") + StartConversation(conversation, NPC, Spawn, "Your wish is my command.") + SetTradeskillClass(Spawn, 13) +end + +function SetTSLevel10(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + AddConversationOption(conversation, "Thanks.") + StartConversation(conversation, NPC, Spawn, "Your wish is my command.") + SetTradeskillLevel(Spawn, 10) +end + +function SetTSLevel20(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + AddConversationOption(conversation, "Thanks.") + StartConversation(conversation, NPC, Spawn, "Your wish is my command.") + SetTradeskillLevel(Spawn, 20) +end + +function SetTSLevel30(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + AddConversationOption(conversation, "Thanks.") + StartConversation(conversation, NPC, Spawn, "Your wish is my command.") + SetTradeskillLevel(Spawn, 30) +end + +function SetTSLevel40(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + AddConversationOption(conversation, "Thanks.") + StartConversation(conversation, NPC, Spawn, "Your wish is my command.") + SetTradeskillLevel(Spawn, 40) +end + +function SetTSLevel50(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + AddConversationOption(conversation, "Thanks.") + StartConversation(conversation, NPC, Spawn, "Your wish is my command.") + SetTradeskillLevel(Spawn, 50) +end + +function SetTSLevel60(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + AddConversationOption(conversation, "Thanks.") + StartConversation(conversation, NPC, Spawn, "Your wish is my command.") + SetTradeskillLevel(Spawn, 60) +end + +function SetTSLevel70(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + AddConversationOption(conversation, "Thanks.") + StartConversation(conversation, NPC, Spawn, "Your wish is my command.") + SetTradeskillLevel(Spawn, 70) +end + +function SetTSLevel80(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + AddConversationOption(conversation, "Thanks.") + StartConversation(conversation, NPC, Spawn, "Your wish is my command.") + SetTradeskillLevel(Spawn, 80) +end + +function SetTSLevel90(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + AddConversationOption(conversation, "Thanks.") + StartConversation(conversation, NPC, Spawn, "Your wish is my command.") + SetTradeskillLevel(Spawn, 90) +end + +function SetTSLevel100(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + AddConversationOption(conversation, "Thanks.") + StartConversation(conversation, NPC, Spawn, "Your wish is my command.") + SetTradeskillLevel(Spawn, 100) +end + +function MaxForesting(NPC, Spawn) + FaceTarget(NPC, Spawn) + + AddConversationOption(conversation, "Thanks") + StartConversation(conversation, NPC, Spawn, "Done.") +end + +function MaxGathering(NPC, Spawn) + local skill = GetSkill(Spawn, "Gathering") + if skill ~= nil then + SetSkillMaxValue(skill, 300) + SetSkillValue(skill, 300) + end +end + +function MaxFishing(NPC, Spawn) + local skill = GetSkill(Spawn, "Fishing") + if skill ~= nil then + SetSkillValue(skill, 300) + end +end + +function MaxMining(NPC, Spawn) + local skill = GetSkill(Spawn, "Mining") + if skill ~= nil then + SetSkillValue(skill, 300) + end +end + +function MaxTrapping(NPC, Spawn) + local skill = GetSkill(Spawn, "Trapping") + if skill ~= nil then + SetSkillValue(skill, 300) + end +end + +function MaxForesting(NPC, Spawn) + local skill = GetSkill(Spawn, "Foresting") + if skill ~= nil then + SetSkillValue(skill, 300) + end +end \ No newline at end of file diff --git a/server/SpawnScripts/Darklight/Aunthrae.lua b/server/SpawnScripts/Darklight/Aunthrae.lua new file mode 100644 index 000000000..1103e9f1a --- /dev/null +++ b/server/SpawnScripts/Darklight/Aunthrae.lua @@ -0,0 +1,65 @@ +--[[ + Script Name : SpawnScripts/DarklightWood/Aunthrae.lua + Script Purpose : Aunthrae + Script Author : fearfx + Script Date : 2017.01.23 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +local HopefulNetReturns = 160 +local WhatsInDemand = 142 + +function spawn(NPC) + ProvidesQuest(NPC, HopefulNetReturns) +end + +function respawn(NPC) + spawn(NPC) +end + +function InRange(NPC, Spawn) +end + +function LeaveRange(NPC, Spawn) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + if not HasQuest(Spawn, HopefulNetReturns) and not HasCompletedQuest(Spawn, HopefulNetReturns) and HasCompletedQuest(Spawn, WhatsInDemand) then + PlayFlavor(NPC, "aunthrae/darklight_wood/tvatar_post/aunthrae_revamp/aunthrae001.mp3", "", "", 715895592, 1731061060, Spawn) + AddConversationOption(conversation, "Perhaps.", "Quest_HopefulNetReturns") + AddConversationOption(conversation, "Not at this time.") + StartConversation(conversation, NPC, Spawn, "Stay a moment and hear me out, Villii. I see you helping my master. Perhaps you'd be willing to help me!") + end +end + +function Quest_HopefulNetReturns(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "What can we do?", "Quest_HopefulNetReturns_01") + StartConversation(conversation, NPC, Spawn, "Supplies are becoming harder and harder to come by here at the outpost. If Hate's Envy doesn't get their act together and send us more supplies soon, I fear we might face mass desertion, or worse, revolt!") +end + +function Quest_HopefulNetReturns_01(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "Yes, what's her name?", "Quest_HopefulNetReturns_02") + AddConversationOption(conversation, "Sorry, I can't help right now.") + StartConversation(conversation, NPC, Spawn, "Foodstuffs and rations are probably the most important thing we need at the moment. Ilmtar dispatched someone to see whether or not she could catch us fish from the Lower Tendril, however she has yet to report back. Would you go look for her?") +end + +function Quest_HopefulNetReturns_02(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "I will find her.", "QuestOffer_HopefulNetReturns") + StartConversation(conversation, NPC, Spawn, "Great. Her name is Dirzdia T'Zauvirr. As I said, she was sent to the Searing Tendril River, southwest from T'Vatar Oupost. Find her and give her this net I managed to scrounge up. Hopefully it will help her catch us some food.") +end + +function QuestOffer_HopefulNetReturns(NPC, Spawn) + OfferQuest(NPC, Spawn, HopefulNetReturns) +end \ No newline at end of file diff --git a/server/SpawnScripts/Darklight/CalnozzJMelvirr.lua b/server/SpawnScripts/Darklight/CalnozzJMelvirr.lua new file mode 100644 index 000000000..f0d347ad7 --- /dev/null +++ b/server/SpawnScripts/Darklight/CalnozzJMelvirr.lua @@ -0,0 +1,727 @@ +--[[ + Script Name : SpawnScripts/Darklight/CalnozzJMelvirr.lua + Script Purpose : Calnozz J'Melvirr + Script Author : John Adams + Script Date : 2009.01.31 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +require "SpawnScripts/Generic/DialogModule" + +local DrawUponWellsprings = 155 +local StunningRevelation = 156 +local InfantileIngredients = 157 +local DustToDust = 158 +local RichFishFlesh = 191 + +function spawn(NPC) + ProvidesQuest(NPC, DrawUponWellsprings) + ProvidesQuest(NPC, StunningRevelation) + ProvidesQuest(NPC, InfantileIngredients) +end + +function respawn(NPC) + spawn(NPC) +end + +function InRange(NPC, Spawn) +end + +function LeaveRange(NPC, Spawn) +end + +--[[ +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + if not HasQuest(Spawn, DrawUponWellsprings) and not HasCompletedQuest(Spawn, DrawUponWellsprings) and GetQuestStep(Spawn, DrawUponWellsprings) < 1 then + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_1_1048.mp3", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "You heard the guards speaking of me?", "Quest_DrawUponWellsprings_01A") + AddConversationOption(conversation, "I am good.", "Quest_DrawUponWellsprings_01B") + StartConversation(conversation, NPC, Spawn, "" .. GetName(Spawn) .. "? I've heard the guards speaking of you. They have been quite impressed by your feats.") + elseif HasQuest(Spawn, DrawUponWellsprings) and not HasCompletedQuest(Spawn, DrawUponWellsprings) then + PlayFlavor(NPC, "voiceover/english/neriak/calnozz_j_melvirr/darklight_wood/tvatar_post/calnozz/calnozz008.mp3", "", "", 1789620757, 3499917810, Spawn) + if GetQuestStep(Spawn, DrawUponWellsprings) == 1 and GetTempVariable(Spawn, "cub") ~= nil then + AddConversationOption(conversation, "I have a bear cub.", "Quest_DrawUponWellsprings_05") + AddConversationOption(conversation, "All right.") + elseif GetQuestStepProgress(Spawn, 155, 1) == 3 then + SetStepComplete(Spawn, DrawUponWellsprings, 2) + else + --Say(NPC, "You are current progress on step one is " .. GetQuestStepProgress(Spawn, 155, 1)) + AddConversationOption(conversation, "All right.") + end + StartConversation(conversation, NPC, Spawn, "Bring me the cubs and then we'll talk about payment.") + elseif HasCompletedQuest(Spawn, DrawUponWellsprings) and not HasQuest(Spawn, StunningRevelation) and not HasCompletedQuest(Spawn, StunningRevelation) then + PlayFlavor(NPC, "voiceover/english/neriak/calnozz_j_melvirr/darklight_wood/tvatar_post/calnozz/calnozz008_progress.mp3", "", "", 1983465757, 3955037985, Spawn) + AddConversationOption(conversation, "Yes.", "Quest_StunningRevelation") + StartConversation(conversation, NPC, Spawn, "Was that all three?") + elseif HasQuest(Spawn, StunningRevelation) and GetQuestStep(Spawn, StunningRevelation) == 2 then + AddConversationOption(conversation, "I have the mushroom caps here.", "Quest_StunningRevelation_04") + StartConversation(conversation, NPC, Spawn, "Did you collect them?") + elseif HasCompletedQuest(Spawn, StunningRevelation) and not HasQuest(Spawn, InfantileIngredients) and not HasCompletedQuest(Spawn, InfantileIngredients) then + AddConversationOption(conversation, "I have the mushroom caps here.", "Quest_InfantileIngredients") + StartConversation(conversation, NPC, Spawn, "Did you collect them?") + elseif HasQuest(Spawn, InfantileIngredients) and not HasCompletedQuest(Spawn, InfantileIngredients) then + if GetQuestStep(Spawn, InfantileIngredients) == 2 then + AddConversationOption(conversation, "Yes, I have them here.", "Quest_DustToDust") + + while HasItem(Spawn, 4080, 1) do + RemoveItem(Spawn, 4080) + end + else + AddConversationOption(conversation, "Not Yet") + end + StartConversation(conversation, NPC, Spawn, "Did you collect them?") + elseif HasCompletedQuest(Spawn, InfantileIngredients) and not HasQuest(Spawn, DustToDust) and not HasCompletedQuest(Spawn, DustToDust) then + AddConversationOption(conversation, "Yes, I have them here.", "Quest_DustToDust") + StartConversation(conversation, NPC, Spawn, "Did you collect them?") + elseif HasQuest(Spawn, DustToDust) and not HasCompletedQuest(Spawn, DustToDust) then + + if GetQuestStep(Spawn, DustToDust) == 2 then + AddConversationOption(conversation, "The dust successfully stunned them, but only for a short duration.", "Quest_DustToDust_03") + else + AddConversationOption(conversation, "I'm still conducting the test.") + end + StartConversation(conversation, NPC, Spawn, "How did the test go?") + elseif HasQuest(Spawn, RichFishFlesh) then + AddConversationOption(conversation, "I have some flesh from Smolderfin and thought you might be interested.", "Quest_RichFishFlesh") + StartConversation(conversation, NPC, Spawn, "Can I help you?") + else + StartConversation(conversation, NPC, Spawn, "Hello again. Should you find your business here at the outpost concluded, I'd encourage you to travel west and seek out Wanderlust Fair. Many an odd character reside there, many more could use the help of someone like you. The Queen smiles upon you, young one. Good day.") + end +end +]] + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + + Dialog.New(NPC, Spawn) + + Dialog.AddDialog("" .. GetName(Spawn) .. "? I've heard the guards speaking of you. They have been quite impressed by your feats.") + Dialog.AddVoiceover("voiceover/english/voice_emotes/greetings/greetings_1_1048.mp3", 0, 0) + Dialog.AddRequirement(REQ_QUEST_DOESNT_HAVE_QUEST, DrawUponWellsprings) + Dialog.AddRequirement(REQ_QUEST_NOT_HAS_COMPLETED_QUEST, DrawUponWellsprings) + Dialog.AddOption("You heard the guards speaking of me?", "Quest_DrawUponWellsprings_01A") + Dialog.AddOption("I am good.", "Quest_DrawUponWellsprings_01B") + + Dialog.AddDialog("Bring me the cubs and then we'll talk about payment.") + Dialog.AddVoiceover("voiceover/english/neriak/calnozz_j_melvirr/darklight_wood/tvatar_post/calnozz/calnozz008.mp3", 1789620757, 3499917810) + Dialog.AddRequirement(REQ_QUEST_HAS_QUEST, DrawUponWellsprings) + Dialog.AddRequirement(REQ_QUEST_NOT_HAS_COMPLETED_QUEST, DrawUponWellsprings) + Dialog.AddOption("I have a bear cub.", "Quest_DrawUponWellsprings_05") + Dialog.AddOptionRequirement(REQ_QUEST_ON_STEP, DrawUponWellsprings, 1) + Dialog.AddOptionRequirement(REQ_TEMP_VAR_NOT_SET, "cub", nil) + Dialog.AddOption("All right.") + + if GetQuestStepProgress(Spawn, DrawUponWellsprings, 1) == 3 then + SetStepComplete(Spawn, DrawUponWellsprings, 2) + end + + Dialog.AddDialog("Was that all three?") + Dialog.AddVoiceover("voiceover/english/neriak/calnozz_j_melvirr/darklight_wood/tvatar_post/calnozz/calnozz008_progress.mp3", 1983465757, 3955037985) + Dialog.AddRequirement(REQ_QUEST_HAS_COMPLETED_QUEST, DrawUponWellsprings) + Dialog.AddRequirement(REQ_QUEST_DOESNT_HAVE_QUEST, StunningRevelation) + Dialog.AddRequirement(REQ_QUEST_NOT_HAS_COMPLETED_QUEST, StunningRevelation) + Dialog.AddOption("Yes.", "Quest_StunningRevelation") + + Dialog.AddDialog("Did you collect them?") + Dialog.AddRequirement(REQ_QUEST_HAS_QUEST, StunningRevelation) + Dialog.AddRequirement(REQ_QUEST_ON_STEP, StunningRevelation, 2) + Dialog.AddOption("I have the mushroom caps here.", "Quest_StunningRevelation_04") + + Dialog.AddDialog("Did you collect them?") + Dialog.AddRequirement(REQ_QUEST_HAS_COMPLETED_QUEST, StunningRevelation) + Dialog.AddRequirement(REQ_QUEST_DOESNT_HAVE_QUEST, InfantileIngredients) + Dialog.AddRequirement(REQ_QUEST_NOT_HAS_COMPLETED_QUEST, InfantileIngredients) + Dialog.AddOption("I have the mushroom caps here.", "Quest_InfantileIngredients") + + Dialog.AddDialog("Did you collect them?") + Dialog.AddRequirement(REQ_QUEST_HAS_QUEST, InfantileIngredients) + Dialog.AddRequirement(REQ_QUEST_NOT_HAS_COMPLETED_QUEST, InfantileIngredients) + Dialog.AddOption("Yes, I have them here.", "Quest_DustToDust") + Dialog.AddOptionRequirement(REQ_QUEST_ON_STEP, InfantileIngredients, 2) + Dialog.AddOption("Not Yet") + Dialog.AddOptionRequirement(REQ_QUEST_NOT_ON_STEP, InfantileIngredients, 2) + + if GetQuestStep(Spawn, InfantileIngredients) == 2 then + while HasItem(Spawn, 4080, 1) do + RemoveItem(Spawn, 4080) + end + end + + Dialog.AddDialog("Did you collect them?") + Dialog.AddRequirement(REQ_QUEST_HAS_COMPLETED_QUEST, InfantileIngredients) + Dialog.AddRequirement(REQ_QUEST_DOESNT_HAVE_QUEST, DustToDust) + Dialog.AddRequirement(REQ_QUEST_NOT_HAS_COMPLETED_QUEST, DustToDust) + Dialog.AddOption("Yes, I have them here.", "Quest_DustToDust") + + Dialog.AddDialog("How did the test go?") + Dialog.AddRequirement(REQ_QUEST_HAS_QUEST, DustToDust) + Dialog.AddRequirement(REQ_QUEST_NOT_HAS_COMPLETED_QUEST, DustToDust) + Dialog.AddOption("The dust successfully stunned them, but only for a short duration.", "Quest_DustToDust_03") + Dialog.AddOptionRequirement(REQ_QUEST_ON_STEP, DustToDust, 2) + Dialog.AddOption("I'm still conducting the test.") + Dialog.AddOptionRequirement(REQ_QUEST_NOT_ON_STEP, DustToDust, 2) + + Dialog.AddDialog("Can I help you?") + Dialog.AddRequirement(REQ_QUEST_HAS_QUEST, RichFishFlesh) + Dialog.AddOption("I have some flesh from Smolderfin and thought you might be interested.", "Quest_RichFishFlesh") + + Dialog.AddDialog("Hello again. Should you find your business here at the outpost concluded, I'd encourage you to travel west and seek out Wanderlust Fair. Many an odd character reside there, many more could use the help of someone like you. The Queen smiles upon you, young one. Good day.") + + Dialog.Start() +end + +-------------------------------------------------------------------------------------- +-- To Draw Upon Wellsprings +-------------------------------------------------------------------------------------- + +function Quest_DrawUponWellsprings_01A(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "Throw in some coin and we have a deal.", "Quest_DrawUponWellsprings_02") + AddConversationOption(conversation, "I would like to hear more.", "Quest_DrawUponWellsprings_02") + StartConversation(conversation, NPC, Spawn, "Indeed I have, and it impressed me as well. Such skills could be put to work around here.") +end + +function Quest_DrawUponWellsprings_01B(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "Throw in some coin and we have a deal.", "Quest_DrawUponWellsprings_02") + AddConversationOption(conversation, "I would like to hear more.", "Quest_DrawUponWellsprings_02") + StartConversation(conversation, NPC, Spawn, "I hold no doubt of that. Such skills could be put to work around here.") +end + +function Quest_DrawUponWellsprings_02(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "agree", 0, 0, Spawn) + AddConversationOption(conversation, "Where do I come in?", "Quest_DrawUponWellsprings_03") + StartConversation(conversation, NPC, Spawn, "Certainly! I am responsible for ensuring the Dread Guard remain an unequaled fighting force and are prepared for an eventual march on the Thexian invaders. They say all armies must be bred, fed and led. Well, I've got the last two categories covered.") +end + +function Quest_DrawUponWellsprings_03(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "agree", 0, 0, Spawn) + AddConversationOption(conversation, "That would be impressive.", "Quest_DrawUponWellsprings_04") + StartConversation(conversation, NPC, Spawn, "I have turned my attention to the local fauna of this forest to expand our fighting regiments. Imagine a full platoon of Dread Guard Dragoons charging their enemy atop fearsome bears!") +end + +function Quest_DrawUponWellsprings_04(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "All right, I can do this.", "QuestOffer_DrawUponWellsprings") + AddConversationOption(conversation, "I don't think so.") + StartConversation(conversation, NPC, Spawn, "For this plan to come to fruition, we must capture several cubs and domesticate them at an early age before their savage nature makes them untamable. I want you to find some cubs and bring them back to me.") +end + +function QuestOffer_DrawUponWellsprings(NPC, Spawn) + OfferQuest(NPC, Spawn, DrawUponWellsprings) +end + +function Quest_DrawUponWellsprings_05(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + -- Remove cub var -- + cub = GetTempVariable(Spawn, "cub") + Despawn(cub) + -------------------- + + AddStepProgress(Spawn, 155, 1, 1) + SetTempVariable(Spawn, "cub", nil) + + PlayFlavor(NPC, "voiceover/english/neriak/calnozz_j_melvirr/darklight_wood/tvatar_post/calnozz/calnozz009.mp3", "", "", 1819294557, 1460011625, Spawn) + if GetQuestStep(Spawn, DrawUponWellsprings) == 2 then + AddConversationOption(conversation, "That's three cubs.", "Quest_StunningRevelation") + AddConversationOption(conversation, "All right.") + StartConversation(conversation, NPC, Spawn, "Nice work!") + else + AddConversationOption(conversation, "All right.") + StartConversation(conversation, NPC, Spawn, "Nice work!") + end +end + +-------------------------------------------------------------------------------------- +-- Stunning Revelation +-------------------------------------------------------------------------------------- + +function Quest_StunningRevelation(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + SetStepComplete(Spawn, DrawUponWellsprings, 2) + + PlayFlavor(NPC, "voiceover/english/neriak/calnozz_j_melvirr/darklight_wood/tvatar_post/calnozz/calnozz010.mp3", "", "", 3144240243, 3441965982, Spawn) + AddConversationOption(conversation, "Yes.", "Quest_StunningRevelation_01") + AddConversationOption(conversation, "Not right now, Calnozz.") + StartConversation(conversation, NPC, Spawn, "That it is. Very nice. I do believe our partnership will work out fine. Do you wish to continue working?") +end + +function Quest_StunningRevelation_01(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "What's that?", "Quest_StunningRevelation_02") + StartConversation(conversation, NPC, Spawn, "As an opportunist I am always seeking new methods for disposing of our enemies. In recent months I believe I've discovered a new way to address the constant threat of undead corpses who stalk these woods.") +end + +function Quest_StunningRevelation_02(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/neriak/calnozz_j_melvirr/darklight_wood/tvatar_post/calnozz/calnozz004.mp3", "", "", 1724396442, 329779287, Spawn) + AddConversationOption(conversation, "Where should I look for these mushrooms?", "Quest_StunningRevelation_03") + AddConversationOption(conversation, "Not a chance, Calnozz.") + StartConversation(conversation, NPC, Spawn, "I've found a particular mushroom, which, when ground into a fine powder, causes a topical paralysis on undead test subjects. I'm close to perfecting the mixture; however, I've run out of stunspore mushroom caps. Would you be willing to harvest some more for me?") +end + +function Quest_StunningRevelation_03(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/neriak/calnozz_j_melvirr/darklight_wood/tvatar_post/calnozz/calnozz004.mp3", "", "", 1724396442, 329779287, Spawn) + AddConversationOption(conversation, "I'll take my chances.", "QuestOffer_StunningRevelation") + AddConversationOption(conversation, "Nevermind, I am not interested.") + StartConversation(conversation, NPC, Spawn, "You should be able to find the stunspore mushrooms due west from this outpost. Be careful. A colony of bats has taken a liking to the area.") +end + +function QuestOffer_StunningRevelation(NPC, Spawn) + OfferQuest(NPC, Spawn, StunningRevelation) +end + +function Quest_StunningRevelation_04(NPC, Spawn) + FaceTarget(NPC, Spawn) + SetStepComplete(Spawn, StunningRevelation, 2) + conversation = CreateConversation() + AddConversationOption(conversation, "Second ingredient?", "Quest_InfantileIngredients_01") + StartConversation(conversation, NPC, Spawn, "Nice work " .. GetName(Spawn) .. ". It may seem worthless now, but with a little more preparation and the second ingredient, we can create a powerful undead paralysis agent.") +end + +------------------------------------------------------------------------------------- +-- Infantile Ingredients +-------------------------------------------------------------------------------------- + +function Quest_InfantileIngredients(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + AddConversationOption(conversation, "Second ingredient?", "Quest_InfantileIngredients_01") + StartConversation(conversation, NPC, Spawn, "Nice work " .. GetName(Spawn) .. ". It may seem worthless now, but with a little more preparation and the second ingredient, we can create a powerful undead paralysis agent.") +end + +function Quest_InfantileIngredients_01(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + AddConversationOption(conversation, "What?!", "Quest_InfantileIngredients_02") + StartConversation(conversation, NPC, Spawn, "Oh, I thought I already mentioned that to you. My apologies, in my haste to develop this compound I must have forgotten to mention the baby snake venom I require.") +end + +function Quest_InfantileIngredients_02(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + AddConversationOption(conversation, "Very well, I can collect them.", "QuestOffer_InfantileIngredients") + AddConversationOption(conversation, "Good luck with that.") + StartConversation(conversation, NPC, Spawn, "The venom from a baby snake is nearly twice as powerful as it is from an adult. It's just the thing I need to make the compound irresistible. Along the banks of the Searing Tendril you will find serpents. Some, when slain, will spew forth baby snakes-- a beautiful way to come into the world, no doubt. These baby snakes are what I require.") +end + +function QuestOffer_InfantileIngredients(NPC, Spawn) + OfferQuest(NPC, Spawn, InfantileIngredients) +end + +function Quest_InfantileIngredients_03(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + AddConversationOption(conversation, "Very well, I can collect them.", "QuestOffer_InfantileIngredients") + AddConversationOption(conversation, "Good luck with that.") + StartConversation(conversation, NPC, Spawn, "The venom from a baby snake is nearly twice as powerful as it is from an adult. It's just the thing I need to make the compound irresistible. Along the banks of the Searing Tendril you will find serpents. Some, when slain, will spew forth baby snakes-- a beautiful way to come into the world, no doubt. These baby snakes are what I require.") +end + +------------------------------------------------------------------------------------- +-- Dust to Dust +-------------------------------------------------------------------------------------- + +function Quest_DustToDust(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + SetStepComplete(Spawn, InfantileIngredients, 2) + + AddConversationOption(conversation, "Thank You.", "Quest_DustToDust_01") + StartConversation(conversation, NPC, Spawn, "Nice work, " .. GetName(Spawn) .. ". Nice work indeed. These will do nicely. Here is your payment.") +end + +function Quest_DustToDust_01(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "Who... Er, what will I test it on?", "Quest_DustToDust_02") + AddConversationOption(conversation, "Sorry, not at this time.") + StartConversation(conversation, NPC, Spawn, "With the final ingredient added, it is now time to test the stunspore powder. In its current state I do believe it will effectively stop undead in their tracks, thus allowing someone tme to either engage or escape from the fiend on their own terms. Care to give it a try?") +end + +function Quest_DustToDust_02(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "Okay, give me the dust and I'll test it out.", "QuestOffer_DustToDust") + StartConversation(conversation, NPC, Spawn, "Southwest from here, beyond the Lower Tendril River, lies Warpfont Spire, an architectural antiquity from many ages ago. Use the skeletons there as our test subjects!") +end + +function QuestOffer_DustToDust(NPC, Spawn) + OfferQuest(NPC, Spawn, DustToDust) +end + +function Quest_DustToDust_03(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + SetStepComplete(Spawn, DustToDust, 2) + + AddConversationOption(conversation, "You're welcome, Calnozz.") + StartConversation(conversation, NPC, Spawn, "Hmm, perhaps perfection was a result I had expected a bit too early. Nonetheless, future prototypes shall benefit from your tireless work! For that, I thank you, " .. GetName(Spawn) .. ". Should you find your business here at the outpost concluded, I'd encourage you to travel west and seek out Wanderlust Fair. Many odd characters reside there. Many more could use the help of someone like you. The Queen smiles upon you, young one. Good day.") +end +------------------------------------------------------------------------------------- +-- Rich Fish Flesh +-------------------------------------------------------------------------------------- + +function Quest_RichFishFlesh(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + SetStepComplete(Spawn, RichFishFlesh, 1) + + AddConversationOption(conversation, "Thank you.") + StartConversation(conversation, NPC, Spawn, "Oh! This is amazing! Hah, this is quite a find! Good show, " .. GetName(Spawn) .. ". Good show indeed. Those who know me will hear quite good things about you.") +end + +--[[ +function dlg_4_4(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/neriak/calnozz_j_melvirr/darklight_wood/tvatar_post/calnozz/calnozz005.mp3", "", "", 833398241, 239346045, Spawn) + AddConversationOption(conversation, "What do you mean?", "dlg_4_5") + StartConversation(conversation, NPC, Spawn, "Good to hear. One delicacy I helped introduce to Neriak is called gerael. What it is, is the meat from bear cubs, which everyone knows. What most laymen don't know--and most collectors fail to capitalize on--is the activity level of the cubs from which the meat is derived.") +end + +function dlg_4_5(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/neriak/calnozz_j_melvirr/darklight_wood/tvatar_post/calnozz/calnozz006.mp3", "", "", 37698119, 695494273, Spawn) + AddConversationOption(conversation, "All right, I can do this.", "dlg_4_6") + AddConversationOption(conversation, "I don't think so.") + StartConversation(conversation, NPC, Spawn, "I keep my cubs chained up to limit their movement. This retards the growth of tough muscle fiber and makes the flesh nice and tender. It is because of this that restaurants pay a premium for my meat. What I'd like from you, is to go find some cubs and bring them back to me.") +end + +function dlg_4_6(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/neriak/calnozz_j_melvirr/darklight_wood/tvatar_post/calnozz/calnozz007.mp3", "", "", 1447659069, 1085130442, Spawn) + AddConversationOption(conversation, "All right.", "dlg_4_7") + StartConversation(conversation, NPC, Spawn, "Excellent. I will be here waiting for you to bring the cubs back. Here is the leash.") +end + +function dlg_12_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/neriak/calnozz_j_melvirr/darklight_wood/tvatar_post/calnozz/calnozz020.mp3", "", "", 3550554639, 273920671, Spawn) + AddConversationOption(conversation, "Thank you.", "dlg_12_2") + StartConversation(conversation, NPC, Spawn, "Nice work, .. GetName(Spawn) .. . Nice work indeed. These will do nicely. Here is your payment.") +end + +function dlg_12_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/neriak/calnozz_j_melvirr/darklight_wood/tvatar_post/calnozz/calnozz021.mp3", "", "", 1698965568, 399908880, Spawn) + AddConversationOption(conversation, "Oh?", "dlg_12_3") + AddConversationOption(conversation, "Oh, I am quite aware of that. But your concern is appreciated.") + StartConversation(conversation, NPC, Spawn, "You seem to play the game well, assuming your attitude is a mask. If it is not, make it one. Do not be sincere within Neriak, .. GetName(Spawn) .. . That is a mistake you will not be allowed to repeat.") +end + +function dlg_12_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/neriak/calnozz_j_melvirr/darklight_wood/tvatar_post/calnozz/calnozz022.mp3", "", "", 1513724159, 2767202576, Spawn) + AddConversationOption(conversation, "Funny for YOU to say that to me.", "dlg_12_4") + StartConversation(conversation, NPC, Spawn, "Put on the mask, be friendly, that is what they expect and how they interact with each other. But trust no one, and use everyone you can, lest you be used yourself.") +end + +function dlg_12_4(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/neriak/calnozz_j_melvirr/darklight_wood/tvatar_post/calnozz/calnozz023.mp3", "", "", 2872411134, 1698258241, Spawn) + AddConversationOption(conversation, "I see. Well, thank you for the advice. Do you have any more work?", "dlg_12_5") + StartConversation(conversation, NPC, Spawn, "Fair enough, you may break off our dealings at any time. Though it is more acceptable to avoid the political mess that is Neriak once you leave the city itself.") +end + +function dlg_12_5(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/neriak/calnozz_j_melvirr/darklight_wood/tvatar_post/calnozz/calnozz025.mp3", "", "", 3007549595, 1246810731, Spawn) + AddConversationOption(conversation, "I'm sure I can figure it out.", "dlg_12_6") + AddConversationOption(conversation, "Not really, but I'll try.") + AddConversationOption(conversation, "Know how to fish? I'm a fishing prodigy!") + AddConversationOption(conversation, "Fishing? Goodbye.") + StartConversation(conversation, NPC, Spawn, "In fact I do. I have a client who is requesting Smoldering trout. They are the resilient fish that swim about in Smoldering Lake, which is found to the northwest. I hope you know how to fish.") +end + +function dlg_12_6(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/neriak/calnozz_j_melvirr/darklight_wood/tvatar_post/calnozz/calnozz026.mp3", "", "", 466576522, 3228815072, Spawn) + AddConversationOption(conversation, "I'll return with them.") + StartConversation(conversation, NPC, Spawn, "Well, so long as I get the fish!") +end + +function dlg_13_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/neriak/calnozz_j_melvirr/darklight_wood/tvatar_post/calnozz/calnozz001.mp3", "", "", 1345648558, 587665125, Spawn) + AddConversationOption(conversation, "Well, nice to meet you.", "dlg_13_2") + StartConversation(conversation, NPC, Spawn, "Indeed I did, though that is of little importance. I am Calnozz J'Melvirr.") +end + +function dlg_13_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/neriak/calnozz_j_melvirr/darklight_wood/tvatar_post/calnozz/calnozz003.mp3", "", "", 1237619057, 3188401533, Spawn) + AddConversationOption(conversation, "What did you have in mind?", "dlg_13_3") + StartConversation(conversation, NPC, Spawn, "No doubt. You may not have heard of me, but I am one of the top suppliers to most of the higher class restaurants in Neriak. I've worked in the field for quite some time. I've even discovered a number of new ingredients for the restaurants to use. In my spare time, I cook, naturally. For now, though, I am out here. Collecting. Tell me, Zuzoo, would a short term business partnership interest you?") +end + +function dlg_13_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/neriak/calnozz_j_melvirr/darklight_wood/tvatar_post/calnozz/calnozz004.mp3", "", "", 1724396442, 329779287, Spawn) + AddConversationOption(conversation, "I'm listening.", "dlg_13_4") + StartConversation(conversation, NPC, Spawn, "You get things done, and I have things that need doing. I will pay you for your work.") +end + +function dlg_13_4(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/neriak/calnozz_j_melvirr/darklight_wood/tvatar_post/calnozz/calnozz005.mp3", "", "", 833398241, 239346045, Spawn) + AddConversationOption(conversation, "What do you mean?", "dlg_13_5") + StartConversation(conversation, NPC, Spawn, "Good to hear. One delicacy I helped introduce to Neriak is called gerael. What it is, is the meat from bear cubs, which everyone knows. What most laymen don't know--and most collectors fail to capitalize on--is the activity level of the cubs from which the meat is derived.") +end + +function dlg_13_5(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/neriak/calnozz_j_melvirr/darklight_wood/tvatar_post/calnozz/calnozz006.mp3", "", "", 37698119, 695494273, Spawn) + AddConversationOption(conversation, "All right, I can do this.", "dlg_13_6") + AddConversationOption(conversation, "I don't think so.") + StartConversation(conversation, NPC, Spawn, "I keep my cubs chained up to limit their movement. This retards the growth of tough muscle fiber and makes the flesh nice and tender. It is because of this that restaurants pay a premium for my meat. What I'd like from you, is to go find some cubs and bring them back to me.") +end + +function dlg_13_6(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/neriak/calnozz_j_melvirr/darklight_wood/tvatar_post/calnozz/calnozz007.mp3", "", "", 1447659069, 1085130442, Spawn) + AddConversationOption(conversation, "All right.", "dlg_13_7") + StartConversation(conversation, NPC, Spawn, "Excellent. I will be here waiting for you to bring the cubs back. Here is the leash.") +end + +function dlg_14_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/neriak/calnozz_j_melvirr/darklight_wood/tvatar_post/calnozz/calnozz009.mp3", "", "", 1819294557, 1460011625, Spawn) + AddConversationOption(conversation, "That's three cubs.", "dlg_14_2") + AddConversationOption(conversation, "All right.") + StartConversation(conversation, NPC, Spawn, "Nice work!") +end + +function dlg_14_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/neriak/calnozz_j_melvirr/darklight_wood/tvatar_post/calnozz/calnozz010.mp3", "", "", 3144240243, 3441965982, Spawn) + AddConversationOption(conversation, "Yes.", "dlg_14_3") + StartConversation(conversation, NPC, Spawn, "That it is. Very nice. I do believe our partnership will work out fine. Do you wish to continue working?") +end + +function dlg_14_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/neriak/calnozz_j_melvirr/darklight_wood/tvatar_post/calnozz/calnozz011.mp3", "", "", 2621978220, 49747204, Spawn) + AddConversationOption(conversation, "What's that?", "dlg_14_4") + StartConversation(conversation, NPC, Spawn, "Good. I have my own garden in Neriak. Though, most often I am not the one caring for it, so really I wouldn't say the garden is MINE so much. But I do own it. One thing that helps my fruits and vegetables ripen is the right fertilizer. Most folks tend to use land mammal dung as fertilizer, but in my wanderings out here I've stumbled onto a little secret.") +end + +function dlg_14_4(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/neriak/calnozz_j_melvirr/darklight_wood/tvatar_post/calnozz/calnozz012.mp3", "", "", 514050601, 1202589149, Spawn) + AddConversationOption(conversation, "All right, I'll collect some.", "dlg_14_5") + AddConversationOption(conversation, "Not a chance, Calnozz.") + StartConversation(conversation, NPC, Spawn, "Screecher dung. You would be amazed at how well this stuff helps plants grow. The screechers are just west of T'Vatar Post, and their droppings can be found all around that area.") +end + +function dlg_14_5(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/neriak/calnozz_j_melvirr/darklight_wood/tvatar_post/calnozz/calnozz013.mp3", "", "", 2963845770, 48104833, Spawn) + AddConversationOption(conversation, "Yeah, yeah. I'll be back.", "dlg_14_6") + StartConversation(conversation, NPC, Spawn, "It's a dirty job, but someone who isn't me has to do it.") +end + +function dlg_15_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/neriak/calnozz_j_melvirr/darklight_wood/tvatar_post/calnozz/calnozz015.mp3", "", "", 1272266981, 2604142858, Spawn) + AddConversationOption(conversation, "Interesting.", "dlg_15_2") + StartConversation(conversation, NPC, Spawn, "Nice work, .. GetName(Spawn) .. . It may seem worthless now, but with a little preparation this can turn a few seeds into platinum.") +end + +function dlg_15_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/neriak/calnozz_j_melvirr/darklight_wood/tvatar_post/calnozz/calnozz016.mp3", "", "", 636649601, 977260067, Spawn) + AddConversationOption(conversation, "What task?", "dlg_15_3") + StartConversation(conversation, NPC, Spawn, "Interesting in a 'money making' sort of way, yes. Whatever it takes to meet the discerning palate of the Neriak elite, I always say. On that note, I have another task for you.") +end + +function dlg_15_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/neriak/calnozz_j_melvirr/darklight_wood/tvatar_post/calnozz/calnozz017.mp3", "", "", 1678813904, 3793532984, Spawn) + AddConversationOption(conversation, "I can collect them.", "dlg_15_4") + AddConversationOption(conversation, "Good luck with that.") + StartConversation(conversation, NPC, Spawn, "Baby snake is a delicacy in Neriak. Along the banks of the Searing Tendril you will find serpents. Some, when slain, will spew forth baby snakes--a beautiful way to come into the world, no doubt. These baby snakes are what I require.") +end + +function dlg_15_4(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/neriak/calnozz_j_melvirr/darklight_wood/tvatar_post/calnozz/calnozz018.mp3", "", "", 3304982869, 1880170968, Spawn) + AddConversationOption(conversation, "I'll try to remember.", "dlg_15_5") + StartConversation(conversation, NPC, Spawn, "They sell for quite a bit, so try not to slice up the babies too much.") +end + +function dlg_25_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/neriak/calnozz_j_melvirr/darklight_wood/tvatar_post/calnozz/calnozz009.mp3", "", "", 1819294557, 1460011625, Spawn) + AddConversationOption(conversation, "All right.", "dlg_25_2") + StartConversation(conversation, NPC, Spawn, "Nice work!") +end + +function dlg_26_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/neriak/calnozz_j_melvirr/darklight_wood/tvatar_post/calnozz/calnozz009.mp3", "", "", 1819294557, 1460011625, Spawn) + AddConversationOption(conversation, "All right.", "dlg_26_2") + StartConversation(conversation, NPC, Spawn, "Nice work!") +end + +function dlg_27_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/neriak/calnozz_j_melvirr/darklight_wood/tvatar_post/calnozz/calnozz009.mp3", "", "", 1819294557, 1460011625, Spawn) + AddConversationOption(conversation, "That's three cubs.", "dlg_27_2") + AddConversationOption(conversation, "All right.") + StartConversation(conversation, NPC, Spawn, "Nice work!") +end + +function dlg_27_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/neriak/calnozz_j_melvirr/darklight_wood/tvatar_post/calnozz/calnozz010.mp3", "", "", 3144240243, 3441965982, Spawn) + AddConversationOption(conversation, "Yes.", "dlg_27_3") + StartConversation(conversation, NPC, Spawn, "That it is. Very nice. I do believe our partnership will work out fine. Do you wish to continue working?") +end + +function dlg_27_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/neriak/calnozz_j_melvirr/darklight_wood/tvatar_post/calnozz/calnozz011.mp3", "", "", 2621978220, 49747204, Spawn) + AddConversationOption(conversation, "What's that?", "dlg_27_4") + StartConversation(conversation, NPC, Spawn, "Good. I have my own garden in Neriak. Though, most often I am not the one caring for it, so really I wouldn't say the garden is MINE so much. But I do own it. One thing that helps my fruits and vegetables ripen is the right fertilizer. Most folks tend to use land mammal dung as fertilizer, but in my wanderings out here I've stumbled onto a little secret.") +end + +function dlg_27_4(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/neriak/calnozz_j_melvirr/darklight_wood/tvatar_post/calnozz/calnozz012.mp3", "", "", 514050601, 1202589149, Spawn) + AddConversationOption(conversation, "All right, I'll collect some.", "dlg_27_5") + AddConversationOption(conversation, "Not a chance, Calnozz.") + StartConversation(conversation, NPC, Spawn, "Screecher dung. You would be amazed at how well this stuff helps plants grow. The screechers are just west of T'Vatar Post, and their droppings can be found all around that area.") +end + +function dlg_27_5(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/neriak/calnozz_j_melvirr/darklight_wood/tvatar_post/calnozz/calnozz013.mp3", "", "", 2963845770, 48104833, Spawn) + AddConversationOption(conversation, "Yeah, yeah. I'll be back.", "dlg_27_6") + StartConversation(conversation, NPC, Spawn, "It's a dirty job, but someone who isn't me has to do it.") +end + +function dlg_29_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/neriak/calnozz_j_melvirr/darklight_wood/tvatar_post/calnozz/calnozz015.mp3", "", "", 1272266981, 2604142858, Spawn) + AddConversationOption(conversation, "Interesting.", "dlg_29_2") + StartConversation(conversation, NPC, Spawn, "Nice work, Zuzoo. It may seem worthless now, but with a little preparation this can turn a few seeds into platinum.") +end + +function dlg_29_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/neriak/calnozz_j_melvirr/darklight_wood/tvatar_post/calnozz/calnozz016.mp3", "", "", 636649601, 977260067, Spawn) + AddConversationOption(conversation, "What task?", "dlg_29_3") + StartConversation(conversation, NPC, Spawn, "Interesting in a 'money making' sort of way, yes. Whatever it takes to meet the discerning palate of the Neriak elite, I always say. On that note, I have another task for you.") +end + +function dlg_29_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/neriak/calnozz_j_melvirr/darklight_wood/tvatar_post/calnozz/calnozz017.mp3", "", "", 1678813904, 3793532984, Spawn) + AddConversationOption(conversation, "I can collect them.", "dlg_29_4") + AddConversationOption(conversation, "Good luck with that.") + StartConversation(conversation, NPC, Spawn, "Baby snake is a delicacy in Neriak. Along the banks of the Searing Tendril you will find serpents. Some, when slain, will spew forth baby snakes--a beautiful way to come into the world, no doubt. These baby snakes are what I require.") +end + +function dlg_29_4(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/neriak/calnozz_j_melvirr/darklight_wood/tvatar_post/calnozz/calnozz018.mp3", "", "", 3304982869, 1880170968, Spawn) + AddConversationOption(conversation, "I'll try to remember.", "dlg_29_5") + StartConversation(conversation, NPC, Spawn, "They sell for quite a bit, so try not to slice up the babies too much.") +end +]]-- diff --git a/server/SpawnScripts/Darklight/DalvosDNar.lua b/server/SpawnScripts/Darklight/DalvosDNar.lua new file mode 100644 index 000000000..893b64fd3 --- /dev/null +++ b/server/SpawnScripts/Darklight/DalvosDNar.lua @@ -0,0 +1,21 @@ +--[[ + Script Name : SpawnScripts/Darklight/DalvosDNar.lua + Script Author : fearfx + Script Date : 2017.01.21 06:01:37 + Script Purpose : + : +--]] + +function spawn(NPC) + +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + Say(NPC, "At peace or at war, my work must go on.") +end + +function respawn(NPC) + +end + diff --git a/server/SpawnScripts/Darklight/DanyaHalfmoon.lua b/server/SpawnScripts/Darklight/DanyaHalfmoon.lua new file mode 100644 index 000000000..7c3631775 --- /dev/null +++ b/server/SpawnScripts/Darklight/DanyaHalfmoon.lua @@ -0,0 +1,82 @@ +--[[ + Script Name : SpawnScripts/Darklight/DanyaHalfmoon.lua + Script Purpose : Danya Halfmoon + Script Author : John Adams Updated by Cynnar + Script Date : 2009.01.31 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +local SableveinRubble = 137 +local SealingTheRift = 122 + +function spawn(NPC) + ProvidesQuest(NPC, SableveinRubble) +end + +function respawn(NPC) + spawn(NPC) +end + + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + if not HasCompletedQuest(Spawn, SealingTheRift) then + PlayFlavor(NPC, "voiceover/english/neriak/danya_halfmoon/darklight_wood/quest/hates_envy/qst_danya_toolow_d63cbe27.mp3", "", "", 1007828063, 3522254640, Spawn) + StartConversation(conversation, NPC, Spawn, "I'm a little tense, perhaps you should leave me be.") + elseif HasCompletedQuest(Spawn, SableveinRubble) then + -- + elseif not HasQuest(Spawn, SableveinRubble) then + PlayFlavor(NPC, "voiceover/english/neriak/danya_halfmoon/darklight_wood/hates_envy/danya/danya000.mp3", "", "", 3154437003, 176778633, Spawn) + AddConversationOption(conversation, "Yes.", "QuestChat_0_1") + AddConversationOption(conversation, "No.") + StartConversation(conversation, NPC, Spawn, "What do you need? Just looking for a job?") + elseif HasQuest(Spawn, SableveinRubble) and GetQuestStep(Spawn, SableveinRubble) == 1 then + PlayFlavor(NPC, "voiceover/english/neriak/danya_halfmoon/darklight_wood/hates_envy/danya/danya006.mp3", "", "", 2899629615, 2055968822, Spawn) + AddConversationOption(conversation, "No.") + StartConversation(conversation, NPC, Spawn, "I am eager to work, have you brought the ore?") + elseif HasQuest(Spawn, SableveinRubble) and GetQuestStep(Spawn, SableveinRubble) == 2 then + PlayFlavor(NPC, "voiceover/english/neriak/danya_halfmoon/darklight_wood/hates_envy/danya/danya006.mp3", "", "", 2899629615, 2055968822, Spawn) + AddConversationOption(conversation, "Yes, here you are.", "QuestChat_1_0") + StartConversation(conversation, NPC, Spawn, "I am eager to work, have you brought the ore?") + else + PlayFlavor(NPC, "voiceover/english/neriak/danya_halfmoon/darklight_wood/quest/hates_envy/qst_danya_done_ba2066a8.mp3", "", "", 2678058007, 1352299031, Spawn) + StartConversation(conversation, NPC, Spawn, "You know, one of the reasons I asked you to get me ore is so I can get some work done!") + end +end + +function QuestChat_0_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/neriak/danya_halfmoon/darklight_wood/hates_envy/danya/danya003.mp3", "", "", 470214479, 1083810129, Spawn) + AddConversationOption(conversation, "You want ore from the mine.", "QuestChat_0_2") + StartConversation(conversation, NPC, Spawn, "I haven't been able to get the ore I need ever since the elementals pushed the miners out of Sablevein Tear. I'm sure you see where this is going.") +end + +function QuestChat_0_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/neriak/danya_halfmoon/darklight_wood/hates_envy/danya/danya004.mp3", "", "", 3325647670, 962149852, Spawn) + AddConversationOption(conversation, "I can get it.", "OfferQuest1") + AddConversationOption(conversation, "I don't have time for this.") + StartConversation(conversation, NPC, Spawn, "Bingo. The ore is mixed in with other rocks and bits of earth within the cave. Bring me some of the Sablevein rubble from the cave and I can refine the ore in it and turn it into something workable.") +end + +function OfferQuest1(NPC, Spawn) + FaceTarget(NPC, Spawn) + OfferQuest(NPC, Spawn, SableveinRubble) +end + +function QuestChat_1_0(NPC, Spawn) + SetStepComplete(Spawn, SableveinRubble, 2) + + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/neriak/danya_halfmoon/darklight_wood/hates_envy/danya/danya007.mp3", "", "", 2771597308, 3920757098, Spawn) + AddConversationOption(conversation, "You're welcome.") + StartConversation(conversation, NPC, Spawn, "Finally! You have my thanks, and the thanks of everyone who's had to deal with me in the past few days.") +end \ No newline at end of file diff --git a/server/SpawnScripts/Darklight/DirzdiaTZauvirr.lua b/server/SpawnScripts/Darklight/DirzdiaTZauvirr.lua new file mode 100644 index 000000000..987948249 --- /dev/null +++ b/server/SpawnScripts/Darklight/DirzdiaTZauvirr.lua @@ -0,0 +1,1303 @@ +--[[ + Script Name : SpawnScripts/DarklightWood/DirzdiaTZauvirr.lua + Script Purpose : Dirzdia T'Zauvirr + Script Author : fearfx + Script Date : 2017.01.23 + Script Notes : Auto-Generated Conversation from PacketParser Data + + Smoking the Competition + Reaping the Benefits of a Monopoly + So Hot You Catch Them Cooked + The Big One + Rich Fish Flesh + +--]] + +local HopefulNetReturns = 160 +local SmokingTheCompetition = 187 +local ReapingTheBenefits = 188 +local SoHotYouCatch = 189 +local TheBigOne = 190 +--local RichFishFlesh = 191 + +function spawn(NPC) + ProvidesQuest(NPC, SmokingTheCompetition) + ProvidesQuest(NPC, ReapingTheBenefits) + ProvidesQuest(NPC, SoHotYouCatch) + ProvidesQuest(NPC, TheBigOne) + --ProvidesQuest(NPC, RichFishFlesh) +end + +function respawn(NPC) + spawn(NPC) +end + +function InRange(NPC, Spawn) +end + +function LeaveRange(NPC, Spawn) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + if HasQuest(Spawn, HopefulNetReturns) and not HasCompletedQuest(Spawn, HopefulNetReturns) then + PlayFlavor(NPC, "voiceover/english/neriak/dirzdia_t_zauvirr/darklight_wood/tvatar_post/dirzdia/dirzdia_delivery000.mp3", "", "", 169576251, 1164193707, Spawn) + AddConversationOption(conversation, "Hi. I've a delivery from Aunthrae for you.", "Quest_HopefulNetReturns") + StartConversation(conversation, NPC, Spawn, "Hello.") + elseif HasCompletedQuest(Spawn, HopefulNetReturns) and not HasQuest(Spawn, SmokingTheCompetition) and not HasCompletedQuest(Spawn, SmokingTheCompetition) then + AddConversationOption(conversation, "Hi.", "Quest_SmokingTheCompetition_01") + StartConversation(conversation, NPC, Spawn, "Hello.") + elseif HasQuest(Spawn, SmokingTheCompetition) and GetQuestStep(Spawn, SmokingTheCompetition) == 2 then + AddConversationOption(conversation, "I have. Here you go.", "Quest_ReapingTheBenefits") + StartConversation(conversation, NPC, Spawn, "Have you got the razormaw?") + elseif HasCompletedQuest(Spawn, SmokingTheCompetition) and not HasQuest(Spawn, ReapingTheBenefits) and not HasCompletedQuest(Spawn, ReapingTheBenefits) then + AddConversationOption(conversation, "I have. Here you go.", "Quest_ReapingTheBenefits") + StartConversation(conversation, NPC, Spawn, "Have you got the razormaw?") + elseif HasQuest(Spawn, ReapingTheBenefits) and GetQuestStep(Spawn, ReapingTheBenefits) == 2 then + PlayFlavor(NPC, "voiceover/english/neriak/dirzdia_t_zauvirr/darklight_wood/tvatar_post/dirzdia/dirzdia013.mp3", "", "", 4057665445, 4206402151, Spawn) + AddConversationOption(conversation, "I do. Here you are.", "Quest_SoHotYouCatch") + StartConversation(conversation, NPC, Spawn, "Do you have them?") + elseif HasCompletedQuest(Spawn, ReapingTheBenefits) and not HasQuest(Spawn, SoHotYouCatch) and not HasCompletedQuest(Spawn, SoHotYouCatch) then + PlayFlavor(NPC, "voiceover/english/neriak/dirzdia_t_zauvirr/darklight_wood/tvatar_post/dirzdia/dirzdia013.mp3", "", "", 4057665445, 4206402151, Spawn) + AddConversationOption(conversation, "I do. Here you are.", "Quest_SoHotYouCatch") + StartConversation(conversation, NPC, Spawn, "Do you have them?") + elseif HasQuest(Spawn, SoHotYouCatch) and GetQuestStep(Spawn, SoHotYouCatch) == 2 then + PlayFlavor(NPC, "voiceover/english/neriak/dirzdia_t_zauvirr/darklight_wood/tvatar_post/dirzdia/dirzdia017.mp3", "", "", 614943785, 2190575335, Spawn) + AddConversationOption(conversation, "I sure did.", "Quest_TheBigOne") + StartConversation(conversation, NPC, Spawn, "Did you get them?") + elseif HasCompletedQuest(Spawn, SoHotYouCatch) and not HasQuest(Spawn, TheBigOne) and not HasCompletedQuest(Spawn, TheBigOne) then + PlayFlavor(NPC, "voiceover/english/neriak/dirzdia_t_zauvirr/darklight_wood/tvatar_post/dirzdia/dirzdia017.mp3", "", "", 614943785, 2190575335, Spawn) + AddConversationOption(conversation, "I sure did.", "Quest_TheBigOne") + StartConversation(conversation, NPC, Spawn, "Did you get them?") + elseif HasQuest(Spawn, TheBigOne) and GetQuestStep(Spawn, TheBigOne) == 2 then + PlayFlavor(NPC, "voiceover/english/neriak/dirzdia_t_zauvirr/darklight_wood/tvatar_post/dirzdia/dirzdia023.mp3", "", "", 2998879726, 1525879375, Spawn) + AddConversationOption(conversation, "I have, actually.", "Quest_TheBigOne_03") + StartConversation(conversation, NPC, Spawn, "Have you found my lure?") + else + Say(NPC, "END") + end + +end + +-------------------------------------------------------------------------------------- +-- Hopeful Net Returns +-------------------------------------------------------------------------------------- + +function Quest_HopefulNetReturns(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + SetStepComplete(Spawn, HopefulNetReturns, 1) + + StartConversation(conversation, NPC, Spawn, "Perfect! Thanks! Just put it on the ground there.") +end + +-------------------------------------------------------------------------------------- +-- SmokingTheCompetition +-------------------------------------------------------------------------------------- + +function Quest_SmokingTheCompetition_01(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "Hello.", "Quest_SmokingTheCompetition_02") + StartConversation(conversation, NPC, Spawn, "Hi.") +end + +function Quest_SmokingTheCompetition_02(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "... goodbye.", "Quest_SmokingTheCompetition_03") + StartConversation(conversation, NPC, Spawn, "Hello.") +end + +function Quest_SmokingTheCompetition_03(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + AddConversationOption(conversation, "What?", "Quest_SmokingTheCompetition_04") + StartConversation(conversation, NPC, Spawn, "Hey, Wait!") +end + +function Quest_SmokingTheCompetition_04(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + AddConversationOption(conversation, "Why do you ask?", "Quest_SmokingTheCompetition_05") + StartConversation(conversation, NPC, Spawn, "How good are you at killing?") +end + +function Quest_SmokingTheCompetition_05(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + AddConversationOption(conversation, "What do you want me to do?", "Quest_SmokingTheCompetition_06") + StartConversation(conversation, NPC, Spawn, "Fishing is getting more and more difficult as the razormaw in this river reach maturity. They break my lines, steal my lures, and eat all the fish before I have a chance to catch them! But they sure do taste great when smoked!") +end + +function Quest_SmokingTheCompetition_06(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + AddConversationOption(conversation, "All right, I'll help you.", "QuestOffer_SmokingTheCompetition") + AddConversationOption(conversation, "Find someone else.") + StartConversation(conversation, NPC, Spawn, "Kill them for me so I can fish in peace... and so I can have a tasty dinner. What do you say? I'll compensate you for your time, of course.") +end + +function QuestOffer_SmokingTheCompetition(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + OfferQuest(NPC, Spawn, SmokingTheCompetition) + AddConversationOption(conversation, "I'll be back when I've killed them.") + StartConversation(conversation, NPC, Spawn, "Great! I appreciate it!") +end + +-------------------------------------------------------------------------------------- +-- Reaping the Benefits of a Monopoly +-------------------------------------------------------------------------------------- + +function Quest_ReapingTheBenefits(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + if HasQuest(Spawn, SmokingTheCompetition) then + SetStepComplete(Spawn, SmokingTheCompetition, 2) + end + + AddConversationOption(conversation, "I'm " .. GetName(Spawn) .. ".", "Quest_ReapingTheBenefits_01") + StartConversation(conversation, NPC, Spawn, "Great! I thought the waters seemed a bit calmer. I'm Dirzdia, by the way. I've been sent out here to catch fish to help feed those stationed at T'Vatar Outpost.") +end + +function Quest_ReapingTheBenefits_01(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/neriak/dirzdia_t_zauvirr/darklight_wood/tvatar_post/dirzdia/dirzdia009.mp3", "", "", 389446448, 2794640706, Spawn) + AddConversationOption(conversation, "All the time.", "Quest_ReapingTheBenefits_02") + AddConversationOption(conversation, "Sometimes.", "Quest_ReapingTheBenefits_02") + AddConversationOption(conversation, "No.") + StartConversation(conversation, NPC, Spawn, "Oh, I'll never remember that. Tell me, do you fish much?") +end + +function Quest_ReapingTheBenefits_02(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/neriak/dirzdia_t_zauvirr/darklight_wood/tvatar_post/dirzdia/dirzdia010.mp3", "", "", 2956956838, 3113219938, Spawn) + AddConversationOption(conversation, "What kind of help?", "Quest_ReapingTheBenefits_03") + StartConversation(conversation, NPC, Spawn, "Well, the waters here are pretty good for fishing. How would you like to help me reel them in?") +end + +function Quest_ReapingTheBenefits_03(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/neriak/dirzdia_t_zauvirr/darklight_wood/tvatar_post/dirzdia/dirzdia011.mp3", "", "", 3261932029, 3599840953, Spawn) + AddConversationOption(conversation, "Sure, I'll help.", "QuestOffer_ReapingTheBenefits") + AddConversationOption(conversation, "I don't think so.") + StartConversation(conversation, NPC, Spawn, "Just help me catch them. Right now I'm trying to catch searing trout. They swim around in the Lower Tendril River. What do you say?") +end + +function QuestOffer_ReapingTheBenefits(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + OfferQuest(NPC, Spawn, ReapingTheBenefits) + PlayFlavor(NPC, "voiceover/english/neriak/dirzdia_t_zauvirr/darklight_wood/tvatar_post/dirzdia/dirzdia012.mp3", "", "", 2680874987, 3116118568, Spawn) + AddConversationOption(conversation, "All right.") + StartConversation(conversation, NPC, Spawn, "Great! Just bring them back to me when you've caught them.") +end + +-------------------------------------------------------------------------------------- +-- So Hot You Catch Them Cooked +-------------------------------------------------------------------------------------- + +function Quest_SoHotYouCatch(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + if GetQuestStep(Spawn, ReapingTheBenefits) == 2 then + SetStepComplete(Spawn, ReapingTheBenefits, 2) + end + + PlayFlavor(NPC, "voiceover/english/neriak/dirzdia_t_zauvirr/darklight_wood/tvatar_post/dirzdia/dirzdia014.mp3", "", "", 3630010163, 822378916, Spawn) + AddConversationOption(conversation, "What kind of fish do you need?", "Quest_SoHotYouCatch_01") + StartConversation(conversation, NPC, Spawn, "Great! These will go a long ways towards feeding the soldiers stationed at T'Vatar Outpost. Now then, if you'd like, you could help me catch some more fish.") +end + +function Quest_SoHotYouCatch_01(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/neriak/dirzdia_t_zauvirr/darklight_wood/tvatar_post/dirzdia/dirzdia015.mp3", "", "", 2001952195, 1089349401, Spawn) + AddConversationOption(conversation, "I can fish them up.", "QuestOffer_SoHotYouCatch") + AddConversationOption(conversation, "I'd prefer not to.") + StartConversation(conversation, NPC, Spawn, "Seared char! I know, their name is repetitive! They swim in the Searing Tendril, before it splits off into the Lower Tendril River. If you could fish me up some, that would be great!") +end + +function QuestOffer_SoHotYouCatch(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + OfferQuest(NPC, Spawn, SoHotYouCatch) + PlayFlavor(NPC, "voiceover/english/neriak/dirzdia_t_zauvirr/darklight_wood/tvatar_post/dirzdia/dirzdia016.mp3", "", "", 3096333821, 2080368744, Spawn) + StartConversation(conversation, NPC, Spawn, "Glad to hear it! I'll be waiting here... fishing!") +end + +-------------------------------------------------------------------------------------- +-- The Big One +-------------------------------------------------------------------------------------- + +function Quest_TheBigOne(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + if GetQuestStep(Spawn, SoHotYouCatch) == 2 then + SetStepComplete(Spawn, SoHotYouCatch, 2) + end + + PlayFlavor(NPC, "voiceover/english/neriak/dirzdia_t_zauvirr/darklight_wood/tvatar_post/dirzdia/dirzdia018.mp3", "", "", 2836144377, 248697270, Spawn) + AddConversationOption(conversation, "Smolderfin?", "Quest_TheBigOne_01") + StartConversation(conversation, NPC, Spawn, "You're a much better fisher than I am. Maybe that's why I enjoy it though. I can always get better. I bet you could catch Smolderfin!") +end + +function Quest_TheBigOne_01(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/neriak/dirzdia_t_zauvirr/darklight_wood/tvatar_post/dirzdia/dirzdia019.mp3", "", "", 1258409578, 147829151, Spawn) + AddConversationOption(conversation, "How can we catch him, then?", "Quest_TheBigOne_02") + StartConversation(conversation, NPC, Spawn, "He's a reclusive one, swims around up in Smoldering Lake. I hooked him once, but he took my pole down with him. Eventually it washed ashore and I got it back, but my favorite lure was gone.") +end + +function Quest_TheBigOne_02(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/neriak/dirzdia_t_zauvirr/darklight_wood/tvatar_post/dirzdia/dirzdia021.mp3", "", "", 4015813922, 782743353, Spawn) + AddConversationOption(conversation, "Okay, I'm up for the challenge.", "QuestOffer_TheBigOne") + AddConversationOption(conversation, "I don't think I'm interested.") + StartConversation(conversation, NPC, Spawn, "Like I said, he's in Smoldering Lake. But it's rare that he comes out. He likes to eat the smoldering trout, though. If you catch enough of them and drop them in the lake, all bloody and squirming, I bet that will drag him out.") +end + +function Quest_TheBigOne_03(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + SetStepComplete(Spawn, TheBigOne, 2) + + PlayFlavor(NPC, "voiceover/english/neriak/dirzdia_t_zauvirr/darklight_wood/tvatar_post/dirzdia/dirzdia024.mp3", "", "", 4053635028, 357139583, Spawn) + AddConversationOption(conversation, "You're welcome.") + StartConversation(conversation, NPC, Spawn, "You did? That's amazing. This is perfect, maybe now I'll finally catch something. Thank you, thank you very much!") +end + +function QuestOffer_TheBigOne(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + OfferQuest(NPC, Spawn, TheBigOne) + PlayFlavor(NPC, "voiceover/english/neriak/dirzdia_t_zauvirr/darklight_wood/tvatar_post/dirzdia/dirzdia022.mp3", "", "", 1365892706, 718371768, Spawn) + AddConversationOption(conversation, "All right.", "dlg_8_5") + StartConversation(conversation, NPC, Spawn, "Good luck! Bring me back my lure if you find it.") +end + +--[[ + PlayFlavor(NPC, "voiceover/english/neriak/dirzdia_t_zauvirr/darklight_wood/tvatar_post/dirzdia/dirzdia_delivery000.mp3", "", "", 169576251, 1164193707, Spawn) + AddConversationOption(conversation, "Hi. I've a delivery from Fileyl for you.", "dlg_0_1") + StartConversation(conversation, NPC, Spawn, "Hello.") + if convo==1 then + PlayFlavor(NPC, "voiceover/english/neriak/dirzdia_t_zauvirr/darklight_wood/tvatar_post/dirzdia/dirzdia013.mp3", "", "", 4057665445, 4206402151, Spawn) + AddConversationOption(conversation, "I do. Here you are.", "dlg_1_1") + StartConversation(conversation, NPC, Spawn, "Do you have them?") + end + + if convo==2 then + PlayFlavor(NPC, "voiceover/english/neriak/dirzdia_t_zauvirr/darklight_wood/tvatar_post/dirzdia/dirzdia013.mp3", "", "", 4057665445, 4206402151, Spawn) + AddConversationOption(conversation, "I do. Here you are.", "dlg_2_1") + StartConversation(conversation, NPC, Spawn, "Do you have them?") + end + + if convo==4 then + PlayFlavor(NPC, "voiceover/english/neriak/dirzdia_t_zauvirr/darklight_wood/tvatar_post/dirzdia/dirzdia000.mp3", "", "", 3120161704, 1555228530, Spawn) + AddConversationOption(conversation, "Hi.", "dlg_4_1") + StartConversation(conversation, NPC, Spawn, "Hello.") + end + + if convo==7 then + PlayFlavor(NPC, "voiceover/english/neriak/dirzdia_t_zauvirr/darklight_wood/tvatar_post/dirzdia/dirzdia017.mp3", "", "", 614943785, 2190575335, Spawn) + AddConversationOption(conversation, "I sure did.", "dlg_7_1") + StartConversation(conversation, NPC, Spawn, "Did you get them?") + end + + if convo==8 then + PlayFlavor(NPC, "voiceover/english/neriak/dirzdia_t_zauvirr/darklight_wood/tvatar_post/dirzdia/dirzdia017.mp3", "", "", 614943785, 2190575335, Spawn) + AddConversationOption(conversation, "I sure did.", "dlg_8_1") + StartConversation(conversation, NPC, Spawn, "Did you get them?") + end + + if convo==9 then + PlayFlavor(NPC, "voiceover/english/neriak/dirzdia_t_zauvirr/darklight_wood/tvatar_post/dirzdia/dirzdia007.mp3", "", "", 1448690893, 2588880650, Spawn) + AddConversationOption(conversation, "I do, here you go.", "dlg_9_1") + StartConversation(conversation, NPC, Spawn, "Have you got the razormaw?") + end + + if convo==10 then + PlayFlavor(NPC, "voiceover/english/neriak/dirzdia_t_zauvirr/darklight_wood/tvatar_post/dirzdia/dirzdia007.mp3", "", "", 1448690893, 2588880650, Spawn) + AddConversationOption(conversation, "I do, here you go.", "dlg_10_1") + StartConversation(conversation, NPC, Spawn, "Have you got the razormaw?") + end + + if convo==11 then + PlayFlavor(NPC, "voiceover/english/neriak/dirzdia_t_zauvirr/darklight_wood/tvatar_post/dirzdia/dirzdia013.mp3", "", "", 4057665445, 4206402151, Spawn) + AddConversationOption(conversation, "I do. Here you are.", "dlg_11_1") + StartConversation(conversation, NPC, Spawn, "Do you have them?") + end + + if convo==13 then + PlayFlavor(NPC, "voiceover/english/neriak/dirzdia_t_zauvirr/darklight_wood/tvatar_post/dirzdia/dirzdia_delivery000.mp3", "", "", 169576251, 1164193707, Spawn) + AddConversationOption(conversation, "Hi. I've a delivery from Fileyl for you.", "dlg_13_1") + StartConversation(conversation, NPC, Spawn, "Hello.") + end + + if convo==21 then + PlayFlavor(NPC, "voiceover/english/neriak/dirzdia_t_zauvirr/darklight_wood/tvatar_post/dirzdia/dirzdia_delivery000.mp3", "", "", 169576251, 1164193707, Spawn) + AddConversationOption(conversation, "Hi. I've a delivery from Fileyl for you.", "dlg_21_1") + StartConversation(conversation, NPC, Spawn, "Hello.") + end + + if convo==22 then + PlayFlavor(NPC, "voiceover/english/neriak/dirzdia_t_zauvirr/darklight_wood/tvatar_post/dirzdia/dirzdia000.mp3", "", "", 3120161704, 1555228530, Spawn) + AddConversationOption(conversation, "Hi.", "dlg_22_1") + StartConversation(conversation, NPC, Spawn, "Hello.") + end + + if convo==23 then + PlayFlavor(NPC, "voiceover/english/neriak/dirzdia_t_zauvirr/darklight_wood/tvatar_post/dirzdia/dirzdia007.mp3", "", "", 1448690893, 2588880650, Spawn) + AddConversationOption(conversation, "I do, here you go.", "dlg_23_1") + StartConversation(conversation, NPC, Spawn, "Have you got the razormaw?") + end + + if convo==24 then + PlayFlavor(NPC, "voiceover/english/neriak/dirzdia_t_zauvirr/darklight_wood/tvatar_post/dirzdia/dirzdia007.mp3", "", "", 1448690893, 2588880650, Spawn) + AddConversationOption(conversation, "I do, here you go.", "dlg_24_1") + StartConversation(conversation, NPC, Spawn, "Have you got the razormaw?") + end + + if convo==25 then + PlayFlavor(NPC, "voiceover/english/neriak/dirzdia_t_zauvirr/darklight_wood/tvatar_post/dirzdia/dirzdia013.mp3", "", "", 4057665445, 4206402151, Spawn) + AddConversationOption(conversation, "I do. Here you are.", "dlg_25_1") + StartConversation(conversation, NPC, Spawn, "Do you have them?") + end + + if convo==26 then + PlayFlavor(NPC, "voiceover/english/neriak/dirzdia_t_zauvirr/darklight_wood/tvatar_post/dirzdia/dirzdia013.mp3", "", "", 4057665445, 4206402151, Spawn) + AddConversationOption(conversation, "I do. Here you are.", "dlg_26_1") + StartConversation(conversation, NPC, Spawn, "Do you have them?") + end + + if convo==32 then + PlayFlavor(NPC, "voiceover/english/neriak/dirzdia_t_zauvirr/darklight_wood/tvatar_post/dirzdia/dirzdia_delivery000.mp3", "", "", 169576251, 1164193707, Spawn) + AddConversationOption(conversation, "Hi. I've a delivery from Aunthrae for you.", "dlg_32_1") + StartConversation(conversation, NPC, Spawn, "Hello.") + end + + if convo==38 then + PlayFlavor(NPC, "voiceover/english/neriak/dirzdia_t_zauvirr/darklight_wood/tvatar_post/dirzdia/dirzdia017.mp3", "", "", 614943785, 2190575335, Spawn) + AddConversationOption(conversation, "I sure did.", "dlg_38_1") + StartConversation(conversation, NPC, Spawn, "Did you get them?") + end + + if convo==39 then + PlayFlavor(NPC, "voiceover/english/neriak/dirzdia_t_zauvirr/darklight_wood/tvatar_post/dirzdia/dirzdia023.mp3", "", "", 2998879726, 1525879375, Spawn) + AddConversationOption(conversation, "I have, actually.", "dlg_39_1") + StartConversation(conversation, NPC, Spawn, "Have you found my lure?") + end + + if convo==47 then + PlayFlavor(NPC, "voiceover/english/neriak/dirzdia_t_zauvirr/darklight_wood/tvatar_post/dirzdia/dirzdia007.mp3", "", "", 1448690893, 2588880650, Spawn) + AddConversationOption(conversation, "I have. Here you go.", "dlg_47_1") + StartConversation(conversation, NPC, Spawn, "Have you got the razormaw?") + end + + if convo==48 then + PlayFlavor(NPC, "voiceover/english/neriak/dirzdia_t_zauvirr/darklight_wood/tvatar_post/dirzdia/dirzdia007.mp3", "", "", 1448690893, 2588880650, Spawn) + AddConversationOption(conversation, "I have. Here you go.", "dlg_48_1") + StartConversation(conversation, NPC, Spawn, "Have you got the razormaw?") + end + + if convo==49 then + PlayFlavor(NPC, "voiceover/english/neriak/dirzdia_t_zauvirr/darklight_wood/tvatar_post/dirzdia/dirzdia007.mp3", "", "", 1448690893, 2588880650, Spawn) + AddConversationOption(conversation, "I have. Here you go.", "dlg_49_1") + StartConversation(conversation, NPC, Spawn, "Have you got the razormaw?") + end + +end + +function dlg_0_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/neriak/dirzdia_t_zauvirr/darklight_wood/tvatar_post/dirzdia/dirzdia_delivery001.mp3", "", "", 1749958115, 2883042757, Spawn) + AddConversationOption(conversation, "All right. Goodbye.", "dlg_0_2") + StartConversation(conversation, NPC, Spawn, "Perfect! Thanks! Just put it on the ground there.") +end + +function dlg_0_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/neriak/dirzdia_t_zauvirr/darklight_wood/tvatar_post/dirzdia/dirzdia_delivery002.mp3", "", "", 2799282957, 2320910908, Spawn) + AddConversationOption(conversation, "What?", "dlg_0_3") + StartConversation(conversation, NPC, Spawn, "Hey, wait!") +end + +function dlg_0_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/neriak/dirzdia_t_zauvirr/darklight_wood/tvatar_post/dirzdia/dirzdia000.mp3", "", "", 3120161704, 1555228530, Spawn) + AddConversationOption(conversation, "Hi.", "dlg_0_4") + StartConversation(conversation, NPC, Spawn, "Hello.") +end + +function dlg_0_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/neriak/dirzdia_t_zauvirr/darklight_wood/tvatar_post/dirzdia/dirzdia010.mp3", "", "", 2956956838, 3113219938, Spawn) + AddConversationOption(conversation, "What kind of help?") + StartConversation(conversation, NPC, Spawn, "Well the waters here are pretty good for fishing. How would you like to help me reel them in?") +end + +function dlg_0_4(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/neriak/dirzdia_t_zauvirr/darklight_wood/tvatar_post/dirzdia/dirzdia001.mp3", "", "", 1088846584, 3200436101, Spawn) + AddConversationOption(conversation, "Hello.", "dlg_0_5") + StartConversation(conversation, NPC, Spawn, "Hi.") +end + +function dlg_0_5(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/neriak/dirzdia_t_zauvirr/darklight_wood/tvatar_post/dirzdia/dirzdia002.mp3", "", "", 3622946514, 3238136826, Spawn) + AddConversationOption(conversation, "... goodbye.", "dlg_0_6") + StartConversation(conversation, NPC, Spawn, "Hello.") +end + +function dlg_0_6(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/neriak/dirzdia_t_zauvirr/darklight_wood/tvatar_post/dirzdia/dirzdia_delivery002.mp3", "", "", 2799282957, 2320910908, Spawn) + AddConversationOption(conversation, "What?", "dlg_0_7") + StartConversation(conversation, NPC, Spawn, "Hey, wait!") +end + +function dlg_0_7(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/neriak/dirzdia_t_zauvirr/darklight_wood/tvatar_post/dirzdia/dirzdia003.mp3", "", "", 1931781458, 1316667418, Spawn) + AddConversationOption(conversation, "Why do you ask?", "dlg_0_8") + StartConversation(conversation, NPC, Spawn, "How good are you at killing?") +end + +function dlg_0_8(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/neriak/dirzdia_t_zauvirr/darklight_wood/tvatar_post/dirzdia/dirzdia004.mp3", "", "", 999431120, 423593637, Spawn) + AddConversationOption(conversation, "What do you want me to do?", "dlg_0_9") + StartConversation(conversation, NPC, Spawn, "Fishing is getting more and more difficult as the razormaw in this river reach maturity. They break my lines, steal my lures, and eat all the fish before I have a chance to catch them! But they sure do taste great when smoked!") +end + +function dlg_0_9(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/neriak/dirzdia_t_zauvirr/darklight_wood/tvatar_post/dirzdia/dirzdia005.mp3", "", "", 3936904424, 544099891, Spawn) + AddConversationOption(conversation, "All right, I'll help you.", "dlg_0_10") + AddConversationOption(conversation, "Find someone else.") + StartConversation(conversation, NPC, Spawn, "Kill them for me so I can fish in peace... and so I can have a tasty dinner. What do you say? I'll compensate you for your time, of course.") +end + +function dlg_0_10(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/neriak/dirzdia_t_zauvirr/darklight_wood/tvatar_post/dirzdia/dirzdia006.mp3", "", "", 1689993769, 508680301, Spawn) + AddConversationOption(conversation, "I'll be back when I've killed them.", "dlg_0_11") + StartConversation(conversation, NPC, Spawn, "Great! I appreciate it!") +end + +function dlg_1_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/neriak/dirzdia_t_zauvirr/darklight_wood/tvatar_post/dirzdia/dirzdia014.mp3", "", "", 3630010163, 822378916, Spawn) + AddConversationOption(conversation, "What kind of fish do you need?", "dlg_1_2") + StartConversation(conversation, NPC, Spawn, "Great! These will go a long ways towards feeding the soldiers stationed at T'Vatar Outpost. Now then, if you'd like, you could help me catch some more fish.") +end + +function dlg_1_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/neriak/dirzdia_t_zauvirr/darklight_wood/tvatar_post/dirzdia/dirzdia015.mp3", "", "", 2001952195, 1089349401, Spawn) + AddConversationOption(conversation, "I can fish them up.", "dlg_1_3") + AddConversationOption(conversation, "I'd prefer not to.") + StartConversation(conversation, NPC, Spawn, "Seared char! I know, their name is repetitive! They swim in the Searing Tendril, before it splits off into the Lower Tendril River. If you could fish me up some, that would be great!") +end + +function dlg_2_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/neriak/dirzdia_t_zauvirr/darklight_wood/tvatar_post/dirzdia/dirzdia014.mp3", "", "", 3630010163, 822378916, Spawn) + AddConversationOption(conversation, "What kind of fish do you need?", "dlg_2_2") + StartConversation(conversation, NPC, Spawn, "Great! These will go a long ways towards feeding the soldiers stationed at T'Vatar Outpost. Now then, if you'd like, you could help me catch some more fish.") +end + +function dlg_2_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/neriak/dirzdia_t_zauvirr/darklight_wood/tvatar_post/dirzdia/dirzdia015.mp3", "", "", 2001952195, 1089349401, Spawn) + AddConversationOption(conversation, "I can fish them up.", "dlg_2_3") + AddConversationOption(conversation, "I'd prefer not to.") + StartConversation(conversation, NPC, Spawn, "Seared char! I know, their name is repetitive! They swim in the Searing Tendril, before it splits off into the Lower Tendril River. If you could fish me up some, that would be great!") +end + +function dlg_2_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/neriak/dirzdia_t_zauvirr/darklight_wood/tvatar_post/dirzdia/dirzdia016.mp3", "", "", 3096333821, 2080368744, Spawn) + StartConversation(conversation, NPC, Spawn, "Glad to hear it! I'll be waiting here... fishing!") +end + +function dlg_4_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/neriak/dirzdia_t_zauvirr/darklight_wood/tvatar_post/dirzdia/dirzdia001.mp3", "", "", 1088846584, 3200436101, Spawn) + AddConversationOption(conversation, "Hello.", "dlg_4_2") + StartConversation(conversation, NPC, Spawn, "Hi.") +end + +function dlg_7_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/neriak/dirzdia_t_zauvirr/darklight_wood/tvatar_post/dirzdia/dirzdia018.mp3", "", "", 2836144377, 248697270, Spawn) + AddConversationOption(conversation, "Smolderfin?", "dlg_7_2") + StartConversation(conversation, NPC, Spawn, "You're a much better fisher than I am. Maybe that's why I enjoy it though. I can always get better. I bet you could catch Smolderfin!") +end + +function dlg_7_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/neriak/dirzdia_t_zauvirr/darklight_wood/tvatar_post/dirzdia/dirzdia019.mp3", "", "", 1258409578, 147829151, Spawn) + AddConversationOption(conversation, "How can we catch him, then?", "dlg_7_3") + StartConversation(conversation, NPC, Spawn, "He's a reclusive one, swims around up in Smoldering Lake. I hooked him once, but he took my pole down with him. Eventually it washed ashore and I got it back, but my favorite lure was gone.") +end + +function dlg_7_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/neriak/dirzdia_t_zauvirr/darklight_wood/tvatar_post/dirzdia/dirzdia021.mp3", "", "", 4015813922, 782743353, Spawn) + AddConversationOption(conversation, "Okay, I'm up for the challenge.", "dlg_7_4") + AddConversationOption(conversation, "I don't think I'm interested.") + StartConversation(conversation, NPC, Spawn, "Like I said, he's in Smoldering Lake. But it's rare that he comes out. He likes to eat the smoldering trout, though. If you catch enough of them and drop them in the lake, all bloody and squirming, I bet that will drag him out.") +end + +function dlg_8_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/neriak/dirzdia_t_zauvirr/darklight_wood/tvatar_post/dirzdia/dirzdia018.mp3", "", "", 2836144377, 248697270, Spawn) + AddConversationOption(conversation, "Smolderfin?", "dlg_8_2") + StartConversation(conversation, NPC, Spawn, "You're a much better fisher than I am. Maybe that's why I enjoy it though. I can always get better. I bet you could catch Smolderfin!") +end + +function dlg_8_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/neriak/dirzdia_t_zauvirr/darklight_wood/tvatar_post/dirzdia/dirzdia019.mp3", "", "", 1258409578, 147829151, Spawn) + AddConversationOption(conversation, "How can we catch him, then?", "dlg_8_3") + StartConversation(conversation, NPC, Spawn, "He's a reclusive one, swims around up in Smoldering Lake. I hooked him once, but he took my pole down with him. Eventually it washed ashore and I got it back, but my favorite lure was gone.") +end + +function dlg_8_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/neriak/dirzdia_t_zauvirr/darklight_wood/tvatar_post/dirzdia/dirzdia021.mp3", "", "", 4015813922, 782743353, Spawn) + AddConversationOption(conversation, "Okay, I'm up for the challenge.", "dlg_8_4") + AddConversationOption(conversation, "I don't think I'm interested.") + StartConversation(conversation, NPC, Spawn, "Like I said, he's in Smoldering Lake. But it's rare that he comes out. He likes to eat the smoldering trout, though. If you catch enough of them and drop them in the lake, all bloody and squirming, I bet that will drag him out.") +end + +function dlg_8_4(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/neriak/dirzdia_t_zauvirr/darklight_wood/tvatar_post/dirzdia/dirzdia022.mp3", "", "", 1365892706, 718371768, Spawn) + AddConversationOption(conversation, "All right.", "dlg_8_5") + StartConversation(conversation, NPC, Spawn, "Good luck! Bring me back my lure if you find it.") +end + +function dlg_9_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/neriak/dirzdia_t_zauvirr/darklight_wood/tvatar_post/dirzdia/dirzdia008.mp3", "", "", 2217132870, 3346276431, Spawn) + AddConversationOption(conversation, "I'm XXXXXXX.", "dlg_9_2") + StartConversation(conversation, NPC, Spawn, "Great! I thought the waters seemed a bit calmer. I'm Dirzdia, by the way.") +end + +function dlg_9_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/neriak/dirzdia_t_zauvirr/darklight_wood/tvatar_post/dirzdia/dirzdia009.mp3", "", "", 389446448, 2794640706, Spawn) + AddConversationOption(conversation, "No.", "dlg_9_3") + AddConversationOption(conversation, "Sometimes.") + AddConversationOption(conversation, "All the time.") + StartConversation(conversation, NPC, Spawn, "Oh I'll never remember that. Tell me, do you fish much?") +end + +function dlg_9_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/neriak/dirzdia_t_zauvirr/darklight_wood/tvatar_post/dirzdia/dirzdia010.mp3", "", "", 2956956838, 3113219938, Spawn) + AddConversationOption(conversation, "What kind of help?") + StartConversation(conversation, NPC, Spawn, "Well the waters here are pretty good for fishing. How would you like to help me reel them in?") +end + +function dlg_10_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/neriak/dirzdia_t_zauvirr/darklight_wood/tvatar_post/dirzdia/dirzdia008.mp3", "", "", 2217132870, 3346276431, Spawn) + AddConversationOption(conversation, "I'm XXXXXXX.", "dlg_10_2") + StartConversation(conversation, NPC, Spawn, "Great! I thought the waters seemed a bit calmer. I'm Dirzdia, by the way.") +end + +function dlg_10_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/neriak/dirzdia_t_zauvirr/darklight_wood/tvatar_post/dirzdia/dirzdia009.mp3", "", "", 389446448, 2794640706, Spawn) + AddConversationOption(conversation, "No.", "dlg_10_3") + AddConversationOption(conversation, "Sometimes.") + AddConversationOption(conversation, "All the time.") + StartConversation(conversation, NPC, Spawn, "Oh I'll never remember that. Tell me, do you fish much?") +end + +function dlg_10_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/neriak/dirzdia_t_zauvirr/darklight_wood/tvatar_post/dirzdia/dirzdia010.mp3", "", "", 2956956838, 3113219938, Spawn) + AddConversationOption(conversation, "What kind of help?", "dlg_10_4") + StartConversation(conversation, NPC, Spawn, "Well the waters here are pretty good for fishing. How would you like to help me reel them in?") +end + +function dlg_10_4(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/neriak/dirzdia_t_zauvirr/darklight_wood/tvatar_post/dirzdia/dirzdia011.mp3", "", "", 3261932029, 3599840953, Spawn) + AddConversationOption(conversation, "Sure, I'll help.", "dlg_10_5") + AddConversationOption(conversation, "I don't think so.") + StartConversation(conversation, NPC, Spawn, "Just help me catch them. Right now I'm trying to catch searing trout. They swim around in the Lower Tendril River. What do you say?") +end + +function dlg_10_5(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/neriak/dirzdia_t_zauvirr/darklight_wood/tvatar_post/dirzdia/dirzdia012.mp3", "", "", 2680874987, 3116118568, Spawn) + AddConversationOption(conversation, "All right.", "dlg_10_6") + StartConversation(conversation, NPC, Spawn, "Great! Just bring them back to me when you've caught them.") +end + +function dlg_11_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/neriak/dirzdia_t_zauvirr/darklight_wood/tvatar_post/dirzdia/dirzdia014.mp3", "", "", 3630010163, 822378916, Spawn) + AddConversationOption(conversation, "What kind of fish do you need?", "dlg_11_2") + StartConversation(conversation, NPC, Spawn, "Great! I hope you enjoyed the fishing here, I certainly do. If you'd like, you could help me catch some more fish.") +end + +function dlg_11_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/neriak/dirzdia_t_zauvirr/darklight_wood/tvatar_post/dirzdia/dirzdia015.mp3", "", "", 2001952195, 1089349401, Spawn) + AddConversationOption(conversation, "I can fish them up.", "dlg_11_3") + AddConversationOption(conversation, "I'd prefer not to.") + StartConversation(conversation, NPC, Spawn, "Seared char! I know, their name is repetitive! They swim in the Searing Tendril, before it splits off into the Lower Tendril River. If you could fish me up some, that would be great!") +end + +function dlg_11_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/neriak/dirzdia_t_zauvirr/darklight_wood/tvatar_post/dirzdia/dirzdia016.mp3", "", "", 3096333821, 2080368744, Spawn) + AddConversationOption(conversation, "I'll be back.", "dlg_11_4") + StartConversation(conversation, NPC, Spawn, "Glad to hear it! I'll be waiting here... fishing!") +end + +function dlg_13_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/neriak/dirzdia_t_zauvirr/darklight_wood/tvatar_post/dirzdia/dirzdia_delivery001.mp3", "", "", 1749958115, 2883042757, Spawn) + AddConversationOption(conversation, "All right. Goodbye.", "dlg_13_2") + StartConversation(conversation, NPC, Spawn, "Perfect! Thanks! Just put it on the ground there.") +end + +function dlg_13_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/neriak/dirzdia_t_zauvirr/darklight_wood/tvatar_post/dirzdia/dirzdia003.mp3", "", "", 1931781458, 1316667418, Spawn) + AddConversationOption(conversation, "Why do you ask?", "dlg_13_3") + StartConversation(conversation, NPC, Spawn, "How good are you at killing?") +end + +function dlg_13_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/neriak/dirzdia_t_zauvirr/darklight_wood/tvatar_post/dirzdia/dirzdia004.mp3", "", "", 999431120, 423593637, Spawn) + AddConversationOption(conversation, "What do you want me to do?", "dlg_13_4") + StartConversation(conversation, NPC, Spawn, "Fishing is getting more and more difficult as the razormaw in this river reach maturity. They break my lines, steal my lures, and eat all the fish before I have a chance to catch them! But they sure do taste great when smoked!") +end + +function dlg_13_4(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/neriak/dirzdia_t_zauvirr/darklight_wood/tvatar_post/dirzdia/dirzdia005.mp3", "", "", 3936904424, 544099891, Spawn) + AddConversationOption(conversation, "All right, I'll help you.", "dlg_13_5") + AddConversationOption(conversation, "Find someone else.") + StartConversation(conversation, NPC, Spawn, "Kill them for me so I can fish in peace... and so I can have a tasty dinner. What do you say? I'll compensate you for your time, of course.") +end + +function dlg_13_5(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/neriak/dirzdia_t_zauvirr/darklight_wood/tvatar_post/dirzdia/dirzdia006.mp3", "", "", 1689993769, 508680301, Spawn) + AddConversationOption(conversation, "I'll be back when I've killed them.", "dlg_13_6") + StartConversation(conversation, NPC, Spawn, "Great! I appreciate it!") +end + +function dlg_21_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/neriak/dirzdia_t_zauvirr/darklight_wood/tvatar_post/dirzdia/dirzdia_delivery001.mp3", "", "", 1749958115, 2883042757, Spawn) + AddConversationOption(conversation, "All right. Goodbye.", "dlg_21_2") + StartConversation(conversation, NPC, Spawn, "Perfect! Thanks! Just put it on the ground there.") +end + +function dlg_21_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/neriak/dirzdia_t_zauvirr/darklight_wood/tvatar_post/dirzdia/dirzdia_delivery002.mp3", "", "", 2799282957, 2320910908, Spawn) + AddConversationOption(conversation, "What?", "dlg_21_3") + StartConversation(conversation, NPC, Spawn, "Hey, wait!") +end + +function dlg_21_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/neriak/dirzdia_t_zauvirr/darklight_wood/tvatar_post/dirzdia/dirzdia003.mp3", "", "", 1931781458, 1316667418, Spawn) + AddConversationOption(conversation, "Why do you ask?", "dlg_21_4") + StartConversation(conversation, NPC, Spawn, "How good are you at killing?") +end + +function dlg_21_4(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/neriak/dirzdia_t_zauvirr/darklight_wood/tvatar_post/dirzdia/dirzdia004.mp3", "", "", 999431120, 423593637, Spawn) + AddConversationOption(conversation, "What do you want me to do?", "dlg_21_5") + StartConversation(conversation, NPC, Spawn, "Fishing is getting more and more difficult as the razormaw in this river reach maturity. They break my lines, steal my lures, and eat all the fish before I have a chance to catch them! But they sure do taste great when smoked!") +end + +function dlg_21_5(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/neriak/dirzdia_t_zauvirr/darklight_wood/tvatar_post/dirzdia/dirzdia005.mp3", "", "", 3936904424, 544099891, Spawn) + AddConversationOption(conversation, "All right, I'll help you.", "dlg_21_6") + AddConversationOption(conversation, "Find someone else.") + StartConversation(conversation, NPC, Spawn, "Kill them for me so I can fish in peace... and so I can have a tasty dinner. What do you say? I'll compensate you for your time, of course.") +end + +function dlg_22_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/neriak/dirzdia_t_zauvirr/darklight_wood/tvatar_post/dirzdia/dirzdia001.mp3", "", "", 1088846584, 3200436101, Spawn) + AddConversationOption(conversation, "Hello.", "dlg_22_2") + StartConversation(conversation, NPC, Spawn, "Hi.") +end + +function dlg_22_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/neriak/dirzdia_t_zauvirr/darklight_wood/tvatar_post/dirzdia/dirzdia002.mp3", "", "", 3622946514, 3238136826, Spawn) + AddConversationOption(conversation, "... goodbye.", "dlg_22_3") + StartConversation(conversation, NPC, Spawn, "Hello.") +end + +function dlg_22_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/neriak/dirzdia_t_zauvirr/darklight_wood/tvatar_post/dirzdia/dirzdia_delivery002.mp3", "", "", 2799282957, 2320910908, Spawn) + AddConversationOption(conversation, "What?", "dlg_22_4") + StartConversation(conversation, NPC, Spawn, "Hey, wait!") +end + +function dlg_22_4(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/neriak/dirzdia_t_zauvirr/darklight_wood/tvatar_post/dirzdia/dirzdia003.mp3", "", "", 1931781458, 1316667418, Spawn) + AddConversationOption(conversation, "Why do you ask?", "dlg_22_5") + StartConversation(conversation, NPC, Spawn, "How good are you at killing?") +end + +function dlg_22_5(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/neriak/dirzdia_t_zauvirr/darklight_wood/tvatar_post/dirzdia/dirzdia004.mp3", "", "", 999431120, 423593637, Spawn) + AddConversationOption(conversation, "What do you want me to do?", "dlg_22_6") + StartConversation(conversation, NPC, Spawn, "Fishing is getting more and more difficult as the razormaw in this river reach maturity. They break my lines, steal my lures, and eat all the fish before I have a chance to catch them! But they sure do taste great when smoked!") +end + +function dlg_22_6(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/neriak/dirzdia_t_zauvirr/darklight_wood/tvatar_post/dirzdia/dirzdia005.mp3", "", "", 3936904424, 544099891, Spawn) + AddConversationOption(conversation, "All right, I'll help you.", "dlg_22_7") + AddConversationOption(conversation, "Find someone else.") + StartConversation(conversation, NPC, Spawn, "Kill them for me so I can fish in peace... and so I can have a tasty dinner. What do you say? I'll compensate you for your time, of course.") +end + +function dlg_22_7(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/neriak/dirzdia_t_zauvirr/darklight_wood/tvatar_post/dirzdia/dirzdia006.mp3", "", "", 1689993769, 508680301, Spawn) + AddConversationOption(conversation, "I'll be back when I've killed them.", "dlg_22_8") + StartConversation(conversation, NPC, Spawn, "Great! I appreciate it!") +end + +function dlg_23_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/neriak/dirzdia_t_zauvirr/darklight_wood/tvatar_post/dirzdia/dirzdia008.mp3", "", "", 2217132870, 3346276431, Spawn) + AddConversationOption(conversation, "I'm Chayne.", "dlg_23_2") + StartConversation(conversation, NPC, Spawn, "Great! I thought the waters seemed a bit calmer. I'm Dirzdia, by the way.") +end + +function dlg_23_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/neriak/dirzdia_t_zauvirr/darklight_wood/tvatar_post/dirzdia/dirzdia009.mp3", "", "", 389446448, 2794640706, Spawn) + AddConversationOption(conversation, "No.", "dlg_23_3") + AddConversationOption(conversation, "Sometimes.") + AddConversationOption(conversation, "All the time.") + StartConversation(conversation, NPC, Spawn, "Oh I'll never remember that. Tell me, do you fish much?") +end + +function dlg_23_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/neriak/dirzdia_t_zauvirr/darklight_wood/tvatar_post/dirzdia/dirzdia010.mp3", "", "", 2956956838, 3113219938, Spawn) + AddConversationOption(conversation, "What kind of help?") + StartConversation(conversation, NPC, Spawn, "Well the waters here are pretty good for fishing. How would you like to help me reel them in?") +end + +function dlg_23_4(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/neriak/dirzdia_t_zauvirr/darklight_wood/tvatar_post/dirzdia/dirzdia011.mp3", "", "", 3261932029, 3599840953, Spawn) + AddConversationOption(conversation, "Sure, I'll help.", "dlg_23_5") + AddConversationOption(conversation, "I don't think so.") + StartConversation(conversation, NPC, Spawn, "Just help me catch them. Right now I'm trying to catch searing trout. They swim around in the Lower Tendril River. What do you say?") +end + +function dlg_24_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/neriak/dirzdia_t_zauvirr/darklight_wood/tvatar_post/dirzdia/dirzdia008.mp3", "", "", 2217132870, 3346276431, Spawn) + AddConversationOption(conversation, "I'm Chayne.", "dlg_24_2") + StartConversation(conversation, NPC, Spawn, "Great! I thought the waters seemed a bit calmer. I'm Dirzdia, by the way.") +end + +function dlg_24_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/neriak/dirzdia_t_zauvirr/darklight_wood/tvatar_post/dirzdia/dirzdia009.mp3", "", "", 389446448, 2794640706, Spawn) + AddConversationOption(conversation, "No.", "dlg_24_3") + AddConversationOption(conversation, "Sometimes.") + AddConversationOption(conversation, "All the time.") + StartConversation(conversation, NPC, Spawn, "Oh I'll never remember that. Tell me, do you fish much?") +end + +function dlg_24_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/neriak/dirzdia_t_zauvirr/darklight_wood/tvatar_post/dirzdia/dirzdia010.mp3", "", "", 2956956838, 3113219938, Spawn) + AddConversationOption(conversation, "What kind of help?") + StartConversation(conversation, NPC, Spawn, "Well the waters here are pretty good for fishing. How would you like to help me reel them in?") +end + +function dlg_24_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/neriak/dirzdia_t_zauvirr/darklight_wood/tvatar_post/dirzdia/dirzdia003.mp3", "", "", 1931781458, 1316667418, Spawn) + AddConversationOption(conversation, "Why do you ask?", "dlg_24_4") + StartConversation(conversation, NPC, Spawn, "How good are you at killing?") +end + +function dlg_24_4(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/neriak/dirzdia_t_zauvirr/darklight_wood/tvatar_post/dirzdia/dirzdia011.mp3", "", "", 3261932029, 3599840953, Spawn) + AddConversationOption(conversation, "Sure, I'll help.", "dlg_24_5") + AddConversationOption(conversation, "I don't think so.") + StartConversation(conversation, NPC, Spawn, "Just help me catch them. Right now I'm trying to catch searing trout. They swim around in the Lower Tendril River. What do you say?") +end + +function dlg_24_5(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/neriak/dirzdia_t_zauvirr/darklight_wood/tvatar_post/dirzdia/dirzdia012.mp3", "", "", 2680874987, 3116118568, Spawn) + AddConversationOption(conversation, "All right.", "dlg_24_6") + StartConversation(conversation, NPC, Spawn, "Great! Just bring them back to me when you've caught them.") +end + +function dlg_24_6(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/neriak/dirzdia_t_zauvirr/darklight_wood/tvatar_post/dirzdia/dirzdia006.mp3", "", "", 1689993769, 508680301, Spawn) + AddConversationOption(conversation, "I'll be back when I've killed them.", "dlg_24_7") + StartConversation(conversation, NPC, Spawn, "Great! I appreciate it!") +end + +function dlg_25_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/neriak/dirzdia_t_zauvirr/darklight_wood/tvatar_post/dirzdia/dirzdia014.mp3", "", "", 3630010163, 822378916, Spawn) + AddConversationOption(conversation, "What kind of fish do you need?", "dlg_25_2") + StartConversation(conversation, NPC, Spawn, "Great! I hope you enjoyed the fishing here, I certainly do. If you'd like, you could help me catch some more fish.") +end + +function dlg_25_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/neriak/dirzdia_t_zauvirr/darklight_wood/tvatar_post/dirzdia/dirzdia015.mp3", "", "", 2001952195, 1089349401, Spawn) + AddConversationOption(conversation, "I can fish them up.", "dlg_25_3") + AddConversationOption(conversation, "I'd prefer not to.") + StartConversation(conversation, NPC, Spawn, "Seared char! I know, their name is repetitive! They swim in the Searing Tendril, before it splits off into the Lower Tendril River. If you could fish me up some, that would be great!") +end + +function dlg_26_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/neriak/dirzdia_t_zauvirr/darklight_wood/tvatar_post/dirzdia/dirzdia014.mp3", "", "", 3630010163, 822378916, Spawn) + AddConversationOption(conversation, "What kind of fish do you need?", "dlg_26_2") + StartConversation(conversation, NPC, Spawn, "Great! I hope you enjoyed the fishing here, I certainly do. If you'd like, you could help me catch some more fish.") +end + +function dlg_26_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/neriak/dirzdia_t_zauvirr/darklight_wood/tvatar_post/dirzdia/dirzdia015.mp3", "", "", 2001952195, 1089349401, Spawn) + AddConversationOption(conversation, "I can fish them up.", "dlg_26_3") + AddConversationOption(conversation, "I'd prefer not to.") + StartConversation(conversation, NPC, Spawn, "Seared char! I know, their name is repetitive! They swim in the Searing Tendril, before it splits off into the Lower Tendril River. If you could fish me up some, that would be great!") +end + +function dlg_26_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/neriak/dirzdia_t_zauvirr/darklight_wood/tvatar_post/dirzdia/dirzdia016.mp3", "", "", 3096333821, 2080368744, Spawn) + AddConversationOption(conversation, "I'll be back.", "dlg_26_4") + StartConversation(conversation, NPC, Spawn, "Glad to hear it! I'll be waiting here... fishing!") +end + +function dlg_32_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/neriak/dirzdia_t_zauvirr/darklight_wood/tvatar_post/dirzdia/dirzdia_delivery001.mp3", "", "", 1749958115, 2883042757, Spawn) + AddConversationOption(conversation, "All right. Goodbye.", "dlg_32_2") + StartConversation(conversation, NPC, Spawn, "Perfect! Thanks! Just put it on the ground there.") +end + +function dlg_32_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/neriak/dirzdia_t_zauvirr/darklight_wood/tvatar_post/dirzdia/dirzdia_delivery002.mp3", "", "", 2799282957, 2320910908, Spawn) + AddConversationOption(conversation, "What?", "dlg_32_3") + StartConversation(conversation, NPC, Spawn, "Hey, wait!") +end + +function dlg_32_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/neriak/dirzdia_t_zauvirr/darklight_wood/tvatar_post/dirzdia/dirzdia003.mp3", "", "", 1931781458, 1316667418, Spawn) + AddConversationOption(conversation, "Why do you ask?", "dlg_32_4") + StartConversation(conversation, NPC, Spawn, "How good are you at killing?") +end + +function dlg_32_4(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/neriak/dirzdia_t_zauvirr/darklight_wood/tvatar_post/dirzdia/dirzdia004.mp3", "", "", 999431120, 423593637, Spawn) + AddConversationOption(conversation, "What do you want me to do?", "dlg_32_5") + StartConversation(conversation, NPC, Spawn, "Fishing is getting more and more difficult as the razormaw in this river reach maturity. They break my lines, steal my lures, and eat all the fish before I have a chance to catch them! But they sure do taste great when smoked!") +end + +function dlg_32_5(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/neriak/dirzdia_t_zauvirr/darklight_wood/tvatar_post/dirzdia/dirzdia005.mp3", "", "", 3936904424, 544099891, Spawn) + AddConversationOption(conversation, "All right, I'll help you.", "dlg_32_6") + AddConversationOption(conversation, "Find someone else.") + StartConversation(conversation, NPC, Spawn, "Kill them for me so I can fish in peace... and so I can have a tasty dinner. What do you say? I'll compensate you for your time, of course.") +end + +function dlg_32_6(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/neriak/dirzdia_t_zauvirr/darklight_wood/tvatar_post/dirzdia/dirzdia006.mp3", "", "", 1689993769, 508680301, Spawn) + AddConversationOption(conversation, "I'll be back when I've killed them.", "dlg_32_7") + StartConversation(conversation, NPC, Spawn, "Great! I appreciate it!") +end + +function dlg_38_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/neriak/dirzdia_t_zauvirr/darklight_wood/tvatar_post/dirzdia/dirzdia018.mp3", "", "", 2836144377, 248697270, Spawn) + AddConversationOption(conversation, "Smolderfin?", "dlg_38_2") + StartConversation(conversation, NPC, Spawn, "You're great! A much better fisher than I am, maybe that's why I enjoy it though, I can always get better. I bet you could catch Smolderfin!") +end + +function dlg_38_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/neriak/dirzdia_t_zauvirr/darklight_wood/tvatar_post/dirzdia/dirzdia019.mp3", "", "", 1258409578, 147829151, Spawn) + AddConversationOption(conversation, "Maybe I could fish him up for you.", "dlg_38_3") + StartConversation(conversation, NPC, Spawn, "He's a reclusive one, swims around up in Smoldering Lake. I hooked him once, but he took my pole down with him. Eventually it washed ashore and I got it back, but my favorite lure was gone.") +end + +function dlg_38_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/neriak/dirzdia_t_zauvirr/darklight_wood/tvatar_post/dirzdia/dirzdia020.mp3", "", "", 1402216958, 1000093253, Spawn) + AddConversationOption(conversation, "Where can I find him?", "dlg_38_4") + StartConversation(conversation, NPC, Spawn, "Maybe if you were a giant. Smolderfin is huge. But if you want to try I won't stop you, especially if it means I might get my lure back. I'll just tell you to be careful.") +end + +function dlg_38_4(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/neriak/dirzdia_t_zauvirr/darklight_wood/tvatar_post/dirzdia/dirzdia021.mp3", "", "", 4015813922, 782743353, Spawn) + AddConversationOption(conversation, "Ok, I'm up for the challenge.", "dlg_38_5") + AddConversationOption(conversation, "I don't think I'm interested.") + StartConversation(conversation, NPC, Spawn, "Like I said, he's in Smoldering Lake. But it's rare that he comes out. He likes to eat the smoldering trout, though. If you catch enough of them and drop them in the lake, all bloody and squirming, I bet that will drag him out.") +end + +function dlg_38_5(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/neriak/dirzdia_t_zauvirr/darklight_wood/tvatar_post/dirzdia/dirzdia022.mp3", "", "", 1365892706, 718371768, Spawn) + AddConversationOption(conversation, "All right.", "dlg_38_6") + StartConversation(conversation, NPC, Spawn, "Good luck! Bring me back my lure if you find it.") +end + +function dlg_39_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/neriak/dirzdia_t_zauvirr/darklight_wood/tvatar_post/dirzdia/dirzdia024.mp3", "", "", 4053635028, 357139583, Spawn) + AddConversationOption(conversation, "You're welcome.", "dlg_39_2") + StartConversation(conversation, NPC, Spawn, "You did? That's amazing. This is perfect, maybe now I'll finally catch something. Thank you, thank you very much!") +end + +function dlg_47_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/neriak/dirzdia_t_zauvirr/darklight_wood/tvatar_post/dirzdia/dirzdia008.mp3", "", "", 2217132870, 3346276431, Spawn) + AddConversationOption(conversation, "I'm Hacaci.", "dlg_47_2") + StartConversation(conversation, NPC, Spawn, "Great! I thought the waters seemed a bit calmer. I'm Dirzdia, by the way. I've been sent out here to catch fish to help feed those stationed at T'Vatar Outpost.") +end + +function dlg_47_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/neriak/dirzdia_t_zauvirr/darklight_wood/tvatar_post/dirzdia/dirzdia009.mp3", "", "", 389446448, 2794640706, Spawn) + AddConversationOption(conversation, "No.", "dlg_47_3") + AddConversationOption(conversation, "Sometimes.") + AddConversationOption(conversation, "All the time.") + StartConversation(conversation, NPC, Spawn, "Oh, I'll never remember that. Tell me, do you fish much?") +end + +function dlg_47_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/neriak/dirzdia_t_zauvirr/darklight_wood/tvatar_post/dirzdia/dirzdia010.mp3", "", "", 2956956838, 3113219938, Spawn) + AddConversationOption(conversation, "What kind of help?", "dlg_47_4") + StartConversation(conversation, NPC, Spawn, "Well, the waters here are pretty good for fishing. How would you like to help me reel them in?") +end + +function dlg_47_4(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/neriak/dirzdia_t_zauvirr/darklight_wood/tvatar_post/dirzdia/dirzdia011.mp3", "", "", 3261932029, 3599840953, Spawn) + AddConversationOption(conversation, "Sure, I'll help.", "dlg_47_5") + AddConversationOption(conversation, "I don't think so.") + StartConversation(conversation, NPC, Spawn, "Just help me catch them. Right now I'm trying to catch searing trout. They swim around in the Lower Tendril River. What do you say?") +end + +function dlg_48_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/neriak/dirzdia_t_zauvirr/darklight_wood/tvatar_post/dirzdia/dirzdia008.mp3", "", "", 2217132870, 3346276431, Spawn) + AddConversationOption(conversation, "I'm Hacaci.", "dlg_48_2") + StartConversation(conversation, NPC, Spawn, "Great! I thought the waters seemed a bit calmer. I'm Dirzdia, by the way. I've been sent out here to catch fish to help feed those stationed at T'Vatar Outpost.") +end + +function dlg_48_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/neriak/dirzdia_t_zauvirr/darklight_wood/tvatar_post/dirzdia/dirzdia009.mp3", "", "", 389446448, 2794640706, Spawn) + AddConversationOption(conversation, "No.", "dlg_48_3") + AddConversationOption(conversation, "Sometimes.") + AddConversationOption(conversation, "All the time.") + StartConversation(conversation, NPC, Spawn, "Oh, I'll never remember that. Tell me, do you fish much?") +end + +function dlg_48_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/neriak/dirzdia_t_zauvirr/darklight_wood/tvatar_post/dirzdia/dirzdia010.mp3", "", "", 2956956838, 3113219938, Spawn) + AddConversationOption(conversation, "What kind of help?") + StartConversation(conversation, NPC, Spawn, "Well, the waters here are pretty good for fishing. How would you like to help me reel them in?") +end + +function dlg_48_4(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/neriak/dirzdia_t_zauvirr/darklight_wood/tvatar_post/dirzdia/dirzdia011.mp3", "", "", 3261932029, 3599840953, Spawn) + AddConversationOption(conversation, "Sure, I'll help.", "dlg_48_5") + AddConversationOption(conversation, "I don't think so.") + StartConversation(conversation, NPC, Spawn, "Just help me catch them. Right now I'm trying to catch searing trout. They swim around in the Lower Tendril River. What do you say?") +end + +function dlg_49_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/neriak/dirzdia_t_zauvirr/darklight_wood/tvatar_post/dirzdia/dirzdia008.mp3", "", "", 2217132870, 3346276431, Spawn) + AddConversationOption(conversation, "I'm Hacaci.", "dlg_49_2") + StartConversation(conversation, NPC, Spawn, "Great! I thought the waters seemed a bit calmer. I'm Dirzdia, by the way. I've been sent out here to catch fish to help feed those stationed at T'Vatar Outpost.") +end + +function dlg_49_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/neriak/dirzdia_t_zauvirr/darklight_wood/tvatar_post/dirzdia/dirzdia009.mp3", "", "", 389446448, 2794640706, Spawn) + AddConversationOption(conversation, "No.", "dlg_49_3") + AddConversationOption(conversation, "Sometimes.") + AddConversationOption(conversation, "All the time.") + StartConversation(conversation, NPC, Spawn, "Oh, I'll never remember that. Tell me, do you fish much?") +end + +function dlg_49_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/neriak/dirzdia_t_zauvirr/darklight_wood/tvatar_post/dirzdia/dirzdia010.mp3", "", "", 2956956838, 3113219938, Spawn) + AddConversationOption(conversation, "What kind of help?") + StartConversation(conversation, NPC, Spawn, "Well, the waters here are pretty good for fishing. How would you like to help me reel them in?") +end + +function dlg_49_4(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/neriak/dirzdia_t_zauvirr/darklight_wood/tvatar_post/dirzdia/dirzdia011.mp3", "", "", 3261932029, 3599840953, Spawn) + AddConversationOption(conversation, "Sure, I'll help.", "dlg_49_5") + AddConversationOption(conversation, "I don't think so.") + StartConversation(conversation, NPC, Spawn, "Just help me catch them. Right now I'm trying to catch searing trout. They swim around in the Lower Tendril River. What do you say?") +end + +function dlg_49_5(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/neriak/dirzdia_t_zauvirr/darklight_wood/tvatar_post/dirzdia/dirzdia012.mp3", "", "", 2680874987, 3116118568, Spawn) + AddConversationOption(conversation, "All right.", "dlg_49_6") + StartConversation(conversation, NPC, Spawn, "Great! Just bring them back to me when you've caught them.") +end + +]]-- \ No newline at end of file diff --git a/server/SpawnScripts/Darklight/DrizasNRyt.lua b/server/SpawnScripts/Darklight/DrizasNRyt.lua new file mode 100644 index 000000000..f5d1aac17 --- /dev/null +++ b/server/SpawnScripts/Darklight/DrizasNRyt.lua @@ -0,0 +1,14 @@ +--[[ + Script Name : SpawnScripts/Darklight/DrizasNRyt.lua + Script Purpose : Drizas N'Ryt + Script Author : John Adams + Script Date : 2009.02.01 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + + +function hailed(NPC, Spawn) + -- need to find a standard DEF greeting + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_1_1001.mp3", "Why must you bother me?", "", 0, 0, Spawn) +end + diff --git a/server/SpawnScripts/Darklight/FileylAlyylharil.lua b/server/SpawnScripts/Darklight/FileylAlyylharil.lua new file mode 100644 index 000000000..f80766d24 --- /dev/null +++ b/server/SpawnScripts/Darklight/FileylAlyylharil.lua @@ -0,0 +1,287 @@ +--[[ + Script Name : SpawnScripts/Darklight/FileylAlyylharil.lua + Script Purpose : Fileyl Alyylharil + Script Author : John Adams + Script Date : 2009.01.31 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +Arasai = 17 +QUEST_1 = 80 +QUEST_2 = 81 +QUEST_3 = 82 +QUEST_4 = 83 + +function spawn(NPC) + ProvidesQuest(NPC, QUEST_1) + ProvidesQuest(NPC, QUEST_2) + ProvidesQuest(NPC, QUEST_3) + ProvidesQuest(NPC, QUEST_4) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + if HasCompletedQuest(Spawn, QUEST_1) then + if HasCompletedQuest(Spawn, QUEST_2) then + if HasCompletedQuest(Spawn, QUEST_3) then + if HasCompletedQuest(Spawn, QUEST_4) then + HelloAgain(NPC, Spawn) + elseif HasQuest(Spawn, QUEST_4) then + HelloAgain(NPC, Spawn) + else + LeavingHateAnytimeSoon(NPC, Spawn, conversation) + end + elseif HasQuest(Spawn, QUEST_3) then + TalkToMeLater(NPC, Spawn) + else + DidYouCollectWeeds(NPC, Spawn, conversation) + end + elseif HasQuest(Spawn, QUEST_2) then + DidYouCollectWeeds(NPC, Spawn, conversation) + else + DoYouHaveThePelts(NPC, Spawn, conversation) + end + elseif HasQuest(Spawn, QUEST_1) then + DoYouHaveThePelts(NPC, Spawn, conversation) + else + if GetRace(Spawn) == Arasai then + OneOfYou(NPC, Spawn, conversation) + else + NewToHatesEnvy(NPC, Spawn, conversation) + end + end + + --[[ + + + + if convo==8 then + PlayFlavor(NPC, "voiceover/english/neriak/fileyl_alyylharil/darklight_wood/hates_envy/fileyl/fileyl100.mp3", "", "", 197775186, 684715500, Spawn) + AddConversationOption(conversation, "I found this pelt that you might be interested in.", "dlg_8_1") + AddConversationOption(conversation, "Nope.") + StartConversation(conversation, NPC, Spawn, "I guess you'll be leaving soon, eh?") + end + + if convo==9 then + + end + + if convo==11 then + + end + + if convo==13 then + PlayFlavor(NPC, "voiceover/english/neriak/fileyl_alyylharil/darklight_wood/hates_envy/fileyl/fileyl004.mp3", "", "", 3186146596, 1953587154, Spawn) + AddConversationOption(conversation, "Yes.", "dlg_13_1") + StartConversation(conversation, NPC, Spawn, "Do you have the pelts?") + end + + if convo==16 then + PlayFlavor(NPC, "voiceover/english/neriak/fileyl_alyylharil/darklight_wood/hates_envy/fileyl/fileyl008.mp3", "", "", 3278232788, 3073634729, Spawn) + AddConversationOption(conversation, "Yes, I did. Here you go.", "dlg_16_1") + StartConversation(conversation, NPC, Spawn, "Did you collect the weeds?") + end + + if convo==19 then + PlayFlavor(NPC, "voiceover/english/neriak/fileyl_alyylharil/darklight_wood/hates_envy/fileyl/fileyl011.mp3", "", "", 1920696283, 4232876553, Spawn) + AddConversationOption(conversation, "Maybe, why?", "dlg_19_1") + StartConversation(conversation, NPC, Spawn, "Hello again. Leaving Hate's Envy anytime soon?") + end--]] +end + +--------------------------------------------------------------------------------------------- +-- QUEST 1 +--------------------------------------------------------------------------------------------- + +function NewToHatesEnvy(NPC, Spawn, conversation) + PlayFlavor(NPC, "voiceover/english/neriak/fileyl_alyylharil/darklight_wood/hates_envy/fileyl/fileyl000.mp3", "", "", 3623847893, 3999510628, Spawn) + AddConversationOption(conversation, "Yes.", "dlg_3_1") + StartConversation(conversation, NPC, Spawn, "Hello. New to Hate's Envy?") +end + +function dlg_3_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/neriak/fileyl_alyylharil/darklight_wood/hates_envy/fileyl/fileyl001.mp3", "", "", 3801739584, 171673650, Spawn) + AddConversationOption(conversation, "What work do you have?", "dlg_3_2") + StartConversation(conversation, NPC, Spawn, "I thought so, you had that look about you. I'm not sure if you're familiar with the way things work around here, but in general Hate's Envy tends to attract people looking for work. Immigration laws in Neriak have relaxed somewhat lately, and Hate's Envy has reaped the benefits of that. For someone like me, that means a large labor force. Which is, I imagine, why you're speaking with me--for work.") +end + +function dlg_3_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/neriak/fileyl_alyylharil/darklight_wood/hates_envy/fileyl/fileyl002.mp3", "", "", 648997851, 4053921867, Spawn) + AddConversationOption(conversation, "All right.", "OfferQuest1") + AddConversationOption(conversation, "I'm not interested.") + StartConversation(conversation, NPC, Spawn, "I don't think it matters much to you. It will earn you money, that's what's important. I've got it on good authority that the mayor is looking to clear out the dusk prowlers. Now, this is good, because they've been nothing but trouble since they got here. But it's also bad, because the more of them there are around the easier it is to get their pelts. Without pelts, I don't make any money. Thus, I need you to go collect some pelts for me.") +end + +function OneOfYou(NPC, Spawn, conversation) + PlayFlavor(NPC, "voiceover/english/neriak/fileyl_alyylharil/darklight_wood/hates_envy/fileyl/fileyl000_arasai.mp3", "", "", 2813168737, 3167084012, Spawn) + AddConversationOption(conversation, "One of me?", "dlg_2_1") + StartConversation(conversation, NPC, Spawn, "Ah, it's one of... you.") +end + +function dlg_2_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/neriak/fileyl_alyylharil/darklight_wood/hates_envy/fileyl/fileyl001_arasai.mp3", "", "", 1120312592, 2814949135, Spawn) + AddConversationOption(conversation, "Distaste?", "dlg_2_2") + StartConversation(conversation, NPC, Spawn, "Yes. One of you. One of Cristanos' chosen. You will get special treatment if you travel to Neriak. But don't worry, for each unearned right the Queen drapes about your shoulders, the distaste some have for you will only increase.") +end + +function dlg_2_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/neriak/fileyl_alyylharil/darklight_wood/hates_envy/fileyl/fileyl002_arasai.mp3", "", "", 69953400, 3339174619, Spawn) + AddConversationOption(conversation, "Very well.", "dlg_2_3") + AddConversationOption(conversation, "I am no slave.") + StartConversation(conversation, NPC, Spawn, "You are not Teir'Dal, you are but our slave. Keeping that in mind at all times will make your time spent in our company all the easier. Forget it and, well, there are some who need little excuse to start trouble, especially with one of you.") +end + +function dlg_2_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/neriak/fileyl_alyylharil/darklight_wood/hates_envy/fileyl/fileyl003_arasai.mp3", "", "", 2450188832, 1514540923, Spawn) + AddConversationOption(conversation, "What work?", "OfferQuest1") + StartConversation(conversation, NPC, Spawn, "And talking like that will only hasten your demise. If you're looking for acceptance, go find Queen Cristanos. If you're looking for work, then you'll find it here.") +end + +function OfferQuest1(NPC, Spawn) + FaceTarget(NPC, Spawn) + OfferQuest(NPC, Spawn, QUEST_1) +end + +function DoYouHaveThePelts(NPC, Spawn, conversation) + PlayFlavor(NPC, "voiceover/english/neriak/fileyl_alyylharil/darklight_wood/hates_envy/fileyl/fileyl004.mp3", "", "", 3186146596, 1953587154, Spawn) + + if (HasCompletedQuest(Spawn, QUEST_1) and not HasCompletedQuest(Spawn, QUEST_2)) or (HasQuest(Spawn, QUEST_1) and GetQuestStep(Spawn, QUEST_1) == 2) then + AddConversationOption(conversation, "Yes.", "dlg_7_1") + else + AddConversationOption(conversation, "Not yet.") + end + + StartConversation(conversation, NPC, Spawn, "Do you have the pelts?") +end + +function dlg_7_1(NPC, Spawn) + if HasQuest(Spawn, QUEST_1) then + SetStepComplete(Spawn, QUEST_1, 2) + end + + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/neriak/fileyl_alyylharil/darklight_wood/hates_envy/fileyl/fileyl005.mp3", "", "", 2096271371, 3465768991, Spawn) + AddConversationOption(conversation, "What work?", "dlg_7_2") + StartConversation(conversation, NPC, Spawn, "Perfect. These are fine. As promised here's your payment. Keep working for me and I'll be sure to put in a good word for you with my political contacts in Neriak. I do have more work if you're interested.") +end + +------------------------------------------------------------------------------------- +-- QUEST 2 +-------------------------------------------------------------------------------------- + +function dlg_7_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/neriak/fileyl_alyylharil/darklight_wood/hates_envy/fileyl/fileyl006.mp3", "", "", 3456710239, 1509006332, Spawn) + AddConversationOption(conversation, "I can do that.", "OfferQuest2") + AddConversationOption(conversation, "This doesn't sound like something I'd be interested in.") + StartConversation(conversation, NPC, Spawn, "I use the Malkaen Weed that grows around here as part of a curing process. The process takes a very large amount of the weed, though. Fortunately, nobody ever sells the stuff since it's lying around everywhere. As such, it's dirt cheap or free, you just have to have someone to collect it. Which is what I'd like you to do.") +end + +function OfferQuest2(NPC, Spawn) + FaceTarget(NPC, Spawn) + OfferQuest(NPC, Spawn, QUEST_2) +end + +function DidYouCollectWeeds(NPC, Spawn, conversation) + PlayFlavor(NPC, "voiceover/english/neriak/fileyl_alyylharil/darklight_wood/hates_envy/fileyl/fileyl008.mp3", "", "", 3278232788, 3073634729, Spawn) + + if (HasCompletedQuest(Spawn, QUEST_2) and not HasCompletedQuest(Spawn, QUEST_3)) or (HasQuest(Spawn, QUEST_2) and GetQuestStep(Spawn, QUEST_2) == 2) then + AddConversationOption(conversation, "Yes, I did. Here you go.", "dlg_9_1") + else + AddConversationOption(conversation, "Not yet.") + end + + StartConversation(conversation, NPC, Spawn, "Did you collect the weeds?") +end + +function dlg_9_1(NPC, Spawn) + if HasQuest(Spawn, QUEST_2) then + SetStepComplete(Spawn, QUEST_2, 2) + end + + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/neriak/fileyl_alyylharil/darklight_wood/hates_envy/fileyl/fileyl009.mp3", "", "", 3832374147, 290832441, Spawn) + AddConversationOption(conversation, "I can bring it to her.", "OfferQuest3") + AddConversationOption(conversation, "I do mind, actually.") + StartConversation(conversation, NPC, Spawn, "Good, good. I can get to work on more orders now. On that note, I've completed an order and need it delivered. Do you mind running it to the customer for me? The order is for Danya Halfmoon, she's usually outside at her anvil, just west of here. Yah, I'd do it but... well she's been quite annoying lately.") +end + +--------------------------------------------------------------------------------------------- +-- QUEST 3 +--------------------------------------------------------------------------------------------- + +function OfferQuest3(NPC, Spawn) + FaceTarget(NPC, Spawn) + OfferQuest(NPC, Spawn, QUEST_3) +end + +function TalkToMeLater(NPC, Spawn) + FaceTarget(NPC, Spawn) + Say(NPC, "Talk to me later, I'm busy right now.", Spawn) +end + +--------------------------------------------------------------------------------------------- +-- QUEST 4 +--------------------------------------------------------------------------------------------- + +function LeavingHateAnytimeSoon(NPC, Spawn, conversation) + PlayFlavor(NPC, "voiceover/english/neriak/fileyl_alyylharil/darklight_wood/hates_envy/fileyl/fileyl011.mp3", "", "", 1920696283, 4232876553, Spawn) + AddConversationOption(conversation, "Maybe, why?", "dlg_11_1") + StartConversation(conversation, NPC, Spawn, "Hello again. Leaving Hate's Envy anytime soon?") +end + +function dlg_11_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/neriak/fileyl_alyylharil/darklight_wood/hates_envy/fileyl/fileyl012.mp3", "", "", 245191252, 630199436, Spawn) + AddConversationOption(conversation, "I'd be interested.", "dlg_11_2") + StartConversation(conversation, NPC, Spawn, "I have another delivery for you. This time the order needs to be delivered west of T'Vatar Post, which is north of here. Interested?") +end + +function dlg_11_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/neriak/fileyl_alyylharil/darklight_wood/hates_envy/fileyl/fileyl013.mp3", "", "", 240477682, 62641979, Spawn) + AddConversationOption(conversation, "I understand.", "OfferQuest4") + AddConversationOption(conversation, "I'd rather not.") + StartConversation(conversation, NPC, Spawn, "It's for Dirzdia T'Zauvirr. She asked for it to be delivered near the southern bridge that crosses the Searing Tendril. That's the river that flows from the Smoldering Lake. To get there, follow the path out of Hate's Envy. When you hit T'Vatar Post, go west. When the fork splits, follow it left.") +end + +function OfferQuest4(NPC, Spawn) + FaceTarget(NPC, Spawn) + OfferQuest(NPC, Spawn, QUEST_4) +end + +function HelloAgain(NPC, Spawn) + FaceTarget(NPC, Spawn) + Say(NPC, "Hello Again.", Spawn) +end \ No newline at end of file diff --git a/server/SpawnScripts/Darklight/GaussnitraVKilana.lua b/server/SpawnScripts/Darklight/GaussnitraVKilana.lua new file mode 100644 index 000000000..56817979b --- /dev/null +++ b/server/SpawnScripts/Darklight/GaussnitraVKilana.lua @@ -0,0 +1,402 @@ +--[[ + Script Name : SpawnScripts/DarklightWood/GaussnitraVKilana.lua + Script Purpose : Gaussnitra V'Kilana + Script Author : fearfx + Script Date : 2017.01.26 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + + +function spawn(NPC) + SetPlayerProximityFunction(NPC, 10, "InRange", "LeaveRange") +end + +function respawn(NPC) + spawn(NPC) +end + +function InRange(NPC, Spawn) +end + +function LeaveRange(NPC, Spawn) +end +--[[ +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + +end + --local choice = math.random(1,1) + + if choice == 1 then + PlayFlavor(NPC, "", "You have our gratitude.", "salute", 1689589577, 4560189, Spawn) + else + end + + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_3_1007.mp3", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Yes, I have.", "dlg_1_1") + StartConversation(conversation, NPC, Spawn, "Have you taken out the cultists?") + if convo==2 then + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_2_1007.mp3", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Not yet.", "dlg_2_1") + StartConversation(conversation, NPC, Spawn, "Have the wolves been taken care of?") + end + + if convo==5 then + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_2_1007.mp3", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Yes, I have.", "dlg_5_1") + StartConversation(conversation, NPC, Spawn, "Have you slain them?") + end + + if convo==12 then + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_1_1007.mp3", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Yes, I have.", "dlg_12_1") + StartConversation(conversation, NPC, Spawn, "Have you slain them?") + end + + if convo==18 then + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_1_1007.mp3", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "I am willing.", "dlg_18_1") + StartConversation(conversation, NPC, Spawn, "Hello, Chayne. I'm stuck in Wanderlust Fair for now instead of out completing my assignments. Malyl says she needs me here to help with administrative work, how boring. I'd get Vicaonar to do my assignments for me, but I know he would just find a way to weasel out of them. How would you feel about doing some work for me?") + end + + if convo==19 then + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_3_1007.mp3", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "I am willing.", "dlg_19_1") + StartConversation(conversation, NPC, Spawn, "Hello, Chayne. I'm stuck in Wanderlust Fair for now instead of out completing my assignments. Malyl says she needs me here to help with administrative work, how boring. I'd get Vicaonar to do my assignments for me, but I know he would just find a way to weasel out of them. How would you feel about doing some work for me?") + end + + if convo==22 then + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_1_1007.mp3", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "I am willing.", "dlg_22_1") + StartConversation(conversation, NPC, Spawn, "Hello, Hacaci. I'm stuck in Wanderlust Fair for now instead of out completing my assignments. Malyl says she needs me here to help with administrative work. Sigh, how boring. I'd get Vicaonar to do my assignments for me, but he's just been sent out on some special assignment. How would you feel about doing some work for me?") + end + + if convo==23 then + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_2_1007.mp3", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "I am willing.", "dlg_23_1") + StartConversation(conversation, NPC, Spawn, "Hello, Hacaci. I'm stuck in Wanderlust Fair for now instead of out completing my assignments. Malyl says she needs me here to help with administrative work. Sigh, how boring. I'd get Vicaonar to do my assignments for me, but he's just been sent out on some special assignment. How would you feel about doing some work for me?") + end + + if convo==24 then + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_2_1007.mp3", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Yes, I have.", "dlg_24_1") + StartConversation(conversation, NPC, Spawn, "Have you taken them out?") + end + + if convo==25 then + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_2_1007.mp3", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Yes, I have.", "dlg_25_1") + StartConversation(conversation, NPC, Spawn, "Have you taken them out?") + end + + if convo==26 then + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_1_1007.mp3", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Yes, they have.", "dlg_26_1") + StartConversation(conversation, NPC, Spawn, "Have the wolves been taken care of?") + end + + if convo==33 then + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_1_1007.mp3", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Yes, I have.", "dlg_33_1") + StartConversation(conversation, NPC, Spawn, "Have you taken them out?") + end + + if convo==34 then + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_1_1007.mp3", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Yes, I have.", "dlg_34_1") + StartConversation(conversation, NPC, Spawn, "Have you taken them out?") + end + + if convo==52 then + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_2_1007.mp3", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Yes, I have.", "dlg_52_1") + StartConversation(conversation, NPC, Spawn, "Have you taken out the cultists?") + end + + if convo==53 then + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_3_1007.mp3", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Yes, I have.", "dlg_53_1") + StartConversation(conversation, NPC, Spawn, "Have you taken out the cultists?") + end + + if convo==54 then + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_3_1007.mp3", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Yes, I have.", "dlg_54_1") + StartConversation(conversation, NPC, Spawn, "Have you taken out the cultists?") + end + +end + +function dlg_1_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Very well.", "dlg_1_2") + AddConversationOption(conversation, "I may return later to finish this business.") + StartConversation(conversation, NPC, Spawn, "Excellent work. Belarshalee has identified the leader of the cult, I'd like you to go take her out before they have time to recoup from the losses we've already inflicted upon them. She resides at the base of the crater itself, her name is Alerica. While you're there I'd also like you to take out the elite caste of the cult, the adherents.") +end + +function dlg_1_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "I shall.", "dlg_1_3") + StartConversation(conversation, NPC, Spawn, "Report back to me once you've finished.") +end + +function dlg_5_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Is there anything else I can do?", "dlg_5_2") + StartConversation(conversation, NPC, Spawn, "Your work is excellent, Chayne. I will be sure and note how much of an asset you were in my report to Malyl. Thank you, soldier.") +end + +function dlg_5_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Yes, I can do that.", "dlg_5_3") + AddConversationOption(conversation, "I can not.") + StartConversation(conversation, NPC, Spawn, "There is, actually. I've been trying to get Vicaonar to figure out what is going on with the adolescent wolves to the northwest, but he keeps claiming he's too busy. I know the claim is false, but I cannot punish him. I will, of course, note his attitude to Malyl, but she is quite busy herself. Either way, I will be looking into the wolves to see if I can find a cause for their strange behavior. But, it would help in the interim if you could kill some of them so they stop harassing travelers and fair goers. Do you think you can do that for me?") +end + +function dlg_5_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "You're welcome.", "dlg_5_4") + StartConversation(conversation, NPC, Spawn, "Thank you very much, Chayne.") +end + +function dlg_12_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Is there anything else I can do?", "dlg_12_2") + StartConversation(conversation, NPC, Spawn, "Your work is excellent, Hacaci. I will be sure and note how much of an asset you were in my report to Malyl. Thank you, soldier.") +end + +function dlg_12_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Yes, I can do that.", "dlg_12_3") + AddConversationOption(conversation, "I can not.") + StartConversation(conversation, NPC, Spawn, "There is, actually. Vicaonar has not returned from his latest assignment. He was sent to the east to investigate some missing Nerians who have failed to return to Wanderlust Fair. I need you to check on his progress, and aid him, if necessary.") +end + +function dlg_12_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "You're welcome.", "dlg_12_4") + StartConversation(conversation, NPC, Spawn, "Thank you very much, Hacaci.") +end + +function dlg_18_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "You want me to take them out?", "dlg_18_2") + StartConversation(conversation, NPC, Spawn, "That's the first good news I've heard in quite a while. Right now I'm looking for potential threats to Neriak and to the Darklight Woods. For some time now there has been a cult operating out of the Sableflame Crater to the southeast. Though they haven't tried to move outward from their location, they are quite hostile to anyone--guards and citizens of Neriak included--who get close.") +end + +function dlg_18_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "All right.", "dlg_18_3") + AddConversationOption(conversation, "I don't have time for this.") + StartConversation(conversation, NPC, Spawn, "I do, but approach with caution. For now don't go into the crater itself, just kill those that wander too far away, their outriders, fanatics, and heralds.") +end + +function dlg_19_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "You want me to take them out?", "dlg_19_2") + StartConversation(conversation, NPC, Spawn, "That's the first good news I've heard in quite a while. Right now I'm looking for potential threats to Neriak and to the Darklight Woods. For some time now there has been a cult operating out of the Sableflame Crater to the southeast. Though they haven't tried to move outward from their location, they are quite hostile to anyone--guards and citizens of Neriak included--who get close.") +end + +function dlg_19_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "All right.", "dlg_19_3") + AddConversationOption(conversation, "I don't have time for this.") + StartConversation(conversation, NPC, Spawn, "I do, but approach with caution. For now don't go into the crater itself, just kill those that wander too far away, their outriders, fanatics, and heralds.") +end + +function dlg_19_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Will do.", "dlg_19_4") + StartConversation(conversation, NPC, Spawn, "Return to me once you've completed the task.") +end + +function dlg_22_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "You want me to take them out?", "dlg_22_2") + StartConversation(conversation, NPC, Spawn, "That's the first good news I've heard in quite a while. Right now I'm looking for potential threats to Neriak and to the Darklight Woods. For some time now there has been a cult operating out of the Sableflame Crater to the southeast. Though they haven't tried to move outward from their location, they are quite hostile to anyone--guards and citizens of Neriak included--who get close.") +end + +function dlg_22_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "All right.", "dlg_22_3") + AddConversationOption(conversation, "I don't have time for this.") + StartConversation(conversation, NPC, Spawn, "I do, but approach with caution. For now, don't go into the crater itself. Just kill those that wander around its perimeter: their outriders, fanatics, and heralds.") +end + +function dlg_23_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "You want me to take them out?", "dlg_23_2") + StartConversation(conversation, NPC, Spawn, "That's the first good news I've heard in quite a while. Right now I'm looking for potential threats to Neriak and to the Darklight Woods. For some time now there has been a cult operating out of the Sableflame Crater to the southeast. Though they haven't tried to move outward from their location, they are quite hostile to anyone--guards and citizens of Neriak included--who get close.") +end + +function dlg_23_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "All right.", "dlg_23_3") + AddConversationOption(conversation, "I don't have time for this.") + StartConversation(conversation, NPC, Spawn, "I do, but approach with caution. For now, don't go into the crater itself. Just kill those that wander around its perimeter: their outriders, fanatics, and heralds.") +end + +function dlg_23_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Will do.", "dlg_23_4") + StartConversation(conversation, NPC, Spawn, "Return to me once you've completed the task.") +end + +function dlg_24_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "I can do that.", "dlg_24_2") + AddConversationOption(conversation, "I can't right now.") + StartConversation(conversation, NPC, Spawn, "Nice work. I've just spoken with Malyl and she has given me permission to step up the operation against the Sableflame cultists. Though she still won't let me leave the camp. That means I'd like you to go inside the crater itself, though not too deep. I've been speaking with Belarshalee Do'Torlyl who also has an interest in these cultists and she's told me more of their ranks. This time I'd like you to take out their incanters, cauterizers, scryers and watchers.") +end + +function dlg_25_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "I can do that.", "dlg_25_2") + AddConversationOption(conversation, "I can't right now.") + StartConversation(conversation, NPC, Spawn, "Nice work. I've just spoken with Malyl and she has given me permission to step up the operation against the Sableflame cultists. Though she still won't let me leave the camp. That means I'd like you to go inside the crater itself, though not too deep. I've been speaking with Belarshalee Do'Torlyl who also has an interest in these cultists and she's told me more of their ranks. This time I'd like you to take out their incanters, cauterizers, scryers and watchers.") +end + +function dlg_25_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "All right.", "dlg_25_3") + StartConversation(conversation, NPC, Spawn, "I know you can. I will see you when you return.") +end + +function dlg_33_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "I can do that.", "dlg_33_2") + AddConversationOption(conversation, "I can't right now.") + StartConversation(conversation, NPC, Spawn, "Nice work. I've just spoken with Malyl and she has given me permission to step up the operation against the Sableflame cultists. Unfortunately, she still won't let me leave the camp. That means I need you to return to the crater and venture inside the crater itself. I've been speaking with Belarshalee Do'Torlyl, who also has an interest in these cultists, and she's told me more of their ranks. This time I'd like you to take out their incanters, cauterizers, scryers, and watchers.") +end + +function dlg_34_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "I can do that.", "dlg_34_2") + AddConversationOption(conversation, "I can't right now.") + StartConversation(conversation, NPC, Spawn, "Nice work. I've just spoken with Malyl and she has given me permission to step up the operation against the Sableflame cultists. Unfortunately, she still won't let me leave the camp. That means I need you to return to the crater and venture inside the crater itself. I've been speaking with Belarshalee Do'Torlyl, who also has an interest in these cultists, and she's told me more of their ranks. This time I'd like you to take out their incanters, cauterizers, scryers, and watchers.") +end + +function dlg_34_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "All right.", "dlg_34_3") + StartConversation(conversation, NPC, Spawn, "I know you can. I will see you when you return. Make sure to speak to Belarshalee before you leave. She may know something about the Sableflame that will assist you in your task.") +end + +function dlg_52_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Very well.", "dlg_52_2") + AddConversationOption(conversation, "I may return later to finish this business.") + StartConversation(conversation, NPC, Spawn, "Excellent work. Belarshalee has identified the leader of the cult. I'd like you to take her out before they have time to recoup from the losses we've already inflicted upon them. She resides at the base of the crater itself, and her name is Alerica. While you're there, I'd also like you to take out the elite caste of the Sableflame cult: the adherents.") +end + +function dlg_53_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Very well.", "dlg_53_2") + AddConversationOption(conversation, "I may return later to finish this business.") + StartConversation(conversation, NPC, Spawn, "Excellent work. Belarshalee has identified the leader of the cult. I'd like you to take her out before they have time to recoup from the losses we've already inflicted upon them. She resides at the base of the crater itself, and her name is Alerica. While you're there, I'd also like you to take out the elite caste of the Sableflame cult: the adherents.") +end + +function dlg_54_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Very well.", "dlg_54_2") + AddConversationOption(conversation, "I may return later to finish this business.") + StartConversation(conversation, NPC, Spawn, "Excellent work. Belarshalee has identified the leader of the cult. I'd like you to take her out before they have time to recoup from the losses we've already inflicted upon them. She resides at the base of the crater itself, and her name is Alerica. While you're there, I'd also like you to take out the elite caste of the Sableflame cult: the adherents.") +end + +function dlg_54_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "I shall.", "dlg_54_3") + StartConversation(conversation, NPC, Spawn, "Report back to me once you've finished.") +end +]]-- + +--[[ raw_conversations + PlayFlavor(NPC, "", "You have our gratitude.", "salute", 1689589577, 4560189, Spawn) +--]] + diff --git a/server/SpawnScripts/Darklight/GeldaxXalylharil.lua b/server/SpawnScripts/Darklight/GeldaxXalylharil.lua new file mode 100644 index 000000000..4e4d027e7 --- /dev/null +++ b/server/SpawnScripts/Darklight/GeldaxXalylharil.lua @@ -0,0 +1,727 @@ +--[[ + Script Name : SpawnScripts/DarklightWood/GeldaxXalylharil.lua + Script Purpose : Geldax Xalylharil + Script Author : fearfx + Script Date : 2017.01.26 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +local TheWarpfontSpire = 192 +local ComparisonsToTheHarrowglade = 193 +local OtherMaterials = 194 +local ResonanceCapture = 195 + +function spawn(NPC) + ProvidesQuest(NPC, TheWarpfontSpire) + ProvidesQuest(NPC, ComparisonsToTheHarrowglade) + ProvidesQuest(NPC, OtherMaterials) + ProvidesQuest(NPC, ResonanceCapture) +end + +function respawn(NPC) + spawn(NPC) +end + +function InRange(NPC, Spawn) +end + +function LeaveRange(NPC, Spawn) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + if not HasQuest(Spawn, TheWarpfontSpire) and not HasCompletedQuest(Spawn, TheWarpfontSpire) then + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_3_1052.mp3", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "I am " .. GetName(Spawn) .. ".", "Quest_TheWarpfontSpire") + StartConversation(conversation, NPC, Spawn, "Greetings. I am Geldax Xalylharil.") + elseif HasQuest(Spawn, TheWarpfontSpire) and GetQuestStep(Spawn, TheWarpfontSpire) == 2 then + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_1_1052.mp3", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Yes, here you go.", "Quest_ComparisonsToTheHarrowglade") + StartConversation(conversation, NPC, Spawn, "Do you have the dust?") + elseif not HasQuest(Spawn, ComparisonsToTheHarrowglade) and HasCompletedQuest(Spawn, TheWarpfontSpire) then + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_1_1052.mp3", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Yes, here you go.", "Quest_ComparisonsToTheHarrowglade") + StartConversation(conversation, NPC, Spawn, "Do you have the dust?") + else + Say(NPC, "End of Dialog, or error") + end +end + +-------------------------------------------------------------------------------- +-- The Warpfont Spire +-------------------------------------------------------------------------------- + +function Quest_TheWarpfontSpire(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "What is your work?", "Quest_TheWarpfontSpire_01") + StartConversation(conversation, NPC, Spawn, "Ah, that name sounds familiar to me for some reason. In any case, welcome to the Wanderlust Fair. Home to many things I have nothing to do with, but also to a bright scientific community. Watching Vornlin work is quite impressive, I must say. I don't know what he is studying, though, as my own work keeps me too busy to question him much.") +end + +function Quest_TheWarpfontSpire_01(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "And you're trying to figure that out?", "Quest_TheWarpfontSpire_02") + StartConversation(conversation, NPC, Spawn, "Have you ever heard of Warp Fatigue? I hope not, because I just made it up. But it is what I use to describe the effects of 'something' on certain inhabitants of the Darklight Wood. Near the pass to the Commonlands, southeast of here, you can find the Warpfont Spire. The stone itself has been twisted by some unnatural force. Wisps that spend time near it become twisted themselves, but nobody knows why.") +end + +function Quest_TheWarpfontSpire_02(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "I could help collect samples.", "Quest_TheWarpfontSpire_03") + StartConversation(conversation, NPC, Spawn, "Trying, yes, but so far I have not learned very much. Things would go much faster if I could have my samples gathered while I was working, but I'm not as prestigious as Vornlin, and was not provided with an assistant.") +end + +function Quest_TheWarpfontSpire_03(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "All right, I'll go collect your samples.", "QuestOffer_TheWarpfontSpire") + AddConversationOption(conversation, "I'm a little busy at the moment.") + StartConversation(conversation, NPC, Spawn, "That would be perfect. Right now I need the resonant dust from the warped wisplings that coalesce about the Warpfont Spire. If you take the road east out of Wanderlust Fair and then go south at the fork, the Warpfont Spire is south of where the Searing Tendril River splits.") +end + +function QuestOffer_TheWarpfontSpire(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + OfferQuest(NPC, Spawn, TheWarpfontSpire) + + AddConversationOption(conversation, "Great.", "dlg_5_6") + StartConversation(conversation, NPC, Spawn, "They should be easy to get, the wisps are filled with this dust.") +end + +-------------------------------------------------------------------------------- +-- Comparisons To The Harrowglade +-------------------------------------------------------------------------------- + +function Quest_ComparisonsToTheHarrowglade(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + if GetQuestStep(Spawn, TheWarpfontSpire) == 2 then + SetStepComplete(Spawn, TheWarpfontSpire, 2) + end + + AddConversationOption(conversation, "What happened?", "Quest_ComparisonsToTheHarrowglade_01") + StartConversation(conversation, NPC, Spawn, "My thanks. I can now run some of my first tests to see if--hm. I wasn't exactly expecting this.") +end + +function Quest_ComparisonsToTheHarrowglade_01(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "So it's affecting everything?", "Quest_ComparisonsToTheHarrowglade_02") + StartConversation(conversation, NPC, Spawn, "Well, I had always assumed the wisps were affected by the Warpfont Spires because they were somehow naturally attuned to whatever energies the spire is putting out. The magical nature of wisps is why I had assumed only they were being affected. But I've just now come across an impure sample from one of the warped wisplings and it seems that the very soil is also being somehow adjusted by the energies of the Warpfont Spire.") +end + +function Quest_ComparisonsToTheHarrowglade_02(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "What do you need this time?", "Quest_ComparisonsToTheHarrowglade_03") + StartConversation(conversation, NPC, Spawn, "I really don't know. Maybe the wisp itself affected this soil, I can't tell without more samples.") +end + +function Quest_ComparisonsToTheHarrowglade_03(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "I'll go collect the rocks.", "QuestOffer_ComparisonsToTheHarrowglade") + AddConversationOption(conversation, "I can't, actually.") + StartConversation(conversation, NPC, Spawn, "Rocks, if you could. Rocks from the Warpfont Spire as well as from the Harrowglade. If this warp is affecting everything then perhaps the spire is not a conduit as I originally imagined and merely a bystander, as these wisps.") +end + +function QuestOffer_ComparisonsToTheHarrowglade(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + OfferQuest(NPC, Spawn, ComparisonsToTheHarrowglade) + + AddConversationOption(conversation, "I'll be back.", "dlg_0_6") + StartConversation(conversation, NPC, Spawn, "Thank you. I will continue my research.") +end + +--[[ + + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_1_1052.mp3", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Yes, here you go.", "dlg_0_1") + StartConversation(conversation, NPC, Spawn, "Do you have the dust?") + if convo==1 then + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_1_1052.mp3", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Yes, I do.", "dlg_1_1") + StartConversation(conversation, NPC, Spawn, "Do you have the samples?") + end + + if convo==3 then + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_3_1052.mp3", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Yes, I do.", "dlg_3_1") + StartConversation(conversation, NPC, Spawn, "Do you have the samples?") + end + + if convo==4 then + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_2_1052.mp3", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "I am Chayne.", "dlg_4_1") + StartConversation(conversation, NPC, Spawn, "Greetings. I am Geldax Xalylharil.") + end + + if convo==5 then + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_3_1052.mp3", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "I am Chayne.", "dlg_5_1") + StartConversation(conversation, NPC, Spawn, "Greetings. I am Geldax Xalylharil.") + end + + if convo==6 then + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_3_1052.mp3", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Yes, I do.", "dlg_6_1") + StartConversation(conversation, NPC, Spawn, "Do you have the samples?") + end + + if convo==7 then + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_3_1052.mp3", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Yes, I do.", "dlg_7_1") + StartConversation(conversation, NPC, Spawn, "Do you have the samples?") + end + + if convo==8 then + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_2_1052.mp3", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Yes I have.", "dlg_8_1") + StartConversation(conversation, NPC, Spawn, "Have you captured the warp extract?") + end + + if convo==14 then + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_1_1052.mp3", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "I am Hacaci.", "dlg_14_1") + StartConversation(conversation, NPC, Spawn, "Greetings. I am Geldax Xalylharil.") + end + + if convo==15 then + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_3_1052.mp3", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "I am Hacaci.", "dlg_15_1") + StartConversation(conversation, NPC, Spawn, "Greetings. I am Geldax Xalylharil.") + end + + if convo==20 then + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_2_1052.mp3", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Yup. Here you go.", "dlg_20_1") + StartConversation(conversation, NPC, Spawn, "Have you collected the dust?") + end + + if convo==21 then + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_1_1052.mp3", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Yup. Here you go.", "dlg_21_1") + StartConversation(conversation, NPC, Spawn, "Have you collected the dust?") + end + + if convo==24 then + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_2_1052.mp3", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Not yet.", "dlg_24_1") + StartConversation(conversation, NPC, Spawn, "Have you collected the dust?") + end + + if convo==29 then + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_3_1052.mp3", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Yup. Here you go.", "dlg_29_1") + StartConversation(conversation, NPC, Spawn, "Have you collected the dust?") + end + + if convo==30 then + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_1_1052.mp3", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Yup. Here you go.", "dlg_30_1") + StartConversation(conversation, NPC, Spawn, "Have you collected the dust?") + end + + if convo==60 then + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_1_1052.mp3", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Yes, here you go.", "dlg_60_1") + StartConversation(conversation, NPC, Spawn, "Do you have the dust?") + end + + if convo==61 then + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_1_1052.mp3", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Yes, here you go.", "dlg_61_1") + StartConversation(conversation, NPC, Spawn, "Do you have the dust?") + end + +end + +function dlg_0_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "What happened?", "dlg_0_2") + StartConversation(conversation, NPC, Spawn, "My thanks. I can now run some of my first tests to see if--hm. I wasn't exactly expecting this.") +end + +function dlg_0_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "So it's affecting everything?", "dlg_0_3") + StartConversation(conversation, NPC, Spawn, "Well, I had always assumed the wisps were affected by the Warpfont Spires because they were somehow naturally attuned to whatever energies the spire is putting out. The magical nature of wisps is why I had assumed only they were being affected. But I've just now come across an impure sample from one of the warped wisplings and it seems that the very soil is also being somehow adjusted by the energies of the Warpfont Spire.") +end + +function dlg_0_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "What do you need this time?", "dlg_0_4") + StartConversation(conversation, NPC, Spawn, "I really don't know. Maybe the wisp itself affected this soil, I can't tell without more samples.") +end + +function dlg_0_4(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "I'll go collect the rocks.", "dlg_0_5") + AddConversationOption(conversation, "I can't, actually.") + StartConversation(conversation, NPC, Spawn, "Rocks, if you could. Rocks from the Warpfont Spire as well as from the Harrowglade. If this warp is affecting everything then perhaps the spire is not a conduit as I originally imagined and merely a bystander, as these wisps.") +end + +function dlg_0_5(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "I'll be back.", "dlg_0_6") + StartConversation(conversation, NPC, Spawn, "Thank you. I will continue my research.") +end + +function dlg_1_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "What plan?", "dlg_1_2") + StartConversation(conversation, NPC, Spawn, "Thank you. When I study these further I may be able to figure out what is going on. However, I have another plan to gain more information.") +end + +function dlg_1_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "All right.", "dlg_1_3") + AddConversationOption(conversation, "Right now I would mind.") + StartConversation(conversation, NPC, Spawn, "I believe I've found a way to... well... extract the warp from one of the wisplings affected by it. However, using it on the resonant dust from the warped wisplings isn't returning quite the volume I was looking for. However, using it on a living wispling might prove more productive. Would you mind collecting some for me?") +end + +function dlg_1_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "All right, I'll be back.", "dlg_1_4") + StartConversation(conversation, NPC, Spawn, "Great. I believe this will help a great deal with my research.") +end + +function dlg_3_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "What plan?", "dlg_3_2") + StartConversation(conversation, NPC, Spawn, "Thank you. When I study these further I may be able to figure out what is going on. However, I have another plan to gain more information.") +end + +function dlg_3_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "All right.", "dlg_3_3") + AddConversationOption(conversation, "Right now I would mind.") + StartConversation(conversation, NPC, Spawn, "I believe I've found a way to... well... extract the warp from one of the wisplings affected by it. However, using it on the resonant dust from the warped wisplings isn't returning quite the volume I was looking for. However, using it on a living wispling might prove more productive. Would you mind collecting some for me?") +end + +function dlg_3_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "All right, I'll be back.", "dlg_3_4") + StartConversation(conversation, NPC, Spawn, "Great. I believe this will help a great deal with my research.") +end + +function dlg_4_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "What is your work?", "dlg_4_2") + StartConversation(conversation, NPC, Spawn, "Ah, that name sounds familiar to me for some reason. In any case, welcome to the Wanderlust Fair. Home to many things I have nothing to do with, but also to a bright scientific community. Watching Vornlin work is quite impressive, I must say. I don't know what he is studying, though, as my own work keeps me too busy to question him much.") +end + +function dlg_4_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "And you're trying to figure that out?", "dlg_4_3") + StartConversation(conversation, NPC, Spawn, "Have you ever heard of Warp Fatigue? I hope not, because I just made it up. But it is what I use to describe the effects of 'something' on certain inhabitants of the Darklight Wood. Near the pass to the Commonlands, southeast of here, you can find the Warpfont Spire. The stone itself has been twisted by some unnatural force. Wisps that spend time near it become twisted themselves, but nobody knows why.") +end + +function dlg_4_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "I could help collect samples.", "dlg_4_4") + StartConversation(conversation, NPC, Spawn, "Trying, yes, but so far I have not learned very much. Things would go much faster if I could have my samples gathered while I was working, but I'm not as prestigious as Vornlin, and was not provided with an assistant.") +end + +function dlg_4_4(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "All right, I'll go collect your samples.", "dlg_4_5") + AddConversationOption(conversation, "I'm a little busy at the moment.") + StartConversation(conversation, NPC, Spawn, "That would be perfect. Right now I need the resonant dust from the warped wisplings that coalesce about the Warpfont Spire. If you take the road east out of Wanderlust Fair and then go south at the fork, the Warpfont Spire is south of where the Searing Tendril River splits.") +end + +function dlg_5_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "What is your work?", "dlg_5_2") + StartConversation(conversation, NPC, Spawn, "Ah, that name sounds familiar to me for some reason. In any case, welcome to the Wanderlust Fair. Home to many things I have nothing to do with, but also to a bright scientific community. Watching Vornlin work is quite impressive, I must say. I don't know what he is studying, though, as my own work keeps me too busy to question him much.") +end + +function dlg_5_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "And you're trying to figure that out?", "dlg_5_3") + StartConversation(conversation, NPC, Spawn, "Have you ever heard of Warp Fatigue? I hope not, because I just made it up. But it is what I use to describe the effects of 'something' on certain inhabitants of the Darklight Wood. Near the pass to the Commonlands, southeast of here, you can find the Warpfont Spire. The stone itself has been twisted by some unnatural force. Wisps that spend time near it become twisted themselves, but nobody knows why.") +end + +function dlg_5_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "I could help collect samples.", "dlg_5_4") + StartConversation(conversation, NPC, Spawn, "Trying, yes, but so far I have not learned very much. Things would go much faster if I could have my samples gathered while I was working, but I'm not as prestigious as Vornlin, and was not provided with an assistant.") +end + +function dlg_5_4(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "All right, I'll go collect your samples.", "dlg_5_5") + AddConversationOption(conversation, "I'm a little busy at the moment.") + StartConversation(conversation, NPC, Spawn, "That would be perfect. Right now I need the resonant dust from the warped wisplings that coalesce about the Warpfont Spire. If you take the road east out of Wanderlust Fair and then go south at the fork, the Warpfont Spire is south of where the Searing Tendril River splits.") +end + +function dlg_5_5(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Great.", "dlg_5_6") + StartConversation(conversation, NPC, Spawn, "They should be easy to get, the wisps are filled with this dust.") +end + +function dlg_6_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "What plan?", "dlg_6_2") + StartConversation(conversation, NPC, Spawn, "Thank you. When I study these further I may be able to figure out what is going on. However, I have another plan to gain more information.") +end + +function dlg_6_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "All right.", "dlg_6_3") + AddConversationOption(conversation, "Right now I would mind.") + StartConversation(conversation, NPC, Spawn, "I believe I've found a way to... well... extract the warp magic from one of the wisplings. However, using it on the resonant dust you recovered from warped wisplings isn't returning quite the volume I was looking for. The magic extracted from a live wispling should prove more voluminous. Would you mind collecting them for me?") +end + +function dlg_7_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "What plan?", "dlg_7_2") + StartConversation(conversation, NPC, Spawn, "Thank you. When I study these further I may be able to figure out what is going on. However, I have another plan to gain more information.") +end + +function dlg_7_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "All right.", "dlg_7_3") + AddConversationOption(conversation, "Right now I would mind.") + StartConversation(conversation, NPC, Spawn, "I believe I've found a way to... well... extract the warp magic from one of the wisplings. However, using it on the resonant dust you recovered from warped wisplings isn't returning quite the volume I was looking for. The magic extracted from a live wispling should prove more voluminous. Would you mind collecting them for me?") +end + +function dlg_7_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "All right. I'll be back.", "dlg_7_4") + StartConversation(conversation, NPC, Spawn, "Splendid. This will help a great deal with my research.") +end + +function dlg_8_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Really begin?", "dlg_8_2") + StartConversation(conversation, NPC, Spawn, "Perfect. I believe I have all I need now to really begin my research.") +end + +function dlg_8_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "You're welcome.", "dlg_8_3") + StartConversation(conversation, NPC, Spawn, "Yes. This is going to take some time. I did preliminary tests to help focus my study, but I've got a long way to go. You helped me up to this point much faster though, thank you.") +end + +function dlg_14_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "What is your work?", "dlg_14_2") + StartConversation(conversation, NPC, Spawn, "Ah, that name sounds familiar to me for some reason. In any case, welcome to the Wanderlust Fair. Home to many things I have nothing to do with, but also to a bright scientific community. Watching Vornlin work is quite impressive, I must say. I don't know what he is studying, though, as my own work keeps me too busy to question him much.") +end + +function dlg_14_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "And you're trying to figure that out?", "dlg_14_3") + StartConversation(conversation, NPC, Spawn, "Have you ever heard of Warp Fatigue? I hope not, because I just made it up. But it is what I use to describe the effects of 'something' on certain inhabitants of the Darklight Wood. Near the pass to the Commonlands, southeast of here, you can find the Warpfont Spire. The stone itself has been twisted by some unnatural force. Wisps that spend time near it become twisted themselves, but nobody knows why.") +end + +function dlg_14_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "I could help collect samples.", "dlg_14_4") + StartConversation(conversation, NPC, Spawn, "Trying, yes, but so far I have not learned very much. Things would go much faster if I could have my samples gathered while I was working, but I'm not as prestigious as Vornlin, and was not provided with an assistant.") +end + +function dlg_14_4(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "All right, I'll go collect your samples.", "dlg_14_5") + AddConversationOption(conversation, "I'm a little busy at the moment.") + StartConversation(conversation, NPC, Spawn, "That would be perfect. Right now I need the resonant dust from the warped wisplings that coalesce about the Warpfont Spire. If you take the road east out of Wanderlust Fair and then go south at the fork, the Warpfont Spire is south of where the Searing Tendril River splits.") +end + +function dlg_15_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "What is your work?", "dlg_15_2") + StartConversation(conversation, NPC, Spawn, "Ah, that name sounds familiar to me for some reason. In any case, welcome to the Wanderlust Fair. Home to many things I have nothing to do with, but also to a bright scientific community. Watching Vornlin work is quite impressive, I must say. I don't know what he is studying, though, as my own work keeps me too busy to question him much.") +end + +function dlg_15_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "And you're trying to figure that out?", "dlg_15_3") + StartConversation(conversation, NPC, Spawn, "Have you ever heard of Warp Fatigue? I hope not, because I just made it up. But it is what I use to describe the effects of 'something' on certain inhabitants of the Darklight Wood. Near the pass to the Commonlands, southeast of here, you can find the Warpfont Spire. The stone itself has been twisted by some unnatural force. Wisps that spend time near it become twisted themselves, but nobody knows why.") +end + +function dlg_15_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "I could help collect samples.", "dlg_15_4") + StartConversation(conversation, NPC, Spawn, "Trying, yes, but so far I have not learned very much. Things would go much faster if I could have my samples gathered while I was working, but I'm not as prestigious as Vornlin, and was not provided with an assistant.") +end + +function dlg_15_4(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "All right, I'll go collect your samples.", "dlg_15_5") + AddConversationOption(conversation, "I'm a little busy at the moment.") + StartConversation(conversation, NPC, Spawn, "That would be perfect. Right now I need the resonant dust from the warped wisplings that coalesce about the Warpfont Spire. If you take the road east out of Wanderlust Fair and then go south at the fork, the Warpfont Spire is south of where the Searing Tendril River splits.") +end + +function dlg_15_5(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Great.", "dlg_15_6") + StartConversation(conversation, NPC, Spawn, "They should be easy to get. The wisps are filled with this dust.") +end + +function dlg_20_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Yes, I can get more samples.", "dlg_20_2") + AddConversationOption(conversation, "Maybe later.") + StartConversation(conversation, NPC, Spawn, "Perfect! I appreciate this greatly. This will be quite enough to last me for some while. Hm, do you think you could restock my supplies for the same powder from the wisplings that aren't warped? They are west across the river from the Warpfont Spire, in a small section of the wood known as the Harrowglade.") +end + +function dlg_21_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Yes, I can get more samples.", "dlg_21_2") + AddConversationOption(conversation, "Maybe later.") + StartConversation(conversation, NPC, Spawn, "Perfect! I appreciate this greatly. This will be quite enough to last me for some while. Hm, do you think you could restock my supplies for the same powder from the wisplings that aren't warped? They are west across the river from the Warpfont Spire, in a small section of the wood known as the Harrowglade.") +end + +function dlg_21_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "I will return.", "dlg_21_3") + StartConversation(conversation, NPC, Spawn, "Good. I will need control samples in my research.") +end + +function dlg_29_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Yes, I can get more samples.", "dlg_29_2") + AddConversationOption(conversation, "Maybe later.") + StartConversation(conversation, NPC, Spawn, "Perfect! I appreciate this greatly. This will be quite enough to last me for some while. Hm, do you think you could restock my supplies for the same powder from the wisplings that aren't warped? They are west across the river from the Warpfont Spire, in a small section of the wood known as the Harrowglade.") +end + +function dlg_30_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Yes, I can get more samples.", "dlg_30_2") + AddConversationOption(conversation, "Maybe later.") + StartConversation(conversation, NPC, Spawn, "Perfect! I appreciate this greatly. This will be quite enough to last me for some while. Hm, do you think you could restock my supplies for the same powder from the wisplings that aren't warped? They are west across the river from the Warpfont Spire, in a small section of the wood known as the Harrowglade.") +end + +function dlg_30_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "I will return.", "dlg_30_3") + StartConversation(conversation, NPC, Spawn, "Good. I will need control samples in my research.") +end + +function dlg_60_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "What happened?", "dlg_60_2") + StartConversation(conversation, NPC, Spawn, "My thanks. I can now run some of my first tests to see if--hm. I wasn't exactly expecting this.") +end + +function dlg_60_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "So you think the spires might be affecting everything?", "dlg_60_3") + StartConversation(conversation, NPC, Spawn, "I assumed the wisps were affected by the Warpfont Spires because they are naturally attuned to the arcane energies emitted by the spire, and yet here is an impure sample of soil from one of the wisplings. I wonder if the very earth itself isn't being affected by the energies of the spire.") +end + +function dlg_60_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "What kinds of samples?", "dlg_60_4") + StartConversation(conversation, NPC, Spawn, "I'm unsure. Maybe the wisp augmented the soil. I can't be certain without more samples.") +end + +function dlg_60_4(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "I'll go collect the rocks.", "dlg_60_5") + AddConversationOption(conversation, "I can't, actually.") + StartConversation(conversation, NPC, Spawn, "Perhaps the spire is not a conduit, as I originally hypothesized. I will require rocks from the Warpfont Spire as well as from the Harrowglade.") +end + +function dlg_61_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "What happened?", "dlg_61_2") + StartConversation(conversation, NPC, Spawn, "My thanks. I can now run some of my first tests to see if--hm. I wasn't exactly expecting this.") +end + +function dlg_61_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "So you think the spires might be affecting everything?", "dlg_61_3") + StartConversation(conversation, NPC, Spawn, "I assumed the wisps were affected by the Warpfont Spires because they are naturally attuned to the arcane energies emitted by the spire, and yet here is an impure sample of soil from one of the wisplings. I wonder if the very earth itself isn't being affected by the energies of the spire.") +end + +function dlg_61_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "What kinds of samples?", "dlg_61_4") + StartConversation(conversation, NPC, Spawn, "I'm unsure. Maybe the wisp augmented the soil. I can't be certain without more samples.") +end + +function dlg_61_4(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "I'll go collect the rocks.", "dlg_61_5") + AddConversationOption(conversation, "I can't, actually.") + StartConversation(conversation, NPC, Spawn, "Perhaps the spire is not a conduit, as I originally hypothesized. I will require rocks from the Warpfont Spire as well as from the Harrowglade.") +end + +function dlg_61_5(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "I'll be back.", "dlg_61_6") + StartConversation(conversation, NPC, Spawn, "Waste no time, Hacaci.") +end + +]]-- \ No newline at end of file diff --git a/server/SpawnScripts/Darklight/GhaunatarTrearn.lua b/server/SpawnScripts/Darklight/GhaunatarTrearn.lua new file mode 100644 index 000000000..05d698736 --- /dev/null +++ b/server/SpawnScripts/Darklight/GhaunatarTrearn.lua @@ -0,0 +1,50 @@ +--[[ + Script Name : SpawnScripts/Darklight/GhaunatarTrearn.lua + Script Purpose : Ghaunatar Trearn + Script Author : John Adams + Script Date : 2009.01.31 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +function spawn(NPC) + SetPlayerProximityFunction(NPC, 10, "InRange", "LeaveRange") +end + +function respawn(NPC) + spawn(NPC) +end + +function InRange(NPC, Spawn) +end + +function LeaveRange(NPC, Spawn) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_3_1008.mp3", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "I am XXXXXXXXX.", "dlg_0_1") + StartConversation(conversation, NPC, Spawn, "For the balance. I am Ghaunatar Trearn, in Thelia's service.") +end + +function dlg_0_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "What work?", "dlg_0_2") + StartConversation(conversation, NPC, Spawn, "It is good that you arrive here, .. GetName(Spawn) .. . There is work to be done and many of our druids are far away.") +end + +function dlg_0_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "I am willing.", "dlg_0_3") + AddConversationOption(conversation, "Not right now.") + StartConversation(conversation, NPC, Spawn, "Work for the Darklight Wood, we are her keepers. For instance, the kodiak population has grown very large over the past few months. Though I am working diligently to discover the reason for this, their numbers are affecting the wood even now, and they must be culled. And so we need the services of those such as yourself. Are you willing?") +end + diff --git a/server/SpawnScripts/Darklight/GinryneXTreval.lua b/server/SpawnScripts/Darklight/GinryneXTreval.lua new file mode 100644 index 000000000..905471051 --- /dev/null +++ b/server/SpawnScripts/Darklight/GinryneXTreval.lua @@ -0,0 +1,22 @@ +--[[ + Script Name : + Script Purpose : + Script Author : + Script Date : + Script Notes : +--]] + +function spawn(NPC) +end + +function hailed(NPC, Spawn) +end + +function respawn(NPC) +end + +function casted_on(Target, Caster) + if HasQuest(Caster, 87) and not QuestStepIsComplete(Caster, 87, 2) then + SetStepComplete(Caster, 87, 2) + end +end \ No newline at end of file diff --git a/server/SpawnScripts/Darklight/GinwyssDArkenett.lua b/server/SpawnScripts/Darklight/GinwyssDArkenett.lua new file mode 100644 index 000000000..5effc1bb9 --- /dev/null +++ b/server/SpawnScripts/Darklight/GinwyssDArkenett.lua @@ -0,0 +1,300 @@ +--[[ + Script Name : SpawnScripts/Darklight/GinwyssDArkenett.lua + Script Purpose : Ginwyss D'Arkenett ID 340064 + Script Author : Cynnar + Script Date : 2015.12.30 + Script Notes : A Guard Insignia? Examine item a Neriak recruit badge dropped by moldering soldiers + Scritp Notes : It leads to Gwinyss final quest. +--]] + +local NoUndeadGoesUnturned = 134 +local ThexianTaint = 135 +local RottingScum = 138 +local PickingUpSlack = 139 +local AGuardInsignia = 140 +local MissingRecruit = 141 + +function spawn(NPC) + ProvidesQuest(NPC, RottingScum) + ProvidesQuest(NPC, PickingUpSlack) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + if not HasCompletedQuest(Spawn, ThexianTaint) and GetQuestStep(Spawn, ThexianTaint) < 3 then + StartConversation(conversation, NPC, Spawn, "You need speak with Sselnyl Do'Zyth in Hate's Envy, then come back and see me.") + elseif not HasCompletedQuest(Spawn, ThexianTaint) and GetQuestStep(Spawn, ThexianTaint) == 3 then + PlayFlavor(NPC, "ginwyss_d_arkenett/darklight_wood/tvatar_post/ginwyss_revamp/ginwyss001.mp3", "", "", 3871091964, 1580185291, Spawn) + AddConversationOption(conversation, "Sselnyl Do'Zyth has sent me from Hate's Envy. I've just stopped a Thexian Desecrator from completing a ritual at the Wellspring of Nightmares.", "ThexianTaint_Finish") + AddConversationOption(conversation, "Is there nothing I can do to help?", "Quest_RottingScum_B") + AddConversationOption(conversation, "I must be going.") + StartConversation(conversation, NPC, Spawn, "You wish to help? If that's the case, then you need speak with Sselnyl Do'Zyth in Hate's Envy") + elseif HasCompletedQuest(Spawn, ThexianTaint) and not HasCompletedQuest(Spawn, RottingScum) then + if HasQuest(Spawn, RottingScum) then + if GetQuestStep(Spawn, RottingScum) ~= 3 then + PlayFlavor(NPC, "ginwyss_d_arkenett/darklight_wood/tvatar_post/ginwyss_revamp/ginwyss009.mp3", "", "", 1363812552, 1394644666, Spawn) + AddConversationOption(conversation, "Not yet.", "RottingScum_No") + else + PlayFlavor(NPC, "ginwyss_d_arkenett/darklight_wood/tvatar_post/ginwyss_revamp/ginwyss009.mp3", "", "", 1363812552, 1394644666, Spawn) + AddConversationOption(conversation, "I have.", "RottingScum_Yes") + end + StartConversation(conversation, NPC, Spawn, "Have you decimated the Thexian's proxy army?") + else + PlayFlavor(NPC, "ginwyss_d_arkenett/darklight_wood/tvatar_post/ginwyss_revamp/ginwyss001.mp3", "", "", 3871091964, 1580185291, Spawn) + AddConversationOption(conversation, "Is there nothing I can do to help?", "Quest_RottingScum_B") + AddConversationOption(conversation, "I must be going.") + StartConversation(conversation, NPC, Spawn, "Yes? We've much to deal with here, so if I seem uneager to speak with you that is why.") + end + elseif HasCompletedQuest(Spawn, RottingScum) and not HasQuest(Spawn, PickingUpSlack) and not HasCompletedQuest(Spawn, PickingUpSlack) then + PickingUpSlack_B(NPC, Spawn) + elseif HasQuest(Spawn, PickingUpSlack) and not HasCompletedQuest(Spawn, PickingUpSlack) then + if GetQuestStep(Spawn, PickingUpSlack) < 2 then + PlayFlavor(NPC, "ginwyss_d_arkenett/darklight_wood/tvatar_post/ginwyss_revamp/ginwyss016.mp3", "", "", 1608180400, 3304590468, Spawn) + AddConversationOption(conversation, "Not yet.", "PickingUpSlack_No") + else + PlayFlavor(NPC, "ginwyss_d_arkenett/darklight_wood/tvatar_post/ginwyss_revamp/ginwyss016.mp3", "", "", 1608180400, 3304590468, Spawn) + AddConversationOption(conversation, "I have.", "PickingUpSlack_Yes") + end + StartConversation(conversation, NPC, Spawn, "Did you collect enough scrap pieces of armor?") + elseif HasCompletedQuest(Spawn, PickingUpSlack) and not HasQuest(Spawn, AGuardInsignia) and not HasCompletedQuest(Spawn, AGuardInsignia) then + PickingUpSlack_02(NPC, Spawn) + elseif HasQuest(Spawn, AGuardInsignia)then --and not HasQuest(Spawn, MissingRecruit) then + PlayFlavor(NPC, "ginwyss_d_arkenett/darklight_wood/tvatar_post/ginwyss_revamp/ginwyss020.mp3", "", "", 2409485632, 3192848351, Spawn) + AddConversationOption(conversation, "I found this while hunting undead.", "Quest_MissingRecruit") + StartConversation(conversation, NPC, Spawn, "Yes, what is it now, " .. GetName(Spawn) .. "?") + elseif HasCompletedQuest(Spawn, AGuardInsignia) and not HasQuest(Spawn, MissingRecruit) and not HasCompletedQuest(Spawn, MissingRecruit) then + Quest_MissingRecruit(NPC, Spawn) + elseif HasQuest(Spawn, MissingRecruit) then + PlayFlavor(NPC, "ginwyss_d_arkenett/darklight_wood/tvatar_post/ginwyss_revamp/ginwyss024.mp3", "", "", 3017598578, 1088608550, Spawn) + if GetQuestStep(Spawn, MissingRecruit) < 2 then + AddConversationOption(conversation, "Not yet.", "MissingRecruit_No") + else + AddConversationOption(conversation, "I have. Here you go.", "MissingRecruit_Yes") + end + StartConversation(conversation, NPC, Spawn, "Have you found his field kit?") + else + Say(NPC, "Nice work. Laexyar and I appreciate it.") + end +end + +-------------------------------------------------------------------------------------- +-- Thexian Taint Complete +-------------------------------------------------------------------------------------- + +function ThexianTaint_Finish(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + SetStepComplete(Spawn, ThexianTaint, 3) + + PlayFlavor(NPC, "ginwyss_d_arkenett/darklight_wood/tvatar_post/ginwyss_revamp/ginwyss002.mp3", "", "", 195833289, 1438804587, Spawn) + AddConversationOption(conversation, "Why is that?", "Quest_RottingScum") + StartConversation(conversation, NPC, Spawn, "Of course. We appreciate this. Anything we can do to keep the Thexians out of these woods is helpful. I am glad you have arrived.") +end + +-------------------------------------------------------------------------------------- +-- QUEST Rotting Scum +-------------------------------------------------------------------------------------- +function Quest_RottingScum(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "ginwyss_d_arkenett/darklight_wood/tvatar_post/ginwyss_revamp/ginwyss004.mp3", "", "", 2620151660, 2492067079, Spawn) + AddConversationOption(conversation, "I am.", "Quest_RottingScum_01") + AddConversationOption(conversation, "I am not.") + StartConversation(conversation, NPC, Spawn, "Laexyra is in charge of the Dread Guard here in the Darklight Wood. She's been moving forces deeper into the wood and will continue to do so until we control this land as cleanly as we do the city of Neriak itself. Are you willing to lend your assistance?") +end + +function Quest_RottingScum_B(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "ginwyss_d_arkenett/darklight_wood/tvatar_post/ginwyss_revamp/ginwyss003.mp3", "", "", 3004928751, 1497818906, Spawn) + AddConversationOption(conversation, "Oh?", "Quest_RottingScum") + StartConversation(conversation, NPC, Spawn, "You wish to help? If that's the case, then I'm glad you're here.") +end + +function Quest_RottingScum_01(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "agree", 0, 0, Spawn) + AddConversationOption(conversation, "Where have they come from?", "Quest_RottingScum_02") + StartConversation(conversation, NPC, Spawn, "That is good to hear, " .. GetName(Spawn) .. ". I would like your help with the undead that infest this camp.") +end + +function Quest_RottingScum_02(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "ginwyss_d_arkenett/darklight_wood/tvatar_post/ginwyss_revamp/ginwyss006.mp3", "", "", 1721704244, 1661413444, Spawn) + AddConversationOption(conversation, "These corpses... Who were they?", "Quest_RottingScum_03") + StartConversation(conversation, NPC, Spawn, "This was once the site of a very large battle. Though ages old, new corpses are beginning to resurface and attack. I suspect none other than the Thexians to be behind this plot. The cowards would rather have the dead attack us than face us in open battle!") +end + +function Quest_RottingScum_03(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "ginwyss_d_arkenett/darklight_wood/tvatar_post/ginwyss_revamp/ginwyss007.mp3", "", "", 1606040300, 1401696355, Spawn) + AddConversationOption(conversation, "Very well.", "QuestOffer_RottingScum") + AddConversationOption(conversation, "I cannot do what you ask.") + StartConversation(conversation, NPC, Spawn, "The fallen rangers and stout cadavers are the corpses of the halfling armies and their allies who attacked Neriak long ago. Now in undeath they seek to fulfill their mission once more. You must put them down at once!") +end + +function QuestOffer_RottingScum(NPC, Spawn) + OfferQuest(NPC, Spawn, RottingScum) +end + +function RottingScum_No(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "ginwyss_d_arkenett/darklight_wood/tvatar_post/ginwyss_revamp/ginwyss011.mp3", "", "", 465595230, 4113153338, Spawn) + AddConversationOption(conversation, "I will return.") + StartConversation(conversation, NPC, Spawn, "Do not return until you have put down the stout cadavers and fallen rangers!") +end + +function RottingScum_Yes(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + SetStepComplete(Spawn, RottingScum, 3) + + PlayFlavor(NPC, "ginwyss_d_arkenett/darklight_wood/tvatar_post/ginwyss_revamp/ginwyss010.mp3", "", "agree", 1734208636, 3841795105, Spawn) + AddConversationOption(conversation, "Isn't there a way to get rid of them permanently?", "PickingUpSlack_A") + StartConversation(conversation, NPC, Spawn, "Good. They'll be back in short order, unfortunately. Your efforts, however, should cause them to cease annoying us for the time being.") +end + +-------------------------------------------------------------------------------------- +-- QUEST Picking Up Slack +-------------------------------------------------------------------------------------- + +function PickingUpSlack_A(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "ginwyss_d_arkenett/darklight_wood/tvatar_post/ginwyss_revamp/ginwyss012.mp3", "", "agree", 1734208636, 3841795105, Spawn) + AddConversationOption(conversation, "What do you mean?", "PickingUpSlack_B") + StartConversation(conversation, NPC, Spawn, "I believe Laexyra is looking into that matter. However, before you run along and help her, I first need your assistance in dealing with a few deserters.") +end + +function PickingUpSlack_B(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_1_1047.mp3", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "I could help again.", "PickingUpSlack_01") + AddConversationOption(conversation, "I must take my leave.") + StartConversation(conversation, NPC, Spawn, "New recruits looking for a fast track into Neriak often disappear. I had one leave just yesterday, and I'm having trouble finding someone to replace him.") +end + +function PickingUpSlack_01(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "ginwyss_d_arkenett/darklight_wood/tvatar_post/ginwyss_revamp/ginwyss014.mp3", "", "", 3763405805, 3752416036, Spawn) + AddConversationOption(conversation, "All right.", "QuestOffer_PickingUpSlack") + AddConversationOption(conversation, "I would prefer not to.") + StartConversation(conversation, NPC, Spawn, "Indeed you could, " .. GetName(Spawn) .. ". I doubt Soltrin is coming back anytime soon. I had him collecting scraps of armor from the moldering soldiers found north from here. Jargos claims he can forge the pieces into new armor plates. Bring me several pieces and you will be rewarded.") +end + +function QuestOffer_PickingUpSlack(NPC, Spawn) + OfferQuest(NPC, Spawn, PickingUpSlack) +end + +function PickingUpSlack_No(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "ginwyss_d_arkenett/darklight_wood/tvatar_post/ginwyss_revamp/ginwyss018.mp3", "", "", 3110804349, 157804660, Spawn) + AddConversationOption(conversation, "I will return.") + StartConversation(conversation, NPC, Spawn, "Jargos cannot make armor plates with raw material. Do not return until you've collected enough scrap armor from the moldering soldiers.") +end + +function PickingUpSlack_Yes(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + SetStepComplete(Spawn, PickingUpSlack, 2) + + if HasQuest(Spawn, AGuardInsignia) then + AddConversationOption(conversation, "I found this while hunting undead.", "Quest_MissingRecruit") + StartConversation(conversation, NPC, Spawn, "Good work, young one. You're turning out to be a much harder worker than that no good deserter, Soltrin. Curious... I wonder what became of him.") + else + AddConversationOption(conversation, "I'll keep my eyes open for him.", "PickingUpSlack_03") + StartConversation(conversation, NPC, Spawn, "Good work, young one. You're turning out to be a much harder worker than that no good deserter, Soltrin. Curious... I wonder what became of him.") + end +end + +function PickingUpSlack_02(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + if HasQuest(Spawn, AGuardInsignia) then + AddConversationOption(conversation, "I found this while hunting undead.", "Quest_MissingRecruit") + StartConversation(conversation, NPC, Spawn, "Good work, young one. You're turning out to be a much harder worker than that no good deserter, Soltrin. Curious... I wonder what became of him.") + else + AddConversationOption(conversation, "I'll keep my eyes open for him.", "PickingUpSlack_03") + StartConversation(conversation, NPC, Spawn, "Good work, young one. You're turning out to be a much harder worker than that no good deserter, Soltrin. Curious... I wonder what became of him.") + end +end + +function PickingUpSlack_03(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "I'll see what I can do.") + StartConversation(conversation, NPC, Spawn, "That is much appreciated, " .. GetName(Spawn) .. ". Now, in the meantime I suggest you speak with some of the others found here at this post. There is much work to be done.") +end + +-------------------------------------------------------------------------------------- +-- QUEST Missing Recruit +-------------------------------------------------------------------------------------- + +function Quest_MissingRecruit(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + SetStepComplete(Spawn, MissingRecruit, 1) + + PlayFlavor(NPC, "ginwyss_d_arkenett/darklight_wood/tvatar_post/ginwyss_revamp/ginwyss021.mp3", "", "", 4046947438, 1960374270, Spawn) + AddConversationOption(conversation, "Sure.", "Quest_MissingRecruit_01") + StartConversation(conversation, NPC, Spawn, "Hmm. Interesting. Perhaps Soltrin didn't catch the fever. Perhaps he died while performing his duties--how noble of him. I wonder if we can still retrieve his field kit... Are you up for another task, " .. GetName(Spawn) .. "?") +end + +function Quest_MissingRecruit_01(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + SetStepComplete(Spawn, AGuardInsignia, 1) + + PlayFlavor(NPC, "ginwyss_d_arkenett/darklight_wood/tvatar_post/ginwyss_revamp/ginwyss022.mp3", "", "", 2283622719, 1945338688, Spawn) + AddConversationOption(conversation, "All right.", "QuestOffer_MissingRecruit") + StartConversation(conversation, NPC, Spawn, "I'd like you to search the same area where you destroyed the undead soldiers. If Soltrin was killed, it's quite possible that his body is nearby. Hopefully his field kit will still be intact. If it is, I'd like you to retrieve it for me.") +end + +function QuestOffer_MissingRecruit(NPC, Spawn) + OfferQuest(NPC, Spawn, MissingRecruit) +end + +function MissingRecruit_No(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "ginwyss_d_arkenett/darklight_wood/tvatar_post/ginwyss_revamp/ginwyss026.mp3", "", "", 3389215806, 2500269282, Spawn) + AddConversationOption(conversation, "Alright, alright!") + StartConversation(conversation, NPC, Spawn, "Keep searching then!") +end + +function MissingRecruit_Yes(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + SetStepComplete(Spawn, MissingRecruit, 2) + + PlayFlavor(NPC, "ginwyss_d_arkenett/darklight_wood/tvatar_post/ginwyss_revamp/ginwyss025.mp3", "", "", 3122094664, 4174660668, Spawn) + AddConversationOption(conversation, "You're welcome.") + StartConversation(conversation, NPC, Spawn, "Nice work, Sygman. These kits aren't cheap. Again, you have our thanks.") +end \ No newline at end of file diff --git a/server/SpawnScripts/Darklight/GuardDonidas.lua b/server/SpawnScripts/Darklight/GuardDonidas.lua new file mode 100644 index 000000000..6c7238939 --- /dev/null +++ b/server/SpawnScripts/Darklight/GuardDonidas.lua @@ -0,0 +1,36 @@ +--[[ + Script Name : SpawnScripts/Darklight/GuardDonidas.lua + Script Purpose : Guard Donidas + Script Author : John Adams + Script Date : 2009.02.01 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +function spawn(NPC) + SetPlayerProximityFunction(NPC, 10, "InRange", "LeaveRange") +end + +function respawn(NPC) + spawn(NPC) +end + +function InRange(NPC, Spawn) +end + +function LeaveRange(NPC, Spawn) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + + choice = math.random(1,2) + + if choice == 1 then + PlayFlavor(NPC, "voiceover/english/human_eco_evil_1/ft/service/guard/human_guard_service_evil_1_hail_gm_7fa14d4.mp3", "Do not challenge my authority citizen. In Freeport, the Overlord's word is law!", "scold", 1744928325, 2718395831, Spawn) + elseif choice == 2 then + PlayFlavor(NPC, "voiceover/english/human_eco_evil_1/ft/service/guard/human_guard_service_evil_1_hail_gm_582205e1.mp3", "Do you have business with the Freeport Militia?", "glare", 3265760930, 1055342916, Spawn) + else + end + +end + diff --git a/server/SpawnScripts/Darklight/GuardTiboen.lua b/server/SpawnScripts/Darklight/GuardTiboen.lua new file mode 100644 index 000000000..b16ec2fe2 --- /dev/null +++ b/server/SpawnScripts/Darklight/GuardTiboen.lua @@ -0,0 +1,36 @@ +--[[ + Script Name : SpawnScripts/Darklight/GuardTiboen.lua + Script Purpose : Guard Tiboen + Script Author : John Adams + Script Date : 2009.02.01 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +function spawn(NPC) + SetPlayerProximityFunction(NPC, 10, "InRange", "LeaveRange") +end + +function respawn(NPC) + spawn(NPC) +end + +function InRange(NPC, Spawn) +end + +function LeaveRange(NPC, Spawn) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + + choice = math.random(1,2) + + if choice == 1 then + PlayFlavor(NPC, "voiceover/english/human_eco_evil_1/ft/service/guard/human_guard_service_evil_1_hail_gm_edb196f8.mp3", "All praises to the Overlord. The Militia protects loyal citizens of Freeport.", "salute_freeport", 1906726944, 247472694, Spawn) + elseif choice == 2 then + PlayFlavor(NPC, "voiceover/english/human_eco_evil_1/ft/service/guard/human_guard_service_evil_1_hail_gm_582205e1.mp3", "Do you have business with the Freeport Militia?", "glare", 3265760930, 1055342916, Spawn) + else + end + +end + diff --git a/server/SpawnScripts/Darklight/HarnenTaptha.lua b/server/SpawnScripts/Darklight/HarnenTaptha.lua new file mode 100644 index 000000000..013896548 --- /dev/null +++ b/server/SpawnScripts/Darklight/HarnenTaptha.lua @@ -0,0 +1,66 @@ +--[[ + Script Name : SpawnScripts/Darklight/HarnenTaptha.lua + Script Purpose : Harnen Taptha + Script Author : John Adams + Script Date : 2009.01.31 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +function spawn(NPC) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + if HasQuest(Spawn, 99) and GetQuestStep(Spawn, 99) == 1 then + WhatDoYouWant(NPC, Spawn, conversation) + else + Say(NPC, "Go away, go away, go away, go away!", Spawn) + end +end + +function WhatDoYouWant(NPC, Spawn, conversation) + PlayFlavor(NPC, "voiceover/english/neriak/harnen_taptha/darklight_wood/tvatar_post/laexyra/harnen/harnen000.mp3", "", "", 2511697998, 3854280665, Spawn) + AddConversationOption(conversation, "I have a message for you.", "dlg_2_1") + StartConversation(conversation, NPC, Spawn, "What? What is it?! What do you want?!") +end + +function dlg_2_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/neriak/harnen_taptha/darklight_wood/tvatar_post/laexyra/harnen/harnen001.mp3", "", "", 1833587639, 1382963065, Spawn) + AddConversationOption(conversation, "Laexyra Y'Barriath wanted me to remind you that she was right.", "dlg_2_2") + StartConversation(conversation, NPC, Spawn, "Oh? Maybe this is about those mercenaries that failed to show.") +end + +function dlg_2_2(NPC, Spawn) + SetStepComplete(Spawn, 99, 1) + SpawnSet(NPC, "attackable", 1) + SpawnSet(NPC, "show_level", 1) + + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "Harnen...") + StartConversation(conversation, NPC, Spawn, "...") +end + +function healthchanged(NPC, Spawn) + current_hp = GetHP(NPC) + max_hp = GetMaxHP(NPC) + + if (current_hp <= (max_hp *2)) then + choice = math.random(1, 2) + if choice == 1 then + Say(NPC, "For Thule's sake!", Spawn) + else + PlayFlavor(NPC, "voiceover/english/ghost_human_base_1/ft/ghost/ghost_human_base_1_1_halfhealth_gm_8bdfff2d.mp3", "I won't miss again!", "", 1970756563, 618808961, Spawn) + end + end +end \ No newline at end of file diff --git a/server/SpawnScripts/Darklight/IlmtarDViervs.lua b/server/SpawnScripts/Darklight/IlmtarDViervs.lua new file mode 100644 index 000000000..7b03bab0f --- /dev/null +++ b/server/SpawnScripts/Darklight/IlmtarDViervs.lua @@ -0,0 +1,394 @@ +--[[ + Script Name : IlmtarDviervs.lua + Script Purpose : Ilmtar D'Viervs + Script Author : ParserGenerated (Replace this) + Script Date : 06/24/2018 + Script Notes : Auto-Generated from a chat log using SpawnScriptDesigner +--]] + +-- Quest ID's +local WHATS_IN_DEMAND = 142 +local ONE_MANS_WASTE = 143 +local USEFUL_MATERIALS = 144 +local SORCEROUS_NECESSITIES = 145 +local TIPPING_THE_SCALES_OF_POWER = 146 +local A_SNAKE_MADE_SERUM = 147 +local THE_MOTHER_LODE = 148 + +function spawn(NPC) + ProvidesQuest(NPC, WHATS_IN_DEMAND) + ProvidesQuest(NPC, ONE_MANS_WASTE) + ProvidesQuest(NPC, USEFUL_MATERIALS) + ProvidesQuest(NPC, SORCEROUS_NECESSITIES) + ProvidesQuest(NPC, TIPPING_THE_SCALES_OF_POWER) + ProvidesQuest(NPC, A_SNAKE_MADE_SERUM) + ProvidesQuest(NPC, THE_MOTHER_LODE) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + local con = CreateConversation() + + if CanReceiveQuest(Spawn, WHATS_IN_DEMAND) then + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_1_1048.mp3", "", "", 0, 0, Spawn) + AddConversationOption(con, "Others like myself.", "dlg_2") + StartConversation(con, NPC, Spawn, "Greetings. I am Ilmtar D'Viervs, Quartermaster for the Dread Guard. Ever since the recent Thexian attacks on Hate's Envy, I've been at my wit's end finding adequate supplies for those stationed here at T'Vatar Outpost. My chief responsibility is supplying general goods, or paying others to find them for me.") + elseif HasQuest(Spawn, WHATS_IN_DEMAND) and GetQuestStep(Spawn, WHATS_IN_DEMAND) >= 1 and GetQuestStep(Spawn, WHATS_IN_DEMAND) <= 2 then + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_2_1048.mp3", "", "", 0, 0, Spawn) + if HasQuest(Spawn, WHATS_IN_DEMAND) and GetQuestStep(Spawn, WHATS_IN_DEMAND) == 2 then + AddConversationOption(con, "Yes, here you are.", "dlg_6") + end + if HasQuest(Spawn, WHATS_IN_DEMAND) and GetQuestStep(Spawn, WHATS_IN_DEMAND) == 1 then + AddConversationOption(con, "Not yet.") + end + StartConversation(con, NPC, Spawn, "Do you have the bone fragments?") + elseif HasCompletedQuest(Spawn, WHATS_IN_DEMAND) and CanReceiveQuest(Spawn, ONE_MANS_WASTE) then + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_2_1048.mp3", "", "", 0, 0, Spawn) + AddConversationOption(con, "Yes, here you are.", "dlg_6") + StartConversation(con, NPC, Spawn, "Do you have the bone fragments?") + elseif HasQuest(Spawn, ONE_MANS_WASTE) and GetQuestStep(Spawn, ONE_MANS_WASTE) >= 1 and GetQuestStep(Spawn, ONE_MANS_WASTE) <= 2 then + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_3_1048.mp3", "", "", 0, 0, Spawn) + if HasQuest(Spawn, ONE_MANS_WASTE) and GetQuestStep(Spawn, ONE_MANS_WASTE) == 2 then + AddConversationOption(con, "Yes, I have them.", "dlg_10") + end + if HasQuest(Spawn, ONE_MANS_WASTE) and GetQuestStep(Spawn, ONE_MANS_WASTE) == 1 then + AddConversationOption(con, "Not yet.") + end + StartConversation(con, NPC, Spawn, "Have you the weapons?") + elseif HasCompletedQuest(Spawn, ONE_MANS_WASTE) and CanReceiveQuest(Spawn, USEFUL_MATERIALS) then + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_2_1048.mp3", "", "", 0, 0, Spawn) + if HasQuest(Spawn, USEFUL_MATERIALS) and GetQuestStep(Spawn, USEFUL_MATERIALS) == 2 then + AddConversationOption(con, "I did. Here you go.", "dlg_14") + end + if HasQuest(Spawn, USEFUL_MATERIALS) and GetQuestStep(Spawn, USEFUL_MATERIALS) == 1 then + AddConversationOption(con, "I haven't yet.") + end + StartConversation(con, NPC, Spawn, "Did you gather the wood?") + elseif HasCompletedQuest(Spawn, USEFUL_MATERIALS) and CanReceiveQuest(Spawn, SORCEROUS_NECESSITIES) then + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_3_1048.mp3", "", "", 0, 0, Spawn) + if HasQuest(Spawn, SORCEROUS_NECESSITIES) and GetQuestStep(Spawn, SORCEROUS_NECESSITIES) == 2 then + AddConversationOption(con, "I did.", "dlg_18") + end + if HasQuest(Spawn, SORCEROUS_NECESSITIES) and GetQuestStep(Spawn, SORCEROUS_NECESSITIES) == 1 then + AddConversationOption(con, "I haven't yet.") + end + StartConversation(con, NPC, Spawn, "Did you collect the bat wings?") + elseif HasCompletedQuest(Spawn, SORCEROUS_NECESSITIES) and CanReceiveQuest(Spawn, TIPPING_THE_SCALES_OF_POWER) then + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_3_1048.mp3", "", "", 0, 0, Spawn) + if HasQuest(Spawn, TIPPING_THE_SCALES_OF_POWER) and GetQuestStep(Spawn, TIPPING_THE_SCALES_OF_POWER) == 2 then + AddConversationOption(con, "I did, here you go.", "dlg_21") + end + if HasQuest(Spawn, TIPPING_THE_SCALES_OF_POWER) and GetQuestStep(Spawn, TIPPING_THE_SCALES_OF_POWER) == 1 then + AddConversationOption(con, "Not yet.") + end + StartConversation(con, NPC, Spawn, "Did you collect the scales?") + elseif HasCompletedQuest(Spawn, TIPPING_THE_SCALES_OF_POWER) and CanReceiveQuest(Spawn, A_SNAKE_MADE_SERUM) then + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_2_1048.mp3", "", "", 0, 0, Spawn) + if HasQuest(Spawn, A_SNAKE_MADE_SERUM) and GetQuestStep(Spawn, A_SNAKE_MADE_SERUM) == 2 then + AddConversationOption(con, "Yes, I did.", "dlg_27") + end + if HasQuest(Spawn, A_SNAKE_MADE_SERUM) and GetQuestStep(Spawn, A_SNAKE_MADE_SERUM) == 1 then + AddConversationOption(con, "Not yet.") + end + StartConversation(con, NPC, Spawn, "Did you bring me back the wurm corpses?") + elseif HasCompletedQuest(Spawn, A_SNAKE_MADE_SERUM) then + if HasQuest(Spawn, THE_MOTHER_LODE) and GetQuestStep(Spawn, THE_MOTHER_LODE) == 1 then + AddConversationOption(con, "Not yet.") + end + StartConversation(con, NPC, Spawn, "Did you get her skin?") + elseif HasCompletedQuest(Spawn, A_SNAKE_MADE_SERUM) then + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_3_1048.mp3", "", "", 0, 0, Spawn) + if HasQuest(Spawn, THE_MOTHER_LODE) and GetQuestStep(Spawn, THE_MOTHER_LODE) == 2 then + AddConversationOption(con, "Yes.", "dlg_34") + end + StartConversation(con, NPC, Spawn, "Did you get her?") + end + + --[[ Say() from this NPC + + Say(NPC, "You've helped me a great deal, and I am thankful.", Spawn) + + + Orphaned PlayFlavors + + + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_2_1048.mp3", "", "", 0, 0, Spawn) + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + + --]] + +end + +function dlg_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + local con = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(con, "Sure.", "dlg_3") + AddConversationOption(con, "Not right now.") + StartConversation(con, NPC, Spawn, "Precisely. Would you happen to be looking for work?") +end + +function dlg_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + local con = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(con, "I'll collect the bone chips.", "OfferQuest1") + AddConversationOption(con, "Find someone else to do your work.") + StartConversation(con, NPC, Spawn, "I thought so. Currently I'm collecting bone fragments for the necromancers to use as reagents for their reanimating spells. This field we're in is home to a great number of undead, with fresh numbers rising daily. They're a perfect source for the bone fragments I'm after. So, if you're still willing to help...") +end + +function OfferQuest1(NPC, Spawn) + OfferQuest(NPC, Spawn, WHATS_IN_DEMAND) + + --[[ Move the following conversation to the Accepted function of the quest script + FaceTarget(NPC, Spawn) + local con = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + StartConversation(con, NPC, Spawn, "Then I await your return.") + --]] +end + +function dlg_6(NPC, Spawn) + FaceTarget(NPC, Spawn) + local con = CreateConversation() + + SetStepComplete(Spawn, WHATS_IN_DEMAND, 2) + + AddConversationOption(con, "Yes.", "dlg_7") + AddConversationOption(con, "Not right now.") + StartConversation(con, NPC, Spawn, "Well done, well done. The whisperers were right about you, Sygman. There's more collecting to be done. Are you in?") +end + +function dlg_7(NPC, Spawn) + FaceTarget(NPC, Spawn) + local con = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(con, "I'll collect some for you.", "OfferQuest2") + AddConversationOption(con, "You'll have to collect them yourself.") + StartConversation(con, NPC, Spawn, "In the same field that these bones came from you'll find a great many weapons that once belonged to the soldiers who fought here. We arm our own legions of undead minions with them, thus saving the higher quality weapons for those of us still breathing.") +end + +function OfferQuest2(NPC, Spawn) + OfferQuest(NPC, Spawn, ONE_MANS_WASTE) + + --[[ Move the following conversation to the Accepted function of the quest script + FaceTarget(NPC, Spawn) + local con = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(con, "I'll see what can I dig up.") + StartConversation(con, NPC, Spawn, "Once you've collected a decent number of weapons return them to me.") + --]] +end + +function dlg_10(NPC, Spawn) + FaceTarget(NPC, Spawn) + local con = CreateConversation() + + SetStepComplete(Spawn, ONE_MANS_WASTE, 2) + + AddConversationOption(con, "Certainly.", "dlg_11") + AddConversationOption(con, "Not right now.") + StartConversation(con, NPC, Spawn, "Again, I am impressed, Sygman. You may be surprised to know how hard it is to find good workers around here. Let's see here... bone fragments, weapons, ah, wood. Care for another job?") +end + +function dlg_11(NPC, Spawn) + FaceTarget(NPC, Spawn) + local con = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(con, "I can do that.", "OfferQuest4") + AddConversationOption(con, "Not right now.") + StartConversation(con, NPC, Spawn, "North of here are the remnants of recent attempts to construct upon the Field of Ruin. Never mind the fools who thought it was a good idea. Their building materials can be used to construct barricades and strengthen our preexisting dwellings. Specifically, I speak of the wood they've left laying around. I'd like you to retrieve it.") +end + +function OfferQuest4(NPC, Spawn) + OfferQuest(NPC, Spawn, USEFUL_MATERIALS) + + --[[ Move the following conversation to the Accepted function of the quest script + FaceTarget(NPC, Spawn) + local con = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + StartConversation(con, NPC, Spawn, "Good.") + --]] +end + +function dlg_14(NPC, Spawn) + FaceTarget(NPC, Spawn) + local con = CreateConversation() + + SetStepComplete(Spawn, USEFUL_MATERIALS, 2) + + AddConversationOption(con, "I have no intention of doing that.", "dlg_15") + AddConversationOption(con, "Sorry, but I am needed elsewhere.") + StartConversation(con, NPC, Spawn, "Your help is most appreciated, Sygman. Most appreciated. There may yet be hope for this outpost. That is unless... you chose to abandon us now.") +end + +function dlg_15(NPC, Spawn) + FaceTarget(NPC, Spawn) + local con = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(con, "I can do that.", "OfferQuest5") + AddConversationOption(con, "Bat wings? I'm not interested.") + StartConversation(con, NPC, Spawn, "I thought not. By now I'm sure you've begun to understand the reputation you're garnering back in Neriak. Speaking of which, I've just received a request from a Neriak sorcerer of some repute. He's requesting fresh bat wings. Apparently they're a chief reagent used in a levitation spell he's working on. Would you be willing to bring me some?") +end + +function OfferQuest5(NPC, Spawn) + OfferQuest(NPC, Spawn, SORCEROUS_NECESSITIES) + + --[[ Move the following conversation to the Accepted function of the quest script + FaceTarget(NPC, Spawn) + local con = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(con, "I'll be back.") + StartConversation(con, NPC, Spawn, "Good, very good. You can find a colony of bats due west from T'Vatar Outpost.") + --]] +end + +function dlg_18(NPC, Spawn) + FaceTarget(NPC, Spawn) + local con = CreateConversation() + + SetStepComplete(Spawn, SORCEROUS_NECESSITIES, 2) + + AddConversationOption(con, "I will bring you snake scales presently.", "OfferQuest6") + AddConversationOption(con, "This doesn't interest me.") + StartConversation(con, NPC, Spawn, "Ah, of course you did, Sygman. You've earned me, er.. us quite a bit of favor with the powers that be. But why stop there? If you travel farther west you'll find serpents slithering along the banks of the Searing Tendril River. Their scales are said to heighten the potency of a shadowknight's abilities. Go, bring me their scales.") +end + +function OfferQuest6(NPC, Spawn) + OfferQuest(NPC, Spawn, TIPPING_THE_SCALES_OF_POWER) + + --[[ Move the following conversation to the Accepted function of the quest script + FaceTarget(NPC, Spawn) + local con = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(con, "I will return when I get the scales.") + StartConversation(con, NPC, Spawn, "Good, good.") + --]] +end + +function dlg_21(NPC, Spawn) + FaceTarget(NPC, Spawn) + local con = CreateConversation() + + SetStepComplete(Spawn, TIPPING_THE_SCALES_OF_POWER, 2) + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(con, "What breakthrough is that?", "dlg_22") + StartConversation(con, NPC, Spawn, "Yes, these will do nicely. Now then, I have a bit of good news to share with you. It seems we've made a breakthrough in our battle with the Thexian curs.") +end + +function dlg_22(NPC, Spawn) + FaceTarget(NPC, Spawn) + local con = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(con, "Where do the pheromones come from?", "dlg_23") + StartConversation(con, NPC, Spawn, "A highly valued target has been captured... alive! Thus far he's said little, despite our torturers' best efforts. Queen Cristanos, however, feels that there are other methods of making the truth spill from our captive's lips. If a particular pheromone is harvested, it can, in the right hands, be distilled into a powerful truth serum.") +end + +function dlg_23(NPC, Spawn) + FaceTarget(NPC, Spawn) + local con = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(con, "Of course.", "dlg_24") + StartConversation(con, NPC, Spawn, "They come from flying snakes, the scar wurms. They glide about in Innoruuk's Scar just east of here. You'll have to hit them with something to catch their attention. Once that happens, though, they're quite aggressive--it's mating season.") +end + +function dlg_24(NPC, Spawn) + FaceTarget(NPC, Spawn) + local con = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(con, "I can do that.", "OfferQuest7") + AddConversationOption(con, "No thanks.") + StartConversation(con, NPC, Spawn, "Bring me back several of these wurm corpses so I can harvest their pheromone sacs. With any luck we'll have enough to make the truth serum Queen Cristanos has demanded.") +end + +function OfferQuest7(NPC, Spawn) + OfferQuest(NPC, Spawn, A_SNAKE_MADE_SERUM) + + --[[ Move the following conversation to the Accepted function of the quest script + FaceTarget(NPC, Spawn) + local con = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + StartConversation(con, NPC, Spawn, "Great. I'll be here preparing the additional ingredients needed for the serum.") + --]] +end + +function dlg_27(NPC, Spawn) + FaceTarget(NPC, Spawn) + local con = CreateConversation() + + SetStepComplete(Spawn, A_SNAKE_MADE_SERUM, 2) + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(con, "What do you have in mind?", "dlg_28") + StartConversation(con, NPC, Spawn, "Curses, this is not the result that I expected! These pheromones are far too weak to be used in the manner we need. We'll need a much stronger sample to draw from.") +end + +function dlg_28(NPC, Spawn) + FaceTarget(NPC, Spawn) + local con = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(con, "So that work was for nothing?", "dlg_29") + StartConversation(con, NPC, Spawn, "The corpses you've brought me are all males. We need the pheromone of a female, the wurm mother.") +end + +function dlg_29(NPC, Spawn) + FaceTarget(NPC, Spawn) + local con = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(con, "Sure.", "dlg_30") + AddConversationOption(con, "No. Definitely not.") + StartConversation(con, NPC, Spawn, "Absolutely not! We will use their pheromones to attract and ultimately kill the brood mother. With her corpse, we can make a potent version of the serum. Are you game?") +end + +function dlg_30(NPC, Spawn) + FaceTarget(NPC, Spawn) + local con = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(con, "I'll return with her corpse.", "OfferQuest8") + AddConversationOption(con, "Maybe later.") + StartConversation(con, NPC, Spawn, "Excellent. I've made this small device that will disperse the pheromone. This should call forth the wurm mother. Go back to Innoruuk's Scar and use it on the bridge. Once the wurm mother comes forth to spawn... kill her.") +end + +function OfferQuest8(NPC, Spawn) + OfferQuest(NPC, Spawn, THE_MOTHER_LODE) + + --[[ Move the following conversation to the Accepted function of the quest script + FaceTarget(NPC, Spawn) + local con = CreateConversation() + + AddConversationOption(con, "That's reassuring.") + StartConversation(con, NPC, Spawn, "Good luck, Sygman. Be sure you don't spray any of that stuff on yourself, ha!") + --]] +end + +function dlg_34(NPC, Spawn) + FaceTarget(NPC, Spawn) + local con = CreateConversation() + + SetStepComplete(Spawn, THE_MOTHER_LODE, 2) + + AddConversationOption(con, "Good-bye.") + StartConversation(con, NPC, Spawn, "Ah, lovely! This is quite impressive, Sygman. I've almost finished the serum. Now I just need to add the essences distilled from the wurm mother's internal organs! Well done, Sygman. With this truth serum, our Queen is that much closer to bringing the Thexians to their knees. On behalf of the Queen, I offer you many thanks. Now, if you'll excuse me, I must concentrate on finishing my work here.") +end \ No newline at end of file diff --git a/server/SpawnScripts/Darklight/IthariKXyrae.lua b/server/SpawnScripts/Darklight/IthariKXyrae.lua new file mode 100644 index 000000000..0ecb01fdc --- /dev/null +++ b/server/SpawnScripts/Darklight/IthariKXyrae.lua @@ -0,0 +1,40 @@ +--[[ + Script Name : SpawnScripts/Darklight/IthariKXyrae.lua + Script Purpose : Ithari K'Xyrae + Script Author : John Adams + Script Date : 2009.02.01 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +function spawn(NPC) + SetPlayerProximityFunction(NPC, 10, "InRange", "LeaveRange") +end + +function respawn(NPC) + spawn(NPC) +end + +function InRange(NPC, Spawn) +end + +function LeaveRange(NPC, Spawn) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) +end + +function aggro(NPC, Spawn) + PlayFlavor(NPC, "voiceover/english/neriak/ithari_k_xyrae/darklight_wood/darkelf/quest_ithari_kxyrae_aggro_gf_61c50190.mp3", "For N'Fyre!", "", 2008625885, 2662895115, Spawn) +end + +function healthchanged(NPC) + HalfHealth = GetMaxHP(NPC) / 2 + if GetHP(NPC) <= HalfHealth then + PlayFlavor(NPC, "voiceover/english/optional3/darkelf_base_1/ft/darkelf/darkelf_base_1_1_halfhealth_gf_9e244d19.mp3", "How dare you!", "", 2905660023, 2043697886, Spawn) + end +end + +function death(NPC, Spawn) + PlayFlavor(NPC, "voiceover/english/neriak/ithari_k_xyrae/darklight_wood/darkelf/quest_ithari_kxyrae_death_gf_4f524174.mp3", "I'll never regain her favor now!", "", 3578616574, 1411501104, Spawn) +end diff --git a/server/SpawnScripts/Darklight/JhanaDoZyth.lua b/server/SpawnScripts/Darklight/JhanaDoZyth.lua new file mode 100644 index 000000000..5abcdc0fa --- /dev/null +++ b/server/SpawnScripts/Darklight/JhanaDoZyth.lua @@ -0,0 +1,141 @@ +--[[ + Script Name : SpawnScripts/Darklight/JhanaDoZyth.lua + Script Purpose : Jhana Do'Zyth + Script Author : Cynnar + Script Date : 2015.07.15 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +local AnAuthorityOnHate = 125 +local ProwlerAnnoyance = 128 +local AFerociousInconvenience = 129 + +function spawn(NPC) + ProvidesQuest(NPC, ProwlerAnnoyance) + ProvidesQuest(NPC, AFerociousInconvenience) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + if HasQuest(Spawn, AnAuthorityOnHate) and not HasCompletedQuest(Spawn, AnAuthorityOnHate) then + SetStepComplete(Spawn, AnAuthorityOnHate, 1) + end + + if HasCompletedQuest(Spawn, AFerociousInconvenience) then + Quest2Chat_3(NPC, Spawn) + elseif HasQuest(Spawn, AFerociousInconvenience) and GetQuestStep(Spawn, AFerociousInconvenience) == 1 then + PlayFlavor(NPC, "jhana_do_zyth/darklight_wood/hates_envy/jhana_revamp/jhana011.mp3", "", "", 3939930942, 3221492064, Spawn) + AddConversationOption(conversation, "I'm still hunting the beast. Where should I look for it?", "Quest2Chat_2") + StartConversation(conversation, NPC, Spawn, "Did you find the pack leader of the dusk prowlers?") + elseif HasQuest(Spawn, AFerociousInconvenience) and GetQuestStep(Spawn, AFerociousInconvenience) == 2 then + PlayFlavor(NPC, "jhana_do_zyth/darklight_wood/hates_envy/jhana_revamp/jhana011.mp3", "", "", 3939930942, 3221492064, Spawn) + AddConversationOption(conversation, "The beast has been slain.", "Quest2Chat_3") + StartConversation(conversation, NPC, Spawn, "Did you find the pack leader of the dusk prowlers?") + elseif HasCompletedQuest(Spawn, ProwlerAnnoyance) and not HasQuest(Spawn, AFerociousInconvenience) and not HasCompletedQuest(Spawn, AFerociousInconvenience) then + Quest2Chat_0(NPC, Spawn) + elseif HasQuest(Spawn, ProwlerAnnoyance) and GetQuestStep(Spawn, ProwlerAnnoyance) == 2 then + PlayFlavor(NPC, "jhana_do_zyth/darklight_wood/hates_envy/jhana_revamp/jhana005.mp3", "", "", 2396106128, 3585430075, Spawn) + AddConversationOption(conversation, "Their numbers have been greatly reduced.", "Quest2Chat_0") + StartConversation(conversation, NPC, Spawn, "Have you removed the dusk prowlers from the area?") + elseif HasQuest(Spawn, ProwlerAnnoyance) and GetQuestStep(Spawn, ProwlerAnnoyance) == 1 then + PlayFlavor(NPC, "jhana_do_zyth/darklight_wood/hates_envy/jhana_revamp/jhana005.mp3", "", "", 2396106128, 3585430075, Spawn) + AddConversationOption(conversation, "Not yet.", "Quest1Chat_1") + StartConversation(conversation, NPC, Spawn, "Have you removed the dusk prowlers from the area?") + elseif not HasCompletedQuest(Spawn, AnAuthorityOnHate) and not HasQuest(Spawn, AnAuthorityOnHate) then + PlayFlavor(NPC, "voiceover/english/neriak/jhana_do_zyth/darklight_wood/quest/hates_envy/qst_jhana_too_low_ee52f282.mp3", "", "", 1579540723, 4221550003, Spawn) + StartConversation(conversation, NPC, Spawn, "Maybe you could help me... if you were a little bit stronger.") + elseif not HasQuest(Spawn, ProwlerAnnoyance) then + PlayFlavor(NPC, "jhana_do_zyth/darklight_wood/hates_envy/jhana_revamp/jhana001.mp3", "", "", 2468334286, 695035654, Spawn) + AddConversationOption(conversation, "What is it you want?", "Quest1Chat_0") + AddConversationOption(conversation, "I seek to serve Neriak in any way I can.", "Quest1Chat_0") + AddConversationOption(conversation, "I cannot help at this time.", "PlayerEmote_no") + StartConversation(conversation, NPC, Spawn, "Ah, the hero of Hate's Envy stands before us! Isn't he quite the specimen, Mother? Pellendra has informed us of your successful efforts to stop the Sablevein menace and the Thexians who were behind it. Now we'd like you to help us.") + end +end + +function PlayerEmote_no(NPC, Spawn) + PlayFlavor(Spawn, "", "", "no", 0, 0, Player) +end + +----------------------------------------------------------------------------------- +-- QUEST 1 Chat +----------------------------------------------------------------------------------- +function Quest1Chat_0(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "jhana_do_zyth/darklight_wood/hates_envy/jhana_revamp/jhana003.mp3", "", "agree", 1064695588, 175136461, Spawn) + AddConversationOption(conversation, "I'm up to the task!", "QuestOffer_ProwlerAnnoyance") + AddConversationOption(conversation, "I am not up to this task.") + StartConversation(conversation, NPC, Spawn, "With the recent Sablevein attacks from the east, the dusk prowlers have been forced nearer to Hate's Envy. Now they impede our progress into a Thexian burial chamber we wish to investigate. I need you to cull a number of these prowlers so we can gain access to the caves.") +end + +function Quest1Chat_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(Spawn, "", "", "no", 0, 0, Player) + PlayFlavor(NPC, "jhana_do_zyth/darklight_wood/hates_envy/jhana_revamp/jhana007.mp3", "", "tapfoot", 1258715663, 4051557607, Spawn) + AddConversationOption(conversation, "Very well") + StartConversation(conversation, NPC, Spawn, "I thought my directions were clear. Do not return until you've slain the dusk prowlers.") +end + +function QuestOffer_ProwlerAnnoyance(NPC, Spawn) + OfferQuest(NPC, Spawn, ProwlerAnnoyance) +end + +----------------------------------------------------------------------------------- +-- QUEST 2 Chat +----------------------------------------------------------------------------------- + +function Quest2Chat_0(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + SetStepComplete(Spawn, ProwlerAnnoyance, 2) + + PlayFlavor(NPC, "jhana_do_zyth/darklight_wood/hates_envy/jhana_revamp/jhana006.mp3", "", "", 2179526819, 2808298057, Spawn) + AddConversationOption(conversation, "What do you have in mind this time?", "Quest2Chat_1") + AddConversationOption(conversation, "Forget it. I'm finished helping you.", "PlayerEmote_no") + StartConversation(conversation, NPC, Spawn, "Wonderful, " .. GetName(Spawn) .. ". Knowing that, I have no doubt in your ability to help me once more.") +end + +function Quest2Chat_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "jhana_do_zyth/darklight_wood/hates_envy/jhana_revamp/jhana008.mp3", "", "", 2954723683, 1591713165, Spawn) + AddConversationOption(conversation, "I will remove the pack leader.", "QuestOffer_AFerociousInconvenience") + AddConversationOption(conversation, "Good luck with that.", "PlayerEmote_no") + StartConversation(conversation, NPC, Spawn, "While you were indeed successful in removing several of the dusk prowlers from outside the Thexian tomb, it appears their pack leader has moved inside the cave and made it his den. He must be exterminated at once!") +end + +function Quest2Chat_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "jhana_do_zyth/darklight_wood/hates_envy/jhana_revamp/jhana013.mp3", "", "tapfoot", 2892144271, 4226558009, Spawn) + AddConversationOption(conversation, "I will return.") + StartConversation(conversation, NPC, Spawn, "As I mentioned earlier, the pack leader has moved into the cave just west from Hate's Envy. When you find the beast, slay it!") +end + +function Quest2Chat_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + SetStepComplete(Spawn, AFerociousInconvenience, 2) + + PlayFlavor(NPC, "jhana_do_zyth/darklight_wood/hates_envy/jhana_revamp/jhana012.mp3", "", "", 3216838749, 637919977, Spawn) + AddConversationOption(conversation, "As you wish.") + StartConversation(conversation, NPC, Spawn, "Fine work, " .. GetName(Spawn) .. ". Fine work indeed. Mother's work can begin at once. I suggest speaking with her if you have not already.") +end + +function QuestOffer_AFerociousInconvenience(NPC, Spawn) + OfferQuest(NPC, Spawn, AFerociousInconvenience) +end \ No newline at end of file diff --git a/server/SpawnScripts/Darklight/LaexyraYBarriath.lua b/server/SpawnScripts/Darklight/LaexyraYBarriath.lua new file mode 100644 index 000000000..c10fd867d --- /dev/null +++ b/server/SpawnScripts/Darklight/LaexyraYBarriath.lua @@ -0,0 +1,413 @@ +--[[ + Script Name : SpawnScripts/Darklight/LaexyraYBarriath.lua + Script Purpose : Laexyra Y'Barriath (340075) + Script Author : Cynnar + Script Date : 2016.01.01 + Script Notes : Report to Zezas is not implemented yet since it requires you to go into Neriak. +--]] + +local PurposefulTrinkets = 149 +local PublicService = 150 +local AFriendlyReminder = 151 +local Reaping = 152 +local Condemned = 153 +local ContinuingAssistance = 154 +local ReporttoZezas = 159 + +function spawn(NPC) + ProvidesQuest(NPC, PurposefulTrinkets) + ProvidesQuest(NPC, PublicService) + ProvidesQuest(NPC, AFriendlyReminder) + ProvidesQuest(NPC, Reaping) + ProvidesQuest(NPC, Condemned) + ProvidesQuest(NPC, ContinuingAssistance) + --ProvidesQuest(NPC, ReporttoZezas) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + if not HasQuest(Spawn, PurposefulTrinkets) and not HasCompletedQuest(Spawn, PurposefulTrinkets) then + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_1_1007.mp3", "", "tapfoot", 0, 0, Spawn) + AddConversationOption(conversation, "Reported to you?", "Quest_PurposefulTrinkets") + StartConversation(conversation, NPC, Spawn, "" .. GetName(Spawn) .. ", it is about time you reported to me.") + elseif HasQuest(Spawn, PurposefulTrinkets) and not HasCompletedQuest(Spawn, PurposefulTrinkets) then + PurposefulTrinkets_00(NPC, Spawn) + elseif HasCompletedQuest(Spawn, PurposefulTrinkets) and not HasCompletedQuest(Spawn, PublicService) then + if not HasQuest(Spawn, PublicService) then + PurposefulTrinkets_00(NPC, Spawn) + else + PublicService_00(NPC, Spawn) + end + elseif HasCompletedQuest(Spawn, PublicService) and not HasCompletedQuest(Spawn, AFriendlyReminder) then + if not HasQuest(Spawn, AFriendlyReminder) then + PublicService_00(NPC, Spawn) + else + AFriendlyReminder_00(NPC, Spawn) + end + elseif HasCompletedQuest(Spawn, AFriendlyReminder) and not HasCompletedQuest(Spawn, Reaping) then + if not HasQuest(Spawn, Reaping) then + AFriendlyReminder_00(NPC, Spawn) + else + Reaping_00(NPC, Spawn) + end + elseif HasCompletedQuest(Spawn, Reaping) and not HasCompletedQuest(Spawn, Condemned) then + if not HasQuest(Spawn, Condemned) then + Reaping_00(NPC, Spawn) + else + Condemned_00(NPC, Spawn) + end + elseif HasCompletedQuest(Spawn, Condemned) and not HasCompletedQuest(Spawn, ContinuingAssistance) then + if not HasQuest(Spawn, ContinuingAssistance) then + Say(NPC, "CA offer") + Quest_ContinuingAssistance_01(NPC, Spawn) + else + Say(NPC, "test") + Quest_Condemned_03(NPC, Spawn) + end + else + Say(NPC, "Report to Zezas is not implemented yet because Neriak is not ready for visitors yet..") + end +end + +-------------------------------------------------------------------------------------- +-- Purposeful Trinkets +-------------------------------------------------------------------------------------- + +function PurposefulTrinkets_00(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_3_1007.mp3", "", "", 0, 0, Spawn) + if not HasCompletedQuest(Spawn, PurposefulTrinkets) and GetQuestStep(Spawn, PurposefulTrinkets) ~= 2 then + AddConversationOption(conversation, "Not yet.") + else + AddConversationOption(conversation, "Yes.", "Quest_PurposefulTrinkets_04") + end + StartConversation(conversation, NPC, Spawn, "Have you collected the trinkets?.") +end + +function Quest_PurposefulTrinkets(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "I have!", "Quest_PurposefulTrinkets_01") + AddConversationOption(conversation, "No.", "Quest_PurposefulTrinkets_Decline") + StartConversation(conversation, NPC, Spawn, "I am Laexyra Y'Barriath, Commander of the Dread Guard forces in the Darklight Wood. You have dedicated yourself to The City of Hate and Queen Cristanos, have you not?") +end + +function Quest_PurposefulTrinkets_Decline(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "brandish", 0, 0, Spawn) + StartConversation(conversation, NPC, Spawn, "Then begone before I am forced to clean you from my blade!") +end + +function Quest_PurposefulTrinkets_01(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "What is the current threat?", "Quest_PurposefulTrinkets_02") + StartConversation(conversation, NPC, Spawn, "Good. Neriak requires true statesmen and women who will do all they can to further their city. In my case, I am here in Darklight battling the forces--natural or otherwise--that threaten our city and her throne.") +end + +function Quest_PurposefulTrinkets_02(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "What is the plan?", "Quest_PurposefulTrinkets_03") + StartConversation(conversation, NPC, Spawn, "The never ending tide of undead. New corpses climb from the ground every day and those that we kill do not stay dead for long. I believe, with a little work, we can at least keep those we kill from coming back. But nothing is certain.") +end + +function Quest_PurposefulTrinkets_03(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "I can do that.", "QuestOffer_PurposefulTrinkets") + AddConversationOption(conversation, "No thanks.") + StartConversation(conversation, NPC, Spawn, "Search the field to our south. The halflings and elf rangers who died there brought many things into our forest, including small tokens meant to remind them of home--to remind them of what they were fighting for. Collect some of these for me.") +end + +function QuestOffer_PurposefulTrinkets(NPC, Spawn) + OfferQuest(NPC, Spawn, PurposefulTrinkets) +end + +function Quest_PurposefulTrinkets_04(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + if not HasCompletedQuest(Spawn, PurposefulTrinkets) then + SetStepComplete(Spawn, PurposefulTrinkets, 2) + end + + PlayFlavor(NPC, "", "", "agree", 0, 0, Spawn) + AddConversationOption(conversation, "I am willing.", "Quest_PublicService") + AddConversationOption(conversation, "An order is an order.", "Quest_PublicService") + StartConversation(conversation, NPC, Spawn, "Excellent. It will take me some time to prepare them for their purpose, however. In the meantime, the undead must be culled. Are you willing?") +end + +-------------------------------------------------------------------------------------- +-- Public Service +-------------------------------------------------------------------------------------- + +function PublicService_00(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_3_1007.mp3", "", "", 0, 0, Spawn) + if not HasCompletedQuest(Spawn, PublicService) and GetQuestStep(Spawn, PublicService) ~= 3 then + AddConversationOption(conversation, "Not yet.") + else + AddConversationOption(conversation, "Temporarily, yes.", "Quest_PublicService_01") + end + StartConversation(conversation, NPC, Spawn, "Have you taken care of the undead?") +end + +function Quest_PublicService(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "All right.", "QuestOffer_PublicService") + AddConversationOption(conversation, "Maybe later.") + StartConversation(conversation, NPC, Spawn, "Good. North of here walk the undead remains of our Teir'Dal soldiers, now being used against us. Kill the defenders and soldiers so that we may have some respite.") +end + +function QuestOffer_PublicService(NPC, Spawn) + OfferQuest(NPC, Spawn, PublicService) +end + +function Quest_PublicService_01(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + if not HasCompletedQuest(Spawn, PublicService) then + SetStepComplete(Spawn, PublicService, 3) + end + + PlayFlavor(NPC, "", "", "agree", 0, 0, Spawn) + AddConversationOption(conversation, "I'll make sure he understands the reminder.", "QuestOffer_AFriendlyReminder") + AddConversationOption(conversation, "Maybe someone else would be more interested in doing this for you.") + StartConversation(conversation, NPC, Spawn, "I've just received news regarding the recent undead attacks on this outpost. A Thexian necromancer by the name Kronryn N'Xytyl has been spotted near the Field of Ruin. I have little doubt that he is singularly responsible for raising our ancient slain foes against us once more. Remind him that his presence will not be tolerated in these woods.") +end + +-------------------------------------------------------------------------------------- +-- A Friendly Reminder +-------------------------------------------------------------------------------------- + +function AFriendlyReminder_00(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_2_1007.mp3", "", "", 0, 0, Spawn) + if not HasCompletedQuest(Spawn, AFriendlyReminder) and GetQuestStep(Spawn, AFriendlyReminder) ~= 2 then + AddConversationOption(conversation, "Not yet.") + else + AddConversationOption(conversation, "Swiftly.", "Quest_AFriendlyReminder_01") + end + StartConversation(conversation, NPC, Spawn, "Did you deliver the message?") +end + +function QuestOffer_AFriendlyReminder(NPC, Spawn) + OfferQuest(NPC, Spawn, AFriendlyReminder) +end + +function Quest_AFriendlyReminder(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "How are we to do that?", "Quest_AFriendlyReminder_01") + StartConversation(conversation, NPC, Spawn, "Such is a befitting end to a trespasser who foolishly dared to defy our rule of these lands. Now it is time to clean up the mess he has made.") +end + +function Quest_AFriendlyReminder_01(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + SetStepComplete(Spawn, AFriendlyReminder, 2) + + AddConversationOption(conversation, "How does it work?", "Quest_AFriendlyReminder_02") + StartConversation(conversation, NPC, Spawn, "With the trinkets you collected. I've prepared them to capture the spirits of some of the fallen soldiers. These specially-prepared trinkets will pull the spirit of their owners together, into something more tangible.") +end + +function Quest_AFriendlyReminder_02(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + SetStepComplete(Spawn, AFriendlyReminder, 2) + + AddConversationOption(conversation, "So, I am to kill their spirits?", "Quest_AFriendlyReminder_03") + StartConversation(conversation, NPC, Spawn, "You need only walk among the stout cadavers and fallen rangers with it. Instead of a mindless zombie it will actually BE the spirit of the fallen soldier that materializes for you. This means that if we get rid of this spirit, it will no longer contribute to the undead menace.") +end + +function Quest_AFriendlyReminder_03(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + if not HasCompletedQuest(Spawn, AFriendlyReminder) then + SetStepComplete(Spawn, AFriendlyReminder, 2) + end + + AddConversationOption(conversation, "All right.", "QuestOffer_Reaping") + AddConversationOption(conversation, "I'm not interested.") + StartConversation(conversation, NPC, Spawn, "No, they wouldn't stay dead. We can, however, trap their spirits, and that's just what I'd like you to do.") +end + +-------------------------------------------------------------------------------------- +-- Reaping +-------------------------------------------------------------------------------------- + +function QuestOffer_Reaping(NPC, Spawn) + OfferQuest(NPC, Spawn, Reaping) +end + +function Reaping_00(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/neriak/laexyra_y_barriath/darklight_wood/tvatar_post/laexyra/laexyra021.mp3", "", "", 3742143393, 3604889298, Spawn) + if not HasCompletedQuest(Spawn, Reaping) and GetQuestStep(Spawn, Reaping) ~= 2 then + AddConversationOption(conversation, "Not yet.") + else + AddConversationOption(conversation, "I did.", "Quest_Reaping_01") + end + StartConversation(conversation, NPC, Spawn, "Did you trap the spirits?") +end + +function Quest_Reaping_01(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + SetStepComplete(Spawn, Reaping, 2) + + AddConversationOption(conversation, "What do you have in mind?", "Quest_Reaping_02") + StartConversation(conversation, NPC, Spawn, "That pleases me," .. GetName(Spawn) .. ". Now to ensure they do not return to threaten us further.") +end + +function Quest_Reaping_02(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "I can put the spirits in the well.", "QuestOffer_Condemned") + AddConversationOption(conversation, "Maybe later.") + StartConversation(conversation, NPC, Spawn, "That we release these spirits near the Wellspring of Nightmares thus trapping them in perpetual torment. It's similar to their existence now, but with the added benefit that they have no corporeal connection to this world and are thus no longer annoying us.") +end + +-------------------------------------------------------------------------------------- +-- Condemned +-------------------------------------------------------------------------------------- + +function QuestOffer_Condemned(NPC, Spawn) + OfferQuest(NPC, Spawn, Condemned) +end + +function Condemned_00(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_2_1007.mp3", "", "", 0, 0, Spawn) + if not HasCompletedQuest(Spawn, Condemned) and GetQuestStep(Spawn, Condemned) ~= 2 then + AddConversationOption(conversation, "Not yet.") + else + AddConversationOption(conversation, "I have.", "Quest_Condemned_01") + end + StartConversation(conversation, NPC, Spawn, "Have you released the spirits yet?") +end + +function Quest_Condemned_01(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/neriak/laexyra_y_barriath/darklight_wood/tvatar_post/laexyra/laexyra026.mp3", "", "", 3005578756, 2486978605, Spawn) + AddConversationOption(conversation, "None. They are all trapped.", "Quest_Condemned_02") + StartConversation(conversation, NPC, Spawn, "And none of them escaped?") +end + +function Quest_Condemned_02(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + SetStepComplete(Spawn, Condemned, 2) + + AddConversationOption(conversation, "You're welcome.", "Quest_Condemned_03") + StartConversation(conversation, NPC, Spawn, "Mmm. Beautiful, beautiful. I believe this can be used to rid ourselves of the stout cadavers and fallen rangers. A more appropriate method of dealing with the Teir'Dal spirits will have to be found, however. But this is a very big step in the right direction. Thank you," .. GetName(Spawn) .. ".") +end + +--function Quest_Condemned_03(NPC, Spawn) +-- FaceTarget(NPC, Spawn) +-- conversation = CreateConversation() +-- +-- PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_1_1007.mp3", "", "", 0, 0, Spawn) +-- AddConversationOption(conversation, "Is there anything I can help with?", "Quest_ContinuingAssistance_01") +-- AddConversationOption(conversation, "I hope I have been helpful enough that you speak well of me to others.", "Quest_ReporttoZezas_01") +-- AddConversationOption(conversation, "Good luck with that.") +-- StartConversation(conversation, NPC, Spawn, "Now my only question is what problem to tackle next.") +--end + +-------------------------------------------------------------------------------------- +-- Continuing Assistance +-------------------------------------------------------------------------------------- + +function Quest_ContinuingAssistance_01(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "All right.", "Quest_ContinuingAssistance_02") + StartConversation(conversation, NPC, Spawn, "Actually, yes, I could use your help. I have two correspondences I need delivered immediately. The first goes to Malyl N'Vazin. The second goes to a sniveling wretch named, Vornlin B'Vytyl. You can find them both at Wanderlust Fair.") +end + +function Quest_ContinuingAssistance_02(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "Okay, I will go find them.", "QuestOffer_ContinuingAssistance") + AddConversationOption(conversation, "This task doesn't interest me.") + StartConversation(conversation, NPC, Spawn, "To get to the Wanderlust Fair, follow the path west. When it splits, take the right fork. You will pass over the Searing Tendril River before the path splits again, this time go left. That will lead you right past the fair on Nightshadow Rise.") +end + +function Temp_ContinuingAssistance_02(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "OK.", "QuestOffer_ContinuingAssistance") + StartConversation(conversation, NPC, Spawn, "This is where the Accept quest will go, but I have not completed the quest Continuing Assistance yet.") +end + + --AddConversationOption(conversation, "All right.", "QuestOffer_Reaping") + +function QuestOffer_ContinuingAssistance(NPC, Spawn) + OfferQuest(NPC, Spawn, ContinuingAssistance) +end + +-------------------------------------------------------------------------------------- +-- Report to Zezas +-------------------------------------------------------------------------------------- + +function Quest_ReporttoZezas_01(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "Who does it go to?", "Quest_ReporttoZezas_02") + StartConversation(conversation, NPC, Spawn, "Quite. On that note, in fact, I've something I'd like you to deliver to a friend of mine within Neriak," .. GetName(Spawn) .. ".") +end + +function Quest_ReporttoZezas_02(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "All right, I will deliver it.", "Temp_ReporttoZezas") + AddConversationOption(conversation, "Maybe at a later date.") + StartConversation(conversation, NPC, Spawn, "Zezas X'Zauzin. He should be just inside Neriak.") +end + +function Temp_ReporttoZezas(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "OK.") + StartConversation(conversation, NPC, Spawn, "This is where the Accept quest will go, but I have not completed the quest Report to Zezas because Neirak is not spawned.") +end + +function QuestOffer_ReporttoZezas(NPC, Spawn) + OfferQuest(NPC, Spawn, Condemned) +end \ No newline at end of file diff --git a/server/SpawnScripts/Darklight/Maelixia.lua b/server/SpawnScripts/Darklight/Maelixia.lua new file mode 100644 index 000000000..7f27cfc12 --- /dev/null +++ b/server/SpawnScripts/Darklight/Maelixia.lua @@ -0,0 +1,22 @@ +--[[ + Script Name : SpawnScripts/Darklight/Maelixia.lua + Script Author : Cynnar + Script Date : 2016.08.12 02:08:44 + Script Purpose : + : +--]] + +function spawn(NPC) + +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) +PlayFlavor(NPC, "voiceover/english/tobias_granville/steppes/quests/quest_tobias_granville/tobias_granville001.mp3", "", "shrug", 2405099568, 1478987434, Spawn) +Say(NPC, "Testing Voiceover") +end + +function respawn(NPC) + +end + diff --git a/server/SpawnScripts/Darklight/MalkaenWeed.lua b/server/SpawnScripts/Darklight/MalkaenWeed.lua new file mode 100644 index 000000000..0dc9d0351 --- /dev/null +++ b/server/SpawnScripts/Darklight/MalkaenWeed.lua @@ -0,0 +1,18 @@ +--[[ + Script Name : SpawnScripts/Darklight/MalkaenWeed.lua + Script Purpose : + Script Author : + Script Date : + Script Notes : +--]] + +function spawn(NPC) +SetRequiredQuest(NPC, 81, 1) +end + +function hailed(NPC, Spawn) +end + +function respawn(NPC) +spawn(NPC) +end diff --git a/server/SpawnScripts/Darklight/MalylNVazin.lua b/server/SpawnScripts/Darklight/MalylNVazin.lua new file mode 100644 index 000000000..c0f5a7bc6 --- /dev/null +++ b/server/SpawnScripts/Darklight/MalylNVazin.lua @@ -0,0 +1,294 @@ +--[[ + Script Name : SpawnScripts/DarklightWood/MalylNVazin.lua + Script Purpose : Malyl N'Vazin + Script Author : fearfx + Script Date : 2017.01.26 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +local ContinuingAssistance = 154 + +function spawn(NPC) + SetPlayerProximityFunction(NPC, 10, "InRange", "LeaveRange") +end + +function respawn(NPC) + spawn(NPC) +end + +function InRange(NPC, Spawn) +end + +function LeaveRange(NPC, Spawn) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + if HasQuest(Spawn, ContinuingAssistance) then + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_1_1007.mp3", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Laexyra Y'Barriath wanted me to report to you and offer my help.", "Quest_ContinuingAssistance") + StartConversation(conversation, NPC, Spawn, "Yes?") + end +end + +function Quest_ContinuingAssistance(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + SetStepComplete(Spawn, ContinuingAssistance, 1) + + AddConversationOption(conversation, "All right.") + StartConversation(conversation, NPC, Spawn, "Ah, that sounds good. We could definitely use help here. Take some time to look around, I have no doubt that you will run into someone who could use your help shortly--even if it's not in the official capacity of the guard, most of what these folks need will help Darklight as a whole.") + +end +--[[ + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_2_1007.mp3", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "I did. Atalika and I took out the Thexian camp.", "dlg_6_1") + StartConversation(conversation, NPC, Spawn, "Have you finished?") + if convo==7 then + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_2_1007.mp3", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "I will return.", "dlg_7_1") + AddConversationOption(conversation, "I'd rather not. ") + StartConversation(conversation, NPC, Spawn, "Please speak to Miriam Will stationed near the Thexian camp. ") + end + + if convo==9 then + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_1_1007.mp3", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "I will return.", "dlg_9_1") + AddConversationOption(conversation, "I'd rather not. ") + StartConversation(conversation, NPC, Spawn, "Please speak to Miriam Will stationed near the Thexian camp. ") + end + + if convo==15 then + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_1_1007.mp3", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "I am ready.", "dlg_15_1") + StartConversation(conversation, NPC, Spawn, "Are you ready to face a greater threat?") + end + + if convo==16 then + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_1_1007.mp3", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "I am ready.", "dlg_16_1") + StartConversation(conversation, NPC, Spawn, "Are you ready to face a greater threat?") + end + + if convo==17 then + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_1_1007.mp3", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Laexyra Y'Barriath wanted me to report to you and offer my help.", "dlg_17_1") + StartConversation(conversation, NPC, Spawn, "Yes?") + end + + if convo==21 then + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_3_1007.mp3", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Laexyra Y'Barriath wanted me to report to you and offer my help.", "dlg_21_1") + StartConversation(conversation, NPC, Spawn, "Yes?") + end + + if convo==23 then + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_2_1007.mp3", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "I did. Atalika and I took out the Thexian camp.", "dlg_23_1") + StartConversation(conversation, NPC, Spawn, "Have you finished?") + end + + if convo==26 then + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_2_1007.mp3", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "I come bearing news from Larxena D'Ziett.", "dlg_26_1") + StartConversation(conversation, NPC, Spawn, "Welcome back, Hacaci. Why the worried look on your face?") + end + + if convo==27 then + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_2_1007.mp3", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "I come bearing news from Larxena D'Ziett.", "dlg_27_1") + StartConversation(conversation, NPC, Spawn, "Welcome back, Hacaci. Why the worried look on your face?") + end + + if convo==28 then + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_3_1007.mp3", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "I come bearing news from Larxena D'Ziett.", "dlg_28_1") + StartConversation(conversation, NPC, Spawn, "Welcome back, Hacaci. Why the worried look on your face?") + end + +end + +function dlg_6_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Of course I am. ", "dlg_6_2") + AddConversationOption(conversation, "No, I wouldn't.") + StartConversation(conversation, NPC, Spawn, "Excellent news. I cannot wait to hear what reports our spies return with on the effects of this. In fact, I want you to go get the news immediately. Would you be willing do to that?") +end + +function dlg_15_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "What else is there to do?", "dlg_15_2") + StartConversation(conversation, NPC, Spawn, "The Thexians continue their crusade to oust Cristanos. Never mind that they didn't even know Neriak still existed until recently; they believe they have some right to it. The younger, more foolish of them seem to think their physical presence in Nektulos forest somehow helps them. It doesn't. However, slaughtering them doesn't seem to dissuade more from coming--they are tenacious, I'll give them that.") +end + +function dlg_15_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "All right.", "dlg_15_3") + AddConversationOption(conversation, "Perhaps later.") + StartConversation(conversation, NPC, Spawn, "Break their faith. They believe the gods are on their side in this campaign of theirs. While I cannot arrange for Innoruuk to meet them, I do believe I can work to convince them that the Darklight Wood itself has rejected them. I have been speaking with the druids at the Shadowed Oak and we have come up with a plan, I would like you to go speak with them as well. Go find Atalika, he will put this plan into motion.") +end + +function dlg_16_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "What else is there to do?", "dlg_16_2") + StartConversation(conversation, NPC, Spawn, "The Thexians continue their crusade to oust Cristanos. Never mind that they didn't even know Neriak still existed until recently; they believe they have some right to it. The younger, more foolish of them seem to think their physical presence in Nektulos forest somehow helps them. It doesn't. However, slaughtering them doesn't seem to dissuade more from coming--they are tenacious, I'll give them that.") +end + +function dlg_16_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "All right.", "dlg_16_3") + AddConversationOption(conversation, "Perhaps later.") + StartConversation(conversation, NPC, Spawn, "Break their faith. They believe the gods are on their side in this campaign of theirs. While I cannot arrange for Innoruuk to meet them, I do believe I can work to convince them that the Darklight Wood itself has rejected them. I have been speaking with the druids at the Shadowed Oak and we have come up with a plan, I would like you to go speak with them as well. Go find Atalika, he will put this plan into motion.") +end + +function dlg_16_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "I agree.", "dlg_16_4") + StartConversation(conversation, NPC, Spawn, "Skulls are much easier to crush than spirits, but a crushed spirit is so much more satisfying.") +end + +function dlg_17_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "All right.", "dlg_17_2") + StartConversation(conversation, NPC, Spawn, "Ah, that sounds good. We could definitely use help here. Take some time to look around, I have no doubt that you will run into someone who could use your help shortly--even if it's not in the official capacity of the guard, most of what these folks need will help Darklight as a whole.") +end + +function dlg_21_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "All right.", "dlg_21_2") + StartConversation(conversation, NPC, Spawn, "Ah, you must be Hacaci, savior of Hate's Envy. I heard were it not for your swift action, the whole town might have gone up in flames. We could definitely use the help of someone like you. Look around. I have no doubt that you'll run into someone who could use your help shortly--even if it's not in the official capacity of the guard.") +end + +function dlg_23_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "You are welcome.", "dlg_23_2") + StartConversation(conversation, NPC, Spawn, "Excellent news. I cannot wait to hear what reports our spies return with on the effects of this. You have done well, Chayne. Neriak thanks you.") +end + +function dlg_26_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "What threat?", "dlg_26_2") + StartConversation(conversation, NPC, Spawn, "Why am I not surprised? Prince Talvus is an honorless coward that would feed his own men to the slaughter should it bring him one step closer to the throne of Neriak. Thank you for bringing this to my attention, Hacaci. We will deal with this new matter at once. Now then, are you ready to face a greater threat?") +end + +function dlg_26_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "What else is there to do?", "dlg_26_3") + StartConversation(conversation, NPC, Spawn, "The Thexians continue their crusade to oust Cristanos. Never mind that they didn't even know Neriak still existed until recently; they believe they have some right to it. The younger, more foolish of them seem to think their physical presence in Nektulos forest somehow helps them. It doesn't. However, slaughtering them doesn't seem to dissuade more from coming--they are tenacious, I'll give them that.") +end + +function dlg_26_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "All right.", "dlg_26_4") + AddConversationOption(conversation, "Perhaps later.") + StartConversation(conversation, NPC, Spawn, "Break their faith. They believe the gods are on their side in this campaign of theirs. While I cannot arrange for Innoruuk to meet them, I do believe I can work to convince them that the Darklight Wood itself has rejected them. I have been speaking with the druids at the Shadowed Oak and we have come up with a plan. I would like you to go speak with them. Go find Atalika, he will put this plan into motion.") +end + +function dlg_27_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "What threat?", "dlg_27_2") + StartConversation(conversation, NPC, Spawn, "Why am I not surprised? Prince Talvus is an honorless coward that would feed his own men to the slaughter should it bring him one step closer to the throne of Neriak. Thank you for bringing this to my attention, Hacaci. We will deal with this new matter at once. Now then, are you ready to face a greater threat?") +end + +function dlg_27_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "What else is there to do?", "dlg_27_3") + StartConversation(conversation, NPC, Spawn, "The Thexians continue their crusade to oust Cristanos. Never mind that they didn't even know Neriak still existed until recently; they believe they have some right to it. The younger, more foolish of them seem to think their physical presence in Nektulos forest somehow helps them. It doesn't. However, slaughtering them doesn't seem to dissuade more from coming--they are tenacious, I'll give them that.") +end + +function dlg_27_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "All right.", "dlg_27_4") + AddConversationOption(conversation, "Perhaps later.") + StartConversation(conversation, NPC, Spawn, "Break their faith. They believe the gods are on their side in this campaign of theirs. While I cannot arrange for Innoruuk to meet them, I do believe I can work to convince them that the Darklight Wood itself has rejected them. I have been speaking with the druids at the Shadowed Oak and we have come up with a plan. I would like you to go speak with them. Go find Atalika, he will put this plan into motion.") +end + +function dlg_28_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "What threat?", "dlg_28_2") + StartConversation(conversation, NPC, Spawn, "Why am I not surprised? Prince Talvus is an honorless coward that would feed his own men to the slaughter should it bring him one step closer to the throne of Neriak. Thank you for bringing this to my attention, Hacaci. We will deal with this new matter at once. Now then, are you ready to face a greater threat?") +end + +function dlg_28_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "What else is there to do?", "dlg_28_3") + StartConversation(conversation, NPC, Spawn, "The Thexians continue their crusade to oust Cristanos. Never mind that they didn't even know Neriak still existed until recently; they believe they have some right to it. The younger, more foolish of them seem to think their physical presence in Nektulos forest somehow helps them. It doesn't. However, slaughtering them doesn't seem to dissuade more from coming--they are tenacious, I'll give them that.") +end + +function dlg_28_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "All right.", "dlg_28_4") + AddConversationOption(conversation, "Perhaps later.") + StartConversation(conversation, NPC, Spawn, "Break their faith. They believe the gods are on their side in this campaign of theirs. While I cannot arrange for Innoruuk to meet them, I do believe I can work to convince them that the Darklight Wood itself has rejected them. I have been speaking with the druids at the Shadowed Oak and we have come up with a plan. I would like you to go speak with them. Go find Atalika, he will put this plan into motion.") +end + +function dlg_28_4(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "I agree.", "dlg_28_5") + StartConversation(conversation, NPC, Spawn, "Skulls are much easier to crush than spirits, but a crushed spirit is so much more satisfying.") +end +--]] +--[[ raw_conversations + PlayFlavor(NPC, "", "Please keep working with Atalika.", "", 1689589577, 4560189, Spawn) +--]] + diff --git a/server/SpawnScripts/Darklight/MarlaKStane.lua b/server/SpawnScripts/Darklight/MarlaKStane.lua new file mode 100644 index 000000000..a4e260115 --- /dev/null +++ b/server/SpawnScripts/Darklight/MarlaKStane.lua @@ -0,0 +1,28 @@ +--[[ + Script Name : SpawnScripts/Darklight/MarlaKStane.lua + Script Purpose : Marla K'Stane + Script Author : John Adams + Script Date : 2009.02.01 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +function spawn(NPC) + SetPlayerProximityFunction(NPC, 10, "InRange", "LeaveRange") +end + +function respawn(NPC) + spawn(NPC) +end + +function InRange(NPC, Spawn) +end + +function LeaveRange(NPC, Spawn) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + + PlayFlavor(NPC, "", "I am waiting for someone, please leave me be!", "", 1689589577, 4560189, Spawn) +end + diff --git a/server/SpawnScripts/Darklight/Nemain.lua b/server/SpawnScripts/Darklight/Nemain.lua new file mode 100644 index 000000000..c9032acb6 --- /dev/null +++ b/server/SpawnScripts/Darklight/Nemain.lua @@ -0,0 +1,59 @@ +--[[ + Script Name : SpawnScripts/Darklight/Nemain.lua + Script Purpose : Nemain + Script Author : John Adams + Script Date : 2009.01.31 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +function spawn(NPC) + SetPlayerProximityFunction(NPC, 10, "InRange", "LeaveRange") +end + +function respawn(NPC) + spawn(NPC) +end + +function InRange(NPC, Spawn) +end + +function LeaveRange(NPC, Spawn) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_1_1021.mp3", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Balance?", "dlg_1_1") + StartConversation(conversation, NPC, Spawn, "You dwell within the Shadow Oak, under the direction of Thelia N'Fyre. We watch over the Darklight Wood and seek to keep balance.") +end + +function dlg_1_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "What kind of problems do you find?", "dlg_1_2") + StartConversation(conversation, NPC, Spawn, "Balance. Small perversions grow to upset the natural order of things, we excise these perversions. We spend our time searching the woods for problems.") +end + +function dlg_1_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "I could help investigate.", "dlg_1_3") + StartConversation(conversation, NPC, Spawn, "Only recently we've found the adolescent snarlers from the wolf dens to the east are moving out much farther than usual. As such, we will be investigating this as soon as we get time.") +end + +function dlg_1_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "All right, I can get them.", "dlg_1_4") + AddConversationOption(conversation, "I am not ready to do this.") + StartConversation(conversation, NPC, Spawn, "You look able. If you wish to help we will not stop you. I have three requests of you, in this case. Travel northwest of Wanderlust Fair near the wolf dens, where the adolescent snarlers are now out prowling. While there, release the searcher wisp that I'll give you. It will observe the wolves and their environment in an attempt to discover unnatural phenomena. Second and third, I'd like the body of one of the adolescent wolves as well as the body of one of the deer that are also in that area.") +end + diff --git a/server/SpawnScripts/Darklight/OpalDarkbriar.lua b/server/SpawnScripts/Darklight/OpalDarkbriar.lua new file mode 100644 index 000000000..ef6cda4d9 --- /dev/null +++ b/server/SpawnScripts/Darklight/OpalDarkbriar.lua @@ -0,0 +1,60 @@ +--[[ + Script Name : SpawnScripts/Darklight/OpalDarkbriar.lua + Script Purpose : Opal Darkbriar + Script Author : John Adams + Script Date : 2009.01.31 + Script Notes : Auto-Generated Locations from /loc log +--]] + +function spawn(NPC) + -- she pops out of Nektulos + MovementLoopAddLocation(NPC, 731.51, -66.26, 92.23, 5, 5) + MovementLoopAddLocation(NPC, 730.81, -66.26, 84.87, 5, 0) + + -- and runs for Neriak along this path + MovementLoopAddLocation(NPC, 713.11, -66.27, 85.87, 5, 0) + MovementLoopAddLocation(NPC, 648.75, -55.57, 87.71, 5, 0) + MovementLoopAddLocation(NPC, 565.20, -44.76, 73.07, 5, 0) + MovementLoopAddLocation(NPC, 529.12, -47.11, 55.37, 5, 0) + MovementLoopAddLocation(NPC, 481.85, -45.80, 47.16, 5, 0) + MovementLoopAddLocation(NPC, 431.75, -38.18, -3.26, 5, 0) + MovementLoopAddLocation(NPC, 344.12, -31.62, 2.87, 5, 0) + MovementLoopAddLocation(NPC, 243.35, -21.61, 20.27, 5, 0) + MovementLoopAddLocation(NPC, 219.18, -21.28, 33.43, 5, 0) + MovementLoopAddLocation(NPC, 193.26, -23.35, 33.61, 5, 0) + MovementLoopAddLocation(NPC, 162.40, -32.60, 24.66, 5, 0) + MovementLoopAddLocation(NPC, 142.16, -41.25, 7.35, 5, 0) + MovementLoopAddLocation(NPC, 125.97, -42.22, -23.69, 5, 0) + MovementLoopAddLocation(NPC, 103.92, -47.94, -40.30, 5, 0) + MovementLoopAddLocation(NPC, 85.21, -50.88, -45.10, 5, 0) + MovementLoopAddLocation(NPC, 60.97, -51.79, -62.79, 5, 0) + MovementLoopAddLocation(NPC, 21.74, -48.77, -17.95, 5, 0) + MovementLoopAddLocation(NPC, -5.13, -51.01, 5.02, 5, 0) + MovementLoopAddLocation(NPC, -15.33, -51.53, 25.12, 5, 0) + MovementLoopAddLocation(NPC, -116.78, -55.40, 9.44, 5, 0) + MovementLoopAddLocation(NPC, -196.82, -52.84, 20.44, 5, 0) + MovementLoopAddLocation(NPC, -279.86, -55.93, 23.89, 5, 0) + MovementLoopAddLocation(NPC, -332.51, -52.64, 22.01, 5, 0) + MovementLoopAddLocation(NPC, -366.92, -51.36, 15.03, 5, 0) + MovementLoopAddLocation(NPC, -375.64, -51.93, -6.33, 5, 0) + MovementLoopAddLocation(NPC, -432.46, -49.65, -44.58, 5, 0) + MovementLoopAddLocation(NPC, -498.40, -50.50, -75.37, 5, 0) + MovementLoopAddLocation(NPC, -536.19, -53.27, -84.00, 5, 0) + MovementLoopAddLocation(NPC, -593.50, -56.70, -74.40, 5, 0) + MovementLoopAddLocation(NPC, -657.14, -57.06, -86.47, 5, 0) + MovementLoopAddLocation(NPC, -678.35, -55.46, -83.81, 5, 10, "DespawnOpal") + -- she needs to poof into Neriak at this point +end + +function hailed(NPC, Spawn) + Say(NPC, "No one can stop me!") +end + +function respawn(NPC) + spawn(NPC) +end + +function DespawnOpal(NPC) + -- make her depop, but she needs to use her respawn timer to run again in 20 mins. + Despawn(NPC, 0) +end \ No newline at end of file diff --git a/server/SpawnScripts/Darklight/PellandraDXatyl.lua b/server/SpawnScripts/Darklight/PellandraDXatyl.lua new file mode 100644 index 000000000..9b63bec22 --- /dev/null +++ b/server/SpawnScripts/Darklight/PellandraDXatyl.lua @@ -0,0 +1,285 @@ +--[[ + Script Name : SpawnScripts/DarklightWood/PellandraDXatyl.lua + Script Purpose : Pellandra D'Xatyl (340038) + Script Author : Cynnar + Script Date : 2015.07.04 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +local ASolidifiedFront = 120 +local SealingTheRift = 122 +local SearchingForSigils = 123 +local ReclaimingTheSableveinTear = 124 +local AnAuthorityOnHate = 125 + +function spawn(NPC) + ProvidesQuest(NPC, SealingTheRift) + ProvidesQuest(NPC, SearchingForSigils) + ProvidesQuest(NPC, ReclaimingTheSableveinTear) + ProvidesQuest(NPC, AnAuthorityOnHate) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + if not QuestStepIsComplete(Spawn, ASolidifiedFront, 2) then + SetStepComplete(Spawn, ASolidifiedFront, 2) + end + if HasQuest(Spawn, SealingTheRift) and GetQuestStep(Spawn, SealingTheRift) == 1 then + PlayFlavor(NPC, "pellandra_d_xatyl/darklight_wood/hates_envy/pellandra_revamp/pellandra006.mp3", "", "", 1661628815, 3964293147, Spawn) + AddConversationOption(conversation, "I have not yet found a rift.", "dlg_1_1") + StartConversation(conversation, NPC, Spawn, "Ah, you return, and in one piece I might add. Tell me, were you able to seal one of the rifts?") + elseif HasQuest(Spawn, SealingTheRift) and GetQuestStep(Spawn, SealingTheRift) == 2 then --[[ needs an or check here if possible --]] + PlayFlavor(NPC, "pellandra_d_xatyl/darklight_wood/hates_envy/pellandra_revamp/pellandra006.mp3", "", "", 1661628815, 3964293147, Spawn) + AddConversationOption(conversation, "I found one and sealed it!", "dlg_2_1") + StartConversation(conversation, NPC, Spawn, "Ah, you return, and in one piece I might add. Tell me, were you able to seal one of the rifts?") + elseif HasCompletedQuest(Spawn, SealingTheRift) and not HasQuest(Spawn, SearchingForSigils) and not HasCompletedQuest(Spawn, SearchingForSigils) then + dlg_2_1(NPC, Spawn) + elseif not HasCompletedQuest(Spawn, SearchingForSigils) and GetQuestStep(Spawn, SearchingForSigils) == 1 then + PlayFlavor(NPC, "pellandra_d_xatyl/darklight_wood/hates_envy/pellandra_revamp/pellandra012.mp3", "", "", 4283446564, 112709310, Spawn) + AddConversationOption(conversation, "Not yet...", "dlg_8_1") + StartConversation(conversation, NPC, Spawn, "Did you bring me the Sablevein sigil stones?") + elseif not HasCompletedQuest(Spawn, SearchingForSigils) and GetQuestStep(Spawn, SearchingForSigils) == 2 then + PlayFlavor(NPC, "pellandra_d_xatyl/darklight_wood/hates_envy/pellandra_revamp/pellandra012.mp3", "", "", 4283446564, 112709310, Spawn) + AddConversationOption(conversation, "Yes, I have them here.", "dlg_6_1") + StartConversation(conversation, NPC, Spawn, "Did you bring me the Sablevein sigil stones?") + elseif HasCompletedQuest(Spawn, SearchingForSigils) and not HasCompletedQuest(Spawn, ReclaimingTheSableveinTear) and not HasQuest(Spawn, ReclaimingTheSableveinTear) then + dlg_6_2(NPC, Spawn) + elseif not HasCompletedQuest(Spawn, ReclaimingTheSableveinTear) and GetQuestStep(Spawn, ReclaimingTheSableveinTear) == 1 then + PlayFlavor(NPC, "pellandra_d_xatyl/darklight_wood/hates_envy/pellandra_revamp/pellandra021.mp3", "", "", 894106996, 369904668, Spawn) + AddConversationOption(conversation, "I'm still searching.", "dlg_5_1") + StartConversation(conversation, NPC, Spawn, "Have you discovered the source of the Sablevein elemental attacks?") + elseif not HasCompletedQuest(Spawn, ReclaimingTheSableveinTear) and GetQuestStep(Spawn, ReclaimingTheSableveinTear) == 2 then + PlayFlavor(NPC, "pellandra_d_xatyl/darklight_wood/hates_envy/pellandra_revamp/pellandra021.mp3", "", "", 894106996, 369904668, Spawn) + AddConversationOption(conversation, "I found a Thexian Occultist inside the cave and slew her.", "dlg_7_1") + StartConversation(conversation, NPC, Spawn, "Have you discovered the source of the Sablevein elemental attacks?") + elseif not HasCompletedQuest(Spawn, SealingTheRift) and not HasQuest(Spawn, SearchingForSigils) and GetQuestStep(Spawn, ASolidifiedFront) > 0 then + PlayFlavor(NPC, "pellandra_d_xatyl/darklight_wood/hates_envy/pellandra_revamp/pellandra001.mp3", "", "", 2805015969, 2303192664, Spawn) + AddConversationOption(conversation, "I've been sent by Verex N'Za to assist you.", "dlg_0_1") + StartConversation(conversation, NPC, Spawn, "Curse these infernal things, there's no end to them in sight! You there, what do you want?") + elseif not HasCompletedQuest(Spawn, SealingTheRift) and not HasQuest(Spawn, SearchingForSigils) and HasCompletedQuest(Spawn, ASolidifiedFront) then + PlayFlavor(NPC, "pellandra_d_xatyl/darklight_wood/hates_envy/pellandra_revamp/pellandra001.mp3", "", "", 2805015969, 2303192664, Spawn) + AddConversationOption(conversation, "I've been sent by Verex N'Za to assist you.", "dlg_0_1") + StartConversation(conversation, NPC, Spawn, "Curse these infernal things, there's no end to them in sight! You there, what do you want?") + elseif HasCompletedQuest(Spawn, SealingTheRift) and HasCompletedQuest(Spawn, SearchingForSigils) and HasCompletedQuest(Spawn, ReclaimingTheSableveinTear) then + if not HasQuest(Spawn, AnAuthorityOnHate) then + PlayFlavor(NPC, "pellandra_d_xatyl/darklight_wood/hates_envy/pellandra_revamp/pellandra025.mp3", "", "bow", 360494739, 4156662992, Spawn) + AddConversationOption(conversation, "I will speak with her at once.", "QuestOffer_AnAuthorityOnHate") + AddConversationOption(conversation, "I'll decide who I speak to!", "PlayerEmote_brandish") + StartConversation(conversation, NPC, Spawn, "Your efforts have not gone unnoticed by authorities here in Hate's Envy. Your presence has been requested by the mayor's daughter, Jhana Do'Zyth. You can meet with her inside Hate's Envy Town Hall, northwest from here.") + else + PlayFlavor(NPC, "pellandra_d_xatyl/darklight_wood/hates_envy/pellandra_revamp/pellandra025.mp3", "", "bow", 360494739, 4156662992, Spawn) + AddConversationOption(conversation, "I will speak with her at once.", "dlg_9_1") + AddConversationOption(conversation, "I'll decide who I speak to!", "PlayerEmote_2") + StartConversation(conversation, NPC, Spawn, "Your efforts have not gone unnoticed by authorities here in Hate's Envy. Your presence has been requested by the mayor's daughter, Jhana Do'Zyth. You can meet with her inside Hate's Envy Town Hall, northwest from here.") + end + elseif not HasCompletedQuest(Spawn, ASolidifiedFront) then + StartConversation(conversation, NPC, Spawn, "The Sablevein elementals must be stopped before they burn down all of Hate's Envy!") + end +end + +function dlg_0_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "pellandra_d_xatyl/darklight_wood/hates_envy/pellandra_revamp/pellandra003.mp3", "", "frustrated", 1298376887, 2297284297, Spawn) + AddConversationOption(conversation, "What is it you would have me do?", "dlg_0_2") + StartConversation(conversation, NPC, Spawn, "I told Verex I could handle things here by myself! Bah, no matter. If you think you're cut out for the job, it's no skin off my back whether or not you succeed. Verex can always send another recruit to replace the fallen.") +end + +function dlg_0_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "pellandra_d_xatyl/darklight_wood/hates_envy/pellandra_revamp/pellandra004.mp3", "", "", 4198693006, 595147579, Spawn) + AddConversationOption(conversation, "Yes, I will seal one of the rifts.", "QuestOffer_SealingTheRift") + AddConversationOption(conversation, "Not right now.", "PlayerEmote_no") + StartConversation(conversation, NPC, Spawn, "The elementals first started appearing inside Sablevein Tear forcing our miners to retreat. Now they're spewing forth from rifts in the ground! I need you to find one of these rifts and seal it. Are you up to the task?") +end + +function PlayerEmote_no(NPC, Spawn) + PlayFlavor(Spawn, "", "", "no", 0, 0, Player) +end + +function dlg_1_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "I will find it.") + StartConversation(conversation, NPC, Spawn, "Do not return until you have found the rift and sealed it!") +end + +function QuestOffer_SealingTheRift(NPC, Spawn) + OfferQuest(NPC, Spawn, SealingTheRift) +end + +function dlg_2_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + SetStepComplete(Spawn, SealingTheRift, 2) + + PlayFlavor(NPC, "pellandra_d_xatyl/darklight_wood/hates_envy/pellandra_revamp/pellandra007.mp3", "", "", 3453657784, 2286828041, Spawn) + AddConversationOption(conversation, "The rift may be sealed, but the battlefield is far from clear. Is there more I can do?", "dlg_2_2") + StartConversation(conversation, NPC, Spawn, "Remarkable work, " .. GetName(Spawn) .. "! Your enemies will soon quake upon hearing your name!") +end + +function dlg_2_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "pellandra_d_xatyl/darklight_wood/hates_envy/pellandra_revamp/pellandra009.mp3", "", "", 1573554820, 3218022167, Spawn) + AddConversationOption(conversation, "Tell me more.", "dlg_2_3") + StartConversation(conversation, NPC, Spawn, "Indeed there is, rift walker. The Sablevein elementals did not appear here naturally. Something or someone summoned them. To learn more about their creator I have a new mission for you to undertake.") +end + +function dlg_2_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "pellandra_d_xatyl/darklight_wood/hates_envy/pellandra_revamp/pellandra010.mp3", "", "", 918403175, 3688051078, Spawn) + AddConversationOption(conversation, "I will collect sigils from the Sablevein pulverizers.", "QuestOffer_SearchingForSigils") + AddConversationOption(conversation, "I cannot assist at this time.", "PlayerEmote_no") + StartConversation(conversation, NPC, Spawn, "I need you to hunt the Sablevein pulverizers found near the entrance of Sablevein Tear. These more superior forms of elemental magic will likely be imbued with a sigil of some sort. Analyzing these sigils will give us insight as to who is really behind these attacks.") +end + +function QuestOffer_SearchingForSigils(NPC, Spawn) + OfferQuest(NPC, Spawn, SearchingForSigils) +end + +function dlg_4_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "pellandra_d_xatyl/darklight_wood/hates_envy/pellandra_revamp/pellandra016.mp3", "", "", 188105745, 1139692175, Spawn) + AddConversationOption(conversation, "I see. What can we do to stop them?", "dlg_4_2") + StartConversation(conversation, NPC, Spawn, "I haven't the time to give you a comprehensive history lesson, but needless to say, the Thexians are nothing more than the former ruling class of Neriak. An emasculated family who proved themselves too weak to rule Neriak. We Teir'Dal must thank Queen Cristanos for recognizing this weakness and removing it, as one would carve a burrowing tick from the back of a dog.") +end + +function dlg_4_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "pellandra_d_xatyl/darklight_wood/hates_envy/pellandra_revamp/pellandra017.mp3", "", "agree", 1551019218, 1492381224, Spawn) + AddConversationOption(conversation, "Nothing will stand in my way!", "dlg_4_5") + AddConversationOption(conversation, "I will defeat all who oppose me!", "dlg_4_5") + AddConversationOption(conversation, "I'm actually not feeling very courageous at this time. Perhaps later.", "PlayerEmote_cringe") + StartConversation(conversation, NPC, Spawn, "It is time we put an end to this attack once and for all. We must confront this threat at its source. You've proven your strength to me, Oamoothao. Now you must prove your rancor toward those who would dare to keep us from our goals.") +end + +function PlayerEmote_cringe(NPC, Spawn) + PlayFlavor(Spawn, "", "", "cringe", 0, 0, Player) +end + +function dlg_4_5(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(Spawn, "", "", "cheer", 0, 0, Player) + PlayFlavor(NPC, "pellandra_d_xatyl/darklight_wood/hates_envy/pellandra_revamp/pellandra018.mp3", "", "", 1441675499, 2064064965, Spawn) + AddConversationOption(conversation, "Go on.", "dlg_4_6") + StartConversation(conversation, NPC, Spawn, "Good, then we shall begin. I believe the source of our problems lies within the depths of Sablevein Tear, the place our miners were recently excavating before the elementals attacked.") +end + +function dlg_4_6(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "pellandra_d_xatyl/darklight_wood/hates_envy/pellandra_revamp/pellandra019.mp3", "", "", 1398439421, 3597583644, Spawn) + AddConversationOption(conversation, "I will put an end to the attacks!", "QuestOffer_ReclaimingTheSableveinTear") + AddConversationOption(conversation, "I cannot assist at this time.", "PlayerEmote_no") + StartConversation(conversation, NPC, Spawn, "I want you to journey inside the cave and remove the one responsible for creating this mayhem. Do this for me, young one, and prove your ruthlessness to be unquestionable.") +end + +function QuestOffer_ReclaimingTheSableveinTear(NPC, Spawn) + OfferQuest(NPC, Spawn, ReclaimingTheSableveinTear) +end + +function dlg_5_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "I will find the source of the attacks.") + StartConversation(conversation, NPC, Spawn, "Time is of the essence, " .. GetName(Spawn) .. ". You must continue your search at once!") +end + +function dlg_6_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + SetStepComplete(Spawn, SearchingForSigils, 2) + RemoveItem(Spawn, 11837) + RemoveItem(Spawn, 11837) + RemoveItem(Spawn, 11837) + RemoveItem(Spawn, 11837) + + PlayFlavor(Spawn, "", "", "agree", 0, 0, Player) + PlayFlavor(NPC, "pellandra_d_xatyl/darklight_wood/hates_envy/pellandra_revamp/pellandra013.mp3", "", "", 1325789306, 33394254, Spawn) + AddConversationOption(conversation, "What's that?", "dlg_6_2") + StartConversation(conversation, NPC, Spawn, "Good, let me see them. Hmm, this is just as I thought.") +end + +function dlg_6_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "pellandra_d_xatyl/darklight_wood/hates_envy/pellandra_revamp/pellandra015.mp3", "", "", 1970700762, 2434868211, Spawn) + AddConversationOption(conversation, "What can we do to stop them?", "dlg_4_2") + AddConversationOption(conversation, "Who are the Thexians?", "dlg_4_1") + StartConversation(conversation, NPC, Spawn, "The marks on the sigil stones you recovered confirm my suspicions. The Sablevein elementals are no doubt the creation of the cowardly Thexians.") +end + +function dlg_7_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + SetStepComplete(Spawn, ReclaimingTheSableveinTear, 2) + + PlayFlavor(NPC, "pellandra_d_xatyl/darklight_wood/hates_envy/pellandra_revamp/pellandra022.mp3", "", "cheer", 2095462758, 507648174, Spawn) + AddConversationOption(conversation, "Now what?", "dlg_7_2") + StartConversation(conversation, NPC, Spawn, "Skillfully done, " .. GetName(Spawn) .. "! The meddling Thexians should know better than to try to disrupt our grip on these lands. I hope you made her suffer.") +end + +function dlg_7_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "pellandra_d_xatyl/darklight_wood/hates_envy/pellandra_revamp/pellandra024.mp3", "", "", 739852284, 4285882362, Spawn) + AddConversationOption(conversation, "What do you mean?", "dlg_7_3") + StartConversation(conversation, NPC, Spawn, "Fortunately the direct threat appears to be abated for now. Udiyitas and the other guards will concentrate on mopping up the rest of the stray Sablevein while others can begin to repair the damage done. Your fate, however, lies elsewhere.") +end + +function dlg_7_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "pellandra_d_xatyl/darklight_wood/hates_envy/pellandra_revamp/pellandra025.mp3", "", "", 360494739, 4156662992, Spawn) + AddConversationOption(conversation, "I will speak with her at once.", "QuestOffer_AnAuthorityOnHate") + AddConversationOption(conversation, "I'll decide who I speak to!", "PlayerEmote_brandish") + StartConversation(conversation, NPC, Spawn, "Your efforts have not gone unnoticed by authorities here in Hate's Envy. Your presence has been requested by the mayor's daughter, Jhana Do'Zyth. You can meet with her inside Hate's Envy Town Hall, northwest from here.") +end + +function PlayerEmote_brandish(NPC, Spawn) + PlayFlavor(Spawn, "", "", "brandish", 0, 0, Player) +end + +function QuestOffer_AnAuthorityOnHate(NPC, Spawn) + if not HasCompletedQuest(Spawn, AnAuthorityOnHate) and not HasQuest(Spawn, AnAuthorityOnHate) then + OfferQuest(NPC, Spawn, AnAuthorityOnHate) + end +end + +function dlg_8_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(Spawn, "", "", "no", 0, 0, Player) + PlayFlavor(NPC, "pellandra_d_xatyl/darklight_wood/hates_envy/pellandra_revamp/pellandra008.mp3", "", "", 4200285970, 1831158049, Spawn) + AddConversationOption(conversation, "I will return with the Sigils!") + StartConversation(conversation, NPC, Spawn, "Do not return until you have collected the sigil stones from the Sablevein pulverizers.") +end \ No newline at end of file diff --git a/server/SpawnScripts/Darklight/ReverendValac.lua b/server/SpawnScripts/Darklight/ReverendValac.lua new file mode 100644 index 000000000..60b44b50a --- /dev/null +++ b/server/SpawnScripts/Darklight/ReverendValac.lua @@ -0,0 +1,28 @@ +--[[ + Script Name : SpawnScripts/Darklight/ReverendValac.lua + Script Purpose : Reverend Valac + Script Author : John Adams + Script Date : 2009.02.01 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +function spawn(NPC) + SetPlayerProximityFunction(NPC, 10, "InRange", "LeaveRange") +end + +function respawn(NPC) + spawn(NPC) +end + +function InRange(NPC, Spawn) +end + +function LeaveRange(NPC, Spawn) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + + Say(NPC, "Innoruuk is the true leader of Neriak.", Spawn) +end + diff --git a/server/SpawnScripts/Darklight/Sableveinrubble.lua b/server/SpawnScripts/Darklight/Sableveinrubble.lua new file mode 100644 index 000000000..cdddb0e02 --- /dev/null +++ b/server/SpawnScripts/Darklight/Sableveinrubble.lua @@ -0,0 +1,18 @@ +--[[ + Script Name : SpawnScripts/Darklight/Sableveinrubble.lua + Script Purpose : + Script Author : + Script Date : + Script Notes : +--]] + +function spawn(NPC) +SetRequiredQuest(NPC, 85, 1) +end + +function hailed(NPC, Spawn) +end + +function respawn(NPC) +spawn(NPC) +end diff --git a/server/SpawnScripts/Darklight/Sableveinrubblenode.lua b/server/SpawnScripts/Darklight/Sableveinrubblenode.lua new file mode 100644 index 000000000..98b72be52 --- /dev/null +++ b/server/SpawnScripts/Darklight/Sableveinrubblenode.lua @@ -0,0 +1,38 @@ +--[[ + Script Name : SpawnScripts/Darklight/Sableveinrubble.lua + Script Purpose : Sablevein Rubble + Script Author : Cynnar + Script Date : 10/13/2015 + Script Notes : +--]] + +local SableveinRubble = 137 + +function spawn(NPC) + AddSpawnAccess(NPC, NPC) + SetPlayerProximityFunction(NPC, 20, "SpawnAccess", "SpawnAccess") + SetRequiredQuest(NPC, SableveinRubble, 1) +end + +function respawn(NPC) + spawn(NPC) +end + +function SpawnAccess(NPC, Spawn) + if HasQuest(Spawn, SableveinRubble) and tonumber(GetTempVariable(Spawn, "SableOre")) <= 6 then + AddSpawnAccess(NPC, Spawn) + end +end + +function casted_on(Target, Caster, SpellName) + local SableOreCount = tonumber(GetTempVariable(Player, "SableOre")) + if SpellName == "harvest " then + if HasQuest(Spawn, SableveinRubble) and tonumber(GetTempVariable(Spawn, "SableOre")) <= 6 then + Despawn(NPC) + SummonItem(Spawn, 11836) + SetTempVariable(Spawn, "SableOre", SableOreCount + 1) + elseif HasQuest(Spawn, SableveinRubble) and tonumber(GetTempVariable(Spawn, "SableOre")) == 6 then + RemoveSpawnAccess(NPC, Player) + end + end +end \ No newline at end of file diff --git a/server/SpawnScripts/Darklight/SirJaronVar.lua b/server/SpawnScripts/Darklight/SirJaronVar.lua new file mode 100644 index 000000000..fd8ca1e80 --- /dev/null +++ b/server/SpawnScripts/Darklight/SirJaronVar.lua @@ -0,0 +1,28 @@ +--[[ + Script Name : SpawnScripts/Darklight/SirJaronVar.lua + Script Purpose : Sir Jaron Var + Script Author : John Adams + Script Date : 2009.02.01 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +function spawn(NPC) + SetPlayerProximityFunction(NPC, 10, "InRange", "LeaveRange") +end + +function respawn(NPC) + spawn(NPC) +end + +function InRange(NPC, Spawn) +end + +function LeaveRange(NPC, Spawn) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + + Say(NPC, "...", Spawn) +end + diff --git a/server/SpawnScripts/Darklight/Soltrinscorpse.lua b/server/SpawnScripts/Darklight/Soltrinscorpse.lua new file mode 100644 index 000000000..4232c1438 --- /dev/null +++ b/server/SpawnScripts/Darklight/Soltrinscorpse.lua @@ -0,0 +1,35 @@ +--[[ + Script Name : SpawnScripts/Darklight/Soltrinscorpse.lua + Script Purpose : Used in quest "The Missing Recruit" (ID 141) + Script Author : Cynnar + Script Date : 1/7/2016 + Script Notes : Soltrinscorpse (ID 340800) +--]] + +local MissingRecruit = 141 + +function spawn(NPC) + SpawnSet(NPC, "visual_state", 228) + AddSpawnAccess(NPC, NPC) + SetPlayerProximityFunction(NPC, 50, "SpawnAccess", "SpawnAccess") +end + +function respawn(NPC) + spawn(NPC) +end + +function casted_on(NPC, Spawn, SpellName) + if SpellName == "Search for Soltrin's field kit" and not HasItem(Spawn, 13115, 1) then + SummonItem(Spawn, 13115) + SetStepComplete(Spawn, MissingRecruit, 1) + RemoveSpawnAccess(NPC, Spawn) + end +end + +function SpawnAccess(NPC, Spawn) + if HasQuest(Spawn, MissingRecruit) and GetQuestStep(Spawn, MissingRecruit) == 1 then + AddSpawnAccess(NPC, Spawn) + else + RemoveSpawnAccess(NPC, Spawn) + end +end diff --git a/server/SpawnScripts/Darklight/SselnylDoZyth.lua b/server/SpawnScripts/Darklight/SselnylDoZyth.lua new file mode 100644 index 000000000..4b31d9332 --- /dev/null +++ b/server/SpawnScripts/Darklight/SselnylDoZyth.lua @@ -0,0 +1,156 @@ +--[[ + Script Name : SpawnScripts/Darklight/SselnylDoZyth.lua + Script Purpose : Sselnyl Do'Zyth + Script Author : Cynnar + Script Date : 2015.08.17 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +local ProwlerAnnoyance = 128 +local NoUndeadGoesUnturned = 134 +local ThexianTaint = 135 + +function spawn(NPC) + ProvidesQuest(NPC, NoUndeadGoesUnturned) + ProvidesQuest(NPC, ThexianTaint) + +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + if not HasCompletedQuest(Spawn, ProwlerAnnoyance) then + StartConversation(conversation, NPC, Spawn, "Leave me be!") + elseif not HasCompletedQuest(Spawn, ThexianTaint) and GetQuestStep(Spawn, ThexianTaint) == 3 then + PlayFlavor(NPC, "", "", "scold", 0, 0, Spawn) + StartConversation(conversation, NPC, Spawn, "Speak with Ginwyss D'Arkenett at T'Vatar Post at once.") + elseif not HasCompletedQuest(Spawn, ThexianTaint) and GetQuestStep(Spawn, ThexianTaint) == 1 then + PlayFlavor(NPC, "sselnyl_do_zyth/darklight_wood/hates_envy/sselnyl_revamp/sselnyl010.mp3", "", "", 3344473082, 763160610, Spawn) + AddConversationOption(conversation, "I am about to embark.") + StartConversation(conversation, NPC, Spawn, "Why haven't you completed your mission yet?") + elseif HasCompletedQuest(Spawn, NoUndeadGoesUnturned) and not HasCompletedQuest(Spawn, ThexianTaint) then + ChatQuest_1_5(NPC, Spawn) + elseif not HasCompletedQuest(Spawn, NoUndeadGoesUnturned) and GetQuestStep(Spawn, NoUndeadGoesUnturned) == 2 then + PlayFlavor(NPC, "sselnyl_do_zyth/darklight_wood/hates_envy/sselnyl_revamp/sselnyl006.mp3", "", "", 2949301327, 3473298486, Spawn) + AddConversationOption(conversation, "I have the remains here.", "ChatQuest_1_5") + StartConversation(conversation, NPC, Spawn, "Did you find them?") + elseif not HasCompletedQuest(Spawn, NoUndeadGoesUnturned) and GetQuestStep(Spawn, NoUndeadGoesUnturned) == 1 then + PlayFlavor(NPC, "sselnyl_do_zyth/darklight_wood/hates_envy/sselnyl_revamp/sselnyl006.mp3", "", "", 2949301327, 3473298486, Spawn) + AddConversationOption(conversation, "Not yet...", "ChatQuest_1_4") + StartConversation(conversation, NPC, Spawn, "Did you find them?") + elseif not HasQuest(Spawn, NoUndeadGoesUnturned) and not HasCompletedQuest(Spawn, NoUndeadGoesUnturned) then + PlayFlavor(NPC, "sselnyl_do_zyth/darklight_wood/hates_envy/sselnyl_revamp/sselnyl001.mp3", "", "", 2870732726, 2209042878, Spawn) + AddConversationOption(conversation, "I have been working hard.", "ChatQuest_1_1") + StartConversation(conversation, NPC, Spawn, "Ah, " .. GetName(Spawn) .. ". Your name has made the rounds.") + elseif HasCompletedQuest(Spawn, NoUndeadGoesUnturned) and HasCompletedQuest(Spawn, ThexianTaint) then + PlayFlavor(NPC, "", "", "bow", 0, 0, Spawn) + StartConversation(conversation, NPC, Spawn, "Your help has been much appreciated!") + end +end + +function ChatQuest_1_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "sselnyl_do_zyth/darklight_wood/hates_envy/sselnyl_revamp/sselnyl002.mp3", "", "", 1862425876, 99259733, Spawn) + AddConversationOption(conversation, "What work is that?", "ChatQuest_1_2") + StartConversation(conversation, NPC, Spawn, "I am well aware of this. You have done much for Hate's Envy, and we are quite thankful. I have additional work for you, however.") +end + +function ChatQuest_1_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "sselnyl_do_zyth/darklight_wood/hates_envy/sselnyl_revamp/sselnyl003.mp3", "", "smirk", 1447042899, 779642311, Spawn) + AddConversationOption(conversation, "Go on.", "ChatQuest_1_3") + StartConversation(conversation, NPC, Spawn, "Jhana has mentioned your work in clearing the path to the Thexian burial chamber. Inside I have reason to believe a once powerful Thexian Dragoon-General has been laid to rest there.") +end + +function ChatQuest_1_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "sselnyl_do_zyth/darklight_wood/hates_envy/sselnyl_revamp/sselnyl004.mp3", "", "", 3800789963, 3276371466, Spawn) + AddConversationOption(conversation, "I'll return with the remains at once.", "QuestOffer_NoUndeadGoesUnturned") + AddConversationOption(conversation, "I cannont assist at this time.") + StartConversation(conversation, NPC, Spawn, "I want you to enter the cave and bring me the remains of the fallen Dragoon-General. Once I have the remains, we can put the next part of my plan in motion.") +end + +function ChatQuest_1_4(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "sselnyl_do_zyth/darklight_wood/hates_envy/sselnyl_revamp/sselnyl008.mp3", "", "", 107641320, 435607180, Spawn) + AddConversationOption(conversation, "I'll return soon.") + StartConversation(conversation, NPC, Spawn, "Do not return until you have found the remains of the Thexian Dragoon-General.") +end + +function ChatQuest_1_5(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + SetStepComplete(Spawn, NoUndeadGoesUnturned, 2) + + PlayFlavor(NPC, "sselnyl_do_zyth/darklight_wood/hates_envy/sselnyl_revamp/sselnyl007.mp3", "", "", 1506804081, 4126548148, Spawn) + AddConversationOption(conversation, "What do you intend to do with them?", "QuestChat_1_1") + StartConversation(conversation, NPC, Spawn, "Well... Aren't these just lovely? It's quite remarkable how a once fierce warrior has now been reduced to mere scraps. We shall find use for them, however.") +end + +function QuestOffer_NoUndeadGoesUnturned(NPC, Spawn) + OfferQuest(NPC, Spawn, NoUndeadGoesUnturned) +end + + +function QuestChat_1_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "sselnyl_do_zyth/darklight_wood/hates_envy/sselnyl_revamp/sselnyl009.mp3", "", "", 2231372796, 2001694414, Spawn) + AddConversationOption(conversation, "What can you tell me about the Thexians?", "QuestChat_1_2") + StartConversation(conversation, NPC, Spawn, "All in good time, " .. GetName(Spawn) .. ". In short, we're going to use them against the Thexians found near the Wellspring of Nightmares. They were reported to us by the Dread Guard. I would like to take them out before the Dread Guard have a chance to get to them to earn a bit of favor with Cristanos.") +end + +function QuestChat_1_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "sselnyl_do_zyth/darklight_wood/hates_envy/sselnyl_revamp/sselnyl012.mp3", "", "", 739520586, 1273216737, Spawn) + AddConversationOption(conversation, "Go on.", "QuestChat_1_3") + StartConversation(conversation, NPC, Spawn, "They are but insects that bite in the night, " .. GetName(Spawn) .. ". The Thexians do not recognize Cristanos as the ruler of Neriak and seek to steal the throne. They creep into the Darklight Wood and attempt to make it their own. They will fail. For now, they are attempting to harness the spirits trapped within the Wellspring of Nightmares to do their bidding.") +end + +function QuestChat_1_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "sselnyl_do_zyth/darklight_wood/hates_envy/sselnyl_revamp/sselnyl013.mp3", "", "", 3807512050, 1047350728, Spawn) + AddConversationOption(conversation, "How will I do that?", "QuestChat_1_4") + StartConversation(conversation, NPC, Spawn, "By placing a vexing curse on the remains you gathered for me, I intend for you to disrupt the Thexians' attempt to control the spirits and turn them against our enemy.") +end + +function QuestChat_1_4(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "sselnyl_do_zyth/darklight_wood/hates_envy/sselnyl_revamp/sselnyl014.mp3", "", "", 1429242287, 2342006533, Spawn) + AddConversationOption(conversation, "I will do this at once!", "QuestChat_1_5") + StartConversation(conversation, NPC, Spawn, "Your mission is comprised of two parts. First, you must exterminate a number of the spirits that the Thexians have already tainted. Second, you must take the vex-runed remains and toss them into the Wellspring of Nightmares. Doing this will befoul their ritual and cause them great harm.") +end + +function QuestChat_1_5(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "sselnyl_do_zyth/darklight_wood/hates_envy/sselnyl_revamp/sselnyl015.mp3", "", "", 2064460761, 4053677356, Spawn) + AddConversationOption(conversation, "I will not fail you.", "QuestOffer_ThexianTaint") + AddConversationOption(conversation, "I must decline.") + StartConversation(conversation, NPC, Spawn, "Once you've put an end to the ritual, bring news of your success to Ginwyss D'Arkenett at T'Vatar Post. She will be quite happy to receive it. You can get to the Wellspring of Nightmares and the Thexians by taking the road east out of Hate's Envy. Following that road further will lead you to T'Vatar Post.") +end + +function QuestOffer_ThexianTaint(NPC, Spawn) + OfferQuest(NPC, Spawn, ThexianTaint) +end \ No newline at end of file diff --git a/server/SpawnScripts/Darklight/TrainerChalciceZZylZarin.lua b/server/SpawnScripts/Darklight/TrainerChalciceZZylZarin.lua new file mode 100644 index 000000000..3e6e4a44c --- /dev/null +++ b/server/SpawnScripts/Darklight/TrainerChalciceZZylZarin.lua @@ -0,0 +1,155 @@ +--[[ + Script Name : SpawnScripts/Darklight/TrainerChalciceZZylZarin.lua + Script Purpose : Trainer Chalcice Z'Zyl'Zarin + Script Author : John Adams + Script Date : 2009.01.31 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +function spawn(NPC) + SetPlayerProximityFunction(NPC, 10, "InRange", "LeaveRange") +end + +function respawn(NPC) + spawn(NPC) +end + +function InRange(NPC, Spawn) +end + +function LeaveRange(NPC, Spawn) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_1_1047.mp3", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Tell me about banking.", "dlg_3_1") + AddConversationOption(conversation, "Tell me about mending items.") + AddConversationOption(conversation, "I'll return for training later.") + StartConversation(conversation, NPC, Spawn, "I can explain the finer points of banking and mending to you if you like. Would you care to hear about either?") + if convo==8 then + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_3_1047.mp3", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Tell me about banking.", "dlg_8_1") + AddConversationOption(conversation, "Tell me about mending items.") + AddConversationOption(conversation, "I'll return for training later.") + StartConversation(conversation, NPC, Spawn, "I can explain the finer points of banking and mending to you if you like. Would you care to hear about either?") + end + +end + +function dlg_3_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "How do I open my bank?", "dlg_3_2") + StartConversation(conversation, NPC, Spawn, "You may already have an account set up. Go see Gultrin Y'Oussiryn to access your account. You can access your bank account from cities allied with Neriak as well.") +end + +function dlg_3_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "How do I make deposits and withdrawals?", "dlg_3_3") + AddConversationOption(conversation, "I'll return for training later.") + StartConversation(conversation, NPC, Spawn, "Inside the bank, your mouse pointer will turn into a dial icon when hovered over a banker. Just click on the banker to open your bank window. You'll see twelve general slots and eight 'shared' slots. You can put bags or containers in your bank to increase the number of available slots.") +end + +function dlg_3_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "What are 'shared' bank slots?", "dlg_3_4") + StartConversation(conversation, NPC, Spawn, "Coins and items can be dragged from your inventory to the bank window. To drag one item from a stack, hold down the Ctrl key as you drag it. To drag a certain number of coins or items, hold down the Shift key and drag, then enter the quantity.") +end + +function dlg_3_4(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Any other banking facts I should know?", "dlg_3_5") + StartConversation(conversation, NPC, Spawn, "Items (but not coin) placed in your shared slots can be accessed by other characters on your account that are of the same alignment. Lore and No-Trade items cannot be put into the shared slots.") +end + +function dlg_3_5(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "I want to learn about mending items.", "dlg_3_6") + AddConversationOption(conversation, "I'll return for training later.") + StartConversation(conversation, NPC, Spawn, "If you choose to join a guild made up of your fellow players one day, you can access your guild bank by right-clicking on a banker and selecting 'Guild Bank.'") +end + +function dlg_3_6(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Tell me about banking.", "dlg_3_7") + AddConversationOption(conversation, "I'll return for training later.") + StartConversation(conversation, NPC, Spawn, "Your weapons and armor wear down when you die during combat. When they are down to zero durability, you no longer receive any benefit from them. You can visit a mender to get them repaired.") +end + +function dlg_8_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "How do I open my bank?", "dlg_8_2") + StartConversation(conversation, NPC, Spawn, "You may already have an account set up. Go see Gultrin Y'Oussiryn to access your account. You can access your bank account from cities allied with Neriak as well.") +end + +function dlg_8_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "How do I make deposits and withdrawals?", "dlg_8_3") + AddConversationOption(conversation, "I'll return for training later.") + StartConversation(conversation, NPC, Spawn, "Inside the bank, your mouse pointer will turn into a dial icon when hovered over a banker. Just click on the banker to open your bank window. You'll see twelve general slots and eight 'shared' slots. You can put bags or containers in your bank to increase the number of available slots.") +end + +function dlg_8_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "What are 'shared' bank slots?", "dlg_8_4") + StartConversation(conversation, NPC, Spawn, "Coins and items can be dragged from your inventory to the bank window. To drag one item from a stack, hold down the Ctrl key as you drag it. To drag a certain number of coins or items, hold down the Shift key and drag, then enter the quantity.") +end + +function dlg_8_4(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Any other banking facts I should know?", "dlg_8_5") + StartConversation(conversation, NPC, Spawn, "Items (but not coin) placed in your shared slots can be accessed by other characters on your account that are of the same alignment. Lore and No-Trade items cannot be put into the shared slots.") +end + +function dlg_8_5(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "I want to learn about mending items.", "dlg_8_6") + AddConversationOption(conversation, "I'll return for training later.") + StartConversation(conversation, NPC, Spawn, "If you choose to join a guild made up of your fellow players one day, you can access your guild bank by right-clicking on a banker and selecting 'Guild Bank.'") +end + +function dlg_8_6(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Tell me about banking.", "dlg_8_7") + AddConversationOption(conversation, "I'll return for training later.") + StartConversation(conversation, NPC, Spawn, "Your weapons and armor wear down when you die during combat. When they are down to zero durability, you no longer receive any benefit from them. You can visit a mender to get them repaired.") +end + diff --git a/server/SpawnScripts/Darklight/TrainerDrisaceDoArkenarn.lua b/server/SpawnScripts/Darklight/TrainerDrisaceDoArkenarn.lua new file mode 100644 index 000000000..2d117b193 --- /dev/null +++ b/server/SpawnScripts/Darklight/TrainerDrisaceDoArkenarn.lua @@ -0,0 +1,176 @@ +--[[ + Script Name : SpawnScripts/Darklight/TrainerDrisaceDoArkenarn.lua + Script Purpose : Trainer Drisace Do'Arkenarn + Script Author : John Adams + Script Date : 2009.01.31 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +function spawn(NPC) + SetPlayerProximityFunction(NPC, 10, "InRange", "LeaveRange") +end + +function respawn(NPC) + spawn(NPC) +end + +function InRange(NPC, Spawn) +end + +function LeaveRange(NPC, Spawn) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_3_1007.mp3", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "What are Heroic Opportunities?", "dlg_22_1") + AddConversationOption(conversation, "I will seek your knowledge another time.") + StartConversation(conversation, NPC, Spawn, "I look at you and see someone eager to defend Neriak by facing fierce opponents in battle. Well, I can teach you about Heroic Opportunities, a way for you and your allies to accomplish great feats of combat prowess.") +end + +function dlg_22_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Are Heroic Opportunities complicated?", "dlg_22_2") + AddConversationOption(conversation, "I need to finish another task.") + StartConversation(conversation, NPC, Spawn, "Beginning at level 5, Heroic Opportunities can be triggered in combat. They allow both lone adventurers and groups of allies to combine their attacks into a series of spells or combat arts performed in a specific order. When successful, Heroic Opportunities give beneficial effects such as extra attacks against your foes or beneficial magic to heal or enhance your abilities.") +end + +function dlg_22_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "So how does a Heroic Opportunity arise?", "dlg_22_3") + StartConversation(conversation, NPC, Spawn, "Rest assured, someone with battle skills will find them easy! Once you start using them, you'll wonder how you ever got along without them.") +end + +function dlg_22_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Okay, that does sound easy. How do I begin a Heroic Opportunity?", "dlg_22_4") + AddConversationOption(conversation, "I need to finish something else first.") + StartConversation(conversation, NPC, Spawn, "Let me tell you the short and simple version first so that you can see how easy Heroic Opportunities are to use. All you need to do is use your ability that triggers the Heroic Opportunity, then use the spells or combat arts that are blinking on your hotbar or in your Knowledge Book. Easy, isn't it?") +end + +function dlg_22_4(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Can I trigger a Starter Chain whenever I want?", "dlg_22_5") + AddConversationOption(conversation, "I need to finish something else first.") + StartConversation(conversation, NPC, Spawn, "Heroic Opportunities have two parts called the Starter Chain and the Combat Wheel. At level 5, every adventure class gains an ability that triggers a Starter Chain: Fighting Chance, Divine Providence, Arcane Augur, or Lucky Break. Open your Knowledge book by pressing K and click the Abilities tab to see it. You can drag its icon to your hotbar to use it.") +end + +function dlg_22_5(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "What happens when I trigger a Starter Chain?", "dlg_22_6") + StartConversation(conversation, NPC, Spawn, "Starter Chains can only be triggered while in battle with an enemy. After all, Heroic Opportunities are all about becoming great in combat! When you or an ally triggers a Starter Chain, you will see it appear in the corner of your screen.") +end + +function dlg_22_6(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Are Heroic Opportunities only usable in groups?", "dlg_22_7") + AddConversationOption(conversation, "I'll need to continue this later.") + StartConversation(conversation, NPC, Spawn, "Once a Starter Chain is initiated, it shows different ability icons flashing on the screen. A Starter Chain will generally display four different icons that indicate which spells or combat arts advance the Heroic Opportunity to the next stage. Icons will be blue, yellow, red, or green, depending on which class has the ability.") +end + +function dlg_22_7(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "How do I know what I should do to advance the Starter Chain?", "dlg_22_8") + AddConversationOption(conversation, "I need to finish something else now.") + StartConversation(conversation, NPC, Spawn, "Heroic Opportunities can be used alone or in groups. If you fight alone you will have a limited number of ways to advance the Starter Chain, but if you are in a group made up of different classes then you will be able to advance the Starter Chain in different ways to unleash a variety of Heroic Opportunities.") +end + +function dlg_22_8(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Use the spell or art that is blinking. That's all there is to it?", "dlg_22_9") + AddConversationOption(conversation, "I'll be back later.") + StartConversation(conversation, NPC, Spawn, "Any spells or combat arts that can advance the Heroic Opportunity will flash on your hotbar and in your Knowledge Book. You have 10 seconds to complete the Starter Chain and advance to the Combat Wheel. See, it's easy: just use the spell or art that blinks!") +end + +function dlg_22_9(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Why does it trigger one of three?", "dlg_22_10") + StartConversation(conversation, NPC, Spawn, "It's quite simple. After you've advanced the Starter Chain, the bright and colorful Combat Wheel appears. The Combat Wheel shows a series of icons and displays the name of the Heroic Opportunity you have triggered. A Starter Chain will initiate one of three different Heroic Opportunities.") +end + +function dlg_22_10(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "What does the Combat Wheel tell me?", "dlg_22_11") + AddConversationOption(conversation, "I'll be back another time.") + StartConversation(conversation, NPC, Spawn, "There are three potential Heroic Opportunities: common, uncommon and rare. Each provides a different benefit. Though even the common ones are valuable, the rare event can sometimes turn the tide of battle in your favor!") +end + +function dlg_22_11(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "How can I tell the difference?", "dlg_22_12") + StartConversation(conversation, NPC, Spawn, "As with the Starter Chain, the Combat Wheel indicates which spells or arts must be performed to advance and eventually complete the heroic event. Sometimes these spells or abilities must be performed in a particular order. Other times there is no order.") +end + +function dlg_22_12(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "How long do I have to complete the Heroic Opportunity?", "dlg_22_13") + AddConversationOption(conversation, "I will seek your knowledge another time.") + StartConversation(conversation, NPC, Spawn, "In the very center of the Wheel, you'll see either a clockwise-pointing arrow or arrows pointing in different directions. The clockwise arrow indicates that the abilities must be completed in order. The other types of arrows mean that the abilities can be completed in any order.") +end + +function dlg_22_13(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "That sounds easy!", "dlg_22_14") + StartConversation(conversation, NPC, Spawn, "The Combat Wheel must be completed within 10 seconds or the Opportunity will fail. The blue bar that appears around the outside of the Wheel is a timer. When the blue bar is gone, this indicates that time has run out to complete the Heroic Opportunity.") +end + +function dlg_22_14(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Any other tricks I should know?", "dlg_22_15") + AddConversationOption(conversation, "I must go now.") + StartConversation(conversation, NPC, Spawn, "It really is! As you become more familiar with using Heroic Opportunities, you can take note of the members of your group and plan out ahead of time which Opportunities will provide you the greatest benefit.") +end + +function dlg_22_15(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Thank you for the information. I'll try Heroic Opportunities as soon as I can!", "dlg_22_16") + StartConversation(conversation, NPC, Spawn, "Scout classes have a little something extra. By using their Coin icon, the Scout can shift to another Heroic Opportunity. This shift can only happen once per Combat Wheel. This ability must also be used before any other spell or combat art has been used to advance the Wheel.") +end + diff --git a/server/SpawnScripts/Darklight/TrainerDurvenKXyth.lua b/server/SpawnScripts/Darklight/TrainerDurvenKXyth.lua new file mode 100644 index 000000000..8bbab6167 --- /dev/null +++ b/server/SpawnScripts/Darklight/TrainerDurvenKXyth.lua @@ -0,0 +1,216 @@ +--[[ + Script Name : SpawnScripts/Darklight/TrainerDurvenKXyth.lua + Script Purpose : Trainer Durven K'Xyth + Script Author : John Adams + Script Date : 2009.01.31 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +function spawn(NPC) + SetPlayerProximityFunction(NPC, 10, "InRange", "LeaveRange") +end + +function respawn(NPC) + spawn(NPC) +end + +function InRange(NPC, Spawn) +end + +function LeaveRange(NPC, Spawn) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_1_1008.mp3", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Tell me what my physical attributes do.", "dlg_23_1") + AddConversationOption(conversation, "How do I view my physical attributes?") + AddConversationOption(conversation, "How do I improve my physical attributes?") + AddConversationOption(conversation, "I will ask you about this later.") + StartConversation(conversation, NPC, Spawn, "Hello there. You look like you keep both your body and mind in good shape. Even so, I bet you could use more information on your physical attributes: Strength, Agility, Stamina, Intelligence, and Wisdom. That's what I'm here to teach you!") +end + +function dlg_23_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Tell me about Agility.", "dlg_23_2") + AddConversationOption(conversation, "How do I view my physical attributes?") + AddConversationOption(conversation, "How do I improve my physical attributes?") + AddConversationOption(conversation, "Thanks for the information.") + StartConversation(conversation, NPC, Spawn, "Strength determines how much weight you can carry. The more Strength you have, the more physical damage you can do in melee combat. Strength also determines the maximum amount of power Guardians, Berserkers, Bruisers, and Shadowknights have.") +end + +function dlg_23_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Tell me what my physical attributes do.") + AddConversationOption(conversation, "How do I improve my physical attributes?", "dlg_23_3") + AddConversationOption(conversation, "Thank you for the information.") + StartConversation(conversation, NPC, Spawn, "You can see your physical attributes, as well as other important aspects of your character, in your persona window. Just press the P key to open your persona window.") +end + +function dlg_23_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Tell me about Agility.", "dlg_23_4") + AddConversationOption(conversation, "How do I view my physical attributes?") + AddConversationOption(conversation, "How do I improve my physical attributes?") + AddConversationOption(conversation, "Thanks for the information.") + StartConversation(conversation, NPC, Spawn, "Strength determines how much weight you can carry. The more Strength you have, the more physical damage you can do in melee combat. Strength also determines the maximum amount of power Guardians, Berserkers, Bruisers, and Shadowknights have.") +end + +function dlg_23_4(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Tell me about Stamina.", "dlg_23_5") + AddConversationOption(conversation, "How do I view my physical attributes?") + AddConversationOption(conversation, "How do I improve my physical attributes?") + AddConversationOption(conversation, "Thanks for the information.") + StartConversation(conversation, NPC, Spawn, "Agility helps you avoid physical attacks. The more Agility you have, the higher your Avoidance ability. Agility also determines the maximum amount of power Brigands, Assassins, Troubadors, and Dirges have.") +end + +function dlg_23_5(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Tell me about Intelligence.", "dlg_23_6") + AddConversationOption(conversation, "How do I view my physical attributes?") + AddConversationOption(conversation, "How do I improve my physical attributes?") + AddConversationOption(conversation, "Thank you for the information.") + StartConversation(conversation, NPC, Spawn, "Stamina gives you more Health points. The more Health you have, the longer you can survive in battle. Stamina is a useful attribute for every class.") +end + +function dlg_23_6(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Tell me about Wisdom.", "dlg_23_7") + AddConversationOption(conversation, "How do I view my physical attributes?") + AddConversationOption(conversation, "How do I improve my physical attributes?") + AddConversationOption(conversation, "Thank you for the information.") + StartConversation(conversation, NPC, Spawn, "Intelligence is more than just a sign of how smart you are. The more Intelligence you have, the more damage you do with spells in combat. Intelligence also determines the maximum amount of power Wizards, Warlocks, Coercers, Necromancers, Troubadors, and Dirges have.") +end + +function dlg_23_7(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "How do I view my physical attributes?", "dlg_23_8") + AddConversationOption(conversation, "How do I improve my physical attributes?") + AddConversationOption(conversation, "Thank you for the information.") + StartConversation(conversation, NPC, Spawn, "Wisdom increases your resistances to magical types of attacks: Heat, Cold, Disease, Poison, Magic, Mental and Divine. Wisdom also determines the maximum amount of power Inquisitors, Defilers, Furies, and Wardens have.") +end + +function dlg_23_8(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Tell me what my physical attributes do.", "dlg_23_9") + AddConversationOption(conversation, "How do I improve my physical attributes?") + AddConversationOption(conversation, "Thank you for the information.") + StartConversation(conversation, NPC, Spawn, "You can see your physical attributes, as well as other important aspects of your character, in your persona window. Just press the P key to open your persona window.") +end + +function dlg_23_9(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Tell me about Agility.", "dlg_23_10") + AddConversationOption(conversation, "How do I view my physical attributes?") + AddConversationOption(conversation, "How do I improve my physical attributes?") + AddConversationOption(conversation, "Thanks for the information.") + StartConversation(conversation, NPC, Spawn, "Strength determines how much weight you can carry. The more Strength you have, the more physical damage you can do in melee combat. Strength also determines the maximum amount of power Guardians, Berserkers, Bruisers, and Shadowknights have.") +end + +function dlg_23_10(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Tell me what my physical attributes do.") + AddConversationOption(conversation, "How do I improve my physical attributes?", "dlg_23_11") + AddConversationOption(conversation, "Thank you for the information.") + StartConversation(conversation, NPC, Spawn, "You can see your physical attributes, as well as other important aspects of your character, in your persona window. Just press the P key to open your persona window.") +end + +function dlg_23_11(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Tell me about Agility.", "dlg_23_12") + AddConversationOption(conversation, "How do I view my physical attributes?") + AddConversationOption(conversation, "How do I improve my physical attributes?") + AddConversationOption(conversation, "Thanks for the information.") + StartConversation(conversation, NPC, Spawn, "Strength determines how much weight you can carry. The more Strength you have, the more physical damage you can do in melee combat. Strength also determines the maximum amount of power Guardians, Berserkers, Bruisers, and Shadowknights have.") +end + +function dlg_23_12(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Are there other ways?") + AddConversationOption(conversation, "Thank you for the information.") + StartConversation(conversation, NPC, Spawn, "Your physical attributes, as well as other aspects of your character, can be improved in a number of ways. Many items add points to your attributes, resistances, Health, or Power. Hold your mouse pointer over your items to see what benefits they provide.") +end + +function dlg_23_13(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Tell me what my physical attributes do.", "dlg_23_14") + AddConversationOption(conversation, "How do I view my physical attributes?") + AddConversationOption(conversation, "I will ask you about this later.") + StartConversation(conversation, NPC, Spawn, "Many spells and combat arts enhance your attributes. Some of these can be cast on yourself, while others can improve other player characters that you group with. Grouping with other classes provides a wider variety of ways to improve your attributes.") +end + +function dlg_23_14(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Tell me about Agility.", "dlg_23_15") + AddConversationOption(conversation, "How do I view my physical attributes?") + AddConversationOption(conversation, "How do I improve my physical attributes?") + AddConversationOption(conversation, "Thanks for the information.") + StartConversation(conversation, NPC, Spawn, "Strength determines how much weight you can carry. The more Strength you have, the more physical damage you can do in melee combat. Strength also determines the maximum amount of power Guardians, Berserkers, Bruisers, and Shadowknights have.") +end + +function dlg_23_15(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Are there other ways?") + AddConversationOption(conversation, "Thank you for the information.") + StartConversation(conversation, NPC, Spawn, "Your physical attributes, as well as other aspects of your character, can be improved in a number of ways. Many items add points to your attributes, resistances, Health, or Power. Hold your mouse pointer over your items to see what benefits they provide.") +end + +function dlg_23_16(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Tell me what my physical attributes do.", "dlg_23_17") + AddConversationOption(conversation, "How do I view my physical attributes?") + AddConversationOption(conversation, "I will ask you about this later.") + StartConversation(conversation, NPC, Spawn, "Many spells and combat arts enhance your attributes. Some of these can be cast on yourself, while others can improve other player characters that you group with. Grouping with other classes provides a wider variety of ways to improve your attributes.") +end + diff --git a/server/SpawnScripts/Darklight/TrainerKelvyllJXarae.lua b/server/SpawnScripts/Darklight/TrainerKelvyllJXarae.lua new file mode 100644 index 000000000..a2ad5b04c --- /dev/null +++ b/server/SpawnScripts/Darklight/TrainerKelvyllJXarae.lua @@ -0,0 +1,197 @@ +--[[ + Script Name : SpawnScripts/Darklight/TrainerKelvyllJXarae.lua + Script Purpose : Trainer Kelvyll J'Xarae + Script Author : John Adams + Script Date : 2009.01.31 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +function spawn(NPC) + SetPlayerProximityFunction(NPC, 10, "InRange", "LeaveRange") +end + +function respawn(NPC) + spawn(NPC) +end + +function InRange(NPC, Spawn) +end + +function LeaveRange(NPC, Spawn) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_3_1008.mp3", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Tell me about items and equipment.", "dlg_14_1") + AddConversationOption(conversation, "Tell me about my inventory.") + AddConversationOption(conversation, "I will return for instruction later.") + StartConversation(conversation, NPC, Spawn, "Well met. I'm here to teach our newest recruits about equipment and inventory space. Good equipment is one of the most important tools of any adventurer!") + if convo==15 then + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_3_1008.mp3", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Tell me about items and equipment.", "dlg_15_1") + AddConversationOption(conversation, "Tell me about my inventory.") + AddConversationOption(conversation, "I will return for instruction later.") + StartConversation(conversation, NPC, Spawn, "Well met. I'm here to teach our newest recruits about equipment and inventory space. Good equipment is one of the most important tools of any adventurer!") + end + +end + +function dlg_14_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Can I put bags inside of bags?") + AddConversationOption(conversation, "I will return for instruction later.", "dlg_14_2") + StartConversation(conversation, NPC, Spawn, "Press the I key to open your inventory. Beneath your portrait are six slots that can hold items. You can place bags or other containers in those slots, which will give you even more storage space. Press the B key to open all your bags at once.") +end + +function dlg_14_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "So one item takes up one bag slot?", "dlg_14_3") + AddConversationOption(conversation, "I will return for instruction later.") + StartConversation(conversation, NPC, Spawn, "Only empty bags can go inside other bags. For this reason, it's a good idea to get hold of containers with many slots. After a long night of adventuring or harvesting, you'll want to have as many places to store your goodies as possible.") +end + +function dlg_14_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "I'll be back if I need to refresh my memory on this.", "dlg_14_4") + StartConversation(conversation, NPC, Spawn, "Certain items, such as ammunition or harvested resources, can be stacked up to 200 at a time, depending on the item. Many goods, such as armor and clothing, cannot be stacked at all.") +end + +function dlg_15_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "What can I do with the treasures I earn while adventuring?", "dlg_15_2") + StartConversation(conversation, NPC, Spawn, "Norrath is full of treasures for brave heroes like you. Sometimes the opponents you defeat in battle leave behind treasure chests with valuable loot. You can also buy items from other players, craft them as an artisan, or be awarded items for completing quests.") +end + +function dlg_15_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "What does the item information tell me?", "dlg_15_3") + AddConversationOption(conversation, "I will return for instruction later.") + StartConversation(conversation, NPC, Spawn, "Some items you obtain can be equipped on your person. If you find weapons, armor, jewelry, or certain other goodies, you may be able to use them. To look at a piece of equipment and determine if you can use it, move your mouse pointer over the item.") +end + +function dlg_15_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Are things like attribute bonuses important?", "dlg_15_4") + AddConversationOption(conversation, "I will return for instruction later.") + StartConversation(conversation, NPC, Spawn, "For items that can be equipped, such as weapons and armor, mousing over it tells you which professions can use the item and at what level it can be equipped. You'll also see any benefits, such as attribute bonuses and resists, that the equipment provides.") +end + +function dlg_15_4(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "How can I tell which of two weapons is better?", "dlg_15_5") + AddConversationOption(conversation, "I will return for instruction later.") + StartConversation(conversation, NPC, Spawn, "A wise adventurer is always trying to improve his or her equipment. Whenever you see gear that provides an overall greater benefit than what you have, that item is an upgrade for you.") +end + +function dlg_15_5(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "How can I tell which of two pieces of armor is better?", "dlg_15_6") + AddConversationOption(conversation, "I will return for instruction later.") + StartConversation(conversation, NPC, Spawn, "Weapons have a Damage Rating that shows the relative damage you can do with them. A higher Damage Rating is always better. Be sure you are comparing weapons of the same type, such as a two-handed weapon with another two-hander, or one dual-wield weapon with another.") +end + +function dlg_15_6(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "What about scouts and priests?", "dlg_15_7") + AddConversationOption(conversation, "I will return for instruction later.") + StartConversation(conversation, NPC, Spawn, "How you judge armor depends on your profession. Fighters who take a beating care most about obtaining armor that has high Mitigation, which decreases the amount of damage they take. Mages, on the other hand, know they can't take much punishment anyway, so would rather have armor that provides nice attribute bonuses.") +end + +function dlg_15_7(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "What do I do with equipment I can't use?", "dlg_15_8") + AddConversationOption(conversation, "I will return for instruction later.") + StartConversation(conversation, NPC, Spawn, "Scouts and priests need varying amounts of protection depending on how they play. If they find themselves at the forefront of battle, protection becomes very important. If they stay out of harms way, attribute bonuses may be more valuable.") +end + +function dlg_15_8(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Why are some items marked 'No Value' or 'No Trade'?", "dlg_15_9") + AddConversationOption(conversation, "I will return for instruction later.") + StartConversation(conversation, NPC, Spawn, "An item can be sold to a non-player merchant for cash unless it has the 'No Value' flag on it. Items can be sold or traded to another player unless it has the 'No Trade' flag. If an item says it is 'Lore,' you can only have one of them on your character at a time.") +end + +function dlg_15_9(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "What does it mean when an item says it is 'Attuneable'?", "dlg_15_10") + AddConversationOption(conversation, "I will return for instruction later.") + StartConversation(conversation, NPC, Spawn, "Some items are marked 'No Value' because they are easy to obtain, such as harvested goods. You have to work to earn wealth, Zuzoo! Items are marked 'No Trade' in order to ensure that you earn them yourself, such as defeating a very tough monster or completing a long quest.") +end + +function dlg_15_10(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "How do I manage my inventory?", "dlg_15_11") + StartConversation(conversation, NPC, Spawn, "If an item is marked 'Attuneable,' you must attune it to yourself before it provides any benefits. You'll notice a message on screen when you are wearing an item that must be attuned. To attune it, right-click on the item and select 'Attune.' Once attuned, that item can no longer be traded or sold to another player.") +end + +function dlg_15_11(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Can I put bags inside of bags?", "dlg_15_12") + AddConversationOption(conversation, "I will return for instruction later.") + StartConversation(conversation, NPC, Spawn, "Press the I key to open your inventory. Beneath your portrait are six slots that can hold items. You can place bags or other containers in those slots, which will give you even more storage space. Press the B key to open all your bags at once.") +end + +function dlg_15_12(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "So one item takes up one bag slot?", "dlg_15_13") + AddConversationOption(conversation, "I will return for instruction later.") + StartConversation(conversation, NPC, Spawn, "Only empty bags can go inside other bags. For this reason, it's a good idea to get hold of containers with many slots. After a long night of adventuring or harvesting, you'll want to have as many places to store your goodies as possible.") +end + +function dlg_15_13(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "I'll be back if I need to refresh my memory on this.", "dlg_15_14") + StartConversation(conversation, NPC, Spawn, "Certain items, such as ammunition or harvested resources, can be stacked up to 200 at a time, depending on the item. Many goods, such as armor and clothing, cannot be stacked at all.") +end + diff --git a/server/SpawnScripts/Darklight/TrainerLaebrynDTekenar.lua b/server/SpawnScripts/Darklight/TrainerLaebrynDTekenar.lua new file mode 100644 index 000000000..db6d18b80 --- /dev/null +++ b/server/SpawnScripts/Darklight/TrainerLaebrynDTekenar.lua @@ -0,0 +1,331 @@ +--[[ + Script Name : SpawnScripts/Darklight/TrainerLaebrynDTekenar.lua + Script Purpose : Trainer Laebryn D'Tekenar + Script Author : John Adams + Script Date : 2009.01.31 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +function spawn(NPC) + SetPlayerProximityFunction(NPC, 10, "InRange", "LeaveRange") +end + +function respawn(NPC) + spawn(NPC) +end + +function InRange(NPC, Spawn) +end + +function LeaveRange(NPC, Spawn) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_3_1007.mp3", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "How do I judge my opponent?", "dlg_2_1") + AddConversationOption(conversation, "I'll return later.") + StartConversation(conversation, NPC, Spawn, "Greetings. I sense that you will fight many battles and that you will one day be known as a great hero. But remember, we all have to start somewhere. The first thing you need to know to be successful in combat is how to size up your adversary.") + if convo==3 then + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_1_1007.mp3", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "How do I judge my opponent?", "dlg_3_1") + AddConversationOption(conversation, "I'll return later.") + StartConversation(conversation, NPC, Spawn, "Greetings. I sense that you will fight many battles and that you will one day be known as a great hero. But remember, we all have to start somewhere. The first thing you need to know to be successful in combat is how to size up your adversary.") + end + +end + +function dlg_2_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "What does the creature's name tell me?", "dlg_2_2") + StartConversation(conversation, NPC, Spawn, "You must learn to use both your eyes and your instincts as you consider friends and foes alike in Norrath. There are two excellent tools you should use to judge their capabilities: what you can tell from their name and what you can learn by targeting them.") +end + +function dlg_2_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "How do I target an opponent?", "dlg_2_3") + AddConversationOption(conversation, "I will be back later.") + StartConversation(conversation, NPC, Spawn, "If something has a red border around its name, that target is aggressive toward you and will attack if you get too close to it. You should be especially careful of creatures that roam around, because if they notice you they won't hesitate to strike.") +end + +function dlg_2_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Why are separate creatures sometimes linked?", "dlg_2_4") + AddConversationOption(conversation, "I will be back later.") + StartConversation(conversation, NPC, Spawn, "All you need to do is move your mouse pointer over what you want to target and click. You will see the name of your opponent in the Target window in the upper left corner of the screen, and a large arrow will appear above its head. If arrows also appear above the heads of nearby creatures, it means all of them are linked together and will attack as one.") +end + +function dlg_2_4(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "What does the Target window tell me?", "dlg_2_5") + StartConversation(conversation, NPC, Spawn, "Sometimes multiple creatures will work together to form a single encounter. These opponents will act as a team, and usually won't stop fighting until all of them are defeated.") +end + +function dlg_2_5(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "What does the level indicate?", "dlg_2_6") + AddConversationOption(conversation, "I will be back later.") + StartConversation(conversation, NPC, Spawn, "The Target window tells you several important facts, which collectively form what is referred to as the 'con' (overall challenge) of the opponent. It shows you the numerical level of the creature you have targeted, a color to indicate its relative level range, up or down arrows to indicate toughness, and indicators that tell you if the encounter is normal, heroic, or epic.") +end + +function dlg_2_6(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "How does my opponent's level affect my rewards for victory?", "dlg_2_7") + AddConversationOption(conversation, "I will be back later.") + StartConversation(conversation, NPC, Spawn, "As you adventure through Norrath, you will gain experience and increase your level. The opponents you will face in combat have levels as well. To be victorious, you will usually want to face foes that are close to your level.") +end + +function dlg_2_7(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "What does the color of my opponent's name tell me?", "dlg_2_8") + AddConversationOption(conversation, "I will be back later.") + StartConversation(conversation, NPC, Spawn, "You gain more experience by defeating higher-level opponents, but they will also be tougher to beat. Conversely, if you defeat foes much lower than your level, they will not be nearly as rewarding.") +end + +function dlg_2_8(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "What are the colors?", "dlg_2_9") + StartConversation(conversation, NPC, Spawn, "The color of your opponent's name indicates how challenging the encounter is. It is very useful as a quick indicator of whether or not you should be fighting a target. The more danger its color indicates, the greater the threat it represents.") +end + +function dlg_2_9(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Will grey targets ever attack me?", "dlg_2_10") + AddConversationOption(conversation, "I will be back later.") + StartConversation(conversation, NPC, Spawn, "Grey names mean the fight is below your abilities and will give no experience or reward. Green names mean the opponent is very easy. Blue names mean an easy fight. White names indicate the opponent is even with your abilities. Yellow names mean the fight will be challenging. Orange names indicate a difficult encounter. Red names mean the battle could be deadly.") +end + +function dlg_2_10(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "What do down arrows tell me?", "dlg_2_11") + AddConversationOption(conversation, "I will be back later.") + StartConversation(conversation, NPC, Spawn, "Targets with grey names will not attack you, even if they would be aggressive to someone closer to their level. In other words, you won't be attacked by anything that won't give you some reward for defeating it.") +end + +function dlg_2_11(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "What do up arrows mean?", "dlg_2_12") + AddConversationOption(conversation, "I will be back later.") + StartConversation(conversation, NPC, Spawn, "No arrow by the target's name indicates an average opponent for a lone adventurer. A single down arrow means it is a below average opponent. Two down arrows tell you it's a weak opponent, and three down arrows means it is very weak. Be careful though, because if multiple weak opponents are working together they can still represent quite a challenge.") +end + +function dlg_2_12(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "So how do I know whether I can face a challenge alone?", "dlg_2_13") + AddConversationOption(conversation, "I will finish this lesson later.") + StartConversation(conversation, NPC, Spawn, "Up arrows indicate increased difficulty. A single up arrow means an above average opponent. Two up arrows show a strong opponent, while three up arrows means a very tough fight. If you look at the sparring partners next to us, you will see that they have different arrow indicators. Feel free to practice fighting them to feel what effect the arrows have.") +end + +function dlg_2_13(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "What is the difference between normal, heroic, and epic?", "dlg_2_14") + AddConversationOption(conversation, "I will finish this lesson later.") + StartConversation(conversation, NPC, Spawn, "As a general rule of thumb, if you see an enemy with one up arrow, it's a good idea to team up with another player to take it on. If you see an enemy with two up arrows, add two members to your group. If you see an opponent with three up arrows, add three members to your group. A lone adventurer will likely want to face targets with no arrows or down arrows.") +end + +function dlg_2_14(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "So how do all these elements work together to show an opponent's difficulty?", "dlg_2_15") + AddConversationOption(conversation, "I will finish this lesson later.") + StartConversation(conversation, NPC, Spawn, "A normal opponent has no indicator and is intended to be fought by a solo adventurer or small group. A heroic encounter is intended for a larger group of up to six adventurers. An epic opponent should only be attempted by a raid force of multiple groups working together.") +end + +function dlg_2_15(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Thank you, instructor.", "dlg_2_16") + StartConversation(conversation, NPC, Spawn, "All the elements I've explained will affect the outcome of a battle and whether or not you will need allies to win. Pay close attention to the lessons I have taught you, and apply them to challenges you face throughout your journeys in Norrath.") +end + +function dlg_3_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "What does the creature's name tell me?", "dlg_3_2") + StartConversation(conversation, NPC, Spawn, "You must learn to use both your eyes and your instincts as you consider friends and foes alike in Norrath. There are two excellent tools you should use to judge their capabilities: what you can tell from their name and what you can learn by targeting them.") +end + +function dlg_3_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "How do I target an opponent?", "dlg_3_3") + AddConversationOption(conversation, "I will be back later.") + StartConversation(conversation, NPC, Spawn, "If something has a red border around its name, that target is aggressive toward you and will attack if you get too close to it. You should be especially careful of creatures that roam around, because if they notice you they won't hesitate to strike.") +end + +function dlg_3_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Why are separate creatures sometimes linked?", "dlg_3_4") + AddConversationOption(conversation, "I will be back later.") + StartConversation(conversation, NPC, Spawn, "All you need to do is move your mouse pointer over what you want to target and click. You will see the name of your opponent in the Target window in the upper left corner of the screen, and a large arrow will appear above its head. If arrows also appear above the heads of nearby creatures, it means all of them are linked together and will attack as one.") +end + +function dlg_3_4(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "What does the Target window tell me?", "dlg_3_5") + StartConversation(conversation, NPC, Spawn, "Sometimes multiple creatures will work together to form a single encounter. These opponents will act as a team, and usually won't stop fighting until all of them are defeated.") +end + +function dlg_3_5(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "What does the level indicate?", "dlg_3_6") + AddConversationOption(conversation, "I will be back later.") + StartConversation(conversation, NPC, Spawn, "The Target window tells you several important facts, which collectively form what is referred to as the 'con' (overall challenge) of the opponent. It shows you the numerical level of the creature you have targeted, a color to indicate its relative level range, up or down arrows to indicate toughness, and indicators that tell you if the encounter is normal, heroic, or epic.") +end + +function dlg_3_6(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "How does my opponent's level affect my rewards for victory?", "dlg_3_7") + AddConversationOption(conversation, "I will be back later.") + StartConversation(conversation, NPC, Spawn, "As you adventure through Norrath, you will gain experience and increase your level. The opponents you will face in combat have levels as well. To be victorious, you will usually want to face foes that are close to your level.") +end + +function dlg_3_7(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "What does the color of my opponent's name tell me?", "dlg_3_8") + AddConversationOption(conversation, "I will be back later.") + StartConversation(conversation, NPC, Spawn, "You gain more experience by defeating higher-level opponents, but they will also be tougher to beat. Conversely, if you defeat foes much lower than your level, they will not be nearly as rewarding.") +end + +function dlg_3_8(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "What are the colors?", "dlg_3_9") + StartConversation(conversation, NPC, Spawn, "The color of your opponent's name indicates how challenging the encounter is. It is very useful as a quick indicator of whether or not you should be fighting a target. The more danger its color indicates, the greater the threat it represents.") +end + +function dlg_3_9(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Will grey targets ever attack me?", "dlg_3_10") + AddConversationOption(conversation, "I will be back later.") + StartConversation(conversation, NPC, Spawn, "Grey names mean the fight is below your abilities and will give no experience or reward. Green names mean the opponent is very easy. Blue names mean an easy fight. White names indicate the opponent is even with your abilities. Yellow names mean the fight will be challenging. Orange names indicate a difficult encounter. Red names mean the battle could be deadly.") +end + +function dlg_3_10(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "What do down arrows tell me?", "dlg_3_11") + AddConversationOption(conversation, "I will be back later.") + StartConversation(conversation, NPC, Spawn, "Targets with grey names will not attack you, even if they would be aggressive to someone closer to their level. In other words, you won't be attacked by anything that won't give you some reward for defeating it.") +end + +function dlg_3_11(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "What do up arrows mean?", "dlg_3_12") + AddConversationOption(conversation, "I will be back later.") + StartConversation(conversation, NPC, Spawn, "No arrow by the target's name indicates an average opponent for a lone adventurer. A single down arrow means it is a below average opponent. Two down arrows tell you it's a weak opponent, and three down arrows means it is very weak. Be careful though, because if multiple weak opponents are working together they can still represent quite a challenge.") +end + +function dlg_3_12(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "So how do I know whether I can face a challenge alone?", "dlg_3_13") + AddConversationOption(conversation, "I will finish this lesson later.") + StartConversation(conversation, NPC, Spawn, "Up arrows indicate increased difficulty. A single up arrow means an above average opponent. Two up arrows show a strong opponent, while three up arrows means a very tough fight. If you look at the sparring partners next to us, you will see that they have different arrow indicators. Feel free to practice fighting them to feel what effect the arrows have.") +end + +function dlg_3_13(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "What is the difference between normal, heroic, and epic?", "dlg_3_14") + AddConversationOption(conversation, "I will finish this lesson later.") + StartConversation(conversation, NPC, Spawn, "As a general rule of thumb, if you see an enemy with one up arrow, it's a good idea to team up with another player to take it on. If you see an enemy with two up arrows, add two members to your group. If you see an opponent with three up arrows, add three members to your group. A lone adventurer will likely want to face targets with no arrows or down arrows.") +end + +function dlg_3_14(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "So how do all these elements work together to show an opponent's difficulty?", "dlg_3_15") + AddConversationOption(conversation, "I will finish this lesson later.") + StartConversation(conversation, NPC, Spawn, "A normal opponent has no indicator and is intended to be fought by a solo adventurer or small group. A heroic encounter is intended for a larger group of up to six adventurers. An epic opponent should only be attempted by a raid force of multiple groups working together.") +end + +function dlg_3_15(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Thank you, instructor.", "dlg_3_16") + StartConversation(conversation, NPC, Spawn, "All the elements I've explained will affect the outcome of a battle and whether or not you will need allies to win. Pay close attention to the lessons I have taught you, and apply them to challenges you face throughout your journeys in Norrath.") +end + diff --git a/server/SpawnScripts/Darklight/TrainerMourndrilKTekenzin.lua b/server/SpawnScripts/Darklight/TrainerMourndrilKTekenzin.lua new file mode 100644 index 000000000..70f44135d --- /dev/null +++ b/server/SpawnScripts/Darklight/TrainerMourndrilKTekenzin.lua @@ -0,0 +1,221 @@ +--[[ + Script Name : SpawnScripts/Darklight/TrainerMourndrilKTekenzin.lua + Script Purpose : Trainer Mourndril K'Tekenzin + Script Author : John Adams + Script Date : 2009.01.31 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +function spawn(NPC) + SetPlayerProximityFunction(NPC, 10, "InRange", "LeaveRange") +end + +function respawn(NPC) + spawn(NPC) +end + +function InRange(NPC, Spawn) +end + +function LeaveRange(NPC, Spawn) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_1_1008.mp3", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "What can cause my death? ", "dlg_5_1") + StartConversation(conversation, NPC, Spawn, "In time, all must fall. Allow me to teach you the consequences of death and how you can recover properly.") + if convo==11 then + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_2_1008.mp3", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "What can cause my death? ", "dlg_11_1") + StartConversation(conversation, NPC, Spawn, "In time, all must fall. Allow me to teach you the consequences of death and how you can recover properly.") + end + +end + +function dlg_5_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "How will I know when I'm going to die?", "dlg_5_2") + StartConversation(conversation, NPC, Spawn, "Death can come in many ways: being bested on the field of battle, falling from great heights, drowning in water, falling into lava, standing too close to an exploding chest, and so on. It's a dangerous world out there.") +end + +function dlg_5_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Why green?", "dlg_5_3") + StartConversation(conversation, NPC, Spawn, "Just keep an eye on your health bar, the green line located beneath your name in the upper left of your screen. At least...you hope it's green.") +end + +function dlg_5_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "What happens then?", "dlg_5_4") + AddConversationOption(conversation, "I need to finish this conversation later.") + StartConversation(conversation, NPC, Spawn, "Green means you're healthy. As your health diminishes, the bar turns yellow, then orange, and finally red. If the bar is empty, you die. You pay the debt, which cancels all others, if you get my meaning.") +end + +function dlg_5_4(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "So death is not the end?", "dlg_5_5") + StartConversation(conversation, NPC, Spawn, "Your spirit lays trapped in your fallen body, unable to move. At this point, you have a choice: wait for a nearby ally to revive you, or choose a location from the window in the center of your screen at which to reappear. In some cases you'll have a single choice, in others multiple choices.") +end + +function dlg_5_5(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "What are the consequences?", "dlg_5_6") + StartConversation(conversation, NPC, Spawn, "Fortunately for all of us, death in Norrath is a temporary thing. If another adventurer revives you, you reappear at the spot of your death. If you choose a location to revive, you will appear at that spot. There are consequences to death, however.") +end + +function dlg_5_6(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "What is experience debt?", "dlg_5_7") + AddConversationOption(conversation, "I think I've learned enough for now.") + StartConversation(conversation, NPC, Spawn, "There are three results of death. First, you incur some experience debt which can be paid off by earning more XP (experience points). Second, you suffer a revive sickness that lowers your abilities for a short time, which leaves you temporarily vulnerable and less effective. Finally, all your equipped items take damage that will eventually have to be repaired.") +end + +function dlg_5_7(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "What is revive sickness like?", "dlg_5_8") + StartConversation(conversation, NPC, Spawn, "Experience debt is indicated by a red line on your XP bar. As you earn experience going forward, part of your XP will go toward paying off your debt while the rest will continue to advance you toward your next level. Mousing over your XP bar also tells how much debt you have.") +end + +function dlg_5_8(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "What are the results of item damage?", "dlg_5_9") + StartConversation(conversation, NPC, Spawn, "You'll see an icon for revive sickness in your spell effects window. Mousing over the icon will tell you how long it will remain. The type of sickness you have depends on how you were revived, but no matter what there will be a negative effect. Don't worry, it passes soon enough.") +end + +function dlg_5_9(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "What can I do about item damage?", "dlg_5_10") + StartConversation(conversation, NPC, Spawn, "Your equipped items usually take about 10% wear with each death. When they are down to zero durability, you no longer receive any benefit from them. Don't let your equipment ever get into such poor condition, Zuzoo!") +end + +function dlg_5_10(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Thank you for your advice.", "dlg_5_11") + StartConversation(conversation, NPC, Spawn, "You will need to see a mender, someone who is able to repair your items back to 100% durability.") +end + +function dlg_11_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "How will I know when I'm going to die?", "dlg_11_2") + StartConversation(conversation, NPC, Spawn, "Death can come in many ways: being bested on the field of battle, falling from great heights, drowning in water, falling into lava, standing too close to an exploding chest, and so on. It's a dangerous world out there.") +end + +function dlg_11_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Why green?", "dlg_11_3") + StartConversation(conversation, NPC, Spawn, "Just keep an eye on your health bar, the green line located beneath your name in the upper left of your screen. At least...you hope it's green.") +end + +function dlg_11_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "What happens then?", "dlg_11_4") + AddConversationOption(conversation, "I need to finish this conversation later.") + StartConversation(conversation, NPC, Spawn, "Green means you're healthy. As your health diminishes, the bar turns yellow, then orange, and finally red. If the bar is empty, you die. You pay the debt, which cancels all others, if you get my meaning.") +end + +function dlg_11_4(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "So death is not the end?", "dlg_11_5") + StartConversation(conversation, NPC, Spawn, "Your spirit lays trapped in your fallen body, unable to move. At this point, you have a choice: wait for a nearby ally to revive you, or choose a location from the window in the center of your screen at which to reappear. In some cases you'll have a single choice, in others multiple choices.") +end + +function dlg_11_5(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "What are the consequences?", "dlg_11_6") + StartConversation(conversation, NPC, Spawn, "Fortunately for all of us, death in Norrath is a temporary thing. If another adventurer revives you, you reappear at the spot of your death. If you choose a location to revive, you will appear at that spot. There are consequences to death, however.") +end + +function dlg_11_6(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "What is experience debt?", "dlg_11_7") + AddConversationOption(conversation, "I think I've learned enough for now.") + StartConversation(conversation, NPC, Spawn, "There are three results of death. First, you incur some experience debt which can be paid off by earning more XP (experience points). Second, you suffer a revive sickness that lowers your abilities for a short time, which leaves you temporarily vulnerable and less effective. Finally, all your equipped items take damage that will eventually have to be repaired.") +end + +function dlg_11_7(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "What is revive sickness like?", "dlg_11_8") + StartConversation(conversation, NPC, Spawn, "Experience debt is indicated by a red line on your XP bar. As you earn experience going forward, part of your XP will go toward paying off your debt while the rest will continue to advance you toward your next level. Mousing over your XP bar also tells how much debt you have.") +end + +function dlg_11_8(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "What are the results of item damage?", "dlg_11_9") + StartConversation(conversation, NPC, Spawn, "You'll see an icon for revive sickness in your spell effects window. Mousing over the icon will tell you how long it will remain. The type of sickness you have depends on how you were revived, but no matter what there will be a negative effect. Don't worry, it passes soon enough.") +end + +function dlg_11_9(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "What can I do about item damage?", "dlg_11_10") + StartConversation(conversation, NPC, Spawn, "Your equipped items usually take about 10% wear with each death. When they are down to zero durability, you no longer receive any benefit from them. Don't let your equipment ever get into such poor condition, XXXXXXX!") +end + +function dlg_11_10(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Thank you for your advice.", "dlg_11_11") + StartConversation(conversation, NPC, Spawn, "You will need to see a mender, someone who is able to repair your items back to 100% durability.") +end + diff --git a/server/SpawnScripts/Darklight/TrainerNhilzyneBMyar.lua b/server/SpawnScripts/Darklight/TrainerNhilzyneBMyar.lua new file mode 100644 index 000000000..49fb47e93 --- /dev/null +++ b/server/SpawnScripts/Darklight/TrainerNhilzyneBMyar.lua @@ -0,0 +1,248 @@ +--[[ + Script Name : SpawnScripts/Darklight/TrainerNhilzyneBMyar.lua + Script Purpose : Trainer Nhilzyne B'Myar + Script Author : Scatman + Script Date : 2009.09.05 + Script Notes : +--]] + +dofile("SpawnScripts/Generic/GenericVoiceOvers.lua") + +function spawn(NPC) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + GenericHail(NPC, Spawn) + + AddConversationOption(conversation, "Teach me the basics of combat.", "dlg_2_1") + AddConversationOption(conversation, "Teach me more advanced aspects of combat.", "dlg_2_17") + AddConversationOption(conversation, "I'll come back later.") + StartConversation(conversation, NPC, Spawn, "Hello there. I'm here to teach folks the finer points of combat. I don't like to get into a fight, but if I do, I prefer to win. Know what I mean?") +end + +function dlg_2_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "Tell me how to begin a fight.", "dlg_2_2") + AddConversationOption(conversation, "Tell me about melee combat.", "dlg_2_5") + AddConversationOption(conversation, "Tell me about ranged combat.", "dlg_2_7") + AddConversationOption(conversation, "What kind of rewards can I earn in battle?", "dlg_2_14") + AddConversationOption(conversation, "Teach me more advanced aspects of combat.", "dlg_2_17") + AddConversationOption(conversation, "I'll come back later.") + StartConversation(conversation, NPC, Spawn, "There are many different elements that go into successful combat. I can teach you a few of the basics, such as how to begin a fight, the difference between melee and ranged combat, and earning rewards for victory.") +end + +function dlg_2_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "How do I begin the battle?", "dlg_2_3") + StartConversation(conversation, NPC, Spawn, "Starting combat is easy. Just use your mouse pointer to left-click on an opponent. Its name will appear in the Target window in the upper left of your screen. You can also use the Tab key to cycle through nearby targets or the F8 key to select your closest enemy.") +end + +function dlg_2_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "So I can fight anyone or anything I want?", "dlg_2_4") + StartConversation(conversation, NPC, Spawn, "If you're close enough to your foe and want to start hitting it with your weapon, either click your Melee Attack button on your hotbar or press the ~ key. Or you can begin by using one of your spells or combat arts to get the enemy's attention. Remember, you must be close enough to actually hit them.") +end + +function dlg_2_4(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "Tell me about melee combat.", "dlg_2_5") + AddConversationOption(conversation, "Tell me about ranged combat.", "dlg_2_7") + AddConversationOption(conversation, "What kind of rewards can I earn in battle?", "dlg_2_14") + AddConversationOption(conversation, "Teach me more advanced aspects of combat.", "dlg_2_17") + AddConversationOption(conversation, "I'll come back later.") + StartConversation(conversation, NPC, Spawn, "You can fight most non-player characters and creatures that you find outside your city, whether outdoors or in dungeons. Many non-player characters in the cities are there to help you or give quests, so you can't attack some of them. If you try, you'll get a message telling you that they aren't valid targets.") +end + +function dlg_2_5(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "What classes specialize in melee combat?", "dlg_2_6") + StartConversation(conversation, NPC, Spawn, "Melee combat means a toe-to-toe, physical confrontation. It is a combination of auto-attack damage that happens automatically when you press the Melee Attack button on your hotbar or the ~ key and spells or combat arts that you use in close proximity to your foe.") +end + +function dlg_2_6(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "Tell me how to begin a fight.", "dlg_2_2") + AddConversationOption(conversation, "Tell me about ranged combat.", "dlg_2_7") + AddConversationOption(conversation, "What kind of rewards can I earn in battle?", "dlg_2_14") + AddConversationOption(conversation, "Teach me more advanced aspects of combat.","dlg_2_17") + AddConversationOption(conversation, "I'll come back later.") + StartConversation(conversation, NPC, Spawn, "Sturdy fighters such as Guardians, Berserkers, Bruisers, and Shadowknights stand at the front lines of battle facing the enemy. Crafty scouts such as Brigands, Assassins, Troubadors, and Dirges generally stay close to their foes as well, but prefer to launch attacks from the back or side where they are less likely to be counterattacked.") +end + +function dlg_2_7(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "How do I launch a ranged attack?", "dlg_2_8") + StartConversation(conversation, NPC, Spawn, "Ranged combat means that you put some distance between yourself and the enemy. This can be done with weapons such as bows or throwing daggers, or with spells and arts that can be cast from a distance.") +end + +function dlg_2_8(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "What classes specialize in ranged combat?", "dlg_2_9") + StartConversation(conversation, NPC, Spawn, "If you have a ranged weapon and ammunition, you can initiate ranged combat by using the Ranged Attack button on the Abilities tab of your Knowledge Book. You can drag this key to your hotbar if you like. Remember, you must have a ranged weapon in the Ranged slot of your inventory window and the correct type of ammunition in the Ammo slot.") +end + +function dlg_2_9(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "How do I tell if I can use spells or arts from a distance?", "dlg_2_10") + StartConversation(conversation, NPC, Spawn, "While most classes have the ability to attack from a distance, scout classes such as Brigands, Troubadors, Dirges, and Assassins specialize in ranged physical attacks. Mages, priests, and Shadowknights have spells that do damage to their foes from a distance.") +end + +function dlg_2_10(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "Tell me how to begin a fight.", "dlg_2_2") + AddConversationOption(conversation, "Tell me about melee combat.", "dlg_2_5") + AddConversationOption(conversation, "What kind of rewards can I earn in battle?", "dlg_2_14") + AddConversationOption(conversation, "Teach me more advanced aspects of combat.", "dlg_2_17") + AddConversationOption(conversation, "I'll come back later.") + StartConversation(conversation, NPC, Spawn, "You can right-click on a spell or art's icon and select 'Examine' to see what its range of effect is. In addition, if you target something and the icon for one of your spells or arts turns a dark red, that means the opponent is out of range of that ability.") +end + +function dlg_2_14(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "What do you mean by 'a worthy opponent'?", "dlg_2_15") + StartConversation(conversation, NPC, Spawn, "Victory in battle can be very rewarding. Successful combat against a worthy opponent awards you experience (XP) to help you advance your level, as well as the chance at coin, usable items, and other valuables.") +end + +function dlg_2_15(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "Are certain types of targets more rewarding than others?", "dlg_2_16") + StartConversation(conversation, NPC, Spawn, "You don't earn rewards for defeating foes that are too far below your level. If your target has a grey name, it means it is very weak and won't provide any benefit for beating it.") +end + +function dlg_2_16(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Tell me how to begin a fight.", "dlg_2_17") + AddConversationOption(conversation, "Tell me about melee combat.", "dlg_2_5") + AddConversationOption(conversation, "Tell me about ranged combat.", "dlg_2_14") + AddConversationOption(conversation, "Teach me more advanced aspects of combat.", "dlg_2_17") + AddConversationOption(conversation, "I'll come back later.") + StartConversation(conversation, NPC, Spawn, "The tougher a foe, the better its chances to provide a valuable reward. Though defeating enemies alone provides nice rewards, defeating heroic enemies that require a group is even more rewarding. The very best items come from banding together multiple groups to defeat epic opponents.") +end + +function dlg_2_17(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "Tell me about selecting the right opponent.", "dlg_2_18") + AddConversationOption(conversation, "Teach me about knowing my surroundings.", "dlg_6_21") + AddConversationOption(conversation, "Tell me about using my abilities.", "dlg_6_23") + AddConversationOption(conversation, "Teach me the basics of combat.", "dlg_2_1") + AddConversationOption(conversation, "I'll come back later.") + StartConversation(conversation, NPC, Spawn, "There are many advanced combat techniques that you will learn over time. There's no substitute for experience, Zuzoo! I'd be happy to discuss a few of these advanced aspects, such as selecting the right opponent, knowing your surroundings, and using your abilities.") +end + +function dlg_2_18(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "How do I tell if an opponent is too weak or too strong for me?", "dlg_2_19") + StartConversation(conversation, NPC, Spawn, "Picking the right fight is crucial to victory. A weak opponent won't provide worthwhile rewards, while an overly powerful foe will result in your defeat. You need to keep your resources in mind as well as choosing the right target.") +end + +function dlg_2_19(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "What resources should I be keeping an eye on?", "dlg_2_20") + StartConversation(conversation, NPC, Spawn, "Targeting an opponent will show you detailed information on its overall potency. Generally speaking, you'll find the best results from fighting opponents with blue, white, or yellow names.") +end + +function dlg_2_20(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "Teach me about knowing my surroundings.", "dlg_6_21") + AddConversationOption(conversation, "Tell me about using my abilities.", "dlg_6_23") + AddConversationOption(conversation, "Teach me the basics of combat.", "dlg_2_1") + AddConversationOption(conversation, "I'll come back later.") + StartConversation(conversation, NPC, Spawn, "Starting a fight when you are low on health or power is a very bad idea. Your choice of targets also depends on whether you're alone or grouped with other players. Forming a group allows you to take on tougher and more rewarding challenges than you could face alone.") +end + +function dlg_6_21(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "Anything else I should watch out for?", "dlg_6_22") + StartConversation(conversation, NPC, Spawn, "Keeping your surroundings in mind is crucial to victory. Fighting in areas with lots of aggressive creatures is a bad idea, because they won't hesitate to gang up on you.") +end + +function dlg_6_22(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Tell me about selecting the right opponent.", "dlg_2_18") + AddConversationOption(conversation, "Tell me about using my abilities.", "dlg_6_23") + AddConversationOption(conversation, "Teach me the basics of combat.", "dlg_2_1") + AddConversationOption(conversation, "I'll come back later.") + StartConversation(conversation, NPC, Spawn, "You should be aware of what's going on around you. Using your mouse wheel to scroll out into third person and holding down the left mouse button allows you to move the camera around your character. It's a good idea to do this when fighting in dangerous areas to make sure nothing sneaks up on you.") +end + +function dlg_6_23(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "What do you mean?", "dlg_6_24") + StartConversation(conversation, NPC, Spawn, "Successful fighting isn't about turning on your auto-attack and walking away from battle. Your odds of victory are much better if you are well-prepared and are active during combat. You should use every spell or combat art that has a positive effect on your chances to win.") +end + +function dlg_6_24(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "What about during battle?", "dlg_6_25") + StartConversation(conversation, NPC, Spawn, "Before you begin fighting, make sure you and your allies have activated all beneficial spells, also known as 'buffs,' so that you're operating at peak efficiency. Buffs can add health or power, increase your rate of regeneration, enhance your physical attributes, make you attack faster or do more damage, and more.") +end + +function dlg_6_25(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "What else should I know about spells and arts?", "dlg_6_26") + StartConversation(conversation, NPC, Spawn, "Whether you're a front-lines melee type or someone attacking from a distance with weapons or spells, you should be using abilities that damage your foes effectively and efficiently. Right click on your spells and arts and select 'Examine' to see details on their effects.") +end + +function dlg_6_26(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "Tell me about selecting the right opponent.", "dlg_2_18") + AddConversationOption(conversation, "Teach me about knowing my surroundings.", "dlg_6_21") + AddConversationOption(conversation, "Teach me the basics of combat.", "dlg_2_1") + AddConversationOption(conversation, "I'll come back later.") + StartConversation(conversation, NPC, Spawn, "Using your highest-level versions of spells and arts will be more effective than using older versions. In addition, you should be upgrading your abilities to higher ranks to make them more effective. For more details on spells and combat arts, talk to Trainer Yasna V'Vath.") +end \ No newline at end of file diff --git a/server/SpawnScripts/Darklight/TrainerYasnaVVath.lua b/server/SpawnScripts/Darklight/TrainerYasnaVVath.lua new file mode 100644 index 000000000..e3dbc487b --- /dev/null +++ b/server/SpawnScripts/Darklight/TrainerYasnaVVath.lua @@ -0,0 +1,591 @@ +--[[ + Script Name : SpawnScripts/Darklight/TrainerYasnaVVath.lua + Script Purpose : Trainer Yasna V'Vath + Script Author : John Adams + Script Date : 2009.01.31 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +function spawn(NPC) + SetPlayerProximityFunction(NPC, 10, "InRange", "LeaveRange") +end + +function respawn(NPC) + spawn(NPC) +end + +function InRange(NPC, Spawn) +end + +function LeaveRange(NPC, Spawn) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_2_1007.mp3", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Let us begin.", "dlg_4_1") + AddConversationOption(conversation, "I will return later.") + StartConversation(conversation, NPC, Spawn, "I am here to explain something very important: how your Spells, Combat Arts, and Abilities work, as well as how to improve them.") + if convo==9 then + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_3_1007.mp3", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Let us begin.", "dlg_9_1") + AddConversationOption(conversation, "I will return later.") + StartConversation(conversation, NPC, Spawn, "I am here to explain something very important: how your Spells, Combat Arts, and Abilities work, as well as how to improve them.") + end + +end + +function dlg_4_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Tell me about Spells.", "dlg_4_2") + AddConversationOption(conversation, "Tell me about Combat Arts.") + AddConversationOption(conversation, "Tell me about Abilities.") + AddConversationOption(conversation, "Where do I find my Spells, Combat Arts, and Abilities?") + AddConversationOption(conversation, "How do I obtain and improve my Spells and Combat Arts?") + AddConversationOption(conversation, "I will return for instruction later.") + StartConversation(conversation, NPC, Spawn, "I am here to answer your questions. What can I help you with?") +end + +function dlg_4_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Who uses Spells?", "dlg_4_3") + AddConversationOption(conversation, "I will return for instruction later.") + StartConversation(conversation, NPC, Spawn, "A Spell is a magical ability, and spells have a variety of uses. Some allow you to damage an enemy, while others might provide benefits to yourself or an ally. You can hold your mouse pointer over a Spell's icon to see a description of what it does, or right-click on it and select 'Examine.'") +end + +function dlg_4_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "I have more questions.", "dlg_4_4") + AddConversationOption(conversation, "I will return for instruction later.") + StartConversation(conversation, NPC, Spawn, "Mages, priests, paladins, shadowknights, troubadors, and dirges all cast Spells. Each class has a list of Spells that's unique. While other classes may have similar Spells, no one has capabilities exactly like that of another class. Also, certain magical items may be imbued with Spell effects that can be cast or that activate on their own.") +end + +function dlg_4_4(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Tell me about Spells.", "dlg_4_5") + AddConversationOption(conversation, "Tell me about Combat Arts.") + AddConversationOption(conversation, "Tell me about Abilities.") + AddConversationOption(conversation, "Where do I find my Spells, Combat Arts, and Abilities?") + AddConversationOption(conversation, "How do I obtain and improve my Spells and Combat Arts?") + AddConversationOption(conversation, "I will return for instruction later.") + StartConversation(conversation, NPC, Spawn, "I am here to answer your questions. What can I help you with?") +end + +function dlg_4_5(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Who uses Combat Arts?") + AddConversationOption(conversation, "I will return for instruction later.", "dlg_4_6") + StartConversation(conversation, NPC, Spawn, "Combat Arts are a lot like Spells, but they usually take less time to cast and cannot be interrupted. As their name implies, many Combat Arts focus on some aspect of battle.") +end + +function dlg_4_6(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "I have more questions.", "dlg_4_7") + AddConversationOption(conversation, "I will return for instruction later.") + StartConversation(conversation, NPC, Spawn, "All fighters and scouts use Combat Arts. Each of these classes has unique Combat Arts that help distinguish them from other classes. Combat Arts have names and effects that fit the class that uses them.") +end + +function dlg_4_7(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Tell me about Spells.", "dlg_4_8") + AddConversationOption(conversation, "Tell me about Combat Arts.") + AddConversationOption(conversation, "Tell me about Abilities.") + AddConversationOption(conversation, "Where do I find my Spells, Combat Arts, and Abilities?") + AddConversationOption(conversation, "How do I obtain and improve my Spells and Combat Arts?") + AddConversationOption(conversation, "I will return for instruction later.") + StartConversation(conversation, NPC, Spawn, "I am here to answer your questions. What can I help you with?") +end + +function dlg_4_8(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "How are Abilities different from Spells and Combat Arts?") + AddConversationOption(conversation, "I will return for instruction later.") + StartConversation(conversation, NPC, Spawn, "Abilities are general things your character can do, along with certain capabilities specific to your race. Some of your Abilities are extremely useful, such as Sprint, which allows you to run very fast for a short period of time. You can also Call for Help when you're in danger, or launch a Ranged Attack if you have a ranged weapon and, of course, ammo.") +end + +function dlg_4_9(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "I have more questions.", "dlg_4_10") + AddConversationOption(conversation, "I will return for instruction later.") + StartConversation(conversation, NPC, Spawn, "Unlike Spells and Combat Arts, Abilities cannot be upgraded. Most of your Abilities are received when you first begin your adventures in Norrath, although certain new ones can be granted as you become more experienced.") +end + +function dlg_4_10(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Tell me about Spells.", "dlg_4_11") + AddConversationOption(conversation, "Tell me about Combat Arts.") + AddConversationOption(conversation, "Tell me about Abilities.") + AddConversationOption(conversation, "Where do I find my Spells, Combat Arts, and Abilities?") + AddConversationOption(conversation, "How do I obtain and improve my Spells and Combat Arts?") + AddConversationOption(conversation, "I will return for instruction later.") + StartConversation(conversation, NPC, Spawn, "I am here to answer your questions. What can I help you with?") +end + +function dlg_4_11(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "How do I use my Spells, Combat Arts, and Abilities?") + AddConversationOption(conversation, "I will return for instruction later.") + StartConversation(conversation, NPC, Spawn, "All your Spells and Combat Arts, as well as other Abilities, are found in your Knowledge Book. Press the K key to open it at any time, and click the name of the tab you wish to view: Abilities, Spells, or Combat Arts.") +end + +function dlg_4_12(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "I have more questions.", "dlg_4_13") + AddConversationOption(conversation, "I will return for instruction later.") + StartConversation(conversation, NPC, Spawn, "To use a Spell, Combat Art, or Ability, drag its icon from your Knowledge Book onto your hotbar. Some have already been placed there for you. To use one, simply click its icon on your hotbar or press the key assigned to it. You can open additional hotbars by right-clicking on a hotbar and selecting 'Open New Hotbar.'") +end + +function dlg_4_13(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Tell me about Spells.", "dlg_4_14") + AddConversationOption(conversation, "Tell me about Combat Arts.") + AddConversationOption(conversation, "Tell me about Abilities.") + AddConversationOption(conversation, "Where do I find my Spells, Combat Arts, and Abilities?") + AddConversationOption(conversation, "How do I obtain and improve my Spells and Combat Arts?") + AddConversationOption(conversation, "I will return for instruction later.") + StartConversation(conversation, NPC, Spawn, "I am here to answer your questions. What can I help you with?") +end + +function dlg_4_14(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "How can I judge the effectiveness of my Spells and Combat Arts?") + AddConversationOption(conversation, "I will return for further instruction later.") + StartConversation(conversation, NPC, Spawn, "Most of your Spells or Combat Arts are given to you as you advance in levels from 1 to 50 and will be automatically scribed in your Knowledge Book. Certain special Spells or Combat Arts can be obtained by doing quests. Once you are level 51 and higher, you must find new ways to purchase or obtain your new Spells and Combat Arts.") +end + +function dlg_4_15(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "How can I improve my Spells and Combat Arts?", "dlg_4_16") + AddConversationOption(conversation, "I will return for further instruction later.") + StartConversation(conversation, NPC, Spawn, "There are three main ranks of Spells and Combat Arts: Apprentice, Adept, and Master. Within each rank are up to four tiers of quality. Spells and Combat Arts that are automatically granted to you are usually given at the Apprentice I rank. You should always try to have the highest rank of your Spells and Combat Arts, because they gain effectiveness as you improve them.") +end + +function dlg_4_16(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "What about other ranks of Spells and Arts?", "dlg_4_17") + AddConversationOption(conversation, "I will return later.") + StartConversation(conversation, NPC, Spawn, "You can buy Apprentice II versions of your Spells or Combat Arts. You just purchase them from the appropriate merchant.") +end + +function dlg_4_17(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Are there other ways to improve my Spells and Combat Arts?", "dlg_4_18") + AddConversationOption(conversation, "I will return later.") + StartConversation(conversation, NPC, Spawn, "You will also find more potent ranks of spells and arts as you defeat opponents in battle. Many enemies will carry Adept I versions of Spells and Combat Arts, while conquering some extremely powerful foes may result in the extremely rare Master I versions.") +end + +function dlg_4_18(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Are all my Spells and Combat Arts unique?", "dlg_4_19") + AddConversationOption(conversation, "I will return for further instruction later.") + StartConversation(conversation, NPC, Spawn, "In addition, certain crafters can make upgrades to your Spells and Combat Arts using harvested components. They can create Apprentice IV quality spells, as well as valuable Adept III scrolls using rare components. Buying from or trading with other players is an excellent way to upgrade your Spells and Combat Arts.") +end + +function dlg_4_19(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "How can I keep all these Spells and Arts straight in my Knowledge Book?", "dlg_4_20") + AddConversationOption(conversation, "I will return for further instruction later.") + StartConversation(conversation, NPC, Spawn, "As you advance in level, you will obtain many completely new abilities as well as more effective versions of Spells or Combat Arts you have already learned. The names and icons of these upgrades are often quite similar, but the newer versions are more effective. Again, you will want to obtain the highest rank of these new abilities that you can.") +end + +function dlg_4_20(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "I have more questions.", "dlg_4_21") + AddConversationOption(conversation, "I will return for further instruction later.") + StartConversation(conversation, NPC, Spawn, "Your Spells and Combat Arts can easily be organized according to your individual, personal taste. Just open your Knowledge Book and click the 'Sort' button in the upper right corner. This allows you to organize your Spells and Arts for easy access to the abilities that you wish to use.") +end + +function dlg_4_21(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Tell me about Spells.", "dlg_4_22") + AddConversationOption(conversation, "Tell me about Combat Arts.") + AddConversationOption(conversation, "Tell me about Abilities.") + AddConversationOption(conversation, "Where do I find my Spells, Combat Arts, and Abilities?") + AddConversationOption(conversation, "How do I obtain and improve my Spells and Combat Arts?") + AddConversationOption(conversation, "I will return for instruction later.") + StartConversation(conversation, NPC, Spawn, "I am here to answer your questions. What can I help you with?") +end + +function dlg_9_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Tell me about Spells.", "dlg_9_2") + AddConversationOption(conversation, "Tell me about Combat Arts.") + AddConversationOption(conversation, "Tell me about Abilities.") + AddConversationOption(conversation, "Where do I find my Spells, Combat Arts, and Abilities?") + AddConversationOption(conversation, "How do I obtain and improve my Spells and Combat Arts?") + AddConversationOption(conversation, "I will return for instruction later.") + StartConversation(conversation, NPC, Spawn, "I am here to answer your questions. What can I help you with?") +end + +function dlg_9_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Who uses Spells?", "dlg_9_3") + AddConversationOption(conversation, "I will return for instruction later.") + StartConversation(conversation, NPC, Spawn, "A Spell is a magical ability, and spells have a variety of uses. Some allow you to damage an enemy, while others might provide benefits to yourself or an ally. You can hold your mouse pointer over a Spell's icon to see a description of what it does, or right-click on it and select 'Examine.'") +end + +function dlg_9_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "I have more questions.", "dlg_9_4") + AddConversationOption(conversation, "I will return for instruction later.") + StartConversation(conversation, NPC, Spawn, "Mages, priests, paladins, shadowknights, troubadors, and dirges all cast Spells. Each class has a list of Spells that's unique. While other classes may have similar Spells, no one has capabilities exactly like that of another class. Also, certain magical items may be imbued with Spell effects that can be cast or that activate on their own.") +end + +function dlg_9_4(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Tell me about Spells.", "dlg_9_5") + AddConversationOption(conversation, "Tell me about Combat Arts.") + AddConversationOption(conversation, "Tell me about Abilities.") + AddConversationOption(conversation, "Where do I find my Spells, Combat Arts, and Abilities?") + AddConversationOption(conversation, "How do I obtain and improve my Spells and Combat Arts?") + AddConversationOption(conversation, "I will return for instruction later.") + StartConversation(conversation, NPC, Spawn, "I am here to answer your questions. What can I help you with?") +end + +function dlg_9_5(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Who uses Combat Arts?") + AddConversationOption(conversation, "I will return for instruction later.", "dlg_9_6") + StartConversation(conversation, NPC, Spawn, "Combat Arts are a lot like Spells, but they usually take less time to cast and cannot be interrupted. As their name implies, many Combat Arts focus on some aspect of battle.") +end + +function dlg_9_6(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "I have more questions.", "dlg_9_7") + AddConversationOption(conversation, "I will return for instruction later.") + StartConversation(conversation, NPC, Spawn, "All fighters and scouts use Combat Arts. Each of these classes has unique Combat Arts that help distinguish them from other classes. Combat Arts have names and effects that fit the class that uses them.") +end + +function dlg_9_7(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Tell me about Spells.", "dlg_9_8") + AddConversationOption(conversation, "Tell me about Combat Arts.") + AddConversationOption(conversation, "Tell me about Abilities.") + AddConversationOption(conversation, "Where do I find my Spells, Combat Arts, and Abilities?") + AddConversationOption(conversation, "How do I obtain and improve my Spells and Combat Arts?") + AddConversationOption(conversation, "I will return for instruction later.") + StartConversation(conversation, NPC, Spawn, "I am here to answer your questions. What can I help you with?") +end + +function dlg_9_8(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "How are Abilities different from Spells and Combat Arts?") + AddConversationOption(conversation, "I will return for instruction later.") + StartConversation(conversation, NPC, Spawn, "Abilities are general things your character can do, along with certain capabilities specific to your race. Some of your Abilities are extremely useful, such as Sprint, which allows you to run very fast for a short period of time. You can also Call for Help when you're in danger, or launch a Ranged Attack if you have a ranged weapon and, of course, ammo.") +end + +function dlg_9_9(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "I have more questions.", "dlg_9_10") + AddConversationOption(conversation, "I will return for instruction later.") + StartConversation(conversation, NPC, Spawn, "Unlike Spells and Combat Arts, Abilities cannot be upgraded. Most of your Abilities are received when you first begin your adventures in Norrath, although certain new ones can be granted as you become more experienced.") +end + +function dlg_9_10(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Tell me about Spells.", "dlg_9_11") + AddConversationOption(conversation, "Tell me about Combat Arts.") + AddConversationOption(conversation, "Tell me about Abilities.") + AddConversationOption(conversation, "Where do I find my Spells, Combat Arts, and Abilities?") + AddConversationOption(conversation, "How do I obtain and improve my Spells and Combat Arts?") + AddConversationOption(conversation, "I will return for instruction later.") + StartConversation(conversation, NPC, Spawn, "I am here to answer your questions. What can I help you with?") +end + +function dlg_9_11(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "How do I use my Spells, Combat Arts, and Abilities?") + AddConversationOption(conversation, "I will return for instruction later.") + StartConversation(conversation, NPC, Spawn, "All your Spells and Combat Arts, as well as other Abilities, are found in your Knowledge Book. Press the K key to open it at any time, and click the name of the tab you wish to view: Abilities, Spells, or Combat Arts.") +end + +function dlg_9_12(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "I have more questions.", "dlg_9_13") + AddConversationOption(conversation, "I will return for instruction later.") + StartConversation(conversation, NPC, Spawn, "To use a Spell, Combat Art, or Ability, drag its icon from your Knowledge Book onto your hotbar. Some have already been placed there for you. To use one, simply click its icon on your hotbar or press the key assigned to it. You can open additional hotbars by right-clicking on a hotbar and selecting 'Open New Hotbar.'") +end + +function dlg_9_13(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Tell me about Spells.", "dlg_9_14") + AddConversationOption(conversation, "Tell me about Combat Arts.") + AddConversationOption(conversation, "Tell me about Abilities.") + AddConversationOption(conversation, "Where do I find my Spells, Combat Arts, and Abilities?") + AddConversationOption(conversation, "How do I obtain and improve my Spells and Combat Arts?") + AddConversationOption(conversation, "I will return for instruction later.") + StartConversation(conversation, NPC, Spawn, "I am here to answer your questions. What can I help you with?") +end + +function dlg_9_14(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "How can I judge the effectiveness of my Spells and Combat Arts?") + AddConversationOption(conversation, "I will return for further instruction later.") + StartConversation(conversation, NPC, Spawn, "Most of your Spells or Combat Arts are given to you as you advance in levels from 1 to 50 and will be automatically scribed in your Knowledge Book. Certain special Spells or Combat Arts can be obtained by doing quests. Once you are level 51 and higher, you must find new ways to purchase or obtain your new Spells and Combat Arts.") +end + +function dlg_9_15(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "How can I improve my Spells and Combat Arts?", "dlg_9_16") + AddConversationOption(conversation, "I will return for further instruction later.") + StartConversation(conversation, NPC, Spawn, "There are three main ranks of Spells and Combat Arts: Apprentice, Adept, and Master. Within each rank are up to four tiers of quality. Spells and Combat Arts that are automatically granted to you are usually given at the Apprentice I rank. You should always try to have the highest rank of your Spells and Combat Arts, because they gain effectiveness as you improve them.") +end + +function dlg_9_16(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "What about other ranks of Spells and Arts?", "dlg_9_17") + AddConversationOption(conversation, "I will return later.") + StartConversation(conversation, NPC, Spawn, "You can buy Apprentice II versions of your Spells or Combat Arts. You just purchase them from the appropriate merchant.") +end + +function dlg_9_17(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Are there other ways to improve my Spells and Combat Arts?", "dlg_9_18") + AddConversationOption(conversation, "I will return later.") + StartConversation(conversation, NPC, Spawn, "You will also find more potent ranks of spells and arts as you defeat opponents in battle. Many enemies will carry Adept I versions of Spells and Combat Arts, while conquering some extremely powerful foes may result in the extremely rare Master I versions.") +end + +function dlg_9_18(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Are all my Spells and Combat Arts unique?", "dlg_9_19") + AddConversationOption(conversation, "I will return for further instruction later.") + StartConversation(conversation, NPC, Spawn, "In addition, certain crafters can make upgrades to your Spells and Combat Arts using harvested components. They can create Apprentice IV quality spells, as well as valuable Adept III scrolls using rare components. Buying from or trading with other players is an excellent way to upgrade your Spells and Combat Arts.") +end + +function dlg_9_19(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "How can I keep all these Spells and Arts straight in my Knowledge Book?", "dlg_9_20") + AddConversationOption(conversation, "I will return for further instruction later.") + StartConversation(conversation, NPC, Spawn, "As you advance in level, you will obtain many completely new abilities as well as more effective versions of Spells or Combat Arts you have already learned. The names and icons of these upgrades are often quite similar, but the newer versions are more effective. Again, you will want to obtain the highest rank of these new abilities that you can.") +end + +function dlg_9_20(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "I have more questions.", "dlg_9_21") + AddConversationOption(conversation, "I will return for further instruction later.") + StartConversation(conversation, NPC, Spawn, "Your Spells and Combat Arts can easily be organized according to your individual, personal taste. Just open your Knowledge Book and click the 'Sort' button in the upper right corner. This allows you to organize your Spells and Arts for easy access to the abilities that you wish to use.") +end + +function dlg_9_21(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Tell me about Spells.", "dlg_9_22") + AddConversationOption(conversation, "Tell me about Combat Arts.") + AddConversationOption(conversation, "Tell me about Abilities.") + AddConversationOption(conversation, "Where do I find my Spells, Combat Arts, and Abilities?") + AddConversationOption(conversation, "How do I obtain and improve my Spells and Combat Arts?") + AddConversationOption(conversation, "I will return for instruction later.") + StartConversation(conversation, NPC, Spawn, "I am here to answer your questions. What can I help you with?") +end + +function dlg_9_22(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "How can I judge the effectiveness of my Spells and Combat Arts?") + AddConversationOption(conversation, "I will return for further instruction later.") + StartConversation(conversation, NPC, Spawn, "Most of your Spells or Combat Arts are given to you as you advance in levels from 1 to 50 and will be automatically scribed in your Knowledge Book. Certain special Spells or Combat Arts can be obtained by doing quests. Once you are level 51 and higher, you must find new ways to purchase or obtain your new Spells and Combat Arts.") +end + +function dlg_9_23(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "How can I improve my Spells and Combat Arts?", "dlg_9_24") + AddConversationOption(conversation, "I will return for further instruction later.") + StartConversation(conversation, NPC, Spawn, "There are three main ranks of Spells and Combat Arts: Apprentice, Adept, and Master. Within each rank are up to four tiers of quality. Spells and Combat Arts that are automatically granted to you are usually given at the Apprentice I rank. You should always try to have the highest rank of your Spells and Combat Arts, because they gain effectiveness as you improve them.") +end + +function dlg_9_24(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "What about other ranks of Spells and Arts?", "dlg_9_25") + AddConversationOption(conversation, "I will return later.") + StartConversation(conversation, NPC, Spawn, "You can buy Apprentice II versions of your Spells or Combat Arts. You just purchase them from the appropriate merchant.") +end + +function dlg_9_25(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Are there other ways to improve my Spells and Combat Arts?", "dlg_9_26") + AddConversationOption(conversation, "I will return later.") + StartConversation(conversation, NPC, Spawn, "You will also find more potent ranks of spells and arts as you defeat opponents in battle. Many enemies will carry Adept I versions of Spells and Combat Arts, while conquering some extremely powerful foes may result in the extremely rare Master I versions.") +end + +function dlg_9_26(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Are all my Spells and Combat Arts unique?", "dlg_9_27") + AddConversationOption(conversation, "I will return for further instruction later.") + StartConversation(conversation, NPC, Spawn, "In addition, certain crafters can make upgrades to your Spells and Combat Arts using harvested components. They can create Apprentice IV quality spells, as well as valuable Adept III scrolls using rare components. Buying from or trading with other players is an excellent way to upgrade your Spells and Combat Arts.") +end + +function dlg_9_27(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "How can I keep all these Spells and Arts straight in my Knowledge Book?", "dlg_9_28") + AddConversationOption(conversation, "I will return for further instruction later.") + StartConversation(conversation, NPC, Spawn, "As you advance in level, you will obtain many completely new abilities as well as more effective versions of Spells or Combat Arts you have already learned. The names and icons of these upgrades are often quite similar, but the newer versions are more effective. Again, you will want to obtain the highest rank of these new abilities that you can.") +end + +function dlg_9_28(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "I have more questions.", "dlg_9_29") + AddConversationOption(conversation, "I will return for further instruction later.") + StartConversation(conversation, NPC, Spawn, "Your Spells and Combat Arts can easily be organized according to your individual, personal taste. Just open your Knowledge Book and click the 'Sort' button in the upper right corner. This allows you to organize your Spells and Arts for easy access to the abilities that you wish to use.") +end + +function dlg_9_29(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Tell me about Spells.", "dlg_9_30") + AddConversationOption(conversation, "Tell me about Combat Arts.") + AddConversationOption(conversation, "Tell me about Abilities.") + AddConversationOption(conversation, "Where do I find my Spells, Combat Arts, and Abilities?") + AddConversationOption(conversation, "How do I obtain and improve my Spells and Combat Arts?") + AddConversationOption(conversation, "I will return for instruction later.") + StartConversation(conversation, NPC, Spawn, "I am here to answer your questions. What can I help you with?") +end + diff --git a/server/SpawnScripts/Darklight/TrainerZaktarDZheVirae.lua b/server/SpawnScripts/Darklight/TrainerZaktarDZheVirae.lua new file mode 100644 index 000000000..4120c52a7 --- /dev/null +++ b/server/SpawnScripts/Darklight/TrainerZaktarDZheVirae.lua @@ -0,0 +1,122 @@ +--[[ + Script Name : SpawnScripts/FrostfangSea/TrainerHawkDunlop.lua + Script Purpose : Trainer Hawk Dunlop + Script Author : Foof + Script Date : 2013.5.15 + Script Notes : +--]] + +local HarvestTutorial = 11 + +function spawn(NPC) + SetPlayerProximityFunction(NPC, 10, "InRange", "LeaveRange") + ProvidesQuest(NPC, HarvestTutorial) +end + +function respawn(NPC) + spawn(NPC) +end + +function InRange(NPC, Spawn) +end + +function LeaveRange(NPC, Spawn) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + if GetQuestStep(Spawn, HarvestTutorial) == 8 then + SetStepComplete(Spawn, HarvestTutorial, 8) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_3_1004.mp3", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Thank you.") + StartConversation(conversation, NPC, Spawn, "Excellent work learning about harvesting! As a reward, allow me to offer you this box for storing harvested items. It's quite heavy, so I suggest you put it in your bank rather than carrying it, but it has plenty of storage room for harvests.") + else + BaseChat(NPC, Spawn) + end +end + +function collections_chat_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "What happens next?", "collections_chat_2") + StartConversation(conversation, NPC, Spawn, "Collectibles are seen as a glow rising from the ground. If you're close enough, you'll notice a question mark above it. Double-click or right-click the glow and select 'harvest.' The item you gather will go into your inventory. You can examine this item in your inventory.") +end + +function collections_chat_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "How do I complete the collection?", "collections_chat_3") + StartConversation(conversation, NPC, Spawn, "Your quest journal will open up automatically to the Collections tab. Use the Add button to add that item to a collection. As you travel through Norrath, you'll find different collectibles in different areas of the world. Some items can be part of more than one collection.") +end + +function collections_chat_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "I'd like to learn about harvesting and gathering now.", "harvests_chat_1") + AddConversationOption(conversation, "Thanks for the information.") + StartConversation(conversation, NPC, Spawn, "Continue to gather and examine all the items you find until all the icons of that collection are highlighted in your quest journal. Then you'll be able to turn the completed collection in to a collector who will reward you with some experience. If you already have a collectible in all collections that call for it, you can sell it to a merchant or trade it to another player.") +end + +function harvests_chat_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "What are harvestables used for?", "harvests_chat_2") + StartConversation(conversation, NPC, Spawn, "Harvestables are natural resources that can be found around most parts of the outdoors. You have harvesting skills that allow you collect them. These can be seen by opening your Character window (C), clicking on the Skills tab, and selecting the General skills. Rocks increase mining, logs increase foresting, dens increase trapping, fish increase fishing, and shrubs increase gathering.") +end + +function harvests_chat_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Why do I need to increase my harvesting skills?", "OfferHarvesttutorial") + StartConversation(conversation, NPC, Spawn, "The items found through harvesting are the basic building blocks of tradeskills. They cannot be sold to vendors, but they can be traded or sold to other players who need them for their respective tradeskill professions. Some components that can be found through harvesting are very rare and can be worth quite a bit of money to tradeskillers.") +end + +function harvests_chat_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "I'd like to learn about collections now.", "collections_chat_1") + AddConversationOption(conversation, "Thanks for the information.") + StartConversation(conversation, NPC, Spawn, "The skill required to harvest in a given area increases along with the difficulty of the area. If you find that you are unable to harvest in an area you should return to a less difficult area and practice.") +end + +function elemental_chat_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Oh... Well you were talking about collections?", "BaseChat") + StartConversation(conversation, NPC, Spawn, "It is bothersome, but I have seen worse. That is why I love collections so much. It helps me to forget...") +end + +function BaseChat(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_2_1004.mp3", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "I'd like to learn about collections.", "collections_chat_1") + AddConversationOption(conversation, "I'd like to learn about harvesting.", "harvests_chat_1") + AddConversationOption(conversation, "Aren't you worried about the elemental attacks?", "elemental_chat_1") + AddConversationOption(conversation, "I've no time to chat right now.") + StartConversation(conversation, NPC, Spawn, "I am able to answer any questions you have about collections or harvesting.") +end + +function OfferHarvesttutorial(NPC, Spawn) + if HasCompletedQuest(Spawn, HarvestTutorial) == false and HasQuest(Spawn, HarvestTutorial) == false then + OfferQuest(NPC, Spawn, HarvestTutorial) + end + harvests_chat_3(NPC, Spawn) +end \ No newline at end of file diff --git a/server/SpawnScripts/Darklight/UdiyitasXKilrae.lua b/server/SpawnScripts/Darklight/UdiyitasXKilrae.lua new file mode 100644 index 000000000..d63ad5dc4 --- /dev/null +++ b/server/SpawnScripts/Darklight/UdiyitasXKilrae.lua @@ -0,0 +1,92 @@ +--[[ + Script Name : SpawnScripts/DarklightWood/UdiyitasXKilrae.lua + Script Purpose : Udiyitas X'Kilrae + Script Author : Cynnar + Script Date : 2015.07.05 + Script Notes : Beginning dialog has "wince" emote being used but is not correct. + : Closest I found so far. +--]] + +local ASolidifiedFront = 120 +local ElementalEncroachment = 121 + +function spawn(NPC) + ProvidesQuest(NPC, ElementalEncroachment) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + if HasQuest(Spawn, ASolidifiedFront) and not QuestStepIsComplete(Spawn, ASolidifiedFront, 1) then + SetStepComplete(Spawn, ASolidifiedFront, 1) + end + + if not HasQuest(Spawn, ASolidifiedFront) and not HasCompletedQuest(Spawn, ASolidifiedFront) then + StartConversation(conversation, NPC, Spawn, "The Sablevein must be stopped before they burn down all of Hate's Envy!") + elseif HasQuest(Spawn, ElementalEncroachment) and GetQuestStep(Spawn, ElementalEncroachment) == 1 then + PlayFlavor(NPC, "udiyitas_x_kilrae/darklight_wood/hates_envy/udiyitas_revamp/udiyitas004.mp3", "", "", 827914916, 961160559, Spawn) + AddConversationOption(conversation, "I'm still hunting them.", "dlg_1_1") + StartConversation(conversation, NPC, Spawn, "Were you successful in striking down the invaders?") + elseif HasQuest(Spawn, ElementalEncroachment) and GetQuestStep(Spawn, ElementalEncroachment) == 2 then + PlayFlavor(NPC, "udiyitas_x_kilrae/darklight_wood/hates_envy/udiyitas_revamp/udiyitas004.mp3", "", "", 827914916, 961160559, Spawn) + AddConversationOption(conversation, "I slew a great number of the Sablevein crumblers!", "dlg_2_1") + StartConversation(conversation, NPC, Spawn, "Were you successful in striking down the invaders?") + elseif HasCompletedQuest(Spawn, ElementalEncroachment) then + PlayFlavor(Spawn, "", "", "wave", 0, 0, Player) + PlayFlavor(NPC, "udiyitas_x_kilrae/darklight_wood/hates_envy/udiyitas_revamp/udiyitas005.mp3", "", "", 3475491960, 633382350, Spawn) + AddConversationOption(conversation, "Good-bye, Udiyitas.") + StartConversation(conversation, NPC, Spawn, "Excellent work, " .. GetName(Spawn) .. ". I see now that fear is not an emotion you're much familiar with. Neriak will prosper greatly so long as you defend her banner. Now then, enough idle discourse. The Sablevein continue to strike. You must speak with Pellandra if you have not already.") + else + PlayFlavor(NPC, "udiyitas_x_kilrae/darklight_wood/hates_envy/udiyitas_revamp/udiyitas001.mp3", "", "wince", 1460950468, 2447529332, Spawn) + AddConversationOption(conversation, "Yes, point me in the face of danger.", "dlg_0_1") + AddConversationOption(conversation, "How can I help?", "dlg_0_1") + StartConversation(conversation, NPC, Spawn, "It's about time Verex sent some help! You are here to assist with the Sablevein, right?") + end + + +end + +function dlg_0_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "udiyitas_x_kilrae/darklight_wood/hates_envy/udiyitas_revamp/udiyitas002.mp3", "", "smirk", 3581344743, 4242686519, Spawn) + AddConversationOption(conversation, "Consider them no more!", "QuestOffer") + AddConversationOption(conversation, "I do not feel ready to battle.", "PlayerEmote") + StartConversation(conversation, NPC, Spawn, "This outpost is about to be overrun if we don't act fast! If you really do think you can assist us, charge out into the fray and slay a number of the advancing Sablevein crumblers.") +end + +function PlayerEmote(NPC, Spawn) + PlayFlavor(Spawn, "", "", "no", 0, 0, Player) +end + +function dlg_1_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "udiyitas_x_kilrae/darklight_wood/hates_envy/udiyitas_revamp/udiyitas006.mp3", "", "", 2328635398, 829982468, Spawn) + AddConversationOption(conversation, "I wiill return victoriouns!") + StartConversation(conversation, NPC, Spawn, "Do not return until you have slain a great number of the Sablevein elementals!") +end + +function dlg_2_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + SetStepComplete(Spawn, ElementalEncroachment, 2) + + PlayFlavor(Spawn, "", "", "wave", 0, 0, Player) + PlayFlavor(NPC, "udiyitas_x_kilrae/darklight_wood/hates_envy/udiyitas_revamp/udiyitas005.mp3", "", "", 3475491960, 633382350, Spawn) + SetStepComplete(Spawn, ElementalEncroachment, 2) + AddConversationOption(conversation, "Good-bye, Udiyitas.") + StartConversation(conversation, NPC, Spawn, "Excellent work, " .. GetName(Spawn) .. ". I see now that fear is not an emotion you're much familiar with. Neriak will prosper greatly so long as you defend her banner. Now then, enough idle discourse. The Sablevein continue to strike. You must speak with Pellandra if you have not already.") +end + +function QuestOffer(NPC, Spawn) + PlayFlavor(Spawn, "", "", "brandish", 0, 0, Player) + OfferQuest(NPC, Spawn, ElementalEncroachment) +end diff --git a/server/SpawnScripts/Darklight/VerexNZa.lua b/server/SpawnScripts/Darklight/VerexNZa.lua new file mode 100644 index 000000000..9fc802281 --- /dev/null +++ b/server/SpawnScripts/Darklight/VerexNZa.lua @@ -0,0 +1,109 @@ +--[[ + Script Name : SpawnScripts/DarklightWood/VerexNZa.lua + Script Purpose : Verex N'Za + Script Author : Cynnar + Script Date : 2015.07.01 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +local ASolidifiedFront = 120 +local AStrangeFind = 187 + +function spawn(NPC) + SetPlayerProximityFunction(NPC, 10, "InRange") + ProvidesQuest(NPC, ASolidifiedFront) +end + +function respawn(NPC) + spawn(NPC) +end + +function InRange(NPC, Spawn) + if not HasCompletedQuest(Spawn, ASolidifiedFront) then + PlayFlavor(NPC, "", "You there, come here at once! We haven't a second to spare!", "beckon", 0, 0, Spawn) + end +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + if not HasCompletedQuest(Spawn, ASolidifiedFront) then + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_3_1048.mp3", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "How am I to do that?", "dlg_0_1") + AddConversationOption(conversation, "Wait, where is this place?", "dlg_1_1") + StartConversation(conversation, NPC, Spawn, "Excellent, you've finally arrived. So, you're one of Cristanos' chosen ones, hmm? The Queen must see some great potential in you, " .. GetName(Spawn) .. ". Let's not waste any more time and see what you're made of.") + end + if HasQuest(Spawn, AStrangeFind) then + Say(NPC, "Strange Find") + -- + end +end + +function dlg_0_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "What is it you would have me do?", "dlg_0_2") + StartConversation(conversation, NPC, Spawn, "Hate's Envy has fallen under attack by an army of Sablevein elementals! We need your help in stopping them before they burn down the entire town! ") +end + +function dlg_0_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "I will speak with them at once!", "QuestOffer") + AddConversationOption(conversation, "I'll decide who I speak to!", "PlayerEmote") + StartConversation(conversation, NPC, Spawn, "The Sablevein elementals have collapsed a section of the southern wall and now threaten to swarm inside the town. I need you to meet up with Udiyitas and Pellandra, two of the guards tasked with repelling this attack. Go, speak to them at once!") +end + +function PlayerEmote(NPC, Spawn) + PlayFlavor(Spawn, "", "", "brandish", 0, 0, Player) +end + +function QuestOffer(NPC, Spawn) + if not HasQuest(Spawn, ASolidifiedFront) then + OfferQuest(NPC, Spawn, ASolidifiedFront) + else + dlg_0_4(NPC, Spawn) + end +end + +function dlg_0_4(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + StartConversation(conversation, NPC, Spawn, "May Innoruuk guide your blade, young one!") +end + +function dlg_1_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "What do you mean?", "dlg_1_2") + StartConversation(conversation, NPC, Spawn, "This is Hate's Envy Outpost; the pride of Sselnyl Do'Zyth herself. She's managed to work out a nice deal with the elite of Neriak and runs Hate's Envy as an entity apart from the city itself.") +end + +function dlg_1_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "So you aren't tied to Neriak?", "dlg_1_3") + StartConversation(conversation, NPC, Spawn, "Hate's Envy is a bit more accepting of outsiders than Neriak. We need all the help we can get, as you may have noticed. The attacking elementals are proof enough of that. But, we like it this way.") +end + +function dlg_1_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "Hate's Envy was built by the Thexians?", "dlg_1_4") + StartConversation(conversation, NPC, Spawn, "When Neriak was unearthed, the Queen immediately ordered the Dread Guard to claim this Hate's Envy. It was originally built by the Thexians during their search for Neriak. Once it was ours, however, Sselnyl was given control of the outpost's politics. We work closely with the Dread Guard and the Indigo Brotherhood, and our mining operation provides much needed ore to Neriak.") +end + +function dlg_1_4(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "Interesting. What was it you were talking about before?", "dlg_0_1") + StartConversation(conversation, NPC, Spawn, "That's correct. When Lucan and the Thexians barged into Darklight and dug up K'Rais tunnel, the Thexians had already been searching for Neriak. Although Hate's Envy was theirs, we quickly took over once Neriak and Darklight were connected. Part of our pact with Freeport involves one of their ambassadors present at all times--but they don't seem to take much interest in the day to day affairs of Hate's Envy. Sselnyl runs the show, that's the bottom line.") +end \ No newline at end of file diff --git a/server/SpawnScripts/Darklight/VornlinBVytyl.lua b/server/SpawnScripts/Darklight/VornlinBVytyl.lua new file mode 100644 index 000000000..f88cb5259 --- /dev/null +++ b/server/SpawnScripts/Darklight/VornlinBVytyl.lua @@ -0,0 +1,839 @@ +--[[ + Script Name : SpawnScripts/DarklightWood/VornlinBVytyl.lua + Script Purpose : Vornlin B'Vytyl + Script Author : fearfx + Script Date : 2017.01.20 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +local ContinuingAssistance = 154 + +function spawn(NPC) +end + +function respawn(NPC) + spawn(NPC) +end + +function InRange(NPC, Spawn) +end + +function LeaveRange(NPC, Spawn) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + if HasQuest(Spawn, ContinuingAssistance) then + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_1_1052.mp3", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "I have a letter for you from Laexyra Y'Barriath at the T'Vatar Post.", "Quest_ContinuingAssistance") + StartConversation(conversation, NPC, Spawn, "May I help you?") + end +end + +-------------------------------------------------------------------------------- +-- Continuing Assistance +-------------------------------------------------------------------------------- + +function Quest_ContinuingAssistance(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + SetStepComplete(Spawn, ContinuingAssistance, 2) + + AddConversationOption(conversation, "And I suppose I should say you are welcome.", "dlg_11_2") + StartConversation(conversation, NPC, Spawn, "Ah, about time too. I suppose I should say thank you.") +end + +--[[ + + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_3_1052.mp3", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Not yet.", "dlg_0_1") + StartConversation(conversation, NPC, Spawn, "Have you found him yet?") + if convo==2 then + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_2_1052.mp3", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "No, I haven't.", "dlg_2_1") + StartConversation(conversation, NPC, Spawn, "You haven't seen an ugly Teir'Dal named Alakzaer around Wanderlust Fair lately, have you?") + end + + if convo==3 then + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_2_1052.mp3", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "No, I haven't.", "dlg_3_1") + StartConversation(conversation, NPC, Spawn, "You haven't seen an ugly Teir'Dal named Alakzaer around Wanderlust Fair lately, have you?") + end + + if convo==8 then + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_1_1052.mp3", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Yes. He says he'll come down after he gets his bone samples. He was hiding from the drakes up there.", "dlg_8_1") + StartConversation(conversation, NPC, Spawn, "Have you found him yet?") + end + + if convo==9 then + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_3_1052.mp3", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Yes. He says he'll come down after he gets his bone samples. He was hiding from the drakes up there.", "dlg_9_1") + StartConversation(conversation, NPC, Spawn, "Have you found him yet?") + end + + if convo==10 then + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_1_1052.mp3", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Yes. He says he'll come down after he gets his bone samples. He was hiding from the drakes up there.", "dlg_10_1") + StartConversation(conversation, NPC, Spawn, "Have you found him yet?") + end + + if convo==11 then + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_1_1052.mp3", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "I have a letter for you from Laexyra Y'Barriath at the T'Vatar Post.", "dlg_11_1") + StartConversation(conversation, NPC, Spawn, "May I help you?") + end + + if convo==12 then + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_3_1052.mp3", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "No, I haven't.", "dlg_12_1") + StartConversation(conversation, NPC, Spawn, "You haven't seen an ugly Teir'Dal named Alakzaer around Wanderlust Fair lately, have you?") + end + + if convo==13 then + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_1_1052.mp3", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "No, I haven't.", "dlg_13_1") + StartConversation(conversation, NPC, Spawn, "You haven't seen an ugly Teir'Dal named Alakzaer around Wanderlust Fair lately, have you?") + end + + if convo==14 then + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_1_1052.mp3", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Well, when I kill one creature, five shroomlings jump out of its corpse.", "dlg_14_1") + StartConversation(conversation, NPC, Spawn, "Have you destroyed their species yet?") + end + + if convo==15 then + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_3_1052.mp3", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "I brought you a shroomling.", "dlg_15_1") + StartConversation(conversation, NPC, Spawn, "Look at them!") + end + + if convo==16 then + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_3_1052.mp3", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "I brought you a shroomling.", "dlg_16_1") + StartConversation(conversation, NPC, Spawn, "Look at them!") + end + + if convo==17 then + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_3_1052.mp3", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Well, when I kill one creature, five shroomlings jump out of its corpse.", "dlg_17_1") + StartConversation(conversation, NPC, Spawn, "Have you destroyed their species yet?") + end + + if convo==18 then + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_1_1052.mp3", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Well, when I kill one creature, five shroomlings jump out of its corpse.", "dlg_18_1") + StartConversation(conversation, NPC, Spawn, "Have you destroyed their species yet?") + end + + if convo==19 then + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_2_1052.mp3", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Uh, the boarfiend exploded.", "dlg_19_1") + StartConversation(conversation, NPC, Spawn, "Did it work?") + end + + if convo==20 then + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_3_1052.mp3", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "I brought you a shroomling.", "dlg_20_1") + StartConversation(conversation, NPC, Spawn, "Look at them!") + end + + if convo==21 then + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_1_1052.mp3", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "I brought you a shroomling.", "dlg_21_1") + StartConversation(conversation, NPC, Spawn, "Look at them!") + end + + if convo==23 then + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_2_1052.mp3", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Did what work? Madam Victra told me to speak with you about this boarfiend.", "dlg_23_1") + StartConversation(conversation, NPC, Spawn, "Did it work?") + end + + if convo==24 then + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_2_1052.mp3", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Uh, the boarfiend exploded.", "dlg_24_1") + StartConversation(conversation, NPC, Spawn, "Did it work?") + end + + if convo==25 then + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_3_1052.mp3", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Uh, the boarfiend exploded.", "dlg_25_1") + StartConversation(conversation, NPC, Spawn, "Did it work?") + end + + if convo==27 then + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_3_1052.mp3", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Do you still need the Nerian knot-tree leaves?", "dlg_27_1") + StartConversation(conversation, NPC, Spawn, "HAHAHAHA HAH HAH HAH!!! I WIN! I found out how to kill them!!!") + end + + if convo==28 then + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_2_1052.mp3", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Do you still need the Nerian knot-tree leaves?", "dlg_28_1") + StartConversation(conversation, NPC, Spawn, "HAHAHAHA HAH HAH HAH!!! I WIN! I found out how to kill them!!!") + end + + if convo==29 then + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_3_1052.mp3", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Yes, get your sandwich.", "dlg_29_1") + StartConversation(conversation, NPC, Spawn, "How did it go? Can I have my sandwich?") + end + + if convo==38 then + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_1_1052.mp3", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Do you still need the Nerian knot-tree leaves?", "dlg_38_1") + StartConversation(conversation, NPC, Spawn, "HAHAHAHA HAH HAH HAH!!! I WIN! I found out how to kill them!!!") + end + + if convo==39 then + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_1_1052.mp3", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Do you still need the Nerian knot-tree leaves?", "dlg_39_1") + StartConversation(conversation, NPC, Spawn, "HAHAHAHA HAH HAH HAH!!! I WIN! I found out how to kill them!!!") + end + + if convo==51 then + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_2_1052.mp3", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Yes, get your sandwich.", "dlg_51_1") + StartConversation(conversation, NPC, Spawn, "How did it go? Can I have my sandwich?") + end + +end + +function dlg_2_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "All right.", "dlg_2_2") + StartConversation(conversation, NPC, Spawn, "Blast him. When I finally need him he isn't around to be used. Do you think you could help me locate him?") +end + +function dlg_2_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "I'll see if I can find him.", "dlg_2_3") + AddConversationOption(conversation, "I'm sure he'll be back soon.") + StartConversation(conversation, NPC, Spawn, "Great. The last I heard from him he was going up to the Nerian Highlands to study some dragon bones. He said he would be back shortly, but that was... hm... when was that? Well more than a day, I know that. If you could go and find him and let him know that I need him that would be great, thanks.") +end + +function dlg_3_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "All right.", "dlg_3_2") + StartConversation(conversation, NPC, Spawn, "Blast him. When I finally need him he isn't around to be used. Do you think you could help me locate him?") +end + +function dlg_3_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "I'll see if I can find him.", "dlg_3_3") + AddConversationOption(conversation, "I'm sure he'll be back soon.") + StartConversation(conversation, NPC, Spawn, "Great. The last I heard from him he was going up to the Nerian Highlands to study some dragon bones. He said he would be back shortly, but that was... hm... when was that? Well more than a day, I know that. If you could go and find him and let him know that I need him that would be great, thanks.") +end + +function dlg_3_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "I will.", "dlg_3_4") + StartConversation(conversation, NPC, Spawn, "Yes, do that.") +end + +function dlg_8_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Maybe I could help.", "dlg_8_2") + StartConversation(conversation, NPC, Spawn, "Blast him! Blast blastity blasted blastful blasting blast him!!! I needed him.") +end + +function dlg_8_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "You're a scientist?", "dlg_8_3") + StartConversation(conversation, NPC, Spawn, "Perhaps. I made a stupid arrangement with that guard over there, Vicaonar, and now I've got to go kill mushroom creatures in the Nightshadow Bog. I wasn't thinking clearly and I thought the deal sounded sweet, but really he just wants me to do his work for him. So, uh, do you want to do his work for me for him?") +end + +function dlg_8_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Yes, I'll help.", "dlg_8_4") + StartConversation(conversation, NPC, Spawn, "... do you want to help or not?") +end + +function dlg_8_4(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Uh, all of them?", "dlg_8_5") + AddConversationOption(conversation, "Yeah, right... find someone else to do that.") + StartConversation(conversation, NPC, Spawn, "Great! Vicaonar said the job isn't done until all the mushroom creatures in the swamp are dead. So go kill all of them.") +end + +function dlg_9_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "You're a scientist?", "dlg_9_2") + StartConversation(conversation, NPC, Spawn, "Perhaps. I made a stupid arrangement with that guard over there, Vicaonar, and now I've got to go kill mushroom creatures in the Nightshadow Bog. I wasn't thinking clearly and I thought the deal sounded sweet, but really he just wants me to do his work for him. So, uh, do you want to do his work for me for him?") +end + +function dlg_9_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Yes, I'll help.", "dlg_9_3") + StartConversation(conversation, NPC, Spawn, "... do you want to help or not?") +end + +function dlg_9_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Uh, all of them?", "dlg_9_4") + AddConversationOption(conversation, "Yeah, right... find someone else to do that.") + StartConversation(conversation, NPC, Spawn, "Great! Vicaonar said the job isn't done until all the mushroom creatures in the swamp are dead. So go kill all of them.") +end + +function dlg_9_4(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Uh, all of them?", "dlg_9_5") + AddConversationOption(conversation, "Yeah, right... find someone else to do that.") + StartConversation(conversation, NPC, Spawn, "Great! Vicaonar said the job isn't done until all the mushroom creatures in the swamp are dead. So go kill all of them.") +end + +function dlg_9_5(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "All right, I'll return.", "dlg_9_6") + StartConversation(conversation, NPC, Spawn, "Yes, genocide them up something fierce! And hurry, Vicaonar doesn't have to give me that sandwich until the job is done!") +end + +function dlg_10_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Maybe I could help.", "dlg_10_2") + StartConversation(conversation, NPC, Spawn, "Blast him! Blast blastity blasted blastful blasting blast him!!! I needed him.") +end + +function dlg_10_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "You're a scientist?", "dlg_10_3") + StartConversation(conversation, NPC, Spawn, "Perhaps. I made a stupid arrangement with that guard over there, Vicaonar, and now I've got to go kill mushroom creatures in the Nightshadow Bog. I wasn't thinking clearly and I thought the deal sounded sweet, but really he just wants me to do his work for him. So, uh, do you want to do his work for me for him?") +end + +function dlg_10_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Yes, I'll help.", "dlg_10_4") + StartConversation(conversation, NPC, Spawn, "... do you want to help or not?") +end + +function dlg_10_4(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Uh, all of them?", "dlg_10_5") + AddConversationOption(conversation, "Yeah, right... find someone else to do that.") + StartConversation(conversation, NPC, Spawn, "Great! Vicaonar said the job isn't done until all the mushroom creatures in the swamp are dead. So go kill all of them.") +end + +function dlg_10_5(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "All right, I'll return.", "dlg_10_6") + StartConversation(conversation, NPC, Spawn, "Yes, genocide them up something fierce! And hurry, Vicaonar doesn't have to give me that sandwich until the job is done!") +end + +function dlg_11_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "And I suppose I should say you are welcome.", "dlg_11_2") + StartConversation(conversation, NPC, Spawn, "Ah, about time too. I suppose I should say thank you.") +end + +function dlg_12_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "All right.", "dlg_12_2") + StartConversation(conversation, NPC, Spawn, "Hmph! When I finally need him he isn't around to be used. Do you think you could help me locate him?") +end + +function dlg_12_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "I'll see if I can find him.", "dlg_12_3") + AddConversationOption(conversation, "I'm sure he'll be back soon.") + StartConversation(conversation, NPC, Spawn, "Great. The last I heard from him he was going up to the Nerian Highlands to study some dragon bones. He said he would be back shortly, but that was... hm... when was that? Well more than a day, I know that. If you could go and find him and let him know that I need him, that would be great. Thanks.") +end + +function dlg_13_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "All right.", "dlg_13_2") + StartConversation(conversation, NPC, Spawn, "Hmph! When I finally need him he isn't around to be used. Do you think you could help me locate him?") +end + +function dlg_13_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "I'll see if I can find him.", "dlg_13_3") + AddConversationOption(conversation, "I'm sure he'll be back soon.") + StartConversation(conversation, NPC, Spawn, "Great. The last I heard from him he was going up to the Nerian Highlands to study some dragon bones. He said he would be back shortly, but that was... hm... when was that? Well more than a day, I know that. If you could go and find him and let him know that I need him, that would be great. Thanks.") +end + +function dlg_13_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "I will.", "dlg_13_4") + StartConversation(conversation, NPC, Spawn, "Yes, do that.") +end + +function dlg_14_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "All right.", "dlg_14_2") + AddConversationOption(conversation, "I don't think I care to help with this anymore.") + StartConversation(conversation, NPC, Spawn, "Really?! That's ... well that's amazing! I need to see this for myself! Bring me one of the shroomlings!") +end + +function dlg_14_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "We'll see.", "dlg_14_3") + StartConversation(conversation, NPC, Spawn, "How potentially interesting!") +end + +function dlg_15_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Where did they come from?", "dlg_15_2") + StartConversation(conversation, NPC, Spawn, "I already have some.") +end + +function dlg_15_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "So I guess you don't need this shroomling then?", "dlg_15_3") + StartConversation(conversation, NPC, Spawn, "Don't know! Probably from you. I bet you've got microscopic shroomlings all over you right now. How disgusting! Don't stand too close!") +end + +function dlg_15_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Oh?", "dlg_15_4") + StartConversation(conversation, NPC, Spawn, "No, no I don't. I have, however, figured out a way to get my sandwich from Vicaonar.") +end + +function dlg_15_4(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "All right.", "dlg_15_5") + AddConversationOption(conversation, "I tire of this.") + StartConversation(conversation, NPC, Spawn, "Go talk to Madam Victra, she's got a little something prepared for me that should help us take care of these pests.") +end + +function dlg_16_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Where did they come from?", "dlg_16_2") + StartConversation(conversation, NPC, Spawn, "I already have some.") +end + +function dlg_16_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "So I guess you don't need this shroomling then?", "dlg_16_3") + StartConversation(conversation, NPC, Spawn, "Don't know! Probably from you. I bet you've got microscopic shroomlings all over you right now. How disgusting! Don't stand too close!") +end + +function dlg_16_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Oh?", "dlg_16_4") + StartConversation(conversation, NPC, Spawn, "No, no I don't. I have, however, figured out a way to get my sandwich from Vicaonar.") +end + +function dlg_16_4(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "All right.", "dlg_16_5") + AddConversationOption(conversation, "I tire of this.") + StartConversation(conversation, NPC, Spawn, "Go talk to Madam Victra, she's got a little something prepared for me that should help us take care of these pests.") +end + +function dlg_16_5(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "I'll go talk with Madam Victra.", "dlg_16_6") + StartConversation(conversation, NPC, Spawn, "I guess they grow slower when not in the swamp... but they sure do breed faster. We'd better work quickly.") +end + +function dlg_17_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "All right.", "dlg_17_2") + AddConversationOption(conversation, "I don't think I care to help with this anymore.") + StartConversation(conversation, NPC, Spawn, "Really?! That's ... well that's amazing! I need to see this for myself! Bring me one of the shroomlings!") +end + +function dlg_18_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "All right.", "dlg_18_2") + AddConversationOption(conversation, "I don't think I care to help with this anymore.") + StartConversation(conversation, NPC, Spawn, "Really?! That's ... well that's amazing! I need to see this for myself! Bring me one of the shroomlings!") +end + +function dlg_18_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "We'll see.", "dlg_18_3") + StartConversation(conversation, NPC, Spawn, "How potentially interesting!") +end + +function dlg_19_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "I think the boarfiend may have just had too much in his stomach.", "dlg_19_2") + StartConversation(conversation, NPC, Spawn, "Wow! Some sort of explosive, don't-eat-me, defense mechanism! These creatures are amazing!") +end + +function dlg_19_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "All right, I'll go get the leaves.", "dlg_19_3") + AddConversationOption(conversation, "No, I'm out.") + StartConversation(conversation, NPC, Spawn, "Well, that's sort of what I said. Anyway, I'm toying around with some other methods to get rid of these things. Most of my tests are going to require leaves from the Nerian knot-tree, however. I have enough to test with, but if my tests are successful then we're going to need a lot more. I need you to go up to the Shadow Oak northwest of here and collect some for me.") +end + +function dlg_20_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Where did they come from?", "dlg_20_2") + StartConversation(conversation, NPC, Spawn, "I already have some.") +end + +function dlg_20_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "So I guess you don't need this shroomling then?", "dlg_20_3") + StartConversation(conversation, NPC, Spawn, "Don't know! Probably from you. I bet you've got microscopic shroomlings all over you right now. How disgusting! Don't stand too close!") +end + +function dlg_20_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Oh?", "dlg_20_4") + StartConversation(conversation, NPC, Spawn, "No, no I don't. I have, however, figured out a way to get my sandwich from Vicaonar.") +end + +function dlg_20_4(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "All right.", "dlg_20_5") + AddConversationOption(conversation, "I tire of this.") + StartConversation(conversation, NPC, Spawn, "Go talk to Madam Victra, she's got a little something prepared for me that should help us take care of these pests.") +end + +function dlg_21_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Where did they come from?", "dlg_21_2") + StartConversation(conversation, NPC, Spawn, "I already have some.") +end + +function dlg_21_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "So I guess you don't need this shroomling then?", "dlg_21_3") + StartConversation(conversation, NPC, Spawn, "Don't know! Probably from you. I bet you've got microscopic shroomlings all over you right now. How disgusting! Don't stand too close!") +end + +function dlg_21_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Oh?", "dlg_21_4") + StartConversation(conversation, NPC, Spawn, "No, no I don't. I have, however, figured out a way to get my sandwich from Vicaonar.") +end + +function dlg_21_4(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "All right.", "dlg_21_5") + AddConversationOption(conversation, "I tire of this.") + StartConversation(conversation, NPC, Spawn, "Go talk to Madam Victra, she's got a little something prepared for me that should help us take care of these pests.") +end + +function dlg_21_5(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "I'll go talk with Madam Victra.", "dlg_21_6") + StartConversation(conversation, NPC, Spawn, "I guess they grow slower when not in the swamp... but they sure do breed faster. We'd better work quickly.") +end + +function dlg_23_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "All right, I'll be back.", "dlg_23_2") + StartConversation(conversation, NPC, Spawn, "Oh. Take the boarfiend down to Nightshadow Marsh, kill some mushroom things, release the boarfiend and let it eat them all up! Brilliant!") +end + +function dlg_24_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "I think the boarfiend may have just had too much in his stomach.", "dlg_24_2") + StartConversation(conversation, NPC, Spawn, "Wow! Some sort of explosive, don't-eat-me, defense mechanism! These creatures are amazing!") +end + +function dlg_24_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "All right, I'll go get the leaves.", "dlg_24_3") + AddConversationOption(conversation, "No, I'm out.") + StartConversation(conversation, NPC, Spawn, "Well, that's sort of what I said. Anyway, I'm toying around with some other methods to get rid of these things. Most of my tests are going to require leaves from the Nerian knot-tree, however. I have enough to test with, but if my tests are successful then we're going to need a lot more. I need you to go up to the Shadow Oak northwest of here and collect some for me.") +end + +function dlg_25_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "I think the boarfiend may have just had too much in his stomach.", "dlg_25_2") + StartConversation(conversation, NPC, Spawn, "Wow! Some sort of explosive, don't-eat-me, defense mechanism! These creatures are amazing!") +end + +function dlg_25_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "All right, I'll go get the leaves.", "dlg_25_3") + AddConversationOption(conversation, "No, I'm out.") + StartConversation(conversation, NPC, Spawn, "Well, that's sort of what I said. Anyway, I'm toying around with some other methods to get rid of these things. Most of my tests are going to require leaves from the Nerian knot-tree, however. I have enough to test with, but if my tests are successful then we're going to need a lot more. I need you to go up to the Shadow Oak northwest of here and collect some for me.") +end + +function dlg_25_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Right.", "dlg_25_4") + StartConversation(conversation, NPC, Spawn, "Excellent. We can't get rid of these things quick enough.") +end + +function dlg_27_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Ok.", "dlg_27_2") + StartConversation(conversation, NPC, Spawn, "Yes! That's where the power comes from. I'll just mix these up real quick.") +end + +function dlg_27_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Things or mushroom things?", "dlg_27_3") + AddConversationOption(conversation, "Maybe later.") + StartConversation(conversation, NPC, Spawn, "There we go! Take this spray out to Nightshadow Bog and destroy them! It's simple to use, just point and click, and things die.") +end + +function dlg_28_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Ok.", "dlg_28_2") + StartConversation(conversation, NPC, Spawn, "Yes! That's where the power comes from. I'll just mix these up real quick.") +end + +function dlg_28_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Things or mushroom things?", "dlg_28_3") + AddConversationOption(conversation, "Maybe later.") + StartConversation(conversation, NPC, Spawn, "There we go! Take this spray out to Nightshadow Bog and destroy them! It's simple to use, just point and click, and things die.") +end + +function dlg_28_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Well that's a relief.", "dlg_28_4") + StartConversation(conversation, NPC, Spawn, "Don't worry, it's harmless to us. I'll see you when you return! The best part about it, you infect one and he spreads it to others before dying! You shouldn't need to hit too many with the spray before we're taken care of!") +end + +function dlg_29_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "You're welcome.", "dlg_29_2") + StartConversation(conversation, NPC, Spawn, "Wonderful! You hear that Vicaonar? Give me that sandwich! Anyway, thanks for your help in sorting this out. I appreciate it. Actually, I'm pretty sure everyone here appreciated it.") +end + +function dlg_38_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Okay.", "dlg_38_2") + StartConversation(conversation, NPC, Spawn, "Yes! That's where the power comes from. I'll just mix these up real quick.") +end + +function dlg_38_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Things or mushroom things?", "dlg_38_3") + AddConversationOption(conversation, "Maybe later.") + StartConversation(conversation, NPC, Spawn, "There we go! Take this spray out to Nightshadow Bog and destroy them! It's simple to use, just point and click, and things die.") +end + +function dlg_39_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Okay.", "dlg_39_2") + StartConversation(conversation, NPC, Spawn, "Yes! That's where the power comes from. I'll just mix these up real quick.") +end + +function dlg_39_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Things or mushroom things?", "dlg_39_3") + AddConversationOption(conversation, "Maybe later.") + StartConversation(conversation, NPC, Spawn, "There we go! Take this spray out to Nightshadow Bog and destroy them! It's simple to use, just point and click, and things die.") +end + +function dlg_39_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Well that's a relief.", "dlg_39_4") + StartConversation(conversation, NPC, Spawn, "Don't worry, it's harmless to us. I'll see you when you return! The best part about it, you infect one and he spreads it to others before dying! You shouldn't need to hit too many with the spray before we're taken care of!") +end + +function dlg_51_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "You're welcome.", "dlg_51_2") + StartConversation(conversation, NPC, Spawn, "Wonderful! You hear that, Vicaonar? Give me that sandwich! Anyway, thanks for your help in sorting this out. I appreciate it. Actually, I'm pretty sure everyone here appreciated it.") +end +]]-- diff --git a/server/SpawnScripts/Darklight/aBriarstoneslayer.lua b/server/SpawnScripts/Darklight/aBriarstoneslayer.lua new file mode 100644 index 000000000..dbc43f1f8 --- /dev/null +++ b/server/SpawnScripts/Darklight/aBriarstoneslayer.lua @@ -0,0 +1,28 @@ +--[[ + Script Name : SpawnScripts/Darklight/aBriarstoneslayer.lua + Script Purpose : a Briarstone slayer + Script Author : John Adams + Script Date : 2009.01.31 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +function spawn(NPC) + SetPlayerProximityFunction(NPC, 10, "InRange", "LeaveRange") +end + +function respawn(NPC) + spawn(NPC) +end + +function InRange(NPC, Spawn) +end + +function LeaveRange(NPC, Spawn) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + + PlayFlavor(NPC, "voiceover/english/skeleton_thexian/ft/skeleton/skeleton_thexian_1_halfhealth_15c99541.mp3", "Others will take my place.", "", 2052061812, 1312269385, Spawn) +end + diff --git a/server/SpawnScripts/Darklight/aCaptiveCub.lua b/server/SpawnScripts/Darklight/aCaptiveCub.lua new file mode 100644 index 000000000..3f581d02f --- /dev/null +++ b/server/SpawnScripts/Darklight/aCaptiveCub.lua @@ -0,0 +1,26 @@ +--[[ + Script Name : SpawnScripts/Darklight/acaptivecub.lua + Script Purpose : Add spawn access to a captive cub + Script Author : Cynnar + Script Date : 3/23/2016 + Script Notes : a captive cub (341075) +--]] +local DrawUponWellsprings = 155 + + +function spawn(NPC) + AddSpawnAccess(NPC, NPC) + SetPlayerProximityFunction(NPC, 20, "SpawnAccess", "SpawnAccess") +end + +function respawn(NPC) + spawn(NPC) +end + +function SpawnAccess(NPC, Spawn) + if not HasCompletedQuest(Spawn, DrawUponWellsprings) then + RemoveSpawnAccess(NPC, Spawn) + else + AddSpawnAccess(NPC, Spawn) + end +end diff --git a/server/SpawnScripts/Darklight/aCommonerPanicked_(1).lua b/server/SpawnScripts/Darklight/aCommonerPanicked_(1).lua new file mode 100644 index 000000000..50c74e96a --- /dev/null +++ b/server/SpawnScripts/Darklight/aCommonerPanicked_(1).lua @@ -0,0 +1,38 @@ +--[[ + Script Name : SpawnScripts/Darklight/aCommonerPanicked_(1).lua + Script Purpose : Panicked commoners before completing quest, "Reclaiming the Sablevein Tear" + Script Author : Cynnar + Script Date : 10/14/2015 + Script Notes : a commoner (spawn_id 340142) (spawn_location_id 584360) + Script Notes : Location is in Hate's Envy +--]] + +local SealingTheRift = 122 +local ReclaimingTheSableveinTear = 124 + +function spawn(NPC, Player) + AddSpawnAccess(NPC, NPC) + SetPlayerProximityFunction(NPC, 50, "QuestCheck", "QuestCheck") +end + +function respawn(NPC) + spawn(NPC) +end + +function QuestCheck(NPC, Player) + if not HasCompletedQuest(Player, SealingTheRift) then + AddSpawnAccess(NPC, Player) + MovementLoopAddLocation(NPC, -390.67, -62.87, 247.71, 4, 1) + MovementLoopAddLocation(NPC, -391.05, -62.87, 254.13, 4, 1) + MovementLoopAddLocation(NPC, -383.36, -62.87, 247.41, 4, 1) + MovementLoopAddLocation(NPC, -388.98, -62.87, 256.71, 4, 1) + MovementLoopAddLocation(NPC, -388.16, -62.87, 255.80, 4, 1) + MovementLoopAddLocation(NPC, -383.64, -62.87, 254.19, 4, 1) + MovementLoopAddLocation(NPC, -382.80, -62.87, 255.60, 4, 1) + MovementLoopAddLocation(NPC, -386.14, -62.87, 248.28, 4, 1) + MovementLoopAddLocation(NPC, -386.51, -62.87, 248.45, 4, 1) + MovementLoopAddLocation(NPC, -385.33, -62.87, 252.82, 4, 1) + else + RemoveSpawnAccess(NPC, Player) + end +end diff --git a/server/SpawnScripts/Darklight/aCommonerPanicked_(2).lua b/server/SpawnScripts/Darklight/aCommonerPanicked_(2).lua new file mode 100644 index 000000000..bfb280b5d --- /dev/null +++ b/server/SpawnScripts/Darklight/aCommonerPanicked_(2).lua @@ -0,0 +1,44 @@ +--[[ + Script Name : SpawnScripts/Darklight/aCommonerPanicked_(2).lua + Script Purpose : Panicked commoners before completing quest, "Reclaiming the Sablevein Tear" + Script Author : Cynnar + Script Date : 10/14/2015 + Script Notes : a commoner (spawn_id 340142) (spawn_location_id 584366) + Script Notes : Location is in Hate's Envy +--]] + +local SealingTheRift = 122 +local ReclaimingTheSableveinTear = 124 + +function spawn(NPC, Player) + AddSpawnAccess(NPC, NPC) + SetPlayerProximityFunction(NPC, 50, "QuestCheck", "QuestCheck") +end + +function respawn(NPC) + spawn(NPC) +end + +function QuestCheck(NPC, Player) + if not HasCompletedQuest(Player, SealingTheRift) then + AddSpawnAccess(NPC, Player) + MovementLoopAddLocation(NPC, -401.28, -62.87, 258.66, 4, 1) + MovementLoopAddLocation(NPC, -404.47, -62.99, 255.70, 4, 1) + MovementLoopAddLocation(NPC, -408.42, -62.87, 260.58, 4, 1) + MovementLoopAddLocation(NPC, -405.94, -62.77, 260.96, 4, 1) + MovementLoopAddLocation(NPC, -404.88, -62.87, 262.58, 4, 1) + MovementLoopAddLocation(NPC, -406.65, -62.97, 251.19, 4, 1) + MovementLoopAddLocation(NPC, -405.48, -62.97, 256.98, 4, 1) + MovementLoopAddLocation(NPC, -407.14, -62.97, 251.25, 4, 1) + MovementLoopAddLocation(NPC, -405.39, -62.87, 261.57, 4, 1) + MovementLoopAddLocation(NPC, -409.59, -63.07, 256.49, 4, 1) + MovementLoopAddLocation(NPC, -408.74, -62.87, 260.52, 4, 1) + MovementLoopAddLocation(NPC, -408.59, -62.95, 249.67, 4, 1) + MovementLoopAddLocation(NPC, -405.20, -62.90, 257.99, 4, 1) + MovementLoopAddLocation(NPC, -411.59, -63.04, 254.50, 4, 1) + MovementLoopAddLocation(NPC, -406.46, -62.87, 260.43, 4, 1) + MovementLoopAddLocation(NPC, -406.71, -63.02, 256.54, 4, 1) + else + RemoveSpawnAccess(NPC, Player) + end +end \ No newline at end of file diff --git a/server/SpawnScripts/Darklight/aCommonerPanicked_(3).lua b/server/SpawnScripts/Darklight/aCommonerPanicked_(3).lua new file mode 100644 index 000000000..9650a7dec --- /dev/null +++ b/server/SpawnScripts/Darklight/aCommonerPanicked_(3).lua @@ -0,0 +1,36 @@ +--[[ + Script Name : SpawnScripts/Darklight/aCommonerPanicked_(3).lua + Script Purpose : Panicked commoners before completing quest, "Reclaiming the Sablevein Tear" + Script Author : Cynnar + Script Date : 10/15/2015 + Script Notes : a commoner (spawn_id 340142) (spawn_location_id 584437, 584438) + Script Notes : Location is in Hate's Envy +--]] + +local SealingTheRift = 122 +local ReclaimingTheSableveinTear = 124 + +function spawn(NPC, Player) + AddSpawnAccess(NPC, NPC) + SetPlayerProximityFunction(NPC, 990, "QuestCheck", "QuestCheck") +end + +function respawn(NPC) + spawn(NPC) +end + +function QuestCheck(NPC, Player) + if HasCompletedQuest(Player, SealingTheRift) then + if not HasCompletedQuest(Player, ReclaimingTheSableveinTear) then + AddSpawnAccess(NPC, Player) + AddTimer(NPC, 2000, "kickrubble") + else + RemoveSpawnAccess(NPC, Player) + end + end +end + +function kickrubble(NPC) + PlayFlavor(NPC, "", "", "kick", 0, 0) + AddTimer(NPC, 2000, "kickrubble") +end diff --git a/server/SpawnScripts/Darklight/aCommonerPanicked_(4).lua b/server/SpawnScripts/Darklight/aCommonerPanicked_(4).lua new file mode 100644 index 000000000..0ea806494 --- /dev/null +++ b/server/SpawnScripts/Darklight/aCommonerPanicked_(4).lua @@ -0,0 +1,39 @@ +--[[ + Script Name : SpawnScripts/Darklight/aCommonerPanicked_(4).lua + Script Purpose : Panicked commoners before completing quest, "Reclaiming the Sablevein Tear" + Script Author : Cynnar + Script Date : 10/16/2015 + Script Notes : a commoner (spawn_id 340017) (spawn_location_id 579574) + Script Notes : Location is in Hate's Envy +--]] + +local SealingTheRift = 122 +local ReclaimingTheSableveinTear = 124 + +function spawn(NPC, Player) + AddSpawnAccess(NPC, NPC) + SetPlayerProximityFunction(NPC, 50, "QuestCheck", "QuestCheck") +end + +function respawn(NPC) + spawn(NPC) +end + +function QuestCheck(NPC, Player) + if not HasCompletedQuest(Player, ReclaimingTheSableveinTear) then + AddSpawnAccess(NPC, Player) + MovementLoopAddLocation(NPC, -404.44, -62.87, 229.99, 4, 1) + MovementLoopAddLocation(NPC, -410.34, -62.87, 239.73, 4, 1) + MovementLoopAddLocation(NPC, -399.75, -62.87, 233.78, 4, 1) + MovementLoopAddLocation(NPC, -403.67, -62.87, 240.28, 4, 1) + MovementLoopAddLocation(NPC, -407.42, -62.87, 232.79, 4, 1) + MovementLoopAddLocation(NPC, -401.65, -62.87, 241.27, 4, 1) + MovementLoopAddLocation(NPC, -405.10, -62.87, 237.00, 4, 1) + MovementLoopAddLocation(NPC, -403.93, -62.87, 225.40, 4, 1) + MovementLoopAddLocation(NPC, -411.33, -62.87, 229.45, 4, 1) + MovementLoopAddLocation(NPC, -412.62, -62.87, 235.85, 4, 1) + MovementLoopAddLocation(NPC, -401.91, -62.87, 232.67, 4, 1) + else + RemoveSpawnAccess(NPC, Player) + end +end \ No newline at end of file diff --git a/server/SpawnScripts/Darklight/aCommonerPanicked_(5).lua b/server/SpawnScripts/Darklight/aCommonerPanicked_(5).lua new file mode 100644 index 000000000..1ae3bb4a4 --- /dev/null +++ b/server/SpawnScripts/Darklight/aCommonerPanicked_(5).lua @@ -0,0 +1,43 @@ +--[[ + Script Name : SpawnScripts/Darklight/aCommonerPanicked_(5).lua + Script Purpose : Panicked commoners before completing quest, "Reclaiming the Sablevein Tear" + Script Author : Cynnar + Script Date : 10/16/2015 + Script Notes : a commoner (spawn_id 340142) (spawn_location_id 323807) + Script Notes : Location is in Hate's Envy +--]] + +local SealingTheRift = 122 +local ReclaimingTheSableveinTear = 124 + +function spawn(NPC, Player) + AddSpawnAccess(NPC, NPC) + SetPlayerProximityFunction(NPC, 50, "QuestCheck", "QuestCheck") +end + +function respawn(NPC) + spawn(NPC) +end + +function QuestCheck(NPC, Player) + if not HasCompletedQuest(Player, ReclaimingTheSableveinTear) then + AddSpawnAccess(NPC, Player) + MovementLoopAddLocation(NPC, -400.98, -62.87, 217.42, 4, 1) + MovementLoopAddLocation(NPC, -404.17, -62.87, 226.41, 4, 1) + MovementLoopAddLocation(NPC, -413.75, -62.87, 216.07, 4, 1) + MovementLoopAddLocation(NPC, -410.39, -62.87, 227.05, 4, 1) + MovementLoopAddLocation(NPC, -406.84, -62.87, 216.14, 4, 1) + MovementLoopAddLocation(NPC, -406.39, -62.87, 225.80, 4, 1) + MovementLoopAddLocation(NPC, -413.02, -62.87, 222.00, 4, 1) + MovementLoopAddLocation(NPC, -400.55, -62.87, 217.44, 4, 1) + MovementLoopAddLocation(NPC, -409.36, -62.87, 225.38, 4, 1) + else + RemoveSpawnAccess(NPC, Player) + end +end + +function animation(NPC, Player) + AddSpawnAccess(NPC, Player) + PlayFlavor(NPC, "", "", "frustrated", 0, 0) + +end \ No newline at end of file diff --git a/server/SpawnScripts/Darklight/aCommonerPanicked_(6).lua b/server/SpawnScripts/Darklight/aCommonerPanicked_(6).lua new file mode 100644 index 000000000..8ff6be49e --- /dev/null +++ b/server/SpawnScripts/Darklight/aCommonerPanicked_(6).lua @@ -0,0 +1,42 @@ +--[[ + Script Name : SpawnScripts/Darklight/aCommonerPanicked_(6).lua + Script Purpose : Panicked commoners before completing quest, "Reclaiming the Sablevein Tear" + Script Author : Cynnar + Script Date : 10/16/2015 + Script Notes : a commoner (spawn_id 340017) (spawn_location_id 317253) + Script Notes : Location is in Hate's Envy +--]] + +local SealingTheRift = 122 +local ReclaimingTheSableveinTear = 124 + +function spawn(NPC, Player) + AddSpawnAccess(NPC, NPC) + SetPlayerProximityFunction(NPC, 50, "QuestCheck", "QuestCheck") +end + +function respawn(NPC) + spawn(NPC) +end + +function QuestCheck(NPC, Player) + if not HasCompletedQuest(Player, ReclaimingTheSableveinTear) then + AddSpawnAccess(NPC, Player) + MovementLoopAddLocation(NPC, -388.34, -62.87, 208.30, 4, 1) + MovementLoopAddLocation(NPC, -393.45, -62.87, 201.45, 4, 1) + MovementLoopAddLocation(NPC, -396.49, -62.87, 208.28, 4, 1) + MovementLoopAddLocation(NPC, -387.72, -62.87, 200.97, 4, 1) + MovementLoopAddLocation(NPC, -396.54, -62.87, 204.25, 4, 1) + MovementLoopAddLocation(NPC, -388.66, -62.87, 205.30, 4, 1) + MovementLoopAddLocation(NPC, -400.58, -62.87, 210.81, 4, 1) + MovementLoopAddLocation(NPC, -395.15, -62.87, 205.69, 4, 1) + else + RemoveSpawnAccess(NPC, Player) + end +end + +function animation(NPC, Player) + AddSpawnAccess(NPC, Player) + PlayFlavor(NPC, "", "", "frustrated", 0, 0) + +end \ No newline at end of file diff --git a/server/SpawnScripts/Darklight/aCommonerPanicked_(7).lua b/server/SpawnScripts/Darklight/aCommonerPanicked_(7).lua new file mode 100644 index 000000000..91b98fc0b --- /dev/null +++ b/server/SpawnScripts/Darklight/aCommonerPanicked_(7).lua @@ -0,0 +1,43 @@ +--[[ + Script Name : SpawnScripts/Darklight/aCommonerPanicked_(7).lua + Script Purpose : Panicked commoners before completing quest, "Reclaiming the Sablevein Tear" + Script Author : Cynnar + Script Date : 10/16/2015 + Script Notes : a commoner (spawn_id 340142) (spawn_location_id 579576) + Script Notes : Location is in Hate's Envy +--]] + +local SealingTheRift = 122 +local ReclaimingTheSableveinTear = 124 + +function spawn(NPC, Player) + AddSpawnAccess(NPC, NPC) + SetPlayerProximityFunction(NPC, 50, "QuestCheck", "QuestCheck") +end + +function respawn(NPC) + spawn(NPC) +end + +function QuestCheck(NPC, Player) + if not HasCompletedQuest(Player, ReclaimingTheSableveinTear) then + AddSpawnAccess(NPC, Player) + MovementLoopAddLocation(NPC, -373.39, -62.87, 220.84, 4, 1) + MovementLoopAddLocation(NPC, -376.93, -62.87, 208.55, 4, 1) + MovementLoopAddLocation(NPC, -380.85, -62.87, 218.72, 4, 1) + MovementLoopAddLocation(NPC, -372.85, -62.87, 213.51, 4, 1) + MovementLoopAddLocation(NPC, -384.53, -62.87, 209.33, 4, 1) + MovementLoopAddLocation(NPC, -377.88, -62.87, 219.22, 4, 1) + MovementLoopAddLocation(NPC, -370.68, -62.87, 214.95, 4, 1) + MovementLoopAddLocation(NPC, -384.15, -62.87, 206.85, 4, 1) + MovementLoopAddLocation(NPC, -377.62, -62.87, 215.29, 4, 1) + else + RemoveSpawnAccess(NPC, Player) + end +end + +function animation(NPC, Player) + AddSpawnAccess(NPC, Player) + PlayFlavor(NPC, "", "", "frustrated", 0, 0) + +end \ No newline at end of file diff --git a/server/SpawnScripts/Darklight/aCommonerPanicked_(8).lua b/server/SpawnScripts/Darklight/aCommonerPanicked_(8).lua new file mode 100644 index 000000000..f983c89e7 --- /dev/null +++ b/server/SpawnScripts/Darklight/aCommonerPanicked_(8).lua @@ -0,0 +1,42 @@ +--[[ + Script Name : SpawnScripts/Darklight/aCommonerPanicked_(8).lua + Script Purpose : Panicked commoners before completing quest, "Reclaiming the Sablevein Tear" + Script Author : Cynnar + Script Date : 10/16/2015 + Script Notes : a commoner (spawn_id 340017) (spawn_location_id 579575) + Script Notes : Location is in Hate's Envy +--]] + +local SealingTheRift = 122 +local ReclaimingTheSableveinTear = 124 + +function spawn(NPC, Player) + AddSpawnAccess(NPC, NPC) + SetPlayerProximityFunction(NPC, 50, "QuestCheck", "QuestCheck") +end + +function respawn(NPC) + spawn(NPC) +end + +function QuestCheck(NPC, Player) + if not HasCompletedQuest(Player, ReclaimingTheSableveinTear) then + AddSpawnAccess(NPC, Player) + MovementLoopAddLocation(NPC, -381.35, -62.87, 230.78, 4, 1) + MovementLoopAddLocation(NPC, -372.50, -62.87, 238.39, 4, 1) + MovementLoopAddLocation(NPC, -373.73, -62.87, 229.14, 4, 1) + MovementLoopAddLocation(NPC, -382.43, -62.87, 239.71, 4, 1) + MovementLoopAddLocation(NPC, -372.71, -62.87, 234.79, 4, 1) + MovementLoopAddLocation(NPC, -378.37, -62.87, 227.58, 4, 1) + MovementLoopAddLocation(NPC, -374.99, -62.87, 241.18, 4, 1) + MovementLoopAddLocation(NPC, -374.23, -62.87, 233.35, 4, 1) + else + RemoveSpawnAccess(NPC, Player) + end +end + +function animation(NPC, Player) + AddSpawnAccess(NPC, Player) + PlayFlavor(NPC, "", "", "frustrated", 0, 0) + +end \ No newline at end of file diff --git a/server/SpawnScripts/Darklight/aConcordiumPupilAdept.lua b/server/SpawnScripts/Darklight/aConcordiumPupilAdept.lua new file mode 100644 index 000000000..960f8ed34 --- /dev/null +++ b/server/SpawnScripts/Darklight/aConcordiumPupilAdept.lua @@ -0,0 +1,119 @@ +--[[ + Script Name : SpawnScripts/Darklight/aConcordiumPupilAdept.lua + Script Purpose : a Concordium Pupil Adept + Script Author : John Adams + Script Date : 2009.01.31 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +function spawn(NPC) + SetPlayerProximityFunction(NPC, 10, "InRange", "LeaveRange") +end + +function respawn(NPC) + spawn(NPC) +end + +function InRange(NPC, Spawn) +end + +function LeaveRange(NPC, Spawn) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + choice = math.random(1,2) + + if choice == 1 then + PlayFlavor(NPC, "", "", "", 1689589577, 4560189, Spawn) + elseif choice == 2 then + PlayFlavor(NPC, "", "Such storms! The elders were right! We must rise up and fight these invaders together!", "", 1689589577, 4560189, Spawn) + else + end + + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_3_1005.mp3", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "You've reported this to the Concordium?", "dlg_0_1") + AddConversationOption(conversation, "This is no time to stand back and gawk!") + StartConversation(conversation, NPC, Spawn, "First these Void storms were tainting Norrath. Now they are spitting out forces of attacking beasts!") + if convo==1 then + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_3_1005.mp3", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "You've reported this to the Concordium?", "dlg_1_1") + AddConversationOption(conversation, "This is no time to stand back and gawk!") + StartConversation(conversation, NPC, Spawn, "First these Void storms were tainting Norrath. Now they are spitting out forces of attacking beasts!") + end + + if convo==2 then + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_2_1005.mp3", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "You've reported this to the Concordium?", "dlg_2_1") + AddConversationOption(conversation, "This is no time to stand back and gawk!") + StartConversation(conversation, NPC, Spawn, "First these Void storms were tainting Norrath. Now they are spitting out forces of attacking beasts!") + end + +end + +function dlg_0_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "I can help.", "dlg_0_2") + AddConversationOption(conversation, "Pardon me as I find someplace to hide.") + StartConversation(conversation, NPC, Spawn, "Oh, yes! The elders are sending out adventurers to help battle them. But they just keep coming!") +end + +function dlg_0_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "You got it.", "dlg_0_3") + StartConversation(conversation, NPC, Spawn, "Good, good! If you find anything of interest while you battle the Void storm creatures, anything that can help us in our research, I would appreciate it!") +end + +function dlg_1_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Yes, I am!") + AddConversationOption(conversation, "If I find any.", "dlg_1_2") + AddConversationOption(conversation, "I don't think so.") + StartConversation(conversation, NPC, Spawn, "Right you are! And if I had any fighting skills I would be in the thick of it, myself. Are you going to fight the Void creatures!?") +end + +function dlg_1_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "You got it.", "dlg_1_3") + StartConversation(conversation, NPC, Spawn, "Good, good! If you find anything of interest while you battle the Void storm creatures, anything that can help us in our research, I would appreciate it!") +end + +function dlg_2_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "I can help.", "dlg_2_2") + AddConversationOption(conversation, "Pardon me as I find someplace to hide.") + StartConversation(conversation, NPC, Spawn, "Oh, yes! The elders are sending out adventurers to help battle them. But they just keep coming!") +end + +function dlg_2_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_1_1005.mp3", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "You've reported this to the Concordium?") + AddConversationOption(conversation, "This is no time to stand back and gawk!") + StartConversation(conversation, NPC, Spawn, "First these Void storms were tainting Norrath. Now they are spitting out forces of attacking beasts!") +end + +--[[ raw_conversations + PlayFlavor(NPC, "", "", "", 1689589577, 4560189, Spawn) + PlayFlavor(NPC, "", "Such storms! The elders were right! We must rise up and fight these invaders together!", "", 1689589577, 4560189, Spawn) +--]] + diff --git a/server/SpawnScripts/Darklight/aMiner_(1).lua b/server/SpawnScripts/Darklight/aMiner_(1).lua new file mode 100644 index 000000000..9ac754e7f --- /dev/null +++ b/server/SpawnScripts/Darklight/aMiner_(1).lua @@ -0,0 +1,28 @@ +--[[ + Script Name : SpawnScripts/Darklight/aMiner_(1).lua + Script Purpose : A Miner before completing quest, "Reclaiming the Sablevein Tear" + Script Author : Cynnar + Script Date : 10/14/2015 + Script Notes : a miner (spawn_id 340016) (spawn_location_id 584439) + Script Notes : Location is in Hate's Envy +--]] + +local ReclaimingTheSableveinTear = 124 + +function spawn(NPC, Player) + AddSpawnAccess(NPC, NPC) + SetPlayerProximityFunction(NPC, 50, "QuestCheck", "QuestCheck") +end + +function respawn(NPC) + spawn(NPC) +end + +function QuestCheck(NPC, Player) + if not HasCompletedQuest(Player, ReclaimingTheSableveinTear) then + AddSpawnAccess(NPC, Player) + else + RemoveSpawnAccess(NPC, Player) + end +end + diff --git a/server/SpawnScripts/Darklight/aMiner_(2).lua b/server/SpawnScripts/Darklight/aMiner_(2).lua new file mode 100644 index 000000000..e94f49ec8 --- /dev/null +++ b/server/SpawnScripts/Darklight/aMiner_(2).lua @@ -0,0 +1,36 @@ +--[[ + Script Name : SpawnScripts/Darklight/aMiner_(2).lua + Script Purpose : A Miner before completing quest, "Reclaiming the Sablevein Tear" + Script Author : Cynnar + Script Date : 10/14/2015 + Script Notes : a miner (spawn_id 340016) (spawn_location_id 584440) + Script Notes : Location is in Hate's Envy +--]] + +local SealingTheRift = 122 +local ReclaimingTheSableveinTear = 124 + +function spawn(NPC, Player) + AddSpawnAccess(NPC, NPC) + SetPlayerProximityFunction(NPC, 50, "QuestCheck", "QuestCheck") +end + +function respawn(NPC) + spawn(NPC) +end + +function QuestCheck(NPC, Player) + if HasCompletedQuest(Player, ReclaimingTheSableveinTear) then + AddSpawnAccess(NPC, Player) + MovementLoopAddLocation(NPC, -403.55, -62.87, 240.82, 2) + MovementLoopAddLocation(NPC, -405.77, -62.87, 230.47, 2) + MovementLoopAddLocation(NPC, -405.67, -62.87, 219.67, 2) + MovementLoopAddLocation(NPC, -396.86, -62.87, 206.27, 2) + MovementLoopAddLocation(NPC, -385.66, -62.87, 206.95, 2) + MovementLoopAddLocation(NPC, -377.26, -62.87, 215.62, 2) + MovementLoopAddLocation(NPC, -376.80, -62.87, 235.30, 2) + MovementLoopAddLocation(NPC, -393.61, -62.87, 246.72, 2) + else + RemoveSpawnAccess(NPC, Player) + end +end \ No newline at end of file diff --git a/server/SpawnScripts/Darklight/aNeriandrake.lua b/server/SpawnScripts/Darklight/aNeriandrake.lua new file mode 100644 index 000000000..273ccf24b --- /dev/null +++ b/server/SpawnScripts/Darklight/aNeriandrake.lua @@ -0,0 +1,20 @@ +--[[ + Script Name : SpawnScripts/Darklight/aNeriandrake.lua + Script Author : theFoof + Script Date : 2013.11.28 + Script Purpose : this is only for the drakes that fly + : +--]] + +function spawn(NPC) + SpawnSet(NPC, "action_state", "11559") + --Add movement script to this +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) +end + +function respawn(NPC) + spawn(NPC) +end \ No newline at end of file diff --git a/server/SpawnScripts/Darklight/aSableveinDestroyer.lua b/server/SpawnScripts/Darklight/aSableveinDestroyer.lua new file mode 100644 index 000000000..417f68bd5 --- /dev/null +++ b/server/SpawnScripts/Darklight/aSableveinDestroyer.lua @@ -0,0 +1,25 @@ +--[[ + Script Name : SpawnScripts/Darklight/aSableveinDestroyer.lua + Script Purpose : Add looping attack and despawn for battle simulation. + Script Author : Cynnar + Script Date : 10/14/2015 + Script Notes : A Sablevein Destroyer (spawn_id 340053) + Script Notes : Where the north wall use to be. +--]] + +function spawn(NPC) + MakeAttack(NPC) +end + +function respawn(NPC) + spawn(NPC) +end + +function MakeAttack(NPC) + PlayFlavor(NPC, "", "", "attack", 0, 0) + AddTimer(NPC, math.random(3000, 3500), "MakeAttack") +end + +function hailed(NPC, Spawn) + PlayAnimation(NPC, 19228) +end \ No newline at end of file diff --git a/server/SpawnScripts/Darklight/aSableveincrumbler_attack.lua b/server/SpawnScripts/Darklight/aSableveincrumbler_attack.lua new file mode 100644 index 000000000..1011cb4c8 --- /dev/null +++ b/server/SpawnScripts/Darklight/aSableveincrumbler_attack.lua @@ -0,0 +1,33 @@ +--[[ + Script Name : SpawnScripts/Darklight/aSableveincrumbler.lua + Script Purpose : a Sablevein crumbler + Script Author : Scatman + Script Date : 2009.12.15 + Script Notes : +--]] + +dofile("SpawnScripts/Generic/MovementCircleSmall.lua") + +local MIN_TIME = 3000 +local MAX_TIME = 10000 + +function spawn(NPC) + local sli = GetSpawnLocationID(NPC) + if sli == 85722 or sli == 85817 or sli == 85794 or sli == 85775 or sli == 85714 or sli == 85701 or sli == 98562 or sli == 85711 or sli == 85759 or sli == 85731 or sli == 85723 or sli == 85712 or sli == 85865 or sli == 85730 or sli == 85862 then + AddTimer(NPC, math.random(MIN_TIME, MAX_TIME), "MakeAttack") + else + SpawnChooseRandomMovement(NPC) + end +end + +function hailed(NPC, Spawn) +end + +function respawn(NPC) + spawn(NPC) +end + +function MakeAttack(NPC) + PlayFlavor(NPC, "", "", "attack", 0, 0) + AddTimer(NPC, math.random(MIN_TIME, MAX_TIME), "MakeAttack") +end \ No newline at end of file diff --git a/server/SpawnScripts/Darklight/aSableveindigger_attack.lua b/server/SpawnScripts/Darklight/aSableveindigger_attack.lua new file mode 100644 index 000000000..85ef9d418 --- /dev/null +++ b/server/SpawnScripts/Darklight/aSableveindigger_attack.lua @@ -0,0 +1,27 @@ +--[[ + Script Name : SpawnScripts/Darklight/aSableveindigger.lua + Script Purpose : a Sablevein digger + Script Author : Scatman + Script Date : 2009.11.19 + Script Notes : +--]] + +local MIN_TIME = 3000 +local MAX_TIME = 10000 + +function spawn(NPC) + AddTimer(NPC, math.random(MIN_TIME, MAX_TIME), "MakeAttack") +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) +end + +function MakeAttack(NPC) + PlayFlavor(NPC, "", "", "attack", 0, 0) + AddTimer(NPC, math.random(MIN_TIME, MAX_TIME), "MakeAttack") +end \ No newline at end of file diff --git a/server/SpawnScripts/Darklight/aSableveinpulverizer.lua b/server/SpawnScripts/Darklight/aSableveinpulverizer.lua new file mode 100644 index 000000000..c36ae70e1 --- /dev/null +++ b/server/SpawnScripts/Darklight/aSableveinpulverizer.lua @@ -0,0 +1,64 @@ +local SearchingForSigils = 123 + +function spawn(NPC) + choice = math.random(1, 4) + if choice == 1 then + clockwise1(NPC) + elseif choice == 2 then + clockwise2(NPC) + elseif choice == 3 then + counter_clockwise1(NPC) + elseif choice == 4 then + counter_clockwise2(NPC) + end +end + +function respawn(NPC) + spawn(NPC) +end + +function clockwise1(NPC) + x = GetX(NPC) + y = GetY(NPC) + z = GetZ(NPC) + MovementLoopAddLocation(NPC, x + 7 , y, z - 8 , 1, math.random(5, 15)) + MovementLoopAddLocation(NPC, x - 5 , y, z - 10, 1, math.random(5, 15)) + MovementLoopAddLocation(NPC, x - 10, y, z + 9 , 1, math.random(5, 15)) + MovementLoopAddLocation(NPC, x + 5 , y, z + 8 , 1, math.random(5, 15)) +end + +function clockwise2(NPC) + x = GetX(NPC) + y = GetY(NPC) + z = GetZ(NPC) + MovementLoopAddLocation(NPC, x + 2 , y, z - 8 , 1, math.random(5, 15)) + MovementLoopAddLocation(NPC, x - 7 , y, z - 5 , 1, math.random(5, 15)) + MovementLoopAddLocation(NPC, x , y, z + 6 , 1, math.random(5, 15)) + MovementLoopAddLocation(NPC, x + 9 , y, z + 1 , 1, math.random(5, 15)) +end + +function counter_clockwise1(NPC) + x = GetX(NPC) + y = GetY(NPC) + z = GetZ(NPC) + MovementLoopAddLocation(NPC, x - 7 , y, z + 8 , 1, math.random(5, 15)) + MovementLoopAddLocation(NPC, x + 5 , y, z + 10, 1, math.random(5, 15)) + MovementLoopAddLocation(NPC, x + 10, y, z - 9 , 1, math.random(5, 15)) + MovementLoopAddLocation(NPC, x - 5 , y, z - 8 , 1, math.random(5, 15)) +end + +function counter_clockwise2(NPC) + x = GetX(NPC) + y = GetY(NPC) + z = GetZ(NPC) + MovementLoopAddLocation(NPC, x - 2 , y, z + 8 , 1, math.random(5, 15)) + MovementLoopAddLocation(NPC, x + 7 , y, z + 5 , 1, math.random(5, 15)) + MovementLoopAddLocation(NPC, x , y, z - 6 , 1, math.random(5, 15)) + MovementLoopAddLocation(NPC, x - 9 , y, z - 1 , 1, math.random(5, 15)) +end + +function death(NPC, Spawn) + if GetQuestStep(Spawn, SearchingForSigils) == 1 then + AddLootItem(NPC, 11837) + end +end \ No newline at end of file diff --git a/server/SpawnScripts/Darklight/aTRethirthinblood.lua b/server/SpawnScripts/Darklight/aTRethirthinblood.lua new file mode 100644 index 000000000..42fcb668f --- /dev/null +++ b/server/SpawnScripts/Darklight/aTRethirthinblood.lua @@ -0,0 +1,23 @@ +--[[ + Script Name : SpawnScripts/Darklight/aTRethirthinblood.lua + Script Author : theFoof + Script Date : 2013.11.27 + Script Purpose : + : +--]] + +function spawn(NPC) + local choice = math.random(1,2) + if choice == 1 then + SpawnSet(NPC, "model_type", "8657") + SpawnSet(NPC, "gender", "0") + end +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) +end + +function respawn(NPC) + spawn(NPC) +end \ No newline at end of file diff --git a/server/SpawnScripts/Darklight/ababysnake.lua b/server/SpawnScripts/Darklight/ababysnake.lua new file mode 100644 index 000000000..ef3af00c6 --- /dev/null +++ b/server/SpawnScripts/Darklight/ababysnake.lua @@ -0,0 +1,27 @@ +--[[ + Script Name : SpawnScripts/Darklight/ababysnake.lua + Script Author : fearfx + Script Date : 2017.01.21 11:01:06 + Script Purpose : + : +--]] + +local InfantileIngredients = 157 + +function spawn(NPC) + +end + +function hailed(NPC, Spawn) +end + +function respawn(NPC) + +end + +function casted_on(NPC, Spawn, SpellName) + if SpellName == "gather " then + Despawn(NPC) + SummonItem(Spawn, 4080) + end +end \ No newline at end of file diff --git a/server/SpawnScripts/Darklight/acommoner_female.lua b/server/SpawnScripts/Darklight/acommoner_female.lua new file mode 100644 index 000000000..96ba42de5 --- /dev/null +++ b/server/SpawnScripts/Darklight/acommoner_female.lua @@ -0,0 +1,44 @@ +--[[ + Script Name : SpawnScripts/Darklight/acommoner_female.lua + Script Purpose : a commoner + Script Author : John Adams + Script Date : 2009.02.01 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +function spawn(NPC) + SetPlayerProximityFunction(NPC, 10, "InRange", "LeaveRange") +end + +function respawn(NPC) + spawn(NPC) +end + +function InRange(NPC, Spawn) +end + +function LeaveRange(NPC, Spawn) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + + choice = math.random(1,6) + + if choice == 1 then + PlayFlavor(NPC, "voiceover/english/neriak/a_commoner/darklight_wood/service/commoner_female_1_hail_b1b63b87.mp3", "Have you heard of Thelia N'Fyre, the head druid of the Shadow Oak? I hear the queen hates her. Yet nothing is done to rid Darklight of her presence.", "", 1904965620, 1308949760, Spawn) + elseif choice == 2 then + PlayFlavor(NPC, "voiceover/english/neriak/a_commoner/darklight_wood/service/commoner_female_2_hail_9377d0e.mp3", "Hate's Envy provides Neriak with a lot of raw ore and hard-working citizens. I think that may be why Cristanos lets them get away with such a lenient immigration policy.", "", 1200644794, 2494823979, Spawn) + elseif choice == 3 then + PlayFlavor(NPC, "voiceover/english/neriak/a_commoner/darklight_wood/service/commoner_female_1_hail_19fa8ff4.mp3", "How powerful would the queen be without her little Arasai?", "", 4101507312, 2547888971, Spawn) + elseif choice == 4 then + PlayFlavor(NPC, "voiceover/english/neriak/a_commoner/darklight_wood/service/commoner_female_2_hail_152f9f1a.mp3", "Carthen Olaren? No, I haven't heard of him.", "", 2967499882, 516031018, Spawn) + elseif choice == 5 then + PlayFlavor(NPC, "voiceover/english/neriak/a_commoner/darklight_wood/service/commoner_female_2_hail_4328c090.mp3", "Have you heard anything about that cult of flame worshippers?", "", 2837642152, 2610770669, Spawn) + elseif choice == 6 then + PlayFlavor(NPC, "voiceover/english/neriak/a_commoner/darklight_wood/service/commoner_female_1_hail_8bd689db.mp3", "I traveled through Nektulos Forest once. I do not wish to return until the Dread Guard has moved deeper in.", "", 2428812410, 2772763963, Spawn) + else + end + +end + diff --git a/server/SpawnScripts/Darklight/acommoner_male.lua b/server/SpawnScripts/Darklight/acommoner_male.lua new file mode 100644 index 000000000..32a782382 --- /dev/null +++ b/server/SpawnScripts/Darklight/acommoner_male.lua @@ -0,0 +1,40 @@ +--[[ + Script Name : SpawnScripts/Darklight/acommoner_male.lua + Script Purpose : a commoner + Script Author : John Adams + Script Date : 2009.02.01 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +function spawn(NPC) + SetPlayerProximityFunction(NPC, 10, "InRange", "LeaveRange") +end + +function respawn(NPC) + spawn(NPC) +end + +function InRange(NPC, Spawn) +end + +function LeaveRange(NPC, Spawn) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + + choice = math.random(1,4) + + if choice == 1 then + PlayFlavor(NPC, "voiceover/english/neriak/a_commoner/darklight_wood/service/commoner_male_2_hail_58c66ab7.mp3", "I wonder if the fish from the Smoldering Lake cook faster or slower than regular fish.", "", 2182244469, 5251268, Spawn) + elseif choice == 2 then + PlayFlavor(NPC, "voiceover/english/neriak/a_commoner/darklight_wood/service/commoner_male_1_hail_b1bbdb6e.mp3", "I hear the Commonlands is a dreadful place to visit, yet bursting with opportunity.", "", 4265645297, 2801909364, Spawn) + elseif choice == 3 then + PlayFlavor(NPC, "voiceover/english/neriak/a_commoner/darklight_wood/service/commoner_male_1_hail_b0812908.mp3", "The Nektulos Forest is overrun by Thexians. They're scum.", "", 1643402937, 3453636706, Spawn) + elseif choice == 4 then + PlayFlavor(NPC, "voiceover/english/neriak/a_commoner/darklight_wood/service/commoner_male_2_hail_2c86194f.mp3", "The Wanderlust fair is a wonderful place to spend time.", "", 1622760460, 2576330323, Spawn) + else + end + +end + diff --git a/server/SpawnScripts/Darklight/acuriouscitizen.lua b/server/SpawnScripts/Darklight/acuriouscitizen.lua new file mode 100644 index 000000000..646698849 --- /dev/null +++ b/server/SpawnScripts/Darklight/acuriouscitizen.lua @@ -0,0 +1,27 @@ +--[[ + Script Name : SpawnScripts/Darklight/acuriouscitizen.lua + Script Purpose : a curious citizen + Script Author : John Adams + Script Date : 2009.02.01 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +QUEST_WANTED = 84 + +function spawn(NPC) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + + if HasCompletedQuest(Spawn, QUEST_WANTED) then + Say(NPC, "I heard you beat me to it. Ah well.", Spawn) + else + PlayFlavor(NPC, "voiceover/english/neriak/a_curious_citizen/darklight_wood/quest/hates_envy/curious_citizen_hail_db9fb451.mp3", "I wonder how well this bounty pays.", "", 3920277342, 17103451, Spawn) + end +end + diff --git a/server/SpawnScripts/Darklight/adiscardedweapon.lua b/server/SpawnScripts/Darklight/adiscardedweapon.lua new file mode 100644 index 000000000..68f029a72 --- /dev/null +++ b/server/SpawnScripts/Darklight/adiscardedweapon.lua @@ -0,0 +1,33 @@ +--[[ + Script Name : SpawnScripts/Darklight/adiscardedweapon.lua + Script Author : fearfx + Script Date : 2017.01.23 01:01:43 + Script Purpose : + : +--]] + +local OneMansWaste = 143 + +function spawn(NPC) + AddSpawnAccess(NPC, NPC) + SetPlayerProximityFunction(NPC, 50, "SpawnAccess", "SpawnAccess") + SetRequiredQuest(NPC, OneMansWaste, 1) +end + +function respawn(NPC) + spawn(NPC) +end + +function SpawnAccess(NPC, Spawn) + if HasQuest(Spawn, OneMansWaste) then + AddSpawnAccess(NPC, Spawn) + end +end + + +function casted_on(NPC, Spawn, SpellName) + if SpellName == "gather " then + Despawn(NPC) + SummonItem(Spawn, 6485) + end +end \ No newline at end of file diff --git a/server/SpawnScripts/Darklight/adocileslitherer.lua b/server/SpawnScripts/Darklight/adocileslitherer.lua new file mode 100644 index 000000000..e5af50dcf --- /dev/null +++ b/server/SpawnScripts/Darklight/adocileslitherer.lua @@ -0,0 +1,89 @@ +--[[ + Script Name : SpawnScripts/Darklight/adocileslitherer.lua + Script Author : fearfx + Script Date : 2017.01.21 10:01:20 + Script Purpose : + : +--]] + +local InfantileIngredients = 157 +local DarkLightZone = 034 + +function spawn(NPC) + choice = math.random(1, 4) + if choice == 1 then + clockwise1(NPC) + elseif choice == 2 then + clockwise2(NPC) + elseif choice == 3 then + counter_clockwise1(NPC) + elseif choice == 4 then + counter_clockwise2(NPC) + end +end + +function respawn(NPC) + spawn(NPC) +end + +function clockwise1(NPC) + x = GetX(NPC) + y = GetY(NPC) + z = GetZ(NPC) + MovementLoopAddLocation(NPC, x + 7 , y, z - 8 , 1, math.random(5, 15)) + MovementLoopAddLocation(NPC, x - 5 , y, z - 10, 1, math.random(5, 15)) + MovementLoopAddLocation(NPC, x - 10, y, z + 9 , 1, math.random(5, 15)) + MovementLoopAddLocation(NPC, x + 5 , y, z + 8 , 1, math.random(5, 15)) +end + +function clockwise2(NPC) + x = GetX(NPC) + y = GetY(NPC) + z = GetZ(NPC) + MovementLoopAddLocation(NPC, x + 2 , y, z - 8 , 1, math.random(5, 15)) + MovementLoopAddLocation(NPC, x - 7 , y, z - 5 , 1, math.random(5, 15)) + MovementLoopAddLocation(NPC, x , y, z + 6 , 1, math.random(5, 15)) + MovementLoopAddLocation(NPC, x + 9 , y, z + 1 , 1, math.random(5, 15)) +end + +function counter_clockwise1(NPC) + x = GetX(NPC) + y = GetY(NPC) + z = GetZ(NPC) + MovementLoopAddLocation(NPC, x - 7 , y, z + 8 , 1, math.random(5, 15)) + MovementLoopAddLocation(NPC, x + 5 , y, z + 10, 1, math.random(5, 15)) + MovementLoopAddLocation(NPC, x + 10, y, z - 9 , 1, math.random(5, 15)) + MovementLoopAddLocation(NPC, x - 5 , y, z - 8 , 1, math.random(5, 15)) +end + +function counter_clockwise2(NPC) + x = GetX(NPC) + y = GetY(NPC) + z = GetZ(NPC) + MovementLoopAddLocation(NPC, x - 2 , y, z + 8 , 1, math.random(5, 15)) + MovementLoopAddLocation(NPC, x + 7 , y, z + 5 , 1, math.random(5, 15)) + MovementLoopAddLocation(NPC, x , y, z - 6 , 1, math.random(5, 15)) + MovementLoopAddLocation(NPC, x - 9 , y, z - 1 , 1, math.random(5, 15)) +end + +function respawn(NPC) + spawn(NPC) +end + +function death(NPC, Spawn) + if HasQuest(Spawn, InfantileIngredients) and GetQuestStep(Spawn, InfantileIngredients) == 1 then + zone = GetZone(NPC) + local spawnAmount = math.random(1, 3) + x = GetX(NPC) + y = GetY(NPC) + z = GetZ(NPC) + heading = GetHeading(NPC) + while spawnAmount ~= 0 do + newSpawn = SpawnMob(zone, 341286, 1, x + math.random(-1, 1), y+ math.random(-1, 1), z+ math.random(-1, 1), heading+ math.random(-1, 1)) + if newSpawn ~= nil then + AddSpawnAccess(newSpawn, Spawn) + end + spawnAmount = spawnAmount - 1 + end + end +end \ No newline at end of file diff --git a/server/SpawnScripts/Darklight/afracturedlyricist.lua b/server/SpawnScripts/Darklight/afracturedlyricist.lua new file mode 100644 index 000000000..c172e752e --- /dev/null +++ b/server/SpawnScripts/Darklight/afracturedlyricist.lua @@ -0,0 +1,19 @@ +--[[ + Script Name : SpawnScripts/Darklight/afracturedlyricist.lua + Script Author : fearfx + Script Date : 2017.01.21 05:01:19 + Script Purpose : + : +--]] + +function spawn(NPC) + +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) +end + +function respawn(NPC) + spawn(NPC) +end diff --git a/server/SpawnScripts/Darklight/aghoulishNerian.lua b/server/SpawnScripts/Darklight/aghoulishNerian.lua new file mode 100644 index 000000000..b9ce164bb --- /dev/null +++ b/server/SpawnScripts/Darklight/aghoulishNerian.lua @@ -0,0 +1,23 @@ +--[[ + Script Name : SpawnScripts/Darklight/aghoulishNerian.lua + Script Author : theFoof + Script Date : 2013.11.27 10:11:09 + Script Purpose : + : +--]] + +function spawn(NPC) + local choice = math.random(1,2) + if choice == 1 then + SpawnSet(NPC, "model_type", "14043") + SpawnSet(NPC, "gender", "0") + end +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) +end + +function respawn(NPC) + spawn(NPC) +end \ No newline at end of file diff --git a/server/SpawnScripts/Darklight/aminer.lua b/server/SpawnScripts/Darklight/aminer.lua new file mode 100644 index 000000000..6f91f40b6 --- /dev/null +++ b/server/SpawnScripts/Darklight/aminer.lua @@ -0,0 +1,73 @@ +--[[ + Script Name : SpawnScripts/Darklight/aminer.lua + Script Purpose : a miner + Script Author : John Adams + Script Date : 2009.02.01 + Script Notes : Male Miner that does walk around newbie area +--]] + +function spawn(NPC) + MovementLoopAddLocation(NPC, -413.11, -62.87, 239.47, 3, 0) + MovementLoopAddLocation(NPC, -412.00, -62.87, 222.83, 3, 0) + MovementLoopAddLocation(NPC, -413.56, -62.87, 218.93, 3, 0) + MovementLoopAddLocation(NPC, -406.88, -62.87, 216.64, 3, 0) + MovementLoopAddLocation(NPC, -404.18, -62.87, 214.02, 3, 0) + MovementLoopAddLocation(NPC, -400.42, -62.87, 207.76, 3, 0) + MovementLoopAddLocation(NPC, -399.92, -62.54, 202.64, 3, 0) + MovementLoopAddLocation(NPC, -390.70, -62.87, 203.21, 3, 0) + MovementLoopAddLocation(NPC, -386.70, -62.87, 201.74, 3, 0) + MovementLoopAddLocation(NPC, -384.22, -62.87, 205.75, 3, 0) + MovementLoopAddLocation(NPC, -373.58, -62.87, 208.92, 3, 0) + MovementLoopAddLocation(NPC, -368.41, -62.87, 208.30, 3, 0) + MovementLoopAddLocation(NPC, -367.58, -62.87, 217.60, 3, 0) + MovementLoopAddLocation(NPC, -371.30, -62.87, 218.00, 3, 0) + MovementLoopAddLocation(NPC, -373.85, -62.87, 223.07, 3, 0) + MovementLoopAddLocation(NPC, -373.80, -62.87, 229.02, 3, 0) + MovementLoopAddLocation(NPC, -371.61, -62.87, 231.72, 3, 0) + MovementLoopAddLocation(NPC, -371.10, -62.87, 235.38, 3, 0) + MovementLoopAddLocation(NPC, -369.62, -62.87, 236.66, 3, 0) + MovementLoopAddLocation(NPC, -368.97, -62.87, 241.71, 3, 0) + MovementLoopAddLocation(NPC, -382.00, -62.87, 243.54, 3, 0) + MovementLoopAddLocation(NPC, -382.28, -62.87, 258.29, 3, 0) + MovementLoopAddLocation(NPC, -421.53, -63.49, 258.05, 3, 0) + MovementLoopAddLocation(NPC, -424.89, -63.26, 251.68, 3, 0) + MovementLoopAddLocation(NPC, -411.24, -62.87, 239.38, 3, 0) + MovementLoopAddLocation(NPC, -397.93, -62.87, 238.66, 3, 0) + MovementLoopAddLocation(NPC, -390.59, -62.87, 247.07, 3, 0) + MovementLoopAddLocation(NPC, -381.05, -62.87, 236.56, 3, 0) + MovementLoopAddLocation(NPC, -380.94, -62.87, 219.24, 3, 0) + MovementLoopAddLocation(NPC, -384.56, -62.87, 213.48, 3, 0) + MovementLoopAddLocation(NPC, -385.33, -62.87, 209.06, 3, 0) + MovementLoopAddLocation(NPC, -397.21, -62.87, 208.74, 3, 0) + MovementLoopAddLocation(NPC, -401.90, -62.87, 220.72, 3, 0) + MovementLoopAddLocation(NPC, -401.44, -62.87, 232.93, 3, 0) + MovementLoopAddLocation(NPC, -398.28, -62.87, 238.80, 3, 0) +end + +function respawn(NPC) + spawn(NPC) +end + +function InRange(NPC, Spawn) +end + +function LeaveRange(NPC, Spawn) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + + choice = math.random(1,4) + + if choice == 1 then + PlayFlavor(NPC, "voiceover/english/neriak/a_miner/darklight_wood/service/hates_envy/miner_male_1_hail_348fc1b3.mp3", "There hasn't been much work lately.", "", 4195669824, 624527790, Spawn) + elseif choice == 2 then + PlayFlavor(NPC, "voiceover/english/neriak/a_miner/darklight_wood/service/hates_envy/miner_male_1_hail_e6dc69ea.mp3", "I can't believe how quickly those elementals poured from the earth!", "", 3126552969, 2583209112, Spawn) + elseif choice == 3 then + PlayFlavor(NPC, "voiceover/english/neriak/a_miner/darklight_wood/service/hates_envy/miner_male_2_hail_a498a89c.mp3", "For Neriak and Cristanos!", "", 361255983, 2933844136, Spawn) + elseif choice == 4 then + PlayFlavor(NPC, "voiceover/english/neriak/a_miner/darklight_wood/service/hates_envy/miner_male_1_hail_c0c3ad78.mp3", "Things are a bit rougher now, but the time off is welcome.", "", 3143475956, 184613742, Spawn) + end + +end + diff --git a/server/SpawnScripts/Darklight/aminer_female.lua b/server/SpawnScripts/Darklight/aminer_female.lua new file mode 100644 index 000000000..d6dfa9a3d --- /dev/null +++ b/server/SpawnScripts/Darklight/aminer_female.lua @@ -0,0 +1,35 @@ +--[[ + Script Name : SpawnScripts/Darklight/aminer_female.lua + Script Purpose : a miner + Script Author : John Adams + Script Date : 2009.02.01 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +function spawn(NPC) +end + +function respawn(NPC) + spawn(NPC) +end + + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + + if HasCompletedQuest(Spawn, 78) then + Say(NPC, "Heard you got rid of the elemtentals, thanks!", Spawn) + else + choice = math.random(1,4) + if choice == 1 then + PlayFlavor(NPC, "voiceover/english/neriak/a_miner/darklight_wood/service/hates_envy/miner_female_2_hail_f8ea28f0.mp3", "I've had time to visit Neriak more often lately.", "", 2433324308, 3739464743, Spawn) + elseif choice == 2 then + PlayFlavor(NPC, "voiceover/english/neriak/a_miner/darklight_wood/service/hates_envy/miner_female_1_hail_d3092dcb.mp3", "There's not a lot of work around here for a miner... not with the Sablevein Tear in the state it's in.", "", 3088156596, 943162980, Spawn) + elseif choice == 3 then + PlayFlavor(NPC, "voiceover/english/neriak/a_miner/darklight_wood/service/hates_envy/miner_female_2_hail_d1d3e02e.mp3", "I've been selling pelts to Fileyl, he pays pretty well for them.", "", 2689657283, 428093927, Spawn) + elseif choice == 4 then + PlayFlavor(NPC, "voiceover/english/neriak/a_miner/darklight_wood/service/hates_envy/miner_female_1_hail_f0d56889.mp3", "We aren't exactly part of Neriak--and we more freely accept those who are not citizens--but we are definitely close.", "", 1234196112, 3581833599, Spawn) + end + end +end + diff --git a/server/SpawnScripts/Darklight/aminer_male.lua b/server/SpawnScripts/Darklight/aminer_male.lua new file mode 100644 index 000000000..c7a18d45d --- /dev/null +++ b/server/SpawnScripts/Darklight/aminer_male.lua @@ -0,0 +1,74 @@ +--[[ + Script Name : SpawnScripts/Darklight/aminer_male.lua + Script Purpose : a miner + Script Author : John Adams + Script Date : 2009.02.01 + Script Notes : +--]] + +function spawn(NPC) + if GetSpawnLocationID(NPC) == 105088 then + SetMovement(NPC) + end +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + + if HasCompletedQuest(Spawn, 78) then + Say(NPC, "Heard you got rid of the elemtentals, thanks!", Spawn) + else + choice = math.random(1,4) + if choice == 1 then + PlayFlavor(NPC, "voiceover/english/neriak/a_miner/darklight_wood/service/hates_envy/miner_male_1_hail_348fc1b3.mp3", "There hasn't been much work lately.", "", 4195669824, 624527790, Spawn) + elseif choice == 2 then + PlayFlavor(NPC, "voiceover/english/neriak/a_miner/darklight_wood/service/hates_envy/miner_male_1_hail_e6dc69ea.mp3", "I can't believe how quickly those elementals poured from the earth!", "", 3126552969, 2583209112, Spawn) + elseif choice == 3 then + PlayFlavor(NPC, "voiceover/english/neriak/a_miner/darklight_wood/service/hates_envy/miner_male_2_hail_a498a89c.mp3", "For Neriak and Cristanos!", "", 361255983, 2933844136, Spawn) + elseif choice == 4 then + PlayFlavor(NPC, "voiceover/english/neriak/a_miner/darklight_wood/service/hates_envy/miner_male_1_hail_c0c3ad78.mp3", "Things are a bit rougher now, but the time off is welcome.", "", 3143475956, 184613742, Spawn) + end + end +end + +function SetMovement(NPC) + MovementLoopAddLocation(NPC, -413.11, -62.87, 239.47, 2, 0) + MovementLoopAddLocation(NPC, -412.00, -62.87, 222.83, 2, 0) + MovementLoopAddLocation(NPC, -413.56, -62.87, 218.93, 2, 0) + MovementLoopAddLocation(NPC, -406.88, -62.87, 216.64, 2, 0) + MovementLoopAddLocation(NPC, -404.18, -62.87, 214.02, 2, 0) + MovementLoopAddLocation(NPC, -400.42, -62.87, 207.76, 2, 0) + MovementLoopAddLocation(NPC, -399.92, -62.54, 202.64, 2, 0) + MovementLoopAddLocation(NPC, -390.70, -62.87, 203.21, 2, 0) + MovementLoopAddLocation(NPC, -386.70, -62.87, 201.74, 2, 0) + MovementLoopAddLocation(NPC, -384.22, -62.87, 205.75, 2, 0) + MovementLoopAddLocation(NPC, -373.58, -62.87, 208.92, 2, 0) + MovementLoopAddLocation(NPC, -368.41, -62.87, 208.30, 2, 0) + MovementLoopAddLocation(NPC, -367.58, -62.87, 217.60, 2, 0) + MovementLoopAddLocation(NPC, -371.30, -62.87, 218.00, 2, 0) + MovementLoopAddLocation(NPC, -373.85, -62.87, 223.07, 2, 0) + MovementLoopAddLocation(NPC, -373.80, -62.87, 229.02, 2, 0) + MovementLoopAddLocation(NPC, -371.61, -62.87, 231.72, 2, 0) + MovementLoopAddLocation(NPC, -371.10, -62.87, 235.38, 2, 0) + MovementLoopAddLocation(NPC, -369.62, -62.87, 236.66, 2, 0) + MovementLoopAddLocation(NPC, -368.97, -62.87, 241.71, 2, 0) + MovementLoopAddLocation(NPC, -382.00, -62.87, 243.54, 2, 0) + MovementLoopAddLocation(NPC, -382.28, -62.87, 258.29, 2, 0) + MovementLoopAddLocation(NPC, -421.53, -63.49, 258.05, 2, 0) + MovementLoopAddLocation(NPC, -424.89, -63.26, 251.68, 2, 0) + MovementLoopAddLocation(NPC, -411.24, -62.87, 239.38, 2, 0) + MovementLoopAddLocation(NPC, -397.93, -62.87, 238.66, 2, 0) + MovementLoopAddLocation(NPC, -390.59, -62.87, 247.07, 2, 0) + MovementLoopAddLocation(NPC, -381.05, -62.87, 236.56, 2, 0) + MovementLoopAddLocation(NPC, -380.94, -62.87, 219.24, 2, 0) + MovementLoopAddLocation(NPC, -384.56, -62.87, 213.48, 2, 0) + MovementLoopAddLocation(NPC, -385.33, -62.87, 209.06, 2, 0) + MovementLoopAddLocation(NPC, -397.21, -62.87, 208.74, 2, 0) + MovementLoopAddLocation(NPC, -401.90, -62.87, 220.72, 2, 0) + MovementLoopAddLocation(NPC, -401.44, -62.87, 232.93, 2, 0) + MovementLoopAddLocation(NPC, -398.28, -62.87, 238.80, 2, 0) +end \ No newline at end of file diff --git a/server/SpawnScripts/Darklight/amolderingsoldier.lua b/server/SpawnScripts/Darklight/amolderingsoldier.lua new file mode 100644 index 000000000..be7a6f3de --- /dev/null +++ b/server/SpawnScripts/Darklight/amolderingsoldier.lua @@ -0,0 +1,80 @@ +--[[ + Script Name : SpawnScripts/Darklight/amolderingsoldier.lua + Script Purpose : A Moldering Soldier ID 340084 + Script Author : Cynnar + Script Date : 12/30/2015 + Script Notes : Adds a scrap of armor drop for quest Picking Up Slack (Quest ID 139) + Script Notes : Currently using scrap metal (item ID 11996) in place of a scrap of armor. +--]] +local PickingUpSlack = 139 +local AGuardInsignia = 140 + +function spawn(NPC) + choice = math.random(1, 4) + if choice == 1 then + clockwise1(NPC) + elseif choice == 2 then + clockwise2(NPC) + elseif choice == 3 then + counter_clockwise1(NPC) + elseif choice == 4 then + counter_clockwise2(NPC) + end +end + +function respawn(NPC) + spawn(NPC) +end + +function clockwise1(NPC) + x = GetX(NPC) + y = GetY(NPC) + z = GetZ(NPC) + MovementLoopAddLocation(NPC, x + 7 , y, z - 8 , 1, math.random(5, 15)) + MovementLoopAddLocation(NPC, x - 5 , y, z - 10, 1, math.random(5, 15)) + MovementLoopAddLocation(NPC, x - 10, y, z + 9 , 1, math.random(5, 15)) + MovementLoopAddLocation(NPC, x + 5 , y, z + 8 , 1, math.random(5, 15)) +end + +function clockwise2(NPC) + x = GetX(NPC) + y = GetY(NPC) + z = GetZ(NPC) + MovementLoopAddLocation(NPC, x + 2 , y, z - 8 , 1, math.random(5, 15)) + MovementLoopAddLocation(NPC, x - 7 , y, z - 5 , 1, math.random(5, 15)) + MovementLoopAddLocation(NPC, x , y, z + 6 , 1, math.random(5, 15)) + MovementLoopAddLocation(NPC, x + 9 , y, z + 1 , 1, math.random(5, 15)) +end + +function counter_clockwise1(NPC) + x = GetX(NPC) + y = GetY(NPC) + z = GetZ(NPC) + MovementLoopAddLocation(NPC, x - 7 , y, z + 8 , 1, math.random(5, 15)) + MovementLoopAddLocation(NPC, x + 5 , y, z + 10, 1, math.random(5, 15)) + MovementLoopAddLocation(NPC, x + 10, y, z - 9 , 1, math.random(5, 15)) + MovementLoopAddLocation(NPC, x - 5 , y, z - 8 , 1, math.random(5, 15)) +end + +function counter_clockwise2(NPC) + x = GetX(NPC) + y = GetY(NPC) + z = GetZ(NPC) + MovementLoopAddLocation(NPC, x - 2 , y, z + 8 , 1, math.random(5, 15)) + MovementLoopAddLocation(NPC, x + 7 , y, z + 5 , 1, math.random(5, 15)) + MovementLoopAddLocation(NPC, x , y, z - 6 , 1, math.random(5, 15)) + MovementLoopAddLocation(NPC, x - 9 , y, z - 1 , 1, math.random(5, 15)) +end + +function death(NPC, Spawn) + if HasQuest(Spawn, PickingUpSlack) then + if GetQuestStep(Spawn, PickingUpSlack) == 1 then + AddLootItem(NPC, 11996) + end + elseif HasCompletedQuest(Spawn, PickingUpSlack) and not HasCompletedQuest(Spawn, AGuardInsignia) and not HasQuest(Spawn, AGuardInsignia) then + local chance = math.random(100) + if not HasItem(Spawn, 2333) and chance <= 45 then + AddLootItem(NPC, 2333) + end + end +end \ No newline at end of file diff --git a/server/SpawnScripts/Darklight/anArcaneScienceapprentice.lua b/server/SpawnScripts/Darklight/anArcaneScienceapprentice.lua new file mode 100644 index 000000000..f2061bce9 --- /dev/null +++ b/server/SpawnScripts/Darklight/anArcaneScienceapprentice.lua @@ -0,0 +1,99 @@ +--[[ + Script Name : SpawnScripts/Darklight/anArcaneScienceapprentice.lua + Script Purpose : an Arcane Science apprentice + Script Author : John Adams + Script Date : 2009.01.31 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +function spawn(NPC) + SetPlayerProximityFunction(NPC, 10, "InRange", "LeaveRange") +end + +function respawn(NPC) + spawn(NPC) +end + +function InRange(NPC, Spawn) +end + +function LeaveRange(NPC, Spawn) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_2_1008.mp3", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "You've reported this to the Academy?", "dlg_9_1") + AddConversationOption(conversation, "This is no time to stand back and gawk!") + StartConversation(conversation, NPC, Spawn, "This is not good. These Void tempests have been tainting Norrath, but now attacking beasts are being expelled from them!") + if convo==10 then + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_1_1008.mp3", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "You've reported this to the Academy?", "dlg_10_1") + AddConversationOption(conversation, "This is no time to stand back and gawk!") + StartConversation(conversation, NPC, Spawn, "This is not good. These Void tempests have been tainting Norrath, but now attacking beasts are being expelled from them!") + end + + if convo==11 then + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_1_1008.mp3", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "You've reported this to the Academy?", "dlg_11_1") + AddConversationOption(conversation, "This is no time to stand back and gawk!") + StartConversation(conversation, NPC, Spawn, "This is not good. These Void tempests have been tainting Norrath, but now attacking beasts are being expelled from them!") + end + +end + +function dlg_9_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Yes, I will!") + AddConversationOption(conversation, "If I find any.", "dlg_9_2") + AddConversationOption(conversation, "I don't think so.") + StartConversation(conversation, NPC, Spawn, "That is for certain! If I had any fighting skills I would proudly be in the thick of it, myself. Will you join in the battle against the Void creatures?") +end + +function dlg_9_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "I sure will.") + StartConversation(conversation, NPC, Spawn, "Excellent! If you find anything of interest to our research while you battle the onslaught, alert me.") +end + +function dlg_10_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "I can help.", "dlg_10_2") + AddConversationOption(conversation, "Pardon me as I find someplace to hide.") + StartConversation(conversation, NPC, Spawn, "Of course! The masters are recruiting adventurers to battle them. But they are tenacious!") +end + +function dlg_10_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "I sure will.", "dlg_10_3") + StartConversation(conversation, NPC, Spawn, "Excellent! If you find anything of interest to our research while you battle the onslaught, alert me.") +end + +function dlg_11_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_2_1008.mp3", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "You've reported this to the Academy?") + AddConversationOption(conversation, "This is no time to stand back and gawk!") + StartConversation(conversation, NPC, Spawn, "This is not good. These Void tempests have been tainting Norrath, but now attacking beasts are being expelled from them!") +end + +--[[ raw_conversations + PlayFlavor(NPC, "", "I will honor the masters back at the academy with every detail that I can record for them.", "", 1689589577, 4560189, Spawn) +--]] + diff --git a/server/SpawnScripts/Darklight/an_untamed_spirit_circle_clockwise_small_01.lua b/server/SpawnScripts/Darklight/an_untamed_spirit_circle_clockwise_small_01.lua new file mode 100644 index 000000000..ea1b22cb4 --- /dev/null +++ b/server/SpawnScripts/Darklight/an_untamed_spirit_circle_clockwise_small_01.lua @@ -0,0 +1,35 @@ +--[[ + Script Name : + Script Purpose : + Script Author : + Script Date : + Script Notes : +--]] + +function spawn(NPC) + x = GetX(NPC) + y = GetY(NPC) + z = GetZ(NPC) + MovementLoopAddLocation(NPC, x + 7 , y, z - 8 , 2, math.random(5, 15)) + MovementLoopAddLocation(NPC, x - 5 , y, z - 10, 2, math.random(5, 15)) + MovementLoopAddLocation(NPC, x - 10, y, z + 9 , 2, math.random(5, 15)) + MovementLoopAddLocation(NPC, x + 5 , y, z + 8 , 2, math.random(5, 15)) +end + +function hailed(NPC, Spawn) +end + +function respawn(NPC) +end + +function death(NPC, Spawn) + rand = math.random(0, 100) + if rand <= 20 then + choice = math.random(1, 2) + if choice == 1 then + PlayFlavor(NPC, "voiceover/english/ghost_darkelf_base_1/ft/ghost/ghost_darkelf_base_1_1_death_gf_b5958785.mp3", "Hold them and I'll return with others like us!", "", 3769472925, 2964757475, Spawn) + else + Say(NPC, "The others will be back for you.", Spawn) + end + end +end \ No newline at end of file diff --git a/server/SpawnScripts/Darklight/an_untamed_spirit_circle_clockwise_small_02.lua b/server/SpawnScripts/Darklight/an_untamed_spirit_circle_clockwise_small_02.lua new file mode 100644 index 000000000..28edf1bf4 --- /dev/null +++ b/server/SpawnScripts/Darklight/an_untamed_spirit_circle_clockwise_small_02.lua @@ -0,0 +1,35 @@ +--[[ + Script Name : + Script Purpose : + Script Author : + Script Date : + Script Notes : +--]] + +function spawn(NPC) + x = GetX(NPC) + y = GetY(NPC) + z = GetZ(NPC) + MovementLoopAddLocation(NPC, x + 2 , y, z - 8 , 2, math.random(5, 15)) + MovementLoopAddLocation(NPC, x - 7 , y, z - 5 , 2, math.random(5, 15)) + MovementLoopAddLocation(NPC, x , y, z + 6 , 2, math.random(5, 15)) + MovementLoopAddLocation(NPC, x + 9 , y, z + 1 , 2, math.random(5, 15)) +end + +function hailed(NPC, Spawn) +end + +function respawn(NPC) +end + +function death(NPC, Spawn) + rand = math.random(0, 100) + if rand <= 20 then + choice = math.random(1, 2) + if choice == 1 then + PlayFlavor(NPC, "voiceover/english/ghost_darkelf_base_1/ft/ghost/ghost_darkelf_base_1_1_death_gf_b5958785.mp3", "Hold them and I'll return with others like us!", "", 3769472925, 2964757475, Spawn) + else + Say(NPC, "The others will be back for you.", Spawn) + end + end +end \ No newline at end of file diff --git a/server/SpawnScripts/Darklight/an_untamed_spirit_circle_counterclockwise_small_01.lua b/server/SpawnScripts/Darklight/an_untamed_spirit_circle_counterclockwise_small_01.lua new file mode 100644 index 000000000..b08000368 --- /dev/null +++ b/server/SpawnScripts/Darklight/an_untamed_spirit_circle_counterclockwise_small_01.lua @@ -0,0 +1,35 @@ +--[[ + Script Name : + Script Purpose : + Script Author : + Script Date : + Script Notes : +--]] + +function spawn(NPC) + x = GetX(NPC) + y = GetY(NPC) + z = GetZ(NPC) + MovementLoopAddLocation(NPC, x + 7 , y, z - 8 , 2, math.random(5, 15)) + MovementLoopAddLocation(NPC, x - 5 , y, z - 10, 2, math.random(5, 15)) + MovementLoopAddLocation(NPC, x - 10, y, z + 9 , 2, math.random(5, 15)) + MovementLoopAddLocation(NPC, x + 5 , y, z + 8 , 2, math.random(5, 15)) +end + +function hailed(NPC, Spawn) +end + +function respawn(NPC) +end + +function death(NPC, Spawn) + rand = math.random(0, 100) + if rand <= 20 then + choice = math.random(1, 2) + if choice == 1 then + PlayFlavor(NPC, "voiceover/english/ghost_darkelf_base_1/ft/ghost/ghost_darkelf_base_1_1_death_gf_b5958785.mp3", "Hold them and I'll return with others like us!", "", 3769472925, 2964757475, Spawn) + else + Say(NPC, "The others will be back for you.", Spawn) + end + end +end diff --git a/server/SpawnScripts/Darklight/an_untamed_spirit_circle_counterclockwise_small_02.lua b/server/SpawnScripts/Darklight/an_untamed_spirit_circle_counterclockwise_small_02.lua new file mode 100644 index 000000000..e9f2c7457 --- /dev/null +++ b/server/SpawnScripts/Darklight/an_untamed_spirit_circle_counterclockwise_small_02.lua @@ -0,0 +1,36 @@ +--[[ + Script Name : + Script Purpose : + Script Author : + Script Date : + Script Notes : +--]] + +function spawn(NPC) + x = GetX(NPC) + y = GetY(NPC) + z = GetZ(NPC) + MovementLoopAddLocation(NPC, x - 2 , y, z + 8 , 2, math.random(5, 15)) + MovementLoopAddLocation(NPC, x + 7 , y, z + 5 , 2, math.random(5, 15)) + MovementLoopAddLocation(NPC, x , y, z - 6 , 2, math.random(5, 15)) + MovementLoopAddLocation(NPC, x - 9 , y, z - 1 , 2, math.random(5, 15)) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) +end + +function respawn(NPC) +end + +function death(NPC, Spawn) + rand = math.random(0, 100) + if rand <= 20 then + choice = math.random(1, 2) + if choice == 1 then + PlayFlavor(NPC, "voiceover/english/ghost_darkelf_base_1/ft/ghost/ghost_darkelf_base_1_1_death_gf_b5958785.mp3", "Hold them and I'll return with others like us!", "", 3769472925, 2964757475, Spawn) + else + Say(NPC, "The others will be back for you.", Spawn) + end + end +end diff --git a/server/SpawnScripts/Darklight/anagitatedslitherer.lua b/server/SpawnScripts/Darklight/anagitatedslitherer.lua new file mode 100644 index 000000000..bbb21381e --- /dev/null +++ b/server/SpawnScripts/Darklight/anagitatedslitherer.lua @@ -0,0 +1,69 @@ +--[[ + Script Name : SpawnScripts/Darklight/anagitatedslitherer.lua + Script Author : fearfx + Script Date : 2017.01.21 10:01:16 + Script Purpose : + : +--]] + +function spawn(NPC) + choice = math.random(1, 4) + if choice == 1 then + clockwise1(NPC) + elseif choice == 2 then + clockwise2(NPC) + elseif choice == 3 then + counter_clockwise1(NPC) + elseif choice == 4 then + counter_clockwise2(NPC) + end +end + +function respawn(NPC) + spawn(NPC) +end + +function clockwise1(NPC) + x = GetX(NPC) + y = GetY(NPC) + z = GetZ(NPC) + MovementLoopAddLocation(NPC, x + 7 , y, z - 8 , 1, math.random(5, 15)) + MovementLoopAddLocation(NPC, x - 5 , y, z - 10, 1, math.random(5, 15)) + MovementLoopAddLocation(NPC, x - 10, y, z + 9 , 1, math.random(5, 15)) + MovementLoopAddLocation(NPC, x + 5 , y, z + 8 , 1, math.random(5, 15)) +end + +function clockwise2(NPC) + x = GetX(NPC) + y = GetY(NPC) + z = GetZ(NPC) + MovementLoopAddLocation(NPC, x + 2 , y, z - 8 , 1, math.random(5, 15)) + MovementLoopAddLocation(NPC, x - 7 , y, z - 5 , 1, math.random(5, 15)) + MovementLoopAddLocation(NPC, x , y, z + 6 , 1, math.random(5, 15)) + MovementLoopAddLocation(NPC, x + 9 , y, z + 1 , 1, math.random(5, 15)) +end + +function counter_clockwise1(NPC) + x = GetX(NPC) + y = GetY(NPC) + z = GetZ(NPC) + MovementLoopAddLocation(NPC, x - 7 , y, z + 8 , 1, math.random(5, 15)) + MovementLoopAddLocation(NPC, x + 5 , y, z + 10, 1, math.random(5, 15)) + MovementLoopAddLocation(NPC, x + 10, y, z - 9 , 1, math.random(5, 15)) + MovementLoopAddLocation(NPC, x - 5 , y, z - 8 , 1, math.random(5, 15)) +end + +function counter_clockwise2(NPC) + x = GetX(NPC) + y = GetY(NPC) + z = GetZ(NPC) + MovementLoopAddLocation(NPC, x - 2 , y, z + 8 , 1, math.random(5, 15)) + MovementLoopAddLocation(NPC, x + 7 , y, z + 5 , 1, math.random(5, 15)) + MovementLoopAddLocation(NPC, x , y, z - 6 , 1, math.random(5, 15)) + MovementLoopAddLocation(NPC, x - 9 , y, z - 1 , 1, math.random(5, 15)) +end + +function death(NPC, Spawn) + AddLootItem(NPC, 11996) + +end \ No newline at end of file diff --git a/server/SpawnScripts/Darklight/anuntamedspirit.lua b/server/SpawnScripts/Darklight/anuntamedspirit.lua new file mode 100644 index 000000000..b2b22ba73 --- /dev/null +++ b/server/SpawnScripts/Darklight/anuntamedspirit.lua @@ -0,0 +1,28 @@ +--[[ + Script Name : SpawnScripts/Darklight/anuntamedspirit.lua + Script Purpose : an untamed spirit + Script Author : John Adams + Script Date : 2009.02.01 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +function spawn(NPC) + SetPlayerProximityFunction(NPC, 10, "InRange", "LeaveRange") +end + +function respawn(NPC) + spawn(NPC) +end + +function InRange(NPC, Spawn) +end + +function LeaveRange(NPC, Spawn) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + + PlayFlavor(NPC, "voiceover/english/ghost_darkelf_base_1/ft/ghost/ghost_darkelf_base_1_1_death_gf_b5958785.mp3", "Hold them and I'll return with others like us!", "", 3769472925, 2964757475, Spawn) +end + diff --git a/server/SpawnScripts/Darklight/anuntamedspirit_female.lua b/server/SpawnScripts/Darklight/anuntamedspirit_female.lua new file mode 100644 index 000000000..f39366fe7 --- /dev/null +++ b/server/SpawnScripts/Darklight/anuntamedspirit_female.lua @@ -0,0 +1,20 @@ +--[[ + Script Name : SpawnScripts/Darklight/anuntamedspirit_female.lua + Script Purpose : an untamed spirit + Script Author : John Adams + Script Date : 2009.02.01 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +function death(NPC, Spawn) + rand = math.random(0, 100) + if rand <= 20 then + choice = math.random(1, 2) + if choice == 1 then + PlayFlavor(NPC, "voiceover/english/ghost_darkelf_base_1/ft/ghost/ghost_darkelf_base_1_1_death_gf_b5958785.mp3", "Hold them and I'll return with others like us!", "", 3769472925, 2964757475, Spawn) + else + Say(NPC, "The others will be back for you.", Spawn) + end + end +end + diff --git a/server/SpawnScripts/Darklight/anuntamedspirit_male.lua b/server/SpawnScripts/Darklight/anuntamedspirit_male.lua new file mode 100644 index 000000000..37b282712 --- /dev/null +++ b/server/SpawnScripts/Darklight/anuntamedspirit_male.lua @@ -0,0 +1,28 @@ +--[[ + Script Name : + Script Purpose : + Script Author : + Script Date : + Script Notes : +--]] + +function spawn(NPC) +end + +function hailed(NPC, Spawn) +end + +function respawn(NPC) +end + +function death(NPC, Spawn) + rand = math.random(0, 100) + if rand <= 20 then + choice = math.random(1, 2) + if choice == 1 then + PlayFlavor(NPC, "voiceover/english/ghost_darkelf_base_1/ft/ghost/ghost_darkelf_base_1_1_death_gf_b5958785.mp3", "Hold them and I'll return with others like us!", "", 3769472925, 2964757475, Spawn) + else + Say(NPC, "The others will be back for you.", Spawn) + end + end +end diff --git a/server/SpawnScripts/Darklight/apurespirit.lua b/server/SpawnScripts/Darklight/apurespirit.lua new file mode 100644 index 000000000..a39ec68f5 --- /dev/null +++ b/server/SpawnScripts/Darklight/apurespirit.lua @@ -0,0 +1,40 @@ +--[[ + Script Name : SpawnScripts/Darklight/apurespirit.lua + Script Purpose : Add spawn access and update for queset Reaping (152) + Script Author : Cynnar + Script Date : 1/3/2016 + Script Notes : a pure spirit (341050) +--]] +local Reaping = 152 + + +function spawn(NPC) + AddSpawnAccess(NPC, NPC) + SetPlayerProximityFunction(NPC, 50, "SpawnAccess", "SpawnAccess") +end + +function respawn(NPC) + spawn(NPC) +end + +function casted_on(NPC, Spawn, SpellName) + if SpellName == "Reap" then + if HasQuest(Spawn, Reaping) and HasItem(Spawn, 48173) then + AddStepProgress(Spawn, Reaping, 1, 1) + Despawn(NPC) + else + SetStepComplete(Spawn, Reaping, 2) + end + + end +end + +function SpawnAccess(NPC, Spawn) + if HasQuest(Spawn, Reaping) then + AddSpawnAccess(NPC, Spawn) + elseif HasQuest(Spawn, Reaping) and GetQuestStep(Spawn, Reaping ) < 2 then + AddSpawnAccess(NPC, Spawn) + else + RemoveSpawnAccess(NPC, Spawn) + end +end \ No newline at end of file diff --git a/server/SpawnScripts/Darklight/ascarwurm.lua b/server/SpawnScripts/Darklight/ascarwurm.lua new file mode 100644 index 000000000..f8057819f --- /dev/null +++ b/server/SpawnScripts/Darklight/ascarwurm.lua @@ -0,0 +1,23 @@ +--[[ + Script Name : SpawnScripts/Darklight/ascarwurm.lua + Script Author : Foof + Script Date : 2013.11.17 + Script Purpose : +--]] + +require"SpawnScripts/Generic/generic_fish_movement" + +function spawn(NPC) + local choice = math.random(1,2) + if choice == 1 then + SpawnSet(NPC, "model_type", "197") + end +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) +end \ No newline at end of file diff --git a/server/SpawnScripts/Darklight/astrangeplant.lua b/server/SpawnScripts/Darklight/astrangeplant.lua new file mode 100644 index 000000000..795b4b5f8 --- /dev/null +++ b/server/SpawnScripts/Darklight/astrangeplant.lua @@ -0,0 +1,33 @@ +--[[ + Script Name : SpawnScripts/Darklight/astrangeplant.lua + Script Purpose : Quest Giver + Script Author : fearfx + Script Date : 19/01/2017 + Script Notes : +--]] + +local AStrangeFind = 187 + +function spawn(NPC) + AddSpawnAccess(NPC, NPC) + SetPlayerProximityFunction(NPC, 10, "SpawnAccess", "SpawnAccess") +end + +function respawn(NPC) + spawn(NPC) +end + +function SpawnAccess(NPC, Spawn) + if not HasQuest(Spawn, AStrangeFind) and not HasItem(Spawn, 13423) then + AddSpawnAccess(NPC, Spawn) + else + RemoveSpawnAccess(NPC, Spawn) + end +end + +function casted_on(NPC, Spawn, SpellName) + if SpellName == "Gathering" and not HasItem(Player, 13423) then + SummonItem(Spawn, 13423) + RemoveSpawnAccess(NPC, Spawn) + end +end \ No newline at end of file diff --git a/server/SpawnScripts/Darklight/astunsporemushroom.lua b/server/SpawnScripts/Darklight/astunsporemushroom.lua new file mode 100644 index 000000000..48254072e --- /dev/null +++ b/server/SpawnScripts/Darklight/astunsporemushroom.lua @@ -0,0 +1,34 @@ +--[[ + Script Name : SpawnScripts/Darklight/astunsporemushroom.lua + Script Author : fearfx + Script Date : 2017.01.23 01:01:06 + Script Purpose : + : +--]] + + +local StunningRevelation = 156 + +function spawn(NPC) + AddSpawnAccess(NPC, NPC) + SetPlayerProximityFunction(NPC, 50, "SpawnAccess", "SpawnAccess") + SetRequiredQuest(NPC, StunningRevelation, 1) +end + +function respawn(NPC) + spawn(NPC) +end + +function SpawnAccess(NPC, Spawn) + if HasQuest(Spawn, StunningRevelation) then + AddSpawnAccess(NPC, Spawn) + end +end + + +function casted_on(NPC, Spawn, SpellName) + if SpellName == "gather " then + Despawn(NPC) + SummonItem(Spawn, 13532) + end +end \ No newline at end of file diff --git a/server/SpawnScripts/Darklight/awellspringcub.lua b/server/SpawnScripts/Darklight/awellspringcub.lua new file mode 100644 index 000000000..6ee0db13b --- /dev/null +++ b/server/SpawnScripts/Darklight/awellspringcub.lua @@ -0,0 +1,81 @@ +--[[ + Script Name : Quests/Darklight/awellspringcub.lua + Script Purpose : for the spawn "a wellspring cub" (340061) + Script Author : Cynnar + Script Date : 2/5/2016 + Script Notes : +--]] + +local DrawUponWellsprings = 155 + +function spawn(NPC) + choice = math.random(1, 4) + if choice == 1 then + clockwise1(NPC) + elseif choice == 2 then + clockwise2(NPC) + elseif choice == 3 then + counter_clockwise1(NPC) + elseif choice == 4 then + counter_clockwise2(NPC) + end +end + +function respawn(NPC) + spawn(NPC) +end + +function casted_on(NPC, Caster, SpellName) + if SpellName == "Leash" then + if GetQuestStep(Caster, DrawUponWellsprings) == 1 then + if GetTempVariable(Caster, "cub") == nil then + SetTempVariable(Caster, "cub", NPC) + SpawnSet(NPC, "attackable", "0") + SpawnSet(NPC, "show_level", "0") + SetFollowTarget(NPC, Caster) + SetSpeed(NPC, 9) + ToggleFollow(NPC) + end + end + end +end + +function clockwise1(NPC) + x = GetX(NPC) + y = GetY(NPC) + z = GetZ(NPC) + MovementLoopAddLocation(NPC, x + 7 , y, z - 8 , 1, math.random(5, 15)) + MovementLoopAddLocation(NPC, x - 5 , y, z - 10, 1, math.random(5, 15)) + MovementLoopAddLocation(NPC, x - 10, y, z + 9 , 1, math.random(5, 15)) + MovementLoopAddLocation(NPC, x + 5 , y, z + 8 , 1, math.random(5, 15)) +end + +function clockwise2(NPC) + x = GetX(NPC) + y = GetY(NPC) + z = GetZ(NPC) + MovementLoopAddLocation(NPC, x + 2 , y, z - 8 , 1, math.random(5, 15)) + MovementLoopAddLocation(NPC, x - 7 , y, z - 5 , 1, math.random(5, 15)) + MovementLoopAddLocation(NPC, x , y, z + 6 , 1, math.random(5, 15)) + MovementLoopAddLocation(NPC, x + 9 , y, z + 1 , 1, math.random(5, 15)) +end + +function counter_clockwise1(NPC) + x = GetX(NPC) + y = GetY(NPC) + z = GetZ(NPC) + MovementLoopAddLocation(NPC, x - 7 , y, z + 8 , 1, math.random(5, 15)) + MovementLoopAddLocation(NPC, x + 5 , y, z + 10, 1, math.random(5, 15)) + MovementLoopAddLocation(NPC, x + 10, y, z - 9 , 1, math.random(5, 15)) + MovementLoopAddLocation(NPC, x - 5 , y, z - 8 , 1, math.random(5, 15)) +end + +function counter_clockwise2(NPC) + x = GetX(NPC) + y = GetY(NPC) + z = GetZ(NPC) + MovementLoopAddLocation(NPC, x - 2 , y, z + 8 , 1, math.random(5, 15)) + MovementLoopAddLocation(NPC, x + 7 , y, z + 5 , 1, math.random(5, 15)) + MovementLoopAddLocation(NPC, x , y, z - 6 , 1, math.random(5, 15)) + MovementLoopAddLocation(NPC, x - 9 , y, z - 1 , 1, math.random(5, 15)) +end \ No newline at end of file diff --git a/server/SpawnScripts/Darklight/discardedwood.lua b/server/SpawnScripts/Darklight/discardedwood.lua new file mode 100644 index 000000000..730dfc62a --- /dev/null +++ b/server/SpawnScripts/Darklight/discardedwood.lua @@ -0,0 +1,24 @@ +--[[ + Script Name : SpawnScripts/Darklight/discardedwood.lua + Script Author : fearfx + Script Date : 2017.01.24 11:01:02 + Script Purpose : + : +--]] + +function spawn(NPC) +end + +function hailed(NPC, Spawn) +end + +function respawn(NPC) + spawn(NPC) +end + +function casted_on(NPC, Spawn, SpellName) + if SpellName == "gather " then + Despawn(NPC) + SummonItem(Spawn, 6486) + end +end \ No newline at end of file diff --git a/server/SpawnScripts/Darklight/invisiblecuberiftparticle.lua b/server/SpawnScripts/Darklight/invisiblecuberiftparticle.lua new file mode 100644 index 000000000..5e9ef6af4 --- /dev/null +++ b/server/SpawnScripts/Darklight/invisiblecuberiftparticle.lua @@ -0,0 +1,24 @@ +--[[ + Script Name : SpawnScripts/Darklight/invisiblecuberiftparticle.lua + Script Purpose : Sealing the Rift + Script Author : Cynnar + Script Date : 2015.07.01 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +local SealingTheRift = 122 + +function spawn(NPC, Player) + AddSpawnAccess(NPC, NPC) + SetPlayerProximityFunction(NPC, 50, "QuestCheck", "QuestCheck") +end + +function respawn(NPC) + spawn(NPC) +end + +function QuestCheck(NPC, Player) + if HasCompletedQuest(Player, SealingTheRift ) or GetQuestStep(Player, SealingTheRift) > 1 then + AddSpawnAccess(NPC, Player) + end +end diff --git a/server/SpawnScripts/Darklight/qst_wanted_poster.lua b/server/SpawnScripts/Darklight/qst_wanted_poster.lua new file mode 100644 index 000000000..06318ebfb --- /dev/null +++ b/server/SpawnScripts/Darklight/qst_wanted_poster.lua @@ -0,0 +1,23 @@ +--[[ + Script Name : + Script Purpose : + Script Author : + Script Date : + Script Notes : +--]] + +function spawn(NPC) +end + +function hailed(NPC, Spawn) +end + +function respawn(NPC) + spawn(NPC) +end + +function casted_on(Target, Caster) + if not HasCompletedQuest(Caster, 84) and not HasQuest(Caster, 84) then + OfferQuest(Target, Caster, 84) + end +end \ No newline at end of file diff --git a/server/SpawnScripts/Darklight/remainsthexiandragoongeneral.lua b/server/SpawnScripts/Darklight/remainsthexiandragoongeneral.lua new file mode 100644 index 000000000..1b5471860 --- /dev/null +++ b/server/SpawnScripts/Darklight/remainsthexiandragoongeneral.lua @@ -0,0 +1,29 @@ +--[[ + Script Name : SpawnScripts/Darklight/remainsthexiandragoongeneral.lua + Script Purpose : For the quest, "No Undead Goes Unturned" + Script Author : Cynnar + Script Date : 2015.08.18 + Script Notes : +--]] + +local NoUndeadGoesUnturned = 134 + +function spawn(NPC) + SetRequiredQuest(NPC, NoUndeadGoesUnturned, 1) +end + +function respawn(NPC) + spawn(NPC) +end + +function casted_on(NPC, Spawn, SpellName) + if SpellName == "Plunder the Tomb" then + if HasQuest(Spawn, NoUndeadGoesUnturned) and not HasItem(Spawn, 14386) then + SummonItem(Spawn, 14386) + if GetQuestStep(Spawn, NoUndeadGoesUnturned) == 1 then + SetStepComplete(Caster, NoUndeadGoesUnturned, 1) + end + end + + end +end \ No newline at end of file diff --git a/server/SpawnScripts/Darklight/searingtrout.lua b/server/SpawnScripts/Darklight/searingtrout.lua new file mode 100644 index 000000000..8fbe481c0 --- /dev/null +++ b/server/SpawnScripts/Darklight/searingtrout.lua @@ -0,0 +1,31 @@ +--[[ + Script Name : SpawnScripts/Darklight/searingtrout.lua + Script Author : fearfx + Script Date : 2017.01.24 06:01:57 + Script Purpose : + : +--]] + +local ReapingTheBenefits = 188 + +function spawn(NPC) + +end + +function hailed(NPC, Spawn) +end + +function respawn(NPC) + spawn(NPC) +end + +function casted_on(Target, Caster, SpellName) + if SpellName == "Fishing" then + Say(Caster, "Fish!") + if HasQuest(Caster, ReapingTheBenefits) then + --Say(Caster, "") + Despawn(Target) + SummonItem(Caster, 37182) + end + end +end \ No newline at end of file diff --git a/server/SpawnScripts/Darklight/soldierstrinket.lua b/server/SpawnScripts/Darklight/soldierstrinket.lua new file mode 100644 index 000000000..92ec28f9e --- /dev/null +++ b/server/SpawnScripts/Darklight/soldierstrinket.lua @@ -0,0 +1,28 @@ +--[[ + Script Name : SpawnScripts/Darklight/soldierstrinket.lua + Script Purpose : Add spawn access and update for queset Purposeful Trinkets (149) + Script Author : Cynnar + Script Date : 1/3/2016 + Script Notes : Soldiers Trinket (341284) +--]] + +local PurposefulTrinkets = 149 + +function spawn(NPC) + AddSpawnAccess(NPC, NPC) + SetPlayerProximityFunction(NPC, 50, "SpawnAccess", "SpawnAccess") +end + +function respawn(NPC) + spawn(NPC) +end + +function SpawnAccess(NPC, Spawn) + if HasQuest(Spawn, PurposefulTrinkets) then + AddSpawnAccess(NPC, Spawn) + elseif HasQuest(Spawn, PurposefulTrinkets) and GetQuestStep(Spawn, PurposefulTrinkets ) < 2 then + AddSpawnAccess(NPC, Spawn) + else + RemoveSpawnAccess(NPC, Spawn) + end +end \ No newline at end of file diff --git a/server/SpawnScripts/Darklight/wellspringremainstoss.lua b/server/SpawnScripts/Darklight/wellspringremainstoss.lua new file mode 100644 index 000000000..549fe85de --- /dev/null +++ b/server/SpawnScripts/Darklight/wellspringremainstoss.lua @@ -0,0 +1,42 @@ +--[[ + Script Name : SpawnScripts/Darklight/wellspringremainstoss.lua + Script Purpose : For the quest, "Thexian Taint" + Script Author : Cynnar + Script Date : 8/18/2015 + Script Notes : PlayAnimation is not set properly yet. + Script Notes : Object wellspring_remains_toss (340748) +--]] + +local ThexianTaint = 135 + +function spawn(NPC) + AddSpawnAccess(NPC, NPC) + SetPlayerProximityFunction(NPC, 20, "SpawnAccess", "SpawnAccess") +end + +function respawn(NPC) + spawn(NPC) +end + +function SpawnAccess(NPC, Spawn) + + if HasQuest(Spawn, ThexianTaint) and GetQuestStep(Spawn, ThexianTaint) == 2 then + AddSpawnAccess(NPC, Spawn) + else + RemoveSpawnAccess(NPC, Spawn) + end +end + +function casted_on(NPC, Spawn, SpellName) + if SpellName == "Toss Remains in the Well" then + if HasQuest(Spawn, ThexianTaint) and HasItem(Spawn, 14387) then + --if GetQuestStep(Spawn, ThexianTaint) == 2 then + RemoveItem(Spawn, 14387) + PlayAnimation(NPC, 22403) + SendMessage(Spawn, "You toss the vex-runed remains in the well!", "white") + SetStepComplete(Spawn, ThexianTaint, 2) + --end + end + + end +end \ No newline at end of file diff --git a/server/SpawnScripts/Darklight/widgetriftboulder.lua b/server/SpawnScripts/Darklight/widgetriftboulder.lua new file mode 100644 index 000000000..0a322eee9 --- /dev/null +++ b/server/SpawnScripts/Darklight/widgetriftboulder.lua @@ -0,0 +1,24 @@ +--[[ + Script Name : SpawnScripts/Darklight/widgetriftboulder.lua + Script Purpose : Sealing the Rift + Script Author : Cynnar + Script Date : 2015.07.01 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +local SealingTheRift = 122 + +function spawn(NPC, Player) + AddSpawnAccess(NPC, NPC) + SetPlayerProximityFunction(NPC, 50, "CheckQuest", "CheckQuest") +end + +function respawn(NPC) + spawn(NPC) +end + +function CheckQuest(NPC, Player) + if HasCompletedQuest(Player, SealingTheRift ) or GetQuestStep(Player, SealingTheRift ) > 1 then + AddSpawnAccess(NPC, Player) + end +end \ No newline at end of file diff --git a/server/SpawnScripts/Darklight/widgetriftpebble.lua b/server/SpawnScripts/Darklight/widgetriftpebble.lua new file mode 100644 index 000000000..5b7d2e2e0 --- /dev/null +++ b/server/SpawnScripts/Darklight/widgetriftpebble.lua @@ -0,0 +1,42 @@ +--[[ + Script Name : SpawnScripts/Darklight/widgetriftpebble.lua + Script Purpose : Sealing the Rift + Script Author : Cynnar + Script Date : 2015.07.01 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +local SealingTheRift = 122 + +function spawn(NPC) + AddSpawnAccess(NPC, NPC) + SetPlayerProximityFunction(NPC, 50, "SpawnAccess", "SpawnAccess") +end + +function casted_on(NPC, Spawn, SpellName) + if HasQuest(Spawn, SealingTheRift) then + if SpellName == 'Kick Rubble' then + SetStepComplete(Spawn, SealingTheRift, 1) + RemoveSpawnAccess(NPC, Spawn) + + private_spawn_boulder = GetSpawn(Spawn, 340761) + private_spawn_particle1 = GetSpawn(Spawn, 340747) + private_spawn_particle2 = GetSpawn(Spawn, 341218) + AddSpawnAccess(private_spawn_boulder, Spawn) + AddSpawnAccess(private_spawn_particle1, Spawn) + AddSpawnAccess(private_spawn_particle2, Spawn) + end + end +end + +function SpawnAccess(NPC, Spawn) + + if not HasQuest(Spawn, SealingTheRift) and not HasCompletedQuest(Spawn, SealingTheRift) then + AddSpawnAccess(NPC, Spawn) + elseif HasQuest(Spawn, SealingTheRift) and GetQuestStep(Spawn, SealingTheRift ) < 2 then + AddSpawnAccess(NPC, Spawn) + else + RemoveSpawnAccess(NPC, Spawn) + end +end + diff --git a/server/SpawnScripts/EastFreeport/EFGuards.lua b/server/SpawnScripts/EastFreeport/EFGuards.lua new file mode 100644 index 000000000..47df9acad --- /dev/null +++ b/server/SpawnScripts/EastFreeport/EFGuards.lua @@ -0,0 +1,118 @@ +--[[ + Script Name : SpawnScripts/EastFreeport/EFGuards.lua + Script Purpose : Waypoint Path for ef_guard_lower.lua + Script Author : Cynnar + Script Date : 09/08/2018 02:20:27 PM + Script Notes : +--]] + +function spawn(NPC) + waypoints(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) +end + +function respawn(NPC) +end + +function waypoints(NPC) + MovementLoopAddLocation(NPC, -189.86, -55.92, -16.44, 2, 0) + MovementLoopAddLocation(NPC, -190.46, -55.87, -3.26, 2, 0) + MovementLoopAddLocation(NPC, -185.01, -55.83, 9.76, 2, 0) + MovementLoopAddLocation(NPC, -181.3, -56.75, 66.36, 2, 0) + MovementLoopAddLocation(NPC, -181.84, -57.3, 104.81, 2, 0) + MovementLoopAddLocation(NPC, -185.17, -57.29, 112.73, 2, 0) + MovementLoopAddLocation(NPC, -190.12, -57.29, 113.46, 2, 0) + MovementLoopAddLocation(NPC, -194.08, -57.3, 107.44, 2, 0) + MovementLoopAddLocation(NPC, -194.6, -57.02, 80.65, 2, 0) + MovementLoopAddLocation(NPC, -218.36, -56.07, 58.92, 2, 0) + MovementLoopAddLocation(NPC, -239.17, -56.07, 58.9, 2, 0) + MovementLoopAddLocation(NPC, -242.89, -56.07, 60.42, 2, 0) + MovementLoopAddLocation(NPC, -244.14, -56.07, 61.03, 2, 0) + MovementLoopAddLocation(NPC, -246.02, -56.07, 59.53, 2, 0) + MovementLoopAddLocation(NPC, -247.36, -56.07, 58.52, 2, 0) + MovementLoopAddLocation(NPC, -252.65, -56.07, 58.95, 2, 0) + MovementLoopAddLocation(NPC, -277.33, -56.07, 58.95, 2, 0) + MovementLoopAddLocation(NPC, -304.72, -56.07, 58.97, 2, 0) + MovementLoopAddLocation(NPC, -304.11, -56.07, 68.74, 2, 3) + MovementLoopAddLocation(NPC, -306.25, -56.07, 71.26, 2, 0) + MovementLoopAddLocation(NPC, -301.18, -56.07, 85.95, 2, 0) + MovementLoopAddLocation(NPC, -303.9, -56.07, 107.34, 2, 0) + MovementLoopAddLocation(NPC, -299.51, -56.07, 109.45, 2, 0) + MovementLoopAddLocation(NPC, -290.26, -56.07, 109.42, 2, 0) + MovementLoopAddLocation(NPC, -286.51, -56.07, 107.43, 2, 0) + MovementLoopAddLocation(NPC, -284.54, -56.07, 101.79, 2, 0) + MovementLoopAddLocation(NPC, -282.24, -56.07, 85.72, 2, 0) + MovementLoopAddLocation(NPC, -280.94, -56.07, 64.28, 2, 0) + MovementLoopAddLocation(NPC, -213.49, -56.07, 65.38, 2, 0) + MovementLoopAddLocation(NPC, -209.06, -56.07, 56.68, 2, 0) + MovementLoopAddLocation(NPC, -209.19, -56.07, -67.07, 2, 0) + MovementLoopAddLocation(NPC, -211.21, -56.07, -72.08, 2, 0) + MovementLoopAddLocation(NPC, -213.28, -56.07, -73.4, 2, 0) + MovementLoopAddLocation(NPC, -228.28, -56.07, -73.3, 2, 0) + MovementLoopAddLocation(NPC, -238.66, -56.07, -75.05, 2, 0) + MovementLoopAddLocation(NPC, -248.38, -56.07, -75.17, 2, 0) + MovementLoopAddLocation(NPC, -256.86, -56.07, -72.89, 2, 0) + MovementLoopAddLocation(NPC, -300.28, -56.07, -72.61, 2, 0) + MovementLoopAddLocation(NPC, -306.28, -55.71, -77.39, 2, 0) + MovementLoopAddLocation(NPC, -300.18, -56.07, -81.26, 2, 3) + MovementLoopAddLocation(NPC, -255.99, -56.07, -80.53, 2, 0) + MovementLoopAddLocation(NPC, -235.89, -56.07, -82.36, 2, 0) + MovementLoopAddLocation(NPC, -203.13, -56.07, -82.93, 2, 0) + MovementLoopAddLocation(NPC, -197.85, -55.78, -85.24, 2, 0) + MovementLoopAddLocation(NPC, -181.72, -56.31, -110.02, 2, 0) + MovementLoopAddLocation(NPC, -172.06, -56.65, -98.75, 2, 0) + MovementLoopAddLocation(NPC, -177.01, -56.78, -86.72, 2, 0) + MovementLoopAddLocation(NPC, -189.09, -56.75, -45.23, 2, 0) + MovementLoopAddLocation(NPC, -189.75, -56.06, -21.61, 2, 0) + MovementLoopAddLocation(NPC, -189.09, -56.75, -45.23, 2, 0) + MovementLoopAddLocation(NPC, -177.01, -56.78, -86.72, 2, 0) + MovementLoopAddLocation(NPC, -172.06, -56.65, -98.75, 2, 0) + MovementLoopAddLocation(NPC, -181.72, -56.31, -110.02, 2, 0) + MovementLoopAddLocation(NPC, -197.85, -55.78, -85.24, 2, 0) + MovementLoopAddLocation(NPC, -203.13, -56.07, -82.93, 2, 0) + MovementLoopAddLocation(NPC, -235.89, -56.07, -82.36, 2, 0) + MovementLoopAddLocation(NPC, -255.99, -56.07, -80.53, 2, 0) + MovementLoopAddLocation(NPC, -300.18, -56.07, -81.26, 2, 3) + MovementLoopAddLocation(NPC, -306.28, -55.71, -77.39, 2, 0) + MovementLoopAddLocation(NPC, -300.28, -56.07, -72.61, 2, 0) + MovementLoopAddLocation(NPC, -256.86, -56.07, -72.89, 2, 0) + MovementLoopAddLocation(NPC, -248.38, -56.07, -75.17, 2, 0) + MovementLoopAddLocation(NPC, -238.66, -56.07, -75.05, 2, 0) + MovementLoopAddLocation(NPC, -228.28, -56.07, -73.3, 2, 0) + MovementLoopAddLocation(NPC, -213.28, -56.07, -73.4, 2, 0) + MovementLoopAddLocation(NPC, -211.21, -56.07, -72.08, 2, 0) + MovementLoopAddLocation(NPC, -209.19, -56.07, -67.07, 2, 0) + MovementLoopAddLocation(NPC, -209.06, -56.07, 56.68, 2, 0) + MovementLoopAddLocation(NPC, -213.49, -56.07, 65.38, 2, 0) + MovementLoopAddLocation(NPC, -280.94, -56.07, 64.28, 2, 0) + MovementLoopAddLocation(NPC, -282.24, -56.07, 85.72, 2, 0) + MovementLoopAddLocation(NPC, -284.54, -56.07, 101.79, 2, 0) + MovementLoopAddLocation(NPC, -286.51, -56.07, 107.43, 2, 0) + MovementLoopAddLocation(NPC, -290.26, -56.07, 109.42, 2, 0) + MovementLoopAddLocation(NPC, -299.51, -56.07, 109.45, 2, 0) + MovementLoopAddLocation(NPC, -303.9, -56.07, 107.34, 2, 0) + MovementLoopAddLocation(NPC, -301.18, -56.07, 85.95, 2, 3) + MovementLoopAddLocation(NPC, -306.25, -56.07, 71.26, 2, 0) + MovementLoopAddLocation(NPC, -304.11, -56.07, 68.74, 2, 0) + MovementLoopAddLocation(NPC, -304.72, -56.07, 58.97, 2, 0) + MovementLoopAddLocation(NPC, -277.33, -56.07, 58.95, 2, 0) + MovementLoopAddLocation(NPC, -252.65, -56.07, 58.95, 2, 0) + MovementLoopAddLocation(NPC, -247.36, -56.07, 58.52, 2, 0) + MovementLoopAddLocation(NPC, -246.02, -56.07, 59.53, 2, 0) + MovementLoopAddLocation(NPC, -244.14, -56.07, 61.03, 2, 0) + MovementLoopAddLocation(NPC, -242.89, -56.07, 60.42, 2, 0) + MovementLoopAddLocation(NPC, -239.17, -56.07, 58.9, 2, 0) + MovementLoopAddLocation(NPC, -218.36, -56.07, 58.92, 2, 0) + MovementLoopAddLocation(NPC, -194.6, -57.02, 80.65, 2, 0) + MovementLoopAddLocation(NPC, -194.08, -57.3, 107.44, 2, 0) + MovementLoopAddLocation(NPC, -190.12, -57.29, 113.46, 2, 0) + MovementLoopAddLocation(NPC, -185.17, -57.29, 112.73, 2, 0) + MovementLoopAddLocation(NPC, -181.84, -57.3, 104.81, 2, 0) + MovementLoopAddLocation(NPC, -181.3, -56.75, 66.36, 2, 0) + MovementLoopAddLocation(NPC, -185.01, -55.83, 9.76, 2, 0) + MovementLoopAddLocation(NPC, -190.46, -55.87, -3.26, 2, 0) + MovementLoopAddLocation(NPC, -189.86, -55.92, -16.44, 2, 0) +end diff --git a/server/SpawnScripts/EastFreeport/Odyssneu.lua b/server/SpawnScripts/EastFreeport/Odyssneu.lua new file mode 100644 index 000000000..6a41c33a0 --- /dev/null +++ b/server/SpawnScripts/EastFreeport/Odyssneu.lua @@ -0,0 +1,28 @@ +--[[ + Script Name : SpawnScripts/EastFreeport/Odyssneu.lua + Script Purpose : Odyssneu + Script Author : neatz09 + Script Date : 2018.12.30 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +function spawn(NPC) + SetPlayerProximityFunction(NPC, 10, "InRange", "LeaveRange") +end + +function respawn(NPC) + spawn(NPC) +end + +function InRange(NPC, Spawn) +end + +function LeaveRange(NPC, Spawn) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + + PlayFlavor(NPC, "voiceover/english/broker_aliindar/qey_harbor/031_con_merchant_aliindar_erudite_2_aoi_1fefa590.mp3", "Hello there! Let's not waste any time shall we? What is it I can get for you?", "beckon", 1746996390, 2674526000, Spawn) +end + diff --git a/server/SpawnScripts/ElddarGrove/Adrianna.lua b/server/SpawnScripts/ElddarGrove/Adrianna.lua new file mode 100644 index 000000000..8d6ed1b26 --- /dev/null +++ b/server/SpawnScripts/ElddarGrove/Adrianna.lua @@ -0,0 +1,33 @@ +--[[ + Script Name : SpawnScripts/ElddarGrove/Adrianna.lua + Script Purpose : Adrianna + Script Author : John Adams + Script Date : 2008.09.28 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +function spawn(NPC) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/merchant_adrianna/qey_elddar/merchantadrianna000.mp3", "", "", 2772064820, 4249063361, Spawn) + AddConversationOption(conversation, "No, I am good to go thanks. ", "dlg_9_1") + StartConversation(conversation, NPC, Spawn, "Hello there! Can I interest you in any wares for your travels?") +end + +function dlg_9_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/merchant_adrianna/qey_elddar/merchantadrianna000.mp3", "", "", 2772064820, 4249063361, Spawn) + AddConversationOption(conversation, "No, I am good to go thanks. ", "dlg_9_2") + StartConversation(conversation, NPC, Spawn, "Hello there! Can I interest you in any wares for your travels?") +end + diff --git a/server/SpawnScripts/ElddarGrove/Aerinleaf.lua b/server/SpawnScripts/ElddarGrove/Aerinleaf.lua new file mode 100644 index 000000000..bd1becb69 --- /dev/null +++ b/server/SpawnScripts/ElddarGrove/Aerinleaf.lua @@ -0,0 +1,21 @@ +--[[ + Script Name : SpawnScripts/ElddarGrove/Aerinleaf.lua + Script Purpose : Aerinleaf + Script Author : John Adams + Script Date : 2008.09.28 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + choice = math.random(1,2) + + if choice == 1 then + PlayFlavor(NPC, "voiceover/english/broker_mallium/fprt_west/031_con_merchant_mallium_halfelf_1_aoi_55068310.mp3", "Well met, fair traveler. Here, while you rest from your troubling day of adventuring, why not take a look at the finest luxuries that a city could hope to offer!", "bye", 1506550649, 1241339557, Spawn) + elseif choice == 2 then + PlayFlavor(NPC, "voiceover/english/broker_mallium/fprt_west/031_con_merchant_mallium_halfelf_1_hail_1ed07c5.mp3", "I can only offer you what my contacts have been able to locate. These are the best goods that the citizens have to offer.", "sigh", 3045938288, 2279107443, Spawn) + else + end + +end + diff --git a/server/SpawnScripts/ElddarGrove/ArthurWaterway.lua b/server/SpawnScripts/ElddarGrove/ArthurWaterway.lua new file mode 100644 index 000000000..5366562f9 --- /dev/null +++ b/server/SpawnScripts/ElddarGrove/ArthurWaterway.lua @@ -0,0 +1,23 @@ +--[[ + Script Name : SpawnScripts/ElddarGrove/ArthurWaterway.lua + Script Purpose : Arthur Waterway + Script Author : John Adams + Script Date : 2008.09.28 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + choice = math.random(1,3) + + if choice == 1 then + PlayFlavor(NPC, "voiceover/english/optional2/halfelf_eco_good_2/ft/halfelf/halfelf_eco_good_2_hail_gm_768a0c8b.mp3", "Everywhere is walking distance if you have the time.", "wink", 2228417017, 3880753774, Spawn) + elseif choice == 2 then + PlayFlavor(NPC, "voiceover/english/optional2/halfelf_eco_good_2/ft/halfelf/halfelf_eco_good_2_hail_gm_ea435b69.mp3", "I'm going to get some piercings so I can be unique like everyone else.", "yeah", 2468101640, 903029053, Spawn) + elseif choice == 3 then + PlayFlavor(NPC, "voiceover/english/optional2/halfelf_eco_good_2/ft/halfelf/halfelf_eco_good_2_hail_gm_666e9477.mp3", "I think the word dual-breed has a little more dignity than half-elf, don't you?", "ponder", 3563191265, 3563670932, Spawn) + else + end + +end + diff --git a/server/SpawnScripts/ElddarGrove/BreenoMesspie.lua b/server/SpawnScripts/ElddarGrove/BreenoMesspie.lua new file mode 100644 index 000000000..ee7b3d2ec --- /dev/null +++ b/server/SpawnScripts/ElddarGrove/BreenoMesspie.lua @@ -0,0 +1,13 @@ +--[[ + Script Name : SpawnScripts/ElddarGrove/BreenoMesspie.lua + Script Purpose : Breeno Messpie + Script Author : John Adams + Script Date : 2008.09.28 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + PlayFlavor(NPC, "voiceover/english/halfling_eco_good_1/ft/halfling/halfling_eco_good_1_hail_gm_50622dfa.mp3", "Whoa, hello there! Eager and in a hurry I see. My advice, take your time. The city isn't going anywhere.", "wave", 2627404831, 2664895493, Spawn) +end + diff --git a/server/SpawnScripts/ElddarGrove/Bryson.lua b/server/SpawnScripts/ElddarGrove/Bryson.lua new file mode 100644 index 000000000..23b808496 --- /dev/null +++ b/server/SpawnScripts/ElddarGrove/Bryson.lua @@ -0,0 +1,21 @@ +--[[ + Script Name : SpawnScripts/ElddarGrove/Bryson.lua + Script Purpose : Bryson + Script Author : John Adams + Script Date : 2008.09.28 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + choice = math.random(1,2) + + if choice == 1 then + PlayFlavor(NPC, "voiceover/english/bryson/qey_elddar/100_archer_human_bryson_multhail1_591026b2.mp3", "Now, if you hope to be as fine an archer as me, you should be off practicing instead of talking to me!", "", 2519962645, 3532721498, Spawn) + elseif choice == 2 then + PlayFlavor(NPC, "voiceover/english/bryson/qey_elddar/100_archer_human_bryson_callout1_c9e17e55.mp3", "Ha! A bullseye! I knew I would hit it soon. Take a look at this, friend!", "", 4180624223, 2622592, Spawn) + else + end + +end + diff --git a/server/SpawnScripts/ElddarGrove/DelmaMesspie.lua b/server/SpawnScripts/ElddarGrove/DelmaMesspie.lua new file mode 100644 index 000000000..2bac28c89 --- /dev/null +++ b/server/SpawnScripts/ElddarGrove/DelmaMesspie.lua @@ -0,0 +1,23 @@ +--[[ + Script Name : SpawnScripts/ElddarGrove/DelmaMesspie.lua + Script Purpose : Delma Messpie + Script Author : John Adams + Script Date : 2008.09.28 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + choice = math.random(1,3) + + if choice == 1 then + PlayFlavor(NPC, "voiceover/english/halfling_eco_good_1/ft/halfling/halfling_eco_good_1_hail_gf_6594953c.mp3", "If a thing isn't worth saying, you sing it.", "wink", 1056697572, 3706271932, Spawn) + elseif choice == 2 then + PlayFlavor(NPC, "voiceover/english/halfling_eco_good_1/ft/halfling/halfling_eco_good_1_hail_gf_5b6e8d2f.mp3", "Do you like muffins? Muffins are my favorite, I eat them every chance I get.", "sigh", 4155434475, 829232573, Spawn) + elseif choice == 3 then + PlayFlavor(NPC, "voiceover/english/halfling_eco_good_1/ft/halfling/halfling_eco_good_1_hail_gf_3dc6b124.mp3", "Get the wash, get the wash. This whole city would fall apart if I didn't deliver the clothes on time. ", "frustrated", 4277096439, 928366048, Spawn) + else + end + +end + diff --git a/server/SpawnScripts/ElddarGrove/Duvo.lua b/server/SpawnScripts/ElddarGrove/Duvo.lua new file mode 100644 index 000000000..9c372d5d6 --- /dev/null +++ b/server/SpawnScripts/ElddarGrove/Duvo.lua @@ -0,0 +1,21 @@ +--[[ + Script Name : SpawnScripts/ElddarGrove/Duvo.lua + Script Purpose : Duvo + Script Author : John Adams + Script Date : 2008.09.28 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + choice = math.random(1,2) + + if choice == 1 then + PlayFlavor(NPC, "voiceover/english/scribe_duvo/qey_elddar/100_scribe_halfling_duvo_callout1_c6eaefe5.mp3", "My apologies, friend. I did not see you there ... What is it you need?", "", 3948051330, 1166584264, Spawn) + elseif choice == 2 then + PlayFlavor(NPC, "voiceover/english/scribe_duvo/qey_elddar/100_scribe_halfling_duvo_multhail1_a72f47c8.mp3", "I'm sorry. I cannot help you.", "", 1448300901, 17119076, Spawn) + else + end + +end + diff --git a/server/SpawnScripts/ElddarGrove/ElendiaStarleaf.lua b/server/SpawnScripts/ElddarGrove/ElendiaStarleaf.lua new file mode 100644 index 000000000..067b2a9d7 --- /dev/null +++ b/server/SpawnScripts/ElddarGrove/ElendiaStarleaf.lua @@ -0,0 +1,21 @@ +--[[ + Script Name : SpawnScripts/ElddarGrove/ElendiaStarleaf.lua + Script Purpose : Elendia Starleaf + Script Author : John Adams + Script Date : 2008.09.28 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + choice = math.random(1,2) + + if choice == 1 then + PlayFlavor(NPC, "", "Hello there, you seek woodlore do you?", "", 1689589577, 4560189, Spawn) + elseif choice == 2 then + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_1_1011.mp3", "", "", 0, 0, Spawn) + else + end + +end + diff --git a/server/SpawnScripts/ElddarGrove/ElgornBirchgrove.lua b/server/SpawnScripts/ElddarGrove/ElgornBirchgrove.lua new file mode 100644 index 000000000..d0de37c34 --- /dev/null +++ b/server/SpawnScripts/ElddarGrove/ElgornBirchgrove.lua @@ -0,0 +1,21 @@ +--[[ + Script Name : SpawnScripts/ElddarGrove/ElgornBirchgrove.lua + Script Purpose : Elgorn Birchgrove + Script Author : John Adams + Script Date : 2008.09.28 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + choice = math.random(1,2) + + if choice == 1 then + PlayFlavor(NPC, "", "Please watch where you wander. My little wards are skittish, unlike their more mature relatives.", "", 1689589577, 4560189, Spawn) + elseif choice == 2 then + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_1_1006.mp3", "", "", 0, 0, Spawn) + else + end + +end + diff --git a/server/SpawnScripts/ElddarGrove/FayeDawnsinger.lua b/server/SpawnScripts/ElddarGrove/FayeDawnsinger.lua new file mode 100644 index 000000000..f20a58c39 --- /dev/null +++ b/server/SpawnScripts/ElddarGrove/FayeDawnsinger.lua @@ -0,0 +1,23 @@ +--[[ + Script Name : SpawnScripts/ElddarGrove/FayeDawnsinger.lua + Script Purpose : Faye Dawnsinger + Script Author : John Adams + Script Date : 2008.09.28 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + choice = math.random(1,3) + + if choice == 1 then + PlayFlavor(NPC, "voiceover/english/highelf_eco_good_1/ft/highelf/highelf_eco_good_1_hail_gf_aeb1a20f.mp3", "It is with honor that I welcome you to our community.", "thanks", 157565536, 4238836509, Spawn) + elseif choice == 2 then + PlayFlavor(NPC, "voiceover/english/highelf_eco_good_1/ft/highelf/highelf_eco_good_1_hail_gf_a6a7e923.mp3", "Hail to you, it is indeed a pleasure.", "royalwave", 224557122, 3782103568, Spawn) + elseif choice == 3 then + PlayFlavor(NPC, "voiceover/english/highelf_eco_good_1/ft/highelf/highelf_eco_good_1_hail_gf_869cb34a.mp3", "Hello, young adventurer. It is with the utmost delight that I greet you.", "fullcurtsey", 1236739692, 2465236460, Spawn) + else + end + +end + diff --git a/server/SpawnScripts/ElddarGrove/FlizzleCogplume.lua b/server/SpawnScripts/ElddarGrove/FlizzleCogplume.lua new file mode 100644 index 000000000..83e9c68cc --- /dev/null +++ b/server/SpawnScripts/ElddarGrove/FlizzleCogplume.lua @@ -0,0 +1,13 @@ +--[[ + Script Name : SpawnScripts/ElddarGrove/FlizzleCogplume.lua + Script Purpose : Flizzle Cogplume + Script Author : John Adams + Script Date : 2008.09.28 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + PlayFlavor(NPC, "", "Well, well, what have we here?", "", 1689589577, 4560189, Spawn) +end + diff --git a/server/SpawnScripts/ElddarGrove/GildasCedartree.lua b/server/SpawnScripts/ElddarGrove/GildasCedartree.lua new file mode 100644 index 000000000..70a1cd65a --- /dev/null +++ b/server/SpawnScripts/ElddarGrove/GildasCedartree.lua @@ -0,0 +1,45 @@ +--[[ + Script Name : SpawnScripts/ElddarGrove/GildasCedartree.lua + Script Purpose : Gildas Cedartree + Script Author : John Adams + Script Date : 2008.09.28 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +function spawn(NPC) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + choice = math.random(1,2) + + if choice == 1 then + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_2_1012.mp3", "", "", 0, 0, Spawn) + elseif choice == 2 then + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_3_1012.mp3", "", "", 0, 0, Spawn) + else + end + + PlayFlavor(NPC, "voiceover/english/gildas_cedartree/qey_elddar/quests/gildas_cedartree/gildascedartree017.mp3", "", "", 3941972709, 1584350411, Spawn) + StartConversation(conversation, NPC, Spawn, "Sorry, friend. I can't offer you help at this time. Good day!") +end + +function dlg_4_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/gildas_cedartree/qey_elddar/quests/gildas_cedartree/gildascedartree017.mp3", "", "", 3941972709, 1584350411, Spawn) + StartConversation(conversation, NPC, Spawn, "Sorry, friend. I can't offer you help at this time. Good day!") +end + +--[[ raw_conversations + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_3_1012.mp3", "", "", 0, 0, Spawn) + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_2_1012.mp3", "", "", 0, 0, Spawn) +--]] + diff --git a/server/SpawnScripts/ElddarGrove/GilpJadefist.lua b/server/SpawnScripts/ElddarGrove/GilpJadefist.lua new file mode 100644 index 000000000..4df17d46c --- /dev/null +++ b/server/SpawnScripts/ElddarGrove/GilpJadefist.lua @@ -0,0 +1,34 @@ +--[[ + Script Name : SpawnScripts/ElddarGrove/GilpJadefist.lua + Script Purpose : Gilp Jadefist + Script Author : John Adams + Script Date : 2008.09.28 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +function spawn(NPC) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "gilp_jadefist/qey_elddar/quests/gilp_jadefist001.mp3", "", "", 561219982, 2924439692, Spawn) + AddConversationOption(conversation, "Thanks.", "dlg_5_1") + StartConversation(conversation, NPC, Spawn, "May your path always be clear.") + if convo==6 then + PlayFlavor(NPC, "gilp_jadefist/qey_elddar/quests/gilp_jadefist001.mp3", "", "", 561219982, 2924439692, Spawn) + AddConversationOption(conversation, "Thanks.", "dlg_6_1") + StartConversation(conversation, NPC, Spawn, "May your path always be clear.") + end + +end + +--[[ raw_conversations + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_2_1015.mp3", "", "", 0, 0, Spawn) +--]] + diff --git a/server/SpawnScripts/ElddarGrove/GregorEarthstride.lua b/server/SpawnScripts/ElddarGrove/GregorEarthstride.lua new file mode 100644 index 000000000..17032070f --- /dev/null +++ b/server/SpawnScripts/ElddarGrove/GregorEarthstride.lua @@ -0,0 +1,21 @@ +--[[ + Script Name : SpawnScripts/ElddarGrove/GregorEarthstride.lua + Script Purpose : Gregor Earthstride + Script Author : John Adams + Script Date : 2008.09.28 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + choice = math.random(1,2) + + if choice == 1 then + PlayFlavor(NPC, "", "I can't ever seem to find the arrows I need! Nightbow's shop here is good, but it's a bit pricey.", "", 1689589577, 4560189, Spawn) + elseif choice == 2 then + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_2_1004.mp3", "", "", 0, 0, Spawn) + else + end + +end + diff --git a/server/SpawnScripts/ElddarGrove/GuardKaladenth.lua b/server/SpawnScripts/ElddarGrove/GuardKaladenth.lua new file mode 100644 index 000000000..b3ea7140f --- /dev/null +++ b/server/SpawnScripts/ElddarGrove/GuardKaladenth.lua @@ -0,0 +1,21 @@ +--[[ + Script Name : SpawnScripts/ElddarGrove/GuardKaladenth.lua + Script Purpose : Guard Kaladenth + Script Author : John Adams + Script Date : 2008.09.28 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + choice = math.random(1,2) + + if choice == 1 then + PlayFlavor(NPC, "voiceover/english/highelf_eco_good_1/ft/service/guard/highelf_guard_service_good_1_hail_gm_ebfceda5.mp3", "Greetings, citizen. I am on guard duty. Should you get into trouble, seek me out.", "attention", 3027655540, 4120709915, Spawn) + elseif choice == 2 then + PlayFlavor(NPC, "voiceover/english/highelf_eco_good_1/ft/service/guard/highelf_guard_service_good_1_hail_gm_c865a827.mp3", "Duty above all else, citizen, except honor!", "scold", 739074204, 2925833259, Spawn) + else + end + +end + diff --git a/server/SpawnScripts/ElddarGrove/GuardMorlo.lua b/server/SpawnScripts/ElddarGrove/GuardMorlo.lua new file mode 100644 index 000000000..dec765307 --- /dev/null +++ b/server/SpawnScripts/ElddarGrove/GuardMorlo.lua @@ -0,0 +1,25 @@ +--[[ + Script Name : SpawnScripts/ElddarGrove/GuardMorlo.lua + Script Purpose : Guard Morlo + Script Author : John Adams + Script Date : 2008.09.28 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + choice = math.random(1,4) + + if choice == 1 then + PlayFlavor(NPC, "voiceover/english/human_eco_good_1/ft/service/guard/human_guard_service_good_1_hail_gm_76da37c9.mp3", "I hate working this shift! If the gnolls don't attack now, I may die of boredom.", "grumble", 4099618783, 4191002419, Spawn) + elseif choice == 2 then + PlayFlavor(NPC, "voiceover/english/human_eco_good_1/ft/service/guard/human_guard_service_good_1_hail_gm_ee473c11.mp3", "Good day to you, citizen. All preserve Queen Antonia.", "salute", 2997871263, 2912813719, Spawn) + elseif choice == 3 then + PlayFlavor(NPC, "voiceover/english/human_eco_good_1/ft/service/guard/human_guard_service_good_1_hail_gm_ebfceda5.mp3", "Greetings, citizen. I am on guard duty. Should you get into trouble, seek me out.", "attention", 1945337199, 2685949436, Spawn) + elseif choice == 4 then + PlayFlavor(NPC, "voiceover/english/human_eco_good_1/ft/service/guard/human_guard_service_good_1_hail_gm_c865a827.mp3", "Duty above all else, citizen, except honor!", "scold", 4141262779, 4227030045, Spawn) + else + end + +end + diff --git a/server/SpawnScripts/ElddarGrove/GuardStonefist.lua b/server/SpawnScripts/ElddarGrove/GuardStonefist.lua new file mode 100644 index 000000000..7afef9a9b --- /dev/null +++ b/server/SpawnScripts/ElddarGrove/GuardStonefist.lua @@ -0,0 +1,23 @@ +--[[ + Script Name : SpawnScripts/ElddarGrove/GuardStonefist.lua + Script Purpose : Guard Stonefist + Script Author : John Adams + Script Date : 2008.09.28 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + choice = math.random(1,3) + + if choice == 1 then + PlayFlavor(NPC, "voiceover/english/dwarf_eco_good_1/ft/service/guard/dwarf_guard_service_good_1_hail_gm_76da37c9.mp3", "I hate working this shift! If the gnolls don't attack now I may die of boredom.", "grumble", 31199107, 4082603014, Spawn) + elseif choice == 2 then + PlayFlavor(NPC, "voiceover/english/dwarf_eco_good_1/ft/service/guard/dwarf_guard_service_good_1_hail_gm_ee473c11.mp3", "Good day to you citizen, all preserve Queen Antonia.", "salute", 2539353309, 3288832983, Spawn) + elseif choice == 3 then + PlayFlavor(NPC, "voiceover/english/dwarf_eco_good_1/ft/service/guard/dwarf_guard_service_good_1_hail_gm_ebfceda5.mp3", "Greetings, citizen. I am on guard duty. Should you get into trouble, seek me out.", "attention", 1717559969, 1730005307, Spawn) + else + end + +end + diff --git a/server/SpawnScripts/ElddarGrove/GuardTolar.lua b/server/SpawnScripts/ElddarGrove/GuardTolar.lua new file mode 100644 index 000000000..5aa38fbe3 --- /dev/null +++ b/server/SpawnScripts/ElddarGrove/GuardTolar.lua @@ -0,0 +1,23 @@ +--[[ + Script Name : SpawnScripts/ElddarGrove/GuardTolar.lua + Script Purpose : Guard Tolar + Script Author : John Adams + Script Date : 2008.09.28 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + choice = math.random(1,3) + + if choice == 1 then + PlayFlavor(NPC, "voiceover/english/barbarian_eco_good_1/ft/service/guard/barbarian_guard_service_good_1_hail_gm_ee473c11.mp3", "Good day to you, citizen. All preserve Queen Antonia.", "salute", 2268064933, 2349331472, Spawn) + elseif choice == 2 then + PlayFlavor(NPC, "voiceover/english/barbarian_eco_good_1/ft/service/guard/barbarian_guard_service_good_1_hail_gm_76da37c9.mp3", "I hate working this shift! If the gnolls don't attack now, I may die of boredom.", "grumble", 174236481, 4250389478, Spawn) + elseif choice == 3 then + PlayFlavor(NPC, "voiceover/english/barbarian_eco_good_1/ft/service/guard/barbarian_guard_service_good_1_hail_gm_ebfceda5.mp3", "Greetings, citizen. I am on guard duty. Should you get into trouble, seek me out.", "attention", 2588751132, 3401521310, Spawn) + else + end + +end + diff --git a/server/SpawnScripts/ElddarGrove/GuardValmont.lua b/server/SpawnScripts/ElddarGrove/GuardValmont.lua new file mode 100644 index 000000000..d916a05b9 --- /dev/null +++ b/server/SpawnScripts/ElddarGrove/GuardValmont.lua @@ -0,0 +1,23 @@ +--[[ + Script Name : SpawnScripts/ElddarGrove/GuardValmont.lua + Script Purpose : Guard Valmont + Script Author : John Adams + Script Date : 2008.09.28 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + choice = math.random(1,3) + + if choice == 1 then + PlayFlavor(NPC, "voiceover/english/human_eco_good_1/ft/service/guard/human_guard_service_good_1_hail_gf_ebfceda5.mp3", "Greetings, citizen. I am on guard duty. Should you get into trouble, seek me out.", "attention", 3448203562, 506341016, Spawn) + elseif choice == 2 then + PlayFlavor(NPC, "voiceover/english/human_eco_good_1/ft/service/guard/human_guard_service_good_1_hail_gf_c865a827.mp3", "Duty above all else, citizen, except honor!", "scold", 373851625, 467562033, Spawn) + elseif choice == 3 then + PlayFlavor(NPC, "voiceover/english/human_eco_good_1/ft/service/guard/human_guard_service_good_1_hail_gf_ee473c11.mp3", "Good day to you, citizen. All preserve Queen Antonia.", "salute", 1886617373, 1115286759, Spawn) + else + end + +end + diff --git a/server/SpawnScripts/ElddarGrove/InitiateLunaru.lua b/server/SpawnScripts/ElddarGrove/InitiateLunaru.lua new file mode 100644 index 000000000..ab363fd88 --- /dev/null +++ b/server/SpawnScripts/ElddarGrove/InitiateLunaru.lua @@ -0,0 +1,13 @@ +--[[ + Script Name : SpawnScripts/ElddarGrove/InitiateLunaru.lua + Script Purpose : Initiate Lunaru + Script Author : John Adams + Script Date : 2008.09.28 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + PlayFlavor(NPC, "", "Sorry, I can't speak now. I must prepare for my sparring exercises.", "", 1689589577, 4560189, Spawn) +end + diff --git a/server/SpawnScripts/ElddarGrove/InitiateTara.lua b/server/SpawnScripts/ElddarGrove/InitiateTara.lua new file mode 100644 index 000000000..a952574ad --- /dev/null +++ b/server/SpawnScripts/ElddarGrove/InitiateTara.lua @@ -0,0 +1,13 @@ +--[[ + Script Name : SpawnScripts/ElddarGrove/InitiateTara.lua + Script Purpose : Initiate Tara + Script Author : John Adams + Script Date : 2008.09.28 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + PlayFlavor(NPC, "voiceover/english/optional1/initiate_tara/qey_elddar/100_monk_initiate_tara_token1_9ac42d88.mp3", "Tread softly and speak your purpose.", "", 3516598133, 1750026138, Spawn) +end + diff --git a/server/SpawnScripts/ElddarGrove/Junala.lua b/server/SpawnScripts/ElddarGrove/Junala.lua new file mode 100644 index 000000000..9ab58a0a7 --- /dev/null +++ b/server/SpawnScripts/ElddarGrove/Junala.lua @@ -0,0 +1,23 @@ +--[[ + Script Name : SpawnScripts/ElddarGrove/Junala.lua + Script Purpose : Junala + Script Author : John Adams + Script Date : 2008.09.28 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + choice = math.random(1,3) + + if choice == 1 then + PlayFlavor(NPC, "voiceover/english/kerran_eco_good_1/ft/kerran/kerran_eco_good_1_hail_gf_28445ab7.mp3", "I don't spend as much time grooming as the others say I do.", "sulk", 2675025847, 2696760246, Spawn) + elseif choice == 2 then + PlayFlavor(NPC, "voiceover/english/kerran_eco_good_1/ft/kerran/kerran_eco_good_1_hail_gf_6c9e41c6.mp3", "Don't think that I'm silly, I just happen to like the simple little things.", "flustered", 1426227770, 2304966225, Spawn) + elseif choice == 3 then + PlayFlavor(NPC, "voiceover/english/kerran_eco_good_1/ft/kerran/kerran_eco_good_1_hail_gf_63881722.mp3", "I'm trying to find a new seasoning for my dried fish.", "ponder", 3802648946, 1171453079, Spawn) + else + end + +end + diff --git a/server/SpawnScripts/ElddarGrove/KaelarriIvyshae.lua b/server/SpawnScripts/ElddarGrove/KaelarriIvyshae.lua new file mode 100644 index 000000000..baae59b4f --- /dev/null +++ b/server/SpawnScripts/ElddarGrove/KaelarriIvyshae.lua @@ -0,0 +1,27 @@ +--[[ + Script Name : SpawnScripts/ElddarGrove/KaelarriIvyshae.lua + Script Purpose : Kaelarri Ivyshae + Script Author : John Adams + Script Date : 2008.09.28 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + choice = math.random(1,5) + + if choice == 1 then + PlayFlavor(NPC, "voiceover/english/woodelf_eco_good_1/ft/woodelf/woodelf_eco_good_1_hail_gf_31587971.mp3", "Greetings, friend. I hope your visit to the city brings both inner peace and prosperity.", "curtsey", 999961843, 2491010297, Spawn) + elseif choice == 2 then + PlayFlavor(NPC, "voiceover/english/woodelf_eco_good_1/ft/woodelf/woodelf_eco_good_1_hail_gf_10181485.mp3", "The forces of good are all wrought from the strength of the innocent.", "bow", 1746715399, 2834476927, Spawn) + elseif choice == 3 then + PlayFlavor(NPC, "voiceover/english/woodelf_eco_good_1/ft/woodelf/woodelf_eco_good_1_hail_gf_45ac4aea.mp3", "I never thought it would be so difficult to carry on. I have no songs left in my heart.", "sigh", 2446660394, 3437698252, Spawn) + elseif choice == 4 then + PlayFlavor(NPC, "voiceover/english/woodelf_eco_good_1/ft/woodelf/woodelf_eco_good_1_hail_gf_46ea1119.mp3", "So much blood and so many lost. I never believed it would end this way.", "sad", 1351206018, 3386717578, Spawn) + elseif choice == 5 then + PlayFlavor(NPC, "voiceover/english/woodelf_eco_good_1/ft/woodelf/woodelf_eco_good_1_hail_gf_67432087.mp3", "We must remain steady against the influence of evil. Only with perseverance will Qeynos survive!", "shakefist", 927768431, 1576503790, Spawn) + else + end + +end + diff --git a/server/SpawnScripts/ElddarGrove/Kaemon.lua b/server/SpawnScripts/ElddarGrove/Kaemon.lua new file mode 100644 index 000000000..74b71da99 --- /dev/null +++ b/server/SpawnScripts/ElddarGrove/Kaemon.lua @@ -0,0 +1,23 @@ +--[[ + Script Name : SpawnScripts/ElddarGrove/Kaemon.lua + Script Purpose : Kaemon + Script Author : John Adams + Script Date : 2008.09.28 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + choice = math.random(1,3) + + if choice == 1 then + PlayFlavor(NPC, "voiceover/english/human_eco_good_1/ft/human/human_eco_good_1_hail_gm_3fc546db.mp3", "As a citizen of the mighty city, Qeynos, I greet you openly.", "salute", 2645256785, 1334313741, Spawn) + elseif choice == 2 then + PlayFlavor(NPC, "voiceover/english/human_eco_good_1/ft/human/human_eco_good_1_hail_gm_13b79d2d.mp3", "Welcome...welcome traveler, to the fair city of Qeynos! My, isn't it a magnificent day?", "hello", 3746934207, 794965138, Spawn) + elseif choice == 3 then + PlayFlavor(NPC, "voiceover/english/human_eco_good_1/ft/human/human_eco_good_1_hail_gm_d38d1fff.mp3", "Ah, what have we here? Glad to see you endured the journey here, adventurer.", "wave", 2806352129, 3453714070, Spawn) + else + end + +end + diff --git a/server/SpawnScripts/ElddarGrove/KaylelleStarchaser.lua b/server/SpawnScripts/ElddarGrove/KaylelleStarchaser.lua new file mode 100644 index 000000000..0c137ae8f --- /dev/null +++ b/server/SpawnScripts/ElddarGrove/KaylelleStarchaser.lua @@ -0,0 +1,23 @@ +--[[ + Script Name : SpawnScripts/ElddarGrove/KaylelleStarchaser.lua + Script Purpose : Kaylelle Starchaser + Script Author : John Adams + Script Date : 2008.09.28 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + choice = math.random(1,3) + + if choice == 1 then + PlayFlavor(NPC, "voiceover/english/optional2/halfelf_eco_race_good/ft/eco/good/halfelf_eco_race_good_woodelf_gf_1f97d15c.mp3", "May your life be filled with the green of trees and your heart be filled with ...hope.", "", 1410070569, 2067586254, Spawn) + elseif choice == 2 then + PlayFlavor(NPC, "voiceover/english/optional2/halfelf_eco_race_good/ft/eco/good/halfelf_eco_race_good_hail_gf_c91da8a3.mp3", "I have nothing to say to you right now.", "shrug", 2086714174, 1576219530, Spawn) + elseif choice == 3 then + PlayFlavor(NPC, "voiceover/english/optional2/halfelf_eco_race_good/ft/eco/good/halfelf_eco_race_good_hail_gf_15163426.mp3", "You talk to strangers? What's the purpose of that?", "", 3457658686, 921014902, Spawn) + else + end + +end + diff --git a/server/SpawnScripts/ElddarGrove/Kethelrune.lua b/server/SpawnScripts/ElddarGrove/Kethelrune.lua new file mode 100644 index 000000000..9ec195e90 --- /dev/null +++ b/server/SpawnScripts/ElddarGrove/Kethelrune.lua @@ -0,0 +1,23 @@ +--[[ + Script Name : SpawnScripts/ElddarGrove/Kethelrune.lua + Script Purpose : Kethelrune + Script Author : John Adams + Script Date : 2008.09.28 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + choice = math.random(1,3) + + if choice == 1 then + PlayFlavor(NPC, "voiceover/english/highelf_eco_good_1/ft/highelf/highelf_eco_good_1_hail_gm_eb4f8f5d.mp3", "I hope you have been sent by someone of importance. I'm quite busy.", "yawn", 111891212, 1507953677, Spawn) + elseif choice == 2 then + PlayFlavor(NPC, "voiceover/english/highelf_eco_good_1/ft/highelf/highelf_eco_good_1_hail_gm_4fa9c654.mp3", "How do you do! I am always pleased to meet a capable being, such as yourself.", "nod", 4124935177, 986848244, Spawn) + elseif choice == 3 then + PlayFlavor(NPC, "voiceover/english/highelf_eco_good_1/ft/highelf/highelf_eco_good_1_hail_gm_6d02d4f.mp3", "Hail, friend and well met. I do hope your visits to our village are frequent. Too often do adventurers fail to return.", "stare", 1030195744, 970105613, Spawn) + else + end + +end + diff --git a/server/SpawnScripts/ElddarGrove/KhaiLightfall.lua b/server/SpawnScripts/ElddarGrove/KhaiLightfall.lua new file mode 100644 index 000000000..b6fd5897e --- /dev/null +++ b/server/SpawnScripts/ElddarGrove/KhaiLightfall.lua @@ -0,0 +1,21 @@ +--[[ + Script Name : SpawnScripts/ElddarGrove/KhaiLightfall.lua + Script Purpose : Khai Lightfall + Script Author : John Adams + Script Date : 2008.09.28 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + choice = math.random(1,2) + + if choice == 1 then + PlayFlavor(NPC, "", "May yourr life be uneventful frriend.", "", 1689589577, 4560189, Spawn) + elseif choice == 2 then + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_1_1036.mp3", "", "", 0, 0, Spawn) + else + end + +end + diff --git a/server/SpawnScripts/ElddarGrove/Knight-CaptainPercius.lua b/server/SpawnScripts/ElddarGrove/Knight-CaptainPercius.lua new file mode 100644 index 000000000..c4f53f5d3 --- /dev/null +++ b/server/SpawnScripts/ElddarGrove/Knight-CaptainPercius.lua @@ -0,0 +1,13 @@ +--[[ + Script Name : SpawnScripts/ElddarGrove/Knight-CaptainPercius.lua + Script Purpose : Knight-Captain Percius + Script Author : John Adams + Script Date : 2008.09.28 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + PlayFlavor(NPC, "voiceover/english/highelf_eco_good_1/ft/service/guard/highelf_guard_service_good_1_hail_gm_76da37c9.mp3", "I hate working this shift! If the gnolls don't attack now, I may die of boredom.", "grumble", 3586563752, 1865874525, Spawn) +end + diff --git a/server/SpawnScripts/ElddarGrove/Lambent.lua b/server/SpawnScripts/ElddarGrove/Lambent.lua new file mode 100644 index 000000000..c6945653f --- /dev/null +++ b/server/SpawnScripts/ElddarGrove/Lambent.lua @@ -0,0 +1,13 @@ +--[[ + Script Name : SpawnScripts/ElddarGrove/Lambent.lua + Script Purpose : Lambent + Script Author : John Adams + Script Date : 2008.09.28 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + PlayFlavor(NPC, "voiceover/english/halfelf_eco_good_1/ft/service/merchant/halfelf_merchant_service_good_1_hail_gm_45d92a75.mp3", "Welcome! What can I help you with?", "bow", 3839095688, 1767190740, Spawn) +end + diff --git a/server/SpawnScripts/ElddarGrove/LieoonliooCroosinian.lua b/server/SpawnScripts/ElddarGrove/LieoonliooCroosinian.lua new file mode 100644 index 000000000..4ed75e337 --- /dev/null +++ b/server/SpawnScripts/ElddarGrove/LieoonliooCroosinian.lua @@ -0,0 +1,44 @@ +--[[ + Script Name : SpawnScripts/ElddarGrove/LieoonliooCroosinian.lua + Script Purpose : Lieoonlioo Croosinian + Script Author : John Adams + Script Date : 2008.09.28 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +function spawn(NPC) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + choice = math.random(1,2) + + if choice == 1 then + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_1_1007.mp3", "", "", 0, 0, Spawn) + elseif choice == 2 then + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_3_1007.mp3", "", "", 0, 0, Spawn) + else + end + + PlayFlavor(NPC, "lieoonlioo_croosinian/qey_elddar/trainer_troubador001.mp3", "", "", 484417616, 3729027420, Spawn) + AddConversationOption(conversation, "Just looking around.", "dlg_11_1") + StartConversation(conversation, NPC, Spawn, "Well met, .. GetName(Spawn) .. . What brings you to the Elddar Grove this fine day?") + if convo==12 then + PlayFlavor(NPC, "lieoonlioo_croosinian/qey_elddar/trainer_troubador001.mp3", "", "", 484417616, 3729027420, Spawn) + AddConversationOption(conversation, "Just looking around.", "dlg_12_1") + StartConversation(conversation, NPC, Spawn, "Well met, .. GetName(Spawn) .. . What brings you to the Elddar Grove this fine day?") + end + +end + +--[[ raw_conversations + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_3_1007.mp3", "", "", 0, 0, Spawn) + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_1_1007.mp3", "", "", 0, 0, Spawn) +--]] + diff --git a/server/SpawnScripts/ElddarGrove/LookoutVenylle.lua b/server/SpawnScripts/ElddarGrove/LookoutVenylle.lua new file mode 100644 index 000000000..34ed89a66 --- /dev/null +++ b/server/SpawnScripts/ElddarGrove/LookoutVenylle.lua @@ -0,0 +1,44 @@ +--[[ + Script Name : SpawnScripts/ElddarGrove/LookoutVenylle.lua + Script Purpose : Lookout Venylle + Script Author : John Adams + Script Date : 2008.09.28 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +function spawn(NPC) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_3_1005.mp3", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "What unnatural dangers lurk in the dark?", "dlg_10_1") + AddConversationOption(conversation, "Don't let me keep you from your vigilance. ") + StartConversation(conversation, NPC, Spawn, "Well, greetings, friend. I'm sorry I've no time for chatting. We rangers must be ever watchful. Many dangers lurk in the dark. Some natural, some ... unnatural.") +end + +function dlg_10_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "I've heard of the name Holly Windstalker. I think I'd like to see the grave.", "dlg_10_2") + AddConversationOption(conversation, "I tend to stay away from graves that may not be able to hold their dead. ") + StartConversation(conversation, NPC, Spawn, "It is ill to speak of the dead, but knowing the dangers that prowl in the dark is for your own safety. Rumor has it, that Holly Windstalker once again walks the hills. I won't guarantee this is true, but neither will I discount it. What I do know is a grave bearing her name sits on a hill overlooking the village. You'll see for yourself; she was laid to rest years ago.") +end + +function dlg_10_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Thank you. I'll follow those directions.", "dlg_10_3") + StartConversation(conversation, NPC, Spawn, "Ahh ... very well, you are a daring soul! To get to the grave, follow the aqueduct from Qeynos to Windstalker Village. The village is built around the waterwheel that keeps the aqueduct flowing. The duct passes through rock so you may lose sight of it for a time. Just continue around the mountain, and you'll see it on the other side.") +end + diff --git a/server/SpawnScripts/ElddarGrove/MadrethalSummerspeak.lua b/server/SpawnScripts/ElddarGrove/MadrethalSummerspeak.lua new file mode 100644 index 000000000..92480863c --- /dev/null +++ b/server/SpawnScripts/ElddarGrove/MadrethalSummerspeak.lua @@ -0,0 +1,29 @@ +--[[ + Script Name : SpawnScripts/ElddarGrove/MadrethalSummerspeak.lua + Script Purpose : Madrethal Summerspeak + Script Author : John Adams + Script Date : 2008.09.28 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + choice = math.random(1,6) + + if choice == 1 then + PlayFlavor(NPC, "voiceover/english/woodelf_eco_good_1/ft/woodelf/woodelf_eco_good_1_hail_gm_13f00546.mp3", "Patience they say, is a virtue. It has taken a lot of patience to rebuild our lives so far from home.", "nod", 1108677104, 3869422611, Spawn) + elseif choice == 2 then + PlayFlavor(NPC, "voiceover/english/woodelf_eco_good_1/ft/woodelf/woodelf_eco_good_1_hail_gm_fcb14e3e.mp3", "We must remain steadfast and vigilant against tyranny. This will allow nature to shape Norrath around us. ", "shakefist", 3130983522, 101511459, Spawn) + elseif choice == 3 then + PlayFlavor(NPC, "voiceover/english/woodelf_eco_good_1/ft/woodelf/woodelf_eco_good_1_hail_gm_62f30b60.mp3", "The Elddar Grove is truly a marvel in these troubled times. ", "sigh", 303722838, 1259846495, Spawn) + elseif choice == 4 then + PlayFlavor(NPC, "voiceover/english/woodelf_eco_good_1/ft/woodelf/woodelf_eco_good_1_hail_gm_1568024c.mp3", "I see that you have many adventures ahead of you. This era of darkness is coming to a close.", "ponder", 3567183056, 3400757896, Spawn) + elseif choice == 5 then + PlayFlavor(NPC, "voiceover/english/woodelf_eco_good_1/ft/woodelf/woodelf_eco_good_1_hail_gm_75b61001.mp3", "Don't let the nice day fool you. My knee is acting up, a storm is brewing. I can smell it.", "stretch", 3641086231, 3980350899, Spawn) + elseif choice == 6 then + PlayFlavor(NPC, "voiceover/english/woodelf_eco_good_1/ft/woodelf/woodelf_eco_good_1_hail_gm_a2427d62.mp3", "They say time and nature heal all wounds. Still, some wrongs can never be forgotten.", "sad", 2603397723, 1316741802, Spawn) + else + end + +end + diff --git a/server/SpawnScripts/ElddarGrove/MasterArcherNightbow.lua b/server/SpawnScripts/ElddarGrove/MasterArcherNightbow.lua new file mode 100644 index 000000000..d4bd38952 --- /dev/null +++ b/server/SpawnScripts/ElddarGrove/MasterArcherNightbow.lua @@ -0,0 +1,29 @@ +--[[ + Script Name : SpawnScripts/ElddarGrove/MasterArcherNightbow.lua + Script Purpose : Master Archer Nightbow + Script Author : John Adams + Script Date : 2008.09.28 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + choice = math.random(1,6) + + if choice == 1 then + PlayFlavor(NPC, "", "Greetings, friend traveler! We have the finest supplies to fill your adventuring needs.", "smile", 1689589577, 4560189, Spawn) + elseif choice == 2 then + PlayFlavor(NPC, "", "Go on, take a look at the stock. You'll never beat this price in the city. I guarantee it!", "wink", 1689589577, 4560189, Spawn) + elseif choice == 3 then + PlayFlavor(NPC, "voiceover/english/master_archer_nightbow/qey_elddar/100_merchant_halfelf_nightbow_callout1_f29bf504.mp3", "Welcome to In-Range. How can I oblige you, traveler?", "", 514837561, 1511494370, Spawn) + elseif choice == 4 then + PlayFlavor(NPC, "voiceover/english/master_archer_nightbow/qey_elddar/100_merchant_halfelf_nightbow_multhail2_8e9f4cb0.mp3", "What is it you need, traveler?", "", 4065639405, 4258763812, Spawn) + elseif choice == 5 then + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_1_1021.mp3", "", "", 0, 0, Spawn) + elseif choice == 6 then + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_2_1021.mp3", "", "", 0, 0, Spawn) + else + end + +end + diff --git a/server/SpawnScripts/ElddarGrove/MasterRysianGladewalker.lua b/server/SpawnScripts/ElddarGrove/MasterRysianGladewalker.lua new file mode 100644 index 000000000..0d1476974 --- /dev/null +++ b/server/SpawnScripts/ElddarGrove/MasterRysianGladewalker.lua @@ -0,0 +1,24 @@ +--[[ + Script Name : SpawnScripts/ElddarGrove/MasterRysianGladewalker.lua + Script Purpose : Master Rysian Gladewalker + Script Author : John Adams + Script Date : 2008.09.28 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +function spawn(NPC) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/optional1/master_rysian_gladewalker/qey_elddar/masterrysiangladewalker.mp3", "", "", 1008244051, 2607567948, Spawn) + AddConversationOption(conversation, "No, I'm sorry you must have me confused with someone else.", "dlg_16_1") + StartConversation(conversation, NPC, Spawn, "Well met, friend! Do you have business with our guild?") +end + diff --git a/server/SpawnScripts/ElddarGrove/Mina.lua b/server/SpawnScripts/ElddarGrove/Mina.lua new file mode 100644 index 000000000..d911ceb34 --- /dev/null +++ b/server/SpawnScripts/ElddarGrove/Mina.lua @@ -0,0 +1,23 @@ +--[[ + Script Name : SpawnScripts/ElddarGrove/Mina.lua + Script Purpose : Mina + Script Author : John Adams + Script Date : 2008.09.28 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + choice = math.random(1,3) + + if choice == 1 then + PlayFlavor(NPC, "voiceover/english/human_eco_good_1/ft/human/human_eco_good_1_hail_gf_43b0278c.mp3", "Good day to you. I trust your journey to our village was not overly hazardous.", "fullcurtsey", 374004507, 2165503793, Spawn) + elseif choice == 2 then + PlayFlavor(NPC, "voiceover/english/human_eco_good_1/ft/human/human_eco_good_1_hail_gf_bf6c3bd5.mp3", "Hello there, friend, I hope the day finds you well.", "nod", 2878226663, 595387800, Spawn) + elseif choice == 3 then + PlayFlavor(NPC, "voiceover/english/human_eco_good_1/ft/human/human_eco_good_1_hail_gf_c5cb5ec8.mp3", "Hail to you as well, traveler. There is much work to be done in Qeynos, might as well get started on it now.", "smile", 3197561806, 3190128247, Spawn) + else + end + +end + diff --git a/server/SpawnScripts/ElddarGrove/Mirthmire.lua b/server/SpawnScripts/ElddarGrove/Mirthmire.lua new file mode 100644 index 000000000..48a2deaf8 --- /dev/null +++ b/server/SpawnScripts/ElddarGrove/Mirthmire.lua @@ -0,0 +1,13 @@ +--[[ + Script Name : SpawnScripts/ElddarGrove/Mirthmire.lua + Script Purpose : Mirthmire + Script Author : John Adams + Script Date : 2008.09.28 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + PlayFlavor(NPC, "voiceover/english/human_eco_good_1/ft/service/merchant/human_merchant_service_good_1_hail_gm_e4fa2bd8.mp3", "Confound it! Where did I put that ledger? It must be around here somewhere!", "confused", 983188064, 3043413352, Spawn) +end + diff --git a/server/SpawnScripts/ElddarGrove/MusicianZwena.lua b/server/SpawnScripts/ElddarGrove/MusicianZwena.lua new file mode 100644 index 000000000..bb472fd3d --- /dev/null +++ b/server/SpawnScripts/ElddarGrove/MusicianZwena.lua @@ -0,0 +1,30 @@ +--[[ + Script Name : SpawnScripts/ElddarGrove/MusicianZwena.lua + Script Purpose : Musician Zwena + Script Author : John Adams + Script Date : 2008.09.28 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +function spawn(NPC) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_1_1035.mp3", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Not today, thanks.", "dlg_2_1") + StartConversation(conversation, NPC, Spawn, "Perhaps I could entertain you with a song?") + if convo==3 then + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_2_1035.mp3", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Not today, thanks.", "dlg_3_1") + StartConversation(conversation, NPC, Spawn, "Perhaps I could entertain you with a song?") + end + +end + diff --git a/server/SpawnScripts/ElddarGrove/NalonMesspie.lua b/server/SpawnScripts/ElddarGrove/NalonMesspie.lua new file mode 100644 index 000000000..02396ffcc --- /dev/null +++ b/server/SpawnScripts/ElddarGrove/NalonMesspie.lua @@ -0,0 +1,13 @@ +--[[ + Script Name : SpawnScripts/ElddarGrove/NalonMesspie.lua + Script Purpose : Nalon Messpie + Script Author : John Adams + Script Date : 2008.09.28 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + PlayFlavor(NPC, "voiceover/english/halfling_eco_race_good/ft/eco/good/halfling_eco_race_good_woodelf_gm_b160d4db.mp3", "You must miss home, too, huh? I've never seen it myself, but I wish I could return to Rivervale.", "", 3826858900, 561795809, Spawn) +end + diff --git a/server/SpawnScripts/ElddarGrove/NaturalistTummyfill.lua b/server/SpawnScripts/ElddarGrove/NaturalistTummyfill.lua new file mode 100644 index 000000000..7f3715fa0 --- /dev/null +++ b/server/SpawnScripts/ElddarGrove/NaturalistTummyfill.lua @@ -0,0 +1,13 @@ +--[[ + Script Name : SpawnScripts/ElddarGrove/NaturalistTummyfill.lua + Script Purpose : Naturalist Tummyfill + Script Author : John Adams + Script Date : 2008.09.28 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + PlayFlavor(NPC, "voiceover/english/naturalist_tummyfill/qey_elddar/100_soc_halfling_tunarian_tummyfill_no_8092d272.mp3", "Nothing on Norrath can replicate the natural creations that are right in front of us.", "", 2667097175, 4211150032, Spawn) +end + diff --git a/server/SpawnScripts/ElddarGrove/PallaJhal.lua b/server/SpawnScripts/ElddarGrove/PallaJhal.lua new file mode 100644 index 000000000..95f361b83 --- /dev/null +++ b/server/SpawnScripts/ElddarGrove/PallaJhal.lua @@ -0,0 +1,23 @@ +--[[ + Script Name : SpawnScripts/ElddarGrove/PallaJhal.lua + Script Purpose : Palla Jhal + Script Author : John Adams + Script Date : 2008.09.28 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + choice = math.random(1,3) + + if choice == 1 then + PlayFlavor(NPC, "", "True beauty has no age.", "", 1689589577, 4560189, Spawn) + elseif choice == 2 then + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_2_1005.mp3", "", "", 0, 0, Spawn) + elseif choice == 3 then + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_3_1005.mp3", "", "", 0, 0, Spawn) + else + end + +end + diff --git a/server/SpawnScripts/ElddarGrove/PathfinderOakheart.lua b/server/SpawnScripts/ElddarGrove/PathfinderOakheart.lua new file mode 100644 index 000000000..e10a586d4 --- /dev/null +++ b/server/SpawnScripts/ElddarGrove/PathfinderOakheart.lua @@ -0,0 +1,23 @@ +--[[ + Script Name : SpawnScripts/ElddarGrove/PathfinderOakheart.lua + Script Purpose : Pathfinder Oakheart + Script Author : John Adams + Script Date : 2008.09.28 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + choice = math.random(1,3) + + if choice == 1 then + PlayFlavor(NPC, "voiceover/english/woodelf_eco_good_1/ft/woodelf/woodelf_eco_good_1_hail_gm_1568024c.mp3", "I see that you have many adventures ahead of you. This era of darkness is coming to a close.", "ponder", 3567183056, 3400757896, Spawn) + elseif choice == 2 then + PlayFlavor(NPC, "voiceover/english/woodelf_eco_good_1/ft/woodelf/woodelf_eco_good_1_hail_gm_fcb14e3e.mp3", "We must remain steadfast and vigilant against tyranny. This will allow nature to shape Norrath around us. ", "shakefist", 3130983522, 101511459, Spawn) + elseif choice == 3 then + PlayFlavor(NPC, "", "Can you see the Elddar? Its spirit can be felt in the beauty of the grove before you.", "", 1689589577, 4560189, Spawn) + else + end + +end + diff --git a/server/SpawnScripts/ElddarGrove/PatrolmanEdward.lua b/server/SpawnScripts/ElddarGrove/PatrolmanEdward.lua new file mode 100644 index 000000000..b6f08bad2 --- /dev/null +++ b/server/SpawnScripts/ElddarGrove/PatrolmanEdward.lua @@ -0,0 +1,21 @@ +--[[ + Script Name : SpawnScripts/ElddarGrove/PatrolmanEdward.lua + Script Purpose : Patrolman Edward + Script Author : John Adams + Script Date : 2008.09.28 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + choice = math.random(1,2) + + if choice == 1 then + PlayFlavor(NPC, "voiceover/english/human_eco_good_1/ft/human/human_eco_good_1_hail_gm_d38d1fff.mp3", "Ah, what have we here? Glad to see you endured the journey here, adventurer.", "wave", 2806352129, 3453714070, Spawn) + elseif choice == 2 then + PlayFlavor(NPC, "voiceover/english/human_eco_good_1/ft/human/human_eco_good_1_hail_gm_7e3b456a.mp3", "Hail, pleasure to meet you.", "agree", 471367832, 2417424572, Spawn) + else + end + +end + diff --git a/server/SpawnScripts/ElddarGrove/PatrolmanLy`stan.lua b/server/SpawnScripts/ElddarGrove/PatrolmanLy`stan.lua new file mode 100644 index 000000000..59f555817 --- /dev/null +++ b/server/SpawnScripts/ElddarGrove/PatrolmanLy`stan.lua @@ -0,0 +1,21 @@ +--[[ + Script Name : SpawnScripts/ElddarGrove/PatrolmanLy`stan.lua + Script Purpose : Patrolman Ly`stan + Script Author : John Adams + Script Date : 2008.09.28 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + choice = math.random(1,2) + + if choice == 1 then + PlayFlavor(NPC, "voiceover/english/woodelf_eco_good_1/ft/woodelf/woodelf_eco_good_1_hail_gm_1568024c.mp3", "I see that you have many adventures ahead of you. This era of darkness is coming to a close.", "ponder", 3567183056, 3400757896, Spawn) + elseif choice == 2 then + PlayFlavor(NPC, "voiceover/english/woodelf_eco_good_1/ft/woodelf/woodelf_eco_good_1_hail_gm_27a6d736.mp3", "I find that a change in attitude often helps me steer through a difficult situation.", "agree", 1273495476, 2557846709, Spawn) + else + end + +end + diff --git a/server/SpawnScripts/ElddarGrove/PatrolwomanVarna.lua b/server/SpawnScripts/ElddarGrove/PatrolwomanVarna.lua new file mode 100644 index 000000000..b3c59b557 --- /dev/null +++ b/server/SpawnScripts/ElddarGrove/PatrolwomanVarna.lua @@ -0,0 +1,13 @@ +--[[ + Script Name : SpawnScripts/ElddarGrove/PatrolwomanVarna.lua + Script Purpose : Patrolwoman Varna + Script Author : John Adams + Script Date : 2008.09.28 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + PlayFlavor(NPC, "voiceover/english/barbarian_eco_good_1/ft/barbarian/barbarian_eco_good_1_hail_gf_ec4612.mp3", "Always be vigil, you never know when evil will strike.", "lookaway", 1096415868, 4151719434, Spawn) +end + diff --git a/server/SpawnScripts/ElddarGrove/PelleShinkicker.lua b/server/SpawnScripts/ElddarGrove/PelleShinkicker.lua new file mode 100644 index 000000000..aeac311a2 --- /dev/null +++ b/server/SpawnScripts/ElddarGrove/PelleShinkicker.lua @@ -0,0 +1,23 @@ +--[[ + Script Name : SpawnScripts/ElddarGrove/PelleShinkicker.lua + Script Purpose : Pelle Shinkicker + Script Author : John Adams + Script Date : 2008.09.28 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + choice = math.random(1,3) + + if choice == 1 then + PlayFlavor(NPC, "", "Oh, what is it now? Bristlebane's no doubt playing tricks on me again, causing all this interruption! Is there something meaningful I can help you with, or are you just going to gawk?", "", 1689589577, 4560189, Spawn) + elseif choice == 2 then + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_3_1006.mp3", "", "", 0, 0, Spawn) + elseif choice == 3 then + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_2_1006.mp3", "", "", 0, 0, Spawn) + else + end + +end + diff --git a/server/SpawnScripts/ElddarGrove/PreservationistReynolds.lua b/server/SpawnScripts/ElddarGrove/PreservationistReynolds.lua new file mode 100644 index 000000000..7b23e10bb --- /dev/null +++ b/server/SpawnScripts/ElddarGrove/PreservationistReynolds.lua @@ -0,0 +1,13 @@ +--[[ + Script Name : SpawnScripts/ElddarGrove/PreservationistReynolds.lua + Script Purpose : Preservationist Reynolds + Script Author : John Adams + Script Date : 2008.09.28 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + PlayFlavor(NPC, "voiceover/english/preservationist_reynolds/qey_elddar/100_soc_human_tunarian_officer_reynolds_no_2a5aeb44.mp3", "I haven't heard anything from the last scout party. They're a tough bunch. I hope they're all right.", "", 1752705355, 1563128162, Spawn) +end + diff --git a/server/SpawnScripts/ElddarGrove/RaskHelstot.lua b/server/SpawnScripts/ElddarGrove/RaskHelstot.lua new file mode 100644 index 000000000..59cab81f5 --- /dev/null +++ b/server/SpawnScripts/ElddarGrove/RaskHelstot.lua @@ -0,0 +1,34 @@ +--[[ + Script Name : SpawnScripts/ElddarGrove/RaskHelstot.lua + Script Purpose : Rask Helstot + Script Author : John Adams + Script Date : 2008.09.28 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +function spawn(NPC) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/optional1/rask_helstot/qey_elddar/raskhelstot000.mp3", "", "", 2809197179, 4166706387, Spawn) + AddConversationOption(conversation, "Trees... bah. ", "dlg_19_1") + StartConversation(conversation, NPC, Spawn, "Though it's the only remaining tree of its kind, the Elddar grows ever larger. Perhaps a symbol of Qeynos and her people even more fitting than the Claymore itself.") + if convo==20 then + PlayFlavor(NPC, "voiceover/english/optional1/rask_helstot/qey_elddar/raskhelstot000.mp3", "", "", 2809197179, 4166706387, Spawn) + AddConversationOption(conversation, "Trees... bah. ", "dlg_20_1") + StartConversation(conversation, NPC, Spawn, "Though it's the only remaining tree of its kind, the Elddar grows ever larger. Perhaps a symbol of Qeynos and her people even more fitting than the Claymore itself.") + end + +end + +--[[ raw_conversations + PlayFlavor(NPC, "", "Welcome to the Elddar grove, young one. Enjoy the shelter which the trees provide.", "", 1689589577, 4560189, Spawn) +--]] + diff --git a/server/SpawnScripts/ElddarGrove/SeniorInitiateDelvin.lua b/server/SpawnScripts/ElddarGrove/SeniorInitiateDelvin.lua new file mode 100644 index 000000000..f1b4ab404 --- /dev/null +++ b/server/SpawnScripts/ElddarGrove/SeniorInitiateDelvin.lua @@ -0,0 +1,23 @@ +--[[ + Script Name : SpawnScripts/ElddarGrove/SeniorInitiateDelvin.lua + Script Purpose : Senior Initiate Delvin + Script Author : John Adams + Script Date : 2008.09.28 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + choice = math.random(1,3) + + if choice == 1 then + PlayFlavor(NPC, "", "I wish I had the ability to keep the plants in my home happy.", "", 1689589577, 4560189, Spawn) + elseif choice == 2 then + PlayFlavor(NPC, "", "Almost time to stop and have an ale, isn't it?", "wink", 1689589577, 4560189, Spawn) + elseif choice == 3 then + PlayFlavor(NPC, "", "Oh, my aching back! As good a time to stop and chat as any, I say.", "yawn", 1689589577, 4560189, Spawn) + else + end + +end + diff --git a/server/SpawnScripts/ElddarGrove/ShakanNotebend.lua b/server/SpawnScripts/ElddarGrove/ShakanNotebend.lua new file mode 100644 index 000000000..b43177c4c --- /dev/null +++ b/server/SpawnScripts/ElddarGrove/ShakanNotebend.lua @@ -0,0 +1,30 @@ +--[[ + Script Name : SpawnScripts/ElddarGrove/ShakanNotebend.lua + Script Purpose : Shakan Notebend + Script Author : John Adams + Script Date : 2008.09.28 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +function spawn(NPC) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "lieoonlioo_croosinian/qey_elddar/trainer_dirge001.mp3", "", "", 3023305177, 4288429789, Spawn) + AddConversationOption(conversation, "Just looking around.", "dlg_17_1") + StartConversation(conversation, NPC, Spawn, "Well met, .. GetName(Spawn) .. . What brings you to the Elddar Grove this fine day?") + if convo==18 then + PlayFlavor(NPC, "lieoonlioo_croosinian/qey_elddar/trainer_dirge001.mp3", "", "", 3023305177, 4288429789, Spawn) + AddConversationOption(conversation, "Just looking around.", "dlg_18_1") + StartConversation(conversation, NPC, Spawn, "Well met, .. GetName(Spawn) .. . What brings you to the Elddar Grove this fine day?") + end + +end + diff --git a/server/SpawnScripts/ElddarGrove/ShepherdSell`ar.lua b/server/SpawnScripts/ElddarGrove/ShepherdSell`ar.lua new file mode 100644 index 000000000..c75db4ea3 --- /dev/null +++ b/server/SpawnScripts/ElddarGrove/ShepherdSell`ar.lua @@ -0,0 +1,13 @@ +--[[ + Script Name : SpawnScripts/ElddarGrove/ShepherdSell`ar.lua + Script Purpose : Shepherd Sell`ar + Script Author : John Adams + Script Date : 2008.09.28 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + PlayFlavor(NPC, "", "Keep your eyes on the horizon, my friend. Only through vigilance and defense can we keep Qeynos safe.", "", 1689589577, 4560189, Spawn) +end + diff --git a/server/SpawnScripts/ElddarGrove/SolomenStormwatch.lua b/server/SpawnScripts/ElddarGrove/SolomenStormwatch.lua new file mode 100644 index 000000000..a4d1cce73 --- /dev/null +++ b/server/SpawnScripts/ElddarGrove/SolomenStormwatch.lua @@ -0,0 +1,23 @@ +--[[ + Script Name : SpawnScripts/ElddarGrove/SolomenStormwatch.lua + Script Purpose : Solomen Stormwatch + Script Author : John Adams + Script Date : 2008.09.28 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + choice = math.random(1,3) + + if choice == 1 then + PlayFlavor(NPC, "", "To be among the highest leaves and branches of a tree is to feel free.", "", 1689589577, 4560189, Spawn) + elseif choice == 2 then + PlayFlavor(NPC, "", "I too long for my home in Faydark. Someday I am sure Tunare will answer us.", "", 1689589577, 4560189, Spawn) + elseif choice == 3 then + PlayFlavor(NPC, "", "The city is not the most beautiful place in Norrath, but it is at least familiar.", "", 1689589577, 4560189, Spawn) + else + end + +end + diff --git a/server/SpawnScripts/ElddarGrove/TairielOakshade.lua b/server/SpawnScripts/ElddarGrove/TairielOakshade.lua new file mode 100644 index 000000000..95464ff0c --- /dev/null +++ b/server/SpawnScripts/ElddarGrove/TairielOakshade.lua @@ -0,0 +1,23 @@ +--[[ + Script Name : SpawnScripts/ElddarGrove/TairielOakshade.lua + Script Purpose : Tairiel Oakshade + Script Author : John Adams + Script Date : 2008.09.28 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + choice = math.random(1,3) + + if choice == 1 then + PlayFlavor(NPC, "voiceover/english/human_eco_good_tunarianalliance/ft/eco/good/human_eco_good_tunarianalliance_hail_gm_2c2d0ef6.mp3", "The Tunarian Alliance preserves our memories of the breathing trees and singing streams of Jaggedpine.", "", 1912930054, 3530428976, Spawn) + elseif choice == 2 then + PlayFlavor(NPC, "voiceover/english/human_eco_good_tunarianalliance/ft/eco/good/human_eco_good_tunarianalliance_hail_gm_1bda6347.mp3", "The destructive methods of the Qeynos Guard will ravage that which it seeks to defend.", "", 421213855, 4168573173, Spawn) + elseif choice == 3 then + PlayFlavor(NPC, "voiceover/english/human_eco_good_tunarianalliance/ft/eco/good/human_eco_good_tunarianalliance_hail_gm_24723d84.mp3", "While the land suffers and cries out for immediate protection the Celestial Watch is content to look to myths and superstitions for our salvation.", "", 1704735533, 1025969438, Spawn) + else + end + +end + diff --git a/server/SpawnScripts/ElddarGrove/TakaraMaiya.lua b/server/SpawnScripts/ElddarGrove/TakaraMaiya.lua new file mode 100644 index 000000000..6cd9cf13c --- /dev/null +++ b/server/SpawnScripts/ElddarGrove/TakaraMaiya.lua @@ -0,0 +1,13 @@ +--[[ + Script Name : SpawnScripts/ElddarGrove/TakaraMaiya.lua + Script Purpose : Takara Maiya + Script Author : John Adams + Script Date : 2008.09.28 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + PlayFlavor(NPC, "voiceover/english/human_eco_good_1/ft/service/merchant/human_merchant_service_good_1_hail_gf_45d92a75.mp3", "Welcome! What can I help you with?", "bow", 1381598517, 719278997, Spawn) +end + diff --git a/server/SpawnScripts/ElddarGrove/Telandra.lua b/server/SpawnScripts/ElddarGrove/Telandra.lua new file mode 100644 index 000000000..86fa975db --- /dev/null +++ b/server/SpawnScripts/ElddarGrove/Telandra.lua @@ -0,0 +1,23 @@ +--[[ + Script Name : SpawnScripts/ElddarGrove/Telandra.lua + Script Purpose : Telandra + Script Author : John Adams + Script Date : 2008.09.28 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + choice = math.random(1,3) + + if choice == 1 then + PlayFlavor(NPC, "voiceover/english/woodelf_eco_race_good/ft/eco/good/woodelf_eco_race_good_hail_gf_3e59423a.mp3", "The blessing of Tunare is the highest blessing of all.", "", 853299003, 3297095439, Spawn) + elseif choice == 2 then + PlayFlavor(NPC, "voiceover/english/woodelf_eco_race_good/ft/eco/good/woodelf_eco_race_good_hail_gf_50387146.mp3", "To be among the highest leaves and branches of a tree is to feel free.", "", 1191446540, 711911709, Spawn) + elseif choice == 3 then + PlayFlavor(NPC, "voiceover/english/woodelf_eco_race_good/ft/eco/good/woodelf_eco_race_good_woodelf_gf_5621269a.mp3", "I too long for my home in Faydark. Someday Tunare will answer us, I'm sure.", "", 3953058409, 3176959607, Spawn) + else + end + +end + diff --git a/server/SpawnScripts/ElddarGrove/ThomasBoatmend.lua b/server/SpawnScripts/ElddarGrove/ThomasBoatmend.lua new file mode 100644 index 000000000..719fd956f --- /dev/null +++ b/server/SpawnScripts/ElddarGrove/ThomasBoatmend.lua @@ -0,0 +1,23 @@ +--[[ + Script Name : SpawnScripts/ElddarGrove/ThomasBoatmend.lua + Script Purpose : Thomas Boatmend + Script Author : John Adams + Script Date : 2008.09.28 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + choice = math.random(1,3) + + if choice == 1 then + PlayFlavor(NPC, "voiceover/english/halfelf_eco_race_good/ft/eco/good/halfelf_eco_race_good_hail_gm_15163426.mp3", "You talk to strangers? What's the purpose of that?", "", 1620470786, 1752689340, Spawn) + elseif choice == 2 then + PlayFlavor(NPC, "voiceover/english/halfelf_eco_race_good/ft/eco/good/halfelf_eco_race_good_woodelf_gm_2fa5fd3b.mp3", "We'll have to get together for a goblet of wine sometime soon. Your treat.", "", 2999782150, 334868042, Spawn) + elseif choice == 3 then + PlayFlavor(NPC, "voiceover/english/halfelf_eco_race_good/ft/eco/good/halfelf_eco_race_good_woodelf_gm_876eb977.mp3", "I wish I had \"good old days\" to remember, like you do. Ah, well. Best to worry about today and not yesterday.", "", 918037021, 185336532, Spawn) + else + end + +end + diff --git a/server/SpawnScripts/ElddarGrove/TowserFlizgibbert.lua b/server/SpawnScripts/ElddarGrove/TowserFlizgibbert.lua new file mode 100644 index 000000000..06f7f7fd3 --- /dev/null +++ b/server/SpawnScripts/ElddarGrove/TowserFlizgibbert.lua @@ -0,0 +1,30 @@ +--[[ + Script Name : SpawnScripts/ElddarGrove/TowserFlizgibbert.lua + Script Purpose : Towser Flizgibbert + Script Author : John Adams + Script Date : 2008.09.28 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +function spawn(NPC) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_3_1006.mp3", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Nothing.", "dlg_0_1") + StartConversation(conversation, NPC, Spawn, "Well? What do you want?") + if convo==1 then + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_3_1006.mp3", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Nothing.", "dlg_1_1") + StartConversation(conversation, NPC, Spawn, "Well? What do you want?") + end + +end + diff --git a/server/SpawnScripts/ElddarGrove/TransportTreeLift.lua b/server/SpawnScripts/ElddarGrove/TransportTreeLift.lua new file mode 100644 index 000000000..92f6dbdd2 --- /dev/null +++ b/server/SpawnScripts/ElddarGrove/TransportTreeLift.lua @@ -0,0 +1,22 @@ +--[[ + Script Name : + Script Purpose : + Script Author : + Script Date : + Script Notes : +--]] + +function spawn(NPC) +-- AddTransportSpawn(NPC) +-- AddTimer(NPC, 15, "UseLift") + AddMultiFloorLift(NPC) +end + +function respawn(NPC) + spawn(NPC) +end + +function UseLift(NPC) + UseWidget(NPC) + AddTimer(NPC, 15, "UseLift") +end diff --git a/server/SpawnScripts/ElddarGrove/TrayloLeafsway.lua b/server/SpawnScripts/ElddarGrove/TrayloLeafsway.lua new file mode 100644 index 000000000..51474358e --- /dev/null +++ b/server/SpawnScripts/ElddarGrove/TrayloLeafsway.lua @@ -0,0 +1,21 @@ +--[[ + Script Name : SpawnScripts/ElddarGrove/TrayloLeafsway.lua + Script Purpose : Traylo Leafsway + Script Author : John Adams + Script Date : 2008.09.28 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + choice = math.random(1,2) + + if choice == 1 then + PlayFlavor(NPC, "", "Greetings citizen. Please see me if you have any armor from Gildas that you wish to be rid of, I have some newer armor that may interest you. ", "", 1689589577, 4560189, Spawn) + elseif choice == 2 then + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_1_1012.mp3", "", "", 0, 0, Spawn) + else + end + +end + diff --git a/server/SpawnScripts/ElddarGrove/Trillium.lua b/server/SpawnScripts/ElddarGrove/Trillium.lua new file mode 100644 index 000000000..eef2cd292 --- /dev/null +++ b/server/SpawnScripts/ElddarGrove/Trillium.lua @@ -0,0 +1,21 @@ +--[[ + Script Name : SpawnScripts/ElddarGrove/Trillium.lua + Script Purpose : Trillium + Script Author : John Adams + Script Date : 2008.09.28 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + choice = math.random(1,2) + + if choice == 1 then + PlayFlavor(NPC, "voiceover/english/woodelf_eco_good_1/ft/service/merchant/woodelf_merchant_service_good_1_hail_gm_ae84abf9.mp3", "Go on, take a look at the stock. You'll never beat this price in the city. I guarantee it!", "wink", 1332319343, 1214035917, Spawn) + elseif choice == 2 then + PlayFlavor(NPC, "voiceover/english/woodelf_eco_good_1/ft/service/merchant/woodelf_merchant_service_good_1_hail_gm_e4fa2bd8.mp3", "Confound it! Where did I put that ledger? It must be around here somewhere!", "confused", 2211929083, 2050297502, Spawn) + else + end + +end + diff --git a/server/SpawnScripts/ElddarGrove/VelisarrMorningdew.lua b/server/SpawnScripts/ElddarGrove/VelisarrMorningdew.lua new file mode 100644 index 000000000..f68d3ff5d --- /dev/null +++ b/server/SpawnScripts/ElddarGrove/VelisarrMorningdew.lua @@ -0,0 +1,23 @@ +--[[ + Script Name : SpawnScripts/ElddarGrove/VelisarrMorningdew.lua + Script Purpose : Velisarr Morningdew + Script Author : John Adams + Script Date : 2008.09.28 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + choice = math.random(1,3) + + if choice == 1 then + PlayFlavor(NPC, "voiceover/english/halfelf_eco_good_1/ft/halfelf/halfelf_eco_good_1_hail_gf_1f61925a.mp3", "Are my roots showing? I think I'll go for a light blueberry mixed with jum-jum highlights.", "ponder", 4153154191, 497875539, Spawn) + elseif choice == 2 then + PlayFlavor(NPC, "voiceover/english/halfelf_eco_good_1/ft/halfelf/halfelf_eco_good_1_hail_gf_62804932.mp3", "I'm only happy when it rains. Well.. I like sunny days too. Okay... I'm actually happy all the time.", "confused", 1094375942, 2257836955, Spawn) + elseif choice == 3 then + PlayFlavor(NPC, "voiceover/english/halfelf_eco_good_1/ft/halfelf/halfelf_eco_good_1_hail_gf_4a0665a0.mp3", "I'm so depressed! I had to work all day!", "sad", 3176397311, 2616932103, Spawn) + else + end + +end + diff --git a/server/SpawnScripts/ElddarGrove/WandererGreencoast.lua b/server/SpawnScripts/ElddarGrove/WandererGreencoast.lua new file mode 100644 index 000000000..428410697 --- /dev/null +++ b/server/SpawnScripts/ElddarGrove/WandererGreencoast.lua @@ -0,0 +1,13 @@ +--[[ + Script Name : SpawnScripts/ElddarGrove/WandererGreencoast.lua + Script Purpose : Wanderer Greencoast + Script Author : John Adams + Script Date : 2008.09.28 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + PlayFlavor(NPC, "voiceover/english/wanderer_greencoast/qey_elddar/100_soc_halfelf_tunarian_greencoast_no_bb7dd68a.mp3", "The beauty of this grove never ceases to amaze me. Even in these troubled times, it's nice to have a place like this to call home.", "ponder", 3937595692, 13857061, Spawn) +end + diff --git a/server/SpawnScripts/ElddarGrove/WandererRaegenTruthshadow.lua b/server/SpawnScripts/ElddarGrove/WandererRaegenTruthshadow.lua new file mode 100644 index 000000000..64e49943f --- /dev/null +++ b/server/SpawnScripts/ElddarGrove/WandererRaegenTruthshadow.lua @@ -0,0 +1,21 @@ +--[[ + Script Name : SpawnScripts/ElddarGrove/WandererRaegenTruthshadow.lua + Script Purpose : Wanderer Raegen Truthshadow + Script Author : John Adams + Script Date : 2008.09.28 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + choice = math.random(1,2) + + if choice == 1 then + PlayFlavor(NPC, "", "Keep your eyes on the horizon, my friend. Only through vigilance and defense can we keep Qeynos safe.", "", 1689589577, 4560189, Spawn) + elseif choice == 2 then + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_3_1021.mp3", "", "", 0, 0, Spawn) + else + end + +end + diff --git a/server/SpawnScripts/ElddarGrove/WarbleWildmane.lua b/server/SpawnScripts/ElddarGrove/WarbleWildmane.lua new file mode 100644 index 000000000..fd259ccdd --- /dev/null +++ b/server/SpawnScripts/ElddarGrove/WarbleWildmane.lua @@ -0,0 +1,48 @@ +--[[ + Script Name : SpawnScripts/ElddarGrove/WarbleWildmane.lua + Script Purpose : Warble Wildmane + Script Author : John Adams + Script Date : 2008.09.28 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +function spawn(NPC) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_1_1006.mp3", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Sorry to interrupt. Goodbye.", "dlg_7_1") + StartConversation(conversation, NPC, Spawn, "Shh! Old Treebark's talking!") + if convo==8 then + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_3_1006.mp3", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Sorry to interrupt. Goodbye.", "dlg_8_1") + StartConversation(conversation, NPC, Spawn, "Shh! Old Treebark's talking!") + end + +end + +function dlg_7_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Goodbye.", "dlg_7_2") + StartConversation(conversation, NPC, Spawn, "Goodbye!") +end + +function dlg_8_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Goodbye.", "dlg_8_2") + StartConversation(conversation, NPC, Spawn, "Goodbye!") +end + diff --git a/server/SpawnScripts/ElddarGrove/WesaelanBrookshadow.lua b/server/SpawnScripts/ElddarGrove/WesaelanBrookshadow.lua new file mode 100644 index 000000000..15798456b --- /dev/null +++ b/server/SpawnScripts/ElddarGrove/WesaelanBrookshadow.lua @@ -0,0 +1,36 @@ +--[[ + Script Name : SpawnScripts/ElddarGrove/WesaelanBrookshadow.lua + Script Purpose : Wesaelan Brookshadow + Script Author : John Adams + Script Date : 2008.09.28 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +function spawn(NPC) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/optional4/wesaelan_brookshadow/brookshadow_01.mp3", "", "", 2834600234, 1504715618, Spawn) + AddConversationOption(conversation, "Thank you, and good day to you.", "dlg_13_1") + StartConversation(conversation, NPC, Spawn, "Hail traveler! All friends of the Elddar are welcome.") + if convo==14 then + PlayFlavor(NPC, "voiceover/english/optional4/wesaelan_brookshadow/brookshadow_01.mp3", "", "", 2834600234, 1504715618, Spawn) + AddConversationOption(conversation, "Thank you, and good day to you.", "dlg_14_1") + StartConversation(conversation, NPC, Spawn, "Hail traveler! All friends of the Elddar are welcome.") + end + + if convo==15 then + PlayFlavor(NPC, "voiceover/english/optional4/wesaelan_brookshadow/brookshadow_01.mp3", "", "", 2834600234, 1504715618, Spawn) + AddConversationOption(conversation, "Thank you, and good day to you.", "dlg_15_1") + StartConversation(conversation, NPC, Spawn, "Hail traveler! All friends of the Elddar are welcome.") + end + +end + diff --git a/server/SpawnScripts/ElddarGrove/slidingdoor.lua b/server/SpawnScripts/ElddarGrove/slidingdoor.lua new file mode 100644 index 000000000..9620bad32 --- /dev/null +++ b/server/SpawnScripts/ElddarGrove/slidingdoor.lua @@ -0,0 +1,16 @@ +--[[ + Script Name : SpawnScripts/ElddarGrove/slidingdoor.lua + Script Author : Jabantiz + Script Date : 2018.06.04 09:06:08 + Script Purpose : + : +--]] + +function spawn(NPC) + --AddMultiFloorLift(NPC) +end + +function respawn(NPC) +Spawn(NPC) +end + diff --git a/server/SpawnScripts/EnchantedLands/AuginDrodo.lua b/server/SpawnScripts/EnchantedLands/AuginDrodo.lua new file mode 100644 index 000000000..eacbe5daf --- /dev/null +++ b/server/SpawnScripts/EnchantedLands/AuginDrodo.lua @@ -0,0 +1,57 @@ +--[[ + Script Name : SpawnScripts/EnchantedLands/AuginDrodo.lua + Script Purpose : Augin Drodo + Script Author : Cynnar + Script Date : 2015.02.17 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +local DrodosGoodies = 119 + +function spawn(NPC) + ProvidesQuest(NPC, DrodosGoodies) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + if GetQuestStep(Spawn, DrodosGoodies) == 5 then + SetStepComplete(Spawn, DrodosGoodies, 5) + PlayFlavor(NPC, "augin_drodo/enchanted/augin_drodo005.mp3", "", "", 3737453066, 827504034, Spawn) + AddConversationOption(conversation, "My pleasure Augin. ") + StartConversation(conversation, NPC, Spawn, "Brell's toes! You did it! I thought I'd never see my goodies again. Thank you very much, adventurer.") + elseif HasQuest(Spawn, DrodosGoodies) then + PlayFlavor(NPC, "augin_drodo/enchanted/augin_drodo004.mp3", "", "", 3781017237, 1546523399, Spawn) + AddConversationOption(conversation, "You're right. I will complete the task.") + StartConversation(conversation, NPC, Spawn, "Change your mind, friend? I wasn't expecting a trotter like you to leave a task undone.") + elseif HasCompletedQuest(Spawn, DrodosGoodies) then + PlayFlavor(NPC, "augin_drodo/enchanted/augin_drodo015.mp3", "", "", 2767747634, 2031605868, Spawn) + AddConversationOption(conversation, "They got no souvenirs from me Augin. See you around.") + StartConversation(conversation, NPC, Spawn, "Good to see you in one piece, friend. It's not often adventurers return ... at least not with all their limbs intact. The critters tend to keep a few souvenirs, ya know?") + elseif not HasQuest(Spawn, DrodosGoodies) then + PlayFlavor(NPC, "augin_drodo/enchanted/augin_drodo001.mp3", "", "", 3076457390, 3089637285, Spawn) + AddConversationOption(conversation, "You say that like they ruined your picnic. ", "dlg_0_1") + AddConversationOption(conversation, "I'll watch my step. Thank you.") + StartConversation(conversation, NPC, Spawn, "These misty lands are very dangerous. One can't even picnic and slumber without being pestered by the critters!") + end +end + +function dlg_0_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "augin_drodo/enchanted/augin_drodo002.mp3", "", "", 3561207017, 3513321017, Spawn) + AddConversationOption(conversation, "I can look for your goodies. ", "dlg_0_2") + AddConversationOption(conversation, "Maybe next time you'll know better. Farewell. ") + StartConversation(conversation, NPC, Spawn, "Ruined my picnic, ruined my slumber, ruined my reading time! I was just minding my own when those blasted briarpaws came a rumbling towards me! I ran for my life! Left all my goodies to the critters!") +end + +function dlg_0_2(NPC, Spawn) + OfferQuest(NPC, Spawn, DrodosGoodies) +end + diff --git a/server/SpawnScripts/EnchantedLands/BiddyBobick.lua b/server/SpawnScripts/EnchantedLands/BiddyBobick.lua new file mode 100644 index 000000000..ba00c8cb1 --- /dev/null +++ b/server/SpawnScripts/EnchantedLands/BiddyBobick.lua @@ -0,0 +1,53 @@ +--[[ + Script Name : SpawnScripts/EnchantedLands/BiddyBobick.lua + Script Purpose : Biddy Bobick + Script Author : Cynnar + Script Date : 2015.02.17 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +function spawn(NPC) + +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/biddy_bobick/enchanted/biddy_bobick000.mp3", "", "cry", 1953488725, 856940273, Spawn) + AddConversationOption(conversation, "At ease halfling! I am no pirate! ", "dlg_0_1") + AddConversationOption(conversation, "You're in no condition to talk. Farewell.") + StartConversation(conversation, NPC, Spawn, "Please spare me, good pirate! Spare me! Take everything! Take everything! Just leave me my life ... my life and ... and ... maybe a fishing pole. My life and a fishing pole. And ... and ... maybe some bait... Ya can't fish without bait!! Spare me! Spare me!") +end + +function dlg_0_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/biddy_bobick/enchanted/biddy_bobick001.mp3", "", "", 2271087281, 754687626, Spawn) + AddConversationOption(conversation, "Save you from what? ", "dlg_0_2") + AddConversationOption(conversation, "I will do what I can. Now I must go.") + StartConversation(conversation, NPC, Spawn, "Do my halfling eyes deceive me? Brell's toes! A ship without skulls and crossed swords! Welcome! Welcome to Bobick's Boats and the Enchanted Lands. We've been praying to Brell for a ship to save us!") +end + +function dlg_0_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/biddy_bobick/enchanted/biddy_bobick002.mp3", "", "", 2563393725, 4253211022, Spawn) + AddConversationOption(conversation, "I shall heed your warning and explore this land. Be safe. ", "dlg_7_3") + StartConversation(conversation, NPC, Spawn, "Danger surrounds us here ... deep in what was once the Misty Thicket. Horrid goblins and beasts infest the land. Should you walk the trails and beyond you'll find them. Be wise, my friend. Travel in a group. That's what we survivors do. And sometimes not even that will save you.") +end + +function dlg_1_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/biddy_bobick/enchanted/biddy_bobick003.mp3", "", "", 1607211097, 1962573681, Spawn) + AddConversationOption(conversation, "Glad to see you doing well Biddy. ", "dlg_22_1") + StartConversation(conversation, NPC, Spawn, "Welcome back to Bobick's Boats, my friend! Neither shattered moons nor beasts from beyond can keep a Bobick out of business.") +end \ No newline at end of file diff --git a/server/SpawnScripts/EnchantedLands/CaptainScreewoggins.lua b/server/SpawnScripts/EnchantedLands/CaptainScreewoggins.lua new file mode 100644 index 000000000..34c70a2a3 --- /dev/null +++ b/server/SpawnScripts/EnchantedLands/CaptainScreewoggins.lua @@ -0,0 +1,28 @@ +--[[ + Script Name : SpawnScripts/EnchantedLands/CaptainScreewoggins.lua + Script Purpose : Captain Screewoggins + Script Author : Cynnar + Script Date : 2015.03.30 + Script Notes : Manually Created Conversation +--]] + +function spawn(NPC) + SetPlayerProximityFunction(NPC, 10, "InRange", "LeaveRange") +end + +function respawn(NPC) + spawn(NPC) +end + +function InRange(NPC, Spawn) +end + +function LeaveRange(NPC, Spawn) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + StartConversation(conversation, NPC, Spawn, "Hail yerself, landlubber. If'n ye don't mind, I have things dat be needin' me attention.") +end \ No newline at end of file diff --git a/server/SpawnScripts/EnchantedLands/GimbleFeatherfinger.lua b/server/SpawnScripts/EnchantedLands/GimbleFeatherfinger.lua new file mode 100644 index 000000000..23e58e0a2 --- /dev/null +++ b/server/SpawnScripts/EnchantedLands/GimbleFeatherfinger.lua @@ -0,0 +1,20 @@ +--[[ + Script Name : SpawnScripts/EnchantedLands/GimbleFeatherfinger.lua + Script Author : Cynnar + Script Date : 2015.05.09 12:05:50 + Script Purpose : + : +--]] + +function spawn(NPC) + +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) +end + +function respawn(NPC) + +end + diff --git a/server/SpawnScripts/EnchantedLands/Grix.lua b/server/SpawnScripts/EnchantedLands/Grix.lua new file mode 100644 index 000000000..53c0460a6 --- /dev/null +++ b/server/SpawnScripts/EnchantedLands/Grix.lua @@ -0,0 +1,28 @@ +--[[ + Script Name : SpawnScripts/EnchantedLands/Grix.lua + Script Purpose : Grix + Script Author : TyroneSWG + Script Date : 2019.01.14 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +function spawn(NPC) + SetPlayerProximityFunction(NPC, 10, "InRange", "LeaveRange") +end + +function respawn(NPC) + spawn(NPC) +end + +function InRange(NPC, Spawn) +end + +function LeaveRange(NPC, Spawn) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + + PlayFlavor(NPC, "", "Aieeeee!!", "", 1689589577, 4560189, Spawn) +end + diff --git a/server/SpawnScripts/EnchantedLands/GubboChaley.lua b/server/SpawnScripts/EnchantedLands/GubboChaley.lua new file mode 100644 index 000000000..87bcc6228 --- /dev/null +++ b/server/SpawnScripts/EnchantedLands/GubboChaley.lua @@ -0,0 +1,60 @@ +--[[ + Script Name : SpawnScripts/EnchantedLands/GubboChaley.lua + Script Purpose : Gubbo Chaley + Script Author : Cynnar + Script Date : 2015.04.01 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] +local LousyFairies = 117 + +function spawn(NPC) + ProvidesQuest(NPC, LousyFairies) + SetPlayerProximityFunction(NPC, 10, "InRange") +end + +function respawn(NPC) + spawn(NPC) +end + +function InRange(NPC, Spawn) + PlayFlavor(NPC, "voiceover/english/gubbo_chaley/enchanted/halflings/halfling_gubbo_chaley_callout_f7b85d2f.mp3", "Fritz! They killed Fritz! Those lousy fairies killed Fritz!", "", 2757692791, 3745928300, Spawn) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + if HasQuest(Spawn, LousyFairies) and GetQuestStep(Spawn, LousyFairies) == 1 then + PlayFlavor(NPC, "voiceover/english/gubbo_chaley/enchanted/gubbo_chaley/gubbo_chaley003.mp3", "", "", 2620521649, 511313166, Spawn) + AddConversationOption(conversation, "Settle down.") + StartConversation(conversation, NPC, Spawn, "What are you doing!? You're sure not killing those miserable, low-down, good-for-nothing fairies! They killed Fritz!") + elseif HasQuest(Spawn, LousyFairies) and GetQuestStep(Spawn, LousyFairies) == 2 then + SetStepComplete(Spawn, LousyFairies, 2) + AddConversationOption(conversation, "Yes.", "dlg_0_1") + StartConversation(conversation, QuestGiver, Player, "Uh ... so you killed them fairies, yeah?") + elseif not HasCompletedQuest(Spawn, LousyFairies) and not HasQuest(Spawn, LousyFairies) then + PlayFlavor(NPC, "voiceover/english/gubbo_chaley/enchanted/gubbo_chaley/gubbo_chaley001.mp3", "", "", 1577103216, 3792943385, Spawn) + AddConversationOption(conversation, "Sure.", "dlg_0_2") + AddConversationOption(conversation, "I don't know Fritz.") + StartConversation(conversation, NPC, Spawn, "Kill them! I want you to kill those lousy, stinking, yellow fairies! You'll do this for me, right? You'll do this for Fritz! ") + elseif HasCompletedQuest(Spawn, LousyFairies) then + PlayFlavor(NPC, "voiceover/english/gubbo_chaley/enchanted/gubbo_chaley/gubbo_chaley003.mp3", "", "", 2620521649, 511313166, Spawn) + AddConversationOption(conversation, "Sure.") + StartConversation(conversation, NPC, Spawn, "If you see Fritz, would you tell him I'm looking for him?") + end +end + +function dlg_0_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + SetStepComplete(Spawn, LousyFairies, 2) + PlayFlavor(NPC, "voiceover/english/gubbo_chaley/enchanted/gubbo_chaley/gubbo_chaley005.mp3", "", "", 2881662034, 1373874040, Spawn) + AddConversationOption(conversation, "Right.") + StartConversation(conversation, NPC, Spawn, "I'm really sorry about that. Turns out, Fritz was just passed out under the docks. Umm ... why don't you take this, and we'll just pretend we never had this little discussion. ") +end + +function dlg_0_2(NPC, Spawn) + OfferQuest(NPC, Spawn, LousyFairies) +end + + diff --git a/server/SpawnScripts/EnchantedLands/HoppertBarbinsteel.lua b/server/SpawnScripts/EnchantedLands/HoppertBarbinsteel.lua new file mode 100644 index 000000000..8209cc1f4 --- /dev/null +++ b/server/SpawnScripts/EnchantedLands/HoppertBarbinsteel.lua @@ -0,0 +1,28 @@ +--[[ + Script Name : SpawnScripts/EnchantedLands/HoppertBarbinsteel.lua + Script Purpose : Hoppert Barbinsteel + Script Author : Cynnar + Script Date : 2015.03.30 + Script Notes : Manually Created Conversation +--]] + +function spawn(NPC) + SetPlayerProximityFunction(NPC, 10, "InRange", "LeaveRange") +end + +function respawn(NPC) + spawn(NPC) +end + +function InRange(NPC, Spawn) +end + +function LeaveRange(NPC, Spawn) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + StartConversation(conversation, NPC, Spawn, "Do not confuse me as some simple mountebank, selling whatever sort of quack medicine the local alchemist claims to cure your sniffles. I assure you, our paths are never meant to cross. Good day.") +end \ No newline at end of file diff --git a/server/SpawnScripts/EnchantedLands/RoseliaGoldencrust.lua b/server/SpawnScripts/EnchantedLands/RoseliaGoldencrust.lua new file mode 100644 index 000000000..ab33803f4 --- /dev/null +++ b/server/SpawnScripts/EnchantedLands/RoseliaGoldencrust.lua @@ -0,0 +1,49 @@ +--[[ + Script Name : SpawnScripts/EnchantedLands/RoseliaGoldencrust.lua + Script Purpose : Roselia Goldencrust + Script Author : Cynnar + Script Date : 2015.02.24 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +function spawn(NPC) +end + +function respawn(NPC) + spawn(NPC) +end + +function InRange(NPC, Spawn) +end + +function LeaveRange(NPC, Spawn) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "roselia_goldencrust/_exp03/deity/bristlebane/roselia/roselia_goldencrust004.mp3", "", "", 925124071, 4075374228, Spawn) + AddConversationOption(conversation, "How's business?", "dlg_0_1") + AddConversationOption(conversation, "Nevermind.") + StartConversation(conversation, NPC, Spawn, "Yes dear? How may I help you?") +end + +function dlg_0_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "roselia_goldencrust/_exp03/deity/bristlebane/roselia/roselia_goldencrust005.mp3", "", "", 1048944955, 1278695573, Spawn) + AddConversationOption(conversation, "How do you know?", "dlg_0_2") + StartConversation(conversation, NPC, Spawn, "Oh... I suppose it could be better. This location is not exactly ideal. Most of the people passing through here are adventurers like yourself who don't seem too interested in buying pies. I get along well enough I suppose. What's important is that I'm back here in the Misty Thicket and I'm sure we'll be able to wrestle our homeland away from the grips of the foul evil that has come to plague these lands.") +end + +function dlg_0_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "roselia_goldencrust/_exp03/deity/bristlebane/roselia/roselia_goldencrust006.mp3", "", "", 3761071007, 78243092, Spawn) + AddConversationOption(conversation, "Indeed. We shall see!") + StartConversation(conversation, NPC, Spawn, "Well, with the return of Bristlebane, it's a sure sign that now is the time for us to finally take back our homeland.") +end + diff --git a/server/SpawnScripts/EnchantedLands/SarmaSingebellows.lua b/server/SpawnScripts/EnchantedLands/SarmaSingebellows.lua new file mode 100644 index 000000000..1090249c7 --- /dev/null +++ b/server/SpawnScripts/EnchantedLands/SarmaSingebellows.lua @@ -0,0 +1,67 @@ +--[[ + Script Name : SpawnScripts/EnchantedLands/SarmaSingebellows.lua + Script Purpose : Sarma Singebellows + Script Author : Cynnar + Script Date : 2015.02.24 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +local ThreeMeaningsOfLife = 115 +local HelpingSarmaSingebellows = 116 + +function spawn(NPC) + ProvidesQuest(NPC, HelpingSarmaSingebellows) + SetPlayerProximityFunction(NPC, 10, "InRange", "LeaveRange") +end + +function respawn(NPC) + spawn(NPC) +end + +function InRange(NPC, Spawn) + PlayFlavor(NPC, "voiceover/english/sarma_singebellows/enchanted/halflings/halfling_sarma_singebellows_aoi_callout_unfamiliar_c1948f9b.mp3", "Hey you, c'mere for a sec.", "", 1781622145, 522858713, Spawn) +end + +function LeaveRange(NPC, Spawn) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + if HasQuest(Spawn, ThreeMeaningsOfLife) and GetQuestStep(Spawn, ThreeMeaningsOfLife) == 5 then + SetStepComplete(Spawn, ThreeMeaningsOfLife, 5) + end + + if HasQuest(Spawn, HelpingSarmaSingebellows) and GetQuestStep(Spawn, HelpingSarmaSingebellows) == 1 then + PlayFlavor(NPC, "voiceover/english/sarma_singebellows/enchanted/sarma_singebellows003.mp3", "", "", 2781954391, 3596902388, Spawn) + AddConversationOption(conversation, "Okay.") + StartConversation(conversation, NPC, Spawn, "I'm happy to see you're doing well, but I need you to destroy more goblins!") + elseif GetQuestStep(Spawn, HelpingSarmaSingebellows) == 2 then + SetStepComplete(Spawn, HelpingSarmaSingebellows, 2) + PlayFlavor(NPC, "voiceover/english/sarma_singebellows/enchanted/halflings/halfling_sarma_singebellows_aoi_callout_familiar_2888fa3f.mp3", "Hi, friend! Are you interested in helping me again?", "", 4027326251, 2342769721, Spawn) + AddConversationOption(conversation, "Sure, I'll help you again.", "dlg_2_1") + AddConversationOption(conversation, "Not right now.") + StartConversation(conversation, NPC, Spawn, "Thank you for your help! Please take this in return for you hard work. Do you think you can help me some more?") + elseif not HasQuest(Spawn, HelpingSarmaSingebellows) then + PlayFlavor(NPC, "voiceover/english/sarma_singebellows/enchanted/sarma_singebellows001.mp3", "", "", 2567471842, 71486470, Spawn) + AddConversationOption(conversation, "Sure, I'll hekp you.", "dlg_1_1") + AddConversationOption(conversation, "I'm not interested in helping.") + StartConversation(conversation, NPC, Spawn, "See the water here? The surrounding land tries to filter as much of the evil as it can out of its lifesblood, yet we hang by a thread day by day. The goblins around here aren't helping, with the grime and muck they pour into the lakes and rivers. Do you think you could put a stop to them?") + end +end + +function dlg_1_1(NPC, Spawn) + OfferQuest(NPC, Spawn, HelpingSarmaSingebellows) +end + +function dlg_2_1(NPC, Spawn) + SetTempVariable(Spawn, "HelpingSarmaSingebellows", "true") + OfferQuest(NPC, Spawn, HelpingSarmaSingebellows) +end + +--[[ raw_conversations + PlayFlavor(NPC, "voiceover/english/sarma_singebellows/enchanted/halflings/halfling_sarma_singebellows_aoi_callout_unfamiliar_c1948f9b.mp3", "Hey you, c'mere for a sec.", "", 1781622145, 522858713, Spawn) + PlayFlavor(NPC, "voiceover/english/sarma_singebellows/enchanted/halflings/halfling_sarma_singebellows_aoi_callout_familiar_2888fa3f.mp3", "Hi, friend! Are you interested in helping me again?", "", 4027326251, 2342769721, Spawn) +--]] + diff --git a/server/SpawnScripts/EnchantedLands/TheCuriousAugur.lua b/server/SpawnScripts/EnchantedLands/TheCuriousAugur.lua new file mode 100644 index 000000000..9350aa1ca --- /dev/null +++ b/server/SpawnScripts/EnchantedLands/TheCuriousAugur.lua @@ -0,0 +1,213 @@ +--[[ + Script Name : SpawnScripts/EnchantedLands/TheCuriousAugur.lua + Script Purpose : The Curious Augur + Script Author : Cynnar + Script Date : 2015.02.17 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +local ThreeMeaningsOfLife = 115 + +function spawn(NPC) + ProvidesQuest(NPC, ThreeMeaningsOfLife) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + + if not HasQuest(Spawn, ThreeMeaningsOfLife) and not HasCompletedQuest(Spawn, ThreeMeaningsOfLife) or HasQuest(Spawn, ThreeMeaningsOfLife) and GetQuestStep(Spawn, ThreeMeaningsOfLife) == 1 then + -- start the quest + PlayFlavor(NPC, "voiceover/english/the_curious_augur/enchanted/quests/quest_curious_augur/curious_augur001.mp3", "", "", 2804170240, 1658399698, Spawn) + AddConversationOption(conversation, "You were expecting me?", "dlg_0_1") + AddConversationOption(conversation, "I have no idea what you're talking about.") + StartConversation(conversation, NPC, Spawn, "Ah, so you've arrived at last! I wondered when you would seek my knowledge of the meaning of life. Come closer and we shall begin your quest for enlightenment, my child.") + elseif HasQuest(Spawn, ThreeMeaningsOfLife) and GetQuestStep(Spawn, ThreeMeaningsOfLife) == 2 then + -- on step 2 + PlayFlavor(NPC, "voiceover/english/the_curious_augur/enchanted/quests/quest_curious_augur/curious_augur004.mp3", "", "", 2520256937, 2710009453, Spawn) + AddConversationOption(conversation, "I suppose so.", "QuestChat_1_2") + AddConversationOption(conversation, "Probably not.") + StartConversation(conversation, NPC, Spawn, "You are on your way towards mastering the intellectual meaning of life, are you not? Are you ready to learn the next meaning of life?") + elseif HasQuest(Spawn, ThreeMeaningsOfLife) and GetQuestStep(Spawn, ThreeMeaningsOfLife) == 3 then + -- on step 3 + PlayFlavor(NPC, "voiceover/english/the_curious_augur/enchanted/quests/quest_curious_augur/curious_augur006.mp3", "", "", 897853069, 726940756, Spawn) + AddConversationOption(conversation, "Not yet.") + StartConversation(conversation, NPC, Spawn, "You've been eliminating the salt snappers?") + elseif HasQuest(Spawn, ThreeMeaningsOfLife) and GetQuestStep(Spawn, ThreeMeaningsOfLife) == 4 then + -- on step 4 + PlayFlavor(NPC, "voiceover/english/the_curious_augur/enchanted/quests/quest_curious_augur/curious_augur006.mp3", "", "", 897853069, 726940756, Spawn) + AddConversationOption(conversation, "Yes, didn't you see me?", "QuestChat_2_2") + AddConversationOption(conversation, "Not yet.") + StartConversation(conversation, NPC, Spawn, "You've been eliminating the salt snappers?") + elseif HasQuest(Spawn, ThreeMeaningsOfLife) and GetQuestStep(Spawn, ThreeMeaningsOfLife) == 5 then + -- on step 5 + PlayFlavor(NPC, "voiceover/english/the_curious_augur/enchanted/quests/quest_curious_augur/curious_augur009.mp3", "", "", 2774283468, 3531323088, Spawn) + AddConversationOption(conversation, "Not yet.") + StartConversation(conversation, NPC, Spawn, "Did you speak with Sarma Singebellows?") + elseif HasQuest(Spawn, ThreeMeaningsOfLife) and GetQuestStep(Spawn, ThreeMeaningsOfLife) == 6 then + -- on step 6 + PlayFlavor(NPC, "voiceover/english/the_curious_augur/enchanted/quests/quest_curious_augur/curious_augur009.mp3", "", "", 2774283468, 3531323088, Spawn) + AddConversationOption(conversation, "Yes, I did.", "QuestChat_3_2") + AddConversationOption(conversation, "Not yet.") + StartConversation(conversation, NPC, Spawn, "Did you speak with Sarma Singebellows?") + elseif HasCompletedQuest(Spawn, ThreeMeaningsOfLife) then + -- finished Quest + PlayFlavor(NPC, "voiceover/english/the_curious_augur/enchanted/quests/quest_curious_augur/curious_augur009.mp3", "", "", 2774283468, 3531323088, Spawn) + AddConversationOption(conversation, "I'll be on my way.") + StartConversation(conversation, NPC, Spawn, "I have given you the keys, my child. How or if you ever use them is in your hands. Other Augurs you meet in your travels may provide you with more wisdom.") + end + +end + +function dlg_0_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/the_curious_augur/enchanted/quests/quest_curious_augur/curious_augur002.mp3", "", "", 722859471, 401514036, Spawn) + AddConversationOption(conversation, "You offer such guidance?", "OfferThreeMeaningsOfLife") + AddConversationOption(conversation, "I'm really not interested.") + StartConversation(conversation, NPC, Spawn, "Yes, for I am an Augur, and that means I foresee the future. I knew you would come forward to learn the meanings of life from me. You are intensely curious, as am I. Curiosity drives us towards our potential, but we need guidance to reach it.") +end + +function OfferThreeMeaningsOfLife(NPC, Spawn) --The Curious Augur's Three Meanings of Life + if not HasQuest(Spawn, ThreeMeaningsOfLife) then + OfferQuest(NPC, Spawn, ThreeMeaningsOfLife) + elseif HasQuest(Spawn, ThreeMeaningsOfLife) then + QuestChat_0_1(NPC, Spawn) + end + +end + +function QuestChat_0_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/the_curious_augur/enchanted/quests/quest_curious_augur/curious_augur003.mp3", "", "", 4037106442, 3061634368, Spawn) + AddConversationOption(conversation, "I have seven fear feeders and eighteen shoal serpents.", "QuestChat_0_4") + AddConversationOption(conversation, "I have fifteen fear feeders and ten shoal serpents.", "QuestChat_0_2") + AddConversationOption(conversation, "I have five fear feeders and twenty shoal serpents.", "QuestChat_0_2") + AddConversationOption(conversation, "I have no idea.", "QuestChat_0_2") + StartConversation(conversation, NPC, Spawn, "There are many meanings to life and I can teach you only three. The first meaning is that of the nimble mind. Curiosity is a start, but you must be able to unravel this mystery to proceed. You have slain many fear feeders and shoal serpents. You have collected twenty five heads and fifty six legs. How many of each have you slain?") +end + +function QuestChat_0_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/the_curious_augur/enchanted/quests/quest_curious_augur/curious_augur014.mp3", "", "", 3661262572, 1665365128, Spawn) + AddConversationOption(conversation, "If they're all male, half will be male and so will the other half.", "QuestChat_0_4") + AddConversationOption(conversation, "It is not possible unless the parents are trolls.", "QuestChat_0_3") + AddConversationOption(conversation, "There were six children initially, but one ran away.", "QuestChat_0_3") + StartConversation(conversation, NPC, Spawn, "Hmm. Let us try something simpler. If a parent has five children, how is it possible that half of them are male?") +end + +function QuestChat_0_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/the_curious_augur/enchanted/quests/quest_curious_augur/curious_augur014.mp3", "", "", 3661262572, 1665365128, Spawn) + AddConversationOption(conversation, "Once. After the first time, you'll be subtracting four from the number eight.", "QuestChat_0_4") + StartConversation(conversation, NPC, Spawn, "Hmm. Most interedting analysis. Let us try one more question. How many times can you subtract four trom the number twelve?") +end + +function QuestChat_0_4(NPC, Spawn) + SetStepComplete(Spawn, ThreeMeaningsOfLife, 1) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/the_curious_augur/enchanted/quests/quest_curious_augur/curious_augur015.mp3", "", "", 2363467901, 2977768208, Spawn) + AddConversationOption(conversation, "All right.") + StartConversation(conversation, NPC, Spawn, "You are well on your way to learning the intellectual meaning of life. Of course, the questions are simple, but we all must start somewhere. Take a moment to consider what you have learned, then we can continue.") +end + +function QuestChat_1_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/the_curious_augur/enchanted/quests/quest_curious_augur/curious_augur004.mp3", "", "", 2520256937, 2710009453, Spawn) + AddConversationOption(conversation, "I suppose so.", "QuestChat_1_2") + AddConversationOption(conversation, "Probably not.") + StartConversation(conversation, NPC, Spawn, "You are on your way towards mastering the intellectual meaning of life, are you not? Are you ready to learn the next meaning of life?") +end + +function QuestChat_1_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/the_curious_augur/enchanted/quests/quest_curious_augur/curious_augur005.mp3", "", "", 1765847486, 926846301, Spawn) + AddConversationOption(conversation, "You want me to remove the salt snappers?", "QuestChat_1_3") + StartConversation(conversation, NPC, Spawn, "Look beyond the docks to the shore. The salt snappers wander back and forth, sometimes preventing swimmers from reaching land. Do you think this should continue?") +end + +function QuestChat_1_3(NPC, Spawn) + SetStepComplete(Spawn, ThreeMeaningsOfLife, 2) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/the_curious_augur/enchanted/quests/quest_curious_augur/curious_augur006.mp3", "", "", 897853069, 726940756, Spawn) + AddConversationOption(conversation, "I'll be back.") + StartConversation(conversation, NPC, Spawn, "There, you see how much easier such conclusions are to reach once you've exercised the intellectual meaning of life? Yes, you must clear the path to the shore. I will wait for you here.") +end + +function QuestChat_2_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/the_curious_augur/enchanted/quests/quest_curious_augur/curious_augur006.mp3", "", "", 897853069, 726940756, Spawn) + AddConversationOption(conversation, "Yes, didn't you see me?", "QuestChat_2_2") + AddConversationOption(conversation, "Not yet.") + StartConversation(conversation, NPC, Spawn, "You've been eliminating the salt snappers?") +end + +function QuestChat_2_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/the_curious_augur/enchanted/quests/quest_curious_augur/curious_augur008.mp3", "", "", 3930223149, 1615857141, Spawn) + AddConversationOption(conversation, "So I did all that for nothing?", "QuestChat_2_3") + StartConversation(conversation, NPC, Spawn, "I didn't look, for the second meaning of life is that you must do what you say you will do. No matter how worthy the task, there may be no one to notice your efforts and yet you must complete the tasks you undertake. Even if someone is near, they are often far away.") +end + +function QuestChat_2_3(NPC, Spawn) + SetStepComplete(Spawn, ThreeMeaningsOfLife, 4) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/the_curious_augur/enchanted/quests/quest_curious_augur/curious_augur009.mp3", "", "", 2774283468, 3531323088, Spawn) + AddConversationOption(conversation, "Sarma Singebellows. All right, I'll be back.") + StartConversation(conversation, NPC, Spawn, "You learned the second meaning of life, so it was hardly 'for nothing.' Curiosity enriches the mind and we must always look out for our own interests. However, there are others around us who can benefit from our strengths. I would like you to meet someone who might need your help: Sarma Singebellows. Speak with her.") +end + +function QuestChat_3_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/the_curious_augur/enchanted/quests/quest_curious_augur/curious_augur009.mp3", "", "", 2774283468, 3531323088, Spawn) + AddConversationOption(conversation, "Yes, I did.", "QuestChat_3_2") + AddConversationOption(conversation, "Not yet.") + StartConversation(conversation, NPC, Spawn, "Did you speak with Sarma Singebellows?") +end + +function QuestChat_3_2(NPC, Spawn) + SetStepComplete(Spawn, ThreeMeaningsOfLife, 6) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/the_curious_augur/enchanted/quests/quest_curious_augur/curious_augur009.mp3", "", "", 2774283468, 3531323088, Spawn) + AddConversationOption(conversation, "Not really.", "QuestChat_3_3") + StartConversation(conversation, NPC, Spawn, "The final meaning the is selflessness. For though we are each the most important person to care for in our lives, we must also take care that we do not lose our ability to extend a helping hand to others around us. Do you understand these things?") +end + +function QuestChat_3_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/the_curious_augur/enchanted/quests/quest_curious_augur/curious_augur009.mp3", "", "", 2774283468, 3531323088, Spawn) + AddConversationOption(conversation, "I can only hope.") + StartConversation(conversation, NPC, Spawn, "You are not ready, my child. A pity. Perhaps when you have studied for as many years as I have, you will reaize that these three meanings of life are the basis for all that you experience. Intellectual curiosity, doing things to benefit oneself as well as selflessness. Perhaps someday, you will understand.") +end diff --git a/server/SpawnScripts/EnchantedLands/TobelPatadash.lua b/server/SpawnScripts/EnchantedLands/TobelPatadash.lua new file mode 100644 index 000000000..2f7b5ea06 --- /dev/null +++ b/server/SpawnScripts/EnchantedLands/TobelPatadash.lua @@ -0,0 +1,55 @@ +--[[ + Script Name : SpawnScripts/EnchantedLands/TobelPatadash.lua + Script Purpose : Tobel Patadash + Script Author : Cynnar + Script Date : 2015.02.24 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +function spawn(NPC) + SetPlayerProximityFunction(NPC, 10, "InRange", "LeaveRange") +end + +function respawn(NPC) + spawn(NPC) +end + +function InRange(NPC, Spawn) +end + +function LeaveRange(NPC, Spawn) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "tobel_patadash/_exp03/deity/bristlebane/tobel/tobel_patadash001.mp3", "", "", 1450539429, 1133241398, Spawn) + AddConversationOption(conversation, "You know I couldn't agree more. I love the thrill of pulling off a good prank.", "dlg_0_1") + AddConversationOption(conversation, "Sorry, you've mistaken me for someone else. Good day.") + StartConversation(conversation, NPC, Spawn, "Why hello there. The name's Patadash, Tobel Patadash. I'm the true prophet of Bristlebane, I am. Say, judging by that gleam in your eye, I'd venture to guess that you enjoy having fun, maybe even at the expense of others. A joke here, a ribbing there; all in good fun, of course. Nothing beats a carefully executed practical joke!") +end + +function dlg_0_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + AddConversationOption(conversation, "I have indeed!", "dlg_0_2") + AddConversationOption(conversation, "No thank you!") + StartConversation(conversation, NPC, Spawn, "Well then, it seems we're both on the same proverbial page now, aren't we? If that's the case, have you come to devote yourself to the King of Thieves, the Master of Mischief, the Prince of Prank himself, Fizzlethorpe Bristlebane?") +end + +function dlg_0_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + -- there is a pop up box saying "Would you like to accept Bristlebane as your deity?" with yes and no + AddConversationOption(conversation, "OK then. Bye.") + -- This is the start conversation that comes next in the dialog "Excellent then, let us begin the initiation!" + StartConversation(conversation, NPC, Spawn, "Great! Come back another time to accept Bristlebane as you deity.") +end + +function dlg_0_3(NPC, Spawn) -- the dialog for no in dlg_0_2 + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + AddConversationOption(conversation, "Nevermind. I'm not really interested.") + StartConversation(conversation, NPC, Spawn, "Well, yes, of course there's an initiation process. I hope you didn't think I just wave a magic wand over your head, hand you a squirting flower and suddenly you're a true believer in Bristlebane. There's work to be done first.") +end diff --git a/server/SpawnScripts/EnchantedLands/astablemaster.lua b/server/SpawnScripts/EnchantedLands/astablemaster.lua new file mode 100644 index 000000000..128a7b71c --- /dev/null +++ b/server/SpawnScripts/EnchantedLands/astablemaster.lua @@ -0,0 +1,289 @@ +--[[ + Script Name : SpawnScripts/EnchantedLands/astablemaster.lua + Script Purpose : a stable master (390024) + Script Author : Neatz09 + Script Date : 4/14/2019 + Script Notes : +--]] + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + conversation = CreateConversation() + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_2_1042.mp3", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "I would like to travel.", "dlg_1_1") + AddConversationOption(conversation, "Nowhere.") + StartConversation(conversation, NPC, Spawn, "Greetings traveler, how can I assist you today?") + end + +function dlg_1_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + local con = CreateConversation() + + if GetSpawnLocationID(NPC) == 1106628 then + AddConversationOption(con, "To Bramblefoot Hills", "GoblinToFoothills") + AddConversationOption(con, "To Chomper's Pond.", "GoblinToChomper") + AddConversationOption(con, "To The Docks.", "GoblinToDocks") + AddConversationOption(con, "To The Great Guard.", "GoblinToGuard") + AddConversationOption(con, "To Misty Grove.", "GoblinToGrove") + AddConversationOption(con, "To Rivervale.", "GoblinToRivervale") + elseif GetSpawnLocationID(NPC) == 1106624 then + AddConversationOption(con, "To Chomper's Pond.", "FoothillsToChomper") + AddConversationOption(con, "To The Docks.", "FoothillsToDocks") + AddConversationOption(con, "To Goblin Pass.", "FoothillsToGoblin") + AddConversationOption(con, "To The Great Guard.", "FoothillsToGuard") + AddConversationOption(con, "To Misty Grove.", "FoothillsToGrove") + AddConversationOption(con, "To Rivervale.", "FoothillsToRivervale") + elseif GetSpawnLocationID(NPC) == 1106623 then + AddConversationOption(con, "To Bramblefoot Hills.", "GroveToFoothills") + AddConversationOption(con, "To Chomper's Pond.", "GroveToChomper") + AddConversationOption(con, "To The Docks.", "GroveToDocks") + AddConversationOption(con, "To Goblin Pass.", "GroveToGoblin") + AddConversationOption(con, "To The Great Guard.", "GroveToGuard") + AddConversationOption(con, "To Rivervale.", "GroveToRivervale") + elseif GetSpawnLocationID(NPC) == 1106625 then + AddConversationOption(con, "To Bramblefoot Hills.", "RivervaleToFoothills") + AddConversationOption(con, "To Chomper's Pond.", "RivervaleToChomper") + AddConversationOption(con, "To The Docks.", "RivervaleToDocks") + AddConversationOption(con, "To Goblin Pass.", "RivervaleToGoblin") + AddConversationOption(con, "To The Great Guard.", "RivervaleToGuard") + AddConversationOption(con, "To Misty Grove.", "RivervaleToGrove") + elseif GetSpawnLocationID(NPC) == 1106627 then + AddConversationOption(con, "To Bramblefoot Hills.", "DocksToFoothills") + AddConversationOption(con, "To Chomper's Pond.", "DocksToChomper") + AddConversationOption(con, "To Goblin Pass.", "DocksToGoblin") + AddConversationOption(con, "To The Great Guard.", "DocksToGuard") + AddConversationOption(con, "To Misty Grove.", "DocksToGrove") + AddConversationOption(con, "To Rivervale.", "DocksToRivervale") + elseif GetSpawnLocationID(NPC) == 1106629 then + AddConversationOption(con, "To Bramblefoot Hills.", "GuardToFoothills") + AddConversationOption(con, "To Chomper's Pond.", "GuardToChomper") + AddConversationOption(con, "To The Docks.", "GuardToDocks") + AddConversationOption(con, "To Goblin Pass.", "GuardToGoblin") + AddConversationOption(con, "To Misty Grove.", "GuardToGrove") + AddConversationOption(con, "To Rivervale.", "GuardToRivervale") + elseif GetSpawnLocationID(NPC) == 1106626 then + AddConversationOption(con, "To Bramblefoot Hills.", "ChomperToFoothills") + AddConversationOption(con, "To The Docks.", "ChomperToDocks") + AddConversationOption(con, "To Goblin Pass.", "ChomperToGoblin") + AddConversationOption(con, "To The Great Guard.", "ChomperToGuard") + AddConversationOption(con, "To Misty Grove.", "ChomperToGrove") + AddConversationOption(con, "To Rivervale.", "ChomperToRivervale") + else + PlayFlavor(NPC, "", "Not implemented yet!", "cry", 0, 0, Spawn) + end + AddConversationOption(con, "Nowhere.") + StartConversation(con, NPC, Spawn, "Where to?") +end + +function GoblinToFoothills(NPC, Spawn) + StartAutoMount(Spawn, 29) + SetMount(Spawn, 6846) +end + +function GoblinToChomper(NPC, Spawn) + StartAutoMount(Spawn, 59) + SetMount(Spawn, 6846) +end + +function GoblinToDocks(NPC, Spawn) + StartAutoMount(Spawn, 60) + SetMount(Spawn, 6846) +end + +function GoblinToGuard(NPC, Spawn) + StartAutoMount(Spawn, 28) + SetMount(Spawn, 6846) +end + +function GoblinToGrove(NPC, Spawn) + StartAutoMount(Spawn, 61) + SetMount(Spawn, 6846) +end + +function GoblinToRivervale(NPC, Spawn) + StartAutoMount(Spawn, 58) + SetMount(Spawn, 6846) +end + +function FoothillsToChomper(NPC, Spawn) + StartAutoMount(Spawn, 30) + SetMount(Spawn, 6846) +end + +function FoothillsToDocks(NPC, Spawn) + StartAutoMount(Spawn, 48) + SetMount(Spawn, 6846) +end + +function FoothillsToGoblin(NPC, Spawn) + StartAutoMount(Spawn, 32) + SetMount(Spawn, 6846) +end + +function FoothillsToGuard(NPC, Spawn) + StartAutoMount(Spawn, 47) + SetMount(Spawn, 6846) +end + +function FoothillsToGrove(NPC, Spawn) + StartAutoMount(Spawn, 31) + SetMount(Spawn, 6846) +end + +function FoothillsToRivervale(NPC, Spawn) + StartAutoMount(Spawn, 46) + SetMount(Spawn, 6846) +end + +function GroveToFoothills(NPC, Spawn) + StartAutoMount(Spawn, 34) + SetMount(Spawn, 6846) +end + +function GroveToChomper(NPC, Spawn) + StartAutoMount(Spawn, 33) + SetMount(Spawn, 6846) +end + +function GroveToDocks(NPC, Spawn) + StartAutoMount(Spawn, 54) + SetMount(Spawn, 6846) +end + +function GroveToGoblin(NPC, Spawn) + StartAutoMount(Spawn, 53) + SetMount(Spawn, 6846) +end + +function GroveToGuard(NPC, Spawn) + StartAutoMount(Spawn, 52) + SetMount(Spawn, 6846) +end + +function GroveToRivervale(NPC, Spawn) + StartAutoMount(Spawn, 51) + SetMount(Spawn, 6846) +end + +function RivervaleToFoothills(NPC, Spawn) + StartAutoMount(Spawn, 39) + SetMount(Spawn, 6846) +end + +function RivervaleToChomper(NPC, Spawn) + StartAutoMount(Spawn, 24) + SetMount(Spawn, 6846) +end + +function RivervaleToDocks(NPC, Spawn) + StartAutoMount(Spawn, 22) + SetMount(Spawn,6846) +end + +function RivervaleToGoblin(NPC, Spawn) + StartAutoMount(Spawn, 41) + SetMount(Spawn, 6846) +end + +function RivervaleToGuard(NPC, Spawn) + StartAutoMount(Spawn, 23) + SetMount(Spawn, 6846) +end + +function RivervaleToGrove(NPC, Spawn) + StartAutoMount(Spawn, 40) + SetMount(Spawn, 6846) +end + +function DocksToFoothills(NPC, Spawn) + StartAutoMount(Spawn, 43) + SetMount(Spawn, 6846) +end + +function DocksToChomper(NPC, Spawn) + StartAutoMount(Spawn, 42) + SetMount(Spawn, 6846) +end + +function DocksToGoblin(NPC, Spawn) + StartAutoMount(Spawn, 45) + SetMount(Spawn, 6846) +end + +function DocksToGuard(NPC, Spawn) + StartAutoMount(Spawn, 21) + SetMount(Spawn, 6846) +end + +function DocksToGrove(NPC, Spawn) + StartAutoMount(Spawn, 44) + SetMount(Spawn, 6846) +end + +function DocksToRivervale(NPC, Spawn) + StartAutoMount(Spawn, 20) + SetMount(Spawn, 6846) +end + +function GuardToFoothills(NPC, Spawn) + StartAutoMount(Spawn, 56) + SetMount(Spawn, 6846) +end + +function GuardToChomper(NPC, Spawn) + StartAutoMount(Spawn, 55) + SetMount(Spawn, 6846) +end + +function GuardToDocks(NPC, Spawn) + StartAutoMount(Spawn, 25) + SetMount(Spawn, 6846) +end + +function GuardToGoblin(NPC, Spawn) + StartAutoMount(Spawn, 26) + SetMount(Spawn, 6846) +end + +function GuardToGrove(NPC, Spawn) + StartAutoMount(Spawn, 57) + SetMount(Spawn, 6846) +end + +function GuardToRivervale(NPC, Spawn) + StartAutoMount(Spawn, 27) + SetMount(Spawn, 6846) +end + +function ChomperToFoothills(NPC, Spawn) + StartAutoMount(Spawn, 35) + SetMount(Spawn, 6846) +end + +function ChomperToDocks(NPC, Spawn) + StartAutoMount(Spawn, 50) + SetMount(Spawn, 6846) +end + +function ChomperToGoblin(NPC, Spawn) + StartAutoMount(Spawn, 49) + SetMount(Spawn, 6846) +end + +function ChomperToGuard(NPC, Spawn) + StartAutoMount(Spawn, 37) + SetMount(Spawn, 6846) +end + +function ChomperToGrove(NPC, Spawn) + StartAutoMount(Spawn, 36) + SetMount(Spawn, 6846) +end + +function ChomperToRivervale(NPC, Spawn) + StartAutoMount(Spawn, 38) + SetMount(Spawn, 6846) +end diff --git a/server/SpawnScripts/Everfrost/BrahnaganMacLahnan.lua b/server/SpawnScripts/Everfrost/BrahnaganMacLahnan.lua new file mode 100644 index 000000000..615961885 --- /dev/null +++ b/server/SpawnScripts/Everfrost/BrahnaganMacLahnan.lua @@ -0,0 +1,232 @@ +--[[ + Script Name : SpawnScripts/Everfrost/BrahnaganMacLahnan.lua + Script Author : Flunklesnarkin + Script Date : 2015.10.14 11:10:51 + Script Purpose : + : +--]] + +local TheStoriesofEverfrost = 167 +local CullTheThreatToThePioneers = 169 +local FurtherCulling = 170 +local SuppliesForThePioneers = 171 + + + +function spawn(NPC) + ProvidesQuest(NPC, TheStoriesofEverfrost) + ProvidesQuest(NPC, CullTheThreatToThePioneers) + ProvidesQuest(NPC, FurtherCulling) + ProvidesQuest(NPC, SuppliesForThePioneers) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + if GetLevel(Spawn) < 41 then + UnderLevel_Chat(NPC, Spawn) + else + if HasCompletedQuest(Spawn, TheStoriesofEverfrost) == false and HasQuest(Spawn, TheStoriesofEverfrost) == false then + Quest1Chat_1(NPC, Spawn) + elseif HasQuest(Spawn, TheStoriesofEverfrost) == true and GetQuestStep(Spawn, 167) == 1 then + Quest1Chat_5(NPC, Spawn) + elseif HasQuest(Spawn, TheStoriesofEverfrost) == true and GetQuestStep(Spawn, 167) == 2 then + Quest1Chat_5(NPC, Spawn) + elseif HasQuest(Spawn, TheStoriesofEverfrost) == true and GetQuestStep(Spawn, 167) == 3 then + Quest1Chat_6(NPC, Spawn) + elseif HasCompletedQuest(Spawn, TheStoriesofEverfrost) == true and HasCompletedQuest(Spawn, CullTheThreatToThePioneers) == false and HasQuest(Spawn, CullTheThreatToThePioneers) == false then + Quest2Chat_1(NPC, Spawn) + elseif HasQuest(Spawn, CullTheThreatToThePioneers) == true and GetQuestStep(Spawn, 169) == 1 then + Quest2Chat_3(NPC, Spawn) + elseif HasQuest(Spawn, CullTheThreatToThePioneers) == true and GetQuestStep(Spawn, 169) == 2 then + Quest2Chat_4(NPC, Spawn) + elseif HasCompletedQuest(Spawn, CullTheThreatToThePioneers) == true and HasCompletedQuest(Spawn, FurtherCulling) == false and HasQuest(Spawn, FurtherCulling) == false then + Quest3Chat_1(NPC, Spawn) + elseif HasQuest(Spawn, FurtherCulling) == true and GetQuestStep(Spawn, 170) == 1 then + Quest3Chat_2(NPC, Spawn) + elseif HasQuest(Spawn, FurtherCulling) == true and GetQuestStep(Spawn, 170) == 2 then + Quest3Chat_3(NPC, Spawn) + elseif HasCompletedQuest(Spawn, FurtherCulling) == true and HasCompletedQuest(Spawn, SuppliesForThePioneers) == false and HasQuest(Spawn, SuppliesForThePioneers) == false then + Quest4Chat_1(NPC, Spawn) + elseif HasQuest(Spawn, SuppliesForThePioneers) then + Quest4Chat_2(NPC, Spawn) + end + end +end + +function respawn(NPC) + spawn(NPC) +end + +function UnderLevel_Chat(NPC, Spawn) + + Say(NPC, "Welcome to Everfrost. You'll find her a beautiful, if cold, region.") + +end + +function Quest1Chat_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "Oh? This is your homeland?", "Quest1Chat_2") + StartConversation(conversation, NPC, Spawn, "Why, hello there! You look as though you've come an awful long way to visit our frosty homeland.") +end + +function Quest1Chat_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "I see. And so you are here trying to do ... what?", "Quest1Chat_3") + StartConversation(conversation, NPC, Spawn, "Oh, yes! Long ago, before the Rending, the Everfrost Peaks were home to the great Northern tribes. Like many other things, they were changed completely when it happened.") +end + +function Quest1Chat_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "I see.", "Quest1Chat_4") + StartConversation(conversation, NPC, Spawn, "Depends. Some hope to one day found settlements here, while others are simply after the thick furs of its snow-born beasts.") +end + +function Quest1Chat_4(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "I'd be happy to.", "Offer_The_Stories_of_Everfrost") + AddConversationOption(conversation, "No time for talk.") + StartConversation(conversation, NPC, Spawn, "Why don't you speak with some of the others? They can offer you different perspectives than I can. Go speak with them, come back to me, and we will talk more.") +end + +function Quest1Chat_5(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "No, still searching for perspective.") + StartConversation(conversation, NPC, Spawn, "Well? Have you spoken with a few others?") +end + +function Quest1Chat_6(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "Yes, I think I have some perspective now. Li Ning Ventur seems to have had a tough time. The sharks of the Bay, well, ate her husband.", "SetCompleteQuest_1") + StartConversation(conversation, NPC, Spawn, "Well? Have you spoken with a few others?") +end + +function SetCompleteQuest_1(NPC, Spawn) + SetStepComplete(Spawn, TheStoriesofEverfrost, 3) + Quest2Chat_1(NPC, Spawn) +end + +function Quest2Chat_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "Yeah, it seems a bit risky for pioneers to cross.", "Quest2Chat_2") + StartConversation(conversation, NPC, Spawn, "Now that is not a good thing to hear. I will confess that the moment the Venturs arrived, I assumed they would be leaving soon enough -- not quite the heartiest individuals I've ever seen, but good people and I hate to hear what happened") +end + +function Quest2Chat_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "I can do that.", "Offer_Cull_the_Threat_to_the_Pioneers") + AddConversationOption(conversation, "Sharks? No thanks.") + StartConversation(conversation, NPC, Spawn, "So it does... You, though, you look as though you might be a little more difficult to kill. Maybe you would like to prove your mettle by removing a few of the primal frostfins from the waters?") +end + +function Quest2Chat_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "No, not nearly few enough.") + StartConversation(conversation, NPC, Spawn, "Well? Are there fewer frostfins than there were before?") +end + +function Quest2Chat_4(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "Yes, I killed quite a few of them.", "Quest2Chat_5") + StartConversation(conversation, NPC, Spawn, "Well? Are there fewer frostfins than there were before?") +end + +function Quest2Chat_5(NPC, Spawn) + SetStepComplete(Spawn, CullTheThreatToThePioneers, 2) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "...") + StartConversation(conversation, NPC, Spawn, "I see far fewer fins in the ocean, very good!") +end + +function Quest3Chat_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "Yeah, I think I can handle them.", "Offer_Further_Culling") + AddConversationOption(conversation, "Ah, no, that sounds a bit too rough for me.") + StartConversation(conversation, NPC, Spawn, "Well, you seemed to handle them easily enough. Perhaps you'd like to take on the more formidable ancient frostfins, hmm?") +end + + +function Quest3Chat_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "Yes, I haven't quite finished the job yet.") + StartConversation(conversation, NPC, Spawn, "Well, your fingers seem intact. Are the sharks so fortunate?") +end + +function Quest3Chat_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "No, their blood mixes with the salt water now.", "Quest3Chat_4") + StartConversation(conversation, NPC, Spawn, "Well, your fingers seem intact. Are the sharks so fortunate?") +end + +function Quest3Chat_4(NPC, Spawn) + SetStepComplete(Spawn, FurtherCulling, 2) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "You're Welcome.", "Quest4Chat_1") + StartConversation(conversation, NPC, Spawn, "Ahh, that's good to hear! The trip to land won't be quite so perilous now. Thank you, Player Name") +end + +function Quest4Chat_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "I can do that. It's on my way.", "Offer_Supplies_for_the_Pioneers") + AddConversationOption(conversation, "No, I don't want to be burdened.") + StartConversation(conversation, NPC, Spawn, "If you're going to be traveling on into Everfrost, would you be willing to deliver some supplies to one of our pioneer camps? There are some very important items that need to be delivered, and you'd have their gratitude -- and mine.") +end + +function Quest4Chat_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + Say(NPC, "Those pioneers need what I've given you. Hurry on.") +end + + +function Offer_The_Stories_of_Everfrost(NPC, Spawn) + OfferQuest(NPC, Spawn, TheStoriesofEverfrost) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "I will.") + StartConversation(conversation, NPC, Spawn, "Very good. Come back to me when you've gotten a good earful.") + +end + +function Offer_Cull_the_Threat_to_the_Pioneers(NPC, Spawn) + OfferQuest(NPC, Spawn, CullTheThreatToThePioneers) +end + +function Offer_Further_Culling(NPC, Spawn) + OfferQuest(NPC, Spawn, FurtherCulling) +end + +function Offer_Supplies_for_the_Pioneers(NPC, Spawn) + OfferQuest(NPC, Spawn, SuppliesForThePioneers) +end \ No newline at end of file diff --git a/server/SpawnScripts/Everfrost/BurmGrunthor.lua b/server/SpawnScripts/Everfrost/BurmGrunthor.lua new file mode 100644 index 000000000..89bfa5d62 --- /dev/null +++ b/server/SpawnScripts/Everfrost/BurmGrunthor.lua @@ -0,0 +1,151 @@ +--[[ + Script Name : SpawnScripts/Everfrost/BurmGrunthor.lua + Script Author : Flunklesnarkin + Script Date : 2015.09.03 10:09:57 + Script Purpose : + : +--]] + +local Fish_For_Grunther = 136 + +function spawn(NPC) + ProvidesQuest(NPC, Fish_For_Grunther) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + if GetLevel(Spawn) < 41 then + UnderLevel_Chat(NPC, Spawn) + else + if HasQuest(Spawn, Fish_For_Grunther) == false and HasCompletedQuest(Spawn, Fish_For_Grunther) == false then + Quest1Chat_1(NPC, Spawn) + elseif GetQuestStep(Spawn, Fish_For_Grunther) == 1 then + if HasCompletedQuest(Spawn, Fish_For_Grunther) == true then + Quest1Chat_3(NPC, Spawn) + else + Quest1Chat_7(NPC, Spawn) + end + elseif GetQuestStep(Spawn, Fish_For_Grunther) == 2 then + if HasCompletedQuest(Spawn, Fish_For_Grunther) == true then + Quest1Chat_8(NPC, Spawn) + else + Quest1Chat_5(NPC, Spawn) + end + elseif HasQuest(Spawn, Fish_For_Grunther) == false and HasCompletedQuest(Spawn, Fish_For_Grunther) == true then + Quest1Chat_4(NPC, Spawn) + end + end +end + +function UnderLevel_Chat(NPC, Spawn) + + Say(NPC, "Just me and fishes out here sometimes. Just me and the fishes.") + +end + +function Quest1Chat_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "Oh?", "Quest1Chat_2") + StartConversation(conversation, NPC, Spawn, "Arh! The fish just aren't biting!") +end + +function Quest1Chat_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "Perhaps I could fish some for you?", "Offer_Fish_For_Grunther") + AddConversationOption(conversation, "Sounds like you should work on your fishing skills.") + StartConversation(conversation, NPC, Spawn, "Nay, I've been at it for hours, but nuthin'. And I've mouths to feed...") +end + + +function Quest1Chat_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "I do not.") + StartConversation(conversation, NPC, Spawn, "Have ye the fish?") +end + +function Quest1Chat_4(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "I most certainly would.", "Offer_Fish_For_Grunther") + AddConversationOption(conversation, "Nah, I've got better things to do with my time.") + StartConversation(conversation, NPC, Spawn, "I could always use some'mere fish if ye'd be up fer it.") +end + +function Quest1Chat_5(NPC, Spawn) + SetStepComplete(Spawn, Fish_For_Grunther, 2) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "Yes, here's all your fish." , "Quest1Chat_6") + StartConversation(conversation, NPC, Spawn, "Is that the smell of fish on ye?") +end + +function Quest1Chat_6(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "I am glad to have helped.") + StartConversation(conversation, NPC, Spawn, "Ahh, a fine batch if I've ever seen it. Thank ye.") +end + + +function Quest1Chat_7(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "No, must just be all the adventuring I've been doing...") + StartConversation(conversation, NPC, Spawn, "Is that the smell of fish on ye?") +end + +function Quest1Chat_8(NPC, Spawn) + SetStepComplete(Spawn, Fish_For_Grunther, 2) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "I do." , "Quest1Chat_9") + StartConversation(conversation, NPC, Spawn, "Have ye the fish?") +end + +function Quest1Chat_9(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "You are most welcome.") + StartConversation(conversation, NPC, Spawn, "A blessing! Aye, I can call ye nay but a blessing.") +end + +function Offer_Fish_For_Grunther(NPC, Spawn) + if HasQuest(Spawn, Fish_For_Grunther) == false and HasCompletedQuest(Spawn, Fish_For_Grunther) == false then + OfferQuest(NPC, Spawn, Fish_For_Grunther) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "Not to worry.") + StartConversation(conversation, NPC, Spawn, "That'd truly be a blessing from the gods, thank ye.") + + elseif HasQuest(Spawn, Fish_For_Grunther) == false and HasCompletedQuest(Spawn, Fish_For_Grunther) == true then + OfferQuest(NPC, Spawn, Fish_For_Grunther) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "You're welcome.") + StartConversation(conversation, NPC, Spawn, "A fine young adventurer ye be, thank ye.") + + end + +end + + + + diff --git a/server/SpawnScripts/Everfrost/GinnieStonestoe.lua b/server/SpawnScripts/Everfrost/GinnieStonestoe.lua new file mode 100644 index 000000000..dc302640f --- /dev/null +++ b/server/SpawnScripts/Everfrost/GinnieStonestoe.lua @@ -0,0 +1,21 @@ +--[[ + Script Name : SpawnScripts/Everfrost/GinnieStonestoe.lua + Script Author : Flunklesnarkin + Script Date : 2015.09.04 09:09:13 + Script Purpose : + : +--]] + +function spawn(NPC) + +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + Say(NPC, "Don't cause any trouble. We've enough trouble with all the beasts roaming about. We needn't trouble from one of the likes of you.") +end + +function respawn(NPC) + +end + diff --git a/server/SpawnScripts/Everfrost/JinVentur.lua b/server/SpawnScripts/Everfrost/JinVentur.lua new file mode 100644 index 000000000..58534cb05 --- /dev/null +++ b/server/SpawnScripts/Everfrost/JinVentur.lua @@ -0,0 +1,21 @@ +--[[ + Script Name : SpawnScripts/Everfrost/JinVentur.lua + Script Author : Flunklesnarkin + Script Date : 2015.09.04 09:09:53 + Script Purpose : + : +--]] + +function spawn(NPC) + +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + Say(NPC, "I just want to be home...") +end + +function respawn(NPC) + +end + diff --git a/server/SpawnScripts/Everfrost/LiNingVentur.lua b/server/SpawnScripts/Everfrost/LiNingVentur.lua new file mode 100644 index 000000000..e91659c89 --- /dev/null +++ b/server/SpawnScripts/Everfrost/LiNingVentur.lua @@ -0,0 +1,92 @@ +--[[ + Script Name : SpawnScripts/Everfrost/LiNingVentur.lua + Script Author : Flunklesnarkin + Script Date : 2015.09.04 09:09:39 + Script Purpose : + : +--]] + +local TheStoriesofEverfrost = 167 +local A_Pioneer_Without_A_Wagon = 168 + +local + +function spawn(NPC) + ProvidesQuest(NPC, A_Pioneer_Without_A_Wagon) + +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + + if HasCompletedQuest(Spawn, TheStoriesofEverfrost) == false and HasQuest(Spawn, TheStoriesofEverfrost) == false then + Default_Chat(NPC, Spawn) + elseif HasQuest(Spawn, TheStoriesofEverfrost) == true and HasQuest(Spawn, A_Pioneer_Without_A_Wagon) == false and HasCompletedQuest(Spawn, A_Pioneer_Without_A_Wagon) == false then + Quest1Chat_1(NPC, Spawn) + elseif HasCompletedQuest(Spawn, TheStoriesofEverfrost) == true and HasQuest(Spawn, A_Pioneer_Without_A_Wagon) == false and HasCompletedQuest(Spawn, A_Pioneer_Without_A_Wagon) == false then + Quest1Chat_1(NPC, Spawn) + elseif HasQuest(Spawn, A_Pioneer_Without_A_Wagon) == true and GetQuestStep(Spawn, 168) == 1 then + Quest1Chat_5(NPC, Spawn) + end + +end + +function respawn(NPC) + spawn(NPC) +end + +function Default_Chat(NPC, Spawn) + + Say(NPC, "I'm done with this forsaken place. Done with it, I say!") + +end + +function Quest1Chat_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "Excuse me, but what's wrong?", "Quest1Chat_2") + StartConversation(conversation, NPC, Spawn, "He's gone, oh dear, he's gone...") +end + +function Quest1Chat_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "I am... sorry to hear that.", "Quest1Chat_3") + StartConversation(conversation, NPC, Spawn, "My, my husband... We were crossing the bay and he was... he was... eaten by one of those terrible sharks. I hate this place! Everything here is terrible!") +end + +function Quest1Chat_3(NPC, Spawn) + SetStepComplete(Spawn, TheStoriesofEverfrost, 2) + + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "That's a terrible story. Is there anything I can do?", "Quest1Chat_4") + AddConversationOption(conversation, "Perhaps there is some way I can profit... Err, help.", "Quest1Chat_4") + StartConversation(conversation, NPC, Spawn, "Yes, we tried so hard to make a home here... My Samuel was so eager to cut something from this land, but I never wanted to! I told him it was a cursed place! And though it took a few years of misery to convince him, he finally agreed. And so there we are, finally ready to return to a decent life, and he's taken from me!") +end + +function Quest1Chat_4(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "I can do that.", "Offer_Quest_APWOAW") + AddConversationOption(conversation, "I am in no mood for charity.") + StartConversation(conversation, NPC, Spawn, "You would? Oh... thank you! The first kindness I've found in this place. You see, when we were crossing the bay, we did so in such a panic, especially after the attack, that our possessions were scattered all over the bay. It would mean so much if you could find them.") +end + +function Quest1Chat_5(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "No, I will keep searching though.") + StartConversation(conversation, NPC, Spawn, "Well? Have you managed to find all of it? Or even just some?") +end + +function Offer_Quest_APWOAW(NPC, Spawn) + OfferQuest(NPC, Spawn, A_Pioneer_Without_A_Wagon) + +end + diff --git a/server/SpawnScripts/Everfrost/MaiVentur.lua b/server/SpawnScripts/Everfrost/MaiVentur.lua new file mode 100644 index 000000000..ab561cbc7 --- /dev/null +++ b/server/SpawnScripts/Everfrost/MaiVentur.lua @@ -0,0 +1,21 @@ +--[[ + Script Name : SpawnScripts/Everfrost/MaiVentur.lua + Script Author : Flunklesnarkin + Script Date : 2015.09.04 09:09:21 + Script Purpose : + : +--]] + +function spawn(NPC) + +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + Say(NPC, "Where's my daddy?") +end + +function respawn(NPC) + +end + diff --git a/server/SpawnScripts/Everfrost/MartaTerrilon.lua b/server/SpawnScripts/Everfrost/MartaTerrilon.lua new file mode 100644 index 000000000..8267188ea --- /dev/null +++ b/server/SpawnScripts/Everfrost/MartaTerrilon.lua @@ -0,0 +1,112 @@ +--[[ + Script Name : SpawnScripts/Everfrost/MartaTerrilon.lua + Script Author : Flunklesnarkin + Script Date : 2015.09.04 10:09:19 + Script Purpose : + : +--]] + +local Marta_Terrilons_Fur_Hunt = 161 + +function spawn(NPC) + SetPlayerProximityFunction(NPC, 10, "InRange", "LeaveRange") + ProvidesQuest(NPC, Marta_Terrilons_Fur_Hunt) +end + +function respawn(NPC) + spawn(NPC) +end + +function InRange(NPC, Spawn) +end + +function LeaveRange(NPC, Spawn) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + + if HasQuest(Spawn, Marta_Terrilons_Fur_Hunt) == false and HasCompletedQuest(Spawn, Marta_Terrilons_Fur_Hunt) == false then + Quest1Chat_1(NPC, Spawn) + elseif GetQuestStep(Spawn, Marta_Terrilons_Fur_Hunt) == 1 then + Quest1Chat_2(NPC, Spawn) + elseif GetQuestStep(Spawn, Marta_Terrilons_Fur_Hunt) == 2 then + Quest1Chat_3(NPC, Spawn) + elseif HasQuest(Spawn, Marta_Terrilons_Fur_Hunt) == false and HasCompletedQuest(Spawn, Marta_Terrilons_Fur_Hunt) == true then + local count = GetQuestCompleteCount(Spawn, Marta_Terrilons_Fur_Hunt) + if count <=3 then + Quest1Chat_4(NPC, Spawn) + else + Quest1Chat_5(NPC, Spawn) + end + end +end + + +function Quest1Chat_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "Yes, I'm available to help.", "Offer_Marta_Terrilons_Fur_Hunt") + AddConversationOption(conversation, "Sorry, I'm not interested.") + StartConversation(conversation, NPC, Spawn, "Well met traveler! I am a buyer for a regional fur trading company, who is trying to establish a market for furred clothing and armor linings! I am seeking skilled hunters, capable of delivering large quantities of fur that are excellent condition! Would you be interested in this?") +end + +function Quest1Chat_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "You got it.") + StartConversation(conversation, NPC, Spawn, "I'm going to require more furs than that! Please come back when you have some more!") +end + +function Quest1Chat_3(NPC, Spawn) + SetStepComplete(Spawn, Marta_Terrilons_Fur_Hunt, 2) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "Thanks.") + StartConversation(conversation, NPC, Spawn, "These furs will do quite nicely! Well done, please take this in compensation for your efforts.") +end + + +function Quest1Chat_4(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "Sure!", "Offer_Marta_Terrilons_Fur_Hunt") + AddConversationOption(conversation, "Not right now.") + StartConversation(conversation, NPC, Spawn, "Do you think you have time to bring me some more furs?") +end + +function Quest1Chat_5(NPC, Spawn) + FaceTarget(NPC, Spawn) + local choice = math.random(1,2) + if choice == 1 then + Say(NPC, "You did fine work for me. Thanks!") + else + Say(NPC, "Appreciate all your help!") + end +end + +function Offer_Marta_Terrilons_Fur_Hunt(NPC, Spawn) + if HasQuest(Spawn, Marta_Terrilons_Fur_Hunt) == false and HasCompletedQuest(Spawn, Marta_Terrilons_Fur_Hunt) == false then + OfferQuest(NPC, Spawn, Marta_Terrilons_Fur_Hunt) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "I will be back with the furs.") + StartConversation(conversation, NPC, Spawn, "Excellent! There are several beasts in these parts that have nice fur. I require that you bring me a good quantity of these furs, for which you will be paid.") + + elseif HasQuest(Spawn, Marta_Terrilons_Fur_Hunt) == false and HasCompletedQuest(Spawn, Marta_Terrilons_Fur_Hunt) == true then + OfferQuest(NPC, Spawn, Marta_Terrilons_Fur_Hunt) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "I'll be back with the furs.") + StartConversation(conversation, NPC, Spawn, "Great! Here's a list of what I need now. Bring me the most pristine furs that you can and you'll be well-rewarded.") + + end + +end + diff --git a/server/SpawnScripts/Everfrost/NedSwellswaker.lua b/server/SpawnScripts/Everfrost/NedSwellswaker.lua new file mode 100644 index 000000000..3e9093268 --- /dev/null +++ b/server/SpawnScripts/Everfrost/NedSwellswaker.lua @@ -0,0 +1,21 @@ +--[[ + Script Name : SpawnScripts/Everfrost/NedSwellswaker.lua + Script Author : Flunklesnarkin + Script Date : 2015.09.25 12:09:07 + Script Purpose : + : +--]] + +function spawn(NPC) + +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + Say(NPC, "This is a harsh and inhospitable region. Perhaps its best you keep your valuables some place safe.") +end + +function respawn(NPC) + +end + diff --git a/server/SpawnScripts/Everfrost/NewlynIcebreaker.lua b/server/SpawnScripts/Everfrost/NewlynIcebreaker.lua new file mode 100644 index 000000000..7b31f36f7 --- /dev/null +++ b/server/SpawnScripts/Everfrost/NewlynIcebreaker.lua @@ -0,0 +1,70 @@ +--[[ + Script Name : SpawnScripts/Everfrost/NewlynIcebreaker.lua + Script Author : Flunklesnarkin + Script Date : 2015.10.23 01:10:49 + Script Purpose : + : +--]] + +local TheStoriesofEverfrost = 167 + +function spawn(NPC) + +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + if HasQuest(Spawn, TheStoriesofEverfrost) == false then + Default_Chat(NPC, Spawn) + elseif HasQuest(Spawn, TheStoriesofEverfrost) == true and GetQuestStep(Spawn, 167) == 2 then + Default_Chat(NPC, Spawn) + elseif HasQuest(Spawn, TheStoriesofEverfrost) == true and GetQuestStep(Spawn, 167) == 3 then + Default_Chat(NPC, Spawn) + elseif HasQuest(Spawn, TheStoriesofEverfrost) == true and GetQuestStep(Spawn, 167) == 1 then + TSOE_Chat1(NPC, Spawn) + end + +end + +function respawn(NPC) + +end + +function Default_Chat(NPC, Spawn) + + Say(NPC, "Your armor's looking a bit dinged up. Want me to take a look at it?") + +end + +function TSOE_Chat1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "Maybe later. At the moment, I have actually just come to hear your story. What brought you to Everfrost?", "TSOE_Chat2") + StartConversation(conversation, NPC, Spawn, "Hello there. You need that armor of yours fixed up?") +end + +function TSOE_Chat2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "I see. So is it very different?", "TSOE_Chat3") + StartConversation(conversation, NPC, Spawn, "Why, any good son or daughter of Halas would. This may not be exactly as our people remember it, but it's still our homeland, changed or not.") +end + +function TSOE_Chat3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "But there are some tokens left?", "TSOE_Chat4") + StartConversation(conversation, NPC, Spawn, "How should I know? My people don't live so long as the elves, or even the humans for that matter... I can say that from the stories, though, it is different. The Rending tore her up good and sure.") +end + +function TSOE_Chat4(NPC, Spawn) + SetStepComplete(Spawn, TheStoriesofEverfrost, 1) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "I see, I see.") + StartConversation(conversation, NPC, Spawn, "Aye, there are still the beautiful peaks, and the feel of the land is still there. It is cold and bitter, but beautiful and enduring, much like us.") +end diff --git a/server/SpawnScripts/Everfrost/ThyrStormhammer.lua b/server/SpawnScripts/Everfrost/ThyrStormhammer.lua new file mode 100644 index 000000000..f4ca53a70 --- /dev/null +++ b/server/SpawnScripts/Everfrost/ThyrStormhammer.lua @@ -0,0 +1,152 @@ +--[[ + Script Name : SpawnScripts/Everfrost/ThyrStormhammer.lua + Script Author : Flunklesnarkin + Script Date : 2016.01.13 02:01:44 + Script Purpose : + : +--]] + +local SuppliesForThePioneers = 171 +local ScoutingTheJaggedPlains = 172 + +function spawn(NPC) + ProvidesQuest(NPC, ScoutingTheJaggedPlains) + +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + if GetLevel(Spawn) < 44 then + if HasQuest(Spawn, SuppliesForThePioneers) == true then + Under_Level_Quest1Chat_1(NPC, Spawn) + else + UnderLevel_Chat(NPC, Spawn) + end + else + if HasQuest(Spawn, SuppliesForThePioneers) == true then + Quest1Chat_1(NPC, Spawn) + elseif HasCompletedQuest(Spawn, SuppliesForThePioneers) == true and HasQuest(Spawn, ScoutingTheJaggedPlains) == false and HasCompletedQuest(Spawn, ScoutingTheJaggedPlains) == false then + Quest2Chat_1(NPC, Spawn) + elseif HasQuest(Spawn, ScoutingTheJaggedPlains) == true and GetQuestStep(Spawn, 172) == 1 then + Quest2Chat_4(NPC, Spawn) + end + end +end + +function respawn(NPC) + +end + +function UnderLevel_Chat(NPC, Spawn) + + local Chat_Randomizer = math.random(1,8) + + if Chat_Randomizer == 1 then + Say(NPC, "Well it's not easy being the best looking guy in town, but I think I pull it off well.") + elseif Chat_Randomizer == 2 then + Say(NPC, "Odd things are going on. I'd keep an eye out if I were you.") + elseif Chat_Randomizer == 3 then + Say(NPC, "Darn. I chugged that barrel much slower than I chugged the last three.") + elseif Chat_Randomizer == 4 then + Say(NPC, "Strength isn't just the size of your muscles... It's, well... Yeah it is.") + elseif Chat_Randomizer == 5 then + Say(NPC, "Some of my friends tell me I'm weak. I think its true. I've only been able to lift two goblins and an orc lately.") + elseif Chat_Randomizer == 6 then + Say(NPC, "I'm feeling stronger than usual today.") + elseif Chat_Randomizer == 7 then + Say(NPC, "Funny, the wound didn't smell like that yesterday.") + elseif Chat_Randomizer == 8 then + Say(NPC, "Funny, the wound didn't smell like that yesterday.") + else + Say(NPC, "Randomizer Error") + end +end + +function Under_Level_Quest1Chat_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "Take these supplies off my hands. Brahnagan sent them for you.", "Under_Level_Quest1Chat_2") + AddConversationOption(conversation, "No, I believe I can tough it out. I've tackled worse than this.") + StartConversation(conversation, NPC, Spawn, "You're looking a bit uncomfortable, outsider. Is there something I can do to make you more comfortable?") +end + +function Under_Level_Quest1Chat_2(NPC, Spawn) + SetStepComplete(Spawn, SuppliesForThePioneers, 1) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "Yes, he had me clear out a number of sharks from the water around to make it safer for pioneers to pass through.", "Under_Level_Quest1Chat_3") + StartConversation(conversation, NPC, Spawn, "Ahh, Brahnagan. He is always taking care of us...") +end + +function Under_Level_Quest1Chat_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "Tough enough for the job.") + StartConversation(conversation, NPC, Spawn, "You must be a tough one then.") +end + +function Quest1Chat_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "Take these supplies off my hands. Brahnagan sent them for you.", "Quest1Chat_2") + AddConversationOption(conversation, "No, I believe I can tough it out. I've tackled worse than this.", "Quest2Chat_1") + StartConversation(conversation, NPC, Spawn, "You're looking a bit uncomfortable, outsider. Is there something I can do to make you more comfortable?") +end + +function Quest1Chat_2(NPC, Spawn) + SetStepComplete(Spawn, SuppliesForThePioneers, 1) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "Yes, he had me clear out a number of sharks from the water around to make it safer for pioneers to pass through.", "Quest1Chat_3") + StartConversation(conversation, NPC, Spawn, "Ahh, Brahnagan. He is always taking care of us...") +end + +function Quest1Chat_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "Tough enough for the job.", "Quest2Chat_1") + StartConversation(conversation, NPC, Spawn, "You must be a tough one then.") +end + +function Quest2Chat_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "Expedition?", "Quest2Chat_2") + StartConversation(conversation, NPC, Spawn, "If you're so sure of your own skill, then you won't mind going on an expedition for me.") +end + +function Quest2Chat_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "Unless I come back saying it's completely uninhabitable.", "Quest2Chat_3") + StartConversation(conversation, NPC, Spawn, "We call the valley that lies ahead the Jagged Plains. Most are convinced it is uninhabitable, but I'm not so sure. If you could scout it all out for me, and bring back your report of it, I might be able to make a case to push into it.") +end + +function Quest2Chat_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "Very well, I'll do it.", "Offer_Scouting_The_Jagged_Plains") + AddConversationOption(conversation, "This sounds a bit tame for my skills. I'm going to seek out other work.") + StartConversation(conversation, NPC, Spawn, "Yes, yes, but let's hope that's not the case.") +end + +function Quest2Chat_4(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "No, it's a very large place.") + StartConversation(conversation, NPC, Spawn, "Well? Have you scoured it?") +end + +function Offer_Scouting_The_Jagged_Plains(NPC, Spawn) + OfferQuest(NPC, Spawn, ScoutingTheJaggedPlains) +end \ No newline at end of file diff --git a/server/SpawnScripts/Everfrost/apioneerwithoutawagonquestcrate.lua b/server/SpawnScripts/Everfrost/apioneerwithoutawagonquestcrate.lua new file mode 100644 index 000000000..8f503ea02 --- /dev/null +++ b/server/SpawnScripts/Everfrost/apioneerwithoutawagonquestcrate.lua @@ -0,0 +1,25 @@ +--[[ + Script Name : SpawnScripts/Everfrost/apioneerwithoutawagonquestcrate.lua + Script Author : Flunklesnarkin + Script Date : 2016.02.09 10:02:50 + Script Purpose : These crates are used for the quest A Pioneer without a Wagon + : +--]] + +local APWOAW = 168 + +function spawn(NPC, Player) + AddSpawnAccess(NPC, NPC) + SetPlayerProximityFunction(NPC, 50, "QuestCheck", "QuestCheck") +end + +function respawn(NPC) + spawn(NPC) +end + +function QuestCheck(NPC, Player) + if GetQuestStep(Player, APWOAW) == 1 then + AddSpawnAccess(NPC, Player) + end +end + diff --git a/server/SpawnScripts/Everfrost/snowtearcabbage.lua b/server/SpawnScripts/Everfrost/snowtearcabbage.lua new file mode 100644 index 000000000..6db684f5f --- /dev/null +++ b/server/SpawnScripts/Everfrost/snowtearcabbage.lua @@ -0,0 +1,12 @@ +--[[ + Script Name : SpawnScripts/Everfrost/snowtearcabbage.lua + Script Author : John Adams + Script Date : 2014.05.30 10:05:43 + Script Purpose : + : +--]] + +function spawn(NPC) + SpawnSet(NPC, "activity_state", "0") +end + diff --git a/server/SpawnScripts/FallenGate/ABlightedWarmonger_A.lua b/server/SpawnScripts/FallenGate/ABlightedWarmonger_A.lua new file mode 100644 index 000000000..f46ab8563 --- /dev/null +++ b/server/SpawnScripts/FallenGate/ABlightedWarmonger_A.lua @@ -0,0 +1,55 @@ +--[[ + Script Name : SpawnScripts/FallenGate/ABlightedWarmonger_A.lua + Script Purpose : Waypoint Path for ABlightedWarmonger_A.lua + Script Author : Auto Generated + Script Date : 03/23/2019 02:03:21 AM + Script Notes : +--]] + +function spawn(NPC) + waypoints(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) +end + +function respawn(NPC) +end + +function waypoints(NPC) + MovementLoopAddLocation(NPC, -166.87, -16.12, -312.43, 2, 0) + MovementLoopAddLocation(NPC, -152.38, -16.42, -313.19, 2, 0) + MovementLoopAddLocation(NPC, -149.59, -16.39, -311.86, 2, 0) + MovementLoopAddLocation(NPC, -145.39, -16.43, -312.35, 2, 0) + MovementLoopAddLocation(NPC, -142.68, -16.42, -315.89, 2, 0) + MovementLoopAddLocation(NPC, -137.8, -16.41, -317.47, 2, 0) + MovementLoopAddLocation(NPC, -115.86, -17.46, -309.92, 2, 0) + MovementLoopAddLocation(NPC, -111.11, -17.39, -300.64, 2, 0) + MovementLoopAddLocation(NPC, -103.01, -17.4, -296.68, 2, 0) + MovementLoopAddLocation(NPC, -99.56, -17.41, -297.03, 2, 0) + MovementLoopAddLocation(NPC, -96.17, -17.43, -300.7, 2, 0) + MovementLoopAddLocation(NPC, -95.75, -17.45, -304.4, 2, 0) + MovementLoopAddLocation(NPC, -99.61, -17.44, -305.92, 2, 0) + MovementLoopAddLocation(NPC, -103.62, -17.39, -312.09, 2, 0) + MovementLoopAddLocation(NPC, -107.15, -17.36, -313.18, 2, 0) + MovementLoopAddLocation(NPC, -110.6, -17.39, -313.14, 2, 0) + MovementLoopAddLocation(NPC, -116.96, -17.44, -310.7, 2, 0) + MovementLoopAddLocation(NPC, -121.41, -16.52, -314.31, 2, 0) + MovementLoopAddLocation(NPC, -123.28, -16.49, -317.6, 2, 0) + MovementLoopAddLocation(NPC, -128.46, -16.43, -322.46, 2, 0) + MovementLoopAddLocation(NPC, -131.4, -16.4, -323.72, 2, 0) + MovementLoopAddLocation(NPC, -138.4, -16.39, -323.85, 2, 0) + MovementLoopAddLocation(NPC, -144.26, -16.42, -322.51, 2, 0) + MovementLoopAddLocation(NPC, -149.1, -16.39, -320.88, 2, 0) + MovementLoopAddLocation(NPC, -153.46, -16.43, -317, 2, 0) + MovementLoopAddLocation(NPC, -158.65, -16.4, -315.97, 2, 0) + MovementLoopAddLocation(NPC, -165.79, -16.42, -316.77, 2, 0) + MovementLoopAddLocation(NPC, -173.61, -16.08, -313.64, 2, 0) + MovementLoopAddLocation(NPC, -177.68, -16.21, -312.04, 2, 0) + MovementLoopAddLocation(NPC, -179.62, -16.2, -310.22, 2, 0) + MovementLoopAddLocation(NPC, -179.34, -16.21, -308.43, 2, 0) + MovementLoopAddLocation(NPC, -177.13, -16.21, -309.57, 2, 0) +end + + diff --git a/server/SpawnScripts/FallenGate/AMeatStripper_A.lua b/server/SpawnScripts/FallenGate/AMeatStripper_A.lua new file mode 100644 index 000000000..b24404f02 --- /dev/null +++ b/server/SpawnScripts/FallenGate/AMeatStripper_A.lua @@ -0,0 +1,48 @@ +--[[ + Script Name : AMeatStripper_A.lua + Script Purpose : Waypoint Path for AMeatStripper_A.lua + Script Author : Auto Generated + Script Date : 03/09/2019 01:13:03 PM + Script Notes : +--]] + +function spawn(NPC) + waypoints(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) +end + +function respawn(NPC) +end + +function waypoints(NPC) + MovementLoopAddLocation(NPC, -136.04, -12.06, -206.46, 2, 0) + MovementLoopAddLocation(NPC, -145.34, -11.52, -197.07, 2, 0) + MovementLoopAddLocation(NPC, -151.67, -11.16, -184.93, 2, 0) + MovementLoopAddLocation(NPC, -152.76, -11.32, -176.03, 2, 0) + MovementLoopAddLocation(NPC, -152.27, -11.32, -172.74, 2, 0) + MovementLoopAddLocation(NPC, -151.12, -11.32, -170.03, 2, 0) + MovementLoopAddLocation(NPC, -148.68, -11.32, -167.7, 2, 0) + MovementLoopAddLocation(NPC, -143.81, -11.32, -165.78, 2, 0) + MovementLoopAddLocation(NPC, -133.7, -11.32, -164.97, 2, 0) + MovementLoopAddLocation(NPC, -119.82, -11.66, -166.57, 2, 0) + MovementLoopAddLocation(NPC, -121.33, -11.68, -171.33, 2, 0) + MovementLoopAddLocation(NPC, -123.85, -11.65, -173.69, 2, 0) + MovementLoopAddLocation(NPC, -124.82, -11.64, -178.15, 2, 0) + MovementLoopAddLocation(NPC, -123.85, -11.65, -173.69, 2, 0) + MovementLoopAddLocation(NPC, -121.33, -11.68, -171.33, 2, 0) + MovementLoopAddLocation(NPC, -119.82, -11.66, -166.57, 2, 0) + MovementLoopAddLocation(NPC, -133.7, -11.32, -164.97, 2, 0) + MovementLoopAddLocation(NPC, -143.81, -11.32, -165.78, 2, 0) + MovementLoopAddLocation(NPC, -148.68, -11.32, -167.7, 2, 0) + MovementLoopAddLocation(NPC, -151.12, -11.32, -170.03, 2, 0) + MovementLoopAddLocation(NPC, -152.27, -11.32, -172.74, 2, 0) + MovementLoopAddLocation(NPC, -152.76, -11.32, -176.03, 2, 0) + MovementLoopAddLocation(NPC, -151.67, -11.16, -184.93, 2, 0) + MovementLoopAddLocation(NPC, -145.34, -11.52, -197.07, 2, 0) + MovementLoopAddLocation(NPC, -136.04, -12.06, -206.46, 2, 0) +end + + diff --git a/server/SpawnScripts/FallenGate/ASuspendedWatcher_A.lua b/server/SpawnScripts/FallenGate/ASuspendedWatcher_A.lua new file mode 100644 index 000000000..471139e5c --- /dev/null +++ b/server/SpawnScripts/FallenGate/ASuspendedWatcher_A.lua @@ -0,0 +1,38 @@ +--[[ + Script Name : ASuspendedWatcher_A.lua + Script Purpose : Waypoint Path for ASuspendedWatcher_A.lua + Script Author : Auto Generated + Script Date : 03/09/2019 12:13:21 PM + Script Notes : +--]] + +function spawn(NPC) + waypoints(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) +end + +function respawn(NPC) +end + +function waypoints(NPC) + MovementLoopAddLocation(NPC, -57.2, -4.68, -98.26, 2, 0) + MovementLoopAddLocation(NPC, -53.73, -3.52, -100.18, 2, 0) + MovementLoopAddLocation(NPC, -48.98, -2.86, -105.99, 2, 0) + MovementLoopAddLocation(NPC, -48.46, -2.84, -107.92, 2, 0) + MovementLoopAddLocation(NPC, -51.02, -4.03, -111.59, 2, 0) + MovementLoopAddLocation(NPC, -57.76, -4.17, -114.75, 2, 0) + MovementLoopAddLocation(NPC, -66.01, -5.12, -117.15, 2, 0) + MovementLoopAddLocation(NPC, -72.19, -4.52, -117.59, 2, 0) + MovementLoopAddLocation(NPC, -77.18, -4.19, -114.77, 2, 0) + MovementLoopAddLocation(NPC, -79.82, -3.81, -110.82, 2, 0) + MovementLoopAddLocation(NPC, -78.3, -5.13, -103.66, 2, 0) + MovementLoopAddLocation(NPC, -76.11, -5.13, -100.84, 2, 0) + MovementLoopAddLocation(NPC, -71.71, -5.14, -99.8, 2, 0) + MovementLoopAddLocation(NPC, -66.75, -4.87, -99.82, 2, 0) + MovementLoopAddLocation(NPC, -63.95, -4.59, -98.41, 2, 0) +end + + diff --git a/server/SpawnScripts/FallenGate/ASuspendedWatcher_B.lua b/server/SpawnScripts/FallenGate/ASuspendedWatcher_B.lua new file mode 100644 index 000000000..0d4943b63 --- /dev/null +++ b/server/SpawnScripts/FallenGate/ASuspendedWatcher_B.lua @@ -0,0 +1,33 @@ +--[[ + Script Name : ASuspendedWatcher_B.lua + Script Purpose : Waypoint Path for ASuspendedWatcher_B.lua + Script Author : Auto Generated + Script Date : 03/09/2019 12:21:25 PM + Script Notes : +--]] + +function spawn(NPC) + waypoints(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) +end + +function respawn(NPC) +end + +function waypoints(NPC) + MovementLoopAddLocation(NPC, -82.45, -8.57, -149.99, 2, 0) + MovementLoopAddLocation(NPC, -85.91, -9.24, -149.65, 2, 0) + MovementLoopAddLocation(NPC, -88.41, -9.17, -151.06, 2, 0) + MovementLoopAddLocation(NPC, -89.37, -9.15, -153.62, 2, 0) + MovementLoopAddLocation(NPC, -89.36, -9.16, -155.63, 2, 0) + MovementLoopAddLocation(NPC, -89.37, -9.15, -153.62, 2, 0) + MovementLoopAddLocation(NPC, -88.41, -9.17, -151.06, 2, 0) + MovementLoopAddLocation(NPC, -85.91, -9.24, -149.65, 2, 0) + MovementLoopAddLocation(NPC, -82.45, -8.57, -149.99, 2, 0) + MovementLoopAddLocation(NPC, -78.66, -8.482, -150.79, 2, 0) +end + + diff --git a/server/SpawnScripts/FallenGate/aThexianDragoon_A.lua b/server/SpawnScripts/FallenGate/aThexianDragoon_A.lua new file mode 100644 index 000000000..afd8402b7 --- /dev/null +++ b/server/SpawnScripts/FallenGate/aThexianDragoon_A.lua @@ -0,0 +1,50 @@ +--[[ + Script Name : AThexianDragoon_A.lua + Script Purpose : Waypoint Path for AThexianDragoon_A.lua + Script Author : Auto Generated + Script Date : 03/02/2019 04:59:27 PM + Script Notes : +--]] + +function spawn(NPC) + waypoints(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) +end + +function respawn(NPC) +end + +function waypoints(NPC) + MovementLoopAddLocation(NPC, -14.93, 0.02, 35.08, 2, 0) + MovementLoopAddLocation(NPC, -17, 0, 47.31, 2, 0) + MovementLoopAddLocation(NPC, -16.72, 0.57, 78.05, 2, 0) + MovementLoopAddLocation(NPC, -13.15, 2.07, 83.21, 2, 0) + MovementLoopAddLocation(NPC, -3.75, 3.92, 87.99, 2, 0) + MovementLoopAddLocation(NPC, 5.52, 5.33, 91.83, 2, 0) + MovementLoopAddLocation(NPC, 13.53, 6.81, 98.33, 2, 0) + MovementLoopAddLocation(NPC, 15.67, 7.74, 103.28, 2, 0) + MovementLoopAddLocation(NPC, 16.57, 8.43, 110.14, 2, 0) + MovementLoopAddLocation(NPC, 15.82, 9.37, 117.02, 2, 0) + MovementLoopAddLocation(NPC, 12.85, 10.03, 120.54, 2, 0) + MovementLoopAddLocation(NPC, -1.72, 11.96, 128.67, 2, 0) + MovementLoopAddLocation(NPC, -2.44, 11.93, 125.82, 2, 0) + MovementLoopAddLocation(NPC, 10.88, 9.81, 117.21, 2, 0) + MovementLoopAddLocation(NPC, 13.23, 9.13, 114.11, 2, 0) + MovementLoopAddLocation(NPC, 13.87, 8.43, 107.57, 2, 0) + MovementLoopAddLocation(NPC, 12.88, 7.92, 103.73, 2, 0) + MovementLoopAddLocation(NPC, 10.77, 7.03, 99.86, 2, 0) + MovementLoopAddLocation(NPC, 6.17, 6.28, 96.45, 2, 0) + MovementLoopAddLocation(NPC, -16.28, 2.19, 85.91, 2, 0) + MovementLoopAddLocation(NPC, -21.15, 0.19, 76.13, 2, 0) + MovementLoopAddLocation(NPC, -21.72, 0.26, 69.46, 2, 0) + MovementLoopAddLocation(NPC, -20.87, 0.02, 45.73, 2, 0) + MovementLoopAddLocation(NPC, -17.17, 0.02, 34.67, 2, 0) + MovementLoopAddLocation(NPC, -15.53, 0.02, 32.36, 2, 0) + MovementLoopAddLocation(NPC, -12.66, 0.02, 30.84, 2, 0) + MovementLoopAddLocation(NPC, -13.57, 0.02, 32.5, 2, 0) +end + + diff --git a/server/SpawnScripts/FallenGate/aThexianDragoon_B1.lua b/server/SpawnScripts/FallenGate/aThexianDragoon_B1.lua new file mode 100644 index 000000000..01928678a --- /dev/null +++ b/server/SpawnScripts/FallenGate/aThexianDragoon_B1.lua @@ -0,0 +1,37 @@ +--[[ + Script Name : AThexianDragoon_B1.lua + Script Purpose : Waypoint Path for AThexianDragoon_B1.lua + Script Author : Auto Generated + Script Date : 03/02/2019 05:16:56 PM + Script Notes : +--]] + +function spawn(NPC) + waypoints(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) +end + +function respawn(NPC) +end + +function waypoints(NPC) + MovementLoopAddLocation(NPC, -27.37, 12, 20.4, 2, 0) + MovementLoopAddLocation(NPC, -26.5, 12, 20.76, 2, 0) + MovementLoopAddLocation(NPC, -17.92, 12, 24.32, 2, 0) + MovementLoopAddLocation(NPC, -10.45, 12, 28.4, 2, 0) + MovementLoopAddLocation(NPC, -5.07, 12, 30.48, 2, 0) + MovementLoopAddLocation(NPC, 14.21, 12, 40.37, 2, 0) + MovementLoopAddLocation(NPC, 15.1, 12, 38.5, 2, 0) + MovementLoopAddLocation(NPC, 4.24, 12, 34.7, 2, 0) + MovementLoopAddLocation(NPC, -17.88, 12, 24.07, 2, 0) + MovementLoopAddLocation(NPC, -26.49, 12, 21.49, 2, 0) + MovementLoopAddLocation(NPC, -28.1, 12, 21.53, 2, 0) + MovementLoopAddLocation(NPC, -29.92, 12, 23.78, 2, 0) + MovementLoopAddLocation(NPC, -31.01, 12, 22.68, 2, 0) + MovementLoopAddLocation(NPC, -28.87, 12, 19.8, 2, 0) +end + + diff --git a/server/SpawnScripts/FallenGate/aThexianDragoon_B2.lua b/server/SpawnScripts/FallenGate/aThexianDragoon_B2.lua new file mode 100644 index 000000000..aae5c6d53 --- /dev/null +++ b/server/SpawnScripts/FallenGate/aThexianDragoon_B2.lua @@ -0,0 +1,34 @@ +--[[ + Script Name : AThexianDragoon_B2.lua + Script Purpose : Waypoint Path for AThexianDragoon_B2.lua + Script Author : Auto Generated + Script Date : 03/02/2019 05:23:16 PM + Script Notes : +--]] + +function spawn(NPC) + waypoints(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) +end + +function respawn(NPC) +end + +function waypoints(NPC) + MovementLoopAddLocation(NPC, 6.17, 12, 25.93, 2, 0) + MovementLoopAddLocation(NPC, 14.8, 12, 7.73, 2, 0) + MovementLoopAddLocation(NPC, -10.01, 12, -4.55, 2, 0) + MovementLoopAddLocation(NPC, -13.08, 12, -2.6, 2, 0) + MovementLoopAddLocation(NPC, -21.23, 12, 16.56, 2, 0) + MovementLoopAddLocation(NPC, -22.58, 12, 15.77, 2, 0) + MovementLoopAddLocation(NPC, -12.83, 12, -2.68, 2, 0) + MovementLoopAddLocation(NPC, -10.16, 12, -4.27, 2, 0) + MovementLoopAddLocation(NPC, 15.28, 12, 7.94, 2, 0) + MovementLoopAddLocation(NPC, 6.42, 12, 27.28, 2, 0) + MovementLoopAddLocation(NPC, 5.75, 12, 26.92, 2, 0) +end + + diff --git a/server/SpawnScripts/FallenGate/aThexianDragoon_B3.lua b/server/SpawnScripts/FallenGate/aThexianDragoon_B3.lua new file mode 100644 index 000000000..bb3d08d1e --- /dev/null +++ b/server/SpawnScripts/FallenGate/aThexianDragoon_B3.lua @@ -0,0 +1,33 @@ +--[[ + Script Name : AThexianDragoon_B3.lua + Script Purpose : Waypoint Path for AThexianDragoon_B3.lua + Script Author : Auto Generated + Script Date : 03/02/2019 05:28:29 PM + Script Notes : +--]] + +function spawn(NPC) + waypoints(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) +end + +function respawn(NPC) +end + +function waypoints(NPC) + MovementLoopAddLocation(NPC, 20.75, 2, 35.83, 2, 0) + MovementLoopAddLocation(NPC, 15.88, 4.95, 34.83, 2, 0) + MovementLoopAddLocation(NPC, 6.68, 12, 31.17, 2, 0) + MovementLoopAddLocation(NPC, 4.82, 12, 29.07, 2, 0) + MovementLoopAddLocation(NPC, 5.24, 12, 28.37, 2, 0) + MovementLoopAddLocation(NPC, 7.89, 12, 29.02, 2, 0) + MovementLoopAddLocation(NPC, 20.51, 2, 35.19, 2, 0) + MovementLoopAddLocation(NPC, 23.65, 0.02, 28.53, 2, 0) + MovementLoopAddLocation(NPC, 25.41, 0.02, 29.27, 2, 0) + MovementLoopAddLocation(NPC, 22.4, 2, 36.3, 2, 0) +end + + diff --git a/server/SpawnScripts/FallenGate/aThexianDragoon_C.lua b/server/SpawnScripts/FallenGate/aThexianDragoon_C.lua new file mode 100644 index 000000000..c4d94c9c6 --- /dev/null +++ b/server/SpawnScripts/FallenGate/aThexianDragoon_C.lua @@ -0,0 +1,34 @@ +--[[ + Script Name : AThexianDragoon_C.lua + Script Purpose : Waypoint Path for AThexianDragoon_C.lua + Script Author : Auto Generated + Script Date : 03/02/2019 09:17:07 PM + Script Notes : +--]] + +function spawn(NPC) + waypoints(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) +end + +function respawn(NPC) +end + +function waypoints(NPC) + MovementLoopAddLocation(NPC, 28.99, 0, 18.26, 2, 0) + MovementLoopAddLocation(NPC, 46.63, 3.01, -17.81, 2, 0) + MovementLoopAddLocation(NPC, 55.5, 6.65, -41.76, 2, 0) + MovementLoopAddLocation(NPC, 56.22, 6.81, -46.54, 2, 0) + MovementLoopAddLocation(NPC, 59.04, 6.81, -45.32, 2, 0) + MovementLoopAddLocation(NPC, 55.86, 5.66, -34.78, 2, 0) + MovementLoopAddLocation(NPC, 49.21, 3.33, -18.88, 2, 0) + MovementLoopAddLocation(NPC, 37.54, 0, 9.01, 2, 0) + MovementLoopAddLocation(NPC, 29.62, 0, 22.23, 2, 0) + MovementLoopAddLocation(NPC, 27.57, 0, 21.47, 2, 0) + MovementLoopAddLocation(NPC, 28.17, 0, 20.05, 2, 0) +end + + diff --git a/server/SpawnScripts/FallenGate/aThexianOverseer_A.lua b/server/SpawnScripts/FallenGate/aThexianOverseer_A.lua new file mode 100644 index 000000000..bb6e5ceb8 --- /dev/null +++ b/server/SpawnScripts/FallenGate/aThexianOverseer_A.lua @@ -0,0 +1,44 @@ +--[[ + Script Name : AThexianOverseer_A.lua + Script Purpose : Waypoint Path for AThexianOverseer_A.lua + Script Author : Auto Generated + Script Date : 03/02/2019 04:48:46 PM + Script Notes : +--]] + +function spawn(NPC) + waypoints(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) +end + +function respawn(NPC) +end + +function waypoints(NPC) + MovementLoopAddLocation(NPC, -14.37, 0, 56.25, 2, 0) + MovementLoopAddLocation(NPC, -10.73, 0, 54.6, 2, 0) + MovementLoopAddLocation(NPC, -8.34, 0, 54.77, 2, 0) + MovementLoopAddLocation(NPC, -6.71, 0, 56.72, 2, 0) + MovementLoopAddLocation(NPC, -3.45, 0, 52.25, 2, 0) + MovementLoopAddLocation(NPC, 1.12, 0, 52.02, 2, 0) + MovementLoopAddLocation(NPC, 2.79, 0, 49.04, 2, 0) + MovementLoopAddLocation(NPC, -11.46, 0, 43.57, 2, 0) + MovementLoopAddLocation(NPC, -12.46, 0.02, 37.11, 2, 0) + MovementLoopAddLocation(NPC, -17.84, 0.02, 34.25, 2, 0) + MovementLoopAddLocation(NPC, -24.43, 0, 37.17, 2, 0) + MovementLoopAddLocation(NPC, -28.6, 0, 40.2, 2, 0) + MovementLoopAddLocation(NPC, -35.02, 0, 35.68, 2, 0) + MovementLoopAddLocation(NPC, -40.98, 0, 38.53, 2, 0) + MovementLoopAddLocation(NPC, -38.62, 0, 40.17, 2, 0) + MovementLoopAddLocation(NPC, -33.49, 0, 41.59, 2, 0) + MovementLoopAddLocation(NPC, -31.54, 0, 45.41, 2, 0) + MovementLoopAddLocation(NPC, -33.17, 0, 48.98, 2, 0) + MovementLoopAddLocation(NPC, -26.57, 0, 52.93, 2, 0) + MovementLoopAddLocation(NPC, -22.8, 0, 57.12, 2, 0) + MovementLoopAddLocation(NPC, -16.85, 0, 56.18, 2, 0) +end + + diff --git a/server/SpawnScripts/FallenGate/aThexianOverseer_B.lua b/server/SpawnScripts/FallenGate/aThexianOverseer_B.lua new file mode 100644 index 000000000..085898bb9 --- /dev/null +++ b/server/SpawnScripts/FallenGate/aThexianOverseer_B.lua @@ -0,0 +1,36 @@ +--[[ + Script Name : AThexianOverseer_B.lua + Script Purpose : Waypoint Path for AThexianOverseer_B.lua + Script Author : Auto Generated + Script Date : 03/02/2019 09:03:59 PM + Script Notes : +--]] + +function spawn(NPC) + waypoints(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) +end + +function respawn(NPC) +end + +function waypoints(NPC) + MovementLoopAddLocation(NPC, 30.02, 0, 8.24, 2, 0) + MovementLoopAddLocation(NPC, 24.69, 0, 1.71, 2, 0) + MovementLoopAddLocation(NPC, 17.67, 0, -1.75, 2, 0) + MovementLoopAddLocation(NPC, 17.62, 0, -4.25, 2, 0) + MovementLoopAddLocation(NPC, 26.28, 0, -5.67, 2, 0) + MovementLoopAddLocation(NPC, 26.28, 0, -5.67, 2, 0) + MovementLoopAddLocation(NPC, 31.25, 0.23, -7.11, 2, 0) + MovementLoopAddLocation(NPC, 35.69, 1.15, -11.03, 2, 0) + MovementLoopAddLocation(NPC, 45.44, 1.79, -6.53, 2, 0) + MovementLoopAddLocation(NPC, 50.4, 1.71, -1.57, 2, 0) + MovementLoopAddLocation(NPC, 50.65, 1.28, 3, 2, 0) + MovementLoopAddLocation(NPC, 41.96, 0, 8.81, 2, 0) + MovementLoopAddLocation(NPC, 35.83, 0, 8.25, 2, 0) +end + + diff --git a/server/SpawnScripts/FallenGate/atormentedbattlemage_A.lua b/server/SpawnScripts/FallenGate/atormentedbattlemage_A.lua new file mode 100644 index 000000000..cb2128eac --- /dev/null +++ b/server/SpawnScripts/FallenGate/atormentedbattlemage_A.lua @@ -0,0 +1,81 @@ +--[[ + Script Name : SpawnScripts/FallenGate/atormentedbattlemage_A.lua + Script Purpose : Waypoint Path for atormentedbattlemage_A.lua + Script Author : Auto Generated + Script Date : 03/23/2019 12:54:09 PM + Script Notes : +--]] + +function spawn(NPC) + waypoints(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) +end + +function respawn(NPC) +end + +function waypoints(NPC) + MovementLoopAddLocation(NPC, 160.65, 18.4, -44.34, 2, 0) + MovementLoopAddLocation(NPC, 169.88, 18.4, -56.99, 2, 0) + MovementLoopAddLocation(NPC, 173.57, 18.4, -60.24, 2, 0) + MovementLoopAddLocation(NPC, 178.67, 18.47, -70.24, 2, 0) + MovementLoopAddLocation(NPC, 182.11, 18.4, -77.21, 2, 0, "Change_Grid_A") + MovementLoopAddLocation(NPC, 184.17, 18.4, -84.63, 2, 0) + MovementLoopAddLocation(NPC, 183.4, 18.4, -91.12, 2, 0) + MovementLoopAddLocation(NPC, 196.08, 18.47, -94.69, 2, 0) + MovementLoopAddLocation(NPC, 201.83, 18.47, -95.27, 2, 0) + MovementLoopAddLocation(NPC, 205.46, 18.47, -96.42, 2, 0) + MovementLoopAddLocation(NPC, 207.15, 18.47, -97.48, 2, 0) + MovementLoopAddLocation(NPC, 208.84, 18.47, -100.21, 2, 0) + MovementLoopAddLocation(NPC, 208.81, 18.47, -102.18, 2, 0) + MovementLoopAddLocation(NPC, 207.69, 18.47, -104.47, 2, 0) + MovementLoopAddLocation(NPC, 206.65, 18.47, -105.37, 2, 0) + MovementLoopAddLocation(NPC, 204.97, 18.47, -106.05, 2, 0) + MovementLoopAddLocation(NPC, 203.68, 18.47, -105.96, 2, 0) + MovementLoopAddLocation(NPC, 201.58, 18.47, -104.93, 2, 0) + MovementLoopAddLocation(NPC, 198.1, 18.47, -102.97, 2, 0) + MovementLoopAddLocation(NPC, 196.02, 18.47, -103.58, 2, 0) + MovementLoopAddLocation(NPC, 192.43, 18.47, -106.4, 2, 0) + MovementLoopAddLocation(NPC, 188.05, 18.47, -110.87, 2, 0) + MovementLoopAddLocation(NPC, 186.67, 18.47, -113.14, 2, 0) + MovementLoopAddLocation(NPC, 186.4, 18.47, -115.13, 2, 0) + MovementLoopAddLocation(NPC, 187.26, 18.47, -116.72, 2, 0) + MovementLoopAddLocation(NPC, 192.82, 18.47, -122.98, 2, 0) + MovementLoopAddLocation(NPC, 194.72, 18.47, -124.58, 2, 0) + MovementLoopAddLocation(NPC, 196.99, 18.47, -125.52, 2, 0) + MovementLoopAddLocation(NPC, 198.25, 18.47, -125.38, 2, 0) + MovementLoopAddLocation(NPC, 199.99, 18.47, -124.45, 2, 0) + MovementLoopAddLocation(NPC, 202.75, 18.47, -122.31, 2, 0) + MovementLoopAddLocation(NPC, 208.14, 18.47, -116.91, 2, 0) + MovementLoopAddLocation(NPC, 208.94, 18.47, -115.44, 2, 0) + MovementLoopAddLocation(NPC, 209.45, 18.47, -113.76, 2, 0) + MovementLoopAddLocation(NPC, 209.48, 18.47, -112.61, 2, 0) + MovementLoopAddLocation(NPC, 209.24, 18.47, -108.13, 2, 0) + MovementLoopAddLocation(NPC, 207.35, 18.47, -100.85, 2, 0) + MovementLoopAddLocation(NPC, 205.73, 18.47, -98.81, 2, 0) + MovementLoopAddLocation(NPC, 201.05, 18.47, -96.26, 2, 0) + MovementLoopAddLocation(NPC, 194.88, 18.47, -94.65, 2, 0) + MovementLoopAddLocation(NPC, 188.22, 18.47, -94.32, 2, 0) + MovementLoopAddLocation(NPC, 184.14, 18.4, -92.62, 2, 0) + MovementLoopAddLocation(NPC, 181.3, 18.4, -75.58, 2, 0, "Change_Grid_B") + MovementLoopAddLocation(NPC, 174.21, 18.4, -59.21, 2, 0) + MovementLoopAddLocation(NPC, 163.09, 18.4, -42.89, 2, 0) + MovementLoopAddLocation(NPC, 161.77, 18.4, -43.49, 2, 0) +end + + +function Change_Grid_A(NPC) + Say(NPC, "This is the Change_Grid_A function") + SetGridID(NPC, 3104458931) +end + + +function Change_Grid_B(NPC) + Say(NPC, "This is the Change_Grid_B function") + SetGridID(NPC, 908295842) +end + + diff --git a/server/SpawnScripts/FarJourneyFreeport/Anikra.lua b/server/SpawnScripts/FarJourneyFreeport/Anikra.lua new file mode 100644 index 000000000..bee69d79d --- /dev/null +++ b/server/SpawnScripts/FarJourneyFreeport/Anikra.lua @@ -0,0 +1,52 @@ +--[[ + Script Name : SpawnScripts/FarJourneyFreeport/Anikra.lua + Script Author : Ememjr + Script Date : 2019.05.11 03:05:38 + Script Purpose : + : +--]] + +require "SpawnScripts/Generic/DialogModule" + +function spawn(NPC) + +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + + Dialog.New(NPC, Spawn) + Dialog.AddDialog("Do you want to call down the Drake?") + Dialog.AddOption("Yes, I want to see him in action!", "callDrake") + Dialog.AddOption("Hell No!") + Dialog.Start() +end + +function callDrake(NPC, Spawn) + FaceTarget(NPC, Spawn) + local drake = GetSpawn(NPC, 270013) + if drake ~= nil then + AddTimer(drake, 5000, "startanimation") + Say(NPC, "Drake should be flying") + + AddTimer(drake, 31000, "stopanimation") + Say(NPC, "Drake should be gone now") + end +end + + +--[[ +function callDrake(NPC, Spawn) + FaceTarget(NPC, Spawn) +Say(NPC,"I have made it past FaceTarget") + local drake = GetSpawn(Spawn, 270013) +Say(NPC, "I have set the local drake to the spawn id") +Say(NPC, "Test " .. drake) + SpawnSet(drake, "visual_state", 10783) + +end +]]-- + +function respawn(NPC) + +end diff --git a/server/SpawnScripts/FarJourneyFreeport/CaptainVarlos.lua b/server/SpawnScripts/FarJourneyFreeport/CaptainVarlos.lua new file mode 100644 index 000000000..ea1811b15 --- /dev/null +++ b/server/SpawnScripts/FarJourneyFreeport/CaptainVarlos.lua @@ -0,0 +1,33 @@ +--[[ + Script Name : SpawnScripts/FarJourneyFreeport/CaptainVarlos.lua + Script Author : Cynnar + Script Date : 2019.09.28 03:09:56 + Script Purpose : + : +--]] + +require "SpawnScripts/Generic/DialogModule" + +function spawn(NPC) + +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + + Dialog.New(NPC, Spawn) + Dialog.AddDialog("Ahoy! 'Tis good to see you awake. Ya seem a little squiffy, least ya' cheated death!") + Dialog.AddVoiceover("voiceover/english/captain_varlos/boat_06p_tutorial02/varlos_0_001.mp3", 1930075150, 2666442405) + Dialog.AddEmote("salute") + Dialog.AddOption("Where am I?", "temp1") + Dialog.Start() +end + +function temp1(NPC, Spawn) + Say(NPC, "Testing function call") +end + +function respawn(NPC) + +end + diff --git a/server/SpawnScripts/FarJourneyFreeport/Geredo.lua b/server/SpawnScripts/FarJourneyFreeport/Geredo.lua new file mode 100644 index 000000000..664298199 --- /dev/null +++ b/server/SpawnScripts/FarJourneyFreeport/Geredo.lua @@ -0,0 +1,20 @@ +--[[ + Script Name : SpawnScripts/FarJourneyFreeport/Geredo.lua + Script Author : Cynnar + Script Date : 2019.08.04 12:08:08 + Script Purpose : + : +--]] + +function spawn(NPC) + +end + +function hailed(NPC, Spawn) + PlayFlavor(NPC, "", "", "flex", 0, 0) +end + +function respawn(NPC) + +end + diff --git a/server/SpawnScripts/FarJourneyFreeport/Ingrid.lua b/server/SpawnScripts/FarJourneyFreeport/Ingrid.lua new file mode 100644 index 000000000..55791f8ce --- /dev/null +++ b/server/SpawnScripts/FarJourneyFreeport/Ingrid.lua @@ -0,0 +1,20 @@ +--[[ + Script Name : SpawnScripts/FarJourneyFreeport/Ingrid.lua + Script Author : Cynnar + Script Date : 2019.10.18 06:10:27 + Script Purpose : + : +--]] + +function spawn(NPC) + +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) +end + +function respawn(NPC) + +end + diff --git a/server/SpawnScripts/FarJourneyFreeport/Valik.lua b/server/SpawnScripts/FarJourneyFreeport/Valik.lua new file mode 100644 index 000000000..707d29214 --- /dev/null +++ b/server/SpawnScripts/FarJourneyFreeport/Valik.lua @@ -0,0 +1,28 @@ +--[[ + Script Name : SpawnScripts/FarJourneyFreeport/Valik.lua + Script Author : Cynnar + Script Date : 2019.05.19 10:05:23 + Script Purpose : + : +--]] + +function spawn(NPC) + +end + +function hailed(NPC, Spawn) + choice = math.random(0, 1) + + FaceTarget(NPC, Spawn) + + if choice == 1 then + PlayFlavor(NPC, "voiceover/english/valik/boat_06p_tutorial02/001_refugee_valik_002_eaf98080.mp3", "I can't wait to reach the island, dry land and dry food. Fish is only good for a while, even for a Kerran.", "", 1919549905, 2798982211) + else + PlayFlavor(NPC, "voiceover/english/valik/boat_06p_tutorial02/001_refugee_valik_003_96415f8d.mp3", "I hear the Island of Refuge is the home of the Far Seas Trading Company. Maybe I will be able to find some work there.", "", 2997651561, 1452360635) + end +end + +function respawn(NPC) + +end + diff --git a/server/SpawnScripts/FarJourneyFreeport/Vim.lua b/server/SpawnScripts/FarJourneyFreeport/Vim.lua new file mode 100644 index 000000000..2872b4e1f --- /dev/null +++ b/server/SpawnScripts/FarJourneyFreeport/Vim.lua @@ -0,0 +1,43 @@ +--[[ + Script Name : SpawnScripts/FarJourneyFreeport/Vim.lua + Script Author : Cynnar + Script Date : 2019.05.19 12:05:02 + Script Purpose : + : +--]] + +require "SpawnScripts/Generic/DialogModule" + +function spawn(NPC) + +end + +function hailed(NPC, Spawn) + choice = math.random(0, 3) + + FaceTarget(NPC, Spawn) + + if choice == 0 then + PlayFlavor(NPC, "voiceover/english/merchant_vim/boat_06p_tutorial02/020_merchant_vim_hail_c5d0b965.mp3", "I have some tattered clothes for sale, want to take a look?", "agree", 1974233264, 2156679701) + + elseif choice == 1 then + PlayFlavor(NPC, "voiceover/english/merchant_vim/boat_06p_tutorial02/020_merchant_vim_hail_6c0c3c22.mp3", "The Far Journey is a beautiful ship, ain't she?", "smirk", 139722646, 2672074756) + + elseif choice == 2 then + PlayFlavor(NPC, "voiceover/english/merchant_vim/boat_06p_tutorial02/020_merchant_vim_hail_d3204929.mp3", "Looking for something sturdy to wear?", "nod", 696787059, 2593820637) + + elseif choice == 3 then + PlayFlavor(NPC, "voiceover/english/merchant_vim/boat_06p_tutorial02/020_merchant_vim_hail_187fc6bb.mp3", "I am busy right now...", "no", 1835666244, 487490745) + + end +end + +function respawn(NPC) + +end + +function targeted(NPC, Spawn) + if GetDistance(Spawn, NPC) < 10 then + hailed(NPC, Spawn) + end +end \ No newline at end of file diff --git a/server/SpawnScripts/FarJourneyFreeport/Waulon.lua b/server/SpawnScripts/FarJourneyFreeport/Waulon.lua new file mode 100644 index 000000000..fdf929abf --- /dev/null +++ b/server/SpawnScripts/FarJourneyFreeport/Waulon.lua @@ -0,0 +1,21 @@ +--[[ + Script Name : SpawnScripts/FarJourneyFreeport/Waulon.lua + Script Author : Cynnar + Script Date : 2019.09.28 03:09:55 + Script Purpose : + : +--]] + +function spawn(NPC) + +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + PlayFlavor(NPC, "voiceover/english/waulon/boat_06p_tutorial02/walon_0_008.mp3", "What? Can't ye see? Busy, away with ye!", "", 1608066875, 70639594) +end + +function respawn(NPC) + +end + diff --git a/server/SpawnScripts/FarJourneyFreeport/tutorialdrake.lua b/server/SpawnScripts/FarJourneyFreeport/tutorialdrake.lua new file mode 100644 index 000000000..f46f09ff1 --- /dev/null +++ b/server/SpawnScripts/FarJourneyFreeport/tutorialdrake.lua @@ -0,0 +1,29 @@ +--[[ + Script Name : SpawnScripts/FarJourneyFreeport/tutorialdrake.lua + Script Author : Cynnar + Script Date : 2019.05.18 11:05:52 + Script Purpose : + : +--]] + +function spawn(NPC) + +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) +SpawnSet(NPC, visual_state, 10783) +Say(NPC, "I should have changed my visual state") +end + +function respawn(NPC) + +end + +function startanimation(NPC, Spawn) + SpawnSet(NPC, "visual_state", "10783") +end + +function stopanimation(NPC, Spawn) + SpawnSet(NPC, "visual_state", "0") +end diff --git a/server/SpawnScripts/Feerrott/Turtle.lua b/server/SpawnScripts/Feerrott/Turtle.lua new file mode 100644 index 000000000..7d5464db2 --- /dev/null +++ b/server/SpawnScripts/Feerrott/Turtle.lua @@ -0,0 +1,20 @@ +--[[ + Script Name : SpawnScripts/Feerrott/Turtle.lua + Script Author : Skywalker646 + Script Date : 2019.02.27 09:02:30 + Script Purpose : + : +--]] + +function spawn(NPC) + +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) +end + +function respawn(NPC) + +end + diff --git a/server/SpawnScripts/Feerrott/astablemaster.lua b/server/SpawnScripts/Feerrott/astablemaster.lua new file mode 100644 index 000000000..cc7e9fcc1 --- /dev/null +++ b/server/SpawnScripts/Feerrott/astablemaster.lua @@ -0,0 +1,290 @@ +--[[ + Script Name : SpawnScripts/Feerrott/astablemaster.lua + Script Purpose : a stable master (2490000) + Script Author : Neatz09 + Script Date : 2/20/2019 + Script Notes : +--]] + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_2_1042.mp3", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "I would like to travel.", "dlg_1_1") + AddConversationOption(conversation, "Nowhere.") + StartConversation(conversation, NPC, Spawn, "Greetings traveler, how can I assist you today?") + end + +function dlg_1_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + local con = CreateConversation() + + if GetSpawnLocationID(NPC) == 242878 then + AddConversationOption(con, "To Alliz Evol Station.", "CausewayToAllizEvol") + AddConversationOption(con, "To Alliz Tae Station.", "CausewayToAllizTae") + AddConversationOption(con, "To Dread Basin Station.", "CausewayToBasin") + AddConversationOption(con, "To Greenblood River.", "CausewayToRiver") + AddConversationOption(con, "To Tae Ew Station.", "CausewayToTaeEW") + AddConversationOption(con, "To Tower of Vul Station.", "CausewayToVul") + elseif GetSpawnLocationID(NPC) == 242877 then + AddConversationOption(con, "To Alliz Tae Station.", "EvolToTae") + AddConversationOption(con, "To Drowning Causeway Station.", "EvolToCauseway") + AddConversationOption(con, "To Dread Basin Station.", "EvolToBasin") + AddConversationOption(con, "To Greenblood River Station.", "EvolToRiver") + AddConversationOption(con, "To Tae Ew Station.", "EvolToTaeEw") + AddConversationOption(con, "To Tower of Vul Station.", "EvolToVul") + elseif GetSpawnLocationID(NPC) == 242876 then + AddConversationOption(con, "To Alliz Evol Station.", "RiverToEvol") + AddConversationOption(con, "To Alliz Tae Station.", "RiverToTae") + AddConversationOption(con, "To Dread Basin.", "RiverToBasin") + AddConversationOption(con, "To Drowning Causeway Station.", "RiverToCauseway") + AddConversationOption(con, "To Tae Ew Station.", "RiverToTaeEw") + AddConversationOption(con, "To Tower of Vul.", "RiverToVul") + elseif GetSpawnLocationID(NPC) == 242872 then + AddConversationOption(con, "To Alliz Evol Station.", "TaeToEvol") + AddConversationOption(con, "To Drowning Causeway Station.", "TaeToCauseway") + AddConversationOption(con, "To Dread Basin Station.", "TaeToBasin") + AddConversationOption(con, "To Greenblood River Station.", "TaeToRiver") + AddConversationOption(con, "To Tae Ew Station.", "TaeToTaeEw") + AddConversationOption(con, "To Tower of Vul Station.", "TaeToVul") + elseif GetSpawnLocationID(NPC) == 242871 then + AddConversationOption(con, "To Alliz Evol Station.", "BasinToEvol") + AddConversationOption(con, "To Alliz Tae Station.", "BasinToTae") + AddConversationOption(con, "To Drowning Causeway Station.", "BasinToCauseway") + AddConversationOption(con, "To Greenblood River Station.", "BasinToRiver") + AddConversationOption(con, "To Tae Ew Station.", "BasinToTaeEw") + AddConversationOption(con, "To Tower of Vul Station.", "BasinToVul") + elseif GetSpawnLocationID(NPC) == 242875 then + AddConversationOption(con, "To Alliz Evol Staton.", "TaeEwToEvol") + AddConversationOption(con, "To Alliz Tae Station.", "TaeEwToTae") + AddConversationOption(con, "To Dread Basin Station.", "TaeEwToBasin") + AddConversationOption(con, "To Drowning Causeway Station.", "TaeEwToCauseway") + AddConversationOption(con, "To Greenblood River Station.", "TaeEwToRiver") + AddConversationOption(con, "To Tower of Vul Station.", "TaeEwToVul") + elseif GetSpawnLocationID(NPC) == 242873 then + AddConversationOption(con, "To Alliz Evol Station.", "VulToEvol") + AddConversationOption(con, "To Alliz Tae Station.", "VulToTae") + AddConversationOption(con, "To Dread Basin Station.", "VulToBasin") + AddConversationOption(con, "To Drowning Causeway Station.", "VulToCauseway") + AddConversationOption(con, "To Greenblood River Station.", "VulToRiver") + AddConversationOption(con, "To Tae Ew Station.", "VulToTaeEw") + else + PlayFlavor(NPC, "", "Not implemented yet!", "cry", 0, 0, Spawn) + end + AddConversationOption(con, "Nowhere.") + StartConversation(con, NPC, Spawn, "Where to?") +end + +function CausewayToAllizEvol(NPC, Spawn) + StartAutoMount(Spawn, 265) + SetMount(Spawn, 6846) +end + +function CausewayToAllizTae(NPC, Spawn) + StartAutoMount(Spawn, 294) + SetMount(Spawn, 6846) +end + +function CausewayToBasin(NPC, Spawn) + StartAutoMount(Spawn, 292) + SetMount(Spawn, 6846) +end + +function CausewayToRiver(NPC, Spawn) + StartAutoMount(Spawn, 293) + SetMount(Spawn, 6846) +end + +function CausewayToVul(NPC, Spawn) + StartAutoMount(Spawn, 291) + SetMount(Spawn, 6846) +end + +function CausewayToTaeEW(NPC, Spawn) + StartAutoMount(Spawn, 295) + SetMount(Spawn, 6846) +end + +function EvolToTae(NPC, Spawn) + StartAutoMount(Spawn, 281) + SetMount(Spawn, 6846) +end + +function EvolToCauseway(NPC, Spawn) + StartAutoMount(Spawn, 266) + SetMount(Spawn, 6846) +end + +function EvolToBasin(NPC, Spawn) + StartAutoMount(Spawn, 280) + SetMount(Spawn, 6846) +end + +function EvolToRiver(NPC, Spawn) + StartAutoMount(Spawn, 267) + SetMount(Spawn, 6846) +end + +function EvolToTaeEw(NPC, Spawn) + StartAutoMount(Spawn, 268) + SetMount(Spawn, 6846) +end + +function EvolToVul(NPC, Spawn) + StartAutoMount(Spawn, 279) + SetMount(Spawn, 6846) +end + +function RiverToEvol(NPC, Spawn) + StartAutoMount(Spawn, 269) + SetMount(Spawn, 6846) +end + +function RiverToTae(NPC, Spawn) + StartAutoMount(Spawn, 302) + SetMount(Spawn, 6846) +end + +function RiverToBasin(NPC, Spawn) + StartAutoMount(Spawn, 300) + SetMount(Spawn, 6846) +end + +function RiverToCauseway(NPC, Spawn) + StartAutoMount(Spawn, 301) + SetMount(Spawn, 6846) +end + +function RiverToTaeEw(NPC, Spawn) + StartAutoMount(Spawn, 270) + SetMount(Spawn, 6846) +end + +function RiverToVul(NPC, Spawn) + StartAutoMount(Spawn, 299) + SetMount(Spawn, 6846) +end + +function TaeToEvol(NPC, Spawn) + StartAutoMount(Spawn, 285) + SetMount(Spawn, 6846) +end + +function TaeToCauseway(NPC, Spawn) + StartAutoMount(Spawn, 283) + SetMount(Spawn, 6846) +end + +function TaeToBasin(NPC, Spawn) + StartAutoMount(Spawn, 271) + SetMount(Spawn,6846) +end + +function TaeToRiver(NPC, Spawn) + StartAutoMount(Spawn, 282) + SetMount(Spawn, 6846) +end + +function TaeToTaeEw(NPC, Spawn) + StartAutoMount(Spawn, 284) + SetMount(Spawn, 6846) +end + +function TaeToVul(NPC, Spawn) + StartAutoMount(Spawn, 284) + SetMount(Spawn, 6846) +end + +function BasinToEvol(NPC, Spawn) + StartAutoMount(Spawn, 290) + SetMount(Spawn, 6846) +end + +function BasinToTae(NPC, Spawn) + StartAutoMount(Spawn, 278) + SetMount(Spawn, 6846) +end + +function BasinToCauseway(NPC, Spawn) + StartAutoMount(Spawn, 288) + SetMount(Spawn, 6846) +end + +function BasinToRiver(NPC, Spawn) + StartAutoMount(Spawn, 287) + SetMount(Spawn, 6846) +end + +function BasinToTaeEw(NPC, Spawn) + StartAutoMount(Spawn, 289) + SetMount(Spawn, 6846) +end + +function BasinToVul(NPC, Spawn) + StartAutoMount(Spawn, 286) + SetMount(Spawn, 6846) +end + +function TaeEwToEvol(NPC, Spawn) + StartAutoMount(Spawn, 272) + SetMount(Spawn, 6846) +end + +function TaeEwToTae(NPC, Spawn) + StartAutoMount(Spawn, 298) + SetMount(Spawn, 6846) +end + +function TaeEwToBasin(NPC, Spawn) + StartAutoMount(Spawn, 296) + SetMount(Spawn, 6846) +end + +function TaeEwToCauseway(NPC, Spawn) + StartAutoMount(Spawn, 297) + SetMount(Spawn, 6846) +end + +function TaeEwToRiver(NPC, Spawn) + StartAutoMount(Spawn, 273) + SetMount(Spawn, 6846) +end + +function TaeEwToVul(NPC, Spawn) + StartAutoMount(Spawn, 274) + SetMount(Spawn, 6846) +end + +function VulToEvol(NPC, Spawn) + StartAutoMount(Spawn, 290) + SetMount(Spawn, 6846) +end + +function VulToTae(NPC, Spawn) + StartAutoMount(Spawn, 277) + SetMount(Spawn, 6846) +end + +function VulToBasin(NPC, Spawn) + StartAutoMount(Spawn, 303) + SetMount(Spawn, 6846) +end + +function VulToCauseway(NPC, Spawn) + StartAutoMount(Spawn, 305) + SetMount(Spawn, 6846) +end + +function VulToRiver(NPC, Spawn) + StartAutoMount(Spawn, 304) + SetMount(Spawn, 6846) +end + +function VulToTaeEw(NPC, Spawn) + StartAutoMount(Spawn, 276) + SetMount(Spawn, 6846) +end \ No newline at end of file diff --git a/server/SpawnScripts/FensNathsar/asokokartamer.lua b/server/SpawnScripts/FensNathsar/asokokartamer.lua new file mode 100644 index 000000000..a46f17993 --- /dev/null +++ b/server/SpawnScripts/FensNathsar/asokokartamer.lua @@ -0,0 +1,841 @@ +--[[ + Script Name : SpawnScripts/FensNathsar/asokokartamer.lua + Script Purpose : a stable master (2640003) + Script Author : Neatz09 + Script Date : 4/15/2019 + Script Notes : +--]] + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_2_1042.mp3", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "I would like to travel.", "dlg_1_1") + AddConversationOption(conversation, "Nowhere.") + StartConversation(conversation, NPC, Spawn, "Greetings traveler, how can I assist you today?") + end + +function dlg_1_1(NPC, Spawn) + local con = CreateConversation() + + if GetSpawnLocationID(NPC) == 259318 then + --Riliss-- + AddConversationOption(con, "To Atrebe's Laboratory", "RilToAtrebe") + AddConversationOption(con, "To Bathezid's Watch.", "RilToBathezid") + AddConversationOption(con, "To Bellywumper Burrows.", "RilToBurrow") + AddConversationOption(con, "To Dragon's Rest.", "RilToDragon") + AddConversationOption(con, "To Drogan Exiles.", "RilToDrogan") + AddConversationOption(con, "To Eastern Pens.", "RilToEast") + AddConversationOption(con, "To Kylong Plains.", "RilToKylong") + AddConversationOption(con, "To Omen's Call.", "RilToOmen") + AddConversationOption(con, "To Ruins of Cabilis.", "RilToCab") + AddConversationOption(con, "To Sathir's Span.", "RilToSpan") + AddConversationOption(con, "To Western Pens.", "RilToWest") + elseif GetSpawnLocationID(NPC) == 259322 then + --Omen's Call-- + AddConversationOption(con, "To Atrebe's Laboratory.", "OmenToAtrebe") + AddConversationOption(con, "To Bathezid's Watch.", "OmenToBathezid") + AddConversationOption(con, "To Bellywumper Burrows.", "OmenToBurrow") + AddConversationOption(con, "To Dragon's Rest.", "OmenToDragon") + AddConversationOption(con, "To Drogan Exiles.", "OmenToDrogan") + AddConversationOption(con, "To Eastern Pens.", "OmenToEast") + AddConversationOption(con, "To Kylong Plains.", "OmenToKylong") + AddConversationOption(con, "To Riliss.", "OmenToRil") + AddConversationOption(con, "To Ruins of Cabilis.", "OmenToCab") + AddConversationOption(con, "To Sathir's Span.", "OmenToSpan") + AddConversationOption(con, "To Western Pens.", "OmenToWest") + elseif GetSpawnLocationID(NPC) == 259324 then + --Atrebe's Laboratory-- + AddConversationOption(con, "To Bathezid's Watch.", "AtrebeToBathezid") + AddConversationOption(con, "To Bellywumper Burrows.", "AtrebeToBurrow") + AddConversationOption(con, "To Dragon's Rest.", "AtrebeToDragon") + AddConversationOption(con, "To Drogan Exiles.", "AtrebeToDrogan") + AddConversationOption(con, "To Eastern Pens.", "AtrebeToEast") + AddConversationOption(con, "To Kylong Plains.", "AtrebeToKylong") + AddConversationOption(con, "To Omen's Call.", "AtrebeToOmen") + AddConversationOption(con, "To Riliss.", "AtrebeToRil") + AddConversationOption(con, "To Ruins of Cabilis.", "AtrebeToCab") + AddConversationOption(con, "To Sathir's Span.", "AtrebeToSpan") + AddConversationOption(con, "To Western Pens.", "AtrebeToWest") + elseif GetSpawnLocationID(NPC) == 259316 then + --Bellywumper Burrows-- + AddConversationOption(con, "To Atrebe's Laboratory.", "BurrowToAtrebe") + AddConversationOption(con, "To Bathezid's Watch.", "BurrowToBathezid") + AddConversationOption(con, "To Dragon's Rest.", "BurrowToDragon") + AddConversationOption(con, "To Drogan Exiles.", "BurrowToDrogan") + AddConversationOption(con, "To Eastern Pens.", "BurrowToEast") + AddConversationOption(con, "To Kylong Plains.", "BurrowToKylong") + AddConversationOption(con, "To Omen's Call.", "BurrowToOmen") + AddConversationOption(con, "To Riliss.", "BurrowToRil") + AddConversationOption(con, "To Ruins of Cabilis.", "BurrowToCab") + AddConversationOption(con, "To Sathir's Span.", "BurrowToSpan") + AddConversationOption(con, "To Western Pens.", "BurrowToWest") + elseif GetSpawnLocationID(NPC) == 259319 then + --Drogan Exiles-- + AddConversationOption(con, "To Atrebe's Laboratory.", "DroganToAtrebe") + AddConversationOption(con, "To Bathezid's Watch.", "DroganToBathezid") + AddConversationOption(con, "To Bellywumper Burrows.", "DroganToBurrow") + AddConversationOption(con, "To Dragon's Rest.", "DroganToDragon") + AddConversationOption(con, "To Eastern Pens.", "DroganToEast") + AddConversationOption(con, "To Kylong Plains.", "DroganToKylong") + AddConversationOption(con, "To Omen's Call.", "DroganToOmen") + AddConversationOption(con, "To Riliss.", "DroganToRil") + AddConversationOption(con, "To Ruins of Cabilis.", "DroganToCab") + AddConversationOption(con, "To Sathir's Span.", "DroganToSpan") + AddConversationOption(con, "To Western Pens.", "DroganToWest") + elseif GetSpawnLocationID(NPC) == 259323 then + --Kylong Plains-- + AddConversationOption(con, "To Atrebe's Laboratory.", "KylongToAtrebe") + AddConversationOption(con, "To Bathezid's Watch.", "KylongToBathezid") + AddConversationOption(con, "To Bellywumper Burrows.", "KylongToBurrow") + AddConversationOption(con, "To Dragon's Rest.", "KylongToDragon") + AddConversationOption(con, "To Drogan Exiles.", "KylongToDrogan") + AddConversationOption(con, "To Eastern Pens.", "KylongToEast") + AddConversationOption(con, "To Omen's Call.", "KylongToOmen") + AddConversationOption(con, "To Riliss.", "KylongToRil") + AddConversationOption(con, "To Ruins of Cabilis.", "KylongToCab") + AddConversationOption(con, "To Sathir's Span.", "KylongToSpan") + AddConversationOption(con, "To Western Pens.", "KylongToWest") + elseif GetSpawnLocationID(NPC) == 259320 then + --Ruins of Cabilis- + AddConversationOption(con, "To Atrebe's Laboratory.", "CabToAtrebe") + AddConversationOption(con, "To Bathezid's Watch.", "CabToBathezid") + AddConversationOption(con, "To Bellywumper Burrows.", "CabToBurrow") + AddConversationOption(con, "To Dragon's Rest.", "CabToDragon") + AddConversationOption(con, "To Drogan Exiles.", "CabToDrogan") + AddConversationOption(con, "To Eastern Pens.", "CabToEast") + AddConversationOption(con, "To Kylong Plains.", "CabToKylong") + AddConversationOption(con, "To Omen's Call.", "CabToOmen") + AddConversationOption(con, "To Riliss.", "CabToRil") + AddConversationOption(con, "To Sathir's Span.", "CabToSpan") + AddConversationOption(con, "To Western Pens.", "CabToWest") + elseif GetSpawnLocationID(NPC) == 605980 then + --Bathezid's Watch-- + AddConversationOption(con, "To Atrebe's Laboratory.", "BathezidToAtrebe") + AddConversationOption(con, "To Bellywumper Burrows.", "BathezidToBurrow") + AddConversationOption(con, "To Dragon's Rest.", "BathezidToDragon") + AddConversationOption(con, "To Drogan Exiles.", "BathezidToDrogan") + AddConversationOption(con, "To Eastern Pens.", "BathezidToEast") + AddConversationOption(con, "To Kylong Plains.", "BathezidToKylong") + AddConversationOption(con, "To Omen's Call.", "BathezidToOmen") + AddConversationOption(con, "To Riliss.", "BathezidToRil") + AddConversationOption(con, "To Ruins of Cabilis.", "BathezidToCab") + AddConversationOption(con, "To Sathir's Span.", "BathezidToSpan") + AddConversationOption(con, "To Western Pens.", "BathezidToWest") + elseif GetSpawnLocationID(NPC) == 605977 then + ---Western Pens-- + AddConversationOption(con, "To Atrebe's Laboratory.", "WestToAtrebe") + AddConversationOption(con, "To Bathezid's Watch.", "WestToBathezid") + AddConversationOption(con, "To Bellywumper Burrows.", "WestToBurrow") + AddConversationOption(con, "To Dragon's Rest.", "WestToDragon") + AddConversationOption(con, "To Drogan Exiles.", "WestToDrogan") + AddConversationOption(con, "To Eastern Pens.", "WestToEast") + AddConversationOption(con, "To Kylong Plains.", "WestToKylong") + AddConversationOption(con, "To Omen's Call.", "WestToOmen") + AddConversationOption(con, "To Riliss.", "WestToRil") + AddConversationOption(con, "To Ruins of Cabilis.", "WestToCab") + AddConversationOption(con, "To Sathir's Span.", "WestToSpan") + elseif GetSpawnLocationID(NPC) == 259321 then + ---Sathir's Span-- + AddConversationOption(con, "To Atrebe's Laboratory.", "SpanToAtrebe") + AddConversationOption(con, "To Bathezid's Watch.", "SpawnToBathezid") + AddConversationOption(con, "To Bellywumper Burrows.", "SpanToBurrow") + AddConversationOption(con, "To Dragon's Rest.", "SpanToDragon") + AddConversationOption(con, "To Drogan Exiles.", "SpanToDrogan") + AddConversationOption(con, "To Eastern Pens.", "SpanToEast") + AddConversationOption(con, "To Kylong Plains.", "SpanToKylong") + AddConversationOption(con, "To Omen's Call.", "SpanToOmen") + AddConversationOption(con, "To Riliss.", "SpanToRil") + AddConversationOption(con, "To Ruins of Cabilis.", "SpanToCab") + AddConversationOption(con, "To Western Pens.", "SpanToWest") + elseif GetSpawnLocationID(NPC) == 259317 then + ---Eastern Pens-- + AddConversationOption(con, "To Atrebe's Laboratory.", "EastToAtrebe") + AddConversationOption(con, "To Bathezid's Watch.", "EastToBathezid") + AddConversationOption(con, "To Bellywumper Burrows.", "EastToBurrow") + AddConversationOption(con, "To Dragon's Rest.", "EastToDragon") + AddConversationOption(con, "To Drogan Exiles.", "EastToDrogan") + AddConversationOption(con, "To Kylong Plains.", "EastToKylong") + AddConversationOption(con, "To Omen's Call.", "EastToOmen") + AddConversationOption(con, "To Riliss.", "EastToRil") + AddConversationOption(con, "To Ruins of Cabilis.", "EastToCab") + AddConversationOption(con, "To Sathir's Span.", "EastToSpan") + AddConversationOption(con, "To Western Pens.", "EastToWest") + elseif GetSpawnLocationID(NPC) == 259315 then + ---Dragon's Rest-- + AddConversationOption(con, "To Atrebe's Laboratory.", "DragonToAtrebe") + AddConversationOption(con, "To Bathezid's Watch.", "DragonToBathezid") + AddConversationOption(con, "To Bellywumper Burrows.", "DragonToBurrow") + AddConversationOption(con, "To Drogan Exiles.", "DragonToDrogan") + AddConversationOption(con, "To Eastern Pens.", "DragonToEast") + AddConversationOption(con, "To Kylong Plains.", "DragonToKylong") + AddConversationOption(con, "To Omen's Call.", "DragonToOmen") + AddConversationOption(con, "To Riliss.", "DragonToRil") + AddConversationOption(con, "To Ruins of Cabilis.", "DragonToCab") + AddConversationOption(con, "To Sathir's Span.", "DragonToSpan") + AddConversationOption(con, "To Western Pens.", "DragonToWest") + else + PlayFlavor(NPC, "", "Not implemented yet!", "cry", 0, 0, Spawn) + end + AddConversationOption(con, "Nowhere.") + StartConversation(con, NPC, Spawn, "Where to?") +end + +function RilToAtrebe(NPC, Spawn) + StartAutoMount(Spawn, 452) + SetMount(Spawn, 7253) +end + +function RilToBathezid(NPC, Spawn) + StartAutoMount(Spawn, 451) + SetMount(Spawn, 7253) +end + +function RilToBurrow(NPC, Spawn) + StartAutoMount(Spawn, 401) + SetMount(Spawn, 7253) +end + +function RilToDragon(NPC, Spawn) + StartAutoMount(Spawn, 449) + SetMount(Spawn, 7253) +end + +function RilToDrogan(NPC, Spawn) + StartAutoMount(Spawn, 448) + SetMount(Spawn, 7253) +end + +function RilToEast(NPC, Spawn) + StartAutoMount(Spawn, 450) + SetMount(Spawn, 7253) +end + +function RilToKylong(NPC, Spawn) + StartAutoMount(Spawn, 399) + SetMount(Spawn, 7253) +end + +function RilToOmen(NPC, Spawn) + StartAutoMount(Spawn, 447) + SetMount(Spawn, 7253) +end + +function RilToCab(NPC, Spawn) + StartAutoMount(Spawn, 400) + SetMount(Spawn, 7253) +end + +function RilToSpan(NPC, Spawn) + StartAutoMount(Spawn, 453) + SetMount(Spawn, 7253) +end + +function RilToWest(NPC, Spawn) + StartAutoMount(Spawn, 402) + SetMount(Spawn, 7253) +end + +function OmenToAtrebe(NPC, Spawn) + StartAutoMount(Spawn, 412) + SetMount(Spawn, 7253) +end + +function OmenToBathezid(NPC, Spawn) + StartAutoMount(Spawn, 405) + SetMount(Spawn, 7253) +end + +function OmenToBurrow(NPC, Spawn) + StartAutoMount(Spawn, 457) + SetMount(Spawn, 7253) +end + +function OmenToDragon(NPC, Spawn) + StartAutoMount(Spawn, 456) + SetMount(Spawn, 7253) +end + +function OmenToDrogan(NPC, Spawn) + StartAutoMount(Spawn, 406) + SetMount(Spawn, 7253) +end + +function OmenToEast(NPC, Spawn) + StartAutoMount(Spawn, 455) + SetMount(Spawn, 7253) +end + +function OmenToKylong(NPC, Spawn) + StartAutoMount(Spawn, 454) + SetMount(Spawn, 7253) +end + +function OmenToRil(NPC, Spawn) + StartAutoMount(Spawn, 459) + SetMount(Spawn, 7253) +end + +function OmenToCab(NPC, Spawn) + StartAutoMount(Spawn, 460) + SetMount(Spawn, 7253) +end + +function OmenToSpan(NPC, Spawn) + StartAutoMount(Spawn, 403) + SetMount(Spawn,7253) +end + +function OmenToWest(NPC, Spawn) + StartAutoMount(Spawn, 458) + SetMount(Spawn, 7253) +end + +function AtrebeToBathezid(NPC, Spawn) + StartAutoMount(Spawn, 476) + SetMount(Spawn, 7253) +end + +function AtrebeToBurrow(NPC, Spawn) + StartAutoMount(Spawn, 474) + SetMount(Spawn, 7253) +end + +function AtrebeToDragan(NPC, Spawn) + StartAutoMount(Spawn, 473) + SetMount(Spawn, 7253) +end + +function AtrebeToDrogan(NPC, Spawn) + StartAutoMount(Spawn, 472) + SetMount(Spawn, 7253) +end + +function AtrebeToEast(NPC, Spawn) + StartAutoMount(Spawn, 470) + SetMount(Spawn, 7253) +end + +function AtrebeToKylong(NPC, Spawn) + StartAutoMount(Spawn, 469) + SetMount(Spawn, 7253) +end + +function AtrebeToOmen(NPC, Spawn) + StartAutoMount(Spawn, 407) + SetMount(Spawn, 7253) +end + +function AtrebeToRil(NPC, Spawn) + StartAutoMount(Spawn, 471) + SetMount(Spawn, 7253) +end + +function AtrebeToCab(NPC, Spawn) + StartAutoMount(Spawn, 478) + SetMount(Spawn, 7253) +end + +function AtrebeToSpan(NPC, Spawn) + StartAutoMount(Spawn, 477) + SetMount(Spawn, 7253) +end + +function AtrebeToWest(NPC, Spawn) + StartAutoMount(Spawn, 475) + SetMount(Spawn, 7253) +end + +function BurrowToAtrebe(NPC, Spawn) + StartAutoMount(Spawn, 524) + SetMount(Spawn, 7253) +end + +function BurrowToBathezid(NPC, Spawn) + StartAutoMount(Spawn, 523) + SetMount(Spawn, 7253) +end + +function BurrowToDragon(NPC, Spawn) + StartAutoMount(Spawn, 410) + SetMount(Spawn, 7253) +end + +function BurrowToDrogan(NPC, Spawn) + StartAutoMount(Spawn, 408) + SetMount(Spawn, 7253) +end + +function BurrowToEast(NPC, Spawn) + StartAutoMount(Spawn, 520) + SetMount(Spawn, 7253) +end + +function BurrowToKylong(NPC, Spawn) + StartAutoMount(Spawn, 518) + SetMount(Spawn, 7253) +end + +function BurrowToOmen(NPC, Spawn) + StartAutoMount(Spawn, 521) + SetMount(Spawn, 7253) +end + +function BurrowToRil(NPC, Spawn) + StartAutoMount(Spawn, 413) + SetMount(Spawn, 7253) +end + +function BurrowToCab(NPC, Spawn) + StartAutoMount(Spawn, 525) + SetMount(Spawn, 7253) +end + +function BurrowToSpan(NPC, Spawn) + StartAutoMount(Spawn, 519) + SetMount(Spawn, 7253) +end + +function BurrowToWest(NPC, Spawn) + StartAutoMount(Spawn, 522) + SetMount(Spawn, 7253) +end + +function DroganToAtrebe(NPC, Spawn) + StartAutoMount(Spawn, 496) + SetMount(Spawn, 7253) +end + +function DroganToBathezid(NPC, Spawn) + StartAutoMount(Spawn, 495) + SetMount(Spawn, 7253) +end + +function DroganToBurrow(NPC, Spawn) + StartAutoMount(Spawn, 415) + SetMount(Spawn, 7253) +end + +function DroganToDragon(NPC, Spawn) + StartAutoMount(Spawn, 493) + SetMount(Spawn, 7253) +end + +function DroganToEast(NPC, Spawn) + StartAutoMount(Spawn, 492) + SetMount(Spawn, 7253) +end + +function DroganToKylong(NPC, Spawn) + StartAutoMount(Spawn, 489) + SetMount(Spawn, 7253) +end + +function DroganToOmen(NPC, Spawn) + StartAutoMount(Spawn, 409) + SetMount(Spawn, 7253) +end + +function DroganToRil(NPC, Spawn) + StartAutoMount(Spawn, 490) + SetMount(Spawn, 7253) +end + +function DroganToCab(NPC, Spawn) + StartAutoMount(Spawn, 497) + SetMount(Spawn, 7253) +end + +function DroganToSpan(NPC, Spawn) + StartAutoMount(Spawn, 491) + SetMount(Spawn, 7253) +end + +function DroganToWest(NPC, Spawn) + StartAutoMount(Spawn, 494) + SetMount(Spawn, 7253) +end + +function KylongToAtrebe(NPC, Spawn) + StartAutoMount(Spawn, 467) + SetMount(Spawn, 7253) +end + +function KylongToBathezid(NPC, Spawn) + StartAutoMount(Spawn, 414) + SetMount(Spawn, 7253) +end + +function KylongToBurrow(NPC, Spawn) + StartAutoMount(Spawn, 465) + SetMount(Spawn, 7253) +end + +function KylongToDragon(NPC, Spawn) + StartAutoMount(Spawn, 464) + SetMount(Spawn, 7253) +end + +function KylongToDrogan(NPC, Spawn) + StartAutoMount(Spawn, 463) + SetMount(Spawn, 7253) +end + +function KylongToEast(NPC, Spawn) + StartAutoMount(Spawn, 461) + SetMount(Spawn, 7253) +end + +function KylongToOmen(NPC, Spawn) + StartAutoMount(Spawn, 462) + SetMount(Spawn, 7253) +end + +function KylongToRil(NPC, Spawn) + StartAutoMount(Spawn, 419) + SetMount(Spawn, 7253) +end + +function KylongToCab(NPC, Spawn) + StartAutoMount(Spawn, 468) + SetMount(Spawn, 7253) +end + +function KylongToSpan(NPC, Spawn) + StartAutoMount(Spawn, 416) + SetMount(Spawn, 7253) +end + +function KylongToWest(NPC, Spawn) + StartAutoMount(Spawn, 466) + SetMount(Spawn, 7253) +end + +function CabToAtrebe(NPC, Spawn) + StartAutoMount(Spawn, 516) + SetMount(Spawn, 7253) +end + +function CabToBathezid(NPC, Spawn) + StartAutoMount(Spawn, 515) + SetMount(Spawn, 7253) +end + +function CabToBurrow(NPC, Spawn) + StartAutoMount(Spawn, 513) + SetMount(Spawn, 7253) +end + +function CabToDragon(NPC, Spawn) + StartAutoMount(Spawn, 512) + SetMount(Spawn, 7253) +end + +function CabToDrogan(NPC, Spawn) + StartAutoMount(Spawn, 511) + SetMount(Spawn, 7253) +end + +function CabToEast(NPC, Spawn) + StartAutoMount(Spawn, 517) + SetMount(Spawn, 7253) +end + +function CabToKylong(NPC, Spawn) + StartAutoMount(Spawn, 508) + SetMount(Spawn, 7253) +end + +function CabToOmen(NPC, Spawn) + StartAutoMount(Spawn, 510) + SetMount(Spawn, 7253) +end + +function CabToRil(NPC, Spawn) + StartAutoMount(Spawn, 418) + SetMount(Spawn, 7253) +end + +function CabToSpan(NPC, Spawn) + StartAutoMount(Spawn, 509) + SetMount(Spawn, 7253) +end + +function CabToWest(NPC, Spawn) + StartAutoMount(Spawn, 514) + SetMount(Spawn, 7253) +end + +function BathezidToAtrebe(NPC, Spawn) + StartAutoMount(Spawn, 533) + SetMount(Spawn, 7253) +end + +function BathezidToBurrow(NPC, Spawn) + StartAutoMount(Spawn, 530) + SetMount(Spawn, 7253) +end + +function BathezidToDragon(NPC, Spawn) + StartAutoMount(Spawn, 529) + SetMount(Spawn, 7253) +end + +function BathezidToDrogan(NPC, Spawn) + StartAutoMount(Spawn, 528) + SetMount(Spawn, 7253) +end + +function BathezidToEast(NPC, Spawn) + StartAutoMount(Spawn, 526) + SetMount(Spawn, 7253) +end + +function BathezidToKylong(NPC, Spawn) + StartAutoMount(Spawn, 420) + SetMount(Spawn, 7253) +end + +function BathezidToOmen(NPC, Spawn) + StartAutoMount(Spawn, 421) + SetMount(Spawn, 7253) +end + +function BathezidToRil(NPC, Spawn) + StartAutoMount(Spawn, 527) + SetMount(Spawn, 7253) +end + +function BathezidToCab(NPC, Spawn) + StartAutoMount(Spawn, 534) + SetMount(Spawn, 7253) +end + +function BathezidToSpan(NPC, Spawn) + StartAutoMount(Spawn, 532) + SetMount(Spawn, 7253) +end + +function BathezidToWest(NPC, Spawn) + StartAutoMount(Spawn, 531) + SetMount(Spawn, 7253) +end + +function WestToAtrebe(NPC, Spawn) + StartAutoMount(Spawn, 437) + SetMount(Spawn, 7253) +end + +function WestToBathezid(NPC, Spawn) + StartAutoMount(Spawn, 436) + SetMount(Spawn, 7253) +end + +function WestToBurrow(NPC, Spawn) + StartAutoMount(Spawn, 435) + SetMount(Spawn, 7253) +end + +function WestToDragon(NPC, Spawn) + StartAutoMount(Spawn, 434) + SetMount(Spawn, 7253) +end + +function WestToDrogan(NPC, Spawn) + StartAutoMount(Spawn, 433) + SetMount(Spawn, 7253) +end + +function WestToEast(NPC, Spawn) + StartAutoMount(Spawn, 426) + SetMount(Spawn, 7253) +end + +function WestToKylong(NPC, Spawn) + StartAutoMount(Spawn, 431) + SetMount(Spawn, 7253) +end + +function WestToOmen(NPC, Spawn) + StartAutoMount(Spawn, 432) + SetMount(Spawn, 7253) +end + +function WestToRil(NPC, Spawn) + StartAutoMount(Spawn, 428) + SetMount(Spawn, 7253) +end + +function WestToCab(NPC, Spawn) + StartAutoMount(Spawn, 438) + SetMount(Spawn, 7253) +end + +function WestToSpan(NPC, Spawn) + StartAutoMount(Spawn, 429) + SetMount(Spawn, 7253) +end + +function SpanToAtrebe(NPC, Spawn) + StartAutoMount(Spawn, 443) + SetMount(Spawn, 7253) +end + +function SpanToBathezid(NPC, Spawn) + StartAutoMount(Spawn, 442) + SetMount(Spawn, 7253) +end + +function SpanToBurrow(NPC, Spawn) + StartAutoMount(Spawn, 441) + SetMount(Spawn, 7253) +end + +function SpanToDragon(NPC, Spawn) + StartAutoMount(Spawn, 440) + SetMount(Spawn, 7253) +end + +function SpanToDrogan(NPC, Spawn) + StartAutoMount(Spawn, 439) + SetMount(Spawn, 7253) +end + +function SpanToEast(NPC, Spawn) + StartAutoMount(Spawn, 445) + SetMount(Spawn, 7253) +end + +function SpanToKylong(NPC, Spawn) + StartAutoMount(Spawn, 425) + SetMount(Spawn, 7253) +end + +function SpanToOmen(NPC, Spawn) + StartAutoMount(Spawn, 423) + SetMount(Spawn, 7253) +end + +function SpanToRil(NPC, Spawn) + StartAutoMount(Spawn, 446) + SetMount(Spawn, 7253) +end + +function SpanToCab(NPC, Spawn) + StartAutoMount(Spawn, 444) + SetMount(Spawn, 7253) +end + +function SpanToWest(NPC, Spawn) + StartAutoMount(Spawn, 424) + SetMount(Spawn, 7253) +end + +function EastToAtrebe(NPC, Spawn) + StartAutoMount(Spawn, 487) + SetMount(Spawn, 7253) +end + +function EastToBathezid(NPC, Spawn) + StartAutoMount(Spawn, 486) + SetMount(Spawn, 7253) +end + +function EastToBurrow(NPC, Spawn) + StartAutoMount(Spawn, 485) + SetMount(Spawn, 7253) +end + +function EastToDragon(NPC, Spawn) + StartAutoMount(Spawn, 484) + SetMount(Spawn, 7253) +end + +function EastToDrogan(NPC, Spawn) + StartAutoMount(Spawn, 483) + SetMount(Spawn, 7253) +end + +function EastToKylong(NPC, Spawn) + StartAutoMount(Spawn, 479) + SetMount(Spawn, 7253) +end + +function EastToOmen(NPC, Spawn) + StartAutoMount(Spawn, 482) + SetMount(Spawn, 7253) +end + +function EastToRil(NPC, Spawn) + StartAutoMount(Spawn, 480) + SetMount(Spawn, 7253) +end + +function EastToCab(NPC, Spawn) + StartAutoMount(Spawn, 488) + SetMount(Spawn, 7253) +end + +function EastToWest(NPC, Spawn) + StartAutoMount(Spawn, 430) + SetMount(Spawn, 7253) +end + +function DragonToAtrebe(NPC, Spawn) + StartAutoMount(Spawn, 505) + SetMount(Spawn, 7253) +end + +function DragonToBathezid(NPC, Spawn) + StartAutoMount(Spawn, 507) + SetMount(Spawn, 7253) +end + +function DragonToBurrow(NPC, Spawn) + StartAutoMount(Spawn, 427) + SetMount(Spawn, 7253) +end + +function DragonToDrogan(NPC, Spawn) + StartAutoMount(Spawn, 502) + SetMount(Spawn, 7253) +end + +function DragonToEast(NPC, Spawn) + StartAutoMount(Spawn, 500) + SetMount(Spawn, 7253) +end + +function DragonToKylong(NPC, Spawn) + StartAutoMount(Spawn, 498) + SetMount(Spawn, 7253) +end + +function DragonToOmen(NPC, Spawn) + StartAutoMount(Spawn, 501) + SetMount(Spawn, 7253) +end + +function DragonToRil(NPC, Spawn) + StartAutoMount(Spawn, 499) + SetMount(Spawn, 7253) +end + +function DragonToCab(NPC, Spawn) + StartAutoMount(Spawn, 506) + SetMount(Spawn, 7253) +end + +function DragonToSpan(NPC, Spawn) + StartAutoMount(Spawn, 503) + SetMount(Spawn, 7253) +end + +function DragonToWest(NPC, Spawn) + StartAutoMount(Spawn, 504) + SetMount(Spawn, 7253) +end diff --git a/server/SpawnScripts/ForestRuins/ActingLieutenantGermain.lua b/server/SpawnScripts/ForestRuins/ActingLieutenantGermain.lua new file mode 100644 index 000000000..c3e714202 --- /dev/null +++ b/server/SpawnScripts/ForestRuins/ActingLieutenantGermain.lua @@ -0,0 +1,213 @@ +--[[ + Script Name : SpawnScripts/ForestRuins/ActingLieutenantGermain.lua + Script Purpose : Acting Lieutenant Germain + Script Author : Scatman + Script Date : 2009.09.27 + Script Notes : +--]] + +local QUEST_FROM_POKO = 201 +local QUEST_1 = 202 +local QUEST_2 = 1 + +function spawn(NPC) + ProvidesQuest(NPC, QUEST_1) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + if HasQuest(Spawn, QUEST_FROM_POKO) and GetQuestStep(Spawn, QUEST_FROM_POKO) == 3 then + AddConversationOption(conversation, "I have news for you.", "NewsForYou") + end + + choice = math.random(1, 3) + if choice == 1 then + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_1_1004.mp3", "", "", 0, 0) + elseif choice == 2 then + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_2_1004.mp3", "", "", 0, 0) + else + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_3_1004.mp3", "", "", 0, 0) + end + + if HasCompletedQuest(Spawn, QUEST_1) then + if HasCompletedQuest(Spawn, QUEST_2) then + elseif HasQuest(Spawn, QUEST_2) then + else + OnQuest1(NPC, Spawn, conversation) + end + elseif HasQuest(Spawn, QUEST_1) then + OnQuest1(NPC, Spawn, conversation) + else + if GetLevel(Spawn) >= 5 then + WelcomeCitizen(NPC, Spawn, conversation) + else + Say(NPC, "Come back to me once you've gotten a bit stronger.", Spawn) + end + end + + +--[[ + + if convo==1 then + AddConversationOption(conversation, "I do not know yet.", "dlg_0_1") + StartConversation(conversation, NPC, Spawn, "What does Poko say?") + end + + if convo==6 then + + end + + if convo==7 then + + StartConversation(conversation, NPC, Spawn, "Any news of Del Varun?") + end + + if convo==8 then + AddConversationOption(conversation, "I do not know yet.", "dlg_8_1") + StartConversation(conversation, NPC, Spawn, "What does Poko say?") + end + + if convo==16 then + AddConversationOption(conversation, "I have news for you.", "dlg_16_1") + StartConversation(conversation, NPC, Spawn, "Welcome, citizen. Please be careful around here.") + end +--]] +end + +---------------------------------------------------------------------------------------------------------- +-- QUEST FROM POKO +---------------------------------------------------------------------------------------------------------- + +function NewsForYou(NPC, Spawn) + SetStepComplete(Spawn, QUEST_FROM_POKO, 3) + + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "I was collecting machine parts for Poko and one of the parts I returned seems to be of Freeportian origin.", "dlg_16_2") + StartConversation(conversation, NPC, Spawn, "What is it, citizen?") +end + +function dlg_16_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + if not HasQuest(Spawn, QUEST_1) and not HasCompletedQuest(Spawn, QUEST_1) then + AddConversationOption(conversation, "I can help.", "dlg_16_3") + else + AddConversationOption(conversation, "You're welcome.") + end + StartConversation(conversation, NPC, Spawn, "The bad news just doesn't cease. Citizen, there are obviously multiple things afoot in this place, I thank you for your help even if you're adding to my discomfort.") +end + +---------------------------------------------------------------------------------------------------------- +-- QUEST 1 +---------------------------------------------------------------------------------------------------------- + +function WelcomeCitizen(NPC, Spawn, conversation) + AddConversationOption(conversation, "Is it dangerous here?", "dlg_1_1") + StartConversation(conversation, NPC, Spawn, "Welcome, citizen. Please be careful around here.") +end + +function dlg_1_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "It sounds very busy here.", "dlg_1_2") + StartConversation(conversation, NPC, Spawn, "Yes, quite dangerous. We have been getting reports, strange reports, over the past few days. Nobody is sure exactly what is going on, and we don't have the manpower to find out once and for all. I've got scouts but even they can only do so much. We've got so few people that it's hard to take care of all the little things. Ever since the pirates landed the Concordium has been asking for more and more protection.") +end + +function dlg_1_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "I can help.", "dlg_1_3") + AddConversationOption(conversation, "Sorry, I can't help right now.") + StartConversation(conversation, NPC, Spawn, "More than you know. With dead-end investigations, big threats, little threats, and vague orders from the Qeynos Guard AND the Concordium I'm amazed this place hasn't been put under siege by the hawks yet. I'm sorry for complaining to you. Listen, how would you like to help me out?") +end + +function dlg_1_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "I'll see what I can find.", "OfferQuest1") + StartConversation(conversation, NPC, Spawn, "Good, that's great news. The first thing I'd like you to do is help me locate a missing scout. Del Varun was assigned to the small pond on the western side of the ruins. He hasn't checked back in and hasn't been spotted in a few days. I'd like you to head that direction and see if you can find him.") +end + +function OfferQuest1(NPC, Spawn) + FaceTarget(NPC, Spawn) + OfferQuest(NPC, Spawn, QUEST_1) +end + +function OnQuest1(NPC, Spawn, conversation) + if (HasQuest(Spawn, QUSET_1) and GetQuestStep(Spawn, QUEST_1) == 4) or (HasCompletedQuest(Spawn, QUEST_1)) then + AddConversationOption(conversation, "Yes. I found his satchel.", "dlg_7_1") + elseif GetQuestStep(Spawn, QUEST_1) == 2 then + SetStepComplete(Spawn, QUEST_1, 2) + else + AddConversationOption(conversation, "Not quite yet.") + end + + StartConversation(conversation, NPC, Spawn, "Any news of Del Varun?") +end + +function dlg_7_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "There is more. In his notes he mentioned some strange, glowing plants north of the pond. I brought back a sample.", "dlg_7_2") + StartConversation(conversation, NPC, Spawn, "Only his satchel? I was afraid of this. I wish we had some leads, he may yet be alive.") +end + +function dlg_7_2(NPC, Spawn) + if HasQuest(Spawn, QUEST_1) then + SetStepComplete(Spawn, QUEST_1, 4) + end + + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "Yes, take a look at this leaf.", "dlg_7_3") + StartConversation(conversation, NPC, Spawn, "Ah, good thinking. Did you see the glowing too? Perhaps it was a transitory thing.") +end + +---------------------------------------------------------------------------------------------------------- +-- QUEST 2 +---------------------------------------------------------------------------------------------------------- + +function dlg_7_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "What do you think it is?", "OfferQuest2") + StartConversation(conversation, NPC, Spawn, "Incredible. Please, take this to Poko Zing over there. Have him analyze it for us.") +end + +function OfferQuest2(NPC, Spawn) + FaceTarget(NPC, Spawn) + --OfferQuest(NPC, Spawn, QUEST_2) +end + +function dlg_7_4(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "All right.", "dlg_7_5") + StartConversation(conversation, NPC, Spawn, "I don't know, but I'm hoping Poko will be able to tell us.") +end + +function dlg_7_5(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "I do not know yet.", "dlg_7_6") + StartConversation(conversation, NPC, Spawn, "What does Poko say?") +end + + diff --git a/server/SpawnScripts/ForestRuins/Aedre.lua b/server/SpawnScripts/ForestRuins/Aedre.lua new file mode 100644 index 000000000..c920cd700 --- /dev/null +++ b/server/SpawnScripts/ForestRuins/Aedre.lua @@ -0,0 +1,42 @@ +--[[ + Script Name : SpawnScripts/ForestRuins/Aedre.lua + Script Purpose : Aedre + Script Author : John Adams + Script Date : 2009.05.04 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +function spawn(NPC) + SetPlayerProximityFunction(NPC, 10, "InRange", "LeaveRange") +end + +function respawn(NPC) + spawn(NPC) +end + +function InRange(NPC, Spawn) + hailed(NPC, Spawn) +end + +function LeaveRange(NPC, Spawn) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + + choice = math.random(1,5) + + if choice == 1 then + PlayFlavor(NPC, "voiceover/english/human_eco_good_1/ft/service/merchant/human_merchant_service_good_1_aoi_gf_c5e79ff5.mp3", "Hello there! Can I interest you in some of the finest merchandise this side of Norrath?", "wave", 489810336, 3318568259, Spawn) + elseif choice == 2 then + PlayFlavor(NPC, "voiceover/english/human_eco_good_1/ft/service/merchant/human_merchant_service_good_1_hail_gf_e4fa2bd8.mp3", "Confound it! Where did I put that ledger? It must be around here somewhere!", "confused", 2588954321, 88153469, Spawn) + elseif choice == 3 then + PlayFlavor(NPC, "voiceover/english/human_eco_good_1/ft/service/merchant/human_merchant_service_good_1_hail_gf_45d92a75.mp3", "Welcome! What can I help you with?", "bow", 1381598517, 719278997, Spawn) + elseif choice == 4 then + PlayFlavor(NPC, "voiceover/english/human_eco_good_1/ft/service/merchant/human_merchant_service_good_1_hail_gf_ae84abf9.mp3", "Go on, take a look at the stock. You'll never beat this price in the city. I guarantee it!", "wink", 1667555721, 2696093362, Spawn) + elseif choice == 5 then + PlayFlavor(NPC, "voiceover/english/human_eco_good_1/ft/service/merchant/human_merchant_service_good_1_hail_gf_24322c5d.mp3", "Greetings, friend traveler! We have the finest supplies to fill your adventuring needs.", "smile", 1527285383, 3910629798, Spawn) + else + end + +end diff --git a/server/SpawnScripts/ForestRuins/Dockins.lua b/server/SpawnScripts/ForestRuins/Dockins.lua new file mode 100644 index 000000000..92b1341d0 --- /dev/null +++ b/server/SpawnScripts/ForestRuins/Dockins.lua @@ -0,0 +1,13 @@ +--[[ + Script Name : SpawnScripts/ForestRuins/Dockins.lua + Script Purpose : Dockins + Script Author : John Adams + Script Date : 2008.09.19 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/dockins/qey_adv02_ruins_revamp/qst_food_guard_notonquest_c202f7fc.mp3", "Good day, citizen.", "", 3537850523, 972561152) +end + diff --git a/server/SpawnScripts/ForestRuins/ElvicGarrett.lua b/server/SpawnScripts/ForestRuins/ElvicGarrett.lua new file mode 100644 index 000000000..7056583df --- /dev/null +++ b/server/SpawnScripts/ForestRuins/ElvicGarrett.lua @@ -0,0 +1,99 @@ +--[[ + Script Name : SpawnScripts/ForestRuins/ElvicGarrett.lua + Script Purpose : Elvic Garrett + Script Author : Scatman + Script Date : 2009.09.26 + Script Notes : +--]] + +local HALF_ELF = 6 +local HALFELF_MENTOR_QUEST_4 = 221 +local QUEST_1 = 1 + +function spawn(NPC) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + if HasQuest(Spawn, HALFELF_MENTOR_QUEST_4) then + HalfElfMentorQuest(NPC, Spawn, conversation) + else + if HasCompletedQuest(Spawn, QUEST_1) then + elseif HasQuest(Spawn, QUEST_1) then + else + -- posibily a level req of 3 here too. + if GetRace(Spawn) == HALF_ELF then + MyMindOccupied(NPC, Spawn, conversation) + else + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/elvic_garrett/qey_adv02_ruins_revamp/qst_halfelf_elvic_garrett_notonquest_2d73840b.mp3", "The changes to this land scare me.", "", 2326633148, 4032539718, Spawn) + end + end + end +end + +-------------------------------------------------------------------------------------------------------------- +-- HALFELF_MENTOR_QUEST_4 +-------------------------------------------------------------------------------------------------------------- + +function HalfElfMentorQuest(NPC, Spawn, conversation) + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/elvic_garrett/qey_adv02_ruins/quests/elvic/elvic_daelyn000.mp3", "", "", 422032417, 1174930976, Spawn) + AddConversationOption(conversation, "Daelyn has written something. He would like you to have a copy.", "dlg_0_1") + StartConversation(conversation, NPC, Spawn, "These lands are not as safe as they once were.") +end + +function dlg_0_1(NPC, Spawn) + SetStepComplete(Spawn, HALFELF_MENTOR_QUEST_4, 1) + + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + if not HasCompletedQuest(Spawn, QUEST_1) then + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/elvic_garrett/qey_adv02_ruins/quests/elvic/elvic_daelyn001.mp3", "", "", 361439431, 2027311841, Spawn) + AddConversationOption(conversation, "What has your mind occupied?", "MyMindOccupied") + StartConversation(conversation, NPC, Spawn, "Ah, this is fortuitious. It has been some time since Daelyn has written something. My mind has been occupied as of late, I may have to save reading this for a time when I can focus more on my people.") + -- check too see what quest the player is on here. also do the check in OfferQuest + end +end + +-------------------------------------------------------------------------------------------------------------- +-- QUEST 1 +-------------------------------------------------------------------------------------------------------------- + +function MyMindOccupied(NPC, Spawn) + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/elvic_garrett/qey_adv02_ruins/quests/elvic/elvic_daelyn002.mp3", "", "", 873310203, 1695943624, Spawn) + AddConversationOption(conversation, "I can help.", "dlg_0_3") + AddConversationOption(conversation, "Well, that's unfortunate. Goodbye.") + StartConversation(conversation, NPC, Spawn, "My mind is occupied with these lands. Something is off, though I know not what. I offered my assistance to the Qeynos guard, but haven't turned up anything yet.") +end + +function dlg_0_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/elvic_garrett/qey_adv02_ruins/quests/elvic/elvic_daelyn003.mp3", "", "", 3059918187, 1161029478, Spawn) + AddConversationOption(conversation, "I will see what I can find.", "OfferQuest1") + StartConversation(conversation, NPC, Spawn, "Perhaps you can. I've been patrolling the land around the ruins lately, occasionally I come across abandoned camps. Usually a fire pit or a collection of firewood that hasn't yet been burnt. Sometimes these abandoned camps have what may end up being clues, other times they contain worthless junk. If you could do me the favor of seeking out these camps it may help unwravel the mystery that is going on here.") +end + +function OfferQuest1(NPC, Spawn) + FaceTarget(NPC, Spawn) + if not HasQuest(Spawn, QUEST_1) then + OfferQuest(NPC, Spawn, QUEST_1) + end +end + +function dlg_1_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/elvic_garrett/qey_adv02_ruins/quests/elvic/elvic_daelyn003.mp3", "", "", 3059918187, 1161029478, Spawn) + AddConversationOption(conversation, "I will see what I can find.", "dlg_1_2") + StartConversation(conversation, NPC, Spawn, "Perhaps you can. I've been patrolling the land around the ruins lately, occasionally I come across abandoned camps. Usually a fire pit or a collection of firewood that hasn't yet been burnt. Sometimes these abandoned camps have what may end up being clues, other times they contain worthless junk. If you could do me the favor of seeking out these camps it may help unwravel the mystery that is going on here.") +end + diff --git a/server/SpawnScripts/ForestRuins/FindleGimblesled.lua b/server/SpawnScripts/ForestRuins/FindleGimblesled.lua new file mode 100644 index 000000000..7c07a683f --- /dev/null +++ b/server/SpawnScripts/ForestRuins/FindleGimblesled.lua @@ -0,0 +1,25 @@ +--[[ + Script Name : SpawnScripts/ForestRuins/FindleGimblesled.lua + Script Purpose : Findle Gimblesled + Script Author : John Adams + Script Date : 2008.09.19 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + + PlayFlavor(NPC, "", "Sleeble is a gem fanatic! What use is a chunk of rock when you can spend your time with gears and steam?", "sniff", 1689589577, 4560189) + + choice = math.random(1,3) + + if choice == 1 then + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_1_1006.mp3", "", "", 0, 0) + elseif choice == 2 then + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_2_1006.mp3", "", "", 0, 0) + else + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_3_1006.mp3", "", "", 0, 0) + end + +end + diff --git a/server/SpawnScripts/ForestRuins/IlaenLilac.lua b/server/SpawnScripts/ForestRuins/IlaenLilac.lua new file mode 100644 index 000000000..8f58b696f --- /dev/null +++ b/server/SpawnScripts/ForestRuins/IlaenLilac.lua @@ -0,0 +1,87 @@ +--[[ + Script Name : SpawnScripts/ForestRuins/IlaenLilac.lua + Script Purpose : Ilaen Lilac + Script Author : John Adams + Script Date : 2008.09.19 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + choice = math.random(1,3) + + if choice == 1 then + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/ilaen_lilac/qey_adv02_ruins_revamp/qst_woodelf_ilaen_lilac_notonquest_ae7644e9.mp3", "There is no failing greater than a child unable to protect a parent.", "", 138794585, 337134419) + elseif choice == 2 then + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/ilaen_lilac/qey_adv02_ruins_revamp/qst_woodelf_ilaen_lilac_ulinir_d84a1bb.mp3", "You are wise to know Ulinir is worth your time. Speak with me if you wish to use your wisdom for a greater good.", "", 1864539566, 4233668295) + else + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_1_1005.mp3", "", "", 0, 0) + end + + AddConversationOption(conversation, "Save this land from what?", "dlg_11_1") + StartConversation(conversation, NPC, Spawn, "If we do not work to save this land there are no others who will.") + if convo==15 then + AddConversationOption(conversation, "Yes, I found this arrow.", "dlg_15_1") + StartConversation(conversation, NPC, Spawn, "Have you found a clue yet?") + end + +end + +function dlg_11_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "What are you talking about?", "dlg_11_2") + StartConversation(conversation, NPC, Spawn, "If you have not felt it yet you will soon. The movement, the sudden interest in this place by multiple parties, and the strange deaths of this land's inhabitants.") +end + +function dlg_11_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "Killed by what?", "dlg_11_3") + StartConversation(conversation, NPC, Spawn, "I do not believe this land's problems are enough to interest the Qeynos Guard, not yet lestways. But any child of Tunare who spends time here soon realizes there is something sinister in these lands. The deer of these parts are being slain at an alarming rate. Most of their deaths are obviously the cause of wolves or other predators, natural causes, but some of their bodies are left dead and intact.") +end + +function dlg_11_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "Yes, I am willing.", "dlg_11_4") + AddConversationOption(conversation, "Sorry, no.") + StartConversation(conversation, NPC, Spawn, "I do not know, but I believe they are being hunted for sport. They have wounds consistent with arrow fire, but I have yet to recover any clues. Would you be willing to help me search for a clue?") +end + +function dlg_11_4(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "I will return.", "dlg_11_5") + StartConversation(conversation, NPC, Spawn, "Good. Go find the deer bodies that litter these lands. Ignore the bodies killed by predators, seek out only the intact bodies. Search them for clues: weapons, specific types of scars, anything that will help determine who is beind their death.") +end + +function dlg_11_5(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "Thank you.", "dlg_11_6") + StartConversation(conversation, NPC, Spawn, "May you do so without coming to harm.") +end + +function dlg_15_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "Yes, from a dead deer.", "dlg_15_2") + StartConversation(conversation, NPC, Spawn, "You found this arrow here? You are certain?") +end + +function dlg_15_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "Alright, I shall.", "dlg_15_3") + StartConversation(conversation, NPC, Spawn, "This arrow is of gnollish make. It may have gotten here by innocent means, or a gnoll may have brought it here. If the gnolls are moving in then the Qeynos Guard will be very interested. I want you to take this arrow to Lieutenant Germain. Tell him where you found it, he will be most interested to hear this.") +end diff --git a/server/SpawnScripts/ForestRuins/OutlanderVaughn.lua b/server/SpawnScripts/ForestRuins/OutlanderVaughn.lua new file mode 100644 index 000000000..82fd39957 --- /dev/null +++ b/server/SpawnScripts/ForestRuins/OutlanderVaughn.lua @@ -0,0 +1,34 @@ +--[[ + Script Name : SpawnScripts/ForestRuins/OutlanderVaughn.lua + Script Purpose : Outlander Vaughn + Script Author : John Adams + Script Date : 2008.09.19 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +function spawn(NPC) + ProvidesQuest(NPC, 1) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_2_1004.mp3", "", "", 0, 0) + + if HasCompletedQuest(Spawn, 1) then + else + AddConversationOption(conversation, "What is it you need?", "dlg_4_1") + AddConversationOption(conversation, "No time for charity. ") + StartConversation(conversation, NPC, Spawn, "Am I ever in a bind! Will you please help me?") + end + +end + +function dlg_4_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "I'll see what I can do.", "dlg_4_2") + StartConversation(conversation, NPC, Spawn, "Those wretched Blackfurl deckhands stole my satchel! It had everything that was important to me. Please, recover my satchel!") +end diff --git a/server/SpawnScripts/ForestRuins/PokoZing.lua b/server/SpawnScripts/ForestRuins/PokoZing.lua new file mode 100644 index 000000000..1e7219402 --- /dev/null +++ b/server/SpawnScripts/ForestRuins/PokoZing.lua @@ -0,0 +1,247 @@ +--[[ + Script Name : SpawnScripts/ForestRuins/PokoZing.lua + Script Purpose : Poko Zing + Script Author : Scatman + Script Date : 2009.09.27 + Script Notes : +--]] + +local GNOME = 5 +local QUEST_FROM_NEEZER = 29 +local QUEST_1 = 201 + +function spawn(NPC) + ProvidesQuest(NPC, QUEST_1) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + if HasQuest(Spawn, QUEST_FROM_NEEZER) then + AddConversationOption(conversation, "I have a delivery from Neezer Grund.", "dlg_0_1") + end + + if HasCompletedQuest(Spawn, QUEST_1) then + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/poko_zing/qey_adv02_ruins_revamp/qst_gnome_poko_zing_done_2d84e55b.mp3", "Go on now, I don't need yer help and you don't need mine.", "", 16598543, 2700760297, Spawn) + elseif HasQuest(Spawn, QUEST_1) then + OnQuest1(NPC, Spawn, conversation) + else + if GetRace(Spawn) == GNOME and GetLevel(Spawn) >= 3 then + WhatDoYouNeed(NPC, Spawn, conversation) + else + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/poko_zing/qey_adv02_ruins_revamp/qst_gnome_poko_zing_notonquest_f698071.mp3", "I am very, very busy. Please respect that.", "", 2080673395, 1843361681, Spawn) + end + end + + --[[ + if HasQuest(Spawn, QUEST_FROM_NEEZER) then + AddConversationOption(conversation, "I have a delivery from Neezer Grund.", "dlg_0_1") + end + + if HasCompletedQuest(Spawn, QUEST_1) then + Say(NPC, "Go on now, I don't need yer help and you don't need mine.", Spawn) + elseif HasQuest(Spawn, QUEST_1) then + OnQuest1(NPC, Spawn, conversation) + else + --if GetRace(Spawn) == GNOME then + WhatDoYouNeed(NPC, Spawn, conversation) + --else + -- PlayFlavor(NPC, "voiceover/english/tutorial_revamp/poko_zing/qey_adv02_ruins_revamp/qst_gnome_poko_zing_notonquest_f698071.mp3", "I am very, very busy. Please respect that.", "", 2080673395, 1843361681, Spawn) + --end + end +--]] +--[[ + + + + if convo==2 then + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/poko_zing/qey_adv02_ruins/quests/poko/poko014.mp3", "", "", 1818005855, 2773371212, Spawn) + AddConversationOption(conversation, "No, not yet.", "dlg_2_1") + StartConversation(conversation, NPC, Spawn, "Do you have my requested materials yet?") + end + + if convo==9 then + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/poko_zing/qey_adv02_ruins/quests/poko/poko010.mp3", "", "", 1396522810, 374675908, Spawn) + AddConversationOption(conversation, "Lieutenant Germain wants you to analyze this leaf.", "dlg_9_1") + StartConversation(conversation, NPC, Spawn, "How come nobody seems to realize how busy I am? Let me guess, you want me to do something very boring for your benefit, am I right?") + end + + if convo==10 then + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/poko_zing/qey_adv02_ruins/quests/poko/poko014.mp3", "", "", 1818005855, 2773371212, Spawn) + AddConversationOption(conversation, "No, not yet.", "dlg_10_1") + StartConversation(conversation, NPC, Spawn, "Do you have my requested materials yet?") + end +--]] +end + +------------------------------------------------------------------------------------------------------------------- +-- QUEST FROM NEEZER +------------------------------------------------------------------------------------------------------------------- + +function dlg_0_1(NPC, Spawn) + SetStepComplete(Spawn, QUEST_FROM_NEEZER, 1) + + FaceTarget(NPC, Spawn) + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/poko_zing/qey_adv02_ruins/quests/poko/poko_neezer001.mp3", "", "", 910537276, 2473499967, Spawn) + + if not HasQuest(Spawn, QUEST_1) and not HasCompletedQuest(Spawn, QUEST_1) then + conversation = CreateConversation() + AddConversationOption(conversation, "Neezer said you might have work for me.", "dlg_0_2") + StartConversation(conversation, NPC, Spawn, "Ah, finally. You're kinda slow, aren't ya? Nevermind, don't answer, I don't wanna waste any more time than we already have. Goodbye.") + else + Say(NPC, "Ah, finally. You're kinda slow, aren't ya? Nevermind, don't answer, I don't wanna waste any more time than we already have. Goodbye.", Spawn) + end +end + +function dlg_0_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/poko_zing/qey_adv02_ruins/quests/poko/poko_neezer002.mp3", "", "", 204260728, 3356745328, Spawn) + AddConversationOption(conversation, "Why are things hectic?", "dlg_0_3") + StartConversation(conversation, NPC, Spawn, "He said what? That's horrible, things here are so hectic right now I couldn't possibly take the time to give you some random task.") +end + +function dlg_0_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/poko_zing/qey_adv02_ruins/quests/poko/poko_neezer003.mp3", "", "", 1892489912, 2005975591, Spawn) + AddConversationOption(conversation, "Maybe I can help with that then, help figure out what is going on.", "dlg_0_4") + StartConversation(conversation, NPC, Spawn, "People are showing up here for unknown reasons, and they seem to be hostile. We're not sure what their interest is, but it worries us.") +end + +function dlg_0_4(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/poko_zing/qey_adv02_ruins/quests/poko/poko_neezer004.mp3", "", "", 233334797, 3276971465, Spawn) + AddConversationOption(conversation, "Well, all right.", "ICanHelp") + StartConversation(conversation, NPC, Spawn, "No, no, no. That is far too important to hand to just anybody! How about I just give you some random task instead, eh?") +end + +------------------------------------------------------------------------------------------------------------------- +-- QUEST 1 +------------------------------------------------------------------------------------------------------------------- + +function WhatDoYouNeed(NPC, Spawn, conversation) + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/poko_zing/qey_adv02_ruins/quests/poko/poko_neezer000.mp3", "", "", 1600190149, 86494412, Spawn) + AddConversationOption(conversation, "Is something wrong?", "OnlyEverything") + StartConversation(conversation, NPC, Spawn, "What do you need and want and why did you come to me for it?") +end + +function OnlyEverything(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "What kinds of reports?", "WhatKindsOfReports") + StartConversation(conversation, NPC, Spawn, "Only everything! Things are happening here and nobody knows what, precisely. We only have random reports, nothing concrete.") +end + +function WhatKindsOfReports(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "But they didn't send the guard?", "DidntSendGuard") + StartConversation(conversation, NPC, Spawn, "Strange plants, pirates, missing people, dead animals, enough bad things to send the Qeynos Guard--you would think.") +end + +function DidntSendGuard(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "I can help.", "ICanHelp") + StartConversation(conversation, NPC, Spawn, "They sent Germain here. He's nice, I suppose. He doesn't much care for expediency, though. With all this investigation going on I can't get any of the work done that I came here for originally!") +end + +function ICanHelp(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/poko_zing/qey_adv02_ruins/quests/poko/poko004.mp3", "", "", 82829705, 492738311, Spawn) + AddConversationOption(conversation, "All right.", "OfferQuest1") + StartConversation(conversation, NPC, Spawn, "All right, let's see. I came here because I wanted to collect junk. Important, life-altering junk. The kind of junk that helps a gnome stay in business while not setting him back financially, you know? Anyway, now you can do that for me. Collect some of the mechanical parts that have been scattered around this place.") +end + +function OfferQuest1(NPC, Spawn) + FaceTarget(NPC, Spawn) + OfferQuest(NPC, Spawn, QUEST_1) +end + +function OnQuest1(NPC, Spawn, conversation) + if GetQuestStep(Spawn, QUEST_1) == 1 then + AddConversationOption(conversation, "No, not yet.") + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/poko_zing/qey_adv02_ruins/quests/poko/poko005.mp3", "", "", 1800972779, 2738310308, Spawn) + StartConversation(conversation, NPC, Spawn, "Have you collected the parts yet?") + elseif GetQuestStep(Spawn, QUEST_1) == 2 then + AddConversationOption(conversation, "Yes, here they are.", "MostPrecise") + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/poko_zing/qey_adv02_ruins/quests/poko/poko005.mp3", "", "", 1800972779, 2738310308, Spawn) + StartConversation(conversation, NPC, Spawn, "Have you collected the parts yet?") + elseif GetQuestStep(Spawn, QUEST_1) == 3 then + Say(NPC, "Go on, run away from old Poko and talk to the Lieutenant about the machine you found. After that we can attend to whatever other business in important.", Spawn) + end +end + +function MostPrecise(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/poko_zing/qey_adv02_ruins/quests/poko/poko006.mp3", "", "", 2355186524, 2969032857, Spawn) + AddConversationOption(conversation, "Yes, I did.", "AllPartsFromHere") + StartConversation(conversation, NPC, Spawn, "Most precise! I- uh- did you get all of these parts from here?") +end + +function AllPartsFromHere(NPC, Spawn) + SetStepComplete(Spawn, QUEST_1, 2) + + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "I will bring this to his attention.") + StartConversation(conversation, NPC, Spawn, "This particular piece looks to be Freeportian in design--don't ask how I know that. It seems pretty damaged, almost useless to me, but it looks new enough to have been brought here recently. This is prety... strange. Go speak with Lieutenant Germain, tell him of this. Perhaps now Qeynos will involve herself a bit more eh? We shall see.") +end + + + + + + + + +function dlg_9_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/poko_zing/qey_adv02_ruins/quests/poko/poko011.mp3", "", "", 3922758270, 2259936446, Spawn) + AddConversationOption(conversation, "It was off of a plant that had a strange glow surrounding it.", "dlg_9_2") + StartConversation(conversation, NPC, Spawn, "Analyze? Why wo- ooh, is it glowing? This is an amazing find. Where DID you find it?") +end + +function dlg_9_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/poko_zing/qey_adv02_ruins/quests/poko/poko012.mp3", "", "", 2929679035, 2604586682, Spawn) + AddConversationOption(conversation, "What do you need me to do?", "dlg_9_3") + AddConversationOption(conversation, "No way.") + StartConversation(conversation, NPC, Spawn, "How precise! Er, well I can do these tests but I'm going to need you to finish what I was working on in the interim.") +end + +function dlg_9_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/poko_zing/qey_adv02_ruins/quests/poko/poko013.mp3", "", "", 2558023332, 1244993646, Spawn) + AddConversationOption(conversation, "I will get what you need.", "dlg_9_4") + StartConversation(conversation, NPC, Spawn, "I'm looking for a reason for the activity around here lately, the sudden interest. Who knows, maybe this leaf will prove to be that reason. But, I won't abandon my other theories. As such I'd like you to collect bark samples from the trees around here. My theory is--well that's not important. I need bark samples from trees both outside and inside the ruins, as well as from both north and south of the river that runs through them. I would also like some rock samples from the ruins.") +end + +--[[ raw_conversations + +--]] + diff --git a/server/SpawnScripts/ForestRuins/RemmyTumbub.lua b/server/SpawnScripts/ForestRuins/RemmyTumbub.lua new file mode 100644 index 000000000..b837eab58 --- /dev/null +++ b/server/SpawnScripts/ForestRuins/RemmyTumbub.lua @@ -0,0 +1,139 @@ +--[[ + Script Name : SpawnScripts/ForestRuins/RemmyTumbub.lua + Script Purpose : Remmy Tumbub + Script Author : Scatman + Script Date : 2009.09.27 + Script Notes : +--]] + +local HALFLING = 7 +local HALFLING_MENTOR_QUEST_5 = 74 +local QUEST_1 = 1 + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + if HasQuest(Spawn, HALFLING_MENTOR_QUEST_5) then + AddConversationOption(conversation, "Indeed... Pie Man Sam.", "ItWasntMe") + end + + if HasCompletedQuest(Spawn, QUEST_1) then + elseif HasQuest(Spawn, QUEST_1) then + else + if GetRace(Spawn) == HALFLING and GetLevel(Spawn) >= 3 then + HelloHello(NPC, Spawn, conversation) + else + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/remmy_tumbub/qey_adv02_ruins_revamp/qst_halfling_remmy_tumbub_notonquest_e37ef08f.mp3", "I rate pies in both scent and flavor. A pie with a delicious flavor can win over a lady's heart, but a pie with a delicious scent can lure even the most steadfast guard away from their post.", "", 4222932588, 1585778770) + end + end + + --[[if HasQuest(Spawn, 74) and GetQuestStep(Spawn, 74) == 1 then + HelloHello(NPC, Spawn, conversation) + else + choice = math.random(1,2) + + if choice == 1 then + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/remmy_tumbub/qey_adv02_ruins_revamp/qst_halfling_remmy_tumbub_notonquest_e37ef08f.mp3", "I rate pies in both scent and flavor. A pie with a delicious flavor can win over a lady's heart, but a pie with a delicious scent can lure even the most steadfast guard away from their post.", "", 4222932588, 1585778770) + else + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_3_1006.mp3", "", "", 0, 0) + end + + AddConversationOption(conversation, "Why are you still hiding out here?", "dlg_4_1") + StartConversation(conversation, NPC, Spawn, "Hey, thanks again for your help. I still won't be allowed back in the Baubbleshire, but I'm no longer a wanted criminal in all of Qeynos!") + end--]] +end + +function dlg_4_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "You're hopeless.", "dlg_4_2") + StartConversation(conversation, NPC, Spawn, "Shhh, keep your voice down! You know, I wonder if any of those crates in the guard shed have pies in them.") +end + +----------------------------------------------------------------------------------------- +-- QUEST FROM BAUBBLESHIRE +----------------------------------------------------------------------------------------- + +function ItWasntMe(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "Give it up. Whining won't save you. The only thing that can save you now is direct payment.", "OfCourseOfCourse") + AddConversationOption(conversation, "Rondo was right, you fell for it big time.", "RondoWasRight") + StartConversation(conversation, NPC, Spawn, "Oh no! It wasn't me! It's not me! I'm just a halflin' going for a walk. Oh no no no no no no! How did you find me? Listen, I didn't take the pies for myself, I had to feed a starvin' family in Antonica. They NEEDED me! Oh, oh, gosh, listen, I have the money, eh, just not on me, hehe. I'll get to the proper authorities, just don't, don't tell anyone!") +end + +function OfCourseOfCourse(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "Offering a bribe! That's another charge we can add to your file.", "ButYouJustSaid") + AddConversationOption(conversation, "Rondo was right, you fell for it big time.", "RondoWasRight") + StartConversation(conversation, NPC, Spawn, "Oh... of course, of course! How much do you want? I only have a few silver on me at the moment, less than that probably.") +end + +function ButYouJustSaid(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "You think a mere fine was all we had in store for Pie Man Sam? You're going to be working days and nights in each kitchen you stole from.", "CantWorkInKitchen") + AddConversationOption(conversation, "Rondo was right, you fell for it big time.", "RondoWasRight") + StartConversation(conversation, NPC, Spawn, "But you just sai- Goodness, that wasn't a bribe! Hah hah. It was just uh, I thought that was my fine! I was offering to pay my fine! How much is my fine?") +end + +function CantWorkInKitchen(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "Well if you can't work, I suppose you could always avoid the charges.", "HowDoIDoThat") + AddConversationOption(conversation, "Rondo was right, you fell for it big time.", "RondoWasRight") + StartConversation(conversation, NPC, Spawn, "Work? I can't work in a kitchen. The heat and the spices'll get to me. I'm allergic to herbs, I'll probably die! And me knees, sometimes me knees go out without warning! Terrible, terrible condition, you see. Me father had it too, runs in the blood I guess.") +end + +function HowDoIDoThat(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "My pockets could use a little lining, if you know what I mean.", "ThatsWhatGotMeIntoTrouble") + StartConversation(conversation, NPC, Spawn, "How? H-how do I do that?") +end + +function ThatsWhatGotMeIntoTrouble(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "Rondo was right, you fell for it big time.", "RondoWasRight") + StartConversation(conversation, NPC, Spawn, "Of course! Certainly! Wait- WAIT! That's what got me into trouble last time. Oh, this is horrible. I wish someone would just take me away. I wish someone would just come and get me and take me away!") +end + +function RondoWasRight(NPC, Spawn) + SetStepComplete(Spawn, HALFLING_MENTOR_QUEST_5, 1) + + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "What's that?", "SomeoneGotIntoShed") + StartConversation(conversation, NPC, Spawn, "Rondo? That scoundrel! Gah, he sure knows how to get to me. You had me petrified there. I've been avoiding the guard. That is actually why I am out here. Can you believe they are blaming me for something I didn't even do?") +end + +----------------------------------------------------------------------------------------------------------------------- +-- QUEST 1 +----------------------------------------------------------------------------------------------------------------------- + +function HelloHello(NPC, Spawn, conversation) + AddConversationOption(conversation, "Is something wrong?", "IsSomethingWrong") + StartConversation(conversation, NPC, Spawn, "Hello, hello! Nice day. Nice day to be out in the woods. That's why I'm out here, because it's a nice day!") +end + +function IsSomethingWrong(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "What are they blamming you for?", "SomeoneGotIntoShed") + StartConversation(conversation, NPC, Spawn, "Of course! These guards are after me. Blamming me for something I didn't even do, can you believe that?") +end + +function SomeoneGotIntoShed(NPC, Spawn) +end \ No newline at end of file diff --git a/server/SpawnScripts/ForestRuins/SergeantatArmsUthros.lua b/server/SpawnScripts/ForestRuins/SergeantatArmsUthros.lua new file mode 100644 index 000000000..a4047c1c4 --- /dev/null +++ b/server/SpawnScripts/ForestRuins/SergeantatArmsUthros.lua @@ -0,0 +1,68 @@ +--[[ + Script Name : SpawnScripts/ForestRuins/SergeantatArmsUthros.lua + Script Purpose : Sergeant at Arms Uthros + Script Author : John Adams + Script Date : 2008.09.19 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +function spawn(NPC) + ProvidesQuest(NPC, 1) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + choice = math.random(1,2) + + if choice == 1 then + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_1_1004.mp3", "", "", 0, 0) + else + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_3_1004.mp3", "", "", 0, 0) + end + + if HasCompletedQuest(Spawn, 1) then + else + AddConversationOption(conversation, "I'm intent on staying.", "dlg_0_1") + AddConversationOption(conversation, "Perhaps I should play it safe and go back to the village.") + StartConversation(conversation, NPC, Spawn, "Watch your step, friend. Many adventurers get injured because they don't know the dangers that lurk here. These grounds are home to the ruins of the old mage academy. It was destroyed during the wars that raged centuries ago. And aside from the already dangerous inhabitants of these ruins, elemental servants of mages lurk about. Scared yet? ... If you're intent on staying in Qeynos, I suppose we can use your help.") + end + + if convo==1 then + AddConversationOption(conversation, "Perhaps I should play it safe and go back to the village.", "dlg_1_1") + StartConversation(conversation, NPC, Spawn, "Watch your step, friend. Many adventurers get injured because they don't know the dangers that lurk here. These grounds are home to the ruins of the old mage academy. It was destroyed during the wars that raged centuries ago. And aside from the already dangerous inhabitants of these ruins, elemental servants of mages lurk about. Scared yet? ... If you're intent on staying in Qeynos, I suppose we can use your help.") + end + + if convo==14 then + AddConversationOption(conversation, "I have taken care of the vermin.", "dlg_14_1") + AddConversationOption(conversation, "Perhaps I should play it safe and go back to the village.") + StartConversation(conversation, NPC, Spawn, "Watch your step, friend. Many adventurers get injured because they don't know the dangers that lurk here. These grounds are home to the ruins of the old mage academy. It was destroyed during the wars that raged centuries ago. And aside from the already dangerous inhabitants of these ruins, elemental servants of mages lurk about. Scared yet? ... If you're intent on staying in Qeynos, I suppose we can use your help.") + end + +end + +function dlg_0_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "Sounds good.", "dlg_0_2") + StartConversation(conversation, NPC, Spawn, "Well, then, make yourself useful and kill some of the nasty vermin who live in this area. And if you need something to do later, come on back, I always need help!") +end + +function dlg_14_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "Sure.", "dlg_14_2") + AddConversationOption(conversation, "Not right now. ") + StartConversation(conversation, NPC, Spawn, "Hey! Great work on the vermin. Can you spare more time to help Qeynos?") +end + +function dlg_14_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "You bet.", "dlg_14_3") + StartConversation(conversation, NPC, Spawn, "Great! Then go and kill more vermin.") +end diff --git a/server/SpawnScripts/ForestRuins/SleebleGimblesled.lua b/server/SpawnScripts/ForestRuins/SleebleGimblesled.lua new file mode 100644 index 000000000..4c5bdef21 --- /dev/null +++ b/server/SpawnScripts/ForestRuins/SleebleGimblesled.lua @@ -0,0 +1,23 @@ +--[[ + Script Name : SpawnScripts/ForestRuins/SleebleGimblesled.lua + Script Purpose : Sleeble Gimblesled + Script Author : John Adams + Script Date : 2008.09.19 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + PlayFlavor(NPC, "", "I've been working on this piece of Luclin for months now!", "orate", 1689589577, 4560189) + + choice = math.random(1,3) + + if choice==1 then + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_1_1006.mp3", "", "", 0, 0) + elseif choice==1 then + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_2_1006.mp3", "", "", 0, 0) + else + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_3_1006.mp3", "", "", 0, 0) + end + +end diff --git a/server/SpawnScripts/ForestRuins/ThenatrenLightarrow.lua b/server/SpawnScripts/ForestRuins/ThenatrenLightarrow.lua new file mode 100644 index 000000000..576f7231c --- /dev/null +++ b/server/SpawnScripts/ForestRuins/ThenatrenLightarrow.lua @@ -0,0 +1,15 @@ +--[[ + Script Name : SpawnScripts/ForestRuins/ThenatrenLightarrow.lua + Script Purpose : Thenatren Lightarrow + Script Author : John Adams + Script Date : 2008.09.19 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + + PlayFlavor(NPC, "", "Watch yourself near those ruins, they are dangerous!", "", 1689589577, 4560189) + +end + diff --git a/server/SpawnScripts/ForestRuins/ThervenSenshun.lua b/server/SpawnScripts/ForestRuins/ThervenSenshun.lua new file mode 100644 index 000000000..d4fc7146a --- /dev/null +++ b/server/SpawnScripts/ForestRuins/ThervenSenshun.lua @@ -0,0 +1,34 @@ +--[[ + Script Name : SpawnScripts/ForestRuins/ThervenSenshun.lua + Script Purpose : Therven Senshun + Script Author : John Adams + Script Date : 2008.09.19 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "Not yet.", "dlg_2_1") + StartConversation(conversation, NPC, Spawn, "Did you get the shells?") + if convo==3 then + AddConversationOption(conversation, "Yes, here they are.", "dlg_3_1") + StartConversation(conversation, NPC, Spawn, "Did you get the shells?") + end + +end + +function dlg_3_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "Glad to assist.", "dlg_3_2") + StartConversation(conversation, NPC, Spawn, "Thanks! I appreciate it! You've really helped me a lot.") +end + +--[[ raw_conversations + PlayFlavor(NPC, "", "This stuff is much harder to work with than I anticipated.", "", 1689589577, 4560189) + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_3_1022.mp3", "", "", 0, 0) +--]] + diff --git a/server/SpawnScripts/ForestRuins/Winterburn.lua b/server/SpawnScripts/ForestRuins/Winterburn.lua new file mode 100644 index 000000000..037a36ce3 --- /dev/null +++ b/server/SpawnScripts/ForestRuins/Winterburn.lua @@ -0,0 +1,14 @@ +--[[ + Script Name : SpawnScripts/ForestRuins/Winterburn.lua + Script Purpose : Winterburn + Script Author : John Adams + Script Date : 2008.09.19 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + + PlayFlavor(NPC, "voiceover/english/barbarian_eco_good_1/ft/service/guard/barbarian_guard_service_good_1_hail_gm_ee473c11.mp3", "Good day to you, citizen. All preserve Queen Antonia.", "salute", 2268064933, 2349331472) + +end diff --git a/server/SpawnScripts/ForestRuins/afieryforgottenguardian.lua b/server/SpawnScripts/ForestRuins/afieryforgottenguardian.lua new file mode 100644 index 000000000..4d31b6d3f --- /dev/null +++ b/server/SpawnScripts/ForestRuins/afieryforgottenguardian.lua @@ -0,0 +1,11 @@ +--[[ + Script Name : SpawnScripts/ForestRuins/afieryforgottenguardian.lua + Script Purpose : a fiery forgotten guardian + Script Author : John Adams + Script Date : 2008.09.19 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +function attacked(NPC, Spawn) + PlayFlavor(NPC, "voiceover/english/elemental_fire_base_1/ft/elemental/elemental_fire_base_1_1_garbled_7c1e7a03.mp3", "Oerbet aertres nuavalen sulana", "", 944765445, 2661342879) +end diff --git a/server/SpawnScripts/ForestRuins/quest_germain_scout_bush.lua b/server/SpawnScripts/ForestRuins/quest_germain_scout_bush.lua new file mode 100644 index 000000000..32e152d17 --- /dev/null +++ b/server/SpawnScripts/ForestRuins/quest_germain_scout_bush.lua @@ -0,0 +1,26 @@ +--[[ + Script Name : + Script Purpose : + Script Author : + Script Date : + Script Notes : +--]] + +local QUEST_FROM_GERMAIN = 202 + +function spawn(NPC) + --SetRequiredQuest(NPC, QUEST_FROM_GERMAIN, 3) +end + +function hailed(NPC, Spawn) +end + +function respawn(NPC) + spawn(NPC) +end + +function casted_on(Target, Caster) + if HasQuest(Caster, QUEST_FROM_GERMAIN) and GetQuestStep(Caster, QUEST_FROM_GERMAIN) == 3 then + SetStepComplete(Caster, QUEST_FROM_GERMAIN, 3) + end +end \ No newline at end of file diff --git a/server/SpawnScripts/ForestRuins/quest_germain_scout_tree.lua b/server/SpawnScripts/ForestRuins/quest_germain_scout_tree.lua new file mode 100644 index 000000000..32e152d17 --- /dev/null +++ b/server/SpawnScripts/ForestRuins/quest_germain_scout_tree.lua @@ -0,0 +1,26 @@ +--[[ + Script Name : + Script Purpose : + Script Author : + Script Date : + Script Notes : +--]] + +local QUEST_FROM_GERMAIN = 202 + +function spawn(NPC) + --SetRequiredQuest(NPC, QUEST_FROM_GERMAIN, 3) +end + +function hailed(NPC, Spawn) +end + +function respawn(NPC) + spawn(NPC) +end + +function casted_on(Target, Caster) + if HasQuest(Caster, QUEST_FROM_GERMAIN) and GetQuestStep(Caster, QUEST_FROM_GERMAIN) == 3 then + SetStepComplete(Caster, QUEST_FROM_GERMAIN, 3) + end +end \ No newline at end of file diff --git a/server/SpawnScripts/ForestRuins/ulinir_gravestone01.lua b/server/SpawnScripts/ForestRuins/ulinir_gravestone01.lua new file mode 100644 index 000000000..2e0c17cfc --- /dev/null +++ b/server/SpawnScripts/ForestRuins/ulinir_gravestone01.lua @@ -0,0 +1,67 @@ +--[[ + Script Name : SpawnScripts/ForestRuins/ulinir_gravestone01.lua + Script Purpose : ulinir_gravestone01 + Script Author : Scatman + Script Date : 2009.09.26 + Script Notes : +--]] + +local WOODELF_MENTOR_QUEST_5 = 64 + +function spawn(NPC) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) +end + +function casted_on(NPC, Spawn, SpellName) + conversation = CreateConversation() + if HasQuest(Spawn, WOODELF_MENTOR_QUEST_5) and SpellName == "Read Gravestone" then + AddConversationOption(conversation, "Place the Tribute.", "PlaceTribute") + end + AddConversationOption(conversation, "Leave.", "CheckRace") + StartDialogConversation(conversation, 1, NPC, Spawn, "Ulinir\n\nOf the Pine\n\nNature's Strength") +end + +function CheckRace(NPC, Spawn) + if HasCompletedQuest(Spawn, WOODELF_MENTOR_QUEST_5) then + MakeIlaenTalk(NPC, Spawn) + end +end + +function MakeIlaenTalk(NPC, Spawn) + local ilaen_lilac = GetSpawn(Spawn, 1960126) + if ilaen_lilac ~= nil then + FaceTarget(ilaen_lilac, Spawn) + PlayFlavor(ilaen_lilac, "voiceover/english/tutorial_revamp/ilaen_lilac/qey_adv02_ruins_revamp/qst_woodelf_ilaen_lilac_ulinir_d84a1bb.mp3", "You are wise to know Ulinir is worth your time. Speak with me if you wish to use your wisdom for a greater good.", "", 1864539566, 4233668295, Spawn) + end +end + +function PlaceTribute(NPC, Spawn) + SetStepComplete(Spawn, WOODELF_MENTOR_QUEST_5, 1) + + -- Tribute for Ulinir + while HasItem(Spawn, 12830) do + RemoveItem(Spawn, 12830) + end + + local tribute = GetSpawn(Spawn, 1960200) + if tribute == nil then + local flower1 = SpawnMob(GetZone(Spawn), 1960199, 0, 967.417, -17.0745, -820.883, 159.344) + local flower2 = SpawnMob(GetZone(Spawn), 1960199, 0, 967.54, -17.0745, -821.211, 159.344) + local flower3 = SpawnMob(GetZone(Spawn), 1960199, 0, 967.604, -17.0745, -820.813, 159.344) + local flower4 = SpawnMob(GetZone(Spawn), 1960199, 0, 967.727, -17.0745, -821.14, 159.344) + tribute = SpawnMob(GetZone(Spawn), 1960200, 0, 967.581, -17.0745, -821.035, 159.344) + Despawn(tribute, 300000) + Despawn(flower1, 300000) + Despawn(flower2, 300000) + Despawn(flower3, 300000) + Despawn(flower4, 300000) + end + + MakeIlaenTalk(NPC, Spawn) +end diff --git a/server/SpawnScripts/ForestRuins/ulinir_tribute.lua b/server/SpawnScripts/ForestRuins/ulinir_tribute.lua new file mode 100644 index 000000000..839a2f544 --- /dev/null +++ b/server/SpawnScripts/ForestRuins/ulinir_tribute.lua @@ -0,0 +1,20 @@ +--[[ + Script Name : + Script Purpose : + Script Author : + Script Date : + Script Notes : +--]] + +function spawn(NPC) +end + +function hailed(NPC, Spawn) +end + +function respawn(NPC) +end + +function DespawnBush(NPC, Spawn) + Despawn(NPC) +end \ No newline at end of file diff --git a/server/SpawnScripts/ForestRuins/ulinirgravestone01.lua b/server/SpawnScripts/ForestRuins/ulinirgravestone01.lua new file mode 100644 index 000000000..906cc0b00 --- /dev/null +++ b/server/SpawnScripts/ForestRuins/ulinirgravestone01.lua @@ -0,0 +1,67 @@ +--[[ + Script Name : SpawnScripts/ForestRuins/ulinir_gravestone01.lua + Script Purpose : ulinir_gravestone01 + Script Author : Scatman + Script Date : 2009.09.26 + Script Notes : Updated by Jabantiz (4/21/2017) +--]] + +local WOODELF_MENTOR_QUEST_5 = 217 -- A Tribute for Ulinir + +function spawn(NPC) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) +end + +function casted_on(NPC, Spawn, SpellName) + conversation = CreateConversation() + if HasQuest(Spawn, WOODELF_MENTOR_QUEST_5) and SpellName == "Read Gravestone" then + AddConversationOption(conversation, "Place the Tribute.", "PlaceTribute") + end + AddConversationOption(conversation, "Leave.", "CheckRace") + StartDialogConversation(conversation, 1, NPC, Spawn, "Ulinir\n\nOf the Pine\n\nNature's Strength") +end + +function CheckRace(NPC, Spawn) + if HasCompletedQuest(Spawn, WOODELF_MENTOR_QUEST_5) then + MakeIlaenTalk(NPC, Spawn) + end +end + +function MakeIlaenTalk(NPC, Spawn) + local ilaen_lilac = GetSpawn(Spawn, 1960059) + if ilaen_lilac ~= nil then + FaceTarget(ilaen_lilac, Spawn) + PlayFlavor(ilaen_lilac, "voiceover/english/tutorial_revamp/ilaen_lilac/qey_adv02_ruins_revamp/qst_woodelf_ilaen_lilac_ulinir_d84a1bb.mp3", "You are wise to know Ulinir is worth your time. Speak with me if you wish to use your wisdom for a greater good.", "", 1864539566, 4233668295, Spawn) + end +end + +function PlaceTribute(NPC, Spawn) + SetStepComplete(Spawn, WOODELF_MENTOR_QUEST_5, 1) + + -- Tribute for Ulinir + while HasItem(Spawn, 14667) do + RemoveItem(Spawn, 14667) + end + + local tribute = GetSpawn(Spawn, 1960152) + if tribute == nil then + local flower1 = SpawnMob(GetZone(Spawn), 1960140, 0, 967.417, -17.0745, -820.883, 159.344) + local flower2 = SpawnMob(GetZone(Spawn), 1960140, 0, 967.54, -17.0745, -821.211, 159.344) + local flower3 = SpawnMob(GetZone(Spawn), 1960140, 0, 967.604, -17.0745, -820.813, 159.344) + local flower4 = SpawnMob(GetZone(Spawn), 1960140, 0, 967.727, -17.0745, -821.14, 159.344) + tribute = SpawnMob(GetZone(Spawn), 1960152, 0, 967.581, -17.0745, -821.035, 159.344) + Despawn(tribute, 300000) + Despawn(flower1, 300000) + Despawn(flower2, 300000) + Despawn(flower3, 300000) + Despawn(flower4, 300000) + end + + MakeIlaenTalk(NPC, Spawn) +end diff --git a/server/SpawnScripts/Freeport/BankerGaviusHerenus.lua b/server/SpawnScripts/Freeport/BankerGaviusHerenus.lua new file mode 100644 index 000000000..13ce5b2b5 --- /dev/null +++ b/server/SpawnScripts/Freeport/BankerGaviusHerenus.lua @@ -0,0 +1,42 @@ +--[[ + Script Name : SpawnScripts/TheCityofFreeport/BankerGaviusHerenus.lua + Script Purpose : Banker Gavius Herenus + Script Author : neatz09 + Script Date : 2019.01.01 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +function spawn(NPC) + SetPlayerProximityFunction(NPC, 10, "InRange", "LeaveRange") +end + +function respawn(NPC) + spawn(NPC) +end + +function InRange(NPC, Spawn) +end + +function LeaveRange(NPC, Spawn) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + + local choice = math.random(1,5) + + if choice == 1 then + PlayFlavor(NPC, "voiceover/english/darkelf_eco_evil_1/ft/service/banker/darkelf_banker_service_evil_1_hail_gf_d245cb35.mp3", "Ouch, that's your balance? ", "wince", 1211967882, 2876252538, Spawn) + elseif choice == 2 then + PlayFlavor(NPC, "voiceover/english/darkelf_eco_evil_1/ft/service/banker/darkelf_banker_service_evil_1_hail_gf_e3751bcf.mp3", "I'm sorry. I could tell you right now you don't qualify for any of our credit programs.", "glare", 429119796, 2847044301, Spawn) + elseif choice == 3 then + PlayFlavor(NPC, "voiceover/english/darkelf_eco_evil_1/ft/service/banker/darkelf_banker_service_evil_1_aoi_gf_aa2b6243.mp3", "Come on people move the line! We don't have all day here! Time is coin!", "frustrated", 1211146494, 2974036325, Spawn) + elseif choice == 4 then + PlayFlavor(NPC, "voiceover/english/darkelf_eco_evil_1/ft/service/banker/darkelf_banker_service_evil_1_hail_gf_4038e3ba.mp3", "No beggars and no solicitors. If you don't have business to conduct then stand aside!", "heckno", 2007370095, 1974891427, Spawn) + elseif choice == 5 then + PlayFlavor(NPC, "voiceover/english/darkelf_eco_evil_1/ft/service/banker/darkelf_banker_service_evil_1_hail_gf_f8940e54.mp3", "Well, you might qualify for one of our low income account rates. I'll double check and see.", "stinky", 207715982, 3677225232, Spawn) + else + end + +end + diff --git a/server/SpawnScripts/Freeport/Odyssneu.lua b/server/SpawnScripts/Freeport/Odyssneu.lua new file mode 100644 index 000000000..5e9df683c --- /dev/null +++ b/server/SpawnScripts/Freeport/Odyssneu.lua @@ -0,0 +1,31 @@ +--[[ + Script Name : SpawnScripts/TheCityofFreeport/Odyssneu.lua + Script Purpose : Odyssneu + Script Author : neatz09 + Script Date : 2019.01.18 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + + +function spawn(NPC) + SetPlayerProximityFunction(NPC, 10, "InRange", "LeaveRange") +end + +function respawn(NPC) + spawn(NPC) +end + +function InRange(NPC, Spawn) + +end + + +function LeaveRange(NPC, Spawn) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + PlayFlavor(NPC, "voiceover/english/broker_aliindar/qey_harbor/031_con_merchant_aliindar_erudite_2_aoi_1fefa590.mp3", "Hello there! Let's not waste any time shall we? What is it I can get for you?", "beckon", 1746996390, 2674526000, Spawn) + +end + diff --git a/server/SpawnScripts/Freeport/PrivateerTwitchwhisker.lua b/server/SpawnScripts/Freeport/PrivateerTwitchwhisker.lua new file mode 100644 index 000000000..fc603446f --- /dev/null +++ b/server/SpawnScripts/Freeport/PrivateerTwitchwhisker.lua @@ -0,0 +1,24 @@ +--[[ + Script Name : + Script Purpose : + Script Author : + Script Date : 1/1/2019 + Script Notes : +--]] + +function spawn(NPC) +end + +function respawn(NPC) + spawn(NPC) +end +function hailed(NPC, Spawn) + +end + +function respec(Player) + skill = GetSkill(Player, "Parry") + if skill ~= nil then + SetSkillValue(skill, 200) + end +end diff --git a/server/SpawnScripts/Freeport/RennyParvat.lua b/server/SpawnScripts/Freeport/RennyParvat.lua new file mode 100644 index 000000000..af3c70bac --- /dev/null +++ b/server/SpawnScripts/Freeport/RennyParvat.lua @@ -0,0 +1,35 @@ +--[[ + Script Name : SpawnScripts/FrostfangSea/DagbartFalkren.lua + Script Purpose : Dagbart Falkren + Script Author : theFoof + Script Date : 2013.10.30 + Script Notes : +--]] + +function spawn(NPC) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_1_1042.mp3", "", "hello", 0, 0, Spawn) + if HasCollectionsToHandIn(Spawn) then + AddConversationOption(conversation, "I have a collection for you.", "TurnInColls") + end + AddConversationOption(conversation, "I don't have any at the moment.") + StartConversation(conversation, NPC, Spawn, "Hello there! If you have any collections that you've completed, I can take them off your hands and reward you for your time. I love collecting things!") +end + +function TurnInColls(NPC, Spawn) + HandInCollections(Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "All right, thanks!") + StartConversation(conversation, NPC, Spawn, "This is a magnificent find! Here, take this for all your hard work.") +end \ No newline at end of file diff --git a/server/SpawnScripts/FrostfangSea/AgdaDonillson.lua b/server/SpawnScripts/FrostfangSea/AgdaDonillson.lua new file mode 100644 index 000000000..fad961d5f --- /dev/null +++ b/server/SpawnScripts/FrostfangSea/AgdaDonillson.lua @@ -0,0 +1,32 @@ +--[[ + Script Name : SpawnScripts/FrostfangSea/AgdaDonillson.lua + Script Purpose : Agda Donillson + Script Author : theFoof + Script Date : 2013.10.30 + Script Notes : +--]] + +require"SpawnScripts/FrostfangSea/halas_proximity_cheer" + +function spawn(NPC) + SetPlayerProximityFunction(NPC, 15, "ProxCheer") +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + + local choice = math.random(1,4) + if choice == 1 then + PlayFlavor(NPC, "", "What would you like to buy?", "", 1689589577, 4560189, Spawn) + elseif choice == 2 then + PlayFlavor(NPC, "", "Let's check what's available, shall we?", "nod", 1689589577, 4560189, Spawn) + elseif choice == 3 then + PlayFlavor(NPC, "", "I'm sure we have something that will please even you!", "hello", 1689589577, 4560189, Spawn) + elseif choice == 4 then + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_1_1001.mp3", "", "", 0, 0, Spawn) + end +end \ No newline at end of file diff --git a/server/SpawnScripts/FrostfangSea/AliceSwamprunner.lua b/server/SpawnScripts/FrostfangSea/AliceSwamprunner.lua new file mode 100644 index 000000000..4c59d449d --- /dev/null +++ b/server/SpawnScripts/FrostfangSea/AliceSwamprunner.lua @@ -0,0 +1,105 @@ +--[[ + Script Name : SpawnScripts/FrostfangSea/AliceSwamprunner.lua + Script Purpose : Alice Swamprunner + Script Author : theFoof + Script Date : 2013.09.02 + Script Notes : +--]] + +local KestrelPie = 90 + +function spawn(NPC) + ProvidesQuest(NPC, KestrelPie) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + if not HasCompletedQuest(Spawn, KestrelPie) and not HasQuest(Spawn, KestrelPie) then + PlayFlavor(NPC, "alice_swamprunner/halas/new_halas/alice_swamprunner/alice_swamprunner_001.mp3", "", "", 3199488336, 2249135127, Spawn) + AddConversationOption(conversation, "Nice to meet you Alice, I'm " .. GetName(Spawn) .. ".", "Quest1Chat_1") + StartConversation(conversation, NPC, Spawn, "Hello stranger! Welcome to Ravens' Roost. You can call me Alice Swamprunner.") + elseif GetQuestStep(Spawn, KestrelPie) == 1 or GetQuestStep(Spawn, KestrelPie) == 2 then + AddConversationOption(conversation, "Where can I find the kestrels and the ice shrooms?", "Quest1Chat_4") + StartConversation(conversation, NPC, Spawn, "Have you brought me the ingredients?") + elseif GetQuestStep(Spawn, KestrelPie) == 3 then + AddConversationOption(conversation, "I have the meat and shrooms that you requested.", "Quest1Chat_5") + StartConversation(conversation, NPC, Spawn, "Have you brought me the ingredients?") + elseif GetQuestStep(Spawn, KestrelPie) == 4 then + PlayFlavor(NPC, "", "Well go on, try one!", "beckon", 0, 0, Spawn) + else + PlayFlavor(NPC, "", "Thanks for your help with the kestrel pot pie.", "thanks", 0, 0, Spawn) + end +end + +function Quest1Chat_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "alice_swamprunner/halas/new_halas/alice_swamprunner/alice_swamprunner_003.mp3", "", "", 1636835603, 1296919818, Spawn) + AddConversationOption(conversation, "I can always find time to help if help is needed.", "Quest1Chat_2") + StartConversation(conversation, NPC, Spawn, "A pleasure. Are you busy?") +end + +function Quest1Chat_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "alice_swamprunner/halas/new_halas/alice_swamprunner/alice_swamprunner_004.mp3", "", "", 3609415990, 2721638648, Spawn) + AddConversationOption(conversation, "Kestrels are no problem for me.", "Quest1Chat_3") + StartConversation(conversation, NPC, Spawn, "I am making my kestrel pot pie for the New Halas City Festival. The problem is, I'm not a hunter and the downy kestrels are already giving the guards a hard time so I cannot imagine how I would fare with the birds.") +end + +function Quest1Chat_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "alice_swamprunner/halas/new_halas/alice_swamprunner/alice_swamprunner_005.mp3", "", "", 3894141515, 2250215460, Spawn) + AddConversationOption(conversation, "Sure, I don't mind the exercise.", "OfferKestrelPie") + AddConversationOption(conversation, "I'm not running all over New Halas to help you cook dinner.") + StartConversation(conversation, NPC, Spawn, "Well, if you are going to collect kestrel meat, would you mind picking me up some ice shrooms? You can find the ice shrooms in the cave leading to the Erollis Dock, and the kestrels are at the south entrance to New Halas.") +end + +function Quest1Chat_4(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(converstion, "I shall return once I have collected the ingredients.") + StartConversation(conversation, NPC, Spawn, "You can find the ice shrooms in the cave leading to the Erollis Dock, and the kestrels are at the south entrance to New Halas.") +end + +function Quest1Chat_5(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "It sounds yummy.", "Quest1Chat_6") + StartConversation(conversation, NPC, Spawn, "I have already prepared the pie and crust and the rest of the gravy filling. Now to grill up the meat and ice shrooms and add them.") +end + +function Quest1Chat_6(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "I can't wait.", "Quest1Chat_7") + StartConversation(conversation, NPC, Spawn, "It is indeed. Now to cook it and it will be ready to eat.") +end + +function Quest1Chat_7(NPC, Spawn) + AddSpawnAccess(GetSpawn(NPC, 4701845), Spawn) + SetStepComplete(Spawn, KestrelPie, 3) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "I will! Thanks, Alice.") + StartConversation(conversation, NPC, Spawn, "There, finished! Go ahead, take a slice!") +end + +function OfferKestrelPie(NPC, Spawn) + OfferQuest(NPC, Spawn, KestrelPie) +end + diff --git a/server/SpawnScripts/FrostfangSea/AmbassadorBrynhildeMaersdottr.lua b/server/SpawnScripts/FrostfangSea/AmbassadorBrynhildeMaersdottr.lua new file mode 100644 index 000000000..45c5b5e6f --- /dev/null +++ b/server/SpawnScripts/FrostfangSea/AmbassadorBrynhildeMaersdottr.lua @@ -0,0 +1,116 @@ +--[[ + Script Name : SpawnScripts/FrostfangSea/AmbassadorBrynhildeMaersdottr.lua + Script Purpose : Ambassador Brynhilde Maersdottr + Script Author : theFoof + Script Date : 2013.10.30 + Script Notes : +--]] + +require"SpawnScripts/FrostfangSea/halas_proximity_cheer" + +function spawn(NPC) + SetPlayerProximityFunction(NPC, 15, "ProxCheer") +end + +function respawn(NPC) + spawn(NPC) +end +--[[ +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "brynhilde_maersdottr/halas/city_population/halas_betrayal_001.mp3", "", "", 97799044, 4230411082, Spawn) + AddConversationOption(conversation, "Maybe, tell me more.", "dlg_3_1") + AddConversationOption(conversation, "No thank you, I'm very happy here.") + StartConversation(conversation, NPC, Spawn, "Greetings! I am here to offer assistance if you wish to change citizenship. Is this of interest to you?") + if convo==6 then + PlayFlavor(NPC, "brynhilde_maersdottr/halas/city_population/halas_betrayal_001.mp3", "", "", 97799044, 4230411082, Spawn) + AddConversationOption(conversation, "Maybe, tell me more.", "dlg_6_1") + AddConversationOption(conversation, "No thank you, I'm very happy here.") + StartConversation(conversation, NPC, Spawn, "Greetings! I am here to offer assistance if you wish to change citizenship. Is this of interest to you?") + end + + if convo==8 then + PlayFlavor(NPC, "brynhilde_maersdottr/halas/city_population/halas_betrayal_001.mp3", "", "", 97799044, 4230411082, Spawn) + AddConversationOption(conversation, "Maybe, tell me more.", "dlg_8_1") + AddConversationOption(conversation, "No thank you, I'm very happy here.") + StartConversation(conversation, NPC, Spawn, "Greetings! I am here to offer assistance if you wish to change citizenship. Is this of interest to you?") + end + + if convo==9 then + PlayFlavor(NPC, "brynhilde_maersdottr/halas/city_population/halas_betrayal_001.mp3", "", "", 97799044, 4230411082, Spawn) + AddConversationOption(conversation, "Maybe, tell me more.", "dlg_9_1") + AddConversationOption(conversation, "No thank you, I'm very happy here.") + StartConversation(conversation, NPC, Spawn, "Greetings! I am here to offer assistance if you wish to change citizenship. Is this of interest to you?") + end + +end + +function dlg_3_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "brynhilde_maersdottr/halas/city_population/halas_betrayal_002.mp3", "", "", 1600213250, 4013876704, Spawn) + AddConversationOption(conversation, "Yes, can you help me to do that?", "dlg_3_2") + AddConversationOption(conversation, "Actually, I was thinking of changing citizenship to ... elsewhere.") + StartConversation(conversation, NPC, Spawn, "As you're probably aware, New Halas has established good relations with the cities of Qeynos and Kelethin, and when someone wishes to switch citizenship to these cities we try to make the process as friendly as possible. Is this your wish?") +end + +function dlg_3_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "brynhilde_maersdottr/halas/city_population/halas_betrayal_003.mp3", "", "", 2358151408, 4270279466, Spawn) + AddConversationOption(conversation, "Qeynos, if you please.", "dlg_3_3") + AddConversationOption(conversation, "Kelethin, if you please.") + AddConversationOption(conversation, "Neither, I have changed my mind. Thanks anyway!") + StartConversation(conversation, NPC, Spawn, "I would be happy to help. Are you interested in becoming a citizen of Qeynos, or Kelethin?") +end + +function dlg_8_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "brynhilde_maersdottr/halas/city_population/halas_betrayal_002.mp3", "", "", 1600213250, 4013876704, Spawn) + AddConversationOption(conversation, "Yes, can you help me to do that?", "dlg_8_2") + AddConversationOption(conversation, "Actually, I was thinking of changing citizenship to ... elsewhere.") + StartConversation(conversation, NPC, Spawn, "As you're probably aware, New Halas has established good relations with the cities of Qeynos and Kelethin, and when someone wishes to switch citizenship to these cities we try to make the process as friendly as possible. Is this your wish?") +end + +function dlg_8_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "brynhilde_maersdottr/halas/city_population/halas_betrayal_003.mp3", "", "", 2358151408, 4270279466, Spawn) + AddConversationOption(conversation, "Qeynos, if you please.", "dlg_8_3") + AddConversationOption(conversation, "Kelethin, if you please.") + AddConversationOption(conversation, "Neither, I have changed my mind. Thanks anyway!") + StartConversation(conversation, NPC, Spawn, "I would be happy to help. Are you interested in becoming a citizen of Qeynos, or Kelethin?") +end + +function dlg_9_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "brynhilde_maersdottr/halas/city_population/halas_betrayal_002.mp3", "", "", 1600213250, 4013876704, Spawn) + AddConversationOption(conversation, "Yes, can you help me to do that?", "dlg_9_2") + AddConversationOption(conversation, "Actually, I was thinking of changing citizenship to ... elsewhere.") + StartConversation(conversation, NPC, Spawn, "As you're probably aware, New Halas has established good relations with the cities of Qeynos and Kelethin, and when someone wishes to switch citizenship to these cities we try to make the process as friendly as possible. Is this your wish?") +end + +function dlg_9_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "brynhilde_maersdottr/halas/city_population/halas_betrayal_003.mp3", "", "", 2358151408, 4270279466, Spawn) + AddConversationOption(conversation, "Qeynos, if you please.", "dlg_9_3") + AddConversationOption(conversation, "Kelethin, if you please.") + AddConversationOption(conversation, "Neither, I have changed my mind. Thanks anyway!") + StartConversation(conversation, NPC, Spawn, "I would be happy to help. Are you interested in becoming a citizen of Qeynos, or Kelethin?") +end +--]] +--[[ raw_conversations + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_1_1003.mp3", "", "", 0, 0, Spawn) +--]] + diff --git a/server/SpawnScripts/FrostfangSea/ArrinClelland.lua b/server/SpawnScripts/FrostfangSea/ArrinClelland.lua new file mode 100644 index 000000000..88255993b --- /dev/null +++ b/server/SpawnScripts/FrostfangSea/ArrinClelland.lua @@ -0,0 +1,289 @@ +--[[ + Script Name : SpawnScripts/FrostfangSea/ArrinClelland.lua + Script Purpose : Arrin Clelland + Script Author : theFoof + Script Date : 2013.5.12 + Script Notes : Ememjr 2017.10.21 changed refs of Player to Spawn +--]] + +local CrustoseRemoval = 6 + +local RepellingCritters = 7 + +local ScragglyFoodstuffs = 9 + +local FrigidFishing = 10 + +function spawn(NPC) + SetPlayerProximityFunction(NPC, 10, "InRange", "LeaveRange") + ProvidesQuest(NPC, CrustoseRemoval) + ProvidesQuest(NPC, RepellingCritters) + ProvidesQuest(NPC, ScragglyFoodstuffs) + ProvidesQuest(NPC, FrigidFishing) +end + +function respawn(NPC) + spawn(NPC) +end + +function InRange(NPC, Spawn) +end + +function LeaveRange(NPC, Spawn) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + if HasCompletedQuest(Spawn, CrustoseRemoval) == false and HasQuest(Spawn, CrustoseRemoval) == false then + PlayFlavor(NPC, "arrin_clelland/halas/pilgrims_landing/clelland_001.mp3", "", "", 316593235, 3019636341, Spawn) + AddConversationOption(conversation, "" .. GetName(Spawn) .. ". My boat was attacked and destroyed by the orcs, apparently.", "Quest1Chat_2") + StartConversation(conversation, NPC, Spawn, "I don't recognize you, newcomer, but welcome. I'm Arrin, the camp provisioner. Who are you?") + elseif GetQuestStep(Spawn, CrustoseRemoval) == 1 then + PlayFlavor(NPC, "", "It's a good thing I sent you after lichen and not lycan!", "chuckle", 1689589577, 4560189, Spawn) + elseif GetQuestStep(Spawn, CrustoseRemoval) == 2 then + PlayFlavor(NPC, "yasha_redblade/halas/pilgrims_landing/redblade_014.mp3", "", "", 2562189235, 2582498054, Spawn) + AddConversationOption(conversation, "What are you going to do with the crustose spore samples?", "Quest2Chat_1") + StartConversation(conversation, NPC, Spawn, "I see you were successful, " .. GetName(Spawn) .. ". That is great news!") + elseif HasCompletedQuest(Spawn, CrustoseRemoval) and HasQuest(Spawn, RepellingCritters) == false and HasCompletedQuest(Spawn, RepellingCritters) == false then + PlayFlavor(NPC, "arrin_clelland/halas/pilgrims_landing/clelland_010.mp3", "", "", 2177024399, 2827013799, Spawn) + AddConversationOption(conversation, "What are you going to do with the crustose spore samples?", "Quest2Chat_1") + StartConversation(conversation, NPC, Spawn, "You certainly helped us by getting those crustose spore samples, " .. GetName(Spawn) .. ".") + elseif GetQuestStep(Spawn, RepellingCritters) == 1 then + if HasItem(Spawn, 45806) == false then + SummonItem(Spawn, 45806, 1) + end + AddConversationOption(conversation, "Me too.") + AddConversationOption(conversation, "How do I use the crustose repellent?", "Quest2Chat_4") + StartConversation(conversation, NPC, Spawn, "I hope the crustose repellent works.") + elseif GetQuestStep(Spawn, RepellingCritters) == 2 then + PlayFlavor(NPC, "yasha_redblade/halas/pilgrims_landing/redblade_021.mp3", "", "", 1180705969, 2151107815, Spawn) + AddConversationOption(conversation, "The repellent worked great!", "Quest2Chat_5") + StartConversation(conversation, NPC, Spawn, "How did it go out there?") + elseif GetQuestStep(Spawn, RepellingCritters) == 3 then + if HasItem(Spawn, 45805) == false then + SummonItem(Spawn, 45805, 1) + end + PlayFlavor(NPC, "", "Be sure to apply enough of the crustose repellent to our barrels of foodstuff.", "nod", 1689589577, 4560189, Spawn) + elseif GetQuestStep(Spawn, RepellingCritters) == 4 then + SetStepComplete(Spawn, RepellingCritters, 4) + + PlayFlavor(NPC, "yasha_redblade/halas/pilgrims_landing/redblade_024.mp3", "", "", 117755636, 4146358523, Spawn) + AddConversationOption(conversation, "You are welcome.", "Quest3Chat_1") + StartConversation(conversation, NPC, Spawn, "Those crustose creatures sure disappeared! That will certainly help me keep mouths fed around here. Thank you, " .. GetName(Spawn) .. "!") + elseif HasCompletedQuest(Spawn, RepellingCritters) and HasCompletedQuest(Spawn, ScragglyFoodstuffs) == false and HasQuest(Spawn, ScragglyFoodstuffs) == false then + Quest3Chat_1(NPC, Spawn) + elseif GetQuestStep(Spawn, ScragglyFoodstuffs) == 1 then + PlayFlavor(NPC, "", "Not much wants to grow in such an unforgiving environment, but hopefully you will find a few scraggly shrubs growing on the windy cliffs overlooking the sea, northeast of me.", "nod", 1689589577, 4560189, Spawn) + elseif GetQuestStep(Spawn, ScragglyFoodstuffs) == 2 then + PlayFlavor(NPC, "arrin_clelland/halas/pilgrims_landing/clelland_006.mp3", "", "", 1163105313, 2486934582, Spawn) + AddConversationOption(conversation, "I was.", "Quest3Chat_3") + StartConversation(conversation, NPC, Spawn, "Not much wants to grow in such an unforgiving environment, but I hope that you were able to find us a few edible items to add to our stores, " .. GetName(Spawn) .. ".") + elseif HasCompletedQuest(Spawn, ScragglyFoodstuffs) and HasCompletedQuest(Spawn, FrigidFishing) == false and HasQuest(Spawn, FrigidFishing) == false then + Quest4Chat_1(NPC, Spawn) + elseif GetQuestStep(Spawn, FrigidFishing) == 1 then + PlayFlavor(NPC, "", "The Iceclad cod are too smart for lures or nets, but they should offer you little challenge in a fight.", "agree", 1689589577, 4560189, Spawn) + elseif GetQuestStep(Spawn, FrigidFishing) == 2 then + PlayFlavor(NPC, "arrin_clelland/halas/pilgrims_landing/clelland_012.mp3", "", "", 2983925092, 3211744371, Spawn) + AddConversationOption(conversation, "I'm not cleaning them though.", "Quest4Chat_3") + StartConversation(conversation, NPC, Spawn, "You've returned, and with an arm full of fresh fish for us, " .. GetName(Spawn) .. ". That's wonderful!") + elseif HasCompletedQuest(Spawn, FrigidFishing) then + PlayFlavor(NPC, "", "Thank you for all of your help. Truly, you have been sent to us by the gods!", "thanks", 1689589577, 4560189, Spawn) + end +end + +function Quest1Chat_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "arrin_clelland/halas/pilgrims_landing/clelland_001.mp3", "", "", 316593235, 3019636341, Spawn) + AddConversationOption(conversation, "My boat was attacked and destroyed by the orcs, apparently.", "Quest1Chat_3") + StartConversation(conversation, NPC, Spawn, "That was a great feat, I'm telling you! So, what happened, " .. GetName(Spawn) .. "?") +end + +function Quest1Chat_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "arrin_clelland/halas/pilgrims_landing/clelland_002.mp3", "", "", 364246106, 545315196, Spawn) + AddConversationOption(conversation, "Me too.", "Quest1Chat_4") + StartConversation(conversation, NPC, Spawn, "Ah, that does explain how you ended up here. They've been trying to stop any and all ships from docking on Erollis and providing more forces to New Halas. I'm glad that you survived.") +end + +function Quest1Chat_4(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "arrin_clelland/halas/pilgrims_landing/clelland_003.mp3", "", "", 3988738726, 2897027247, Spawn) + AddConversationOption(conversation, "You don't have any food?", "Quest1Chat_5") + AddConversationOption(conversation, "Well, keep thinking warm thoughts. Goodbye.") + StartConversation(conversation, NPC, Spawn, "Of course that doesn't mean the hard part is over, mind you. I'd say you've jumped out of the frying pan to land in the fire, but that just reminds me how nice it would be to have food and a warm fire.") +end + +function Quest1Chat_5(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "arrin_clelland/halas/pilgrims_landing/clelland_004.mp3", "", "", 684238252, 3234255296, Spawn) + AddConversationOption(conversation, "I can help you.", "Quest1Chat_6") + AddConversationOption(conversation, "Good luck with that.") + StartConversation(conversation, NPC, Spawn, "I have some, sure, but it's not fit for man or beast, anymore. Bothersome, little lichen creatures keep breaking into our stores and spoiling them.") +end + +function Quest1Chat_6(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "arrin_clelland/halas/pilgrims_landing/clelland_005.mp3", "", "", 4016452199, 1810004622, Spawn) + AddConversationOption(conversation, "Right away!", "OfferCrustoseRemoval") + AddConversationOption(conversation, "I refuse to squish fungus men! Goodbye.") + StartConversation(conversation, NPC, Spawn, "I would appreciate it, " .. GetName(Spawn) .. ". Slay any of the crustose defenders or sporetenders you find on the western side of the isle in search of spore samples. They congregate there amongst the big stones. Return to me when you have done this.") +end + +function Quest2Chat_1(NPC, Spawn) + if HasCompletedQuest(Spawn, CrustoseRemoval) == false then + SetStepComplete(Spawn, CrustoseRemoval, 2) + end + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "yasha_redblade/halas/pilgrims_landing/redblade_015.mp3", "", "", 2583587651, 4014807200, Spawn) + AddConversationOption(conversation, "I like your thinking!", "Quest2Chat_2") + AddConversationOption(conversation, "But killing them is more enjoyable.", "Quest2Chat_3") + StartConversation(conversation, NPC, Spawn, "We are going to use the crustose spore samples to create a repellent against the little spoilers. There will be no need to kill them if we can just make them stay away.") +end + +function Quest2Chat_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "yasha_redblade/halas/pilgrims_landing/redblade_017.mp3", "", "", 2609708421, 904219877, Spawn) + AddConversationOption(conversation, "Sure thing.", "OfferRepellingCritters") + AddConversationOption(conversation, "How do I use the crustose repellent?", "Quest2Chat_4") + AddConversationOption(conversation, "On second thought, maybe not.") + StartConversation(conversation, NPC, Spawn, "Thanks. Now take this repellent potion and apply it on crustose sporetenders. They are the ones spreading their spores around. I hope to Marr that they shuffle their stems away from here! Be sure to use it on a good number of different ones so that we are sure of its effects.") +end + +function Quest2Chat_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "yasha_redblade/halas/pilgrims_landing/redblade_018.mp3", "", "", 3283115264, 905683886, Spawn) + AddConversationOption(conversation, "I like your thinking!", "Quest2Chat_2") + StartConversation(conversation, NPC, Spawn, "Perhaps, but I would rather you be able to turn your fighting skills on more challenging foes, like those blasted orcs that are attacking the camp here.") +end + +function Quest2Chat_4(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "yasha_redblade/halas/pilgrims_landing/redblade_019.mp3", "", "", 2496773416, 2201749960, Spawn) + AddConversationOption(conversation, "I'll remember that.", "OfferRepellingCritters") + StartConversation(conversation, NPC, Spawn, "Ah, Good question! Open your inventory and you will find it. You can either equip it, or you can choose to use it directly from your inventory, but either way you have to target a crustose sporetender first. Then right click on the object and choose 'Use.' This will spread the repellent on your target.") +end + +function Quest2Chat_5(NPC, Spawn) + SetStepComplete(Spawn, RepellingCritters, 2) + + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "yasha_redblade/halas/pilgrims_landing/redblade_022.mp3", "", "", 457686629, 137846411, Spawn) + AddConversationOption(conversation, "I'll get right on it.") + AddConversationOption(conversation, "Where are the provisions?", "Quest2Chat_6") + StartConversation(conversation, NPC, Spawn, "That is a relief! Now apply it to our provisions right here and keep the bothersome creatures away from them!") +end + +function Quest2Chat_6(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "yasha_redblade/halas/pilgrims_landing/redblade_023.mp3", "", "", 2487757767, 4041358970, Spawn) + AddConversationOption(conversation, "I will get right on it!") + StartConversation(conversation, NPC, Spawn, "They are the barrels here, northwest of me.") +end + +function Quest3Chat_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "arrin_clelland/halas/pilgrims_landing/clelland_005.mp3", "", "", 4016452199, 1810004622, Spawn) + AddConversationOption(conversation, "What can I do for you?", "Quest3Chat_2") + AddConversationOption(conversation, "Unfortunately, I am too busy right now.") + StartConversation(conversation, NPC, Spawn, "Say, I could use your help with replenishing those barrels now that you've removed the lichen creatures.") +end + +function Quest3Chat_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "arrin_clelland/halas/pilgrims_landing/clelland_005.mp3", "", "", 4016452199, 1810004622, Spawn) + AddConversationOption(conversation, "I'll gather them for you.", "OfferScragglyFoodstuffs") + AddConversationOption(conversation, "I'm more of a hunter, not a gatherer.") + StartConversation(conversation, NPC, Spawn, "There are some rather scraggly looking shrubs that grow on the windy cliffs overlooking the sea, northeast of here. Take the path behind me, and you can't miss them. Their tubers aren't very appetizing, but they are rich in nutrition.") +end + +function Quest3Chat_3(NPC, Spawn) + SetStepComplete(Spawn, ScragglyFoodstuffs, 2) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "arrin_clelland/halas/pilgrims_landing/clelland_007.mp3", "", "", 256610018, 4036678874, Spawn) + AddConversationOption(conversation, "You're welcome. ", "Quest4Chat_1") + AddConversationOption(conversation, "Can I help you with anything else?", "Quest4Chat_1") + StartConversation(conversation, NPC, Spawn, "Oh, that's better than I would have hoped! Thank you!") +end + +function Quest4Chat_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "arrin_clelland/halas/pilgrims_landing/clelland_008.mp3", "", "", 2456971105, 1721744123, Spawn) + AddConversationOption(conversation, "Yeah, I can do that.", "Quest4Chat_2") + AddConversationOption(conversation, "Oh, sorry. That isn't really my thing.") + StartConversation(conversation, NPC, Spawn, "May I ask another favor of you? I was hoping you might be keen on getting us some fresh fish, too.") +end + +function Quest4Chat_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "arrin_clelland/halas/pilgrims_landing/clelland_011.mp3", "", "", 3182846019, 423433267, Spawn) + AddConversationOption(conversation, "That's no problem.", "OfferFrigidFishing") + StartConversation(conversation, NPC, Spawn, "It would help us a great deal. You'll find the Iceclad cod surrounding this island within the freezing waters. They are not enticed by lures or nets, so you'll have to fight them.") +end + +function Quest4Chat_3(NPC, Spawn) + SetStepComplete(Spawn, FrigidFishing, 2) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "arrin_clelland/halas/pilgrims_landing/clelland_013.mp3", "", "", 1935077662, 3458701305, Spawn) + AddConversationOption(conversation, "You're welcome.") + AddConversationOption(conversation, "On to other adventures!") + StartConversation(conversation, NPC, Spawn, "Ha ha ha! That's fine! I can do that. I have asked too much of you, as it stands. One as powerful and brave as you have bigger adventures and challenges to meet. Thank you again!") +end + +function OfferCrustoseRemoval(NPC, Spawn) + if HasCompletedQuest(Spawn, CrustoseRemoval) == false then + OfferQuest(NPC, Spawn, CrustoseRemoval) + end +end + +function OfferRepellingCritters(NPC, Spawn) + if HasCompletedQuest(Spawn, CrustoseRemoval) then + OfferQuest(NPC, Spawn, RepellingCritters) + end +end + +function OfferScragglyFoodstuffs(NPC, Spawn) + if HasCompletedQuest(Spawn, RepellingCritters) then + OfferQuest(NPC, Spawn, ScragglyFoodstuffs) + end +end + +function OfferFrigidFishing(NPC, Spawn) + if HasCompletedQuest(Spawn, ScragglyFoodstuffs) then + OfferQuest(NPC, Spawn, FrigidFishing) + end +end diff --git a/server/SpawnScripts/FrostfangSea/AssistantWardenBjerne.lua b/server/SpawnScripts/FrostfangSea/AssistantWardenBjerne.lua new file mode 100644 index 000000000..99d8c195a --- /dev/null +++ b/server/SpawnScripts/FrostfangSea/AssistantWardenBjerne.lua @@ -0,0 +1,29 @@ +--[[ + Script Name : SpawnScripts/FrostfangSea/AssistantWardenBjerne.lua + Script Purpose : Assistant Warden Bjerne + Script Author : theFoof + Script Date : 2013.09.26 + Script Notes : +--]] + +require"SpawnScripts/FrostfangSea/halas_proximity_cheer" + +function spawn(NPC) + SetPlayerProximityFunction(NPC, 10, "ProxCheer") +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + + local choice = math.random(1,2) + if choice == 1 then + PlayFlavor(NPC, "", "We've got the most spacious housing in all of Norrath!", "hello", 1689589577, 4560189, Spawn) + elseif choice == 2 then + PlayFlavor(NPC, "", "Step up and take a tour of our accommodations.", "hello", 1689589577, 4560189, Spawn) + end +end + diff --git a/server/SpawnScripts/FrostfangSea/BadenMoonheart.lua b/server/SpawnScripts/FrostfangSea/BadenMoonheart.lua new file mode 100644 index 000000000..7f435c9a3 --- /dev/null +++ b/server/SpawnScripts/FrostfangSea/BadenMoonheart.lua @@ -0,0 +1,69 @@ +--[[ + Script Name : SpawnScripts/FrostfangSea/BadenMoonheart.lua + Script Purpose : monk trainer + Script Author : theFoof + Script Date : 2013.9.24 + Script Notes : +--]] + +local MONK = 6 + +function spawn(NPC) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + if GetClass(Spawn) == MONK then + conversation = CreateConversation() + PlayFlavor(NPC, "", "", "hello", 0, 0, Spawn) + AddConversationOption(conversation, "What advice do you have for a another monk?", "MonkChat1") + AddConversationOption(conversation, "It does, doesn't it? Good bye.") + StartConversation(conversation, NPC, Spawn, "You need not tell me that you are a fellow. monk. I can sense the aura of serenity that envelopes you, my friend.") + else + PlayFlavor(NPC, "", "May your path be clear, friend.", "hello", 0, 0, Spawn) + end +end + +function MonkChat1(NPC, Spawn) + conversation = CreateConversation() + FaceTarget(NPC, Spawn) + + AddConversationOption(conversation, "That's useful to know!", "MonkChat2") + StartConversation(conversation, NPC, Spawn, "If you find items that add to your strength or stamina, be sure to get them! Strength increases the amount of damage your attacks can inflict on others and raises your ability to carry heavy weight. Your stamina affects your health. This is crucial.") +end + +function MonkChat2(NPC, Spawn) + conversation = CreateConversation() + FaceTarget(NPC, Spawn) + + AddConversationOption(conversation, "That's good to know.", "MonkChat3") + StartConversation(conversation, NPC, Spawn, "But first and foremost, you should know the power you wield. We focus our minds and bodies through tranquility and subtleness in order to withstand attacks and reduce the amount of damage inflicted upon us. We can also use it to purge our bodies of ailments, move invisibly past an enemy or even fool opponents into believing us dead.") +end + +function MonkChat3(NPC, Spawn) + conversation = CreateConversation() + FaceTarget(NPC, Spawn) + + AddConversationOption(conversation, "That will be useful!", "MonkChat4") + StartConversation(conversation, NPC, Spawn, "But our discipline offers a great deal more than just defense. Our attacks are formidable and swift, as well! This allows us to often hold a foe's attention while others attack it.") +end + +function MonkChat4(NPC, Spawn) + conversation = CreateConversation() + FaceTarget(NPC, Spawn) + + AddConversationOption(conversation, "That's interesting.", "MonkChat5") + StartConversation(conversation, NPC, Spawn, "And although we excel at hand to hand combat, some of our brethren wield staves or hammers. Such weapons are simply an extension of yourself and can be equally effective at inflicting damage or deflecting an attacker's blade.") +end + +function MonkChat5(NPC, Spawn) + conversation = CreateConversation() + FaceTarget(NPC, Spawn) + + AddConversationOption(conversation, "Thank you for the advice.") + StartConversation(conversation, NPC, Spawn, "And protect yourself as best you can in leather, " .. GetName(Spawn) .. ". An encumbering suit of armor would only hinder you and interfere with our superior hand to hand combat.") +end \ No newline at end of file diff --git a/server/SpawnScripts/FrostfangSea/BarkerGordon.lua b/server/SpawnScripts/FrostfangSea/BarkerGordon.lua new file mode 100644 index 000000000..120aeb770 --- /dev/null +++ b/server/SpawnScripts/FrostfangSea/BarkerGordon.lua @@ -0,0 +1,130 @@ +--[[ + Script Name : SpawnScripts/FrostfangSea/BarkerGordon.lua + Script Purpose : Barker Gordon + Script Author : theFoof + Script Date : 2013.09.02 + Script Notes : +--]] + +local HamBeans = 89 + +function spawn(NPC) + ProvidesQuest(NPC, HamBeans) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + if not HasCompletedQuest(Spawn, HamBeans) and not HasQuest(Spawn, HamBeans) then + PlayFlavor(NPC, "barker_gordon/halas/new_halas/barker_gordon/barker_gordon_001.mp3", "", "", 1186893886, 14843439, Spawn) + AddConversationOption(conversation, "Hello Barker, I'm " .. GetName(Spawn) .. ".", "Quest1Chat_1") + StartConversation(conversation, NPC, Spawn, "Good day to you, stranger! I am Barker Gordon, a native of New Halas.") + elseif GetQuestStep(Spawn, HamBeans) == 1 or GetQuestStep(Spawn, HamBeans) == 2 then + AddConversationOption(conversation, "No, not yet. Where can I find the ingredients again?", "Quest1Chat_6") + StartConversation(conversation, NPC, Spawn, "Have you done the feed and killed Bentor and picked up my order of beans?") + elseif GetQuestStep(Spawn, HamBeans) == 3 then + AddConversationOption(conversation, "I have. Here is the ham and beans.", "Quest1Chat_7") + StartConversation(conversation, NPC, Spawn, "Have you done the feed and killed Bentor and picked up my order of beans?") + elseif GetQuestStep(Spawn, HamBeans) == 4 then + PlayFlavor(NPC, "", "Now try a piece of my ham and beans, it's very good!", "beckon", 0, 0, Spawn) + else + PlayFlavor(NPC, "", "Thanks again for your help!", "thanks", 0, 0, Spawn) + end +end + +function Quest1Chat_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "barker_gordon/halas/new_halas/barker_gordon/barker_gordon_003.mp3", "", "", 1426385889, 3817885268, Spawn) + AddConversationOption(conversation, "What kind of work?", "Quest1Chat_2") + StartConversation(conversation, NPC, Spawn, "Could I interest you in some work?") +end + +function Quest1Chat_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "barker_gordon/halas/new_halas/barker_gordon/barker_gordon_004.mp3", "", "", 3604382854, 1944496280, Spawn) + AddConversationOption(conversation, "So what's the problem?", "Quest1Chat_3") + StartConversation(conversation, NPC, Spawn, "I've been asked to make my recipe for ham and halasian beans for the New Halas City Festival. We want to impress all of our visitors!") +end + +function Quest1Chat_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "barker_gordon/halas/new_halas/barker_gordon/barker_gordon_005.mp3", "", "", 2169381971, 1634343888, Spawn) + AddConversationOption(conversation, "So you want me to slaughter your pet pig?", "Quest1Chat_4") + StartConversation(conversation, NPC, Spawn, "I've been raising a pig just for this occasion. I would normally slaughter him myself, but this time I've become too attached to him. I fear that I would not have the strength to see a clean cut through.") +end + +function Quest1Chat_4(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "barker_gordon/halas/new_halas/barker_gordon/barker_gordon_006.mp3", "", "", 1408333344, 155634991, Spawn) + AddConversationOption(conversation, "Well, if it will help New Halas impress the rest of Norrath, I'll do it.", "Quest1Chat_5") + AddConversationOption(conversation, "I'm not slaughtering your pig for you.") + StartConversation(conversation, NPC, Spawn, "I knew ye would understand! I should have listened to others and not named him.") +end + +function Quest1Chat_5(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "barker_gordon/halas/new_halas/barker_gordon/barker_gordon_007.mp3", "", "", 4093429519, 442079211, Spawn) + AddConversationOption(conversation, "You're right. You shouldn't have named him.", "OfferHamBeans") + StartConversation(conversation, NPC, Spawn, "I promise that it will be worth it! My pig's name is Bentor the Mighty. Bentor is in the pen next to the mender's workshop, The Stone Hammer, up in New Halas proper.") +end + +function Quest1Chat_6(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "Thanks Barker. I'll return with the ingredients.") + StartConversation(conversation, NPC, Spawn, "The halasian beans at the shaman hut called Pilgrims' Hearth in southwest New Halas. Bentor the Mighty is in the pen next to the mender's workshop, The Stone Hammer, in New Halas.") +end + +function Quest1Chat_7(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "Are you going to be okay?", "Quest1Chat_8") + StartConversation(conversation, NPC, Spawn, "Oh, my Bentor! What a good pig you were!") +end + +function Quest1Chat_8(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "Well, okay then.", "Quest1Chat_9") + StartConversation(conversation, NPC, Spawn, "I'll be fine. This is the way of things, I know better than to get attached to them. It's just me old age.") +end + +function Quest1Chat_9(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "I must admit it smells good.", "Quest1Chat_10") + StartConversation(conversation, NPC, Spawn, "Here, I'll get right to work prepping the beans and cooking the ham. Just sit right there, it'll be done soon enough.") +end + +function Quest1Chat_10(NPC, Spawn) + AddSpawnAccess(GetSpawn(NPC, 4701844), Spawn) + SetStepComplete(Spawn, HamBeans, 3) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "Okay, I'll grab myself of a slice of ham with some beans.") + StartConversation(conversation, NPC, Spawn, "Done! Barker's ham and beans! Go ahead, try a slice. I've salted the rest of the meat so that I can use it for the City Festival.") +end + +function OfferHamBeans(NPC, Spawn) + OfferQuest(NPC, Spawn, HamBeans) +end \ No newline at end of file diff --git a/server/SpawnScripts/FrostfangSea/BattlemasterGolben.lua b/server/SpawnScripts/FrostfangSea/BattlemasterGolben.lua new file mode 100644 index 000000000..4698fee6c --- /dev/null +++ b/server/SpawnScripts/FrostfangSea/BattlemasterGolben.lua @@ -0,0 +1,37 @@ +--[[ + Script Name : SpawnScripts/FrostfangSea/BattlemasterGolben.lua + Script Purpose : Battlemaster Golben + Script Author : theFoof + Script Date : 2013.06.01 + Script Notes : +--]] +local DemandSupplies = 45 + +function spawn(NPC) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + if HasQuest(Spawn, DemandSupplies) and GetQuestStep(Spawn, DemandSupplies) < 3 then + conversation = CreateConversation() + + PlayFlavor(NPC, "battlemaster_golben/halas/great_shelf/battlemaster_golben/battlemaster_golben001.mp3", "", "", 62773900, 972998516, Spawn) + AddConversationOption(conversation, "Yes, here are the supplies.", "Chat") + AddConversationOption(conversation, "I must be going.") + StartConversation(conversation, NPC, Spawn, "I've got no time and even less patience. Did Rockbreaker send ye?") + end +end + +function Chat(NPC, Spawn) + SetStepComplete(Spawn, DemandSupplies, 2) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "battlemaster_golben/halas/great_shelf/battlemaster_golben/battlemaster_golben002.mp3", "", "", 2225057385, 3178461226, Spawn) + AddConversationOption(conversation, "Glad to help.") + StartConversation(conversation, NPC, Spawn, "Thank Brell! Our blades are dull and our quivers empty. These new weapons will allow us to keep the orcs at bay awhile longer.") +end \ No newline at end of file diff --git a/server/SpawnScripts/FrostfangSea/BattlepriestHerga.lua b/server/SpawnScripts/FrostfangSea/BattlepriestHerga.lua new file mode 100644 index 000000000..9e91a1d5e --- /dev/null +++ b/server/SpawnScripts/FrostfangSea/BattlepriestHerga.lua @@ -0,0 +1,626 @@ +--[[ + Script Name : SpawnScripts/FrostfangSea/BattlepriestHerga.lua + Script Purpose : Battlepriest Herga + Script Author : theFoof + Script Date : 2013.06.04 + Script Notes : +--]] + +local LooseningGrip = 51 + +local TheCharge = 52 + +local SiegeOver = 53 + +local ForsakingGrave = 54 + +local AllRemains = 55 + +function spawn(NPC) + ProvidesQuest(NPC, LooseningGrip) + ProvidesQuest(NPC, TheCharge) + ProvidesQuest(NPC, SiegeOver) + ProvidesQuest(NPC, ForsakingGrave) + ProvidesQuest(NPC, AllRemains) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + if not HasCompletedQuest(Spawn, LooseningGrip) and not HasQuest(Spawn, LooseningGrip) then + PlayFlavor(NPC, "battlepriest_herga/halas/great_shelf/battlepriest_herga/battlepriest_herga001.mp3", "", "", 2876924371, 439822818, Spawn) + AddConversationOption(conversation, "Gadzooks! You're a ghost! And I'm leaving now, goodbye!") + AddConversationOption(conversation, "I am " .. GetName(Spawn) .. ", and I'm looking for work, not a story. Give me a task to do!", "OfferLooseningGrip") + AddConversationOption(conversation, "I am " .. GetName(Spawn) .. ". Who are you, and what is your story?", "Quest1Chat_1") + StartConversation(conversation, NPC, Spawn, "Who approaches? Who dares to disturb the Battlepriest?") + elseif GetQuestStep(Spawn, LooseningGrip) == 1 then + PlayFlavor(NPC, "", "Remove the claws. Loosen their grip upon our land.", "sarcasm", 0, 0, Spawn) + elseif GetQuestStep(Spawn, LooseningGrip) == 2 then + PlayFlavor(NPC, "battlepriest_herga/halas/great_shelf/battlepriest_herga/battlepriest_herga011.mp3", "", "", 3711122888, 4098682136, Spawn) + AddConversationOption(conversation, "I cut the lines tethering the spears to Ry'Gorr Isle.", "Quest1Chat_8") + AddConversationOption(conversation, "I have done as you asked.", "Quest1Chat_8") + StartConversation(conversation, NPC, Spawn, "I sense that the Ry'Gorr's grip upon our land has lessened.") + elseif HasCompletedQuest(Spawn, LooseningGrip) and not HasCompletedQuest(Spawn, TheCharge) and not HasQuest(Spawn, TheCharge) then + Quest2Chat_1(NPC, Spawn) + elseif HasQuest(Spawn, TheCharge) and GetQuestStep(Spawn, TheCharge) < 4 then + PlayFlavor(NPC, "", "The orcs cling to their foothold on the floating rock named Ry'Gorr isle, west of Erollis.", "agree", 0, 0, Spawn) + elseif GetQuestStep(Spawn, TheCharge) == 4 then + PlayFlavor(NPC, "battlepriest_herga/halas/great_shelf/battlepriest_herga/battlepriest_herga019.mp3", "", "", 3475035366, 1640801191, Spawn) + AddConversationOption(conversation, "I have defeated the orcs, as promised.", "Quest2Chat_6") + AddConversationOption(conversation, "Are you finishing the story you began earlier?", "Quest2Chat_6") + StartConversation(conversation, NPC, Spawn, "The memories of that battle are as clear as if they'd happened yesterday. And echoes of that battle resonate to this day.") + elseif HasCompletedQuest(Spawn, TheCharge) and not HasCompletedQuest(Spawn, SiegeOver) and not HasQuest(Spawn, SiegeOver) then + Quest3Chat_1(NPC, Spawn) + elseif GetQuestStep(Spawn, SiegeOver) == 1 then + PlayFlavor(NPC, "", "The orcs have manufactured crude ballistae, and aimed them at our shores.", "", 0, 0, Spawn) + elseif GetQuestStep(Spawn, SiegeOver) == 2 then + PlayFlavor(NPC, "battlepriest_herga/halas/great_shelf/battlepriest_herga/battlepriest_herga030.mp3", "", "", 1190652772, 2390505398, Spawn) + AddConversationOption(conversation, "I destroyed the ballistae, as promised.", "Quest3Chat_4") + AddConversationOption(conversation, "It sounds like you're continuing your story. What happened next?", "Quest3Chat_4") + AddConversationOption(conversation, "The siege weapons have been eliminated.", "Quest3Chat_4") + StartConversation(conversation, NPC, Spawn, "To my surprise, I was still breathing. I crouched, unseen, behind their lines. The opportunity to scatter the orcs' formation was within my grasp.") + elseif HasCompletedQuest(Spawn, SiegeOver) and not HasCompletedQuest(Spawn, ForsakingGrave) and not HasQuest(Spawn, ForsakingGrave) then + Quest4Chat_1(NPC, Spawn) + elseif GetQuestStep(Spawn, ForsakingGrave) == 1 then + PlayFlavor(NPC, "", "The Ry'Gorr skeletons long for no repose or reward. They simply exist to serve.", "agree", 0, 0, Spawn) + elseif GetQuestStep(Spawn, ForsakingGrave) == 2 then + PlayFlavor(NPC, "battlepriest_herga/halas/great_shelf/battlepriest_herga/battlepriest_herga045.mp3", "", "", 776768426, 2553961972, Spawn) + AddConversationOption(conversation, "I have eliminated several skeletons on the Forbidden Ossuary of Ice.", "Quest4Chat_5") + AddConversationOption(conversation, "I'd like to hear the rest of your story. What happened next?", "Quest4Chat_5") + StartConversation(conversation, NPC, Spawn, "I sense that the skeletal abominations have been destroyed.") + elseif HasCompletedQuest(Spawn, ForsakingGraves) and not HasCompletedQuest(Spawn, AllRemains) and not HasQuest(Spawn, AllRemains) then + Quest5Chat_1(NPC, Spawn) + elseif GetQuestStep(Spawn, AllRemains) == 1 then + PlayFlavor(NPC, "", "Ye would honor this Battlepriest if ye could recover her helm.", "agree", 0, 0, Spawn) + elseif GetQuestStep(Spawn, AllRemains) == 4 then + AddConversationOption(conversation, "What name would that be?", "Quest5Chat_4") + AddConversationOption(conversation, "Go on, Herga.", "Quest5Chat_4") + AddConversationOption(conversation, 'Is that name, by any chance, "lackey"?', "Quest5Chat_4") + StartConversation(conversation, NPC, Spawn, "Ye've returned with the helmet, a relic passed down by my ancestors from the days when we fought with giants. And for yer efforts, I have one final name for ye.") + elseif HasCompletedQuest(Spawn, AllRemains) then + PlayFlavor(NPC, "", "Hello again, Friend of Thurga.", "", 0, 0, Spawn) + end +end + +function Quest1Chat_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "battlepriest_herga/halas/great_shelf/battlepriest_herga/battlepriest_herga002.mp3", "", "", 3498579726, 1445907675, Spawn) + AddConversationOption(conversation, "Ah, the choke is named after you.", "Quest1Chat_2") + AddConversationOption(conversation, "That's a mouthful.", "Quest1Chat_5") + AddConversationOption(conversation, "What do you mean by 'Thrice Slain'?", "Quest1Chat_3") + AddConversationOption(conversation, "You lost me at 'Greetings.' Goodbye.") + StartConversation(conversation, NPC, Spawn, "Greetings, " .. GetName(Spawn) .. ". I am Herga: Battlepriest of the Coldain, Master Tactician, Ouster of the Orcs, Leader of the Siege Upon the Choke, and She Who Was Thrice Slain.") +end + +function Quest1Chat_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "battlepriest_herga/halas/great_shelf/battlepriest_herga/battlepriest_herga004.mp3", "", "", 446943, 1149478700, Spawn) + AddConversationOption(conversation, "What do you mean?", "Quest1Chat_3") + AddConversationOption(conversation, "I see. Words are merely symbols.", "Quest1Chat_7") + AddConversationOption(conversation, "I don't understand you. Goodbye.") + StartConversation(conversation, NPC, Spawn, "The name is unimportant. It is the deed that matters.") +end + +function Quest1Chat_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "battlepriest_herga/halas/great_shelf/battlepriest_herga/battlepriest_herga006.mp3", "", "", 2461956836, 4011637342, Spawn) + AddConversationOption(conversation, "I see...", "Quest1Chat_4") + AddConversationOption(conversation, "Ah, you're not going to tell me.", "Quest1Chat_4") + AddConversationOption(conversation, "I don't understand you. Goodbye.") + StartConversation(conversation, NPC, Spawn, "All in due time.") +end + +function Quest1Chat_4(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "battlepriest_herga/halas/great_shelf/battlepriest_herga/battlepriest_herga008.mp3", "", "", 3901524477, 2476733850, Spawn) + AddConversationOption(conversation, "I could deal with the Ry'Gorr for you.", "OfferLooseningGrip") + AddConversationOption(conversation, "Why don't you deal with the Ry'Gorr yourself?", "Quest1Chat_6") + AddConversationOption(conversation, "The troubles of your people are no problem of mine. Goodbye.") + StartConversation(conversation, NPC, Spawn, "The battle for the choke rages on. The Ry'Gorr still cling to hope and they still yearn for revenge. They cast their claws upon the mainland of Erollis. They prowl the icy plains. They trouble my people.") +end + +function Quest1Chat_5(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "battlepriest_herga/halas/great_shelf/battlepriest_herga/battlepriest_herga005.mp3", "", "", 3500318705, 1278765426, Spawn) + AddConversationOption(conversation, "Where did you get all of these names?", "Quest1Chat_3") + AddConversationOption(conversation, "Okay, okay, okay...") + StartConversation(conversation, NPC, Spawn, "Also: Champion of the Iceclad Offensive, Unwitting Pilgrim of the Lost Dwarves, She Who Shall Never Find Repose, Bear-Wrestler, Giant-Slayer, Wurm-Slayer, Bane of the Unliving, Explorer of the .. GetName(Spawn) .. of Veeshan...") +end + +function Quest1Chat_6(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "battlepriest_herga/halas/great_shelf/battlepriest_herga/battlepriest_herga009.mp3", "", "", 806621839, 625277708, Spawn) + AddConversationOption(conversation, "Ah, you're barely here. Well, I could deal with the Ry'Gorr.", "OfferLooseningGrip") + AddConversationOption(conversation, "I refuse to do your bidding. Goodbye.") + AddConversationOption(conversation, "I'm not interested in helping a ghost.") + StartConversation(conversation, NPC, Spawn, "My grasp upon this world is tenuous. I can no longer interfere personally.") +end + +function Quest1Chat_7(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "battlepriest_herga/halas/great_shelf/battlepriest_herga/battlepriest_herga007.mp3", "", "", 563806533, 3464673073, Spawn) + AddConversationOption(conversation, "And what consideration would that be?", "Quest1Chat_3") + AddConversationOption(conversation, "I must be going.") + StartConversation(conversation, NPC, Spawn, "Aye. It's what the symbol represents that deserves consideration.") +end + +function Quest1Chat_8(NPC, Spawn) + SetStepComplete(Spawn, LooseningGrip, 2) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "battlepriest_herga/halas/great_shelf/battlepriest_herga/battlepriest_herga012.mp3", "", "", 2283183763, 3194399424, Spawn) + AddConversationOption(conversation, "What else must be done? ", "Quest2Chat_1") + AddConversationOption(conversation, "Even a declawed snow leopard has fangs.", "Quest2Chat_1") + StartConversation(conversation, NPC, Spawn, "Ye've done well, " .. GetName(Spawn) .. ", but the orcs are nothing if not tenacious.") +end + +function Quest2Chat_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "battlepriest_herga/halas/great_shelf/battlepriest_herga/battlepriest_herga013.mp3", "", "", 2592535922, 910199991, Spawn) + AddConversationOption(conversation, "Oh, I'm a Clawrender now?", "Quest2Chat_2") + AddConversationOption(conversation, "I would be happy to be your champion, Herga.", "Quest2Chat_4") + AddConversationOption(conversation, "Don't presume to name me.") + StartConversation(conversation, NPC, Spawn, GetName(Spawn) .. ", Clawrender, will ye be my champion again?") +end + +function Quest2Chat_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "battlepriest_herga/halas/great_shelf/battlepriest_herga/battlepriest_herga014.mp3", "", "", 1089936534, 3828755008, Spawn) + AddConversationOption(conversation, "What's the difference?", "Quest2Chat_3") + AddConversationOption(conversation, "Was there something you wanted me to do? ", "Quest2Chat_4") + AddConversationOption(conversation, "I must be going.") + StartConversation(conversation, NPC, Spawn, "Yes. Ye carry this name with you even if others cannot see it, and even if ye yerself do not know it.") +end + +function Quest2Chat_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "battlepriest_herga/halas/great_shelf/battlepriest_herga/battlepriest_herga016.mp3", "", "", 364121145, 3220691624, Spawn) + AddConversationOption(conversation, "I look forward to it.", "Quest2Chat_4") + AddConversationOption(conversation, "Must you always speak in riddles? ", "Quest2Chat_4") + AddConversationOption(conversation, "I don't feel like being lectured right now.") + StartConversation(conversation, NPC, Spawn, "Ye'll learn the difference. All in due time.") +end + +function Quest2Chat_4(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "battlepriest_herga/halas/great_shelf/battlepriest_herga/battlepriest_herga015.mp3", "", "", 706935519, 853655924, Spawn) + AddConversationOption(conversation, "What happened next?", "Quest2Chat_5") + AddConversationOption(conversation, "Tell me more.", "Quest2Chat_5") + AddConversationOption(conversation, "War stories bore me. Goodbye.") + StartConversation(conversation, NPC, Spawn, "There was a great battle here. 'Twas a clash of epic proportions. We surrounded the orcish horde. We herded them onto the narrow precipice of the choke, overlooking the ocean. ") +end + +function Quest2Chat_5(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "battlepriest_herga/halas/great_shelf/battlepriest_herga/battlepriest_herga017.mp3", "", "", 4269378925, 1349634261, Spawn) + AddConversationOption(conversation, "What do you mean?", "OfferTheCharge") + AddConversationOption(conversation, "Was this the first time you were killed?", "OfferTheCharge") + AddConversationOption(conversation, "Do you mean that you were the first to die?", "OfferTheCharge") + AddConversationOption(conversation, "This history lesson is over. I'm out of here.") + StartConversation(conversation, NPC, Spawn, "One final charge was all that was necessary to drive them off the edge. I led that charge, and for my valor I was first-slain.") +end + +function Quest2Chat_6(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "battlepriest_herga/halas/great_shelf/battlepriest_herga/battlepriest_herga020.mp3", "", "", 2112568660, 3269874473, Spawn) + AddConversationOption(conversation, "Hardly a fair fight.", "Quest2Chat_7") + AddConversationOption(conversation, "What do you mean by 'clinging to life'?", "Quest2Chat_7") + AddConversationOption(conversation, "I must be going. Goodbye.") + StartConversation(conversation, NPC, Spawn, "Clinging. Clinging to life. I led the final charge against the orcs, and for my valor I was the first to die. I was cut down, slaughtered, by the blades of a dozen grinning blue monsters. ") +end + +function Quest2Chat_7(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "battlepriest_herga/halas/great_shelf/battlepriest_herga/battlepriest_herga021.mp3", "", "", 1415485990, 2536139437, Spawn) + AddConversationOption(conversation, "Ah, that's when you were killed in the battle of the choke.", "Quest2Chat_8") + AddConversationOption(conversation, "Is this where the story ends?", "Quest2Chat_8") + AddConversationOption(conversation, "I must be going. Goodbye.") + StartConversation(conversation, NPC, Spawn, "As I fell, the Ry'Gorr forces roared in unison: a triumphant guttural shriek. Impassioned by the sight of my death, they met our charge head on, and the last thing I saw as my vision faded was the orcs rushing forth.") +end + +function Quest2Chat_8(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "battlepriest_herga/halas/great_shelf/battlepriest_herga/battlepriest_herga022.mp3", "", "", 3973009160, 332773140, Spawn) + AddConversationOption(conversation, "Is this a description of the afterlife?", "Quest2Chat_9") + AddConversationOption(conversation, "Did you succeed in regaining your consciousness?", "Quest2Chat_9") + AddConversationOption(conversation, "I must be going. Goodbye.") + StartConversation(conversation, NPC, Spawn, "The din of battle faded, and my world went black. Yet, I was not done yet. I fought to return to consciousness. I swam through a murky void... kicking, thrashing, and struggling to find the surface of a blind bubbling sea. It felt like an age passed.") +end + +function Quest2Chat_9(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "battlepriest_herga/halas/great_shelf/battlepriest_herga/battlepriest_herga023.mp3", "", "", 478728406, 1497661248, Spawn) + AddConversationOption(conversation, "The orcs had forgotten about you?", "Quest2Chat_10") + AddConversationOption(conversation, "I must be going. Goodbye.") + StartConversation(conversation, NPC, Spawn, "And suddenly, the world snapped back into focus. I found myself back on the field of battle, covered in snow and blood. ") +end + +function Quest2Chat_10(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "battlepriest_herga/halas/great_shelf/battlepriest_herga/battlepriest_herga024.mp3", "", "", 2297746531, 802741759, Spawn) + AddConversationOption(conversation, "You were not yet slain?", "Quest2Chat_11") + AddConversationOption(conversation, "You were clinging to life.", "Quest2Chat_11") + AddConversationOption(conversation, "I must be going. Goodbye.") + StartConversation(conversation, NPC, Spawn, "The orcs had trampled over my broken body and were locked in battle with my coldain. I pulled myself to my feet. I drew breath again. The fight raged on, and I was alive.") +end + +function Quest2Chat_11(NPC, Spawn) + SetStepComplete(Spawn, TheCharge, 4) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "battlepriest_herga/halas/great_shelf/battlepriest_herga/battlepriest_herga025.mp3", "", "", 509339797, 2341366756, Spawn) + AddConversationOption(conversation, "I hope you healed yourself before heading back into battle.", "Quest3Chat_1") + AddConversationOption(conversation, "You must be hard to kill.", "Quest3Chat_1") + AddConversationOption(conversation, "Sounds like the orcs were in for a surprise.", "Quest3Chat_1") + StartConversation(conversation, NPC, Spawn, "I was slain. Yet somehow I returned, clinging to life. And though my wounds were terrible, I felt nothing but fury.") +end + +function Quest3Chat_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "battlepriest_herga/halas/great_shelf/battlepriest_herga/battlepriest_herga026.mp3", "", "", 3996082713, 3335501764, Spawn) + AddConversationOption(conversation, "What do you mean?", "Quest3Chat_2") + AddConversationOption(conversation, "Make up your mind.", "Quest3Chat_2") + AddConversationOption(conversation, "This is all too confusing to follow.") + StartConversation(conversation, NPC, Spawn, "The Siege was not over... is not over.") +end + +function Quest3Chat_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "battlepriest_herga/halas/great_shelf/battlepriest_herga/battlepriest_herga027.mp3", "", "", 1946406976, 651799863, Spawn) + AddConversationOption(conversation, "What happened next?", "Quest3Chat_3") + AddConversationOption(conversation, "Did you strike at the Ry'Gorr from behind?", "Quest3Chat_3") + AddConversationOption(conversation, "I'm not even sure what you're talking about.") + StartConversation(conversation, NPC, Spawn, "I crouched, unseen, behind their lines. Their backs were to me, and they were preoccupied with the dwarves before them. The opportunity to shatter the orcs' formation was within my grasp.") +end + +function Quest3Chat_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "battlepriest_herga/halas/great_shelf/battlepriest_herga/battlepriest_herga028.mp3", "", "", 1067012984, 342549842, Spawn) + AddConversationOption(conversation, "I will take care of their siege weaponry.", "OfferSiegeOver") + AddConversationOption(conversation, "It sounds like you want me to destroy their siege weapons.", "OfferSiegeOver") + AddConversationOption(conversation, "Are you referring to the past or the present? This is too confusing.") + StartConversation(conversation, NPC, Spawn, "The bloody Siege is not over. The Ry'Gorr still lurk on the floating islets below. They have manufactured crude ballistae, and aimed them at our shores.") +end + +function Quest3Chat_4(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "battlepriest_herga/halas/great_shelf/battlepriest_herga/battlepriest_herga031.mp3", "", "", 154139562, 114017871, Spawn) + AddConversationOption(conversation, "Is this when you intervened?", "Quest3Chat_5") + AddConversationOption(conversation, "Did the coldain realize you were still alive?", "Quest3Chat_5") + AddConversationOption(conversation, "I must be going.") + StartConversation(conversation, NPC, Spawn, "My coldain were givin' it their all, but they were losing ground. We stood to lose everything we'd fought and bled for that day. ") +end + +function Quest3Chat_5(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "battlepriest_herga/halas/great_shelf/battlepriest_herga/battlepriest_herga032.mp3", "", "", 2869284176, 4042655876, Spawn) + AddConversationOption(conversation, "Please continue.", "Quest3Chat_6") + AddConversationOption(conversation, "But you were half-dead!", "Quest3Chat_6") + AddConversationOption(conversation, "I must be going.") + StartConversation(conversation, NPC, Spawn, "I hefted my trusty shield and hammer. Screamin' a battle cry to Brell, I set upon the orcs with a vengeance. I was bristlin' with a quick that I'd never experienced before.") +end + +function Quest3Chat_6(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "battlepriest_herga/halas/great_shelf/battlepriest_herga/battlepriest_herga033.mp3", "", "", 4141123345, 649777350, Spawn) + AddConversationOption(conversation, "I bet they were surprised.", "Quest3Chat_7") + AddConversationOption(conversation, "I must be going.") + StartConversation(conversation, NPC, Spawn, "They were caught completely unawares. The orcs within reach of my hammer fell before my onslaught like so many snowflakes. When they turned to see who had flanked them, their faces were aghast with horror.") +end + +function Quest3Chat_7(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "battlepriest_herga/halas/great_shelf/battlepriest_herga/battlepriest_herga034.mp3", "", "", 1128320376, 3066771275, Spawn) + AddConversationOption(conversation, "What happened next?", "Quest3Chat_8") + AddConversationOption(conversation, "The orcs must never have expected your return.", "Quest3Chat_8") + AddConversationOption(conversation, "I must be going.") + StartConversation(conversation, NPC, Spawn, "They cringed at the sight of me, certain that they'd already seen to my demise. Shrieks of fear rang out among the Ry'Gorr, and then...") +end + +function Quest3Chat_8(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "battlepriest_herga/halas/great_shelf/battlepriest_herga/battlepriest_herga035.mp3", "", "", 679495906, 2871959311, Spawn) + AddConversationOption(conversation, "Go on.", "Quest3Chat_9") + AddConversationOption(conversation, "Fortune, or the gods, smiled upon you.", "Quest3Chat_9") + AddConversationOption(conversation, "I must be going.") + StartConversation(conversation, NPC, Spawn, "And then, their lines broke. Orcs fled to either side to avoid my wrath. Fear spread through their ranks like wildfire. They scattered, and we pressed the advantage.") +end + +function Quest3Chat_9(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "battlepriest_herga/halas/great_shelf/battlepriest_herga/battlepriest_herga036.mp3", "", "", 1193017737, 3953773315, Spawn) + AddConversationOption(conversation, "You drove them off the choke?", "Quest3Chat_10") + AddConversationOption(conversation, "Ha! That'll teach the orcs!", "Quest3Chat_10") + AddConversationOption(conversation, "I must be going.") + StartConversation(conversation, NPC, Spawn, "They sought quarter from our attacks, but none was given. Our foes retreated up against the ledge of the choke, and then they spilled over it. ") +end + +function Quest3Chat_10(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "battlepriest_herga/halas/great_shelf/battlepriest_herga/battlepriest_herga037.mp3", "", "", 2443596305, 594093488, Spawn) + AddConversationOption(conversation, "So you were victorious?", "Quest3Chat_11") + AddConversationOption(conversation, "You didn't survive that battle, did you?", "Quest3Chat_11") + AddConversationOption(conversation, "I must be going.") + StartConversation(conversation, NPC, Spawn, "Scores of orcs toppled from the cliffs into the icy waters below. Our forces drove them into the ocean. In the chaos, I went over the edge with them, still swinging my hammer mid-descent.") +end + +function Quest3Chat_11(NPC, Spawn) + SetStepComplete(Spawn, SiegeOver, 2) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "battlepriest_herga/halas/great_shelf/battlepriest_herga/battlepriest_herga038.mp3", "", "", 873707687, 1731330082, Spawn) + AddConversationOption(conversation, "How were you thrice-slain?", "Quest3Chat_12") + AddConversationOption(conversation, "When did you return as a spirit?", "Quest3Chat_12") + AddConversationOption(conversation, "I must be going.") + StartConversation(conversation, NPC, Spawn, "I plunged into the frigid sea water, still grappling with an orc. My body was wracked with wounds and weariness. It was that moment that I breathed my last. I died again, and became she who was twice-slain.") +end + +function Quest3Chat_12(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "battlepriest_herga/halas/great_shelf/battlepriest_herga/battlepriest_herga039.mp3", "", "", 1915210781, 188105745, Spawn) + AddConversationOption(conversation, "I hope that time comes soon.", "Quest4Chat_1") + AddConversationOption(conversation, "I suppose you'll explain it to me, eventually.", "Quest4Chat_1") + StartConversation(conversation, NPC, Spawn, "All in due time.") +end + +function Quest4Chat_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "battlepriest_herga/halas/great_shelf/battlepriest_herga/battlepriest_herga040.mp3", "", "", 3946585485, 2195203670, Spawn) + AddConversationOption(conversation, "Is this when you came back as a ghost?", "Quest4Chat_2") + AddConversationOption(conversation, "Are you speaking of the reanimated Ry'Gorr skeletons?", "Quest4Chat_2") + AddConversationOption(conversation, "Who or what are you referring to?", "Quest4Chat_2") + AddConversationOption(conversation, "I can never understand you. Goodbye.") + StartConversation(conversation, NPC, Spawn, "It is not an arbitrary whim that leads the dead to forsake their graves and mingle again with their earthly associates.") +end + +function Quest4Chat_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "battlepriest_herga/halas/great_shelf/battlepriest_herga/battlepriest_herga041.mp3", "", "", 1296890403, 1990586167, Spawn) + AddConversationOption(conversation, "You have continued to help them, as demonstrated by our arrangement.", "Quest4Chat_3") + AddConversationOption(conversation, "Did you need assistance with something else?", "Quest4Chat_3") + AddConversationOption(conversation, "Speaking of repose, I need a rest. Goodbye.") + StartConversation(conversation, NPC, Spawn, "I long for no repose or reward. I simply wish to assist my brethren.") +end + +function Quest4Chat_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "battlepriest_herga/halas/great_shelf/battlepriest_herga/battlepriest_herga042.mp3", "", "", 3151113147, 3002768829, Spawn) + AddConversationOption(conversation, "What do you mean?", "Quest4Chat_4") + AddConversationOption(conversation, "You must be referring to the Ry'Gorr skeletons.", "Quest4Chat_4") + AddConversationOption(conversation, "I'm not even sure what you're talking about.") + StartConversation(conversation, NPC, Spawn, "They long for no repose or reward. They simply exist to serve, as tools of their masters.") +end + +function Quest4Chat_4(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "battlepriest_herga/halas/great_shelf/battlepriest_herga/battlepriest_herga043.mp3", "", "", 268915202, 3145348272, Spawn) + AddConversationOption(conversation, "I will destroy the Ry'Gorr skeletons for you.", "OfferForsakingGrave") + AddConversationOption(conversation, "Just tell me where to find them.", "OfferForsakingGrave") + AddConversationOption(conversation, "I'm not even sure what you're talking about.") + StartConversation(conversation, NPC, Spawn, "They are tools of destruction. They are marionettes dancing on invisible strings, controlled by the necromancers that created them. The Ry'Gorr skeletons are unholy abominations with no mind, no will, and a nefarious purpose.") +end + +function Quest4Chat_5(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "battlepriest_herga/halas/great_shelf/battlepriest_herga/battlepriest_herga046.mp3", "", "", 607398885, 1472725438, Spawn) + AddConversationOption(conversation, "What was it?", "Quest4Chat_6") + AddConversationOption(conversation, "It was a spirit ward, placed by a coldain shaman, wasn't it?", "Quest4Chat_6") + AddConversationOption(conversation, "I don't have time for this. Goodbye.") + StartConversation(conversation, NPC, Spawn, "I had returned from the grave to haunt my foes once again. Upon my second death, I was once again plunged into the inky darkness of the afterlife. And after what felt like another eternity of thrashing and struggling, I glimpsed a speck of luminance.") +end + +function Quest4Chat_6(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "battlepriest_herga/halas/great_shelf/battlepriest_herga/battlepriest_herga047.mp3", "", "", 3570519032, 1449010576, Spawn) + AddConversationOption(conversation, "So you were able to lead them into battle once again?", "Quest4Chat_7") + AddConversationOption(conversation, "Tell me more.", "Quest4Chat_7") + AddConversationOption(conversation, "I don't have time for this. Goodbye.") + StartConversation(conversation, NPC, Spawn, "It was the beacon, a spirit ward placed by one of our coldain shaman, and it was calling me home. I followed the light, and rejoined my brethren as a spirit.") +end + +function Quest4Chat_7(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "battlepriest_herga/halas/great_shelf/battlepriest_herga/battlepriest_herga048.mp3", "", "", 1091068909, 2556774809, Spawn) + AddConversationOption(conversation, "The orcs must never have expected your return.", "Quest4Chat_8") + AddConversationOption(conversation, "This story doesn't have a happy ending, does it?", "Quest4Chat_8") + AddConversationOption(conversation, "I don't have time for this. Goodbye.") + StartConversation(conversation, NPC, Spawn, "For awhile, I led the coldain that fought with me on the choke. The spirits of those that did not survive the battle followed me tirelessly. Our ranks swelled as more fallen coldain found their way back.") +end + +function Quest4Chat_8(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "battlepriest_herga/halas/great_shelf/battlepriest_herga/battlepriest_herga049.mp3", "", "", 2856349899, 3435957027, Spawn) + AddConversationOption(conversation, "How was he able to stop you?", "Quest4Chat_9") + AddConversationOption(conversation, "I don't like the sound of this Ry'Gorr necromancer.", "Quest4Chat_9") + AddConversationOption(conversation, "I don't have time for this. Goodbye.") + StartConversation(conversation, NPC, Spawn, "As a group, we were unstoppable. No one, man or beast, dead or breathing, could withstand our combined might. We continued to harass the orcs for months, until their necromancer, Orug Deathmaker, uncovered a method to stop me. ") +end + +function Quest4Chat_9(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "battlepriest_herga/halas/great_shelf/battlepriest_herga/battlepriest_herga050.mp3", "", "", 863524022, 660387417, Spawn) + AddConversationOption(conversation, "I can understand why that would concern them.", "Quest4Chat_10") + AddConversationOption(conversation, "The edges of Norrath aren't that far, here on Erollis.", "Quest4Chat_10") + AddConversationOption(conversation, "I don't have time for this. Goodbye.") + StartConversation(conversation, NPC, Spawn, "Orug Deathmaker recognized how much of a danger my existence represented. His orcs fear me, and for good reason. My spectral soldiers would follow me to the edges of Norrath, and beyond.") +end + +function Quest4Chat_10(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "battlepriest_herga/halas/great_shelf/battlepriest_herga/battlepriest_herga051.mp3", "", "", 3393923414, 4073776454, Spawn) + AddConversationOption(conversation, "I see. And thus you were thrice slain.", "Quest4Chat_11") + AddConversationOption(conversation, "I see. Your grasp is now tenuous.", "Quest4Chat_11") + AddConversationOption(conversation, "I don't have time for this. Goodbye.") + StartConversation(conversation, NPC, Spawn, "And so, the orcs recovered my body from the icy deep, and Orug destroyed it in a ritual meant to exorcise my spirit. His ritual was successful, as it eliminated my ability to directly affect this world. And thus...") +end + +function Quest4Chat_11(NPC, Spawn) + SetStepComplete(Spawn, ForsakingGrave, 2) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "battlepriest_herga/halas/great_shelf/battlepriest_herga/battlepriest_herga052.mp3", "", "", 1152246518, 887448784, Spawn) + AddConversationOption(conversation, "I will happily help you in your endeavors.", "Quest5Chat_1") + AddConversationOption(conversation, "Was there anything else you needed?", "Quest5Chat_1") + StartConversation(conversation, NPC, Spawn, "Aye, and thus I was thrice slain. It is only through your deeds that I am able to continue my work here. I long for no repose or reward. I simply wish to assist my brethren.") +end + +function Quest5Chat_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "battlepriest_herga/halas/great_shelf/battlepriest_herga/battlepriest_herga053.mp3", "", "", 3620088043, 2212562054, Spawn) + AddConversationOption(conversation, "Of course, Herga.", "Quest5Chat_2") + AddConversationOption(conversation, "You addressed me with a title again.", "Quest5Chat_2") + AddConversationOption(conversation, "I'm afraid I must be going.") + StartConversation(conversation, NPC, Spawn, GetName(Spawn) .. ", Clawrender, Orcslayer, Siege Stopper, Bane of the Unliving, Friend to the coldain. Will ye be my champion again?") +end + +function Quest5Chat_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "battlepriest_herga/halas/great_shelf/battlepriest_herga/battlepriest_herga054.mp3", "", "", 817762038, 3762145835, Spawn) + AddConversationOption(conversation, "It would be my honor.", "Quest5Chat_3") + AddConversationOption(conversation, "I see what you mean.", "Quest5Chat_3") + AddConversationOption(conversation, "This is an awful lot of work for a rusty old relic.") + StartConversation(conversation, NPC, Spawn, "Though the orcs have destroyed my body, my battle helm still remains intact. It means much to me, as ye'll discover. Ye would honor this Battlepriest if ye could recover it from the ice jetty below the cliff named after me.") +end + +function Quest5Chat_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "battlepriest_herga/halas/great_shelf/battlepriest_herga/battlepriest_herga055.mp3", "", "", 2651064333, 3864508293, Spawn) + AddConversationOption(conversation, "Should I give this helm to your family?", "OfferAllRemains") + AddConversationOption(conversation, "I'm sure your people will want to have the helm back.", "OfferAllRemains") + AddConversationOption(conversation, "It's not like you can wear it again. This is a waste of time.") + StartConversation(conversation, NPC, Spawn, "There is not much left of me now. My corporeal form has been defiled and destroyed by the Ry'Gorr. My spirit is weak.") +end + +function Quest5Chat_4(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "battlepriest_herga/halas/great_shelf/battlepriest_herga/battlepriest_herga058.mp3", "", "", 2433653764, 1582075535, Spawn) + AddConversationOption(conversation, "It's been a pleasure. ", "Quest5Chat_5") + AddConversationOption(conversation, "Your valor is legendary.", "Quest5Chat_5") + AddConversationOption(conversation, "If only friends were currency, that would mean something.", "Quest5Chat_5") + StartConversation(conversation, NPC, Spawn, "Ye have many names, " .. GetName(Spawn) .. ", but today ye've earned the name 'Friend of Herga.'") +end + +function Quest5Chat_5(NPC, Spawn) + SetStepComplete(Spawn, AllRemains, 4) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "battlepriest_herga/halas/great_shelf/battlepriest_herga/battlepriest_herga059.mp3", "", "", 584614622, 2543315634, Spawn) + AddConversationOption(conversation, "I'd wish you good rest, but I know you'll never rest so long as your people need you.") + AddConversationOption(conversation, "Farewell, good Battlepriest. I will treasure the helm.") + AddConversationOption(conversation, "I can't get out of here fast enough. Goodbye.") + StartConversation(conversation, NPC, Spawn, "For retrieving my helm, I'd like to return the favor. Please take this. Yer helmet is oft all that stands between ye and the hereafter.") +end + +function OfferLooseningGrip(NPC, Spawn) + OfferQuest(NPC, Spawn, LooseningGrip) +end + +function OfferTheCharge(NPC, Spawn) + OfferQuest(NPC, Spawn, TheCharge) +end + +function OfferSiegeOver(NPC, Spawn) + OfferQuest(NPC, Spawn, SiegeOver) +end + +function OfferForsakingGrave(NPC, Spawn) + OfferQuest(NPC, Spawn, ForsakingGrave) +end + +function OfferAllRemains(NPC, Spawn) + OfferQuest(NPC, Spawn, AllRemains) +end \ No newline at end of file diff --git a/server/SpawnScripts/FrostfangSea/BelkaThunderheart.lua b/server/SpawnScripts/FrostfangSea/BelkaThunderheart.lua new file mode 100644 index 000000000..4d9090b47 --- /dev/null +++ b/server/SpawnScripts/FrostfangSea/BelkaThunderheart.lua @@ -0,0 +1,826 @@ +--[[ + Script Name : SpawnScripts/FrostfangSea/BelkaThunderheart.lua + Script Purpose : Belka Thunderheart + Script Author : theFoof + Script Date : 2013.05.31 + Script Notes : +--]] + +local DisplacedDiscouraged = 37 + +local ReclaimingHonor = 38 + +local TisUnnatural = 39 + +local PouringSkellies = 40 + +local NoWork = 41 + +local TacklingBasilisks = 42 + +local DomesticationSurvivalism = 43 + +local ReportSpine = 44 + +function spawn(NPC) + ProvidesQuest(NPC, DisplacedDiscouraged) + ProvidesQuest(NPC, ReclaimingHonor) + ProvidesQuest(NPC, TisUnnatural) + ProvidesQuest(NPC, PouringSkellies) + ProvidesQuest(NPC, NoWork) + ProvidesQuest(NPC, TacklingBasilisks) + ProvidesQuest(NPC, DomesticationSurvivalism) + ProvidesQuest(NPC, ReportSpine) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + if not HasCompletedQuest(Spawn, DisplacedDiscouraged) and not HasQuest(Spawn, DisplacedDiscouraged) then + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_1_1009.mp3", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Aah! You're a blue dwarf! I think I need to leave now. Goodbye.") + AddConversationOption(conversation, "And into the fire? But just who exactly are you, and why you are here?", "Quest1Chat_1") + AddConversationOption(conversation, "I am not interested in philosophy. Just give me some work to do and skip the chat.", "OfferDisplacedDiscouraged") + StartConversation(conversation, NPC, Spawn, "Out of the frying pan...") + elseif GetQuestStep(Spawn, DisplacedDiscouraged) == 1 then + PlayFlavor(NPC, "", "the Ry'Gorr raiders aren't making our hard lives any easier.", "no", 0, 0, Spawn) + elseif GetQuestStep(Spawn, DisplacedDiscouraged) == 2 then + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_1_1009.mp3", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "I dealt with the orcs, as promised.", "Quest1Chat_10") + AddConversationOption(conversation, "Dreary existence, isn't it?", "Quest1Chat_10") + StartConversation(conversation, NPC, Spawn, "Yer still alive, " .. GetName(Spawn) .. ". Good, good. That's about as joyous as the news gets around here.") + elseif HasCompletedQuest(Spawn, DisplacedDiscouraged) and not HasCompletedQuest(Spawn, ReclaimingHonor) and not HasQuest(Spawn, ReclaimingHonor) then + Quest2Chat_1(NPC, Spawn) + elseif GetQuestStep(Spawn, ReclaimingHonor) == 1 then + PlayFlavor(NPC, "", "Make those Ry'Gorr raiders suffer for what they've done.", "", 0, 0, Spawn) + elseif GetQuestStep(Spawn, ReclaimingHonor) == 2 then + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_2_1009.mp3", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Here are the signet rings.", "Quest2Chat_5") + AddConversationOption(conversation, "I took their lives and then I took back the rings.", "Quest2Chat_5") + AddConversationOption(conversation, "I did as you asked, but their suffering won't end yours.", "Quest2Chat_5") + StartConversation(conversation, NPC, Spawn, "The Ry'Gorr have suffered for what they've done, I hope?") + elseif HasCompletedQuest(Spawn, ReclaimingHonor) and not HasCompletedQuest(Spawn, TisUnnatural) and not HasQuest(Spawn, TisUnnatural) then + Quest3Chat_1(NPC, Spawn) + elseif GetQuestStep(Spawn, TisUnnatural) == 1 then + PlayFlavor(NPC, "", "Engage the skeletal horde, and slay them where they stand.", "point", 0, 0, Spawn) + elseif GetQuestStep(Spawn, TisUnnatural) == 2 then + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_1_1009.mp3", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Yes, I've completed my task.", "Quest3Chat_8") + AddConversationOption(conversation, "I destroyed the skeletons.", "Quest3Chat_8") + StartConversation(conversation, NPC, Spawn, "Have ye smashed the undead? Have ye given the spirits a hand?") + elseif HasCompletedQuest(Spawn, TisUnnatural) and not HasCompletedQuest(Spawn, PouringSkellies) and not HasQuest(Spawn, PouringSkellies) then + Quest4Chat_1(NPC, Spawn) + elseif GetQuestStep(Spawn, PouringSkellies) == 1 then + PlayFlavor(NPC, "", "Don't waste any of Fronden's brew, if ye can help it.", "threaten", 0, 0, Spawn) + elseif GetQuestStep(Spawn, PouringSkellies) == 2 then + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_2_1009.mp3", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Worked like a charm.", "Quest4Chat_12") + AddConversationOption(conversation, "Yes, and I can't believe anyone would drink this.", "Quest4Chat_12") + StartConversation(conversation, NPC, Spawn, "Did Fronden's Finest do the trick? Were ye able to obliterate the bone piles?") + elseif HasCompletedQuest(Spawn, PouringSkellies) and not HasCompletedQuest(Spawn, NoWork) and not HasQuest(Spawn, NoWork) then + Quest5Chat_1(NPC, Spawn) + elseif GetQuestStep(Spawn, NoWork) == 1 then + PlayFlavor(NPC, "", "Recover as much of that velium as ye can.", "agree", 0, 0, Spawn) + elseif GetQuestStep(Spawn, NoWork) == 2 then + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_1_1009.mp3", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "I've got plenty.", "Quest5Chat_6") + AddConversationOption(conversation, "All that you require and more.", "Quest5Chat_6") + AddConversationOption(conversation, "Are you more worried about your precious metal than my well-being?", "Quest5Chat_7") + StartConversation(conversation, NPC, Spawn, "Ah, ye've returned, " .. GetName(Spawn) .. ". How much velium were ye able to recover?") + elseif HasCompletedQuest(Spawn, NoWork) and not HasCompletedQuest(Spawn, TacklingBasilisks) and not HasQuest(Spawn, TacklingBasilisks) then + Quest6Chat_1(NPC, Spawn) + elseif GetQuestStep(Spawn, TacklingBasilisks) == 1 then + PlayFlavor(NPC, "", "I'll be interested in hearing how ye fare against the basilisks.", "nod", 0, 0, Spawn) + elseif GetQuestStep(Spawn, TacklingBasilisks) == 2 then + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_3_1009.mp3", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "They are vicious creatures.", "Quest6Chat_9") + AddConversationOption(conversation, "Based on the eggs and nests, I'd say the basilisks are rapidly reproducing.", "Quest6Chat_9") + AddConversationOption(conversation, "They are like other wild animals: they fight to protect themselves and their young.", "Quest6Chat_9") + StartConversation(conversation, NPC, Spawn, "Tell me about the basilisks, " .. GetName(Spawn) .. ".") + elseif HasCompletedQuest(Spawn, TacklingBasilisks) and not HasCompletedQuest(Spawn, DomesticationSurvivalism) and not HasQuest(Spawn, DomesticationSurvivalism) then + Quest7Chat_1(NPC, Spawn) + elseif GetQuestStep(Spawn, DomesticationSurvivalism) == 1 then + PlayFlavor(NPC, "", "I'd bet my left braid we could train the basilisks, if we only had some of their eggs.", "ponder", 0, 0, Spawn) + elseif GetQuestStep(Spawn, DomesticationSurvivalism) == 2 then + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_1_1009.mp3", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "That's not a very original name.", "Quest7Chat_7") + AddConversationOption(conversation, "Best of luck raising and taming them!", "Quest7Chat_8") + AddConversationOption(conversation, "I hope you're right about domesticating these beasts.", "Quest7Chat_8") + StartConversation(conversation, NPC, Spawn, "Oh, look at all those basilisk eggs ye brought! They're gonna hatch and then grow up to be the cutest nippers. I'm naming this one Lockjaw.") + elseif HasCompletedQuest(Spawn, DomesticationSurvivalism) and not HasCompletedQuest(Spawn, ReportSpine) and not HasQuest(Spawn, ReportSpine) then + Quest8Chat_1(NPC, Spawn) + elseif GetQuestStep(Spawn, ReportSpine) == 1 then + PlayFlavor(NPC, "", "Report to Tad in Cragged Spine as soon as ye can.", "point", 0, 0, Spawn) + elseif HasCompletedQuest(Spawn, ReportSpine) then + PlayFlavor(NPC, "", "Pleasure to see ye again!", "hello", 0, 0, Spawn) + end +end + +function Quest1Chat_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "What do you mean?", "Quest1Chat_2") + AddConversationOption(conversation, "This is depressing.") + StartConversation(conversation, NPC, Spawn, "Out of the fire, and into the icy abyss, more like. We are the coldain, and we've been through more than you can imagine.") +end + +function Quest1Chat_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "How did you get here?", "Quest1Chat_3") + AddConversationOption(conversation, "What happened to Velious?", "Quest1Chat_8") + AddConversationOption(conversation, "Perhaps some other time. Goodbye.") + StartConversation(conversation, NPC, Spawn, "I don't suppose ye've had the chance to hear about how we got here, have ye? Well, in case ye haven't noticed, we're not in Velious anymore.") +end + +function Quest1Chat_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "What happened next?", "Quest1Chat_4") + AddConversationOption(conversation, "Sounds like an excuse. Did they get away?", "Quest1Chat_4") + AddConversationOption(conversation, "This is a bit too long-winded for me. Goodbye.") + StartConversation(conversation, NPC, Spawn, "Not more than ten years back, a group of us coldain were tracking down a band of unruly Ry'Gorr orcs. We'd chased 'em to the ends of the continent and had 'em good and cornered near the edge of the Iceclad Ocean. And moments before we were able to run them down, the sky went perfectly dark.") +end + +function Quest1Chat_4(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "belka_thunderheart/halas/great_shelf/belka_thunderheart/belka_thunderheart006.mp3", "", "", 183388199, 507572177, Spawn) + AddConversationOption(conversation, "Saw what coming?", "Quest1Chat_5") + AddConversationOption(conversation, "The timing doesn't make sense. The cataclysm occurred long ago.", "Quest1Chat_9") + AddConversationOption(conversation, "Something tells me this is how you got here.", "Quest1Chat_5") + AddConversationOption(conversation, "I'm sorry. I'll leave you to your grieving.") + StartConversation(conversation, NPC, Spawn, "Within minutes, a chaotic storm rained ash, stone, and hellfire down upon us. Clouds of hissing steam a hunnerd' dwarves high erupted each time a shard of rock collided with the snow. The land trembled as if Veeshan herself sought to rend the continent in 'twain with her massive claws. And then, we saw it coming.") +end + +function Quest1Chat_5(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Then what happened?", "Quest1Chat_6") + AddConversationOption(conversation, "Very punny.", "Quest1Chat_6") + AddConversationOption(conversation, "I'm sorry. I'll leave you to your grieving.") + StartConversation(conversation, NPC, Spawn, "A monstrous shard of rock, pointy like a harpy's claw and big as a mountain, was headed right for us. There was no time to react, nor run, nor make an escape. This chunk of earth struck down between us and the mainland. The immense blast from the impact showered us with a ton of ice. I was knocked out, cold.") +end + +function Quest1Chat_6(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Perhaps I could help you with the orcs.", "Quest1Chat_7") + AddConversationOption(conversation, "That is a horrible story. I'll be going now.") + StartConversation(conversation, NPC, Spawn, "When I awoke and shook off the snow, I found myself here, floating on this chunk of Brell-forsaken ice in the middle of nowhere. There's barely enough of us and barely enough resources to make do. And if that wasn't bad enough, the Ry'Gorr orcs we were battling survived the blast too. They make it even more difficult to eke out a living on this rock.") +end + +function Quest1Chat_7(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "belka_thunderheart/halas/great_shelf/belka_thunderheart/belka_thunderheart010.mp3", "", "", 679658431, 464088819, Spawn) + AddConversationOption(conversation, "I'm happy to help.", "OfferDisplacedDiscouraged") + AddConversationOption(conversation, "I just hope this will cease your bellyaching.") + StartConversation(conversation, NPC, Spawn, "That'd be a small blessing, " .. GetName(Spawn) .. ". The orc raiders are not far from here. Look for them off to the north, down on the jetties of ice below the choke and Pride Overlook. They're coming over from Ry'Gorr Isle.") +end + +function Quest1Chat_8(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "How did you get here?", "Quest1Chat_3") + AddConversationOption(conversation, "Perhaps some other time. Goodbye.") + StartConversation(conversation, NPC, Spawn, "Yer guess is as good as mine. It may be as we left it, or it may have been obliterated by the cataclysm.") +end + +function Quest1Chat_9(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "So what happened next?", "Quest1Chat_5") + AddConversationOption(conversation, "I'm sorry. I'll leave you to your grieving.") + StartConversation(conversation, NPC, Spawn, "Ye know yer history, " .. GetName(Spawn) ..". This was more recent. I won't pretend to understand the movements of the heavens, but for us the Age of Cataclysms is barely over... if you can call this 'over'.") +end + +function Quest1Chat_10(NPC, Spawn) + SetStepComplete(Spawn, DisplacedDiscouraged, 2) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Like I said before, I'm happy to lend a hand.", "Quest2Chat_1") + AddConversationOption(conversation, "I would appreciate that.", "Quest2Chat_1") + AddConversationOption(conversation, "If you can get over your depression long enough to do so.") + StartConversation(conversation, NPC, Spawn, "Well, I suppose I should be thanking ye for yer help.") +end + +function Quest2Chat_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_3_1009.mp3", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Tell me more.", "Quest2Chat_3") + AddConversationOption(conversation, "Of course. An honorable orc is an oxymoron.", "Quest2Chat_2") + AddConversationOption(conversation, "This will lead to more work, no doubt. I take my leave.") + StartConversation(conversation, NPC, Spawn, "Those blasted Ry'Gorr have no shame, and no honor.") +end + +function Quest2Chat_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "belka_thunderheart/halas/great_shelf/belka_thunderheart/belka_thunderheart015.mp3", "", "", 2910498444, 2424387451, Spawn) + AddConversationOption(conversation, "I thought that'd cheer you up.", "Quest2Chat_3") + AddConversationOption(conversation, "Thank you.", "Quest2Chat_3") + AddConversationOption(conversation, "I must be going.") + StartConversation(conversation, NPC, Spawn, "Ah. Haha! I like the way ye think, " .. GetName(Spawn) .. "!") +end + +function Quest2Chat_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "belka_thunderheart/halas/great_shelf/belka_thunderheart/belka_thunderheart016.mp3", "", "", 2020955980, 3047989742, Spawn) + AddConversationOption(conversation, "And, like you said, the orcs have no honor.", "Quest2Chat_4") + AddConversationOption(conversation, "I must be going.") + StartConversation(conversation, NPC, Spawn, "The blue monsters have taken to looting the signet rings from the coldain they've killed in combat. They wear the rings around their necks, strung on leather, and displayed prominently as badges of 'honor.'") +end + +function Quest2Chat_4(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "belka_thunderheart/halas/great_shelf/belka_thunderheart/belka_thunderheart017.mp3", "", "", 736834123, 822536870, Spawn) + AddConversationOption(conversation, "I would be happy to deliver your message of justice.", "OfferReclaimingHonor") + AddConversationOption(conversation, "Not at this time. Goodbye.") + StartConversation(conversation, NPC, Spawn, "Aye, precisely. Now we need to make sure they have no signet rings, either. In fact, I'd like ye to deliver a strong message to any Ry'Gorr that considers wearing my brethren's ring as a trophy. I want the orcs to understand that it puts a target on their head. Ye up for recovering the rings?") +end + +function Quest2Chat_5(NPC, Spawn) + SetStepComplete(Spawn, ReclaimingHonor, 2) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Is something else bothering you?", "Quest3Chat_1") + AddConversationOption(conversation, "Did you have more work for me?", "Quest3Chat_1") + AddConversationOption(conversation, "I had hoped that would cheer you up.", "Quest3Chat_1") + StartConversation(conversation, NPC, Spawn, "Yes, yes. Ye have been... most helpful.") +end + +function Quest3Chat_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_2_1009.mp3", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "What's most unnatural?", "Quest3Chat_2") + AddConversationOption(conversation, "You mean the skeletal orcs?", "Quest3Chat_7") + AddConversationOption(conversation, "You seem troubled. I will take my leave.") + StartConversation(conversation, NPC, Spawn, "'Tis most unnatural.") +end + +function Quest3Chat_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "belka_thunderheart/halas/great_shelf/belka_thunderheart/belka_thunderheart023.mp3", "", "", 1340808412, 2731736557, Spawn) + AddConversationOption(conversation, "The spirits of your brethren bother you?", "Quest3Chat_3") + AddConversationOption(conversation, "This is too disturbing to speak of. Goodbye.") + StartConversation(conversation, NPC, Spawn, "Have a look yonder, " .. GetName(Spawn) .. ", to the battlefield south of here. Ye'll see not only the threat of the Ry'Gorr orcs, arisen from the dead to harry us again, but the spirits of fallen coldain that march against them.") +end + +function Quest3Chat_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Is there anything I can do to help?", "Quest3Chat_4") + AddConversationOption(conversation, "To be denied that afterlife is an atrocity.", "Quest3Chat_6") + AddConversationOption(conversation, "But their sacrifice is saving the lives of your people.", "Quest3Chat_7") + AddConversationOption(conversation, "I'm not certain you appreciate their efforts. Goodbye.") + StartConversation(conversation, NPC, Spawn, "Don't get me wrong, " .. GetName(Spawn) .. ". I appreciate their assistance in holding back the endless tide of the undead, it's just that... when the day comes and I pass on, I hope to be seated at Brell's table. I'd like to partake in the feasts of roasted walrus, steamed mushrooms, and gingered lichen, all washed down with a tankard of Brell's finest.") +end + +function Quest3Chat_4(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "I'll do it.", "OfferTisUnnatural") + AddConversationOption(conversation, "I don't have the stomach for this.") + StartConversation(conversation, NPC, Spawn, "We must do something to bring an end to this stalemate. Give our fallen coldain a hand on the battlefield. Engage the skeletal horde, and slay them where they stand.") +end + +function Quest3Chat_5(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "I see. Tell me more.", "Quest3Chat_2") + AddConversationOption(conversation, "This is bothersome. I must go.") + StartConversation(conversation, NPC, Spawn, "Aye, that, and the spirits of the fallen coldain that have arisen to do battle against them.") +end + +function Quest3Chat_6(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Is there anything I can do to help?", "Quest3Chat_4") + AddConversationOption(conversation, "I'm not barbaric, but I'm also not shallow and selfish. I wish I could say the same for you. Goodbye.") + StartConversation(conversation, NPC, Spawn, "Precisely. And I'm proud of an outsider like yerself fer being able to see that. Yer not half as barbaric as I expected.") +end + +function Quest3Chat_7(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Is there anything I can do to help?", "Quest3Chat_4") + AddConversationOption(conversation, "I will leave you to your reverie.") + StartConversation(conversation, NPC, Spawn, "Aye, 'tis true. But they've earned themselves a place amongst the greatest heroes of the coldain. They should be sharing a leg of mutton with Colin Dain, 'imself, not locking horns with undead for all eternity.") +end + +function Quest3Chat_8(NPC, Spawn) + SetStepComplete(Spawn, TisUnnatural, 2) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "belka_thunderheart/halas/great_shelf/belka_thunderheart/belka_thunderheart030.mp3", "", "", 3401980101, 2087482309, Spawn) + AddConversationOption(conversation, "My pleasure.", "Quest4Chat_1") + AddConversationOption(conversation, "Glad I could help.", "Quest4Chat_1") + AddConversationOption(conversation, "Did you need something else?", "Quest4Chat_1") + StartConversation(conversation, NPC, Spawn, "That's a relief for me, and for the coldain spirits, " .. GetName(Spawn) .. ". Thank ye for laying those skeletons to rest.") +end + +function Quest4Chat_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_3_1009.mp3", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "This is a battle of attrition.", "Quest4Chat_2") + AddConversationOption(conversation, "There must be a way to deal with them permanently.", "Quest4Chat_4") + AddConversationOption(conversation, "This is a fool's errand. We'll never outlast them.") + StartConversation(conversation, NPC, Spawn, "I appreciate all your efforts, " .. GetName(Spawn) .. ", but we're no closer now to eradicating the skeletal horde than we were before. Can ye comprehend the kind of mess we're in now?") +end + +function Quest4Chat_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "What do you mean?", "Quest4Chat_3") + AddConversationOption(conversation, "Oh, they're raising the skeletons again.", "Quest4Chat_10") + AddConversationOption(conversation, "I don't like being spoken down to. Goodbye.") + StartConversation(conversation, NPC, Spawn, "Aye, but without the attrition part.") +end + +function Quest4Chat_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "There must be a way to deal with them permanently.", "Quest4Chat_4") + AddConversationOption(conversation, "I'm getting out of here!") + StartConversation(conversation, NPC, Spawn, "It doesn't matter how many times ye cut the bone rattlers down. They come right back.") +end + +function Quest4Chat_4(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "You won't find any solutions in that bottle.", "Quest4Chat_5") + AddConversationOption(conversation, "I'll take two of whatever you're having.", "Quest4Chat_8") + AddConversationOption(conversation, "It's not like you can pour ale on the skeletons to destroy them.", "Quest4Chat_9") + AddConversationOption(conversation, "This is no time to drink! I'm going to do something useful.") + StartConversation(conversation, NPC, Spawn, "Ye know, back home, as rough as things were we never had to deal with undead orcs. We're ill-prepared for this kinda' threat. So we're gonna have to improvise. I have an idea. [Uncorks a flask of alcohol]") +end + +function Quest4Chat_5(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "What are you planning on doing with that?", "Quest4Chat_6") + AddConversationOption(conversation, "This is no time to drink! I'm going to do something useful.") + StartConversation(conversation, NPC, Spawn, "Says ye! And this isn't just any ol' bottle of spirits.") +end + +function Quest4Chat_6(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "And you drink that?", "Quest4Chat_7") + AddConversationOption(conversation, "What if it doesn't work?", "Quest4Chat_9") + AddConversationOption(conversation, "I'll give your plan a try.", "OfferPouringSkellies") + AddConversationOption(conversation, "This is lunacy. Farewell.") + StartConversation(conversation, NPC, Spawn, "This is Fronden's Finest: it starts as cool fresh Thurgadin springwater, is distilled with the finest mashed grain, ages for 53 years in a white oak cask, before receiving blessing from priests o' Brell. It carries more kick than an orn'ry mountain goat. And on top o' all that, I'm willing te bet it'll make short work of those manky dreadfuls.") +end + +function Quest4Chat_7(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "I'll give your plan a try.", "OfferPouringSkellies") + AddConversationOption(conversation, "This is lunacy. Farewell.") + StartConversation(conversation, NPC, Spawn, "It's more of a sipping drink.") +end + +function Quest4Chat_8(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Just how strong is that drink?", "Quest4Chat_6") + AddConversationOption(conversation, "If you're not sharing, I'm leaving.") + StartConversation(conversation, NPC, Spawn, "Haha! A half swig of this'd knock you flat, " .. GetName(Spawn) .. ".") +end + +function Quest4Chat_9(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "I'll give your plan a try.", "OfferPouringSkellies") + AddConversationOption(conversation, "This is lunacy. Farewell.") + StartConversation(conversation, NPC, Spawn, "We'll be in the same miserable spot we're in now.") +end + +function Quest4Chat_10(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "There must be a way to deal with them permanently.", "Quest4Chat_4") + AddConversationOption(conversation, "I'm getting out of here!") + StartConversation(conversation, NPC, Spawn, "And again... and again, which means all our efforts have been for naught thus far. It doesn't matter how many times ye cut the bone rattlers down. They come right back.") +end + +function Quest4Chat_11(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "Just what is in that flask?", "Quest4Chat_6") + AddConversationOption(conversation, "I don't even want to know. Goodbye.") + StartConversation(conversation, NPC, Spawn, "Don't be so sure about that, and this ain't ale!") +end + +function Quest4Chat_12(NPC, Spawn) + SetStepComplete(Spawn, PouringSkellies, 2) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "It's a good thing you had that flask handy.", "Quest5Chat_1") + AddConversationOption(conversation, "Did you have more work for me?", "Quest5Chat_1") + AddConversationOption(conversation, "You seem much less depressed than when we first met.", "Quest5Chat_1") + StartConversation(conversation, NPC, Spawn, "Aha! Now that's dwarven ingenuity at work! Making do with what ye have is what being a coldain is about.") +end + +function Quest5Chat_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "Now that the fight isn't hopeless, perhaps we can look into ways to improve our odds.", "Quest5Chat_2") + AddConversationOption(conversation, "I'm interested in helping any way I can.", "Quest5Chat_3") + AddConversationOption(conversation, "Seems like I've done enough already. Goodbye.") + StartConversation(conversation, NPC, Spawn, GetName(Spawn) .. "! Thanks to yer efforts, we're finally turning the tide against the orcs. But we can't afford to rest just yet. There's still a pitched battle going on out there.") +end + +function Quest5Chat_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "What do you need?", "Quest5Chat_3") + AddConversationOption(conversation, "Seems like I've done enough already. Goodbye.") + StartConversation(conversation, NPC, Spawn, "My thoughts exactly. I'm glad yer on the same page.") +end + +function Quest5Chat_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "There are probably bits of it strewn across the battlefield.", "Quest5Chat_4") + AddConversationOption(conversation, "No, but I'm sure you're about to tell me.", "Quest5Chat_5") + AddConversationOption(conversation, "I know where I'll be: gone. Goodbye.") + StartConversation(conversation, NPC, Spawn, "Our weapons and shields 'ave seen their fair share of action, and this has taken a toll on their effectiveness. They can be repaired, but of course we need the metal to do so. And ye know where that metal is?") +end + +function Quest5Chat_4(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "So you need someone to gather these velium shards?", "Quest5Chat_5") + AddConversationOption(conversation, "I'm no fetcher. Farewell.") + StartConversation(conversation, NPC, Spawn, "Come to the head of the class! Yer absolutely right.") +end + +function Quest5Chat_5(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "Of course. You need only to ask.", "OfferNoWork") + AddConversationOption(conversation, "Yes, but I expect to be rewarded.", "OfferNoWork") + AddConversationOption(conversation, "No, you can fend for yourselves now.") + StartConversation(conversation, NPC, Spawn, "Ye've been such a help in the past, and ye've proven yerself a capable sort. Would you be able to assist us in this endeavor? Pick up as many of the velium shards as you can carry and bring them back here.") +end + +function Quest5Chat_6(NPC, Spawn) + SetStepComplete(Spawn, NoWork, 2) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "It was a dangerous job.", "Quest6Chat_1") + AddConversationOption(conversation, "Did you have more work for me?", "Quest6Chat_1") + StartConversation(conversation, NPC, Spawn, "This velium ye scavenged will be an immense help to the coldain forces. Our axes will be sharper and our shields sturdier.") +end + +function Quest5Chat_7(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "Okay.", "Quest5Chat_6") + StartConversation(conversation, NPC, Spawn, "No, but ye look fine to me. If something's wrong, yer hiding it well.") +end + +function Quest6Chat_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_1_1009.mp3", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "I'm listening.", "Quest6Chat_2") + AddConversationOption(conversation, "You mean crazier than scavenging pieces of scrap metal in the middle of a war zone?", "Quest6Chat_6") + AddConversationOption(conversation, "I'm not up for more crazy right now. Goodbye.") + StartConversation(conversation, NPC, Spawn, "I have another idea. It's a plan that could help us in our plight against the Ry'Gorr. Now that we have a little breathing room, thanks to ye, we can finally explore this possibility. This may sound crazy, but just hear me out.") +end + +function Quest6Chat_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "What's the reason?", "Quest6Chat_3") + AddConversationOption(conversation, "I can't even imagine why this would be necessary.", "Quest6Chat_8") + AddConversationOption(conversation, "I won't help you if I don't know the reason why. Goodbye.") + StartConversation(conversation, NPC, Spawn, "Actually, on second thought, I'll explain it after yer through. 'Tis easier this way. The crux of the matter is that I need ye to take down a tackle of basilisks.") +end + +function Quest6Chat_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Well, far be it from me to argue with the 'plan'. What needs to be done?", "Quest6Chat_4") + AddConversationOption(conversation, "Alright, I'm in.", "Quest6Chat_4") + AddConversationOption(conversation, "I won't help you if I don't know the reason why. Goodbye.") + StartConversation(conversation, NPC, Spawn, "They're dangerous beasts, fer one. And also, I've got a plan.") +end + +function Quest6Chat_4(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "belka_thunderheart/halas/great_shelf/belka_thunderheart/belka_thunderheart060.mp3", "", "", 1232599488, 1599939111, Spawn) + AddConversationOption(conversation, "This is for research, isn't it?", "Quest6Chat_5") + AddConversationOption(conversation, "I will be back shortly.", "OfferTacklingBasilisks") + AddConversationOption(conversation, "I've had second thoughts. Goodbye.") + StartConversation(conversation, NPC, Spawn, "The frostbiters are off to the east from here, past the battlefield. Ye'll need to tangle with a bunch of them. Afterwards, come back and let me know how it went.") +end + +function Quest6Chat_5(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "belka_thunderheart/halas/great_shelf/belka_thunderheart/belka_thunderheart081.mp3", "", "", 1553643763, 2988219889, Spawn) + AddConversationOption(conversation, "Yes. I will be back shortly.", "OfferTacklingBasilisks") + StartConversation(conversation, NPC, Spawn, "Aye. Yer correct in that. Are ye still interested?") +end + +function Quest6Chat_6(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "You mean crazier than storming a battlefield and pouring Dwarven whiskey on orc bones?", "Quest6Chat_7") + AddConversationOption(conversation, "I should leave now while I still have my skin.") + StartConversation(conversation, NPC, Spawn, "Well...") +end + +function Quest6Chat_7(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "I'm listening.", "Quest6Chat_2") + AddConversationOption(conversation, "I should leave now while I still have my skin.") + StartConversation(conversation, NPC, Spawn, "Ye may have a point there, but jus' listen!") +end + +function Quest6Chat_8(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Trust is in short supply on this floating chunk of ice. I'll do it.", "Quest6Chat_4") + AddConversationOption(conversation, "I do trust you, Belka.", "Quest6Chat_4") + AddConversationOption(conversation, "I won't help you if I don't know the reason why. Goodbye.") + StartConversation(conversation, NPC, Spawn, "Ye'll just have to trust me on this one, " .. GetName(Spawn) .. ".") +end + +function Quest6Chat_9(NPC, Spawn) + SetStepComplete(Spawn, TacklingBasilisks, 2) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Are you going to explain why I was tasked with hunting basilisks?", "Quest7Chat_1") + AddConversationOption(conversation, "Was this a test?", "Quest7Chat_1") + AddConversationOption(conversation, "I'm still waiting to hear the reason.", "Quest7Chat_1") + StartConversation(conversation, NPC, Spawn, "Hmm... This was a most successful venture. Ye've done good.") +end + +function Quest7Chat_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_2_1009.mp3", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "What do you mean by an understanding?", "Quest7Chat_2") + AddConversationOption(conversation, "Tell me what we've learned.", "Quest7Chat_2") + AddConversationOption(conversation, "The only understanding I have is that you've wasted my time. Goodbye.") + StartConversation(conversation, NPC, Spawn, "So, now that you're back, I think I can let you in on the plan. Based off your experiences dealing with the nearby basilisks, we have a better understanding of the creatures. ") +end + +function Quest7Chat_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "What question would that be?", "Quest7Chat_3") + AddConversationOption(conversation, "Can they be tamed?", "Quest7Chat_6") + AddConversationOption(conversation, "You had me fight them to see if they were mean? I could have told you that just by looking at them!") + StartConversation(conversation, NPC, Spawn, "We know that they're ferocious fighters. We know they're feral. Finally, we know that they're fending off anyone that approaches their nests. These nests are full of unhatched young. Ye see what I'm getting at? Only one question remains.") +end + +function Quest7Chat_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Oh, I see!", "Quest7Chat_4") + AddConversationOption(conversation, "I'm not sure that's feasible. Count me out.") + StartConversation(conversation, NPC, Spawn, "If'n we can raise the little nippers into loyal allies that'll fight the orcs, alongside us!") +end + +function Quest7Chat_4(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "And therefore, basilisks could be instrumental in holding back the Ry'Gorr.", "Quest7Chat_5") + AddConversationOption(conversation, "You probably don't know the first thing about animal training. I'm leaving.") + StartConversation(conversation, NPC, Spawn, "My cousin, Frostpaw, was an animal tamer. He always had a pack of trained direwolves at his side. Those hounds were instrumental in holding back the Kromrif. ") +end + +function Quest7Chat_5(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Someone needs to harvest those eggs.", "OfferDomesticationSurvivalism") + AddConversationOption(conversation, "I'm through with menial labor. Goodbye.") + StartConversation(conversation, NPC, Spawn, "Aye. If he could tame wolves, I'm betting we could tame the basilisks. Ye can probably guess what I'm going to ask next.") +end + +function Quest7Chat_6(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Thank you.", "Quest7Chat_4") + AddConversationOption(conversation, "Your flattery is self-serving, but I accept it just the same.", "Quest7Chat_4") + AddConversationOption(conversation, "I know when I'm being buttered up. Goodbye.") + StartConversation(conversation, NPC, Spawn, "Ye never cease to amaze me, " .. GetName(Spawn) .. ".") +end + +function Quest7Chat_7(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Perfect!", "Quest7Chat_8") + AddConversationOption(conversation, "Very funny.") + StartConversation(conversation, NPC, Spawn, "Alright. How about " .. GetName(Spawn) .. ", instead?") +end + +function Quest7Chat_8(NPC, Spawn) + SetStepComplete(Spawn, DomesticationSurvivalism, 2) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "What do you mean?", "Quest8Chat_1") + AddConversationOption(conversation, "Did you have more work for me?", "Quest8Chat_1") + AddConversationOption(conversation, "And here I was looking forward to incubating your basilisk eggs.", "Quest8Chat_1") + StartConversation(conversation, NPC, Spawn, "And I'm afraid this is where we'll be parting ways.") +end + +function Quest8Chat_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Your tune has changed.", "Quest8Chat_2") + AddConversationOption(conversation, "I'm happy to do my part.", "Quest8Chat_3") + AddConversationOption(conversation, "I just can't wait to get out of here.", "Quest8Chat_5") + AddConversationOption(conversation, "It's never enough with you. I'm leaving.") + StartConversation(conversation, NPC, Spawn, "Ye've done so much for the coldain, " .. GetName(Spawn) .. ". I can finally, albeit reluctantly, bear to part with ye. There's others that need yer assistance now more than I do.") +end + +function Quest8Chat_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "My pleasure.", "Quest8Chat_3") + AddConversationOption(conversation, "Just get me out of here.", "Quest8Chat_3") + AddConversationOption(conversation, "The sooner I get off this rock, the better. Goodbye.") + StartConversation(conversation, NPC, Spawn, "Aye, that it has. There's hope for us on this little rock, after all. And it's due, in no small part, to yer assistance.") +end + +function Quest8Chat_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Will the pilgrims be safe?", "Quest8Chat_4") + AddConversationOption(conversation, "I will head there straight away.", "OfferReportSpine") + AddConversationOption(conversation, "I don't need your assistance to walk across a field. Goodbye.") + StartConversation(conversation, NPC, Spawn, "The Ry'Gorr have taken their offensive elsewhere. We've received word that they've begun a surge upon the southern coast, and they've laid siege to the Cragged Spine. It's likely that they could use yer help out there, " .. GetName(Spawn) .. ".") +end + +function Quest8Chat_4(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "On my way.", "OfferReportSpine") + AddConversationOption(conversation, "When I'm good and ready.") + StartConversation(conversation, NPC, Spawn, "So long as they stay here. We'll keep an eye on 'em until this offensive is over. In the meantime, you should head to the Cragged Spine, and quickly!") +end + +function Quest8Chat_5(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "True, and most unfortunate. I'm sorry.", "Quest8Chat_3") + AddConversationOption(conversation, "Just get me out of here.", "Quest8Chat_3") + AddConversationOption(conversation, "the sooner I get off this rock, the better. Goodbye.") + StartConversation(conversation, NPC, Spawn, "Well, I'm sure you have a life to return to. This is likely all we coldain have left.") +end + +function OfferDisplacedDiscouraged(NPC, Spawn) + OfferQuest(NPC, Spawn, DisplacedDiscouraged) +end + +function OfferReclaimingHonor(NPC, Spawn) + OfferQuest(NPC, Spawn, ReclaimingHonor) +end + +function OfferTisUnnatural(NPC, Spawn) + OfferQuest(NPC, Spawn, TisUnnatural) +end + +function OfferPouringSkellies(NPC, Spawn) + OfferQuest(NPC, Spawn, PouringSkellies) +end + +function OfferNoWork(NPC, Spawn) + OfferQuest(NPC, Spawn, NoWork) +end + +function OfferTacklingBasilisks(NPC, Spawn) + OfferQuest(NPC, Spawn, TacklingBasilisks) +end + +function OfferDomesticationSurvivalism(NPC, Spawn) + OfferQuest(NPC, Spawn, DomesticationSurvivalism) +end + +function OfferReportSpine(NPC, Spawn) + OfferQuest(NPC, Spawn, ReportSpine) +end \ No newline at end of file diff --git a/server/SpawnScripts/FrostfangSea/BerguffFullbeard.lua b/server/SpawnScripts/FrostfangSea/BerguffFullbeard.lua new file mode 100644 index 000000000..5fad90d9e --- /dev/null +++ b/server/SpawnScripts/FrostfangSea/BerguffFullbeard.lua @@ -0,0 +1,19 @@ +--[[ + Script Name : SpawnScripts/FrostfangSea/BerguffFullbeard.lua + Script Purpose : Berguff Fullbeard + Script Author : theFoof + Script Date : 2013.10.30 + Script Notes : +--]] + +function spawn(NPC) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + PlayFlavor(NPC, "", "Your most reliable weapon is your knowledge!", "nod", 1689589577, 4560189, Spawn) +end \ No newline at end of file diff --git a/server/SpawnScripts/FrostfangSea/BertaIsholm.lua b/server/SpawnScripts/FrostfangSea/BertaIsholm.lua new file mode 100644 index 000000000..877bebe6a --- /dev/null +++ b/server/SpawnScripts/FrostfangSea/BertaIsholm.lua @@ -0,0 +1,28 @@ +--[[ + Script Name : SpawnScripts/FrostfangSea/BertaIsholm.lua + Script Purpose : Berta Isholm + Script Author : theFoof + Script Date : 2013.10.30 + Script Notes : +--]] + +require"SpawnScripts/FrostfangSea/halas_proximity_cheer" + +function spawn(NPC) + SetPlayerProximityFunction(NPC, 15, "ProxCheer") +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + + local choice = math.random(1,2) + if choice == 1 then + PlayFlavor(NPC, "", "I've got some fine viddles to warm your belly!", "", 1689589577, 4560189, Spawn) + else + PlayFlavor(NPC, "", "You're no good out there hungry.", "", 1689589577, 4560189, Spawn) + end +end \ No newline at end of file diff --git a/server/SpawnScripts/FrostfangSea/BinnyShortwand.lua b/server/SpawnScripts/FrostfangSea/BinnyShortwand.lua new file mode 100644 index 000000000..849854fc2 --- /dev/null +++ b/server/SpawnScripts/FrostfangSea/BinnyShortwand.lua @@ -0,0 +1,53 @@ +--[[ + Script Name : SpawnScripts/FrostfangSea/BinnyShortwand.lua + Script Purpose : illusionist trainer in Halas + Script Author : theFoof + Script Date : 2013.9.24 + Script Notes : +--]] + +local ILLUSIONIST = 26 + +function spawn(NPC) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + if GetClass(Spawn) == ILLUSIONIST then + conversation = CreateConversation() + PlayFlavor(NPC, "", "", "hello", 0, 0, Spawn) + AddConversationOption(conversation, "Do you have any advice for a fellow illusionist?", "IlluChat1") + AddConversationOption(conversation, "That's good to know. Good day.") + StartConversation(conversation, NPC, Spawn, "I see you have chosen the path of an illusionist. It may be challenging, but I find it rather rewarding.") + else + PlayFlavor(NPC, "", "Don't let your illusions be shattered!", "hello", 0, 0, Spawn) + end +end + +function IlluChat1(NPC, Spawn) + conversation = CreateConversation() + FaceTarget(NPC, Spawn) + + AddConversationOption(conversation, "That's useful to know!", "IlluChat2") + StartConversation(conversation, NPC, Spawn, "If you find items that add to your intelligence or stamina, then take them! Intelligence affects your spell focus and increases the damage your spells can cause. Your stamina affects your health. This is crucial.") +end + +function IlluChat2(NPC, Spawn) + conversation = CreateConversation() + FaceTarget(NPC, Spawn) + + AddConversationOption(conversation, "That's interesting.", "IlluChat3") + StartConversation(conversation, NPC, Spawn, "Know your strengths and hone them! We can mesmerize and otherwise captivate our foes through distraction and mental acuity. This is particularly useful when you are confronted with multiple foes.") +end + +function IlluChat3(NPC, Spawn) + conversation = CreateConversation() + FaceTarget(NPC, Spawn) + + AddConversationOption(conversation, "Thank you for the advice.") + StartConversation(conversation, NPC, Spawn, "A strong illusionist can bring order to an otherwise chatoic environment, giving themselves and their allies the ability to fight one adversary at a time. And the most advanced have been known to conjure an illusion of themselves to aid in combat!") +end \ No newline at end of file diff --git a/server/SpawnScripts/FrostfangSea/BlibbaNugrud.lua b/server/SpawnScripts/FrostfangSea/BlibbaNugrud.lua new file mode 100644 index 000000000..133ae8682 --- /dev/null +++ b/server/SpawnScripts/FrostfangSea/BlibbaNugrud.lua @@ -0,0 +1,123 @@ +--[[ + Script Name : SpawnScripts/FrostfangSea/BlibbaNugrud.lua + Script Purpose : Blibba Nugrud + Script Author : theFoof + Script Date : 2013.08.19 + Script Notes : +--]] + +local TrustIssues = 85 + +function spawn(NPC) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + if HasQuest(Spawn, TrustIssues) and not QuestStepIsComplete(Spawn, TrustIssues, 1) then + PlayFlavor(NPC, "blibba_nugrud/halas/new_halas_guard_house/blibba_nugrud001.mp3", "", "", 1692822878, 2906055751, Spawn) + AddConversationOption(conversation, "I have a few questions.", "Quest1Chat_1") + AddConversationOption(conversation, "Can you tell me what you're doing here?", "Quest1Chat_7") + StartConversation(conversation, NPC, Spawn, "Fribbit. Hail back, and all that. What can I do for you?") + elseif HasQuest(Spawn, TrustIssues) then + PlayFlavor(NPC, "", "I've already told you what you wanted to know.", "hello", 0, 0, Spawn) + else + PlayFlavor(NPC, "", "Fribbit! Godd day to you.", "hello", 0, 0, Spawn) + end +end + +function Quest1Chat_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "blibba_nugrud/halas/new_halas_guard_house/blibba_nugrud004.mp3", "", "", 2666827594, 1649429363, Spawn) + AddConversationOption(conversation, "Why did you come to Erollis?", "Quest1Chat_2") + AddConversationOption(conversation, "Why don't you leave?", "Quest1Chat_9") + StartConversation(conversation, NPC, Spawn, "Of course. Ask away.") +end + +function Quest1Chat_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "blibba_nugrud/halas/new_halas_guard_house/blibba_nugrud006.mp3", "", "", 4224849804, 392144788, Spawn) + AddConversationOption(conversation, "When did this happen?", "Quest1Chat_3") + AddConversationOption(conversation, "I already know this; just give me the short version.", "Quest1Chat_6") + StartConversation(conversation, NPC, Spawn, "The frogloks of Guk, my predecessors, were blessed with valor and the capacity for higher reasoning by the god Mithaniel Marr.") +end + +function Quest1Chat_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "blibba_nugrud/halas/new_halas_guard_house/blibba_nugrud007.mp3", "", "", 1546450602, 2461406794, Spawn) + AddConversationOption(conversation, "Can you explain that further?", "Quest1Chat_4") + AddConversationOption(conversation, "What does that have to do with Erollis?", "Quest1Chat_4") + AddConversationOption(conversation, "I already know this; just give me the short version.", "Quest1Chat_6") + AddConversationOption(conversation, "Whatever, I don't have the time for this.") + StartConversation(conversation, NPC, Spawn, "This occurred hundreds of years ago. The blessing of Marr allowed us to defeat our ancestral enemies, the trolls, but more importantly it allowed us to overcome our own shortcomings.") +end + +function Quest1Chat_4(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "blibba_nugrud/halas/new_halas_guard_house/blibba_nugrud008.mp3", "", "", 3444575982, 3490248523, Spawn) + AddConversationOption(conversation, "Aren't frogloks unfit for the environment of Erollis?", "Quest1Chat_5") + AddConversationOption(conversation, "I already know this; just give me the short version.", "Quest1Chat_6") + AddConversationOption(conversation, "Whatever, I don't have the time for this.") + StartConversation(conversation, NPC, Spawn, "We conquered our own fear and ignorance. My enlightened ancestors left Guk and carved out a new home in the world of Norrath. They crawled out of the gunk and muck and into the light, literally and figuratively.") +end + +function Quest1Chat_5(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "blibba_nugrud/halas/new_halas_guard_house/blibba_nugrud009.mp3", "", "", 2086235207, 3956751510, Spawn) + AddConversationOption(conversation, "Can you sum this up?", "Quest1Chat_6") + AddConversationOption(conversation, "Whatever, I don't have the time for this.") + StartConversation(conversation, NPC, Spawn, "Well, I would prefer to live in a swamp, or something like it. The frigid weather is hard on my skin. But I wouldn't say we're unfit, necessarily. We're just as humanoid as we are amphibian.") +end + +function Quest1Chat_6(NPC, Spawn) + SetStepComplete(Spawn, TrustIssues, 1) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "blibba_nugrud/halas/new_halas_guard_house/blibba_nugrud010.mp3", "", "", 1038495244, 3766399001, Spawn) + AddConversationOption(conversation, "Appreciate you taking the time to chat.") + AddConversationOption(conversation, "Take care, Blibba.") + StartConversation(conversation, NPC, Spawn, "The short answer is: we frogloks owe all that we are to Mithaniel Marr. When I heard that He had blessed this place, I felt obliged to come here to pay Him homage.") +end + +function Quest1Chat_7(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "It's nothing quote so serious.", "Quest1Chat_1") + AddConversationOption(conversation, "Just answer the question!", "Quest1Chat_8") + AddConversationOption(conversation, "Whatever, I don't have the time for this.") + StartConversation(conversation, NPC, Spawn, "Doing here? You mean what is my business here? Or are you insinuating that I do not belong?") +end + +function Quest1Chat_8(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "Fine. Goodbye.") + StartConversation(conversation, NPC, Spawn, "How rude! Good day.") +end + +function Quest1Chat_9(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "Of course.", "Quest1Chat_2") + AddConversationOption(conversation, "Just answer the question!", "Quest1Chat_8") + StartConversation(conversation, NPC, Spawn, "That's a very interesting way of putting it. I'll assume you meant no offense.") +end \ No newline at end of file diff --git a/server/SpawnScripts/FrostfangSea/BlorpisaBogchild.lua b/server/SpawnScripts/FrostfangSea/BlorpisaBogchild.lua new file mode 100644 index 000000000..df02c62c9 --- /dev/null +++ b/server/SpawnScripts/FrostfangSea/BlorpisaBogchild.lua @@ -0,0 +1,543 @@ +--[[ + Script Name : SpawnScripts/FrostfangSea/BlorpisaBogchild.lua + Script Purpose : Blorpisa Bogchild + Script Author : theFoof + Script Date : 2013.05.20 + Script Notes : +--]] + +local ArcaneElements = 19 + +local BearBottoms = 20 + +local CodChips = 21 + +local EssentialIngredient = 22 + +local FieldTesting = 23 + +local FieldTwo = 24 + +function spawn(NPC) + AddSpawnAccess(NPC, NPC) + SetPlayerProximityFunction(NPC, 50, "SpawnAccess", "SpawnAccess") + ProvidesQuest(NPC, ArcaneElements) + ProvidesQuest(NPC, BearBottoms) + ProvidesQuest(NPC, CodChips) + ProvidesQuest(NPC, EssentialIngredient) + ProvidesQuest(NPC, FieldTesting) + ProvidesQuest(NPC, FieldTwo) +end + +function respawn(NPC) + spawn(NPC) +end + +function SpawnAccess(NPC, Spawn) + if HasCompletedQuest(Spawn, FieldTwo) == false then + AddSpawnAccess(NPC, Spawn) + end +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + if HasCompletedQuest(Spawn, ArcaneElements) == false and HasQuest(Spawn, ArcaneElements) == false then + PlayFlavor(NPC, "blorpisa_bogchild/halas/gwenevyns_cove/blorpisa_bogchild/blorpisa_bogchild_001.mp3", "", "", 1215134818, 256392720, Spawn) + AddConversationOption(conversation, "Hello Blorpisa, I am " .. GetName(Spawn) .. ".", "Quest1Chat_2") + StartConversation(conversation, NPC, Spawn, "Hello! I haven't seen you around here before! I am Blorpisa Bogchild.") + elseif GetQuestStep(Spawn, ArcaneElements) == 1 then + PlayFlavor(NPC, "blorpisa_bogchild/halas/great_shelf/blorpisa_bogchild/blorpisa_bogchild_010.mp3", "", "", 1541998982, 3704557731, Spawn) + AddConversationOption(conversation, "No. Where can I find the aged ice slurries?", "Quest1Chat_8") + StartConversation(conversation, NPC, Spawn, "Have you collected the aged ice slurry core?") + elseif GetQuestStep(Spawn, ArcaneElements) == 2 then + PlayFlavor(NPC, "blorpisa_bogchild/halas/gwenevyns_cove/blorpisa_bogchild/blorpisa_bogchild_002.mp3", "", "", 3029801000, 1524345260, Spawn) + AddConversationOption(conversation, "I have collected the ore for you.", "Quest1Chat_9") + StartConversation(conversation, NPC, Spawn, "Have you collected the arcane imbued ore?") + elseif HasCompletedQuest(Spawn, ArcaneElements) and HasCompletedQuest(Spawn, BearBottoms) == false and HasQuest(Spawn, BearBottoms) == false then + PlayFlavor(NPC, "blorpisa_bogchild/halas/gwenevyns_cove/blorpisa_bogchild/blorpisa_bogchild_003.mp3", "", "", 3065502678, 2912351776, Spawn) + AddConversationOption(conversation, "I'm doing quite well. How are you?", "Quest2Chat_2") + StartConversation(conversation, NPC, Spawn, "Hello, " .. GetName(Spawn) .. "! How are you faring?") + elseif GetQuestStep(Spawn, BearBottoms) == 1 then + PlayFlavor(NPC, "blorpisa_bogchild/halas/gwenevyns_cove/blorpisa_bogchild/blorpisa_bogchild_004.mp3", "", "", 4029927720, 1452950200, Spawn) + AddConversationOption(conversation, "I have not yet done so. Where can I find the blizzard grizzly cubs?", "Quest2Chat_5") + StartConversation(conversation, NPC, Spawn, "Have you skinned the pelts for me?") + elseif GetQuestStep(Spawn, BearBottoms) == 2 then + PlayFlavor(NPC, "blorpisa_bogchild/halas/gwenevyns_cove/blorpisa_bogchild/blorpisa_bogchild_004.mp3", "", "", 4029927720, 1452950200, Spawn) + AddConversationOption(conversation, "I have the pelts you requested.", "Quest2Chat_6") + StartConversation(conversation, NPC, Spawn, "Have you skinned the pelts for me?") + elseif HasCompletedQuest(Spawn, BearBottoms) and HasCompletedQuest(Spawn, CodChips) == false and HasQuest(Spawn, CodChips) == false then + PlayFlavor(NPC, "blorpisa_bogchild/halas/gwenevyns_cove/blorpisa_bogchild/blorpisa_bogchild_005.mp3", "", "", 3705783760, 1192084203, Spawn) + AddConversationOption(conversation, "How are things with you, Blorpisa?", "Quest3Chat_1") + StartConversation(conversation, NPC, Spawn, "Hello, " .. GetName(Spawn) .. ".") + elseif GetQuestStep(Spawn, CodChips) == 1 then + PlayFlavor(NPC, "blorpisa_bogchild/halas/gwenevyns_cove/blorpisa_bogchild/blorpisa_bogchild_006.mp3", "", "", 900575849, 2922187159, Spawn) + AddConversationOption(conversation, "I have not yet hunted enough cod for everyone's dinner. Where can I find the co again?", "Quest3Chat_4") + StartConversation(conversation, NPC, Spawn, "Did you get the large Iceclad cod?") + elseif GetQuestStep(Spawn, CodChips) == 2 then + PlayFlavor(NPC, "blorpisa_bogchild/halas/gwenevyns_cove/blorpisa_bogchild/blorpisa_bogchild_006.mp3", "", "", 900575849, 2922187159, Spawn) + AddConversationOption(conversation, "I have enough large cod for everyone to eat well tonight!", "Quest3Chat_5") + StartConversation(conversation, NPC, Spawn, "Did you get the large Iceclad cod?") + elseif HasCompletedQuest(Spawn, CodChips) and HasCompletedQuest(Spawn, EssentialIngredient) == false and HasQuest(Spawn, EssentialIngredient) == false then + PlayFlavor(NPC, "blorpisa_bogchild/halas/gwenevyns_cove/blorpisa_bogchild/blorpisa_bogchild_007.mp3", "", "", 570631167, 547031581, Spawn) + AddConversationOption(conversation, "Hello, Blorpisa. How are you?", "Quest4Chat_2") + StartConversation(conversation, NPC, Spawn, "Greetings, " .. GetName(Spawn) .. ".") + elseif GetQuestStep(Spawn, EssentialIngredient) == 1 or GetQuestStep(Spawn, EssentialIngredient) == 2 then + PlayFlavor(NPC, "blorpisa_bogchild/halas/gwenevyns_cove/blorpisa_bogchild/blorpisa_bogchild_008.mp3", "", "", 3240154599, 1916004366, Spawn) + AddConversationOption(conversation, "Not yet. Where can I find the iceflows and snowpacks?", "Quest4Chat_5") + StartConversation(conversation, NPC, Spawn, "Have you captured the elementals I asked for, " .. GetName(Spawn) .. ".") + elseif GetQuestStep(Spawn, EssentialIngredient) == 3 then + PlayFlavor(NPC, "blorpisa_bogchild/halas/gwenevyns_cove/blorpisa_bogchild/blorpisa_bogchild_008.mp3", "", "", 3240154599, 1916004366, Spawn) + AddConversationOption(conversation, "I have captured eight elementals for you, four of each kind.", "Quest4Chat_6") + StartConversation(conversation, NPC, Spawn, "Have you captured the elementals I asked for, " .. GetName(Spawn) .. "?") + elseif HasCompletedQuest(Spawn, EssentialIngredient) and HasCompletedQuest(Spawn, FieldTesting) == false and HasQuest(Spawn, FieldTesting) == false then + PlayFlavor(NPC, "blorpisa_bogchild/halas/gwenevyns_cove/blorpisa_bogchild/blorpisa_bogchild_009.mp3", "", "", 3405427240, 3750540234, Spawn) + AddConversationOption(conversation, "If you define lovely as freezing cold, then it is indeed lovely.", "Quest5Chat_2") + AddConversationOption(conversation, "Not so much, no.", "Quest5Chat_2") + StartConversation(conversation, NPC, Spawn, "" .. GetName(Spawn) .. "! It is a most lovely day, is it not?") + elseif GetQuestStep(Spawn, FieldTesting) == 1 then + PlayFlavor(NPC, "blorpisa_bogchild/halas/gwenevyns_cove/blorpisa_bogchild/blorpisa_bogchild_010.mp3", "", "", 624684361, 1424465021, Spawn) + AddConversationOption(conversation, "I have not yet obtained the lillies. Where again can I find them?", "Quest5Chat_6") + StartConversation(conversation, NPC, Spawn, "Have you collected the ice lilies for me?") + elseif GetQuestStep(Spawn, FieldTesting) == 2 then + PlayFlavor(NPC, "blorpisa_bogchild/halas/gwenevyns_cove/blorpisa_bogchild/blorpisa_bogchild_010.mp3", "", "", 624684361, 1424465021, Spawn) + AddConversationOption(conversation, "I have the lilies you requested.", "Quest5Chat_7") + StartConversation(conversation, NPC, Spawn, "Have you collected the ice lilies for me?") + elseif HasCompletedQuest(Spawn, FieldTesting) and HasCompletedQuest(Spawn, FieldTwo) == false and HasQuest(Spawn, FieldTwo) == false then + PlayFlavor(NPC, "blorpisa_bogchild/halas/gwenevyns_cove/blorpisa_bogchild/blorpisa_bogchild_020.mp3", "", "", 1958149539, 711345401, Spawn) + AddConversationOption(conversation, "Does that mean it's time for another field test?", "Quest6Chat_2") + StartConversation(conversation, NPC, Spawn, "" .. GetName(Spawn) .. ", I have made the necessary modifications to my Frost-born Ward.") + elseif GetQuestStep(Spawn, FieldTwo) == 1 then + PlayFlavor(NPC, "blorpisa_bogchild/halas/gwenevyns_cove/blorpisa_bogchild/blorpisa_bogchild_021.mp3", "", "", 3376846306, 3092977992, Spawn) + AddConversationOption(conversation, "I do not yet know. Where can I find Pride Overlook?", "Quest6Chat_4") + StartConversation(conversation, NPC, Spawn, "Did the Frost-born Ward work this time, " .. GetName(Spawn) .. "?") + elseif GetQuestStep(Spawn, FieldTwo) == 2 then + PlayFlavor(NPC, "blorpisa_bogchild/halas/gwenevyns_cove/blorpisa_bogchild/blorpisa_bogchild_021.mp3", "", "", 3376846306, 3092977992, Spawn) + AddConversationOption(conversation, "No, your spell did not work. At all.", "Quest6Chat_5") + StartConversation(conversation, NPC, Spawn, "Did the Frost-born Ward work this time, " .. GetName(Spawn) .. "?") + end +end + +function Quest1Chat_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "blorpisa_bogchild/halas/gwenevyns_cove/blorpisa_bogchild/blorpisa_bogchild_011.mp3", "", "", 846938752, 844089056, Spawn) + AddConversationOption(conversation, "I'm on my way to New Halas.", "Quest1Chat_3") + StartConversation(conversation, NPC, Spawn, "Ah! I had not seen you before, but I have heard of you and your accomplishments! This is such a pleasure, " .. GetName(Spawn) .. ". We're lucky to have such a hero within our midst. What brings you to Gwenevyn's Cove?") +end + +function Quest1Chat_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "blorpisa_bogchild/halas/gwenevyns_cove/blorpisa_bogchild/blorpisa_bogchild_012.mp3", "", "", 3605255838, 2576534049, Spawn) + AddConversationOption(conversation, "How will you cast the spell on all of the pilgrims?", "Quest1Chat_4") + StartConversation(conversation, NPC, Spawn, "As am I! I've stopped along the way as I've been attempting to create a new spell. It is one that would protect the pilgrims from the bitter winds and frosty landscape of New Halas, as well as protect them from the wild creatures and hostile entities.") +end + +function Quest1Chat_4(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "blorpisa_bogchild/halas/gwenevyns_cove/blorpisa_bogchild/blorpisa_bogchild_013.mp3", "", "", 970695236, 4167602091, Spawn) + AddConversationOption(conversation, "What if they can't read? What if they have children with them?", "Quest1Chat_5") + StartConversation(conversation, NPC, Spawn, "I don't intend to cast it on them all! I will enchant the spell onto parchment for the pilgrims to read aloud when they arrive.") +end + +function Quest1Chat_5(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "blorpisa_bogchild/halas/gwenevyns_cove/blorpisa_bogchild/blorpisa_bogchild_014.mp3", "", "", 947009240, 1540493739, Spawn) + AddConversationOption(conversation, "Well this all sounds very technical to me.", "Quest1Chat_6") + StartConversation(conversation, NPC, Spawn, "Such details! But you do bring up a good point; I will have to make it so that when the spell is read it affects everyone in the area, not just the reader.") +end + +function Quest1Chat_6(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "blorpisa_bogchild/halas/gwenevyns_cove/blorpisa_bogchild/blorpisa_bogchild_015.mp3", "", "", 1255109690, 1640879678, Spawn) + AddConversationOption(conversation, "What kind of help do you need?", "Quest1Chat_7") + AddConversationOption(conversation, "No, sorry, I am in a hurry to get to New Halas.") + StartConversation(conversation, NPC, Spawn, "Say, if you aren't in a hurry, I could use some help.") +end + +function Quest1Chat_7(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "blorpisa_bogchild/halas/gwenevyns_cove/blorpisa_bogchild/blorpisa_bogchild_016.mp3", "", "", 1464127042, 4108357478, Spawn) + AddConversationOption(conversation, "I sure could.", "OfferArcaneElements") + AddConversationOption(conversation, "No, unfortunately.") + StartConversation(conversation, NPC, Spawn, "To make the ink to enchant the spell to paper I need the arcane imbued ore of the rolling stones found southeast of here. Do you think you could go and collect some of the ore for me?") +end + +function Quest1Chat_8(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "blorpisa_bogchild/halas/great_shelf/blorpisa_bogchild/blorpisa_bogchild_016.mp3", "", "", 717321044, 3158147617, Spawn) + AddConversationOption(conversation, "I shall return to you once I have collected the weapons.") + StartConversation(conversation, NPC, Spawn, "I'm glad that you have agreed to help the coldain. You can find the slain coldain southeast of here, upon a great battlefield.") +end + +function Quest1Chat_9(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "blorpisa_bogchild/halas/gwenevyns_cove/blorpisa_bogchild/blorpisa_bogchild_018.mp3", "", "", 2448606843, 4112204434, Spawn) + AddConversationOption(conversation, "Let me know if it turns out successful!", "Quest1Chat_10") + StartConversation(conversation, NPC, Spawn, "Thank you, " .. GetName(Spawn) .. "! I will crumble and crush this ore into a fine powder and then use it to make ink to enchant my spell onto parchment, once I have perfected the spell.") +end + +function Quest1Chat_10(NPC, Spawn) + SetStepComplete(Spawn, ArcaneElements, 2) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "blorpisa_bogchild/halas/gwenevyns_cove/blorpisa_bogchild/blorpisa_bogchild_022.mp3", "", "", 2006824864, 3295508205, Spawn) + AddConversationOption(conversation, "If you need help with anything else, please ask me. I am glad to help others here in New Halas.") + AddConversationOption(conversation, "Good luck!") + StartConversation(conversation, NPC, Spawn, "Oh I shall, but I will not be able to test my spell for a while yet. I've got to hop about collecting some more materials first.") +end + +function Quest2Chat_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "blorpisa_bogchild/halas/gwenevyns_cove/blorpisa_bogchild/blorpisa_bogchild_023.mp3", "", "", 1753584306, 4118176236, Spawn) + AddConversationOption(conversation, "Need any help?", "Quest2Chat_3") + StartConversation(conversation, NPC, Spawn, "I had been working on that protection spell, but now I have been put in charge of making blankets for the people of Gwenevyn's Cove.") +end + +function Quest2Chat_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "blorpisa_bogchild/halas/gwenevyns_cove/blorpisa_bogchild/blorpisa_bogchild_024.mp3", "", "", 4187781831, 3119266103, Spawn) + AddConversationOption(conversation, "I will go and get the unmarred fur pelts for you.", "OfferBearBottoms") + AddConversationOption(conversation, "I'm not killing baby bears! Forget it!") + StartConversation(conversation, NPC, Spawn, "I could use it if you're offering! I need unmarred fur pelts from the blizzard grizzly cubs. These cubs are around a cave that is northwest of Gwenevyn's Cove.") +end + +function Quest2Chat_4(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "blorpisa_bogchild/halas/gwenevyns_cove/blorpisa_bogchild/blorpisa_bogchild_025.mp3", "", "", 3290905220, 1893346275, Spawn) + AddConversationOption(conversation, "I will return to you once I have gathered the pelts.") + StartConversation(conversation, NPC, Spawn, "Thanks. I know it's distasteful to kill cubs, but I need their softer fur to make blankets. Thank you for doing this for me, " .. GetName(Spawn) .. ".") +end + +function Quest2Chat_5(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "I will return with the pelts.") + StartConversation(conversation, NPC, Spawn, "The cubs roam northwest of Gwenevyn's Cove.") +end + +function Quest2Chat_6(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "blorpisa_bogchild/halas/gwenevyns_cove/blorpisa_bogchild/blorpisa_bogchild_026.mp3", "", "", 1759018155, 1598876766, Spawn) + AddConversationOption(conversation, "Thank you. I did my best.", "Quest2Chat_7") + StartConversation(conversation, NPC, Spawn, "Great! I can get right to work stitching up the blankets. You did a fine job skinning, " .. GetName(Spawn) .. ". None of the edges of the pelts are ragged.") +end + +function Quest2Chat_7(NPC, Spawn) + SetStepComplete(Spawn, BearBottoms, 2) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "blorpisa_bogchild/halas/gwenevyns_cove/blorpisa_bogchild/blorpisa_bogchild_028.mp3", "", "", 3080889721, 2381851654, Spawn) + AddConversationOption(conversation, "Thanks, Blorpisa. I appreciate it.") + StartConversation(conversation, NPC, Spawn, "No, thank you, " .. GetName(Spawn) .. ". You really are a hero! I don't have much to give you, but please, take this coin for your troubles and one of my accessories.") +end + +function Quest3Chat_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "blorpisa_bogchild/halas/gwenevyns_cove/blorpisa_bogchild/blorpisa_bogchild_029.mp3", "", "", 1210199796, 2166040902, Spawn) + AddConversationOption(conversation, "The nerve of some people!", "Quest3Chat_2") + StartConversation(conversation, NPC, Spawn, "As thanks for making the blankets, they've now decided I should prepare dinner!") +end + +function Quest3Chat_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "blorpisa_bogchild/halas/gwenevyns_cove/blorpisa_bogchild/blorpisa_bogchild_030.mp3", "", "", 14855483, 1166912182, Spawn) + AddConversationOption(conversation, "The Frostfang Sea didn't seem too cold to me.", "Quest3Chat_3") + AddConversationOption(conversation, "Brr! I agree it's much too cold. Best of luck with dinner!") + StartConversation(conversation, NPC, Spawn, "It's as the old saying goes: there's always something more to do around camp. I don't mind cooking over the fire, it's just that there's nothing to cook! I have a delicious recipe for cod, but it's too cold to swim in the Frostfang Sea and I don't know how to use a fishing pole.") +end + +function Quest3Chat_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "blorpisa_bogchild/halas/gwenevyns_cove/blorpisa_bogchild/blorpisa_bogchild_031.mp3", "", "", 2157156103, 1975601374, Spawn) + AddConversationOption(conversation, "I can get the Iceclad cod for you.", "OfferCodChips") + AddConversationOption(conversation, "I can't. I am already busy, Blorpisa.") + StartConversation(conversation, NPC, Spawn, "Really? Maybe I'm getting old. If it's not too cold for you, would you mind getting the Iceclad cod that I need for my recipe? I think everyone would like a nice bit of cod and chips for dinner.") +end + +function Quest3Chat_4(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "I will return with enough cod for everyone's dinner.") + StartConversation(conversation, NPC, Spawn, "The large Iceclad cod swim in the Frostfang Sea northeast of Gwenevyn's Cove.") +end + +function Quest3Chat_5(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "blorpisa_bogchild/halas/gwenevyns_cove/blorpisa_bogchild/blorpisa_bogchild_033.mp3", "", "", 2508783935, 568039203, Spawn) + AddConversationOption(conversation, "I am glad that I was able to help you out.", "Quest3Chat_6") + StartConversation(conversation, NPC, Spawn, "Splendid, " .. GetName(Spawn) .. "! I shall get right to work cooking up the fish and chips for dinner.") +end + +function Quest3Chat_6(NPC, Spawn) + SetStepComplete(Spawn, CodChips, 2) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "blorpisa_bogchild/halas/gwenevyns_cove/blorpisa_bogchild/blorpisa_bogchild_035.mp3", "", "", 787726717, 3426749776, Spawn) + AddConversationOption(conversation, "It's more than enough. Thank you, Blorpisa.") + StartConversation(conversation, NPC, Spawn, "We are truly in your debt, " ..GetName(Spawn) .. ". I've collected some coin from the other citizens of Gwenevyn's Cove. It isn't much, but it's better than nothing, right?") +end + +function Quest4Chat_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "blorpisa_bogchild/halas/gwenevyns_cove/blorpisa_bogchild/blorpisa_bogchild_036.mp3", "", "", 3721924071, 2621057833, Spawn) + AddConversationOption(conversation, "Is there anything I can do to help?", "Quest4Chat_3") + StartConversation(conversation, NPC, Spawn, "I myself am well, but the Frost-born Ward that I've been creating is not going so well. It appears that I am still missing a few key components to the formula.") +end + +function Quest4Chat_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "blorpisa_bogchild/halas/gwenevyns_cove/blorpisa_bogchild/blorpisa_bogchild_037.mp3", "", "", 2815442129, 1528606877, Spawn) + AddConversationOption(conversation, "I can capture some elementals for you.", "Quest4Chat_4") + AddConversationOption(conversation, "Sorry, I'm very busy today. Perhaps I can help you later.") + StartConversation(conversation, NPC, Spawn, "I've created an Iced Trap to capture a few elementals. If you are not too busy, you could hop west of here and collect iceflows and snowpacks on the Icemane Plains. That would save me a lot of time.") +end + +function Quest4Chat_4(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "blorpisa_bogchild/halas/gwenevyns_cove/blorpisa_bogchild/blorpisa_bogchild_038.mp3", "", "", 3909457491, 3153535025, Spawn) + AddConversationOption(conversation, "I am sure I can handle a few small elementals.", "OfferEssentialIngredient") + StartConversation(conversation, NPC, Spawn, "Thank you! Just take the Iced Trap and use it on any iceflow or snowpack. They should be instantly attracted to it. I do not anticipate any problems.") +end + +function Quest4Chat_5(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "blorpisa_bogchild/halas/gwenevyns_cove/blorpisa_bogchild/blorpisa_bogchild_041.mp3", "", "", 502468794, 246049475, Spawn) + AddConversationOption(conversation, "I will return once I have captured the elementals.") + StartConversation(conversation, NPC, Spawn, "The iceflows and snowpacks gather on the Icemane Plains, west of Gwenevyn's Cove.") +end + +function Quest4Chat_6(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "blorpisa_bogchild/halas/gwenevyns_cove/blorpisa_bogchild/blorpisa_bogchild_040.mp3", "", "", 3949759324, 1772100940, Spawn) + AddConversationOption(conversation, "I am glad that you are pleased with my efforts.", "Quest4Chat_7") + StartConversation(conversation, NPC, Spawn, "Excellent! That's much more than I hoped. With this many elementals I am sure I will be able to progress the Frost-born Ward.") +end + +function Quest4Chat_7(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "blorpisa_bogchild/halas/gwenevyns_cove/blorpisa_bogchild/blorpisa_bogchild_042.mp3", "", "", 301178077, 3194637507, Spawn) + AddConversationOption(conversation, "It is the right thing to do.", "Quest4Chat_8") + StartConversation(conversation, NPC, Spawn, "I am more than pleased, " .. GetName(Spawn) .. ". You are saving us! With every bit of aid you give us here in Gwenevyn's Cove, you help to ensure our survival within this inhospitable land. We are sure to live to see Mithaniel's blessed city of New Halas because of you!") +end + +function Quest4Chat_8(NPC, Spawn) + SetStepComplete(Spawn, EssentialIngredient, 3) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "blorpisa_bogchild/halas/gwenevyns_cove/blorpisa_bogchild/blorpisa_bogchild_044.mp3", "", "", 4160372502, 1958782481, Spawn) + AddConversationOption(conversation, "I will return if you need help.") + StartConversation(conversation, NPC, Spawn, "If only everyone had your heart, " .. GetName(Spawn) .. ". Now, surely you have other things that must be done on this day. If you find yourself with more free time, I could always use your assistance.") +end + +function Quest5Chat_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "blorpisa_bogchild/halas/gwenevyns_cove/blorpisa_bogchild/blorpisa_bogchild_045.mp3", "", "", 2755043591, 501739216, Spawn) + AddConversationOption(conversation, "Sure! This is exciting!", "Quest5Chat_3") + AddConversationOption(conversation, "No way, get someone else to be your lab rat.") + StartConversation(conversation, NPC, Spawn, "I have made great progress on the Frost-born Ward! It is finally ready for its first field test. Will you do the honors?") +end + +function Quest5Chat_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "blorpisa_bogchild/halas/gwenevyns_cove/blorpisa_bogchild/blorpisa_bogchild_046.mp3", "", "", 2185186057, 1637729185, Spawn) + AddConversationOption(conversation, "I know, Blorpisa.", "Quest5Chat_4") + AddConversationOption(conversation, "I'll keep that in mind.", "Quest5Chat_4") + StartConversation(conversation, NPC, Spawn, "Now I make no guarantees that this spell will work. Remember that this is a field test.") +end + +function Quest5Chat_4(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "blorpisa_bogchild/halas/gwenevyns_cove/blorpisa_bogchild/blorpisa_bogchild_047.mp3", "", "", 2602829291, 2631146795, Spawn) + AddConversationOption(conversation, "Is there anything else you need gathered?", "Quest5Chat_5") + StartConversation(conversation, NPC, Spawn, "Let's see, where should you go to test my spell?") +end + +function Quest5Chat_5(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "blorpisa_bogchild/halas/gwenevyns_cove/blorpisa_bogchild/blorpisa_bogchild_048.mp3", "", "", 1989757627, 78481858, Spawn) + AddConversationOption(conversation, "Where can I find these ice lilies?", "OfferFieldTesting") + StartConversation(conversation, NPC, Spawn, "Oh, yes! I do need some ice lilies. I feel that they will add a special component to the Frost-born Ward.") +end + +function Quest5Chat_6(NPC, Spawn) + FaceTargget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "I shall return with the lilies as soon as I am able") + StartConversation(conversation, NPC, Spawn, "You can find the ice lilies on the Icemane Plains west of here. I have also refreshed the Frost-born Ward upon you as it seemed to be very weak.") +end + +function Quest5Chat_7(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "blorpisa_bogchild/halas/gwenevyns_cove/blorpisa_bogchild/blorpisa_bogchild_050.mp3", "", "", 2480968598, 2345683156, Spawn) + AddConversationOption(conversation, "It didn't work at all. I was attacked by every lion that I came across.", "Quest5Chat_8") + StartConversation(conversation, NPC, Spawn, "And how did my spell fare?") +end + +function Quest5Chat_8(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "blorpisa_bogchild/halas/gwenevyns_cove/blorpisa_bogchild/blorpisa_bogchild_052.mp3", "", "", 1918897363, 1844692964, Spawn) + AddConversationOption(conversation, "I understand your dilemma.", "Quest5Chat_9") + StartConversation(conversation, NPC, Spawn, "That is terrible! I do apologize! This is a very experimental spell, and I've been working as quickly as I can to get it working so that we do not lose yet more pilgrims to the hazards of New Halas.") +end + +function Quest5Chat_9(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "blorpisa_bogchild/halas/gwenevyns_cove/blorpisa_bogchild/blorpisa_bogchild_053.mp3", "", "", 4064573044, 3063721552, Spawn) + AddConversationOption(conversation, "Yes, I can handle lions, bears and other creatures just fine.", "Quest5Chat_10") + StartConversation(conversation, NPC, Spawn, "Thank you great hero, " .. GetName(Spawn) .. "! Will you continue to help me?") +end + +function Quest5Chat_10(NPC, Spawn) + SetStepComplete(Spawn, FieldTesting, 2) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "blorpisa_bogchild/halas/gwenevyns_cove/blorpisa_bogchild/blorpisa_bogchild_054.mp3", "", "", 1222972448, 2143317846, Spawn) + AddConversationOption(conversation, "I will refresh myself and return to you once I am ready.") + StartConversation(conversation, NPC, Spawn, "I am glad to hear it! I shall incorporate these ice lilies into the ink for my spell. Return to me when you are recovered enough to do a second field test.") +end + +function Quest6Chat_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "blorpisa_bogchild/halas/gwenevyns_cove/blorpisa_bogchild/blorpisa_bogchild_055.mp3", "", "", 2588594475, 1367979821, Spawn) + AddConversationOption(conversation, "Where shall I go to test the spell this time?", "Quest6Chat_3") + AddConversationOption(conversation, "No, I am not yet ready.") + StartConversation(conversation, NPC, Spawn, "It does! Are you ready, brave one?") +end + +function Quest6Chat_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "blorpisa_bogchild/halas/gwenevyns_cove/blorpisa_bogchild/blorpisa_bogchild_056.mp3", "", "", 3655265348, 981674489, Spawn) + AddConversationOption(conversation, "I shall head to Pride Overlook.", "OfferFieldTwo") + StartConversation(conversation, NPC, Spawn, "There is an overhang on the Icemane Plains called Pride Overlook. As the name implies, it is within the lions' territory. It is also near the Great Shelf, which is where I plan on going next, as it is the next stop on the pilgrims' path.") +end + +function Quest6Chat_4(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "I will return to you once I have properly tested your spell.") + StartConversation(conversation, NPC, Spawn, "Pride Overlook is on the Icemane Plains. It is west of Gwenevyn's Cove. I have also refeshed the Frost-born Ward upon you as it seemed to be very weak.") +end + +function Quest6Chat_5(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "blorpisa_bogchild/halas/gwenevyns_cove/blorpisa_bogchild/blorpisa_bogchild_058.mp3", "", "", 3927456133, 2378795664, Spawn) + AddConversationOption(conversation, "Well, it didn't.", "Quest6Chat_6") + StartConversation(conversation, NPC, Spawn, "I am terribly sorry! I really thought it would work this time!") +end + +function Quest6Chat_6(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "blorpisa_bogchild/halas/gwenevyns_cove/blorpisa_bogchild/blorpisa_bogchild_060.mp3", "", "", 1746628301, 1931600273, Spawn) + AddConversationOption(conversation, "Maybe I will see you there.", "Quest6Chat_7") + StartConversation(conversation, NPC, Spawn, "I wonder what could be wrong with it. Hmm... I shall have to find new sources of power for my spell. Fortunately, I am traveling on to the Great Shelf, so perhaps I can continue my work there.") +end + +function Quest6Chat_7(NPC, Spawn) + SetStepComplete(Spawn, FieldTwo, 2) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "blorpisa_bogchild/halas/gwenevyns_cove/blorpisa_bogchild/blorpisa_bogchild_061.mp3", "", "", 2498685853, 3116008120, Spawn) + AddConversationOption(conversation, "Thank you, Blorpisa.") + StartConversation(conversation, NPC, Spawn, "Thank you for all of your help, " .. GetName(Spawn) .. ". I cannot express how truly grateful I am for all you have done. It is not much, but please take this as a bit of payment for your troubles.") + RemoveSpawnAccess(NPC, Spawn) +end + +function OfferArcaneElements(NPC, Spawn) + OfferQuest(NPC, Spawn, ArcaneElements) +end + +function OfferBearBottoms(NPC, Spawn) + OfferQuest(NPC, Spawn, BearBottoms) +end + +function OfferCodChips(NPC, Spawn) + OfferQuest(NPC, Spawn, CodChips) +end + +function OfferEssentialIngredient(NPC, Spawn) + OfferQuest(NPC, Spawn, EssentialIngredient) +end + +function OfferFieldTesting(NPC, Spawn) + OfferQuest(NPC, Spawn, FieldTesting) +end + +function OfferFieldTwo(NPC, Spawn) + OfferQuest(NPC, Spawn, FieldTwo) +end diff --git a/server/SpawnScripts/FrostfangSea/BlorpisaBogchild_(shelf).lua b/server/SpawnScripts/FrostfangSea/BlorpisaBogchild_(shelf).lua new file mode 100644 index 000000000..140421d6b --- /dev/null +++ b/server/SpawnScripts/FrostfangSea/BlorpisaBogchild_(shelf).lua @@ -0,0 +1,398 @@ +--[[ + Script Name : SpawnScripts/FrostfangSea/BlorpisaBogchild_(shelf).lua + Script Purpose : Blorpisa Bogchild located at the Great Shelf + Script Author : theFoof + Script Date : 2013.06.02 + Script Notes : +--]] +local FieldTwo = 24 + +local WeaponChoice = 47 + +local DisarmingRyGorr = 48 + +local PerfectlyMissing = 49 + +local LastIngredient = 50 + +function spawn(NPC) + AddSpawnAccess(NPC, NPC) + SetPlayerProximityFunction(NPC, 50, "SpawnAccess", "SpawnAccess") + ProvidesQuest(NPC, WeaponChoice) + ProvidesQuest(NPC, DisarmingRyGorr) + ProvidesQuest(NPC, PerfectlyMissing) + ProvidesQuest(NPC, LastIngredient) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + if not HasCompletedQuest(Spawn, WeaponChoice) and not HasQuest(Spawn, WeaponChoice) then + PlayFlavor(NPC, "blorpisa_bogchild/halas/great_shelf/blorpisa_bogchild/blorpisa_bogchild_003.mp3", "", "", 3193177069, 1800399458, Spawn) + AddConversationOption(conversation, "Hello, Blorpisa.", "Quest1Chat_1") + StartConversation(conversation, NPC, Spawn, GetName(Spawn) .. "! It is good to see you again!") + elseif GetQuestStep(Spawn, WeaponChoice) == 1 then + PlayFlavor(NPC, "blorpisa_bogchild/halas/great_shelf/blorpisa_bogchild/blorpisa_bogchild_004.mp3", "", "", 4181283850, 2893617958, Spawn) + AddConversationOption(conversation, "No, I have not. Where can I find these weapons?", "Quest1Chat_6") + StartConversation(conversation, NPC, Spawn, "Have you collected the weapons for me?") + elseif GetQuestStep(Spawn, WeaponChoice) == 2 then + PlayFlavor(NPC, "blorpisa_bogchild/halas/great_shelf/blorpisa_bogchild/blorpisa_bogchild_004.mp3", "", "", 4181283850, 2893617958, Spawn) + AddConversationOption(conversation, "Yes, I have the weapons you requested.", "Quest1Chat_7") + StartConversation(conversation, NPC, Spawn, "Have you collected the weapons for me?") + elseif HasCompletedQuest(Spawn, WeaponChoice) and not HasCompletedQuest(Spawn, DisarmingRyGorr) and not HasQuest(Spawn, DisarmingRyGorr) then + PlayFlavor(NPC, "blorpisa_bogchild/halas/great_shelf/blorpisa_bogchild/blorpisa_bogchild_005.mp3", "", "", 1579551723, 976991105, Spawn) + AddConversationOption(conversation, "I am always ready to do anything to ruin the Ry'Gorr plans.", "Quest2Chat_1") + StartConversation(conversation, NPC, Spawn, "Have you rested? Do you feel refreshed and ready to thwart the Ry'Gorr?") + elseif GetQuestStep(Spawn, DisarmingRyGorr) == 1 then + PlayFlavor(NPC, "blorpisa_bogchild/halas/great_shelf/blorpisa_bogchild/blorpisa_bogchild_006.mp3", "", "", 2115424713, 269076828, Spawn) + AddConversationOption(conversation, "Not yet. Where can I find these weapons?", "Quest2Chat_4") + StartConversation(conversation, NPC, Spawn, "Have you cleansed the weapons?") + elseif GetQuestStep(Spawn, DisarmingRyGorr) == 2 then + PlayFlavor(NPC, "blorpisa_bogchild/halas/great_shelf/blorpisa_bogchild/blorpisa_bogchild_006.mp3", "", "", 2115424713, 269076828, Spawn) + AddConversationOption(conversation, "I have cleansed the Ry'Gorr weapons.", "Quest2Chat_5") + StartConversation(conversation, NPC, Spawn, "Have you cleansed the weapons?") + elseif HasCompletedQuest(Spawn, DisarmingRyGorr) and not HasCompletedQuest(Spawn, PerfectlyMissing) and not HasQuest(Spawn, PerfectlyMissing) then + PlayFlavor(NPC, "blorpisa_bogchild/halas/great_shelf/blorpisa_bogchild/blorpisa_bogchild_007.mp3", "", "", 3686037916, 2573543704, Spawn) + AddConversationOption(conversation, "I agree, no one else should die at the claws of the Ry'Gorr.", "Quest3Chat_1") + StartConversation(conversation, NPC, Spawn, "These skirmishes with the Ry'Gorr have had me thinking of new modifications to my Frost-born Ward. It is not enough that the pilgrims be protected from the cold and animal attacks, they must also be protected from the magic that the Ry'Gorr wield.") + elseif GetQuestStep(Spawn, PerfectlyMissing) == 1 then + PlayFlavor(NPC, "blorpisa_bogchild/halas/great_shelf/blorpisa_bogchild/blorpisa_bogchild_008.mp3", "", "", 2666323814, 4844605, Spawn) + AddConversationOption(conversation, "I have not yet found the core. Where can I find the ice slurries?", "Quest3Chat_3") + StartConversation(conversation, NPC, Spawn, "Have you harvested the perfect ice slurry core?") + elseif GetQuestStep(Spawn, PerfectlyMissing) == 2 then + PlayFlavor(NPC, "blorpisa_bogchild/halas/great_shelf/blorpisa_bogchild/blorpisa_bogchild_008.mp3", "", "", 2666323814, 4844605, Spawn) + AddConversationOption(conversation, "I have found the perfect ice slurry core.", "Quest3Chat_4") + StartConversation(conversation, NPC, Spawn, "Have you harvested the perfect ice slurry core?") + elseif HasCompletedQuest(Spawn, PerfectlyMissing) and not HasCompletedQuest(Spawn, LastIngredient) and not HasQuest(Spawn, LastIngredient) then + PlayFlavor(NPC, "blorpisa_bogchild/halas/great_shelf/blorpisa_bogchild/blorpisa_bogchild_009.mp3", "", "", 3631519683, 72729038, Spawn) + AddConversationOption(conversation, "Is there a problem?", "Quest4Chat_1") + StartConversation(conversation, NPC, Spawn, "Mithaniel's gall!") + elseif GetQuestStep(Spawn, LastIngredient) == 1 then + PlayFlavor(NPC, "blorpisa_bogchild/halas/great_shelf/blorpisa_bogchild/blorpisa_bogchild_010.mp3", "", "", 1541998982, 3704557731, Spawn) + AddConversationOption(conversation, "No. Where can I find the aged ice slurries?", "Quest4Chat_5") + StartConversation(conversation, NPC, Spawn, "Have you collected the aged ice slurry core?") + elseif GetQuestStep(Spawn, LastIngredient) == 2 then + PlayFlavor(NPC, "blorpisa_bogchild/halas/great_shelf/blorpisa_bogchild/blorpisa_bogchild_010.mp3", "", "", 1541998982, 3704557731, Spawn) + AddConversationOption(conversation, "I have the aged ice slurry core.", "Quest4Chat_6") + StartConversation(conversation, NPC, Spawn, "Have you collected the aged ice slurry core?") + elseif HasCompletedQuest(Spawn, LastIngredient) then + PlayFlavor(NPC, "", "Thanks for all of your help!", "thanks", 0, 0, Spawn) + end +end + +function SpawnAccess(NPC, Spawn) + if HasCompletedQuest(Spawn, FieldTwo) then + AddSpawnAccess(NPC, Spawn) + end +end + +function Quest1Chat_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "blorpisa_bogchild/halas/great_shelf/blorpisa_bogchild/blorpisa_bogchild_011.mp3", "", "", 2022397228, 290072007, Spawn) + AddConversationOption(conversation, "A bit cramped, actually.", "Quest1Chat_2") + StartConversation(conversation, NPC, Spawn, "How do you find the Great Shelf?") +end + +function Quest1Chat_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "blorpisa_bogchild/halas/great_shelf/blorpisa_bogchild/blorpisa_bogchild_012.mp3", "", "", 4283018282, 2903892824, Spawn) + AddConversationOption(conversation, "I think they stomp more than crawl.", "Quest1Chat_3") + StartConversation(conversation, NPC, Spawn, "Agreed! I have not been able to hop about much, what with the Ry'Gorr orcs crawling all over this area.") +end + +function Quest1Chat_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "blorpisa_bogchild/halas/great_shelf/blorpisa_bogchild/blorpisa_bogchild_014.mp3", "", "", 736205101, 798079277, Spawn) + AddConversationOption(conversation, "You want me to loot corpses?", "Quest1Chat_4") + StartConversation(conversation, NPC, Spawn, "The coldain and the Ry'Gorr orcs are fighting a fierce battle southeast of here. I know you cannot take the weapons from the live coldain, but I am sure their fallen dead wouldn't mind you collecting their dormant weapons.") +end + +function Quest1Chat_4(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "blorpisa_bogchild/halas/great_shelf/blorpisa_bogchild/blorpisa_bogchild_015.mp3", "", "", 3812649727, 4013790608, Spawn) + AddConversationOption(conversation, "Well, in that case, I will help you.", "Quest1Chat_5") + AddConversationOption(conversation, "I'm still not looting corpses, I don't care how worthy the cause may be.") + StartConversation(conversation, NPC, Spawn, "For a worthy cause! Any weapons you return to me I can enchant to do additional damage to the Ry'Gorr. I know they are resistant to ice, so I think a fire enchant would really hurt them.") +end + +function Quest1Chat_5(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "blorpisa_bogchild/halas/great_shelf/blorpisa_bogchild/blorpisa_bogchild_016.mp3", "", "", 717321044, 3158147617, Spawn) + AddConversationOption(conversation, "I shall return to you once I have collected the weapons.", "OfferWeaponChoice") + StartConversation(conversation, NPC, Spawn, "I'm glad that you have agreed to help the coldain. You can find the slain coldain southeast of here, upon a great battlefield.") +end + +function Quest1Chat_6(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "Thanks, Blorpisa.") + StartConversation(conversation, NPC, Spawn, "You can find the weapons on the slain coldain that lie on the battlefield southeast of the Great Shelf.") +end + +function Quest1Chat_7(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "blorpisa_bogchild/halas/great_shelf/blorpisa_bogchild/blorpisa_bogchild_017.mp3", "", "", 4187444416, 2657798398, Spawn) + AddConversationOption(conversation, "I'm glad that I was able to help. The Ry'Gorr orcs are a scourge upon this land.", "Quest1Chat_8") + StartConversation(conversation, NPC, Spawn, "Thank you, " .. GetName(Spawn) .. ". I will begin enchanting these weapons immediately and send them to the coldain as soon as I am able.") +end + +function Quest1Chat_8(NPC, Spawn) + SetStepComplete(Spawn, WeaponChoice, 2) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "blorpisa_bogchild/halas/great_shelf/blorpisa_bogchild/blorpisa_bogchild_019.mp3", "", "", 3213450920, 2902031584, Spawn) + AddConversationOption(conversation, "I will return once I am rested.") + StartConversation(conversation, NPC, Spawn, "They are most vile indeed, preying upon pilgrims and sinking ships. If you want to continue to thwart the Ry'Gorr, return to me once you have eaten and rested. I will have more work for you then.") +end + +function Quest2Chat_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "blorpisa_bogchild/halas/great_shelf/blorpisa_bogchild/blorpisa_bogchild_020.mp3", "", "", 1335665620, 3336740356, Spawn) + AddConversationOption(conversation, "What do you need me to do?", "Quest2Chat_2") + StartConversation(conversation, NPC, Spawn, "It is good to see you committed to fighting the Ry'Gorr. I left the offensive against the Ry'Gorr to others but now I see that I too must do my part to fight them.") +end + +function Quest2Chat_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "blorpisa_bogchild/halas/great_shelf/blorpisa_bogchild/blorpisa_bogchild_021.mp3", "", "", 4091770286, 182089722, Spawn) + AddConversationOption(conversation, "That sounds very awful.", "Quest2Chat_3") + StartConversation(conversation, NPC, Spawn, "The Ry'Gorr weapons are imbued with a dark miasma, one that must be cleansed. If the weapons are left as they are, they will taint the very ground and all of the creatures near.") +end + +function Quest2Chat_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "blorpisa_bogchild/halas/great_shelf/blorpisa_bogchild/blorpisa_bogchild_022.mp3", "", "", 4197171883, 263915525, Spawn) + AddConversationOption(conversation, "If this must be done, then I shall do it.", "Quest2Chat_4") + AddConversationOption(conversation, "This sounds dangerous, I must prepare myself before I can continue. I will return to you when I am ready.") + StartConversation(conversation, NPC, Spawn, "It is very awful! Thankfully the Ry'Gorr are rather stupid when it comes to more complex spells and so it can be easily undone. I have made a poultice that will cleanse the weapons, dissolving the miasma.") +end + +function Quest2Chat_4(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "blorpisa_bogchild/halas/great_shelf/blorpisa_bogchild/blorpisa_bogchild_025.mp3", "", "", 1812986023, 1861136256, Spawn) + AddConversationOption(conversation, "I will return once I have cleansed the weapons.", "OfferDisarmingRyGorr") + StartConversation(conversation, NPC, Spawn, "The weapons lay on the battlefield southeast of here.") +end + + +function Quest2Chat_5(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "blorpisa_bogchild/halas/great_shelf/blorpisa_bogchild/blorpisa_bogchild_024.mp3", "", "", 3608040156, 1455978587, Spawn) + AddConversationOption(conversation, "It worked very well, so well that it dissolved the Ry'Gorr weapons before my eyes.", "Quest2Chat_6") + StartConversation(conversation, NPC, Spawn, "So the poultice worked?") +end + +function Quest2Chat_6(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "blorpisa_bogchild/halas/great_shelf/blorpisa_bogchild/blorpisa_bogchild_026.mp3", "", "", 771316187, 1400627586, Spawn) + AddConversationOption(conversation, "I am just doing my job.", "Quest2Chat_7") + StartConversation(conversation, NPC, Spawn, "Then the miasma must have been very deep. I am glad that you are here to help us, thanks to you a great danger has been averted.") +end + +function Quest2Chat_7(NPC, Spawn) + SetStepComplete(Spawn, DisarmingRyGorr, 2) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "blorpisa_bogchild/halas/great_shelf/blorpisa_bogchild/blorpisa_bogchild_027.mp3", "", "", 1176369371, 2813456869, Spawn) + AddConversationOption(conversation, "I appreciate the gesture, Blorpisa.") + StartConversation(conversation, NPC, Spawn, "Even so, it is one few can do. Thank you, " .. GetName(Spawn) .. ". Please, accept this coin as a thank you from me.") +end + +function Quest3Chat_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "blorpisa_bogchild/halas/great_shelf/blorpisa_bogchild/blorpisa_bogchild_028.mp3", "", "", 3909433831, 280040798, Spawn) + AddConversationOption(conversation, "Do you need me to collect it for you?", "Quest3Chat_2") + StartConversation(conversation, NPC, Spawn, "To that end, I have studied my texts and have determined the ingredient I need to begin to modify the spell.") +end + +function Quest3Chat_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "blorpisa_bogchild/halas/great_shelf/blorpisa_bogchild/blorpisa_bogchild_029.mp3", "", "", 1151875239, 4282449451, Spawn) + AddConversationOption(conversation, "I shall search for the perfect ice slurry core so that you may complete your spell.", "OfferPerfectlyMissing") + AddConversationOption(conversation, "Forget it, I'm not killing a bunch of ice slurries.") + StartConversation(conversation, NPC, Spawn, "I do. It is called the perfect ice slurry core. You can harvest it from the ice slurries, but it is rare. Many times you will kill an ice slurry, only to find that its core has a flaw.") +end + +function Quest3Chat_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "blorpisa_bogchild/halas/great_shelf/blorpisa_bogchild/blorpisa_bogchild_030.mp3", "", "", 1741611934, 1901038615, Spawn) + AddConversationOption(conversation, "I shall return as soon as I find the perfect core.") + StartConversation(conversation, NPC, Spawn, "You can find the ice slurries on the hill south of the Great Shelf. Please hurry. The sooner you return with the core, the sooner I can perfect the spell to protect the pilgrims.") +end + +function Quest3Chat_4(NPC, Spawn) + SetStepComplete(Spawn, PerfectlyMissing, 2) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "blorpisa_bogchild/halas/great_shelf/blorpisa_bogchild/blorpisa_bogchild_031.mp3", "", "", 826714400, 1486587557, Spawn) + AddConversationOption(conversation, "Do you need my assistance further?", "Quest3Chat_5") + StartConversation(conversation, NPC, Spawn, "I shall incorporate this perfect core into my spell. Thank you for harvesting this perfect ice slurry core.") +end + +function Quest3Chat_5(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "blorpisa_bogchild/halas/great_shelf/blorpisa_bogchild/blorpisa_bogchild_033.mp3", "", "", 754123351, 1435387384, Spawn) + AddConversationOption(conversation, "I shall return in a little while.") + StartConversation(conversation, NPC, Spawn, "I do not know. Give me some time to incorporate this core and then return to me.") +end + +function Quest4Chat_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "blorpisa_bogchild/halas/great_shelf/blorpisa_bogchild/blorpisa_bogchild_034.mp3", "", "", 2303152841, 514356885, Spawn) + AddConversationOption(conversation, "Please tell me I don't have to test it.", "Quest4Chat_2") + StartConversation(conversation, NPC, Spawn, "This Frost-born Ward isn't taking to the modifications I made. It keeps having unexpected outcomes.") +end + +function Quest4Chat_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "blorpisa_bogchild/halas/great_shelf/blorpisa_bogchild/blorpisa_bogchild_035.mp3", "", "", 2152784278, 4092517503, Spawn) + AddConversationOption(conversation, "Perhaps there was something wrong with the core?", "Quest4Chat_3") + StartConversation(conversation, NPC, Spawn, "No, you do not have to test it. I just don't understand why the perfect ice slurry core didn't work!") +end + +function Quest4Chat_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "blorpisa_bogchild/halas/great_shelf/blorpisa_bogchild/blorpisa_bogchild_036.mp3", "", "", 2421741424, 974749894, Spawn) + AddConversationOption(conversation, "Well, are there any other types of ice slurries?", "Quest4Chat_4") + StartConversation(conversation, NPC, Spawn, "How could there be something wrong with it?! It was perfect!") +end + +function Quest4Chat_4(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "blorpisa_bogchild/halas/great_shelf/blorpisa_bogchild/blorpisa_bogchild_037.mp3", "", "", 3543415032, 2306350142, Spawn) + AddConversationOption(conversation, "I will get you an aged ice slurry core.", "OfferLastIngredient") + AddConversationOption(conversation, "Sorry, I'm busy. Perhaps later.") + StartConversation(conversation, NPC, Spawn, "There are! There are aged ice slurries, but I thought their cores would be too old to use. You could try to obtain one for me, it couldn't hurt to try.") +end + + +function Quest4Chat_5(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "blorpisa_bogchild/halas/great_shelf/blorpisa_bogchild/blorpisa_bogchild_038.mp3", "", "", 2165797862, 1375729873, Spawn) + AddConversationOption(conversation, "I shall return with an aged ice slurry core.") + StartConversation(conversation, NPC, Spawn, "The aged ice slurries are in the same place as the others. They gather on the hill south of the Great Shelf.") +end + +function Quest4Chat_6(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "blorpisa_bogchild/halas/great_shelf/blorpisa_bogchild/blorpisa_bogchild_039.mp3", "", "", 469439028, 3249363787, Spawn) + AddConversationOption(conversation, "Spell scribing seems fascinating.", "Quest4Chat_7") + StartConversation(conversation, NPC, Spawn, "Quickly, I must incorporate it into the spell ink before the core loses its potency.") +end + +function Quest4Chat_7(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "blorpisa_bogchild/halas/great_shelf/blorpisa_bogchild/blorpisa_bogchild_041.mp3", "", "", 2408705067, 2217536445, Spawn) + AddConversationOption(conversation, "So how's the Frost-born Ward coming along?", "Quest4Chat_8") + StartConversation(conversation, NPC, Spawn, "Oh yes, most fascinating, until you turn yourself into an imp, or sweat fire.") +end + +function Quest4Chat_8(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "blorpisa_bogchild/halas/great_shelf/blorpisa_bogchild/blorpisa_bogchild_042.mp3", "", "", 829550711, 3566915207, Spawn) + AddConversationOption(conversation, "Is that it?", "Quest4Chat_9") + StartConversation(conversation, NPC, Spawn, "It seems to be combining successfully.") +end + +function Quest4Chat_9(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "blorpisa_bogchild/halas/great_shelf/blorpisa_bogchild/blorpisa_bogchild_043.mp3", "", "", 1150736225, 953291323, Spawn) + AddConversationOption(conversation, "No more tests? No more running around?", "Quest4Chat_10") + StartConversation(conversation, NPC, Spawn, "For now.") +end + +function Quest4Chat_10(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "blorpisa_bogchild/halas/great_shelf/blorpisa_bogchild/blorpisa_bogchild_044.mp3", "", "", 3571375839, 1539014597, Spawn) + AddConversationOption(conversation, "Gee, I don't know what to say...", "Quest4Chat_11") + StartConversation(conversation, NPC, Spawn, "I think not. I shall test this on myself, I am confident it will work. When it does, I will produce the parchments needed. Thank you for everything, " .. GetName(Spawn) .. ". Between helping me scribe this spell and thwarting the Ry'Gorr, you have helped the people of New Halas more than you can know.") +end + +function Quest4Chat_11(NPC, Spawn) + SetStepComplete(Spawn, LastIngredient, 2) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "blorpisa_bogchild/halas/great_shelf/blorpisa_bogchild/blorpisa_bogchild_045.mp3", "", "", 4192880371, 50904844, Spawn) + AddConversationOption(conversation, "Thank you, Blorpisa. I am most honored.") + StartConversation(conversation, NPC, Spawn, "Please, accept this as a token of our thanks.") +end + +function OfferWeaponChoice(NPC, Spawn) + OfferQuest(NPC, Spawn, WeaponChoice) +end + +function OfferDisarmingRyGorr(NPC, Spawn) + if not HasQuest(Spawn, DisarmingRyGorr) and not HasCompletedQuest(Spawn, DisarmingRyGorr) then + OfferQuest(NPC, Spawn, DisarmingRyGorr) + end +end + +function OfferPerfectlyMissing(NPC, Spawn) + OfferQuest(NPC, Spawn, PerfectlyMissing) +end + +function OfferLastIngredient(NPC, Spawn) + OfferQuest(NPC, Spawn, LastIngredient) +end \ No newline at end of file diff --git a/server/SpawnScripts/FrostfangSea/BorgardGoldenswill.lua b/server/SpawnScripts/FrostfangSea/BorgardGoldenswill.lua new file mode 100644 index 000000000..ef41fc6c1 --- /dev/null +++ b/server/SpawnScripts/FrostfangSea/BorgardGoldenswill.lua @@ -0,0 +1,25 @@ +--[[ + Script Name : SpawnScripts/FrostfangSea/BorgardGoldenswill.lua + Script Purpose : Borgard Goldenswill + Script Author : theFoof + Script Date : 2013.10.30 + Script Notes : +--]] + +function spawn(NPC) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + + local choice = math.random(1,2) + if choice == 1 then + PlayFlavor(NPC, "", "What'll it be, citizen?", "nod", 1689589577, 4560189, Spawn) + else + PlayFlavor(NPC, "", "Sit a spell and have yarself a frothing brew or two!", "nod", 1689589577, 4560189, Spawn) + end +end \ No newline at end of file diff --git a/server/SpawnScripts/FrostfangSea/BoryaStonehide.lua b/server/SpawnScripts/FrostfangSea/BoryaStonehide.lua new file mode 100644 index 000000000..61e84016e --- /dev/null +++ b/server/SpawnScripts/FrostfangSea/BoryaStonehide.lua @@ -0,0 +1,69 @@ +--[[ + Script Name : SpawnScripts/FrostfangSea/BoryaStonehide.lua + Script Purpose : guardian trainer + Script Author : theFoof + Script Date : 2013.9.24 + Script Notes : +--]] + +local GUARDIAN = 3 + +function spawn(NPC) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + if GetClass(Spawn) == GUARDIAN then + conversation = CreateConversation() + PlayFlavor(NPC, "", "", "hello", 0, 0, Spawn) + AddConversationOption(conversation, "What advice can you give a fellow guardian?", "GuardChat1") + AddConversationOption(conversation, "It does, doesn't it? Good day.") + StartConversation(conversation, NPC, Spawn, "I see a familiar fire in your eyes, warrior. The same unrelenting will that resides within all guardians!") + else + PlayFlavor(NPC, "", "I hope you're ready for some serious training!", "hello", 0, 0, Spawn) + end +end + +function GuardChat1(NPC, Spawn) + conversation = CreateConversation() + FaceTarget(NPC, Spawn) + + AddConversationOption(conversation, "That's interesting.", "GuardChat2") + StartConversation(conversation, NPC, Spawn, "We are often considered the last wall of defense, and for good reason. We protect our allies with unflinching resolve, as that is our call. We protect, above all!") +end + +function GuardChat2(NPC, Spawn) + conversation = CreateConversation() + FaceTarget(NPC, Spawn) + + AddConversationOption(conversation, "That will be useful!", "GuardChat3") + StartConversation(conversation, NPC, Spawn, "And when you are faced with multiple foes, prioritize your opponents. It often behooves you and your group to pit yourself against the most powerful opponent.") +end + +function GuardChat3(NPC, Spawn) + conversation = CreateConversation() + FaceTarget(NPC, Spawn) + + AddConversationOption(conversation, "That's good.", "GuardChat4") + StartConversation(conversation, NPC, Spawn, "We leave the more offensive style attacks to others who lack the fortitude to take a beating and defend, but this doesn't mean we can't swing a weapon!") +end + +function GuardChat4(NPC, Spawn) + conversation = CreateConversation() + FaceTarget(NPC, Spawn) + + AddConversationOption(conversation, "That's useful to know!", "GuardChat5") + StartConversation(conversation, NPC, Spawn, "If you find items that add to your strength or stamina, be sure to get them! Strength increases the amount of damage your attacks can inflict on others and raises your ability to carry heavy weight. Your stamina affects your health. This is crucial.") +end + +function GuardChat5(NPC, Spawn) + conversation = CreateConversation() + FaceTarget(NPC, Spawn) + + AddConversationOption(conversation, "Thank you for the advice.") + StartConversation(conversation, NPC, Spawn, "And protect yourself with a good set of plate mail, " .. GetName(Spawn) .. ". The armor would be considered too heavy by others, but with your focus on strength such highly protective armor has no downside.") +end \ No newline at end of file diff --git a/server/SpawnScripts/FrostfangSea/BroganMacLellan.lua b/server/SpawnScripts/FrostfangSea/BroganMacLellan.lua new file mode 100644 index 000000000..c29cae37d --- /dev/null +++ b/server/SpawnScripts/FrostfangSea/BroganMacLellan.lua @@ -0,0 +1,198 @@ +--[[ + Script Name : SpawnScripts/FrostfangSea/BroganMacLellan.lua + Script Purpose : Brogan MacLellan + Script Author : theFoof + Script Date : 2013.08.19 + Script Notes : +--]] + +local TrustIssues = 85 + +local TrustedReferral = 86 + +function spawn(NPC) + ProvidesQuest(NPC, TrustIssues) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + if not HasCompletedQuest(Spawn, TrustIssues) and not HasQuest(Spawn, TrustIssues) then + PlayFlavor(NPC, "brogan_maclellan/halas/new_halas_guard_house/brogan_maclellan001.mp3", "", "", 2714538944, 2338955741, Spawn) + AddConversationOption(conversation, "It isn't for everyone.", "Quest1Chat_1") + AddConversationOption(conversation, "'Paradise' is subjective.", "Quest1Chat_4") + AddConversationOption(conversation, "The population is mostly barbarians, right?", "Quest1Chat_5") + AddConversationOption(conversation, "I'm not interested in figuring this out.") + StartConversation(conversation, NPC, Spawn, "It's a diverse group of fellers living together on this frigid rock. There are a number of folks like me, sure. But what do the other inhabitants see in Erollis? Why do they stay here? It's not like this is a verdant paradise.") + elseif HasQuest(Spawn, TrustIssues) and GetQuestStep(Spawn, TrustIssues) < 5 then + PlayFlavor(NPC, "", "Talk to them, and find out why they're here.", "hello", 0, 0, Spawn) + elseif GetQuestStep(Spawn, TrustIssues) == 5 then + AddConversationOption(conversation, "They've all got valid reasons for staying in Erollis.", "Quest1Chat_9") + AddConversationOption(conversation, "There is a rich history for this place, and each newcomer is a part of it.", "Quest1Chat_9") + AddConversationOption(conversation, 'Not surprisingly, everyone has their own motivation and "angle".', "Quest1Chat_9") + StartConversation(conversation, NPC, Spawn, "Back already, " .. GetName(Spawn) .. "? Well, don't be shy. What did you find out?") + elseif HasCompletedQuest(Spawn, TrustIssues) and not HasCompletedQuest(Spawn, TrustedReferral) and not HasQuest(Spawn, TrustedReferral) then + Quest2Chat_1(NPC, Spawn) + end +end + +function Quest1Chat_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "brogan_maclellan/halas/new_halas_guard_house/brogan_maclellan003.mp3", "", "", 111727266, 1713011810, Spawn) + AddConversationOption(conversation, "Marr blessed this place.", "Quest1Chat_2") + AddConversationOption(conversation, "Some find frontier life exciting.", "Quest1Chat_6") + AddConversationOption(conversation, "I prefer natural skins and furs to cotton fabric.", "Quest1Chat_7") + AddConversationOption(conversation, "Perhaps some other time. Goodbye.") + StartConversation(conversation, NPC, Spawn, "You've got that right. And I'm not just talking about the obvious need for skins and furs, which aren't everyone's mug of ale. Erollis is isolated, and it's a hostile environment.") +end + +function Quest1Chat_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "brogan_maclellan/halas/new_halas_guard_house/brogan_maclellan006.mp3", "", "", 385456101, 752051368, Spawn) + AddConversationOption(conversation, "I wonder why the others are here.", "Quest1Chat_3") + AddConversationOption(conversation, "I'm not interested in figuring this out.") + StartConversation(conversation, NPC, Spawn, "Yeah, he plopped down a fetching statue and showed pilgrims the way here, but that doesn't make the environment any more palatable.") +end + +function Quest1Chat_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "brogan_maclellan/halas/new_halas_guard_house/brogan_maclellan005.mp3", "", "", 3080293935, 4050287444, Spawn) + AddConversationOption(conversation, "Sure. I wouldn't mind learning their motives as well.", "OfferTrustIssues") + AddConversationOption(conversation, "Why not? Could meet some interesting people.", "OfferTrustIssues") + AddConversationOption(conversation, "Might as well. I don't trust them either.", "OfferTrustIssues") + AddConversationOption(conversation, "I'd rather not get too close to strangers.") + StartConversation(conversation, NPC, Spawn, "Yeah, I'd like to learn each major faction's angle. Call me paranoid, but I'd feel safer knowing more about the motivations of the folks that share the town. Care to do a little asking around?") +end + +function Quest1Chat_4(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "brogan_maclellan/halas/new_halas_guard_house/brogan_maclellan002.mp3", "", "", 1097446882, 2575906543, Spawn) + AddConversationOption(conversation, "I wonder why the others are here.", "Quest1Chat_3") + AddConversationOption(conversation, "I'm not interested in figuring this out.") + StartConversation(conversation, NPC, Spawn, "True. It looks an awful lot like the Halas of old, or so I've gathered, which is what drew me here. You could say it's my paradise. But not even my people can agree to appreciate this weather.") +end + +function Quest1Chat_5(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "brogan_maclellan/halas/new_halas_guard_house/brogan_maclellan004.mp3", "", "", 1786838303, 2147071004, Spawn) + AddConversationOption(conversation, "I wonder why the others are here.", "Quest1Chat_3") + AddConversationOption(conversation, "I'm not interested in figuring this out.") + StartConversation(conversation, NPC, Spawn, "Eh. We make up around half the population, give or take. The rest is primarily frogloks and coldain with a smattering of other offshore races mixed in.") +end + +function Quest1Chat_6(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "brogan_maclellan/halas/new_halas_guard_house/brogan_maclellan007.mp3", "", "", 1338892240, 118117761, Spawn) + AddConversationOption(conversation, "It might be worth looking into people's motivations.", "Quest1Chat_3") + AddConversationOption(conversation, "I'm not interested in figuring this out.") + StartConversation(conversation, NPC, Spawn, "The thrill-seekers and folks looking to start a new life, possibly. Though, I don't trust the former and the latter make me nervous.") +end + +function Quest1Chat_7(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "brogan_maclellan/halas/new_halas_guard_house/brogan_maclellan008.mp3", "", "", 618404562, 3809310014, Spawn) + AddConversationOption(conversation, "And it's comfortable, to boot!", "Quest1Chat_8") + AddConversationOption(conversation, "But fashion alone isn't a reason to live on Erollis, is it?", "Quest1Chat_3") + AddConversationOption(conversation, "I'm not interested in figuring this out.") + StartConversation(conversation, NPC, Spawn, "You and me both. There's nothing like supple hide and animal hair to ward off the winter's chill, especially when it comes to footwear.") +end + +function Quest1Chat_8(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "Glad you liked it.", "Quest1Chat_3") + AddConversationOption(conversation, "I'm too busy chuckling to go on. Let me catch my breath.") + StartConversation(conversation, NPC, Spawn, "If words were weapons, that pun would have slain me where I stood.") +end + +function Quest1Chat_9(NPC, Spawn) + SetStepComplete(Spawn, TrustIssues, 5) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "I'm not sure that can be helped.", "Quest2Chat_1") + AddConversationOption(conversation, "You have real trust issues, MacLellan.", "Quest2Chat_1") + AddConversationOption(conversation, "Trust is a commodity that we can't always afford.", "Quest2Chat_1") + StartConversation(conversation, NPC, Spawn, "Hmm. I supposed we're all new here, in one way or another, but I still don't trust the others.") +end + +function Quest2Chat_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "Is there anything else I can do for you?", "Quest2Chat_2") + AddConversationOption(conversation, "I'm glad I could. Good day, Brogan.") + StartConversation(conversation, NPC, Spawn, "I may be reluctant to trust the others here, but you've proven yourself to me.") +end + +function Quest2Chat_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "Sure.", "Quest2Chat_5") + AddConversationOption(conversation, "I hadn't thought of it.", "Quest2Chat_4") + AddConversationOption(conversation, "No. Not yet.", "Quest2Chat_3") + StartConversation(conversation, NPC, Spawn, "Not for me, " .. GetName(Spawn) .. ". Are you willing to travel to another land?") +end + +function Quest2Chat_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + PlayFlavor(NPC, "", "Well, come back to me when you are looking to travel.", "agree", 0, 0, Spawn) +end + +function Quest2Chat_4(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "More coin would be useful.", "Quest2Chat_5") + AddConversationOption(conversation, "That's true.", "Quest2Chat_3") + StartConversation(conversation, NPC, Spawn, "Well, when you need more coin you will.") +end + +function Quest2Chat_5(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "I can do that.", "OfferTrustedReferral") + AddConversationOption(conversation, "Where's that?", "Quest2Chat_6") + AddConversationOption(conversation, "I have no plans to travel to Butcherblock.") + StartConversation(conversation, NPC, Spawn, "Then I suggest you speak with my cousin, Belinda. She's at the docks in the Butcherblock Mountains.") +end + +function Quest2Chat_6(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "I can do that.", "OfferTrustedReferral") + AddConversationOption(conversation, "I have no plans to travel to Butcherblock.") + StartConversation(conversation, NPC, Spawn, "Butcherblock Mountains is on the continent of Faydwer. You can travel there by taking the griffon down at the Erollis docks.") +end + +function OfferTrustedReferral(NPC, Spawn) + OfferQuest(NPC, Spawn, TrustedReferral) +end + +function OfferTrustIssues(NPC, Spawn) + SendPopUpMessage(Spawn, "This quest is not implemented yet. Requires NPC in Butcherblock.", 255, 0, 0) + --OfferQuest(NPC, Spawn, TrustIssues) +end \ No newline at end of file diff --git a/server/SpawnScripts/FrostfangSea/BronlaStonehide.lua b/server/SpawnScripts/FrostfangSea/BronlaStonehide.lua new file mode 100644 index 000000000..ca7c71c58 --- /dev/null +++ b/server/SpawnScripts/FrostfangSea/BronlaStonehide.lua @@ -0,0 +1,61 @@ +--[[ + Script Name : SpawnScripts/FrostfangSea/BronlaStonehide.lua + Script Purpose : fury trainer in Halas + Script Author : theFoof + Script Date : 2013.9.24 + Script Notes : +--]] + +local FURY = 17 + +function spawn(NPC) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + if GetClass(Spawn) == FURY then + conversation = CreateConversation() + PlayFlavor(NPC, "", "", "hello", 0, 0, Spawn) + AddConversationOption(conversation, "What advice do you have for another fury?", "FuryChat1") + AddConversationOption(conversation, "Thank you, but I must be going.") + StartConversation(conversation, NPC, Spawn, "Lo, and behold, another druid stands before me. Welcome, fellow fury of the storm!") + else + PlayFlavor(NPC, "", "Fresh dreams to you!", "hello", 0, 0, Spawn) + end +end + +function FuryChat1(NPC, Spawn) + conversation = CreateConversation() + FaceTarget(NPC, Spawn) + + AddConversationOption(conversation, "That's useful to know!", "FuryChat2") + StartConversation(conversation, NPC, Spawn, "If you find items that add to your wisdom or stamina, then take them! Wisdom increases the amount of damage your spells can inflict on others and raises your defenses against spell damage inflicted on you. Your stamina affects your health. This is crucial.") +end + +function FuryChat2(NPC, Spawn) + conversation = CreateConversation() + FaceTarget(NPC, Spawn) + + AddConversationOption(conversation, "That's interesting.", "FuryChat3") + StartConversation(conversation, NPC, Spawn, "The primal forces of nature we wield can be used to help mend the wounded, which is beneficial in any battle! They can also be used to enhance the physical attributes and mystical might of our allies, making the attacks of our party members even more fearsome.") +end + +function FuryChat3(NPC, Spawn) + conversation = CreateConversation() + FaceTarget(NPC, Spawn) + + AddConversationOption(conversation, "I agree, that will be useful.", "FuryChat4") + StartConversation(conversation, NPC, Spawn, "Although we skillfully exert the healing and bolstering aspects of nature, we do not want to ignore their effectiveness in inflicting destruction! Lightning and fire can be quite effective in cutting down a formidable foe!") +end + +function FuryChat4(NPC, Spawn) + conversation = CreateConversation() + FaceTarget(NPC, Spawn) + + AddConversationOption(conversation, "Thank you for the advice.") + StartConversation(conversation, NPC, Spawn, "And protect yourself as best you can in leather, " .. GetName(Spawn) .. ". With such aggressive powers of nature at your hands, you need not waste any energy on encumbering suits of armor.") +end \ No newline at end of file diff --git a/server/SpawnScripts/FrostfangSea/BrropGloryblade.lua b/server/SpawnScripts/FrostfangSea/BrropGloryblade.lua new file mode 100644 index 000000000..5e3e30d1b --- /dev/null +++ b/server/SpawnScripts/FrostfangSea/BrropGloryblade.lua @@ -0,0 +1,61 @@ +--[[ + Script Name : SpawnScripts/FrostfangSea/BrropGloryblade.lua + Script Purpose : templar trainer in Halas + Script Author : theFoof + Script Date : 2013.9.24 + Script Notes : +--]] + +local TEMPLAR = 13 + +function spawn(NPC) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + if GetClass(Spawn) == TEMPLAR then + conversation = CreateConversation() + PlayFlavor(NPC, "", "", "hello", 0, 0, Spawn) + AddConversationOption(conversation, "What advice do you have for another templar?", "TempChat1") + AddConversationOption(conversation, "That I am! But I have no time to chat.") + StartConversation(conversation, NPC, Spawn, "Ah, another defender of the faith. Welcome, my fellow templar!") + else + PlayFlavor(NPC, "", "Greetings!", "hello", 0, 0, Spawn) + end +end + +function TempChat1(NPC, Spawn) + conversation = CreateConversation() + FaceTarget(NPC, Spawn) + + AddConversationOption(conversation, "That's useful to know!", "TempChat2") + StartConversation(conversation, NPC, Spawn, "If you find items that add to your wisdom or stamina, then take them! Wisdom increases the amount of damage your spells can inflict on others and raises your defenses against spell damage inflicted on you. Your stamina affects your health. This is crucial.") +end + +function TempChat2(NPC, Spawn) + conversation = CreateConversation() + FaceTarget(NPC, Spawn) + + AddConversationOption(conversation, "That's interesting.", "TempChat3") + StartConversation(conversation, NPC, Spawn, "We are known for protecting ourselves and our allies with reactive heals. These are spells cast on an individual that lay in wait until they have damage inflicted upon them. At which point the spell responds and a heal is given to the individual.") +end + +function TempChat3(NPC, Spawn) + conversation = CreateConversation() + FaceTarget(NPC, Spawn) + + AddConversationOption(conversation, "That will be useful!", "TempChat4") + StartConversation(conversation, NPC, Spawn, "But the divine power that we are blessed with is not limited to mending the wounded or curing the suffering of the afflicted. It can also help to defend against attack or be wielded offensively, to smite our enemies!") +end + +function TempChat4(NPC, Spawn) + conversation = CreateConversation() + FaceTarget(NPC, Spawn) + + AddConversationOption(conversation, "Thank you for the advice.") + StartConversation(conversation, NPC, Spawn, "And protect yourself with a good set of plate mail, " .. GetName(Spawn) .. ". The armor may be cumbersome, but its protective properties will be necessary, as it takes time to beseech our divine powers.") +end \ No newline at end of file diff --git a/server/SpawnScripts/FrostfangSea/BulltheCrafty.lua b/server/SpawnScripts/FrostfangSea/BulltheCrafty.lua new file mode 100644 index 000000000..1b765a2b9 --- /dev/null +++ b/server/SpawnScripts/FrostfangSea/BulltheCrafty.lua @@ -0,0 +1,80 @@ +--[[ + Script Name : SpawnScripts/FrostfangSea/BulltheCrafty.lua + Script Purpose : Bull the Crafty + Script Author : Foof + Script Date : 2013.05.16 + Script Notes : +--]] + +local HarvestTutorial = 11 + +local HadAHammer = 12 + +function spawn(NPC) + SetPlayerProximityFunction(NPC, 10, "InRange", "LeaveRange") + ProvidesQuest(NPC, HadAHammer) +end + +function respawn(NPC) + spawn(NPC) +end + +function InRange(NPC, Spawn) +end + +function LeaveRange(NPC, Spawn) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + if HasCompletedQuest(Spawn, HarvestTutorial) and HasQuest(Spawn, HadAHammer) == false and HasCompletedQuest(Spawn, HadAHammer) == false then + Quest1Chat_1(NPC, Spawn) + elseif GetQuestStep(Spawn, HadAHammer) == 1 or GetQuestStep(Spawn, HadAHammer) == 2 then + PlayFlavor(NPC, "", "The recipe's right there in front of me there, don't forget to read it once you pick it up. The coal's on the ground there. And make sure you have a tin cluster and a lead cluster in your bags, they'll be no use to you in the bank!", "nod", 1689589577, 4560189, Spawn) + elseif GetQuestStep(Spawn, HadAHammer) == 3 then + AddConversationOption(conversation, "I'll try.") + StartConversation(conversation, NPC, Spawn, "Having any trouble? You might have noticed that at the bottom of the crafting window you see six tradeskill arts you can use. Three will improve the durability, and three the progress of your craft. Try using those as much as you need while crafting.") + elseif GetQuestStep(Spawn, HadAHammer) == 4 then + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_2_1002.mp3", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "I made a lucky wolf paw charm!", "Quest1Chat_3") + StartConversation(conversation, NPC, Spawn, "How did you make out? Was my recipe simple enough?") + elseif GetQuestStep(Spawn, HadAHammer) == 5 or HasCompletedQuest(Spawn, HadAHammer) then + Quest1Chat_1(NPC, Spawn) + else + PlayFlavor(NPC, "", "At peace or at war, my work must go on.", "nod", 1689589577, 4560189, Spawn) + end +end + +function Quest1Chat_1(NPC, Spawn) + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Sure, why not? Is it hard?", "Quest1Chat_2") + StartConversation(conversation, NPC, Spawn, "Greetings! I noticed you harvesting out there. Are you interested in trying your hand at making something out of them?") +end + +function Quest1Chat_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Okay, what do I do?", "OfferHadAHammer") + StartConversation(conversation, NPC, Spawn, "Nay, not hard at all once you wrap your head around it. But I'm not one to keep talking all day. Why don't you just jump in and try it?") +end + +function Quest1Chat_3(NPC, Spawn) + SetStepComplete(Spawn, HadAHammer, 4) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Thanks, I might do that.") + StartConversation(conversation, NPC, Spawn, "Congratulations! You seem to have a right knack for crafting things, if I do say so. If you're interested in learning more about crafting, you should look up a professional tradeskill tutor who can tell you all the details.") +end + + +function OfferHadAHammer(NPC, Spawn) + if HasCompletedQuest(Spawn, HadAHammer) == false and HasQuest(Spawn, HadAHammer) == false then + OfferQuest(NPC, Spawn, HadAHammer) + end +end \ No newline at end of file diff --git a/server/SpawnScripts/FrostfangSea/CatherineBowne.lua b/server/SpawnScripts/FrostfangSea/CatherineBowne.lua new file mode 100644 index 000000000..9401ea040 --- /dev/null +++ b/server/SpawnScripts/FrostfangSea/CatherineBowne.lua @@ -0,0 +1,29 @@ +--[[ + Script Name : SpawnScripts/FrostfangSea/CatherineBowne.lua + Script Purpose : Catherine Bowne + Script Author : theFoof + Script Date : 2013.09.26 + Script Notes : +--]] + +function spawn(NPC) + SetPlayerProximityFunction(NPC, 15, "ProxCheer") +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + + local choice = math.random(1,3) + if choice == 1 then + PlayFlavor(NPC, "", "Bank accounts are like weapons. You must maintain them, lest they erode!", "smile", 1689589577, 4560189, Spawn) + elseif choice == 2 then + PlayFlavor(NPC, "", "Your coin will be safe in the Frigid Strongbox, New Halas' official bank.", "hello", 0, 0, Spawn) + elseif choice == 3 then + PlayFlavor(NPC, "", "Where did I put my abacus?", "hello", 0, 0, Spawn) + end +end + diff --git a/server/SpawnScripts/FrostfangSea/CornaKilgour.lua b/server/SpawnScripts/FrostfangSea/CornaKilgour.lua new file mode 100644 index 000000000..8f08300e1 --- /dev/null +++ b/server/SpawnScripts/FrostfangSea/CornaKilgour.lua @@ -0,0 +1,19 @@ +--[[ + Script Name : SpawnScripts/FrostfangSea/CornaKilgour.lua + Script Purpose : Corna Kilgour + Script Author : theFoof + Script Date : 2013.10.29 + Script Notes : +--]] + +function spawn(NPC) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + PlayFlavor(NPC, "", "Making food, armor, and weapons is every bit as important to the success and security of our city as standing to face the enemy. Quality equipment and items can make the difference.", "nod", 1689589577, 4560189, Spawn) +end \ No newline at end of file diff --git a/server/SpawnScripts/FrostfangSea/CorwinFrostbeard.lua b/server/SpawnScripts/FrostfangSea/CorwinFrostbeard.lua new file mode 100644 index 000000000..45a8278c7 --- /dev/null +++ b/server/SpawnScripts/FrostfangSea/CorwinFrostbeard.lua @@ -0,0 +1,29 @@ +--[[ + Script Name : SpawnScripts/FrostfangSea/CorwinFrostbeard.lua + Script Purpose : Corwin Frostbeard + Script Author : theFoof + Script Date : 2013.09.26 + Script Notes : +--]] + +require"SpawnScripts/FrostfangSea/halas_proximity_cheer" + +function spawn(NPC) + SetPlayerProximityFunction(NPC, 15, "ProxCheer") +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + local choice = math.random(1,3) + if choice == 1 then + PlayFlavor(NPC, "", "Welcome!", "hello", 0, 0, Spawn) + elseif choice == 2 then + PlayFlavor(NPC, "", "I'll be happy to supply all your fuel needs.", "nod", 0, 0, Spawn) + elseif choice == 3 then + PlayFlavor(NPC, "", "", "hello", 0, 0, Spawn) + end +end \ No newline at end of file diff --git a/server/SpawnScripts/FrostfangSea/CraggedSpinesupplycrate.lua b/server/SpawnScripts/FrostfangSea/CraggedSpinesupplycrate.lua new file mode 100644 index 000000000..bb5f4ec4f --- /dev/null +++ b/server/SpawnScripts/FrostfangSea/CraggedSpinesupplycrate.lua @@ -0,0 +1,37 @@ +--[[ + Script Name : SpawnScripts/FrostfangSea/CraggedSpinesupplycrate.lua + Script Purpose : for the supply crate spawns + Script Author : theFoof + Script Date : 2013.7.21 + Script Notes : +--]] + +local ClanImps = 79 + +function spawn(NPC) + AddSpawnAccess(NPC, NPC) + SetPlayerProximityFunction(NPC, 50, "SpawnAccess", "SpawnAccess") +end + +function respawn(NPC) + spawn(NPC) +end + +function casted_on(NPC, Spawn, SpellName) + if HasQuest(Spawn, ClanImps) and GetQuestStep(Spawn, ClanImps) < 3 then + if SpellName == 'stolen crate' then + AddStepProgress(Spawn, ClanImps, 1, 1) + local imp = SpawnMob(GetZone(NPC), 4701143, 0, GetX(Spawn) - 3, GetY(Spawn), GetZ(Spawn) - 3, 0) + Attack(imp, Spawn) + Despawn(NPC) + end + end +end + +function SpawnAccess(NPC, Spawn) + if HasQuest(Spawn, ClanImps) then + AddSpawnAccess(NPC, Spawn) + else + RemoveSpawnAccess(NPC, Spawn) + end +end \ No newline at end of file diff --git a/server/SpawnScripts/FrostfangSea/Crushinator.lua b/server/SpawnScripts/FrostfangSea/Crushinator.lua new file mode 100644 index 000000000..5b156bb6d --- /dev/null +++ b/server/SpawnScripts/FrostfangSea/Crushinator.lua @@ -0,0 +1,22 @@ +--[[ + Script Name : SpawnScripts/FrostfangSea/Crushinator.lua + Script Purpose : Crushinator movement loop + Script Author : theFoof + Script Date : 2013.5.20 + Script Notes : +--]] +function spawn(NPC) + MovementLoopAddLocation(NPC, -273.33, 23.12, -407.99, 8, 0) + MovementLoopAddLocation(NPC, -241.49, 23.16, -423.66, 8, 0) + MovementLoopAddLocation(NPC, -215.44, 24.77, -411.60, 8, 0) + MovementLoopAddLocation(NPC, -180.82, 21.81, -353.42, 8, 0) + MovementLoopAddLocation(NPC, -215.44, 24.77, -411.60, 8, 0) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) +end + +function respawn(NPC) + spawn(NPC) +end diff --git a/server/SpawnScripts/FrostfangSea/DagbartFalkren.lua b/server/SpawnScripts/FrostfangSea/DagbartFalkren.lua new file mode 100644 index 000000000..af3c70bac --- /dev/null +++ b/server/SpawnScripts/FrostfangSea/DagbartFalkren.lua @@ -0,0 +1,35 @@ +--[[ + Script Name : SpawnScripts/FrostfangSea/DagbartFalkren.lua + Script Purpose : Dagbart Falkren + Script Author : theFoof + Script Date : 2013.10.30 + Script Notes : +--]] + +function spawn(NPC) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_1_1042.mp3", "", "hello", 0, 0, Spawn) + if HasCollectionsToHandIn(Spawn) then + AddConversationOption(conversation, "I have a collection for you.", "TurnInColls") + end + AddConversationOption(conversation, "I don't have any at the moment.") + StartConversation(conversation, NPC, Spawn, "Hello there! If you have any collections that you've completed, I can take them off your hands and reward you for your time. I love collecting things!") +end + +function TurnInColls(NPC, Spawn) + HandInCollections(Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "All right, thanks!") + StartConversation(conversation, NPC, Spawn, "This is a magnificent find! Here, take this for all your hard work.") +end \ No newline at end of file diff --git a/server/SpawnScripts/FrostfangSea/DandiMcCarren.lua b/server/SpawnScripts/FrostfangSea/DandiMcCarren.lua new file mode 100644 index 000000000..9a7ddd867 --- /dev/null +++ b/server/SpawnScripts/FrostfangSea/DandiMcCarren.lua @@ -0,0 +1,114 @@ +--[[ + Script Name : SpawnScripts/FrostfangSea/DandiMcCarren.lua + Script Purpose : Dandi McCarren + Script Author : theFoof + Script Date : 2013.08.19 + Script Notes : +--]] + +local TrustIssues = 85 + +function spawn(NPC) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + if HasQuest(Spawn, TrustIssues) and not QuestStepIsComplete(Spawn, TrustIssues, 2) then + PlayFlavor(NPC, "dandi_mccarren/halas/new_halas_guard_house/dandi_mccarren001.mp3", "", "", 4065222914, 2283262367, Spawn) + AddConversationOption(conversation, "I have a few questions.", "Quest1Chat_1") + AddConversationOption(conversation, "Can you tell me what you're doing here?", "Quest1Chat_6") + AddConversationOption(conversation, "This isn't worth it. Nevermind.") + StartConversation(conversation, NPC, Spawn, "I've got a lot of work to do. Can you make this quick?") + elseif HasQuest(Spawn, TrustIssues) then + PlayFlavor(NPC, "", "You're still here?", "", 0, 0, Spawn) + else + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_2_1009.mp3", "I can hammer metal faster than you can blink.", "", 0, 0, Spawn) + end +end + +function Quest1Chat_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "dandi_mccarren/halas/new_halas_guard_house/dandi_mccarren002.mp3", "", "", 2997702054, 4169410593, Spawn) + AddConversationOption(conversation, "Why did you come to Erollis? ", "Quest1Chat_2") + AddConversationOption(conversation, "Why don't you leave?", "Quest1Chat_2") + AddConversationOption(conversation, "Whatever, I don't have the time for this.") + StartConversation(conversation, NPC, Spawn, "It'll be faster to answer your questions than to shoo you away, I'm sure. What do you want?") +end + +function Quest1Chat_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "dandi_mccarren/halas/new_halas_guard_house/dandi_mccarren004.mp3", "", "", 2246027108, 3016893607, Spawn) + AddConversationOption(conversation, "I do know what that's like.", "Quest1Chat_3") + AddConversationOption(conversation, "I don't know what that's like.", "Quest1Chat_3") + AddConversationOption(conversation, "I'll ask the questions here!", "Quest1Chat_8") + StartConversation(conversation, NPC, Spawn, "Let me put it this way: do you know what it's like to be displaced from your homeland? Have you felt like you don't belong?") +end + +function Quest1Chat_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "dandi_mccarren/halas/new_halas_guard_house/dandi_mccarren006.mp3", "", "", 234929252, 3290173917, Spawn) + AddConversationOption(conversation, "True, there's no city quite like New Halas.", "Quest1Chat_4") + AddConversationOption(conversation, "So this is where you want to settle down?", "Quest1Chat_4") + AddConversationOption(conversation, "Whatever, I don't have the time for this.") + StartConversation(conversation, NPC, Spawn, "Well that's what it was like, for me, before Erollis was discovered. I'd done my fair share of traveling and called a few different cities 'home', but it never sat right. It never felt like home.") +end + +function Quest1Chat_4(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "dandi_mccarren/halas/new_halas_guard_house/dandi_mccarren007.mp3", "", "", 2015097155, 2674343560, Spawn) + AddConversationOption(conversation, "What do you like about Erollis?", "Quest1Chat_5") + AddConversationOption(conversation, "What books did you read?", "Quest1Chat_7") + AddConversationOption(conversation, "Whatever, I don't have the time for this.") + StartConversation(conversation, NPC, Spawn, "From the stories passed down by my Nana, and from the books I've read, this town is about as close to Old Halas as we're likely to get. Life here is what it was like to be a barbarian five hundred years ago.") +end + +function Quest1Chat_5(NPC, Spawn) + SetStepComplete(Spawn, TrustIssues, 2) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "dandi_mccarren/halas/new_halas_guard_house/dandi_mccarren009.mp3", "", "", 2546556899, 2243252862, Spawn) + AddConversationOption(conversation, "Yes, thank you.") + AddConversationOption(conversation, "That's what I needed to know.") + StartConversation(conversation, NPC, Spawn, "I like the crunch of snow under my feet. I like the sturdy stone structures. I like being close to my community. I like sitting around the fire listening to the wind whipping outside. I like tartan kilts and hard scotch. Does that answer your question?") +end + +function Quest1Chat_6(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "Um...I'm taking a poll.", "Quest1Chat_1") + AddConversationOption(conversation, "There's no need to get upset!", "Quest1Chat_1") + AddConversationOption(conversation, "I was just leaving.") + StartConversation(conversation, NPC, Spawn, "What am I doing here? What are YOU doing here?") +end + +function Quest1Chat_7(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "What do you like about Erollis?", "Quest1Chat_5") + AddConversationOption(conversation, "Whatever, I don't have time for this.") + StartConversation(conversation, NPC, Spawn, "A collection of quaint and curious volumes of forgotten lore. I doubt you've heard of them.") +end + +function Quest1Chat_8(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "I was just leaving.") + StartConversation(conversation, NPC, Spawn, "Bah. Get out of my sight!") +end diff --git a/server/SpawnScripts/FrostfangSea/DeadWreganFirebeard.lua b/server/SpawnScripts/FrostfangSea/DeadWreganFirebeard.lua new file mode 100644 index 000000000..c543fa9ce --- /dev/null +++ b/server/SpawnScripts/FrostfangSea/DeadWreganFirebeard.lua @@ -0,0 +1,21 @@ +--[[ + Script Name : SpawnScripts/FrostfangSea/DeadWreganFirebeard.lua + Script Purpose : Wregan Firebeard(dead) + Script Author : theFoof + Script Date : 2013.05.19 + Script Notes : +--]] + +function spawn(NPC) + AddSpawnAccess(NPC, NPC) +end + +function respawn(NPC) + spawn(NPC) +end + +function casted_on(Target, Caster, SpellName) + if SpellName == "the body" then + SendMessage(Caster, "Wregan's body shows signs of the mortal grizzly mauling he sustained.") + end +end diff --git a/server/SpawnScripts/FrostfangSea/DefenderDetmer.lua b/server/SpawnScripts/FrostfangSea/DefenderDetmer.lua new file mode 100644 index 000000000..1d3cd5f0f --- /dev/null +++ b/server/SpawnScripts/FrostfangSea/DefenderDetmer.lua @@ -0,0 +1,29 @@ +--[[ + Script Name : SpawnScripts/FrostfangSea/DefenderDetmer.lua + Script Author : Flunklesnarkin + Script Date : 2015.10.14 09:10:02 + Script Purpose : + : Testing guard voiceovers.. not complete +--]] + +function spawn(NPC) + +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + local choice = math.random(1, 3) + if choice == 1 then + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_1_1002.mp3", "", "", 0, 0, Spawn) + elseif choice == 2 then + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_2_1002.mp3", "", "", 0, 0, Spawn) + elseif choice == 3 then + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_3_1002.mp3", "", "", 0, 0, Spawn) + end + +end + +function respawn(NPC) + +end + diff --git a/server/SpawnScripts/FrostfangSea/DolurAxebeard.lua b/server/SpawnScripts/FrostfangSea/DolurAxebeard.lua new file mode 100644 index 000000000..140470010 --- /dev/null +++ b/server/SpawnScripts/FrostfangSea/DolurAxebeard.lua @@ -0,0 +1,1076 @@ +--[[ + Script Name : SpawnScripts/FrostfangSea/DolurAxebeard.lua + Script Purpose : Dolur Axebeard + Script Author : theFoof + Script Date : 2013.05.25 + Script Notes : +--]] + +local GlimmerOrc = 31 + +local MurkyMystery = 32 + +local ScatteringAshes = 33 + +local TotemAnnihilation = 34 + +local CallingBack = 35 + +local TheGauntlet = 36 + +local OffOssuary = 71 + +local SeveringHead = 72 + +local NightmareOver = 73 + +function spawn(NPC) + ProvidesQuest(NPC, GlimmerOrc) + ProvidesQuest(NPC, MurkyMystery) + ProvidesQuest(NPC, ScatteringAshes) + ProvidesQuest(NPC, TotemAnnihilation) + ProvidesQuest(NPC, CallingBack) + ProvidesQuest(NPC, TheGauntlet) + ProvidesQuest(NPC, OffOssuary) + ProvidesQuest(NPC, SeveringHead) + ProvidesQuest(NPC, NightmareOver) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + if not HasQuest(Spawn, GlimmerOrc) and not HasCompletedQuest(Spawn, GlimmerOrc) then + PlayFlavor(NPC, "dolur_axebeard/halas/great_shelf/dolur_axebeard/dolur_axebeard001.mp3", "", "", 1652895933, 4056769103, Spawn) + AddConversationOption(conversation, "What's wrong?", "Quest1Chat_1") + AddConversationOption(conversation, "I don't want to get involved. Goodbye.") + StartConversation(conversation, NPC, Spawn, "We've got a big problem on our hands, " .. GetName(Spawn) .. ". And by big, I mean disastrous.") + elseif GetQuestStep(Spawn, GlimmerOrc) == 1 then + PlayFlavor(NPC, "", "Perhaps the orcs are using the power from luminous snowflurries for their camouflage.", "think", 0, 0, Spawn) + elseif GetQuestStep(Spawn, GlimmerOrc) == 2 then + Quest1Chat_11(NPC, Spawn) + elseif HasCompletedQuest(Spawn, GlimmerOrc) and not HasCompletedQuest(Spawn, MurkyMystery) and not HasQuest(Spawn, MurkyMystery) then + Quest2Chat_1(NPC, Spawn) + elseif GetQuestStep(Spawn, MurkyMystery) == 1 then + PlayFlavor(NPC, "", "The deepice miasmas aren't far from here. Look up the hill above the battlefield, near Herga's Choke.", "point", 1689589577, 4560189, Spawn) + elseif GetQuestStep(Spawn, MurkyMystery) == 2 then + PlayFlavor(NPC, "dolur_axebeard/halas/great_shelf/dolur_axebeard/dolur_axebeard021.mp3", "", "", 1915346257, 1839627430, Spawn) + AddConversationOption(conversation, "I've got my fingers crossed.", "Quest2Chat_5") + AddConversationOption(conversation, "[Wait]", "Quest2Chat_5") + StartConversation(conversation, NPC, Spawn, "There ye be, " .. GetName(Spawn) .. "! And ye've brought back the deepice crystals. Let's see if this works in conjunction with the glimmer powder.") + elseif HasCompletedQuest(Spawn, MurkyMystery) and not HasCompletedQuest(Spawn, ScatteringAshes) and not HasQuest(Spawn, ScatteringAshes) then + Quest3Chat_1(NPC, Spawn) + elseif GetQuestStep(Spawn, ScatteringAshes) == 1 then + PlayFlavor(NPC, "", "I've trusted ye to scatter my brethren's ashes. Don't let me down.", "", 0, 0, Spawn) + elseif GetQuestStep(Spawn, ScatteringAshes) == 2 then + PlayFlavor(NPC, "dolur_axebeard/halas/great_shelf/dolur_axebeard/dolur_axebeard031.mp3", "", "", 1406448236, 1748110963, Spawn) + AddConversationOption(conversation, "Glad to have helped.", "Quest3Chat_9") + AddConversationOption(conversation, "I heard nothing, but I did the job as you asked.", "Quest3Chat_8") + AddConversationOption(conversation, "I didn't hear chanting, but I do hear superstitious nonsense.", "Quest3Chat_8") + StartConversation(conversation, NPC, Spawn, "Did ye hear that chanting on the wind when you strewed the ashes out from the crest of the Overlook? That was the spirits of the coldain warriors, who are still standing their ground out there against the Ry'Gorr, singing yer praises.") + elseif HasCompletedQuest(Spawn, ScatteringAshes) and not HasCompletedQuest(Spawn, TotemAnnihilation) and not HasQuest(Spawn, TotemAnnihilation) then + Quest4Chat_1(NPC, Spawn) + elseif GetQuestStep(Spawn, TotemAnnihilation) == 1 then + PlayFlavor(NPC, "", "Don't expect the Ry'Gorr to let you destroy those totems without putting up a fight.", "no", 0, 0, Spawn) + elseif GetQuestStep(Spawn, TotemAnnihilation) == 2 then + PlayFlavor(NPC, "dolur_axebeard/halas/great_shelf/dolur_axebeard/dolur_axebeard045.mp3", "", "", 505634536, 3864498567, Spawn) + AddConversationOption(conversation, "Completed, as promised.", "Quest4Chat_11") + AddConversationOption(conversation, "Dirty work, but someone had to do it.", "Quest4Chat_11") + AddConversationOption(conversation, "I did as you asked. Thank goodness this foul business is over.", "Quest4Chat_11") + StartConversation(conversation, NPC, Spawn, "Ach! Ye've the stench of death upon ye, " .. GetName(Spawn) .. ". I suppose this means the task of dealing with the totems is complete?") + elseif HasCompletedQuest(Spawn, TotemAnnihilation) and not HasCompletedQuest(Spawn, CallingBack) and not HasQuest(Spawn, CallingBack) then + PlayFlavor(NPC, "dolur_axebeard/halas/great_shelf/dolur_axebeard/dolur_axebeard047.mp3", "", "", 4084660884, 3109121115, Spawn) + AddConversationOption(conversation, "What are these wards?", "Quest5Chat_1") + AddConversationOption(conversation, "I don't feel like my efforts are improving the overall situation. Goodbye.") + StartConversation(conversation, NPC, Spawn, "I've some bad news, " .. GetName(Spawn) .. ". The Ry'Gorr's scouts have been disabling our wards just as ye had been destroying their totems.") + elseif HasQuest(Spawn, CallingBack) and GetQuestStep(Spawn, CallingBack) ~= 6 then + PlayFlavor(NPC, "", "Placing those wards should tip the scales back in our favor.", "", 0, 0, Spawn) + elseif GetQuestStep(Spawn, CallingBack) == 6 then + AddConversationOption(conversation, "The wards have been placed where they'll be most effective.", "Quest5Chat_12") + AddConversationOption(conversation, "It was a trivial task.", "Quest5Chat_12") + StartConversation(conversation, NPC, Spawn, "I was expecting yer return, and ye never disappoint. How did it go?") + elseif HasCompletedQuest(Spawn, CallingBack) and not HasCompletedQuest(Spawn, TheGauntlet) and not HasQuest(Spawn, TheGauntlet) then + Quest6Chat_1(NPC, Spawn) + elseif GetQuestStep(Spawn, TheGauntlet) == 1 then + PlayFlavor(NPC, "", "Find those bone piles, and grind them to dust.", "point", 0, 0, Spawn) + elseif GetQuestStep(Spawn, TheGauntlet) == 2 then + AddConversationOption(conversation, "It's understandable.", "Quest7Chat_1") + AddConversationOption(conversation, "Perhaps there's a better way to handle this problem.", "Quest7Chat_1") + AddConversationOption(conversation, "Maybe we should strike out against the Ry'Gorr necromancers instead.", "Quest7Chat_1") + StartConversation(conversation, NPC, Spawn, "Perhaps this was... not the best tactic. I'm sorry fer sending ye on a fool's errand, " .. GetName(Spawn) .. ". My zeal got the better of me.") + elseif HasCompletedQuest(Spawn, TheGauntlet) and not HasCompletedQuest(Spawn, OffOssuary) and not HasQuest(Spawn, OffOssuary) then + Quest7Chat_1(NPC, Spawn) + elseif HasQuest(Spawn, OffOssuary) and GetQuestStep(Spawn, OffOssuary) < 3 then + PlayFlavor(NPC, "", "Give those necromancers the sharp side of an axe, if ye find any.", "", 0, 0, Spawn) + elseif GetQuestStep(Spawn, OffOssuary) == 3 then + PlayFlavor(NPC, "dolur_axebeard/halas/great_shelf/dolur_axebeard/dolur_axebeard086.mp3", "", "", 4050788260, 2621206375, Spawn) + AddConversationOption(conversation, "Your information was correct.", "Quest7Chat_14") + AddConversationOption(conversation, "Yes, the necromancers were holed up in a cave in the Ossuary of Ice. ", "Quest7Chat_15") + StartConversation(conversation, NPC, Spawn, "I'm hoping for good news, and yet expecting the worst. Tell me, " .. GetName(Spawn) .. ", did ye find them?") + elseif HasCompletedQuest(Spawn, OffOssuary) and not HasCompletedQuest(Spawn, SeveringHead) and not HasQuest(Spawn, SeveringHead) then + Quest8Chat_1(NPC, Spawn) + elseif HasQuest(Spawn, SeveringHead) and GetQuestStep(Spawn, SeveringHead) < 3 then + PlayFlavor(NPC, "", "Destroy the source of those totems by breaking the dark crystal.", "", 0, 0, Spawn) + elseif GetQuestStep(Spawn, SeveringHead) == 3 then + PlayFlavor(NPC, "", "", "cheer", 0, 0, Spawn) + AddConversationOption(conversation, "I shattered the crystal, and slew their leader.", "Quest8Chat_10") + AddConversationOption(conversation, "I severed your wurm's head, as promised.", "Quest8Chat_10") + StartConversation(conversation, NPC, Spawn, "Ye've returned, and not a minute too soon! The orcs are worked up into a frenzy over whatever ye just did.") + elseif HasCompletedQuest(Spawn, SeveringHead) and not HasCompletedQuest(Spawn, NightmareOver) and not HasQuest(Spawn, NightmareOver) then + Quest9Chat_1(NPC, Spawn) + elseif GetQuestStep(Spawn, NightmareOver) == 1 then + PlayFlavor(NPC, "", "Head to Cragged Spine. They're waiting for ye.", "point", 0, 0, Spawn) + elseif HasCompletedQuest(Spawn, NightmareOver) then + PlayFlavor(NPC, "", "Are ye sure ye don't have any blood of the Frostraver in ye?", "laugh", 0, 0, Spawn) + end +end + +function Quest1Chat_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "dolur_axebeard/halas/great_shelf/dolur_axebeard/dolur_axebeard002.mp3", "", "", 3776851500, 329099171, Spawn) + AddConversationOption(conversation, "How are they ambushing you, especially out in the open?", "Quest1Chat_2") + AddConversationOption(conversation, "But... Erollis isn't very large. You must know this place like the back of your hand.", "Quest1Chat_7") + AddConversationOption(conversation, "I don't want your helplessness to rub off on me. I must be going.") + AddConversationOption(conversation, "Ambushing orcs? I'm out of here!") + StartConversation(conversation, NPC, Spawn, "The Ry'Gorr are ambushing our forces. A dwarf can take an orc, toe to toe, in a fair fight, but there's nothing fair about catching us unawares. A coldain caught in an ambush is at a distinct disadvantage. Their surprise attacks are killing us out there, literally!") +end + +function Quest1Chat_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "dolur_axebeard/halas/great_shelf/dolur_axebeard/dolur_axebeard003.mp3", "", "", 505371253, 1091559275, Spawn) + AddConversationOption(conversation, "Go on.", "Quest1Chat_3") + AddConversationOption(conversation, "I believe I have somewhere else to be. Goodbye.") + StartConversation(conversation, NPC, Spawn, "That's what I was getting at. And ye won't believe it.") +end + +function Quest1Chat_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "dolur_axebeard/halas/great_shelf/dolur_axebeard/dolur_axebeard005.mp3", "", "", 2412101907, 2364424304, Spawn) + AddConversationOption(conversation, "What do they say?", "Quest1Chat_4") + AddConversationOption(conversation, "It sounds like you're about to tell me.", "Quest1Chat_4") + AddConversationOption(conversation, "Why are we still talking? Just point me in the right direction.", "Quest1Chat_9") + AddConversationOption(conversation, "Ambushing orcs? I'm out of here!") + StartConversation(conversation, NPC, Spawn, "They've engineered a method to render themselves impossible to see against the snow and ice; it's some kind of camouflage. My soldiers are too afraid to go back out there. You know what my men are saying?") +end + +function Quest1Chat_4(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "dolur_axebeard/halas/great_shelf/dolur_axebeard/dolur_axebeard007.mp3", "", "", 1117927681, 3213137385, Spawn) + AddConversationOption(conversation, "It's a fear tactic, for sure.", "Quest1Chat_5") + AddConversationOption(conversation, "No wonder your men don't want to go back out there.", "Quest1Chat_8") + AddConversationOption(conversation, "Glimmer orcs? I'm out of here!") + StartConversation(conversation, NPC, Spawn, "They say, 'There'd be nothing but snow and ice, then a glimmer... then, you'd be dead!'") +end + +function Quest1Chat_5(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "dolur_axebeard/halas/great_shelf/dolur_axebeard/dolur_axebeard008.mp3", "", "", 3224987077, 1613729835, Spawn) + AddConversationOption(conversation, "Agreed. ", "Quest1Chat_6") + AddConversationOption(conversation, "You do what you have to in war.", "Quest1Chat_6") + AddConversationOption(conversation, "Cowardice against cowardice? I'm done here.") + StartConversation(conversation, NPC, Spawn, "It's a cowardly tactic. Unfortunately there's no way around this. We're going to have to fight ice with ice.") +end + +function Quest1Chat_6(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "dolur_axebeard/halas/great_shelf/dolur_axebeard/dolur_axebeard010.mp3", "", "", 1224830968, 3279150133, Spawn) + AddConversationOption(conversation, "Of course.", "OfferGlimmerOrc") + AddConversationOption(conversation, "I'm not putting myself in danger, based solely on a hunch.") + StartConversation(conversation, NPC, Spawn, "We believe they're using the powder of the luminous snowflurries as makeshift camouflage. If ye can collect some of the powder, perhaps we could replicate this. Then we would have a fighting chance out there. Think ye could bring some back?") +end + +function Quest1Chat_7(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "dolur_axebeard/halas/great_shelf/dolur_axebeard/dolur_axebeard004.mp3", "", "", 2795765225, 2030897405, Spawn) + AddConversationOption(conversation, "What? Are they invisible?", "Quest1Chat_3") + AddConversationOption(conversation, "I believe I have somewhere else to be. Goodbye.") + StartConversation(conversation, NPC, Spawn, "Aye, we do. We know every rock, every hill, every nook, and every cranny of this frozen wasteland, which is what makes these ambushes so troubling.") +end + +function Quest1Chat_8(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "dolur_axebeard/halas/great_shelf/dolur_axebeard/dolur_axebeard009.mp3", "", "", 3087697550, 2303509094, Spawn) + AddConversationOption(conversation, "I do, and I see what must be done.", "Quest1Chat_6") + AddConversationOption(conversation, "What's the plan?", "Quest1Chat_6") + AddConversationOption(conversation, "It's your problem, not mine. Goodbye.") + StartConversation(conversation, NPC, Spawn, "Aye, ye see the problem we're facing now?") +end + +function Quest1Chat_9(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "dolur_axebeard/halas/great_shelf/dolur_axebeard/dolur_axebeard006.mp3", "", "", 2420317196, 2002155131, Spawn) + AddConversationOption(conversation, "I'm brave AND capable.", "Quest1Chat_10") + AddConversationOption(conversation, "Don't underestimate me.", "Quest1Chat_10") + AddConversationOption(conversation, "Don't insult my intelligence. I'm leaving.") + StartConversation(conversation, NPC, Spawn, "Oh, yer a go-getter, are ye? Well, I hope yer filled with bravery and not stupidity, though can be hard to distinguish one from t'other.") +end + +function Quest1Chat_10(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "dolur_axebeard/halas/great_shelf/dolur_axebeard/dolur_axebeard011.mp3", "", "", 2906385969, 2703354949, Spawn) + AddConversationOption(conversation, "None taken. So what's the plan?", "Quest1Chat_6") + AddConversationOption(conversation, "I find that hard to believe. Goodbye.") + StartConversation(conversation, NPC, Spawn, "No need to get defensive now, " .. GetName(Spawn) .. ". No offense was meant.") +end + +function Quest1Chat_11(NPC, Spawn) + FaceTarget(NPC, Spawn) + converation = CreateConversation() + + PlayFlavor(NPC, "dolur_axebeard/halas/great_shelf/dolur_axebeard/dolur_axebeard013.mp3", "", "", 4055438067, 163416310, Spawn) + AddConversationOption(conversation, "It wasn't easy.", "Quest1Chat_12") + AddConversationOption(conversation, "Here's the glimmer dust.", "Quest1Chat_12") + StartConversation(conversation, NPC, Spawn, "Welcome back, " .. GetName(Spawn) .. "! Now, let's have a look-see at that glimmer powder ye've collected.") +end + +function Quest1Chat_12(NPC, Spawn) + SetStepComplete(Spawn, GlimmerOrc, 2) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "dolur_axebeard/halas/great_shelf/dolur_axebeard/dolur_axebeard014.mp3", "", "", 4267001042, 1944501293, Spawn) + AddConversationOption(conversation, "I do whatever it takes to solve the problem.", "Quest1Chat_13") + AddConversationOption(conversation, "I'm curious to find out if it works.", "Quest1Chat_13") + StartConversation(conversation, NPC, Spawn, "This is exactly what we need, and plenty of it. Oh, I've missed having someone like ye around. So many young folks today just won't go that extra mile.") +end + +function Quest1Chat_13(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "dolur_axebeard/halas/great_shelf/dolur_axebeard/dolur_axebeard015.mp3", "", "", 3387435129, 3863442024, Spawn) + AddConversationOption(conversation, "Take your time.") + AddConversationOption(conversation, "Time is one thing we don't have.", "Quest2Chat_1") + StartConversation(conversation, NPC, Spawn, "What am I? The Amazing Randi? We have tests to run. It will take time.") +end + +function Quest2Chat_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "dolur_axebeard/halas/great_shelf/dolur_axebeard/dolur_axebeard016.mp3", "", "", 3724550793, 3434645453, Spawn) + AddConversationOption(conversation, "The orcs figured out how to solve that problem.", "Quest2Chat_2") + AddConversationOption(conversation, "You must need a binding agent.", "Quest2Chat_4") + AddConversationOption(conversation, "I feel like I did all that work for nothing. Goodbye.") + StartConversation(conversation, NPC, Spawn, "Well, this has solved half of our problem. Flurry powder renders one nearly invisible in this environment, but the stuff doesn't stick. Yer lucky if a gust of wind doesn't blow it clean off. This won't do. No, this won't do at all.") +end + +function Quest2Chat_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "dolur_axebeard/halas/great_shelf/dolur_axebeard/dolur_axebeard017.mp3", "", "", 4140277139, 3688959754, Spawn) + AddConversationOption(conversation, "Have you noticed the orcs gathering anything out of the ordinary?", "Quest2Chat_3") + AddConversationOption(conversation, "I don't need your help. I'm done here.") + StartConversation(conversation, NPC, Spawn, "Aye, good thinking. So we need to consider what the Ry'Gorr have been up to lately. Unfortunately, our attentions have been focused on meeting them on the battlefield, when we should have been paying attention to their other activities.") +end + +function Quest2Chat_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "dolur_axebeard/halas/great_shelf/dolur_axebeard/dolur_axebeard019.mp3", "", "", 1879917767, 2648322812, Spawn) + AddConversationOption(conversation, "Just show me where to find them.", "OfferMurkyMystery") + AddConversationOption(conversation, "That's our best bet? It's worth a try.", "OfferMurkyMystery") + AddConversationOption(conversation, "This is another shot in the dark. I'm done here.") + StartConversation(conversation, NPC, Spawn, "We've noticed that the orcs have been aggressive towards deepice miasmas. There didn't appear to be any logical reason for it, until now. The miasmas could hold another clue to the method of crafting this camouflage.") +end + +function Quest2Chat_4(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "dolur_axebeard/halas/great_shelf/dolur_axebeard/dolur_axebeard018.mp3", "", "", 829232573, 947350296, Spawn) + AddConversationOption(conversation, "So where could we find that?", "Quest2Chat_3") + AddConversationOption(conversation, "Have you noticed the orcs gathering anything out of the ordinary?", "Quest2Chat_3") + AddConversationOption(conversation, "I don't need your help. I'm done here.") + StartConversation(conversation, NPC, Spawn, "So, yer an adventurer and a scholar! I bet a binding agent is exactly what we need.") +end + +function Quest2Chat_5(NPC, Spawn) + SetStepComplete(Spawn, MurkyMystery, 2) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "dolur_axebeard/halas/great_shelf/dolur_axebeard/dolur_axebeard022.mp3", "", "", 4152966005, 2385582175, Spawn) + AddConversationOption(conversation, "Now you're on even footing with the Ry'Gorr!", "Quest3Chat_1") + AddConversationOption(conversation, "Your scouts will be able to pinpoint their ambushers.", "Quest3Chat_3") + StartConversation(conversation, NPC, Spawn, "By Brell, it does work! Yer a genius!") +end + +function Quest3Chat_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "dolur_axebeard/halas/great_shelf/dolur_axebeard/dolur_axebeard023.mp3", "", "", 3394689570, 853009244, Spawn) + AddConversationOption(conversation, "That is unfortunate, but you have to balance your priorities.", "Quest3Chat_2") + AddConversationOption(conversation, "Is this something I can help with?", "Quest3Chat_2") + AddConversationOption(conversation, "I'll leave you to your grief. Goodbye.") + StartConversation(conversation, NPC, Spawn, "And now that we're on even footing with the Ry'Gorr, we can afford to direct our attention to something a little more spiritual. Unfortunately, the needs of our deceased have had to wait for a lull in the action.") +end + +function Quest3Chat_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "dolur_axebeard/halas/great_shelf/dolur_axebeard/dolur_axebeard024.mp3", "", "", 888604358, 2919686664, Spawn) + AddConversationOption(conversation, "I don't understand. What do you mean by 'spirits'?", "Quest3Chat_3") + AddConversationOption(conversation, "Of course. You've done all you can.", "Quest3Chat_4") + StartConversation(conversation, NPC, Spawn, "Aye, or else there would be more fallen coldain. And as valiant as our brethren's spirits have been in the fight against the Ry'Gorr, it's an outcome we'd certainly prefer to avoid.") +end + +function Quest3Chat_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "dolur_axebeard/halas/great_shelf/dolur_axebeard/dolur_axebeard026.mp3", "", "", 3211985278, 3808356977, Spawn) + AddConversationOption(conversation, "You want me to honor the dead?", "Quest3Chat_5") + AddConversationOption(conversation, "Shouldn't one of the coldain honor them?") + AddConversationOption(conversation, "One of the coldain should handle this. Goodbye.") + StartConversation(conversation, NPC, Spawn, "Many of the coldain that fall in battle against the Ry'Gorr rise up again as spirits. Instead of going to see Brell, they rejoin the fight. This decision is a permanent one, which means they can never go to the Halls of the Creator once they come back here. Their act of self-sacrifice and valor should not go unnoticed.") +end + +function Quest3Chat_4(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation + + AddConversationOption(conversation, "Tell me more.", "Quest3Chat_3") + AddConversationOption(conversation, "Your burdens are yours alone. Goodbye.") + StartConversation(conversation, NPC, Spawn, "I'm not certain we've done everything we can, but then again I've always taken on more burdens than I can easily carry. There's someting else we can do, right now. If ye'll hear me out, maybe ye could even lend a hand.") +end + +function Quest3Chat_5(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "dolur_axebeard/halas/great_shelf/dolur_axebeard/dolur_axebeard027.mp3", "", "", 1974991098, 1800835214, Spawn) + AddConversationOption(conversation, "I'd be honored to scatter their ashes.", "Quest3Chat_6") + AddConversationOption(conversation, "You should have someone else honor your dead.", "Quest3Chat_7") + StartConversation(conversation, NPC, Spawn, "Aye, it's the least we could do to respect their sacrifice.") +end + +function Quest3Chat_6(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "dolur_axebeard/halas/great_shelf/dolur_axebeard/dolur_axebeard029.mp3", "", "", 1909973600, 750947925, Spawn) + AddConversationOption(conversation, "I will do as you ask.", "OfferScatteringAshes") + AddConversationOption(conversation, "I've changed my mind. Goodbye.") + StartConversation(conversation, NPC, Spawn, "This urn contains the ashes of the recently deceased. I'd like ye to take them to the peak of Pride Overlook and scatter 'em to the winds. The ashes will be carried out to sea. Maybe part of them will find their way back to Velious, if it still exists.") +end + +function Quest3Chat_7(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "dolur_axebeard/halas/great_shelf/dolur_axebeard/dolur_axebeard028.mp3", "", "", 564515719, 107243017, Spawn) + AddConversationOption(conversation, "Thank you. I'd be happy to help.", "Quest3Chat_6") + AddConversationOption(conversation, "Like the Dain? That's a wild exaggeration, but I appreciate the compliment.", "Quest3Chat_6") + AddConversationOption(conversation, "I'd rather see a coldain honor his brethren.") + StartConversation(conversation, NPC, Spawn, "I'd be perfectly happy to give this job to one of my brothers, but I'd rather you do it, " .. GetName(Spawn) .. ". I trust ye. Yer capable and ye fight like the Dain himself.") +end + +function Quest3Chat_8(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "Fair enough.", "Quest3Chat_9") + AddConversationOption(conversation, "Whatever. If you say so.", "Quest3Chat_9") + StartConversation(conversation, NPC, Spawn, "Have a little faith. The spirits believe in us, or else they wouldn't be here. It's only fair to believe in them, in return.") +end + +function Quest3Chat_9(NPC, Spawn) + SetStepComplete(Spawn, ScatteringAshes, 2) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "dolur_axebeard/halas/great_shelf/dolur_axebeard/dolur_axebeard033.mp3", "", "", 935575101, 1863151637, Spawn) + AddConversationOption(conversation, "You can deduce a lot about a people by how they revere their dead.", "Quest4Chat_1") + AddConversationOption(conversation, "Let's hope that day is a long way off, Dolur.", "Quest4Chat_1") + StartConversation(conversation, NPC, Spawn, "Ye stuck by yer word, " .. GetName(Spawn) .. ". When the day comes, I wouldn't mind if ye were the one to lay my remains to rest.") +end + +function Quest4Chat_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "dolur_axebeard/halas/great_shelf/dolur_axebeard/dolur_axebeard034.mp3", "", "", 4183445940, 2191855130, Spawn) + AddConversationOption(conversation, "If you need to kill skeletons, I'm in.", "Quest4Chat_2") + AddConversationOption(conversation, "How can I help?", "Quest4Chat_3") + StartConversation(conversation, NPC, Spawn, "And now that ye've helped honor the spirits of the fallen, perhaps we can assist them in a more practical way. The sooner our men have laid those Ry'Gorr skeletons to rest, the sooner they can rest themselves.") +end + +function Quest4Chat_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "dolur_axebeard/halas/great_shelf/dolur_axebeard/dolur_axebeard036.mp3", "", "", 183860181, 4160128753, Spawn) + AddConversationOption(conversation, "Since when did Ry'Gorr orcs practice necromancy? ", "Quest4Chat_6") + AddConversationOption(conversation, "I'd be interested in hearing your plans.", "Quest4Chat_4") + AddConversationOption(conversation, "Headache?", "Quest4Chat_5") + AddConversationOption(conversation, "This sounds a little too complicated. Goodbye.") + StartConversation(conversation, NPC, Spawn, "Aye, I was hoping ye'd say that. But, perhaps more important than killing... er... re-killing them, is keeping the blasted things down. Those necromancers are causing us a real headache.") +end + +function Quest4Chat_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "dolur_axebeard/halas/great_shelf/dolur_axebeard/dolur_axebeard035.mp3", "", "", 3130799113, 3083892992, Spawn) + AddConversationOption(conversation, "Since when did Ry'Gorr orcs practice necromancy?", "Quest4Chat_6") + AddConversationOption(conversation, "I'd be interested in hearing your plans.", "Quest4Chat_4") + AddConversationOption(conversation, "This sounds a little too complicated. Goodbye.") + StartConversation(conversation, NPC, Spawn, "The Ry'Gorr necromancers are making sure that we have our work cut out for us. Their skeletal minions won't stay down. But we think there's a way we can deal with that.") +end + +function Quest4Chat_4(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "dolur_axebeard/halas/great_shelf/dolur_axebeard/dolur_axebeard038.mp3", "", "", 407410462, 3645301818, Spawn) + AddConversationOption(conversation, "How do the totems affect the piles of bones?", "Quest4Chat_10") + AddConversationOption(conversation, "The totems are used to raise the dead, aren't they?", "Quest4Chat_10") + AddConversationOption(conversation, "I've heard enough. Goodbye.") + StartConversation(conversation, NPC, Spawn, "Allow me to explain. The orcs' dark art practitioners have whittled crude necromantic totems out of an unusually opaque black crystal. They place these totems near piles of their dead, after they've burned all the flesh from their bones.") +end + +function Quest4Chat_5(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "dolur_axebeard/halas/great_shelf/dolur_axebeard/dolur_axebeard042.mp3", "", "", 4130815346, 134791613, Spawn) + AddConversationOption(conversation, "Please, no more details!") + AddConversationOption(conversation, "That's too much information.") + AddConversationOption(conversation, "For Brell's sake, stop right there!") + StartConversation(conversation, NPC, Spawn, "And that's saying a lot, considering I once woke up behind the Velium Keg with a splitting headache and a snow bunny tattoo inked in an awkward place.") +end + +function Quest4Chat_6(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "dolur_axebeard/halas/great_shelf/dolur_axebeard/dolur_axebeard037.mp3", "", "", 3050869770, 2588737006, Spawn) + AddConversationOption(conversation, "I'd never heard of it, either.", "Quest4Chat_7") + AddConversationOption(conversation, "Orcs are bad enough as it is.", "Quest4Chat_7") + AddConversationOption(conversation, "I've heard enough. Goodbye.") + StartConversation(conversation, NPC, Spawn, "Since now! Until recently, we'd never even heard of an orcish necromancer. Shaman or warrior types, certainly, but they've never been ones to dabble with the dead. ") +end + +function Quest4Chat_7(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "dolur_axebeard/halas/great_shelf/dolur_axebeard/dolur_axebeard039.mp3", "", "", 655322932, 2844698799, Spawn) + AddConversationOption(conversation, "What do you think?", "Quest4Chat_8") + AddConversationOption(conversation, "Sounds reasonable.", "Quest4Chat_9") + AddConversationOption(conversation, "I don't want to get involved in this debate. Goodbye.") + StartConversation(conversation, NPC, Spawn, "Unfortunately fer us, it looks like the orcs have picked up on the technique since becoming isolated on Erollis. Rakan posited that they may have turned to necromancy as a direct response to seeing our coldain brethren return from the afterlife to fight them.") +end + +function Quest4Chat_8(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "dolur_axebeard/halas/great_shelf/dolur_axebeard/dolur_axebeard040.mp3", "", "", 951980673, 4228422662, Spawn) + AddConversationOption(conversation, "They are more resourceful than I had imagined.", "Quest4Chat_9") + AddConversationOption(conversation, "Orcs are deplorable.", "Quest4Chat_9") + AddConversationOption(conversation, "I don't want to get involved in this debate. Goodbye.") + StartConversation(conversation, NPC, Spawn, "Hrmph. Well, it's possible that they petitioned to one of the darker gods to grant them the ability. Whatever the means, it stinks of an act of desperation. There isn't much opportunity to grow and replenish their ranks without resorting to raising their dead.") +end + +function Quest4Chat_9(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "dolur_axebeard/halas/great_shelf/dolur_axebeard/dolur_axebeard043.mp3", "", "", 845201538, 1152092745, Spawn) + AddConversationOption(conversation, "How do you propose we 'deal' with them?", "Quest4Chat_4") + AddConversationOption(conversation, "I can think of a reason to leave. Goodbye.") + StartConversation(conversation, NPC, Spawn, "In the end, I don't suppose the reason matters much. There are no depths they won't sink to in order to win this battle. It is what it is, and we have to deal with what's in front of us. ") +end + +function Quest4Chat_10(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "dolur_axebeard/halas/great_shelf/dolur_axebeard/dolur_axebeard041.mp3", "", "", 2628510482, 3371068278, Spawn) + AddConversationOption(conversation, "I can do that.", "OfferTotemAnnihilation") + AddConversationOption(conversation, "That's a sound plan.", "OfferTotemAnnihilation") + AddConversationOption(conversation, "This is a temporary solution, at best. I'll be going.") + StartConversation(conversation, NPC, Spawn, "And sure as Brell is my maker, dreadful skeletons rise up out of the piles, ready to fight again. I expect that destroying those totems will slow down the production of undead.") +end + +function Quest4Chat_11(NPC, Spawn) + SetStepComplete(Spawn, TotemAnnihilation, 2) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "dolur_axebeard/halas/great_shelf/dolur_axebeard/dolur_axebeard046.mp3", "", "", 1320158668, 3505958307, Spawn) + AddConversationOption(conversation, "Very funny.") + AddConversationOption(conversation, "That's not much of a consolation.") + AddConversationOption(conversation, "There's a silver lining in every cloud, eh?") + StartConversation(conversation, NPC, Spawn, "I suppose we should be thankful that the weather isn't warm here, or ye'd really stink.") +end + +function Quest5Chat_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "dolur_axebeard/halas/great_shelf/dolur_axebeard/dolur_axebeard048.mp3", "", "", 1791567214, 1786988911, Spawn) + AddConversationOption(conversation, "That sounds very similar to the Ry'Gorr's necromantic totems.", "Quest5Chat_2") + AddConversationOption(conversation, "Do the coldain spirits have any choice in the matter?", "Quest5Chat_7") + AddConversationOption(conversation, "Speaking of which, my assistance is needed elsewhere. Goodbye.") + StartConversation(conversation, NPC, Spawn, "The wards are beacons that allow a coldain's spirit to return to this world, and remain here, so long as their assistance is needed on the battlefield.") +end + +function Quest5Chat_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "dolur_axebeard/halas/great_shelf/dolur_axebeard/dolur_axebeard049.mp3", "", "", 2886126619, 111361298, Spawn) + AddConversationOption(conversation, "Tell me more.", "Quest5Chat_3") + AddConversationOption(conversation, "This discussion tires me. Goodbye.") + StartConversation(conversation, NPC, Spawn, "The important difference being that the coldain spirits retain their will and conscience. They aren't controlled by dark magic.") +end + +function Quest5Chat_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "dolur_axebeard/halas/great_shelf/dolur_axebeard/dolur_axebeard051.mp3", "", "", 3697109059, 807407603, Spawn) + AddConversationOption(conversation, "It doesn't sound like abandoning their surviving allies is a choice at all.", "Quest5Chat_4") + AddConversationOption(conversation, "I'm glad to hear that it isn't forced servitude.", "Quest5Chat_8") + AddConversationOption(conversation, "What is and what isn't 'dark magic' is all a matter of perspective.", "Quest5Chat_10") + AddConversationOption(conversation, "Sounds like we're arguing over semantics, which is a waste of my time and yours. Goodbye.") + StartConversation(conversation, NPC, Spawn, "Our brethren don't have to return to the field of battle unless they choose to do so. Of course, valor in the face of overwhelming opposition isn't unusual for the coldain. Most dwarves opt to follow the light from the ward's beacon and return to Norrath.") +end + +function Quest5Chat_4(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "dolur_axebeard/halas/great_shelf/dolur_axebeard/dolur_axebeard052.mp3", "", "", 2567924057, 453022525, Spawn) + AddConversationOption(conversation, "You know I wish to help.", "Quest5Chat_5") + AddConversationOption(conversation, "I help because we're both getting something out of this.", "Quest5Chat_11") + AddConversationOption(conversation, "I'm walking. Goodbye.") + StartConversation(conversation, NPC, Spawn, "There's always a choice, " .. GetName(Spawn) .. ". Just as you could choose to help us again, or choose to walk away.") +end + +function Quest5Chat_5(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "dolur_axebeard/halas/great_shelf/dolur_axebeard/dolur_axebeard056.mp3", "", "", 721262634, 1165992998, Spawn) + AddConversationOption(conversation, "How will I know where this barrier between worlds is 'thin'?", "Quest5Chat_6") + AddConversationOption(conversation, "How were the wards disabled?", "Quest5Chat_9") + AddConversationOption(conversation, "If I continue working tasks for you, I'm certain to find the spirit realm, myself. Goodbye.") + StartConversation(conversation, NPC, Spawn, "The wards that were disabled need to be replaced. Furthermore, they must be placed in areas where the barrier between our world and the spirit realm is 'thin'.") +end + +function Quest5Chat_6(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "dolur_axebeard/halas/great_shelf/dolur_axebeard/dolur_axebeard057.mp3", "", "", 3375420535, 3459651835, Spawn) + AddConversationOption(conversation, "The sooner I begin, the better.", "OfferCallingBack") + AddConversationOption(conversation, "I am no longer interested. Goodbye.") + StartConversation(conversation, NPC, Spawn, "The coldain spirits have indicated as such. They've etched designs in the snow indicating the best locations for the wards. The spirits have seen both sides, after all, so they would know.") +end + +function Quest5Chat_7(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "dolur_axebeard/halas/great_shelf/dolur_axebeard/dolur_axebeard050.mp3", "", "", 1997222652, 757650652, Spawn) + AddConversationOption(conversation, "Tell me more.", "Quest5Chat_3") + AddConversationOption(conversation, "This discussion tires me. Goodbye.") + StartConversation(conversation, NPC, Spawn, "Of course. This isn't dark magic. The wards merely allow the dwarves' spirits to return by showing them the way.") +end + +function Quest5Chat_8(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "dolur_axebeard/halas/great_shelf/dolur_axebeard/dolur_axebeard053.mp3", "", "", 61355934, 928420648, Spawn) + AddConversationOption(conversation, "Tell me how I can help.", "Quest5Chat_5") + AddConversationOption(conversation, "I'll be the judge of that. Goodbye.") + StartConversation(conversation, NPC, Spawn, "Of course it isn't.") +end + +function Quest5Chat_9(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "dolur_axebeard/halas/great_shelf/dolur_axebeard/dolur_axebeard058.mp3", "", "", 865813729, 1073348208, Spawn) + AddConversationOption(conversation, "I see. And how will I know where this barrier between worlds is 'thin'?", "Quest5Chat_6") + AddConversationOption(conversation, "So you need these wards replaced, then?", "OfferCallingBack") + AddConversationOption(conversation, "I have no wish to assist in raising the dead. Goodbye.") + StartConversation(conversation, NPC, Spawn, "Hmm... I can't say for sure, but I imagine they were disabled in much the same way that you destroyed their necromancers' totems: the orcs broke them. Our wards were probably smashed under some Ry'Gorr's hammer.") +end + +function Quest5Chat_10(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "dolur_axebeard/halas/great_shelf/dolur_axebeard/dolur_axebeard054.mp3", "", "", 3731109771, 1471852014, Spawn) + AddConversationOption(conversation, "Fine. I'll be leaving.") + AddConversationOption(conversation, "You're awfully touchy. Goodbye.") + StartConversation(conversation, NPC, Spawn, "Says ye. I think ye'd best be leaving, " .. GetName(Spawn) .. ", before I lose my temper.") +end + +function Quest5Chat_11(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "Of course not. How can I help?", "Quest5Chat_5") + AddConversationOption(conversation, "The jury is still out on that, but I'm willing to help today.", "Quest5Chat_5") + AddConversationOption(conversation, "I do feel underappreciated. Goodbye.") + StartConversation(conversation, NPC, Spawn, "It's a mutually beneficial relationship, certainly. I just hope ye don't feel I'm taking advantage of yer kindness, or vice versa.") +end + +function Quest5Chat_12(NPC, Spawn) + SetStepComplete(Spawn, CallingBack, 6) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "I hope we can tip the scales even futher.", "Quest5Chat_13") + AddConversationOption(conversation, "Is there anything else I can do to help, Dolur?", "Quest6Chat_1") + AddConversationOption(conversation, "I hope you have some real work for me, next time.", "Quest5Chat_13") + StartConversation(conversation, NPC, Spawn, "That'll tip the scales back in our favor! Well done, " .. GetName(Spawn) .. "") +end + +function Quest5Chat_13(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "dolur_axebeard/halas/great_shelf/dolur_axebeard/dolur_axebeard062.mp3", "", "", 1933886797, 2300926566, Spawn) + AddConversationOption(conversation, "Tell me more.", "Quest6Chat_1") + AddConversationOption(conversation, "What nightmares?", "Quest6Chat_1") + StartConversation(conversation, NPC, Spawn, "I hope so too, " .. GetName(Spawn) .. ". There's the business of my nightmares I'd like to speak to ye about.") +end + +function Quest6Chat_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "dolur_axebeard/halas/great_shelf/dolur_axebeard/dolur_axebeard063.mp3", "", "", 3479422497, 420666487, Spawn) + AddConversationOption(conversation, "Ah, that would be frightful.", "Quest6Chat_2") + AddConversationOption(conversation, "It's only a dream, right?", "Quest6Chat_2") + AddConversationOption(conversation, "I have no time to analyze your dreams. Goodbye.") + StartConversation(conversation, NPC, Spawn, "I'm in constant fear for our unseasoned coldain fighters, " .. GetName(Spawn) .. ". When I close my eyes, I can see them faltering. ") +end + +function Quest6Chat_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "dolur_axebeard/halas/great_shelf/dolur_axebeard/dolur_axebeard064.mp3", "", "", 884503499, 3365458147, Spawn) + AddConversationOption(conversation, "What else do you see in your dreams?", "Quest6Chat_3") + AddConversationOption(conversation, "Can I do something to help?", "Quest6Chat_4") + AddConversationOption(conversation, "This is a little too familiar and creepy. I'm leaving.") + StartConversation(conversation, NPC, Spawn, "In my dreaming sleep, I stand frozen in the midst of the fracas, watching helplessly as another green warrior is about to die.") +end + +function Quest6Chat_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "dolur_axebeard/halas/great_shelf/dolur_axebeard/dolur_axebeard065.mp3", "", "", 1112528692, 1589230613, Spawn) + AddConversationOption(conversation, "That's not far from what's actually happening.", "Quest6Chat_6") + AddConversationOption(conversation, "Someone should destroy those bone piles.", "Quest6Chat_4") + AddConversationOption(conversation, "This is a little too familiar and creepy. I'm leaving.") + StartConversation(conversation, NPC, Spawn, "I'm in a maze of long hallways. There are mounds of bone, strewn about haphazardly. Scores of cackling undead spawn from the piles and mill about.") +end + +function Quest6Chat_4(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "dolur_axebeard/halas/great_shelf/dolur_axebeard/dolur_axebeard066.mp3", "", "", 2614901969, 1124964549, Spawn) + AddConversationOption(conversation, "How would I go about doing that? ", "Quest6Chat_5") + AddConversationOption(conversation, "Destroying a pile of ossified bone isn't easy.", "Quest6Chat_5") + AddConversationOption(conversation, "Perhaps I'm not the right person for the job, after all.") + StartConversation(conversation, NPC, Spawn, "Aye. Someone should get out there and destroy the monster generators. Does this mean yer volunteering, " .. GetName(Spawn) .. "?") +end + +function Quest6Chat_5(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "dolur_axebeard/halas/great_shelf/dolur_axebeard/dolur_axebeard068.mp3", "", "", 3330795351, 440398686, Spawn) + AddConversationOption(conversation, "You don't have to worry anymore.", "OfferTheGauntlet") + AddConversationOption(conversation, "Of course. I'd love to help.", "OfferTheGauntlet") + AddConversationOption(conversation, "This is a really bad idea.") + StartConversation(conversation, NPC, Spawn, "Use yer weaponry, a heavy rock, or your bare fists, if that's all ye have on hand. I don't care, so long as they've been ground into a dust-like powder. Only then will the Ry'Gorr skeletons trouble us no longer.") +end + +function Quest6Chat_6(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "dolur_axebeard/halas/great_shelf/dolur_axebeard/dolur_axebeard067.mp3", "", "", 3225906480, 630261154, Spawn) + AddConversationOption(conversation, "Someone should destroy those bone piles.", "Quest6Chat_4") + AddConversationOption(conversation, "I must be leaving.") + StartConversation(conversation, NPC, Spawn, "And that's what disturbs me the most, " .. GetName(Spawn) .. ".") +end + +function Quest7Chat_1(NPC, Spawn) + SetStepComplete(Spawn, TheGauntlet, 2) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "dolur_axebeard/halas/great_shelf/dolur_axebeard/dolur_axebeard072.mp3", "", "", 1784529, 3849185180, Spawn) + AddConversationOption(conversation, "What about disabling the totems?","Quest7Chat_2") + AddConversationOption(conversation, "Even replacing the spirit wards didn't help?", "Quest7Chat_10") + AddConversationOption(conversation, "I managed to smash several skeletons into tiny bits.", "Quest7Chat_13") + AddConversationOption(conversation, "Well, if my efforts haven't been helpful, I'll go be of more use elsewhere.") + StartConversation(conversation, NPC, Spawn, "" .. GetName(Spawn) .. ", the worst part of this nightmare is feeling utterly helpless. The Ry'Gorr forces are as strong as ever. And to be completely honest, yer efforts haven't helped us gain much ground.") +end + +function Quest7Chat_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "dolur_axebeard/halas/great_shelf/dolur_axebeard/dolur_axebeard073.mp3", "", "", 2943845017, 2205345789, Spawn) + AddConversationOption(conversation, "Oh, I see.", "Quest7Chat_3") + AddConversationOption(conversation, "This is helpless! I quit.") + StartConversation(conversation, NPC, Spawn, "What about it? The orcs took to disabling our wards while ye were smashing up their totems, and they're making more of the blasted things as we speak.") +end + +function Quest7Chat_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "dolur_axebeard/halas/great_shelf/dolur_axebeard/dolur_axebeard076.mp3", "", "", 3845015927, 2518600901, Spawn) + AddConversationOption(conversation, "What did you have in mind?", "Quest7Chat_4") + AddConversationOption(conversation, "I could look for the necromancers.", "Quest7Chat_11") + AddConversationOption(conversation, "I've already bled enough for your goals. Count me out.") + StartConversation(conversation, NPC, Spawn, "Yer efforts, while valiant, aren't having a lasting impact on their skeletal horde. And the constant assault of undead is wearing us down. We've gone about this plan of attack all sideways, if ye ask me. A more precision strike is in order.") +end + +function Quest7Chat_4(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "dolur_axebeard/halas/great_shelf/dolur_axebeard/dolur_axebeard077.mp3", "", "", 3800804769, 3084250948, Spawn) + AddConversationOption(conversation, "Makes sense.", "Quest7Chat_5") + AddConversationOption(conversation, "But where are they hiding?", "Quest7Chat_5") + AddConversationOption(conversation, "I'd rather not venture into the proverbial lion's den. Goodbye.") + StartConversation(conversation, NPC, Spawn, "The orcish necromancers are the ultimate source of the undead army. Ye need to locate them.") +end + +function Quest7Chat_5(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "dolur_axebeard/halas/great_shelf/dolur_axebeard/dolur_axebeard079.mp3", "", "", 4093864666, 2060412696, Spawn) + AddConversationOption(conversation, "Any other reports?", "Quest7Chat_6") + AddConversationOption(conversation, "I'll figure this out without their help. Goodbye.") + StartConversation(conversation, NPC, Spawn, "My scouts are giving me conflicting information. Mapin thinks they're back behind a snowdrift on Ry'Gorr Isle. Letke thought he saw a cadre of necromancer types gathering on a floating chunk of ice off to the northwest.") +end + +function Quest7Chat_6(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "dolur_axebeard/halas/great_shelf/dolur_axebeard/dolur_axebeard080.mp3", "", "", 1837622160, 4089784009, Spawn) + AddConversationOption(conversation, "Ugh. So which is it?", "Quest7Chat_7") + AddConversationOption(conversation, "Ol' Blizzardbeard?", "Quest7Chat_12") + AddConversationOption(conversation, "When you get your intelligence in order, let me know. Goodbye.") + StartConversation(conversation, NPC, Spawn, "Aye. Ol' Blizzardbeard is under the impression that they're simply working their dark magic out in the open, carving the totems under cover of night when we're not looking.") +end + +function Quest7Chat_7(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "dolur_axebeard/halas/great_shelf/dolur_axebeard/dolur_axebeard082.mp3", "", "", 4103645790, 7293030, Spawn) + AddConversationOption(conversation, "That sounds more plausible.", "Quest7Chat_8") + AddConversationOption(conversation, "No wonder it's been hard to find.", "Quest7Chat_8") + AddConversationOption(conversation, "This sounds like a waste of my time.") + StartConversation(conversation, NPC, Spawn, "The most reliable reconnoitering we have, as confirmed by scout Dansk and scout Clawhammer, indicates that the necromancers have holed up in a natural cavern. The cave is on an island off the coast to the southwest.") +end + +function Quest7Chat_8(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "dolur_axebeard/halas/great_shelf/dolur_axebeard/dolur_axebeard083.mp3", "", "", 2366031645, 641653492, Spawn) + AddConversationOption(conversation, "These orcs are wily. Their behavior defies expectations.", "Quest7Chat_9") + AddConversationOption(conversation, "They've had more than enough time to fortify the area and make it inhabitable.", "Quest7Chat_9") + AddConversationOption(conversation, "The last place you'd look will be the first place they'd hide.", "Quest7Chat_9") + AddConversationOption(conversation, "If you're not even certain the Ry'Gorr necromancers are in there, I'll spend my time elsewhere.") + StartConversation(conversation, NPC, Spawn, "It's the last place I would have expected to find them. Even if it weren't orcish territory, that area is treacherously difficult to navigate, and prone to cave-ins. We had considered it too dangerous to explore.") +end + +function Quest7Chat_9(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "dolur_axebeard/halas/great_shelf/dolur_axebeard/dolur_axebeard084.mp3", "", "", 4243043314, 1523140445, Spawn) + AddConversationOption(conversation, "Of course.", "OfferOffOssuary") + AddConversationOption(conversation, "I'll see this through to the end.", "OfferOffOssuary") + AddConversationOption(conversation, "Though your scouts' information may not be accurate, it's still the best lead we've got.", "OfferOffOssuary") + AddConversationOption(conversation, "If you're not certain the Ry'Gorr necromancers are in there, I'll not waste my time.") + StartConversation(conversation, NPC, Spawn, "Aye, the lead is solid. I'm sorry to burden ye with another grim task, especially when the outcome is uncertain, but could I count on ye to explore this cavern?") +end + +function Quest7Chat_10(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "dolur_axebeard/halas/great_shelf/dolur_axebeard/dolur_axebeard074.mp3", "", "", 3668194887, 51910928, Spawn) + AddConversationOption(conversation, "Oh, I see.", "Quest7Chat_3") + AddConversationOption(conversation, "This is helpless! I quit.") + StartConversation(conversation, NPC, Spawn, "It kept us on equal footing with them, at best.") +end + +function Quest7Chat_11(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "dolur_axebeard/halas/great_shelf/dolur_axebeard/dolur_axebeard078.mp3", "", "", 571602465, 4229451174, Spawn) + AddConversationOption(conversation, "As always, we're on the same page.", "Quest7Chat_5") + AddConversationOption(conversation, "Any idea where they could be hiding?", "Quest7Chat_5") + AddConversationOption(conversation, "I'll figure this out on my own. Goodbye.") + StartConversation(conversation, NPC, Spawn, "That was my thought, precisely.") +end + +function Quest7Chat_12(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "dolur_axebeard/halas/great_shelf/dolur_axebeard/dolur_axebeard081.mp3", "", "", 3792358161, 1911808576, Spawn) + AddConversationOption(conversation, "Sounds like he's what you'd call a drunkard.", "Quest7Chat_7") + AddConversationOption(conversation, "Well, do you have any reliable information?", "Quest7Chat_7") + AddConversationOption(conversation, "Oh, this is such a waste of time! Goodbye.") + StartConversation(conversation, NPC, Spawn, "Well, heh. That's not his real name. We just took to calling him that since he has ale suds in his beard more often than not. He's not what ye'd call reliable.") +end + +function Quest7Chat_13(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "dolur_axebeard/halas/great_shelf/dolur_axebeard/dolur_axebeard075.mp3", "", "", 2950142669, 2951966236, Spawn) + AddConversationOption(conversation, "Oh, I see.", "Quest7Chat_3") + AddConversationOption(conversation, "This is helpless! I quit.") + StartConversation(conversation, NPC, Spawn, "Aye, and there will be plenty extra where those came from. Point of fact, there are more bones on the battlefield than ice floes in Iceclad.") +end + +function Quest7Chat_14(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "dolur_axebeard/halas/great_shelf/dolur_axebeard/dolur_axebeard087.mp3", "", "", 2455437379, 1149838635, Spawn) + AddConversationOption(conversation, "I did, but there will be more of them.", "Quest7Chat_15") + AddConversationOption(conversation, "Yes, but there are necromancers all over the Ossuary of Ice.", "Quest7Chat_15") + StartConversation(conversation, NPC, Spawn, "Aye! So it was correct. It looks like I owe Dansk and Clawhammer a whole keg of ale for their keen eyes. Brell bless 'em. And were ye able to give the necromancers a sound beating?") +end + +function Quest7Chat_15(NPC, Spawn) + SetStepComplete(Spawn, OffOssuary, 3) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "dolur_axebeard/halas/great_shelf/dolur_axebeard/dolur_axebeard088.mp3", "", "", 191733965, 1473786520, Spawn) + AddConversationOption(conversation, "Figuratively speaking, of course.", "Quest8Chat_1") + AddConversationOption(conversation, "So, I'll be heading back to the Ossuary?", "Quest8Chat_1") + StartConversation(conversation, NPC, Spawn, "Well then. How about we cut off the head of the frost wurm?") +end + +function Quest8Chat_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "dolur_axebeard/halas/great_shelf/dolur_axebeard/dolur_axebeard089.mp3", "", "", 1399173958, 925064684, Spawn) + AddConversationOption(conversation, "We need to sever the head of this frost wurm.", "Quest8Chat_2") + AddConversationOption(conversation, "We need to find and slay their leader.", "Quest8Chat_2") + AddConversationOption(conversation, "I've already been in there once. Count me out.") + StartConversation(conversation, NPC, Spawn, GetName(Spawn) .. ", ye've managed to pinpoint the heart of the Ry'Gorr's operations. This is a most fortunate turn of events. Armed with this information, we stand a chance to take back Erollis from the orcs for good. But before we start celebrating...") +end + +function Quest8Chat_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "dolur_axebeard/halas/great_shelf/dolur_axebeard/dolur_axebeard090.mp3", "", "", 3782002158, 339970398, Spawn) + AddConversationOption(conversation, "What should I look for?", "Quest8Chat_3") + AddConversationOption(conversation, "How will I know when I've found the leader?", "Quest8Chat_3") + AddConversationOption(conversation, "I've already been in there once and I'd rather not go back. Count me out.") + StartConversation(conversation, NPC, Spawn, "And that means heading back to the Ossuary of Ice. But this time, ye'll be on the lookout for their leader and whatever tools he's using to manufacture the totems.") +end + +function Quest8Chat_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "dolur_axebeard/halas/great_shelf/dolur_axebeard/dolur_axebeard091.mp3", "", "", 1275705451, 1277532421, Spawn) + AddConversationOption(conversation, "What are they doing?", "Quest8Chat_4") + AddConversationOption(conversation, "Why would they stand around the crystal?", "Quest8Chat_4") + AddConversationOption(conversation, "I never really liked Dark Crystal. Goodbye.") + StartConversation(conversation, NPC, Spawn, "I've had this recurring vision, and now it makes sense. In my dreams, I see an unholy crystal, jutting out of the ice like a festering claw. The Ry'Gorr necromancers stand around the crystal. ") +end + +function Quest8Chat_4(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "dolur_axebeard/halas/great_shelf/dolur_axebeard/dolur_axebeard092.mp3", "", "", 420466205, 1714342326, Spawn) + AddConversationOption(conversation, "And you think their leader can be found near the crystal?", "Quest8Chat_5") + AddConversationOption(conversation, "Your dreams give me the creeps.") + StartConversation(conversation, NPC, Spawn, "They worship it, day and night. From that dark crystal have they hewn out their dark totems, for dark purposes.") +end + +function Quest8Chat_5(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "dolur_axebeard/halas/great_shelf/dolur_axebeard/dolur_axebeard093.mp3", "", "", 4158777866, 37202239, Spawn) + AddConversationOption(conversation, "He must be driven.", "Quest8Chat_6") + AddConversationOption(conversation, "He must be mad.", "Quest8Chat_6") + AddConversationOption(conversation, "I must be going. Goodbye.") + StartConversation(conversation, NPC, Spawn, "Aye. Now that ye've found the crystal, he needs to protect it. He stands over it, tirelessly. He never sleeps. I can see his reflection in the crystal. His eyes burn with purpose.") +end + +function Quest8Chat_6(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "dolur_axebeard/halas/great_shelf/dolur_axebeard/dolur_axebeard094.mp3", "", "", 4080806581, 1372886220, Spawn) + AddConversationOption(conversation, "While I'm there, I may as well destroy that crystal.", "Quest8Chat_7") + AddConversationOption(conversation, "Anything else?", "Quest8Chat_7") + AddConversationOption(conversation, "I don't feel like my efforts are appreciated. Goodbye.") + StartConversation(conversation, NPC, Spawn, "He must be eliminated. Only by dealing with their fearless leader will we see any reprieve out here on the battlefield. Ye've seen firsthand that other tactics are ultimately ineffective.") +end + +function Quest8Chat_7(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "dolur_axebeard/halas/great_shelf/dolur_axebeard/dolur_axebeard095.mp3", "", "", 4108326370, 3849804225, Spawn) + AddConversationOption(conversation, "What do you think the crystal is made of?", "Quest8Chat_8") + AddConversationOption(conversation, "What is the crystal?", "Quest8Chat_8") + AddConversationOption(conversation, "I don't want to touch the foul thing. Goodbye.") + StartConversation(conversation, NPC, Spawn, "Yes. After ye've dealt with the source of their leadership, ye'll want to destroy the source of those totems. Break the crystal.") +end + +function Quest8Chat_8(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "dolur_axebeard/halas/great_shelf/dolur_axebeard/dolur_axebeard096.mp3", "", "", 568891414, 964093809, Spawn) + AddConversationOption(conversation, "That's terrifying.", "Quest8Chat_9") + AddConversationOption(conversation, "Whatever it is, it must be destroyed.", "Quest8Chat_9") + AddConversationOption(conversation, "On second thought, perhaps this isn't the job for me.") + StartConversation(conversation, NPC, Spawn, "I'm not certain, but if I had to guess... I'd say it's a piece of the sky that came raining down upon us that fateful day that we were separated from the rest of Velious. I'd say it's a piece of Luclin.") +end + +function Quest8Chat_9(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "dolur_axebeard/halas/great_shelf/dolur_axebeard/dolur_axebeard097.mp3", "", "", 1964889828, 3937802389, Spawn) + AddConversationOption(conversation, "I'll put an end to your nightmares.", "OfferSeveringHead") + AddConversationOption(conversation, "I'll sever the head of this wurm, as you put it.", "OfferSeveringHead") + AddConversationOption(conversation, "It sounds like another waste of time. Goodbye. ") + StartConversation(conversation, NPC, Spawn, "How does that sound?") +end + +function Quest8Chat_10(NPC, Spawn) + SetStepComplete(Spawn, SeveringHead, 3) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "I'm glad to have helped.", "Quest9Chat_1") + AddConversationOption(conversation, "So, do you need any more help?", "Quest9Chat_1") + StartConversation(conversation, NPC, Spawn, "I wish I could have been there to see the looks on thier tooth-grinned faces. Haha! It must have been a sight to behold. And now their forced run around like helpless, leaderless, axe-fodder.") +end + +function Quest9Chat_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "I'm fairly sure.", "Quest9Chat_2") + AddConversationOption(conversation, "Your flattery will be the death of me, Dolur.", "Quest9Chat_2") + StartConversation(conversation, NPC, Spawn, "Are ye sure ye don't have any Frostreaver blood in ye, " .. GetName(Spawn) .. "?") +end + +function Quest9Chat_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "I'm just glad it's over.", "Quest9Chat_3") + AddConversationOption(conversation, "A few missteps are to be expected.", "Quest9Chat_3") + AddConversationOption(conversation, "War is rarely clean or predictable.", "Quest9Chat_3") + AddConversationOption(conversation, 'What you call "trial and error," I call "dangerous and sloppy."') + StartConversation(conversation, NPC, Spawn, "I've got an itching to make ye an honorary member of my family! Ye've turned this whole battle around, and though there was a bit of trial and error to the process, 'tis the end result that matters.") +end + +function Quest9Chat_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "I'd be happy to help.", "OfferNightmareOver") + AddConversationOption(conversation, "I will head over right away.", "OfferNightmareOver") + AddConversationOption(conversation, "I could use a break, actually. Goodbye.") + StartConversation(conversation, NPC, Spawn, "Yer welcome to stay here and celebrate, but I'd say yer handiwork will be needed more elsewhere. The men in Cragged Spine could use someone with yer tenacity. What do ye say?") +end + +function OfferGlimmerOrc(NPC, Spawn) + OfferQuest(NPC, Spawn, GlimmerOrc) +end + +function OfferMurkyMystery(NPC, Spawn) + OfferQuest(NPC, Spawn, MurkyMystery) +end + +function OfferScatteringAshes(NPC, Spawn) + OfferQuest(NPC, Spawn, ScatteringAshes) +end + +function OfferTotemAnnihilation(NPC, Spawn) + OfferQuest(NPC, Spawn, TotemAnnihilation) +end + +function OfferCallingBack(NPC, Spawn) + OfferQuest(NPC, Spawn, CallingBack) +end + +function OfferTheGauntlet(NPC, Spawn) + OfferQuest(NPC, Spawn, TheGauntlet) +end + +function OfferOffOssuary(NPC, Spawn) + OfferQuest(NPC, Spawn, OffOssuary) +end + +function OfferSeveringHead(NPC, Spawn) + OfferQuest(NPC, Spawn, SeveringHead) +end + +function OfferNightmareOver(NPC, Spawn) + OfferQuest(NPC, Spawn, NightmareOver) +end \ No newline at end of file diff --git a/server/SpawnScripts/FrostfangSea/DrallinCaelthis.lua b/server/SpawnScripts/FrostfangSea/DrallinCaelthis.lua new file mode 100644 index 000000000..17d782b15 --- /dev/null +++ b/server/SpawnScripts/FrostfangSea/DrallinCaelthis.lua @@ -0,0 +1,19 @@ +--[[ + Script Name : SpawnScripts/FrostfangSea/DrallinCaelthis.lua + Script Purpose : Drallin Caelthis + Script Author : theFoof + Script Date : 2013.10.30 + Script Notes : +--]] + +function spawn(NPC) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + PlayFlavor(NPC, "", "Do I have any qualms about fencing items from across the sea? Not a one. The money I make more than compensates for the risk.", "chuckle", 1689589577, 4560189, Spawn) +end \ No newline at end of file diff --git a/server/SpawnScripts/FrostfangSea/DyrunnGoldgrip.lua b/server/SpawnScripts/FrostfangSea/DyrunnGoldgrip.lua new file mode 100644 index 000000000..3bfe2546c --- /dev/null +++ b/server/SpawnScripts/FrostfangSea/DyrunnGoldgrip.lua @@ -0,0 +1,30 @@ +--[[ + Script Name : SpawnScripts/FrostfangSea/DyrunnGoldgrip.lua + Script Purpose : Dyrunn Goldgrip + Script Author : theFoof + Script Date : 2013.10.30 + Script Notes : +--]] + +require"SpawnScripts/FrostfangSea/halas_proximity_cheer" + +function spawn(NPC) + SetPlayerProximityFunction(NPC, 15, "ProxCheer") +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + + local choice = math.random(1,3) + if choice == 1 then + PlayFlavor(NPC, "", "Your coin will be safe in the Frigid Strongbox, New Halas' official bank.", "hello", 1689589577, 4560189, Spawn) + elseif choice == 2 then + PlayFlavor(NPC, "", "Bank accounts are like weapons. You must maintain them, lest they erode!", "smile", 1689589577, 4560189, Spawn) + else + PlayFlavor(NPC, "", "Where did I put my abacus?", "ponder", 1689589577, 4560189, Spawn) + end +end \ No newline at end of file diff --git a/server/SpawnScripts/FrostfangSea/EidnarAartsson.lua b/server/SpawnScripts/FrostfangSea/EidnarAartsson.lua new file mode 100644 index 000000000..a6a7d5a2b --- /dev/null +++ b/server/SpawnScripts/FrostfangSea/EidnarAartsson.lua @@ -0,0 +1,53 @@ +--[[ + Script Name : SpawnScripts/FrostfangSea/EidnarAartsson.lua + Script Purpose : troubador trainer + Script Author : theFoof + Script Date : 2013.9.24 + Script Notes : +--]] + +local TROUBADOR = 36 + +function spawn(NPC) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + if GetClass(Spawn) == TROUBADOR then + conversation = CreateConversation() + PlayFlavor(NPC, "", "", "hello", 0, 0, Spawn) + AddConversationOption(conversation, "What advice do you have for a fellow troubador?", "TroubChat1") + AddConversationOption(conversation, "It certainly can. Good bye.") + StartConversation(conversation, NPC, Spawn, "Welcome, fellow troubador. This city can always use more talented performers!") + else + PlayFlavor(NPC, "", "What's that?", "hello", 0, 0, Spawn) + end +end + +function TroubChat1(NPC, Spawn) + conversation = CreateConversation() + FaceTarget(NPC, Spawn) + + AddConversationOption(conversation, "That's useful to know!", "TroubChat2") + StartConversation(conversation, NPC, Spawn, "If you find items that add to your agility or stamina, then take them! Agility affects both your ability to inflict damage and avoid taking damage from others. Your stamina affects your health. This is crucial.") +end + +function TroubChat2(NPC, Spawn) + conversation = CreateConversation() + FaceTarget(NPC, Spawn) + + AddConversationOption(conversation, "That's interesting.", "TroubChat3") + StartConversation(conversation, NPC, Spawn, "Our songs of cheer are incredibly valuable to others. They can embolden mages and anyone else wielding magical spells, increasing their offense and granting them the power to perform outstanding feats.") +end + +function TroubChat3(NPC, Spawn) + conversation = CreateConversation() + FaceTarget(NPC, Spawn) + + AddConversationOption(conversation, "Thank you for the advice.") + StartConversation(conversation, NPC, Spawn, "But do not neglect your weapon skills. These are essential to our survival! Uplifting songs can strengthen you and your group mates, but without a weapon to inflict damage there is no killing blow.") +end \ No newline at end of file diff --git a/server/SpawnScripts/FrostfangSea/EnvoyTamiSwifthammer.lua b/server/SpawnScripts/FrostfangSea/EnvoyTamiSwifthammer.lua new file mode 100644 index 000000000..fa050df0e --- /dev/null +++ b/server/SpawnScripts/FrostfangSea/EnvoyTamiSwifthammer.lua @@ -0,0 +1,27 @@ +--[[ + Script Name : SpawnScripts/FrostfangSea/EnvoyTamiSwifthammer.lua + Script Purpose : Envoy Tami Swifthammer + Script Author : theFoof + Script Date : 2013.09.16 + Script Notes : +--]] + +function spawn(NPC) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + local choice = math.random(1,2) + + if choice == 1 then + PlayFlavor(NPC, "", "Marr's blessings!", "", 0, 0, Spawn) + elseif choice == 2 then + PlayFlavor(NPC, "", "Good day!", "", 1689589577, 4560189, Spawn) + end + +end + diff --git a/server/SpawnScripts/FrostfangSea/EvigistheAncient.lua b/server/SpawnScripts/FrostfangSea/EvigistheAncient.lua new file mode 100644 index 000000000..98ac92e08 --- /dev/null +++ b/server/SpawnScripts/FrostfangSea/EvigistheAncient.lua @@ -0,0 +1,23 @@ +--[[ + Script Name : SpawnScripts/FrostfangSea/EvigistheAncient.lua + Script Purpose : for the spawn Evigis the Ancient + Script Author : theFoof + Script Date : 2013.6.13 + Script Notes : +--]] + +local NapEvigis = 64 + +function spawn(NPC) +end + +function respawn(NPC) + spawn(NPC) +end + +function casted_on(NPC, Spawn, SpellName) + if SpellName == "Gerla's Elemental Lullaby" then + KillSpawn(NPC, Spawn, 1) + SetStepComplete(Spawn, NapEvigis, 1) + end +end \ No newline at end of file diff --git a/server/SpawnScripts/FrostfangSea/FilnnShatterhand.lua b/server/SpawnScripts/FrostfangSea/FilnnShatterhand.lua new file mode 100644 index 000000000..3506afb0c --- /dev/null +++ b/server/SpawnScripts/FrostfangSea/FilnnShatterhand.lua @@ -0,0 +1,19 @@ +--[[ + Script Name : SpawnScripts/FrostfangSea/FilnnShatterhand.lua + Script Purpose : Filnn Shatterhand + Script Author : theFoof + Script Date : 2013.10.30 + Script Notes : +--]] + +function spawn(NPC) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + PlayFlavor(NPC, "", "Compiling the short history of our city may seem easy, but there is much work to be done.", "", 1689589577, 4560189, Spawn) +end \ No newline at end of file diff --git a/server/SpawnScripts/FrostfangSea/FirebeardOrcFootprints.lua b/server/SpawnScripts/FrostfangSea/FirebeardOrcFootprints.lua new file mode 100644 index 000000000..f7c64abc4 --- /dev/null +++ b/server/SpawnScripts/FrostfangSea/FirebeardOrcFootprints.lua @@ -0,0 +1,18 @@ +--[[ + Script Name : SpawnScripts/FrostfangSea/FirebeardOrcFootprints.lua + Script Purpose : the quest Beets the Alternative + Script Author : theFoof + Script Date : 2013.5.18 +--]] +local BeetsAlternative = 13 + +function spawn(NPC) + AddSpawnAccess(NPC, NPC) + SetPlayerProximityFunction(NPC, 50, "SpawnAccess", "SpawnAccess") +end + +function SpawnAccess(NPC, Player) + if HasCompletedQuest(Player, BeetsAlternative) or GetQuestStep(Player, BeetsAlternative) > 2 then + AddSpawnAccess(NPC, Player) + end +end \ No newline at end of file diff --git a/server/SpawnScripts/FrostfangSea/FlibbitQuagmarr.lua b/server/SpawnScripts/FrostfangSea/FlibbitQuagmarr.lua new file mode 100644 index 000000000..b7e1ccd15 --- /dev/null +++ b/server/SpawnScripts/FrostfangSea/FlibbitQuagmarr.lua @@ -0,0 +1,551 @@ +--[[ + Script Name : SpawnScripts/FrostfangSea/FlibbitQuagmarr.lua + Script Purpose : Flibbit Quagmarr + Script Author : theFoof + Script Date : 2013.05.21 + Script Notes : +--]] +local IcemanesCometh = 18 + +local UnbearableProblem = 25 + +local LostFroglok = 26 + +local AbsentEffigy = 27 + +local BarteringCrystals = 28 + +local Pelted = 29 + +local GreatShelf = 30 + +function spawn(NPC) + AddSpawnAccess(NPC, NPC) + ProvidesQuest(NPC, UnbearableProblem) + ProvidesQuest(NPC, LostFroglok) + ProvidesQuest(NPC, AbsentEffigy) + ProvidesQuest(NPC, BarteringCrystals) + ProvidesQuest(NPC, Pelted) + ProvidesQuest(NPC, GreatShelf) + SetPlayerProximityFunction(NPC, 50, "SpawnAccess", "SpawnAccess") +end + +function respawn(NPC) + spawn(NPC) +end + +function SpawnAccess(NPC, Spawn) + if not HasCompletedQuest(Spawn, GreatShelf) then + AddSpawnAccess(NPC, Spawn) + end +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + if HasCompletedQuest(Spawn, UnbearableProblem) == false and HasQuest(Spawn, UnbearableProblem) == false then + PlayFlavor(NPC, "flibbit_quagmarr/halas/gwenevyns_cove/flibbit_quagmarr/flibbit_quagmarr_001.mp3", "", "", 3105180851, 2650595838, Spawn) + AddConversationOption(conversation, "Indeed I have. I am " .. GetName(Spawn) .. ".", "Quest1Chat_1") + AddConversationOption(conversation, "No, I am not a disciple of Marr. My name's " .. GetName(Spawn) .. ".", "Quest1Chat_2") + StartConversation(conversation, NPC, Spawn, "Good day, traveler. I am Flibbit Quagmarr and this is my son, Splorpy. Have you come to Erollis Isle to pay tribute to the Marrs?") + elseif GetQuestStep(Spawn, UnbearableProblem) == 1 then + PlayFlavor(NPC, "flibbit_quagmarr/halas/gwenevyns_cove/flibbit_quagmarr/flibbit_quagmarr_002.mp3", "", "", 524114756, 2569165165, Spawn) + AddConversationOption(conversation, "No, I cannot say that the path is safe. Where can I find the blizzard grizzlies?", "Quest1Chat_6") + StartConversation(conversation, NPC, Spawn, "Have you cleared a safe path for the pilgrims?") + elseif GetQuestStep(Spawn, UnbearableProblem) == 2 then + PlayFlavor(NPC, "flibbit_quagmarr/halas/gwenevyns_cove/flibbit_quagmarr/flibbit_quagmarr_003.mp3", "", "", 2615004659, 1301088947, Spawn) + AddConversationOption(conversation, "I have killed many grizzlies and have made the path to New Halas much safer for the pilgrims.", "Quest1Chat_7") + StartConversation(conversation, NPC, Spawn, "Have you killed the pilgrim-eating grizzlies, " .. GetName(Spawn) .. "?") + elseif HasCompletedQuest(Spawn, UnbearableProblem) and HasCompletedQuest(Spawn, LostFroglok) == false and HasQuest(Spawn, LostFroglok) == false then + Quest2Chat_2(NPC, Spawn) + elseif HasQuest(Spawn, LostFroglok) and GetQuestStep(Spawn, LostFroglok) < 3 then + PlayFlavor(NPC, "flibbit_quagmarr/halas/gwenevyns_cove/flibbit_quagmarr/flibbit_quagmarr_005.mp3", "", "", 1521546792, 2428780589, Spawn) + AddConversationOption(conversation, "Not yet, I am still gathering information.", "Quest2Chat_6") + StartConversation(conversation, NPC, Spawn, "Have you found my son?") + elseif GetQuestStep(Spawn, LostFroglok) == 3 then + PlayFlavor(NPC, "flibbit_quagmarr/halas/gwenevyns_cove/flibbit_quagmarr/flibbit_quagmarr_006.mp3", "", "", 2660653144, 1586161380, Spawn) + AddConversationOption(conversation, "I found him southwest of here. He said he was scared off by a large man with a beard.", "Quest2Chat_7") + StartConversation(conversation, NPC, Spawn, "Splorpy! You have returned my son to me, " .. GetName(Spawn) .. "!") + elseif HasCompletedQuest(Spawn, LostFroglok) and not HasCompletedQuest(Spawn, AbsentEffigy) and not HasQuest(Spawn, AbsentEffigy) then + PlayFlavor(NPC, "flibbit_quagmarr/halas/gwenevyns_cove/flibbit_quagmarr/flibbit_quagmarr_007.mp3", "", "", 226527743, 1076016282, Spawn) + AddConversationOption(conversation, "I'm finding enough work to keep myself busy for a little while. How are you and Splorpy faring?", "Quest3Chat_2") + StartConversation(conversation, NPC, Spawn, "" .. GetName(Spawn) .. ", how are you finding Gwenevyn's Cove?") + elseif GetQuestStep(Spawn, AbsentEffigy) == 1 then + AddConversationOption(conversation, "Not yet. Where do you suppose I should look?", "Quest3Chat_4") + StartConversation(conversation, "Have you had any luck finding the Effigy of Mithaniel?") + elseif GetQuestStep(Spawn, AbsentEffigy) == 2 then + PlayFlavor(NPC, "flibbit_quagmarr/halas/gwenevyns_cove/flibbit_quagmarr/flibbit_quagmarr_009.mp3", "", "", 3889781371, 2180434460, Spawn) + AddConversationOption(conversation, "I do! I found it in a frigid whirlstorm, just as you suspected.", "Quest3Chat_5") + StartConversation(conversation, NPC, Spawn, "I don't suppose you have any word about the Effigy of Mithaniel?") + elseif HasCompletedQuest(Spawn, AbsentEffigy) and not HasCompletedQuest(Spawn, BarteringCrystals) and not HasQuest(Spawn, BarteringCrystals) then + Quest4Chat_2(NPC, Spawn) + elseif GetQuestStep(Spawn, BarteringCrystals) == 1 then + AddConversationOption(conversation, "No, I haven't. Where can I find them again?", "Quest4Chat_7") + StartConversation(conversation, NPC, Spawn, "Have you found any of the strange ice crystals?") + elseif GetQuestStep(Spawn, BarteringCrystals) == 2 then + PlayFlavor(NPC, "flibbit_quagmarr/halas/gwenevyns_cove/flibbit_quagmarr/flibbit_quagmarr_012.mp3", "", "", 664563942, 2094087421, Spawn) + AddConversationOption(conversation, "I did find some of the strange ice crystals. Oddly enough, they do not melt from heat and while I am no alchemist, I think it means they are not made of ice.", "Quest4Chat_8") + StartConversation(conversation, NPC, Spawn, "Have you had any luck finding the ice crystals?") + elseif HasCompletedQuest(Spawn, BarteringCrystals) and not HasCompletedQuest(Spawn, Pelted) and not HasQuest(Spawn, Pelted) then + PlayFlavor(NPC, "flibbit_quagmarr/halas/gwenevyns_cove/flibbit_quagmarr/flibbit_quagmarr_013.mp3", "", "", 1522544075, 2501686362, Spawn) + AddConversationOption(conversation, "Hello, Flibbit.", "Quest5Chat_1") + StartConversation(conversation, NPC, Spawn, "Greetings, " .. GetName(Spawn) .. ", hero of Gwenevyn's Cove!") + elseif GetQuestStep(Spawn, Pelted) == 1 then + AddConversationOption(conversation, "I have not yet collected all of the pelts. Where can I find the cubs?", "Quest5Chat_5") + StartConversation(conversation, NPC, Spawn, "Do you have the icemane cub pelts?") + elseif GetQuestStep(Spawn, Pelted) == 2 then + PlayFlavor(NPC, "flibbit_quagmarr/halas/gwenevyns_cove/flibbit_quagmarr/flibbit_quagmarr_015.mp3", "", "", 2399568158, 1310414572, Spawn) + AddConversationOption(conversation, "I have collected the icemane cub pelts that you requested.", "Quest5Chat_6") + StartConversation(conversation, NPC, Spawn, "Do you have any news for me?") + elseif HasCompletedQuest(Spawn, Pelted) and not HasCompletedQuest(Spawn, IcemanesCometh) then + PlayFlavor(NPC, "", "Our fellow pilgrim, Verien Skysigh, has been asking for your attention. I think he requires your aid, brave one.", "", 0, 0, Spawn) + elseif HasCompletedQuest(Spawn, Pelted) and HasCompletedQuest(Spawn, IcemanesCometh) and not HasCompletedQuest(Spawn, GreatShelf) and not HasQuest(Spawn, GreatShelf) then + PlayFlavor(NPC, "flibbit_quagmarr/halas/gwenevyns_cove/flibbit_quagmarr/flibbit_quagmarr_016.mp3", "", "", 3282158766, 1454461175, Spawn) + AddConversationOption(conversation, "That's great news, Flibbit!", "Quest6Chat_1") + StartConversation(conversation, NPC, Spawn, "The time has finally come for my son Splorpy and I to leave Gwenevyn's Cove and continue on our pilgrimage to New Halas.") + elseif GetQuestStep(Spawn, GreatShelf) == 1 then + Quest6Chat_6(NPC, Spawn) + elseif GetQuestStep(Spawn, GreatShelf) == 2 then + PlayFlavor(NPC, "", "I will meet you at the Great Shelf!", "", 0, 0, Spawn) + end +end + +function Quest1Chat_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "flibbit_quagmarr/halas/gwenevyns_cove/flibbit_quagmarr/flibbit_quagmarr_019.mp3", "", "", 3157384930, 341257107, Spawn) + AddConversationOption(conversation, "What is wrong with the path?", "Quest1Chat_3") + StartConversation(conversation, NPC, Spawn, "Ah! Your name we have heard, " .. GetName(Spawn) .."! News of your exploits has traveled far. My son and I have made the pilgrimage to Erollis Isle and we plan on finding a place to live in New Halas. Unfortunately, we cannot continue on to New Halas until the path is made safe once again.") +end + +function Quest1Chat_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "flibbit_quagmarr/halas/gwenevyns_cove/flibbit_quagmarr/flibbit_quagmarr_020.mp3", "", "", 3443691770, 4044378382, Spawn) + AddConversationOption(conversation, "My reasons are my own, but I will help any pilgrims in need.", "Quest1Chat_3") + StartConversation(conversation, NPC, Spawn, "Then what is your purpose here?") +end + +function Quest1Chat_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "flibbit_quagmarr/halas/gwenevyns_cove/flibbit_quagmarr/flibbit_quagmarr_021.mp3", "", "", 2518687003, 3994330850, Spawn) + AddConversationOption(conversation, "What would you have me do?", "Quest1Chat_4") + StartConversation(conversation, NPC, Spawn, "Many pilgrims that have tried to make their way to New Halas have sadly fallen along the way. The grizzlies are eating their remains. Though it may be the natural way of life, it has accustomed the bears to the taste of the pilgrims' flesh, making the bears very dangerous to travelers in this area.") +end + +function Quest1Chat_4(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "flibbit_quagmarr/halas/gwenevyns_cove/flibbit_quagmarr/flibbit_quagmarr_022.mp3", "", "", 2370229113, 461588246, Spawn) + AddConversationOption(conversation, "I understand. I shall clear a safe path for the pilgrims and return to you once I have finished.", "OfferUnbearableProblem") + AddConversationOption(conversation, "What's the Cairn of the Huntress?", "Quest1Chat_5") + AddConversationOption(conversation, "I'm not going to fight bears!") + StartConversation(conversation, NPC, Spawn, "Please clear out the blizzard grizzlies around Gwenevyn's Cove so that the pilgrims traveling through this area are not hunted by the grizzly bears. It is unfortunate that the grizzlies must be killed, but the pilgrimage to the Cairn of The Huntress is of more importance.") +end + +function Quest1Chat_5(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "flibbit_quagmarr/halas/gwenevyns_cove/flibbit_quagmarr/flibbit_quagmarr_062.mp3", "", "", 2223435732, 36629853, Spawn) + AddConversationOption(conversation, "No wonder it is so important that I clear a safe path for the pilgrims.", "OfferUnbearableProblem") + AddConversationOption(conversation, "Forget it. I'm not going to fight bears!") + StartConversation(conversation, NPC, Spawn, "The Cairn of The Huntress is the temple erected by Mithaniel Marr, god of valor, in honor of his fallen sister, Erollisi Marr, The Loving Huntress. It awaits us within the city of New Halas!") +end + +function Quest1Chat_6(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "I shall continue to hunt the pilgrim-eating grizzlies.") + StartConversation(conversation, NPC, Spawn, "They hunt and roam southwest of here.") +end + +function Quest1Chat_7(NPC, Spawn) + SetStepComplete(Spawn, UnbearableProblem, 2) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "flibbit_quagmarr/halas/gwenevyns_cove/flibbit_quagmarr/flibbit_quagmarr_025.mp3", "", "", 2597773991, 3326444156, Spawn) + AddConversationOption(conversation, "Thank you, Flibbit.", "Quest2Chat_1") + StartConversation(conversation, NPC, Spawn, "I am glad to hear it! Now my son and I can prepare to break camp and continue on our pilgrimage. I cannot spare much coin, so please take one of the helms that I have been mending.") +end + +function Quest2Chat_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "flibbit_quagmarr/halas/gwenevyns_cove/flibbit_quagmarr/flibbit_quagmarr_063.mp3", "", "", 1125643024, 3387202205, Spawn) + AddConversationOption(conversation, "What is it? Who?", "Quest2Chat_2") + AddConversationOption(conversation, "I'll leave you alone now.") + StartConversation(conversation, NPC, Spawn, "Wait! Where did he go?!") +end + +function Quest2Chat_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "flibbit_quagmarr/halas/gwenevyns_cove/flibbit_quagmarr/flibbit_quagmarr_004.mp3", "", "", 2980400722, 2578144339, Spawn) + AddConversationOption(conversation, "Someone has taken Splorpy?", "Quest2Chat_3") + StartConversation(conversation, NPC, Spawn, "" .. GetName(Spawn) .. "! Help me! My son has been taken!") +end + +function Quest2Chat_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "flibbit_quagmarr/halas/gwenevyns_cove/flibbit_quagmarr/flibbit_quagmarr_026.mp3", "", "", 2928995229, 3951798794, Spawn) + AddConversationOption(conversation, "What can I do to help?", "Quest2Chat_4") + AddConversationOption(conversation, "Good luck finding him.") + StartConversation(conversation, NPC, Spawn, "I cannot find him! I left our tent to go and collect some more wood for the fire, as it was my turn to do so, and now he is gone!") +end + +function Quest2Chat_4(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "flibbit_quagmarr/halas/gwenevyns_cove/flibbit_quagmarr/flibbit_quagmarr_027.mp3", "", "", 3820799248, 3563722850, Spawn) + AddConversationOption(conversation, "Is there anyone I can ask at Gwenevyn's Cove that might know where Splorpy has gone?", "Quest2Chat_5") + StartConversation(conversation, NPC, Spawn, "You must find him! Oh, if he has been eaten by a blizzard grizzly I will never forgive myself!") +end + +function Quest2Chat_5(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "flibbit_quagmarr/halas/gwenevyns_cove/flibbit_quagmarr/flibbit_quagmarr_028.mp3", "", "", 968886797, 3430688549, Spawn) + AddConversationOption(conversation, "I will ask Sigbrith if she has seen Splorpy and then I will go out and look for him.", "OfferLostFroglok") + StartConversation(conversation, NPC, Spawn, "You could ask Sigbrith MacInnes. She is friendly towards us pilgrims. Perhaps she saw something while I was getting firewood.") +end + +function Quest2Chat_6(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "flibbit_quagmarr/halas/gwenevyns_cove/flibbit_quagmarr/flibbit_quagmarr_029.mp3", "", "", 1372379832, 3108068275, Spawn) + AddConversationOption(conversation, "I will return once I have found Splorpy.") + StartConversation(conversation, NPC, Spawn, "Please hurry!") +end + +function Quest2Chat_7(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "flibbit_quagmarr/halas/gwenevyns_cove/flibbit_quagmarr/flibbit_quagmarr_031.mp3", "", "", 1539671456, 2276621725, Spawn) + AddConversationOption(conversation, "He said it was not a barbarian.", "Quest2Chat_8") + StartConversation(conversation, NPC, Spawn, "A barbarian?") +end + +function Quest2Chat_8(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "flibbit_quagmarr/halas/gwenevyns_cove/flibbit_quagmarr/flibbit_quagmarr_032.mp3", "", "", 1459827383, 2517890106, Spawn) + AddConversationOption(conversation, "I am planning on ending up there myself.", "Quest2Chat_9") + StartConversation(conversation, NPC, Spawn, "How odd. I wonder what it was he saw. The wilderness is no place for children! I will be glad when we have safely arrived in New Halas.") +end + +function Quest2Chat_9(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "flibbit_quagmarr/halas/gwenevyns_cove/flibbit_quagmarr/flibbit_quagmarr_033.mp3", "", "", 2748996768, 1461112434, Spawn) + AddConversationOption(conversation, "I could not stand by and do nothing.", "Quest2Chat_10") + StartConversation(conversation, NPC, Spawn, "Perhaps we could go together when the time comes. I am but a poor pilgrim and could use your fighting skill. You never know what other dangers are out there on the ice shelf. Anyway, I thank you for finding my son and returning him to me safe and sound.") +end + +function Quest2Chat_10(NPC, Spawn) + SetStepComplete(Spawn, LostFroglok, 3) + Despawn(GetSpawn(Spawn, 4701835)) + AddSpawnAccess(GetSpawnByLocationID(GetZone(NPC), 5217), Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "flibbit_quagmarr/halas/gwenevyns_cove/flibbit_quagmarr/flibbit_quagmarr_034.mp3", "", "", 54813479, 1970991654, Spawn) + AddConversationOption(conversation, "Thank you, Flibbit.") + StartConversation(conversation, NPC, Spawn, "Thank you, " .. GetName(Spawn) .. ". I know it isn't much, but I have some coin to give. Please take them as a token of my thanks.") +end + +function Quest3Chat_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "flibbit_quagmarr/halas/gwenevyns_cove/flibbit_quagmarr/flibbit_quagmarr_035.mp3", "", "", 3761564927, 3120365260, Spawn) + AddConversationOption(conversation, "What do you need help with?", "Quest3Chat_3") + AddConversationOption(conversation, "I'm a bit busy right now, perhaps later.") + StartConversation(conversation, NPC, Spawn, "We are doing very well. I have been taking stock of our supplies, and while they have been depleted during our long stay in Gwenevyn's Cove, I hope that we can restock soon and be on our way. Say, can you spare a moment to help us?") +end + +function Quest3Chat_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "flibbit_quagmarr/halas/gwenevyns_cove/flibbit_quagmarr/flibbit_quagmarr_036.mp3", "", "", 357106938, 4264008220, Spawn) + AddConversationOption(conversation, "I could keep an eye out for it.", "OfferAbsentEffigy") + StartConversation(conversation, NPC, Spawn, "Splorpy had a little metal Effigy of Mithaniel that he always carried in his pocket. Unfortunately he has lost it somewhere on the ice shelf.") +end + +function Quest3Chat_4(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "I shall look for it amongst the frigid whirlstorms, then.") + StartConversation(conversation, "I figure it's probably been picked up in an eddy of one of those frigid whirlstorms you see ripping about across the ice shelf.") +end + +function Quest3Chat_5(NPC, Spawn) + SetStepComplete(Spawn, AbsentEffigy, 2) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "flibbit_quagmarr/halas/gwenevyns_cove/flibbit_quagmarr/flibbit_quagmarr_039.mp3", "", "", 3267108505, 3934101762, Spawn) + AddConversationOption(conversation, "I am glad to be able to return it to Splorpy.", "Quest4Chat_1") + StartConversation(conversation, NPC, Spawn, "You are good to my son and me. I shall not forget your kindness, " .. GetName(Spawn) .. ".") +end + +function Quest4Chat_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "flibbit_quagmarr/halas/gwenevyns_cove/flibbit_quagmarr/flibbit_quagmarr_064.mp3", "", "", 1699103453, 3563523529, Spawn) + AddConversationOption(conversation, "Yes, I am. Do you need anything else for your pilgrimage?", "Quest4Chat_3") + AddConversationOption(conversation, "No, I am not.") + StartConversation(conversation, NPC, Spawn, "Are you free to help us, further?") +end + +function Quest4Chat_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "flibbit_quagmarr/halas/gwenevyns_cove/flibbit_quagmarr/flibbit_quagmarr_010.mp3", "", "", 3573239731, 1050060111, Spawn) + AddConversationOption(conversation, "Hello, Flibbit. Do you need anything else for your pilgrimage?", "Quest4Chat_3") + StartConversation(conversation, NPC, Spawn, "Good day, brave " .. GetName(Spawn) .. ".") +end + +function Quest4Chat_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "flibbit_quagmarr/halas/gwenevyns_cove/flibbit_quagmarr/flibbit_quagmarr_040.mp3", "", "", 893544611, 973431140, Spawn) + AddConversationOption(conversation, "Is there anything I can help with?", "Quest4Chat_4") + AddConversationOption(conversation, "Me too! I really must be going.") + StartConversation(conversation, NPC, Spawn, "Actually I do. There are still a few things I must do before Splorpy and I can continue on our pilgrimage.") +end + +function Quest4Chat_4(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "flibbit_quagmarr/halas/gwenevyns_cove/flibbit_quagmarr/flibbit_quagmarr_041.mp3", "", "", 3728599078, 2071611089, Spawn) + AddConversationOption(conversation, "I could head out that way and collect them for you.", "Quest4Chat_5") + StartConversation(conversation, NPC, Spawn, "Well, I saw some mercenaries carrying a strange ice crystal. When I inquired where they got it from, I was informed that they grow on the Icemane Plains. Unfortunately, I am no warrior so I cannot venture out there to collect them myself.") +end + +function Quest4Chat_5(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "flibbit_quagmarr/halas/gwenevyns_cove/flibbit_quagmarr/flibbit_quagmarr_042.mp3", "", "", 641871546, 1699897380, Spawn) + AddConversationOption(conversation, "What do you hope to do with them?", "Quest4Chat_6") + StartConversation(conversation, NPC, Spawn, "If you would be so kind, I would greatly appreciate it.") +end + +function Quest4Chat_6(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "flibbit_quagmarr/halas/gwenevyns_cove/flibbit_quagmarr/flibbit_quagmarr_043.mp3", "", "", 972157207, 757922985, Spawn) + AddConversationOption(conversation, "I will look for these strange ice crystals upon the Icemane Plains.", "OfferBarteringCrystals") + AddConversationOption(conversation, "On second thought, this is not a task I want to do.") + StartConversation(conversation, NPC, Spawn, "Assuming they have no alchemical properties, I shall try to use them to trade for goods, room and board in New Halas. I hope that it will give us a better start there.") +end + +function Quest4Chat_7(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "I shall continue my search for the ice crystals.") + StartConversation(conversation, NPC, Spawn, "You can find the crystals south of here, on the Icemane Plains.") +end + +function Quest4Chat_8(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "flibbit_quagmarr/halas/gwenevyns_cove/flibbit_quagmarr/flibbit_quagmarr_046.mp3", "", "", 1845183249, 3762123225, Spawn) + AddConversationOption(conversation, "Good luck with your experiments.", "Quest4Chat_9") + StartConversation(conversation, NPC, Spawn, "That is odd indeed. I shall have to study these further. Unfortunately, my field kit is not up to this level of work, but perhaps I can discover the most basic properties of these crystals.") +end + +function Quest4Chat_9(NPC, Spawn) + SetStepComplete(Spawn, BarteringCrystals, 2) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "flibbit_quagmarr/halas/gwenevyns_cove/flibbit_quagmarr/flibbit_quagmarr_047.mp3", "", "", 235665494, 154066582, Spawn) + AddConversationOption(conversation, "It was no problem for me to collect the crystals.", "Quest5Chat_1") + StartConversation(conversation, NPC, Spawn, "Thank you, " .. GetName(Spawn) .. ". Please accept this as a token of my gratitude.") +end + +function Quest5Chat_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "flibbit_quagmarr/halas/gwenevyns_cove/flibbit_quagmarr/flibbit_quagmarr_048.mp3", "", "", 146466973, 1233162393, Spawn) + AddConversationOption(conversation, "And what is that?", "Quest5Chat_2") + AddConversationOption(conversation, "Unfortunately, I am too busy to help you, right now.") + StartConversation(conversation, NPC, Spawn, "I only have one final task to complete before Splorpy and I can continue on our pilgrimage.") +end + +function Quest5Chat_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "flibbit_quagmarr/halas/gwenevyns_cove/flibbit_quagmarr/flibbit_quagmarr_049.mp3", "", "", 1000986096, 336825003, Spawn) + AddConversationOption(conversation, "What do you need to repair it?", "Quest5Chat_3") + StartConversation(conversation, NPC, Spawn, "Splorpy’s jacket has become torn. He cannot go across the ice shelf with a hole in his jacket, and so we are delayed until I can repair it.") +end + +function Quest5Chat_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "flibbit_quagmarr/halas/gwenevyns_cove/flibbit_quagmarr/flibbit_quagmarr_050.mp3", "", "", 2187218830, 3343226771, Spawn) + AddConversationOption(conversation, "I wish you would have told me this before; I could have gotten you pelts while I was collecting the ice crystals.", "Quest5Chat_4") + StartConversation(conversation, NPC, Spawn, "I need the pelts from icemane cubs. Their fur is soft and the leather will be supple enough to make a coat jacket small enough for Splorpy.") +end + +function Quest5Chat_4(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "flibbit_quagmarr/halas/gwenevyns_cove/flibbit_quagmarr/flibbit_quagmarr_051.mp3", "", "", 1105807509, 509218310, Spawn) + AddConversationOption(conversation, "I shall collect the icemane cub pelts so that you may repair Splorpy's jacket.", "OfferPelted") + AddConversationOption(conversation, "Maybe I can help you later.") + StartConversation(conversation, NPC, Spawn, "I do apologize, had I discovered the tear earlier I would have asked you then.") +end + +function Quest5Chat_5(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "I will return with the pelts you requested.") + StartConversation(conversation, NPC, Spawn, "They are south of here, on the Icemane Plains.") +end + +function Quest5Chat_6(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "flibbit_quagmarr/halas/gwenevyns_cove/flibbit_quagmarr/flibbit_quagmarr_054.mp3", "", "", 3723222510, 1362601367, Spawn) + AddConversationOption(conversation, "Thank you, Flibbit.", "Quest5Chat_7") + StartConversation(conversation, NPC, Spawn, "Thank you, " .. GetName(Spawn) .. "! Now I can finish Splorpy's jacket as well as something else I have been working on. I have salvaged some accessories, perhaps you can find a use for one of them?") +end + +function Quest5Chat_7(NPC, Spawn) + SetStepComplete(Spawn, Pelted, 2) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "flibbit_quagmarr/halas/gwenevyns_cove/flibbit_quagmarr/flibbit_quagmarr_055.mp3", "", "", 160665426, 3368306133, Spawn) + AddConversationOption(conversation, "I am glad that I was able to help you and your son on your pilgrimage.") + StartConversation(conversation, NPC, Spawn, "You deserve so much more! This trinket was the least I could do to repay you for all the help you have given my son and me.") +end + +function Quest6Chat_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "flibbit_quagmarr/halas/gwenevyns_cove/flibbit_quagmarr/flibbit_quagmarr_056.mp3", "", "", 1415595156, 2895327505, Spawn) + AddConversationOption(conversation, "What do you need me to do?", "Quest6Chat_2") + StartConversation(conversation, NPC, Spawn, "It is great news indeed. I would ask for your help one last time, " .. GetName(Spawn) .. ".") +end + +function Quest6Chat_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "flibbit_quagmarr/halas/gwenevyns_cove/flibbit_quagmarr/flibbit_quagmarr_057.mp3", "", "", 3437714001, 1568066083, Spawn) + AddConversationOption(conversation, "Why would you split up with your son?", "Quest6Chat_4") + AddConversationOption(conversation, "Wait, where is the Great Shelf?", "Quest6Chat_3") + StartConversation(conversation, NPC, Spawn, "I need you to protect my son, Splorpy. I am no fighter and the ice shelf is a dangerous place. If you would escort my son to the next stop along the pilgrimage, the Great Shelf, I would be most appreciative.") +end + +function Quest6Chat_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "flibbit_quagmarr/halas/gwenevyns_cove/flibbit_quagmarr/flibbit_quagmarr_065.mp3", "", "", 4039927754, 4221565751, Spawn) + AddConversationOption(conversation, "Thanks for the directions. Why would you split up with your son?", "Quest6Chat_4") + StartConversation(conversation, NPC, Spawn, "The Great Shelf is west of here, across the Icemane Planes. There is a small cave full of other pilgrims, its entrance is marked with small torch beacons.") +end + +function Quest6Chat_4(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "flibbit_quagmarr/halas/gwenevyns_cove/flibbit_quagmarr/flibbit_quagmarr_058.mp3", "", "", 749342367, 3777170220, Spawn) + AddConversationOption(conversation, "Okay, I will take little Splorpy to the Great Shelf.", "OfferGreatShelf") + AddConversationOption(conversation, "Oh, no! I am not going to be responsible for this little guy.") + StartConversation(conversation, NPC, Spawn, "I know that he will be safer with you. You have the experience, the skills and the knowledge necessary to escort him safely to the Great Shelf.") +end + +function Quest6Chat_5(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "I am. Is Splorpy ready to go?", "Quest6Chat_6") + StartConversation(conversation, NPC, Spawn, "Are you ready, " .. GetName(Spawn) .. "?") +end + +function Quest6Chat_6(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "See you there!", "Quest6Chat_7") + StartConversation(conversation, NPC, Spawn, "He is. Take care, I shall see you both at the Great Shelf!") +end + +function Quest6Chat_7(NPC, Spawn) + SetStepComplete(Spawn, GreatShelf, 1) + RemoveSpawnAccess(GetSpawnByLocationID(GetZone(Spawn), 5217), Spawn) + RemoveSpawnAccess(GetSpawnByLocationID(GetZone(Spawn), 5221), Spawn) + local pet = SpawnMob(GetZone(Spawn), 4701835, 0, 70.45, 28.55, -347.46, 84) + SetTempVariable(Spawn, "splorp", pet) + SetFollowTarget(pet, Spawn) + ToggleFollow(pet) +end + +function OfferAbsentEffigy(NPC, Spawn) + OfferQuest(Spawn, AbsentEffigy) +end + +function OfferUnbearableProblem(NPC, Spawn) + OfferQuest(NPC, Spawn, UnbearableProblem) +end + +function OfferLostFroglok(NPC, Spawn) + OfferQuest(NPC, Spawn, LostFroglok) +end + +function OfferAbsentEffigy(NPC, Spawn) + OfferQuest(NPC, Spawn, AbsentEffigy) +end + +function OfferBarteringCrystals(NPC, Spawn) + OfferQuest(NPC, Spawn, BarteringCrystals) +end + +function OfferPelted(NPC, Spawn) + OfferQuest(NPC, Spawn, Pelted) +end + +function OfferGreatShelf(NPC, Spawn) + OfferQuest(NPC, Spawn, GreatShelf) +end \ No newline at end of file diff --git a/server/SpawnScripts/FrostfangSea/FlibbitQuagmarr_(halas).lua b/server/SpawnScripts/FrostfangSea/FlibbitQuagmarr_(halas).lua new file mode 100644 index 000000000..282e54784 --- /dev/null +++ b/server/SpawnScripts/FrostfangSea/FlibbitQuagmarr_(halas).lua @@ -0,0 +1,27 @@ +--[[ + Script Name : SpawnScripts/FrostfangSea/FlibbitQuagmarr_(halas).lua + Script Purpose : hides flibbit until quest series is finished + Script Author : theFoof + Script Date : 2013.9.24 + Script Notes : +--]] + +function spawn(NPC) + AddSpawnAccess(NPC, NPC) + SetPlayerProximityFunction(NPC, 100, "SpawnAccess", "SpawnAccess") +end + +function respawn(NPC) + spawn(NPC) +end + +function SpawnAccess(NPC, Spawn) + if HasCompletedQuest(Spawn, 30) then + AddSpawnAccess(NPC, Spawn) + end +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + PlayFlavor(NPC, "", "It is good to see you again!", "nod", 0, 0, Spawn) +end \ No newline at end of file diff --git a/server/SpawnScripts/FrostfangSea/FlibbitQuagmarr_(shelf).lua b/server/SpawnScripts/FrostfangSea/FlibbitQuagmarr_(shelf).lua new file mode 100644 index 000000000..5670ac6b1 --- /dev/null +++ b/server/SpawnScripts/FrostfangSea/FlibbitQuagmarr_(shelf).lua @@ -0,0 +1,61 @@ +--[[ + Script Name : SpawnScripts/FrostfangSea/FlibbitQuagmarr_(shelf).lua + Script Purpose : for the spawn "Flibbit Quagmarr" located in the great shelf cave. + Script Author : theFoof + Script Date : 2013.5.30 + Script Notes : +--]] +local GreatShelf = 30 + +function spawn(NPC) + AddSpawnAccess(NPC, NPC) + SetPlayerProximityFunction(NPC, 50, "SpawnAccess", "SpawnAccess") +end + +function respawn(NPC) + spawn(NPC) +end + +function SpawnAccess(NPC, Spawn) + if GetQuestStep(Spawn, GreatShelf) == 2 or HasCompletedQuest(Spawn, GreatShelf) then + AddSpawnAccess(NPC, Spawn) + end +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + if GetQuestStep(Spawn, GreatShelf) == 2 then + pet = GetTempVariable(Spawn, "splorp") + if IsAlive(pet) then + Despawn(pet) + end + SetTempVariable(Spawn, "splorp", nil) + RemoveSpawnAccess(GetSpawnByLocationID(GetZone(Spawn), 5221), Spawn) + AddSpawnAccess(GetSpawnByLocationID(GetZone(Spawn), 5219), Spawn) + SetStepComplete(Spawn, GreatShelf, 2) + conversation = CreateConversation() + + PlayFlavor(NPC, "flibbit_quagmarr/halas/gwenevyns_cove/flibbit_quagmarr/flibbit_quagmarr_018.mp3", "", "", 2168167174, 2891640064, Spawn) + AddConversationOption(conversation, "We've arrived safe and sound!", "Chat1") + StartConversation(conversation, NPC, Spawn, "Thank you for escorting Splorpy. You do not know how relieved I am! I trust the trip was uneventful?") + else + PlayFlavor(NPC, "", "You made it to the Great Shelf!", "cheer", 0, 0, Spawn) + end +end + +function Chat1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "Thank you, Flibbit.") + AddConversationOption(conversation, "Can I help you further?", "Chat2") + StartConversation(conversation, NPC, Spawn, "I cannot thank you enough, " .. GetName(Spawn) .. "! You have kept both me and my son safe, and provided for us, time and time again. You deserve both song and praise for all that you have done.") +end + +function Chat2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "It was no problem. I did not mind it one bit") + StartConversation(conversation, NPC, Spawn, "I cannot accept any further aid from you, mighty one. I have appreciated it, but you have also shown me that there are some challenges that we must overcome on our own. And for that too, I must thank you! I am sure that we have slowed you from completing your own quest.") +end \ No newline at end of file diff --git a/server/SpawnScripts/FrostfangSea/GalindaGoodfaith.lua b/server/SpawnScripts/FrostfangSea/GalindaGoodfaith.lua new file mode 100644 index 000000000..74f175f4c --- /dev/null +++ b/server/SpawnScripts/FrostfangSea/GalindaGoodfaith.lua @@ -0,0 +1,115 @@ +--[[ + Script Name : SpawnScripts/FrostfangSea/GalindaGoodfaith.lua + Script Purpose : Galinda Goodfaith + Script Author : theFoof + Script Date : 2013.03.16 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] +local HalasianWelcome = 1 + +function spawn(NPC) + SetPlayerProximityFunction(NPC, 10, "InRange", "LeaveRange") + ProvidesQuest(NPC, 1) +end + +function respawn(NPC) + spawn(NPC) +end + +function InRange(NPC, Spawn) +end + +function LeaveRange(NPC, Spawn) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + if HasQuest(Spawn, HalasianWelcome) then + PlayFlavor(NPC, "", "Yasha Redblade could use your help. She's to the northeast outside of the broken ship's hull.", "nod", 1689589577, 4560189, Spawn) + + elseif HasCompletedQuest(Spawn, HalasianWelcome) then + PlayFlavor(NPC, "", "You'll go on to accomplish great things, of this I am certain!", "", 1689589577, 4560189, Spawn) + + else + conversation = CreateConversation() + PlayFlavor(NPC, "galinda_goodfaith/halas/pilgrims_landing/goodfaith_001.mp3", "", "", 153197650, 2166284813, Spawn) + AddConversationOption(conversation, "Who are you?", "dlg_0_1") + AddConversationOption(conversation, "Where am I?", "dlg_1_1") + StartConversation(conversation, NPC, Spawn, "Whoa! You're awake then. I was worried about you there for a while, " .. GetName(Spawn) .. ".") + end +end + +function dlg_0_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "galinda_goodfaith/halas/pilgrims_landing/goodfaith_002.mp3", "", "", 2530966290, 131889308, Spawn) + AddConversationOption(conversation, "I did?", "dlg_0_2") + AddConversationOption(conversation, "Thank you for the help.", "dlg_0_4") + AddConversationOption(conversation, "Where am I?", "dlg_1_1") + StartConversation(conversation, NPC, Spawn, "I'm the lass who's been tending to your wounds, that's who! You were knocked unconscious, but not before you saved three others from the sea.") +end + +function dlg_1_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "galinda_goodfaith/halas/pilgrims_landing/goodfaith_003.mp3", "", "", 2658425165, 4282904671, Spawn) + AddConversationOption(conversation, "Thank you for the help.", "dlg_0_4") + AddConversationOption(conversation, "Who are you?", "dlg_0_1") + StartConversation(conversation, NPC, Spawn, "You're on a big chunk of floating ice and rock, dubbed Pilgrims' Landing. Your boat was besieged by the snow orcs and destroyed while it was on its way towards the New Halas dock.") +end + +function dlg_0_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "galinda_goodfaith/halas/pilgrims_landing/goodfaith_004.mp3", "", "", 3736336423, 4235698152, Spawn) + AddConversationOption(conversation, "I don't remember that.", "dlg_0_3") + StartConversation(conversation, NPC, Spawn, "Cross my heart, you did! You must have taken a nasty bump on the noggin, but that didn't halt you! You came struggling ashore here, carrying three others, one 'neath each arm and another on your back!") +end + +function dlg_0_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "galinda_goodfaith/halas/pilgrims_landing/goodfaith_004.mp3", "", "", 3736336423, 4235698152, Spawn) + AddConversationOption(conversation, "Thank you for the help.", "dlg_0_4") + AddConversationOption(conversation, "Who are you?", "dlg_0_1") + AddConversationOption(conversation, "Where am I?", "dlg_1_1") + StartConversation(conversation, NPC, Spawn, "They'd have surely drowned if it had not been for you. But you fell into a deep sleep the moment you were on dry land. I've been taking care of you ever since.") +end + +function dlg_0_4(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "galinda_goodfaith/halas/pilgrims_landing/goodfaith_005.mp3", "", "", 1055106469, 3750971957, Spawn) + AddConversationOption(conversation, "Not if we attack them back.", "dlg_0_5") + AddConversationOption(conversation, "I'm feeling pretty good now.", "dlg_1_4") + StartConversation(conversation, NPC, Spawn, "Think nothing of it! You're the one that went above and beyond, saving others like you did. Healing others is why I am here. You are not the first to have suffered an attack by the orcs, nor do I dare say you will be the last.") +end + +function dlg_1_4(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "galinda_goodfaith/halas/pilgrims_landing/goodfaith_007.mp3", "", "", 2427981799, 3625665591, Spawn) + AddConversationOption(conversation, "I'll find her.", "OfferHalasianWelcome") + AddConversationOption(conversation, "I'm going to explore some first. Goodbye.", "dlg_0_5") + StartConversation(conversation, NPC, Spawn, "That is a relief to hear, " .. GetName(Spawn) .. ". I figured a hit to the noggin couldn't keep someone as powerful as you down for long! Yasha Redblade could definitely use your help. She's to the northeast outside of the broken ship's hull.") +end + +function dlg_0_5(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "galinda_goodfaith/halas/pilgrims_landing/goodfaith_006.mp3", "", "", 1162130667, 1040606597, Spawn) + AddConversationOption(conversation, "That's great!", "OfferHalasianWelcome") + AddConversationOption(conversation, "I'm going to explore some first. Goodbye.") + StartConversation(conversation, NPC, Spawn, "No doubt! I figured a hit to the noggin couldn't keep someone as powerful as you down for long! Yasha Redblade could definitely use your help. She's to the northeast outside of the broken ship's hull. She'll get you prepared to face those orcs!") +end + +function OfferHalasianWelcome(NPC, Spawn) --Offers A Fine Halasian Welcome + OfferQuest(NPC, Spawn, HalasianWelcome) +end diff --git a/server/SpawnScripts/FrostfangSea/GarrotNuesoon.lua b/server/SpawnScripts/FrostfangSea/GarrotNuesoon.lua new file mode 100644 index 000000000..bf961a87e --- /dev/null +++ b/server/SpawnScripts/FrostfangSea/GarrotNuesoon.lua @@ -0,0 +1,69 @@ +--[[ + Script Name : SpawnScripts/FrostfangSea/GarrotNuesoon.lua + Script Purpose : assassin trainer + Script Author : theFoof + Script Date : 2013.9.24 + Script Notes : +--]] + +local ASSASSIN = 40 + +function spawn(NPC) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + if GetClass(Spawn) == ASSASSIN then + conversation = CreateConversation() + PlayFlavor(NPC, "", "", "hello", 0, 0, Spawn) + AddConversationOption(conversation, "What advice do you have for a fellow assasin?", "SinChat1") + AddConversationOption(conversation, "It certainly is. Good bye.") + StartConversation(conversation, NPC, Spawn, "Ah, another assassin! It is a dangerous profession that you have chosen, but well worth it.") + else + PlayFlavor(NPC, "", "To attack from the shadows is the greatest of advantages. An enemy cannot defend against an attack it can never see.", "hello", 0, 0, Spawn) + end +end + +function SinChat1(NPC, Spawn) + conversation = CreateConversation() + FaceTarget(NPC, Spawn) + + AddConversationOption(conversation, "I would appreciate it.", "SinChat2") + StartConversation(conversation, NPC, Spawn, "Understand that it goes against my very nature to give away anything I consider a trade secret, but I can part with a few bits of wisdom.") +end + +function SinChat2(NPC, Spawn) + conversation = CreateConversation() + FaceTarget(NPC, Spawn) + + AddConversationOption(conversation, "That's useful to know!", "SinChat3") + StartConversation(conversation, NPC, Spawn, "Procure items that add to your agility or stamina, when you find them! Agility affects both your ability to inflict damage and avoid taking damage from others. Your stamina affects your health. This is crucial.") +end + +function SinChat3(NPC, Spawn) + conversation = CreateConversation() + FaceTarget(NPC, Spawn) + + AddConversationOption(conversation, "That's interesting.", "SinChat4") + StartConversation(conversation, NPC, Spawn, "Our most devastating attacks are sudden strikes to vital organs from a cover of darkness. These opportunistic attacks performed under a cover of concealment surprises our target, thus giving them less chance to protect themselves.") +end + +function SinChat4(NPC, Spawn) + conversation = CreateConversation() + FaceTarget(NPC, Spawn) + + AddConversationOption(conversation, "What should I do then?", "SinChat5") + StartConversation(conversation, NPC, Spawn, "Keep in mind that the majority of our attacks are positional, meaning you need to be behind or beside an opponent for that attack to work. So you must be aware of situations in which there are multiple foes, as positional attacks are of little use when you're surrounded!") +end + +function SinChat5(NPC, Spawn) + conversation = CreateConversation() + FaceTarget(NPC, Spawn) + + AddConversationOption(conversation, "Thank you for the advice.") + StartConversation(conversation, NPC, Spawn, "I suggest you employ a divide and conquer tactic, and cut them down as fast as possible. And do not overlook the power of poisons, in any situation!") +end \ No newline at end of file diff --git a/server/SpawnScripts/FrostfangSea/GerlaMeltwater.lua b/server/SpawnScripts/FrostfangSea/GerlaMeltwater.lua new file mode 100644 index 000000000..3448095db --- /dev/null +++ b/server/SpawnScripts/FrostfangSea/GerlaMeltwater.lua @@ -0,0 +1,89 @@ +--[[ + Script Name : SpawnScripts/FrostfangSea/GerlaMeltwater.lua + Script Purpose : Gerla Meltwater + Script Author : theFoof + Script Date : 2013.06.13 + Script Notes : +--]] + +local SeekingEducation = 63 + +function spawn(NPC) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + + if GetQuestStep(Spawn, SeekingEducation) == 2 then + conversation = CreateConversation() + PlayFlavor(NPC, "gerla_meltwater/halas/new_halas_guard_house/gerla_meltwater_001.mp3", "", "", 3974328348, 1246567656, Spawn) + AddConversationOption(conversation, "Torli Blackbow thought you could help. There is a large ice and velium elemental living below New Halas!", "Quest1Chat_1") + StartConversation(conversation, NPC, Spawn, "Hail, " .. GetName(Spawn) .. ". What boulder weighs so upon your shoulders?") + else + PlayFlavor(NPC, "", "Hail, adventurer.", "hello", 1689589577, 4560189, Spawn) + end +end + +function Quest1Chat_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "gerla_meltwater/halas/new_halas_guard_house/gerla_meltwater_002.mp3", "", "", 376722497, 2039361987, Spawn) + AddConversationOption(conversation, "That's just it. It's not.", "Quest1Chat_2") + StartConversation(conversation, NPC, Spawn, "Aye. And as long as it slumbers we have nothing to fear.") +end + +function Quest1Chat_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "gerla_meltwater/halas/new_halas_guard_house/gerla_meltwater_003.mp3", "", "", 936830392, 1591106960, Spawn) + AddConversationOption(conversation, "The Ry'Gorr were digging tunnels below the city.", "Quest1Chat_3") + StartConversation(conversation, NPC, Spawn, "Beasts of the deep! It has awoken?! It slumbered for years under our feet. What could have woken it now?") +end + +function Quest1Chat_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "gerla_meltwater/halas/new_halas_guard_house/gerla_meltwater_004.mp3", "", "", 4211598278, 1116854185, Spawn) + AddConversationOption(conversation, "Why is that so important?", "Quest1Chat_4") + AddConversationOption(conversation, "Can't we just kill it?", "Quest1Chat_4") + StartConversation(conversation, NPC, Spawn, "Another reason to smite each and every one of the vile creatures! Now to return the elemental back to its dormancy.") +end + +function Quest1Chat_4(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "gerla_meltwater/halas/new_halas_guard_house/gerla_meltwater_005.mp3", "", "", 3234303592, 778815839, Spawn) + AddConversationOption(conversation, "That's amazing.", "Quest1Chat_5") + StartConversation(conversation, NPC, Spawn, "Long before Mithaniel blessed this carved bit of Velious, we floated. Long and far, through moderate and warm waters we sailed. Yet frozen the bulk remained.") +end + +function Quest1Chat_5(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "gerla_meltwater/halas/new_halas_guard_house/gerla_meltwater_006.mp3", "", "", 1707551626, 618350055, Spawn) + AddConversationOption(conversation, "And now that it's awake?", "Quest1Chat_6") + StartConversation(conversation, NPC, Spawn, "I discovered the ancient elemental while probing the terrain with some spells. It was during one of our campaigns to remove the Ry'Gorr. Ever since then I have theorized that it may have been the cause of our eternal freeze.") +end + +function Quest1Chat_6(NPC, Spawn) + if not HasItem(Spawn, 7666) then + SummonItem(Spawn, 7666) + end + SetStepComplete(Spawn, SeekingEducation, 2) + + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "gerla_meltwater/halas/new_halas_guard_house/gerla_meltwater_007.mp3", "", "", 2595302383, 231640410, Spawn) + AddConversationOption(conversation, "Right away, Gerla.") + StartConversation(conversation, NPC, Spawn, "We must induce slumber, once more! Take this satchel back to Torli Blackbow.") +end \ No newline at end of file diff --git a/server/SpawnScripts/FrostfangSea/GertaFrostbeard.lua b/server/SpawnScripts/FrostfangSea/GertaFrostbeard.lua new file mode 100644 index 000000000..c3b3d3e30 --- /dev/null +++ b/server/SpawnScripts/FrostfangSea/GertaFrostbeard.lua @@ -0,0 +1,26 @@ +--[[ + Script Name : SpawnScripts/FrostfangSea/GertaFrostbeard.lua + Script Purpose : Gerta Frostbeard + Script Author : theFoof + Script Date : 2013.09.26 + Script Notes : +--]] + +function spawn(NPC) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + local choice = math.random(1,3) + if choice == 1 then + PlayFlavor(NPC, "", "What'll it be, citizen?", "nod", 1689589577, 4560189, Spawn) + elseif choice == 2 then + PlayFlavor(NPC, "", "Sit a spell and have yarself a frothing brew or two!", "nod",0, 0, Spawn) + elseif choice == 3 then + PlayFlavor(NPC, "", "I got a drink that'll hit the spot for ya!", "nod", 0, 0, Spawn) + end +end \ No newline at end of file diff --git a/server/SpawnScripts/FrostfangSea/GilnaGlorysong.lua b/server/SpawnScripts/FrostfangSea/GilnaGlorysong.lua new file mode 100644 index 000000000..dfcdac948 --- /dev/null +++ b/server/SpawnScripts/FrostfangSea/GilnaGlorysong.lua @@ -0,0 +1,53 @@ +--[[ + Script Name : SpawnScripts/FrostfangSea/GilnaGlorysong.lua + Script Purpose : dirge trainer in Halas + Script Author : theFoof + Script Date : 2013.9.24 + Script Notes : +--]] + +local DIRGE = 37 + +function spawn(NPC) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + if GetClass(Spawn) == DIRGE then + conversation = CreateConversation() + PlayFlavor(NPC, "", "", "hello", 0, 0, Spawn) + AddConversationOption(conversation, "What advice do you have for a fellow dirge?", "DirgeChat1") + AddConversationOption(conversation, "I certainly will. Good bye.") + StartConversation(conversation, NPC, Spawn, "I thought I heard another dirge singing songs of lamentation. If I can be of any service, let me know.") + else + PlayFlavor(NPC, "", "La! La! La!", "hello", 0, 0, Spawn) + end +end + +function DirgeChat1(NPC, Spawn) + conversation = CreateConversation() + FaceTarget(NPC, Spawn) + + AddConversationOption(conversation, "That's useful to know!", "DirgeChat2") + StartConversation(conversation, NPC, Spawn, "If you find items that add to your agility or stamina, then take them! Agility affects both your ability to inflict damage and avoid taking damage from others. Your stamina affects your health. This is crucial.") +end + +function DirgeChat2(NPC, Spawn) + conversation = CreateConversation() + FaceTarget(NPC, Spawn) + + AddConversationOption(conversation, "That's interesating.", "DirgeChat3") + StartConversation(conversation, NPC, Spawn, "Our songs of despair are incredibly valuable to others. They can bolster both fighters and other scouts by increasing their defense and offense. And the most experienced dirges can even raise a fallen comrade with a song.") +end + +function DirgeChat3(NPC, Spawn) + conversation = CreateConversation() + FaceTarget(NPC, Spawn) + + AddConversationOption(conversation, "Thank you for the advice.") + StartConversation(conversation, NPC, Spawn, "But do not neglect your melee skills. These are essential to our survival! Songs of despair can demoralize and weaken your foe, but without a weapon to inflict damage there is no killing blow.") +end \ No newline at end of file diff --git a/server/SpawnScripts/FrostfangSea/GlinHammerhelm.lua b/server/SpawnScripts/FrostfangSea/GlinHammerhelm.lua new file mode 100644 index 000000000..c6873412f --- /dev/null +++ b/server/SpawnScripts/FrostfangSea/GlinHammerhelm.lua @@ -0,0 +1,23 @@ +--[[ + Script Name : SpawnScripts/FrostfangSea/GlinHammerhelm.lua + Script Purpose : Glin Hammerhelm + Script Author : theFoof + Script Date : 2013.10.20 + Script Notes : see + SpawnScripts/Generic/GenericTradeskillTutor.lua + for function details +--]] + +require"SpawnScripts/Generic/GenericTradeskillTutor" + +function spawn(NPC) + ProvidesTutorials(NPC) +end + +function respawn(NPC) + ProvidesTutorials(NPC) +end + +function hailed(NPC, Spawn) + CraftingTutorHail(NPC, Spawn) +end \ No newline at end of file diff --git a/server/SpawnScripts/FrostfangSea/GlippitGreenmuck.lua b/server/SpawnScripts/FrostfangSea/GlippitGreenmuck.lua new file mode 100644 index 000000000..f4671a77b --- /dev/null +++ b/server/SpawnScripts/FrostfangSea/GlippitGreenmuck.lua @@ -0,0 +1,61 @@ +--[[ + Script Name : SpawnScripts/FrostfangSea/GlippitGreenmuck.lua + Script Purpose : warden trainer in Halas + Script Author : theFoof + Script Date : 2013.9.24 + Script Notes : +--]] + +local WARDEN = 16 + +function spawn(NPC) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + if GetClass(Spawn) == WARDEN then + conversation = CreateConversation() + PlayFlavor(NPC, "", "", "hello", 0, 0, Spawn) + AddConversationOption(conversation, "What advice do you have for a fellow warden?", "WardChat1") + AddConversationOption(conversation, "Thank you, but I must be going.") + StartConversation(conversation, NPC, Spawn, "Another warden of the forest stands before me. Welcome!") + else + PlayFlavor(NPC, "", "Watch the flippers, please. Thanks.", "hello", 0, 0, Spawn) + end +end + +function WardChat1(NPC, Spawn) + conversation = CreateConversation() + FaceTarget(NPC, Spawn) + + AddConversationOption(conversation, "That's useful to know!", "WardChat2") + StartConversation(conversation, NPC, Spawn, "If you find items that add to your wisdom or stamina, then take them! Wisdom increases the amount of damage your spells can inflict on others and raises your defenses against spell damage inflicted on you. Your stamina affects your health. This is crucial.") +end + +function WardChat2(NPC, Spawn) + conversation = CreateConversation() + FaceTarget(NPC, Spawn) + + AddConversationOption(conversation, "That's interesting.", "WardChat3") + StartConversation(conversation, NPC, Spawn, "The druidic powers we wield can be used to help mend the wounded or purse the disease and poison from our allies, which is a true blessing in any battle!") +end + +function WardChat3(NPC, Spawn) + conversation = CreateConversation() + FaceTarget(NPC, Spawn) + + AddConversationOption(conversation, "That will be useful!", "WardChat4") + StartConversation(conversation, NPC, Spawn, "Although we skillfully exert the regenerative and defensive aspects of nature, we must also recognize that they are effective in inflicting damage upon our foes. This cannot be avoided, nor should it be.") +end + +function WardChat4(NPC, Spawn) + conversation = CreateConversation() + FaceTarget(NPC, Spawn) + + AddConversationOption(conversation, "Thank you for the advice.") + StartConversation(conversation, NPC, Spawn, "And protect yourself as best you can in leather, " .. GetName(Spawn) .. ". With the powers of nature protecting you, you need not be encumbered by heavy suits of armor.") +end \ No newline at end of file diff --git a/server/SpawnScripts/FrostfangSea/GrandmasterCheriGlodsdottr.lua b/server/SpawnScripts/FrostfangSea/GrandmasterCheriGlodsdottr.lua new file mode 100644 index 000000000..f3cf56642 --- /dev/null +++ b/server/SpawnScripts/FrostfangSea/GrandmasterCheriGlodsdottr.lua @@ -0,0 +1,19 @@ +--[[ + Script Name : SpawnScripts/FrostfangSea/GrandmasterCheriGlodsdottr.lua + Script Purpose : Grandmaster Cheri Glodsdottr + Script Author : theFoof + Script Date : 2013.09.26 + Script Notes : +--]] + +function spawn(NPC) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + PlayFlavor(NPC, "", "If you wish to learn about crafting, speak to the tradeskill tutorial trainer.", "point", 1689589577, 4560189, Spawn) +end \ No newline at end of file diff --git a/server/SpawnScripts/FrostfangSea/GrokkaHopson.lua b/server/SpawnScripts/FrostfangSea/GrokkaHopson.lua new file mode 100644 index 000000000..9ed0f1476 --- /dev/null +++ b/server/SpawnScripts/FrostfangSea/GrokkaHopson.lua @@ -0,0 +1,20 @@ +--[[ + Script Name : SpawnScripts/FrostfangSea/GrokkaHopson.lua + Script Purpose : Grokka Hopson + Script Author : theFoof + Script Date : 2013.09.13 + Script Notes : +--]] + +function spawn(NPC) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + PlayFlavor(NPC, "", "Froak!", "hello", 1689589577, 4560189, Spawn) +end + diff --git a/server/SpawnScripts/FrostfangSea/GruuFairbairn.lua b/server/SpawnScripts/FrostfangSea/GruuFairbairn.lua new file mode 100644 index 000000000..6489e4309 --- /dev/null +++ b/server/SpawnScripts/FrostfangSea/GruuFairbairn.lua @@ -0,0 +1,25 @@ +--[[ + Script Name : SpawnScripts/FrostfangSea/GruuFairbairn.lua + Script Purpose : Gruu Fairbairn + Script Author : theFoof + Script Date : 2013.10.30 + Script Notes : +--]] + +function spawn(NPC) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + + local choice = math.random(1,2) + if choice == 1 then + PlayFlavor(NPC, "", "Learning for the sake of learning is still learning.", "", 0, 0, Spawn) + else + PlayFlavor(NPC, "", "Achieving achievements is a worthwhile life goal.", "", 0, 0, Spawn) + end +end \ No newline at end of file diff --git a/server/SpawnScripts/FrostfangSea/GurthaMcPherson.lua b/server/SpawnScripts/FrostfangSea/GurthaMcPherson.lua new file mode 100644 index 000000000..31c986994 --- /dev/null +++ b/server/SpawnScripts/FrostfangSea/GurthaMcPherson.lua @@ -0,0 +1,28 @@ +--[[ + Script Name : SpawnScripts/FrostfangSea/GurthaMcPherson.lua + Script Purpose : Gurtha McPherson + Script Author : John Adams + Script Date : 2013.03.19 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +function spawn(NPC) + SetPlayerProximityFunction(NPC, 10, "InRange", "LeaveRange") +end + +function respawn(NPC) + spawn(NPC) +end + +function InRange(NPC, Spawn) +end + +function LeaveRange(NPC, Spawn) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + + PlayFlavor(NPC, "", "I'm selling some armor and weapons that you may find useful.", "agree", 1689589577, 4560189, Spawn) +end + diff --git a/server/SpawnScripts/FrostfangSea/GwenevynII.lua b/server/SpawnScripts/FrostfangSea/GwenevynII.lua new file mode 100644 index 000000000..5a9ca36fd --- /dev/null +++ b/server/SpawnScripts/FrostfangSea/GwenevynII.lua @@ -0,0 +1,22 @@ +--[[ + Script Name : SpawnScripts/FrostfangSea/GwenevynII.lua + Script Purpose : script to move the boat in Frostfang Sea + Script Author : theFoof + Script Date : 11.19.13 + Script Notes : +--]] + +function spawn(NPC) + AddTransportSpawn(NPC) + SpawnSet(NPC, "activity_state", "64") + AddTimer(NPC, 85000, "UseLift") +end + +function respawn(NPC) + spawn(NPC) +end + +function UseLift(NPC) + UseWidget(NPC) + AddTimer(NPC, 85000, "UseLift") +end \ No newline at end of file diff --git a/server/SpawnScripts/FrostfangSea/Hagley.lua b/server/SpawnScripts/FrostfangSea/Hagley.lua new file mode 100644 index 000000000..c8832cb67 --- /dev/null +++ b/server/SpawnScripts/FrostfangSea/Hagley.lua @@ -0,0 +1,31 @@ +--[[ + Script Name : SpawnScripts/FrostfangSea/Hagley.lua + Script Purpose : Hagley + Script Author : theFoof + Script Date : 2013.10.23 + Script Notes : +--]] + +function spawn(NPC) + SetPlayerProximityFunction(NPC, 15, "InRange") +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) +end + +function InRange(NPC, Spawn) + if GetTempVariable(NPC, "bark_timer") == nil then + PlayFlavor(NPC, "", "", "attack", 1689589577, 4560189) + Emote(NPC, "snarls and barks warningly.") + SetTempVariable(NPC, "bark_timer", "1") + AddTimer(NPC, 25000, "BarkTimer") + end +end + +function BarkTimer(NPC) + SetTempVariable(NPC, "bark_timer", nil) +end \ No newline at end of file diff --git a/server/SpawnScripts/FrostfangSea/HalikPathstalker.lua b/server/SpawnScripts/FrostfangSea/HalikPathstalker.lua new file mode 100644 index 000000000..8432624fd --- /dev/null +++ b/server/SpawnScripts/FrostfangSea/HalikPathstalker.lua @@ -0,0 +1,53 @@ +--[[ + Script Name : SpawnScripts/FrostfangSea/HalikPathstalker.lua + Script Purpose : ranger trainer in halas + Script Author : theFoof + Script Date : 2013.9.24 + Script Notes : +--]] + +local RANGER = 39 + +function spawn(NPC) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + if GetClass(Spawn) == RANGER then + conversation = CreateConversation() + PlayFlavor(NPC, "", "", "hello", 0, 0, Spawn) + AddConversationOption(conversation, "What advice do you have for a fellow ranger?", "RangChat1") + AddConversationOption(conversation, "It certainly is. Good bye.") + StartConversation(conversation, NPC, Spawn, "Welcome, fellow swashbuckler! It is such a pleasure to meet another dashing rogue within this city.") + else + PlayFlavor(NPC, "", "Watch your back. You'd be surprised how many blades fit perfectly there.", "hello", 0, 0, Spawn) + end +end + +function RangChat1(NPC, Spawn) + conversation = CreateConversation() + FaceTarget(NPC, Spawn) + + AddConversationOption(conversation, "I'll keep that in mind.", "RangChat2") + StartConversation(conversation, NPC, Spawn, "First and foremost, be in control of the range of any fights you are involved in. Release a deadly volley of arrows from a distance, and if your foe survives long enough to engage in hand to hand combat, remember that you are also skilled at wielding daggers and swords.") +end + +function RangChat2(NPC, Spawn) + conversation = CreateConversation() + FaceTarget(NPC, Spawn) + + AddConversationOption(conversation, "Sounds like good advice.", "RangChat3") + StartConversation(conversation, NPC, Spawn, "Some of our most effective hand to hand attacks are positional, meaning you need to be behind or beside an opponent for that attack to work. So you must be aware of situations in which there are multiple foes, and avoid becoming the center of attention, as positional attacks are of little use when you're surrounded!") +end + +function RangChat3(NPC, Spawn) + conversation = CreateConversation() + FaceTarget(NPC, Spawn) + + AddConversationOption(conversation, "That's useful to know!") + StartConversation(conversation, NPC, Spawn, "Last but not least, obtain items that add to your agility or stamina, when you find them! Agility affects both your ability to inflict damage and avoid taking damage from others. Your stamina affects your health. This is crucial.") +end \ No newline at end of file diff --git a/server/SpawnScripts/FrostfangSea/HelfreckLundgren.lua b/server/SpawnScripts/FrostfangSea/HelfreckLundgren.lua new file mode 100644 index 000000000..a02f0cb65 --- /dev/null +++ b/server/SpawnScripts/FrostfangSea/HelfreckLundgren.lua @@ -0,0 +1,19 @@ +--[[ + Script Name : SpawnScripts/FrostfangSea/HelfreckLundgren.lua + Script Purpose : Helfreck Lundgren + Script Author : theFoof + Script Date : 2013.10.30 + Script Notes : +--]] + +function spawn(NPC) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + PlayFlavor(NPC, "", "Making food, armor, and weapons is every bit as important to the success and security of our city as standing to face the enemy. Quality equipment and items can make the difference.", "nod", 1689589577, 4560189, Spawn) +end \ No newline at end of file diff --git a/server/SpawnScripts/FrostfangSea/HillfredKinloch.lua b/server/SpawnScripts/FrostfangSea/HillfredKinloch.lua new file mode 100644 index 000000000..dd6f62c96 --- /dev/null +++ b/server/SpawnScripts/FrostfangSea/HillfredKinloch.lua @@ -0,0 +1,347 @@ +--[[ + Script Name : SpawnScripts/FrostfangSea/HillfredKinloch.lua + Script Purpose : Hillfred Kinloch + Script Author : theFoof + Script Date : 2013.06.09 + Script Notes : +--]] + +local NothingWaste = 56 + +local BloodMaiden = 65 + +local SkullsTaking = 66 + +local GreenMystery = 67 + +local FewerAbout = 68 + +local GeodeCaching = 69 + +local RyGorrOperations = 60 + +function spawn(NPC) + ProvidesQuest(NPC, BloodMaiden) + ProvidesQuest(NPC, SkullsTaking) + ProvidesQuest(NPC, GreenMystery) + ProvidesQuest(NPC, FewerAbout) + ProvidesQuest(NPC, GeodeCaching) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + if not HasCompletedQuest(Spawn, NothingWaste) then + PlayFlavor(NPC, "", "There are some coldain that could use your help. Speak with Dolur Axebeard or Belka Thunderheart at the Great Shelf.", "nod", 0, 0, Spawn) + elseif HasCompletedQuest(Spawn, NothingWaste) and not HasCompletedQuest(Spawn, BloodMaiden) and not HasQuest(Spawn, BloodMaiden) then + PlayFlavor(NPC, "hillfred_kinloch/halas/cragged_spine/hillfred_kinloch_001.mp3", "", "", 846401774, 3774173011, Spawn) + AddConversationOption(conversation, "You mean the Ry'Gorr orcs?", "Quest1Chat_1") + AddConversationOption(conversation, "With pleasure!", "OfferBloodMaiden") + AddConversationOption(conversation, "I have slain enough orcs, already.") + StartConversation(conversation, NPC, Spawn, "This is no time to stand about! Cast your most fearsome spells and help us defend New Halas against these charging beasts!") + elseif GetQuestStep(Spawn, BloodMaiden) == 1 then + PlayFlavor(NPC, "", "Return to me once you have stained the frozen beachfront with the blood of the charging Ry'Gorr.", "agree", 0, 0, Spawn) + elseif GetQuestStep(Spawn, BloodMaiden) == 2 then + SetStepComplete(Spawn, BloodMaiden, 2) + PlayFlavor(NPC, "hillfred_kinloch/halas/cragged_spine/hillfred_kinloch_006.mp3", "", "", 1310989110, 2172357250, Spawn) + AddConversationOption(conversation, "Thank you.", "Quest2Chat_2") + StartConversation(conversation, NPC, Spawn, "I witnessed your handiwork and bravery upon the beach front, " .. GetName(Spawn) .. ". That was quite impressive!") + elseif HasCompletedQuest(Spawn, BloodMaiden) and not HasCompletedQuest(Spawn, SkullsTaking) and not HasQuest(Spawn, SkullsTaking) then + PlayFlavor(NPC, "hillfred_kinloch/halas/cragged_spine/hillfred_kinloch_007.mp3", "", "scheme", 1642212239, 1493990214, Spawn) + AddConversationOption(conversation, "I crave a challenge.", "Quest2Chat_1") + AddConversationOption(conversation, "I like my keg exactly the way it is. Goodbye.") + StartConversation(conversation, NPC, Spawn, "Now for a task that is sure to tap your keg of skill, if not empty it!") + elseif GetQuestStep(Spawn, SkullsTaking) == 1 then + PlayFlavor(NPC, "", "Return from Jagged Daggers with Ry'Gorr skulls. I'll adorn the defnses with 'em!", "agree", 0, 0, Spawn) + elseif GetQuestStep(Spawn, SkullsTaking) == 2 then + PlayFlavor(NPC, "hillfred_kinloch/halas/cragged_spine/hillfred_kinloch_011.mp3", "", "", 1023147983, 2407728628, Spawn) + AddConversationOption(conversation, "Many orc skulls.", "Quest2Chat_3") + StartConversation(conversation, NPC, Spawn, "What trophies do you return with from the battlefield, " .. GetName(Spawn) .. "?") + elseif HasCompletedQuest(Spawn, SkullsTaking) and not HasCompletedQuest(Spawn, GreenMystery) and not HasQuest(Spawn, GreenMystery) then + PlayFlavor(NPC, "hillfred_kinloch/halas/cragged_spine/hillfred_kinloch_013.mp3", "", "", 57466394, 1744108513, Spawn) + AddConversationOption(conversation, "It is.", "Quest3Chat_1") + StartConversation(conversation, NPC, Spawn, "I hear tale of the Ry'Gorr you found digging their way up from the underside of Erollis. Is it true, " .. GetName(Spawn) .. "?") + elseif GetQuestStep(Spawn, GreenMystery) == 1 then + if HasItem(Spawn, 7928) then + PlayFlavor(NPC, "", "Find torches and fires within the Ry'Gorr tunnels deep within Erollis and apply the green ice to 'em. We are sure to smoke out the ravaging orcs!", "agree", 0, 0, Spawn) + else + PlayFlavor(NPC, "", "It's difficult to apply the green ice to torches within the Ry'Gorr tunnels if you don't ahve it with you. Take this and use it!", "glare", 0, 0, Spawn) + SummonItem(Spawn, 7928, 0) + end + elseif GetQuestStep(Spawn, GreenMystery) == 2 then + AddConversationOption(conversation, "The mist dissipated pretty quickly, but those that it touched, died.", "Quest3Chat_9") + StartConversation(conversation, NPC, Spawn, "You've made a safe return, " .. GetName(Spawn) .. ", and staved off death for another day! But tell me did the green ice work? How did the Ry'Gorr stand against the billowing clouds of poison?") + elseif HasCompletedQuest(Spawn, GreenMystery) and not HasCompletedQuest(Spawn, FewerAbout) and not HasQuest(Spawn, FewerAbout) then + Quest4Chat_1(NPC, Spawn) + elseif GetQuestStep(Spawn, FewerAbout) == 1 then + PlayFlavor(NPC, "", "Get to it! Go face the orcs that crawl within the depths of our great land like you were a bear in a man's skin!", "scold", 0, 0, Spawn) + elseif GetQuestStep(Spawn, FewerAbout) == 2 then + PlayFlavor(NPC, "hillfred_kinloch/halas/cragged_spine/hillfred_kinloch_026.mp3", "", "", 2970331989, 3888048661, Spawn) + AddConversationOption(conversation, "You have become more trusting.", "Quest4Chat_6") + StartConversation(conversation, NPC, Spawn, "Your return is all the evidence of your success within the tunnels below that I require, " .. GetName(Spawn) .. ". You need not declare your victory to me!") + elseif HasCompletedQuest(Spawn, FewerAbout) and not HasCompletedQuest(Spawn, RyGorrOperations) then + PlayFlavor(NPC, "", "The coldain, Thirin Veliumdelver, has a task that will fit you like a Halasian war glove.", "agree", 0, 0, Spawn) + elseif HasCompletedQuest(Spawn, RyGorrOperations) and HasCompletedQuest(Spawn, FewerAbout) and not HasQuest(Spawn, GeodeCaching) then + PlayFlavor(NPC, "hillfred_kinloch/halas/cragged_spine/hillfred_kinloch_031.mp3", "", "", 4291173653, 4188849694, Spawn) + AddConversationOption(conversation, "That pretty much sums it up.", "Quest5Chat_1") + AddConversationOption(conversation, "I don't have time to talk right now. Good day.") + StartConversation(conversation, NPC, Spawn, "What is this I hear of you finding velium men under our dear city?") + elseif GetQuestStep(Spawn, GeodeCaching) == 1 then + PlayFlavor(NPC, "", "I hope you find a great many of the rare Cerise velium crystals within the Velinoid Catacombs below.", "agree", 0, 0, Spawn) + elseif GetQuestStep(Spawn, GeodeCaching) == 2 then + SetStepComplete(Spawn, GeodeCaching, 2) + PlayFlavor(NPC, "hillfred_kinloch/halas/cragged_spine/hillfred_kinloch_035.mp3", "", "", 2787343174, 784170411, Spawn) + AddConversationOption(conversation, "You're welcome.") + StartConversation(conversation, NPC, Spawn, "By the right hand of Marr! You found rare Cerise velium crystals. This is amazing, " .. GetName(Spawn) .. "! Thank you.") + end +end + +function Quest1Chat_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "hillfred_kinloch/halas/cragged_spine/hillfred_kinloch_003.mp3", "", "", 1836808537, 1939269005, Spawn) + AddConversationOption(conversation, "They are fierce warriors.", "Quest1Chat_2") + AddConversationOption(conversation, "They are strong tacticians.", "Quest1Chat_2") + AddConversationOption(conversation, "They are skillful spell casters.", "Quest1Chat_2") + StartConversation(conversation, NPC, Spawn, "Aye! These mongrels will not relent! I fail to understand how the coldain pushed 'em from this isle, or had kept 'em at bay for so long!") +end + +function Quest1Chat_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "hillfred_kinloch/halas/cragged_spine/hillfred_kinloch_004.mp3", "", "", 4172435129, 252044078, Spawn) + AddConversationOption(conversation, "Of course!", "OfferBloodMaiden") + AddConversationOption(conversation, "I cannot, right now.") + StartConversation(conversation, NPC, Spawn, "Of that there is no question. That is why I stand proudly beside 'em as we defend our city! Will you aid us in this battle, great " .. GetName(Spawn) .. "?") +end + +function Quest2Chat_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "hillfred_kinloch/halas/cragged_spine/hillfred_kinloch_008.mp3", "", "", 686837885, 933223065, Spawn) + AddConversationOption(conversation, "What should I do?", "OfferSkullsTaking") + AddConversationOption(conversation, "Jagged Daggers?", "Quest2Chat_2") + AddConversationOption(conversation, "I am not going over there. No way!") + StartConversation(conversation, NPC, Spawn, "You take after one of my own kin, Tuce! I am sure that the orcs are staging their beach front charge from the nearby isle known as Jagged Daggers.") +end + +function Quest2Chat_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "What should I do?", "OfferSkullsTaking") + AddConversationOption(conversation, "I am not going over there. No way!") + StartConversation(conversation, NPC, Spawn, "Aye. The isle with the spires of ice sticking out of it, like velium blades from the back of a slain giant. It is across the waters to the west of the beach front.") +end + +function Quest2Chat_3(NPC, Spawn) + SetStepComplete(Spawn, SkullsTaking, 2) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "hillfred_kinloch/halas/cragged_spine/hillfred_kinloch_012.mp3", "", "", 2537405314, 3097234688, Spawn) + AddConversationOption(conversation, "Thank you.") + StartConversation(conversation, NPC, Spawn, "You continue to prove yourself strong and hearty. You deserve a strong stein of ale!") +end + +function Quest3Chat_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "hillfred_kinloch/halas/cragged_spine/hillfred_kinloch_014.mp3", "", "", 1060176880, 2753171084, Spawn) + AddConversationOption(conversation, "You could be right.", "Quest3Chat_3") + AddConversationOption(conversation, "Or the other skirmishes have been distractions from the real plan.", "Quest3Chat_2") + StartConversation(conversation, NPC, Spawn, "Then they are more desperate than we had thought. They are trying many routes and different plans, all at the same time. They must be afraid of the influx of fighters the coldain have brought to their side.") +end + +function Quest3Chat_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "It is hard to imagine.", "Quest3Chat_3") + StartConversation(conversation, NPC, Spawn, "For years?! Ha! I hightly doubt that. Although, I was raised to believe that anything is possible, I cannot fathom these brutes being tempered by strategy or reined in by tactics.") +end + +function Quest3Chat_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "hillfred_kinloch/halas/cragged_spine/hillfred_kinloch_016.mp3", "", "", 1973360658, 494365104, Spawn) + AddConversationOption(conversation, "Let's make it defeat.", "Quest3Chat_4") + StartConversation(conversation, NPC, Spawn, "Desperate forces are more willing to take chances. This can either result in a windfall for 'em or a resounding defeat.") +end + +function Quest3Chat_4(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "hillfred_kinloch/halas/cragged_spine/hillfred_kinloch_017.mp3", "", "", 327573520, 4196024208, Spawn) + AddConversationOption(conversation, "What is it?", "Quest3Chat_5") + StartConversation(conversation, NPC, Spawn, "Well spoken, fellow defender of New Halas! And I have the perfect weapon for this situation. It's a little something that will give us the upper hand!") +end + +function Quest3Chat_5(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "hillfred_kinloch/halas/cragged_spine/hillfred_kinloch_028.mp3", "", "", 1572217488, 1295272933, Spawn) + AddConversationOption(conversation, "You mean when it was released against the Rallosian Army?", "Quest3Chat_6") + StartConversation(conversation, NPC, Spawn, "A chunk of ice- green ice! We found a small amount of it embedded within The Great Shelf. We suspected it to be the legendary Greenmist, captured and encased in ice from the last time it traveled around the globe. ") +end + +function Quest3Chat_6(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "hillfred_kinloch/halas/cragged_spine/hillfred_kinloch_029.mp3", "", "", 382556049, 477983016, Spawn) + AddConversationOption(conversation, "Why haven't you used it against them, yet?", "Quest3Chat_7") + StartConversation(conversation, NPC, Spawn, "The same. It took down ogre and orc alike, within the Rallosian ranks when Cazic-Thule released it across the lands.") +end + +function Quest3Chat_7(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "hillfred_kinloch/halas/cragged_spine/hillfred_kinloch_030.mp3", "", "", 590799696, 3171732865, Spawn) + AddConversationOption(conversation, "What makes you think it will work now? ", "Quest3Chat_8") + StartConversation(conversation, NPC, Spawn, "We tried. We melted the ice, and a green mist was released, but it dispersed too quickly to harm the Ry'Gorr forces.") +end + +function Quest3Chat_8(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "hillfred_kinloch/halas/cragged_spine/hillfred_kinloch_018.mp3", "", "", 3216543246, 3646127145, Spawn) + AddConversationOption(conversation, "Interesting. All right, I'll do it.", "OfferGreenMystery") + AddConversationOption(conversation, "No way! I can't be a part of this.") + StartConversation(conversation, NPC, Spawn, "I doubt they have much airflow deep within those tunnels you found em' digging. When the ice melts it makes a great billowing cloud of poison. Find flames within the tunnels and throw the ice on em'. Even if the mist is not strong enough to kill the ravaging beasts outright, we are sure to smoke 'em out!") +end + +function Quest3Chat_9(NPC, Spawn) + SetStepComplete(Spawn, GreenMystery, 2) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "hillfred_kinloch/halas/cragged_spine/hillfred_kinloch_020.mp3", "", "", 2833457168, 2782353327, Spawn) + AddConversationOption(conversation, "Thank you.", "Quest4Chat_1") + StartConversation(conversation, NPC, Spawn, "Ah, another victory and another reason to take up a stein at the Ice Breaker. Good job!") +end + +function Quest4Chat_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "hillfred_kinloch/halas/cragged_spine/hillfred_kinloch_021.mp3", "", "", 4017927645, 3597873709, Spawn) + AddConversationOption(conversation, "Really?", "Quest4Chat_2") + AddConversationOption(conversation, "Why's that, Hillfred?", "Quest4Chat_3") + StartConversation(conversation, NPC, Spawn, "And you need not furrow your brow over the orcs that the mist did not kill. It is in the stagnant tunnel air now, and will weaken them, even if they do not know it.") +end + +function Quest4Chat_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "hillfred_kinloch/halas/cragged_spine/hillfred_kinloch_022.mp3", "", "", 3881980508, 521109392, Spawn) + AddConversationOption(conversation, "They should be easier to slay now.", "Quest4Chat_4") + AddConversationOption(conversation, "So, they will die eventually?", "Quest4Chat_5") + StartConversation(conversation, NPC, Spawn, "I swear on the holy statue of The Huntress! It is in the air they breathe. It may have decayed some in time, and they may not have taken in enough for it to be fatal, but it is now being pumped through their abhorrent bodies within the ichor they call blood.") +end + +function Quest4Chat_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "hillfred_kinloch/halas/cragged_spine/hillfred_kinloch_023.mp3", "", "", 400683653, 2257596783, Spawn) + AddConversationOption(conversation, "They should be easier to slay now.", "Quest4Chat_4") + AddConversationOption(conversation, "So, they will die eventually?", "Quest4Chat_5") + StartConversation(conversation, NPC, Spawn, "It is in the air they breathe. It may have decayed some in time, and they may not have taken in enough for it to be fatal, but it is now being pumped through their abhorrent bodies within the ichor they call blood.") +end + +function Quest4Chat_4(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "hillfred_kinloch/halas/cragged_spine/hillfred_kinloch_025.mp3", "", "", 2971334867, 3323208561, Spawn) + AddConversationOption(conversation, "They don't stand a chance!", "OfferFewerAbout") + AddConversationOption(conversation, "I am not going back down there. Sorry.") + StartConversation(conversation, NPC, Spawn, "Then get to it! Go face them like you were a bear in a man's skin! Slay the orcs that crawl within the depths of our great land, " .. GetName(Spawn) .. ".") +end + +function Quest4Chat_5(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "hillfred_kinloch/halas/cragged_spine/hillfred_kinloch_024.mp3", "", "", 3939745267, 718274633, Spawn) + AddConversationOption(conversation, "They don't stand a chance!", "OfferFewerAbout") + AddConversationOption(conversation, "I am not going back down there. Sorry.") + StartConversation(conversation, NPC, Spawn, "Let's not wait for that day to come. Let's deliver it to 'em! Go face them like you were a bear in a man's skin! Slay the orcs that crawl within the depths of our great land, " .. GetName(Spawn) .. ".") +end + +function Quest4Chat_6(NPC, Spawn) + SetStepComplete(Spawn, FewerAbout, 2) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "hillfred_kinloch/halas/cragged_spine/hillfred_kinloch_027.mp3", "", "", 2051809382, 3817733818, Spawn) + AddConversationOption(conversation, "I'll take that as a compliment.") + StartConversation(conversation, NPC, Spawn, "I have become that sure of you and your determined nature. It is not just your taste for battle that reminds me of my kin.") +end + +function Quest5Chat_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "hillfred_kinloch/halas/cragged_spine/hillfred_kinloch_032.mp3", "", "", 807004537, 2920327554, Spawn) + AddConversationOption(conversation, "That's true.", "Quest5Chat_2") + AddConversationOption(conversation, "I wasn't aware of that.", "Quest5Chat_2") + StartConversation(conversation, NPC, Spawn, "We shouldn't be so surprised what with knowing that this was once a chunk of Velious before it was calved off. Geonids roamed the caverns there, too.") +end + + +function Quest5Chat_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "hillfred_kinloch/halas/cragged_spine/hillfred_kinloch_033.mp3", "", "", 3188649398, 1640607312, Spawn) + AddConversationOption(conversation, "Cerise velium crystal?", "Quest5Chat_3") + StartConversation(conversation, NPC, Spawn, "Yes, which brings to mind the tales of riches that rewarded the brave souls that entered those caverns. You might even be able to find the rare cerise velium crystal!") +end + +function Quest5Chat_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "hillfred_kinloch/halas/cragged_spine/hillfred_kinloch_034.mp3", "", "", 2043015378, 2840803966, Spawn) + AddConversationOption(conversation, "Yeah, I'll do it.", "OfferGeodeCaching") + AddConversationOption(conversation, "For some coin? Okay.", "OfferGeodeCaching") + AddConversationOption(conversation, "No thanks. You couldn't pay me enough.") + StartConversation(conversation, NPC, Spawn, "Yes, a red crystal. It is said to be a very powerful gem grown from velium deposits. It is sought by mage and jeweler alike. And such untapped veins of velium would be the perfect place to look for it! Will you search for 'em? I'll be sure to pay you for your efforts.") +end + +function OfferBloodMaiden(NPC, Spawn) + OfferQuest(NPC, Spawn, BloodMaiden) +end + +function OfferSkullsTaking(NPC, Spawn) + OfferQuest(NPC, Spawn, SkullsTaking) +end + +function OfferGreenMystery(NPC, Spawn) + OfferQuest(NPC, Spawn, GreenMystery) +end + +function OfferFewerAbout(NPC, Spawn) + OfferQuest(NPC, Spawn, FewerAbout) +end + +function OfferGeodeCaching(NPC, Spawn) + OfferQuest(NPC, Spawn, GeodeCaching) +end \ No newline at end of file diff --git a/server/SpawnScripts/FrostfangSea/JaisenTutwhittle.lua b/server/SpawnScripts/FrostfangSea/JaisenTutwhittle.lua new file mode 100644 index 000000000..425b76daf --- /dev/null +++ b/server/SpawnScripts/FrostfangSea/JaisenTutwhittle.lua @@ -0,0 +1,19 @@ +--[[ + Script Name : SpawnScripts/FrostfangSea/JaisenTutwhittle.lua + Script Purpose : Jaisen Tutwhittle + Script Author : theFoof + Script Date : 2013.05.21 + Script Notes : +--]] + +function spawn(NPC) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC) + PlayFlavor(NPC, "", "I will be so relieved when we make it to New Halas safely!", "nod", 1689589577, 4560189, Spawn) + FaceTarget(NPC, Spawn) +end diff --git a/server/SpawnScripts/FrostfangSea/JalfaEiskairn.lua b/server/SpawnScripts/FrostfangSea/JalfaEiskairn.lua new file mode 100644 index 000000000..24d23382f --- /dev/null +++ b/server/SpawnScripts/FrostfangSea/JalfaEiskairn.lua @@ -0,0 +1,19 @@ +--[[ + Script Name : SpawnScripts/FrostfangSea/JalfaEiskairn.lua + Script Purpose : Jalfa Eiskairn + Script Author : theFoof + Script Date : 2013.10.20 + Script Notes : See SpawnScripts/Generic/GenericCraftingTrainer for function details. +--]] + +require"SpawnScripts/Generic/GenericCraftingTrainer" + +function spawn(NPC) +end + +function respawn(NPC) +end + +function hailed(NPC, Spawn) + CraftingTrainerHail(NPC, Spawn) +end \ No newline at end of file diff --git a/server/SpawnScripts/FrostfangSea/JardaSilverstaff.lua b/server/SpawnScripts/FrostfangSea/JardaSilverstaff.lua new file mode 100644 index 000000000..afb88f458 --- /dev/null +++ b/server/SpawnScripts/FrostfangSea/JardaSilverstaff.lua @@ -0,0 +1,53 @@ +--[[ + Script Name : SpawnScripts/FrostfangSea/JardaSilverstaff.lua + Script Purpose : conjuror trainer + Script Author : theFoof + Script Date : 2013.9.24 + Script Notes : +--]] + +local CONJUROR = 29 + +function spawn(NPC) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + if GetClass(Spawn) == CONJUROR then + conversation = CreateConversation() + PlayFlavor(NPC, "", "", "hello", 0, 0, Spawn) + AddConversationOption(conversation, "Do you have any advice for a fellow conjuror?", "ConjChat1") + AddConversationOption(conversation, "That's good to know. Good day.") + StartConversation(conversation, NPC, Spawn, "I see you have the talents of a conjurer, too. It may be a challenging profession, but I have found it rather rewarding.") + else + PlayFlavor(NPC, "", "Greetings!", "hello", 0, 0, Spawn) + end +end + +function ConjChat1(NPC, Spawn) + conversation = CreateConversation() + FaceTarget(NPC, Spawn) + + AddConversationOption(conversation, "That's useful to know!", "ConjChat2") + StartConversation(conversation, NPC, Spawn, "If you find items that add to your intelligence or stamina, then take them! Intelligence affects your spell focus and increases the damage your spells can cause. Your stamina affects your health. This is crucial!") +end + +function ConjChat2(NPC, Spawn) + conversation = CreateConversation() + FaceTarget(NPC, Spawn) + + AddConversationOption(conversation, "That's interesting.", "ConjChat3") + StartConversation(conversation, NPC, Spawn, "We possess many potent abilities, considering that we can control the arcane powers of fire, but the greatest weapons in our arsenal are the powerful elemental minions summoned forth to do our bidding.") +end + +function ConjChat3(NPC, Spawn) + conversation = CreateConversation() + FaceTarget(NPC, Spawn) + + AddConversationOption(conversation, "Thank you for the advice.") + StartConversation(conversation, NPC, Spawn, "They are our best defense against the onslaught. If they should fall take solace in the fact that they have returned to their plane of origin and can be summoned, once more.") +end \ No newline at end of file diff --git a/server/SpawnScripts/FrostfangSea/KnutOrcbane.lua b/server/SpawnScripts/FrostfangSea/KnutOrcbane.lua new file mode 100644 index 000000000..332169e3c --- /dev/null +++ b/server/SpawnScripts/FrostfangSea/KnutOrcbane.lua @@ -0,0 +1,566 @@ +--[[ + Script Name : SpawnScripts/FrostfangSea/KnutOrcbane.lua + Script Purpose : Knut Orcbane + Script Author : theFoof + Script Date : 2013.06.10 + Script Notes : +--]] + +local NothingWaste = 56 + +local ImpishThreats = 78 + +local ClanImps = 79 + +local MysteryIceberg = 80 + +local BelowWaves = 59 + +local BecomingOrcbane = 81 + +local RyGorrOperations = 60 + +local FlawlessChore = 82 + +local SometimesKnut = 84 + +function spawn(NPC) + ProvidesQuest(NPC, ImpishThreats) + ProvidesQuest(NPC, ClanImps) + ProvidesQuest(NPC, MysteryIceberg) + ProvidesQuest(NPC, BecomingOrcbane) + ProvidesQuest(NPC, FlawlessChore) + ProvidesQuest(NPC, SometimesKnut) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + if not HasCompletedQuest(Spawn, NothingWaste) then + PlayFlavor(NPC, "", "There are some coldain that could use your help. Speak with Dolur Axebeard or Belka Thunderheart at the Great Shelf.", "nod", 1689589577, 4560189, Spawn) + elseif not HasCompletedQuest(Spawn, ImpishThreats) and not HasQuest(Spawn, ImpishThreats) then + PlayFlavor(NPC, "knut_orcbane/halas/cragged_spine/knut_orcbane_004.mp3", "", "", 2960091072, 298935483, Spawn) + AddConversationOption(conversation, "Thank you.", "Quest1Chat_1") + AddConversationOption(conversation, "What cause is that?", "Quest1Chat_10") + AddConversationOption(conversation, "Not me. I'm just passing through.") + local archetype = GetArchetypeName(Spawn) + if archetype == 'Fighter' then + archetype_message = "strong fighter" + elseif archetype == 'Mage' then + archetype_message = 'powerful mage' + elseif archetype == 'Scout' then + archetype_message = 'stealthy scout' + else + archetype_message = 'caring priest' + end + StartConversation(conversation, NPC, Spawn, "Aye, another " .. archetype_message .. " to join our cause. Welcome!") + elseif GetQuestStep(Spawn, ImpishThreats) == 1 then + PlayFlavor(NPC, "", "We cannot speak now. You must clear the imps from the cliff above.", "no", 0, 0, Spawn) + elseif GetQuestStep(Spawn, ImpishThreats) == 2 then + PlayFlavor(NPC, "knut_orcbane/halas/cragged_spine/knut_orcbane_016.mp3", "", "", 3960586282, 3379586458, Spawn) + AddConversationOption(conversation, "Fewer now.", "Quest1Chat_11") + StartConversation(conversation, NPC, Spawn, "You return, " .. GetName(Spawn) .. "! Tell me, how do the winged vermin fare?") + elseif HasCompletedQuest(Spawn, ImpishThreats) and not HasCompletedQuest(Spawn, ClanImps) and not HasQuest(Spawn, ClanImps) then + Quest2Chat_1(NPC, Spawn) + elseif HasQuest(Spawn, ClanImps) and GetQuestStep(Spawn, ClanImps) < 3 then + PlayFlavor(NPC, "", "We cannot speak now. You must trudge back up the cliff and repossess our stolen supplies.", "no", 0, 0, Spawn) + elseif GetQuestStep(Spawn, ClanImps) == 3 then + PlayFlavor(NPC, "knut_orcbane/halas/cragged_spine/knut_orcbane_022.mp3", "", "", 864304446, 2025112563, Spawn) + AddConversationOption(conversation, "So far, so good.", "Quest2Chat_4") + StartConversation(conversation, NPC, Spawn, "See Griz, " .. GetName(Spawn) .. " returned to us! Now you can quit your doomsaying. They are safe.") + elseif not HasCompletedQuest(Spawn, BelowWaves) then + PlayFlavor(NPC, "", "Go see Thirin, I think he could use your help.", "point", 0, 0, Spawn) + elseif HasCompletedQuest(Spawn, BelowWaves) and HasCompletedQuest(Spawn, ClanImps) and not HasCompletedQuest(Spawn, MysteryIceberg) and not HasQuest(Spawn, MysteryIceberg) then + PlayFlavor(NPC, "knut_orcbane/halas/cragged_spine/knut_orcbane_026.mp3", "", "", 3071313209, 2590619327, Spawn) + AddConversationOption(conversation, "Thirin Veliumdelver had me hunting orcs on Jagged Daggers Isle.", "Quest3Chat_1") + AddConversationOption(conversation, "It doesn't matter.", "Quest3Chat_6") + StartConversation(conversation, NPC, Spawn, "Griz says you smell of orc and sea water. Where have you been, " .. GetName(Spawn) .. "?") + elseif HasQuest(Spawn, MysteryIceberg) and GetQuestStep(Spawn, MysteryIceberg) < 3 then + PlayFlavor(NPC, "", "We are counting on you to go over to the iceberg and see what you can find out about the Ry'Gorr activities there.", "agree", 0, 0, Spawn) + elseif GetQuestStep(Spawn, MysteryIceberg) == 3 then + PlayFlavor(NPC, "knut_orcbane/halas/cragged_spine/knut_orcbane_034.mp3", "", "", 1362837107, 3201094418, Spawn) + AddConversationOption(conversation, "I found pickaxes. I am not sure what it means.", "Quest3Chat_7") + StartConversation(conversation, NPC, Spawn, "The stench of orc is even stronger on you now, " .. GetName(Spawn) .. ". We can already tell you've been successful. So tell us, what did you find out?") + elseif HasCompletedQuest(Spawn, MysteryIceberg) and not HasCompletedQuest(Spawn, BecomingOrcbane) and not HasQuest(Spawn, BecomingOrcbane) then + PlayFlavor(NPC, "knut_orcbane/halas/cragged_spine/knut_orcbane_037.mp3", "", "", 2495536008, 1780787017, Spawn) + AddConversationOption(conversation, "Yes. They are attempting to dig out some tunnels below the city of New Halas.", "Quest4Chat_1") + StartConversation(conversation, NPC, Spawn, "Speak to us, " .. GetName(Spawn) .. ". Is it true that you found the orcs below this island?") + elseif GetQuestStep(Spawn, BecomingOrcbane) == 1 then + AddConversationOption(conversation, "Yes, but I have more Ry'Gorr to hunt.") + StartConversation(conversation, NPC, Spawn, "You have returned to us already, " .. GetName(Spawn) .. "?") + elseif GetQuestStep(Spawn, BecomingOrcbane) == 2 then + AddConversationOption(conversation, "I have indeed!", "Quest4Chat_5") + StartConversation(conversation, NPC, Spawn, "Tell us you have reduced their numbers even further, " .. GetName(Spawn) .. "?") + elseif not HasCompletedQuest(Spawn, RyGorrOperations) then + PlayFlavor(NPC, "", "Go see Thirin, I think he could use your help.", "point", 0, 0, Spawn) + elseif HasCompletedQuest(Spawn, RyGorrOperations) and HasCompletedQuest(Spawn, BecomingOrcbane) and not HasCompletedQuest(Spawn, FlawlessChore) and not HasQuest(Spawn, FlawlessChore) then + PlayFlavor(NPC, "knut_orcbane/halas/cragged_spine/knut_orcbane_048.mp3", "", "", 2077147311, 3803027190, Spawn) + AddConversationOption(conversation, "I broke through a newly made wall under New Halas and was attacked by Velinoid crystal men.", "Quest5Chat_1") + StartConversation(conversation, NPC, Spawn, "Aah! It is you, " .. GetName(Spawn) .. "! Griz could sense an old magick approaching, and was quite alarmed, but it is just you. What have you been doing? ") + elseif GetQuestStep(Spawn, FlawlessChore) == 1 then + PlayFlavor(NPC, "", "We cannot speak now. You must seize an armful of the flawless velium cores from the Velinoid creatures.", "", 0, 0, Spawn) + elseif GetQuestStep(Spawn, FlawlessChore) == 2 then + PlayFlavor(NPC, "knut_orcbane/halas/cragged_spine/knut_orcbane_054.mp3", "", "", 2665553657, 265927560, Spawn) + AddConversationOption(conversation, "He should.", "Quest5Chat_5") + StartConversation(conversation, NPC, Spawn, "You return to us, " .. GetName(Spawn) .. ", and with the velium cores. But Griz doesn't sense more of the old magick with you than before.") + elseif HasCompletedQuest(Spawn, FlawlessChore) and not HasQuest(Spawn, SometimesKnut) and not HasCompletedQuest(Spawn, SometimesKnut) then + Quest6Chat_1(NPC, Spawn) + elseif HasQuest(Spawn, SometimesKnut) and GetQuestStep(Spawn, SometimesKnut) < 4 then + PlayFlavor(NPC, "", "You had best watch over Griz while he is in your care within Demon's Delve. And remember, you can only hear him when you wear him.", "hello", 0, 0, Spawn) + elseif GetQuestStep(Spawn, SometimesKnut) == 4 then + AddConversationOption(conversation, "Yeah, we did. And we destroyed it.", "Quest6Chat_5") + StartConversation(conversation, NPC, Spawn, "Did you find the item of old magick, " .. GetName(Spawn) .. "? Was griz able to help you find it?") + else + PlayFlavor(NPC, "", "Griz still speaks of your adventure together.", "hello", 0, 0, Spawn) + end +end + +function Quest1Chat_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "knut_orcbane/halas/cragged_spine/knut_orcbane_006.mp3", "", "", 1179640233, 2510165864, Spawn) + AddConversationOption(conversation, "Yes, sir!", "Quest1Chat_2") + StartConversation(conversation, NPC, Spawn, "Now, don't dawdle, take up your weapon and deliver the horde of orcs back to the depths from which they came!") +end + +function Quest1Chat_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "knut_orcbane/halas/cragged_spine/knut_orcbane_007.mp3", "", "", 136827615, 2574970832, Spawn) + AddConversationOption(conversation, "Uh, excuse me?", "Quest1Chat_3") + AddConversationOption(conversation, "Good thing someone is.") + StartConversation(conversation, NPC, Spawn, "See what I mean, Griz, not all adventurers are... What do you mean? Ah, I had forgotten. But yes, as right as rain, you are!") +end + +function Quest1Chat_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "knut_orcbane/halas/cragged_spine/knut_orcbane_008.mp3", "", "", 1025809423, 508302222, Spawn) + AddConversationOption(conversation, "Who is Griz?", "Quest1Chat_4") + AddConversationOption(conversation, "What is the task?", "Quest1Chat_9") + AddConversationOption(conversation, "My skills are already being employed elsewhere. Good day.") + StartConversation(conversation, NPC, Spawn, "My companion, Griz, just reminded me of an important task that we have for someone of your skills.") +end + +function Quest1Chat_4(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "knut_orcbane/halas/cragged_spine/knut_orcbane_009.mp3", "", "", 461919392, 2357150374, Spawn) + AddConversationOption(conversation, "Is he invisible?", "Quest1Chat_5") + StartConversation(conversation, NPC, Spawn, "Griz is my faithful companion. He goes where I go.") +end + +function Quest1Chat_5(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "knut_orcbane/halas/cragged_spine/knut_orcbane_010.mp3", "", "", 1052367641, 1770506603, Spawn) + AddConversationOption(conversation, "Where is he?", "Quest1Chat_6") + StartConversation(conversation, NPC, Spawn, "Do not be ridiculous! He is visible. Next you will claim your ears fail to hear his voice, same as the rest!") +end + +function Quest1Chat_6(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "knut_orcbane/halas/cragged_spine/knut_orcbane_011.mp3", "", "", 2787510762, 2957661742, Spawn) + AddConversationOption(conversation, "He told you this?", "Quest1Chat_7") + StartConversation(conversation, NPC, Spawn, "I wear him! He told me he was a normal blizzard grizzly, slain and made a pelt, then cursed by some sort of reanimation spell.") +end + +function Quest1Chat_7(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "knut_orcbane/halas/cragged_spine/knut_orcbane_012.mp3", "", "", 3151538382, 1140255767, Spawn) + AddConversationOption(conversation, "Almost?", "Quest1Chat_8") + AddConversationOption(conversation, "Good thing you avoided that.", "Quest1Chat_8") + AddConversationOption(conversation, "I am going to leave you two alone.") + StartConversation(conversation, NPC, Spawn, "Aye. I found him on another, whose body long went cold, and I needed the warmth. Little did I know that I would also be gaining a companion. I had almost gone crazy with loneliness.") +end + +function Quest1Chat_8(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "knut_orcbane/halas/cragged_spine/knut_orcbane_013.mp3", "", "", 3268671132, 2494843375, Spawn) + AddConversationOption(conversation, "Yeah, what is the task?", "Quest1Chat_9") + StartConversation(conversation, NPC, Spawn, "But I am off path. We were talking about your new task!") +end + +function Quest1Chat_9(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "knut_orcbane/halas/cragged_spine/knut_orcbane_014.mp3", "", "", 3650994868, 4022388430, Spawn) + AddConversationOption(conversation, "I'll rid you of the imps.", "OfferImpishThreats") + AddConversationOption(conversation, "I am not going up there. No way!") + StartConversation(conversation, NPC, Spawn, "Clearing the imps from the cliff above. They take a sick delight in throwing rocks and stealing our supplies. We have enough trouble dealing with the attacking orcs. We can't handle random attacks from behind, too.") +end + +function Quest1Chat_10(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "knut_orcbane/halas/cragged_spine/knut_orcbane_005.mp3", "", "", 1586450640, 3594709012, Spawn) + AddConversationOption(conversation, "Yes, sir!", "Quest1Chat_2") + StartConversation(conversation, NPC, Spawn, "Smiting the horde of orcs that threaten our fledgling city, of course. Now, don't dawdle, take up your weapon and deliver them back to the depths from which they came!") +end + +function Quest1Chat_11(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "knut_orcbane/halas/cragged_spine/knut_orcbane_017.mp3", "", "", 2616213114, 1218999941, Spawn) + AddConversationOption(conversation, "No.", "Quest1Chat_12") + StartConversation(conversation, NPC, Spawn, "Aaah! Music to our ears, isn't it, Griz? Were any of them carrying our stolen supplies?") +end + +function Quest1Chat_12(NPC, Spawn) + SetStepComplete(Spawn, ImpishThreats, 2) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "knut_orcbane/halas/cragged_spine/knut_orcbane_018.mp3", "", "", 4230096106, 3358535, Spawn) + AddConversationOption(conversation, "Possibly.", "Quest2Chat_1") + AddConversationOption(conversation, "Or smashing them somewhere.", "Quest2Chat_1") + StartConversation(conversation, NPC, Spawn, "Then they must have been stashing them somewhere.") +end + +function Quest2Chat_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "knut_orcbane/halas/cragged_spine/knut_orcbane_019.mp3", "", "", 2687986263, 1290955912, Spawn) + AddConversationOption(conversation, "Do you want me to retrieve them?", "Quest2Chat_2") + AddConversationOption(conversation, "Can't we just replace them?", "Quest2Chat_3") + StartConversation(conversation, NPC, Spawn, "We could put the supplies that the imps have stolen from us to good use, " .. GetName(Spawn) .. ".") +end + +function Quest2Chat_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "knut_orcbane/halas/cragged_spine/knut_orcbane_021.mp3", "", "", 1541824689, 3333543971, Spawn) + AddConversationOption(conversation, "I'll do it.", "OfferClanImps") + AddConversationOption(conversation, "I can't deal with any more of your craziness.") + StartConversation(conversation, NPC, Spawn, "That's the spirit! Trudge back up the cliff and repossess our stolen supplies. The imps must have stashed them somewhere up there, Griz and I are certain of this.") +end + +function Quest2Chat_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "knut_orcbane/halas/cragged_spine/knut_orcbane_020.mp3", "", "", 2274013459, 2869453130, Spawn) + AddConversationOption(conversation, "So you want me to retrieve them?", "Quest2Chat_2") + StartConversation(conversation, NPC, Spawn, "Some items are not so easily replaced, besides, goods are not arriving to New Halas as often as we need.") +end + +function Quest2Chat_4(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "knut_orcbane/halas/cragged_spine/knut_orcbane_023.mp3", "", "", 3386688534, 1781356387, Spawn) + AddConversationOption(conversation, "That's good to know.", "Quest2Chat_5") + StartConversation(conversation, NPC, Spawn, "It is not that he lacks confidence in you, it is just that he feared something foul had happened to you. ") +end + +function Quest2Chat_5(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "knut_orcbane/halas/cragged_spine/knut_orcbane_024.mp3", "", "", 4143574781, 924201521, Spawn) + AddConversationOption(conversation, "I did. Here's all that I was able to find.", "Quest2Chat_6") + StartConversation(conversation, NPC, Spawn, "I mean, you did repossess our stolen supplies, aye?") +end + +function Quest2Chat_6(NPC, Spawn) + SetStepComplete(Spawn, ClanImps, 3) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "knut_orcbane/halas/cragged_spine/knut_orcbane_025.mp3", "", "", 3946443740, 2381252616, Spawn) + AddConversationOption(conversation, "I'm glad to hear it was worth it.") + StartConversation(conversation, NPC, Spawn, "Good work! These items will come in very handy.") +end + +function Quest3Chat_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "knut_orcbane/halas/cragged_spine/knut_orcbane_028.mp3", "", "", 2981574255, 260475867, Spawn) + AddConversationOption(conversation, "Yes, and they are doing something on the chunk of ice next to it.", "Quest3Chat_2") + StartConversation(conversation, NPC, Spawn, "Ah! They have started to inhabit that island now, too?") +end + +function Quest3Chat_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "knut_orcbane/halas/cragged_spine/knut_orcbane_029.mp3", "", "", 1298453249, 1624889815, Spawn) + AddConversationOption(conversation, "I saw it, myself.", "Quest3Chat_3") + AddConversationOption(conversation, "Thirin's scouts said as much.", "Quest3Chat_3") + StartConversation(conversation, NPC, Spawn, "You know this for certain?") +end + +function Quest3Chat_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "knut_orcbane/halas/cragged_spine/knut_orcbane_030.mp3", "", "", 110505260, 1254849801, Spawn) + AddConversationOption(conversation, "Sorry.", "Quest3Chat_4") + AddConversationOption(conversation, "I didn't.") + StartConversation(conversation, NPC, Spawn, "Whoa, no need to yell!") +end + +function Quest3Chat_4(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "knut_orcbane/halas/cragged_spine/knut_orcbane_031.mp3", "", "", 1992133863, 2456842289, Spawn) + AddConversationOption(conversation, "Yeah, but about the orcs?", "Quest3Chat_5") + StartConversation(conversation, NPC, Spawn, "Not you, " .. GetName(Spawn) .. ". Griz. I nearly went deaf with that one. And how would you like it if I did? Then who would listen to you?") +end + +function Quest3Chat_5(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "knut_orcbane/halas/cragged_spine/knut_orcbane_032.mp3", "", "", 3606219990, 1558926638, Spawn) + AddConversationOption(conversation, "I can.", "OfferMysteryIceberg") + AddConversationOption(conversation, "I am not going over there. No way!") + StartConversation(conversation, NPC, Spawn, "Right! The orcs. We need to find out what scheme they are hatching over there on the iceberg. Think you can get there?") +end + +function Quest3Chat_6(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "knut_orcbane/halas/cragged_spine/knut_orcbane_027.mp3", "", "", 3550762599, 2709264922, Spawn) + AddConversationOption(conversation, "Thirin Veliumdelver had me hunting orcs on Jagged Daggers Isle.", "Quest3Chat_1") + AddConversationOption(conversation, "And they will stay that way.") + StartConversation(conversation, NPC, Spawn, "We are not unconvinced, are we Griz? But your secrets are your own.") +end + +function Quest3Chat_7(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "knut_orcbane/halas/cragged_spine/knut_orcbane_035.mp3", "", "", 3450964539, 968602792, Spawn) + AddConversationOption(conversation, "No, that is all.", "Quest3Chat_8") + StartConversation(conversation, NPC, Spawn, "Maybe they are using them as tools to climb the ice? Hmm. Did you find anything else?") +end + +function Quest3Chat_8(NPC, Spawn) + SetStepComplete(Spawn, MysteryIceberg, 3) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "knut_orcbane/halas/cragged_spine/knut_orcbane_036.mp3", "", "", 4224938593, 2388251058, Spawn) + AddConversationOption(conversation, "You're welcome.") + StartConversation(conversation, NPC, Spawn, "Thank you for the service.") +end + +function Quest4Chat_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "knut_orcbane/halas/cragged_spine/knut_orcbane_038.mp3", "", "", 4135142976, 4005855669, Spawn) + AddConversationOption(conversation, "Not all of them, but there's far less now.", "Quest4Chat_2") + StartConversation(conversation, NPC, Spawn, "Mithaniel's fury! I hope you cut them down!") +end + +function Quest4Chat_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "knut_orcbane/halas/cragged_spine/knut_orcbane_039.mp3", "", "", 2291485181, 3172762716, Spawn) + AddConversationOption(conversation, "No.", "Quest4Chat_3") + AddConversationOption(conversation, "Yes. It really will.") + StartConversation(conversation, NPC, Spawn, "Far less?! That just won't do! Culling a few of these monsters never satisfied me! Will it satisfy you?") +end + +function Quest4Chat_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "knut_orcbane/halas/cragged_spine/knut_orcbane_040.mp3", "", "", 4113678321, 3822036418, Spawn) + AddConversationOption(conversation, "I said, no. It will not satisfy me.", "Quest4Chat_4") + AddConversationOption(conversation, "Yes. It really will.") + StartConversation(conversation, NPC, Spawn, "I'm not asking you, Griz. I know where you stand on the stinking brutes! What do you say, " .. GetName(Spawn) .. "?") +end + +function Quest4Chat_4(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "knut_orcbane/halas/cragged_spine/knut_orcbane_041.mp3", "", "", 2166082015, 1750776733, Spawn) + AddConversationOption(conversation, "I'll be sure to use it on them!", "OfferBecomingOrcbane") + AddConversationOption(conversation, "Nevermind then. I should be going.") + StartConversation(conversation, NPC, Spawn, "That's the Orcbane spirit! Ah, and Griz is right. You deserve a bit of a boost, too. Anything to help you beat back the horde of Ry'Gorr. It is a potion that will sap their life essence.") +end + +function Quest4Chat_5(NPC, Spawn) + SetStepComplete(Spawn, BecomingOrcbane, 2) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "bow", 0, 0, Spawn) + AddConversationOption(conversation, "Thank you.") + StartConversation(conversation, NPC, Spawn, "I had all confidence in you!") +end + +function Quest5Chat_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "knut_orcbane/halas/cragged_spine/knut_orcbane_049.mp3", "", "", 2034719920, 764754594, Spawn) + AddConversationOption(conversation, "Should I be worried?", "Quest5Chat_2") + AddConversationOption(conversation, "How can I get rid of it?", "Quest5Chat_4") + StartConversation(conversation, NPC, Spawn, "Yes, Griz. It must be their old magick that lingers on you now.") +end + +function Quest5Chat_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "knut_orcbane/halas/cragged_spine/knut_orcbane_050.mp3", "", "", 1934837003, 1465604041, Spawn) + AddConversationOption(conversation, "That's good.", "Quest5Chat_3") + StartConversation(conversation, NPC, Spawn, "No. It will dissipate in time.") +end + +function Quest5Chat_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "knut_orcbane/halas/cragged_spine/knut_orcbane_052.mp3", "", "", 4209716810, 1939380730, Spawn) + AddConversationOption(conversation, "How are we going to get it?", "OfferFlawlessChore") + AddConversationOption(conversation, "Get someone else for this task.") + StartConversation(conversation, NPC, Spawn, "But maybe we could use that magick in our ongoing fight with the Ry'Gorr. Griz that is a sound idea!") +end + +function Quest5Chat_4(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "knut_orcbane/halas/cragged_spine/knut_orcbane_051.mp3", "", "", 2778768716, 4176738164, Spawn) + AddConversationOption(conversation, "That's good.", "Quest5Chat_3") + StartConversation(conversation, NPC, Spawn, "Time. It will dissipate in time.") +end + +function Quest5Chat_5(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "knut_orcbane/halas/cragged_spine/knut_orcbane_055.mp3", "", "", 724900994, 1307450344, Spawn) + AddConversationOption(conversation, "Unless what?", "Quest5Chat_6") + StartConversation(conversation, NPC, Spawn, "I agree. He should sense more of it what with you carrying all those. Unless...") +end + +function Quest5Chat_6(NPC, Spawn) + SetStepComplete(Spawn, FlawlessChore, 2) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "knut_orcbane/halas/cragged_spine/knut_orcbane_056.mp3", "", "", 886559545, 4266167856, Spawn) + AddConversationOption(conversation, "Glad to be appreciated.", "Quest6Chat_1") + StartConversation(conversation, NPC, Spawn, "It must not have been the Velinoid creatures. We made a mistake. Griz is sorry about it, too. But you did fulfill your task and for that we are grateful.") +end + +function Quest6Chat_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "knut_orcbane/halas/cragged_spine/knut_orcbane_057.mp3", "", "", 3810409959, 1206652947, Spawn) + AddConversationOption(conversation, "What are you talking about?", "Quest6Chat_2") + StartConversation(conversation, NPC, Spawn, "No, Griz. I said no. There's got to be another way. They'll try again. How about that?") +end + +function Quest6Chat_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "knut_orcbane/halas/cragged_spine/knut_orcbane_058.mp3", "", "", 2407855497, 623007376, Spawn) + AddConversationOption(conversation, "But what am I looking for?", "Quest6Chat_3") + AddConversationOption(conversation, "I can do that.", "Quest6Chat_4") + AddConversationOption(conversation, "I am not going back down there. Good bye.") + StartConversation(conversation, NPC, Spawn, "Griz wants you to return to the caves under this island, in search of the old magick.") +end + +function Quest6Chat_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "shrug", 0, 0, Spawn) + AddConversationOption(conversation, "Then how am I supposed to...", "Quest6Chat_4") + StartConversation(conversation, NPC, Spawn, "He doesn't know and neither do I.") +end + +function Quest6Chat_4(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "I'll do it. I'll take him down with me.", "OfferSometimesKnut") + AddConversationOption(conversation, "No thank you. You can keep your companion to yourself.") + StartConversation(conversation, NPC, Spawn, "He wants you to take him with you. It's the only way for him to be sure that you find the source.") +end + +function Quest6Chat_5(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "He told me to destroy it. It was a black shard, like the ones that were being used to raise Ry'Gorr skeletons.", "Quest6Chat_6") + StartConversation(conversation, NPC, Spawn, "What? I thought he wanted to find it and use it?") +end + +function Quest6Chat_6(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "Good thing we found it.", "Quest6Chat_7") + StartConversation(conversation, NPC, Spawn, "Ah, then it is best to destroy it. They must have wanted to plant it below New Halas in order to bring forth an army of undead within the city.") +end + +function Quest6Chat_7(NPC, Spawn) + SetStepComplete(Spawn, SometimesKnut, 4) + RemoveItem(Spawn, 157116) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "Certainly.") + AddConversationOption(conversation, "I will miss him.") + StartConversation(conversation, NPC, Spawn, "Now take this, as you have earned it, " .. GetName(Spawn) .. ". And return to me my friend, Griz.") +end + +function OfferImpishThreats(NPC, Spawn) + OfferQuest(NPC, Spawn, ImpishThreats) +end + +function OfferClanImps(NPC, Spawn) + OfferQuest(NPC, Spawn, ClanImps) +end + +function OfferMysteryIceberg(NPC, Spawn) + OfferQuest(NPC, Spawn, MysteryIceberg) +end + +function OfferBecomingOrcbane(NPC, Spawn) + OfferQuest(NPC, Spawn, BecomingOrcbane) +end + +function OfferFlawlessChore(NPC, Spawn) + OfferQuest(NPC, Spawn, FlawlessChore) +end + +function OfferSometimesKnut(NPC, Spawn) + OfferQuest(NPC, Spawn, SometimesKnut) +end \ No newline at end of file diff --git a/server/SpawnScripts/FrostfangSea/LedvinAxethrower.lua b/server/SpawnScripts/FrostfangSea/LedvinAxethrower.lua new file mode 100644 index 000000000..00d7ccb62 --- /dev/null +++ b/server/SpawnScripts/FrostfangSea/LedvinAxethrower.lua @@ -0,0 +1,61 @@ +--[[ + Script Name : SpawnScripts/FrostfangSea/LedvinAxethrower.lua + Script Purpose : mystic trainer in Halas + Script Author : theFoof + Script Date : 2013.9.24 + Script Notes : +--]] + +local MYSTIC = 19 + +function spawn(NPC) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + if GetClass(Spawn) == MYSTIC then + conversation = CreateConversation() + PlayFlavor(NPC, "", "", "hello", 0, 0, Spawn) + AddConversationOption(conversation, "What advice can you give to another mystic?", "MysticChat1") + AddConversationOption(conversation, "It is, isn't it? Good day.") + StartConversation(conversation, NPC, Spawn, "Hail, fellow mystic, my sibling in the shaman arts! How nice to see another called into the fold.") + else + PlayFlavor(NPC, "", "Many paths may lead toward the same goal.", "hello", 0, 0, Spawn) + end +end + +function MysticChat1(NPC, Spawn) + conversation = CreateConversation() + FaceTarget(NPC, Spawn) + + AddConversationOption(conversation, "That's useful to know!", "MysticChat2") + StartConversation(conversation, NPC, Spawn, "If you find items that add to your wisdom or stamina, then take them! Wisdom increases the amount of damage your spells can inflict on others and raises your defenses against spell damage inflicted on you. Your stamina affects your health. This is crucial.") +end + +function MysticChat2(NPC, Spawn) + conversation = CreateConversation() + FaceTarget(NPC, Spawn) + + AddConversationOption(conversation, "That's interesting.", "MysticChat3") + StartConversation(conversation, NPC, Spawn, "Know the power you wield. We beseech our ancestors and seek their aid in all aspects of battle. With their blessings we can cast protection or emporing spells upon ourselves and our allies.") +end + +function MysticChat3(NPC, Spawn) + conversation = CreateConversation() + FaceTarget(NPC, Spawn) + + AddConversationOption(conversation, "That will be useful!", "MysticChat4") + StartConversation(conversation, NPC, Spawn, "But they can also empower us with the ability to inflict debilitating weakness upon the enemy!") +end + +function MysticChat4(NPC, Spawn) + conversation = CreateConversation() + FaceTarget(NPC, Spawn) + + AddConversationOption(conversation, "Thank you for the advice.") + StartConversation(conversatin, NPC, Spawn, "And protect yourself with a good set of chain mail, " .. GetName(Spawn) .. ". The armor is not as cumbersome as plate, but its protective properties will be necessary when deep in battle.") +end \ No newline at end of file diff --git a/server/SpawnScripts/FrostfangSea/LibbitSwampchild.lua b/server/SpawnScripts/FrostfangSea/LibbitSwampchild.lua new file mode 100644 index 000000000..9463ad10d --- /dev/null +++ b/server/SpawnScripts/FrostfangSea/LibbitSwampchild.lua @@ -0,0 +1,19 @@ +--[[ + Script Name : SpawnScripts/FrostfangSea/LibbitSwampchild.lua + Script Purpose : Libbit Swampchild + Script Author : theFoof + Script Date : 2013.10.30 + Script Notes : +--]] + +function spawn(NPC) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + PlayFlavor(NPC, "", "Greetings friend. I am sorry, but I can only assist members of more advanced guilds with their cloak design.", "", 1689589577, 4560189, Spawn) +end \ No newline at end of file diff --git a/server/SpawnScripts/FrostfangSea/Lionpost.lua b/server/SpawnScripts/FrostfangSea/Lionpost.lua new file mode 100644 index 000000000..fe2e0a758 --- /dev/null +++ b/server/SpawnScripts/FrostfangSea/Lionpost.lua @@ -0,0 +1,39 @@ +--[[ + Script Name : SpawnScripts/FrostfangSea/LionPost.lua + Script Purpose : for the spawn "lion post" + Script Author : theFoof + Script Date : 2013.05.25 + Script Notes : +--]] +local IcemanesCometh = 18 + +function spawn(NPC) + SetRequiredQuest(NPC, IcemanesCometh, 1) +end + +function casted_on(NPC, Caster, SpellName) + if SpellName == 'leash cub to post' then + counter = 0 + if GetTempVariable(Caster, "cub1") ~= nil then + counter = counter + 1 + Despawn(GetTempVariable(Caster, "cub1")) + end + if GetTempVariable(Caster, "cub2") ~= nil then + counter = counter + 1 + Despawn(GetTempVariable(Caster, "cub2")) + end + if GetTempVariable(Caster, "cub3") ~= nil then + counter = counter + 1 + Despawn(GetTempVariable(Caster, "cub3")) + end + if GetTempVariable(Caster, "cub4") ~= nil then + counter = counter + 1 + Despawn(GetTempVariable(Caster, "cub4")) + end + SetTempVariable(Caster, "cub1", nil) + SetTempVariable(Caster, "cub2", nil) + SetTempVariable(Caster, "cub3", nil) + SetTempVariable(Caster, "cub4", nil) + AddStepProgress(Caster, IcemanesCometh, 1, counter) + end +end \ No newline at end of file diff --git a/server/SpawnScripts/FrostfangSea/LondiarInygad.lua b/server/SpawnScripts/FrostfangSea/LondiarInygad.lua new file mode 100644 index 000000000..a4c373cb4 --- /dev/null +++ b/server/SpawnScripts/FrostfangSea/LondiarInygad.lua @@ -0,0 +1,132 @@ +--[[ + Script Name : SpawnScripts/FrostfangSea/LondiarInygad.lua + Script Purpose : Londiar Inygad + Script Author : theFoof + Script Date : 2013.09.26 + Script Notes : +--]] + +function spawn(NPC) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_2_1052.mp3", "hello", "", 0, 0, Spawn) + AddConversationOption(conversation, "Thank you, I'll keep that in mind.") + AddConversationOption(conversation, "How would I learn adorning?", "AdornChat1") + StartConversation(conversation, NPC, Spawn, "Good day, friend. Let me know if you take up the craft of adorning, I may have some work for you if so.") +end + +function AdornChat1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "Thank you.") + StartConversation(conversation, NPC, Spawn, "Visit the adorning trainer in the city of Kelethin, or on the docks of Butcherblock Mountains, if you wish to learn this skill. While you're there, you can also learn tinkering if you are interested.") +end +--[[ +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_3_1052.mp3", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Thank you, I'll keep that in mind.", "dlg_1_1") + AddConversationOption(conversation, "How would I learn adorning?") + StartConversation(conversation, NPC, Spawn, "Good day, friend. Let me know if you take up the craft of adorning, I may have some work for you if so.") + if convo==2 then + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_2_1052.mp3", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Thank you, I'll keep that in mind.", "dlg_2_1") + AddConversationOption(conversation, "How would I learn adorning?") + StartConversation(conversation, NPC, Spawn, "Good day, friend. Let me know if you take up the craft of adorning, I may have some work for you if so.") + end + + if convo==5 then + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_3_1052.mp3", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Thank you, I'll keep that in mind.", "dlg_5_1") + AddConversationOption(conversation, "How would I learn adorning?") + StartConversation(conversation, NPC, Spawn, "Good day, friend. Let me know if you take up the craft of adorning, I may have some work for you if so.") + end + + if convo==6 then + PlayFlavor(NPC, "londiar_inygad/tradeskill/live_quests/adorning_daily_005.mp3", "", "", 2903671869, 119224492, Spawn) + AddConversationOption(conversation, "Not yet, I'll be back with them soon.", "dlg_6_1") + AddConversationOption(conversation, "Yes I have, here you go.") + StartConversation(conversation, NPC, Spawn, "Hello again. Have you finished those adornments?") + end + + if convo==7 then + PlayFlavor(NPC, "londiar_inygad/tradeskill/live_quests/adorning_daily_005.mp3", "", "", 2903671869, 119224492, Spawn) + AddConversationOption(conversation, "Not yet, I'll be back with them soon.", "dlg_7_1") + AddConversationOption(conversation, "Yes I have, here you go.") + StartConversation(conversation, NPC, Spawn, "Hello again. Have you finished those adornments?") + end + + if convo==9 then + PlayFlavor(NPC, "londiar_inygad/tradeskill/live_quests/adorning_daily_007.mp3", "", "", 2470727427, 4215990095, Spawn) + AddConversationOption(conversation, "Very well.", "dlg_9_1") + StartConversation(conversation, NPC, Spawn, "Unfortunately, I'm out of components now, so you'll have to come back tomorrow if you want to help further.") + end + +end + +function dlg_1_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Thank you.") + StartConversation(conversation, NPC, Spawn, "Visit the adorning trainer in the city of Kelethin, or on the docks of Butcherblock Mountains, if you wish to learn this skill. While you're there, you can also learn tinkering if you are interested.") +end + +function dlg_2_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Thank you.") + StartConversation(conversation, NPC, Spawn, "Visit the adorning trainer in the city of Kelethin, or on the docks of Butcherblock Mountains, if you wish to learn this skill. While you're there, you can also learn tinkering if you are interested.") +end + +function dlg_5_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Thank you.") + StartConversation(conversation, NPC, Spawn, "Visit the adorning trainer in the city of Kelethin, or on the docks of Butcherblock Mountains, if you wish to learn this skill. While you're there, you can also learn tinkering if you are interested.") +end + +function dlg_5_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "I'll get to work now.", "dlg_5_2") + AddConversationOption(conversation, "Sorry, I've changed my mind.") + StartConversation(conversation, NPC, Spawn, "Thank you, we are always in need of more. Please take this recipe and these components, and get to work. You will need to supply your own fuel, however, and the cost of this will not be reimbursed.") +end + +function dlg_5_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "I will.", "dlg_5_3") + StartConversation(conversation, NPC, Spawn, "Thank you, bring them back to me when you're done.") +end + +function dlg_7_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "londiar_inygad/tradeskill/live_quests/adorning_daily_006.mp3", "", "", 287110901, 245711122, Spawn) + AddConversationOption(conversation, "You're welcome.") + StartConversation(conversation, NPC, Spawn, "Thank you! Feel free to stop by tomorrow if you are looking for more work, I might need more assistance by then.") +end +--]] \ No newline at end of file diff --git a/server/SpawnScripts/FrostfangSea/MikhailEiskroft.lua b/server/SpawnScripts/FrostfangSea/MikhailEiskroft.lua new file mode 100644 index 000000000..cbda49654 --- /dev/null +++ b/server/SpawnScripts/FrostfangSea/MikhailEiskroft.lua @@ -0,0 +1,23 @@ +--[[ + Script Name : SpawnScripts/FrostfangSea/MikhailEiskroft.lua + Script Purpose : Sana Strongbellow + Script Author : theFoof + Script Date : 2013.09.26 + Script Notes : +--]] + +function spawn(NPC) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "hello", 0, 0, Spawn) + AddConversationOption(conversation, "I'll work towards that end then.") + StartConversation(conversation, NPC, Spawn, "I'm sorry, until you have chosen a specialty in your craft I do not have any work orders for you. Come see me when you're more practiced in your trade.") +end \ No newline at end of file diff --git a/server/SpawnScripts/FrostfangSea/MistressThora.lua b/server/SpawnScripts/FrostfangSea/MistressThora.lua new file mode 100644 index 000000000..89dfa5d8d --- /dev/null +++ b/server/SpawnScripts/FrostfangSea/MistressThora.lua @@ -0,0 +1,20 @@ +--[[ + Script Name : SpawnScripts/FrostfangSea/MistressThora.lua + Script Purpose : Mistress Thora + Script Author : theFoof + Script Date : 2013.09.16 + Script Notes : +--]] + +function spawn(NPC) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + PlayFlavor(NPC, "", "I deal in any artifacts you or your guild might be interested in. Let's take a look at what you have.", "nod", 1689589577, 4560189, Spawn) +end + diff --git a/server/SpawnScripts/FrostfangSea/MoragMcMarrin.lua b/server/SpawnScripts/FrostfangSea/MoragMcMarrin.lua new file mode 100644 index 000000000..292a01584 --- /dev/null +++ b/server/SpawnScripts/FrostfangSea/MoragMcMarrin.lua @@ -0,0 +1,33 @@ +--[[ + Script Name : SpawnScripts/FrostfangSea/MoragMcMarrin.lua + Script Purpose : Morag McMarrin + Script Author : theFoof + Script Date : 2013.09.26 + Script Notes : +--]] + +require"SpawnScripts/FrostfangSea/halas_proximity_cheer" + +function spawn(NPC) + SetPlayerProximityFunction(NPC, 10, "ProxCheer") +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + local choice = math.random(1,3) + + if choice == 1 then + PlayFlavor(NPC, "", "", "nod", 1689589577, 4560189, Spawn) + elseif choice == 2 then + PlayFlavor(NPC, "", "I'll be happy to supply all your fuel needs.", "happy", 1689589577, 4560189, Spawn) + elseif choice == 3 then + PlayFlavor(NPC, "", "Please let me know if there's anything I can supply for you.", "nod", 1689589577, 4560189, Spawn) + else + PlayFlavor(NPC, "", "", "hello", 0, 0, Spawn) + end +end + diff --git a/server/SpawnScripts/FrostfangSea/NarielAldaeme.lua b/server/SpawnScripts/FrostfangSea/NarielAldaeme.lua new file mode 100644 index 000000000..fb9580298 --- /dev/null +++ b/server/SpawnScripts/FrostfangSea/NarielAldaeme.lua @@ -0,0 +1,19 @@ +--[[ + Script Name : SpawnScripts/FrostfangSea/NarielAldaeme.lua + Script Purpose : Nariel Aldaeme + Script Author : theFoof + Script Date : 2013.09.24 + Script Notes : +--]] + +function spawn(NPC) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + PlayFlavor(NPC, "", "The blessings of Tunare can be felt all around us, even in this cold land!", "thanks", 1689589577, 4560189, Spawn) +end \ No newline at end of file diff --git a/server/SpawnScripts/FrostfangSea/NohrFlamel.lua b/server/SpawnScripts/FrostfangSea/NohrFlamel.lua new file mode 100644 index 000000000..cbcf2eb01 --- /dev/null +++ b/server/SpawnScripts/FrostfangSea/NohrFlamel.lua @@ -0,0 +1,31 @@ +--[[ + Script Name : SpawnScripts/FrostfangSea/NohrFlamel.lua + Script Purpose : Nohr Flamel + Script Author : theFoof + Script Date : 2013.09.26 + Script Notes : +--]] + +require"SpawnScripts/FrostfangSea/halas_proximity_cheer" + +function spawn(NPC) + SetPlayerProximityFunction(NPC, 10, "ProxCheer") +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + local choice = math.random(1,2) + + if choice == 1 then + PlayFlavor(NPC, "", "Please let me know if there's anything I can supply for you.", "nod", 1689589577, 4560189, Spawn) + elseif choice == 2 then + PlayFlavor(NPC, "", "I can supply your alchemy requirements, even those considered elusive.", "happy", 1689589577, 4560189, Spawn) + else + PlayFlavor(NPC, "", "Welcome to Ravens' Roost.", "hello", 0, 0, Spawn) + end +end + diff --git a/server/SpawnScripts/FrostfangSea/NorfrydBrisbane.lua b/server/SpawnScripts/FrostfangSea/NorfrydBrisbane.lua new file mode 100644 index 000000000..5cd6ba324 --- /dev/null +++ b/server/SpawnScripts/FrostfangSea/NorfrydBrisbane.lua @@ -0,0 +1,36 @@ +--[[ + Script Name : SpawnScripts/FrostfangSea/NorfrydBrisbane.lua + Script Purpose : Norfryd Brisbane + Script Author : John Adams + Script Date : 2013.03.16 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +function spawn(NPC) + SetPlayerProximityFunction(NPC, 10, "InRange", "LeaveRange") +end + +function respawn(NPC) + spawn(NPC) +end + +function InRange(NPC, Spawn) +end + +function LeaveRange(NPC, Spawn) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + + local choice = math.random(1,2) + + if choice == 1 then + PlayFlavor(NPC, "", "You'll be able to access this bank account all across Norrath!", "nod", 1689589577, 4560189, Spawn) + elseif choice == 2 then + PlayFlavor(NPC, "", "Your items and coin will be safe with us!", "", 1689589577, 4560189, Spawn) + else + end + +end + diff --git a/server/SpawnScripts/FrostfangSea/OdhildGoblinblade.lua b/server/SpawnScripts/FrostfangSea/OdhildGoblinblade.lua new file mode 100644 index 000000000..24af29126 --- /dev/null +++ b/server/SpawnScripts/FrostfangSea/OdhildGoblinblade.lua @@ -0,0 +1,61 @@ +--[[ + Script Name : SpawnScripts/FrostfangSea/OdhildGoblinblade.lua + Script Purpose : swashbuckler trainer + Script Author : theFoof + Script Date : 2013.9.24 + Script Notes : +--]] + +local SWASHBUCKLER = 33 + +function spawn(NPC) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + if GetClass(Spawn) == SWASHBUCKLER then + conversation = CreateConversation() + PlayFlavor(NPC, "", "", "hello", 0, 0, Spawn) + AddConversationOption(conversation, "What advice do you have for a fellow swashbuckler?", "SwashChat1") + AddConversationOption(conversation, "It certainly is. Good bye.") + StartConversation(conversation, NPC, Spawn, "Welcome, fellow swashbuckler! It is such a pleasure to meet another dashing rogue within this city.") + else + PlayFlavor(NPC, "", "Well, well, what have we here?", "hello", 0, 0, Spawn) + end +end + +function SwashChat1(NPC, Spawn) + conversation = CreateConversation() + FaceTarget(NPC, Spawn) + + AddConversationOption(conversation, "That's useful to know!", "SwashChat2") + StartConversation(conversation, NPC, Spawn, "If you find items that add to your agility or stamina, then take them! Agility affects both your ability to inflict damage and avoid taking damage from others. Your stamina affects your health. This is crucial.") +end + +function SwashChat2(NPC, Spawn) + conversation = CreateConversation() + FaceTarget(NPC, Spawn) + + AddConversationOption(conversation, "That's interesting.", "SwashChat3") + StartConversation(conversation, NPC, Spawn, "We have talents in dealing with damage but we are particularly skilled at weakening our opponent's attacks.") +end + +function SwashChat3(NPC, Spawn) + conversation = CreateConversation() + FaceTarget(NPC, Spawn) + + AddConversationOption(conversation, "I bet it is!", "SwashChat4") + StartConversation(conversation, NPC, Spawn, "Keep in mind that some of our attacks are positional, meaning you need to be behind or beside an opponent for that attack to work. But thankfully, we have enough devastating attacks that are straightforward and can be used from any position. This is very useful when dealing with multiple opponents!") +end + +function SwashChat4(NPC, Spawn) + conversation = CreateConversation() + FaceTarget(NPC, Spawn) + + AddConversationOption(conversation, "Thank you for the advice.") + StartConversation(conversation, NPC, Spawn, "Focus on improving your own skills for your opponent is sure to be defeated in the face of your growing prowess.") +end \ No newline at end of file diff --git a/server/SpawnScripts/FrostfangSea/OdonScourgeson.lua b/server/SpawnScripts/FrostfangSea/OdonScourgeson.lua new file mode 100644 index 000000000..9bf8fdf59 --- /dev/null +++ b/server/SpawnScripts/FrostfangSea/OdonScourgeson.lua @@ -0,0 +1,402 @@ +--[[ + Script Name : SpawnScripts/FrostfangSea/OdonScourgeson.lua + Script Purpose : Odon Scourgeson + Script Author : theFoof + Script Date : 2013.06.16 + Script Notes : +--]] + +local NothingWaste = 56 + +local WhirlingTime = 70 + +local HighlyMaterials = 74 + +local CampsideSpores = 75 + +local BelowWaves = 59 + +local RyGorrTaking = 76 + +local WatchBelow = 77 + +local RyGorrOperations = 60 + +function spawn(NPC) + ProvidesQuest(NPC, WhirlingTime) + ProvidesQuest(NPC, HighlyMaterials) + ProvidesQuest(NPC, CampsideSpores) + ProvidesQuest(NPC, RyGorrTaking) + ProvidesQuest(NPC, WatchBelow) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + if HasCompletedQuest(Spawn, NothingWaste) and not HasCompletedQuest(Spawn, WhirlingTime) and not HasQuest(Spawn, WhirlingTime) then + PlayFlavor(NPC, "odon_scourgeson/halas/cragged_spine/odon_scourgeson_001.mp3", "", "", 1144750617, 3119311088, Spawn) + AddConversationOption(conversation, "Well said, child of Marr!", "Quest1Chat_1") + AddConversationOption(conversation, "For the right cause.", "Quest1Chat_5") + AddConversationOption(conversation, "I hope the Ry'Gorr think so!", "Quest1Chat_6") + AddConversationOption(conversation, "I would prefer another day.") + StartConversation(conversation, NPC, Spawn, "It's a good day to die!") + elseif GetQuestStep(Spawn, WhirlingTime) == 1 and not HasItem(Spawn, 6556) then + PlayFlavor(NPC, "", "It's an awfully big challenge to apply the Draught of Whirling ice if you don't have it with you. Now be more careful with this vial of the dram!", "laugh", 0, 0, Spawn) + SummonItem(Spawn, 6556) + elseif GetQuestStep(Spawn, WhirlingTime) == 1 and HasItem(Spawn, 6556) then + PlayFlavor(NPC, "", "Be sure to apply the Draught of Whirling Ice at the locations on the beach marked by a glowing green arrow shaft.", "agree", 0, 0, Spawn) + elseif GetQuestStep(Spawn, WhirlingTime) == 2 then + PlayFlavor(NPC, "odon_scourgeson/halas/cragged_spine/odon_scourgeson_012.mp3", "", "", 3270179329, 857883489, Spawn) + AddConversationOption(conversation, "Yes, the confused orcs were easy pickings.", "Quest1Chat_7") + StartConversation(conversation, NPC, Spawn, "How did the Draught of Whirling Ice fare, " .. GetName(Spawn) .. "? Did it work as we had hoped?") + elseif HasCompletedQuest(Spawn, WhirlingTime) and not HasCompletedQuest(Spawn, HighlyMaterials) and not HasQuest(Spawn, HighlyMaterials) then + Quest2Chat_1(NPC, Spawn) + elseif GetQuestStep(Spawn, HighlyMaterials) == 3 then + PlayFlavor(NPC, "odon_scourgeson/halas/cragged_spine/odon_scourgeson_017.mp3", "", "", 1752904205, 2236174308, Spawn) + AddConversationOption(conversation, "You were right. There was a Ry'Gorr encampment over there.", "Quest2Chat_3") + StartConversation(conversation, NPC, Spawn, "What did you find on Jagged Daggers, " .. GetName(Spawn) .. "?") + elseif HasCompletedQuest(Spawn, HighlyMaterials) and not HasCompletedQuest(Spawn, CampsideSpores) and not HasQuest(Spawn, CampsideSpores) then + PlayFlavor(NPC, "odon_scourgeson/halas/cragged_spine/odon_scourgeson_019.mp3", "", "", 1424971577, 1250350308, Spawn) + AddConversationOption(conversation, "He sent me to hunt the Ry'Gorr on Jagged Daggers isle.", "Quest3Chat_1") + AddConversationOption(conversation, "I don't have time to talk right now.") + StartConversation(conversation, NPC, Spawn, "What did the mighty coldain want with you, " .. GetName(Spawn) .. "?") + elseif GetQuestStep(Spawn, CampsideSpores) == 1 then + PlayFlavor(NPC, "", "Be sure to spread the crustose spores on any Ry'Gorr provisions that you find on the iceberg floating nearby.", "nod", 0, 0, Spawn) + elseif GetQuestStep(Spawn, CampsideSpores) == 2 then + PlayFlavor(NPC, "odon_scourgeson/halas/cragged_spine/odon_scourgeson_029.mp3", "", "", 2107393600, 3625608222, Spawn) + AddConversationOption(conversation, "They did!", "Quest3Chat_9") + StartConversation(conversation, NPC, Spawn, "Did the spores spread all over their provisions, " .. GetName(Spawn) .. "?") + elseif HasCompletedQuest(Spawn, CampsideSpores) and HasCompletedQuest(Spawn, BelowWaves) and not HasCompletedQuest(Spawn, RyGorrTaking) and not HasQuest(Spawn, RyGorrTaking) then + PlayFlavor(NPC, "odon_scourgeson/halas/cragged_spine/odon_scourgeson_031.mp3", "", "", 2821703573, 187787464, Spawn) + AddConversationOption(conversation, "I was exploring the caves below Erollis.", "Quest4Chat_1") + AddConversationOption(conversation, "Killing orcs, of course!", "Quest4Chat_4") + AddConversationOption(conversation, "That's my secret. Good day.") + StartConversation(conversation, NPC, Spawn, "Where have you been, " .. GetName(Spawn) .. "?") + elseif GetQuestStep(Spawn, RyGorrTaking) == 1 then + PlayFlavor(NPC, "", "Good luck stealing the imbued digging tools that the Ry'Gorr are using to dig their nefarious tunnels below Erollis.", "hello", 0, 0, Spawn) + elseif GetQuestStep(Spawn, RyGorrTaking) == 2 then + AddConversationOption(conversation, "I did, along with their explosive barrels.", "Quest4Chat_5") + StartConversation(conversation, NPC, Spawn, "You found the magically imbued tools that the Ry'Gorr were using to dig with, didn't you, " .. GetName(Spawn) .. "?") + elseif HasCompletedQuest(Spawn, RyGorrTaking) and HasCompletedQuest(Spawn, RyGorrOperations) and not HasQuest(Spawn, WatchBelow) and not HasCompletedQuest(Spawn, WatchBelow) then + AddConversationOption(conversation, "It is true.", "Quest5Chat_1") + AddConversationOption(conversation, "No. You're as crazy as Knut.") + StartConversation(conversation, NPC, Spawn, "Is it true, " .. GetName(Spawn) .. "? Did you really find some crazed crystal men deeper within this chunk of floating rock?") + elseif GetQuestStep(Spawn, WatchBelow) == 1 then + PlayFlavor(NPC, "", "Good luck harevesting the glimmering velium from within the Velinoid Catacombs.", "hello", 0, 0, Spawn) + elseif GetQuestStep(Spawn, WatchBelow) == 2 then + PlayFlavor(NPC, "odon_scourgeson/halas/cragged_spine/odon_scourgeson_043.mp3", "", "", 4171793069, 3413255044, Spawn) + AddConversationOption(conversation, "I was, Odon.", "Quest5Chat_4") + StartConversation(conversation, NPC, Spawn, "Were you able to harvest any glimmering velium from within the Velinoid Catacombs?") + elseif HasCompletedQuest(Spawn, WatchBelow) and not HasQuest(Spawn, WatchBelow) then + Quest5Chat_5(NPC, Spawn) + else + PlayFlavor(NPC, "", "Go see Thirin, I think he could use your help.", "point", 0, 0, Spawn) + end +end + +function Quest1Chat_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "odon_scourgeson/halas/cragged_spine/odon_scourgeson_004.mp3", "", "", 1709766346, 172975097, Spawn) + AddConversationOption(conversation, "So, let's not be the ones to fall.", "Quest1Chat_2") + AddConversationOption(conversation, "If you say so. I have to go now.") + StartConversation(conversation, NPC, Spawn, "But the longer we live, the more battles we win, and the more honor we bring our ancestors and the gods.") +end + +function Quest1Chat_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "odon_scourgeson/halas/cragged_spine/odon_scourgeson_008.mp3", "", "", 2616918524, 807359858, Spawn) + AddConversationOption(conversation, "Do you have any specific plans?", "Quest1Chat_3") + StartConversation(conversation, NPC, Spawn, "Aye! Let's send these Ry'Gorr back to the vile pits of putrescence they crawled out of!") +end + +function Quest1Chat_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "odon_scourgeson/halas/cragged_spine/odon_scourgeson_009.mp3", "", "", 3949479903, 2077309090, Spawn) + AddConversationOption(conversation, "How will they help?", "Quest1Chat_4") + StartConversation(conversation, NPC, Spawn, "That I do, " .. GetName(Spawn) .. "! I am quite the accomplished spell weaver and potion maker. And I have a draught that can create whirlstorms of ice and fog.") +end + +function Quest1Chat_4(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "odon_scourgeson/halas/cragged_spine/odon_scourgeson_010.mp3", "", "", 2575484340, 3344993647, Spawn) + AddConversationOption(conversation, "Oh, that sounds great!", "OfferWhirlingTime") + AddConversationOption(conversation, "I am not going towards that beach! No way.") + StartConversation(conversation, NPC, Spawn, "You will release them at specific spots upon the nearby beach front, where the orcs are attacking. Within the fog and confusion our forces will have the upper hand!") +end + +function Quest1Chat_5(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "odon_scourgeson/halas/cragged_spine/odon_scourgeson_005.mp3", "", "", 292963711, 1258540494, Spawn) + AddConversationOption(conversation, "On that, we agree.", "Quest1Chat_2") + AddConversationOption(conversation, "If you say so. I have to go now.") + StartConversation(conversation, NPC, Spawn, "There is no cause more right than keeping our budding city safe from destruction and chaos.") +end + +function Quest1Chat_6(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "odon_scourgeson/halas/cragged_spine/odon_scourgeson_006.mp3", "", "", 3024969642, 2041615693, Spawn) + AddConversationOption(conversation, "On that, we agree.", "Quest1Chat_2") + AddConversationOption(conversation, "If you say so. I have to go now.") + StartConversation(conversation, NPC, Spawn, "Har! Since they are going to be the ones dying! I like the way you think! We must keep our budding city safe from destruction and chaos.") +end + +function Quest1Chat_7(NPC, Spawn) + SetStepComplete(Spawn, WhirlingTime, 2) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "odon_scourgeson/halas/cragged_spine/odon_scourgeson_013.mp3", "", "", 2453186461, 1568033116, Spawn) + AddConversationOption(conversation, "Right!", "Quest2Chat_1") + StartConversation(conversation, NPC, Spawn, "Good! And let that be a lesson to you: Never underestimate the natural elements.") +end + +function Quest2Chat_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "odon_scourgeson/halas/cragged_spine/odon_scourgeson_014.mp3", "", "", 4142819387, 1980291564, Spawn) + AddConversationOption(conversation, "It stands to reason.", "Quest2Chat_2") + AddConversationOption(conversation, "Yes. But I don't care.") + StartConversation(conversation, NPC, Spawn, "This has me thinking, " .. GetName(Spawn) .. ". If we can use the natural elements of ice and fog as sight barriers then the orcs can too.") +end + +function Quest2Chat_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "odon_scourgeson/halas/cragged_spine/odon_scourgeson_015.mp3", "", "", 3627942377, 4151235206, Spawn) + AddConversationOption(conversation, "I can do that.", "OfferHighlyMaterials") + AddConversationOption(conversation, "I am not going over to that orc infested island. No way!") + StartConversation(conversation, NPC, Spawn, "They could be hiding an entire encampment on that fog-blanketed chunk of ice across the water. I am needed here to create healing draughts for the wounded, but if you can venture over to Jagged Daggers then we can find out if that is why they continue to bombard our defenses here.") +end + +function Quest2Chat_3(NPC, Spawn) + SetStepComplete(Spawn, HighlyMaterials, 3) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "odon_scourgeson/halas/cragged_spine/odon_scourgeson_018.mp3", "", "", 3574043874, 440859829, Spawn) + AddConversationOption(conversation, "Yes, I did.") + StartConversation(conversation, NPC, Spawn, "But you found it and destroyed it?") +end + +function Quest3Chat_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "odon_scourgeson/halas/cragged_spine/odon_scourgeson_020.mp3", "", "", 17932445, 4044568976, Spawn) + AddConversationOption(conversation, "What do you mean?", "Quest3Chat_2") + StartConversation(conversation, NPC, Spawn, "You are going to give old Orcbane a run for his title if you keep that up! Of course, that may not be a good thing if it makes you as crazy as it has made him.") +end + +function Quest3Chat_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "odon_scourgeson/halas/cragged_spine/odon_scourgeson_021.mp3", "", "", 748617031, 40578181, Spawn) + AddConversationOption(conversation, "What makes you say that?", "Quest3Chat_3") + AddConversationOption(conversation, "I didn't. Oh, wait... Yes, I did.", "Quest3Chat_2") + StartConversation(conversation, NPC, Spawn, "The man was a celebrated warrior - a clan hero! But the years and battles have taken their toll. One too many hits to that thick skull, if'n you ask me.") +end + +function Quest3Chat_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "odon_scourgeson/halas/cragged_spine/odon_scourgeson_022.mp3", "", "", 3153750446, 2946380071, Spawn) + AddConversationOption(conversation, "I agree.", "Quest3Chat_4") + AddConversationOption(conversation, "Well, let's just consider him eccentric.", "Quest3Chat_5") + StartConversation(conversation, NPC, Spawn, "He swears on Greyvax's grave that his bear pelt talks to him! That's evidence enough, friend.") +end + +function Quest3Chat_4(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "odon_scourgeson/halas/cragged_spine/odon_scourgeson_023.mp3", "", "", 1008524247, 3710738942, Spawn) + AddConversationOption(conversation, "Nutty Knut. I get it.", "Quest3Chat_6") + StartConversation(conversation, NPC, Spawn, "The man is drinking from a cracked stein, I tell you.") +end + +function Quest3Chat_5(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "odon_scourgeson/halas/cragged_spine/odon_scourgeson_024.mp3", "", "", 626779963, 1838376893, Spawn) + AddConversationOption(conversation, "Thank you.", "Quest3Chat_6") + StartConversation(conversation, NPC, Spawn, "You are suggesting we agree to disagree. I've never seen much reason for it, but since it is old Orcbane, I will.") +end + +function Quest3Chat_6(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "odon_scourgeson/halas/cragged_spine/odon_scourgeson_025.mp3", "", "", 2325720721, 1852675464, Spawn) + AddConversationOption(conversation, "Actually, yes. I saw several Ry'Gorr orcs amassing supplies.", "Quest3Chat_7") + StartConversation(conversation, NPC, Spawn, "Heh. So, did you find anything interesting on Jagged Daggers isle?") +end + +function Quest3Chat_7(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "odon_scourgeson/halas/cragged_spine/odon_scourgeson_026.mp3", "", "", 3614477806, 1870107129, Spawn) + AddConversationOption(conversation, "Right. I'm the one yapping like a hound.", "Quest3Chat_8") + AddConversationOption(conversation, "Excuse me?", "Quest3Chat_8") + StartConversation(conversation, NPC, Spawn, "You what?! " .. GetName(Spawn) .. ", you've got to learn to share the important information. Don't stand about yapping on like some excited hound when there is fighting to be had!") +end + +function Quest3Chat_8(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "odon_scourgeson/halas/cragged_spine/odon_scourgeson_027.mp3", "", "", 1143831396, 1034337351, Spawn) + AddConversationOption(conversation, "I can do that.", "OfferCampsideSpores") + AddConversationOption(conversation, "I have destroyed enough of their stuff, already. Good bye.") + StartConversation(conversation, NPC, Spawn, "I forgive you. Now, this is the perfect time to employ another form of natural element in our ongoing battle against the Ry'Gorr. We are going to destroy their provisions!") +end + +function Quest3Chat_9(NPC, Spawn) + SetStepComplete(Spawn, CampsideSpores, 2) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "odon_scourgeson/halas/cragged_spine/odon_scourgeson_030.mp3", "", "", 23529339, 1329281501, Spawn) + AddConversationOption(conversation, "Right.") + StartConversation(conversation, NPC, Spawn, "We learned about those little buggers the hard way, but at least we can use them for our own good.") +end + +function Quest4Chat_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "odon_scourgeson/halas/cragged_spine/odon_scourgeson_033.mp3", "", "", 3483970131, 1743071905, Spawn) + AddConversationOption(conversation, "Yes. And the Ry'Gorr have been making them bigger.", "Quest4Chat_2") + StartConversation(conversation, NPC, Spawn, "There are caves under this floating island?") +end + +function Quest4Chat_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "odon_scourgeson/halas/cragged_spine/odon_scourgeson_034.mp3", "", "", 491076810, 2688982472, Spawn) + AddConversationOption(conversation, "Apparently, they are.", "Quest4Chat_3") + AddConversationOption(conversation, "Me either.", "Quest4Chat_3") + StartConversation(conversation, NPC, Spawn, "Dear Marr! They have been attempting to hold our attention on top with skirmishes while all along they have been digging tunnels from below?! I never thought them so sneaky.") +end + +function Quest4Chat_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "odon_scourgeson/halas/cragged_spine/odon_scourgeson_035.mp3", "", "", 3997881517, 11859709, Spawn) + AddConversationOption(conversation, "I sure can, Odon.", "OfferRyGorrTaking") + AddConversationOption(conversation, "I am not willing to go back down there. No way!") + StartConversation(conversation, NPC, Spawn, "They must be using special tools, some magically imbued ones, to dig through the velium and ice that make this floating rock. Will you enter the caves and steal any such tools that you find? That will slow their progress while others can go in and hunt them.") +end + +function Quest4Chat_4(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "odon_scourgeson/halas/cragged_spine/odon_scourgeson_032.mp3", "", "", 775129944, 2032173914, Spawn) + AddConversationOption(conversation, "In the caves below Erollis.", "Quest4Chat_1") + StartConversation(conversation, NPC, Spawn, "I would expect nothing less! Tell me, where were you slaying the beasts?") +end + +function Quest4Chat_5(NPC, Spawn) + SetStepComplete(Spawn, RyGorrTaking, 2) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "odon_scourgeson/halas/cragged_spine/odon_scourgeson_037.mp3", "", "", 3945219846, 2009013253, Spawn) + AddConversationOption(conversation, "Thank you.") + AddConversationOption(conversation, "I'm beginning to think so, too.") + StartConversation(conversation, NPC, Spawn, "That is excellent, my friend! I am more certain today that your arrival here was not just a roll of luck, but predestined by the gods.") +end + +function Quest5Chat_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "odon_scourgeson/halas/cragged_spine/odon_scourgeson_039.mp3", "", "", 1313157093, 2613440725, Spawn) + AddConversationOption(conversation, "I don't know, but they looked like it.", "Quest5Chat_2") + StartConversation(conversation, NPC, Spawn, "They are made of velium?") +end + +function Quest5Chat_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "odon_scourgeson/halas/cragged_spine/odon_scourgeson_040.mp3", "", "", 1326282045, 1993468470, Spawn) + AddConversationOption(conversation, "Oh, what are you thinking?", "Quest5Chat_3") + AddConversationOption(conversation, "That would be nice.", "Quest5Chat_3") + StartConversation(conversation, NPC, Spawn, "Amazing. If it isn't one threat to our struggling city, it's another! But just maybe there is something to be gained here.") +end + +function Quest5Chat_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "odon_scourgeson/halas/cragged_spine/odon_scourgeson_041.mp3", "", "", 513600053, 106599260, Spawn) + AddConversationOption(conversation, "I'll harvest some from within the Velinoid Catacombs for you.", "OfferWatchBelow") + AddConversationOption(conversation, "It's too dangerous. Count me out!") + StartConversation(conversation, NPC, Spawn, "Velium is a prized element, " .. GetName(Spawn) .. ". I am willing to bet that there's a hefty copper to be made from velium harvested at such a location. Velium steeped in such potent arcanum must be even more desirable!") +end + +function Quest5Chat_4(NPC, Spawn) + SetStepComplete(Spawn, WatchBelow, 2) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "odon_scourgeson/halas/cragged_spine/odon_scourgeson_044.mp3", "", "", 4176364117, 3019596787, Spawn) + AddConversationOption(conversation, "You're welcome.", "Quest5Chat_5") + StartConversation(conversation, NPC, Spawn, "Ah! Look how it gleams, " .. GetName(Spawn) .. "! I am sure it will help to bankroll our operation here. Thank you.") +end + +function Quest5Chat_5(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "odon_scourgeson/halas/cragged_spine/odon_scourgeson_045.mp3", "", "", 653096289, 4240580228, Spawn) + AddConversationOption(conversation, "Sure, I am!", "OfferWatchBelow") + AddConversationOption(conversation, "No. I am not.") + StartConversation(conversation, NPC, Spawn, "Are you willing to return to the Velinoid Catacombs in order to collect us more glimmering velium, " .. GetName(Spawn) .. "?") +end + +function OfferWhirlingTime(NPC, Spawn) + OfferQuest(NPC, Spawn, WhirlingTime) +end + +function OfferHighlyMaterials(NPC, Spawn) + OfferQuest(NPC, Spawn, HighlyMaterials) +end + +function OfferCampsideSpores(NPC, Spawn) + OfferQuest(NPC, Spawn, CampsideSpores) +end + +function OfferRyGorrTaking(NPC, Spawn) + OfferQuest(NPC, Spawn, RyGorrTaking) +end + +function OfferWatchBelow(NPC, Spawn) + OfferQuest(NPC, Spawn, WatchBelow) +end \ No newline at end of file diff --git a/server/SpawnScripts/FrostfangSea/OlgaMacleod.lua b/server/SpawnScripts/FrostfangSea/OlgaMacleod.lua new file mode 100644 index 000000000..f3d82a2d3 --- /dev/null +++ b/server/SpawnScripts/FrostfangSea/OlgaMacleod.lua @@ -0,0 +1,102 @@ +--[[ + Script Name : SpawnScripts/FrostfangSea/OlgaMacleod.lua + Script Purpose : Olga Macleod + Script Author : theFoof + Script Date : 2013.09.01 + Script Notes : +--]] + +local FrozenChowder = 88 + +function spawn(NPC) + ProvidesQuest(NPC, FrozenChowder) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + if not HasCompletedQuest(Spawn, FrozenChowder) and not HasQuest(Spawn, FrozenChowder) then + PlayFlavor(NPC, "olga_macleod/halas/new_halas/olga_macleod/olga_macleod_001.mp3", "", "", 183975505, 4113739209, Spawn) + AddConversationOption(conversation, "I'm " .. GetName(Spawn) .. ", pleased to meet you.", "Quest1Chat_1") + StartConversation(conversation, NPC, Spawn, "I'm Olga MacLeod, and you are?") + elseif GetQuestStep(Spawn, FrozenChowder) == 1 or GetQuestStep(Spawn, FrozenChowder) == 2 then + AddConversationOption(conversation, "Where can I find the halasian reeds and the frozen pincers?", "Quest1Chat_4") + StartConversation(conversation, NPC, Spawn, "Did you collect the ingredients I asked for?") + elseif GetQuestStep(Spawn, FrozenChowder) == 3 then + AddConversationOption(conversation, "I did indeed.", "Quest1Chat_5") + StartConversation(conversation, NPC, Spawn, "Did you collect the ingredients I asked for?") + else + PlayFlavor(NPC, "", "Thanks for helping me with the chowder!", "hello", 0, 0, Spawn) + end +end + +function Quest1Chat_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "olga_macleod/halas/new_halas/olga_macleod/olga_macleod_003.mp3", "", "", 2540192341, 2605234909, Spawn) + AddConversationOption(conversation, "Can I get you something.", "Quest1Chat_2") + StartConversation(conversation, NPC, Spawn, "Aye there. I'm on break from working at The Stone Hammer. It's a pity there isn't anything to eat.") +end + +function Quest1Chat_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "olga_macleod/halas/new_halas/olga_macleod/olga_macleod_004.mp3", "", "", 902632382, 378214084, Spawn) + AddConversationOption(conversation, "Really?", "Quest1Chat_3") + StartConversation(conversation, NPC, Spawn, "No, the only thing that hits the spot on a day like this is my recipe for frozen pincer chowder. It's very delicious, I'm going to make it for the New Halas City Festival.") +end + +function Quest1Chat_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "olga_macleod/halas/new_halas/olga_macleod/olga_macleod_005.mp3", "", "", 2856769449, 2240854922, Spawn) + AddConversationOption(conversation, "I could gather them for you.", "OfferFrozenChowder") + AddConversationOption(conversation, "What a pity.") + StartConversation(conversation, NPC, Spawn, "Yes. I'd make it now, but I don't have time to go and gather the ingredients myself.") +end + +function Quest1Chat_4(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "Thanks again, sometimes I forget these things!") + StartConversation(conversation, NPC, Spawn, "The halasian reeds and the frozen pincers are down near the water's edge at the Erollis Dock, east of New Halas.") +end + +function Quest1Chat_5(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "Here you go.", "Quest1Chat_6") + StartConversation(conversation, NPC, Spawn, "Great, hand them over and I'll get to cooking!") +end + +function Quest1Chat_6(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "It smells delicious", "Quest1Chat_7") + StartConversation(conversation, NPC, Spawn, "Thank Marr this cooks up fast. I'll be able to have a bowl before I must get back to work.") +end + +function Quest1Chat_7(NPC, Spawn) + SetStepComplete(Spawn, FrozenChowder, 3) + AddSpawnAccess(GetSpawn(NPC, 4701842), Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, NPC, Spawn, "Thanks Olga!") + StartConversation(conversation, NPC, Spawn, "There! Go ahead, ladle yourself some chowder.") +end + +function OfferFrozenChowder(NPC, Spawn) + OfferQuest(NPC, Spawn, FrozenChowder) +end \ No newline at end of file diff --git a/server/SpawnScripts/FrostfangSea/OlioSaphatho.lua b/server/SpawnScripts/FrostfangSea/OlioSaphatho.lua new file mode 100644 index 000000000..5d93fbce3 --- /dev/null +++ b/server/SpawnScripts/FrostfangSea/OlioSaphatho.lua @@ -0,0 +1,53 @@ +--[[ + Script Name : SpawnScripts/FrostfangSea/OlioSaphatho.lua + Script Purpose : coercer trainer + Script Author : theFoof + Script Date : 2013.9.24 + Script Notes : +--]] + +local COERCER = 27 + +function spawn(NPC) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + if GetClass(Spawn) == COERCER then + conversation = CreateConversation() + PlayFlavor(NPC, "", "", "hello", 0, 0, Spawn) + AddConversationOption(conversation, "Do you have any advice for a fellow coercer?", "CoecChat1") + AddConversationOption(conversation, "It certainly is! Good day.") + StartConversation(conversation, NPC, Spawn, "I see you have chosen the path of a coercer. It is a challenging path, for sure.") + else + PlayFlavor(NPC, "", "Bending the will of your opponent means lending their strength to your own.", "hello", 0, 0, Spawn) + end +end + +function CoecChat1(NPC, Spawn) + conversation = CreateConversation() + FaceTarget(NPC, Spawn) + + AddConversationOption(conversation, "That's useful to know!", "CoecChat2") + StartConversation(conversation, NPC, Spawn, "If you find items that add to your intelligence or stamina, then take them! Intelligence affects your spell focus and increases the damage your spells can cause. Your stamina affects your health. This is crucial!") +end + +function CoecChat2(NPC, Spawn) + conversation = CreateConversation() + FaceTarget(NPC, Spawn) + + AddConversationOption(conversation, "That's interesting.", "CoecChat3") + StartConversation(conversation, NPC, Spawn, "Do not underestimate your ability to dominate the minds of your foes, charming them to carry out your will. There is no need to conjure a pet, when you can force the enemy to fight amongst themselves!") +end + +function CoecChat3(NPC, Spawn) + conversation = CreateConversation() + FaceTarget(NPC, Spawn) + + AddConversationOption(conversation, "Thank you for the advice.") + StartConversation(conversation, NPC, Spawn, "But do not rely solely on your charmed slaves. You must also hone your offensive and defensive spells! You can inflict magical and mental damage upon your targets through spells, while defending yourself by mesmerizing or stunning them.") +end \ No newline at end of file diff --git a/server/SpawnScripts/FrostfangSea/OrdinSleetfoot.lua b/server/SpawnScripts/FrostfangSea/OrdinSleetfoot.lua new file mode 100644 index 000000000..1d7f94971 --- /dev/null +++ b/server/SpawnScripts/FrostfangSea/OrdinSleetfoot.lua @@ -0,0 +1,60 @@ +--[[ + Script Name : SpawnScripts/FrostfangSea/OrdinSleetfoot.lua + Script Purpose : Ordin Sleetfoot + Script Author : theFoof + Script Date : 2013.06.11 + Script Notes : +--]] + +local BelowWaves = 59 + +local GoodDistraction = 61 + +function spawn(NPC) + AddSpawnAccess(NPC, NPC) + SetPlayerProximityFunction(NPC, 50, "SpawnAccess", "SpawnAccess") +end + +function respawn(NPC) + spawn(NPC) +end + +function SpawnAccess(NPC, Spawn) + if HasQuest(Spawn, GoodDistraction) then + if GetQuestStep(Spawn, GoodDistraction) == 1 then + AddSpawnAccess(NPC, Spawn) + end + elseif HasCompletedQuest(Spawn, GoodDistraction) then + + elseif HasCompletedQuest(Spawn, BelowWaves) then + AddSpawnAccess(NPC, Spawn) + end +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + if GetQuestStep(Spawn, GoodDistraction) == 1 then + PlayFlavor(NPC, "ordin_sleetfoot/halas/cragged_spine/ordin_sleetfoot001.mp3", "", "", 346156027, 2620260101, Spawn) + AddConversationOption(conversation, "I am. Slip into the shadows. I'll ensure no one realizes you're there.", "Quest1Chat_1") + AddConversationOption(conversation, "No, I am not ready yet.") + StartConversation(conversation, NPC, Spawn, "So yer the one who's to be the distraction so I can slip past these creatures, are ye? Well normally I don't trust strangers, but if Thirin trusts you, then I will as well. Are ye ready to go?") + else + PlayFlavor(NPC, "", "Shh! Quiet. I'm trying to watch for patterns in the orcs' patrols.", "", 0, 0, Spawn) + end +end + +function Quest1Chat_1(NPC, Spawn) + AddTimer(NPC, 2000, "Step1", 1, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "ordin_sleetfoot/halas/cragged_spine/ordin_sleetfoot002.mp3", "", "", 4202537039, 1639978352, Spawn) + AddConversationOption(conversation, "Be safe.") + StartConversation(conversation, NPC, Spawn, "Good, I'll meet you in the Velinoids' cave. Don't worry about finding me, you'll see me. Just keep on heading further into the cave.") +end + +function Step1(NPC, Spawn) + SetStepComplete(Spawn, GoodDistraction, 1) + RemoveSpawnAccess(NPC, Spawn) +end diff --git a/server/SpawnScripts/FrostfangSea/OrdinSleetfoot_(scouting1).lua b/server/SpawnScripts/FrostfangSea/OrdinSleetfoot_(scouting1).lua new file mode 100644 index 000000000..5e8b123bc --- /dev/null +++ b/server/SpawnScripts/FrostfangSea/OrdinSleetfoot_(scouting1).lua @@ -0,0 +1,53 @@ +--[[ + Script Name : SpawnScripts/FrostfangSea/OrdinSleetfoot_(scouting1).lua + Script Purpose : Ordin Sleetfoot + Script Author : theFoof + Script Date : 2013.06.11 + Script Notes : +--]] + +local GoodDistraction = 61 + +function spawn(NPC) + AddSpawnAccess(NPC, NPC) + SetPlayerProximityFunction(NPC, 15, "Ambush", "Ambush") +end + +function respawn(NPC) + spawn(NPC) +end + +function Ambush(NPC, Spawn) + if HasQuest(Spawn, GoodDistraction) then + if GetQuestStep(Spawn, GoodDistraction) == 2 then + AddSpawnAccess(NPC, Spawn) + local mob1 = SpawnByLocationID(GetZone(Spawn), 572712) + local mob2 = SpawnByLocationID(GetZone(Spawn), 34004) + SetTempVariable(mob1, "linked", mob2) + SetTempVariable(mob2, "linked", mob1) + Attack(mob1, Spawn) + Attack(mob2, Spawn) + elseif GetQuestStep(Spawn, GoodDistraction) == 3 then + AddSpawnAccess(NPC, Spawn) + end + end +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + if GetQuestStep(Spawn, GoodDistraction) == 2 then + PlayFlavor(NPC, "", "Help me, please!", "", 0, 0, Spawn) + elseif GetQuestStep(Spawn, GoodDistraction) == 3 then + AddTimer(NPC, 2000, "HideSpawn", 1, Spawn) + PlayFlavor(NPC, "ordin_sleetfoot/halas/cragged_spine/ordin_sleetfoot_one001.mp3", "", "", 678640011, 1694488257, Spawn) + AddConversationOption(conversation, "Be more careful next time.") + AddConversationOption(conversation, "I will protect you no matter what.") + StartConversation(conversation, NPC, Spawn, "Thanks for the back up there, I thought this was a good spot to hide. Well, shall we continue on? I'll meet you further into the cavern. Keep up the good work, and I'll be able to scout around undetected.") + end +end + +function HideSpawn(NPC, Spawn) + SetStepComplete(Spawn, GoodDistraction, 3) + RemoveSpawnAccess(NPC, Spawn) +end \ No newline at end of file diff --git a/server/SpawnScripts/FrostfangSea/OrdinSleetfoot_(scouting2).lua b/server/SpawnScripts/FrostfangSea/OrdinSleetfoot_(scouting2).lua new file mode 100644 index 000000000..2e7c12019 --- /dev/null +++ b/server/SpawnScripts/FrostfangSea/OrdinSleetfoot_(scouting2).lua @@ -0,0 +1,61 @@ +--[[ + Script Name : SpawnScripts/FrostfangSea/OrdinSleetfoot_(scouting2).lua + Script Purpose : Ordin Sleetfoot + Script Author : theFoof + Script Date : 2013.06.11 + Script Notes : +--]] + +local GoodDistraction = 61 + +function spawn(NPC) + AddSpawnAccess(NPC, NPC) + SetPlayerProximityFunction(NPC, 15, "Ambush", "Ambush") +end + +function respawn(NPC) + spawn(NPC) +end + +function Ambush(NPC, Spawn) + if HasQuest(Spawn, GoodDistraction) then + if GetQuestStep(Spawn, GoodDistraction) == 4 then + AddSpawnAccess(NPC, Spawn) + local mob1 = SpawnByLocationID(GetZone(Spawn), 572713) + local mob2 = SpawnByLocationID(GetZone(Spawn), 572714) + SetTempVariable(mob1, "linked", mob2) + SetTempVariable(mob2, "linked", mob1) + Attack(mob1, Spawn) + Attack(mob2, Spawn) + elseif GetQuestStep(Spawn, GoodDistraction) == 5 then + AddSpawnAccess(NPC, Spawn) + end + end +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + if GetQuestStep(Spawn, GoodDistraction) == 4 then + PlayFlavor(NPC, "", "Help me, please!", "", 0, 0, Spawn) + elseif GetQuestStep(Spawn, GoodDistraction) == 5 then + PlayFlavor(NPC, "ordin_sleetfoot/halas/cragged_spine/ordin_sleetfoot_two001.mp3", "", "", 70062741, 2568038023, Spawn) + AddConversationOption(conversation, "If you are done, we should head back. Thirin will want a report of what's in these caves.", "Quest1Chat_1") + StartConversation(conversation, NPC, Spawn, "Thank you again. Thirin is right, ye are dependable and I couldn't have done this without ye.") + end +end + +function Quest1Chat_1(NPC, Spawn) + AddTimer(NPC, 2000, "HideSpawn", 1, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "ordin_sleetfoot/halas/cragged_spine/ordin_sleetfoot_two002.mp3", "", "", 2823426244, 1105831845, Spawn) + AddConversationOption(conversation, "Very well. Good luck.") + StartConversation(conversation, NPC, Spawn, "Of course. Ye head back without me. I want to check out what's up ahead. I'll meet ye back with Thirin when I'm done here. ") +end + +function HideSpawn(NPC, Spawn) + SetStepComplete(Spawn, GoodDistraction, 5) + RemoveSpawnAccess(NPC, Spawn) +end \ No newline at end of file diff --git a/server/SpawnScripts/FrostfangSea/OrdinSleetfootsCorpse.lua b/server/SpawnScripts/FrostfangSea/OrdinSleetfootsCorpse.lua new file mode 100644 index 000000000..9e8e73dba --- /dev/null +++ b/server/SpawnScripts/FrostfangSea/OrdinSleetfootsCorpse.lua @@ -0,0 +1,20 @@ +--[[ + Script Name : SpawnScripts/FrostfangSea/OrdinSleetfootsCorpse.lua + Script Purpose : for the spawn "Ordin Sleetfoot's Corpse" + Script Author : theFoof + Script Date : 2013.6.13 + Script Notes : +--]] + +local SleetfootParty = 62 + +function spawn(NPC) + AddSpawnAccess(NPC, NPC) + SetPlayerProximityFunction(NPC, 50, "SpawnAccess", "SpawnAccess") +end + +function SpawnAccess(NPC, Spawn) + if HasQuest(Spawn, SleetfootParty) then + AddSpawnAccess(NPC, Spawn) + end +end \ No newline at end of file diff --git a/server/SpawnScripts/FrostfangSea/OreColdstein.lua b/server/SpawnScripts/FrostfangSea/OreColdstein.lua new file mode 100644 index 000000000..0a5d5556f --- /dev/null +++ b/server/SpawnScripts/FrostfangSea/OreColdstein.lua @@ -0,0 +1,65 @@ +--[[ + Script Name : SpawnScripts/FrostfangSea/OreColdstein.lua + Script Purpose : movement path for ore coldstein + Script Author : theFoof + Script Date : 2013.9.26 + Script Notes : +--]] + +function spawn(NPC) + SetPlayerProximityFunction(NPC, 5, "InRange") + MovementLoopAddLocation(NPC, -163.4, 148.64, 7.9, 2, 0) + MovementLoopAddLocation(NPC, -166.86, 148.52, 33.36, 2, 0) + MovementLoopAddLocation(NPC, -141.97, 147.09, 45.75, 2, 0) + MovementLoopAddLocation(NPC, -111.31, 146.5, 17.37, 2, 0) + MovementLoopAddLocation(NPC, -84.11, 146.36, 25.1, 2, 0) + MovementLoopAddLocation(NPC, -77.74, 146.44, 19.53, 2, 0) + MovementLoopAddLocation(NPC, -91.21, 146.53, -2.92, 2, 0) + MovementLoopAddLocation(NPC, -67.78, 146.96, -21.08, 2, 0) + MovementLoopAddLocation(NPC, -17.86, 146.43, -20.44, 2, 0) + MovementLoopAddLocation(NPC, -6.99, 146.23, -50.87, 2, 0) + MovementLoopAddLocation(NPC, -76.01, 146.74, -69.34, 2, 0) + MovementLoopAddLocation(NPC, -76.38, 152.58, -103.59, 2, 0) + MovementLoopAddLocation(NPC, -58.53, 153.69, -121.51, 2, 0) + MovementLoopAddLocation(NPC, -39.7, 153.11, -115.98, 2, 3) + MovementLoopAddLocation(NPC, -46.91, 153.78, -132.33, 2, 0) + MovementLoopAddLocation(NPC, -63.83, 153.06, -144.21, 2, 0) + MovementLoopAddLocation(NPC, -109.03, 150.91, -145.99, 2, 0) + MovementLoopAddLocation(NPC, -109.43, 152.32, -121.26, 2, 0) + MovementLoopAddLocation(NPC, -76.97, 152.54, -102.32, 2, 0) + MovementLoopAddLocation(NPC, -80.46, 146.45, -75.78, 2, 0) + MovementLoopAddLocation(NPC, -109.02, 147.1, -63.48, 2, 0) + MovementLoopAddLocation(NPC, -94.14, 145.53, -33.29, 2, 0) + MovementLoopAddLocation(NPC, -109.89, 146.24, -12.32, 2, 0) + MovementLoopAddLocation(NPC, -129.26, 147.06, 3.77, 2, 0) + MovementLoopAddLocation(NPC, -142.7, 148.73, 4.83, 2, 0) +end + +function respawn(NPC) + spawn(NPC) +end + +function InRange(NPC) + if GetTempVariable(NPC, "chat_timer") == nil then + local choice = math.random(1,4) + if choice == 1 then + PlayFlavor(NPC, "", "Comin' through!", "nod", 1689589577, 4560189) + elseif choice == 2 then + PlayFlavor(NPC, "", "Coldain with a purpose!", "hello", 0, 0) + elseif choice == 3 then + PlayFlavor(NPC, "", "Juss passin' through!", "hello", 0, 0) + elseif choice == 4 then + PlayFlavor(NPC, "", "BURP! 'Scuse me!", "hello", 0, 0) + end + SetTempVariable(NPC, "chat_timer", "1") + AddTimer(NPC, 30000, "ChatTimer") + end +end + +function hailed(NPC) + PlayFlavor(NPC, "", "", "hello", 0, 0, Spawn) +end + +function ChatTimer(NPC) + SetTempVariable(NPC, "chat_timer", nil) +end \ No newline at end of file diff --git a/server/SpawnScripts/FrostfangSea/OricaDeadshot.lua b/server/SpawnScripts/FrostfangSea/OricaDeadshot.lua new file mode 100644 index 000000000..c3f51377f --- /dev/null +++ b/server/SpawnScripts/FrostfangSea/OricaDeadshot.lua @@ -0,0 +1,37 @@ +--[[ + Script Name : SpawnScripts/FrostfangSea/OricaDeadshot.lua + Script Purpose : Orica Deadshot + Script Author : theFoof + Script Date : 2013.06.01 + Script Notes : +--]] +local DemandSupplies = 45 + +function spawn(NPC) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + if HasQuest(Spawn, DemandSupplies) and GetQuestStep(Spawn, DemandSupplies) < 3 then + conversation = CreateConversation() + + PlayFlavor(NPC, "orica_deadshot/halas/great_shelf/orica_deadshot/orica_deadshot001.mp3", "", "", 3100922751, 3756102154, Spawn) + AddConversationOption(conversation, "Yes. Here you go.", "Chat") + AddConversationOption(conversation, "I must be going. Goodbye.") + StartConversation(conversation, NPC, Spawn, "Are those the supplies we've been waiting for?") + end +end + +function Chat(NPC, Spawn) + SetStepComplete(Spawn, DemandSupplies, 1) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "orica_deadshot/halas/great_shelf/orica_deadshot/orica_deadshot002.mp3", "", "", 17831415, 4241254330, Spawn) + AddConversationOption(conversation, "You're welcome.") + StartConversation(conversation, NPC, Spawn, "Thank goodness! We need these glimmer visors to reliably see the orcs that have been trying to flank us. Yer a life-saver, " .. GetName(Spawn) .. "!") +end \ No newline at end of file diff --git a/server/SpawnScripts/FrostfangSea/OrnIceheart.lua b/server/SpawnScripts/FrostfangSea/OrnIceheart.lua new file mode 100644 index 000000000..6e3570946 --- /dev/null +++ b/server/SpawnScripts/FrostfangSea/OrnIceheart.lua @@ -0,0 +1,53 @@ +--[[ + Script Name : SpawnScripts/FrostfangSea/OrnIceheart.lua + Script Purpose : warlock trainer in Halas + Script Author : theFoof + Script Date : 2013.9.24 + Script Notes : +--]] + +local WARLOCK = 24 + +function spawn(NPC) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + if GetClass(Spawn) == WARLOCK then + conversation = CreateConversation() + PlayFlavor(NPC, "", "", "hello", 0, 0, Spawn) + AddConversationOption(conversation, "Do you have any advice for a fellow warlock then?", "LockChat1") + AddConversationOption(conversation, "Well, you should. Good bye.") + StartConversation(conversation, NPC, Spawn, "My, my! Another warlock within our midst. Do not worry; I do not consider you a threat.") + else + PlayFlavor(NPC, "", "Well met!", "hello", 0, 0, Spawn) + end +end + +function LockChat1(NPC, Spawn) + conversation = CreateConversation() + FaceTarget(NPC, Spawn) + + AddConversationOption(conversation, "That's useful to know!", "LockChat2") + StartConversation(conversation, NPC, Spawn, "If you find items that add to your intelligence or stamina, then take them! Intelligence affects your spell focus and increases the damage your spells can cause. Your stamina affects your health. This is crucial!") +end + +function LockChat2(NPC, Spawn) + conversation = CreateConversation() + FaceTarget(NPC, Spawn) + + AddConversationOption(conversation, "That's interesting.", "LockChat3") + StartConversation(conversation, NPC, Spawn, "We are masters of death and decay, inflicting poison and disease upon those that dare to challenge us, particularly on groups of opponents.") +end + +function LockChat3(NPC, Spawn) + conversation = CreateConversation() + FaceTarget(NPC, Spawn) + + AddConversationOption(conversation, "Thank you for the advice.") + StartConversation(conversation, NPC, Spawn, "There are other adventuring classes that must rely on strong defenses to survive, but we focus on the offense. No need to defend yourself from a foe who is writhing in pain, plagued with disease!") +end \ No newline at end of file diff --git a/server/SpawnScripts/FrostfangSea/PadraigMcDougal.lua b/server/SpawnScripts/FrostfangSea/PadraigMcDougal.lua new file mode 100644 index 000000000..06603f90b --- /dev/null +++ b/server/SpawnScripts/FrostfangSea/PadraigMcDougal.lua @@ -0,0 +1,22 @@ +--[[ + Script Name : SpawnScripts/FrostfangSea/PadraigMcDougal.lua + Script Purpose : Padraig McDougal + Script Author : theFoof + Script Date : 2013.09.26 + Script Notes : +--]] + +require"SpawnScripts/FrostfangSea/halas_proximity_cheer" + +function spawn(NPC) + SetPlayerProximityFunction(NPC, 15, "ProxCheer") +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + PlayFlavor(NPC, "", "I'm sorry, my services are only available to those more advanced in the arts.", "", 1689589577, 4560189, Spawn) +end \ No newline at end of file diff --git a/server/SpawnScripts/FrostfangSea/PeregrineHelgrethIceweaver.lua b/server/SpawnScripts/FrostfangSea/PeregrineHelgrethIceweaver.lua new file mode 100644 index 000000000..b5627ad97 --- /dev/null +++ b/server/SpawnScripts/FrostfangSea/PeregrineHelgrethIceweaver.lua @@ -0,0 +1,23 @@ +--[[ + Script Name : SpawnScripts/FrostfangSea/PeregrineHelgrethIceweaver.lua + Script Purpose : Padraig McDougal + Script Author : theFoof + Script Date : 2013.09.26 + Script Notes : +--]] + +require"SpawnScripts/FrostfangSea/halas_proximity_cheer" + +function spawn(NPC) + SetPlayerProximityFunction(NPC, 15, "ProxCheer") +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + PlayFlavor(NPC, "", "", "hello",0, 0, Spawn) +end + diff --git a/server/SpawnScripts/FrostfangSea/PlurppBogthumb.lua b/server/SpawnScripts/FrostfangSea/PlurppBogthumb.lua new file mode 100644 index 000000000..fa481da61 --- /dev/null +++ b/server/SpawnScripts/FrostfangSea/PlurppBogthumb.lua @@ -0,0 +1,35 @@ +--[[ + Script Name : SpawnScripts/FrostfangSea/PlurppBogthumb.lua + Script Purpose : Plurpp Bogthumb + Script Author : theFoof + Script Date : 2013.10.30 + Script Notes : +--]] + +function spawn(NPC) + SetPlayerProximityFunction(NPC, 15, "InRange") +end + +function respawn(NPC) + spawn(NPC) +end + +function InRange(NPC, Spawn) + FaceTarget(NPC, Spawn) + PlayFlavor(NPC, "", "", "hello", 0, 0, Spawn) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + + local choice = math.random(1,4) + if choice == 1 then + PlayFlavor(NPC, "", "", "hello", 1689589577, 4560189, Spawn) + elseif choice == 2 then + PlayFlavor(NPC, "", "Please spare me your 'green thumb' jokes.", "", 1689589577, 4560189, Spawn) + elseif choice == 3 then + PlayFlavor(NPC, "", "A little love is all this sapling requires.", "", 1689589577, 4560189, Spawn) + else + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_1_1017.mp3", "", "", 0, 0, Spawn) + end +end \ No newline at end of file diff --git a/server/SpawnScripts/FrostfangSea/PretchonIronstein.lua b/server/SpawnScripts/FrostfangSea/PretchonIronstein.lua new file mode 100644 index 000000000..c4a43668e --- /dev/null +++ b/server/SpawnScripts/FrostfangSea/PretchonIronstein.lua @@ -0,0 +1,84 @@ +--[[ + Script Name : SpawnScripts/FrostfangSea/PretchonIronstein.lua + Script Purpose : Pretchon Ironstein + Script Author : theFoof + Script Date : 2013.08.19 + Script Notes : +--]] + +local TrustIssues = 85 + +function spawn(NPC) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + if HasQuest(Spawn, TrustIssues) and not QuestStepIsComplete(Spawn, TrustIssues, 4) then + PlayFlavor(NPC, "pretchon_ironstein/halas/new_halas_guard_house/pretchon_ironstein001.mp3", "", "", 1138921900, 154999598, Spawn) + AddConversationOption(conversation, "I have a few questions.", "Quest1Chat_1") + AddConversationOption(conversation, "Can you tell me what you're doing here?", "Quest1Chat_1") + AddConversationOption(conversation, "Greetings, Pretch!", "Quest1Chat_5") + AddConversationOption(conversation, "Maybe this wasn't such a good idea. Goodbye.") + StartConversation(conversation, NPC, Spawn, "Have we met before? My friends call me Pretch, but ye can call me Pretchon Ironstein.") + elseif HasQuest(Spawn, TrustIssues) then + PlayFlavor(NPC, "", "Ye got yer answers. What do ye want now?", "hello", 0, 0, Spawn) + else + PlayFlavor(NPC, "", "May yer ore be rich, and yer stein be full.", "hello", 0, 0, Spawn) + end +end + +function Quest1Chat_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "pretchon_ironstein/halas/new_halas_guard_house/pretchon_ironstein003.mp3", "", "", 3031154636, 3454544430, Spawn) + AddConversationOption(conversation, "Why did you come to Erollis?", "Quest1Chat_2") + AddConversationOption(conversation, "Why don't you leave?", "Quest1Chat_3") + AddConversationOption(conversation, "Whatever, I don't have the time for this.") + StartConversation(conversation, NPC, Spawn, "Sure, so long as ye make it quick. What would ye like to know?") +end + +function Quest1Chat_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "pretchon_ironstein/halas/new_halas_guard_house/pretchon_ironstein004.mp3", "", "", 2078038730, 2967258030, Spawn) + AddConversationOption(conversation, "Ah, I see. Well, why don't you leave?", "Quest1Chat_3") + AddConversationOption(conversation, "This can only go downhill from here. Goodbye.") + StartConversation(conversation, NPC, Spawn, "Seeing as how this floating rock is a chunk of my homeland, I've always been here. Yer the newcomer, " .. GetName(Spawn) .. ".") +end + +function Quest1Chat_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "pretchon_ironstein/halas/new_halas_guard_house/pretchon_ironstein005.mp3", "", "", 2277034168, 2486010941, Spawn) + AddConversationOption(conversation, "Can you explain that further?", "Quest1Chat_4") + AddConversationOption(conversation, "Sorry for your misfortune. Goodbye.") + StartConversation(conversation, NPC, Spawn, "Where would we go? This is all that we have left of Velious, and now we're making the best of an awful situation.") +end + +function Quest1Chat_4(NPC, Spawn) + SetStepComplete(Spawn, TrustIssues, 4) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "pretchon_ironstein/halas/new_halas_guard_house/pretchon_ironstein006.mp3", "", "", 28333391, 3841310148, Spawn) + AddConversationOption(conversation, "Good day and goodbye.") + StartConversation(conversation, NPC, Spawn, "Look. I intend to smash the Ry'Gorr, drink ale, and sail this floating isle until it sinks. Good day.") +end + +function Quest1Chat_5(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "pretchon_ironstein/halas/new_halas_guard_house/pretchon_ironstein002.mp3", "", "", 524764574, 2567502776, Spawn) + AddConversationOption(conversation, "I have a few questions.", "Quest1Chat_1") + AddConversationOption(conversation, "This can only go downhill from here. Goodbye.") + StartConversation(conversation, NPC, Spawn, "Ah, yer a prankster, I see. Well, I'll be calling ye Wolfmeat. What can I do for ye, Wolfmeat?") +end \ No newline at end of file diff --git a/server/SpawnScripts/FrostfangSea/PriestAaronolisSwornlove.lua b/server/SpawnScripts/FrostfangSea/PriestAaronolisSwornlove.lua new file mode 100644 index 000000000..1594fa40f --- /dev/null +++ b/server/SpawnScripts/FrostfangSea/PriestAaronolisSwornlove.lua @@ -0,0 +1,76 @@ +--[[ + Script Name : SpawnScripts/FrostfangSea/PriestAaronolisSwornlove.lua + Script Purpose : Priest Aaronolis Swornlove + Script Author : theFoof + Script Date : 2013.09.16 + Script Notes : +--]] + +function spawn(NPC) + SetPlayerProximityFunction(NPC, 15, "InRange") +end + +function respawn(NPC) + spawn(NPC) +end + +function InRange(NPC, Spawn) + if GetTempVariable(NPC, "chat_timer") == nil then + SetTempVariable(NPC, "chat_timer", "1") + AddTimer(NPC, 25000, "chat_timer") + + local choice = math.random(1,2) + + if choice == 1 then + PlayFlavor(NPC, "", "Were she still with us, Erollisi would have wanted you to spread love and friendship on this day.", "agree", 0, 0) + elseif choice == 2 then + PlayFlavor(NPC, "", "The Fanthom Lord, The Truthbringer, and The Forge Lord all had their hand in establishing this holy place. It is awe inspiring!", "nod", 0, 0) + end + end +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_3_1054.mp3", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Is that a statue of her?", "Chat1") + StartConversation(conversation, NPC, Spawn, "Welcome to the Cairn of The Huntress, " .. GetName(Spawn) .. "! Here we remember The Goddess of Love, Erollisi Marr, The Loving Huntress, The Queen of Love, Sister of Light.") +end + +function Chat1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + AddConversationOption(conversation, "It is not what I would have expected her to look like.", "Chat2") + AddConversationOption(conversation, "It is pretty.", "Chat4") + StartConversation(conversation, NPC, Spawn, "It is! It was sculpted by the Forge Lord, Varig Ro, and presented to Mithaniel Marr prior to Erollisi's self sacrifice. Varig truly captured her loving presence while still honoring her skill for hunting.") +end + +function Chat2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "How did it end up here?", "Chat3") + AddConversationOption(conversation, "I see what you mean. Good day.") + StartConversation(conversation, NPC, Spawn, "The deities of Norrath have often shown themselves in different forms, but what's important is that it captured her essence quite well.") +end + +function Chat3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "Thank you for sharing this with me.") + StartConversation(conversation, NPC, Spawn, "Mithaniel blessed us! He placed it here to share it with the world to serve as a reminder and spiritual inspiration to all. It reminds us of what she stood for and what there is to continue fighting for.") +end + +function Chat4(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "Good day, Priest Swornlove.") + StartConversation(conversation, NPC, Spawn, "I am glad you think so, too.") +end + +function chat_timer(NPC) + SetTempVariable(NPC, "chat_timer", nil) +end \ No newline at end of file diff --git a/server/SpawnScripts/FrostfangSea/RakanRockbreaker.lua b/server/SpawnScripts/FrostfangSea/RakanRockbreaker.lua new file mode 100644 index 000000000..97e49876c --- /dev/null +++ b/server/SpawnScripts/FrostfangSea/RakanRockbreaker.lua @@ -0,0 +1,141 @@ +--[[ + Script Name : SpawnScripts/FrostfangSea/RakanRockbreaker.lua + Script Purpose : Rakan Rockbreaker + Script Author : theFoof + Script Date : 2013.06.01 + Script Notes : +--]] + + +-- add in repeatable quest dialogue when available + +local DemandSupplies = 45 + +local FoilingFlank = 46 + +function spawn(NPC) + ProvidesQuest(NPC, DemandSupplies) + ProvidesQuest(NPC, FoilingFlank) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + if not HasCompletedQuest(Spawn, DemandSupplies) and not HasQuest(Spawn, DemandSupplies) then + PlayFlavor(NPC, "rakan_rockbreaker/halas/great_shelf/rakan_rockbreaker/rakan_rockbreaker001.mp3", "", "", 2002637275, 536344722, Spawn) + AddConversationOption(conversation, "What supplies?", "Quest1Chat_1") + AddConversationOption(conversation, "I'm busy at the moment. Goodbye.") + StartConversation(conversation, NPC, Spawn, "We've got to hurry! These supplies need to be delivered to the front lines, and quickly.") + elseif HasQuest(Spawn, DemandSupplies) and GetQuestStep(Spawn, DemandSupplies) < 3 then + PlayFlavor(NPC, "", "Ye've got to hurry! They need those supplies and they need em now!", "threaten", 0, 0, Spawn) + elseif GetQuestStep(Spawn, DemandSupplies) == 3 then + PlayFlavor(NPC, "rakan_rockbreaker/halas/great_shelf/rakan_rockbreaker/rakan_rockbreaker006.mp3", "", "", 3102394371, 3200634636, Spawn) + AddConversationOption(conversation, "I went as quickly as I could.", "Quest1Chat_4") + AddConversationOption(conversation, "They have the supplies they needed.", "Quest1Chat_4") + StartConversation(conversation, NPC, Spawn, "Yer back! I trust ye delivered the supplies to the coldain soldiers.") + elseif HasCompletedQuest(Spawn, DemandSupplies) and not HasQuest(Spawn, FoilingFlank) then + Quest2Chat_2(NPC, Spawn) + elseif HasQuest(Spawn, FoilingFlank) and GetQuestStep(Spawn, FoilingFlank) ~= 3 then + PlayFlavor(NPC, "", "As we speak, those snow glimmered runners are making their way up the choke!", "tap foot", 0, 0, Spawn) + elseif GetQuestStep(Spawn, FoilingFlank) == 3 then + PlayFlavor(NPC, "rakan_rockbreaker/halas/great_shelf/rakan_rockbreaker/rakan_rockbreaker015.mp3", "", "", 26313219, 1364697377, Spawn) + AddConversationOption(conversation, "Of course.", "Quest2Chat_4") + AddConversationOption(conversation, "It wasn't easy, but I took care of them.", "Quest2Chat_4") + StartConversation(conversation, NPC, Spawn, "Yer back, and in one piece. Were ye successful in yer task? Did ye take care of the orcs?") + end +end + +function Quest1Chat_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "rakan_rockbreaker/halas/great_shelf/rakan_rockbreaker/rakan_rockbreaker002.mp3", "", "", 2334563481, 118587127, Spawn) + AddConversationOption(conversation, "What are glimmer visors?", "Quest1Chat_2") + AddConversationOption(conversation, "I'll deliver the supplies for you.", "Quest1Chat_3") + AddConversationOption(conversation, "I'm busy at the moment. Goodbye.") + StartConversation(conversation, NPC, Spawn, "Reforged weapons for the soldiers, and glimmer visors for the archers.") +end + +function Quest1Chat_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "rakan_rockbreaker/halas/great_shelf/rakan_rockbreaker/rakan_rockbreaker003.mp3", "", "", 2462675267, 3917758225, Spawn) + AddConversationOption(conversation, "I'll deliver the supplies for you.", "Quest1Chat_3") + AddConversationOption(conversation, "I'm busy at the moment. Goodbye.") + StartConversation(conversation, NPC, Spawn, "The visors allow our archers to see the Ry'Gorr orcs that have been camouflaged by a snow glimmer. Otherwise they'll get through and flank our forces.") +end + +function Quest1Chat_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "rakan_rockbreaker/halas/great_shelf/rakan_rockbreaker/rakan_rockbreaker004.mp3", "", "", 3607684996, 3048983099, Spawn) + AddConversationOption(conversation, "I'll do just that.", "OfferDemandSupplies") + AddConversationOption(conversation, "You can count on me.", "OfferDemandSupplies") + StartConversation(conversation, NPC, Spawn, "Perfect. Bring these supplies to our defenders perched at the peak of Herga's Choke. The leaders will take the goods off your hands and distribute them to the coldain.") +end + +function Quest1Chat_4(NPC, Spawn) + SetStepComplete(Spawn, DemandSupplies, 3) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "rakan_rockbreaker/halas/great_shelf/rakan_rockbreaker/rakan_rockbreaker007.mp3", "", "", 84500025, 397416081, Spawn) + AddConversationOption(conversation, "Was there something else you needed?", "Quest2Chat_1") + AddConversationOption(conversation, "I'm afraid I must be going. Goodbye.") + StartConversation(conversation, NPC, Spawn, "Phew! That's a relief. We just might be able to stop them for awhile longer.") +end + +function Quest2Chat_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "rakan_rockbreaker/halas/great_shelf/rakan_rockbreaker/rakan_rockbreaker008.mp3", "", "", 3124701734, 1733764756, Spawn) + AddConversationOption(conversation, "So you need me to deal with them?", "Quest2Chat_3") + AddConversationOption(conversation, "This is too much for me to handle. Goodbye.") + StartConversation(conversation, NPC, Spawn, "The Ry'Gorr have figured out a way to make themselves all but invisible, and are charging up the choke. ") +end + +function Quest2Chat_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "rakan_rockbreaker/halas/great_shelf/rakan_rockbreaker/rakan_rockbreaker010.mp3", "", "", 3359211699, 295105343, Spawn) + AddConversationOption(conversation, "Was there something else you needed?", "Quest2Chat_1") + AddConversationOption(conversation, "I'm afraid I must be going. Goodbye.") + StartConversation(conversation, NPC, Spawn, "Yer a fine sort fer delivering those supplies, " .. GetName(Spawn) .. ". Unfortunately, our troubles are far from over.") +end + +function Quest2Chat_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "rakan_rockbreaker/halas/great_shelf/rakan_rockbreaker/rakan_rockbreaker011.mp3", "", "", 268182012, 816884804, Spawn) + AddConversationOption(conversation, "I'd be happy to try.", "OfferFoilingFlank") + AddConversationOption(conversation, "This is too much for me to handle. Goodbye.") + StartConversation(conversation, NPC, Spawn, "We need to deal with them, as well as the orcs that are maintaining the portal at the pinnacle of Herga's Choke. Our coldain forces are barely able to keep up with the unending onslaught, but perhaps ye can break the stalemate.") +end + +function Quest2Chat_4(NPC, Spawn) + SetStepComplete(Spawn, FoilingFlank, 3) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "rakan_rockbreaker/halas/great_shelf/rakan_rockbreaker/rakan_rockbreaker017.mp3", "", "", 101832850, 1600602204, Spawn) + AddConversationOption(conversation, "Victory is certain.") + AddConversationOption(conversation, "I'm happy to have helped.") + StartConversation(conversation, NPC, Spawn, "I knew we could count on ye," .. GetName(Spawn) .. "! The battle for the portal is surely ours now.") +end + +function OfferDemandSupplies(NPC, Spawn) + OfferQuest(NPC, Spawn, DemandSupplies) +end + +function OfferFoilingFlank(NPC, Spawn) + OfferQuest(NPC, Spawn, FoilingFlank) +end diff --git a/server/SpawnScripts/FrostfangSea/RibbitHopson.lua b/server/SpawnScripts/FrostfangSea/RibbitHopson.lua new file mode 100644 index 000000000..cb63cb27a --- /dev/null +++ b/server/SpawnScripts/FrostfangSea/RibbitHopson.lua @@ -0,0 +1,110 @@ +--[[ + Script Name : SpawnScripts/FrostfangSea/RibbitHopson.lua + Script Purpose : Ribbit Hopson + Script Author : theFoof + Script Date : 2013.08.27 + Script Notes : +--]] + +local SpiderPuffs = 87 + +function spawn(NPC) + ProvidesQuest(NPC, SpiderPuffs) + SetPlayerProximityFunction(NPC, 10, "InRange") +end + +function respawn(NPC) + spawn(NPC) +end + +function InRange(NPC, Spawn) + PlayFlavor(NPC, "", "Come on in, the door's open!", "beckon", 1689589577, 4560189, Spawn) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + if not HasCompletedQuest(Spawn, SpiderPuffs) and not HasQuest(Spawn, SpiderPuffs) then + PlayFlavor(NPC, "ribbit_hopson/halas/new_halas/ribbit_hopson/ribbit_hopson_001.mp3", "", "", 2788145631, 3173619593, Spawn) + AddConversationOption(conversation, "Hello, Ribbit. I am " .. GetName(Spawn) .. ".", "Quest1Chat_1") + StartConversation(conversation, NPC, Spawn, "Hello! I haven't seen you around before. I am Ribbit Hopson, an immigrant from Qeynos.") + elseif GetQuestStep(Spawn, SpiderPuffs) == 1 or GetQuestStep(Spawn, SpiderPuffs) == 2 then + AddConversationOption(conversation, "Where can I find the dame's rocket and wooly silkspinners?", "Quest1Chat_5") + StartConversation(conversation, NPC, Spawn, "Have you collected the ingredients I asked for?") + elseif GetQuestStep(Spawn, SpiderPuffs) == 3 then + AddConversationOption(conversation, "I have the dame's rockets and the woolly silkspinner meat.", "Quest1Chat_6") + StartConversation(conversation, NPC, Spawn, "Have you collected the ingredients I asked for?") + elseif GetQuestStep(Spawn, SpiderPuffs) == 4 then + PlayFlavor(NPC, "", "Go ahead, try one!", "beckon", 0, 0, Spawn) + elseif HasCompletedQuest(Spawn, SpiderPuffs) then + PlayFlavor(NPC, "", "Thanks for your help. The spider puffs are pretty good, huh?", "thanks", 0, 0, Spawn) + end +end + +function Quest1Chat_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "ribbit_hopson/halas/new_halas/ribbit_hopson/ribbit_hopson_003.mp3", "", "", 3519293872, 2814938385, Spawn) + AddConversationOption(conversation, "Is there anything with which I can help you?", "Quest1Chat_2") + StartConversation(conversation, NPC, Spawn, "It is nice to meet you. I am busy preparing for the New Halas City Festival! Many people will come from all over Norrath to New Halas during the festival, so it is important that we put our best flipper forward.") +end + +function Quest1Chat_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "ribbit_hopson/halas/new_halas/ribbit_hopson/ribbit_hopson_004.mp3", "", "", 776305400, 980133477, Spawn) + AddConversationOption(conversation, "So?", "Quest1Chat_3") + StartConversation(conversation, NPC, Spawn, "I am going to make my family's secret recipe for spider puffs for the festival, but I do not know how it will taste with the spiders native to New Halas. I've been growing the dame's rocket seedlings that I brought with me to New Halas, and they are just now ripening.") +end + +function Quest1Chat_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "ribbit_hopson/halas/new_halas/ribbit_hopson/ribbit_hopson_005.mp3", "", "", 1928136735, 1280650233, Spawn) + AddConversationOption(conversation, "I could do that!", "Quest1Chat_4") + StartConversation(conversation, NPC, Spawn, "Well, I'm no fighter and usually I'd pay someone to collect spider meat for me.") +end + +function Quest1Chat_4(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "ribbit_hopson/halas/new_halas/ribbit_hopson/ribbit_hopson_006.mp3", "", "", 2761139077, 596680396, Spawn) + AddConversationOption(conversation, "That would be fine.", "OfferSpiderPuffs") + AddConversationOption(conversation, "I'm not mucking about some cave for some disgusting puffs. No thank you.") + StartConversation(conversation, NPC, Spawn, "I warn you, I do not have much money left over. As it turns out, pilgrimages are much more expensive than you would suppose! But I could give you some of the baked spider puffs, they are most delicious.") +end + +function Quest1Chat_5(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "Thank you, Ribbit. I shall return with the ingredients.") + StartConversation(conversation, NPC, Spawn, "The dame's rocket is right outside my door and the woolly silkspinners are in the cave leading to the Erollis Dock.") +end + +function Quest1Chat_6(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "I can rest a bit.", "Quest1Chat_7") + StartConversation(conversation, NPC, Spawn, "Splendid! If you will rest for a moment, I can have the spider puff batter whipped up and baked in no time!") +end + +function Quest1Chat_7(NPC, Spawn) + AddSpawnAccess(GetSpawn(NPC, 4701841), Spawn) + SetStepComplete(Spawn, SpiderPuffs, 3) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "Thank you, Ribbit!") + StartConversation(conversation, "There, finished! Please take some puffs for yourself.") +end + +function OfferSpiderPuffs(NPC, Spawn) + OfferQuest(NPC, Spawn, SpiderPuffs) +end \ No newline at end of file diff --git a/server/SpawnScripts/FrostfangSea/RickaStonehide.lua b/server/SpawnScripts/FrostfangSea/RickaStonehide.lua new file mode 100644 index 000000000..d284b805d --- /dev/null +++ b/server/SpawnScripts/FrostfangSea/RickaStonehide.lua @@ -0,0 +1,23 @@ +--[[ + Script Name : SpawnScripts/FrostfangSea/RickaStonehide.lua + Script Purpose : Ricka Stonehide + Script Author : theFoof + Script Date : 2013.10.30 + Script Notes : +--]] + +function spawn(NPC) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_1_1041.mp3", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Thanks for the information, I just might do that.", "dlg_3_1") + StartConversation(conversation, NPC, Spawn, "Search for the relics of the past Age of Turmoil. Their discovery will gain you great power and prestige!") +end \ No newline at end of file diff --git a/server/SpawnScripts/FrostfangSea/RyGorrExplosiveMiningBarrel.lua b/server/SpawnScripts/FrostfangSea/RyGorrExplosiveMiningBarrel.lua new file mode 100644 index 000000000..2cbaf537a --- /dev/null +++ b/server/SpawnScripts/FrostfangSea/RyGorrExplosiveMiningBarrel.lua @@ -0,0 +1,25 @@ +--[[ + Script Name : SpawnScripts/FrostfangSea/RyGorrExplosiveMiningBarrel.lua + Script Purpose : to make the mining barrel die and create an explosion/hide the rock widget + Script Author : theFoof + Script Date : 2013.6.12 + Script Notes : +--]] + +function spawn(NPC) + AddTimer(NPC, 500, "destroy_barrel") + AddSpawnAccess(NPC, NPC) +end + +function respawn(NPC) + spawn(NPC) +end + +function destroy_barrel(NPC) + player = GetTempVariable(NPC, "player") + KillSpawn(NPC, player, 0) + anim = SpawnByLocationID(GetZone(player), 441170) + AddSpawnAccess(anim, player) + SetTempVariable(anim, "player", player) + SetTempVariable(NPC, "player", nil) +end \ No newline at end of file diff --git a/server/SpawnScripts/FrostfangSea/RyGorrfirepittorch.lua b/server/SpawnScripts/FrostfangSea/RyGorrfirepittorch.lua new file mode 100644 index 000000000..cb1703850 --- /dev/null +++ b/server/SpawnScripts/FrostfangSea/RyGorrfirepittorch.lua @@ -0,0 +1,37 @@ +--[[ + Script Name : SpawnScripts/FrostfangSea/RyGorrfirepittorch.lua + Script Purpose : for the spawn "Ry'Gorr firepit torch" + Script Author : theFoof + Script Date : 2013.6.20 + Script Notes : +--]] + +local HighlyMaterials = 74 + +function spawn(NPC) + AddSpawnAccess(NPC, NPC) + SetPlayerProximityFunction(NPC, 50, "SpawnAccess", "SpawnAccess") + SetRequiredQuest(NPC, HighlyMaterials, 1) +end + +function respawn(NPC) + spawn(NPC) +end + +function SpawnAccess(NPC, Spawn) + if HasQuest(Spawn, HighlyMaterials) and not HasItem(Spawn, 47882) then + AddSpawnAccess(NPC, Spawn) + end +end + +function casted_on(NPC, Spawn, SpellName) + if SpellName == 'pick up' then + if HasQuest(Spawn, HighlyMaterials) and not HasItem(Spawn, 47882) then + Despawn(NPC) + SummonItem(Spawn, 47882) + if HasQuest(Spawn, HighlyMaterials) and GetQuestStep(Spawn, HighlyMaterials) == 1 then + SetStepComplete(Spawn, HighlyMaterials, 1) + end + end + end +end \ No newline at end of file diff --git a/server/SpawnScripts/FrostfangSea/RyGorrweaponrack.lua b/server/SpawnScripts/FrostfangSea/RyGorrweaponrack.lua new file mode 100644 index 000000000..dc25d8bb6 --- /dev/null +++ b/server/SpawnScripts/FrostfangSea/RyGorrweaponrack.lua @@ -0,0 +1,28 @@ +--[[ + Script Name : SpawnScripts/FrostfangSea/RyGorrweaponrack.lua + Script Purpose : for the ry'gorr weapon racks (unnamed spawn) + Script Author : theFoof + Script Date : 2013.6.10 + Script Notes : +--]] + +local RoughingReinforcements = 57 + +function spawn(NPC) + SetRequiredQuest(NPC, RoughingReinforcements, 3) +end + +function respawn(NPC) + spawn(NPC) +end + +function casted_on(NPC, Spawn, SpellName) + if SpellName == "Destroy Ry'Gorr Weapons" then + if HasQuest(Spawn, RoughingReinforcements) then + if not QuestStepIsComplete(Spawn, RoughingReinforcements, 3) then + AddStepProgress(Spawn, RoughingReinforcements, 3, 1) + Despawn(NPC) + end + end + end +end diff --git a/server/SpawnScripts/FrostfangSea/SanaStrongbellow.lua b/server/SpawnScripts/FrostfangSea/SanaStrongbellow.lua new file mode 100644 index 000000000..cf99a7de5 --- /dev/null +++ b/server/SpawnScripts/FrostfangSea/SanaStrongbellow.lua @@ -0,0 +1,24 @@ +--[[ + Script Name : SpawnScripts/FrostfangSea/SanaStrongbellow.lua + Script Purpose : Sana Strongbellow + Script Author : theFoof + Script Date : 2013.09.26 + Script Notes : +--]] + +function spawn(NPC) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "hello", 0, 0, Spawn) + AddConversationOption(conversation, "I'll work towards that end then.") + StartConversation(conversation, NPC, Spawn, "I'm sorry, until you have chosen a specialty in your craft I do not have any work orders for you. Come see me when you're more practiced in your trade.") +end + diff --git a/server/SpawnScripts/FrostfangSea/ScionofDiscord.lua b/server/SpawnScripts/FrostfangSea/ScionofDiscord.lua new file mode 100644 index 000000000..914a89d14 --- /dev/null +++ b/server/SpawnScripts/FrostfangSea/ScionofDiscord.lua @@ -0,0 +1,67 @@ +--[[ + Script Name : SpawnScripts/FrostfangSea/ScionofDiscord.lua + Script Purpose : Scion of Discord + Script Author : Foof + Script Date : 2013.10.30 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +function spawn(NPC) +end + +function respawn(NPC) + spawn(NPC) +end +--[[ +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + local choice = math.random(1,2) + + if choice == 1 then + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_2_1023.mp3", "", "", 0, 0, Spawn) + elseif choice == 2 then + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_3_1023.mp3", "", "", 0, 0, Spawn) + else + end + + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_3_1023.mp3", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Quite so.", "dlg_30_1") + AddConversationOption(conversation, "I am not ready yet.") + StartConversation(conversation, NPC, Spawn, "The will of Discord is to let your skill distinguish you from others. It is not just how you fight, but how often you are the source of death. Are you skilled enough to be considered among the elite?") +end + +function dlg_30_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "How can I show you? ", "dlg_30_2") + AddConversationOption(conversation, "On second thought, I am not ready. Farewell. ") + StartConversation(conversation, NPC, Spawn, "I bring favor to those that can back up their words, though your skill is yet to be seen. Consider your words or they will bring you shame! ") +end + +function dlg_30_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Let us begin! ", "dlg_30_3") + AddConversationOption(conversation, "I am not sure I can do that right now. Farewell. ") + StartConversation(conversation, NPC, Spawn, "The test is simple: kill or be killed. Plenty of would-be slayers roam the battlefield as we speak. You must deliver death in order to be given rewards. Are you ready to back your words? ") +end + +function dlg_30_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + StartConversation(conversation, NPC, Spawn, "Discord be with you!") +end +--]] +--[[ raw_conversations + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_2_1023.mp3", "", "", 0, 0, Spawn) + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_3_1023.mp3", "", "", 0, 0, Spawn) +--]] + diff --git a/server/SpawnScripts/FrostfangSea/ScionofDiscord_(victory).lua b/server/SpawnScripts/FrostfangSea/ScionofDiscord_(victory).lua new file mode 100644 index 000000000..9e3797597 --- /dev/null +++ b/server/SpawnScripts/FrostfangSea/ScionofDiscord_(victory).lua @@ -0,0 +1,57 @@ +--[[ + Script Name : SpawnScripts/FrostfangSea/ScionofDiscord.lua + Script Purpose : Scion of Discord + Script Author : Foof + Script Date : 2013.10.30 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +function spawn(NPC) +end + +function respawn(NPC) + spawn(NPC) +end +--[[ +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_2_1026.mp3", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Victory! ", "dlg_31_1") + AddConversationOption(conversation, "I am not interested in what you offer...") + StartConversation(conversation, NPC, Spawn, "The will of Discord is to raise leaders among the masses. You can fight aimlessly in battle, or you can lead your team to victory! The choice is yours.") +end + +function dlg_31_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "What is there for me to do? ", "dlg_31_2") + AddConversationOption(conversation, "On second thought, I can't at this time. Farewell. ") + StartConversation(conversation, NPC, Spawn, "Great choice! You are a fine specimen, fine indeed. I can sense that you are not someone that likes to fail. That is good for you and me. ") +end + +function dlg_31_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Discord will be honored with a victory! ", "dlg_31_3") + AddConversationOption(conversation, "I am not sure I can do that right now. Farewell. ") + StartConversation(conversation, NPC, Spawn, "It is simple, win! You must make your way through the battle and lead your team to victory. Each day will bring a different challenge. Are you ready to begin? ") +end + +function dlg_31_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + StartConversation(conversation, NPC, Spawn, "Discord be with you!") +end +--]] +--[[ raw_conversations + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_2_1026.mp3", "", "", 0, 0, Spawn) +--]] + diff --git a/server/SpawnScripts/FrostfangSea/Scourgesonarrow.lua b/server/SpawnScripts/FrostfangSea/Scourgesonarrow.lua new file mode 100644 index 000000000..40aa31471 --- /dev/null +++ b/server/SpawnScripts/FrostfangSea/Scourgesonarrow.lua @@ -0,0 +1,31 @@ +--[[ + Script Name : SpawnScripts/FrostfangSea/Scourgesonarrow.lua + Script Purpose : for the spawn "Scourgeson arrow" + Script Author : theFoof + Script Date : 2013.6.16 + Script Notes : +--]] + +local WhirlingTime = 70 + +function spawn(NPC) + SetRequiredQuest(NPC, WhirlingTime, 1) +end + +function respawn(NPC) + spawn(NPC) +end + +function casted_on(NPC, Spawn, SpellName) + if SpellName == 'apply draught' then + if GetQuestStep(Spawn, WhirlingTime) == 1 then + if HasItem(Spawn, 6556) then + SpawnMob(GetZone(Spawn), 4701138, 0, GetX(NPC), GetY(NPC), GetZ(NPC), GetHeading(NPC)) + AddStepProgress(Spawn, WhirlingTime, 1, 1) + Despawn(NPC) + else + SendMessage(Spawn, "You must have the Draught of Whirling Ice to use it!", "yellow") + end + end + end +end \ No newline at end of file diff --git a/server/SpawnScripts/FrostfangSea/SigbrithMacInnes.lua b/server/SpawnScripts/FrostfangSea/SigbrithMacInnes.lua new file mode 100644 index 000000000..f40590bff --- /dev/null +++ b/server/SpawnScripts/FrostfangSea/SigbrithMacInnes.lua @@ -0,0 +1,54 @@ +--[[ + Script Name : SpawnScripts/FrostfangSea/SigbrithMacInnes.lua + Script Purpose : Sigbrith MacInnes + Script Author : Foof + Script Date : 2013.05.21 + Script Notes : +--]] + +local LostFroglok = 26 + +function spawn(NPC) + SetPlayerProximityFunction(NPC, 10, "InRange", "LeaveRange") +end + +function respawn(NPC) + spawn(NPC) +end + +function InRange(NPC, Spawn) +end + +function LeaveRange(NPC, Spawn) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + + if GetQuestStep(Spawn, LostFroglok) == 1 then + conversation = CreateConversation() + + PlayFlavor(NPC, "sigbrith_macinnes/halas/gwenevyns_cove/sigbrith_macinnes/sigbrith_macinnes_001.mp3", "", "", 3335073691, 1240095725, Spawn) + AddConversationOption(conversation, "Excuse me, Sigbrith MacInnes?", "Quest1Chat_2") + StartConversation(conversation, NPC, Spawn, "Yes?") + end +end + +function Quest1Chat_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "sigbrith_macinnes/halas/gwenevyns_cove/sigbrith_macinnes/sigbrith_macinnes_003.mp3", "", "", 4092947662, 401427635, Spawn) + AddConversationOption(conversation, "That's where the grizzlies are!", "Quest1Chat_3") + StartConversation(conversation, NPC, Spawn, "I saw little Splorpy run off and play with the other children. They went over the hill, to the southwest.") +end + +function Quest1Chat_3(NPC, Spawn) + SetStepComplete(Spawn, LostFroglok, 1) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "sigbrith_macinnes/halas/gwenevyns_cove/sigbrith_macinnes/sigbrith_macinnes_004.mp3", "", "", 3124673910, 3802002199, Spawn) + AddConversationOption(conversation, "Thank you for the information. I must now go and search for Splorpy.") + StartConversation(conversation, NPC, Spawn, "Yes, and if the children were chased by them they may have run even further away from our camp. I'm sure Splorpy is fine, but it's nice for you to have concern for these poor pilgrims.") +end diff --git a/server/SpawnScripts/FrostfangSea/SisterAalarya.lua b/server/SpawnScripts/FrostfangSea/SisterAalarya.lua new file mode 100644 index 000000000..1641a0a5a --- /dev/null +++ b/server/SpawnScripts/FrostfangSea/SisterAalarya.lua @@ -0,0 +1,136 @@ +--[[ + Script Name : SpawnScripts/FrostfangSea/SisterAalarya.lua + Script Purpose : Sister Aalarya + Script Author : theFoof + Script Date : 2013.08.19 + Script Notes : +--]] + +local TrustIssues = 85 + +function spawn(NPC) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + if HasQuest(Spawn, TrustIssues) and not QuestStepIsComplete(Spawn, TrustIssues, 3) then + PlayFlavor(NPC, "sister_aalarya/halas/new_halas_guard_house/sister_aalarya001.mp3", "", "", 2119732267, 2070285157, Spawn) + AddConversationOption(conversation, "Is this a good time?", "Quest1Chat_1") + AddConversationOption(conversation, "I have a few questions about the Sisterhood.", "Quest1Chat_7") + AddConversationOption(conversation, "Brogan MacLellan sent me to speak with you.", "Quest1Chat_6") + AddConversationOption(conversation, "I can already tell this is going to be painful. Goodbye.") + StartConversation(conversation, NPC, Spawn, "Hello there, friend. Blessings of Erollisi to you.") + elseif HasQuest(Spawn, TrustIssues) then + PlayFlavor(NPC, "", "Hello again, " .. GetName(Spawn) .. ". Blessings of Erollisi to you.", "hello", 0, 0, Spawn) + else + PlayFlavor(NPC, "", "Blessings of Erollisi to you.", "hello", 0, 0, Spawn) + end +end + +function Quest1Chat_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "sister_aalarya/halas/new_halas_guard_house/sister_aalarya002.mp3", "", "", 778240445, 1265640341, Spawn) + AddConversationOption(conversation, "Perfect.", "Quest1Chat_7") + AddConversationOption(conversation, "On second thought, I have somewhere to be.") + StartConversation(conversation, NPC, Spawn, "Of course. I was looking forward to some stimulating conversation. Sometimes the quiet life of a Sister, while spiritually fulfilling, is dreadfully dull. Ho hum.") +end + +function Quest1Chat_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "sister_aalarya/halas/new_halas_guard_house/sister_aalarya005.mp3", "", "", 2831123605, 2891513253, Spawn) + AddConversationOption(conversation, "What did he do?", "Quest1Chat_3") + AddConversationOption(conversation, "Whatever, I don't have the time for this.") + StartConversation(conversation, NPC, Spawn, "Mithaniel Marr smiled upon this forsaken land when He saw the plight of the coldain. They were lost, forgotten, and locked in an endless and hopelessly futile battle with the Ry'Gorr. ") +end + +function Quest1Chat_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "sister_aalarya/halas/new_halas_guard_house/sister_aalarya006.mp3", "", "", 839696070, 368595826, Spawn) + AddConversationOption(conversation, "So how does Erollisi fit in?", "Quest1Chat_4") + AddConversationOption(conversation, "Isn't that a bit Deus Ex Machina?", "Quest1Chat_8") + AddConversationOption(conversation, "I can't stand the preaching of a religious zealot. Goodbye.") + StartConversation(conversation, NPC, Spawn, "He blessed the isle, and showed pilgrims the way here. Since His intervention, this land has flourished.") +end + +function Quest1Chat_4(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "sister_aalarya/halas/new_halas_guard_house/sister_aalarya009.mp3", "", "", 3023080955, 3940179989, Spawn) + AddConversationOption(conversation, "And you are followers of Erollisi Marr.", "Quest1Chat_5") + AddConversationOption(conversation, "Hence the name: Erollis.", "Quest1Chat_5") + AddConversationOption(conversation, "I can't stand the preaching of a religious zealot. Goodbye.") + StartConversation(conversation, NPC, Spawn, "He left us this statue of His sister. This isle is named in Her honor.") +end + +function Quest1Chat_5(NPC, Spawn) + SetStepComplete(Spawn, TrustIssues, 3) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "sister_aalarya/halas/new_halas_guard_house/sister_aalarya010.mp3", "", "", 2543843692, 2274240039, Spawn) + AddConversationOption(conversation, "Thank you, Sister Aalarya.") + AddConversationOption(conversation, "I can understand why followers would come here.") + StartConversation(conversation, NPC, Spawn, "This place has become a sacred meeting place for devoted followers of Marr. All who worship Mithaniel or Erollisi are welcome to join us and pay Them tribute.") +end + +function Quest1Chat_6(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "sister_aalarya/halas/new_halas_guard_house/sister_aalarya004.mp3", "", "", 2080247973, 2428888366, Spawn) + AddConversationOption(conversation, "Okay, okay, I'm leaving!") + StartConversation(conversation, NPC, Spawn, "Brogan? Brogan MacLellan?! Again? So now that we stopped acknowledging him, he's sending others to harass us! I refuse to honor his inane, vapid, fever-mad, unfounded accusations with a response. Get out of here, NOW!") +end + +function Quest1Chat_7(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "sister_aalarya/halas/new_halas_guard_house/sister_aalarya003.mp3", "", "", 3370074263, 1372386631, Spawn) + AddConversationOption(conversation, "Why did you come to Erollis?", "Quest1Chat_2") + AddConversationOption(conversation, "Why don't you leave?", "Quest1Chat_9") + AddConversationOption(conversation, "Is it true what they say about the Sisterhood?", "Quest1Chat_10") + AddConversationOption(conversation, "Whatever, I don't have the time for this.") + StartConversation(conversation, NPC, Spawn, "It is my duty to speak to travelers about our order. What would you like to know?") +end + +function Quest1Chat_8(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "sister_aalarya/halas/new_halas_guard_house/sister_aalarya011.mp3", "", "", 735077916, 1256331838, Spawn) + AddConversationOption(conversation, "So how does Erollisi fit in?", "Quest1Chat_4") + AddConversationOption(conversation, "I can't stand the preaching of a religious zealot. Goodbye.") + StartConversation(conversation, NPC, Spawn, "One cannot claim to understand the machinations or motivations of the gods. They can drastically change our world or they can leave us to our own designs. The faithful will not question Their actions.") +end + +function Quest1Chat_9(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "I see what you mean.", "Quest1Chat_3") + AddConversationOption(conversation, "Tell me about your arrival.", "Quest1Chat_3") + StartConversation(conversation, NPC, Spawn, "This land is holy, blessed by the gods we revere. I'll answer your question with a question: why would be anywhere else?") +end + +function Quest1Chat_10(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "Sorry to offend. Tell me about your arrival.", "Quest1Chat_3") + AddConversationOption(conversation, "You wouldn't be so defensive if you weren't hiding something!") + StartConversation(conversation, NPC, Spawn, 'That depends on what "they" say. And I would suggest that unless you are genuinely interested in becoming a member of the Sisterhood, that you ' .. "don't make a cad of yourself by questioning our customs.") +end diff --git a/server/SpawnScripts/FrostfangSea/SisterKateyDalwynn.lua b/server/SpawnScripts/FrostfangSea/SisterKateyDalwynn.lua new file mode 100644 index 000000000..f6bec515a --- /dev/null +++ b/server/SpawnScripts/FrostfangSea/SisterKateyDalwynn.lua @@ -0,0 +1,26 @@ +--[[ + Script Name : SpawnScripts/FrostfangSea/SisterKateyDalwynn.lua + Script Purpose : chat with Sister Katey Dalwynn + Script Author : theFoof + Script Date : 2013.9.16 + Script Notes : +--]] + +function spawn(NPC) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + local choice = math.random(1,3) + + if choice == 1 then + PlayFlavor(NPC, "", "Varig Ro's handiwork is amazin! He outdid himself with this statue of the Loving Huntress.", "hello", 0, 0, Spawn) + elseif choice == 2 then + PlayFlavor(NPC, "", "We must continue to hold charity, truth, honor and valor within our lives, in her memory.", "hello", 0, 0, Spawn) + elseif choice == 3 then + PlayFlavor(NPC, "", "In the name or Erollisi we must not give up on love, compassion, devotion, or sacrifice.", "hello", 0, 0, Spawn) + end +end \ No newline at end of file diff --git a/server/SpawnScripts/FrostfangSea/SisterLeelaPrendyn.lua b/server/SpawnScripts/FrostfangSea/SisterLeelaPrendyn.lua new file mode 100644 index 000000000..27154c902 --- /dev/null +++ b/server/SpawnScripts/FrostfangSea/SisterLeelaPrendyn.lua @@ -0,0 +1,27 @@ +--[[ + Script Name : SpawnScripts/FrostfangSea/SisterLeelaPrendyn.lua + Script Purpose : Sister Leela Prendyn + Script Author : theFoof + Script Date : 2013.09.16 + Script Notes : +--]] + +function spawn(NPC) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + + local choice = math.random(1,2) + + if choice == 1 then + PlayFlavor(NPC, "", "I miss Tearfall whenever I must be away, but this place soothes my soul.", "agree", 1689589577, 4560189, Spawn) + elseif choice == 2 then + PlayFlavor(NPC, "", "The Loving Huntress will never be forgotten.", "no", 0, 0, Spawn) + end + +end \ No newline at end of file diff --git a/server/SpawnScripts/FrostfangSea/SisterThogMacGilly.lua b/server/SpawnScripts/FrostfangSea/SisterThogMacGilly.lua new file mode 100644 index 000000000..c12214d8a --- /dev/null +++ b/server/SpawnScripts/FrostfangSea/SisterThogMacGilly.lua @@ -0,0 +1,28 @@ +--[[ + Script Name : SpawnScripts/FrostfangSea/SisterThogMacGilly.lua + Script Purpose : Sister Thog MacGilly + Script Author : theFoof + Script Date : 2013.09.16 + Script Notes : +--]] + +function spawn(NPC) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + + local choice = math.random(1,3) + if choice == 1 then + PlayFlavor(NPC, "", "I can feel the influence of love here, in a way that I haven't in years!", "nod", 1689589577, 4560189, Spawn) + elseif choice == 2 then + PlayFlavor(NPC, "", "Mithaniel himself was the one to plant the statue of Erollisi here.", "hello", 0, 0, Spawn) + elseif choice == 3 then + PlayFlavor(NPC, "", "We must honor Erollisi, and spread her virtues to the corners of this world.", "hello", 0, 0, Spawn) + end +end + diff --git a/server/SpawnScripts/FrostfangSea/SkjolrandrHalculloch.lua b/server/SpawnScripts/FrostfangSea/SkjolrandrHalculloch.lua new file mode 100644 index 000000000..975b8978d --- /dev/null +++ b/server/SpawnScripts/FrostfangSea/SkjolrandrHalculloch.lua @@ -0,0 +1,27 @@ +--[[ + Script Name : SpawnScripts/FrostfangSea/SkjolrandrHalculloch.lua + Script Purpose : Skjolrandr Halculloch + Script Author : theFoof + Script Date : 2013.10.30 + Script Notes : movement loop for random npc in halas +--]] + +function spawn(NPC) + MovementLoopAddLocation(NPC, -61.57, 146.11, -50.21, 2, 0) + MovementLoopAddLocation(NPC, -16.67, 146.19, -58.03, 2, 0) + MovementLoopAddLocation(NPC, 12.94, 147.61, -96.37, 2, 0) + MovementLoopAddLocation(NPC, 72.31, 148.34, -88.88, 2, 0) + MovementLoopAddLocation(NPC, 109.63, 155.62, -137.94, 2, 0) + MovementLoopAddLocation(NPC, 72.31, 148.34, -88.88, 2, 0) + MovementLoopAddLocation(NPC, 12.94, 147.61, -96.37, 2, 0) + MovementLoopAddLocation(NPC, -16.67, 146.19, -58.03, 2, 0) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + PlayFlavor(NPC, "", "", "hello", 0, 0, Spawn) +end \ No newline at end of file diff --git a/server/SpawnScripts/FrostfangSea/SplorpyQuagmarr_(camp).lua b/server/SpawnScripts/FrostfangSea/SplorpyQuagmarr_(camp).lua new file mode 100644 index 000000000..2ebd2a3de --- /dev/null +++ b/server/SpawnScripts/FrostfangSea/SplorpyQuagmarr_(camp).lua @@ -0,0 +1,47 @@ +--[[ + Script Name : SpawnScripts/FrostfangSea/SplorpyQuagmarr_(camp).lua + Script Purpose : Splorpy Quagmarr spawn at the pilgrim camp + Script Author : theFoof + Script Date : 2013.05.21 + Script Notes : +--]] + +local UnbearableProblem = 25 + +local LostFroglok = 26 + +local GreatShelf = 30 + +function spawn(NPC) + AddSpawnAccess(NPC, NPC) + SetPlayerProximityFunction(NPC, 50, "SpawnAccess", "SpawnAccess") +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + if HasCompletedQuest(Spawn, LostFroglok) == false then + PlayFlavor(NPC, "", "Dad says I'm not to talk to strangers.", "sad", 1689589577, 4560189, Spawn) + else + PlayFlavor(NPC, "", "Hello again!", "wave", 1689589577, 4560189, Spawn) + end +end + +function SpawnAccess(NPC, Spawn) + if HasQuest(Spawn, UnbearableProblem) then + if GetQuestStep(Spawn, UnbearableProblem) == 2 then + + else + AddSpawnAccess(NPC, Spawn) + end + elseif HasCompletedQuest(Spawn, UnbearableProblem) and HasCompletedQuest(Spawn, LostFroglok) == false then + + elseif GetQuestStep(Spawn, GreatShelf) > 1 or HasCompletedQuest(Spawn, GreatShelf) then + + else + AddSpawnAccess(NPC, Spawn) + end +end \ No newline at end of file diff --git a/server/SpawnScripts/FrostfangSea/SplorpyQuagmarr_(halas).lua b/server/SpawnScripts/FrostfangSea/SplorpyQuagmarr_(halas).lua new file mode 100644 index 000000000..2f341fc55 --- /dev/null +++ b/server/SpawnScripts/FrostfangSea/SplorpyQuagmarr_(halas).lua @@ -0,0 +1,27 @@ +--[[ + Script Name : SpawnScripts/FrostfangSea/SplorpyQuagmarr_(halas).lua + Script Purpose : hides flibbit until quest series is finished + Script Author : theFoof + Script Date : 2013.9.24 + Script Notes : +--]] + +function spawn(NPC) + AddSpawnAccess(NPC, NPC) + SetPlayerProximityFunction(NPC, 100, "SpawnAccess", "SpawnAccess") +end + +function respawn(NPC) + spawn(NPC) +end + +function SpawnAccess(NPC, Spawn) + if HasCompletedQuest(Spawn, 30) then + AddSpawnAccess(NPC, Spawn) + end +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + PlayFlavor(NPC, "", "", "hello", 0, 0, Spawn) +end \ No newline at end of file diff --git a/server/SpawnScripts/FrostfangSea/SplorpyQuagmarr_(lost).lua b/server/SpawnScripts/FrostfangSea/SplorpyQuagmarr_(lost).lua new file mode 100644 index 000000000..7e19770d0 --- /dev/null +++ b/server/SpawnScripts/FrostfangSea/SplorpyQuagmarr_(lost).lua @@ -0,0 +1,80 @@ +--[[ + Script Name : SpawnScripts/FrostfangSea/SplorpyQuagmarr_(lost).lua + Script Purpose : Splorpy Quagmarr lost during the quest Little LostFroglok + Script Author : theFoof + Script Date : 2013.05.21 + Script Notes : +--]] + +local LostFroglok = 26 + +function spawn(NPC) + SetPlayerProximityFunction(NPC, 50, "SpawnAccess", "SpawnAccess") + AddSpawnAccess(NPC, NPC) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + if GetQuestStep(Spawn, LostFroglok) == 2 then + PlayFlavor(NPC, "splorpy_quagmarr/halas/gwenevyns_cove/splorpy_quagmarr/splorpy_quagmarr_001.mp3", "", "", 3711049527, 3895860763, Spawn) + AddConversationOption(conversation, "Splorpy! It's me, " .. GetName(Spawn) .. ". I'm a friend of your dad's.", "Quest1Chat_1") + StartConversation(conversation, NPC, Spawn, "Hello? Who's there?") + end +end + +function Quest1Chat_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "splorpy_quagmarr/halas/gwenevyns_cove/splorpy_quagmarr/splorpy_quagmarr_002.mp3", "", "", 4266619341, 398836584, Spawn) + AddConversationOption(conversation, "That I did. How did you get out here?", "Quest1Chat_2") + StartConversation(conversation, NPC, Spawn, "I remember you! You killed the bad bears!") +end + +function Quest1Chat_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "splorpy_quagmarr/halas/gwenevyns_cove/splorpy_quagmarr/splorpy_quagmarr_003.mp3", "", "", 3146179411, 3806044983, Spawn) + AddConversationOption(conversation, "You were frightened by a barbarian?", "Quest1Chat_3") + StartConversation(conversation, NPC, Spawn, "I was playing hide and seek with the other kids when a huge man jumped out at us! We screamed and I hopped away as fast as I could!") +end + +function Quest1Chat_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "splorpy_quagmarr/halas/gwenevyns_cove/splorpy_quagmarr/splorpy_quagmarr_004.mp3", "", "", 2435575866, 3227047552, Spawn) + AddConversationOption(conversation, "Well, I'm here to take you back to your dad. I think we should get going before you get any colder.", "Quest1Chat_4") + StartConversation(conversation, NPC, Spawn, "No, " .. GetName(Spawn) .. "! His whole body was a beard! I know what a barbarian looks like and this was not a barbarian.") +end + +function Quest1Chat_4(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "splorpy_quagmarr/halas/gwenevyns_cove/splorpy_quagmarr/splorpy_quagmarr_005.mp3", "", "", 3060792386, 2313305125, Spawn) + AddConversationOption(conversation, "Maybe.", "FollowPlayer") + StartConversation(conversation, NPC, Spawn, "Okay! Maybe dad will have some hot stew ready!") +end + +function FollowPlayer(NPC, Spawn) + SetStepComplete(Spawn, LostFroglok, 2) + RemoveSpawnAccess(NPC, Spawn) + local pet = SpawnMob(GetZone(NPC), 4701835, 0, GetX(NPC), GetY(NPC), GetZ(NPC), GetHeading(NPC)) + SetTempVariable(Spawn, "splorp", pet) + SetFollowTarget(pet, Spawn) + ToggleFollow(pet) +end + +function SpawnAccess(NPC, Spawn) + if GetQuestStep(Spawn, LostFroglok) == 2 then + AddSpawnAccess(NPC, Spawn) + end +end \ No newline at end of file diff --git a/server/SpawnScripts/FrostfangSea/SplorpyQuagmarr_(pet).lua b/server/SpawnScripts/FrostfangSea/SplorpyQuagmarr_(pet).lua new file mode 100644 index 000000000..5aac5f3bc --- /dev/null +++ b/server/SpawnScripts/FrostfangSea/SplorpyQuagmarr_(pet).lua @@ -0,0 +1,39 @@ +--[[ + Script Name : SpawnScripts/FrostfangSea/SplorpyQuagmarr_(pet).lua + Script Purpose : the Splorply Quagmarr pet from the quest "Little Lost Froglok" + Script Author : theFoof + Script Date : 2013.05.22 + Script Notes : +--]] + +function spawn(NPC) + AddTimer(NPC, 5000, "chatswitch") + AddTimer(NPC, 600000, "depop") +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) +end + +function chatswitch(NPC) + choice = math.random(1,6) + if choice == 1 then + Say(NPC, "Did you fight those with your bare hands?") + elseif choice == 2 then + Say(NPC, "It's cold out here!") + elseif choice == 3 then + Say(NPC, "I have to go to the bathroom.") + elseif choice == 4 then + Say(NPC, "Do you know where you are going?") + elseif choice == 5 then + Say(NPC, "I wonder if I'll get to see Mithaniel Marr!") + elseif choice == 6 then + Say(NPC, "That bear was eating a dead pilgrim!") + end + AddTimer(NPC, math.random(15000,30000), "chatswitch") +end + +function depop(NPC, Spawn) + Despawn(NPC) +end + \ No newline at end of file diff --git a/server/SpawnScripts/FrostfangSea/SplorpyQuagmarr_(shelf).lua b/server/SpawnScripts/FrostfangSea/SplorpyQuagmarr_(shelf).lua new file mode 100644 index 000000000..c205ba404 --- /dev/null +++ b/server/SpawnScripts/FrostfangSea/SplorpyQuagmarr_(shelf).lua @@ -0,0 +1,27 @@ +--[[ + Script Name : SpawnScripts/FrostfangSea/SplorpyQuagmarr_(shelf).lua + Script Purpose : for the spawn "Splorpy Quagmarr" located in the great shelf cave. + Script Author : theFoof + Script Date : 2013.5.30 + Script Notes : +--]] +local GreatShelf = 30 + +function spawn(NPC) + AddSpawnAccess(NPC, NPC) + SetPlayerProximityFunction(NPC, 50, "SpawnAccess", "SpawnAccess") +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + PlayFlavor(NPC, "", "Hello again!", "wave", 1689589577, 4560189, Spawn) +end + +function SpawnAccess(NPC, Spawn) + if HasCompletedQuest(Spawn, GreatShelf) then + AddSpawnAccess(NPC, Spawn) + end +end \ No newline at end of file diff --git a/server/SpawnScripts/FrostfangSea/SuhubaVankedisi.lua b/server/SpawnScripts/FrostfangSea/SuhubaVankedisi.lua new file mode 100644 index 000000000..bff4bc24c --- /dev/null +++ b/server/SpawnScripts/FrostfangSea/SuhubaVankedisi.lua @@ -0,0 +1,61 @@ +--[[ + Script Name : SpawnScripts/FrostfangSea/SuhubaVankedisi.lua + Script Purpose : berserker trainer in Halas + Script Author : theFoof + Script Date : 2013.9.24 + Script Notes : +--]] + +local BERSERKER = 4 + +function spawn(NPC) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + if GetClass(Spawn) == BERSERKER then + conversation = CreateConversation() + PlayFlavor(NPC, "", "", "hello", 0, 0, Spawn) + AddConversationOption(conversation, "What advice can you give to another berserker?", "ZerkChat1") + AddConversationOption(conversation, "It does, doesn't it? Good day.") + StartConversation(conversation, NPC, Spawn, "I see a familiar fire in your eyes, warrior. The same burning rage that resides within all berserkers!") + else + PlayFlavor(NPC, "", "This land is full of battle. I like it!", 0, 0, Spawn) + end +end + +function ZerkChat1(NPC, Spawn) + conversation = CreateConversation() + FaceTarget(NPC, Spawn) + + AddConversationOption(conversation, "That will be useful!", "ZerkChat2") + StartConversation(conversation, NPC, Spawn, "Let that rage consume you! It makes you stronger and fuels your unbridled aggression and fury. This is especially useful when facing many foes at once, inflicting damage on the highest amount of enemies with our wild swings.") +end + +function ZerkChat2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "That's interesting.", "ZerkChat3") + StartConversation(conversation, NPC, Spawn, "But it is not just an offensive power. It also helps reduce the amount of damage inflicted upon you, and can help you regain your health when you have been injured.") +end + +function ZerkChat3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "That's useful to know!", "ZerkChat4") + StartConversation(conversation, NPC, Spawn, "If you find items that add to your strength or stamina, be sure to get them! Strength increases the amount of damage your attacks can inflict on others and raises your ability to carry heavy weight. Your stamina affets your health. This is crucial.") +end + +function ZerkChat4(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "Thank you for the advice.") + StartConversation(conversation, NPC, Spawn, "And protect yourself with a good set of plate mail, " .. GetName(Spawn) .. ". The armor would be considered too heavy by others, but with your focus on strength such highly protective armor has no downside.") +end \ No newline at end of file diff --git a/server/SpawnScripts/FrostfangSea/TadHopson.lua b/server/SpawnScripts/FrostfangSea/TadHopson.lua new file mode 100644 index 000000000..30db33681 --- /dev/null +++ b/server/SpawnScripts/FrostfangSea/TadHopson.lua @@ -0,0 +1,20 @@ +--[[ + Script Name : SpawnScripts/FrostfangSea/TadHopson.lua + Script Purpose : Tad Hopson + Script Author : theFoof + Script Date : 2013.09.13 + Script Notes : +--]] + +function spawn(NPC) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + PlayFlavor(NPC, "", "My parents say I'm not supposed to talk to strangers.", "speaknoevil", 1689589577, 4560189, Spawn) +end + diff --git a/server/SpawnScripts/FrostfangSea/TadIronstein.lua b/server/SpawnScripts/FrostfangSea/TadIronstein.lua new file mode 100644 index 000000000..1df5d5350 --- /dev/null +++ b/server/SpawnScripts/FrostfangSea/TadIronstein.lua @@ -0,0 +1,101 @@ +--[[ + Script Name : SpawnScripts/FrostfangSea/TadIronstein.lua + Script Purpose : Tad Ironstein + Script Author : theFoof + Script Date : 2013.06.09 + Script Notes : +--]] + +local ReportSpine = 44 + +local NightmareOver = 73 + +function spawn(NPC) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + if GetQuestStep(Spawn, ReportSpine) == 1 or GetQuestStep(Spawn, NightmareOver) == 1 then + PlayFlavor(NPC, "tad_ironstein/halas/cragged_spine/tad_ironstein_001.mp3", "", "", 159212760, 893738328, Spawn) + AddConversationOption(conversation, GetName(Spawn) .. ", reporting for duty!", "Quest1Chat_1") + AddConversationOption(conversation, "Belka sent me.", "Quest1Chat_1") + AddConversationOption(conversation, "What can I do to help?", "Quest1Chat_1") + AddConversationOption(conversation, "I'm going to have a look around, first. Goodbye.") + StartConversation(conversation, NPC, Spawn, "Oi! We're in a heap of trouble. It's about time we got some fresh blood to help stave off the Ry'Gorr offensive.") + elseif HasCompletedQuest(Spawn, ReportSpine) then + Quest1Chat_2(NPC, Spawn) + end +end + +function Quest1Chat_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "tad_ironstein/halas/cragged_spine/tad_ironstein_002.mp3", "", "", 767750494, 124592983, Spawn) + AddConversationOption(conversation, "I prefer to stand. What's going on?", "Quest1Chat_2") + AddConversationOption(conversation, "Go ahead. I'm listening.", "Quest1Chat_2") + AddConversationOption(conversation, "I'm going to have a look around, first. Goodbye.") + StartConversation(conversation, NPC, Spawn, "I've heard good things about ye, " .. GetName(Spawn) .. ". Cop a squat and let me fill ye in on the details of our predicament.") +end + +function Quest1Chat_2(NPC, Spawn) + if not HasCompletedQuest(Spawn, NightmareOver) then + SetStepComplete(Spawn, NightmareOver, 1) + end + if not HasCompletedQuest(Spawn, ReportSpine) then + SetStepComplete(Spawn, ReportSpine, 1) + end + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "tad_ironstein/halas/cragged_spine/tad_ironstein_003.mp3", "", "", 4232630025, 1474295833, Spawn) + AddConversationOption(conversation, "Alright. Anything else?", "Quest1Chat_3") + AddConversationOption(conversation, "I'll see to it. Goodbye!") + StartConversation(conversation, NPC, Spawn, "Hillfred Kinlock is the lass to talk to for your next assignment in tackling the Ry'Gorr that have been assaulting our camp.") +end + +function Quest1Chat_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "tad_ironstein/halas/cragged_spine/tad_ironstein_004.mp3", "", "", 2381720580, 2582728568, Spawn) + AddConversationOption(conversation, "Alright. Anything else?", "Quest1Chat_4") + AddConversationOption(conversation, "I'll see to it. Goodbye!") + StartConversation(conversation, NPC, Spawn, "We're under siege from not just orcs, but blasted imps as well. I understand Knut Orcbane is lookin' for adventurers willing to deal with the mischievous monsters. He's looking for his sanity as well, so maybe ye can help him find that too.") +end + +function Quest1Chat_4(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "tad_ironstein/halas/cragged_spine/tad_ironstein_005.mp3", "", "", 520233498, 1846378100, Spawn) + AddConversationOption(conversation, "Alright. Anything else?", "Quest1Chat_5") + AddConversationOption(conversation, "I'll see to it. Goodbye!") + StartConversation(conversation, NPC, Spawn, "Thirin Veliumdelver is worried about the current state of our equipment, and I don't blame him. Our gear is falling apart from extended use, so there's real reason to be worried.") +end + +function Quest1Chat_5(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "tad_ironstein/halas/cragged_spine/tad_ironstein_006.mp3", "", "", 678304878, 2445816043, Spawn) + AddConversationOption(conversation, "Alright. Anything else?", "Quest1Chat_6") + AddConversationOption(conversation, "I'll see to it. Goodbye!") + StartConversation(conversation, NPC, Spawn, "Lastly, Odon Scourgeson thinks he's come up with a way to shroud the beach front in a whorl of mist to confuse the Ry'Gorr. Sounds crazy to me, but I've always been a fan of the more direct hands-on approach.") +end + +function Quest1Chat_6(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "tad_ironstein/halas/cragged_spine/tad_ironstein_007.mp3", "", "", 3904075644, 3425628781, Spawn) + AddConversationOption(conversation, "Glad to be here.") + AddConversationOption(conversation, "I'll see what I can do to help.") + StartConversation(conversation, NPC, Spawn, "That'll do, for starters. Glad to have ye aboard, " .. GetName(Spawn) .. ".") +end \ No newline at end of file diff --git a/server/SpawnScripts/FrostfangSea/TarynHighsea.lua b/server/SpawnScripts/FrostfangSea/TarynHighsea.lua new file mode 100644 index 000000000..a772d799d --- /dev/null +++ b/server/SpawnScripts/FrostfangSea/TarynHighsea.lua @@ -0,0 +1,36 @@ +--[[ + Script Name : SpawnScripts/FrostfangSea/TarynHighsea.lua + Script Purpose : Taryn Highsea + Script Author : theFoof + Script Date : 2013.10.30 + Script Notes : +--]] + +function spawn(NPC) + SetPlayerProximityFunction(NPC, 15, "InRange") +end + +function respawn(NPC) + spawn(NPC) +end + +function InRange(NPC, Spawn) + Chat(NPC) +end + +function hailed(NPC, Spawn) + Chat(NPC) +end + +function Chat(NPC) + FaceTarget(NPC, Spawn) + + local choice = math.random(1,3) + if choice == 1 then + PlayFlavor(NPC, "", "I can help! Come closer for a consultation!", "hello", 1689589577, 4560189, Spawn) + elseif choice == 2 then + PlayFlavor(NPC, "", "A new look for a new town, that's what I always say!", "smile", 1689589577, 4560189, Spawn) + else + PlayFlavor(NPC, "", "Hm...I'm pretty sure that look is bad luck.", "beckon", 0, 0, Spawn) + end +end \ No newline at end of file diff --git a/server/SpawnScripts/FrostfangSea/TergjerdGoreblade.lua b/server/SpawnScripts/FrostfangSea/TergjerdGoreblade.lua new file mode 100644 index 000000000..5b9761ea2 --- /dev/null +++ b/server/SpawnScripts/FrostfangSea/TergjerdGoreblade.lua @@ -0,0 +1,69 @@ +--[[ + Script Name : SpawnScripts/FrostfangSea/TergjerdGoreblade.lua + Script Purpose : paladin trainer + Script Author : theFoof + Script Date : 2013.9.24 + Script Notes : +--]] + +local PALADIN = 10 + +function spawn(NPC) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + if GetClass(Spawn) == PALADIN then + conversation = CreateConversation() + PlayFlavor(NPC, "", "", "hello", 0, 0, Spawn) + AddConversationOption(conversation, "What advice do you have for a another paladin?", "PalChat1") + AddConversationOption(conversation, "They do, don't they? Good day.") + StartConversation(conversation, NPC, Spawn, "I see a familiar fire in your eyes, warrior. The same flames of righteousness rside within all paladins!") + else + PlayFlavor(NPC, "", "I'm here to whup folks like you into shape!", "hello", 0, 0, Spawn) + end +end + +function PalChat1(NPC, Spawn) + conversation = CreateConversation() + FaceTarget(NPC, Spawn) + + AddConversationOption(conversation, "That's useful to know!", "PalChat2") + StartConversation(conversation, NPC, Spawn, "If you find items that add to your strength or stamina, be sure to get them! Strength increases the amount of damage your attacks can inflict on others and raises your ability to carry heavy weight. Your stamina affects your health. This is crucial.") +end + +function PalChat2(NPC, Spawn) + conversation = CreateConversation() + FaceTarget(NPC, Spawn) + + AddConversationOption(conversation, "That's reassuring.", "PalChat3") + StartConversation(conversation, NPC, Spawn, "Know the power you wield. You have been called into this service, to become a sword of valor, a servant to the divine, smiting oppressors and followers of the dark no matter if they attack one at a time or as a horde.") +end + +function PalChat3(NPC, Spawn) + conversation = CreateConversation() + FaceTarget(NPC, Spawn) + + AddConversationOption(conversation, "That will be useful!", "PalChat4") + StartConversation(conversation, NPC, Spawn, "The divine powers can also be used to grant us health in moments of need, as wlel as increase our allies' ability to heal. It can also be used to lend them some invaluable aid in the form of damage mitigation, reducing the amount of damage they receive.") +end + +function PalChat4(NPC, Spawn) + conversation = CreateConversation() + FaceTarget(NPC, Spawn) + + AddConversationOption(conversation, "That's interesting.", "PalChat5") + StartConversation(conversation, NPC, Spawn, "As is oura bility to take the blame for the damage an ally may inflict. This may sound bad, but when you are battling beside a powerful friend who does not have much protection anything that can keep the foe's attention on you is saving your friend.") +end + +function PalChat5(NPC, Spawn) + conversation = CreateConversation() + FaceTarget(NPC, Spawn) + + AddConversationOption(conversation, "Thank you for the advice.") + StartConversation(conversation, NPC, Spawn, "And protect yourself with a good set of plate mail, " .. GetName(Spawn) .. ". The armor may be weighty, but you can handle it, and its protective properties will be necessary, as it takes time to beseech our divine powers.") +end \ No newline at end of file diff --git a/server/SpawnScripts/FrostfangSea/ThirinVeliumdelver_(caves).lua b/server/SpawnScripts/FrostfangSea/ThirinVeliumdelver_(caves).lua new file mode 100644 index 000000000..d8885c66f --- /dev/null +++ b/server/SpawnScripts/FrostfangSea/ThirinVeliumdelver_(caves).lua @@ -0,0 +1,189 @@ +--[[ + Script Name : SpawnScripts/FrostfangSea/ThirinVeliumdelver_(caves).lua + Script Purpose : Thirin Veliumdelver + Script Author : theFoof + Script Date : 2013.06.11 + Script Notes : +--]] + +local BelowWaves = 59 + +local RyGorrOperations = 60 + +local GoodDistraction = 61 + +local SleetfootParty = 62 + +local SeekingEducation = 63 + +local NapEvigis = 64 + +function spawn(NPC) + AddSpawnAccess(NPC, NPC) + SetPlayerProximityFunction(NPC, 50, "SpawnAccess", "SpawnAccess") + ProvidesQuest(NPC, RyGorrOperations) + ProvidesQuest(NPC, GoodDistraction) + ProvidesQuest(NPC, SleetfootParty) + ProvidesQuest(NPC, SeekingEducation) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + if not HasCompletedQuest(Spawn, RyGorrOperations) and not HasQuest(Spawn, RyGorrOperations) then + PlayFlavor(NPC, "thirin_veliumdelver/halas/cragged_spine/thirin_veliumdelver_cave001.mp3", "", "", 2709713344, 2359332874, Spawn) + AddConversationOption(conversation, "Agreed. We must act quickly.", "Quest1Chat_1") + StartConversation(conversation, NPC, Spawn, "This is most impressive. I never knew the Ry'Gorr could be so devious.") + elseif GetQuestStep(Spawn, RyGorrOperations) == 1 or GetQuestStep(Spawn, RyGorrOperations) == 2 then + PlayFlavor(NPC, "", "The explosives should be around this area, " .. GetName(Spawn) .. ".", "", 0, 0, Spawn) + elseif GetQuestStep(Spawn, RyGorrOperations) == 3 then + SetStepComplete(Spawn, RyGorrOperations, 3) + PlayFlavor(NPC, "thirin_veliumdelver/halas/cragged_spine/thirin_veliumdelver_cave006.mp3", "", "", 2990250717, 1905406099, Spawn) + AddConversationOption(conversation, "You were right, they were keeping something imprisoned beyond the cave-in, though I fear what I've found will be of no use to us.", "Quest2Chat_1") + StartConversation(conversation, NPC, Spawn, "That was a magnificent display of destruction on your part, adventurer. Did ye find anything? What are those scoundrels hiding?") + elseif HasCompletedQuest(Spawn, RyGorrOperations) and not HasCompletedQuest(Spawn, GoodDistraction) and not HasQuest(Spawn, GoodDistraction) then + Quest2Chat_1(NPC, Spawn) + elseif HasQuest(Spawn, GoodDistraction) and GetQuestStep(Spawn, GoodDistraction) < 6 then + PlayFlavor(NPC, "", "Protect my man, " .. GetName(Spawn) .. ".", "", 1689589577, 4560189, Spawn) + elseif GetQuestStep(Spawn, GoodDistraction) == 6 then + SetStepComplete(Spawn, GoodDistraction, 6) + PlayFlavor(NPC, "thirin_veliumdelver/halas/cragged_spine/thirin_veliumdelver_cave011.mp3", "", "", 1460125884, 1686109939, Spawn) + AddConversationOption(conversation, "I have. He told me he was going to search further into the Velinoid Catacombs and wouldn't need any further assistance.", "Quest3Chat_1") + StartConversation(conversation, NPC, Spawn, "Hmm, you've returned without Ordin?") + elseif HasCompletedQuest(Spawn, GoodDistraction) and not HasCompletedQuest(Spawn, SleetfootParty) and not HasQuest(Spawn, SleetfootParty) then + Quest3Chat_1(NPC, Spawn) + elseif GetQuestStep(Spawn, SleetfootParty) == 1 then + PlayFlavor(NPC, "", "By Brell, I pray my man is ok.", "", 0, 0, Spawn) + elseif GetQuestStep(Spawn, SleetfootParty) == 2 then + RemoveSpawnAccess(GetSpawnByLocationID(GetZone(Spawn), 34036), Spawn) + SetStepComplete(Spawn, SleetfootParty, 2) + PlayFlavor(NPC, "thirin_veliumdelver/halas/cragged_spine/thirin_veliumdelver_cave015.mp3", "", "", 1359546210, 1807793457, Spawn) + AddConversationOption(conversation, "I... I found him dead. He seemed to have discovered a large ice and velium elemental. A monstrous creature.", "Quest4Chat_1") + StartConversation(conversation, NPC, Spawn, "You return alone? Is... is he gone?") + elseif HasCompletedQuest(Spawn, SleetfootParty) and not HasCompletedQuest(Spawn, SeekingEducation) and not HasQuest(Spawn, SeekingEducation) then + Quest4Chat_1(NPC, Spawn) + elseif GetQuestStep(Spawn, SleetfootParty) == 1 then + PlayFlavor(NPC, "", "Make haste for the White Lodge. Seek out Toril Blackbow.", "", 0, 0, Spawn) + else + PlayFlavor(NPC, "", "Hello my friend. It is good to see you.", "hello", 0, 0, Spawn) + end +end + +function SpawnAccess(NPC, Spawn) + if HasCompletedQuest(Spawn, BelowWaves) and not HasCompletedQuest(Spawn, NapEvigis) then + AddSpawnAccess(NPC, Spawn) + end +end + +function Quest1Chat_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "thirin_veliumdelver/halas/cragged_spine/thirin_veliumdelver_cave002.mp3", "", "", 3505397088, 1978736216, Spawn) + AddConversationOption(conversation, "I would agree. This wall is an unnecessary risk, even for them.", "Quest1Chat_2") + StartConversation(conversation, NPC, Spawn, "Aye. I saw this wall ye spoke of. Whoever caused this cave-in did not do so thoughtfully. Meaning it was done with haste. It seems as though it was meant to keep something trapped. What could scare the Ry'Gorr so much they would risk such a dangerous explosion?") +end + +function Quest1Chat_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "thirin_veliumdelver/halas/cragged_spine/thirin_veliumdelver_cave003.mp3", "", "", 2117741125, 3692044901, Spawn) + AddConversationOption(conversation, "You intend to re-open the tunnel entrance then?", "Quest1Chat_3") + StartConversation(conversation, NPC, Spawn, "Whatever they are hiding or keeping imprisoned may be used to give us an advantage. Whatever they fear would surely give us an upper hand in stopping their impending invasion.") +end + +function Quest1Chat_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "thirin_veliumdelver/halas/cragged_spine/thirin_veliumdelver_cave004.mp3", "", "", 79469292, 3225324999, Spawn) + AddConversationOption(conversation, "Sounds like a blast. I'm in.", "OfferRyGorrOperations") + AddConversationOption(conversation, "I'm not really one for mining, so I'll be going.") + StartConversation(conversation, NPC, Spawn, "I do, though we have no mining equipment on hand. However, these orcs could not have made so much progress in so a little a time without some help. I imagine there are some explosive barrels about, if ye just follow yer nose. Look around where they are currently mining, they should leave them lying around. Once you've got the explosives use it on the cave-in. Find out what the Ry'Gorr were trying to imprison.") +end + +function Quest2Chat_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "thirin_veliumdelver/halas/cragged_spine/thirin_veliumdelver_cave007.mp3", "", "", 563381258, 467794942, Spawn) + AddConversationOption(conversation, "I found a race of beings that look as though they were birthed from the velium itself. There were orcish bodies among them as well. I was able to escape, but I don't believe they will side with us. We are all in danger.", "Quest2Chat_2") + StartConversation(conversation, NPC, Spawn, "What are ye talking about? What was there?") +end + +function Quest2Chat_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "thirin_veliumdelver/halas/cragged_spine/thirin_veliumdelver_cave008.mp3", "", "", 1682427027, 3451821464, Spawn) + AddConversationOption(conversation, "I cannot tell, but the blast has severely damaged the surrounding walls. I do not believe that a third blast will do any good in one area underground.", "Quest2Chat_3") + StartConversation(conversation, NPC, Spawn, "This means there were caverns here before the orcs? They themselves must have discovered them. I know not what these creatures are, but if what ye say is true they may be more of a threat than those blasted Ry'Gorr. Is there any chance we can quickly re-build the wall, as the orcs did? Can we protect ourselves from these, what should they be called? Velinoids?") +end + +function Quest2Chat_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "thirin_veliumdelver/halas/cragged_spine/thirin_veliumdelver_cave009.mp3", "", "", 494358718, 200929086, Spawn) + AddConversationOption(conversation, "You can count on me, Thirin.", "OfferGoodDistraction") + AddConversationOption(conversation, "That sounds way too dangerous.") + StartConversation(conversation, NPC, Spawn, "Blast! I fear we've made a grave mistake, adventurer, one we must rectify immediately. It is time we informed my good friend, Torli Blackbow. However, I intend to return with as much intelligence as possible. I am sending in one of my scouts to investigate the area. I'd like for you to act as a distraction of sorts so he can sneak in undetected. Speak with him when you are ready.") +end + +function Quest3Chat_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "thirin_veliumdelver/halas/cragged_spine/thirin_veliumdelver_cave012.mp3", "", "", 196969429, 3399805289, Spawn) + AddConversationOption(conversation, "Perhaps he just needs more time? It wasn't long ago that I left him.", "Quest3Chat_2") + StartConversation(conversation, NPC, Spawn, "Hmm, this is most troubling. I am worried, adventurer, he would have returned by now. I fear something may have happened to him.") +end + +function Quest3Chat_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "thirin_veliumdelver/halas/cragged_spine/thirin_veliumdelver_cave013.mp3", "", "", 516198965, 3758808523, Spawn) + AddConversationOption(conversation, "I shall search for him. It was my responsibility to protect him.", "OfferSleetfootParty") + AddConversationOption(conversation, "Good luck in your search.") + StartConversation(conversation, NPC, Spawn, "He was my best scout, and a good friend. He would have returned by now. No, I fear he may be stuck in the dark corners of this cavern, unable to return for some reason. I'll need to look for him. The coldain do not leave their brothers behind. I have far too many ales to share with him before his time is up.") +end + +function Quest4Chat_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "thirin_veliumdelver/halas/cragged_spine/thirin_veliumdelver_cave016.mp3", "", "", 3750387458, 3923287586, Spawn) + AddConversationOption(conversation, "I know very little, other than it appears to be very old and quite angry. I don't believe it enjoys visitors.", "Quest4Chat_2") + StartConversation(conversation, NPC, Spawn, "Monstrous? I see. Tell me of this creature you speak of.") +end + +function Quest4Chat_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "thirin_veliumdelver/halas/cragged_spine/thirin_veliumdelver_cave017.mp3", "", "", 4283075830, 3738516832, Spawn) + AddConversationOption(conversation, "It's " .. GetName(Spawn) .. ".", "OfferSeekingEducation") + StartConversation(conversation, NPC, Spawn, "This is most troubling, my friend. We are not prepared for this. I was rash and quick to judge the situation. I regret venturing into these blasted caverns. What have we awakened? Ordin will not have died in vain, I swear it. We must speak with Torli, she will know what to do. Adventurer, what is yer name? You've done so much and I never had the time to ask.") +end + +function OfferRyGorrOperations(NPC, Spawn) + OfferQuest(NPC, Spawn, RyGorrOperations) +end + +function OfferGoodDistraction(NPC, Spawn) + OfferQuest(NPC, Spawn, GoodDistraction) +end + +function OfferSleetfootParty(NPC, Spawn) + OfferQuest(NPC, Spawn, SleetfootParty) +end + +function OfferSeekingEducation(NPC, Spawn) + OfferQuest(NPC, Spawn, SeekingEducation) +end \ No newline at end of file diff --git a/server/SpawnScripts/FrostfangSea/ThirinVeliumdelver_(spine).lua b/server/SpawnScripts/FrostfangSea/ThirinVeliumdelver_(spine).lua new file mode 100644 index 000000000..046d9cca3 --- /dev/null +++ b/server/SpawnScripts/FrostfangSea/ThirinVeliumdelver_(spine).lua @@ -0,0 +1,224 @@ +--[[ + Script Name : SpawnScripts/FrostfangSea/ThirinVeliumdelver_(spine).lua + Script Purpose : Thirin Veliumdelver + Script Author : theFoof + Script Date : 2013.06.09 + Script Notes : +--]] + +local NothingWaste = 56 + +local RoughingReinforcements = 57 + +local ThroughEyes = 58 + +local BelowWaves = 59 + +local RyGorrOperations = 60 + +local NapEvigis = 64 + +function spawn(NPC) + AddSpawnAccess(NPC, NPC) + SetPlayerProximityFunction(NPC, 50, "SpawnAccess", "SpawnAccess") + ProvidesQuest(NPC, NothingWaste) + ProvidesQuest(NPC, RoughingReinforcements) + ProvidesQuest(NPC, ThroughEyes) + ProvidesQuest(NPC, BelowWaves) +end + +function respawn(NPC) + spawn(NPC) +end + +function SpawnAccess(NPC, Spawn) + if HasCompletedQuest(Spawn, NapEvigis) then + AddSpawnAccess(NPC, Spawn) + elseif not HasCompletedQuest(Spawn, RyGorrOperations) and not HasQuest(Spawn, RyGorrOperations) then + AddSpawnAccess(NPC, Spawn) + end +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + if not HasCompletedQuest(Spawn, NothingWaste) and not HasQuest(Spawn, NothingWaste) then + PlayFlavor(NPC, "thirin_veliumdelver/halas/thirin_veliumdelver/thirin_veliumdelver001.mp3", "", "", 3958889097, 419690768, Spawn) + AddConversationOption(conversation, "Would you happen to be Thirin? I heard you might need help here.", "Quest1Chat_1") + StartConversation(conversation, NPC, Spawn, "What do ye want, whelp? Can't you see I'm a bit busy with defending the Cragged Spine!?") + elseif GetQuestStep(Spawn, NothingWaste) == 1 or GetQuestStep(Spawn, ThroughEyes) == 1 or GetQuestStep(Spawn, BelowWaves) == 1 or GetQuestStep(Spawn, BelowWaves) == 2 then + BrellConvo(NPC, Spawn) + elseif GetQuestStep(Spawn, NothingWaste) == 4 then + SetStepComplete(Spawn, NothingWaste, 4) + PlayFlavor(NPC, "thirin_veliumdelver/halas/thirin_veliumdelver/thirin_veliumdelver008.mp3", "", "", 2278681822, 876133756, Spawn) + AddConversationOption(conversation, "I'm glad I could be of some use.", "Quest2Chat_1") + StartConversation(conversation, NPC, Spawn, "Ah, you've succeeded. Perhaps ye're not all that useless after all, adventurer. These will do nicely. I'll have one of my men take a look at these, fix them up, and have them distributed among the forces.") + elseif HasCompletedQuest(Spawn, NothingWaste) and not HasCompletedQuest(Spawn, RoughingReinforcements) and not HasQuest(Spawn, RoughingReinforcements) then + Quest2Chat_2(NPC, Spawn) + elseif HasQuest(Spawn, RoughingReinforcements) and GetQuestStep(Spawn, RoughingReinforcements) ~= 6 then + BrellConvo(NPC, Spawn) + elseif GetQuestStep(Spawn, RoughingReinforcements) == 6 then + SetStepComplete(Spawn, RoughingReinforcements, 6) + PlayFlavor(NPC, "thirin_veliumdelver/halas/thirin_veliumdelver/thirin_veliumdelver013.mp3", "", "", 1378985878, 3460156375, Spawn) + AddConversationOption(conversation, "Yes, and I found this scrying eye off of one of the war shamans. I thought it might be useful.", "Quest3Chat_1") + StartConversation(conversation, NPC, Spawn, "You return. What news? Were yer skirmishes with the enemy successful?") + elseif HasCompletedQuest(Spawn, RoughingReinforcements) and not HasCompletedQuest(Spawn, ThroughEyes) and not HasQuest(Spawn, ThroughEyes) then + Quest3Chat_1(NPC, Spawn) + elseif GetQuestStep(Spawn, ThroughEyes) == 2 then + SetStepComplete(Spawn, ThroughEyes, 2) + PlayFlavor(NPC, "thirin_veliumdelver/halas/thirin_veliumdelver/thirin_veliumdelver017.mp3", "", "", 4179496210, 3494173244, Spawn) + AddConversationOption(conversation, "I was. I saw through an orc who swam beneath the waves. He entered an underwater tunnel leading to the center of Erollis. Beyond that I do not know. It seems the spell is restricted by distance.", "Quest4Chat_1") + StartConversation(conversation, NPC, Spawn, "You've survived? I had heard reports that an adventurer fell to the Ry'Gorr not long ago. I'm glad to see my spy survived to tell what he's found. Were you successful in using the eye?") + elseif HasCompletedQuest(Spawn, ThroughEyes) and not HasCompletedQuest(Spawn, BelowWaves) and not HasQuest(Spawn, BelowWaves) then + Quest4Chat_1(NPC, Spawn) + elseif GetQuestStep(Spawn, BelowWaves) == 3 then + SetStepComplete(Spawn, BelowWaves, 3) + PlayFlavor(NPC, "thirin_veliumdelver/halas/thirin_veliumdelver/thirin_veliumdelver021.mp3", "", "", 3523614178, 2692776069, Spawn) + AddConversationOption(conversation, "They have dug a series of mining tunnels throughout the interior of Erollis, many in the direction of New Halas. I fear they mean to attack from below.", "Quest5Chat_1") + StartConversation(conversation, NPC, Spawn, "What have you found? What are they doing below my lands?") + elseif HasCompletedQuest(Spawn, BelowWaves) and not HasCompletedQuest(Spawn, NapEvigis) then + Quest5Chat_1(NPC, Spawn) + else + PlayFlavor(NPC, "", "Hello my friend. It is good to see you.", "hello", 0, 0, Spawn) + end +end + +function BrellConvo(NPC, Spawn) + PlayFlavor(NPC, "", "May Brell protect you and ensure your return.", "", 1689589577, 4560189, Spawn) +end + +function Quest1Chat_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "thirin_veliumdelver/halas/thirin_veliumdelver/thirin_veliumdelver002.mp3", "", "", 1122391828, 935093555, Spawn) + AddConversationOption(conversation, "Do you have work for me or not?", "Quest1Chat_2") + StartConversation(conversation, NPC, Spawn, "Oh, you want to help, do ye? Want to be some great hero now, huh? Well isn't that just grand.") +end + +function Quest1Chat_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "thirin_veliumdelver/halas/thirin_veliumdelver/thirin_veliumdelver003.mp3", "", "", 1628251409, 1305821623, Spawn) + AddConversationOption(conversation, "Good, just tell me what needs to be done.", "Quest1Chat_3") + StartConversation(conversation, NPC, Spawn, "Fine, fine, I can come up with something for ye to help with.") +end + +function Quest1Chat_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "thirin_veliumdelver/halas/thirin_veliumdelver/thirin_veliumdelver004.mp3", "", "", 1710386030, 2555471318, Spawn) + AddConversationOption(conversation, "So I am to return to The Great Shelf for weapons and armor?", "Quest1Chat_4") + StartConversation(conversation, NPC, Spawn, "Well, we've been holding the Cragged Spine for some time now. So long in fact our equipment is starting to wear, rust or break. Broken bows, snapped swords, destroyed chainmail, it's getting worse by the hour.") +end + +function Quest1Chat_4(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "thirin_veliumdelver/halas/thirin_veliumdelver/thirin_veliumdelver006.mp3", "", "", 807741417, 1254276267, Spawn) + AddConversationOption(conversation, "Alright, Thirin. I'll help you.", "OfferNothingWaste") + AddConversationOption(conversation, "I'm sorry, but there are more important things I could be doing.") + StartConversation(conversation, NPC, Spawn, "No, you won't be returning. That would take too long. We will be taking the armor off the backs of those we've slain. It sounds crude, but it will be effective. I hate to have my men wearing orcish armor, but no battle was ever won by looking fancy or wearing equipment that fit you.") +end + +function Quest2Chat_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "thirin_veliumdelver/halas/thirin_veliumdelver/thirin_veliumdelver009.mp3", "", "", 3384327104, 2564907110, Spawn) + AddConversationOption(conversation, "Surely you can hold them here, now that you are better equipped.", "Quest2Chat_2") + StartConversation(conversation, NPC, Spawn, "Watching those orcs realize we are using their equipment in our defenses will be entertaining. For that I thank ye adventurer. With my troops now reinforced I can turn my eyes to the larger threat. The Ry'Gorr, as they call themselves, have been attacking from the Jagged Daggers Isle, across the waves to the south. I fear their re-enforcements will arrive swiftly and with renewed purpose.") +end + +function Quest2Chat_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "thirin_veliumdelver/halas/thirin_veliumdelver/thirin_veliumdelver010.mp3", "", "", 684443689, 2994100029, Spawn) + AddConversationOption(conversation, "Thirin, your troops need you here. Morale is often frail, supported by a strong foundation. You are that foundation. ", "Quest2Chat_3") + StartConversation(conversation, NPC, Spawn, "I think not. What we've seen thus far is only a small part of their forces. They underestimated us, but now they know to send more orcs if they are to take the beach. No, in this situation there is only one thing we can do. Take the fight to them. Come, we leave at once for the Jagged Daggers Isle. I'm tired of sitting about in waiting. I was never one for defense.") +end + +function Quest2Chat_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "thirin_veliumdelver/halas/thirin_veliumdelver/thirin_veliumdelver011.mp3", "", "", 4204960887, 1557606971, Spawn) + AddConversationOption(conversation, "I will leave at once for the isle. I won't let them take the beach.", "OfferRoughingReinforcements") + AddConversationOption(conversation, "I am sorry, but there is something more important I must take care of first.") + StartConversation(conversation, NPC, Spawn, "Hmm, well said, adventurer. Very well, I shall send you in my stead, as you've proven you can be somewhat dependable. Travel to the Jagged Daggers Isle, across the waves to the south and show them we are not to be underestimated. Destroy what forces and equipment you can and keep an eye out for their war shamans. They have the ability to scry our encampment. If you happen to combat them it will help conceal our positioning.") +end + +function Quest3Chat_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "thirin_veliumdelver/halas/thirin_veliumdelver/thirin_veliumdelver014.mp3", "", "", 6970253, 3066757715, Spawn) + AddConversationOption(conversation, "There you are, I hope it will be useful.", "Quest3Chat_2") + StartConversation(conversation, NPC, Spawn, "A scrying eye you say. That's what they use to spy on our forces. I can't believe you were able to get one. Let me have a look. If we're lucky it will have already been imbued with their scrying magics.") +end + +function Quest3Chat_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "thirin_veliumdelver/halas/thirin_veliumdelver/thirin_veliumdelver015.mp3", "", "", 3051702043, 2201190917, Spawn) + AddConversationOption(conversation, "It's good we are in possession of this then. I am sure I can find a Ry'Gorr to use this on.", "OfferThroughEyes") + AddConversationOption(conversation, "Spying and magic aren't really my thing.") + StartConversation(conversation, NPC, Spawn, "Hmm. We are in luck adventurer. This has already been imbued with the magics that allow the Ry'Gorr to spy on us. Meaning we can use it against them and maybe learn something new to aid us. All ye need do is find a Ry'Gorr to use the eye on and you'll be able to see what he sees. That's how it works, you see? It allows you to see through the eyes of another, just by pressing the eye against the skin.") +end + +function Quest4Chat_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "thirin_veliumdelver/halas/thirin_veliumdelver/thirin_veliumdelver018.mp3", "", "", 3389054723, 425793469, Spawn) + AddConversationOption(conversation, "I haven't a clue, but I intend to find out.", "Quest4Chat_2") + StartConversation(conversation, NPC, Spawn, "They are below us? This is quite unexpected. What are they doing down there? What are they planning?") +end + +function Quest4Chat_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "thirin_veliumdelver/halas/thirin_veliumdelver/thirin_veliumdelver020.mp3", "", "", 3456248509, 1625770921, Spawn) + AddConversationOption(conversation, "That's awesome!", "OfferBelowWaves") + StartConversation(conversation, NPC, Spawn, "Don't go just yet, " .. GetName(Spawn) .. ". I have something to help ye! It's a Totem of the Iceclad Manta. It will grant ye the shape of an Iceclad manta and the gills and vision of one, to boot!") +end + +function Quest5Chat_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "thirin_veliumdelver/halas/thirin_veliumdelver/thirin_veliumdelver022.mp3", "", "", 4095447714, 560323533, Spawn) + AddConversationOption(conversation, "Before we travel below, know I have found some sort of cave-in. It looks to have been recently built by the orcs, though I know not for what purpose. It's very strange.", "Quest5Chat_2") + StartConversation(conversation, NPC, Spawn, "Confound it! This is what I was afraid of. There may not be enough time to warn the city before they attack, we're going to have to go down there and stop the Ry'Gorr ourselves. ") +end + +function Quest5Chat_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "thirin_veliumdelver/halas/thirin_veliumdelver/thirin_veliumdelver023.mp3", "", "", 1522066613, 3536237484, Spawn) + AddConversationOption(conversation, "See you below then.") + StartConversation(conversation, NPC, Spawn, "A cave-in you say? I'll take a look once I've reached the inside. This time I go; my men will be able to handle things here, thanks to ye. Meet me at the cave's entrance, adventurer. I'll have inspected this cave-in ye speak of by then.") +end + +function OfferNothingWaste(NPC, Spawn) + OfferQuest(NPC, Spawn, NothingWaste) +end + +function OfferRoughingReinforcements(NPC, Spawn) + OfferQuest(NPC, Spawn, RoughingReinforcements) +end + +function OfferThroughEyes(NPC, Spawn) + OfferQuest(NPC, Spawn, ThroughEyes) +end + +function OfferBelowWaves(NPC, Spawn) + OfferQuest(NPC, Spawn, BelowWaves) +end \ No newline at end of file diff --git a/server/SpawnScripts/FrostfangSea/TimelessChronomage.lua b/server/SpawnScripts/FrostfangSea/TimelessChronomage.lua new file mode 100644 index 000000000..a76f878fd --- /dev/null +++ b/server/SpawnScripts/FrostfangSea/TimelessChronomage.lua @@ -0,0 +1,19 @@ +--[[ + Script Name : SpawnScripts/FrostfangSea/TimelessChronomage.lua + Script Purpose : Timeless Chronomage + Script Author : theFoof + Script Date : 2013.10.30 + Script Notes : +--]] + +function spawn(NPC) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + PlayFlavor(NPC, "", "Greetings! Would you like me to chronolock you? For a small fee of course...", "hello", 0, 0, Spawn) +end \ No newline at end of file diff --git a/server/SpawnScripts/FrostfangSea/TorliBlackbow.lua b/server/SpawnScripts/FrostfangSea/TorliBlackbow.lua new file mode 100644 index 000000000..4a5c592e9 --- /dev/null +++ b/server/SpawnScripts/FrostfangSea/TorliBlackbow.lua @@ -0,0 +1,158 @@ +--[[ + Script Name : SpawnScripts/FrostfangSea/TorliBlackbow.lua + Script Purpose : Torli Blackbow + Script Author : theFoof + Script Date : 2013.06.13 + Script Notes : +--]] + +local SeekingEducation = 63 + +local NapEvigis = 64 + +function spawn(NPC) + ProvidesQuest(NPC, NapEvigis) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + if GetQuestStep(Spawn, SeekingEducation) == 1 then + PlayFlavor(NPC, "torli_blackbow/halas/new_halas_guard_house/torli_blackaxe_001.mp3", "", "", 3560007019, 2375962342, Spawn) + AddConversationOption(conversation, "My name is " .. GetName(Spawn) .. ". I was sent by Thirin Veliumdelver.", "Quest1Chat_1") + StartConversation(conversation, NPC, Spawn, "Who have we here?") + elseif GetQuestStep(Spawn, SeekingEducation) == 2 then + PlayFlavor(NPC, "", "Speak with Gerla Meltwater. She is our wisest spellweaver. You'll find her in Glacierbane's Vault, in New Halas.", "nod", 0, 0, Spawn) + elseif GetQuestStep(Spawn, SeekingEducation) == 3 then + PlayFlavor(NPC, "torli_blackbow/halas/new_halas_guard_house/torli_blackaxe_008.mp3", "", "", 3421952794, 3873415326, Spawn) + AddConversationOption(conversation, "She sent me back with this satchel for you.", "Quest1Chat_7") + StartConversation(conversation, NPC, Spawn, "Ye return, " .. GetName(Spawn) .. "! Tell me, what did Spellweaver Meltwater advise?") + elseif HasCompletedQuest(Spawn, SeekingEducation) and not HasCompletedQuest(Spawn, NapEvigis) and not HasQuest(Spawn, NapEvigis) then + Quest2Chat_1(NPC, Spawn) + elseif GetQuestStep(Spawn, NapEvigis) == 1 then + PlayFlavor(NPC, "", "Brell's blessings upon ye as ye face Evigis, brave one!", "agree", 0, 0, Spawn) + elseif GetQuestStep(Spawn, NapEvigis) == 2 then + AddConversationOption(conversation, "I did. Evigis the Ancient slumbers, once more.", "Quest2Chat_4") + StartConversation(conversation, NPC, Spawn, "Ye return and such a sight ye are! Did you succeed, " .. GetName(Spawn) .. "?") + elseif HasCompletedQuest(Spawn, NapEvigis) then + PlayFlavor(NPC, "", "My, look what drifted in with the snow! Welcome back, brave one!", "hello", 0, 0, Spawn) + end +end + +function Quest1Chat_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "torli_blackbow/halas/new_halas_guard_house/torli_blackaxe_002.mp3", "", "", 1601353175, 2170594653, Spawn) + AddConversationOption(conversation, "We found a large ice and velium elemental living below New Halas!", "Quest1Chat_2") + StartConversation(conversation, NPC, Spawn, "Veliumdelver? That stubborn stone's stationed at Cragged Spine. Why would he send ye to me?") +end + +function Quest1Chat_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "torli_blackbow/halas/new_halas_guard_house/torli_blackaxe_003.mp3", "", "", 3538220054, 491792113, Spawn) + AddConversationOption(conversation, "It killed Ordin Sleetfoot.", "Quest1Chat_3") + StartConversation(conversation, NPC, Spawn, "Are you certain, " .. GetName(Spawn) .. "?") +end + +function Quest1Chat_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "torli_blackbow/halas/new_halas_guard_house/torli_blackaxe_004.mp3", "", "", 1850979310, 1092709933, Spawn) + AddConversationOption(conversation, "We could go in and kill it.", "Quest1Chat_4") + AddConversationOption(conversation, "Me too.", "Quest1Chat_5") + StartConversation(conversation, NPC, Spawn, "Brell damn it! If the ongoing struggle with the brutal Ry'Gorr wasn't enough. I am glad ye told me. I just wish I knew what to do.") +end + +function Quest1Chat_4(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "torli_blackbow/halas/new_halas_guard_house/torli_blackaxe_005.mp3", "", "", 2755216840, 3266695694, Spawn) + AddConversationOption(conversation, "I know.", "Quest1Chat_5") + AddConversationOption(conversation, "It was worth a shot.", "Quest1Chat_5") + AddConversationOption(conversation, "Says you.", "Quest1Chat_5") + StartConversation(conversation, NPC, Spawn, "Ha! Violence is an answer, but not necessarily THE answer, brave one.") +end + +function Quest1Chat_5(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "torli_blackbow/halas/new_halas_guard_house/torli_blackaxe_006.mp3", "", "", 2649012761, 1864543312, Spawn) + AddConversationOption(conversation, "Glacierbane's Vault?", "Quest1Chat_6") + StartConversation(conversation, NPC, Spawn, "Speak with Gerla Meltwater. She is our wisest spellweaver. You'll find her in Glacierbane's Vault, in New Halas.") +end + +function Quest1Chat_6(NPC, Spawn) + SetStepComplete(Spawn, SeekingEducation, 1) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "torli_blackbow/halas/new_halas_guard_house/torli_blackaxe_007.mp3", "", "", 1644016563, 4176143932, Spawn) + AddConversationOption(conversation, "I'll speak with her.") + StartConversation(conversation, NPC, Spawn, "It is our house of arcane knowledge and library to the Spear of the Spellweavers, our battle hardened mages. She'll know what to do.") +end + +function Quest1Chat_7(NPC, Spawn) + if HasItem(Spawn, 7666) then + RemoveItem(Spawn, 7666) + end + SetStepComplete(Spawn, SeekingEducation, 3) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "torli_blackbow/halas/new_halas_guard_house/torli_blackaxe_009.mp3", "", "", 2780367632, 539709516, Spawn) + AddConversationOption(conversation, "Thank you.", "Quest2Chat_1") + StartConversation(conversation, NPC, Spawn, "Thank ye, and take this. I got a feeling it will be useful.") +end + +function Quest2Chat_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "torli_blackbow/halas/new_halas_guard_house/torli_blackaxe_010.mp3", "", "", 1175740555, 3997329463, Spawn) + AddConversationOption(conversation, "What do you mean?", "Quest2Chat_2") + StartConversation(conversation, NPC, Spawn, "Once more it seems we must lean on you, brave one.") +end + +function Quest2Chat_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "torli_blackbow/halas/new_halas_guard_house/torli_blackaxe_011.mp3", "", "", 772395501, 910422100, Spawn) + AddConversationOption(conversation, "What did it say?", "Quest2Chat_3") + StartConversation(conversation, NPC, Spawn, "Gerla's satchel contained a potion and a note.") +end + +function Quest2Chat_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "torli_blackbow/halas/new_halas_guard_house/torli_blackaxe_012.mp3", "", "", 1978800607, 2542267623, Spawn) + AddConversationOption(conversation, "I can do that!", "OfferNapEvigis") + AddConversationOption(conversation, "I am not going back down there. No way!") + StartConversation(conversation, NPC, Spawn, "We must induce slumber, once more! Cast this spell upon the elemental, but first ye must be sure to tire it out. Inflict upon it great harm thus making it susceptible to the potion's magick.") +end + +function Quest2Chat_4(NPC, Spawn) + SetStepComplete(Spawn, NapEvigis, 2) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "Thank you.") + AddConversationOption(conversation, "I did what I could.") + AddConversationOption(conversation, "They had better!") + StartConversation(conversation, NPC, Spawn, "That is a relief to one and all! Ye've accomplished great things on our floating land. No doubt songs of your success will be sung at The Ice Breaker this night!") +end + +function OfferNapEvigis(NPC, Spawn) + OfferQuest(NPC, Spawn, NapEvigis) +end \ No newline at end of file diff --git a/server/SpawnScripts/FrostfangSea/TornalHaymaker.lua b/server/SpawnScripts/FrostfangSea/TornalHaymaker.lua new file mode 100644 index 000000000..c9d2d2261 --- /dev/null +++ b/server/SpawnScripts/FrostfangSea/TornalHaymaker.lua @@ -0,0 +1,69 @@ +--[[ + Script Name : SpawnScripts/FrostfangSea/TornalHaymaker.lua + Script Purpose : bruiser trainer + Script Author : theFoof + Script Date : 2013.9.24 + Script Notes : +--]] + +local BRUISER = 7 + +function spawn(NPC) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + if GetClass(Spawn) == BRUISER then + conversation = CreateConversation() + PlayFlavor(NPC, "", "", "hello", 0, 0, Spawn) + AddConversationOption(conversation, "What advice do you have for a another bruiser?", "BruisChat1") + AddConversationOption(conversation, "It does, doesn't it? Good bye.") + StartConversation(conversation, NPC, Spawn, "You need not tell me that you are a fellow. bruiser. Your intimidating presence made that clear, my friend.") + else + PlayFlavor(NPC, "", "Idle chat is useless. If you are not here to train, then leave.", "hello", 0, 0, Spawn) + end +end + +function BruisChat1(NPC, Spawn) + conversation = CreateConversation() + FaceTarget(NPC, Spawn) + + AddConversationOption(conversation, "That's useful to know!", "BruisChat2") + StartConversation(conversation, NPC, Spawn, "If you find items that add to your strength or stamina, be sure to get them! Strength increases the amount of damage your attacks can inflict on others and raises your ability to carry heavy weight. Your stamina affects your health. This is crucial.") +end + +function BruisChat2(NPC, Spawn) + conversation = CreateConversation() + FaceTarget(NPC, Spawn) + + AddConversationOption(conversation, "That's good to know.", "BruisChat3") + StartConversation(conversation, NPC, Spawn, "But first and foremost, you should know the power that flows through you. We focus our minds and bodies through sheer force of will in order to withstand attacks and reduce the amount of damage inflicted upon us.") +end + +function BruisChat3(NPC, Spawn) + conversation = CreateConversation() + FaceTarget(NPC, Spawn) + + AddConversationOption(conversation, "That's interesting.", "BruisChat4") + StartConversation(conversation, NPC, Spawn, "But our discipline offers a great deal more than just defense. We are masters of physical combat! We have transformed our bodies into vicious weapons to inflict pain and suffering upon any who dare to oppose us! This allows us to often hold a foe's attention, giving our allies a chance to attack it, too.") +end + +function BruisChat4(NPC, Spawn) + conversation = CreateConversation() + FaceTarget(NPC, Spawn) + + AddConversationOption(conversation, "That's interesting.", "BruisChat5") + StartConversation(conversation, NPC, Spawn, "And although we excel at hand to hand combat, some bruisers wield staves or hammers. Such weapons are simply an extension of yourself and can be equally effective at inflicting damage or deflecting an attacker's blade.") +end + +function BruisChat5(NPC, Spawn) + conversation = CreateConversation() + FaceTarget(NPC, Spawn) + + AddConversationOption(conversation, "Thank you for the advice.") + StartConversation(conversation, NPC, Spawn, "And protect yourself as best you can in leather, " .. GetName(Spawn) .. ". An encumbering suit of armor would only get in your way while you brutalize your foes with your relentless attacks.") +end \ No newline at end of file diff --git a/server/SpawnScripts/FrostfangSea/TorvilBeastamer.lua b/server/SpawnScripts/FrostfangSea/TorvilBeastamer.lua new file mode 100644 index 000000000..cee427c49 --- /dev/null +++ b/server/SpawnScripts/FrostfangSea/TorvilBeastamer.lua @@ -0,0 +1,31 @@ +--[[ + Script Name : SpawnScripts/FrostfangSea/TorvilBeastamer.lua + Script Purpose : Torvil Beastamer + Script Author : theFoof + Script Date : 2013.10.29 + Script Notes : +--]] + +require"SpawnScripts/FrostfangSea/halas_proximity_cheer" + +function spawn(NPC) + SetPlayerProximityFunction(NPC, 15, "ProxCheer") +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + + local choice = math.random(1,3) + if choice == 1 then + PlayFlavor(NPC, "", "Tail or beak, I got what ye seek!", "wink", 1689589577, 4560189, Spawn) + elseif choice == 2 then + PlayFlavor(NPC, "", "Haven't a friend in the world? Buy one from me!", "nod", 0, 0, Spawn) + elseif choice == 3 then + PlayFlavor(NPC, "", "Warm up yer house with a pet, my friend!", "hello", 0, 0, Spawn) + end +end + diff --git a/server/SpawnScripts/FrostfangSea/TotemoftheIcecladManta.lua b/server/SpawnScripts/FrostfangSea/TotemoftheIcecladManta.lua new file mode 100644 index 000000000..689087603 --- /dev/null +++ b/server/SpawnScripts/FrostfangSea/TotemoftheIcecladManta.lua @@ -0,0 +1,35 @@ +--[[ + Script Name : SpawnScripts/FrostfangSea/TotemoftheIcecladManta.lua + Script Purpose : for the totem of the iceclad manta spawn + Script Author : theFoof + Script Date : 2013.06.11 + Script Notes : +--]] + +local BelowWaves = 59 + +function spawn(NPC) + AddSpawnAccess(NPC, NPC) + SetPlayerProximityFunction(NPC, 50, "SpawnAccess", "SpawnAccess") +end + +function respawn(NPC) + spawn(NPC) +end + +function SpawnAccess(NPC, Spawn) + if HasCompletedQuest(Spawn, BelowWaves) or HasQuest(Spawn, BelowWaves) then + if not HasItem(Spawn, 48603) then + AddSpawnAccess(NPC, Spawn) + end + end +end + +function casted_on(NPC, Spawn, SpellName) + if SpellName == 'Gather Totem of the Iceclad Manta' then + if not HasItem(Spawn, 48603) then + SummonItem(Spawn, 48603, 1) + RemoveSpawnAccess(NPC, Spawn) + end + end +end \ No newline at end of file diff --git a/server/SpawnScripts/FrostfangSea/TovaGilbride.lua b/server/SpawnScripts/FrostfangSea/TovaGilbride.lua new file mode 100644 index 000000000..6144fea69 --- /dev/null +++ b/server/SpawnScripts/FrostfangSea/TovaGilbride.lua @@ -0,0 +1,53 @@ +--[[ + Script Name : SpawnScripts/FrostfangSea/TovaGillbride.lua + Script Purpose : wizard trainer in Halas + Script Author : theFoof + Script Date : 2013.9.24 + Script Notes : +--]] + +local WIZARD = 23 + +function spawn(NPC) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + if GetClass(Spawn) == WIZARD then + conversation = CreateConversation() + PlayFlavor(NPC, "", "", "hello", 0, 0, Spawn) + AddConversationOption(conversation, "Do you have any advice for a fellow wizard?", "WizChat1") + AddConversationOption(conversation, "It is, isn't it? Good day.") + StartConversation(conversation, NPC, Spawn, "Good day to you, fellow student of wizardry. It's amazing to see how many of us have talents for the arcane.") + else + PlayFlavor(NPC, "", "Hmm! Hmm! Hmm!", "hello", 0, 0, Spawn) + end +end + +function WizChat1(NPC, Spawn) + conversation = CreateConversation() + FaceTarget(NPC, Spawn) + + AddConversationOption(conversation, "That's useful to know!", "WizChat2") + StartConversation(conversation, NPC, Spawn, "If you find items that add to your intelligence or stamina, then take them! Intelligence affects your spell focus and increases the damage your spells can cause. Your stamina affects your health. This is crucial!") +end + +function WizChat2(NPC, Spawn) + conversation = CreateConversation() + FaceTarget(NPC, Spawn) + + AddConversationOption(conversation, "That's interesting.", "WizChat3") + StartConversation(conversation, NPC, Spawn, "Know your strengths and hone them! We can unleash the purest forms of destruction upon our foes by harnessing the arcane powers of fire and ice. This is true whether you are battling a single opponent or a group.") +end + +function WizChat3(NPC, Spawn) + conversation = CreateConversation() + FaceTarget(NPC, Spawn) + + AddConversationOption(conversation, "Thank you for the advice.") + StartConversation(conversation, NPC, Spawn, "Rely not on your defenses. You are stronger than that! There is no need to concern yourself with defenses when your foe has been slain by the devastating elements!") +end \ No newline at end of file diff --git a/server/SpawnScripts/FrostfangSea/TrainerAleksSilverhelm.lua b/server/SpawnScripts/FrostfangSea/TrainerAleksSilverhelm.lua new file mode 100644 index 000000000..eb219d455 --- /dev/null +++ b/server/SpawnScripts/FrostfangSea/TrainerAleksSilverhelm.lua @@ -0,0 +1,212 @@ +--[[ + Script Name : SpawnScripts/FrostfangSea/TrainerAleksSilverhelm.lua + Script Purpose : Trainer Aleks Silverhelm + Script Author : theFoof + Script Date : 2013.5.18 + Script Notes : +--]] + +function spawn(NPC) + SetPlayerProximityFunction(NPC, 10, "InRange", "LeaveRange") +end + +function respawn(NPC) + spawn(NPC) +end + +function InRange(NPC, Spawn) +end + +function LeaveRange(NPC, Spawn) +end + +function hailed(NPC, Spawn) + first_chat(NPC, Spawn) +end + +function first_chat(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + local choice = math.random(1,3) + if choice == 1 then + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_3_1010.mp3", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Let us begin.", "dlg_7_1") + AddConversationOption(conversation, "I will return later.") + StartConversation(conversation, NPC, Spawn, "I am here to explain something very important: how your Spells, Combat Arts, and Abilities work, as well as how to improve them.") + elseif choice == 2 then + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_1_1010.mp3", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Let us begin.", "dlg_7_1") + AddConversationOption(conversation, "I will return later.") + StartConversation(conversation, NPC, Spawn, "I am here to explain something very important: how your Spells, Combat Arts, and Abilities work, as well as how to improve them.") + elseif choice == 3 then + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_2_1010.mp3", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Let us begin.", "dlg_7_1") + AddConversationOption(conversation, "I will return later.") + StartConversation(conversation, NPC, Spawn, "I am here to explain something very important: how your Spells, Combat Arts, and Abilities work, as well as how to improve them.") + end +end +function dlg_7_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Tell me about Spells.", "dlg_7_2") + AddConversationOption(conversation, "Tell me about Combat Arts.", "dlg_7_5") + AddConversationOption(conversation, "Tell me about Abilities.", "dlg_7_8") + AddConversationOption(conversation, "Where do I find my Spells, Combat Arts, and Abilities?", "dlg_7_11") + AddConversationOption(conversation, "How do I obtain and improve my Spells and Combat Arts?", "dlg_7_14") + AddConversationOption(conversation, "I will return for instruction later.") + StartConversation(conversation, NPC, Spawn, "I am here to answer your questions. What can I help you with?") +end + +function dlg_7_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Who uses Spells?", "dlg_7_3") + AddConversationOption(conversation, "I will return for instruction later.") + StartConversation(conversation, NPC, Spawn, "A Spell is a magical ability, and spells have a variety of uses. Some allow you to damage an enemy, while others might provide benefits to yourself or an ally. You can hold your mouse pointer over a Spell's icon to see a description of what it does, or right-click on it and select 'Examine.'") +end + +function dlg_7_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "I have more questions.", "dlg_7_4") + AddConversationOption(conversation, "I will return for instruction later.") + StartConversation(conversation, NPC, Spawn, "Mages, priests, paladins, shadowknights, troubadors, and dirges all cast Spells. Each class has a list of Spells that's unique. While other classes may have similar Spells, no one has capabilities exactly like that of another class. Also, certain magical items may be imbued with Spell effects that can be cast or that activate on their own.") +end + +function dlg_7_5(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Who uses Combat Arts?") + AddConversationOption(conversation, "I will return for instruction later.", "dlg_7_6") + StartConversation(conversation, NPC, Spawn, "Combat Arts are a lot like Spells, but they usually take less time to cast and cannot be interrupted. As their name implies, many Combat Arts focus on some aspect of battle.") +end + +function dlg_7_6(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "I have more questions.", "dlg_7_1") + AddConversationOption(conversation, "I will return for instruction later.") + StartConversation(conversation, NPC, Spawn, "All fighters and scouts use Combat Arts. Each of these classes has unique Combat Arts that help distinguish them from other classes. Combat Arts have names and effects that fit the class that uses them.") +end + +function dlg_7_8(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "How are Abilities different from Spells and Combat Arts?", "dlg_7_9") + AddConversationOption(conversation, "I will return for instruction later.") + StartConversation(conversation, NPC, Spawn, "Abilities are general things your character can do, along with certain capabilities specific to your race. Some of your Abilities are extremely useful, such as Sprint, which allows you to run very fast for a short period of time. You can also Call for Help when you're in danger, or launch a Ranged Attack if you have a ranged weapon and, of course, ammo.") +end + +function dlg_7_9(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "I have more questions.", "dlg_7_1") + AddConversationOption(conversation, "I will return for instruction later.") + StartConversation(conversation, NPC, Spawn, "Unlike Spells and Combat Arts, Abilities cannot be upgraded. Most of your Abilities are received when you first begin your adventures in Norrath, although certain new ones can be granted as you become more experienced.") +end + +function dlg_7_11(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "How do I use my Spells, Combat Arts, and Abilities?", "dlg_7_12") + AddConversationOption(conversation, "I will return for instruction later.") + StartConversation(conversation, NPC, Spawn, "All your Spells and Combat Arts, as well as other Abilities, are found in your Knowledge Book. Press the K key to open it at any time, and click the name of the tab you wish to view: Abilities, Spells, or Combat Arts.") +end + +function dlg_7_12(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "I have more questions.", "dlg_7_1") + AddConversationOption(conversation, "I will return for instruction later.") + StartConversation(conversation, NPC, Spawn, "To use a Spell, Combat Art, or Ability, drag its icon from your Knowledge Book onto your hotbar. Some have already been placed there for you. To use one, simply click its icon on your hotbar or press the key assigned to it. You can open additional hotbars by right-clicking on a hotbar and selecting 'Open New Hotbar.'") +end + +function dlg_7_14(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "How can I judge the effectiveness of my Spells and Combat Arts?", "dlg_7_15") + AddConversationOption(conversation, "I will return for further instruction later.") + StartConversation(conversation, NPC, Spawn, "Most of your Spells or Combat Arts are given to you as you advance in levels and will be automatically scribed in your Knowledge Book. Certain special Spells or Combat Arts can be obtained by doing quests.") +end + +function dlg_7_15(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "How can I improve my Spells and Combat Arts?", "dlg_7_16") + AddConversationOption(conversation, "I will return for further instruction later.") + StartConversation(conversation, NPC, Spawn, "There are six ranks of Spells and Combat Arts: Apprentice, Journeyman, Adept, Expert, Master and Grandmaster. Spells and Combat Arts that are automatically granted to you are usually given at the Apprentice rank. You should always try to have the highest rank of your Spells and Combat Arts, because they gain effectiveness as you improve them.") +end + +function dlg_7_16(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "What about other ranks of Spells and Arts?", "dlg_7_17") + AddConversationOption(conversation, "I will return later.") + StartConversation(conversation, NPC, Spawn, "Spells gained through quests or racial abilities are usually at their highest level and cannot be upgraded. Grandmaster spells are only available from your class training choices every ten levels starting at 14. You can see the choices by selecting the L key on your keyboard. ") +end + +function dlg_7_17(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Are there other ways to improve my Spells and Combat Arts?", "dlg_7_18") + AddConversationOption(conversation, "I will return later.") + StartConversation(conversation, NPC, Spawn, "You will also find more potent ranks of spells and arts as you defeat opponents in battle. Many enemies will carry Adept versions of Spells and Combat Arts, while conquering some extremely powerful foes may result in the extremely rare Master versions.") +end + +function dlg_7_18(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Are all my Spells and Combat Arts unique?", "dlg_7_19") + AddConversationOption(conversation, "I will return for further instruction later.") + StartConversation(conversation, NPC, Spawn, "In addition, certain crafters can make upgrades to your Spells and Combat Arts using harvested components. They can create Journeyman quality spells, as well as valuable Expert scrolls using rare components. Buying from or trading with other players is an excellent way to upgrade your Spells and Combat Arts.") +end + +function dlg_7_19(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "How can I keep all these Spells and Arts straight in my Knowledge Book?", "dlg_7_20") + AddConversationOption(conversation, "I will return for further instruction later.") + StartConversation(conversation, NPC, Spawn, "As you advance in level, you will obtain many completely new abilities as well as more effective versions of Spells or Combat Arts you have already learned. The background colors of the spell icon tell you its type. Beneficial spells have a yellow, orange or purple color, while attack spells have a red, green or blue color. ") +end + +function dlg_7_20(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "I have more questions.", "dlg_7_1") + AddConversationOption(conversation, "I will return for further instruction later.") + StartConversation(conversation, NPC, Spawn, "Your Spells and Combat Arts can easily be organized according to your individual, personal taste. Just open your Knowledge Book and click the 'Sort' button in the upper right corner. This allows you to organize your Spells and Arts for easy access to the abilities that you wish to use.") +end + diff --git a/server/SpawnScripts/FrostfangSea/TrainerCaelBlackstock.lua b/server/SpawnScripts/FrostfangSea/TrainerCaelBlackstock.lua new file mode 100644 index 000000000..1216702b5 --- /dev/null +++ b/server/SpawnScripts/FrostfangSea/TrainerCaelBlackstock.lua @@ -0,0 +1,172 @@ +--[[ + Script Name : SpawnScripts/FrostfangSea/TrainerCaelBlackstock.lua + Script Purpose : Trainer Cael Blackstock + Script Author : theFoof + Script Date : 2013.05.21 + Script Notes : +--]] + +function spawn(NPC) + SetPlayerProximityFunction(NPC, 10, "InRange", "LeaveRange") +end + +function respawn(NPC) + spawn(NPC) +end + +function InRange(NPC, Spawn) +end + +function LeaveRange(NPC, Spawn) +end + +function hailed(NPC, Spawn) + first_chat(NPC, Spawn) +end + +function first_chat(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_1_1002.mp3", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Tell me about items and equipment.", "equip_chat_1") + AddConversationOption(conversation, "Tell me about my inventory.", "inv_chat_1") + AddConversationOption(conversation, "I will return for instruction later.") + StartConversation(conversation, NPC, Spawn, "Well met. I'm here to teach our newest recruits about equipment and inventory space. Good equipment is one of the most important tools of any adventurer!") +end + +function equip_chat_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "What can I do with the treasures I earn while adventuring?", "equip_chat_2") + StartConversation(conversation, NPC, Spawn, "Norrath is full of treasures for brave heroes like you. Sometimes the opponents you defeat in battle leave behind treasure chests with valuable loot. You can also buy items from other players, craft them as an artisan, or be awarded items for completing quests.") +end + +function equip_chat_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "What does the item information tell me?", "equip_chat_3") + AddConversationOption(conversation, "I will return for instruction later.") + StartConversation(conversation, NPC, Spawn, "Some items you obtain can be equipped on your person. If you find weapons, armor, jewelry, or certain other goodies, you may be able to use them. To look at a piece of equipment and determine if you can use it, move your mouse pointer over the item.") +end + +function equip_chat_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Are things like attribute bonuses important?", "equip_chat_4") + AddConversationOption(conversation, "I will return for instruction later.") + StartConversation(conversation, NPC, Spawn, "For items that can be equipped, such as weapons and armor, mousing over it tells you which professions can use the item and at what level it can be equipped. You'll also see any benefits, such as attribute bonuses and resists, that the equipment provides.") +end + +function equip_chat_4(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "How can I tell which of two weapons is better?", "equip_chat_5") + AddConversationOption(conversation, "I will return for instruction later.") + StartConversation(conversation, NPC, Spawn, "A wise adventurer is always trying to improve his or her equipment. Whenever you see gear that provides an overall greater benefit than what you have, that item is an upgrade for you.") +end + +function equip_chat_5(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "How can I tell which of two pieces of armor is better?", "equip_chat_6") + AddConversationOption(conversation, "I will return for instruction later.") + StartConversation(conversation, NPC, Spawn, "Weapons have a Damage Rating that shows the relative damage you can do with them. A higher Damage Rating is always better. Be sure you are comparing weapons of the same type, such as a two-handed weapon with another two-hander, or one dual-wield weapon with another.") +end + +function equip_chat_6(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "What about scouts and priests?", "equip_chat_7") + AddConversationOption(conversation, "I will return for instruction later.") + StartConversation(conversation, NPC, Spawn, "How you judge armor depends on your profession. Fighters who take a beating care most about obtaining armor that has high Mitigation, which decreases the amount of damage they take. Mages, on the other hand, know they can't take much punishment anyway, so would rather have armor that provides nice attribute bonuses.") +end + +function equip_chat_7(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "What about scouts and priests?", "equip_chat_8") + AddConversationOption(conversation, "I will return for instruction later.") + StartConversation(conversation, NPC, Spawn, "How you judge armor depends on your profession. Fighters who take a beating care most about obtaining armor that has high Mitigation, which decreases the amount of damage they take. Mages, on the other hand, know they can't take much punishment anyway, so would rather have armor that provides nice attribute bonuses.") +end + +function equip_chat_8(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Why are some items marked 'No Value' or 'No Trade'?", "equip_chat_9") + AddConversationOption(conversation, "I will return for instruction later.") + StartConversation(conversation, NPC, Spawn, "An item can be sold to a non-player merchant for cash unless it has the 'No Value' flag on it. Items can be sold or traded to another player unless it has the 'No Trade' flag. If an item says it is 'Lore,' you can only have one of them on your character at a time.") +end + +function equip_chat_9(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, 'What does it mean when an item says it is "Attuneable"?', "equip_chat_10") + AddConversationOption(conversation, "I will return to instruction later.") + StartConversation(conversation, NPC, Spawn, 'Some items are marked "No Value" because they are easy to obtain, such as harvested goods. You have to work to earn wealth,' .. GetName(Spawn) .. '! Items are marked "No Trade" in order to ensure that you earn them yourself, such as defeating a very tough monster or completing a long quest.') +end + +function equip_chat_10(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "How do I manage my inventory?", "inv_chat_1") + StartConversation(conversation, NPC, Spawn, "If an item is marked 'Attuneable,' you must attune it to yourself before it provides any benefits. You'll notice a message on screen when you are wearing an item that must be attuned. To attune it, right-click on the item and select 'Attune.' Once attuned, that item can no longer be traded or sold to another player.") +end + +function inv_chat_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Can I put bags inside of bags?", "inv_chat_2") + AddConversationOption(conversation, "I will return for instruction later.") + StartConversation(conversation, NPC, Spawn, "Press the C key to open your character window. Beneath your portrait are six slots that can hold items. You can place bags or other containers in those slots, which will give you even more storage space. Press the B key to open all your bags at once.") +end + +function inv_chat_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "So one item takes up one bag slot?", "inv_chat_3") + AddConversationOption(conversation, "I will return for instruction later.") + StartConversation(conversation, NPC, Spawn, "Only empty bags can go inside other bags. For this reason, it's a good idea to get hold of containers with many slots. After a long night of adventuring or harvesting, you'll want to have as many places to store your goodies as possible.") +end + +function inv_chat_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "So one item takes up one bag slot?", "inv_chat_4") + AddConversationOption(conversation, "I will return for instruction later.") + StartConversation(conversation, NPC, Spawn, "Only empty bags can go inside other bags. For this reason, it's a good idea to get hold of containers with many slots. After a long night of adventuring or harvesting, you'll want to have as many places to store your goodies as possible.") +end + +function inv_chat_4(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "I'll be back if I need to refresh my memory on this.") + StartConversation(conversation, NPC, Spawn, "Certain items, such as ammunition or harvested resources, can be stacked up to 200 at a time, depending on the item. Many goods, such as armor and clothing, cannot be stacked at all.") +end \ No newline at end of file diff --git a/server/SpawnScripts/FrostfangSea/TrainerGaniMaccusson.lua b/server/SpawnScripts/FrostfangSea/TrainerGaniMaccusson.lua new file mode 100644 index 000000000..03c752005 --- /dev/null +++ b/server/SpawnScripts/FrostfangSea/TrainerGaniMaccusson.lua @@ -0,0 +1,102 @@ +--[[ + Script Name : SpawnScripts/FrostfangSea/TrainerGaniMaccusson.lua + Script Purpose : Trainer Gani Maccusson + Script Author :theFoof + Script Date : 2013.5.19 + Script Notes : +--]] + +function spawn(NPC) + SetPlayerProximityFunction(NPC, 10, "InRange", "LeaveRange") +end + +function respawn(NPC) + spawn(NPC) +end + +function InRange(NPC, Spawn) +end + +function LeaveRange(NPC, Spawn) +end + +function hailed(NPC, Spawn) + first_chat(NPC, Spawn) +end + +function first_chat(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + local choice = math.random(1,2) + if choice == 1 then + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_2_1041.mp3", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Tell me about banking.", "bank_1") + AddConversationOption(conversation, "Tell me about mending items.", "mend_1") + AddConversationOption(conversation, "I'll return for training later.") + StartConversation(conversation, NPC, Spawn, "I can explain the finer points of banking and mending to you if you like, " .. GetName(Spawn) .. ". Would you care to hear about either?") + elseif choice == 2 then + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_3_1041.mp3", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Tell me about banking.", "bank_1") + AddConversationOption(conversation, "Tell me about mending items.", "mend_1") + AddConversationOption(conversation, "I'll return for training later.") + StartConversation(conversation, NPC, Spawn, "I can explain the finer points of banking and mending to you if you like, " .. GetName(Spawn) .. ". Would you care to hear about either?") + end +end + +function bank_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "How do I open my bank?", "bank_2") + StartConversation(conversation, NPC, Spawn, "You may already have an account set up. Speak with Norfryd Brisbane to access your account. You can access your bank account from cities allied with New Halas as well.") +end + +function bank_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "How do I make deposits and withdrawals?", "bank_3") + AddConversationOption(conversation, "I'll return for training later.") + StartConversation(conversation, NPC, Spawn, "Inside the bank, your mouse pointer will turn into a dial icon when hovered over a banker. Just click on the banker to open your bank window. You'll see twelve general slots and eight 'shared' slots. You can put bags or containers in your bank to increase the number of available slots.") +end + +function bank_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, 'What are "shared" bank slots?', "bank_4") + StartConversation(conversation, NPC, Spawn, "Coins and items can be dragged from your inventory to the bank window. To drag one item from a stack, hold down the Ctrl key as you drag it. To drag a certain number of coins or items, hold down the Shift key and drag, then enter the quantity.") +end + +function bank_4(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Any other banking facts I should know?", "bank_5") + StartConversation(conversation, NPC, Spawn, "Items (but not coin) placed in your shared slots can be accessed by other characters on your account that are of the same alignment. Lore and No-Trade items cannot be put into the shared slots.") +end + +function bank_5(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "I want to learn about mending items.", "mend_1") + AddConversationOption(conversation, "I'll return for training later.") + StartConversation(conversation, NPC, Spawn, "If you choose to join a guild made up of your fellow players one day, you can access your guild bank by right-clicking on a banker and selecting 'Guild Bank.'") +end + +function mend_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Tell me about banking.", "bank_1") + AddConversationOption(conversation, "I'll return for training later.") + StartConversation(conversation, NPC, Spawn, "Your weapons and armor wear down when you die during combat. When they are down to zero durability, you no longer receive any benefit from them. You can visit a mender to get them repaired. Luckily, Bull the Crafty has set up his work station for mending here, on Pilgrims' Landing.") +end diff --git a/server/SpawnScripts/FrostfangSea/TrainerHawkDunlop.lua b/server/SpawnScripts/FrostfangSea/TrainerHawkDunlop.lua new file mode 100644 index 000000000..4120c52a7 --- /dev/null +++ b/server/SpawnScripts/FrostfangSea/TrainerHawkDunlop.lua @@ -0,0 +1,122 @@ +--[[ + Script Name : SpawnScripts/FrostfangSea/TrainerHawkDunlop.lua + Script Purpose : Trainer Hawk Dunlop + Script Author : Foof + Script Date : 2013.5.15 + Script Notes : +--]] + +local HarvestTutorial = 11 + +function spawn(NPC) + SetPlayerProximityFunction(NPC, 10, "InRange", "LeaveRange") + ProvidesQuest(NPC, HarvestTutorial) +end + +function respawn(NPC) + spawn(NPC) +end + +function InRange(NPC, Spawn) +end + +function LeaveRange(NPC, Spawn) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + if GetQuestStep(Spawn, HarvestTutorial) == 8 then + SetStepComplete(Spawn, HarvestTutorial, 8) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_3_1004.mp3", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Thank you.") + StartConversation(conversation, NPC, Spawn, "Excellent work learning about harvesting! As a reward, allow me to offer you this box for storing harvested items. It's quite heavy, so I suggest you put it in your bank rather than carrying it, but it has plenty of storage room for harvests.") + else + BaseChat(NPC, Spawn) + end +end + +function collections_chat_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "What happens next?", "collections_chat_2") + StartConversation(conversation, NPC, Spawn, "Collectibles are seen as a glow rising from the ground. If you're close enough, you'll notice a question mark above it. Double-click or right-click the glow and select 'harvest.' The item you gather will go into your inventory. You can examine this item in your inventory.") +end + +function collections_chat_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "How do I complete the collection?", "collections_chat_3") + StartConversation(conversation, NPC, Spawn, "Your quest journal will open up automatically to the Collections tab. Use the Add button to add that item to a collection. As you travel through Norrath, you'll find different collectibles in different areas of the world. Some items can be part of more than one collection.") +end + +function collections_chat_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "I'd like to learn about harvesting and gathering now.", "harvests_chat_1") + AddConversationOption(conversation, "Thanks for the information.") + StartConversation(conversation, NPC, Spawn, "Continue to gather and examine all the items you find until all the icons of that collection are highlighted in your quest journal. Then you'll be able to turn the completed collection in to a collector who will reward you with some experience. If you already have a collectible in all collections that call for it, you can sell it to a merchant or trade it to another player.") +end + +function harvests_chat_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "What are harvestables used for?", "harvests_chat_2") + StartConversation(conversation, NPC, Spawn, "Harvestables are natural resources that can be found around most parts of the outdoors. You have harvesting skills that allow you collect them. These can be seen by opening your Character window (C), clicking on the Skills tab, and selecting the General skills. Rocks increase mining, logs increase foresting, dens increase trapping, fish increase fishing, and shrubs increase gathering.") +end + +function harvests_chat_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Why do I need to increase my harvesting skills?", "OfferHarvesttutorial") + StartConversation(conversation, NPC, Spawn, "The items found through harvesting are the basic building blocks of tradeskills. They cannot be sold to vendors, but they can be traded or sold to other players who need them for their respective tradeskill professions. Some components that can be found through harvesting are very rare and can be worth quite a bit of money to tradeskillers.") +end + +function harvests_chat_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "I'd like to learn about collections now.", "collections_chat_1") + AddConversationOption(conversation, "Thanks for the information.") + StartConversation(conversation, NPC, Spawn, "The skill required to harvest in a given area increases along with the difficulty of the area. If you find that you are unable to harvest in an area you should return to a less difficult area and practice.") +end + +function elemental_chat_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Oh... Well you were talking about collections?", "BaseChat") + StartConversation(conversation, NPC, Spawn, "It is bothersome, but I have seen worse. That is why I love collections so much. It helps me to forget...") +end + +function BaseChat(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_2_1004.mp3", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "I'd like to learn about collections.", "collections_chat_1") + AddConversationOption(conversation, "I'd like to learn about harvesting.", "harvests_chat_1") + AddConversationOption(conversation, "Aren't you worried about the elemental attacks?", "elemental_chat_1") + AddConversationOption(conversation, "I've no time to chat right now.") + StartConversation(conversation, NPC, Spawn, "I am able to answer any questions you have about collections or harvesting.") +end + +function OfferHarvesttutorial(NPC, Spawn) + if HasCompletedQuest(Spawn, HarvestTutorial) == false and HasQuest(Spawn, HarvestTutorial) == false then + OfferQuest(NPC, Spawn, HarvestTutorial) + end + harvests_chat_3(NPC, Spawn) +end \ No newline at end of file diff --git a/server/SpawnScripts/FrostfangSea/TrainerLevkaFoeblade.lua b/server/SpawnScripts/FrostfangSea/TrainerLevkaFoeblade.lua new file mode 100644 index 000000000..05ef6dab5 --- /dev/null +++ b/server/SpawnScripts/FrostfangSea/TrainerLevkaFoeblade.lua @@ -0,0 +1,169 @@ +--[[ + Script Name : SpawnScripts/FrostfangSea/TrainerLevkaFoeblade.lua + Script Purpose : Trainer Levka Foeblade + Script Author : theFoof + Script Date : 2013.05.21 + Script Notes : +--]] + +function spawn(NPC) + SetPlayerProximityFunction(NPC, 10, "InRange", "LeaveRange") +end + +function respawn(NPC) + spawn(NPC) +end + +function InRange(NPC, Spawn) +end + +function LeaveRange(NPC, Spawn) +end + +function hailed(NPC, Spawn) + first_chat(NPC, Spawn) +end + +function first_chat(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_2_1001.mp3", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "What are Heroic Opportunities?", "opp_chat_1") + AddConversationOption(conversation, "I will seek your knowledge another time.") + StartConversation(conversation, NPC, Spawn, "I look at you and see someone eager to defend Neriak by facing fierce opponents in battle. Well, I can teach you about Heroic Opportunities, a way for you and your allies to accomplish great feats of combat prowess.") +end + +function opp_chat_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Are Heroic Opportunities complicated?", "opp_chat_2") + AddConversationOption(conversation, "I need to finish another task.") + StartConversation(conversation, NPC, Spawn, "Beginning at level 5, Heroic Opportunities can be triggered in combat. They allow both lone adventurers and groups of allies to combine their attacks into a series of spells or combat arts performed in a specific order. When successful, Heroic Opportunities give beneficial effects such as extra attacks against your foes or beneficial magic to heal or enhance your abilities.") +end + +function opp_chat_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "So how does a Heroic Opportunity arise?", "opp_chat_3") + StartConversation(conversation, NPC, Spawn, "Rest assured, someone with battle skills will find them easy! Once you start using them, you'll wonder how you ever got along without them.") +end + +function opp_chat_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Okay, that does sound easy. How do I begin a Heroic Opportunity?", "opp_chat_4") + AddConversationOption(conversation, "I need to finish something else first.") + StartConversation(conversation, NPC, Spawn, "Let me tell you the short and simple version first so that you can see how easy Heroic Opportunities are to use. All you need to do is use your ability that triggers the Heroic Opportunity, then use the spells or combat arts that are blinking on your hotbar or in your Knowledge Book. Easy, isn't it?") +end + +function opp_chat_4(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Can I trigger a Starter Chain whenever I want?", "opp_chat_5") + AddConversationOption(conversation, "I need to finish something else first.") + StartConversation(conversation, NPC, Spawn, "Heroic Opportunities have two parts called the Starter Chain and the Combat Wheel. At level 5, every adventure class gains an ability that triggers a Starter Chain: Fighting Chance, Divine Providence, Arcane Augur, or Lucky Break. Open your Knowledge book by pressing K and click the Abilities tab to see it. You can drag its icon to your hotbar to use it.") +end + +function opp_chat_5(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "What happens when I trigger a Starter Chain?", "opp_chat_7") + StartConversation(conversation, NPC, Spawn, "Starter Chains can only be triggered while in battle with an enemy. After all, Heroic Opportunities are all about becoming great in combat! When you or an ally triggers a Starter Chain, you will see it appear in the corner of your screen.") +end + +function opp_chat_6(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Are Heroic Opportunities only usable in groups?", "opp_chat_7") + AddConversationOption(conversation, "I'll need to continue this later.") + StartConversation(conversation, NPC, Spawn, "Once a Starter Chain is initiated, it shows different ability icons flashing on the screen. A Starter Chain will generally display four different icons that indicate which spells or combat arts advance the Heroic Opportunity to the next stage. Icons will be blue, yellow, red, or green, depending on which class has the ability.") +end + +function opp_chat_7(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Use the spell or art that is blinking. That's all there is to it?", "opp_chat_8") + AddConversationOption(conversation, "I'll be back later.") + StartConversation(conversation, NPC, Spawn, "Any spells or combat arts that can advance the Heroic Opportunity will flash on your hotbar and in your Knowledge Book. You have 10 seconds to complete the Starter Chain and advance to the Combat Wheel. See, it's easy: just use the spell or art that blinks!") +end + +function opp_chat_8(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Why does it trigger one of three?", "opp_chat_9") + StartConversation(conversation, NPC, Spawn, "It's quite simple. After you've advanced the Starter Chain, the bright and colorful Combat Wheel appears. The Combat Wheel shows a series of icons and displays the name of the Heroic Opportunity you have triggered. A Starter Chain will initiate one of three different Heroic Opportunities.") +end + +function opp_chat_9(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "What does the Combat Wheel tell me?", "opp_chat_10") + AddConversationOption(conversation, "I'll be back another time.") + StartConversation(conversation, NPC, Spawn, "There are three potential Heroic Opportunities: common, uncommon and rare. Each provides a different benefit. Though even the common ones are valuable, the rare event can sometimes turn the tide of battle in your favor!") +end + +function opp_chat_10(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "How can I tell the difference?", "opp_chat_11") + StartConversation(conversation, NPC, Spawn, "As with the Starter Chain, the Combat Wheel indicates which spells or arts must be performed to advance and eventually complete the heroic event. Sometimes these spells or abilities must be performed in a particular order. Other times there is no order.") +end + +function opp_chat_11(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "How long do I have to complete the Heroic Opportunity?", "opp_chat_12") + AddConversationOption(conversation, "I will seek your knowledge another time.") + StartConversation(conversation, NPC, Spawn, "In the very center of the Wheel, you'll see either a clockwise-pointing arrow or arrows pointing in different directions. The clockwise arrow indicates that the abilities must be completed in order. The other types of arrows mean that the abilities can be completed in any order.") +end + +function opp_chat_12(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "That sounds easy!", "opp_chat_13") + StartConversation(conversation, NPC, Spawn, "The Combat Wheel must be completed within 10 seconds or the Opportunity will fail. The blue bar that appears around the outside of the Wheel is a timer. When the blue bar is gone, this indicates that time has run out to complete the Heroic Opportunity.") +end + +function opp_chat_13(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Any other tricks I should know?", "opp_chat_14") + AddConversationOption(conversation, "I must go now.") + StartConversation(conversation, NPC, Spawn, "It really is! As you become more familiar with using Heroic Opportunities, you can take note of the members of your group and plan out ahead of time which Opportunities will provide you the greatest benefit.") +end + +function opp_chat_14(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Thank you for the information. I'll try Heroic Opportunities as soon as I can!") + StartConversation(conversation, NPC, Spawn, "Scout classes have a little something extra. By using their Coin icon, the Scout can shift to another Heroic Opportunity. This shift can only happen once per Combat Wheel. This ability must also be used before any other spell or combat art has been used to advance the Wheel.") +end \ No newline at end of file diff --git a/server/SpawnScripts/FrostfangSea/TrainerLillgardThunderrider.lua b/server/SpawnScripts/FrostfangSea/TrainerLillgardThunderrider.lua new file mode 100644 index 000000000..2969fda84 --- /dev/null +++ b/server/SpawnScripts/FrostfangSea/TrainerLillgardThunderrider.lua @@ -0,0 +1,22 @@ +--[[ + Script Name : SpawnScripts/FrostfangSea/TrainerLillgardThunderrider.lua + Script Purpose : Trainer Lillgard Thunderrider + Script Author : theFoof + Script Date : 2013.10.30 + Script Notes : +--]] + +require"SpawnScripts/FrostfangSea/halas_proximity_cheer" + +function spawn(NPC) + SetPlayerProximityFunction(NPC, 15, "ProxCheer") +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + PlayFlavor(NPC, "", "I have many types of mounts. One is bound to suit your style!", "", 1689589577, 4560189, Spawn) +end \ No newline at end of file diff --git a/server/SpawnScripts/FrostfangSea/TrainerNaldurFursythe.lua b/server/SpawnScripts/FrostfangSea/TrainerNaldurFursythe.lua new file mode 100644 index 000000000..42f1091a7 --- /dev/null +++ b/server/SpawnScripts/FrostfangSea/TrainerNaldurFursythe.lua @@ -0,0 +1,128 @@ +--[[ + Script Name : SpawnScripts/FrostfangSea/TrainerNaldurFursythe.lua + Script Purpose : Trainer Naldur Fursythe + Script Author : theFoof + Script Date : 2013.05.21 + Script Notes : +--]] + +function spawn(NPC) + SetPlayerProximityFunction(NPC, 10, "InRange", "LeaveRange") +end + +function respawn(NPC) + spawn(NPC) +end + +function InRange(NPC, Spawn) +end + +function LeaveRange(NPC, Spawn) +end + +function hailed(NPC, Spawn) + first_chat(NPC, Spawn) +end + +function first_chat(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_3_1062.mp3", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Tell me what my physical attributes do.", "what_chat_1") + AddConversationOption(conversation, "How do I view my physical attributes?", "view_chat_1") + AddConversationOption(conversation, "How do I improve my physical attributes?", "impr_chat_1") + AddConversationOption(conversation, "I will ask you about this later.") + StartConversation(conversation, NPC, Spawn, "Hello there. You look like you keep both your body and mind in good shape. Even so, I bet you could use more information on your physical attributes: Strength, Agility, Stamina, Intelligence, and Wisdom. That's what I'm here to teach you!") +end + +function what_chat_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Tell me about Agility.", "what_chat_2") + AddConversationOption(conversation, "How do I view my physical attributes?", "view_chat_1") + AddConversationOption(conversation, "How do I improve my physical attributes?", "impr_chat_1") + AddConversationOption(conversation, "Thanks for the information.") + StartConversation(conversation, NPC, Spawn, "Strength determines how much weight you can carry. The more Strength the fighter has, the more physical damage they can do in melee combat. Strength also determines the maximum amount of power Guardians, Berserkers, Bruisers, Monks, Paladins and Shadowknights have.") +end + +function what_chat_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Tell me about Stamina.", "what_chat_3") + AddConversationOption(conversation, "How do I view my physical attributes?", "view_chat_1") + AddConversationOption(conversation, "How do I improve my physical attributes?", "impr_chat_1") + AddConversationOption(conversation, "Thanks for the information.") + StartConversation(conversation, NPC, Spawn, "Agility helps you avoid physical attacks. The more Agility you have, the higher your Avoidance ability. Agility also determines the maximum amount of power Brigands, Swashbucklers, Assassins, Rangers, Troubadors and Dirges have and the damage they can inflict.") +end + +function what_chat_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Tell me about Intelligence.", "what_chat_4") + AddConversationOption(conversation, "How do I view my physical attributes?", "view_chat_1") + AddConversationOption(conversation, "How do I improve my physical attributes?", "impr_chat_1") + AddConversationOption(conversation, "Thank you for the information.") + StartConversation(conversation, NPC, Spawn, "Stamina gives you more Health points. The more Health you have, the longer you can survive in battle. Stamina is a useful attribute for every class.") +end + +function what_chat_4(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Tell me about Wisdom.", "dlg_43_5") + AddConversationOption(conversation, "How do I view my physical attributes?", "view_chat_1") + AddConversationOption(conversation, "How do I improve my physical attributes?", "impr_chat_1") + AddConversationOption(conversation, "Thank you for the information.") + StartConversation(conversation, NPC, Spawn, "Intelligence is more than just a sign of how smart you are. The more Intelligence you have, the more damage mages do with spells in combat. Intelligence also determines the maximum amount of power Wizards, Warlocks, Coercers, Illusionists, Necromancers, Conjurers, Troubadors and Dirges have.") +end + +function what_chat_5(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "How do I view my physical attributes?", "view_chat_1", "view_chat_1") + AddConversationOption(conversation, "How do I improve my physical attributes?", "impr_chat_1") + AddConversationOption(conversation, "Thank you for the information.") + StartConversation(conversation, NPC, Spawn, "Wisdom increases your resistances to magical types of attacks: Heat, Cold, Disease, Poison, Magic, Mental and Divine. Wisdom also determines the maximum amount of power Inquisitors, Templars, Defilers, Mystics, Furies and Wardens have and the damage they can inflict.") +end + +function view_chat_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Tell me what my physical attributes do.", "what_chat_1") + AddConversationOption(conversation, "How do I improve my physical attributes?", "impr_chat_1") + AddConversationOption(conversation, "Thank you for the information.") + StartConversation(conversation, NPC, Spawn, "You can see your physical attributes, as well as other important aspects of your character, in your character window. Just press the C key to open your character window.") +end + +function impr_chat_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Are there other ways?", "impr_chat_2") + AddConversationOption(conversation, "Thank you for the information.") + StartConversation(conversation, NPC, Spawn, "Your physical attributes, as well as other aspects of your character, can be improved in a number of ways. Many items add points to your attributes, resistances, Health, or Power. Hold your mouse pointer over your items to see what benefits they provide.") +end + +function impr_chat_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Tell me what my physical attributes do.", "what_chat_1") + AddConversationOption(conversation, "How do I view my physical attributes?", "view_chat_1") + AddConversationOption(conversation, "I will ask you about this later.") + StartConversation(conversation, NPC, Spawn, "Many spells and combat arts enhance your attributes. Some of these can be cast on yourself, while others can improve other player characters that you group with. Grouping with other classes provides a wider variety of ways to improve your attributes.") +end \ No newline at end of file diff --git a/server/SpawnScripts/FrostfangSea/TrainerRagnhildStonefist.lua b/server/SpawnScripts/FrostfangSea/TrainerRagnhildStonefist.lua new file mode 100644 index 000000000..893ff475c --- /dev/null +++ b/server/SpawnScripts/FrostfangSea/TrainerRagnhildStonefist.lua @@ -0,0 +1,306 @@ +--[[ + Script Name : SpawnScripts/FrostfangSea/TrainerRagnhildStonefist.lua + Script Purpose : Trainer Ragnhild Stonefist + Script Author : theFoof + Script Date : 2013.5.3 + Script Notes : +--]] +local StoneCombat = 2 + +function spawn(NPC) +end + +function respawn(NPC) + spawn(NPC) +end + +function InRange(NPC, Spawn) +end + +function LeaveRange(NPC, Spawn) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + if HasQuest(Spawn, StoneCombat) and GetQuestStep(Spawn, StoneCombat) == 1 then + first_chat(NPC, Spawn) + SetStepComplete(Spawn, StoneCombat, 1) + elseif GetQuestStep(Spawn, StoneCombat) == 2 then + AddConversationOption(conversation, "Not yet, but I will soon.") + StartConversation(conversation, "So, did you defeat the sparring partner like I asked?") + elseif GetQuestStep(Spawn, StoneCombat) == 3 then + AddConversationOption(conversation, "I was victorious!", "complete_step3") + AddConversationOption(conversation, "Not yet, but I will soon.") + StartConversation(conversation, NPC, Spawn, "So, did you defeat the sparring partner like I asked?") + else + first_chat(NPC, Spawn) + end +end + +function complete_step3(NPC, Spawn) + SetStepComplete(Spawn, StoneCombat, 3) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + AddConversationOption(conversation, "I'll report back to Yasha Redblade.") + StartConversation(conversation, NPC, Spawn, "Great work! You've Proven your worth and are ready for greater challenges. If you want futher instruction later, just come see me. But right now you must report back to Yasha so that you can defend Pilgrims' Landing.") +end + +function first_chat(NPC, Spawn) + conversation = CreateConversation() + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_1_1009.mp3", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Teach me the basics of combat.", "basic_chat") + AddConversationOption(conversation, "Teach me more advanced aspects of combat.", "adv_chat") + AddConversationOption(conversation, "I'll come back later.") + StartConversation(conversation, NPC, Spawn, "Hello there, " .. GetName(Spawn) .. ". I'm here to teach folks the finer points of combat. I don't like to get into a fight, but if I do, I prefer to win. Know what I mean?") +end + +function adv_chat(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Tell me about selecting the right opponent.", "adv_1_1") + AddConversationOption(conversation, "Teach me about knowing my surroundings.", "adv_1_3_1") + AddConversationOption(conversation, "Tell me about using my abilities.", "adv_2_1") + AddConversationOption(conversation, "Teach me the basics of combat.", "basic_chat") + AddConversationOption(conversation, "I'll come back later.") + StartConversation(conversation, NPC, Spawn, "There are many advanced combat techniques that you will learn over time. There's no substitute for experience, " .. GetName(Spawn) .. "! I'd be happy to discuss a few of these advanced aspects, such as selecting the right opponent, knowing your surroundings, and using your abilities.") +end + +function adv_1_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "How do I tell if an opponent is too weak or too strong for me?", "adv_1_2") + StartConversation(conversation, NPC, Spawn, "Picking the right fight is crucial to victory. A weak opponent won't provide worthwhile rewards, while an overly powerful foe will result in your defeat. You need to keep your resources in mind as well as choosing the right target.") +end + +function adv_1_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "What resources should I be keeping an eye on?", "adv_1_3") + StartConversation(conversation, NPC, Spawn, "Targeting an opponent will show you detailed information on its overall potency. Generally speaking, you'll find the best results from fighting opponents with blue, white, or yellow names.") +end + +function adv_1_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Teach me about knowing my surroundings.", "adv_1_3_1") + AddConversationOption(conversation, "Tell me about using my abilities.", "adv_2_1") + AddConversationOption(conversation, "Teach me the basics of combat.", "basic_chat") + AddConversationOption(conversation, "I'll come back later.") + StartConversation(conversation, NPC, Spawn, "Starting a fight when you are low on health or power is a very bad idea. Your choice of targets also depends on whether you're alone or grouped with other players. Forming a group allows you to take on tougher and more rewarding challenges than you could face alone.") +end + +function adv_1_3_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Anything else I should watch out for?", "adv_1_3_1_2") + StartConversation(conversation, NPC, Spawn, "Keeping your surroundings in mind is crucial to victory. Fighting in areas with lots of aggressive creatures is a bad idea, because they won't hesitate to gang up on you.") +end + +function adv_1_3_1_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Any other tips?", "adv_1_3_1_3") + StartConversation(conversation, NPC, Spawn, "Staying too long on the exact spot where you just defeated a foe can be dangerous. Another enemy is likely to show up there soon after, which can be an unpleasant surprise if you're already in another battle.") +end + +function adv_1_3_1_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Tell me about selecting the right opponent.", "adv_1_1") + AddConversationOption(conversation, "Tell me about using my abilities.", "adv_2_1") + AddConversationOption(conversation, "Teach me the basics of combat.", "basic_chat") + AddConversationOption(conversation, "I'll come back later.") + StartConversation(conversation, NPC, Spawn, "You should be aware of what's going on around you. Using your mouse wheel to scroll out into third person and holding down the left mouse button allows you to move the camera around your character. It's a good idea to do this when fighting in dangerous areas to make sure nothing sneaks up on you.") +end + +function adv_2_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "What do you mean?", "adv_2_2") + StartConversation(conversation, NPC, Spawn, "Successful fighting isn't about turning on your auto-attack and walking away from battle. Your odds of victory are much better if you are well-prepared and are active during combat. You should use every spell or combat art that has a positive effect on your chances to win.") +end + +function adv_2_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "What about during battle?", "adv_2_3") + StartConversation(conversation, NPC, Spawn, "Before you begin fighting, make sure you and your allies have activated all beneficial spells, also known as 'buffs,' so that you're operating at peak efficiency. Buffs can add health or power, increase your rate of regeneration, enhance your physical attributes, make you attack faster or do more damage, and more.") +end + +function adv_2_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "What else should I know about spells and arts?", "adv_2_4") + StartConversation(conversation, NPC, Spawn, "Whether you're a front-lines melee type or someone attacking from a distance with weapons or spells, you should be using abilities that damage your foes effectively and efficiently. Right click on your spells and arts and select 'Examine' to see details on their effects.") +end + +function adv_2_4(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Tell me about selecting the right opponent.", "adv_1_1") + AddConversationOption(conversation, "Teach me about knowing my surroundings.", "adv_1_3_1") + AddConversationOption(conversation, "Teach me the basics of combat.", "basic_chat") + AddConversationOption(conversation, "I'll come back later.") + StartConversation(conversation, NPC, Spawn, "Using your highest-level versions of spells and arts will be more effective than using older versions. In addition, you should be upgrading your abilities to higher ranks to make them more effective. For more details on spells and combat arts, talk to Trainer Yasna V'Vath.") +end + +function basic_chat(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Tell me how to begin a fight.", "bsc_1_1") + AddConversationOption(conversation, "Tell me about melee combat.", "bsc_2_1") + AddConversationOption(conversation, "Tell me about ranged combat.", "bsc_3_1") + AddConversationOption(conversation, "What kind of rewards can I earn in battle?", "bsc_4_1") + AddConversationOption(conversation, "Teach me more advanced aspects of combat.", "adv_chat") + AddConversationOption(conversation, "I'll come back later.") + StartConversation(conversation, NPC, Spawn, "There are many different elements that go into successful combat. I can teach you a few of the basics, such as how to begin a fight, the difference between melee and ranged combat, and earning rewards for victory.") +end + +function bsc_1_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "How do I begin the battle?", "bsc_1_2") + StartConversation(conversation, NPC, Spawn, "Starting combat is easy. Just use your mouse pointer to left-click on an opponent. Its name will appear in the Target window in the upper left of your screen. You can also use the Tab key to cycle through nearby targets or the F8 key to select your closest enemy.") +end + +function bsc_1_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "So I can fight anyone or anything I want?", "bsc_1_3") + StartConversation(conversation, NPC, Spawn, "If you're close enough to your foe and want to start hitting it with your weapon, either click your Melee Attack button on your hotbar or press the ~ key. Or you can begin by using one of your spells or combat arts to get the enemy's attention. Remember, you must be close enough to actually hit them.") +end + +function bsc_1_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Tell me about melee combat.", "bsc_2_1") + AddConversationOption(conversation, "Tell me about ranged combat.", "bsc_3_1") + AddConversationOption(conversation, "What kind of rewards can I earn in battle?", "bsc_4_1") + AddConversationOption(conversation, "Teach me more advanced aspects of combat.", "adv_chat") + AddConversationOption(conversation, "I'll come back later.") + StartConversation(conversation, NPC, Spawn, "You can fight most non-player characters and creatures that you find outside your city, whether outdoors or in dungeons. Many non-player characters in the cities are there to help you or give quests, so you can't attack some of them. If you try, you'll get a message telling you that they aren't valid targets.") +end + +function bsc_2_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "What classes specialize in melee combat?", "bsc_2_2") + StartConversation(conversation, NPC, Spawn, "Melee combat means a toe-to-toe, physical confrontation. It is a combination of auto-attack damage that happens automatically when you press the Melee Attack button on your hotbar or the ~ key and spells or combat arts that you use in close proximity to your foe.") +end + +function bsc_2_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Tell me how to begin a fight.", "bsc_1_1") + AddConversationOption(conversation, "Tell me about ranged combat.", "bsc_3_1") + AddConversationOption(conversation, "What kind of rewards can I earn in battle?", "bsc_4_1") + AddConversationOption(conversation, "Teach me more advanced aspects of combat.", "adv_chat") + AddConversationOption(conversation, "I'll come back later.") + StartConversation(conversation, NPC, Spawn, "Sturdy fighters such as Guardians, Berserkers, Bruisers, and Shadowknights stand at the front lines of battle facing the enemy. Crafty scouts such as Brigands, Assassins, Troubadors, and Dirges generally stay close to their foes as well, but prefer to launch attacks from the back or side where they are less likely to be counterattacked.") +end + +function bsc_3_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "How do I launch a ranged attack?", "bsc_3_2") + StartConversation(conversation, NPC, Spawn, "Ranged combat means that you put some distance between yourself and the enemy. This can be done with weapons such as bows or throwing daggers, or with spells and arts that can be cast from a distance.") +end + +function bsc_3_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "What classes specialize in ranged combat?", "bsc_3_3") + StartConversation(conversation, NPC, Spawn, "If you have a ranged weapon and ammunition, you can initiate ranged combat by using the Ranged Attack button on the Abilities tab of your Knowledge Book. You can drag this key to your hotbar if you like. Remember, you must have a ranged weapon in the Ranged slot of your inventory window and the correct type of ammunition in the Ammo slot.") +end + +function bsc_3_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "How do I tell if I can use spells or arts from a distance?", "bsc_3_4") + StartConversation(conversation, NPC, Spawn, "While most classes have the ability to attack from a distance, scout classes such as Brigands, Troubadors, Dirges, and Assassins specialize in ranged physical attacks. Mages, priests, and Shadowknights have spells that do damage to their foes from a distance.") +end + +function bsc_3_4(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Tell me how to begin a fight.", "bsc_1_1") + AddConversationOption(conversation, "Tell me about melee combat.", "bsc_2_1") + AddConversationOption(conversation, "What kind of rewards can I earn in battle?", "bsc_4_1") + AddConversationOption(conversation, "Teach me more advanced aspects of combat.", "adv_chat") + AddConversationOption(conversation, "I'll come back later.") + StartConversation(conversation, NPC, Spawn, "You can right-click on a spell or art's icon and select 'Examine' to see what its range of effect is. In addition, if you target something and the icon for one of your spells or arts turns a dark red, that means the opponent is out of range of that ability.") +end + +function bsc_4_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "What do you mean by 'a worthy opponent'?", "bsc_4_2") + StartConversation(conversation, NPC, Spawn, "Victory in battle can be very rewarding. Successful combat against a worthy opponent awards you experience (XP) to help you advance your level, as well as the chance at coin, usable items, and other valuables.") +end + +function bsc_4_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Are certain types of targets more rewarding than others?") + StartConversation(conversation, NPC, Spawn, "You don't earn rewards for defeating foes that are too far below your level. If your target has a grey name, it means it is very weak and won't provide any benefit for beating it.") +end + +function bsc_4_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Tell me how to begin a fight.", "bsc_1_1") + AddConversationOption(conversation, "Tell me about melee combat.", "bsc_2_1") + AddConversationOption(conversation, "Tell me about ranged combat.", "bsc_3_1") + AddConversationOption(conversation, "Teach me more advanced aspects of combat.", "adv_chat") + AddConversationOption(conversation, "I'll come back later.") + StartConversation(conversation, NPC, Spawn, "The tougher a foe, the better its chances to provide a valuable reward. Though defeating enemies alone provides nice rewards, defeating heroic enemies that require a group is even more rewarding. The very best items come from banding together multiple groups to defeat epic opponents.") +end diff --git a/server/SpawnScripts/FrostfangSea/TrainerThorirWolfskinner.lua b/server/SpawnScripts/FrostfangSea/TrainerThorirWolfskinner.lua new file mode 100644 index 000000000..1d1a1f511 --- /dev/null +++ b/server/SpawnScripts/FrostfangSea/TrainerThorirWolfskinner.lua @@ -0,0 +1,179 @@ +--[[ + Script Name : SpawnScripts/FrostfangSea/TrainerThorirWolfskinner.lua + Script Purpose : Trainer Thorir Wolfskinner + Script Author : theFoof + Script Date : 2013.05.17 + Script Notes : +--]] + +function spawn(NPC) + SetPlayerProximityFunction(NPC, 10, "InRange", "LeaveRange") +end + +function respawn(NPC) + spawn(NPC) +end + +function InRange(NPC, Spawn) +end + +function LeaveRange(NPC, Spawn) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_3_1060.mp3", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "How do I judge my opponent?", "dlg_1_2") + AddConversationOption(conversation, "I'll return later.") + StartConversation(conversation, NPC, Spawn, "Greetings. I sense that you will fight many battles and that you will one day be known as a great hero. But remember, we all have to start somewhere. The first thing you need to know to be successful in combat is how to size up your adversary.") +end + +function dlg_1_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "What does the creature's name tell me?", "dlg_1_3") + StartConversation(conversation, NPC, Spawn, "You must learn to use both your eyes and your instincts as you consider friends and foes alike in Norrath. There are two excellent tools you should use to judge their capabilities: what you can tell from their name and what you can learn by targeting them.") +end + +function dlg_1_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "How do I target an opponent?", "dlg_1_4") + AddConversationOption(conversation, "I will be back later.") + StartConversation(conversation, NPC, Spawn, "If something has a red border around its name, that target is aggressive toward you and will attack if you get too close to it. You should be especially careful of creatures that roam around, because if they notice you they won't hesitate to strike.") +end + +function dlg_1_4(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Why are separate creatures sometimes linked?", "dlg_1_5") + AddConversationOption(conversation, "I will be back later.") + StartConversation(conversation, NPC, Spawn, "All you need to do is move your mouse pointer over what you want to target and click. You will see the name of your opponent in the Target window in the upper left corner of the screen, and a large arrow will appear above its head. If arrows also appear above the heads of nearby creatures, it means all of them are linked together and will attack as one.") +end + +function dlg_1_5(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "What does the Target window tell me?", "dlg_1_6") + StartConversation(conversation, NPC, Spawn, "Sometimes multiple creatures will work together to form a single encounter. These opponents will act as a team, and usually won't stop fighting until all of them are defeated.") +end + +function dlg_1_6(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "What does the level indicate?", "dlg_1_7") + AddConversationOption(conversation, "I will be back later.") + StartConversation(conversation, NPC, Spawn, "The Target window tells you several important facts, which collectively form what is referred to as the 'con' (overall challenge) of the opponent. It shows you the numerical level of the creature you have targeted, a color to indicate its relative level range, up or down arrows to indicate toughness, and indicators that tell you if the encounter is normal, heroic, or epic.") +end + +function dlg_1_7(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "How does my opponent's level affect my rewards for victory?", "dlg_1_8") + AddConversationOption(conversation, "I will be back later.") + StartConversation(conversation, NPC, Spawn, "As you adventure through Norrath, you will gain experience and increase your level. The opponents you will face in combat have levels as well. To be victorious, you will usually want to face foes that are close to your level.") +end + +function dlg_1_8(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "What does the color of my opponent's name tell me?", "dlg_1_9") + AddConversationOption(conversation, "I will be back later.") + StartConversation(conversation, NPC, Spawn, "You gain more experience by defeating higher-level opponents, but they will also be tougher to beat. Conversely, if you defeat foes much lower than your level, they will not be nearly as rewarding.") +end + +function dlg_1_9(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "What are the colors?", "dlg_1_10") + StartConversation(conversation, NPC, Spawn, "The color of your opponent's name indicates how challenging the encounter is. It is very useful as a quick indicator of whether or not you should be fighting a target. The more danger it's color indicates, the greater the threat it represents.") +end + +function dlg_1_10(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Will grey targets ever attack me?", "dlg_1_11") + AddConversationOption(conversation, "I will be back later.") + StartConversation(conversation, NPC, Spawn, "Grey names mean the fight is below your abilities and will give no experience or reward. Green names mean the opponent is very easy. Blue names mean an easy fight. White names indicate the opponent is even with your abilities. Yellow names mean the fight will be challenging. Orange names indicate a difficult encounter. Red names mean the battle could be deadly.") +end + +function dlg_1_11(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "What do down arrows tell me?", "dlg_1_12") + AddConversationOption(conversation, "I will be back later.") + StartConversation(conversation, NPC, Spawn, "Targets with grey names will not attack you, even if they would be aggressive to someone closer to their level. In other words, you won't be attacked by anything that won't give you some reward for defeating it.") +end + +function dlg_1_12(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "What do up arrows mean?", "dlg_1_13") + AddConversationOption(conversation, "I will be back later.") + StartConversation(conversation, NPC, Spawn, "No arrow by the target's name indicates an average opponent for a lone adventurer. A single down arrow means it is a below average opponent. Two down arrows tell you it's a weak opponent, and three down arrows means it is very weak. Be careful though, because if multiple weak opponents are working together they can still represent quite a challenge.") +end + +function dlg_1_13(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "So how do I know whether I can face a challenge alone?", "dlg_1_14") + AddConversationOption(conversation, "I will finish this lesson later.") + StartConversation(conversation, NPC, Spawn, "Up arrows indicate increased difficulty. A single up arrow means an above average opponent. Two up arrows show a strong opponent, while three up arrows means a very tough fight. If you look at the sparring partners next to us, you will see that they have different arrow indicators. Feel free to practice fighting them to feel what effect the arrows have.") +end + +function dlg_1_14(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "What is the difference between normal, heroic, and epic?", "dlg_1_15") + AddConversationOption(conversation, "I will finish this lesson later.") + StartConversation(conversation, NPC, Spawn, "As a general rule of thumb, if you see an enemy with one up arrow, it's a good idea to team up with another player to take it on. If you see an enemy with two up arrows, add two members to your group. If you see an opponent with three up arrows, add three members to your group. A lone adventurer will likely want to face targets with no arrows or down arrows.") +end + +function dlg_1_15(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "So how do all these elements work together to show an opponent's difficulty?", "dlg_1_16") + AddConversationOption(conversation, "I will finish this lesson later.") + StartConversation(conversation, NPC, Spawn, "A normal opponent has no indicator and is intended to be fought by a solo adventurer or small group. A heroic encounter is intended for a larger group of up to six adventurers. An epic opponent should only be attempted by a raid force of multiple groups working together.") +end + +function dlg_1_16(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Thank you, instructor.") + StartConversation(conversation, NPC, Spawn, "All the elements I've explained will affect the outcome of a battle and whether or not you will need allies to win. Pay close attention to the lessons I have taught you, and apply them to challenges you face throughout your journeys in Norrath.") +end \ No newline at end of file diff --git a/server/SpawnScripts/FrostfangSea/TundraBeet.lua b/server/SpawnScripts/FrostfangSea/TundraBeet.lua new file mode 100644 index 000000000..e69b0aa0c --- /dev/null +++ b/server/SpawnScripts/FrostfangSea/TundraBeet.lua @@ -0,0 +1,31 @@ +--[[ + Script Name : SpawnScripts/FrostfangSea/TundraBeet.lua + Script Purpose : for the spawn signs named "tundra beet" + Script Author : theFoof + Script Date : 2013.5.18 + Script Notes : +--]] +local BeetsAlternative = 13 + +function spawn(NPC) + SetRequiredQuest(NPC, BeetsAlternative, 1) + SetRequiredQuest(NPC, BeetsAlternative, 2) +end + +function respawn(NPC) + spawn(NPC) +end + +function casted_on(Target, Caster, SpellName) + if SpellName == "gather tundra beet" then + if GetQuestStep(Caster, BeetsAlternative) == 1 then + AddStepProgress(Caster, BeetsAlternative, 1, 1) + Despawn(Target) + elseif GetQuestStep(Caster, BeetsAlternative) == 2 then + SetStepComplete(Caster, BeetsAlternative, 2) + footprints = GetSpawn(Target, 4701753) + AddSpawnAccess(footprints, Caster) + Despawn(Target) + end + end +end \ No newline at end of file diff --git a/server/SpawnScripts/FrostfangSea/UlfgjerdPrimloch.lua b/server/SpawnScripts/FrostfangSea/UlfgjerdPrimloch.lua new file mode 100644 index 000000000..d120a280b --- /dev/null +++ b/server/SpawnScripts/FrostfangSea/UlfgjerdPrimloch.lua @@ -0,0 +1,36 @@ +--[[ + Script Name : SpawnScripts/FrostfangSea/UlfgjerdPrimloch.lua + Script Purpose : Ulfgjerd Primloch + Script Author : theFoof + Script Date : 2013.10.30 + Script Notes : movement loop for random npc in halas +--]] + +function spawn(NPC) + MovementLoopAddLocation(NPC, -67.35, 147.09, -19.74, 2, 0) + MovementLoopAddLocation(NPC, -87.36, 146.89, -9.17, 2, 0) + MovementLoopAddLocation(NPC, -96.48, 146.24, 18.45, 2, 0) + MovementLoopAddLocation(NPC, -122.15, 146.3, 16.75, 2, 0) + MovementLoopAddLocation(NPC, -135.78, 146.49, 55.33, 2, 0) + MovementLoopAddLocation(NPC, -131.98, 146.7, 26.02, 2, 0) + MovementLoopAddLocation(NPC, -113.06, 146, 2.94, 2, 0) + MovementLoopAddLocation(NPC, -112.37, 144.96, -22.06, 2, 0) + MovementLoopAddLocation(NPC, -95.54, 145.71, -38.41, 2, 0) + MovementLoopAddLocation(NPC, -112.25, 146.75, -56.73, 2, 0) + MovementLoopAddLocation(NPC, -165.18, 148.54, -49.67, 2, 0) + MovementLoopAddLocation(NPC, -197.51, 149.65, -79.5, 2, 0) + MovementLoopAddLocation(NPC, -165.18, 148.54, -49.67, 2, 0) + MovementLoopAddLocation(NPC, -112.25, 146.75, -56.73, 2, 0) + MovementLoopAddLocation(NPC, -88.93, 145.74, -39.28, 2, 0) + MovementLoopAddLocation(NPC, -20.19, 145.93, -53.38, 2, 0) + MovementLoopAddLocation(NPC, -19.78, 146.3, -21.45, 2, 0) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + PlayFlavor(NPC, "", "", "hello", 0, 0, Spawn) +end \ No newline at end of file diff --git a/server/SpawnScripts/FrostfangSea/ValdJerngard.lua b/server/SpawnScripts/FrostfangSea/ValdJerngard.lua new file mode 100644 index 000000000..5c6968a6b --- /dev/null +++ b/server/SpawnScripts/FrostfangSea/ValdJerngard.lua @@ -0,0 +1,31 @@ +--[[ + Script Name : SpawnScripts/FrostfangSea/ValdJerngard.lua + Script Purpose : Vald Jerngard + Script Author : theFoof + Script Date : 2013.09.26 + Script Notes : +--]] + +require"SpawnScripts/FrostfangSea/halas_proximity_cheer" + +function spawn(NPC) + SetPlayerProximityFunction(NPC, 15, "ProxCheer") +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + + local choice = math.random(1,3) + + if choice == 1 then + PlayFlavor(NPC, "", "Come on over! You won't find better deals elsewhere!", "beckon", 1689589577, 4560189, Spawn) + elseif choice == 2 then + PlayFlavor(NPC, "", "Let's check what's available, shall we?", "nod", 1689589577, 4560189, Spawn) + elseif choice == 3 then + PlayFlavor(NPC, "", "All right here's all the goods listed. If you find anything you want, let me know.", "hello", 1689589577, 4560189, Spawn) + end +end \ No newline at end of file diff --git a/server/SpawnScripts/FrostfangSea/VerienSkysigh.lua b/server/SpawnScripts/FrostfangSea/VerienSkysigh.lua new file mode 100644 index 000000000..305d5ff1c --- /dev/null +++ b/server/SpawnScripts/FrostfangSea/VerienSkysigh.lua @@ -0,0 +1,359 @@ +--[[ + Script Name : SpawnScripts/FrostfangSea/VerienSkysigh.lua + Script Purpose : Verien Skysigh + Script Author : theFoof + Script Date : 2013.05.18 + Script Notes : +--]] +local BeetsAlternative = 13 + +local SiftingGarbage = 14 + +local PilgrimPathfinder = 15 + +local PilgrimScout = 16 + +local PilgrimPelts = 17 + +local IcemanesCometh = 18 + +function spawn(NPC) + AddSpawnAccess(NPC, NPC) + SetPlayerProximityFunction(NPC, 10, "InRange") + ProvidesQuest(NPC, SiftingGarbage) + ProvidesQuest(NPC, PilgrimPathfinder) + ProvidesQuest(NPC, PilgrimScout) + ProvidesQuest(NPC, PilgrimPelts) + ProvidesQuest(NPC, IcemanesCometh) +end + +function respawn(NPC) + spawn(NPC) +end + +function InRange(NPC, Spawn) + if GetQuestStep(Spawn, BeetsAlternative) == 3 then + hailed(NPC, Spawn) + end +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + if GetQuestStep(Spawn, BeetsAlternative) == 3 then + PlayFlavor(NPC, "verien_skysigh/halas/gwenevyns_cove/verien_skysigh_001.mp3", "", "", 144081749, 1511716196, Spawn) + AddConversationOption(conversation, "Are you sure it wasn't an orc?", "Quest1Chat_2") + StartConversation(conversation, NPC, Spawn, "" .. GetName(Spawn) .. ", it was horrible! A blizzard grizzly attacked Wregan!") + elseif HasCompletedQuest(Spawn, BeetsAlternative) and HasQuest(Spawn, SiftingGarbage) == false and HasCompletedQuest(Spawn, SiftingGarbage) == false then + PlayFlavor(NPC, "verien_skysigh/halas/gwenevyns_cove/verien_skysigh_001.mp3", "", "", 144081749, 1511716196, Spawn) + AddConversationOption(conversation, "Are you sure it wasn't an orc?", "Quest1Chat_2") + StartConversation(conversation, NPC, Spawn, "" .. GetName(Spawn) .. ", it was horrible! A blizzard grizzly attacked Wregan!") + elseif GetQuestStep(Spawn, SiftingGarbage) == 2 then + PlayFlavor(NPC, "verien_skysigh/halas/gwenevyns_cove/verien_skysigh_006.mp3", "", "", 3934649254, 1217703045, Spawn) + AddConversationOption(conversation, "Not that I know of. There were plenty of bones and discarded items but nothing that seemed orcish.", "Quest3Chat_1") + StartConversation(conversation, NPC, Spawn, "Did you find any sign of orcs within the blizzard grizzly den?") + elseif HasCompletedQuest(Spawn, SiftingGarbage) and HasQuest(Spawn, PilgrimPathfinder) == false and HasCompletedQuest(Spawn, PilgrimPathfinder) == false then + PlayFlavor(NPC, "verien_skysigh/halas/gwenevyns_cove/verien_skysigh_008.mp3", "", "", 3063047585, 4165639354, Spawn) + AddConversationOption(conversation, "That makes sense.", "Quest3Chat_3") + StartConversation(conversation, NPC, Spawn, "Ah, I think I have figured out our next step, " .. GetName(Spawn) .. ". We do not know the safest way to New Halas! We were relying on Wregan Firebeard for that knowledge. And we do not know where the orcs may have gone. We need to get the lay of the land.") + elseif GetQuestStep(Spawn, PilgrimPathfinder) == 1 then + PlayFlavor(NPC, "", "Atop the grizzly den you should be able to spot our best path across the land, and it may offer you some knowledge into where the orcs went.", "hello", 0, 0, Spawn) + elseif GetQuestStep(Spawn, PilgrimPathfinder) == 2 then + Quest3Chat_4(NPC, Spawn) + elseif HasCompletedQuest(Spawn, PilgrimPathfinder) and HasQuest(Spawn, PilgrimScout) == false and HasCompletedQuest(Spawn, PilgrimScout) == false then + Quest4Chat_2(NPC, Spawn) + elseif GetQuestStep(Spawn, PilgrimScout) == 1 then + PlayFlavor(NPC, "", "Return to me as soon as you have confirmed that we can traverse the western side of the isle by taking the path that hugs the wall of ice and rock.", "hello", 0, 0, Spawn) + elseif GetQuestStep(Spawn, PilgrimScout) == 2 then + PlayFlavor(NPC, "verien_skysigh/halas/gwenevyns_cove/verien_skysigh_016.mp3", "", "", 1416497004, 1412694978, Spawn) + AddConversationOption(conversation, "No. Unfortunately, there is no way through. It is a dead end.", "Quest4Chat_4") + StartConversation(conversation, NPC, Spawn, "What did you find, " .. GetName(Spawn) .. "? Is the path clear for us to take?") + elseif HasCompletedQuest(Spawn, PilgrimScout) and HasQuest(Spawn, PilgrimPelts) == false and HasCompletedQuest(Spawn, PilgrimPelts) == false then + Quest5Chat_1(NPC, Spawn) + elseif GetQuestStep(Spawn, PilgrimPelts) == 1 then + PlayFlavor(NPC, "", "I hope that you are able to find the big icemane cats Wregan spoke of. We need those pelts.", "hello", 0, 0, Spawn) + elseif GetQuestStep(Spawn, PilgrimPelts) == 2 then + PlayFlavor(NPC, "verien_skysigh/halas/gwenevyns_cove/verien_skysigh_024.mp3", "", "", 1000859746, 2735177816, Spawn) + AddConversationOption(conversation, "I do!", "Quest5Chat_6") + StartConversation(conversation, NPC, Spawn, "Have you the icemane cat pelts necessary for the frogloks, " .. GetName(Spawn) .. "?") + elseif HasCompletedQuest(Spawn, PilgrimPelts) and HasQuest(Spawn, IcemanesCometh) == false and HasCompletedQuest(Spawn, IcemanesCometh) == false then + Quest6Chat_1(NPC, Spawn) + elseif GetQuestStep(Spawn, IcemanesCometh) == 1 then + AddConversationOption(conversation, "No. I'll be back with one.") + StartConversation(conversation, NPC, Spawn, "Do you have a cub trailing behind?") + elseif GetQuestStep(Spawn, IcemanesCometh) == 2 then + PlayFlavor(NPC, "verien_skysigh/halas/gwenevyns_cove/verien_skysigh_034.mp3", "", "", 1379708225, 648722209, Spawn) + AddConversationOption(conversation, "Gladly!", "Quest6Chat_5") + AddConversationOption(conversation, "It would be rude of me not to accept this gift.", "Quest6Chat_5") + StartConversation(conversation, NPC, Spawn, "You have provided us with enough icemane cubs, " .. GetName(Spawn) .. ". Please take this as a token of our appreciation. We are all very grateful for what you have done.") + elseif HasCompleteQuest(Spawn, IcemanesCometh) then + PlayFlavor(NPC, "", "I have alerted Pilgrims' Landing of all that transpired here, and of the orc prints you found.", "", 0, 0, Spawn) + end +end + +function Quest1Chat_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "verien_skysigh/halas/gwenevyns_cove/verien_skysigh_002.mp3", "", "", 3370476937, 2935818226, Spawn) + AddConversationOption(conversation, "I found orc footprints when I was harvesting the tundra beets.", "Quest1Chat_3") + StartConversation(conversation, NPC, Spawn, "Oh, yes! The bear was still standing over him when the guard here spotted... Wait! Why would you think it was an orc?!") +end + +function Quest1Chat_3(NPC, Spawn) + if GetQuestStep(Spawn, BeetsAlternative) == 3 then + SetStepComplete(Spawn, BeetsAlternative, 3) + end + + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "verien_skysigh/halas/gwenevyns_cove/verien_skysigh_003.mp3", "", "", 490895384, 2888964692, Spawn) + AddConversationOption(conversation, "That sounds plausible.", "Quest2Chat_1") + AddConversationOption(conversation, "I'm not staying here to find out. Good bye.") + StartConversation(conversation, NPC, Spawn, "Ack! That is not good. No, not at all. That may even explain the grizzly attack! Perhaps they have been displaced from their den or pushed into attacking, whipped into a frenzy, if you would, by the orcs' presence?") +end + +function Quest2Chat_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "verien_skysigh/halas/gwenevyns_cove/verien_skysigh_004.mp3", "", "", 788435827, 360271773, Spawn) + AddConversationOption(conversation, "I'll do that.", "OfferSiftingGarbage") + AddConversationOption(conversation, "The guard here can do it.", "Quest2Chat_2") + StartConversation(conversation, NPC, Spawn, "Then someone must delve into the blizzard grizzly den in search for any sign of the orcs in there.") +end + +function Quest2Chat_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "verien_skysigh/halas/gwenevyns_cove/verien_skysigh_005.mp3", "", "", 1213684046, 759187296, Spawn) + AddConversationOption(conversation, "Since you put it that way, I'll do it.", "OfferSiftingGarbage") + AddConversationOption(conversation, "I can't agree to this. Good bye.") + StartConversation(conversation, NPC, Spawn, "Oh, no. We cannot afford to give up our guard here. We will be at the mercy of the wilds if that were the case. We are depending on you, Ocahao.") +end + +function Quest3Chat_1(NPC, Spawn) + SetStepComplete(Spawn, SiftingGarbage, 2) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "verien_skysigh/halas/gwenevyns_cove/verien_skysigh_007.mp3", "", "", 162612722, 573249743, Spawn) + AddConversationOption(conversation, "I do not know.", "Quest3Chat_2") + StartConversation(conversation, NPC, Spawn, "Then they must be somewhere else. But where?") +end + +function Quest3Chat_2(NPC, Spawn) + PlayFlavor(NPC, "", "Let me think on this a moment", "think", 0, 0, Spawn) +end + +function Quest3Chat_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "verien_skysigh/halas/gwenevyns_cove/verien_skysigh_009.mp3", "", "", 4139445726, 3566440142, Spawn) + AddConversationOption(conversation, "I'll be sure to take in the view while I'm there.", "OfferPilgrimPathfinder") + AddConversationOption(conversation, "I am not going to scale the blizzard grizzly cave.") + StartConversation(conversation, NPC, Spawn, "Hike up to the top of the blizzard grizzly den. The higher vantage point should allow you to find our best path across the land, and may offer you some knowledge into where the orcs went.") +end + +function Quest3Chat_4(NPC, Spawn) + PlayFlavor(NPC, "verien_skysigh/halas/gwenevyns_cove/verien_skysigh_010.mp3", "", "", 649282566, 2245924889, Spawn) + AddConversationOption(conversation, "No. But I did see a path we may be able to take.", "Quest3Chat_5") + StartConversation(conversation, NPC, Spawn, "Tell me, what did you find atop the blizzard grizzly den, " .. GetName(Spawn) .. "? Any sign of the orcs?") +end + +function Quest3Chat_5(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "verien_skysigh/halas/gwenevyns_cove/verien_skysigh_011.mp3", "", "", 3584109077, 3566409712, Spawn) + AddConversationOption(conversation, "The western shore leads into the dangerous plains ahead, but there seems to be a path leading into the hills above it.", "Quest4Chat_1") + StartConversation(conversation, NPC, Spawn, "Well, at least we have that. Where must we go?") +end + +function Quest4Chat_1(NPC, Spawn) + if GetQuestStep(Spawn, PilgrimPathfinder) == 2 then + SetStepComplete(Spawn, PilgrimPathfinder, 2) + end + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "verien_skysigh/halas/gwenevyns_cove/verien_skysigh_012.mp3", "", "", 3213043201, 2009251303, Spawn) + AddConversationOption(conversation, "I hope so, Verien.", "Quest4Chat_2") + StartConversation(conversation, NPC, Spawn, "If that is the case then we may just stand a better chance of surviving the trek to the city by taking that hill trail.") +end + +function Quest4Chat_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "verien_skysigh/halas/gwenevyns_cove/verien_skysigh_013.mp3", "", "", 45193987, 852341503, Spawn) + AddConversationOption(conversation, "Yeah, that is true.", "Quest4Chat_3") + AddConversationOption(conversation, "We must take the chance.", "Quest4Chat_3") + StartConversation(conversation, NPC, Spawn, "Higher lands of snow are not necessarily the safest of conditions though, you know.") +end + +function Quest4Chat_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "verien_skysigh/halas/gwenevyns_cove/verien_skysigh_014.mp3", "", "", 4224224424, 1811407629, Spawn) + AddConversationOption(conversation, "I can do that for us.", "OfferPilgrimScout") + AddConversationOption(conversation, "No. There are others that can do that.") + StartConversation(conversation, NPC, Spawn, "Will you please go scout out the path you spotted from atop the blizzard grizzly cave? Once you have confirmed that it is as clear as you suspect, then return to us and we will make our way.") +end + +function Quest4Chat_4(NPC, Spawn) + if GetQuestStep(Spawn, PilgrimScout) == 2 then + SetStepComplete(Spawn, PilgrimScout, 2) + end + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "verien_skysigh/halas/gwenevyns_cove/verien_skysigh_017.mp3", "", "", 2885535176, 962895283, Spawn) + AddConversationOption(conversation, "It seems the only choice.", "Quest5Chat_1") + StartConversation(conversation, NPC, Spawn, "As I had thought, it was too good to be true. Then we have only one choice. We must go west through the dangerous plains if we hope to reach the city of New Halas.") +end + +function Quest5Chat_1(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "verien_skysigh/halas/gwenevyns_cove/verien_skysigh_018.mp3", "", "", 4165854, 1367268200, Spawn) + AddConversationOption(conversation, "I don't know either.", "Quest5Chat_2") + AddConversationOption(conversation, "I have made it deep into their cave.", "Quest5Chat_5") + AddConversationOption(conversation, "You need to face your own fears.") + StartConversation(conversation, NPC, Spawn, "But I do not know how we are going to make it past the grizzlies. Their hunger seems insatiable!") +end + +function Quest5Chat_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "verien_skysigh/halas/gwenevyns_cove/verien_skysigh_019.mp3", "", "", 655764296, 405564965, Spawn) + AddConversationOption(conversation, "But that's just me. That's not all of you, too.", "Quest5Chat_3") + StartConversation(conversation, NPC, Spawn, "But wait, you must know something about it. You made it deep into their cave! You have obviously learned how to fight them and how to navigate around them when possible.") +end + +function Quest5Chat_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "verien_skysigh/halas/gwenevyns_cove/verien_skysigh_021.mp3", "", "", 4164608708, 1805231816, Spawn) + AddConversationOption(conversation, "This is nothing like a swamp.", "Quest5Chat_4") + StartConversation(conversation, NPC, Spawn, "Good point. I will have to think on this a while. In the mean time, the froglok pilgrims are becoming cold. Their amphibious bodies were not blessed by Marr with much protection from the elements.") +end + +function Quest5Chat_4(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "verien_skysigh/halas/gwenevyns_cove/verien_skysigh_022.mp3", "", "", 208330103, 1632388719, Spawn) + AddConversationOption(conversation, "I'm your lion hunter!", "OfferPilgrimPelts") + AddConversationOption(conversation, "I am no lion hunter.") + StartConversation(conversation, NPC, Spawn, "Exactly. Wregan had promised to hunt them up some lion pelts to keep them warm. He had said that they were not far from here, but we have never seen any. Will you journey ahead and slay any of the big icemane cats you find?") +end + +function Quest5Chat_5(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "verien_skysigh/halas/gwenevyns_cove/verien_skysigh_020.mp3", "", "", 1987107371, 160133318, Spawn) + AddConversationOption(conversation, "But that's just me. That's not all of you, too.", "Quest5Chat_3") + StartConversation(conversation, NPC, Spawn, "That's right, you have. And you have survived the hike atop of their cave. You have obviously learned how to fight them and how to navigate around them when possible.") +end + +function Quest5Chat_6(NPC, Spawn) + SetStepComplete(Spawn, PilgrimPelts, 2) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "verien_skysigh/halas/gwenevyns_cove/verien_skysigh_025.mp3", "", "", 555682283, 4098507949, Spawn) + AddConversationOption(conversation, "That would be nice.", "Quest6Chat_1") + StartConversation(conversation, NPC, Spawn, "Ah, this is wonderful! In fact, you may have returned with enough fur for us to craft you something, too.") +end + +function Quest6Chat_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "verien_skysigh/halas/gwenevyns_cove/verien_skysigh_026.mp3", "", "", 3888781085, 2569289661, Spawn) + AddConversationOption(conversation, "No. Why?", "Quest6Chat_2") + StartConversation(conversation, NPC, Spawn, "Did you see any of the ferocious grizzlies amongst the icemane cats?") +end + +function Quest6Chat_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "verien_skysigh/halas/gwenevyns_cove/verien_skysigh_027.mp3", "", "", 2243105575, 903335403, Spawn) + AddConversationOption(conversation, "It would seem so.", "Quest6Chat_3") + AddConversationOption(conversation, "If you say so.", "Quest6Chat_3") + StartConversation(conversation, NPC, Spawn, "I have been giving some thought to how we may increase our safety while we journey past the grizzlies. The bears have learned to steer clear of the icemane cats, as you can attest.") +end + +function Quest6Chat_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "verien_skysigh/halas/gwenevyns_cove/verien_skysigh_028.mp3", "", "", 3038823377, 2150811874, Spawn) + AddConversationOption(conversation, "How are we to fool the cats into doing that?", "Quest6Chat_4") + AddConversationOption(conversation, "I do not like the sound of this plan. Goodbye.") + StartConversation(conversation, NPC, Spawn, "So, if we have some of the cats working as our chaperones, then we should make it past the grizzlies.") +end + +function Quest6Chat_4(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "verien_skysigh/halas/gwenevyns_cove/verien_skysigh_029.mp3", "", "", 1710780263, 712522304, Spawn) + AddConversationOption(conversation, "I'll do that.", "OfferIcemanesCometh") + AddConversationOption(conversation, "Oh, no way! I am not agreeing to this one.") + StartConversation(conversation, NPC, Spawn, "There is no fooling them. I'm suggesting you take this binding tether and leash icemane cubs with it. ") +end + +function Quest6Chat_5(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "verien_skysigh/halas/gwenevyns_cove/verien_skysigh_035.mp3", "", "", 1914930424, 1171502027, Spawn) + AddConversationOption(conversation, "I can do it.", "Quest6Chat_6") + AddConversationOption(conversation, "Then I wish you good luck.", "CompleteIcemanesCometh") + StartConversation(conversation, NPC, Spawn, "And now that I know that these pilgrims will be in safe hands, I must venture back to Pilgrims' Landing. Someone must alert them of all that has transpired here, and of the orc prints you found.") +end + +function Quest6Chat_6(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "verien_skysigh/halas/gwenevyns_cove/verien_skysigh_036.mp3", "", "", 491269098, 2938508945, Spawn) + AddConversationOption(conversation, "Then I wish you good luck.", "CompleteIcemanesCometh") + StartConversation(conversation, NPC, Spawn, "No. I will not stand in the way of your travels any further.") +end + +function CompleteIcemanesCometh(NPC, Spawn) + SetStepComplete(Spawn, IcemanesCometh, 2) + RemoveSpawnAccess(NPC, Spawn) +end + +function OfferSiftingGarbage(NPC, Spawn) + OfferQuest(NPC, Spawn, SiftingGarbage) +end + +function OfferPilgrimPathfinder(NPC, Spawn) + OfferQuest(NPC, Spawn, PilgrimPathfinder) +end + +function OfferPilgrimScout(NPC, Spawn) + OfferQuest(NPC, Spawn, PilgrimScout) +end + +function OfferPilgrimPelts(NPC, Spawn) + OfferQuest(NPC, Spawn, PilgrimPelts) +end + +function OfferIcemanesCometh(NPC, Spawn) + OfferQuest(NPC, Spawn, IcemanesCometh) +end diff --git a/server/SpawnScripts/FrostfangSea/VillgerdGregorson.lua b/server/SpawnScripts/FrostfangSea/VillgerdGregorson.lua new file mode 100644 index 000000000..2461853e9 --- /dev/null +++ b/server/SpawnScripts/FrostfangSea/VillgerdGregorson.lua @@ -0,0 +1,22 @@ +--[[ + Script Name : SpawnScripts/FrostfangSea/VillgerdGregorson.lua + Script Purpose : Morag McMarrin + Script Author : theFoof + Script Date : 2013.09.26 + Script Notes : +--]] + +require"SpawnScripts/FrostfangSea/halas_proximity_cheer" + +function spawn(NPC) + SetPlayerProximityFunction(NPC, 10, "ProxCheer") +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + PlayFlavor(NPC, "", "", "hello", 0, 0, Spawn) + FaceTarget(NPC, Spawn) +end \ No newline at end of file diff --git a/server/SpawnScripts/FrostfangSea/WardenBretta.lua b/server/SpawnScripts/FrostfangSea/WardenBretta.lua new file mode 100644 index 000000000..1732fa457 --- /dev/null +++ b/server/SpawnScripts/FrostfangSea/WardenBretta.lua @@ -0,0 +1,217 @@ +--[[ + Script Name : SpawnScripts/FrostfangSea/WardenBretta.lua + Script Purpose : Warden Bretta + Script Author : theFoof + Script Date : 2013.10.29 + Script Notes : +--]] + +function spawn(NPC) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + PlayFlavor(NPC, "", "I apologize, but my services are only for those who claim New Halas as their home.", "no", 0, 0, Spawn) +end + +--[[ Need to script the rest out along with her housing quest +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_1_1041.mp3", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Actually, there are a few things I would like to know.", "dlg_5_1") + AddConversationOption(conversation, "No, I think I have it covered. May I see my room, please?") + AddConversationOption(conversation, "I don't have time for this right now. Farewell.") + StartConversation(conversation, NPC, Spawn, "Greetings, Iwkaat. I am Warden Bretta, and I am responsible for showing you to your first home here in New Halas. Before I do so, do you have any questions for me about housing?") + if convo==15 then + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_2_1041.mp3", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "How can I place an item in my house?", "dlg_15_1") + AddConversationOption(conversation, "What kind of housing is available to me?") + AddConversationOption(conversation, "What is the marketboard for?") + AddConversationOption(conversation, "What is my house for?") + AddConversationOption(conversation, "I should be going now. Farewell.") + StartConversation(conversation, NPC, Spawn, "Ah, you have returned. Did you have any questions for me?") + end + + if convo==24 then + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_2_1041.mp3", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Actually, there are a few things I would like to know.", "dlg_24_1") + AddConversationOption(conversation, "No, I think I have it covered. May I see my room, please?") + AddConversationOption(conversation, "I don't have time for this right now. Farewell.") + StartConversation(conversation, NPC, Spawn, "Greetings, Tuce. I am Warden Bretta, and I am responsible for showing you to your first home here in New Halas. Before I do so, do you have any questions for me about housing?") + end + +end + +function dlg_5_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "How can I place an item in my house?", "dlg_5_2") + AddConversationOption(conversation, "What kind of housing is available to me?") + AddConversationOption(conversation, "What is the marketboard for?") + AddConversationOption(conversation, "What is my house for?") + AddConversationOption(conversation, "That should be all, I am ready to see my house now.") + AddConversationOption(conversation, "I should be going now. Farewell.") + StartConversation(conversation, NPC, Spawn, "Excellent, I am here to help. What is it you would like to know?") +end + +function dlg_5_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "What kind of housing is available to me?", "dlg_5_3") + AddConversationOption(conversation, "What is the marketboard for?") + AddConversationOption(conversation, "What is my house for?") + AddConversationOption(conversation, "That should be all, I am ready to see my house now.") + AddConversationOption(conversation, "I should be going now. Farewell.") + StartConversation(conversation, NPC, Spawn, "To place an item in your house, you must first find the item in your inventory. Once you've done so, right-click on the item and select the 'place' option. Then you'll see a tinted outline of your item in your house. When the item is highlighted green you can place it in that location. If it is highlighted red, you cannot.") +end + +function dlg_5_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "My thanks to you for your help! I will return if I have any other questions.") + StartConversation(conversation, NPC, Spawn, "Then I will show you to your room. Behind me is the Valor Homesteads, which is often the first housing the citizens of New Halas will own. Due to your assistance, we've agreed to waive the initial fee for you, as thanks for your help to the city. Please left-click on the door behind me and select 'buy'. Once you are inside, you will find some basic necessities for your home - feel free to place them as you see fit. Farewell to you!") +end + +function dlg_15_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "So if I want something larger, what is available to me?") + AddConversationOption(conversation, "How can I place an item in my house?", "dlg_15_2") + AddConversationOption(conversation, "What is the marketboard for?") + AddConversationOption(conversation, "What is my house for?") + AddConversationOption(conversation, "I should be going now. Farewell.") + StartConversation(conversation, NPC, Spawn, "New Halas has several floor plans to choose from. This here is the basic one-room homestead, which should suit your needs for now. You may find someday that this room is no longer comfortable or spacious enough for you, and might desire to move to something larger.") +end + +function dlg_24_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "How can I place an item in my house?", "dlg_24_2") + AddConversationOption(conversation, "What kind of housing is available to me?") + AddConversationOption(conversation, "What is the marketboard for?") + AddConversationOption(conversation, "What is my house for?") + AddConversationOption(conversation, "That should be all, I am ready to see my house now.") + AddConversationOption(conversation, "I should be going now. Farewell.") + StartConversation(conversation, NPC, Spawn, "Excellent, I am here to help. What is it you would like to know?") +end + +function dlg_24_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "What kind of housing is available to me?", "dlg_24_3") + AddConversationOption(conversation, "What is the marketboard for?") + AddConversationOption(conversation, "What is my house for?") + AddConversationOption(conversation, "That should be all, I am ready to see my house now.") + AddConversationOption(conversation, "I should be going now. Farewell.") + StartConversation(conversation, NPC, Spawn, "To place an item in your house, you must first find the item in your inventory. Once you've done so, right-click on the item and select the 'place' option. Then you'll see a tinted outline of your item in your house. When the item is highlighted green you can place it in that location. If it is highlighted red, you cannot.") +end + +function dlg_24_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "So if I want something larger, what is available to me?", "dlg_24_4") + AddConversationOption(conversation, "How can I place an item in my house?") + AddConversationOption(conversation, "What is the marketboard for?") + AddConversationOption(conversation, "What is my house for?") + AddConversationOption(conversation, "That should be all, I am ready to see my house now.") + AddConversationOption(conversation, "I should be going now. Farewell.") + StartConversation(conversation, NPC, Spawn, "New Halas has several floor plans to choose from. This here is the basic one-room homestead, which should suit your needs for now. You may find someday that this room is no longer comfortable or spacious enough for you, and might desire to move to something larger.") +end + +function dlg_24_4(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "How do I use the marketboard?") + AddConversationOption(conversation, "How can I place an item in my house?") + AddConversationOption(conversation, "What kind of housing is available to me?", "dlg_24_5") + AddConversationOption(conversation, "What is my house for?") + AddConversationOption(conversation, "That should be all, I am ready to see my house now.") + AddConversationOption(conversation, "I should be going now. Farewell.") + StartConversation(conversation, NPC, Spawn, "The marketboard is a house item, not unlike regular furniture. What sets the marketboard apart from the rest however is that once your marketboard is mounted on a wall in your home you can use it to sell items to other citizens of New Halas. These items can be purchased by your fellow citizens at our Broker, who is based here in the city.") +end + +function dlg_24_5(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "What kind of housing is available to me?") + AddConversationOption(conversation, "What is the marketboard for?", "dlg_24_6") + AddConversationOption(conversation, "What is my house for?") + AddConversationOption(conversation, "That should be all, I am ready to see my house now.") + AddConversationOption(conversation, "I should be going now. Farewell.") + StartConversation(conversation, NPC, Spawn, "To place an item in your house, you must first find the item in your inventory. Once you've done so, right-click on the item and select the 'place' option. Then you'll see a tinted outline of your item in your house. When the item is highlighted green you can place it in that location. If it is highlighted red, you cannot.") +end + +function dlg_24_6(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "So if I want something larger, what is available to me?", "dlg_24_7") + AddConversationOption(conversation, "How can I place an item in my house?") + AddConversationOption(conversation, "What is the marketboard for?") + AddConversationOption(conversation, "What is my house for?") + AddConversationOption(conversation, "That should be all, I am ready to see my house now.") + AddConversationOption(conversation, "I should be going now. Farewell.") + StartConversation(conversation, NPC, Spawn, "New Halas has several floor plans to choose from. This here is the basic one-room homestead, which should suit your needs for now. You may find someday that this room is no longer comfortable or spacious enough for you, and might desire to move to something larger.") +end + +function dlg_24_7(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "How can I place an item in my house?", "dlg_24_8") + AddConversationOption(conversation, "What is the marketboard for?") + AddConversationOption(conversation, "What is my house for?") + AddConversationOption(conversation, "That should be all, I am ready to see my house now.") + AddConversationOption(conversation, "I should be going now. Farewell.") + StartConversation(conversation, NPC, Spawn, "Along with the one room model, New Halas also has a three room and five room house available for purchase. Those houses are quite spacious, and the largest of them are very luxurious and expensive.") +end + +function dlg_24_8(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "What else can you tell me?") + AddConversationOption(conversation, "How can I place an item in my house?") + AddConversationOption(conversation, "What kind of housing is available to me?", "dlg_24_9") + AddConversationOption(conversation, "What is the marketboard for?") + AddConversationOption(conversation, "That should be all, I am ready to see my house now.") + AddConversationOption(conversation, "I should be going now. Farewell.") + StartConversation(conversation, NPC, Spawn, "You will find that your house has many uses, the first of which is the ability to store house items. Each house has a limit to the number of house items you can place in it, so as you gain more possessions you wish to display you will need larger houses to do so.") +end + +function dlg_24_9(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "My thanks to you for your help! I will return if I have any other questions.") + StartConversation(conversation, NPC, Spawn, "Then I will show you to your room. Behind me is the Valor Homesteads, which is often the first housing the citizens of New Halas will own. Due to your assistance, we've agreed to waive the initial fee for you, as thanks for your help to the city. Please left-click on the door behind me and select 'buy'. Once you are inside, you will find some basic necessities for your home - feel free to place them as you see fit. Farewell to you!") +end +--]] diff --git a/server/SpawnScripts/FrostfangSea/WidgetRedbladeSignalFireSwitch.lua b/server/SpawnScripts/FrostfangSea/WidgetRedbladeSignalFireSwitch.lua new file mode 100644 index 000000000..0a2744088 --- /dev/null +++ b/server/SpawnScripts/FrostfangSea/WidgetRedbladeSignalFireSwitch.lua @@ -0,0 +1,45 @@ +--[[ + Script Name : SpawnScriptsFrostfangSeaWidgetRedbladeSignalFireSwitch.lua + Script Purpose : for the spawn "redblade_x4_signal_fire_switch" + Script Author : theFoof + Script Date : 2013.5.6 + Script Notes : +--]] + +local FlameOn = 5 + +function spawn(NPC) + SetRequiredQuest(NPC, FlameOn, 1) + SetPlayerProximityFunction(NPC, 15, "InRange") +end + +function respawn(NPC) + spawn(NPC) +end + +function casted_on(Target, Caster, SpellName) + if GetQuestStep(Caster, FlameOn) == 1 and SpellName == "Light Signal Fire" then + AddSpawnAccess(GetSpawn(Target, 4701733), Caster) + SetStepComplete(Caster, FlameOn, 1) + local zone = GetZone(Target) + local orc1 = SpawnByLocationID(zone, 1032806) + local orc2 = SpawnByLocationID(zone, 1032810) + SetTempVariable(orc1, "other_orc", orc2) + SetTempVariable(orc2, "other_orc", orc1) + Attack(orc1, Caster) + Attack(orc2, Caster) + SetRequiredQuest(Target, FlameOn, 5) + end +end + +function InRange(NPC, Player) + if GetQuestStep(Player, FlameOn) == 2 then + local zone = GetZone(Player) + local orc1 = SpawnByLocationID(zone, 1032806) + local orc2 = SpawnByLocationID(zone, 1032810) + SetTempVariable(orc1, "other_orc", orc2) + SetTempVariable(orc2, "other_orc", orc1) + Attack(orc1, Player) + Attack(orc2, Player) + end +end \ No newline at end of file diff --git a/server/SpawnScripts/FrostfangSea/WidgetRedbladeSignalFireSwitch.luaa b/server/SpawnScripts/FrostfangSea/WidgetRedbladeSignalFireSwitch.luaa new file mode 100644 index 000000000..e2f47bc72 --- /dev/null +++ b/server/SpawnScripts/FrostfangSea/WidgetRedbladeSignalFireSwitch.luaa @@ -0,0 +1,41 @@ +--[[ + Script Name : SpawnScriptsFrostfangSeaWidgetRedbladeSignalFireSwitch.lua + Script Purpose : for the spawn "redblade_x4_signal_fire_switch" + Script Author : theFoof + Script Date : 2013.5.6 + Script Notes : +--]] + +local FlameOn = 5 + +function spawn(NPC) + SetRequiredQuest(NPC, FlameOn, 1) + SetPlayerProximityFunction(NPC, 15, "InRange") +end + +function respawn(NPC) + spawn(NPC) +end + +function casted_on(Target, Caster, SpellName) + if GetQuestStep(Caster, FlameOn) == 1 and SpellName == "Light Signal Fire" then + AddSpawnAccess(GetSpawn(Target, 4701733), Caster) + SetStepComplete(Caster, FlameOn, 1) + local zone = GetZone(Target) + SpawnByLocationID(zone, 32806) + SpawnByLocationID(zone, 32810) + Attack(GetSpawnByLocationID(zone, 32806), Caster) + Attack(GetSpawnByLocationID(zone, 32810), Caster) + SetRequiredQuest(Target, FlameOn, 5) + end +end + +function InRange(NPC, Player) + if GetQuestStep(Player, FlameOn) == 2 then + local zone = GetZone(Player) + SpawnByLocationID(zone, 32806) + SpawnByLocationID(zone, 32810) + Attack(GetSpawnByLocationID(zone, 32806), Caster) + Attack(GetSpawnByLocationID(zone, 32810), Caster) + end +end \ No newline at end of file diff --git a/server/SpawnScripts/FrostfangSea/WolcottChillborn.lua b/server/SpawnScripts/FrostfangSea/WolcottChillborn.lua new file mode 100644 index 000000000..f45c6e167 --- /dev/null +++ b/server/SpawnScripts/FrostfangSea/WolcottChillborn.lua @@ -0,0 +1,61 @@ +--[[ + Script Name : SpawnScripts/FrostfangSea/WolcottChillborn.lua + Script Purpose : inquis trainer in Halas + Script Author : theFoof + Script Date : 2013.9.24 + Script Notes : +--]] + +local INQUISITOR = 14 + +function spawn(NPC) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + if GetClass(Spawn) == INSQUISITOR then + PlayFlavor(NPC, "", "", "hello", 0, 0, Spawn) + conversation = CreateConversation() + AddConversationOption(conversation, "What advice do you have for a fellow inquisitor?", "InqChat1") + AddConversationOption(conversation, "That I did! But I have no time to chat about it.") + StartConversation(conversation, NPC, Spawn, "Ah, another who has refused to ignore their convictions. Welcome, my fellow inquisitor!") + else + PlayFlavor(NPC, "", "Tapping into divine power does not require giving yourself to a petty god. Tapping into that power merely requires proper training and understanding, just like any discipline.", "hello", 0, 0, Spawn) + end +end + +function InqChat1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "That's useful to know!", "InqChat2") + StartConversation(conversation, NPC, Spawn, "If you find items that add to your wisdom or stamina, then take them! Wisdom increases the amount of damage your spells can inflict on others and raises your defenses against spell damage inflicted on you. Your stamina affects your health. This is crucial.") +end + +function InqChat2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "That's interesting.", "InqChat3") + StartConversation(conversation, NPC, Spawn, "We are known for protecting ourselves and our allies with reactive heals. These are spells cast on an individual that lay in wait until they have damage inflicted upon them. At which time the spell responds and a heal is given to the individual.") +end + +function InqChat3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "That will be useful!", "InqChat4") + StartConversation(conversation, NPC, Spawn, "But the divine power, demanded by our fervent faith, is not limited to mending the wounded or purging ailments from the suffering. It can also be called upon to increase the amount of damage your spells or your ally's spells will inflict upon our enemies.") +end + +function InqChat4(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "Thank you for the advice.") + StartConversation(conversation, NPC, Spawn, "And protect yourself with a good set of plate mail, " .. GetName(Spawn) .. ". The armor may be cumbersome, but its protective properties will be necessary, as it takes time to call forth our divine powers.") +end \ No newline at end of file diff --git a/server/SpawnScripts/FrostfangSea/WolfomBonetooth.lua b/server/SpawnScripts/FrostfangSea/WolfomBonetooth.lua new file mode 100644 index 000000000..1aede4268 --- /dev/null +++ b/server/SpawnScripts/FrostfangSea/WolfomBonetooth.lua @@ -0,0 +1,20 @@ +--[[ + Script Name : SpawnScripts/FrostfangSea/WolfomBonetooth.lua + Script Purpose : Wolfom Bonetooth + Script Author : theFoof + Script Date : 2013.09.16 + Script Notes : +--]] + +function spawn(NPC) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + PlayFlavor(NPC, "", "Do not be in such a rush young one. You will be strong enough one day to take on my noble tasks. ", "no", 1689589577, 4560189, Spawn) +end + diff --git a/server/SpawnScripts/FrostfangSea/WreganFirebeard.lua b/server/SpawnScripts/FrostfangSea/WreganFirebeard.lua new file mode 100644 index 000000000..e4e316a9f --- /dev/null +++ b/server/SpawnScripts/FrostfangSea/WreganFirebeard.lua @@ -0,0 +1,120 @@ +--[[ + Script Name : SpawnScripts/FrostfangSea/WreganFirebeard.lua + Script Purpose : Wregan Firebeard + Script Author : theFoof + Script Date : 2013.05.14 + Script Notes : +--]] + +local RideGwenevyn = 8 + +local BeetsAlternative = 13 + +local SiftingGarbage = 14 + +function spawn(NPC) + SetPlayerProximityFunction(NPC, 10, "InRange", "LeaveRange") + SetPlayerProximityFunction(NPC, 50, "SpawnAccess", "SpawnAccess") + ProvidesQuest(NPC, BeetsAlternative) + AddSpawnAccess(NPC, NPC) +end + +function respawn(NPC) + spawn(NPC) +end + +function InRange(NPC, Spawn) +end + +function LeaveRange(NPC, Spawn) +end + +function SpawnAccess(NPC, Spawn) + if HasCompletedQuest(Spawn, BeetsAlternative) or GetQuestStep(Spawn, BeetsAlternative) == 3 then + if HasCompletedQuest(Spawn, SiftingGarbage) == false and GetQuestStep(Spawn, SiftingGarbage) ~= 2 then + AddSpawnAccess(GetSpawn(NPC, 4701834), Spawn) + end + else + AddSpawnAccess(NPC, Spawn) + end +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + if HasQuest(Spawn, BeetsAlternative) == false and HasCompletedQuest(Spawn, BeetsAlternative) == false then + Quest1Chat_1(NPC, Spawn) + elseif GetQuestStep(Spawn, RideGwenevyn) == 1 then + Quest1Chat_1(NPC, Spawn) + elseif GetQuestStep(Spawn, BeetsAlternative) == 1 then + PlayFlavor(NPC, "", "As soon as you get those tundra beets we'll be able to embark on our journey.", "tapfoot", 1689589577, 4560189, Spawn) + end +end + +function Quest1Chat_1(NPC, Spawn) + if GetQuestStep(Spawn, RideGwenevyn) == 1 then + SetStepComplete(Spawn, RideGwenevyn, 1) + end + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "wregan_firebeard/halas/gwenevyns_cove/wregan_firebeard_001.mp3", "", "", 1553579040, 3434703804, Spawn) + AddConversationOption(conversation, "Yes.", "Quest1Chat_2") + AddConversationOption(conversation, "You could say that.", "Quest1Chat_2") + StartConversation(conversation, NPC, Spawn, "Another pilgrim, I take it?") +end + +function Quest1Chat_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "wregan_firebeard/halas/gwenevyns_cove/wregan_firebeard_002.mp3", "", "", 1986724829, 1256857659, Spawn) + AddConversationOption(conversation, "Why's that?", "Quest1Chat_3") + StartConversation(conversation, NPC, Spawn, "Well, you're lucky you arrived when you did.") +end + +function Quest1Chat_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "wregan_firebeard/halas/gwenevyns_cove/wregan_firebeard_003.mp3", "", "", 931801191, 1464668700, Spawn) + AddConversationOption(conversation, "You were going to leave without enough provisions?", "Quest1Chat_4") + AddConversationOption(conversation, "Why didn't you have the others gather what is needed?", "Quest1Chat_6") + StartConversation(conversation, NPC, Spawn, "We were about ready to set out for our treacherous pilgrimage to the city of New Halas. Unfortunately, if your plans were to join us then you need to help us fill our packs with provisions for the trip.") +end + +function Quest1Chat_4(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "wregan_firebeard/halas/gwenevyns_cove/wregan_firebeard_005.mp3", "", "", 3666066743, 675613480, Spawn) + AddConversationOption(conversation, "Oh, so I'll be gathering the stuff I need for this trip?", "OfferBeetsAlternative") + AddConversationOption(conversation, "I am here to hunt not gather!", "Quest1Chat_5") + StartConversation(conversation, NPC, Spawn, "No. We already have enough provisions for those that were already here, but you are another mouth to feed.") +end + +function Quest1Chat_5(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "wregan_firebeard/halas/gwenevyns_cove/wregan_firebeard_006.mp3", "", "", 3776727269, 3608373686, Spawn) + AddConversationOption(conversation, "Oh, so I'll be gathering the stuff I need for this trip?", "OfferBeetsAlternative") + AddConversationOption(conversation, "I am still not convinced. I'm going to go now.") + StartConversation(conversation, NPC, Spawn, "There will be plenty of opportunity for hunting and fighting, eager one. The journey to the city is dangersome, full of wild beasts and harsh elements. That is why we must prepare ourselves now.") +end + +function Quest1Chat_6(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "wregan_firebeard/halas/gwenevyns_cove/wregan_firebeard_004.mp3", "", "", 2820759679, 594607724, Spawn) + AddConversationOption(conversation, "Oh, so I'll be gathering the stuff I need for this trip?", "OfferBeetsAlternative") + AddConversationOption(conversation, "I am here to hunt not gather!", "Quest1Chat_5") + StartConversation(conversation, NPC, Spawn, "I did. They gathered the provisions that they will need for the journey, but you are another mouth to feed.") +end + +function OfferBeetsAlternative(NPC, Spawn) + if HasQuest(Spawn, BeetsAlternative) == false and HasCompletedQuest(Spawn, BeetsAlternative) == false then + OfferQuest(NPC, Spawn, BeetsAlternative) + end +end diff --git a/server/SpawnScripts/FrostfangSea/YashaRedblade.lua b/server/SpawnScripts/FrostfangSea/YashaRedblade.lua new file mode 100644 index 000000000..1e1181cff --- /dev/null +++ b/server/SpawnScripts/FrostfangSea/YashaRedblade.lua @@ -0,0 +1,379 @@ +--[[ + Script Name : SpawnScripts/FrostfangSea/YashaRedblade.lua + Script Purpose : Yasha Redblade + Script Author : theFoof + Script Date : 2013.03.16 + Script Notes :Ememjr 2017.10.21 add code, to give item if missing from your inventory on hail +--]] + +local HalasianWelcome = 1 + +local StoneCombat = 2 + +local CallArms = 3 + +local BoatloadWork = 4 + +local FlameOn = 5 + +local RideGwenevyn = 8 + +function spawn(NPC) + SetPlayerProximityFunction(NPC, 10, "InRange", "LeaveRange") + ProvidesQuest(NPC, StoneCombat) + ProvidesQuest(NPC, CallArms) + ProvidesQuest(NPC, BoatloadWork) + ProvidesQuest(NPC, FlameOn) + ProvidesQuest(NPC, RideGwenevyn) +end + +function respawn(NPC) + spawn(NPC) +end + +function InRange(NPC, Spawn) +end + +function LeaveRange(NPC, Spawn) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + if HasQuest(Spawn, HalasianWelcome) then + PlayFlavor(NPC, "yasha_redblade/halas/pilgrims_landing/redblade_001.mp3", "", "", 1052109202, 2650157895, Spawn) + AddConversationOption(conversation, "Yes, and my muscles are a bit stiff.", "CompleteHalasianWelcome1") + AddConversationOption(conversation, "Yes, and I heard you could use some help.", "CompleteHalasianWelcome2") + StartConversation(conversation, NPC, Spawn, "Whoa! You finally woke, eh?") + elseif HasCompletedQuest(Spawn, HalasianWelcome) and HasCompletedQuest(Spawn, StoneCombat) == false and HasQuest(Spawn, StoneCombat) == false then + PlayFlavor(NPC, "yasha_redblade/halas/pilgrims_landing/redblade_001.mp3", "", "", 1052109202, 2650157895, Spawn) + AddConversationOption(conversation, "Yes, and my muscles are a bit stiff.", "Quest2Chat_0_1") + AddConversationOption(conversation, "Yes, and I heard you could use some help.", "Quest2Chat_1_1") + StartConversation(conversation, NPC, Spawn, "Whoa! You finally woke, eh?") + elseif GetQuestStep(Spawn, StoneCombat) == 4 then + AddConversationOption(conversation, "Yes. I defeated my opponent.", "CompleteStoneCombat") + StartConversation(conversation, NPC, Spawn, "Have you passed the test that Trainer Ragnhild Stonefist set before you?") + elseif HasCompletedQuest(Spawn, StoneCombat) and HasCompletedQuest(Spawn, CallArms) == false and HasQuest(Spawn, CallArms) == false then + Quest3Chat_0_1(NPC, Spawn) + elseif GetQuestStep(Spawn, CallArms) == 2 then + PlayFlavor(NPC, "yasha_redblade/halas/pilgrims_landing/redblade_014.mp3", "", "", 2562189235, 2582498054, Spawn) + AddConversationOption(conversation, "I killed many of the attacking orcs.", "FinishedCallArms") + StartConversation(conversation, NPC, Spawn, "How did you fare, " .. GetName(Spawn) .. "? Have the attacking orcs been defeated?") + elseif HasCompletedQuest(Spawn, CallArms) and HasCompletedQuest(Spawn, BoatloadWork) == false and HasQuest(Spawn, BoatloadWork) == false then + Quest4Chat_1(NPC, Spawn) + elseif GetQuestStep(Spawn, BoatloadWork) == 2 then + PlayFlavor(NPC, "yasha_redblade/halas/pilgrims_landing/redblade_014.mp3", "", "", 2562189235, 2582498054, Spawn) + AddConversationOption(conversation, "I hope so.", "Quest4Chat_6") + StartConversation(conversation, NPC, Spawn, "Thank Marr you have returned with the planks of wood, " .. GetName(Spawn) .. "! This new barricade will certainly help us keep the orcs at bay.") + elseif GetQuestStep(Spawn, BoatloadWork) == 3 then + if HasItem(Spawn, 46842) == false then + StartConversation(conversation, NPC, Spawn, "Set the new barricade down south of me where the break in the barricade is lit by two torches.") + SummonItem(Spawn, 46842, 1) + else + StartConversation(conversation, NPC, Spawn, "Set the new barricade down south of me where the break in the barricade is lit by two torches.") + end + elseif GetQuestStep(Spawn, BoatloadWork) == 4 then + SetStepComplete(Spawn, BoatloadWork, 4) + PlayFlavor(NPC, "yasha_redblade/halas/pilgrims_landing/redblade_014.mp3", "", "", 2562189235, 2582498054, Spawn) + AddConversationOption(conversation, "I have been glad to help.", "Quest5Chat_1") + AddConversationOption(conversation, "It has been rewarding.") + StartConversation(conversation, NPC, Spawn, "You really are a blessing from Marr, " .. GetName(Spawn) .. "! We cannot thank you enough for all that you have done to provide for us and keep us safe.") + elseif HasCompletedQuest(Spawn, BoatloadWork) and HasCompletedQuest(Spawn, FlameOn) == false and HasQuest(Spawn, FlameOn) == false then + Quest5Chat_1(NPC, Spawn) + elseif GetQuestStep(Spawn, FlameOn) == 1 then + PlayFlavor(NPC, "yasha_redblade/halas/pilgrims_landing/redblade_028.mp3", "", "", 3869056834, 2852458001, Spawn) + AddConversationOption(conversation, "Where is it again?", "Quest5Chat_3") + AddConversationOption(conversation, "How do I climb up to it?", "Quest5Chat_4") + AddConversationOption(conversation, "I'll light it, Yasha.") + StartConversation(conversation, NPC, Spawn, "We are counting on you to light the signal fire!") + elseif GetQuestStep(Spawn, FlameOn) == 3 then + PlayFlavor(NPC, "yasha_redblade/halas/pilgrims_landing/redblade_030.mp3", "", "", 1552005531, 3390176496, Spawn) + AddConversationOption(conversation, "I encountered some of the orcs up there!", "Quest5Chat_5") + StartConversation(conversation, NPC, Spawn, "The signal fire burns bright, " .. GetName(Spawn) .. ". But what took so long? I was growing concerned.") + elseif HasCompletedQuest(Spawn, FlameOn) and HasQuest(Spawn, RideGwenevyn) == false and HasCompletedQuest(Spawn, RideGwenevyn) == false then + Quest6Chat_1(NPC, Spawn) + elseif GetQuestStep(Spawn, RideGwenevyn) == 1 then + PlayFlavor(NPC, "", "You'll find the Gwenavyne II at the southern most tip of Pilgrims' Landing. It will take you over to Erollis.", "nod", 1689589577, 4560189, Spawn) + elseif HasCompletedQuest(Spawn, RideGwenevyn) then + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_2_1041.mp3", "I have no doubt the fates have something great in store for you!", "", 0, 0, Spawn) + else + local choice = math.random(1,3) + if choice == 1 then + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_2_1041.mp3", "", "", 0, 0, Spawn) + elseif choice == 2 then + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_3_1041.mp3", "", "", 0, 0, Spawn) + elseif choice == 3 then + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_1_1041.mp3", "", "", 0, 0, Spawn) + end + end +end + +function CompleteHalasianWelcome1(NPC, Spawn) + SetStepComplete(Spawn, HalasianWelcome, 1) + Quest2Chat_0_1(NPC, Spawn) +end + +function CompleteHalasianWelcome2(NPC, Spawn) + SetStepComplete(Spawn, HalasianWelcome, 1) + Quest2Chat_1_1(NPC, Spawn) +end + +function CompleteStoneCombat(NPC, Spawn) + SetStepComplete(Spawn, StoneCombat, 4) + Quest3Chat_0_1(NPC, Spawn) +end + +function Quest2Chat_0_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "yasha_redblade/halas/pilgrims_landing/redblade_002.mp3", "", "", 395241080, 1989878493, Spawn) + AddConversationOption(conversation, "That would be great!", "Quest2Chat_1_1") + AddConversationOption(conversation, "Not quite yet.") + StartConversation(conversation, NPC, Spawn, "That's no surprise considering the work out that they must have endured swimming and dragging those others ashore the way you did. You looking to work 'em out a bit?") +end + +function Quest2Chat_1_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "yasha_redblade/halas/pilgrims_landing/redblade_005.mp3", "", "", 3031703897, 849787882, Spawn) + AddConversationOption(conversation, "I'll go speak with her, right now.", "OfferStoneCombat") + AddConversationOption(conversation, "I don't think I'm up for this. Good bye.") + StartConversation(conversation, NPC, Spawn, "You heard correctly. But first I need to ensure that you are ready to enter the fray. Go speak to Trainer Ragnhild Stonefist. She's east of me at the other end of the ship's hull. She'll teach you the basics of combat.") +end + +function Quest3Chat_0_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "yasha_redblade/halas/pilgrims_landing/redblade_009.mp3", "", "", 3426547133, 152454946, Spawn) + AddConversationOption(conversation, "That's true.", "Quest3Chat_1_1") + AddConversationOption(conversation, "I am more than warmed up.", "Quest3Chat_1_1") + StartConversation(conversation, NPC, Spawn, "I bet your muscles aren't so stiff after that warm up.") +end + +function Quest3Chat_1_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "yasha_redblade/halas/pilgrims_landing/redblade_010.mp3", "", "", 1856638395, 3517818586, Spawn) + AddConversationOption(conversation, "Is it orcs?", "Quest3Chat_2_1") + AddConversationOption(conversation, "Perfect! Who is it?", "Quest3Chat_2_2") + StartConversation(conversation, NPC, Spawn, "Good, 'cause there's a real foe around here for you to face.") +end + +function Quest3Chat_2_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "yasha_redblade/halas/pilgrims_landing/redblade_012.mp3", "", "", 1278159585, 3525975110, Spawn) + AddConversationOption(conversation, "There are orcs attacking?!", "Quest3Chat_3_1") + AddConversationOption(conversation, "I am not ready to face orcs!") + StartConversation(conversation, NPC, Spawn, "The tenacious orcs! The mangy beasts started rushing our shore shortly after you swam ashore carrying the others. They must have realized how strong this outpost was becoming.") +end + + +function Quest3Chat_2_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "yasha_redblade/halas/pilgrims_landing/redblade_011.mp3", "", "", 1164815048, 3310979023, Spawn) + AddConversationOption(conversation, "Then we must face them!", "Quest3Chat_3_1") + AddConversationOption(conversation, "I am not ready to face orcs.") + StartConversation(conversation, NPC, Spawn, "Yes! The mangy beasts started rushing our shore shortly after you swam ashore carrying the others. They must have realized how strong this outpost was becoming.") +end + +function Quest3Chat_3_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "yasha_redblade/halas/pilgrims_landing/redblade_013.mp3", "", "", 4060266194, 2101228978, Spawn) + AddConversationOption(conversation, "Right away!", "OfferCallArms") + StartConversation(conversation, NPC, Spawn, "Yes, indeed! Fall upon the Ry'Gorr centurions that are rushing the barricades southeast of me. Return to me when you have done this.") +end + +function FinishedCallArms(NPC, Spawn) + if GetQuestStep(Spawn, CallArms) == 2 then + SetStepComplete(Spawn, CallArms, 2) + end + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "yasha_redblade/halas/pilgrims_landing/redblade_014.mp3", "", "", 2562189235, 2582498054, Spawn) + AddConversationOption(conversation, "I did.", "Quest4Chat_1") + StartConversation(conversation, NPC, Spawn, "Ah, I wish I would have seen it! You must have unleashed an impressive fury upon those murderous meat slabs.") +end + +function Quest4Chat_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "yasha_redblade/halas/pilgrims_landing/redblade_014.mp3", "", "", 2562189235, 2582498054, Spawn) + AddConversationOption(conversation, "You want me to kill some more?", "Quest4Chat_2") + AddConversationOption(conversation, "What can we do about it?", "Quest4Chat_3") + StartConversation(conversation, NPC, Spawn, "But I am afraid that is not the last we will see of them. Even now, another wave of them may be crashing upon our shores!") +end + +function Quest4Chat_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "yasha_redblade/halas/pilgrims_landing/redblade_014.mp3", "", "", 2562189235, 2582498054, Spawn) + AddConversationOption(conversation, "I can do that.", "Quest4Chat_4") + AddConversationOption(conversation, "I am not interested in crafting.", "Quest4Chat_5") + StartConversation(conversation, NPC, Spawn, "I had something else in mind, " .. GetName(Spawn) .. ". The barricades that are holding back the orcs were frantically crafted out of debris and boat wreckage. There are several of them that need to be replaced.") +end + +function Quest4Chat_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "yasha_redblade/halas/pilgrims_landing/redblade_014.mp3", "", "", 2562189235, 2582498054, Spawn) + AddConversationOption(conversation, "I can do that.", "Quest4Chat_4") + AddConversationOption(conversation, "I am not interested in crafting.", "Quest4Chat_5") + StartConversation(conversation, NPC, Spawn, "We must fortify our defenses! The barricades that are holding back the orcs were frantically crafted out of debris and boat wreckage. There are several of them that need to be replaced.") +end + +function Quest4Chat_4(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "yasha_redblade/halas/pilgrims_landing/redblade_014.mp3", "", "", 2562189235, 2582498054, Spawn) + AddConversationOption(conversation, "Right away!", "OfferBoatloadWork") + AddConversationOption(conversation, "Maybe later, Yasha.") + StartConversation(conversation, NPC, Spawn, "I am relieved to hear you say that, " .. GetName(Spawn) .. ". Gather planks of wood from the bow of the old boat wreckage west of me. I'll make them into a makeshift barricade.") +end + +function Quest4Chat_5(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "yasha_redblade/halas/pilgrims_landing/redblade_014.mp3", "", "", 2562189235, 2582498054, Spawn) + AddConversationOption(conversation, "Right away!", "OfferBoatloadWork") + AddConversationOption(conversation, "Maybe later, Yasha.") + StartConversation(conversation, NPC, Spawn, "That's fine, " .. GetName(Spawn) .. ". I'll craft the makeshift barricade. I just need you to gather planks of wood from the bow of the old boat wreckage west of me.") +end + +function Quest4Chat_6(NPC, Spawn) + SetStepComplete(Spawn, BoatloadWork, 2) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "yasha_redblade/halas/pilgrims_landing/redblade_014.mp3", "", "", 2562189235, 2582498054, Spawn) + AddConversationOption(conversation, "Will do!") + StartConversation(conversation, NPC, Spawn, "Take this makeshift barricade piece and set it in the frozen tundra south of me where the break in the barricade line is lit by two torches.") +end + +function Quest5Chat_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "yasha_redblade/halas/pilgrims_landing/redblade_025.mp3", "", "", 1803586212, 1797757498, Spawn) + AddConversationOption(conversation, "What for?", "Quest5Chat_2") + AddConversationOption(conversation, "Sounds easy. I'll do it.", "Quest5Chat_3") + AddConversationOption(conversation, "I am not able to help you right now.") + StartConversation(conversation, NPC, Spawn, "Wait a moment! Your timing is perfect, " .. GetName(Spawn) .. ". We need someone to light the signal fire atop the cliff to the east.") +end + +function Quest5Chat_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "yasha_redblade/halas/pilgrims_landing/redblade_026.mp3", "", "", 3324242342, 3751082906, Spawn) + AddConversationOption(conversation, "To warn them.", "Quest5Chat_3") + StartConversation(conversation, NPC, Spawn, "It is to alert the fledgling city of New Halas of the orcs that have been attacking our outpost.") +end + +function Quest5Chat_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "yasha_redblade/halas/pilgrims_landing/redblade_028.mp3", "", "", 3869056834, 2852458001, Spawn) + AddConversationOption(conversation, "I'll light it, Yasha.", "OfferFlameOn") + AddConversationOption(conversation, "How do I climb?", "Quest5Chat_4") + StartConversation(conversation, NPC, Spawn, "Venture east and you will find an imposing wall of ice with a rope ladder scaling it. Climb the ladder to the ice shelf above. The signal fire is up there.") +end + +function Quest5Chat_4(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "yasha_redblade/halas/pilgrims_landing/redblade_029.mp3", "", "", 476266339, 1999686318, Spawn) + AddConversationOption(conversation, "That's good to know.", "OfferFlameOn") + StartConversation(conversation, NPC, Spawn, "That's easy! If a vertical surface can be climbed all you need to do is approach it. You will find that you are a natural at it and that you have just as much control over what direction you wish to travel on the vertical surfaces as you do over horizontal ones.") +end + +function Quest5Chat_5(NPC, Spawn) + SetStepComplete(Spawn, FlameOn, 3) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "yasha_redblade/halas/pilgrims_landing/redblade_031.mp3", "", "", 517725875, 2427954496, Spawn) + AddConversationOption(conversation, "Thank you.", "Quest6Chat_1") + AddConversationOption(conversation, "I'm not sure that's true.", "Quest6Chat_1") + StartConversation(conversation, NPC, Spawn, "Holy Twins! You killed them, didn't you?! I knew you were brought to this floating island by the fates and now you have proven it!") +end + +function Quest6Chat_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "yasha_redblade/halas/pilgrims_landing/redblade_032.mp3", "", "", 4231067263, 531833046, Spawn) + AddConversationOption(conversation, "How do I get there?", "Quest6Chat_2") + AddConversationOption(conversation, "Thank you, again.", "OfferRidegwenevyn") + AddConversationOption(conversation, "Maybe later.") + StartConversation(conversation, NPC, Spawn, "Report to Wregan Firebeard. He is at a small camp site at Gwenevyn's Cove, preparing to guide the latest group of pilgrims to the city. If you hurry, you should be able to catch him before they embark on their trek.") +end + +function Quest6Chat_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "yasha_redblade/halas/pilgrims_landing/redblade_033.mp3", "", "", 1250945947, 234141592, Spawn) + AddConversationOption(conversation, "Thank you, again.", "OfferRidegwenevyn") + AddConversationOption(conversation, "Can't I swim over there?", "OfferRidegwenevynTwo") + StartConversation(conversation, NPC, Spawn, "Get aboard the small ferry craft that we have pieced together at the southern most tip of Pilgrims' Landing. It will take you over to Erollis. The camp site's fire should be noticeable from the beach.") +end + +function OfferStoneCombat(NPC, Spawn) + if HasCompletedQuest(Spawn, HalasianWelcome) then + OfferQuest(NPC, Spawn, StoneCombat) + end +end + +function OfferCallArms(NPC, Spawn) + if HasCompletedQuest(Spawn, StoneCombat) then + OfferQuest(NPC, Spawn, CallArms) + end +end + +function OfferBoatloadWork(NPC, Spawn) + if HasCompletedQuest(Spawn, CallArms) then + OfferQuest(NPC, Spawn, BoatloadWork) + end +end + +function OfferFlameOn(NPC, Spawn) + if HasCompletedQuest(Spawn, BoatloadWork) and HasQuest(Spawn, FlameOn) == false then + OfferQuest(NPC, Spawn, FlameOn) + end +end + +function OfferRidegwenevyn(NPC, Spawn) + if HasCompletedQuest(Spawn, FlameOn) then + OfferQuest(NPC, Spawn, RideGwenevyn) + end +end + +function OfferRidegwenevynTwo(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + if HasCompletedQuest(Spawn, FlameOn) then + OfferQuest(NPC, Spawn, RideGwenevyn) + end + + PlayFlavor(NPC, "yasha_redblade/halas/pilgrims_landing/redblade_034.mp3", "", "", 4096485687, 3591012782, Spawn) + AddConversationOption(conversation, "Oh, okay.") + StartConversation(conversation, NPC, Spawn, "You can, sure. But I wouldn't suggest it. The water is freezing.") +end \ No newline at end of file diff --git a/server/SpawnScripts/FrostfangSea/aBlizzardGrizzly_(572511).lua b/server/SpawnScripts/FrostfangSea/aBlizzardGrizzly_(572511).lua new file mode 100644 index 000000000..9370ede1e --- /dev/null +++ b/server/SpawnScripts/FrostfangSea/aBlizzardGrizzly_(572511).lua @@ -0,0 +1,28 @@ +--[[ + Script Name : Quests/FrostfangSea/aBlizzardGrizzly_(572511).lua + Script Purpose : movement loop for a bear at loc id 572511 + Script Author : theFoof + Script Date : 2013.5.22 +--]] +function spawn(NPC) + X = GetX(NPC) + Y = GetY(NPC) + Z = GetZ(NPC) + + MovementLoopAddLocation(NPC, 87.5, 35.93, -497.63, 2, 0) + MovementLoopAddLocation(NPC, 83.06, 36.29, -503.23, 2, 0) + MovementLoopAddLocation(NPC, 81.31, 40.11, -522.55, 2, 0) + MovementLoopAddLocation(NPC, 79.99, 45.27, -542.14, 2, math.random(3,7)) + MovementLoopAddLocation(NPC, 76.11, 40.43, -526.41, 2, 0) + MovementLoopAddLocation(NPC, 83.06, 36.29, -503.23, 2, 0) + MovementLoopAddLocation(NPC, 87.5, 35.93, -497.63, 2, 0) + MovementLoopAddLocation(NPC, X, Y, Z, 2, math.random(3,7)) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) +end \ No newline at end of file diff --git a/server/SpawnScripts/FrostfangSea/aFarSeasdockhand.lua b/server/SpawnScripts/FrostfangSea/aFarSeasdockhand.lua new file mode 100644 index 000000000..958c055ab --- /dev/null +++ b/server/SpawnScripts/FrostfangSea/aFarSeasdockhand.lua @@ -0,0 +1,56 @@ +--[[ + Script Name : SpawnScripts/FrostfangSea/aFarSeasdockhand.lua + Script Purpose : a Far Seas dockhand + Script Author : theFoof + Script Date : 2013.10.30 + Script Notes : +--]] + +function spawn(NPC) + SetPlayerProximityFunction(NPC, 15, "InRange") + MovementLoopAddLocation(NPC, -356.89, 30.06, 221.89, 2, 5) + MovementLoopAddLocation(NPC, -340.84, 30.68, 213.38, 2, 0) + MovementLoopAddLocation(NPC, -346.85, 30.68, 190.74, 2, 0) + MovementLoopAddLocation(NPC, -372.11, 29.19, 188.43, 2, 0) + MovementLoopAddLocation(NPC, -382, 27.92, 172.56, 2, 0) + MovementLoopAddLocation(NPC, -396.69, 22.43, 139.94, 2, 0) + MovementLoopAddLocation(NPC, -413.74, 24.45, 117.98, 2, 0) + MovementLoopAddLocation(NPC, -407.96, 26.02, 96.43, 2, 0) + MovementLoopAddLocation(NPC, -385.31, 38.69, 59.85, 2, 0) + MovementLoopAddLocation(NPC, -388.58, 41.35, 48.87, 2, 0) + MovementLoopAddLocation(NPC, -423.39, 52.31, 54.65, 2, 0) + MovementLoopAddLocation(NPC, -422.64, 52.79, 47.93, 2, 0) + MovementLoopAddLocation(NPC, -401.55, 52.79, 27.18, 2, 0) + MovementLoopAddLocation(NPC, -438.03, 53.19, 25.34, 2, 0) + MovementLoopAddLocation(NPC, -438.31, 52.31, 42.13, 2, 0) + MovementLoopAddLocation(NPC, -423.39, 52.31, 54.65, 2, 0) + MovementLoopAddLocation(NPC, -388.58, 41.35, 48.87, 2, 0) + MovementLoopAddLocation(NPC, -385.31, 38.69, 59.85, 2, 0) + MovementLoopAddLocation(NPC, -407.96, 26.02, 96.43, 2, 0) + MovementLoopAddLocation(NPC, -413.74, 24.45, 117.98, 2, 0) + MovementLoopAddLocation(NPC, -396.69, 22.43, 139.94, 2, 0) + MovementLoopAddLocation(NPC, -382, 27.92, 172.56, 2, 0) + MovementLoopAddLocation(NPC, -372.11, 29.19, 188.43, 2, 0) + MovementLoopAddLocation(NPC, -346.85, 30.68, 190.74, 2, 0) + MovementLoopAddLocation(NPC, -340.84, 30.68, 213.38, 2, 0) +end + +function respawn(NPC) + spawn(NPC) +end + +function InRange(NPC, Spawn) + local choice = math.random(1,3) + if choice == 1 then + PlayFlavor(NPC, "", "The Far Seas Trading Company is always looking for a few strong backs and brave souls.", "", 1689589577, 4560189, Spawn) + elseif choice == 2 then + PlayFlavor(NPC, "", "Watch your step around these parts, traveler.", "", 1689589577, 4560189, Spawn) + else + PlayFlavor(NPC, "", "Safe travels to you.", "", 0, 0, Spawn) + end +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + PlayFlavor(NPC, "", "", "hello", 0, 0, Spawn) +end \ No newline at end of file diff --git a/server/SpawnScripts/FrostfangSea/aRyGorrambusher.lua b/server/SpawnScripts/FrostfangSea/aRyGorrambusher.lua new file mode 100644 index 000000000..eff6c70d7 --- /dev/null +++ b/server/SpawnScripts/FrostfangSea/aRyGorrambusher.lua @@ -0,0 +1,24 @@ +--[[ + Script Name : SpawnScripts/FrostfangSea/aRyGorrambusher.lua + Script Purpose : for the spawns "a RyGorr ambusher" + Script Author : theFoof + Script Date : 2013.5.10 + Script Notes : +--]] + +local FlameOn = 5 + +function spawn(NPC) +end + +function death(NPC, Spawn) -- updates step 2 of "Flame On!" when the encounter is killed. + if not IsAlive(GetTempVariable(NPC, "other_orc")) then + SetStepComplete(Spawn, FlameOn, 2) + end + SetTempVariable(NPC, "other_orc", nil) +end + +function CombatReset(NPC) + Despawn(NPC) + SetTempVariable(NPC, "other_orc", nil) +end \ No newline at end of file diff --git a/server/SpawnScripts/FrostfangSea/aRyGorrcenturion.lua b/server/SpawnScripts/FrostfangSea/aRyGorrcenturion.lua new file mode 100644 index 000000000..9e5722a13 --- /dev/null +++ b/server/SpawnScripts/FrostfangSea/aRyGorrcenturion.lua @@ -0,0 +1,37 @@ +--[[ + Script Name : Quests/FrostfangSea/arygorrcenturion.lua + Script Purpose : the spawn "a Ry'Gorr centurion" + Script Author : theFoof + Script Date : 2013.5.16 +--]] + +function spawn(NPC) + MovementLoopAddLocation(NPC, -304.78 + math.random(-7,7), 18.51, -611.98, 3, math.random(2,6)) + MovementLoopAddLocation(NPC, -321.28 + math.random(-7,7), 27.91, -659.17 + math.random(-7,7), 4, math.random(2,6)) + if GetSpawnLocationID(NPC) == 572680 or GetSpawnLocationID(NPC) == 572681 then + MovementLoopAddLocation(NPC, -319.99, 33.45, -703.09, 7, math.random(3,4)) + MovementLoopAddLocation(NPC, -312.91, 33.33, -707.07, 3, math.random(1,2)) + MovementLoopAddLocation(NPC, -324.50, 33.89, -702.57, 3, math.random(4,7)) + MovementLoopAddLocation(NPC, -312.91, 33.33, -707.07, 3, math.random(4,7)) + elseif GetSpawnLocationID(NPC) == 572682 or GetSpawnLocationID(NPC) == 572683 then + MovementLoopAddLocation(NPC, -344.56, 33.45, -699.75, 7, math.random(3,4)) + MovementLoopAddLocation(NPC, -338.27, 34.1, -701.33, 3, math.random(1,2)) + MovementLoopAddLocation(NPC, -347.24, 32.61, -697.9, 3, math.random(4,7)) + MovementLoopAddLocation(NPC, -360.37, 34.7, -702.44, 7, math.random(5,10)) + MovementLoopAddLocation(NPC, -338.27, 34.1, -701.33, 3, math.random(4,7)) + elseif GetSpawnLocationID(NPC) == 572684 then + MovementLoopAddLocation(NPC, -360.37, 34.7, -702.44, 7, math.random(5,20)) + end +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) +end + +function death(NPC) + SpawnByLocationID(GetZone(NPC), GetSpawnLocationID(NPC)) +end \ No newline at end of file diff --git a/server/SpawnScripts/FrostfangSea/aRyGorrinvader.lua b/server/SpawnScripts/FrostfangSea/aRyGorrinvader.lua new file mode 100644 index 000000000..e1216f7e0 --- /dev/null +++ b/server/SpawnScripts/FrostfangSea/aRyGorrinvader.lua @@ -0,0 +1,47 @@ +--[[ + Script Name : SpawnScripts/FrostfangSea/aRyGorrinvader.lua + Script Purpose : for the Ry'Gorr invaders + Script Author : theFoof + Script Date : 2013.6.15 + Script Notes : +--]] +require"SpawnScripts/Generic/random_pattern_small" + +local NothingWaste = 56 + +function spawn(NPC) + ChooseMovement(NPC) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) +end + +function death(NPC, Spawn) + if HasQuest(Spawn, NothingWaste) then + if GetQuestStep(Spawn, NothingWaste) < 4 then + if not QuestStepIsComplete(Spawn, NothingWaste, 1) then + local HelmetChance = math.random(1, 100) + if HelmetChance >= 50 then + AddLootItem(NPC, 11818) + end + end + if not QuestStepIsComplete(Spawn, NothingWaste, 2) then + local ChestguardChance = math.random(1,100) + if ChestguardChance >= 50 then + AddLootItem(NPC, 11817) + end + end + if not QuestStepIsComplete(Spawn, NothingWaste, 3) then + local WarhammerChance = math.random(1,100) + if WarhammerChance >= 50 then + AddLootItem(NPC, 11824) + end + end + end + end +end \ No newline at end of file diff --git a/server/SpawnScripts/FrostfangSea/aRyGorrinvader2.lua b/server/SpawnScripts/FrostfangSea/aRyGorrinvader2.lua new file mode 100644 index 000000000..6c8422974 --- /dev/null +++ b/server/SpawnScripts/FrostfangSea/aRyGorrinvader2.lua @@ -0,0 +1,62 @@ +--[[ + Script Name : SpawnScripts/FrostfangSea/aRyGorrinvader2.lua + Script Purpose : for the Ry'Gorr invaders + Script Author : theFoof + Script Date : 2013.6.15 + Script Notes : +--]] + +local NothingWaste = 56 + +function spawn(NPC) + EmoteLoop(NPC) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) +end + +function EmoteLoop(NPC) + local choice = math.random(1,4) + local emote + if choice == 1 then + emote = "flex" + elseif choice == 2 then + emote = "stretch" + elseif choice == 3 then + emote = "point" + elseif choice == 4 then + emote = "peer" + end + PlayFlavor(NPC, "", "", emote, 0, 0) + AddTimer(NPC, math.random(15000,45000), "EmoteLoop") +end + +function death(NPC, Spawn) + if HasQuest(Spawn, NothingWaste) then + if GetQuestStep(Spawn, NothingWaste) < 4 then + if not QuestStepIsComplete(Spawn, NothingWaste, 1) then + local HelmetChance = math.random(1, 100) + if HelmetChance >= 50 then + AddLootItem(NPC, 11818) + end + end + if not QuestStepIsComplete(Spawn, NothingWaste, 2) then + local ChestguardChance = math.random(1,100) + if ChestguardChance >= 50 then + AddLootItem(NPC, 11817) + end + end + if not QuestStepIsComplete(Spawn, NothingWaste, 3) then + local WarhammerChance = math.random(1,100) + if WarhammerChance >= 50 then + AddLootItem(NPC, 11824) + end + end + end + end +end \ No newline at end of file diff --git a/server/SpawnScripts/FrostfangSea/aRyGorrinvader3.lua b/server/SpawnScripts/FrostfangSea/aRyGorrinvader3.lua new file mode 100644 index 000000000..8629d22ab --- /dev/null +++ b/server/SpawnScripts/FrostfangSea/aRyGorrinvader3.lua @@ -0,0 +1,31 @@ +--[[ + Script Name : SpawnScripts/FrostfangSea/aRyGorrinvader3.lua + Script Purpose : Ry'Gorr invaders charging the beach + Script Author : theFoof + Script Date : 2013.9.11 + Script Notes : +--]] + +function spawn(NPC) + SpawnSet(NPC, "attackable", "0") + SpawnSet(NPC, "show_level", "0") + SpawnSet(NPC, "show_command_icon", "0") + SpawnSet(NPC, "visual_state", "0") + SpawnSet(NPC, "action_state", "0") + SpawnSet(NPC, "faction", "0") + AddTimer(NPC, math.random(12000,16000), "DeathTimer") + ChargeBeach(NPC) +end + +function respawn(NPC) + spawn(NPC) +end + +function ChargeBeach(NPC) + MovementLoopAddLocation(NPC, 263 + math.random(-10,10), 23.43, 224.5, 5, 0) + MovementLoopAddLocation(NPC, 195.25, 32, 212.90 + math.random(-10,10), 5, 0) +end + +function DeathTimer(NPC) -- the closest archer will kill this orc + KillSpawn(NPC, GetSpawn(NPC, 4700114), 1) +end \ No newline at end of file diff --git a/server/SpawnScripts/FrostfangSea/aRyGorrnecromancer.lua b/server/SpawnScripts/FrostfangSea/aRyGorrnecromancer.lua new file mode 100644 index 000000000..2f05bd6f5 --- /dev/null +++ b/server/SpawnScripts/FrostfangSea/aRyGorrnecromancer.lua @@ -0,0 +1,26 @@ +--[[ + Script Name : SpawnScripts/FrostfangSea/aRyGorrnecromancer.lua + Script Purpose : for the spawn "a Ry'Gorr necromancer" + Script Author : theFoof + Script Date : 2013.6.6 + Script Notes : +--]] + +function spawn(NPC) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) +end + +function aggro(NPC) + SpawnSet(NPC, "action_state", "0") +end + +function CombatReset(NPC) + SpawnSet(NPC, "action_state", "10974") +end \ No newline at end of file diff --git a/server/SpawnScripts/FrostfangSea/aRyGorrpatroller.lua b/server/SpawnScripts/FrostfangSea/aRyGorrpatroller.lua new file mode 100644 index 000000000..d3cf771fc --- /dev/null +++ b/server/SpawnScripts/FrostfangSea/aRyGorrpatroller.lua @@ -0,0 +1,14 @@ +--[[ + Script Name : SpawnScripts/FrostfangSea/aRyGorrpatroller.lua + Script Purpose : the ry'gorr patrollers + Script Author : theFoof + Script Date : 2013.6.24 + Script Notes : +--]] + +function spawn(NPC) +end + +function CombatReset(NPC) + Despawn(NPC) +end diff --git a/server/SpawnScripts/FrostfangSea/aRyGorrshocktrooper1.lua b/server/SpawnScripts/FrostfangSea/aRyGorrshocktrooper1.lua new file mode 100644 index 000000000..feb2c2bf6 --- /dev/null +++ b/server/SpawnScripts/FrostfangSea/aRyGorrshocktrooper1.lua @@ -0,0 +1,20 @@ +--[[ + Script Name : SpawnScripts/FrostfangSea/aRyGorrshocktrooper1.lua + Script Purpose : a Ry'Gorr shock trooper + Script Author : theFoof + Script Date : 2013.10.30 + Script Notes : +--]] + +function spawn(NPC) + MovementLoopAddLocation(NPC, 523.46, 34.72, 592.13, 2, 5) + MovementLoopAddLocation(NPC, 466.78, 30.97, 621.01, 2, 5) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) +end \ No newline at end of file diff --git a/server/SpawnScripts/FrostfangSea/aRyGorrshocktrooper2.lua b/server/SpawnScripts/FrostfangSea/aRyGorrshocktrooper2.lua new file mode 100644 index 000000000..5c4b36cc2 --- /dev/null +++ b/server/SpawnScripts/FrostfangSea/aRyGorrshocktrooper2.lua @@ -0,0 +1,20 @@ +--[[ + Script Name : SpawnScripts/FrostfangSea/aRyGorrshocktrooper2.lua + Script Purpose : a Ry'Gorr shock trooper + Script Author : theFoof + Script Date : 2013.10.30 + Script Notes : +--]] + +function spawn(NPC) + MovementLoopAddLocation(NPC, 397.67, 32, 655, 2, 5) + MovementLoopAddLocation(NPC, 483.85, 32.18, 627.03, 2, 5) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) +end \ No newline at end of file diff --git a/server/SpawnScripts/FrostfangSea/aRyGorrshocktrooper3.lua b/server/SpawnScripts/FrostfangSea/aRyGorrshocktrooper3.lua new file mode 100644 index 000000000..223dd9556 --- /dev/null +++ b/server/SpawnScripts/FrostfangSea/aRyGorrshocktrooper3.lua @@ -0,0 +1,20 @@ +--[[ + Script Name : SpawnScripts/FrostfangSea/aRyGorrshocktrooper3.lua + Script Purpose : a Ry'Gorr shock trooper + Script Author : theFoof + Script Date : 2013.10.30 + Script Notes : +--]] + +function spawn(NPC) + MovementLoopAddLocation(NPC, 601.15, 62.48, 696.65, 2, 5) + MovementLoopAddLocation(NPC, 585.57, 49.59, 628.77, 2, 5) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) +end \ No newline at end of file diff --git a/server/SpawnScripts/FrostfangSea/aRyGorrshocktrooper4.lua b/server/SpawnScripts/FrostfangSea/aRyGorrshocktrooper4.lua new file mode 100644 index 000000000..6184df386 --- /dev/null +++ b/server/SpawnScripts/FrostfangSea/aRyGorrshocktrooper4.lua @@ -0,0 +1,21 @@ +--[[ + Script Name : SpawnScripts/FrostfangSea/aRyGorrshocktrooper4.lua + Script Purpose : a Ry'Gorr shock trooper + Script Author : theFoof + Script Date : 2013.10.30 + Script Notes : +--]] + +function spawn(NPC) + MovementLoopAddLocation(NPC, 609.33, 44.91, 572.85, 2, 5) + MovementLoopAddLocation(NPC, 639.5, 49.82, 550.36, 2, 0) + MovementLoopAddLocation(NPC, 721.12, 58.23, 601.73, 2, 5) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) +end \ No newline at end of file diff --git a/server/SpawnScripts/FrostfangSea/aRyGorrshocktrooper5.lua b/server/SpawnScripts/FrostfangSea/aRyGorrshocktrooper5.lua new file mode 100644 index 000000000..a86899bcc --- /dev/null +++ b/server/SpawnScripts/FrostfangSea/aRyGorrshocktrooper5.lua @@ -0,0 +1,22 @@ +--[[ + Script Name : SpawnScripts/FrostfangSea/aRyGorrshocktrooper5.lua + Script Purpose : a Ry'Gorr shock trooper + Script Author : theFoof + Script Date : 2013.10.30 + Script Notes : +--]] + +function spawn(NPC) + MovementLoopAddLocation(NPC, 623.80, 71.44, 837.76, 2, 5) + MovementLoopAddLocation(NPC, 723.5, 61.4, 761.85, 2, 0) + MovementLoopAddLocation(NPC, 707.23, 59.23, 684.89, 2, 0) + MovementLoopAddLocation(NPC, 736.63, 61.42, 669.56, 2, 5) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) +end \ No newline at end of file diff --git a/server/SpawnScripts/FrostfangSea/aRyGorrtunneler.lua b/server/SpawnScripts/FrostfangSea/aRyGorrtunneler.lua new file mode 100644 index 000000000..5d1c3a245 --- /dev/null +++ b/server/SpawnScripts/FrostfangSea/aRyGorrtunneler.lua @@ -0,0 +1,28 @@ +--[[ + Script Name : FrostfangSea/SpawnScripts/aRyGorrtunneler.lua + Script Purpose : Ry'Gorr tunnelers + Script Author : theFoof + Script Date : 2013.7.24 + Script Notes : +--]] + +local BecomingOrcbane = 81 + +function spawn(NPC) +end + +function respawn(NPC) + spawn(NPC) +end +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) +end + +function casted_on(NPC, Spawn, SpellName) + if SpellName == "cadaver's dram" then + if GetQuestStep(Spawn, BecomingOrcbane) == 1 then + AddStepProgress(Spawn, BecomingOrcbane, 1, 1) + KillSpawn(NPC, Spawn, 1) + end + end +end \ No newline at end of file diff --git a/server/SpawnScripts/FrostfangSea/aRyGorrwarshaman.lua b/server/SpawnScripts/FrostfangSea/aRyGorrwarshaman.lua new file mode 100644 index 000000000..8ab0cf797 --- /dev/null +++ b/server/SpawnScripts/FrostfangSea/aRyGorrwarshaman.lua @@ -0,0 +1,26 @@ +--[[ + Script Name : SpawnScripts/FrostfangSea/aRyGorrwarshaman.lua + Script Purpose : for the ry'gorr war shamans + Script Author : theFoof + Script Date : 2013.6.15 + Script Notes : +--]] + +local RoughingReinforcements = 57 + +function spawn(NPC) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) +end + +function death(NPC, Spawn) + if GetQuestStep(Spawn, RoughingReinforcements) == 4 or GetQuestStep(Spawn, RoughingReinforcements) == 5 then + AddLootItem(NPC, 11820) + end +end \ No newline at end of file diff --git a/server/SpawnScripts/FrostfangSea/aRyGorrweapon.lua b/server/SpawnScripts/FrostfangSea/aRyGorrweapon.lua new file mode 100644 index 000000000..08a7f179f --- /dev/null +++ b/server/SpawnScripts/FrostfangSea/aRyGorrweapon.lua @@ -0,0 +1,35 @@ +--[[ + Script Name : SpawnScripts/FrostfangSea/aRyGorrweapon.lua + Script Purpose : for the spawn "a Ry'Gorr weapon" + Script Author : theFoof + Script Date : 2013.06.3 + Script Notes : +--]] +local DisarmingRyGorr = 48 + +function spawn(NPC) + AddSpawnAccess(NPC, NPC) + SetPlayerProximityFunction(NPC, 50, "SpawnAccess", "SpawnAccess") +end + +function respawn(NPC) + spawn(NPC) +end + +function casted_on(NPC, Spawn, SpellName) + if SpellName == 'Poultice' then + if GetQuestStep(Spawn, DisarmingRyGorr) == 1 then + SpawnSet(NPC, "action_state", "2602") + AddStepProgress(Spawn, DisarmingRyGorr, 1, 1) + Despawn(NPC) + end + end +end + +function SpawnAccess(NPC, Spawn) + if GetQuestStep(Spawn, DisarmingRyGorr) == 1 then + AddSpawnAccess(NPC, Spawn) + else + RemoveSpawnAccess(NPC, Spawn) + end +end \ No newline at end of file diff --git a/server/SpawnScripts/FrostfangSea/a_necromancer_totem.lua b/server/SpawnScripts/FrostfangSea/a_necromancer_totem.lua new file mode 100644 index 000000000..3508e766e --- /dev/null +++ b/server/SpawnScripts/FrostfangSea/a_necromancer_totem.lua @@ -0,0 +1,25 @@ +--[[ + Script Name : SpawnScripts/FrostfangSea/a_necromancer_totem.lua + Script Purpose : the necromancer totem in frostfang + Script Author : theFoof + Script Date : 2013.8.11 + Script Notes : +--]] + +local SometimesKnut = 84 + +function spawn(NPC) + AddSpawnAccess(NPC, NPC) + SetPlayerProximityFunction(NPC, 100, "SpawnAccess", "SpawnAccess") + SpawnSet(NPC, "action_state", "2623") +end + +function respawn(NPC) + spawn(NPC) +end + +function SpawnAccess(NPC, Spawn) + if GetQuestStep(Spawn, SometimesKnut) == 3 then + AddSpawnAccess(NPC, Spawn) + end +end \ No newline at end of file diff --git a/server/SpawnScripts/FrostfangSea/acrudepitoncannon.lua b/server/SpawnScripts/FrostfangSea/acrudepitoncannon.lua new file mode 100644 index 000000000..c7fc55d36 --- /dev/null +++ b/server/SpawnScripts/FrostfangSea/acrudepitoncannon.lua @@ -0,0 +1,46 @@ +--[[ + Script Name : SpawnScripts/FrostfangSea/acrudepitoncannon.lua + Script Purpose : for the spawn "a cude piton cannon" + Script Author : theFoof + Script Date : 2013.6.5 + Script Notes : +--]] + +local SiegeOver = 53 + +function spawn(NPC) + SetRequiredQuest(NPC, SiegeOver, 1) + LoadCannon(NPC) -- this starts the firing loop +end + +function respawn(NPC) + spawn(NPC) +end + +function LoadCannon(NPC) -- sets the cannon to load the harpooon and start a timer + SpawnSet(NPC, "visual_state", "20580") + AddTimer(NPC, math.random(2000,5000), "FireCannon") +end + +function FireCannon(NPC) -- fires the cannon and loops back to LoadCannon + SpawnSet(NPC, "visual_state", "20579") + AddTimer(NPC, 2000, "kill_fire") + AddTimer(NPC, math.random(6000,15000), "LoadCannon") +end + +function kill_fire(NPC) -- stops the firing animation from repeating + SpawnSet(NPC, "visual_state", "53347") +end +function casted_on(NPC, Spawn, SpellName) + if SpellName == 'destroy the cannon' then + if GetQuestStep(Spawn, SiegeOver) == 1 then + SpawnSet(NPC, "action_state", "2018") + AddStepProgress(Spawn, SiegeOver, 1, 1) + AddTimer(NPC, 1000, "depop") + end + end +end + +function depop(NPC) + Despawn(NPC) +end \ No newline at end of file diff --git a/server/SpawnScripts/FrostfangSea/acrustosesporetender.lua b/server/SpawnScripts/FrostfangSea/acrustosesporetender.lua new file mode 100644 index 000000000..20f0e49e5 --- /dev/null +++ b/server/SpawnScripts/FrostfangSea/acrustosesporetender.lua @@ -0,0 +1,33 @@ +--[[ + Script Name : SpawnScripts/FrostfangSea/acrustosesporetender.lua + Script Purpose : handles the mob "a crustose sporetender" + Script Author : theFoof + Script Date : 2013.5.13 + Script Notes : +--]] +require"SpawnScripts/Generic/random_pattern_small" + +local RepellingCritters = 7 + +function spawn(NPC) + ChooseMovement(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) +end + +function respawn(NPC) + spawn(NPC) +end + +function casted_on(Target, Caster, SpellName) + if SpellName == "Spray" then + if GetQuestStep(Caster, RepellingCritters) == 1 then + AddStepProgress(Caster, RepellingCritters, 1, 1) + end + SetSpeed(Target, 13) + MoveToLocation(Target, -139.96, 36.90, -811.62) + AddTimer(Target, 5000, "Despawn") + end +end \ No newline at end of file diff --git a/server/SpawnScripts/FrostfangSea/adamesrocket.lua b/server/SpawnScripts/FrostfangSea/adamesrocket.lua new file mode 100644 index 000000000..11df55b7b --- /dev/null +++ b/server/SpawnScripts/FrostfangSea/adamesrocket.lua @@ -0,0 +1,35 @@ +--[[ + Script Name : SpawnScripts/FrostfangSea/adamesrocket.lua + Script Purpose : the spawns named "a dame's rocket" + Script Author : theFoof + Script Date : 2013.8.27 + Script Notes : +--]] + +local SpiderPuffs = 87 + +function spawn(NPC) + SetRequiredQuest(NPC, SpiderPuffs, 1) + SpawnSet(NPC, "action_state", "1494") + AddSpawnAccess(NPC, NPC) + SetPlayerProximityFunction(NPC, 100, "SpawnAccess", "SpawnAccess") +end + +function respawn(NPC) + spawn(NPC) +end + +function casted_on(NPC, Spawn, SpellName) + if GetQuestStep(Spawn, SpiderPuffs) == 1 then + if SpellName == "a dame's rocket" then + AddStepProgress(Spawn, SpiderPuffs, 1, 1) + Despawn(NPC) + end + end +end + +function SpawnAccess(NPC, Spawn) + if HasQuest(Spawn, SpiderPuffs) or HasCompletedQuest(Spawn, SpiderPuffs) then + AddSpawnAccess(NPC, Spawn) + end +end \ No newline at end of file diff --git a/server/SpawnScripts/FrostfangSea/adisreputableboatman.lua b/server/SpawnScripts/FrostfangSea/adisreputableboatman.lua new file mode 100644 index 000000000..de1b521ff --- /dev/null +++ b/server/SpawnScripts/FrostfangSea/adisreputableboatman.lua @@ -0,0 +1,19 @@ +--[[ + Script Name : SpawnScripts/FrostfangSea/adisreputableboatman.lua + Script Purpose : a disreputable boatman + Script Author : theFoof + Script Date : 2013.10.30 + Script Notes : +--]] + +function spawn(NPC) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + PlayFlavor(NPC, "", "I've no business with you today.", "", 1689589577, 4560189, Spawn) +end \ No newline at end of file diff --git a/server/SpawnScripts/FrostfangSea/aformidablesparringpartner.lua b/server/SpawnScripts/FrostfangSea/aformidablesparringpartner.lua new file mode 100644 index 000000000..adf1366ac --- /dev/null +++ b/server/SpawnScripts/FrostfangSea/aformidablesparringpartner.lua @@ -0,0 +1,29 @@ +--[[ + Script Name : SpawnScripts/FrostfangSea/aformidablesparringpartner.lua + Script Purpose : a formidable sparring partner + Script Author : John Adams + Script Date : 2013.03.19 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +function spawn(NPC) + SetPlayerProximityFunction(NPC, 10, "InRange", "LeaveRange") +end + +function respawn(NPC) + spawn(NPC) +end + +function InRange(NPC, Spawn) +end + +function LeaveRange(NPC, Spawn) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + PlayFlavor(NPC, "", "You can attack me whenever you're ready. You can do that by double-clicking me, by right clicking me and selecting "attack," by using an offensive ability while you have me targeted, or by turning on auto attack by pressing the ~ key while you have me targeted.", "", 1689589577, 4560189, Spawn) + end + +end + diff --git a/server/SpawnScripts/FrostfangSea/afroglokcitizen_(swimming).lua b/server/SpawnScripts/FrostfangSea/afroglokcitizen_(swimming).lua new file mode 100644 index 000000000..3654e24de --- /dev/null +++ b/server/SpawnScripts/FrostfangSea/afroglokcitizen_(swimming).lua @@ -0,0 +1,23 @@ +--[[ + Script Name : SpawnScripts/FrostfangSea/afroglokcitizen_(swimming).lua + Script Purpose : makes a froglok citizen swim around in circles + Script Author : theFoof + Script Date : 2013.9.14 + Script Notes : +--]] + +function spawn(NPC) + MovementLoopAddLocation(NPC, 19, 146.01, -60, 1, 10) + MovementLoopAddLocation(NPC, 17.74, 146.01, -33.01, 1, 0) + MovementLoopAddLocation(NPC, 58.43, 146.12, -26.07, 1, 0) + MovementLoopAddLocation(NPC, 73.05, 146.12, -38.18, 1, 0) + MovementLoopAddLocation(NPC, 73.8, 146.12, -71.37, 1, 0) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) +end \ No newline at end of file diff --git a/server/SpawnScripts/FrostfangSea/aguarddog.lua b/server/SpawnScripts/FrostfangSea/aguarddog.lua new file mode 100644 index 000000000..a46135314 --- /dev/null +++ b/server/SpawnScripts/FrostfangSea/aguarddog.lua @@ -0,0 +1,28 @@ +--[[ + Script Name : SpawnScripts/FrostfangSea/aguarddog.lua + Script Purpose : a guard dog + Script Author : John Adams + Script Date : 2013.03.19 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +function spawn(NPC) + SetPlayerProximityFunction(NPC, 10, "InRange", "LeaveRange") +end + +function respawn(NPC) + spawn(NPC) +end + +function InRange(NPC, Spawn) +end + +function LeaveRange(NPC, Spawn) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + + PlayFlavor(NPC, "", "", "attack", 1689589577, 4560189, Spawn) +end + diff --git a/server/SpawnScripts/FrostfangSea/ahalasianreedplant.lua b/server/SpawnScripts/FrostfangSea/ahalasianreedplant.lua new file mode 100644 index 000000000..318d700c5 --- /dev/null +++ b/server/SpawnScripts/FrostfangSea/ahalasianreedplant.lua @@ -0,0 +1,26 @@ +--[[ + Script Name : SpawnScripts/FrostfangSea/ahalasianreedplant.lua + Script Purpose : halasian reed plants + Script Author : theFoof + Script Date : 2013.9.2 + Script Notes : +--]] + +local FrozenChowder = 88 + +function spawn(NPC) + SetRequiredQuest(NPC, FrozenChowder, 1) +end + +function respawn(NPC) + spawn(NPC) +end + +function casted_on(NPC, Spawn, SpellName) + if SpellName == 'a sprig of halasian reed' then + if GetQuestStep(Spawn, FrozenChowder) == 1 then + Despawn(NPC) + SetStepComplete(Spawn, FrozenChowder, 1) + end + end +end \ No newline at end of file diff --git a/server/SpawnScripts/FrostfangSea/alazyRyGorrorc.lua b/server/SpawnScripts/FrostfangSea/alazyRyGorrorc.lua new file mode 100644 index 000000000..29978e144 --- /dev/null +++ b/server/SpawnScripts/FrostfangSea/alazyRyGorrorc.lua @@ -0,0 +1,32 @@ +--[[ + Script Name : SpawnScripts/FrostfangSea/alazyRyGorrorc.lua + Script Purpose : for the lazy Ry'Gorr orc spawn + Script Author : theFoof + Script Date : 2013.6.10 + Script Notes : +--]] + +local ThroughEyes = 58 + +function spawn(NPC) + SetRequiredQuest(NPC, ThroughEyes, 1) + AddSpawnAccess(NPC, NPC) + SetPlayerProximityFunction(NPC, 50, "SpawnAccess", "SpawnAccess") +end + +function casted_on(NPC, Spawn, SpellName) + if SpellName == "the Ry'Gorr Scrying Eye" then + if GetQuestStep(Spawn, ThroughEyes) == 1 then + SetStepComplete(Spawn, ThroughEyes, 1) + RemoveSpawnAccess(NPC, Spawn) + end + end +end + +function SpawnAccess(NPC, Spawn) + if HasQuest(Spawn, ThroughEyes) and GetQuestStep(Spawn, ThroughEyes) < 2 then + AddSpawnAccess(NPC, Spawn) + elseif not HasCompletedQuest(Spawn, ThroughEyes) then + AddSpawnAccess(NPC, Spawn) + end +end \ No newline at end of file diff --git a/server/SpawnScripts/FrostfangSea/anIcemaneCub.lua b/server/SpawnScripts/FrostfangSea/anIcemaneCub.lua new file mode 100644 index 000000000..02e6d58bf --- /dev/null +++ b/server/SpawnScripts/FrostfangSea/anIcemaneCub.lua @@ -0,0 +1,66 @@ +--[[ + Script Name : SpawnScripts/FrostfangSea/anIcemaneCub.lua + Script Purpose : for the spawn "an icemane cub" + Script Author : theFoof + Script Date : 2013.05.25 + Script Notes : +--]] +require"SpawnScripts/Generic/tiny_movement_loop" +function spawn(NPC) + ChooseMovement(NPC) +end + +function respawn(NPC) + spawn(NPC) +end + +local IcemanesCometh = 18 +function casted_on(NPC, Caster, SpellName) + if SpellName == "Leash" then + if GetQuestStep(Caster, IcemanesCometh) == 1 then + if GetTempVariable(Caster, "cub1") == nil then + SetTempVariable(Caster, "cub1", NPC) + AddTimer(NPC, 600000, "depop") + SpawnSet(NPC, "attackable", "0") + SpawnSet(NPC, "show_level", "0") + SetFollowTarget(NPC, Caster) + SetSpeed(NPC, 9) + ToggleFollow(NPC) + elseif GetTempVariable(Caster, "cub2") == nil then + SetTempVariable(Caster, "cub2", NPC) + AddTimer(NPC, 600000, "depop") + SpawnSet(NPC, "attackable", "0") + SpawnSet(NPC, "show_level", "0") + SetFollowTarget(NPC, Caster) + SetSpeed(NPC, 9) + ToggleFollow(NPC) + elseif GetTempVariable(Caster, "cub3") == nil then + SetTempVariable(Caster, "cub3", NPC) + AddTimer(NPC, 600000, "depop") + SpawnSet(NPC, "attackable", "0") + SpawnSet(NPC, "show_level", "0") + SetFollowTarget(NPC, Caster) + SetSpeed(NPC, 9) + ToggleFollow(NPC) + elseif GetTempVariable(Caster, "cub4") == nil then + SetTempVariable(Caster, "cub4", NPC) + AddTimer(NPC, 600000, "depop") + SpawnSet(NPC, "attackable", "0") + SpawnSet(NPC, "show_level", "0") + SetFollowTarget(NPC, Caster) + SetSpeed(NPC, 9) + ToggleFollow(NPC) + end + end + end +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) +end + +function depop(NPC, Spawn) + if NPC ~= nil then + Despawn(NPC) + end +end \ No newline at end of file diff --git a/server/SpawnScripts/FrostfangSea/anaveragesparringpartner.lua b/server/SpawnScripts/FrostfangSea/anaveragesparringpartner.lua new file mode 100644 index 000000000..c9106b3f4 --- /dev/null +++ b/server/SpawnScripts/FrostfangSea/anaveragesparringpartner.lua @@ -0,0 +1,42 @@ +--[[ + Script Name : SpawnScripts/FrostfangSea/anaveragesparringpartner.lua + Script Purpose : an average sparring partner + Script Author : John Adams + Script Date : 2013.03.19 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +function spawn(NPC) + SetPlayerProximityFunction(NPC, 10, "InRange", "LeaveRange") +end + +function respawn(NPC) + spawn(NPC) +end + +function InRange(NPC, Spawn) +end + +function LeaveRange(NPC, Spawn) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + + local choice = math.random(1,5) + + if choice == 1 then + PlayFlavor(NPC, "", "You can attack me whenever you're ready. You can do that by double-clicking me, by right clicking me and selecting "attack," by using an offensive ability while you have me targeted, or by turning on auto attack by pressing the ~ key while you have me targeted.", "", 1689589577, 4560189, Spawn) + elseif choice == 2 then + PlayFlavor(NPC, "", "Nice.", "", 1689589577, 4560189, Spawn) + elseif choice == 3 then + PlayFlavor(NPC, "", "Next!", "", 1689589577, 4560189, Spawn) + elseif choice == 4 then + PlayFlavor(NPC, "", "Well done!", "", 1689589577, 4560189, Spawn) + elseif choice == 5 then + PlayFlavor(NPC, "", "Okay, who's next?", "", 1689589577, 4560189, Spawn) + else + end + +end + diff --git a/server/SpawnScripts/FrostfangSea/anicelily.lua b/server/SpawnScripts/FrostfangSea/anicelily.lua new file mode 100644 index 000000000..77e78833a --- /dev/null +++ b/server/SpawnScripts/FrostfangSea/anicelily.lua @@ -0,0 +1,36 @@ +--[[ + Script Name : SpawnScripts/FrostfangSea/anicelily.lua + Script Purpose : for the spawn "an ice lily" + Script Author : theFoof + Script Date : 2013.05.21 + Script Notes : +--]] + +local FieldTesting = 23 + +function spawn(NPC) + AddSpawnAccess(NPC, NPC) + SetPlayerProximityFunction(NPC, 50, "SpawnAccess", "SpawnAccess") + SpawnSet(NPC, "action_state", "1494") +end + +function respawn(NPC) + spawn(NPC) +end + +function SpawnAccess(NPC, Spawn) + if GetQuestStep(Spawn, FieldTesting) == 1 then + AddSpawnAccess(NPC, Spawn) + else + RemoveSpawnAccess(NPC, Spawn) + end +end + +function casted_on(NPC, Caster, SpellName) + if SpellName == 'collect an ice lily' then + if GetQuestStep(Caster, FieldTesting) == 1 then + AddStepProgress(Caster, FieldTesting, 1, 1) + Despawn(NPC) + end + end +end \ No newline at end of file diff --git a/server/SpawnScripts/FrostfangSea/anicemanecub_(leashed).lua b/server/SpawnScripts/FrostfangSea/anicemanecub_(leashed).lua new file mode 100644 index 000000000..4360f2292 --- /dev/null +++ b/server/SpawnScripts/FrostfangSea/anicemanecub_(leashed).lua @@ -0,0 +1,23 @@ +--[[ + Script Name : SpawnScripts/FrostfangSea/anicemanecub_(leashed).lua + Script Purpose : the spawns leashed up at gwenevyn's cove named "an icemane cub" + Script Author : theFoof + Script Date : 2013.05.25 + Script Notes : +--]] +local IcemanesCometh = 18 + +function spawn(NPC) + AddSpawnAccess(NPC, NPC) + SetPlayerProximityFunction(NPC, 50, "SpawnAccess", "SpawnAccess") +end + +function SpawnAccess(NPC, Spawn) + if HasCompletedQuest(Spawn, IcemanesCometh) then + AddSpawnAccess(NPC, Spawn) + end +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) +end \ No newline at end of file diff --git a/server/SpawnScripts/FrostfangSea/anicemanepatriarch_(1).lua b/server/SpawnScripts/FrostfangSea/anicemanepatriarch_(1).lua new file mode 100644 index 000000000..626144102 --- /dev/null +++ b/server/SpawnScripts/FrostfangSea/anicemanepatriarch_(1).lua @@ -0,0 +1,20 @@ +--[[ + Script Name : SpawnScripts/FrostfangSea/anicemanepatriarch_(1).lua + Script Purpose : for an icemane patriarch with a unique path + Script Author : theFoof + Script Date : 2013.6.6 + Script Notes : +--]] + +function spawn(NPC) + MovementLoopAddLocation(NPC, 604.57, 24.67, -350.41, 2, math.random(5,20)) + MovementLoopAddLocation(NPC, 586.88, 48.58, -408.83, 2, math.random(5,20)) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) +end \ No newline at end of file diff --git a/server/SpawnScripts/FrostfangSea/anicemanepatriarch_(1).luandom_pattern_small.lua b/server/SpawnScripts/FrostfangSea/anicemanepatriarch_(1).luandom_pattern_small.lua new file mode 100644 index 000000000..626144102 --- /dev/null +++ b/server/SpawnScripts/FrostfangSea/anicemanepatriarch_(1).luandom_pattern_small.lua @@ -0,0 +1,20 @@ +--[[ + Script Name : SpawnScripts/FrostfangSea/anicemanepatriarch_(1).lua + Script Purpose : for an icemane patriarch with a unique path + Script Author : theFoof + Script Date : 2013.6.6 + Script Notes : +--]] + +function spawn(NPC) + MovementLoopAddLocation(NPC, 604.57, 24.67, -350.41, 2, math.random(5,20)) + MovementLoopAddLocation(NPC, 586.88, 48.58, -408.83, 2, math.random(5,20)) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) +end \ No newline at end of file diff --git a/server/SpawnScripts/FrostfangSea/anicemanepatriarch_(2).lua b/server/SpawnScripts/FrostfangSea/anicemanepatriarch_(2).lua new file mode 100644 index 000000000..921cb28e1 --- /dev/null +++ b/server/SpawnScripts/FrostfangSea/anicemanepatriarch_(2).lua @@ -0,0 +1,24 @@ +--[[ + Script Name : SpawnScripts/FrostfangSea/anicemanepatriarch_(2).lua + Script Purpose : for an icemane patriarch with a unique path + Script Author : theFoof + Script Date : 2013.6.6 + Script Notes : +--]] + +function spawn(NPC) + MovementLoopAddLocation(NPC, 571.74, 56.41, -405.34, 2, math.random(5,20)) + MovementLoopAddLocation(NPC, 582.2, 53.27, -400.71, 2, 0) + MovementLoopAddLocation(NPC, 586.1, 44.33, -372.47, 2, 0) + MovementLoopAddLocation(NPC, 590.7, 43.18, -359.4, 2, math.random(5,20)) + MovementLoopAddLocation(NPC, 586.1, 44.33, -372.47, 2, 0) + MovementLoopAddLocation(NPC, 582.2, 53.27, -400.71, 2, 0) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) +end \ No newline at end of file diff --git a/server/SpawnScripts/FrostfangSea/aniceshroom.lua b/server/SpawnScripts/FrostfangSea/aniceshroom.lua new file mode 100644 index 000000000..b53fb53b6 --- /dev/null +++ b/server/SpawnScripts/FrostfangSea/aniceshroom.lua @@ -0,0 +1,27 @@ +--[[ + Script Name : SpawnScripts/FrostfangSea/aniceshroom.lua + Script Purpose : ice shrooms + Script Author : theFoof + Script Date : 2013.9.3 + Script Notes : +--]] + +local KestrelPie = 90 + +function spawn(NPC) + SpawnSet(NPC, "action_state", "1494") + SetRequiredQuest(NPC, KestrelPie, 1, 1) +end + +function respawn(NPC) + spawn(NPC) +end + +function casted_on(NPC, Spawn, SpellName) + if SpellName == 'an ice shroom' then + if GetQuestStep(Spawn, KestrelPie) == 1 then + Despawn(NPC) + AddStepProgress(Spawn, KestrelPie, 1, 1) + end + end +end \ No newline at end of file diff --git a/server/SpawnScripts/FrostfangSea/anicywhirlstorm.lua b/server/SpawnScripts/FrostfangSea/anicywhirlstorm.lua new file mode 100644 index 000000000..4c99a8168 --- /dev/null +++ b/server/SpawnScripts/FrostfangSea/anicywhirlstorm.lua @@ -0,0 +1,14 @@ +--[[ + Script Name : SpawnScripts/FrostfangSea/anicywhirlstorm.lua + Script Purpose : for the spawn "an ice whirlstorm" + Script Author : theFoof + Script Date : 2013.6.16 + Script Notes : +--]] + +require"SpawnScripts/Generic/MovementCircleSmall" + +function spawn(NPC) + SpawnChooseRandomMovement(NPC) + AddTimer(NPC, 20000, "Despawn") +end \ No newline at end of file diff --git a/server/SpawnScripts/FrostfangSea/aplankofwood.lua b/server/SpawnScripts/FrostfangSea/aplankofwood.lua new file mode 100644 index 000000000..eeb866a39 --- /dev/null +++ b/server/SpawnScripts/FrostfangSea/aplankofwood.lua @@ -0,0 +1,33 @@ +--[[ + Script Name : SpawnScriptsFrostfangSeaaplankofwood.lua + Script Purpose : for the spawn "a plank of wood" + Script Author : theFoof + Script Date : 2013.5.6 + Script Notes : +--]] + +local BoatloadWork = 4 + +function spawn(NPC) + AddSpawnAccess(NPC, NPC) + SetPlayerProximityFunction(NPC, 40, "CheckQuest", "CheckQuest") +end + +function casted_on(Target, Caster, SpellName) + if HasQuest(Caster, BoatloadWork) and GetQuestStep(Caster, BoatloadWork) == 1 and SpellName == "gather " then + AddStepProgress(Caster, BoatloadWork, 1, 1) + Despawn(Target) + end +end + +function respawn(NPC) + spawn(NPC) +end + +function CheckQuest(NPC, Player) + if GetQuestStep(Player, BoatloadWork) == 1 then + AddSpawnAccess(NPC, Player) + else + RemoveSpawnAccess(NPC, Player) + end +end \ No newline at end of file diff --git a/server/SpawnScripts/FrostfangSea/aportaljumpedRyGorrraider.lua b/server/SpawnScripts/FrostfangSea/aportaljumpedRyGorrraider.lua new file mode 100644 index 000000000..88844ad3d --- /dev/null +++ b/server/SpawnScripts/FrostfangSea/aportaljumpedRyGorrraider.lua @@ -0,0 +1,25 @@ +--[[ + Script Name : SpawnScripts/FrostfangSea/aportaljumpedRyGorrraider.lua + Script Purpose : for the raiders that pop out of the portal in frostfang + Script Author : theFoof + Script Date : 2013.6.8 + Script Notes : +--]] + +function spawn(NPC) + local choice = math.random(1,2) + SetSpeed(NPC, 7) + if choice == 1 then + MoveToLocation(NPC, 713.49 + math.random(-7,7), 100.34, -446.09 + math.random(-7,7)) + else + MoveToLocation(NPC, 692.41 + math.random(-7,7), 96.14, -466.44 + math.random(-7,7)) + end +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) +end \ No newline at end of file diff --git a/server/SpawnScripts/FrostfangSea/araidingsporetender.lua b/server/SpawnScripts/FrostfangSea/araidingsporetender.lua new file mode 100644 index 000000000..3f5b59a09 --- /dev/null +++ b/server/SpawnScripts/FrostfangSea/araidingsporetender.lua @@ -0,0 +1,27 @@ +--[[ + Script Name : Quests/FrostfangSea/araidingsporetender.lua + Script Purpose : the spawn "a raiding sporetender" + Script Author : theFoof + Script Date : 2013.5.14 +--]] + +local RepellingCritters = 7 + +function spawn(NPC) + AddSpawnAccess(NPC, NPC) + SetPlayerProximityFunction(NPC, 50, "SpawnAccess", "SpawnAccess") +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) +end + +function SpawnAccess(NPC, Player) + if HasCompletedQuest(Player, RepellingCritters) == false then + AddSpawnAccess(NPC, Player) + end +end \ No newline at end of file diff --git a/server/SpawnScripts/FrostfangSea/areanimatedRyGorr.lua b/server/SpawnScripts/FrostfangSea/areanimatedRyGorr.lua new file mode 100644 index 000000000..b059d80ff --- /dev/null +++ b/server/SpawnScripts/FrostfangSea/areanimatedRyGorr.lua @@ -0,0 +1,26 @@ +--[[ + Script Name : SpawnScripts/areanimatedRyGorr.lua + Script Purpose : for the spawn a reanimated Ry'Gorr + Script Author : theFoof + Script Date : 2013.6.6 + Script Notes : +--]] + +function spawn(NPC) + MovementLoopAddLocation(NPC, 790.78, 31.46, 93.56, 2, math.random(5,15)) + MovementLoopAddLocation(NPC, 773.25, 36.43, 78.13, 2, 0) + MovementLoopAddLocation(NPC, 743.98, 41.91, 75.01, 2, 0) + MovementLoopAddLocation(NPC, 702.1, 48.18, 121.05, 2, 0) + MovementLoopAddLocation(NPC, 731.22, 41.6, 160.22, 2, math.random(5,15)) + MovementLoopAddLocation(NPC, 702.1, 48.18, 121.05, 2, 0) + MovementLoopAddLocation(NPC, 743.98, 41.91, 75.01, 2, 0) + MovementLoopAddLocation(NPC, 773.25, 36.43, 78.13, 2, 0) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) +end \ No newline at end of file diff --git a/server/SpawnScripts/FrostfangSea/arebelliousrockroller.lua b/server/SpawnScripts/FrostfangSea/arebelliousrockroller.lua new file mode 100644 index 000000000..0b3ab6002 --- /dev/null +++ b/server/SpawnScripts/FrostfangSea/arebelliousrockroller.lua @@ -0,0 +1,34 @@ +--[[ + Script Name : SpawnScripts/FrostfangSea/arebelliousrockroller.lua + Script Purpose : a rebellious rock roller + Script Author : theFoof + Script Date : 2013.11.15 + Script Notes : +--]] + +function spawn(NPC) + SetPlayerProximityFunction(NPC, 10, "Chat") +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) +end + +function Chat(NPC, Spawn) + local choice = math.random(1,5) + if choice == 1 then + PlayFlavor(NPC, "", "Hey, careful! I don't want my rock rolling to get you hurt, hah!", "threaten", 1689589577, 4560189, Spawn) + elseif choice == 2 then + PlayFlavor(NPC, "", "Look out below! Rolling stones are incoming!", "point", 1689589577, 4560189, Spawn) + elseif choice == 3 then + PlayFlavor(NPC, "", "I don't think the others can appreciate how much skill this takes. Someday...someday maybe we'll be able to rock roll in front of thousands of other dwarves! Can you imagine that?", "orate", 1689589577, 4560189, Spawn) + elseif choice == 4 then + PlayFlavor(NPC, "", "Just give up, you'll never be able to rock roll as fast as me. I am shredding this track!", "threaten", 1689589577, 4560189, Spawn) + else + PlayFlavor(NPC, "", "This is such a righteous track you found! Oh, hold your rock for a moment there's someone down there. Interrupting our rock rolling.", "orate", 1689589577, 4560189, Spawn) + end +end \ No newline at end of file diff --git a/server/SpawnScripts/FrostfangSea/arguing.lua b/server/SpawnScripts/FrostfangSea/arguing.lua new file mode 100644 index 000000000..68242e663 --- /dev/null +++ b/server/SpawnScripts/FrostfangSea/arguing.lua @@ -0,0 +1,36 @@ +--[[ + Script Name : SpawnScripts/FrostfangSea/arguing.lua + Script Purpose : for npcs arguing in halas + Script Author : theFoof + Script Date : 2013.9.26 + Script Notes : +--]] + +function spawn(NPC) + EmoteLoop(NPC) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + PlayFlavor(NPC, "", "", "hello", 0, 0 , Spawn) + FaceTarget(NPC, Spawn) +end + +function EmoteLoop(NPC) + local choice = math.random(1,5) + if choice == 1 then + PlayFlavor(NPC, "", "", "no", 0, 0) + elseif choice == 2 then + PlayFlavor(NPC, "", "", "heckno", 0, 0) + elseif choice == 3 then + PlayFlavor(NPC, "", "", "agree", 0, 0) + elseif choice == 4 then + PlayFlavor(NPC, "", "", "frustrated", 0, 0) + elseif choice == 5 then + PlayFlavor(NPC, "", "", "whome", 0, 0) + end + AddTimer(NPC, math.random(3000,15000), "EmoteLoop") +end \ No newline at end of file diff --git a/server/SpawnScripts/FrostfangSea/arisenRyGorr.lua b/server/SpawnScripts/FrostfangSea/arisenRyGorr.lua new file mode 100644 index 000000000..775bf72d8 --- /dev/null +++ b/server/SpawnScripts/FrostfangSea/arisenRyGorr.lua @@ -0,0 +1,21 @@ +--[[ + Script Name : SpawnScripts/FrostfangSea/arisenRyGorr.lua + Script Purpose : for the risen ry'gorrs that charge to the coldain spirits + Script Author : theFoof + Script Date : 2013.6.6 + Script Notes : +--]] + +function spawn(NPC) + MovementLoopAddLocation(NPC, 510.72, 24.45, -189.84, 7, 0) + MovementLoopAddLocation(NPC, 508.34, 27.58, -185.98, 7, 0) + MovementLoopAddLocation(NPC, 512.46, 27.67, -194.57, 7, 0) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) +end \ No newline at end of file diff --git a/server/SpawnScripts/FrostfangSea/arisenRyGorr_(1).lua b/server/SpawnScripts/FrostfangSea/arisenRyGorr_(1).lua new file mode 100644 index 000000000..cb2bb4cdf --- /dev/null +++ b/server/SpawnScripts/FrostfangSea/arisenRyGorr_(1).lua @@ -0,0 +1,22 @@ +--[[ + Script Name : SpawnScripts/FrostfangSea/arisenRyGorr_(1).lua + Script Purpose : for the risen ry'gorrs that charge to the coldain spirits + Script Author : theFoof + Script Date : 2013.6.6 + Script Notes : +--]] + +function spawn(NPC) + MovementLoopAddLocation(NPC, 528.32, 28.07, -210.69 + math.random(-6,6), 7, 0) + MovementLoopAddLocation(NPC, 525.01, 28.19, -209.87, 7, 0) + MovementLoopAddLocation(NPC, 528.32, 28.07, -210.69 + math.random(-6,6), 7, 0) + MovementLoopAddLocation(NPC, 529.93, 27.87, -215.16, 7, 0) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) +end \ No newline at end of file diff --git a/server/SpawnScripts/FrostfangSea/arisenRyGorr_(2).lua b/server/SpawnScripts/FrostfangSea/arisenRyGorr_(2).lua new file mode 100644 index 000000000..718ba2485 --- /dev/null +++ b/server/SpawnScripts/FrostfangSea/arisenRyGorr_(2).lua @@ -0,0 +1,20 @@ +--[[ + Script Name : SpawnScripts/FrostfangSea/arisenRyGorr_(2).lua + Script Purpose : for the risen ry'gorrs that charge to the coldain spirits + Script Author : theFoof + Script Date : 2013.6.6 + Script Notes : +--]] + +function spawn(NPC) + MovementLoopAddLocation(NPC, 536.09, 27.54, -232.17, 7, 0) + MovementLoopAddLocation(NPC, 535.09, 27.55, -236.44, 7, 0) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) +end \ No newline at end of file diff --git a/server/SpawnScripts/FrostfangSea/arisenRyGorr_(3).lua b/server/SpawnScripts/FrostfangSea/arisenRyGorr_(3).lua new file mode 100644 index 000000000..ac8ad7c68 --- /dev/null +++ b/server/SpawnScripts/FrostfangSea/arisenRyGorr_(3).lua @@ -0,0 +1,22 @@ +--[[ + Script Name : SpawnScripts/FrostfangSea/arisenRyGorr_(3).lua + Script Purpose : for the risen ry'gorrs that charge to the coldain spirits + Script Author : theFoof + Script Date : 2013.6.6 + Script Notes : +--]] + +function spawn(NPC) + MovementLoopAddLocation(NPC, 546.76, 27.94, -246.18 + math.random(-6,6), 7, 0) + MovementLoopAddLocation(NPC, 542.41, 27.77, -242.28, 7, 0) + MovementLoopAddLocation(NPC, 546.76, 27.94, -246.18 + math.random(-6,6), 7, 0) + MovementLoopAddLocation(NPC, 546.5, 28.19, -249.81, 7, 0) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) +end \ No newline at end of file diff --git a/server/SpawnScripts/FrostfangSea/arumblinggeode.lua b/server/SpawnScripts/FrostfangSea/arumblinggeode.lua new file mode 100644 index 000000000..506955d4e --- /dev/null +++ b/server/SpawnScripts/FrostfangSea/arumblinggeode.lua @@ -0,0 +1,22 @@ +--[[ + Script Name : SpawnScripts/FrostfangSea/arumblinggeode.lua + Script Purpose : for the spawn "a rumbling geode" + Script Author : theFoof + Script Date : 2013.6.15 + Script Notes : +--]] + +local GeodeCaching = 69 + +function spawn(NPC) +end + +function respawn(NPC) + spawn(NPC) +end + +function death(NPC, Spawn) + if GetQuestStep(Spawn, GeodeCaching) == 1 then + SpawnMob(GetZone(Spawn), 4701682, 0, GetX(NPC), GetY(NPC), GetZ(NPC), GetHeading(NPC)) + end +end \ No newline at end of file diff --git a/server/SpawnScripts/FrostfangSea/arustypiton.lua b/server/SpawnScripts/FrostfangSea/arustypiton.lua new file mode 100644 index 000000000..8143d66a2 --- /dev/null +++ b/server/SpawnScripts/FrostfangSea/arustypiton.lua @@ -0,0 +1,26 @@ +--[[ + Script Name : SpawnScripts/FrostfangSea/arustypiton.lua + Script Purpose : for the spawn "a rusty piton" + Script Author : theFoof + Script Date : 2013.6.4 + Script Notes : +--]] + +local LooseningGrip = 51 + +function spawn(NPC) + SetRequiredQuest(NPC, LooseningGrip, 1) +end + +function respawn(NPC) + spawn(NPC) +end + +function casted_on(NPC, Spawn, SpellName) + if SpellName == 'cut the line' then + if GetQuestStep(Spawn, LooseningGrip) == 1 then + AddStepProgress(Spawn, LooseningGrip, 1, 1) + Despawn(NPC) + end + end +end \ No newline at end of file diff --git a/server/SpawnScripts/FrostfangSea/ascragglyshrub.lua b/server/SpawnScripts/FrostfangSea/ascragglyshrub.lua new file mode 100644 index 000000000..acc2718d2 --- /dev/null +++ b/server/SpawnScripts/FrostfangSea/ascragglyshrub.lua @@ -0,0 +1,26 @@ +--[[ + Script Name : SpawnScripts/FrostfangSea/ascragglyshrub.lua + Script Purpose : scraggly shrub + Script Author : theFoof + Script Date : 2013.05.15 + Script Notes : +--]] + +local ScragglyFoodstuffs = 9 + +function spawn(NPC) + SetRequiredQuest(NPC, ScragglyFoodstuffs, 1) +end + +function respawn(NPC) + spawn(NPC) +end + +function casted_on(Target, Caster, SpellName) + if SpellName == "harvest " then + if GetQuestStep(Caster, ScragglyFoodstuffs) == 1 then + AddStepProgress(Caster, ScragglyFoodstuffs, 1, 1) + Despawn(Target) + end + end +end \ No newline at end of file diff --git a/server/SpawnScripts/FrostfangSea/aslaincoldain.lua b/server/SpawnScripts/FrostfangSea/aslaincoldain.lua new file mode 100644 index 000000000..bde9cba11 --- /dev/null +++ b/server/SpawnScripts/FrostfangSea/aslaincoldain.lua @@ -0,0 +1,26 @@ +--[[ + Script Name : SpawnScripts/FrostfangSea/aslaincoldain.lua + Script Purpose : for the spawn "a slain coldain" + Script Author : theFoof + Script Date : 2013.06.3 + Script Notes : +--]] + +local WeaponChoice = 47 + +function spawn(NPC) +end + +function respawn(NPC) + spawn(NPC) +end + +function casted_on(NPC, Spawn, SpellName) + if SpellName == "the body" then + if GetQuestStep(Spawn, WeaponChoice) == 1 then + AddStepProgress(Spawn, WeaponChoice, 1, 1) + Despawn(NPC) + SendMessage(Spawn, "You found a functional coldain weapon.") + end + end +end \ No newline at end of file diff --git a/server/SpawnScripts/FrostfangSea/asnowpack.lua b/server/SpawnScripts/FrostfangSea/asnowpack.lua new file mode 100644 index 000000000..0238266ef --- /dev/null +++ b/server/SpawnScripts/FrostfangSea/asnowpack.lua @@ -0,0 +1,39 @@ +--[[ + Script Name : SpawnScripts/FrostfangSea/asnowpack.lua + Script Purpose : for the spawns "a snowpack" and "an iceflow" + Script Author : theFoof + Script Date : 2013.05.20 + Script Notes : +--]] + +require"SpawnScripts/Generic/MovementCircleSmall" + +local EssentialIngredient = 22 + +function spawn(NPC) + SpawnChooseRandomMovement(NPC) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) +end + +function casted_on(NPC, Caster, SpellName) + if SpellName == "Bogchild's Iced Trap" then + if GetName(NPC) == "a snowpack" then + if QuestStepIsComplete(Caster, EssentialIngredient, 2) == false then + AddStepProgress(Caster, EssentialIngredient, 2, 1) + Despawn(NPC) + end + elseif GetName(NPC) == 'an iceflow' then + if QuestStepIsComplete(Caster, EssentialIngredient, 1) == false then + AddStepProgress(Caster, EssentialIngredient, 1, 1) + Despawn(NPC) + end + end + end +end \ No newline at end of file diff --git a/server/SpawnScripts/FrostfangSea/aspiritward.lua b/server/SpawnScripts/FrostfangSea/aspiritward.lua new file mode 100644 index 000000000..c565d487d --- /dev/null +++ b/server/SpawnScripts/FrostfangSea/aspiritward.lua @@ -0,0 +1,15 @@ +--[[ + Script Name : SpawnScripts/FrostfangSea/aspiritward.lua + Script Purpose : for despawning a spirit ward + Script Author : theFoof + Script Date : 2013.5.28 + Script Notes : +--]] + +function spawn(NPC) + AddTimer(NPC, 10000, "depop") +end + +function depop(NPC) + Despawn(NPC) +end \ No newline at end of file diff --git a/server/SpawnScripts/FrostfangSea/asprintingRyGorrgatecaller.lua b/server/SpawnScripts/FrostfangSea/asprintingRyGorrgatecaller.lua new file mode 100644 index 000000000..d9c0bb85c --- /dev/null +++ b/server/SpawnScripts/FrostfangSea/asprintingRyGorrgatecaller.lua @@ -0,0 +1,37 @@ +--[[ + Script Name : SpawnScripts/asprintingRyGorrgatecaller.lua + Script Purpose : for the sprinting gatecallers near the Great Shelf + Script Author : theFoof + Script Date : 2013.6.2 + Script Notes : +--]] + +function spawn(NPC) + local X = GetX(NPC) + local Y = GetY(NPC) + local Z = GetZ(NPC) + MovementLoopAddLocation(NPC, X, Y, Z, 5, math.random(0,3)) + MovementLoopAddLocation(NPC, 665.67 + math.random(-7,7), 21.28, -250.8 + math.random(-7,7), 5, 0) + MovementLoopAddLocation(NPC, 648.25 + math.random(-7,7), 25.98, -272.83 + math.random(-7,7), 5, 0) + MovementLoopAddLocation(NPC, 638.87 + math.random(-7,7), 33.15, -301.59 + math.random(-7,7), 5, 0, "death_timer") + MovementLoopAddLocation(NPC, 644.30 + math.random(-7,7), 52.16, -344.42 + math.random(-7,7), 5, 0) + MovementLoopAddLocation(NPC, 661.05 + math.random(-7,7), 74.74, -399.58 + math.random(-7,7), 5, 0) + MovementLoopAddLocation(NPC, 668.04 + math.random(-7,7), 85.46, -435.57 + math.random(-7,7), 5, 0) + +end + +function hailed(NPC, Spawn) + FacetTarget(NPC, Spawn) +end + +function respawn(NPC) + spawn(NPC) +end + +function death_timer(NPC) + AddTimer(NPC, math.random(2000, 23000), "die") -- sets the delay before death after NPC hits the ramp +end + +function die(NPC) -- this makes the closest "a vigilant gauntlet defender" kill the NPC + KillSpawn(NPC, GetSpawn(NPC, 4700076), 1) +end \ No newline at end of file diff --git a/server/SpawnScripts/FrostfangSea/astrangeicecrystal.lua b/server/SpawnScripts/FrostfangSea/astrangeicecrystal.lua new file mode 100644 index 000000000..3b38dbda0 --- /dev/null +++ b/server/SpawnScripts/FrostfangSea/astrangeicecrystal.lua @@ -0,0 +1,36 @@ +--[[ + Script Name : SpawnScripts/FrostfangSea/astrangeicecrystal.lua + Script Purpose : for the spawn "a strange ice crystal" + Script Author : theFoof + Script Date : 2013.5.30 + Script Notes : +--]] + +local BarteringCrystals = 28 + +function spawn(NPC) + AddSpawnAccess(NPC, NPC) + SetPlayerProximityFunction(NPC, 50, "SpawnAccess", "SpawnAccess") +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) +end + +function casted_on(NPC, Spawn, SpellName) + if SpellName == 'pick up a strange ice crystal' then + if GetQuestStep(Spawn, BarteringCrystals) == 1 then + AddStepProgress(Spawn, BarteringCrystals, 1, 1) + Despawn(NPC) + end + end +end + +function SpawnAccess(NPC, Spawn) + if GetQuestStep(Spawn, BarteringCrystals) == 1 then + AddSpawnAccess(NPC, Spawn) + end +end \ No newline at end of file diff --git a/server/SpawnScripts/FrostfangSea/asummonedcoldainspirit.lua b/server/SpawnScripts/FrostfangSea/asummonedcoldainspirit.lua new file mode 100644 index 000000000..6f618ccaf --- /dev/null +++ b/server/SpawnScripts/FrostfangSea/asummonedcoldainspirit.lua @@ -0,0 +1,37 @@ +--[[ + Script Name : SpawnScripts/FrostfangSea/asummonedcoldainspirit.lua + Script Purpose : for the spawn "a summoned coldain spirit" + Script Author : theFoof + Script Date : 2013.6.6 + Script Notes : +--]] + +function spawn(NPC) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) +end + +function killed(NPC, Spawn) + PlayAnimation(NPC, 10893) + PlayAnimation(Spawn, 18414) + local choice = math.random(1,6) + if choice == 1 then + PlayFlavor(NPC, "voiceover/english/dwarf_base_1/ft/dwarf/dwarf_base_1_1_aggro_gm_23b35126.mp3", "Where do ya think you're going?", "", 706272128, 909565004, Spawn) + elseif choice == 2 then + PlayFlavor(NPC, "voiceover/english/dwarf_base_1/ft/dwarf/dwarf_base_1_1_aggro_gm_9de55a3e.mp3", "There they are! Let's get em!", "", 3246206943, 366784514, Spawn) + elseif choice == 3 then + PlayFlavor(NPC, "voiceover/english/dwarf_base_1/ft/dwarf/dwarf_base_1_1_aggro_gm_ab9057d3.mp3", "Looking for me? ", "", 438949611, 3910736957, Spawn) + elseif choice == 4 then + PlayFlavor(NPC, "voiceover/english/dwarf_base_1/ft/dwarf/dwarf_base_1_1_victory_gm_4a1ceaef.mp3", "Ha! I'm not done yet. Get back up!", "", 458619926, 239663782, Spawn) + elseif choice == 5 then + PlayFlavor(NPC, "voiceover/english/dwarf_base_1/ft/dwarf/dwarf_base_1_1_victory_gm_d6c773c7.mp3", "I didn't think I hit em that hard.", "", 3680771732, 663911723, Spawn) + else + PlayFlavor(NPC, "voiceover/english/dwarf_base_1/ft/dwarf/dwarf_base_1_1_victory_gm_d6c773c7.mp3", "I didn't think I hit em that hard.", "", 3680771732, 663911723, Spawn) + end +end \ No newline at end of file diff --git a/server/SpawnScripts/FrostfangSea/avelinoidseeker.lua b/server/SpawnScripts/FrostfangSea/avelinoidseeker.lua new file mode 100644 index 000000000..2d8123003 --- /dev/null +++ b/server/SpawnScripts/FrostfangSea/avelinoidseeker.lua @@ -0,0 +1,23 @@ +--[[ + Script Name : SpawnScripts/FrostfangSea/avelinoidseeker.lua + Script Purpose : for the spawn "a velinoid seeker" + Script Author : theFoof + Script Date : 2013.6.13 + Script Notes : +--]] + +local GoodDistraction = 61 + +function spawn(NPC) +end + +function death(NPC, Spawn) + if not IsAlive(GetTempVariable(NPC, "linked")) then + if GetQuestStep(Spawn, GoodDistraction) == 2 then + SetStepComplete(Spawn, GoodDistraction, 2) + elseif GetQuestStep(Spawn, GoodDistraction) == 4 then + SetStepComplete(Spawn, GoodDistraction, 4) + end + end + SetTempVariable(NPC, "linked", nil) +end \ No newline at end of file diff --git a/server/SpawnScripts/FrostfangSea/avigilantgauntletdefender_(archer).lua b/server/SpawnScripts/FrostfangSea/avigilantgauntletdefender_(archer).lua new file mode 100644 index 000000000..1204a70ba --- /dev/null +++ b/server/SpawnScripts/FrostfangSea/avigilantgauntletdefender_(archer).lua @@ -0,0 +1,33 @@ +--[[ + Script Name : FrostfangSea/SpawnScripts/avigilantgauntletdefender_(archer).lua + Script Purpose : for the archer gauntlet defenders + Script Author : theFoof + Script Date : 2013.6.2 + Script Notes : +--]] + +function spawn(NPC) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) +end + +function killed(NPC) + local choice = math.random(1,5) + if choice == 1 then + PlayFlavor(NPC, "voiceover/english/dwarf_base_1/ft/dwarf/dwarf_base_1_1_aggro_gf_be4f625e.mp3", "Where do ya think you're going?", "", 152508601, 1517122703) + elseif choice == 2 then + PlayFlavor(NPC, "voiceover/english/dwarf_base_1/ft/dwarf/dwarf_base_1_1_aggro_gf_ab9057d3.mp3", "Looking for me? ", "", 407706048, 337475746) + elseif choice == 3 then + PlayFlavor(NPC, "voiceover/english/dwarf_base_1/ft/dwarf/dwarf_base_1_1_victory_gf_4a1ceaef.mp3", "Ha! I'm not done yet. Get back up!", "", 1335528281, 2889456217) + elseif choice == 4 then + PlayFlavor(NPC, "voiceover/english/dwarf_base_1/ft/dwarf/dwarf_base_1_1_victory_gf_d6c773c7.mp3", "I didn't think I hit em that hard.", "", 4016088326, 632010394) + elseif choice == 5 then + PlayFlavor(NPC, "voiceover/english/dwarf_base_1/ft/dwarf/dwarf_base_1_1_victory_gf_ecd7fa6e.mp3", "An ale for the fallen!", "", 3223559996, 2677275600) + end +end \ No newline at end of file diff --git a/server/SpawnScripts/FrostfangSea/aweaksparringpartner.lua b/server/SpawnScripts/FrostfangSea/aweaksparringpartner.lua new file mode 100644 index 000000000..a572d49c5 --- /dev/null +++ b/server/SpawnScripts/FrostfangSea/aweaksparringpartner.lua @@ -0,0 +1,44 @@ +--[[ + Script Name : SpawnScripts/FrostfangSea/aweaksparringpartner.lua + Script Purpose : a weak sparring partner + Script Author : John Adams + Script Date : 2013.03.19 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +function spawn(NPC) + SetPlayerProximityFunction(NPC, 10, "InRange", "LeaveRange") +end + +function respawn(NPC) + spawn(NPC) +end + +function InRange(NPC, Spawn) +end + +function LeaveRange(NPC, Spawn) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + + local choice = math.random(1,6) + + if choice == 1 then + PlayFlavor(NPC, "", "You can attack me whenever you're ready. You can do that by double-clicking me, by right clicking me and selecting "attack," by using an offensive ability while you have me targeted, or by turning on auto attack by pressing the ~ key while you have me targeted.", "", 1689589577, 4560189, Spawn) + elseif choice == 2 then + PlayFlavor(NPC, "", "Nice.", "", 1689589577, 4560189, Spawn) + elseif choice == 3 then + PlayFlavor(NPC, "", "Who's next?", "", 1689589577, 4560189, Spawn) + elseif choice == 4 then + PlayFlavor(NPC, "", "Well done!", "", 1689589577, 4560189, Spawn) + elseif choice == 5 then + PlayFlavor(NPC, "", "Next!", "", 1689589577, 4560189, Spawn) + elseif choice == 6 then + PlayFlavor(NPC, "", "Okay, who's next?", "", 1689589577, 4560189, Spawn) + else + end + +end + diff --git a/server/SpawnScripts/FrostfangSea/bar_fight.lua b/server/SpawnScripts/FrostfangSea/bar_fight.lua new file mode 100644 index 000000000..d8b785caf --- /dev/null +++ b/server/SpawnScripts/FrostfangSea/bar_fight.lua @@ -0,0 +1,40 @@ +--[[ + Script Name : SpawnScripts/FrostfangSea/bar_fight.lua + Script Purpose : makes an npc emote for a bar fight + Script Author : theFoof + Script Date : 2013.9.26 + Script Notes : +--]] + +require"SpawnScripts/Generic/hello_emote" + +function spawn(NPC) + EmoteLoop(NPC) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + hello(NPC, Spawn) +end + +function EmoteLoop(NPC) + AddTimer(NPC, math.random(3000,15000), "EmoteLoop") + local choice = math.random(1,6) + if choice == 1 then + PlayFlavor(NPC, "", "", "shrug", 0, 0) + elseif choice == 2 then + PlayFlavor(NPC, "", "", "peer", 0, 0) + elseif choice == 3 then + PlayFlavor(NPC, "", "", "stretch", 0, 0) + elseif choice == 4 then + PlayFlavor(NPC, "", "", "yawn", 0, 0) + elseif choice == 5 then + PlayFlavor(NPC, "", "", "tap foot", 0, 0) + elseif choice == 6 then + PlayFlavor(NPC, "", "", "sigh", 0, 0) + end +end \ No newline at end of file diff --git a/server/SpawnScripts/FrostfangSea/beans.lua b/server/SpawnScripts/FrostfangSea/beans.lua new file mode 100644 index 000000000..72a249cec --- /dev/null +++ b/server/SpawnScripts/FrostfangSea/beans.lua @@ -0,0 +1,33 @@ +--[[ + Script Name : SpawnScripts/FrostfangSea/beans.lua + Script Purpose : beans + Script Author : theFoof + Script Date : 2013.9.3 + Script Notes : +--]] + +local HamBeans = 89 + +function spawn(NPC) + AddSpawnAccess(NPC, NPC) + SetPlayerProximityFunction(NPC, 50, "SpawnAccess", "SpawnAccess") +end + +function respawn(NPC) + spawn(NPC) +end + +function casted_on(NPC, Spawn, SpellName) + if SpellName == 'a handful of halasian beans' then + if GetQuestStep(Spawn, HamBeans) == 1 then + Despawn(NPC) + SetStepComplete(Spawn, HamBeans, 1) + end + end +end + +function SpawnAccess(NPC, Spawn) + if GetQuestStep(Spawn, HamBeans) == 1 then + AddSpawnAccess(NPC, Spawn) + end +end \ No newline at end of file diff --git a/server/SpawnScripts/FrostfangSea/callingthembackcube.lua b/server/SpawnScripts/FrostfangSea/callingthembackcube.lua new file mode 100644 index 000000000..3b2023c60 --- /dev/null +++ b/server/SpawnScripts/FrostfangSea/callingthembackcube.lua @@ -0,0 +1,41 @@ +--[[ + Script Name : SpawnScripts/FrostfangSea/callingthembackcube.lua + Script Purpose : spawn access for the runes in the quest "Calling Them Back" + Script Author : theFoof + Script Date : 2013.5.28 + Script Notes : +--]] + +local CallingBack = 35 + +function spawn(NPC) + AddSpawnAccess(NPC, NPC) + SetPlayerProximityFunction(NPC, 50, "SpawnAccess", "SpawnAccess") +end + +function SpawnAccess(NPC, Spawn) + if HasQuest(Spawn, CallingBack) then + local LocID = GetSpawnLocationID(NPC) + if LocID == 572693 then + if not QuestStepIsComplete(Spawn, CallingBack, 1) then + AddSpawnAccess(NPC, Spawn) + end + elseif LocID == 572694 then + if not QuestStepIsComplete(Spawn, CallingBack, 2) then + AddSpawnAccess(NPC, Spawn) + end + elseif LocID == 572695 then + if not QuestStepIsComplete(Spawn, CallingBack, 3) then + AddSpawnAccess(NPC, Spawn) + end + elseif LocID == 572692 then + if not QuestStepIsComplete(Spawn, CallingBack, 4) then + AddSpawnAccess(NPC, Spawn) + end + elseif LocID == 572696 then + if not QuestStepIsComplete(Spawn, CallingBack, 5) then + AddSpawnAccess(NPC, Spawn) + end + end + end +end \ No newline at end of file diff --git a/server/SpawnScripts/FrostfangSea/caverubbish.lua b/server/SpawnScripts/FrostfangSea/caverubbish.lua new file mode 100644 index 000000000..229b9c87a --- /dev/null +++ b/server/SpawnScripts/FrostfangSea/caverubbish.lua @@ -0,0 +1,22 @@ +--[[ + Script Name : SpawnScripts/FrostfangSea/caverubbish.lua + Script Purpose : for the spawn "cave rubbish" + Script Author : theFoof + Script Date : 2013.05.19 + Script Notes : +--]] +local SiftingGarbage = 14 + +function spawn(NPC) + SetRequiredQuest(NPC, SiftingGarbage, 1) +end + +function respawn(NPC) +end + +function casted_on(NPC, Caster, SpellName) + if SpellName == "search through the pile" and GetQuestStep(Caster, SiftingGarbage) == 1 then + AddStepProgress(Caster, SiftingGarbage, 1, 1) + Despawn(NPC) + end +end \ No newline at end of file diff --git a/server/SpawnScripts/FrostfangSea/ceriseveliumcrystalgeode.lua b/server/SpawnScripts/FrostfangSea/ceriseveliumcrystalgeode.lua new file mode 100644 index 000000000..8b29fb9c7 --- /dev/null +++ b/server/SpawnScripts/FrostfangSea/ceriseveliumcrystalgeode.lua @@ -0,0 +1,25 @@ +--[[ + Script Name : SpawnScripts/FrostfangSea/ceriseveliumcrystalgeode.lua + Script Purpose : for the crystal geodes in the quest "Geode Caching" + Script Author : theFoof + Script Date : 2013.6.15 + Script Notes : +--]] + +local GeodeCaching = 69 + +function spawn(NPC) + SetRequiredQuest(NPC, GeodeCaching, 1) + AddTimer(NPC, 300000, "Despawn") +end + +function respawn(NPC) + spawn(NPC) +end + +function casted_on(NPC, Spawn, SpellName) + if SpellName == 'gather ' then + Despawn(NPC) + AddStepProgress(Spawn, GeodeCaching, 1, 1) + end +end \ No newline at end of file diff --git a/server/SpawnScripts/FrostfangSea/coldain_ice_short_spear.lua b/server/SpawnScripts/FrostfangSea/coldain_ice_short_spear.lua new file mode 100644 index 000000000..b33060382 --- /dev/null +++ b/server/SpawnScripts/FrostfangSea/coldain_ice_short_spear.lua @@ -0,0 +1,14 @@ +--[[ + Script Name : SpawnScripts/FrostfangSea/coldain_ice_short_spear.lua + Script Author : Foof + Script Date : 2013.09.24 12:09:24 + Script Purpose : + : +--]] + +function spawn(NPC) + SpawnSet(NPC, "action_state", "1494") +end + +function respawn(NPC) +end \ No newline at end of file diff --git a/server/SpawnScripts/FrostfangSea/discarded_sack.lua b/server/SpawnScripts/FrostfangSea/discarded_sack.lua new file mode 100644 index 000000000..d03005001 --- /dev/null +++ b/server/SpawnScripts/FrostfangSea/discarded_sack.lua @@ -0,0 +1,48 @@ +--[[ + Script Name : SpawnScripts/FrostfangSea/discarded_sack.lua + Script Purpose : the spawn "discarded sack" + Script Author : theFoof + Script Date : 2013.8.11 + Script Notes : +--]] + +local SometimesKnut = 84 + +function spawn(NPC) + AddSpawnAccess(NPC, NPC) + SetPlayerProximityFunction(NPC, 100, "SpawnAccess", "SpawnAccess") +end + +function respawn(NPC) + spawn(NPC) +end + +function casted_on(NPC, Spawn, SpellName) + if SpellName == 'search the discarded sack' then + if GetQuestStep(Spawn, SometimesKnut) == 1 then + conversation = CreateConversation() + AddConversationOption(conversation, "But it's not in the sack any more.", "GrizChat_2") + StartDialogConversation(conversation, 3, NPC, Spawn, "I smell our prey here. It spent much time bedded down at this location.") + end + end +end + +function GrizChat_2(NPC, Spawn) + conversation = CreateConversation() + AddConversationOption(conversation, "Where to next, Griz?", "GrizChat3") + StartDialogConversation(conversation, 3, NPC, Spawn, "It has moved on. But we are on its trail.") +end + +function GrizChat3(NPC, Spawn) + SetStepComplete(Spawn, SometimesKnut, 1) + RemoveSpawnAccess(NPC, Spawn) + conversation = CreateConversation() + AddConversationOption(conversation, "How insightful.") + StartDialogConversation(conversation, 3, NPC, Spawn, "Deeper.") +end + +function SpawnAccess(NPC, Spawn) + if GetQuestStep(Spawn, SometimesKnut) == 1 then + AddSpawnAccess(NPC, Spawn) + end +end \ No newline at end of file diff --git a/server/SpawnScripts/FrostfangSea/dock_fight1.lua b/server/SpawnScripts/FrostfangSea/dock_fight1.lua new file mode 100644 index 000000000..753a0b5d5 --- /dev/null +++ b/server/SpawnScripts/FrostfangSea/dock_fight1.lua @@ -0,0 +1,34 @@ +--[[ + Script Name : SpawnScripts/FrostfangSea/dock_fight1.lua + Script Purpose : the armed NPC fighting on halas docks + Script Author : theFoof + Script Date : 2013.10.30 + Script Notes : +--]] + +function spawn(NPC) + EmoteLoop(NPC) + SpawnSet(NPC, "emote_state", "16") + SpawnSet(NPC, "action_state", "11420") +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + PlayFlavor(NPC, "", "", "hello", 0, 0, Spawn) +end + +function EmoteLoop(NPC) + local choice = math.random(1,3) + if choice == 1 then + PlayFlavor(NPC, "", "", "attack", 0, 0) + elseif choice == 2 then + PlayAnimation(NPC, 11764) + else + PlayAnimation(NPC, 11890) + end + AddTimer(NPC, math.random(1000,5000), "EmoteLoop") +end \ No newline at end of file diff --git a/server/SpawnScripts/FrostfangSea/dock_fight2.lua b/server/SpawnScripts/FrostfangSea/dock_fight2.lua new file mode 100644 index 000000000..63689ae87 --- /dev/null +++ b/server/SpawnScripts/FrostfangSea/dock_fight2.lua @@ -0,0 +1,33 @@ +--[[ + Script Name : SpawnScripts/FrostfangSea/dock_fight2.lua + Script Purpose : the unarmed NPC fighting on halas docks + Script Author : theFoof + Script Date : 2013.10.30 + Script Notes : +--]] + +function spawn(NPC) + EmoteLoop(NPC) + SpawnSet(NPC, "emote_state", "16") +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + PlayFlavor(NPC, "", "", "hello", 0, 0, Spawn) +end + +function EmoteLoop(NPC) + local choice = math.random(1,3) + if choice == 1 then + PlayFlavor(NPC, "", "", "attack", 0, 0) + elseif choice == 2 then + PlayAnimation(NPC, 11764) + else + PlayAnimation(NPC, 11890) + end + AddTimer(NPC, math.random(1000,5000), "EmoteLoop") +end \ No newline at end of file diff --git a/server/SpawnScripts/FrostfangSea/frostbiteregg.lua b/server/SpawnScripts/FrostfangSea/frostbiteregg.lua new file mode 100644 index 000000000..a7e9a45b6 --- /dev/null +++ b/server/SpawnScripts/FrostfangSea/frostbiteregg.lua @@ -0,0 +1,34 @@ +--[[ + Script Name : SpawnScripts/FrostfangSea/frostbiteregg.lua + Script Purpose : for the frostbiter eggs in frostfang (unnamed spawn) + Script Author : theFoof + Script Date : 2013.6.1 + Script Notes : +--]] + +local DomesticationSurvivalism = 43 + +function spawn(NPC) + SetRequiredQuest(NPC, DomesticationSurvivalism, 1) + AddSpawnAccess(NPC, NPC) + SetPlayerProximityFunction(NPC, 50, "SpawnAccess", "SpawnAccess") +end + +function respawn(NPC) + spawn(NPC) +end + +function casted_on(NPC, Spawn, SpellName) + if SpellName == 'Gathering' then + if GetQuestStep(Spawn, DomesticationSurvivalism) == 1 then + AddStepProgress(Spawn, DomesticationSurvivalism, 1, 1) + Despawn(NPC) + end + end +end + +function SpawnAccess(NPC, Spawn) + if HasCompletedQuest(Spawn, DomesticationSurvivalism) or GetQuestStep(Spawn, DomesticationSurvivalism) == 1 then + AddSpawnAccess(NPC, Spawn) + end +end \ No newline at end of file diff --git a/server/SpawnScripts/FrostfangSea/frozen_pincer_chowder.lua b/server/SpawnScripts/FrostfangSea/frozen_pincer_chowder.lua new file mode 100644 index 000000000..925dff02c --- /dev/null +++ b/server/SpawnScripts/FrostfangSea/frozen_pincer_chowder.lua @@ -0,0 +1,34 @@ +--[[ + Script Name : SpawnScripts/FrostfangSea/a_frozen_pincer_chowder.lua + Script Purpose : the spawn frozen_pincer_chowder + Script Author : theFoof + Script Date : 2013.9.2 + Script Notes : +--]] + +local FrozenChowder = 88 + +function spawn(NPC) + SetRequiredQuest(NPC, FrozenChowder, 4) + AddSpawnAccess(NPC, NPC) + SetPlayerProximityFunction(NPC, 50, "SpawnAccess", "SpawnAccess") +end + +function respawn(NPC) + spawn(NPC) +end + +function casted_on(NPC, Spawn, SpellName) + if SpellName == 'pick up a bowl of frozen pincer chowder' then + if GetQuestStep(Spawn, FrozenChowder) == 4 then + SetStepComplete(Spawn, FrozenChowder, 4) + RemoveSpawnAccess(NPC, Spawn) + end + end +end + +function SpawnAccess(NPC, Spawn) + if GetQuestStep(Spawn, FrozenChowder) == 4 then + AddSpawnAccess(NPC, Spawn) + end +end \ No newline at end of file diff --git a/server/SpawnScripts/FrostfangSea/good_book_feeding_the_guurok.lua b/server/SpawnScripts/FrostfangSea/good_book_feeding_the_guurok.lua new file mode 100644 index 000000000..1d2d3eb95 --- /dev/null +++ b/server/SpawnScripts/FrostfangSea/good_book_feeding_the_guurok.lua @@ -0,0 +1,19 @@ +--[[ + Script Name : SpawnScripts/FrostfangSea/good_book_feeding_the_guurok.lua + Script Purpose : for the spawn "good_book_feeding_the_guurok.lua + Script Author : theFoof + Script Date : 2013.5.30 + Script Notes : +--]] +local GreatShelf = 30 + +function spawn(NPC) + AddSpawnAccess(NPC, NPC) + SetPlayerProximityFunction(NPC, 50, "SpawnAccess", "SpawnAccess") +end + +function SpawnAccess(NPC, Spawn) + if HasCompletedQuest(Spawn, GreatShelf) then + AddSpawnAccess(NPC, Spawn) + end +end \ No newline at end of file diff --git a/server/SpawnScripts/FrostfangSea/hal_obj_cave_rock02.lua b/server/SpawnScripts/FrostfangSea/hal_obj_cave_rock02.lua new file mode 100644 index 000000000..50913abab --- /dev/null +++ b/server/SpawnScripts/FrostfangSea/hal_obj_cave_rock02.lua @@ -0,0 +1,28 @@ +--[[ + Script Name : SpawnScripts/FrostfangSea/hal_obj_cave_rock02.lua + Script Purpose : this changes the size of the rocks in the velinoid caves + Script Author : theFoof + Script Date : 2013.6.13 + Script Notes : this script is assigned to the rock with the location id 572711 +--]] + +local RyGorrOperations = 60 + +function spawn(NPC) + AddSpawnAccess(NPC, NPC) + SetPlayerProximityFunction(NPC, 100, "SpawnAccess", "SpawnAccess") + local zone = GetZone(NPC) + SpawnSet(GetSpawnByLocationID(zone, 441161), "size", "28") + SpawnSet(GetSpawnByLocationID(zone, 441162), "size", "10") + SpawnSet(GetSpawnByLocationID(zone, 441160), "size", "13") + SpawnSet(GetSpawnByLocationID(zone, 441157), "size", "22") + SpawnSet(NPC, "size", "25") +end + +function SpawnAccess(NPC, Spawn) + if not HasCompletedQuest(Spawn, RyGorrOperations) then + if GetQuestStep(Spawn, RyGorrOperations) < 2 then + AddSpawnAccess(NPC, Spawn) + end + end +end \ No newline at end of file diff --git a/server/SpawnScripts/FrostfangSea/halas_bar_patrons.lua b/server/SpawnScripts/FrostfangSea/halas_bar_patrons.lua new file mode 100644 index 000000000..29fc4a34d --- /dev/null +++ b/server/SpawnScripts/FrostfangSea/halas_bar_patrons.lua @@ -0,0 +1,36 @@ +--[[ + Script Name : SpawnScripts/FrostfangSea/halas_bar_patrons.lua + Script Purpose : bar patrons in halas + Script Author : theFoof + Script Date : 2013.10.30 + Script Notes : +--]] + +function spawn(NPC) + EmoteLoop(NPC) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + PlayFlavor(NPC, "", "", "hello", 0, 0, Spawn) +end + +function EmoteLoop(NPC) + local choice = math.random(1,4) + local emote + if choice == 1 then + emote = "flex" + elseif choice == 2 then + emote = "stretch" + elseif choice == 3 then + emote = "point" + elseif choice == 4 then + emote = "peer" + end + PlayFlavor(NPC, "", "", emote, 0, 0) + AddTimer(NPC, math.random(15000,45000), "EmoteLoop") +end \ No newline at end of file diff --git a/server/SpawnScripts/FrostfangSea/halas_proximity_cheer.lua b/server/SpawnScripts/FrostfangSea/halas_proximity_cheer.lua new file mode 100644 index 000000000..4789c4d4c --- /dev/null +++ b/server/SpawnScripts/FrostfangSea/halas_proximity_cheer.lua @@ -0,0 +1,33 @@ +--[[ + Script Name : SpawnScripts/FrostfangSea/halas_proximity_cheer.lua + Script Purpose : makes npcs cheer when player gets in proximity + Script Author : theFoof + Script Date : 2013.9.26 + Script Notes : +--]] + +function spawn(NPC) + SetPlayerProximityFunction(NPC, 15, "ProxCheer") +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + PlayFlavor(NPC, "", "", "hello", 0, 0, Spawn) + FaceTarget(NPC, Spawn) +end + +function ProxCheer(NPC, Spawn) + FaceTarget(NPC, Spawn) + if GetTempVariable(NPC, "cheer_timer") == nil then + PlayFlavor(NPC, "", "", "cheer", 0, 0) + SetTempVariable(NPC, "cheer_timer", "1") + AddTimer(NPC, 15000, "CheerTimer") + end +end + +function CheerTimer(NPC) + SetTempVariable(NPC, "cheer_timer", nil) +end \ No newline at end of file diff --git a/server/SpawnScripts/FrostfangSea/halas_three_barrels_snow.lua b/server/SpawnScripts/FrostfangSea/halas_three_barrels_snow.lua new file mode 100644 index 000000000..e5c265522 --- /dev/null +++ b/server/SpawnScripts/FrostfangSea/halas_three_barrels_snow.lua @@ -0,0 +1,67 @@ +--[[ + Script Name : Quests/FrostfangSea/halas_three_barrels_snow.lua + Script Purpose : the spawns "halas_three_barrels_snow_01" and "halas_three_barrels_snow_02" + Script Author : theFoof + Script Date : 2013.5.14 +--]] + +local RepellingCritters = 7 + +function spawn(NPC) + SetRequiredQuest(NPC, RepellingCritters, 3) +end + +function casted_on(NPC, Spawn, SpellName) + if SpellName == "Apply the Repellent" and GetQuestStep(Spawn, RepellingCritters) == 3 then + SetStepComplete(Spawn, RepellingCritters, 3) + local zone = GetZone(NPC) -- the following code removes access from publicly spawned raiders, spawns new raiders, makes them path 35 meters south, then despawns them + local raider = GetSpawnByLocationID(zone, 14) + RemoveSpawnAccess(raider, Spawn) + local new = SpawnByLocationID(zone, 14) + AddSpawnAccess(new, Spawn) + SpawnRaider(new) + local raider = GetSpawnByLocationID(zone, 15) + RemoveSpawnAccess(raider, Spawn) + local new = GetSpawnByLocationID(zone, 15) + AddSpawnAccess(new, Spawn) + SpawnRaider(new) + local raider = GetSpawnByLocationID(zone, 26) + RemoveSpawnAccess(raider, Spawn) + local new = SpawnByLocationID(zone, 26) + AddSpawnAccess(new, Spawn) + SpawnRaider(new) + local raider = GetSpawnByLocationID(zone, 33) + RemoveSpawnAccess(raider, Spawn) + local new = SpawnByLocationID(zone, 33) + AddSpawnAccess(new, Spawn) + SpawnRaider(new) + local raider = GetSpawnByLocationID(zone, 38) + RemoveSpawnAccess(raider, Spawn) + local new = SpawnByLocationID(zone, 38) + AddSpawnAccess(new, Spawn) + SpawnRaider(new) + local raider = GetSpawnByLocationID(zone, 48) + RemoveSpawnAccess(raider, Spawn) + local new = SpawnByLocationID(zone, 48) + AddSpawnAccess(new, Spawn) + SpawnRaider(new) + local raider = GetSpawnByLocationID(zone, 50) + RemoveSpawnAccess(raider, Spawn) + local new = SpawnByLocationID(zone, 50) + SpawnRaider(new) + local raider = GetSpawnByLocationID(zone, 74) + RemoveSpawnAccess(raider, Spawn) + local new = SpawnByLocationID(zone, 74) + AddSpawnAccess(new, Spawn) + SpawnRaider(new) + end +end + +function SpawnRaider(NPC) + X = GetX(NPC) + Y = GetY(NPC) + Z = GetZ(NPC) + SetSpeed(NPC, 13) + MoveToLocation(NPC, X, Y, Z + 35) + AddTimer(NPC, 3000, "Despawn") +end \ No newline at end of file diff --git a/server/SpawnScripts/FrostfangSea/ham.lua b/server/SpawnScripts/FrostfangSea/ham.lua new file mode 100644 index 000000000..d1a73eed9 --- /dev/null +++ b/server/SpawnScripts/FrostfangSea/ham.lua @@ -0,0 +1,33 @@ +--[[ + Script Name : SpawnScripts/FrostfangSea/ham.lua + Script Purpose : a ham + Script Author : theFoof + Script Date : 2013.9.3 + Script Notes : +--]] + +local HamBeans = 89 + +function spawn(NPC) + AddSpawnAccess(NPC, NPC) + SetPlayerProximityFunction(NPC, 50, "SpawnAccess", "SpawnAccess") +end + +function respawn(NPC) + spawn(NPC) +end + +function casted_on(NPC, Spawn, SpellName) + if SpellName == 'pick up a plate of ham and beans' then + if GetQuestStep(Spawn, HamBeans) == 4 then + RemoveSpawnAccess(NPC, Spawn) + SetStepComplete(Spawn, HamBeans, 4) + end + end +end + +function SpawnAccess(NPC, Spawn) + if GetQuestStep(Spawn, HamBeans) == 4 then + AddSpawnAccess(NPC, Spawn) + end +end \ No newline at end of file diff --git a/server/SpawnScripts/FrostfangSea/imbuedRyGorrpickaxe.lua b/server/SpawnScripts/FrostfangSea/imbuedRyGorrpickaxe.lua new file mode 100644 index 000000000..cbb5e2018 --- /dev/null +++ b/server/SpawnScripts/FrostfangSea/imbuedRyGorrpickaxe.lua @@ -0,0 +1,34 @@ +--[[ + Script Name : SpawnScripts/FrostfangSea/imbuedRyGorrpickaxe.lua + Script Purpose : for the imbued RyGorr pickaxe spawns + Script Author : theFoof + Script Date : 2013.7.10 + Script Notes : +--]] + +local RyGorrTaking = 76 + +function spawn(NPC) + AddSpawnAccess(NPC, NPC) + SetRequiredQuest(NPC, RyGorrTaking, 1) + SetPlayerProximityFunction(NPC, 50, "SpawnAccess", "SpawnAccess") +end + +function respawn(NPC) + spawn(NPC) +end + +function casted_on(NPC, Spawn, SpellName) + if SpellName == 'Gather Pickaxe' then + if GetQuestStep(Spawn, RyGorrTaking) == 1 then + Despawn(NPC) + AddStepProgress(Spawn, RyGorrTaking, 1, 1) + end + end +end + +function SpawnAccess(NPC, Spawn) + if GetQuestStep(Spawn, RyGorrTaking) == 1 then + AddSpawnAccess(NPC, Spawn) + end +end \ No newline at end of file diff --git a/server/SpawnScripts/FrostfangSea/luckywolfpawrecipe.lua b/server/SpawnScripts/FrostfangSea/luckywolfpawrecipe.lua new file mode 100644 index 000000000..f05a7be15 --- /dev/null +++ b/server/SpawnScripts/FrostfangSea/luckywolfpawrecipe.lua @@ -0,0 +1,33 @@ +--[[ + Script Name : SpawnScripts/FrostfangSea/luckywolfpawrecipe.lua + Script Purpose : "lucky wolf paw recipe" sign + Script Author : theFoof + Script Date : 2013.5.15 + Script Notes : +--]] + +local HadAHammer = 12 + +function spawn(NPC) + AddSpawnAccess(NPC, NPC) + SetPlayerProximityFunction(NPC, 50, "SpawnAccess", "SpawnAccess") + SetRequiredQuest(NPC, HadAHammer, 1) +end + +function respawn(NPC) + spawn(NPC) +end + +function SpawnAccess(NPC, Player) + if GetQuestStep(Player, HadAHammer) > 0 then + AddSpawnAccess(NPC, Player) + end +end + +function casted_on(Target, Caster, SpellName) + if SpellName == "pick up recipe" then + if HasItem(Caster, 32122) == false and HasQuest(Caster, HadAHammer) then + SummonItem(Caster, 32122) + end + end +end \ No newline at end of file diff --git a/server/SpawnScripts/FrostfangSea/opentreasurechest.lua b/server/SpawnScripts/FrostfangSea/opentreasurechest.lua new file mode 100644 index 000000000..abd3fc018 --- /dev/null +++ b/server/SpawnScripts/FrostfangSea/opentreasurechest.lua @@ -0,0 +1,28 @@ +--[[ + Script Name : SpawnScripts/FrostfangSea/opentreasurechest.lua + Script Purpose : treasure chest in Frostfang Sea + Script Author : theFoof + Script Date : 2013.10.30 + Script Notes : +--]] + +function spawn(NPC) + SetPlayerProximityFunction(NPC, 15, "OpenChest") +end + +function respawn(NPC) + spawn(NPC) +end + +function OpenChest(NPC) + if GetTempVariable(NPC, "open_timer") == nil then + SetTempVariable(NPC, "open_timer", "1") + SpawnSet(NPC, "action_state", "11904") + AddTimer(NPC, 25000, "CloseChest") + end +end + +function CloseChest(NPC) + SetTempVariable(NPC, "open_timer", nil) + SpawnSet(NPC, "action_state", "0") +end \ No newline at end of file diff --git a/server/SpawnScripts/FrostfangSea/orc_summon_portal.lua b/server/SpawnScripts/FrostfangSea/orc_summon_portal.lua new file mode 100644 index 000000000..d3b9d4839 --- /dev/null +++ b/server/SpawnScripts/FrostfangSea/orc_summon_portal.lua @@ -0,0 +1,16 @@ +--[[ + Script Name : SpawnScripts/FrostfangSea/orc_summon_portal.lua + Script Purpose : for the portal that spawns orc + Script Author : theFoof + Script Date : 2013.6.8 + Script Notes : +--]] + +function spawn(NPC) + SpawnTimer(NPC) +end + +function SpawnTimer(NPC) + SpawnMob(GetZone(NPC), 4700096, 0, 750.68 + math.random(-4,4), 103.15, -504.11 + math.random(-4,4), 130) + AddTimer(NPC, math.random(0,12000), "SpawnTimer") +end \ No newline at end of file diff --git a/server/SpawnScripts/FrostfangSea/orcnecromancerpet.lua b/server/SpawnScripts/FrostfangSea/orcnecromancerpet.lua new file mode 100644 index 000000000..9e1977b69 --- /dev/null +++ b/server/SpawnScripts/FrostfangSea/orcnecromancerpet.lua @@ -0,0 +1,9 @@ +--[[ + Script Name : SpawnScripts/FrostfangSea/orcnecromancerpet.lua + Script Purpose : for the orc necromancer pets + Script Author : theFoof + Script Date : 2013.6.6 + Script Notes : +--]] + +removed this script \ No newline at end of file diff --git a/server/SpawnScripts/FrostfangSea/orcpickaxe.lua b/server/SpawnScripts/FrostfangSea/orcpickaxe.lua new file mode 100644 index 000000000..4958ce136 --- /dev/null +++ b/server/SpawnScripts/FrostfangSea/orcpickaxe.lua @@ -0,0 +1,33 @@ +--[[ + Script Name : SpawnScripts/FrostfangSea/orcpickaxe.lua + Script Purpose : for the spawns "orc pickaxe" + Script Author : theFoof + Script Date : 2013.7.23 + Script Notes : +--]] + +local MysteryIceberg = 80 + +function spawn(NPC) + SetPlayerProximityFunction(NPC, 50, "SpawnAccess", "SpawnAccess") + AddSpawnAccess(NPC, NPC) +end + +function respawn(NPC) + spawn(NPC) +end + +function casted_on(NPC, Spawn, SpellName) + if HasQuest(Spawn, MysteryIceberg) and not QuestStepIsComplete(Spawn, MysteryIceberg, 1) then + if SpellName == 'Gather_Pickaxe' then + AddStepProgress(Spawn, MysteryIceberg, 1, 1) + Despawn(NPC) + end + end +end + +function SpawnAccess(NPC, Spawn) + if HasQuest(Spawn, MysteryIceberg) and not QuestStepIsComplete(Spawn, MysteryIceberg, 1) then + AddSpawnAccess(NPC, Spawn) + end +end \ No newline at end of file diff --git a/server/SpawnScripts/FrostfangSea/pie.lua b/server/SpawnScripts/FrostfangSea/pie.lua new file mode 100644 index 000000000..df5768300 --- /dev/null +++ b/server/SpawnScripts/FrostfangSea/pie.lua @@ -0,0 +1,33 @@ +--[[ + Script Name : SpawnScripts/FrostfangSea/pie.lua + Script Purpose : a pie + Script Author : theFoof + Script Date : 2013.9.3 + Script Notes : +--]] + +local KestrelPie = 90 + +function spawn(NPC) + AddSpawnAccess(NPC, NPC) + SetPlayerProximityFunction(NPC, 50, "SpawnAccess", "SpawnAccess") +end + +function respawn(NPC) + spawn(NPC) +end + +function casted_on(NPC, Spawn, SpellName) + if SpellName == 'pick up a kestrel pot pie' then + if GetQuestStep(Spawn, KestrelPie) == 4 then + RemoveSpawnAccess(NPC, Spawn) + SetStepComplete(Spawn, KestrelPie, 4) + end + end +end + +function SpawnAccess(NPC, Spawn) + if GetQuestStep(Spawn, KestrelPie) == 4 then + AddSpawnAccess(NPC, Spawn) + end +end \ No newline at end of file diff --git a/server/SpawnScripts/FrostfangSea/pileofRyGorrbones.lua b/server/SpawnScripts/FrostfangSea/pileofRyGorrbones.lua new file mode 100644 index 000000000..ff7324f0d --- /dev/null +++ b/server/SpawnScripts/FrostfangSea/pileofRyGorrbones.lua @@ -0,0 +1,43 @@ +--[[ + Script Name : SpawnScripts/FrostfangSea/pileofRyGorrbones.lua + Script Purpose : for the spawn "pile of Ry'Gorr bones" + Script Author : theFoof + Script Date : 2013.5.29 + Script Notes : +--]] +local TheGauntlet = 36 + +local PouringSkellies = 40 + +function spawn(NPC) + SetRequiredQuest(NPC, TheGauntlet, 1, 0, 0, 20) +end + +function respawn(NPC) + spawn(NPC) +end + +function casted_on(NPC, Spawn, SpellName) + if SpellName == 'Smash the bones' then + if GetQuestStep(Spawn, TheGauntlet) == 1 then + local X = GetX(NPC) + local Y = GetY(NPC) + local Z = GetZ(NPC) + AddStepProgress(Spawn, TheGauntlet, 1, 1) + local mob = SpawnMob(GetZone(Spawn), 4701121, 0, X, Y, Z, 0) + Attack(mob, Spawn) + Despawn(NPC) + end + elseif SpellName == 'pour one out' then + if GetQuestStep(Spawn, PouringSkellies) == 1 then + SpawnSet(NPC, "visual_state", "491") + AddTimer(NPC, 4000, "depop") + AddStepProgress(Spawn, PouringSkellies, 1, 1) + SendMessage(Player, "You have poured Fronden's Finest on the orc bones.") + end + end +end + +function depop(NPC, Spawn) + Despawn(NPC) +end \ No newline at end of file diff --git a/server/SpawnScripts/FrostfangSea/qst_axebeard_totem.lua b/server/SpawnScripts/FrostfangSea/qst_axebeard_totem.lua new file mode 100644 index 000000000..8e3564e4f --- /dev/null +++ b/server/SpawnScripts/FrostfangSea/qst_axebeard_totem.lua @@ -0,0 +1,34 @@ +--[[ + Script Name : SpawnScripts/FrostfangSea/qst_axebeard_totem.lua + Script Purpose : for the spawn "qst_axebeard_x4_totem" + Script Author : theFoof + Script Date : 2013.5.28 + Script Notes : +--]] +local TotemAnnihilation = 34 + +function spawn(NPC) + AddSpawnAccess(NPC, NPC) + SetPlayerProximityFunction(NPC, 50, "SpawnAccess", "SpawnAccess") +end + +function respawn(NPC) + spawn(NPC) +end + +function casted_on(NPC, Spawn, SpellName) + if SpellName == 'destroy the totem' then + if GetQuestStep(Spawn, TotemAnnihilation) == 1 then + AddStepProgress(Spawn, TotemAnnihilation, 1, 1) + Despawn(NPC) + end + end +end + +function SpawnAccess(NPC, Spawn) + if GetQuestStep(Spawn, TotemAnnihilation) == 1 then + AddSpawnAccess(NPC, Spawn) + else + RemoveSpawnAccess(NPC, Spawn) + end +end \ No newline at end of file diff --git a/server/SpawnScripts/FrostfangSea/qst_herga_x5_helm.lua b/server/SpawnScripts/FrostfangSea/qst_herga_x5_helm.lua new file mode 100644 index 000000000..58128648d --- /dev/null +++ b/server/SpawnScripts/FrostfangSea/qst_herga_x5_helm.lua @@ -0,0 +1,33 @@ +--[[ + Script Name : SpawnScripts/FrostfangSea/qst_herga_x5_helm.lua + Script Purpose : for the helm during the quest "All That Remains" + Script Author : theFoof + Script Date : 2013.6.5 + Script Notes : +--]] + +local AllRemains = 55 + +function spawn(NPC) + AddSpawnAccess(NPC, NPC) + SetPlayerProximityFunction(NPC, 50, "SpawnAccess", "SpawnAccess") +end + +function casted_on(NPC, Spawn, SpellName) + if SpellName == 'retrieve the helm' then + if GetQuestStep(Spawn, AllRemains) == 1 then + SetStepComplete(Spawn, AllRemains, 1) + local orc = SpawnByLocationID(GetZone(NPC), 33474) + Attack(orc, Spawn) + elseif GetQuestStep(Spawn, AllRemains) == 3 then + SetStepComplete(Spawn, AllRemains, 3) + RemoveSpawnAccess(NPC, Spawn) + end + end +end + +function SpawnAccess(NPC, Spawn) + if HasQuest(Spawn, AllRemains) and GetQuestStep(Spawn, AllRemains) < 4 then + AddSpawnAccess(NPC, Spawn) + end +end \ No newline at end of file diff --git a/server/SpawnScripts/FrostfangSea/qst_redblade_x3_revamp_barricade.lua b/server/SpawnScripts/FrostfangSea/qst_redblade_x3_revamp_barricade.lua new file mode 100644 index 000000000..18ccc9ddc --- /dev/null +++ b/server/SpawnScripts/FrostfangSea/qst_redblade_x3_revamp_barricade.lua @@ -0,0 +1,28 @@ +--[[ + Script Name : SpawnScripts/FrostfangSea/QstRedbladeX3RevampBarricade.lua + Script Purpose : handles the barricade spawn on Pilgrims' Landing + Script Author : theFoof + Script Date : 2013.5.6 + Script Notes : +--]] + +local BoatloadWork = 4 + +function spawn(NPC, Player) + SpawnSet(NPC, "activity_state", "0") + AddSpawnAccess(NPC, NPC) + SetPlayerProximityFunction(NPC, 50, "CheckQuest", "CheckQuest") + if HasCompletedQuest(Player, BoatloadWork) or GetQuestStep(Player, BoatloadWork) == 4 then + AddSpawnAccess(NPC, Player) + end +end + +function respawn(NPC) + spawn(NPC) +end + +function CheckQuest(NPC, Player) + if HasCompletedQuest(Player, BoatloadWork) or GetQuestStep(Player, BoatloadWork) == 4 then + AddSpawnAccess(NPC, Player) + end +end \ No newline at end of file diff --git a/server/SpawnScripts/FrostfangSea/qst_scourgeson_x2_orc_tent6_invis_cube.lua b/server/SpawnScripts/FrostfangSea/qst_scourgeson_x2_orc_tent6_invis_cube.lua new file mode 100644 index 000000000..bce71007b --- /dev/null +++ b/server/SpawnScripts/FrostfangSea/qst_scourgeson_x2_orc_tent6_invis_cube.lua @@ -0,0 +1,14 @@ +--[[ + Script Name : SpawnScripts/FrostfangSea/qst_scourgeson_x2_orc_tent6_invis_cube.lua + Script Purpose : for the fire tent fire invis cubes + Script Author : theFoof + Script Date : 2013.6.24 + Script Notes : +--]] + +function spawn(NPC) + AddTimer(NPC, 25000, "Despawn") +end + +function respawn(NPC) +end diff --git a/server/SpawnScripts/FrostfangSea/qst_scourgeson_x2_rygorr_tent.lua b/server/SpawnScripts/FrostfangSea/qst_scourgeson_x2_rygorr_tent.lua new file mode 100644 index 000000000..73fe67440 --- /dev/null +++ b/server/SpawnScripts/FrostfangSea/qst_scourgeson_x2_rygorr_tent.lua @@ -0,0 +1,58 @@ +--[[ + Script Name : SpawnScripts/FrostfangSea/qst_scourgeson_x2_rygorr_tent.lua + Script Purpose : for the quest tent spawns + Script Author : theFoof + Script Date : 2013.6.20 + Script Notes : +--]] + +local HighlyMaterials = 74 + +function spawn(NPC) + SetRequiredQuest(NPC, HighlyMaterials, 2) +end + +function respawn(NPC) + spawn(NPC) +end + +function casted_on(NPC, Spawn, SpellName) + if SpellName == 'burn tent' then + if GetQuestStep(Spawn, HighlyMaterials) == 2 and GetTempVariable(NPC, "on_fire") ~= "true" then + local zone = GetZone(NPC) + local fire + if GetSpawnLocationID(NPC) == 435782 then + fire = SpawnByLocationID(zone, 572721) + elseif GetSpawnLocationID(NPC) == 435783 then + fire = SpawnByLocationID(zone, 572720) + elseif GetSpawnLocationID(NPC) == 435788 then + fire = SpawnByLocationID(zone, 572719) + elseif GetSpawnLocationID(NPC) == 435793 then + fire = SpawnByLocationID(zone, 572722) + elseif GetSpawnLocationID(NPC) == 435792 then + fire = SpawnByLocationID(zone, 572718) + elseif GetSpawnLocationID(NPC) == 435790 then + fire = SpawnByLocationID(zone, 442666) + end + AddStepProgress(Spawn, HighlyMaterials, 2, 1) + AddTimer(fire, 25000, "Despawn") + AddTimer(NPC, 25000, "ReapplyPrimaryCommand") + AddTimer(NPC, 5000, "KillArea") + RemovePrimaryCommand(NPC) + end + end +end + +function KillArea(NPC) + KillSpawnByDistance(NPC, 20, 0, 0) +end + +function RemovePrimaryCommand(NPC) + SpawnSet(NPC, "primary_command", "0") + SetTempVariable(NPC, "on_fire", "true") +end + +function ReapplyPrimaryCommand(NPC) + SpawnSet(NPC, "primary_command", "871") + SetTempVariable(NPC, "on_fire", nil) +end \ No newline at end of file diff --git a/server/SpawnScripts/FrostfangSea/qst_scourgeson_x5_ceiling_crystals.lua b/server/SpawnScripts/FrostfangSea/qst_scourgeson_x5_ceiling_crystals.lua new file mode 100644 index 000000000..2828fbe7f --- /dev/null +++ b/server/SpawnScripts/FrostfangSea/qst_scourgeson_x5_ceiling_crystals.lua @@ -0,0 +1,36 @@ +--[[ + Script Name : SpawnScripts/FrostfangSea/qst_scourgeson_x5_ceiling_crystals.lua + Script Purpose : for the ceiling crystal spawns in the velinoid caves + Script Author : theFoof + Script Date : 2013.7.18 + Script Notes : +--]] + +local WatchBelow = 77 + +function spawn(NPC) + SetRequiredQuest(NPC, WatchBelow, 1) +end + +function respawn(NPC) + spawn(NPC) +end + +function casted_on(NPC, Spawn, SpellName) + if SpellName == 'knock off a crystal' then + x = GetX(NPC) + z = GetZ(NPC) + SetTempVariable(Spawn, "crystal_x", x) + SetTempVariable(Spawn, "crystal_z", z) + SetSpeed(NPC, 5) + AddTimer(NPC, 3000, "SpawnCrystal", 1, Spawn) + MoveToLocation(NPC, x, GetY - 25, z) + end +end + +function SpawnCrystal(NPC, Spawn) + SpawnMob(GetZone(NPC), 4701752, 0, GetTempVariable(Spawn, "crystal_x"), GetY(Spawn), GetTempVariable(Spawn, "crystal_z"), GetHeading(NPC)) + Despawn(NPC) + SetTempVariable(Spawn, "crystal_x", nil) + SetTempVariable(Spawn, "crystal_z", nil) +end diff --git a/server/SpawnScripts/FrostfangSea/qst_veliumdelver_barrel.lua b/server/SpawnScripts/FrostfangSea/qst_veliumdelver_barrel.lua new file mode 100644 index 000000000..81903c6ca --- /dev/null +++ b/server/SpawnScripts/FrostfangSea/qst_veliumdelver_barrel.lua @@ -0,0 +1,28 @@ +--[[ + Script Name : SpawnScripts/FrostfangSea/qst_veliumdelver_barrel.lua + Script Purpose : for the qst_veliumdelver_barrel spawns + Script Author : theFoof + Script Date : 2013.6.11 + Script Notes : +--]] + +local RyGorrOperations = 60 + +function spawn(NPC) + SetRequiredQuest(NPC, RyGorrOperations, 1) +end + +function respawn(NPC) + spawn(NPC) +end + +function casted_on(NPC, Spawn, SpellName) + if SpellName == "gather " then + if GetQuestStep(Spawn, RyGorrOperations) == 1 then + if not HasItem(Spawn, 47881) then + SummonItem(Spawn, 47881) + Despawn(NPC) + end + end + end +end \ No newline at end of file diff --git a/server/SpawnScripts/FrostfangSea/qst_veliumdelver_x5_wall_expolsion.lua b/server/SpawnScripts/FrostfangSea/qst_veliumdelver_x5_wall_expolsion.lua new file mode 100644 index 000000000..16ac5c190 --- /dev/null +++ b/server/SpawnScripts/FrostfangSea/qst_veliumdelver_x5_wall_expolsion.lua @@ -0,0 +1,34 @@ +--[[ + Script Name : SpawnScripts/FrostfangSea/qst_veliumdelver_x5_wall_expolsion.lua + Script Purpose : the exploding animation for the ry'gorr exploding barrel as well as hiding the boulder + Script Author : theFoof + Script Date : 2013.6.12 + Script Notes : +--]] + +local RyGorrOperations = 60 + +function spawn(NPC) + AddTimer(NPC, 2600, "explosion") +end + +function respawn(NPC) + spawn(NPC) +end + +function explosion(NPC) + local player = GetTempVariable(NPC, "player") + local wall = GetSpawnByLocationID(GetZone(NPC), 441164) + local wallrock = GetSpawnByLocationID(GetZone(NPC), 572711) + SpawnSet(NPC, "visual_state", "1491") + RemoveSpawnAccess(wall, player) + RemoveSpawnAccess(wallrock, player) + AddTimer(NPC, 500, "kill_explosion") + SetStepComplete(player, RyGorrOperations, 1) + SetTempVariable(NPC, "player", nil) +end + +function kill_explosion(NPC) + SpawnSet(NPC, "visual_state", "0") + AddTimer(NPC, 4000, "Despawn") +end \ No newline at end of file diff --git a/server/SpawnScripts/FrostfangSea/respawngraveswregan.lua b/server/SpawnScripts/FrostfangSea/respawngraveswregan.lua new file mode 100644 index 000000000..2d4dfdd5a --- /dev/null +++ b/server/SpawnScripts/FrostfangSea/respawngraveswregan.lua @@ -0,0 +1,19 @@ +--[[ + Script Name : SpawnScripts/FrostfangSea/respawngraveswregan.lua + Script Purpose : spawn access for the grave near Gwenevyn's Cove + Script Author : theFoof + Script Date : 2013.05.22 + Script Notes : +--]] +local SiftingGarbage = 14 + +function spawn(NPC) + AddSpawnAccess(NPC, NPC) + SetPlayerProximityFunction(NPC, 50, "SpawnAccess", "SpawnAccess") +end + +function SpawnAccess(NPC, Spawn) + if HasCompletedQuest(Spawn, SiftingGarbage) then + AddSpawnAccess(NPC, Spawn) + end +end \ No newline at end of file diff --git a/server/SpawnScripts/FrostfangSea/rolling_rocks.lua b/server/SpawnScripts/FrostfangSea/rolling_rocks.lua new file mode 100644 index 000000000..845e7ef27 --- /dev/null +++ b/server/SpawnScripts/FrostfangSea/rolling_rocks.lua @@ -0,0 +1,24 @@ +--[[ + Script Name : SpawnScripts/FrostfangSea/rolling_rocks.lua + Script Purpose : rolling rocks + Script Author : theFoof + Script Date : 2013.11.15 + Script Notes : +--]] + +function spawn(NPC) + AddTimer(NPC, math.random(0,3000), "MovementPath") +end + +function respawn(NPC) + spawn(NPC) +end + +function MovementPath(NPC) + MovementLoopAddLocation(NPC, -144.44, 134.08, -191.65, 4, 0) + MovementLoopAddLocation(NPC, -151.8, 119.21, -205.99, 4, 0) + MovementLoopAddLocation(NPC, -150.61, 102.01, -219.03, 4, 0) + MovementLoopAddLocation(NPC, -137, 82.64, -236.36, 4, 0) + MovementLoopAddLocation(NPC, -125.34, 58.25, -281.31, 4, 0) + MovementLoopAddLocation(NPC, -64.76 + math.random(-10, 10), 32.92, -283.73 + math.random(-5,5), 4, 5, "Despawn") +end \ No newline at end of file diff --git a/server/SpawnScripts/FrostfangSea/sackofcoal.lua b/server/SpawnScripts/FrostfangSea/sackofcoal.lua new file mode 100644 index 000000000..99d841ae8 --- /dev/null +++ b/server/SpawnScripts/FrostfangSea/sackofcoal.lua @@ -0,0 +1,32 @@ +--[[ + Script Name : SpawnScripts/FrostfangSea/sackofcoal.lua + Script Purpose : "sack of coal" sign + Script Author : theFoof + Script Date : 2013.5.15 + Script Notes : +--]] + +local HadAHammer = 12 + +function spawn(NPC) + AddSpawnAccess(NPC, NPC) + SetPlayerProximityFunction(NPC, 50, "SpawnAccess", "SpawnAccess") +end + +function respawn(NPC) + spawn(NPC) +end + +function SpawnAccess(NPC, Player) + if GetQuestStep(Player, HadAHammer) > 1 then + AddSpawnAccess(NPC, Player) + end +end + +function casted_on(Target, Caster, SpellName) + if SpellName == "gather coal" then + if HasItem(Caster, 5771) == false and HasQuest(Caster, HadAHammer) then + SummonItem(Caster, 5771) + end + end +end \ No newline at end of file diff --git a/server/SpawnScripts/FrostfangSea/shardofglowingvelium.lua b/server/SpawnScripts/FrostfangSea/shardofglowingvelium.lua new file mode 100644 index 000000000..913be8a24 --- /dev/null +++ b/server/SpawnScripts/FrostfangSea/shardofglowingvelium.lua @@ -0,0 +1,23 @@ +--[[ + Script Name : SpawnScripts/FrostfangSea/shardofglowingvelium.lua + Script Purpose : for the spawn "shard of glowing velium" + Script Author : theFoof + Script Date : 2013.7.18 + Script Notes : +--]] + +local WatchBelow = 77 + +function spawn(NPC) + SetRequiredQuest(NPC, WatchBelow, 1) + AddTimer(NPC, 25000, "Despawn") +end + +function casted_on(NPC, Spawn, SpellName) + if SpellName == 'pick up crystal shard' then + if GetQuestStep(Spawn, WatchBelow) == 1 then + Despawn(NPC) + AddStepProgress(Spawn, WatchBelow, 1, 1) + end + end +end \ No newline at end of file diff --git a/server/SpawnScripts/FrostfangSea/sign_coldain_house03.lua b/server/SpawnScripts/FrostfangSea/sign_coldain_house03.lua new file mode 100644 index 000000000..4dfbf3a48 --- /dev/null +++ b/server/SpawnScripts/FrostfangSea/sign_coldain_house03.lua @@ -0,0 +1,22 @@ +--[[ + Script Name : SpawnScripts/FrostfangSea/sign_coldain_house03.lua + Script Purpose : hides the quarmarr house sign until questline is done + Script Author : theFoof + Script Date : 2013.9.24 + Script Notes : +--]] + +function spawn(NPC) + AddSpawnAccess(NPC, NPC) + SetPlayerProximityFunction(NPC, 100, "SpawnAccess", "SpawnAccess") +end + +function respawn(NPC) + spawn(NPC) +end + +function SpawnAccess(NPC, Spawn) + if HasCompletedQuest(Spawn, 30) then + AddSpawnAccess(NPC, Spawn) + end +end \ No newline at end of file diff --git a/server/SpawnScripts/FrostfangSea/signalfire.lua b/server/SpawnScripts/FrostfangSea/signalfire.lua new file mode 100644 index 000000000..a312f6bdd --- /dev/null +++ b/server/SpawnScripts/FrostfangSea/signalfire.lua @@ -0,0 +1,20 @@ +--[[ + Script Name : SpawnScripts/FrostfangSea/signalfire.lua + Script Purpose : setting signal fire private spawn access + Script Author : theFoof + Script Date : 2013.5.9 + Script Notes : +--]] + +local FlameOn = 5 + +function spawn(NPC) + AddSpawnAccess(NPC, NPC) + SetPlayerProximityFunction(NPC, 75, "CheckQuest", "CheckQuest") +end + +function CheckQuest(NPC, Player) + if HasCompletedQuest(Player, FlameOn) or GetQuestStep(Player, FlameOn) > 1 then + AddSpawnAccess(NPC, Player) + end +end \ No newline at end of file diff --git a/server/SpawnScripts/FrostfangSea/spider_puffs.lua b/server/SpawnScripts/FrostfangSea/spider_puffs.lua new file mode 100644 index 000000000..aca57f066 --- /dev/null +++ b/server/SpawnScripts/FrostfangSea/spider_puffs.lua @@ -0,0 +1,27 @@ +--[[ + Script Name : SpawnScripts/FrostfangSea/spider_puffs.lua + Script Purpose : the spawn spider_puffs + Script Author : theFoof + Script Date : 2013.8.27 + Script Notes : +--]] + +local SpiderPuffs = 87 + +function spawn(NPC) + SetPlayerProximityFunction(NPC, 50, "SpawnAccess", "SpawnAccess") + AddSpawnAccess(NPC, NPC) +end + +function respawn(NPC) + spawn(NPC) +end + +function casted_on(NPC, Spawn, SpellName) + if GetQuestStep(Spawn, SpiderPuffs) == 4 then + if SpellName == "pick up a plate of spider puffs" then + SetStepComplete(Spawn, SpiderPuffs, 4) + RemoveSpawnAccess(NPC, Spawn) + end + end +end \ No newline at end of file diff --git a/server/SpawnScripts/FrostfangSea/valorian_bloom.lua b/server/SpawnScripts/FrostfangSea/valorian_bloom.lua new file mode 100644 index 000000000..cb9e4f0aa --- /dev/null +++ b/server/SpawnScripts/FrostfangSea/valorian_bloom.lua @@ -0,0 +1,16 @@ +--[[ + Script Name : SpawnScripts/FrostfangSea/valorian_bloom.lua + Script Purpose : makes valorian blooms ghostly + Script Author : theFoof + Script Date : 2013.9.16 + Script Notes : +--]] + +function spawn(NPC) + SpawnSet(NPC, "action_state", "6193") + SpawnSet(NPC, "mood_state", "1902") +end + +function respawn(NPC) + spawn(NPC) +end \ No newline at end of file diff --git a/server/SpawnScripts/FrostfangSea/veliumshard.lua b/server/SpawnScripts/FrostfangSea/veliumshard.lua new file mode 100644 index 000000000..7f2e9ed8d --- /dev/null +++ b/server/SpawnScripts/FrostfangSea/veliumshard.lua @@ -0,0 +1,33 @@ +--[[ + Script Name : SpawnScripts/FrostfangSea/veliumshard.lua + Script Purpose : for the spawn "velium shard" + Script Author : theFoof + Script Date : 2013.5.31 + Script Notes : +--]] + +local NoWork = 41 + +function spawn(NPC) + AddSpawnAccess(NPC, NPC) + SetPlayerProximityFunction(NPC, 50, "SpawnAccess", "SpawnAccess") +end + +function respawn(NPC) + spawn(NPC) +end + +function casted_on(NPC, Spawn, SpellName) + if SpellName == 'collect the shard' then + AddStepProgress(Spawn, NoWork, 1, 1) + Despawn(NPC) + end +end + +function SpawnAccess(NPC, Spawn) + if GetQuestStep(Spawn, NoWork) == 1 then + AddSpawnAccess(NPC, Spawn) + else + RemoveSpawnAccess(NPC, Spawn) + end +end \ No newline at end of file diff --git a/server/SpawnScripts/FrostfangSea/widget_kinloch_x3_orc_flame.lua b/server/SpawnScripts/FrostfangSea/widget_kinloch_x3_orc_flame.lua new file mode 100644 index 000000000..0e9ecb8da --- /dev/null +++ b/server/SpawnScripts/FrostfangSea/widget_kinloch_x3_orc_flame.lua @@ -0,0 +1,36 @@ +--[[ + Script Name : SpawnScripts/FrostfangSea/widget_kinloch_x3_orc_flame.lua + Script Purpose : for the ry'gorr torches + Script Author : theFoof + Script Date : 2013.6.15 + Script Notes : +--]] + +local GreenMystery = 67 + +function spawn(NPC) + SetRequiredQuest(NPC, GreenMystery, 1) +end + +function respawn(NPC) + spawn(NPC) +end + +function casted_on(NPC, Spawn, SpellName) + if HasItem(Spawn, 7928) then + if SpellName == 'melt the green ice' then + if GetQuestStep(Spawn, GreenMystery) == 1 then + AddStepProgress(Spawn, GreenMystery, 1, 1) + local invis_cube = GetSpawn(NPC, 4701576) + SpawnSet(invis_cube, "visual_state", "17420") + AddTimer(NPC, 30000, "RemoveGas", 1, invis_cube) + end + end + else + SendMessage(Spawn, "You must have green ice to do this!", "yellow") + end +end + +function RemoveGas(NPC, cube) + SpawnSet(cube, "visual_state", "0") +end \ No newline at end of file diff --git a/server/SpawnScripts/FrostfangSea/widget_qst_orcbane_x6_black_shard_cart.lua b/server/SpawnScripts/FrostfangSea/widget_qst_orcbane_x6_black_shard_cart.lua new file mode 100644 index 000000000..c6b5c050d --- /dev/null +++ b/server/SpawnScripts/FrostfangSea/widget_qst_orcbane_x6_black_shard_cart.lua @@ -0,0 +1,26 @@ +--[[ + Script Name : SpawnScripts/FrostfangSea/widget_qst_orcbane_x6_black_shard_cart.lua + Script Purpose : the black shard cart + Script Author : theFoof + Script Date : 2013.8.11 + Script Notes : +--]] + +local SometimesKnut = 84 + +function spawn(NPC) + SetRequiredQuest(NPC, SometimesKnut, 3) +end + +function respawn(NPC) + spawn(NPC) +end + +function casted_on(NPC, Spawn, SpellName) + if SpellName == 'break the black shard!' then + if GetQuestStep(Spawn, SometimesKnut) == 3 then + SetStepComplete(Spawn, SometimesKnut, 3) + RemoveSpawnAccess(GetSpawnByLocationID(GetZone(Spawn), 579551), Spawn) + end + end +end \ No newline at end of file diff --git a/server/SpawnScripts/FrostfangSea/widget_scourgeson_x2_orc_provisions.lua b/server/SpawnScripts/FrostfangSea/widget_scourgeson_x2_orc_provisions.lua new file mode 100644 index 000000000..4f65d1ae0 --- /dev/null +++ b/server/SpawnScripts/FrostfangSea/widget_scourgeson_x2_orc_provisions.lua @@ -0,0 +1,37 @@ +--[[ + Script Name : SpawnScripts/FrostfangSea/widget_scourgeson_x2_orc_provisions.lua + Script Purpose : for the orc provisions + Script Author : theFoof + Script Date : 2013.6.24 + Script Notes : +--]] + +local CampsideSpores = 75 + +function spawn(NPC) + SetRequiredQuest(NPC, CampsideSpores, 1) +end + +function casted_on(NPC, Spawn, SpellName) + if SpellName == "apply the crustose spores" then + if GetQuestStep(Spawn, CampsideSpores) == 1 then + AddStepProgress(Spawn, CampsideSpores, 1, 1) + local X = GetX(NPC) + local Y = GetY(NPC) + local Z = GetZ(NPC) + local zone = GetZone(NPC) + local shroom1 = SpawnMob(zone, 4700408, 1, X + math.random(-5,5), Y, Z + math.random(-5,5), math.random(0,360)) + SpawnSet(shroom1, "attackable", "0") + SpawnSet(shroom1, "show_level", "0") + AddTimer(shroom1, 25000, "Despawn") + local shroom2 = SpawnMob(zone, 4700019, 1, X + math.random(-5,5), Y, Z + math.random(-5,5), math.random(0,360)) + SpawnSet(shroom2, "attackable", "0") + SpawnSet(shroom2, "show_level", "0") + AddTimer(shroom2, 25000, "Despawn") + local orc = SpawnMob(zone, 4701172, 0, X + math.random(-10,10), Y, Z + math.random(-10,10), math.random(0,360)) + Attack(orc, Spawn) + AddSpawnAccess(shroom1, Spawn) + AddSpawnAccess(shroom2, Spawn) + end + end +end \ No newline at end of file diff --git a/server/SpawnScripts/FrostfangSea/widget_velium_barricade_01.lua b/server/SpawnScripts/FrostfangSea/widget_velium_barricade_01.lua new file mode 100644 index 000000000..0f4af711c --- /dev/null +++ b/server/SpawnScripts/FrostfangSea/widget_velium_barricade_01.lua @@ -0,0 +1,22 @@ +--[[ + Script Name : SpawnScripts/FrostfangSea/widget_velium_barricade_01.lua + Script Purpose : for the giant boulder barrier in the velinoid caves + Script Author : theFoof + Script Date : 2013.6.12 + Script Notes : +--]] + +local RyGorrOperations = 60 + +function spawn(NPC) + SetPlayerProximityFunction(NPC, 100, "SpawnAccess", "SpawnAccess") + AddSpawnAccess(NPC, NPC) +end + +function SpawnAccess(NPC, Spawn) + if not HasCompletedQuest(Spawn, RyGorrOperations) then + if GetQuestStep(Spawn, RyGorrOperations) ~= 2 and GetQuestStep(Spawn, RyGorrOperations) ~= 3 then + AddSpawnAccess(NPC, Spawn) + end + end +end \ No newline at end of file diff --git a/server/SpawnScripts/GMHall/GuideFreddums.lua b/server/SpawnScripts/GMHall/GuideFreddums.lua new file mode 100644 index 000000000..6356698c3 --- /dev/null +++ b/server/SpawnScripts/GMHall/GuideFreddums.lua @@ -0,0 +1,22 @@ +--[[ + Script Name : SpawnScripts/GMHall/GuideFreddums.lua + Script Author : TyroneSWG + Script Date : 2019.01.28 04:01:33 + Script Purpose : + : +--]] + +function spawn(NPC) + PlayAnimation(NPC, 16583) + PlayAnimation(NPC, 16863) +end + + +function hailed(NPC, Spawn) + Say(NPC, "Greetings. If you have any questions please ask!") +end + +function respawn(NPC) + +end + diff --git a/server/SpawnScripts/GMHall/TeleporterGMHall.lua b/server/SpawnScripts/GMHall/TeleporterGMHall.lua new file mode 100644 index 000000000..e6fa7b86b --- /dev/null +++ b/server/SpawnScripts/GMHall/TeleporterGMHall.lua @@ -0,0 +1,25 @@ +--[[ + Script Name : SpawnScripts/GMHall/TeleporterGMHall.lua + Script Author : TyroneSWG + Script Date : 2019.01.16 05:01:35 + Script Purpose : + : +--]] + +function spawn(NPC) + SetPlayerProximityFunction(NPC, 2, "TeleporterBackOutBound_InRange", "TeleporterOutBackBound_OutRange") +end + +function TeleporterBackOutBound_InRange(NPC, Spawn) + SetPosition(Spawn, 698.56, -33.93, 1495.80) + SendPopUpMessage(Spawn, "Taking you back...", 244, 66, 134) +end + +function TeleporterBackOutBound_OutRange(NPC, Spawn) + +end + +function respawn(NPC) + spawn(NPC) +end + diff --git a/server/SpawnScripts/GMHall/TeleporterSecretPlace.lua b/server/SpawnScripts/GMHall/TeleporterSecretPlace.lua new file mode 100644 index 000000000..d534b4286 --- /dev/null +++ b/server/SpawnScripts/GMHall/TeleporterSecretPlace.lua @@ -0,0 +1,25 @@ +--[[ + Script Name : SpawnScripts/GMHall/TeleporterSecretPlace.lua + Script Author : TyroneSWG + Script Date : 2019.01.16 01:01:32 + Script Purpose : + : +--]] + +function spawn(NPC) + SetPlayerProximityFunction(NPC, 2, "TeleporterOutBound_InRange", "TeleporterOutBound_OutRange") +end + +function TeleporterOutBound_InRange(NPC, Spawn) + SetPosition(Spawn, 569.51, 98.23, 954.06) + SendPopUpMessage(Spawn, "Whoosh!", 244, 66, 134) +end + +function TeleporterOutBound_OutRange(NPC, Spawn) + +end + +function respawn(NPC) + spawn(NPC) +end + diff --git a/server/SpawnScripts/GMHall/Toad.lua b/server/SpawnScripts/GMHall/Toad.lua new file mode 100644 index 000000000..76c380cc6 --- /dev/null +++ b/server/SpawnScripts/GMHall/Toad.lua @@ -0,0 +1,44 @@ +--[[ + Script Name : SpawnScripts/GMHall/Toad.lua + Script Author : TyroneSWG + Script Date : 2019.01.14 03:01:44 + Script Purpose : Test, can be nuked later. + : +--]] + +function spawn(NPC) + +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + local conversation = CreateConversation() + AddConversationOption(conversation, "Morph Me!", "Change") + AddConversationOption(conversation, "Revert Me!", "Revert") + AddConversationOption(conversation, "Just saying Hello!", "Hello") + StartConversation(conversation, NPC, Spawn, "Ah wise warrior. How can I assist you?") + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_1_1006.mp3", "", "wave", 0, 0, Spawn) +end + +function Change(NPC, Spawn) + FaceTarget(NPC, Spawn) + local conversation = CreateConversation() + + StartConversation(conversation, NPC, Spawn, "Watch this...") + v = math.random (200, 300) + SetIllusion(Spawn, v) + Say(NPC, "Allakhazam!") +end + +function Revert(NPC, Spawn) + ResetIllusion(Spawn) +end + +function Hello(NPC, Spawn) +Say(NPC, "Well hello.") +end + +function respawn(NPC) + +end + diff --git a/server/SpawnScripts/GMHall/TrainingDummy.lua b/server/SpawnScripts/GMHall/TrainingDummy.lua new file mode 100644 index 000000000..56609ed20 --- /dev/null +++ b/server/SpawnScripts/GMHall/TrainingDummy.lua @@ -0,0 +1,34 @@ +--[[ + Script Name : TrainingDummy.lua + Script Purpose : An unkillable spawn for you to whack on + Script Author : Jabantiz + Script Date : 7/14/2014 + Script Notes : None +--]] + +function spawn(NPC) + -- set the calls to the ai to 10 mins as there is no ai + SetBrainTick(NPC, 600000) + SetLuaBrain(NPC) + + -- give the spawn a crap load of hp so we can't one hit kill + SetHP(NPC, 1000000) +end + +function hailed(NPC, Spawn) + Say(NPC, GetHP(NPC)) +end + +function respawn(NPC) + spawn(NPC) +end + +function Think(NPC) + -- no ai so won't attack + return +end + +function healthchanged(NPC, Spawn) + -- insta heal so should be impossible to kill without the /kill command + SetHP(NPC, GetMaxHP(NPC)) +end \ No newline at end of file diff --git a/server/SpawnScripts/GMHall/Wizzy.lua b/server/SpawnScripts/GMHall/Wizzy.lua new file mode 100644 index 000000000..ebfacf5fc --- /dev/null +++ b/server/SpawnScripts/GMHall/Wizzy.lua @@ -0,0 +1,38 @@ +--[[ + Script Name : SpawnScripts/GMHall/Wizzy.lua + Script Author : TyroneSWG + Script Date : 2019.01.15 11:01:51 + Script Purpose : Dragon that mounts people. Wait a minute... + : +--]] + +local mount_favorites = { '25423', '24053', '25864', '23713', '15397', '20950', '20344', '17509' } +function spawn(NPC) + +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + local conversation = CreateConversation() + AddConversationOption(conversation, "I need a mount please!", "mountme") + AddConversationOption(conversation, "I would like to dismount", "unmountme") + StartConversation(conversation, NPC, Spawn, "Greetings.") + +end + +function mountme(NPC, Spawn) + FaceTarget(NPC, Spawn) + SendMessage(Player, "Did it work?", "red") + SetMount(Spawn, mount_favorites[ math.random( 1, #mount_favorites - 1 ) ] ) + --SetSpeed(Spawn, 100) +end + +function unmountme(NPC, Spawn) + FaceTarget(NPC, Spawn) + SetMount(Spawn, 0) + SetSpeed(Spawn, 1) +end + +function respawn(NPC) + +end \ No newline at end of file diff --git a/server/SpawnScripts/GMHall/abankvault.lua b/server/SpawnScripts/GMHall/abankvault.lua new file mode 100644 index 000000000..b372fde03 --- /dev/null +++ b/server/SpawnScripts/GMHall/abankvault.lua @@ -0,0 +1,19 @@ +--[[ + Script Name : SpawnScripts/GMHall/abankvault.lua + Script Author : TyroneSWG + Script Date : 2019.01.15 11:01:42 + Script Purpose : + : +--]] + +function spawn(Object) +end + +function hailed(Object, Spawn) + AddCoin(Spawn, 1000000) + SendMessage(Player, "You have been granted coin from the gods.", "yellow") +end + +function respawn(Object) +end + diff --git a/server/SpawnScripts/Generic/ADarkbladeAssassin.lua b/server/SpawnScripts/Generic/ADarkbladeAssassin.lua new file mode 100644 index 000000000..c10624bc6 --- /dev/null +++ b/server/SpawnScripts/Generic/ADarkbladeAssassin.lua @@ -0,0 +1,32 @@ +--[[ + Script Name : SpawnScripts/Generic/ADarkbladeAssassin.lua + Script Author : Ememjr + Script Date : 2019.10.06 04:10:59 + Script Purpose : + : +--]] + +function spawn(NPC) + +end + +function group_dead(NPC, Spawn) + local zone = GetZone(Spawn) + local Spawn2 = GetSpawnByLocationID(zone, 1586531) + Say(NPC, "group_dead triggered") + -- if not nil then first group is dead + if GetTempVariable(Spawn2,"FirstGroupDead") ~= nil then + -- spawn named here + SpawnByLocationID(zone, 1586529) + SpawnByLocationID(zone, 1586530) + elseif GetTempVariable(Spawn2,"FirstGroupDead") == nil then + -- if nil then this is first group and set to 1 + Say(Spawn, "I killed the first group") + SetTempVariable(Spawn2,"FirstGroupDead",1) + end +end +function respawn(NPC) + local zone = GetZone(NPC) + SetTempVariable(Spawn2,"FirstGroupDead", nil) +end + diff --git a/server/SpawnScripts/Generic/AMarshalMoppet.lua b/server/SpawnScripts/Generic/AMarshalMoppet.lua new file mode 100644 index 000000000..74f8cabce --- /dev/null +++ b/server/SpawnScripts/Generic/AMarshalMoppet.lua @@ -0,0 +1,36 @@ +--[[ + Script Name : SpawnScripts/Generic/AMarshalMoppet.lua + Script Author : gloat + Script Date : 2019.03.13 11:03:53 + Script Purpose : + : +--]] + +function spawn(NPC) + MoveToLocation(NPC, -136.47, -27.87, 13.31) + MoveToLocation(NPC, -120.72, -28.06, 31.08) + MoveToLocation(NPC, -91.15, -27.36, 47.19) + MoveToLocation(NPC, -75.40, -26.23, 49.19) + MoveToLocation(NPC, -55.98, -23.94, 45.09) + MoveToLocation(NPC, -46.13, -23.79, 35.59) + MoveToLocation(NPC, -31.83, -22.88, -2.92) + MoveToLocation(NPC, -28.87, -21.93, -17.82) + MoveToLocation(NPC, -40.12, -24.66, -51.76) + MoveToLocation(NPC, -79.19, -26.26, -78.91) + MoveToLocation(NPC, -93.12, -26.65, -78.88) + MoveToLocation(NPC, -121.52, -25.67, -73.38) + MoveToLocation(NPC, -152.29, -25.14, -44.26) + MoveToLocation(NPC, -148.48, -27.50, -5.96) + MoveToLocation(NPC, -142.61, -27.77, 5.95) + MoveToLocation(NPC, -139.73, -27.82, 10.20) + +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) +end + +function respawn(NPC) + +end + diff --git a/server/SpawnScripts/Generic/AlexaLockets.lua b/server/SpawnScripts/Generic/AlexaLockets.lua new file mode 100644 index 000000000..f4e5673d5 --- /dev/null +++ b/server/SpawnScripts/Generic/AlexaLockets.lua @@ -0,0 +1,62 @@ +--[[ + Script Name : SpawnScripts/Nektropos1/AlexaLockets.lua + Script Purpose : Alexa after defeating the sisters for The Everling Lockets quest + Script Author : smash + Script Date : 9/8/2016 + Script Notes : +--]] + +require "SpawnScripts/Generic/PlayerHistory" + +function spawn(NPC) +end + +function hailed(NPC, Spawn) + if GetTempVariable(NPC, "talking") ~= "true" then + StartDialogLoop(NPC, Spawn) + local player_group = GetGroup(Spawn) + if player_group ~= nil then + for k,v in ipairs(player_group) do + SetPlayerHistory(v, HISTORY.NEK_CASTLE_LIBRARY_ACCESS, 1) + end + else + SetPlayerHistory(Spawn, HISTORY.NEK_CASTLE_LIBRARY_ACCESS, 1) + end + end +end + +function StartDialogLoop(NPC, Spawn) + SetTempVariable(NPC, "talking", "true") + Say(NPC, "Wonderful you have gathered all the lockets.") + AddTimer(NPC, 3500, "Dialog2") +end + +function Dialog2(NPC) + Say(NPC, "Unfortunately I have learned that Everling has added another protection to his door.") + AddTimer(NPC, 3500, "Dialog3") +end + +function Dialog3(NPC) + Say(NPC, "He also gave his son Ollix a locket and has created a slot for that locket as well.") + AddTimer(NPC, 3500, "Dialog4") +end + +function Dialog4(NPC) + Say(NPC, "Thankfully I know the resting place of the locket, it was buried with Ollix when he died.") + AddTimer(NPC, 3500, "Dialog5") +end + +function Dialog5(NPC) + Say(NPC, "I have managed to unlock all of the doors within the castle area so you can move freely about.") + AddTimer(NPC, 3500, "Dialog6") +end + +function Dialog6(NPC) + Say(NPC, "You will need to gain access to Lord Everlings bedchamber,") + AddTimer(NPC, 3500, "Dialog7") +end + +function Dialog7(NPC) + Say(NPC, "there is a passageway behind the bookshelves within his bedchamber that leads to the castles lower levels.") + AddTimer(NPC, 5000, "Despawn") +end \ No newline at end of file diff --git a/server/SpawnScripts/Generic/AnimalTrainers.lua b/server/SpawnScripts/Generic/AnimalTrainers.lua new file mode 100644 index 000000000..ab49e3764 --- /dev/null +++ b/server/SpawnScripts/Generic/AnimalTrainers.lua @@ -0,0 +1,53 @@ +--[[ + Script Name : SpawnScripts/Generic/AnimalTrainers.lua + Script Purpose : Generic script to make animal trainers emote to their animals + Script Author : John Adams + Script Date : 2009.06.14 + Script Notes : +--]] + +function spawn(NPC) + AddTimer(NPC, 5000, "emote1") +end + +function emote1(NPC) + SpawnSet(NPC, "visual_state", "12187") + AddTimer(NPC, 5000, "Stop") + AddTimer(NPC, 30000, "emote2") +end + +function emote2(NPC) + SpawnSet(NPC, "visual_state", "11298") + AddTimer(NPC, 10000, "Stop") + AddTimer(NPC, 30000, "emote3") +end + +function emote3(NPC) + SpawnSet(NPC, "visual_state", "11150") + AddTimer(NPC, 5000, "Stop") + AddTimer(NPC, 30000, "emote4") +end + +function emote4(NPC) + SpawnSet(NPC, "visual_state", "13063") + AddTimer(NPC, 5000, "Stop") + AddTimer(NPC, 30000, "emote5") +end + +function emote5(NPC) + SpawnSet(NPC, "visual_state", "2810") + AddTimer(NPC, 5000, "Stop") + AddTimer(NPC, 30000, "emote1") +end + +function Stop(NPC) + SpawnSet(NPC, "visual_state", "0") +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) +end + +function respawn(NPC) + spawn(NPC) +end diff --git a/server/SpawnScripts/Generic/BrokentuskVoiceOvers.lua b/server/SpawnScripts/Generic/BrokentuskVoiceOvers.lua new file mode 100644 index 000000000..ee072e830 --- /dev/null +++ b/server/SpawnScripts/Generic/BrokentuskVoiceOvers.lua @@ -0,0 +1,26 @@ +--[[ + Script Name : SpawnScripts/Generic/BrokentuskVoiceOvers.lua + Script Purpose : Handles voice overs for the Brokentusk. + Script Author : Scatman + Script Date : 2009.08.20 + Script Notes : +--]] + +function generic_aggro(NPC, Spawn) + PlayFlavor(NPC, "voiceover/english/optional3/orc_brokentusk/ft/orc/orc_brokentusk_1_aggro_58aa3cd6.mp3", "Everyone, over here. Kill them and take their boots!", "", 434487644, 2328686578) +end + +function generic_healthchanged(NPC, Spawn) + PlayFlavor(NPC, "voiceover/english/optional3/orc_brokentusk/ft/orc/orc_brokentusk_1_battle_m_15e66010.mp3", "I think we should just run!", "", 1889420114, 3820789621) +end + +function generic_killed(NPC, Spawn) + PlayFlavor(NPC, "voiceover/english/optional3/orc_brokentusk/ft/orc/orc_brokentusk_1_victory_bfb0a7a3.mp3", "All of this stuff is mine!", "", 4284515986, 2571034270) +end + +function generic_death(NPC, Spawn) +end + +--[[ +PlayFlavor(NPC, "voiceover/english/optional3/orc_brokentusk/ft/orc/orc_brokentusk_1_garbled_0.mp3", "", "", 3549344355, 3906322090, Spawn) +--]] diff --git a/server/SpawnScripts/Generic/CaptianOgof.lua b/server/SpawnScripts/Generic/CaptianOgof.lua new file mode 100644 index 000000000..acef0fb7e --- /dev/null +++ b/server/SpawnScripts/Generic/CaptianOgof.lua @@ -0,0 +1,24 @@ +--[[ + Script Name : SpawnScripts/Generic/CaptianOgof.lua + Script Author : gloat + Script Date : 2019.02.03 01:02:50 + Script Purpose : + : +--]] + +require "SpawnScripts/Generic/MovementCircleSmall" +function spawn(NPC) + SpawnChooseRandomMovement(NPC) + + +end + + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) +end + +function respawn(NPC) + +end + diff --git a/server/SpawnScripts/Generic/DialogModule.lua b/server/SpawnScripts/Generic/DialogModule.lua new file mode 100644 index 000000000..ed11eeabb --- /dev/null +++ b/server/SpawnScripts/Generic/DialogModule.lua @@ -0,0 +1,256 @@ +Dialog = { } + +-- defines for the requirement types +REQ_RACE = 1 +REQ_CLASS = 2 +REQ_LEVEL = 3 +REQ_LEVEL_GREATER_OR_EQUAL = 4 +REQ_LEVEL_LESS_OR_EQUAL = 5 +REQ_QUEST_ELIGIBLE = 6 +REQ_QUEST_ON_STEP = 7 +REQ_QUEST_BEFORE_STEP = 8 +REQ_QUEST_PAST_STEP = 9 +REQ_QUEST_HAS_QUEST = 10 +REQ_QUEST_DOESNT_HAVE_QUEST = 11 +REQ_QUEST_NOT_ON_STEP = 12 +REQ_QUEST_HAS_COMPLETED_QUEST = 13 +REQ_QUEST_NOT_HAS_COMPLETED_QUEST = 14 +REQ_TEMP_VAR_NOT_SET = 15 +REQ_TEMP_VAR_SET = 16 +REQ_LUA_HISTORY_SET = 17 +REQ_LUA_HISTORY_NOT_SET = 18 +REQ_LOCATION_ID = 19 + + +-- Dialog variables +Dialog.NPC = nil +Dialog.Player = nil +Dialog.Dialog = {} + +-- private functions go at the top + +-- Checks the requirement table and returns false if the player failed a check or true if they pass ALL checks +local function CheckRequirements(reqs) + local ret = true + + -- if no requirements then return true + if reqs ~= nil then + -- loop through the requirements and check to see if the player fails them, if so set the return value + -- to false and break the loop as we don't need to check any of the other requirements + for k, v in pairs(reqs) do + if v.Type == REQ_RACE and GetRace(Dialog.Player) ~= v.Value1 then + ret = false + break + elseif v.Type == REQ_CLASS and GetClass(Dialog.Player) ~= v.Value1 then + ret = false + break + elseif v.Type == REQ_LEVEL and GetLevel(Dialog.Player) ~= v.Value1 then + ret = false + break + elseif v.Type == REQ_LEVEL_GREATER_OR_EQUAL and GetLevel(Dialog.Player) < v.Value1 then + ret = false + break + elseif v.Type == REQ_LEVEL_LESS_OR_EQUAL and GetLevel(Dialog.Player) > v.Value1 then + ret = false + break + elseif v.Type == REQ_QUEST_ELIGIBLE and not CanReceiveQuest(Dialog.Player, v.Value1) then + ret = false + break + elseif v.Type == REQ_QUEST_ON_STEP and GetQuestStep(Dialog.Player, v.Value1) ~= v.Value2 then + ret = false + break + elseif v.Type == REQ_QUEST_BEFORE_STEP and GetQuestStep(Dialog.Player, v.Value1) >= v.Value2 then + ret = false + break + elseif v.Type == REQ_QUEST_PAST_STEP and GetQuestStep(Dialog.Player, v.Value1) <= v.Value2 then + ret = false + break + elseif v.Type == REQ_QUEST_HAS_QUEST and not HasQuest(Dialog.Player, v.Value1) then + ret = false + break + elseif v.Type == REQ_QUEST_DOESNT_HAVE_QUEST and HasQuest(Dialog.Player, v.Value1) then + ret = false + break + elseif v.Type == REQ_QUEST_NOT_ON_STEP and GetQuestStep(Dialog.Player, v.Value1) == v.Value2 then + ret = false + break + elseif v.Type == REQ_QUEST_HAS_COMPLETED_QUEST and not HasCompletedQuest(Dialog.Player, v.Value1) then + ret = false + break + elseif v.Type == REQ_QUEST_NOT_HAS_COMPLETED_QUEST and HasCompletedQuest(Dialog.Player, v.Value1) then + ret = false + break + elseif v.Type == REQ_TEMP_VAR_NOT_SET and GetTempVariable(Dialog.Player, v.Value1) == v.Value2 then + ret = false + break + elseif v.Type == REQ_TEMP_VAR_SET and GetTempVariable(Dialog.Player, v.Value1) ~= v.Value2 then + ret = false + break + elseif v.Type == REQ_LUA_HISTORY_SET then + local value1, value2 = GetPlayerHistory(Dialog.Player, v.Value1) + if v.Value2 ~= value1 then + ret = false + break + elseif v.Value3 ~= nil and v.Value3 ~= value2 then + ret = false + break + end + elseif v.Type == REQ_LUA_HISTORY_NOT_SET then + local value1, value2 = GetPlayerHistory(Dialog.Player, v.Value1) + if v.Value2 == value1 then + ret = false + break + elseif v.Value3 ~= nil and v.Value3 == value2 then + ret = false + break + end + elseif v.Type == REQ_LOCATION_ID and GetSpawnLocationID(Dialog.NPC) ~= v.Value1 then + ret = false + break + end + end + end + + return ret +end + +-- Helper function to check requirements on options and actually use the option +local function PrintOptions(dlg, con) + -- loop through the options and check their requirements, if they pass add the option + for k, v in pairs(dlg.Options) do + if CheckRequirements(v.Requirements) == true then + AddConversationOption(con, v.option, v.callback) + end + end +end + +-- Actual member functions are below, these are what you call in the other scripts + +-- Set up the spawn pointers to use +function Dialog.New(NPC, Player) + Dialog.NPC = NPC + Dialog.Player = Player +end + +-- Test function, left it in for now as it may be useful but it is just a Say() +function Dialog.Test(Msg) + if Dialog.NPC ~= nil then + Say(Dialog.NPC, Msg) + end +end + +-- Add a dialog +function Dialog.AddDialog(text) + local dlg = {} + dlg.Text = text + dlg.Options = {} + dlg.Requirements = nil + dlg.VOFile = nil + dlg.VOKey1 = nil + dlg.VOKey2 = nil + dlg.Emote = nil + table.insert(Dialog.Dialog, dlg) +end + +-- Adds requirements to the last added dialog +function Dialog.AddRequirement(req_type, value1, value2, value3) + local dlg = Dialog.Dialog[#Dialog.Dialog] + if dlg.Requirements == nil then + dlg.Requirements = {} + end + local req = {} + req.Type = req_type + req.Value1 = value1 + req.Value2 = value2 + req.Value3 = value3 + table.insert(dlg.Requirements, req) +end + +-- Adds a voiceover to the last added dialog +function Dialog.AddVoiceover(file, key1, key2) + local dlg = Dialog.Dialog[#Dialog.Dialog] + dlg.VOFile = file + dlg.VOKey1 = key1 + dlg.VOKey2 = key2 +end + +-- Adds an emote to the last added dialog +function Dialog.AddEmote(emote) + local dlg = Dialog.Dialog[#Dialog.Dialog] + dlg.Emote = emote +end + +-- Adds options to the last added dialog +function Dialog.AddOption(opt, cb) + local dlg = Dialog.Dialog[#Dialog.Dialog] + local option = {} + option.option = opt + option.callback = cb + option.Requirements = nil + table.insert(dlg.Options, option) +end + +-- Adds requirements to the last added option +function Dialog.AddOptionRequirement(req_type, value1, value2, value3) + local dlg = Dialog.Dialog[#Dialog.Dialog] + local option = dlg.Options[#dlg.Options] + if option.Requirements == nil then + option.Requirements = {} + end + local req = {} + req.Type = req_type + req.Value1 = value1 + req.Value2 = value2 + req.Value3 = value3 + table.insert(option.Requirements, req) +end + +-- Actually sends the dialog to the player +function Dialog.Start() + -- if NPC or Player are nil then return out so we don't cause a null pointer error on the server + if Dialog.NPC == nil or Dialog.Player == nil then + -- would be great to print a lua error here + return + end + + -- create the conversation + local con = CreateConversation() + + -- bool to see if we found a dialog to send + local found = false + + -- loop through all the dialogs + for key, dlg in pairs(Dialog.Dialog) do + + -- Check the dialog requirements if there are any and set the found bool + if dlg.Requirements ~= nil then + found = CheckRequirements(dlg.Requirements) + else + -- no requirements for this dialog so lets use it + found = true + end + + -- if we found a dialog to use lets set up the options for it and send it + if found == true then + PrintOptions(dlg, con) + if dlg.Emote ~= nil then + if dlg.VOFile ~= nil then + PlayFlavor(Dialog.NPC, dlg.VOFile, "", dlg.Emote, dlg.VOKey1, dlg.VOKey2, Dialog.Player) + else + PlayFlavor(Dialog.NPC, "", "", dlg.Emote, 0, 0, Dialog.Player) + end + StartConversation(con, Dialog.NPC, Dialog.Player, dlg.Text) + else + StartConversation(con, Dialog.NPC, Dialog.Player, dlg.Text, dlg.VOFile, dlg.VOKey1, dlg.VOKey2) + end + + -- we sent a dialog so get out of the loop + break; + end + end + + -- clear the list to avoid duplicates + Dialog.Dialog = {} +end + +return Dialog \ No newline at end of file diff --git a/server/SpawnScripts/Generic/GearBot.lua b/server/SpawnScripts/Generic/GearBot.lua new file mode 100644 index 000000000..1fc026aa0 --- /dev/null +++ b/server/SpawnScripts/Generic/GearBot.lua @@ -0,0 +1,129 @@ +--[[ + Script Name : SpawnScripts/Generic/GearBot.lua + Script Purpose : gear bot for testers + Script Author : theFoof + Script Date : 2013.5.23 + Script Notes : +--]] +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + local class = GetClass(Spawn) + local choice = math.random(1,3) + if choice == 1 then + PlayFlavor(NPC, "voiceover/english/overlord_lucan_d_lere/fprt_west/lucan_isle_speech_6.mp3", "Go now, and begin the trials that I have set for you.", "", 1244918730, 586509135, Spawn) + elseif choice == 2 then + PlayFlavor(NPC, "voiceover/english/overlord_lucan_d_lere/fprt_west/lucan_isle_speech_4.mp3", "You show potential, but there are many who seek the auspices of Lucan, and I only have time for champions.", "", 2060818628, 3998142234, Spawn) + elseif choice == 3 then + PlayFlavor(NPC, "voiceover/english/overlord_lucan_d_lere/fprt_west/lucan_isle_speech_9.mp3", "With my guidance, you shall gain power and glory as you have never imagined, but should you turn against me, you will find that my wrath is a terrible thing ... Now go!", "", 3855854568, 2247480313, Spawn) + end + if class >= 1 and class <=10 and class ~= 6 and class ~= 7 then + if HasItem(Spawn, 137284) == false then + SendPopUpMessage(Spawn, "Check your bags", 0, 255, 255) + SummonItem(Spawn, 137284) + SummonItem(Spawn, 137285) + SummonItem(Spawn, 137286) + SummonItem(Spawn, 137287) + SummonItem(Spawn, 137288) + SummonItem(Spawn, 137289) + SummonItem(Spawn, 137290) + if class == 1 or class == 2 then + SummonItem(Spawn, 72716) + SummonItem(Spawn, 72716) + SummonItem(Spawn, 72682) + SummonItem(Spawn, 40049) + SummonItem(Spawn, 50659) + else + SummonItem(Spawn, 72712) + SummonItem(Spawn, 50659) + SummonItem(Spawn, 70283) + SummonItem(Spawn, 40049) + SummonItem(Spawn, 72682) + end + end + elseif class == 6 or class == 7 then + if HasItem(Spawn, 72707) == false then + SendPopUpMessage(Spawn, "Check your bags", 0, 255, 255) + SummonItem(Spawn, 72707) + SummonItem(Spawn, 72707) + SummonItem(Spawn, 70283) + SummonItem(Spawn, 190164) + SummonItem(Spawn, 190165) + SummonItem(Spawn, 190166) + SummonItem(Spawn, 190167) + SummonItem(Spawn, 190168) + SummonItem(Spawn, 190169) + SummonItem(Spawn, 190170) + end + elseif class == 13 or class == 14 then + if HasItem(Spawn, 137284) == false then + SendPopUpMessage(Spawn, "Check your bags", 0, 255, 255) + SummonItem(Spawn, 137284) + SummonItem(Spawn, 137285) + SummonItem(Spawn, 137286) + SummonItem(Spawn, 137287) + SummonItem(Spawn, 137288) + SummonItem(Spawn, 137289) + SummonItem(Spawn, 137290) + SummonItem(Spawn, 50119) + SummonItem(Spawn, 72734) + SummonItem(Spawn, 72713) + end + elseif class == 16 or class == 17 then + if HasItem(Spawn, 190164) == false then + SendPopUpMessage(Spawn, "Check your bags", 0, 255, 255) + SummonItem(Spawn, 190164) + SummonItem(Spawn, 190165) + SummonItem(Spawn, 190166) + SummonItem(Spawn, 190167) + SummonItem(Spawn, 190168) + SummonItem(Spawn, 190169) + SummonItem(Spawn, 190170) + SummonItem(Spawn, 50119) + SummonItem(Spawn, 72734) + SummonItem(Spawn, 72713) + end + elseif class == 19 or class == 20 then + if HasItem(Spawn, 137271) == false then + SendPopUpMessage(Spawn, "Check your bags", 0, 255, 255) + SummonItem(Spawn, 137271) + SummonItem(Spawn, 137272) + SummonItem(Spawn, 137273) + SummonItem(Spawn, 137274) + SummonItem(Spawn, 137275) + SummonItem(Spawn, 137276) + SummonItem(Spawn, 137277) + SummonItem(Spawn, 72716) + SummonItem(Spawn, 72716) + SummonItem(Spawn, 50119) + SummonItem(Spawn, 72734) + SummonItem(Spawn, 72713) + end + elseif class >= 22 and class <= 30 then + if HasItem(Spawn, 175094) == false then + SendPopUpMessage(Spawn, "Check your bags", 0, 255, 255) + SummonItem(Spawn, 175094) + SummonItem(Spawn, 175096) + SummonItem(Spawn, 175097) + SummonItem(Spawn, 175100) + SummonItem(Spawn, 175101) + SummonItem(Spawn, 175105) + SummonItem(Spawn, 175107) + SummonItem(Spawn, 175108) + SummonItem(Spawn, 70287) + end + elseif class >= 31 then + if HasItem(Spawn, 137271) == false then + SendPopUpMessage(Spawn, "Check your bags", 0, 255, 255) + SummonItem(Spawn, 137271) + SummonItem(Spawn, 137272) + SummonItem(Spawn, 137273) + SummonItem(Spawn, 137274) + SummonItem(Spawn, 137275) + SummonItem(Spawn, 137276) + SummonItem(Spawn, 137277) + SummonItem(Spawn, 40050) + SummonItem(Spawn, 72716) + SummonItem(Spawn, 72716) + end + end +end \ No newline at end of file diff --git a/server/SpawnScripts/Generic/GenericAlchemistVoiceOvers.lua b/server/SpawnScripts/Generic/GenericAlchemistVoiceOvers.lua new file mode 100644 index 000000000..2a8e3bc97 --- /dev/null +++ b/server/SpawnScripts/Generic/GenericAlchemistVoiceOvers.lua @@ -0,0 +1,133 @@ +--[[ + Script Name : SpawnScripts/Generic/GenericAlchemistVoiceOvers.lua + Script Purpose : Handles the generic hails for alchemists. + Script Author : Scatman + Script Date : 2009.10.03 + Script Notes : +--]] + +local BARBARIAN = 0 +local DARK_ELF = 1 +local DWARF = 2 +local ERUDITE = 3 +local FROGLOK = 4 +local GNOME = 5 +local HALF_ELF = 6 +local HALFLING = 7 +local HIGH_ELF = 8 +local HUMAN = 9 +local IKSAR = 10 +local KERRA = 11 +local OGRE = 12 +local RATONGA = 13 +local TROLL = 14 +local WOOD_ELF = 15 +local FAE = 16 +local ARASAI = 17 +local SARNAK = 18 + +local MALE = 1 +local FEMALE = 2 + +function GenericAlchemistHail(NPC, Spawn, Faction) + if NPC ~= nil then + local race = GetRace(NPC) + local gender = GetGender(NPC) + + if race >= 0 and race <= 18 and gender >= 1 and gender <= 2 then + if race == BARBARIAN then + if gender == MALE then + elseif gender == FEMALE then + end + elseif race == DARK_ELF then + if gender == MALE then + elseif gender == FEMALE then + end + elseif race == DWARF then + if gender == MALE then + elseif gender == FEMALE then + end + elseif race == ERUDITE then + if gender == MALE then + elseif gender == FEMALE then + end + elseif race == FROGLOK then + if gender == MALE then + elseif gender == FEMALE then + end + elseif race == GNOME then + if gender == MALE then + elseif gender == FEMALE then + end + elseif race == HALF_ELF then + if gender == MALE then + elseif gender == FEMALE then + local choice = math.random(1, 3) + if choice == 1 then + PlayFlavor(NPC, "voiceover/english/halfelf_eco_good_1/ft/service/alchemist/halfelf_alchemist_service_good_1_hail_gf_59de96bd.mp3", "What happened to the highly explosive bottle that was on my desk? Have you seen it?", "ponder", 4015034016, 224119583, Spawn) + elseif choice == 2 then + PlayFlavor(NPC, "voiceover/english/halfelf_eco_good_1/ft/service/alchemist/halfelf_alchemist_service_good_1_hail_gf_a8ed74c7.mp3", "There are no refunds for caster error at this shop! Oh ... hello you're not here about a refund.", "no", 71962485, 2424906469, Spawn) + elseif choice == 3 then + PlayFlavor(NPC, "voiceover/english/halfelf_eco_good_1/ft/service/alchemist/halfelf_alchemist_service_good_1_hail_gf_efd903ba.mp3", "Hello, adventurer! Are you looking for a specific potion or ingredient?", "agree", 2677405750, 4053615600, Spawn) + end + end + elseif race == HALFLING then + if gender == MALE then + elseif gender == FEMALE then + end + elseif race == HIGH_ELF then + if gender == MALE then + elseif gender == FEMALE then + local choice = math.random(1, 3) + if choice == 1 then + PlayFlavor(NPC, "voiceover/english/highelf_eco_good_1/ft/service/alchemist/highelf_alchemist_service_good_1_hail_gf_59de96bd.mp3", "What happened to the highly explosive bottle that was on my desk? Have you seen it?", "ponder", 276977866, 1430125901, Spawn) + elseif choice == 2 then + PlayFlavor(NPC, "voiceover/english/highelf_eco_good_1/ft/service/alchemist/highelf_alchemist_service_good_1_hail_gf_ec533e4c.mp3", "Are you wounded? I just made up a fresh batch of healing potions an hour ago.", "happy", 1236281408, 177476380, Spawn) + elseif choice == 3 then + PlayFlavor(NPC, "voiceover/english/highelf_eco_good_1/ft/service/alchemist/highelf_alchemist_service_good_1_hail_gf_efd903ba.mp3", "Hello, adventurer! Are you looking for a specific potion or ingredient?", "agree", 150025546, 682148839, Spawn) + end + end + elseif race == HUMAN then + if gender == MALE then + elseif gender == FEMALE then + end + elseif race == IKSAR then + if gender == MALE then + elseif gender == FEMALE then + end + elseif race == KERRA then + if gender == MALE then + elseif gender == FEMALE then + end + elseif race == OGRE then + if gender == MALE then + elseif gender == FEMALE then + end + elseif race == RATONGA then + if gender == MALE then + elseif gender == FEMALE then + end + elseif race == TROLL then + if gender == MALE then + elseif gender == FEMALE then + end + elseif race == WOOD_ELF then + if gender == MALE then + elseif gender == FEMALE then + end + elseif race == FAE then + if gender == MALE then + elseif gender == FEMALE then + end + elseif race == ARASAI then + if gender == MALE then + elseif gender == FEMALE then + end + elseif race == SARNAK then + if gender == MALE then + elseif gender == FEMALE then + end + end + end + end +end diff --git a/server/SpawnScripts/Generic/GenericArmorsmithVoiceOvers.lua b/server/SpawnScripts/Generic/GenericArmorsmithVoiceOvers.lua new file mode 100644 index 000000000..26b8a5e9d --- /dev/null +++ b/server/SpawnScripts/Generic/GenericArmorsmithVoiceOvers.lua @@ -0,0 +1,128 @@ +--[[ + Script Name : SpawnScripts/Generic/GenericArmorsmithVoiceOvers.lua + Script Purpose : Handles the generic hails for armorsmiths and tailors. + Script Author : Scatman + Script Date : 2009.09.15 + Script Notes : +--]] + +local BARBARIAN = 0 +local DARK_ELF = 1 +local DWARF = 2 +local ERUDITE = 3 +local FROGLOK = 4 +local GNOME = 5 +local HALF_ELF = 6 +local HALFLING = 7 +local HIGH_ELF = 8 +local HUMAN = 9 +local IKSAR = 10 +local KERRA = 11 +local OGRE = 12 +local RATONGA = 13 +local TROLL = 14 +local WOOD_ELF = 15 +local FAE = 16 +local ARASAI = 17 +local SARNAK = 18 + +local MALE = 1 +local FEMALE = 2 + +function GenericArmorsmithHail(NPC, Spawn, Faction) + if NPC ~= nil then + local race = GetRace(NPC) + local gender = GetGender(NPC) + + if race >= 0 and race <= 18 and gender >= 1 and gender <= 2 then + local file_option = math.random(1, 3) + local file_race_gender = 0 + if race == BARBARIAN then + if gender == MALE then + elseif gender == FEMALE then + end + elseif race == DARK_ELF then + if gender == MALE then + elseif gender == FEMALE then + end + elseif race == DWARF then + if gender == MALE then + elseif gender == FEMALE then + end + elseif race == ERUDITE then + if gender == MALE then + elseif gender == FEMALE then + end + elseif race == FROGLOK then + if gender == MALE then + elseif gender == FEMALE then + end + elseif race == GNOME then + if gender == MALE then + elseif gender == FEMALE then + end + elseif race == HALF_ELF then + if gender == MALE then + PlayFlavor(NPC, "", "You can never be too careful when it comes to protection. Here, try on one of these.", "agree", 0, 0, Spawn) + elseif gender == FEMALE then + end + elseif race == HALFLING then + if gender == MALE then + elseif gender == FEMALE then + local choice = math.random(1, 3) + if choice == 1 then + Say(NPC, "You can never be too careful when it comes to protecting yourself. Why not try something new?", Spawn) + elseif choice == 2 then + PlayFlavor(NPC, "", "Your garb looks a mite worn. Can I interest you in a fine new set of armor?", "", 1689589577, 4560189, Spawn) + else + PlayFlavor(NPC, "", "Hello there! Can I interest you in some of the finest merchandise this side of Norrath?", "wave", 1689589577, 4560189, Spawn) + end + end + elseif race == HIGH_ELF then + if gender == MALE then + elseif gender == FEMALE then + end + elseif race == HUMAN then + if gender == MALE then + elseif gender == FEMALE then + end + elseif race == IKSAR then + if gender == MALE then + elseif gender == FEMALE then + end + elseif race == KERRA then + if gender == MALE then + elseif gender == FEMALE then + end + elseif race == OGRE then + if gender == MALE then + elseif gender == FEMALE then + end + elseif race == RATONGA then + if gender == MALE then + elseif gender == FEMALE then + end + elseif race == TROLL then + if gender == MALE then + elseif gender == FEMALE then + end + elseif race == WOOD_ELF then + if gender == MALE then + elseif gender == FEMALE then + end + elseif race == FAE then + if gender == MALE then + elseif gender == FEMALE then + end + elseif race == ARASAI then + if gender == MALE then + elseif gender == FEMALE then + end + elseif race == SARNAK then + if gender == MALE then + elseif gender == FEMALE then + end + end + end + end +end diff --git a/server/SpawnScripts/Generic/GenericBakerVoiceOvers.lua b/server/SpawnScripts/Generic/GenericBakerVoiceOvers.lua new file mode 100644 index 000000000..7161552f4 --- /dev/null +++ b/server/SpawnScripts/Generic/GenericBakerVoiceOvers.lua @@ -0,0 +1,127 @@ +--[[ + Script Name : SpawnScripts/Generic/GenericBakerVoiceOvers.lua + Script Purpose : Handles the generic hails for bakers. + Script Author : Scatman + Script Date : 2009.09.27 + Script Notes : +--]] + +local BARBARIAN = 0 +local DARK_ELF = 1 +local DWARF = 2 +local ERUDITE = 3 +local FROGLOK = 4 +local GNOME = 5 +local HALF_ELF = 6 +local HALFLING = 7 +local HIGH_ELF = 8 +local HUMAN = 9 +local IKSAR = 10 +local KERRA = 11 +local OGRE = 12 +local RATONGA = 13 +local TROLL = 14 +local WOOD_ELF = 15 +local FAE = 16 +local ARASAI = 17 +local SARNAK = 18 + +local MALE = 1 +local FEMALE = 2 + +function GenericBakerHail(NPC, Spawn) + if NPC ~= nil then + local race = GetRace(NPC) + local gender = GetGender(NPC) + + if race >= 0 and race <= 18 and gender >= 1 and gender <= 2 then + if race == BARBARIAN then + if gender == MALE then + elseif gender == FEMALE then + end + elseif race == DARK_ELF then + if gender == MALE then + elseif gender == FEMALE then + end + elseif race == DWARF then + if gender == MALE then + elseif gender == FEMALE then + end + elseif race == ERUDITE then + if gender == MALE then + elseif gender == FEMALE then + end + elseif race == FROGLOK then + if gender == MALE then + elseif gender == FEMALE then + end + elseif race == GNOME then + if gender == MALE then + elseif gender == FEMALE then + end + elseif race == HALF_ELF then + if gender == MALE then + elseif gender == FEMALE then + end + elseif race == HALFLING then + if gender == MALE then + elseif gender == FEMALE then + local choice = math.random(1, 4) + if choice == 1 then + PlayFlavor(NPC, "voiceover/english/halfling_eco_good_1/ft/service/baker/halfling_baker_service_good_1_hail_gf_1e9a743c.mp3", "Please mind the plates, they're very hot.", "scold", 1075794847, 2019936086, Spawn) + elseif choice == 2 then + PlayFlavor(NPC, "voiceover/english/halfling_eco_good_1/ft/service/baker/halfling_baker_service_good_1_hail_gf_3d1ca473.mp3", "Tell me, do you prefer Halfling or Elven cuisine? I myself have a hard time deciding between the two.", "confused", 1646021457, 4149179615, Spawn) + elseif choice == 3 then + PlayFlavor(NPC, "voiceover/english/halfling_eco_good_1/ft/service/baker/halfling_baker_service_good_1_hail_gf_9db280de.mp3", "I love the smell of fresh bread in the oven!", "sigh", 1048257184, 2248522628, Spawn) + elseif choice == 4 then + PlayFlavor(NPC, "voiceover/english/halfling_eco_good_1/ft/service/baker/halfling_baker_service_good_1_hail_gf_cca9cdef.mp3", "Welcome friend, welcome. I hope you brought your appetite with you!", "wink", 22116398, 594684199, Spawn) + end + end + elseif race == HIGH_ELF then + if gender == MALE then + elseif gender == FEMALE then + end + elseif race == HUMAN then + if gender == MALE then + elseif gender == FEMALE then + end + elseif race == IKSAR then + if gender == MALE then + elseif gender == FEMALE then + end + elseif race == KERRA then + if gender == MALE then + elseif gender == FEMALE then + end + elseif race == OGRE then + if gender == MALE then + elseif gender == FEMALE then + end + elseif race == RATONGA then + if gender == MALE then + elseif gender == FEMALE then + end + elseif race == TROLL then + if gender == MALE then + elseif gender == FEMALE then + end + elseif race == WOOD_ELF then + if gender == MALE then + elseif gender == FEMALE then + end + elseif race == FAE then + if gender == MALE then + elseif gender == FEMALE then + end + elseif race == ARASAI then + if gender == MALE then + elseif gender == FEMALE then + end + elseif race == SARNAK then + if gender == MALE then + elseif gender == FEMALE then + end + end + end + end +end diff --git a/server/SpawnScripts/Generic/GenericBartenderVoiceOvers.lua b/server/SpawnScripts/Generic/GenericBartenderVoiceOvers.lua new file mode 100644 index 000000000..b75d7dddd --- /dev/null +++ b/server/SpawnScripts/Generic/GenericBartenderVoiceOvers.lua @@ -0,0 +1,125 @@ +--[[ + cript Name : SpawnScripts/Generic/GenericBartenderVoiceOvers.lua + Script Purpose : Handles the generic hails for bartenders. + Script Author : Scatman + Script Date : 2009.10.03 + Script Notes : +--]] + +local BARBARIAN = 0 +local DARK_ELF = 1 +local DWARF = 2 +local ERUDITE = 3 +local FROGLOK = 4 +local GNOME = 5 +local HALF_ELF = 6 +local HALFLING = 7 +local HIGH_ELF = 8 +local HUMAN = 9 +local IKSAR = 10 +local KERRA = 11 +local OGRE = 12 +local RATONGA = 13 +local TROLL = 14 +local WOOD_ELF = 15 +local FAE = 16 +local ARASAI = 17 +local SARNAK = 18 + +local MALE = 1 +local FEMALE = 2 + +function GenericBartenderHail(NPC, Spawn, faction) + if NPC ~= nil then + local race = GetRace(NPC) + local gender = GetGender(NPC) + + if race >= 0 and race <= 18 and gender >= 1 and gender <= 2 then + if race == BARBARIAN then + if gender == MALE then + elseif gender == FEMALE then + end + elseif race == DARK_ELF then + if gender == MALE then + elseif gender == FEMALE then + end + elseif race == DWARF then + if gender == MALE then + elseif gender == FEMALE then + end + elseif race == ERUDITE then + if gender == MALE then + elseif gender == FEMALE then + end + elseif race == FROGLOK then + if gender == MALE then + elseif gender == FEMALE then + local choice = math.random(1, 3) + if choice == 1 then + PlayFlavor(NPC, "voiceover/english/froglok_eco_good_1/ft/service/bartender/froglok_bartender_service_good_1_hail_gf_41d55b0d.mp3", "The best part about this job is all the extra coin I get.", "", 2888286231, 967545209, Spawn) + elseif choice == 2 then + PlayFlavor(NPC, "voiceover/english/froglok_eco_good_1/ft/service/bartender/froglok_bartender_service_good_1_hail_gf_ce1f039f.mp3", "Might I interest you in some meat and cheese to go with that tall glass of ale?", "", 2337190060, 175840912, Spawn) + elseif choice == 3 then + PlayFlavor(NPC, "voiceover/english/froglok_eco_good_1/ft/service/bartender/froglok_bartender_service_good_1_hail_gf_ce733912.mp3", "I bet you have some stories, eh? Adventuring must be an exciting life!", "", 1840731743, 2065794369, Spawn) + end + end + elseif race == GNOME then + if gender == MALE then + elseif gender == FEMALE then + end + elseif race == HALF_ELF then + if gender == MALE then + elseif gender == FEMALE then + end + elseif race == HALFLING then + if gender == MALE then + elseif gender == FEMALE then + end + elseif race == HIGH_ELF then + if gender == MALE then + elseif gender == FEMALE then + end + elseif race == HUMAN then + if gender == MALE then + elseif gender == FEMALE then + end + elseif race == IKSAR then + if gender == MALE then + elseif gender == FEMALE then + end + elseif race == KERRA then + if gender == MALE then + elseif gender == FEMALE then + end + elseif race == OGRE then + if gender == MALE then + elseif gender == FEMALE then + end + elseif race == RATONGA then + if gender == MALE then + elseif gender == FEMALE then + end + elseif race == TROLL then + if gender == MALE then + elseif gender == FEMALE then + end + elseif race == WOOD_ELF then + if gender == MALE then + elseif gender == FEMALE then + end + elseif race == FAE then + if gender == MALE then + elseif gender == FEMALE then + end + elseif race == ARASAI then + if gender == MALE then + elseif gender == FEMALE then + end + elseif race == SARNAK then + if gender == MALE then + elseif gender == FEMALE then + end + end + end + end +end diff --git a/server/SpawnScripts/Generic/GenericCraftingTrainer.lua b/server/SpawnScripts/Generic/GenericCraftingTrainer.lua new file mode 100644 index 000000000..7bc0f6d66 --- /dev/null +++ b/server/SpawnScripts/Generic/GenericCraftingTrainer.lua @@ -0,0 +1,212 @@ +--[[ + Script Name : SpawnScripts/Generic/GenericCraftingTrainer.lua + Script Purpose : + Script Author : theFoof (SendSecondaryChoice() by Jabantiz) + Script Date : 2013.10.20 + Script Notes : This script handles crafting trainers +--]] + +local artisan_ess_1 = 31371 +local artisan_ess_2 = 31373 +local ARTISAN = 1 +local CRAFTSMAN = 2 +local PROVISIONER = 3 +local WOODWORKER = 4 +local CARPENTER = 5 +local OUTFITTER = 6 +local ARMORER = 7 +local WEAPONSMITH = 8 +local TAILOR = 9 +local SCHOLAR = 10 +local JEWELER = 11 +local SAGE = 12 +local ALCHEMIST = 13 + +function spawn(NPC) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + CraftingTrainerHail(NPC, Spawn) +end + +function CraftingTrainerHail(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + if GetTradeskillLevel(Spawn) < 9 then + if not HasBooks(Spawn) or GetTradeskillLevel(Spawn) < 2 then + AddConversationOption(conversation, "Yes, please teach me.", "GiveBooks") + AddConversationOption(conversation, "No, not at the moment.", "Chat1") + StartConversation(conversation, NPC, Spawn, "You show interest in the crafting trade. Good. We can always use talented artisans. I can help you get started. Would you be interested?") + else + Chat2(NPC, Spawn) + end + elseif GetTradeskillLevel(Spawn) == 9 then + Chat4(NPC, Spawn) + elseif GetTradeskillLevel(Spawn) == 19 then + Chat5(NPC, Spawn) + elseif GetTradeskillLevel(Spawn) < 20 then + Chat2(NPC, Spawn) + else + PlayFlavor(NPC, "", "You have learned everything I have to teach. You are free to use our crafting facilities to hone your skills and master your craft.", "hello", 0, 0, Spawn) + end +end + + +function HasBooks(Spawn) + local has_books = true + + --check if the player has certain recipe books + if not HasRecipeBook(Spawn, artisan_ess_1) and not HasItem(Spawn, artisan_ess_1, 1) then + has_books = false + end + if not HasRecipeBook(Spawn, artisan_ess_2) and not HasItem(Spawn, artisan_ess_2, 1) then + has_books = false + end + + return has_books +end + +function GiveBooks(NPC, Spawn) + --give recipe books if not scribed and does not have + if not HasRecipeBook(Spawn, artisan_ess_1) and not HasItem(Spawn, artisan_ess_1, 1) then + SummonItem(Spawn, artisan_ess_1, 1) + end + if not HasRecipeBook(Spawn, artisan_ess_2) and not HasItem(Spawn, artisan_ess_2, 1) then + SummonItem(Spawn, artisan_ess_2, 1) + end + if GetTradeskillLevel(Spawn) < 2 then + SetTradeskillClass(Spawn, ARTISAN) + SetTradeskillLevel(Spawn, 2) + end + Chat3(NPC, Spawn) +end + +function Chat1(NPC, Spawn) + PlayFlavor(NPC, "", "Oh, well feel free to come back later whenever you'd like.", "", 1689589577, 4560189, Spawn) +end + +function Chat2(NPC, Spawn) + PlayFlavor(NPC, "", "I have nothing else to teach you for the moment. Please return to me when you have earned enough experience to choose your profession.", "", 1689589577, 4560189, Spawn) +end + +function Chat3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "I will start on that now.") + StartConversation(conversation, NPC, Spawn, "There, you now have knowledge required to begin crafting. Speak to the Tradeskill Tutor for more detailed guidance on learning to craft, if you are interested in more information. Return to me when you are ready to select a crafting specialty.") +end + +function Chat4(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "My name is " .. GetName(Spawn) ..".", "SendSecondaryChoice") + AddConversationOption(conversation, "No thank you, I'll come back later.") + StartConversation(conversation, NPC, Spawn, "I'm glad you have come back for more training, it looks like you've learned quite a bit in a very short time. I can certify you in your chosen trade class. Before I begin your paperwork, I'll need your name.") +end + +function Chat5(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "My name is " .. GetName(Spawn) .. ".", "Send" .. GetTradeskillClassName(Spawn) .. "Choice") + StartConversation(conversation, NPC, Spawn, "I'm glad that you continued on as a " .. GetTradeskillClassName(Spawn) .. " and came back to advance your skills. I can certify you in your chosen trade specialty. I need your name before I can start your paperwork.") +end + +function SendSecondaryChoice(NPC, Spawn) + window = CreateOptionWindow() + AddOptionWindowOption(window, "Craftsman", "Craftsmen become carpenters, provisioners, or woodworkers. They make furniture and strong boxes, food, drink, bows, arrows, totems, wooden weapons, and wooden shields.", 1, 420, "select_craftsman") + AddOptionWindowOption(window, "Outfitter", "Outfitters become armorers, tailors, or weaponsmiths. They make plate and chainmail armor, heavy shields, cloth and leather armor, casual clothing, backpacks, hex dolls, and metal weapons.", 1, 411, "select_outfitter") + AddOptionWindowOption(window, "Scholar", "Scholars become alchemists, jewelers, and sages. They make spell and combat art upgrades for adventurers, potions, poisons, and jewelry.", 1, 396, "select_scholar") + SendOptionWindow(window, Spawn, "Select A Profession") +end + +function select_craftsman(NPC, Spawn) + SetTradeskillClass(Spawn, CRAFTSMAN) + SetTradeskillLevel(Spawn, 10) +end + +function select_outfitter(NPC, Spawn) + SetTradeskillClass(Spawn, OUTFITTER) + SetTradeskillLevel(Spawn, 10) +end + +function select_scholar(NPC, Spawn) + SetTradeskillClass(Spawn, SCHOLAR) + SetTradeskillLevel(Spawn, 10) +end + +function SendOutfitterChoice(NPC, Spawn) + window = CreateOptionWindow() + AddOptionWindowOption(window, "Armorer", "Armorers are skilled at creating plate and chainmail armor.", 2, 40, "select_armorer") + AddOptionWindowOption(window, "Weaponsmith", "Weaponsmiths specialize in making metal weapons of all damage types.", 2, 41, "select_weaponsmith") + AddOptionWindowOption(window, "Tailor", "Tailors make cloth and leather armor, casual clothing, backpacks, hex dolls, and ammo holders.", 2, 42, "select_tailor") + SendOptionWindow(window, Spawn, "Select A Class") +end + +function select_armorer(NPC, Spawn) + SetTradeskillClass(Spawn, ARMORER) + SetTradeskillLevel(Spawn, 20) +end + +function select_weaponsmith(NPC, Spawn) + SetTradeskillClass(Spawn, WEAPONSMITH) + SetTradeskillLevel(Spawn, 20) +end + +function select_tailor(NPC, Spawn) + SetTradeskillClass(Spawn, TAILOR) + SetTradeskillLevel(Spawn, 20) +end + +function SendScholarChoice(NPC, Spawn) + local window = CreateOptionWindow() + AddOptionWindowOption(window, "Sage", "Sages specialize in making spell upgrade scrolls for mages and priests.", 2, 37, "select_sage") + AddOptionWindowOption(window, "Alchemist", "Alchemists make fighter combat art upgrades, potions, and poisons.", 2, 38, "select_alchemist") + AddOptionWindowOption(window, "Jeweler", "Jewelers make upgrades for scout combat arts, as well as jewelery such as rings, earrings, necklaces, bracelets, and belts.", 2, 39, "select_jeweler") + SendOptionWindow(window, Spawn, "Select A Class") +end + +function select_sage(NPC, Spawn) + SetTradeskillClass(Spawn, SAGE) + SetTradeskillLevel(Spawn, 20) +end + +function select_alchemist(NPC, Spawn) + SetTradeskillClass(Spawn, ALCHEMIST) + SetTradeskillLevel(Spawn, 20) +end + +function select_jeweler(NPC, Spawn) + SetTradeskillClass(Spawn, JEWELER) + SetTradeskillLevel(Spawn, 20) +end + +function SendCraftsmanChoice(NPC, Spawn) + local window = CreateOptionWindow() + AddOptionWindowOption(window, "Carpenter", "Carpenters make furniture of all types, strong boxes, and a variety of sales crates.", 2, 44, "select_carpenter") + AddOptionWindowOption(window, "Provisioner", "Provisioners make food and drink that will regenerate health and power faster between battles.", 2, 43, "select_provisioner") + AddOptionWindowOption(window, "Woodworker", "Woodworkers make wooden weapons, totems, bows, arrows, and wooden shields.", 2, 45, "select_woodworker") + SendOptionWindow(window, Spawn, "Select A Class") +end + +function select_carpenter(NPC, Spawn) + SetTradeskillClass(Spawn, CARPENTER) + SetTradeskillLevel(Spawn, 20) +end + +function select_provisioner(NPC, Spawn) + SetTradeskillClass(Spawn, PROVISIONER) + SetTradeskillLevel(Spawn, 20) +end + +function select_woodworker(NPC, Spawn) + SetTradeskillClass(Spawn, WOODWORKER) + SetTradeskillLevel(Spawn, 20) +end \ No newline at end of file diff --git a/server/SpawnScripts/Generic/GenericFayfolk.lua b/server/SpawnScripts/Generic/GenericFayfolk.lua new file mode 100644 index 000000000..c1ecb5622 --- /dev/null +++ b/server/SpawnScripts/Generic/GenericFayfolk.lua @@ -0,0 +1,41 @@ +--[[ + Script Name : SpawnScripts/Generic/GenericFayfolk.lua + Script Purpose : Any spawn that speaks Fayfolk + Script Author : Scatman + Script Date : 2009.10.08 + Script Notes : +--]] + +function spawn(NPC) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) +end + +function fayfolk_healthchanged(NPC, Spawn) + --if HasLanguage(Spawn, Fayfolk) then + --else + SpeakGarbledFayfok(NPC, Spawn) + --end +end + +function death(NPC, Spawn) +end + +function SpeakGarbledFayfok(NPC, Spawn) + local choice = math.random(1, 4) + if math.random(1, 4) + if choice == 1 then + PlayFlavor(NPC, "voiceover/english/dryad_corrupted/ft/dryad/dryad_corrupted_1_garbled_e858f993.mp3", "Tawaneee follahh dilifilongia avee", "", 677789876, 1792673679, Spawn) + elseif choice == 2 then + PlayFlavor(NPC, "voiceover/english/dryad_corrupted/ft/dryad/dryad_corrupted_1_garbled_dfa9e7d9.mp3", "Amamooenoo illysavah leetah", "", 1070184369, 1800384485, Spawn) + elseif choice == 3 then + PlayFlavor(NPC, "voiceover/english/dryad_corrupted/ft/dryad/dryad_corrupted_1_garbled_29e4606e.mp3", "Peelahha misialloniassaa laliallasala", "", 4241242710, 1388449419, Spawn) + elseif choice == 4 then + PlayFlavor(NPC, "voiceover/english/dryad_corrupted/ft/dryad/dryad_corrupted_1_garbled_628bdbdb.mp3", "Meraania suvalas itresteien", "", 2333386122, 320322749, Spawn) + end +end diff --git a/server/SpawnScripts/Generic/GenericGuardVoiceOvers.lua b/server/SpawnScripts/Generic/GenericGuardVoiceOvers.lua new file mode 100644 index 000000000..a8fcbb8d0 --- /dev/null +++ b/server/SpawnScripts/Generic/GenericGuardVoiceOvers.lua @@ -0,0 +1,314 @@ +--[[ + Script Name : SpawnScripts/Generic/GenericGuardVoiceOvers.lua + Script Purpose : Handles the generic hails for guards. + Script Author : Scatman + Script Date : 2009.09.15 + Script Notes : +--]] + +local BARBARIAN = 0 +local DARK_ELF = 1 +local DWARF = 2 +local ERUDITE = 3 +local FROGLOK = 4 +local GNOME = 5 +local HALF_ELF = 6 +local HALFLING = 7 +local HIGH_ELF = 8 +local HUMAN = 9 +local IKSAR = 10 +local KERRA = 11 +local OGRE = 12 +local RATONGA = 13 +local TROLL = 14 +local WOOD_ELF = 15 +local FAE = 16 +local ARASAI = 17 +local SARNAK = 18 + +local MALE = 1 +local FEMALE = 2 + +local QEYNOS = 11 +local FREEPORT = 12 + +function GenericGuardHail(NPC, Spawn, Faction) + if NPC ~= nil then + local race = GetRace(NPC) + local gender = GetGender(NPC) + + if race >= 0 and race <= 18 and gender >= 1 and gender <= 2 then + local file_option = math.random(1, 3) + local file_race_gender = 0 + if race == BARBARIAN then + if gender == MALE then + local choice = math.random(1, 4) + if choice == 1 then + PlayFlavor(NPC, "voiceover/english/barbarian_eco_good_1/ft/service/guard/barbarian_guard_service_good_1_hail_gm_76da37c9.mp3", "I hate working this shift! If the gnolls don't attack now, I may die of boredom.", "grumble", 174236481, 4250389478, Spawn) + elseif choice == 2 then + PlayFlavor(NPC, "voiceover/english/barbarian_eco_good_1/ft/service/guard/barbarian_guard_service_good_1_hail_gm_c865a827.mp3", "Duty above all else citizen, except honor!", "scold", 3650321797, 745843450, Spawn) + elseif choice == 3 then + PlayFlavor(NPC, "voiceover/english/barbarian_eco_good_1/ft/service/guard/barbarian_guard_service_good_1_hail_gm_ebfceda5.mp3", "Greetings, citizen. I am on guard duty. Should you get into trouble, seek me out.", "attention", 2588751132, 3401521310, Spawn) + elseif choice == 4 then + PlayFlavor(NPC, "voiceover/english/barbarian_eco_good_1/ft/service/guard/barbarian_guard_service_good_1_hail_gm_ee473c11.mp3", "Good day to you, citizen. All preserve Queen Antonia.", "salute", 2268064933, 2349331472, Spawn) + end + elseif gender == FEMALE then + end + elseif race == DARK_ELF then + if gender == MALE then + local choice = math.random(1, 4) + if choice == 1 then + PlayFlavor(NPC, "voiceover/english/darkelf_eco_evil_1/ft/service/guard/darkelf_guard_service_evil_1_hail_gm_582205e1.mp3", "Do you have business with the Freeport Militia?", "glare", 3330899926, 205777100, Spawn) + elseif choice == 2 then + PlayFlavor(NPC, "voiceover/english/darkelf_eco_evil_1/ft/service/guard/darkelf_guard_service_evil_1_hail_gm_7fa14d4.mp3", "Do not challenge my authority citizen. In Freeport, the Overlord's word is law!", "scold", 3071777755, 1811086423, Spawn) + elseif choice == 3 then + PlayFlavor(NPC, "voiceover/english/darkelf_eco_evil_1/ft/service/guard/darkelf_guard_service_evil_1_hail_gm_870ae3cb.mp3", "The Overlord commands me to patrol this area, and so I must.", "tapfoot", 3455786340, 1963116786, Spawn) + elseif choice == 4 then + PlayFlavor(NPC, "voiceover/english/darkelf_eco_evil_1/ft/service/guard/darkelf_guard_service_evil_1_hail_gm_edb196f8.mp3", "All praises to the Overlord. The Militia protects loyal citizens of Freeport.", "salute_freeport", 3432620709, 3039361332, Spawn) + end + elseif gender == FEMALE then + local choice = math.random(1, 4) + if choice == 1 then + PlayFlavor(NPC, "voiceover/english/darkelf_eco_evil_1/ft/service/guard/darkelf_guard_service_evil_1_hail_gf_582205e1.mp3", "Do you have business with the Freeport Militia?", "glare", 2007336774, 276021764, Spawn) + elseif choice == 2 then + PlayFlavor(NPC, "voiceover/english/darkelf_eco_evil_1/ft/service/guard/darkelf_guard_service_evil_1_hail_gf_7fa14d4.mp3", "Do not challenge my authority citizen. In Freeport, the Overlord's word is law!", "scold", 2216401374, 2200952527, Spawn) + elseif choice == 3 then + PlayFlavor(NPC, "voiceover/english/darkelf_eco_evil_1/ft/service/guard/darkelf_guard_service_evil_1_hail_gf_e6d19328.mp3", "The Overlord commands me to work the night shift and so I must accept.", "tapfoot", 1941665390, 4180571964, Spawn) + elseif choice == 4 then + PlayFlavor(NPC, "voiceover/english/darkelf_eco_evil_1/ft/service/guard/darkelf_guard_service_evil_1_hail_gf_edb196f8.mp3", "All praises to the Overlord. The Militia protects loyal citizens of Freeport.", "salute_freeport", 1432151232, 2291117299, Spawn) + end + end + elseif race == DWARF then + if gender == MALE then + local choice = math.random(1, 4) + if choice == 1 then + PlayFlavor(NPC, "voiceover/english/dwarf_eco_good_1/ft/service/guard/dwarf_guard_service_good_1_hail_gm_76da37c9.mp3", "I hate working this shift! If the gnolls don't attack now I may die of boredom.", "grumble", 31199107, 4082603014, Spawn) + elseif choice == 2 then + PlayFlavor(NPC, "voiceover/english/dwarf_eco_good_1/ft/service/guard/dwarf_guard_service_good_1_hail_gm_c865a827.mp3", "Duty above all else citizen, except honor!", "scold", 3958491070, 1651361777, Spawn) + elseif choice == 3 then + PlayFlavor(NPC, "voiceover/english/dwarf_eco_good_1/ft/service/guard/dwarf_guard_service_good_1_hail_gm_ebfceda5.mp3", "Greetings, citizen. I am on guard duty. Should you get into trouble, seek me out.", "attention", 1717559969, 1730005307, Spawn) + elseif choice == 4 then + PlayFlavor(NPC, "voiceover/english/dwarf_eco_good_1/ft/service/guard/dwarf_guard_service_good_1_hail_gm_ee473c11.mp3", "Good day to you citizen, all preserve Queen Antonia.", "salute", 2539353309, 3288832983, Spawn) + end + elseif gender == FEMALE then + local choice = math.random(1, 4) + if choice == 1 then + PlayFlavor(NPC, "voiceover/english/dwarf_eco_good_1/ft/service/guard/dwarf_guard_service_good_1_hail_gf_c865a827.mp3", "Duty above all else citizen, except honor!", "scold", 2599283605, 3661394128, Spawn) + elseif choice == 2 then + PlayFlavor(NPC, "voiceover/english/dwarf_eco_good_1/ft/service/guard/dwarf_guard_service_good_1_hail_gf_ebfceda5.mp3", "Greetings, citizen. I am on guard duty. Should you get into trouble, seek me out.", "attention", 3116918998, 1333985272, Spawn) + elseif choice == 3 then + PlayFlavor(NPC, "voiceover/english/dwarf_eco_good_1/ft/service/guard/dwarf_guard_service_good_1_hail_gf_ed0d92f8.mp3", "I hate the night shift! If the gnolls don't attack now I may die of boredom.", "grumble", 2490266027, 3636789093, Spawn) + elseif choice == 4 then + PlayFlavor(NPC, "voiceover/english/dwarf_eco_good_1/ft/service/guard/dwarf_guard_service_good_1_hail_gf_ee473c11.mp3", "Good day to you citizen, all preserve Queen Antonia.", "salute", 3457944783, 4136040635, Spawn) + end + end + elseif race == ERUDITE then + if gender == MALE then + local choice = math.random(1, 4) + if choice == 1 then + PlayFlavor(NPC, "", "Duty above all else citizen, except honor!", "scold", 1689589577, 4560189, Spawn) + elseif choice == 2 then + PlayFlavor(NPC, "", "Good day to you citizen, all preserve Queen Antonia.", "salute", 1689589577, 4560189, Spawn) + elseif choice == 3 then + PlayFlavor(NPC, "", "Greetings, citizen. I am on guard duty. Should you get into trouble, seek me out.", "attention", 1689589577, 4560189, Spawn) + elseif choice == 4 then + PlayFlavor(NPC, "", "I hate the night shift! If the gnolls don't attack now I may die of boredom.", "grumble", 1689589577, 4560189, Spawn) + end + elseif gender == FEMALE then + local choice = math.random(1, 4) + if choice == 1 then + PlayFlavor(NPC, "", "Duty above all else citizen, except honor!", "scold", 1689589577, 4560189, Spawn) + elseif choice == 2 then + PlayFlavor(NPC, "", "Good day to you citizen, all preserve Queen Antonia.", "salute", 1689589577, 4560189, Spawn) + elseif choice == 3 then + PlayFlavor(NPC, "", "Greetings, citizen. I am on guard duty. Should you get into trouble, seek me out.", "attention", 1689589577, 4560189, Spawn) + elseif choice == 4 then + PlayFlavor(NPC, "", "I hate the night shift! If the gnolls don't attack now I may die of boredom.", "grumble", 1689589577, 4560189, Spawn) + end + end + elseif race == FROGLOK then + if gender == MALE then + elseif gender == FEMALE then + end + elseif race == GNOME then + if gender == MALE then + elseif gender == FEMALE then + end + elseif race == HALF_ELF then + if gender == MALE then + elseif gender == FEMALE then + end + elseif race == HALFLING then + if gender == MALE then + local choice = math.random(1, 10) + if choice == 1 then + PlayFlavor(NPC, "voiceover/english/halfling_eco_good_1/ft/halfling/halfling_eco_good_1_aoi_gm_89ed3363.mp3", "Wonderful, more troublesome adventurers in the city. ", "sarcasm", 3296911201, 4000062691, Spawn) + elseif choice == 2 then + PlayFlavor(NPC, "voiceover/english/halfling_eco_good_1/ft/halfling/halfling_eco_good_1_aoi_gm_fea5fead.mp3", "The world is round. It's round I say, as well it should be!", "curse", 4205711950, 2062936277, Spawn) + elseif choice == 3 then + PlayFlavor(NPC, "voiceover/english/halfling_eco_good_1/ft/halfling/halfling_eco_good_1_hail_gm_1e924418.mp3", "Hail and welcome to the city, friend!", "hello", 3400282816, 2842293637, Spawn) + elseif choice == 4 then + PlayFlavor(NPC, "voiceover/english/halfling_eco_good_1/ft/halfling/halfling_eco_good_1_hail_gm_50622dfa.mp3", "Whoa, hello there! Eager and in a hurry I see. My advice, take your time. The city isn't going anywhere.", "wave", 2627404831, 2664895493, Spawn) + elseif choice == 5 then + PlayFlavor(NPC, "voiceover/english/halfling_eco_good_1/ft/halfling/halfling_eco_good_1_hail_gm_75c0e97c.mp3", "Welcome to the city, adventurer. Be mindful of the peace and quiet. Here in Qeynos, we value our privacy.", "bow", 1955296899, 2249687997, Spawn) + elseif choice == 6 then + PlayFlavor(NPC, "voiceover/english/halfling_eco_good_1/ft/halfling/halfling_eco_good_1_hail_gm_7d33c817.mp3", "Nice weather we're having. Should make for a good harvest this season, if it holds up.", "nod", 3022454580, 2853198849, Spawn) + elseif choice == 7 then + PlayFlavor(NPC, "voiceover/english/halfling_eco_good_1/ft/halfling/halfling_eco_good_1_hail_gm_b44f103.mp3", "Ah good, another refugee in the city. I hope you're not a worthless lay about! We don't abide apathy here.", "glare", 516875735, 233361227, Spawn) + elseif choice == 8 then + PlayFlavor(NPC, "voiceover/english/halfling_eco_good_1/ft/halfling/halfling_eco_good_1_hail_gm_cf902b40.mp3", "Get on now! There's plenty of work to be done. Maybe you should lend a hand, if you feel up to it.", "stare", 1396062221, 310311489, Spawn) + elseif choice == 9 then + PlayFlavor(NPC, "voiceover/english/halfling_eco_good_1/ft/halfling/halfling_eco_good_1_hail_gm_d79063bf.mp3", "Ahhhhh, that's what I love about Qeynos. So many bakeries and so many pies!", "scheme", 894976267, 1675938925, Spawn) + elseif choice == 10 then + PlayFlavor(NPC, "voiceover/english/halfling_eco_good_1/ft/halfling/halfling_eco_good_1_hail_gm_f657192c.mp3", "Nostalgia isn't what it used to be.", "sigh", 2017572665, 1813639796, Spawn) + end + elseif gender == FEMALE then + end + elseif race == HIGH_ELF then + if gender == MALE then + local choice = math.random(1, 4) + if choice == 1 then + PlayFlavor(NPC, "voiceover/english/highelf_eco_good_1/ft/service/guard/highelf_guard_service_good_1_hail_gm_76da37c9.mp3", "I hate working this shift! If the gnolls don't attack now, I may die of boredom.", "grumble", 3586563752, 1865874525, Spawn) + elseif choice == 2 then + PlayFlavor(NPC, "voiceover/english/highelf_eco_good_1/ft/service/guard/highelf_guard_service_good_1_hail_gm_c865a827.mp3", "Duty above all else, citizen, except honor!", "scold", 739074204, 2925833259, Spawn) + elseif choice == 3 then + PlayFlavor(NPC, "voiceover/english/highelf_eco_good_1/ft/service/guard/highelf_guard_service_good_1_hail_gm_ebfceda5.mp3", "Greetings, citizen. I am on guard duty. Should you get into trouble, seek me out.", "attention", 3027655540, 4120709915, Spawn) + elseif choice == 4 then + PlayFlavor(NPC, "voiceover/english/highelf_eco_good_1/ft/service/guard/highelf_guard_service_good_1_hail_gm_ee473c11.mp3", "Good day to you, citizen. All preserve Queen Antonia.", "salute", 2088886924, 3736631596, Spawn) + end + elseif gender == FEMALE then + local choice = math.random(1, 2) + if choice == 1 then + PlayFlavor(NPC, "voiceover/english/optional2/highelf_eco_good_1/ft/service/guard/highelf_guard_service_good_1_hail_gf_9e30d7b1.mp3", "I hate the night shift! If the gnolls don't attack now, I may die of boredom.", "grumble", 1243870883, 2445109433, Spawn) + elseif choice == 2 then + PlayFlavor(NPC, "voiceover/english/optional2/highelf_eco_good_1/ft/service/guard/highelf_guard_service_good_1_hail_gf_d7fdb65.mp3", "Greetings, citizen. I am on guard duty. Should you get into trouble, seek me out.", "attention", 2772203714, 1169089481, Spawn) + end + end + elseif race == HUMAN then + if gender == MALE then + if Faction == "Evil" then + local choice = math.random(1, 4) + if choice == 1 then + PlayFlavor(NPC, "voiceover/english/human_eco_evil_1/ft/service/guard/human_guard_service_evil_1_hail_gm_582205e1.mp3", "Do you have business with the Freeport Militia?", "glare", 3265760930, 1055342916, Spawn) + elseif choice == 2 then + PlayFlavor(NPC, "voiceover/english/human_eco_evil_1/ft/service/guard/human_guard_service_evil_1_hail_gm_7fa14d4.mp3", "Do not challenge my authority citizen. In Freeport, the Overlord's word is law!", "scold", 1744928325, 2718395831, Spawn) + elseif choice == 3 then + PlayFlavor(NPC, "voiceover/english/human_eco_evil_1/ft/service/guard/human_guard_service_evil_1_hail_gm_870ae3cb.mp3", "The Overlord commands me to patrol this area, and so I must.", "tapfoot", 1281050619, 1758539799, Spawn) + elseif choice == 4 then + PlayFlavor(NPC, "voiceover/english/human_eco_evil_1/ft/service/guard/human_guard_service_evil_1_hail_gm_edb196f8.mp3", "All praises to the Overlord. The Militia protects loyal citizens of Freeport.", "salute_freeport", 1906726944, 247472694, Spawn) + end + else + local choice = math.random(1, 4) + if choice == 1 then + PlayFlavor(NPC, "voiceover/english/human_eco_good_1/ft/service/guard/human_guard_service_good_1_hail_gm_76da37c9.mp3", "I hate working this shift! If the gnolls don't attack now, I may die of boredom.", "grumble", 4099618783, 4191002419, Spawn) + elseif choice == 2 then + PlayFlavor(NPC, "voiceover/english/human_eco_good_1/ft/service/guard/human_guard_service_good_1_hail_gm_c865a827.mp3", "Duty above all else, citizen, except honor!", "scold", 4141262779, 4227030045, Spawn) + elseif choice == 3 then + PlayFlavor(NPC, "voiceover/english/human_eco_good_1/ft/service/guard/human_guard_service_good_1_hail_gm_ebfceda5.mp3", "Greetings, citizen. I am on guard duty. Should you get into trouble, seek me out.", "attention", 1945337199, 2685949436, Spawn) + elseif choice == 4 then + PlayFlavor(NPC, "voiceover/english/human_eco_good_1/ft/service/guard/human_guard_service_good_1_hail_gm_ee473c11.mp3", "Good day to you, citizen. All preserve Queen Antonia.", "salute", 2997871263, 2912813719, Spawn) + end + end + elseif gender == FEMALE then + if Faction == "Evil" then + local choice = math.random(1, 4) + if choice == 1 then + PlayFlavor(NPC, "voiceover/english/human_eco_evil_1/ft/service/guard/human_guard_service_evil_1_hail_gf_582205e1.mp3", "Do you have business with the Freeport Militia?", "glare", 2697294413, 370291658, Spawn) + elseif choice == 2 then + PlayFlavor(NPC, "voiceover/english/human_eco_evil_1/ft/service/guard/human_guard_service_evil_1_hail_gf_7fa14d4.mp3", "Do not challenge my authority citizen. In Freeport, the Overlord's word is law!", "scold", 1888277290, 873721758, Spawn) + elseif choice == 3 then + PlayFlavor(NPC, "voiceover/english/human_eco_evil_1/ft/service/guard/human_guard_service_evil_1_hail_gf_e6d19328.mp3", "The Overlord commands me to work the night shift and so I must accept.", "tapfoot", 3462302836, 3625333695, Spawn) + else + PlayFlavor(NPC, "voiceover/english/human_eco_evil_1/ft/service/guard/human_guard_service_evil_1_hail_gf_edb196f8.mp3", "All praises to the Overlord. The Militia protects loyal citizens of Freeport.", "salute_freeport", 1662524531, 242648132, Spawn) + end + else + local choice = math.random(1, 4) + if choice == 1 then + PlayFlavor(NPC, "voiceover/english/human_eco_good_1/ft/service/guard/human_guard_service_good_1_hail_gf_c865a827.mp3", "Duty above all else, citizen, except honor!", "scold", 373851625, 467562033, Spawn) + elseif choice == 2 then + PlayFlavor(NPC, "voiceover/english/human_eco_good_1/ft/service/guard/human_guard_service_good_1_hail_gf_ebfceda5.mp3", "Greetings, citizen. I am on guard duty. Should you get into trouble, seek me out.", "attention", 3448203562, 506341016, Spawn) + elseif choice == 3 then + PlayFlavor(NPC, "voiceover/english/human_eco_good_1/ft/service/guard/human_guard_service_good_1_hail_gf_ed0d92f8.mp3", "I hate the night shift! If the gnolls don't attack now, I may die of boredom.", "grumble", 1226814424, 706962620, Spawn) + elseif choice == 4 then + PlayFlavor(NPC, "voiceover/english/human_eco_good_1/ft/service/guard/human_guard_service_good_1_hail_gf_ee473c11.mp3", "Good day to you, citizen. All preserve Queen Antonia.", "salute", 1886617373, 1115286759, Spawn) + end + end + end + elseif race == IKSAR then + if gender == MALE then + elseif gender == FEMALE then + end + elseif race == KERRA then + if gender == MALE then + elseif gender == FEMALE then + end + elseif race == OGRE then + if gender == MALE then + local choice = math.random(1, 4) + if choice == 1 then + PlayFlavor(NPC, "voiceover/english/ogre_eco_evil_1/ft/service/guard/ogre_guard_service_evil_1_hail_gm_582205e1.mp3", "Do you have business with the Freeport Militia?", "glare", 423300132, 829337329, Spawn) + elseif choice == 2 then + PlayFlavor(NPC, "voiceover/english/ogre_eco_evil_1/ft/service/guard/ogre_guard_service_evil_1_hail_gm_7fa14d4.mp3", "Do not challenge my authority citizen. In Freeport, the Overlord's word is law!", "scold", 606354622, 1657703048, Spawn) + elseif choice == 3 then + PlayFlavor(NPC, "voiceover/english/ogre_eco_evil_1/ft/service/guard/ogre_guard_service_evil_1_hail_gm_870ae3cb.mp3", "The Overlord commands me to patrol this area, and so I must.", "tapfoot", 3898592844, 3023882159, Spawn) + elseif choice == 4 then + PlayFlavor(NPC, "voiceover/english/ogre_eco_evil_1/ft/service/guard/ogre_guard_service_evil_1_hail_gm_edb196f8.mp3", "All praises to the Overlord. The Militia protects loyal citizens of Freeport.", "salute_freeport", 2290537918, 776957565, Spawn) + end + elseif gender == FEMALE then + local choice = math.random(1, 3) + if choice == 1 then + PlayFlavor(NPC, "voiceover/english/ogre_eco_evil_1/ft/service/guard/ogre_guard_service_evil_1_hail_gf_7fa14d4.mp3", "Do not challenge my authority citizen. In Freeport, the Overlord's word is law!", "scold", 2981239011, 830472688, Spawn) + elseif choice == 2 then + PlayFlavor(NPC, "voiceover/english/ogre_eco_evil_1/ft/service/guard/ogre_guard_service_evil_1_hail_gf_e6d19328.mp3", "The Overlord commands me to work the night shift and so I must accept.", "tapfoot", 3190713491, 83008289, Spawn) + elseif choice == 3 then + PlayFlavor(NPC, "voiceover/english/ogre_eco_evil_1/ft/service/guard/ogre_guard_service_evil_1_hail_gf_edb196f8.mp3", "All praises to the Overlord. The Militia protects loyal citizens of Freeport.", "salute_freeport", 2650311659, 1056157406, Spawn) + end + end + elseif race == RATONGA then + if gender == MALE then + elseif gender == FEMALE then + end + elseif race == TROLL then + if gender == MALE then + elseif gender == FEMALE then + end + elseif race == WOOD_ELF then + if gender == MALE then + elseif gender == FEMALE then + end + elseif race == FAE then + if gender == MALE then + elseif gender == FEMALE then + end + elseif race == ARASAI then + if gender == MALE then + elseif gender == FEMALE then + end + elseif race == SARNAK then + if gender == MALE then + elseif gender == FEMALE then + end + end + end + end +end + +function CheckFaction(NPC, Spawn, City) + if NPC ~= nil and Spawn ~= nil and City ~= nil then + faction_amount = 0 + if City == "Qeynos" then + faction_amount = GetFactionAmount(Spawn, QEYNOS) + elseif City == "Freeport" then + faction_amount = GetFactionAmount(Spawn, FREEPORT) + end + if faction_amount >= 20000 then + FaceTarget(NPC, Spawn) + PlayFlavor(NPC, "", "", "cheer", 0, 0, Spawn) + SendMessage(Spawn, GetName(NPC) .. " cheers at you.") + elseif faction_amount <= -20000 then + --FaceTarget(NPC, Spawn) + --PlayFlavor(NPC, "", "", "cheer", 0, 0, Spawn) + SendMessage(Spawn, GetName(NPC) .. " scowls at you.") + end + end +end diff --git a/server/SpawnScripts/Generic/GenericMerchantVoiceOvers.lua b/server/SpawnScripts/Generic/GenericMerchantVoiceOvers.lua new file mode 100644 index 000000000..b46f024a6 --- /dev/null +++ b/server/SpawnScripts/Generic/GenericMerchantVoiceOvers.lua @@ -0,0 +1,619 @@ +--[[ + Script Name : SpawnScripts/Generic/GenericMerchantVoiceOvers.lua + Script Purpose : Handles the generic hails for merchants. + Script Author : Scatman (finished by theFoof) + Script Date : 2009.10.03 (2013.5.23) + Script Notes : +--]] + +local BARBARIAN = 0 +local DARK_ELF = 1 +local DWARF = 2 +local ERUDITE = 3 +local FROGLOK = 4 +local GNOME = 5 +local HALF_ELF = 6 +local HALFLING = 7 +local HIGH_ELF = 8 +local HUMAN = 9 +local IKSAR = 10 +local KERRA = 11 +local OGRE = 12 +local RATONGA = 13 +local TROLL = 14 +local WOOD_ELF = 15 +local FAE = 16 +local ARASAI = 17 +local SARNAK = 18 + +local MALE = 1 +local FEMALE = 2 + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + GenericMerchantHail(NPC, Spawn, faction) +end + +function GenericMerchantHail(NPC, Spawn, faction) + race = GetRace(NPC) + gender = GetGender(NPC) + local zone = GetZone(NPC) + if GetZoneID(zone) >= 220 and GetZoneID(zone) <= 238 then + GOOD = true + elseif GetZoneID(zone) == 207 then + GOOD = true + elseif GetZoneID(zone) >= 195 and GetZoneID(zone) <= 198 then + GOOD = true + elseif GetZoneID(zone) == 589 or GetZoneID(zone) == 660 then + GOOD = true + elseif GetZoneID(zone) == 470 then + GOOD = true + elseif GetZoneID(zone) == 45 then + NEUTRAL = true + elseif GetZoneID(zone) >= 124 and GetZoneID(zone) <= 128 then + EVIL = true + elseif GetZoneID(zone) >= 134 and GetZoneID(zone)<= 168 then + EVIL = true + end + if race >= 0 and race <= 18 and gender >= 1 and gender <= 2 then + if race == BARBARIAN then + if gender == MALE then + if EVIL then + local choice = math.random(1,4) + if choice == 1 then + PlayFlavor(NPC, "voiceover/english/barbarian_eco_evil_1/ft/service/merchant/barbarian_merchant_service_evil_1_aoi_gm_b9dbd27d.mp3", "Only traitors to the Overlord would pass up a bargain like this. You're not a traitor are you?", "scold", 235175968, 3339718033, Spawn) + elseif choice == 2 then + PlayFlavor(NPC, "voiceover/english/barbarian_eco_evil_1/ft/service/merchant/barbarian_merchant_service_evil_1_hail_gm_1a08e567.mp3", "Hello! Can I offer you one of our new lifetime extended warranties for any merchandise you purchase? ", "nod", 2645212460, 3162600369, Spawn) + elseif choice == 3 then + PlayFlavor(NPC, "voiceover/english/barbarian_eco_evil_1/ft/service/merchant/barbarian_merchant_service_evil_1_hail_gm_aff3fc07.mp3", "Are you going to buy anything today or am I just wasting my time? This isn't a museum display you know!", "glare", 2075685854, 2333149890, Spawn) + elseif choice == 4 then + PlayFlavor(NPC, "voiceover/english/barbarian_eco_evil_1/ft/service/merchant/barbarian_merchant_service_evil_1_hail_gm_f715099e.mp3", "Hello there, kind adventurer. My merchandise carries the seal of the Overlord himself! Go ahead, take a look!", "salute_freeport", 910886868, 2769739896, Spawn) + end + elseif GOOD then + end + elseif gender == FEMALE then + if GOOD then + local choice = math.random(1,5) + if choice == 1 then + PlayFlavor(NPC, "voiceover/english/optional2/barbarian_eco_good_1/ft/service/merchant/barbarian_merchant_service_good_1_aoi_gf_c5e79ff5.mp3", "Hello there! Can I interest you in some of the finest merchandise this side of Norrath?", "wave", 1536664189, 3665435010, Spawn) + elseif choice == 2 then + PlayFlavor(NPC, "voiceover/english/optional2/barbarian_eco_good_1/ft/service/merchant/barbarian_merchant_service_good_1_hail_gf_24322c5d.mp3", "Greetings, friend traveler! We have the finest supplies to fill your adventuring needs.", "smile", 3015552699, 2771723491, Spawn) + elseif choice == 3 then + PlayFlavor(NPC, "voiceover/english/optional2/barbarian_eco_good_1/ft/service/merchant/barbarian_merchant_service_good_1_hail_gf_45d92a75.mp3", "Welcome! What can I help you with?", "bow", 2063097698, 2494171847, Spawn) + elseif choice == 4 then + PlayFlavor(NPC, "voiceover/english/optional2/barbarian_eco_good_1/ft/service/merchant/barbarian_merchant_service_good_1_hail_gf_ae84abf9.mp3", "Go on, take a look at the stock. You'll never beat this price in the city. I guarantee it!", "wink", 1501437320, 1208713152, Spawn) + elseif choice == 5 then + PlayFlavor(NPC, "voiceover/english/optional2/barbarian_eco_good_1/ft/service/merchant/barbarian_merchant_service_good_1_hail_gf_e4fa2bd8.mp3", "Confound it! Where did I put that ledger? It must be around here somewhere!", "confused", 2483059399, 3985999050, Spawn) + end + elseif EVIL then + end + end + elseif race == DARK_ELF then + if gender == MALE then + local choice = math.random(1,4) + if choice == 1 then + PlayFlavor(NPC, "voiceover/english/optional2/darkelf_eco_evil_1/ft/service/merchant/darkelf_merchant_service_evil_1_aoi_gm_53388b91.mp3", "Only traitors to the Overlord would pass up a bargain like this. You're not a traitor are you?", "scold", 1403936443, 3068231605, Spawn) + elseif choice == 2 then + PlayFlavor(NPC, "voiceover/english/optional2/darkelf_eco_evil_1/ft/service/merchant/darkelf_merchant_service_evil_1_hail_gm_6ec08438.mp3", "In spite of the cost of living, it's still quite a popular item.", "ponder", 2781916825, 678640011, Spawn) + elseif choice == 3 then + PlayFlavor(NPC, "voiceover/english/optional2/darkelf_eco_evil_1/ft/service/merchant/darkelf_merchant_service_evil_1_hail_gm_aff3fc07.mp3", "Are you going to buy anything today or am I just wasting my time? This isn't a museum display you know!", "glare", 898812878, 1402234103, Spawn) + elseif choice == 4 then + PlayFlavor(NPC, "voiceover/english/optional2/darkelf_eco_evil_1/ft/service/merchant/darkelf_merchant_service_evil_1_hail_gm_f715099e.mp3", "Hello there, kind adventurer. My merchandise carries the seal of the Overlord himself! Go ahead, take a look!", "salute_freeport", 1302153135, 3653961458, Spawn) + end + elseif gender == FEMALE then + local choice = math.random(1,4) + if choice == 1 then + PlayFlavor(NPC, "voiceover/english/darkelf_eco_evil_1/ft/service/merchant/darkelf_merchant_service_evil_1_hail_gf_f715099e.mp3", "Hello there, kind adventurer. My merchandise carries the seal of the Overlord himself! Go ahead, take a look!", "salute_freeport", 3860282907, 2830883681, Spawn) + elseif choice == 2 then + PlayFlavor(NPC, "voiceover/english/darkelf_eco_evil_1/ft/service/merchant/darkelf_merchant_service_evil_1_hail_gf_d088c20d.mp3", "The stuff's over there. Just let me know if you find anything you like.", "ponder", 1457896156, 727813168, Spawn) + elseif choice == 3 then + PlayFlavor(NPC, "voiceover/english/darkelf_eco_evil_1/ft/service/merchant/darkelf_merchant_service_evil_1_aoi_gf_53388b91.mp3", "Only traitors to the Overlord would pass up a bargain like this. You're not a traitor are you?", "scold", 2250198640, 1947969981, Spawn) + elseif choice == 4 then + PlayFlavor(NPC, "voiceover/english/darkelf_eco_evil_1/ft/service/merchant/darkelf_merchant_service_evil_1_hail_gf_aff3fc07.mp3", "Are you going to buy anything today or am I just wasting my time? This isn't a museum display you know!", "glare", 1486780566, 1792397389, Spawn) + end + end + elseif race == DWARF then + if gender == MALE then + local choice = math.random(1,4) + if choice == 1 then + PlayFlavor(NPC, "voiceover/english/dwarf_eco_good_1/ft/service/merchant/dwarf_merchant_service_good_1_hail_gm_24322c5d.mp3", "Greetings, friend traveler! We have the finest supplies, right before ya, to fill your adventuring needs.", "smile", 2986424867, 2267649224, Spawn) + elseif choice == 2 then + PlayFlavor(NPC, "voiceover/english/dwarf_eco_good_1/ft/service/merchant/dwarf_merchant_service_good_1_hail_gm_45d92a75.mp3", "Welcome! What is it I can help you with?", "bow", 3654607078, 2614139251, Spawn) + elseif choice == 3 then + PlayFlavor(NPC, "voiceover/english/dwarf_eco_good_1/ft/service/merchant/dwarf_merchant_service_good_1_hail_gm_ae84abf9.mp3", "Go on, take a look at the stock. You'll never beat this price in the city. I guarantee it!", "wink", 2230797709, 3854601007, Spawn) + elseif choice == 4 then + PlayFlavor(NPC, "voiceover/english/dwarf_eco_good_1/ft/service/merchant/dwarf_merchant_service_good_1_hail_gm_e4fa2bd8.mp3", "Confound it! Where did I put that ledger? It must be around here somewhere!", "confused", 2160906698, 176729787, Spawn) + end + elseif gender == FEMALE then + local choice = math.random(1,4) + if choice == 1 then + PlayFlavor(NPC, "voiceover/english/dwarf_eco_good_1/ft/service/merchant/dwarf_merchant_service_good_1_hail_gf_24322c5d.mp3", "Greetings, friend traveler! We have the finest supplies to fill your adventuring needs.", "smile", 2158784304, 1517987989, Spawn) + elseif choice == 2 then + PlayFlavor(NPC, "voiceover/english/dwarf_eco_good_1/ft/service/merchant/dwarf_merchant_service_good_1_hail_gf_45d92a75.mp3", "Welcome! What is it I can help you with?", "bow", 578929529, 647853, Spawn) + elseif choice == 3 then + PlayFlavor(NPC, "voiceover/english/dwarf_eco_good_1/ft/service/merchant/dwarf_merchant_service_good_1_hail_gf_ae84abf9.mp3", "Go on, take a look at the stock. You'll never beat this price in the city. I guarantee it!", "wink", 2476632966, 344262300, Spawn) + elseif choice == 4 then + PlayFlavor(NPC, "voiceover/english/dwarf_eco_good_1/ft/service/merchant/dwarf_merchant_service_good_1_hail_gf_e4fa2bd8.mp3", "Confound it! Where did I put that ledger? It must be around here somewhere!", "confused", 3245529092, 259619326, Spawn) + end + end + elseif race == ERUDITE then + if gender == MALE then + if EVIL then + local choice = math.random(1,3) + if choice == 1 then + PlayFlavor(NPC, "voiceover/english/optional2/erudite_eco_evil_1/ft/service/merchant/erudite_merchant_service_evil_1_hail_gm_6ec08438.mp3", "In spite of the cost of living, it's still quite a popular item.", "ponder", 3214856518, 2753581081, Spawn) + elseif choice == 2 then + PlayFlavor(NPC, "voiceover/english/optional2/erudite_eco_evil_1/ft/service/merchant/erudite_merchant_service_evil_1_hail_gm_aff3fc07.mp3", "Are you going to buy anything today or am I just wasting my time? This isn't a museum display you know!", "glare", 3397939934, 3975525417, Spawn) + elseif choice == 3 then + PlayFlavor(NPC, "voiceover/english/optional2/erudite_eco_evil_1/ft/service/merchant/erudite_merchant_service_evil_1_hail_gm_f715099e.mp3", "Hello there, kind adventurer. My merchandise carries the seal of the Overlord himself! Go ahead, take a look!", "salute_freeport", 1834072357, 2642830337, Spawn) + end + elseif GOOD then + local choice = math.random(1,5) + if choice == 1 then + PlayFlavor(NPC, "voiceover/english/optional2/erudite_eco_good_2/ft/service/merchant/erudite_merchant_service_good_2_aoi_gm_c5e79ff5.mp3", "Hello there! Can I interest you in some of the finest merchandise this side of Norrath?", "wave", 3892898109, 888385496, Spawn) + elseif choice == 2 then + PlayFlavor(NPC, "voiceover/english/optional2/erudite_eco_good_2/ft/service/merchant/erudite_merchant_service_good_2_hail_gm_24322c5d.mp3", "Greetings, friend traveler! We have the finest supplies to fill your adventuring needs.", "smile", 857840270, 941389485, Spawn) + elseif choice == 3 then + PlayFlavor(NPC, "voiceover/english/optional2/erudite_eco_good_2/ft/service/merchant/erudite_merchant_service_good_2_hail_gm_45d92a75.mp3", "Welcome! What can I help you with?", "bow", 4271285862, 1774320762, Spawn) + elseif choice == 4 then + PlayFlavor(NPC, "voiceover/english/optional2/erudite_eco_good_2/ft/service/merchant/erudite_merchant_service_good_2_hail_gm_ae84abf9.mp3", "Go on, take a look at the stock. You'll never beat this price in the city. I guarantee it!", "wink", 2447200130, 2600666744, Spawn) + elseif choice == 5 then + PlayFlavor(NPC, "voiceover/english/optional2/erudite_eco_good_2/ft/service/merchant/erudite_merchant_service_good_2_hail_gm_e4fa2bd8.mp3", "Confound it! Where did I put that ledger? It must be around here somewhere!", "confused", 4242410919, 3368229094, Spawn) + end + end + elseif gender == FEMALE then + if EVIL then + local choice = math.random(1,3) + if choice == 1 then + PlayFlavor(NPC, "voiceover/english/erudite_eco_evil_1/ft/service/merchant/erudite_merchant_service_evil_1_hail_gf_aff3fc07.mp3", "Are you going to buy anything today or am I just wasting my time? This isn't a museum display you know!", "glare", 2944389248, 2464861027, Spawn) + elseif choice == 2 then + PlayFlavor(NPC, "voiceover/english/erudite_eco_evil_1/ft/service/merchant/erudite_merchant_service_evil_1_hail_gf_d088c20d.mp3", "The stuff's over there. Just let me know if you find anything you like.", "ponder", 3938058402, 2276035503, Spawn) + elseif choice == 3 then + PlayFlavor(NPC, "voiceover/english/erudite_eco_evil_1/ft/service/merchant/erudite_merchant_service_evil_1_hail_gf_f715099e.mp3", "Hello there, kind adventurer. My merchandise carries the seal of the Overlord himself! Go ahead, take a look!", "salute_freeport", 83870236, 433715613, Spawn) + end + elseif GOOD then + local choice = math.random(1,2) + if choice == 1 then + PlayFlavor(NPC, "voiceover/english/erudite_eco_good_1/ft/service/merchant/erudite_merchant_service_good_1_hail_gf_24322c5d.mp3", "Greetings, friend traveler! We have the finest supplies to fill your adventuring needs.", "smile", 212313057, 12730672, Spawn) + elseif choice == 2 then + PlayFlavor(NPC, "voiceover/english/erudite_eco_good_1/ft/service/merchant/erudite_merchant_service_good_1_hail_gf_ae84abf9.mp3", "Go on, take a look at the stock. You'll never beat this price in the city. I guarantee it!", "wink", 2546361989, 1647933100, Spawn) + end + end + end + elseif race == FROGLOK then + if gender == MALE then + local choice = math.random(1,4) + if choice == 1 then + PlayFlavor(NPC, "voiceover/english/froglok_eco_good_1/ft/service/merchant/froglok_merchant_service_good_1_hail_gm_24322c5d.mp3", "Greetings, friend traveler! We have the finest supplies to fill your adventuring needs.", "", 3275840542, 3533002656, Spawn) + elseif choice == 2 then + PlayFlavor(NPC, "voiceover/english/froglok_eco_good_1/ft/service/merchant/froglok_merchant_service_good_1_hail_gm_ae84abf9.mp3", "Go on take a look at the stock. You'll never beat this price in the city. I guarantee it!", "", 1103160236, 2382190453, Spawn) + elseif choice == 3 then + PlayFlavor(NPC, "voiceover/english/froglok_eco_good_1/ft/service/merchant/froglok_merchant_service_good_1_hail_gm_e4fa2bd8.mp3", "Confound it! Where did I put that ledger? It must be around here somewhere!", "", 4162169560, 3669848700, Spawn) + elseif choice == 4 then + PlayFlavor(NPC, "voiceover/english/froglok_eco_good_1/ft/service/merchant/froglok_merchant_service_good_1_hail_gm_45d92a75.mp3", "Welcome! What can I help you with?", "", 3778390452, 4026406833, Spawn) + end + elseif gender == FEMALE then + end + elseif race == GNOME then + if gender == MALE then + if EVIL then + local choice = math.random(1,4) + if choice == 1 then + PlayFlavor(NPC, "voiceover/english/gnome_eco_evil_1/ft/service/merchant/gnome_merchant_service_evil_1_aoi_gm_53388b91.mp3", "Only traitors to the Overlord would pass up a bargain like this. You're not a traitor are you?", "scold", 991835348, 673767052, Spawn) + elseif choice == 2 then + PlayFlavor(NPC, "voiceover/english/gnome_eco_evil_1/ft/service/merchant/gnome_merchant_service_evil_1_hail_gm_6ec08438.mp3", "In spite of the cost of living, it's still quite a popular item.", "ponder", 4264249232, 4201092275, Spawn) + elseif choice == 3 then + PlayFlavor(NPC, "voiceover/english/gnome_eco_evil_1/ft/service/merchant/gnome_merchant_service_evil_1_hail_gm_aff3fc07.mp3", "Are you going to buy anything today or am I just wasting my time? This isn't a museum display you know!", "glare", 1076899557, 563502184, Spawn) + elseif choice == 4 then + PlayFlavor(NPC, "voiceover/english/gnome_eco_evil_1/ft/service/merchant/gnome_merchant_service_evil_1_hail_gm_f715099e.mp3", "Hello there, kind adventurer. My merchandise carries the seal of the Overlord himself! Go ahead, take a look!", "salute_freeport", 1962442487, 899461162, Spawn) + end + elseif GOOD then + end + elseif gender == FEMALE then + if GOOD then + local choice = math.random(1,4) + if choice == 1 then + PlayFlavor(NPC, "voiceover/english/gnome_eco_good_1/ft/service/merchant/gnome_merchant_service_good_1_hail_gf_24322c5d.mp3", "Greetings, friend traveler! We have the finest supplies to fill your adventuring needs.", "smile", 3470306310, 1316518467, Spawn) + elseif choice == 2 then + PlayFlavor(NPC, "voiceover/english/gnome_eco_good_1/ft/service/merchant/gnome_merchant_service_good_1_hail_gf_e4fa2bd8.mp3", "Confound it! Where did I put that ledger? It must be around here somewhere!", "confused", 246082736, 1176624798, Spawn) + elseif choice == 3 then + PlayFlavor(NPC, "voiceover/english/gnome_eco_good_1/ft/service/merchant/gnome_merchant_service_good_1_hail_gf_ae84abf9.mp3", "Go on, take a look at the stock. You'll never beat this price in the city. I guarantee it!", "wink", 3111567662, 3548853636, Spawn) + elseif choice == 4 then + PlayFlavor(NPC, "voiceover/english/gnome_eco_good_1/ft/service/merchant/gnome_merchant_service_good_1_hail_gf_45d92a75.mp3", "Welcome! What can I help you with?", "bow", 1338601146, 1643268062, Spawn) + end + elseif EVIL then + local choice = math.random(1,4) + if choice == 1 then + PlayFlavor(NPC, "voiceover/english/gnome_eco_evil_1/ft/service/merchant/gnome_merchant_service_evil_1_aoi_gf_b9dbd27d.mp3", "Only traitors to the Overlord would pass up a bargain like this. You're not a traitor are you?", "scold", 53934921, 2834276715, Spawn) + elseif choice == 2 then + PlayFlavor(NPC, "voiceover/english/gnome_eco_evil_1/ft/service/merchant/gnome_merchant_service_evil_1_hail_gf_aff3fc07.mp3", "Are you going to buy anything today or am I just wasting my time? This isn't a museum display you know!", "glare", 2509544157, 3594072091, Spawn) + elseif choice == 3 then + PlayFlavor(NPC, "voiceover/english/gnome_eco_evil_1/ft/service/merchant/gnome_merchant_service_evil_1_hail_gf_d088c20d.mp3", "The stuff's over there. Just let me know if you find anything you like.", "ponder", 1324995812, 3252792374, Spawn) + elseif choice == 4 then + PlayFlavor(NPC, "voiceover/english/gnome_eco_evil_1/ft/service/merchant/gnome_merchant_service_evil_1_hail_gf_f715099e.mp3", "Hello there, kind adventurer. My merchandise carries the seal of the Overlord himself! Go ahead, take a look!", "salute_freeport", 3830210026, 2739804736, Spawn) + end + end + end + elseif race == HALF_ELF then + if gender == MALE then + if GOOD then + local choice = math.random(1,5) + if choice == 1 then + PlayFlavor(NPC, "voiceover/english/halfelf_eco_good_1/ft/service/merchant/halfelf_merchant_service_good_1_aoi_gm_c5e79ff5.mp3", "Hello there! Can I interest you in some of the finest merchandise this side of Norrath?", "wave", 1293853317, 115757857, Spawn) + elseif choice == 2 then + PlayFlavor(NPC, "voiceover/english/halfelf_eco_good_1/ft/service/merchant/halfelf_merchant_service_good_1_hail_gm_24322c5d.mp3", "Greetings, friend traveler! We have the finest supplies to fill your adventuring needs.", "smile", 397083190, 607860501, Spawn) + elseif choice == 3 then + PlayFlavor(NPC, "voiceover/english/halfelf_eco_good_1/ft/service/merchant/halfelf_merchant_service_good_1_hail_gm_45d92a75.mp3", "Welcome! What can I help you with?", "bow", 3839095688, 1767190740, Spawn) + elseif choice == 4 then + PlayFlavor(NPC, "voiceover/english/halfelf_eco_good_1/ft/service/merchant/halfelf_merchant_service_good_1_hail_gm_ae84abf9.mp3", "Go on, take a look at the stock. You'll never beat this price in the city. I guarantee it!", "wink", 1745995078, 3389510546, Spawn) + elseif choice == 5 then + PlayFlavor(NPC, "voiceover/english/halfelf_eco_good_1/ft/service/merchant/halfelf_merchant_service_good_1_hail_gm_e4fa2bd8.mp3", "Confound it! Where did I put that ledger? It must be around here somewhere!", "confused", 2835834469, 3534853920, Spawn) + end + elseif EVIL then + local choice = math.random(1,4) + if choice == 1 then + PlayFlavor(NPC, "voiceover/english/halfelf_eco_evil_1/ft/service/merchant/halfelf_merchant_service_evil_1_aoi_gm_53388b91.mp3", "Only traitors to the Overlord would pass up a bargain like this. You're not a traitor are you?", "scold", 139349589, 782938435, Spawn) + elseif choice == 2 then + PlayFlavor(NPC, "voiceover/english/halfelf_eco_evil_1/ft/service/merchant/halfelf_merchant_service_evil_1_hail_gm_6ec08438.mp3", "In spite of the cost of living, it's still quite a popular item.", "ponder", 1237696600, 1447318033, Spawn) + elseif choice == 3 then + PlayFlavor(NPC, "voiceover/english/halfelf_eco_evil_1/ft/service/merchant/halfelf_merchant_service_evil_1_hail_gm_aff3fc07.mp3", "Are you going to buy anything today or am I just wasting my time? This isn't a museum display you know!", "glare", 1100358951, 329280246, Spawn) + elseif choice == 4 then + PlayFlavor(NPC, "voiceover/english/halfelf_eco_evil_1/ft/service/merchant/halfelf_merchant_service_evil_1_hail_gm_f715099e.mp3", "Hello there, kind adventurer. My merchandise carries the seal of the Overlord himself! Go ahead, take a look!", "salute_freeport", 343341765, 3197108031, Spawn) + end + end + elseif gender == FEMALE then + if EVIL then + local choice = math.random(1,3) + if choice == 1 then + PlayFlavor(NPC, "voiceover/english/halfelf_eco_evil_1/ft/service/merchant/halfelf_merchant_service_evil_1_hail_gf_aff3fc07.mp3", "Are you going to buy anything today or am I just wasting my time? This isn't a museum display you know!", "glare", 175282120, 2443997290, Spawn) + elseif choice == 2 then + PlayFlavor(NPC, "voiceover/english/halfelf_eco_evil_1/ft/service/merchant/halfelf_merchant_service_evil_1_hail_gf_d088c20d.mp3", "The stuff's over there. Just let me know if you find anything you like.", "ponder", 2378717460, 740610806, Spawn) + elseif choice == 3 then + PlayFlavor(NPC, "voiceover/english/halfelf_eco_evil_1/ft/service/merchant/halfelf_merchant_service_evil_1_hail_gf_f715099e.mp3", "Hello there, kind adventurer. My merchandise carries the seal of the Overlord himself! Go ahead, take a look!", "salute_freeport", 3198881432, 747888667, Spawn) + end + elseif GOOD then + local choice = math.random(1,5) + if choice == 1 then + PlayFlavor(NPC, "voiceover/english/optional5/halfelf_eco_good_2/ft/service/merchant/halfelf_merchant_service_good_2_aoi_gf_c5e79ff5.mp3", "Hello there! Can I interest you in some of the finest merchandise this side of Norrath?", "wave", 4021870581, 3389419609, Spawn) + elseif choice == 2 then + PlayFlavor(NPC, "voiceover/english/optional5/halfelf_eco_good_2/ft/service/merchant/halfelf_merchant_service_good_2_hail_gf_24322c5d.mp3", "Greetings, friend traveler! We have the finest supplies to fill your adventuring needs.", "smile", 972343456, 3393961158, Spawn) + elseif choice == 3 then + PlayFlavor(NPC, "voiceover/english/optional5/halfelf_eco_good_2/ft/service/merchant/halfelf_merchant_service_good_2_hail_gf_45d92a75.mp3", "Welcome! What can I help you with?", "bow", 1394131243, 1936863827, Spawn) + elseif choice == 4 then + PlayFlavor(NPC, "voiceover/english/optional5/halfelf_eco_good_2/ft/service/merchant/halfelf_merchant_service_good_2_hail_gf_ae84abf9.mp3", "Go on, take a look at the stock. You'll never beat this price in the city. I guarantee it!", "wink", 2816660604, 3830827049, Spawn) + elseif choice == 5 then + PlayFlavor(NPC, "voiceover/english/optional5/halfelf_eco_good_2/ft/service/merchant/halfelf_merchant_service_good_2_hail_gf_e4fa2bd8.mp3", "Confound it! Where did I put that ledger? It must be around here somewhere!", "confused", 1252836690, 4210583240, Spawn) + end + end + end + elseif race == HALFLING then + if gender == MALE then + local choice = math.random(1,5) + if choice == 1 then + PlayFlavor(NPC, "voiceover/english/halfling_eco_good_1/ft/service/merchant/halfling_merchant_service_good_1_aoi_gm_c5e79ff5.mp3", "Hello there! Can I interest you in some of the finest merchandise this side of Norrath?", "wave", 1226726886, 4190877381, Spawn) + elseif choice == 2 then + PlayFlavor(NPC, "voiceover/english/halfling_eco_good_1/ft/service/merchant/halfling_merchant_service_good_1_hail_gm_24322c5d.mp3", "Greetings, friend traveler! We have the finest supplies to fill your adventuring needs.", "smile", 3623244639, 2766324485, Spawn) + elseif choice == 3 then + PlayFlavor(NPC, "voiceover/english/halfling_eco_good_1/ft/service/merchant/halfling_merchant_service_good_1_hail_gm_45d92a75.mp3", "Welcome! What can I help you with?", "bow", 1035878974, 1582137754, Spawn) + elseif choice == 4 then + PlayFlavor(NPC, "voiceover/english/halfling_eco_good_1/ft/service/merchant/halfling_merchant_service_good_1_hail_gm_ae84abf9.mp3", "Go on, take a look at the stock. You'll never beat this price in the city. I guarantee it!", "wink", 41344948, 2516334772, Spawn) + elseif choice == 5 then + PlayFlavor(NPC, "voiceover/english/halfling_eco_good_1/ft/service/merchant/halfling_merchant_service_good_1_hail_gm_e4fa2bd8.mp3", "Confound it! Where did I put that ledger? It must be around here somewhere!", "confused", 1122140911, 2707150069, Spawn) + end + elseif gender == FEMALE then + local choice = math.random(1,4) + if choice == 1 then + PlayFlavor(NPC, "voiceover/english/halfling_eco_good_1/ft/service/merchant/halfling_merchant_service_good_1_hail_gf_24322c5d.mp3", "Greetings, friend traveler! We have the finest supplies to fill your adventuring needs.", "smile", 970154386, 421867483, Spawn) + elseif choice == 2 then + PlayFlavor(NPC, "voiceover/english/halfling_eco_good_1/ft/service/merchant/halfling_merchant_service_good_1_hail_gf_45d92a75.mp3", "Welcome! What can I help you with?", "bow", 1783848035, 1895831070, Spawn) + elseif choice == 3 then + PlayFlavor(NPC, "voiceover/english/halfling_eco_good_1/ft/service/merchant/halfling_merchant_service_good_1_hail_gf_ae84abf9.mp3", "Go on, take a look at the stock. You'll never beat this price in the city. I guarantee it!", "wink", 2106259105, 3779666567, Spawn) + elseif choice == 4 then + PlayFlavor(NPC, "voiceover/english/halfling_eco_good_1/ft/service/merchant/halfling_merchant_service_good_1_hail_gf_e4fa2bd8.mp3", "Confound it! Where did I put that ledger? It must be around here somewhere!", "confused", 2817125385, 2108502543, Spawn) + end + end + elseif race == HIGH_ELF then + if gender == MALE then + local choice = math.random(1,4) + if choice == 1 then + PlayFlavor(NPC, "voiceover/english/highelf_eco_good_1/ft/service/merchant/highelf_merchant_service_good_1_hail_gm_24322c5d.mp3", "Greetings, friend traveler! We have the finest supplies to fill your adventuring needs.", "smile", 2148618169, 3301341439, Spawn) + elseif choice == 2 then + PlayFlavor(NPC, "voiceover/english/highelf_eco_good_1/ft/service/merchant/highelf_merchant_service_good_1_hail_gm_45d92a75.mp3", "Welcome! What can I help you with?", "bow", 3062232413, 481395622, Spawn) + elseif choice == 3 then + PlayFlavor(NPC, "voiceover/english/highelf_eco_good_1/ft/service/merchant/highelf_merchant_service_good_1_hail_gm_ae84abf9.mp3", "Go on, take a look at the stock. You'll never beat this price in the city. I guarantee it!", "wink", 1178509910, 1653421984, Spawn) + elseif choice == 4 then + PlayFlavor(NPC, "voiceover/english/highelf_eco_good_1/ft/service/merchant/highelf_merchant_service_good_1_hail_gm_e4fa2bd8.mp3", "Confound it! Where did I put that ledger? It must be around here somewhere!", "confused", 2961019025, 517163532, Spawn) + end + elseif gender == FEMALE then + local choice = math.random(1,4) + if choice == 1 then + PlayFlavor(NPC, "voiceover/english/highelf_eco_good_1/ft/service/merchant/highelf_merchant_service_good_1_hail_gf_24322c5d.mp3", "Greetings, friend traveler! We have the finest supplies to fill your adventuring needs.", "smile", 2023209747, 1019050798, Spawn) + elseif choice == 2 then + PlayFlavor(NPC, "voiceover/english/highelf_eco_good_1/ft/service/merchant/highelf_merchant_service_good_1_hail_gf_45d92a75.mp3", "Welcome! What can I help you with?", "bow", 3279499948, 2931921467, Spawn) + elseif choice == 3 then + PlayFlavor(NPC, "voiceover/english/highelf_eco_good_1/ft/service/merchant/highelf_merchant_service_good_1_hail_gf_ae84abf9.mp3", "Go on, take a look at the stock. You'll never beat this price in the city. I guarantee it!", "wink", 3725011666, 2990490195, Spawn) + elseif choice == 4 then + PlayFlavor(NPC, "voiceover/english/highelf_eco_good_1/ft/service/merchant/highelf_merchant_service_good_1_hail_gf_e4fa2bd8.mp3", "Confound it! Where did I put that ledger? It must be around here somewhere!", "confused", 1015791525, 798872771, Spawn) + end + end + elseif race == HUMAN then + if gender == MALE then + if EVIL then + local choice = math.random(1,4) + if choice == 1 then + PlayFlavor(NPC, "voiceover/english/human_eco_evil_1/ft/service/merchant/human_merchant_service_evil_1_hail_gm_6ec08438.mp3", "In spite of the cost of living, it's still quite a popular item.", "ponder", 1784666995, 3208939342, Spawn) + elseif choice == 2 then + PlayFlavor(NPC, "voiceover/english/human_eco_evil_1/ft/service/merchant/human_merchant_service_evil_1_hail_gm_7d521aa2.mp3", "Hello! Can I offer you one of our new lifetime extended warranties for any merchandise you purchase? ", "nod", 84402078, 1019490531, Spawn) + elseif choice == 3 then + PlayFlavor(NPC, "voiceover/english/human_eco_evil_1/ft/service/merchant/human_merchant_service_evil_1_hail_gm_aff3fc07.mp3", "Are you going to buy anything today or am I just wasting my time? This isn't a museum display you know!", "glare", 1896104495, 1387469911, Spawn) + elseif choice == 4 then + PlayFlavor(NPC, "voiceover/english/human_eco_evil_1/ft/service/merchant/human_merchant_service_evil_1_hail_gm_f715099e.mp3", "Hello there, kind adventurer. My merchandise carries the seal of the Overlord himself! Go ahead, take a look!", "salute_freeport", 608741053, 3167076754, Spawn) + end + elseif GOOD then + local choice = math.random(1,5) + if choice == 1 then + PlayFlavor(NPC, "voiceover/english/human_eco_good_1/ft/service/merchant/human_merchant_service_good_1_aoi_gm_c5e79ff5.mp3", "Hello there! Can I interest you in some of the finest merchandise this side of Norrath?", "wave", 1832724458, 980846932, Spawn) + elseif choice == 2 then + PlayFlavor(NPC, "voiceover/english/human_eco_good_1/ft/service/merchant/human_merchant_service_good_1_hail_gm_24322c5d.mp3", "Greetings, friend traveler! We have the finest supplies to fill your adventuring needs.", "smile", 2541554579, 2951095822, Spawn) + elseif choice == 3 then + PlayFlavor(NPC, "voiceover/english/human_eco_good_1/ft/service/merchant/human_merchant_service_good_1_hail_gm_45d92a75.mp3", "Welcome! What can I help you with?", "bow", 892528408, 239693863, Spawn) + elseif choice == 4 then + PlayFlavor(NPC, "voiceover/english/human_eco_good_1/ft/service/merchant/human_merchant_service_good_1_hail_gm_ae84abf9.mp3", "Go on, take a look at the stock. You'll never beat this price in the city. I guarantee it!", "wink", 903813734, 2512856176, Spawn) + elseif choice == 5 then + PlayFlavor(NPC, "voiceover/english/human_eco_good_1/ft/service/merchant/human_merchant_service_good_1_hail_gm_e4fa2bd8.mp3", "Confound it! Where did I put that ledger? It must be around here somewhere!", "confused", 983188064, 3043413352, Spawn) + end + end + elseif gender == FEMALE then + if EVIL then + local choice = math.random(1,5) + if choice == 1 then + PlayFlavor(NPC, "voiceover/english/human_eco_evil_1/ft/service/merchant/human_merchant_service_evil_1_aoi_gf_53388b91.mp3", "Only traitors to the Overlord would pass up a bargain like this. You're not a traitor are you?", "scold", 2632179815, 4191292693, Spawn) + elseif choice == 2 then + PlayFlavor(NPC, "voiceover/english/human_eco_evil_1/ft/service/merchant/human_merchant_service_evil_1_hail_gf_7d521aa2.mp3", "Hello! Can I offer you one of our new lifetime extended warranties for any merchandise you purchase? ", "nod", 1377121065, 1621186679, Spawn) + elseif choice == 3 then + PlayFlavor(NPC, "voiceover/english/human_eco_evil_1/ft/service/merchant/human_merchant_service_evil_1_hail_gf_aff3fc07.mp3", "Are you going to buy anything today or am I just wasting my time? This isn't a museum display you know!", "glare", 1299723818, 3048193330, Spawn) + elseif choice == 4 then + PlayFlavor(NPC, "voiceover/english/human_eco_evil_1/ft/service/merchant/human_merchant_service_evil_1_hail_gf_d088c20d.mp3", "The stuff's over there. Just let me know if you find anything you like.", "ponder", 2963689917, 1457704094, Spawn) + elseif choice == 5 then + PlayFlavor(NPC, "voiceover/english/human_eco_evil_1/ft/service/merchant/human_merchant_service_evil_1_hail_gf_f715099e.mp3", "Hello there, kind adventurer. My merchandise carries the seal of the Overlord himself! Go ahead, take a look!", "salute_freeport", 1817378690, 2459690771, Spawn) + end + elseif GOOD then + local choice = math.random(1,5) + if choice == 1 then + PlayFlavor(NPC, "voiceover/english/human_eco_good_1/ft/service/merchant/human_merchant_service_good_1_aoi_gf_c5e79ff5.mp3", "Hello there! Can I interest you in some of the finest merchandise this side of Norrath?", "wave", 489810336, 3318568259, Spawn) + elseif choice == 2 then + PlayFlavor(NPC, "voiceover/english/human_eco_good_1/ft/service/merchant/human_merchant_service_good_1_hail_gf_24322c5d.mp3", "Greetings, friend traveler! We have the finest supplies to fill your adventuring needs.", "smile", 1527285383, 3910629798, Spawn) + elseif choice == 3 then + PlayFlavor(NPC, "voiceover/english/human_eco_good_1/ft/service/merchant/human_merchant_service_good_1_hail_gf_45d92a75.mp3", "Welcome! What can I help you with?", "bow", 1381598517, 719278997, Spawn) + elseif choice == 4 then + PlayFlavor(NPC, "voiceover/english/human_eco_good_1/ft/service/merchant/human_merchant_service_good_1_hail_gf_ae84abf9.mp3", "Go on, take a look at the stock. You'll never beat this price in the city. I guarantee it!", "wink", 1667555721, 2696093362, Spawn) + elseif choice == 5 then + PlayFlavor(NPC, "voiceover/english/human_eco_good_1/ft/service/merchant/human_merchant_service_good_1_hail_gf_e4fa2bd8.mp3", "Confound it! Where did I put that ledger? It must be around here somewhere!", "confused", 2588954321, 88153469, Spawn) + end + end + end + elseif race == IKSAR then + if gender == MALE then + if EVIL then + local choice = math.random(1,5) + if choice == 1 then + PlayFlavor(NPC, "voiceover/english/iksar_eco_evil_1/ft/service/merchant/iksar_merchant_service_evil_1_aoi_gm_b9dbd27d.mp3", "Only traitors to the Overlord would pass up a bargain like this. You're not a traitor are you?", "scold", 3019943489, 1406568446, Spawn) + elseif choice == 2 then + PlayFlavor(NPC, "voiceover/english/iksar_eco_evil_1/ft/service/merchant/iksar_merchant_service_evil_1_hail_gm_1a08e567.mp3", "Hello! Can I offer you one of our new lifetime extended warranties for any merchandise you purchase? ", "nod", 1197055422, 631535840, Spawn) + elseif choice == 3 then + PlayFlavor(NPC, "voiceover/english/iksar_eco_evil_1/ft/service/merchant/iksar_merchant_service_evil_1_hail_gm_6ec08438.mp3", "In spite of the cost of living, it's still quite a popular item.", "ponder", 2596269432, 669710728, Spawn) + elseif choice == 4 then + PlayFlavor(NPC, "voiceover/english/iksar_eco_evil_1/ft/service/merchant/iksar_merchant_service_evil_1_hail_gm_aff3fc07.mp3", "Are you going to buy anything today, or am I just wasting my time? This isn't a museum display you know!", "glare", 1394544165, 1181852771, Spawn) + elseif choice == 5 then + PlayFlavor(NPC, "voiceover/english/iksar_eco_evil_1/ft/service/merchant/iksar_merchant_service_evil_1_hail_gm_f715099e.mp3", "Hello there, kind adventurer. My merchandise carries the seal of the Overlord himself! Go ahead, take a look!", "salute_freeport", 105908870, 230263487, Spawn) + end + elseif NEUTRAL then + local choice = math.random(1,7) + if choice == 1 then + PlayFlavor(NPC, "voiceover/english/optional2/iksar_eco_neutral_2/ft/service/merchant/iksar_merchant_service_neutral_2_aoi_gm_25771611.mp3", "You won't find these low, low prices in those fancy city shops.", "heckno", 2932257559, 4177037023, Spawn) + elseif choice == 2 then + PlayFlavor(NPC, "voiceover/english/optional2/iksar_eco_neutral_2/ft/service/merchant/iksar_merchant_service_neutral_2_hail_gm_1e754634.mp3", "Of course we deliver! I'll just need an address, key, and the times when you won't be home.", "scheme", 1087137768, 1465514007, Spawn) + elseif choice == 3 then + PlayFlavor(NPC, "voiceover/english/optional2/iksar_eco_neutral_2/ft/service/merchant/iksar_merchant_service_neutral_2_hail_gm_29327bd1.mp3", "I have to dump this stuff and move out tonight. Staying one step ahead of my, uh, happy customers.", "lookaway", 22249194, 1341967221, Spawn) + elseif choice == 4 then + PlayFlavor(NPC, "voiceover/english/optional2/iksar_eco_neutral_2/ft/service/merchant/iksar_merchant_service_neutral_2_hail_gm_48e9f7.mp3", "This merchandise is so hot it's still warm to the touch.", "wince", 1835763352, 2766558282, Spawn) + elseif choice == 5 then + PlayFlavor(NPC, "voiceover/english/optional2/iksar_eco_neutral_2/ft/service/merchant/iksar_merchant_service_neutral_2_hail_gm_670060d5.mp3", "Calm down, friend. Just because this looks like your stolen backpack doesn't mean it is.", "boggle", 2580247510, 1110936911, Spawn) + elseif choice == 6 then + PlayFlavor(NPC, "voiceover/english/optional2/iksar_eco_neutral_2/ft/service/merchant/iksar_merchant_service_neutral_2_hail_gm_8c371df0.mp3", "Don't let these deals slip through your fingers.", "point", 237863798, 1171878591, Spawn) + elseif choice == 7 then + PlayFlavor(NPC, "voiceover/english/optional2/iksar_eco_neutral_2/ft/service/merchant/iksar_merchant_service_neutral_2_hail_gm_f2a55e76.mp3", "With these values it's like you're the one committing highway robbery!", "smile", 1611773944, 2658422623, Spawn) + end + end + elseif gender == FEMALE then + if EVIL then + local choice = math.random(1,4) + if choice == 1 then + PlayFlavor(NPC, "voiceover/english/optional2/iksar_eco_evil_1/ft/service/merchant/iksar_merchant_service_evil_1_hail_gf_7d521aa2.mp3", "Hello! Can I offer you one of our new lifetime extended warranties for any merchandise you purchase? ", "nod", 1919752795, 2899530992, Spawn) + elseif choice == 2 then + PlayFlavor(NPC, "voiceover/english/optional2/iksar_eco_evil_1/ft/service/merchant/iksar_merchant_service_evil_1_hail_gf_aff3fc07.mp3", "Are you going to buy anything today or am I just wasting my time? This isn't a museum display you know!", "glare", 651549003, 3080028152, Spawn) + elseif choice == 3 then + PlayFlavor(NPC, "voiceover/english/optional2/iksar_eco_evil_1/ft/service/merchant/iksar_merchant_service_evil_1_hail_gf_d088c20d.mp3", "The stuff is over there. Just let me know if you find anything you like.", "ponder", 539119573, 3458318396, Spawn) + elseif choice == 4 then + PlayFlavor(NPC, "voiceover/english/optional2/iksar_eco_evil_1/ft/service/merchant/iksar_merchant_service_evil_1_hail_gf_f715099e.mp3", "Hello there, kind adventurer. My merchandise carries the seal of the Overlord himself! Go ahead, take a look!", "salute_freeport", 259001786, 3030907314, Spawn) + end + end + end + elseif race == KERRA then + if gender == MALE then + if EVIL then + local choice = math.random(1,3) + if choice == 1 then + PlayFlavor(NPC, "voiceover/english/kerran_eco_evil_1/ft/service/merchant/kerran_merchant_service_evil_1_hail_gm_6ec08438.mp3", "In spite of the cost of living, it's still quite a popular item.", "ponder", 3095675602, 2704920135, Spawn) + elseif choice == 2 then + PlayFlavor(NPC, "voiceover/english/kerran_eco_evil_1/ft/service/merchant/kerran_merchant_service_evil_1_hail_gm_aff3fc07.mp3", "Are you going to buy anything today or am I just wasting my time? This isn't a museum display you know!", "glare", 472349153, 715118612, Spawn) + elseif choice == 3 then + PlayFlavor(NPC, "voiceover/english/kerran_eco_evil_1/ft/service/merchant/kerran_merchant_service_evil_1_hail_gm_f715099e.mp3", "Hello there, kind adventurer. My merchandise carries the seal of the Overlord himself! Go ahead, take a look!", "salute_freeport", 2185780562, 2943504538, Spawn) + end + elseif GOOD then + local choice = math.random(1,5) + if choice == 1 then + PlayFlavor(NPC, "voiceover/english/kerran_eco_good_1/ft/service/merchant/kerran_merchant_service_good_1_aoi_gm_c5e79ff5.mp3", "Hello there! Can I interest you in some of the finest merchandise this side of Norrath?", "wave", 668610071, 953653133, Spawn) + elseif choice == 2 then + PlayFlavor(NPC, "voiceover/english/kerran_eco_good_1/ft/service/merchant/kerran_merchant_service_good_1_hail_gm_24322c5d.mp3", "Greetings, friend traveler! We have the finest supplies to fill your adventuring needs.", "smile", 1405292242, 1170257111, Spawn) + elseif choice == 3 then + PlayFlavor(NPC, "voiceover/english/kerran_eco_good_1/ft/service/merchant/kerran_merchant_service_good_1_hail_gm_45d92a75.mp3", "Welcome! What can I help you with?", "bow", 2595040836, 1903894062, Spawn) + elseif choice == 4 then + PlayFlavor(NPC, "voiceover/english/kerran_eco_good_1/ft/service/merchant/kerran_merchant_service_good_1_hail_gm_ae84abf9.mp3", "Go on, take a look at the stock. You'll never beat this price in the city. I guarantee it!", "wink", 2292395976, 2840814777, Spawn) + elseif choice == 5 then + PlayFlavor(NPC, "voiceover/english/kerran_eco_good_1/ft/service/merchant/kerran_merchant_service_good_1_hail_gm_e4fa2bd8.mp3", "Confound it! Where did I put that ledger? It must be around here somewhere!", "confused", 2438244582, 4033825140, Spawn) + end + end + elseif gender == FEMALE then + if EVIL then + local choice = math.random(1,3) + if choice == 1 then + PlayFlavor(NPC, "voiceover/english/kerran_eco_evil_1/ft/service/merchant/kerran_merchant_service_evil_1_hail_gf_aff3fc07.mp3", "Are you going to buy anything today or am I just wasting my time? This isn't a museum display you know!", "glare", 3601217765, 1034447902, Spawn) + elseif choice == 2 then + PlayFlavor(NPC, "voiceover/english/kerran_eco_evil_1/ft/service/merchant/kerran_merchant_service_evil_1_hail_gf_d088c20d.mp3", "The stuff's over there. Just let me know if you find anything you like.", "ponder", 1023871072, 3866773546, Spawn) + elseif choice == 3 then + PlayFlavor(NPC, "voiceover/english/kerran_eco_evil_1/ft/service/merchant/kerran_merchant_service_evil_1_hail_gf_f715099e.mp3", "Hello there, kind adventurer. My merchandise carries the seal of the Overlord himself! Go ahead, take a look!", "salute_freeport", 3574278479, 2910108828, Spawn) + end + elseif GOOD then + local choice = math.random(1,5) + if choice == 1 then + PlayFlavor(NPC, "voiceover/english/kerran_eco_good_1/ft/service/merchant/kerran_merchant_service_good_1_aoi_gf_c5e79ff5.mp3", "Hello there! Can I interest you in some of the finest merchandise this side of Norrath?", "wave", 2091371377, 2422178491, Spawn) + elseif choice == 2 then + PlayFlavor(NPC, "voiceover/english/kerran_eco_good_1/ft/service/merchant/kerran_merchant_service_good_1_hail_gf_24322c5d.mp3", "Greetings, traveler! We have the finest supplies to fill your adventuring needs.", "smile", 509171300, 3181487898, Spawn) + elseif choice == 3 then + PlayFlavor(NPC, "voiceover/english/kerran_eco_good_1/ft/service/merchant/kerran_merchant_service_good_1_hail_gf_45d92a75.mp3", "Welcome! What can I help you with?", "bow", 2213475197, 3871690614, Spawn) + elseif choice == 4 then + PlayFlavor(NPC, "voiceover/english/kerran_eco_good_1/ft/service/merchant/kerran_merchant_service_good_1_hail_gf_ae84abf9.mp3", "Go on, take a look at the stock. You'll never beat this price in the city. I guarantee it!", "wink", 3487732561, 2995138728, Spawn) + elseif choice == 5 then + PlayFlavor(NPC, "voiceover/english/kerran_eco_good_1/ft/service/merchant/kerran_merchant_service_good_1_hail_gf_e4fa2bd8.mp3", "Confound it! Where did I put that ledger? It must be around here somewhere!", "confused", 591569637, 3640467043, Spawn) + end + end + end + elseif race == OGRE then + if gender == MALE then + local choice = math.random(1,3) + if choice == 1 then + PlayFlavor(NPC, "voiceover/english/optional2/ogre_eco_evil_1/ft/service/merchant/ogre_merchant_service_evil_1_hail_gm_6ec08438.mp3", "In spite of the cost of living, it's still quite a popular item.", "ponder", 336682108, 2623574882, Spawn) + elseif choice == 2 then + PlayFlavor(NPC, "voiceover/english/optional2/ogre_eco_evil_1/ft/service/merchant/ogre_merchant_service_evil_1_hail_gm_aff3fc07.mp3", "Are you going to buy anything today or am I just wasting my time? This isn't a museum display you know!", "glare", 2869440792, 4241979369, Spawn) + elseif choice == 3 then + PlayFlavor(NPC, "voiceover/english/optional2/ogre_eco_evil_1/ft/service/merchant/ogre_merchant_service_evil_1_hail_gm_f715099e.mp3", "Hello there, kind adventurer. My merchandise carries the seal of the Overlord himself! Go ahead, take a look!", "salute_freeport", 1831712971, 1100241470, Spawn) + end + elseif gender == FEMALE then + local choice = math.random(1,3) + if choice == 1 then + PlayFlavor(NPC, "voiceover/english/ogre_eco_evil_1/ft/service/merchant/ogre_merchant_service_evil_1_hail_gf_7d521aa2.mp3", "Hello! Can I offer you one of our new lifetime extended warranties for any merchandise you purchase? ", "nod", 2018881162, 4264523804, Spawn) + elseif choice == 2 then + PlayFlavor(NPC, "voiceover/english/ogre_eco_evil_1/ft/service/merchant/ogre_merchant_service_evil_1_hail_gf_d088c20d.mp3", "The stuff's over there. Just let me know if you find anything you like.", "ponder", 2706816468, 1822386477, Spawn) + elseif choice == 3 then + PlayFlavor(NPC, "voiceover/english/ogre_eco_evil_1/ft/service/merchant/ogre_merchant_service_evil_1_hail_gf_f715099e.mp3", "Hello there, kind adventurer. My merchandise carries the seal of the Overlord himself! Go ahead, take a look!", "salute_freeport", 1555538408, 3566039549, Spawn) + end + end + elseif race == RATONGA then + if gender == MALE then + if EVIL then + local choice = math.random(1,3) + if choice == 1 then + PlayFlavor(NPC, "voiceover/english/ratonga_eco_evil_1/ft/service/merchant/ratonga_merchant_service_evil_1_hail_gm_6ec08438.mp3", "In spite of the cost of living, it's still quite a popular item.", "ponder", 1147153942, 3317877781, Spawn) + elseif choice == 2 then + PlayFlavor(NPC, "voiceover/english/ratonga_eco_evil_1/ft/service/merchant/ratonga_merchant_service_evil_1_hail_gm_aff3fc07.mp3", "Are you going to buy anything today or am I just wasting my time? This isn't a museum display you know!", "glare", 2902124396, 1772494629, Spawn) + elseif choice == 3 then + PlayFlavor(NPC, "voiceover/english/ratonga_eco_evil_1/ft/service/merchant/ratonga_merchant_service_evil_1_hail_gm_f715099e.mp3", "Hello there, kind adventurer. My merchandise carries the seal of the Overlord himself! Go ahead, take a look!", "salute_freeport", 686446071, 58743600, Spawn) + end + elseif NEUTRAL then + local choice = math.random(1,10) + if choice == 1 then + PlayFlavor(NPC, "voiceover/english/optional2/ratonga_eco_neutral_2/ft/service/merchant/ratonga_merchant_service_neutral_2_aoi_gm_25771611.mp3", "You won't find these low, low prices in those fancy city shops.", "heckno", 2149352822, 2911965725, Spawn) + elseif choice == 2 then + PlayFlavor(NPC, "voiceover/english/optional2/ratonga_eco_neutral_2/ft/service/merchant/ratonga_merchant_service_neutral_2_aoi_gm_7dc06552.mp3", "I know a discerning shopper when I sees one, and they don't come any sharper than you.", "wink", 1215863828, 1711861063, Spawn) + elseif choice == 3 then + PlayFlavor(NPC, "voiceover/english/optional2/ratonga_eco_neutral_2/ft/service/merchant/ratonga_merchant_service_neutral_2_hail_gm_1e754634.mp3", "Of course we deliver! I'll just need an address, key, and the times when you won't be home.", "scheme", 3777485038, 22256427, Spawn) + elseif choice == 4 then + PlayFlavor(NPC, "voiceover/english/optional2/ratonga_eco_neutral_2/ft/service/merchant/ratonga_merchant_service_neutral_2_hail_gm_29327bd1.mp3", "I have to dump this stuff and move out tonight. Staying one step ahead of my, uh, happy customers.", "lookaway", 3335550471, 3304609329, Spawn) + elseif choice == 5 then + PlayFlavor(NPC, "voiceover/english/optional2/ratonga_eco_neutral_2/ft/service/merchant/ratonga_merchant_service_neutral_2_hail_gm_48e9f7.mp3", "This merchandise is so hot it's still warm to the touch.", "wince", 1094492990, 4101920657, Spawn) + elseif choice == 6 then + PlayFlavor(NPC, "voiceover/english/optional2/ratonga_eco_neutral_2/ft/service/merchant/ratonga_merchant_service_neutral_2_hail_gm_589bbb80.mp3", "Satisfaction is guaranteed, with all itemses fully refundable...if you can find me again.", "thumbsup", 1525152162, 4224893930, Spawn) + elseif choice == 7 then + PlayFlavor(NPC, "voiceover/english/optional2/ratonga_eco_neutral_2/ft/service/merchant/ratonga_merchant_service_neutral_2_hail_gm_670060d5.mp3", "Calm down, friend. Just because this looks like your stolen backpack doesn't mean it is.", "boggle", 1357039195, 2717785315, Spawn) + elseif choice == 8 then + PlayFlavor(NPC, "voiceover/english/optional2/ratonga_eco_neutral_2/ft/service/merchant/ratonga_merchant_service_neutral_2_hail_gm_8c371df0.mp3", "Don't let these deals slip through your fingers.", "point", 1999119491, 784149819, Spawn) + elseif choice == 9 then + PlayFlavor(NPC, "voiceover/english/optional2/ratonga_eco_neutral_2/ft/service/merchant/ratonga_merchant_service_neutral_2_hail_gm_e4bce3ad.mp3", "Psst ... I'm cutting you in on the deal of a lifetime.", "agree", 149052487, 2149887402, Spawn) + elseif choice == 10 then + PlayFlavor(NPC, "voiceover/english/optional2/ratonga_eco_neutral_2/ft/service/merchant/ratonga_merchant_service_neutral_2_hail_gm_f2a55e76.mp3", "With these values it's like you're the one committing highway robbery!", "smile", 763799213, 3232955127, Spawn) + end + end + elseif gender == FEMALE then + local choice = math.random(1,7) + if choice == 1 then + PlayFlavor(NPC, "voiceover/english/optional2/ratonga_eco_evil_3/ft/service/merchant/ratonga_merchant_service_evil_3_aoi_gf_53388b91.mp3", "Only traitors to the Overlord would pass up a bargain like this. You're not a traitor are you?", "scold", 2288309507, 1188267472, Spawn) + elseif choice == 2 then + PlayFlavor(NPC, "voiceover/english/optional2/ratonga_eco_evil_3/ft/service/merchant/ratonga_merchant_service_evil_3_hail_gf_d088c20d.mp3", "The stuff's over there. Just let me know if you find anything you like.", "ponder", 3740786388, 4176254637, Spawn) + elseif choice == 3 then + PlayFlavor(NPC, "voiceover/english/optional2/ratonga_eco_evil_3/ft/service/merchant/ratonga_merchant_service_evil_3_hail_gf_f715099e.mp3", "Hello there, kind adventurer. My merchandise carries the seal of the Overlord himself! Go ahead, take a look!", "salute_freeport", 3460692084, 694864112, Spawn) + elseif choice == 4 then + PlayFlavor(NPC, "voiceover/english/ratonga_eco_evil_1/ft/service/merchant/ratonga_merchant_service_evil_1_aoi_gf_53388b91.mp3", "Only traitors to the Overlord would pass up a bargain like this. You're not a traitor are you?", "scold", 1269771027, 1321830597, Spawn) + elseif choice == 5 then + PlayFlavor(NPC, "voiceover/english/ratonga_eco_evil_1/ft/service/merchant/ratonga_merchant_service_evil_1_hail_gf_aff3fc07.mp3", "Are you going to buy anything today or am I just wasting my time? This isn't a museum display you know!", "glare", 3896024368, 3267129756, Spawn) + elseif choice == 6 then + PlayFlavor(NPC, "voiceover/english/ratonga_eco_evil_1/ft/service/merchant/ratonga_merchant_service_evil_1_hail_gf_d088c20d.mp3", "The stuff's over there. Just let me know if you find anything you like.", "ponder", 4265688146, 2432877514, Spawn) + elseif choice == 7 then + PlayFlavor(NPC, "voiceover/english/ratonga_eco_evil_1/ft/service/merchant/ratonga_merchant_service_evil_1_hail_gf_f715099e.mp3", "Hello there, kind adventurer. My merchandise carries the seal of the Overlord himself! Go ahead, take a look!", "salute_freeport", 3557499503, 3758276116, Spawn) + end + end + elseif race == TROLL then + if gender == MALE then + local choice = math.random(1,3) + if choice == 1 then + PlayFlavor(NPC, "voiceover/english/troll_eco_evil_1/ft/service/merchant/troll_merchant_service_evil_1_hail_gm_6ec08438.mp3", "In spite of the cost of living, it's still quite a popular item.", "ponder", 3210835791, 1852025017, Spawn) + elseif choice == 2 then + PlayFlavor(NPC, "voiceover/english/troll_eco_evil_1/ft/service/merchant/troll_merchant_service_evil_1_hail_gm_aff3fc07.mp3", "Are you going to buy anything today or am I just wasting my time? This isn't a museum display you know!", "glare", 2910412337, 3363562860, Spawn) + elseif choice == 3 then + PlayFlavor(NPC, "voiceover/english/troll_eco_evil_1/ft/service/merchant/troll_merchant_service_evil_1_hail_gm_f715099e.mp3", "Hello there, kind adventurer. My merchandise carries the seal of the Overlord himself! Go ahead, take a look!", "salute_freeport", 3850597068, 627128809, Spawn) + end + elseif gender == FEMALE then + local choice = math.random(1,3) + if choice == 1 then + PlayFlavor(NPC, "voiceover/english/optional2/troll_eco_evil_2/ft/service/merchant/troll_merchant_service_evil_2_hail_gf_aff3fc07.mp3", "Are you going to buy anything today or am I just wasting my time? This isn't a museum display you know!", "glare", 1199893528, 955414076, Spawn) + elseif choice == 2 then + PlayFlavor(NPC, "voiceover/english/optional2/troll_eco_evil_2/ft/service/merchant/troll_merchant_service_evil_2_hail_gf_d088c20d.mp3", "The stuff's over there. Just let me know if you find anything you like.", "ponder", 1139316257, 3885612978, Spawn) + elseif choice == 3 then + PlayFlavor(NPC, "voiceover/english/optional2/troll_eco_evil_2/ft/service/merchant/troll_merchant_service_evil_2_hail_gf_f715099e.mp3", "Hello there, kind adventurer. My merchandise carries the seal of the Overlord himself! Go ahead, take a look!", "salute_freeport", 1335466174, 672398346, Spawn) + end + end + elseif race == WOOD_ELF then + if gender == MALE then + local choice = math.random(1,4) + if choice == 1 then + PlayFlavor(NPC, "voiceover/english/woodelf_eco_good_1/ft/service/merchant/woodelf_merchant_service_good_1_hail_gm_24322c5d.mp3", "Greetings, friend traveler! We have the finest supplies to fill your adventuring needs.", "smile", 1759256427, 830987678, Spawn) + elseif choice == 2 then + PlayFlavor(NPC, "voiceover/english/woodelf_eco_good_1/ft/service/merchant/woodelf_merchant_service_good_1_hail_gm_45d92a75.mp3", "Welcome! What can I help you with?", "bow", 46008519, 2252409517, Spawn) + elseif choice == 3 then + PlayFlavor(NPC, "voiceover/english/woodelf_eco_good_1/ft/service/merchant/woodelf_merchant_service_good_1_hail_gm_ae84abf9.mp3", "Go on, take a look at the stock. You'll never beat this price in the city. I guarantee it!", "wink", 1332319343, 1214035917, Spawn) + elseif choice == 4 then + PlayFlavor(NPC, "voiceover/english/woodelf_eco_good_1/ft/service/merchant/woodelf_merchant_service_good_1_hail_gm_e4fa2bd8.mp3", "Confound it! Where did I put that ledger? It must be around here somewhere!", "confused", 2211929083, 2050297502, Spawn) + end + elseif gender == FEMALE then + local choice = math.random(1,2) + if choice == 1 then + PlayFlavor(NPC, "voiceover/english/woodelf_eco_good_1/ft/service/merchant/woodelf_merchant_service_good_1_hail_gf_24322c5d.mp3", "Greetings, friend traveler! We have the finest supplies to fill your adventuring needs.", "smile", 2082169991, 1448634552, Spawn) + elseif choice == 2 then + PlayFlavor(NPC, "voiceover/english/woodelf_eco_good_1/ft/service/merchant/woodelf_merchant_service_good_1_hail_gf_e4fa2bd8.mp3", "Confound it! Where did I put that ledger? It must be around here somewhere!", "confused", 3534990748, 2443561795, Spawn) + end + end + elseif race == FAE then + if gender == MALE then + elseif gender == FEMALE then + end + elseif race == ARASAI then + if gender == MALE then + elseif gender == FEMALE then + end + elseif race == SARNAK then + if gender == MALE then + elseif gender == FEMALE then + end + end + end +end diff --git a/server/SpawnScripts/Generic/GenericScribeVoiceOvers.lua b/server/SpawnScripts/Generic/GenericScribeVoiceOvers.lua new file mode 100644 index 000000000..d1eb24d13 --- /dev/null +++ b/server/SpawnScripts/Generic/GenericScribeVoiceOvers.lua @@ -0,0 +1,127 @@ +--[[ + Script Name : SpawnScripts/Generic/GenericScribeVoiceOvers.lua + Script Purpose : Handles the generic hails for scribes. + Script Author : Scatman + Script Date : 2009.09.27 + Script Notes : +--]] + +local BARBARIAN = 0 +local DARK_ELF = 1 +local DWARF = 2 +local ERUDITE = 3 +local FROGLOK = 4 +local GNOME = 5 +local HALF_ELF = 6 +local HALFLING = 7 +local HIGH_ELF = 8 +local HUMAN = 9 +local IKSAR = 10 +local KERRA = 11 +local OGRE = 12 +local RATONGA = 13 +local TROLL = 14 +local WOOD_ELF = 15 +local FAE = 16 +local ARASAI = 17 +local SARNAK = 18 + +local MALE = 1 +local FEMALE = 2 + +function GenericScribeHail(NPC, Spawn, Faction) + if NPC ~= nil then + local race = GetRace(NPC) + local gender = GetGender(NPC) + + if race >= 0 and race <= 18 and gender >= 1 and gender <= 2 then + if race == BARBARIAN then + if gender == MALE then + elseif gender == FEMALE then + end + elseif race == DARK_ELF then + if gender == MALE then + elseif gender == FEMALE then + end + elseif race == DWARF then + if gender == MALE then + elseif gender == FEMALE then + end + elseif race == ERUDITE then + if gender == MALE then + elseif gender == FEMALE then + end + elseif race == FROGLOK then + if gender == MALE then + elseif gender == FEMALE then + end + elseif race == GNOME then + if gender == MALE then + elseif gender == FEMALE then + local choice = math.random(1, 4) + if choice == 1 then + PlayFlavor(NPC, "voiceover/english/gnome_eco_good_1/ft/service/scribe/gnome_scribe_service_good_1_hail_gf_efd8a52b.mp3", "Ah, a student of the arcane. Is there something I can help you find?", "ponder", 241135821, 1371778900, Spawn) + elseif choice == 2 then + PlayFlavor(NPC, "voiceover/english/gnome_eco_good_1/ft/service/scribe/gnome_scribe_service_good_1_hail_gf_58ed77b2.mp3", "All right where is my pen? How am I supposed to scribe anything without my pen?", "tapfoot", 513035073, 2771699263, Spawn) + elseif choice == 3 then + PlayFlavor(NPC, "voiceover/english/gnome_eco_good_1/ft/service/scribe/gnome_scribe_service_good_1_hail_gf_cbc94cb6.mp3", "Blast it! Who keeps taking all of the parchment? ", "swear", 1429173278, 1014473963, Spawn) + elseif choice == 4 then + PlayFlavor(NPC, "voiceover/english/gnome_eco_good_1/ft/service/scribe/gnome_scribe_service_good_1_hail_gf_392a4f4e.mp3", "Be careful, it's best not to read the scrolls. If you want to know what they are, just ask me.", "nod", 3255267278, 1071089122, Spawn) + end + end + elseif race == HALF_ELF then + if gender == MALE then + elseif gender == FEMALE then + end + elseif race == HALFLING then + if gender == MALE then + elseif gender == FEMALE then + end + elseif race == HIGH_ELF then + if gender == MALE then + elseif gender == FEMALE then + end + elseif race == HUMAN then + if gender == MALE then + elseif gender == FEMALE then + end + elseif race == IKSAR then + if gender == MALE then + elseif gender == FEMALE then + end + elseif race == KERRA then + if gender == MALE then + elseif gender == FEMALE then + end + elseif race == OGRE then + if gender == MALE then + elseif gender == FEMALE then + end + elseif race == RATONGA then + if gender == MALE then + elseif gender == FEMALE then + end + elseif race == TROLL then + if gender == MALE then + elseif gender == FEMALE then + end + elseif race == WOOD_ELF then + if gender == MALE then + elseif gender == FEMALE then + end + elseif race == FAE then + if gender == MALE then + elseif gender == FEMALE then + end + elseif race == ARASAI then + if gender == MALE then + elseif gender == FEMALE then + end + elseif race == SARNAK then + if gender == MALE then + elseif gender == FEMALE then + end + end + end + end +end diff --git a/server/SpawnScripts/Generic/GenericTradeskillTutor.lua b/server/SpawnScripts/Generic/GenericTradeskillTutor.lua new file mode 100644 index 000000000..c59c168e5 --- /dev/null +++ b/server/SpawnScripts/Generic/GenericTradeskillTutor.lua @@ -0,0 +1,637 @@ +--[[ + Script Name : SpawnScripts/Generic/GenericTradeskillTutor.lua + Script Purpose : + Script Author : theFoof + Script Date : 2013.09.28 + Script Notes : Generic script for tradeskill tutors +--]] + +local HarvestTutorial = 11 + +local HadAHammer = 12 + +local ForgingAhead = 91 + +local CounteringProblems = 92 + +local TutorialCook = 93 + +local TutorialWeapons = 94 + +local TutorialScrolls = 95 + +local TutorialExperiments = 96 + +local TutorialOutfitting = 97 + +function spawn(NPC) + ProvidesTutorials(NPC) +end + +function ProvidesTutorials(NPC) + ProvidesQuest(NPC, HarvestTutorial) + ProvidesQuest(NPC, ForgingAhead) + ProvidesQuest(NPC, CounteringProblems) + ProvidesQuest(NPC, TutorialCook) + ProvidesQuest(NPC, TutorialWeapons) + ProvidesQuest(NPC, TutorialScrolls) + ProvidesQuest(NPC, TutorialExperiments) + ProvidesQuest(NPC, TutorialOutfitting) +end + +function respawn(NPC) + spawn(NPC) +end + + +function hailed(NPC, Spawn) + CraftingTutorHail(NPC, Spawn) +end + +function CraftingTutorHail(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + if GetQuestStep(Spawn, HadAHammer) == 5 then + SetStepComplete(Spawn, HadAHammer, 5) + if not HasCompletedQuest(Spawn, ForgingAhead) then + TutChat1(NPC, Spawn) + end + elseif not HasCompletedQuest(Spawn, HarvestTutorial) and not HasQuest(Spawn, HarvestTutorial) then + AddConversationOption(conversation, "Yes please, I don't know much about that stuff.", "OfferHarvestTutorial") + AddConversationOption(conversation, "Sure, I think I'm pretty comfortable with it all but I can always use a memory refresher.", "OfferHarvestTutorial") + AddConversationOption(conversation, "No thanks, I have other things to do right now.") + StartConversation(conversation, NPC, Spawn, "Hello friend! I'm here to teach interested people a little bit about how to harvest crafting materials, and how to craft tradeskilled items. Are you interested?") + elseif LastStepHarvestTutorial(Spawn) then + SetStepComplete(Spawn, HarvestTutorial, 8) + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_3_1004.mp3", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Thank you.") + StartConversation(conversation, NPC, Spawn, "Excellent work learning about harvesting! As a reward, allow me to offer you this box for storing harvested items. It's quite heavy, so I suggest you put it in your bank rather than carrying it, but it has plenty of storage room for harvests.") + elseif CanReceiveQuest(Spawn, ForgingAhead) then + TutChat1(NPC, Spawn) + elseif GetQuestStep(Spawn, ForgingAhead) == 1 then + PlayFlavor(NPC, "", "Take your time. There's no rush!", "", 0, 0, Spawn) + elseif GetQuestStep(Spawn, ForgingAhead) == 2 then + Tut2Chat1(NPC, Spawn) + elseif CanReceiveQuest(Spawn, CounteringProblems) then + Tut2Chat1(NPC, Spawn) + elseif GetQuestStep(Spawn, CounteringProblems) == 1 then + PlayFlavor(NPC, "", "You'll get the hang of it. And don't forget, other crafters are often a valuable source of advice and tips.", "", 1689589577, 4560189, Spawn) + elseif GetQuestStep(Spawn, CounteringProblems) == 2 then + SetStepComplete(Spawn, CounteringProblems, 2) + Tut3Chat1(NPC, Spawn) + elseif CanReceiveQuest(Spawn, TutorialCook) then + Tut3Chat1(NPC, Spawn) + elseif GetQuestStep(Spawn, TutorialCook) == 1 then + PlayFlavor(NPC, "", "Remember, you can buy essential provisioning ingredients such as liquid and dough from the fuel vendor.", "", 0, 0, Spawn) + elseif GetQuestStep(Spawn, TutorialCook) == 2 then + SetStepComplete(Spawn, TutorialCook, 2) + Tut4Chat1(NPC, Spawn) + elseif CanReceiveQuest(Spawn, TutorialWeapons) then + Tut4Chat1(NPC, Spawn) + elseif HasQuest(Spawn, TutorialWeapons) and (not QuestStepIsComplete(Spawn, TutorialWeapons, 1) or not QuestStepIsComplete(Spawn, TutorialWeapons, 2)) then + PlayFlavor(NPC, "", "Remember to be careful when working with weapons. You wouldn't want to accidentally impale your fellow crafters.", "", 0, 0, Spawn) + elseif HasQuest(Spawn, TutorialWeapons) and QuestStepIsComplete(Spawn, TutorialWeapons, 1) and QuestStepIsComplete(Spawn, TutorialWeapons, 2) then + SetStepComplete(Spawn, TutorialWeapons, 3) + Tut5Chat1(NPC, Spawn) + elseif CanReceiveQuest(Spawn, TutorialScrolls) then + Tut5Chat1(NPC, Spawn) + elseif GetQuestStep(Spawn, TutorialScrolls) == 1 then + PlayFlavor(NPC, "", "Ah, covered liberally with ink, I see. Good job. Keep at it!", "", 0, 0, Spawn) + elseif GetQuestStep(Spawn, TutorialScrolls) == 2 then + SetStepComplete(Spawn, TutorialScrolls, 2) + Tut6Chat1(NPC, Spawn) + elseif CanReceiveQuest(Spawn, TutorialExperiments) then + Tut6Chat1(NPC, Spawn) + elseif GetQuestStep(Spawn, TutorialExperiments) == 1 then + PlayFlavor(NPC, "", "Be particularly careful at the chemistry table. More explosions originate in that area than anywhere else in the city...", "", 0, 0, Spawn) + elseif GetQuestStep(Spawn, TutorialExperiments) == 2 then + SetStepComplete(Spawn, TutorialExperiments, 2) + Tut7Chat1(NPC, Spawn) + elseif CanReceiveQuest(Spawn, TutorialOutfitting) then + Tut7Chat1(NPC, Spawn) + elseif HasQuest(Spawn, TutorialOutfitting) and (not QuestStepIsComplete(Player, 97, 1) or not QuestStepIsComplete(Player, 97, 2)) then + PlayFlavor(NPC, "", "Take your time. It's dangerous to rush at the forge!", "", 0, 0, Spawn) + elseif HasQuest(Spawn, TutorialOutfitting) and QuestStepIsComplete(Player, 97, 1) and QuestStepIsComplete(Player, 97, 2) then + SetStepComplete(Spawn, TutorialOutfitting, 3) + FinishedChat(NPC, Spawn) + else + FinishedChat2(NPC, Spawn) + end +end + +function TutChat1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "tradeskill_tutorial_master/tradeskill/tutorial/tradeskill_tutorial014.mp3", "", "", 423248729, 3231742282, Spawn) + AddConversationOption(conversation, "Yes please.", "TutChat2") + AddConversationOption(conversation, "Not now, thanks.") + StartConversation(conversation, NPC, Spawn, "You have learned how to gather harvests, and whether or not you decide to learn a tradeskill profession, you'll find harvesting can be a useful and profitable pastime. Are you interested in reviewing the crafting process?") +end + +function TutChat2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "Elm, tin, roots ... check. And I'd like to learn more before I start, yes.", "TutChat3") + AddConversationOption(conversation, "No thanks, spare me the details, just tell me where to go.", "OfferForgingAhead") + AddConversationOption(conversation, "Actually ... I'll be right back!") + StartConversation(conversation, NPC, Spawn, "All right, let's learn about the crafting process itself. You'll need to have some harvested elm, tin, and roots in your bags. Shall I tell you a bit more about the crafting stations and your tradeskill arts, or do you want to just get going?") +end + +function TutChat3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "And what skills will I need?", "TutChat4") + StartConversation(conversation, NPC, Spawn, "There are a number of different crafting stations that can be used to make different items. For example, you would use a forge to make metal armor, and a chemistry table to make potions. The other crafting stations are: the sewing table, the woodworking table, the sage's engraved desk, the stove & keg, and the jeweler's workbench.") +end + +function TutChat4(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "bob_the_crafting_instructor/tradeskill/tutorial/tradeskill_tutorial011.mp3", "", "", 1844695369, 4279963855, Spawn) + AddConversationOption(conversation, "So I need to use these tradeskill arts while crafting?", "TutChat5") + StartConversation(conversation, NPC, Spawn, "Each of the 9 tradeskill professions has its own 6 tradeskill arts, and there are also a couple of special arts that are used for recipes not related directly to one tradeskill specialty. The appropriate arts will appear as buttons at the bottom of the crafting window when you start to make an item.") +end + +function TutChat5(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "So what happens next?", "TutChat6") + StartConversation(conversation, NPC, Spawn, "That's right. If you mouse-over or examine the arts in your book, you should see what each of them do. Three will add progress, and three will add durability. When you're crafting you will want to be sure you know which ones add progress and which ones add durability. If you're having trouble maintaining durability, use all your durability arts all the time! Or to speed up progress, use the progress arts nonstop.") +end + +function TutChat6(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "Once I find the recipe I want to make, what then?", "TutChat7") + StartConversation(conversation, NPC, Spawn, "The first step in crafting anything is the recipe. The recipe you select determines what you will create. Open your recipe book from the main menu, or press N, to see yours. If you're new to crafting it will be empty, but as you gain more recipes they will be listed here and you can use the Search box at the top of this window to easily find recipe names. You can also create custom filters using the Edit button. ") +end + +function TutChat7(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "I think I'm ready to give it a try.", "TutChat8") + StartConversation(conversation, NPC, Spawn, "In this window you would select the name of the recipe you wish to use and then click Create. You will need to be near a crafting station of the appropriate type. If you click on the crafting station directly, your recipe book will automatically filter to show you only the recipes you can make on that station. Once you click Create, you will move to the Resource Window which shows you the list of ingredients that recipe requires. If you have all those, you click Begin and crafting starts.") +end + +function TutChat8(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "How do I stop losing durability then?", "TutChat9") + StartConversation(conversation, NPC, Spawn, "I'd like you to make a candelabra for practice. While you craft it, I'd like you to pay attention to the blue and green bars in the middle area. This shows you your progress (blue), and the durability (green) of the item you are creating. The goal is to increase your progress without losing too much durability. To create the item, you need to fill all four blue progress bars. If you lose at least one full bar of durability, you will not be able to do this unless you can regain that durability again. It is safest to keep your durability near maximum just in case of unexpected critical failures.") +end + +function TutChat9(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "It might be easier if I just try it out, can I give it a try now?", "OfferForgingAhead") + StartConversation(conversation, NPC, Spawn, "That's where the reaction arts I mentioned come in. You can use these to add progress (blue) or durability (green). Mouse click these or press 1 through 6 on your keyboard. You can use these skills proactively throughout crafting to influence the outcome - for example, use skills that add durability if your durability is dropping. Every 4 seconds a crafting 'round' completes and you will see numbers indicating your overall progress and durability loss or gain for that round above the crafting station. This is generally easier to see in third-person view (use your mouse wheel to scroll out).") +end + +function Tut2Chat1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + if not HasCompletedQuest(Spawn, ForgingAhead) then + SetStepComplete(Spawn, ForgingAhead, 2) + end + PlayFlavor(NPC, "bob_the_crafting_instructor/tradeskill/tutorial/tradeskill_tutorial017.mp3", "", "", 1140694758, 2504376154, Spawn) + AddConversationOption(conversation, "Like what?", "Tut2Chat2") + StartConversation(conversation, NPC, Spawn, "Moving on to the next lesson, you should be aware that there are some hazards associated with crafting. Why, back in the old days, it wasn't unusual to see piles of injured bodies beside the forge! We've managed to build slightly less dangerous forges since then, but no matter what craft you choose, there are still dangers to counter.") +end + +function Tut2Chat2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "I didn't see any of that while making the candelabra...", "OfferCounteringProblems") + StartConversation(conversation, NPC, Spawn, "During the crafting process, you will sometimes see a warning icon appear in the area below the four progress bars. The warning icon will match one of your reaction art icons, and will have a name indicating the type of danger. The crafter can correct these problems by ensuring the next reaction art they use matches the icon of the warning. Successfully doing so will avoid bad things occurring (such as a loss of progress, or durability, or even injury to the crafter) and may also result in unusually good things happening (such as progress or durability gain, a skill bonus, or even the discovery of a rare harvest).") +end + +function Tut3Chat1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_2_1060.mp3", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Yes please.", "Tut3Chat2") + AddConversationOption(conversation, "Not right now.") + StartConversation(conversation, NPC, Spawn, "Well done, I hope you avoided any serious injuries. So, now you know the basics of crafting, and I hope you understand how to obtain the best quality results while avoiding injury. Now, would you like to try a few more recipes to learn about the nine types of tradeskill you can specialize in?") +end + +function Tut3Chat2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "So what next?", "Tut3Chat3") + StartConversation(conversation, NPC, Spawn, "Well, let's see. You've made a candelabra using the carpenter skills, and learned that carpenters make items that can be placed in houses. Carpenters also make strong boxes for storage, and sales containers for selling items to others. You've also made a bracelet: jewelers make jewelry like this, and they also make combat art upgrades for scout types. ") +end + +function Tut3Chat3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "I'll be right back with that cider!", "OfferTutorialCook") + AddConversationOption(conversation, "Maybe later.") + StartConversation(conversation, NPC, Spawn, "Now why don't you try your hand at provisioning, and make some jum jum cider? Food and drink help an adventurer's power and health to regenerate faster between battles, so a provisioner's goods are always in demand. You'll need some harvested jum jum, and some liquid, which the fuel merchant will sell (aerated mineral water works just fine, and adds that extra fizz). ") +end + +function Tut4Chat1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_2_1060.mp3", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "I'll do my best.", "OfferTutorialWeapons") + AddConversationOption(conversation, "I'll think about it.") + StartConversation(conversation, NPC, Spawn, "Next we'll look at weapons. These can be made by both weaponsmiths and woodworkers. Weaponsmiths are masters of metallic weaponry including swords, axes, daggers, and hammers. Woodworkers are skilled at working with wood, creating wooden weapons such as staffs, batons, and cudgels, as well as bows and arrows and wooden bucklers and round shields for the defense of their allies. They also craft powerful totems that possess restorative properties. Practice both crafts by making a tin hand axe, and an elm greatstaff.") +end + +function Tut5Chat1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_1_1060.mp3", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "I'll start now.", "OfferTutorialScrolls") + AddConversationOption(conversation, "Not right now.") + StartConversation(conversation, NPC, Spawn, "Sages possess an unsurpassed knowledge of the arcane. They apply this knowledge by scribing spells onto scrolls that increase the might of healers and mages. Create a Scroll of Shackle and bring it to me.") +end + +function Tut6Chat1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_3_1060.mp3", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "On my way.", "OfferTutorialExperiments") + AddConversationOption(conversation, "Another time perhaps.") + StartConversation(conversation, NPC, Spawn, "Excellent work. Now let's look at alchemists; they create deadly poisons and magic potions from almost any material, benign or otherwise. These concoctions provide benefits in battle, such as healing, resistance, or extra damage against a foe. Alchemists also make combat art upgrades for fighter types to improve their abilities in battle. Make me an Essence of Intercept to practice these skills.") +end + +function Tut7Chat1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_2_1060.mp3", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Coat and a backpack coming up.", "OfferTutorialOutfitting") + AddConversationOption(conversation, "Perhaps later.") + StartConversation(conversation, NPC, Spawn, "Now let's look at tailors and armorers. Armorers focus on heavy plate and chain armor, while tailors specialize in the creation of lighter cloth and leather armor. Tailors also make backpacks and other items from cloth or leather. Show me that you can create a tin chainmail coat, and a rawhide backpack.") +end + +function FinishedChat(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "bob_the_crafting_instructor/tradeskill/tutorial/tradeskill_tutorial062.mp3", "", "", 2242637020, 2504678008, Spawn) + AddConversationOption(conversation, "Thank you.") + AddConversationOption(conversation, "Let me just ask you a couple more questions...", "FinishedChat2") + StartConversation(conversation, NPC, Spawn, "Excellent work! I hope you now have an idea of what each tradeskill class does, and how to do it. At level 9 you'll need to decide which crafting path you will follow, by speaking to the Crafting Trainer near your local tradeskill area. The Crafting Trainer also sells your recipe books, so be sure to pick those up! Come back to me at any time and I'll be happy to give you refreshers on this information. Should you choose to continue a career as a crafter, I wish you the best of fortune!") +end + +function FinishedChat2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_2_1060.mp3", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "I have some questions about some of the stuff we already covered.", "RemindChat") + AddConversationOption(conversation, "I heard something about commission crafting, what's that?", "CommissionChat1") + AddConversationOption(conversation, "Where do I get recipe books for crafting?", "BookChat1") + AddConversationOption(conversation, "Tell me about the different crafting classes?", "ClassChat1") + AddConversationOption(conversation, "How do I choose what type of crafter I will be?", "TypeChat1") + AddConversationOption(conversation, "How do I sell my stuff to other people?", "SellChat1") + AddConversationOption(conversation, "I heard something about secondary crafts, tinkering and transmuting. What are they?", "SecChat1") + AddConversationOption(conversation, "Thank you.") + StartConversation(conversation, NPC, Spawn, "Would you like some more information, or some reminders of what we already talked about?") +end + +function CommissionChat1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "bob_the_crafting_instructor/tradeskill/tutorial/tradeskill_tutorial035.mp3", "", "", 2388752041, 1908343081, Spawn) + AddConversationOption(conversation, "How do I do it?", "CommissionChat2") + StartConversation(conversation, NPC, Spawn, "The commission crafting system enables a crafter to make an item for a customer without requiring the customer to hand over any ingredients. It can be used for almost any recipe, but is most often used for crafting rare items when the customer and crafter may not know each other and may not wish to hand over a rare on trust.") +end + +function CommissionChat2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "bob_the_crafting_instructor/tradeskill/tutorial/tradeskill_tutorial036.mp3", "", "", 2552516382, 2887530961, Spawn) + AddConversationOption(conversation, "So instead of targetting the crafting station I target the customer.", "CommissionChat3") + StartConversation(conversation, NPC, Spawn, "To craft something for a customer using the commission system, have the customer meet you by the appropriate crafting station, bringing with him the components needed by the recipe. Open your recipe book and select the appropriate recipe, then target the customer, and then click Create.") +end + +function CommissionChat3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "bob_the_crafting_instructor/tradeskill/tutorial/tradeskill_tutorial037.mp3", "", "", 691734143, 271413200, Spawn) + AddConversationOption(conversation, "And when he's provided everything we agree on?", "CommissionChat4") + StartConversation(conversation, NPC, Spawn, "Correct. When you target the customer and click Create, a new window will open. The customer needs to provide the primary component that the recipe requires (the first one listed) in the first slot in this window. He can provide all the other components also by putting them in this window too, or they can be in your bags, he is only required to provide the primary one. Also in this window he can add coin for payment, or an item to trade in payment.") +end + +function CommissionChat4(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "bob_the_crafting_instructor/tradeskill/tutorial/tradeskill_tutorial038.mp3", "", "", 4067745103, 1643379768, Spawn) + AddConversationOption(conversation, "Thank you.", "FinishedChat2") + StartConversation(converastion, NPC, Spawn, "When you both click to accept the deal, your crafting process will begin just as it normally does. Complete the item, and the finished product will drop directly into your customer's bags. Any payment placed in the commission window will go into your own bags. Easy as that.") +end + +function BookChat1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "bob_the_crafting_instructor/tradeskill/tutorial/tradeskill_tutorial039.mp3", "", "", 3191451903, 1275472191, Spawn) + AddConversationOption(conversation, "And they'll sell all my recipes?", "BookChat2") + StartConversation(conversation, NPC, Spawn, 'Recipe books can be purchased from vendors with the "Crafting Trainer" label. Typically these will be found near a crafting area. In Qeynos and Freeport they are normally standing just outside the tradeskill instances. In other cities they should be near the crafting stations.') +end + +function BookChat2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "bob_the_crafting_instructor/tradeskill/tutorial/tradeskill_tutorial040.mp3", "", "", 2091121926, 301972007, Spawn) + AddConversationOption(conversation, "That's it? " .. '"Essentials" books from the Crafting Trainer and "Advanced" books found out adventuring?', "BookChat3") + StartConversation(conversation, NPC, Spawn, 'They will sell your "essentials" books. These contain the basic recipes you need for making handcrafted items. "Advanced" books containing recipes for mastercrafted items (using rare harvests) are found by adventurers after level 9, and you' .. "'ll need to trade with your fellow adventurers, or check the broker, or go out hunting to find these.") +end + +function BookChat3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "bob_the_crafting_instructor/tradeskill/tutorial/tradeskill_tutorial041.mp3", "", "", 1044382648, 4108876671, Spawn) + AddConversationOption(conversation, "Thank you.", "FinishedChat2") + StartConversation(conversation, NPC, Spawn, 'Almost. There are occasionally other recipes that can be obtained in other ways, such as by adventuring or questing in certain areas. The majority of your recipes are covered by the "essentials" and "advanced" books however.') +end + +function ClassChat1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "bob_the_crafting_instructor/tradeskill/tutorial/tradeskill_tutorial042.mp3", "", "", 1622424773, 1570512432, Spawn) + AddConversationOption(conversation, "What are craftsmen?", "ClassChat2") + AddConversationOption(conversation, "What are outfitters?", "ClassChat3") + AddConversationOption(conversation, "What are scholars?", "ClassChat4") + AddConversationOption(conversation, "I was wondering about something else.", "FinishedChat2") + StartConversation(conversation, NPC, Spawn, "There are nine primary tradeskill classes, plus two secondary crafts. I'll focus on the primary nine right now. These are divided into three archetypes: craftsman, outfitter, and scholar.") +end + +function ClassChat2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "bob_the_crafting_instructor/tradeskill/tutorial/tradeskill_tutorial043.mp3", "", "", 4227555374, 506326062, Spawn) + AddConversationOption(conversation, "I see.", "ClassChat1") + StartConversation(conversation, NPC, Spawn, "The three classes of craftsmen are: carpenter, provisioner, and woodworker Carpenters make furniture for decorating your home, strong boxes for bank storage, altars, and sales containers for use on the broker. Provisioners make food and drink to keep adventurers fighting in top form. And woodworkers make wooden weapons and shields, bows and arrows, magical totems, and harvesting tools.") +end + +function ClassChat3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "bob_the_crafting_instructor/tradeskill/tutorial/tradeskill_tutorial044.mp3", "", "", 2305144148, 2262225750, Spawn) + AddConversationOption(conversation, "I see.", "ClassChat1") + StartConversation(conversation, NPC, Spawn, "Outfitters are armorers, tailors, and weaponsmiths. Armorers specialize in plate and chainmail armor, and metal shields. Tailors make cloth and leather armor, fancy dress clothing, hex dolls, backpacks, and containers for thrown ammo. Weaponsmiths specialize in metal weapons of all types.") +end + +function ClassChat4(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "bob_the_crafting_instructor/tradeskill/tutorial/tradeskill_tutorial045.mp3", "", "", 147861749, 3375095704, Spawn) + AddConversationOption(conversation, "I see.", "ClassChat1") + StartConversation(conversation, NPC, Spawn, "Scholars are alchemists, jewelers, and sages. Alchemists specialize in potions and poisons, and also make combat art upgrades for fighter types. Jewelers make items of jewelry, and also combat art upgrades for scout types. And sages make spell upgrades for mages and healers.") +end + +function TypeChat1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "bob_the_crafting_instructor/tradeskill/tutorial/tradeskill_tutorial046.mp3", "", "", 152150944, 1842039471, Spawn) + AddConversationOption(conversation, "Then what?", "TypeChat2") + StartConversation(conversation, NPC, Spawn, "When you reach level 9, you will need to decide which of the three main archetypes you will become: craftsman, outfitter, or scholar. When you have decided, speak to the Crafting Trainer near your local tradeskill area to register for that line of work. Typically these will be found near a crafting area. In Qeynos and Freeport they are normally standing just outside the tradeskill instances. In other cities they should be near the crafting stations.") +end + +function TypeChat2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "bob_the_crafting_instructor/tradeskill/tutorial/tradeskill_tutorial047.mp3", "", "", 2169201999, 3543807969, Spawn) + AddConversationOption(conversation, "What if I change my mind?", "TypeChat3") + StartConversation(conversation, NPC, Spawn, "That's all you have to do to choose your archetype. Later, at level 19, you will need to choose your final profession. Simply return to the same crafting trainer to select.") +end + +function TypeChat3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "bob_the_crafting_instructor/tradeskill/tutorial/tradeskill_tutorial048.mp3", "", "", 2654967587, 4062785753, Spawn) + AddConversationOption(conversation, "Thank you.", "FinishedChat2") + StartConversation(conversation, NPC, Spawn, "There are a number of tradeskill career counsellors who can assist you in changing your crafting profession if you wish to do so. This will reset your crafting level to 9 and remove any recipes you can no longer use.") +end + +function SellChat1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "bob_the_crafting_instructor/tradeskill/tutorial/tradeskill_tutorial049.mp3", "", "", 2757229171, 476797749, Spawn) + AddConversationOption(conversation, "What are the specialized containers for?", "SellChat2") + StartConversation(conversation, NPC, Spawn, "Many crafters build up personal relationships with customers and deal directly with interested parties. However, you also have the option of listing your goods for sale on the broker. Brokers are located in all major cities, just ask a guard if you need help finding one. You can use any container such as a box or backpack to sell items from, or carpenters can make specialized sales containers from level 20 upward.") +end + +function SellChat2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "bob_the_crafting_instructor/tradeskill/tutorial/tradeskill_tutorial050.mp3", "", "", 3628788902, 1698576976, Spawn) + AddConversationOption(conversation, "How do I get my money?", "SellChat3") + StartConversation(conversation, NPC, Spawn, "Specialized sales containers can only be used on the broker, nowhere else. They are much larger than normal boxes or bags, and an image of these containers can be placed in your house so that customers can visit in person to buy from you, rather than purchasing through the broker. The broker charges a markup fee. so allowing your customers to buy directly and bypass this fee is generally good for business, once you start selling pricier items. These specialized containers require a rare wood to make; your local carpenter can give you more details.") +end + +function SellChat3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "bob_the_crafting_instructor/tradeskill/tutorial/tradeskill_tutorial051.mp3", "", "", 2662949569, 2327521387, Spawn) + AddConversationOption(conversation, "Thank you.", "FinishedChat2") + StartConversation(conversation, NPC, Spawn, 'Place the items to sell in a container on the "sell" tab of the broker and set the prices you wish to sell them for. If they sell, you will be able to collect the coin from the same container that the item was in.The broker will continue to sell your goods for you, for the next couple of days even if you are not around at the time.') +end + +function SecChat1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "bob_the_crafting_instructor/tradeskill/tutorial/tradeskill_tutorial052.mp3", "", "", 3509946126, 2374520501, Spawn) + AddConversationOption(conversation, "What's tinkering?", "SecChat2") + AddConversationOption(conversation, "What's adorning?", "SecChat3") + AddConversationOption(conversation, "How do I learn to be a tinkerer or adorner?", "SecChat4") + AddConversationOption(conversation, "I was wondering about something else.", "FinishedChat2") + StartConversation(conversation, NPC, Spawn, "In addition to the nine primary tradeskills there are two secondary skills that can be learned. These are tinkering, and adorning. They can be learned by either adventurers or crafters, but your level in tinkering or adorning can never be higher than your primary tradeskill or your adventure level, whichever is higher.") +end + +function SecChat2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "bob_the_crafting_instructor/tradeskill/tutorial/tradeskill_tutorial053.mp3", "", "", 2218048793, 640438305, Spawn) + AddConversationOption(conversation, "I see.", "SecChat1") + StartConversation(conversation, NPC, Spawn, "Tinkering is the process created by gnomes many centuries ago. It is the art of making mechanical gadgets and gizmos to make life a little easier. You can create devices that will enhance your own abilities in combat; most of these can only be safely operated by yourself and other tinkers, however, as the mechanisms are far too complex for non-tinkerers to understand. Since many tinkered items are adventuring-related, it can be a useful secondary craft to augment an adventurer's abilities.") +end + +function SecChat3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "bob_the_crafting_instructor/tradeskill/tutorial/tradeskill_tutorial054.mp3", "", "", 2713361023, 2617196209, Spawn) + AddConversationOption(conversation, "I see.", "SecChat1") + StartConversation(conversation, NPC, Spawn, "Adorning is the art of making Adornments: items that can be applied to your equipment to permanently enhance the equipment's stats. To make these, you will need components created by breaking down unused items into raw components using the Transmuting skill. Everybody has the Transmuting skill, but only those who have studied as adorners can make adornments.") +end + +function SecChat4(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "bob_the_crafting_instructor/tradeskill/tutorial/tradeskill_tutorial055.mp3", "", "", 1159059080, 4034407978, Spawn) + AddConversationOption(conversation, "I see.", "SecChat1") + StartConversation(conversation, NPC, Spawn, "You can only learn tinkering and adorning in Faydwer, where the skills originate. You will find trainers at the docks in Butcherblock Mountains, as well as in Kelethin. You can be both a tinkerer and an adorner if you wish. Everybody already has the transmuting skill which is used to make components that adorners use, and you can learn to use this even if you choose not to be an adorner.") +end + +function RemindChat(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "bob_the_crafting_instructor/tradeskill/tutorial/tradeskill_tutorial063.mp3", "", "", 979701411, 1286564366, Spawn) + AddConversationOption(conversation, "Tell me again where I can find harvests to craft with?", "HarvestChat") + AddConversationOption(conversation, "Tell me again about my tradeskill reaction arts and how to use them?", "ReactionChat") + AddConversationOption(conversation, "Tell me again about the recipe window?", "WindowChat") + AddConversationOption(conversation, "Tell me again about the crafting (or process) window, where the crafting itself takes place?", "CraftChat") + AddConversationOption(conversation, 'Tell me again what happens during a "round" of crafting, and when?', "RoundChat") + AddConversationOption(conversation, "Thanks for the reminders.", "FinishedChat2") + StartConversation(conversation, NPC, Spawn, "What would you like to review?") +end + +function HarvestChat(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "bob_the_crafting_instructor/tradeskill/tutorial/tradeskill_tutorial032.mp3", "", "", 1760845253, 634861670, Spawn) + AddConversationOption(conversation, "Thanks.", "RemindChat") + StartConversation(conversation, NPC, Spawn, "Harvesting resources tend to be segregated by areas - for example, you'll find harvests for making equipment for level 1-9 adventurers, in the same areas where you'll find level 1-9 adventurers hunting. There are seven types of harvestable item: wood, roots, ore, soft metal, animal dens, shrubs, and fish.") +end + +function ReactionChat(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "bob_the_crafting_instructor/tradeskill/tutorial/tradeskill_tutorial055.mp3", "", "", 1159059080, 4034407978, Spawn) + AddConversationOption(conversation, "And how do they work?", "ReactionChat2") + StartConversation(conversation, NPC, Spawn, "You can only learn tinkering and adorning in Faydwer, where the skills originate. You will find trainers at the docks in Butcherblock Mountains, as well as in Kelethin. You can be both a tinkerer and an adorner if you wish. Everybody already has the transmuting skill which is used to make components that adorners use, and you can learn to use this even if you choose not to be an adorner.") +end + +function ReactionChat2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "Thank you.", "RemindChat") + StartConversation(conversation, NPC, Spawn, "For any recipe, you will have six tradeskill arts that you can use if you want. If you mouse-over or examine the arts in your book, you should see what each of them do. Three will add progress, and three will add durability. There is also a cost associated with each. When you open up the crafting window, the correct skills you need will automatically appear at the bottom. Or, if you prefer, you can drag the ones you want onto a custom hotbar. Either way, when you're crafting you can click on these arts to add progress or durability to the item you are creating.") +end + +function WindowChat(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "Ok, I see the recipe list, what's next?", "WindowChat2") + StartConversation(conversation, NPC, Spawn, "The first step in crafting anything is the recipe. The recipe you select determines what you will create. Open your recipe book from the main menu, or press N, to see yours. If you're new to crafting it will be empty, but as you gain more recipes they will be listed here and you can use the Search box at the top of this window to easily find recipe names. You can also create custom filters using the Edit button.") +end + +function WindowChat2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "bob_the_crafting_instructor/tradeskill/tutorial/tradeskill_tutorial031.mp3", "", "", 298839722, 3210850444, Spawn) + AddConversationOption(conversation, "Thank you.", "RemindChat") + StartConversation(conversation, NPC, Spawn, "In the recipe list you would select the name of the recipe you wish to use, and then click Create. You will need to be at a crafting station of the appropriate type. Once you click Create, you will move to the Resource Window which shows you the list of ingredients that recipe requires. If you have all those, you click Begin and crafting starts.") +end + +function CraftChat(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "And what then?", "CraftChat2") + StartConversation(conversation, NPC, Spawn, "While you craft an item, pay attention to the four blue and green horizontal bars in the middle area. This shows you your progress (blue), and the durability (green) of the item you are creating. The reaction arts you'll need are found at the bottom of this window.") +end + +function CraftChat2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "Thank you.", "RemindChat") + StartConversation(conversation, NPC, Spawn, "The goal is to increase your progress without losing too much durability. To create the item, you need to fill all four blue progress bars. If you lose too much durability (green), you will not be able to do this. Use your reaction arts to add durability if you lose too much. If you have plenty of durability, you can use your arts to add progress so you get a finished product faster.") +end + +function RoundChat(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "bob_the_crafting_instructor/tradeskill/tutorial/tradeskill_tutorial033.mp3", "", "", 3851565796, 3556907959, Spawn) + AddConversationOption(conversation, "Okay, let's assume I do that, or there was no warning ... then what?", "RoundChat2") + StartConversation(conversation, NPC, Spawn, 'A "crafting round" lasts for 4 seconds. At the start of the 4 seconds, there is a chance that a warning icon will appear in your crafting window. If this happens, you have the remainder of the round to counter it: the first reaction art you use must match the icon of the warning.') +end + +function RoundChat2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "bob_the_crafting_instructor/tradeskill/tutorial/tradeskill_tutorial034.mp3", "", "", 1493508972, 307622314, Spawn) + AddConversationOption(conversation, "Thank you.", "RemindChat") + StartConversation(conversation, NPC, Spawn, "You then have the remainder of the round to use any other reaction arts you wish to... or do nothing if you prefer. At the end of the round, your total progress and durability gain/loss will be adjusted, and you will see the appropriate numbers floating up from the crafting station.") +end + +function LastStepHarvestTutorial(Spawn) + --Return if all 7 steps before the final step are completed + if HasQuest(Spawn, HarvestTutorial) then + return (QuestStepIsComplete(Spawn, HarvestTutorial, 1) and QuestStepIsComplete(Spawn, HarvestTutorial, 2) and QuestStepIsComplete(Spawn, HarvestTutorial, 3) and QuestStepIsComplete(Spawn, HarvestTutorial, 4) and QuestStepIsComplete(Spawn, HarvestTutorial, 5) and QuestStepIsComplete(Spawn, HarvestTutorial, 6) and QuestStepIsComplete(Spawn, HarvestTutorial, 7)) + else + return false + end +end + +function OfferHarvestTutorial(NPC, Spawn) + OfferQuest(NPC, Spawn, HarvestTutorial) +end + +function OfferForgingAhead(NPC, Spawn) + OfferQuest(NPC, Spawn, ForgingAhead) +end + +function OfferCounteringProblems(NPC, Spawn) + OfferQuest(NPC, Spawn, CounteringProblems) +end + +function OfferTutorialCook(NPC, Spawn) + OfferQuest(NPC, Spawn, TutorialCook) +end + +function OfferTutorialWeapons(NPC, Spawn) + OfferQuest(NPC, Spawn, TutorialWeapons) +end + +function OfferTutorialScrolls(NPC, Spawn) + OfferQuest(NPC, Spawn, TutorialScrolls) +end + +function OfferTutorialExperiments(NPC, Spawn) + OfferQuest(NPC, Spawn, TutorialExperiments) +end + +function OfferTutorialOutfitting(NPC, Spawn) + OfferQuest(NPC, Spawn, TutorialOutfitting) +end \ No newline at end of file diff --git a/server/SpawnScripts/Generic/GenericVoiceOvers.lua b/server/SpawnScripts/Generic/GenericVoiceOvers.lua new file mode 100644 index 000000000..69a38f22d --- /dev/null +++ b/server/SpawnScripts/Generic/GenericVoiceOvers.lua @@ -0,0 +1,138 @@ +--[[ + cript Name : SpawnScripts/Generic/GenericVoiceOvers.lua + Script Purpose : Handles the generic hails for spawns. + Script Author : Scatman + Script Date : 2009.10.05 + Script Notes : +--]] + +local BARBARIAN = 0 +local DARK_ELF = 1 +local DWARF = 2 +local ERUDITE = 3 +local FROGLOK = 4 +local GNOME = 5 +local HALF_ELF = 6 +local HALFLING = 7 +local HIGH_ELF = 8 +local HUMAN = 9 +local IKSAR = 10 +local KERRA = 11 +local OGRE = 12 +local RATONGA = 13 +local TROLL = 14 +local WOOD_ELF = 15 +local FAE = 16 +local ARASAI = 17 +local SARNAK = 18 + +local MALE = 1 +local FEMALE = 2 + +function GenericHail(NPC, Spawn) + if NPC ~= nil then + local race = GetRace(NPC) + local gender = GetGender(NPC) + + if race >= 0 and race <= 18 and gender >= 1 and gender <= 2 then + local file_option = math.random(1, 3) + local file_race_gender = 0 + if race == BARBARIAN then + if gender == MALE then + file_race_gender = 1002 + elseif gender == FEMALE then + file_race_gender = 1001 + end + elseif race == DARK_ELF then + if gender == MALE then + file_race_gender = 1008 + elseif gender == FEMALE then + file_race_gender = 1007 + end + elseif race == DWARF then + if gender == MALE then + file_race_gender = 1042 + elseif gender == FEMALE then + file_race_gender = 1009 + end + elseif race == ERUDITE then + if gender == MALE then + elseif gender == FEMALE then + end + elseif race == FROGLOK then + if gender == MALE then + file_race_gender = 1016 + elseif gender == FEMALE then + file_race_gender = 1015 + end + elseif race == GNOME then + if gender == MALE then + elseif gender == FEMALE then + end + elseif race == HALF_ELF then + if gender == MALE then + file_race_gender = 1022 + elseif gender == FEMALE then + end + elseif race == HALFLING then + if gender == MALE then + file_race_gender = 1006 + elseif gender == FEMALE then + file_race_gender = 1005 + end + elseif race == HIGH_ELF then + if gender == MALE then + file_race_gender = 1012 + elseif gender == FEMALE then + file_race_gender = 1011 + end + elseif race == HUMAN then + if gender == MALE then + file_race_gender = 1054 + elseif gender == FEMALE then + file_race_gender = 1003 + end + elseif race == IKSAR then + if gender == MALE then + elseif gender == FEMALE then + end + elseif race == KERRA then + if gender == MALE then + elseif gender == FEMALE then + file_race_gender = 1035 + end + elseif race == OGRE then + if gender == MALE then + elseif gender == FEMALE then + end + elseif race == RATONGA then + if gender == MALE then + elseif gender == FEMALE then + end + elseif race == TROLL then + if gender == MALE then + elseif gender == FEMALE then + end + elseif race == WOOD_ELF then + if gender == MALE then + elseif gender == FEMALE then + end + elseif race == FAE then + if gender == MALE then + elseif gender == FEMALE then + end + elseif race == ARASAI then + if gender == MALE then + elseif gender == FEMALE then + end + elseif race == SARNAK then + if gender == MALE then + file_race_gender = 1004 + elseif gender == FEMALE then + file_race_gender = 1003 + end + end + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_" .. file_option .. "_" .. file_race_gender ..".mp3", "", "hello", 0, 0, Spawn) + end + end +end diff --git a/server/SpawnScripts/Generic/GenericWeaponsmithVoiceOvers.lua b/server/SpawnScripts/Generic/GenericWeaponsmithVoiceOvers.lua new file mode 100644 index 000000000..91bd1efe8 --- /dev/null +++ b/server/SpawnScripts/Generic/GenericWeaponsmithVoiceOvers.lua @@ -0,0 +1,135 @@ +--[[ + Script Name : SpawnScripts/Generic/GenericWeaponsmithVoiceOvers.lua + Script Purpose : Handles the generic hails for weaponsmiths. + Script Author : Scatman + Script Date : 2009.09.27 + Script Notes : +--]] + +local BARBARIAN = 0 +local DARK_ELF = 1 +local DWARF = 2 +local ERUDITE = 3 +local FROGLOK = 4 +local GNOME = 5 +local HALF_ELF = 6 +local HALFLING = 7 +local HIGH_ELF = 8 +local HUMAN = 9 +local IKSAR = 10 +local KERRA = 11 +local OGRE = 12 +local RATONGA = 13 +local TROLL = 14 +local WOOD_ELF = 15 +local FAE = 16 +local ARASAI = 17 +local SARNAK = 18 + +local MALE = 1 +local FEMALE = 2 + +function GenericWeaponsmithHail(NPC, Spawn, Faction) + if NPC ~= nil then + local race = GetRace(NPC) + local gender = GetGender(NPC) + + if race >= 0 and race <= 18 and gender >= 1 and gender <= 2 then + local file_option = math.random(1, 3) + local file_race_gender = 0 + if race == BARBARIAN then + if gender == MALE then + elseif gender == FEMALE then + end + elseif race == DARK_ELF then + if gender == MALE then + elseif gender == FEMALE then + end + elseif race == DWARF then + if gender == MALE then + elseif gender == FEMALE then + end + elseif race == ERUDITE then + if gender == MALE then + elseif gender == FEMALE then + end + elseif race == FROGLOK then + if gender == MALE then + elseif gender == FEMALE then + end + elseif race == GNOME then + if gender == MALE then + local choice = math.random(1, 4) + if choice == 1 then + PlayFlavor(NPC, "voiceover/english/gnome_eco_good_1/ft/service/weaponsmith/gnome_weaponsmith_service_good_1_hail_gm_1248b278.mp3", "I just got a shipment in from the Far Sea's Trading Company. I don't just show anybody this stuff so, shhhh! ", "wink", 2730095756, 1896311415, Spawn) + elseif choice == 2 then + PlayFlavor(NPC, "voiceover/english/smithy_findlebop/qey_village06/100_smithy_findlebop_multhail1_aa73007b.mp3", "Now, if I can only figure out how the sprocket will fit in this device, I'll be set! Why are you interrupting my work? Can't you see I'm busy? Go away!", "", 3823811804, 70891212, Spawn) + elseif choice == 3 then + PlayFlavor(NPC, "voiceover/english/smithy_findlebop/qey_village06/100_smithy_findlebop_multhail2_5d0f29cb.mp3", "Now, if I can only figure out how the sprocket will fit in this device, I'll be set! Why are you interrupting my work? Can't you see I'm busy?", "", 446470782, 3454872230, Spawn) + elseif choice == 4 then + PlayFlavor(NPC, "voiceover/english/gnome_eco_good_1/ft/service/weaponsmith/gnome_weaponsmith_service_good_1_hail_gm_37dbcab8.mp3", "Welcome to my humble shop. We have quite a selection of weapons to choose from. See for yourself...", "salute", 1420367370, 281045768, Spawn) + end + elseif gender == FEMALE then + end + elseif race == HALF_ELF then + if gender == MALE then + elseif gender == FEMALE then + local choice = math.random(1, 2) + if choice == 1 then + PlayFlavor(NPC, "voiceover/english/halfelf_eco_good_1/ft/service/weaponsmith/halfelf_weaponsmith_service_good_1_hail_gf_1248b278.mp3", "I just got a shipment in from the Far Sea's Trading Company. I don't just show anybody this stuff so, shhhh! ", "wink", 3358731085, 3359597024, Spawn) + elseif choice == 2 then + PlayFlavor(NPC, "voiceover/english/halfelf_eco_good_1/ft/service/weaponsmith/halfelf_weaponsmith_service_good_1_hail_gf_37dbcab8.mp3", "Welcome to my humble shop. We have quite a selection of weapons to choose from. See for yourself...", "salute", 1281347839, 1623005135, Spawn) + end + end + elseif race == HALFLING then + if gender == MALE then + elseif gender == FEMALE then + end + elseif race == HIGH_ELF then + if gender == MALE then + elseif gender == FEMALE then + end + elseif race == HUMAN then + if gender == MALE then + elseif gender == FEMALE then + end + elseif race == IKSAR then + if gender == MALE then + elseif gender == FEMALE then + end + elseif race == KERRA then + if gender == MALE then + elseif gender == FEMALE then + end + elseif race == OGRE then + if gender == MALE then + elseif gender == FEMALE then + end + elseif race == RATONGA then + if gender == MALE then + elseif gender == FEMALE then + end + elseif race == TROLL then + if gender == MALE then + elseif gender == FEMALE then + end + elseif race == WOOD_ELF then + if gender == MALE then + elseif gender == FEMALE then + end + elseif race == FAE then + if gender == MALE then + elseif gender == FEMALE then + end + elseif race == ARASAI then + if gender == MALE then + elseif gender == FEMALE then + end + elseif race == SARNAK then + if gender == MALE then + elseif gender == FEMALE then + end + end + end + end +end diff --git a/server/SpawnScripts/Generic/Geredo.lua b/server/SpawnScripts/Generic/Geredo.lua new file mode 100644 index 000000000..6c9358c2a --- /dev/null +++ b/server/SpawnScripts/Generic/Geredo.lua @@ -0,0 +1,21 @@ +--[[ + Script Name : SpawnScripts/QueensColony/Geredo.lua + Script Purpose : Geredo + Script Author : John Adams + Script Date : 2008.09.21 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + choice = math.random(1,2) + + if choice == 1 then + PlayFlavor(NPC, "voiceover/english/geredo/boat_06p_tutorial02_fvo_002.mp3", "Thinking I should design a new mechanical boat. It would be perfect! Yes, perfect indeed!", "ponder", 2630458163, 1309095480) + elseif choice == 2 then + PlayFlavor(NPC, "voiceover/english/geredo/boat_06p_tutorial02_fvo_001.mp3", "Do you happen to have any mechanical leg extenders? I want to see the water.", "agree", 2902186099, 1357276764) + else + end + +end + diff --git a/server/SpawnScripts/Generic/HelmsmanNyles.lua b/server/SpawnScripts/Generic/HelmsmanNyles.lua new file mode 100644 index 000000000..d454521e8 --- /dev/null +++ b/server/SpawnScripts/Generic/HelmsmanNyles.lua @@ -0,0 +1,21 @@ +--[[ + Script Name : SpawnScripts/OutpostOverlord/HelmsmanNyles.lua + Script Purpose : Helmsman Nyles + Script Author : John Adams + Script Date : 2008.09.23 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +function hailed(NPC, Spawn) + + choice = math.random(1,2) + + if choice == 1 then + PlayFlavor(NPC, "", "Crazy! What are you talking about?", "", 1689589577, 4560189, Spawn) + elseif choice == 2 then + PlayFlavor(NPC, "", "Land! I see land!", "", 1689589577, 4560189, Spawn) + else + end + +end + diff --git a/server/SpawnScripts/Generic/Ingrid.lua b/server/SpawnScripts/Generic/Ingrid.lua new file mode 100644 index 000000000..0f4839318 --- /dev/null +++ b/server/SpawnScripts/Generic/Ingrid.lua @@ -0,0 +1,21 @@ +--[[ + Script Name : SpawnScripts/QueensColony/Ingrid.lua + Script Purpose : Ingrid + Script Author : John Adams + Script Date : 2008.09.21 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + choice = math.random(1,2) + + if choice == 1 then + PlayFlavor(NPC, "voiceover/english/ingrid/boat_06p_tutorial02_fvo_009.mp3", "I hate rats, every time we dock they get on board and eat our supplies.", "", 3636322414, 1973183674) + elseif choice == 2 then + PlayFlavor(NPC, "voiceover/english/ingrid/boat_06p_tutorial02_fvo_008.mp3", "Don't you just love the sea?", "", 541733813, 1294072887) + else + end + +end + diff --git a/server/SpawnScripts/Generic/MovementCircleSmall.lua b/server/SpawnScripts/Generic/MovementCircleSmall.lua new file mode 100644 index 000000000..a50d47316 --- /dev/null +++ b/server/SpawnScripts/Generic/MovementCircleSmall.lua @@ -0,0 +1,60 @@ +--[[ + Script Name : SpawnScripts/Generic/MovementCircleSmall.lua + Script Purpose : Randomly chooses a small circle for the spawn to take + Script Author : Scatman + Script Date : 2009.10.27 + Script Notes : +--]] + +function SpawnChooseRandomMovement(NPC) + local choice = math.random(1, 4) + if choice == 1 then + clockwise1(NPC) + elseif choice == 2 then + clockwise2(NPC) + elseif choice == 3 then + counter_clockwise1(NPC) + elseif choice == 4 then + counter_clockwise2(NPC) + end +end + +function clockwise1(NPC) + local x = GetX(NPC) + local y = GetY(NPC) + local z = GetZ(NPC) + MovementLoopAddLocation(NPC, x + 7 , y, z - 8 , 2, math.random(5, 15)) + MovementLoopAddLocation(NPC, x - 5 , y, z - 10, 2, math.random(5, 15)) + MovementLoopAddLocation(NPC, x - 10, y, z + 9 , 2, math.random(5, 15)) + MovementLoopAddLocation(NPC, x + 5 , y, z + 8 , 2, math.random(5, 15)) +end + +function clockwise2(NPC) + local x = GetX(NPC) + local y = GetY(NPC) + local z = GetZ(NPC) + MovementLoopAddLocation(NPC, x + 2 , y, z - 8 , 2, math.random(5, 15)) + MovementLoopAddLocation(NPC, x - 7 , y, z - 5 , 2, math.random(5, 15)) + MovementLoopAddLocation(NPC, x , y, z + 6 , 2, math.random(5, 15)) + MovementLoopAddLocation(NPC, x + 9 , y, z + 1 , 2, math.random(5, 15)) +end + +function counter_clockwise1(NPC) + local x = GetX(NPC) + local y = GetY(NPC) + local z = GetZ(NPC) + MovementLoopAddLocation(NPC, x - 7 , y, z + 8 , 2, math.random(5, 15)) + MovementLoopAddLocation(NPC, x + 5 , y, z + 10, 2, math.random(5, 15)) + MovementLoopAddLocation(NPC, x + 10, y, z - 9 , 2, math.random(5, 15)) + MovementLoopAddLocation(NPC, x - 5 , y, z - 8 , 2, math.random(5, 15)) +end + +function counter_clockwise2(NPC) + local x = GetX(NPC) + local y = GetY(NPC) + local z = GetZ(NPC) + MovementLoopAddLocation(NPC, x - 2 , y, z + 8 , 2, math.random(5, 15)) + MovementLoopAddLocation(NPC, x + 7 , y, z + 5 , 2, math.random(5, 15)) + MovementLoopAddLocation(NPC, x , y, z - 6 , 2, math.random(5, 15)) + MovementLoopAddLocation(NPC, x - 9 , y, z - 1 , 2, math.random(5, 15)) +end diff --git a/server/SpawnScripts/Generic/OgofMystic1.lua b/server/SpawnScripts/Generic/OgofMystic1.lua new file mode 100644 index 000000000..70733d0b9 --- /dev/null +++ b/server/SpawnScripts/Generic/OgofMystic1.lua @@ -0,0 +1,44 @@ +--[[ + Script Name : SpawnScripts/Generic/OgofMystic1.lua + Script Author : gloat + Script Date : 2019.02.03 01:02:21 + Script Purpose : + : +--]] + +function spawn(NPC) + AddTimer(NPC, 900, "follow_Ogof") + +end + +function follow_Ogof(NPC) + local zone = GetZone(NPC) + local captOgof = GetSpawnByLocationID(zone, 1585710) + local whoAmI = GetSpawnLocationID(NPC) + + local ogofX = GetX(captOgof) + local ogofY = GetY(captOgof) + local ogofZ = GetZ(captOgof) + local speed = 2 + + if whoAmI == 1585709 then + if GetDistance(NPC, captOgof) >= 5 then + speed = 5 + MoveToLocation(NPC, ogofX + 4, ogofY, ogofZ + 4, speed) + else + speed = 2 + MoveToLocation(NPC, ogofX + 4, ogofY, ogofZ + 4, speed) + end + end + speed = 2 + AddTimer(NPC, 1500, "follow_Ogof") +end + + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) +end + +function respawn(NPC) + +end \ No newline at end of file diff --git a/server/SpawnScripts/Generic/Pig.lua b/server/SpawnScripts/Generic/Pig.lua new file mode 100644 index 000000000..374529239 --- /dev/null +++ b/server/SpawnScripts/Generic/Pig.lua @@ -0,0 +1,18 @@ +--[[ + Script Name : + Script Purpose : + Script Author : + Script Date : + Script Notes : +--]] + +function spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + Say(NPC, "Oink!") +end + +function respawn(NPC) +end diff --git a/server/SpawnScripts/Generic/PlayerHistory.lua b/server/SpawnScripts/Generic/PlayerHistory.lua new file mode 100644 index 000000000..0a2eb5d1e --- /dev/null +++ b/server/SpawnScripts/Generic/PlayerHistory.lua @@ -0,0 +1,19 @@ +--[[ + Script Name : SpawnScripts/Generic/PlayerHistory.lua + Script Author : smash + Script Date : 2016.09.08 05:09:11 + Script Purpose : Global Player History ID Defines + : +--]] + + +--All IDs must be unique and clearly named! + +HISTORY = { + NEK_CASTLE_SCONCE_KEY_ACCESS = 1, + NEK_CASTLE_SCONCE_ACCESS = 2, + NEK_CASTLE_LIBRARY_ACCESS = 3, + NEK_CASTLE_BASEMENT_ACCESS = 4, + NEK_CASTLE_BASEMENT_STUDY_ACCESS = 5, + BB_SCHMITTYSANDALS_STEP5_WAIT = 6 +} \ No newline at end of file diff --git a/server/SpawnScripts/Generic/RuinsDefendersVoiceOvers.lua b/server/SpawnScripts/Generic/RuinsDefendersVoiceOvers.lua new file mode 100644 index 000000000..6fbb840f9 --- /dev/null +++ b/server/SpawnScripts/Generic/RuinsDefendersVoiceOvers.lua @@ -0,0 +1,28 @@ +--[[ + Script Name : SpawnScripts/Generic/RuinsDefendersVoiceOvers.lua + Script Purpose : Voice overs for the courageous and seasoned defenders of the Ruins. + Script Author : Scatman + Script Date : 2009.08.29 + Script Notes : +--]] + +function generic_hail(NPC, Spawn) + local choice = math.random(1, 8) + if choice == 1 then + Say(NPC, "These filthy beasts are an affront to the Overlord!", Spawn) + elseif choice == 2 then + Say(NPC, "These cursed orcs can't be allowed to taint the majesty of Freeport!", Spawn) + elseif choice == 3 then + Say(NPC, "These orcs seem better armed than they were before.", Spawn) + elseif choice == 4 then + Say(NPC, "The Overlord's wishes must be executed.", Spawn) + elseif choice == 5 then + Say(NPC, "Now is the time to take back Shoreside from the Lonetusks!", Spawn) + elseif choice == 6 then + Say(NPC, "Now isn't the time for chatter. There are orcs to slay!", Spawn) + elseif choice == 7 then + Say(NPC, "We must determine what's behind this orc uprising!", Spawn) + elseif choice == 8 then + Say(NPC, "I have orders to fight, not to chit-chat.", Spawn) + end +end diff --git a/server/SpawnScripts/Generic/SparringPartners.lua b/server/SpawnScripts/Generic/SparringPartners.lua new file mode 100644 index 000000000..05356e7f7 --- /dev/null +++ b/server/SpawnScripts/Generic/SparringPartners.lua @@ -0,0 +1,18 @@ +--[[ + Script Name : SpawnScripts/QueensColony/aformidablesparringpartner.lua + Script Purpose : a formidable sparring partner + Script Author : John Adams + Script Date : 2008.09.20 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +function death(NPC, Spawn) + choice = math.random(1,2) + + if choice == 1 then + PlayFlavor(NPC, "", "Well done!", "", 1689589577, 4560189, Spawn) + else + PlayFlavor(NPC, "", "Okay, who's next?", "", 1689589577, 4560189, Spawn) + end +end + diff --git a/server/SpawnScripts/Generic/SparringPartnersGFay.lua b/server/SpawnScripts/Generic/SparringPartnersGFay.lua new file mode 100644 index 000000000..73bfcdced --- /dev/null +++ b/server/SpawnScripts/Generic/SparringPartnersGFay.lua @@ -0,0 +1,28 @@ +--[[ + Script Name : SpawnScripts/GreaterFaydark/aformidablesparringpartner.lua + Script Purpose : a formidable sparring partner + Script Author : John Adams + Script Date : 2009.02.05 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +function spawn(NPC) + SetPlayerProximityFunction(NPC, 10, "InRange", "LeaveRange") +end + +function respawn(NPC) + spawn(NPC) +end + +function InRange(NPC, Spawn) +end + +function LeaveRange(NPC, Spawn) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + + PlayFlavor(NPC, "", "You can attack me whenever you're ready. You can do that by double-clicking me, by right clicking me and selecting \"attack,\" by using an offensive ability while you have me targeted, or by turning on auto attack by pressing the ~ key while you have me targeted.", "", 1689589577, 4560189, Spawn) +end + diff --git a/server/SpawnScripts/Generic/SpawnGroups.lua b/server/SpawnScripts/Generic/SpawnGroups.lua new file mode 100644 index 000000000..850e0c223 --- /dev/null +++ b/server/SpawnScripts/Generic/SpawnGroups.lua @@ -0,0 +1,10 @@ +--[[ + Script Name : SpawnScripts/ThievesWay/ASewerSlime.lua + Script Purpose : Waypoint Path for ASewerSlime.lua + Script Author : Rylec + Script Date : 09-11-2019 08:43:31 + Script Notes : I accidently over wrote this script - please restore +--]] + + + diff --git a/server/SpawnScripts/Generic/Vim.lua b/server/SpawnScripts/Generic/Vim.lua new file mode 100644 index 000000000..aacf2cab4 --- /dev/null +++ b/server/SpawnScripts/Generic/Vim.lua @@ -0,0 +1,21 @@ +--[[ + Script Name : SpawnScripts/QueensColony/Vim.lua + Script Purpose : Vim + Script Author : John Adams + Script Date : 2008.09.21 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + choice = math.random(1,2) + + if choice == 1 then + PlayFlavor(NPC, "voiceover/english/merchant_vim/boat_06p_tutorial02/020_merchant_vim_hail_481beac8.mp3", "I love traveling the seas... Oh! Did you need something?", "sniff", 2187888771, 2112320089) + elseif choice == 2 then + PlayFlavor(NPC, "voiceover/english/merchant_vim/boat_06p_tutorial02/020_merchant_vim_hail_187fc6bb.mp3", "I am busy right now...", "no", 1835666244, 487490745) + else + end + +end + diff --git a/server/SpawnScripts/Generic/Waulon.lua b/server/SpawnScripts/Generic/Waulon.lua new file mode 100644 index 000000000..03481abbb --- /dev/null +++ b/server/SpawnScripts/Generic/Waulon.lua @@ -0,0 +1,21 @@ +--[[ + Script Name : SpawnScripts/QueensColony/Waulon.lua + Script Purpose : Waulon + Script Author : John Adams + Script Date : 2008.09.21 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + choice = math.random(1,2) + + if choice == 1 then + PlayFlavor(NPC, "voiceover/english/waulon/boat_06p_tutorial02/walon_0_004.mp3", "Where's me hat? Needs me lucky hat!", "", 2688932325, 103225044) + elseif choice == 2 then + PlayFlavor(NPC, "voiceover/english/waulon/boat_06p_tutorial02/walon_0_008.mp3", "What? Can't you see? Busy, away with ye!", "", 1608066875, 70639594) + else + end + +end + diff --git a/server/SpawnScripts/Generic/aDuskProwler_(1).lua b/server/SpawnScripts/Generic/aDuskProwler_(1).lua new file mode 100644 index 000000000..fd0d9ccb7 --- /dev/null +++ b/server/SpawnScripts/Generic/aDuskProwler_(1).lua @@ -0,0 +1,21 @@ +--[[ + Script Name : SpawnScripts/Darklight/aDuskProwler_(1).lua + Script Purpose : To Keep a dusk prowler from walking through walls + Script Author : Cynnar + Script Date : 10/13/2015 + Script Notes : A Dusk Prowler (spawn_id 340054) (spawn_location_id 579885) + Script Notes : Between Hate's Envy and the Thexian burial chamber +--]] + +function spawn(NPC) + MovementLoopAddLocation(NPC, -407.46, -60.48, 174.23, 2, math.random(5, 15)) + MovementLoopAddLocation(NPC, -420.76, -60.86, 180.15, 2, math.random(5, 15)) + MovementLoopAddLocation(NPC, -425.42, -61.32, 186.58, 2) + MovementLoopAddLocation(NPC, -424.20, -61.98, 190.47, 2, math.random(5, 15)) + MovementLoopAddLocation(NPC, -410.19, -62.87, 189.81, 2, math.random(5, 15)) + MovementLoopAddLocation(NPC, -406.82, -60.56, 174.38, 2, math.random(5, 15)) +end + +function respawn(NPC) + spawn(NPC) +end \ No newline at end of file diff --git a/server/SpawnScripts/Generic/aDuskProwler_(2).lua b/server/SpawnScripts/Generic/aDuskProwler_(2).lua new file mode 100644 index 000000000..f7350101d --- /dev/null +++ b/server/SpawnScripts/Generic/aDuskProwler_(2).lua @@ -0,0 +1,20 @@ +--[[ + Script Name : SpawnScripts/Darklight/aDuskProwler_(2).lua + Script Purpose : To Keep a dusk prowler from walking through walls + Script Author : Cynnar + Script Date : 10/14/2015 + Script Notes : A Dusk Prowler (spawn_id 340054) (spawn_location_id 579886) + Script Notes : Between Hate's Envy and the Thexian burial chamber +--]] + +function spawn(NPC) + MovementLoopAddLocation(NPC, -420.55, -61.99, 187.73, 2, math.random(5, 15)) + MovementLoopAddLocation(NPC, -421.35, -61.55, 184.83, 2) + MovementLoopAddLocation(NPC, -433.86, -60.58, 189.97, 2, math.random(5, 15)) + MovementLoopAddLocation(NPC, -436.84, -62.35, 204.51, 2, math.random(5, 15)) + MovementLoopAddLocation(NPC, -426.16, -62.16, 198.32, 2, math.random(5, 15)) +end + +function respawn(NPC) + spawn(NPC) +end \ No newline at end of file diff --git a/server/SpawnScripts/Generic/aDuskProwler_(3).lua b/server/SpawnScripts/Generic/aDuskProwler_(3).lua new file mode 100644 index 000000000..4b5888f4a --- /dev/null +++ b/server/SpawnScripts/Generic/aDuskProwler_(3).lua @@ -0,0 +1,20 @@ +--[[ + Script Name : SpawnScripts/Darklight/aDuskProwler_(3).lua + Script Purpose : To Keep a dusk prowler from walking through walls + Script Author : Cynnar + Script Date : 10/14/2015 + Script Notes : A Dusk Prowler (spawn_id 340054) (spawn_location_id 579884) + Script Notes : Between Hate's Envy and the Thexian burial chamber +--]] + +function spawn(NPC) + MovementLoopAddLocation(NPC, -440.22, -62.06, 202.13, 2, math.random(5, 15)) + MovementLoopAddLocation(NPC, -436.73, -62.59, 210.57, 2, math.random(5, 15)) + MovementLoopAddLocation(NPC, -430.28, -62.31, 202.35, 2) + MovementLoopAddLocation(NPC, -423.73, -62.66, 196.53, 2, math.random(5, 15)) + MovementLoopAddLocation(NPC, -435.33, -60.32, 189.45, 2, math.random(5, 15)) +end + +function respawn(NPC) + spawn(NPC) +end \ No newline at end of file diff --git a/server/SpawnScripts/Generic/aGigglegibberGoblinGamblinGameVendor.lua b/server/SpawnScripts/Generic/aGigglegibberGoblinGamblinGameVendor.lua new file mode 100644 index 000000000..160244a58 --- /dev/null +++ b/server/SpawnScripts/Generic/aGigglegibberGoblinGamblinGameVendor.lua @@ -0,0 +1,222 @@ +--[[ + Script Name : SpawnScripts/Darklight/aGigglegibberGoblinGamblinGameVendor.lua + Script Purpose : a Gigglegibber Goblin Gamblin' Game Vendor + Script Author : John Adams + Script Date : 2009.01.31 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +function spawn(NPC) + SetPlayerProximityFunction(NPC, 10, "InRange", "LeaveRange") +end + +function respawn(NPC) + spawn(NPC) +end + +function InRange(NPC, Spawn) +end + +function LeaveRange(NPC, Spawn) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "Thanks.") + StartConversation(conversation, NPC, Spawn, "The current jackpot is " .. GetCoinMessage(GetVariableValue("gambling_current_jackpot")) .. ".") + +--[[ + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "How did a goblin get in here? Don't you kill people?", "dlg_0_1") + AddConversationOption(conversation, "I think I'd rather keep my money, thanks.") + StartConversation(conversation, NPC, Spawn, "Buy ticket, you! Only ten shiny coins! You give just ten shiny coins and maybe you get um... many shinier coins!") + if convo==1 then + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "How did a goblin get in here? Don't you kill people?", "dlg_1_1") + AddConversationOption(conversation, "What do you know about the disappearance of Lord Bowsprite?") + AddConversationOption(conversation, "I think I'd rather keep my money, thanks.") + StartConversation(conversation, NPC, Spawn, "Buy ticket, you! Only ten shiny coins! You give just ten shiny coins and maybe you get um... many shinier coins!") + end + + if convo==2 then + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "How did a goblin get in here? Don't you kill people?", "dlg_2_1") + AddConversationOption(conversation, "What do you know about the disappearance of Lord Bowsprite?") + AddConversationOption(conversation, "I think I'd rather keep my money, thanks.") + StartConversation(conversation, NPC, Spawn, "Buy ticket, you! Only ten shiny coins! You give just ten shiny coins and maybe you get um... many shinier coins!") + end + + if convo==3 then + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "How did a goblin get in here? Don't you kill people?", "dlg_3_1") + AddConversationOption(conversation, "What do you know about the disappearance of Lord Bowsprite?") + AddConversationOption(conversation, "I think I'd rather keep my money, thanks.") + StartConversation(conversation, NPC, Spawn, "Buy ticket, you! Only ten shiny coins! You give just ten shiny coins and maybe you get um... many shinier coins!") + end + + if convo==8 then + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "How did a goblin get in here? Don't you kill people?", "dlg_8_1") + AddConversationOption(conversation, "I think I'd rather keep my money, thanks.") + StartConversation(conversation, NPC, Spawn, "Buy ticket, you! Only ten shiny coins! You give just ten shiny coins and maybe you get um... many shinier coins!") + end + + if convo==9 then + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "How did a goblin get in here? Don't you kill people?", "dlg_9_1") + AddConversationOption(conversation, "I think I'd rather keep my money, thanks.") + StartConversation(conversation, NPC, Spawn, "Buy ticket, you! Only ten shiny coins! You give just ten shiny coins and maybe you get um... many shinier coins!") + end + + if convo==10 then + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "How did a goblin get in here? Don't you kill people?", "dlg_10_1") + AddConversationOption(conversation, "I think I'd rather keep my money, thanks.") + StartConversation(conversation, NPC, Spawn, "Buy ticket, you! Only ten shiny coins! You give just ten shiny coins and maybe you get um... many shinier coins!") + end + + if convo==16 then + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "How did a goblin get in here? Don't you kill people?", "dlg_16_1") + AddConversationOption(conversation, "What do you know about the disappearance of Lord Bowsprite?") + AddConversationOption(conversation, "I think I'd rather keep my money, thanks.") + StartConversation(conversation, NPC, Spawn, "Buy ticket, you! Only ten shiny coins! You give just ten shiny coins and maybe you get um... many shinier coins!") + end + + if convo==20 then + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "How did a goblin get in here? Don't you kill people?", "dlg_20_1") + AddConversationOption(conversation, "I think I'd rather keep my money, thanks.") + StartConversation(conversation, NPC, Spawn, "Buy ticket, you! Only ten shiny coins! You give just ten shiny coins and maybe you get um... many shinier coins!") + end +--]] +end + +function dlg_0_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Bowsprite... Not Bowspit.") + AddConversationOption(conversation, "On second thought, I'll be going now.", "dlg_0_2") + StartConversation(conversation, NPC, Spawn, "Lord who? I's never met no one named Bowspit.") +end + +function dlg_0_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Who said he was an elf? Fess up or I'll tell everyone the Gigglegibber gambling game is rigged!", "dlg_0_3") + AddConversationOption(conversation, "Yeah, this is going to be like pulling teeth. Nevermind.") + StartConversation(conversation, NPC, Spawn, "Oh... Well, um, I's still don't know nothing about that elf.") +end + +function dlg_0_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Tell me where it is. You don't want me to ruin your business do you?", "dlg_0_4") + AddConversationOption(conversation, "On second thought, I'll be going now.") + StartConversation(conversation, NPC, Spawn, "Noes, noes, you can't do that! Fine, I'll tells you everything. We have Bowspit at the super secret hideout, but you can't go there. No way.") +end + +function dlg_0_4(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "You've been helpful, thanks.", "dlg_0_5") + StartConversation(conversation, NPC, Spawn, "You gonna gets me in a lot of trouble, you know. I'll tells you, but I don't exactly remember where it is. All I remember is the entrance is at the bottom of the water, under the docks, where the halfies and fairies play. We all haves to take the boat to get there. That's all I'm telling you! Now goes away.") +end + +function dlg_1_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Bowsprite... Not Bowspit.") + AddConversationOption(conversation, "On second thought, I'll be going now.", "dlg_1_2") + StartConversation(conversation, NPC, Spawn, "Lord who? I's never met no one named Bowspit.") +end + +function dlg_2_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Why are potatoes funny?", "dlg_2_2") + AddConversationOption(conversation, "On second thought, I'll be going now.") + StartConversation(conversation, NPC, Spawn, "Gigglegibber goblins not kill people! War no fun at all. Gigglegibber goblins like shiny coins and funny things! We like frogs, fluffy kittens, potatoes... You have potatoes?") +end + +function dlg_2_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "I'll think about it.", "dlg_2_3") + StartConversation(conversation, NPC, Spawn, "They tasty! Not funny!... though Gribbik carved funny face in a potato once. That was funny until he eated it. Hey! No try to tricks me with talk about potatoes. You still pays ten shiny coins for ticket! Buy many tickets! If you buys more maybe you win more than many shiny coins!") +end + +function dlg_9_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Why are potatoes funny?", "dlg_9_2") + AddConversationOption(conversation, "On second thought, I'll be going now.") + StartConversation(conversation, NPC, Spawn, "Gigglegibber goblins not kill people! War no fun at all. Gigglegibber goblins like shiny coins and funny things! We like frogs, fluffy kittens, potatoes... You have potatoes?") +end + +function dlg_9_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "I'll think about it.", "dlg_9_3") + StartConversation(conversation, NPC, Spawn, "They tasty! Not funny!... though Gribbik carved funny face in a potato once. That was funny until he eated it. Hey! No try to tricks me with talk about potatoes. You still pays ten shiny coins for ticket! Buy many tickets! If you buys more maybe you win more than many shiny coins!") +end + +function dlg_16_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Bowsprite... Not Bowspit.") + AddConversationOption(conversation, "On second thought, I'll be going now.", "dlg_16_2") + StartConversation(conversation, NPC, Spawn, "Lord who? I's never met no one named Bowspit.") +end + +function dlg_16_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Who said he was an elf? Fess up or I'll tell everyone the gambling game is rigged!", "dlg_16_3") + AddConversationOption(conversation, "On second thought, I'll be going now.") + StartConversation(conversation, NPC, Spawn, "Ohh... Well, um, I's still don't know nothing about that elf.") +end + +function dlg_16_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Tell me where it is. You don't want me to ruin your business do you?", "dlg_16_4") + AddConversationOption(conversation, "On second thought, I'll be going now.") + StartConversation(conversation, NPC, Spawn, "Noes, noes, you can't do that! Fine, I'll tells you everything. We have Bowspit at the super secret hideout, but you can't go there. No way.") +end + +function dlg_16_4(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "You've been helpful, thanks.", "dlg_16_5") + StartConversation(conversation, NPC, Spawn, "You gonna gets me in a lot of trouble, you know. I'll tells you, but I don't exactly remember where it is. All I remember is the entrance is at the bottom of the water, under the docks, where the halfies and fairies play. We all haves to take the boat to get there. That's all I'm telling you! Now goes away before no one wants tickets anymore.") +end + diff --git a/server/SpawnScripts/Generic/circle_air_clockwise_small.lua b/server/SpawnScripts/Generic/circle_air_clockwise_small.lua new file mode 100644 index 000000000..69a4c513b --- /dev/null +++ b/server/SpawnScripts/Generic/circle_air_clockwise_small.lua @@ -0,0 +1,25 @@ +--[[ + Spawn Template + Script Name : circle_air_clockwise_small_01.lua + Script Purpose : Makes the spawn do a small circle in a counter-clockwise fashion. + Script Author : Scatman + Script Date : 2008-08-26 + Script Notes : If the coords are out of bounds then the spawn will still go there. + ONLY for flying spawns!!! + + These are just suggested functions to get you started. Edit as needed. +--]] + +function spawn(NPC) + x = GetX(NPC) + y = GetY(NPC) + z = GetZ(NPC) + MovementLoopAddLocation(NPC, x - 7 , 0, z + 8 , 2, math.random(5, 45)) + MovementLoopAddLocation(NPC, x + 5 , 0, z + 10, 2, math.random(5, 45)) + MovementLoopAddLocation(NPC, x + 10, 0, z - 9 , 2, math.random(5, 45)) + MovementLoopAddLocation(NPC, x - 5 , 0, z - 8 , 2, math.random(5, 45)) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) +end \ No newline at end of file diff --git a/server/SpawnScripts/Generic/circle_clockwise_small_01.lua b/server/SpawnScripts/Generic/circle_clockwise_small_01.lua new file mode 100644 index 000000000..0708903c6 --- /dev/null +++ b/server/SpawnScripts/Generic/circle_clockwise_small_01.lua @@ -0,0 +1,25 @@ +--[[ + Script Name : SpawnScripts/Generic/circle_clockwise_small_01.lua + Script Purpose : Makes the spawn do a small circle in a clockwise fashion. + Script Author : Scatman + Script Date : 2008-08-26 + Script Notes : If the coords are out of bounds then the spawn will still go there. +--]] + +function spawn(NPC) + x = GetX(NPC) + y = GetY(NPC) + z = GetZ(NPC) + MovementLoopAddLocation(NPC, x + 7 , y, z - 8 , 2, math.random(5, 15)) + MovementLoopAddLocation(NPC, x - 5 , y, z - 10, 2, math.random(5, 15)) + MovementLoopAddLocation(NPC, x - 10, y, z + 9 , 2, math.random(5, 15)) + MovementLoopAddLocation(NPC, x + 5 , y, z + 8 , 2, math.random(5, 15)) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) +end \ No newline at end of file diff --git a/server/SpawnScripts/Generic/circle_clockwise_small_02.lua b/server/SpawnScripts/Generic/circle_clockwise_small_02.lua new file mode 100644 index 000000000..3b2ae2fd5 --- /dev/null +++ b/server/SpawnScripts/Generic/circle_clockwise_small_02.lua @@ -0,0 +1,35 @@ +--[[ + Spawn Template + Script Name : circle_clockwise_small_02.lua + Script Purpose : Makes the spawn do a small circle in a clockwise fashion. + Script Author : Scatman + Script Date : 2008-08-26 + Script Notes : If the coords are out of bounds then the spawn will still go there. + + These are just suggested functions to get you started. Edit as needed. +--]] + +function spawn(NPC) + x = GetX(NPC) + y = GetY(NPC) + z = GetZ(NPC) + MovementLoopAddLocation(NPC, x + 2 , y, z - 8 , 2, math.random(5, 15)) + MovementLoopAddLocation(NPC, x - 7 , y, z - 5 , 2, math.random(5, 15)) + MovementLoopAddLocation(NPC, x , y, z + 6 , 2, math.random(5, 15)) + MovementLoopAddLocation(NPC, x + 9 , y, z + 1 , 2, math.random(5, 15)) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) +end + +--[[ + PlayFlavor(NPC, "", "Wha... what happened? I should get back to the colony!", "", 1689589577, 4560189) + PlayFlavor(NPC, "", "Whe... where am I? I should get back to the colony!", "", 1689589577, 4560189) + PlayFlavor(NPC, "", "Whew, thank you! I couldn't hold on much longer.", "", 1689589577, 4560189) + PlayFlavor(NPC, "", "Ahhhhh! I must escape!", "", 1689589577, 4560189) +--]] diff --git a/server/SpawnScripts/Generic/circle_counterclockwise_small_01.lua b/server/SpawnScripts/Generic/circle_counterclockwise_small_01.lua new file mode 100644 index 000000000..6ac5729ba --- /dev/null +++ b/server/SpawnScripts/Generic/circle_counterclockwise_small_01.lua @@ -0,0 +1,28 @@ +--[[ + Spawn Template + Script Name : circle_clockwise_small_01.lua + Script Purpose : Makes the spawn do a small circle in a counter-clockwise fashion. + Script Author : Scatman + Script Date : 2008-08-26 + Script Notes : If the coords are out of bounds then the spawn will still go there. + + These are just suggested functions to get you started. Edit as needed. +--]] + +function spawn(NPC) + x = GetX(NPC) + y = GetY(NPC) + z = GetZ(NPC) + MovementLoopAddLocation(NPC, x - 7 , y, z + 8 , 2, math.random(5, 15)) + MovementLoopAddLocation(NPC, x + 5 , y, z + 10, 2, math.random(5, 15)) + MovementLoopAddLocation(NPC, x + 10, y, z - 9 , 2, math.random(5, 15)) + MovementLoopAddLocation(NPC, x - 5 , y, z - 8 , 2, math.random(5, 15)) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) +end \ No newline at end of file diff --git a/server/SpawnScripts/Generic/circle_counterclockwise_small_02.lua b/server/SpawnScripts/Generic/circle_counterclockwise_small_02.lua new file mode 100644 index 000000000..277577110 --- /dev/null +++ b/server/SpawnScripts/Generic/circle_counterclockwise_small_02.lua @@ -0,0 +1,28 @@ +--[[ + Spawn Template + Script Name : circle_counterclockwise_small_02.lua + Script Purpose : Makes the spawn do a small circle in a counter-clockwise fashion. + Script Author : Scatman + Script Date : 2008-08-26 + Script Notes : If the coords are out of bounds then the spawn will still go there. + + These are just suggested functions to get you started. Edit as needed. +--]] + +function spawn(NPC) + x = GetX(NPC) + y = GetY(NPC) + z = GetZ(NPC) + MovementLoopAddLocation(NPC, x - 2 , y, z + 8 , 2, math.random(5, 15)) + MovementLoopAddLocation(NPC, x + 7 , y, z + 5 , 2, math.random(5, 15)) + MovementLoopAddLocation(NPC, x , y, z - 6 , 2, math.random(5, 15)) + MovementLoopAddLocation(NPC, x - 9 , y, z - 1 , 2, math.random(5, 15)) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) +end \ No newline at end of file diff --git a/server/SpawnScripts/Generic/dancing_script.lua b/server/SpawnScripts/Generic/dancing_script.lua new file mode 100644 index 000000000..ab7419f80 --- /dev/null +++ b/server/SpawnScripts/Generic/dancing_script.lua @@ -0,0 +1,25 @@ +--[[ + Script Name : SpawnScripts/Generic/dancing_script.lua + Script Author : Cynnar + Script Date : 2018.06.02 11:06:55 + Script Purpose : because I am bored + : +--]] + +function spawn(NPC) + MakeDance(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) +end + +function respawn(NPC) + +end + +function MakeDance(NPC) + PlayFlavor(NPC, "", "", "dance", 0, 0) + AddTimer(NPC, 8500, "MakeDance") +end + diff --git a/server/SpawnScripts/Generic/generic_fish_movement.lua b/server/SpawnScripts/Generic/generic_fish_movement.lua new file mode 100644 index 000000000..5fdc2a65d --- /dev/null +++ b/server/SpawnScripts/Generic/generic_fish_movement.lua @@ -0,0 +1,75 @@ +--[[ + Script Name : SpawnScripts/Generic/generic_fish_movement.lua + Script Purpose : Randomly chooses a path for the spawn to take + Script Author : theFoof + Script Date : 2013.5.16 + Script Notes : +--]] + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) +end + +function spawn(NPC) + ChooseMovement(NPC) +end + +function respawn(NPC) +end + +function ChooseMovement(NPC) + local route = math.random(1,4) + if route == 1 then + Route1(NPC) + elseif route == 2 then + Route2(NPC) + elseif route == 3 then + Route3(NPC) + elseif route == 4 then + Route4(NPC) + end +end + +function Route1(NPC) + local X = GetX(NPC) + local Y = GetY(NPC) + local Z = GetZ(NPC) + MovementLoopAddLocation(NPC, X, Y, Z, 2, math.random(5,20)) + MovementLoopAddLocation(NPC, X + 6, Y + 2, Z - 3, 2, math.random(20,60)) + MovementLoopAddLocation(NPC, X - 4, Y + 3, Z - 8, 2, math.random(20,60)) + MovementLoopAddLocation(NPC, X - 7, Y - 9, Z + 2, 2, math.random(20,60)) + MovementLoopAddLocation(NPC, X + 9, Y - 8, Z + 10, 2, math.random(20,60)) +end + +function Route2(NPC) + local X = GetX(NPC) + local Y = GetY(NPC) + local Z = GetZ(NPC) + MovementLoopAddLocation(NPC, X, Y, Z, 2, math.random(5,20)) + MovementLoopAddLocation(NPC, X - 6, Y - 2, Z + 3, 2, math.random(20,60)) + MovementLoopAddLocation(NPC, X + 4, Y - 5, Z + 8, 2, math.random(20,60)) + MovementLoopAddLocation(NPC, X + 7, Y + 3, Z - 2, 2, math.random(20,60)) + MovementLoopAddLocation(NPC, X - 9, Y + 3, Z - 10, 2, math.random(20,60)) +end + +function Route3(NPC) + local X = GetX(NPC) + local Y = GetY(NPC) + local Z = GetZ(NPC) + MovementLoopAddLocation(NPC, X, Y, Z, 2, math.random(5,20)) + MovementLoopAddLocation(NPC, X - 3, Y - 2, Z + 6, 2, math.random(20,60)) + MovementLoopAddLocation(NPC, X + 8, Y - 5, Z + 4, 2, math.random(20,60)) + MovementLoopAddLocation(NPC, X - 2, Y + 3, Z + 7, 2, math.random(20,60)) + MovementLoopAddLocation(NPC, X - 10, Y + 3, Z - 9, 2, math.random(20,60)) +end + +function Route4(NPC) + local X = GetX(NPC) + local Y = GetY(NPC) + local Z = GetZ(NPC) + MovementLoopAddLocation(NPC, X, Y, Z, 2, math.random(5,20)) + MovementLoopAddLocation(NPC, X + 6, Y - 2, Z - 3, 2, math.random(20,60)) + MovementLoopAddLocation(NPC, X - 4, Y - 5, Z - 8, 2, math.random(20,60)) + MovementLoopAddLocation(NPC, X - 7, Y + 3, Z + 2, 2, math.random(20,60)) + MovementLoopAddLocation(NPC, X + 9, Y + 3, Z + 10, 2, math.random(20,60)) +end \ No newline at end of file diff --git a/server/SpawnScripts/Generic/hailed_facetarget.lua b/server/SpawnScripts/Generic/hailed_facetarget.lua new file mode 100644 index 000000000..24f26ecf6 --- /dev/null +++ b/server/SpawnScripts/Generic/hailed_facetarget.lua @@ -0,0 +1,11 @@ +--[[ + Script Name : SpawnScripts/Generic/hailed_facetarget.lua + Script Purpose : has the npc face a spawn that hails the npc + Script Author : theFoof + Script Date : 2013.5.22 + Script Notes : +--]] + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) +end \ No newline at end of file diff --git a/server/SpawnScripts/Generic/hello_emote.lua b/server/SpawnScripts/Generic/hello_emote.lua new file mode 100644 index 000000000..98ec86420 --- /dev/null +++ b/server/SpawnScripts/Generic/hello_emote.lua @@ -0,0 +1,23 @@ +--[[ + Script Name : SpawnScripts/Generic/hello_emote.lua + Script Purpose : performs the hello emote + Script Author : theFoof + Script Date : 2013.9.16 + Script Notes : +--]] + +function spawn(NPC) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + hello(NPC, Spawn) +end + +function hello(NPC, Spawn) + PlayFlavor(NPC, "", "", "hello", 0, 0 , Spawn) +end \ No newline at end of file diff --git a/server/SpawnScripts/Generic/magic_door.lua b/server/SpawnScripts/Generic/magic_door.lua new file mode 100644 index 000000000..2a94cec06 --- /dev/null +++ b/server/SpawnScripts/Generic/magic_door.lua @@ -0,0 +1,20 @@ +--[[ + Script Name : SpawnScripts/Generic/magic_door.lua + Script Purpose : Tradeskill doors that open when you come within 10 feet + Script Author : John Adams + Script Date : 2008.09.27 + Script Notes : Need to find a way to send Open commands to door widgets +--]] + +function spawn(NPC) + SetPlayerProximityFunction(NPC, 10, "OpenDoor", "CloseDoor") +end + +function respawn(NPC) +end + +function OpenDoor(NPC, Spawn) +end + +function CloseDoor(NPC, Spawn) +end diff --git a/server/SpawnScripts/Generic/movement_circle_medium.lua b/server/SpawnScripts/Generic/movement_circle_medium.lua new file mode 100644 index 000000000..2501b6bb1 --- /dev/null +++ b/server/SpawnScripts/Generic/movement_circle_medium.lua @@ -0,0 +1,68 @@ +--[[ + Script Name : SpawnScripts/Generic/movement_circle_medium.lua + Script Purpose : Randomly chooses a medium circle for the spawn to take + Script Author : theFoof + Script Date : 2013.5.22 + Script Notes : larger version of movement_cirlce_small.lua (written by Scatman) +--]] + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) +end + +function spawn(NPC) + SpawnChooseRandomMovement(NPC) +end + +function SpawnChooseRandomMovement(NPC) + local choice = math.random(1, 4) + if choice == 1 then + clockwise1(NPC) + elseif choice == 2 then + clockwise2(NPC) + elseif choice == 3 then + counter_clockwise1(NPC) + elseif choice == 4 then + counter_clockwise2(NPC) + end +end + +function clockwise1(NPC) + local x = GetX(NPC) + local y = GetY(NPC) + local z = GetZ(NPC) + MovementLoopAddLocation(NPC, x + 12 , y, z - 13 , 2, math.random(5, 15)) + MovementLoopAddLocation(NPC, x - 10 , y, z - 15, 2, math.random(5, 15)) + MovementLoopAddLocation(NPC, x - 15, y, z + 14 , 2, math.random(5, 15)) + MovementLoopAddLocation(NPC, x + 10 , y, z + 13 , 2, math.random(5, 15)) +end + +function clockwise2(NPC) + local x = GetX(NPC) + local y = GetY(NPC) + local z = GetZ(NPC) + MovementLoopAddLocation(NPC, x + 7 , y, z - 13 , 2, math.random(5, 15)) + MovementLoopAddLocation(NPC, x - 12 , y, z - 10 , 2, math.random(5, 15)) + MovementLoopAddLocation(NPC, x , y, z + 11 , 2, math.random(5, 15)) + MovementLoopAddLocation(NPC, x + 14 , y, z + 6 , 2, math.random(5, 15)) +end + +function counter_clockwise1(NPC) + local x = GetX(NPC) + local y = GetY(NPC) + local z = GetZ(NPC) + MovementLoopAddLocation(NPC, x - 12 , y, z + 13 , 2, math.random(5, 15)) + MovementLoopAddLocation(NPC, x + 10 , y, z + 15, 2, math.random(5, 15)) + MovementLoopAddLocation(NPC, x + 15, y, z - 14 , 2, math.random(5, 15)) + MovementLoopAddLocation(NPC, x - 10 , y, z - 13 , 2, math.random(5, 15)) +end + +function counter_clockwise2(NPC) + local x = GetX(NPC) + local y = GetY(NPC) + local z = GetZ(NPC) + MovementLoopAddLocation(NPC, x - 7 , y, z + 13 , 2, math.random(5, 15)) + MovementLoopAddLocation(NPC, x + 12 , y, z + 10 , 2, math.random(5, 15)) + MovementLoopAddLocation(NPC, x , y, z - 11 , 2, math.random(5, 15)) + MovementLoopAddLocation(NPC, x - 14 , y, z - 6 , 2, math.random(5, 15)) +end diff --git a/server/SpawnScripts/Generic/movement_circle_small.lua b/server/SpawnScripts/Generic/movement_circle_small.lua new file mode 100644 index 000000000..a6429ed9f --- /dev/null +++ b/server/SpawnScripts/Generic/movement_circle_small.lua @@ -0,0 +1,72 @@ +--[[ + Script Name : SpawnScripts/Generic/movement_circle_small.lua + Script Purpose : Generic Movement Script (small circles) + Script Author : Scatman + Script Date : 2009.03.01 + Script Notes : +--]] + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) +end + +function spawn(NPC) + MovementChoice(NPC) +end + +function MovementChoice(NPC) + local choice = math.random(1, 4) + if choice == 1 then + clockwise1(NPC) + elseif choice == 2 then + clockwise2(NPC) + elseif choice == 3 then + counter_clockwise1(NPC) + elseif choice == 4 then + counter_clockwise2(NPC) + end +end + +function respawn(NPC) + spawn(NPC) +end + +function clockwise1(NPC) + local x = GetX(NPC) + local y = GetY(NPC) + local z = GetZ(NPC) + MovementLoopAddLocation(NPC, x + 7 , y, z - 8 , 2, math.random(5, 15)) + MovementLoopAddLocation(NPC, x - 5 , y, z - 10, 2, math.random(5, 15)) + MovementLoopAddLocation(NPC, x - 10, y, z + 9 , 2, math.random(5, 15)) + MovementLoopAddLocation(NPC, x + 5 , y, z + 8 , 2, math.random(5, 15)) +end + +function clockwise2(NPC) + local x = GetX(NPC) + local y = GetY(NPC) + local z = GetZ(NPC) + MovementLoopAddLocation(NPC, x + 2 , y, z - 8 , 2, math.random(5, 15)) + MovementLoopAddLocation(NPC, x - 7 , y, z - 5 , 2, math.random(5, 15)) + MovementLoopAddLocation(NPC, x , y, z + 6 , 2, math.random(5, 15)) + MovementLoopAddLocation(NPC, x + 9 , y, z + 1 , 2, math.random(5, 15)) +end + +function counter_clockwise1(NPC) + local x = GetX(NPC) + local y = GetY(NPC) + local z = GetZ(NPC) + MovementLoopAddLocation(NPC, x - 7 , y, z + 8 , 2, math.random(5, 15)) + MovementLoopAddLocation(NPC, x + 5 , y, z + 10, 2, math.random(5, 15)) + MovementLoopAddLocation(NPC, x + 10, y, z - 9 , 2, math.random(5, 15)) + MovementLoopAddLocation(NPC, x - 5 , y, z - 8 , 2, math.random(5, 15)) +end + +function counter_clockwise2(NPC) + local x = GetX(NPC) + local y = GetY(NPC) + local z = GetZ(NPC) + MovementLoopAddLocation(NPC, x - 2 , y, z + 8 , 2, math.random(5, 15)) + MovementLoopAddLocation(NPC, x + 7 , y, z + 5 , 2, math.random(5, 15)) + MovementLoopAddLocation(NPC, x , y, z - 6 , 2, math.random(5, 15)) + MovementLoopAddLocation(NPC, x - 9 , y, z - 1 , 2, math.random(5, 15)) +end diff --git a/server/SpawnScripts/Generic/private_spawn.lua b/server/SpawnScripts/Generic/private_spawn.lua new file mode 100644 index 000000000..cf50331f6 --- /dev/null +++ b/server/SpawnScripts/Generic/private_spawn.lua @@ -0,0 +1,15 @@ +--[[ + Script Name : SpawnScripts/Generic/private_spawn.lua + Script Purpose : only used to make a spawn private + Script Author : theFoof + Script Date : 2013.6.12 + Script Notes : +--]] + +function spawn(NPC) + AddSpawnAccess(NPC, NPC) +end + +function respawn(NPC) + spawn(NPC) +end \ No newline at end of file diff --git a/server/SpawnScripts/Generic/random_pattern_small.lua b/server/SpawnScripts/Generic/random_pattern_small.lua new file mode 100644 index 000000000..66512d114 --- /dev/null +++ b/server/SpawnScripts/Generic/random_pattern_small.lua @@ -0,0 +1,79 @@ +--[[ + Script Name : SpawnScripts/Generic/random_pattern_small.lua + Script Purpose : chooses a random route of a particular pattern + Script Author : theFoof + Script Date : 2013.5.16 + Script Notes : If the coords are out of bounds then the spawn will still go there. +--]] +function spawn(NPC) + ChooseMovement(NPC) +end + +function ChooseMovement(NPC) + local route = math.random(1,4) + if route == 1 then + RouteOne(NPC, Spawn) + elseif route == 2 then + RouteTwo(NPC, Spawn) + elseif route == 3 then + RouteThree(NPC, Spawn) + elseif route == 4 then + RouteFour(NPC, Spawn) + end +end + +function RouteOne(NPC, Spawn) + local X = GetX(NPC) + local Y = GetY(NPC) + local Z = GetZ(NPC) + MovementLoopAddLocation(NPC, X, Y, Z, 2, math.random(2,10)) + MovementLoopAddLocation(NPC, X + 4, Y, Z, 2, math.random(20,45)) + MovementLoopAddLocation(NPC, X + 4, Y, Z + 4, 2, math.random(20,45)) + MovementLoopAddLocation(NPC, X + 7, Y, Z, 2, math.random(20,45)) + MovementLoopAddLocation(NPC, X + 4, Y, Z + 4, 2, math.random(20,45)) + MovementLoopAddLocation(NPC, X, Y, Z, 2, math.random(20,45)) +end + +function RouteTwo(NPC, Spawn) + local X = GetX(NPC) + local Y = GetY(NPC) + local Z = GetZ(NPC) + MovementLoopAddLocation(NPC, X, Y, Z, 2, math.random(2,10)) + MovementLoopAddLocation(NPC, X - 4, Y, Z, 2, math.random(20,45)) + MovementLoopAddLocation(NPC, X - 4, Y, Z - 4, 2, math.random(20,45)) + MovementLoopAddLocation(NPC, X - 7, Y, Z, 2, math.random(20,45)) + MovementLoopAddLocation(NPC, X - 4, Y, Z - 4, 2, math.random(20,45)) + MovementLoopAddLocation(NPC, X, Y, Z, 1, math.random(20,45)) +end + +function RouteThree(NPC, Spawn) + local X = GetX(NPC) + local Y = GetY(NPC) + local Z = GetZ(NPC) + MovementLoopAddLocation(NPC, X, Y, Z, 2, math.random(2,10)) + MovementLoopAddLocation(NPC, X + 4, Y, Z, 2, math.random(20,45)) + MovementLoopAddLocation(NPC, X + 4, Y, Z - 4, 2, math.random(20,45)) + MovementLoopAddLocation(NPC, X + 7, Y, Z, 2, math.random(20,45)) + MovementLoopAddLocation(NPC, X + 4, Y, Z - 4, 2, math.random(20,45)) + MovementLoopAddLocation(NPC, X, Y, Z, 2, math.random(20,45)) +end + +function RouteFour(NPC, Spawn) + local X = GetX(NPC) + local Y = GetY(NPC) + local Z = GetZ(NPC) + MovementLoopAddLocation(NPC, X, Y, Z, 2, math.random(2,10)) + MovementLoopAddLocation(NPC, X - 4, Y, Z, 2, math.random(20,45)) + MovementLoopAddLocation(NPC, X - 4, Y, Z + 4, 2, math.random(20,45)) + MovementLoopAddLocation(NPC, X - 7, Y, Z, 2, math.random(20,45)) + MovementLoopAddLocation(NPC, X - 4, Y, Z + 4, 2, math.random(20,45)) + MovementLoopAddLocation(NPC, X, Y, Z, 2, math.random(20,45)) +end + +function respawn(NPC, Spawn) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) +end \ No newline at end of file diff --git a/server/SpawnScripts/Generic/tiny_movement_loop.lua b/server/SpawnScripts/Generic/tiny_movement_loop.lua new file mode 100644 index 000000000..5a6ea4190 --- /dev/null +++ b/server/SpawnScripts/Generic/tiny_movement_loop.lua @@ -0,0 +1,71 @@ +--[[ + Script Name : SpawnScripts/Generic/tiny_movement_loop.lua + Script Purpose : a tiny movement loop + Script Author : theFoof + Script Date : 2013.5.22 + Script Notes : +--]] +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) +end + +function spawn(NPC) + ChooseMovement(NPC) +end + +function ChooseMovement(NPC) + local choice = math.random(1, 4) + if choice == 1 then + clockwise1(NPC) + elseif choice == 2 then + clockwise2(NPC) + elseif choice == 3 then + counter_clockwise1(NPC) + elseif choice == 4 then + counter_clockwise2(NPC) + end +end + +function respawn(NPC) + spawn(NPC) +end + +function clockwise1(NPC) + local x = GetX(NPC) + local y = GetY(NPC) + local z = GetZ(NPC) + MovementLoopAddLocation(NPC, x + 3 , y, z - 4 , 1, math.random(2, 5)) + MovementLoopAddLocation(NPC, x - 1 , y, z - 6, 1, math.random(2, 5)) + --MovementLoopAddLocation(NPC, x - 6, y, z + 5 , 1, math.random(2, 5)) + --MovementLoopAddLocation(NPC, x + 1 , y, z + 4 , 1, math.random(2, 5)) +end + +function clockwise2(NPC) + local x = GetX(NPC) + local y = GetY(NPC) + local z = GetZ(NPC) + MovementLoopAddLocation(NPC, x + 2 , y, z - 4 , 1, math.random(2, 5)) + MovementLoopAddLocation(NPC, x - 7 , y, z - 1 , 1, math.random(2, 5)) + --MovementLoopAddLocation(NPC, x , y, z + 2 , 1, math.random(2, 5)) + --MovementLoopAddLocation(NPC, x + 5 , y, z + 1 , 1, math.random(2, 5)) +end + +function counter_clockwise1(NPC) + local x = GetX(NPC) + local y = GetY(NPC) + local z = GetZ(NPC) + MovementLoopAddLocation(NPC, x - 3 , y, z + 4 , 1, math.random(2, 5)) + MovementLoopAddLocation(NPC, x + 1 , y, z + 6, 1, math.random(2, 5)) + --MovementLoopAddLocation(NPC, x + 4, y, z - 5 , 1, math.random(2, 5)) + --MovementLoopAddLocation(NPC, x - 1 , y, z - 4 , 1, math.random(2, 5)) +end + +function counter_clockwise2(NPC) + local x = GetX(NPC) + local y = GetY(NPC) + local z = GetZ(NPC) + MovementLoopAddLocation(NPC, x - 2 , y, z + 4 , 1, math.random(2, 5)) + MovementLoopAddLocation(NPC, x + 3 , y, z + 1 , 1, math.random(2, 5)) + --MovementLoopAddLocation(NPC, x , y, z - 2 , 1, math.random(2, 5)) + --MovementLoopAddLocation(NPC, x - 5 , y, z - 1 , 1, math.random(2, 5)) +end diff --git a/server/SpawnScripts/Graveyard/CustodianZaddarSullissia.lua b/server/SpawnScripts/Graveyard/CustodianZaddarSullissia.lua new file mode 100644 index 000000000..a7d269115 --- /dev/null +++ b/server/SpawnScripts/Graveyard/CustodianZaddarSullissia.lua @@ -0,0 +1,1156 @@ +--[[ + Script Name : SpawnScripts/Graveyard/CustodianZaddarSullissia.lua + Script Purpose : Custodian Zaddar Sullissia + Script Author : Scatman + Script Date : 2009.04.11 + Script Notes : +--]] + +local DARKELF_MENTOR_QUEST_5 = 195 +local QUEST_1 = 231 +local QUEST_2 = 232 +local QUEST_3 = 233 +local QUEST_4 = 234 +local QUEST_5 = 235 +local QUEST_6 = 236 +local QUEST_7 = 238 +local QUEST_8 = 251 + +function spawn(NPC) + ProvidesQuest(NPC, QUEST_1) + ProvidesQuest(NPC, QUEST_2) + ProvidesQuest(NPC, QUEST_4) + ProvidesQuest(NPC, QUEST_5) + ProvidesQuest(NPC, QUEST_6) + ProvidesQuest(NPC, QUEST_7) + ProvidesQuest(NPC, QUEST_8) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + if HasQuest(Spawn, DARKELF_MENTOR_QUEST_5) then + AddConversationOption(conversation, "My name is " .. GetName(Spawn) .. ". Aldera V'exxa in Longshadow Alley sent me to speak to you.", "dlg_0_1") + end + + if HasCompletedQuest(Spawn, QUEST_1) then + if HasCompletedQuest(Spawn, QUEST_2) then + if HasCompletedQuest(Spawn, QUEST_3) then + if HasCompletedQuest(Spawn, QUEST_4) then + if HasCompletedQuest(Spawn, QUEST_5) then + if HasCompletedQuest(Spawn, QUEST_6) then + if HasCompletedQuest(Spawn, QUEST_7) then + if HasCompletedQuest(Spawn, QUEST_8) then + Say(NPC, "Good to see you! Thank you for your help. The Overlord is quite pleased!", Spawn) + elseif HasQuest(Spawn, QUEST_8) then + OnQuest8(NPC, Spawn, conversation) + else + YourAssistance(NPC, Spawn, conversation) + end + elseif HasQuest(Spawn, QUEST_7) then + OnQuest7(NPC, Spawn, conversation) + else + ExcellentWork(NPC, Spawn, conversation) + end + elseif HasQuest(Spawn, QUEST_6) then + OnQuest6(NPC, Spawn, conversation) + else + OfferQuest6(NPC, Spawn) + end + elseif HasQuest(Spawn, QUEST_5) then + OnQuest5(NPC, Spawn, conversation) + else + FinishTranslation(NPC, Spawn, conversation) + end + elseif HasQuest(Spawn, QUEST_4) then + OnQuest4(NPC, Spawn, conversation) + else + HearingMore(NPC, Spawn, conversation) + end + elseif HasQuest(Spawn, QUEST_3) then + OnQuest3(NPC, Spawn, conversation) + else + OnQuest2(NPC, Spawn, conversation) + end + elseif HasQuest(Spawn, QUEST_2) then + OnQuest2(NPC, Spawn, conversation) + else + PleasedToHear(NPC, Spawn) + end + elseif HasQuest(Spawn, QUEST_1) then + OnQuest1(NPC, Spawn, conversation) + else + HmmWhoMightYouBe(NPC, Spawn, conversation) + end +end + +------------------------------------------------------------------------------------------------------------------------ +-- DARKELF_MENTOR_QUEST_5 +------------------------------------------------------------------------------------------------------------------------ + +function HmmWhoMightYouBe(NPC, Spawn, conversation) + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/custodian_zaddar_sullissia/fprt_adv02_graveyard/custodian_zaddar001.mp3", "", "", 1088752070, 3560573286, Spawn) + AddConversationOption(conversation, "Who are you?", "dlg_1_1") + AddConversationOption(conversation, "Maybe another time.") + StartConversation(conversation, NPC, Spawn, "Hmmmm, and who might you be? Come forward so I can look upon you, stranger.") +end + +function dlg_0_1(NPC, Spawn) + SetStepComplete(Spawn, DARKELF_MENTOR_QUEST_5, 1) + + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/custodian_zaddar_sullissia/fprt_adv02_graveyard/custodian_zaddar002.mp3", "", "", 2597518553, 302585905, Spawn) + + if not HasCompletedQuest(Spawn, QUEST_1) or not HasQuest(Spawn, QUEST_1) then + AddConversationOption(conversation, "I am honored that you know my name.", "dlg_1_1") + end + AddConversationOption(conversation, "I must be going.") + StartConversation(conversation, NPC, Spawn, "Ah, yes. You look exactly how you were described to me.") +end + +------------------------------------------------------------------------------------------------------------------------ +-- QUEST 1 +------------------------------------------------------------------------------------------------------------------------ + +function dlg_1_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/custodian_zaddar_sullissia/fprt_adv02_graveyard/custodian_zaddar004.mp3", "", "", 1305194429, 389290404, Spawn) + AddConversationOption(conversation, "Well, what is your name?", "dlg_1_2") + AddConversationOption(conversation, "How rude!") + StartConversation(conversation, NPC, Spawn, "You mean to tell me you've never heard of me? Well, I shouldn't expect a common adventurer such as you to associate with people of my social status, so I guess I shouldn't be surprised.") +end + +function dlg_1_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/custodian_zaddar_sullissia/fprt_adv02_graveyard/custodian_zaddar005.mp3", "", "", 2116026310, 2780658398, Spawn) + AddConversationOption(conversation, "What would a library custodian be doing out here in a graveyard? You're a long way from the library.", "dlg_1_3") + AddConversationOption(conversation, "See you another time, custodian.") + StartConversation(conversation, NPC, Spawn, "Allow me to introduce myself. I am Zaddar, herald of the arcane, necromancer and custodian to the great library within the Academy of Arcane Science. I can assure you that you will meet none greater, no matter where your various exploits take you on Norrath.") +end + +function dlg_1_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/custodian_zaddar_sullissia/fprt_adv02_graveyard/custodian_zaddar006.mp3", "", "", 2975294120, 669717653, Spawn) + AddConversationOption(conversation, "I was not. Please continue.", "dlg_1_4") + AddConversationOption(conversation, "I've heard enough stories. Do you have some work for me?", "dlg_1_25") + AddConversationOption(conversation, "I don't have time for stories, Zaddar.") + StartConversation(conversation, NPC, Spawn, "This is not just a simple graveyard, mind you. There are more than just Freeport citizens buried here; this is where the enemies of the Overlord are entombed as well. You mean to tell me you were not aware of this?") +end + +function dlg_1_4(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/custodian_zaddar_sullissia/fprt_adv02_graveyard/custodian_zaddar007.mp3", "", "", 2814487874, 1269742926, Spawn) + AddConversationOption(conversation, "I'm ready to listen.", "dlg_1_5") + AddConversationOption(conversation, "I don't have time for stories, Zaddar.") + StartConversation(conversation, NPC, Spawn, "I do not like to repeat myself, so please lend me an ear as I speak. Judging by your appearance, you haven't been here too long, so this might teach you a thing or two.") +end + +function dlg_1_5(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/custodian_zaddar_sullissia/fprt_adv02_graveyard/custodian_zaddar008.mp3", "", "", 3184818985, 1210293925, Spawn) + AddConversationOption(conversation, "Please continue.", "dlg_1_6") + AddConversationOption(conversation, "I don't have time for stories, Zaddar.") + StartConversation(conversation, NPC, Spawn, "Many ages ago, the land where this graveyard now stands was once the northern part of Freeport. It was home to a corrupt order of knights that was blindly loyal to an ancient god called Mithaniel Marr.") +end + +function dlg_1_6(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/custodian_zaddar_sullissia/fprt_adv02_graveyard/custodian_zaddar009.mp3", "", "", 3546119779, 2241533519, Spawn) + AddConversationOption(conversation, "I am listening. I find your story intriguing.", "dlg_1_7") + AddConversationOption(conversation, "Enough of this story! Do you have work for me at this time, Zaddar?", "dlg_1_25") + AddConversationOption(conversation, "I don't have time for stories.") + StartConversation(conversation, NPC, Spawn, "This order of heretics was known as the Knights of Truth. They were a group of confused and dangerous men that stood in the way of Freeport's progress. Are you paying attention? ") +end + +function dlg_1_7(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/custodian_zaddar_sullissia/fprt_adv02_graveyard/custodian_zaddar010.mp3", "", "", 2323334828, 1568404929, Spawn) + AddConversationOption(conversation, "Please continue.", "dlg_1_8") + AddConversationOption(conversation, "I don't have time for stories, Zaddar.") + StartConversation(conversation, NPC, Spawn, "As time passed, the Freeport Militia and others loyal to the Overlord grew in power and number. The Overlord conceived a plan to liberate his great city from the clutches of the fanatical followers of Marr.") +end + +function dlg_1_8(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/custodian_zaddar_sullissia/fprt_adv02_graveyard/custodian_zaddar011.mp3", "", "", 1013381983, 2286424622, Spawn) + AddConversationOption(conversation, "So our Overlord is the savior of the people of Freeport!", "dlg_1_9") + AddConversationOption(conversation, "I don't have time for stories, Zaddar.") + StartConversation(conversation, NPC, Spawn, "The Overlord called forth the brave Freeport Militia and led his great army to drive out the twisted followers of Marr from our city once and for all. The people cheered to see that the hour of their liberation was at hand!") +end + +function dlg_1_9(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/custodian_zaddar_sullissia/fprt_adv02_graveyard/custodian_zaddar012.mp3", "", "", 2459406533, 4282970876, Spawn) + AddConversationOption(conversation, "Go on with the story.", "dlg_1_10") + AddConversationOption(conversation, "I've heard enough. I am ready to undertake a task.", "dlg_1_25") + AddConversationOption(conversation, "I don't have time for stories, Zaddar.") + StartConversation(conversation, NPC, Spawn, "Indeed he is! As the army of the Overlord approached, many members of the Knights of Truth abandoned their posts in fear and fled deep into an ancient citadel known as Befallen. Are you listening to me? I really don't have time to waste, you know!") +end + +function dlg_1_10(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/custodian_zaddar_sullissia/fprt_adv02_graveyard/custodian_zaddar013.mp3", "", "", 1868138883, 1737796662, Spawn) + AddConversationOption(conversation, "Please go on.", "dlg_1_11") + AddConversationOption(conversation, "I don't have time for stories, Zaddar.") + StartConversation(conversation, NPC, Spawn, "As I was saying... The Overlord was determined to free his people from the oppression of the Knights of Truth. He marched his forces to the gates of North Freeport, very near where we now stand. ") +end + +function dlg_1_11(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/custodian_zaddar_sullissia/fprt_adv02_graveyard/custodian_zaddar014.mp3", "", "", 2249548652, 1367659685, Spawn) + AddConversationOption(conversation, "Please continue.", "dlg_1_12") + AddConversationOption(conversation, "I don't have time for stories, Zaddar.") + StartConversation(conversation, NPC, Spawn, "Calling forth his mighty siege machines, the Overlord's armies burst through the gates and confronted the cowardly Knights of Truth.") +end + +function dlg_1_12(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/custodian_zaddar_sullissia/fprt_adv02_graveyard/custodian_zaddar015.mp3", "", "", 2043193912, 3903718637, Spawn) + AddConversationOption(conversation, "A fascinating tale, please continue.", "dlg_1_13") + AddConversationOption(conversation, "I don't have time for stories, Zaddar.") + StartConversation(conversation, NPC, Spawn, "The fighting went on for days as the Knights of Truth tried every desperate measure they could to retain their grip on Freeport's people. But these tyrants were no match for the Overlord's might!") +end + +function dlg_1_13(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/custodian_zaddar_sullissia/fprt_adv02_graveyard/custodian_zaddar016.mp3", "", "", 3050344406, 3484932649, Spawn) + AddConversationOption(conversation, "Go on.", "dlg_1_14") + AddConversationOption(conversation, "I've heard all I can bear. Do you have any work for me?", "dlg_1_25") + AddConversationOption(conversation, "Maybe another time, Zaddar.") + StartConversation(conversation, NPC, Spawn, "One by one the Knights of Truth fell to the liberating blades of the Overlord's .. GetName(Spawn) .. . fighters, the Freeport Militia. It must have been a grand battle to behold!") +end + +function dlg_1_14(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/custodian_zaddar_sullissia/fprt_adv02_graveyard/custodian_zaddar017.mp3", "", "", 820950367, 810980839, Spawn) + AddConversationOption(conversation, "I see, please continue.", "dlg_1_15") + AddConversationOption(conversation, "I must be going.") + StartConversation(conversation, NPC, Spawn, "In the final hour of battle, the Freeport Militia encircled the remaining Knights of Truth. The captain of the wicked followers of Marr, Sir Haligan, looked up to see the mighty figure of the Overlord moving toward him.") +end + +function dlg_1_15(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/custodian_zaddar_sullissia/fprt_adv02_graveyard/custodian_zaddar018.mp3", "", "", 975559135, 1801151698, Spawn) + AddConversationOption(conversation, "Interesting, please go on.", "dlg_1_16") + AddConversationOption(conversation, "Thanks for the history lesson, but I must go.") + StartConversation(conversation, NPC, Spawn, "Realizing his cause was lost, Sir Haligan tried one last desperate attack against the Overlord, but it was to no avail. The minions of the Overlord rushed in with blades ready and struck true, extinguishing the foul Sir Haligan, leader of the oppressors.") +end + +function dlg_1_16(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/custodian_zaddar_sullissia/fprt_adv02_graveyard/custodian_zaddar019.mp3", "", "", 3729026359, 1609932090, Spawn) + AddConversationOption(conversation, "Do go on.", "dlg_1_17") + AddConversationOption(conversation, "It's been fun, but I must part.") + StartConversation(conversation, NPC, Spawn, "This graveyard now houses the bones of the fallen Knights of Truth, buried where they once fought all those long years ago. It is said that the echoes of that ancient battle can still be heard in the deep, dark night.") +end + +function dlg_1_17(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/custodian_zaddar_sullissia/fprt_adv02_graveyard/custodian_zaddar020.mp3", "", "", 3451823684, 639969226, Spawn) + AddConversationOption(conversation, "Please go on with your tale.", "dlg_1_18") + AddConversationOption(conversation, "You are quite long-winded, Zaddar. I seek adventure.", "dlg_1_25") + AddConversationOption(conversation, "I must depart.") + StartConversation(conversation, NPC, Spawn, "By order of the Overlord, the tombs of the knights slain that day were sealed with mortar and chains, trapping their bodies beneath the soil forevermore.") +end + +function dlg_1_18(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/custodian_zaddar_sullissia/fprt_adv02_graveyard/custodian_zaddar021.mp3", "", "", 2453176825, 385758533, Spawn) + AddConversationOption(conversation, "Well, I guess you really ARE more than just a custodian.", "dlg_1_19") + AddConversationOption(conversation, "It's been fun, but I must depart.") + StartConversation(conversation, NPC, Spawn, "Personally, I believe that the Overlord had the tombs sealed for fear that Mithaniel Marr might resurrect his fallen knights to do battle once more. But if you would be so kind, please don't repeat that speculation.") +end + +function dlg_1_19(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/custodian_zaddar_sullissia/fprt_adv02_graveyard/custodian_zaddar022.mp3", "", "", 1193428244, 1371088261, Spawn) + AddConversationOption(conversation, "What sort of research?", "dlg_1_20") + AddConversationOption(conversation, "I must go. Farewell!") + StartConversation(conversation, NPC, Spawn, "Custodian indeed, but I'm sure an adventurer such as you can fathom just what that entails within the walls of the Academy of Arcane Science. I'll have you know that I'm here conducting research of my own as well.") +end + +function dlg_1_20(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/custodian_zaddar_sullissia/fprt_adv02_graveyard/custodian_zaddar023.mp3", "", "", 3549973784, 3687441943, Spawn) + AddConversationOption(conversation, "Is that so?", "dlg_1_21") + AddConversationOption(conversation, "How boring. Goodbye.") + StartConversation(conversation, NPC, Spawn, "Should I take this interest as genuine or some sort of feint? Well regardless, I love listening to myself speak. I sound great, don't I? The library sent me here to check on the tombs of the fallen Knights of Truth.") +end + +function dlg_1_21(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/custodian_zaddar_sullissia/fprt_adv02_graveyard/custodian_zaddar024.mp3", "", "", 2941976537, 386791284, Spawn) + AddConversationOption(conversation, "Tell me more.", "dlg_1_22") + AddConversationOption(conversation, "I'd imagine so. Can I be of assistance?", "dlg_1_25") + AddConversationOption(conversation, "You bore me, Zaddar.") + StartConversation(conversation, NPC, Spawn, "I imagine that The Overlord may be concerned because it's been nearly four-hundred years to the day of that great battle, and spirits trapped in this world are always longing for vengeance.") +end + +function dlg_1_22(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/custodian_zaddar_sullissia/fprt_adv02_graveyard/custodian_zaddar025.mp3", "", "", 3804418158, 1108808310, Spawn) + AddConversationOption(conversation, "What does this have to do with me?", "dlg_1_23") + AddConversationOption(conversation, "Time presses, and I must depart.") + StartConversation(conversation, NPC, Spawn, "The Academy has commanded me to research a long-lost spell. I believe that this incantation is from an ancient tome, dating back to the time the Knights of Truth were slain and the people of Freeport were liberated.") +end + +function dlg_1_23(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/custodian_zaddar_sullissia/fprt_adv02_graveyard/custodian_zaddar026.mp3", "", "", 3654413929, 837264650, Spawn) + AddConversationOption(conversation, "What are you asking of me?", "dlg_1_24") + AddConversationOption(conversation, "See you another time, bye.") + StartConversation(conversation, NPC, Spawn, "To be blunt, " .. GetName(Spawn) .. ". I need someone with your skills. Only a true hero can help me with this task. The Overlord himself demanded that the Academy complete this spell, and we must not disappoint him.") +end + +function dlg_1_24(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/custodian_zaddar_sullissia/fprt_adv02_graveyard/custodian_zaddar027.mp3", "", "", 2666723446, 2842007021, Spawn) + AddConversationOption(conversation, "So let's discuss this task.", "dlg_1_25") + AddConversationOption(conversation, "Fit, but not willing.") + StartConversation(conversation, NPC, Spawn, "If we work together, we can both prosper and increase our standing here in Freeport. But before collecting the pages, I have a task that needs doing, and I think you are the one to do it.") +end + +function dlg_1_25(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/custodian_zaddar_sullissia/fprt_adv02_graveyard/custodian_zaddar028.mp3", "", "", 2264278901, 2484625110, Spawn) + AddConversationOption(conversation, "I will help you.", "dlg_1_26") + AddConversationOption(conversation, "Nay, I must be off.") + StartConversation(conversation, NPC, Spawn, "I wouldn't trust anyone but a loyal follower of the Overlord with the task before me, I'm sure you understand. Normally I'd take care of such things myself, but these duties are far below my level of expertise and intellect. What do you say?") +end + +function dlg_1_26(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/custodian_zaddar_sullissia/fprt_adv02_graveyard/custodian_zaddar029.mp3", "", "", 1039120321, 2615840758, Spawn) + AddConversationOption(conversation, "Is this an important task?", "OfferQuest1") + AddConversationOption(conversation, "I don't have time for that.") + StartConversation(conversation, NPC, Spawn, "Good, I knew you would make the smart choice. Go check on the tombs of the fallen knights, make sure they're all still sealed and that grave robbers have not disturbed any of the mausoleums.") +end + +function OfferQuest1(NPC, Spawn) + FaceTarget(NPC, Spawn) + OfferQuest(NPC, Spawn, QUEST_1) +end + +function OnQuest1(NPC, Spawn, conversation) + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/custodian_zaddar_sullissia/fprt_adv02_graveyard/custodian_zaddar031.mp3", "", "", 3448241542, 826932721, Spawn) + + if (GetQuestStep(Spawn, QUEST_1) == 6) then + AddConversationOption(conversation, "I checked the tombs as you asked.", "PleasedToHear") + end + + AddConversationOption(conversation, "I'm not finished yet, Zaddar.") + StartConversation(conversation, NPC, Spawn, "Back so soon? I certainly hope you didn't just sneak off somewhere and take a nap. The Overlord is not to be trifled with!") +end + +function PleasedToHear(NPC, Spawn) + if HasQuest(Spawn, QUEST_1) then + SetStepComplete(Spawn, QUEST_1, 6) + end + + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/custodian_zaddar_sullissia/fprt_adv02_graveyard/custodian_zaddar032.mp3", "", "", 2571525928, 4169654402, Spawn) + AddConversationOption(conversation, "I was attacked by a skeleton, but I managed to defend myself.", "dlg_7_2") + AddConversationOption(conversation, "I don't have time to discuss this right now.") + StartConversation(conversation, NPC, Spawn, "I am pleased to hear that you fulfilled my request. Was there any trouble?") +end + +------------------------------------------------------------------------------------------------------------ +-- QUEST 2 +------------------------------------------------------------------------------------------------------------ + +function dlg_7_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/custodian_zaddar_sullissia/fprt_adv02_graveyard/custodian_zaddar033.mp3", "", "", 2569692294, 2342899886, Spawn) + AddConversationOption(conversation, "No, it was the remains of Sir Haligan, Captain of the Knights of Truth.", "dlg_7_3") + AddConversationOption(conversation, "I don't have time to discuss this.") + StartConversation(conversation, NPC, Spawn, "Skeleton attacks are not uncommon in the Graveyard, as you have discovered. I presume this was just some ordinary fiend?") +end + +function dlg_7_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/custodian_zaddar_sullissia/fprt_adv02_graveyard/custodian_zaddar034.mp3", "", "", 1688032152, 1661878378, Spawn) + AddConversationOption(conversation, "Who is Varacus?", "dlg_7_4") + AddConversationOption(conversation, "I think this is your problem, not mine.") + StartConversation(conversation, NPC, Spawn, "Fascinating! The Overlord was wise to have us check on the security of the tombs. I wonder if Varacus realizes what is transpiring here in the Graveyard.") +end + +function dlg_7_4(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/custodian_zaddar_sullissia/fprt_adv02_graveyard/custodian_zaddar035.mp3", "", "", 2382394256, 2829986505, Spawn) + AddConversationOption(conversation, "I will seek him out.", "OfferQuest2") + AddConversationOption(conversation, "Maybe another time.") + StartConversation(conversation, NPC, Spawn, "Varacus TKur is the leader of the Keepers of Ethernere here in the Graveyard. He has some pages of an ancient tome that should help in my research. Tell him that I sent you, and if he gives you any trouble, remind him that this errand comes from the Overlord himself passed down through the Academy.") +end + +function OfferQuest2(NPC, Spawn) + FaceTarget(NPC, Spawn) + OfferQuest(NPC, Spawn, QUEST_2) +end + +function OnQuest2(NPC, Spawn, conversation) + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/custodian_zaddar_sullissia/fprt_adv02_graveyard/custodian_zaddar037.mp3", "", "", 2173814710, 3365638930, Spawn) + AddConversationOption(conversation, "Not yet.") + StartConversation(conversation, NPC, Spawn, "Ah, " .. GetName(Spawn) .. ". I see you have returned. Have you brought back the pages you obtained from Varacus of the Keepers of Ethernere?") +end + +------------------------------------------------------------------------------------------------------------------------ +-- QUEST 3 +------------------------------------------------------------------------------------------------------------------------ + +function OnQuest3(NPC, Spawn, conversation) + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/custodian_zaddar_sullissia/fprt_adv02_graveyard/custodian_zaddar037.mp3", "", "", 2173814710, 3365638930, Spawn) + + if GetQuestStep(Spawn, QUEST_3) == 5 then + AddConversationOption(conversation, "I spoke to Varacus and have returned with the pages you needed.", "dlg_4_1") + end + + AddConversationOption(conversation, "Not yet.") + StartConversation(conversation, NPC, Spawn, "Ah, " .. GetName(Spawn) .. ". I see you have returned. Have you brought back the pages you obtained from Varacus of the Keepers of Ethernere?") +end + +function dlg_4_1(NPC, Spawn) + if HasQuest(Spawn, QUEST_3) then + SetStepComplete(Spawn, QUEST_3, 5) + end + + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/custodian_zaddar_sullissia/fprt_adv02_graveyard/custodian_zaddar038.mp3", "", "", 3675166074, 228752459, Spawn) + AddConversationOption(conversation, "Why are these pages so important?", "HearingMore") + AddConversationOption(conversation, "I think I'll keep them for now.") + StartConversation(conversation, NPC, Spawn, "Excellent work! Please give me the pages at once. There is no time to waste.") +end + +------------------------------------------------------------------------------------------------------------------------ +-- QUEST 4 +------------------------------------------------------------------------------------------------------------------------ + +function HearingMore(NPC, Spawn, conversation) + if conversation == nil then + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + end + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/custodian_zaddar_sullissia/fprt_adv02_graveyard/custodian_zaddar039.mp3", "", "", 1528282125, 4004744343, Spawn) + AddConversationOption(conversation, "Yes, please continue with your story.", "dlg_4_3") + AddConversationOption(conversation, "I don't wish to hear any more. Do you have another task for me?", "dlg_4_14") + AddConversationOption(conversation, "I have no time for this.") + StartConversation(conversation, NPC, Spawn, "Interested in hearing more of my tale, are you? As you recall, the fallen Knights of Truth are buried here in the Graveyard.") +end + +function dlg_4_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/custodian_zaddar_sullissia/fprt_adv02_graveyard/custodian_zaddar040.mp3", "", "", 900290170, 3799291626, Spawn) + AddConversationOption(conversation, "That explains why the seal on Sir Haligan's tomb appeared to be disturbed.", "dlg_4_4") + AddConversationOption(conversation, "I must be going.") + StartConversation(conversation, NPC, Spawn, "Recently grave robbers have invaded the cemetery by night, breaking open the seals placed on the graves of the knights. This has enabled some of those cursed souls to rise and walk the land again.") +end + +function dlg_4_4(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/custodian_zaddar_sullissia/fprt_adv02_graveyard/custodian_zaddar041.mp3", "", "", 3846878126, 1397586167, Spawn) + AddConversationOption(conversation, "What concern?", "dlg_4_5") + AddConversationOption(conversation, "I don't have time for this.") + StartConversation(conversation, NPC, Spawn, "It does indeed. But there is a greater concern we must face, which is why I needed these pages.") +end + +function dlg_4_5(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/custodian_zaddar_sullissia/fprt_adv02_graveyard/custodian_zaddar042.mp3", "", "", 2741984581, 4167326944, Spawn) + AddConversationOption(conversation, "If the ward still works, why are you concerned?", "dlg_4_6") + AddConversationOption(conversation, "Enough of this tale. Do you have another task for me?", "dlg_4_14") + AddConversationOption(conversation, "I can't bear any more of this.") + StartConversation(conversation, NPC, Spawn, "Long ago, our Overlord commanded the Foci and the priests of the Dismal Rage to place a powerful ward upon this graveyard. It bound the spirits of those buried here to this place, so that even if they escaped their tombs, they would be unable to leave the Graveyard.") +end + +function dlg_4_6(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/custodian_zaddar_sullissia/fprt_adv02_graveyard/custodian_zaddar043.mp3", "", "", 1966519844, 1090032745, Spawn) + AddConversationOption(conversation, "Aren't the gods long gone?", "dlg_4_7") + AddConversationOption(conversation, "I have no time for this.") + StartConversation(conversation, NPC, Spawn, "The binding spell was lost long ago. But the increase in undead activity may mean that someone loyal to Mithaniel Marr, or even the god himself, might be trying to shatter the ward and let the undead travel beyond these walls into the city itself.") +end + +function dlg_4_7(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/custodian_zaddar_sullissia/fprt_adv02_graveyard/custodian_zaddar044.mp3", "", "", 277589330, 769361598, Spawn) + AddConversationOption(conversation, "Why would anyone from Qeynos want to unleash the undead?", "dlg_4_8") + AddConversationOption(conversation, "Time for me to go.") + StartConversation(conversation, NPC, Spawn, "No one is certain what became of the ancient gods. It's best not to take chances in any case. It could be some fanatical follower of Marr behind this, or even those savages from the decrepit Kingdom of Qeynos.") +end + +function dlg_4_8(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/custodian_zaddar_sullissia/fprt_adv02_graveyard/custodian_zaddar045.mp3", "", "", 1332836104, 335069467, Spawn) + AddConversationOption(conversation, "Surely the Overlord could defeat the knights again.", "dlg_4_9") + AddConversationOption(conversation, "I've heard enough. How can I help?", "dlg_4_14") + AddConversationOption(conversation, "I have no interest in this.") + StartConversation(conversation, NPC, Spawn, "I'm sure some of the corrupt citizens of Qeynos are still loyal to Marr. By breaking the binding ward, the fallen Knights of Truth would be free to rise and seek revenge on our beloved Overlord. This cannot come to pass!") +end + +function dlg_4_9(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/custodian_zaddar_sullissia/fprt_adv02_graveyard/custodian_zaddar046.mp3", "", "", 1569346274, 502297645, Spawn) + AddConversationOption(conversation, "Does Qeynos wish to go to war with us?", "dlg_4_10") + AddConversationOption(conversation, "This no longer concerns me.") + StartConversation(conversation, NPC, Spawn, "Of course the Overlord and the Freeport Militia could handle the undead army. But the chaos caused by their presence would afford the cowardly legions of Antonia Bayle the chance to launch a sneak attack on our city. That wretched queen is just waiting for a chance to strike.") +end + +function dlg_4_10(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/custodian_zaddar_sullissia/fprt_adv02_graveyard/custodian_zaddar047.mp3", "", "", 103040030, 1105730597, Spawn) + AddConversationOption(conversation, "Are you going to cast the binding ward again?", "dlg_4_11") + AddConversationOption(conversation, "Nonsense, I must leave.") + StartConversation(conversation, NPC, Spawn, "Qeynosians are cowards, to be sure. They are afraid of open war with the Overlord. However, striking at us through this graveyard is just the kind of tactic they would use.") +end + +function dlg_4_11(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/custodian_zaddar_sullissia/fprt_adv02_graveyard/custodian_zaddar048.mp3", "", "", 3216601317, 4107541552, Spawn) + AddConversationOption(conversation, "So what are we going to do?", "dlg_4_12") + AddConversationOption(conversation, "Let's get to work. What do you want me to do?", "dlg_4_14") + AddConversationOption(conversation, "Good luck with that, bye!") + StartConversation(conversation, NPC, Spawn, "Casting another ward while the first one is in effect may have unforeseen consequences. We don't want to risk that.") +end + +function dlg_4_12(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/custodian_zaddar_sullissia/fprt_adv02_graveyard/custodian_zaddar049.mp3", "", "", 3917748899, 1321078485, Spawn) + AddConversationOption(conversation, "How can you tell if the ward remains in effect?", "dlg_4_13") + AddConversationOption(conversation, "I'll let you take care of that.") + StartConversation(conversation, NPC, Spawn, "I was sent here to complete two tasks. First, to obtain these pages so they did not fall into the wrong hands. Second, to determine if the ward still holds or if the spell must be cast again.") +end + +function dlg_4_13(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/custodian_zaddar_sullissia/fprt_adv02_graveyard/custodian_zaddar050.mp3", "", "", 1966326887, 1363957542, Spawn) + AddConversationOption(conversation, "Yes, I am ready to serve the Overlord again.", "dlg_4_14") + AddConversationOption(conversation, "Not now, I must be going.") + StartConversation(conversation, NPC, Spawn, "I only know of one way to be sure, but it's somewhat risky. Do you feel up to the challenge? You've served me well in the past, so I have faith that you will be able to accomplish this for me as well.") +end + +function dlg_4_14(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/custodian_zaddar_sullissia/fprt_adv02_graveyard/custodian_zaddar051.mp3", "", "", 880187094, 917754563, Spawn) + if HasQuest(Spawn, QUEST_4) and GetQuestStep(Spawn, QUEST_4) == 1 then + AddConversationOption(conversation, "You mean that ruined tower near the Keepers of Ethernere?", "dlg_4_15") + else + AddConversationOption(conversation, "You mean that ruined tower near the Keepers of Ethernere?", "OfferQuest4") + end + StartConversation(conversation, NPC, Spawn, "Good, this is what I need done. I want you to take this ancient relic to the ruins of the Tower of Marr and place it in the doorway. The relic has been stained with the blood of the Knights of Truth and has been in the keeping of the Academy of Arcane Science since the day of that final battle.") +end + +function OfferQuest4(NPC, Spawn) + FaceTarget(NPC, Spawn) + OfferQuest(NPC, Spawn, QUEST_4) +end + +function dlg_4_15(Quest, QuestGiver, Player) + FaceTarget(QuestGiver, Player) + conversation = CreateConversation() + + PlayFlavor(QuestGiver, "voiceover/english/tutorial_revamp/custodian_zaddar_sullissia/fprt_adv02_graveyard/custodian_zaddar052.mp3", "", "", 3643355771, 3506584636, Player) + AddConversationOption(conversation, "Is something bad going to happen if I take it there?", "dlg_4_16") + AddConversationOption(conversation, "I can't help you with this.") + StartConversation(conversation, QuestGiver, Player, "Yes, the remains of that tower still serve as a tribute to Mithaniel Marr. Such a relic would be seen as an abomination to him.") +end + +function dlg_4_16(NPC, Spawn) + SetStepComplete(Spawn, QUEST_4, 1) + + -- Relic of Unholy Power + -- TODO: Display quest reward popup + if not HasItem(Spawn, 7868) then + SummonItem(Spawn, 7868) + end + + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/custodian_zaddar_sullissia/fprt_adv02_graveyard/custodian_zaddar053.mp3", "", "", 1936656377, 4165203130, Spawn) + AddConversationOption(conversation, "What happens if the ward doesn't hold?", "dlg_4_17") + AddConversationOption(conversation, "Maybe you should find someone else to help you.") + StartConversation(conversation, NPC, Spawn, "Do not worry. The binding ward that keeps the undead here also prevents outside influences from entering the Graveyard and keeps any lingering energies in check. So long as the ward holds, you should be safe when you place that relic in the doorway.") +end + +function dlg_4_17(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/custodian_zaddar_sullissia/fprt_adv02_graveyard/custodian_zaddar054.mp3", "", "", 2019714186, 114732111, Spawn) + AddConversationOption(conversation, "If I do this, what's in it for me?", "dlg_4_18") + AddConversationOption(conversation, "I don't think this is a good idea.") + StartConversation(conversation, NPC, Spawn, "What could happen? The gods have been gone for centuries. You have proven yourself to be a brave hero of Freeport. Do not waver now!") +end + +function dlg_4_18(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/custodian_zaddar_sullissia/fprt_adv02_graveyard/custodian_zaddar055.mp3", "", "", 3077792314, 2962776024, Spawn) + AddConversationOption(conversation, "Very well, I'll do it.", "dlg_4_19") + AddConversationOption(conversation, "I don't need fame. Goodbye.") + StartConversation(conversation, NPC, Spawn, "Spoken like a true citizen of Freeport! Listen, if you help me with this, I'll be sure you are rewarded for your efforts. The Academy will take notice of us both!") +end + +function dlg_4_19(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/custodian_zaddar_sullissia/fprt_adv02_graveyard/custodian_zaddar056.mp3", "", "", 2313049921, 3908905294, Spawn) + AddConversationOption(conversation, "I will return when I've completed the test, Zaddar.", "dlg_4_20") + StartConversation(conversation, NPC, Spawn, "Just take the relic and place it in the doorway. And whatever you do, don't lose it! It is an ancient artifact, and neither the Academy nor the Overlord would be pleased if it was misplaced.") +end + +function OnQuest4(NPC, Spawn, conversation) + if GetQuestStep(Spawn, QUEST_4) == 1 then + dlg_4_14(NPC, Spawn) + else + if GetQuestStep(Spawn, QUEST_4) == 4 then + AddConversationOption(conversation, "I'm not so sure that the ward is still at its full potency. I was struck down by the power of Marr for attempting to defile the tower!", "dlg_5_1") + end + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/custodian_zaddar_sullissia/fprt_adv02_graveyard/custodian_zaddar057.mp3", "", "", 1503134855, 3015223508, Spawn) + AddConversationOption(conversation, "Not yet.") + StartConversation(conversation, NPC, Spawn, "Welcome back, " .. GetName(Spawn) .. ". I assume you concluded your investigation and found that the ward is still intact?") + end +end + +function dlg_5_1(NPC, Spawn) + if HasQuest(Spawn, QUEST_4) then + SetStepComplete(Spawn, QUEST_4, 4) + end + + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/custodian_zaddar_sullissia/fprt_adv02_graveyard/custodian_zaddar058.mp3", "", "", 3581287630, 1926785642, Spawn) + AddConversationOption(conversation, "You can have it. So what do we do now?", "FinishTranslation") + AddConversationOption(conversation, "Forget this, I have to go.") + StartConversation(conversation, NPC, Spawn, "This is dark news indeed. Marr blessed that tower long ago, and if some of that energy is now bleeding through, the ward is certainly weak. Fortunately I've already begun translating the parchment pages you found for me in case they were needed. Oh, I'll need that artifact back, by the way.") +end + +------------------------------------------------------------------------------------------------------------------------ +-- QUEST 5 +------------------------------------------------------------------------------------------------------------------------ + +function FinishTranslation(NPC, Spawn, conversation) + if conversation == nil then + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + end + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/custodian_zaddar_sullissia/fprt_adv02_graveyard/custodian_zaddar059.mp3", "", "", 2020220932, 1678871420, Spawn) + AddConversationOption(conversation, "What do you need?", "dlg_5_3") + AddConversationOption(conversation, "No, sorry.") + StartConversation(conversation, NPC, Spawn, "While I finish the translation, I need you to help me once more. Are you willing?") +end + +function dlg_5_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/custodian_zaddar_sullissia/fprt_adv02_graveyard/custodian_zaddar060.mp3", "", "", 1617818175, 2696893636, Spawn) + AddConversationOption(conversation, "I thought you were only to report back to the Academy.", "dlg_5_4") + AddConversationOption(conversation, "That sounds like too much effort.") + StartConversation(conversation, NPC, Spawn, "It is up to the two of us to restore the ward that keeps the undead confined to the Graveyard. This is our chance to save Freeport!") +end + +function dlg_5_4(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/custodian_zaddar_sullissia/fprt_adv02_graveyard/custodian_zaddar061.mp3", "", "", 3722411193, 865336790, Spawn) + AddConversationOption(conversation, "What's in this for me? ", "dlg_5_5") + AddConversationOption(conversation, "I think I'll pass.") + StartConversation(conversation, NPC, Spawn, "There is no time to waste. True heroes must be prepared to rise to the occasion and embrace their destiny. You have a bold future ahead of you, .. GetName(Spawn) .. . Now is the time to act!") +end + +function dlg_5_5(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/custodian_zaddar_sullissia/fprt_adv02_graveyard/custodian_zaddar062.mp3", "", "", 245159103, 2526379657, Spawn) + AddConversationOption(conversation, "Very well, let's do it!", "dlg_5_6") + AddConversationOption(conversation, "I'm not sure I want the Overlord to notice me.") + StartConversation(conversation, NPC, Spawn, "Fame and fortune, of course! The Academy is sure to take notice of you when I report to them of what has occurred here today. You may even be noticed by the Overlord himself, XXXXXXX.") +end + +function dlg_5_6(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/custodian_zaddar_sullissia/fprt_adv02_graveyard/custodian_zaddar063.mp3", "", "", 4070301196, 2746257006, Spawn) + AddConversationOption(conversation, "I will do so. What is the Staff of Ethernere?", "OfferQuest5") + StartConversation(conversation, NPC, Spawn, "I want you to go back to Varacus and the Keepers of Ethernere. Tell him that we need to restore the ward and that we need the Staff of Ethernere.") +end + +function OfferQuest5(NPC, Spawn) + FaceTarget(NPC, Spawn) + OfferQuest(NPC, Spawn, QUEST_5) +end + +function OnQuest5(NPC, Spawn, conversation) + if GetQuestStep(Spawn, QUEST_5) == 1 then + dlg_5_9(NPC, Spawn) + else + AddConversationOption(conversation, "Yes, here it is.", "WellDone") + AddConversationOption(conversation, "No, not yet.") + StartConversation(conversation, NPC, Spawn, "Have you obtained the staff of Ethernere?") + end +end + +function dlg_5_8(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/custodian_zaddar_sullissia/fprt_adv02_graveyard/custodian_zaddar065.mp3", "", "", 620236484, 108078282, Spawn) + AddConversationOption(conversation, "What is the Book of the Dead?", "dlg_5_9") + AddConversationOption(conversation, "I don't like the sound of that.") + StartConversation(conversation, NPC, Spawn, "The Staff of Ethernere, when used along with the arcane power contained in the Book of the Dead, will help me repair the ward.") +end + +function dlg_5_9(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/custodian_zaddar_sullissia/fprt_adv02_graveyard/custodian_zaddar066.mp3", "", "", 1359336798, 4034979334, Spawn) + AddConversationOption(conversation, "Okay, I'm going.") + StartConversation(conversation, NPC, Spawn, "Time is of the essence, " .. GetName(Spawn) .. ". The ward may be fading faster than we realize and we must repair it!") +end + +function WellDone(NPC, Spawn) + if HasQuest(Spawn, QUEST_5) then + SetStepComplete(Spawn, QUEST_5, 2) + end + + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "How can you tell?", "HowCanYouTell") + AddConversationOption(conversation, "Maybe next time Zaddar.") + StartConversation(conversation, NPC, Spawn, "Well done! I'm sure it was difficult to convince Varacus to part with it. But this is indeed the Staff of Ethernere.") +end + +------------------------------------------------------------------------------------------------------------------------ +-- QUEST 6 +------------------------------------------------------------------------------------------------------------------------ + +function HowCanYouTell(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "Tell me more about it.", "OfferQuest6") + AddConversationOption(conversation, "Enough history lesson. What do we do next?", "OfferQuest6") + AddConversationOption(conversation, "I don't want to hear anything the dead have to say.") + StartConversation(conversation, NPC, Spawn, "Do you see these runes inscribed upon it? They are written in the language of the dead. When spoken to the living, this language sounds like mere whispers, but to the undead it sounds as clear as how you and I are speaking now.") +end + +function OfferQuest6(NPC, Spawn) + Say(NPC, "These conversations have been skipped beacuse we do not have them collected for some reason.", Spawn) + FaceTarget(NPC, Spawn) + OfferQuest(NPC, Spawn, QUEST_6) +end + +function OnQuest6(NPC, Spawn, conversation) + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/custodian_zaddar_sullissia/fprt_adv02_graveyard/custodian_zaddar080.mp3", "", "", 3234395399, 3275818681, Spawn) + if GetQuestStep(Spawn, QUEST_6) == 2 then + AddConversationOption(conversation, "Yes, a grave robber did have it.", "dlg_15_1") + end + AddConversationOption(conversation, "Not yet.") + StartConversation(conversation, NPC, Spawn, "Have you found the Book of the Dead?") +end + +function ExcellentWork(NPC, Spawn, conversation) + if HasQuest(Spawn, QUEST_6) then + SetStepComplete(Spawn, QUEST_6, 2) + end + + if conversation == nil then + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + end + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/custodian_zaddar_sullissia/fprt_adv02_graveyard/custodian_zaddar081.mp3", "", "", 3784703414, 3616748639, Spawn) + AddConversationOption(conversation, "Here it is.", "dlg_15_2") + AddConversationOption(conversation, "Wait, I'm not so sure I want you to have this.") + StartConversation(conversation, NPC, Spawn, "Excellent work, " .. GetName(Spawn) .. "! I must say, you are turning out to be quite a useful aide. You've done almost as well as if I had done this task myself! Now quickly, hand me the book.") +end + +------------------------------------------------------------------------------------------------------------------------ +-- QUEST 7 +------------------------------------------------------------------------------------------------------------------------ + +function dlg_15_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/custodian_zaddar_sullissia/fprt_adv02_graveyard/custodian_zaddar082.mp3", "", "", 2211835192, 2993459577, Spawn) + AddConversationOption(conversation, "I am ready when you are, Zaddar.", "dlg_15_3") + AddConversationOption(conversation, "Complete it yourself.") + StartConversation(conversation, NPC, Spawn, "Look at how the parchment pages you retrieved are binding themselves inside the Book of the Dead! It truly is a mysterious and powerful tome. I will use the Staff of Ethernere during the ritual to focus the power of the spell we cast.") +end + +function dlg_15_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/custodian_zaddar_sullissia/fprt_adv02_graveyard/custodian_zaddar083.mp3", "", "", 39778497, 4193105723, Spawn) + AddConversationOption(conversation, "I understand. What words do I say?", "OfferQuest7") + StartConversation(conversation, NPC, Spawn, "I will tell you the ancient words of binding. You chant them, and I will repeat them after you. Only by working together can we complete the spell and save Freeport. Understood?") +end + +function OfferQuest7(NPC, Spawn) + FaceTarget(NPC, Spawn) + OfferQuest(NPC, Spawn, QUEST_7) +end + +function OnQuest7(NPC, Spawn, conversation) + if GetQuestStep(Spawn, QUEST_7) == 1 or GetQuestStep(Spawn, QUEST_7) == 3 then + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/custodian_zaddar_sullissia/fprt_adv02_graveyard/custodian_zaddar084.mp3", "", "", 4136256828, 4083268014, Spawn) + AddConversationOption(conversation, "Yes, I am ready.", "dlg_33_1") + AddConversationOption(conversation, "I'm still not sure about this.") + StartConversation(conversation, NPC, Spawn, "I've managed to translate the words from the ancient pages you've attained for me. Shall we begin?") + else + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/custodian_zaddar_sullissia/fprt_adv02_graveyard/custodian_zaddar098.mp3", "", "point", 302585592, 463867493, Spawn) + AddConversationOption(conversation, "I'll go at once!", "dlg_16_7") + StartConversation(conversation, NPC, Spawn, "Conjura, you must go to the tombs at once and verify that each seal is intact. This is the only way we can complete the ritual and renew the ward upon the Graveyard to keep the undead at bay. Hurry! The fate of Freeport is in your hands!") + end +end + +function dlg_35_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/custodian_zaddar_sullissia/fprt_adv02_graveyard/custodian_zaddar085.mp3", "", "", 2303927158, 1226964823, Spawn) + AddConversationOption(conversation, "Ready!", "dlg_36_2") + AddConversationOption(conversation, "No thank you.") + StartConversation(conversation, NPC, Spawn, "The first words are 'Graddah, Shollamak, Hakah.' Ready?") +end + +function dlg_36_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/custodian_zaddar_sullissia/fprt_adv02_graveyard/custodian_zaddar086.mp3", "", "", 316474953, 2692158252, Spawn) + AddConversationOption(conversation, "Graddah, Shollamak, Hakah!", "dlg_36_3") + AddConversationOption(conversation, "Wait, not yet.") + StartConversation(conversation, NPC, Spawn, "Let the ritual begin!") +end + +function dlg_36_3(NPC, Spawn) +--make spawn do casting a ward spell here + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/custodian_zaddar_sullissia/fprt_adv02_graveyard/custodian_zaddar087.mp3", "", "", 2730725983, 3455327122, Spawn) + if GetQuestStep(Spawn, QUEST_7) == 1 then + AddConversationOption(conversation, "Wait, what's wrong?", "dlg_36_4") + elseif GetQuestStep(Spawn, QUEST_7) == 3 then + AddConversationOption(conversation, "What are the next words?", "dlg_18_4") + end + AddConversationOption(conversation, "I need to go.") + StartConversation(conversation, NPC, Spawn, "Graddah, Shollamak, Hakah!") +end + +function dlg_36_4(NPC, Spawn) + SetStepComplete(Spawn, QUEST_7, 1) + + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/custodian_zaddar_sullissia/fprt_adv02_graveyard/custodian_zaddar096.mp3", "", "", 3456740440, 91910715, Spawn) + AddConversationOption(conversation, "What do we do?", "dlg_36_5") + AddConversationOption(conversation, "I knew this was madness.") + StartConversation(conversation, NPC, Spawn, "Something is wrong. The incantation will not take effect!") +end + +function dlg_36_5(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/custodian_zaddar_sullissia/fprt_adv02_graveyard/custodian_zaddar097.mp3", "", "", 1342700976, 2091537359, Spawn) + AddConversationOption(conversation, "Perhaps one tomb remains unsealed.", "dlg_36_6") + AddConversationOption(conversation, "I've done enough for this cause.") + StartConversation(conversation, NPC, Spawn, "Are you certain that all of the tombs of the Knights of Truth were sealed? If even one of them remains opened, it might prevent the binding ward from taking hold.") +end + +function dlg_36_6(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/custodian_zaddar_sullissia/fprt_adv02_graveyard/custodian_zaddar098.mp3", "", "point", 302585592, 463867493, Spawn) + AddConversationOption(conversation, "I'll go at once!") + StartConversation(conversation, NPC, Spawn, "Lilrat, you must go to the tombs at once and verify that each seal is intact. This is the only way we can complete the ritual and renew the ward upon the Graveyard to keep the undead at bay. Hurry! The fate of Freeport is in your hands!") +end + +function dlg_18_4(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/custodian_zaddar_sullissia/fprt_adv02_graveyard/custodian_zaddar088.mp3", "", "", 1317702534, 195221553, Spawn) + AddConversationOption(conversation, "Ready!", "dlg_18_5") + AddConversationOption(conversation, "I've forgotten them already.") + StartConversation(conversation, NPC, Spawn, "The second set of words are, 'Golotu, Quandar, Gunoo.' Ready?") +end + +function dlg_18_5(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/custodian_zaddar_sullissia/fprt_adv02_graveyard/custodian_zaddar089.mp3", "", "", 919106830, 2372549864, Spawn) + AddConversationOption(conversation, "Golotu, Quandar, Gunoo!", "dlg_18_6") + AddConversationOption(conversation, "Wait, not yet.") + StartConversation(conversation, NPC, Spawn, "Proceed!") +end + +function dlg_18_6(NPC, Spawn) +--make spawn caster healing spell + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/custodian_zaddar_sullissia/fprt_adv02_graveyard/custodian_zaddar090.mp3", "", "", 467925549, 2283934078, Spawn) + AddConversationOption(conversation, "What are the next words?", "dlg_18_7") + AddConversationOption(conversation, "I've had enough of this.") + StartConversation(conversation, NPC, Spawn, "Golotu, Quandar, Gunoo!") +end + +function dlg_18_7(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/custodian_zaddar_sullissia/fprt_adv02_graveyard/custodian_zaddar091.mp3", "", "", 3920739989, 998274807, Spawn) + AddConversationOption(conversation, "I'm ready!", "dlg_18_8") + AddConversationOption(conversation, "That's it, I quit.") + StartConversation(conversation, NPC, Spawn, "The final set of words are the most important. 'Waktana, Shollamak, Quandar, Hakah.' Here we go!") +end + +function dlg_18_8(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/custodian_zaddar_sullissia/fprt_adv02_graveyard/custodian_zaddar092.mp3", "", "", 877878005, 1602838402, Spawn) + AddConversationOption(conversation, "Waktana, Shollamak, Quandar, Hakah!", "dlg_18_9") + StartConversation(conversation, NPC, Spawn, "Recite the words, " .. GetName(Spawn) .. ".") +end + +function dlg_18_9(NPC, Spawn) +--make spawn cast healing spell + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/custodian_zaddar_sullissia/fprt_adv02_graveyard/custodian_zaddar093.mp3", "", "", 799819884, 1120621815, Spawn) + AddConversationOption(conversation, "Whoa!", "dlg_18_10") + AddConversationOption(conversation, "This is too much for me.") + StartConversation(conversation, NPC, Spawn, "Waktana, Shollamak, Quandar, Hakah!") +end + +function dlg_18_10(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/custodian_zaddar_sullissia/fprt_adv02_graveyard/custodian_zaddar094.mp3", "", "", 3038856904, 495454970, Spawn) + AddConversationOption(conversation, "It was a challenge, to be sure!", "dlg_18_11") + StartConversation(conversation, NPC, Spawn, "Exellent job, " .. GetName(Spawn).. "! I think we've done it! I must admit, I doubt even I could have accomplished this task without your help.") +end + +function dlg_18_11(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/custodian_zaddar_sullissia/fprt_adv02_graveyard/custodian_zaddar095.mp3", "", "", 22655114, 4161320381, Spawn) + AddConversationOption(conversation, "I believe you said something about me being rewarded...", "dlg_18_12") + StartConversation(conversation, NPC, Spawn, "The enemies of the Overlord are thwarted, and the Knights of Truth shall remain bound to this graveyard for the rest of time.") +end + +function dlg_18_12(NPC, Spawn) + SetStepComplete(Spawn, QUEST_7, 3) + + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/custodian_zaddar_sullissia/fprt_adv02_graveyard/custodian_zaddar101.mp3", "", "", 833256944, 2859353569, Spawn) + AddConversationOption(conversation, "Thank you, Zaddar. Is there anything else I can do for you?", "YourAssistance") + AddConversationOption(conversation, "I am honored to have served Freeport.") + StartConversation(conversation, NPC, Spawn, "Your reward is well deserved. You have my thanks. Your name will be well known within the Academy of Arcane Science.") +end + +------------------------------------------------------------------------------------------------------------------------ +-- QUEST 8 +------------------------------------------------------------------------------------------------------------------------ + +function YourAssistance(NPC, Spawn, conversation) + if conversation == nil then + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + end + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/custodian_zaddar_sullissia/fprt_adv02_graveyard/custodian_zaddar102.mp3", "", "", 1334238641, 4210079221, Spawn) + AddConversationOption(conversation, "I will serve my city once again.", "dlg_18_14") + AddConversationOption(conversation, "I have done enough.") + StartConversation(conversation, NPC, Spawn, "Your assistance to the Academy of Arcane Science and Freeport has been invaluable. But now more help is needed from you. Freeport is not out of danger! You must take the knowledge you have learned here and travel to the Ruins. Are you willing?") +end + +function dlg_18_14(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/custodian_zaddar_sullissia/fprt_adv02_graveyard/custodian_zaddar103.mp3", "", "", 1293287475, 951012464, Spawn) + AddConversationOption(conversation, "How do I get to the Ruins?", "dlg_18_15") + StartConversation(conversation, NPC, Spawn, "An outlying district of Freeport known as the Ruins is under attack. You must make your way there and report to Captain Arellius of the Freeport Militia. She will guide your efforts to help save our city.") +end + +function dlg_18_15(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/custodian_zaddar_sullissia/fprt_adv02_graveyard/custodian_zaddar104.mp3", "", "", 1699803915, 2037868440, Spawn) + AddConversationOption(conversation, "Are there any other places I could go to find adventure?", "dlg_18_16") + if HasQuest(Spawn, QUEST_8) then + AddConversationOption(conversation, "I will go to the Ruins and help defend Freeport.", "JourneySafely") + else + AddConversationOption(conversation, "I will go to the Ruins and help defend Freeport.", "OfferQuest8") + end + StartConversation(conversation, NPC, Spawn, "Make your way to the Ruins by traveling back to the docks of your home district. Use the mariner's bell to summon transportation outside of Freeport proper and ask to be taken to the Ruins. You should find Captain Arellius nearby. Hurry, hero of Freeport, there is no time to waste!") +end + +function dlg_18_16(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/custodian_zaddar_sullissia/fprt_adv02_graveyard/custodian_zaddar111.mp3", "", "", 2203286849, 4034856641, Spawn) + AddConversationOption(conversation, "Tell me more about Enforcer Kurdek.", "dlg_18_17") + AddConversationOption(conversation, "Tell me more about Inquisitor Thorson.", "dlg_18_18") + AddConversationOption(conversation, "Thank you for the advice.") + StartConversation(conversation, NPC, Spawn, "Eager, aren't we? Well, I know some thug named Enforcer Kurdek in the Sprawl needs help, and a fellow named Inquisitor Thorson in the Sunken City could use a hand.") +end + +function dlg_18_17(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/custodian_zaddar_sullissia/fprt_adv02_graveyard/custodian_zaddar112.mp3", "", "", 3842073321, 2379698803, Spawn) + AddConversationOption(conversation, "Tell me more about Inquisitor Thorson.", "dlg_18_18") + AddConversationOption(conversation, "Thank you for the information.") + StartConversation(conversation, NPC, Spawn, "Enforcer Kurdek on the Sprawl could use a hand keeping the local gangs in line. To journey to the Sprawl, use the mariner's bell on the docks of your home district to travel to Big Bend. Follow the halls north, then take the west passageway to the west gate.") +end + +function dlg_18_18(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/custodian_zaddar_sullissia/fprt_adv02_graveyard/custodian_zaddar113.mp3", "", "", 1469842786, 3647036314, Spawn) + AddConversationOption(conversation, "Tell me more about Enforcer Kurdek.", "dlg_18_17") + AddConversationOption(conversation, "Thank you for the information.") + StartConversation(conversation, NPC, Spawn, "Inquisitor Thorson in the Sunken City needs help investigating ancient mysteries that threaten Freeport's safety. To travel to the Sunken City, use the mariner's bell on the docks of your home district to travel outside Freeport and choose Sunken City as your destination.") +end + +function OfferQuest8(NPC, Spawn) + FaceTarget(NPC, Spawn) + OfferQuest(NPC, Spawn, QUEST_8) +end + +function OnQuest8(NPC, Spawn, conversation) + AddConversationOption(conversation, "How do I get to the Ruins?", "dlg_18_15") + AddConversationOption(conversation, "I'll travel there soon.") + StartConversation(conversation, NPC, Spawn, "Hello again, my friend. We desperately need your help in the ruins! Do not delay long, for our great city of Freeport is in peril!") +end + +function JourneySafely(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "Be well.") + StartConversation(conversation, NPC, Spawn, "Then safe journey to you, " .. GetName(Spawn) .. ".") +end \ No newline at end of file diff --git a/server/SpawnScripts/Graveyard/GravestoneofSirAckmin.lua b/server/SpawnScripts/Graveyard/GravestoneofSirAckmin.lua new file mode 100644 index 000000000..762c999ee --- /dev/null +++ b/server/SpawnScripts/Graveyard/GravestoneofSirAckmin.lua @@ -0,0 +1,27 @@ +--[[ + Script Name : SpawnScripts/Graveyard/GravestoneofSirAckmin.lua + Script Purpose : Gravestone of Sir Ackmin + Script Author : Scatman + Script Date : 2009.07.25 + Script Notes : +--]] + +local QUEST_FROM_GUARD = 252 + +function spawn(NPC) + SetRequiredQuest(NPC, QUEST_FROM_GUARD, 2) +end + +function hailed(NPC, Spawn) +end + +function respawn(NPC) + spawn(NPC) +end + +function casted_on(Target, Caster) + if HasQuest(Caster, QUEST_FROM_GUARD) and GetQuestStep(Caster, QUEST_FROM_GUARD) == 2 then + -- TODO: Display visual effect over tomb and show popup + SetStepComplete(Caster, QUEST_FROM_GUARD, 2) + end +end \ No newline at end of file diff --git a/server/SpawnScripts/Graveyard/GravestoneofSirArlin.lua b/server/SpawnScripts/Graveyard/GravestoneofSirArlin.lua new file mode 100644 index 000000000..30e8e2095 --- /dev/null +++ b/server/SpawnScripts/Graveyard/GravestoneofSirArlin.lua @@ -0,0 +1,25 @@ +--[[ + Script Name : SpawnScripts/Graveyard/GravestoneofSirArlin.lua + Script Purpose : Gravestone of Sir Arlin + Script Author : Scatman + Script Date : 2009.07.09 + Script Notes : +--]] + +function spawn(NPC) + SetRequiredQuest(NPC, 231, 4) +end + +function hailed(NPC, Spawn) +end + +function respawn(NPC) + spawn(NPC) +end + +function casted_on(Target, Caster) + if HasQuest(Caster, 231) and not QuestStepIsComplete(Caster, 231, 4) then + --TODO: Display popup + SetStepComplete(Caster, 231, 4) + end +end \ No newline at end of file diff --git a/server/SpawnScripts/Graveyard/GravestoneofSirBreel.lua b/server/SpawnScripts/Graveyard/GravestoneofSirBreel.lua new file mode 100644 index 000000000..d51e02ee7 --- /dev/null +++ b/server/SpawnScripts/Graveyard/GravestoneofSirBreel.lua @@ -0,0 +1,25 @@ +--[[ + Script Name : SpawnScripts/Graveyard/GravestoneofSirBreel.lua + Script Purpose : Gravestone of Sir Breel + Script Author : Scatman + Script Date : 2009.07.09 + Script Notes : +--]] + +function spawn(NPC) + SetRequiredQuest(NPC, 231, 2) +end + +function hailed(NPC, Spawn) +end + +function respawn(NPC) + spawn(NPC) +end + +function casted_on(Target, Caster) + if HasQuest(Caster, 231) and not QuestStepIsComplete(Caster, 231, 2) then + --TODO: Display popup + SetStepComplete(Caster, 231, 2) + end +end \ No newline at end of file diff --git a/server/SpawnScripts/Graveyard/GravestoneofSirHaligan.lua b/server/SpawnScripts/Graveyard/GravestoneofSirHaligan.lua new file mode 100644 index 000000000..7008d9e4d --- /dev/null +++ b/server/SpawnScripts/Graveyard/GravestoneofSirHaligan.lua @@ -0,0 +1,28 @@ +--[[ + Script Name : SpawnScripts/Graveyard/GravestoneofSirHaligan.lua + Script Purpose : Gravestone of Sir Haligan + Script Author : Scatman + Script Date : 2009.07.09 + Script Notes : +--]] + +function spawn(NPC) + SetRequiredQuest(NPC, 231, 3) +end + +function hailed(NPC, Spawn) +end + +function respawn(NPC) + spawn(NPC) +end + +function casted_on(Target, Caster) + if HasQuest(Caster, 231) and not QuestStepIsComplete(Caster, 231, 3) then + --TODO: Display popup. move the spawn to the popup and only spawn him if the specific option is clicked. (Peer into the opening) + Haligan = GetSpawn(Caster, 1250054) + if Hailigan == nil then + SpawnMob(GetZone(Caster), 1250054, false, -76.3563, -15.5289, 20.1095, 299.984) + end + end +end \ No newline at end of file diff --git a/server/SpawnScripts/Graveyard/GravestoneofSirPenan.lua b/server/SpawnScripts/Graveyard/GravestoneofSirPenan.lua new file mode 100644 index 000000000..54cc61907 --- /dev/null +++ b/server/SpawnScripts/Graveyard/GravestoneofSirPenan.lua @@ -0,0 +1,25 @@ +--[[ + Script Name : SpawnScripts/Graveyard/GravestoneofSirPenan.lua + Script Purpose : Gravestone of Sir Penan + Script Author : Scatman + Script Date : 2009.07.09 + Script Notes : +--]] + +function spawn(NPC) + SetRequiredQuest(NPC, 231, 1) +end + +function hailed(NPC, Spawn) +end + +function respawn(NPC) + spawn(NPC) +end + +function casted_on(Target, Caster) + if HasQuest(Caster, 231) and not QuestStepIsComplete(Caster, 231, 1) then + --TODO: Display popup + SetStepComplete(Caster, 231, 1) + end +end \ No newline at end of file diff --git a/server/SpawnScripts/Graveyard/GravestoneofSirXantille.lua b/server/SpawnScripts/Graveyard/GravestoneofSirXantille.lua new file mode 100644 index 000000000..a3a2e579f --- /dev/null +++ b/server/SpawnScripts/Graveyard/GravestoneofSirXantille.lua @@ -0,0 +1,25 @@ +--[[ + Script Name : SpawnScripts/Graveyard/GravestoneofSirXantille.lua + Script Purpose : Gravestone of Sir Xantille + Script Author : Scatman + Script Date : 2009.07.09 + Script Notes : +--]] + +function spawn(NPC) + SetRequiredQuest(NPC, 231, 5) +end + +function hailed(NPC, Spawn) +end + +function respawn(NPC) + spawn(NPC) +end + +function casted_on(Target, Caster) + if HasQuest(Caster, 231) and not QuestStepIsComplete(Caster, 231, 5) then + --TODO: Display popup + SetStepComplete(Caster, 231, 5) + end +end \ No newline at end of file diff --git a/server/SpawnScripts/Graveyard/GuardLSek.lua b/server/SpawnScripts/Graveyard/GuardLSek.lua new file mode 100644 index 000000000..28a2bc993 --- /dev/null +++ b/server/SpawnScripts/Graveyard/GuardLSek.lua @@ -0,0 +1,29 @@ +--[[ + Script Name : SpawnScripts/Graveyard/GuardLSek.lua + Script Purpose : Guard L'Sek + Script Author : Scatman + Script Date : 2009.07.25 + Script Notes : +--]] + +function spawn(NPC) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + + local choice = math.random(1, 4) + if choice == 1 then + PlayFlavor(NPC, "voiceover/english/darkelf_eco_evil_1/ft/service/guard/darkelf_guard_service_evil_1_hail_gm_edb196f8.mp3", "All praises to the Overlord. The Militia protects loyal citizens of Freeport.", "salute_freeport", 3432620709, 3039361332, Spawn) + elseif choice == 2 then + PlayFlavor(NPC, "voiceover/english/darkelf_eco_evil_1/ft/service/guard/darkelf_guard_service_evil_1_hail_gm_870ae3cb.mp3", "The Overlord commands me to patrol this area, and so I must.", "tapfoot", 3455786340, 1963116786, Spawn) + elseif choice == 3 then + PlayFlavor(NPC, "voiceover/english/darkelf_eco_evil_1/ft/service/guard/darkelf_guard_service_evil_1_hail_gm_582205e1.mp3", "Do you have business with the Freeport Militia?", "glare", 3330899926, 205777100, Spawn) + elseif choice == 4 then + PlayFlavor(NPC, "voiceover/english/darkelf_eco_evil_1/ft/service/guard/darkelf_guard_service_evil_1_hail_gm_7fa14d4.mp3", "Do not challenge my authority citizen. In Freeport, the Overlord's word is law!", "scold", 3071777755, 1811086423, Spawn) + end +end \ No newline at end of file diff --git a/server/SpawnScripts/Graveyard/GuardTCrit.lua b/server/SpawnScripts/Graveyard/GuardTCrit.lua new file mode 100644 index 000000000..a4045a997 --- /dev/null +++ b/server/SpawnScripts/Graveyard/GuardTCrit.lua @@ -0,0 +1,29 @@ +--[[ + Script Name : SpawnScripts/Graveyard/GuardTCrit.lua + Script Purpose : Guard T'Crit + Script Author : John Adams + Script Date : 2009.07.25 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +function spawn(NPC) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + + local choice = math.random(1, 4) + if choice == 1 then + PlayFlavor(NPC, "voiceover/english/darkelf_eco_evil_1/ft/service/guard/darkelf_guard_service_evil_1_hail_gm_edb196f8.mp3", "All praises to the Overlord. The Militia protects loyal citizens of Freeport.", "salute_freeport", 3432620709, 3039361332, Spawn) + elseif choice == 2 then + PlayFlavor(NPC, "voiceover/english/darkelf_eco_evil_1/ft/service/guard/darkelf_guard_service_evil_1_hail_gm_870ae3cb.mp3", "The Overlord commands me to patrol this area, and so I must.", "tapfoot", 3455786340, 1963116786, Spawn) + elseif choice == 3 then + PlayFlavor(NPC, "voiceover/english/darkelf_eco_evil_1/ft/service/guard/darkelf_guard_service_evil_1_hail_gm_582205e1.mp3", "Do you have business with the Freeport Militia?", "glare", 3330899926, 205777100, Spawn) + elseif choice == 4 then + PlayFlavor(NPC, "voiceover/english/darkelf_eco_evil_1/ft/service/guard/darkelf_guard_service_evil_1_hail_gm_7fa14d4.mp3", "Do not challenge my authority citizen. In Freeport, the Overlord's word is law!", "scold", 3071777755, 1811086423, Spawn) + end +end \ No newline at end of file diff --git a/server/SpawnScripts/Graveyard/KeeperVaracusTKur.lua b/server/SpawnScripts/Graveyard/KeeperVaracusTKur.lua new file mode 100644 index 000000000..df4b3dfb6 --- /dev/null +++ b/server/SpawnScripts/Graveyard/KeeperVaracusTKur.lua @@ -0,0 +1,270 @@ +--[[ + Script Name : SpawnScripts/Graveyard/KeeperVaracusTKur.lua + Script Purpose : Keeper Varacus T'Kur + Script Author : Scatman + Script Date : 2009.07.11 + Script Notes : +--]] + +local QUEST_1 = 232 +local QUEST_2 = 233 +local QUEST_5 = 235 + +function spawn(NPC) + ProvidesQuest(NPC, QUEST_2) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + if HasCompletedQuest(Spawn, QUEST_1) then + if HasCompletedQuest(Spawn, QUEST_2) then + if HasCompletedQuest(Spawn, QUEST_5) then + Say(NPC, "Back again? we have nothing else to offer you!", Spawn) + elseif HasQuest(Spawn, QUEST_5) then + OnQuest5(NPC, Spawn, conversation) + else + Say(NPC, "Thank you for your help!", Spawn) + end + elseif HasQuest(Spawn, QUEST_2) then + OnQuest2(NPC, Spawn, conversation) + else + FindThePages(NPC, Spawn, conversation) + end + elseif HasQuest(Spawn, QUEST_1) then + OnQuest1(NPC, Spawn, conversation) + else + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/keeper_varacus_t_kur/fprt_adv02_graveyard/varacus_tkur_busy_c0efc70b.mp3", "The Keepers of Ethernere don't have time for chatting.", "", 3808851913, 4000050632, Spawn) + end +end + +-------------------------------------------------------------------------------------------------------------------------------- +-- QUEST 1 +-------------------------------------------------------------------------------------------------------------------------------- + +function OnQuest1(NPC, Spawn, conversation) + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/keeper_varacus_t_kur/fprt_adv02_graveyard/varacus_tkur001.mp3", "", "", 829430571, 4055688593, Spawn) + AddConversationOption(conversation, "Greetings. You must be Varacus.", "dlg_9_1") + AddConversationOption(conversation, "Nothing, I thought you were someone else.") + StartConversation(conversation, NPC, Spawn, "Yes, what is it?") +end + +function dlg_9_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/keeper_varacus_t_kur/fprt_adv02_graveyard/varacus_tkur002.mp3", "", "", 1358191858, 2542564847, Spawn) + AddConversationOption(conversation, "My name is " .. GetName(Spawn) .. ". Zaddar sent me on behalf of the Academy.", "dlg_9_2") + AddConversationOption(conversation, "None of your business, Teir'Dal.") + StartConversation(conversation, NPC, Spawn, "Well, that all depends. Who are you?") +end + +function dlg_9_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/keeper_varacus_t_kur/fprt_adv02_graveyard/varacus_tkur003.mp3", "", "", 3292551343, 1126004800, Spawn) + AddConversationOption(conversation, "You don't sound very respectful toward your superior.", "dlg_9_3") + AddConversationOption(conversation, "I must be going.") + StartConversation(conversation, NPC, Spawn, "Zaddar sent you, eh? Far be it from him to get his hands dirty in the Graveyard, I suppose!") +end + +function dlg_9_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/keeper_varacus_t_kur/fprt_adv02_graveyard/varacus_tkur004.mp3", "", "", 2946582431, 2561170377, Spawn) + AddConversationOption(conversation, "Where does your order's name come from?", "dlg_9_4") + AddConversationOption(conversation, "Interesting, but I must go.") + StartConversation(conversation, NPC, Spawn, "Though we Keepers of Ethernere must answer to the Academy of Arcane Science, ours is a grave responsibility. We watch over the tombs of Norrath and ensure that the spirits of the dead make their journey to the afterlife. You have no doubt seen our guards patrolling the Graveyard roads, and perhaps noticed the boneyard watchers we summon to watch for disturbances.") +end + +function dlg_9_4(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/keeper_varacus_t_kur/fprt_adv02_graveyard/varacus_tkur005.mp3", "", "", 668156763, 3742751823, Spawn) + AddConversationOption(conversation, "A fascinating tale, but Zaddar sent me to retrieve some tome pages.", "dlg_9_5") + AddConversationOption(conversation, "I care not for your tale.") + StartConversation(conversation, NPC, Spawn, "The Keepers of Ethernere come from a proud tradition of service to the House of the Dead in our ancient Teir'Dal city of Neriak. Ethernere is a dark realm of agony where spirits of the dead must travel. It is said that when a Norrathian dies, the bell in Deathtoll Tower at the heart of Ethernere rings to signal their spirit's arrival.") +end + +function dlg_9_5(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/keeper_varacus_t_kur/fprt_adv02_graveyard/varacus_tkur006.mp3", "", "", 1546096595, 964116993, Spawn) + AddConversationOption(conversation, "The Overlord will not be pleased. He commanded that Zaddar be given the pages.", "FindThePages") + AddConversationOption(conversation, "This task is not my responsibility.") + StartConversation(conversation, NPC, Spawn, "Ah yes, you seek the tome pages. Unfortunately, however, they have gone missing. They may be scattered about the Graveyard, or some might have fallen into the hands of the undead. Such creatures are drawn to objects of arcane power. I have other duties to attend to, so you will need to conduct your own search for the pages here in the Graveyard.") +end + +function FindThePages(NPC, Spawn, conversation) + if HasQuest(Spawn, QUEST_1) then + SetStepComplete(Spawn, QUEST_1, 1) + end + + if conversation == nil then + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + end + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/keeper_varacus_t_kur/fprt_adv02_graveyard/varacus_tkur007.mp3", "", "", 2021743149, 3486926438, Spawn) + AddConversationOption(conversation, "I will find the pages.", "OfferQuest2") + AddConversationOption(conversation, "I can't help you right now.") + StartConversation(conversation, NPC, Spawn, "I had no idea this matter was so urgent to the Overlord! Please, hero of Freeport, you must find those pages. If not, I think all of us may face our master's wrath. Please let me know when you have found them.") +end + +-------------------------------------------------------------------------------------------------------------------------------- +-- QUEST 2 +-------------------------------------------------------------------------------------------------------------------------------- + +function OfferQuest2(NPC, Spawn) + FaceTarget(NPC, Spawn) + OfferQuest(NPC, Spawn, QUEST_2) +end + +function OnQuest2(NPC, Spawn, conversation) + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/keeper_varacus_t_kur/fprt_adv02_graveyard/varacus_tkur009.mp3", "", "", 3736503585, 3888829392, Spawn) + + if GetQuestStep(Spawn, QUEST_2) > 4 then + Say(NPC, "Please, don't tell anyone about our conversation!", Spawn) + else + if GetQuestStep(Spawn, QUEST_2) == 4 then + AddConversationOption(conversation, "I've found the missing pages.", "dlg_10_1") + end + + AddConversationOption(conversation, "Not yet, but I will keep looking.") + StartConversation(conversation, NPC, Spawn, "I hope your search for the missing pages has been fruitful. Neither of us can afford to disappoint the Overlord.") + end +end + +function dlg_10_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/keeper_varacus_t_kur/fprt_adv02_graveyard/varacus_tkur010.mp3", "", "", 3933639759, 3329980648, Spawn) + AddConversationOption(conversation, "By the Tower of Marr and near the graves of the fallen knights. Some were also in the possession of the undead.", "dlg_10_2") + AddConversationOption(conversation, "I don't have time to discuss this.") + StartConversation(conversation, NPC, Spawn, "Well done, " .. GetName(Spawn) .. "! Zaddar was right to choose you for this duty. Where did you find the pages?") +end + +function dlg_10_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/keeper_varacus_t_kur/fprt_adv02_graveyard/varacus_tkur011.mp3", "", "", 3532304049, 948480083, Spawn) + AddConversationOption(conversation, "What could be causing this to happen?", "dlg_10_3") + AddConversationOption(conversation, "This is no concern of mine.") + StartConversation(conversation, NPC, Spawn, "The undead had them, eh? It is as I feared. There has been a marked increase in their activities as of late, the investigation of which has monopolized my time.") +end + +function dlg_10_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/keeper_varacus_t_kur/fprt_adv02_graveyard/varacus_tkur012.mp3", "", "", 422855190, 220610803, Spawn) + AddConversationOption(conversation, "I will take the pages to him.", "dlg_10_4") + AddConversationOption(conversation, "It's not really my problem.") + StartConversation(conversation, NPC, Spawn, "Perhaps the veil between our world and Ethernere is weakening, or maybe the influence of Mithaniel Marr is returning in some way to awaken his fallen soldiers. In any case, the safety of Freeport demands that you get these pages to Zaddar right away.") +end + +function dlg_10_4(NPC, Spawn) + SetStepComplete(Spawn, QUEST_2, 4) + + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/keeper_varacus_t_kur/fprt_adv02_graveyard/varacus_tkur013.mp3", "", "", 2923473609, 4294205867, Spawn) + AddConversationOption(conversation, "I will do so. I hope to work with you again, Varacus.") + AddConversationOption(conversation, "I'm sick of running errands. Farewell.") + StartConversation(conversation, NPC, Spawn, "Here, take this book cover and put the pages inside it for safe keeping. Take the tome to Zaddar so that he can finish his research.") +end + +-------------------------------------------------------------------------------------------------------------------------------- +-- QUEST 5 +-------------------------------------------------------------------------------------------------------------------------------- + +function OnQuest5(NPC, Spawn, conversation) + if GetQuestStep(Spawn, QUEST_5) == 1 then + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/keeper_varacus_t_kur/fprt_adv02_graveyard/varacus_tkur015.mp3", "", "", 423371381, 2980925675, Spawn) + AddConversationOption(conversation, "Zaddar has need of something that you possess.", "dlg_13_1") + AddConversationOption(conversation, "Nevermind, I need to go.") + StartConversation(conversation, NPC, Spawn, "Hello again, " .. GetName(Spawn) .. ". What brings you back to the Keepers?") + else + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/keeper_varacus_t_kur/fprt_adv02_graveyard/varacus_tkur_took_staff_4dd499f0.mp3", "Make sure you take care of our staff!", "", 1927300864, 3031979454, Spawn) + end +end + +function dlg_13_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/keeper_varacus_t_kur/fprt_adv02_graveyard/varacus_tkur016.mp3", "", "", 2481073188, 86162182, Spawn) + AddConversationOption(conversation, "No, he needs the Staff of Ethernere.", "dlg_13_2") + AddConversationOption(conversation, "Nevermind, I need to go.") + StartConversation(conversation, NPC, Spawn, "I have no more spell parchments, if that's what he's after.") +end + +function dlg_13_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/keeper_varacus_t_kur/fprt_adv02_graveyard/varacus_tkur017.mp3", "", "", 722192907, 1883808749, Spawn) + AddConversationOption(conversation, "But Zaddar says it is critical that he use it.", "dlg_13_3") + AddConversationOption(conversation, "Just forget it.") + StartConversation(conversation, NPC, Spawn, "The Staff of Ethernere is our most sacred relic, entrusted to our order when it was founded in Neriak. I couldn't possibly part with it, even for a short while.") +end + +function dlg_13_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/keeper_varacus_t_kur/fprt_adv02_graveyard/varacus_tkur018.mp3", "", "", 821574395, 1723573145, Spawn) + AddConversationOption(conversation, "The ward keeping the undead inside the Graveyard is failing, and we need the staff to restore it.", "dlg_13_4") + AddConversationOption(conversation, "Go ask him yourself.") + StartConversation(conversation, NPC, Spawn, "Though my order now serves the Academy of Arcane Science, my vow to the Keepers of Ethernere supersedes the Academy's demands. Why does he need the staff?") +end + +function dlg_13_4(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/keeper_varacus_t_kur/fprt_adv02_graveyard/varacus_tkur019.mp3", "", "", 3925056079, 4036271614, Spawn) + AddConversationOption(conversation, "There's no time, Varacus. We must do this ourselves.", "dlg_13_5") + AddConversationOption(conversation, "You're probably right.") + StartConversation(conversation, NPC, Spawn, "That is dire news indeed! But wouldn't someone like Thaumaturge Ranollious at the Academy be better suited for this task?") +end + +function dlg_13_5(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/keeper_varacus_t_kur/fprt_adv02_graveyard/varacus_tkur020.mp3", "", "", 2024157770, 1751672495, Spawn) + AddConversationOption(conversation, "I'll let him know.", "dlg_13_6") + AddConversationOption(conversation, "Nevermind.") + StartConversation(conversation, NPC, Spawn, "Very well. Zaddar may use the Staff of Ethernere. He can return it to me when he's certain the binding ward is back in place.") +end + +function dlg_13_6(NPC, Spawn) + SetStepComplete(Spawn, QUEST_5, 1) + + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + -- The Staff of Ethernere + -- TODO: Show quest reward popup. + if not HasItem(Spawn, 21591) then + SummonItem(Spawn, 21591) + end + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/keeper_varacus_t_kur/fprt_adv02_graveyard/varacus_tkur021.mp3", "", "", 1322632030, 1536532403, Spawn) + AddConversationOption(conversation, "I will take good care of the staff, Varacus. Be well.") + StartConversation(conversation, NPC, Spawn, "Travel swiftly, Conjura. All of Freeport is depending on you now!") +end + diff --git a/server/SpawnScripts/Graveyard/RTok.lua b/server/SpawnScripts/Graveyard/RTok.lua new file mode 100644 index 000000000..a44b543c4 --- /dev/null +++ b/server/SpawnScripts/Graveyard/RTok.lua @@ -0,0 +1,33 @@ +--[[ + Script Name : SpawnScripts/Graveyard/RTok.lua + Script Purpose : R'Tok + Script Author : Scatman + Script Date : 2009.07.25 + Script Notes : +--]] + +function spawn(NPC) + SetPlayerProximityFunction(NPC, 10, "RandomChat") +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + RandomChat(NPC, Spawn) +end + +function RandomChat(NPC, Spawn) + FaceTarget(NPC, Spawn) + local choice = math.random(1, 4) + if choice == 1 then + PlayFlavor(NPC, "voiceover/english/optional2/darkelf_eco_evil_1/ft/service/merchant/darkelf_merchant_service_evil_1_aoi_gm_53388b91.mp3", "Only traitors to the Overlord would pass up a bargain like this. You're not a traitor are you?", "scold", 1403936443, 3068231605, Spawn) + elseif choice == 2 then + PlayFlavor(NPC, "voiceover/english/optional2/darkelf_eco_evil_1/ft/service/merchant/darkelf_merchant_service_evil_1_hail_gm_6ec08438.mp3", "In spite of the cost of living, it's still quite a popular item.", "ponder", 2781916825, 678640011, Spawn) + elseif choice == 3 then + PlayFlavor(NPC, "voiceover/english/optional2/darkelf_eco_evil_1/ft/service/merchant/darkelf_merchant_service_evil_1_hail_gm_aff3fc07.mp3", "Are you going to buy anything today or am I just wasting my time? This isn't a museum display you know!", "glare", 898812878, 1402234103, Spawn) + elseif choice == 4 then + PlayFlavor(NPC, "voiceover/english/optional2/darkelf_eco_evil_1/ft/service/merchant/darkelf_merchant_service_evil_1_hail_gm_f715099e.mp3", "Hello there, kind adventurer. My merchandise carries the seal of the Overlord himself! Go ahead, take a look!", "salute_freeport", 1302153135, 3653961458, Spawn) + end +end diff --git a/server/SpawnScripts/Graveyard/SirHaligan,CaptainoftheKnightsofTruth.lua b/server/SpawnScripts/Graveyard/SirHaligan,CaptainoftheKnightsofTruth.lua new file mode 100644 index 000000000..09d9fee90 --- /dev/null +++ b/server/SpawnScripts/Graveyard/SirHaligan,CaptainoftheKnightsofTruth.lua @@ -0,0 +1,19 @@ +--[[ + Script Name : SpawnScripts/Graveyard/SirHaligan,CaptainoftheKnightsofTruth.lua + Script Purpose : Sir Haligan, Captain of the Knights of Truth + Script Author : Scatman + Script Date : 2009.07.10 + Script Notes : +--]] + +function spawn(NPC) + Say(NPC, "Who dares disturb my slumber?!") +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) +end + +function respawn(NPC) + spawn(NPC) +end \ No newline at end of file diff --git a/server/SpawnScripts/Graveyard/UnholyRelic.lua b/server/SpawnScripts/Graveyard/UnholyRelic.lua new file mode 100644 index 000000000..449b4c357 --- /dev/null +++ b/server/SpawnScripts/Graveyard/UnholyRelic.lua @@ -0,0 +1,28 @@ +--[[ + Script Name : SpawnScripts/Graveyard/UnholyRelic.lua + Script Purpose : Unholy Relic + Script Author : Scatman + Script Date : 2009.07.12 + Script Notes : +--]] + +local ZADDAR_QUEST_4 = 234 + +function spawn(NPC) + SetRequiredQuest(NPC, ZADDAR_QUEST_4, 3) +end + +function hailed(NPC, Spawn) +end + +function respawn(NPC) + spawn(NPC) +end + +function casted_on(Target, Caster) + if HasQuest(Spawn, ZADDAR_QUEST_4) and GetQuestStep(Spawn, ZADDAR_QUEST_4) == 3 then + SetStepComplete(Spawn, ZADDAR_QUEST_4, 3) + SendMessage(Caster, "You retrieve the unholy relic.") + Despawn(Target) + end +end \ No newline at end of file diff --git a/server/SpawnScripts/Graveyard/ZekvilaDizelk.lua b/server/SpawnScripts/Graveyard/ZekvilaDizelk.lua new file mode 100644 index 000000000..eb7163fbe --- /dev/null +++ b/server/SpawnScripts/Graveyard/ZekvilaDizelk.lua @@ -0,0 +1,87 @@ +--[[ + Script Name : SpawnScripts/Graveyard/ZekvilaDizelk.lua + Script Purpose : Zekvila Dizelk + Script Author : scatman + Script Date : 2009.07.12 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +local QUEST_1 = 237 + +function spawn(NPC) + ProvidesQuest(NPC, QUEST_1) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + RandomVoice(NPC, Spawn) + + if HasCompletedQuest(Spawn, QUEST_1) then + Say(NPC, "You must not let that fool Ithelz rule the Scale Yard. I need the help of a diligent soldier... what do you need, peasant?", Spawn) + elseif HasQuest(Spawn, QUEST_2) then + OnQuest1(NPC, Spawn, conversation) + else + NotWhoIAmExpecting(NPC, Spawn, conversation) + end +end + +function RandomVoice(NPC, Spawn) + local choice = math.random(1, 3) + if choice == 1 then + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_1_1027.mp3", "", "", 0, 0, Spawn) + elseif choice == 2 then + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_2_1027.mp3", "", "", 0, 0, Spawn) + elseif choice == 3 then + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_3_1027.mp3", "", "", 0, 0, Spawn) + end +end + +---------------------------------------------------------------------------------------------------------- +-- QUEST 1 +---------------------------------------------------------------------------------------------------------- + +function NotWhoIAmExpecting(NPC, Spawn, conversation) + AddConversationOption(conversation, "Who were you expecting?", "dlg_9_1") + AddConversationOption(conversation, "None. I'll leave you alone.") + StartConversation(conversation, NPC, Spawn, "You are not who I was expecting. What game are you playing with me?") +end + +function dlg_9_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "What task do you need done?", "OfferQuest1") + AddConversationOption(conversation, "Actually, you're wrong. It's not in my interests to do so. Bye.") + StartConversation(conversation, NPC, Spawn, "Gyah! How dare you speak to me with a sharp tongue! Who do you think you are, fool? You do not bear the dark instrument; therefore, I've no need for you. Unless ... yes ... yes ... unless my emissary failed at his task. Yes, you shall succeed where the emissary failed. Trust me - it is in your best interest to agree with me.") +end + +function OfferQuest1(NPC, Spawn) + FaceTarget(NPC, Spawn) + OfferQuest(NPC, Spawn, QUEST_1) +end + +function OnQuest1(NPC, Spawn, conversation) + if GetQuestStep(NPC, Spawn) == 1 then + Say(NPC, "You are playing games with me, you deceitful little imp. Go collect the souls or you shall pay dearly.", Spawn) + else + AddConversationOption(conversation, "I have collected ten souls from the Undead Knights.", "dlg_1_1") + AddConversationOption(conversation, "None. I'll leave you alone.") + StartConversation(conversation, NPC, Spawn, "You are not who I was expecting. What game are you playing with me?") + end +end + +function dlg_1_1(NPC, Spawn) + SetStepComplete(Spawn, QUEST_1, 2) + + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "Servant?! Don't ever refer to me... whatever. Bye.") + StartConversation(conversation, NPC, Spawn, "Give me the crystal. Ah, yes, it's filled. With these souls, Ithelz's puppet barbarians cannot prevent me from ruling over the district. You served me well, servant. Take this coin as a token of my gratitude.") +end \ No newline at end of file diff --git a/server/SpawnScripts/Graveyard/acrumblingskeleton.lua b/server/SpawnScripts/Graveyard/acrumblingskeleton.lua new file mode 100644 index 000000000..0c5d6b480 --- /dev/null +++ b/server/SpawnScripts/Graveyard/acrumblingskeleton.lua @@ -0,0 +1,62 @@ +--[[ + Script Name : SpawnScripts/Graveyard/acrumblingskeleton.lua + Script Purpose : a crumbling skeleton + Script Author : Scatman + Script Date : 2009.07.10 + Script Notes : +--]] + +local spoke = false + +function spawn(NPC) + spoke = false +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) +end + +function respawn(NPC) + spawn(NPC) +end + +function healthchanged(NPC, Spawn) + local hp_percent = GetHP(NPC) / GetMaxHP(NPC) + if hp_percent <= 0.50 and spoke == false then + spoke = true + RandomCallOut(NPC, Spawn) + AddTimer(NPC, 30000, "ResetSpoke") + end +end + +function RandomCallOut(NPC, Spawn) + local choice = math.random(1, 5) + if choice == 1 then + PlayFlavor(NPC, "voiceover/english/optional3/skeleton_base_2/ft/skeleton/skeleton_base_2_1_halfhealth_29344c6f.mp3", "I didn't need those bones anyway.", "", 1704957193, 2042978689) + elseif choice == 2 then + PlayFlavor(NPC, "voiceover/english/skeleton_base_1/ft/skeleton/skeleton_base_1_1_halfhealth_a4c947e4.mp3", "I'm shattered and broken.", "", 4021018144, 1305053073) + elseif choice == 3 then + PlayFlavor(NPC, "voiceover/english/skeleton_base_1/ft/skeleton/skeleton_base_1_1_halfhealth_d9ece37f.mp3", "You've shaken the dust from my bones.", "", 2011286772, 326848383) + elseif choice == 4 then + PlayFlavor(NPC, "voiceover/english/optional3/skeleton_base_2/ft/skeleton/skeleton_base_2_1_halfhealth_f1d542e0.mp3", "Dying didn't feel good the first time.", "", 766636803, 1915881366) + elseif choice == 5 then + PlayFlavor(NPC, "voiceover/english/optional3/skeleton_base_2/ft/skeleton/skeleton_base_2_1_aggro_18d1544d.mp3", "As I rise from the grave, you will now take my place!", "", 485726074, 3646499350) + end +end + +function ResetSpoke(NPC) + spoke = false +end + +function death(NPC, Spawn) + spoke = false + local chance = math.random(1, 100) + if chance <= 10 then + local choice = math.random(1, 2) + if choice == 1 then + PlayFlavor(NPC, "voiceover/english/skeleton_base_1/ft/skeleton/skeleton_base_1_1_death_fbcb503b.mp3", "Rest in peace.", "", 3591309093, 1423656405, Spawn) + elseif choice == 2 then + PlayFlavor(NPC, "voiceover/english/skeleton_base_1/ft/skeleton/skeleton_base_1_1_death_ff39f327.mp3", "Final death comes at last.", "", 3768284332, 62777040, Spawn) + end + end +end \ No newline at end of file diff --git a/server/SpawnScripts/Graveyard/anEthernereguard.lua b/server/SpawnScripts/Graveyard/anEthernereguard.lua new file mode 100644 index 000000000..2232df5bc --- /dev/null +++ b/server/SpawnScripts/Graveyard/anEthernereguard.lua @@ -0,0 +1,83 @@ +--[[ + Script Name : SpawnScripts/Graveyard/anEthernereguard.lua + Script Purpose : an Ethernere guard + Script Author : scatman + Script Date : 2009.07.25 + Script Notes : +--]] + +-- This quest is repeatable I think. +local QUEST_1 = 252 + +function spawn(NPC) + ProvidesQuest(NPC, QUEST_1) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + if HasCompletedQuest(Spawn, QUEST_1) then + Say(NPC, "May you complete your task without leaving this realm.", Spawn) + elseif HasQuest(Spawn, QUEST_1) then + OnQuest1(NPC, Spawn, conversation) + else + HailCitizen(NPC, Spawn, conversation) + end +end + +function HailCitizen(NPC, Spawn, conversation) + PlayFlavor(NPC, "an_ethernere_guard/fprt_adv02_graveyard/ethernere_keeper001.mp3", "", "", 1684681522, 203789175, Spawn) + AddConversationOption(conversation, "Yes?", "dlg_3_1") + AddConversationOption(conversation, "I am busy.") + StartConversation(conversation, NPC, Spawn, "Hail Citizen!") +end + +function dlg_3_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "an_ethernere_guard/fprt_adv02_graveyard/ethernere_keeper002.mp3", "", "", 3556340892, 124958826, Spawn) + AddConversationOption(conversation, "Of course!", "dlg_3_2") + AddConversationOption(conversation, "I am busy.") + StartConversation(conversation, NPC, Spawn, "Freeport has need of your services, will you fulfill your duty?") +end + +function dlg_3_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "an_ethernere_guard/fprt_adv02_graveyard/ethernere_keeper003.mp3", "", "", 2377701112, 1112213409, Spawn) + AddConversationOption(conversation, "What do you need me to do?", "OfferQuest1") + AddConversationOption(conversation, "I am busy.") + StartConversation(conversation, NPC, Spawn, "Ancient spirits have recently awoken, their graves disturbed by the graverobbers in this area. The graverobbers have taken ancient holy relics from them and they wander in search of that which was taken.") +end + +function OfferQuest1(NPC, Spawn) + FaceTarget(NPC, Spawn) + OfferQuest(NPC, Spawn, QUEST_1) +end + +function OnQuest1(NPC, Spawn, conversation) + if GetQuestStep(Spawn, QUEST_1) == 3 then + AddConversationOption(conversation, "Yes, I returned the relics to the tombs.", "Successful") + AddConversationOption(conversation, "No, not yet.") + StartConversation(conversation, NPC, Spawn, "Were you successful in your mission?") + else + PlayFlavor(NPC, "", "If you see any graverobbers come tell me immediately.", "", 1689589577, 4560189, Spawn) + end +end + +function Successful(NPC, Spawn) + SetStepComplete(Spawn, QUEST_1, 3) + + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "Thank you.") + StartConversation(conversation, NPC, Spawn, "Excellent. Thank you for your service to Freeport and the Keepers of Ethernere. Please, take this for your trouble.") +end \ No newline at end of file diff --git a/server/SpawnScripts/Graveyard/anamateurgraverobber.lua b/server/SpawnScripts/Graveyard/anamateurgraverobber.lua new file mode 100644 index 000000000..fd5c453b7 --- /dev/null +++ b/server/SpawnScripts/Graveyard/anamateurgraverobber.lua @@ -0,0 +1,111 @@ +--[[ + Script Name : SpawnScripts/Graveyard/anamateurgraverobber.lua + Script Purpose : an amateur graverobber + Script Author : Scatman + Script Date : 2009.07.25 + Script Notes : +--]] + +local spoke = false +local MALE = 1 +local FEMALE = 2 + +function spawn(NPC) + spoke = false +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) +end + +function aggro(NPC, Spawn) + spoke = false + local chance = math.random(1, 100) + if chance <= 20 then + if GetGender(NPC) == MALE then + local choice = math.random(1, 3) + if choice == 1 then + PlayFlavor(NPC, "voiceover/english/optional3/ratonga_base_2/ft/ratonga/ratonga_base_2_1_aggro_gm_88cef174.mp3", "Overhear my plansies. Gore you I will!", "", 3355146665, 1217299863, Spawn) + elseif choice == 2 then + PlayFlavor(NPC, "voiceover/english/optional3/ratonga_base_1/ft/ratonga/ratonga_base_1_1_aggro_gm_4af7a99.mp3", "You're not as sneaky as you thought.", "", 1683997219, 1178080164, Spawn) + elseif choice == 3 then + PlayFlavor(NPC, "voiceover/english/optional3/ratonga_base_1/ft/ratonga/ratonga_base_1_1_aggro_gm_7c145a1f.mp3", "Sees us, did we? Must not let you talk then.", "", 1928944506, 4197211546, Spawn) + end + elseif GetGender(NPC) == FEMALE then + local choice = math.random(1, 5) + if choice == 1 then + PlayFlavor(NPC, "voiceover/english/optional3/ratonga_base_1/ft/ratonga/ratonga_base_1_1_aggro_gf_4af7a99.mp3", "You're not as sneaky as you thought.", "", 1898398655, 853136085, Spawn) + elseif choice == 2 then + PlayFlavor(NPC, "voiceover/english/optional3/ratonga_base_1/ft/ratonga/ratonga_base_1_1_aggro_gf_7c145a1f.mp3", "Sees us, did we? Must not let you talk then.", "", 2661963919, 697614069, Spawn) + elseif choice == 3 then + PlayFlavor(NPC, "voiceover/english/optional3/ratonga_base_1/ft/ratonga/ratonga_base_1_1_aggro_gf_ce5970ec.mp3", "Startle us, you did! We'll remedy that.", "", 3905874632, 4086824059, Spawn) + elseif choice == 4 then + PlayFlavor(NPC, "voiceover/english/optional3/ratonga_base_2/ft/ratonga/ratonga_base_2_1_aggro_gf_a3d8a506.mp3", "Not very nice of you to be all sneaky.", "", 2210593426, 1217099089, Spawn) + elseif choice == 5 then + PlayFlavor(NPC, "voiceover/english/optional3/ratonga_base_2/ft/ratonga/ratonga_base_2_1_battle_gf_7509fbcd.mp3", "Youses never see this one coming.", "", 105547293, 3999948070, Spawn) + end + end + end +end + +function healthchanged(NPC, Spawn) + local hp_percent = GetHP(NPC) / GetMaxHP(NPC) + if hp_percent <= 0.50 and spoke == false then + spoke = true + if GetGender(NPC) == MALE then + local choice = math.random(1, 3) + if choice == 1 then + PlayFlavor(NPC, "voiceover/english/optional3/ratonga_base_1/ft/ratonga/ratonga_base_1_1_halfhealth_gm_9c7df7ea.mp3", "That patch of fur will never grow back, you know.", "", 2241929269, 2874755723, Spawn) + elseif choice == 2 then + PlayFlavor(NPC, "voiceover/english/optional3/ratonga_base_1/ft/ratonga/ratonga_base_1_1_halfhealth_gm_a2ace12c.mp3", "Don't hurt us! We're no threat to your mightiness.", "", 3593075606, 2907318102, Spawn) + elseif choice == 3 then + PlayFlavor(NPC, "voiceover/english/optional3/ratonga_base_2/ft/ratonga/ratonga_base_2_1_halfhealth_gm_7cab6d92.mp3", "That wasn't very nice to do, friend.", "", 413844109, 3656803270, Spawn) + end + elseif GetGender(NPC) == FEMALE then + local choice = math.random(1, 4) + if choice == 1 then + PlayFlavor(NPC, "voiceover/english/optional3/ratonga_base_2/ft/ratonga/ratonga_base_2_1_halfhealth_gf_7cab6d92.mp3", "That wasn't very nice to do, friend.", "", 2063305887, 2078518166, Spawn) + elseif choice == 2 then + PlayFlavor(NPC, "voiceover/english/optional3/ratonga_base_2/ft/ratonga/ratonga_base_2_1_halfhealth_gf_ff30e9f.mp3", "Shifty thingsies you are.", "", 1975586766, 1774921113, Spawn) + elseif choice == 3 then + PlayFlavor(NPC, "voiceover/english/optional3/ratonga_base_1/ft/ratonga/ratonga_base_1_1_halfhealth_gf_9c7df7ea.mp3", "That patch of fur will never grow back, you know.", "", 4146309857, 1135607887, Spawn) + elseif choice == 4 then + PlayFlavor(NPC, "voiceover/english/optional3/ratonga_base_1/ft/ratonga/ratonga_base_1_1_halfhealth_gf_a2ace12c.mp3", "Don't hurt us! We're no threat to your mightiness.", "", 1631608737, 385456101, Spawn) + end + end + end +end + +function killed(NPC, Spawn) + spoke = false + local chance = math.random(1, 100) + if chance <= 20 then + if GetGender(NPC) == MALE then + local choice = math.random(1, 3) + if choice == 1 then + PlayFlavor(NPC, "voiceover/english/optional3/ratonga_base_1/ft/ratonga/ratonga_base_1_1_victory_gm_15e8fc93.mp3", "One less worry in my life!", "", 4116602987, 3804155045, Spawn) + elseif choice == 2 then + PlayFlavor(NPC, "voiceover/english/optional3/ratonga_base_1/ft/ratonga/ratonga_base_1_1_victory_gm_732f23e7.mp3", "The dead tell no tales", "", 636430623, 2715556056, Spawn) + elseif choice == 3 then + PlayFlavor(NPC, "voiceover/english/optional3/ratonga_base_1/ft/ratonga/ratonga_base_1_1_victory_gm_935883a.mp3", "Shhh ... shhh ... it's ok ... shhh ...shhh. Stop fighting it...", "", 1459182295, 1340643629, Spawn) + end + elseif GetGender(NPC) == FEMALE then + PlayFlavor(NPC, "voiceover/english/optional3/ratonga_base_1/ft/ratonga/ratonga_base_1_1_victory_gf_732f23e7.mp3", "The dead tell no tales", "", 1062202875, 1393213249, Spawn) + end + end +end + +function death(NPC, Spawn) + spoke = false + local chance = math.random(1, 100) + if chance <= 20 then + if GetGender(NPC) == MALE then + PlayFlavor(NPC, "voiceover/english/optional3/ratonga_base_1/ft/ratonga/ratonga_base_1_1_death_gm_e9ba5c44.mp3", "Flee and take care of them later.", "", 2862575499, 3074650652, Spawn) + elseif GetGender(NPC) == FEMALE then + end + end +end \ No newline at end of file diff --git a/server/SpawnScripts/Graveyard/anovicegraverobber.lua b/server/SpawnScripts/Graveyard/anovicegraverobber.lua new file mode 100644 index 000000000..2ef07bc9b --- /dev/null +++ b/server/SpawnScripts/Graveyard/anovicegraverobber.lua @@ -0,0 +1,111 @@ +--[[ + Script Name : SpawnScripts/Graveyard/anovicegraverobber.lua + Script Purpose : a novice graverobber + Script Author : Scatman + Script Date : 2009.07.25 + Script Notes : +--]] + +local spoke = false +local MALE = 1 +local FEMALE = 2 + +function spawn(NPC) + spoke = false +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) +end + +function aggro(NPC, Spawn) + spoke = false + local chance = math.random(1, 100) + if chance <= 20 then + if GetGender(NPC) == MALE then + local choice = math.random(1, 3) + if choice == 1 then + PlayFlavor(NPC, "voiceover/english/optional3/ratonga_base_2/ft/ratonga/ratonga_base_2_1_aggro_gm_88cef174.mp3", "Overhear my plansies. Gore you I will!", "", 3355146665, 1217299863, Spawn) + elseif choice == 2 then + PlayFlavor(NPC, "voiceover/english/optional3/ratonga_base_1/ft/ratonga/ratonga_base_1_1_aggro_gm_4af7a99.mp3", "You're not as sneaky as you thought.", "", 1683997219, 1178080164, Spawn) + elseif choice == 3 then + PlayFlavor(NPC, "voiceover/english/optional3/ratonga_base_1/ft/ratonga/ratonga_base_1_1_aggro_gm_7c145a1f.mp3", "Sees us, did we? Must not let you talk then.", "", 1928944506, 4197211546, Spawn) + end + elseif GetGender(NPC) == FEMALE then + local choice = math.random(1, 5) + if choice == 1 then + PlayFlavor(NPC, "voiceover/english/optional3/ratonga_base_1/ft/ratonga/ratonga_base_1_1_aggro_gf_4af7a99.mp3", "You're not as sneaky as you thought.", "", 1898398655, 853136085, Spawn) + elseif choice == 2 then + PlayFlavor(NPC, "voiceover/english/optional3/ratonga_base_1/ft/ratonga/ratonga_base_1_1_aggro_gf_7c145a1f.mp3", "Sees us, did we? Must not let you talk then.", "", 2661963919, 697614069, Spawn) + elseif choice == 3 then + PlayFlavor(NPC, "voiceover/english/optional3/ratonga_base_1/ft/ratonga/ratonga_base_1_1_aggro_gf_ce5970ec.mp3", "Startle us, you did! We'll remedy that.", "", 3905874632, 4086824059, Spawn) + elseif choice == 4 then + PlayFlavor(NPC, "voiceover/english/optional3/ratonga_base_2/ft/ratonga/ratonga_base_2_1_aggro_gf_a3d8a506.mp3", "Not very nice of you to be all sneaky.", "", 2210593426, 1217099089, Spawn) + elseif choice == 5 then + PlayFlavor(NPC, "voiceover/english/optional3/ratonga_base_2/ft/ratonga/ratonga_base_2_1_battle_gf_7509fbcd.mp3", "Youses never see this one coming.", "", 105547293, 3999948070, Spawn) + end + end + end +end + +function healthchanged(NPC, Spawn) + local hp_percent = GetHP(NPC) / GetMaxHP(NPC) + if hp_percent <= 0.50 and spoke == false then + spoke = true + if GetGender(NPC) == MALE then + local choice = math.random(1, 3) + if choice == 1 then + PlayFlavor(NPC, "voiceover/english/optional3/ratonga_base_1/ft/ratonga/ratonga_base_1_1_halfhealth_gm_9c7df7ea.mp3", "That patch of fur will never grow back, you know.", "", 2241929269, 2874755723, Spawn) + elseif choice == 2 then + PlayFlavor(NPC, "voiceover/english/optional3/ratonga_base_1/ft/ratonga/ratonga_base_1_1_halfhealth_gm_a2ace12c.mp3", "Don't hurt us! We're no threat to your mightiness.", "", 3593075606, 2907318102, Spawn) + elseif choice == 3 then + PlayFlavor(NPC, "voiceover/english/optional3/ratonga_base_2/ft/ratonga/ratonga_base_2_1_halfhealth_gm_7cab6d92.mp3", "That wasn't very nice to do, friend.", "", 413844109, 3656803270, Spawn) + end + elseif GetGender(NPC) == FEMALE then + local choice = math.random(1, 4) + if choice == 1 then + PlayFlavor(NPC, "voiceover/english/optional3/ratonga_base_2/ft/ratonga/ratonga_base_2_1_halfhealth_gf_7cab6d92.mp3", "That wasn't very nice to do, friend.", "", 2063305887, 2078518166, Spawn) + elseif choice == 2 then + PlayFlavor(NPC, "voiceover/english/optional3/ratonga_base_2/ft/ratonga/ratonga_base_2_1_halfhealth_gf_ff30e9f.mp3", "Shifty thingsies you are.", "", 1975586766, 1774921113, Spawn) + elseif choice == 3 then + PlayFlavor(NPC, "voiceover/english/optional3/ratonga_base_1/ft/ratonga/ratonga_base_1_1_halfhealth_gf_9c7df7ea.mp3", "That patch of fur will never grow back, you know.", "", 4146309857, 1135607887, Spawn) + elseif choice == 4 then + PlayFlavor(NPC, "voiceover/english/optional3/ratonga_base_1/ft/ratonga/ratonga_base_1_1_halfhealth_gf_a2ace12c.mp3", "Don't hurt us! We're no threat to your mightiness.", "", 1631608737, 385456101, Spawn) + end + end + end +end + +function killed(NPC, Spawn) + spoke = false + local chance = math.random(1, 100) + if chance <= 20 then + if GetGender(NPC) == MALE then + local choice = math.random(1, 3) + if choice == 1 then + PlayFlavor(NPC, "voiceover/english/optional3/ratonga_base_1/ft/ratonga/ratonga_base_1_1_victory_gm_15e8fc93.mp3", "One less worry in my life!", "", 4116602987, 3804155045, Spawn) + elseif choice == 2 then + PlayFlavor(NPC, "voiceover/english/optional3/ratonga_base_1/ft/ratonga/ratonga_base_1_1_victory_gm_732f23e7.mp3", "The dead tell no tales", "", 636430623, 2715556056, Spawn) + elseif choice == 3 then + PlayFlavor(NPC, "voiceover/english/optional3/ratonga_base_1/ft/ratonga/ratonga_base_1_1_victory_gm_935883a.mp3", "Shhh ... shhh ... it's ok ... shhh ...shhh. Stop fighting it...", "", 1459182295, 1340643629, Spawn) + end + elseif GetGender(NPC) == FEMALE then + PlayFlavor(NPC, "voiceover/english/optional3/ratonga_base_1/ft/ratonga/ratonga_base_1_1_victory_gf_732f23e7.mp3", "The dead tell no tales", "", 1062202875, 1393213249, Spawn) + end + end +end + +function death(NPC, Spawn) + spoke = false + local chance = math.random(1, 100) + if chance <= 20 then + if GetGender(NPC) == MALE then + PlayFlavor(NPC, "voiceover/english/optional3/ratonga_base_1/ft/ratonga/ratonga_base_1_1_death_gm_e9ba5c44.mp3", "Flee and take care of them later.", "", 2862575499, 3074650652, Spawn) + elseif GetGender(NPC) == FEMALE then + end + end +end \ No newline at end of file diff --git a/server/SpawnScripts/Graveyard/atatteredpieceofpaper.lua b/server/SpawnScripts/Graveyard/atatteredpieceofpaper.lua new file mode 100644 index 000000000..6e9404059 --- /dev/null +++ b/server/SpawnScripts/Graveyard/atatteredpieceofpaper.lua @@ -0,0 +1,18 @@ +--[[ + Script Name : SpawnScripts/Graveyard/atatteredpieceofpaper.lua + Script Purpose : + Script Author : + Script Date : + Script Notes : +--]] + +function spawn(NPC) + SetRequiredQuest(NPC, 233) +end + +function hailed(NPC, Spawn) +end + +function respawn(NPC) + spawn(NPC) +end \ No newline at end of file diff --git a/server/SpawnScripts/Graveyard/qst_haligan_tomb.lua b/server/SpawnScripts/Graveyard/qst_haligan_tomb.lua new file mode 100644 index 000000000..d5674370b --- /dev/null +++ b/server/SpawnScripts/Graveyard/qst_haligan_tomb.lua @@ -0,0 +1,27 @@ +--[[ + Script Name : Script: SpawnScripts/Graveyard/qst_haligan_tomb.lua + Script Purpose : qst_haligan_tomb + Script Author : Scatman + Script Date : 2009.07.22 + Script Notes : +--]] + +local QUEST_7_FROM_CUSTODIAN = 238 + +function spawn(NPC) + SetRequiredQuest(NPC, QUEST_7_FROM_CUSTODIAN, 2) +end + +function hailed(NPC, Spawn) +end + +function respawn(NPC) + spawn(NPC) +end + +function casted_on(Target, Caster) + if HasQuest(Caster, QUEST_7_FROM_CUSTODIAN) and GetQuestStep(Caster, QUEST_7_FROM_CUSTODIAN) == 2 then + -- TODO: Display popup + SetStepComplete(Caster, QUEST_7_FROM_CUSTODIAN, 2) + end +end \ No newline at end of file diff --git a/server/SpawnScripts/Graveyard/ward_particle_cube.lua b/server/SpawnScripts/Graveyard/ward_particle_cube.lua new file mode 100644 index 000000000..79372b694 --- /dev/null +++ b/server/SpawnScripts/Graveyard/ward_particle_cube.lua @@ -0,0 +1,28 @@ +--[[ + Script Name : SpawnScripts/Graveyard/ward_particle_cube.lua + Script Purpose : ward_particle_cube + Script Author : Scatman + Script Date : 2009.07.12 + Script Notes : +--]] + +local ZADDAR_QUEST_4 = 234 + +function spawn(NPC) + SetRequiredQuest(NPC, ZADDAR_QUEST_4, 2) +end + +function hailed(NPC, Spawn) +end + +function respawn(NPC) + spawn(NPC) +end + +function casted_on(Target, Caster) + if HasQuest(Spawn, ZADDAR_QUEST_4) and GetQuestStep(Spawn, ZADDAR_QUEST_4) == 2 then + SetStepComplete(Spawn, ZADDAR_QUEST_4, 2) + SendMessage(Caster, "You place the relic within the sphere of influence.") + Despawn(Target) + end +end \ No newline at end of file diff --git a/server/SpawnScripts/Graystone/AngusFallowfur.lua b/server/SpawnScripts/Graystone/AngusFallowfur.lua new file mode 100644 index 000000000..30c186c5c --- /dev/null +++ b/server/SpawnScripts/Graystone/AngusFallowfur.lua @@ -0,0 +1,119 @@ +--[[ + Script Name : SpawnScripts/Graystone/AngusFallowfur.lua + Script Purpose : Angus Fallowfur + Script Author : Scatman + Script Date : 2009.09.27 + Script Notes : +--]] + +-- Quest ID's +local A_TIME_FOR_FIGHTING = 289 + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + RandomVoice(NPC, Spawn) + + if HasCompletedQuest(Spawn, A_TIME_FOR_FIGHTING) then + Say(NPC, "Just keep walking.", Spawn) + elseif HasQuest(Spawn, A_TIME_FOR_FIGHTING) then + LittleBusyWithQuest(NPC, Spawn) + else + Say(NPC, "I'm a little busy right now, sorry.") + end +end + +function healthchanged(NPC, Spawn) + local hp_percent = GetHP(NPC) / GetMaxHP(NPC) + if hp_percent <= 0.25 then + SpawnSet(NPC, "attackable", 0) + SpawnSet(NPC, "show_level", 0) + AddTimer(NPC, 500, "StopAttacking", 1, Spawn) + end +end + +function StopAttacking(NPC, Spawn) + Say(NPC, "This is over.", Spawn) + ClearHate(NPC) + ClearEncounter(NPC) +end + +function RandomVoice(NPC, Spawn) + local choice = math.random(1, 3) + if choice == 1 then + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_1_1002.mp3", "", "", 0, 0, Spawn) + elseif choice == 2 then + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_2_1002.mp3", "", "", 0, 0, Spawn) + else + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_3_1002.mp3", "", "", 0, 0, Spawn) + end +end + +--------------------------------------------------------------------------------------------------- +-- QUEST 1 +--------------------------------------------------------------------------------------------------- + +function LittleBusyWithQuest(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + if not QuestStepIsComplete(Spawn, A_TIME_FOR_FIGHTING, 2) then + AddConversationOption(conversation, "Oh, wow. I saw a shining light up here and thought someone had installed a lighthouse, guess it was just your forehead.", "dlg_8_1") + AddConversationOption(conversation, "A little busy doing what? Standing here like a lamppost?", "dlg_5_1") + AddConversationOption(conversation, "Only a little busy?", "dlg_6_1") + AddConversationOption(conversation, "Why be sorry? It saved me what would probably be a boring conversation.", "dlg_7_1") + StartConversation(conversation, NPC, Spawn, "I'm a little busy right now, sorry.") + else + Say(NPC, "Just keep walking.", Spawn) + end +end + +function dlg_5_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "I see.") + StartConversation(conversation, NPC, Spawn, "I'm contemplating, if you must know.") +end + +function dlg_6_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "Indeed.") + StartConversation(conversation, NPC, Spawn, "Busy enough to want you to leave.") +end + +function dlg_7_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "That makes two of us.") + StartConversation(conversation, NPC, Spawn, "And me as well.") +end + +function dlg_8_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "Shiny!", "dlg_8_2") + AddConversationOption(conversation, "Glossy!", "dlg_8_2") + AddConversationOption(conversation, "Reflective!", "dlg_8_2") + AddConversationOption(conversation, "B-A-L-D.", "dlg_8_2") + AddConversationOption(conversation, "Sorry, no. I'll be going now.") + StartConversation(conversation, NPC, Spawn, "Did I hear that correctly?") +end + +function dlg_8_2(NPC, Spawn) + SetStepComplete(Spawn, A_TIME_FOR_FIGHTING, 2) + + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + SpawnSet(NPC, "attackable", 1) + SpawnSet(NPC, "show_level", 1) + AddHate(Spawn, NPC, 1) + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/angus_fallowfur/qey_village03/quest_angus_fallowfur_fightover_6c8d9e55.mp3", "This is over.", "", 577369163, 1894242120, Spawn) + AddConversationOption(conversation, "We'll see!") + StartConversation(conversation, NPC, Spawn, "You're going down!") +end \ No newline at end of file diff --git a/server/SpawnScripts/Graystone/AssistantJalan.lua b/server/SpawnScripts/Graystone/AssistantJalan.lua new file mode 100644 index 000000000..72246c1aa --- /dev/null +++ b/server/SpawnScripts/Graystone/AssistantJalan.lua @@ -0,0 +1,23 @@ +--[[ + Script Name : SpawnScripts/Graystone/AssistantJalan.lua + Script Purpose : Assistant Jalan + Script Author : John Adams + Script Date : 2008.09.21 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + choice = math.random(1,3) + + if choice == 1 then + PlayFlavor(NPC, "voiceover/english/barbarian_eco_good_1/ft/service/banker/barbarian_banker_service_good_1_hail_gf_1772a0df.mp3", "Has anyone told you about our new retirement savings programs?", "nod", 598649185, 1528614376, Spawn) + elseif choice == 2 then + PlayFlavor(NPC, "voiceover/english/barbarian_eco_good_1/ft/service/banker/barbarian_banker_service_good_1_hail_gf_17a9b8f6.mp3", "Are you interested in qualifying for an equity line of coin on your livestock?", "shrug", 3636052598, 303778763, Spawn) + elseif choice == 3 then + PlayFlavor(NPC, "voiceover/english/barbarian_eco_good_1/ft/service/banker/barbarian_banker_service_good_1_hail_gf_ca4ce94.mp3", "Greetings, would you like to open an account or is there something else I can help with?", "hello", 2950142669, 2951966236, Spawn) + else + end + +end + diff --git a/server/SpawnScripts/Graystone/AssistantTillheel.lua b/server/SpawnScripts/Graystone/AssistantTillheel.lua new file mode 100644 index 000000000..b5c3c025a --- /dev/null +++ b/server/SpawnScripts/Graystone/AssistantTillheel.lua @@ -0,0 +1,43 @@ +--[[ + Script Name : SpawnScripts/Graystone/AssistantTillheel.lua + Script Purpose : Assistant Tillheel + Script Author : John Adams/Scatman + Script Date : 2008.09.21 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +function spawn(NPC) + SetPlayerProximityFunction(NPC, 10, "RandomTalk", "LeaveRange") +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + RandomTalk(NPC, Spawn, false) +end + +function RandomTalk(NPC, Spawn, Option) + local choice = 0 + if Option == nil then + choice = math.random(1, 100) + end + + if choice < 25 then + FaceTarget(NPC, Spawn) + local choice = math.random(1, 4) + if choice == 1 then + PlayFlavor(NPC, "voiceover/english/optional2/halfling_eco_good_1/ft/service/alchemist/halfling_alchemist_service_good_1_hail_gm_a8ed74c7.mp3", "There are no refunds for caster error at this shop! Oh ... hello you're not here about a refund.", "no", 2075394375, 630243730, Spawn) + elseif choice == 2 then + PlayFlavor(NPC, "voiceover/english/optional2/halfling_eco_good_1/ft/service/alchemist/halfling_alchemist_service_good_1_hail_gm_ec533e4c.mp3", "Are you wounded? I just made up a fresh batch of healing potions an hour ago.", "hello", 2688473405, 4089604259, Spawn) + elseif choice == 3 then + PlayFlavor(NPC, "", "I'm sorry, afraid I'm unable to help you now. That dolt Mr. Clark mixed up the formulas again! Now... Let's see... Which one is the super corrosive acid?", "", 0, 0, Spawn) + else + PlayFlavor(NPC, "voiceover/english/optional2/halfling_eco_good_1/ft/service/alchemist/halfling_alchemist_service_good_1_hail_gm_efd903ba.mp3", "Hello, adventurer! Are you looking for a specific potion or ingredient?", "agree", 1413906559, 1372883990, Spawn) + end + end +end + +function LeaveRange(NPC, Spawn) +end \ No newline at end of file diff --git a/server/SpawnScripts/Graystone/BarmaidViolet.lua b/server/SpawnScripts/Graystone/BarmaidViolet.lua new file mode 100644 index 000000000..e83698d27 --- /dev/null +++ b/server/SpawnScripts/Graystone/BarmaidViolet.lua @@ -0,0 +1,25 @@ +--[[ + Script Name : SpawnScripts/Graystone/BarmaidViolet.lua + Script Purpose : Barmaid Violet + Script Author : John Adams + Script Date : 2008.09.21 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + choice = math.random(1,4) + + if choice == 1 then + PlayFlavor(NPC, "", "Please mind the plates, they're very hot.", "scold", 1689589577, 4560189, Spawn) + elseif choice == 2 then + PlayFlavor(NPC, "", "Tell me, do you prefer Halfling or Elven cuisine? I myself have a hard time deciding between the two.", "confused", 1689589577, 4560189, Spawn) + elseif choice == 3 then + PlayFlavor(NPC, "", "Welcome friend, welcome. I hope you brought your appetite with you!", "wink", 1689589577, 4560189, Spawn) + elseif choice == 4 then + PlayFlavor(NPC, "", "Fresh baubbleberry pie, come and get some while it's hot!", "beckon", 1689589577, 4560189, Spawn) + else + end + +end + diff --git a/server/SpawnScripts/Graystone/BarryViceheart.lua b/server/SpawnScripts/Graystone/BarryViceheart.lua new file mode 100644 index 000000000..36c1a8fd5 --- /dev/null +++ b/server/SpawnScripts/Graystone/BarryViceheart.lua @@ -0,0 +1,12 @@ +--[[ + Script Name : SpawnScripts/Graystone/BarryViceheart.lua + Script Purpose : Barry Viceheart + Script Author : John Adams + Script Date : 2008.09.21 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + PlayFlavor(NPC, "voiceover/english/barry_viceheart/qey_village03/100_customer_barbarian_viceheart_multhail1_31dbd300.mp3", "I don't think you want to help me with this difficult task. Farewell!", "", 2478336212, 3512678812, Spawn) +end \ No newline at end of file diff --git a/server/SpawnScripts/Graystone/Beerocks.lua b/server/SpawnScripts/Graystone/Beerocks.lua new file mode 100644 index 000000000..cca67cb0d --- /dev/null +++ b/server/SpawnScripts/Graystone/Beerocks.lua @@ -0,0 +1,30 @@ +--[[ + Script Name : SpawnScripts/Graystone/Beerocks.lua + Script Purpose : Beerocks + Script Author : Scatman + Script Date : 2009.09.25 + Script Notes : +--]] + +dofile("SpawnScripts/Generic/GenericGuardVoiceOvers.lua") + +function spawn(NPC) + SetPlayerProximityFunction(NPC, 10, "InRange", "LeaveRange") +end + +function respawn(NPC) + spawn(NPC) +end + +function InRange(NPC, Spawn) + CheckFaction(NPC, Spawn, "Qeynos") +end + +function LeaveRange(NPC, Spawn) + +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + GenericGuardHail(NPC, Spawn) +end diff --git a/server/SpawnScripts/Graystone/BoninBroadhammer.lua b/server/SpawnScripts/Graystone/BoninBroadhammer.lua new file mode 100644 index 000000000..8821ce220 --- /dev/null +++ b/server/SpawnScripts/Graystone/BoninBroadhammer.lua @@ -0,0 +1,40 @@ +--[[ + Script Name : SpawnScripts/Graystone/BoninBroadhammer.lua + Script Purpose : Bonin Broadhammer + Script Author : John Adams/Scatman + Script Date : 2008.09.21 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +function spawn(NPC) + SetPlayerProximityFunction(NPC, 10, "RandomTalk") +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + RandomTalk(NPC, Spawn, false) +end + +function RandomTalk(NPC, Spawn, Option) + local choice = 0 + if Option == nil then + choice = math.random(1, 100) + end + + if choice < 25 then + FaceTarget(NPC, Spawn) + local choice = math.random(1, 4) + if choice == 1 then + PlayFlavor(NPC, "voiceover/english/dwarf_eco_good_1/ft/service/merchant/dwarf_merchant_service_good_1_hail_gm_24322c5d.mp3", "Greetings, friend traveler! We have the finest supplies, right before ya, to fill your adventuring needs.", "smile", 2986424867, 2267649224, Spawn) + elseif choice == 2 then + PlayFlavor(NPC, "voiceover/english/dwarf_eco_good_1/ft/service/merchant/dwarf_merchant_service_good_1_hail_gm_45d92a75.mp3", "Welcome! What is it I can help you with?", "bow", 3654607078, 2614139251, Spawn) + elseif choice == 3 then + PlayFlavor(NPC, "voiceover/english/dwarf_eco_good_1/ft/service/merchant/dwarf_merchant_service_good_1_hail_gm_ae84abf9.mp3", "Go on, take a look at the stock. You'll never beat this price in the city. I guarantee it!", "wink", 2230797709, 3854601007, Spawn) + else + PlayFlavor(NPC, "voiceover/english/dwarf_eco_good_1/ft/service/merchant/dwarf_merchant_service_good_1_hail_gm_e4fa2bd8.mp3", "Confound it! Where did I put that ledger? It must be around here somewhere!", "confused", 2160906698, 176729787, Spawn) + end + end +end diff --git a/server/SpawnScripts/Graystone/BriceStrongmend.lua b/server/SpawnScripts/Graystone/BriceStrongmend.lua new file mode 100644 index 000000000..d05502aea --- /dev/null +++ b/server/SpawnScripts/Graystone/BriceStrongmend.lua @@ -0,0 +1,19 @@ +--[[ + Script Name : SpawnScripts/GraystoneYard/BriceStrongmend.lua + Script Purpose : Brice Strongmend + Script Author : Jabantiz + Script Date : 2018.06.09 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +function spawn(NPC) + +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + PlayFlavor(NPC, "voiceover/english/brice_strongmend/qey_village03/100_fisherman_barbarian_strongmend_garbled_gm_e474cb9f.mp3", "Hmmmm... I wonder, do I owe you any coin? I sure hope not!", "", 423725313, 410589606, Spawn) +end \ No newline at end of file diff --git a/server/SpawnScripts/Graystone/BurkStoneshatter.lua b/server/SpawnScripts/Graystone/BurkStoneshatter.lua new file mode 100644 index 000000000..b399d563b --- /dev/null +++ b/server/SpawnScripts/Graystone/BurkStoneshatter.lua @@ -0,0 +1,360 @@ +--[[ + Script Name : SpawnScripts/Graystone/BurkStoneshatter.lua + Script Purpose : Burk Stoneshatter + Script Author : Scatman + Script Date : 2009.09.27 + Script Notes : +--]] + +-- Race ID's +local BARBARIAN = 0 + +-- Quest ID's +local ATIMEFORFIGHTING = 289 +local LATESHIPMENT = 290 +local IN_THE_DRINK = 291 +local VISITING_A_FRIEND = 292 + +-- Item ID's +local OVERFLOW_MANIFEST = 10268 + +function spawn(NPC) + ProvidesQuest(NPC, ATIMEFORFIGHTING) + ProvidesQuest(NPC, LATESHIPMENT) + ProvidesQuest(NPC, VISITING_A_FRIEND) +end + +function hailed(NPC, Spawn) + if GetRace(Spawn) == BARBARIAN then + Begin(NPC, Spawn) + else + NotBarbarian(NPC, Spawn) + end +end + +function NotBarbarian(NPC, Spawn) + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/burk_stoneshatter/qey_village03/quest_burk_stoneshatter_notdwarf_20893785.mp3", "I'm rather busy and cannot speak. Sorry.", "", 1027180785, 1173518799, Spawn) +end + +function Begin(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + if HasCompletedQuest(Spawn, ATIMEFORFIGHTING) then + if HasCompletedQuest(Spawn, LATESHIPMENT) then + if HasCompletedQuest(Spawn, IN_THE_DRINK) then + if HasCompletedQuest(Spawn, VISITING_A_FRIEND) then + SpokenToJornYet(NPC, Spawn, conversation) + elseif HasQuest(Spawn, VISITING_A_FRIEND) then + SpokenToJornYet(NPC, Spawn, conversation) + else + FoundPackageYet(NPC, Spawn, conversation) + end + elseif HasQuest(Spawn, IN_THE_DRINK) then + FoundPackageYet(NPC, Spawn, conversation) + else + FoundPackageYet(NPC, Spawn, conversation) + end + elseif HasQuest(Spawn, LATESHIPMENT) then + FoundPackageYet(NPC, Spawn, conversation) + else + HowDidFightsGo(NPC, Spawn, conversation) + end + elseif HasQuest(Spawn, ATIMEFORFIGHTING) then + HowDidFightsGo(NPC, Spawn, conversation) + else + AhGoodToSeeYou(NPC, Spawn, conversation) + end +end + + +-------------------------------------------------------------------------------------------------------------------- +-- QUEST 1 +-------------------------------------------------------------------------------------------------------------------- + +function AhGoodToSeeYou(NPC, Spawn, conversation) + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/burk_stoneshatter/qey_village03/quests/burk_stoneshatter/burk_stoneshatter001.mp3", "", "", 956434892, 1407762002, Spawn) + AddConversationOption(conversation, "Have we met before?", "MetBefore") + StartConversation(conversation, NPC, Spawn, "Ah, good to see you!") +end + +function MetBefore(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/burk_stoneshatter/qey_village03/quests/burk_stoneshatter/burk_stoneshatter002.mp3", "", "", 1814552755, 3267658415, Spawn) + AddConversationOption(conversation, "What do we have in common?", "WhatInCommon") + AddConversationOption(conversation, "Yes, we do.") + StartConversation(conversation, NPC, Spawn, "Not that I recall, but I am fond of the drink, so it's possible. It don't matter none, though, we've got enough in common for me to strike up a conversation I'd say.") +end + +function WhatInCommon(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/burk_stoneshatter/qey_village03/quests/burk_stoneshatter/burk_stoneshatter003.mp3", "", "", 1680260293, 3849292210) + AddConversationOption(conversation, "How do they do that?", "KnowYourAncestors") + StartConversation(conversation, NPC, Spawn, "Hah! A trickster, eh? If two barbarians don't have something in common, then surely more's gone wrong since The Shattering than we knew! Hah hah! Listen, you can still learn. Even the oldest who have forgotten their ancestors can get to know them before they pass.") +end + +function KnowYourAncestors(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/burk_stoneshatter/qey_village03/quests/burk_stoneshatter/burk_stoneshatter005.mp3", "", "", 1709639983, 584600029) + AddConversationOption(conversation, "What do you have for me to do?", "WhatToDo") + AddConversationOption(conversation, "Who can I talk to if I'm looking for something a little more adventurous?", "MoreAdventurous") + StartConversation(conversation, NPC, Spawn, "By immersing them in their past! Ah, how much can any barbarian know about themselves if they don't know their ancestors? Listen, you look like you know your ancestors rather well. I would hate to bore you, but at the same time I wouldn't mind helping ya out. I've got friends who you can talk to if you're looking for something a little more adventurous, otherwise I'm sure I could find something for you to do around here.") +end + +function WhatToDo(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/burk_stoneshatter/qey_village03/quests/burk_stoneshatter/burk_stoneshatter007.mp3", "", "", 1329828482, 3458256530) + AddConversationOption(conversation, "I am a proud barbarian, skin as hard as frost and wit as sharp as the wind.", "Continue") + AddConversationOption(conversation, "I am a humble barbarian, docile yet fierce.", "Continue") + AddConversationOption(conversation, "I am a young barbarian, I strike out on my own but miss the warmth of my family.", "Continue") + AddConversationOption(conversation, "Who I am is not important for you to know.", "Continue") + AddConversationOption(conversation, "I do not know who I am.", "Continue") + StartConversation(conversation, NPC, Spawn, "Ah, that's refreshing to hear! So few barbarians these days care to take the time to think uh who they are. Tell me, who are you?") +end + +function Continue(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/burk_stoneshatter/qey_village03/quests/burk_stoneshatter/burk_stoneshatter009.mp3", "", "", 662479869, 2366767034) + AddConversationOption(conversation, "What must I do?", "WhatMustIDo") + StartConversation(conversation, NPC, Spawn, "Hah! The answer doesn't matter so much, so long as you believe it. It can change, if need be, but it always needs to be present in some manner or another. How would you like to adjust, or further confirm, who you are?") +end + +function WhatMustIDo(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/burk_stoneshatter/qey_village03/quests/burk_stoneshatter/burk_stoneshatter010.mp3", "", "", 3698329964, 3035411942) + AddConversationOption(conversation, "I can do that.", "PickFights") + StartConversation(conversation, NPC, Spawn, "War has always shown young soldiers who they were, and refined the ideas old soldiers had about themselves. I wish nothing so terrible or drastic for you. However, there is still much to be learned from fighting. I want you to speak with a few barbarians, and fight them. Don't worry, the guards understand this is how we sometimes do things. They may break up a fight but they won't arrest you or anything.") +end + +function PickFights(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/burk_stoneshatter/qey_village03/quests/burk_stoneshatter/burk_stoneshatter011.mp3", "", "", 3946771118, 418263937) + AddConversationOption(conversation, "Mention his feet, got it.", "MarusDonoval") + StartConversation(conversation, NPC, Spawn, "I know you can. The first barbarian on my list is Marus Donoval. I'm certain he's in the tavern on the ground floor of the inn. To goad him into fighting, mention something about the smell of his feet. That always gets him on the offensive. Got that?") +end + +function MarusDonoval(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/burk_stoneshatter/qey_village03/quests/burk_stoneshatter/burk_stoneshatter012.mp3", "", "", 1597660554, 3035248824) + AddConversationOption(conversation, "And who else?", "AngusFallowfur") + StartConversation(conversation, NPC, Spawn, "Good. The next person I'd like you to fight is Angus Fallowfur. He usually hangs out just over there behind the armory, on the corner closest to the docks. Nothing gets him fired up more than someone mentioning his bald head, do that and you're sure to get him into a scuffle.") +end + +function AngusFallowfur(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/burk_stoneshatter/qey_village03/quests/burk_stoneshatter/burk_stoneshatter013.mp3", "", "", 400499408, 1307209674) + AddConversationOption(conversation, "Marus, Angus, and Dunda. I've got it.", "OfferQuest1") + StartConversation(conversation, NPC, Spawn, "The last person I'd like you to fight is Dunda Frostgrip. Ooh she's a fiery one to begin with, you shouldn't have any trouble getting her into conflict. But, she has been holding back lately. Mention the name Mav Boilfist around her and that's sure to send her off the deep end. You can find her just southwest of the scribe's shop.") +end + +function OfferQuest1(NPC, Spawn) + FaceTarget(NPC, Spawn) + OfferQuest(NPC, Spawn, ATIMEFORFIGHTING) +end + +function HowDidFightsGo(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/burk_stoneshatter/qey_village03/quests/burk_stoneshatter/burk_stoneshatter014.mp3", "", "", 1043759845, 3070231888) + + if (HasCompletedQuest(Spawn, ATIMEFORFIGHTING) and not HasCompletedQuest(Spawn, 16)) or (HasQuest(Spawn, ATIMEFORFIGHTING) and GetQuestStep(Spawn, ATIMEFORFIGHTING) == 4) then + AddConversationOption(conversation, "Well enough, I suppose.", "NothingLikeGoodFight") + end + + AddConversationOption(conversation, "I haven't fought everyone yet, I'll be back.") + StartConversation(conversation, NPC, Spawn, "How did the fights go?") +end + +------------------------------------------------------------------------------------------------------- +-- QUEST 2 +------------------------------------------------------------------------------------------------------- + +function NothingLikeGoodFight(NPC, Spawn) + if HasQuest(Spawn, ATIMEFORFIGHTING) then + SetStepComplete(Spawn, ATIMEFORFIGHTING, 4) + end + + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/burk_stoneshatter/qey_village03/quests/burk_stoneshatter/burk_stoneshatter015.mp3", "", "", 1895041228, 2828620978) + AddConversationOption(conversation, "I agree.", "IAgree") + StartConversation(conversation, NPC, Spawn, "Hah hah! Nothing like a good fight to help remind you where your place is.") +end + +function IAgree(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/burk_stoneshatter/qey_village03/quests/burk_stoneshatter/burk_stoneshatter016.mp3", "", "", 2170972985, 2218518568) + AddConversationOption(conversation, "Sure, what can I do?", "WhatCanIDo") + StartConversation(conversation, NPC, Spawn, "Listen, I like you. I don't want to send you off just yet. How would you like to help me settle a problem I've encountered?") +end + +function WhatCanIDo(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/burk_stoneshatter/qey_village03/quests/burk_stoneshatter/burk_stoneshatter017.mp3", "", "", 792026774, 3751432598) + AddConversationOption(conversation, "Do you want me to fight him, too?", "OfferQuest2") + StartConversation(conversation, NPC, Spawn, "I've got this package I've been waiting for. It hasn't been delivered yet, but I know it's arrived in Graystone Yard. Do me a favor and go find the Graystone Courier and ask him why he hasn't delivered my package yet. It's shipment GG4QC. Here, take this overflow manifest. You'll be able to find the Graystone Courier at one of those locations.") +end + +function OfferQuest2(NPC, Spawn) + FaceTarget(NPC, Spawn) + OfferQuest(NPC, Spawn, LATESHIPMENT) +end + +function FoundPackageYet(NPC, Spawn, conversation) + if HasQuest(Spawn, LATESHIPMENT) then + AddConversationOption(conversation, "I need another copy of the Overflow Manifset.", "NeedManifest") + end + + if (HasCompletedQuest(Spawn, IN_THE_DRINK) and not HasCompletedQuest(Spawn, VISITING_A_FRIEND)) or (HasQuest(Spawn, IN_THE_DRINK) and GetQuestStep(Spawn, IN_THE_DRINK) == 5) then + AddConversationOption(conversation, "Yes. It turns out it had fallen in the water.", "YesFellInWater") + end + + AddConversationOption(conversation, "No, not yet.") + StartConversation(conversation, NPC, Spawn, "Have you found my package yet?") +end + +function NeedManifest(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + if not HasItem(Spawn, OVERFLOW_MANIFEST, 1) then + -- Overflow Manifest + SummonItem(Spawn, OVERFLOW_MANIFEST, 1) + + AddConversationOption(conversation, "Thanks!") + StartConversation(conversation, NPC, Spawn, "Here ya go.") + else + AddConversationOption(conversation, "Thanks!") + StartConversation(conversation, NPC, Spawn, "I am certain I already gave it to ya. Make sure you check all your bags, and even the bank.") + end +end + +------------------------------------------------------------------------------------------------------- +-- QUEST 3 +------------------------------------------------------------------------------------------------------- + +function YesFellInWater(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/burk_stoneshatter/qey_village03/quests/burk_stoneshatter/burk_stoneshatter020.mp3", "", "", 1785241961, 3949656366, Spawn) + AddConversationOption(conversation, "It looks like it made it out all right. The crate looks to have been sealed, I had to swim down and hook up buoys so the Shipping Coordinator could pull them out. Here you go.", "dlg_26_2") + StartConversation(conversation, NPC, Spawn, "Oh no! That's horrible!") +end + +function dlg_26_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/burk_stoneshatter/qey_village03/quests/burk_stoneshatter/burk_stoneshatter021.mp3", "", "", 578124127, 1198637395, Spawn) + AddConversationOption(conversation, "Oh?", "dlg_26_3") + StartConversation(conversation, NPC, Spawn, "Oh, that's great news. Thanks. Oh, um, this isn't all mine. I think this was meant for you.") +end + +function dlg_26_3(NPC, Spawn) + if HasQuest(Spawn, IN_THE_DRINK) then + SetStepComplete(Spawn, IN_THE_DRINK, 5) + end + + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/burk_stoneshatter/qey_village03/quests/burk_stoneshatter/burk_stoneshatter022.mp3", "", "", 279289992, 1880878619, Spawn) + AddConversationOption(conversation, "Thank you.", "dlg_26_4") + StartConversation(conversation, NPC, Spawn, "Yeah, probably the Shipping Coordinator's way of saying thank you. Here ya go.") +end + +---------------------------------------------------------------------------------------------------- +-- QUEST 4 +---------------------------------------------------------------------------------------------------- + +function dlg_26_4(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/burk_stoneshatter/qey_village03/quests/burk_stoneshatter/burk_stoneshatter023.mp3", "", "", 2560698253, 1098321894, Spawn) + AddConversationOption(conversation, "What was it?", "dlg_26_5") + StartConversation(conversation, NPC, Spawn, "No, thank you. This shipment was very important.") +end + +function dlg_26_5(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/burk_stoneshatter/qey_village03/quests/burk_stoneshatter/burk_stoneshatter024.mp3", "", "", 2054544634, 3839064950, Spawn) + AddConversationOption(conversation, "Why did your friend send it to you?", "dlg_26_12") + StartConversation(conversation, NPC, Spawn, "An old Halasian weaving. A friend of mine found it on an island off the coast of Everfrost, amazingly intact. It details a family's past.") +end + +function dlg_26_12(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/burk_stoneshatter/qey_village03/quests/burk_stoneshatter/burk_stoneshatter025.mp3", "", "", 360206196, 193916319, Spawn) + AddConversationOption(conversation, "That is very lucky.", "dlg_26_13") + StartConversation(conversation, NPC, Spawn, "He recognized some of what was depicted on the weaving. Old wars between two clans, one clan father's disgrace in the public eye, and then his eventual redemption. These images... well, it would seem that this weaving may be from my family, ages ago. We did not have a weaving to show us the past, but we kept the story alive orally. A find like this is... well it's inspirational.") +end + +function dlg_26_13(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/burk_stoneshatter/qey_village03/quests/burk_stoneshatter/burk_stoneshatter026.mp3", "", "", 3028697624, 1563266355, Spawn) + AddConversationOption(conversation, "I understand completely.", "dlg_26_14") + StartConversation(conversation, NPC, Spawn, "Luck or fate. I appreciate all your help, but this is something that I wish to look at right away. I don't know how much you know of your own family, but opportunities like this are sacred.") +end + +function dlg_26_14(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/burk_stoneshatter/qey_village03/quests/burk_stoneshatter/burk_stoneshatter027.mp3", "", "", 467475685, 2498729045, Spawn) + AddConversationOption(conversation, "I will find him.", "OfferQuest4") + StartConversation(conversation, NPC, Spawn, "While I do this, you should speak with my friend, Jorn Sorefoot. You can probably find him in Oakmyst Forest. I have little doubt he can make use of you, help him like you helped me.") +end + +function OfferQuest4(NPC, Spawn) + FaceTarget(NPC, Spawn) + OfferQuest(NPC, Spawn, VISITING_A_FRIEND) +end + +function SpokenToJornYet(NPC, Spawn, conversation) + if HasCompletedQuest(Spawn, VISITING_A_FRIEND) then + AddConversationOption(conversation, "Yes, I have.", "SpokenWithJornYes") + end + + AddConversationOption(conversation, "No, not yet.") + StartConversation(conversation, NPC, Spawn, "Have you spoken with Jorn yet?") +end + +function SpokenWithJornYes(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "I'm sure I can handle it.") + StartConversation(conversation, NPC, Spawn, "Ah good, good. I hope he doesn't give ya too much trouble.") +end \ No newline at end of file diff --git a/server/SpawnScripts/Graystone/CarpenterJorgieIcearmor.lua b/server/SpawnScripts/Graystone/CarpenterJorgieIcearmor.lua new file mode 100644 index 000000000..32ff5f0a0 --- /dev/null +++ b/server/SpawnScripts/Graystone/CarpenterJorgieIcearmor.lua @@ -0,0 +1,23 @@ +--[[ + Script Name : SpawnScripts/Graystone/CarpenterJorgieIcearmor.lua + Script Purpose : Carpenter Jorgie Icearmor + Script Author : John Adams + Script Date : 2008.09.21 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +function spawn(NPC) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/carpenter_jorgie_icearmor/qey_harbor/jorgieicearmor000.mp3", "", "", 2791551387, 1030675041, Spawn) + AddConversationOption(conversation, "I fully agree. I'll let you get back to work!") + StartConversation(conversation, NPC, Spawn, "A good day's work is the measure of worth!") +end \ No newline at end of file diff --git a/server/SpawnScripts/Graystone/Coppershot.lua b/server/SpawnScripts/Graystone/Coppershot.lua new file mode 100644 index 000000000..3f45d72d7 --- /dev/null +++ b/server/SpawnScripts/Graystone/Coppershot.lua @@ -0,0 +1,43 @@ +--[[ + Script Name : SpawnScripts/Graystone/Coppershot.lua + Script Purpose : Coppershot + Script Author : John Adams + Script Date : 2008.09.21 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +function spawn(NPC) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/bartender_coppershot/qey_village03/bartendercoppershot000.mp3", "", "", 2171336743, 1878294501, Spawn) + AddConversationOption(conversation, "I'm not looking for trouble.", "dlg_13_1") + AddConversationOption(conversation, "This is not my kind of place.") + StartConversation(conversation, NPC, Spawn, "If yer comin' in here to fight an' make trouble, the Graystone Watch will toss you out on your backside!") +end + +function dlg_13_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/bartender_coppershot/qey_village03/bartendercoppershot002.mp3", "", "", 3971179899, 2182118596, Spawn) + AddConversationOption(conversation, "Frozen Tundra Tavern? Are you from the northlands?", "dlg_13_2") + AddConversationOption(conversation, "I hear ya.") + StartConversation(conversation, NPC, Spawn, "Welcome to the Frozen Tundra Tavern where the grog flows like the Ocean of Tears.") +end + +function dlg_13_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/bartender_coppershot/qey_village03/bartendercoppershot003.mp3", "", "", 2445961475, 534113227, Spawn) + AddConversationOption(conversation, "Sounds wise--good marketing.") + StartConversation(conversation, NPC, Spawn, "I can't stand the ice! Give me halls of stone! The barbarians seem to prefer the name and I prefer their coin.") +end \ No newline at end of file diff --git a/server/SpawnScripts/Graystone/DaneSteelfist.lua b/server/SpawnScripts/Graystone/DaneSteelfist.lua new file mode 100644 index 000000000..dd7f55dc2 --- /dev/null +++ b/server/SpawnScripts/Graystone/DaneSteelfist.lua @@ -0,0 +1,12 @@ +--[[ + Script Name : SpawnScripts/Graystone/DaneSteelfist.lua + Script Purpose : Dane Steelfist + Script Author : John Adams + Script Date : 2008.09.21 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + PlayFlavor(NPC, "voiceover/english/barbarian/ft/barbarian/barbarian_eco_garble_garbled_gm_1d4e2601.mp3", "garbled text hail not to be translated", "", 4202912889, 538477897, Spawn) +end \ No newline at end of file diff --git a/server/SpawnScripts/Graystone/Deadeye.lua b/server/SpawnScripts/Graystone/Deadeye.lua new file mode 100644 index 000000000..f0f06975c --- /dev/null +++ b/server/SpawnScripts/Graystone/Deadeye.lua @@ -0,0 +1,26 @@ +--[[ + Script Name : SpawnScripts/Graystone/Deadeye.lua + Script Purpose : Deadeye + Script Author : John Adams/Scatman + Script Date : 2009.09.25 + Script Notes : +--]] + +dofile("SpawnScripts/Generic/GenericGuardVoiceOvers.lua") + +function spawn(NPC) + SetPlayerProximityFunction(NPC, 10, "InRange") +end + +function respawn(NPC) + spawn(NPC) +end + +function InRange(NPC, Spawn) + CheckFaction(NPC, Spawn, "Qeynos") +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + GenericGuardHail(NPC, Spawn) +end diff --git a/server/SpawnScripts/Graystone/DorakEverstock.lua b/server/SpawnScripts/Graystone/DorakEverstock.lua new file mode 100644 index 000000000..26d1cb0e1 --- /dev/null +++ b/server/SpawnScripts/Graystone/DorakEverstock.lua @@ -0,0 +1,12 @@ +--[[ + Script Name : SpawnScripts/Graystone/DorakEverstock.lua + Script Purpose : Dorak Everstock + Script Author : John Adams + Script Date : 2008.09.21 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +function hailed(NPC, Spawn) + PlayFlavor(NPC, "", "I have nothing else to teach you for the moment. Please return to me when you have earned enough experience to choose your profession.", "", 1689589577, 4560189, Spawn) + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_1_1054.mp3", "", "", 0, 0) +end \ No newline at end of file diff --git a/server/SpawnScripts/Graystone/Dori.lua b/server/SpawnScripts/Graystone/Dori.lua new file mode 100644 index 000000000..d3ccb7a49 --- /dev/null +++ b/server/SpawnScripts/Graystone/Dori.lua @@ -0,0 +1,12 @@ +--[[ + Script Name : SpawnScripts/Graystone/Dori.lua + Script Purpose : Dori + Script Author : John Adams + Script Date : 2008.09.21 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + PlayFlavor(NPC, "", "Greetin's, young'n. My name's Dori and this here is my bank. As a customer of the Qeynos Exchange, you can be certain your money's safe with us!", "", 1689589577, 4560189, Spawn) +end diff --git a/server/SpawnScripts/Graystone/DundaFrostgrip.lua b/server/SpawnScripts/Graystone/DundaFrostgrip.lua new file mode 100644 index 000000000..ff427f26e --- /dev/null +++ b/server/SpawnScripts/Graystone/DundaFrostgrip.lua @@ -0,0 +1,172 @@ +--[[ + Script Name : SpawnScripts/Graystone/DundaFrostgrip.lua + Script Purpose : Dunda Frostgrip + Script Author : Scatman + Script Date : 2009.10.05 + Script Notes : +--]] + +-- Quest ID's +local DWARF_MENTOR_QUEST_2 = 285 +local A_TIME_FOR_FIGHTING = 289 + +function spawn(NPC) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + if HasCompletedQuest(Spawn, A_TIME_FOR_FIGHTING) then + Say(NPC, "Don't say a word...", Spawn) + elseif HasQuest(Spawn, A_TIME_FOR_FIGHTING) then + WhatYaNeed(NPC, Spawn) + elseif HasQuest(Spawn, DWARF_MENTOR_QUEST_2) and not QuestStepIsComplete(Spawn, DWARF_MENTOR_QUEST_2, 4) then + WhatYaNeedDwarfMentor(NPC, Spawn, conversation) + else + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/dunda_frostgrip/qey_village03/quest_dunda_frostgrip_notonquest_76053892.mp3", "Speak to me when I'm not busy.", "", 2450838370, 1763279146, Spawn) + end +end + +function healthchanged(NPC, Spawn) + local hp_percent = GetHP(NPC) / GetMaxHP(NPC) + if hp_percent <= 0.25 then + SpawnSet(NPC, "attackable", 0) + SpawnSet(NPC, "show_level", 0) + AddTimer(NPC, 500, "StopAttacking", 1, Spawn) + end +end + +function StopAttacking(NPC, Spawn) + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/dunda_frostgrip/qey_village03/quest_dunda_frostgrip_fightover_b27b5c58.mp3", "I'm done with this.", "", 3523983921, 3545323168, Spawn) + ClearHate(NPC) + ClearEncounter(NPC) +end + +function WhatYaNeed(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + if not QuestStepIsComplete(Spawn, A_TIME_FOR_FIGHTING, 3) then + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/dunda_frostgrip/qey_village03/quests/dunda_frostgrip/dunda_frostgrip008.mp3", "", "", 2498530124, 1746867227, Spawn) + AddConversationOption(conversation, "Wow, Mav was right about your face.", "dlg_12_1") + AddConversationOption(conversation, "Is that a beard you're growing?", "dlg_9_1") + AddConversationOption(conversation, "Wow, how did you get such huge feet?", "dlg_10_1") + AddConversationOption(conversation, "You don't look nearly as tough as they said you would be.", "dlg_11_1") + StartConversation(conversation, NPC, Spawn, "What d'ya need?") + else + Say(NPC, "Don't say a word...", Spawn) + end +end + +function dlg_9_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/dunda_frostgrip/qey_village03/quests/dunda_frostgrip/dunda_frostgrip008answer1.mp3", "", "", 3631592040, 195858381, Spawn) + AddConversationOption(conversation, "Hmm...") + StartConversation(conversation, NPC, Spawn, "I doubt it...") +end + +function dlg_10_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/dunda_frostgrip/qey_village03/quests/dunda_frostgrip/dunda_frostgrip008answer2.mp3", "", "", 2237464189, 736160534, Spawn) + AddConversationOption(conversation, "I see.") + StartConversation(conversation, NPC, Spawn, "From stompin' on people who ask stupid questions.") +end + +function dlg_11_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/dunda_frostgrip/qey_village03/quests/dunda_frostgrip/dunda_frostgrip008answer3.mp3", "", "", 1987182135, 3106357829, Spawn) + AddConversationOption(conversation, "All right.") + StartConversation(conversation, NPC, Spawn, "I don't do demonstrations.") +end + +function dlg_12_1(NPC, Spawn) + SetStepComplete(Spawn, A_TIME_FOR_FIGHTING, 3) + + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + SpawnSet(NPC, "attackable", 1) + SpawnSet(NPC, "show_level", 1) + AddHate(Spawn, NPC, 1) + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/dunda_frostgrip/qey_village03/quests/dunda_frostgrip/dunda_frostgrip008rightanswer.mp3", "", "", 3574859245, 2281348015, Spawn) + AddConversationOption(conversation, "Maybe I will, maybe I won't!") + StartConversation(conversation, NPC, Spawn, "You're going to regret saying that!") +end + +--------------------------------------------------------------------------------------------------- +-- DWARF_MENTOR_QUEST_2 +--------------------------------------------------------------------------------------------------- + +function WhatYaNeedDwarfMentor(NPC, Spawn, conversation) + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/dunda_frostgrip/qey_village03/quests/dunda_frostgrip/dunda_frostgrip001.mp3", "", "", 3913280792, 2412954203, Spawn) + AddConversationOption(conversation, "I'm here on behalf of Mav Boilfist.", "dlg_19_1") + StartConversation(conversation, NPC, Spawn, "What d'ya need?") +end + +function dlg_19_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/dunda_frostgrip/qey_village03/quests/dunda_frostgrip/dunda_frostgrip002.mp3", "", "", 898341792, 808534895, Spawn) + AddConversationOption(conversation, "What do you mean?", "dlg_19_2") + StartConversation(conversation, NPC, Spawn, "Ah, now there's a name I can never hear too little of.") +end + +function dlg_19_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/dunda_frostgrip/qey_village03/quests/dunda_frostgrip/dunda_frostgrip003.mp3", "", "", 472358004, 1704786028, Spawn) + AddConversationOption(conversation, "Retaliate?", "dlg_19_3") + StartConversation(conversation, NPC, Spawn, "Every time I hear about her it's about some great, new thing she's doing. Which of course means I have to retaliate.") +end + +function dlg_19_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/dunda_frostgrip/qey_village03/quests/dunda_frostgrip/dunda_frostgrip004.mp3", "", "", 2206438265, 2359391170, Spawn) + AddConversationOption(conversation, "She brewed some of her family's recipe.", "dlg_19_4") + StartConversation(conversation, NPC, Spawn, "Aye! If I don't one-up her I run the risk of getting one-upped twice in a row, can't have that. So, tell me, what great, new thing has Mav done now?") +end + +function dlg_19_4(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/dunda_frostgrip/qey_village03/quests/dunda_frostgrip/dunda_frostgrip005.mp3", "", "", 2257066250, 240363088, Spawn) + AddConversationOption(conversation, "I have some of it right here.", "dlg_19_5") + StartConversation(conversation, NPC, Spawn, "She didn't! Ooh she's just looking for trouble now. Where is she? I'll pound the brew right now!") +end + +function dlg_19_5(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/dunda_frostgrip/qey_village03/quests/dunda_frostgrip/dunda_frostgrip006.mp3", "", "", 886091575, 2730616060, Spawn) + AddConversationOption(conversation, "Here you go. Be careful.", "dlg_19_6") + StartConversation(conversation, NPC, Spawn, "Ah, give it to me!") +end + +function dlg_19_6(NPC, Spawn) + SetStepComplete(Spawn, DWARF_MENTOR_QUEST_2, 4) + + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/dunda_frostgrip/qey_village03/quests/dunda_frostgrip/dunda_frostgrip007.mp3", "", "", 1318899535, 405657367, Spawn) + AddConversationOption(conversation, "All right. I'll be leaving now.") + StartConversation(conversation, NPC, Spawn, "Ahhh... To Drunder with her, she was right. This is delicious. Do NOT tell her I said that!") +end \ No newline at end of file diff --git a/server/SpawnScripts/Graystone/Fenris.lua b/server/SpawnScripts/Graystone/Fenris.lua new file mode 100644 index 000000000..dee5e9fa6 --- /dev/null +++ b/server/SpawnScripts/Graystone/Fenris.lua @@ -0,0 +1,134 @@ +--[[ + Script Name : Fenris.lua + Script Purpose : Waypoint Path for Fenris.lua + Script Author : Jabantiz + Script Date : 6/10/2018 12:00:00 AM + Script Notes : +--]] + +function spawn(NPC) + waypoints(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) +end + +function respawn(NPC) +end + +function waypoints(NPC) + MovementLoopAddLocation(NPC, 890.57, -22.61, -91.98, 2, 15, "Sit1") + MovementLoopAddLocation(NPC, 897.12, -22.61, -104.66, 2, 0) + MovementLoopAddLocation(NPC, 897.11, -22.36, -106.09, 2, 0) + MovementLoopAddLocation(NPC, 895.89, -22.37, -107.83, 2, 0) + MovementLoopAddLocation(NPC, 893.84, -22.3, -109.15, 2, 0) + MovementLoopAddLocation(NPC, 892.03, -22.3, -109.09, 2, 0) + MovementLoopAddLocation(NPC, 890.05, -22.32, -107.88, 2, 0) + MovementLoopAddLocation(NPC, 887.18, -22.26, -100.18, 2, 0) + MovementLoopAddLocation(NPC, 883.81, -23.15, -100.39, 2, 0) + MovementLoopAddLocation(NPC, 879.82, -24.97, -101.7, 2, 0) + MovementLoopAddLocation(NPC, 871.36, -24.96, -102.91, 2, 0) + MovementLoopAddLocation(NPC, 861.08, -24.95, -104.77, 2, 10, "Sit2") + MovementLoopAddLocation(NPC, 852.72, -24.96, -106.63, 2, 0) + MovementLoopAddLocation(NPC, 849.94, -23.89, -107.24, 2, 0) + MovementLoopAddLocation(NPC, 847.42, -23.05, -108.03, 2, 0) + MovementLoopAddLocation(NPC, 845.49, -23.25, -109.36, 2, 0) + MovementLoopAddLocation(NPC, 845.11, -22.6, -114.25, 2, 0) + MovementLoopAddLocation(NPC, 845.44, -22.84, -123.11, 2, 0) + MovementLoopAddLocation(NPC, 845.86, -22.97, -126.09, 2, 0) + MovementLoopAddLocation(NPC, 846.19, -23.96, -128.42, 2, 0) + MovementLoopAddLocation(NPC, 846.64, -25.38, -131.64, 2, 0) + MovementLoopAddLocation(NPC, 847.11, -24.78, -135.05, 2, 0) + MovementLoopAddLocation(NPC, 848.51, -24.32, -137.19, 2, 0) + MovementLoopAddLocation(NPC, 850.58, -24.28, -140.58, 2, 0) + MovementLoopAddLocation(NPC, 853.19, -24.22, -144.99, 2, 0) + MovementLoopAddLocation(NPC, 853.77, -24.2, -147.17, 2, 0) + MovementLoopAddLocation(NPC, 853.72, -24.17, -149.2, 2, 0) + MovementLoopAddLocation(NPC, 853.48, -24.17, -150.48, 2, 0) + MovementLoopAddLocation(NPC, 852.08, -24.19, -152.17, 2, 0) + MovementLoopAddLocation(NPC, 849.66, -24.24, -153.3, 2, 0) + MovementLoopAddLocation(NPC, 845.21, -24.42, -153.66, 2, 0) + MovementLoopAddLocation(NPC, 827.11, -25, -153.24, 2, 0) + MovementLoopAddLocation(NPC, 820.85, -25.22, -151.96, 2, 0) + MovementLoopAddLocation(NPC, 814.31, -25.49, -154.51, 2, 15, "Sit3") + MovementLoopAddLocation(NPC, 816.69, -25.32, -158.6, 2, 0) + MovementLoopAddLocation(NPC, 821.84, -24.77, -161.63, 2, 0) + MovementLoopAddLocation(NPC, 829.39, -24.7, -162.63, 2, 0) + MovementLoopAddLocation(NPC, 835.25, -24.79, -163.82, 2, 0) + MovementLoopAddLocation(NPC, 839.43, -24.77, -165.85, 2, 0) + MovementLoopAddLocation(NPC, 846.04, -24.2, -169.07, 2, 0) + MovementLoopAddLocation(NPC, 855.77, -23.15, -173.79, 2, 25, "Sit4") + MovementLoopAddLocation(NPC, 850.79, -24.02, -167.99, 2, 0) + MovementLoopAddLocation(NPC, 846.71, -24.7, -165.4, 2, 0) + MovementLoopAddLocation(NPC, 841.78, -25.21, -162.26, 2, 0) + MovementLoopAddLocation(NPC, 843.77, -25.48, -157.36, 2, 0) + MovementLoopAddLocation(NPC, 850.28, -25.45, -156.18, 2, 0) + MovementLoopAddLocation(NPC, 857.37, -25.45, -156.42, 2, 0) + MovementLoopAddLocation(NPC, 870.36, -25.45, -156.48, 2, 0) + MovementLoopAddLocation(NPC, 876.36, -24.92, -155.68, 2, 0) + MovementLoopAddLocation(NPC, 881.79, -24.94, -154.19, 2, 0) + MovementLoopAddLocation(NPC, 885.01, -24.79, -148.67, 2, 0) + MovementLoopAddLocation(NPC, 888.47, -23.69, -143.96, 2, 0) + MovementLoopAddLocation(NPC, 889.57, -22.69, -139.54, 2, 0) + MovementLoopAddLocation(NPC, 887.99, -22.21, -135.03, 2, 0) + MovementLoopAddLocation(NPC, 884.02, -22.21, -134.61, 2, 0) + MovementLoopAddLocation(NPC, 878.39, -22.21, -138.6, 2, 0) + MovementLoopAddLocation(NPC, 873.59, -22.21, -143.68, 2, 0) + MovementLoopAddLocation(NPC, 857.84, -22.21, -147.08, 2, 20, "Sit5") + MovementLoopAddLocation(NPC, 860.97, -22.21, -143.65, 2, 0) + MovementLoopAddLocation(NPC, 867.53, -22.21, -140.44, 2, 0) + MovementLoopAddLocation(NPC, 880.95, -22.21, -137.49, 2, 0) + MovementLoopAddLocation(NPC, 890.11, -22.01, -136.9, 2, 0) + MovementLoopAddLocation(NPC, 893.75, -22.56, -134.41, 2, 0) + MovementLoopAddLocation(NPC, 896.32, -22.46, -127.99, 2, 0) + MovementLoopAddLocation(NPC, 899.45, -22.32, -119.8, 2, 0) + MovementLoopAddLocation(NPC, 902.52, -22.3, -111.96, 2, 0) + MovementLoopAddLocation(NPC, 902.61, -22.4, -102.31, 2, 0) + MovementLoopAddLocation(NPC, 900.04, -22.4, -92.91, 2, 0) + MovementLoopAddLocation(NPC, 897.25, -22.4, -86.65, 2, 0) + MovementLoopAddLocation(NPC, 894.65, -22.22, -86.07, 2, 0) + MovementLoopAddLocation(NPC, 891.35, -22.61, -87.19, 2, 0) + MovementLoopAddLocation(NPC, 889.13, -22.61, -88.2, 2, 0) +end + +function Sit(NPC, Time) + PlayAnimation(NPC, 538) + SpawnSet(NPC, "action_state", "540") + AddTimer(NPC, Time, "EndSit") +end + +function EndSit(NPC) + PlayAnimation(NPC, 539) + SpawnSet(NPC, "action_state", "0") +end + +function Sit1(NPC) + Sit(NPC, 10000) +end + + +function Sit2(NPC) + SpawnSet(NPC, "heading", "172.81") + Sit(NPC, 8000) +end + + +function Sit3(NPC) + SpawnSet(NPC, "heading", "180.48") + Sit(NPC, 12000) +end + + +function Sit4(NPC) + SpawnSet(NPC, "heading", "331.89") + Sit(NPC, 20000) +end + + +function Sit5(NPC) + SpawnSet(NPC, "heading", "50.98") + Sit(NPC, 15000) +end + + diff --git a/server/SpawnScripts/Graystone/Fiercecry.lua b/server/SpawnScripts/Graystone/Fiercecry.lua new file mode 100644 index 000000000..f37f9c54b --- /dev/null +++ b/server/SpawnScripts/Graystone/Fiercecry.lua @@ -0,0 +1,12 @@ +--[[ + Script Name : SpawnScripts/Graystone/Fiercecry.lua + Script Purpose : Fiercecry + Script Author : John Adams + Script Date : 2008.09.21 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + PlayFlavor(NPC, "", "We are the Graystone Watch. We're here to prevent trouble in our village.", "", 1689589577, 4560189, Spawn) +end \ No newline at end of file diff --git a/server/SpawnScripts/Graystone/Frerin.lua b/server/SpawnScripts/Graystone/Frerin.lua new file mode 100644 index 000000000..95f64f8ae --- /dev/null +++ b/server/SpawnScripts/Graystone/Frerin.lua @@ -0,0 +1,19 @@ +--[[ + Script Name : SpawnScripts/Graystone/Frerin.lua + Script Purpose : Frerin + Script Author : John Adams/Scatman + Script Date : 2008.09.21 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + local choice = math.random(1, 3) + if choice == 1 then + PlayFlavor(NPC, "voiceover/english/dwarf_eco_good_1/ft/dwarf/dwarf_eco_good_1_hail_gm_f593b7f4.mp3", "I prefer the dark, freshly dug tunnels underground, but I guess this city will do.", "shrug", 2336463438, 545977097, Spawn) + elseif choice == 2 then + PlayFlavor(NPC, "voiceover/english/dwarf_eco_good_1/ft/dwarf/dwarf_eco_good_1_hail_gm_18f9b118.mp3", "Oh! You snuck up on me. Good to see you.", "doubletake", 2049370386, 4131204607, Spawn) + else + PlayFlavor(NPC, "voiceover/english/dwarf_eco_good_1/ft/dwarf/dwarf_eco_good_1_hail_gm_4a5e53d4.mp3", "Sure, sometimes it seems like I'm sober, but trust me, I'm not.", "wink", 2723897486, 2019496108, Spawn) + end +end \ No newline at end of file diff --git a/server/SpawnScripts/Graystone/Friskit.lua b/server/SpawnScripts/Graystone/Friskit.lua new file mode 100644 index 000000000..d30a64141 --- /dev/null +++ b/server/SpawnScripts/Graystone/Friskit.lua @@ -0,0 +1,38 @@ +--[[ + Script Name : SpawnScripts/Graystone/Friskit.lua + Script Purpose : Friskit + Script Author : Scatman + Script Date : 2009.05.30 + Script Notes : +--]] + +function spawn(NPC) + MovementLoopAddLocation(NPC, 852.34, -23.79, -147.56, 3, 0) + MovementLoopAddLocation(NPC, 854.18, -24.23, -152.11, 3, 0) + MovementLoopAddLocation(NPC, 866.69, -22.48, -152.71, 3, 0) + MovementLoopAddLocation(NPC, 876.82, -24.92, -152.7, 3, 0) + MovementLoopAddLocation(NPC, 886.12, -24.47, -145.53, 3, 0) + MovementLoopAddLocation(NPC, 891.32, -22.64, -141, 3, 0) + MovementLoopAddLocation(NPC, 897.25, -22.33, -122.34, 3, math.random(5, 30)) + MovementLoopAddLocation(NPC, 888.65, -22.26, -98.61, 3, 0) + MovementLoopAddLocation(NPC, 886.03, -22.15, -98.35, 3, 0) + MovementLoopAddLocation(NPC, 880.78, -24.5, -100.12, 3, 0) + MovementLoopAddLocation(NPC, 866.08, -24.99, -105.47, 3, 0) + MovementLoopAddLocation(NPC, 852.66, -24.95, -105.34, 3, 0) + MovementLoopAddLocation(NPC, 847.61, -23.04, -107.87, 3, 0) + MovementLoopAddLocation(NPC, 843.25, -22.49, -114.5, 3, 0) + MovementLoopAddLocation(NPC, 838.41, -20.73, -114.15, 3, 0) + MovementLoopAddLocation(NPC, 834.11, -20.97, -120.78, 3, math.random(5, 30)) + MovementLoopAddLocation(NPC, 839.23, -20.93, -130.53, 3, 0) + MovementLoopAddLocation(NPC, 839.13, -20.93, -142.28, 3, 0) + MovementLoopAddLocation(NPC, 841.17, -20.86, -143.26, 3, 0) + MovementLoopAddLocation(NPC, 844.56, -22.54, -144.9, 3, 0) + MovementLoopAddLocation(NPC, 843.44, -22.55, -147.44, 3, 0) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) +end \ No newline at end of file diff --git a/server/SpawnScripts/Graystone/GnorFarven.lua b/server/SpawnScripts/Graystone/GnorFarven.lua new file mode 100644 index 000000000..8591cd88e --- /dev/null +++ b/server/SpawnScripts/Graystone/GnorFarven.lua @@ -0,0 +1,77 @@ +--[[ + Script Name : SpawnScripts/Graystone/GnorFarven.lua + Script Purpose : Gnor Farven + Script Author : Scatman + Script Date : 2009.10.05 + Script Notes : +--]] + +dofile("SpawnScripts/Generic/GenericVoiceOvers.lua") + +local DWARF_MENTOR_QUEST_2 = 285 + +function spawn(NPC) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + GenericHail(NPC, Spawn) + + if HasQuest(Spawn, DWARF_MENTOR_QUEST_2) and not QuestStepIsComplete(Spawn, DWARF_MENTOR_QUEST_2, 2) then + LikinTheViewAreYa(NPC, Spawn, conversation) + else + Say(NPC, "Sorry, it's near impossible for me to drink and talk at the same time.", Spawn) + end +end + +function LikinTheViewAreYa(NPC, Spawn, conversation) + AddConversationOption(conversation, "Mav made some of her family recipe.", "dlg_17_1") + StartConversation(conversation, NPC, Spawn, "Likin' the view, are ya? Hah hah!") +end + +function dlg_17_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "Well, prepare to find out. I have some of the brew right here.", "dlg_17_2") + StartConversation(conversation, NPC, Spawn, "So she finally made good on her promise! It's about time. I'm going to have to schedule an appointment with her, cause I'm sure that's what it'll take to try some of this magical brew of hers. You know she says it can knock an ogre on 'is back, I dun' believe it though.") +end + +function dlg_17_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "Here you go.", "dlg_17_3") + StartConversation(conversation, NPC, Spawn, "Oy! Fill 'er up then why don't ya! If it's half as good as Mav describes it it'll have been worth the wait.") +end + +function dlg_17_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "How is it?", "dlg_17_4") + StartConversation(conversation, NPC, Spawn, "Hold your chairs 'cause here I go!") +end + +function dlg_17_4(NPC, Spawn) + SetStepComplete(Spawn, DWARF_MENTOR_QUEST_2, 2) + + -- knockeddowntoknees + SpawnSet(NPC, "visual_state", 11764) + AddTimer(NPC, 3000, "RemoveVisualState") + + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "You're welcome.") + StartConversation(conversation, NPC, Spawn, "Oooooh-wee, that'll make ya warm at night. She was right about it. I can't wait until she goes into business. Best brew this side of Kaladim. Hah, no offense, Coppershot! Thanks for bringing it to me!") +end + +function RemoveVisualState(NPC) + SpawnSet(NPC, "visual_state", 0) +end \ No newline at end of file diff --git a/server/SpawnScripts/Graystone/GolanPanicward.lua b/server/SpawnScripts/Graystone/GolanPanicward.lua new file mode 100644 index 000000000..33d47e2ba --- /dev/null +++ b/server/SpawnScripts/Graystone/GolanPanicward.lua @@ -0,0 +1,92 @@ +--[[ + Script Name : SpawnScripts/Graystone/GolanPanicward.lua + Script Purpose : Golan Panicward + Script Author : John Adams/Scatman/Jabantiz + Script Date : 2008.09.21 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +function spawn(NPC) + MovementLoopAddLocation(NPC, 897.25, -22.61, -100.86, 2, 0) + MovementLoopAddLocation(NPC, 900.33, -22.36, -106.33, 2, 0) + MovementLoopAddLocation(NPC, 902.31, -22.3, -112.29, 2, 10, "FaceStone") + MovementLoopAddLocation(NPC, 900.97, -22.31, -115.43, 2, 0) + MovementLoopAddLocation(NPC, 898.34, -22.32, -119.24, 2, 0) + MovementLoopAddLocation(NPC, 896.53, -22.46, -124.49, 2, 0) + MovementLoopAddLocation(NPC, 895.65, -22.48, -130.99, 2, 0) + MovementLoopAddLocation(NPC, 892.92, -22.61, -136.48, 2, 0) + MovementLoopAddLocation(NPC, 887.66, -22.21, -137.06, 2, 0) + MovementLoopAddLocation(NPC, 881.79, -22.21, -140.53, 2, 0) + MovementLoopAddLocation(NPC, 877.09, -22.21, -145.92, 2, 0) + MovementLoopAddLocation(NPC, 865.75, -22.21, -148.23, 2, 10) + MovementLoopAddLocation(NPC, 865.72, -22.5, -151.71, 2, 0) + MovementLoopAddLocation(NPC, 861.1, -23.27, -151.98, 2, 0) + MovementLoopAddLocation(NPC, 855.63, -24.24, -151.78, 2, 0) + MovementLoopAddLocation(NPC, 852.81, -24.12, -147.26, 2, 0) + MovementLoopAddLocation(NPC, 850.67, -23.08, -147.17, 2, 0) + MovementLoopAddLocation(NPC, 848.2, -22.35, -147.01, 2, 0) + MovementLoopAddLocation(NPC, 844.73, -22.49, -143.91, 2, 0) + MovementLoopAddLocation(NPC, 842.99, -21.61, -143.39, 2, 0) + MovementLoopAddLocation(NPC, 841.07, -20.86, -142.96, 2, 0) + MovementLoopAddLocation(NPC, 836.9, -20.93, -143.56, 2, 0) + MovementLoopAddLocation(NPC, 833.3, -20.93, -143.42, 2, 10) + MovementLoopAddLocation(NPC, 833.14, -20.93, -139.68, 2, 0) + MovementLoopAddLocation(NPC, 835.57, -20.93, -135.04, 2, 0) + MovementLoopAddLocation(NPC, 838.23, -20.93, -130.37, 2, 0) + MovementLoopAddLocation(NPC, 834.81, -20.93, -125.75, 2, 0) + MovementLoopAddLocation(NPC, 834.59, -20.97, -122.12, 2, 0) + MovementLoopAddLocation(NPC, 834.97, -20.9, -117.55, 2, 0) + MovementLoopAddLocation(NPC, 837.63, -20.74, -115.58, 2, 0) + MovementLoopAddLocation(NPC, 840.33, -21.69, -116.32, 2, 0) + MovementLoopAddLocation(NPC, 842.43, -22.72, -118.97, 2, 0) + MovementLoopAddLocation(NPC, 844.62, -22.8, -121.65, 2, 10) + MovementLoopAddLocation(NPC, 845.72, -22.67, -117.15, 2, 0) + MovementLoopAddLocation(NPC, 845.78, -22.95, -111.79, 2, 0) + MovementLoopAddLocation(NPC, 847.22, -23.15, -108.4, 2, 0) + MovementLoopAddLocation(NPC, 849.93, -23.89, -107.18, 2, 0) + MovementLoopAddLocation(NPC, 853.28, -24.96, -105.86, 2, 0) + MovementLoopAddLocation(NPC, 866.22, -24.97, -102.99, 2, 0) + MovementLoopAddLocation(NPC, 879.33, -24.95, -100.31, 2, 0) + MovementLoopAddLocation(NPC, 882.84, -23.48, -99.63, 2, 0) + MovementLoopAddLocation(NPC, 885.95, -22.05, -99.03, 2, 0) + MovementLoopAddLocation(NPC, 889.06, -22.27, -101.34, 2, 0) + MovementLoopAddLocation(NPC, 891.2, -22.3, -107.62, 2, 0) + MovementLoopAddLocation(NPC, 895.77, -22.37, -108.66, 2, 0) + MovementLoopAddLocation(NPC, 896.51, -22.37, -105.48, 2, 0) + MovementLoopAddLocation(NPC, 896.03, -22.61, -102.33, 2, 0) + MovementLoopAddLocation(NPC, 893.32, -22.61, -98.13, 2, 0) + MovementLoopAddLocation(NPC, 891.33, -22.61, -94.38, 2, 10) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + RandomTalk(NPC, Spawn, false) +end + +function RandomTalk(NPC, Spawn, Option) + local choice = 0 + if Option == nil then + choice = math.random(1, 100) + end + + if choice < 25 then + FaceTarget(NPC, Spawn) + local choice = math.random(1, 4) + if choice == 1 then + PlayFlavor(NPC, "", "Haha, I saw you! I'm not one to fall for the same thing three times.", "", 1689589577, 4560189, Spawn) + elseif choice == 2 then + PlayFlavor(NPC, "", "Ah, what I wouldn't give to cradle a mug of good Dwarven Ale just now.", "", 1689589577, 4560189, Spawn) + elseif choice == 3 then + PlayFlavor(NPC, "", "A hard day of adventuring makes one long for home, don't it?", "", 1689589577, 4560189, Spawn) + else + PlayFlavor(NPC, "", "Only elves would build a city high up in the trees without any railing!", "", 1689589577, 4560189, Spawn) + end + end +end + +function FaceStone(NPC) + SpawnSet(NPC, "heading", "52.65") +end \ No newline at end of file diff --git a/server/SpawnScripts/Graystone/GraystoneCourierDirvel.lua b/server/SpawnScripts/Graystone/GraystoneCourierDirvel.lua new file mode 100644 index 000000000..10a5adfbf --- /dev/null +++ b/server/SpawnScripts/Graystone/GraystoneCourierDirvel.lua @@ -0,0 +1,130 @@ +--[[ + Script Name : GraystoneCourierDirvel.lua + Script Purpose : Graystone Courier Dirvel + Script Author : John Adams + Script Date : 2008.09.19 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +-- Quest ID's +local LATESHIPMENT = 290 + +function spawn(NPC) + x = GetX(NPC) + y = GetY(NPC) + z = GetZ(NPC) + speed = 2 + + MovementLoopAddLocation(NPC, 893.94, -22.61, -94.81 , speed , 0) + MovementLoopAddLocation(NPC, 902.19, -20.30, -109.66, speed , 0) + MovementLoopAddLocation(NPC, 907.59, -20.69, -104.74, speed , 0) + MovementLoopAddLocation(NPC, 915.84, -20.69, -110.29, speed , 0) + MovementLoopAddLocation(NPC, 928.15, -20.69, -102.77, speed , 10, "RandomSay") + + MovementLoopAddLocation(NPC, 915.84, -20.69, -110.29, speed , 0) + MovementLoopAddLocation(NPC, 907.29, -20.69, -103.76, speed , 0) + MovementLoopAddLocation(NPC, 901.93, -22.30, -109.13, speed , 0) + MovementLoopAddLocation(NPC, 893.20, -22.59, -137.26, speed , 0) + MovementLoopAddLocation(NPC, 901.23, -24.98, -141.01, speed , 0) + MovementLoopAddLocation(NPC, 901.06, -24.93, -148.05, speed , 0) + MovementLoopAddLocation(NPC, 915.60, -25.09, -151.09, speed , 0) + MovementLoopAddLocation(NPC, 915.15, -25.11, -156.50, speed , 10, "RandomSay") + + MovementLoopAddLocation(NPC, 914.66, -25.10, -154.91, speed , 0) + MovementLoopAddLocation(NPC, 902.56, -24.95, -152.20, speed , 0) + MovementLoopAddLocation(NPC, 893.19, -24.93, -145.26, speed , 10, "RandomSay") + + MovementLoopAddLocation(NPC, 891.17, -24.85, -151.09, speed , 0) + MovementLoopAddLocation(NPC, 855.96, -24.26, -152.24, speed , 0) + MovementLoopAddLocation(NPC, 852.41, -23.86, -147.34, speed , 0) + MovementLoopAddLocation(NPC, 841.00, -22.55, -145.98, speed , 0) + MovementLoopAddLocation(NPC, 836.97, -24.55, -146.77, speed , 10, "RandomSay") + + MovementLoopAddLocation(NPC, 845.45, -22.55, -145.01, speed , 0) + MovementLoopAddLocation(NPC, 839.41, -20.93, -142.88, speed , 0) + MovementLoopAddLocation(NPC, 837.49, -20.94, -128.26, speed , 0) + MovementLoopAddLocation(NPC, 817.20, -20.93, -108.95, speed , 0) + MovementLoopAddLocation(NPC, 814.64, -20.93, -94.23 , speed , 10, "RandomSay") + + MovementLoopAddLocation(NPC, 827.58, -20.93, -85.46 , speed , 0) + MovementLoopAddLocation(NPC, 845.79, -20.90, -97.16 , speed , 0) + MovementLoopAddLocation(NPC, 838.72, -20.72, -112.23, speed , 0) + MovementLoopAddLocation(NPC, 844.59, -22.77, -112.91, speed , 0) + MovementLoopAddLocation(NPC, 846.77, -23.25, -107.80, speed , 0) + MovementLoopAddLocation(NPC, 886.70, -22.25, -98.83 , speed , 0) + MovementLoopAddLocation(NPC, 896.03, -22.37, -109.00, speed , 0) + MovementLoopAddLocation(NPC, 897.60, -22.61, -102.00, speed , 0) + MovementLoopAddLocation(NPC, 893.94, -22.61, -94.81 , speed , 0) + MovementLoopAddLocation(NPC, x , y , z , speed , 10, "RandomSay") +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + if HasQuest(Spawn, LATESHIPMENT) and GetQuestStep(Spawn, LATESHIPMENT) == 2 then + BusyWithQuest(NPC, Spawn) + else + Say(NPC, "Please come back later. I am very, very busy.", Spawn) + end +end + +function BusyWithQuest(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/graystone_courier_dirvel/qey_village03/quests/graystone_courier/graystone_courier001.mp3", "", "", 2607292878, 3490339113, Spawn) + AddConversationOption(conversation, "I have a question about some packages.", "dlg_15_1") + StartConversation(conversation, NPC, Spawn, "Please come back later. I am very, very busy.") +end + +function dlg_15_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/graystone_courier_dirvel/qey_village03/quests/graystone_courier/graystone_courier002.mp3", "", "", 2049714213, 2524717150, Spawn) + AddConversationOption(conversation, "Shipment GG4QC doesn't seem to be in the overflow manifest, but it was delivered here.", "dlg_15_2") + StartConversation(conversation, NPC, Spawn, "All right, but make it quick, I'm way behind.") +end + +function dlg_15_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/graystone_courier_dirvel/qey_village03/quests/graystone_courier/graystone_courier003.mp3", "", "", 3702985817, 3417442042, Spawn) + AddConversationOption(conversation, "Who might I talk to?", "dlg_15_3") + StartConversation(conversation, NPC, Spawn, "Yeah? I really wouldn't know much about anything that doesn't appear in the overflow manifest. I won't be working outside of overflow for some time now.") +end + +function dlg_15_3(NPC, Spawn) + SetStepComplete(Spawn, LATESHIPMENT, 2) + + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/graystone_courier_dirvel/qey_village03/quests/graystone_courier/graystone_courier004.mp3", "", "", 492636347, 242481980, Spawn) + AddConversationOption(conversation, "Thank you.") + StartConversation(conversation, NPC, Spawn, "You'll have to talk to the Shipping Coordinator. He'll know what happened to the shipment. You can find him on the docks.") +end + +function RandomSay(NPC) + choice = math.random(1, 7) + + if choice == 1 then + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/graystone_courier_dirvel/qey_village03/quest_graystone_courier_blarg_366d0c73.mp3", "I need a break like Lucan needs a vacation.", "", 2879789175, 2017987376) + elseif choice == 2 then + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/graystone_courier_dirvel/qey_village03/quest_graystone_courier_blarg_4829cb8c.mp3", "Hey, look at that! Another late package. Who would've thought, huh?", "", 4258041512, 25774857) + elseif choice == 3 then + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/graystone_courier_dirvel/qey_village03/quest_graystone_courier_blarg_6b384f5f.mp3", "Wow, this shipment is days old!", "", 3859597953, 2582422318) + elseif choice == 4 then + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/graystone_courier_dirvel/qey_village03/quest_graystone_courier_blarg_b8328015.mp3", "Goodness, I don't think I'll ever get done with this work.", "", 1615569956, 1679588116) + elseif choice == 5 then + PlayFlavor(Spawn, "voiceover/english/voice_emotes/greetings/greetings_3_1002.mp3", "", "", 0, 0) + elseif choice == 6 then + Say(NPC, "Why did I ever accept this job?") + elseif choice == 7 then + Say(NPC, "There has to be a more efficient way of doing this.") + else + Say(NPC, "Noob scatman did this wrong.") + end +end diff --git a/server/SpawnScripts/Graystone/GruffinGoldtooth.lua b/server/SpawnScripts/Graystone/GruffinGoldtooth.lua new file mode 100644 index 000000000..d1bb56754 --- /dev/null +++ b/server/SpawnScripts/Graystone/GruffinGoldtooth.lua @@ -0,0 +1,23 @@ +--[[ + Script Name : SpawnScripts/Graystone/GruffinGoldtooth.lua + Script Purpose : Gruffin Goldtooth + Script Author : John Adams + Script Date : 2008.09.21 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +function spawn(NPC) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/gruffin_goldtooth/qey_village03/gruffingoldtooth001.mp3", "", "", 997482113, 2338709603, Spawn) + AddConversationOption(conversation, "I'll leave you to your work.") + StartConversation(conversation, NPC, Spawn, "Hey there, young 'in. Don't mind ole' Gruffin. I'm just inspecting these here mineral veins. This bedrock is going to be especially useful for building new homes for refugees and citizens alike.") +end \ No newline at end of file diff --git a/server/SpawnScripts/Graystone/Guile.lua b/server/SpawnScripts/Graystone/Guile.lua new file mode 100644 index 000000000..28abc97e4 --- /dev/null +++ b/server/SpawnScripts/Graystone/Guile.lua @@ -0,0 +1,37 @@ +--[[ + Script Name : SpawnScripts/Graystone/Guile.lua + Script Purpose : Guile + Script Author : Scatman + Script Date : 2009.05.30 + Script Notes : +--]] + +function spawn(NPC) + MovementLoopAddLocation(NPC, 886.42, -24.78, -152.29, 3, 0) + MovementLoopAddLocation(NPC, 884.14, -24.78, -145.06, 3, 0) + MovementLoopAddLocation(NPC, 890.71, -22.63, -139.72, 3, 0) + MovementLoopAddLocation(NPC, 887.87, -22.21, -136.36, 3, 0) + MovementLoopAddLocation(NPC, 873.4, -22.21, -145.66, 3, 0) + MovementLoopAddLocation(NPC, 858.6, -22.21, -145.22, 3, 0) + MovementLoopAddLocation(NPC, 851.72, -22.21, -135.45, 3, math.random(5, 30)) + MovementLoopAddLocation(NPC, 849.11, -22.01, -123.11, 3, 0) + MovementLoopAddLocation(NPC, 845.08, -22.77, -120.82, 3, 0) + MovementLoopAddLocation(NPC, 846.78, -23.25, -108.07, 3, 0) + MovementLoopAddLocation(NPC, 852.16, -24.75, -106.6, 3, 0) + MovementLoopAddLocation(NPC, 879.54, -24.95, -100.6, 3, 0) + MovementLoopAddLocation(NPC, 886.11, -22.07, -99.21, 3, 0) + MovementLoopAddLocation(NPC, 893.11, -22.3, -106.56, 3, 0) + MovementLoopAddLocation(NPC, 891.82, -22.31, -113.76, 3, math.random(5, 30)) + MovementLoopAddLocation(NPC, 896.66, -22.32, -118.73, 3, 0) + MovementLoopAddLocation(NPC, 895.96, -22.53, -137.98, 3, 0) + MovementLoopAddLocation(NPC, 900.89, -24.98, -140.53, 3, 0) + MovementLoopAddLocation(NPC, 904.77, -24.94, -145.13, 3, 0) + MovementLoopAddLocation(NPC, 901.79, -24.94, -152.61, 3, 0) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) +end \ No newline at end of file diff --git a/server/SpawnScripts/Graystone/GurnaHadel.lua b/server/SpawnScripts/Graystone/GurnaHadel.lua new file mode 100644 index 000000000..582665fa3 --- /dev/null +++ b/server/SpawnScripts/Graystone/GurnaHadel.lua @@ -0,0 +1,77 @@ +--[[ + Script Name : SpawnScripts/Graystone/GurnaHadel.lua + Script Purpose : Gurna Hadel + Script Author : Scatman + Script Date : 2009.10.05 + Script Notes : +--]] + +dofile("SpawnScripts/Generic/GenericVoiceOvers.lua") + +local DWARF_MENTOR_QUEST_2 = 285 + +function spawn(NPC) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + GenericHail(NPC, Spawn) + + if HasQuest(Spawn, DWARF_MENTOR_QUEST_2) and not QuestStepIsComplete(Spawn, DWARF_MENTOR_QUEST_2, 3) then + GotSomethingForMe(NPC, Spawn, conversation) + else + PlayFlavor(NPC, "", "Come back when you've got brew!", "", 1689589577, 4560189, Spawn) + end +end + +function GotSomethingForMe(NPC, Spawn, conversation) + AddConversationOption(conversation, "A pint, compliments of Mav.", "dlg_18_1") + StartConversation(conversation, NPC, Spawn, "'Ave ya got something for me?") +end + +function dlg_18_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "Yup, her family recipe.", "dlg_18_2") + StartConversation(conversation, NPC, Spawn, "Her brew, then? Has she finally made some?") +end + +function dlg_18_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "Well the day has finally come! She's ready for everyone to try it.", "dlg_18_3") + StartConversation(conversation, NPC, Spawn, "Good! Took her long enough. I was worried she was just making it all up, I kind of felt sorry for her!") +end + +function dlg_18_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "All right. I hope you're ready.", "dlg_18_4") + StartConversation(conversation, NPC, Spawn, "Fill me up!") +end + +function dlg_18_4(NPC, Spawn) + SetStepComplete(Spawn, DWARF_MENTOR_QUEST_2, 3) + + -- cringe + SpawnSet(NPC, "visual_state", 11256) + AddTimer(NPC, 3000, "RemoveVisualState") + + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "Will do.") + StartConversation(conversation, NPC, Spawn, "It's got some bite, don't it now? I think I'll be feeling that for a few days to come, give Mav my compliments!") +end + +function RemoveVisualState(NPC) + SpawnSet(NPC, "visual_state", 0) +end \ No newline at end of file diff --git a/server/SpawnScripts/Graystone/HarganIcethaw.lua b/server/SpawnScripts/Graystone/HarganIcethaw.lua new file mode 100644 index 000000000..1f97891e7 --- /dev/null +++ b/server/SpawnScripts/Graystone/HarganIcethaw.lua @@ -0,0 +1,24 @@ +--[[ + Script Name : SpawnScripts/Graystone/HarganIcethaw.lua + Script Purpose : Hargan Icethaw + Script Author : John Adams + Script Date : 2008.09.21 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +function spawn(NPC) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/hargan_icethaw/qey_village03/harganicethaw000.mp3", "", "", 3849445120, 4083065151, Spawn) + AddConversationOption(conversation, "No, I think it's just you. I'll let you get back to what you're doing.") + StartConversation(conversation, NPC, Spawn, "Ahhhh ... Nothing's more rewarding than building up a good, hearty sweat after a long day's work!") +end + diff --git a/server/SpawnScripts/Graystone/InnkeeperRothskild.lua b/server/SpawnScripts/Graystone/InnkeeperRothskild.lua new file mode 100644 index 000000000..1fea3ac1c --- /dev/null +++ b/server/SpawnScripts/Graystone/InnkeeperRothskild.lua @@ -0,0 +1,27 @@ +--[[ + Script Name : SpawnScripts/Graystone/InnkeeperRothskild.lua + Script Purpose : Innkeeper Rothskild + Script Author : John Adams + Script Date : 2008.09.21 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +function spawn(NPC) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "innkeeper_uglar_splinterthumb/qey_village03/innkeeper001.mp3", "", "", 1149132848, 2425114450, Spawn) + AddConversationOption(conversation, "How can I place an item in my house?") + AddConversationOption(conversation, "What kind of housing is available to me?") + AddConversationOption(conversation, "What is the marketboard for?") + AddConversationOption(conversation, "What is my house for?") + AddConversationOption(conversation, "Nothing right now.") + StartConversation(conversation, NPC, Spawn, "Hello there " .. GetName(Spawn) .. ", what can I help you with?") +end diff --git a/server/SpawnScripts/Graystone/Ironmallet.lua b/server/SpawnScripts/Graystone/Ironmallet.lua new file mode 100644 index 000000000..51fbdd319 --- /dev/null +++ b/server/SpawnScripts/Graystone/Ironmallet.lua @@ -0,0 +1,23 @@ +--[[ + Script Name : SpawnScripts/Graystone/Ironmallet.lua + Script Purpose : Ironmallet + Script Author : John Adams + Script Date : 2008.09.21 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +function spawn(NPC) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/mender_ironmallet/qey_village03/menderironmallet000.mp3", "", "", 296833708, 2408095573, Spawn) + AddConversationOption(conversation, "I am sure you will get that name someday.") + StartConversation(conversation, NPC, Spawn, "I'm just the help around here. But someday I will have my own forge ... Ironmallet's House of ... er ... well ... something! The name will come to me someday.") +end \ No newline at end of file diff --git a/server/SpawnScripts/Graystone/Jenison.lua b/server/SpawnScripts/Graystone/Jenison.lua new file mode 100644 index 000000000..081a4ad4a --- /dev/null +++ b/server/SpawnScripts/Graystone/Jenison.lua @@ -0,0 +1,29 @@ +--[[ + Script Name : SpawnScripts/Graystone/Jenison.lua + Script Purpose : Jenison + Script Author : Scatman + Script Date : 2009.09.25 + Script Notes : +--]] + +dofile("SpawnScripts/Generic/GenericGuardVoiceOvers.lua") + +function spawn(NPC) + SetPlayerProximityFunction(NPC, 10, "InRange", "LeaveRange") +end + +function respawn(NPC) + spawn(NPC) +end + +function InRange(NPC, Spawn) + CheckFaction(NPC, Spawn, "Qeynos") +end + +function LeaveRange(NPC, Spawn) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + GenericGuardHail(NPC, Spawn) +end diff --git a/server/SpawnScripts/Graystone/Jodi.lua b/server/SpawnScripts/Graystone/Jodi.lua new file mode 100644 index 000000000..7bac96de1 --- /dev/null +++ b/server/SpawnScripts/Graystone/Jodi.lua @@ -0,0 +1,12 @@ +--[[ + Script Name : SpawnScripts/Graystone/Jodi.lua + Script Purpose : Jodi + Script Author : John Adams + Script Date : 2008.09.21 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + PlayFlavor(NPC, "voiceover/english/jodi/qey_village03/100_customer_human_jodi_multhail1_ef852e92.mp3", "Hmmm... I think I'll pick up the potions myself.", "", 1168503261, 3143676939, Spawn) +end \ No newline at end of file diff --git a/server/SpawnScripts/Graystone/KargIcemoore.lua b/server/SpawnScripts/Graystone/KargIcemoore.lua new file mode 100644 index 000000000..987665a5c --- /dev/null +++ b/server/SpawnScripts/Graystone/KargIcemoore.lua @@ -0,0 +1,23 @@ +--[[ + Script Name : SpawnScripts/Graystone/KargIcemoore.lua + Script Purpose : Karg Icemoore + Script Author : John Adams + Script Date : 2008.09.21 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +function spawn(NPC) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/icemoore/qey_village03/icemoore000.mp3", "", "", 2067185427, 1499529819, Spawn) + AddConversationOption(conversation, "I'll look around.") + StartConversation(conversation, NPC, Spawn, "Welcome to the Frozen Tundra, finest brewhall in all of Qeynos--no--finest brewhall in all of Norrath!! Belly up to Coppershot. He'll get yer order.") +end \ No newline at end of file diff --git a/server/SpawnScripts/Graystone/Kaya.lua b/server/SpawnScripts/Graystone/Kaya.lua new file mode 100644 index 000000000..739e5fc4f --- /dev/null +++ b/server/SpawnScripts/Graystone/Kaya.lua @@ -0,0 +1,22 @@ +--[[ + Script Name : SpawnScripts/Graystone/Kaya.lua + Script Purpose : Kaya + Script Author : John Adams + Script Date : 2008.09.21 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + choice = math.random(1, 4) + + if choice == 1 then + PlayFlavor(NPC, "voiceover/english/optional2/barbarian_eco_good_2/ft/service/weaponsmith/barbarian_weaponsmith_service_good_2_hail_gf_48594671.mp3", "Is there something you need to have custom made? I can see if I can get one of my lads to look into it!", "ponder", 638401660, 3171727066, Spawn) + elseif choice == 2 then + PlayFlavor(NPC, "voiceover/english/optional2/barbarian_eco_good_2/ft/service/weaponsmith/barbarian_weaponsmith_service_good_2_hail_gf_37dbcab8.mp3", "Welcome to my humble shop. We have quite a selection of weapons to choose from. See for yourself...", "salute", 939993914, 1218448248, Spawn) + elseif choice == 3 then + PlayFlavor(NPC, "voiceover/english/optional2/barbarian_eco_good_2/ft/service/weaponsmith/barbarian_weaponsmith_service_good_2_hail_gf_46ed66f6.mp3", "Never can you go into battle without a tried and trusted weapon. Here, take a look at what we have in stock.", "no", 2566058453, 1526004977, Spawn) + else + PlayFlavor(NPC, "voiceover/english/optional2/barbarian_eco_good_2/ft/service/weaponsmith/barbarian_weaponsmith_service_good_2_hail_gf_1248b278.mp3", "I just got a shipment in from the Far Seas Trading Company. I don't just show anybody this stuff so, shhhh! ", "wink", 3922800728, 536638644, Spawn) + end +end \ No newline at end of file diff --git a/server/SpawnScripts/Graystone/KeldraFrosthaven.lua b/server/SpawnScripts/Graystone/KeldraFrosthaven.lua new file mode 100644 index 000000000..99b700160 --- /dev/null +++ b/server/SpawnScripts/Graystone/KeldraFrosthaven.lua @@ -0,0 +1,40 @@ +--[[ + Script Name : SpawnScripts/Graystone/KeldraFrosthaven.lua + Script Purpose : Keldra Frosthaven + Script Author : John Adams/Scatman + Script Date : 2008.09.21 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +function spawn(NPC) + SetPlayerProximityFunction(NPC, 10, "RandomTalk") +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + RandomTalk(NPC, Spawn, false) +end + +function RandomTalk(NPC, Spawn, Option) + local choice = 0 + if Option == nil then + choice = math.random(1, 100) + end + + if choice < 25 then + FaceTarget(NPC, Spawn) + local choice = math.random(1, 4) + if choice == 1 then + PlayFlavor(NPC, "voiceover/english/optional2/barbarian_eco_good_1/ft/service/merchant/barbarian_merchant_service_good_1_hail_gf_45d92a75.mp3", "Welcome! What can I help you with?", "bow", 2063097698, 2494171847, Spawn) + elseif choice == 2 then + PlayFlavor(NPC, "voiceover/english/optional2/barbarian_eco_good_1/ft/service/merchant/barbarian_merchant_service_good_1_hail_gf_24322c5d.mp3", "Greetings, friend traveler! We have the finest supplies to fill your adventuring needs.", "smile", 3015552699, 2771723491, Spawn) + elseif choice == 3 then + PlayFlavor(NPC, "voiceover/english/optional2/barbarian_eco_good_1/ft/service/merchant/barbarian_merchant_service_good_1_hail_gf_e4fa2bd8.mp3", "Confound it! Where did I put that ledger? It must be around here somewhere!", "confused", 2483059399, 3985999050, Spawn) + else + PlayFlavor(NPC, "voiceover/english/optional2/barbarian_eco_good_1/ft/service/merchant/barbarian_merchant_service_good_1_hail_gf_ae84abf9.mp3", "Go on, take a look at the stock. You'll never beat this price in the city. I guarantee it!", "wink", 1501437320, 1208713152, Spawn) + end + end +end diff --git a/server/SpawnScripts/Graystone/KnightCaptainSalomar.lua b/server/SpawnScripts/Graystone/KnightCaptainSalomar.lua new file mode 100644 index 000000000..e92b78e6f --- /dev/null +++ b/server/SpawnScripts/Graystone/KnightCaptainSalomar.lua @@ -0,0 +1,12 @@ +--[[ + Script Name : SpawnScripts/Graystone/Knight-CaptainSalomar.lua + Script Purpose : Knight-Captain Salomar + Script Author : John Adams + Script Date : 2008.09.21 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + PlayFlavor(NPC, "voiceover/english/captain_salomar/qey_village03/100_guard_captain_human_salomar_multhail1_2d65b2d1.mp3", "Ah ... on second thought you had better broaden your training before serving the Qeynos Guard. Good day, citizen!", "", 138672311, 3107129991, Spawn) +end \ No newline at end of file diff --git a/server/SpawnScripts/Graystone/LarsSilverbrace.lua b/server/SpawnScripts/Graystone/LarsSilverbrace.lua new file mode 100644 index 000000000..9fa761476 --- /dev/null +++ b/server/SpawnScripts/Graystone/LarsSilverbrace.lua @@ -0,0 +1,38 @@ +--[[ + Script Name : SpawnScripts/Graystone/LarsSilverbrace.lua + Script Purpose : Lars Silverbrace + Script Author : John Adams/Scatman + Script Date : 2008.09.21 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +function spawn(NPC) + +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + RandomTalk(NPC, Spawn, false) +end + +function RandomTalk(NPC, Spawn, Option) + local choice = 0 + if Option == nil then + choice = math.random(1, 100) + end + + if choice < 25 then + FaceTarget(NPC, Spawn) + local choice = math.random(1, 3) + if choice == 1 then + PlayFlavor(NPC, "voiceover/english/dwarf_eco_good_ironforgeexchange/ft/eco/good/dwarf_eco_good_ironforgeexchange_hail_gm_a8e29d0d.mp3", "The Concordium are so consumed by their ancient tomes and dead languages that they fail to see the world right before their own noses.", "", 2358865205, 2338789833, Spawn) + elseif choice == 2 then + PlayFlavor(NPC, "voiceover/english/dwarf_eco_good_ironforgeexchange/ft/eco/good/dwarf_eco_good_ironforgeexchange_hail_gm_dee3d0ad.mp3", "The Ironforge Exchange constructed, brewed, tailored, forged, baked, or scribed just about everything you see here in Qeynos.", "", 1495031871, 1491125980, Spawn) + else + PlayFlavor(NPC, "voiceover/english/dwarf_eco_good_ironforgeexchange/ft/eco/good/dwarf_eco_good_ironforgeexchange_hail_gm_b69132af.mp3", "The Qeynos Guard recruits those who are attracted to physical activity but lack the creativity and talent required to join the Ironforge Exchange.", "", 3611623945, 4204627205, Spawn) + end + end +end diff --git a/server/SpawnScripts/Graystone/MarusDonoval.lua b/server/SpawnScripts/Graystone/MarusDonoval.lua new file mode 100644 index 000000000..39ed36dea --- /dev/null +++ b/server/SpawnScripts/Graystone/MarusDonoval.lua @@ -0,0 +1,183 @@ +--[[ + Script Name : SpawnScripts/Graystone/MarusDonoval.lua + Script Purpose : Marus Donoval + Script Author : Scatman + Script Date : 2009.09.27 + Script Notes : +--]] + +-- Quest ID's +local A_TIME_FOR_FIGHTING = 289 +local LATE_SHIPMENT = 290 + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + if HasCompletedQuest(Spawn, A_TIME_FOR_FIGHTING) then + if HasCompletedQuest(Spawn, LATE_SHIPMENT) then + WellLookWhoItIs(NPC, Spawn) + elseif HasQuest(Spawn, LATE_SHIPMENT) then + if GetQuestStep(Spawn, LATE_SHIPMENT) >= 6 then + WellLookWhoItIs(NPC, Spawn) + else + Say(NPC, "Hah, that was great! You're alright you know that?", Spawn) + end + else + Say(NPC, "Hah, that was great! You're alright you know that?", Spawn) + end + elseif HasQuest(Spawn, A_TIME_FOR_FIGHTING) then + HeyRelaxingHereWithQuest(NPC, Spawn) + else + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/marus_donoval/qey_village03/quests/marus_donoval/marus_donoval001.mp3", "Hey! I'm relaxing here.", "", 1272547244, 528166171, Spawn) + end +end + +function healthchanged(NPC, Spawn) + local hp_percent = GetHP(NPC) / GetMaxHP(NPC) + if hp_percent <= 0.25 then + SpawnSet(NPC, "attackable", 0) + SpawnSet(NPC, "show_level", 0) + AddTimer(NPC, 500, "StopAttacking", 1, Spawn) + end +end + +function StopAttacking(NPC, Spawn) + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/marus_donoval/qey_village03/quest_marus_donoval_fightover_c271419f.mp3", "Alright, alright. I'd say that's enough.", "", 2321626411, 1133430573, Spawn) + ClearHate(NPC) + ClearEncounter(NPC) +end + +function HeyRelaxingHereWithQuest(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + if not QuestStepIsComplete(Spawn, A_TIME_FOR_FIGHTING, 1) then + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/marus_donoval/qey_village03/quests/marus_donoval/marus_donoval001.mp3", "", "", 1272547244, 528166171, Spawn) + AddConversationOption(conversation, "Is someone making cheese in here?", "dlg_4_1") + AddConversationOption(conversation, "Do you get paid to sit around all day doing nothing?", "dlg_1_1") + AddConversationOption(conversation, "Your father was a slacker, too, wasn't he?", "dlg_2_1") + AddConversationOption(conversation, "Well why don't you relax somewhere else, buddy?", "dlg_3_1") + StartConversation(conversation, NPC, Spawn, "Hey! I'm relaxing here.") + else + Say(NPC, "Hah, that was great! You're alright you know that?", Spawn) + end +end + +--------------------------------------------------------------------------------------------- +-- QUEST 1 +--------------------------------------------------------------------------------------------- +function dlg_1_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/marus_donoval/qey_village03/quests/marus_donoval/marus_donoval001answer1.mp3", "", "", 1797143757, 3864854180, Spawn) + AddConversationOption(conversation, "Hmm.") + StartConversation(conversation, NPC, Spawn, "Eh, I'm a hard worker. My boss knows that.") +end + +function dlg_2_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/marus_donoval/qey_village03/quests/marus_donoval/marus_donoval001answer2.mp3", "", "", 283337044, 2652532195, Spawn) + AddConversationOption(conversation, "Really?") + StartConversation(conversation, NPC, Spawn, "My father built the floor you're standing on, for all you know!") +end + +function dlg_3_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/marus_donoval/qey_village03/quests/marus_donoval/marus_donoval001answer3.mp3", "", "", 3193402669, 2023299810, Spawn) + AddConversationOption(conversation, "Whoops.") + StartConversation(conversation, NPC, Spawn, "Hah hah! I like you!") +end + +function dlg_4_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/marus_donoval/qey_village03/quests/marus_donoval/marus_donoval002.mp3", "", "", 2325284648, 2510217170, Spawn) + AddConversationOption(conversation, "Oh, never mind, I think that smell is your feet.", "dlg_4_2") + StartConversation(conversation, NPC, Spawn, "I don't think so.") +end + +function dlg_4_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/marus_donoval/qey_village03/quests/marus_donoval/marus_donoval003.mp3", "", "", 1447882078, 784389169, Spawn) + AddConversationOption(conversation, "I thought someone was making cheese because of that horrible smell, but now that I'm closer to you I believe the smell is your feet.", "dlg_4_3") + AddConversationOption(conversation, "Nothing, sorry, I'll be going.") + StartConversation(conversation, NPC, Spawn, "What did you say?") +end + +function dlg_4_3(NPC, Spawn) + SetStepComplete(Spawn, A_TIME_FOR_FIGHTING, 1) + + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + SpawnSet(NPC, "attackable", 1) + SpawnSet(NPC, "show_level", 1) + AddHate(Spawn, NPC, 100) + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/marus_donoval/qey_village03/quests/marus_donoval/marus_donoval003a.mp3", "", "", 129148664, 3190606304, Spawn) + AddConversationOption(conversation, "Thank you.") + StartConversation(conversation, NPC, Spawn, "Ooh, that's a good one.") +end + +----------------------------------------------------------------------------------------------------------------------- +-- QUEST 2 +----------------------------------------------------------------------------------------------------------------------- + +function WellLookWhoItIs(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/marus_donoval/qey_village03/quests/marus_donoval/marus_donoval004.mp3", "", "", 2785464919, 2918822894, Spawn) + + if GetQuestStep(Spawn, LATE_SHIPMENT) == 6 then + AddConversationOption(conversation, "Sometimes, yes. Right now I need to ask you about a package though.", "AskAboutPackage") + end + + AddConversationOption(conversation, "Yeah, let's go!", "LetsGo") + AddConversationOption(conversation, "Nope, not anymore.") + StartConversation(conversation, NPC, Spawn, "Well look who it is. Still fighting?") +end + +function LetsGo(NPC, Spawn) + SpawnSet(NPC, "attackable", 1) + SpawnSet(NPC, "show_level", 1) + AddHate(Spawn, NPC, 100) +end + +function AskAboutPackage(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/marus_donoval/qey_village03/quests/marus_donoval/marus_donoval005.mp3", "", "", 297443074, 3794904170, Spawn) + AddConversationOption(conversation, "There was a package for Burk Stoneshatter. The shipment was GG4QC and it was reported as being unloaded but isn't in overflow, and isn't on the docks, and hasn't been delivered. The Shipping Coordinator said I should speak with you.", "dlg_20_2") + StartConversation(conversation, NPC, Spawn, "I can help. What do you need?") +end + +function dlg_20_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/marus_donoval/qey_village03/quests/marus_donoval/marus_donoval006.mp3", "", "", 3783525520, 2258184655, Spawn) + AddConversationOption(conversation, "In the water? Oh no.", "dlg_20_3") + StartConversation(conversation, NPC, Spawn, "GG4QC you say? Yeah, I know the one. Three crates, it was. I do remember unloading them. If what you say is true then I think they may have taken a bath, hah hah!") +end + +function dlg_20_3(NPC, Spawn) + SetStepComplete(Spawn, LATE_SHIPMENT, 6) + + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/marus_donoval/qey_village03/quests/marus_donoval/marus_donoval007.mp3", "", "", 313118896, 4113217971, Spawn) + AddConversationOption(conversation, "All right. Thanks.") + StartConversation(conversation, NPC, Spawn, "These things happen, you know. You should go talk to the Shipping Coordinator if you ever want to get that shipment.") +end \ No newline at end of file diff --git a/server/SpawnScripts/Graystone/MavBoilfist.lua b/server/SpawnScripts/Graystone/MavBoilfist.lua new file mode 100644 index 000000000..db6f755c4 --- /dev/null +++ b/server/SpawnScripts/Graystone/MavBoilfist.lua @@ -0,0 +1,437 @@ +--[[ + Script Name : SpawnScripts/Graystone/MavBoilfist.lua + Script Purpose : Mav Boilfist + Script Author : Scatman + Script Date : 2009.10.05 + Script Notes : +--]] + +local DWARF = 2 +local QUEST_1 = 283 +local QUEST_2 = 285 +local QUEST_3 = 286 +local QUEST_4 = 287 +local QUEST_5 = 288 + +function spawn(NPC) + ProvidesQuest(NPC, QUEST_1) + ProvidesQuest(NPC, QUEST_2) + ProvidesQuest(NPC, QUEST_3) + ProvidesQuest(NPC, QUEST_4) + ProvidesQuest(NPC, QUEST_5) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + if HasCompletedQuest(Spawn, QUEST_1) then + if HasCompletedQuest(Spawn, QUEST_2) then + if HasCompletedQuest(Spawn, QUEST_3) then + if HasCompletedQuest(Spawn, QUEST_4) then + if HasCompletedQuest(Spawn, QUEST_5) then + OnQuest5(NPC, Spawn, conversation) + elseif HasQuest(Spawn, QUEST_5) then + OnQuest5(NPC, Spawn, conversation) + else + OnQuest4(NPC, Spawn, conversation) + end + elseif HasQuest(Spawn, QUEST_4) then + OnQuest4(NPC, Spawn, conversation) + else + OnQuest3(NPC, Spawn, conversation) + end + elseif HasQuest(Spawn, QUEST_3) then + OnQuest3(NPC, Spawn, conversation) + else + OnQuest2(NPC, Spawn, conversation) + end + elseif HasQuest(Spawn, QUEST_2) then + OnQuest2(NPC, Spawn, conversation) + else + OnQuest1(NPC, Spawn, conversation) + end + elseif HasQuest(Spawn, QUEST_1) then + OnQuest1(NPC, Spawn, conversation) + else + if GetRace(Spawn) == DWARF then + WellHello(NPC, Spawn, conversation) + else + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/mav_boilfist/qey_village03/quest_mav_boilfist_notdwarf_78c7639c.mp3", "Sorry, I'm terribly busy right now. No time to chat.", "", 4035307086, 275588457, Spawn) + end + end +end + +function respawn(NPC) + spawn(NPC) +end + +------------------------------------------------------------------------------------------------------------------ +-- QUEST 1 +------------------------------------------------------------------------------------------------------------------ + +function WellHello(NPC, Spawn, conversation) + AddConversationOption(conversation, "Sort of, yes.", "New") + AddConversationOption(conversation, "No, I'm not new here.", "NotNew") + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/mav_boilfist/qey_village03/quests/mav_boilfist/mav_boilfist001.mp3", "", "", 634247011, 356522512, Spawn) + StartConversation(conversation, NPC, Spawn, "Well hello! New around here?") +end + +function New(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "Sure, I'm willing to learn.", "WillingToLearn") + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/mav_boilfist/qey_village03/quests/mav_boilfist/mav_boilfist002.mp3", "", "", 1318415576, 1321312216, Spawn) + StartConversation(conversation, NPC, Spawn, "Well I'm just the one to help you out, then! I can teach you all you need to know, what do you say?") +end + +function NotNew(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "I'm interested in doing work for you.", "WillingToLearn") + AddConversationOption(conversation, "I'm interested in more difficult work.", "MoreDifficultWork") + StartConversation(conversation, NPC, Spawn, "Well, you can still teach an old dwarf new tricks. I've got some work for ya, if you're interested. Or, I could point you to someone who might have work that's a bit harder, if you're into that sort of thing.") +end + +function MoreDifficultWork(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "I'll go do that.") + StartConversation(conversation, NPC, Spawn, "Thought you might be interested. My husband, Marv, is out in the Oakmyst Forest doing some foolish nonsense. He was supposed to be back earlier but I haven't seen him yet, that usually mean he's gotten himself into trouble. That also probably means he could use some help. If you could head into Oakmyst Forest and find him I would be thankful.") +end + +function WillingToLearn(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "What would you like me to do?", "LikeMeToDo") + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/mav_boilfist/qey_village03/quests/mav_boilfist/mav_boilfist005.mp3", "", "", 582378457, 4033004550, Spawn) + StartConversation(conversation, NPC, Spawn, "Great, I've been needing someone to help me out while my husband is out. Normally one of us can look after things here at the shop while the other goes out and gets things done. With him gone, I'm having trouble keeping things running, your help would be a great boom.") +end + +function LikeMeToDo(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "What do you need me to do?", "NeedMeToDo") + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/mav_boilfist/qey_village03/quests/mav_boilfist/mav_boilfist006.mp3", "", "", 3037335831, 4263929365, Spawn) + StartConversation(conversation, NPC, Spawn, "Well. There's some brew I've been makin'. It's fermenting right here actually. It should be done very soon, and based on the last batch I tried I think I've finally perfected the mix of ingredients. It's an old family recipe that I'd forgotten about. Now that I finally got the means, I dug the recipe up and have tried my hand at it. It's taken some work, but I think it's finally worthy.") +end + +function NeedMeToDo(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "What is the problem?", "WhatProblem") + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/mav_boilfist/qey_village03/quests/mav_boilfist/mav_boilfist007.mp3", "", "", 628335384, 693034307, Spawn) + StartConversation(conversation, NPC, Spawn, "Oh, Right. Sorry, I carry on sometimes about things that are important to me. I need you to collect the ingredients for my next batch. I had them delivered from all over and they're finally here, but there's a problem.") +end + +function WhatProblem(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "What are you going to have me do?", "HaveMeDo") + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/mav_boilfist/qey_village03/quests/mav_boilfist/mav_boilfist008.mp3", "", "", 666479766, 3144850595, Spawn) + StartConversation(conversation, NPC, Spawn, "The shipping company is behind on their orders. They've got all the goods but nobody to sort them or make the final deliveries. I know for a fact that my yeast has been there for at least two days. And I just got word my honey and frozen cherries are there as well. It's a mess, and that's where you come in.") +end + +function HaveMeDo(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "All right, give me the manifest.", "OfferQuest1") + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/mav_boilfist/qey_village03/quests/mav_boilfist/mav_boilfist009.mp3", "", "", 4269745166, 1619482599, Spawn) + StartConversation(conversation, NPC, Spawn, "I need you to gather up the ingredients for me. I managed to get ahold of an overflow manifest that details where my things are in storage. All you need to do is check the manifest, find out where you need to go, and then get my deliveries for me.") +end + +function OfferQuest1(NPC, Spawn) + FaceTarget(NPC, Spawn) + OfferQuest(NPC, Spawn, QUEST_1) +end + +function OnQuest1(NPC, Spawn, conversation) + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/mav_boilfist/qey_village03/quests/mav_boilfist/mav_boilfist011.mp3", "", "", 2167399134, 422468098, Spawn) + if (HasQuest(Spawn, QUEST_1) and GetQuestStep(Spawn, QUEST_1) == 4) or (HasCompletedQuest(Spawn, QUEST_1)) then + AddConversationOption(conversation, "Yes, I have.", "dlg_13_1") + else + AddConversationOption(conversation, "Not yet. Can I have another copy of the overflow manifest?", "NeedManifest") + end + AddConversationOption(conversation, "No, not yet.") + StartConversation(conversation, NPC, Spawn, "Have you gotten my ingredients yet?") +end + +function NeedManifest(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + -- Overflow Manifest + if HasItem(Spawn, 10268, 1) then + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/mav_boilfist/qey_village03/quests/mav_boilfist/mav_boilfist013.mp3", "", "", 2530141598, 2756437578, Spawn) + AddConversationOption(conversation, "All right, thanks.") + StartConversation(conversation, NPC, Spawn, "I'm pretty sure you already have a copy. It's probably in one of your bags somewhere. It may even be in the bank. Once you find it examine it to learn where all the shipments are.") + else + SummonItem(Spawn, 10268, 1) + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/mav_boilfist/qey_village03/quests/mav_boilfist/mav_boilfist012.mp3", "", "", 1236488816, 970364241, Spawn) + AddConversationOption(conversation, "Thanks.") + StartConversation(conversation, NPC, Spawn, "Sure, here you go.") + end +end + +function dlg_13_1(NPC, Spawn) + if HasQuest(Spawn, QUEST_1) then + SetStepComplete(Spawn, QUEST_1, 4) + end + + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/mav_boilfist/qey_village03/quests/mav_boilfist/mav_boilfist015.mp3", "", "", 3252688398, 2435234536, Spawn) + AddConversationOption(conversation, "That's great!", "dlg_13_2") + StartConversation(conversation, NPC, Spawn, "Ah, great. Now I can get started on my next batch. The last batch came out perfectly. I won't need to change the recipe at all, finally done.") +end + +------------------------------------------------------------------------------------------------------------------ +-- QUEST 2 +------------------------------------------------------------------------------------------------------------------ + +function dlg_13_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/mav_boilfist/qey_village03/quests/mav_boilfist/mav_boilfist016.mp3", "", "", 1896567087, 1236189087, Spawn) + AddConversationOption(conversation, "Sure, I can help.", "dlg_13_3") + StartConversation(conversation, NPC, Spawn, "Wonderfully great! I can't wait for everyone to try it. I've been telling everyone around here about my old family recipe, it's been so long since I first mentioned it that they probably think I made it up. If they do think that, it's time to prove them wrong! Listen, I still need to watch the store here, how would you like to help me?") +end + +function dlg_13_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/mav_boilfist/qey_village03/quests/mav_boilfist/mav_boilfist017.mp3", "", "", 1283812606, 3397187857, Spawn) + AddConversationOption(conversation, "I'll go do that.", "OfferQuest2") + StartConversation(conversation, NPC, Spawn, "Wonderful. Collect a jug of the brew from this barrel here, and then deliver it to a few of my friends, the ones I most want to try it. I'd like Gnor Farven and Gurna Hadel to have some, I've no doubt you can find them both at the tavern on the ground floor of the inn. I'd also like Dunda Frostgrip to have her share, you can find her outside the Scribe's shop on the western corner.") +end + +function OfferQuest2(NPC, Spawn) + FaceTarget(NPC, Spawn) + OfferQuest(NPC, Spawn, QUEST_2) +end + +function OnQuest2(NPC, Spawn, conversation) + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/mav_boilfist/qey_village03/quests/mav_boilfist/mav_boilfist018.mp3", "", "", 34397651, 703589536, Spawn) + if (HasQuest(Spawn, QUEST_2) and GetQuestStep(Spawn, QUEST_2) == 5) or (HasCompletedQuest(Spawn, QUEST_2)) then + AddConversationOption(conversation, "Yes, they did.", "dlg_20_1") + end + AddConversationOption(conversation, "No, not yet.") + StartConversation(conversation, NPC, Spawn, "Did everyone try my brew?") +end + +function dlg_20_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/mav_boilfist/qey_village03/quests/mav_boilfist/mav_boilfist019.mp3", "", "", 594170508, 523076668, Spawn) + AddConversationOption(conversation, "Well, Gurna and Gnor both loved it. It actually knocked Gnor down.", "dlg_20_2") + StartConversation(conversation, NPC, Spawn, "So, tell me, what did they think?") +end + +function dlg_20_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/mav_boilfist/qey_village03/quests/mav_boilfist/mav_boilfist020.mp3", "", "", 1002724009, 2022330670, Spawn) + AddConversationOption(conversation, "She said it was wonderful, but asked me not to tell you that.", "dlg_20_3") + StartConversation(conversation, NPC, Spawn, "Hah hah! What about Dunda though, what did she think?") +end + +function dlg_20_3(NPC, Spawn) + if HasQuest(Spawn, QUEST_2) then + SetStepComplete(Spawn, QUEST_2, 5) + end + + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/mav_boilfist/qey_village03/quests/mav_boilfist/mav_boilfist021.mp3", "", "", 1410633044, 1626937024, Spawn) + AddConversationOption(conversation, "What was the other good news?", "dlg_20_4") + StartConversation(conversation, NPC, Spawn, "Yes! I knew she would love it. She teased me mercilessly about this recipe, she must've thought I had made the whole thing up. Ooh I'm glad she liked it. Today is just filled with good news.") +end + +------------------------------------------------------------------------------------------------------------------ +-- QUEST 3 +------------------------------------------------------------------------------------------------------------------ + +function dlg_20_4(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/mav_boilfist/qey_village03/quests/mav_boilfist/mav_boilfist022.mp3", "", "", 153909004, 705302189, Spawn) + AddConversationOption(conversation, "Sure, I can do that.", "OfferQuest3") + StartConversation(conversation, NPC, Spawn, "A package from my cousin arrived! It has -- Oh dear, that package will get caught up in this silly state of delivery affairs. I'd like your help again, if you could go speak to the shipping coordinator on the docks and get him to give you my package before they drop it into some overflow spot that would be great. What do you say?") +end + +function OfferQuest3(NPC, Spawn) + FaceTarget(NPC, Spawn) + OfferQuest(NPC, Spawn, QUEST_3) +end + +function OnQuest3(NPC, Spawn, conversation) + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/mav_boilfist/qey_village03/quests/mav_boilfist/mav_boilfist024.mp3", "", "", 791126844, 977657821, Spawn) + if (HasQuest(Spawn, QUEST_3) and GetQuestStep(Spawn, QUEST_3) == 4) or (HasCompletedQuest(Spawn, QUEST_3)) then + AddConversationOption(conversation, "Yes, I do.", "dlg_30_1") + end + + if (HasQuest(Spawn, QUEST_3) and GetQuestStep(Spawn, QUEST_3) >= 3) or (HasCompletedQuest(Spawn, QUEST_3)) then + AddConversationOption(conversation, "Yes, but I have to clear it with the shipping coordinator first. I'll be back.") + else + AddConversationOption(conversation, "No, not yet.") + end + StartConversation(conversation, NPC, Spawn, "Do you have my package?") +end + +function dlg_30_1(NPC, Spawn) + if HasQuest(Spawn, QUEST_3) then + SetStepComplete(Spawn, QUEST_3, 4) + end + + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/mav_boilfist/qey_village03/quests/mav_boilfist/mav_boilfist025.mp3", "", "", 2520635779, 2527828241, Spawn) + AddConversationOption(conversation, "That is impressive!", "dlg_30_2") + AddConversationOption(conversation, "Kaladim?", "Kaladim") + StartConversation(conversation, NPC, Spawn, "Ah, let me open it. I hope it's--yes! This is the rock I've been waiting to get for a few months now. My cousin sent it to me, she said it's actual stone from Kaladim, can you imagine?") +end + +------------------------------------------------------------------------------------------------------------------ +-- QUEST 4 +------------------------------------------------------------------------------------------------------------------ + +function dlg_30_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/mav_boilfist/qey_village03/quests/mav_boilfist/mav_boilfist028.mp3", "", "", 903680612, 2544408116, Spawn) + AddConversationOption(conversation, "I have the time.", "dlg_30_3") + StartConversation(conversation, NPC, Spawn, "Yes it is. My dream is to visit Kaladim one day, as impossible as I know that may sound. Still, doesn't hurt to dream, and this rock just makes those dreams stronger. I have another favor to ask you, if you have the time.") +end + +function dlg_30_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/mav_boilfist/qey_village03/quests/mav_boilfist/mav_boilfist029.mp3", "", "", 1603379033, 880563668, Spawn) + AddConversationOption(conversation, "What shall I do once there?", "dlg_30_4") + StartConversation(conversation, NPC, Spawn, "There's a stone here in the Graystone Yard, a monument, they call the Stone of Kaladim. It is, quite simply, beautiful. It's easy to get lost in time just staring at that stone. Please, take this stone I just got and bring it to the Stone of Kaladim.") +end + +function dlg_30_4(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/mav_boilfist/qey_village03/quests/mav_boilfist/mav_boilfist029a.mp3", "", "", 90624630, 1461619549, Spawn) + AddConversationOption(conversation, "All right, I shall do that.", "OfferQuest4") + StartConversation(conversation, NPC, Spawn, "Once there hold my stone close to the Stone of Kaladim and concentrate. Watch for any sort of reaction in either stone. Then return to me and tell me everything that happened. Here, take the stone.") +end + +function Kaladim(NPC, Spawn) + Say(NPC, "Need collect, PM Scatman if you have it please.", Spawn) +end + +function OfferQuest4(NPC, Spawn) + FaceTarget(NPC, Spawn) + OfferQuest(NPC, Spawn, QUEST_4) +end + +function OnQuest4(NPC, Spawn, conversation) + if HasQuest(Spawn, QUEST_4) and GetQuestStep(Spawn, QUEST_4) == 1 then + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/mav_boilfist/qey_village03/quests/mav_boilfist/mav_boilfist029stone.mp3", "", "", 2776022988, 1249928251, Spawn) + AddConversationOption(conversation, "I need your stone.", "NeedStone") + AddConversationOption(conversation, "No, not yet.") + StartConversation(conversation, NPC, Spawn, "Have you taken my stone to the Stone of Kaladim yet?") + else + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/mav_boilfist/qey_village03/quests/mav_boilfist/mav_boilfist030.mp3", "", "", 4107694784, 255406273, Spawn) + AddConversationOption(conversation, "I think I felt what it may have been like back then.", "dlg_37_1") + AddConversationOption(conversation, "I am not sure. I haven't done it yet.") + StartConversation(conversation, NPC, Spawn, "Did anything happen?") + end +end + +function NeedStone(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + -- Mav's Stone + if HasItem(Spawn, 9384, 1) then + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/mav_boilfist/qey_village03/quests/mav_boilfist/mav_boilfist029stone_b.mp3", "", "", 1899188154, 2228034897, Spawn) + AddConversationOption(conversation, "Ok, I'll do that.") + StartConversation(conversation, NPC, Spawn, "I believe I already gave the stone to you. It may be in one of your bags or possibly even in the bank. Once you find it, examine it when you are near the Stone of Kaladim here in Graystone Yard.") + else + SummonItem(Spawn, 9384, 1) + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/mav_boilfist/qey_village03/quests/mav_boilfist/mav_boilfist029stone_a.mp3", "", "", 3817501989, 1608531398, Spawn) + AddConversationOption(conversation, "Thanks.") + StartConversation(conversation, NPC, Spawn, "Oh, yes, I'm sorry. Here you go.") + end +end + +function dlg_37_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/mav_boilfist/qey_village03/quests/mav_boilfist/mav_boilfist031.mp3", "", "", 276770020, 3522074989, Spawn) + AddConversationOption(conversation, "Just sounds and visions.", "dlg_37_2") + StartConversation(conversation, NPC, Spawn, "Oh? What does that mean?") +end + +function dlg_37_2(NPC, Spawn) + if HasQuest(Spawn, QUEST_4) then + SetStepComplete(Spawn, QUEST_4, 2) + end + + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/mav_boilfist/qey_village03/quests/mav_boilfist/mav_boilfist032.mp3", "", "", 4251668081, 2689030734, Spawn) + AddConversationOption(conversation, "I would be interested in that.", "dlg_37_3") + StartConversation(conversation, NPC, Spawn, "Oh, the spirit of Kaladim is strong in you. You know, my husband would love to meet you. Would you like to meet him?") +end + +------------------------------------------------------------------------------------------------------------------ +-- QUEST 5 +------------------------------------------------------------------------------------------------------------------ + +function dlg_37_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/mav_boilfist/qey_village03/quests/mav_boilfist/mav_boilfist033.mp3", "", "", 1106794113, 1262060028, Spawn) + AddConversationOption(conversation, "All right, I'll go find him.", "OfferQuest5") + StartConversation(conversation, NPC, Spawn, "I thought you might. He should be out in the Oakmyst Forest. He's very, very late so that means something has delayed him. It's probably got something to do with the slowness going on with the shipping company, he works for them from time to time. Or, maybe, he's just drunk. Do me a favor, if he's drunk, you can come back and get me. There are some jobs only a wife can do, am I right? Hah! ... oh yeah, his name is Marv. He'll be the one with the dumb look on his face, hah!") +end + +function OfferQuest5(NPC, Spawn) + FaceTarget(NPC, Spawn) + OfferQuest(NPC, Spawn, QUEST_5) +end + +function OnQuest5(NPC, Spawn, conversation) + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/mav_boilfist/qey_village03/quests/mav_boilfist/mav_boilfist034.mp3", "", "", 1752301139, 2700535036, Spawn) + if HasCompletedQuest(Spawn, QUEST_5) then + AddConversationOption(conversation, "Yup. You were right. He's tied up in the business with the slow-shipping.", "dlg_38_1") + end + AddConversationOption(conversation, "No, I haven't.") + StartConversation(conversation, NPC, Spawn, "Have ya found Marv yet?") +end + +function dlg_38_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/mav_boilfist/qey_village03/quests/mav_boilfist/mav_boilfist035.mp3", "", "", 1414810446, 65037912, Spawn) + AddConversationOption(conversation, "Perhaps.") + StartConversation(conversation, NPC, Spawn, "Ah that lucky nightblood. I'm sure he loves the time away from home.") +end \ No newline at end of file diff --git a/server/SpawnScripts/Graystone/McGuiggen.lua b/server/SpawnScripts/Graystone/McGuiggen.lua new file mode 100644 index 000000000..ff62f4e9c --- /dev/null +++ b/server/SpawnScripts/Graystone/McGuiggen.lua @@ -0,0 +1,43 @@ +--[[ + Script Name : SpawnScripts/Graystone/McGuiggen.lua + Script Purpose : McGuiggen + Script Author : Scatman + Script Date : 2009.09.05 + Script Notes : +--]] + +function spawn(NPC) + SetPlayerProximityFunction(NPC, 10, "InRange", "LeaveRange") +end + +function respawn(NPC) + spawn(NPC) +end + +function InRange(NPC, Spawn) + local chance = math.random(1, 100) + if chance <= 25 then + RandomTalk(NPC, Spawn) + end +end + +function LeaveRange(NPC, Spawn) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + RandomTalk(NPC, Spawn) +end + +function RandomTalk(NPC, Spawn) + local choice = math.random(1, 4) + if choice == 1 then + PlayFlavor(NPC, "voiceover/english/optional2/barbarian_eco_good_1/ft/service/merchant/barbarian_merchant_service_good_1_hail_gf_ae84abf9.mp3", "Go on, take a look at the stock. You'll never beat this price in the city. I guarantee it!", "wink", 1501437320, 1208713152, Spawn) + elseif choice == 2 then + PlayFlavor(NPC, "voiceover/english/optional2/barbarian_eco_good_1/ft/service/merchant/barbarian_merchant_service_good_1_hail_gf_24322c5d.mp3", "Greetings, friend traveler! We have the finest supplies to fill your adventuring needs.", "smile", 3015552699, 2771723491, Spawn) + elseif choice == 3 then + PlayFlavor(NPC, "voiceover/english/optional2/barbarian_eco_good_1/ft/service/merchant/barbarian_merchant_service_good_1_hail_gf_45d92a75.mp3", "Welcome! What can I help you with?", "bow", 2063097698, 2494171847, Spawn) + else + PlayFlavor(NPC, "voiceover/english/optional2/barbarian_eco_good_1/ft/service/merchant/barbarian_merchant_service_good_1_hail_gf_e4fa2bd8.mp3", "Confound it! Where did I put that ledger? It must be around here somewhere!", "confused", 2483059399, 3985999050, Spawn) + end +end diff --git a/server/SpawnScripts/Graystone/Oakfist.lua b/server/SpawnScripts/Graystone/Oakfist.lua new file mode 100644 index 000000000..00086376c --- /dev/null +++ b/server/SpawnScripts/Graystone/Oakfist.lua @@ -0,0 +1,43 @@ +--[[ + Script Name : SpawnScripts/Graystone/Oakfist.lua + Script Purpose : Oakfist + Script Author : John Adams/Scatman + Script Date : 2008.09.21 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +function spawn(NPC) + SetPlayerProximityFunction(NPC, 10, "RandomTalk", "LeaveRange") +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + RandomTalk(NPC, Spawn, false) +end + +function RandomTalk(NPC, Spawn, Option) + local choice = 0 + if Option == nil then + choice = math.random(1, 100) + end + + if choice < 25 then + FaceTarget(NPC, Spawn) + local choice = math.random(1, 4) + if choice == 1 then + PlayFlavor(NPC, "voiceover/english/dwarf_eco_good_1/ft/service/merchant/dwarf_merchant_service_good_1_hail_gm_e4fa2bd8.mp3", "Confound it! Where did I put that ledger? It must be around here somewhere!", "confused", 2160906698, 176729787, Spawn) + elseif choice == 2 then + PlayFlavor(NPC, "voiceover/english/dwarf_eco_good_1/ft/service/merchant/dwarf_merchant_service_good_1_hail_gm_ae84abf9.mp3", "Go on, take a look at the stock. You'll never beat this price in the city. I guarantee it!", "wink", 2230797709, 3854601007, Spawn) + elseif choice == 3 then + PlayFlavor(NPC, "voiceover/english/dwarf_eco_good_1/ft/service/merchant/dwarf_merchant_service_good_1_hail_gm_24322c5d.mp3", "Greetings, friend traveler! We have the finest supplies, right before ya, to fill your adventuring needs.", "smile", 2986424867, 2267649224, Spawn) + else + PlayFlavor(NPC, "voiceover/english/dwarf_eco_good_1/ft/service/merchant/dwarf_merchant_service_good_1_hail_gm_45d92a75.mp3", "Welcome! What is it I can help you with?", "bow", 3654607078, 2614139251, Spawn) + end + end +end + +function LeaveRange(NPC, Spawn) +end \ No newline at end of file diff --git a/server/SpawnScripts/Graystone/PathfinderSilentstride.lua b/server/SpawnScripts/Graystone/PathfinderSilentstride.lua new file mode 100644 index 000000000..fe529c589 --- /dev/null +++ b/server/SpawnScripts/Graystone/PathfinderSilentstride.lua @@ -0,0 +1,23 @@ +--[[ + Script Name : SpawnScripts/Graystone/PathfinderSilentstride.lua + Script Purpose : Pathfinder Silentstride + Script Author : John Adams + Script Date : 2008.09.21 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +function spawn(NPC) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/pathfinder_silentstride/qey_village03/pathfindersilenstride000.mp3", "", "", 3050887805, 230076738, Player, Spawn) + AddConversationOption(conversation, "Thanks for the warning.") + StartConversation(conversation, NPC, Spawn, "Greetings, adventurer. Be careful travling outside the city.The nearby wilderness is as unforgiving as the fates themselves.") +end \ No newline at end of file diff --git a/server/SpawnScripts/Graystone/Rafki.lua b/server/SpawnScripts/Graystone/Rafki.lua new file mode 100644 index 000000000..df8b71dce --- /dev/null +++ b/server/SpawnScripts/Graystone/Rafki.lua @@ -0,0 +1,40 @@ +--[[ + Script Name : SpawnScripts/Graystone/Rafki.lua + Script Purpose : Rafki + Script Author : John Adams/Scatman + Script Date : 2008.09.21 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +function spawn(NPC) + SetPlayerProximityFunction(NPC, 10, "RandomTalk") +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + RandomTalk(NPC, Spawn, false) +end + +function RandomTalk(NPC, Spawn, Option) + local choice = 0 + if Option == nil then + choice = math.random(1, 100) + end + + if choice < 25 then + FaceTarget(NPC, Spawn) + local choice = math.random(1, 4) + if choice == 1 then + PlayFlavor(NPC, "voiceover/english/kerran_eco_good_1/ft/service/baker/kerran_baker_service_good_1_hail_gm_3d1ca473.mp3", "Tell me, do you prefer Halfling or Elven cuisine? I myself have a hard time deciding between the two.", "confused", 2072407004, 4218937544, Spawn) + elseif choice == 2 then + PlayFlavor(NPC, "voiceover/english/kerran_eco_good_1/ft/service/baker/kerran_baker_service_good_1_hail_gm_1e9a743c.mp3", "Please mind the plates -- they're very hot.", "scold", 1421995902, 2311727303, Spawn) + elseif choice == 3 then + PlayFlavor(NPC, "voiceover/english/kerran_eco_good_1/ft/service/baker/kerran_baker_service_good_1_hail_gm_cca9cdef.mp3", "Welcome, friend, welcome. I hope you brought your appetite with you!", "wink", 3098407240, 2981751697, Spawn) + else + PlayFlavor(NPC, "voiceover/english/kerran_eco_good_1/ft/service/baker/kerran_baker_service_good_1_hail_gm_9db280de.mp3", "I love the smell of fresh bread in the oven!", "sigh", 513708176, 1743421619, Spawn) + end + end +end diff --git a/server/SpawnScripts/Graystone/ShippingCoordinatorHando.lua b/server/SpawnScripts/Graystone/ShippingCoordinatorHando.lua new file mode 100644 index 000000000..9f7939444 --- /dev/null +++ b/server/SpawnScripts/Graystone/ShippingCoordinatorHando.lua @@ -0,0 +1,262 @@ +--[[ + Script Name : SpawnScripts/Graystone/ShippingCoordinatorHando.lua + Script Purpose : Shipping Coordinator Hando + Script Author : Scatman + Script Date : 2009.10.05 + Script Notes : +--]] + +dofile("SpawnScripts/Generic/GenericVoiceOvers.lua") + +-- Quest ID's +local DWARF_MENTOR_QUEST_3 = 286 +local LATESHIPMENT = 290 +local INTHEDRINK = 291 + +-- Item ID's +local LOCATION_BUOYS = 9109 + +function spawn(NPC) + ProvidesQuest(NPC, INTHEDRINK) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + GenericHail(NPC, Spawn) + + if HasCompletedQuest(Spawn, LATESHIPMENT) then + if HasCompletedQuest(Spawn, INTHEDRINK) then + GreatJobOnBuoys(NPC, Spawn, conversation) + elseif HasQuest(Spawn, INTHEDRINK) then + if GetQuestStep(Spawn, INTHEDRINK) >= 1 and GetQuestStep(Spawn, INTHEDRINK) <= 3 then + DoesntLookAllConnectedYet(NPC, Spawn, conversation) + else + GreatJobOnBuoys(NPC, Spawn, conversation) + end + else + WhatDidMarusSay(NPC, Spawn, conversation) + end + elseif HasQuest(Spawn, LATESHIPMENT) then + if GetQuestStep(Spawn, LATESHIPMENT) == 3 then + BusyWithQuest(NPC, Spawn, conversation) + elseif GetQuestStep(Spawn, LATESHIPMENT) == 4 or GetQuestStep(Spawn, LATESHIPMENT) == 5 then + FindWhatYouNeeded(NPC, Spawn, conversation) + elseif GetQuestStep(Spawn, LATESHIPMENT) >= 6 then + WhatDidMarusSay(NPC, Spawn, conversation) + else + Say(NPC, "Kind of busy at the moment, sorry.", Spawn) + end + elseif HasQuest(Spawn, DWARF_MENTOR_QUEST_3) and GetQuestStep(Spawn, DWARF_MENTOR_QUEST_3) <= 3 then + OnDwarfMentorQuest3(NPC, Spawn, conversation) + else + Say(NPC, "Kind of busy at the moment, sorry.", Spawn) + end +end + +------------------------------------------------------------------------------------------------------------ +-- BARBARIAN MENTOR QUEST +------------------------------------------------------------------------------------------------------------ + +function BusyWithQuest(NPC, Spawn, conversation) + AddConversationOption(conversation, "I need to talk to you about a missing package for Burk Stoneshatter.", "dlg_16_1") + StartConversation(conversation, NPC, Spawn, "Listen, I'm sure sitting around chewing the fat with you is a great way to pass the time, but I'm busy here and can't be bothered with small talk.") +end + +function FindWhatYouNeeded(NPC, Spawn, conversation) + if GetQuestStep(Spawn, LATESHIPMENT) == 5 then + AddConversationOption(conversation, "No, it's not in the shipments on the dock.", "dlg_18_1") + end + + AddConversationOption(conversation, "I haven't looked yet.") + StartConversation(conversation, NPC, Spawn, "Did you find what you needed?") +end + +function dlg_16_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "Shipment GG4QC isn't listed on your overflow manifest, and it hasn't been delivered yet.", "dlg_16_2") + StartConversation(conversation, NPC, Spawn, "Burk, eh? What's he need?") +end + +function dlg_16_2(NPC, Spawn) + SetStepComplete(Spawn, LATESHIPMENT, 3) + + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "Thank you.") + StartConversation(conversation, NPC, Spawn, "Yeah, all new packages will be on the docks until we can move em. Go check the crates at the end of the docks and these here. I'm sure you'll find what you're looking for. Right now there are 13 crates and barrels on the docks to check in. Bring it to me once you've found it.") +end + +function dlg_18_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "The shipment number was GG4QC.", "dlg_18_2") + StartConversation(conversation, NPC, Spawn, "What shipment number was it again?") +end + +function dlg_18_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "I'm positive it wasn't on the docks.", "dlg_18_3") + StartConversation(conversation, NPC, Spawn, "Hmm. According to the charts that was unloaded but never sent into overflow... and never delivered. If it's not at the end of the docks then something is wrong.") +end + +function dlg_18_3(NPC, Spawn) + SetStepComplete(Spawn, LATESHIPMENT, 5) + + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "All right, I'll speak to him.") + StartConversation(conversation, NPC, Spawn, "I believe you. You're going to need to talk to the dock loader. You would never think it, looking at him, but he's got a great mind for remembering numbers. He'll tell you whether or not the packages were unloaded. His name is Marus Donoval, you can find him in the tavern, on the ground floor of the inn.") +end + +function WhatDidMarusSay(NPC, Spawn, conversation) + if (HasCompletedQuest(Spawn, LATESHIPMENT) and not HasCompletedQuest(Spawn, INTHEDRINK)) or (HasQuest(Spawn, LATESHIPMENT) and GetQuestStep(Spawn, LATESHIPMENT) == 7) then + AddConversationOption(conversation, "He said the shipment was off-loaded. He says it's possible it may have fallen in the water.", "dlg_21_1") + end + + AddConversationOption(conversation, "I haven't talked to him yet.") + StartConversation(conversation, NPC, Spawn, "What did Marus have to say?") +end + +function dlg_21_1(NPC, Spawn) + if HasQuest(Spawn, LATESHIPMENT) then + SetStepComplete(Spawn, LATESHIPMENT, 7) + end + + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "No...", "dlg_21_2") + AddConversationOption(conversation, "Yes, I am, actually. Sorry.") + StartConversation(conversation, NPC, Spawn, "It's starting to look that way, unfortunately. Listen, you aren't afraid of the water, are you?") +end + +------------------------------------------------------------------------------------------------ +-- QUEST 3 +------------------------------------------------------------------------------------------------ + +function dlg_21_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "Sure, I can do that.", "dlg_21_3") + AddConversationOption(conversation, "Not a chance.") + StartConversation(conversation, NPC, Spawn, "The shipment must be down there, somewhere. How would you like to help us retrieve it?") +end + +function dlg_21_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "All right!", "OfferQuest3") + StartConversation(conversation, NPC, Spawn, "Great! Here, take these location buoys. Swim down into the water and find the missing shipment crates, there were three of them. Attach a location buoy to each crate, then swim back here while we pull them out.") +end + +function OfferQuest3(NPC, Spawn) + FaceTarget(NPC, Spawn) + OfferQuest(NPC, Spawn, INTHEDRINK) +end + +function DoesntLookAllConnectedYet(NPC, Spawn, conversation) + AddConversationOption(conversation, "I need more location buoys.", "MoreBuoys") + StartConversation(conversation, NPC, Spawn, "It doesn't look like they're all connected yet, come back when that's done.") +end + +function MoreBuoys(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + -- Location Buoys + if HasItem(Spawn, LOCATION_BUOYS, 1) then + AddConversationOption(conversation, "All right.") + StartConversation(conversation, NPC, Spawn, "It looks like you've already got them. Check your bags, maybe even your bank.") + else + SummonItem(Spawn, LOCATION_BUOYS, 1) + AddConversationOption(conversation, "Thanks.") + StartConversation(conversation, NPC, Spawn, "Sure, here you go.") + end +end + +function GreatJobOnBuoys(NPC, Spawn, conversation) + if HasQuest(Spawn, INTHEDRINK) and GetQuestStep(Spawn, INTHEDRINK) == 4 then + AddConversationOption(conversation, "Thanks.", "dlg_25_1") + else + AddConversationOption(conversation, "Thanks.") + end + + StartConversation(conversation, NPC, Spawn, "Hey, great job with those buoys.") +end + +function dlg_25_1(NPC, Spawn) + SetStepComplete(Spawn, INTHEDRINK, 4) + + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "Great, thank you.", "dlg_25_2") + StartConversation(conversation, NPC, Spawn, "We've already pulled up the first package. Burk's shipment was inside. Here, you can take it to him.") +end + +function dlg_25_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "You're welcome.") + StartConversation(conversation, NPC, Spawn, "No, thank you. You've been very helpful. We're so backlogged around here we may have not known about the missing shipment for weeks. Some of the cargo was still ruined, but we saved a lot more than we would have been able to, thanks to you. I really appreciate it.") +end + +------------------------------------------------------------------------------------------------------------ +-- DWARF MENTOR QUEST +------------------------------------------------------------------------------------------------------------ + +function OnDwarfMentorQuest3(NPC, Spawn, conversation) + if GetQuestStep(Spawn, DWARF_MENTOR_QUEST_3) == 1 then + AddConversationOption(conversation, "I'm here to pick up a package for Mav Boilfist.", "dlg_22_1") + StartConversation(conversation, NPC, Spawn, "Interruption after interruption! What do you want?") + else + if GetQuestStep(Spawn, DWARF_MENTOR_QUEST_3) == 3 then + AddConversationOption(conversation, "Yes. It's right here.", "dlg_29_1") + end + AddConversationOption(conversation, "Not yet.") + StartConversation(conversation, NPC, Spawn, "Did you find it?") + end +end + +function dlg_22_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "It should have just arrived. It's a package from the Baubbleshire.", "dlg_22_2") + StartConversation(conversation, NPC, Spawn, "Arg! Her packages are backlogged already, what do you need?") +end + +function dlg_22_2(NPC, Spawn) + SetStepComplete(Spawn, DWARF_MENTOR_QUEST_3, 1) + + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "All right, thank you.") + StartConversation(conversation, NPC, Spawn, "Newly arrived packages are at the end of the dock. Go check there. Bring it to me if you find it.") +end + +function dlg_29_1(NPC, Spawn) + SetStepComplete(Spawn, DWARF_MENTOR_QUEST_3, 3) + + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "That is okay, and thank you.") + StartConversation(conversation, NPC, Spawn, "All right, this all seems to be in order. Sorry for snapping at you, it's been a busy week.") +end \ No newline at end of file diff --git a/server/SpawnScripts/Graystone/Snowboot.lua b/server/SpawnScripts/Graystone/Snowboot.lua new file mode 100644 index 000000000..444e91c99 --- /dev/null +++ b/server/SpawnScripts/Graystone/Snowboot.lua @@ -0,0 +1,23 @@ +--[[ + Script Name : SpawnScripts/Graystone/Snowboot.lua + Script Purpose : Snowboot + Script Author : John Adams + Script Date : 2008.09.21 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +function spawn(NPC) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/armorsmith_snowboot/qey_village03/armorsmithsnowboot.mp3", "", "", 3584987348, 1438770677, Spawn) + AddConversationOption(conversation, "Sorry to disturb you!") + StartConversation(conversation, NPC, Spawn, "Aye, what is it? I've got to be fitting this elven lass, and I haven't got all day! Come on, out with it!") +end \ No newline at end of file diff --git a/server/SpawnScripts/Graystone/Soulforge.lua b/server/SpawnScripts/Graystone/Soulforge.lua new file mode 100644 index 000000000..f83a776ba --- /dev/null +++ b/server/SpawnScripts/Graystone/Soulforge.lua @@ -0,0 +1,19 @@ +--[[ + Script Name : SpawnScripts/Graystone/Steelforge.lua + Script Purpose : Steelforge + Script Author : Scatman + Script Date : 2009.05.30 + Script Notes : +--]] + +function spawn(NPC) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + Say(NPC, "If steel is what you seek, traveler, then look no further.", Spawn) +end \ No newline at end of file diff --git a/server/SpawnScripts/Graystone/Steelvein.lua b/server/SpawnScripts/Graystone/Steelvein.lua new file mode 100644 index 000000000..029031488 --- /dev/null +++ b/server/SpawnScripts/Graystone/Steelvein.lua @@ -0,0 +1,38 @@ +--[[ + Script Name : SpawnScripts/Graystone/Steelvein.lua + Script Purpose : Steelvein + Script Author : John Adams + Script Date : 2008.09.21 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +function spawn(NPC) + +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + RandomTalk(NPC, Spawn, false) +end + +function RandomTalk(NPC, Spawn, Option) + local choice = 0 + if Option == nil then + choice = math.random(1, 100) + end + + if choice < 25 then + FaceTarget(NPC, Spawn) + local choice = math.random(1, 3) + if choice == 1 then + PlayFlavor(NPC, "voiceover/english/dwarf_eco_good_1/ft/service/merchant/dwarf_merchant_service_good_1_hail_gf_45d92a75.mp3", "Welcome! What is it I can help you with?", "bow", 578929529, 647853, Spawn) + elseif choice == 2 then + PlayFlavor(NPC, "voiceover/english/dwarf_eco_good_1/ft/service/merchant/dwarf_merchant_service_good_1_hail_gf_ae84abf9.mp3", "Go on, take a look at the stock. You'll never beat this price in the city. I guarantee it!", "wink", 2476632966, 344262300, Spawn) + else + PlayFlavor(NPC, "voiceover/english/dwarf_eco_good_1/ft/service/merchant/dwarf_merchant_service_good_1_hail_gf_24322c5d.mp3", "Greetings, friend traveler! We have the finest supplies to fill your adventuring needs.", "smile", 2158784304, 1517987989, Spawn) + end + end +end diff --git a/server/SpawnScripts/Graystone/TacklemasterMoyna.lua b/server/SpawnScripts/Graystone/TacklemasterMoyna.lua new file mode 100644 index 000000000..91d6718a6 --- /dev/null +++ b/server/SpawnScripts/Graystone/TacklemasterMoyna.lua @@ -0,0 +1,82 @@ +--[[ + Script Name : SpawnScripts/Graystone/TacklemasterMoyna.lua + Script Purpose : Tacklemaster Moyna + Script Author : Scatman + Script Date : 2008.09.19 + Script Notes : +--]] + +local QUEST_1 = 293 + +function spawn(NPC) + ProvidesQuest(NPC, QUEST_1) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + RandomVoice(NPC, Spawn) + + if HasQuest(Spawn, QUEST_1) and GetQuestStep(Spawn, QUEST_1) == 2 then + AddConversationOption(conversation, "I've returned with the bait you requested.", "ReturnedWithBait") + elseif not HasQuest(Spawn, QUEST_1) and not HasCompletedQuest(Spawn, QUEST_1) then + AddConversationOption(conversation, "I'm interested in finding a little work around here.", "FindingWork") + end + + PlayFlavor(NPC, "voiceover/english/tacklemaster_moyna/qey_village03/tacklemastermoyna.mp3", "", "", 2910658366, 1466320622, Spawn) + AddConversationOption(conversation, "No thanks, not today.") + StartConversation(conversation, NPC, Spawn, "Welcome to Graystone! With our Kerran population, the fish supply is never enough. If you're looking to fill that supply, you'll need some of my goods. Care to have a look?") +end + +function respawn(NPC) + spawn(NPC) +end + +function RandomVoice(NPC, Spawn) + local choice = math.random(1, 3) + if choice == 1 then + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_1_1001.mp3", "", "", 0, 0, Spawn) + elseif choice == 2 then + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_2_1001.mp3", "", "", 0, 0, Spawn) + else + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_3_1001.mp3", "", "", 0, 0, Spawn) + end +end + +----------------------------------------------------------------------------------------------------- +-- QUEST 1 +----------------------------------------------------------------------------------------------------- + +function FindingWork(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tacklemaster_moyna/qey_village03/tacklemastermoyna001.mp3", "", "", 530187050, 1736772086, Spawn) + AddConversationOption(conversation, "Provided the job actually pays, I'll do it.", "ProvidedItPays") + AddConversationOption(conversation, "No thanks, sounds icky.") + StartConversation(conversation, NPC, Spawn, "You're in luck. I need more bait. If you're interested, you could fetch me some centipede meat. Ubani and Brice catch all the fish from the pier, and I always need more bait.") +end + +function ProvidedItPays(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tacklemaster_moyna/qey_village03/tacklemastermoyna002.mp3", "", "", 3085757696, 757857128, Spawn) + AddConversationOption(conversation, "I'll be back when I've got what you need.", "OfferQuest1") + StartConversation(conversation, NPC, Spawn, "It'll pay but not too well. The bait business is decent next to the pier, but the stuff isn't exactly worth its weight in platinum, if you know what I mean. I need you to gather some centipede meat for me from the Forest Ruins.") +end + +function OfferQuest1(NPC, Spawn) + FaceTarget(NPC, Spawn) + OfferQuest(NPC, Spawn, QUEST_1) +end + +function ReturnedWithBait(NPC, Spawn) + SetStepComplete(Spawn, QUEST_1, 2) + + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "Thank you Moyna!") + StartConversation(conversation, NPC, Spawn, "Thank you! With this supply, I can keep my bait buckets filled for at least another day or two. Well done. Here's your reward as promised.") +end \ No newline at end of file diff --git a/server/SpawnScripts/Graystone/Takk.lua b/server/SpawnScripts/Graystone/Takk.lua new file mode 100644 index 000000000..37ab7f499 --- /dev/null +++ b/server/SpawnScripts/Graystone/Takk.lua @@ -0,0 +1,12 @@ +--[[ + Script Name : SpawnScripts/Graystone/Takk.lua + Script Purpose : Takk + Script Author : John Adams + Script Date : 2008.09.21 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + PlayFlavor(NPC, "", "This is a good spot for meditation, and for listening to the spirits speak.", "", 1689589577, 4560189, Spawn) +end \ No newline at end of file diff --git a/server/SpawnScripts/Graystone/Ubani.lua b/server/SpawnScripts/Graystone/Ubani.lua new file mode 100644 index 000000000..e31aa1f73 --- /dev/null +++ b/server/SpawnScripts/Graystone/Ubani.lua @@ -0,0 +1,20 @@ +--[[ + Script Name : SpawnScripts/GraystoneYard/Ubani.lua + Script Purpose : Ubani + Script Author : Jabantiz + Script Date : 2018.06.09 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +function spawn(NPC) + +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + PlayFlavor(NPC, "", "Nettleville has no fish, so I come here... but I've been fishing here all day with no luck! I wonder why that is?", "", 1689589577, 4560189, Spawn) +end + diff --git a/server/SpawnScripts/Graystone/WatcherCurmoglielKarthal.lua b/server/SpawnScripts/Graystone/WatcherCurmoglielKarthal.lua new file mode 100644 index 000000000..5858eadfd --- /dev/null +++ b/server/SpawnScripts/Graystone/WatcherCurmoglielKarthal.lua @@ -0,0 +1,20 @@ +--[[ + Script Name : SpawnScripts/Graystone/WatcherCurmoglielKarthal.lua + Script Author : Jabantiz + Script Date : 2018.06.09 08:06:20 + Script Purpose : + : +--]] + +function spawn(NPC) + +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) +end + +function respawn(NPC) + +end + diff --git a/server/SpawnScripts/Graystone/arat1.lua b/server/SpawnScripts/Graystone/arat1.lua new file mode 100644 index 000000000..78351cc1c --- /dev/null +++ b/server/SpawnScripts/Graystone/arat1.lua @@ -0,0 +1,51 @@ +--[[ + Script Name : SpawnScripts/Graystone/arat1.lua + Script Purpose : a rat + Script Author : Scatman + Script Date : 2009.05.30 + Script Notes : +--]] + +function spawn(NPC) + MovementLoopAddLocation(NPC, 851.84, -23.63, -147.35, 10, 0) + MovementLoopAddLocation(NPC, 854.74, -24.25, -152.51, 10, 0) + MovementLoopAddLocation(NPC, 867.88, -22.45, -152.76, 10, 0) + MovementLoopAddLocation(NPC, 877.81, -24.92, -152.7, 10, 0) + MovementLoopAddLocation(NPC, 902.18, -24.94, -152.43, 10, 0) + MovementLoopAddLocation(NPC, 926.53, -24.81, -157.48, 10, 0) + MovementLoopAddLocation(NPC, 938.33, -25.28, -155.26, 10, 0) + MovementLoopAddLocation(NPC, 958.71, -25.23, -157.01, 10, 0) + MovementLoopAddLocation(NPC, 908.11, -24.96, -149.41, 10, 0) + MovementLoopAddLocation(NPC, 901.11, -24.98, -140.98, 10, 0) + MovementLoopAddLocation(NPC, 896.26, -22.67, -138.23, 10, 0) + MovementLoopAddLocation(NPC, 894.8, -22.57, -134.95, 10, 0) + MovementLoopAddLocation(NPC, 898.25, -22.32, -118.58, 10, 0) + MovementLoopAddLocation(NPC, 899.61, -22.31, -115.71, 10, 0) + MovementLoopAddLocation(NPC, 900.78, -22.31, -114.47, 10, 0) + MovementLoopAddLocation(NPC, 902.31, -22.31, -115.1, 10, 0) + MovementLoopAddLocation(NPC, 902.69, -21.77, -115.88, 10, 0) + MovementLoopAddLocation(NPC, 904.79, -19.81, -120.12, 10, 0) + MovementLoopAddLocation(NPC, 911.44, -19.98, -117.44, 10, 0) + MovementLoopAddLocation(NPC, 918.57, -21.99, -114.49, 10, 0) + MovementLoopAddLocation(NPC, 926.63, -22.4, -114.88, 10, 0) + MovementLoopAddLocation(NPC, 927.8, -22.4, -109.95, 10, 0) + MovementLoopAddLocation(NPC, 918.07, -22.4, -112.21, 10, 0) + MovementLoopAddLocation(NPC, 891.52, -22.31, -106.56, 10, 0) + MovementLoopAddLocation(NPC, 886.05, -22.09, -98.77, 10, 0) + MovementLoopAddLocation(NPC, 879.57, -24.95, -100.37, 10, 0) + MovementLoopAddLocation(NPC, 852.49, -24.93, -106.04, 10, 0) + MovementLoopAddLocation(NPC, 847.36, -23.05, -107.78, 10, 0) + MovementLoopAddLocation(NPC, 844.42, -22.61, -114.58, 10, 0) + MovementLoopAddLocation(NPC, 838.19, -20.73, -114.14, 10, 0) + MovementLoopAddLocation(NPC, 821.16, -20.97, -117.75, 10, 0) + MovementLoopAddLocation(NPC, 839.54, -20.94, -128.94, 10, 0) + MovementLoopAddLocation(NPC, 840.92, -20.86, -142.81, 10, 0) + MovementLoopAddLocation(NPC, 846.25, -22.55, -147.46, 10, 0) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) +end \ No newline at end of file diff --git a/server/SpawnScripts/Graystone/arat2.lua b/server/SpawnScripts/Graystone/arat2.lua new file mode 100644 index 000000000..d9b6bdd57 --- /dev/null +++ b/server/SpawnScripts/Graystone/arat2.lua @@ -0,0 +1,43 @@ +--[[ + Script Name : SpawnScripts/Graystone/arat2.lua + Script Purpose : a rat + Script Author : Scatman + Script Date : 2009.05.30 + Script Notes : +--]] + +function spawn(NPC) + MovementLoopAddLocation(NPC, 838.9, -20.94, -128.54, 10, 0) + MovementLoopAddLocation(NPC, 832.97, -20.97, -123.02, 10, 0) + MovementLoopAddLocation(NPC, 836.77, -20.93, -114.48, 10, 0) + MovementLoopAddLocation(NPC, 845.27, -22.6, -114.46, 10, 0) + MovementLoopAddLocation(NPC, 845.59, -23.27, -108.35, 10, 0) + MovementLoopAddLocation(NPC, 853.13, -24.96, -105.98, 10, 0) + MovementLoopAddLocation(NPC, 878.94, -24.96, -100.83, 10, 0) + MovementLoopAddLocation(NPC, 886.81, -22.26, -99.01, 10, 0) + MovementLoopAddLocation(NPC, 894.37, -22.3, -107.7, 10, 0) + MovementLoopAddLocation(NPC, 896.61, -22.4, -105.39, 10, 0) + MovementLoopAddLocation(NPC, 892, -22.61, -88.72, 10, 0) + MovementLoopAddLocation(NPC, 899.3, -22.4, -84.33, 10, 0) + MovementLoopAddLocation(NPC, 895.67, -22.61, -97.41, 10, 0) + MovementLoopAddLocation(NPC, 900.95, -22.3, -112.46, 10, 0) + MovementLoopAddLocation(NPC, 894.14, -22.45, -129.32, 10, 0) + MovementLoopAddLocation(NPC, 894.41, -22.58, -136.36, 10, 0) + MovementLoopAddLocation(NPC, 901.64, -24.98, -141.93, 10, 0) + MovementLoopAddLocation(NPC, 905.65, -24.95, -146.85, 10, 0) + MovementLoopAddLocation(NPC, 893.38, -24.92, -152.98, 10, 0) + MovementLoopAddLocation(NPC, 881.49, -24.86, -150.12, 10, 0) + MovementLoopAddLocation(NPC, 866.23, -22.49, -152.28, 10, 0) + MovementLoopAddLocation(NPC, 854.64, -24.25, -152.47, 10, 0) + MovementLoopAddLocation(NPC, 853.7, -24.19, -147.92, 10, 0) + MovementLoopAddLocation(NPC, 847.94, -22.35, -147.01, 10, 0) + MovementLoopAddLocation(NPC, 844.83, -22.51, -143.63, 10, 0) + MovementLoopAddLocation(NPC, 836.61, -20.93, -139.23, 10, 0) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) +end \ No newline at end of file diff --git a/server/SpawnScripts/Graystone/brew_barrel.lua b/server/SpawnScripts/Graystone/brew_barrel.lua new file mode 100644 index 000000000..fe18ba6af --- /dev/null +++ b/server/SpawnScripts/Graystone/brew_barrel.lua @@ -0,0 +1,38 @@ +--[[ + Script Name : SpawnScripts/Graystone/brew_barrel.lua + Script Purpose : brew_barrel + Script Author : Scatman + Script Date : 2009.10.05 + Script Notes : +--]] + +-- Quest ID's +local DWARF_MENTOR_QUEST_2 = 285 + +-- Item ID's +local MAVS_BREW = 9383 + +function spawn(NPC) + SetRequiredQuest(NPC, DWARF_MENTOR_QUEST_2, 1) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) +end + +function casted_on(NPC, Spawn, SpellName) +Say(NPC, "HI") + if HasQuest(Spawn, DWARF_MENTOR_QUEST_2) and GetQuestStep(Spawn, DWARF_MENTOR_QUEST_2) == 1 and SpellName == "Collect brew" then + SetStepComplete(Spawn, DWARF_MENTOR_QUEST_2, 1) + + -- Mav's Brew + if not HasItem(Spawn, MAVS_BREW, 1) then + SummonItem(Spawn, MAVS_BREW, 1) + SummonItem(Spawn, MAVS_BREW, 1) + SummonItem(Spawn, MAVS_BREW, 1) + end + end +end \ No newline at end of file diff --git a/server/SpawnScripts/Graystone/crate_large_long_001.lua b/server/SpawnScripts/Graystone/crate_large_long_001.lua new file mode 100644 index 000000000..687425c09 --- /dev/null +++ b/server/SpawnScripts/Graystone/crate_large_long_001.lua @@ -0,0 +1,40 @@ +--[[ + Script Name : SpawnScripts/Graystone/crate_large_long001.lua + Script Purpose : crate_large_long001 + Script Author : Scatman + Script Date : 2009.10.05 + Script Notes : +--]] + +local BARBARIAN_MENTOR_QUEST_2 = 290 +local DWARF_MENTOR_QUEST_3 = 286 + +function spawn(NPC) + SetRequiredQuest(NPC, BARBARIAN_MENTOR_QUEST_2, 4) + SetRequiredQuest(NPC, DWARF_MENTOR_QUEST_3, 2) +end + +function hailed(NPC, Spawn) +end + +function respawn(NPC) + spawn(NPC) +end + +function casted_on(Target, Caster, SpellName) + if HasQuest(Caster, BARBARIAN_MENTOR_QUEST_2) and GetQuestStep(Caster, BARBARIAN_MENTOR_QUEST_2) == 4 and SpellName == "inspect" then + AddStepProgress(Caster, BARBARIAN_MENTOR_QUEST_2, 4, 1) + SendMessage(Caster, "This crate is not from shipment CG4QC.") + SendPopUpMessage(Caster, "This crate is not from shipment CG4QC.", 255, 255, 255) + SpawnSet(Target, "show_command_icon", 0) + AddTimer(Target, 60000, "ResetBarrel") + elseif HasQuest(Caster, DWARF_MENTOR_QUEST_3) and GetQuestStep(Caster, DWARF_MENTOR_QUEST_3) == 2 and SpellName == "inspect" then + conversation = CreateConversation() + AddConversationOption(conversation, "Stop inspecting.", "CloseConversation") + StartDialogConversation(conversation, 1, Target, Caster, "A quick search doesn't turn up any packages meant for Mav Boilfist, perhaps you should check some of the other crates and barrels.") + end +end + +function ResetBarrel(NPC) + SpawnSet(NPC, "show_command_icon", 1) +end \ No newline at end of file diff --git a/server/SpawnScripts/Graystone/dock_barrel_1.lua b/server/SpawnScripts/Graystone/dock_barrel_1.lua new file mode 100644 index 000000000..a9f7a3cd9 --- /dev/null +++ b/server/SpawnScripts/Graystone/dock_barrel_1.lua @@ -0,0 +1,40 @@ +--[[ + Script Name : SpawnScripts/Graystone/dock_barrel_1.lua + Script Purpose : dock_barrel_1 + Script Author : Scatman + Script Date : 2009.10.05 + Script Notes : +--]] + +local BARBARIAN_MENTOR_QUEST_2 = 290 +local DWARF_MENTOR_QUEST_3 = 286 + +function spawn(NPC) + SetRequiredQuest(NPC, BARBARIAN_MENTOR_QUEST_2, 4) + SetRequiredQuest(NPC, DWARF_MENTOR_QUEST_3, 2) +end + +function hailed(NPC, Spawn) +end + +function respawn(NPC) + spawn(NPC) +end + +function casted_on(Target, Caster, SpellName) + if HasQuest(Caster, BARBARIAN_MENTOR_QUEST_2) and GetQuestStep(Caster, BARBARIAN_MENTOR_QUEST_2) == 4 and SpellName == "inspect" then + AddStepProgress(Caster, BARBARIAN_MENTOR_QUEST_2, 4, 1) + SendMessage(Caster, "This crate is not from shipment CG4QC.") + SendPopUpMessage(Caster, "This crate is not from shipment CG4QC.", 255, 255, 255) + SpawnSet(Target, "show_command_icon", 0) + AddTimer(Target, 60000, "ResetBarrel") + elseif HasQuest(Caster, DWARF_MENTOR_QUEST_3) and GetQuestStep(Caster, DWARF_MENTOR_QUEST_3) == 2 and SpellName == "inspect" then + conversation = CreateConversation() + AddConversationOption(conversation, "Stop inspecting.", "CloseConversation") + StartDialogConversation(conversation, 1, Target, Caster, "A quick search doesn't turn up any packages meant for Mav Boilfist, perhaps you should check some of the other crates and barrels.") + end +end + +function ResetBarrel(NPC) + SpawnSet(NPC, "show_command_icon", 1) +end \ No newline at end of file diff --git a/server/SpawnScripts/Graystone/dock_barrel_correct.lua b/server/SpawnScripts/Graystone/dock_barrel_correct.lua new file mode 100644 index 000000000..c0d68ddab --- /dev/null +++ b/server/SpawnScripts/Graystone/dock_barrel_correct.lua @@ -0,0 +1,46 @@ +--[[ + Script Name : SpawnScripts/Graystone/dock_barrel_correct.lua + Script Purpose : dock_barrel_correct + Script Author : Scatman + Script Date : 2009.10.05 + Script Notes : +--]] + +local BARBARIAN_MENTOR_QUEST_2 = 290 +local DWARF_MENTOR_QUEST_3 = 286 + +function spawn(NPC) + SetRequiredQuest(NPC, DWARF_MENTOR_QUEST_3, 2) + SetRequiredQuest(NPC, BARBARIAN_MENTOR_QUEST_2, 4) +end + +function hailed(NPC, Spawn) +end + +function respawn(NPC) + spawn(NPC) +end + +function casted_on(Target, Caster, SpellName) + if HasQuest(Caster, BARBARIAN_MENTOR_QUEST_2) and GetQuestStep(Caster, BARBARIAN_MENTOR_QUEST_2) == 4 and SpellName == "inspect" then + AddStepProgress(Caster, BARBARIAN_MENTOR_QUEST_2, 4, 1) + SendMessage(Caster, "This crate is not from shipment CG4QC.") + SpawnSet(Target, "show_command_icon", 0) + AddTimer(Target, 30000, "ResetBarrel") + elseif HasQuest(Caster, DWARF_MENTOR_QUEST_3) and GetQuestStep(Caster, DWARF_MENTOR_QUEST_3) == 2 and SpellName == "inspect" then + conversation = CreateConversation() + AddConversationOption(conversation, "Pick up Mav's package.", "PickupMavsPackage") + StartDialogConversation(conversation, 1, Target, Caster, "There is a package for Mav Boilfist sitting just inside this barrel.") + end +end + +function PickupMavsPackage(NPC, Spawn) + SetStepComplete(Spawn, DWARF_MENTOR_QUEST_3, 2) + conversation = CreateConversation() + AddConversationOption(conversation, "Close barrel.", "CloseConversation") + StartDialogConversation(conversation, 1, NPC, Spawn, "You remove Mav's rather heavy package from the barrel. You'll need to clear this with the Shipping Coordinator before you can give it to Mav.") +end + +function ResetBarrel(NPC) + SpawnSet(NPC, "show_command_icon", 1) +end \ No newline at end of file diff --git a/server/SpawnScripts/Graystone/dock_crate_1.lua b/server/SpawnScripts/Graystone/dock_crate_1.lua new file mode 100644 index 000000000..b24c23f31 --- /dev/null +++ b/server/SpawnScripts/Graystone/dock_crate_1.lua @@ -0,0 +1,40 @@ +--[[ + Script Name : SpawnScripts/Graystone/dock_crate_1.lua + Script Purpose : dock_crate_1 + Script Author : Scatman + Script Date : 2009.10.05 + Script Notes : +--]] + +local BARBARIAN_MENTOR_QUEST_2 = 290 +local DWARF_MENTOR_QUEST_3 = 286 + +function spawn(NPC) + SetRequiredQuest(NPC, BARBARIAN_MENTOR_QUEST_2, 4) + SetRequiredQuest(NPC, DWARF_MENTOR_QUEST_3, 2) +end + +function hailed(NPC, Spawn) +end + +function respawn(NPC) + spawn(NPC) +end + +function casted_on(Target, Caster, SpellName) + if HasQuest(Caster, BARBARIAN_MENTOR_QUEST_2) and GetQuestStep(Caster, BARBARIAN_MENTOR_QUEST_2) == 4 and SpellName == "inspect" then + AddStepProgress(Caster, BARBARIAN_MENTOR_QUEST_2, 4, 1) + SendMessage(Caster, "This crate is not from shipment CG4QC.") + SendPopUpMessage(Caster, "This crate is not from shipment CG4QC.", 255, 255, 255) + SpawnSet(Target, "show_command_icon", 0) + AddTimer(Target, 60000, "ResetBarrel") + elseif HasQuest(Caster, DWARF_MENTOR_QUEST_3) and GetQuestStep(Caster, DWARF_MENTOR_QUEST_3) == 2 and SpellName == "inspect" then + conversation = CreateConversation() + AddConversationOption(conversation, "Stop inspecting.", "CloseConversation") + StartDialogConversation(conversation, 1, Target, Caster, "A quick search doesn't turn up any packages meant for Mav Boilfist, perhaps you should check some of the other crates and barrels.") + end +end + +function ResetBarrel(NPC) + SpawnSet(NPC, "show_command_icon", 1) +end \ No newline at end of file diff --git a/server/SpawnScripts/Graystone/frozen_cherries_1.lua b/server/SpawnScripts/Graystone/frozen_cherries_1.lua new file mode 100644 index 000000000..881311ee3 --- /dev/null +++ b/server/SpawnScripts/Graystone/frozen_cherries_1.lua @@ -0,0 +1,34 @@ +--[[ + Script Name : SpawnScripts/Graystone/frozen_cherries_1.lua + Script Purpose : frozen_cherries_1 + Script Author : Scatman + Script Date : 2009.10.05 + Script Notes : frozen_cherries_3 gives quest update +--]] + +local DWARF_MENTOR_QUEST_1 = 283 + +function spawn(NPC) + SetRequiredQuest(NPC, DWARF_MENTOR_QUEST_1, 1) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) +end + +function casted_on(NPC, Spawn, SpellName) + if HasQuest(Spawn, DWARF_MENTOR_QUEST_1) and not QuestStepIsComplete(Spawn, DWARF_MENTOR_QUEST_1, 1) and SpellName == "Search barrel" then + conversation = CreateConversation() + AddConversationOption(conversation, "Check for Frozen Cherries.", "CheckForCherries") + StartDialogConversation(conversation, 1, NPC, Spawn, "This is marked as being part of shipment #4QGCG.") + end +end + +function CheckForCherries(NPC, Spawn) + conversation = CreateConversation() + AddConversationOption(conversation, "Leave the shipment alone.", "CloseConversation") + StartDialogConversation(conversation, 1, NPC, Spawn, "There doesn't appaer to be any Frozen Cherries in this barrel, perhaps one of the others.") +end \ No newline at end of file diff --git a/server/SpawnScripts/Graystone/frozen_cherries_2.lua b/server/SpawnScripts/Graystone/frozen_cherries_2.lua new file mode 100644 index 000000000..579d1030b --- /dev/null +++ b/server/SpawnScripts/Graystone/frozen_cherries_2.lua @@ -0,0 +1,34 @@ +--[[ + Script Name : SpawnScripts/Graystone/frozen_cherries_2.lua + Script Purpose : frozen_cherries_3 + Script Author : Scatman + Script Date : 2009.10.05 + Script Notes : frozen_cherries_3 gives quest update +--]] + +local DWARF_MENTOR_QUEST_1 = 283 + +function spawn(NPC) + SetRequiredQuest(NPC, DWARF_MENTOR_QUEST_1, 1) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) +end + +function casted_on(NPC, Spawn, SpellName) + if HasQuest(Spawn, DWARF_MENTOR_QUEST_1) and not QuestStepIsComplete(Spawn, DWARF_MENTOR_QUEST_1, 1) and SpellName == "Search barrel" then + conversation = CreateConversation() + AddConversationOption(conversation, "Check for Frozen Cherries.", "CheckForCherries") + StartDialogConversation(conversation, 1, NPC, Spawn, "This is marked as being part of shipment #4QGCG.") + end +end + +function CheckForCherries(NPC, Spawn) + conversation = CreateConversation() + AddConversationOption(conversation, "Leave the shipment alone.", "CloseConversation") + StartDialogConversation(conversation, 1, NPC, Spawn, "There doesn't appaer to be any Frozen Cherries in this barrel, perhaps one of the others.") +end \ No newline at end of file diff --git a/server/SpawnScripts/Graystone/frozen_cherries_3.lua b/server/SpawnScripts/Graystone/frozen_cherries_3.lua new file mode 100644 index 000000000..80a0238fc --- /dev/null +++ b/server/SpawnScripts/Graystone/frozen_cherries_3.lua @@ -0,0 +1,34 @@ +--[[ + Script Name : SpawnScripts/Graystone/frozen_cherries_3.lua + Script Purpose : frozen_cherries_3 + Script Author : Scatman + Script Date : 2009.10.05 + Script Notes : frozen_cherries_3 gives quest update +--]] + +local DWARF_MENTOR_QUEST_1 = 283 + +function spawn(NPC) + SetRequiredQuest(NPC, DWARF_MENTOR_QUEST_1, 1) +end +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) +end + +function casted_on(NPC, Spawn, SpellName) + if HasQuest(Spawn, DWARF_MENTOR_QUEST_1) and not QuestStepIsComplete(Spawn, DWARF_MENTOR_QUEST_1, 1) and SpellName == "Search barrel" then + conversation = CreateConversation() + AddConversationOption(conversation, "Check for Frozen Cherries.", "CheckForCherries") + StartDialogConversation(conversation, 1, NPC, Spawn, "This is marked as being part of shipment #4QGCG.") + end +end + +function CheckForCherries(NPC, Spawn) + SetStepComplete(Spawn, DWARF_MENTOR_QUEST_1, 1) + conversation = CreateConversation() + AddConversationOption(conversation, "Leave the rest of the shipment.", "CloseConversation") + StartDialogConversation(conversation, 1, NPC, Spawn, "Under some old cheese and next to some spices there is a small container marked \"Frozen Cherries.\"") +end \ No newline at end of file diff --git a/server/SpawnScripts/Graystone/honey_1.lua b/server/SpawnScripts/Graystone/honey_1.lua new file mode 100644 index 000000000..14522b47a --- /dev/null +++ b/server/SpawnScripts/Graystone/honey_1.lua @@ -0,0 +1,34 @@ +--[[ + Script Name : SpawnScripts/Graystone/honey_1.lua + Script Purpose : honey_1 + Script Author : Scatman + Script Date : 2009.10.05 + Script Notes : +--]] + +local DWARF_MENTOR_QUEST_1 = 283 + +function spawn(NPC) + SetRequiredQuest(NPC, DWARF_MENTOR_QUEST_1, 3) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) +end + +function casted_on(NPC, Spawn, SpellName) + if HasQuest(Spawn, DWARF_MENTOR_QUEST_1) and not QuestStepIsComplete(Spawn, DWARF_MENTOR_QUEST_1, 3) and SpellName == "Search barrel" then + conversation = CreateConversation() + AddConversationOption(conversation, "Check for honey.", "CheckForHoney") + StartDialogConversation(conversation, 1, NPC, Spawn, "This is marked as being part of shipment #QGC4F.") + end +end + +function CheckForHoney(NPC, Spawn) + conversation = CreateConversation() + AddConversationOption(conversation, "Leave the shipment alone.", "CloseConversation") + StartDialogConversation(conversation, 1, NPC, Spawn, "There doesn't appear to be any honey in this barrel, perhaps one of the others.") +end \ No newline at end of file diff --git a/server/SpawnScripts/Graystone/honey_2.lua b/server/SpawnScripts/Graystone/honey_2.lua new file mode 100644 index 000000000..f4ddde762 --- /dev/null +++ b/server/SpawnScripts/Graystone/honey_2.lua @@ -0,0 +1,35 @@ +--[[ + Script Name : SpawnScripts/Graystone/honey_2.lua + Script Purpose : honey_2 + Script Author : Scatman + Script Date : 2009.10.05 + Script Notes : +--]] + +local DWARF_MENTOR_QUEST_1 = 283 + +function spawn(NPC) + SetRequiredQuest(NPC, DWARF_MENTOR_QUEST_1, 3) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) +end + +function casted_on(NPC, Spawn, SpellName) + if HasQuest(Spawn, DWARF_MENTOR_QUEST_1) and not QuestStepIsComplete(Spawn, DWARF_MENTOR_QUEST_1, 3) and SpellName == "Search barrel" then + conversation = CreateConversation() + AddConversationOption(conversation, "Check for honey.", "CheckForHoney") + StartDialogConversation(conversation, 1, NPC, Spawn, "This is marked as being part of shipment #QGC4F.") + end +end + +function CheckForHoney(NPC, Spawn) + SetStepComplete(Spawn, DWARF_MENTOR_QUEST_1, 3) + conversation = CreateConversation() + AddConversationOption(conversation, "Leave the rest of the shipment.", "CloseConversation") + StartDialogConversation(conversation, 1, NPC, Spawn, "Surrounded by coal and containers labeled \"gnomish misc.\" you find a jar clearly labeled \"Honey.\"") +end \ No newline at end of file diff --git a/server/SpawnScripts/Graystone/honey_3.lua b/server/SpawnScripts/Graystone/honey_3.lua new file mode 100644 index 000000000..a1e52cd63 --- /dev/null +++ b/server/SpawnScripts/Graystone/honey_3.lua @@ -0,0 +1,34 @@ +--[[ + Script Name : SpawnScripts/Graystone/honey_3.lua + Script Purpose : honey_3 + Script Author : Scatman + Script Date : 2009.10.05 + Script Notes : +--]] + +local DWARF_MENTOR_QUEST_1 = 283 + +function spawn(NPC) + SetRequiredQuest(NPC, DWARF_MENTOR_QUEST_1, 3) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) +end + +function casted_on(NPC, Spawn, SpellName) + if HasQuest(Spawn, DWARF_MENTOR_QUEST_1) and not QuestStepIsComplete(Spawn, DWARF_MENTOR_QUEST_1, 3) and SpellName == "Search barrel" then + conversation = CreateConversation() + AddConversationOption(conversation, "Check for honey.", "CheckForHoney") + StartDialogConversation(conversation, 1, NPC, Spawn, "This is marked as being part of shipment #QGC4F.") + end +end + +function CheckForHoney(NPC, Spawn) + conversation = CreateConversation() + AddConversationOption(conversation, "Leave the shipment alone.", "CloseConversation") + StartDialogConversation(conversation, 1, NPC, Spawn, "There doesn't appear to be any honey in this barrel, perhaps one of the others.") +end \ No newline at end of file diff --git a/server/SpawnScripts/Graystone/honey_4.lua b/server/SpawnScripts/Graystone/honey_4.lua new file mode 100644 index 000000000..1903e5e04 --- /dev/null +++ b/server/SpawnScripts/Graystone/honey_4.lua @@ -0,0 +1,34 @@ +--[[ + Script Name : SpawnScripts/Graystone/honey_4.lua + Script Purpose : honey_4 + Script Author : Scatman + Script Date : 2009.10.05 + Script Notes : +--]] + +local DWARF_MENTOR_QUEST_1 = 283 + +function spawn(NPC) + SetRequiredQuest(NPC, DWARF_MENTOR_QUEST_1, 3) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) +end + +function casted_on(NPC, Spawn, SpellName) + if HasQuest(Spawn, DWARF_MENTOR_QUEST_1) and not QuestStepIsComplete(Spawn, DWARF_MENTOR_QUEST_1, 3) and SpellName == "Search barrel" then + conversation = CreateConversation() + AddConversationOption(conversation, "Check for honey.", "CheckForHoney") + StartDialogConversation(conversation, 1, NPC, Spawn, "This is marked as being part of shipment #QGC4F.") + end +end + +function CheckForHoney(NPC, Spawn) + conversation = CreateConversation() + AddConversationOption(conversation, "Leave the shipment alone.", "CloseConversation") + StartDialogConversation(conversation, 1, NPC, Spawn, "There doesn't appear to be any honey in this barrel, perhaps one of the others.") +end \ No newline at end of file diff --git a/server/SpawnScripts/Graystone/qstunseenhandcrate1.lua b/server/SpawnScripts/Graystone/qstunseenhandcrate1.lua new file mode 100644 index 000000000..8a8ab0033 --- /dev/null +++ b/server/SpawnScripts/Graystone/qstunseenhandcrate1.lua @@ -0,0 +1,40 @@ +--[[ + Script Name : SpawnScripts/Graystone/qst_unseenhand_crate_1.lua + Script Purpose : qst_unseenhand_crate_1 + Script Author : Scatman + Script Date : 2009.10.05 + Script Notes : +--]] + +local BARBARIAN_MENTOR_QUEST_2 = 290 +local DWARF_MENTOR_QUEST_3 = 286 + +function spawn(NPC) + SetRequiredQuest(NPC, BARBARIAN_MENTOR_QUEST_2, 4) + SetRequiredQuest(NPC, DWARF_MENTOR_QUEST_3, 2) +end + +function hailed(NPC, Spawn) +end + +function respawn(NPC) + spawn(NPC) +end + +function casted_on(Target, Caster, SpellName) + if HasQuest(Caster, BARBARIAN_MENTOR_QUEST_2) and GetQuestStep(Caster, BARBARIAN_MENTOR_QUEST_2) == 4 and SpellName == "inspect" then + AddStepProgress(Caster, BARBARIAN_MENTOR_QUEST_2, 4, 1) + SendMessage(Caster, "This crate is not from shipment CG4QC.") + SendPopUpMessage(Caster, "This crate is not from shipment CG4QC.", 255, 255, 255) + SpawnSet(Target, "show_command_icon", 0) + AddTimer(Target, 60000, "ResetBarrel") + elseif HasQuest(Caster, DWARF_MENTOR_QUEST_3) and GetQuestStep(Caster, DWARF_MENTOR_QUEST_3) == 2 and SpellName == "inspect" then + conversation = CreateConversation() + AddConversationOption(conversation, "Stop inspecting.", "CloseConversation") + StartDialogConversation(conversation, 1, Target, Caster, "A quick search doesn't turn up any packages meant for Mav Boilfist, perhaps you should check some of the other crates and barrels.") + end +end + +function ResetBarrel(NPC) + SpawnSet(NPC, "show_command_icon", 1) +end \ No newline at end of file diff --git a/server/SpawnScripts/Graystone/qstunseenhandcrate2.lua b/server/SpawnScripts/Graystone/qstunseenhandcrate2.lua new file mode 100644 index 000000000..a7e2012eb --- /dev/null +++ b/server/SpawnScripts/Graystone/qstunseenhandcrate2.lua @@ -0,0 +1,40 @@ +--[[ + Script Name : SpawnScripts/Graystone/qst_unseenhand_crate_2.lua + Script Purpose : qst_unseenhand_crate_2 + Script Author : Scatman + Script Date : 2009.10.05 + Script Notes : +--]] + +local BARBARIAN_MENTOR_QUEST_2 = 290 +local DWARF_MENTOR_QUEST_3 = 286 + +function spawn(NPC) + SetRequiredQuest(NPC, BARBARIAN_MENTOR_QUEST_2, 4) + SetRequiredQuest(NPC, DWARF_MENTOR_QUEST_3, 2) +end + +function hailed(NPC, Spawn) +end + +function respawn(NPC) + spawn(NPC) +end + +function casted_on(Target, Caster, SpellName) + if HasQuest(Caster, BARBARIAN_MENTOR_QUEST_2) and GetQuestStep(Caster, BARBARIAN_MENTOR_QUEST_2) == 4 and SpellName == "inspect" then + AddStepProgress(Caster, BARBARIAN_MENTOR_QUEST_2, 4, 1) + SendMessage(Caster, "This crate is not from shipment CG4QC.") + SendPopUpMessage(Caster, "This crate is not from shipment CG4QC.", 255, 255, 255) + SpawnSet(Target, "show_command_icon", 0) + AddTimer(Target, 60000, "ResetBarrel") + elseif HasQuest(Caster, DWARF_MENTOR_QUEST_3) and GetQuestStep(Caster, DWARF_MENTOR_QUEST_3) == 2 and SpellName == "inspect" then + conversation = CreateConversation() + AddConversationOption(conversation, "Stop inspecting.", "CloseConversation") + StartDialogConversation(conversation, 1, Target, Caster, "A quick search doesn't turn up any packages meant for Mav Boilfist, perhaps you should check some of the other crates and barrels.") + end +end + +function ResetBarrel(NPC) + SpawnSet(NPC, "show_command_icon", 1) +end \ No newline at end of file diff --git a/server/SpawnScripts/Graystone/quest_shipment_1.lua b/server/SpawnScripts/Graystone/quest_shipment_1.lua new file mode 100644 index 000000000..c4184566b --- /dev/null +++ b/server/SpawnScripts/Graystone/quest_shipment_1.lua @@ -0,0 +1,45 @@ +--[[ + Script Name : SpawnScripts/Graystone/quest_shipment_1.lua + Script Purpose : quest_shipment_1 + Script Author : Scatman + Script Date : 2009.09.27 + Script Notes : +--]] + +-- Quest ID's +local BARBARIAN_MENTOR_QUEST_3 = 291 + +-- Item ID's +local LOCATION_BUOYS = 9109 + +function spawn(NPC) + SetRequiredQuest(NPC, BARBARIAN_MENTOR_QUEST_3, 1) +end + +function hailed(NPC, Spawn) +end + +function respawn(NPC) + spawn(NPC) +end + +function casted_on(Target, Caster, SpellName) + -- Location Buoys + if HasQuest(Caster, BARBARIAN_MENTOR_QUEST_3) and not QuestStepIsComplete(Caster, BARBARIAN_MENTOR_QUEST_3, 1) and HasItem(Caster, LOCATION_BUOYS) then + conversation = CreateConversation() + AddConversationOption(conversation, "Attach the location buoy to the create.", "AttachBuoy") + AddConversationOption(conversation, "Put the buoys away.", "CloseConversation") + StartDialogConversation(conversation, 1, Target, Caster, "The location buoys are ready to be attached to the crates, you just need to get close enough to attach them properly.") + end +end + +function AttachBuoy(NPC, Spawn) + conversation = CreateConversation() + AddConversationOption(conversation, "Put the buoys away.", "CloseConversation") + StartDialogConversation(conversation, 1, NPC, Spawn, "You fashion a buoy to the crate and let the flotation device float freely to the surface. The shipping coordinate and his men should now be able to locate this crate.") + + SetStepComplete(Spawn, BARBARIAN_MENTOR_QUEST_3, 1) + local Buoy = SpawnMob(GetZone(NPC), 2350166, false, 973.77, -26.085, -143.197) + SpawnSet(Buoy, "initial_state", "49156") + Despawn(Buoy, 120000) +end \ No newline at end of file diff --git a/server/SpawnScripts/Graystone/quest_shipment_2.lua b/server/SpawnScripts/Graystone/quest_shipment_2.lua new file mode 100644 index 000000000..9ded18816 --- /dev/null +++ b/server/SpawnScripts/Graystone/quest_shipment_2.lua @@ -0,0 +1,45 @@ +--[[ + Script Name : SpawnScripts/Graystone/quest_shipment_2.lua + Script Purpose : quest_shipment_2 + Script Author : Scatman + Script Date : 2009.09.27 + Script Notes : +--]] + +-- Quest ID's +local BARBARIAN_MENTOR_QUEST_3 = 291 + +-- Item ID's +local LOCATION_BUOYS = 9109 + +function spawn(NPC) + SetRequiredQuest(NPC, BARBARIAN_MENTOR_QUEST_3, 2) +end + +function hailed(NPC, Spawn) +end + +function respawn(NPC) + spawn(NPC) +end + +function casted_on(Target, Caster, SpellName) + -- Location Buoys + if HasQuest(Caster, BARBARIAN_MENTOR_QUEST_3) and not QuestStepIsComplete(Caster, BARBARIAN_MENTOR_QUEST_3, 2) and HasItem(Caster, LOCATION_BUOYS) then + conversation = CreateConversation() + AddConversationOption(conversation, "Attach the location buoy to the create.", "AttachBuoy") + AddConversationOption(conversation, "Put the buoys away.", "CloseConversation") + StartDialogConversation(conversation, 1, Target, Caster, "The location buoys are ready to be attached to the crates, you just need to get close enough to attach them properly.") + end +end + +function AttachBuoy(NPC, Spawn) + conversation = CreateConversation() + AddConversationOption(conversation, "Put the buoys away.", "CloseConversation") + StartDialogConversation(conversation, 1, NPC, Spawn, "You fashion a buoy to the crate and let the flotation device float freely to the surface. The shipping coordinate and his men should now be able to locate this crate.") + + SetStepComplete(Spawn, BARBARIAN_MENTOR_QUEST_3, 2) + local Buoy = SpawnMob(GetZone(NPC), 2350166, false, 973.62, -27.23, -157.60) + SpawnSet(Buoy, "initial_state", "49156") + Despawn(Buoy, 120000) +end \ No newline at end of file diff --git a/server/SpawnScripts/Graystone/quest_shipment_3.lua b/server/SpawnScripts/Graystone/quest_shipment_3.lua new file mode 100644 index 000000000..65b49206c --- /dev/null +++ b/server/SpawnScripts/Graystone/quest_shipment_3.lua @@ -0,0 +1,45 @@ +--[[ + Script Name : SpawnScripts/Graystone/quest_shipment_3.lua + Script Purpose : quest_shipment_3 + Script Author : Scatman + Script Date : 2009.09.27 + Script Notes : +--]] + +-- Quest ID's +local BARBARIAN_MENTOR_QUEST_3 = 291 + +-- Item ID's +local LOCATION_BUOYS = 9109 + +function spawn(NPC) + SetRequiredQuest(NPC, BARBARIAN_MENTOR_QUEST_3, 3) +end + +function hailed(NPC, Spawn) +end + +function respawn(NPC) + spawn(NPC) +end + +function casted_on(Target, Caster, SpellName) + -- Location Buoys + if HasQuest(Caster, BARBARIAN_MENTOR_QUEST_3) and not QuestStepIsComplete(Caster, BARBARIAN_MENTOR_QUEST_3, 3) and HasItem(Caster, LOCATION_BUOYS) then + conversation = CreateConversation() + AddConversationOption(conversation, "Attach the location buoy to the create.", "AttachBuoy") + AddConversationOption(conversation, "Put the buoys away.", "CloseConversation") + StartDialogConversation(conversation, 1, Target, Caster, "The location buoys are ready to be attached to the crates, you just need to get close enough to attach them properly.") + end +end + +function AttachBuoy(NPC, Spawn) + conversation = CreateConversation() + AddConversationOption(conversation, "Put the buoys away.", "CloseConversation") + StartDialogConversation(conversation, 1, NPC, Spawn, "You fashion a buoy to the crate and let the flotation device float freely to the surface. The shipping coordinate and his men should now be able to locate this crate.") + + SetStepComplete(Spawn, BARBARIAN_MENTOR_QUEST_3, 3) + local Buoy = SpawnMob(GetZone(NPC), 2350166, false, 953.05, -27.15, -148.67) + SpawnSet(Buoy, "initial_state", "49156") + Despawn(Buoy, 120000) +end \ No newline at end of file diff --git a/server/SpawnScripts/Graystone/yeast_1.lua b/server/SpawnScripts/Graystone/yeast_1.lua new file mode 100644 index 000000000..af930978f --- /dev/null +++ b/server/SpawnScripts/Graystone/yeast_1.lua @@ -0,0 +1,35 @@ +--[[ + Script Name : SpawnScripts/Graystone/yeast_1.lua + Script Purpose : yeast_1 + Script Author : Scatman + Script Date : 2009.10.05 + Script Notes : yeast_1 gives quest update +--]] + +local DWARF_MENTOR_QUEST_1 = 283 + +function spawn(NPC) + SetRequiredQuest(NPC, DWARF_MENTOR_QUEST_1, 2) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) +end + +function casted_on(NPC, Spawn, SpellName) + if HasQuest(Spawn, DWARF_MENTOR_QUEST_1) and not QuestStepIsComplete(Spawn, DWARF_MENTOR_QUEST_1, 2) and SpellName == "Search barrel" then + conversation = CreateConversation() + AddConversationOption(conversation, "Check for yeast.", "CheckForYeast") + StartDialogConversation(conversation, 1, NPC, Spawn, "This is marked as being part of shipment #2DF0F.") + end +end + +function CheckForYeast(NPC, Spawn) + SetStepComplete(Spawn, DWARF_MENTOR_QUEST_1, 2) + conversation = CreateConversation() + AddConversationOption(conversation, "Leave the rest of the shipment.", "CloseConversation") + StartDialogConversation(conversation, 1, NPC, Spawn, "Just under the lid there is a series of small, connected packets with a single label tag: \"Yeast.\"") +end \ No newline at end of file diff --git a/server/SpawnScripts/Graystone/yeast_2.lua b/server/SpawnScripts/Graystone/yeast_2.lua new file mode 100644 index 000000000..5da1b7290 --- /dev/null +++ b/server/SpawnScripts/Graystone/yeast_2.lua @@ -0,0 +1,34 @@ +--[[ + Script Name : SpawnScripts/Graystone/yeast_2.lua + Script Purpose : yeast_2 + Script Author : Scatman + Script Date : 2009.10.05 + Script Notes : yeast_1 gives quest update +--]] + +local DWARF_MENTOR_QUEST_1 = 283 + +function spawn(NPC) + SetRequiredQuest(NPC, DWARF_MENTOR_QUEST_1, 2) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) +end + +function casted_on(NPC, Spawn, SpellName) + if HasQuest(Spawn, DWARF_MENTOR_QUEST_1) and not QuestStepIsComplete(Spawn, DWARF_MENTOR_QUEST_1, 2) and SpellName == "Search barrel" then + conversation = CreateConversation() + AddConversationOption(conversation, "Check for yeast.", "CheckForYeast") + StartDialogConversation(conversation, 1, NPC, Spawn, "This is marked as being part of shipment #2DF0F.") + end +end + +function CheckForYeast(NPC, Spawn) + conversation = CreateConversation() + AddConversationOption(conversation, "Leave the shipment alone.", "CloseConversation") + StartDialogConversation(conversation, 1, NPC, Spawn, "There doesn't appear to be any yeast in this barrel, perhaps one of the others.") +end \ No newline at end of file diff --git a/server/SpawnScripts/Graystone/yeast_3.lua b/server/SpawnScripts/Graystone/yeast_3.lua new file mode 100644 index 000000000..15430e38c --- /dev/null +++ b/server/SpawnScripts/Graystone/yeast_3.lua @@ -0,0 +1,34 @@ +--[[ + Script Name : SpawnScripts/Graystone/yeast_3.lua + Script Purpose : yeast_3 + Script Author : Scatman + Script Date : 2009.10.05 + Script Notes : yeast_1 gives quest update +--]] + +local DWARF_MENTOR_QUEST_1 = 283 + +function spawn(NPC) + SetRequiredQuest(NPC, DWARF_MENTOR_QUEST_1, 2) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) +end + +function casted_on(NPC, Spawn, SpellName) + if HasQuest(Spawn, DWARF_MENTOR_QUEST_1) and not QuestStepIsComplete(Spawn, DWARF_MENTOR_QUEST_1, 2) and SpellName == "Search barrel" then + conversation = CreateConversation() + AddConversationOption(conversation, "Check for yeast.", "CheckForYeast") + StartDialogConversation(conversation, 1, NPC, Spawn, "This is marked as being part of shipment #2DF0F.") + end +end + +function CheckForYeast(NPC, Spawn) + conversation = CreateConversation() + AddConversationOption(conversation, "Leave the shipment alone.", "CloseConversation") + StartDialogConversation(conversation, 1, NPC, Spawn, "There doesn't appear to be any yeast in this barrel, perhaps one of the others.") +end \ No newline at end of file diff --git a/server/SpawnScripts/GreaterFaydark/AeliaNaeni.lua b/server/SpawnScripts/GreaterFaydark/AeliaNaeni.lua new file mode 100644 index 000000000..5d4b7a789 --- /dev/null +++ b/server/SpawnScripts/GreaterFaydark/AeliaNaeni.lua @@ -0,0 +1,32 @@ +--[[ + Script Name : SpawnScripts/GreaterFaydark/AeliaNaeni.lua + Script Purpose : Aelia Naeni + Script Author : John Adams + Script Date : 2009.03.01 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +function spawn(NPC) + SetPlayerProximityFunction(NPC, 10, "InRange", "LeaveRange") +end + +function respawn(NPC) + spawn(NPC) +end + +function InRange(NPC, Spawn) +end + +function LeaveRange(NPC, Spawn) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_1_1005.mp3", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "I understand. I'd like the card now, please.", "dlg_11_1") + AddConversationOption(conversation, "No thanks. I don't want the card.") + StartConversation(conversation, NPC, Spawn, "I've been authorized by the powers that be to grant you a lucky card. It's possessed with immense power, and will allow you to rethink some of your achievement choices, .. GetName(Spawn) .. . specifically those related to your class. Think of it like an ace up your sleeve! But be careful, it only has five charges, so use it wisely.") +end + diff --git a/server/SpawnScripts/GreaterFaydark/Agarighus.lua b/server/SpawnScripts/GreaterFaydark/Agarighus.lua new file mode 100644 index 000000000..4a74f6081 --- /dev/null +++ b/server/SpawnScripts/GreaterFaydark/Agarighus.lua @@ -0,0 +1,170 @@ +--[[ + Script Name : SpawnScripts/GreaterFaydark/Agarighus.lua + Script Purpose : Agarighus + Script Author : John Adams + Script Date : 2009.03.01 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +function spawn(NPC) + SetPlayerProximityFunction(NPC, 10, "InRange", "LeaveRange") +end + +function respawn(NPC) + spawn(NPC) +end + +function InRange(NPC, Spawn) +end + +function LeaveRange(NPC, Spawn) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/exp03_questvo2/agarighus/_exp03/exp03_rgn_greater_faydark/shroomba/agarighus/agarighus000_complete.mp3", "", "", 730615560, 3996925984, Spawn) + AddConversationOption(conversation, "I am XXXXXXXX. Morganellus said I should visit you.", "dlg_23_1") + StartConversation(conversation, NPC, Spawn, "You speak to Agarighus.") + if convo==25 then + PlayFlavor(NPC, "voiceover/english/exp03_questvo2/agarighus/_exp03/exp03_rgn_greater_faydark/shroomba/agarighus/agarighus009.mp3", "", "", 2714952017, 1027396530, Spawn) + AddConversationOption(conversation, "Yes, they have been moved.", "dlg_25_1") + StartConversation(conversation, NPC, Spawn, "Have you moved the shrumblers?") + end + + if convo==28 then + PlayFlavor(NPC, "voiceover/english/exp03_questvo2/agarighus/_exp03/exp03_rgn_greater_faydark/shroomba/agarighus/agarighus016.mp3", "", "", 1905129429, 4204811677, Spawn) + AddConversationOption(conversation, "Yes, I have.", "dlg_28_1") + StartConversation(conversation, NPC, Spawn, "Have you saved our proto-caplings?") + end + +end + +function dlg_23_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/exp03_questvo2/agarighus/_exp03/exp03_rgn_greater_faydark/shroomba/agarighus/agarighus001.mp3", "", "", 66949189, 2899163364, Spawn) + AddConversationOption(conversation, "Actually he didn't.", "dlg_23_2") + StartConversation(conversation, NPC, Spawn, "Ah, Morganellus, did he tell you to say hello to me?") +end + +function dlg_23_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/exp03_questvo2/agarighus/_exp03/exp03_rgn_greater_faydark/shroomba/agarighus/agarighus002_complete.mp3", "", "", 3839294235, 2098773049, Spawn) + AddConversationOption(conversation, "I suppose.", "dlg_23_3") + AddConversationOption(conversation, "I have to be going.") + StartConversation(conversation, NPC, Spawn, "Oh... always into practicality, that one.") +end + +function dlg_23_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/exp03_questvo2/agarighus/_exp03/exp03_rgn_greater_faydark/shroomba/agarighus/agarighus002.mp3", "", "", 2532533232, 2094215276, Spawn) + AddConversationOption(conversation, "What is it?", "dlg_23_4") + StartConversation(conversation, NPC, Spawn, "I am sad to say to you, .. GetName(Spawn) .. . that you have come to Dyer Mycoria at a bad time. The grobins--dark children of the heavens--have come to this place and tried to take it as their own. This chaos confuses us, and Dyer Mycoria may fall. I- oh, oh no!") +end + +function dlg_23_4(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/exp03_questvo2/agarighus/_exp03/exp03_rgn_greater_faydark/shroomba/agarighus/agarighus003.mp3", "", "", 3779153550, 4100680879, Spawn) + AddConversationOption(conversation, "What do you need?", "dlg_23_5") + StartConversation(conversation, NPC, Spawn, "I have forgotten my duties as a grove tender, but I must stay here. Child of the heavens, I need your help.") +end + +function dlg_23_5(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/exp03_questvo2/agarighus/_exp03/exp03_rgn_greater_faydark/shroomba/agarighus/agarighus004.mp3", "", "", 461489714, 806281340, Spawn) + AddConversationOption(conversation, "I can transport the shrumblers for you.", "dlg_23_6") + StartConversation(conversation, NPC, Spawn, "East of here are two cave paths to some of our germinariums. Though not malicious, the shrumblers in these caves, especially the younger ones, find their way into our germinariums and upset our mineral balance. This affects the growth process of our proto-caplings. Normally I spend some time taking these shrumblers from the germinariums and bringing them back to their natural area in the north eastern caves, but with the grobin presence I have forgotten my duties.") +end + +function dlg_23_6(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/exp03_questvo2/agarighus/_exp03/exp03_rgn_greater_faydark/shroomba/agarighus/agarighus005.mp3", "", "", 1864583073, 2525799582, Spawn) + AddConversationOption(conversation, "Okay.", "dlg_23_7") + StartConversation(conversation, NPC, Spawn, "Will you? I will give you my shrumbler net. Once you catch the Shrumblers, release them in the north-eastern area of these caves, they should recognize where they are and stay out of our germinariums, at least for a little while.") +end + +function dlg_23_7(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/exp03_questvo2/agarighus/_exp03/exp03_rgn_greater_faydark/shroomba/agarighus/agarighus006.mp3", "", "", 3926042365, 1419770262, Spawn) + AddConversationOption(conversation, "You are welcome.", "dlg_23_8") + StartConversation(conversation, NPC, Spawn, "Thank you, XXXXXXXX.") +end + +function dlg_25_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/exp03_questvo2/agarighus/_exp03/exp03_rgn_greater_faydark/shroomba/agarighus/agarighus010.mp3", "", "", 3194574992, 1484124224, Spawn) + AddConversationOption(conversation, "You are welcome.", "dlg_25_2") + StartConversation(conversation, NPC, Spawn, "The volatile spirit of the children of the heavens is most helpful at times. Thank you, XXXXXXXX.") +end + +function dlg_25_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/exp03_questvo2/agarighus/_exp03/exp03_rgn_greater_faydark/shroomba/agarighus/agarighus011.mp3", "", "", 2129516882, 4139121979, Spawn) + AddConversationOption(conversation, "Why can't you reach it?", "dlg_25_3") + StartConversation(conversation, NPC, Spawn, "It is a shame we can not reach our western germinarium.") +end + +function dlg_25_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/exp03_questvo2/agarighus/_exp03/exp03_rgn_greater_faydark/shroomba/agarighus/agarighus012.mp3", "", "", 2764843418, 2643187457, Spawn) + AddConversationOption(conversation, "Why don't you go in and rescue them?", "dlg_25_4") + StartConversation(conversation, NPC, Spawn, "There are grobins there. We do not know how to remove them. Our proto-caplings in that germinarium may be lost, sadly.") +end + +function dlg_25_4(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/exp03_questvo2/agarighus/_exp03/exp03_rgn_greater_faydark/shroomba/agarighus/agarighus013.mp3", "", "", 3170133892, 1263246865, Spawn) + AddConversationOption(conversation, "Why don't I go in and rescue them?", "dlg_25_5") + StartConversation(conversation, NPC, Spawn, "There are grobins in there!") +end + +function dlg_25_5(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/exp03_questvo2/agarighus/_exp03/exp03_rgn_greater_faydark/shroomba/agarighus/agarighus014.mp3", "", "", 2525042118, 2230039901, Spawn) + AddConversationOption(conversation, "I will go get them.", "dlg_25_6") + StartConversation(conversation, NPC, Spawn, "Is that possible? Perhaps... There is a small cave path to the west that leads to the germinarium. If you could bring our proto-caplings to safety there would be reason for much joy. They will be hard to spot to the eyes of a child of the heavens. They are merely the first signs of life from our spore seeders and will be very, very small.") +end + +function dlg_25_6(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/exp03_questvo2/agarighus/_exp03/exp03_rgn_greater_faydark/shroomba/agarighus/agarighus015.mp3", "", "", 2574699524, 1590689915, Spawn) + AddConversationOption(conversation, "I will return.", "dlg_25_7") + StartConversation(conversation, NPC, Spawn, "Again, .. GetName(Spawn) .. . you earn our thanks.") +end + +function dlg_28_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/exp03_questvo2/agarighus/_exp03/exp03_rgn_greater_faydark/shroomba/agarighus/agarighus017.mp3", "", "", 1366414831, 600906115, Spawn) + AddConversationOption(conversation, "Thank you. I am glad to help.", "dlg_28_2") + StartConversation(conversation, NPC, Spawn, "Oh, .. GetName(Spawn) .. . you do much for the Shroomba! We are ever-grateful. I have these. They are of little use to anyone in Dyer Mycoria, but other children like you insist on giving them to me from time to time.") +end + diff --git a/server/SpawnScripts/GreaterFaydark/AllikaatjaPiimarik.lua b/server/SpawnScripts/GreaterFaydark/AllikaatjaPiimarik.lua new file mode 100644 index 000000000..e4d6d0ded --- /dev/null +++ b/server/SpawnScripts/GreaterFaydark/AllikaatjaPiimarik.lua @@ -0,0 +1,28 @@ +--[[ + Script Name : SpawnScripts/GreaterFaydark/AllikaatjaPiimarik.lua + Script Purpose : Allikaatja Piimarik + Script Author : John Adams + Script Date : 2009.03.01 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +function spawn(NPC) + SetPlayerProximityFunction(NPC, 10, "InRange", "LeaveRange") +end + +function respawn(NPC) + spawn(NPC) +end + +function InRange(NPC, Spawn) +end + +function LeaveRange(NPC, Spawn) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + + PlayFlavor(NPC, "", "May your path be clear, friend.", "", 1689589577, 4560189, Spawn) +end + diff --git a/server/SpawnScripts/GreaterFaydark/AlmillaSumac.lua b/server/SpawnScripts/GreaterFaydark/AlmillaSumac.lua new file mode 100644 index 000000000..c5eb000d7 --- /dev/null +++ b/server/SpawnScripts/GreaterFaydark/AlmillaSumac.lua @@ -0,0 +1,42 @@ +--[[ + Script Name : SpawnScripts/GreaterFaydark/AlmillaSumac.lua + Script Purpose : Almilla Sumac + Script Author : John Adams + Script Date : 2009.03.01 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +function spawn(NPC) + SetPlayerProximityFunction(NPC, 10, "InRange", "LeaveRange") +end + +function respawn(NPC) + spawn(NPC) +end + +function InRange(NPC, Spawn) +end + +function LeaveRange(NPC, Spawn) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + + choice = math.random(1,5) + + if choice == 1 then + PlayFlavor(NPC, "", "Come on over! You won't find better deals elsewhere!", "beckon", 1689589577, 4560189, Spawn) + elseif choice == 2 then + PlayFlavor(NPC, "", "I'm sure we have something that will please even you!", "hello", 1689589577, 4560189, Spawn) + elseif choice == 3 then + PlayFlavor(NPC, "", "All right! I'll see what we have on the market now.", "thanks", 1689589577, 4560189, Spawn) + elseif choice == 4 then + PlayFlavor(NPC, "", "Let's check what's available, shall we?", "nod", 1689589577, 4560189, Spawn) + elseif choice == 5 then + PlayFlavor(NPC, "", "All right here's all the goods listed. If you find anything you want, let me know.", "", 1689589577, 4560189, Spawn) + else + end + +end + diff --git a/server/SpawnScripts/GreaterFaydark/AlodieSilverleaf.lua b/server/SpawnScripts/GreaterFaydark/AlodieSilverleaf.lua new file mode 100644 index 000000000..327f96511 --- /dev/null +++ b/server/SpawnScripts/GreaterFaydark/AlodieSilverleaf.lua @@ -0,0 +1,14 @@ +--[[ + Script Name : SpawnScripts/GreaterFaydark/AlodieSilverleaf.lua + Script Purpose : Alodie Silverleaf + Script Author : John Adams + Script Date : 2009.03.01 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + + PlayFlavor(NPC, "", "Well met, friend!", "", 1689589577, 4560189, Spawn) +end + diff --git a/server/SpawnScripts/GreaterFaydark/AltanBrownwing.lua b/server/SpawnScripts/GreaterFaydark/AltanBrownwing.lua new file mode 100644 index 000000000..6f8c23076 --- /dev/null +++ b/server/SpawnScripts/GreaterFaydark/AltanBrownwing.lua @@ -0,0 +1,42 @@ +--[[ + Script Name : SpawnScripts/GreaterFaydark/AltanBrownwing.lua + Script Purpose : Altan Brownwing + Script Author : John Adams + Script Date : 2009.03.01 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +function spawn(NPC) + SetPlayerProximityFunction(NPC, 10, "InRange", "LeaveRange") +end + +function respawn(NPC) + spawn(NPC) +end + +function InRange(NPC, Spawn) +end + +function LeaveRange(NPC, Spawn) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + + choice = math.random(1,5) + + if choice == 1 then + PlayFlavor(NPC, "", "There's nothing like a bowl of homemade vegetable stew!", "", 1689589577, 4560189, Spawn) + elseif choice == 2 then + PlayFlavor(NPC, "", "Go ahead and use my test kitchen, so long as you clean up after yourself.", "", 1689589577, 4560189, Spawn) + elseif choice == 3 then + PlayFlavor(NPC, "", "Mmm, mmm! Doesn't this smell like something that'll be good to eat?", "", 1689589577, 4560189, Spawn) + elseif choice == 4 then + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_1_1040.mp3", "", "", 0, 0, Spawn) + elseif choice == 5 then + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_3_1040.mp3", "", "", 0, 0, Spawn) + else + end + +end + diff --git a/server/SpawnScripts/GreaterFaydark/AmiAugren.lua b/server/SpawnScripts/GreaterFaydark/AmiAugren.lua new file mode 100644 index 000000000..b2fba19ee --- /dev/null +++ b/server/SpawnScripts/GreaterFaydark/AmiAugren.lua @@ -0,0 +1,231 @@ +--[[ + Script Name : SpawnScripts/GreaterFaydark/AmiAugren.lua + Script Purpose : Ami Augren + Script Author : John Adams + Script Date : 2009.02.05 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +function spawn(NPC) + SetPlayerProximityFunction(NPC, 10, "InRange", "LeaveRange") + ProvidesQuest(NPC, 1) +end + +function respawn(NPC) + spawn(NPC) +end + +function InRange(NPC, Spawn) + -- JA: I think there are random things she says when you are in proximity, or on a timer? + PlayFlavor(NPC, "voiceover/english/exp03_questvo2/ami_augren/_exp03/exp03_rgn_greater_faydark/quest/ami_augren_child_ami_callout_d5efb2d7.mp3", "WAAAAAaaaaaa!", "cry", 3923011773, 3719514479, Spawn) +end + +function LeaveRange(NPC, Spawn) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + + -- She'll say this hail response once you finish her quests + --PlayFlavor(NPC, "voiceover/english/exp03_questvo2/ami_augren/_exp03/exp03_rgn_greater_faydark/quest/ami_augren_child_completed_ca7e0b77.mp3", "Thank you for bringing my Dolly back!", "cheer", 2643704601, 749990179, Spawn) + + PlayFlavor(NPC, "voiceover/english/exp03_questvo2/ami_augren/_exp03/exp03_rgn_greater_faydark/ami_augren/ami_augren001.mp3", "", "", 12113457, 274345192, Spawn) + AddConversationOption(conversation, "Buzzies? Do you mean the bees? Do the bees scare you?", "dlg_6_1") + StartConversation(conversation, NPC, Spawn, "WAAAAaaaa! Go away, buzzies! Go away!") + if convo==8 then + PlayFlavor(NPC, "voiceover/english/exp03_questvo2/ami_augren/_exp03/exp03_rgn_greater_faydark/ami_augren/ami_augren006.mp3", "", "", 198532712, 1197028678, Spawn) + AddConversationOption(conversation, "Yes... I can tell.", "dlg_8_1") + StartConversation(conversation, NPC, Spawn, "Thank you. I don't like buzzies.") + end + + if convo==9 then + PlayFlavor(NPC, "voiceover/english/exp03_questvo2/ami_augren/_exp03/exp03_rgn_greater_faydark/ami_augren/ami_augren001.mp3", "", "", 12113457, 274345192, Spawn) + AddConversationOption(conversation, "Buzzies? Do you mean the bees? Do the bees scare you?", "dlg_9_1") + StartConversation(conversation, NPC, Spawn, "WAAAAaaaa! Go away, buzzies! Go away!") + end + + if convo==10 then + PlayFlavor(NPC, "voiceover/english/exp03_questvo2/ami_augren/_exp03/exp03_rgn_greater_faydark/ami_augren/ami_augren004.mp3", "", "", 3325418190, 161234706, Spawn) + AddConversationOption(conversation, "I made sure the bees won't be bothering anyone anymore.", "dlg_10_1") + AddConversationOption(conversation, "Not yet, but don't worry.") + StartConversation(conversation, NPC, Spawn, "Are the buzzies gone?") + end + + if convo==12 then + PlayFlavor(NPC, "voiceover/english/exp03_questvo2/ami_augren/_exp03/exp03_rgn_greater_faydark/ami_augren/ami_augren011.mp3", "", "", 735443449, 1189746741, Spawn) + AddConversationOption(conversation, "I got your doll back for you.", "dlg_12_1") + StartConversation(conversation, NPC, Spawn, "What's that you have?!") + end + + if convo==14 then + PlayFlavor(NPC, "voiceover/english/exp03_questvo2/ami_augren/_exp03/exp03_rgn_greater_faydark/ami_augren/ami_augren011.mp3", "", "", 735443449, 1189746741, Spawn) + AddConversationOption(conversation, "I got your doll back for you.", "dlg_14_1") + StartConversation(conversation, NPC, Spawn, "What's that you have?!") + end + +end + +function dlg_6_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/exp03_questvo2/ami_augren/_exp03/exp03_rgn_greater_faydark/ami_augren/ami_augren002.mp3", "", "", 3768392039, 1880249670, Spawn) + AddConversationOption(conversation, "I'll get rid of them for you.... just calm down.", "dlg_6_2") + AddConversationOption(conversation, "They are your problem, good luck.") + StartConversation(conversation, NPC, Spawn, "Yes, they make me cry! Please, make them go away! WAAAAAaaaaa!") +end + +function dlg_6_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/exp03_questvo2/ami_augren/_exp03/exp03_rgn_greater_faydark/ami_augren/ami_augren003.mp3", "", "", 240117721, 1491988690, Spawn) + AddConversationOption(conversation, "I'll take care of them.", "dlg_6_3") + StartConversation(conversation, NPC, Spawn, "They make owies! Don't let them pinch you!") +end + +function dlg_8_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/exp03_questvo2/ami_augren/_exp03/exp03_rgn_greater_faydark/ami_augren/ami_augren007.mp3", "", "", 2278432854, 2823393532, Spawn) + AddConversationOption(conversation, "Oh no... what now?", "dlg_8_2") + StartConversation(conversation, NPC, Spawn, "Oh no! I broke it! WAAAAAaaaaa!") +end + +function dlg_8_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/exp03_questvo2/ami_augren/_exp03/exp03_rgn_greater_faydark/ami_augren/ami_augren008.mp3", "", "", 392334320, 811829906, Spawn) + AddConversationOption(conversation, "Calm down, calm down. It's just a button.", "dlg_8_3") + StartConversation(conversation, NPC, Spawn, "My coat! The button came off! WAAAAaaaa!") +end + +function dlg_8_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/exp03_questvo2/ami_augren/_exp03/exp03_rgn_greater_faydark/ami_augren/ami_augren009.mp3", "", "", 4091874190, 3432128478, Spawn) + AddConversationOption(conversation, "Okay, just calm down.", "dlg_8_4") + AddConversationOption(conversation, "No way, you take it. Goodbye.") + StartConversation(conversation, NPC, Spawn, "Take the coat to my mommy. She can fix it!") +end + +function dlg_8_4(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/exp03_questvo2/ami_augren/_exp03/exp03_rgn_greater_faydark/ami_augren/ami_augren010.mp3", "", "", 3660711041, 3242516728, Spawn) + AddConversationOption(conversation, "I will.", "dlg_8_5") + StartConversation(conversation, NPC, Spawn, "Tell her I didn't mean to break it. ") +end + +function dlg_9_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/exp03_questvo2/ami_augren/_exp03/exp03_rgn_greater_faydark/ami_augren/ami_augren002.mp3", "", "", 3768392039, 1880249670, Spawn) + AddConversationOption(conversation, "I'll get rid of them for you.... just calm down.", "dlg_9_2") + AddConversationOption(conversation, "They are your problem, good luck.") + StartConversation(conversation, NPC, Spawn, "Yes, they make me cry! Please, make them go away! WAAAAAaaaaa!") +end + +function dlg_9_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/exp03_questvo2/ami_augren/_exp03/exp03_rgn_greater_faydark/ami_augren/ami_augren003.mp3", "", "", 240117721, 1491988690, Spawn) + AddConversationOption(conversation, "I'll take care of them.", "dlg_9_3") + StartConversation(conversation, NPC, Spawn, "They make owies! Don't let them pinch you!") +end + +function dlg_10_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/exp03_questvo2/ami_augren/_exp03/exp03_rgn_greater_faydark/ami_augren/ami_augren006.mp3", "", "", 198532712, 1197028678, Spawn) + AddConversationOption(conversation, "Yes... I can tell.", "dlg_10_2") + StartConversation(conversation, NPC, Spawn, "Thank you. I don't like buzzies.") +end + +function dlg_10_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/exp03_questvo2/ami_augren/_exp03/exp03_rgn_greater_faydark/ami_augren/ami_augren007.mp3", "", "", 2278432854, 2823393532, Spawn) + AddConversationOption(conversation, "Oh no... what now?", "dlg_10_3") + StartConversation(conversation, NPC, Spawn, "Oh no! I broke it! WAAAAAaaaaa!") +end + +function dlg_10_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/exp03_questvo2/ami_augren/_exp03/exp03_rgn_greater_faydark/ami_augren/ami_augren008.mp3", "", "", 392334320, 811829906, Spawn) + AddConversationOption(conversation, "Calm down, calm down. It's just a button.", "dlg_10_4") + StartConversation(conversation, NPC, Spawn, "My coat! The button came off! WAAAAaaaa!") +end + +function dlg_10_4(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/exp03_questvo2/ami_augren/_exp03/exp03_rgn_greater_faydark/ami_augren/ami_augren009.mp3", "", "", 4091874190, 3432128478, Spawn) + AddConversationOption(conversation, "Okay, just calm down.", "dlg_10_5") + AddConversationOption(conversation, "No way, you take it. Goodbye.") + StartConversation(conversation, NPC, Spawn, "Take the coat to my mommy. She can fix it!") +end + +function dlg_10_5(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/exp03_questvo2/ami_augren/_exp03/exp03_rgn_greater_faydark/ami_augren/ami_augren010.mp3", "", "", 3660711041, 3242516728, Spawn) + AddConversationOption(conversation, "I will.", "dlg_10_6") + StartConversation(conversation, NPC, Spawn, "Tell her I didn't mean to break it. ") +end + +function dlg_12_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/exp03_questvo2/ami_augren/_exp03/exp03_rgn_greater_faydark/ami_augren/ami_augren012.mp3", "", "", 645889165, 2057650400, Spawn) + AddConversationOption(conversation, "You are welcome, Ami. Now mind your mother.", "dlg_12_2") + StartConversation(conversation, NPC, Spawn, "Dolly! Dolly! You brought her back! Yay! Thanks!") +end + +function dlg_12_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/exp03_questvo2/ami_augren/_exp03/exp03_rgn_greater_faydark/ami_augren/ami_augren013.mp3", "", "", 349671317, 2037979122, Spawn) + AddConversationOption(conversation, "Have fun, Ami.", "dlg_12_3") + StartConversation(conversation, NPC, Spawn, "I will! I will! Look! Dolly's back! Hahahaha!") +end + +function dlg_14_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/exp03_questvo2/ami_augren/_exp03/exp03_rgn_greater_faydark/ami_augren/ami_augren012.mp3", "", "", 645889165, 2057650400, Spawn) + AddConversationOption(conversation, "You are welcome, Ami. Now mind your mother.", "dlg_14_2") + StartConversation(conversation, NPC, Spawn, "Dolly! Dolly! You brought her back! Yay! Thanks!") +end + +function dlg_14_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/exp03_questvo2/ami_augren/_exp03/exp03_rgn_greater_faydark/ami_augren/ami_augren013.mp3", "", "", 349671317, 2037979122, Spawn) + AddConversationOption(conversation, "Have fun, Ami.", "dlg_14_3") + StartConversation(conversation, NPC, Spawn, "I will! I will! Look! Dolly's back! Hahahaha!") +end + +--[[ raw_conversations + PlayFlavor(NPC, "voiceover/english/exp03_questvo2/ami_augren/_exp03/exp03_rgn_greater_faydark/quest/ami_augren_child_ami_callout_d5efb2d7.mp3", "WAAAAAaaaaaa!", "cry", 3923011773, 3719514479, Spawn) + PlayFlavor(NPC, "voiceover/english/exp03_questvo2/ami_augren/_exp03/exp03_rgn_greater_faydark/quest/ami_augren_child_completed_ca7e0b77.mp3", "Thank you for bringing my Dolly back!", "cheer", 2643704601, 749990179, Spawn) +--]] + diff --git a/server/SpawnScripts/GreaterFaydark/AmmaIlaari.lua b/server/SpawnScripts/GreaterFaydark/AmmaIlaari.lua new file mode 100644 index 000000000..cd8878a59 --- /dev/null +++ b/server/SpawnScripts/GreaterFaydark/AmmaIlaari.lua @@ -0,0 +1,28 @@ +--[[ + Script Name : SpawnScripts/GreaterFaydark/AmmaIlaari.lua + Script Purpose : Amma Ilaari + Script Author : John Adams + Script Date : 2009.03.01 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +function spawn(NPC) + SetPlayerProximityFunction(NPC, 10, "InRange", "LeaveRange") +end + +function respawn(NPC) + spawn(NPC) +end + +function InRange(NPC, Spawn) +end + +function LeaveRange(NPC, Spawn) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + + PlayFlavor(NPC, "", "Watch the wings, please. Thanks.", "", 1689589577, 4560189, Spawn) +end + diff --git a/server/SpawnScripts/GreaterFaydark/AmyRecolo.lua b/server/SpawnScripts/GreaterFaydark/AmyRecolo.lua new file mode 100644 index 000000000..c99a2ee7e --- /dev/null +++ b/server/SpawnScripts/GreaterFaydark/AmyRecolo.lua @@ -0,0 +1,28 @@ +--[[ + Script Name : SpawnScripts/GreaterFaydark/AmyRecolo.lua + Script Purpose : Amy Recolo + Script Author : John Adams + Script Date : 2009.03.01 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +function spawn(NPC) + SetPlayerProximityFunction(NPC, 10, "InRange", "LeaveRange") +end + +function respawn(NPC) + spawn(NPC) +end + +function InRange(NPC, Spawn) +end + +function LeaveRange(NPC, Spawn) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + + PlayFlavor(NPC, "", "I'm sorry, my services are only available to those more advanced in the arts.", "", 1689589577, 4560189, Spawn) +end + diff --git a/server/SpawnScripts/GreaterFaydark/AnaajGreenblade.lua b/server/SpawnScripts/GreaterFaydark/AnaajGreenblade.lua new file mode 100644 index 000000000..9d9c599c1 --- /dev/null +++ b/server/SpawnScripts/GreaterFaydark/AnaajGreenblade.lua @@ -0,0 +1,28 @@ +--[[ + Script Name : SpawnScripts/GreaterFaydark/AnaajGreenblade.lua + Script Purpose : Anaaj Greenblade + Script Author : John Adams + Script Date : 2009.03.01 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +function spawn(NPC) + SetPlayerProximityFunction(NPC, 10, "InRange", "LeaveRange") +end + +function respawn(NPC) + spawn(NPC) +end + +function InRange(NPC, Spawn) +end + +function LeaveRange(NPC, Spawn) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + + PlayFlavor(NPC, "", "The breezes are most refreshing here amongst the leaves.", "", 1689589577, 4560189, Spawn) +end + diff --git a/server/SpawnScripts/GreaterFaydark/AthinaePanteraas.lua b/server/SpawnScripts/GreaterFaydark/AthinaePanteraas.lua new file mode 100644 index 000000000..d94087b0e --- /dev/null +++ b/server/SpawnScripts/GreaterFaydark/AthinaePanteraas.lua @@ -0,0 +1,72 @@ +--[[ + Script Name : SpawnScripts/GreaterFaydark/AthinaePanteraas.lua + Script Purpose : Athinae Panteraas + Script Author : John Adams + Script Date : 2009.03.01 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +function spawn(NPC) + SetPlayerProximityFunction(NPC, 10, "InRange", "LeaveRange") +end + +function respawn(NPC) + spawn(NPC) +end + +function InRange(NPC, Spawn) +end + +function LeaveRange(NPC, Spawn) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/exp03_questvo/athinae_panteraas/_exp03/exp03_cty_kelethin/tutorials/banker_athinae/banker_athinae001.mp3", "", "", 2060518952, 3837644303, Spawn) + AddConversationOption(conversation, "Lyyti suggested I come speak with you.", "dlg_42_1") + AddConversationOption(conversation, "Nothing today, thanks.") + StartConversation(conversation, NPC, Spawn, "How can I help you today?") +end + +function dlg_42_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/exp03_questvo/athinae_panteraas/_exp03/exp03_cty_kelethin/tutorials/banker_athinae/banker_athinae002.mp3", "", "", 2898612991, 4167485514, Spawn) + AddConversationOption(conversation, "Do you remember much about Kelethin's past?", "dlg_42_2") + StartConversation(conversation, NPC, Spawn, "Ah, .. GetName(Spawn) .. . You're starting your Rite of Passage already? Why, I remember when your spirit bud was smaller than a wisp! Time flows swiftly these days, faster than in the Rings of old.") +end + +function dlg_42_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/exp03_questvo/athinae_panteraas/_exp03/exp03_cty_kelethin/tutorials/banker_athinae/banker_athinae003.mp3", "", "", 262079646, 2170522942, Spawn) + AddConversationOption(conversation, "I guess you chose the former! Er, right?", "dlg_42_3") + StartConversation(conversation, NPC, Spawn, "As much as I need to remember. Kelethin was made by the Feir'Dal -- the wood elves. Many of them left or otherwise dwindled away while our Fae spirits continued to grow. My own spirit reacted so strongly to being inside the bank when I started the Rite of Passage that I knew I was destined to be a banker. Or a bank robber!") +end + +function dlg_42_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/exp03_questvo/athinae_panteraas/_exp03/exp03_cty_kelethin/tutorials/banker_athinae/banker_athinae004.mp3", "", "", 72224709, 2528981910, Spawn) + AddConversationOption(conversation, "That's good to know!", "dlg_42_4") + StartConversation(conversation, NPC, Spawn, "Of course, .. GetName(Spawn) .. . All my memories are tied into financing, tracking the possessions folks place into or take out of their accounts. As a congratulations for beginning your Rite of Passage, we've prepared a banking slot for you. You can store items as well as coin safely here.") +end + +function dlg_42_4(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/exp03_questvo/athinae_panteraas/_exp03/exp03_cty_kelethin/tutorials/banker_athinae/banker_athinae005.mp3", "", "", 2118102052, 2064632205, Spawn) + AddConversationOption(conversation, "Thank you!", "dlg_42_5") + StartConversation(conversation, NPC, Spawn, "If you have questions about how banking works, talk to Trainer Kaali at Green Knoll. She's the one who taught me! Meanwhile, I need to tend to our customers' needs. Best wishes on beginning your journey, XXXXXXXX!") +end + +--[[ raw_conversations + PlayFlavor(NPC, "voiceover/english/exp03_questvo/athinae_panteraas/_exp03/exp03_cty_kelethin/merchants/banker_athinae_hail_776b2dc1.mp3", "Welcome to the Kelethin First Regional Bank!", "wave", 175096612, 245728640, Spawn) +--]] + diff --git a/server/SpawnScripts/GreaterFaydark/BarkChiselchin.lua b/server/SpawnScripts/GreaterFaydark/BarkChiselchin.lua new file mode 100644 index 000000000..10de09173 --- /dev/null +++ b/server/SpawnScripts/GreaterFaydark/BarkChiselchin.lua @@ -0,0 +1,59 @@ +--[[ + Script Name : SpawnScripts/GreaterFaydark/BarkChiselchin.lua + Script Purpose : Bark Chiselchin + Script Author : John Adams + Script Date : 2009.03.01 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +function spawn(NPC) + SetPlayerProximityFunction(NPC, 10, "InRange", "LeaveRange") +end + +function respawn(NPC) + spawn(NPC) +end + +function InRange(NPC, Spawn) +end + +function LeaveRange(NPC, Spawn) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_2_1004.mp3", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Excuse me?", "dlg_27_1") + AddConversationOption(conversation, "I don't need to speak with you.") + StartConversation(conversation, NPC, Spawn, "Your form needs improvement! Keep your back straight!") +end + +function dlg_27_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Should I know anything more?", "dlg_27_2") + StartConversation(conversation, NPC, Spawn, "It's all in the posture. Always be ready, that's the path to self-defense! You have to be ready to sway like the wind, to flow like water and to bite like an angry fly. That's the art of self-defense!") +end + +function dlg_27_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Got it.", "dlg_27_3") + StartConversation(conversation, NPC, Spawn, "You should learn all your life, kid. Otherwise, life isn't worth living. That's the whole truth of self-defense. You want to last longer than your opponent. Self-defense isn't something that can be taught, but it can be learned. Got it?") +end + +function dlg_27_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Will do.", "dlg_27_4") + StartConversation(conversation, NPC, Spawn, "If you're ever jumped again, it's your own fault. Keep your shoulders back, your ears clean and your head high. Now off with you! Back to Lady Katri, I've business to attend to.") +end + diff --git a/server/SpawnScripts/GreaterFaydark/BettinaMeriaan.lua b/server/SpawnScripts/GreaterFaydark/BettinaMeriaan.lua new file mode 100644 index 000000000..ec435195c --- /dev/null +++ b/server/SpawnScripts/GreaterFaydark/BettinaMeriaan.lua @@ -0,0 +1,36 @@ +--[[ + Script Name : SpawnScripts/GreaterFaydark/BettinaMeriaan.lua + Script Purpose : Bettina Meriaan + Script Author : John Adams + Script Date : 2009.03.01 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +function spawn(NPC) + SetPlayerProximityFunction(NPC, 10, "InRange", "LeaveRange") +end + +function respawn(NPC) + spawn(NPC) +end + +function InRange(NPC, Spawn) +end + +function LeaveRange(NPC, Spawn) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + + choice = math.random(1,2) + + if choice == 1 then + PlayFlavor(NPC, "", "I absolutely LOVE my job!", "", 1689589577, 4560189, Spawn) + elseif choice == 2 then + PlayFlavor(NPC, "", "Whoops! I think you've got my backpack confused with your own. That's okay, I've made that mistake sometimes too!", "", 1689589577, 4560189, Spawn) + else + end + +end + diff --git a/server/SpawnScripts/GreaterFaydark/BlinikBelestro.lua b/server/SpawnScripts/GreaterFaydark/BlinikBelestro.lua new file mode 100644 index 000000000..4f6ac1b76 --- /dev/null +++ b/server/SpawnScripts/GreaterFaydark/BlinikBelestro.lua @@ -0,0 +1,28 @@ +--[[ + Script Name : SpawnScripts/GreaterFaydark/BlinikBelestro.lua + Script Purpose : Blinik Belestro + Script Author : John Adams + Script Date : 2009.03.01 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +function spawn(NPC) + SetPlayerProximityFunction(NPC, 10, "InRange", "LeaveRange") +end + +function respawn(NPC) + spawn(NPC) +end + +function InRange(NPC, Spawn) +end + +function LeaveRange(NPC, Spawn) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + + PlayFlavor(NPC, "voiceover/english/exp03_questvo2/blinik_belestro/_exp03/exp03_rgn_greater_faydark/quest/scp/part_three/blinik_notonquest_386a8700.mp3", "Hello, hello! Very very busy! Sorry!", "", 3994544341, 1209952897, Spawn) +end + diff --git a/server/SpawnScripts/GreaterFaydark/Breezebloom.lua b/server/SpawnScripts/GreaterFaydark/Breezebloom.lua new file mode 100644 index 000000000..5a224806a --- /dev/null +++ b/server/SpawnScripts/GreaterFaydark/Breezebloom.lua @@ -0,0 +1,38 @@ +--[[ + Script Name : SpawnScripts/GreaterFaydark/Breezebloom.lua + Script Purpose : Breezebloom + Script Author : John Adams + Script Date : 2009.02.05 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +function spawn(NPC) + SetPlayerProximityFunction(NPC, 10, "InRange", "LeaveRange") +end + +function respawn(NPC) + spawn(NPC) +end + +function InRange(NPC, Spawn) +end + +function LeaveRange(NPC, Spawn) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + + choice = math.random(1,3) + + if choice == 1 then + PlayFlavor(NPC, "voiceover/english/exp03_questvo2/merchant_breezebloom/_exp03/exp03_rgn_greater_faydark/quest/nursery_merchant_breezebloom_hello_17d90830.mp3", "My job is to meet the equipment needs of the newly awakened fae.", "hello", 3333178819, 1069024420, Spawn) + elseif choice == 2 then + PlayFlavor(NPC, "voiceover/english/exp03_questvo2/merchant_breezebloom/_exp03/exp03_rgn_greater_faydark/quest/nursery_merchant_breezebloom_hello_5fd9bd08.mp3", "The concept of money is still pretty new to us, but I think we've adapted well.", "converse_female01", 2155291729, 1651860929, Spawn) + elseif choice == 3 then + PlayFlavor(NPC, "voiceover/english/exp03_questvo2/merchant_breezebloom/_exp03/exp03_rgn_greater_faydark/quest/nursery_merchant_breezebloom_hello_f290d965.mp3", "One fae's trash is another fae's treasure, that's what I always say!", "smile", 2307932947, 1948449842, Spawn) + else + end + +end + diff --git a/server/SpawnScripts/GreaterFaydark/BresiyaTuuri.lua b/server/SpawnScripts/GreaterFaydark/BresiyaTuuri.lua new file mode 100644 index 000000000..30690b80e --- /dev/null +++ b/server/SpawnScripts/GreaterFaydark/BresiyaTuuri.lua @@ -0,0 +1,28 @@ +--[[ + Script Name : SpawnScripts/GreaterFaydark/BresiyaTuuri.lua + Script Purpose : Bresiya Tuuri + Script Author : John Adams + Script Date : 2009.03.01 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +function spawn(NPC) + SetPlayerProximityFunction(NPC, 10, "InRange", "LeaveRange") +end + +function respawn(NPC) + spawn(NPC) +end + +function InRange(NPC, Spawn) +end + +function LeaveRange(NPC, Spawn) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + + PlayFlavor(NPC, "", "Don't let your illusions be shattered!", "", 1689589577, 4560189, Spawn) +end + diff --git a/server/SpawnScripts/GreaterFaydark/BrinkTrudger.lua b/server/SpawnScripts/GreaterFaydark/BrinkTrudger.lua new file mode 100644 index 000000000..cd1ca0e92 --- /dev/null +++ b/server/SpawnScripts/GreaterFaydark/BrinkTrudger.lua @@ -0,0 +1,244 @@ +--[[ + Script Name : SpawnScripts/GreaterFaydark/BrinkTrudger.lua + Script Purpose : Brink Trudger + Script Author : John Adams + Script Date : 2009.02.05 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +function spawn(NPC) + SetPlayerProximityFunction(NPC, 10, "InRange", "LeaveRange") + ProvidesQuest(NPC, 1) +end + +function respawn(NPC) + spawn(NPC) +end + +function InRange(NPC, Spawn) +end + +function LeaveRange(NPC, Spawn) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + -- says this until you are level 5 + PlayFlavor(NPC, "voiceover/english/exp03_questvo2/brink_trudger/_exp03/exp03_rgn_greater_faydark/quest/brink_trudger_low_level_c046f9f.mp3", "Hello, youngin'! Check back with me when you have a bit more experience under your belt. I may have some work for you then!", "", 1587078746, 1916787035, Spawn) + + --PlayFlavor(NPC, "voiceover/english/exp03_questvo2/brink_trudger/_exp03/exp03_rgn_greater_faydark/brink_trudger/brink_trudger013.mp3", "", "", 4292702593, 57983242, Spawn) + --AddConversationOption(conversation, "Yes, I have them right here.", "dlg_3_1") + --AddConversationOption(conversation, "Not yet, but I'm working on it.") + --StartConversation(conversation, NPC, Spawn, "Hello there, " .. GetName(Spawn) .. ". Any luck getting those shells from the beach?") + if convo==5 then + PlayFlavor(NPC, "voiceover/english/exp03_questvo2/brink_trudger/_exp03/exp03_rgn_greater_faydark/brink_trudger/brink_trudger001.mp3", "", "", 2534543570, 2988502140, Spawn) + AddConversationOption(conversation, "Who are you?", "dlg_5_1") + AddConversationOption(conversation, "Thanks, goodbye.") + StartConversation(conversation, NPC, Spawn, "Hi there, young one'! Heh. Off to start your adventures in the great-big, crazy world, eh? Always keep your wits about you! My wits saved me from a few scrapes over the years.") + end + + if convo==7 then + PlayFlavor(NPC, "voiceover/english/exp03_questvo2/brink_trudger/_exp03/exp03_rgn_greater_faydark/brink_trudger/brink_trudger004.mp3", "", "", 1893137792, 84245308, Spawn) + AddConversationOption(conversation, "I have some growler pelts for you.", "dlg_7_1") + AddConversationOption(conversation, "I don't have the pelts yet.") + StartConversation(conversation, NPC, Spawn, "Howdy youngin'! How goes the hunt for the growler pelts?") + end + + if convo==14 then + PlayFlavor(NPC, "voiceover/english/exp03_questvo2/brink_trudger/_exp03/exp03_rgn_greater_faydark/brink_trudger/brink_trudger001.mp3", "", "", 2534543570, 2988502140, Spawn) + AddConversationOption(conversation, "Who are you?", "dlg_14_1") + AddConversationOption(conversation, "Thanks, goodbye.") + StartConversation(conversation, NPC, Spawn, "Hi there, young one'! Heh. Off to start your adventures in the great-big, crazy world, eh? Always keep your wits about you! My wits saved me from a few scrapes over the years.") + end + + if convo==15 then + PlayFlavor(NPC, "voiceover/english/exp03_questvo2/brink_trudger/_exp03/exp03_rgn_greater_faydark/brink_trudger/brink_trudger007.mp3", "", "", 3075516817, 4149443357, Spawn) + AddConversationOption(conversation, "Yes, I have some spider silk for you.", "dlg_15_1") + AddConversationOption(conversation, "Nope, not yet.") + StartConversation(conversation, NPC, Spawn, "Welcome back, " .. GetName(Spawn) .. ". Heehee ...Were you able to get your hands on some spider silk?") + end + + if convo==19 then + PlayFlavor(NPC, "voiceover/english/exp03_questvo2/brink_trudger/_exp03/exp03_rgn_greater_faydark/brink_trudger/brink_trudger007.mp3", "", "", 3075516817, 4149443357, Spawn) + AddConversationOption(conversation, "Yes, I have some spider silk for you.", "dlg_19_1") + AddConversationOption(conversation, "Nope, not yet.") + StartConversation(conversation, NPC, Spawn, "Welcome back, " .. GetName(Spawn) .. ". Heehee ...Were you able to get your hands on some spider silk?") + end + +end + +function dlg_3_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/exp03_questvo2/brink_trudger/_exp03/exp03_rgn_greater_faydark/brink_trudger/brink_trudger014.mp3", "", "", 4065110799, 2574058259, Spawn) + AddConversationOption(conversation, "Thanks, Brink.", "dlg_3_2") + StartConversation(conversation, NPC, Spawn, "Ah, these are excellent huhhuh. Not a scratch on 'em! Uh, these will make fine plate armor, indeed. We appreciate everything you've done. You're going to make a mark in this world, I tell you.") +end + +function dlg_5_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/exp03_questvo2/brink_trudger/_exp03/exp03_rgn_greater_faydark/brink_trudger/brink_trudger002.mp3", "", "", 2521303074, 4079509468, Spawn) + AddConversationOption(conversation, "Sure. How can I help?", "dlg_5_2") + AddConversationOption(conversation, "I'm sorry, I'm busy.") + StartConversation(conversation, NPC, Spawn, "The names Trudger, youngin', Brink Trudger. I've been where you're going. I used to be an adventurer, wandering the Shattered Lands, but now I help the Matron of the Nursery by making clothing for newly awakened fae. Eh, I could use your help, if you're willing.") +end + +function dlg_5_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/exp03_questvo2/brink_trudger/_exp03/exp03_rgn_greater_faydark/brink_trudger/brink_trudger003.mp3", "", "", 860825066, 492028532, Spawn) + AddConversationOption(conversation, "I can get the hides for you.", "dlg_5_3") + StartConversation(conversation, NPC, Spawn, "I'm running low on leather for my fae outfits. I'd go out hunting myself, but I don't think my old bones could take it. Hahaha! If you get me some growler pelts from the grey growlers west of here, I could tan them to make new strips of leather.") +end + +function dlg_5_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/exp03_questvo2/brink_trudger/_exp03/exp03_rgn_greater_faydark/brink_trudger/brink_trudger003_offer.mp3", "", "", 179963171, 4058842652, Spawn) + AddConversationOption(conversation, "This should be no problem.", "dlg_5_4") + StartConversation(conversation, NPC, Spawn, "Great! I appreciate it!") +end + +function dlg_7_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/exp03_questvo2/brink_trudger/_exp03/exp03_rgn_greater_faydark/brink_trudger/brink_trudger005.mp3", "", "", 904667062, 23815959, Spawn) + AddConversationOption(conversation, "Sure, what is it?", "dlg_7_2") + AddConversationOption(conversation, "I don't have time to help anymore, goodbye.") + StartConversation(conversation, NPC, Spawn, "These are great! Nice skinning job on the hides. They'll make great leather pieces. You know, I hate to ask, but, uh, I need your help just one more time. ") +end + +function dlg_7_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/exp03_questvo2/brink_trudger/_exp03/exp03_rgn_greater_faydark/brink_trudger/brink_trudger006.mp3", "", "", 429538583, 2492036558, Spawn) + AddConversationOption(conversation, "I'll get the silk for you.", "dlg_7_3") + StartConversation(conversation, NPC, Spawn, "While you were out, I discovered I'm almost out of the spider silk I use to sew fae clothes for the magically-inclined. I'd be in your debt if you'd get me just a small amount of spider silk so that I can continue making the wee fae outfits.") +end + +function dlg_7_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/exp03_questvo2/brink_trudger/_exp03/exp03_rgn_greater_faydark/brink_trudger/brink_trudger009.mp3", "", "", 94899034, 3216566812, Spawn) + AddConversationOption(conversation, "I'll be careful.", "dlg_7_4") + StartConversation(conversation, NPC, Spawn, "Wonderful! The silkspinner spiders usually live in an area to the west, past the growlers. Be careful though, those silkspinners are dangerous fellers!") +end + +function dlg_14_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/exp03_questvo2/brink_trudger/_exp03/exp03_rgn_greater_faydark/brink_trudger/brink_trudger002.mp3", "", "", 2521303074, 4079509468, Spawn) + AddConversationOption(conversation, "Sure. How can I help?", "dlg_14_2") + AddConversationOption(conversation, "I'm sorry, I'm busy.") + StartConversation(conversation, NPC, Spawn, "The names Trudger, youngin', Brink Trudger. I've been where you're going. I used to be an adventurer, wandering the Shattered Lands, but now I help the Matron of the Nursery by making clothing for newly awakened fae. Eh, I could use your help, if you're willing.") +end + +function dlg_14_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/exp03_questvo2/brink_trudger/_exp03/exp03_rgn_greater_faydark/brink_trudger/brink_trudger003.mp3", "", "", 860825066, 492028532, Spawn) + AddConversationOption(conversation, "I can get the hides for you.", "dlg_14_3") + StartConversation(conversation, NPC, Spawn, "I'm running low on leather for my fae outfits. I'd go out hunting myself, but I don't think my old bones could take it. Hahaha! If you get me some growler pelts from the grey growlers west of here, I could tan them to make new strips of leather.") +end + +function dlg_14_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/exp03_questvo2/brink_trudger/_exp03/exp03_rgn_greater_faydark/brink_trudger/brink_trudger003_offer.mp3", "", "", 179963171, 4058842652, Spawn) + AddConversationOption(conversation, "This should be no problem.", "dlg_14_4") + StartConversation(conversation, NPC, Spawn, "Great! I appreciate it!") +end + +function dlg_15_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/exp03_questvo2/brink_trudger/_exp03/exp03_rgn_greater_faydark/brink_trudger/brink_trudger008.mp3", "", "", 1249335835, 2386333509, Spawn) + AddConversationOption(conversation, "Is there anything else I can help with?", "dlg_15_2") + AddConversationOption(conversation, "Thank you, Brink.") + StartConversation(conversation, NPC, Spawn, "Marvelous! Uhoh! This silk is very good quality! You, you did an excellent job, and I know the fae appreciate your hard work. You'll make a fine adventurer, .. GetName(Spawn) .. . A fine adventurer, indeed. Huhuh.") +end + +function dlg_15_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/exp03_questvo2/brink_trudger/_exp03/exp03_rgn_greater_faydark/brink_trudger/brink_trudger010.mp3", "", "", 1214199522, 2851008750, Spawn) + AddConversationOption(conversation, "What kind of shells do you need?", "dlg_15_3") + AddConversationOption(conversation, "I don't feel like getting shells, goodbye.") + StartConversation(conversation, NPC, Spawn, "Hmmm... I'm running low on hard plates to use in making the armor for the heavy fighter types. If you get me the shells I need, I'd sure appreciate it.") +end + +function dlg_15_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/exp03_questvo2/brink_trudger/_exp03/exp03_rgn_greater_faydark/brink_trudger/brink_trudger011.mp3", "", "", 4145013832, 3563128686, Spawn) + AddConversationOption(conversation, "I'll get the shells for you.", "dlg_15_4") + StartConversation(conversation, NPC, Spawn, "I've been using crustacean and turtle shells. The clawsnaps and sand sifters on the beach seem plentiful. If you bring me their shells, I'm sure I'll be able to make them into hard armor for newly awakened fae.") +end + +function dlg_15_4(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/exp03_questvo2/brink_trudger/_exp03/exp03_rgn_greater_faydark/brink_trudger/brink_trudger012.mp3", "", "", 3911384586, 1778696172, Spawn) + AddConversationOption(conversation, "Okay, I'll be right back.", "dlg_15_5") + StartConversation(conversation, NPC, Spawn, "Thank you, " .. GetName(Spawn) .. ". I'll be right here putting this gear together.") +end + +function dlg_19_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/exp03_questvo2/brink_trudger/_exp03/exp03_rgn_greater_faydark/brink_trudger/brink_trudger008.mp3", "", "", 1249335835, 2386333509, Spawn) + AddConversationOption(conversation, "Is there anything else I can help with?", "dlg_19_2") + AddConversationOption(conversation, "Thank you, Brink.") + StartConversation(conversation, NPC, Spawn, "Marvelous! Uhoh! This silk is very good quality! You, you did an excellent job, and I know the fae appreciate your hard work. You'll make a fine adventurer, .. GetName(Spawn) .. . A fine adventurer, indeed. Huhuh.") +end + +function dlg_19_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/exp03_questvo2/brink_trudger/_exp03/exp03_rgn_greater_faydark/brink_trudger/brink_trudger010.mp3", "", "", 1214199522, 2851008750, Spawn) + AddConversationOption(conversation, "What kind of shells do you need?", "dlg_19_3") + AddConversationOption(conversation, "I don't feel like getting shells, goodbye.") + StartConversation(conversation, NPC, Spawn, "Hmmm... I'm running low on hard plates to use in making the armor for the heavy fighter types. If you get me the shells I need, I'd sure appreciate it.") +end + +function dlg_19_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/exp03_questvo2/brink_trudger/_exp03/exp03_rgn_greater_faydark/brink_trudger/brink_trudger011.mp3", "", "", 4145013832, 3563128686, Spawn) + AddConversationOption(conversation, "I'll get the shells for you.", "dlg_19_4") + StartConversation(conversation, NPC, Spawn, "I've been using crustacean and turtle shells. The clawsnaps and sand sifters on the beach seem plentiful. If you bring me their shells, I'm sure I'll be able to make them into hard armor for newly awakened fae.") +end + +function dlg_19_4(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/exp03_questvo2/brink_trudger/_exp03/exp03_rgn_greater_faydark/brink_trudger/brink_trudger012.mp3", "", "", 3911384586, 1778696172, Spawn) + AddConversationOption(conversation, "Okay, I'll be right back.", "dlg_19_5") + StartConversation(conversation, NPC, Spawn, "Thank you, " .. GetName(Spawn) .. ". I'll be right here putting this gear together.") +end + +--[[ raw_conversations + PlayFlavor(NPC, "voiceover/english/exp03_questvo2/brink_trudger/_exp03/exp03_rgn_greater_faydark/quest/brink_trudger_low_level_c046f9f.mp3", "Hello, youngin'! Check back with me when you have a bit more experience under your belt. I may have some work for you then!", "", 1587078746, 1916787035, Spawn) +--]] + diff --git a/server/SpawnScripts/GreaterFaydark/BrodoGillywump.lua b/server/SpawnScripts/GreaterFaydark/BrodoGillywump.lua new file mode 100644 index 000000000..360590ed8 --- /dev/null +++ b/server/SpawnScripts/GreaterFaydark/BrodoGillywump.lua @@ -0,0 +1,28 @@ +--[[ + Script Name : SpawnScripts/GreaterFaydark/BrodoGillywump.lua + Script Purpose : Brodo Gillywump + Script Author : John Adams + Script Date : 2009.03.01 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +function spawn(NPC) + SetPlayerProximityFunction(NPC, 10, "InRange", "LeaveRange") +end + +function respawn(NPC) + spawn(NPC) +end + +function InRange(NPC, Spawn) +end + +function LeaveRange(NPC, Spawn) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + + PlayFlavor(NPC, "voiceover/english/exp03_questvo2/brodo_gillywump/_exp03/exp03_rgn_greater_faydark/quest/scp/brodo_gillywump_notonquest_35ff94cb.mp3", "Pleased to meet you.", "", 1682626456, 1452067375, Spawn) +end + diff --git a/server/SpawnScripts/GreaterFaydark/BurgefSteelwright.lua b/server/SpawnScripts/GreaterFaydark/BurgefSteelwright.lua new file mode 100644 index 000000000..31c44cbff --- /dev/null +++ b/server/SpawnScripts/GreaterFaydark/BurgefSteelwright.lua @@ -0,0 +1,31 @@ +--[[ + Script Name : SpawnScripts/GreaterFaydark/BurgefSteelwright.lua + Script Purpose : Burgef Steelwright + Script Author : John Adams + Script Date : 2009.03.01 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +function spawn(NPC) + SetPlayerProximityFunction(NPC, 10, "InRange", "LeaveRange") +end + +function respawn(NPC) + spawn(NPC) +end + +function InRange(NPC, Spawn) +end + +function LeaveRange(NPC, Spawn) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "burgef_steelwright/_exp03/exp03_rgn_greater_faydark/burgef_steelwright/burgef001.mp3", "", "", 2532462337, 1199688824, Spawn) + AddConversationOption(conversation, "I'll leave you alone.", "dlg_4_1") + StartConversation(conversation, NPC, Spawn, "Can't stop workin'! These 'ere orcs will punish the others for it!") +end + diff --git a/server/SpawnScripts/GreaterFaydark/BuzzVitikka.lua b/server/SpawnScripts/GreaterFaydark/BuzzVitikka.lua new file mode 100644 index 000000000..346d1d580 --- /dev/null +++ b/server/SpawnScripts/GreaterFaydark/BuzzVitikka.lua @@ -0,0 +1,28 @@ +--[[ + Script Name : SpawnScripts/GreaterFaydark/BuzzVitikka.lua + Script Purpose : Buzz Vitikka + Script Author : John Adams + Script Date : 2009.03.01 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +function spawn(NPC) + SetPlayerProximityFunction(NPC, 10, "InRange", "LeaveRange") +end + +function respawn(NPC) + spawn(NPC) +end + +function InRange(NPC, Spawn) +end + +function LeaveRange(NPC, Spawn) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + + PlayFlavor(NPC, "", "Hmm! Hmm! Hmm!", "", 1689589577, 4560189, Spawn) +end + diff --git a/server/SpawnScripts/GreaterFaydark/CaptainR.K.Irontoe.lua b/server/SpawnScripts/GreaterFaydark/CaptainR.K.Irontoe.lua new file mode 100644 index 000000000..1152e677a --- /dev/null +++ b/server/SpawnScripts/GreaterFaydark/CaptainR.K.Irontoe.lua @@ -0,0 +1,444 @@ +--[[ + Script Name : SpawnScripts/GreaterFaydark/CaptainR.K.Irontoe.lua + Script Purpose : Captain R.K. Irontoe + Script Author : John Adams + Script Date : 2009.03.01 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +function spawn(NPC) + SetPlayerProximityFunction(NPC, 10, "InRange", "LeaveRange") +end + +function respawn(NPC) + spawn(NPC) +end + +function InRange(NPC, Spawn) +end + +function LeaveRange(NPC, Spawn) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "captain_r.k._irontoe/_exp03/exp03_rgn_greater_faydark/captain_rk_irontoe/rk_irontoe001.mp3", "", "", 770633161, 1780911252, Spawn) + AddConversationOption(conversation, "Who are you?", "dlg_24_1") + AddConversationOption(conversation, "I do not know. Farewell.") + StartConversation(conversation, NPC, Spawn, "Bah! How does a dwarf feel at home with a canopy of leaves and not one of stone? ") + if convo==25 then + PlayFlavor(NPC, "captain_r.k._irontoe/_exp03/exp03_rgn_greater_faydark/captain_rk_irontoe/rk_irontoe057.mp3", "", "", 770633161, 1780911252, Spawn) + AddConversationOption(conversation, "I would like to hear about Kaladim.", "dlg_25_1") + AddConversationOption(conversation, "My interest in serving the dwarven kingdom has risen.") + AddConversationOption(conversation, "I just wanted to say hello. Farewell now. ") + StartConversation(conversation, NPC, Spawn, "Ah! You again. Has your interest in dwarven history risen?") + end + + if convo==26 then + PlayFlavor(NPC, "captain_r.k._irontoe/_exp03/exp03_rgn_greater_faydark/captain_rk_irontoe/rk_irontoe057.mp3", "", "", 770633161, 1780911252, Spawn) + AddConversationOption(conversation, "I would like to hear about Kaladim.", "dlg_26_1") + AddConversationOption(conversation, "My interest in serving the dwarven kingdom has risen.") + AddConversationOption(conversation, "I just wanted to say hello. Farewell now. ") + StartConversation(conversation, NPC, Spawn, "Ah! You again. Has your interest in dwarven history risen?") + end + +end + +function dlg_24_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "captain_r.k._irontoe/_exp03/exp03_rgn_greater_faydark/captain_rk_irontoe/rk_irontoe002.mp3", "", "", 770633161, 1780911252, Spawn) + AddConversationOption(conversation, "I would like to hear about Kaladim.", "dlg_24_2") + AddConversationOption(conversation, "Is there anything I can do to help reclaim the glory of Kaladim?") + AddConversationOption(conversation, "Nice to meet you, Captain, but I must go. Bye.") + StartConversation(conversation, NPC, Spawn, "I am Captain R.K. Irontoe, commanding officer of Greater Faydark operations for the Irontoe Brigade, sons of Kaladim! All raise yer milk for the past glory of Kaladim!") +end + +function dlg_24_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "captain_r.k._irontoe/_exp03/exp03_rgn_greater_faydark/captain_rk_irontoe/rk_irontoe003.mp3", "", "", 770633161, 1780911252, Spawn) + AddConversationOption(conversation, "What did Kaladim do during the War of the Fay?", "dlg_24_3") + AddConversationOption(conversation, "What is the Grand March?") + AddConversationOption(conversation, "What happened to Kaladim during the Age of Cataclysms?") + AddConversationOption(conversation, "What is the Irontoe Brigade?") + AddConversationOption(conversation, "I have no time for a history lesson. Farewell.") + StartConversation(conversation, NPC, Spawn, "Kaladim has endured a lot of pain since the War of the Fay. It has stood even after the Grand March removed most of its defenders. It endured the titanic quakes of the Age of Cataclysms. And for what? To see the Serilian Horde occupy its majestic halls.") +end + +function dlg_24_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "captain_r.k._irontoe/_exp03/exp03_rgn_greater_faydark/captain_rk_irontoe/rk_irontoe004.mp3", "", "", 770633161, 1780911252, Spawn) + AddConversationOption(conversation, "What were trolls and ogres doing in Lesser Faydark?", "dlg_24_4") + AddConversationOption(conversation, "I have no time for a history lesson. Farewell.") + StartConversation(conversation, NPC, Spawn, "During the great war, the brigades of the Stormguard marched from the gates of Kaladim to the forests of Kelethin where the Neriak Alliance was razing the realm of the elves. The dwarven army met great resistance from troll and ogre units within the Lesser Faydark, but nothing could keep us from reaching the besieged tree city.") +end + +function dlg_24_4(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "captain_r.k._irontoe/_exp03/exp03_rgn_greater_faydark/captain_rk_irontoe/rk_irontoe005.mp3", "", "", 770633161, 1780911252, Spawn) + AddConversationOption(conversation, "Did the trolls and ogres stop the dwarven brigades?", "dlg_24_5") + AddConversationOption(conversation, "I have no time for a history lesson. Farewell.") + StartConversation(conversation, NPC, Spawn, "The dark elf generals sent their brigades of monsters to halt the march of the dwarven armies there. They knew that we would come to rescue our elven brothers. We could break their sieges on Felwithe and Kelethin. So it was in the Lesser Faydark that monsters met mettle...dwarven mettle.") +end + +function dlg_24_5(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "captain_r.k._irontoe/_exp03/exp03_rgn_greater_faydark/captain_rk_irontoe/rk_irontoe006.mp3", "", "", 770633161, 1780911252, Spawn) + AddConversationOption(conversation, "What happened at the Battle of Brute Hill?", "dlg_24_6") + AddConversationOption(conversation, "I have no time for a history lesson. Farewell.") + StartConversation(conversation, NPC, Spawn, "The monsters did their best to surprise our army, managing to divide our brigades, but they could not stop us. One of the bloodiest battles fought there was the Battle of Brute Hill. That was where King Kazon Stormhammer and the Ogrebane Brigade were encircled. But the Ogrebane Brigade would not end that day.") +end + +function dlg_24_6(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "captain_r.k._irontoe/_exp03/exp03_rgn_greater_faydark/captain_rk_irontoe/rk_irontoe007.mp3", "", "", 770633161, 1780911252, Spawn) + AddConversationOption(conversation, "So they managed to reach Kelethin and rescue the city?", "dlg_24_7") + AddConversationOption(conversation, "I have no time for a history lesson. Farewell.") + StartConversation(conversation, NPC, Spawn, "The fierce Ogrebane Brigade was outnumbered ten to one. The other brigades had their own battles and could not reach them. Death was certain, but King Kazon Stormhammer used the mighty Stormhammer, the great weapon bestowed to him by Brell Serilis. With a mighty rumble, the powers of the Underfoot shook and quaked, the ground claimed our foes and the march continued.") +end + +function dlg_24_7(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "captain_r.k._irontoe/_exp03/exp03_rgn_greater_faydark/captain_rk_irontoe/rk_irontoe008.mp3", "", "", 770633161, 1780911252, Spawn) + AddConversationOption(conversation, "The dark elves burned the forest?", "dlg_24_8") + AddConversationOption(conversation, "I have no time for a history lesson. Farewell.") + StartConversation(conversation, NPC, Spawn, "Yes. The brigades reached the greater and then battles would abound throughout the land of the wood elves. Dwarf fought alongside elf against the evil dark elf army of Dreadguard and Crushbone orcs. During the many skirmishes, the dark elves set fire to the forest. This became known as the Fires of Faydark, the final battle. ") +end + +function dlg_24_8(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "captain_r.k._irontoe/_exp03/exp03_rgn_greater_faydark/captain_rk_irontoe/rk_irontoe009.mp3", "", "", 770633161, 1780911252, Spawn) + AddConversationOption(conversation, "What about Felwithe, home of the high elves?", "dlg_24_9") + AddConversationOption(conversation, "I have no time for a history lesson. Farewell.") + StartConversation(conversation, NPC, Spawn, "The Greater Faydark burned bright. Many platoons, both friend and foe, fell to the surrounding flames. It was a last ditch effort of the dark elves. They knew they had been beaten and they wished to throw a great dagger while passing through death's door. Regardless of the damage done, we were victorious and Kelethin survived. ") +end + +function dlg_24_9(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "captain_r.k._irontoe/_exp03/exp03_rgn_greater_faydark/captain_rk_irontoe/rk_irontoe010.mp3", "", "", 770633161, 1780911252, Spawn) + AddConversationOption(conversation, "So the gnomes and their machines freed Felwithe.", "dlg_24_10") + AddConversationOption(conversation, "I have no time for a history lesson. Farewell.") + StartConversation(conversation, NPC, Spawn, "If it were not for the tick-tocking, puffing and clanking army of the gnomes, I am sure Felwithe would be part of the dark elf empire to this day. The elite dark elf Dragoons, led by their king, had captured Felwithe. But the clockworks clambered over the mountain peaks that previously made the elven city in the clouds impervious to attack. ") +end + +function dlg_24_10(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "captain_r.k._irontoe/_exp03/exp03_rgn_greater_faydark/captain_rk_irontoe/rk_irontoe011.mp3", "", "", 770633161, 1780911252, Spawn) + AddConversationOption(conversation, "What else occurred in the Siege of Felwithe?", "dlg_24_11") + AddConversationOption(conversation, "I have no time for a history lesson. Farewell.") + StartConversation(conversation, NPC, Spawn, "Yes, but when the contraptions of the gnomes come to the rescue, you are sure to take severe damage from their good deed. The clockworks toppled much of the grand city in the process. Still, they did liberate the city and alongside the elite Koada'Vie, they not only thwarted the occupation, but managed to slay the evil King Naythox Thex. Unfortunately, not before the Dragoons slew the high elf king also. What a shame.") +end + +function dlg_24_11(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "captain_r.k._irontoe/_exp03/exp03_rgn_greater_faydark/captain_rk_irontoe/rk_irontoe012.mp3", "", "", 770633161, 1780911252, Spawn) + AddConversationOption(conversation, "I would like to hear more about Kaladim.", "dlg_24_12") + AddConversationOption(conversation, "Were there any significant dwarven battles in Greater Faydark?") + AddConversationOption(conversation, "Very well, I will run along. Farewell.") + StartConversation(conversation, NPC, Spawn, "Now listen here, I am a dwarven historian. I care little of the battles beyond our brigades. You are lucky enough to hear a bit about the occupation and liberation of Felwithe. Now run along, do something heroic.") +end + +function dlg_25_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "captain_r.k._irontoe/_exp03/exp03_rgn_greater_faydark/captain_rk_irontoe/rk_irontoe003.mp3", "", "", 770633161, 1780911252, Spawn) + AddConversationOption(conversation, "What did Kaladim do during the War of the Fay?", "dlg_25_2") + AddConversationOption(conversation, "What is the Grand March?") + AddConversationOption(conversation, "What happened to Kaladim during the Age of Cataclysms?") + AddConversationOption(conversation, "What is the Irontoe Brigade?") + AddConversationOption(conversation, "I have no time for a history lesson. Farewell.") + StartConversation(conversation, NPC, Spawn, "Kaladim has endured a lot of pain since the War of the Fay. It has stood even after the Grand March removed most of its defenders. It endured the titanic quakes of the Age of Cataclysms. And for what? To see the Serilian Horde occupy its majestic halls.") +end + +function dlg_25_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "captain_r.k._irontoe/_exp03/exp03_rgn_greater_faydark/captain_rk_irontoe/rk_irontoe013.mp3", "", "", 770633161, 1780911252, Spawn) + AddConversationOption(conversation, "Are you saying that everyone left Kaladim?") + AddConversationOption(conversation, "I have no time for a history lesson. Farewell.", "dlg_25_3") + StartConversation(conversation, NPC, Spawn, "You ask about things only a son or daughter of Kaladim should know, but it is no secret. During the latter years of the Age of War, Kaladim lost much of its population to the grandest pilgrimage ever, a crusade given to us by Brell. ") +end + +function dlg_25_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "captain_r.k._irontoe/_exp03/exp03_rgn_greater_faydark/captain_rk_irontoe/rk_irontoe014.mp3", "", "", 770633161, 1780911252, Spawn) + AddConversationOption(conversation, "Why would most of the dwarves abandon their grand kingdom of Kaladim?", "dlg_25_4") + AddConversationOption(conversation, "I have no time for a history lesson. Farewell.") + StartConversation(conversation, NPC, Spawn, "Not everyone, but most. I cannot reveal the reasons why or even where they went, but I can say that it was a calling of Brell's. Long have we waited for word to reach us about the glorious halls of the Vaults of Serilis.") +end + +function dlg_25_4(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "captain_r.k._irontoe/_exp03/exp03_rgn_greater_faydark/captain_rk_irontoe/rk_irontoe015.mp3", "", "", 770633161, 1780911252, Spawn) + AddConversationOption(conversation, "They found out where this place is?", "dlg_25_5") + AddConversationOption(conversation, "I have no time for a history lesson. Farewell.") + StartConversation(conversation, NPC, Spawn, "The Vaults have long been part of our mythology and our destiny. The Vaults of Serilis is the grandest temple in all Norrath. It is said that Brell made his temporary home on Norrath in the Vaults as he created his children and the creatures that would be deposited upon Norrath. It is the cradle of the first and destiny to us all.") +end + +function dlg_25_5(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "captain_r.k._irontoe/_exp03/exp03_rgn_greater_faydark/captain_rk_irontoe/rk_irontoe016.mp3", "", "", 770633161, 1780911252, Spawn) + AddConversationOption(conversation, "Tell me more of the Vaults of Serilis and what this riddle was.", "dlg_25_6") + AddConversationOption(conversation, "I have no time for a history lesson. Farewell.") + StartConversation(conversation, NPC, Spawn, "The riddle of its location reached Kaladim. The king and his lords studied the riddle for many years until a location could be determined. Unfortunately, the answer was accompanied by an impending doom if the Vaults could not be saved from a mysterious threat. ") +end + +function dlg_25_6(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "captain_r.k._irontoe/_exp03/exp03_rgn_greater_faydark/captain_rk_irontoe/rk_irontoe017.mp3", "", "", 770633161, 1780911252, Spawn) + AddConversationOption(conversation, "I would like to hear more about Kaladim.", "dlg_25_7") + AddConversationOption(conversation, "Very well, I will run along. Farewell.") + StartConversation(conversation, NPC, Spawn, "I have said too much about the whispers Brell bestowed upon the dwarves. You must abandon your query. I will tell you no more about the Grand March.") +end + +function dlg_25_7(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "captain_r.k._irontoe/_exp03/exp03_rgn_greater_faydark/captain_rk_irontoe/rk_irontoe003.mp3", "", "", 770633161, 1780911252, Spawn) + AddConversationOption(conversation, "What did Kaladim do during the War of the Fay?", "dlg_25_8") + AddConversationOption(conversation, "What is the Grand March?") + AddConversationOption(conversation, "What happened to Kaladim during the Age of Cataclysms?") + AddConversationOption(conversation, "What is the Irontoe Brigade?") + AddConversationOption(conversation, "I have no time for a history lesson. Farewell.") + StartConversation(conversation, NPC, Spawn, "Kaladim has endured a lot of pain since the War of the Fay. It has stood even after the Grand March removed most of its defenders. It endured the titanic quakes of the Age of Cataclysms. And for what? To see the Serilian Horde occupy its majestic halls.") +end + +function dlg_25_8(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "captain_r.k._irontoe/_exp03/exp03_rgn_greater_faydark/captain_rk_irontoe/rk_irontoe018.mp3", "", "", 770633161, 1780911252, Spawn) + AddConversationOption(conversation, "Did Kaladim take much damage during this time?") + AddConversationOption(conversation, "I have no time for a history lesson. Farewell.") + StartConversation(conversation, NPC, Spawn, "As Norrath quaked and rumbled, Kaladim stood its greatest test. When the titanic quakes began, it was in grave danger, being the grandest city ever to be built under the mountains, grander even than the ticking city of Ak'Anon. ") +end + +function dlg_25_9(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "captain_r.k._irontoe/_exp03/exp03_rgn_greater_faydark/captain_rk_irontoe/rk_irontoe019.mp3", "", "", 770633161, 1780911252, Spawn) + AddConversationOption(conversation, "What happened inside?", "dlg_25_10") + AddConversationOption(conversation, "I have no time for a history lesson. Farewell.") + StartConversation(conversation, NPC, Spawn, "Kaladim has always been built in the sturdiest of environments. We dwarves know our rock! When other caves crumbled and collapsed, Kaladim stood strong. But the monuments and the free standing towers of the city did not fare so well... nor the residents within.") +end + +function dlg_25_10(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "captain_r.k._irontoe/_exp03/exp03_rgn_greater_faydark/captain_rk_irontoe/rk_irontoe020.mp3", "", "", 770633161, 1780911252, Spawn) + AddConversationOption(conversation, "But they were freed, were they not?", "dlg_25_11") + AddConversationOption(conversation, "I have no time for a history lesson. Farewell.") + StartConversation(conversation, NPC, Spawn, "The world began to spasm and monuments cracked. Our finest monument was over the gates leading into Kaladim: the statue of Dagnor Butcherblock. The great stone hammer that was held by the statue fractured and broke free! It came crashing down, sealing the passage into Kaladim. All within became prisoners. ") +end + +function dlg_25_11(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "captain_r.k._irontoe/_exp03/exp03_rgn_greater_faydark/captain_rk_irontoe/rk_irontoe021.mp3", "", "", 770633161, 1780911252, Spawn) + AddConversationOption(conversation, "How did the dwarves inside manage to survive, or did they?", "dlg_25_12") + AddConversationOption(conversation, "I have no time for a history lesson. Farewell.") + StartConversation(conversation, NPC, Spawn, "Unfortunately, the survivors were cut off from the surface world for a long time. The stone used for monuments is often quite dense and almost impossible to breach. It would be nearly a year before we could clear the gates of Kaladim. ") +end + +function dlg_25_12(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "captain_r.k._irontoe/_exp03/exp03_rgn_greater_faydark/captain_rk_irontoe/rk_irontoe022.mp3", "", "", 770633161, 1780911252, Spawn) + AddConversationOption(conversation, "An invasion from somewhere else? Where from?", "dlg_25_13") + AddConversationOption(conversation, "I have no time for a history lesson. Farewell.") + StartConversation(conversation, NPC, Spawn, "What few residents within that survived the quakes lived on resources which we dwarves always store in abundance. But this sustenance would not protect them from the unexpected invasion that would come: the invasion of the Serilian Horde.") +end + +function dlg_25_13(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "captain_r.k._irontoe/_exp03/exp03_rgn_greater_faydark/captain_rk_irontoe/rk_irontoe023.mp3", "", "", 770633161, 1780911252, Spawn) + AddConversationOption(conversation, "But now you can retake the city!", "dlg_25_14") + AddConversationOption(conversation, "I have no time for a history lesson. Farewell.") + StartConversation(conversation, NPC, Spawn, "The great rumblings of the Age had created a fissure between our kingdom and the depths of the underworld. This fissure was the means used by an evil alliance of underworld denizens to enter Kaladim and slay every last dwarf, thereby claiming this city as their capital.") +end + +function dlg_25_14(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "captain_r.k._irontoe/_exp03/exp03_rgn_greater_faydark/captain_rk_irontoe/rk_irontoe024.mp3", "", "", 770633161, 1780911252, Spawn) + AddConversationOption(conversation, "I would like to hear more about Kaladim.", "dlg_25_15") + AddConversationOption(conversation, "I have no time for a history lesson. Farewell.") + StartConversation(conversation, NPC, Spawn, "By the time we managed to breach the collapse and enter our city, the horde had established an impregnable front. We lost many soldiers during our early assaults. We must bolster our forces to defend and expand Fort Irontoe, our new base of operations within Butcherblock Mountains. ") +end + +function dlg_25_15(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "captain_r.k._irontoe/_exp03/exp03_rgn_greater_faydark/captain_rk_irontoe/rk_irontoe003.mp3", "", "", 770633161, 1780911252, Spawn) + AddConversationOption(conversation, "What did Kaladim do during the War of the Fay?", "dlg_25_16") + AddConversationOption(conversation, "What is the Grand March?") + AddConversationOption(conversation, "What happened to Kaladim during the Age of Cataclysms?") + AddConversationOption(conversation, "What is the Irontoe Brigade?") + AddConversationOption(conversation, "I have no time for a history lesson. Farewell.") + StartConversation(conversation, NPC, Spawn, "Kaladim has endured a lot of pain since the War of the Fay. It has stood even after the Grand March removed most of its defenders. It endured the titanic quakes of the Age of Cataclysms. And for what? To see the Serilian Horde occupy its majestic halls.") +end + +function dlg_25_16(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "captain_r.k._irontoe/_exp03/exp03_rgn_greater_faydark/captain_rk_irontoe/rk_irontoe032.mp3", "", "", 770633161, 1780911252, Spawn) + AddConversationOption(conversation, "What is the Stormguard?") + AddConversationOption(conversation, "I have no time for a history lesson. Farewell.") + StartConversation(conversation, NPC, Spawn, "We are the Irontoe Brigade. We are the final defenders of the dwarves within this land. Our brigade history is rich with heroism and tragedy. The brigade was formed long before my time. It was formed in the Monument Age and stood as the greatest champions of the Stormguard.") +end + +function dlg_25_17(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "captain_r.k._irontoe/_exp03/exp03_rgn_greater_faydark/captain_rk_irontoe/rk_irontoe033.mp3", "", "", 770633161, 1780911252, Spawn) + AddConversationOption(conversation, "Why did they disband?", "dlg_25_18") + AddConversationOption(conversation, "I have no time for a history lesson. Farewell.") + StartConversation(conversation, NPC, Spawn, "The Stormguard is the army of Kaladim. It is comprised of a number of brigades and the Irontoe Brigade stands as its most legendary. Long were they the champions of the king and kingdom. Then one day they disbanded. We are its revival.") +end + +function dlg_25_18(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "captain_r.k._irontoe/_exp03/exp03_rgn_greater_faydark/captain_rk_irontoe/rk_irontoe034.mp3", "", "", 770633161, 1780911252, Spawn) + AddConversationOption(conversation, "What happend between the orcs and the brigade?", "dlg_25_19") + AddConversationOption(conversation, "I have no time for a history lesson. Farewell.") + StartConversation(conversation, NPC, Spawn, "During the Age of Enlightenment the king sent the Irontoe Brigade on a seemingly suicidal mission to reclaim a great artifact from the land of the orcs. Even a legendary brigade can be overwhelmed by great numbers. ") +end + +function dlg_25_19(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "captain_r.k._irontoe/_exp03/exp03_rgn_greater_faydark/captain_rk_irontoe/rk_irontoe035.mp3", "", "", 770633161, 1780911252, Spawn) + AddConversationOption(conversation, "What were they sent to get from the ruins?", "dlg_25_20") + AddConversationOption(conversation, "I have no time for a history lesson. Farewell.") + StartConversation(conversation, NPC, Spawn, "The orcs surrounded the brigade at an ancient dwarven stronghold that lay in ruins within orc country. The orcs had now made their citadel upon these ruins. The brigade was taking great losses to reach the inside of this citadel in hopes of finding access to the ruins. There were even greater losses to follow. ") +end + +function dlg_25_20(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "captain_r.k._irontoe/_exp03/exp03_rgn_greater_faydark/captain_rk_irontoe/rk_irontoe036.mp3", "", "", 770633161, 1780911252, Spawn) + AddConversationOption(conversation, "But you are an Irontoe Brigade officer. You must know what it was they brought back?", "dlg_25_21") + AddConversationOption(conversation, "I have no time for a history lesson. Farewell.") + StartConversation(conversation, NPC, Spawn, "The secret of the artifact and ruins rests with the original Irontoe Brigade and King Kazon Stormhammer. They would be the only ones that would know what was brought back from the ruined vaults of the ruins that day in the Battle of Broken Skull Hill.") +end + +function dlg_25_21(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "captain_r.k._irontoe/_exp03/exp03_rgn_greater_faydark/captain_rk_irontoe/rk_irontoe037.mp3", "", "", 770633161, 1780911252, Spawn) + AddConversationOption(conversation, "Where did they go?", "dlg_25_22") + AddConversationOption(conversation, "I have no time for a history lesson. Farewell.") + StartConversation(conversation, NPC, Spawn, "The secret was never passed down. All that is known is that compared to the great losses that saw over three fourths of the brigade slain, the reward brought disillusion to the surviving members. After the artifact was brought safely back to the king, the leader of the Irontoe Brigade disbanded the organization. They then left Kaladim for parts unknown.") +end + +function dlg_25_22(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "captain_r.k._irontoe/_exp03/exp03_rgn_greater_faydark/captain_rk_irontoe/rk_irontoe038.mp3", "", "", 770633161, 1780911252, Spawn) + AddConversationOption(conversation, "So, you are not the same Irontoe Brigade?", "dlg_25_23") + AddConversationOption(conversation, "I have no time for a history lesson. Farewell.") + StartConversation(conversation, NPC, Spawn, "The Irontoe Brigade's surviving members spread throughout Norrath, none close to another. All left, save their leader, Tumpy Irontoe. Tumpy remained in Kaladim, but cast away his life as a defender. He opened a tavern called 'Irontoe's Eats' where many of the brigade members would return to every year on the anniversary of the Battle of Broken Skull Hill.") +end + +function dlg_25_23(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "captain_r.k._irontoe/_exp03/exp03_rgn_greater_faydark/captain_rk_irontoe/rk_irontoe039.mp3", "", "", 770633161, 1780911252, Spawn) + AddConversationOption(conversation, "You came back to Kaladim, but why?", "dlg_25_24") + AddConversationOption(conversation, "I have no time for a history lesson. Farewell.") + StartConversation(conversation, NPC, Spawn, "Dwarves live long, but sooner or later the sword or Lady Time reaches out to your soul. The original brigade took on apprentices. Each renamed their apprentice in a fashion that was uniform with the others, far in other lands. Those are the names we carried back to Kaladim when she needed us. ") +end + +function dlg_25_24(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "captain_r.k._irontoe/_exp03/exp03_rgn_greater_faydark/captain_rk_irontoe/rk_irontoe040.mp3", "", "", 770633161, 1780911252, Spawn) + AddConversationOption(conversation, "Could I hear more about Kaladim?", "dlg_25_25") + AddConversationOption(conversation, "I have no time for a history lesson. Farewell.") + StartConversation(conversation, NPC, Spawn, "Our help was necessary in training new guards that would be needed once the Stormguard left on the Grand March. We returned in the Age of War to train a new army to defend Kaladim. And that is how we came to be. ") +end + +function dlg_25_25(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "captain_r.k._irontoe/_exp03/exp03_rgn_greater_faydark/captain_rk_irontoe/rk_irontoe003.mp3", "", "", 770633161, 1780911252, Spawn) + AddConversationOption(conversation, "What did Kaladim do during the War of the Fay?", "dlg_25_26") + AddConversationOption(conversation, "What is the Grand March?") + AddConversationOption(conversation, "What happened to Kaladim during the Age of Cataclysms?") + AddConversationOption(conversation, "What is the Irontoe Brigade?") + AddConversationOption(conversation, "I have no time for a history lesson. Farewell.") + StartConversation(conversation, NPC, Spawn, "Kaladim has endured a lot of pain since the War of the Fay. It has stood even after the Grand March removed most of its defenders. It endured the titanic quakes of the Age of Cataclysms. And for what? To see the Serilian Horde occupy its majestic halls.") +end + +function dlg_25_26(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "captain_r.k._irontoe/_exp03/exp03_rgn_greater_faydark/captain_rk_irontoe/rk_irontoe004.mp3", "", "", 770633161, 1780911252, Spawn) + AddConversationOption(conversation, "What were trolls and ogres doing in Lesser Faydark?", "dlg_25_27") + AddConversationOption(conversation, "I have no time for a history lesson. Farewell.") + StartConversation(conversation, NPC, Spawn, "During the great war, the brigades of the Stormguard marched from the gates of Kaladim to the forests of Kelethin where the Neriak Alliance was razing the realm of the elves. The dwarven army met great resistance from troll and ogre units within the Lesser Faydark, but nothing could keep us from reaching the besieged tree city.") +end + +function dlg_26_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "captain_r.k._irontoe/_exp03/exp03_rgn_greater_faydark/captain_rk_irontoe/rk_irontoe042.mp3", "", "", 770633161, 1780911252, Spawn) + AddConversationOption(conversation, "Farewell.") + StartConversation(conversation, NPC, Spawn, "I am afraid you'll only get yourself hurt. Keep at your training and you'll soon be good enough to serve alongside the Irontoe Brigade.") +end + diff --git a/server/SpawnScripts/GreaterFaydark/CaptainSteelforge.lua b/server/SpawnScripts/GreaterFaydark/CaptainSteelforge.lua new file mode 100644 index 000000000..e5f0abac5 --- /dev/null +++ b/server/SpawnScripts/GreaterFaydark/CaptainSteelforge.lua @@ -0,0 +1,231 @@ +--[[ + Script Name : SpawnScripts/GreaterFaydark/CaptainSteelforge.lua + Script Purpose : Captain Steelforge + Script Author : John Adams + Script Date : 2009.02.05 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +function spawn(NPC) + SetPlayerProximityFunction(NPC, 10, "InRange", "LeaveRange") +end + +function respawn(NPC) + spawn(NPC) +end + +function InRange(NPC, Spawn) +end + +function LeaveRange(NPC, Spawn) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + if HasCompletedQuest(Spawn, 152) then + -- initial response when not on Trillis quest, but also not on Spelunkle quest yet (convo 17) + PlayFlavor(NPC, "voiceover/english/exp03_questvo2/captain_steelforge/_exp03/exp03_rgn_greater_faydark/captain_steelforge001.mp3", "", "", 3588015158, 768345314, Spawn) + AddConversationOption(conversation, "I'm not worried about any ole grobins.", "dlg_17_1") + AddConversationOption(conversation, "I'm out of here!") + StartConversation(conversation, NPC, Spawn, "Whoa, what are ye doin' out here? Thar be grobins in this cave that'll eat yer eyeballs and roast yer toes! Watch yerself youngin'.") + else + -- initial hail when on quest from Trillis + -- if convo==13 then + PlayFlavor(NPC, "voiceover/english/exp03_questvo2/captain_steelforge/_exp03/exp03_rgn_greater_faydark/captain_steelforge001.mp3", "", "", 3588015158, 768345314, Spawn) + AddConversationOption(conversation, "I brought a status report from Sentry Trillis.", "dlg_13_1") + AddConversationOption(conversation, "I'm not worried about any ole grobins.") + AddConversationOption(conversation, "I'm out of here!") + StartConversation(conversation, NPC, Spawn, "Whoa, what are ye doin' out here? Thar be grobins in this cave that'll eat yer eyeballs and roast yer toes! Watch yerself youngin'.") + end + + -- initial response when on Trillis quest, but not on Spelunkle quest + if convo==22 then + PlayFlavor(NPC, "voiceover/english/exp03_questvo2/captain_steelforge/_exp03/exp03_rgn_greater_faydark/captain_steelforge001.mp3", "", "", 3588015158, 768345314, Spawn) + AddConversationOption(conversation, "I brought a status report from Sentry Trillis.", "dlg_22_1") + AddConversationOption(conversation, "I'm out of here!") + StartConversation(conversation, NPC, Spawn, "Whoa, what are ye doin' out here? Thar be grobins in this cave that'll eat yer eyeballs and roast yer toes! Watch yerself youngin'.") + end + + -- completing Spelunkle quest + if convo==30 then + PlayFlavor(NPC, "voiceover/english/exp03_questvo2/captain_steelforge/_exp03/exp03_rgn_greater_faydark/captain_steelforge/captain_steelforge005.mp3", "", "", 2083248035, 1619033401, Spawn) + AddConversationOption(conversation, "He's fine. He also told me about the shrumbler queen they had in the cave.", "dlg_30_1") + AddConversationOption(conversation, "I haven't found him yet.") + StartConversation(conversation, NPC, Spawn, "Did ya find little Spelunkle? Tell me, is he okay?") + end + +end + +function dlg_5_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/exp03_questvo2/captain_steelforge/_exp03/exp03_rgn_greater_faydark/captain_steelforge/captain_steelforge006.mp3", "", "", 897068952, 3276150926, Spawn) + AddConversationOption(conversation, "Nah, I took care of it.", "dlg_5_2") + StartConversation(conversation, NPC, Spawn, "The shrumbler queen they 'had'? Did they go and move her or somethin'?") +end + +function dlg_5_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/exp03_questvo2/captain_steelforge/_exp03/exp03_rgn_greater_faydark/captain_steelforge/captain_steelforge007.mp3", "", "", 1161262204, 1265134941, Spawn) + AddConversationOption(conversation, "I couldn't have done it without Spelunkle's help.", "dlg_5_3") + AddConversationOption(conversation, "Yeah, I'm that good.") + StartConversation(conversation, NPC, Spawn, "You did? Amazin'! You solved our problems on your own?") +end + +function dlg_5_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/exp03_questvo2/captain_steelforge/_exp03/exp03_rgn_greater_faydark/captain_steelforge/captain_steelforge008.mp3", "", "", 647162173, 4086848516, Spawn) + AddConversationOption(conversation, "Thank you, Captain Steelforge.", "dlg_5_4") + StartConversation(conversation, NPC, Spawn, "Cleanin' up the rest of these grobins should be a breeze now that you've destroyed their operation. You did a fine job, .. GetName(Spawn) .. . Please take this as payment. ") +end + +function dlg_5_4(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/exp03_questvo2/captain_steelforge/_exp03/exp03_rgn_greater_faydark/captain_steelforge/captain_steelforge009.mp3", "", "", 195987972, 3354737418, Spawn) + AddConversationOption(conversation, "Sure, I can take it.", "dlg_5_5") + AddConversationOption(conversation, "No thanks, I'm busy.") + StartConversation(conversation, NPC, Spawn, "Oh, before you go... could you take this report of our activities to Jenthis Viridar at the Sapling Spur Outpost? You'll find the outpost through Echo Echo Canyon, east of here.") +end + +function dlg_5_5(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/exp03_questvo2/captain_steelforge/_exp03/exp03_rgn_greater_faydark/captain_steelforge/captain_steelforge010.mp3", "", "", 247015049, 192968662, Spawn) + AddConversationOption(conversation, "You are welcome.", "dlg_5_6") + StartConversation(conversation, NPC, Spawn, "Thanks again for all your help!") +end + +function dlg_13_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/exp03_questvo2/captain_steelforge/_exp03/exp03_rgn_greater_faydark/captain_steelforge002.mp3", "", "", 182585775, 224821525, Spawn) + AddConversationOption(conversation, "Grobins don't worry me. I already got rid of the ones at Amethyst Pond.", "dlg_13_2") + StartConversation(conversation, NPC, Spawn, "Private Trillis' report, ya say? Good, looks like 'All Clear' from up top, boys. Now ya best be gettin' to some place safe. Grobins ain't some wee pals to be playing ring-around-the-rosey-posey with.") +end + +function dlg_13_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/exp03_questvo2/captain_steelforge/_exp03/exp03_rgn_greater_faydark/captain_steelforge/captain_steelforge003.mp3", "", "", 2413910951, 3163146972, Spawn) + AddConversationOption(conversation, "I can handle it. What is going on?", "dlg_13_3") + AddConversationOption(conversation, "Into the cave? No thanks.") + StartConversation(conversation, NPC, Spawn, "Not worried, eh? We could all use a bit o' help if yer interested. But it involves goin' into Drippy Caves, so it be okay if ye want to back out.") +end + +function dlg_13_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/exp03_questvo2/captain_steelforge/_exp03/exp03_rgn_greater_faydark/captain_steelforge/captain_steelforge004.mp3", "", "", 4222019617, 563206009, Spawn) + AddConversationOption(conversation, "You got it.", "dlg_13_4") + StartConversation(conversation, NPC, Spawn, "We got here a few minutes ago, and before we could even unload our packs, old Spelunkle darted into the caves to investigate. He's got no brains, but ya gotta admire his spunk. We need to set up the defenses here to contain the grobin, but I need you to check on Spelunkle and make sure he's okay.") +end + +function dlg_13_4(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/exp03_questvo2/captain_steelforge/_exp03/exp03_rgn_greater_faydark/captain_steelforge/captain_steelforge004_offer.mp3", "", "", 2284193320, 823728005, Spawn) + AddConversationOption(conversation, "I'll find him.", "dlg_13_5") + StartConversation(conversation, NPC, Spawn, "I'm sure he's fine, but that don't stop me from worrying.") +end + +function dlg_17_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/exp03_questvo2/captain_steelforge/_exp03/exp03_rgn_greater_faydark/captain_steelforge/captain_steelforge003.mp3", "", "", 2413910951, 3163146972, Spawn) + AddConversationOption(conversation, "I can handle it. What is going on?", "dlg_17_2") + AddConversationOption(conversation, "Into the cave? No thanks.") + StartConversation(conversation, NPC, Spawn, "Not worried, eh? We could all use a bit o' help if yer interested. But it involves goin' into Drippy Caves, so it be okay if ye want to back out.") +end + +function dlg_17_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/exp03_questvo2/captain_steelforge/_exp03/exp03_rgn_greater_faydark/captain_steelforge/captain_steelforge004.mp3", "", "", 4222019617, 563206009, Spawn) + AddConversationOption(conversation, "You got it.", "dlg_17_3") + StartConversation(conversation, NPC, Spawn, "We got here a few minutes ago, and before we could even unload our packs, old Spelunkle darted into the caves to investigate. He's got no brains, but ya gotta admire his spunk. We need to set up the defenses here to contain the grobin, but I need you to check on Spelunkle and make sure he's okay.") +end + +function dlg_17_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/exp03_questvo2/captain_steelforge/_exp03/exp03_rgn_greater_faydark/captain_steelforge/captain_steelforge004_offer.mp3", "", "", 2284193320, 823728005, Spawn) + AddConversationOption(conversation, "I'll find him.", "dlg_17_4") + StartConversation(conversation, NPC, Spawn, "I'm sure he's fine, but that don't stop me from worrying.") +end + +function dlg_22_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/exp03_questvo2/captain_steelforge/_exp03/exp03_rgn_greater_faydark/captain_steelforge002.mp3", "", "", 182585775, 224821525, Spawn) + AddConversationOption(conversation, "Well, I'll be going.", "dlg_22_2") + StartConversation(conversation, NPC, Spawn, "Private Trillis' report, ya say? Good, looks like 'All Clear' from up top, boys. Now ya best be gettin' to some place safe. Grobins ain't some wee pals to be playing ring-around-the-rosey-posey with.") +end + +function dlg_30_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/exp03_questvo2/captain_steelforge/_exp03/exp03_rgn_greater_faydark/captain_steelforge/captain_steelforge006.mp3", "", "", 897068952, 3276150926, Spawn) + AddConversationOption(conversation, "Nah, I took care of it.", "dlg_30_2") + StartConversation(conversation, NPC, Spawn, "The shrumbler queen they 'had'? Did they go and move her or somethin'?") +end + +function dlg_30_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/exp03_questvo2/captain_steelforge/_exp03/exp03_rgn_greater_faydark/captain_steelforge/captain_steelforge007.mp3", "", "", 1161262204, 1265134941, Spawn) + AddConversationOption(conversation, "I couldn't have done it without Spelunkle's help.", "dlg_30_3") + AddConversationOption(conversation, "Yeah, I'm that good.") + StartConversation(conversation, NPC, Spawn, "You did? Amazin'! You solved our problems on your own?") +end + +function dlg_30_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/exp03_questvo2/captain_steelforge/_exp03/exp03_rgn_greater_faydark/captain_steelforge/captain_steelforge008.mp3", "", "", 647162173, 4086848516, Spawn) + AddConversationOption(conversation, "Thank you, Captain Steelforge.", "dlg_30_4") + StartConversation(conversation, NPC, Spawn, "Cleanin' up the rest of these grobins should be a breeze now that you've destroyed their operation. You did a fine job, .. GetName(Spawn) .. . Please take this as payment. ") +end + +function dlg_30_4(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/exp03_questvo2/captain_steelforge/_exp03/exp03_rgn_greater_faydark/captain_steelforge/captain_steelforge009.mp3", "", "", 195987972, 3354737418, Spawn) + AddConversationOption(conversation, "Sure, I can take it.", "dlg_30_5") + AddConversationOption(conversation, "No thanks, I'm busy.") + StartConversation(conversation, NPC, Spawn, "Oh, before you go... could you take this report of our activities to Jenthis Viridar at the Sapling Spur Outpost? You'll find the outpost through Echo Echo Canyon, east of here.") +end + +function dlg_30_5(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/exp03_questvo2/captain_steelforge/_exp03/exp03_rgn_greater_faydark/captain_steelforge/captain_steelforge010.mp3", "", "", 247015049, 192968662, Spawn) + AddConversationOption(conversation, "You are welcome.", "dlg_30_6") + StartConversation(conversation, NPC, Spawn, "Thanks again for all your help!") +end + +--[[ raw_conversations + PlayFlavor(NPC, "voiceover/english/exp03_questvo2/captain_steelforge/_exp03/exp03_rgn_greater_faydark/quest/captain_steelforge_spelunkle_c8071534.mp3", "Make sure Scout Spelunkle is okay. I worry about the little guy.", "glare", 2067280972, 25682853, Spawn) +--]] + diff --git a/server/SpawnScripts/GreaterFaydark/CeftStoutarm.lua b/server/SpawnScripts/GreaterFaydark/CeftStoutarm.lua new file mode 100644 index 000000000..7e8cf4988 --- /dev/null +++ b/server/SpawnScripts/GreaterFaydark/CeftStoutarm.lua @@ -0,0 +1,51 @@ +--[[ + Script Name : SpawnScripts/GreaterFaydark/CeftStoutarm.lua + Script Purpose : Ceft Stoutarm + Script Author : John Adams + Script Date : 2009.03.01 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +function spawn(NPC) + SetPlayerProximityFunction(NPC, 10, "InRange", "LeaveRange") +end + +function respawn(NPC) + spawn(NPC) +end + +function InRange(NPC, Spawn) +end + +function LeaveRange(NPC, Spawn) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "ceft_stoutarm/_exp03/exp03_rgn_greater_faydark/ceft_stoutarm/ceft_001.mp3", "", "", 3428054775, 3943106008, Spawn) + AddConversationOption(conversation, "Is everything okay?", "dlg_19_1") + AddConversationOption(conversation, "I don't care.") + StartConversation(conversation, NPC, Spawn, "Well, hello there. if you're here to buy some ale, you're going to have to wait a while. It seems the magic of getting here affected some of my supplies.") +end + +function dlg_19_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "ceft_stoutarm/_exp03/exp03_rgn_greater_faydark/ceft_stoutarm/ceft_002.mp3", "", "", 1222026654, 3497444691, Spawn) + AddConversationOption(conversation, "Do you want me to get you a stick?", "dlg_19_2") + AddConversationOption(conversation, "A stick? Get it yourself.") + StartConversation(conversation, NPC, Spawn, "It hasn’t been the best trip for me that’s for sure. If you want any of my ale you are going to have to help out. My stir stick was broken by Grum, and now I am in need of another one. But it's not like I can use just any stick.") +end + +function dlg_19_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "ceft_stoutarm/_exp03/exp03_rgn_greater_faydark/ceft_stoutarm/ceft_003.mp3", "", "", 649655305, 3225332806, Spawn) + AddConversationOption(conversation, "I will find the most wicked tree in the faydark.", "dlg_19_3") + StartConversation(conversation, NPC, Spawn, "The stick needs to come from a tree that is home to bees. If you can find it on an evil tree that’s even better since it will impart some of its spirit to the ale.") +end + diff --git a/server/SpawnScripts/GreaterFaydark/CelinistaRyannalis.lua b/server/SpawnScripts/GreaterFaydark/CelinistaRyannalis.lua new file mode 100644 index 000000000..5e70f2ecd --- /dev/null +++ b/server/SpawnScripts/GreaterFaydark/CelinistaRyannalis.lua @@ -0,0 +1,50 @@ +--[[ + Script Name : SpawnScripts/GreaterFaydark/CelinistaRyannalis.lua + Script Purpose : Celinista Ryannalis + Script Author : John Adams + Script Date : 2009.03.01 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +function spawn(NPC) + SetPlayerProximityFunction(NPC, 10, "InRange", "LeaveRange") +end + +function respawn(NPC) + spawn(NPC) +end + +function InRange(NPC, Spawn) +end + +function LeaveRange(NPC, Spawn) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_3_1011.mp3", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "I would like the writ: Scorched Skeletal Wizards", "dlg_12_1") + AddConversationOption(conversation, "I would like the writ: Fayflies") + AddConversationOption(conversation, "I will return later to lend my aid.") + StartConversation(conversation, NPC, Spawn, "Welcome to the Order of Arcane, .. GetName(Spawn) .. . We could use your assistance if you are willing to lend a hand.") + if convo==13 then + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_3_1011.mp3", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "I would like the writ: Scorched Skeletal Wizards", "dlg_13_1") + AddConversationOption(conversation, "I would like the writ: Fayflies") + AddConversationOption(conversation, "I will return later to lend my aid.") + StartConversation(conversation, NPC, Spawn, "Welcome to the Order of Arcane, .. GetName(Spawn) .. . We could use your assistance if you are willing to lend a hand.") + end + +end + +function dlg_13_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Thank you, I'll get started right away.", "dlg_13_2") + StartConversation(conversation, NPC, Spawn, "The Order of the Arcane would like for you to eliminate scorched skeletal wizards to further our cause. Doing so will earn you favor with our organization.") +end + diff --git a/server/SpawnScripts/GreaterFaydark/CommanderMarcusTraeis.lua b/server/SpawnScripts/GreaterFaydark/CommanderMarcusTraeis.lua new file mode 100644 index 000000000..90d5e4b09 --- /dev/null +++ b/server/SpawnScripts/GreaterFaydark/CommanderMarcusTraeis.lua @@ -0,0 +1,28 @@ +--[[ + Script Name : SpawnScripts/GreaterFaydark/CommanderMarcusTraeis.lua + Script Purpose : Commander Marcus Traeis + Script Author : John Adams + Script Date : 2009.03.01 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +function spawn(NPC) + SetPlayerProximityFunction(NPC, 10, "InRange", "LeaveRange") +end + +function respawn(NPC) + spawn(NPC) +end + +function InRange(NPC, Spawn) +end + +function LeaveRange(NPC, Spawn) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + + PlayFlavor(NPC, "", "Be careful if you're planning on entering the elven city. Visitors are not welcome there.", "", 1689589577, 4560189, Spawn) +end + diff --git a/server/SpawnScripts/GreaterFaydark/CorrigStonecutter.lua b/server/SpawnScripts/GreaterFaydark/CorrigStonecutter.lua new file mode 100644 index 000000000..3339a68ca --- /dev/null +++ b/server/SpawnScripts/GreaterFaydark/CorrigStonecutter.lua @@ -0,0 +1,38 @@ +--[[ + Script Name : SpawnScripts/GreaterFaydark/CorrigStonecutter.lua + Script Purpose : Corrig Stonecutter + Script Author : John Adams + Script Date : 2009.03.01 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +function spawn(NPC) + SetPlayerProximityFunction(NPC, 10, "InRange", "LeaveRange") +end + +function respawn(NPC) + spawn(NPC) +end + +function InRange(NPC, Spawn) +end + +function LeaveRange(NPC, Spawn) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + + choice = math.random(1,3) + + if choice == 1 then + PlayFlavor(NPC, "", "There's nothing wrong with looking, is there?", "hello", 1689589577, 4560189, Spawn) + elseif choice == 2 then + PlayFlavor(NPC, "", "All right here's all the goods listed. If you find anything you want, let me know.", "", 1689589577, 4560189, Spawn) + elseif choice == 3 then + PlayFlavor(NPC, "", "I've got the goods if you've got the time.", "beckon", 1689589577, 4560189, Spawn) + else + end + +end + diff --git a/server/SpawnScripts/GreaterFaydark/Cucumber.lua b/server/SpawnScripts/GreaterFaydark/Cucumber.lua new file mode 100644 index 000000000..6734361c5 --- /dev/null +++ b/server/SpawnScripts/GreaterFaydark/Cucumber.lua @@ -0,0 +1,18 @@ +--[[ + Script Name : SpawnScripts/GreaterFaydark/Cucumber.lua + Script Purpose : None, just me screwing around + Script Author : Jabantiz + Script Date : 5/31/2018 + Script Notes : +--]] + +function spawn(NPC) +end + +function respawn(NPC) + spawn(NPC) +end + +function death(NPC, Spawn) + KillSpawn(Spawn, NPC) +end \ No newline at end of file diff --git a/server/SpawnScripts/GreaterFaydark/DanariaRedvine.lua b/server/SpawnScripts/GreaterFaydark/DanariaRedvine.lua new file mode 100644 index 000000000..63c82f3a7 --- /dev/null +++ b/server/SpawnScripts/GreaterFaydark/DanariaRedvine.lua @@ -0,0 +1,31 @@ +--[[ + Script Name : SpawnScripts/GreaterFaydark/DanariaRedvine.lua + Script Purpose : Danaria Redvine + Script Author : John Adams + Script Date : 2009.03.01 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +function spawn(NPC) + SetPlayerProximityFunction(NPC, 10, "InRange", "LeaveRange") +end + +function respawn(NPC) + spawn(NPC) +end + +function InRange(NPC, Spawn) +end + +function LeaveRange(NPC, Spawn) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_2_1067.mp3", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Nothing, thanks.", "dlg_5_1") + StartConversation(conversation, NPC, Spawn, "Hello. Do you need something?") +end + diff --git a/server/SpawnScripts/GreaterFaydark/DarukGraniteNoseDobbson.lua b/server/SpawnScripts/GreaterFaydark/DarukGraniteNoseDobbson.lua new file mode 100644 index 000000000..2912057b5 --- /dev/null +++ b/server/SpawnScripts/GreaterFaydark/DarukGraniteNoseDobbson.lua @@ -0,0 +1,28 @@ +--[[ + Script Name : SpawnScripts/GreaterFaydark/DarukGraniteNoseDobbson.lua + Script Purpose : Daruk Granite Nose Dobbson + Script Author : John Adams + Script Date : 2009.03.01 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +function spawn(NPC) + SetPlayerProximityFunction(NPC, 10, "InRange", "LeaveRange") +end + +function respawn(NPC) + spawn(NPC) +end + +function InRange(NPC, Spawn) +end + +function LeaveRange(NPC, Spawn) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + + PlayFlavor(NPC, "voiceover/english/exp03_questvo2/daruk_granite_nose_dobbson/_exp03/exp03_rgn_greater_faydark/quest/scp/part_three/daruk_notonquest_f4793c32.mp3", "Don't bother me, I'm planning!", "", 400726950, 222322887, Spawn) +end + diff --git a/server/SpawnScripts/GreaterFaydark/DerekTravllor.lua b/server/SpawnScripts/GreaterFaydark/DerekTravllor.lua new file mode 100644 index 000000000..30a8f4c9e --- /dev/null +++ b/server/SpawnScripts/GreaterFaydark/DerekTravllor.lua @@ -0,0 +1,28 @@ +--[[ + Script Name : SpawnScripts/GreaterFaydark/DerekTravllor.lua + Script Purpose : Derek Travllor + Script Author : John Adams + Script Date : 2009.03.01 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +function spawn(NPC) + SetPlayerProximityFunction(NPC, 10, "InRange", "LeaveRange") +end + +function respawn(NPC) + spawn(NPC) +end + +function InRange(NPC, Spawn) +end + +function LeaveRange(NPC, Spawn) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + + PlayFlavor(NPC, "", "This is such a lovely city.", "", 1689589577, 4560189, Spawn) +end + diff --git a/server/SpawnScripts/GreaterFaydark/DhalaVeera.lua b/server/SpawnScripts/GreaterFaydark/DhalaVeera.lua new file mode 100644 index 000000000..ed326ff6d --- /dev/null +++ b/server/SpawnScripts/GreaterFaydark/DhalaVeera.lua @@ -0,0 +1,28 @@ +--[[ + Script Name : SpawnScripts/GreaterFaydark/DhalaVeera.lua + Script Purpose : Dhala Veera + Script Author : John Adams + Script Date : 2009.03.01 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +function spawn(NPC) + SetPlayerProximityFunction(NPC, 10, "InRange", "LeaveRange") +end + +function respawn(NPC) + spawn(NPC) +end + +function InRange(NPC, Spawn) +end + +function LeaveRange(NPC, Spawn) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + + PlayFlavor(NPC, "voiceover/english/exp03_questvo2/dhala_veera/_exp03/exp03_rgn_greater_faydark/quest/scp/dhala_veera_notonquest_80efa18a.mp3", "Welcome, friend.", "", 879274723, 3802246177, Spawn) +end + diff --git a/server/SpawnScripts/GreaterFaydark/DirkiGerika.lua b/server/SpawnScripts/GreaterFaydark/DirkiGerika.lua new file mode 100644 index 000000000..29ad0cb23 --- /dev/null +++ b/server/SpawnScripts/GreaterFaydark/DirkiGerika.lua @@ -0,0 +1,28 @@ +--[[ + Script Name : SpawnScripts/GreaterFaydark/DirkiGerika.lua + Script Purpose : Dirki Gerika + Script Author : John Adams + Script Date : 2009.03.01 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +function spawn(NPC) + SetPlayerProximityFunction(NPC, 10, "InRange", "LeaveRange") +end + +function respawn(NPC) + spawn(NPC) +end + +function InRange(NPC, Spawn) +end + +function LeaveRange(NPC, Spawn) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + + PlayFlavor(NPC, "", "What's that?", "confused", 1689589577, 4560189, Spawn) +end + diff --git a/server/SpawnScripts/GreaterFaydark/EagereyeMayweed.lua b/server/SpawnScripts/GreaterFaydark/EagereyeMayweed.lua new file mode 100644 index 000000000..11c38038b --- /dev/null +++ b/server/SpawnScripts/GreaterFaydark/EagereyeMayweed.lua @@ -0,0 +1,28 @@ +--[[ + Script Name : SpawnScripts/GreaterFaydark/EagereyeMayweed.lua + Script Purpose : Eagereye Mayweed + Script Author : John Adams + Script Date : 2009.03.01 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +function spawn(NPC) + SetPlayerProximityFunction(NPC, 10, "InRange", "LeaveRange") +end + +function respawn(NPC) + spawn(NPC) +end + +function InRange(NPC, Spawn) +end + +function LeaveRange(NPC, Spawn) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + + PlayFlavor(NPC, "", "I'm eager to assist you!", "", 1689589577, 4560189, Spawn) +end + diff --git a/server/SpawnScripts/GreaterFaydark/EbnixCogsworth.lua b/server/SpawnScripts/GreaterFaydark/EbnixCogsworth.lua new file mode 100644 index 000000000..c4757ef3e --- /dev/null +++ b/server/SpawnScripts/GreaterFaydark/EbnixCogsworth.lua @@ -0,0 +1,31 @@ +--[[ + Script Name : SpawnScripts/GreaterFaydark/EbnixCogsworth.lua + Script Purpose : Ebnix Cogsworth + Script Author : John Adams + Script Date : 2009.03.01 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +function spawn(NPC) + SetPlayerProximityFunction(NPC, 10, "InRange", "LeaveRange") +end + +function respawn(NPC) + spawn(NPC) +end + +function InRange(NPC, Spawn) +end + +function LeaveRange(NPC, Spawn) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_1_1006.mp3", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "I understand.", "dlg_65_1") + StartConversation(conversation, NPC, Spawn, "You've yet to become a crafter. Please return once you've learned some crafting and I'll teach you more.") +end + diff --git a/server/SpawnScripts/GreaterFaydark/EleoonaFaleisinae.lua b/server/SpawnScripts/GreaterFaydark/EleoonaFaleisinae.lua new file mode 100644 index 000000000..06b4f4d23 --- /dev/null +++ b/server/SpawnScripts/GreaterFaydark/EleoonaFaleisinae.lua @@ -0,0 +1,75 @@ +--[[ + Script Name : SpawnScripts/GreaterFaydark/EleoonaFaleisinae.lua + Script Purpose : Eleoona Faleisinae + Script Author : John Adams + Script Date : 2009.03.01 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +function spawn(NPC) + SetPlayerProximityFunction(NPC, 10, "InRange", "LeaveRange") +end + +function respawn(NPC) + spawn(NPC) +end + +function InRange(NPC, Spawn) + choice = math.random(1,3) + + if choice == 1 then + PlayFlavor(NPC, "voiceover/english/exp03_questvo/eleoona_faleisinae/_exp03/exp03_cty_kelethin/quest/quest_intro_eleoona_hail_2e22fc60.mp3", "Kelethin belongs to the Fae now.", "", 1403528353, 3139849181, Spawn) + elseif choice == 2 then + PlayFlavor(NPC, "voiceover/english/exp03_questvo/eleoona_faleisinae/_exp03/exp03_cty_kelethin/quest/quest_intro_eleoona_hail_2e3cf704.mp3", "Times were much simpler when I was younger. So much has changed since then!", "", 1966167640, 4246981561, Spawn) + elseif choice == 3 then + PlayFlavor(NPC, "voiceover/english/exp03_questvo/eleoona_faleisinae/_exp03/exp03_cty_kelethin/quest/quest_intro_eleoona_hail_60d7f941.mp3", "Nothing makes me laugh more than seeing someone take a wrong turn off a platform!", "chuckle", 2980400722, 2578144339, Spawn) + else + end +end + +function LeaveRange(NPC, Spawn) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/exp03_questvo/eleoona_faleisinae/_exp03/exp03_cty_kelethin/tutorials/qst_eleoona/qst_eleoona001.mp3", "", "", 2570228484, 695828840, Spawn) + AddConversationOption(conversation, "Jalmari Keletana sent me to ask your advice about the Grender.", "dlg_5_1") + AddConversationOption(conversation, "I seek nothing at this time.") + StartConversation(conversation, NPC, Spawn, "What do you seek?") +end + +function dlg_5_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/exp03_questvo/eleoona_faleisinae/_exp03/exp03_cty_kelethin/tutorials/qst_eleoona/qst_eleoona002.mp3", "", "", 3929358033, 309978465, Spawn) + AddConversationOption(conversation, "They say that?", "dlg_5_2") + StartConversation(conversation, NPC, Spawn, "The Grender? I've heard of it. They say it breathes fire and belches a thick gaseous cloud that poisons all it touches! They say its eyes are red hot coals and if you stare into them, you'll be blinded!") +end + +function dlg_5_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/exp03_questvo/eleoona_faleisinae/_exp03/exp03_cty_kelethin/tutorials/qst_eleoona/qst_eleoona003.mp3", "", "", 2961784962, 1653403158, Spawn) + AddConversationOption(conversation, "Working with Kalamar Vesinger, I've located the Grender's lair beneath Kelethin. Jalmari wants to know what you recommend we do.", "dlg_5_3") + StartConversation(conversation, NPC, Spawn, "Of course not! Heehee ... I'm just kidding! What do you need advice about?") +end + +function dlg_5_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/exp03_questvo/eleoona_faleisinae/_exp03/exp03_cty_kelethin/tutorials/qst_eleoona/qst_eleoona004.mp3", "", "", 3699665352, 534069949, Spawn) + AddConversationOption(conversation, "But I...oh, nevermind.", "dlg_5_4") + StartConversation(conversation, NPC, Spawn, "I've no time for your foolishness! I'm planning the next social event for the self-defense force and it does not include waltzing with the Grender. Please, take your jokes elsewhere.") +end + +--[[ raw_conversations + PlayFlavor(NPC, "voiceover/english/exp03_questvo/eleoona_faleisinae/_exp03/exp03_cty_kelethin/quest/quest_intro_eleoona_hail_60d7f941.mp3", "Nothing makes me laugh more than seeing someone take a wrong turn off a platform!", "chuckle", 2980400722, 2578144339, Spawn) + PlayFlavor(NPC, "voiceover/english/exp03_questvo/eleoona_faleisinae/_exp03/exp03_cty_kelethin/quest/quest_intro_eleoona_hail_2e3cf704.mp3", "Times were much simpler when I was younger. So much has changed since then!", "", 1966167640, 4246981561, Spawn) + PlayFlavor(NPC, "voiceover/english/exp03_questvo/eleoona_faleisinae/_exp03/exp03_cty_kelethin/quest/quest_intro_eleoona_hail_2e22fc60.mp3", "Kelethin belongs to the Fae now.", "", 1403528353, 3139849181, Spawn) +--]] + diff --git a/server/SpawnScripts/GreaterFaydark/EloncaNusback.lua b/server/SpawnScripts/GreaterFaydark/EloncaNusback.lua new file mode 100644 index 000000000..be271b8d4 --- /dev/null +++ b/server/SpawnScripts/GreaterFaydark/EloncaNusback.lua @@ -0,0 +1,72 @@ +--[[ + Script Name : SpawnScripts/GreaterFaydark/EloncaNusback.lua + Script Purpose : Elonca Nusback + Script Author : John Adams + Script Date : 2009.03.01 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +function spawn(NPC) + SetPlayerProximityFunction(NPC, 10, "InRange", "LeaveRange") +end + +function respawn(NPC) + spawn(NPC) +end + +function InRange(NPC, Spawn) +end + +function LeaveRange(NPC, Spawn) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "elonca_nusback/_exp03/exp03_rgn_greater_faydark/elonca_nusback/elonca001.mp3", "", "", 1353203304, 503876671, Spawn) + AddConversationOption(conversation, "Sorry. What are you doing here?", "dlg_1_1") + AddConversationOption(conversation, "I'll leave you alone.") + StartConversation(conversation, NPC, Spawn, "Don't give away our position! We've got some serious work to do 'ere!") +end + +function dlg_1_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "elonca_nusback/_exp03/exp03_rgn_greater_faydark/elonca_nusback/elonca002.mp3", "", "", 981351697, 2920342348, Spawn) + AddConversationOption(conversation, "That sounds like a lot of work for just a handful of you.", "dlg_1_2") + AddConversationOption(conversation, "I'll leave you to it.") + StartConversation(conversation, NPC, Spawn, "We are liberators! Those nasty Crushbone orcs 'ave taken some of our kin hostage, and we aim to free 'em!") +end + +function dlg_1_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "elonca_nusback/_exp03/exp03_rgn_greater_faydark/elonca_nusback/elonca003.mp3", "", "", 2424859748, 3864182443, Spawn) + AddConversationOption(conversation, "How could I help you?", "dlg_1_3") + AddConversationOption(conversation, "No thanks, shorty.") + StartConversation(conversation, NPC, Spawn, "Aye, we 'ave our work cut out fer us. Say, someone like you would be a great 'elp in our fight against the orcs!") +end + +function dlg_1_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "elonca_nusback/_exp03/exp03_rgn_greater_faydark/elonca_nusback/elonca004.mp3", "", "", 3150714366, 582904965, Spawn) + AddConversationOption(conversation, "What kind of trophies?", "dlg_1_4") + AddConversationOption(conversation, "Not interested.") + StartConversation(conversation, NPC, Spawn, "In order to rescue our kin, we need the orcs demoralized. If you take trophies from their finest warriors, that will 'elp us wear 'em down!") +end + +function dlg_1_4(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "elonca_nusback/_exp03/exp03_rgn_greater_faydark/elonca_nusback/elonca005.mp3", "", "", 3498749910, 2147058017, Spawn) + AddConversationOption(conversation, "I'll do it.", "dlg_1_5") + AddConversationOption(conversation, "Not my problem really.") + StartConversation(conversation, NPC, Spawn, "Their centurions are always prancin' about with their fancy belts. If you collected a good number of 'em, that would show that they ain't so tough!") +end + diff --git a/server/SpawnScripts/GreaterFaydark/EvaCorunnothes.lua b/server/SpawnScripts/GreaterFaydark/EvaCorunnothes.lua new file mode 100644 index 000000000..11a17b42e --- /dev/null +++ b/server/SpawnScripts/GreaterFaydark/EvaCorunnothes.lua @@ -0,0 +1,151 @@ +--[[ + Script Name : SpawnScripts/GreaterFaydark/EvaCorunnothes.lua + Script Purpose : Eva Corunno'thes + Script Author : John Adams + Script Date : 2009.03.01 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +function spawn(NPC) + SetPlayerProximityFunction(NPC, 10, "InRange", "LeaveRange") +end + +function respawn(NPC) + spawn(NPC) +end + +function InRange(NPC, Spawn) +end + +function LeaveRange(NPC, Spawn) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_2_1053.mp3", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "You're Tunare's prophet.", "dlg_19_1") + AddConversationOption(conversation, "I'm sorry to bother you. Excuse me.") + StartConversation(conversation, NPC, Spawn, "Tunare's blessings be with you. How may I assist you?") + if convo==20 then + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_3_1053.mp3", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "You're Tunare's prophet.", "dlg_20_1") + AddConversationOption(conversation, "I'm sorry to bother you. Excuse me.") + StartConversation(conversation, NPC, Spawn, "Tunare's blessings be with you. How may I assist you?") + end + +end + +function dlg_19_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Yes.", "dlg_19_2") + AddConversationOption(conversation, "I'm not sure.") + AddConversationOption(conversation, "No.") + StartConversation(conversation, NPC, Spawn, "Correct. I am the High Priestess of Growth, one of Tunare's faithful. Are you a follower of the Mother of All as well?") +end + +function dlg_19_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "How can I follow Tunare?") + AddConversationOption(conversation, "I must think about this.", "dlg_19_3") + StartConversation(conversation, NPC, Spawn, "The blessings of Tunare surround us, for she is not only Mother of All, but goddess of Growth and Nature. If you wish to become one of her devotees, you need but ask me and I will help you find the way.") +end + +function dlg_19_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "May I learn more about the Mother of All and Growth?", "dlg_19_4") + AddConversationOption(conversation, "I need to think about this before I continue.") + StartConversation(conversation, NPC, Spawn, "The way of Tunare is not an easy path. There are those who would foul the soil, destroy nature's bounty and claim that it is 'progress.' The Mother of All will not sit idly by and watch what she has given us be ruined.") +end + +function dlg_19_4(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "She is deserving of our faith.", "dlg_19_5") + AddConversationOption(conversation, "And Growth?") + AddConversationOption(conversation, "I'll be on my way now.") + StartConversation(conversation, NPC, Spawn, "The Mother of All is a name for our sacred lady, Tunare, Goddess of Life and Growth. She resides upon the Plane of Growth and watches over all of her creations. She is awakening from her long slumber to once again bless her faithful followers.") +end + +function dlg_19_5(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "And now she will return?") + AddConversationOption(conversation, "I'll be on my way now.", "dlg_19_6") + StartConversation(conversation, NPC, Spawn, "Growth is the power of creation, a force that maintains and empowers all living things. It is Tunare's gift to us, that Norrath continue to thrive even during her long absence.") +end + +function dlg_19_6(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "I'll be on my way now.", "dlg_19_7") + StartConversation(conversation, NPC, Spawn, "Faith and patience are always rewarded, .. GetName(Spawn) .. . Though the gods, for whatever purpose, withdrew from our realms, they are returning. No one is more deserving of our service than Tunare.") +end + +function dlg_20_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Yes.", "dlg_20_2") + AddConversationOption(conversation, "I'm not sure.") + AddConversationOption(conversation, "No.") + StartConversation(conversation, NPC, Spawn, "Correct. I am the High Priestess of Growth, one of Tunare's faithful. Are you a follower of the Mother of All as well?") +end + +function dlg_20_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "How can I follow Tunare?", "dlg_20_3") + AddConversationOption(conversation, "I must think about this.") + StartConversation(conversation, NPC, Spawn, "The blessings of Tunare surround us, for she is not only Mother of All, but goddess of Growth and Nature. If you wish to become one of her devotees, you need but ask me and I will help you find the way.") +end + +function dlg_20_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "May I learn more about the Mother of All and Growth?", "dlg_20_4") + AddConversationOption(conversation, "I need to think about this before I continue.") + StartConversation(conversation, NPC, Spawn, "The way of Tunare is not an easy path. There are those who would foul the soil, destroy nature's bounty and claim that it is 'progress.' The Mother of All will not sit idly by and watch what she has given us be ruined.") +end + +function dlg_20_4(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "She is deserving of our faith.", "dlg_20_5") + AddConversationOption(conversation, "And Growth?") + AddConversationOption(conversation, "I'll be on my way now.") + StartConversation(conversation, NPC, Spawn, "The Mother of All is a name for our sacred lady, Tunare, Goddess of Life and Growth. She resides upon the Plane of Growth and watches over all of her creations. She is awakening from her long slumber to once again bless her faithful followers.") +end + +function dlg_20_5(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "I'll be on my way now.", "dlg_20_6") + StartConversation(conversation, NPC, Spawn, "Faith and patience are always rewarded, .. GetName(Spawn) .. . Though the gods, for whatever purpose, withdrew from our realms, they are returning. No one is more deserving of our service than Tunare.") +end + diff --git a/server/SpawnScripts/GreaterFaydark/GibrienMarsden.lua b/server/SpawnScripts/GreaterFaydark/GibrienMarsden.lua new file mode 100644 index 000000000..ffa01d7d9 --- /dev/null +++ b/server/SpawnScripts/GreaterFaydark/GibrienMarsden.lua @@ -0,0 +1,211 @@ +--[[ + Script Name : SpawnScripts/GreaterFaydark/GibrienMarsden.lua + Script Purpose : Gibrien Marsden + Script Author : John Adams + Script Date : 2009.03.01 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +function spawn(NPC) + SetPlayerProximityFunction(NPC, 10, "InRange", "LeaveRange") +end + +function respawn(NPC) + spawn(NPC) +end + +function InRange(NPC, Spawn) +end + +function LeaveRange(NPC, Spawn) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + choice = math.random(1,2) + + if choice == 1 then + PlayFlavor(NPC, "", "Glad to see you around.", "", 1689589577, 4560189, Spawn) + elseif choice == 2 then + PlayFlavor(NPC, "", "Good day to live in the trees.", "", 1689589577, 4560189, Spawn) + else + end + + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_1_1022.mp3", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "I'm interested in becoming a citizen of Kelethin.", "dlg_57_1") + AddConversationOption(conversation, "I'd like to work on my citizenship with Kelethin.") + AddConversationOption(conversation, "Have I proven my worth to Kelethin yet?") + AddConversationOption(conversation, "Nothing right now, thanks.") + StartConversation(conversation, NPC, Spawn, "What would you like more information about?") + if convo==58 then + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_1_1022.mp3", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "I'm interested in becoming a citizen of Kelethin.", "dlg_58_1") + AddConversationOption(conversation, "I'd like to work on my citizenship with Kelethin.") + AddConversationOption(conversation, "Have I proven my worth to Kelethin yet?") + AddConversationOption(conversation, "Nothing right now, thanks.") + StartConversation(conversation, NPC, Spawn, "What would you like more information about?") + end + + if convo==59 then + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_1_1022.mp3", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "I'm interested in becoming a citizen of Kelethin.", "dlg_59_1") + AddConversationOption(conversation, "I'd like to work on my citizenship with Kelethin.") + AddConversationOption(conversation, "Have I proven my worth to Kelethin yet?") + AddConversationOption(conversation, "Nothing right now, thanks.") + StartConversation(conversation, NPC, Spawn, "What would you like more information about?") + end + + if convo==60 then + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_2_1022.mp3", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "I'm interested in becoming a citizen of Kelethin.", "dlg_60_1") + AddConversationOption(conversation, "I'd like to work on my citizenship with Kelethin.") + AddConversationOption(conversation, "Have I proven my worth to Kelethin yet?") + AddConversationOption(conversation, "Nothing right now, thanks.") + StartConversation(conversation, NPC, Spawn, "What would you like more information about?") + end + + if convo==61 then + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_3_1022.mp3", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "I'm interested in becoming a citizen of Kelethin.", "dlg_61_1") + AddConversationOption(conversation, "I'd like to work on my citizenship with Kelethin.") + AddConversationOption(conversation, "Have I proven my worth to Kelethin yet?") + AddConversationOption(conversation, "Nothing right now, thanks.") + StartConversation(conversation, NPC, Spawn, "What would you like more information about?") + end + + if convo==62 then + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_2_1022.mp3", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "I'd like to work on my citizenship with Kelethin.", "dlg_62_1") + AddConversationOption(conversation, "Have I proven my worth to Kelethin yet?") + AddConversationOption(conversation, "Nothing right now, thanks.") + StartConversation(conversation, NPC, Spawn, "What would you like more information about?") + end + + if convo==63 then + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_2_1022.mp3", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "I'd like to work on my citizenship with Kelethin.", "dlg_63_1") + AddConversationOption(conversation, "Have I proven my worth to Kelethin yet?") + AddConversationOption(conversation, "Nothing right now, thanks.") + StartConversation(conversation, NPC, Spawn, "What would you like more information about?") + end + +end + +function dlg_57_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "How do I do that?") + StartConversation(conversation, NPC, Spawn, "Hmm...let me see. Yes, it looks as though you've been doing quite a number of hours of community service for Kelethin. Congratulations, .. GetName(Spawn) .. . You now have the right to apply with Queen Amree for citizenship!") +end + +function dlg_58_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Nevermind, I changed my mind.", "dlg_58_2") + StartConversation(conversation, NPC, Spawn, "Are you now? There are a couple of administrative tasks we need to take care of before you can get started. First off, where are you currently considered a citizen? Or are you currently in exile?") +end + +function dlg_59_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "All right.") + AddConversationOption(conversation, "I need to take care of something else first.", "dlg_59_2") + StartConversation(conversation, NPC, Spawn, "The first thing Queen Amree requests is that you familiarize yourself with the community before you make any commitments that you cannot reverse. Please speak with Nimess Sessi, a courtier in the Royal Court. He only speaks Faerlie, so before you speak with him, if you haven't done so already Miella Maarsitotts will teach you.") +end + +function dlg_60_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "How do I do that?") + StartConversation(conversation, NPC, Spawn, "Hmm...let me see. Yes, it looks as though you've been doing quite a number of hours of community service for Kelethin. Congratulations, .. GetName(Spawn) .. . You now have the right to apply with Queen Amree for citizenship!") +end + +function dlg_60_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "That sounds great!", "dlg_60_3") + StartConversation(conversation, NPC, Spawn, "It's very simple, really. The Queen will ask you some questions to ascertain your sincerity about making this commitment and then she'll conduct the ceremony herself!") +end + +function dlg_61_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "All right.") + AddConversationOption(conversation, "I need to take care of something else first.", "dlg_61_2") + StartConversation(conversation, NPC, Spawn, "The first thing Queen Amree requests is that you familiarize yourself with the community before you make any commitments that you cannot reverse. Please speak with Nimess Sessi, a courtier in the Royal Court. He only speaks Faerlie, so before you speak with him, if you haven't done so already Miella Maarsitotts will teach you.") +end + +function dlg_61_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "I'll be back.", "dlg_61_3") + StartConversation(conversation, NPC, Spawn, "Come back once you've done as he recommends and we can get you started on your community tasks.") +end + +function dlg_62_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "All right.", "dlg_62_2") + AddConversationOption(conversation, "I need to take care of something else first.") + StartConversation(conversation, NPC, Spawn, "The first thing Queen Amree requests is that you familiarize yourself with the community before you make any commitments that you cannot reverse. Please speak with Nimess Sessi, a courtier in the Royal Court. He only speaks Faerlie, so before you speak with him, if you haven't done so already Miella Maarsitotts will teach you.") +end + +function dlg_62_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "I'll be back.", "dlg_62_3") + StartConversation(conversation, NPC, Spawn, "Come back once you've done as he recommends and we can get you started on your community tasks.") +end + +function dlg_63_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "How do I do that?") + StartConversation(conversation, NPC, Spawn, "Hmm...let me see. Yes, it looks as though you've been doing quite a number of hours of community service for Kelethin. Congratulations, .. GetName(Spawn) .. . You now have the right to apply with Queen Amree for citizenship!") +end + +function dlg_63_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "That sounds great!", "dlg_63_3") + StartConversation(conversation, NPC, Spawn, "It's very simple, really. The Queen will ask you some questions to ascertain your sincerity about making this commitment and then she'll conduct the ceremony herself!") +end + +function dlg_63_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Thanks!", "dlg_63_4") + StartConversation(conversation, NPC, Spawn, "Best of luck to you, .. GetName(Spawn) .. . Welcome to Kelethin!") +end + +--[[ raw_conversations + PlayFlavor(NPC, "", "Glad to see you around.", "", 1689589577, 4560189, Spawn) + PlayFlavor(NPC, "", "Good day to live in the trees.", "", 1689589577, 4560189, Spawn) +--]] + diff --git a/server/SpawnScripts/GreaterFaydark/GioiaGreenvale.lua b/server/SpawnScripts/GreaterFaydark/GioiaGreenvale.lua new file mode 100644 index 000000000..ab85ce875 --- /dev/null +++ b/server/SpawnScripts/GreaterFaydark/GioiaGreenvale.lua @@ -0,0 +1,36 @@ +--[[ + Script Name : SpawnScripts/GreaterFaydark/GioiaGreenvale.lua + Script Purpose : Gioia Greenvale + Script Author : John Adams + Script Date : 2009.03.01 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +function spawn(NPC) + SetPlayerProximityFunction(NPC, 10, "InRange", "LeaveRange") +end + +function respawn(NPC) + spawn(NPC) +end + +function InRange(NPC, Spawn) +end + +function LeaveRange(NPC, Spawn) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + + choice = math.random(1,2) + + if choice == 1 then + PlayFlavor(NPC, "", "With so many new faces in town, it's hard to keep everyone's names straight!", "", 1689589577, 4560189, Spawn) + elseif choice == 2 then + PlayFlavor(NPC, "", "There are more goods for sale elsewhere in Kelethin, if you know where to look.", "", 1689589577, 4560189, Spawn) + else + end + +end + diff --git a/server/SpawnScripts/GreaterFaydark/GlavariusMarud.lua b/server/SpawnScripts/GreaterFaydark/GlavariusMarud.lua new file mode 100644 index 000000000..b0fe0c47e --- /dev/null +++ b/server/SpawnScripts/GreaterFaydark/GlavariusMarud.lua @@ -0,0 +1,31 @@ +--[[ + Script Name : SpawnScripts/GreaterFaydark/GlavariusMarud.lua + Script Purpose : Glavarius Marud + Script Author : John Adams + Script Date : 2009.03.01 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +function spawn(NPC) + SetPlayerProximityFunction(NPC, 10, "InRange", "LeaveRange") +end + +function respawn(NPC) + spawn(NPC) +end + +function InRange(NPC, Spawn) +end + +function LeaveRange(NPC, Spawn) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "glavarius_marud/_exp03/exp03_rgn_greater_faydark/glavarius_marud/glavarius_marud000.mp3", "", "", 4001683736, 773203562, Spawn) + AddConversationOption(conversation, "A little pretentious, aren't we? Goodbye.", "dlg_44_1") + StartConversation(conversation, NPC, Spawn, "Leave me be. If those Koada'Dal of Felwithe, those... 'New Tunarians', do not believe they need my services as the royal oracle any longer, then I shall just decline to use my abilities for anyone. Hmph.") +end + diff --git a/server/SpawnScripts/GreaterFaydark/Glitterpuff.lua b/server/SpawnScripts/GreaterFaydark/Glitterpuff.lua new file mode 100644 index 000000000..08f16bc9d --- /dev/null +++ b/server/SpawnScripts/GreaterFaydark/Glitterpuff.lua @@ -0,0 +1,38 @@ +--[[ + Script Name : SpawnScripts/GreaterFaydark/Glitterpuff.lua + Script Purpose : Glitterpuff + Script Author : John Adams + Script Date : 2009.02.05 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +function spawn(NPC) + SetPlayerProximityFunction(NPC, 10, "InRange", "LeaveRange") +end + +function respawn(NPC) + spawn(NPC) +end + +function InRange(NPC, Spawn) +end + +function LeaveRange(NPC, Spawn) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + + choice = math.random(1,3) + + if choice == 1 then + PlayFlavor(NPC, "voiceover/english/exp03_questvo2/banker_glitterpuff/_exp03/exp03_rgn_greater_faydark/quest/nursery_banker_glitterpuff_hello_76bdb072.mp3", "Don't worry, we'll take good care of your coin and possessions.", "hello", 1591110716, 2078108189, Spawn) + elseif choice == 2 then + PlayFlavor(NPC, "voiceover/english/exp03_questvo2/banker_glitterpuff/_exp03/exp03_rgn_greater_faydark/quest/nursery_banker_glitterpuff_hello_9897825c.mp3", "Welcome to the Spirit Bloom Nursery branch of the Kelethin First Regional Bank!", "hello", 52408031, 2927648896, Spawn) + elseif choice == 3 then + PlayFlavor(NPC, "voiceover/english/exp03_questvo2/banker_glitterpuff/_exp03/exp03_rgn_greater_faydark/quest/nursery_banker_glitterpuff_hello_8793aa70.mp3", "Don't carry around all that extra weight! Let us hold it for you!", "beckon", 3186681674, 2020413023, Spawn) + else + end + +end + diff --git a/server/SpawnScripts/GreaterFaydark/GlurieStonegrip.lua b/server/SpawnScripts/GreaterFaydark/GlurieStonegrip.lua new file mode 100644 index 000000000..fde2e2e61 --- /dev/null +++ b/server/SpawnScripts/GreaterFaydark/GlurieStonegrip.lua @@ -0,0 +1,102 @@ +--[[ + Script Name : SpawnScripts/GreaterFaydark/GlurieStonegrip.lua + Script Purpose : Glurie Stonegrip + Script Author : John Adams + Script Date : 2009.03.01 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +function spawn(NPC) + SetPlayerProximityFunction(NPC, 10, "InRange", "LeaveRange") +end + +function respawn(NPC) + spawn(NPC) +end + +function InRange(NPC, Spawn) +end + +function LeaveRange(NPC, Spawn) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_1_1003.mp3", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "I would like the writ: Crushbone Pawns", "dlg_4_1") + AddConversationOption(conversation, "I would like the writ: Crushbone Footmen") + AddConversationOption(conversation, "I would like the writ: Crushbone Centurions") + AddConversationOption(conversation, "I will return to assist you, later.") + StartConversation(conversation, NPC, Spawn, "Welcome to the Protectors of Growth, .. GetName(Spawn) .. . We are in need of your help if you are willing to assist us.") + if convo==5 then + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_2_1003.mp3", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "I would like the writ: Crushbone Pawns", "dlg_5_1") + AddConversationOption(conversation, "I would like the writ: Crushbone Footmen") + AddConversationOption(conversation, "I would like the writ: Crushbone Centurions") + AddConversationOption(conversation, "I will return to assist you, later.") + StartConversation(conversation, NPC, Spawn, "Welcome to the Protectors of Growth, .. GetName(Spawn) .. . We are in need of your help if you are willing to assist us.") + end + + if convo==6 then + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_2_1003.mp3", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "I would like the writ: Crushbone Pawns", "dlg_6_1") + AddConversationOption(conversation, "I would like the writ: Crushbone Footmen") + AddConversationOption(conversation, "I would like the writ: Crushbone Centurions") + AddConversationOption(conversation, "I will return to assist you, later.") + StartConversation(conversation, NPC, Spawn, "Welcome to the Protectors of Growth, .. GetName(Spawn) .. . We are in need of your help if you are willing to assist us.") + end + + if convo==7 then + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_3_1003.mp3", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "I would like the writ: Crushbone Pawns", "dlg_7_1") + AddConversationOption(conversation, "I would like the writ: Crushbone Footmen") + AddConversationOption(conversation, "I would like the writ: Crushbone Centurions") + AddConversationOption(conversation, "I will return to assist you, later.") + StartConversation(conversation, NPC, Spawn, "Welcome to the Protectors of Growth, .. GetName(Spawn) .. . We are in need of your help if you are willing to assist us.") + end + + if convo==15 then + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_2_1003.mp3", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "I would like the writ: Crushbone Pawns", "dlg_15_1") + AddConversationOption(conversation, "I would like the writ: Crushbone Footmen") + AddConversationOption(conversation, "I will return to assist you, later.") + StartConversation(conversation, NPC, Spawn, "Welcome to the Protectors of Growth, .. GetName(Spawn) .. . We are in need of your help if you are willing to assist us.") + end + + if convo==16 then + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_2_1003.mp3", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "I would like the writ: Crushbone Pawns", "dlg_16_1") + AddConversationOption(conversation, "I would like the writ: Crushbone Footmen") + AddConversationOption(conversation, "I will return to assist you, later.") + StartConversation(conversation, NPC, Spawn, "Welcome to the Protectors of Growth, .. GetName(Spawn) .. . We are in need of your help if you are willing to assist us.") + end + + if convo==94 then + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_3_1003.mp3", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "I would like the writ: Crushbone Pawns", "dlg_94_1") + AddConversationOption(conversation, "I would like the writ: Crushbone Footmen") + AddConversationOption(conversation, "I will return to assist you, later.") + StartConversation(conversation, NPC, Spawn, "Welcome to the Protectors of Growth, .. GetName(Spawn) .. . We are in need of your help if you are willing to assist us.") + end + + if convo==95 then + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_3_1003.mp3", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "I would like the writ: Crushbone Pawns", "dlg_95_1") + AddConversationOption(conversation, "I would like the writ: Crushbone Footmen") + AddConversationOption(conversation, "I will return to assist you, later.") + StartConversation(conversation, NPC, Spawn, "Welcome to the Protectors of Growth, .. GetName(Spawn) .. . We are in need of your help if you are willing to assist us.") + end + +end + +function dlg_7_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Thank you, I'll get started right away.", "dlg_7_2") + StartConversation(conversation, NPC, Spawn, "The Protectors of Growth would like for you to eliminate Crushbone pawns to further our cause. Doing so will earn you favor with our organization.") +end + diff --git a/server/SpawnScripts/GreaterFaydark/Gomphum.lua b/server/SpawnScripts/GreaterFaydark/Gomphum.lua new file mode 100644 index 000000000..45b48ef25 --- /dev/null +++ b/server/SpawnScripts/GreaterFaydark/Gomphum.lua @@ -0,0 +1,151 @@ +--[[ + Script Name : SpawnScripts/GreaterFaydark/Gomphum.lua + Script Purpose : Gomphum + Script Author : John Adams + Script Date : 2009.03.01 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +function spawn(NPC) + SetPlayerProximityFunction(NPC, 10, "InRange", "LeaveRange") +end + +function respawn(NPC) + spawn(NPC) +end + +function InRange(NPC, Spawn) +end + +function LeaveRange(NPC, Spawn) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/exp03_questvo2/gomphum/_exp03/exp03_rgn_greater_faydark/shroomba/gomphum/gomphum000.mp3", "", "", 3624615111, 858972471, Spawn) + AddConversationOption(conversation, "So long as they allow it?", "dlg_24_1") + StartConversation(conversation, NPC, Spawn, "Gomphum welcomes you to Dyer Mycoria. You are free to stay so long as the grobins allow it.") + if convo==26 then + PlayFlavor(NPC, "voiceover/english/exp03_questvo2/gomphum/_exp03/exp03_rgn_greater_faydark/shroomba/gomphum/gomphum005.mp3", "", "", 3368360641, 1528435648, Spawn) + AddConversationOption(conversation, "I have.", "dlg_26_1") + StartConversation(conversation, NPC, Spawn, "Have you done it?") + end + + if convo==27 then + PlayFlavor(NPC, "voiceover/english/exp03_questvo2/gomphum/_exp03/exp03_rgn_greater_faydark/shroomba/gomphum/gomphum010.mp3", "", "", 4241201770, 2705100899, Spawn) + AddConversationOption(conversation, "Yes, but they will be less of a problem with Pengo and Turkrik gone.", "dlg_27_1") + StartConversation(conversation, NPC, Spawn, "Are the grobins still here?") + end + +end + +function dlg_24_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/exp03_questvo2/gomphum/_exp03/exp03_rgn_greater_faydark/shroomba/gomphum/gomphum001.mp3", "", "", 379711117, 2349384250, Spawn) + AddConversationOption(conversation, "Why don't you force them to leave?", "dlg_24_2") + StartConversation(conversation, NPC, Spawn, "Yes, they are very aggressive. They were not always here. They started to appear recently. It has been determined that they are not children of the earth as we are, so we don't think they sprung from the ground. We think perhaps they dug their way in. We do not mind their presence, but they are destructive, and have been stealing our proto-caplings. It is hard work growing these caplings.") +end + +function dlg_24_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/exp03_questvo2/gomphum/_exp03/exp03_rgn_greater_faydark/shroomba/gomphum/gomphum002.mp3", "", "", 53321845, 3819069977, Spawn) + AddConversationOption(conversation, "What if I killed the grobins?", "dlg_24_3") + StartConversation(conversation, NPC, Spawn, "Gomphum does not understand what you mean. The grobins do not listen to us. Instead they smash things. The grobins have kept us from our west germinarium for some time now, and they are digging up our proto-caplings. It saddens us. They are not Shroomba. Why would they want our proto-caplings?") +end + +function dlg_24_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/exp03_questvo2/gomphum/_exp03/exp03_rgn_greater_faydark/shroomba/gomphum/gomphum003.mp3", "", "", 3848512332, 3031309052, Spawn) + AddConversationOption(conversation, "All right.", "dlg_24_4") + StartConversation(conversation, NPC, Spawn, "That might work. The grobin diggers are our biggest concern. Please, go to our western germinarium and do as you suggest.") +end + +function dlg_24_4(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/exp03_questvo2/gomphum/_exp03/exp03_rgn_greater_faydark/shroomba/gomphum/gomphum004.mp3", "", "", 1140614510, 2295082242, Spawn) + AddConversationOption(conversation, "You're welcome.", "dlg_24_5") + StartConversation(conversation, NPC, Spawn, "Thank you.") +end + +function dlg_26_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/exp03_questvo2/gomphum/_exp03/exp03_rgn_greater_faydark/shroomba/gomphum/gomphum006.mp3", "", "", 103650992, 2944240477, Spawn) + AddConversationOption(conversation, "Pengo and Turkrik?", "dlg_26_2") + StartConversation(conversation, NPC, Spawn, "Ah, this pleases Gomphum. Perhaps this will stop the constant grobin activity. Perhaps they will go back into their cave paths and not return. They will return to Pengo and Turkrik and leave the Shroomba alone.") +end + +function dlg_26_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/exp03_questvo2/gomphum/_exp03/exp03_rgn_greater_faydark/shroomba/gomphum/gomphum007.mp3", "", "", 457205884, 1475917544, Spawn) + AddConversationOption(conversation, "I can take them out, that might stop the grobins from attacking.", "dlg_26_3") + StartConversation(conversation, NPC, Spawn, "Meanest of the grobins. They are like Gomphum, other grobins listen to them. They are why grobins come to Dyer Mycoria.") +end + +function dlg_26_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/exp03_questvo2/gomphum/_exp03/exp03_rgn_greater_faydark/shroomba/gomphum/gomphum008.mp3", "", "", 2731718193, 1770884141, Spawn) + AddConversationOption(conversation, "I will go.", "dlg_26_4") + StartConversation(conversation, NPC, Spawn, "That might happen. Gomphum thinks it is worth trying. Gomphum thanks you for your offer. Go to the cave path to the north west. Down those cave paths you will find them.") +end + +function dlg_26_4(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/exp03_questvo2/gomphum/_exp03/exp03_rgn_greater_faydark/shroomba/gomphum/gomphum009.mp3", "", "", 1786125202, 655475173, Spawn) + AddConversationOption(conversation, "Thank you.", "dlg_26_5") + StartConversation(conversation, NPC, Spawn, "Gomphum wishes you luck.") +end + +function dlg_27_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/exp03_questvo2/gomphum/_exp03/exp03_rgn_greater_faydark/shroomba/gomphum/gomphum011.mp3", "", "", 3639464975, 2923242531, Spawn) + AddConversationOption(conversation, "They also had an orc with them.", "dlg_27_2") + StartConversation(conversation, NPC, Spawn, "Ah, this is good to hear.") +end + +function dlg_27_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/exp03_questvo2/gomphum/_exp03/exp03_rgn_greater_faydark/shroomba/gomphum/gomphum012.mp3", "", "", 3576000828, 164182188, Spawn) + AddConversationOption(conversation, "Uh, yes.", "dlg_27_3") + StartConversation(conversation, NPC, Spawn, "The beast of blue?") +end + +function dlg_27_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/exp03_questvo2/gomphum/_exp03/exp03_rgn_greater_faydark/shroomba/gomphum/gomphum013.mp3", "", "", 665240647, 340790877, Spawn) + AddConversationOption(conversation, "Yes, I will tell Jenthis.", "dlg_27_4") + StartConversation(conversation, NPC, Spawn, "A man spoke to Gomphum of these beasts. He asked that Gomphum tell him if they are spotted, and now they have been. Would you find Jenthis Viridar and tell him as much? He is this man. He says he is south from the canyon our cave paths lead to. Sapling Spur Outpost, was what he called it.") +end + +function dlg_27_4(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/exp03_questvo2/gomphum/_exp03/exp03_rgn_greater_faydark/shroomba/gomphum/gomphum014.mp3", "", "", 1778893315, 841928126, Spawn) + AddConversationOption(conversation, "You are welcome.", "dlg_27_5") + StartConversation(conversation, NPC, Spawn, "Gomphum once again thanks you.") +end + diff --git a/server/SpawnScripts/GreaterFaydark/GrandmasterFeldmanus.lua b/server/SpawnScripts/GreaterFaydark/GrandmasterFeldmanus.lua new file mode 100644 index 000000000..bef513fc9 --- /dev/null +++ b/server/SpawnScripts/GreaterFaydark/GrandmasterFeldmanus.lua @@ -0,0 +1,28 @@ +--[[ + Script Name : SpawnScripts/GreaterFaydark/GrandmasterFeldmanus.lua + Script Purpose : Grandmaster Feldmanus + Script Author : John Adams + Script Date : 2009.03.01 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +function spawn(NPC) + SetPlayerProximityFunction(NPC, 10, "InRange", "LeaveRange") +end + +function respawn(NPC) + spawn(NPC) +end + +function InRange(NPC, Spawn) +end + +function LeaveRange(NPC, Spawn) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + + PlayFlavor(NPC, "", "Come see me later, I may have some work for you once you're more skilled in your trade.", "", 1689589577, 4560189, Spawn) +end + diff --git a/server/SpawnScripts/GreaterFaydark/Grepurp.lua b/server/SpawnScripts/GreaterFaydark/Grepurp.lua new file mode 100644 index 000000000..4dfec8b12 --- /dev/null +++ b/server/SpawnScripts/GreaterFaydark/Grepurp.lua @@ -0,0 +1,28 @@ +--[[ + Script Name : SpawnScripts/GreaterFaydark/Grepurp.lua + Script Purpose : Grepurp + Script Author : John Adams + Script Date : 2009.03.01 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +function spawn(NPC) + SetPlayerProximityFunction(NPC, 10, "InRange", "LeaveRange") +end + +function respawn(NPC) + spawn(NPC) +end + +function InRange(NPC, Spawn) +end + +function LeaveRange(NPC, Spawn) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + + PlayFlavor(NPC, "", "Are you a bard? I am looking for someone to entertain me while I wait.", "", 1689589577, 4560189, Spawn) +end + diff --git a/server/SpawnScripts/GreaterFaydark/GrimplySniffwistle.lua b/server/SpawnScripts/GreaterFaydark/GrimplySniffwistle.lua new file mode 100644 index 000000000..cd3481464 --- /dev/null +++ b/server/SpawnScripts/GreaterFaydark/GrimplySniffwistle.lua @@ -0,0 +1,61 @@ +--[[ + Script Name : SpawnScripts/GreaterFaydark/GrimplySniffwistle.lua + Script Purpose : Grimply Sniffwistle + Script Author : John Adams + Script Date : 2009.03.01 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +function spawn(NPC) + SetPlayerProximityFunction(NPC, 10, "InRange", "LeaveRange") +end + +function respawn(NPC) + spawn(NPC) +end + +function InRange(NPC, Spawn) +end + +function LeaveRange(NPC, Spawn) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "grimply_sniffwistle/_exp03/exp03_rgn_greater_faydark/grimply_sniffwistle/grimply_001.mp3", "", "", 1393243277, 1476468337, Spawn) + AddConversationOption(conversation, "What are you doing out here?", "dlg_21_1") + AddConversationOption(conversation, "Yeah you are small.") + StartConversation(conversation, NPC, Spawn, "Everything here is so huge isn't it? I feel even smaller than normal. It's beautiful.") +end + +function dlg_21_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "grimply_sniffwistle/_exp03/exp03_rgn_greater_faydark/grimply_sniffwistle/grimply_002.mp3", "", "", 4190695975, 702857219, Spawn) + AddConversationOption(conversation, "Is there anything I can do to help? ", "dlg_21_2") + AddConversationOption(conversation, "Sounds like you need professional help.") + StartConversation(conversation, NPC, Spawn, "Well I was... I mean I am an inventor, I make most marvelous things, or I will make them once I can get my thinker thinking.") +end + +function dlg_21_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "grimply_sniffwistle/_exp03/exp03_rgn_greater_faydark/grimply_sniffwistle/grimply_003.mp3", "", "", 3838489501, 105443085, Spawn) + AddConversationOption(conversation, "So... You need fresh cut treant wood?", "dlg_21_3") + AddConversationOption(conversation, "Okay, sounds like you just need your space.") + StartConversation(conversation, NPC, Spawn, "Well let's see, I was working on a woodle fandoogler, to bring me more fresh cut treant wood, but if I remember correctly it ended up just bringing back fish, so I pushed it off the cliff. If I wanted fish, I would make a fishing Fooper.") +end + +function dlg_21_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "grimply_sniffwistle/_exp03/exp03_rgn_greater_faydark/grimply_sniffwistle/grimply_004.mp3", "", "", 2812110834, 1230803512, Spawn) + AddConversationOption(conversation, "Treant chopping I go.", "dlg_21_4") + StartConversation(conversation, NPC, Spawn, "Yes, fresh cut treant wood, thanks. You can stack it up over there when you bring it back. Don't just pick up any log off the ground though, go cut it off a tree yourself, that makes for better fires. As a matter of fact treants give the best smokey smell to just about anything. Oh and if you see my woodle fandoogler kick it for me would you?") +end + diff --git a/server/SpawnScripts/GreaterFaydark/GrullSilverstump.lua b/server/SpawnScripts/GreaterFaydark/GrullSilverstump.lua new file mode 100644 index 000000000..a1e522e91 --- /dev/null +++ b/server/SpawnScripts/GreaterFaydark/GrullSilverstump.lua @@ -0,0 +1,38 @@ +--[[ + Script Name : SpawnScripts/GreaterFaydark/GrullSilverstump.lua + Script Purpose : Grull Silverstump + Script Author : John Adams + Script Date : 2009.02.05 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +function spawn(NPC) + SetPlayerProximityFunction(NPC, 10, "InRange", "LeaveRange") +end + +function respawn(NPC) + spawn(NPC) +end + +function InRange(NPC, Spawn) +end + +function LeaveRange(NPC, Spawn) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + + choice = math.random(1,3) + + if choice == 1 then + PlayFlavor(NPC, "voiceover/english/exp03_questvo2/mender_grull_silverstump/_exp03/exp03_rgn_greater_faydark/quest/nursery_mender_grull_silverstump_hello_ea00152d.mp3", "Ah used to be an adventurer like ye, but ah lost me leg ta a cranky bugbear and had ta give up the profession. Luckily, ah could fall back on me smithy skills for a new stomper and livelihood! Haha!", "converse_male01", 42384471, 1863204866, Spawn) + elseif choice == 2 then + PlayFlavor(NPC, "voiceover/english/exp03_questvo2/mender_grull_silverstump/_exp03/exp03_rgn_greater_faydark/quest/nursery_mender_grull_silverstump_hello_5c10e9eb.mp3", "Ah'll be takin' care o' any dings 'r dents ye get in yer gear. Just bring 'em ta me!", "hello", 441968040, 2307457527, Spawn) + elseif choice == 3 then + PlayFlavor(NPC, "voiceover/english/exp03_questvo2/mender_grull_silverstump/_exp03/exp03_rgn_greater_faydark/quest/nursery_mender_grull_silverstump_hello_8d3b3b74.mp3", "The wee fae are pretty acceptin' o' outsiders if ye be respectful to 'em. They really dunnae like the orcs, tho', which is jus' fine by me!", "hello", 1095614171, 2889548526, Spawn) + else + end + +end + diff --git a/server/SpawnScripts/GreaterFaydark/Grum.lua b/server/SpawnScripts/GreaterFaydark/Grum.lua new file mode 100644 index 000000000..2f7f29a58 --- /dev/null +++ b/server/SpawnScripts/GreaterFaydark/Grum.lua @@ -0,0 +1,51 @@ +--[[ + Script Name : SpawnScripts/GreaterFaydark/Grum.lua + Script Purpose : Grum + Script Author : John Adams + Script Date : 2009.03.01 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +function spawn(NPC) + SetPlayerProximityFunction(NPC, 10, "InRange", "LeaveRange") +end + +function respawn(NPC) + spawn(NPC) +end + +function InRange(NPC, Spawn) +end + +function LeaveRange(NPC, Spawn) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "grum/_exp03/exp03_rgn_greater_faydark/grum/grum_001.mp3", "", "", 2456014343, 373150177, Spawn) + AddConversationOption(conversation, "Well what do you want?", "dlg_17_1") + AddConversationOption(conversation, "No way. Stay away!") + StartConversation(conversation, NPC, Spawn, "Oh I see you I am hungry bring me small things. My mouth not so big to eat big things.") +end + +function dlg_17_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "grum/_exp03/exp03_rgn_greater_faydark/grum/grum_002.mp3", "", "", 2366675475, 910741448, Spawn) + AddConversationOption(conversation, "Sure.", "dlg_17_2") + AddConversationOption(conversation, "No way.") + StartConversation(conversation, NPC, Spawn, "Spiders bring me spider legs I dip them in goop here make them taste smashing. Lots of legs if each spider has two, six legs you bring me many more right yes?") +end + +function dlg_17_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "grum/_exp03/exp03_rgn_greater_faydark/grum/grum_003.mp3", "", "", 2187487488, 316668200, Spawn) + AddConversationOption(conversation, "Yeah, I am going to get you some.", "dlg_17_3") + StartConversation(conversation, NPC, Spawn, "Hungry! You bring snacks?") +end + diff --git a/server/SpawnScripts/GreaterFaydark/GuardYlivaan.lua b/server/SpawnScripts/GreaterFaydark/GuardYlivaan.lua new file mode 100644 index 000000000..d50921eb4 --- /dev/null +++ b/server/SpawnScripts/GreaterFaydark/GuardYlivaan.lua @@ -0,0 +1,28 @@ +--[[ + Script Name : SpawnScripts/GreaterFaydark/GuardYlivaan.lua + Script Purpose : Guard Ylivaan + Script Author : John Adams + Script Date : 2009.03.01 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +function spawn(NPC) + SetPlayerProximityFunction(NPC, 10, "InRange", "LeaveRange") +end + +function respawn(NPC) + spawn(NPC) +end + +function InRange(NPC, Spawn) +end + +function LeaveRange(NPC, Spawn) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + + PlayFlavor(NPC, "", "I've no time just now for chatter.", "", 1689589577, 4560189, Spawn) +end + diff --git a/server/SpawnScripts/GreaterFaydark/GundaFirehammer.lua b/server/SpawnScripts/GreaterFaydark/GundaFirehammer.lua new file mode 100644 index 000000000..7034c65fd --- /dev/null +++ b/server/SpawnScripts/GreaterFaydark/GundaFirehammer.lua @@ -0,0 +1,38 @@ +--[[ + Script Name : SpawnScripts/GreaterFaydark/GundaFirehammer.lua + Script Purpose : Gunda Firehammer + Script Author : John Adams + Script Date : 2009.03.01 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +function spawn(NPC) + SetPlayerProximityFunction(NPC, 10, "InRange", "LeaveRange") +end + +function respawn(NPC) + spawn(NPC) +end + +function InRange(NPC, Spawn) +end + +function LeaveRange(NPC, Spawn) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + + choice = math.random(1,3) + + if choice == 1 then + PlayFlavor(NPC, "", "Eh... who's there? I'm a bit hard o' seein'.", "", 1689589577, 4560189, Spawn) + elseif choice == 2 then + PlayFlavor(NPC, "", "Brackus works so hard durin' the day. I'm so proud.", "", 1689589577, 4560189, Spawn) + elseif choice == 3 then + PlayFlavor(NPC, "", "Have ya seen me husband, Brackus? He's workin' hard down in the Granite Hills.", "", 1689589577, 4560189, Spawn) + else + end + +end + diff --git a/server/SpawnScripts/GreaterFaydark/HamnalTeolofin.lua b/server/SpawnScripts/GreaterFaydark/HamnalTeolofin.lua new file mode 100644 index 000000000..26c3b086e --- /dev/null +++ b/server/SpawnScripts/GreaterFaydark/HamnalTeolofin.lua @@ -0,0 +1,127 @@ +--[[ + Script Name : SpawnScripts/GreaterFaydark/HamnalTeolofin.lua + Script Purpose : Hamnal Teolofin + Script Author : John Adams + Script Date : 2009.03.01 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +function spawn(NPC) + SetPlayerProximityFunction(NPC, 10, "InRange", "LeaveRange") +end + +function respawn(NPC) + spawn(NPC) +end + +function InRange(NPC, Spawn) +end + +function LeaveRange(NPC, Spawn) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + choice = math.random(1,2) + + if choice == 1 then + PlayFlavor(NPC, "voiceover/english/exp03_questvo2/hamnal_teolofin/_exp03/exp03_cty_kelethin/quest/quest_intro_hamnal_hail_2e3cf704.mp3", "Times were much simpler when I was younger. So much has changed since then!", "", 3662633997, 945334687, Spawn) + elseif choice == 2 then + PlayFlavor(NPC, "voiceover/english/exp03_questvo2/hamnal_teolofin/_exp03/exp03_cty_kelethin/quest/quest_intro_hamnal_hail_cec6199c.mp3", "Not too many Outsiders fall from the platforms anymore.", "sigh", 2765799254, 1455381840, Spawn) + else + end + + PlayFlavor(NPC, "voiceover/english/exp03_questvo2/hamnal_teolofin/_exp03/exp03_cty_kelethin/tutorials/qst_hamnal/qst_hamnal001.mp3", "", "", 2895828066, 2742672495, Spawn) + AddConversationOption(conversation, "I've been learning the history of the Fae.", "dlg_3_1") + AddConversationOption(conversation, "Jalmari sent me to speak with you about the Grender.") + AddConversationOption(conversation, "Nothing, thanks.") + StartConversation(conversation, NPC, Spawn, "Yes? What can I do for you?") + if convo==4 then + PlayFlavor(NPC, "voiceover/english/exp03_questvo2/hamnal_teolofin/_exp03/exp03_cty_kelethin/tutorials/qst_hamnal/qst_hamnal001.mp3", "", "", 2895828066, 2742672495, Spawn) + AddConversationOption(conversation, "I've been learning the history of the Fae.", "dlg_4_1") + AddConversationOption(conversation, "Jalmari sent me to speak with you about the Grender.") + AddConversationOption(conversation, "Nothing, thanks.") + StartConversation(conversation, NPC, Spawn, "Yes? What can I do for you?") + end + +end + +function dlg_3_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/exp03_questvo2/hamnal_teolofin/_exp03/exp03_cty_kelethin/tutorials/qst_hamnal/qst_hamnal002.mp3", "", "", 3893730348, 46248323, Spawn) + AddConversationOption(conversation, "Not yet. At least, I don't think so.", "dlg_3_2") + StartConversation(conversation, NPC, Spawn, "You're beginning the Rite of Passage? Good for you. I know you need to help your spirit bud reawaken. That helps prepare you for the challenges ahead. Have you been drawn to anything in particular yet?") +end + +function dlg_3_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/exp03_questvo2/hamnal_teolofin/_exp03/exp03_cty_kelethin/tutorials/qst_hamnal/qst_hamnal003.mp3", "", "", 3572378326, 3165862508, Spawn) + AddConversationOption(conversation, "He seemed rather angry.", "dlg_3_3") + StartConversation(conversation, NPC, Spawn, "Sometimes it can take a while. I remember the shock of it, the first time my spirit began to recall things from its past -- from the Burning Ring. I sense that you have spoken with old Raimo. Don't let him worry you with his anti-Outsider rubbish.") +end + +function dlg_3_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/exp03_questvo2/hamnal_teolofin/_exp03/exp03_cty_kelethin/tutorials/qst_hamnal/qst_hamnal004.mp3", "", "", 3972764887, 2023370376, Spawn) + AddConversationOption(conversation, "Raimo mentioned Princess Saphronia...", "dlg_3_4") + StartConversation(conversation, NPC, Spawn, "His spirit and mine go way back. We're both warriors, you see, defending the Fae through the lives of all our spirits. In the Burning Ring, during the War of Fay, our spirits were slain defending Queen Maarita. He's taken it somewhat bitterly, poor fellow, even though our spirits have survived.") +end + +function dlg_3_4(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/exp03_questvo2/hamnal_teolofin/_exp03/exp03_cty_kelethin/tutorials/qst_hamnal/qst_hamnal005.mp3", "", "", 1909837591, 112454132, Spawn) + AddConversationOption(conversation, "How do I know which Outsiders are good and which are evil?", "dlg_3_5") + StartConversation(conversation, NPC, Spawn, "She's young still and her spirit is still reawakening. Her memories, like Raimo's, are sad and bitter. Outsiders caused trouble, yes, but many of them also came to our aid. Like the brownies that came to save Kelethin when we were under siege. Without them, neither you or I would be here.") +end + +function dlg_3_5(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/exp03_questvo2/hamnal_teolofin/_exp03/exp03_cty_kelethin/tutorials/qst_hamnal/qst_hamnal006.mp3", "", "", 1030007137, 1974015787, Spawn) + AddConversationOption(conversation, "I see. Well, thank you for your time.", "dlg_3_6") + StartConversation(conversation, NPC, Spawn, "It is impossible to tell by looking. There is something seeping through from somewhere into our lands, but who is to say that the Outsiders brought it? Perhaps it's been here all along.") +end + +function dlg_4_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/exp03_questvo2/hamnal_teolofin/_exp03/exp03_cty_kelethin/tutorials/qst_hamnal/qst_hamnal012.mp3", "", "", 2850757242, 2097247143, Spawn) + AddConversationOption(conversation, "In working with Kalamar Vesinger, I've located the Grender's lair -- beneath Kelethin!") + StartConversation(conversation, NPC, Spawn, "Why does Jalmari think I'd be interested in more rumors and nonsense about that mythical creature?") +end + +function dlg_4_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/exp03_questvo2/hamnal_teolofin/_exp03/exp03_cty_kelethin/tutorials/qst_hamnal/qst_hamnal013.mp3", "", "", 1457571777, 1576417874, Spawn) + AddConversationOption(conversation, "Jalmari wants your advice on the matter.", "dlg_4_3") + StartConversation(conversation, NPC, Spawn, "That's not good. We'll need to move swiftly against it. So it really exists? That is disheartening, that something could spread disease to our land and be hiding so close to our homes!") +end + +function dlg_4_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/exp03_questvo2/hamnal_teolofin/_exp03/exp03_cty_kelethin/tutorials/qst_hamnal/qst_hamnal014.mp3", "", "", 2206859761, 150584229, Spawn) + AddConversationOption(conversation, "Thank you!", "dlg_4_4") + StartConversation(conversation, NPC, Spawn, "Move swiftly. If it is close by, then it would notice any sudden change in our behaviors. We must act before it suspects that we know where it is. And that it actually exists.") +end + +--[[ raw_conversations + PlayFlavor(NPC, "voiceover/english/exp03_questvo2/hamnal_teolofin/_exp03/exp03_cty_kelethin/quest/quest_intro_hamnal_hail_2e3cf704.mp3", "Times were much simpler when I was younger. So much has changed since then!", "", 3662633997, 945334687, Spawn) + PlayFlavor(NPC, "voiceover/english/exp03_questvo2/hamnal_teolofin/_exp03/exp03_cty_kelethin/quest/quest_intro_hamnal_hail_cec6199c.mp3", "Not too many Outsiders fall from the platforms anymore.", "sigh", 2765799254, 1455381840, Spawn) +--]] + diff --git a/server/SpawnScripts/GreaterFaydark/IbidEsslibris.lua b/server/SpawnScripts/GreaterFaydark/IbidEsslibris.lua new file mode 100644 index 000000000..b74b65fbe --- /dev/null +++ b/server/SpawnScripts/GreaterFaydark/IbidEsslibris.lua @@ -0,0 +1,36 @@ +--[[ + Script Name : SpawnScripts/GreaterFaydark/IbidEsslibris.lua + Script Purpose : Ibid Esslibris + Script Author : John Adams + Script Date : 2009.03.01 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +function spawn(NPC) + SetPlayerProximityFunction(NPC, 10, "InRange", "LeaveRange") +end + +function respawn(NPC) + spawn(NPC) +end + +function InRange(NPC, Spawn) +end + +function LeaveRange(NPC, Spawn) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + + choice = math.random(1,2) + + if choice == 1 then + PlayFlavor(NPC, "", "If you look for it, you can still find evidence of the Shattering, but it's well-hidden now.", "", 1689589577, 4560189, Spawn) + elseif choice == 2 then + PlayFlavor(NPC, "", "It must be very interesting to have wings.", "", 1689589577, 4560189, Spawn) + else + end + +end + diff --git a/server/SpawnScripts/GreaterFaydark/IhieerScytheleaf.lua b/server/SpawnScripts/GreaterFaydark/IhieerScytheleaf.lua new file mode 100644 index 000000000..7aa313a6a --- /dev/null +++ b/server/SpawnScripts/GreaterFaydark/IhieerScytheleaf.lua @@ -0,0 +1,28 @@ +--[[ + Script Name : SpawnScripts/GreaterFaydark/IhieerScytheleaf.lua + Script Purpose : Ihieer Scytheleaf + Script Author : John Adams + Script Date : 2009.03.01 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +function spawn(NPC) + SetPlayerProximityFunction(NPC, 10, "InRange", "LeaveRange") +end + +function respawn(NPC) + spawn(NPC) +end + +function InRange(NPC, Spawn) +end + +function LeaveRange(NPC, Spawn) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + + PlayFlavor(NPC, "", "Watch your step, or I'll slice you to ribbons!", "", 1689589577, 4560189, Spawn) +end + diff --git a/server/SpawnScripts/GreaterFaydark/IkileHarmonia.lua b/server/SpawnScripts/GreaterFaydark/IkileHarmonia.lua new file mode 100644 index 000000000..1d1894322 --- /dev/null +++ b/server/SpawnScripts/GreaterFaydark/IkileHarmonia.lua @@ -0,0 +1,72 @@ +--[[ + Script Name : SpawnScripts/GreaterFaydark/IkileHarmonia.lua + Script Purpose : Ikile Harmonia + Script Author : John Adams + Script Date : 2009.03.01 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +function spawn(NPC) + SetPlayerProximityFunction(NPC, 10, "InRange", "LeaveRange") +end + +function respawn(NPC) + spawn(NPC) +end + +function InRange(NPC, Spawn) +end + +function LeaveRange(NPC, Spawn) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_1_1005.mp3", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Yes please, I don't know much about that stuff.", "dlg_77_1") + AddConversationOption(conversation, "Sure, I think I'm pretty comfortable with it all but I can always use a memory refresher.") + AddConversationOption(conversation, "No thanks, I have other things to do right now.") + StartConversation(conversation, NPC, Spawn, "Hello, friend! I'm here to teach interested people a little bit about how to harvest crafting materials, and how to craft tradeskilled items. Are you interested?") + if convo==78 then + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_1_1005.mp3", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Yes please, I don't know much about that stuff.", "dlg_78_1") + AddConversationOption(conversation, "Sure, I think I'm pretty comfortable with it all but I can always use a memory refresher.") + AddConversationOption(conversation, "No thanks, I have other things to do right now.") + StartConversation(conversation, NPC, Spawn, "Hello, friend! I'm here to teach interested people a little bit about how to harvest crafting materials, and how to craft tradeskilled items. Are you interested?") + end + +end + +function dlg_77_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Let's start from the beginning with the harvesting.", "dlg_77_2") + AddConversationOption(conversation, "I've already done some harvesting, tell me what I can do with it all.") + AddConversationOption(conversation, "Whoops, look at the time, got to go.") + StartConversation(conversation, NPC, Spawn, "Would you like to learn about harvesting, or skip straight to the crafting process? ") +end + +function dlg_78_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Let's start from the beginning with the harvesting.") + AddConversationOption(conversation, "I've already done some harvesting, tell me what I can do with it all.", "dlg_78_2") + AddConversationOption(conversation, "Whoops, look at the time, got to go.") + StartConversation(conversation, NPC, Spawn, "Would you like to learn about harvesting, or skip straight to the crafting process? ") +end + +function dlg_78_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "I'll get right on it.", "dlg_78_3") + StartConversation(conversation, NPC, Spawn, "Harvesting resources tend to be segregated by areas - for example, you'll be able to harvest items (often also called nodes) for making equipment for level 1-9 adventurers, in the same areas where you'll find level 1-9 adventurers hunting. There are seven types of harvestable item: wood, roots, ore, soft metal, animal dens, shrubs, and fish. I'd like you to get a few harvests from each type of harvestable item.") +end + diff --git a/server/SpawnScripts/GreaterFaydark/IllaskoSilktree.lua b/server/SpawnScripts/GreaterFaydark/IllaskoSilktree.lua new file mode 100644 index 000000000..72f34df5e --- /dev/null +++ b/server/SpawnScripts/GreaterFaydark/IllaskoSilktree.lua @@ -0,0 +1,28 @@ +--[[ + Script Name : SpawnScripts/GreaterFaydark/IllaskoSilktree.lua + Script Purpose : Illasko Silktree + Script Author : John Adams + Script Date : 2009.03.01 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +function spawn(NPC) + SetPlayerProximityFunction(NPC, 10, "InRange", "LeaveRange") +end + +function respawn(NPC) + spawn(NPC) +end + +function InRange(NPC, Spawn) +end + +function LeaveRange(NPC, Spawn) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + + PlayFlavor(NPC, "", "Many paths may lead toward the same goal.", "", 1689589577, 4560189, Spawn) +end + diff --git a/server/SpawnScripts/GreaterFaydark/ImmeNaime.lua b/server/SpawnScripts/GreaterFaydark/ImmeNaime.lua new file mode 100644 index 000000000..effdcddbf --- /dev/null +++ b/server/SpawnScripts/GreaterFaydark/ImmeNaime.lua @@ -0,0 +1,28 @@ +--[[ + Script Name : SpawnScripts/GreaterFaydark/ImmeNaime.lua + Script Purpose : Imme Naime + Script Author : John Adams + Script Date : 2009.03.01 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +function spawn(NPC) + SetPlayerProximityFunction(NPC, 10, "InRange", "LeaveRange") +end + +function respawn(NPC) + spawn(NPC) +end + +function InRange(NPC, Spawn) +end + +function LeaveRange(NPC, Spawn) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + + PlayFlavor(NPC, "", "Good day. Welcome to the Protectors of Growth!", "", 1689589577, 4560189, Spawn) +end + diff --git a/server/SpawnScripts/GreaterFaydark/InnkeeperTwiggy.lua b/server/SpawnScripts/GreaterFaydark/InnkeeperTwiggy.lua new file mode 100644 index 000000000..b3a852378 --- /dev/null +++ b/server/SpawnScripts/GreaterFaydark/InnkeeperTwiggy.lua @@ -0,0 +1,219 @@ +--[[ + Script Name : SpawnScripts/GreaterFaydark/InnkeeperTwiggy.lua + Script Purpose : Innkeeper Twiggy + Script Author : John Adams + Script Date : 2009.03.01 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +function spawn(NPC) + SetPlayerProximityFunction(NPC, 10, "InRange", "LeaveRange") +end + +function respawn(NPC) + spawn(NPC) +end + +function InRange(NPC, Spawn) +end + +function LeaveRange(NPC, Spawn) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + choice = math.random(1,2) + + if choice == 1 then + PlayFlavor(NPC, "voiceover/english/exp03_questvo/innkeeper_twiggy/_exp03/exp03_cty_kelethin/merchants/innkeeper_twiggy_hail_5d858d10.mp3", "I think I'll treat myself to a pruning.", "", 147248694, 3994611630, Spawn) + elseif choice == 2 then + PlayFlavor(NPC, "voiceover/english/exp03_questvo/innkeeper_twiggy/_exp03/exp03_cty_kelethin/merchants/innkeeper_twiggy_hail_c9120666.mp3", "All this running around is likely to whittle me away to nothing!", "", 2824894623, 967344056, Spawn) + else + end + + PlayFlavor(NPC, "voiceover/english/exp03_questvo/innkeeper_twiggy/_exp03/exp03_cty_kelethin/quest/qst_twiggy/qst_twiggy001.mp3", "", "", 493093901, 1676315046, Spawn) + AddConversationOption(conversation, "Please.", "dlg_85_1") + AddConversationOption(conversation, "Not right now.") + StartConversation(conversation, NPC, Spawn, "Hello, .. GetName(Spawn) .. . I am the Innkeeper for Kelethin. My name is Twiggy! We received word of your arrival and have a room prepared for you. Is there anything you'd like to know about housing before you move in?") + if convo==86 then + PlayFlavor(NPC, "voiceover/english/exp03_questvo/innkeeper_twiggy/_exp03/exp03_cty_kelethin/quest/qst_twiggy/qst_twiggy010.mp3", "", "", 232672131, 2109387803, Spawn) + AddConversationOption(conversation, "How can I place an item in my house?", "dlg_86_1") + AddConversationOption(conversation, "What kind of housing is available to me?") + AddConversationOption(conversation, "What is the marketboard for?") + AddConversationOption(conversation, "What is my house for?") + AddConversationOption(conversation, "Nothing right now.") + StartConversation(conversation, NPC, Spawn, "Hello again, .. GetName(Spawn) .. . What can I help you with?") + end + +end + +function dlg_85_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/exp03_questvo/innkeeper_twiggy/_exp03/exp03_cty_kelethin/quest/qst_twiggy/qst_twiggy002.mp3", "", "", 1017061939, 1561607192, Spawn) + AddConversationOption(conversation, "How can I place an item in my house?", "dlg_85_2") + AddConversationOption(conversation, "What kind of housing is available to me?") + AddConversationOption(conversation, "What is the marketboard for?") + AddConversationOption(conversation, "What is my house for?") + AddConversationOption(conversation, "Nothing right now.") + StartConversation(conversation, NPC, Spawn, "What would you like to know?") +end + +function dlg_85_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/exp03_questvo/innkeeper_twiggy/_exp03/exp03_cty_kelethin/quest/qst_twiggy/qst_twiggy003.mp3", "", "", 943030445, 831464053, Spawn) + AddConversationOption(conversation, "What kind of housing is available to me?", "dlg_85_3") + AddConversationOption(conversation, "What is the marketboard for?") + AddConversationOption(conversation, "What is my house for?") + AddConversationOption(conversation, "That's enough for now, thanks.") + StartConversation(conversation, NPC, Spawn, "To place an item in your house, you must first find the item in your inventory. Once you've done so, right-click on the item and select the 'place' option. Then you'll see a tinted outline of your item in your house. When the item is highlighted green you can place it in that location. If it is highlighted red, you cannot.") +end + +function dlg_85_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/exp03_questvo/innkeeper_twiggy/_exp03/exp03_cty_kelethin/quest/qst_twiggy/qst_twiggy004.mp3", "", "", 2005553615, 4066801615, Spawn) + AddConversationOption(conversation, "Is any other housing available?", "dlg_85_4") + AddConversationOption(conversation, "How can I place an item in my house?") + AddConversationOption(conversation, "What is the marketboard for?") + AddConversationOption(conversation, "What is my house for?") + AddConversationOption(conversation, "That's enough for now, thanks.") + StartConversation(conversation, NPC, Spawn, "There are a few different types of housing available in Kelethin. This particular tree is very comfortable and cozy, though you might later prefer to reside in one of those modern rental acorns.") +end + +function dlg_85_4(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/exp03_questvo/innkeeper_twiggy/_exp03/exp03_cty_kelethin/quest/qst_twiggy/qst_twiggy005.mp3", "", "", 2629356152, 4258694039, Spawn) + AddConversationOption(conversation, "How can I place an item in my house?", "dlg_85_5") + AddConversationOption(conversation, "What is the marketboard for?") + AddConversationOption(conversation, "What is my house for?") + AddConversationOption(conversation, "That's enough for now, thanks.") + StartConversation(conversation, NPC, Spawn, "Yes, Kelethin has houses ranging from the basic one bedroom model on up to four bedroom apartments, although the most ostentatious of these are only available to the most prestigious citizens of the city.") +end + +function dlg_85_5(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/exp03_questvo/innkeeper_twiggy/_exp03/exp03_cty_kelethin/quest/qst_twiggy/qst_twiggy003.mp3", "", "", 943030445, 831464053, Spawn) + AddConversationOption(conversation, "What kind of housing is available to me?", "dlg_85_6") + AddConversationOption(conversation, "What is the marketboard for?") + AddConversationOption(conversation, "What is my house for?") + AddConversationOption(conversation, "That's enough for now, thanks.") + StartConversation(conversation, NPC, Spawn, "To place an item in your house, you must first find the item in your inventory. Once you've done so, right-click on the item and select the 'place' option. Then you'll see a tinted outline of your item in your house. When the item is highlighted green you can place it in that location. If it is highlighted red, you cannot.") +end + +function dlg_85_6(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/exp03_questvo/innkeeper_twiggy/_exp03/exp03_cty_kelethin/quest/qst_twiggy/qst_twiggy004.mp3", "", "", 2005553615, 4066801615, Spawn) + AddConversationOption(conversation, "Is any other housing available?", "dlg_85_7") + AddConversationOption(conversation, "How can I place an item in my house?") + AddConversationOption(conversation, "What is the marketboard for?") + AddConversationOption(conversation, "What is my house for?") + AddConversationOption(conversation, "That's enough for now, thanks.") + StartConversation(conversation, NPC, Spawn, "There are a few different types of housing available in Kelethin. This particular tree is very comfortable and cozy, though you might later prefer to reside in one of those modern rental acorns.") +end + +function dlg_85_7(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/exp03_questvo/innkeeper_twiggy/_exp03/exp03_cty_kelethin/quest/qst_twiggy/qst_twiggy006.mp3", "", "", 3891426709, 2870580979, Spawn) + AddConversationOption(conversation, "How do I sell items using my marketboard?") + AddConversationOption(conversation, "How can I place an item in my house?") + AddConversationOption(conversation, "What kind of housing is available to me?", "dlg_85_8") + AddConversationOption(conversation, "What is my house for?") + AddConversationOption(conversation, "That's enough for now, thanks.") + StartConversation(conversation, NPC, Spawn, "The marketboard is a house item, similar to books, beds, pets and other such items. What sets the marketboard apart from the rest however is that once your marketboard is mounted on a wall in your home you can use it to sell items to other citizens of Kelethin. These items can be purchased by your fellow citizens at a Broker. Our Broker is based out of the Kelethin First Regional Bank.") +end + +function dlg_85_8(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/exp03_questvo/innkeeper_twiggy/_exp03/exp03_cty_kelethin/quest/qst_twiggy/qst_twiggy007.mp3", "", "", 3004508275, 2782950123, Spawn) + AddConversationOption(conversation, "I can sell things through a broker?", "dlg_85_9") + AddConversationOption(conversation, "How can I place an item in my house?") + AddConversationOption(conversation, "What kind of housing is available to me?") + AddConversationOption(conversation, "What is my house for?") + AddConversationOption(conversation, "That’s enough for now, thanks.") + StartConversation(conversation, NPC, Spawn, "Selling through your market board works the same way as directly selling through a broker, it just allows you to do it from the comfort of your home.") +end + +function dlg_85_9(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "How can I place an item in my house?", "dlg_85_10") + AddConversationOption(conversation, "What kind of housing is available to me?") + AddConversationOption(conversation, "What is the marketboard for?") + AddConversationOption(conversation, "That's enough for now, thanks.") + StartConversation(conversation, NPC, Spawn, "Yes. For a fee, brokers are willing to post the goods you are willing to sell to other adventurers. We have our very own broker here within Kelethin, too!") +end + +function dlg_86_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/exp03_questvo/innkeeper_twiggy/_exp03/exp03_cty_kelethin/quest/qst_twiggy/qst_twiggy008.mp3", "", "", 572451551, 3490877103, Spawn) + AddConversationOption(conversation, "Anything else?") + AddConversationOption(conversation, "How can I place an item in my house?") + AddConversationOption(conversation, "What kind of housing is available to me?") + AddConversationOption(conversation, "What is the marketboard for?", "dlg_86_2") + AddConversationOption(conversation, "That's enough for now, thanks.") + StartConversation(conversation, NPC, Spawn, "You will find that your house has many uses, the first of which is the ability to store house items. Each house has a limit to the number of house items you can place in it, so as you gain more possessions you wish to display you will need larger houses to do so.") +end + +function dlg_86_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/exp03_questvo/innkeeper_twiggy/_exp03/exp03_cty_kelethin/quest/qst_twiggy/qst_twiggy009.mp3", "", "", 277136482, 2220542103, Spawn) + AddConversationOption(conversation, "How can I place an item in my house?", "dlg_86_3") + AddConversationOption(conversation, "What kind of housing is available to me?") + AddConversationOption(conversation, "What is the marketboard for?") + AddConversationOption(conversation, "That's enough for now, thanks.") + StartConversation(conversation, NPC, Spawn, "Yes, houses have what we call vaults, which are extra storage within your house. The larger your house is, the more storage space is available. By placing items in this house vault and using your marketboard, you can sell these items to others without being in your room.") +end + +function dlg_86_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/exp03_questvo/innkeeper_twiggy/_exp03/exp03_cty_kelethin/quest/qst_twiggy/qst_twiggy004.mp3", "", "", 2005553615, 4066801615, Spawn) + AddConversationOption(conversation, "Is any other housing available?") + AddConversationOption(conversation, "How can I place an item in my house?", "dlg_86_4") + AddConversationOption(conversation, "What is the marketboard for?") + AddConversationOption(conversation, "What is my house for?") + AddConversationOption(conversation, "That's enough for now, thanks.") + StartConversation(conversation, NPC, Spawn, "There are a few different types of housing available in Kelethin. This particular tree is very comfortable and cozy, though you might later prefer to reside in one of those modern rental acorns.") +end + +function dlg_86_4(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/exp03_questvo/innkeeper_twiggy/_exp03/exp03_cty_kelethin/quest/qst_twiggy/qst_twiggy005.mp3", "", "", 2629356152, 4258694039, Spawn) + AddConversationOption(conversation, "How can I place an item in my house?", "dlg_86_5") + AddConversationOption(conversation, "What is the marketboard for?") + AddConversationOption(conversation, "What is my house for?") + AddConversationOption(conversation, "That's enough for now, thanks.") + StartConversation(conversation, NPC, Spawn, "Yes, Kelethin has houses ranging from the basic one bedroom model on up to four bedroom apartments, although the most ostentatious of these are only available to the most prestigious citizens of the city.") +end + +--[[ raw_conversations + PlayFlavor(NPC, "voiceover/english/exp03_questvo/innkeeper_twiggy/_exp03/exp03_cty_kelethin/merchants/innkeeper_twiggy_hail_5d858d10.mp3", "I think I'll treat myself to a pruning.", "", 147248694, 3994611630, Spawn) + PlayFlavor(NPC, "voiceover/english/exp03_questvo/innkeeper_twiggy/_exp03/exp03_cty_kelethin/merchants/innkeeper_twiggy_hail_c9120666.mp3", "All this running around is likely to whittle me away to nothing!", "", 2824894623, 967344056, Spawn) +--]] + diff --git a/server/SpawnScripts/GreaterFaydark/JalmariKeletana.lua b/server/SpawnScripts/GreaterFaydark/JalmariKeletana.lua new file mode 100644 index 000000000..23459375a --- /dev/null +++ b/server/SpawnScripts/GreaterFaydark/JalmariKeletana.lua @@ -0,0 +1,92 @@ +--[[ + Script Name : SpawnScripts/GreaterFaydark/JalmariKeletana.lua + Script Purpose : Jalmari Keletana + Script Author : John Adams + Script Date : 2009.03.01 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +function spawn(NPC) + SetPlayerProximityFunction(NPC, 10, "InRange", "LeaveRange") +end + +function respawn(NPC) + spawn(NPC) +end + +function InRange(NPC, Spawn) +end + +function LeaveRange(NPC, Spawn) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + choice = math.random(1,2) + + if choice == 1 then + PlayFlavor(NPC, "voiceover/english/exp03_questvo/jalmari_keletana/_exp03/exp03_cty_kelethin/quest/quest_intro_jalmari_hail_1193678d.mp3", "Not all Fae are flighty.", "", 3091431058, 1671211988, Spawn) + elseif choice == 2 then + PlayFlavor(NPC, "voiceover/english/exp03_questvo/jalmari_keletana/_exp03/exp03_cty_kelethin/quest/quest_intro_jalmari_hail_ff5378ca.mp3", "The key to good government is efficiency.", "", 824038916, 1598888890, Spawn) + else + end + + PlayFlavor(NPC, "voiceover/english/exp03_questvo/jalmari_keletana/_exp03/exp03_cty_kelethin/tutorials/qst_jalmari/qst_jalmari001.mp3", "", "", 2121079748, 3485347487, Spawn) + AddConversationOption(conversation, "I need to speak with you about the Grender.", "dlg_2_1") + AddConversationOption(conversation, "Nothing right now, thanks.") + StartConversation(conversation, NPC, Spawn, "Yes? Can I help you?") +end + +function dlg_2_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/exp03_questvo/jalmari_keletana/_exp03/exp03_cty_kelethin/tutorials/qst_jalmari/qst_jalmari002.mp3", "", "", 2082721768, 1564608519, Spawn) + AddConversationOption(conversation, "But I have proof!", "dlg_2_2") + AddConversationOption(conversation, "It is a waste of time, never mind.") + StartConversation(conversation, NPC, Spawn, "The Grender? I do not have time to listen to more rumors about a mythical creature!") +end + +function dlg_2_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/exp03_questvo/jalmari_keletana/_exp03/exp03_cty_kelethin/tutorials/qst_jalmari/qst_jalmari003.mp3", "", "", 1197751578, 2295690654, Spawn) + AddConversationOption(conversation, "I was much younger then. And besides, there really is a Grender!", "dlg_2_3") + StartConversation(conversation, NPC, Spawn, "Where is your 'proof,' .. GetName(Spawn) .. . Do you think it's wise to pull a prank while you're undergoing the Rite of Passage? No one has forgotten that stunt you pulled in Joleena's Restaurant.") +end + +function dlg_2_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/exp03_questvo/jalmari_keletana/_exp03/exp03_cty_kelethin/tutorials/qst_jalmari/qst_jalmari004.mp3", "", "", 3695624936, 3885790951, Spawn) + AddConversationOption(conversation, "The scouts focused on areas farther away. The Grender is beneath Kelethin itself.", "dlg_2_4") + StartConversation(conversation, NPC, Spawn, "Where is the proof, then? How were you able to locate it while our scouts could not?") +end + +function dlg_2_4(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/exp03_questvo/jalmari_keletana/_exp03/exp03_cty_kelethin/tutorials/qst_jalmari/qst_jalmari007.mp3", "", "", 1547507401, 2590251315, Spawn) + AddConversationOption(conversation, "I get to meet the Queen?", "dlg_2_5") + StartConversation(conversation, NPC, Spawn, "Interesting...then we'll need to hold a meeting to discuss what this could mean and how we're to handle it. The Queen will want to be involved. She's very hands-on. When you get to the Fae Royal Hall, speak with the Lady Milika Vikaarinen. She'll decide whether you get to meet Queen Amree today or not.") +end + +function dlg_2_5(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/exp03_questvo/jalmari_keletana/_exp03/exp03_cty_kelethin/tutorials/qst_jalmari/qst_jalmari008.mp3", "", "", 313118275, 4120683222, Spawn) + AddConversationOption(conversation, "I'll be on my way.", "dlg_2_6") + StartConversation(conversation, NPC, Spawn, "Before you seek an audience with her, speak to Hamnal and Eleoona. They're both members of the self-defense team stationed near the other two lifts. Explain to them what has happened and get their recommendations before you head to the Fae Royal Hall.") +end + +--[[ raw_conversations + PlayFlavor(NPC, "voiceover/english/exp03_questvo/jalmari_keletana/_exp03/exp03_cty_kelethin/quest/quest_intro_jalmari_hail_1193678d.mp3", "Not all Fae are flighty.", "", 3091431058, 1671211988, Spawn) + PlayFlavor(NPC, "voiceover/english/exp03_questvo/jalmari_keletana/_exp03/exp03_cty_kelethin/quest/quest_intro_jalmari_hail_ff5378ca.mp3", "The key to good government is efficiency.", "", 824038916, 1598888890, Spawn) +--]] + diff --git a/server/SpawnScripts/GreaterFaydark/JeleetaAriaata.lua b/server/SpawnScripts/GreaterFaydark/JeleetaAriaata.lua new file mode 100644 index 000000000..da736d1db --- /dev/null +++ b/server/SpawnScripts/GreaterFaydark/JeleetaAriaata.lua @@ -0,0 +1,36 @@ +--[[ + Script Name : SpawnScripts/GreaterFaydark/JeleetaAriaata.lua + Script Purpose : Jeleeta Ariaata + Script Author : John Adams + Script Date : 2009.03.01 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +function spawn(NPC) + SetPlayerProximityFunction(NPC, 10, "InRange", "LeaveRange") +end + +function respawn(NPC) + spawn(NPC) +end + +function InRange(NPC, Spawn) +end + +function LeaveRange(NPC, Spawn) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + + choice = math.random(1,2) + + if choice == 1 then + PlayFlavor(NPC, "", "There's nothing like sitting beside the waterfall and listening to the sounds.", "", 1689589577, 4560189, Spawn) + elseif choice == 2 then + PlayFlavor(NPC, "", "Of course we measure time in Rings; who wouldn't?", "", 1689589577, 4560189, Spawn) + else + end + +end + diff --git a/server/SpawnScripts/GreaterFaydark/JenthisViridar.lua b/server/SpawnScripts/GreaterFaydark/JenthisViridar.lua new file mode 100644 index 000000000..3a24475a2 --- /dev/null +++ b/server/SpawnScripts/GreaterFaydark/JenthisViridar.lua @@ -0,0 +1,112 @@ +--[[ + Script Name : SpawnScripts/GreaterFaydark/JenthisViridar.lua + Script Purpose : Jenthis Viridar + Script Author : John Adams + Script Date : 2009.03.01 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +function spawn(NPC) + SetPlayerProximityFunction(NPC, 10, "InRange", "LeaveRange") +end + +function respawn(NPC) + spawn(NPC) +end + +function InRange(NPC, Spawn) +end + +function LeaveRange(NPC, Spawn) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/exp03_questvo2/jenthis_viridar/_exp03/exp03_rgn_greater_faydark/scp/jenthis/jenthis000.mp3", "", "", 6246646, 2119314563, Spawn) + AddConversationOption(conversation, "I am XXXXXXXX. What is the problem?", "dlg_34_1") + AddConversationOption(conversation, "I am Leighlah. I have a status report from Captain Steelforge.") + AddConversationOption(conversation, "I am Leighlah. I have news from Gomphum.") + StartConversation(conversation, NPC, Spawn, "Welcome to Sapling Spur Outpost. I am Jenthis Viridar, the current rank around here. I, well... I'd like to offer our assistance, but we're in a bit of a predicament right now.") + if convo==35 then + PlayFlavor(NPC, "voiceover/english/exp03_questvo2/jenthis_viridar/_exp03/exp03_rgn_greater_faydark/scp/jenthis/jenthis000.mp3", "", "", 6246646, 2119314563, Spawn) + AddConversationOption(conversation, "I am XXXXXXXX. What is the problem?", "dlg_35_1") + AddConversationOption(conversation, "I am Leighlah. I have news from Gomphum.") + StartConversation(conversation, NPC, Spawn, "Welcome to Sapling Spur Outpost. I am Jenthis Viridar, the current rank around here. I, well... I'd like to offer our assistance, but we're in a bit of a predicament right now.") + end + + if convo==36 then + PlayFlavor(NPC, "voiceover/english/exp03_questvo2/jenthis_viridar/_exp03/exp03_rgn_greater_faydark/scp/jenthis/jenthis000.mp3", "", "", 6246646, 2119314563, Spawn) + AddConversationOption(conversation, "I am XXXXXXXX. What is the problem?", "dlg_36_1") + StartConversation(conversation, NPC, Spawn, "Welcome to Sapling Spur Outpost. I am Jenthis Viridar, the current rank around here. I, well... I'd like to offer our assistance, but we're in a bit of a predicament right now.") + end + +end + +function dlg_34_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/exp03_questvo2/jenthis_viridar/_exp03/exp03_rgn_greater_faydark/scp/jenthis/jenthis001.mp3", "", "", 1747714105, 1617321160, Spawn) + AddConversationOption(conversation, "I've also got news from Gomphum.") + AddConversationOption(conversation, "What is the trouble you are having?", "dlg_34_2") + AddConversationOption(conversation, "Glad to be of service.") + StartConversation(conversation, NPC, Spawn, "Ah, very good. I will... I will get to this when there's time.") +end + +function dlg_35_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/exp03_questvo2/jenthis_viridar/_exp03/exp03_rgn_greater_faydark/scp/jenthis/jenthis_gomphum000.mp3", "", "", 3461568007, 163444975, Spawn) + AddConversationOption(conversation, "He's a Shroomba. He lives in Dyer Mycoria. There was an orc with the grobins in that cave system.") + StartConversation(conversation, NPC, Spawn, "What's a Gomphum?") +end + +function dlg_35_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/exp03_questvo2/jenthis_viridar/_exp03/exp03_rgn_greater_faydark/scp/jenthis/jenthis_gomphum001.mp3", "", "", 17746683, 2156800744, Spawn) + AddConversationOption(conversation, "Just one, I killed it.", "dlg_35_3") + StartConversation(conversation, NPC, Spawn, "Oooh, yes I recall him... An orc you say? I swear these things are spontaneously generated. How many orcs were there?") +end + +function dlg_35_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/exp03_questvo2/jenthis_viridar/_exp03/exp03_rgn_greater_faydark/scp/jenthis/jenthis_gomphum002.mp3", "", "", 283444902, 274954014, Spawn) + AddConversationOption(conversation, "What is the trouble you are having?", "dlg_35_4") + AddConversationOption(conversation, "Glad to be of service.") + StartConversation(conversation, NPC, Spawn, "Well... that's a relief. Still... the news gets worse and worse every day.") +end + +function dlg_36_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/exp03_questvo2/jenthis_viridar/_exp03/exp03_rgn_greater_faydark/scp/jenthis/jenthis002.mp3", "", "", 2753677390, 2626213352, Spawn) + AddConversationOption(conversation, "Yes?", "dlg_36_2") + StartConversation(conversation, NPC, Spawn, "Orcs. They've been spilling out of Crushbone and into the Faydark at an alarming rate. That they have managed to get so close to Tunare's Sapling is worrisome. I've asked for more soldiers, but my requests are being denied... I... I'm sorry, I shouldn't be complaining to you. Our problem, .. GetName(Spawn) .. . is that to the west lies 'Orc Hill,' a staging area for most of the orc attacks west and south of this position. On top of that, to the east...") +end + +function dlg_36_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/exp03_questvo2/jenthis_viridar/_exp03/exp03_rgn_greater_faydark/scp/jenthis/jenthis003.mp3", "", "", 3006752769, 442065699, Spawn) + AddConversationOption(conversation, "All right.", "dlg_36_3") + StartConversation(conversation, NPC, Spawn, "To the east is an area that was once peaceful. The bixies--friendly unless provoked--reside there, but lately orcs have been moving in. We've already waited too long and they're getting complacent. I need you to scatter these would-be orc settlers and ensure they find no ground -- save the ground they die upon. There are only Crushbone pawns there for now, but pawns are nothing if not forerunners.") +end + +function dlg_36_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/exp03_questvo2/jenthis_viridar/_exp03/exp03_rgn_greater_faydark/scp/jenthis/jenthis004.mp3", "", "", 2745305146, 1693404774, Spawn) + AddConversationOption(conversation, "Okay.", "dlg_36_4") + StartConversation(conversation, NPC, Spawn, "Good. Once this is done report back to me.") +end + diff --git a/server/SpawnScripts/GreaterFaydark/JiaanaKaalikka.lua b/server/SpawnScripts/GreaterFaydark/JiaanaKaalikka.lua new file mode 100644 index 000000000..49d25c9d9 --- /dev/null +++ b/server/SpawnScripts/GreaterFaydark/JiaanaKaalikka.lua @@ -0,0 +1,28 @@ +--[[ + Script Name : SpawnScripts/GreaterFaydark/JiaanaKaalikka.lua + Script Purpose : Jiaana Kaalikka + Script Author : John Adams + Script Date : 2009.03.01 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +function spawn(NPC) + SetPlayerProximityFunction(NPC, 10, "InRange", "LeaveRange") +end + +function respawn(NPC) + spawn(NPC) +end + +function InRange(NPC, Spawn) +end + +function LeaveRange(NPC, Spawn) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + + PlayFlavor(NPC, "", "Greetings!", "", 1689589577, 4560189, Spawn) +end + diff --git a/server/SpawnScripts/GreaterFaydark/Jilaen.lua b/server/SpawnScripts/GreaterFaydark/Jilaen.lua new file mode 100644 index 000000000..db7d10776 --- /dev/null +++ b/server/SpawnScripts/GreaterFaydark/Jilaen.lua @@ -0,0 +1,58 @@ +--[[ + Script Name : SpawnScripts/GreaterFaydark/Jilaen.lua + Script Purpose : Jilaen + Script Author : John Adams + Script Date : 2009.03.01 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +function spawn(NPC) + SetPlayerProximityFunction(NPC, 10, "InRange", "LeaveRange") +end + +function respawn(NPC) + spawn(NPC) +end + +function InRange(NPC, Spawn) +end + +function LeaveRange(NPC, Spawn) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_2_1005.mp3", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "I am XXXXXXXX.", "dlg_38_1") + StartConversation(conversation, NPC, Spawn, "Hello there! I'm Jilaen, who are you?") +end + +function dlg_38_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Not yet.", "dlg_38_2") + StartConversation(conversation, NPC, Spawn, "It's a pleasure to meet you! I love meeting new people, and exploring new places, and learning new things! Everyone I've met has taught me so much, even if they didn't want to! Have you met Lady Katri?") +end + +function dlg_38_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "I'll go find her.", "dlg_38_3") + StartConversation(conversation, NPC, Spawn, "Really? You should go speak with her! If you take the path west, staying left when you have a choice, you'll get to Kelethin. There you can ride the lift up right to the platform that Lady Katri is on! She can teach you about the Fae!") +end + +function dlg_38_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Goodbye.", "dlg_38_4") + StartConversation(conversation, NPC, Spawn, "Hooray! Goodbye for now!") +end + diff --git a/server/SpawnScripts/GreaterFaydark/JysolinNerala.lua b/server/SpawnScripts/GreaterFaydark/JysolinNerala.lua new file mode 100644 index 000000000..a3651925b --- /dev/null +++ b/server/SpawnScripts/GreaterFaydark/JysolinNerala.lua @@ -0,0 +1,37 @@ +--[[ + Script Name : SpawnScripts/GreaterFaydark/JysolinNerala.lua + Script Purpose : Jysolin Nerala + Script Author : John Adams + Script Date : 2009.03.01 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +function spawn(NPC) + SetPlayerProximityFunction(NPC, 10, "InRange", "LeaveRange") +end + +function respawn(NPC) + spawn(NPC) +end + +function InRange(NPC, Spawn) +end + +function LeaveRange(NPC, Spawn) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_3_1006.mp3", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Nothing right now, thanks.", "dlg_6_1") + StartConversation(conversation, NPC, Spawn, "What'll you have?") + if convo==7 then + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Nothing right now, thanks.", "dlg_7_1") + StartConversation(conversation, NPC, Spawn, "What'll you have?") + end + +end + diff --git a/server/SpawnScripts/GreaterFaydark/KaaleeInimaari.lua b/server/SpawnScripts/GreaterFaydark/KaaleeInimaari.lua new file mode 100644 index 000000000..40b561b26 --- /dev/null +++ b/server/SpawnScripts/GreaterFaydark/KaaleeInimaari.lua @@ -0,0 +1,36 @@ +--[[ + Script Name : SpawnScripts/GreaterFaydark/KaaleeInimaari.lua + Script Purpose : Kaalee Inimaari + Script Author : John Adams + Script Date : 2009.03.01 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +function spawn(NPC) + SetPlayerProximityFunction(NPC, 10, "InRange", "LeaveRange") +end + +function respawn(NPC) + spawn(NPC) +end + +function InRange(NPC, Spawn) +end + +function LeaveRange(NPC, Spawn) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + + choice = math.random(1,2) + + if choice == 1 then + PlayFlavor(NPC, "", "There's no shadow on my spirit, I can tell you that right now!", "", 1689589577, 4560189, Spawn) + elseif choice == 2 then + PlayFlavor(NPC, "", "I love wandering Greater Faydark after the rain!", "", 1689589577, 4560189, Spawn) + else + end + +end + diff --git a/server/SpawnScripts/GreaterFaydark/KalamarVesinger.lua b/server/SpawnScripts/GreaterFaydark/KalamarVesinger.lua new file mode 100644 index 000000000..032ae2230 --- /dev/null +++ b/server/SpawnScripts/GreaterFaydark/KalamarVesinger.lua @@ -0,0 +1,208 @@ +--[[ + Script Name : SpawnScripts/GreaterFaydark/KalamarVesinger.lua + Script Purpose : Kalamar Vesinger + Script Author : John Adams + Script Date : 2009.03.01 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +function spawn(NPC) + SetPlayerProximityFunction(NPC, 10, "InRange", "LeaveRange") +end + +function respawn(NPC) + spawn(NPC) +end + +function InRange(NPC, Spawn) +end + +function LeaveRange(NPC, Spawn) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + choice = math.random(1,3) + + if choice == 1 then + PlayFlavor(NPC, "voiceover/english/exp03_questvo/kalamar_vesinger/_exp03/exp03_cty_kelethin/quest/quest_kalamar_vesinger_maps_6657ebe1.mp3", "Maps are so interesting, aren't they?", "", 3408257918, 268204611, Spawn) + elseif choice == 2 then + PlayFlavor(NPC, "voiceover/english/exp03_questvo/kalamar_vesinger/_exp03/exp03_cty_kelethin/quest/quest_kalamar_vesinger_maps_a5c2cc74.mp3", "Sometimes I like to come here just to see the new maps.", "", 2592389380, 2012943859, Spawn) + elseif choice == 3 then + PlayFlavor(NPC, "voiceover/english/exp03_questvo/kalamar_vesinger/_exp03/exp03_cty_kelethin/quest/quest_kalamar_vesinger_maps_e032fc6a.mp3", "Fae Royal Messengers are also scouts, you know!", "", 2067512704, 3523424195, Spawn) + else + end + + PlayFlavor(NPC, "voiceover/english/exp03_questvo/kalamar_vesinger/_exp03/exp03_cty_kelethin/quest/qst_kalamar_vesinger/qst_kalamar_vesinger015.mp3", "", "", 1398288955, 2756756342, Spawn) + AddConversationOption(conversation, "I located several magical devices and destroyed them.", "dlg_0_1") + AddConversationOption(conversation, "Not yet.") + StartConversation(conversation, NPC, Spawn, "Any news, XXXXXXXX?") + if convo==98 then + PlayFlavor(NPC, "voiceover/english/exp03_questvo/kalamar_vesinger/_exp03/exp03_cty_kelethin/quest/qst_kalamar_vesinger/qst_kalamar_vesinger001.mp3", "", "", 1370796179, 1768003050, Spawn) + AddConversationOption(conversation, "Lady Katri said you might be able to help me.", "dlg_98_1") + AddConversationOption(conversation, "Nothing, thanks.") + StartConversation(conversation, NPC, Spawn, "Yes? How can I help you?") + end + + if convo==107 then + PlayFlavor(NPC, "voiceover/english/exp03_questvo/kalamar_vesinger/_exp03/exp03_cty_kelethin/quest/qst_kalamar_vesinger/qst_kalamar_vesinger008.mp3", "", "", 1634811844, 2197818091, Spawn) + AddConversationOption(conversation, "I've been everywhere on the list but haven't seen anything about the Grender.", "dlg_107_1") + AddConversationOption(conversation, "I've misplaced the scroll you gave me.") + AddConversationOption(conversation, "I'm still searching.") + StartConversation(conversation, NPC, Spawn, "How goes the hunt?") + end + + if convo==108 then + PlayFlavor(NPC, "voiceover/english/exp03_questvo/kalamar_vesinger/_exp03/exp03_cty_kelethin/quest/qst_kalamar_vesinger/qst_kalamar_vesinger008.mp3", "", "", 1634811844, 2197818091, Spawn) + AddConversationOption(conversation, "I've been everywhere on the list but haven't seen anything about the Grender.", "dlg_108_1") + AddConversationOption(conversation, "I've misplaced the scroll you gave me.") + AddConversationOption(conversation, "I'm still searching.") + StartConversation(conversation, NPC, Spawn, "How goes the hunt?") + end + +end + +function dlg_0_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/exp03_questvo/kalamar_vesinger/_exp03/exp03_cty_kelethin/quest/qst_kalamar_vesinger/qst_kalamar_vesinger016.mp3", "", "", 820648021, 3003512637, Spawn) + AddConversationOption(conversation, "The central stump.", "dlg_0_2") + StartConversation(conversation, NPC, Spawn, "Ah...so the latest reports were true. Which stump is that beast using as its lair?") +end + +function dlg_0_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/exp03_questvo/kalamar_vesinger/_exp03/exp03_cty_kelethin/quest/qst_kalamar_vesinger/qst_kalamar_vesinger019.mp3", "", "", 1833569894, 3935541730, Spawn) + AddConversationOption(conversation, "Thank you! But what can I do to help now?", "dlg_0_3") + StartConversation(conversation, NPC, Spawn, "XXXXXXXX, for someone who has not completed the Rite of Passage, you show commendable courage and initiative. I'm very impressed! Your spirit has found a worthy place to reawaken.") +end + +function dlg_0_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/exp03_questvo/kalamar_vesinger/_exp03/exp03_cty_kelethin/quest/qst_kalamar_vesinger/qst_kalamar_vesinger018.mp3", "", "", 3857736542, 2958380917, Spawn) + AddConversationOption(conversation, "I'll do that.", "dlg_0_4") + StartConversation(conversation, NPC, Spawn, "This might be beyond what Lady Katri had intended when she sent you to me. Perhaps you should check with her to see if she will allow you to assist us further. She will be working with other newcomers and Rite of Passage applicants near the Old Kelethin Acorn Lift.") +end + +function dlg_98_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/exp03_questvo/kalamar_vesinger/_exp03/exp03_cty_kelethin/quest/qst_kalamar_vesinger/qst_kalamar_vesinger002.mp3", "", "", 3295585723, 2659074372, Spawn) + AddConversationOption(conversation, "It's about the Grender...I hear you're the first person who saw it.", "dlg_98_2") + StartConversation(conversation, NPC, Spawn, "Ah, if Lady Katri sent you, I'd be more than happy to help you. What is it you need, huh?") +end + +function dlg_98_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/exp03_questvo/kalamar_vesinger/_exp03/exp03_cty_kelethin/quest/qst_kalamar_vesinger/qst_kalamar_vesinger003.mp3", "", "", 3687515657, 2071313746, Spawn) + AddConversationOption(conversation, "Why is that?", "dlg_98_3") + StartConversation(conversation, NPC, Spawn, "I haven't actually seen it myself, but I did some of the initial investigation into its existence. I'm sure it really exists. Some folks are skeptical, though.") +end + +function dlg_98_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/exp03_questvo/kalamar_vesinger/_exp03/exp03_cty_kelethin/quest/qst_kalamar_vesinger/qst_kalamar_vesinger004.mp3", "", "", 738876397, 3999214733, Spawn) + AddConversationOption(conversation, "Have the scouts been able to learn anything?", "dlg_98_4") + StartConversation(conversation, NPC, Spawn, "For one thing, if such a creature existed, why hasn't anyone seen it before? Also, we can't find its lair. It's possible that it spreads its influence from Lesser Faydark, but then why haven't we seen evidence of disease on creatures anywhere else?") +end + +function dlg_98_4(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/exp03_questvo/kalamar_vesinger/_exp03/exp03_cty_kelethin/quest/qst_kalamar_vesinger/qst_kalamar_vesinger005.mp3", "", "", 3011438280, 2479522140, Spawn) + AddConversationOption(conversation, "Sounds reasonable.", "dlg_98_5") + StartConversation(conversation, NPC, Spawn, "We've been debating whether or not no news is good news. No recent incidents have been reported around Kelethin. However, given that only creatures near our town have been affected, it's likely that the Grender is nearby.") +end + +function dlg_98_5(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/exp03_questvo/kalamar_vesinger/_exp03/exp03_cty_kelethin/quest/qst_kalamar_vesinger/qst_kalamar_vesinger006.mp3", "", "", 370779524, 2237372107, Spawn) + AddConversationOption(conversation, "Of course!", "dlg_98_6") + AddConversationOption(conversation, "Not right now.") + StartConversation(conversation, NPC, Spawn, "A creature that large could only hide in a few places. Perhaps you'd help out by investigating a few of these places?") +end + +function dlg_98_6(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/exp03_questvo/kalamar_vesinger/_exp03/exp03_cty_kelethin/quest/qst_kalamar_vesinger/qst_kalamar_vesinger007.mp3", "", "", 1729927705, 3759911339, Spawn) + AddConversationOption(conversation, "I'll be back.", "dlg_98_7") + StartConversation(conversation, NPC, Spawn, "Excellent. Here's a scroll for you. It has a list of some areas that shouldn't be too difficult for you to reach on your own. Take a quick look around, then come back and let me know what you find out.") +end + +function dlg_107_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/exp03_questvo/kalamar_vesinger/_exp03/exp03_cty_kelethin/quest/qst_kalamar_vesinger/qst_kalamar_vesinger014.mp3", "", "", 3537512118, 3683878271, Spawn) + AddConversationOption(conversation, "Thanks!") + StartConversation(conversation, NPC, Spawn, "Fortunately, I have several copies of it. If anyone finds them, they appear to be simple travelogues, so no harm done!") +end + +function dlg_108_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/exp03_questvo/kalamar_vesinger/_exp03/exp03_cty_kelethin/quest/qst_kalamar_vesinger/qst_kalamar_vesinger009.mp3", "", "", 3308883973, 1803706282, Spawn) + AddConversationOption(conversation, "Why's that?", "dlg_108_2") + StartConversation(conversation, NPC, Spawn, "No? That's disappointing, to say the least. We did receive one more report while you were gone, but it's not particularly credible.") +end + +function dlg_108_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/exp03_questvo/kalamar_vesinger/_exp03/exp03_cty_kelethin/quest/qst_kalamar_vesinger/qst_kalamar_vesinger010.mp3", "", "", 2776180591, 2107105431, Spawn) + AddConversationOption(conversation, "If the Grender were inside the city, someone would sound the alarm.", "dlg_108_3") + StartConversation(conversation, NPC, Spawn, "The report indicates that the Grender is in Kelethin! That's just absurd. And yet, how else would a creature like this be able to affect saplings and other young creatures so close to our home?") +end + +function dlg_108_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/exp03_questvo/kalamar_vesinger/_exp03/exp03_cty_kelethin/quest/qst_kalamar_vesinger/qst_kalamar_vesinger011.mp3", "", "", 2655458455, 91161091, Spawn) + AddConversationOption(conversation, "Well...there are some very large tree stumps.", "dlg_108_4") + StartConversation(conversation, NPC, Spawn, "My thoughts exactly. It is possible, however unlikely, that the Grender's lair is beneath Kelethin itself. You don't recall seeing anything out of the ordinary? Anything that a creature could hide in?") +end + +function dlg_108_4(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/exp03_questvo/kalamar_vesinger/_exp03/exp03_cty_kelethin/quest/qst_kalamar_vesinger/qst_kalamar_vesinger012.mp3", "", "", 3801940384, 3412413593, Spawn) + AddConversationOption(conversation, "I could check out these stumps for you.", "dlg_108_5") + StartConversation(conversation, NPC, Spawn, "So you suspect the Grender is inside one of these stumps? Hm. This could be dangerous. Kelethin is linked to two of these stumps via bridges and platforms. If the Grender has a lair that close, we may have simply been searching for it too far away!") +end + +function dlg_108_5(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/exp03_questvo/kalamar_vesinger/_exp03/exp03_cty_kelethin/quest/qst_kalamar_vesinger/qst_kalamar_vesinger013.mp3", "", "", 4194593417, 1620249668, Spawn) + AddConversationOption(conversation, "I'll be thorough.", "dlg_108_6") + StartConversation(conversation, NPC, Spawn, "Yes...yes, that would be excellent! Search the stumps carefully. It could be that the Grender is using some sort of magical device to concentrate his influence around the city. That would certainly explain why these diseased creatures have only been seen nearby.") +end + +--[[ raw_conversations + PlayFlavor(NPC, "voiceover/english/exp03_questvo/kalamar_vesinger/_exp03/exp03_cty_kelethin/quest/quest_kalamar_vesinger_maps_e032fc6a.mp3", "Fae Royal Messengers are also scouts, you know!", "", 2067512704, 3523424195, Spawn) + PlayFlavor(NPC, "voiceover/english/exp03_questvo/kalamar_vesinger/_exp03/exp03_cty_kelethin/quest/quest_kalamar_vesinger_maps_6657ebe1.mp3", "Maps are so interesting, aren't they?", "", 3408257918, 268204611, Spawn) + PlayFlavor(NPC, "voiceover/english/exp03_questvo/kalamar_vesinger/_exp03/exp03_cty_kelethin/quest/quest_kalamar_vesinger_maps_a5c2cc74.mp3", "Sometimes I like to come here just to see the new maps.", "", 2592389380, 2012943859, Spawn) +--]] + diff --git a/server/SpawnScripts/GreaterFaydark/KaleVilaaka.lua b/server/SpawnScripts/GreaterFaydark/KaleVilaaka.lua new file mode 100644 index 000000000..664059b91 --- /dev/null +++ b/server/SpawnScripts/GreaterFaydark/KaleVilaaka.lua @@ -0,0 +1,38 @@ +--[[ + Script Name : SpawnScripts/GreaterFaydark/KaleVilaaka.lua + Script Purpose : Kale Vilaaka + Script Author : John Adams + Script Date : 2009.03.01 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +function spawn(NPC) + SetPlayerProximityFunction(NPC, 10, "InRange", "LeaveRange") +end + +function respawn(NPC) + spawn(NPC) +end + +function InRange(NPC, Spawn) +end + +function LeaveRange(NPC, Spawn) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + + choice = math.random(1,3) + + if choice == 1 then + PlayFlavor(NPC, "", "Go ahead and use my test kitchen, so long as you clean up after yourself.", "", 1689589577, 4560189, Spawn) + elseif choice == 2 then + PlayFlavor(NPC, "", "Mmm, mmm! Doesn't this smell like something that'll be good to eat?", "", 1689589577, 4560189, Spawn) + elseif choice == 3 then + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_3_1039.mp3", "", "", 0, 0, Spawn) + else + end + +end + diff --git a/server/SpawnScripts/GreaterFaydark/KaljaSongstress.lua b/server/SpawnScripts/GreaterFaydark/KaljaSongstress.lua new file mode 100644 index 000000000..daeb10c4e --- /dev/null +++ b/server/SpawnScripts/GreaterFaydark/KaljaSongstress.lua @@ -0,0 +1,28 @@ +--[[ + Script Name : SpawnScripts/GreaterFaydark/KaljaSongstress.lua + Script Purpose : Kalja Songstress + Script Author : John Adams + Script Date : 2009.03.01 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +function spawn(NPC) + SetPlayerProximityFunction(NPC, 10, "InRange", "LeaveRange") +end + +function respawn(NPC) + spawn(NPC) +end + +function InRange(NPC, Spawn) +end + +function LeaveRange(NPC, Spawn) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + + PlayFlavor(NPC, "", "La! La! La!", "orate", 1689589577, 4560189, Spawn) +end + diff --git a/server/SpawnScripts/GreaterFaydark/KarinaMulberry.lua b/server/SpawnScripts/GreaterFaydark/KarinaMulberry.lua new file mode 100644 index 000000000..87ae36a3f --- /dev/null +++ b/server/SpawnScripts/GreaterFaydark/KarinaMulberry.lua @@ -0,0 +1,39 @@ +--[[ + Script Name : SpawnScripts/GreaterFaydark/KarinaMulberry.lua + Script Purpose : Karina Mulberry + Script Author : John Adams + Script Date : 2009.03.01 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +function spawn(NPC) + SetPlayerProximityFunction(NPC, 10, "InRange", "LeaveRange") +end + +function respawn(NPC) + spawn(NPC) +end + +function InRange(NPC, Spawn) +end + +function LeaveRange(NPC, Spawn) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + + Say(NPC, "I found this spawn 'unspawned', could not find her in Live, but we had her once, and have a script, so what's the deal? She valid or not?") + +--[[ + choice = math.random(1,2) + + if choice == 1 then + PlayFlavor(NPC, "", "Old Kelethin is closest to Tunare's Sapling.", "", 1689589577, 4560189, Spawn) + elseif choice == 2 then + PlayFlavor(NPC, "", "I'm glad to see so many Feir'Dal survived beyond Faydwer!", "", 1689589577, 4560189, Spawn) + else + end +--]] +end + diff --git a/server/SpawnScripts/GreaterFaydark/KatrynLitewing.lua b/server/SpawnScripts/GreaterFaydark/KatrynLitewing.lua new file mode 100644 index 000000000..701f8900f --- /dev/null +++ b/server/SpawnScripts/GreaterFaydark/KatrynLitewing.lua @@ -0,0 +1,28 @@ +--[[ + Script Name : SpawnScripts/GreaterFaydark/KatrynLitewing.lua + Script Purpose : Katryn Litewing + Script Author : John Adams + Script Date : 2009.03.01 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +function spawn(NPC) + SetPlayerProximityFunction(NPC, 10, "InRange", "LeaveRange") +end + +function respawn(NPC) + spawn(NPC) +end + +function InRange(NPC, Spawn) +end + +function LeaveRange(NPC, Spawn) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + + PlayFlavor(NPC, "", "Greetings friend. I am sorry, but I can only assist members of more advanced guilds with their cloak design.", "", 1689589577, 4560189, Spawn) +end + diff --git a/server/SpawnScripts/GreaterFaydark/KieloNoronen.lua b/server/SpawnScripts/GreaterFaydark/KieloNoronen.lua new file mode 100644 index 000000000..1907ebb2a --- /dev/null +++ b/server/SpawnScripts/GreaterFaydark/KieloNoronen.lua @@ -0,0 +1,40 @@ +--[[ + Script Name : SpawnScripts/GreaterFaydark/KieloNoronen.lua + Script Purpose : Kielo Noronen + Script Author : John Adams + Script Date : 2009.03.01 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +function spawn(NPC) + SetPlayerProximityFunction(NPC, 10, "InRange", "LeaveRange") +end + +function respawn(NPC) + spawn(NPC) +end + +function InRange(NPC, Spawn) +end + +function LeaveRange(NPC, Spawn) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + + choice = math.random(1,4) + + if choice == 1 then + PlayFlavor(NPC, "", "You won't be sorry when you buy here!", "hello", 1689589577, 4560189, Spawn) + elseif choice == 2 then + PlayFlavor(NPC, "", "If you find anything you want, let me know!", "", 1689589577, 4560189, Spawn) + elseif choice == 3 then + PlayFlavor(NPC, "", "Come on over and shop awhile!", "beckon", 1689589577, 4560189, Spawn) + elseif choice == 4 then + PlayFlavor(NPC, "", "Someone's bound to be selling exactly what you need!", "hello", 1689589577, 4560189, Spawn) + else + end + +end + diff --git a/server/SpawnScripts/GreaterFaydark/KiirkinFelendril.lua b/server/SpawnScripts/GreaterFaydark/KiirkinFelendril.lua new file mode 100644 index 000000000..27c7c5cb0 --- /dev/null +++ b/server/SpawnScripts/GreaterFaydark/KiirkinFelendril.lua @@ -0,0 +1,38 @@ +--[[ + Script Name : SpawnScripts/GreaterFaydark/KiirkinFelendril.lua + Script Purpose : Kiirkin Felendril + Script Author : John Adams + Script Date : 2009.03.01 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +function spawn(NPC) + SetPlayerProximityFunction(NPC, 10, "InRange", "LeaveRange") +end + +function respawn(NPC) + spawn(NPC) +end + +function InRange(NPC, Spawn) +end + +function LeaveRange(NPC, Spawn) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + + choice = math.random(1,3) + + if choice == 1 then + PlayFlavor(NPC, "", "STOP! Whatever you do...DON'T move!", "lookaway", 1689589577, 4560189, Spawn) + elseif choice == 2 then + PlayFlavor(NPC, "", "Ah, it's you! I hear all your coin disappeared from the bank!", "point", 1689589577, 4560189, Spawn) + elseif choice == 3 then + PlayFlavor(NPC, "", "Shh! There it is again. The whispering. Can you hear it?", "listen", 1689589577, 4560189, Spawn) + else + end + +end + diff --git a/server/SpawnScripts/GreaterFaydark/Kresp.lua b/server/SpawnScripts/GreaterFaydark/Kresp.lua new file mode 100644 index 000000000..8c328ab19 --- /dev/null +++ b/server/SpawnScripts/GreaterFaydark/Kresp.lua @@ -0,0 +1,41 @@ +--[[ + Script Name : SpawnScripts/GreaterFaydark/Kresp.lua + Script Purpose : Kresp + Script Author : John Adams + Script Date : 2009.03.01 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +function spawn(NPC) + SetPlayerProximityFunction(NPC, 10, "InRange", "LeaveRange") +end + +function respawn(NPC) + spawn(NPC) +end + +function InRange(NPC, Spawn) +end + +function LeaveRange(NPC, Spawn) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "kresp/_exp03/exp03_rgn_greater_faydark/kresp/kresp_001.mp3", "", "", 3832374147, 290832441, Spawn) + AddConversationOption(conversation, "Sure I will help you.", "dlg_18_1") + AddConversationOption(conversation, "Sounds gross.") + StartConversation(conversation, NPC, Spawn, "I am Kresp the collector of things, many things, but not normal things people collect. I collect ears. Yes ears, they sell well if you know who to sell them to. So do you feel like doing some business with Kresp?") +end + +function dlg_18_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "kresp/_exp03/exp03_rgn_greater_faydark/kresp/kresp_002.mp3", "", "", 4281501181, 3879995677, Spawn) + AddConversationOption(conversation, "No problem.", "dlg_18_2") + StartConversation(conversation, NPC, Spawn, "Bring Kresp twenty ears of the orcs they are slimy sometimes so make sure to not get slime off of ear.") +end + diff --git a/server/SpawnScripts/GreaterFaydark/LadyAileetaReila.lua b/server/SpawnScripts/GreaterFaydark/LadyAileetaReila.lua new file mode 100644 index 000000000..3faf403b2 --- /dev/null +++ b/server/SpawnScripts/GreaterFaydark/LadyAileetaReila.lua @@ -0,0 +1,38 @@ +--[[ + Script Name : SpawnScripts/GreaterFaydark/LadyAileetaReila.lua + Script Purpose : Lady Aileeta Reila + Script Author : John Adams + Script Date : 2009.03.01 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +function spawn(NPC) + SetPlayerProximityFunction(NPC, 10, "InRange", "LeaveRange") +end + +function respawn(NPC) + spawn(NPC) +end + +function InRange(NPC, Spawn) +end + +function LeaveRange(NPC, Spawn) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + + choice = math.random(1,3) + + if choice == 1 then + PlayFlavor(NPC, "voiceover/english/exp03_questvo/lady_aileeta_reila/_exp03/exp03_cty_kelethin/quest/qst_aileeta_reila_hail_9730e02e.mp3", "Those pesky cats! They've run off with my feather pen again!", "", 2600248745, 2937953969, Spawn) + elseif choice == 2 then + PlayFlavor(NPC, "voiceover/english/exp03_questvo/lady_aileeta_reila/_exp03/exp03_cty_kelethin/quest/qst_aileeta_reila_hail_eca770db.mp3", "Kelethin is a safe place to live.", "", 73547504, 3028031888, Spawn) + elseif choice == 3 then + PlayFlavor(NPC, "voiceover/english/exp03_questvo/lady_aileeta_reila/_exp03/exp03_cty_kelethin/quest/qst_aileeta_reila_hail_44e0eea8.mp3", "Many things are happening all around Kelethin!", "", 3311909437, 1144669183, Spawn) + else + end + +end + diff --git a/server/SpawnScripts/GreaterFaydark/LadyAletheaJyleel.lua b/server/SpawnScripts/GreaterFaydark/LadyAletheaJyleel.lua new file mode 100644 index 000000000..d2eb4c441 --- /dev/null +++ b/server/SpawnScripts/GreaterFaydark/LadyAletheaJyleel.lua @@ -0,0 +1,42 @@ +--[[ + Script Name : SpawnScripts/GreaterFaydark/LadyAletheaJyleel.lua + Script Purpose : Lady Alethea Jyleel + Script Author : John Adams + Script Date : 2009.03.01 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +function spawn(NPC) + SetPlayerProximityFunction(NPC, 10, "InRange", "LeaveRange") +end + +function respawn(NPC) + spawn(NPC) +end + +function InRange(NPC, Spawn) +end + +function LeaveRange(NPC, Spawn) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + + choice = math.random(1,5) + + if choice == 1 then + PlayFlavor(NPC, "", "The boughs of the great trees shall keep us safe from the dangers below.", "converse_female06", 1689589577, 4560189, Spawn) + elseif choice == 2 then + PlayFlavor(NPC, "", "The great branches of Kelethin sway a graceful dance. Such a performance keeps the city safe.", "flourish", 1689589577, 4560189, Spawn) + elseif choice == 3 then + PlayFlavor(NPC, "", "These fae are kind creatures of magic. The Feir'Dal owe them much.", "", 1689589577, 4560189, Spawn) + elseif choice == 4 then + PlayFlavor(NPC, "", "May the blessings of Marr protect you on your journeys within the Faydark.", "fullcurtsey", 1689589577, 4560189, Spawn) + elseif choice == 5 then + PlayFlavor(NPC, "", "Beware the edges of the city. Many have plummeted to their death when not watching their footsteps.", "", 1689589577, 4560189, Spawn) + else + end + +end + diff --git a/server/SpawnScripts/GreaterFaydark/LadyAstaarEvinien.lua b/server/SpawnScripts/GreaterFaydark/LadyAstaarEvinien.lua new file mode 100644 index 000000000..2f19c4aa1 --- /dev/null +++ b/server/SpawnScripts/GreaterFaydark/LadyAstaarEvinien.lua @@ -0,0 +1,157 @@ +--[[ + Script Name : SpawnScripts/GreaterFaydark/LadyAstaarEvinien.lua + Script Purpose : Lady Astaar Evinien + Script Author : John Adams + Script Date : 2009.03.01 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +function spawn(NPC) + SetPlayerProximityFunction(NPC, 10, "InRange", "LeaveRange") +end + +function respawn(NPC) + spawn(NPC) +end + +function InRange(NPC, Spawn) +end + +function LeaveRange(NPC, Spawn) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_2_1005.mp3", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "What's that?", "dlg_37_1") + AddConversationOption(conversation, "No, thanks.") + StartConversation(conversation, NPC, Spawn, "Hello there! Are you here to participate in the Fae Ritual of Calling?") + if convo==101 then + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_2_1005.mp3", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Yes, I have.", "dlg_101_1") + AddConversationOption(conversation, "Not yet.") + StartConversation(conversation, NPC, Spawn, "Have you placed the offering at the memorial?") + end + + if convo==102 then + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_2_1005.mp3", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Yes, I have.", "dlg_102_1") + AddConversationOption(conversation, "Not yet.") + StartConversation(conversation, NPC, Spawn, "Have you placed the offering at the memorial?") + end + + if convo==103 then + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_2_1005.mp3", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Yes, I have.", "dlg_103_1") + AddConversationOption(conversation, "Not yet.") + StartConversation(conversation, NPC, Spawn, "Have you placed the offering at the memorial?") + end + +end + +function dlg_37_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "I'd love to do that.", "dlg_37_2") + AddConversationOption(conversation, "I'm not interested.") + StartConversation(conversation, NPC, Spawn, "It's a ritual that allows the Fae, as well as those who honor our ways, to return to Kelethin whenever they wish.") +end + +function dlg_37_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "What must I do?", "dlg_37_3") + StartConversation(conversation, NPC, Spawn, "Excellent! I have already heard of your prowess from the Matron, .. GetName(Spawn) .. . so this will be easy for you. The Fae use these simple rituals to help us retain our sense of community, especially with so many changes coming our way lately.") +end + +function dlg_37_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "I see.", "dlg_37_4") + AddConversationOption(conversation, "I'm not ready for this task just yet.") + StartConversation(conversation, NPC, Spawn, "You've heard of the Fae spirit buds and may have assumed that we are some type of plant! It's merely a figure of speech. Our spirit buds surround the city, observing and guiding us. When a spirit bud is ready for renewal, it chooses when and where to return. The ritual you'll perform welcomes a spirit back to us, helping it focus on our beloved city.") +end + +function dlg_37_4(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "I will do this.", "dlg_37_5") + StartConversation(conversation, NPC, Spawn, "Take this simple offering with you to the memorial inside Kelethin to those who fell during the Siege. The best way to welcome a new spirit is by honoring those spirits no longer with us.") +end + +function dlg_101_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "It was a memorial to those who fell during the Siege of Kelethin.", "dlg_101_2") + AddConversationOption(conversation, "I don't understand the meaning of the memorial.") + StartConversation(conversation, NPC, Spawn, "Do you understand? Or do you have questions?") +end + +function dlg_101_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "I see.", "dlg_101_3") + StartConversation(conversation, NPC, Spawn, "The memorial was placed on the remains of a tree burnt during the Siege. Many, not just Fae, lost their lives in that time. Many of our spirits were lost in that time...so we honor the returning Fae spirits that much more. We are glad that they can return, you see?") +end + +function dlg_102_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "It was a memorial to those who fell during the Siege of Kelethin.", "dlg_102_2") + AddConversationOption(conversation, "I don't understand the meaning of the memorial.") + StartConversation(conversation, NPC, Spawn, "Do you understand? Or do you have questions?") +end + +function dlg_102_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "I see.") + StartConversation(conversation, NPC, Spawn, "The memorial was placed on the remains of a tree burnt during the Siege. Many, not just Fae, lost their lives in that time. Many of our spirits were lost in that time...so we honor the returning Fae spirits that much more. We are glad that they can return, you see?") +end + +function dlg_103_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "It was a memorial to those who fell during the Siege of Kelethin.", "dlg_103_2") + AddConversationOption(conversation, "I don't understand the meaning of the memorial.") + StartConversation(conversation, NPC, Spawn, "Do you understand? Or do you have questions?") +end + +function dlg_103_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "I see.", "dlg_103_3") + StartConversation(conversation, NPC, Spawn, "The memorial was placed on the remains of a tree burnt during the Siege. Many, not just Fae, lost their lives in that time. Many of our spirits were lost in that time...so we honor the returning Fae spirits that much more. We are glad that they can return, you see?") +end + +function dlg_103_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Thank you.", "dlg_103_4") + StartConversation(conversation, NPC, Spawn, "May Tunare guide you, .. GetName(Spawn) .. . You've shown the Fae respect by honoring our ritual. I'm pleased to present you with the Call of Kelethin, so that your spirit may also return to us.") +end + diff --git a/server/SpawnScripts/GreaterFaydark/LadyKatriEloranta.lua b/server/SpawnScripts/GreaterFaydark/LadyKatriEloranta.lua new file mode 100644 index 000000000..67e75b920 --- /dev/null +++ b/server/SpawnScripts/GreaterFaydark/LadyKatriEloranta.lua @@ -0,0 +1,538 @@ +--[[ + Script Name : SpawnScripts/GreaterFaydark/LadyKatriEloranta.lua + Script Purpose : Lady Katri Eloranta + Script Author : John Adams + Script Date : 2009.03.01 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +function spawn(NPC) + SetPlayerProximityFunction(NPC, 10, "InRange", "LeaveRange") +end + +function respawn(NPC) + spawn(NPC) +end + +function InRange(NPC, Spawn) +end + +function LeaveRange(NPC, Spawn) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/exp03_questvo/lady_katri_eloranta/_exp03/exp03_cty_kelethin/tutorials/qst_katri/qst_katri043.mp3", "", "", 1735617296, 447259139, Spawn) + AddConversationOption(conversation, "Apparently, it really does exist -- and it's using one of Kelethin's tree stumps as its lair!", "dlg_1_1") + AddConversationOption(conversation, "I'm still learning.") + StartConversation(conversation, NPC, Spawn, "Have you learned more about the Grender?") + if convo==18 then + PlayFlavor(NPC, "voiceover/english/exp03_questvo/lady_katri_eloranta/_exp03/exp03_cty_kelethin/tutorials/qst_katri/qst_katri_both001.mp3", "", "", 3983154354, 2409150172, Spawn) + AddConversationOption(conversation, "I am seeking adventure.", "dlg_18_1") + AddConversationOption(conversation, "I'll be on my way now.") + StartConversation(conversation, NPC, Spawn, "Hello, I am Lady Katri Eloranta, advisor. How may I help you?") + end + + if convo==36 then + PlayFlavor(NPC, "voiceover/english/exp03_questvo/lady_katri_eloranta/_exp03/exp03_cty_kelethin/tutorials/qst_katri/qst_katri009.mp3", "", "", 4145784618, 3223534278, Spawn) + AddConversationOption(conversation, "I completed the training, my lady.", "dlg_36_1") + AddConversationOption(conversation, "I am still working on it.") + StartConversation(conversation, NPC, Spawn, "How goes your self-defense training?") + end + + if convo==37 then + PlayFlavor(NPC, "voiceover/english/exp03_questvo/lady_katri_eloranta/_exp03/exp03_cty_kelethin/tutorials/qst_katri/qst_katri009.mp3", "", "", 4145784618, 3223534278, Spawn) + AddConversationOption(conversation, "I completed the training, my lady.", "dlg_37_1") + AddConversationOption(conversation, "I am still working on it.") + StartConversation(conversation, NPC, Spawn, "How goes your self-defense training?") + end + + if convo==89 then + PlayFlavor(NPC, "voiceover/english/exp03_questvo/lady_katri_eloranta/_exp03/exp03_cty_kelethin/tutorials/qst_katri/qst_katri015.mp3", "", "", 3835887931, 684375070, Spawn) + AddConversationOption(conversation, "Not yet, but I have some questions.", "dlg_89_1") + AddConversationOption(conversation, "Not yet.") + StartConversation(conversation, NPC, Spawn, "You've finished your Fae history studies so soon?") + end + + if convo==90 then + PlayFlavor(NPC, "voiceover/english/exp03_questvo/lady_katri_eloranta/_exp03/exp03_cty_kelethin/tutorials/qst_katri/qst_katri015.mp3", "", "", 3835887931, 684375070, Spawn) + AddConversationOption(conversation, "Not yet, but I have some questions.", "dlg_90_1") + AddConversationOption(conversation, "Not yet.") + StartConversation(conversation, NPC, Spawn, "You've finished your Fae history studies so soon?") + end + + if convo==91 then + PlayFlavor(NPC, "voiceover/english/exp03_questvo/lady_katri_eloranta/_exp03/exp03_cty_kelethin/tutorials/qst_katri/qst_katri015.mp3", "", "", 3835887931, 684375070, Spawn) + AddConversationOption(conversation, "Not yet, but I have some questions.", "dlg_91_1") + AddConversationOption(conversation, "Not yet.") + StartConversation(conversation, NPC, Spawn, "You've finished your Fae history studies so soon?") + end + + if convo==92 then + PlayFlavor(NPC, "voiceover/english/exp03_questvo/lady_katri_eloranta/_exp03/exp03_cty_kelethin/tutorials/qst_katri/qst_katri020.mp3", "", "", 1734937732, 3669646106, Spawn) + AddConversationOption(conversation, "We must cull those that are diseased.", "dlg_92_1") + AddConversationOption(conversation, "I cannot decide.") + StartConversation(conversation, NPC, Spawn, "You stand at the cusp of your adulthood. What do you recommend that we do with these creatures, .. GetName(Spawn) .. . What does your spirit tell you?") + end + + if convo==93 then + PlayFlavor(NPC, "voiceover/english/exp03_questvo/lady_katri_eloranta/_exp03/exp03_cty_kelethin/tutorials/qst_katri/qst_katri020.mp3", "", "", 1734937732, 3669646106, Spawn) + AddConversationOption(conversation, "We must cull those that are diseased.", "dlg_93_1") + AddConversationOption(conversation, "I cannot decide.") + StartConversation(conversation, NPC, Spawn, "You stand at the cusp of your adulthood. What do you recommend that we do with these creatures, .. GetName(Spawn) .. . What does your spirit tell you?") + end + + if convo==97 then + PlayFlavor(NPC, "voiceover/english/exp03_questvo/lady_katri_eloranta/_exp03/exp03_cty_kelethin/tutorials/qst_katri/qst_katri030.mp3", "", "", 601485501, 2301313071, Spawn) + AddConversationOption(conversation, "I wish we could have healed those creatures.", "dlg_97_1") + AddConversationOption(conversation, "I'd rather not speak about it now.") + StartConversation(conversation, NPC, Spawn, "You seem troubled, .. GetName(Spawn) .. . What is it?") + end + +end + +function dlg_1_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/exp03_questvo/lady_katri_eloranta/_exp03/exp03_cty_kelethin/tutorials/qst_katri/qst_katri044.mp3", "", "", 1161697637, 3743302883, Spawn) + AddConversationOption(conversation, "I want to help!", "dlg_1_2") + AddConversationOption(conversation, "I must take care of some personal business first.") + StartConversation(conversation, NPC, Spawn, "The Grender using one of our own trees as its lair is very bad news. When something is close to you, you tend to overlook it. This creature must be dealt with, and swiftly!") +end + +function dlg_1_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/exp03_questvo/lady_katri_eloranta/_exp03/exp03_cty_kelethin/tutorials/qst_katri/qst_katri045.mp3", "", "", 3409419602, 4220390351, Spawn) + AddConversationOption(conversation, "Kelethin must be saved at all costs.", "dlg_1_3") + StartConversation(conversation, NPC, Spawn, "No, .. GetName(Spawn) .. . You are in the midst of your Rite of Passage. If you leave now before it is complete, you may never be able to finish.") +end + +function dlg_1_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/exp03_questvo/lady_katri_eloranta/_exp03/exp03_cty_kelethin/tutorials/qst_katri/qst_katri046.mp3", "", "", 3666385411, 3496691954, Spawn) + AddConversationOption(conversation, "Yes. My spirit will renew someday, whether in me or in someone else.", "dlg_1_4") + AddConversationOption(conversation, "I need more time to consider this.") + StartConversation(conversation, NPC, Spawn, "You're willing to sacrifice your own future to save Kelethin?") +end + +function dlg_1_4(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/exp03_questvo/lady_katri_eloranta/_exp03/exp03_cty_kelethin/tutorials/qst_katri/qst_katri047.mp3", "", "", 455754558, 1919269008, Spawn) + AddConversationOption(conversation, "You did?", "dlg_1_5") + StartConversation(conversation, NPC, Spawn, "Well done, .. GetName(Spawn) .. . I knew I sensed greatness in you.") +end + +function dlg_1_5(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/exp03_questvo/lady_katri_eloranta/_exp03/exp03_cty_kelethin/tutorials/qst_katri/qst_katri050.mp3", "", "", 3603309443, 2534399133, Spawn) + AddConversationOption(conversation, "I'll speak with her now.", "dlg_1_6") + StartConversation(conversation, NPC, Spawn, "Of course! I venture to say that you will want to discuss strategies concerning the Grender with someone. It won't do to just rush blindly in for the attack. Speak with Jalmari Keletana, near the Old Kelethin Acorn Lift. She belongs to our self-defense counsel and will assist you.") +end + +function dlg_18_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/exp03_questvo/lady_katri_eloranta/_exp03/exp03_cty_kelethin/tutorials/qst_katri/qst_katri001.mp3", "", "", 1049447300, 1949649811, Spawn) + AddConversationOption(conversation, "Yes! I can't wait!", "dlg_18_2") + AddConversationOption(conversation, "The Rite of Passage?") + AddConversationOption(conversation, "I'm not quite ready for that.") + StartConversation(conversation, NPC, Spawn, "Are you ready to begin your studies for the Rite of Passage?") +end + +function dlg_18_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/exp03_questvo/lady_katri_eloranta/_exp03/exp03_cty_kelethin/tutorials/qst_katri/qst_katri002.mp3", "", "", 3689194229, 1343885891, Spawn) + AddConversationOption(conversation, "My spirit remembers quite a lot, but it forgot about the Rite of Passage.") + StartConversation(conversation, NPC, Spawn, "Once you complete the Rite of Passage, you are granted full access to the city of Kelethin. The Rite tests your knowledge, capability and competence and allows us to see what your spirit remembers.") +end + +function dlg_18_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/exp03_questvo/lady_katri_eloranta/_exp03/exp03_cty_kelethin/tutorials/qst_katri/qst_katri003.mp3", "", "", 4152347739, 1411384376, Spawn) + AddConversationOption(conversation, "I am ready.", "dlg_18_4") + AddConversationOption(conversation, "I'm not quite ready yet.") + StartConversation(conversation, NPC, Spawn, "That's natural. As time flows past us, our spirit buds save only what is absolutely necessary for our survival. The Rite of Passage has changed over time as we have changed ourselves. Are you ready to begin?") +end + +function dlg_18_4(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/exp03_questvo/lady_katri_eloranta/_exp03/exp03_cty_kelethin/tutorials/qst_katri/qst_katri004.mp3", "", "", 861135728, 126889941, Spawn) + AddConversationOption(conversation, "There are several tests, aren't there?", "dlg_18_5") + StartConversation(conversation, NPC, Spawn, "The Rite of Passage is a test of your maturity. While our spirits retain the essentials stored by our ancestors, we are only able to pass the Rite of Passage at the right time of our growth.") +end + +function dlg_18_5(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/exp03_questvo/lady_katri_eloranta/_exp03/exp03_cty_kelethin/tutorials/qst_katri/qst_katri005.mp3", "", "", 1325478030, 3761794570, Spawn) + AddConversationOption(conversation, "I understand.", "dlg_18_6") + StartConversation(conversation, NPC, Spawn, "Correct. And you must pass each test, though you can certainly take as much time as you need. This isn't a test of speed, but of spirit.") +end + +function dlg_18_6(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/exp03_questvo/lady_katri_eloranta/_exp03/exp03_cty_kelethin/tutorials/qst_katri/qst_katri006.mp3", "", "", 3359362369, 2718053972, Spawn) + AddConversationOption(conversation, "What should I study first?", "dlg_18_7") + AddConversationOption(conversation, "I need to begin this another time.") + StartConversation(conversation, NPC, Spawn, "You will learn everything you need to know from the instructors, but which elements will be in your individual Rite of Passage will only be revealed in the final test.") +end + +function dlg_18_7(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/exp03_questvo/lady_katri_eloranta/_exp03/exp03_cty_kelethin/tutorials/qst_katri/qst_katri007.mp3", "", "", 2759194756, 1812971858, Spawn) + AddConversationOption(conversation, "I know!", "dlg_18_8") + StartConversation(conversation, NPC, Spawn, "Although we are peaceful, we all learn the art of self-defense. Go to the library, just one platform over, where you will learn about our self-defense postures. And be careful crossing the platforms, XXXXXXXX.") +end + +function dlg_18_8(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/exp03_questvo/lady_katri_eloranta/_exp03/exp03_cty_kelethin/tutorials/qst_katri/qst_katri008.mp3", "", "", 1488353085, 2480151876, Spawn) + AddConversationOption(conversation, "I will come back when I've completed this task.", "dlg_18_9") + StartConversation(conversation, NPC, Spawn, "I realize you've heard that all your life, but it would certainly be a shame to lose such a promising spirit at this point, wouldn't it?") +end + +function dlg_36_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/exp03_questvo/lady_katri_eloranta/_exp03/exp03_cty_kelethin/tutorials/qst_katri/qst_katri010.mp3", "", "", 2141344293, 2858138315, Spawn) + AddConversationOption(conversation, "I guess I'm so excited about the Rite of Passage that I forgot.", "dlg_36_2") + AddConversationOption(conversation, "I'm sorry, but I honestly don't remember.") + StartConversation(conversation, NPC, Spawn, "Don't be so formal, .. GetName(Spawn) .. . Please, call me 'Katri.' The title of 'Lady' is merely the way that advisors such as myself are distinguished in Kelethin. Or have you forgotten that?") +end + +function dlg_36_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/exp03_questvo/lady_katri_eloranta/_exp03/exp03_cty_kelethin/tutorials/qst_katri/qst_katri011.mp3", "", "", 2174466602, 3932055913, Spawn) + AddConversationOption(conversation, "Should I study more about history now?") + AddConversationOption(conversation, "I will need to return later.", "dlg_36_3") + StartConversation(conversation, NPC, Spawn, "Not to worry. The Rite of Passage exists to teach you not only how to conduct yourself but also how to retain the memories of your spirit so that they may be passed down through the generations.") +end + +function dlg_37_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/exp03_questvo/lady_katri_eloranta/_exp03/exp03_cty_kelethin/tutorials/qst_katri/qst_katri010.mp3", "", "", 2141344293, 2858138315, Spawn) + AddConversationOption(conversation, "I guess I'm so excited about the Rite of Passage that I forgot.", "dlg_37_2") + AddConversationOption(conversation, "I'm sorry, but I honestly don't remember.") + StartConversation(conversation, NPC, Spawn, "Don't be so formal, .. GetName(Spawn) .. . Please, call me 'Katri.' The title of 'Lady' is merely the way that advisors such as myself are distinguished in Kelethin. Or have you forgotten that?") +end + +function dlg_37_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/exp03_questvo/lady_katri_eloranta/_exp03/exp03_cty_kelethin/tutorials/qst_katri/qst_katri011.mp3", "", "", 2174466602, 3932055913, Spawn) + AddConversationOption(conversation, "Should I study more about history now?", "dlg_37_3") + AddConversationOption(conversation, "I will need to return later.") + StartConversation(conversation, NPC, Spawn, "Not to worry. The Rite of Passage exists to teach you not only how to conduct yourself but also how to retain the memories of your spirit so that they may be passed down through the generations.") +end + +function dlg_37_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/exp03_questvo/lady_katri_eloranta/_exp03/exp03_cty_kelethin/tutorials/qst_katri/qst_katri012.mp3", "", "", 1082992118, 2058500337, Spawn) + AddConversationOption(conversation, "She is a history teacher?", "dlg_37_4") + StartConversation(conversation, NPC, Spawn, "That's an excellent idea, .. GetName(Spawn) .. . Much of our history is inherited through our spirit bud and yet, there are still gaps. The collective memories of our community are what maintains our continuity. Your first instructor is my sister, Lyyti Eloranta.") +end + +function dlg_37_4(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/exp03_questvo/lady_katri_eloranta/_exp03/exp03_cty_kelethin/tutorials/qst_katri/qst_katri013.mp3", "", "", 1032451909, 2210988260, Spawn) + AddConversationOption(conversation, "I'll get started on my history lessons.", "dlg_37_5") + StartConversation(conversation, NPC, Spawn, "There are several, all in Kelethin. My sister, Lyyti Eloranta, is an excellent teacher.") +end + +function dlg_37_5(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/exp03_questvo/lady_katri_eloranta/_exp03/exp03_cty_kelethin/tutorials/qst_katri/qst_katri014.mp3", "", "", 895440625, 99177481, Spawn) + AddConversationOption(conversation, "Thank you!", "dlg_37_6") + StartConversation(conversation, NPC, Spawn, "Lyyti is minding her shop on the platform near the bank. If you get lost, ask any of the guards to help you find her.") +end + +function dlg_89_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/exp03_questvo/lady_katri_eloranta/_exp03/exp03_cty_kelethin/tutorials/qst_katri/qst_katri016.mp3", "", "", 3658860826, 2912932568, Spawn) + AddConversationOption(conversation, "I spoke with Raimo...he blames Outsiders for bringing disease to the Faydarks.", "dlg_89_2") + StartConversation(conversation, NPC, Spawn, "I'll do my best to answer. What is it?") +end + +function dlg_89_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/exp03_questvo/lady_katri_eloranta/_exp03/exp03_cty_kelethin/tutorials/qst_katri/qst_katri017.mp3", "", "", 4042847648, 718902311, Spawn) + AddConversationOption(conversation, "There is something to what he said. Look at those diseased treants so close to Kelethin.", "dlg_89_3") + AddConversationOption(conversation, "I don't believe all Outsiders are to blame, though I am troubled by the diseased treants.") + StartConversation(conversation, NPC, Spawn, "Dark events in Raimo's past lives continue to shadow his outlook to this day. Not all Fae believe Outsiders are evil.") +end + +function dlg_89_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/exp03_questvo/lady_katri_eloranta/_exp03/exp03_cty_kelethin/tutorials/qst_katri/qst_katri018.mp3", "", "", 3342872278, 3547383900, Spawn) + AddConversationOption(conversation, "Are all the treants of the Faydark at risk?") + AddConversationOption(conversation, "That's what we get for trusting Outsiders.", "dlg_89_4") + StartConversation(conversation, NPC, Spawn, "Ah, the poor treants, rotting from the inside out. We've tried to heal them, but by the time the disease is obvious, it's too late. And I fear the disease is spreading.") +end + +function dlg_90_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/exp03_questvo/lady_katri_eloranta/_exp03/exp03_cty_kelethin/tutorials/qst_katri/qst_katri016.mp3", "", "", 3658860826, 2912932568, Spawn) + AddConversationOption(conversation, "I spoke with Raimo...he blames Outsiders for bringing disease to the Faydarks.", "dlg_90_2") + StartConversation(conversation, NPC, Spawn, "I'll do my best to answer. What is it?") +end + +function dlg_90_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/exp03_questvo/lady_katri_eloranta/_exp03/exp03_cty_kelethin/tutorials/qst_katri/qst_katri017.mp3", "", "", 4042847648, 718902311, Spawn) + AddConversationOption(conversation, "There is something to what he said. Look at those diseased treants so close to Kelethin.", "dlg_90_3") + AddConversationOption(conversation, "I don't believe all Outsiders are to blame, though I am troubled by the diseased treants.") + StartConversation(conversation, NPC, Spawn, "Dark events in Raimo's past lives continue to shadow his outlook to this day. Not all Fae believe Outsiders are evil.") +end + +function dlg_90_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/exp03_questvo/lady_katri_eloranta/_exp03/exp03_cty_kelethin/tutorials/qst_katri/qst_katri018.mp3", "", "", 3342872278, 3547383900, Spawn) + AddConversationOption(conversation, "Are all the treants of the Faydark at risk?", "dlg_90_4") + AddConversationOption(conversation, "That's what we get for trusting Outsiders.") + StartConversation(conversation, NPC, Spawn, "Ah, the poor treants, rotting from the inside out. We've tried to heal them, but by the time the disease is obvious, it's too late. And I fear the disease is spreading.") +end + +function dlg_90_4(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/exp03_questvo/lady_katri_eloranta/_exp03/exp03_cty_kelethin/tutorials/qst_katri/qst_katri025.mp3", "", "", 3597144400, 4127372896, Spawn) + AddConversationOption(conversation, "I don't need to explain it, I just know that it is so.") + StartConversation(conversation, NPC, Spawn, "Like Raimo, you also believe the Outsiders are responsible for this disease? Tell me then, how are they doing this?") +end + +function dlg_91_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/exp03_questvo/lady_katri_eloranta/_exp03/exp03_cty_kelethin/tutorials/qst_katri/qst_katri016.mp3", "", "", 3658860826, 2912932568, Spawn) + AddConversationOption(conversation, "I spoke with Raimo...he blames Outsiders for bringing disease to the Faydarks.", "dlg_91_2") + StartConversation(conversation, NPC, Spawn, "I'll do my best to answer. What is it?") +end + +function dlg_91_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/exp03_questvo/lady_katri_eloranta/_exp03/exp03_cty_kelethin/tutorials/qst_katri/qst_katri017.mp3", "", "", 4042847648, 718902311, Spawn) + AddConversationOption(conversation, "There is something to what he said. Look at those diseased treants so close to Kelethin.", "dlg_91_3") + AddConversationOption(conversation, "I don't believe all Outsiders are to blame, though I am troubled by the diseased treants.") + StartConversation(conversation, NPC, Spawn, "Dark events in Raimo's past lives continue to shadow his outlook to this day. Not all Fae believe Outsiders are evil.") +end + +function dlg_91_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/exp03_questvo/lady_katri_eloranta/_exp03/exp03_cty_kelethin/tutorials/qst_katri/qst_katri018.mp3", "", "", 3342872278, 3547383900, Spawn) + AddConversationOption(conversation, "Are all the treants of the Faydark at risk?", "dlg_91_4") + AddConversationOption(conversation, "That's what we get for trusting Outsiders.") + StartConversation(conversation, NPC, Spawn, "Ah, the poor treants, rotting from the inside out. We've tried to heal them, but by the time the disease is obvious, it's too late. And I fear the disease is spreading.") +end + +function dlg_91_4(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/exp03_questvo/lady_katri_eloranta/_exp03/exp03_cty_kelethin/tutorials/qst_katri/qst_katri019.mp3", "", "", 272244520, 663798395, Spawn) + AddConversationOption(conversation, "What can we do about it?", "dlg_91_5") + StartConversation(conversation, NPC, Spawn, "All of nature is bound together. When one being suffers, those around it suffer as well. There are spiders and beetles that seem to show signs of disease as well, poor wretches.") +end + +function dlg_91_5(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/exp03_questvo/lady_katri_eloranta/_exp03/exp03_cty_kelethin/tutorials/qst_katri/qst_katri020.mp3", "", "", 1734937732, 3669646106, Spawn) + AddConversationOption(conversation, "We must cull those that are diseased.", "dlg_91_6") + AddConversationOption(conversation, "I cannot decide.") + StartConversation(conversation, NPC, Spawn, "You stand at the cusp of your adulthood. What do you recommend that we do with these creatures, .. GetName(Spawn) .. . What does your spirit tell you?") +end + +function dlg_91_6(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/exp03_questvo/lady_katri_eloranta/_exp03/exp03_cty_kelethin/tutorials/qst_katri/qst_katri022.mp3", "", "", 2209003630, 1705635007, Spawn) + AddConversationOption(conversation, "We...must cull the diseased creatures.") + AddConversationOption(conversation, "I need to think about this before I make a decision.", "dlg_91_7") + StartConversation(conversation, NPC, Spawn, "The decision is difficult, isn't it? I believe that you know what the answer is and you find it distasteful or you would not hesitate.") +end + +function dlg_92_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/exp03_questvo/lady_katri_eloranta/_exp03/exp03_cty_kelethin/tutorials/qst_katri/qst_katri023.mp3", "", "", 521100683, 3157912145, Spawn) + AddConversationOption(conversation, "I will remove the diseased creatures.", "dlg_92_2") + StartConversation(conversation, NPC, Spawn, "Destruction is not something we Fae take lightly, but it is sometimes the only way. We have quarantined those creatures beginning to show signs of disease here on Green Knoll.") +end + +function dlg_93_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/exp03_questvo/lady_katri_eloranta/_exp03/exp03_cty_kelethin/tutorials/qst_katri/qst_katri022.mp3", "", "", 2209003630, 1705635007, Spawn) + AddConversationOption(conversation, "We...must cull the diseased creatures.") + AddConversationOption(conversation, "I need to think about this before I make a decision.", "dlg_93_2") + StartConversation(conversation, NPC, Spawn, "The decision is difficult, isn't it? I believe that you know what the answer is and you find it distasteful or you would not hesitate.") +end + +function dlg_93_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/exp03_questvo/lady_katri_eloranta/_exp03/exp03_cty_kelethin/tutorials/qst_katri/qst_katri023.mp3", "", "", 521100683, 3157912145, Spawn) + AddConversationOption(conversation, "I will remove the diseased creatures.", "dlg_93_3") + StartConversation(conversation, NPC, Spawn, "Destruction is not something we Fae take lightly, but it is sometimes the only way. We have quarantined those creatures beginning to show signs of disease here on Green Knoll.") +end + +function dlg_93_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/exp03_questvo/lady_katri_eloranta/_exp03/exp03_cty_kelethin/tutorials/qst_katri/qst_katri024.mp3", "", "", 2967863976, 831925805, Spawn) + AddConversationOption(conversation, "I will.", "dlg_93_4") + StartConversation(conversation, NPC, Spawn, "Thank you, .. GetName(Spawn) .. . Let me know when you are ready to go on with your history lessons.") +end + +function dlg_97_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/exp03_questvo/lady_katri_eloranta/_exp03/exp03_cty_kelethin/tutorials/qst_katri/qst_katri031.mp3", "", "", 180224809, 481643814, Spawn) + AddConversationOption(conversation, "It just didn't seem right, hunting things that were so obviously sick.", "dlg_97_2") + StartConversation(conversation, NPC, Spawn, "So do we all. Whenever possible, we prefer the way of peace and harmony. When we must kill something, we prefer it be in self-defense. All things must be done for the greater good, even if it goes against our personal feelings on the matter. In that way, it is our personal Ring of Fate.") +end + +function dlg_97_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/exp03_questvo/lady_katri_eloranta/_exp03/exp03_cty_kelethin/tutorials/qst_katri/qst_katri032.mp3", "", "", 3434670788, 645022829, Spawn) + AddConversationOption(conversation, "What would make them so diseased they could not be healed?", "dlg_97_3") + StartConversation(conversation, NPC, Spawn, "I understand. And you wonder why I would ask someone on their Rite of Passage to do this task.") +end + +function dlg_97_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/exp03_questvo/lady_katri_eloranta/_exp03/exp03_cty_kelethin/tutorials/qst_katri/qst_katri033.mp3", "", "", 67685926, 1701511155, Spawn) + AddConversationOption(conversation, "Something trying to stir up trouble between the Fae and the Outsiders?", "dlg_97_4") + StartConversation(conversation, NPC, Spawn, "A good question. My suspicion is that some external force is at work. A force which knows that many Fae will blame the Outsiders for the sickness.") +end + +function dlg_97_4(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/exp03_questvo/lady_katri_eloranta/_exp03/exp03_cty_kelethin/tutorials/qst_katri/qst_katri034.mp3", "", "", 2195860271, 1512858419, Spawn) + AddConversationOption(conversation, "There must be something we can do to find out.", "dlg_97_5") + StartConversation(conversation, NPC, Spawn, "And amongst the Fae. Our Queen Amree welcomes Outsiders, yet her heir Princess Saphronia does not. We are so busy arguing about the Outsiders that this malevolent force is free to walk amongst us, unnoticed but for its ill effects.") +end + +function dlg_97_5(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/exp03_questvo/lady_katri_eloranta/_exp03/exp03_cty_kelethin/tutorials/qst_katri/qst_katri035.mp3", "", "", 188163743, 2258694829, Spawn) + AddConversationOption(conversation, "What sort of rumors?", "dlg_97_6") + StartConversation(conversation, NPC, Spawn, "Our information is very limited, yet... I've heard a few rumors...") +end + +function dlg_97_6(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/exp03_questvo/lady_katri_eloranta/_exp03/exp03_cty_kelethin/tutorials/qst_katri/qst_katri037.mp3", "", "", 2609946533, 3375103241, Spawn) + AddConversationOption(conversation, "No. What's that?", "dlg_97_7") + StartConversation(conversation, NPC, Spawn, "I would not distract you from the Rite of Passage, .. GetName(Spawn) .. . if it were not so important to protect these creatures from the ravages of disease. Have you heard of the Grender?") +end + +function dlg_97_7(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/exp03_questvo/lady_katri_eloranta/_exp03/exp03_cty_kelethin/tutorials/qst_katri/qst_katri038.mp3", "", "", 907147106, 801087342, Spawn) + AddConversationOption(conversation, "Has the Grender's involvement been proven?", "dlg_97_8") + StartConversation(conversation, NPC, Spawn, "The Grender is a twisted creature rumored to be half-man, half-beast. And like a parasite, it sucks the life force out of the world around it and gives nothing back in return.") +end + +function dlg_97_8(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/exp03_questvo/lady_katri_eloranta/_exp03/exp03_cty_kelethin/tutorials/qst_katri/qst_katri039.mp3", "", "", 491933054, 4035179845, Spawn) + AddConversationOption(conversation, "I'll locate the Grender!", "dlg_97_9") + AddConversationOption(conversation, "I must finish some other tasks before I begin this.") + StartConversation(conversation, NPC, Spawn, "No, it is only conjecture. In fact, no one has proven it even exists. But if all be true, our realm would be in considerable danger. One of the Fae Royal Messengers has been trying to locate its lair. Perhaps you can aid him?") +end + +function dlg_97_9(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/exp03_questvo/lady_katri_eloranta/_exp03/exp03_cty_kelethin/tutorials/qst_katri/qst_katri040.mp3", "", "", 1144328884, 1034744188, Spawn) + AddConversationOption(conversation, "Where will I find the Fae Royal Messenger?", "dlg_97_10") + StartConversation(conversation, NPC, Spawn, "Excellent, .. GetName(Spawn) .. . It might just be a rumor, but all rumors have some basis in fact. If nothing else, you may help disprove that the Grender even exists.") +end + +function dlg_97_10(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/exp03_questvo/lady_katri_eloranta/_exp03/exp03_cty_kelethin/tutorials/qst_katri/qst_katri042.mp3", "", "", 1497033190, 2749193313, Spawn) + AddConversationOption(conversation, "I'll let you know what I find out.", "dlg_97_11") + StartConversation(conversation, NPC, Spawn, "Speak with Kalamar Vesinger, our local Grender expert. You'll find him at Joleena's Restaurant in Kelethin. Safe journeys.") +end + diff --git a/server/SpawnScripts/GreaterFaydark/LadyMilikaVikaarinen.lua b/server/SpawnScripts/GreaterFaydark/LadyMilikaVikaarinen.lua new file mode 100644 index 000000000..21b6e776e --- /dev/null +++ b/server/SpawnScripts/GreaterFaydark/LadyMilikaVikaarinen.lua @@ -0,0 +1,78 @@ +--[[ + Script Name : SpawnScripts/GreaterFaydark/LadyMilikaVikaarinen.lua + Script Purpose : Lady Milika Vikaarinen + Script Author : John Adams + Script Date : 2009.03.01 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +function spawn(NPC) + SetPlayerProximityFunction(NPC, 10, "InRange", "LeaveRange") +end + +function respawn(NPC) + spawn(NPC) +end + +function InRange(NPC, Spawn) +end + +function LeaveRange(NPC, Spawn) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_1_1005.mp3", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "I have news of the Grender!", "dlg_6_1") + AddConversationOption(conversation, "Nothing in particular. Just looking around.") + StartConversation(conversation, NPC, Spawn, "Greetings! What brings you into the Fae Royal Hall this day?") + if convo==70 then + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_1_1005.mp3", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Nothing in particular. Just looking around.", "dlg_70_1") + StartConversation(conversation, NPC, Spawn, "Greetings! What brings you into the Fae Royal Hall this day?") + end + +end + +function dlg_6_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Er...I don't think that's the same one.", "dlg_6_2") + StartConversation(conversation, NPC, Spawn, "The mythical beast that supposedly steals a Fae's wings at night?") +end + +function dlg_6_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "The one that's brought disease to Greater Faydark's creatures. Its lair is directly beneath Kelethin!", "dlg_6_3") + StartConversation(conversation, NPC, Spawn, "What Grender is it, then?") +end + +function dlg_6_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "I know where it is. I'll go!", "dlg_6_4") + StartConversation(conversation, NPC, Spawn, "This is terrible news! We must defend Kelethin at all costs!") +end + +function dlg_6_4(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "I will.", "dlg_6_5") + StartConversation(conversation, NPC, Spawn, "You? Hm...I would prefer to send someone with more experience, but perhaps stealth is the wiser course. You know where it is and can hurry there before it escapes. Speak with Queen Amree and ask permission to undertake this task.") +end + +--[[ raw_conversations + PlayFlavor(NPC, "", "Queen Amree is the current ruler of the Fae.", "", 1689589577, 4560189, Spawn) +--]] + diff --git a/server/SpawnScripts/GreaterFaydark/LarkMeadowswoon.lua b/server/SpawnScripts/GreaterFaydark/LarkMeadowswoon.lua new file mode 100644 index 000000000..8088e1a7c --- /dev/null +++ b/server/SpawnScripts/GreaterFaydark/LarkMeadowswoon.lua @@ -0,0 +1,38 @@ +--[[ + Script Name : SpawnScripts/GreaterFaydark/LarkMeadowswoon.lua + Script Purpose : Lark Meadowswoon + Script Author : John Adams + Script Date : 2009.03.01 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +function spawn(NPC) + SetPlayerProximityFunction(NPC, 10, "InRange", "LeaveRange") +end + +function respawn(NPC) + spawn(NPC) +end + +function InRange(NPC, Spawn) +end + +function LeaveRange(NPC, Spawn) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + + choice = math.random(1,3) + + if choice == 1 then + PlayFlavor(NPC, "voiceover/english/exp03_questvo2/lark_meadowswoon/_exp03/exp03_rgn_greater_faydark/fae/flavor_lark_meadowswoon_hail_4110c2bb.mp3", "The Shroombas are majestic, aren't they? They honor us by protecting this grove and the plants that grow here.", "", 1285635873, 695500372, Spawn) + elseif choice == 2 then + PlayFlavor(NPC, "voiceover/english/exp03_questvo2/lark_meadowswoon/_exp03/exp03_rgn_greater_faydark/fae/flavor_lark_meadowswoon_hail_9176e05b.mp3", "The seeds the Shroombas plant and protect are of great value to us!", "", 1853355142, 1854304162, Spawn) + elseif choice == 3 then + PlayFlavor(NPC, "voiceover/english/exp03_questvo2/lark_meadowswoon/_exp03/exp03_rgn_greater_faydark/fae/flavor_lark_meadowswoon_hail_ec97b992.mp3", "It's fascinating to watch the Shroombas work. They help keep our forest green and alive!", "", 2987054098, 2174581919, Spawn) + else + end + +end + diff --git a/server/SpawnScripts/GreaterFaydark/LyytiEloranta.lua b/server/SpawnScripts/GreaterFaydark/LyytiEloranta.lua new file mode 100644 index 000000000..014c46e79 --- /dev/null +++ b/server/SpawnScripts/GreaterFaydark/LyytiEloranta.lua @@ -0,0 +1,128 @@ +--[[ + Script Name : SpawnScripts/GreaterFaydark/LyytiEloranta.lua + Script Purpose : Lyyti Eloranta + Script Author : John Adams + Script Date : 2009.03.01 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +function spawn(NPC) + SetPlayerProximityFunction(NPC, 10, "InRange", "LeaveRange") +end + +function respawn(NPC) + spawn(NPC) +end + +function InRange(NPC, Spawn) +end + +function LeaveRange(NPC, Spawn) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/exp03_questvo/lyyti_eloranta/_exp03/exp03_cty_kelethin/tutorials/qst_lyyti/qst_lyyti001.mp3", "", "", 4088228408, 3514253455, Spawn) + AddConversationOption(conversation, "Lady Katri said that you're the history instructor.", "dlg_39_1") + AddConversationOption(conversation, "Not right now, thanks.") + StartConversation(conversation, NPC, Spawn, "May I help you with something?") + if convo==40 then + PlayFlavor(NPC, "voiceover/english/exp03_questvo/lyyti_eloranta/_exp03/exp03_cty_kelethin/tutorials/qst_lyyti/qst_lyyti001.mp3", "", "", 4088228408, 3514253455, Spawn) + AddConversationOption(conversation, "Lady Katri said that you're the history instructor.", "dlg_40_1") + AddConversationOption(conversation, "Not right now, thanks.") + StartConversation(conversation, NPC, Spawn, "May I help you with something?") + end + + if convo==41 then + PlayFlavor(NPC, "voiceover/english/exp03_questvo/lyyti_eloranta/_exp03/exp03_cty_kelethin/tutorials/qst_lyyti/qst_lyyti001.mp3", "", "", 4088228408, 3514253455, Spawn) + AddConversationOption(conversation, "Not right now, thanks.", "dlg_41_1") + StartConversation(conversation, NPC, Spawn, "May I help you with something?") + end + +end + +function dlg_39_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/exp03_questvo/lyyti_eloranta/_exp03/exp03_cty_kelethin/tutorials/qst_lyyti/qst_lyyti002.mp3", "", "", 2837904161, 4185990953, Spawn) + AddConversationOption(conversation, "Sort of. Did you used to be a history teacher?", "dlg_39_2") + StartConversation(conversation, NPC, Spawn, "Are you wondering why she sent you to learn history from a merchant?") +end + +function dlg_39_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/exp03_questvo/lyyti_eloranta/_exp03/exp03_cty_kelethin/tutorials/qst_lyyti/qst_lyyti003.mp3", "", "", 1895475560, 810904654, Spawn) + AddConversationOption(conversation, "Will these lessons fill in all the gaps?", "dlg_39_3") + StartConversation(conversation, NPC, Spawn, "I love our Fae heritage and when Katri told me she would be the Rite of Passage advisor, I told her I wanted to help. I believe my spirit used to inhabit that of a teacher. Each Fae's spirit holds memories and experiences from the ancestors, but they are often incomplete, leaving gaps in our history that only the community's knowledge can fill.") +end + +function dlg_39_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/exp03_questvo/lyyti_eloranta/_exp03/exp03_cty_kelethin/tutorials/qst_lyyti/qst_lyyti005.mp3", "", "", 3025668755, 1997035225, Spawn) + AddConversationOption(conversation, "What must I do now, then?", "dlg_39_4") + AddConversationOption(conversation, "You want me to jump around?") + StartConversation(conversation, NPC, Spawn, "I'm not going to talk your ears off about history -- yet! Your spirit bud has begun to re-awaken. That's how you know it's time for you to consider the Rite of Passage. To help your spirit along, sometimes it needs to be -- jiggled.") +end + +function dlg_39_4(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/exp03_questvo/lyyti_eloranta/_exp03/exp03_cty_kelethin/tutorials/qst_lyyti/qst_lyyti006.mp3", "", "", 407255999, 3852881, Spawn) + AddConversationOption(conversation, "Will all the old memories come back?") + StartConversation(conversation, NPC, Spawn, "Not really. Have you ever had the feeling that you've been somewhere before, but you honestly don't recall ever being there in your life? That's the re-awakening of your spirit bud. The Rite of Passage completes its re-awakening, revealing some of its experiences and memories to you.") +end + +function dlg_40_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/exp03_questvo/lyyti_eloranta/_exp03/exp03_cty_kelethin/tutorials/qst_lyyti/qst_lyyti002.mp3", "", "", 2837904161, 4185990953, Spawn) + AddConversationOption(conversation, "Sort of. Did you used to be a history teacher?", "dlg_40_2") + StartConversation(conversation, NPC, Spawn, "Are you wondering why she sent you to learn history from a merchant?") +end + +function dlg_40_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/exp03_questvo/lyyti_eloranta/_exp03/exp03_cty_kelethin/tutorials/qst_lyyti/qst_lyyti003.mp3", "", "", 1895475560, 810904654, Spawn) + AddConversationOption(conversation, "Will these lessons fill in all the gaps?", "dlg_40_3") + StartConversation(conversation, NPC, Spawn, "I love our Fae heritage and when Katri told me she would be the Rite of Passage advisor, I told her I wanted to help. I believe my spirit used to inhabit that of a teacher. Each Fae's spirit holds memories and experiences from the ancestors, but they are often incomplete, leaving gaps in our history that only the community's knowledge can fill.") +end + +function dlg_40_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/exp03_questvo/lyyti_eloranta/_exp03/exp03_cty_kelethin/tutorials/qst_lyyti/qst_lyyti005.mp3", "", "", 3025668755, 1997035225, Spawn) + AddConversationOption(conversation, "What must I do now, then?", "dlg_40_4") + AddConversationOption(conversation, "You want me to jump around?") + StartConversation(conversation, NPC, Spawn, "I'm not going to talk your ears off about history -- yet! Your spirit bud has begun to re-awaken. That's how you know it's time for you to consider the Rite of Passage. To help your spirit along, sometimes it needs to be -- jiggled.") +end + +function dlg_40_4(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/exp03_questvo/lyyti_eloranta/_exp03/exp03_cty_kelethin/tutorials/qst_lyyti/qst_lyyti008.mp3", "", "", 226867157, 1271697959, Spawn) + AddConversationOption(conversation, "And then? Where's the history in this lesson?", "dlg_40_5") + StartConversation(conversation, NPC, Spawn, "You will need to visit several areas of Kelethin to help your spirit further its re-awakening. Pay attention to the areas that stir your interest the most, for those are places that held importance to your spirit at some point along the way.") +end + +function dlg_40_5(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/exp03_questvo/lyyti_eloranta/_exp03/exp03_cty_kelethin/tutorials/qst_lyyti/qst_lyyti009.mp3", "", "", 1286146575, 1120239850, Spawn) + AddConversationOption(conversation, "All right.", "dlg_40_6") + StartConversation(conversation, NPC, Spawn, "You will speak to several different folks along the way -- I've written their names down for you in your journal. You should start with Banker Athinae over there. The history is within you. All we can do is help re-awaken it.") +end + diff --git a/server/SpawnScripts/GreaterFaydark/MasterBowyerMossberge.lua b/server/SpawnScripts/GreaterFaydark/MasterBowyerMossberge.lua new file mode 100644 index 000000000..d20507e8b --- /dev/null +++ b/server/SpawnScripts/GreaterFaydark/MasterBowyerMossberge.lua @@ -0,0 +1,113 @@ +--[[ + Script Name : SpawnScripts/GreaterFaydark/MasterBowyerMossberge.lua + Script Purpose : Master Bowyer Mossberge + Script Author : John Adams + Script Date : 2009.03.01 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +function spawn(NPC) + SetPlayerProximityFunction(NPC, 10, "InRange", "LeaveRange") +end + +function respawn(NPC) + spawn(NPC) +end + +function InRange(NPC, Spawn) +end + +function LeaveRange(NPC, Spawn) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "master_bowyer_mossberge/_exp03/exp03_rgn_greater_faydark/master_bowyer_mossberge/master_bowyer_mossberge001.mp3", "", "", 3127429571, 2993577902, Spawn) + AddConversationOption(conversation, "Who are the Faydark's Champions?", "dlg_83_1") + AddConversationOption(conversation, "I'll keep that in mind.") + StartConversation(conversation, NPC, Spawn, "These new carpentry devices are great, but I prefer the old traditional ways of making bows. There is nothing like taking a plain old piece of wood and with your whittling knife, shape and transform it into a bow of beauty and power. The Faydark's Champions understood that quite well.") + if convo==84 then + PlayFlavor(NPC, "master_bowyer_mossberge/_exp03/exp03_rgn_greater_faydark/master_bowyer_mossberge/master_bowyer_mossberge001.mp3", "", "", 3127429571, 2993577902, Spawn) + AddConversationOption(conversation, "Who are the Faydark's Champions?", "dlg_84_1") + AddConversationOption(conversation, "I'll keep that in mind.") + StartConversation(conversation, NPC, Spawn, "These new carpentry devices are great, but I prefer the old traditional ways of making bows. There is nothing like taking a plain old piece of wood and with your whittling knife, shape and transform it into a bow of beauty and power. The Faydark's Champions understood that quite well.") + end + +end + +function dlg_83_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "master_bowyer_mossberge/_exp03/exp03_rgn_greater_faydark/master_bowyer_mossberge/master_bowyer_mossberge002.mp3", "", "", 4179297404, 3815097672, Spawn) + AddConversationOption(conversation, "What happened to them?", "dlg_83_2") + StartConversation(conversation, NPC, Spawn, "The Champions were the ranger guild that once called Kelethin home long ago. They created exceptional weapons such as the Trueshot longbow, and the rare enchanted Rain Caller. Sadly, they are all gone now, casualties of the horrible War of the Fay.") +end + +function dlg_83_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "master_bowyer_mossberge/_exp03/exp03_rgn_greater_faydark/master_bowyer_mossberge/master_bowyer_mossberge003.mp3", "", "", 3846923539, 1035605128, Spawn) + AddConversationOption(conversation, "Did they all die in the siege?", "dlg_83_3") + StartConversation(conversation, NPC, Spawn, "Most of them lost their lives valiantly defending the tree city they loved. While Kelethin was besieged and burning around them they heroically repelled the Teir'dal and orcish invaders to buy time for their loved ones to escape into the forest.") +end + +function dlg_83_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "master_bowyer_mossberge/_exp03/exp03_rgn_greater_faydark/master_bowyer_mossberge/master_bowyer_mossberge004.mp3", "", "", 3957751629, 1890990204, Spawn) + AddConversationOption(conversation, "What was their mission?", "dlg_83_4") + StartConversation(conversation, NPC, Spawn, "All those rangers that stayed to protect Kelethin died to allow others to escape. However, there is a legend that tells of a small group of the Faydark's Champions that were sent on an urgent task as the Teir'dal army began closing around Kelethin to begin their siege. These few did not die but were able to slip by the enemy under the cover of night and proceed with their critical mission.") +end + +function dlg_83_4(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "master_bowyer_mossberge/_exp03/exp03_rgn_greater_faydark/master_bowyer_mossberge/master_bowyer_mossberge005.mp3", "", "", 2721196409, 2451619839, Spawn) + AddConversationOption(conversation, "I understand. Thanks for the story.", "dlg_83_5") + AddConversationOption(conversation, "Hmph... I can handle anything. Goodbye!") + StartConversation(conversation, NPC, Spawn, "That part of the legend will have to wait till you are a little more experienced, I'm afraid. I'd hate to fill your head with exciting tales only to see you run off to relive them and get yourself killed in the process.") +end + +function dlg_84_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "master_bowyer_mossberge/_exp03/exp03_rgn_greater_faydark/master_bowyer_mossberge/master_bowyer_mossberge002.mp3", "", "", 4179297404, 3815097672, Spawn) + AddConversationOption(conversation, "What happened to them?", "dlg_84_2") + StartConversation(conversation, NPC, Spawn, "The Champions were the ranger guild that once called Kelethin home long ago. They created exceptional weapons such as the Trueshot longbow, and the rare enchanted Rain Caller. Sadly, they are all gone now, casualties of the horrible War of the Fay.") +end + +function dlg_84_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "master_bowyer_mossberge/_exp03/exp03_rgn_greater_faydark/master_bowyer_mossberge/master_bowyer_mossberge003.mp3", "", "", 3846923539, 1035605128, Spawn) + AddConversationOption(conversation, "Did they all die in the siege?", "dlg_84_3") + StartConversation(conversation, NPC, Spawn, "Most of them lost their lives valiantly defending the tree city they loved. While Kelethin was besieged and burning around them they heroically repelled the Teir'dal and orcish invaders to buy time for their loved ones to escape into the forest.") +end + +function dlg_84_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "master_bowyer_mossberge/_exp03/exp03_rgn_greater_faydark/master_bowyer_mossberge/master_bowyer_mossberge004.mp3", "", "", 3957751629, 1890990204, Spawn) + AddConversationOption(conversation, "What was their mission?", "dlg_84_4") + StartConversation(conversation, NPC, Spawn, "All those rangers that stayed to protect Kelethin died to allow others to escape. However, there is a legend that tells of a small group of the Faydark's Champions that were sent on an urgent task as the Teir'dal army began closing around Kelethin to begin their siege. These few did not die but were able to slip by the enemy under the cover of night and proceed with their critical mission.") +end + +function dlg_84_4(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "master_bowyer_mossberge/_exp03/exp03_rgn_greater_faydark/master_bowyer_mossberge/master_bowyer_mossberge005.mp3", "", "", 2721196409, 2451619839, Spawn) + AddConversationOption(conversation, "I understand. Thanks for the story.", "dlg_84_5") + AddConversationOption(conversation, "Hmph... I can handle anything. Goodbye!") + StartConversation(conversation, NPC, Spawn, "That part of the legend will have to wait till you are a little more experienced, I'm afraid. I'd hate to fill your head with exciting tales only to see you run off to relive them and get yourself killed in the process.") +end + diff --git a/server/SpawnScripts/GreaterFaydark/MatronoftheNursery.lua b/server/SpawnScripts/GreaterFaydark/MatronoftheNursery.lua new file mode 100644 index 000000000..8cf10a17a --- /dev/null +++ b/server/SpawnScripts/GreaterFaydark/MatronoftheNursery.lua @@ -0,0 +1,346 @@ +--[[ + Script Name : SpawnScripts/GreaterFaydark/MatronoftheNursery.lua + Script Purpose : Matron of the Nursery + Script Author : John Adams + Script Date : 2009.02.05 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +dofile("SpawnScripts/Generic/GenericVoiceOvers.lua") + +local QUEST_1 = 83 + +function spawn(NPC) + SetPlayerProximityFunction(NPC, 15, "inRange", "leaveRange") + ProvidesQuest(NPC, QUEST_1) +end + +function inRange(NPC, Spawn) + if not HasCompletedQuest(Spawn, QUEST_1) and not HasQuest(Spawn, QUEST_1) then + PlayFlavor(NPC, "voiceover/english/exp03_questvo2/matron_of_the_nursery/_exp03/exp03_rgn_greater_faydark/quest/quest_matron_of_the_bloom_nursery_help_66ff3ea.mp3", "Please! We need your help!", "wave", 1753177946, 2265055232, Spawn) + end +end + +function leaveRange(NPC, Spawn) +end + +function hailed(NPC, Spawn) + GenericHail(NPC, Spawn) + + if HasCompletedQuest(Spawn, QUEST_1) then + elseif HasQuest(Spawn, QUEST_1) then + onQuest1(NPC, Spawn) + else + beforeQuest1_1(NPC, Spawn) + end +end + +--[[ Quest 1 ]]-- + +function beforeQuest1_1(NPC, Spawn) + local conversation = CreateConversation() + + FaceTarget(NPC, Spawn) + AddConversationOption(conversation, "Let me help take care of this. Where are the shrumblers?", "beforeQuest1_2") + AddConversationOption(conversation, "What is this place?", "beforeQuest1_3") + AddConversationOption(conversation, "I can't assist right now. I'll return another time.") + StartConversation(conversation, NPC, Spawn, "I am so pleased that you answered my summons. Look at what has become of the Nursery! These shrumblers appeared suddenly, and have been devouring the roots of our precious flowers! The flowers could all wither and perish!") +end + +function beforeQuest1_2(NPC, Spawn) + local conversation = CreateConversation() + + FaceTarget(NPC, Spawn) + AddConversationOption(conversation, "I will see it done", "offerQuest1") + AddConversationOption(conversation, "Perhaps another time. Farewell!") + StartConversation(conversation, NPC, Spawn, "Look around the base of the flowers here in the Nursery. Destroy any of the shrumbler hatchlings you find!") +end + +function beforeQuest1_3(NPC, Spawn) + local conversation = CreateConversation() + + FaceTarget(NPC, Spawn) + AddConversationOption(conversation, "So these are all unborn fae? If the flowers die, what becomes of them?", "beforeQuest1_4") + AddConversationOption(conversation, "I see. Then it is crucial I take care of these shrumblers.", "beforeQuest1_2") + AddConversationOption(conversation, "Maybe another time. Farewell.") + StartConversation(conversation, NPC, Spawn, "These are the budding flowers for newborn fae, and this is the Nursery, in which we tend and care for them. When a fae dies naturally, the come a beautiful delicate flower, housing the spirit of the departed fae.") +end + +function beforeQuest1_4(NPC, Spawn) + local conversation = CreateConversation() + + FaceTarget(NPC, Spawn) + AddConversationOption(conversation, "I will. Where can I find the shrumblers?", "beforeQuest1_2") + AddConversationOption(conversation, "It seems like too big of a job for me. Farewell.") + StartConversation(conversation, NPC, Spawn, "The unborn fae will die, and all of the collective knowledge of their spirit will be lost forever. Please, you must help us prevent the lose of any more fae spirits!") +end + +function offerQuest1(NPC, Spawn) + OfferQuest(NPC, Spawn, QUEST_1) +end + +function onQuest1(NPC, Spawn) + local conversation = CreateConversation() + + FaceTarget(NPC, Spawn) + if (GetQuestStep(Spawn, QUEST_1) == 2) then + else + StartConversation(conversation, NPC, Spawn, "Please hurry with your task.") + end +end + +--[[ + +function spawn(NPC) + SetPlayerProximityFunction(NPC, 20, "inRange", "leaveRange") + ProvidesQuest(NPC, 133) + ProvidesQuest(NPC, 134) + ProvidesQuest(NPC, 135) + ProvidesQuest(NPC, 136) + ProvidesQuest(NPC, 137) +end + +function respawn(NPC) + spawn(NPC) +end + +function InRange(NPC, Spawn) + if HasQuest(Spawn, 133) then + -- she only shouts for help when you have not done her quest line + elseif HasCompletedQuest(Spawn, 133) then + -- she only shouts for help when you have not done her quest line + else + PlayFlavor(NPC, "voiceover/english/exp03_questvo2/matron_of_the_nursery/_exp03/exp03_rgn_greater_faydark/quest/quest_matron_of_the_bloom_nursery_help_66ff3ea.mp3", "Please! We need your help!", "wave", 1753177946, 2265055232, Spawn) + end +end + +function LeaveRange(NPC, Spawn) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + if HasCompletedQuest(Spawn, 133) then + if HasCompletedQuest(Spawn, 134) then + if HasCompletedQuest(Spawn, 135) then + if HasCompletedQuest(Spawn, 136) then + if HasCompletedQuest(Spawn, 137) then + QuestsComplete(NPC, Spawn) + elseif HasQuest(Spawn, 137) then + if GetQuestStep(Spawn, 137) == 1 then + -- quest not complete yet + Say(NPC, "Please finish your task", Spawn) + elseif GetQuestStep == 2 then + -- handing in quest + SetStepComplete(Spawn, 137, 2) + Quest5Done(NPC, Spawn) + end + else + -- does not have quest yet + MessageFromTheMatron(NPC, Spawn) + end + elseif HasQuest(Spawn, 136) then + if GetQuestStep(Spawn, 136) == 1 then + -- quest not complete yet + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "No, I have not gathered them yet.") + StartConversation(conversation, NPC, Spawn, "Welcome back, " .. GetName(Spawn) .. ". Were you able to gather the healing herbs I need?") + elseif GetQuestStep(Spawn, 136) == 2 then + -- handing in quest + SetStepComplete(Spawn, 136, 2) + Quest4Done(NPC, Spawn) + end + else + -- does not have quest yet + HerbsofHealing(NPC, Spawn) + end + elseif HasQuest(Spawn, 135) then + if GetQuestStep(Spawn, 135) == 1 then + -- quest not complete yet + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + PlayFavor(NPC, "voiceover/english/exp03_questvo2/matron_of_the_nursery/_exp03/exp03_rgn_greater_faydark/matron_of_the_nursery/matron_of_the_nursery009.mp3", "", "", 768214181, 1308439553, Spawn) + AddConversationOption(conversation, "No, not yet.") + StartConversation(conversation, NPC, Spawn, "Were you able to find out what the grobins at the pond were up to?") + elseif GetQuestStep(Spawn, 135) == 2 then + -- handing in quest + SetStepComplete(Spawn, 135, 2) + Quest3Done(NPC, Spawn) + end + else + -- does not have quest yet + GrobinTroubleAtThePond(NPC, Spawn) + end + elseif HasQuest(Spawn, 134) then + if GetQuestStep(Spawn, 134) == 1 then + -- quest not yet complete + PlayFlavor(NPC, "voiceover/english/exp03_questvo2/matron_of_the_nursery/_exp03/exp03_rgn_greater_faydark/matron_of_the_nursery/matron_of_the_nursery006.mp3", "", "", 3086001028, 2261685856, Spawn) + AddConversationOption(conversation, "I am not sure yet.") + StartConversation(conversation, NPC, Spawn, "Are the grobin scouts still out there?") + elseif GetQuestStep(Spawn, 134) == 2 then + -- handing in quest + SetStepComplete(Spawn, 134, 2) + Quest2Done(NPC, Spawn) + end + else + -- does not have quest + RunningOffTheGrobinScouts(NPC, Spawn) + end + elseif HasQuest(Spawn, 133) then + if GetQuestStep(Spawn, 133) == 1 then + -- quest not complete yet + Say(NPC, "Please! You must get rid of the shrumblers before they eat the spirit blooms!", Spawn) + elseif GetQuestStep(Spawn, 133) == 2 then + -- handing in the quest + SetStepComplete(Spawn, 133, 2) + Quest1Done(NPC, Spawn) + end + else + -- does not have quest + Infestation(NPC, Spawn) + end +end + +------------------------------------------------------------------------------- +---------- Quest Dialogs ---------- +------------------------------------------------------------------------------- +function Infestation(NPC, Spawn) + PlayFlavor(NPC, "voiceover/english/exp03_questvo2/matron_of_the_nursery/_exp03/exp03_rgn_greater_faydark/matron_of_the_nursery/matron_of_the_nursery001.mp3", "", "", 3995853929, 1976845236, Spawn) + AddConversationOption(conversation, "Yes, I'll get rid of the shrumblers.", "Infestation_dlg2") + AddConversationOption(conversation, "It's not my problem.") + StartConversation(conversation, NPC, Spawn, "Thank Tunare you're here! There's little time to explain. An infestation of shrumblers has appeared in the nursery and they're eating the spirit blooms! Can you help us?") +end + +function Infestation_dlg2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/exp03_questvo2/matron_of_the_bloom_nursery/_exp03/exp03_rgn_greater_faydark/matron_of_the_nursery/matron_of_the_nursery002.mp3", "", "", 1028015490, 2786542994, Spawn) + AddConversationOption(conversation, "I'll be safe.", "OfferQuest1") + StartConversation(conversation, NPC, Spawn, "The spirit blooms grow both to the east and west of here. Please be careful!") +end + +function RunningOffTheGrobinScouts(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + PlayFlavor(NPC, "voiceover/english/exp03_questvo2/matron_of_the_nursery/_exp03/exp03_rgn_greater_faydark/matron_of_the_nursery/matron_of_the_nursery004.mp3", "", "", 849551346, 2426315385, Spawn) + AddConversationOption(conversation, "Sure, I'll check things out.", "OfferQuest2") + AddConversationOption(conversation, "I already helped you once, goodbye.") + StartConversation(conversation, NPC, Spawn, "The shrumblers came from the direction of the pond just to the southwest. Vile grobin scouts were recently seen in that area. I know it is much to ask, but could you check out the area and get rid of any grobin scouts that you find?") +end + +function GrobinTroubleAtThePond(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + PlayFlavor(NPC, "voiceover/english/exp03_questvo2/matron_of_the_nursery/_exp03/exp03_rgn_greater_faydark/matron_of_the_nursery/matron_of_the_nursery007.mp3", "", "", 155606057, 734892147, Spawn) + AddConversationOption(conversation, "I'll stop them.", "OfferQuest3") + AddConversationOption(conversation, "I've helped you enough, goodbye.") + StartConversation(conversation, NPC, Spawn, "You noticed the grobins putting something in the pond's water? This is most troubling. The creatures and plants of this area depend on that enchanted water to grow big and strong! The grobins must be stopped or many things will suffer.") +end + +function HerbsofHealing(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + PlayFlavor(NPC, "voiceover/english/exp03_questvo2/matron_of_the_nursery/_exp03/exp03_rgn_greater_faydark/matron_of_the_nursery/matron_of_the_nursery010.mp3", "", "", 2687383899, 130888406, Spawn) + AddConversationOption(conversation, "What is wrong?", "HerbsofHealing_dlg2") + StartConversation(conversation, NPC, Spawn, "So the grobin were behind the infestation! I knew it! Putting those eggs in the enchanted pond would make the shrumblers grow incredibly quick and strong. Hmm, I wonder where they were getting all those eggs, though. That question will have to wait, however. I've discovered a greater problem.") +end + +function HerbsofHealing_dlg2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + PlayFlavor(NPC, "voiceover/english/exp03_questvo2/matron_of_the_nursery/_exp03/exp03_rgn_greater_faydark/matron_of_the_nursery/matron_of_the_nursery011.mp3", "", "", 1314428688, 3908522277, Spawn) + AddConversationOption(conversation, "I can get what you need.", "HerbsofHealing_dlg3") + AddConversationOption(conversation, "I've done enough to help, goodbye.") + StartConversation(conversation, NPC, Spawn, "It seems the shrumblers did more damage to the spirit blooms than I previously thought. I need to heal the blooms but I don't have the components with me.") +end + +function HerbsofHealing_dlg3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + PlayFlavor(NPC, "voiceover/english/exp03_questvo2/matron_of_the_nursery/_exp03/exp03_rgn_greater_faydark/matron_of_the_nursery/matron_of_the_nursery011.mp3", "", "", 1314428688, 3908522277, Spawn) + AddConversationOption(conversation, "I'll go gather some.", "OfferQuest4") + StartConversation(conversation, NPC, Spawn, "Thank you, " .. GetName(Spawn) .. ". The herbs can be harvested from the faeicia plants not far from here to the west.") +end + +function MessageFromTheMatron(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + PlayFlavor(NPC, "voiceover/english/exp03_questvo2/matron_of_the_nursery/_exp03/exp03_rgn_greater_faydark/matron_of_the_nursery/matron_of_the_nursery014.mp3", "", "", 1963879689, 3046606981, Spawn) + AddConversationOption(conversation, "You are welcome.", "MessageFromTheMatron_dlg_2") + StartConversation(conversation, NPC, Spawn, "Very good. I'll begin the healing of the spirit blooms. Thank you so much for all you've done. I don't know what we would've done if you hadn't awoken when you did.") +end + +function MessageFromTheMatron_dlg_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + PlayFlavor(NPC, "voiceover/english/exp03_questvo2/matron_of_the_nursery/_exp03/exp03_rgn_greater_faydark/matron_of_the_nursery/matron_of_the_nursery015.mp3", "", "", 2641012186, 3622995691, Spawn) + AddConversationOption(conversation, "I can take the message for you.", "MessageFromTheMatron_dlg_3") + AddConversationOption(conversation, "Forget it, I've helped enough.") + StartConversation(conversation, NPC, Spawn, "Before you go, can you do one last thing for me? I fear the grobins will try attacking the spirit blooms again. I need you to deliver a message to Sentry Trillis and warn him about the grobins.") +end + +function MessageFromTheMatron_dlg_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + PlayFlavor(NPC, "voiceover/english/exp03_questvo2/matron_of_the_nursery/_exp03/exp03_rgn_greater_faydark/matron_of_the_nursery/matron_of_the_nursery016.mp3", "", "", 3997346506, 1167918210, Spawn) + AddConversationOption(conversation, "Goodbye, Matron of the Nursery.", "OfferQuest5") + StartConversation(conversation, NPC, Spawn, "Thank you, .. GetName(Spawn) .. . May Tunare bless you for all you have done! Now I have some spirit blooms to heal.") +end +------------------------------------------------------------------------------- +---------- Offer Quests ---------- +------------------------------------------------------------------------------- +function OfferQuest1(NPC, Spawn) + OfferQuest(NPC, Spawn, 133) +end + +function OfferQuest2(NPC, Spawn) + OfferQuest(NPC, Spawn, 134) +end + +function OfferQuest3(NPC, Spawn) + OfferQuest(NPC, Spawn, 135) +end + +function OfferQuest4(NPC, Spawn) + OfferQuest(NPC, Spawn, 136) +end + +function OfferQuest5(NPC, Spawn) + OfferQuest(NPC, Spawn, 137) +end + +------------------------------------------------------------------------------- +---------- Quest is done ---------- +------------------------------------------------------------------------------- +function Quest1Done(NPC, Spawn) + PlayFlavor(NPC, "voiceover/english/exp03_questvo2/matron_of_the_bloom_nursery/_exp03/exp03_rgn_greater_faydark/matron_of_the_nursery/matron_of_the_nursery003.mp3", "", "", 3759250787, 3072440842, Spawn) + AddConversationOption(conversation, "Where did they come from?", "RunningOffTheGrobinScouts") + AddConversationOption(conversation, "Have a good day, goodbye.") + StartConversation(conversation, NPC, Spawn, "Thank you so much! The spirit blooms should be fine now. It was strange... we've never seen shrumblers that large or in such great numbers.") +end + +function Quest2Done(NPC, Spawn) + PlayFlavor(NPC, "voiceover/english/exp03_questvo2/matron_of_the_nursery/_exp03/exp03_rgn_greater_faydark/matron_of_the_nursery/matron_of_the_nursery006.mp3", "", "", 3086001028, 2261685856, Spawn) + AddConversationOption(conversation, "I ran a few of them off.. I also saw some grobins putting something in the water of the pond.", "GrobinTroubleAtThePond") + AddConversationOption(conversation, "I am not sure yet.") + StartConversation(conversation, NPC, Spawn, "Are the grobin scouts still out there?") +end + +function Quest3Done(NPC, Spawn) + PlayFlavor(NPC, "voiceover/english/exp03_questvo2/matron_of_the_nursery/_exp03/exp03_rgn_greater_faydark/matron_of_the_nursery/matron_of_the_nursery009.mp3", "", "", 768214181, 1308439553, Spawn) + AddConversationOption(conversation, "Yes. They had jars of shrumbler eggs that they were pouring into the pond.", "HerbsofHealing") + AddConversationOption(conversation, "No, not yet.") + StartConversation(conversation, NPC, Spawn, "Were you able to find out what the grobins at the pond were up to?") +end + +function Quest4Done(NPC, Spawn) + PlayFlavor(NPC, "voiceover/english/exp03_questvo2/matron_of_the_nursery/_exp03/exp03_rgn_greater_faydark/matron_of_the_nursery/matron_of_the_nursery013.mp3", "", "", 793594959, 1637646288, Spawn) + AddConversationOption(conversation, "Yes, I have them right here.", "MessageFromTheMatron") + AddConversationOption(conversation, "No, I have not gathered them yet.") + StartConversation(conversation, NPC, Spawn, "Welcome back, .. GetName(Spawn) .. . Were you able to gather the healing herbs I need?") +end + +--]] \ No newline at end of file diff --git a/server/SpawnScripts/GreaterFaydark/MatstyrAlesmith.lua b/server/SpawnScripts/GreaterFaydark/MatstyrAlesmith.lua new file mode 100644 index 000000000..266510e62 --- /dev/null +++ b/server/SpawnScripts/GreaterFaydark/MatstyrAlesmith.lua @@ -0,0 +1,52 @@ +--[[ + Script Name : SpawnScripts/GreaterFaydark/MatstyrAlesmith.lua + Script Purpose : Matstyr Alesmith + Script Author : John Adams + Script Date : 2009.03.01 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +function spawn(NPC) + SetPlayerProximityFunction(NPC, 10, "InRange", "LeaveRange") +end + +function respawn(NPC) + spawn(NPC) +end + +function InRange(NPC, Spawn) +end + +function LeaveRange(NPC, Spawn) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "matstyr_alesmith/_exp03/exp03_rgn_greater_faydark/matstyr_alesmith/matstyr_001.mp3", "", "", 1937953293, 2767488861, Spawn) + AddConversationOption(conversation, "I was wondering if I could do anything for you.", "dlg_23_1") + AddConversationOption(conversation, "Not right now.") + StartConversation(conversation, NPC, Spawn, "Hail and good to meet ya. I am Matstyr, Your traveling Smith and all around do anything you need Dwarf. Is there anything I can do for you?") +end + +function dlg_23_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "matstyr_alesmith/_exp03/exp03_rgn_greater_faydark/matstyr_alesmith/matstyr_002.mp3", "", "", 2958360418, 2661137078, Spawn) + AddConversationOption(conversation, "Sounds good, where can I start.", "dlg_23_2") + AddConversationOption(conversation, "I change my mind, I don’t have time.") + StartConversation(conversation, NPC, Spawn, "Well I am a bit back logged on my list of things to help people with. I guess I could hire you to help me out for a bit. No long term contract mind you. ") +end + +function dlg_23_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "matstyr_alesmith/_exp03/exp03_rgn_greater_faydark/matstyr_alesmith/matstyr_003.mp3", "", "", 1881646035, 610210479, Spawn) + AddConversationOption(conversation, "I will return with the pelts.", "dlg_23_3") + AddConversationOption(conversation, "I don’t want to kill any wolves.") + StartConversation(conversation, NPC, Spawn, "Well I have an order to fill from one of those tree hugging elves. They need some wolf pelts to make leather armor for their young warriors. I told them it would be no problem, but it seems I underestimated how much they would need. If you could bring me a bundle of pelts it would help quite a bit.") +end + diff --git a/server/SpawnScripts/GreaterFaydark/MeehaPekko-Maarit.lua b/server/SpawnScripts/GreaterFaydark/MeehaPekko-Maarit.lua new file mode 100644 index 000000000..82e2202d9 --- /dev/null +++ b/server/SpawnScripts/GreaterFaydark/MeehaPekko-Maarit.lua @@ -0,0 +1,28 @@ +--[[ + Script Name : SpawnScripts/GreaterFaydark/MeehaPekko-Maarit.lua + Script Purpose : Meeha Pekko-Maarit + Script Author : John Adams + Script Date : 2009.03.01 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +function spawn(NPC) + SetPlayerProximityFunction(NPC, 10, "InRange", "LeaveRange") +end + +function respawn(NPC) + spawn(NPC) +end + +function InRange(NPC, Spawn) +end + +function LeaveRange(NPC, Spawn) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + + PlayFlavor(NPC, "", "Greetings!", "", 1689589577, 4560189, Spawn) +end + diff --git a/server/SpawnScripts/GreaterFaydark/MeliinaCopperleaf.lua b/server/SpawnScripts/GreaterFaydark/MeliinaCopperleaf.lua new file mode 100644 index 000000000..0e60b1699 --- /dev/null +++ b/server/SpawnScripts/GreaterFaydark/MeliinaCopperleaf.lua @@ -0,0 +1,40 @@ +--[[ + Script Name : SpawnScripts/GreaterFaydark/MeliinaCopperleaf.lua + Script Purpose : Meliina Copperleaf + Script Author : John Adams + Script Date : 2009.03.01 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +function spawn(NPC) + SetPlayerProximityFunction(NPC, 10, "InRange", "LeaveRange") +end + +function respawn(NPC) + spawn(NPC) +end + +function InRange(NPC, Spawn) +end + +function LeaveRange(NPC, Spawn) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + + choice = math.random(1,4) + + if choice == 1 then + PlayFlavor(NPC, "", "I'd be careful in your home...if you get back to it. I overheard someone talking about the little prank they're playing on you.", "nod", 1689589577, 4560189, Spawn) + elseif choice == 2 then + PlayFlavor(NPC, "", "I don't know what's going on, friend...but you're being followed!", "peer", 1689589577, 4560189, Spawn) + elseif choice == 3 then + PlayFlavor(NPC, "", "You're excused!", "stinky", 1689589577, 4560189, Spawn) + elseif choice == 4 then + PlayFlavor(NPC, "", "I'll bet HE'LL never eat triggerfish pie again!", "chuckle", 1689589577, 4560189, Spawn) + else + end + +end + diff --git a/server/SpawnScripts/GreaterFaydark/MenthaHaora.lua b/server/SpawnScripts/GreaterFaydark/MenthaHaora.lua new file mode 100644 index 000000000..8fd64ab87 --- /dev/null +++ b/server/SpawnScripts/GreaterFaydark/MenthaHaora.lua @@ -0,0 +1,67 @@ +--[[ + Script Name : SpawnScripts/GreaterFaydark/MenthaHaora.lua + Script Purpose : Mentha Haora + Script Author : John Adams + Script Date : 2009.03.01 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +function spawn(NPC) + SetPlayerProximityFunction(NPC, 10, "InRange", "LeaveRange") +end + +function respawn(NPC) + spawn(NPC) +end + +function InRange(NPC, Spawn) +end + +function LeaveRange(NPC, Spawn) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/exp03_questvo2/mentha_haora/_exp03/exp03_rgn_greater_faydark/scp/part_two/mentha/mentha000.mp3", "", "", 2060469955, 1753572931, Spawn) + AddConversationOption(conversation, "I am XXXXXXXX. What do you mean formerly?", "dlg_22_1") + StartConversation(conversation, NPC, Spawn, "I am Mentha Haora. Formerly in charge of the counter Crushbone offensive in the area surrounding the Combine Spires.") +end + +function dlg_22_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/exp03_questvo2/mentha_haora/_exp03/exp03_rgn_greater_faydark/scp/part_two/mentha/mentha001.mp3", "", "", 926564266, 1509556740, Spawn) + AddConversationOption(conversation, "Well if the orcs are taken care of is there anything else I can help with?", "dlg_22_2") + StartConversation(conversation, NPC, Spawn, "There had been a much stronger orc presence here only a short while ago. I broke their camp and scattered their numbers. Unfortunately, when I asked for follow up orders, I was told to remain at Spireshadow Post. They had put someone else closer to the Crushbone threat, and they would be handling it from now on. When I asked who, they told me I didn't need to know! After all I'd done for them...") +end + +function dlg_22_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/exp03_questvo2/mentha_haora/_exp03/exp03_rgn_greater_faydark/scp/part_two/mentha/mentha002.mp3", "", "", 160244099, 3171785528, Spawn) + AddConversationOption(conversation, "What do you have that I can do?", "dlg_22_3") + StartConversation(conversation, NPC, Spawn, "I suppose. They've given me duties... just not exciting ones. Er, I mean they've given me a lot of exciting things to do, and I would love if you helped me finish them up!") +end + +function dlg_22_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/exp03_questvo2/mentha_haora/_exp03/exp03_rgn_greater_faydark/scp/part_two/mentha/mentha003.mp3", "", "", 1953644767, 2401370761, Spawn) + AddConversationOption(conversation, "Sure, I can get the samples.", "dlg_22_4") + StartConversation(conversation, NPC, Spawn, "Well, part of the duties of an officer at this post involves the study of the Combine Spires. Specifically, they wanted me to study the scorched skeletons that congregate around the Spires. Hardly boring work for one who has fought the Crushbone! Anyway, if you could gather some samples of scorched skeleton bones, it would help with a test I have to run.") +end + +function dlg_22_4(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/exp03_questvo2/mentha_haora/_exp03/exp03_rgn_greater_faydark/scp/part_two/mentha/mentha004.mp3", "", "", 558577322, 2672691340, Spawn) + AddConversationOption(conversation, "All right.", "dlg_22_5") + StartConversation(conversation, NPC, Spawn, "Great! The spires are just north of us, I'm sure there will be no shortage of skeletons.") +end + diff --git a/server/SpawnScripts/GreaterFaydark/MerchantFallulah.lua b/server/SpawnScripts/GreaterFaydark/MerchantFallulah.lua new file mode 100644 index 000000000..38f4bf146 --- /dev/null +++ b/server/SpawnScripts/GreaterFaydark/MerchantFallulah.lua @@ -0,0 +1,100 @@ +--[[ + Script Name : SpawnScripts/GreaterFaydark/MerchantFallulah.lua + Script Purpose : Merchant Fallulah + Script Author : John Adams + Script Date : 2009.03.01 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +function spawn(NPC) + SetPlayerProximityFunction(NPC, 10, "InRange", "LeaveRange") +end + +function respawn(NPC) + spawn(NPC) +end + +function InRange(NPC, Spawn) +end + +function LeaveRange(NPC, Spawn) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_2_1005.mp3", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Your sister Melilah asked me...", "dlg_43_1") + AddConversationOption(conversation, "Have a nice day!") + StartConversation(conversation, NPC, Spawn, "Hello.") + if convo==51 then + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_2_1005.mp3", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Do you want to talk about it?", "dlg_51_1") + AddConversationOption(conversation, "No problem.") + StartConversation(conversation, NPC, Spawn, "Oh. It's you again. Listen, sorry about my outburst earlier.") + end + + if convo==52 then + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_1_1005.mp3", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Do you want to talk about it?", "dlg_52_1") + AddConversationOption(conversation, "No problem.") + StartConversation(conversation, NPC, Spawn, "Oh. It's you again. Listen, sorry about my outburst earlier.") + end + +end + +function dlg_43_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "She just wanted me to...", "dlg_43_2") + StartConversation(conversation, NPC, Spawn, "Oh, she did, did she? Well, if she wants to talk to me, she can jolly well come down here off her high...platform...and do so herself!") +end + +function dlg_43_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Do you want to see it?", "dlg_43_3") + StartConversation(conversation, NPC, Spawn, "Oh, I'm not angry with you! I'm angry with HER! Seasons go by without so much as a 'how're you doing' and then she sends a complete STRANGER to me with a note. A NOTE!") +end + +function dlg_43_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "I'll let her know.", "dlg_43_4") + StartConversation(conversation, NPC, Spawn, "No. Take it away. You can tell her no matter what excuses she makes, I want the clock. Got it?") +end + +function dlg_52_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "That's what I thought. Melilah wants to start over with you.", "dlg_52_2") + StartConversation(conversation, NPC, Spawn, "It's just...our father died and he was the last family Melilah and I had in Kelethin, except for each other. I've never had to run the shop before and it's been really frustrating to me.") +end + +function dlg_52_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "I think you two are overdue for a long, sisterly talk.", "dlg_52_3") + StartConversation(conversation, NPC, Spawn, "She does? I could really use the help! I mean...I miss her. And yes, I could use the help. She's always had a head for business. And I don't want the clock, I just want to be friends with her again.") +end + +function dlg_52_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Good luck with your business...and your sister!", "dlg_52_4") + StartConversation(conversation, NPC, Spawn, "Poor Melilah...all this time, I misjudged her. Thank you so much for getting us to see things straight. May Tunare's blessings be upon you!") +end + diff --git a/server/SpawnScripts/GreaterFaydark/MerchantMelilah.lua b/server/SpawnScripts/GreaterFaydark/MerchantMelilah.lua new file mode 100644 index 000000000..d3e114a26 --- /dev/null +++ b/server/SpawnScripts/GreaterFaydark/MerchantMelilah.lua @@ -0,0 +1,170 @@ +--[[ + Script Name : SpawnScripts/GreaterFaydark/MerchantMelilah.lua + Script Purpose : Merchant Melilah + Script Author : John Adams + Script Date : 2009.03.01 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +function spawn(NPC) + SetPlayerProximityFunction(NPC, 10, "InRange", "LeaveRange") +end + +function respawn(NPC) + spawn(NPC) +end + +function InRange(NPC, Spawn) +end + +function LeaveRange(NPC, Spawn) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "That depends.", "dlg_17_1") + AddConversationOption(conversation, "No, thanks.") + StartConversation(conversation, NPC, Spawn, "Did you want to earn a little commission on a job for me?") + if convo==45 then + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Yes. She asked me to tell you...", "dlg_45_1") + AddConversationOption(conversation, "Um...I think I've lost the note you gave me earlier.") + AddConversationOption(conversation, "Not yet.") + StartConversation(conversation, NPC, Spawn, "Have you spoken with HER yet?") + end + + if convo==46 then + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_3_1005.mp3", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Yes. She asked me to tell you...", "dlg_46_1") + AddConversationOption(conversation, "Um...I think I've lost the note you gave me earlier.") + AddConversationOption(conversation, "Not yet.") + StartConversation(conversation, NPC, Spawn, "Have you spoken with HER yet?") + end + + if convo==48 then + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_2_1005.mp3", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "You two are fighting over your father's estate?", "dlg_48_1") + AddConversationOption(conversation, "Relax! I just said 'hello' to you.") + StartConversation(conversation, NPC, Spawn, "Well?") + end + + if convo==49 then + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_1_1005.mp3", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "You two are fighting over your father's estate?", "dlg_49_1") + AddConversationOption(conversation, "Relax! I just said 'hello' to you.") + StartConversation(conversation, NPC, Spawn, "Well?") + end + +end + +function dlg_17_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Then why don't you go yourself?", "dlg_17_2") + StartConversation(conversation, NPC, Spawn, "I need to send a note to my sister Fallulah. She's just over there near the bank.") +end + +function dlg_17_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "You want me to take a note to her so you don't have to speak to her yourself?", "dlg_17_3") + StartConversation(conversation, NPC, Spawn, "Because we're not SPEAKING with each other! Ooooh....she makes me SO angry! Just thinking about what she said...but...okay...I'm calmer now. Anyway, if I didn't need to contact her, I wouldn't, but it can't be avoided.") +end + +function dlg_17_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Well. Okay.", "dlg_17_4") + StartConversation(conversation, NPC, Spawn, "Exactly. Like I said, a little commission for an easy job. I'd really appreciate it.") +end + +function dlg_45_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "I won't.") + StartConversation(conversation, NPC, Spawn, "It figures. The one time...just a moment...let me write...out...another...note. Don't lose this one.") +end + +function dlg_46_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "She said to tell you that she 'wants the clock' and that you'll know what that means.", "dlg_46_2") + StartConversation(conversation, NPC, Spawn, "How DARE she presume to talk to me! Even if it's only through you! I have a good mind to...calm...deep breaths...What did she have to say?") +end + +function dlg_46_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Er, can I ask you what's going on between the two of you?", "dlg_46_3") + StartConversation(conversation, NPC, Spawn, "She can't HAVE the clock. It's MINE! I can't BELIEVE how grasping and conniving...") +end + +function dlg_46_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Um, okay.", "dlg_46_4") + StartConversation(conversation, NPC, Spawn, "You still have the note? Go ahead and read it. It explains everything.") +end + +function dlg_49_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Did you tell her how you felt?", "dlg_49_2") + StartConversation(conversation, NPC, Spawn, "I'm not fighting, SHE'S fighting. All I ever hear from her is, 'I want this,' or 'I want that.' She's never ONCE asked me how I was feeling, or said anything about how much work it's been for me to handle things.") +end + +function dlg_49_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Maybe. But folks show sadness in different ways. Maybe her way is different than yours.", "dlg_49_3") + StartConversation(conversation, NPC, Spawn, "It's obvious, isn't it?") +end + +function dlg_49_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "She needs you.", "dlg_49_4") + StartConversation(conversation, NPC, Spawn, "Hrmph. Maybe. She always did have it easier than me. Fallulah was daddy's favorite. She didn't have to set up shop until he passed away, and then she was always pestering me about how to do this and how to do that.") +end + +function dlg_49_4(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Sure.", "dlg_49_5") + StartConversation(conversation, NPC, Spawn, "I hadn't really thought of it that way. Maybe I have misjudged her. I tell you what. Let me take back that note and write a different one. Would you take this one to her instead?") +end + +function dlg_49_5(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "merchant_melilah/_exp03/exp03_cty_kelethin/quest/qst_sisters/qst_melilah014.mp3", "", "", 3364592352, 3085055338, Spawn) + AddConversationOption(conversation, "Glad I could help.", "dlg_49_6") + StartConversation(conversation, NPC, Spawn, "And...thank you. You helped me look at things a different way.") +end + diff --git a/server/SpawnScripts/GreaterFaydark/MiahTanglebranch.lua b/server/SpawnScripts/GreaterFaydark/MiahTanglebranch.lua new file mode 100644 index 000000000..f6052f3a7 --- /dev/null +++ b/server/SpawnScripts/GreaterFaydark/MiahTanglebranch.lua @@ -0,0 +1,28 @@ +--[[ + Script Name : SpawnScripts/GreaterFaydark/MiahTanglebranch.lua + Script Purpose : Miah Tanglebranch + Script Author : John Adams + Script Date : 2009.03.01 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +function spawn(NPC) + SetPlayerProximityFunction(NPC, 10, "InRange", "LeaveRange") +end + +function respawn(NPC) + spawn(NPC) +end + +function InRange(NPC, Spawn) +end + +function LeaveRange(NPC, Spawn) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + + PlayFlavor(NPC, "", "The blessings of Tunare can be felt all around us!", "", 1689589577, 4560189, Spawn) +end + diff --git a/server/SpawnScripts/GreaterFaydark/MiellaMaarsitotts.lua b/server/SpawnScripts/GreaterFaydark/MiellaMaarsitotts.lua new file mode 100644 index 000000000..b02b579e7 --- /dev/null +++ b/server/SpawnScripts/GreaterFaydark/MiellaMaarsitotts.lua @@ -0,0 +1,36 @@ +--[[ + Script Name : SpawnScripts/GreaterFaydark/MiellaMaarsitotts.lua + Script Purpose : Miella Maarsitotts + Script Author : John Adams + Script Date : 2009.03.01 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +function spawn(NPC) + SetPlayerProximityFunction(NPC, 10, "InRange", "LeaveRange") +end + +function respawn(NPC) + spawn(NPC) +end + +function InRange(NPC, Spawn) +end + +function LeaveRange(NPC, Spawn) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + + choice = math.random(1,2) + + if choice == 1 then + PlayFlavor(NPC, "", "I love paying my respects at Tunare's Sapling. It's a lovely reminder of where we are!", "", 1689589577, 4560189, Spawn) + elseif choice == 2 then + PlayFlavor(NPC, "", "This is a beautiful place to live!", "", 1689589577, 4560189, Spawn) + else + end + +end + diff --git a/server/SpawnScripts/GreaterFaydark/MissantratheStylist.lua b/server/SpawnScripts/GreaterFaydark/MissantratheStylist.lua new file mode 100644 index 000000000..07d82bc07 --- /dev/null +++ b/server/SpawnScripts/GreaterFaydark/MissantratheStylist.lua @@ -0,0 +1,38 @@ +--[[ + Script Name : SpawnScripts/GreaterFaydark/MissantratheStylist.lua + Script Purpose : Missantra the Stylist + Script Author : John Adams + Script Date : 2009.03.01 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +function spawn(NPC) + SetPlayerProximityFunction(NPC, 10, "InRange", "LeaveRange") +end + +function respawn(NPC) + spawn(NPC) +end + +function InRange(NPC, Spawn) +end + +function LeaveRange(NPC, Spawn) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + + choice = math.random(1,3) + + if choice == 1 then + PlayFlavor(NPC, "", "Change is good! You should get one!", "beckon", 1689589577, 4560189, Spawn) + elseif choice == 2 then + PlayFlavor(NPC, "", "A new look for a new town, that's what I always say!", "smile", 1689589577, 4560189, Spawn) + elseif choice == 3 then + PlayFlavor(NPC, "", "I can help! Come closer for a consultation!", "converse_female01", 1689589577, 4560189, Spawn) + else + end + +end + diff --git a/server/SpawnScripts/GreaterFaydark/Morganellus.lua b/server/SpawnScripts/GreaterFaydark/Morganellus.lua new file mode 100644 index 000000000..60e233b79 --- /dev/null +++ b/server/SpawnScripts/GreaterFaydark/Morganellus.lua @@ -0,0 +1,62 @@ +--[[ + Script Name : SpawnScripts/GreaterFaydark/Morganellus.lua + Script Purpose : Morganellus + Script Author : John Adams + Script Date : 2009.02.05 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +function spawn(NPC) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/exp03_questvo2/morganellus/_exp03/exp03_rgn_greater_faydark/shroomba/morganellus/morganellus000.mp3", "", "", 1586930709, 170726345, Spawn) + AddConversationOption(conversation, "Hello, Morganellus. I am " .. GetName(Spawn) .. ".", "dlg_10_1") + AddConversationOption(conversation, "Child of the heavens?") + StartConversation(conversation, NPC, Spawn, "Hello, child of the heavens. I am Morganellus.") + +end + +function dlg_10_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/exp03_questvo2/morganellus/_exp03/exp03_rgn_greater_faydark/shroomba/morganellus/morganellus001.mp3", "", "", 3125158687, 308390783, Spawn) + AddConversationOption(conversation, "Your friend?", "dlg_10_2") + StartConversation(conversation, NPC, Spawn, "It is pleasing to know you. This is a land we share, it would be well that we get along. Of this I find you will agree. In Dyer Mycoria we are taught to respect the children of the heavens, that is you. You should find yourself there sometime, it is pleasant to the senses when you are there. You should visit my friend.") +end + +function dlg_10_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/exp03_questvo2/morganellus/_exp03/exp03_rgn_greater_faydark/shroomba/morganellus/morganellus002.mp3", "", "", 3545587475, 669880313, Spawn) + AddConversationOption(conversation, "I will visit Agarighus.", "dlg_10_3") + StartConversation(conversation, NPC, Spawn, "Agarighus. He tends to our groves in Dyer Mycoria, others--those others you see here--tend to groves outside Dyer Mycoria. This is a nice arrangement, I think.") +end + +function dlg_10_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/exp03_questvo2/morganellus/_exp03/exp03_rgn_greater_faydark/shroomba/morganellus/morganellus003.mp3", "", "", 2602618474, 1319117149, Spawn) + AddConversationOption(conversation, "Do you want me to tell Agarighus that you say hello?", "dlg_10_4") + StartConversation(conversation, NPC, Spawn, "That is pleasing to know. To the east and to the south--both at the same time--you will come to a path that leads away from here, you children call it Echo Echo Canyon. In the canyon are two caves, take the second, and go south once within them, that way is quicker.") +end + +function dlg_10_4(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/exp03_questvo2/morganellus/_exp03/exp03_rgn_greater_faydark/shroomba/morganellus/morganellus004.mp3", "", "", 2956711105, 2602303407, Spawn) + AddConversationOption(conversation, "All right, I'll just find him.") + StartConversation(conversation, NPC, Spawn, "Why would I want that? You are going to Dyer Mycoria, not me.") +end + diff --git a/server/SpawnScripts/GreaterFaydark/MulusViinikka.lua b/server/SpawnScripts/GreaterFaydark/MulusViinikka.lua new file mode 100644 index 000000000..936796702 --- /dev/null +++ b/server/SpawnScripts/GreaterFaydark/MulusViinikka.lua @@ -0,0 +1,28 @@ +--[[ + Script Name : SpawnScripts/GreaterFaydark/MulusViinikka.lua + Script Purpose : Mulus Viinikka + Script Author : John Adams + Script Date : 2009.03.01 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +function spawn(NPC) + SetPlayerProximityFunction(NPC, 10, "InRange", "LeaveRange") +end + +function respawn(NPC) + spawn(NPC) +end + +function InRange(NPC, Spawn) +end + +function LeaveRange(NPC, Spawn) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + + PlayFlavor(NPC, "", "Well, well, what have we here?", "", 1689589577, 4560189, Spawn) +end + diff --git a/server/SpawnScripts/GreaterFaydark/NimessSessi.lua b/server/SpawnScripts/GreaterFaydark/NimessSessi.lua new file mode 100644 index 000000000..5c6158a6a --- /dev/null +++ b/server/SpawnScripts/GreaterFaydark/NimessSessi.lua @@ -0,0 +1,186 @@ +--[[ + Script Name : SpawnScripts/GreaterFaydark/NimessSessi.lua + Script Purpose : Nimess Sessi + Script Author : John Adams + Script Date : 2009.03.01 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +function spawn(NPC) + SetPlayerProximityFunction(NPC, 10, "InRange", "LeaveRange") +end + +function respawn(NPC) + spawn(NPC) +end + +function InRange(NPC, Spawn) +end + +function LeaveRange(NPC, Spawn) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_3_1006.mp3", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Nothing, thanks.", "dlg_3_1") + StartConversation(conversation, NPC, Spawn, "Greetings! Is there something I can do for you?") + if convo==67 then + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_2_1006.mp3", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "I was told to speak with you about becoming a citizen of Kelethin.", "dlg_67_1") + AddConversationOption(conversation, "Nothing, thanks.") + StartConversation(conversation, NPC, Spawn, "Greetings! Is there something I can do for you?") + end + + if convo==68 then + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_3_1006.mp3", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "I want to know more about becoming a citizen of Kelethin.", "dlg_68_1") + AddConversationOption(conversation, "Nothing, thanks.") + StartConversation(conversation, NPC, Spawn, "Greetings! Is there something I can do for you?") + end + + if convo==69 then + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_2_1006.mp3", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "I want to know more about becoming a citizen of Kelethin.", "dlg_69_1") + AddConversationOption(conversation, "Nothing, thanks.") + StartConversation(conversation, NPC, Spawn, "Greetings! Is there something I can do for you?") + end + +end + +function dlg_67_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "But I'm Fae! Why must I go through this process, too?", "dlg_67_2") + AddConversationOption(conversation, "What do I need to learn?") + StartConversation(conversation, NPC, Spawn, "You've come to the right place! It's my joyous duty to explain a little bit about Kelethin to those who seek permanent citizenship status.") +end + +function dlg_67_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Not me!") + AddConversationOption(conversation, "Maybe a little.", "dlg_67_3") + AddConversationOption(conversation, "Of course not!") + AddConversationOption(conversation, "Yes.") + StartConversation(conversation, NPC, Spawn, "Becoming a citizen is simple, but living in Kelethin may be different than it is anywhere else. For one thing, our beautiful city is set in the trees, from which it is possible to fall off. Are you afraid of heights?") +end + +function dlg_68_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "But I'm Fae! Why must I go through this process, too?", "dlg_68_2") + AddConversationOption(conversation, "What do I need to learn?") + StartConversation(conversation, NPC, Spawn, "You've come to the right place! It's my joyous duty to explain a little bit about Kelethin to those who seek permanent citizenship status.") +end + +function dlg_68_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "I'm definitely staying!", "dlg_68_3") + AddConversationOption(conversation, "I need to think about this.") + StartConversation(conversation, NPC, Spawn, "Queen Amree specifically requested that ALL who want to become citizens go through this step, including Fae. You can, of course, choose to seek citizenship in Qeynos instead. Even if your spirit bud has lived here for generations, it is up to you to decide whether you'll stay.") +end + +function dlg_68_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Not me!", "dlg_68_4") + AddConversationOption(conversation, "Maybe a little.") + AddConversationOption(conversation, "Of course not!") + AddConversationOption(conversation, "Yes.") + StartConversation(conversation, NPC, Spawn, "Becoming a citizen is simple, but living in Kelethin may be different than it is anywhere else. For one thing, our beautiful city is set in the trees, from which it is possible to fall off. Are you afraid of heights?") +end + +function dlg_68_4(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Oh, all right. No, I'm not afraid of heights.") + StartConversation(conversation, NPC, Spawn, "Remember, the Queen herself asked that I go through this with all who wish to become citizens. I'm not pranking you, honest!") +end + +function dlg_69_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "But I'm Fae! Why must I go through this process, too?", "dlg_69_2") + AddConversationOption(conversation, "What do I need to learn?") + StartConversation(conversation, NPC, Spawn, "You've come to the right place! It's my joyous duty to explain a little bit about Kelethin to those who seek permanent citizenship status.") +end + +function dlg_69_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "I'm definitely staying!", "dlg_69_3") + AddConversationOption(conversation, "I need to think about this.") + StartConversation(conversation, NPC, Spawn, "Queen Amree specifically requested that ALL who want to become citizens go through this step, including Fae. You can, of course, choose to seek citizenship in Qeynos instead. Even if your spirit bud has lived here for generations, it is up to you to decide whether you'll stay.") +end + +function dlg_69_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Not me!", "dlg_69_4") + AddConversationOption(conversation, "Maybe a little.") + AddConversationOption(conversation, "Of course not!") + AddConversationOption(conversation, "Yes.") + StartConversation(conversation, NPC, Spawn, "Becoming a citizen is simple, but living in Kelethin may be different than it is anywhere else. For one thing, our beautiful city is set in the trees, from which it is possible to fall off. Are you afraid of heights?") +end + +function dlg_69_4(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "That's a little comforting.") + StartConversation(conversation, NPC, Spawn, "When the Fae rebuilt Kelethin with the Feir'Dal, we added some berms to each platform. They won't keep you from walking off if you aren't paying attention, but if you watch your step, you will see them and know where the edges are located.") +end + +function dlg_69_5(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "That's very comforting.", "dlg_69_6") + StartConversation(conversation, NPC, Spawn, "Additionally, each ramp has a little curved railing where it attaches to the next platform. This is another visual cue that will guide you toward the proper path. The ramps are very sturdy and do not sway, no matter how many people are actually on them.") +end + +function dlg_69_6(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Oh, come on! Now you ARE pulling my wings!", "dlg_69_7") + AddConversationOption(conversation, "That's good.") + AddConversationOption(conversation, "I see.") + AddConversationOption(conversation, "I need to finish this later.") + StartConversation(conversation, NPC, Spawn, "Good! Kelethin is not as large of a city as Qeynos, which helps us keep things very simple. We do have several amenities that are similar. We have a bank, lovely houses and several areas in which crafters can practice their trades.") +end + +function dlg_69_7(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Thanks!", "dlg_69_8") + StartConversation(conversation, NPC, Spawn, "Heh! I wondered how long you'd put up with this! The Queen does want all Fae to go through the same process, but you're right, she said that we don't need all this stuff. Head back down to talk with Gibrien and you may begin to do your community service immediately. Good luck!") +end + diff --git a/server/SpawnScripts/GreaterFaydark/NixiaCogsworth.lua b/server/SpawnScripts/GreaterFaydark/NixiaCogsworth.lua new file mode 100644 index 000000000..80b0c63e1 --- /dev/null +++ b/server/SpawnScripts/GreaterFaydark/NixiaCogsworth.lua @@ -0,0 +1,28 @@ +--[[ + Script Name : SpawnScripts/GreaterFaydark/NixiaCogsworth.lua + Script Purpose : Nixia Cogsworth + Script Author : John Adams + Script Date : 2009.03.01 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +function spawn(NPC) + SetPlayerProximityFunction(NPC, 10, "InRange", "LeaveRange") +end + +function respawn(NPC) + spawn(NPC) +end + +function InRange(NPC, Spawn) +end + +function LeaveRange(NPC, Spawn) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + + PlayFlavor(NPC, "", "We've all the basic supplies that you'll ever need. Are you looking for anything specific?", "", 1689589577, 4560189, Spawn) +end + diff --git a/server/SpawnScripts/GreaterFaydark/NooraMaki.lua b/server/SpawnScripts/GreaterFaydark/NooraMaki.lua new file mode 100644 index 000000000..0886ff497 --- /dev/null +++ b/server/SpawnScripts/GreaterFaydark/NooraMaki.lua @@ -0,0 +1,31 @@ +--[[ + Script Name : SpawnScripts/GreaterFaydark/NooraMaki.lua + Script Purpose : Noora Maki + Script Author : John Adams + Script Date : 2009.03.01 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +function spawn(NPC) + SetPlayerProximityFunction(NPC, 10, "InRange", "LeaveRange") +end + +function respawn(NPC) + spawn(NPC) +end + +function InRange(NPC, Spawn) +end + +function LeaveRange(NPC, Spawn) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_3_1005.mp3", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "I understand.", "dlg_66_1") + StartConversation(conversation, NPC, Spawn, "You've yet to become a crafter. Please return once you've learned some crafting and I'll teach you more.") +end + diff --git a/server/SpawnScripts/GreaterFaydark/PaanalaFlutterleaf.lua b/server/SpawnScripts/GreaterFaydark/PaanalaFlutterleaf.lua new file mode 100644 index 000000000..eb7637628 --- /dev/null +++ b/server/SpawnScripts/GreaterFaydark/PaanalaFlutterleaf.lua @@ -0,0 +1,36 @@ +--[[ + Script Name : SpawnScripts/GreaterFaydark/PaanalaFlutterleaf.lua + Script Purpose : Paanala Flutterleaf + Script Author : John Adams + Script Date : 2009.03.01 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +function spawn(NPC) + SetPlayerProximityFunction(NPC, 10, "InRange", "LeaveRange") +end + +function respawn(NPC) + spawn(NPC) +end + +function InRange(NPC, Spawn) +end + +function LeaveRange(NPC, Spawn) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + + choice = math.random(1,2) + + if choice == 1 then + PlayFlavor(NPC, "", "I hear that things are less expensive now that more trade is happening with the Outside.", "", 1689589577, 4560189, Spawn) + elseif choice == 2 then + PlayFlavor(NPC, "", "We Fae need to welcome newcomers. They could turn out to be valuable friends.", "", 1689589577, 4560189, Spawn) + else + end + +end + diff --git a/server/SpawnScripts/GreaterFaydark/PaivaKapanen.lua b/server/SpawnScripts/GreaterFaydark/PaivaKapanen.lua new file mode 100644 index 000000000..e8d5e1e6b --- /dev/null +++ b/server/SpawnScripts/GreaterFaydark/PaivaKapanen.lua @@ -0,0 +1,37 @@ +--[[ + Script Name : SpawnScripts/GreaterFaydark/PaivaKapanen.lua + Script Purpose : Paiva Kapanen + Script Author : John Adams + Script Date : 2009.03.01 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +function spawn(NPC) + SetPlayerProximityFunction(NPC, 10, "InRange", "LeaveRange") +end + +function respawn(NPC) + spawn(NPC) +end + +function InRange(NPC, Spawn) +end + +function LeaveRange(NPC, Spawn) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_1_1005.mp3", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Nothing, thanks.", "dlg_8_1") + StartConversation(conversation, NPC, Spawn, "What can I get for you?") + if convo==9 then + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Nothing, thanks.", "dlg_9_1") + StartConversation(conversation, NPC, Spawn, "What can I get for you?") + end + +end + diff --git a/server/SpawnScripts/GreaterFaydark/PhilosopherYubee.lua b/server/SpawnScripts/GreaterFaydark/PhilosopherYubee.lua new file mode 100644 index 000000000..916f311c3 --- /dev/null +++ b/server/SpawnScripts/GreaterFaydark/PhilosopherYubee.lua @@ -0,0 +1,921 @@ +--[[ + Script Name : SpawnScripts/GreaterFaydark/PhilosopherYubee.lua + Script Purpose : Philosopher Yubee + Script Author : John Adams + Script Date : 2009.03.01 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +function spawn(NPC) + SetPlayerProximityFunction(NPC, 10, "InRange", "LeaveRange") +end + +function respawn(NPC) + spawn(NPC) +end + +function InRange(NPC, Spawn) +end + +function LeaveRange(NPC, Spawn) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "It's so wonderful! I just want to go out and start basking in their glory right away!", "dlg_28_1") + AddConversationOption(conversation, "Feh. Gods, who needs em? Always a pain in yer neck! I'd sooner stick a knife in their gut than worship those churlish manifestations.") + AddConversationOption(conversation, "I'm really not interested at all.") + StartConversation(conversation, NPC, Spawn, "Hello there! I'm sure you've heard all the hubbub about the deities coming back to us! Some people think it's grand, others not so much.") + if convo==29 then + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "It's so wonderful! I just want to go out and start basking in their glory right away!", "dlg_29_1") + AddConversationOption(conversation, "Feh. Gods, who needs em? Always a pain in yer neck! I'd sooner stick a knife in their gut than worship those churlish manifestations.") + AddConversationOption(conversation, "I'm really not interested at all.") + StartConversation(conversation, NPC, Spawn, "Hello there! I'm sure you've heard all the hubbub about the deities coming back to us! Some people think it's grand, others not so much.") + end + + if convo==30 then + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "It's so wonderful! I just want to go out and start basking in their glory right away!", "dlg_30_1") + AddConversationOption(conversation, "Feh. Gods, who needs em? Always a pain in yer neck! I'd sooner stick a knife in their gut than worship those churlish manifestations.") + AddConversationOption(conversation, "I'm really not interested at all.") + StartConversation(conversation, NPC, Spawn, "Hello there! I'm sure you've heard all the hubbub about the deities coming back to us! Some people think it's grand, others not so much.") + end + + if convo==31 then + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_1_1006.mp3", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "It's so wonderful! I just want to go out and start basking in their glory right away!", "dlg_31_1") + AddConversationOption(conversation, "Feh. Gods, who needs em? Always a pain in yer neck! I'd sooner stick a knife in their gut than worship those churlish manifestations.") + AddConversationOption(conversation, "I'm really not interested at all.") + StartConversation(conversation, NPC, Spawn, "Hello there! I'm sure you've heard all the hubbub about the deities coming back to us! Some people think it's grand, others not so much.") + end + + if convo==32 then + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_3_1006.mp3", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "It's so wonderful! I just want to go out and start basking in their glory right away!", "dlg_32_1") + AddConversationOption(conversation, "Feh. Gods, who needs em? Always a pain in yer neck! I'd sooner stick a knife in their gut than worship those churlish manifestations.") + AddConversationOption(conversation, "I'm really not interested at all.") + StartConversation(conversation, NPC, Spawn, "Hello there! I'm sure you've heard all the hubbub about the deities coming back to us! Some people think it's grand, others not so much.") + end + +end + +function dlg_28_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "philosopher_rhimes/_exp03/deity/deity_historian001.mp3", "", "", 1885768155, 4071330533, Spawn) + AddConversationOption(conversation, "You will tell me where to find the prophet of Cazic-Thule. Now!") + AddConversationOption(conversation, "I want to find out more about Innoruuk.", "dlg_28_2") + AddConversationOption(conversation, "Tell me where I can find the prophet of Rallos Zek.") + AddConversationOption(conversation, "I've always been interested in Solusek Ro.") + AddConversationOption(conversation, "I'm born of the earth, now tell me about Brell Serilis!") + AddConversationOption(conversation, "Where might I find Quellious' prophet?") + AddConversationOption(conversation, "Tunare, I think I would enjoy knowing where to speak with her prophet.") + AddConversationOption(conversation, "Please tell me where I may find the prophet of Mithaniel Marr.") + AddConversationOption(conversation, "I hear the the prophet of Bristlebane is looking for a devoted prankster. Where might I find him?") + AddConversationOption(conversation, "Please tell me where I may find the prophet of The Tribunal.") + AddConversationOption(conversation, "Where might I find Karana's prophet?") + AddConversationOption(conversation, "I've always been interested in the ways of Bertoxxulous. Where is his prophet?") + StartConversation(conversation, NPC, Spawn, "Well, you may wish to learn of their prophet's locations. Perhaps one of them will interest you with his tales.") +end + +function dlg_29_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "philosopher_rhimes/_exp03/deity/deity_historian011.mp3", "", "", 1707355458, 1531415457, Spawn) + AddConversationOption(conversation, "I am interested in the powers of Good. Where might I find their prophets?", "dlg_29_2") + AddConversationOption(conversation, "I walk my own path, and serve neither good nor evil. Where might I find the gods of neutrality?") + AddConversationOption(conversation, "If you know what is good for you, then tell me where I can find the servants of the evil gods!") + AddConversationOption(conversation, "I don't have time to make this decision now. I will return another time.") + StartConversation(conversation, NPC, Spawn, "Ah ha! You're one of the people who think their return is wonderful! Well, if you're interested, I've been taking notes on where their prophets have gone. You can talk to them for more information. Prophets are always ready to welcome new followers to the flock.") +end + +function dlg_29_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "You will tell me where to find the prophet of Cazic-Thule. Now!") + AddConversationOption(conversation, "Tell me where I can find the prophet of Rallos Zek.") + AddConversationOption(conversation, "I want to find out more about Innoruuk.", "dlg_29_3") + AddConversationOption(conversation, "I wish to learn more about Bertoxxulous, the Plaguebringer.") + AddConversationOption(conversation, "I am interested in learning more about the Forgotten One, Anashti Sul.") + AddConversationOption(conversation, "My apologies, I don't think I'm interested in any of those. What other choices might I have?") + AddConversationOption(conversation, "Actually, this is something I want to consider more carefully right now. Perhaps another time.") + StartConversation(conversation, NPC, Spawn, "Which one were you inquiring about?") +end + +function dlg_29_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "philosopher_rhimes/_exp03/deity/deity_historian011.mp3", "", "", 1707355458, 1531415457, Spawn) + AddConversationOption(conversation, "I am interested in the powers of Good. Where might I find their prophets?") + AddConversationOption(conversation, "I walk my own path, and serve neither good nor evil. Where might I find the gods of neutrality?") + AddConversationOption(conversation, "If you know what is good for you, then tell me where I can find the servants of the evil gods!") + AddConversationOption(conversation, "I don't have time to make this decision now. I will return another time.") + StartConversation(conversation, NPC, Spawn, "Ah ha! You're one of the people who think their return is wonderful! Well, if you're interested, I've been taking notes on where their prophets have gone. You can talk to them for more information. Prophets are always ready to welcome new followers to the flock.") +end + +function dlg_29_4(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "I'm born of the earth, now tell me about Brell Serilis!") + AddConversationOption(conversation, "I hear the prophet of Bristlebane is looking for a devoted prankster. Where might I find him?", "dlg_29_5") + AddConversationOption(conversation, "I've always been interested in Solusek Ro.") + AddConversationOption(conversation, "I want to work with the law. Where is the Tribunal's prophet?") + AddConversationOption(conversation, "I serve the father of storms. Where can I find the prophet of Karana?") + AddConversationOption(conversation, "My apologies, I don't think I'm interested in any of those. What other choices might I have?") + AddConversationOption(conversation, "Actually, this is something I want to consider more carefully right now. Perhaps another time.") + StartConversation(conversation, NPC, Spawn, "Which one were you inquiring about?") +end + +function dlg_29_5(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "philosopher_rhimes/_exp03/deity/deity_historian011.mp3", "", "", 1707355458, 1531415457, Spawn) + AddConversationOption(conversation, "I am interested in the powers of Good. Where might I find their prophets?") + AddConversationOption(conversation, "I walk my own path, and serve neither good nor evil. Where might I find the gods of neutrality?") + AddConversationOption(conversation, "If you know what is good for you, then tell me where I can find the servants of the evil gods!") + AddConversationOption(conversation, "I don't have time to make this decision now. I will return another time.") + StartConversation(conversation, NPC, Spawn, "Ah ha! You're one of the people who think their return is wonderful! Well, if you're interested, I've been taking notes on where their prophets have gone. You can talk to them for more information. Prophets are always ready to welcome new followers to the flock.") +end + +function dlg_29_6(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Please tell me where I may find the prophet of Mithaniel Marr.", "dlg_29_7") + AddConversationOption(conversation, "Tunare...tell me where to speak with her prophet.") + AddConversationOption(conversation, "Where might I find Quellious' prophet?") + AddConversationOption(conversation, "I am searching for the prophet of the Prime Healer, Rodcet Nife.") + AddConversationOption(conversation, "My apologies, I don't think I'm interested in any of those. What other choices might I have?") + AddConversationOption(conversation, "Actually, this is something I want to consider more carefully right now. Perhaps another time.") + StartConversation(conversation, NPC, Spawn, "Which one were you inquiring about?") +end + +function dlg_29_7(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "philosopher_rhimes/_exp03/deity/deity_historian009.mp3", "", "", 3714246172, 3594253878, Spawn) + AddConversationOption(conversation, "Very good, I will be on my way then.", "dlg_29_8") + AddConversationOption(conversation, "On second thought...") + StartConversation(conversation, NPC, Spawn, "Sir Bayden Cauldthorn may be found in Old Kelethin, not far from the research library. He seeks all brave and valorous enough to follow Mithaniel Marr!") +end + +function dlg_29_8(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "philosopher_rhimes/_exp03/deity/deity_historian011.mp3", "", "", 1707355458, 1531415457, Spawn) + AddConversationOption(conversation, "I am interested in the powers of Good. Where might I find their prophets?") + AddConversationOption(conversation, "I walk my own path, and serve neither good nor evil. Where might I find the gods of neutrality?", "dlg_29_9") + AddConversationOption(conversation, "If you know what is good for you, then tell me where I can find the servants of the evil gods!") + AddConversationOption(conversation, "I don't have time to make this decision now. I will return another time.") + StartConversation(conversation, NPC, Spawn, "Ah ha! You're one of the people who think their return is wonderful! Well, if you're interested, I've been taking notes on where their prophets have gone. You can talk to them for more information. Prophets are always ready to welcome new followers to the flock.") +end + +function dlg_29_9(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Please tell me where I may find the prophet of Mithaniel Marr.", "dlg_29_10") + AddConversationOption(conversation, "Tunare...tell me where to speak with her prophet.") + AddConversationOption(conversation, "Where might I find Quellious' prophet?") + AddConversationOption(conversation, "I am searching for the prophet of the Prime Healer, Rodcet Nife.") + AddConversationOption(conversation, "My apologies, I don't think I'm interested in any of those. What other choices might I have?") + AddConversationOption(conversation, "Actually, this is something I want to consider more carefully right now. Perhaps another time.") + StartConversation(conversation, NPC, Spawn, "Which one were you inquiring about?") +end + +function dlg_29_10(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "philosopher_rhimes/_exp03/deity/deity_historian007.mp3", "", "", 1991516548, 1632985185, Spawn) + AddConversationOption(conversation, "Very good, I will be on my way then.") + AddConversationOption(conversation, "On second thought...", "dlg_29_11") + StartConversation(conversation, NPC, Spawn, "Tunare's prophet, Eva Corunno'thes has taken up residence within Old Kelethin. If you wish to learn more about the Earthmother, I am certain she would be willing to share her faith with you.") +end + +function dlg_30_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "philosopher_rhimes/_exp03/deity/deity_historian011.mp3", "", "", 1707355458, 1531415457, Spawn) + AddConversationOption(conversation, "I am interested in the powers of Good. Where might I find their prophets?", "dlg_30_2") + AddConversationOption(conversation, "I walk my own path, and serve neither good nor evil. Where might I find the gods of neutrality?") + AddConversationOption(conversation, "If you know what is good for you, then tell me where I can find the servants of the evil gods!") + AddConversationOption(conversation, "I don't have time to make this decision now. I will return another time.") + StartConversation(conversation, NPC, Spawn, "Ah ha! You're one of the people who think their return is wonderful! Well, if you're interested, I've been taking notes on where their prophets have gone. You can talk to them for more information. Prophets are always ready to welcome new followers to the flock.") +end + +function dlg_30_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Please tell me where I may find the prophet of Mithaniel Marr.", "dlg_30_3") + AddConversationOption(conversation, "Tunare...tell me where to speak with her prophet.") + AddConversationOption(conversation, "Where might I find Quellious' prophet?") + AddConversationOption(conversation, "I am searching for the prophet of the Prime Healer, Rodcet Nife.") + AddConversationOption(conversation, "My apologies, I don't think I'm interested in any of those. What other choices might I have?") + AddConversationOption(conversation, "Actually, this is something I want to consider more carefully right now. Perhaps another time.") + StartConversation(conversation, NPC, Spawn, "Which one were you inquiring about?") +end + +function dlg_30_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "philosopher_rhimes/_exp03/deity/deity_historian007.mp3", "", "", 1991516548, 1632985185, Spawn) + AddConversationOption(conversation, "Very good, I will be on my way then.") + AddConversationOption(conversation, "On second thought...", "dlg_30_4") + StartConversation(conversation, NPC, Spawn, "Tunare's prophet, Eva Corunno'thes has taken up residence within Old Kelethin. If you wish to learn more about the Earthmother, I am certain she would be willing to share her faith with you.") +end + +function dlg_30_4(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "philosopher_rhimes/_exp03/deity/deity_historian011.mp3", "", "", 1707355458, 1531415457, Spawn) + AddConversationOption(conversation, "I am interested in the powers of Good. Where might I find their prophets?") + AddConversationOption(conversation, "I walk my own path, and serve neither good nor evil. Where might I find the gods of neutrality?", "dlg_30_5") + AddConversationOption(conversation, "If you know what is good for you, then tell me where I can find the servants of the evil gods!") + AddConversationOption(conversation, "I don't have time to make this decision now. I will return another time.") + StartConversation(conversation, NPC, Spawn, "Ah ha! You're one of the people who think their return is wonderful! Well, if you're interested, I've been taking notes on where their prophets have gone. You can talk to them for more information. Prophets are always ready to welcome new followers to the flock.") +end + +function dlg_30_5(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Please tell me where I may find the prophet of Mithaniel Marr.", "dlg_30_6") + AddConversationOption(conversation, "Tunare...tell me where to speak with her prophet.") + AddConversationOption(conversation, "Where might I find Quellious' prophet?") + AddConversationOption(conversation, "I am searching for the prophet of the Prime Healer, Rodcet Nife.") + AddConversationOption(conversation, "My apologies, I don't think I'm interested in any of those. What other choices might I have?") + AddConversationOption(conversation, "Actually, this is something I want to consider more carefully right now. Perhaps another time.") + StartConversation(conversation, NPC, Spawn, "Which one were you inquiring about?") +end + +function dlg_30_6(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "philosopher_rhimes/_exp03/deity/deity_historian008.mp3", "", "", 3677729012, 3031035319, Spawn) + AddConversationOption(conversation, "Very good, I will be on my way then.") + AddConversationOption(conversation, "On second thought...") + StartConversation(conversation, NPC, Spawn, "Sensei Shoda has delegated responsibility to an erudite named Merrek. You can find him at the top of the cliffs in Butcherblock overlooking the ocean.") +end + +function dlg_30_7(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "philosopher_rhimes/_exp03/deity/deity_historian011.mp3", "", "", 1707355458, 1531415457, Spawn) + AddConversationOption(conversation, "I am interested in the powers of Good. Where might I find their prophets?") + AddConversationOption(conversation, "I walk my own path, and serve neither good nor evil. Where might I find the gods of neutrality?", "dlg_30_8") + AddConversationOption(conversation, "If you know what is good for you, then tell me where I can find the servants of the evil gods!") + AddConversationOption(conversation, "I don't have time to make this decision now. I will return another time.") + StartConversation(conversation, NPC, Spawn, "Ah ha! You're one of the people who think their return is wonderful! Well, if you're interested, I've been taking notes on where their prophets have gone. You can talk to them for more information. Prophets are always ready to welcome new followers to the flock.") +end + +function dlg_30_8(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Please tell me where I may find the prophet of Mithaniel Marr.", "dlg_30_9") + AddConversationOption(conversation, "Tunare...tell me where to speak with her prophet.") + AddConversationOption(conversation, "Where might I find Quellious' prophet?") + AddConversationOption(conversation, "I am searching for the prophet of the Prime Healer, Rodcet Nife.") + AddConversationOption(conversation, "My apologies, I don't think I'm interested in any of those. What other choices might I have?") + AddConversationOption(conversation, "Actually, this is something I want to consider more carefully right now. Perhaps another time.") + StartConversation(conversation, NPC, Spawn, "Which one were you inquiring about?") +end + +function dlg_30_9(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Thank you for your guidance. Farewell to you.") + AddConversationOption(conversation, "On second thought...") + StartConversation(conversation, NPC, Spawn, "Following in the footsteps of Seeress Ealaynya Ithis, the Prophet Bainyn Fairwind has been preaching the word of the Prime Healer from within the Temple of Life in North Qeynos. If you wish to learn more about Rodcet Nife, then seek out Bainyn within the sacred temple.") +end + +function dlg_30_10(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "philosopher_rhimes/_exp03/deity/deity_historian011.mp3", "", "", 1707355458, 1531415457, Spawn) + AddConversationOption(conversation, "I am interested in the powers of Good. Where might I find their prophets?") + AddConversationOption(conversation, "I walk my own path, and serve neither good nor evil. Where might I find the gods of neutrality?", "dlg_30_11") + AddConversationOption(conversation, "If you know what is good for you, then tell me where I can find the servants of the evil gods!") + AddConversationOption(conversation, "I don't have time to make this decision now. I will return another time.") + StartConversation(conversation, NPC, Spawn, "Ah ha! You're one of the people who think their return is wonderful! Well, if you're interested, I've been taking notes on where their prophets have gone. You can talk to them for more information. Prophets are always ready to welcome new followers to the flock.") +end + +function dlg_30_11(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Please tell me where I may find the prophet of Mithaniel Marr.", "dlg_30_12") + AddConversationOption(conversation, "Tunare...tell me where to speak with her prophet.") + AddConversationOption(conversation, "Where might I find Quellious' prophet?") + AddConversationOption(conversation, "I am searching for the prophet of the Prime Healer, Rodcet Nife.") + AddConversationOption(conversation, "My apologies, I don't think I'm interested in any of those. What other choices might I have?") + AddConversationOption(conversation, "Actually, this is something I want to consider more carefully right now. Perhaps another time.") + StartConversation(conversation, NPC, Spawn, "Which one were you inquiring about?") +end + +function dlg_30_12(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "philosopher_rhimes/_exp03/deity/deity_historian011.mp3", "", "", 1707355458, 1531415457, Spawn) + AddConversationOption(conversation, "I am interested in the powers of Good. Where might I find their prophets?") + AddConversationOption(conversation, "I walk my own path, and serve neither good nor evil. Where might I find the gods of neutrality?") + AddConversationOption(conversation, "If you know what is good for you, then tell me where I can find the servants of the evil gods!") + AddConversationOption(conversation, "I don't have time to make this decision now. I will return another time.") + StartConversation(conversation, NPC, Spawn, "Ah ha! You're one of the people who think their return is wonderful! Well, if you're interested, I've been taking notes on where their prophets have gone. You can talk to them for more information. Prophets are always ready to welcome new followers to the flock.") +end + +function dlg_30_13(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "I'm born of the earth, now tell me about Brell Serilis!") + AddConversationOption(conversation, "I hear the prophet of Bristlebane is looking for a devoted prankster. Where might I find him?", "dlg_30_14") + AddConversationOption(conversation, "I've always been interested in Solusek Ro.") + AddConversationOption(conversation, "I want to work with the law. Where is the Tribunal's prophet?") + AddConversationOption(conversation, "I serve the father of storms. Where can I find the prophet of Karana?") + AddConversationOption(conversation, "My apologies, I don't think I'm interested in any of those. What other choices might I have?") + AddConversationOption(conversation, "Actually, this is something I want to consider more carefully right now. Perhaps another time.") + StartConversation(conversation, NPC, Spawn, "Which one were you inquiring about?") +end + +function dlg_30_14(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "philosopher_rhimes/_exp03/deity/deity_historian006.mp3", "", "", 491255471, 488102680, Spawn) + AddConversationOption(conversation, "Very good, I will be on my way then.", "dlg_30_15") + AddConversationOption(conversation, "On second thought...") + StartConversation(conversation, NPC, Spawn, "Bronlor Stormhammer has gone to West Fort Irontoe here in the Butcherblock Mountains. You will need to seek him out if it is Brell Serilis you are interested in learning about.") +end + +function dlg_30_15(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "philosopher_rhimes/_exp03/deity/deity_historian011.mp3", "", "", 1707355458, 1531415457, Spawn) + AddConversationOption(conversation, "I am interested in the powers of Good. Where might I find their prophets?") + AddConversationOption(conversation, "I walk my own path, and serve neither good nor evil. Where might I find the gods of neutrality?", "dlg_30_16") + AddConversationOption(conversation, "If you know what is good for you, then tell me where I can find the servants of the evil gods!") + AddConversationOption(conversation, "I don't have time to make this decision now. I will return another time.") + StartConversation(conversation, NPC, Spawn, "Ah ha! You're one of the people who think their return is wonderful! Well, if you're interested, I've been taking notes on where their prophets have gone. You can talk to them for more information. Prophets are always ready to welcome new followers to the flock.") +end + +function dlg_30_16(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "I'm born of the earth, now tell me about Brell Serilis!") + AddConversationOption(conversation, "I hear the prophet of Bristlebane is looking for a devoted prankster. Where might I find him?", "dlg_30_17") + AddConversationOption(conversation, "I've always been interested in Solusek Ro.") + AddConversationOption(conversation, "I want to work with the law. Where is the Tribunal's prophet?") + AddConversationOption(conversation, "I serve the father of storms. Where can I find the prophet of Karana?") + AddConversationOption(conversation, "My apologies, I don't think I'm interested in any of those. What other choices might I have?") + AddConversationOption(conversation, "Actually, this is something I want to consider more carefully right now. Perhaps another time.") + StartConversation(conversation, NPC, Spawn, "Which one were you inquiring about?") +end + +function dlg_30_17(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "philosopher_rhimes/_exp03/deity/deity_historian012.mp3", "", "", 63830979, 2698789391, Spawn) + AddConversationOption(conversation, "Very good, I will be on my way then.") + AddConversationOption(conversation, "On second thought...", "dlg_30_18") + StartConversation(conversation, NPC, Spawn, "I believe Tobel Patadash is the one you should seek out. He's currently residing on the docks of the Enchanted Lands, near the Lost Village of Bobick.") +end + +function dlg_30_18(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "philosopher_rhimes/_exp03/deity/deity_historian011.mp3", "", "", 1707355458, 1531415457, Spawn) + AddConversationOption(conversation, "I am interested in the powers of Good. Where might I find their prophets?") + AddConversationOption(conversation, "I walk my own path, and serve neither good nor evil. Where might I find the gods of neutrality?", "dlg_30_19") + AddConversationOption(conversation, "If you know what is good for you, then tell me where I can find the servants of the evil gods!") + AddConversationOption(conversation, "I don't have time to make this decision now. I will return another time.") + StartConversation(conversation, NPC, Spawn, "Ah ha! You're one of the people who think their return is wonderful! Well, if you're interested, I've been taking notes on where their prophets have gone. You can talk to them for more information. Prophets are always ready to welcome new followers to the flock.") +end + +function dlg_30_19(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "I'm born of the earth, now tell me about Brell Serilis!") + AddConversationOption(conversation, "I hear the prophet of Bristlebane is looking for a devoted prankster. Where might I find him?", "dlg_30_20") + AddConversationOption(conversation, "I've always been interested in Solusek Ro.") + AddConversationOption(conversation, "I want to work with the law. Where is the Tribunal's prophet?") + AddConversationOption(conversation, "I serve the father of storms. Where can I find the prophet of Karana?") + AddConversationOption(conversation, "My apologies, I don't think I'm interested in any of those. What other choices might I have?") + AddConversationOption(conversation, "Actually, this is something I want to consider more carefully right now. Perhaps another time.") + StartConversation(conversation, NPC, Spawn, "Which one were you inquiring about?") +end + +function dlg_30_20(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Very good, I will be on my way then.") + AddConversationOption(conversation, "On second thought...") + StartConversation(conversation, NPC, Spawn, "Justinian Theo is near the settlement of Chrykori Village in Timorous Deep. His eyes scan the horizon, searching for those who seek justice and balance in Norrath. If that is what you seek, then speak with him.") +end + +function dlg_30_21(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "philosopher_rhimes/_exp03/deity/deity_historian011.mp3", "", "", 1707355458, 1531415457, Spawn) + AddConversationOption(conversation, "I am interested in the powers of Good. Where might I find their prophets?") + AddConversationOption(conversation, "I walk my own path, and serve neither good nor evil. Where might I find the gods of neutrality?", "dlg_30_22") + AddConversationOption(conversation, "If you know what is good for you, then tell me where I can find the servants of the evil gods!") + AddConversationOption(conversation, "I don't have time to make this decision now. I will return another time.") + StartConversation(conversation, NPC, Spawn, "Ah ha! You're one of the people who think their return is wonderful! Well, if you're interested, I've been taking notes on where their prophets have gone. You can talk to them for more information. Prophets are always ready to welcome new followers to the flock.") +end + +function dlg_30_22(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "I'm born of the earth, now tell me about Brell Serilis!") + AddConversationOption(conversation, "I hear the prophet of Bristlebane is looking for a devoted prankster. Where might I find him?", "dlg_30_23") + AddConversationOption(conversation, "I've always been interested in Solusek Ro.") + AddConversationOption(conversation, "I want to work with the law. Where is the Tribunal's prophet?") + AddConversationOption(conversation, "I serve the father of storms. Where can I find the prophet of Karana?") + AddConversationOption(conversation, "My apologies, I don't think I'm interested in any of those. What other choices might I have?") + AddConversationOption(conversation, "Actually, this is something I want to consider more carefully right now. Perhaps another time.") + StartConversation(conversation, NPC, Spawn, "Which one were you inquiring about?") +end + +function dlg_30_23(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Then I will go to him swiftly.") + AddConversationOption(conversation, "On second thought...") + StartConversation(conversation, NPC, Spawn, "Askr can be found near the city of Gorowyn in Timorous Deep -- on the Green Outlook. He can tell you how to return the father of storms to the skies of Norrath.") +end + +function dlg_30_24(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "philosopher_rhimes/_exp03/deity/deity_historian011.mp3", "", "", 1707355458, 1531415457, Spawn) + AddConversationOption(conversation, "I am interested in the powers of Good. Where might I find their prophets?") + AddConversationOption(conversation, "I walk my own path, and serve neither good nor evil. Where might I find the gods of neutrality?", "dlg_30_25") + AddConversationOption(conversation, "If you know what is good for you, then tell me where I can find the servants of the evil gods!") + AddConversationOption(conversation, "I don't have time to make this decision now. I will return another time.") + StartConversation(conversation, NPC, Spawn, "Ah ha! You're one of the people who think their return is wonderful! Well, if you're interested, I've been taking notes on where their prophets have gone. You can talk to them for more information. Prophets are always ready to welcome new followers to the flock.") +end + +function dlg_30_25(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "I'm born of the earth, now tell me about Brell Serilis!") + AddConversationOption(conversation, "I hear the prophet of Bristlebane is looking for a devoted prankster. Where might I find him?", "dlg_30_26") + AddConversationOption(conversation, "I've always been interested in Solusek Ro.") + AddConversationOption(conversation, "I want to work with the law. Where is the Tribunal's prophet?") + AddConversationOption(conversation, "I serve the father of storms. Where can I find the prophet of Karana?") + AddConversationOption(conversation, "My apologies, I don't think I'm interested in any of those. What other choices might I have?") + AddConversationOption(conversation, "Actually, this is something I want to consider more carefully right now. Perhaps another time.") + StartConversation(conversation, NPC, Spawn, "Which one were you inquiring about?") +end + +function dlg_30_26(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "philosopher_rhimes/_exp03/deity/deity_historian011.mp3", "", "", 1707355458, 1531415457, Spawn) + AddConversationOption(conversation, "I am interested in the powers of Good. Where might I find their prophets?") + AddConversationOption(conversation, "I walk my own path, and serve neither good nor evil. Where might I find the gods of neutrality?") + AddConversationOption(conversation, "If you know what is good for you, then tell me where I can find the servants of the evil gods!") + AddConversationOption(conversation, "I don't have time to make this decision now. I will return another time.") + StartConversation(conversation, NPC, Spawn, "Ah ha! You're one of the people who think their return is wonderful! Well, if you're interested, I've been taking notes on where their prophets have gone. You can talk to them for more information. Prophets are always ready to welcome new followers to the flock.") +end + +function dlg_30_27(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "You will tell me where to find the prophet of Cazic-Thule. Now!") + AddConversationOption(conversation, "Tell me where I can find the prophet of Rallos Zek.") + AddConversationOption(conversation, "I want to find out more about Innoruuk.", "dlg_30_28") + AddConversationOption(conversation, "I wish to learn more about Bertoxxulous, the Plaguebringer.") + AddConversationOption(conversation, "I am interested in learning more about the Forgotten One, Anashti Sul.") + AddConversationOption(conversation, "My apologies, I don't think I'm interested in any of those. What other choices might I have?") + AddConversationOption(conversation, "Actually, this is something I want to consider more carefully right now. Perhaps another time.") + StartConversation(conversation, NPC, Spawn, "Which one were you inquiring about?") +end + +function dlg_30_28(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "philosopher_rhimes/_exp03/deity/deity_historian002.mp3", "", "", 1717778678, 2232573733, Spawn) + AddConversationOption(conversation, "Very good, I will be on my way then.", "dlg_30_29") + AddConversationOption(conversation, "On second thought...") + StartConversation(conversation, NPC, Spawn, "The Prophet of Fear, Danak Dhorentath, has gone to Dagnor's Pass here in Butcherblock. If you wish to learn more about Cazic-Thule, I would seek him out there.") +end + +function dlg_30_29(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "philosopher_rhimes/_exp03/deity/deity_historian011.mp3", "", "", 1707355458, 1531415457, Spawn) + AddConversationOption(conversation, "I am interested in the powers of Good. Where might I find their prophets?") + AddConversationOption(conversation, "I walk my own path, and serve neither good nor evil. Where might I find the gods of neutrality?", "dlg_30_30") + AddConversationOption(conversation, "If you know what is good for you, then tell me where I can find the servants of the evil gods!") + AddConversationOption(conversation, "I don't have time to make this decision now. I will return another time.") + StartConversation(conversation, NPC, Spawn, "Ah ha! You're one of the people who think their return is wonderful! Well, if you're interested, I've been taking notes on where their prophets have gone. You can talk to them for more information. Prophets are always ready to welcome new followers to the flock.") +end + +function dlg_30_30(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "You will tell me where to find the prophet of Cazic-Thule. Now!") + AddConversationOption(conversation, "Tell me where I can find the prophet of Rallos Zek.") + AddConversationOption(conversation, "I want to find out more about Innoruuk.", "dlg_30_31") + AddConversationOption(conversation, "I wish to learn more about Bertoxxulous, the Plaguebringer.") + AddConversationOption(conversation, "I am interested in learning more about the Forgotten One, Anashti Sul.") + AddConversationOption(conversation, "My apologies, I don't think I'm interested in any of those. What other choices might I have?") + AddConversationOption(conversation, "Actually, this is something I want to consider more carefully right now. Perhaps another time.") + StartConversation(conversation, NPC, Spawn, "Which one were you inquiring about?") +end + +function dlg_30_31(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "philosopher_rhimes/_exp03/deity/deity_historian004.mp3", "", "", 2236120283, 3019102435, Spawn) + AddConversationOption(conversation, "Very good, I will be on my way then.") + AddConversationOption(conversation, "On second thought...", "dlg_30_32") + StartConversation(conversation, NPC, Spawn, "Tychus Zeksworn has taken up a position east of East Fort Irontoe, overlooking one of the treacherous mountain passes. Perhaps he seeks to recruit the bugbears and kobolds to join an army of Rallos Zek!") +end + +function dlg_30_32(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "philosopher_rhimes/_exp03/deity/deity_historian011.mp3", "", "", 1707355458, 1531415457, Spawn) + AddConversationOption(conversation, "I am interested in the powers of Good. Where might I find their prophets?") + AddConversationOption(conversation, "I walk my own path, and serve neither good nor evil. Where might I find the gods of neutrality?", "dlg_30_33") + AddConversationOption(conversation, "If you know what is good for you, then tell me where I can find the servants of the evil gods!") + AddConversationOption(conversation, "I don't have time to make this decision now. I will return another time.") + StartConversation(conversation, NPC, Spawn, "Ah ha! You're one of the people who think their return is wonderful! Well, if you're interested, I've been taking notes on where their prophets have gone. You can talk to them for more information. Prophets are always ready to welcome new followers to the flock.") +end + +function dlg_30_33(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "You will tell me where to find the prophet of Cazic-Thule. Now!") + AddConversationOption(conversation, "Tell me where I can find the prophet of Rallos Zek.") + AddConversationOption(conversation, "I want to find out more about Innoruuk.", "dlg_30_34") + AddConversationOption(conversation, "I wish to learn more about Bertoxxulous, the Plaguebringer.") + AddConversationOption(conversation, "I am interested in learning more about the Forgotten One, Anashti Sul.") + AddConversationOption(conversation, "My apologies, I don't think I'm interested in any of those. What other choices might I have?") + AddConversationOption(conversation, "Actually, this is something I want to consider more carefully right now. Perhaps another time.") + StartConversation(conversation, NPC, Spawn, "Which one were you inquiring about?") +end + +function dlg_30_34(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "philosopher_rhimes/_exp03/deity/deity_historian003.mp3", "", "", 3561850153, 4167915483, Spawn) + AddConversationOption(conversation, "Very good, I will be on my way then.") + AddConversationOption(conversation, "On second thought...") + StartConversation(conversation, NPC, Spawn, "Xilania Nevagon has gone to Greater Faydark, though to what end I do not know. I am certain that the Prophet of Innoruuk has only nefarious things in mind if she has gone to the home of the Fae!") +end + +function dlg_30_35(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "philosopher_rhimes/_exp03/deity/deity_historian011.mp3", "", "", 1707355458, 1531415457, Spawn) + AddConversationOption(conversation, "I am interested in the powers of Good. Where might I find their prophets?") + AddConversationOption(conversation, "I walk my own path, and serve neither good nor evil. Where might I find the gods of neutrality?", "dlg_30_36") + AddConversationOption(conversation, "If you know what is good for you, then tell me where I can find the servants of the evil gods!") + AddConversationOption(conversation, "I don't have time to make this decision now. I will return another time.") + StartConversation(conversation, NPC, Spawn, "Ah ha! You're one of the people who think their return is wonderful! Well, if you're interested, I've been taking notes on where their prophets have gone. You can talk to them for more information. Prophets are always ready to welcome new followers to the flock.") +end + +function dlg_30_36(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "You will tell me where to find the prophet of Cazic-Thule. Now!") + AddConversationOption(conversation, "Tell me where I can find the prophet of Rallos Zek.") + AddConversationOption(conversation, "I want to find out more about Innoruuk.", "dlg_30_37") + AddConversationOption(conversation, "I wish to learn more about Bertoxxulous, the Plaguebringer.") + AddConversationOption(conversation, "I am interested in learning more about the Forgotten One, Anashti Sul.") + AddConversationOption(conversation, "My apologies, I don't think I'm interested in any of those. What other choices might I have?") + AddConversationOption(conversation, "Actually, this is something I want to consider more carefully right now. Perhaps another time.") + StartConversation(conversation, NPC, Spawn, "Which one were you inquiring about?") +end + +function dlg_30_37(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Very good, I will be on my way then.") + AddConversationOption(conversation, "On second thought...") + StartConversation(conversation, NPC, Spawn, "Hrath Everstill can be found near the entrance to the city of Gorowyn in Timorous Deep. It's been said that he's been conducting some rather gruesome experiments on some of the locals in an attempt to unleash the wrath of Bertoxxulous, the Plaguebringer. Perhaps he could use your assistance.") +end + +function dlg_30_38(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "philosopher_rhimes/_exp03/deity/deity_historian011.mp3", "", "", 1707355458, 1531415457, Spawn) + AddConversationOption(conversation, "I am interested in the powers of Good. Where might I find their prophets?") + AddConversationOption(conversation, "I walk my own path, and serve neither good nor evil. Where might I find the gods of neutrality?", "dlg_30_39") + AddConversationOption(conversation, "If you know what is good for you, then tell me where I can find the servants of the evil gods!") + AddConversationOption(conversation, "I don't have time to make this decision now. I will return another time.") + StartConversation(conversation, NPC, Spawn, "Ah ha! You're one of the people who think their return is wonderful! Well, if you're interested, I've been taking notes on where their prophets have gone. You can talk to them for more information. Prophets are always ready to welcome new followers to the flock.") +end + +function dlg_30_39(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "You will tell me where to find the prophet of Cazic-Thule. Now!") + AddConversationOption(conversation, "Tell me where I can find the prophet of Rallos Zek.") + AddConversationOption(conversation, "I want to find out more about Innoruuk.", "dlg_30_40") + AddConversationOption(conversation, "I wish to learn more about Bertoxxulous, the Plaguebringer.") + AddConversationOption(conversation, "I am interested in learning more about the Forgotten One, Anashti Sul.") + AddConversationOption(conversation, "My apologies, I don't think I'm interested in any of those. What other choices might I have?") + AddConversationOption(conversation, "Actually, this is something I want to consider more carefully right now. Perhaps another time.") + StartConversation(conversation, NPC, Spawn, "Which one were you inquiring about?") +end + +function dlg_30_40(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "You have been most helpful. I will take my leave now.") + AddConversationOption(conversation, "On second thought...") + StartConversation(conversation, NPC, Spawn, "Once thought lost to the nothingness of the Void, Anashti Sul has found her way back to Norrath. Her Prophet, Plumetor Dul'Sadma, has taken up residence on the docks of the Sinking Sands. It is there you will need to travel if you wish to learn more about the nature of the Forgotten One.") +end + +function dlg_30_41(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "philosopher_rhimes/_exp03/deity/deity_historian011.mp3", "", "", 1707355458, 1531415457, Spawn) + AddConversationOption(conversation, "I am interested in the powers of Good. Where might I find their prophets?") + AddConversationOption(conversation, "I walk my own path, and serve neither good nor evil. Where might I find the gods of neutrality?", "dlg_30_42") + AddConversationOption(conversation, "If you know what is good for you, then tell me where I can find the servants of the evil gods!") + AddConversationOption(conversation, "I don't have time to make this decision now. I will return another time.") + StartConversation(conversation, NPC, Spawn, "Ah ha! You're one of the people who think their return is wonderful! Well, if you're interested, I've been taking notes on where their prophets have gone. You can talk to them for more information. Prophets are always ready to welcome new followers to the flock.") +end + +function dlg_30_42(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "You will tell me where to find the prophet of Cazic-Thule. Now!") + AddConversationOption(conversation, "Tell me where I can find the prophet of Rallos Zek.") + AddConversationOption(conversation, "I want to find out more about Innoruuk.", "dlg_30_43") + AddConversationOption(conversation, "I wish to learn more about Bertoxxulous, the Plaguebringer.") + AddConversationOption(conversation, "I am interested in learning more about the Forgotten One, Anashti Sul.") + AddConversationOption(conversation, "My apologies, I don't think I'm interested in any of those. What other choices might I have?") + AddConversationOption(conversation, "Actually, this is something I want to consider more carefully right now. Perhaps another time.") + StartConversation(conversation, NPC, Spawn, "Which one were you inquiring about?") +end + +function dlg_30_43(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "philosopher_rhimes/_exp03/deity/deity_historian011.mp3", "", "", 1707355458, 1531415457, Spawn) + AddConversationOption(conversation, "I am interested in the powers of Good. Where might I find their prophets?") + AddConversationOption(conversation, "I walk my own path, and serve neither good nor evil. Where might I find the gods of neutrality?") + AddConversationOption(conversation, "If you know what is good for you, then tell me where I can find the servants of the evil gods!") + AddConversationOption(conversation, "I don't have time to make this decision now. I will return another time.") + StartConversation(conversation, NPC, Spawn, "Ah ha! You're one of the people who think their return is wonderful! Well, if you're interested, I've been taking notes on where their prophets have gone. You can talk to them for more information. Prophets are always ready to welcome new followers to the flock.") +end + +function dlg_30_44(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "You will tell me where to find the prophet of Cazic-Thule. Now!") + AddConversationOption(conversation, "Tell me where I can find the prophet of Rallos Zek.") + AddConversationOption(conversation, "I want to find out more about Innoruuk.", "dlg_30_45") + AddConversationOption(conversation, "I wish to learn more about Bertoxxulous, the Plaguebringer.") + AddConversationOption(conversation, "I am interested in learning more about the Forgotten One, Anashti Sul.") + AddConversationOption(conversation, "My apologies, I don't think I'm interested in any of those. What other choices might I have?") + AddConversationOption(conversation, "Actually, this is something I want to consider more carefully right now. Perhaps another time.") + StartConversation(conversation, NPC, Spawn, "Which one were you inquiring about?") +end + +function dlg_31_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "philosopher_rhimes/_exp03/deity/deity_historian001.mp3", "", "", 1885768155, 4071330533, Spawn) + AddConversationOption(conversation, "You will tell me where to find the prophet of Cazic-Thule. Now!") + AddConversationOption(conversation, "I want to find out more about Innoruuk.", "dlg_31_2") + AddConversationOption(conversation, "Tell me where I can find the prophet of Rallos Zek.") + AddConversationOption(conversation, "I've always been interested in Solusek Ro.") + AddConversationOption(conversation, "I'm born of the earth, now tell me about Brell Serilis!") + AddConversationOption(conversation, "Where might I find Quellious' prophet?") + AddConversationOption(conversation, "Tunare, I think I would enjoy knowing where to speak with her prophet.") + AddConversationOption(conversation, "Please tell me where I may find the prophet of Mithaniel Marr.") + AddConversationOption(conversation, "I hear the the prophet of Bristlebane is looking for a devoted prankster. Where might I find him?") + AddConversationOption(conversation, "Please tell me where I may find the prophet of The Tribunal.") + AddConversationOption(conversation, "Where might I find Karana's prophet?") + AddConversationOption(conversation, "I've always been interested in the ways of Bertoxxulous. Where is his prophet?") + StartConversation(conversation, NPC, Spawn, "Well, you may wish to learn of their prophet's locations. Perhaps one of them will interest you with his tales.") +end + +function dlg_31_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "philosopher_rhimes/_exp03/deity/deity_historian002.mp3", "", "", 1717778678, 2232573733, Spawn) + AddConversationOption(conversation, "Very good, I will be on my way then.", "dlg_31_3") + AddConversationOption(conversation, "On second thought...") + StartConversation(conversation, NPC, Spawn, "The Prophet of Fear, Danak Dhorentath, has gone to Dagnor's Pass here in Butcherblock. If you wish to learn more about Cazic-Thule, I would seek him out there.") +end + +function dlg_31_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "philosopher_rhimes/_exp03/deity/deity_historian011.mp3", "", "", 1707355458, 1531415457, Spawn) + AddConversationOption(conversation, "I am interested in the powers of Good. Where might I find their prophets?") + AddConversationOption(conversation, "I walk my own path, and serve neither good nor evil. Where might I find the gods of neutrality?", "dlg_31_4") + AddConversationOption(conversation, "If you know what is good for you, then tell me where I can find the servants of the evil gods!") + AddConversationOption(conversation, "I don't have time to make this decision now. I will return another time.") + StartConversation(conversation, NPC, Spawn, "Ah ha! You're one of the people who think their return is wonderful! Well, if you're interested, I've been taking notes on where their prophets have gone. You can talk to them for more information. Prophets are always ready to welcome new followers to the flock.") +end + +function dlg_31_4(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_3_1006.mp3", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "It's so wonderful! I just want to go out and start basking in their glory right away!") + AddConversationOption(conversation, "Feh. Gods, who needs em? Always a pain in yer neck! I'd sooner stick a knife in their gut than worship those churlish manifestations.", "dlg_31_5") + AddConversationOption(conversation, "I'm really not interested at all.") + StartConversation(conversation, NPC, Spawn, "Hello there! I'm sure you've heard all the hubbub about the deities coming back to us! Some people think it's grand, others not so much.") +end + +function dlg_31_5(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "philosopher_rhimes/_exp03/deity/deity_historian001.mp3", "", "", 1885768155, 4071330533, Spawn) + AddConversationOption(conversation, "You will tell me where to find the prophet of Cazic-Thule. Now!") + AddConversationOption(conversation, "I want to find out more about Innoruuk.", "dlg_31_6") + AddConversationOption(conversation, "Tell me where I can find the prophet of Rallos Zek.") + AddConversationOption(conversation, "I've always been interested in Solusek Ro.") + AddConversationOption(conversation, "I'm born of the earth, now tell me about Brell Serilis!") + AddConversationOption(conversation, "Where might I find Quellious' prophet?") + AddConversationOption(conversation, "Tunare, I think I would enjoy knowing where to speak with her prophet.") + AddConversationOption(conversation, "Please tell me where I may find the prophet of Mithaniel Marr.") + AddConversationOption(conversation, "I hear the the prophet of Bristlebane is looking for a devoted prankster. Where might I find him?") + AddConversationOption(conversation, "Please tell me where I may find the prophet of The Tribunal.") + AddConversationOption(conversation, "Where might I find Karana's prophet?") + AddConversationOption(conversation, "I've always been interested in the ways of Bertoxxulous. Where is his prophet?") + StartConversation(conversation, NPC, Spawn, "Well, you may wish to learn of their prophet's locations. Perhaps one of them will interest you with his tales.") +end + +function dlg_31_6(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "philosopher_rhimes/_exp03/deity/deity_historian003.mp3", "", "", 3561850153, 4167915483, Spawn) + AddConversationOption(conversation, "Very good, I will be on my way then.") + AddConversationOption(conversation, "On second thought...", "dlg_31_7") + StartConversation(conversation, NPC, Spawn, "Xilania Nevagon has gone to Greater Faydark, though to what end I do not know. I am certain that the Prophet of Innoruuk has only nefarious things in mind if she has gone to the home of the Fae!") +end + +function dlg_31_7(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "philosopher_rhimes/_exp03/deity/deity_historian011.mp3", "", "", 1707355458, 1531415457, Spawn) + AddConversationOption(conversation, "I am interested in the powers of Good. Where might I find their prophets?") + AddConversationOption(conversation, "I walk my own path, and serve neither good nor evil. Where might I find the gods of neutrality?") + AddConversationOption(conversation, "If you know what is good for you, then tell me where I can find the servants of the evil gods!") + AddConversationOption(conversation, "I don't have time to make this decision now. I will return another time.", "dlg_31_8") + StartConversation(conversation, NPC, Spawn, "Ah ha! You're one of the people who think their return is wonderful! Well, if you're interested, I've been taking notes on where their prophets have gone. You can talk to them for more information. Prophets are always ready to welcome new followers to the flock.") +end + +function dlg_32_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "philosopher_rhimes/_exp03/deity/deity_historian001.mp3", "", "", 1885768155, 4071330533, Spawn) + AddConversationOption(conversation, "You will tell me where to find the prophet of Cazic-Thule. Now!") + AddConversationOption(conversation, "I want to find out more about Innoruuk.", "dlg_32_2") + AddConversationOption(conversation, "Tell me where I can find the prophet of Rallos Zek.") + AddConversationOption(conversation, "I've always been interested in Solusek Ro.") + AddConversationOption(conversation, "I'm born of the earth, now tell me about Brell Serilis!") + AddConversationOption(conversation, "Where might I find Quellious' prophet?") + AddConversationOption(conversation, "Tunare, I think I would enjoy knowing where to speak with her prophet.") + AddConversationOption(conversation, "Please tell me where I may find the prophet of Mithaniel Marr.") + AddConversationOption(conversation, "I hear the the prophet of Bristlebane is looking for a devoted prankster. Where might I find him?") + AddConversationOption(conversation, "Please tell me where I may find the prophet of The Tribunal.") + AddConversationOption(conversation, "Where might I find Karana's prophet?") + AddConversationOption(conversation, "I've always been interested in the ways of Bertoxxulous. Where is his prophet?") + StartConversation(conversation, NPC, Spawn, "Well, you may wish to learn of their prophet's locations. Perhaps one of them will interest you with his tales.") +end + +function dlg_32_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "philosopher_rhimes/_exp03/deity/deity_historian004.mp3", "", "", 2236120283, 3019102435, Spawn) + AddConversationOption(conversation, "Very good, I will be on my way then.") + AddConversationOption(conversation, "On second thought...") + StartConversation(conversation, NPC, Spawn, "Tychus Zeksworn has taken up a position east of East Fort Irontoe, overlooking one of the treacherous mountain passes. Perhaps he seeks to recruit the bugbears and kobolds to join an army of Rallos Zek!") +end + +function dlg_32_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "philosopher_rhimes/_exp03/deity/deity_historian011.mp3", "", "", 1707355458, 1531415457, Spawn) + AddConversationOption(conversation, "I am interested in the powers of Good. Where might I find their prophets?") + AddConversationOption(conversation, "I walk my own path, and serve neither good nor evil. Where might I find the gods of neutrality?", "dlg_32_4") + AddConversationOption(conversation, "If you know what is good for you, then tell me where I can find the servants of the evil gods!") + AddConversationOption(conversation, "I don't have time to make this decision now. I will return another time.") + StartConversation(conversation, NPC, Spawn, "Ah ha! You're one of the people who think their return is wonderful! Well, if you're interested, I've been taking notes on where their prophets have gone. You can talk to them for more information. Prophets are always ready to welcome new followers to the flock.") +end + +function dlg_32_4(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "You will tell me where to find the prophet of Cazic-Thule. Now!") + AddConversationOption(conversation, "Tell me where I can find the prophet of Rallos Zek.") + AddConversationOption(conversation, "I want to find out more about Innoruuk.", "dlg_32_5") + AddConversationOption(conversation, "I wish to learn more about Bertoxxulous, the Plaguebringer.") + AddConversationOption(conversation, "I am interested in learning more about the Forgotten One, Anashti Sul.") + AddConversationOption(conversation, "My apologies, I don't think I'm interested in any of those. What other choices might I have?") + AddConversationOption(conversation, "Actually, this is something I want to consider more carefully right now. Perhaps another time.") + StartConversation(conversation, NPC, Spawn, "Which one were you inquiring about?") +end + +function dlg_32_5(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "philosopher_rhimes/_exp03/deity/deity_historian004.mp3", "", "", 2236120283, 3019102435, Spawn) + AddConversationOption(conversation, "Very good, I will be on my way then.") + AddConversationOption(conversation, "On second thought...", "dlg_32_6") + StartConversation(conversation, NPC, Spawn, "Tychus Zeksworn has taken up a position east of East Fort Irontoe, overlooking one of the treacherous mountain passes. Perhaps he seeks to recruit the bugbears and kobolds to join an army of Rallos Zek!") +end + diff --git a/server/SpawnScripts/GreaterFaydark/PickleVelvetleaf.lua b/server/SpawnScripts/GreaterFaydark/PickleVelvetleaf.lua new file mode 100644 index 000000000..609d44bf9 --- /dev/null +++ b/server/SpawnScripts/GreaterFaydark/PickleVelvetleaf.lua @@ -0,0 +1,28 @@ +--[[ + Script Name : SpawnScripts/GreaterFaydark/PickleVelvetleaf.lua + Script Purpose : Pickle Velvetleaf + Script Author : John Adams + Script Date : 2009.03.01 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +function spawn(NPC) + SetPlayerProximityFunction(NPC, 10, "InRange", "LeaveRange") +end + +function respawn(NPC) + spawn(NPC) +end + +function InRange(NPC, Spawn) +end + +function LeaveRange(NPC, Spawn) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + + PlayFlavor(NPC, "", "Why couldn't I have been named after a flower?", "sigh", 1689589577, 4560189, Spawn) +end + diff --git a/server/SpawnScripts/GreaterFaydark/PirgettaMaarit.lua b/server/SpawnScripts/GreaterFaydark/PirgettaMaarit.lua new file mode 100644 index 000000000..059b07d5c --- /dev/null +++ b/server/SpawnScripts/GreaterFaydark/PirgettaMaarit.lua @@ -0,0 +1,37 @@ +--[[ + Script Name : SpawnScripts/GreaterFaydark/PirgettaMaarit.lua + Script Purpose : Pirgetta Maarit + Script Author : John Adams + Script Date : 2009.03.01 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +function spawn(NPC) + SetPlayerProximityFunction(NPC, 10, "InRange", "LeaveRange") +end + +function respawn(NPC) + spawn(NPC) +end + +function InRange(NPC, Spawn) +end + +function LeaveRange(NPC, Spawn) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_1_1004.mp3", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "I'll work towards that end then.", "dlg_80_1") + StartConversation(conversation, NPC, Spawn, "I'm sorry, until you have chosen a specialty in your craft I do not have any work orders for you. Come see me when you're more practiced in your trade.") + if convo==81 then + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_2_1004.mp3", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "I'll work towards that end then.", "dlg_81_1") + StartConversation(conversation, NPC, Spawn, "I'm sorry, until you have chosen a specialty in your craft I do not have any work orders for you. Come see me when you're more practiced in your trade.") + end + +end + diff --git a/server/SpawnScripts/GreaterFaydark/PoggleFizzpop.lua b/server/SpawnScripts/GreaterFaydark/PoggleFizzpop.lua new file mode 100644 index 000000000..1ce4da807 --- /dev/null +++ b/server/SpawnScripts/GreaterFaydark/PoggleFizzpop.lua @@ -0,0 +1,52 @@ +--[[ + Script Name : SpawnScripts/GreaterFaydark/PoggleFizzpop.lua + Script Purpose : Poggle Fizzpop + Script Author : John Adams + Script Date : 2009.03.01 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +function spawn(NPC) + SetPlayerProximityFunction(NPC, 10, "InRange", "LeaveRange") +end + +function respawn(NPC) + spawn(NPC) +end + +function InRange(NPC, Spawn) +end + +function LeaveRange(NPC, Spawn) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + + choice = math.random(1,10) + + if choice == 1 then + PlayFlavor(NPC, "", "I must have crossed the springwire too close to the grindgasket. Well, I'll just have to try again. Don't worry Fido, we'll be rich soon enough.", "", 1689589577, 4560189, Spawn) + elseif choice == 2 then + PlayFlavor(NPC, "", "A little grinding here, a little mixing there...", "", 1689589577, 4560189, Spawn) + elseif choice == 3 then + PlayFlavor(NPC, "", "We're gonna be rich Fido!", "", 1689589577, 4560189, Spawn) + elseif choice == 4 then + PlayFlavor(NPC, "", "Fido! I think it's ready to go. We're gonna be rich!", "", 1689589577, 4560189, Spawn) + elseif choice == 5 then + PlayFlavor(NPC, "", "Well, here goes nothing!", "", 1689589577, 4560189, Spawn) + elseif choice == 6 then + PlayFlavor(NPC, "", "I can't believe it, it's working! We're rich Fido!", "", 1689589577, 4560189, Spawn) + elseif choice == 7 then + PlayFlavor(NPC, "", "Wait... what's happening!", "", 1689589577, 4560189, Spawn) + elseif choice == 8 then + PlayFlavor(NPC, "", "Nooooo!", "", 1689589577, 4560189, Spawn) + elseif choice == 9 then + PlayFlavor(NPC, "", "Fido, bring me that crankratchet over there. Thanks, good boy.", "", 1689589577, 4560189, Spawn) + elseif choice == 10 then + PlayFlavor(NPC, "", "I'm almost there!", "", 1689589577, 4560189, Spawn) + else + end + +end + diff --git a/server/SpawnScripts/GreaterFaydark/PrestonPepperpicker.lua b/server/SpawnScripts/GreaterFaydark/PrestonPepperpicker.lua new file mode 100644 index 000000000..ccd7bba2a --- /dev/null +++ b/server/SpawnScripts/GreaterFaydark/PrestonPepperpicker.lua @@ -0,0 +1,38 @@ +--[[ + Script Name : SpawnScripts/GreaterFaydark/PrestonPepperpicker.lua + Script Purpose : Preston Pepperpicker + Script Author : John Adams + Script Date : 2009.03.01 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +function spawn(NPC) + SetPlayerProximityFunction(NPC, 10, "InRange", "LeaveRange") +end + +function respawn(NPC) + spawn(NPC) +end + +function InRange(NPC, Spawn) +end + +function LeaveRange(NPC, Spawn) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "preston_pepperpicker/_exp03/deity/bristlebane/preston/preston001.mp3", "", "", 3088335751, 4271045047, Spawn) + StartConversation(conversation, NPC, Spawn, "Preston Pepperpicker's the name. I'm poised to appeal to your particular penchant for powerful peppers! Go on, please peruse!") +end + +function dlg_75_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "preston_pepperpicker/_exp03/deity/bristlebane/preston/preston001.mp3", "", "", 3088335751, 4271045047, Spawn) + StartConversation(conversation, NPC, Spawn, "Preston Pepperpicker's the name. I'm poised to appeal to your particular penchant for powerful peppers! Go on, please peruse!") +end + diff --git a/server/SpawnScripts/GreaterFaydark/PrincessSaphronia.lua b/server/SpawnScripts/GreaterFaydark/PrincessSaphronia.lua new file mode 100644 index 000000000..bc7ad1ea4 --- /dev/null +++ b/server/SpawnScripts/GreaterFaydark/PrincessSaphronia.lua @@ -0,0 +1,31 @@ +--[[ + Script Name : SpawnScripts/GreaterFaydark/PrincessSaphronia.lua + Script Purpose : Princess Saphronia + Script Author : John Adams + Script Date : 2009.03.01 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +function spawn(NPC) + SetPlayerProximityFunction(NPC, 10, "InRange", "LeaveRange") +end + +function respawn(NPC) + spawn(NPC) +end + +function InRange(NPC, Spawn) +end + +function LeaveRange(NPC, Spawn) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "princess_saphronia/_exp03/exp03_cty_kelethin/quest/qst_princess_saphronia/princess_saphronia002.mp3", "", "", 3619994345, 1485938345, Spawn) + AddConversationOption(conversation, "Uh... I think I'll be going now.", "dlg_72_1") + StartConversation(conversation, NPC, Spawn, "All of these outsiders coming in and out of doors and hailing everyone they see... like we aren't busy enough trying to clean up their mess! They'll only bring trouble to our city I tell you. I hope you don't favor their presence here. We didn't rebuild Kelethin only to see those people cause its destruction again.") +end + diff --git a/server/SpawnScripts/GreaterFaydark/ProfessorEbenezerCogsworthVI.lua b/server/SpawnScripts/GreaterFaydark/ProfessorEbenezerCogsworthVI.lua new file mode 100644 index 000000000..06ada4ff8 --- /dev/null +++ b/server/SpawnScripts/GreaterFaydark/ProfessorEbenezerCogsworthVI.lua @@ -0,0 +1,28 @@ +--[[ + Script Name : SpawnScripts/GreaterFaydark/ProfessorEbenezerCogsworthVI.lua + Script Purpose : Professor Ebenezer Cogsworth VI + Script Author : John Adams + Script Date : 2009.03.01 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +function spawn(NPC) + SetPlayerProximityFunction(NPC, 10, "InRange", "LeaveRange") +end + +function respawn(NPC) + spawn(NPC) +end + +function InRange(NPC, Spawn) +end + +function LeaveRange(NPC, Spawn) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + + PlayFlavor(NPC, "", "You look like you need help. Can I help you find something?", "", 1689589577, 4560189, Spawn) +end + diff --git a/server/SpawnScripts/GreaterFaydark/QueenAmree.lua b/server/SpawnScripts/GreaterFaydark/QueenAmree.lua new file mode 100644 index 000000000..072a629a5 --- /dev/null +++ b/server/SpawnScripts/GreaterFaydark/QueenAmree.lua @@ -0,0 +1,139 @@ +--[[ + Script Name : SpawnScripts/GreaterFaydark/QueenAmree.lua + Script Purpose : Queen Amree + Script Author : John Adams + Script Date : 2009.03.01 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +function spawn(NPC) + SetPlayerProximityFunction(NPC, 10, "InRange", "LeaveRange") +end + +function respawn(NPC) + spawn(NPC) +end + +function InRange(NPC, Spawn) +end + +function LeaveRange(NPC, Spawn) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_2_1005.mp3", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Yes, I have!", "dlg_0_1") + AddConversationOption(conversation, "I am on my way there now.") + StartConversation(conversation, NPC, Spawn, "Have you successfully slain the Grender?") + if convo==7 then + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_3_1005.mp3", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "I seek permission to hunt the Grender!", "dlg_7_1") + AddConversationOption(conversation, "Nothing at the moment, Your Majesty.") + StartConversation(conversation, NPC, Spawn, "Welcome to the Hall. What is it you seek?") + end + + if convo==71 then + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_2_1005.mp3", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Yes, Ma'am.", "dlg_71_1") + AddConversationOption(conversation, "No, Ma'am.") + StartConversation(conversation, NPC, Spawn, "Are you prepared for the citizenship ceremony, XXXXXXXX?") + end + +end + +function dlg_0_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Thank you, Ma'am!", "dlg_0_2") + StartConversation(conversation, NPC, Spawn, "Excellent! I've heard of you from my cousin, Lady Katri. She has been quite pleased with your progress.") +end + +function dlg_0_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "I don't know what to say!", "dlg_0_3") + StartConversation(conversation, NPC, Spawn, "She's so pleased, in fact, that she considers the completion of this deed sufficient to prove your spirit's awakening. .. GetName(Spawn) .. . you have successfully completed your Rite of Passage! Congratulations!") +end + +function dlg_0_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Thank you!", "dlg_0_4") + StartConversation(conversation, NPC, Spawn, "Your dedication to Kelethin has been admirable. Go now and receive your reward from Lady Katri. Good luck to you always, .. GetName(Spawn) .. . May Tunare bless you.") +end + +function dlg_7_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "I've heard them, too.", "dlg_7_2") + StartConversation(conversation, NPC, Spawn, "Ah, so you're the one who has proven its existence! You wouldn't believe some of the tales I've been hearing about it.") +end + +function dlg_7_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Thank you, Ma'am.", "dlg_7_3") + StartConversation(conversation, NPC, Spawn, "Kelethin is grateful for your assistance. This will be an excellent challenge for you. Go, then, and come see me when you have completed this task.") +end + +function dlg_71_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Yes, I have.", "dlg_71_2") + AddConversationOption(conversation, "I must think about it further.") + StartConversation(conversation, NPC, Spawn, "You have renounced your allegiance to the cities which have given you shelter, seeking to serve the city of Kelethin and to promote Growth throughout Norrath?") +end + +function dlg_71_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Yes, I have.", "dlg_71_3") + AddConversationOption(conversation, "I knew I was forgetting something.") + StartConversation(conversation, NPC, Spawn, "You have claimed all your worldly possessions from your old home and bank accounts, enabling you to put roots in your new community without longing for the old?") +end + +function dlg_71_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "I do.", "dlg_71_4") + AddConversationOption(conversation, "I need a moment to gather my thoughts!") + StartConversation(conversation, NPC, Spawn, "XXXXXXXX, your works have proven your commitment to Kelethin. Your services will enable us to continue our work towards the promotion and protection of Growth, both in Faydwer and abroad. Do you make known your commitment here, in the presence of myself and others, forsaking allegiance to all other cities in Norrath?") +end + +function dlg_71_4(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "I do.", "dlg_71_5") + StartConversation(conversation, NPC, Spawn, "Then so be it: you shall become a citizen of Kelethin, defender of the Fae of Kelethin and a guardian of the sacred powers of Growth. Do you solemnly affirm that you will fulfill your obligations to these principles without hesitation?") +end + +function dlg_71_5(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Thank you, Ma'am.", "dlg_71_6") + StartConversation(conversation, NPC, Spawn, "Welcome to Kelethin, .. GetName(Spawn) .. . I am very glad you will be one of us. You may seek out our local trainers if you have need of updating any training you received previously. Good luck, Leighlah.") +end + diff --git a/server/SpawnScripts/GreaterFaydark/RaimoHeinila.lua b/server/SpawnScripts/GreaterFaydark/RaimoHeinila.lua new file mode 100644 index 000000000..e0b187d48 --- /dev/null +++ b/server/SpawnScripts/GreaterFaydark/RaimoHeinila.lua @@ -0,0 +1,94 @@ +--[[ + Script Name : SpawnScripts/GreaterFaydark/RaimoHeinila.lua + Script Purpose : Raimo Heinila + Script Author : John Adams + Script Date : 2009.03.01 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +function spawn(NPC) + SetPlayerProximityFunction(NPC, 10, "InRange", "LeaveRange") +end + +function respawn(NPC) + spawn(NPC) +end + +function InRange(NPC, Spawn) +end + +function LeaveRange(NPC, Spawn) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + choice = math.random(1,3) + + if choice == 1 then + PlayFlavor(NPC, "voiceover/english/exp03_questvo/raimo_heinila/_exp03/exp03_cty_kelethin/ecology/pub_warrior_raimo_hail_2e22fc60.mp3", "Kelethin belongs to the Fae now.", "", 2984282599, 4013295687, Spawn) + elseif choice == 2 then + PlayFlavor(NPC, "voiceover/english/exp03_questvo/raimo_heinila/_exp03/exp03_cty_kelethin/ecology/pub_warrior_raimo_hail_2e3cf704.mp3", "Times were much simpler when I was younger. So much has changed since then!", "", 2710697396, 295720892, Spawn) + elseif choice == 3 then + PlayFlavor(NPC, "voiceover/english/exp03_questvo/raimo_heinila/_exp03/exp03_cty_kelethin/ecology/pub_warrior_raimo_hail_cf24d0e6.mp3", "I remember the old days...before the Outsiders arrived.", "", 1611261803, 2099858771, Spawn) + else + end + + PlayFlavor(NPC, "voiceover/english/exp03_questvo/raimo_heinila/_exp03/exp03_cty_kelethin/quest/qst_raimo_heinila/qst_raimo_heinila001.mp3", "", "", 1429033185, 3057559002, Spawn) + AddConversationOption(conversation, "I've started the Rite of Passage and...", "dlg_87_1") + AddConversationOption(conversation, "Sorry to bother you.") + StartConversation(conversation, NPC, Spawn, "Yes? What do you want?") +end + +function dlg_87_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/exp03_questvo/raimo_heinila/_exp03/exp03_cty_kelethin/quest/qst_raimo_heinila/qst_raimo_heinila002.mp3", "", "", 3640055551, 3826016721, Spawn) + AddConversationOption(conversation, "But Lyyti said to speak with you!", "dlg_87_2") + StartConversation(conversation, NPC, Spawn, "That gives you the right to interrupt me on my walk? It's bad enough that the Outsiders won't leave me in peace, but a young sprout like you should know better.") +end + +function dlg_87_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/exp03_questvo/raimo_heinila/_exp03/exp03_cty_kelethin/quest/qst_raimo_heinila/qst_raimo_heinila003.mp3", "", "", 1326667193, 2814659187, Spawn) + AddConversationOption(conversation, "What kind of mistakes?", "dlg_87_3") + StartConversation(conversation, NPC, Spawn, "And if Lyyti said to jump off one of the bridges, would you? The value in history, sprout, is that when you remember it, you can avoid making the same mistakes. I am still trying to learn that lesson.") +end + +function dlg_87_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/exp03_questvo/raimo_heinila/_exp03/exp03_cty_kelethin/quest/qst_raimo_heinila/qst_raimo_heinila004.mp3", "", "", 2298966137, 2453405549, Spawn) + AddConversationOption(conversation, "We could heal the treants...or cull them.", "dlg_87_4") + StartConversation(conversation, NPC, Spawn, "Mistakes in war and in peace! We should never have allowed the Outsiders to come to Kelethin. Huh! Look at the poor, diseased treants on Green Knoll -- they're dying of an Outsiders' disease. Before long, the disease will waste away treants throughout the Faydarks and who knows what else must suffer for that.") +end + +function dlg_87_4(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/exp03_questvo/raimo_heinila/_exp03/exp03_cty_kelethin/quest/qst_raimo_heinila/qst_raimo_heinila005.mp3", "", "", 3829827816, 2730687571, Spawn) + AddConversationOption(conversation, "Queen Amree says...", "dlg_87_5") + StartConversation(conversation, NPC, Spawn, "Our healing has proved useless against whatever plague the Outsiders have placed upon those defenseless treants. You're so eager to defend the Outsiders, you are free to clean up after them as well. Princess Saphronia is right. They'll bring nothing but death, as they always have.") +end + +function dlg_87_5(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/exp03_questvo/raimo_heinila/_exp03/exp03_cty_kelethin/quest/qst_raimo_heinila/qst_raimo_heinila006.mp3", "", "", 875120539, 3120603699, Spawn) + AddConversationOption(conversation, "I'm sorry to have bothered you.", "dlg_87_6") + StartConversation(conversation, NPC, Spawn, "Queen Amree's spirit comes from a different Ring entirely. You want to listen to happy stories, go see Hamnal Teolofin. Now, please, leave an old spirit in peace. Ugh. Mark my words -- we'll be sorry for the day the Outsiders arrived.") +end + +--[[ raw_conversations + PlayFlavor(NPC, "voiceover/english/exp03_questvo/raimo_heinila/_exp03/exp03_cty_kelethin/ecology/pub_warrior_raimo_hail_2e22fc60.mp3", "Kelethin belongs to the Fae now.", "", 2984282599, 4013295687, Spawn) + PlayFlavor(NPC, "voiceover/english/exp03_questvo/raimo_heinila/_exp03/exp03_cty_kelethin/ecology/pub_warrior_raimo_hail_cf24d0e6.mp3", "I remember the old days...before the Outsiders arrived.", "", 1611261803, 2099858771, Spawn) + PlayFlavor(NPC, "voiceover/english/exp03_questvo/raimo_heinila/_exp03/exp03_cty_kelethin/ecology/pub_warrior_raimo_hail_2e3cf704.mp3", "Times were much simpler when I was younger. So much has changed since then!", "", 2710697396, 295720892, Spawn) +--]] + diff --git a/server/SpawnScripts/GreaterFaydark/RalikaMekkila.lua b/server/SpawnScripts/GreaterFaydark/RalikaMekkila.lua new file mode 100644 index 000000000..aa9090967 --- /dev/null +++ b/server/SpawnScripts/GreaterFaydark/RalikaMekkila.lua @@ -0,0 +1,41 @@ +--[[ + Script Name : SpawnScripts/GreaterFaydark/RalikaMekkila.lua + Script Purpose : Ralika Mekkila + Script Author : John Adams + Script Date : 2009.03.01 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +function spawn(NPC) + SetPlayerProximityFunction(NPC, 10, "InRange", "LeaveRange") +end + +function respawn(NPC) + spawn(NPC) +end + +function InRange(NPC, Spawn) +end + +function LeaveRange(NPC, Spawn) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Yes, please teach me.", "dlg_76_1") + AddConversationOption(conversation, "No, not at the moment.") + StartConversation(conversation, NPC, Spawn, "You show interest in the crafting trade, good. We can always use talented artisans. I can help you get started, would you be interested?") +end + +function dlg_76_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "I will start on that now.", "dlg_76_2") + StartConversation(conversation, NPC, Spawn, "There, you now have knowledge required to begin crafting. Speak to the Tradeskill Tutor for more detailed guidance on learning to craft, if you are interested in more information. Return to me when you are ready to select a crafting specialty.") +end + diff --git a/server/SpawnScripts/GreaterFaydark/RanduKvan.lua b/server/SpawnScripts/GreaterFaydark/RanduKvan.lua new file mode 100644 index 000000000..046d9690a --- /dev/null +++ b/server/SpawnScripts/GreaterFaydark/RanduKvan.lua @@ -0,0 +1,60 @@ +--[[ + Script Name : SpawnScripts/GreaterFaydark/RanduKvan.lua + Script Purpose : Randu K'van + Script Author : John Adams + Script Date : 2009.03.01 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +function spawn(NPC) + SetPlayerProximityFunction(NPC, 10, "InRange", "LeaveRange") +end + +function respawn(NPC) + spawn(NPC) +end + +function InRange(NPC, Spawn) +end + +function LeaveRange(NPC, Spawn) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "randu_k_van/_exp03/exp03_rgn_greater_faydark/randu_kvan/randu_001.mp3", "", "", 961418872, 1648740410, Spawn) + AddConversationOption(conversation, "And the sun should set on my shoulders.", "dlg_20_1") + AddConversationOption(conversation, "Excuse me.") + StartConversation(conversation, NPC, Spawn, "Even the bugs here are giant. Why must I endure this suffering, when I should be leading these blue orcs around pillaging the land?") +end + +function dlg_20_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "randu_k_van/_exp03/exp03_rgn_greater_faydark/randu_kvan/randu_002.mp3", "", "", 2731381489, 2263143427, Spawn) + AddConversationOption(conversation, "Your story is amusing, maybe you should do something about it.", "dlg_20_2") + StartConversation(conversation, NPC, Spawn, "You know at one time the orcs followed the rule of a Teir'Dal. But it seems in our years of absence they have forgotten who their true masters are.") +end + +function dlg_20_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "randu_k_van/_exp03/exp03_rgn_greater_faydark/randu_kvan/randu_003.mp3", "", "", 2679582233, 3793547301, Spawn) + AddConversationOption(conversation, "Sure, I will see what I can find.", "dlg_20_3") + AddConversationOption(conversation, "I don't feel like helping you today.") + StartConversation(conversation, NPC, Spawn, "We must remedy this. Find out for me what they are up to. Having information is the key to success, so bring it to me. Any information you may find on them. Are you up to the task?") +end + +function dlg_20_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "randu_k_van/_exp03/exp03_rgn_greater_faydark/randu_kvan/randu_004.mp3", "", "", 4004780597, 2871106835, Spawn) + AddConversationOption(conversation, "Why thank you.", "dlg_20_4") + StartConversation(conversation, NPC, Spawn, "Tell me of their plans. If you happen to have to interrogate any Crushbone centurions, you have my blessing for using deadly force.") +end + diff --git a/server/SpawnScripts/GreaterFaydark/RelcTulin.lua b/server/SpawnScripts/GreaterFaydark/RelcTulin.lua new file mode 100644 index 000000000..860ae6c06 --- /dev/null +++ b/server/SpawnScripts/GreaterFaydark/RelcTulin.lua @@ -0,0 +1,78 @@ +--[[ + Script Name : SpawnScripts/GreaterFaydark/RelcTulin.lua + Script Purpose : Relc Tulin + Script Author : John Adams + Script Date : 2009.03.01 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +function spawn(NPC) + SetPlayerProximityFunction(NPC, 10, "InRange", "LeaveRange") +end + +function respawn(NPC) + spawn(NPC) +end + +function InRange(NPC, Spawn) +end + +function LeaveRange(NPC, Spawn) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_3_1006.mp3", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "I would like the writ: Saplings", "dlg_1_1") + AddConversationOption(conversation, "I would like the writ: Frenzied Virosinoids") + AddConversationOption(conversation, "I will return to aid you, later.") + StartConversation(conversation, NPC, Spawn, "Rest easy here in the House of Falling Stars, .. GetName(Spawn) .. . However, if you are willing, we could really use your help.") + if convo==9 then + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_2_1006.mp3", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "I would like the writ: Saplings", "dlg_9_1") + AddConversationOption(conversation, "I would like the writ: Frenzied Virosinoids") + AddConversationOption(conversation, "I would like the writ: Crushbone Trainers") + AddConversationOption(conversation, "I will return to aid you, later.") + StartConversation(conversation, NPC, Spawn, "Rest easy here in the House of Falling Stars, .. GetName(Spawn) .. . However, if you are willing, we could really use your help.") + end + + if convo==10 then + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_2_1006.mp3", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "I would like the writ: Saplings", "dlg_10_1") + AddConversationOption(conversation, "I would like the writ: Frenzied Virosinoids") + AddConversationOption(conversation, "I would like the writ: Crushbone Trainers") + AddConversationOption(conversation, "I will return to aid you, later.") + StartConversation(conversation, NPC, Spawn, "Rest easy here in the House of Falling Stars, .. GetName(Spawn) .. . However, if you are willing, we could really use your help.") + end + + if convo==11 then + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_1_1006.mp3", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "I would like the writ: Saplings", "dlg_11_1") + AddConversationOption(conversation, "I would like the writ: Frenzied Virosinoids") + AddConversationOption(conversation, "I would like the writ: Crushbone Trainers") + AddConversationOption(conversation, "I will return to aid you, later.") + StartConversation(conversation, NPC, Spawn, "Rest easy here in the House of Falling Stars, .. GetName(Spawn) .. . However, if you are willing, we could really use your help.") + end + + if convo==12 then + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_1_1006.mp3", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "I would like the writ: Saplings", "dlg_12_1") + AddConversationOption(conversation, "I would like the writ: Frenzied Virosinoids") + AddConversationOption(conversation, "I would like the writ: Crushbone Trainers") + AddConversationOption(conversation, "I will return to aid you, later.") + StartConversation(conversation, NPC, Spawn, "Rest easy here in the House of Falling Stars, .. GetName(Spawn) .. . However, if you are willing, we could really use your help.") + end + +end + +function dlg_12_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Thank you, I'll get started right away.", "dlg_12_2") + StartConversation(conversation, NPC, Spawn, "The House of Falling Stars would like for you to eliminate angry saplings to further our cause. Doing so will earn you favor with our organization.") +end + diff --git a/server/SpawnScripts/GreaterFaydark/RestauranteurBrizeylMyrika.lua b/server/SpawnScripts/GreaterFaydark/RestauranteurBrizeylMyrika.lua new file mode 100644 index 000000000..add414e35 --- /dev/null +++ b/server/SpawnScripts/GreaterFaydark/RestauranteurBrizeylMyrika.lua @@ -0,0 +1,36 @@ +--[[ + Script Name : SpawnScripts/GreaterFaydark/RestauranteurBrizeylMyrika.lua + Script Purpose : Restauranteur Brizeyl Myrika + Script Author : John Adams + Script Date : 2009.03.01 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +function spawn(NPC) + SetPlayerProximityFunction(NPC, 10, "InRange", "LeaveRange") +end + +function respawn(NPC) + spawn(NPC) +end + +function InRange(NPC, Spawn) +end + +function LeaveRange(NPC, Spawn) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + + choice = math.random(1,2) + + if choice == 1 then + PlayFlavor(NPC, "voiceover/english/exp03_questvo/restauranteur_brizeyl_myrika/_exp03/exp03_cty_kelethin/merchants/baker_brizeyl_hail_36d424e1.mp3", "What can I get for you?", "", 881288795, 1873888107, Spawn) + elseif choice == 2 then + PlayFlavor(NPC, "voiceover/english/exp03_questvo/restauranteur_brizeyl_myrika/_exp03/exp03_cty_kelethin/merchants/baker_brizeyl_hail_47373be1.mp3", "Welcome to Joleena's Restaurant!", "", 2536223001, 3270976923, Spawn) + else + end + +end + diff --git a/server/SpawnScripts/GreaterFaydark/RooleeanFelodaan.lua b/server/SpawnScripts/GreaterFaydark/RooleeanFelodaan.lua new file mode 100644 index 000000000..972702dc4 --- /dev/null +++ b/server/SpawnScripts/GreaterFaydark/RooleeanFelodaan.lua @@ -0,0 +1,28 @@ +--[[ + Script Name : SpawnScripts/GreaterFaydark/RooleeanFelodaan.lua + Script Purpose : Rooleean Felodaan + Script Author : John Adams + Script Date : 2009.03.01 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +function spawn(NPC) + SetPlayerProximityFunction(NPC, 10, "InRange", "LeaveRange") +end + +function respawn(NPC) + spawn(NPC) +end + +function InRange(NPC, Spawn) +end + +function LeaveRange(NPC, Spawn) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + + PlayFlavor(NPC, "", "I'm sorry... do I know you? Please, back away from me, your armor stinks.", "sniff", 1689589577, 4560189, Spawn) +end + diff --git a/server/SpawnScripts/GreaterFaydark/SadeMaki.lua b/server/SpawnScripts/GreaterFaydark/SadeMaki.lua new file mode 100644 index 000000000..3dadc7ad0 --- /dev/null +++ b/server/SpawnScripts/GreaterFaydark/SadeMaki.lua @@ -0,0 +1,28 @@ +--[[ + Script Name : SpawnScripts/GreaterFaydark/SadeMaki.lua + Script Purpose : Sade Maki + Script Author : John Adams + Script Date : 2009.03.01 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +function spawn(NPC) + SetPlayerProximityFunction(NPC, 10, "InRange", "LeaveRange") +end + +function respawn(NPC) + spawn(NPC) +end + +function InRange(NPC, Spawn) +end + +function LeaveRange(NPC, Spawn) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + + PlayFlavor(NPC, "", "We've all the basic supplies that you'll ever need. Are you looking for anything specific?", "", 1689589577, 4560189, Spawn) +end + diff --git a/server/SpawnScripts/GreaterFaydark/SaelirVarryn.lua b/server/SpawnScripts/GreaterFaydark/SaelirVarryn.lua new file mode 100644 index 000000000..9e01c5477 --- /dev/null +++ b/server/SpawnScripts/GreaterFaydark/SaelirVarryn.lua @@ -0,0 +1,456 @@ +--[[ + Script Name : SpawnScripts/GreaterFaydark/SaelirVarryn.lua + Script Purpose : Saelir Varryn + Script Author : John Adams + Script Date : 2009.03.01 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +function spawn(NPC) + SetPlayerProximityFunction(NPC, 10, "InRange", "LeaveRange") +end + +function respawn(NPC) + spawn(NPC) +end + +function InRange(NPC, Spawn) +end + +function LeaveRange(NPC, Spawn) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_2_1006.mp3", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Yes, I have collected the materials.", "dlg_2_1") + StartConversation(conversation, NPC, Spawn, "Well? Did you collect all the materials?") + if convo==8 then + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_2_1006.mp3", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Yes, I have the declarations.", "dlg_8_1") + StartConversation(conversation, NPC, Spawn, "Did you manage to get the declarations?") + end + + if convo==14 then + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_2_1006.mp3", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "I have the Sul Spheres.", "dlg_14_1") + StartConversation(conversation, NPC, Spawn, "Hi, XXXXXXXX.") + end + + if convo==15 then + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_2_1006.mp3", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "I have the Sul Spheres.", "dlg_15_1") + StartConversation(conversation, NPC, Spawn, "Hi, XXXXXXXX.") + end + + if convo==104 then + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_1_1006.mp3", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Why do you say that?", "dlg_104_1") + AddConversationOption(conversation, "I must be going.") + StartConversation(conversation, NPC, Spawn, "Greetings. Enjoying your stroll? No, I don't suppose you would be.") + end + + if convo==105 then + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_3_1006.mp3", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Why do you say that?", "dlg_105_1") + AddConversationOption(conversation, "I must be going.") + StartConversation(conversation, NPC, Spawn, "Greetings. Enjoying your stroll? No, I don't suppose you would be.") + end + + if convo==106 then + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_3_1006.mp3", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Why do you say that?", "dlg_106_1") + AddConversationOption(conversation, "I must be going.") + StartConversation(conversation, NPC, Spawn, "Greetings. Enjoying your stroll? No, I don't suppose you would be.") + end + +end + +function dlg_2_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "What did you say?", "dlg_2_2") + StartConversation(conversation, NPC, Spawn, "Good. Unfortunately I was ejected from the Fae Royal court. They won't let me back in. I was, erm, a little rude once I got inside.") +end + +function dlg_2_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Fine. Where are they?", "dlg_2_3") + StartConversation(conversation, NPC, Spawn, "That's not important. Needless to say I feel dumb for having done it and they're not letting me back in there anytime soon. I need you to go get the declarations.") +end + +function dlg_2_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "... don't do what you did?", "dlg_2_4") + StartConversation(conversation, NPC, Spawn, "Somewhere in the Fae royal court. And don't...") +end + +function dlg_2_4(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "All right. I'll return.", "dlg_2_5") + StartConversation(conversation, NPC, Spawn, "Right. While you're doing that I'm going to research whose Sul Spheres I'd like to steal.") +end + +function dlg_8_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "You still haven't told me what your plan is.", "dlg_8_2") + StartConversation(conversation, NPC, Spawn, "Good work. Now we need only collect the Sul Spheres and we can act.") +end + +function dlg_8_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "They won't listen.", "dlg_8_3") + StartConversation(conversation, NPC, Spawn, "Well, like I said, I want to laugh at those who buy into this foolishness. What I'd like to do is break the Sul Spheres they hold so dear. I'd like to think that such an act would snap them into their senses, but I doubt that will happen. At the least, I will call out the emotion they will ooze forth at the destruction of an inanimate object.") +end + +function dlg_8_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "So what must we do?", "dlg_8_4") + StartConversation(conversation, NPC, Spawn, "It is the duty of an artist to be misunderstood, .. GetName(Spawn) .. . Some will see what I'm saying, and they'll know we're right. That is enough for me.") +end + +function dlg_8_4(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "And run?", "dlg_8_5") + StartConversation(conversation, NPC, Spawn, "Once we have the Sul Spheres we're going to sneak into Sammial's apartment at Aerie Kolmas. We've already acquired the components we'll need to use the machine. I've read up on the inner workings of it and know a way to overload its controls in such a way that we can destroy the Sul Spheres we place inside. Then we'll place the essay I've written, along with the Post-Mortem Declarations of Honor, near the machine for the guards to find.") +end + +function dlg_8_5(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "They will be pretty mad.", "dlg_8_6") + StartConversation(conversation, NPC, Spawn, "Yes, then we run. We don't want to get caught doing this, but we do want them to know it was us. We'll sign our names at the bottom of the essay. To show them how serious I am, I will be destroying my Great Uncle Saayes' Sul Sphere. My parents bought one despite my objections.") +end + +function dlg_8_6(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "I suppose. What do I need to do?", "dlg_8_7") + StartConversation(conversation, NPC, Spawn, "Well... I'll just get them another Sul Sphere, that seemed to do well enough to stifle their emotions when he died. And if they are mad, and embrace their anger, then I'll have done them a favor.") +end + +function dlg_8_7(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Okay.", "dlg_8_8") + StartConversation(conversation, NPC, Spawn, "Collect the Sul Spheres. I've taken care to find a number of Sul Spheres that were made for well known people, this way it won't just affect their immediate families. First, I'd like you to steal the Sul Sphere of Hiraen Aravirta. He was a poet of much renown. His Sul Sphere is kept by his son, Eljas. He is a scribe and can be found near the bank.") +end + +function dlg_8_8(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "All right.", "dlg_8_9") + StartConversation(conversation, NPC, Spawn, "Next, I'd like you to steal the Sul Sphere of The Greenlight. His true name has been lost, but his legend lives on--and his Sul Sphere is held by the Protector's of Growth, near Gearheart's Forge. Legend names him a great philanthropist, he has done a great deal for Kelethin.") +end + +function dlg_8_9(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Okay.", "dlg_8_10") + StartConversation(conversation, NPC, Spawn, "Then I'd like you to travel to the House of Falling Stars. They hold the Sul Sphere of Maayiri Ellia. She was one of Kelethin's first citizens and helped create policies and rules which are still followed to this day.") +end + +function dlg_8_10(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Okay.", "dlg_8_11") + StartConversation(conversation, NPC, Spawn, "Finally, I'd like you to collect the Sul Sphere of Jyoril Maarson. His love for Alaya Meriaan was legendary. Countless males from every generation following his have tried in vain to reuse his poetry to woo women of their own, but none could ever match the eloquence of Jyoril the Warrior-Poet. He was slain in combat with orcs before he and Alaya could ever marry. His Sul Sphere is now held by Alaya's daughter, Bettina Meriaan.") +end + +function dlg_8_11(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "I will return.", "dlg_8_12") + StartConversation(conversation, NPC, Spawn, "Once you have collected all the Sul Spheres return to me. I will have written the essay and acquired my great uncle's Sul Sphere. Then we can move.") +end + +function dlg_14_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "What is it?", "dlg_14_2") + StartConversation(conversation, NPC, Spawn, "I... yes.") +end + +function dlg_14_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Are you chickening out on me?", "dlg_14_3") + StartConversation(conversation, NPC, Spawn, "There was a portrait of my great uncle next to his Sul Sphere. I had forgotten what he looked like.") +end + +function dlg_14_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Why not?", "dlg_14_4") + StartConversation(conversation, NPC, Spawn, "No! I... I just. I don't know. I don't think I can go through with this.") +end + +function dlg_14_4(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Yes, I know exactly what you mean. You're giving up!", "dlg_14_5") + AddConversationOption(conversation, "I think I do know what you mean. It's not like--") + StartConversation(conversation, NPC, Spawn, "It's so... I mean yeah, I think it's silly to purchase a globe to remind ourselves of our loved ones, but who am I to tell an entire city that what they're doing is wrong? This was MY great uncle, .. GetName(Spawn) .. . I didn't think doing something like this would affect me, but I don't think I can destroy his Sul Sphere. I can't explain it, but maybe you know what I mean.") +end + +function dlg_14_5(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "But we didn't go through with it, that's the important part.") + StartConversation(conversation, NPC, Spawn, "It's not like having these stones around is actually hurting anybody. Sure, it may be a little sad, but I don't think it's unhealthy. We almost did a horrible thing.") +end + +function dlg_14_6(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "It's all right. Have a nice day, Saelir.", "dlg_14_7") + StartConversation(conversation, NPC, Spawn, "I agree. Here, I'll take these Sul Stones back to their proper owners. I'm sorry to have gotten you mixed up in this, XXXXXXXX.") +end + +function dlg_14_7(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Goodbye.", "dlg_14_8") + StartConversation(conversation, NPC, Spawn, "You too, .. GetName(Spawn) .. . Thank you.") +end + +function dlg_104_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Yeah, I think I do. It's like they don't trust me to be as good as they are.", "dlg_104_2") + AddConversationOption(conversation, "What do you mean?") + AddConversationOption(conversation, "No, I don't feel it.") + StartConversation(conversation, NPC, Spawn, "How can anyone enjoy it here? This city is stifling. Don't you feel it?") +end + +function dlg_104_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "I get that feeling too. It's like they don't trust me to be as good as they are.") + AddConversationOption(conversation, "Their experience is quite valuable. You should be thankful they care enough about you to keep trying despite your attitude.", "dlg_104_3") + StartConversation(conversation, NPC, Spawn, "What do I mean? It's horrid living here. Have you ever met so many people who all have something to say about how you should be living your life? About what good you should be doing? About what evil you should be thwarting? I... well I realize that their intentions are good, but you cannot force choices upon someone. I feel as if I'm... I feel like I am not trusted to make a correct decision on my own.") +end + +function dlg_104_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Good luck finding yourself, Saelir.") + StartConversation(conversation, NPC, Spawn, "Oh... so you ARE one of them. I'm through talking with you.") +end + +function dlg_105_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Yeah, I think I do. It's like they don't trust me to be as good as they are.", "dlg_105_2") + AddConversationOption(conversation, "What do you mean?") + AddConversationOption(conversation, "No, I don't feel it.") + StartConversation(conversation, NPC, Spawn, "How can anyone enjoy it here? This city is stifling. Don't you feel it?") +end + +function dlg_105_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Yes.", "dlg_105_3") + AddConversationOption(conversation, "I guess, but they probably just have our best interests in mind. I'm sure they aren't intentionally being disrespectful.") + StartConversation(conversation, NPC, Spawn, "Yes! It is so disrespectful, don't you think?") +end + +function dlg_105_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Good luck finding yourself, Saelir.") + StartConversation(conversation, NPC, Spawn, "Oh... so you ARE one of them. I'm through talking with you.") +end + +function dlg_106_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Yeah, I think I do. It's like they don't trust me to be as good as they are.", "dlg_106_2") + AddConversationOption(conversation, "What do you mean?") + AddConversationOption(conversation, "No, I don't feel it.") + StartConversation(conversation, NPC, Spawn, "How can anyone enjoy it here? This city is stifling. Don't you feel it?") +end + +function dlg_106_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "I get that feeling too. It's like they don't trust me to be as good as they are.") + AddConversationOption(conversation, "Their experience is quite valuable. You should be thankful they care enough about you to keep trying despite your attitude.", "dlg_106_3") + StartConversation(conversation, NPC, Spawn, "What do I mean? It's horrid living here. Have you ever met so many people who all have something to say about how you should be living your life? About what good you should be doing? About what evil you should be thwarting? I... well I realize that their intentions are good, but you cannot force choices upon someone. I feel as if I'm... I feel like I am not trusted to make a correct decision on my own.") +end + +function dlg_106_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Yes.", "dlg_106_4") + AddConversationOption(conversation, "I guess, but they probably just have our best interests in mind. I'm sure they aren't intentionally being disrespectful.") + StartConversation(conversation, NPC, Spawn, "Yes! It is so disrespectful, don't you think?") +end + +function dlg_106_4(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "How were you going to do that?", "dlg_106_5") + StartConversation(conversation, NPC, Spawn, "Ah. It's so refreshing to finally meet someone who agrees. Everyone else frowns at me and tells me I'm unpatriotic. One even had the nerve to ask me where my parents were! I swear, one day I'm going to show them all!") +end + +function dlg_106_5(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Well, maybe I'd like to show them all as well.", "dlg_106_6") + StartConversation(conversation, NPC, Spawn, "Well... I have my plans. I don't see why that would matter to you though.") +end + +function dlg_106_6(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "I'm in.", "dlg_106_7") + StartConversation(conversation, NPC, Spawn, "Heh... yeah. Yeah... All right, we can do this together, partner. And when all is said and done, we'll leave Kelethin behind and strike out on our own, eh?") +end + +function dlg_106_7(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "What do you mean?", "dlg_106_8") + StartConversation(conversation, NPC, Spawn, "Great. So here's my plan. They always insult my lack of experience. I haven't seen the world as they have, and as such am naive and make foolish decisions. Well, I'd like to poke fun at the foolishness they adhere to. Despite their 'enlightened' and 'experienced tempered' view on life, they still hold to pointlessly impractical rituals.") +end + +function dlg_106_8(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "No, who is he?", "dlg_106_9") + AddConversationOption(conversation, "Yeah, I know his work.") + AddConversationOption(conversation, "Does it matter?") + StartConversation(conversation, NPC, Spawn, "Have you ever heard of Sammial Geravius?") +end + +function dlg_106_9(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "What's a Sul Sphere?", "dlg_106_10") + StartConversation(conversation, NPC, Spawn, "He's an artist. A gnome. He's lived in Kelethin all his life. He... well, he's got technical talent, I won't argue that, but his work is so disgustingly sentimental. His work is specifically made to remind people of what makes them sad, and because of that he earns praise. All he's doing is exploiting emotions. His latest atrocity is something he calls Sul Spheres.") +end + +function dlg_106_10(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "So what do you want to do about it?", "dlg_106_11") + StartConversation(conversation, NPC, Spawn, "A glass sphere that he fills with dyes and magicks. Sure, it's pretty to look at, but he claims to somehow capture the essence of a relative that's passed on and imbue it into the sphere. The only reason people buy them is because they feel bad for having lost a loved one and believe that this will fill the void. They believe that because this is what he tells them. 'Keep their memory close with a Sul Sphere,' I've heard him say. It's exploitive.") +end + +function dlg_106_11(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "What are the components?", "dlg_106_12") + StartConversation(conversation, NPC, Spawn, "I want to laugh in the face of everyone who buys into this pretentious junk. If I'm the naive one, then why are they the ones who are spending their valuable gold on a glass ball with color inside? Because they're fools. I am going to sneak into the Fae Royal Court to steal some Post Mortem Declarations of Honor, I think that will help with my message. Deeds are real, globes are... globes. While I do that I'd like you to gather some of the components necessary to work Sammial's machine that creates the Sul Spheres.") +end + +function dlg_106_12(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "All right, I'll gather them.", "dlg_106_13") + StartConversation(conversation, NPC, Spawn, "First you'll need a red-blooded and yellow-blooded mushroom from the forest floor near Tunare's Sapling Lift. You'll also need some purple berries, you can purchase those from Restauranteur Brizeyl Myrika over in Joleena's Restaurant. Finally you'll need a handful of seeds from the reedmace down on the Green Gnoll, just north west of the Fae Royal Court.") +end + +function dlg_106_13(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "All right.", "dlg_106_14") + StartConversation(conversation, NPC, Spawn, "Great. I'll meet you back here once I've stolen the declarations.") +end + +--[[ raw_conversations + PlayFlavor(NPC, "", "Greetings. Enjoy Kelethin, I suppose.", "", 1689589577, 4560189, Spawn) +--]] + diff --git a/server/SpawnScripts/GreaterFaydark/SannorVilika.lua b/server/SpawnScripts/GreaterFaydark/SannorVilika.lua new file mode 100644 index 000000000..045eb3020 --- /dev/null +++ b/server/SpawnScripts/GreaterFaydark/SannorVilika.lua @@ -0,0 +1,31 @@ +--[[ + Script Name : SpawnScripts/GreaterFaydark/SannorVilika.lua + Script Purpose : Sannor Vilika + Script Author : John Adams + Script Date : 2009.03.01 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +function spawn(NPC) + SetPlayerProximityFunction(NPC, 10, "InRange", "LeaveRange") +end + +function respawn(NPC) + spawn(NPC) +end + +function InRange(NPC, Spawn) +end + +function LeaveRange(NPC, Spawn) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_1_1004.mp3", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "I'll work towards that end then.", "dlg_79_1") + StartConversation(conversation, NPC, Spawn, "I'm sorry, until you have chosen a specialty in your craft I do not have any work orders for you. Come see me when you're more practiced in your trade.") +end + diff --git a/server/SpawnScripts/GreaterFaydark/SassirahFallenleaf.lua b/server/SpawnScripts/GreaterFaydark/SassirahFallenleaf.lua new file mode 100644 index 000000000..14f843b62 --- /dev/null +++ b/server/SpawnScripts/GreaterFaydark/SassirahFallenleaf.lua @@ -0,0 +1,28 @@ +--[[ + Script Name : SpawnScripts/GreaterFaydark/SassirahFallenleaf.lua + Script Purpose : Sassirah Fallenleaf + Script Author : John Adams + Script Date : 2009.03.01 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +function spawn(NPC) + SetPlayerProximityFunction(NPC, 10, "InRange", "LeaveRange") +end + +function respawn(NPC) + spawn(NPC) +end + +function InRange(NPC, Spawn) +end + +function LeaveRange(NPC, Spawn) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + + PlayFlavor(NPC, "", "Come see the latest!", "", 1689589577, 4560189, Spawn) +end + diff --git a/server/SpawnScripts/GreaterFaydark/ScoutSpelunkle.lua b/server/SpawnScripts/GreaterFaydark/ScoutSpelunkle.lua new file mode 100644 index 000000000..2e532ff05 --- /dev/null +++ b/server/SpawnScripts/GreaterFaydark/ScoutSpelunkle.lua @@ -0,0 +1,123 @@ +--[[ + Script Name : SpawnScripts/GreaterFaydark/ScoutSpelunkle.lua + Script Purpose : Scout Spelunkle + Script Author : John Adams + Script Date : 2009.02.05 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +function spawn(NPC) + SetPlayerProximityFunction(NPC, 10, "InRange", "LeaveRange") +end + +function respawn(NPC) + spawn(NPC) +end + +function InRange(NPC, Spawn) +end + +function LeaveRange(NPC, Spawn) + SpawnSet(NPC, "visual_state", "221") -- Start crouch_idle +end + +function hailed(NPC, Spawn) + + SpawnSet(NPC, "visual_state", "0") -- Stop crouch_idle + + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + -- when done with Queen, this is his standard response. + -- PlayFlavor(NPC, "voiceover/english/exp03_questvo2/scout_spelunkle/_exp03/exp03_rgn_greater_faydark/quest/scout_spelunkle_completed_a127dc51.mp3", "Good work with that shrumbler queen! You sure squashed her good!", "", 1471734703, 3961292565, Spawn) + + PlayFlavor(NPC, "voiceover/english/exp03_questvo2/scout_spelunkle/_exp03/exp03_rgn_greater_faydark/scout_spelunkle/scout_spelunkle001.mp3", "", "", 1120182218, 3612192920, Spawn) + AddConversationOption(conversation, "Captain Steelforge wanted to know if you were okay. You shouldn't go running off alone.", "dlg_4_1") + AddConversationOption(conversation, "I was just exploring, sorry.") + StartConversation(conversation, NPC, Spawn, "AAAAAHHHHH! Oh wait, yer not a grobin... What are you doin' scaring me like that!?") + + if convo==29 then + PlayFlavor(NPC, "voiceover/english/exp03_questvo2/scout_spelunkle/_exp03/exp03_rgn_greater_faydark/scout_spelunkle/scout_spelunkle001.mp3", "", "", 1120182218, 3612192920, Spawn) + AddConversationOption(conversation, "Captain Steelforge wanted to know if you were okay. You shouldn't go running off alone.", "dlg_29_1") + AddConversationOption(conversation, "I was just exploring, sorry.") + StartConversation(conversation, NPC, Spawn, "AAAAAHHHHH! Oh wait, yer not a grobin... What are you doin' scaring me like that!?") + end + +end + +function dlg_4_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/exp03_questvo2/scout_spelunkle/_exp03/exp03_rgn_greater_faydark/scout_spelunkle/scout_spelunkle002.mp3", "", "", 846928893, 15725150, Spawn) + AddConversationOption(conversation, "Have you discovered anything while you were down here?", "dlg_4_2") + AddConversationOption(conversation, "I see. Well, I'll be leaving, goodbye.") + StartConversation(conversation, NPC, Spawn, "Doh! I knew I forgot something... orders... I need to remember to get me orders first! Everything's okay here, I just really like my job as a Specialist Spelunker. Nothin' like crawlin' around in a dark, musty cave.") +end + +function dlg_4_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/exp03_questvo2/scout_spelunkle/_exp03/exp03_rgn_greater_faydark/scout_spelunkle/scout_spelunkle003.mp3", "", "", 4168182811, 2184104853, Spawn) + AddConversationOption(conversation, "They need to be stopped. What do you have planned?", "dlg_4_3") + StartConversation(conversation, NPC, Spawn, "I found where the grobins are gettin' their shrumbler eggs. They're keepin' a big shrumbler in a cave near the back... and boy, she's a big one! They scoop up the icky eggs she lays, put 'em in jars and then they carry 'em out of here. ") +end + +function dlg_4_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/exp03_questvo2/scout_spelunkle/_exp03/exp03_rgn_greater_faydark/scout_spelunkle/scout_spelunkle004.mp3", "", "", 4233413026, 410396832, Spawn) + AddConversationOption(conversation, "I'll do it.", "dlg_4_4") + AddConversationOption(conversation, "Forget it, I'm out of here.") + StartConversation(conversation, NPC, Spawn, "Me?! I'm not a sword swingin' or finger wigglin' type. I'm just an explorer! Maybe you can do it! You could get to the shrumbler queen you could take her out! ") +end + +function dlg_4_4(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/exp03_questvo2/scout_spelunkle/_exp03/exp03_rgn_greater_faydark/scout_spelunkle/scout_spelunkle005.mp3", "", "", 3135812044, 2119680514, Spawn) + AddConversationOption(conversation, "I understand.") + StartConversation(conversation, NPC, Spawn, "Good. All you have to do is eliminate the shrumbler queen. That'll stop the grobins from gettin those shrumbler eggs. Once you finish that, go back to the captain and let him know what happened.") +end + +function dlg_29_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/exp03_questvo2/scout_spelunkle/_exp03/exp03_rgn_greater_faydark/scout_spelunkle/scout_spelunkle002.mp3", "", "", 846928893, 15725150, Spawn) + AddConversationOption(conversation, "Have you discovered anything while you were down here?", "dlg_29_2") + AddConversationOption(conversation, "I see. Well, I'll be leaving, goodbye.") + StartConversation(conversation, NPC, Spawn, "Doh! I knew I forgot something... orders... I need to remember to get me orders first! Everything's okay here, I just really like my job as a Specialist Spelunker. Nothin' like crawlin' around in a dark, musty cave.") +end + +function dlg_29_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/exp03_questvo2/scout_spelunkle/_exp03/exp03_rgn_greater_faydark/scout_spelunkle/scout_spelunkle003.mp3", "", "", 4168182811, 2184104853, Spawn) + AddConversationOption(conversation, "They need to be stopped. What do you have planned?", "dlg_29_3") + StartConversation(conversation, NPC, Spawn, "I found where the grobins are gettin' their shrumbler eggs. They're keepin' a big shrumbler in a cave near the back... and boy, she's a big one! They scoop up the icky eggs she lays, put 'em in jars and then they carry 'em out of here. ") +end + +function dlg_29_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/exp03_questvo2/scout_spelunkle/_exp03/exp03_rgn_greater_faydark/scout_spelunkle/scout_spelunkle004.mp3", "", "", 4233413026, 410396832, Spawn) + AddConversationOption(conversation, "I'll do it.", "dlg_29_4") + AddConversationOption(conversation, "Forget it, I'm out of here.") + StartConversation(conversation, NPC, Spawn, "Me?! I'm not a sword swingin' or finger wigglin' type. I'm just an explorer! Maybe you can do it! You could get to the shrumbler queen you could take her out! ") +end + +function dlg_29_4(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/exp03_questvo2/scout_spelunkle/_exp03/exp03_rgn_greater_faydark/scout_spelunkle/scout_spelunkle005.mp3", "", "", 3135812044, 2119680514, Spawn) + AddConversationOption(conversation, "I understand.", "dlg_29_5") + StartConversation(conversation, NPC, Spawn, "Good. All you have to do is eliminate the shrumbler queen. That'll stop the grobins from gettin those shrumbler eggs. Once you finish that, go back to the captain and let him know what happened.") +end + diff --git a/server/SpawnScripts/GreaterFaydark/ScribeEljasAravirta.lua b/server/SpawnScripts/GreaterFaydark/ScribeEljasAravirta.lua new file mode 100644 index 000000000..4671ed3b8 --- /dev/null +++ b/server/SpawnScripts/GreaterFaydark/ScribeEljasAravirta.lua @@ -0,0 +1,36 @@ +--[[ + Script Name : SpawnScripts/GreaterFaydark/ScribeEljasAravirta.lua + Script Purpose : Scribe Eljas Aravirta + Script Author : John Adams + Script Date : 2009.03.01 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +function spawn(NPC) + SetPlayerProximityFunction(NPC, 10, "InRange", "LeaveRange") +end + +function respawn(NPC) + spawn(NPC) +end + +function InRange(NPC, Spawn) +end + +function LeaveRange(NPC, Spawn) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + + choice = math.random(1,2) + + if choice == 1 then + PlayFlavor(NPC, "", "Why hello there!", "", 1689589577, 4560189, Spawn) + elseif choice == 2 then + PlayFlavor(NPC, "", "Oh, hello! I'm sorry I didn't see you, how can I help you, friend?", "", 1689589577, 4560189, Spawn) + else + end + +end + diff --git a/server/SpawnScripts/GreaterFaydark/SentryTrillis.lua b/server/SpawnScripts/GreaterFaydark/SentryTrillis.lua new file mode 100644 index 000000000..74a3506bb --- /dev/null +++ b/server/SpawnScripts/GreaterFaydark/SentryTrillis.lua @@ -0,0 +1,82 @@ +--[[ + Script Name : SpawnScripts/GreaterFaydark/SentryTrillis.lua + Script Purpose : Sentry Trillis + Script Author : John Adams + Script Date : 2009.02.05 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +function spawn(NPC) + SetPlayerProximityFunction(NPC, 10, "InRange", "LeaveRange") + ProvidesQuest(NPC, 160) +end + +function respawn(NPC) + Spawn(NPC) +end + +function InRange(NPC, Spawn) + +end + +function LeaveRange(NPC, Spawn) + +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + + if HasCompletedQuest(Spawn, 137) then + if HasQuest(Spawn, 160) then + if GetQuestStep(Spawn, 160) == 1 then + -- quest not yet complete + Say(NPC, "Quest not complete yet", Spawn) + end + else + -- does not have Sentry Trellis' quest + SentryTrellisReport_dlg_2(NPC, Spawn) + end + else + -- completing Matron quest + MessageFromTheMatron(NPC, Spawn) + end +end + +function MessageFromTheMatron(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + PlayFlavor(NPC, "voiceover/english/exp03_questvo2/sentry_trillis/_exp03/exp03_rgn_greater_faydark/sentry_trillis/sentry_trillis000.mp3", "", "", 3549519021, 54059459, Spawn) + AddConversationOption(conversation, "The Matron of the Nursery has a message for you.", "SentryTrellisReport") + AddConversationOption(conversation, "Just admiring the view.") + StartConversation(conversation, NPC, Spawn, "Greetings, young one. What brings you to my post?") +end + +-- PlayFlavor(NPC, "voiceover/english/exp03_questvo2/sentry_trillis/_exp03/exp03_rgn_greater_faydark/quest/sentry_trillis_careful_a49efdc.mp3", "Be careful out there. The Faydark can be a very dangerous place.", "hello", 1238010868, 445756514, Spawn) + +function SentryTrellisReport(NPC, Spawn) + if HasQuest(Spawn, 137) then + SetStepComplete(Spawn, 137, 1) + end + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + PlayFlavor(NPC, "voiceover/english/exp03_questvo2/sentry_trillis/_exp03/exp03_rgn_greater_faydark/sentry_trillis/sentry_trillis001.mp3", "", "", 46388781, 2562325140, Spawn) + AddConversationOption(conversation, "Where did they go?", "SentryTrellisReport_dlg_2") + StartConversation(conversation, NPC, Spawn, "She does? Hmmm... she's worried about the grobins, but she should rest easy. I spotted where the grobins ran off to when you scared them away from the pond. I already alerted my friend, Captain Steelforge.") +end + +function SentryTrellisReport_dlg_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + PlayFlavor(NPC, "voiceover/english/exp03_questvo2/sentry_trillis/_exp03/exp03_rgn_greater_faydark/sentry_trillis/sentry_trillis002.mp3", "", "", 1624769357, 1800752258, Spawn) + AddConversationOption(conversation, "Sure. I can take the report for you.", "OfferQuest1") + AddConversationOption(conversation, "No thanks. I don't want to get involved in any caves.") + StartConversation(conversation, NPC, Spawn, "If you look west of here you might be able to make out the cave the grobins ran into. Captain Steelforge has been dispatched to investigate. If you want to help, you could take my report to him. ") +end + +function OfferQuest1(NPC, Spawn) + OfferQuest(NPC, Spawn, 160) +end + + diff --git a/server/SpawnScripts/GreaterFaydark/SirBaydenCauldthorn.lua b/server/SpawnScripts/GreaterFaydark/SirBaydenCauldthorn.lua new file mode 100644 index 000000000..1bdda03f7 --- /dev/null +++ b/server/SpawnScripts/GreaterFaydark/SirBaydenCauldthorn.lua @@ -0,0 +1,161 @@ +--[[ + Script Name : SpawnScripts/GreaterFaydark/SirBaydenCauldthorn.lua + Script Purpose : Sir Bayden Cauldthorn + Script Author : John Adams + Script Date : 2009.03.01 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +function spawn(NPC) + SetPlayerProximityFunction(NPC, 10, "InRange", "LeaveRange") +end + +function respawn(NPC) + spawn(NPC) +end + +function InRange(NPC, Spawn) +end + +function LeaveRange(NPC, Spawn) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_2_1034.mp3", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Who are you?", "dlg_35_1") + AddConversationOption(conversation, "Whose return are you talking about?") + AddConversationOption(conversation, "I wish to gain favor with Mithaniel Marr. What can I do?") + StartConversation(conversation, NPC, Spawn, "Greetings, adventurer. Remember to always hold to your courage and share it with your comrades. It will quicken His return.") +end + +function dlg_35_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "You sound pretty enthusiastic.") + StartConversation(conversation, NPC, Spawn, "He is the Defender of the Light, the Lightbringer, the God of Valor, Mithaniel Marr. It is through him that the courageous warriors of good will fight back the evils that threaten us in these shattered times.") +end + +function dlg_35_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "You were sent to Qeynos?", "dlg_35_3") + AddConversationOption(conversation, "What is the Order of Marr?") + StartConversation(conversation, NPC, Spawn, "You'll have to excuse me if I do. I've been told I can be overzealous when speaking about my god, and on the battlefield. I believe that is why those few years ago I was sent by the elders of the Order of Marr to serve our Queen.") +end + +function dlg_35_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "So what about your title?") + AddConversationOption(conversation, "Thank you for speaking with me. Goodbye.", "dlg_35_4") + StartConversation(conversation, NPC, Spawn, "The Order of Marr works to preserve the ideals of the Marr twins, Valor and Love. We await the return of the Truthbringer and strive to hasten his coming by recovering important artifacts and knowledge that are sacred to the faithful of Mithaniel Marr. Through these means are we able to properly worship our lord. ") +end + +function dlg_35_4(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "That's impressive.", "dlg_35_5") + AddConversationOption(conversation, "Good luck with that. Goodbye.") + StartConversation(conversation, NPC, Spawn, "It was very recently that the elders of my order approached me with this calling. They explained to me that they all independently came to the conclusion that Lord Marr has chosen me as his voice at this time, I guess his prophet so to speak. ") +end + +function dlg_35_5(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "It sounds like you were chosen for a reason.", "dlg_35_6") + AddConversationOption(conversation, "I think you are right.") + StartConversation(conversation, NPC, Spawn, "I guess, but I'm not all too comfortable with it. I think I had the same impressions that the elders did, but I dismissed the thoughts. I still believe my place is out in the field, fighting back the evil that threatens all the shattered lands. Wouldn't a priest be more appropriate for this kind of thing?") +end + +function dlg_35_6(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Can you tell me more of the Truthbringer?", "dlg_35_7") + AddConversationOption(conversation, "Goodbye.") + StartConversation(conversation, NPC, Spawn, "You could be right. I wouldn't begin to claim I understand the grand scheme of the Truthbringer. I guess we shall have to let time tell us if the choice was right.") +end + +function dlg_35_7(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "You sound pretty enthusiastic.", "dlg_35_8") + StartConversation(conversation, NPC, Spawn, "He is the Defender of the Light, the Lightbringer, the God of Valor, Mithaniel Marr. It is through him that the courageous warriors of good will fight back the evils that threaten us in these shattered times.") +end + +function dlg_35_8(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "You were sent to Qeynos?", "dlg_35_9") + AddConversationOption(conversation, "What is the Order of Marr?") + StartConversation(conversation, NPC, Spawn, "You'll have to excuse me if I do. I've been told I can be overzealous when speaking about my god, and on the battlefield. I believe that is why those few years ago I was sent by the elders of the Order of Marr to serve our Queen.") +end + +function dlg_35_9(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "sir_bayden_cauldthorn/liveevents/exp03/marr_bayden010.mp3", "", "", 1989160172, 3091398690, Spawn) + AddConversationOption(conversation, "So you are oathbound to Qeynos?", "dlg_35_10") + AddConversationOption(conversation, "I see. Well, I have to go. Goodbye.") + StartConversation(conversation, NPC, Spawn, "Yes. Queen Antonia requested the help of the Order of Marr to assist in the efforts to establish Qeynos as a safe haven for all people. The elders determined I was better suited to defending Qeynos than the more subtle work that was being carried on in the Overlord's backyard. I think they were afraid I was going to take on the entire Freeport Militia myself one day. Hahaha. ") +end + +function dlg_35_10(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "What do you mean?", "dlg_35_11") + AddConversationOption(conversation, "I have to go now, Goodbye.") + StartConversation(conversation, NPC, Spawn, "I swore before Queen Antonia and her most trusted confidant, Murrar Shar, that I would serve her and protect her people with all of the Valor in Lord Marr's Halls of Honor. However, a matter of greater importance is upon us this day.") +end + +function dlg_35_11(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "That's impressive.", "dlg_35_12") + AddConversationOption(conversation, "Good luck with that. Goodbye.") + StartConversation(conversation, NPC, Spawn, "It was very recently that the elders of my order approached me with this calling. They explained to me that they all independently came to the conclusion that Lord Marr has chosen me as his voice at this time, I guess his prophet so to speak. ") +end + +function dlg_35_12(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "It sounds like you were chosen for a reason.", "dlg_35_13") + AddConversationOption(conversation, "I think you are right.") + StartConversation(conversation, NPC, Spawn, "I guess, but I'm not all too comfortable with it. I think I had the same impressions that the elders did, but I dismissed the thoughts. I still believe my place is out in the field, fighting back the evil that threatens all the shattered lands. Wouldn't a priest be more appropriate for this kind of thing?") +end + +function dlg_35_13(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Can you tell me more of the Truthbringer?", "dlg_35_14") + AddConversationOption(conversation, "Goodbye.") + StartConversation(conversation, NPC, Spawn, "You could be right. I wouldn't begin to claim I understand the grand scheme of the Truthbringer. I guess we shall have to let time tell us if the choice was right.") +end + diff --git a/server/SpawnScripts/GreaterFaydark/SuaAugren.lua b/server/SpawnScripts/GreaterFaydark/SuaAugren.lua new file mode 100644 index 000000000..f1c395eaf --- /dev/null +++ b/server/SpawnScripts/GreaterFaydark/SuaAugren.lua @@ -0,0 +1,141 @@ +--[[ + Script Name : SpawnScripts/GreaterFaydark/SuaAugren.lua + Script Purpose : Sua Augren + Script Author : John Adams + Script Date : 2009.03.01 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +function spawn(NPC) + SetPlayerProximityFunction(NPC, 10, "InRange", "LeaveRange") +end + +function respawn(NPC) + spawn(NPC) +end + +function InRange(NPC, Spawn) +end + +function LeaveRange(NPC, Spawn) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/exp03_questvo2/sua_augren/_exp03/exp03_rgn_greater_faydark/sua_augren/sua_augren001.mp3", "", "", 3127279058, 3080550258, Spawn) + AddConversationOption(conversation, "I understand, goodbye.", "dlg_6_1") + StartConversation(conversation, NPC, Spawn, "I'd love to chat but I've so much work to do.") + if convo==9 then + PlayFlavor(NPC, "voiceover/english/exp03_questvo2/sua_augren/_exp03/exp03_rgn_greater_faydark/sua_augren/sua_augren001.mp3", "", "", 3127279058, 3080550258, Spawn) + AddConversationOption(conversation, "Ami wants you to fix her coat. She broke the buttons... but wants you to know she didn't mean it.", "dlg_9_1") + AddConversationOption(conversation, "I understand, goodbye.") + StartConversation(conversation, NPC, Spawn, "I'd love to chat but I've so much work to do.") + end + + if convo==11 then + PlayFlavor(NPC, "voiceover/english/exp03_questvo2/sua_augren/_exp03/exp03_rgn_greater_faydark/sua_augren/sua_augren001.mp3", "", "", 3127279058, 3080550258, Spawn) + AddConversationOption(conversation, "Ami wants you to fix her coat. She broke the buttons... but wants you to know she didn't mean it.", "dlg_11_1") + AddConversationOption(conversation, "I understand, goodbye.") + StartConversation(conversation, NPC, Spawn, "I'd love to chat but I've so much work to do.") + end + +end + +function dlg_9_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/exp03_questvo2/sua_augren/_exp03/exp03_rgn_greater_faydark/sua_augren/sua_augren002.mp3", "", "", 1571651111, 2153698072, Spawn) + AddConversationOption(conversation, "What happened?", "dlg_9_2") + StartConversation(conversation, NPC, Spawn, "Oh, Ami... what am I going to do with you? Everything is such a crisis with her right now. This journey has been rough on her.") +end + +function dlg_9_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/exp03_questvo2/sua_augren/_exp03/exp03_rgn_greater_faydark/sua_augren/sua_augren003.mp3", "", "", 611419261, 1072752840, Spawn) + AddConversationOption(conversation, "Oh no.", "dlg_9_3") + StartConversation(conversation, NPC, Spawn, "My husband, daughter, and I used to live on the island of Mara. My husband wanted to leave the isle once all the outsiders began visiting our village, and he realized the world was a much bigger place. He paid for passage on a ship for all three of us, but the sailors on the ship were evil.") +end + +function dlg_9_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/exp03_questvo2/sua_augren/_exp03/exp03_rgn_greater_faydark/sua_augren/sua_augren004.mp3", "", "", 1417138229, 4170289581, Spawn) + AddConversationOption(conversation, "That's good. So why is Ami upset?", "dlg_9_4") + StartConversation(conversation, NPC, Spawn, "They took our money and dumped us on a nearby shore a few weeks ago. The captain even took my jewelry... that seawitch! But good fortune was on our side. The lovely fairy people here took us in. Now, my husband and I work to pull our own weight; I sew clothes for the new fae and he guards the city of Kelethin.") +end + +function dlg_9_4(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/exp03_questvo2/sua_augren/_exp03/exp03_rgn_greater_faydark/sua_augren/sua_augren005.mp3", "", "", 3498594905, 1976708, Spawn) + AddConversationOption(conversation, "I'll get the doll back for her.", "dlg_9_5") + AddConversationOption(conversation, "That's too bad. Goodbye.") + StartConversation(conversation, NPC, Spawn, "The ride across the ocean scared her, but worst of all she lost her favorite doll. When our things were unceremoniously thrown ashore, a large bee lady named Yellowjacket swooped in and snatched up Ami's doll.") +end + +function dlg_9_5(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/exp03_questvo2/sua_augren/_exp03/exp03_rgn_greater_faydark/sua_augren/sua_augren006.mp3", "", "", 2584537319, 806721000, Spawn) + AddConversationOption(conversation, "No problem. I'll get the doll for Ami.", "dlg_9_6") + StartConversation(conversation, NPC, Spawn, "I couldn't ask you to do that. It would be wonderful if Ami got her doll back, but it's too dangerous. ") +end + +function dlg_11_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/exp03_questvo2/sua_augren/_exp03/exp03_rgn_greater_faydark/sua_augren/sua_augren002.mp3", "", "", 1571651111, 2153698072, Spawn) + AddConversationOption(conversation, "What happened?", "dlg_11_2") + StartConversation(conversation, NPC, Spawn, "Oh, Ami... what am I going to do with you? Everything is such a crisis with her right now. This journey has been rough on her.") +end + +function dlg_11_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/exp03_questvo2/sua_augren/_exp03/exp03_rgn_greater_faydark/sua_augren/sua_augren003.mp3", "", "", 611419261, 1072752840, Spawn) + AddConversationOption(conversation, "Oh no.", "dlg_11_3") + StartConversation(conversation, NPC, Spawn, "My husband, daughter, and I used to live on the island of Mara. My husband wanted to leave the isle once all the outsiders began visiting our village, and he realized the world was a much bigger place. He paid for passage on a ship for all three of us, but the sailors on the ship were evil.") +end + +function dlg_11_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/exp03_questvo2/sua_augren/_exp03/exp03_rgn_greater_faydark/sua_augren/sua_augren004.mp3", "", "", 1417138229, 4170289581, Spawn) + AddConversationOption(conversation, "That's good. So why is Ami upset?", "dlg_11_4") + StartConversation(conversation, NPC, Spawn, "They took our money and dumped us on a nearby shore a few weeks ago. The captain even took my jewelry... that seawitch! But good fortune was on our side. The lovely fairy people here took us in. Now, my husband and I work to pull our own weight; I sew clothes for the new fae and he guards the city of Kelethin.") +end + +function dlg_11_4(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/exp03_questvo2/sua_augren/_exp03/exp03_rgn_greater_faydark/sua_augren/sua_augren005.mp3", "", "", 3498594905, 1976708, Spawn) + AddConversationOption(conversation, "I'll get the doll back for her.", "dlg_11_5") + AddConversationOption(conversation, "That's too bad. Goodbye.") + StartConversation(conversation, NPC, Spawn, "The ride across the ocean scared her, but worst of all she lost her favorite doll. When our things were unceremoniously thrown ashore, a large bee lady named Yellowjacket swooped in and snatched up Ami's doll.") +end + +function dlg_11_5(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/exp03_questvo2/sua_augren/_exp03/exp03_rgn_greater_faydark/sua_augren/sua_augren006.mp3", "", "", 2584537319, 806721000, Spawn) + AddConversationOption(conversation, "No problem. I'll get the doll for Ami.", "dlg_11_6") + StartConversation(conversation, NPC, Spawn, "I couldn't ask you to do that. It would be wonderful if Ami got her doll back, but it's too dangerous. ") +end + +--[[ raw_conversations + PlayFlavor(NPC, "voiceover/english/exp03_questvo2/sua_augren/_exp03/exp03_rgn_greater_faydark/quest/sua_augren_parent_completed_2c6d84eb.mp3", "Thank you for helping my daughter. You don't know how happy she is to have her doll back.", "thanks", 4098571631, 889694424, Spawn) +--]] + diff --git a/server/SpawnScripts/GreaterFaydark/SunnevaNepenthes.lua b/server/SpawnScripts/GreaterFaydark/SunnevaNepenthes.lua new file mode 100644 index 000000000..981e65354 --- /dev/null +++ b/server/SpawnScripts/GreaterFaydark/SunnevaNepenthes.lua @@ -0,0 +1,28 @@ +--[[ + Script Name : SpawnScripts/GreaterFaydark/SunnevaNepenthes.lua + Script Purpose : Sunneva Nepenthes + Script Author : John Adams + Script Date : 2009.03.01 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +function spawn(NPC) + SetPlayerProximityFunction(NPC, 10, "InRange", "LeaveRange") +end + +function respawn(NPC) + spawn(NPC) +end + +function InRange(NPC, Spawn) +end + +function LeaveRange(NPC, Spawn) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + + PlayFlavor(NPC, "", "Whoa! Watch your fingers! Goliath hasn't eaten all day.", "point", 1689589577, 4560189, Spawn) +end + diff --git a/server/SpawnScripts/GreaterFaydark/TheGrenderGuardian.lua b/server/SpawnScripts/GreaterFaydark/TheGrenderGuardian.lua new file mode 100644 index 000000000..4baae26a9 --- /dev/null +++ b/server/SpawnScripts/GreaterFaydark/TheGrenderGuardian.lua @@ -0,0 +1,28 @@ +--[[ + Script Name : SpawnScripts/GreaterFaydark/TheGrenderGuardian.lua + Script Purpose : The Grender Guardian + Script Author : John Adams + Script Date : 2009.03.01 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +function spawn(NPC) + SetPlayerProximityFunction(NPC, 10, "InRange", "LeaveRange") +end + +function respawn(NPC) + spawn(NPC) +end + +function InRange(NPC, Spawn) +end + +function LeaveRange(NPC, Spawn) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + + PlayFlavor(NPC, "", "Qrb Mstosbf mpxq tp qwgx Kf Ckihq", "", 1689589577, 4560189, Spawn) +end + diff --git a/server/SpawnScripts/GreaterFaydark/ThekelaGillywump.lua b/server/SpawnScripts/GreaterFaydark/ThekelaGillywump.lua new file mode 100644 index 000000000..535bb2aa6 --- /dev/null +++ b/server/SpawnScripts/GreaterFaydark/ThekelaGillywump.lua @@ -0,0 +1,58 @@ +--[[ + Script Name : SpawnScripts/GreaterFaydark/ThekelaGillywump.lua + Script Purpose : Thekela Gillywump + Script Author : John Adams + Script Date : 2009.03.01 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +function spawn(NPC) + SetPlayerProximityFunction(NPC, 10, "InRange", "LeaveRange") +end + +function respawn(NPC) + spawn(NPC) +end + +function InRange(NPC, Spawn) +end + +function LeaveRange(NPC, Spawn) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/exp03_questvo2/thekela_gillywump/_exp03/exp03_rgn_greater_faydark/scp/thekela/thekela000.mp3", "", "", 1458913689, 1852168109, Spawn) + AddConversationOption(conversation, "XXXXXXXX.", "dlg_33_1") + StartConversation(conversation, NPC, Spawn, "Greetings! I'm Thekela! What's your name?") +end + +function dlg_33_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/exp03_questvo2/thekela_gillywump/_exp03/exp03_rgn_greater_faydark/scp/thekela/thekela001.mp3", "", "", 2313264132, 2462849563, Spawn) + AddConversationOption(conversation, "What do you need?", "dlg_33_2") + StartConversation(conversation, NPC, Spawn, "It's a pleasure to meet you, .. GetName(Spawn) .. . Say, if you're going to be helping Jenthis out, how'd you like to gather some ingredients for my cooking?") +end + +function dlg_33_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/exp03_questvo2/thekela_gillywump/_exp03/exp03_rgn_greater_faydark/scp/thekela/thekela002.mp3", "", "", 3411928341, 3381720539, Spawn) + AddConversationOption(conversation, "Sure, I'll fetch some honey.", "dlg_33_3") + StartConversation(conversation, NPC, Spawn, "Lots of stuff. Normally, Brodo does the restocking for me, but he's been preoccupied lately and he really hasn't been much help. If you're willing, I could really use some honey. East of Memorial Hill--which overlooks Sapling Spur Outpost just to the east--the Growzzat bixies keep lots of honey. Would you be dear and fetch me some?") +end + +function dlg_33_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/exp03_questvo2/thekela_gillywump/_exp03/exp03_rgn_greater_faydark/scp/thekela/thekela003.mp3", "", "", 4020219974, 1441799321, Spawn) + AddConversationOption(conversation, "I'll be back.", "dlg_33_4") + StartConversation(conversation, NPC, Spawn, "Great! They store their honey on the trees in small hives. They shouldn't be too hard to find!") +end + diff --git a/server/SpawnScripts/GreaterFaydark/TraegerVerdegreen.lua b/server/SpawnScripts/GreaterFaydark/TraegerVerdegreen.lua new file mode 100644 index 000000000..028986b93 --- /dev/null +++ b/server/SpawnScripts/GreaterFaydark/TraegerVerdegreen.lua @@ -0,0 +1,36 @@ +--[[ + Script Name : SpawnScripts/GreaterFaydark/TraegerVerdegreen.lua + Script Purpose : Traeger Verdegreen + Script Author : John Adams + Script Date : 2009.03.01 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +function spawn(NPC) + SetPlayerProximityFunction(NPC, 10, "InRange", "LeaveRange") +end + +function respawn(NPC) + spawn(NPC) +end + +function InRange(NPC, Spawn) +end + +function LeaveRange(NPC, Spawn) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + + choice = math.random(1,2) + + if choice == 1 then + PlayFlavor(NPC, "voiceover/english/exp03_questvo/traeger_verdegreen/_exp03/exp03_cty_kelethin/quest/quest_wood_elf_01_hail_96c288a3.mp3", "The Fae have really made Kelethin what it is today.", "", 3187813743, 3153290793, Spawn) + elseif choice == 2 then + PlayFlavor(NPC, "voiceover/english/exp03_questvo/traeger_verdegreen/_exp03/exp03_cty_kelethin/quest/quest_wood_elf_01_hail_3fb4a76d.mp3", "There are so many Fae now.", "", 1959195557, 1316598135, Spawn) + else + end + +end + diff --git a/server/SpawnScripts/GreaterFaydark/TrainerArillaLarivaara.lua b/server/SpawnScripts/GreaterFaydark/TrainerArillaLarivaara.lua new file mode 100644 index 000000000..8aa855884 --- /dev/null +++ b/server/SpawnScripts/GreaterFaydark/TrainerArillaLarivaara.lua @@ -0,0 +1,577 @@ +--[[ + Script Name : SpawnScripts/GreaterFaydark/TrainerArillaLarivaara.lua + Script Purpose : Trainer Arilla Larivaara + Script Author : John Adams + Script Date : 2009.02.05 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +function spawn(NPC) + SetPlayerProximityFunction(NPC, 10, "InRange", "LeaveRange") +end + +function respawn(NPC) + spawn(NPC) +end + +function InRange(NPC, Spawn) +end + +function LeaveRange(NPC, Spawn) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/exp03_questvo/trainer_arilla_larivaara/_exp03/exp03_cty_kelethin/tutorials/qst_larivaara/qst_laarivaara007.mp3", "", "", 3148880847, 947148371, Spawn) + AddConversationOption(conversation, "Teach me the basics of combat.", "dlg_4_1") + AddConversationOption(conversation, "Teach me more advanced aspects of combat.") + AddConversationOption(conversation, "I'll come back later.") + StartConversation(conversation, NPC, Spawn, "Hello there, " .. GetName(Spawn) .. ". I'm here to teach folks the finer points of combat. I don't like to get into a fight, but if I do, I prefer to win. Know what I mean?") + if convo==5 then + PlayFlavor(NPC, "voiceover/english/exp03_questvo/trainer_arilla_larivaara/_exp03/exp03_cty_kelethin/tutorials/qst_larivaara/qst_laarivaara007.mp3", "", "", 3148880847, 947148371, Spawn) + AddConversationOption(conversation, "Teach me the basics of combat.", "dlg_5_1") + AddConversationOption(conversation, "Teach me more advanced aspects of combat.") + AddConversationOption(conversation, "I'll come back later.") + StartConversation(conversation, NPC, Spawn, "Hello there, " .. GetName(Spawn) .. ". I'm here to teach folks the finer points of combat. I don't like to get into a fight, but if I do, I prefer to win. Know what I mean?") + end + +end + +function dlg_4_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/exp03_questvo/trainer_arilla_larivaara/_exp03/exp03_cty_kelethin/tutorials/qst_larivaara/qst_laarivaara008.mp3", "", "", 2898686401, 1752530734, Spawn) + AddConversationOption(conversation, "Tell me how to begin a fight.", "dlg_4_2") + AddConversationOption(conversation, "Tell me about melee combat.") + AddConversationOption(conversation, "Tell me about ranged combat.") + AddConversationOption(conversation, "What kind of rewards can I earn in battle?") + AddConversationOption(conversation, "Teach me more advanced aspects of combat.") + AddConversationOption(conversation, "I'll come back later.") + StartConversation(conversation, NPC, Spawn, "There are many different elements that go into successful combat. I can teach you a few of the basics, such as how to begin a fight, the difference between melee and ranged combat, and earning rewards for victory.") +end + +function dlg_4_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/exp03_questvo/trainer_arilla_larivaara/_exp03/exp03_cty_kelethin/tutorials/qst_larivaara/qst_laarivaara009.mp3", "", "", 1613933242, 1197148922, Spawn) + AddConversationOption(conversation, "How do I begin the battle?", "dlg_4_3") + StartConversation(conversation, NPC, Spawn, "Starting combat is easy. Just use your mouse pointer to left-click on an opponent. Its name will appear in the Target window in the upper left of your screen. You can also use the Tab key to cycle through nearby targets or the F8 key to select your closest enemy.") +end + +function dlg_4_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/exp03_questvo/trainer_arilla_larivaara/_exp03/exp03_cty_kelethin/tutorials/qst_larivaara/qst_laarivaara010.mp3", "", "", 1755891240, 3796028834, Spawn) + AddConversationOption(conversation, "So I can fight anyone or anything I want?", "dlg_4_4") + StartConversation(conversation, NPC, Spawn, "If you're close enough to your foe and want to start hitting it with your weapon, either click your Melee Attack button on your hotbar or press the ~ key. Or you can begin by using one of your spells or combat arts to get the enemy's attention. Remember, you must be close enough to actually hit them.") +end + +function dlg_4_4(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/exp03_questvo/trainer_arilla_larivaara/_exp03/exp03_cty_kelethin/tutorials/qst_larivaara/qst_laarivaara011.mp3", "", "", 3723859553, 908527971, Spawn) + AddConversationOption(conversation, "Tell me about melee combat.", "dlg_4_5") + AddConversationOption(conversation, "Tell me about ranged combat.") + AddConversationOption(conversation, "What kind of rewards can I earn in battle?") + AddConversationOption(conversation, "Teach me more advanced aspects of combat.") + AddConversationOption(conversation, "I'll come back later.") + StartConversation(conversation, NPC, Spawn, "You can fight most non-player characters and creatures that you find outside your city, whether outdoors or in dungeons. Many non-player characters in the cities are there to help you or give quests, so you can't attack some of them. If you try, you'll get a message telling you that they aren't valid targets.") +end + +function dlg_4_5(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/exp03_questvo/trainer_arilla_larivaara/_exp03/exp03_cty_kelethin/tutorials/qst_larivaara/qst_laarivaara012.mp3", "", "", 3752439035, 2733336647, Spawn) + AddConversationOption(conversation, "What classes specialize in melee combat?", "dlg_4_6") + StartConversation(conversation, NPC, Spawn, "Melee combat means a toe-to-toe, physical confrontation. It is a combination of auto-attack damage that happens automatically when you press the Melee Attack button on your hotbar or the ~ key and spells or combat arts that you use in close proximity to your foe.") +end + +function dlg_4_6(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/exp03_questvo/trainer_arilla_larivaara/_exp03/exp03_cty_kelethin/tutorials/qst_larivaara/qst_laarivaara013.mp3", "", "", 1434116742, 4225387141, Spawn) + AddConversationOption(conversation, "Tell me how to begin a fight.", "dlg_4_7") + AddConversationOption(conversation, "Tell me about ranged combat.") + AddConversationOption(conversation, "What kind of rewards can I earn in battle?") + AddConversationOption(conversation, "Teach me more advanced aspects of combat.") + AddConversationOption(conversation, "I'll come back later.") + StartConversation(conversation, NPC, Spawn, "Sturdy fighters such as Guardians, Berserkers, Monks, and Paladins stand at the front lines of battle facing the enemy. Crafty scouts such as Swashbucklers, Rangers, Troubadors, and Dirges generally stay close to their foes as well, but prefer to launch attacks from the back or side where they are less likely to be counterattacked.") +end + +function dlg_4_7(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/exp03_questvo/trainer_arilla_larivaara/_exp03/exp03_cty_kelethin/tutorials/qst_larivaara/qst_laarivaara014.mp3", "", "", 3046408427, 2592738256, Spawn) + AddConversationOption(conversation, "How do I launch a ranged attack?") + StartConversation(conversation, NPC, Spawn, "Ranged combat means that you put some distance between yourself and the enemy. This can be done with weapons such as bows or throwing daggers, or with spells and arts that can be cast from a distance.") +end + +function dlg_4_8(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/exp03_questvo/trainer_arilla_larivaara/_exp03/exp03_cty_kelethin/tutorials/qst_larivaara/qst_laarivaara015.mp3", "", "", 3151700367, 2431538473, Spawn) + AddConversationOption(conversation, "What classes specialize in ranged combat?", "dlg_4_9") + StartConversation(conversation, NPC, Spawn, "If you have a ranged weapon and ammunition, you can initiate ranged combat by using the Ranged Attack button on the Abilities tab of your Knowledge Book. You can drag this key to your hotbar if you like. Remember, you must have a ranged weapon in the Ranged slot of your inventory window and the correct type of ammunition in the Ammo slot.") +end + +function dlg_4_9(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/exp03_questvo/trainer_arilla_larivaara/_exp03/exp03_cty_kelethin/tutorials/qst_larivaara/qst_laarivaara016.mp3", "", "", 1497976155, 2895560497, Spawn) + AddConversationOption(conversation, "How do I tell if I can use spells or arts from a distance?", "dlg_4_10") + StartConversation(conversation, NPC, Spawn, "While most classes have the ability to attack from a distance, scout classes such as Swashbucklers, Troubadors, Dirges, and particularly Rangers specialize in ranged physical attacks. Mages, priests, and Paladins have spells that do damage to their foes from a distance.") +end + +function dlg_4_10(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/exp03_questvo/trainer_arilla_larivaara/_exp03/exp03_cty_kelethin/tutorials/qst_larivaara/qst_laarivaara017.mp3", "", "", 893336149, 277723094, Spawn) + AddConversationOption(conversation, "Tell me how to begin a fight.", "dlg_4_11") + AddConversationOption(conversation, "Tell me about melee combat.") + AddConversationOption(conversation, "What kind of rewards can I earn in battle?") + AddConversationOption(conversation, "Teach me more advanced aspects of combat.") + AddConversationOption(conversation, "I'll come back later.") + StartConversation(conversation, NPC, Spawn, "You can right-click on a spell or art's icon and select 'Examine' to see what its range of effect is. In addition, if you target something and the icon for one of your spells or arts turns a dark red, that means the opponent is out of range of that ability.") +end + +function dlg_4_11(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/exp03_questvo/trainer_arilla_larivaara/_exp03/exp03_cty_kelethin/tutorials/qst_larivaara/qst_laarivaara012.mp3", "", "", 3752439035, 2733336647, Spawn) + AddConversationOption(conversation, "What classes specialize in melee combat?") + StartConversation(conversation, NPC, Spawn, "Melee combat means a toe-to-toe, physical confrontation. It is a combination of auto-attack damage that happens automatically when you press the Melee Attack button on your hotbar or the ~ key and spells or combat arts that you use in close proximity to your foe.") +end + +function dlg_4_12(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/exp03_questvo/trainer_arilla_larivaara/_exp03/exp03_cty_kelethin/tutorials/qst_larivaara/qst_laarivaara013.mp3", "", "", 1434116742, 4225387141, Spawn) + AddConversationOption(conversation, "Tell me how to begin a fight.", "dlg_4_13") + AddConversationOption(conversation, "Tell me about ranged combat.") + AddConversationOption(conversation, "What kind of rewards can I earn in battle?") + AddConversationOption(conversation, "Teach me more advanced aspects of combat.") + AddConversationOption(conversation, "I'll come back later.") + StartConversation(conversation, NPC, Spawn, "Sturdy fighters such as Guardians, Berserkers, Monks, and Paladins stand at the front lines of battle facing the enemy. Crafty scouts such as Swashbucklers, Rangers, Troubadors, and Dirges generally stay close to their foes as well, but prefer to launch attacks from the back or side where they are less likely to be counterattacked.") +end + +function dlg_4_13(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/exp03_questvo/trainer_arilla_larivaara/_exp03/exp03_cty_kelethin/tutorials/qst_larivaara/qst_laarivaara018.mp3", "", "", 2556228609, 3589317469, Spawn) + AddConversationOption(conversation, "What do you mean by 'a worthy opponent'?") + StartConversation(conversation, NPC, Spawn, "Victory in battle can be very rewarding. Successful combat against a worthy opponent awards you experience (XP) to help you advance your level, as well as the chance at coin, usable items, and other valuables.") +end + +function dlg_4_14(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/exp03_questvo/trainer_arilla_larivaara/_exp03/exp03_cty_kelethin/tutorials/qst_larivaara/qst_laarivaara019.mp3", "", "", 4159604095, 2208350646, Spawn) + AddConversationOption(conversation, "Are certain types of targets more rewarding than others?", "dlg_4_15") + StartConversation(conversation, NPC, Spawn, "You don't earn rewards for defeating foes that are too far below your level. If your target has a grey name, it means it is very weak and won't provide any benefit for beating it. Talk to Trainer Tahvolo Viljaan for more information on evaluating your opponents.") +end + +function dlg_4_15(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/exp03_questvo/trainer_arilla_larivaara/_exp03/exp03_cty_kelethin/tutorials/qst_larivaara/qst_laarivaara020.mp3", "", "", 3722520538, 550116332, Spawn) + AddConversationOption(conversation, "Tell me how to begin a fight.", "dlg_4_16") + AddConversationOption(conversation, "Tell me about melee combat.") + AddConversationOption(conversation, "Tell me about ranged combat.") + AddConversationOption(conversation, "Teach me more advanced aspects of combat.") + AddConversationOption(conversation, "I'll come back later.") + StartConversation(conversation, NPC, Spawn, "The tougher a foe, the better its chances to provide a valuable reward. Though defeating enemies alone provides nice rewards, defeating heroic enemies that require a group is even more rewarding. The very best items come from banding together multiple groups to defeat epic opponents.") +end + +function dlg_4_16(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/exp03_questvo/trainer_arilla_larivaara/_exp03/exp03_cty_kelethin/tutorials/qst_larivaara/qst_laarivaara021.mp3", "", "", 801103527, 2875309924, Spawn) + AddConversationOption(conversation, "Tell me about selecting the right opponent.") + AddConversationOption(conversation, "Teach me about knowing my surroundings.") + AddConversationOption(conversation, "Tell me about using my abilities.") + AddConversationOption(conversation, "Teach me the basics of combat.", "dlg_4_17") + AddConversationOption(conversation, "I'll come back later.") + StartConversation(conversation, NPC, Spawn, "There are many advanced combat techniques that you will learn over time. There's no substitute for experience, .. GetName(Spawn) .. . I'd be happy to discuss a few of these advanced aspects, such as selecting the right opponent, knowing your surroundings, and using your abilities.") +end + +function dlg_4_17(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/exp03_questvo/trainer_arilla_larivaara/_exp03/exp03_cty_kelethin/tutorials/qst_larivaara/qst_laarivaara022.mp3", "", "", 187572586, 450509917, Spawn) + AddConversationOption(conversation, "How do I tell if an opponent is too weak or too strong for me?", "dlg_4_18") + StartConversation(conversation, NPC, Spawn, "Picking the right fight is crucial to victory. A weak opponent won't provide worthwhile rewards, while an overly powerful foe will result in your defeat. You need to keep your resources in mind as well as choosing the right target.") +end + +function dlg_4_18(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/exp03_questvo/trainer_arilla_larivaara/_exp03/exp03_cty_kelethin/tutorials/qst_larivaara/qst_laarivaara023.mp3", "", "", 4040652289, 1699138117, Spawn) + AddConversationOption(conversation, "What resources should I be keeping an eye on?", "dlg_4_19") + StartConversation(conversation, NPC, Spawn, "Targeting an opponent will show you detailed information on its overall potency. Generally speaking, you'll find the best results from fighting opponents with blue, white, or yellow names. Talk to Trainer Tahvolo Viljaan for more information on evaluating your opponents.") +end + +function dlg_4_19(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/exp03_questvo/trainer_arilla_larivaara/_exp03/exp03_cty_kelethin/tutorials/qst_larivaara/qst_laarivaara024.mp3", "", "", 3598297774, 910017607, Spawn) + AddConversationOption(conversation, "Teach me about knowing my surroundings.", "dlg_4_20") + AddConversationOption(conversation, "Tell me about using my abilities.") + AddConversationOption(conversation, "Teach me the basics of combat.") + AddConversationOption(conversation, "I'll come back later.") + StartConversation(conversation, NPC, Spawn, "Starting a fight when you are low on health or power is a very bad idea. Your choice of targets also depends on whether you're alone or grouped with other players. Forming a group allows you to take on tougher and more rewarding challenges than you could face alone.") +end + +function dlg_4_20(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/exp03_questvo/trainer_arilla_larivaara/_exp03/exp03_cty_kelethin/tutorials/qst_larivaara/qst_laarivaara025.mp3", "", "", 302868023, 1058230652, Spawn) + AddConversationOption(conversation, "Anything else I should watch out for?", "dlg_4_21") + StartConversation(conversation, NPC, Spawn, "Keeping your surroundings in mind is crucial to victory. Fighting in areas with lots of aggressive creatures is a bad idea, because they won't hesitate to gang up on you.") +end + +function dlg_4_21(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/exp03_questvo/trainer_arilla_larivaara/_exp03/exp03_cty_kelethin/tutorials/qst_larivaara/qst_laarivaara026.mp3", "", "", 2395836258, 4167880022, Spawn) + AddConversationOption(conversation, "Any other tips?", "dlg_4_22") + StartConversation(conversation, NPC, Spawn, "Staying too long on the exact spot where you just defeated a foe can be dangerous. Another enemy is likely to show up there soon after, which can be an unpleasant surprise if you're already in another battle.") +end + +function dlg_4_22(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/exp03_questvo/trainer_arilla_larivaara/_exp03/exp03_cty_kelethin/tutorials/qst_larivaara/qst_laarivaara027.mp3", "", "", 3335927389, 418360840, Spawn) + AddConversationOption(conversation, "Tell me about selecting the right opponent.", "dlg_4_23") + AddConversationOption(conversation, "Tell me about using my abilities.") + AddConversationOption(conversation, "Teach me the basics of combat.") + AddConversationOption(conversation, "I'll come back later.") + StartConversation(conversation, NPC, Spawn, "You should be aware of what's going on around you. Using your mouse wheel to scroll out into third person and holding down the left mouse button allows you to move the camera around your character. It's a good idea to do this when fighting in dangerous areas to make sure nothing sneaks up on you.") +end + +function dlg_4_23(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/exp03_questvo/trainer_arilla_larivaara/_exp03/exp03_cty_kelethin/tutorials/qst_larivaara/qst_laarivaara028.mp3", "", "", 3915273076, 3111917162, Spawn) + AddConversationOption(conversation, "What do you mean?") + StartConversation(conversation, NPC, Spawn, "Successful fighting isn't about turning on your auto-attack and walking away from battle. Your odds of victory are much better if you are well-prepared and are active during combat. You should use every spell or combat art that has a positive effect on your chances to win.") +end + +function dlg_4_24(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/exp03_questvo/trainer_arilla_larivaara/_exp03/exp03_cty_kelethin/tutorials/qst_larivaara/qst_laarivaara029.mp3", "", "", 2179864552, 3125288554, Spawn) + AddConversationOption(conversation, "What about during battle?", "dlg_4_25") + StartConversation(conversation, NPC, Spawn, "Before you begin fighting, make sure you and your allies have activated all beneficial spells, also known as 'buffs,' so that you're operating at peak efficiency. Buffs can add health or power, increase your rate of regeneration, enhance your physical attributes, make you attack faster or do more damage, and more.") +end + +function dlg_4_25(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/exp03_questvo/trainer_arilla_larivaara/_exp03/exp03_cty_kelethin/tutorials/qst_larivaara/qst_laarivaara030.mp3", "", "", 2306274826, 3024519845, Spawn) + AddConversationOption(conversation, "What else should I know about spells and arts?", "dlg_4_26") + StartConversation(conversation, NPC, Spawn, "Whether you're a front-lines melee type or someone attacking from a distance with weapons or spells, you should be using abilities that damage your foes effectively and efficiently. Right click on your spells and arts and select 'Examine' to see details on their effects.") +end + +function dlg_4_26(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/exp03_questvo/trainer_arilla_larivaara/_exp03/exp03_cty_kelethin/tutorials/qst_larivaara/qst_laarivaara031.mp3", "", "", 2411688474, 2950057017, Spawn) + AddConversationOption(conversation, "Tell me about selecting the right opponent.", "dlg_4_27") + AddConversationOption(conversation, "Teach me about knowing my surroundings.") + AddConversationOption(conversation, "Teach me the basics of combat.") + AddConversationOption(conversation, "I'll come back later.") + StartConversation(conversation, NPC, Spawn, "Using your highest-level versions of spells and arts will be more effective than using older versions. In addition, you should be upgrading your abilities to higher ranks to make them more effective. For more details on spells and combat arts, talk to Trainer Valtteri Yliveri.") +end + +function dlg_5_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/exp03_questvo/trainer_arilla_larivaara/_exp03/exp03_cty_kelethin/tutorials/qst_larivaara/qst_laarivaara008.mp3", "", "", 2898686401, 1752530734, Spawn) + AddConversationOption(conversation, "Tell me how to begin a fight.", "dlg_5_2") + AddConversationOption(conversation, "Tell me about melee combat.") + AddConversationOption(conversation, "Tell me about ranged combat.") + AddConversationOption(conversation, "What kind of rewards can I earn in battle?") + AddConversationOption(conversation, "Teach me more advanced aspects of combat.") + AddConversationOption(conversation, "I'll come back later.") + StartConversation(conversation, NPC, Spawn, "There are many different elements that go into successful combat. I can teach you a few of the basics, such as how to begin a fight, the difference between melee and ranged combat, and earning rewards for victory.") +end + +function dlg_5_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/exp03_questvo/trainer_arilla_larivaara/_exp03/exp03_cty_kelethin/tutorials/qst_larivaara/qst_laarivaara009.mp3", "", "", 1613933242, 1197148922, Spawn) + AddConversationOption(conversation, "How do I begin the battle?", "dlg_5_3") + StartConversation(conversation, NPC, Spawn, "Starting combat is easy. Just use your mouse pointer to left-click on an opponent. Its name will appear in the Target window in the upper left of your screen. You can also use the Tab key to cycle through nearby targets or the F8 key to select your closest enemy.") +end + +function dlg_5_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/exp03_questvo/trainer_arilla_larivaara/_exp03/exp03_cty_kelethin/tutorials/qst_larivaara/qst_laarivaara010.mp3", "", "", 1755891240, 3796028834, Spawn) + AddConversationOption(conversation, "So I can fight anyone or anything I want?", "dlg_5_4") + StartConversation(conversation, NPC, Spawn, "If you're close enough to your foe and want to start hitting it with your weapon, either click your Melee Attack button on your hotbar or press the ~ key. Or you can begin by using one of your spells or combat arts to get the enemy's attention. Remember, you must be close enough to actually hit them.") +end + +function dlg_5_4(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/exp03_questvo/trainer_arilla_larivaara/_exp03/exp03_cty_kelethin/tutorials/qst_larivaara/qst_laarivaara011.mp3", "", "", 3723859553, 908527971, Spawn) + AddConversationOption(conversation, "Tell me about melee combat.", "dlg_5_5") + AddConversationOption(conversation, "Tell me about ranged combat.") + AddConversationOption(conversation, "What kind of rewards can I earn in battle?") + AddConversationOption(conversation, "Teach me more advanced aspects of combat.") + AddConversationOption(conversation, "I'll come back later.") + StartConversation(conversation, NPC, Spawn, "You can fight most non-player characters and creatures that you find outside your city, whether outdoors or in dungeons. Many non-player characters in the cities are there to help you or give quests, so you can't attack some of them. If you try, you'll get a message telling you that they aren't valid targets.") +end + +function dlg_5_5(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/exp03_questvo/trainer_arilla_larivaara/_exp03/exp03_cty_kelethin/tutorials/qst_larivaara/qst_laarivaara012.mp3", "", "", 3752439035, 2733336647, Spawn) + AddConversationOption(conversation, "What classes specialize in melee combat?", "dlg_5_6") + StartConversation(conversation, NPC, Spawn, "Melee combat means a toe-to-toe, physical confrontation. It is a combination of auto-attack damage that happens automatically when you press the Melee Attack button on your hotbar or the ~ key and spells or combat arts that you use in close proximity to your foe.") +end + +function dlg_5_6(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/exp03_questvo/trainer_arilla_larivaara/_exp03/exp03_cty_kelethin/tutorials/qst_larivaara/qst_laarivaara013.mp3", "", "", 1434116742, 4225387141, Spawn) + AddConversationOption(conversation, "Tell me how to begin a fight.", "dlg_5_7") + AddConversationOption(conversation, "Tell me about ranged combat.") + AddConversationOption(conversation, "What kind of rewards can I earn in battle?") + AddConversationOption(conversation, "Teach me more advanced aspects of combat.") + AddConversationOption(conversation, "I'll come back later.") + StartConversation(conversation, NPC, Spawn, "Sturdy fighters such as Guardians, Berserkers, Monks, and Paladins stand at the front lines of battle facing the enemy. Crafty scouts such as Swashbucklers, Rangers, Troubadors, and Dirges generally stay close to their foes as well, but prefer to launch attacks from the back or side where they are less likely to be counterattacked.") +end + +function dlg_5_7(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/exp03_questvo/trainer_arilla_larivaara/_exp03/exp03_cty_kelethin/tutorials/qst_larivaara/qst_laarivaara014.mp3", "", "", 3046408427, 2592738256, Spawn) + AddConversationOption(conversation, "How do I launch a ranged attack?") + StartConversation(conversation, NPC, Spawn, "Ranged combat means that you put some distance between yourself and the enemy. This can be done with weapons such as bows or throwing daggers, or with spells and arts that can be cast from a distance.") +end + +function dlg_5_8(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/exp03_questvo/trainer_arilla_larivaara/_exp03/exp03_cty_kelethin/tutorials/qst_larivaara/qst_laarivaara015.mp3", "", "", 3151700367, 2431538473, Spawn) + AddConversationOption(conversation, "What classes specialize in ranged combat?", "dlg_5_9") + StartConversation(conversation, NPC, Spawn, "If you have a ranged weapon and ammunition, you can initiate ranged combat by using the Ranged Attack button on the Abilities tab of your Knowledge Book. You can drag this key to your hotbar if you like. Remember, you must have a ranged weapon in the Ranged slot of your inventory window and the correct type of ammunition in the Ammo slot.") +end + +function dlg_5_9(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/exp03_questvo/trainer_arilla_larivaara/_exp03/exp03_cty_kelethin/tutorials/qst_larivaara/qst_laarivaara016.mp3", "", "", 1497976155, 2895560497, Spawn) + AddConversationOption(conversation, "How do I tell if I can use spells or arts from a distance?", "dlg_5_10") + StartConversation(conversation, NPC, Spawn, "While most classes have the ability to attack from a distance, scout classes such as Swashbucklers, Troubadors, Dirges, and particularly Rangers specialize in ranged physical attacks. Mages, priests, and Paladins have spells that do damage to their foes from a distance.") +end + +function dlg_5_10(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/exp03_questvo/trainer_arilla_larivaara/_exp03/exp03_cty_kelethin/tutorials/qst_larivaara/qst_laarivaara017.mp3", "", "", 893336149, 277723094, Spawn) + AddConversationOption(conversation, "Tell me how to begin a fight.", "dlg_5_11") + AddConversationOption(conversation, "Tell me about melee combat.") + AddConversationOption(conversation, "What kind of rewards can I earn in battle?") + AddConversationOption(conversation, "Teach me more advanced aspects of combat.") + AddConversationOption(conversation, "I'll come back later.") + StartConversation(conversation, NPC, Spawn, "You can right-click on a spell or art's icon and select 'Examine' to see what its range of effect is. In addition, if you target something and the icon for one of your spells or arts turns a dark red, that means the opponent is out of range of that ability.") +end + +function dlg_5_11(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/exp03_questvo/trainer_arilla_larivaara/_exp03/exp03_cty_kelethin/tutorials/qst_larivaara/qst_laarivaara018.mp3", "", "", 2556228609, 3589317469, Spawn) + AddConversationOption(conversation, "What do you mean by 'a worthy opponent'?") + StartConversation(conversation, NPC, Spawn, "Victory in battle can be very rewarding. Successful combat against a worthy opponent awards you experience (XP) to help you advance your level, as well as the chance at coin, usable items, and other valuables.") +end + +function dlg_5_12(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/exp03_questvo/trainer_arilla_larivaara/_exp03/exp03_cty_kelethin/tutorials/qst_larivaara/qst_laarivaara019.mp3", "", "", 4159604095, 2208350646, Spawn) + AddConversationOption(conversation, "Are certain types of targets more rewarding than others?", "dlg_5_13") + StartConversation(conversation, NPC, Spawn, "You don't earn rewards for defeating foes that are too far below your level. If your target has a grey name, it means it is very weak and won't provide any benefit for beating it. Talk to Trainer Tahvolo Viljaan for more information on evaluating your opponents.") +end + +function dlg_5_13(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/exp03_questvo/trainer_arilla_larivaara/_exp03/exp03_cty_kelethin/tutorials/qst_larivaara/qst_laarivaara020.mp3", "", "", 3722520538, 550116332, Spawn) + AddConversationOption(conversation, "Tell me how to begin a fight.", "dlg_5_14") + AddConversationOption(conversation, "Tell me about melee combat.") + AddConversationOption(conversation, "Tell me about ranged combat.") + AddConversationOption(conversation, "Teach me more advanced aspects of combat.") + AddConversationOption(conversation, "I'll come back later.") + StartConversation(conversation, NPC, Spawn, "The tougher a foe, the better its chances to provide a valuable reward. Though defeating enemies alone provides nice rewards, defeating heroic enemies that require a group is even more rewarding. The very best items come from banding together multiple groups to defeat epic opponents.") +end + +function dlg_5_14(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/exp03_questvo/trainer_arilla_larivaara/_exp03/exp03_cty_kelethin/tutorials/qst_larivaara/qst_laarivaara021.mp3", "", "", 801103527, 2875309924, Spawn) + AddConversationOption(conversation, "Tell me about selecting the right opponent.") + AddConversationOption(conversation, "Teach me about knowing my surroundings.") + AddConversationOption(conversation, "Tell me about using my abilities.") + AddConversationOption(conversation, "Teach me the basics of combat.", "dlg_5_15") + AddConversationOption(conversation, "I'll come back later.") + StartConversation(conversation, NPC, Spawn, "There are many advanced combat techniques that you will learn over time. There's no substitute for experience, .. GetName(Spawn) .. . I'd be happy to discuss a few of these advanced aspects, such as selecting the right opponent, knowing your surroundings, and using your abilities.") +end + +function dlg_5_15(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/exp03_questvo/trainer_arilla_larivaara/_exp03/exp03_cty_kelethin/tutorials/qst_larivaara/qst_laarivaara022.mp3", "", "", 187572586, 450509917, Spawn) + AddConversationOption(conversation, "How do I tell if an opponent is too weak or too strong for me?", "dlg_5_16") + StartConversation(conversation, NPC, Spawn, "Picking the right fight is crucial to victory. A weak opponent won't provide worthwhile rewards, while an overly powerful foe will result in your defeat. You need to keep your resources in mind as well as choosing the right target.") +end + +function dlg_5_16(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/exp03_questvo/trainer_arilla_larivaara/_exp03/exp03_cty_kelethin/tutorials/qst_larivaara/qst_laarivaara023.mp3", "", "", 4040652289, 1699138117, Spawn) + AddConversationOption(conversation, "What resources should I be keeping an eye on?", "dlg_5_17") + StartConversation(conversation, NPC, Spawn, "Targeting an opponent will show you detailed information on its overall potency. Generally speaking, you'll find the best results from fighting opponents with blue, white, or yellow names. Talk to Trainer Tahvolo Viljaan for more information on evaluating your opponents.") +end + +function dlg_5_17(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/exp03_questvo/trainer_arilla_larivaara/_exp03/exp03_cty_kelethin/tutorials/qst_larivaara/qst_laarivaara024.mp3", "", "", 3598297774, 910017607, Spawn) + AddConversationOption(conversation, "Teach me about knowing my surroundings.", "dlg_5_18") + AddConversationOption(conversation, "Tell me about using my abilities.") + AddConversationOption(conversation, "Teach me the basics of combat.") + AddConversationOption(conversation, "I'll come back later.") + StartConversation(conversation, NPC, Spawn, "Starting a fight when you are low on health or power is a very bad idea. Your choice of targets also depends on whether you're alone or grouped with other players. Forming a group allows you to take on tougher and more rewarding challenges than you could face alone.") +end + +function dlg_5_18(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/exp03_questvo/trainer_arilla_larivaara/_exp03/exp03_cty_kelethin/tutorials/qst_larivaara/qst_laarivaara025.mp3", "", "", 302868023, 1058230652, Spawn) + AddConversationOption(conversation, "Anything else I should watch out for?", "dlg_5_19") + StartConversation(conversation, NPC, Spawn, "Keeping your surroundings in mind is crucial to victory. Fighting in areas with lots of aggressive creatures is a bad idea, because they won't hesitate to gang up on you.") +end + +function dlg_5_19(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/exp03_questvo/trainer_arilla_larivaara/_exp03/exp03_cty_kelethin/tutorials/qst_larivaara/qst_laarivaara026.mp3", "", "", 2395836258, 4167880022, Spawn) + AddConversationOption(conversation, "Any other tips?", "dlg_5_20") + StartConversation(conversation, NPC, Spawn, "Staying too long on the exact spot where you just defeated a foe can be dangerous. Another enemy is likely to show up there soon after, which can be an unpleasant surprise if you're already in another battle.") +end + +function dlg_5_20(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/exp03_questvo/trainer_arilla_larivaara/_exp03/exp03_cty_kelethin/tutorials/qst_larivaara/qst_laarivaara027.mp3", "", "", 3335927389, 418360840, Spawn) + AddConversationOption(conversation, "Tell me about selecting the right opponent.", "dlg_5_21") + AddConversationOption(conversation, "Tell me about using my abilities.") + AddConversationOption(conversation, "Teach me the basics of combat.") + AddConversationOption(conversation, "I'll come back later.") + StartConversation(conversation, NPC, Spawn, "You should be aware of what's going on around you. Using your mouse wheel to scroll out into third person and holding down the left mouse button allows you to move the camera around your character. It's a good idea to do this when fighting in dangerous areas to make sure nothing sneaks up on you.") +end + +function dlg_5_21(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/exp03_questvo/trainer_arilla_larivaara/_exp03/exp03_cty_kelethin/tutorials/qst_larivaara/qst_laarivaara028.mp3", "", "", 3915273076, 3111917162, Spawn) + AddConversationOption(conversation, "What do you mean?") + StartConversation(conversation, NPC, Spawn, "Successful fighting isn't about turning on your auto-attack and walking away from battle. Your odds of victory are much better if you are well-prepared and are active during combat. You should use every spell or combat art that has a positive effect on your chances to win.") +end + +function dlg_5_22(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/exp03_questvo/trainer_arilla_larivaara/_exp03/exp03_cty_kelethin/tutorials/qst_larivaara/qst_laarivaara029.mp3", "", "", 2179864552, 3125288554, Spawn) + AddConversationOption(conversation, "What about during battle?", "dlg_5_23") + StartConversation(conversation, NPC, Spawn, "Before you begin fighting, make sure you and your allies have activated all beneficial spells, also known as 'buffs,' so that you're operating at peak efficiency. Buffs can add health or power, increase your rate of regeneration, enhance your physical attributes, make you attack faster or do more damage, and more.") +end + +function dlg_5_23(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/exp03_questvo/trainer_arilla_larivaara/_exp03/exp03_cty_kelethin/tutorials/qst_larivaara/qst_laarivaara030.mp3", "", "", 2306274826, 3024519845, Spawn) + AddConversationOption(conversation, "What else should I know about spells and arts?", "dlg_5_24") + StartConversation(conversation, NPC, Spawn, "Whether you're a front-lines melee type or someone attacking from a distance with weapons or spells, you should be using abilities that damage your foes effectively and efficiently. Right click on your spells and arts and select 'Examine' to see details on their effects.") +end + +function dlg_5_24(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/exp03_questvo/trainer_arilla_larivaara/_exp03/exp03_cty_kelethin/tutorials/qst_larivaara/qst_laarivaara031.mp3", "", "", 2411688474, 2950057017, Spawn) + AddConversationOption(conversation, "Tell me about selecting the right opponent.", "dlg_5_25") + AddConversationOption(conversation, "Teach me about knowing my surroundings.") + AddConversationOption(conversation, "Teach me the basics of combat.") + AddConversationOption(conversation, "I'll come back later.") + StartConversation(conversation, NPC, Spawn, "Using your highest-level versions of spells and arts will be more effective than using older versions. In addition, you should be upgrading your abilities to higher ranks to make them more effective. For more details on spells and combat arts, talk to Trainer Valtteri Yliveri.") +end + +function dlg_5_25(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/exp03_questvo/trainer_arilla_larivaara/_exp03/exp03_cty_kelethin/tutorials/qst_larivaara/qst_laarivaara008.mp3", "", "", 2898686401, 1752530734, Spawn) + AddConversationOption(conversation, "Tell me how to begin a fight.") + AddConversationOption(conversation, "Tell me about melee combat.") + AddConversationOption(conversation, "Tell me about ranged combat.", "dlg_5_26") + AddConversationOption(conversation, "What kind of rewards can I earn in battle?") + AddConversationOption(conversation, "Teach me more advanced aspects of combat.") + AddConversationOption(conversation, "I'll come back later.") + StartConversation(conversation, NPC, Spawn, "There are many different elements that go into successful combat. I can teach you a few of the basics, such as how to begin a fight, the difference between melee and ranged combat, and earning rewards for victory.") +end + diff --git a/server/SpawnScripts/GreaterFaydark/TrainerEivarraLaceleaf.lua b/server/SpawnScripts/GreaterFaydark/TrainerEivarraLaceleaf.lua new file mode 100644 index 000000000..0dbf7c861 --- /dev/null +++ b/server/SpawnScripts/GreaterFaydark/TrainerEivarraLaceleaf.lua @@ -0,0 +1,231 @@ +--[[ + Script Name : SpawnScripts/GreaterFaydark/TrainerEivarraLaceleaf.lua + Script Purpose : Trainer Eivarra Laceleaf + Script Author : John Adams + Script Date : 2009.03.01 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +function spawn(NPC) + SetPlayerProximityFunction(NPC, 10, "InRange", "LeaveRange") +end + +function respawn(NPC) + spawn(NPC) +end + +function InRange(NPC, Spawn) +end + +function LeaveRange(NPC, Spawn) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + choice = math.random(1,2) + + if choice == 1 then + PlayFlavor(NPC, "voiceover/english/exp03_questvo/trainer_eivarra_laceleaf/_exp03/exp03_cty_kelethin/trainers/intro_collection_harvesting_collect_5c4e2fe9.mp3", "None of the rest of you touch these collectibles! They're mine!", "", 2808230529, 2769568795, Spawn) + elseif choice == 2 then + PlayFlavor(NPC, "voiceover/english/exp03_questvo/trainer_eivarra_laceleaf/_exp03/exp03_cty_kelethin/trainers/intro_collection_harvesting_collect_df57b24b.mp3", "I'm hurrying! Don't rush me.", "", 3622690165, 1121532609, Spawn) + else + end + + PlayFlavor(NPC, "voiceover/english/exp03_questvo/trainer_eivarra_laceleaf/_exp03/exp03_cty_kelethin/tutorials/qst_eivarra/qst_eivarra001.mp3", "", "", 1784643111, 2793677851, Spawn) + AddConversationOption(conversation, "I'd like to learn about collections.", "dlg_73_1") + AddConversationOption(conversation, "I'd like to learn about harvesting.") + AddConversationOption(conversation, "I've no time to chat right now.") + StartConversation(conversation, NPC, Spawn, "Don't be shy! Come closer, m'dear, and I'd be happy to answer any questions you have about collections or harvesting!") + if convo==74 then + PlayFlavor(NPC, "voiceover/english/exp03_questvo/trainer_eivarra_laceleaf/_exp03/exp03_cty_kelethin/tutorials/qst_eivarra/qst_eivarra001.mp3", "", "", 1784643111, 2793677851, Spawn) + AddConversationOption(conversation, "I'd like to learn about collections.", "dlg_74_1") + AddConversationOption(conversation, "I'd like to learn about harvesting.") + AddConversationOption(conversation, "I've no time to chat right now.") + StartConversation(conversation, NPC, Spawn, "Don't be shy! Come closer, m'dear, and I'd be happy to answer any questions you have about collections or harvesting!") + end + + if convo==88 then + PlayFlavor(NPC, "voiceover/english/exp03_questvo/trainer_eivarra_laceleaf/_exp03/exp03_cty_kelethin/tutorials/qst_eivarra/qst_eivarra001.mp3", "", "", 1784643111, 2793677851, Spawn) + AddConversationOption(conversation, "I'd like to learn about collections.", "dlg_88_1") + AddConversationOption(conversation, "I'd like to learn about harvesting.") + AddConversationOption(conversation, "I've no time to chat right now.") + StartConversation(conversation, NPC, Spawn, "Don't be shy! Come closer, m'dear, and I'd be happy to answer any questions you have about collections or harvesting!") + end + +end + +function dlg_73_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/exp03_questvo/trainer_eivarra_laceleaf/_exp03/exp03_cty_kelethin/tutorials/qst_eivarra/qst_eivarra002.mp3", "", "", 1395864315, 2817792447, Spawn) + AddConversationOption(conversation, "What happens next?", "dlg_73_2") + StartConversation(conversation, NPC, Spawn, "Collectibles are seen as a glow rising from the ground. If you're close enough, you'll notice a question mark above it. Double-click or right-click the glow and select 'harvest.' The item you gather will go into your inventory. You can examine this item in your inventory.") +end + +function dlg_73_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/exp03_questvo/trainer_eivarra_laceleaf/_exp03/exp03_cty_kelethin/tutorials/qst_eivarra/qst_eivarra003.mp3", "", "", 3674289603, 3031375930, Spawn) + AddConversationOption(conversation, "How do I complete the collection?", "dlg_73_3") + StartConversation(conversation, NPC, Spawn, "Your quest journal will open up automatically to the Collections tab. Use the Add button to add that item to a collection. As you travel through Norrath, you'll find different collectibles in different areas of the world. Some items can be part of more than one collection.") +end + +function dlg_73_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/exp03_questvo/trainer_eivarra_laceleaf/_exp03/exp03_cty_kelethin/tutorials/qst_eivarra/qst_eivarra004.mp3", "", "", 863765125, 2737196345, Spawn) + AddConversationOption(conversation, "I'd like to learn about harvesting and gathering now.", "dlg_73_4") + AddConversationOption(conversation, "Thanks for the information.") + StartConversation(conversation, NPC, Spawn, "Continue to gather and examine all the items you find until all the icons of that collection are highlighted in your quest journal. Then you'll be able to turn the completed collection in to a collector who will reward you with some experience. If you already have a collectible in all collections that call for it, you can sell it to a merchant or trade it to another player.") +end + +function dlg_73_4(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "What are harvestables used for?", "dlg_73_5") + StartConversation(conversation, NPC, Spawn, "Harvestables come in five forms, each tied to its own respective skill. These skills can be seen by opening your Skills window by pressing the P key, clicking on the Skills tab and selecting your General skills. Rocks increase mining, logs increase foresting, dens increase trapping, fish increase fishing, and plants increase gathering.") +end + +function dlg_73_5(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/exp03_questvo/trainer_eivarra_laceleaf/_exp03/exp03_cty_kelethin/tutorials/qst_eivarra/qst_eivarra006.mp3", "", "", 237784044, 654858074, Spawn) + AddConversationOption(conversation, "Why do I need to increase my harvesting skills?", "dlg_73_6") + StartConversation(conversation, NPC, Spawn, "The items found through harvesting are the basic building blocks of tradeskills. They cannot be sold to vendors, but they can be traded or sold to other players who need them for their respective tradeskill professions. Some components that can be found through harvesting are very rare and can be worth quite a bit of money to tradeskillers.") +end + +function dlg_73_6(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/exp03_questvo/trainer_eivarra_laceleaf/_exp03/exp03_cty_kelethin/tutorials/qst_eivarra/qst_eivarra007.mp3", "", "", 3552014978, 1436740562, Spawn) + AddConversationOption(conversation, "I'd like to learn about collections now.", "dlg_73_7") + AddConversationOption(conversation, "Thanks for the information.") + StartConversation(conversation, NPC, Spawn, "The skill required to harvest in a given area increases along with the difficulty of the area. If you find that you are unable to harvest in an area you should return to a less difficult area and practice.") +end + +function dlg_74_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "What are harvestables used for?") + StartConversation(conversation, NPC, Spawn, "Harvestables come in five forms, each tied to its own respective skill. These skills can be seen by opening your Skills window by pressing the P key, clicking on the Skills tab and selecting your General skills. Rocks increase mining, logs increase foresting, dens increase trapping, fish increase fishing, and plants increase gathering.") +end + +function dlg_74_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/exp03_questvo/trainer_eivarra_laceleaf/_exp03/exp03_cty_kelethin/tutorials/qst_eivarra/qst_eivarra006.mp3", "", "", 237784044, 654858074, Spawn) + AddConversationOption(conversation, "Why do I need to increase my harvesting skills?", "dlg_74_3") + StartConversation(conversation, NPC, Spawn, "The items found through harvesting are the basic building blocks of tradeskills. They cannot be sold to vendors, but they can be traded or sold to other players who need them for their respective tradeskill professions. Some components that can be found through harvesting are very rare and can be worth quite a bit of money to tradeskillers.") +end + +function dlg_74_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/exp03_questvo/trainer_eivarra_laceleaf/_exp03/exp03_cty_kelethin/tutorials/qst_eivarra/qst_eivarra007.mp3", "", "", 3552014978, 1436740562, Spawn) + AddConversationOption(conversation, "I'd like to learn about collections now.", "dlg_74_4") + AddConversationOption(conversation, "Thanks for the information.") + StartConversation(conversation, NPC, Spawn, "The skill required to harvest in a given area increases along with the difficulty of the area. If you find that you are unable to harvest in an area you should return to a less difficult area and practice.") +end + +function dlg_74_4(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/exp03_questvo/trainer_eivarra_laceleaf/_exp03/exp03_cty_kelethin/tutorials/qst_eivarra/qst_eivarra002.mp3", "", "", 1395864315, 2817792447, Spawn) + AddConversationOption(conversation, "What happens next?", "dlg_74_5") + StartConversation(conversation, NPC, Spawn, "Collectibles are seen as a glow rising from the ground. If you're close enough, you'll notice a question mark above it. Double-click or right-click the glow and select 'harvest.' The item you gather will go into your inventory. You can examine this item in your inventory.") +end + +function dlg_74_5(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/exp03_questvo/trainer_eivarra_laceleaf/_exp03/exp03_cty_kelethin/tutorials/qst_eivarra/qst_eivarra003.mp3", "", "", 3674289603, 3031375930, Spawn) + AddConversationOption(conversation, "How do I complete the collection?", "dlg_74_6") + StartConversation(conversation, NPC, Spawn, "Your quest journal will open up automatically to the Collections tab. Use the Add button to add that item to a collection. As you travel through Norrath, you'll find different collectibles in different areas of the world. Some items can be part of more than one collection.") +end + +function dlg_74_6(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/exp03_questvo/trainer_eivarra_laceleaf/_exp03/exp03_cty_kelethin/tutorials/qst_eivarra/qst_eivarra004.mp3", "", "", 863765125, 2737196345, Spawn) + AddConversationOption(conversation, "I'd like to learn about harvesting and gathering now.", "dlg_74_7") + AddConversationOption(conversation, "Thanks for the information.") + StartConversation(conversation, NPC, Spawn, "Continue to gather and examine all the items you find until all the icons of that collection are highlighted in your quest journal. Then you'll be able to turn the completed collection in to a collector who will reward you with some experience. If you already have a collectible in all collections that call for it, you can sell it to a merchant or trade it to another player.") +end + +function dlg_88_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "What are harvestables used for?") + StartConversation(conversation, NPC, Spawn, "Harvestables come in five forms, each tied to its own respective skill. These skills can be seen by opening your Skills window by pressing the P key, clicking on the Skills tab and selecting your General skills. Rocks increase mining, logs increase foresting, dens increase trapping, fish increase fishing, and plants increase gathering.") +end + +function dlg_88_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/exp03_questvo/trainer_eivarra_laceleaf/_exp03/exp03_cty_kelethin/tutorials/qst_eivarra/qst_eivarra006.mp3", "", "", 237784044, 654858074, Spawn) + AddConversationOption(conversation, "Why do I need to increase my harvesting skills?", "dlg_88_3") + StartConversation(conversation, NPC, Spawn, "The items found through harvesting are the basic building blocks of tradeskills. They cannot be sold to vendors, but they can be traded or sold to other players who need them for their respective tradeskill professions. Some components that can be found through harvesting are very rare and can be worth quite a bit of money to tradeskillers.") +end + +function dlg_88_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/exp03_questvo/trainer_eivarra_laceleaf/_exp03/exp03_cty_kelethin/tutorials/qst_eivarra/qst_eivarra007.mp3", "", "", 3552014978, 1436740562, Spawn) + AddConversationOption(conversation, "I'd like to learn about collections now.", "dlg_88_4") + AddConversationOption(conversation, "Thanks for the information.") + StartConversation(conversation, NPC, Spawn, "The skill required to harvest in a given area increases along with the difficulty of the area. If you find that you are unable to harvest in an area you should return to a less difficult area and practice.") +end + +function dlg_88_4(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/exp03_questvo/trainer_eivarra_laceleaf/_exp03/exp03_cty_kelethin/tutorials/qst_eivarra/qst_eivarra002.mp3", "", "", 1395864315, 2817792447, Spawn) + AddConversationOption(conversation, "What happens next?", "dlg_88_5") + StartConversation(conversation, NPC, Spawn, "Collectibles are seen as a glow rising from the ground. If you're close enough, you'll notice a question mark above it. Double-click or right-click the glow and select 'harvest.' The item you gather will go into your inventory. You can examine this item in your inventory.") +end + +function dlg_88_5(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/exp03_questvo/trainer_eivarra_laceleaf/_exp03/exp03_cty_kelethin/tutorials/qst_eivarra/qst_eivarra003.mp3", "", "", 3674289603, 3031375930, Spawn) + AddConversationOption(conversation, "How do I complete the collection?", "dlg_88_6") + StartConversation(conversation, NPC, Spawn, "Your quest journal will open up automatically to the Collections tab. Use the Add button to add that item to a collection. As you travel through Norrath, you'll find different collectibles in different areas of the world. Some items can be part of more than one collection.") +end + +function dlg_88_6(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/exp03_questvo/trainer_eivarra_laceleaf/_exp03/exp03_cty_kelethin/tutorials/qst_eivarra/qst_eivarra004.mp3", "", "", 863765125, 2737196345, Spawn) + AddConversationOption(conversation, "I'd like to learn about harvesting and gathering now.", "dlg_88_7") + AddConversationOption(conversation, "Thanks for the information.") + StartConversation(conversation, NPC, Spawn, "Continue to gather and examine all the items you find until all the icons of that collection are highlighted in your quest journal. Then you'll be able to turn the completed collection in to a collector who will reward you with some experience. If you already have a collectible in all collections that call for it, you can sell it to a merchant or trade it to another player.") +end + +--[[ raw_conversations + PlayFlavor(NPC, "voiceover/english/exp03_questvo/trainer_eivarra_laceleaf/_exp03/exp03_cty_kelethin/trainers/intro_collection_harvesting_collect_df57b24b.mp3", "I'm hurrying! Don't rush me.", "", 3622690165, 1121532609, Spawn) + PlayFlavor(NPC, "voiceover/english/exp03_questvo/trainer_eivarra_laceleaf/_exp03/exp03_cty_kelethin/trainers/intro_collection_harvesting_collect_5c4e2fe9.mp3", "None of the rest of you touch these collectibles! They're mine!", "", 2808230529, 2769568795, Spawn) +--]] + diff --git a/server/SpawnScripts/GreaterFaydark/TrainerKaaliSaarinen.lua b/server/SpawnScripts/GreaterFaydark/TrainerKaaliSaarinen.lua new file mode 100644 index 000000000..85bf0ac2c --- /dev/null +++ b/server/SpawnScripts/GreaterFaydark/TrainerKaaliSaarinen.lua @@ -0,0 +1,79 @@ +--[[ + Script Name : SpawnScripts/GreaterFaydark + Script Purpose : Trainer Kaali Saarinen + Script Author : Unsafemodder (a.k.a Pokchop1) + Script Date : 2013.010.6 + Script Notes : +--]] + +function spawn(NPC) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + start(NPC, Spawn) +end + +function start(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "Tell me about banking", "dlg_1_1") + AddConversationOption(conversation, "Tell me about mending items.", "dlg_1_6") + AddConversationOption(conversation, "I'll return for training later.") + StartConversation(conversation, NPC, Spawn, "I can tell you all about mending and banking! Banking and mending! Which do you want to hear about?") +end + +function dlg_1_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "How do I open my bank?", "dlg_1_2") + StartConversation(conversation, NPC, Spawn, "You may already have an account with the Kelethin First Regional Bank. Go see Banker Athinae in Kelethin to access your account. You can access your Kelethin bank account from Qeynos, but not from Freeport.") +end + +function dlg_1_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "How do I make deposits and withdrawals?", "dlg_1_3") + AddConversationOption(conversation, "I'll return for training later.") + StartConversation(conversation, NPC, Spawn, "Inside the bank, your mouse pointer will turn into a dial icon when hovered over a banker. Just click on the banker to open your bank window. You'll see eight general slots and four " .. '"shared" slots. You can put bags or containers in your bank to increase the number of available slots.') +end + +function dlg_1_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, 'What are "shared" bank slots?', "dlg_1_4") + StartConversation(conversation, NPC, Spawn, "Coins and items can be dragged from your inventory to the bank window. To drag one item from a stack, hold down the Ctrl key as you drag it. To drag a certain number of coins or items, hold down the shift key and drag, then enter the quantity.") +end + +function dlg_1_4(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "Any other banking facts I should know?", "dlg_1_5") + StartConversation(conversation, NPC, Spawn, "Items (but not coins) placed in your shared slots can be accessed by other characters on your account that are also citizens of Kelethin. Lore and No-Trade items cannot be put into the shared slots. Characters that are not Kelethin Citizens cannot access a Kelethin bank. So, you could not access a bank in Qeynos or Freeport.") +end + +function dlg_1_5(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "I want to learn about mending items", "dlg_1_6") + AddConversationOption(conversation, "I'll return for training later.") + StartConversation(conversation, NPC, Spawn, 'If you choose to join a guild made up of your fellow players one day, you can access your guild bank by right-clicking on a banker and selecting "Guild Bank".') +end + +function dlg_1_6(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "Tell me about banking", "dlg_1_1") + AddConversationOption(conversation, "I'll return for training later.") + StartConversation(conversation, NPC, Spawn, "Your weapons and armor wear down when you die during combat. When they are down to zero durability, you no longer receive any benefit from them. You can visit a mender, such as Mender Kaarlo Karpela at Gearheart's Forge in Kelethin, to get them repaired. Speak to Trainer Leianna Teiampa if you wish to learn more about the effects of death.") +end \ No newline at end of file diff --git a/server/SpawnScripts/GreaterFaydark/TrainerLeiannaTeiampa.lua b/server/SpawnScripts/GreaterFaydark/TrainerLeiannaTeiampa.lua new file mode 100644 index 000000000..86f8c559d --- /dev/null +++ b/server/SpawnScripts/GreaterFaydark/TrainerLeiannaTeiampa.lua @@ -0,0 +1,108 @@ +--[[ + Script Name : SpawnScripts/GreaterFaydark/TrainerLeiannaTeiampa.lua + Script Purpose : Trainer Leianna Teiampa + Script Author : Unsafemodder (a.k.a Pokchop1) + Script Date : 2013.010.7 + Script Notes : +--]] + +function spawn(NPC) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + start(NPC, Spawn) +end + +function start(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "What can cause my death", "dlg_1_1") + StartConversation(conversation, NPC, Spawn, "Even the bravest defender of Queen Amree will meet an untimely end on occasion. Let me teach you the consequences of death and how you can recover properly.") +end + +function dlg_1_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "How will I know when I'm going to die?", "dlg_1_2") + StartConversation(conversation, NPC, Spawn, "Death can come in many ways: being bested on the field of battle, falling from great heights, drowning in water, falling into lava, standing too close to an exploding chest, and so on. It's a dangerous world out there.") +end + +function dlg_1_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "Why green?", "dlg_1_3") + StartConversation(conversation, NPC, Spawn, "Just keep an eye on your health bar, the green line located beneath your name in the upper left of your screen. At least...you hope it's green.") +end + +function dlg_1_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "What happens then?", "dlg_1_4") + AddConversationOption(conversation, "I need to finish this conversation later.") + StartConversation(conversation, NPC, Spawn, "Green means you're healthy. As your health diminishes, the bar turns yellow, then orange, and finally red. If the bar is empty, you die. You pay the debt, which cancels all others, if you get my meaning.") +end + +function dlg_1_4(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "So death is not the end?", "dlg_1_5") + StartConversation(conversation, NPC, Spawn, "Your spirit lays trapped in your fallen body, unable to move. At this point, you have a choice: wait for a nearby ally to revive you, or choose a location from the window in the center of your screen at which to reappear. In some cases you'll have a single choice, in others multiple choices.") +end + +function dlg_1_5(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "What are the consequences?", "dlg_1_6") + StartConversation(conversation, NPC, Spawn, "Fortunately for all of us, death in Norrath is a temporary thing. If another adventurer revives you, you reappear at the spot of your death. If you choose a location to revive, you will appear at that spot. There are consequences to death, however.") +end + +function dlg_1_6(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "What is experience debt?", "dlg_1_7") + AddConversationOption(conversation, "I think I've learned enough for now.") + StartConversation(conversation, NPC, Spawn, "There are three results of death. First, you incur some experience debt which can be paid off by earning more XP (experience points). Second, you suffer a revive sickness that lowers your abilities for a shot time, which leaves you temporarily vulnerable and less effective. Finally, all your equipped items take damage that will eventually have to be repaired.") +end + +function dlg_1_7(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "What is revive sickness like?", "dlg_1_8") + StartConversation(conversation, NPC, Spawn, "Experience debt is indicated by a red line on your XP bar. As you earn experience going forward, part of your XP will go toward paying off your debt while the rest will continue to advance you toward your next level. Mousing over your XP bar also tells how much debt you have.") +end + +function dlg_1_8(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "What are the results of item damage?", "dlg_1_9") + StartConversation(conversation, NPC, Spawn, "You'll see an icon for revive sickness in your spell effects window. Mousing over the icon will tell you how long it will remain. The type of sickness you have depends on how you were revived, but no matter what there will be a negative effect. Don't worry, it passes soon enough.") +end + +function dlg_1_9(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "What can I do about item damage?", "dlg_1_10") + StartConversation(conversation, NPC, Spawn, "Your equipped items usually take about 10% wear with each death. When they are down to zero durability, you no longer receive any benefit from them. Don't let your equipment ever get into such poor condition, " .. GetName(Spawn)) +end + +function dlg_1_10(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "Thank you for your advice.") + StartConversation(conversation, NPC, Spawn, "You will need to see a mender, someone who is able to repair your items back to 100% durability. Speaker to Trainer Kaali to learn more about repairing your gear. Should your equipment take damage, Mender Kaarlo at Gearheart's Forge in Kelethin can repair things for you.") +end \ No newline at end of file diff --git a/server/SpawnScripts/GreaterFaydark/TrainerModjiVilivarinen.lua b/server/SpawnScripts/GreaterFaydark/TrainerModjiVilivarinen.lua new file mode 100644 index 000000000..f13e1a1a1 --- /dev/null +++ b/server/SpawnScripts/GreaterFaydark/TrainerModjiVilivarinen.lua @@ -0,0 +1,164 @@ +--[[ + Script Name : SpawnScripts/GreaterFaydark/TrainerModjiVilivarinen.lua + Script Purpose : Trainer Modji Vilivarinen + Script Author : John Adams + Script Date : 2009.03.01 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +function spawn(NPC) + SetPlayerProximityFunction(NPC, 10, "InRange", "LeaveRange") +end + +function respawn(NPC) + spawn(NPC) +end + +function InRange(NPC, Spawn) +end + +function LeaveRange(NPC, Spawn) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/exp03_questvo/trainer_modji_vilivarinen/_exp03/exp03_cty_kelethin/tutorials/qst_modji/qst_modji001.mp3", "", "", 629194324, 2384115675, Spawn) + AddConversationOption(conversation, "Tell me about items and equipment.", "dlg_53_1") + AddConversationOption(conversation, "Tell me about my inventory.") + AddConversationOption(conversation, "I will return for instruction later.") + StartConversation(conversation, NPC, Spawn, "Good day, .. GetName(Spawn) .. . I'm here to teach our Queen's newest recruits about equipment and inventory space. Good equipment is one of the most important tools of any adventurer!") +end + +function dlg_53_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/exp03_questvo/trainer_modji_vilivarinen/_exp03/exp03_cty_kelethin/tutorials/qst_modji/qst_modji002.mp3", "", "", 4288682285, 68250990, Spawn) + AddConversationOption(conversation, "What can I do with the treasures I earn while adventuring?", "dlg_53_2") + StartConversation(conversation, NPC, Spawn, "Norrath is full of treasures for brave heroes like you. Sometimes the opponents you defeat in battle leave behind treasure chests with valuable loot. You can also buy items from other players, craft them as an artisan, or be awarded items for completing quests.") +end + +function dlg_53_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/exp03_questvo/trainer_modji_vilivarinen/_exp03/exp03_cty_kelethin/tutorials/qst_modji/qst_modji003.mp3", "", "", 198169293, 2421181305, Spawn) + AddConversationOption(conversation, "What does the item information tell me?", "dlg_53_3") + AddConversationOption(conversation, "I will return for instruction later.") + StartConversation(conversation, NPC, Spawn, "Some items you obtain can be equipped on your person. If you find weapons, armor, jewelry, or certain other goodies, you may be able to use them. To look at a piece of equipment and determine if you can use it, move your mouse pointer over the item.") +end + +function dlg_53_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/exp03_questvo/trainer_modji_vilivarinen/_exp03/exp03_cty_kelethin/tutorials/qst_modji/qst_modji004.mp3", "", "", 4004083620, 1433115076, Spawn) + AddConversationOption(conversation, "Are things like attribute bonuses important?", "dlg_53_4") + AddConversationOption(conversation, "I will return for instruction later.") + StartConversation(conversation, NPC, Spawn, "For items that can be equipped, such as weapons and armor, mousing over it tells you which professions can use the item and at what level it can be equipped. You'll also see any benefits, such as attribute bonuses and resists, that the equipment provides. Learn about attributes by talking to Trainer Rafela Kosimo.") +end + +function dlg_53_4(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/exp03_questvo/trainer_modji_vilivarinen/_exp03/exp03_cty_kelethin/tutorials/qst_modji/qst_modji005.mp3", "", "", 3148308825, 1768781135, Spawn) + AddConversationOption(conversation, "How can I tell which of two weapons is better?", "dlg_53_5") + AddConversationOption(conversation, "I will return for instruction later.") + StartConversation(conversation, NPC, Spawn, "A wise adventurer is always trying to improve his or her equipment. Whenever you see gear that provides an overall greater benefit than what you have, that item is an upgrade for you.") +end + +function dlg_53_5(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/exp03_questvo/trainer_modji_vilivarinen/_exp03/exp03_cty_kelethin/tutorials/qst_modji/qst_modji006.mp3", "", "", 4261563052, 2529314534, Spawn) + AddConversationOption(conversation, "How can I tell which of two pieces of armor is better?", "dlg_53_6") + AddConversationOption(conversation, "I will return for instruction later.") + StartConversation(conversation, NPC, Spawn, "Weapons have a Damage Rating that shows the relative damage you can do with them. A higher Damage Rating is always better. Be sure you are comparing weapons of the same type, such as a two-handed weapon with another two-hander, or one dual-wield weapon with another.") +end + +function dlg_53_6(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/exp03_questvo/trainer_modji_vilivarinen/_exp03/exp03_cty_kelethin/tutorials/qst_modji/qst_modji007.mp3", "", "", 3055447161, 740281223, Spawn) + AddConversationOption(conversation, "What about scouts and priests?", "dlg_53_7") + AddConversationOption(conversation, "I will return for instruction later.") + StartConversation(conversation, NPC, Spawn, "How you judge armor depends on your profession. Fighters who take a beating care most about obtaining armor that has high Mitigation, which decreases the amount of damage they take. Mages, on the other hand, know they can't take much punishment anyway, so would rather have armor that provides nice attribute bonuses.") +end + +function dlg_53_7(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/exp03_questvo/trainer_modji_vilivarinen/_exp03/exp03_cty_kelethin/tutorials/qst_modji/qst_modji008.mp3", "", "", 2976794585, 1667594161, Spawn) + AddConversationOption(conversation, "What do I do with equipment I can't use?", "dlg_53_8") + AddConversationOption(conversation, "I will return for instruction later.") + StartConversation(conversation, NPC, Spawn, "Scouts and priests need varying amounts of protection depending on how they play. If they find themselves at the forefront of battle, protection becomes very important. If they stay out of harms way, attribute bonuses may be more valuable.") +end + +function dlg_53_8(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/exp03_questvo/trainer_modji_vilivarinen/_exp03/exp03_cty_kelethin/tutorials/qst_modji/qst_modji009.mp3", "", "", 3026014011, 3128688235, Spawn) + AddConversationOption(conversation, "Why are some items marked 'No Value' or 'No Trade'?", "dlg_53_9") + AddConversationOption(conversation, "I will return for instruction later.") + StartConversation(conversation, NPC, Spawn, "An item can be sold to a non-player merchant for cash unless it has the 'No Value' flag on it. Items can be sold or traded to another player unless it has the 'No Trade' flag. If an item says it is 'Lore,' you can only have one of them on your character at a time.") +end + +function dlg_53_9(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/exp03_questvo/trainer_modji_vilivarinen/_exp03/exp03_cty_kelethin/tutorials/qst_modji/qst_modji010.mp3", "", "", 3548366649, 3737415014, Spawn) + AddConversationOption(conversation, "What does it mean when an item says it is 'Attuneable'?", "dlg_53_10") + AddConversationOption(conversation, "I will return for instruction later.") + StartConversation(conversation, NPC, Spawn, "Some items are marked 'No Value' because they are easy to obtain, such as harvested goods. You have to work to earn wealth, .. GetName(Spawn) .. . Items are marked 'No Trade' in order to ensure that you earn them yourself, such as defeating a very tough monster or completing a long quest.") +end + +function dlg_53_10(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/exp03_questvo/trainer_modji_vilivarinen/_exp03/exp03_cty_kelethin/tutorials/qst_modji/qst_modji011.mp3", "", "", 2574691428, 2245769529, Spawn) + AddConversationOption(conversation, "How do I manage my inventory?", "dlg_53_11") + StartConversation(conversation, NPC, Spawn, "If an item is marked 'Attuneable,' you must attune it to yourself before it provides any benefits. You'll notice a message on screen when you are wearing an item that must be attuned. To attune it, right-click on the item and select 'Attune.' Once attuned, that item can no longer be traded or sold to another player.") +end + +function dlg_53_11(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/exp03_questvo/trainer_modji_vilivarinen/_exp03/exp03_cty_kelethin/tutorials/qst_modji/qst_modji012.mp3", "", "", 2929542360, 815972363, Spawn) + AddConversationOption(conversation, "Can I put bags inside of bags?", "dlg_53_12") + AddConversationOption(conversation, "I will return for instruction later.") + StartConversation(conversation, NPC, Spawn, "Press the I key to open your inventory. Beneath your portrait are six slots that can hold items. You can place bags or other containers in those slots, which will give you even more storage space. Press the B key to open all your bags at once.") +end + +function dlg_53_12(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/exp03_questvo/trainer_modji_vilivarinen/_exp03/exp03_cty_kelethin/tutorials/qst_modji/qst_modji013.mp3", "", "", 1237588561, 2769256355, Spawn) + AddConversationOption(conversation, "So one item takes up one bag slot?", "dlg_53_13") + AddConversationOption(conversation, "I will return for instruction later.") + StartConversation(conversation, NPC, Spawn, "Only empty bags can go inside other bags. For this reason, it's a good idea to get hold of containers with many slots. After a long night of adventuring or harvesting, you'll want to have as many places to store your goodies as possible.") +end + +function dlg_53_13(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "I'll be back if I need to refresh my memory on this.", "dlg_53_14") + StartConversation(conversation, NPC, Spawn, "Certain items, such as ammunition or harvested resources, can be stacked up to 200 at a time, depending on the item. Many goods, such as armor and clothing, cannot be stacked at all.") +end + +--[[ raw_conversations + PlayFlavor(NPC, "voiceover/english/exp03_questvo/trainer_modji_vilivarinen/_exp03/exp03_cty_kelethin/trainers/intro_items_modji_eivar_ecfbed22.mp3", "Isn't Eivarra cute, running around collecting things? Even if they are imaginary...", "", 4211386415, 353845935, Spawn) +--]] + diff --git a/server/SpawnScripts/GreaterFaydark/TrainerRafelaKosimo.lua b/server/SpawnScripts/GreaterFaydark/TrainerRafelaKosimo.lua new file mode 100644 index 000000000..ea117e11e --- /dev/null +++ b/server/SpawnScripts/GreaterFaydark/TrainerRafelaKosimo.lua @@ -0,0 +1,182 @@ +--[[ + Script Name : SpawnScripts/GreaterFaydark/TrainerRafelaKosimo.lua + Script Purpose : Trainer Rafela Kosimo + Script Author : John Adams + Script Date : 2009.03.01 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +function spawn(NPC) + SetPlayerProximityFunction(NPC, 10, "InRange", "LeaveRange") +end + +function respawn(NPC) + spawn(NPC) +end + +function InRange(NPC, Spawn) +end + +function LeaveRange(NPC, Spawn) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/exp03_questvo/trainer_rafela_kosimo/_exp03/exp03_cty_kelethin/tutorials/qst_rafela/qst_rafela001.mp3", "", "", 369190615, 678098833, Spawn) + AddConversationOption(conversation, "Tell me what my physical attributes do.", "dlg_56_1") + AddConversationOption(conversation, "How do I view my physical attributes?") + AddConversationOption(conversation, "How do I improve my physical attributes?") + AddConversationOption(conversation, "I will ask you about this later.") + StartConversation(conversation, NPC, Spawn, "Hello there, " .. GetName(Spawn) .. ". You look like you keep both your body and mind in good shape. Even so, I bet you could use more information on your physical attributes: Strength, Agility, Stamina, Intelligence, and Wisdom. That's what I'm here to teach you!") +end + +function dlg_56_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/exp03_questvo/trainer_rafela_kosimo/_exp03/exp03_cty_kelethin/tutorials/qst_rafela/qst_rafela002.mp3", "", "", 269298887, 2860978242, Spawn) + AddConversationOption(conversation, "Tell me about Agility.", "dlg_56_2") + AddConversationOption(conversation, "How do I view my physical attributes?") + AddConversationOption(conversation, "How do I improve my physical attributes?") + AddConversationOption(conversation, "Thanks for the information.") + StartConversation(conversation, NPC, Spawn, "Strength determines how much weight you can carry. The more Strength you have, the more physical damage you can do in melee combat. Strength also determines the maximum amount of power Guardians, Berserkers, Monks, and Paladins have.") +end + +function dlg_56_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/exp03_questvo/trainer_rafela_kosimo/_exp03/exp03_cty_kelethin/tutorials/qst_rafela/qst_rafela003.mp3", "", "", 618428185, 2242815487, Spawn) + AddConversationOption(conversation, "Tell me about Stamina.", "dlg_56_3") + AddConversationOption(conversation, "How do I view my physical attributes?") + AddConversationOption(conversation, "How do I improve my physical attributes?") + AddConversationOption(conversation, "Thanks for the information.") + StartConversation(conversation, NPC, Spawn, "Agility helps you avoid physical attacks. The more Agility you have, the higher your Avoidance ability. Agility also determines the maximum amount of power Swashbucklers, Rangers, Troubadors, and Dirges have.") +end + +function dlg_56_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/exp03_questvo/trainer_rafela_kosimo/_exp03/exp03_cty_kelethin/tutorials/qst_rafela/qst_rafela004.mp3", "", "", 3361827642, 1990974736, Spawn) + AddConversationOption(conversation, "Tell me about Intelligence.", "dlg_56_4") + AddConversationOption(conversation, "How do I view my physical attributes?") + AddConversationOption(conversation, "How do I improve my physical attributes?") + AddConversationOption(conversation, "Thank you for the information.") + StartConversation(conversation, NPC, Spawn, "Stamina gives you more Health points. The more Health you have, the longer you can survive in battle. Stamina is a useful attribute for every class.") +end + +function dlg_56_4(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/exp03_questvo/trainer_rafela_kosimo/_exp03/exp03_cty_kelethin/tutorials/qst_rafela/qst_rafela005.mp3", "", "", 1693600094, 3506813775, Spawn) + AddConversationOption(conversation, "Tell me about Wisdom.", "dlg_56_5") + AddConversationOption(conversation, "How do I view my physical attributes?") + AddConversationOption(conversation, "How do I improve my physical attributes?") + AddConversationOption(conversation, "Thank you for the information.") + StartConversation(conversation, NPC, Spawn, "Intelligence is more than just a sign of how smart you are. The more Intelligence you have, the more damage you do with spells in combat. Intelligence also determines the maximum amount of power Wizards, Warlocks, Illusionists, Conjurors, Troubadors, and Dirges have.") +end + +function dlg_56_5(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/exp03_questvo/trainer_rafela_kosimo/_exp03/exp03_cty_kelethin/tutorials/qst_rafela/qst_rafela006.mp3", "", "", 2596932055, 833533845, Spawn) + AddConversationOption(conversation, "How do I view my physical attributes?", "dlg_56_6") + AddConversationOption(conversation, "How do I improve my physical attributes?") + AddConversationOption(conversation, "Thank you for the information.") + StartConversation(conversation, NPC, Spawn, "Wisdom increases your resistances to magical types of attacks: Heat, Cold, Disease, Poison, Magic, Mental and Divine. Wisdom also determines the maximum amount of power Templars, Mystics, Furies, Wardens, and Paladins have.") +end + +function dlg_56_6(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/exp03_questvo/trainer_rafela_kosimo/_exp03/exp03_cty_kelethin/tutorials/qst_rafela/qst_rafela007.mp3", "", "", 3801545950, 4239189434, Spawn) + AddConversationOption(conversation, "Tell me what my physical attributes do.", "dlg_56_7") + AddConversationOption(conversation, "How do I improve my physical attributes?") + AddConversationOption(conversation, "Thank you for the information.") + StartConversation(conversation, NPC, Spawn, "You can see your physical attributes, as well as other important aspects of your character, in your persona window. Just press the P key to open your persona window.") +end + +function dlg_56_7(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/exp03_questvo/trainer_rafela_kosimo/_exp03/exp03_cty_kelethin/tutorials/qst_rafela/qst_rafela002.mp3", "", "", 269298887, 2860978242, Spawn) + AddConversationOption(conversation, "Tell me about Agility.", "dlg_56_8") + AddConversationOption(conversation, "How do I view my physical attributes?") + AddConversationOption(conversation, "How do I improve my physical attributes?") + AddConversationOption(conversation, "Thanks for the information.") + StartConversation(conversation, NPC, Spawn, "Strength determines how much weight you can carry. The more Strength you have, the more physical damage you can do in melee combat. Strength also determines the maximum amount of power Guardians, Berserkers, Monks, and Paladins have.") +end + +function dlg_56_8(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/exp03_questvo/trainer_rafela_kosimo/_exp03/exp03_cty_kelethin/tutorials/qst_rafela/qst_rafela007.mp3", "", "", 3801545950, 4239189434, Spawn) + AddConversationOption(conversation, "Tell me what my physical attributes do.") + AddConversationOption(conversation, "How do I improve my physical attributes?", "dlg_56_9") + AddConversationOption(conversation, "Thank you for the information.") + StartConversation(conversation, NPC, Spawn, "You can see your physical attributes, as well as other important aspects of your character, in your persona window. Just press the P key to open your persona window.") +end + +function dlg_56_9(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/exp03_questvo/trainer_rafela_kosimo/_exp03/exp03_cty_kelethin/tutorials/qst_rafela/qst_rafela008.mp3", "", "", 2282437179, 3119891904, Spawn) + AddConversationOption(conversation, "Are there other ways?") + AddConversationOption(conversation, "Thank you for the information.", "dlg_56_10") + StartConversation(conversation, NPC, Spawn, "Your physical attributes, as well as other aspects of your character, can be improved in a number of ways. Many items add points to your attributes, resistances, Health, or Power. Hold your mouse pointer over your items to see what benefits they provide.") +end + +function dlg_56_10(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/exp03_questvo/trainer_rafela_kosimo/_exp03/exp03_cty_kelethin/tutorials/qst_rafela/qst_rafela009.mp3", "", "", 1243763931, 281213796, Spawn) + AddConversationOption(conversation, "Tell me what my physical attributes do.", "dlg_56_11") + AddConversationOption(conversation, "How do I view my physical attributes?") + AddConversationOption(conversation, "I will ask you about this later.") + StartConversation(conversation, NPC, Spawn, "Many spells and combat arts enhance your attributes. Some of these can be cast on yourself, while others can improve other player characters that you group with. Grouping with other classes provides a wider variety of ways to improve your attributes.") +end + +function dlg_56_11(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/exp03_questvo/trainer_rafela_kosimo/_exp03/exp03_cty_kelethin/tutorials/qst_rafela/qst_rafela007.mp3", "", "", 3801545950, 4239189434, Spawn) + AddConversationOption(conversation, "Tell me what my physical attributes do.") + AddConversationOption(conversation, "How do I improve my physical attributes?", "dlg_56_12") + AddConversationOption(conversation, "Thank you for the information.") + StartConversation(conversation, NPC, Spawn, "You can see your physical attributes, as well as other important aspects of your character, in your persona window. Just press the P key to open your persona window.") +end + +function dlg_56_12(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/exp03_questvo/trainer_rafela_kosimo/_exp03/exp03_cty_kelethin/tutorials/qst_rafela/qst_rafela002.mp3", "", "", 269298887, 2860978242, Spawn) + AddConversationOption(conversation, "Tell me about Agility.", "dlg_56_13") + AddConversationOption(conversation, "How do I view my physical attributes?") + AddConversationOption(conversation, "How do I improve my physical attributes?") + AddConversationOption(conversation, "Thanks for the information.") + StartConversation(conversation, NPC, Spawn, "Strength determines how much weight you can carry. The more Strength you have, the more physical damage you can do in melee combat. Strength also determines the maximum amount of power Guardians, Berserkers, Monks, and Paladins have.") +end + +function dlg_56_13(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/exp03_questvo/trainer_rafela_kosimo/_exp03/exp03_cty_kelethin/tutorials/qst_rafela/qst_rafela007.mp3", "", "", 3801545950, 4239189434, Spawn) + AddConversationOption(conversation, "Tell me what my physical attributes do.") + AddConversationOption(conversation, "How do I improve my physical attributes?", "dlg_56_14") + AddConversationOption(conversation, "Thank you for the information.") + StartConversation(conversation, NPC, Spawn, "You can see your physical attributes, as well as other important aspects of your character, in your persona window. Just press the P key to open your persona window.") +end + diff --git a/server/SpawnScripts/GreaterFaydark/TrainerTahvoloViljaan.lua b/server/SpawnScripts/GreaterFaydark/TrainerTahvoloViljaan.lua new file mode 100644 index 000000000..b7427ed71 --- /dev/null +++ b/server/SpawnScripts/GreaterFaydark/TrainerTahvoloViljaan.lua @@ -0,0 +1,158 @@ +--[[ + Script Name : SpawnScripts/GreaterFaydark/TrainerTahvoloViljaan.lua + Script Purpose : Trainer Tahvolo Viljaan + Script Author : Unsafemodder (a.k.a Pokchop1) + Script Date : 2013.010.8 + Script Notes : +--]] + +function spawn(NPC) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + start(NPC, Spawn) +end + +function start(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "How do I judge my opponent?", "dlg_1_1") + AddConversationOption(conversation, "I'll return later.") + StartConversation(conversation, NPC, Spawn, "Welcome, adventurer! I sense that you will fight many battles and that you will one day be known as a great hero of Kelethin. But remember, we all have to start somewhere. The first thing you need to know to be successful in combat is how to size up your adversary.") +end + +function dlg_1_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "What does the creature's name tell me?", "dlg_1_2") + StartConversation(conversation, NPC, Spawn, "You must learn to use both your eyes and your instincts as you consider friends and foes alike in Norrath. There are two excellent tools you should use to judge their capabilities: what you can tell from their name and what you can learn by targeting them.") +end + +function dlg_1_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "How do I target an opponent?", "dlg_1_3") + AddConversationOption(conversation, "I will be back later.") + StartConversation(conversation, NPC, Spawn, "If something has a red border around its name, that target is aggressive toward you and will attack if you get too close to it. You should be especially careful of creatures that roam around, because if they notice you they won't hesitate to strike.") +end + +function dlg_1_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "Why are separate creatures sometimes linked?", "dlg_1_4") + AddConversationOption(conversation, "I will be back later.") + StartConversation(conversation, NPC, Spawn, "All you need to do is move your mouse pointer over what you want to target and click. You will see the name of your opponent in the Target window in the upper left corner of the screen, and a large arrow will appear above its head. If arrows also appear above the heads of nearby creatures, it means all of them are linked together and will attack as one.") +end + +function dlg_1_4(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "What does the Target window tell me?", "dlg_1_5") + StartConversation(conversation, NPC, Spawn, "Sometimes multiple creatures will work together to form a single encounter. These opponents will act as a team, and usually won't stop fighting until all of them are defeated.") +end + +function dlg_1_5(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "What does the level indicate?", "dlg_1_6") + AddConversationOption(conversation, "I will be back later.") + StartConversation(conversation, NPC, Spawn, 'The Target window tells you several important facts, which collectively form what is referred to as the "con" (overall challenge) of the opponent. It shows you the numerical level of the creature you have targeted, a color to indicate its relative level range, up or down arrows to indicate toughness, and indicators that tell you if the encounter is normal, heroic, or epic.') +end + +function dlg_1_6(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "How does my opponent's level affect my rewards for victory?", "dlg_1_7") + AddConversationOption(conversation, "I will be back later.") + StartConversation(conversation, NPC, Spawn, "As you adventure through Norrath, you will gain experience and increase your level. The opponents you will face in combat have levels as well. To be victorious, you will usually want to face foes that are close to your level.") +end + +function dlg_1_7(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "What does the color of my opponent's name tell me?", "dlg_1_8") + AddConversationOption(conversation, "I will be back later.") + StartConversation(conversation, NPC, Spawn, "You gain more experience by defeating higher-level opponents, but they will also be tougher to beat. Conversely, if you defeat foes much lower than your level, they will not be nearly as rewarding.") +end + +function dlg_1_8(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "What are the colors?", "dlg_1_9") + StartConversation(conversation, NPC, Spawn, "The color of your opponent's name indicates how challenging the encounter is. It is very useful as a quick indicator of whether or not you should be fighting a target. The more danger its color indicates, the greater the threat it represents.") +end + +function dlg_1_9(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "Will grey targets ever attack me?", "dlg_1_10") + AddConversationOption(conversation, "I will be back later.") + StartConversation(conversation, NPC, Spawn, "Grey names mean the fight is below your abilities and will give no experience or reward. Green names mean the opponent is very easy. Blue names mean an easy fight. White names indicate the opponent is even with your abilities. Yellow names mean the fight will be challenging. Orange names indicate a difficult encounter. Red names mean the battle could be deadly.") +end + +function dlg_1_10(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "What do down arrows tell me?", "dlg_1_11") + AddConversationOption(conversation, "I will be back later.") + StartConversation(conversation, NPC, Spawn, "Targets with grey names will not attack you, even if they would be aggressive to someone closer to their level. In other words, you won't be attacked by anything that won't give you some reward for defeating it.") +end + +function dlg_1_11(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "What do up arrows mean?", "dlg_1_12") + AddConversationOption(conversation, "I will be back later.") + StartConversation(conversation, NPC, Spawn, "No arrow by the target's name indicates an average opponent for a lone adventurer. A single down arrow means it is a below average opponent. Two down arrows tell you it's a weak opponent, and three down arrows means it is very weak. Be careful though, because if multiple weak opponents are working together they can still represent quite a challenge.") +end + +function dlg_1_12(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "So how do I know whether I can face a challenge alone?", "dlg_1_13") + AddConversationOption(conversation, "I will finish this lesson later.") + StartConversation(conversation, NPC, Spawn, "Up arrows indicate increased difficulty. A single up arrow means an above average opponent. Two up arrows show a strong opponent, while three up arrows means a very tough fight. If you look at the sparring partners next to us, you will see that they have different arrow indicators. Feel free to practice fighting them to feel what effect the arrows have.") +end + +function dlg_1_13(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "What is the difference between normal, heroic, and epic?", "dlg_1_14") + AddConversationOption(conversation, "I will finish this lesson later.") + StartConversation(conversation, NPC, Spawn, "As a general rule of thumb, if you see an enemy with one up arrow, it's a good idea to team up with another player to take it on. If you see an enemy with two up arrows, add two members to your group. If you see an opponent with three up arrows, add three members to your group. A lone adventurer will likely want to face targets with no arrows or down arrows.") +end + +function dlg_1_14(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "So how do all these elements work together to show an opponent's difficulty?", "dlg_1_15") + AddConversationOption(conversation, "I will finish this lesson later.") + StartConversation(conversation, NPC, Spawn, "A normal opponent has no indicator and is intended to be fought by a solo adventurer or small group. A heroic encounter is intended for a larger group of up to six adventurers. An epic opponent should only be attempted by a raid force of multiple groups working together.") +end + +function dlg_1_15(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "Thank you, instructor.") + StartConversation(conversation, NPC, Spawn, "All the elements I've explained will affect the outcome of a battle and whether or not you will need allies to win. Pay close attention to the lessons I have taught you, and apply them to challenges you face throughout your journeys in Norrath. Learn well and you will indeed become the great champion I know you can be!") +end \ No newline at end of file diff --git a/server/SpawnScripts/GreaterFaydark/TrainerValtteriYliveri.lua b/server/SpawnScripts/GreaterFaydark/TrainerValtteriYliveri.lua new file mode 100644 index 000000000..569505802 --- /dev/null +++ b/server/SpawnScripts/GreaterFaydark/TrainerValtteriYliveri.lua @@ -0,0 +1,266 @@ +--[[ + Script Name : SpawnScripts/GreaterFaydark/TrainerValtteriYliveri.lua + Script Purpose : Trainer Valtteri Yliveri + Script Author : John Adams + Script Date : 2009.03.01 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +function spawn(NPC) + SetPlayerProximityFunction(NPC, 10, "InRange", "LeaveRange") +end + +function respawn(NPC) + spawn(NPC) +end + +function InRange(NPC, Spawn) +end + +function LeaveRange(NPC, Spawn) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/exp03_questvo/trainer_valtteri_yliveri/_exp03/exp03_cty_kelethin/tutorials/qst_valtteri/qst_valtteri001.mp3", "", "", 936350332, 90364249, Spawn) + AddConversationOption(conversation, "Let us begin.", "dlg_55_1") + AddConversationOption(conversation, "I will return later.") + StartConversation(conversation, NPC, Spawn, "Greetings, adventurer! On behalf of Queen Amree of the Fae, I'm here to explain something very important: how your Spells, Combat Arts, and Abilities work, as well as how to improve them. It is my pleasure to share my vast knowledge with you!") +end + +function dlg_55_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/exp03_questvo/trainer_valtteri_yliveri/_exp03/exp03_cty_kelethin/tutorials/qst_valtteri/qst_valtteri002.mp3", "", "", 2453379956, 3310442892, Spawn) + AddConversationOption(conversation, "Tell me about Spells.", "dlg_55_2") + AddConversationOption(conversation, "Tell me about Combat Arts.") + AddConversationOption(conversation, "Tell me about Abilities.") + AddConversationOption(conversation, "Where do I find my Spells, Combat Arts, and Abilities?") + AddConversationOption(conversation, "How do I obtain and improve my Spells and Combat Arts?") + AddConversationOption(conversation, "I will return for instruction later.") + StartConversation(conversation, NPC, Spawn, "I am here to answer your questions. What can I help you with?") +end + +function dlg_55_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/exp03_questvo/trainer_valtteri_yliveri/_exp03/exp03_cty_kelethin/tutorials/qst_valtteri/qst_valtteri003.mp3", "", "", 19488271, 366896859, Spawn) + AddConversationOption(conversation, "Who uses Spells?", "dlg_55_3") + AddConversationOption(conversation, "I will return for instruction later.") + StartConversation(conversation, NPC, Spawn, "A Spell is a magical ability, and spells have a variety of uses. Some allow you to damage an enemy, while others might provide benefits to yourself or an ally. You can hold your mouse pointer over a Spell's icon to see a description of what it does, or right-click on it and select 'Examine.'") +end + +function dlg_55_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/exp03_questvo/trainer_valtteri_yliveri/_exp03/exp03_cty_kelethin/tutorials/qst_valtteri/qst_valtteri004.mp3", "", "", 2334805237, 1906671194, Spawn) + AddConversationOption(conversation, "I have more questions.", "dlg_55_4") + AddConversationOption(conversation, "I will return for instruction later.") + StartConversation(conversation, NPC, Spawn, "Mages, priests, paladins, shadowknights, troubadors, and dirges all cast Spells. Each class has a list of Spells that's unique. While other classes may have similar Spells, no one has capabilities exactly like that of another class. Also, certain magical items may be imbued with Spell effects that can be cast or that activate on their own.") +end + +function dlg_55_4(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/exp03_questvo/trainer_valtteri_yliveri/_exp03/exp03_cty_kelethin/tutorials/qst_valtteri/qst_valtteri002.mp3", "", "", 2453379956, 3310442892, Spawn) + AddConversationOption(conversation, "Tell me about Spells.", "dlg_55_5") + AddConversationOption(conversation, "Tell me about Combat Arts.") + AddConversationOption(conversation, "Tell me about Abilities.") + AddConversationOption(conversation, "Where do I find my Spells, Combat Arts, and Abilities?") + AddConversationOption(conversation, "How do I obtain and improve my Spells and Combat Arts?") + AddConversationOption(conversation, "I will return for instruction later.") + StartConversation(conversation, NPC, Spawn, "I am here to answer your questions. What can I help you with?") +end + +function dlg_55_5(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/exp03_questvo/trainer_valtteri_yliveri/_exp03/exp03_cty_kelethin/tutorials/qst_valtteri/qst_valtteri005.mp3", "", "", 3424416600, 3943456320, Spawn) + AddConversationOption(conversation, "Who uses Combat Arts?") + AddConversationOption(conversation, "I will return for instruction later.", "dlg_55_6") + StartConversation(conversation, NPC, Spawn, "Combat Arts are a lot like Spells, but they usually take less time to cast and cannot be interrupted. As their name implies, many Combat Arts focus on some aspect of battle.") +end + +function dlg_55_6(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/exp03_questvo/trainer_valtteri_yliveri/_exp03/exp03_cty_kelethin/tutorials/qst_valtteri/qst_valtteri006.mp3", "", "", 1083934086, 2427192984, Spawn) + AddConversationOption(conversation, "I have more questions.", "dlg_55_7") + AddConversationOption(conversation, "I will return for instruction later.") + StartConversation(conversation, NPC, Spawn, "All fighters and scouts use Combat Arts. Each of these classes has unique Combat Arts that help distinguish them from other classes. Combat Arts have names and effects that fit the class that uses them.") +end + +function dlg_55_7(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/exp03_questvo/trainer_valtteri_yliveri/_exp03/exp03_cty_kelethin/tutorials/qst_valtteri/qst_valtteri002.mp3", "", "", 2453379956, 3310442892, Spawn) + AddConversationOption(conversation, "Tell me about Spells.", "dlg_55_8") + AddConversationOption(conversation, "Tell me about Combat Arts.") + AddConversationOption(conversation, "Tell me about Abilities.") + AddConversationOption(conversation, "Where do I find my Spells, Combat Arts, and Abilities?") + AddConversationOption(conversation, "How do I obtain and improve my Spells and Combat Arts?") + AddConversationOption(conversation, "I will return for instruction later.") + StartConversation(conversation, NPC, Spawn, "I am here to answer your questions. What can I help you with?") +end + +function dlg_55_8(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/exp03_questvo/trainer_valtteri_yliveri/_exp03/exp03_cty_kelethin/tutorials/qst_valtteri/qst_valtteri007.mp3", "", "", 2389866686, 2371365661, Spawn) + AddConversationOption(conversation, "How are Abilities different from Spells and Combat Arts?") + AddConversationOption(conversation, "I will return for instruction later.") + StartConversation(conversation, NPC, Spawn, "Abilities are general things your character can do, along with certain capabilities specific to your race. Some of your Abilities are extremely useful, such as Sprint, which allows you to run very fast for a short period of time. You can also Call for Help when you're in danger, or launch a Ranged Attack if you have a ranged weapon and, of course, ammo.") +end + +function dlg_55_9(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/exp03_questvo/trainer_valtteri_yliveri/_exp03/exp03_cty_kelethin/tutorials/qst_valtteri/qst_valtteri008.mp3", "", "", 2279765563, 3684024592, Spawn) + AddConversationOption(conversation, "I have more questions.", "dlg_55_10") + AddConversationOption(conversation, "I will return for instruction later.") + StartConversation(conversation, NPC, Spawn, "Unlike Spells and Combat Arts, Abilities cannot be upgraded. Most of your Abilities are received when you first begin your adventures in Norrath, although certain new ones can be granted as you become more experienced.") +end + +function dlg_55_10(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/exp03_questvo/trainer_valtteri_yliveri/_exp03/exp03_cty_kelethin/tutorials/qst_valtteri/qst_valtteri002.mp3", "", "", 2453379956, 3310442892, Spawn) + AddConversationOption(conversation, "Tell me about Spells.", "dlg_55_11") + AddConversationOption(conversation, "Tell me about Combat Arts.") + AddConversationOption(conversation, "Tell me about Abilities.") + AddConversationOption(conversation, "Where do I find my Spells, Combat Arts, and Abilities?") + AddConversationOption(conversation, "How do I obtain and improve my Spells and Combat Arts?") + AddConversationOption(conversation, "I will return for instruction later.") + StartConversation(conversation, NPC, Spawn, "I am here to answer your questions. What can I help you with?") +end + +function dlg_55_11(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/exp03_questvo/trainer_valtteri_yliveri/_exp03/exp03_cty_kelethin/tutorials/qst_valtteri/qst_valtteri009.mp3", "", "", 1987652975, 3025156912, Spawn) + AddConversationOption(conversation, "How do I use my Spells, Combat Arts, and Abilities?") + AddConversationOption(conversation, "I will return for instruction later.") + StartConversation(conversation, NPC, Spawn, "All your Spells and Combat Arts, as well as other Abilities, are found in your Knowledge Book. Press the K key to open it at any time, and click the name of the tab you wish to view: Abilities, Spells, or Combat Arts.") +end + +function dlg_55_12(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/exp03_questvo/trainer_valtteri_yliveri/_exp03/exp03_cty_kelethin/tutorials/qst_valtteri/qst_valtteri010.mp3", "", "", 1721125392, 1598552634, Spawn) + AddConversationOption(conversation, "I have more questions.", "dlg_55_13") + AddConversationOption(conversation, "I will return for instruction later.") + StartConversation(conversation, NPC, Spawn, "To use a Spell, Combat Art, or Ability, drag its icon from your Knowledge Book onto your hotbar. Some have already been placed there for you. To use one, simply click its icon on your hotbar or press the key assigned to it. You can open additional hotbars by right-clicking on a hotbar and selecting 'Open New Hotbar.'") +end + +function dlg_55_13(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/exp03_questvo/trainer_valtteri_yliveri/_exp03/exp03_cty_kelethin/tutorials/qst_valtteri/qst_valtteri002.mp3", "", "", 2453379956, 3310442892, Spawn) + AddConversationOption(conversation, "Tell me about Spells.", "dlg_55_14") + AddConversationOption(conversation, "Tell me about Combat Arts.") + AddConversationOption(conversation, "Tell me about Abilities.") + AddConversationOption(conversation, "Where do I find my Spells, Combat Arts, and Abilities?") + AddConversationOption(conversation, "How do I obtain and improve my Spells and Combat Arts?") + AddConversationOption(conversation, "I will return for instruction later.") + StartConversation(conversation, NPC, Spawn, "I am here to answer your questions. What can I help you with?") +end + +function dlg_55_14(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/exp03_questvo/trainer_valtteri_yliveri/_exp03/exp03_cty_kelethin/tutorials/qst_valtteri/qst_valtteri011.mp3", "", "", 2108757362, 940715089, Spawn) + AddConversationOption(conversation, "How can I judge the effectiveness of my Spells and Combat Arts?") + AddConversationOption(conversation, "I will return for further instruction later.") + StartConversation(conversation, NPC, Spawn, "Most of your Spells or Combat Arts are given to you as you advance in levels from 1 to 50 and will be automatically scribed in your Knowledge Book. Certain special Spells or Combat Arts can be obtained by doing quests. Once you are level 51 and higher, you must find new ways to purchase or obtain your new Spells and Combat Arts.") +end + +function dlg_55_15(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/exp03_questvo/trainer_valtteri_yliveri/_exp03/exp03_cty_kelethin/tutorials/qst_valtteri/qst_valtteri012.mp3", "", "", 2145626237, 3819170760, Spawn) + AddConversationOption(conversation, "How can I improve my Spells and Combat Arts?", "dlg_55_16") + AddConversationOption(conversation, "I will return for further instruction later.") + StartConversation(conversation, NPC, Spawn, "There are three main ranks of Spells and Combat Arts: Apprentice, Adept, and Master. Within each rank are up to four tiers of quality. Spells and Combat Arts that are automatically granted to you are usually given at the Apprentice I rank. You should always try to have the highest rank of your Spells and Combat Arts, because they gain effectiveness as you improve them.") +end + +function dlg_55_16(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/exp03_questvo/trainer_valtteri_yliveri/_exp03/exp03_cty_kelethin/tutorials/qst_valtteri/qst_valtteri013.mp3", "", "", 272235720, 2321960215, Spawn) + AddConversationOption(conversation, "What about other ranks of Spells and Arts?", "dlg_55_17") + AddConversationOption(conversation, "I will return later.") + StartConversation(conversation, NPC, Spawn, "You can buy Apprentice II versions of your first six levels of Spells or Combat Arts. You just purchase them from the appropriate merchant. When you go back up into Kelethin, you will find a Class Trainer that sells Apprentice II versions of your Spells or Combat Arts.") +end + +function dlg_55_17(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/exp03_questvo/trainer_valtteri_yliveri/_exp03/exp03_cty_kelethin/tutorials/qst_valtteri/qst_valtteri017.mp3", "", "", 1752657986, 2894689158, Spawn) + AddConversationOption(conversation, "Are there other ways to improve my Spells and Combat Arts?", "dlg_55_18") + AddConversationOption(conversation, "I will return later.") + StartConversation(conversation, NPC, Spawn, "You will also find more potent ranks of spells and arts as you defeat opponents in battle. Many enemies will carry Adept I versions of Spells and Combat Arts, while conquering some extremely powerful foes may result in the extremely rare Master I versions.") +end + +function dlg_55_18(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/exp03_questvo/trainer_valtteri_yliveri/_exp03/exp03_cty_kelethin/tutorials/qst_valtteri/qst_valtteri014.mp3", "", "", 986284660, 3435757183, Spawn) + AddConversationOption(conversation, "Are all my Spells and Combat Arts unique?", "dlg_55_19") + AddConversationOption(conversation, "I will return for further instruction later.") + StartConversation(conversation, NPC, Spawn, "In addition, certain crafters can make upgrades to your Spells and Combat Arts using harvested components. They can create Apprentice IV quality spells, as well as valuable Adept III scrolls using rare components. Buying from or trading with other players is an excellent way to upgrade your Spells and Combat Arts.") +end + +function dlg_55_19(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/exp03_questvo/trainer_valtteri_yliveri/_exp03/exp03_cty_kelethin/tutorials/qst_valtteri/qst_valtteri015.mp3", "", "", 1198165250, 2103504074, Spawn) + AddConversationOption(conversation, "How can I keep all these Spells and Arts straight in my Knowledge Book?", "dlg_55_20") + AddConversationOption(conversation, "I will return for further instruction later.") + StartConversation(conversation, NPC, Spawn, "As you advance in level, you will obtain many completely new abilities as well as more effective versions of Spells or Combat Arts you have already learned. The names and icons of these upgrades are often quite similar, but the newer versions are more effective. Again, you will want to obtain the highest rank of these new abilities that you can.") +end + +function dlg_55_20(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/exp03_questvo/trainer_valtteri_yliveri/_exp03/exp03_cty_kelethin/tutorials/qst_valtteri/qst_valtteri016.mp3", "", "", 2671971735, 2047415775, Spawn) + AddConversationOption(conversation, "I have more questions.", "dlg_55_21") + AddConversationOption(conversation, "I will return for further instruction later.") + StartConversation(conversation, NPC, Spawn, "Your Spells and Combat Arts can easily be organized according to your individual, personal taste. Just open your Knowledge Book and click the 'Sort' button in the upper right corner. This allows you to organize your Spells and Arts for easy access to the abilities that you wish to use.") +end + +function dlg_55_21(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/exp03_questvo/trainer_valtteri_yliveri/_exp03/exp03_cty_kelethin/tutorials/qst_valtteri/qst_valtteri002.mp3", "", "", 2453379956, 3310442892, Spawn) + AddConversationOption(conversation, "Tell me about Spells.", "dlg_55_22") + AddConversationOption(conversation, "Tell me about Combat Arts.") + AddConversationOption(conversation, "Tell me about Abilities.") + AddConversationOption(conversation, "Where do I find my Spells, Combat Arts, and Abilities?") + AddConversationOption(conversation, "How do I obtain and improve my Spells and Combat Arts?") + AddConversationOption(conversation, "I will return for instruction later.") + StartConversation(conversation, NPC, Spawn, "I am here to answer your questions. What can I help you with?") +end + diff --git a/server/SpawnScripts/GreaterFaydark/TrainerVantanPerikato.lua b/server/SpawnScripts/GreaterFaydark/TrainerVantanPerikato.lua new file mode 100644 index 000000000..4b6e844e4 --- /dev/null +++ b/server/SpawnScripts/GreaterFaydark/TrainerVantanPerikato.lua @@ -0,0 +1,167 @@ +--[[ + Script Name : SpawnScripts/GreaterFaydark/TrainerVantanPerikato.lua + Script Purpose : Trainer Vantan Perikato + Script Author : John Adams + Script Date : 2009.03.01 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +function spawn(NPC) + SetPlayerProximityFunction(NPC, 10, "InRange", "LeaveRange") +end + +function respawn(NPC) + spawn(NPC) +end + +function InRange(NPC, Spawn) +end + +function LeaveRange(NPC, Spawn) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/exp03_questvo/trainer_vantan_perikato/_exp03/exp03_cty_kelethin/tutorials/qst_vantan/qst_vantan001.mp3", "", "", 1775741681, 796680136, Spawn) + AddConversationOption(conversation, "What are Heroic Opportunities?", "dlg_54_1") + AddConversationOption(conversation, "I will seek your knowledge another time.") + StartConversation(conversation, NPC, Spawn, "Hello, friend! I look at you and see someone eager to defend Kelethin by facing fierce opponents in battle. Well, I have great news! I can teach you about Heroic Opportunities, a way for you and your allies to accomplish great feats of combat prowess!") +end + +function dlg_54_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/exp03_questvo/trainer_vantan_perikato/_exp03/exp03_cty_kelethin/tutorials/qst_vantan/qst_vantan002.mp3", "", "", 42663805, 3000263371, Spawn) + AddConversationOption(conversation, "Are Heroic Opportunities complicated?", "dlg_54_2") + AddConversationOption(conversation, "I need to finish another task.") + StartConversation(conversation, NPC, Spawn, "Beginning at level 5, Heroic Opportunities can be triggered in combat. They allow both lone adventurers and groups of allies to combine their attacks into a series of spells or combat arts performed in a specific order. When successful, Heroic Opportunities give beneficial effects such as extra attacks against your foes or beneficial magic to heal or enhance your abilities.") +end + +function dlg_54_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/exp03_questvo/trainer_vantan_perikato/_exp03/exp03_cty_kelethin/tutorials/qst_vantan/qst_vantan003.mp3", "", "", 3602737112, 1910313531, Spawn) + AddConversationOption(conversation, "So how does a Heroic Opportunity arise?", "dlg_54_3") + StartConversation(conversation, NPC, Spawn, "Rest assured, someone with battle skills will find them easy! Once you start using them, you'll wonder how you ever got along without them.") +end + +function dlg_54_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/exp03_questvo/trainer_vantan_perikato/_exp03/exp03_cty_kelethin/tutorials/qst_vantan/qst_vantan004.mp3", "", "", 810984177, 2791021896, Spawn) + AddConversationOption(conversation, "Okay, that does sound easy. How do I begin a Heroic Opportunity?", "dlg_54_4") + AddConversationOption(conversation, "I need to finish something else first.") + StartConversation(conversation, NPC, Spawn, "Let me tell you the short and simple version first so that you can see how easy Heroic Opportunities are to use. All you need to do is use your ability that triggers the Heroic Opportunity, then use the spells or combat arts that are blinking on your hotbar or in your Knowledge Book. Easy, isn't it?") +end + +function dlg_54_4(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/exp03_questvo/trainer_vantan_perikato/_exp03/exp03_cty_kelethin/tutorials/qst_vantan/qst_vantan005.mp3", "", "", 3484157799, 4148998383, Spawn) + AddConversationOption(conversation, "Can I trigger a Starter Chain whenever I want?", "dlg_54_5") + AddConversationOption(conversation, "I need to finish something else first.") + StartConversation(conversation, NPC, Spawn, "Heroic Opportunities have two parts called the Starter Chain and the Combat Wheel. At level 5, every adventure class gains an ability that triggers a Starter Chain: Fighting Chance, Divine Providence, Arcane Augur, or Lucky Break. Open your Knowledge book by pressing K and click the Abilities tab to see it. You can drag its icon to your hotbar to use it.") +end + +function dlg_54_5(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/exp03_questvo/trainer_vantan_perikato/_exp03/exp03_cty_kelethin/tutorials/qst_vantan/qst_vantan006.mp3", "", "", 2038098568, 3233011247, Spawn) + AddConversationOption(conversation, "What happens when I trigger a Starter Chain?", "dlg_54_6") + StartConversation(conversation, NPC, Spawn, "Starter Chains can only be triggered while in battle with an enemy. After all, Heroic Opportunities are all about becoming great in combat! When you or an ally triggers a Starter Chain, you will see it appear in the corner of your screen.") +end + +function dlg_54_6(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/exp03_questvo/trainer_vantan_perikato/_exp03/exp03_cty_kelethin/tutorials/qst_vantan/qst_vantan007.mp3", "", "", 4289723720, 1132527077, Spawn) + AddConversationOption(conversation, "Are Heroic Opportunities only usable in groups?", "dlg_54_7") + AddConversationOption(conversation, "I'll need to continue this later.") + StartConversation(conversation, NPC, Spawn, "Once a Starter Chain is initiated, it shows different ability icons flashing on the screen. A Starter Chain will generally display four different icons that indicate which spells or combat arts advance the Heroic Opportunity to the next stage. Icons will be blue, yellow, red, or green, depending on which class has the ability.") +end + +function dlg_54_7(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/exp03_questvo/trainer_vantan_perikato/_exp03/exp03_cty_kelethin/tutorials/qst_vantan/qst_vantan008.mp3", "", "", 411831633, 722981254, Spawn) + AddConversationOption(conversation, "How do I know what I should do to advance the Starter Chain?", "dlg_54_8") + AddConversationOption(conversation, "I need to finish something else now.") + StartConversation(conversation, NPC, Spawn, "Heroic Opportunities can be used alone or in groups. If you fight alone you will have a limited number of ways to advance the Starter Chain, but if you are in a group made up of different classes then you will be able to advance the Starter Chain in different ways to unleash a variety of Heroic Opportunities.") +end + +function dlg_54_8(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/exp03_questvo/trainer_vantan_perikato/_exp03/exp03_cty_kelethin/tutorials/qst_vantan/qst_vantan009.mp3", "", "", 4143425822, 1952224436, Spawn) + AddConversationOption(conversation, "Use the spell or art that is blinking. That's all there is to it?", "dlg_54_9") + AddConversationOption(conversation, "I'll be back later.") + StartConversation(conversation, NPC, Spawn, "Any spells or combat arts that can advance the Heroic Opportunity will flash on your hotbar and in your Knowledge Book. You have 10 seconds to complete the Starter Chain and advance to the Combat Wheel. See, it's easy: just use the spell or art that blinks!") +end + +function dlg_54_9(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/exp03_questvo/trainer_vantan_perikato/_exp03/exp03_cty_kelethin/tutorials/qst_vantan/qst_vantan010.mp3", "", "", 3052449410, 2146152555, Spawn) + AddConversationOption(conversation, "Why does it trigger one of three?", "dlg_54_10") + StartConversation(conversation, NPC, Spawn, "It's quite simple. After you've advanced the Starter Chain, the bright and colorful Combat Wheel appears. The Combat Wheel shows a series of icons and displays the name of the Heroic Opportunity you have triggered. A Starter Chain will initiate one of three different Heroic Opportunities.") +end + +function dlg_54_10(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/exp03_questvo/trainer_vantan_perikato/_exp03/exp03_cty_kelethin/tutorials/qst_vantan/qst_vantan011.mp3", "", "", 2898004073, 2013528750, Spawn) + AddConversationOption(conversation, "What does the Combat Wheel tell me?", "dlg_54_11") + AddConversationOption(conversation, "I'll be back another time.") + StartConversation(conversation, NPC, Spawn, "There are three potential Heroic Opportunities: common, uncommon and rare. Each provides a different benefit. Though even the common ones are valuable, the rare event can sometimes turn the tide of battle in your favor!") +end + +function dlg_54_11(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/exp03_questvo/trainer_vantan_perikato/_exp03/exp03_cty_kelethin/tutorials/qst_vantan/qst_vantan012.mp3", "", "", 3594960522, 2732369829, Spawn) + AddConversationOption(conversation, "How can I tell the difference?", "dlg_54_12") + StartConversation(conversation, NPC, Spawn, "As with the Starter Chain, the Combat Wheel indicates which spells or arts must be performed to advance and eventually complete the heroic event. Sometimes these spells or abilities must be performed in a particular order. Other times there is no order.") +end + +function dlg_54_12(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/exp03_questvo/trainer_vantan_perikato/_exp03/exp03_cty_kelethin/tutorials/qst_vantan/qst_vantan013.mp3", "", "", 3798550664, 498535596, Spawn) + AddConversationOption(conversation, "How long do I have to complete the Heroic Opportunity?", "dlg_54_13") + AddConversationOption(conversation, "I will seek your knowledge another time.") + StartConversation(conversation, NPC, Spawn, "In the very center of the Wheel, you'll see either a clockwise-pointing arrow or arrows pointing in different directions. The clockwise arrow indicates that the abilities must be completed in order. The other types of arrows mean that the abilities can be completed in any order.") +end + +function dlg_54_13(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/exp03_questvo/trainer_vantan_perikato/_exp03/exp03_cty_kelethin/tutorials/qst_vantan/qst_vantan015.mp3", "", "", 1045091019, 199555181, Spawn) + AddConversationOption(conversation, "Any other tricks I should know?", "dlg_54_14") + AddConversationOption(conversation, "I must go now.") + StartConversation(conversation, NPC, Spawn, "It really is! As you become more familiar with using Heroic Opportunities, you can take note of the members of your group and plan out ahead of time which Opportunities will provide you the greatest benefit.") +end + +function dlg_54_14(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/exp03_questvo/trainer_vantan_perikato/_exp03/exp03_cty_kelethin/tutorials/qst_vantan/qst_vantan016.mp3", "", "", 1785885434, 1190045579, Spawn) + AddConversationOption(conversation, "Thank you for the information. I'll try Heroic Opportunities as soon as I can!", "dlg_54_15") + StartConversation(conversation, NPC, Spawn, "Scout classes have a little something extra. By using their Coin icon, the Scout can shift to another Heroic Opportunity. This shift can only happen once per Combat Wheel. This ability must also be used before any other spell or combat art has been used to advance the Wheel.") +end + diff --git a/server/SpawnScripts/GreaterFaydark/TuathilLaeds.lua b/server/SpawnScripts/GreaterFaydark/TuathilLaeds.lua new file mode 100644 index 000000000..5d62e36a7 --- /dev/null +++ b/server/SpawnScripts/GreaterFaydark/TuathilLaeds.lua @@ -0,0 +1,28 @@ +--[[ + Script Name : SpawnScripts/GreaterFaydark/TuathilLaeds.lua + Script Purpose : Tuathil Laeds + Script Author : John Adams + Script Date : 2009.03.01 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +function spawn(NPC) + SetPlayerProximityFunction(NPC, 10, "InRange", "LeaveRange") +end + +function respawn(NPC) + spawn(NPC) +end + +function InRange(NPC, Spawn) +end + +function LeaveRange(NPC, Spawn) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + + PlayFlavor(NPC, "voiceover/english/exp03_questvo2/tuathil_laeds/_exp03/exp03_rgn_greater_faydark/quest/scp/part_three/tuathil_notonquest_821c8558.mp3", "Hello there.", "", 1262918617, 2680803852, Spawn) +end + diff --git a/server/SpawnScripts/GreaterFaydark/TunaresSaplingAcornLift.lua b/server/SpawnScripts/GreaterFaydark/TunaresSaplingAcornLift.lua new file mode 100644 index 000000000..9dfcf50ce --- /dev/null +++ b/server/SpawnScripts/GreaterFaydark/TunaresSaplingAcornLift.lua @@ -0,0 +1,21 @@ +--[[ + Script Name : SpawnScripts/GreaterFaydark/TunaresSaplingAcornLift.lua + Script Purpose : Automate the Kelethin lifts + Script Author : Jabantiz + Script Date : 5/29/2018 + Script Notes : +--]] + +function spawn(NPC) + AddTransportSpawn(NPC) + AddTimer(NPC, 35000, "UseLift") +end + +function respawn(NPC) + spawn(NPC) +end + +function UseLift(NPC) + UseWidget(NPC) + AddTimer(NPC, 35000, "UseLift") +end \ No newline at end of file diff --git a/server/SpawnScripts/GreaterFaydark/TurgoBargedown.lua b/server/SpawnScripts/GreaterFaydark/TurgoBargedown.lua new file mode 100644 index 000000000..459623029 --- /dev/null +++ b/server/SpawnScripts/GreaterFaydark/TurgoBargedown.lua @@ -0,0 +1,31 @@ +--[[ + Script Name : SpawnScripts/GreaterFaydark/TurgoBargedown.lua + Script Purpose : Turgo Bargedown + Script Author : John Adams + Script Date : 2009.03.01 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +function spawn(NPC) + SetPlayerProximityFunction(NPC, 10, "InRange", "LeaveRange") +end + +function respawn(NPC) + spawn(NPC) +end + +function InRange(NPC, Spawn) +end + +function LeaveRange(NPC, Spawn) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "turgo_bargedown/_exp03/exp03_rgn_greater_faydark/turgo_bargedown/turgo_bargedown001.mp3", "", "", 1152177657, 3698837613, Spawn) + AddConversationOption(conversation, "Good luck against the orcs.", "dlg_0_1") + StartConversation(conversation, NPC, Spawn, "Nobody but NOBODY holds a son or daughter of Kaladim hostage! We'll be splittin' some orc heads to get our kinsmen back home.") +end + diff --git a/server/SpawnScripts/GreaterFaydark/VargorntheHistorian.lua b/server/SpawnScripts/GreaterFaydark/VargorntheHistorian.lua new file mode 100644 index 000000000..9447c57b2 --- /dev/null +++ b/server/SpawnScripts/GreaterFaydark/VargorntheHistorian.lua @@ -0,0 +1,82 @@ +--[[ + Script Name : SpawnScripts/GreaterFaydark/VargorntheHistorian.lua + Script Purpose : Vargorn the Historian + Script Author : John Adams + Script Date : 2009.03.01 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +function spawn(NPC) + SetPlayerProximityFunction(NPC, 10, "InRange", "LeaveRange") +end + +function respawn(NPC) + spawn(NPC) +end + +function InRange(NPC, Spawn) +end + +function LeaveRange(NPC, Spawn) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "vargorn_the_historian/_exp03/exp03_rgn_greater_faydark/vargorn_the_historian/vargorn001.mp3", "", "", 308911171, 691504057, Spawn) + AddConversationOption(conversation, "I'm not going to hit you. I didn't think orcs had scholars.", "dlg_3_1") + AddConversationOption(conversation, "You're lucky I don't kill you, orc.") + StartConversation(conversation, NPC, Spawn, "Do not hit! Vargorn is a scholar, not a fighter! Vargorn even speak your language, though not as good as he speak orc.") +end + +function dlg_3_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "vargorn_the_historian/_exp03/exp03_rgn_greater_faydark/vargorn_the_historian/vargorn002.mp3", "", "", 3408288477, 2844321717, Spawn) + AddConversationOption(conversation, "What use is history to a people bent on conquest?", "dlg_3_2") + AddConversationOption(conversation, "I'll leave you to your books.") + StartConversation(conversation, NPC, Spawn, "Clan Crushbone far more advanced than other orcs! We know powerful magic and have rich history that go back centuries. Many Crushbone orcs great writers, even in your language!") +end + +function dlg_3_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "vargorn_the_historian/_exp03/exp03_rgn_greater_faydark/vargorn_the_historian/vargorn003.mp3", "", "", 4079716341, 594828245, Spawn) + AddConversationOption(conversation, "What do you mean?", "dlg_3_3") + AddConversationOption(conversation, "I don't have an interest in this.") + StartConversation(conversation, NPC, Spawn, "Remembering history very important. Helps us not make same mistakes again. But sometimes being historian is hard work.") +end + +function dlg_3_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "vargorn_the_historian/_exp03/exp03_rgn_greater_faydark/vargorn_the_historian/vargorn004.mp3", "", "", 2082002835, 357817721, Spawn) + AddConversationOption(conversation, "What kind of conflicts?", "dlg_3_4") + AddConversationOption(conversation, "This doesn't have anything to do with me.") + StartConversation(conversation, NPC, Spawn, "Clan Crushbone history very complex, not always easy to understand. Lately Vargorn find conflicting writings that not make sense to him.") +end + +function dlg_3_4(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "vargorn_the_historian/_exp03/exp03_rgn_greater_faydark/vargorn_the_historian/vargorn005.mp3", "", "", 3599587592, 3365249265, Spawn) + AddConversationOption(conversation, "What sort of papers?", "dlg_3_5") + AddConversationOption(conversation, "Speaking of going...") + StartConversation(conversation, NPC, Spawn, "Vargorn... Vargorn better not say too much out loud. Historian who had job before Vargorn went missing after he uncover some lost papers written long ago. Vargorn not want to go missing too!") +end + +function dlg_3_5(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "vargorn_the_historian/_exp03/exp03_rgn_greater_faydark/vargorn_the_historian/vargorn006.mp3", "", "", 776831458, 368161193, Spawn) + AddConversationOption(conversation, "I will go talk to him.", "dlg_3_6") + AddConversationOption(conversation, "No thanks, run your own errands.") + StartConversation(conversation, NPC, Spawn, "Vargorn just have a few scraps. They found by friend of mine, Gorreth. He work inside castle to keep it clean. It not safe for Vargorn to talk to Gorreth to see if he find any more. Maybe you do it for me?") +end + diff --git a/server/SpawnScripts/GreaterFaydark/VenlaVaara.lua b/server/SpawnScripts/GreaterFaydark/VenlaVaara.lua new file mode 100644 index 000000000..41c438788 --- /dev/null +++ b/server/SpawnScripts/GreaterFaydark/VenlaVaara.lua @@ -0,0 +1,31 @@ +--[[ + Script Name : SpawnScripts/GreaterFaydark/VenlaVaara.lua + Script Purpose : Venla Vaara + Script Author : John Adams + Script Date : 2009.03.01 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +function spawn(NPC) + SetPlayerProximityFunction(NPC, 10, "InRange", "LeaveRange") +end + +function respawn(NPC) + spawn(NPC) +end + +function InRange(NPC, Spawn) +end + +function LeaveRange(NPC, Spawn) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_3_1005.mp3", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "I don't have any at the moment.", "dlg_38_1") + StartConversation(conversation, NPC, Spawn, "Hello there! If you have any collections that you've completed, I can take them off your hands and reward you for your time. I love collecting things!") +end + diff --git a/server/SpawnScripts/GreaterFaydark/VestinaPinaarian.lua b/server/SpawnScripts/GreaterFaydark/VestinaPinaarian.lua new file mode 100644 index 000000000..bf771e915 --- /dev/null +++ b/server/SpawnScripts/GreaterFaydark/VestinaPinaarian.lua @@ -0,0 +1,28 @@ +--[[ + Script Name : SpawnScripts/GreaterFaydark/VestinaPinaarian.lua + Script Purpose : Vestina Pinaarian + Script Author : John Adams + Script Date : 2009.03.01 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +function spawn(NPC) + SetPlayerProximityFunction(NPC, 10, "InRange", "LeaveRange") +end + +function respawn(NPC) + spawn(NPC) +end + +function InRange(NPC, Spawn) +end + +function LeaveRange(NPC, Spawn) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + + PlayFlavor(NPC, "", "I am sorry but I cannot stop to chat just now!", "curtsey", 1689589577, 4560189, Spawn) +end + diff --git a/server/SpawnScripts/GreaterFaydark/Whittier.lua b/server/SpawnScripts/GreaterFaydark/Whittier.lua new file mode 100644 index 000000000..545bbab6e --- /dev/null +++ b/server/SpawnScripts/GreaterFaydark/Whittier.lua @@ -0,0 +1,28 @@ +--[[ + Script Name : SpawnScripts/GreaterFaydark/Whittier.lua + Script Purpose : Whittier + Script Author : John Adams + Script Date : 2009.03.01 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +function spawn(NPC) + SetPlayerProximityFunction(NPC, 10, "InRange", "LeaveRange") +end + +function respawn(NPC) + spawn(NPC) +end + +function InRange(NPC, Spawn) +end + +function LeaveRange(NPC, Spawn) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + + PlayFlavor(NPC, "voiceover/english/exp03_questvo/whittier/_exp03/exp03_cty_kelethin/quest/quest_whittier_noquest_7082ff66.mp3", "Have you spoken with Lady Aileeta? Or perhaps Traeger Verdegreen? They're always interested in helping young folks out.", "", 3367616050, 2231632654, Spawn) +end + diff --git a/server/SpawnScripts/GreaterFaydark/YarinSkystride.lua b/server/SpawnScripts/GreaterFaydark/YarinSkystride.lua new file mode 100644 index 000000000..f634467b5 --- /dev/null +++ b/server/SpawnScripts/GreaterFaydark/YarinSkystride.lua @@ -0,0 +1,59 @@ +--[[ + Script Name : SpawnScripts/GreaterFaydark/YarinSkystride.lua + Script Purpose : Yarin Skystride + Script Author : John Adams + Script Date : 2009.03.01 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +function spawn(NPC) + SetPlayerProximityFunction(NPC, 10, "InRange", "LeaveRange") +end + +function respawn(NPC) + spawn(NPC) +end + +function InRange(NPC, Spawn) +end + +function LeaveRange(NPC, Spawn) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_1_1006.mp3", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "I would like the writ: Crushbone Sentries", "dlg_2_1") + AddConversationOption(conversation, "I would like the writ: Crushbone Conscripts") + AddConversationOption(conversation, "I am too busy at this time to help, though it is a worthy cause.") + StartConversation(conversation, NPC, Spawn, "Welcome to the Sylvan Hunters, .. GetName(Spawn) .. . The lands of Faydwer can be a very dangerous place. We could use your help making it safer for our people and allies.") + if convo==3 then + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_3_1006.mp3", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "I would like the writ: Crushbone Sentries", "dlg_3_1") + AddConversationOption(conversation, "I would like the writ: Crushbone Conscripts") + AddConversationOption(conversation, "I am too busy at this time to help, though it is a worthy cause.") + StartConversation(conversation, NPC, Spawn, "Welcome to the Sylvan Hunters, .. GetName(Spawn) .. . The lands of Faydwer can be a very dangerous place. We could use your help making it safer for our people and allies.") + end + + if convo==16 then + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_1_1006.mp3", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "I would like the writ: Crushbone Sentries", "dlg_16_1") + AddConversationOption(conversation, "I would like the writ: Crushbone Conscripts") + AddConversationOption(conversation, "I would like the writ: Crushbone Sparrers") + AddConversationOption(conversation, "I am too busy at this time to help, though it is a worthy cause.") + StartConversation(conversation, NPC, Spawn, "Welcome to the Sylvan Hunters, .. GetName(Spawn) .. . The lands of Faydwer can be a very dangerous place. We could use your help making it safer for our people and allies.") + end + +end + +function dlg_16_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Thank you, I'll get started right away.", "dlg_16_2") + StartConversation(conversation, NPC, Spawn, "The Sylvan Hunters would like for you to eliminate Crushbone sentries to further our cause. Doing so will earn you favor with our organization.") +end + diff --git a/server/SpawnScripts/GreaterFaydark/YstanaMirefaith.lua b/server/SpawnScripts/GreaterFaydark/YstanaMirefaith.lua new file mode 100644 index 000000000..fc09cdfaf --- /dev/null +++ b/server/SpawnScripts/GreaterFaydark/YstanaMirefaith.lua @@ -0,0 +1,28 @@ +--[[ + Script Name : SpawnScripts/GreaterFaydark/YstanaMirefaith.lua + Script Purpose : Ystana Mirefaith + Script Author : John Adams + Script Date : 2009.03.01 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +function spawn(NPC) + SetPlayerProximityFunction(NPC, 10, "InRange", "LeaveRange") +end + +function respawn(NPC) + spawn(NPC) +end + +function InRange(NPC, Spawn) +end + +function LeaveRange(NPC, Spawn) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + + PlayFlavor(NPC, "voiceover/english/exp03_questvo2/ystana_mirefaith/_exp03/exp03_rgn_greater_faydark/quest/scp/ystana_mirefaith_notonquest_3bf17faa.mp3", "This land is amazingly beautiful.", "", 3090745431, 792109295, Spawn) +end + diff --git a/server/SpawnScripts/GreaterFaydark/ZeegoMiemo.lua b/server/SpawnScripts/GreaterFaydark/ZeegoMiemo.lua new file mode 100644 index 000000000..8fb766266 --- /dev/null +++ b/server/SpawnScripts/GreaterFaydark/ZeegoMiemo.lua @@ -0,0 +1,28 @@ +--[[ + Script Name : SpawnScripts/GreaterFaydark/ZeegoMiemo.lua + Script Purpose : Zeego Miemo + Script Author : John Adams + Script Date : 2009.03.01 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +function spawn(NPC) + SetPlayerProximityFunction(NPC, 10, "InRange", "LeaveRange") +end + +function respawn(NPC) + spawn(NPC) +end + +function InRange(NPC, Spawn) +end + +function LeaveRange(NPC, Spawn) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + + PlayFlavor(NPC, "", "Well met!", "", 1689589577, 4560189, Spawn) +end + diff --git a/server/SpawnScripts/GreaterFaydark/ZemketheWolf.lua b/server/SpawnScripts/GreaterFaydark/ZemketheWolf.lua new file mode 100644 index 000000000..ae10ccb5c --- /dev/null +++ b/server/SpawnScripts/GreaterFaydark/ZemketheWolf.lua @@ -0,0 +1,28 @@ +--[[ + Script Name : SpawnScripts/GreaterFaydark/ZemketheWolf.lua + Script Purpose : Zemke the Wolf + Script Author : John Adams + Script Date : 2009.03.01 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +function spawn(NPC) + SetPlayerProximityFunction(NPC, 10, "InRange", "LeaveRange") +end + +function respawn(NPC) + spawn(NPC) +end + +function InRange(NPC, Spawn) +end + +function LeaveRange(NPC, Spawn) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + + PlayFlavor(NPC, "", "I hope you're ready for some serious training!", "", 1689589577, 4560189, Spawn) +end + diff --git a/server/SpawnScripts/GreaterFaydark/ZephyreViolethair.lua b/server/SpawnScripts/GreaterFaydark/ZephyreViolethair.lua new file mode 100644 index 000000000..442b35518 --- /dev/null +++ b/server/SpawnScripts/GreaterFaydark/ZephyreViolethair.lua @@ -0,0 +1,164 @@ +--[[ + Script Name : SpawnScripts/GreaterFaydark/ZephyreViolethair.lua + Script Purpose : Zephyre Violethair + Script Author : John Adams + Script Date : 2009.03.01 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +function spawn(NPC) + SetPlayerProximityFunction(NPC, 10, "InRange", "LeaveRange") +end + +function respawn(NPC) + spawn(NPC) +end + +function InRange(NPC, Spawn) +end + +function LeaveRange(NPC, Spawn) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_2_1005.mp3", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "I might.", "dlg_21_1") + AddConversationOption(conversation, "Actually, I was hoping you could tell me a bit about Kelethin.") + AddConversationOption(conversation, "No, sorry.") + StartConversation(conversation, NPC, Spawn, "Hi! Do you have a moment to help me out?") + if convo==22 then + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_3_1005.mp3", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "I might.", "dlg_22_1") + AddConversationOption(conversation, "Actually, I was hoping you could tell me a bit about Kelethin.") + AddConversationOption(conversation, "No, sorry.") + StartConversation(conversation, NPC, Spawn, "Hi! Do you have a moment to help me out?") + end + + if convo==23 then + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_3_1005.mp3", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "I might.", "dlg_23_1") + AddConversationOption(conversation, "Actually, I was hoping you could tell me a bit about Kelethin.") + AddConversationOption(conversation, "No, sorry.") + StartConversation(conversation, NPC, Spawn, "Hi! Do you have a moment to help me out?") + end + +end + +function dlg_21_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "How did the Fae come to take over the city?") + AddConversationOption(conversation, "I've changed my mind. What did you need help with?", "dlg_21_2") + StartConversation(conversation, NPC, Spawn, "Yes. What would you like to know?") +end + +function dlg_21_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "I'd be glad to help.") + AddConversationOption(conversation, "Sorry, I have something else to attend to just now.", "dlg_21_3") + StartConversation(conversation, NPC, Spawn, "My family has always lived in Kelethin and I'd like to honor their memories. The problem I'm having is those darn orcs! They send out their scouts and disrupt me at my prayers. I'd like to have them cleared out so that I can finish the ritual to honor my ancestors in peace.") +end + +function dlg_22_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "How did the Fae come to take over the city?") + AddConversationOption(conversation, "I've changed my mind. What did you need help with?", "dlg_22_2") + StartConversation(conversation, NPC, Spawn, "Yes. What would you like to know?") +end + +function dlg_22_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "What happened to your family?", "dlg_22_3") + StartConversation(conversation, NPC, Spawn, "It wasn't a 'take over.' Not the way the orcs would've done. They developed an affinity for us, the Feir'Dal. We're quite similar in many ways, actually. The Fae helped rebuild Kelethin after the War of the Fay, and over time, came to look upon it as their home.") +end + +function dlg_22_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "There are very few wood elves in Kelethin now.", "dlg_22_4") + StartConversation(conversation, NPC, Spawn, "My family's roots have been in Kelethin for many Ages. I'm the last one now, so it's important for me to keep up what traditions are left. When the Word of the Tranquil came to Kelethin, most of my friends left, presumably to Qeynos. Others wandered away, seeking guidance from the gods. And of course, the gods did not respond.") +end + +function dlg_22_4(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Have the orcs ever attacked Kelethin directly?", "dlg_22_5") + AddConversationOption(conversation, "I see.") + StartConversation(conversation, NPC, Spawn, "Seems that way, doesn't it? Many of us prefer to keep to ourselves now. Some, like me and Traeger, are fine with all the newcomers. Maybe it's the catalyst we need, to stop living in the past and to think of the future.") +end + +function dlg_22_5(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "How long did that last?", "dlg_22_6") + StartConversation(conversation, NPC, Spawn, "Those cowards have seen fit only to besiege Kelethin, for they know that our magic is stronger than theirs. Ours is the power of Growth, which their kind cannot appreciate. When the Second Rallosian Army rampaged elsewhere, the orcs tried to burn us down, then settled beneath us in siege.") +end + +function dlg_22_6(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "How did Kelethin survive?", "dlg_22_7") + StartConversation(conversation, NPC, Spawn, "Long enough, unfortunately. Though Growth is our ally, it cannot conjure up sustenance for a city for that length of time. And many perished defending the lifts. The Fae erected a barrier beneath Kelethin to keep the orcs away, but they weren't strong enough to deter them entirely.") +end + +function dlg_22_7(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "What was it you needed help with again?", "dlg_22_8") + AddConversationOption(conversation, "Thank you for telling me this.") + StartConversation(conversation, NPC, Spawn, "The Rallosian Army was defeated by the Green Mist. Our orcs met a different scourge--the brownies of the Lesser Faydark. We're not sure what motivated them, but they came to our aid, breaking the siege. And when they'd won, they simply returned home. I suspect they routed the orcs just because they could.") +end + +function dlg_22_8(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "I'd be glad to help.", "dlg_22_9") + AddConversationOption(conversation, "Sorry, I have something else to attend to just now.") + StartConversation(conversation, NPC, Spawn, "My family has always lived in Kelethin and I'd like to honor their memories. The problem I'm having is those darn orcs! They send out their scouts and disrupt me at my prayers. I'd like to have them cleared out so that I can finish the ritual to honor my ancestors in peace.") +end + +function dlg_23_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "I'd be glad to help.", "dlg_23_2") + AddConversationOption(conversation, "Sorry, I have something else to attend to just now.") + StartConversation(conversation, NPC, Spawn, "My family has always lived in Kelethin and I'd like to honor their memories. The problem I'm having is those darn orcs! They send out their scouts and disrupt me at my prayers. I'd like to have them cleared out so that I can finish the ritual to honor my ancestors in peace.") +end + +function dlg_23_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "I'll do my best.", "dlg_23_3") + StartConversation(conversation, NPC, Spawn, "Could you? That's great! Though the Feir'Dal are not as prominent here as we once were, we still keep to the old ways as much as we can. You have no idea what your help means to me!") +end + diff --git a/server/SpawnScripts/GreaterFaydark/ZilendarPilimaartu.lua b/server/SpawnScripts/GreaterFaydark/ZilendarPilimaartu.lua new file mode 100644 index 000000000..5c091e034 --- /dev/null +++ b/server/SpawnScripts/GreaterFaydark/ZilendarPilimaartu.lua @@ -0,0 +1,31 @@ +--[[ + Script Name : SpawnScripts/GreaterFaydark/ZilendarPilimaartu.lua + Script Purpose : Zilendar Pilimaartu + Script Author : John Adams + Script Date : 2009.03.01 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +function spawn(NPC) + SetPlayerProximityFunction(NPC, 10, "InRange", "LeaveRange") +end + +function respawn(NPC) + spawn(NPC) +end + +function InRange(NPC, Spawn) +end + +function LeaveRange(NPC, Spawn) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_1_1040.mp3", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "No, thanks.", "dlg_4_1") + StartConversation(conversation, NPC, Spawn, "Can I help you?") +end + diff --git a/server/SpawnScripts/GreaterFaydark/aCrushboneemissary.lua b/server/SpawnScripts/GreaterFaydark/aCrushboneemissary.lua new file mode 100644 index 000000000..83f635085 --- /dev/null +++ b/server/SpawnScripts/GreaterFaydark/aCrushboneemissary.lua @@ -0,0 +1,28 @@ +--[[ + Script Name : SpawnScripts/GreaterFaydark/aCrushboneemissary.lua + Script Purpose : a Crushbone emissary + Script Author : John Adams + Script Date : 2009.03.01 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +function spawn(NPC) + SetPlayerProximityFunction(NPC, 10, "InRange", "LeaveRange") +end + +function respawn(NPC) + spawn(NPC) +end + +function InRange(NPC, Spawn) +end + +function LeaveRange(NPC, Spawn) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + + PlayFlavor(NPC, "voiceover/english/exp03_combatvo/orc_crushbone3/ft/_exp03/orc/orc_crushbone_3_garbled_af736579.mp3", "cnshwy iwop mjf awq esfsd ghlkap adohab qweuo!", "", 1761139167, 3632284500, Spawn) +end + diff --git a/server/SpawnScripts/GreaterFaydark/aCrushbonepawn.lua b/server/SpawnScripts/GreaterFaydark/aCrushbonepawn.lua new file mode 100644 index 000000000..9b5fbfa80 --- /dev/null +++ b/server/SpawnScripts/GreaterFaydark/aCrushbonepawn.lua @@ -0,0 +1,28 @@ +--[[ + Script Name : SpawnScripts/GreaterFaydark/aCrushbonepawn.lua + Script Purpose : a Crushbone pawn + Script Author : John Adams + Script Date : 2009.03.01 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +function spawn(NPC) + SetPlayerProximityFunction(NPC, 10, "InRange", "LeaveRange") +end + +function respawn(NPC) + spawn(NPC) +end + +function InRange(NPC, Spawn) +end + +function LeaveRange(NPC, Spawn) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + + PlayFlavor(NPC, "voiceover/english/exp03_combatvo/orc_crushbone_common1/ft/_exp03/orc/orc_crushbone_common_1_garbled_cb5832b1.mp3", "lkjlk werw zvxc iopoi qerwer!", "", 3260126986, 183723036, Spawn) +end + diff --git a/server/SpawnScripts/GreaterFaydark/aGigglegibberGoblinGamblinGameVendor.lua b/server/SpawnScripts/GreaterFaydark/aGigglegibberGoblinGamblinGameVendor.lua new file mode 100644 index 000000000..822e2990e --- /dev/null +++ b/server/SpawnScripts/GreaterFaydark/aGigglegibberGoblinGamblinGameVendor.lua @@ -0,0 +1,237 @@ +--[[ + Script Name : SpawnScripts/GreaterFaydark/aGigglegibberGoblinGamblinGameVendor.lua + Script Purpose : a Gigglegibber Goblin Gamblin' Game Vendor + Script Author : John Adams + Script Date : 2009.03.01 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +function spawn(NPC) + SetPlayerProximityFunction(NPC, 10, "InRange", "LeaveRange") +end + +function respawn(NPC) + spawn(NPC) +end + +function InRange(NPC, Spawn) +end + +function LeaveRange(NPC, Spawn) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "How did a goblin get in here? Don't you kill people?", "dlg_0_1") + AddConversationOption(conversation, "I think I'd rather keep my money, thanks.") + StartConversation(conversation, NPC, Spawn, "Buy ticket, you! Only ten shiny coins! You give just ten shiny coins and maybe you get um... many shinier coins!") + if convo==1 then + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "How did a goblin get in here? Don't you kill people?", "dlg_1_1") + AddConversationOption(conversation, "What do you know about the disappearance of Lord Bowsprite?") + AddConversationOption(conversation, "I think I'd rather keep my money, thanks.") + StartConversation(conversation, NPC, Spawn, "Buy ticket, you! Only ten shiny coins! You give just ten shiny coins and maybe you get um... many shinier coins!") + end + + if convo==2 then + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "How did a goblin get in here? Don't you kill people?", "dlg_2_1") + AddConversationOption(conversation, "What do you know about the disappearance of Lord Bowsprite?") + AddConversationOption(conversation, "I think I'd rather keep my money, thanks.") + StartConversation(conversation, NPC, Spawn, "Buy ticket, you! Only ten shiny coins! You give just ten shiny coins and maybe you get um... many shinier coins!") + end + + if convo==3 then + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "How did a goblin get in here? Don't you kill people?", "dlg_3_1") + AddConversationOption(conversation, "What do you know about the disappearance of Lord Bowsprite?") + AddConversationOption(conversation, "I think I'd rather keep my money, thanks.") + StartConversation(conversation, NPC, Spawn, "Buy ticket, you! Only ten shiny coins! You give just ten shiny coins and maybe you get um... many shinier coins!") + end + + if convo==8 then + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "How did a goblin get in here? Don't you kill people?", "dlg_8_1") + AddConversationOption(conversation, "I think I'd rather keep my money, thanks.") + StartConversation(conversation, NPC, Spawn, "Buy ticket, you! Only ten shiny coins! You give just ten shiny coins and maybe you get um... many shinier coins!") + end + + if convo==9 then + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "How did a goblin get in here? Don't you kill people?", "dlg_9_1") + AddConversationOption(conversation, "I think I'd rather keep my money, thanks.") + StartConversation(conversation, NPC, Spawn, "Buy ticket, you! Only ten shiny coins! You give just ten shiny coins and maybe you get um... many shinier coins!") + end + + if convo==10 then + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "How did a goblin get in here? Don't you kill people?", "dlg_10_1") + AddConversationOption(conversation, "I think I'd rather keep my money, thanks.") + StartConversation(conversation, NPC, Spawn, "Buy ticket, you! Only ten shiny coins! You give just ten shiny coins and maybe you get um... many shinier coins!") + end + + if convo==16 then + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "How did a goblin get in here? Don't you kill people?", "dlg_16_1") + AddConversationOption(conversation, "What do you know about the disappearance of Lord Bowsprite?") + AddConversationOption(conversation, "I think I'd rather keep my money, thanks.") + StartConversation(conversation, NPC, Spawn, "Buy ticket, you! Only ten shiny coins! You give just ten shiny coins and maybe you get um... many shinier coins!") + end + + if convo==20 then + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "How did a goblin get in here? Don't you kill people?", "dlg_20_1") + AddConversationOption(conversation, "I think I'd rather keep my money, thanks.") + StartConversation(conversation, NPC, Spawn, "Buy ticket, you! Only ten shiny coins! You give just ten shiny coins and maybe you get um... many shinier coins!") + end + +end + +function dlg_0_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Bowsprite... Not Bowspit.") + AddConversationOption(conversation, "On second thought, I'll be going now.", "dlg_0_2") + StartConversation(conversation, NPC, Spawn, "Lord who? I's never met no one named Bowspit.") +end + +function dlg_0_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Who said he was an elf? Fess up or I'll tell everyone the Gigglegibber gambling game is rigged!", "dlg_0_3") + AddConversationOption(conversation, "Yeah, this is going to be like pulling teeth. Nevermind.") + StartConversation(conversation, NPC, Spawn, "Oh... Well, um, I's still don't know nothing about that elf.") +end + +function dlg_0_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Tell me where it is. You don't want me to ruin your business do you?", "dlg_0_4") + AddConversationOption(conversation, "On second thought, I'll be going now.") + StartConversation(conversation, NPC, Spawn, "Noes, noes, you can't do that! Fine, I'll tells you everything. We have Bowspit at the super secret hideout, but you can't go there. No way.") +end + +function dlg_0_4(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "You've been helpful, thanks.", "dlg_0_5") + StartConversation(conversation, NPC, Spawn, "You gonna gets me in a lot of trouble, you know. I'll tells you, but I don't exactly remember where it is. All I remember is the entrance is at the bottom of the water, under the docks, where the halfies and fairies play. We all haves to take the boat to get there. That's all I'm telling you! Now goes away.") +end + +function dlg_1_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Bowsprite... Not Bowspit.") + AddConversationOption(conversation, "On second thought, I'll be going now.", "dlg_1_2") + StartConversation(conversation, NPC, Spawn, "Lord who? I's never met no one named Bowspit.") +end + +function dlg_2_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Why are potatoes funny?", "dlg_2_2") + AddConversationOption(conversation, "On second thought, I'll be going now.") + StartConversation(conversation, NPC, Spawn, "Gigglegibber goblins not kill people! War no fun at all. Gigglegibber goblins like shiny coins and funny things! We like frogs, fluffy kittens, potatoes... You have potatoes?") +end + +function dlg_2_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "I'll think about it.", "dlg_2_3") + StartConversation(conversation, NPC, Spawn, "They tasty! Not funny!... though Gribbik carved funny face in a potato once. That was funny until he eated it. Hey! No try to tricks me with talk about potatoes. You still pays ten shiny coins for ticket! Buy many tickets! If you buys more maybe you win more than many shiny coins!") +end + +function dlg_9_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Why are potatoes funny?", "dlg_9_2") + AddConversationOption(conversation, "On second thought, I'll be going now.") + StartConversation(conversation, NPC, Spawn, "Gigglegibber goblins not kill people! War no fun at all. Gigglegibber goblins like shiny coins and funny things! We like frogs, fluffy kittens, potatoes... You have potatoes?") +end + +function dlg_9_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "I'll think about it.", "dlg_9_3") + StartConversation(conversation, NPC, Spawn, "They tasty! Not funny!... though Gribbik carved funny face in a potato once. That was funny until he eated it. Hey! No try to tricks me with talk about potatoes. You still pays ten shiny coins for ticket! Buy many tickets! If you buys more maybe you win more than many shiny coins!") +end + +function dlg_10_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Why are potatoes funny?", "dlg_10_2") + AddConversationOption(conversation, "On second thought, I'll be going now.") + StartConversation(conversation, NPC, Spawn, "Gigglegibber goblins not kill people! War no fun at all. Gigglegibber goblins like shiny coins and funny things! We like frogs, fluffy kittens, potatoes... You have potatoes?") +end + +function dlg_10_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "I'll think about it.", "dlg_10_3") + StartConversation(conversation, NPC, Spawn, "They tasty! Not funny!... though Gribbik carved funny face in a potato once. That was funny until he eated it. Hey! No try to tricks me with talk about potatoes. You still pays ten shiny coins for ticket! Buy many tickets! If you buys more maybe you win more than many shiny coins!") +end + +function dlg_16_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Bowsprite... Not Bowspit.") + AddConversationOption(conversation, "On second thought, I'll be going now.", "dlg_16_2") + StartConversation(conversation, NPC, Spawn, "Lord who? I's never met no one named Bowspit.") +end + +function dlg_16_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Who said he was an elf? Fess up or I'll tell everyone the gambling game is rigged!", "dlg_16_3") + AddConversationOption(conversation, "On second thought, I'll be going now.") + StartConversation(conversation, NPC, Spawn, "Ohh... Well, um, I's still don't know nothing about that elf.") +end + +function dlg_16_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Tell me where it is. You don't want me to ruin your business do you?", "dlg_16_4") + AddConversationOption(conversation, "On second thought, I'll be going now.") + StartConversation(conversation, NPC, Spawn, "Noes, noes, you can't do that! Fine, I'll tells you everything. We have Bowspit at the super secret hideout, but you can't go there. No way.") +end + +function dlg_16_4(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "You've been helpful, thanks.", "dlg_16_5") + StartConversation(conversation, NPC, Spawn, "You gonna gets me in a lot of trouble, you know. I'll tells you, but I don't exactly remember where it is. All I remember is the entrance is at the bottom of the water, under the docks, where the halfies and fairies play. We all haves to take the boat to get there. That's all I'm telling you! Now goes away before no one wants tickets anymore.") +end + diff --git a/server/SpawnScripts/GreaterFaydark/aShroombacultivator1.lua b/server/SpawnScripts/GreaterFaydark/aShroombacultivator1.lua new file mode 100644 index 000000000..678d1f067 --- /dev/null +++ b/server/SpawnScripts/GreaterFaydark/aShroombacultivator1.lua @@ -0,0 +1,27 @@ +--[[ + Script Name : SpawnScripts/GreaterFaydark/aShroombacultivator1.lua + Script Purpose : Shroomba Cultivator wanderer + Script Author : John Adams + Script Date : 2009.03.29 + Script Notes : There are a few of these, different wander paths. +--]] + +function spawn(NPC) + MovementLoopAddLocation(NPC, -82.36, -31.72, -300.98, 3, 0) + MovementLoopAddLocation(NPC, -61.74, -32.41, -286.65, 3, 0) + MovementLoopAddLocation(NPC, -55.17, -32.44, -285.26, 3, 0) + MovementLoopAddLocation(NPC, -42.96, -32.35, -285.70, 3, 0) + MovementLoopAddLocation(NPC, -57.95, -32.44, -284.10, 3, 0) + MovementLoopAddLocation(NPC, -62.57, -32.42, -288.96, 3, 0) + MovementLoopAddLocation(NPC, -74.56, -31.57, -292.37, 3, 0) + MovementLoopAddLocation(NPC, -79.73, -31.08, -299.55, 3, 0) + MovementLoopAddLocation(NPC, -82.31, -31.99, -302.37, 3, 0) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) +end + +function respawn(NPC) + spawn(NPC) +end diff --git a/server/SpawnScripts/GreaterFaydark/aShroombacultivator2.lua b/server/SpawnScripts/GreaterFaydark/aShroombacultivator2.lua new file mode 100644 index 000000000..a396f55f4 --- /dev/null +++ b/server/SpawnScripts/GreaterFaydark/aShroombacultivator2.lua @@ -0,0 +1,23 @@ +--[[ + Script Name : SpawnScripts/GreaterFaydark/aShroombacultivator2.lua + Script Purpose : Shroomba Cultivator wanderer + Script Author : John Adams + Script Date : 2009.03.29 + Script Notes : There are a few of these, different wander paths. +--]] + +function spawn(NPC) + MovementLoopAddLocation(NPC, -59.50, -32.48, -282.04, 3, 0) + MovementLoopAddLocation(NPC, -64.61, -33.52, -270.39, 3, 0) + MovementLoopAddLocation(NPC, -67.55, -34.13, -265.84, 3, 0) + MovementLoopAddLocation(NPC, -74.28, -37.07, -255.57, 3, 0) + MovementLoopAddLocation(NPC, -81.84, -40.42, -231.17, 3, 0) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) +end + +function respawn(NPC) + spawn(NPC) +end diff --git a/server/SpawnScripts/GreaterFaydark/aShroombacultivator3.lua b/server/SpawnScripts/GreaterFaydark/aShroombacultivator3.lua new file mode 100644 index 000000000..bf206dd76 --- /dev/null +++ b/server/SpawnScripts/GreaterFaydark/aShroombacultivator3.lua @@ -0,0 +1,31 @@ +--[[ + Script Name : SpawnScripts/GreaterFaydark/aShroombacultivator3.lua + Script Purpose : Shroomba Cultivator wanderer + Script Author : John Adams + Script Date : 2009.03.29 + Script Notes : There are a few of these, different wander paths. +--]] + +function spawn(NPC) + MovementLoopAddLocation(NPC, -37.30, -32.48, -286.42, 3, 0) + MovementLoopAddLocation(NPC, -32.70, -32.56, -287.75, 3, 0) + MovementLoopAddLocation(NPC, -27.33, -32.93, -288.51, 3, 0) + MovementLoopAddLocation(NPC, -24.45, -33.66, -291.42, 3, 0) + MovementLoopAddLocation(NPC, -20.75, -34.78, -297.80, 3, 0) + MovementLoopAddLocation(NPC, -19.32, -35.35, -301.71, 3, 0) + MovementLoopAddLocation(NPC, -15.30, -35.85, -304.51, 3, 0) + MovementLoopAddLocation(NPC, -11.54, -36.41, -308.52, 3, 0) + MovementLoopAddLocation(NPC, -11.80, -36.62, -311.61, 3, 0) + MovementLoopAddLocation(NPC, -7.48, -37.27, -319.21, 3, 0) + MovementLoopAddLocation(NPC, -7.80, -37.40, -321.31, 3, 0) + MovementLoopAddLocation(NPC, -3.70, -37.75, -326.00, 3, 0) + MovementLoopAddLocation(NPC, 2.35, -37.95, -330.94, 3, 0) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) +end + +function respawn(NPC) + spawn(NPC) +end diff --git a/server/SpawnScripts/GreaterFaydark/aShroombacultivator4.lua b/server/SpawnScripts/GreaterFaydark/aShroombacultivator4.lua new file mode 100644 index 000000000..aad9052e6 --- /dev/null +++ b/server/SpawnScripts/GreaterFaydark/aShroombacultivator4.lua @@ -0,0 +1,29 @@ +--[[ + Script Name : SpawnScripts/GreaterFaydark/aShroombacultivator4.lua + Script Purpose : Shroomba Cultivator wanderer + Script Author : John Adams + Script Date : 2009.03.29 + Script Notes : There are a few of these, different wander paths. +--]] + +function spawn(NPC) + MovementLoopAddLocation(NPC, -1.12, -38.15, -337.43, 3, 0) + MovementLoopAddLocation(NPC, -2.92, -38.36, -343.18, 3, 0) + MovementLoopAddLocation(NPC, -6.57, -38.35, -346.78, 3, 0) + MovementLoopAddLocation(NPC, -9.25, -38.31, -352.26, 3, 0) + MovementLoopAddLocation(NPC, -7.18, -38.33, -352.04, 3, 0) + MovementLoopAddLocation(NPC, -14.03, -38.33, -359.53, 3, 0) + MovementLoopAddLocation(NPC, -12.99, -38.33, -359.51, 3, 0) + MovementLoopAddLocation(NPC, -19.66, -38.13, -363.79, 3, 0) + MovementLoopAddLocation(NPC, -28.06, -38.08, -369.64, 3, 0) + MovementLoopAddLocation(NPC, -37.48, -37.98, -375.70, 3, 0) + MovementLoopAddLocation(NPC, -40.94, -37.90, -378.42, 3, 0) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) +end + +function respawn(NPC) + spawn(NPC) +end diff --git a/server/SpawnScripts/GreaterFaydark/aShroombacultivator5.lua b/server/SpawnScripts/GreaterFaydark/aShroombacultivator5.lua new file mode 100644 index 000000000..713defa6d --- /dev/null +++ b/server/SpawnScripts/GreaterFaydark/aShroombacultivator5.lua @@ -0,0 +1,27 @@ +--[[ + Script Name : SpawnScripts/GreaterFaydark/aShroombacultivator5.lua + Script Purpose : Shroomba Cultivator wanderer + Script Author : John Adams + Script Date : 2009.03.29 + Script Notes : There are a few of these, different wander paths. +--]] + +function spawn(NPC) + MovementLoopAddLocation(NPC, -41.56, -37.86, -377.56, 3, 0) + MovementLoopAddLocation(NPC, -27.47, -38.07, -367.70, 3, 0) + MovementLoopAddLocation(NPC, -23.42, -37.96, -367.50, 3, 0) + MovementLoopAddLocation(NPC, -14.07, -38.32, -360.40, 3, 0) + MovementLoopAddLocation(NPC, -16.16, -38.28, -360.46, 3, 0) + MovementLoopAddLocation(NPC, -10.24, -38.31, -352.91, 3, 0) + MovementLoopAddLocation(NPC, -7.47, -38.33, -350.15, 3, 0) + MovementLoopAddLocation(NPC, -6.03, -38.37, -345.24, 3, 0) + MovementLoopAddLocation(NPC, -2.93, -38.33, -341.59, 3, 0) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) +end + +function respawn(NPC) + spawn(NPC) +end diff --git a/server/SpawnScripts/GreaterFaydark/afaesoldier.lua b/server/SpawnScripts/GreaterFaydark/afaesoldier.lua new file mode 100644 index 000000000..3d154b395 --- /dev/null +++ b/server/SpawnScripts/GreaterFaydark/afaesoldier.lua @@ -0,0 +1,38 @@ +--[[ + Script Name : SpawnScripts/GreaterFaydark/afaesoldier.lua + Script Purpose : a fae soldier + Script Author : John Adams + Script Date : 2009.03.01 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +function spawn(NPC) + SetPlayerProximityFunction(NPC, 10, "InRange", "LeaveRange") +end + +function respawn(NPC) + spawn(NPC) +end + +function InRange(NPC, Spawn) +end + +function LeaveRange(NPC, Spawn) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + + choice = math.random(1,3) + + if choice == 1 then + PlayFlavor(NPC, "", "Watch out, those grobins can be pretty tricky buggers.", "glare", 1689589577, 4560189, Spawn) + elseif choice == 2 then + PlayFlavor(NPC, "", "Thinking happy thoughts won't get you airborne. It takes practice and strength to soar!", "scold", 1689589577, 4560189, Spawn) + elseif choice == 3 then + PlayFlavor(NPC, "", "Ick... caves. I hate being trapped underground, it makes it so hard to fly away from danger.", "cringe", 1689589577, 4560189, Spawn) + else + end + +end + diff --git a/server/SpawnScripts/GreaterFaydark/aformidablesparringpartner.lua b/server/SpawnScripts/GreaterFaydark/aformidablesparringpartner.lua new file mode 100644 index 000000000..bdbafe71a --- /dev/null +++ b/server/SpawnScripts/GreaterFaydark/aformidablesparringpartner.lua @@ -0,0 +1,28 @@ +--[[ + Script Name : SpawnScripts/GreaterFaydark/aformidablesparringpartner.lua + Script Purpose : a formidable sparring partner + Script Author : John Adams + Script Date : 2009.03.01 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +function spawn(NPC) + SetPlayerProximityFunction(NPC, 10, "InRange", "LeaveRange") +end + +function respawn(NPC) + spawn(NPC) +end + +function InRange(NPC, Spawn) +end + +function LeaveRange(NPC, Spawn) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + + PlayFlavor(NPC, "", "You can attack me whenever you're ready. You can do that by double-clicking me, by right clicking me and selecting "attack," by using an offensive ability while you have me targeted, or by turning on auto attack by pressing the ~ key while you have me targeted.", "", 1689589577, 4560189, Spawn) +end + diff --git a/server/SpawnScripts/GreaterFaydark/agrobindigger.lua b/server/SpawnScripts/GreaterFaydark/agrobindigger.lua new file mode 100644 index 000000000..0a0fd92e7 --- /dev/null +++ b/server/SpawnScripts/GreaterFaydark/agrobindigger.lua @@ -0,0 +1,28 @@ +--[[ + Script Name : SpawnScripts/GreaterFaydark/agrobindigger.lua + Script Purpose : a grobin digger + Script Author : John Adams + Script Date : 2009.03.01 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +function spawn(NPC) + SetPlayerProximityFunction(NPC, 10, "InRange", "LeaveRange") +end + +function respawn(NPC) + spawn(NPC) +end + +function InRange(NPC, Spawn) +end + +function LeaveRange(NPC, Spawn) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + + PlayFlavor(NPC, "voiceover/english/exp03_combatvo/goblin_greater_faydark/ft/_exp03/goblin/goblin_greater_faydark_battle_4e5ee4ae.mp3", "Smash the squishies.", "", 3016834030, 2330929155, Spawn) +end + diff --git a/server/SpawnScripts/GreaterFaydark/agrobineggkeeper.lua b/server/SpawnScripts/GreaterFaydark/agrobineggkeeper.lua new file mode 100644 index 000000000..2b9317d37 --- /dev/null +++ b/server/SpawnScripts/GreaterFaydark/agrobineggkeeper.lua @@ -0,0 +1,28 @@ +--[[ + Script Name : SpawnScripts/GreaterFaydark/agrobineggkeeper.lua + Script Purpose : a grobin eggkeeper + Script Author : John Adams + Script Date : 2009.03.01 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +function spawn(NPC) + SetPlayerProximityFunction(NPC, 10, "InRange", "LeaveRange") +end + +function respawn(NPC) + spawn(NPC) +end + +function InRange(NPC, Spawn) +end + +function LeaveRange(NPC, Spawn) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + + PlayFlavor(NPC, "voiceover/english/exp03_combatvo/goblin_greater_faydark/ft/_exp03/goblin/goblin_greater_faydark_death_31b8eb31.mp3", "I shall grow no more!", "", 2582377610, 2713862197, Spawn) +end + diff --git a/server/SpawnScripts/GreaterFaydark/agrobinpolluter.lua b/server/SpawnScripts/GreaterFaydark/agrobinpolluter.lua new file mode 100644 index 000000000..4c202aa04 --- /dev/null +++ b/server/SpawnScripts/GreaterFaydark/agrobinpolluter.lua @@ -0,0 +1,28 @@ +--[[ + Script Name : SpawnScripts/GreaterFaydark/agrobinpolluter.lua + Script Purpose : a grobin polluter + Script Author : John Adams + Script Date : 2009.03.01 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +function spawn(NPC) + SetPlayerProximityFunction(NPC, 10, "InRange", "LeaveRange") +end + +function respawn(NPC) + spawn(NPC) +end + +function InRange(NPC, Spawn) +end + +function LeaveRange(NPC, Spawn) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + + PlayFlavor(NPC, "voiceover/english/exp03_combatvo/goblin_greater_faydark/ft/_exp03/goblin/goblin_greater_faydark_aggro_c809bb68.mp3", "I grow bigger than you!", "", 1365081195, 1786804084, Spawn) +end + diff --git a/server/SpawnScripts/GreaterFaydark/agrobinscout.lua b/server/SpawnScripts/GreaterFaydark/agrobinscout.lua new file mode 100644 index 000000000..512f464da --- /dev/null +++ b/server/SpawnScripts/GreaterFaydark/agrobinscout.lua @@ -0,0 +1,28 @@ +--[[ + Script Name : SpawnScripts/GreaterFaydark/agrobinscout.lua + Script Purpose : a grobin scout + Script Author : John Adams + Script Date : 2009.03.01 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +function spawn(NPC) + SetPlayerProximityFunction(NPC, 10, "InRange", "LeaveRange") +end + +function respawn(NPC) + spawn(NPC) +end + +function InRange(NPC, Spawn) +end + +function LeaveRange(NPC, Spawn) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + + PlayFlavor(NPC, "voiceover/english/exp03_combatvo/goblin_greater_faydark/ft/_exp03/goblin/goblin_greater_faydark_battle_603b0f3b.mp3", "Run away from the mines!", "", 861506750, 2339330363, Spawn) +end + diff --git a/server/SpawnScripts/GreaterFaydark/agrobinsentry.lua b/server/SpawnScripts/GreaterFaydark/agrobinsentry.lua new file mode 100644 index 000000000..2addb3343 --- /dev/null +++ b/server/SpawnScripts/GreaterFaydark/agrobinsentry.lua @@ -0,0 +1,40 @@ +--[[ + Script Name : SpawnScripts/GreaterFaydark/agrobinsentry.lua + Script Purpose : a grobin sentry + Script Author : John Adams + Script Date : 2009.03.01 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +function spawn(NPC) + SetPlayerProximityFunction(NPC, 10, "InRange", "LeaveRange") +end + +function respawn(NPC) + spawn(NPC) +end + +function InRange(NPC, Spawn) +end + +function LeaveRange(NPC, Spawn) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + + choice = math.random(1,4) + + if choice == 1 then + PlayFlavor(NPC, "voiceover/english/exp03_combatvo/goblin_greater_faydark/ft/_exp03/goblin/goblin_greater_faydark_aggro_c809bb68.mp3", "I grow bigger than you!", "", 1365081195, 1786804084, Spawn) + elseif choice == 2 then + PlayFlavor(NPC, "voiceover/english/exp03_combatvo/goblin_greater_faydark/ft/_exp03/goblin/goblin_greater_faydark_battle_25d9a433.mp3", "Grum! Grum! ", "", 1460066353, 1003945639, Spawn) + elseif choice == 3 then + PlayFlavor(NPC, "voiceover/english/exp03_combatvo/goblin_greater_faydark/ft/_exp03/goblin/goblin_greater_faydark_death_31b8eb31.mp3", "I shall grow no more!", "", 2582377610, 2713862197, Spawn) + elseif choice == 4 then + PlayFlavor(NPC, "voiceover/english/exp03_combatvo/goblin_greater_faydark/ft/_exp03/goblin/goblin_greater_faydark_battle_4e5ee4ae.mp3", "Smash the squishies.", "", 3016834030, 2330929155, Spawn) + else + end + +end + diff --git a/server/SpawnScripts/GreaterFaydark/agrobinsporeharvester.lua b/server/SpawnScripts/GreaterFaydark/agrobinsporeharvester.lua new file mode 100644 index 000000000..ce321c249 --- /dev/null +++ b/server/SpawnScripts/GreaterFaydark/agrobinsporeharvester.lua @@ -0,0 +1,36 @@ +--[[ + Script Name : SpawnScripts/GreaterFaydark/agrobinsporeharvester.lua + Script Purpose : a grobin sporeharvester + Script Author : John Adams + Script Date : 2009.03.01 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +function spawn(NPC) + SetPlayerProximityFunction(NPC, 10, "InRange", "LeaveRange") +end + +function respawn(NPC) + spawn(NPC) +end + +function InRange(NPC, Spawn) +end + +function LeaveRange(NPC, Spawn) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + + choice = math.random(1,2) + + if choice == 1 then + PlayFlavor(NPC, "voiceover/english/exp03_combatvo/goblin_greater_faydark/ft/_exp03/goblin/goblin_greater_faydark_aggro_c809bb68.mp3", "I grow bigger than you!", "", 1365081195, 1786804084, Spawn) + elseif choice == 2 then + PlayFlavor(NPC, "voiceover/english/exp03_combatvo/goblin_greater_faydark/ft/_exp03/goblin/goblin_greater_faydark_death_31b8eb31.mp3", "I shall grow no more!", "", 2582377610, 2713862197, Spawn) + else + end + +end + diff --git a/server/SpawnScripts/GreaterFaydark/amininglookout(female).lua b/server/SpawnScripts/GreaterFaydark/amininglookout(female).lua new file mode 100644 index 000000000..4519b7f9a --- /dev/null +++ b/server/SpawnScripts/GreaterFaydark/amininglookout(female).lua @@ -0,0 +1,38 @@ +--[[ + Script Name : SpawnScripts/GreaterFaydark/amininglookout(female).lua + Script Purpose : a mining lookout + Script Author : John Adams + Script Date : 2009.03.01 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +function spawn(NPC) + SetPlayerProximityFunction(NPC, 10, "InRange", "LeaveRange") +end + +function respawn(NPC) + spawn(NPC) +end + +function InRange(NPC, Spawn) +end + +function LeaveRange(NPC, Spawn) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + + choice = math.random(1,3) + + if choice == 1 then + PlayFlavor(NPC, "", "I'm 'ere to watch the miners' backs down there.", "", 1689589577, 4560189, Spawn) + elseif choice == 2 then + PlayFlavor(NPC, "", "I'm keepin' me eyes peeled!", "", 1689589577, 4560189, Spawn) + elseif choice == 3 then + PlayFlavor(NPC, "", "If there be any threats, I sound the alarm.", "", 1689589577, 4560189, Spawn) + else + end + +end + diff --git a/server/SpawnScripts/GreaterFaydark/amininglookout.lua b/server/SpawnScripts/GreaterFaydark/amininglookout.lua new file mode 100644 index 000000000..f89bec6ce --- /dev/null +++ b/server/SpawnScripts/GreaterFaydark/amininglookout.lua @@ -0,0 +1,40 @@ +--[[ + Script Name : SpawnScripts/GreaterFaydark/amininglookout.lua + Script Purpose : a mining lookout + Script Author : John Adams + Script Date : 2009.03.01 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +function spawn(NPC) + SetPlayerProximityFunction(NPC, 10, "InRange", "LeaveRange") +end + +function respawn(NPC) + spawn(NPC) +end + +function InRange(NPC, Spawn) + hailed(NPC, Spawn) +end + +function LeaveRange(NPC, Spawn) +end + +function hailed(NPC, Spawn) + + choice = math.random(1,4) + + if choice == 1 then + PlayFlavor(NPC, "", "I'm 'ere to watch the miners' backs down there.", "", 1689589577, 4560189, Spawn) + elseif choice == 2 then + PlayFlavor(NPC, "", "I'm keepin' me eyes peeled!", "", 1689589577, 4560189, Spawn) + elseif choice == 3 then + PlayFlavor(NPC, "", "Look at Brackus down there! I'm glad 'is wife is hard of seein'.", "", 1689589577, 4560189, Spawn) + elseif choice == 4 then + PlayFlavor(NPC, "", "If there be any threats, I sound the alarm.", "", 1689589577, 4560189, Spawn) + else + end + +end + diff --git a/server/SpawnScripts/GreaterFaydark/anaveragesparringpartner.lua b/server/SpawnScripts/GreaterFaydark/anaveragesparringpartner.lua new file mode 100644 index 000000000..eb2b328de --- /dev/null +++ b/server/SpawnScripts/GreaterFaydark/anaveragesparringpartner.lua @@ -0,0 +1,28 @@ +--[[ + Script Name : SpawnScripts/GreaterFaydark/anaveragesparringpartner.lua + Script Purpose : an average sparring partner + Script Author : John Adams + Script Date : 2009.03.01 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +function spawn(NPC) + SetPlayerProximityFunction(NPC, 10, "InRange", "LeaveRange") +end + +function respawn(NPC) + spawn(NPC) +end + +function InRange(NPC, Spawn) +end + +function LeaveRange(NPC, Spawn) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + + PlayFlavor(NPC, "", "You can attack me whenever you're ready. You can do that by double-clicking me, by right clicking me and selecting "attack," by using an offensive ability while you have me targeted, or by turning on auto attack by pressing the ~ key while you have me targeted.", "", 1689589577, 4560189, Spawn) +end + diff --git a/server/SpawnScripts/GreaterFaydark/anexpeditionguard.lua b/server/SpawnScripts/GreaterFaydark/anexpeditionguard.lua new file mode 100644 index 000000000..b6fba8e45 --- /dev/null +++ b/server/SpawnScripts/GreaterFaydark/anexpeditionguard.lua @@ -0,0 +1,28 @@ +--[[ + Script Name : SpawnScripts/GreaterFaydark/anexpeditionguard.lua + Script Purpose : an expedition guard + Script Author : John Adams + Script Date : 2009.03.01 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +function spawn(NPC) + SetPlayerProximityFunction(NPC, 10, "InRange", "LeaveRange") +end + +function respawn(NPC) + spawn(NPC) +end + +function InRange(NPC, Spawn) +end + +function LeaveRange(NPC, Spawn) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + + PlayFlavor(NPC, "", "Don't disturb us! We 'ave work to do!", "", 1689589577, 4560189, Spawn) +end + diff --git a/server/SpawnScripts/GreaterFaydark/apunishedmagiapprentice.lua b/server/SpawnScripts/GreaterFaydark/apunishedmagiapprentice.lua new file mode 100644 index 000000000..c5ee26ba7 --- /dev/null +++ b/server/SpawnScripts/GreaterFaydark/apunishedmagiapprentice.lua @@ -0,0 +1,41 @@ +--[[ + Script Name : SpawnScripts/GreaterFaydark/apunishedmagiapprentice.lua + Script Purpose : a punished magi apprentice + Script Author : John Adams + Script Date : 2009.03.01 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +function spawn(NPC) + SetPlayerProximityFunction(NPC, 10, "InRange", "LeaveRange") +end + +function respawn(NPC) + spawn(NPC) +end + +function InRange(NPC, Spawn) +end + +function LeaveRange(NPC, Spawn) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "a_punished_magi_apprentice/_exp03/exp03_rgn_greater_faydark/punished_orc_magi/punished_orc_magi001.mp3", "", "", 1609553154, 632780580, Spawn) + AddConversationOption(conversation, "Why are you working here with the slaves?", "dlg_2_1") + AddConversationOption(conversation, "Nothing, I'm leaving.") + StartConversation(conversation, NPC, Spawn, "Whatta you want? ") +end + +function dlg_2_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "a_punished_magi_apprentice/_exp03/exp03_rgn_greater_faydark/punished_orc_magi/punished_orc_magi002.mp3", "", "", 2021609601, 1807140680, Spawn) + AddConversationOption(conversation, "Good luck with the hard labor.", "dlg_2_2") + StartConversation(conversation, NPC, Spawn, "I'm being punished by that old inky hag. So what if I scorched her precious robe! She's a horrible teacher!") +end + diff --git a/server/SpawnScripts/GreaterFaydark/ascorchedskeletalapprentice.lua b/server/SpawnScripts/GreaterFaydark/ascorchedskeletalapprentice.lua new file mode 100644 index 000000000..bde0c0c4c --- /dev/null +++ b/server/SpawnScripts/GreaterFaydark/ascorchedskeletalapprentice.lua @@ -0,0 +1,36 @@ +--[[ + Script Name : SpawnScripts/GreaterFaydark/ascorchedskeletalapprentice.lua + Script Purpose : a scorched skeletal apprentice + Script Author : John Adams + Script Date : 2009.03.01 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +function spawn(NPC) + SetPlayerProximityFunction(NPC, 10, "InRange", "LeaveRange") +end + +function respawn(NPC) + spawn(NPC) +end + +function InRange(NPC, Spawn) +end + +function LeaveRange(NPC, Spawn) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + + choice = math.random(1,2) + + if choice == 1 then + PlayFlavor(NPC, "voiceover/english/exp03_combatvo/skeleton_greater_faydark_spires_1/ft/_exp03/skeleton/skeleton_greater_faydark_spires_1_aggro_c9c1b5c3.mp3", "The fires of the ether are under my control.", "", 3718978052, 2123849989, Spawn) + elseif choice == 2 then + PlayFlavor(NPC, "voiceover/english/exp03_combatvo/skeleton_greater_faydark_spires_1/ft/_exp03/skeleton/skeleton_greater_faydark_spires_1_death_82c44f30.mp3", "I will return.", "", 1809370740, 654770967, Spawn) + else + end + +end + diff --git a/server/SpawnScripts/GreaterFaydark/ascorchedskeletalwizard.lua b/server/SpawnScripts/GreaterFaydark/ascorchedskeletalwizard.lua new file mode 100644 index 000000000..49bad720a --- /dev/null +++ b/server/SpawnScripts/GreaterFaydark/ascorchedskeletalwizard.lua @@ -0,0 +1,28 @@ +--[[ + Script Name : SpawnScripts/GreaterFaydark/ascorchedskeletalwizard.lua + Script Purpose : a scorched skeletal wizard + Script Author : John Adams + Script Date : 2009.03.01 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +function spawn(NPC) + SetPlayerProximityFunction(NPC, 10, "InRange", "LeaveRange") +end + +function respawn(NPC) + spawn(NPC) +end + +function InRange(NPC, Spawn) +end + +function LeaveRange(NPC, Spawn) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + + PlayFlavor(NPC, "voiceover/english/exp03_combatvo/skeleton_greater_faydark_spires_1/ft/_exp03/skeleton/skeleton_greater_faydark_spires_1_battle_56eb06a6.mp3", "When the spires come back to life, so shall I.", "", 2290356808, 2998409398, Spawn) +end + diff --git a/server/SpawnScripts/GreaterFaydark/astablemaster.lua b/server/SpawnScripts/GreaterFaydark/astablemaster.lua new file mode 100644 index 000000000..35c637a4d --- /dev/null +++ b/server/SpawnScripts/GreaterFaydark/astablemaster.lua @@ -0,0 +1,265 @@ + --[[ + Script Name : SpawnScripts/GreaterFaydark/astablemaster.lua + Script Purpose : a stable master (1140115) + Script Author : Neatz09 + Script Date : 4/16/2019 + Script Notes : +--]] + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_2_1042.mp3", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "I would like to travel.", "dlg_1_1") + AddConversationOption(conversation, "Nowhere.") + StartConversation(conversation, NPC, Spawn, "Greetings traveler, how can I assist you today?") + end + +function dlg_1_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + local con = CreateConversation() + + if GetSpawnLocationID(NPC) == 202854 then + --Butcherblock Mountains-- + AddConversationOption(con, "To Crushbone", "BBMToCrush") + AddConversationOption(con, "To Kelethin.", "BBMToKel") + AddConversationOption(con, "To Lesser Faydark.", "BBMToLFay") + AddConversationOption(con, "To Loping Plains.", "BBMToPlains") + AddConversationOption(con, "To New Tunaria.", "BBMToTuna") + AddConversationOption(con, "To Steamfont Mountains.", "BBMToSFM") + elseif GetSpawnLocationID(NPC) == 595026 then + --Crushbone-- + AddConversationOption(con, "To Butcherblock Mountains.", "CrushToBBM") + AddConversationOption(con, "To Kelethin.", "CrushToKel") + AddConversationOption(con, "To Lesser Faydark.", "CrushToLFay") + AddConversationOption(con, "To Loping Plains.", "CrushToPlains") + AddConversationOption(con, "To New Tunaria.", "CrushToTuna") + AddConversationOption(con, "To Steamfont Mountains.", "CrushToSFM") + elseif GetSpawnLocationID(NPC) == 1586029 then + --Lesser Faydark-- + AddConversationOption(con, "To Butcherblock Mountains.", "LFayToBBM") + AddConversationOption(con, "To Crushbone.", "LFayToCrush") + AddConversationOption(con, "To Kelethin.", "LFayToKel") + AddConversationOption(con, "To Loping Plains.", "LFayToPlains") + AddConversationOption(con, "To New Tunaria.", "LFayToTuna") + AddConversationOption(con, "To Steamfont Mountains.", "LFayToSFM") + elseif GetSpawnLocationID(NPC) == 202850 then + --Loping Plains-- + AddConversationOption(con, "To Butcherblock Mountains.", "PlainsToBBM") + AddConversationOption(con, "To Crushbone.", "PlainsToCrush") + AddConversationOption(con, "To Kelethin.", "PlainsToKel") + AddConversationOption(con, "To Lesser Faydark.", "PlainsToLFay") + AddConversationOption(con, "To New Tunaria.", "PlainsToTuna") + AddConversationOption(con, "To Steamfont Mountains.", "PlainsToSFM") + elseif GetSpawnLocationID(NPC) == 202847 then + --New Tunaria-- + AddConversationOption(con, "To Butcherblock Mountains.", "TunaToBBM") + AddConversationOption(con, "To Crushbone.", "TunaToCrush") + AddConversationOption(con, "To Kelethin.", "TunaToKel") + AddConversationOption(con, "To Lesser Faydark.", "TunaToLFay") + AddConversationOption(con, "To Loping Plains.", "TunaToPlains") + AddConversationOption(con, "To Steamfont Mountains.", "TunaToSFM") + elseif GetSpawnLocationID(NPC) == 202849 then + --Steamfont Mountains-- + AddConversationOption(con, "To Butcherblock Mountains.", "SFMToBBM") + AddConversationOption(con, "To Crushbone.", "SFMToCrush") + AddConversationOption(con, "To Kelethin.", "SFMToKel") + AddConversationOption(con, "To Lesser Faydark.", "SFMToLFay") + AddConversationOption(con, "To Loping Plains.", "SFMToPlains") + AddConversationOption(con, "To New Tunaria.", "SFMToTuna") + --MISSING KELETHIN STATIONS KEL ID 205477 + else + PlayFlavor(NPC, "", "Not implemented yet!", "cry", 0, 0, Spawn) + end + AddConversationOption(con, "Nowhere.") + StartConversation(con, NPC, Spawn, "Where to?") +end + +function BBMToCrush(NPC, Spawn) + StartAutoMount(Spawn, 140) + SetMount(Spawn, 6846) +end + +function BBMToKel(NPC, Spawn) + StartAutoMount(Spawn, 129) + SetMount(Spawn, 6846) +end + +function BBMToLFay(NPC, Spawn) + StartAutoMount(Spawn, 143) + SetMount(Spawn, 6846) +end + +function BBMToPlains(NPC, Spawn) + StartAutoMount(Spawn, 144) + SetMount(Spawn, 6846) +end + +function BBMToTuna(NPC, Spawn) + StartAutoMount(Spawn, 141) + SetMount(Spawn, 6846) +end + +function BBMToSFM(NPC, Spawn) + StartAutoMount(Spawn, 142) + SetMount(Spawn, 6846) +end + +function CrushToBBM(NPC, Spawn) + StartAutoMount(Spawn, 146) + SetMount(Spawn, 6846) +end + +function CrushToKel(NPC, Spawn) + StartAutoMount(Spawn, 132) + SetMount(Spawn, 6846) +end + +function CrushToLFay(NPC, Spawn) + StartAutoMount(Spawn, 148) + SetMount(Spawn, 6846) +end + +function CrushToPlains(NPC, Spawn) + StartAutoMount(Spawn, 149) + SetMount(Spawn, 6846) +end + +function CrushToTuna(NPC, Spawn) + StartAutoMount(Spawn, 145) + SetMount(Spawn, 6846) +end + +function CrushToSFM(NPC, Spawn) + StartAutoMount(Spawn, 147) + SetMount(Spawn, 6846) +end + +function LFayToBBM(NPC, Spawn) + StartAutoMount(Spawn, 151) + SetMount(Spawn, 6846) +end + +function LFayToCrush(NPC, Spawn) + StartAutoMount(Spawn, 150) + SetMount(Spawn, 6846) +end + +function LFayToKel(NPC, Spawn) + StartAutoMount(Spawn, 133) + SetMount(Spawn, 6846) +end + +function LFayToPlains(NPC, Spawn) + StartAutoMount(Spawn, 154) + SetMount(Spawn, 6846) +end + +function LFayToTuna(NPC, Spawn) + StartAutoMount(Spawn, 153) + SetMount(Spawn, 6846) +end + +function LFayToSFM(NPC, Spawn) + StartAutoMount(Spawn, 152) + SetMount(Spawn, 6846) +end + +function PlainsToBBM(NPC, Spawn) + StartAutoMount(Spawn, 156) + SetMount(Spawn, 6846) +end + +function PlainsToCrush(NPC, Spawn) + StartAutoMount(Spawn, 155) + SetMount(Spawn, 6846) +end + +function PlainsToKel(NPC, Spawn) + StartAutoMount(Spawn, 134) + SetMount(Spawn,6846) +end + +function PlainsToLFay(NPC, Spawn) + StartAutoMount(Spawn, 158) + SetMount(Spawn, 6846) +end + +function PlainsToTuna(NPC, Spawn) + StartAutoMount(Spawn, 159) + SetMount(Spawn, 6846) +end + +function PlainsToSFM(NPC, Spawn) + StartAutoMount(Spawn, 157) + SetMount(Spawn, 6846) +end + +function DocksToFoothills(NPC, Spawn) + StartAutoMount(Spawn, 43) + SetMount(Spawn, 6846) +end + +function TunaToBBM(NPC, Spawn) + StartAutoMount(Spawn, 161) + SetMount(Spawn, 6846) +end + +function TunaToCrush(NPC, Spawn) + StartAutoMount(Spawn, 160) + SetMount(Spawn, 6846) +end + +function TunaToKel(NPC, Spawn) + StartAutoMount(Spawn, 130) + SetMount(Spawn, 6846) +end + +function TunaToLFay(NPC, Spawn) + StartAutoMount(Spawn, 163) + SetMount(Spawn, 6846) +end + +function TunaToPlains(NPC, Spawn) + StartAutoMount(Spawn, 164) + SetMount(Spawn, 6846) +end + +function TunaToSFM(NPC, Spawn) + StartAutoMount(Spawn, 162) + SetMount(Spawn, 6846) +end + +function SFMToBBM(NPC, Spawn) + StartAutoMount(Spawn, 136) + SetMount(Spawn, 6846) +end + +function SFMToCrush(NPC, Spawn) + StartAutoMount(Spawn, 135) + SetMount(Spawn, 6846) +end + +function SFMToKel(NPC, Spawn) + StartAutoMount(Spawn, 131) + SetMount(Spawn, 6846) +end + +function SFMToLFay(NPC, Spawn) + StartAutoMount(Spawn, 138) + SetMount(Spawn, 6846) +end + +function SFMToPlains(NPC, Spawn) + StartAutoMount(Spawn, 139) + SetMount(Spawn, 6846) +end + +function SFMToTuna(NPC, Spawn) + StartAutoMount(Spawn, 137) + SetMount(Spawn, 6846) +end \ No newline at end of file diff --git a/server/SpawnScripts/GreaterFaydark/aweaksparringpartner.lua b/server/SpawnScripts/GreaterFaydark/aweaksparringpartner.lua new file mode 100644 index 000000000..9d357b95a --- /dev/null +++ b/server/SpawnScripts/GreaterFaydark/aweaksparringpartner.lua @@ -0,0 +1,28 @@ +--[[ + Script Name : SpawnScripts/GreaterFaydark/aweaksparringpartner.lua + Script Purpose : a weak sparring partner + Script Author : John Adams + Script Date : 2009.03.01 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +function spawn(NPC) + SetPlayerProximityFunction(NPC, 10, "InRange", "LeaveRange") +end + +function respawn(NPC) + spawn(NPC) +end + +function InRange(NPC, Spawn) +end + +function LeaveRange(NPC, Spawn) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + + PlayFlavor(NPC, "", "You can attack me whenever you're ready. You can do that by double-clicking me, by right clicking me and selecting "attack," by using an offensive ability while you have me targeted, or by turning on auto attack by pressing the ~ key while you have me targeted.", "", 1689589577, 4560189, Spawn) +end + diff --git a/server/SpawnScripts/GreaterFaydark/grobins.lua b/server/SpawnScripts/GreaterFaydark/grobins.lua new file mode 100644 index 000000000..00e92aec4 --- /dev/null +++ b/server/SpawnScripts/GreaterFaydark/grobins.lua @@ -0,0 +1,48 @@ +--[[ + Script Name : SpawnScripts/GreaterFaydark/generic_grobin.lua + Script Purpose : a grobin (anything) + Script Author : John Adams + Script Date : 2009.02.06 + Script Notes : JA - the math.random upper value, I just made up. Tune to your liking. + : Also note that if you run across a "grobin" that should say something different, create a new spawnscript for it. +--]] + + +function aggro(NPC, Spawn) + FaceTarget(NPC, Spawn) + choice = math.random(1,2) + if choice == 1 then + PlayFlavor(NPC, "voiceover/english/exp03_combatvo/goblin_greater_faydark/ft/_exp03/goblin/goblin_greater_faydark_aggro_68f43c9.mp3", "Arroop!", "", 789139818, 1768762311, Spawn) + elseif choice == 2 then + PlayFlavor(NPC, "voiceover/english/exp03_combatvo/goblin_greater_faydark/ft/_exp03/goblin/goblin_greater_faydark_aggro_c809bb68.mp3", "I grow bigger than you!", "", 1365081195, 1786804084, Spawn) + else + -- say nothing + end + +end + +function healthchanged(NPC) + + if GetCurrentHP(NPC) <= (GetMaxHP(NPC) / 2) then + choice = math.random(1,4) + if choice == 1 then + PlayFlavor(NPC, "voiceover/english/exp03_combatvo/goblin_greater_faydark/ft/_exp03/goblin/goblin_greater_faydark_battle_25d9a433.mp3", "Grum! Grum! ", "", 1460066353, 1003945639, Spawn) + elseif choice == 2 then + PlayFlavor(NPC, "voiceover/english/exp03_combatvo/goblin_greater_faydark/ft/_exp03/goblin/goblin_greater_faydark_battle_4e5ee4ae.mp3", "Smash the squishies.", "", 3016834030, 2330929155, Spawn) + elseif choice == 3 then + PlayFlavor(NPC, "voiceover/english/exp03_combatvo/goblin_greater_faydark/ft/_exp03/goblin/goblin_greater_faydark_battle_603b0f3b.mp3", "Run away from the mines!", "", 861506750, 2339330363, Spawn) + elseif choice == 4 then + PlayFlavor(NPC, "voiceover/english/exp03_combatvo/goblin_greater_faydark/ft/_exp03/goblin/goblin_greater_faydark_battle_cf61b767.mp3", "Groblin's go!", "", 1309387887, 223459313, Spawn) + else + -- say nothing + end + end + +end + +function death(NPC, Spawn) + choice = math.random(1,1) + if choice == 1 then + PlayFlavor(NPC, "voiceover/english/exp03_combatvo/goblin_greater_faydark/ft/_exp03/goblin/goblin_greater_faydark_death_31b8eb31.mp3", "I shall grow no more!", "", 2582377610, 2713862197, Spawn) + end +end diff --git a/server/SpawnScripts/Haven/GrabbyGigglegibber.lua b/server/SpawnScripts/Haven/GrabbyGigglegibber.lua new file mode 100644 index 000000000..e3aa9360d --- /dev/null +++ b/server/SpawnScripts/Haven/GrabbyGigglegibber.lua @@ -0,0 +1,28 @@ +--[[ + Script Name : SpawnScripts/Haven/GrabbyGigglegibber.lua + Script Purpose : Grabby Gigglegibber + Script Author : TyroneSWG + Script Date : 2019.01.14 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +function spawn(NPC) + SetPlayerProximityFunction(NPC, 10, "InRange", "LeaveRange") +end + +function respawn(NPC) + spawn(NPC) +end + +function InRange(NPC, Spawn) +end + +function LeaveRange(NPC, Spawn) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + + PlayFlavor(NPC, "", "If you gets treats off creepy crawly or undead beasties, do let me know!", "nod", 1689589577, 4560189, Spawn) +end + diff --git a/server/SpawnScripts/IllbodingDark1/OrugDeathmaker.lua b/server/SpawnScripts/IllbodingDark1/OrugDeathmaker.lua new file mode 100644 index 000000000..e5a45347c --- /dev/null +++ b/server/SpawnScripts/IllbodingDark1/OrugDeathmaker.lua @@ -0,0 +1,24 @@ +--[[ + Script Name : SpawnScripts/CaveofIllbodingDark/OrugDeathmaker.lua + Script Purpose : for the spawn "Orug Deathmaker" + Script Author : theFoof + Script Date : 2013.6.19 + Script Notes : +--]] + +function spawn(NPC) + SetPlayerProximityFunction(NPC, 10, "Warning") +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) +end + +function Warning(NPC) + PlayFlavor(NPC, "", "You dare to meddle with Orug Deathmaker? You will fall here!", "", 1689589577, 4560189) +end + diff --git a/server/SpawnScripts/IllbodingDark1/blackshard.lua b/server/SpawnScripts/IllbodingDark1/blackshard.lua new file mode 100644 index 000000000..e17959be8 --- /dev/null +++ b/server/SpawnScripts/IllbodingDark1/blackshard.lua @@ -0,0 +1,30 @@ +--[[ + Script Name : SpawnScripts/IllbodingDark1/blackshard.lua + Script Purpose : for the black shard spawns in zone 516 and 517 + Script Author : theFoof + Script Date : 2013.6.19 + Script Notes : +--]] + +local SeveringHead = 72 + +function spawn(NPC) + SpawnSet(NPC, "action_state", "2623") + SetRequiredQuest(GetSpawnByLocationID(GetZone(NPC), 465212), SeveringHead, 2) + SetRequiredQuest(GetSpawnByLocationID(GetZone(NPC), 465211), SeveringHead) +end + +function respawn(NPC) + spawn(NPC) +end + +function casted_on(NPC, Spawn, SpellName) + if SpellName == "Smash the stone!" then + if GetQuestStep(Spawn, SeveringHead) == 2 then + SetStepComplete(Spawn, SeveringHead, 2) + SpawnSet(GetSpawnByLocationID(GetZone(NPC), 465211), "visual_state", "0") + SpawnSet(NPC, "visual_state", "18193") + AddTimer(NPC, 500, "Despawn") + end + end +end \ No newline at end of file diff --git a/server/SpawnScripts/JarsathWastes/asokokartamer.lua b/server/SpawnScripts/JarsathWastes/asokokartamer.lua new file mode 100644 index 000000000..2c3660a8a --- /dev/null +++ b/server/SpawnScripts/JarsathWastes/asokokartamer.lua @@ -0,0 +1,373 @@ +--[[ + Script Name : SpawnScripts/JarsathWastes/asokokartamer.lua + Script Purpose : a sokokar Tamer (2650089) + Script Author : Neatz09 + Script Date : 4/20/2019 + Script Notes : +--]] + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_2_1042.mp3", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "I would like to travel.", "dlg_1_1") + AddConversationOption(conversation, "Nowhere.") + StartConversation(conversation, NPC, Spawn, "Greetings traveler, how can I assist you today?") + end + +function dlg_1_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + local con = CreateConversation() + + if GetSpawnLocationID(NPC) == 587011 then + --Danak Shipyards-- + AddConversationOption(con, "To Howling Stones.", "DanakToHowl") + AddConversationOption(con, "To Sel'Nok Camp.", "DanakToSel") + AddConversationOption(con, "To Skleross Encampment.", "DanakToRoss") + AddConversationOption(con, "To Skyfire Mountains.", "DanakToSky") + AddConversationOption(con, "To Stonehoof Badlands.", "DanakToBadland") + AddConversationOption(con, "To Temple of Red Lord.", "DanakToRed") + AddConversationOption(con, "To Temple of White Lady.", "DanakToWhite") + elseif GetSpawnLocationID(NPC) == 587012 then + --Howling Stones-- + AddConversationOption(con, "To Danak Shipyards", "HowlToDanak") + AddConversationOption(con, "To Sel'Nok Camp.", "HowlToSel") + AddConversationOption(con, "To Skleross Encampment.", "HowlToRoss") + AddConversationOption(con, "To Skyfire Mountains.", "HowlToSky") + AddConversationOption(con, "To Stonehoof Badlands.", "HowlToBadland") + AddConversationOption(con, "To Temple of Red Lord.", "HowlToRed") + AddConversationOption(con, "To Temple of White Lady.", "HowlToWhite") + elseif GetSpawnLocationID(NPC) == 587007 then + --Sel'Nok Camp-- + AddConversationOption(con, "To Danak Shipyards", "SelToDanak") + AddConversationOption(con, "To Howling Stones.", "SelToHowl") + AddConversationOption(con, "To Skleross Encampment.", "SelToRoss") + AddConversationOption(con, "To Skyfire Mountains.", "SelToSky") + AddConversationOption(con, "To Stonehoof Badlands.", "SelToBadland") + AddConversationOption(con, "To Temple of Red Lord.", "SelToRed") + AddConversationOption(con, "To Temple of White Lady.", "SelToWhite") + elseif GetSpawnLocationID(NPC) == 587010 then + --Skleross Encampment-- + AddConversationOption(con, "To Danak Shipyards", "RossToDanak") + AddConversationOption(con, "To Howling Stones.", "RossToHowl") + AddConversationOption(con, "To Sel'Nok Camp.", "RossToSel") + AddConversationOption(con, "To Skyfire Mountains.", "RossToSky") + AddConversationOption(con, "To Stonehoof Badlands.", "RossToBadland") + AddConversationOption(con, "To Temple of Red Lord.", "RossToRed") + AddConversationOption(con, "To Temple of White Lady.", "RossToWhite") + elseif GetSpawnLocationID(NPC) == 587009 then + --Skyfire Mountains-- + AddConversationOption(con, "To Danak Shipyards", "SkyToDanak") + AddConversationOption(con, "To Howling Stones.", "SkyToHowl") + AddConversationOption(con, "To Sel'Nok Camp.", "SkyToSel") + AddConversationOption(con, "To Skleross Encampment.", "SkyToRoss") + AddConversationOption(con, "To Stonehoof Badlands.", "SkyToBadland") + AddConversationOption(con, "To Temple of Red Lord.", "SkyToRed") + AddConversationOption(con, "To Temple of White Lady.", "SkyToWhite") + elseif GetSpawnLocationID(NPC) == 587008 then + --Stonehoof Badlands-- + AddConversationOption(con, "To Danak Shipyards", "BadlandToDanak") + AddConversationOption(con, "To Howling Stones.", "BadlandToHowl") + AddConversationOption(con, "To Sel'Nok Camp.", "BadlandToSel") + AddConversationOption(con, "To Skleross Encampment.", "BadlandToRoss") + AddConversationOption(con, "To Skyfire Mountains.", "BadlandToSky") + AddConversationOption(con, "To Temple of Red Lord.", "BadlandToRed") + AddConversationOption(con, "To Temple of White Lady.", "BadlandToWhite") + elseif GetSpawnLocationID(NPC) == 587005 then + --Temple of Red Lord-- + AddConversationOption(con, "To Danak Shipyards", "RedToDanak") + AddConversationOption(con, "To Howling Stones.", "RedToHowl") + AddConversationOption(con, "To Sel'Nok Camp.", "RedToSel") + AddConversationOption(con, "To Skleross Encampment.", "RedToRoss") + AddConversationOption(con, "To Skyfire Mountains.", "RedToSky") + AddConversationOption(con, "To Stonehoof Badlands.", "RedToBadland") + AddConversationOption(con, "To Temple of White Lady.", "RedToWhite") + elseif GetSpawnLocationID(NPC) == 587006 then + --Temple of Red Lord-- + AddConversationOption(con, "To Danak Shipyards", "WhiteToDanak") + AddConversationOption(con, "To Howling Stones.", "WhiteToHowl") + AddConversationOption(con, "To Sel'Nok Camp.", "WhiteToSel") + AddConversationOption(con, "To Skleross Encampment.", "WhiteToRoss") + AddConversationOption(con, "To Skyfire Mountains.", "WhiteToSky") + AddConversationOption(con, "To Stonehoof Badlands.", "WhiteToBadland") + AddConversationOption(con, "To Temple of Red Lord.", "WhiteToRed") + else + PlayFlavor(NPC, "", "Not implemented yet!", "cry", 0, 0, Spawn) + end + AddConversationOption(con, "Nowhere.") + StartConversation(con, NPC, Spawn, "Where to?") +end + +function DanakToHowl(NPC, Spawn) + StartAutoMount(Spawn, 345) + SetMount(Spawn, 7253) +end + +function DanakToSel(NPC, Spawn) + StartAutoMount(Spawn, 373) + SetMount(Spawn, 7253) +end + +function DanakToRoss(NPC, Spawn) + StartAutoMount(Spawn, 376) + SetMount(Spawn, 7253) +end + +function DanakToBadland(NPC, Spawn) + StartAutoMount(Spawn, 372) + SetMount(Spawn, 7253) +end + +function DanakToRed(NPC, Spawn) + StartAutoMount(Spawn, 374) + SetMount(Spawn, 7253) +end + +function DanakToWhite(NPC, Spawn) + StartAutoMount(Spawn, 375) + SetMount(Spawn, 7253) +end + +function HowlToDanak(NPC, Spawn) + StartAutoMount(Spawn, 341) + SetMount(Spawn, 7253) +end + +function HowlToSel(NPC, Spawn) + StartAutoMount(Spawn, 377) + SetMount(Spawn, 7253) +end + +function HowlToRoss(NPC, Spawn) + StartAutoMount(Spawn, 342) + SetMount(Spawn, 7253) +end + +function HowlToSky(NPC, Spawn) + StartAutoMount(Spawn, 344) + SetMount(Spawn, 7253) +end + +function HowlToBadland(NPC, Spawn) + StartAutoMount(Spawn, 343) + SetMount(Spawn, 7253) +end + +function HowlToRed(NPC, Spawn) + StartAutoMount(Spawn, 378) + SetMount(Spawn, 7253) +end + +function HowlToWhite(NPC, Spawn) + StartAutoMount(Spawn, 379) + SetMount(Spawn, 7253) +end + +function SelToDanak(NPC, Spawn) + StartAutoMount(Spawn, 391) + SetMount(Spawn, 7253) +end + +function SelToHowl(NPC, Spawn) + StartAutoMount(Spawn, 389) + SetMount(Spawn, 7253) +end + +function SelToRoss(NPC, Spawn) + StartAutoMount(Spawn, 392) + SetMount(Spawn, 7253) +end + +function SelToBadland(NPC, Spawn) + StartAutoMount(Spawn, 388) + SetMount(Spawn, 7253) +end + +function SelToRed(NPC, Spawn) + StartAutoMount(Spawn, 360) + SetMount(Spawn, 7253) +end + +function SelToWhite(NPC, Spawn) + StartAutoMount(Spawn, 390) + SetMount(Spawn, 7253) +end + +function RossToDanak(NPC, Spawn) + StartAutoMount(Spawn, 396) + SetMount(Spawn, 7253) +end + +function RossToHowl(NPC, Spawn) + StartAutoMount(Spawn, 362) + SetMount(Spawn,7253) +end + +function RossToSel(NPC, Spawn) + StartAutoMount(Spawn, 393) + SetMount(Spawn, 7253) +end + +function RossToSky(NPC, Spawn) + StartAutoMount(Spawn, 364) + SetMount(Spawn, 7253) +end + +function RossToBadland(NPC, Spawn) + StartAutoMount(Spawn, 363) + SetMount(Spawn, 7253) +end + +function RossToRed(NPC, Spawn) + StartAutoMount(Spawn, 394) + SetMount(Spawn, 7253) +end + +function RossToWhite(NPC, Spawn) + StartAutoMount(Spawn, 395) + SetMount(Spawn,7253) +end + +function SkyToDanak(NPC, Spawn) + StartAutoMount(Spawn, 350) + SetMount(Spawn, 7253) +end + +function SkyToHowl(NPC, Spawn) + StartAutoMount(Spawn, 354) + SetMount(Spawn, 7253) +end + +function SkyToSel(NPC, Spawn) + StartAutoMount(Spawn, 351) + SetMount(Spawn, 7253) +end + +function SkyToRoss(NPC, Spawn) + StartAutoMount(Spawn, 352) + SetMount(Spawn, 7253) +end + +function SkyToBadland(NPC, Spawn) + StartAutoMount(Spawn, 348) + SetMount(Spawn, 7253) +end + +function SkyToRed(NPC, Spawn) + StartAutoMount(Spawn, 349) + SetMount(Spawn, 7253) +end + +function SkyToWhite(NPC, Spawn) + StartAutoMount(Spawn, 353) + SetMount(Spawn, 7253) +end + +function BadlandToDanak(NPC, Spawn) + StartAutoMount(Spawn, 383) + SetMount(Spawn, 7253) +end + +function BadlandToHowl(NPC, Spawn) + StartAutoMount(Spawn, 338) + SetMount(Spawn, 7253) +end + +function BadlandToSel(NPC, Spawn) + StartAutoMount(Spawn, 380) + SetMount(Spawn, 7253) +end + +function BadlandToRoss(NPC, Spawn) + StartAutoMount(Spawn, 340) + SetMount(Spawn, 7253) +end + +function BadlandToSky(NPC, Spawn) + StartAutoMount(Spawn, 339) + SetMount(Spawn, 7253) +end + +function BadlandToRed(NPC, Spawn) + StartAutoMount(Spawn, 381) + SetMount(Spawn, 7253) +end + +function BadlandToWhite(NPC, Spawn) + StartAutoMount(Spawn, 382) + SetMount(Spawn, 7253) +end + +function RedToDanak(NPC, Spawn) + StartAutoMount(Spawn, 386) + SetMount(Spawn, 7253) +end + +function RedToHowl(NPC, Spawn) + StartAutoMount(Spawn, 385) + SetMount(Spawn, 7253) +end + +function RedToSel(NPC, Spawn) + StartAutoMount(Spawn, 355) + SetMount(Spawn, 7253) +end + +function RedToRoss(NPC, Spawn) + StartAutoMount(Spawn, 387) + SetMount(Spawn, 7253) +end + +function RedToSky(NPC, Spawn) + StartAutoMount(Spawn, 356) + SetMount(Spawn, 7253) +end + +function RedToBadland(NPC, Spawn) + StartAutoMount(Spawn, 384) + SetMount(Spawn, 7253) +end + +function RedToWhite(NPC, Spawn) + StartAutoMount(Spawn, 357) + SetMount(Spawn, 7253) +end + +function WhiteToDanak(NPC, Spawn) + StartAutoMount(Spawn, 368) + SetMount(Spawn, 7253) +end + +function WhiteToHowl(NPC, Spawn) + StartAutoMount(Spawn, 369) + SetMount(Spawn, 7253) +end + +function WhiteToSel(NPC, Spawn) + StartAutoMount(Spawn, 370) + SetMount(Spawn, 7253) +end + +function WhiteToRoss(NPC, Spawn) + StartAutoMount(Spawn, 371) + SetMount(Spawn, 7253) +end + +function WhiteToSky(NPC, Spawn) + StartAutoMount(Spawn, 359) + SetMount(Spawn, 7253) +end + +function WhiteToBadland(NPC, Spawn) + StartAutoMount(Spawn, 367) + SetMount(Spawn, 7253) +end + +function WhiteToRed(NPC, Spawn) + StartAutoMount(Spawn, 358) + SetMount(Spawn, 7253) +end \ No newline at end of file diff --git a/server/SpawnScripts/KunzarJungle/asokokartamer.lua b/server/SpawnScripts/KunzarJungle/asokokartamer.lua new file mode 100644 index 000000000..213d4ea80 --- /dev/null +++ b/server/SpawnScripts/KunzarJungle/asokokartamer.lua @@ -0,0 +1,223 @@ +--[[ + Script Name : SpawnScripts/KunzarJungle/asokokartamer.lua + Script Purpose : a sokokar Tamer (2610001) + Script Author : Neatz09 + Script Date : 4/16/2019 + Script Notes : +--]] + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_2_1042.mp3", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "I would like to travel.", "dlg_1_1") + AddConversationOption(conversation, "Nowhere.") + StartConversation(conversation, NPC, Spawn, "Greetings traveler, how can I assist you today?") + end + +function dlg_1_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + local con = CreateConversation() + + if GetSpawnLocationID(NPC) == 373743 then + --Fallen Village-- + AddConversationOption(con, "To Hidden Plunderers", "FallenToHidden") + AddConversationOption(con, "To Jinisk.", "FallenToJinisk") + AddConversationOption(con, "To Murkdweller's River.", "FallenToRiver") + AddConversationOption(con, "To Outer Sebilis.", "FallenToSeb") + AddConversationOption(con, "To Tabernacle of Pain.", "FallenToTab") + elseif GetSpawnLocationID(NPC) == 373741 then + --Hidden Plunderers-- + AddConversationOption(con, "To Fallen Village.", "HiddenToFallen") + AddConversationOption(con, "To Jinisk.", "HiddenToJinisk") + AddConversationOption(con, "To Murkdweller's River.", "HiddenToRiver") + AddConversationOption(con, "To Outer Sebilis.", "HiddenToSeb") + AddConversationOption(con, "To Tabernacle of Pain.", "HiddenToTab") + elseif GetSpawnLocationID(NPC) == 373745 then + --Jinisk-- + AddConversationOption(con, "To Fallen Village.", "JiniskToFallen") + AddConversationOption(con, "To Hidden Plunderers.", "JiniskToHidden") + AddConversationOption(con, "To Murkdweller's River.", "JiniskToRiver") + AddConversationOption(con, "To Outer Sebilis.", "JiniskToSeb") + AddConversationOption(con, "To Tabernacle of Pain.", "JiniskToTab") + elseif GetSpawnLocationID(NPC) == 373746 then + --Murkdweller's River-- + AddConversationOption(con, "To Fallen Village.", "RiverToFallen") + AddConversationOption(con, "To Hidden Plunderers.", "RiverToHidden") + AddConversationOption(con, "To Jinisk.", "RiverToJinisk") + AddConversationOption(con, "To Outer Sebilis", "RiverToSeb") + AddConversationOption(con, "To Tabernacle of Pain", "RiverToTab") + elseif GetSpawnLocationID(NPC) == 373742 then + --Outer Sebilis-- + AddConversationOption(con, "To Fallen Village.", "SebToFallen") + AddConversationOption(con, "To Hidden Plunderers.", "SebToHidden") + AddConversationOption(con, "To Jinisk.", "SebToJinisk") + AddConversationOption(con, "To Murkdweller's River.", "SebToRiver") + AddConversationOption(con, "To Tabernacle of Pain.", "SebToTab") + elseif GetSpawnLocationID(NPC) == 373744 then + --Tabernacle of Pain-- + AddConversationOption(con, "To Fallen Village.", "TabToFallen") + AddConversationOption(con, "To Hidden Plunderers.", "TabToHidden") + AddConversationOption(con, "To Jinisk.", "TabToJinisk") + AddConversationOption(con, "To Murkdweller's River.", "TabToRiver") + AddConversationOption(con, "To Outer Sebilis.", "TabToSeb") + else + PlayFlavor(NPC, "", "Not implemented yet!", "cry", 0, 0, Spawn) + end + AddConversationOption(con, "Nowhere.") + StartConversation(con, NPC, Spawn, "Where to?") +end + +function FallenToHidden(NPC, Spawn) + StartAutoMount(Spawn, 910) + SetMount(Spawn, 7253) +end + +function FallenToJinisk(NPC, Spawn) + StartAutoMount(Spawn, 928) + SetMount(Spawn, 7253) +end + +function FallenToRiver(NPC, Spawn) + StartAutoMount(Spawn, 929) + SetMount(Spawn, 7253) +end + +function FallenToSeb(NPC, Spawn) + StartAutoMount(Spawn, 911) + SetMount(Spawn, 7253) +end + +function FallenToTab(NPC, Spawn) + StartAutoMount(Spawn, 912) + SetMount(Spawn, 7253) +end + +function HiddenToFallen(NPC, Spawn) + StartAutoMount(Spawn, 916) + SetMount(Spawn, 7253) +end + +function HiddenToJinisk(NPC, Spawn) + StartAutoMount(Spawn, 917) + SetMount(Spawn, 7253) +end + +function HiddenToRiver(NPC, Spawn) + StartAutoMount(Spawn, 932) + SetMount(Spawn, 7253) +end + +function HiddenToSeb(NPC, Spawn) + StartAutoMount(Spawn, 930) + SetMount(Spawn, 7253) +end + +function HiddenToTab(NPC, Spawn) + StartAutoMount(Spawn, 931) + SetMount(Spawn, 7253) +end + +function JiniskToFallen(NPC, Spawn) + StartAutoMount(Spawn, 934) + SetMount(Spawn, 7253) +end + +function JiniskToHidden(NPC, Spawn) + StartAutoMount(Spawn, 913) + SetMount(Spawn, 7253) +end + +function JiniskToRiver(NPC, Spawn) + StartAutoMount(Spawn, 914) + SetMount(Spawn, 7253) +end + +function JiniskToSeb(NPC, Spawn) + StartAutoMount(Spawn, 933) + SetMount(Spawn, 7253) +end + +function JiniskToTab(NPC, Spawn) + StartAutoMount(Spawn, 915) + SetMount(Spawn, 7253) +end + +function RiverToFallen(NPC, Spawn) + StartAutoMount(Spawn, 936) + SetMount(Spawn, 7253) +end + +function RiverToHidden(NPC, Spawn) + StartAutoMount(Spawn, 935) + SetMount(Spawn, 7253) +end + +function RiverToJinisk(NPC, Spawn) + StartAutoMount(Spawn, 918) + SetMount(Spawn, 7253) +end + +function RiverToSeb(NPC, Spawn) + StartAutoMount(Spawn, 919) + SetMount(Spawn, 7253) +end + +function RiverToTab(NPC, Spawn) + StartAutoMount(Spawn, 920) + SetMount(Spawn, 7253) +end + +function SebToFallen(NPC, Spawn) + StartAutoMount(Spawn, 921) + SetMount(Spawn,7253) +end + +function SebToHidden(NPC, Spawn) + StartAutoMount(Spawn, 937) + SetMount(Spawn, 7253) +end + +function SebToJinisk(NPC, Spawn) + StartAutoMount(Spawn, 939) + SetMount(Spawn, 7253) +end + +function SebToRiver(NPC, Spawn) + StartAutoMount(Spawn, 922) + SetMount(Spawn, 7253) +end + +function SebToTab(NPC, Spawn) + StartAutoMount(Spawn, 938) + SetMount(Spawn, 7253) +end + +function TabToFallen(NPC, Spawn) + StartAutoMount(Spawn, 923) + SetMount(Spawn,7253) +end + +function TabToHidden(NPC, Spawn) + StartAutoMount(Spawn, 927) + SetMount(Spawn, 7253) +end + +function TabToJinisk(NPC, Spawn) + StartAutoMount(Spawn, 924) + SetMount(Spawn, 7253) +end + +function TabToRiver(NPC, Spawn) + StartAutoMount(Spawn, 925) + SetMount(Spawn, 7253) +end + +function TabToSeb(NPC, Spawn) + StartAutoMount(Spawn, 926) + SetMount(Spawn, 7253) +end \ No newline at end of file diff --git a/server/SpawnScripts/KylongPlains/asokokartamer.lua b/server/SpawnScripts/KylongPlains/asokokartamer.lua new file mode 100644 index 000000000..a94f98f6b --- /dev/null +++ b/server/SpawnScripts/KylongPlains/asokokartamer.lua @@ -0,0 +1,217 @@ +--[[ + Script Name : SpawnScripts/KylongPlains/asokokartamer.lua + Script Purpose : a stable master (2620004) + Script Author : Neatz09 + Script Date : 4/15/2019 + Script Notes : +--]] + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_2_1042.mp3", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "I would like to travel.", "dlg_1_1") + AddConversationOption(conversation, "Nowhere.") + StartConversation(conversation, NPC, Spawn, "Greetings traveler, how can I assist you today?") + end + +function dlg_1_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + local con = CreateConversation() + + if GetSpawnLocationID(NPC) == 612480 then + --Dreg's Landing-- + AddConversationOption(con, "To Fens of Nathsar", "DregsToFens") + AddConversationOption(con, "To Highton.", "DregsToHighton") + AddConversationOption(con, "To Jarsath Wastes.", "DregsToJarsath") + AddConversationOption(con, "To Kunzar's Edge.", "DregsToKunzar") + AddConversationOption(con, "To Teren's Grasp.", "DregsToTeren") + elseif GetSpawnLocationID(NPC) == 612479 then + --Kunzar's Edge-- + AddConversationOption(con, "To Dreg's Landing.", "KunzarToDregs") + AddConversationOption(con, "To Fens of Nathsar.", "KunzarToFens") + AddConversationOption(con, "To Highton.", "KunzarToHighton") + AddConversationOption(con, "To Jarsath Wastes.", "KunzarToJarsath") + AddConversationOption(con, "To Teren's Grasp.", "KunzarToTeren") + elseif GetSpawnLocationID(NPC) == 365542 then + --Fens of Nathsar-- + AddConversationOption(con, "To Dreg's Landing.", "FensToDregs") + AddConversationOption(con, "To Highton.", "FensToHighton") + AddConversationOption(con, "To Jarsath Wastes.", "FensToJarsath") + AddConversationOption(con, "To Kunzar's Edge.", "FensToKunzar") + AddConversationOption(con, "To Teren's Grasp.", "FensToTeren") + elseif GetSpawnLocationID(NPC) == 365543 then + --Teren's Grasp(possibly missing Kunzar Edge Path)-- + AddConversationOption(con, "To Dreg's Landing.", "TerenToDregs") + AddConversationOption(con, "To Fens of Nathsar.", "TerenToFens") + AddConversationOption(con, "To Highton.", "TerenToHighton") + AddConversationOption(con, "To Jarsath Wastes.", "TerenToJarsath") + elseif GetSpawnLocationID(NPC) == 612481 then + --Highton-- + AddConversationOption(con, "To Dreg's Landing.", "HightonToDregs") + AddConversationOption(con, "To Fens of Nathsar.", "HightonToFens") + AddConversationOption(con, "To Kunzar's Edge.", "HightonToKunzar") + AddConversationOption(con, "To Jarsath Wastes.", "HightonToJarsath") + AddConversationOption(con, "To Teren's Grap.", "HightonToTeren") + elseif GetSpawnLocationID(NPC) == 612482 then + --Jarsath Wastes-- + AddConversationOption(con, "To Dreg's Landing.", "JarsathToDregs") + AddConversationOption(con, "To Fens of Nathsar.", "JarsathToFens") + AddConversationOption(con, "To Highton.", "JarsathToHighton") + AddConversationOption(con, "To Kunzar's Edge.", "JarsathToKunzar") + AddConversationOption(con, "To Teren's Grasp.", "JarsathToTeren") + else + PlayFlavor(NPC, "", "Not implemented yet!", "cry", 0, 0, Spawn) + end + AddConversationOption(con, "Nowhere.") + StartConversation(con, NPC, Spawn, "Where to?") +end + +function DregsToFens(NPC, Spawn) + StartAutoMount(Spawn, 308) + SetMount(Spawn, 7253) +end + +function DregsToHighton(NPC, Spawn) + StartAutoMount(Spawn, 310) + SetMount(Spawn, 7253) +end + +function DregsToJarsath(NPC, Spawn) + StartAutoMount(Spawn, 328) + SetMount(Spawn, 7253) +end + +function DregsToKunzar(NPC, Spawn) + StartAutoMount(Spawn, 309) + SetMount(Spawn, 7253) +end + +function DregsToTeren(NPC, Spawn) + StartAutoMount(Spawn, 307) + SetMount(Spawn, 7253) +end + +function KunzarToDregs(NPC, Spawn) + StartAutoMount(Spawn, 311) + SetMount(Spawn, 7253) +end + +function KunzarToFens(NPC, Spawn) + StartAutoMount(Spawn, 312) + SetMount(Spawn, 7253) +end + +function KunzarToHighton(NPC, Spawn) + StartAutoMount(Spawn, 337) + SetMount(Spawn, 7253) +end + +function KunzarToJarsath(NPC, Spawn) + StartAutoMount(Spawn, 336) + SetMount(Spawn, 7253) +end + +function KunzarToTerens(NPC, Spawn) + StartAutoMount(Spawn, 313) + SetMount(Spawn, 7253) +end + +function TerenToDregs(NPC, Spawn) + StartAutoMount(Spawn, 317) + SetMount(Spawn, 7253) +end + +function TerenToFens(NPC, Spawn) + StartAutoMount(Spawn, 318) + SetMount(Spawn, 7253) +end + +function TerenToHighton(NPC, Spawn) + StartAutoMount(Spawn, 319) + SetMount(Spawn, 7253) +end + +function TerenToJarsath(NPC, Spawn) + StartAutoMount(Spawn, 320) + SetMount(Spawn, 7253) +end + +function HightonToDregs(NPC, Spawn) + StartAutoMount(Spawn, 323) + SetMount(Spawn, 7253) +end + +function HightonToFens(NPC, Spawn) + StartAutoMount(Spawn, 331) + SetMount(Spawn, 7253) +end + +function HightonToJarsath(NPC, Spawn) + StartAutoMount(Spawn, 322) + SetMount(Spawn, 7253) +end + +function HightonToKunzar(NPC, Spawn) + StartAutoMount(Spawn, 332) + SetMount(Spawn, 7253) +end + +function HightonToTeren(NPC, Spawn) + StartAutoMount(Spawn, 321) + SetMount(Spawn, 7253) +end + +function JarsathToDregs(NPC, Spawn) + StartAutoMount(Spawn, 335) + SetMount(Spawn, 7253) +end + +function JarsathToFens(NPC, Spawn) + StartAutoMount(Spawn, 333) + SetMount(Spawn,7253) +end + +function JarsathToHighton(NPC, Spawn) + StartAutoMount(Spawn, 324) + SetMount(Spawn, 7253) +end + +function JarsathToKunzar(NPC, Spawn) + StartAutoMount(Spawn, 334) + SetMount(Spawn, 7253) +end + +function JarsathToTerens(NPC, Spawn) + StartAutoMount(Spawn, 325) + SetMount(Spawn, 7253) +end + +function FensToDregs(NPC, Spawn) + StartAutoMount(Spawn, 315) + SetMount(Spawn, 7253) +end + +function FensToHighton(NPC, Spawn) + StartAutoMount(Spawn, 330) + SetMount(Spawn,7253) +end + +function FensToJarsath(NPC, Spawn) + StartAutoMount(Spawn, 329) + SetMount(Spawn, 7253) +end + +function FensToKunzar(NPC, Spawn) + StartAutoMount(Spawn, 316) + SetMount(Spawn, 7253) +end + +function FensToTeren(NPC, Spawn) + StartAutoMount(Spawn, 314) + SetMount(Spawn, 7253) +end \ No newline at end of file diff --git a/server/SpawnScripts/Lavastorm/VulcanuSlayer.lua b/server/SpawnScripts/Lavastorm/VulcanuSlayer.lua new file mode 100644 index 000000000..d61caa993 --- /dev/null +++ b/server/SpawnScripts/Lavastorm/VulcanuSlayer.lua @@ -0,0 +1,26 @@ +--[[ + Script Name : SpawnScripts/Lavastorm/VulcanuSlayer.lua + Script Purpose : Proximity Call + Script Author : Scribble + Script Date : 08.27.16 + Script Notes : When you get close to A vulcanu slayer he will tell you "You ruined your own lands, + don't think you can start on ours!" when you are withing 30 click and when you leave he will stop. +--]] + +function spawn(NPC) + SetPlayerProximityFunction(NPC, 30, "InRange") +end + +function respawn(NPC) + spawn(NPC) +end + +function InRange(NPC, Spawn) + hailed(NPC, Spawn) +end + +function hailed(NPC, Spawn) + Say(NPC, "You ruined your own lands, don't think you can start on ours!", 0, 19) +end + + diff --git a/server/SpawnScripts/Lavastorm/najenaelevatorcontrol.lua b/server/SpawnScripts/Lavastorm/najenaelevatorcontrol.lua new file mode 100644 index 000000000..fe8dd4e05 --- /dev/null +++ b/server/SpawnScripts/Lavastorm/najenaelevatorcontrol.lua @@ -0,0 +1,80 @@ +--[[ + Script Name : SpawnScripts/Lavastorm/najenaElevatorcontrol.lua + Script Author : smash + Script Date : 2016.01.14 09:01:52 + Script Purpose : + : +--]] + +function spawn(NPC) +end + + +function casted_on(NPC, Caster, SpellName) +--Say(NPC, SpellName) + MoveElevator(NPC, SpellName) +end + +--There are three possible locations for this Elevator - top, middle, bottom - it can be raised or lowered +function MoveElevator(NPC, Direction) + local Elevator = GetSpawn(NPC, 1710230) + if GetTempVariable(Elevator, "moving") == "true" then + return + end + + local current_pos = GetTempVariable(Elevator, "current_pos") + if Direction == "Raise Elevator" then + if current_pos == "middle" then + AddTimer(NPC, 3000, "MoveElevatorToTop", 1, Elevator) + SetElevatorMoving(NPC, Elevator) + elseif current_pos == "bottom" then + AddTimer(NPC, 3000, "MoveElevatorToMiddle", 1, Elevator) + SetElevatorMoving(NPC, Elevator) + end + elseif Direction == "Lower Elevator" then +--Say(NPC, "Lower Elevator branch") + if current_pos == "top" then +--Say(NPC, "Lower - top") + AddTimer(NPC, 3000, "MoveElevatorToMiddle", 1, Elevator) + SetElevatorMoving(NPC, Elevator) + elseif current_pos == "middle" then +--Say(NPC, "Lower - middle") + AddTimer(NPC, 3000, "MoveElevatorToBottom", 1, Elevator) + SetElevatorMoving(NPC, Elevator) + end + end +end + +--The trip from top->middle takes about 18 seconds, middle->bottom about 17 seconds - add 3 seconds to account for delay +function MoveElevatorToTop(NPC, Elevator) + MoveToLocation(Elevator, -37.9433, -127.518, 205.8) + SetTempVariable(Elevator, "current_pos", "top") + AddTimer(NPC, 21000, "SetElevatorNotMoving", 1, Elevator) +end + +function MoveElevatorToMiddle(NPC, Elevator) +--Say(NPC, "MoveElevatorToMiddle function") + local current_pos = GetTempVariable(Elevator, "current_pos") + MoveToLocation(Elevator, -37.9433, -212.726, 205.8) + SetTempVariable(Elevator, "current_pos", "middle") + if current_pos == "top" then + AddTimer(NPC, 21000, "SetElevatorNotMoving", 1, Elevator) + else + AddTimer(NPC, 20000, "SetElevatorNotMoving", 1, Elevator) + end +end + +function MoveElevatorToBottom(NPC, Elevator) + MoveToLocation(Elevator, -37.9433, -294.3962, 205.8) + SetTempVariable(Elevator, "current_pos", "bottom") + AddTimer(NPC, 20000, "SetElevatorNotMoving", 1, Elevator) +end + +function SetElevatorMoving(NPC, Elevator) + SetTempVariable(Elevator, "moving", "true") +end + +function SetElevatorNotMoving(NPC, Elevator) +--Say(NPC, "Done moving") + SetTempVariable(Elevator, "moving", nil) +end \ No newline at end of file diff --git a/server/SpawnScripts/Lavastorm/woes_elevator.lua b/server/SpawnScripts/Lavastorm/woes_elevator.lua new file mode 100644 index 000000000..6feb5a29b --- /dev/null +++ b/server/SpawnScripts/Lavastorm/woes_elevator.lua @@ -0,0 +1,13 @@ +--[[ + Script Name : SpawnScripts/Lavastorm/woes_elevator.lua + Script Author : smash + Script Date : 2016.1.14 + Script Purpose : + : +--]] + +function spawn(NPC) + SetSpeed(NPC, 4) + AddMultiFloorLift(NPC) + SetTempVariable(NPC, "current_pos", "top") +end \ No newline at end of file diff --git a/server/SpawnScripts/LesserFaydark/astablemaster.lua b/server/SpawnScripts/LesserFaydark/astablemaster.lua new file mode 100644 index 000000000..87ee12831 --- /dev/null +++ b/server/SpawnScripts/LesserFaydark/astablemaster.lua @@ -0,0 +1,217 @@ +--[[ + Script Name : SpawnScripts/LesserFaydark/astablemaster.lua + Script Purpose : a stable master (1150001) + Script Author : Neatz09 + Script Date : 4/14/2019 + Script Notes : +--]] + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_2_1042.mp3", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "I would like to travel.", "dlg_1_1") + AddConversationOption(conversation, "Nowhere.") + StartConversation(conversation, NPC, Spawn, "Greetings traveler, how can I assist you today?") + end + +function dlg_1_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + local con = CreateConversation() + + if GetSpawnLocationID(NPC) == 383888 then + AddConversationOption(con, "To Butcherblock Mountains", "FaeToBBM") + -- AddConversationOption(con, "To Greater Faydark.", "FaeToGFay")-- + AddConversationOption(con, "To Loping Plains.", "FaeToPlains") + AddConversationOption(con, "To Lower Grove.", "FaeToLowerGrove") + AddConversationOption(con, "To Upper Grove.", "FaeToUpperGrove") + elseif GetSpawnLocationID(NPC) == 383892 then + AddConversationOption(con, "To Fae Court.", "BBMToFae") + AddConversationOption(con, "To Greater Faydark.", "BBMToGFay") + AddConversationOption(con, "To Loping Plains.", "BBMToPlains") + AddConversationOption(con, "To Lower Grove.", "BBMToLowerGrove") + AddConversationOption(con, "To Upper grove.", "BBMToUpperGrove") + elseif GetSpawnLocationID(NPC) == 383890 then + AddConversationOption(con, "To Butcherblock Mountains.", "UpperGroveToBBM") + AddConversationOption(con, "To Fae Court.", "UpperGroveToFae") + AddConversationOption(con, "To Greater Faydark.", "UpperGroveToGFay") + AddConversationOption(con, "To Loping Plains.", "UpperGroveToPlains") + AddConversationOption(con, "To Lower Grove.", "UpperGroveToLowerGrove") + elseif GetSpawnLocationID(NPC) == 383889 then + AddConversationOption(con, "To Butcherblock Mountains.", "LowerGroveToBBM") + AddConversationOption(con, "To Fae Court.", "LowerGroveToFae") + AddConversationOption(con, "To Greater Faydark.", "LowerGroveToGFay") + AddConversationOption(con, "To Loping Plains.", "LowerGroveToPlains") + AddConversationOption(con, "To Upper Grove.", "LowerGroveToUpperGrove") + elseif GetSpawnLocationID(NPC) == 383891 then + AddConversationOption(con, "To Butcherblock Mountains.", "PlainsToBBM") + AddConversationOption(con, "To Fae Court.", "PlainsToFae") + AddConversationOption(con, "To Greater Faydark.", "PlainsToGFay") + AddConversationOption(con, "To Lower Grove.", "PlainsToLowerGrove") + AddConversationOption(con, "To Upper Grove.", "PlainsToUpperGrove") + elseif GetSpawnLocationID(NPC) == 383887 then + AddConversationOption(con, "To Butcherblock Mountains.", "GFayToBBM") + AddConversationOption(con, "To Fae Court.", "GFayToFae") + AddConversationOption(con, "To Loping Plains.", "GFayToPlains") + AddConversationOption(con, "To Lower Grove.", "GFayToLower") + AddConversationOption(con, "To Misty Grove.", "GFayToUpper") + else + PlayFlavor(NPC, "", "Not implemented yet!", "cry", 0, 0, Spawn) + end + AddConversationOption(con, "Nowhere.") + StartConversation(con, NPC, Spawn, "Where to?") +end + +function FaeToBBM(NPC, Spawn) + StartAutoMount(Spawn, 943) + SetMount(Spawn, 6846) +end + +-- function FaeToGFay(NPC, Spawn) + StartAutoMount(Spawn, 0) + SetMount(Spawn, 6846) +end -- + +function FaeToPlains(NPC, Spawn) + StartAutoMount(Spawn, 944) + SetMount(Spawn, 6846) +end + +function FaeToLowerGrove(NPC, Spawn) + StartAutoMount(Spawn, 959) + SetMount(Spawn, 6846) +end + +function FaeToUpperGrove(NPC, Spawn) + StartAutoMount(Spawn, 945) + SetMount(Spawn, 6846) +end + +function BBMToFae(NPC, Spawn) + StartAutoMount(Spawn, 941) + SetMount(Spawn, 6846) +end + +function BBMToGFay(NPC, Spawn) + StartAutoMount(Spawn, 958) + SetMount(Spawn, 6846) +end + +function BBMToPlains(NPC, Spawn) + StartAutoMount(Spawn, 940) + SetMount(Spawn, 6846) +end + +function BBMToLowerGrove(NPC, Spawn) + StartAutoMount(Spawn, 957) + SetMount(Spawn, 6846) +end + +function BBMUpperGrove(NPC, Spawn) + StartAutoMount(Spawn, 942) + SetMount(Spawn, 6846) +end + +function UpperGroveToBBM(NPC, Spawn) + StartAutoMount(Spawn, 951) + SetMount(Spawn, 6846) +end + +function UpperGroveToFae(NPC, Spawn) + StartAutoMount(Spawn, 953) + SetMount(Spawn, 6846) +end + +function UpperGroveToGFay(NPC, Spawn) + StartAutoMount(Spawn, 955) + SetMount(Spawn, 6846) +end + +function UpperGroveToPlains(NPC, Spawn) + StartAutoMount(Spawn, 952) + SetMount(Spawn, 6846) +end + +function UpperGroveToLowerGrove(NPC, Spawn) + StartAutoMount(Spawn, 956) + SetMount(Spawn, 6846) +end + +function LowerGroveToBBM(NPC, Spawn) + StartAutoMount(Spawn, 965) + SetMount(Spawn, 6846) +end + +function LowerGroveToFae(NPC, Spawn) + StartAutoMount(Spawn, 968) + SetMount(Spawn, 6846) +end + +function LowerGroveToGFay(NPC, Spawn) + StartAutoMount(Spawn, 950) + SetMount(Spawn, 6846) +end + +function LowerGroveToPlains(NPC, Spawn) + StartAutoMount(Spawn, 966) + SetMount(Spawn, 6846) +end + +function LowwerGroveToUpperGrove(NPC, Spawn) + StartAutoMount(Spawn, 967) + SetMount(Spawn, 6846) +end + +function PlainsToBBM(NPC, Spawn) + StartAutoMount(Spawn, 947) + SetMount(Spawn,6846) +end + +function PlainsToFae(NPC, Spawn) + StartAutoMount(Spawn, 948) + SetMount(Spawn, 6846) +end + +function PlainsToGFay(NPC, Spawn) + StartAutoMount(Spawn, 963) + SetMount(Spawn, 6846) +end + +function PlainsToLowerGrove(NPC, Spawn) + StartAutoMount(Spawn, 964) + SetMount(Spawn, 6846) +end + +function PlainsToUpperGrove(NPC, Spawn) + StartAutoMount(Spawn, 949) + SetMount(Spawn, 6846) +end + +function GFayToBBM(NPC, Spawn) + StartAutoMount(Spawn, 960) + SetMount(Spawn, 6846) +end + +function GFayToFae(NPC, Spawn) + StartAutoMount(Spawn, 954) + SetMount(Spawn, 6846) +end + +function GFayToPlains(NPC, Spawn) + StartAutoMount(Spawn, 961) + SetMount(Spawn, 6846) +end + +function GFayToLowerGrove(NPC, Spawn) + StartAutoMount(Spawn, 946) + SetMount(Spawn, 6846) +end + +function GFayToUpperGrove(NPC, Spawn) + StartAutoMount(Spawn,962) + SetMount(Spawn, 6846) +end diff --git a/server/SpawnScripts/Longshadow/AlanaramalZAste.lua b/server/SpawnScripts/Longshadow/AlanaramalZAste.lua new file mode 100644 index 000000000..3919d01f4 --- /dev/null +++ b/server/SpawnScripts/Longshadow/AlanaramalZAste.lua @@ -0,0 +1,31 @@ +--[[ + Script Name : SpawnScripts/Longshadow/AlanaramalZAste.lua + Script Purpose : Alanaramal Z'Aste + Script Author : John Adams + Script Date : 2008.09.29 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +function spawn(NPC) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "Yes, please teach me.", "dlg_6_1") + AddConversationOption(conversation, "No, not at the moment.") + StartConversation(conversation, NPC, Spawn, "You show interest in the crafting trade, good. We can always use talented artisans. I can help you get started, would you be interested?") +end + +function dlg_6_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "I will start on that now.", "dlg_6_2") + StartConversation(conversation, NPC, Spawn, "There, you now have knowledge required to begin crafting. Speak to the Tradeskill Tutor for more detailed guidance on learning to craft, if you are interested in more information. Return to me when you are ready to select a crafting specialty.") +end \ No newline at end of file diff --git a/server/SpawnScripts/Longshadow/AlderaVExxa.lua b/server/SpawnScripts/Longshadow/AlderaVExxa.lua new file mode 100644 index 000000000..9b3ac8554 --- /dev/null +++ b/server/SpawnScripts/Longshadow/AlderaVExxa.lua @@ -0,0 +1,449 @@ +--[[ + Script Name : SpawnScripts/Longshadow/AlderaVExxa.lua + Script Purpose : Aldera V'Exxa + Script Author : John Adams + Script Date : 2008.09.29 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +-- Race ID's +local DARK_ELF = 1 + +-- Quest ID's +local QUEST_1 = 335 -- A Clear Understanding +local QUEST_2 = 336 -- A Lesson to Learn +local QUEST_3 = 337 -- Brewing Trouble +local QUEST_4 = 338 -- A Lesson Learned +local QUEST_5 = 339 -- Meet the Custodian (listed under Graveyard) + +-- Item ID's +local POISONED_LOAF_OF_BREAD = 10496 + +function spawn(NPC) + ProvidesQuest(NPC, QUEST_1) + ProvidesQuest(NPC, QUEST_2) + ProvidesQuest(NPC, QUEST_3) + ProvidesQuest(NPC, QUEST_4) + ProvidesQuest(NPC, QUEST_5) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + if HasCompletedQuest(Spawn, QUEST_1) then + if HasCompletedQuest(Spawn, QUEST_2) then + if HasCompletedQuest(Spawn, QUEST_3) then + if HasCompletedQuest(Spawn, QUEST_4) then + if HasCompletedQuest(Spawn, QUEST_5) then + Say(NPC, "There is nothing left for you here.", Spawn) + elseif HasQuest(Spawn, QUEST_5) then + Say(NPC, "Go now to Custodian Zaddar Sullissia in the Graveyard, he is waiting for you.", Spawn) + else + OfferQuest5(NPC, Spawn) + end + elseif HasQuest(Spawn, QUEST_4) then + OnQuest4(NPC, Spawn, conversation) + else + IKnowNow(NPC, Spawn, conversation) + end + elseif HasQuest(Spawn, QUEST_3) then + OnQuest3(NPC, Spawn, conversation) + else + BePatient(NPC, Spawn, conversation) + end + elseif HasQuest(Spawn, QUEST_2) then + OnQuest2(NPC, Spawn, conversation) + else + RevengeSweet(NPC, Spawn, conversation) + end + elseif HasQuest(Spawn, QUEST_1) then + OnQuest1(NPC, Spawn, conversation) + else + if GetRace(Spawn) == DARK_ELF then + Greetings(NPC, Spawn, conversation) + else + Say(NPC, "You're no dark elf!", Spawn) + end + end +end + +------------------------------------------------------------------------------------------------------------------- +-- QUEST 1 +------------------------------------------------------------------------------------------------------------------- + +function Greetings(NPC, Spawn, conversation) + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/aldera_v_exxa/fprt_hood05/quests/alderavexxa/aldera_x1_001.mp3", "", "", 85248466, 2292456525, Spawn) + AddConversationOption(conversation, "I am not bewildered. I am in a hurry. There is a difference, so what is it that you want of me already?", "dlg_0_1") + AddConversationOption(conversation, "If I seem ill-tempered, it's because I'm being accosted by a complete stranger.", "dlg_0_1") + AddConversationOption(conversation, "Sorry, I am in a hurry right now. Maybe I will come back later.") + StartConversation(conversation, NPC, Spawn, "Greetings. You seem a bit bewildered, but worry not; I can sense the hate in you. It is a wild, flowing hatred, but we can temper that, and you, into a creature of Innoruuk's vengeance still. ") +end + +function dlg_0_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/aldera_v_exxa/fprt_hood05/quests/alderavexxa/aldera_x1_002.mp3", "", "", 2316308522, 1859341999, Spawn) + AddConversationOption(conversation, "My apologies, Aldera. What advice would you give on harnessing the strength of the Teir'Dal? ", "dlg_0_2") + AddConversationOption(conversation, "If you say so. However, I am interested in becoming a creature of Innoruuk's vengeance as you mentioned earlier.", "dlg_0_2") + StartConversation(conversation, NPC, Spawn, "Do not speak with such a sharp tongue. Teir'Dal may be above the rest of Norrath's people, but we are still equals unto each other. As such, you should show respect, lest you dishonor yourself. My name is Aldera.") +end + +function dlg_0_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/aldera_v_exxa/fprt_hood05/quests/alderavexxa/aldera_x1_017.mp3", "", "", 2479816263, 523601088, Spawn) + AddConversationOption(conversation, "You mean this slum?", "dlg_0_3") + StartConversation(conversation, NPC, Spawn, "You will learn all that you need to know...in time. Before we begin, it is important for you to know the inner workings of Longshadow Alley, our home in Freeport.") +end + +function dlg_0_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/aldera_v_exxa/fprt_hood05/quests/alderavexxa/aldera_x1_018.mp3", "", "", 1618945391, 1224746522, Spawn) + AddConversationOption(conversation, "Very true. Tell me about Longshadow Alley, then.", "dlg_0_4") + AddConversationOption(conversation, "I am very patiently waiting for you to continue.", "dlg_0_4") + StartConversation(conversation, NPC, Spawn, "It is not a beautiful place, that is true, but we make do. We Teir'Dal are patient and vigilant, for opportunities can arise suddenly and we must be prepared for them. Those who are unwilling or unable to restrain themselves may end up living in this slum forever.") +end + +function dlg_0_4(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/aldera_v_exxa/fprt_hood05/quests/alderavexxa/aldera_x1_019.mp3", "", "", 3051373305, 2764364895, Spawn) + AddConversationOption(conversation, "I agree.", "OfferQuest1") + AddConversationOption(conversation, "Unfortunately, I haven't got time at the moment.") + StartConversation(conversation, NPC, Spawn, "Good. For though we live here by decree of the Overlord, the Teir'Dal will rise again for we are the children of Innoruuk -- we are his chosen. And those who stand against us, thinking us weak, will find themselves unprepared. Preparedness includes knowing one's way around a neighborhood, whether by light or dark.") +end + +function OfferQuest1(NPC, Spawn) + FaceTarget(NPC, Spawn) + OfferQuest(NPC, Spawn, QUEST_1) +end + +function OnQuest1(NPC, Spawn, conversation) + if GetQuestStep(Spawn, QUEST_1) == 5 then + AddConversationOption(conversation, "The Koada'Dal should pay for what they did to us.", "KoadaDalShouldPay") + StartConversation(conversation, NPC, Spawn, "As you see, Longshadow Alley and its passages wind, but the Teir'Dal do not fear these things. Long ago, our people lived in Neriak and through Koada'Dal trickey, it was sealed away from those of us on the surface.") + else + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/aldera_v_exxa/fprt_hood05/qst_aldera_vexxa_not_done_207adfdc.mp3", "Come back when you are finished with the task I gave you.", "", 2514310256, 1161188523, Spawn) + end +end + +function KoadaDalShouldPay(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "Revenge can be sweet.", "RevengeSweet") + StartConversation(conversation, NPC, Spawn, "And someday, they will. Remember: we are the patient ones. Though fruit may rippen off the vine, it is much tastier when picked at its ripest. So is with our opportunities for revenge. When they are ripe, we shall pluck them.") +end + +function RevengeSweet(NPC, Spawn, conversation) + if HasQuest(Spawn, QUEST_1) then + SetStepComplete(Spawn, QUEST_1, 5) + end + + if conversation == nil then + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + end + + AddConversationOption(conversation, "I want to learn the Teir'Dal's ability to control the dark arts.", "DarkArts") + StartConversation(conversation, NPC, Spawn, "We must remain vigilant against the enemies of the virtuous: sloth, greed, and impatience. We will choose the time and place to unveil ourselves. In the way, we control the outcome, regardless of the cause.") +end + +------------------------------------------------------------------------------------------------------------------- +-- QUEST 2 +------------------------------------------------------------------------------------------------------------------- + +function DarkArts(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "Who is Teah? What dishonor do you speak of?", "WhoIsTeah") + StartConversation(conversation, NPC, Spawn, "I will direct you to that later. First, you must learn what it is to be a Teir'Dal. You must realize that you cannot show your contempt for another of your kind so openly to them. Doing so will only bring disrespect to yourself like it did to that sloth, Teah.") +end + +function WhoIsTeah(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "So, if everyone knows he's a thief, why don't you do something about it?", "KnowsThief") + StartConversation(conversation, NPC, Spawn, "Teah is a Teir'Dal who has lost all sense of subtlety. He thinks only of stuffing himself with whatever food he can pilfer. I am sure now he is even trying to find a way to steal more food from our merchants.") +end + +function KnowsThief(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "What do you want me to do?", "WhatToDo") + AddConversationOption(conversation, "Maybe we can work on this a bit later; I am tied up at the moment.") + StartConversation(conversation, NPC, Spawn, "I believe you may be right. It is time to teach him a lesson. A true Teir'Dal would never be so blatant about their actions. Just because we are stuck in this dingy alley does not mean we can act like common thieves.") +end + +function WhatToDo(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "I'll return with the Shadow's Kiss for you.", "OfferQuest2") + AddConversationOption(conversation, "Perhaps another time.") + StartConversation(conversation, NPC, Spawn, "For now, go find Shadow's Kiss, a fungus that grows around town. You may want to check near the entrance to the Thieves' Way for it. Collect some of this for me and come back here so we can discuss what needs to be done next.") +end + +function OfferQuest2(NPC, Spawn) + FaceTarget(NPC, Spawn) + OfferQuest(NPC, Spawn, QUEST_2) +end + +function OnQuest2(NPC, Spawn, conversation) + if GetQuestStep(Spawn, QUEST_2) == 2 then + SetStepComplete(Spawn, QUEST_2, 2) + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/aldera_v_exxa/fprt_hood05/quests/alderavexxa/aldera_x1_015.mp3", "", "", 2193463922, 2436480205, Spawn) + AddConversationOption(conversation, "But what about my training?", "BePatient") + AddConversationOption(conversation, "I will return in a moment then.") + StartConversation(conversation, NPC, Spawn, "Ahh good you have it! I will begin mixing this right away. Speak to me again in a moment so I can concentrate on mixing this.") + else + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/aldera_v_exxa/fprt_hood05/qst_aldera_vexxa_not_done_207adfdc.mp3", "Come back when you are finished with the task I gave you.", "", 2514310256, 1161188523, Spawn) + end +end + +------------------------------------------------------------------------------------------------------------------- +-- QUEST 3 +------------------------------------------------------------------------------------------------------------------- + +function BePatient(NPC, Spawn, conversation) + if conversation == nil then + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + end + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/aldera_v_exxa/fprt_hood05/quests/alderavexxa/aldera_x1_007.mp3", "", "", 1365697342, 971507038, Spawn) + AddConversationOption(conversation, "You seem fairly handy with that.", "dlg_1_2") + AddConversationOption(conversation, "I'm sorry for interrupting. Patience is difficult for me.") + StartConversation(conversation, NPC, Spawn, "Remember to be patient, " .. GetName(Spawn) .. ". Fortunately, Shadow's Kiss is a soft substance and crushes quickly. It is almost ready to be distilled. What is it you would like to know that cannot wait?") +end + +function dlg_1_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/aldera_v_exxa/fprt_hood05/quests/alderavexxa/aldera_x1_008.mp3", "", "", 3324572671, 2665510191, Spawn) + AddConversationOption(conversation, "Very true.", "dlg_1_3") + StartConversation(conversation, NPC, Spawn, "Patience can be learned, but you should realize by now that our keen intellect lends itself well to studies such as these. Alchemy is something any Teir'Dal can master, if the desire is present.") +end + +function dlg_1_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/aldera_v_exxa/fprt_hood05/quests/alderavexxa/aldera_x1_009.mp3", "", "", 1554086941, 3193226131, Spawn) + AddConversationOption(conversation, "We are fortunate, indeed.", "dlg_1_4") + StartConversation(conversation, NPC, Spawn, "Throughout all of our history, our ranks have always included the greatest members of the arcane societies, especially concerning necromantic magic. It was Innoruuk's gift to us after all.") +end + +function dlg_1_4(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/aldera_v_exxa/fprt_hood05/quests/alderavexxa/aldera_x1_010.mp3", "", "", 4208003561, 3975044464, Spawn) + AddConversationOption(conversation, "Kalraath is just going to give this to me for free?", "OfferQuest3") + AddConversationOption(conversation, "I will have to seek out Kalraath later, I do not have time for it now.") + StartConversation(conversation, NPC, Spawn, "Enough of that though, this is done distilling already. You must see Kalraath; he is another Teir'Dal here in Longshadow Alley. He likes to watch the people who pass back and forth through the gate to North Freeport. When you find him, let him know that I need an ingestible medium for the Shadow's Kiss you harvested.") +end + +function OfferQuest3(NPC, Spawn) + OfferQuest(NPC, Spawn, QUEST_3) +end + +function OnQuest3(NPC, Spawn, conversation) + if GetQuestStep(Spawn, QUEST_3) == 2 then + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/aldera_v_exxa/fprt_hood05/quests/alderavexxa/aldera_x1_012.mp3", "", "", 1172068349, 1938187919, Spawn) + AddConversationOption(conversation, "I told him the truth; you are teaching me the proper ways to be a Teir'Dal.", "dlg_3_1") + AddConversationOption(conversation, "To be honest, I am not ready to continue this quite yet.") + StartConversation(conversation, NPC, Spawn, "Good, you are back. I need not ask if you told him what we are mixing with it, right?") + elseif GetQuestStep(Spawn, QUEST_3) == 3 then + dlg_3_2(NPC, Spawn) + else + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/aldera_v_exxa/fprt_hood05/qst_aldera_vexxa_not_done_207adfdc.mp3", "Come back when you are finished with the task I gave you.", "", 2514310256, 1161188523, Spawn) + end +end + +function dlg_3_1(NPC, Spawn) + SetStepComplete(Spawn, QUEST_3, 2) + + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/aldera_v_exxa/fprt_hood05/quests/alderavexxa/aldera_x1_013.mp3", "", "", 2737459827, 1482233190, Spawn) + AddConversationOption(conversation, "What will happen next?", "dlg_3_2") + AddConversationOption(conversation, "I will give you the preparation time you need, then return so we can finish this.") + StartConversation(conversation, NPC, Spawn, "He would be hard pressed to find a more true statement than that. Let me mix these together before you take these to Lynsia. Her shop is set up near the Destroyed Knowledge Portal; Teah has frequently stolen from her and the time is ripe to take action.") +end + +function dlg_3_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/aldera_v_exxa/fprt_hood05/quests/alderavexxa/aldera_x1_021.mp3", "", "", 2067404292, 2649687751, Spawn) + AddConversationOption(conversation, "What exactly do you want to know?", "dlg_3_3") + StartConversation(conversation, NPC, Spawn, "Before I give this to you, I want to be sure you remember all that we have discussed about this.") +end + +function dlg_3_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/aldera_v_exxa/fprt_hood05/quests/alderavexxa/aldera_x1_034.mp3", "", "", 1004106866, 1845074140, Spawn) + AddConversationOption(conversation, "A Teir'Dal named Teah.", "dlg_3_4") + AddConversationOption(conversation, "A Teir'Dal named Kalraath.", "dlg_3_5") + AddConversationOption(conversation, "A Teir'Dal named Astara.", "dlg_3_5") + AddConversationOption(conversation, "Maybe we can do this later. I am in a bit of hurry right now.") + StartConversation(conversation, NPC, Spawn, "First, who is it that we are after?") +end + +function dlg_3_4(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/aldera_v_exxa/fprt_hood05/quests/alderavexxa/aldera_x1_022.mp3", "", "", 2302640409, 2008647580, Spawn) + AddConversationOption(conversation, "Because thats what Teir'Dal do?", "dlg_3_5") + AddConversationOption(conversation, "Because Teah brings shame to the name Teir'Dal?", "dlg_3_15") + AddConversationOption(conversation, "Because I have nothing else better to do?", "dlg_3_5") + AddConversationOption(conversation, "Maybe we can do this later. I am in a bit of hurry right now.") + StartConversation(conversation, NPC, Spawn, "Now, why exactly are we doing this?") +end + +function dlg_3_5(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/aldera_v_exxa/fprt_hood05/quests/alderavexxa/aldera_x1_033.mp3", "", "", 898006331, 3816257793, Spawn) + AddConversationOption(conversation, "Fine, let's just be done with this already.", "dlg_3_3") + StartConversation(conversation, NPC, Spawn, "Not exactly, why don't we run over this again.") +end + +function dlg_3_15(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/aldera_v_exxa/fprt_hood05/quests/alderavexxa/aldera_x1_023.mp3", "", "", 1198802346, 4122362903, Spawn) + AddConversationOption(conversation, "I need to leave it at the vendor booth where you can purchase food.", "dlg_3_24") + AddConversationOption(conversation, "I need to leave it at the docks. We decided the guards may be more deserving than Teah after all.", "dlg_3_3") + AddConversationOption(conversation, "I need to give it back to Kalraath to further poison it.", "dlg_3_3") + StartConversation(conversation, NPC, Spawn, "Good, I am glad you agree. That sloth of a man does nothing but degrade our race. Now where do you need to leave this?") +end + +function dlg_3_24(NPC, Spawn) + SetStepComplete(Spawn, QUEST_3, 3) + + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/aldera_v_exxa/fprt_hood05/quests/alderavexxa/aldera_x1_035.mp3", "", "", 4107808894, 2985104549, Spawn) + AddConversationOption(conversation, "I understand.", "IKnowNow") + AddConversationOption(conversation, "Interesting. Well, I'll be back later.") + StartConversation(conversation, NPC, Spawn, "You are correct. Although it would be amusing if the wrong person ate this. I am sure you do not want to collect all the parts again, so I had to be certain you would know what to do.") +end + +------------------------------------------------------------------------------------------------------------------------------------------- +-- QUEST 4 +------------------------------------------------------------------------------------------------------------------------------------------- + +function dlg_3_25(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/aldera_v_exxa/fprt_hood05/quests/alderavexxa/aldera_x1_036.mp3", "", "", 4060114825, 325379989, Spawn) + AddConversationOption(conversation, "We Teir'Dal should always calculate the costs.", "dlg_3_26") + StartConversation(conversation, NPC, Spawn, "I'm glad, for though this matter may seem trivial, there are often underlying reasons why we must do what we must do. In his indolence, Teah had stolen something without calculating its true cost. By thinking only of the moment and not of the future, he has sealed his doom.") +end + +function IKnowNow(NPC, Spawn, conversation) + if conversation == nil then + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + end + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/aldera_v_exxa/fprt_hood05/quests/alderavexxa/aldera_x1_024.mp3", "", "", 2075867357, 796948736, Spawn) + AddConversationOption(conversation, "I am ready if you are.", "OfferQuest4") + AddConversationOption(conversation, "You mean we finally get to kill him?", "OfferQuest4") + AddConversationOption(conversation, "Let me finish something else before we begin.") + StartConversation(conversation, NPC, Spawn, "I know now that you understand how a proper Teir'Dal should act and are ready to teach Teah his first, and final, lesson. One that would not be necessary if he had learned that the Teir'Dal are above sloth and greed.") +end + +function OfferQuest4(NPC, Spawn) + FaceTarget(NPC, Spawn) + OfferQuest(NPC, Spawn, QUEST_4) +end + +function OnQuest4(NPC, Spawn, conversation) + if GetQuestStep(Spawn, QUEST_4) == 1 then + -- Poisoned Loaf of Bread + if not HasItem(Spawn, POISONED_LOAF_OF_BREAD) then + SummonItem(Spawn, POISONED_LOAF_OF_BREAD) + SendMessage(Spawn, "You receive 1 Poisoned Loaf of Bread") + end + AddConversationOption(conversation, "Ok.") + StartConversation(conversation, NPC, Spawn, "I know now that you understand and are ready to teach Teah his first, and final, lesson. One that would not be necessary if he had learned that the Teir'Dal are above sloth and greed.") + elseif GetQuestStep(Spawn, QUEST_4) == 2 then + SetStepComplete(Spawn, QUEST_4, 2) + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/aldera_v_exxa/fprt_hood05/quests/alderavexxa/aldera_x1_031.mp3", "", "", 150259067, 4055890326, Spawn) + AddConversationOption(conversation, "I do what I can to get rid of scum like that.", "OfferQuest5") + AddConversationOption(conversation, "Finally, it took us long enough.", "OfferQuest5") + StartConversation(conversation, NPC, Spawn, "Good good, I have heard of Teah's departure from this world. Excellent work. ") + end +end + +------------------------------------------------------------------------------------------------------------------------- +-- QUEST 5 +------------------------------------------------------------------------------------------------------------------------- + +function OfferQuest5(NPC, Spawn) + FaceTarget(NPC, Spawn) + OfferQuest(NPC, Spawn, QUEST_5) +end + +function dlg_3_28(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/aldera_v_exxa/fprt_hood05/quests/alderavexxa/aldera_x1_026.mp3", "", "", 2507386365, 667468455, Spawn) + AddConversationOption(conversation, "There is nothing wrong with that. We all wish to return to our true home.", "dlg_3_29") + StartConversation(conversation, NPC, Spawn, "Know that the Teir'Dal are a divided people. There are Teir'Dal who, while not happy, can abide living in Freeport while we work towards regaining our past glories. There are also the Thexians, who believe that staying anywhere other than Neriak shows great weakness. They actively strive to find Neriak as we speak.") +end + +function dlg_3_29(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/aldera_v_exxa/fprt_hood05/quests/alderavexxa/aldera_x1_027.mp3", "", "", 3730174469, 543687528, Spawn) + AddConversationOption(conversation, "Good point.", "dlg_3_30") + AddConversationOption(conversation, "What wrong with being a zealot?", "dlg_3_30") + StartConversation(conversation, NPC, Spawn, "Ah, but you see, many view the Thexians as zealots, impatiently rushing toward the unknown. Most do not return. Trust in patience: approach the matter slowly, when you have more strength and knowledge on the matter rather than throwing your life away.") +end + +function dlg_3_30(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/aldera_v_exxa/fprt_hood05/quests/alderavexxa/aldera_x1_028.mp3", "", "", 941228334, 1597894001, Spawn) + AddConversationOption(conversation, "Yes, I am ready to begin.", "dlg_3_31") + StartConversation(conversation, NPC, Spawn, "This is all my view on the matter and as a fellow Teir'Dal, I feel obliged to share it with you. You must choose which path to follow in the end, if any. In any event, your current path leads you to take one of these specially baked loaves of bread from behind me to Lynsia's booth.") +end + +function dlg_3_31(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/aldera_v_exxa/fprt_hood05/quests/alderavexxa/aldera_x1_029.mp3", "", "", 4238359707, 1850134526, Spawn) + AddConversationOption(conversation, "I will be back when I have put our lesson plan in its place.") + StartConversation(conversation, NPC, Spawn, "Place the bread on Lynsia's counter. I have already sent an anonymous message to her to be sure she does not add it to her normal stock. With the blessing of Innoruuk, Teah will find the food shortly, and well, he will learn the hard way that sloth and greed are unbecoming to the Teir'Dal.") +end + diff --git a/server/SpawnScripts/Longshadow/ArmsdealerTNyvez.lua b/server/SpawnScripts/Longshadow/ArmsdealerTNyvez.lua new file mode 100644 index 000000000..b9d0d4cbd --- /dev/null +++ b/server/SpawnScripts/Longshadow/ArmsdealerTNyvez.lua @@ -0,0 +1,20 @@ +--[[ + Script Name : SpawnScripts/Longshadow/ArmsdealerTNyvez.lua + Script Purpose : Armsdealer T`Nyvez + Script Author : John Adams + Script Date : 2008.09.29 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +function spawn(NPC) + +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + PlayFlavor(NPC, "voiceover/english/darkelf_eco_evil_1/ft/service/weaponsmith/darkelf_weaponsmith_service_evil_1_hail_gf_9d2ef5c4.mp3", "A good weapon at your side is the only real friend you'll ever have!", "agree", 2557998412, 1299746806, Spawn) +end \ No newline at end of file diff --git a/server/SpawnScripts/Longshadow/CaptainLNek.lua b/server/SpawnScripts/Longshadow/CaptainLNek.lua new file mode 100644 index 000000000..9401330f3 --- /dev/null +++ b/server/SpawnScripts/Longshadow/CaptainLNek.lua @@ -0,0 +1,12 @@ +--[[ + Script Name : SpawnScripts/Longshadow/CaptainLNek.lua + Script Purpose : Captain L`Nek + Script Author : John Adams + Script Date : 2008.09.29 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + PlayFlavor(NPC, "voiceover/english/captain_l_nek/fprt_hood05/100_captain_lnek_multhail5_54f94dfc.mp3", "Hmm ... I am mistaken. You are not the one I seek.", "", 3750262963, 2820443341, Spawn) +end \ No newline at end of file diff --git a/server/SpawnScripts/Longshadow/CizraJYax.lua b/server/SpawnScripts/Longshadow/CizraJYax.lua new file mode 100644 index 000000000..09eb402cf --- /dev/null +++ b/server/SpawnScripts/Longshadow/CizraJYax.lua @@ -0,0 +1,13 @@ +--[[ + Script Name : SpawnScripts/Longshadow/CizraJYax.lua + Script Purpose : Cizra J`Yax + Script Author : John Adams + Script Date : 2008.09.29 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + PlayFlavor(NPC, "voiceover/english/darkelf_eco_evil_arcanescientists/ft/eco/evil/darkelf_female_eco_evil_arcanescientists_hail_gf_ec2a8705.mp3", "Mindless brutes that feed on the weak make up the ranks of the Freeport Militia.", "", 3674227482, 1789009112, Spawn) +end + diff --git a/server/SpawnScripts/Longshadow/DBeph.lua b/server/SpawnScripts/Longshadow/DBeph.lua new file mode 100644 index 000000000..929f4dc1c --- /dev/null +++ b/server/SpawnScripts/Longshadow/DBeph.lua @@ -0,0 +1,22 @@ +--[[ + Script Name : SpawnScripts/Longshadow/DBeph.lua + Script Purpose : D`Beph + Script Author : John Adams + Script Date : 2008.09.29 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + choice = math.random(1, 4) + + if choice == 1 then + PlayFlavor(NPC, "voiceover/english/darkelf_eco_evil_1/ft/service/guard/darkelf_guard_service_evil_1_hail_gm_582205e1.mp3", "Do you have business with the Freeport Militia?", "glare", 3330899926, 205777100, Spawn) + elseif choice == 2 then + PlayFlavor(NPC, "voiceover/english/darkelf_eco_evil_1/ft/service/guard/darkelf_guard_service_evil_1_hail_gm_7fa14d4.mp3", "Do not challenge my authority citizen. In Freeport, the Overlord's word is law!", "scold", 3071777755, 1811086423, Spawn) + elseif choice == 3 then + PlayFlavor(NPC, "voiceover/english/darkelf_eco_evil_1/ft/service/guard/darkelf_guard_service_evil_1_hail_gm_870ae3cb.mp3", "The Overlord commands me to patrol this area, and so I must.", "tapfoot", 3455786340, 1963116786, Spawn) + elseif choice == 4 then + PlayFlavor(NPC, "voiceover/english/darkelf_eco_evil_1/ft/service/guard/darkelf_guard_service_evil_1_hail_gm_edb196f8.mp3", "All praises to the Overlord. The Militia protects loyal citizens of Freeport.", "salute_freeport", 3432620709, 3039361332, Spawn) + end +end \ No newline at end of file diff --git a/server/SpawnScripts/Longshadow/EzriaMLinar.lua b/server/SpawnScripts/Longshadow/EzriaMLinar.lua new file mode 100644 index 000000000..d8ae29228 --- /dev/null +++ b/server/SpawnScripts/Longshadow/EzriaMLinar.lua @@ -0,0 +1,42 @@ +--[[ + Script Name : SpawnScripts/Longshadow/EzriaMLinar.lua + Script Purpose : Ezria M'Linar + Script Author : John Adams + Script Date : 2008.09.29 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +function spawn(NPC) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/merchant_ezria_milnar/fprt_hood05/std_de_female_ezria_mlinar.mp3", "", "", 1300269011, 2618097834, Spawn) + AddConversationOption(conversation, "I'm still deciding. I'll let you know if I want anything.", "dlg_1_1") + AddConversationOption(conversation, "What is Neriak?") + StartConversation(conversation, NPC, Spawn, "Ah. How lovely. Perhaps you are a fellow sophisticate with a palate for the finer things? I am a vintner, you see. Ezria M'Linar is my name. My wines capture the essence of a long lost Neriak.") +end + +function dlg_1_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/merchant_ezria_milnar/fprt_hood05/std_de_female_ezria_mlinar003.mp3", "", "", 1051883363, 861878972, Spawn) + AddConversationOption(conversation, "Who are the Teir'Dal?") + StartConversation(conversation, NPC, Spawn, "Oh my. Please. Are you youngsters so ignorant of history? Neriak is the ancient homeland of the Teir'Dal, lost for centuries beneath the forest lands to the north.") +end + +function dlg_1_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/merchant_ezria_milnar/fprt_hood05/std_de_female_ezria_mlinar004.mp3", "", "", 2552789619, 2468887624, Spawn) + AddConversationOption(conversation, "Ok.", "dlg_1_3") + StartConversation(conversation, NPC, Spawn, "I weep for the future. Teir'Dal, my poor uninformed friend, is the proper elvish name for the dark elf race. Now please. Leave me be.") +end \ No newline at end of file diff --git a/server/SpawnScripts/Longshadow/ImnatDVren.lua b/server/SpawnScripts/Longshadow/ImnatDVren.lua new file mode 100644 index 000000000..ddd63a59f --- /dev/null +++ b/server/SpawnScripts/Longshadow/ImnatDVren.lua @@ -0,0 +1,12 @@ +--[[ + Script Name : SpawnScripts/Longshadow/ImnatDVren.lua + Script Purpose : Imnat D`Vren + Script Author : John Adams + Script Date : 2008.09.29 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + PlayFlavor(NPC, "voiceover/english/imnat_d_vren/fprt_hood05/100_std_de_male_imnat_dvren_callout_c7828a4.mp3", "Bah! That Maliz keeps breaking everything. He's not allowed near what little furniture we have left! What do you want? Can't you see I'm busy!", "", 3649396705, 3766219054, Spawn) +end \ No newline at end of file diff --git a/server/SpawnScripts/Longshadow/InnkeeperTMel.lua b/server/SpawnScripts/Longshadow/InnkeeperTMel.lua new file mode 100644 index 000000000..111b45421 --- /dev/null +++ b/server/SpawnScripts/Longshadow/InnkeeperTMel.lua @@ -0,0 +1,162 @@ +--[[ + Script Name : SpawnScripts/Longshadow/InnkeeperTMel.lua + Script Purpose : Innkeeper T`Mel + Script Author : John Adams + Script Date : 2008.09.29 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +function spawn(NPC) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "innkeep_t_mel/fprt_hood05/innkeeper010.mp3", "", "", 2340348153, 751626447, Spawn) + AddConversationOption(conversation, "Please.", "dlg_9_1") + AddConversationOption(conversation, "No thanks.") + StartConversation(conversation, NPC, Spawn, "Hello .. GetName(Spawn) .. . I am the Innkeeper for this district. We have received word of your arrival and have a room prepared for you. Would you like to know more about housing?") +end + +function dlg_9_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "innkeep_t_mel/fprt_hood05/innkeeper001.mp3", "", "", 1604544073, 412984361, Spawn) + AddConversationOption(conversation, "How can I place an item in my house?", "dlg_9_2") + AddConversationOption(conversation, "What kind of housing is available to me?") + AddConversationOption(conversation, "What is the marketboard for?") + AddConversationOption(conversation, "What is my house for?") + AddConversationOption(conversation, "Nothing right now.") + StartConversation(conversation, NPC, Spawn, "What would you like to know?") +end + +function dlg_9_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "innkeeper_uglar_splinterthumb/fprt_hood05/innkeeper002.mp3", "", "", 2240470987, 2600508927, Spawn) + AddConversationOption(conversation, "What kind of housing is available to me?", "dlg_9_3") + AddConversationOption(conversation, "What is the marketboard for?") + AddConversationOption(conversation, "What is my house for?") + AddConversationOption(conversation, "That's enough for now, thanks.") + StartConversation(conversation, NPC, Spawn, "To place an item in your house you must first find the item in your inventory, once you have done so right-click on the item and select the ‘place’ option. You will then see a tinted outline of your item in your house, when the item is highlighted green you may place it in that location, if it is highlighted red you cannot.") +end + +function dlg_9_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "innkeeper_uglar_splinterthumb/fprt_hood05/innkeeper003.mp3", "", "", 3084973441, 655607663, Spawn) + AddConversationOption(conversation, "Is any other housing available?", "dlg_9_4") + AddConversationOption(conversation, "How can I place an item in my house?") + AddConversationOption(conversation, "What is the marketboard for?") + AddConversationOption(conversation, "What is my house for?") + AddConversationOption(conversation, "That's enough for now, thanks.") + StartConversation(conversation, NPC, Spawn, "Many different kinds of housing are available in the city of Freeport. In reward for your services, the Overlord has awarded you a one bedroom house for free at this time.") +end + +function dlg_9_4(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "innkeeper_uglar_splinterthumb/fprt_hood05/innkeeper004.mp3", "", "", 3828782678, 3247840746, Spawn) + AddConversationOption(conversation, "How can I place an item in my house?", "dlg_9_5") + AddConversationOption(conversation, "What is the marketboard for?") + AddConversationOption(conversation, "What is my house for?") + AddConversationOption(conversation, "That’s enough for now, thanks.") + StartConversation(conversation, NPC, Spawn, "Yes, the grand city of Freeport has houses ranging from the basic one bedroom model on up to 5 bedroom apartments, although the most ostentatious of these are only available to the most prestigious citizens of the city.") +end + +function dlg_9_5(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "innkeeper_uglar_splinterthumb/fprt_hood05/innkeeper002.mp3", "", "", 2240470987, 2600508927, Spawn) + AddConversationOption(conversation, "What kind of housing is available to me?", "dlg_9_6") + AddConversationOption(conversation, "What is the marketboard for?") + AddConversationOption(conversation, "What is my house for?") + AddConversationOption(conversation, "That's enough for now, thanks.") + StartConversation(conversation, NPC, Spawn, "To place an item in your house you must first find the item in your inventory, once you have done so right-click on the item and select the ‘place’ option. You will then see a tinted outline of your item in your house, when the item is highlighted green you may place it in that location, if it is highlighted red you cannot.") +end + +function dlg_9_6(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "innkeeper_uglar_splinterthumb/fprt_hood05/innkeeper005.mp3", "", "", 3482692093, 3042315270, Spawn) + AddConversationOption(conversation, "How do I sell items using my marketboard?") + AddConversationOption(conversation, "How can I place an item in my house?", "dlg_9_7") + AddConversationOption(conversation, "What kind of housing is available to me?") + AddConversationOption(conversation, "What is my house for?") + AddConversationOption(conversation, "That’s enough for now, thanks.") + StartConversation(conversation, NPC, Spawn, "The marketboard is a house item, similar to books, beds, pets and other such items. What sets the marketboard apart from the rest however is that once your marketboard is mounted on a wall in your home you can use it to sell items to other citizens of Freeport. These items can be purchased by your fellow citizens at a Broker. Brokers can be found in all primary districts of the city as well as in the Tradeskill wholesalers.") +end + +function dlg_9_7(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "innkeeper_uglar_splinterthumb/fprt_hood05/innkeeper006.mp3", "", "", 2103390575, 2406130630, Spawn) + AddConversationOption(conversation, "I can sell things through a broker?", "dlg_9_8") + AddConversationOption(conversation, "How can I place an item in my house?") + AddConversationOption(conversation, "What kind of housing is available to me?") + AddConversationOption(conversation, "What is my house for?") + AddConversationOption(conversation, "That’s enough for now, thanks.") + StartConversation(conversation, NPC, Spawn, "Selling through your market board works the same way as directly selling through a broker, it just allows you to do it from the comfort of your home.") +end + +function dlg_9_8(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "How can I place an item in my house?", "dlg_9_9") + AddConversationOption(conversation, "What kind of housing is available to me?") + AddConversationOption(conversation, "What is the marketboard for?") + AddConversationOption(conversation, "That’s enough for now, thanks.") + StartConversation(conversation, NPC, Spawn, "Yes. For a fee, brokers are willing to post the goods you are willing to sell to other adventurers. Brokers can be found in all primary districts of the city as well as in the Tradeskill wholesalers.") +end + +function dlg_9_9(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "innkeeper_uglar_splinterthumb/fprt_hood05/innkeeper005.mp3", "", "", 3482692093, 3042315270, Spawn) + AddConversationOption(conversation, "How do I sell items using my marketboard?") + AddConversationOption(conversation, "How can I place an item in my house?") + AddConversationOption(conversation, "What kind of housing is available to me?", "dlg_9_10") + AddConversationOption(conversation, "What is my house for?") + AddConversationOption(conversation, "That’s enough for now, thanks.") + StartConversation(conversation, NPC, Spawn, "The marketboard is a house item, similar to books, beds, pets and other such items. What sets the marketboard apart from the rest however is that once your marketboard is mounted on a wall in your home you can use it to sell items to other citizens of Freeport. These items can be purchased by your fellow citizens at a Broker. Brokers can be found in all primary districts of the city as well as in the Tradeskill wholesalers.") +end + +function dlg_9_10(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "innkeeper_uglar_splinterthumb/fprt_hood05/innkeeper007.mp3", "", "", 3903539507, 2186966695, Spawn) + AddConversationOption(conversation, "Anything else?") + AddConversationOption(conversation, "How can I place an item in my house?") + AddConversationOption(conversation, "What kind of housing is available to me?") + AddConversationOption(conversation, "What is the marketboard for?", "dlg_9_11") + AddConversationOption(conversation, "That’s enough for now, thanks.") + StartConversation(conversation, NPC, Spawn, "You will find that your house has many uses, the first of which is the ability to store house items. Each house has a limit to the number of house items you can place in it, so as you gain more possessions you wish to display you will need larger houses to do so.") +end + +function dlg_9_11(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "innkeeper_uglar_splinterthumb/fprt_hood05/innkeeper008.mp3", "", "", 3708157773, 1757079976, Spawn) + AddConversationOption(conversation, "How can I place an item in my house?", "dlg_9_12") + AddConversationOption(conversation, "What kind of housing is available to me?") + AddConversationOption(conversation, "What is the marketboard for?") + AddConversationOption(conversation, "That’s enough for now, thanks.") + StartConversation(conversation, NPC, Spawn, "Yes, houses have what we call vaults; these are extra storage within your house, the larger your house is, the more storage space available. By placing items in this house vault and using your marketboard, you can sell these items to other citizens of Freeport without being in your room.") +end \ No newline at end of file diff --git a/server/SpawnScripts/Longshadow/InnuraeVTarris.lua b/server/SpawnScripts/Longshadow/InnuraeVTarris.lua new file mode 100644 index 000000000..547746807 --- /dev/null +++ b/server/SpawnScripts/Longshadow/InnuraeVTarris.lua @@ -0,0 +1,152 @@ +--[[ + Script Name : SpawnScripts/Longshadow/InnuraeVTarris.lua + Script Purpose : Innurae V`Tarris + Script Author : John Adams + Script Date : 2008.09.29 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +function spawn(NPC) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/innurae_v_tarris/fprt_hood05/quests/innuraevtarris/lore_innurae.mp3", "", "", 505131296, 528063113, Spawn) + AddConversationOption(conversation, "And where, pray tell, shall you be moving on to?", "dlg_12_1") + AddConversationOption(conversation, "Then move on, hag, and leave the space for those who can provide some use!") + StartConversation(conversation, NPC, Spawn, "Don't expect anything from me, young one. This place is but a mere rest stop before I move on.") +end + +function dlg_12_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/innurae_v_tarris/fprt_hood05/quests/innuraevtarris/lore_innurae000.mp3", "", "", 3567010242, 2488453546, Spawn) + AddConversationOption(conversation, "Home, what home, you foolish old woman?! Neriak was destroyed centuries ago!", "dlg_12_2") + AddConversationOption(conversation, "Ha! While you die searching for your lost Neriak, I will be prospering and gaining power!") + StartConversation(conversation, NPC, Spawn, "Neriak is the place of my birth, and it shall be the place of my death. While you remain here in the care of the humans, I will be home. ") +end + +function dlg_12_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/innurae_v_tarris/fprt_hood05/quests/innuraevtarris/lore_innurae001.mp3", "", "", 4044045516, 2985844795, Spawn) + AddConversationOption(conversation, "Neriak has been found?!", "dlg_12_3") + AddConversationOption(conversation, "Wake up and accept reality! Neriak is gone!") + StartConversation(conversation, NPC, Spawn, "Yes, Neriak was once lost to us, but not all of us chose to debase ourselves in a contemptible union with the humans. Those of us who care about our heritage, those of us who are truly TeirDal, are searching for a way to return to the grace and legacy of our people. It would seem that such a way has already been found...") +end + +function dlg_12_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/innurae_v_tarris/fprt_hood05/quests/innuraevtarris/lore_innurae002.mp3", "", "", 3686330680, 1121720833, Spawn) + AddConversationOption(conversation, "What siege?", "dlg_12_4") + AddConversationOption(conversation, "Who are the loyalists?", "dlg_12_9") + AddConversationOption(conversation, "How was the foreign quarter destroyed?", "dlg_12_11") + AddConversationOption(conversation, "So you found some ruins, eh? Yeah, good luck with that.") + StartConversation(conversation, NPC, Spawn, "Not entirely. The loyalists to the cause believe that they have uncovered what was once an entrance to the Foreign Quarter. However, as that portion of the city was destroyed in the siege, we may have some time left before we can find our home.") +end + +function dlg_12_4(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/innurae_v_tarris/fprt_hood05/quests/innuraevtarris/lore_innurae003.mp3", "", "", 4154815778, 4054614513, Spawn) + AddConversationOption(conversation, "So, Neriak fell to a group of halflings?", "dlg_12_5") + AddConversationOption(conversation, "What happened in Faydwer?") + AddConversationOption(conversation, "I have no time to listen to this now.") + StartConversation(conversation, NPC, Spawn, "During the age of Turmoil, Neriak was besieged by Leatherfoot Raiders. The forces of Neriak were thin, as Faydwer had deployed most of the Indigo Brotherhood. So we were unsuspecting and unprepared for such an attack. ") +end + +function dlg_12_5(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/innurae_v_tarris/fprt_hood05/quests/innuraevtarris/lore_innurae004.mp3", "", "", 2883566286, 1697596405, Spawn) + AddConversationOption(conversation, "You obviously have no love for your ruler; why return to Neriak then?", "dlg_12_6") + AddConversationOption(conversation, "I have no time to listen to this now.") + StartConversation(conversation, NPC, Spawn, "In a way, yes, but the city also fell to the greedy ambitions of a warlord king who neglected the needs of his people and soiled the legacy of his great heritage in pursuit of conquest over the refuse and swine that slithers upon the surface of this world.") +end + +function dlg_12_6(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/innurae_v_tarris/fprt_hood05/quests/innuraevtarris/lore_innurae005.mp3", "", "", 895354264, 3005681462, Spawn) + AddConversationOption(conversation, "Why are you so against conquering the surface world?", "dlg_12_7") + AddConversationOption(conversation, "I have no time to listen to this now.") + StartConversation(conversation, NPC, Spawn, "If the city has been shut out from the rest of the world and returned to its proper place of dominion in the Underfoot, then there are no longer any wasteful attempts at conquering this abominable haven of refuse, now are there?") +end + +function dlg_12_7(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/innurae_v_tarris/fprt_hood05/quests/innuraevtarris/lore_innurae006.mp3", "", "", 1523175183, 964525033, Spawn) + AddConversationOption(conversation, "So, now that Neriak is found, you will return home?", "dlg_12_8") + AddConversationOption(conversation, "I have no time to listen to this now.") + StartConversation(conversation, NPC, Spawn, "No surface campaign has proved fruitful. The TeirDal are the ruling force in the Underfoot. No subterranean race rivals our power and none can withstand our dominion. Besides, ownership of the surface world would be tantamount to owning a dung hill festering with maggots and flies.") +end + +function dlg_12_8(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/innurae_v_tarris/fprt_hood05/quests/innuraevtarris/lore_innurae010.mp3", "", "", 852727047, 1895315430, Spawn) + AddConversationOption(conversation, "What about the siege?", "dlg_12_9") + AddConversationOption(conversation, "Who are the loyalists?") + AddConversationOption(conversation, "How was the foreign quarter destroyed?") + AddConversationOption(conversation, "Not at the moment. If I need any more information, I'll be back.") + StartConversation(conversation, NPC, Spawn, "I long for the day when I return home. While I am still here, though, I choose to educate curiosity-seekers. Would you like to know anything else?") +end + +function dlg_12_9(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/innurae_v_tarris/fprt_hood05/quests/innuraevtarris/lore_innurae008.mp3", "", "", 787145551, 4172782462, Spawn) + AddConversationOption(conversation, "So the loyalists have been successful? Why are you still here then, woman?!") + StartConversation(conversation, NPC, Spawn, "The loyalists are all that is left of the TeirDal; all the others are traitorous whelps who only wear our dark skin and fair hair. The loyalists are dedicated to the cause of being restored to our nation.") +end + +function dlg_12_10(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/innurae_v_tarris/fprt_hood05/quests/innuraevtarris/lore_innurae010.mp3", "", "", 852727047, 1895315430, Spawn) + AddConversationOption(conversation, "What about the siege?", "dlg_12_11") + AddConversationOption(conversation, "Who are the loyalists?") + AddConversationOption(conversation, "How was the foreign quarter destroyed?", "dlg_12_11") + AddConversationOption(conversation, "Not at the moment. If I need any more information, I'll be back.") + StartConversation(conversation, NPC, Spawn, "I long for the day when I return home. While I am still here, though, I choose to educate curiosity-seekers. Would you like to know anything else?") +end + +function dlg_12_11(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/innurae_v_tarris/fprt_hood05/quests/innuraevtarris/lore_innurae007.mp3", "", "", 1084233029, 4258746911, Spawn) + AddConversationOption(conversation, "If Neriak has been found, will you return to it?") + AddConversationOption(conversation, "I have no time to listen to this now.") + StartConversation(conversation, NPC, Spawn, "I was very young when the siege began, but I saw the entrance collapsing as I fought in the forest with the other dragoons. It became silent as the rumbling destruction came to pass. All fighting ceased; everyone was in awe of the unexpected event. I can't be certain of what happened, exactly. All that I know is that a great force collapsed the cavern.") +end + +function dlg_12_12(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/innurae_v_tarris/fprt_hood05/quests/innuraevtarris/lore_innurae010.mp3", "", "", 852727047, 1895315430, Spawn) + AddConversationOption(conversation, "What about the siege?", "dlg_12_13") + AddConversationOption(conversation, "Who are the loyalists?") + AddConversationOption(conversation, "How was the foreign quarter destroyed?") + AddConversationOption(conversation, "Not at the moment. If I need any more information, I'll be back.") + StartConversation(conversation, NPC, Spawn, "I long for the day when I return home. While I am still here, though, I choose to educate curiosity-seekers. Would you like to know anything else?") +end \ No newline at end of file diff --git a/server/SpawnScripts/Longshadow/JuturnaPostumus.lua b/server/SpawnScripts/Longshadow/JuturnaPostumus.lua new file mode 100644 index 000000000..011f60933 --- /dev/null +++ b/server/SpawnScripts/Longshadow/JuturnaPostumus.lua @@ -0,0 +1,278 @@ +--[[ + Script Name : SpawnScripts/Longshadow/JuturnaPostumus.lua + Script Purpose : Juturna Postumus + Script Author : John Adams + Script Date : 2009.04.11 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +function spawn(NPC) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_1_1003.mp3", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Nothing. Just saying hello.", "dlg_0_1") + AddConversationOption(conversation, "Nothing. Good bye.") + StartConversation(conversation, NPC, Spawn, "What do you want from me?") + if convo==2 then + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_3_1003.mp3", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Nothing. Just saying hello.", "dlg_2_1") + AddConversationOption(conversation, "Nothing. Good bye.") + StartConversation(conversation, NPC, Spawn, "What do you want from me?") + end + + if convo==3 then + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_1_1003.mp3", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Nothing. Just saying hello.", "dlg_3_1") + AddConversationOption(conversation, "Nothing. Good bye.") + StartConversation(conversation, NPC, Spawn, "What do you want from me?") + end + +end + +function dlg_0_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "What happened to your son?", "dlg_0_2") + StartConversation(conversation, NPC, Spawn, "Forgive me...that was rather rude of me! You caught me remembering the past...thinking about my son, may the gods preserve his memory.") +end + +function dlg_0_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Where would you have gone?", "dlg_0_3") + AddConversationOption(conversation, "I'm not interested in your story anyway.") + StartConversation(conversation, NPC, Spawn, "I don't want to burden you with the details. He's...been dead now for many years. Even now, though, I remember his smile and laugh. If only I'd listened to my heart and left when I had the chance.") +end + +function dlg_0_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Why didn't you join them, then?", "dlg_0_4") + StartConversation(conversation, NPC, Spawn, "I have relatives...elsewhere. They're warm, friendly and caring people. Their minds and hearts are open. Their lives are rich and full of beauty. I'm not speaking of wealth, but of another sort of richness.") +end + +function dlg_0_4(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "I'm sorry to hear that.", "dlg_0_5") + AddConversationOption(conversation, "It's been a long time since then, you said. Get over it.") + StartConversation(conversation, NPC, Spawn, "My husband would not leave Freeport then. When he finally did leave, it was to take our son and...and... Well...my husband got what he deserved in the end, but not my son. He deserved a much better end.") +end + +function dlg_0_5(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "A client?", "dlg_0_6") + StartConversation(conversation, NPC, Spawn, "You seem like an open-minded person. We squires can sense that about others. I...can tell you more about this, if you would become a client of mine.") +end + +function dlg_0_6(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "You have relatives elsewhere. Why don't you stay with them now?", "dlg_0_7") + StartConversation(conversation, NPC, Spawn, "There are a handful of squires in Freeport who assist their clients in learning more about other places, where our lives would not be filled with the stress that living here in Freeport can bring.") +end + +function dlg_0_7(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "I can get the coin, but it will take a bit of time.", "dlg_0_8") + AddConversationOption(conversation, "If I gave you the coin, it would be a gift and not a loan.") + AddConversationOption(conversation, "I've heard this story a thousand times. You'll not get anything from me!") + AddConversationOption(conversation, "Nice try. Hah! Good riddance.") + StartConversation(conversation, NPC, Spawn, "Widowed as young as I was, I've been unable to save anything. I barely scrape by as it is. If...if you could lend me five hundred gold, I could go to my relatives. I'd pay you back...I would!") +end + +function dlg_2_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "What happened to your son?", "dlg_2_2") + StartConversation(conversation, NPC, Spawn, "Forgive me...that was rather rude of me! You caught me remembering the past...thinking about my son, may the gods preserve his memory.") +end + +function dlg_2_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Where would you have gone?", "dlg_2_3") + AddConversationOption(conversation, "I'm not interested in your story anyway.") + StartConversation(conversation, NPC, Spawn, "I don't want to burden you with the details. He's...been dead now for many years. Even now, though, I remember his smile and laugh. If only I'd listened to my heart and left when I had the chance.") +end + +function dlg_2_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Why didn't you join them, then?", "dlg_2_4") + StartConversation(conversation, NPC, Spawn, "I have relatives...elsewhere. They're warm, friendly and caring people. Their minds and hearts are open. Their lives are rich and full of beauty. I'm not speaking of wealth, but of another sort of richness.") +end + +function dlg_2_4(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "I'm sorry to hear that.", "dlg_2_5") + AddConversationOption(conversation, "It's been a long time since then, you said. Get over it.") + StartConversation(conversation, NPC, Spawn, "My husband would not leave Freeport then. When he finally did leave, it was to take our son and...and... Well...my husband got what he deserved in the end, but not my son. He deserved a much better end.") +end + +function dlg_2_5(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "A client?", "dlg_2_6") + StartConversation(conversation, NPC, Spawn, "You seem like an open-minded person. We squires can sense that about others. I...can tell you more about this, if you would become a client of mine.") +end + +function dlg_2_6(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "You have relatives elsewhere. Why don't you stay with them now?", "dlg_2_7") + StartConversation(conversation, NPC, Spawn, "There are a handful of squires in Freeport who assist their clients in learning more about other places, where our lives would not be filled with the stress that living here in Freeport can bring.") +end + +function dlg_2_7(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "I can get the coin, but it will take a bit of time.", "dlg_2_8") + AddConversationOption(conversation, "If I gave you the coin, it would be a gift and not a loan.") + AddConversationOption(conversation, "I've heard this story a thousand times. You'll not get anything from me!") + AddConversationOption(conversation, "Nice try. Hah! Good riddance.") + StartConversation(conversation, NPC, Spawn, "Widowed as young as I was, I've been unable to save anything. I barely scrape by as it is. If...if you could lend me five hundred gold, I could go to my relatives. I'd pay you back...I would!") +end + +function dlg_2_8(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Tell me more.") + StartConversation(conversation, NPC, Spawn, "I was right: your heart and mind are open. There is no need to give me anything. I have much that I can give you, though. There is a way to .. GetName(Spawn) .. . and security. Are you interested in learning about it?") +end + +function dlg_3_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "What happened to your son?", "dlg_3_2") + StartConversation(conversation, NPC, Spawn, "Forgive me...that was rather rude of me! You caught me remembering the past...thinking about my son, may the gods preserve his memory.") +end + +function dlg_3_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Where would you have gone?", "dlg_3_3") + AddConversationOption(conversation, "I'm not interested in your story anyway.") + StartConversation(conversation, NPC, Spawn, "I don't want to burden you with the details. He's...been dead now for many years. Even now, though, I remember his smile and laugh. If only I'd listened to my heart and left when I had the chance.") +end + +function dlg_3_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Why didn't you join them, then?", "dlg_3_4") + StartConversation(conversation, NPC, Spawn, "I have relatives...elsewhere. They're warm, friendly and caring people. Their minds and hearts are open. Their lives are rich and full of beauty. I'm not speaking of wealth, but of another sort of richness.") +end + +function dlg_3_4(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "I'm sorry to hear that.", "dlg_3_5") + AddConversationOption(conversation, "It's been a long time since then, you said. Get over it.") + StartConversation(conversation, NPC, Spawn, "My husband would not leave Freeport then. When he finally did leave, it was to take our son and...and... Well...my husband got what he deserved in the end, but not my son. He deserved a much better end.") +end + +function dlg_3_5(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "A client?", "dlg_3_6") + StartConversation(conversation, NPC, Spawn, "You seem like an open-minded person. We squires can sense that about others. I...can tell you more about this, if you would become a client of mine.") +end + +function dlg_3_6(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "You have relatives elsewhere. Why don't you stay with them now?", "dlg_3_7") + StartConversation(conversation, NPC, Spawn, "There are a handful of squires in Freeport who assist their clients in learning more about other places, where our lives would not be filled with the stress that living here in Freeport can bring.") +end + +function dlg_3_7(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "I can get the coin, but it will take a bit of time.", "dlg_3_8") + AddConversationOption(conversation, "If I gave you the coin, it would be a gift and not a loan.") + AddConversationOption(conversation, "I've heard this story a thousand times. You'll not get anything from me!") + AddConversationOption(conversation, "Nice try. Hah! Good riddance.") + StartConversation(conversation, NPC, Spawn, "Widowed as young as I was, I've been unable to save anything. I barely scrape by as it is. If...if you could lend me five hundred gold, I could go to my relatives. I'd pay you back...I would!") +end + +function dlg_3_8(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Tell me more.", "dlg_3_9") + StartConversation(conversation, NPC, Spawn, "I was right: your heart and mind are open. There is no need to give me anything. I have much that I can give you, though. There is a way to .. GetName(Spawn) .. . and security. Are you interested in learning about it?") +end + +function dlg_3_9(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "I can handle it.", "dlg_3_10") + StartConversation(conversation, NPC, Spawn, "A stockpile of weapons and armor is hidden somewhere in Freeport. We must locate it before it's distributed where it will do harm. A gnomish squire invented a clever device -- a listenomitron -- that allows someone to hear things from quite a distance away. The listenomitrons only work at night, so someone whose bones do not creak as mine do is the best person for the task.") +end + +function dlg_3_10(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "I'll take care of this, don't worry.", "dlg_3_11") + StartConversation(conversation, NPC, Spawn, "You are most kind. Once you've placed the listenomitrons, please visit the squire in the pub room at the Blood Haze Inn in West Freeport. You'll receive further directions then. The blessings of the gods go with you.") +end \ No newline at end of file diff --git a/server/SpawnScripts/Longshadow/KTolia.lua b/server/SpawnScripts/Longshadow/KTolia.lua new file mode 100644 index 000000000..c159e72f0 --- /dev/null +++ b/server/SpawnScripts/Longshadow/KTolia.lua @@ -0,0 +1,12 @@ +--[[ + Script Name : SpawnScripts/Longshadow/KTolia.lua + Script Purpose : K`Tolia + Script Author : John Adams + Script Date : 2008.09.29 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + PlayFlavor(NPC, "voiceover/english/darkelf_eco_evil_1/ft/service/alchemist/darkelf_alchemist_service_evil_1_hail_gf_28ab45b2.mp3", "Poison testers, it's been my biggest seller for the past several months. Of course poison was a close second. ", "ponder", 2704427591, 1913712670, Spawn) +end \ No newline at end of file diff --git a/server/SpawnScripts/Longshadow/KalraathLVin.lua b/server/SpawnScripts/Longshadow/KalraathLVin.lua new file mode 100644 index 000000000..d8b755620 --- /dev/null +++ b/server/SpawnScripts/Longshadow/KalraathLVin.lua @@ -0,0 +1,97 @@ +--[[ + Script Name : SpawnScripts/Longshadow/KalraathLVin.lua + Script Purpose : Kalraath L'Vin + Script Author : John Adams + Script Date : 2008.09.29 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +-- Quest ID's +local DARKELF_MENTOR_QUEST_3 = 337 + +-- Item ID's +local ALCHEMICAL_MEDIUM = 3404 + +function spawn(NPC) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/kalraath_l_vin/fprt_hood05/quests/kalraathlvin/kalraath_x1_000.mp3", "", "", 2994283695, 3900890535, Spawn) + + if HasCompletedQuest(Spawn, DARKELF_MENTOR_QUEST_3) then + Say(NPC, "I have no business left with you.", Spawn) + else + if HasQuest(Spawn, DARKELF_MENTOR_QUEST_3) then + if GetQuestStep(Spawn, DARKELF_MENTOR_QUEST_3) == 1 then + AddConversationOption(conversation, "You are right, I am in search of something. I was sent by Aldera, so I am pretty certain you do have something for me.", "dlg_2_1") + else + AddConversationOption(conversation, "I fear that somehow, the medium you gave me earlier has been...consumed.", "GiveAnotherMedium") + end + end + + AddConversationOption(conversation, "If you insist.") + StartConversation(conversation, NPC, Spawn, "You look like someone who is searching for something. I do not have anything for you though, so you should search elsewhere.") + end +end + +--------------------------------------------------------------------------------------------------------- +-- DARKELF_MENTOR_QUEST_3 +-------------------------------------------------------------------------------------------------------- + +function dlg_2_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/kalraath_l_vin/fprt_hood05/quests/kalraathlvin/kalraath_x1_001.mp3", "", "", 4039460783, 1284796777, Spawn) + AddConversationOption(conversation, "She is looking for an alchemical medium.", "dlg_2_2") + StartConversation(conversation, NPC, Spawn, "Really? I'm not expecting any business from her today. What exactly is she up to now?") +end + +function dlg_2_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/kalraath_l_vin/fprt_hood05/quests/kalraathlvin/kalraath_x1_002.mp3", "", "", 1820176504, 2436528040, Spawn) + AddConversationOption(conversation, "An ingestible one. She said you should have it.", "dlg_2_3") + StartConversation(conversation, NPC, Spawn, "What type of medium is she looking for? There are lots of things that can be used as a medium you know.") +end + +function dlg_2_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/kalraath_l_vin/fprt_hood05/quests/kalraathlvin/kalraath_x1_003.mp3", "", "", 3888786503, 1438196062, Spawn) + AddConversationOption(conversation, "She is teaching me the ancient arts of the Teir'Dal and it is required to complete my lesson.", "dlg_2_4") + StartConversation(conversation, NPC, Spawn, "I do, but what exactly does she want to use it for?") +end + +function dlg_2_4(NPC, Spawn) + SetStepComplete(Spawn, DARKELF_MENTOR_QUEST_3, 1) + + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/kalraath_l_vin/fprt_hood05/quests/kalraathlvin/kalraath_x1_004.mp3", "", "", 85765803, 4029729488, Spawn) + AddConversationOption(conversation, "Thank you.", "dlg_2_5") + StartConversation(conversation, NPC, Spawn, "Fine, take it, I do not have time to pry the whys and wherefores from you... at least, not at this moment. Let her know she owes me the normal price for it.") +end + +function GiveAnotherMedium(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + -- Alchemical Medium + if not HasItem(Spawn, ALCHEMICAL_MEDIUM) then + SummonItem(Spawn, ALCHEMICAL_MEDIUM) + end + + AddConversationOption(conversation, "Thank you, I will keep that in mind.") + StartConversation(conversation, NPC, Spawn, "And you seek another. You must be careful with your items, for not everyone you meet will be as generous as I am in giving you another.") +end \ No newline at end of file diff --git a/server/SpawnScripts/Longshadow/KylanithDLar.lua b/server/SpawnScripts/Longshadow/KylanithDLar.lua new file mode 100644 index 000000000..45b71e84b --- /dev/null +++ b/server/SpawnScripts/Longshadow/KylanithDLar.lua @@ -0,0 +1,94 @@ +--[[ + Script Name : SpawnScripts/Longshadow/KylanithDLar.lua + Script Purpose : Kylanith D`Lar + Script Author : John Adams + Script Date : 2008.09.29 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +function spawn(NPC) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/optional1/kylanith_d_lar/fprt_hood05/qst_kylanith_hail.mp3", "", "", 387692981, 2731095766, Spawn) + AddConversationOption(conversation, "I cannot chat now. Farewell.") + --AddConversationOption(conversation, "Freeport is strong! Qeynos is weak!") + StartConversation(conversation, NPC, Spawn, "They call this the Age of Destiny. It's the age of someone's or some empire's claim to destiny. The world is in ruins. And now here we are, in Freeport, begging for acceptance and the embrace of its mighty walls.") +end + +function dlg_10_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/optional1/kylanith_d_lar/fprt_hood05/quests/kylanithdlar/kylanith_lore_01.mp3", "", "", 1570701615, 3622138466, Spawn) + AddConversationOption(conversation, "Careful! Do not speak the Overlord's name or we shall both die!") + AddConversationOption(conversation, "I cannot chat now. Farewell.", "dlg_10_2") + StartConversation(conversation, NPC, Spawn, "Qeynos or Freeport? There was no choice for my kind. The Antonicans fear the greatness of the Teir'Dal. And the Overlord? I believe he knows he cannot rule us, but better to keep an eye on us than let us claim our destiny. We only exist within Longshadow Alley by the will of the Foci, not Lucan!") +end + +function dlg_10_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/optional1/kylanith_d_lar/fprt_hood05/quests/kylanithdlar/kylanith_lore_02.mp3", "", "", 1956578837, 2860993398, Spawn) + AddConversationOption(conversation, "What grandeur?", "dlg_10_3") + AddConversationOption(conversation, "I cannot chat now. Farewell.") + StartConversation(conversation, NPC, Spawn, "I would rather welcome death than give Lucan allegiance! To those who bask in the light, we have done little more than pose a threat to their existence. He and his puppet they call Foci will tremble when Neriak roars again! Our past grandeur shall rise again.") +end + +function dlg_10_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/optional1/kylanith_d_lar/fprt_hood05/quests/kylanithdlar/kylanith_lore_03.mp3", "", "", 4093915268, 1190295502, Spawn) + AddConversationOption(conversation, "What happened to Neriak?", "dlg_10_4") + AddConversationOption(conversation, "I cannot chat now. Farewell.") + StartConversation(conversation, NPC, Spawn, "The grandeur of an empire that spans greater than the Shattered Lands. An empire that has existed longer than man or elf ruled these lands. All that most know of us is a city called Neriak, never knowing truth.") +end + +function dlg_10_4(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/optional1/kylanith_d_lar/fprt_hood05/quests/kylanithdlar/kylanith_lore_09.mp3", "", "", 1273569291, 3869823159, Spawn) + AddConversationOption(conversation, "What relics?", "dlg_10_5") + AddConversationOption(conversation, "I cannot chat now. Farewell.") + StartConversation(conversation, NPC, Spawn, "Many say it has been consumed by the Underfoot that once sheltered it. Crushed under the weight of the falling surface as quakes rend this land asunder, creating what we now know as the Shattered Lands. We know only of the relics that remain.") +end + +function dlg_10_5(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/optional1/kylanith_d_lar/fprt_hood05/quests/kylanithdlar/kylanith_lore_10.mp3", "", "", 1404555822, 3452180553, Spawn) + AddConversationOption(conversation, "Where can I find these relics in Freeport?", "dlg_10_6") + AddConversationOption(conversation, "I cannot chat now. Farewell.") + StartConversation(conversation, NPC, Spawn, "The Ashlands, or should I say, Nektulos? That was once the surface territory of the dark elf empire. It is littered with remnants of that ancient occupation. Even here in Freeport you can find dark elf artifacts.") +end + +function dlg_10_6(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/optional1/kylanith_d_lar/fprt_hood05/quests/kylanithdlar/kylanith_lore_11.mp3", "", "", 568372124, 1694164407, Spawn) + AddConversationOption(conversation, "I can find the five artifacts.", "dlg_10_7") + AddConversationOption(conversation, "I cannot chat now. Farewell.") + StartConversation(conversation, NPC, Spawn, "Gossip is circulating that within the walls of Freeport our ancient allies have betrayed us yet again! The wretched oafs of Big Bend have claimed five artifacts of Thexian past. I must know if this is true!") +end + +function dlg_10_7(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/optional1/kylanith_d_lar/language/thexian/lan_5_kylanith_x1_initial01.mp3", "", "", 2884704375, 1873644890, Spawn) + AddConversationOption(conversation, "I will find them and report back.", "dlg_10_8") + StartConversation(conversation, NPC, Spawn, "It is rumored that the artifacts are somewhere within Big Bend's foul-stenching streets. Some artifacts have sustained great damage. Find them for me and report their existence. ") +end + diff --git a/server/SpawnScripts/Longshadow/LDor.lua b/server/SpawnScripts/Longshadow/LDor.lua new file mode 100644 index 000000000..a792cd45a --- /dev/null +++ b/server/SpawnScripts/Longshadow/LDor.lua @@ -0,0 +1,39 @@ +--[[ + Script Name : SpawnScripts/Longshadow/LDor.lua + Script Purpose : L`Dor + Script Author : John Adams + Script Date : 2009.04.11 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +function spawn(NPC) + SetPlayerProximityFunction(NPC, 10, "InRange", "LeaveRange") +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + SaySomethingRandom(NPC, Spawn) +end + +function InRange(NPC, Spawn) + SaySomethingRandom(NPC, Spawn) +end + +function LeaveRange(NPC, Spawn) +end + +function SaySomethingRandom(NPC, Spawn) + choice = math.random(1, 3) + + if choice == 1 then + PlayFlavor(NPC, "voiceover/english/optional2/darkelf_eco_evil_1/ft/service/merchant/darkelf_merchant_service_evil_1_hail_gm_f715099e.mp3", "Hello there, kind adventurer. My merchandise carries the seal of the Overlord himself! Go ahead, take a look!", "salute_freeport", 1302153135, 3653961458, Spawn) + elseif choice == 2 then + PlayFlavor(NPC, "voiceover/english/optional2/darkelf_eco_evil_1/ft/service/merchant/darkelf_merchant_service_evil_1_hail_gm_6ec08438.mp3", "In spite of the cost of living, it's still quite a popular item.", "ponder", 2781916825, 678640011, Spawn) + elseif choice == 3 then + PlayFlavor(NPC, "voiceover/english/optional2/darkelf_eco_evil_1/ft/service/merchant/darkelf_merchant_service_evil_1_hail_gm_aff3fc07.mp3", "Are you going to buy anything today or am I just wasting my time? This isn't a museum display you know!", "glare", 898812878, 1402234103, Spawn) + end +end \ No newline at end of file diff --git a/server/SpawnScripts/Longshadow/LotniKIria.lua b/server/SpawnScripts/Longshadow/LotniKIria.lua new file mode 100644 index 000000000..dfae4d5b7 --- /dev/null +++ b/server/SpawnScripts/Longshadow/LotniKIria.lua @@ -0,0 +1,12 @@ +--[[ + Script Name : SpawnScripts/Longshadow/LotniKIria.lua + Script Purpose : Lotni K`Iria + Script Author : John Adams + Script Date : 2008.09.29 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + PlayFlavor(NPC, "voiceover/english/lotni_k_iria/fprt_hood05/100_std_de_female_lotni_kiria_callout_462c415.mp3", "Another refugee... What do YOU want, peasant?", "", 1297124107, 2736745015, Spawn) +end \ No newline at end of file diff --git a/server/SpawnScripts/Longshadow/LynsiaTKanix.lua b/server/SpawnScripts/Longshadow/LynsiaTKanix.lua new file mode 100644 index 000000000..8ed7598fb --- /dev/null +++ b/server/SpawnScripts/Longshadow/LynsiaTKanix.lua @@ -0,0 +1,23 @@ +--[[ + Script Name : SpawnScripts/Longshadow/LynsiaTKanix.lua + Script Purpose : Lynsia T'Kanix + Script Author : John Adams + Script Date : 2008.09.29 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +function spawn(NPC) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/lynsia_t_kanix/fprt_hood05/lynsiatkanix000.mp3", "", "", 2924549472, 3132470359, Spawn) + AddConversationOption(conversation, "I am just taking a look around. ", "dlg_3_1") + StartConversation(conversation, NPC, Spawn, "The wine I serve tastes like the wines of Neriak. Ah ... how I miss drinking the fine wine of my homeland. Now, what do you want, peasant?") +end \ No newline at end of file diff --git a/server/SpawnScripts/Longshadow/MalizTRaan.lua b/server/SpawnScripts/Longshadow/MalizTRaan.lua new file mode 100644 index 000000000..653b5c87e --- /dev/null +++ b/server/SpawnScripts/Longshadow/MalizTRaan.lua @@ -0,0 +1,13 @@ +--[[ + Script Name : SpawnScripts/Longshadow/MalizTRaan.lua + Script Purpose : Maliz T`Raan + Script Author : John Adams + Script Date : 2008.09.29 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + PlayFlavor(NPC, "voiceover/english/optional1/maliz_t_raan/fprt_hood05/100_std_de_male_maliz_traan_callout_927f5c89.mp3", "Living in these slums is sickening! What do you want from me?", "", 1122076255, 1993662428, Spawn) +end + diff --git a/server/SpawnScripts/Longshadow/ModianKJarr.lua b/server/SpawnScripts/Longshadow/ModianKJarr.lua new file mode 100644 index 000000000..4e55a2a62 --- /dev/null +++ b/server/SpawnScripts/Longshadow/ModianKJarr.lua @@ -0,0 +1,23 @@ +--[[ + Script Name : SpawnScripts/Longshadow/ModianKJarr.lua + Script Purpose : Modian K`Jarr + Script Author : John Adams + Script Date : 2008.09.29 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +function spawn(NPC) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/modian_k_jarr/fprt_hood05/std_de_male_modian_kjarr.mp3", "", "", 531408061, 599233569, Spawn) + AddConversationOption(conversation, "I guess I will.", "dlg_5_1") + StartConversation(conversation, NPC, Spawn, "If you couldn't tell, I'm enjoying a drink. Now that your curiousity has been sated, perhaps you'll leave me alone?") +end \ No newline at end of file diff --git a/server/SpawnScripts/Longshadow/NezzkaSTai.lua b/server/SpawnScripts/Longshadow/NezzkaSTai.lua new file mode 100644 index 000000000..ed2e3112d --- /dev/null +++ b/server/SpawnScripts/Longshadow/NezzkaSTai.lua @@ -0,0 +1,24 @@ +--[[ + Script Name : SpawnScripts/Longshadow/NezzkaSTai.lua + Script Purpose : Nezzka S`Tai + Script Author : John Adams + Script Date : 2008.09.29 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + choice = math.random(1, 5) + + if choice == 1 then + PlayFlavor(NPC, "voiceover/english/darkelf_eco_evil_dismalrage/ft/eco/evil/darkelf_female_eco_evil_dismalrage_hail_gf_5a9793ef.mp3", "The Coalition of Tradesfolke aren't capable of serving anyone other than to serve its own greed.", "", 3353210602, 2809554948, Spawn) + elseif choice == 2 then + PlayFlavor(NPC, "voiceover/english/darkelf_eco_evil_dismalrage/ft/eco/evil/darkelf_female_eco_evil_dismalrage_hail_gf_7abc3066.mp3", "Too often the Arcane Scientists at the academy dedicate themselves to useless knowledge that is of no use to our city.", "", 1261386119, 1368644822, Spawn) + elseif choice == 3 then + PlayFlavor(NPC, "voiceover/english/darkelf_eco_evil_dismalrage/ft/eco/evil/darkelf_female_eco_evil_dismalrage_hail_gf_7d78cf9d.mp3", "The weak souls of the Seafury Buccaneers only cry, running to a priest when facing certain death.", "", 683812929, 1852419614, Spawn) + elseif choice == 4 then + PlayFlavor(NPC, "voiceover/english/darkelf_eco_evil_dismalrage/ft/eco/evil/darkelf_female_eco_evil_dismalrage_hail_gf_b9254acf.mp3", "The words preached by the Dismal Rage bring spiritual enlightenment to the weak.", "", 116806204, 1893451787, Spawn) + elseif choice == 5 then + PlayFlavor(NPC, "voiceover/english/darkelf_eco_evil_dismalrage/ft/eco/evil/darkelf_female_eco_evil_dismalrage_hail_gf_f7ca6051.mp3", "I find it vile that our great city has entrusted its protection to a group of degenerates such as the Freeport Militia.", "", 1175835727, 2628271838, Spawn) + end +end \ No newline at end of file diff --git a/server/SpawnScripts/Longshadow/OrianDRak.lua b/server/SpawnScripts/Longshadow/OrianDRak.lua new file mode 100644 index 000000000..fab9b7ecd --- /dev/null +++ b/server/SpawnScripts/Longshadow/OrianDRak.lua @@ -0,0 +1,12 @@ +--[[ + Script Name : SpawnScripts/Longshadow/OrianDRak.lua + Script Purpose : Orian D`Rak + Script Author : John Adams + Script Date : 2008.09.29 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + PlayFlavor(NPC, "", "How dare you barge into my house! Who do you think you are, fool?", "", 1689589577, 4560189, Spawn) +end \ No newline at end of file diff --git a/server/SpawnScripts/Longshadow/PThek.lua b/server/SpawnScripts/Longshadow/PThek.lua new file mode 100644 index 000000000..afbe3c822 --- /dev/null +++ b/server/SpawnScripts/Longshadow/PThek.lua @@ -0,0 +1,12 @@ +--[[ + Script Name : SpawnScripts/Longshadow/PThek.lua + Script Purpose : P`Thek + Script Author : John Adams + Script Date : 2008.09.29 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + PlayFlavor(NPC, "voiceover/english/darkelf_eco_evil_1/ft/service/scribe/darkelf_scribe_service_evil_1_hail_gf_8de85b9c.mp3", "Perhaps I could interest you in our necromantic line of spells? ", "agree", 3172095768, 4205908579, Spawn) +end \ No newline at end of file diff --git a/server/SpawnScripts/Longshadow/ShNra.lua b/server/SpawnScripts/Longshadow/ShNra.lua new file mode 100644 index 000000000..4c6ac334a --- /dev/null +++ b/server/SpawnScripts/Longshadow/ShNra.lua @@ -0,0 +1,38 @@ +--[[ + Script Name : SpawnScripts/Longshadow/ShNra.lua + Script Purpose : Sh`Nra + Script Author : John Adams + Script Date : 2008.09.29 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +function spawn(NPC) + SetPlayerProximityFunction(NPC, 10, "InRange", "LeaveRange") +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + SaySomethingRandom(NPC, Spawn) +end + +function InRange(NPC, Spawn) + SaySomethingRandom(NPC, Spawn) +end + +function LeaveRange(NPC, Spawn) +end + +function SaySomethingRandom(NPC, Spawn) + choice = math.random(1, 3) + if choice == 1 then + PlayFlavor(NPC, "voiceover/english/darkelf_eco_evil_1/ft/service/merchant/darkelf_merchant_service_evil_1_hail_gf_f715099e.mp3", "Hello there, kind adventurer. My merchandise carries the seal of the Overlord himself! Go ahead, take a look!", "salute_freeport", 3860282907, 2830883681, Spawn) + elseif choice == 2 then + PlayFlavor(NPC, "voiceover/english/darkelf_eco_evil_1/ft/service/merchant/darkelf_merchant_service_evil_1_hail_gf_d088c20d.mp3", "The stuff's over there. Just let me know if you find anything you like.", "ponder", 1457896156, 727813168, Spawn) + elseif choice == 3 then + PlayFlavor(NPC, "voiceover/english/darkelf_eco_evil_1/ft/service/merchant/darkelf_merchant_service_evil_1_hail_gf_aff3fc07.mp3", "Are you going to buy anything today or am I just wasting my time? This isn't a museum display you know!", "glare", 1486780566, 1792397389, Spawn) + end +end \ No newline at end of file diff --git a/server/SpawnScripts/Longshadow/ShadowsKiss.lua b/server/SpawnScripts/Longshadow/ShadowsKiss.lua new file mode 100644 index 000000000..46b21d454 --- /dev/null +++ b/server/SpawnScripts/Longshadow/ShadowsKiss.lua @@ -0,0 +1,21 @@ +--[[ + Script Name : + Script Purpose : + Script Author : + Script Date : + Script Notes : +--]] + +-- Quest ID's +local A_LESSON_TO_LEARN = 336 + +function spawn(NPC) + SetRequiredQuest(NPC, A_LESSON_TO_LEARN, 1) +end + +function hailed(NPC, Spawn) +end + +function respawn(NPC) + spawn(NPC) +end \ No newline at end of file diff --git a/server/SpawnScripts/Longshadow/TGask.lua b/server/SpawnScripts/Longshadow/TGask.lua new file mode 100644 index 000000000..42e941eef --- /dev/null +++ b/server/SpawnScripts/Longshadow/TGask.lua @@ -0,0 +1,18 @@ +--[[ + Script Name : SpawnScripts/Longshadow/TGask.lua + Script Purpose : T`Gask + Script Author : John Adams + Script Date : 2008.09.29 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + choice = math.random(1,2) + + if choice == 1 then + PlayFlavor(NPC, "voiceover/english/darkelf_eco_evil_1/ft/service/merchant/darkelf_merchant_service_evil_1_hail_gf_aff3fc07.mp3", "Are you going to buy anything today or am I just wasting my time? This isn't a museum display you know!", "glare", 1486780566, 1792397389, Spawn) + elseif choice == 2 then + PlayFlavor(NPC, "voiceover/english/darkelf_eco_evil_1/ft/service/merchant/darkelf_merchant_service_evil_1_hail_gf_f715099e.mp3", "Hello there, kind adventurer. My merchandise carries the seal of the Overlord himself! Go ahead, take a look!", "salute_freeport", 3860282907, 2830883681, Spawn) + end +end \ No newline at end of file diff --git a/server/SpawnScripts/Longshadow/TNarra.lua b/server/SpawnScripts/Longshadow/TNarra.lua new file mode 100644 index 000000000..ece027e35 --- /dev/null +++ b/server/SpawnScripts/Longshadow/TNarra.lua @@ -0,0 +1,22 @@ +--[[ + Script Name : SpawnScripts/Longshadow/TNarra.lua + Script Purpose : T`Narra + Script Author : John Adams + Script Date : 2008.09.29 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + choice = math.random(1, 4) + + if choice == 1 then + PlayFlavor(NPC, "voiceover/english/darkelf_eco_evil_1/ft/service/guard/darkelf_guard_service_evil_1_hail_gf_582205e1.mp3", "Do you have business with the Freeport Militia?", "glare", 2007336774, 276021764, Spawn) + elseif choice == 2 then + PlayFlavor(NPC, "voiceover/english/darkelf_eco_evil_1/ft/service/guard/darkelf_guard_service_evil_1_hail_gf_7fa14d4.mp3", "Do not challenge my authority citizen. In Freeport, the Overlord's word is law!", "scold", 2216401374, 2200952527, Spawn) + elseif choice == 3 then + PlayFlavor(NPC, "voiceover/english/darkelf_eco_evil_1/ft/service/guard/darkelf_guard_service_evil_1_hail_gf_e6d19328.mp3", "The Overlord commands me to work the night shift and so I must accept.", "tapfoot", 1941665390, 4180571964, Spawn) + elseif choice == 4 then + PlayFlavor(NPC, "voiceover/english/darkelf_eco_evil_1/ft/service/guard/darkelf_guard_service_evil_1_hail_gf_edb196f8.mp3", "All praises to the Overlord. The Militia protects loyal citizens of Freeport.", "salute_freeport", 1432151232, 2291117299, Spawn) + end +end \ No newline at end of file diff --git a/server/SpawnScripts/Longshadow/TVal.lua b/server/SpawnScripts/Longshadow/TVal.lua new file mode 100644 index 000000000..906e81fc2 --- /dev/null +++ b/server/SpawnScripts/Longshadow/TVal.lua @@ -0,0 +1,23 @@ +--[[ + Script Name : SpawnScripts/Longshadow/TVal.lua + Script Purpose : T`Val + Script Author : John Adams + Script Date : 2008.09.29 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +function spawn(NPC) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/banker_t_val/fprt_hood05/bnk_banker_tval.mp3", "", "", 90970771, 1252206294, Spawn) + AddConversationOption(conversation, "I'll keep that in mind.") + StartConversation(conversation, NPC, Spawn, "Hail to you. Currency exchange, secure storage of goods, I offer a range of services tailored to the needs of Freeport guild members.") +end \ No newline at end of file diff --git a/server/SpawnScripts/Longshadow/TVek.lua b/server/SpawnScripts/Longshadow/TVek.lua new file mode 100644 index 000000000..fef4c3345 --- /dev/null +++ b/server/SpawnScripts/Longshadow/TVek.lua @@ -0,0 +1,22 @@ +--[[ + Script Name : SpawnScripts/Longshadow/TVek.lua + Script Purpose : T`Vek + Script Author : John Adams + Script Date : 2008.09.29 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + choice = math.random(1, 4) + + if choice == 1 then + PlayFlavor(NPC, "voiceover/english/darkelf_eco_evil_1/ft/service/guard/darkelf_guard_service_evil_1_hail_gm_582205e1.mp3", "Do you have business with the Freeport Militia?", "glare", 3330899926, 205777100, Spawn) + elseif choice == 2 then + PlayFlavor(NPC, "voiceover/english/darkelf_eco_evil_1/ft/service/guard/darkelf_guard_service_evil_1_hail_gm_7fa14d4.mp3", "Do not challenge my authority citizen. In Freeport, the Overlord's word is law!", "scold", 3071777755, 1811086423, Spawn) + elseif choice == 3 then + PlayFlavor(NPC, "voiceover/english/darkelf_eco_evil_1/ft/service/guard/darkelf_guard_service_evil_1_hail_gm_870ae3cb.mp3", "The Overlord commands me to patrol this area, and so I must.", "tapfoot", 3455786340, 1963116786, Spawn) + elseif choice == 4 then + PlayFlavor(NPC, "voiceover/english/darkelf_eco_evil_1/ft/service/guard/darkelf_guard_service_evil_1_hail_gm_edb196f8.mp3", "All praises to the Overlord. The Militia protects loyal citizens of Freeport.", "salute_freeport", 3432620709, 3039361332, Spawn) + end +end \ No newline at end of file diff --git a/server/SpawnScripts/Longshadow/TeahJNar.lua b/server/SpawnScripts/Longshadow/TeahJNar.lua new file mode 100644 index 000000000..e45db48e0 --- /dev/null +++ b/server/SpawnScripts/Longshadow/TeahJNar.lua @@ -0,0 +1,34 @@ +--[[ + Script Name : SpawnScripts/Longshadow/TeahJNar.lua + Script Purpose : Teah J'Nar + Script Author : John Adams + Script Date : 2008.09.29 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +function spawn(NPC) + MoveToLocation(NPC, -1.79, 0, -19.09, 2, "AtDestination") +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) +end + +function AtDestination(NPC) + PlayFlavor(NPC, "", "Hmm, this bread tastes a bit better than normal, almost fresh.", "", 1689589577, 4560189, Spawn) + Bread = GetSpawn(NPC, 1380102) + Despawn(Bread, 1000) + AddTimer(NPC, 3000, "Talk2") +end + +function Talk2(NPC) + PlayFlavor(NPC, "", "Wait.. Argh....", "", 1689589577, 4560189, Spawn) + AddTimer(NPC, 2000, "KillTeah") +end + +function KillTeah(NPC) + KillSpawn(NPC, nil, 0) +end \ No newline at end of file diff --git a/server/SpawnScripts/Longshadow/VDyhn.lua b/server/SpawnScripts/Longshadow/VDyhn.lua new file mode 100644 index 000000000..d0e8ac66a --- /dev/null +++ b/server/SpawnScripts/Longshadow/VDyhn.lua @@ -0,0 +1,13 @@ +--[[ + Script Name : SpawnScripts/Longshadow/VDyhn.lua + Script Purpose : V`Dyhn + Script Author : John Adams + Script Date : 2008.09.29 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + PlayFlavor(NPC, "voiceover/english/optional2/darkelf_eco_evil_1/ft/service/merchant/darkelf_merchant_service_evil_1_hail_gm_6ec08438.mp3", "In spite of the cost of living, it's still quite a popular item.", "ponder", 2781916825, 678640011, Spawn) +end + diff --git a/server/SpawnScripts/Longshadow/VTun.lua b/server/SpawnScripts/Longshadow/VTun.lua new file mode 100644 index 000000000..18f252c4e --- /dev/null +++ b/server/SpawnScripts/Longshadow/VTun.lua @@ -0,0 +1,19 @@ +--[[ + Script Name : SpawnScripts/Longshadow/VTun.lua + Script Purpose : V`Tun + Script Author : John Adams + Script Date : 2008.09.29 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + choice = math.random(1, 3) + if choice == 1 then + PlayFlavor(NPC, "voiceover/english/darkelf_eco_evil_1/ft/service/merchant/darkelf_merchant_service_evil_1_hail_gf_f715099e.mp3", "Hello there, kind adventurer. My merchandise carries the seal of the Overlord himself! Go ahead, take a look!", "salute_freeport", 3860282907, 2830883681, Spawn) + elseif choice == 2 then + PlayFlavor(NPC, "voiceover/english/darkelf_eco_evil_1/ft/service/merchant/darkelf_merchant_service_evil_1_hail_gf_d088c20d.mp3", "The stuff's over there. Just let me know if you find anything you like.", "ponder", 1457896156, 727813168, Spawn) + elseif choice == 3 then + PlayFlavor(NPC, "voiceover/english/darkelf_eco_evil_1/ft/service/merchant/darkelf_merchant_service_evil_1_hail_gf_aff3fc07.mp3", "Are you going to buy anything today or am I just wasting my time? This isn't a museum display you know!", "glare", 1486780566, 1792397389, Spawn) + end +end \ No newline at end of file diff --git a/server/SpawnScripts/Longshadow/VorsharLFaz.lua b/server/SpawnScripts/Longshadow/VorsharLFaz.lua new file mode 100644 index 000000000..bb6822c2e --- /dev/null +++ b/server/SpawnScripts/Longshadow/VorsharLFaz.lua @@ -0,0 +1,39 @@ +--[[ + Script Name : SpawnScripts/Longshadow/VorsharLFaz.lua + Script Purpose : Vorshar L`Faz + Script Author : John Adams + Script Date : 2008.09.29 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +function spawn(NPC) + SetPlayerProximityFunction(NPC, 10, "InRange", "LeaveRange") +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + SaySomethingRandom(NPC, Spawn) +end + +function InRange(NPC, Spawn) + SaySomethingRandom(NPC, Spawn) +end + +function LeaveRange(NPC, Spawn) +end + +function SaySomethingRandom(NPC, Spawn) + choice = math.random(1, 3) + + if choice == 1 then + PlayFlavor(NPC, "voiceover/english/darkelf_eco_evil_coalitionoftradesfolke/ft/eco/evil/darkelf_male_eco_evil_coalitionoftradesfolke_hail_gm_a8fbb723.mp3", "The arcane scientists hone their minds through the study of arcane arts, but they will never become as cunning as a skilled trader.", "", 4254147398, 134359674, Spawn) + elseif choice == 2 then + PlayFlavor(NPC, "voiceover/english/darkelf_eco_evil_coalitionoftradesfolke/ft/eco/evil/darkelf_male_eco_evil_coalitionoftradesfolke_hail_gm_cd3a748b.mp3", "The withering hands of the Dismal Rage priests look more like hands of death than hands that can heal people.", "", 2122145851, 2411357575, Spawn) + elseif choice == 3 then + PlayFlavor(NPC, "voiceover/english/darkelf_eco_evil_coalitionoftradesfolke/ft/eco/evil/darkelf_male_eco_evil_coalitionoftradesfolke_hail_gm_263a8bb0.mp3", "Although they serve to protect the city, the individuals of the Freeport Militia are only loyal to their own self interest and nothing more.", "", 3104017481, 741752503, Spawn) + end +end \ No newline at end of file diff --git a/server/SpawnScripts/Longshadow/YaranaDVen.lua b/server/SpawnScripts/Longshadow/YaranaDVen.lua new file mode 100644 index 000000000..d7f142be3 --- /dev/null +++ b/server/SpawnScripts/Longshadow/YaranaDVen.lua @@ -0,0 +1,12 @@ +--[[ + Script Name : SpawnScripts/Longshadow/YaranaDVen.lua + Script Purpose : Yarana D'Ven + Script Author : John Adams + Script Date : 2008.09.29 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + PlayFlavor(NPC, "", "Do not waste my precious time by begging for attention.", "", 1689589577, 4560189, Spawn) +end \ No newline at end of file diff --git a/server/SpawnScripts/Longshadow/ZelinaTVon.lua b/server/SpawnScripts/Longshadow/ZelinaTVon.lua new file mode 100644 index 000000000..1e439d09d --- /dev/null +++ b/server/SpawnScripts/Longshadow/ZelinaTVon.lua @@ -0,0 +1,12 @@ +--[[ + Script Name : SpawnScripts/Longshadow/ZelinaTVon.lua + Script Purpose : Zelina T`Von + Script Author : John Adams + Script Date : 2008.09.29 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + PlayFlavor(NPC, "voiceover/english/optional5/standard_dark_elf_female/fprt_hood05/quests/zelinatvon/pm_dztv_callout1_64.mp3", "That no-good, two-timing, imp ... I'll teach him to stare at that trollop! ...What? What do you want, you babbling fool?", "", 1206032882, 2859314838, Spawn) +end \ No newline at end of file diff --git a/server/SpawnScripts/LopingPlains/aNightmarehandler.lua b/server/SpawnScripts/LopingPlains/aNightmarehandler.lua new file mode 100644 index 000000000..5fb0329ac --- /dev/null +++ b/server/SpawnScripts/LopingPlains/aNightmarehandler.lua @@ -0,0 +1,156 @@ +--[[ + Script Name : SpawnScripts/LopingPlains/anightmarehandler.lua + Script Purpose : a nightmare handler (1160002) + Script Author : Neatz09 + Script Date : 4/14/2019 + Script Notes : +--]] + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_2_1042.mp3", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "I would like to travel.", "dlg_1_1") + AddConversationOption(conversation, "Nowhere.") + StartConversation(conversation, NPC, Spawn, "Greetings traveler, how can I assist you today?") + end + +function dlg_1_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + local con = CreateConversation() + + if GetSpawnLocationID(NPC) == 367286 then + AddConversationOption(con, "To Greater Faydark", "SombornToGFay") + AddConversationOption(con, "To Lesser Faydark.", "SombornToLFay") + AddConversationOption(con, "To Steamfont Mountains.", "SombornToSFM") + AddConversationOption(con, "To Timorous Moor.", "SombornToTM") + elseif GetSpawnLocationID(NPC) == 367289 then + AddConversationOption(con, "To Greater Faydark.", "LFayToGFay") + AddConversationOption(con, "To Somborn.", "LFayToSomborn") + AddConversationOption(con, "To Steamfont Mountains.", "LFayToSFM") + AddConversationOption(con, "To Timorous Moor.", "LFayToTM") + elseif GetSpawnLocationID(NPC) == 367287 then + AddConversationOption(con, "To Lesser Faydark.", "GFayToLFay") + AddConversationOption(con, "To Somborn.", "GFayToSomborn") + AddConversationOption(con, "To Steamfont Mountains.", "GFayToSFM") + AddConversationOption(con, "To Timorous Moor.", "GFayToTM") + elseif GetSpawnLocationID(NPC) == 367288 then + AddConversationOption(con, "To Greater Faydark.", "TMToGFay") + AddConversationOption(con, "To Lesser Faydark.", "TMToLFay") + AddConversationOption(con, "To Somborn.", "TMToSomborn") + AddConversationOption(con, "To Steamfont Mountains.", "TMToSFM") + elseif GetSpawnLocationID(NPC) == 367285 then + AddConversationOption(con, "To Greater Faydark.", "SFMToGFay") + AddConversationOption(con, "To Lesser Faydark.", "SFMTToLFay") + AddConversationOption(con, "To Somborn.", "SFMTToSomborn") + AddConversationOption(con, "To Timorous Moor.", "SFMToTM") + else + PlayFlavor(NPC, "", "Not implemented yet!", "cry", 0, 0, Spawn) + end + AddConversationOption(con, "Nowhere.") + StartConversation(con, NPC, Spawn, "Where to?") +end + +function SombornToGFay(NPC, Spawn) + StartAutoMount(Spawn, 970) + SetMount(Spawn, 8211) +end + +function SombornToLFay(NPC, Spawn) + StartAutoMount(Spawn, 972) + SetMount(Spawn, 8211) +end + +function SombornToSFM(NPC, Spawn) + StartAutoMount(Spawn, 976) + SetMount(Spawn, 8211) +end + +function SombornToTM(NPC, Spawn) + StartAutoMount(Spawn, 974) + SetMount(Spawn, 8211) +end + +function LFayToGFay(NPC, Spawn) + StartAutoMount(Spawn, 977) + SetMount(Spawn, 8211) +end + +function LFayToSomborn(NPC, Spawn) + StartAutoMount(Spawn, 969) + SetMount(Spawn, 8211) +end + +function LFayToSFM(NPC, Spawn) + StartAutoMount(Spawn, 979) + SetMount(Spawn, 8211) +end + +function LFayToTM(NPC, Spawn) + StartAutoMount(Spawn, 978) + SetMount(Spawn, 8211) +end + +function GFayToLFay(NPC, Spawn) + StartAutoMount(Spawn, 980) + SetMount(Spawn, 8211) +end + +function GFayToSomborn(NPC, Spawn) + StartAutoMount(Spawn, 969) + SetMount(Spawn, 8211) +end + +function GFayToSFM(NPC, Spawn) + StartAutoMount(Spawn, 982) + SetMount(Spawn, 8211) +end + +function GFayToTM(NPC, Spawn) + StartAutoMount(Spawn, 981) + SetMount(Spawn, 8211) +end + +function TMToGFay(NPC, Spawn) + StartAutoMount(Spawn, 983) + SetMount(Spawn, 8211) +end + +function TMToLFay(NPC, Spawn) + StartAutoMount(Spawn, 984) + SetMount(Spawn, 8211) +end + +function TMToSomborn(NPC, Spawn) + StartAutoMount(Spawn, 973) + SetMount(Spawn, 8211) +end + +function TMToSFM(NPC, Spawn) + StartAutoMount(Spawn, 985) + SetMount(Spawn, 8211) +end + +function SFMToGFay(NPC, Spawn) + StartAutoMount(Spawn, 986) + SetMount(Spawn, 8211) +end + +function SFMToLFay(NPC, Spawn) + StartAutoMount(Spawn, 987) + SetMount(Spawn, 8211) +end + +function SFMToSomborn(NPC, Spawn) + StartAutoMount(Spawn, 976) + SetMount(Spawn, 8211) +end + +function SFMToTM(NPC, Spawn) + StartAutoMount(Spawn, 988) + SetMount(Spawn,8211) +end \ No newline at end of file diff --git a/server/SpawnScripts/Nektropos1/ASwineFiend.lua b/server/SpawnScripts/Nektropos1/ASwineFiend.lua new file mode 100644 index 000000000..be87aabe1 --- /dev/null +++ b/server/SpawnScripts/Nektropos1/ASwineFiend.lua @@ -0,0 +1,35 @@ +--[[ + Script Name : SpawnScripts/Nektropos1/ASwineFiend.lua + Script Purpose : + Script Author : smash + Script Date : 1/26/2016 + Script Notes : +--]] + +function spawn(NPC) + MovementPath1(NPC) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) +end + +function MovementPath1(NPC) + MoveToLocation(NPC, -43.37, 0.5, 65.91, 2, "MovementPath2") +end + +function MovementPath2(NPC) + MoveToLocation(NPC, -9.41, 0.5, 66.21, 2, "MovementPath3") +end + +function MovementPath3(NPC) + MoveToLocation(NPC, -9.35, 0.5, 40.40, 2, "MovementPath4") +end + +function MovementPath4(NPC) + MoveToLocation(NPC, -17.23, 0.5, 40.39, 2) +end \ No newline at end of file diff --git a/server/SpawnScripts/Nektropos1/Alexa.lua b/server/SpawnScripts/Nektropos1/Alexa.lua new file mode 100644 index 000000000..413e1110f --- /dev/null +++ b/server/SpawnScripts/Nektropos1/Alexa.lua @@ -0,0 +1,85 @@ +--[[ + Script Name : SpawnScripts/Nektropos1/Alexa.lua + Script Purpose : Alexa in the Chapel + Script Author : smash + Script Date : 1/28/2016 + Script Notes : +--]] + +require "SpawnScripts/Generic/PlayerHistory" + +function spawn(NPC) +end + +function hailed(NPC, Spawn) + if GetTempVariable(NPC, "talking") ~= "true" then + StartDialogLoop(NPC, Spawn) + local player_group = GetGroup(Spawn) + if player_group ~= nil then + for k,v in ipairs(player_group) do + if IsPlayer(v) and GetPlayerHistory(v, HISTORY.NEK_CASTLE_SCONCE_ACCESS) ~= 1 then + SetPlayerHistory(v, HISTORY.NEK_CASTLE_SCONTZ_KEY_ACCESS, 1) + end + end + elseif GetPlayerHistory(Spawn, HISTORY.NEK_CASTLE_SCONCE_ACCESS) ~= 1 then + SetPlayerHistory(Spawn, HISTORY.NEK_CASTLE_SCONCE_KEY_ACCESS, 1) + end + end +end + +function StartDialogLoop(NPC, Spawn) + SetTempVariable(NPC, "talking", "true") + Say(NPC, "Finally someone who may be strong enough to free me from this wretched place.") + AddTimer(NPC, 3500, "Dialog2") +end + +function Dialog2(NPC) + Say(NPC, "If you will aid me I can lead you to Rikantus Everling's treasures.") + AddTimer(NPC, 3500, "Dialog3") +end + +function Dialog3(NPC) + Say(NPC, "Rikantus gathered strange and odd artifacts from across the land,") + AddTimer(NPC, 3500, "Dialog4") +end + +function Dialog4(NPC) + Say(NPC, "and hid them in a secret chamber of the castle. If you release my soul I will tell you where they are.") + AddTimer(NPC, 3500, "Dialog5") +end + +function Dialog5(NPC) + Say(NPC, "One of Rikantus' daughters, Elise, built a basement beneath her room without her father's knowledge.") + AddTimer(NPC, 3500, "Dialog6") +end + +function Dialog6(NPC) + Say(NPC, "It allowed her to sneak about the castle whenever she desired.") + AddTimer(NPC, 3500, "Dialog7") +end + +function Dialog7(NPC) + Say(NPC, "The architect of the basement wanted to tell Lord Everling about the basement but was unable to before he had to leave.") + AddTimer(NPC, 3500, "Dialog8") +end + +function Dialog8(NPC) + Say(NPC, "He wrote a letter to Lord Everling and hid it in the parlor for him to find.") + AddTimer(NPC, 3500, "Dialog9") +end + +function Dialog9(NPC) + Say(NPC, "If you can find that note, you may be able to find a way into the basement.") + AddTimer(NPC, 3500, "Dialog10") +end + +function Dialog10(NPC) + Say(NPC, "If you can gain access to the basement, I can show you how to release me and to the treasures.") + AddTimer(NPC, 3500, "Dialog11") +end + +function Dialog11(NPC) + Say(NPC, "Please hurry. If he finds out I have been speaking with you, he will punish me.") + AddTimer(NPC, 5000, "Despawn") + SpawnByLocationID(GetZone(NPC), 1584474) +end \ No newline at end of file diff --git a/server/SpawnScripts/Nektropos1/AlexaBasement.lua b/server/SpawnScripts/Nektropos1/AlexaBasement.lua new file mode 100644 index 000000000..2862700d3 --- /dev/null +++ b/server/SpawnScripts/Nektropos1/AlexaBasement.lua @@ -0,0 +1,62 @@ +--[[ + Script Name : SpawnScripts/Nektropos1/AlexaBasement.lua + Script Purpose : Alexa after reaching the basement + Script Author : smash + Script Date : 9/12/2016 + Script Notes : +--]] + +require "SpawnScripts/Generic/PlayerHistory" + +function spawn(NPC) +end + +function hailed(NPC, Spawn) + if GetTempVariable(NPC, "talking") ~= "true" then + StartDialogLoop(NPC, Spawn) + local player_group = GetGroup(Spawn) + if player_group ~= nil then + for k,v in ipairs(player_group) do + SetPlayerHistory(v, HISTORY.NEK_CASTLE_BASEMENT_STUDY_ACCESS, 1) + end + else + SetPlayerHistory(Spawn, HISTORY.NEK_CASTLE_BASEMENT_STUDY_ACCESS, 1) + end + end +end + +function StartDialogLoop(NPC, Spawn) + SetTempVariable(NPC, "talking", "true") + Say(NPC, "You are almost there.") + AddTimer(NPC, 3500, "Dialog2") +end + +function Dialog2(NPC) + Say(NPC, "This basement is rife with hidden doors and secret passageways.") + AddTimer(NPC, 3500, "Dialog3") +end + +function Dialog3(NPC) + Say(NPC, "Lord Everling has a research chamber in the basement,") + AddTimer(NPC, 3500, "Dialog4") +end + +function Dialog4(NPC) + Say(NPC, "head back down this hallway and examine the torch sconces along the walls.") + AddTimer(NPC, 3500, "Dialog5") +end + +function Dialog5(NPC) + Say(NPC, "One of the sconces will move opening up the entrance to the research laboratory.") + AddTimer(NPC, 3500, "Dialog6") +end + +function Dialog6(NPC) + Say(NPC, "Inside the chamber you should find a scroll that will reveal the location of the rest of the secret doors.") + AddTimer(NPC, 3000, "SpawnAlexaOllix") +end + +function SpawnAlexaOllix(NPC) + SpawnByLocationID(GetZone(NPC), 1584996) + Despawn(NPC) +end \ No newline at end of file diff --git a/server/SpawnScripts/Nektropos1/AlexaLockets.lua b/server/SpawnScripts/Nektropos1/AlexaLockets.lua new file mode 100644 index 000000000..f4e5673d5 --- /dev/null +++ b/server/SpawnScripts/Nektropos1/AlexaLockets.lua @@ -0,0 +1,62 @@ +--[[ + Script Name : SpawnScripts/Nektropos1/AlexaLockets.lua + Script Purpose : Alexa after defeating the sisters for The Everling Lockets quest + Script Author : smash + Script Date : 9/8/2016 + Script Notes : +--]] + +require "SpawnScripts/Generic/PlayerHistory" + +function spawn(NPC) +end + +function hailed(NPC, Spawn) + if GetTempVariable(NPC, "talking") ~= "true" then + StartDialogLoop(NPC, Spawn) + local player_group = GetGroup(Spawn) + if player_group ~= nil then + for k,v in ipairs(player_group) do + SetPlayerHistory(v, HISTORY.NEK_CASTLE_LIBRARY_ACCESS, 1) + end + else + SetPlayerHistory(Spawn, HISTORY.NEK_CASTLE_LIBRARY_ACCESS, 1) + end + end +end + +function StartDialogLoop(NPC, Spawn) + SetTempVariable(NPC, "talking", "true") + Say(NPC, "Wonderful you have gathered all the lockets.") + AddTimer(NPC, 3500, "Dialog2") +end + +function Dialog2(NPC) + Say(NPC, "Unfortunately I have learned that Everling has added another protection to his door.") + AddTimer(NPC, 3500, "Dialog3") +end + +function Dialog3(NPC) + Say(NPC, "He also gave his son Ollix a locket and has created a slot for that locket as well.") + AddTimer(NPC, 3500, "Dialog4") +end + +function Dialog4(NPC) + Say(NPC, "Thankfully I know the resting place of the locket, it was buried with Ollix when he died.") + AddTimer(NPC, 3500, "Dialog5") +end + +function Dialog5(NPC) + Say(NPC, "I have managed to unlock all of the doors within the castle area so you can move freely about.") + AddTimer(NPC, 3500, "Dialog6") +end + +function Dialog6(NPC) + Say(NPC, "You will need to gain access to Lord Everlings bedchamber,") + AddTimer(NPC, 3500, "Dialog7") +end + +function Dialog7(NPC) + Say(NPC, "there is a passageway behind the bookshelves within his bedchamber that leads to the castles lower levels.") + AddTimer(NPC, 5000, "Despawn") +end \ No newline at end of file diff --git a/server/SpawnScripts/Nektropos1/AlexaOllix.lua b/server/SpawnScripts/Nektropos1/AlexaOllix.lua new file mode 100644 index 000000000..4cb71863b --- /dev/null +++ b/server/SpawnScripts/Nektropos1/AlexaOllix.lua @@ -0,0 +1,40 @@ +--[[ + Script Name : SpawnScripts/Nektropos1/AlexaOllix.lua + Script Purpose : Alexa before changing into Ollix Everling + Script Author : smash + Script Date : 9/12/2016 + Script Notes : +--]] + +function spawn(NPC) + SpawnSet(NPC, "attackable", "1") + SpawnSet(NPC, "show_level", "1") +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) +end + +function AlexaTalk(NPC) + if GetTempVariable(NPC, "talked") ~= "true" then + SetTempVariable(NPC, "talked", "true") + Say(NPC, "Ahh, finally you have arrived. Father will thank me for supplying him with more parts for his experiments.") + end +end + +function aggro(NPC, Spawn) + AlexaTalk(NPC) +end + +function attacked(NPC, Spawn) + AlexaTalk(NPC) +end + +function death(NPC, Spawn) + --spawn Ollix Everling + SpawnByLocationID(GetZone(NPC), 616644) +end + +function CombatReset(NPC) + SetTempVariable(NPC, "talked", nil) +end \ No newline at end of file diff --git a/server/SpawnScripts/Nektropos1/AlexaRamparts.lua b/server/SpawnScripts/Nektropos1/AlexaRamparts.lua new file mode 100644 index 000000000..cd8650b12 --- /dev/null +++ b/server/SpawnScripts/Nektropos1/AlexaRamparts.lua @@ -0,0 +1,59 @@ +--[[ + Script Name : SpawnScripts/Nektropos1/AlexaRamparts.lua + Script Author : smash + Script Date : 2016.02.02 01:02:43 + Script Purpose : + : +--]] + +function spawn(NPC) +end + +function hailed(NPC, Spawn) + if GetTempVariable(NPC, "talking") ~= "true" then + SetTempVariable(NPC, "talking", "true") + StartDialogLoop(NPC, Spawn) + end +end + +function StartDialogLoop(NPC, Spawn) + Say(NPC, "I knew you were strong enough to save me.") + AddTimer(NPC, 3500, "Dialog2", 1, Spawn) +end + +function Dialog2(NPC, Spawn) + Say(NPC, "In order to get into the room where Lord Everling keeps his most prized possessions") + AddTimer(NPC, 3000, "Dialog3", 1, Spawn) +end + +function Dialog3(NPC, Spawn) + Say(NPC, "you'll need to gather six lockets.") + AddTimer(NPC, 3000, "Dialog4", 1, Spawn) +end + +function Dialog4(NPC, Spawn) + Say(NPC, "Everling gave a locket to each of his six daughters. Only with all six can the door be opened.") + AddTimer(NPC, 3500, "Dialog5", 1, Spawn) +end + +function Dialog5(NPC, Spawn) + Say(NPC, "Get these lockets from the sisters however you can.") + AddTimer(NPC, 3000, "Dialog6", 1, Spawn) +end + +function Dialog6(NPC, Spawn) + Say(NPC, "Please hurry.") + AddTimer(NPC, 3000, "Despawn") + + --Offer The Everling Lockets to the whole group + local player_group = GetGroup(Spawn) + if player_group ~= nil then + for k,v in ipairs(player_group) do + if IsPlayer(v) and CanReceiveQuest(v, 177) then + OfferQuest(nil, v, 177) + end + end + elseif CanReceiveQuest(Spawn, 177) then + OfferQuest(nil, Spawn, 177) + end +end \ No newline at end of file diff --git a/server/SpawnScripts/Nektropos1/ArchfiendIzzoroth.lua b/server/SpawnScripts/Nektropos1/ArchfiendIzzoroth.lua new file mode 100644 index 000000000..65fb2d2e9 --- /dev/null +++ b/server/SpawnScripts/Nektropos1/ArchfiendIzzoroth.lua @@ -0,0 +1,29 @@ +--[[ + Script Name : SpawnScripts/Nektropos1/ArchfiendIzzoroth.lua + Script Author : smash + Script Date : 2016.09.09 03:09:44 + Script Purpose : + : +--]] + +function spawn(NPC) + SetSpeedMultiplier(NPC, 0) + AddTimer(NPC, 6000, "MakeAttackable") +end + +function DemonTalk(NPC) + local choice = math.random(1,2) + + --Check for understood language, or that should be handled in code? + if choice == 1 then + PlayFlavor(NPC, "voiceover/english/optional3/nightblood_base_2/ft/nightblood/nightblood_base_2_1_garbled_26ecf0b.mp3", "Keb'ma moktar vekshet pa", "", 203325556, 752859570, nil, 24) + elseif choice == 2 then + PlayFlavor(NPC, "voiceover/english/optional3/nightblood_base_2/ft/nightblood/nightblood_base_2_1_garbled_5d4f1d0d.mp3", "Velfar sek'tem molorad su'vehrem", "", 1706934970, 2177477527, nil, 24) + end +end + +function MakeAttackable(NPC) + DemonTalk(NPC) + SpawnSet(NPC, "attackable", "1") + SpawnSet(NPC, "show_level", "1") +end \ No newline at end of file diff --git a/server/SpawnScripts/Nektropos1/BalconyDoor.lua b/server/SpawnScripts/Nektropos1/BalconyDoor.lua new file mode 100644 index 000000000..ce006675f --- /dev/null +++ b/server/SpawnScripts/Nektropos1/BalconyDoor.lua @@ -0,0 +1,19 @@ +--[[ + Script Name : SpawnScripts/Nektropos1/BalconyDoor.lua + Script Author : smash + Script Date : 2016.02.06 02:02:31 + Script Purpose : + : +--]] + +function spawn(NPC) + +end + +function can_use_command(NPC, Spawn, Message) + if not HasCompletedQuest(Spawn, 173) then + SendMessage(Spawn, "This door seems magically barred", "yellow") + return false + end + return true +end \ No newline at end of file diff --git a/server/SpawnScripts/Nektropos1/BarracksDoor.lua b/server/SpawnScripts/Nektropos1/BarracksDoor.lua new file mode 100644 index 000000000..043777ea8 --- /dev/null +++ b/server/SpawnScripts/Nektropos1/BarracksDoor.lua @@ -0,0 +1,16 @@ +--[[ + Script Name : SpawnScripts/Nektropos1/BarracksDoor.lua + Script Author : smash + Script Date : 2016.01.26 03:01:00 + Script Purpose : + : +--]] + +function spawn(NPC) + SetRequiredQuest(NPC, 175, 2, 0, 1) +end + +function respawn(NPC) + +end + diff --git a/server/SpawnScripts/Nektropos1/BarracksDoor2.lua b/server/SpawnScripts/Nektropos1/BarracksDoor2.lua new file mode 100644 index 000000000..a981782d7 --- /dev/null +++ b/server/SpawnScripts/Nektropos1/BarracksDoor2.lua @@ -0,0 +1,16 @@ +--[[ + Script Name : SpawnScripts/Nektropos1/BarracksDoor2.lua + Script Author : smash + Script Date : 2016.01.27 03:01:00 + Script Purpose : + : +--]] + +function spawn(NPC) + SetRequiredQuest(NPC, 175, 2, 0, 1) +end + +function respawn(NPC) + +end + diff --git a/server/SpawnScripts/Nektropos1/BasementSecretDoor.lua b/server/SpawnScripts/Nektropos1/BasementSecretDoor.lua new file mode 100644 index 000000000..64f760562 --- /dev/null +++ b/server/SpawnScripts/Nektropos1/BasementSecretDoor.lua @@ -0,0 +1,13 @@ +--[[ + Script Name : SpawnScripts/Nektropos1/BasementSecretDoor.lua + Script Author : smash + Script Date : 2016.09.13 11:09:11 + Script Purpose : + : +--]] + +require "SpawnScripts/Generic/PlayerHistory" + +function spawn(NPC) + SetRequiredHistory(NPC, HISTORY.NEK_CASTLE_BASEMENT_ACCESS, 1) +end \ No newline at end of file diff --git a/server/SpawnScripts/Nektropos1/CaptainGavinBook.lua b/server/SpawnScripts/Nektropos1/CaptainGavinBook.lua new file mode 100644 index 000000000..9a192eb31 --- /dev/null +++ b/server/SpawnScripts/Nektropos1/CaptainGavinBook.lua @@ -0,0 +1,64 @@ +--[[ + Script Name : SpawnScripts/Nektropos1/CaptainGavinBook.lua + Script Author : smash + Script Date : 2016.09.11 12:09:11 + Script Purpose : + : +--]] + +function casted_on(NPC, Spawn, Message) + local conversation = CreateConversation() + AddConversationOption(conversation, "Read the book.", "ReadBook1") + AddConversationOption(conversation, "Leave the book alone.", "CloseConversation") + StartDialogConversation(conversation, 1, NPC, Spawn, "As you pick up the book several pages fall out and crumble to dust. You flip through the book, but very few pages are legible.") +end + +function ReadBook1(NPC, Spawn) + local conversation = CreateConversation() + AddConversationOption(conversation, "Turn the page carefully.", "ReadBook2") + AddConversationOption(conversation, "Flip through the book.", "FinishReading") + StartDialogConversation(conversation, 1, NPC, Spawn, "Droplets of water appear to mar what little writing is left on this page.....beloved sons Ollix and Maltus have passed beyond my grasp. For all my wealth I could not save them from.....") +end + +function ReadBook2(NPC, Spawn) + local conversation = CreateConversation() + AddConversationOption(conversation, "Keep reading.", "ReadBook3") + AddConversationOption(conversation, "Stop reading.", "CloseConversation") + StartDialogConversation(conversation, 1, NPC, Spawn, "3145 Firstchill..........with the death of our sons, Alana's heart was broken. I buried her this morning..........") +end + +function ReadBook3(NPC, Spawn) + local conversation = CreateConversation() + AddConversationOption(conversation, "Turn the page.", "ReadBook4") + AddConversationOption(conversation, "Stop reading.", "CloseConversation") + StartDialogConversation(conversation, 1, NPC, Spawn, "...entry 3151 Busheldown, Burnday the 15th, I have sent my daughters guardians away at my daughters requests. I did not want to do this, but I love my daughters too much to deny their....") +end + +function ReadBook4(NPC, Spawn) + local conversation = CreateConversation() + AddConversationOption(conversation, "Continue reading.", "ReadBook5") + AddConversationOption(conversation, "Stop reading.", "CloseConversation") + StartDialogConversation(conversation, 1, NPC, Spawn, "...entry 3174 Lastleaf, Feastday the 27th, .......guardians to watch over my daughters they have become more reckless, especially Elise. Twice now we have caught her out walking the ramparts............") +end + +function ReadBook5(NPC, Spawn) + local conversation = CreateConversation() + AddConversationOption(conversation, "Keep reading.", "ReadBook6") + AddConversationOption(conversation, "Stop reading.", "CloseConversation") + StartDialogConversation(conversation, 1, NPC, Spawn, "...I was forced to watch the horror.....my own children....before my eyes......I live now only to avenge them........") +end + +function ReadBook6(NPC, Spawn) + local conversation = CreateConversation() + AddConversationOption(conversation, "The last few pages are all but illegible.", "FinishReading") + StartDialogConversation(conversation, 1, NPC, Spawn, "3397....fathers work shall not go unfinished....descendants of the guardians.......") +end + +function FinishReading(NPC, Spawn) + CloseConversation(NPC, Spawn) + SendMessage(Spawn, "The pages of the book deteriorate into dust.") + if GetTempVariable(NPC, "CaptainSpawned") ~= "true" then + SpawnByLocationID(GetZone(NPC), 616620) + SetTempVariable(NPC, "CaptainSpawned", "true") + end +end \ No newline at end of file diff --git a/server/SpawnScripts/Nektropos1/Crystashandmaiden.lua b/server/SpawnScripts/Nektropos1/Crystashandmaiden.lua new file mode 100644 index 000000000..12f49e1d7 --- /dev/null +++ b/server/SpawnScripts/Nektropos1/Crystashandmaiden.lua @@ -0,0 +1,13 @@ +--[[ + Script Name : SpawnScripts/Nektropos1/Crystashandmaiden.lua + Script Author : smash + Script Date : 2016.09.10 09:09:23 + Script Purpose : + : +--]] + +function death(NPC, Spawn) + local bed = GetSpawnByLocationID(GetZone(NPC), 439534) + SpawnSet(bed, "show_command_icon", "1") + SpawnSet(bed, "display_hand_icon", "1") +end \ No newline at end of file diff --git a/server/SpawnScripts/Nektropos1/ElisesDiary.lua b/server/SpawnScripts/Nektropos1/ElisesDiary.lua new file mode 100644 index 000000000..1d7dfc6fe --- /dev/null +++ b/server/SpawnScripts/Nektropos1/ElisesDiary.lua @@ -0,0 +1,71 @@ +--[[ + Script Name : SpawnScripts/Nektropos1/ElisesDiary.lua + Script Author : smash + Script Date : 2016.02.06 04:02:12 + Script Purpose : + : +--]] + +function spawn(NPC) +end + +function casted_on(NPC, Spawn, Message) + Dialog1(NPC, Spawn) +end + + +function EndConvo(NPC) + SpawnSet(NPC, "heading", "80") +end + +function TryPickupBook(NPC, Spawn) + SendMessage(Spawn, "As you put the book in your pack, it flies from your hand and returns to rest on the dresser.") + EndConvo(NPC) +end + +function Dialog1(NPC, Spawn) + FaceTarget(NPC, Spawn) + local conversation = CreateConversation() + + AddConversationOption(conversation, "Read what you can from the book.", "Dialog1_1") + AddConversationOption(conversation, "Put the book down.", "EndConvo") + StartConversation(conversation, NPC, Spawn, "You pick the book up and begin to read it, most of the pages from the book have been torn out but a few are still legible.") +end + +function Dialog1_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + local conversation = CreateConversation() + + AddConversationOption(conversation, "Keep reading.", "Dialog2_1") + AddConversationOption(conversation, "Stop reading and put the book down.", "EndConvo") + AddConversationOption(conversation, "Stop reading, but take the book with you.", "TryPickupBook") + StartConversation(conversation, NPC, Spawn, ".... was nearly seen last night.") +end + +function Dialog2_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + local conversation = CreateConversation() + + AddConversationOption(conversation, "Continue reading.", "Dialog3_1") + AddConversationOption(conversation, "Stop reading and put the book down.", "EndConvo") + AddConversationOption(conversation, "Stop reading, but take the book with you.", "TryPickupBook") + StartConversation(conversation, NPC, Spawn, "..Sheila nearly killed me when she heard the guards talking about someone walking the ramparts last night.....") +end + +function Dialog3_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + local conversation = CreateConversation() + + AddConversationOption(conversation, "Put the book down.", "EndConvo") + AddConversationOption(conversation, "Take the book with you.", "TryPickupBook") + StartConversation(conversation, NPC, Spawn, "With my new cloak, it should be easier for me to sneak out at night...Nothing else in the book appears to be legible. ") + + SpawnElise(NPC) +end + +function SpawnElise(NPC) + if GetTempVariable(NPC, "elise_spawned") ~= "true" then + SetTempVariable(NPC, "elise_spawned", "true") + SpawnByLocationID(GetZone(NPC), 616586) + end +end \ No newline at end of file diff --git a/server/SpawnScripts/Nektropos1/EverlingLocketDoor.lua b/server/SpawnScripts/Nektropos1/EverlingLocketDoor.lua new file mode 100644 index 000000000..6857057b3 --- /dev/null +++ b/server/SpawnScripts/Nektropos1/EverlingLocketDoor.lua @@ -0,0 +1,21 @@ +--[[ + Script Name : SpawnScripts/Nektropos1/EverlingLocketDoor.lua + Script Author : smash + Script Date : 2016.02.06 12:02:35 + Script Purpose : + : +--]] + +require "SpawnScripts/Generic/PlayerHistory" + +function spawn(NPC) + +end + +function can_use_command(NPC, Spawn, Message) + if GetPlayerHistory(Spawn, HISTORY.NEK_CASTLE_LIBRARY_ACCESS) ~= 1 then + SendMessage(Spawn, "This door seems magically barred", "yellow") + return false + end + return true +end \ No newline at end of file diff --git a/server/SpawnScripts/Nektropos1/EverlingQuartersDoor.lua b/server/SpawnScripts/Nektropos1/EverlingQuartersDoor.lua new file mode 100644 index 000000000..45e61f6de --- /dev/null +++ b/server/SpawnScripts/Nektropos1/EverlingQuartersDoor.lua @@ -0,0 +1,11 @@ +--[[ + Script Name : SpawnScripts/Nektropos1/EverlingQuartersDoor.lua + Script Author : smash + Script Date : 2016.02.06 03:02:15 + Script Purpose : + : +--]] + +function spawn(NPC) + SetRequiredQuest(NPC, 177, 8, 0, 1) +end \ No newline at end of file diff --git a/server/SpawnScripts/Nektropos1/EverlingSisters.lua b/server/SpawnScripts/Nektropos1/EverlingSisters.lua new file mode 100644 index 000000000..1b6197c0b --- /dev/null +++ b/server/SpawnScripts/Nektropos1/EverlingSisters.lua @@ -0,0 +1,40 @@ +--[[ + Script Name : SpawnScripts/Nektropos1/EverlingSisters.lua + Script Author : smash + Script Date : 2016.09.09 05:09:39 + Script Purpose : Checking if all of the Everling sisters have been killed for this instance + : Alexa will spawn once again if so +--]] + +--Location IDs + +local SISTERS = { +JENNI = 616531, +SHEILA = 616585, +DEIRDRE = 616611, +CRYSTA = 616609, +ELISE = 616586, +MELANIE = 616608 +} + +function CheckSistersKilled(NPC, Spawn) + --Using Sheila's bedroom door to track this + --Random but it should never despawn + local zone = GetZone(NPC) + local door = GetSpawnByLocationID(zone, 1439498) + SetTempVariable(door, GetSpawnLocationID(NPC), "killed") + + for k,v in pairs(SISTERS) do + if GetTempVariable(door, v) ~= "killed" then + return + end + end + + --All of the sisters have been killed, spawn Alexa where this sister died + local alexa = SpawnMob(GetZone(NPC), 1780201, 0, GetX(NPC), GetY(NPC), GetZ(NPC), 0) + FaceTarget(alexa, Spawn) +end + +function death(NPC, Spawn) + CheckSistersKilled(NPC, Spawn) +end \ No newline at end of file diff --git a/server/SpawnScripts/Nektropos1/GameRoomDoor.lua b/server/SpawnScripts/Nektropos1/GameRoomDoor.lua new file mode 100644 index 000000000..f07b2a240 --- /dev/null +++ b/server/SpawnScripts/Nektropos1/GameRoomDoor.lua @@ -0,0 +1,15 @@ +--[[ + Script Name : SpawnScripts/Nektropos1/GameRoomDoor.lua + Script Purpose : + Script Author : smash + Script Date : 1/26/2016 + Script Notes : +--]] + +function spawn(NPC) + SetRequiredQuest(NPC, 176, 2, 0, 1) +end + +function respawn(NPC) + spawn(NPC) +end \ No newline at end of file diff --git a/server/SpawnScripts/Nektropos1/GuardCaptainGavin.lua b/server/SpawnScripts/Nektropos1/GuardCaptainGavin.lua new file mode 100644 index 000000000..75a515b0a --- /dev/null +++ b/server/SpawnScripts/Nektropos1/GuardCaptainGavin.lua @@ -0,0 +1,28 @@ +--[[ + Script Name : SpawnScripts/Nektropos1/GuardCaptainGavin.lua + Script Author : smash + Script Date : 2016.09.11 12:09:30 + Script Purpose : + : +--]] + +function spawn(NPC) + AddTimer(NPC, 2000, "RunIntoRoom") +end + +function RunIntoRoom(NPC) + --Open the door about a second after he starts to run + local door = GetSpawnByLocationID(GetZone(NPC), 1439509) + AddTimer(NPC, 1000, "OpenDoors", 1, door) + + --Now run into the room like a mad man + MoveToLocation(NPC, 17.32, 13.50, -44.45, 6, "DramaticEntry") +end + +function DramaticEntry(NPC) + PlayFlavor(NPC, "voiceover/english/optional3/golem_base_1/ft/golem/golem_base_1_1_garbled_e0fead4d.mp3", "Pintoota kolata eldina mastarina", "", 0, 0, nil, 27) +end + +function OpenDoors(NPC, door) + UseWidget(door) +end \ No newline at end of file diff --git a/server/SpawnScripts/Nektropos1/InquisitorofUllkorruuk.lua b/server/SpawnScripts/Nektropos1/InquisitorofUllkorruuk.lua new file mode 100644 index 000000000..d2de6a539 --- /dev/null +++ b/server/SpawnScripts/Nektropos1/InquisitorofUllkorruuk.lua @@ -0,0 +1,23 @@ +--[[ + Script Name : SpawnScripts/Nektropos1/InquisitorofUllkorruuk.lua + Script Purpose : Inquisitor of Ullkorruuk + Script Author : smash + Script Date : 1/28/2016 + Script Notes : +--]] + +function spawn(NPC) + AddTimer(NPC, 3000, "DelayedSpawnChat") +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) +end + +function death(NPC) + SpawnByLocationID(GetZone(NPC), 1584473) +end + +function DelayedSpawnChat(NPC) + Say(NPC, "Defilers, I shall purge your taint from this holy place.") +end \ No newline at end of file diff --git a/server/SpawnScripts/Nektropos1/JenniEverling.lua b/server/SpawnScripts/Nektropos1/JenniEverling.lua new file mode 100644 index 000000000..a6e5a5809 --- /dev/null +++ b/server/SpawnScripts/Nektropos1/JenniEverling.lua @@ -0,0 +1,26 @@ +--[[ + Script Name : SpawnScripts/Nektropos1/JenniEverling.lua + Script Author : smash + Script Date : 2016.09.09 05:09:39 + Script Purpose : Spawning Jenni's teacher + : +--]] + +require "SpawnScripts/Nektropos1/EverlingSisters" + +function healthchanged(NPC, Spawn) + local hp = GetHP(NPC) + local max_hp = GetMaxHP(NPC) + --Try to spawn Jenni's teacher at around 70% hp remaining + if hp / max_hp <= .70 and GetTempVariable(NPC, "TeacherSpawned") ~= "true" then + --Spawn Jenni's teacher + local teacher = SpawnByLocationID(GetZone(NPC), 616610) + Attack(teacher, Spawn) + Say(NPC, "Teacher I need your help! Deirdre sent someone to stop me.") + SetTempVariable(NPC, "TeacherSpawned", "true") + end +end + +function CombatReset(NPC) + SetTempVariable(NPC, "TeacherSpawned", nil) +end \ No newline at end of file diff --git a/server/SpawnScripts/Nektropos1/JennisTeacher.lua b/server/SpawnScripts/Nektropos1/JennisTeacher.lua new file mode 100644 index 000000000..eb441d598 --- /dev/null +++ b/server/SpawnScripts/Nektropos1/JennisTeacher.lua @@ -0,0 +1,11 @@ +--[[ + Script Name : SpawnScripts/Nektropos1/JennisTeacher.lua + Script Author : smash + Script Date : 2016.09.09 05:09:45 + Script Purpose : Despawning if combat is reset + : +--]] + +function CombatReset(NPC) + Despawn(NPC) +end \ No newline at end of file diff --git a/server/SpawnScripts/Nektropos1/LibraryDoor.lua b/server/SpawnScripts/Nektropos1/LibraryDoor.lua new file mode 100644 index 000000000..d05764638 --- /dev/null +++ b/server/SpawnScripts/Nektropos1/LibraryDoor.lua @@ -0,0 +1,21 @@ +--[[ + Script Name : SpawnScripts/Nektropos1/LibraryDoor.lua + Script Author : smash + Script Date : 2016.02.06 12:02:35 + Script Purpose : + : +--]] + +require "SpawnScripts/Generic/PlayerHistory" + +function spawn(NPC) + +end + +function can_use_command(NPC, Spawn, Message) + if GetPlayerHistory(Spawn, HISTORY.NEK_CASTLE_LIBRARY_ACCESS) ~= 1 then + SendMessage(Spawn, "This door seems magically barred", "yellow") + return false + end + return true +end \ No newline at end of file diff --git a/server/SpawnScripts/Nektropos1/MaltusEverling.lua b/server/SpawnScripts/Nektropos1/MaltusEverling.lua new file mode 100644 index 000000000..a35e671d0 --- /dev/null +++ b/server/SpawnScripts/Nektropos1/MaltusEverling.lua @@ -0,0 +1,128 @@ +--[[ + Script Name : SpawnScripts/Nektropos1/MaltusEverling.lua + Script Author : smash + Script Date : 2018.06.07 + Script Purpose : + : +--]] + +function spawn(NPC) + SetPlayerProximityFunction(NPC, 15, "StartSpeech", "Filler") +end + +function Filler() +end + +function StartSpeech(NPC, Player) + if GetTempVariable(NPC, "SpeechStarted") ~= "true" then + FaceTarget(NPC, Player) + SetTempVariable(NPC, "SpeechStaarted", "true") + Say(NPC, "Why have you come to disturb me and my family?") + AddTimer(NPC, 2500, "Speech2") + SetTempVariable(NPC, "TargetPlayer", Player) + end +end + +function Speech2(NPC) + Say(NPC, "You enter my home without welcome or being bid to enter.") + AddTimer(NPC, 2500, "Speech3") +end + +function Speech3(NPC) + Say(NPC, "Then you attack my family and slaughter them.") + AddTimer(NPC, 2500, "Speech4") +end + +function Speech4(NPC) + Say(NPC, "You have destroyed most of my research subjects.") + AddTimer(NPC, 2500, "Speech5") +end + + +function Speech5(NPC) + Say(NPC, "But it is a minor setback. I shall recreate them from your remains.") + AddTimer(NPC, 2500, "Speech6") +end + +function Speech6(NPC) + Say(NPC, "Now to harvest the parts necessary to reconstruct my family.") + AddTimer(NPC, 2500, "Speech7") +end + +function Speech7(NPC) + local pet = GetSpawnByLocationID(GetZone(NPC), 616650) + if pet ~= nil then + SetTempVariable(NPC, "pet", pet) + end + + Say(NPC, "I should prepare the machine now, while my creations take care of you.") + MoveToLocation(NPC, 211, -16, 8.2, 2, "", true) + MoveToLocation(NPC, 215, -16, 9.2, 2, "", true) + MoveToLocation(NPC, 214.6, -16, 16.56, 2, "", true) + MoveToLocation(NPC, 211.9, -16, 17.79, 2, "DelayedPathing") +end + +function DelayedPathing(NPC) + SetHeading(NPC, 0) + AddTimer(NPC, 2500, "DoDelayedPathing") +end + +function DoDelayedPathing(NPC) + MoveToLocation(NPC, 214.6, -16, 16.56, 2, "", true) + MoveToLocation(NPC, 215, -16, 9.2, 2, "", true) + MoveToLocation(NPC, 211.9, -16, 9.5, 2, "Speech8") +end + +function Speech8(NPC) + SetHeading(NPC, 180) + AddTimer(NPC, 2500, "DelayedSpeech") +end + +function DelayedSpeech(NPC) + Say(NPC, "What, what is happening?") + local zone = GetZone(NPC) + --Spawn the lightning effects + SpawnByLocationID(zone, 616653) + SpawnByLocationID(zone, 616654) + SpawnByLocationID(zone, 1585440) + AddTimer(NPC, 2500, "Speech9") +end + +function Speech9(NPC) + local player = GetTempVariable(NPC, "TargetPlayer") + + if player ~= nil then + FaceTarget(NPC, player) + end + + Say(NPC, "What did you do to my machine? I know this is your fault!") + AddTimer(NPC, 2500, "BeginAttack") +end + +function BeginAttack(NPC) + Say(NPC, "Stop what you are doing and destroy these intruders.") + SpawnSet(NPC, "attackable", "1") + local player = GetTempVariable(NPC, "TargetPlayer") + local pet = GetTempVariable(NPC, "pet") + if pet ~= nil then + SpawnSet(pet, "attackable", "1") + end + + local zone = GetZone(NPC) + local laborer1 = GetSpawnByLocationID(zone, 616652) + local laborer2 = GetSpawnByLocationID(zone, 616649) + + SpawnSet(laborer1, "attackable", "1") + SpawnSet(laborer2, "attackable", "1") + SpawnSet(laborer1, "show_level", "1") + SpawnSet(laborer2, "show_level", "1") + + if player ~= nil then + Attack(NPC, player) + Attack(laborer1, player) + Attack(laborer2, player) + SpawnSet(laborer1, "show_leve", "1") + SpawnSet(laborer2, "show_level", "1") + SpawnSet(NPC, "show_level", "1") + end +end \ No newline at end of file diff --git a/server/SpawnScripts/Nektropos1/MasterEldinNecrosis.lua b/server/SpawnScripts/Nektropos1/MasterEldinNecrosis.lua new file mode 100644 index 000000000..4d4c5ed19 --- /dev/null +++ b/server/SpawnScripts/Nektropos1/MasterEldinNecrosis.lua @@ -0,0 +1,100 @@ +--[[ + Script Name : SpawnScripts/NektroposCastle/MasterEldinNecrosis.lua + Script Purpose : Master Eldin Necrosis + Script Author : smash + Script Date : 2016.01.24 + Script Notes : +--]] + +function spawn(NPC) + ProvidesQuest(NPC, 174) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + if CanReceiveQuest(Spawn, 174) then + Dialog1(NPC, Spawn) + elseif HasQuest(Spawn, 174) and GetQuestStep(Spawn, 174) ~= 11 then + Dialog2(NPC, Spawn) + elseif HasCompletedQuest(Spawn, 174) then + Dialog3(NPC, Spawn) + else + Dialog4(NPC, Spawn) + end +end + +function Dialog1(NPC, Spawn) + FaceTarget(NPC, Spawn) + local conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/master_eldin_necrosis_/nektropos/eldin001.mp3", "", "", 1924861304, 1919830896, Spawn) + AddConversationOption(conversation, "Wait a minute! Who are you?", "Dialog1_1") + AddConversationOption(conversation, "Ok crazy, I'm getting out of here. Goodbye!") + StartConversation(conversation, NPC, Spawn, "Who are you? Who dares to challenge the might of Eldin?") +end + +function Dialog1_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + local conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/master_eldin_necrosis_/nektropos/eldin002.mp3", "", "", 2253492197, 1707213719, Spawn) + AddConversationOption(conversation, "Okay, so what are you doing here?", "Dialog1_2") + AddConversationOption(conversation, "Yeah right. Okay well have fun Eldin... goodbye.") + StartConversation(conversation, NPC, Spawn, "Fool! Don't you recognize the power of the unliving? I am Eldin, and I am the greatest necromancer to ever live!") +end + +function Dialog1_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + local conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/master_eldin_necrosis_/nektropos/eldin003.mp3", "", "", 3928579694, 2557793051, Spawn) + AddConversationOption(conversation, "Okay, so what's the wall you've hit?", "Dialog1_3") + AddConversationOption(conversation, "I'm sorry I hate the dead, I need to get out of here!") + StartConversation(conversation, NPC, Spawn, "Well, honestly, I hit a wall. This castle is haunted and contains some of the most powerful spirits I've ever encountered. I hoped to use some of them and expand my army of undead minions.") +end + +function Dialog1_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + local conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/master_eldin_necrosis_/nektropos/eldin004.mp3", "", "", 3224153706, 3957572596, Spawn) + AddConversationOption(conversation, "Is there anything I can do to help?", "Dialog1_4") + AddConversationOption(conversation, "That's too bad. Well better luck next time, I'm afraid I've other matters to attend to.") + StartConversation(conversation, NPC, Spawn, "These other spirits draw undue attention to my presence here. It's hard to sneak up on your prey if they already know from which direction you're coming. I fear I may have to leave the castle empty-handed.") +end + +function Dialog1_4(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/master_eldin_necrosis_/nektropos/eldin005.mp3", "", "", 684634683, 4205425239, Spawn) + AddConversationOption(conversation, "Alright, I'll do it but I expect to be well paid for my time!", "OfferTrinketsOfTheDead") + AddConversationOption(conversation, "If you're so powerful, you don't need my help. Goodbye!") + StartConversation(conversation, NPC, Spawn, "Perhaps you can help. But you aren't nearly as powerful in the undead arts as I am! If you go in there and dissipate a few ghosts, they may leave something personal behind. This is all I need to seize control of these unruly spirits.") +end + +function Dialog2(NPC, Spawn) + FaceTarget(NPC, Spawn) + PlayFlavor(NPC, "", "Why are you here? Useless! You're the worst minion I've ever had in my employ. Now, go out there and finish what I've asked you to do! ", "tapfoot", 1689589577, 4560189, Spawn) +end + +function Dialog3(NPC, Spawn) + local conversation = CreateConversation() + FaceTarget(NPC, Spawn) + + AddConversationOption(conversation, "Ok crazy, I'm getting out of here. Goodbye!") + StartConversation(conversation, NPC, Spawn, "Who are you? Who dares to challenge the might of Eldin?", "voiceover/english/master_eldin_necrosis_/nektropos/eldin001.mp3", 1924861304, 1919830896) +end + +function Dialog4(NPC, Spawn) + local conversation = CreateConversation() + FaceTarget(NPC, Spawn) + + AddConversationOption(conversation, "I'll keep you in mind. Farewell Eldin.") + StartConversation(conversation, NPC, Spawn, "Welcome back! Perhaps you're not as useless as you appear. Many thanks for all your hard work. Here is the coin I promised you. I appreciate your efforts! If you wish to help me again, I will pay you equally as well.", "voiceover/english/master_eldin_necrosis_/nektropos/eldin007.mp3", 2193129488, 1209581027) + SetStepComplete(Spawn, 174, 11) +end + +function OfferTrinketsOfTheDead(NPC, Spawn) + OfferQuest(NPC, Spawn, 174) +end diff --git a/server/SpawnScripts/Nektropos1/NektroposBarracksLockbox.lua b/server/SpawnScripts/Nektropos1/NektroposBarracksLockbox.lua new file mode 100644 index 000000000..34e5d2665 --- /dev/null +++ b/server/SpawnScripts/Nektropos1/NektroposBarracksLockbox.lua @@ -0,0 +1,33 @@ +--[[ + Script Name : SpawnScripts/Nektropos1/NektroposBarracksLockbox.lua + Script Purpose : + Script Author : smash + Script Date : 1/26/2016 + Script Notes : +--]] + +function spawn(NPC) +end + +function respawn(NPC) + spawn(NPC) +end + +function casted_on(NPC, Spawn, Message) + if Message == "inspect" then + Dialog1(NPC, Spawn) + end +end + +function Dialog1(NPC, Spawn) + local conversation = CreateConversation() + AddConversationOption(conversation, "Stop inspecting the lockerbox", "CloseConversation") + if CanReceiveQuest(Spawn, 176) then + AddConversationOption(conversation, "Rummage through the lockerbox", "OfferTheRedMarble") + end + StartDialogConversation(conversation, 1, NPC, Spawn, "The lockerbox is dark and musky. Most of the items are torn and tattered clothing. Who knows what critters are crawling around underneath.") +end + +function OfferTheRedMarble(NPC, Spawn) + OfferQuest(NPC, Spawn, 176) +end \ No newline at end of file diff --git a/server/SpawnScripts/Nektropos1/NektroposMountedBoarsHead.lua b/server/SpawnScripts/Nektropos1/NektroposMountedBoarsHead.lua new file mode 100644 index 000000000..2f9faa35d --- /dev/null +++ b/server/SpawnScripts/Nektropos1/NektroposMountedBoarsHead.lua @@ -0,0 +1,55 @@ +--[[ + Script Name : SpawnScripts/Nektropos1/NektroposMountedBoarsHead.lua + Script Purpose : + Script Author : smash + Script Date : 1/26/2016 + Script Notes : +--]] + +function spawn(NPC) +end + +function respawn(NPC) + spawn(NPC) +end + +function casted_on(NPC, Spawn, Message) + if Message == "inspect" then + Dialog1(NPC, Spawn) + end +end + +function Dialog1(NPC, Spawn) + local conversation = CreateConversation() + local fun_name + if not HasCompletedQuest(Spawn, 175) then + fun_name = "Dialog1_1" + else + fun_name = "Dialog1_2" + end + AddConversationOption(conversation, "Inspect the eyes.", fun_name) + AddConversationOption(conversation, "Stop examining the head.", "CloseConversation") + StartDialogConversation(conversation, 1, NPC, Spawn, "This is a mounted boar's head. It appears decayed and smells horrid. It looks as though as taxidermist never preserved it. There is something odd about the eyes.") +end + +function Dialog1_1(NPC, Spawn) + local conversation = CreateConversation() + if HasQuest(Spawn, 175) then + AddConversationOption(conversation, "Place the black eye in the hollow socket.", "Dialog2") + end + AddConversationOption(conversation, "Stop examining the head.", "CloseConversation") + StartDialogConversation(conversation, 1, NPC, Spawn, "There is only one black eye. The eye appears to be made of glass, like a marble. The second eye socket is hollow.") +end + +function Dialog1_2(NPC, Spawn) + local conversation = CreateConversation() + AddConversationOption(conversation, "Stop examining the head.", "CloseConversation") + StartDialogConversation(conversation, 1, NPC, Spawn, "There are two black marble-like eyes inset into the creature.") +end + +function Dialog2(NPC, Spawn) + local conversatoin = CreateConversation() + AddConversationOption(conversation, "Stop examining the head.", "CloseConversation") + StartDialogConversation(conversation, 1, NPC, Spawn, "You place the black marble-like eye in the hollow socket. A key falls from the mouth of the boar. This key appears to match the Barracks locks here in Nektropos.") + SetStepComplete(Spawn, 175, 1) +end \ No newline at end of file diff --git a/server/SpawnScripts/Nektropos1/NektroposMountedSwineshead.lua b/server/SpawnScripts/Nektropos1/NektroposMountedSwineshead.lua new file mode 100644 index 000000000..a91e12399 --- /dev/null +++ b/server/SpawnScripts/Nektropos1/NektroposMountedSwineshead.lua @@ -0,0 +1,66 @@ +--[[ + Script Name : SpawnScripts/Nektropos1/NektroposMountedSwineshead.lua + Script Purpose : + Script Author : smash + Script Date : 1/26/2016 + Script Notes : +--]] + +function spawn(NPC) +end + +function respawn(NPC) + spawn(NPC) +end + +function casted_on(NPC, Spawn, Message) + if Message == "inspect" then + Dialog1(NPC, Spawn) + end +end + +function Dialog1(NPC, Spawn) + local conversation = CreateConversation() + local fun_name + if CanReceiveQuest(Spawn, 175) then + fun_name = "Dialog1_1" + elseif HasQuest(Spawn, 176) then + fun_name = "Dialog1_3" + end + if not HasCompletedQuest(Spawn, 176) then + AddConversationOption(conversation, "Inspect the eyes.", fun_name) + end + AddConversationOption(conversation, "Stop examining the head.", "CloseConversation") + StartDialogConversation(conversation, 1, NPC, Spawn, "This is a mounted boar's head. It appears decayed and smells horrid. It looks as though a taxidermist never preserved it. There is something odd about the eyes.") +end + +function Dialog1_1(NPC, Spawn) + local conversation = CreateConversation() + AddConversationOption(conversation, "Take the black eye.", "OfferTheBoarsHead") + AddConversationOption(conversation, "Stop examining the head.", "CloseConversation") + StartDialogConversation(conversation, 1, NPC, Spawn, "The eyes appear to be made of glass, like marbles. One is red and one is black. The black one looks loose.") +end + +function Dialog1_3(NPC, Spawn) + local conversation = CreateConversation() + if HasQuest(Spawn, 176) then + AddConversationOption(conversation, "Place the red eye in the hollow socket.", "Dialog2") + end + AddConversationOption(conversation, "Stop examining the head.", "CloseConversation") + StartDialogConversation(conversation, 1, NPC, Spawn, "There is only one red eye. The eye appears to be made of glass, like a marble. The second eye socket is hollow.") +end + +function Dialog2(NPC, Spawn) + local conversation = CreateConversation() + AddConversationOption(conversation, "Stop examining the head.", "CloseConversation") + StartDialogConversation(conversation, 1, "You place the red marble-like eye in the hollow socket. A key falls from the mouth of the boar. You now have the Library's Key! You also hear a rumbling coming from down the hall.") + SetStepComplete(Spawn, 176, 1) + --We only want to spawn the swine fiend if there is not one currently spawned so groups don't get swarmed + if GetSpawnByLocationID(GetZone(NPC), 1584471) == nil then + SpawnByLocationID(GetZone(NPC), 1584471) + end +end + +function OfferTheBoarsHead(NPC, Spawn) + OfferQuest(NPC, Spawn, 175) +end \ No newline at end of file diff --git a/server/SpawnScripts/Nektropos1/OllixEverling.lua b/server/SpawnScripts/Nektropos1/OllixEverling.lua new file mode 100644 index 000000000..c266d286e --- /dev/null +++ b/server/SpawnScripts/Nektropos1/OllixEverling.lua @@ -0,0 +1,52 @@ +--[[ + Script Name : SpawnScripts/Nektropos1/OllixEverling.lua + Script Purpose : + Script Author : smash + Script Date : 9/12/2016 + Script Notes : +--]] + +function spawn(NPC) +end + +function hailed(NPC, Spawn) + if GetTempVariable(NPC, "talking") ~= "true" then + StartDialogLoop(NPC, Spawn) + end +end + +function StartDialogLoop(NPC, Spawn) + SetTempVariable(NPC, "talking", "true") + Say(NPC, "Ah, you've managed to kill my host.") + AddTimer(NPC, 3500, "Dialog2") +end + +function Dialog2(NPC) + Say(NPC, "She was just a mortal coil I used to bring myself back.") + AddTimer(NPC, 3500, "Dialog3") +end + +function Dialog3(NPC) + Say(NPC, "Now that I have returned to my father's castle, I no longer need her.") + AddTimer(NPC, 3500, "Dialog4") +end + +function Dialog4(NPC) + Say(NPC, "However, she was useful in luring other foolish 'heroes' down here to be used by us.") + AddTimer(NPC, 3500, "Dialog5") +end + +function Dialog5(NPC) + Say(NPC, "Now you can either do it for me and kill yourselves,") + AddTimer(NPC, 3500, "Dialog6") +end + +function Dialog6(NPC) + Say(NPC, "or you can let me have some fun.") + AddTimer(NPC, 3000, "TriggerAttackable") +end + +function TriggerAttackable(NPC) + SpawnSet(NPC, "attackable", "1") + SpawnSet(NPC, "show_level", "1") +end \ No newline at end of file diff --git a/server/SpawnScripts/Nektropos1/aDecayingCorpse.lua b/server/SpawnScripts/Nektropos1/aDecayingCorpse.lua new file mode 100644 index 000000000..01a1b17fd --- /dev/null +++ b/server/SpawnScripts/Nektropos1/aDecayingCorpse.lua @@ -0,0 +1,20 @@ +--[[ + Script Name : SpawnScripts/Nektropos1/aDecayingCorpse.lua + Script Purpose : The summon animation on zombies + Script Author : smash + Script Date : 9/12/2016 + Script Notes : +--]] + +function spawn(NPC) + --AddTimer(NPC, 2400, "PlayAnim") + SetSpawnAnimation(NPC, 13016, 8000) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) +end + +function PlayAnim(NPC) + PlayAnimation(NPC, 13016) +end \ No newline at end of file diff --git a/server/SpawnScripts/Nektropos1/aPatchworkLaborer1.lua b/server/SpawnScripts/Nektropos1/aPatchworkLaborer1.lua new file mode 100644 index 000000000..c3cc5abfe --- /dev/null +++ b/server/SpawnScripts/Nektropos1/aPatchworkLaborer1.lua @@ -0,0 +1,14 @@ +--[[ + Script Name : SpawnScripts/Nektropos1/aPatchworkLaborer1.lua + Script Author : smash + Script Date : 2018.06.21 + Script Purpose : + : +--]] + +function spawn(NPC) + MovementLoopAddLocation(NPC, 205, -16.27, 8, 2, 0) + MovementLoopAddLocation(NPC, 216, -16.27, 9, 2, 0) + MovementLoopAddLocation(NPC, 214, -16.27, 6, 2, 0) + MovementLoopAddLocation(NPC, 207, -16.27, 6, 2, 0) +end \ No newline at end of file diff --git a/server/SpawnScripts/Nektropos1/aPatchworkLaborer2.lua b/server/SpawnScripts/Nektropos1/aPatchworkLaborer2.lua new file mode 100644 index 000000000..aa9f5096e --- /dev/null +++ b/server/SpawnScripts/Nektropos1/aPatchworkLaborer2.lua @@ -0,0 +1,14 @@ +--[[ + Script Name : SpawnScripts/Nektropos1/aPatchworkLaborer2.lua + Script Author : smash + Script Date : 2018.06.21 + Script Purpose : + : +--]] + +function spawn(NPC) + MovementLoopAddLocation(NPC, 210, -16.27, 20, 2, 0) + MovementLoopAddLocation(NPC, 203, -16.27, 20, 2, 0) + MovementLoopAddLocation(NPC, 204, -16.27, 16, 2, 0) + MovementLoopAddLocation(NPC, 213, -16.27, 18, 2, 0) +end \ No newline at end of file diff --git a/server/SpawnScripts/Nektropos1/aPriestessOfUllkorruuk.lua b/server/SpawnScripts/Nektropos1/aPriestessOfUllkorruuk.lua new file mode 100644 index 000000000..358bdc4f6 --- /dev/null +++ b/server/SpawnScripts/Nektropos1/aPriestessOfUllkorruuk.lua @@ -0,0 +1,18 @@ +--[[ + Script Name : SpawnScripts/Nektropos1/aPriestessOfUllkorruuk.lua + Script Purpose : a priestess of Ullkorruuk + Script Author : smash + Script Date : 1/28/2016 + Script Notes : +--]] + +function spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) +end + +function group_dead(NPC) + SpawnByLocationID(GetZone(NPC), 1584466) +end \ No newline at end of file diff --git a/server/SpawnScripts/Nektropos1/aWineRack.lua b/server/SpawnScripts/Nektropos1/aWineRack.lua new file mode 100644 index 000000000..3aa97fadd --- /dev/null +++ b/server/SpawnScripts/Nektropos1/aWineRack.lua @@ -0,0 +1,22 @@ +--[[ + Script Name : SpawnScripts/Nektropos1/aWineRack.lua + Script Author : smash + Script Date : 2016.09.11 04:09:21 + Script Purpose : + : +--]] + +function casted_on(NPC, Spawn, Message) + SpawnSet(NPC, "show_command_icon", "0") + SpawnSet(NPC, "display_hand_icon", "0") + + --Random result + local result = math.random(1,5) + if result == 1 then + --20% chance to spawn a fermented elixir + SendMessage(Spawn, "During your search you knock a bottle off the shelf and a strange liquid begins to stream out of it.") + SpawnMob(GetZone(NPC), 1780446, 0, GetX(Spawn), GetY(Spawn), GetZ(Spawn)) + else + SendMessage(Spawn, "You search through the racks but fail to find anything of use.") + end +end \ No newline at end of file diff --git a/server/SpawnScripts/Nektropos1/anEverlingstableboy.lua b/server/SpawnScripts/Nektropos1/anEverlingstableboy.lua new file mode 100644 index 000000000..82f4f5211 --- /dev/null +++ b/server/SpawnScripts/Nektropos1/anEverlingstableboy.lua @@ -0,0 +1,26 @@ +--[[ + Script Name : SpawnScripts/Nektropos1/anEverlingstableboy.lua + Script Author : smash + Script Date : 2018.06.20 10:06:35 + Script Purpose : + : +--]] + +function spawn(NPC) + MovementLoopAddLocation(NPC, -24, 0, -29, 2, 0) + MovementLoopAddLocation(NPC, -21, 0, -26, 2, 0) + MovementLoopAddLocation(NPC, -24, 0, -22, 2, 0) + MovementLoopAddLocation(NPC, -25, 0, -17, 2, 0) + MovementLoopAddLocation(NPC, -18, 0, -12, 2, 0) + MovementLoopAddLocation(NPC, -25, 0, -17, 2, 0) + MovementLoopAddLocation(NPC, -24, 0, -22, 2, 0) + MovementLoopAddLocation(NPC, -21, 0, -26, 2, 0) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) +end + +function respawn(NPC) + spawn(NPC) +end \ No newline at end of file diff --git a/server/SpawnScripts/Nektropos1/deirdrewallscontztrap.lua b/server/SpawnScripts/Nektropos1/deirdrewallscontztrap.lua new file mode 100644 index 000000000..fd79d089d --- /dev/null +++ b/server/SpawnScripts/Nektropos1/deirdrewallscontztrap.lua @@ -0,0 +1,20 @@ +--[[ + Script Name : SpawnScripts/Nektropos1/deirdrewallscontztrap.lua + Script Author : smash + Script Date : 2016.09.09 09:09:00 + Script Purpose : + : +--]] + +function spawn(NPC) + +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) +end + +function respawn(NPC) + +end + diff --git a/server/SpawnScripts/Nektropos1/deirdrewallscotnz.lua b/server/SpawnScripts/Nektropos1/deirdrewallscotnz.lua new file mode 100644 index 000000000..9dd65fcf4 --- /dev/null +++ b/server/SpawnScripts/Nektropos1/deirdrewallscotnz.lua @@ -0,0 +1,11 @@ +--[[ + Script Name : SpawnScripts/Nektropos1/deirdrewallscotnz.lua + Script Author : smash + Script Date : 2016.09.09 09:09:33 + Script Purpose : + : +--]] + +function casted_on(NPC, Spawn, Message) + UseWidget(GetSpawn(NPC, 1780124)) +end \ No newline at end of file diff --git a/server/SpawnScripts/Nektropos1/elisewallscotnz.lua b/server/SpawnScripts/Nektropos1/elisewallscotnz.lua new file mode 100644 index 000000000..417b70e09 --- /dev/null +++ b/server/SpawnScripts/Nektropos1/elisewallscotnz.lua @@ -0,0 +1,15 @@ +--[[ + Script Name : SpawnScripts/Nektropos1/elisewallscotnz.lua + Script Author : smash + Script Date : 2016.01.28 03:01:00 + Script Purpose : + : +--]] + +function spawn(NPC) + +end + +function casted_on(NPC) + UseWidget(GetSpawn(NPC, 1780119)) +end \ No newline at end of file diff --git a/server/SpawnScripts/Nektropos1/everlingsquartersdoor2.lua b/server/SpawnScripts/Nektropos1/everlingsquartersdoor2.lua new file mode 100644 index 000000000..9e5f2ddce --- /dev/null +++ b/server/SpawnScripts/Nektropos1/everlingsquartersdoor2.lua @@ -0,0 +1,20 @@ +--[[ + Script Name : SpawnScripts/Nektropos1/everlingsquartersdoor2.lua + Script Author : smash + Script Date : 2016.09.10 11:09:58 + Script Purpose : + : +--]] + +function spawn(NPC) + +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) +end + +function respawn(NPC) + +end + diff --git a/server/SpawnScripts/Nektropos1/exitportal.lua b/server/SpawnScripts/Nektropos1/exitportal.lua new file mode 100644 index 000000000..227af48ae --- /dev/null +++ b/server/SpawnScripts/Nektropos1/exitportal.lua @@ -0,0 +1,12 @@ +--[[ + Script Name : SpawnScripts/Nektropos1/exitportal.lua + Script Author : smash + Script Date : 2018.06.09 02:06:30 + Script Purpose : + : +--]] + +function spawn(NPC) + SetSpawnAnimation(NPC, 13016, 10000) + SpawnSet(NPC, "activity_state", "2176") +end \ No newline at end of file diff --git a/server/SpawnScripts/Nektropos1/p19EliseSecretDoorKey.lua b/server/SpawnScripts/Nektropos1/p19EliseSecretDoorKey.lua new file mode 100644 index 000000000..4fa55ead9 --- /dev/null +++ b/server/SpawnScripts/Nektropos1/p19EliseSecretDoorKey.lua @@ -0,0 +1,24 @@ +--[[ + Script Name : SpawnScripts/Nektropos1/p19EliseSecretDoorKey.lua + Script Author : smash + Script Date : 2016.01.28 04:01:06 + Script Purpose : the spawns that allow access to secret doors in the castle + : +--]] + +require "SpawnScripts/Generic/PlayerHistory" + +function spawn(NPC) + SetRequiredHistory(NPC, HISTORY.NEK_CASTLE_SCONCE_KEY_ACCESS, 1) +end + +function respawn(NPC) + spawn(NPC) +end + +function casted_on(NPC, Spawn, Message) + SetPlayerHistory(Spawn, HISTORY.NEK_CASTLE_SCONCE_KEY_ACCESS, 0) + SetPlayerHistory(Spawn, HISTORY.NEK_CASTLE_SCONCE_ACCESS, 1) + SendMessage(Spawn, "You find a note hidden behind the cue rack.") + SummonItem(Spawn, 1896, 1) +end \ No newline at end of file diff --git a/server/SpawnScripts/Nektropos1/p19EliseSecretDoorScontz.lua b/server/SpawnScripts/Nektropos1/p19EliseSecretDoorScontz.lua new file mode 100644 index 000000000..f2fc74479 --- /dev/null +++ b/server/SpawnScripts/Nektropos1/p19EliseSecretDoorScontz.lua @@ -0,0 +1,17 @@ +--[[ + Script Name : SpawnScripts/Nektropos1/p19EliseSecretDoorScontz.lua + Script Purpose : + Script Author : smash + Script Date : 1/26/2016 + Script Notes : +--]] + +require "SpawnScripts/Generic/PlayerHistory" + +function spawn(NPC) + SetRequiredHistory(NPC, HISTORY.NEK_CASTLE_SCONCE_ACCESS, 1) +end + +function respawn(NPC) + spawn(NPC) +end \ No newline at end of file diff --git a/server/SpawnScripts/Nektropos1/p34sheiladresser.lua b/server/SpawnScripts/Nektropos1/p34sheiladresser.lua new file mode 100644 index 000000000..1b80256e0 --- /dev/null +++ b/server/SpawnScripts/Nektropos1/p34sheiladresser.lua @@ -0,0 +1,26 @@ +--[[ + Script Name : SpawnScripts/Nektropos1/p34sheiladresser.lua + Script Author : smash + Script Date : 2016.09.09 02:09:02 + Script Purpose : + : +--]] + +function spawn(NPC) + +end + +function casted_on(NPC, Spawn, Message) + local conversation = CreateConversation() + AddConversationOption(conversation, "Try to break it open?", "SpawnSheila") + AddConversationOption(conversation, "Leave it.", "CloseConversation") + StartDialogConversation(conversation, 1, NPC, Spawn, "All of the dresser drawers are locked.") +end + +function SpawnSheila(NPC, Spawn) + if GetTempVariable(NPC, "SheilaSpawned") ~= "true" then + SetTempVariable(NPC, "SheilaSpawned", "true") + SpawnByLocationID(GetZone(NPC), 616585) + end + CloseConversation(NPC, Spawn) +end \ No newline at end of file diff --git a/server/SpawnScripts/Nektropos1/p47swordholder.lua b/server/SpawnScripts/Nektropos1/p47swordholder.lua new file mode 100644 index 000000000..311f3f261 --- /dev/null +++ b/server/SpawnScripts/Nektropos1/p47swordholder.lua @@ -0,0 +1,35 @@ +--[[ + Script Name : SpawnScripts/Nektropos1/p47swordholder.lua + Script Author : smash + Script Date : 2016.09.11 01:09:03 + Script Purpose : + : +--]] + +function spawn(NPC) + SetRequiredQuest(NPC, 177, 9, 0, 1) +end + +function casted_on(NPC, Spawn, Message) + if Message == "inspect" then + SendMessage(Spawn, "There appears to be a shaft running down the middle of the stand, about the width of a thin blade.") + else + local zone = GetZone(NPC) + + --First unlock and open the 2 secret basement doors + local door = GetSpawnByLocationID(zone, 619859) + UseWidget(door) + + if GetTempVariable(NPC, "SwordSpawned") ~= "true" then + local door2 = GetSpawnByLocationID(zone, 619860) + SpawnSet(door, "show_command_icon", "1") + SpawnSet(door2, "show_command_icon", "1") + SpawnSet(door, "display_hand_icon", "1") + SpawnSet(door2, "display_hand_icon", "1") + + --Now spawn the sword in this sword holder + SpawnByLocationID(zone, 623147) + SetTempVariable(NPC, "SwordSpawned", "true") + end + end +end \ No newline at end of file diff --git a/server/SpawnScripts/Nektropos1/p49beddiarysearch.lua b/server/SpawnScripts/Nektropos1/p49beddiarysearch.lua new file mode 100644 index 000000000..ed9700bf3 --- /dev/null +++ b/server/SpawnScripts/Nektropos1/p49beddiarysearch.lua @@ -0,0 +1,46 @@ +--[[ + Script Name : SpawnScripts/Nektropos1/p49_bed_diary_search.lua + Script Author : smash + Script Date : 2016.09.08 04:02:12 + Script Purpose : + : +--]] + +function spawn(NPC) +end + +function casted_on(NPC, Spawn, Message) + if GetTempVariable(NPC, "NythsSpawned") ~= "true" then + SetTempVariable(NPC, "NythsSpawned", "true") + --Spawn the Nyths + SpawnGroupByID(GetZone(NPC), 1043630) + end + ReadBook1(NPC, Spawn) +end + +function ReadBook1(NPC, Spawn) + local conversation = CreateConversation() + AddConversationOption(conversation, "Examine the book.", "ReadBook2") + AddConversationOption(conversation, "Leave it alone.", "CloseConversation") + StartDialogConversation(conversation, 1, NPC, Spawn, "You find a book hidden under one of the pillows.") +end + +function ReadBook2(NPC, Spawn) + local conversation = CreateConversation() + AddConversationOption(conversation, "Read it.", "ReadBook3") + AddConversationOption(conversation, "Put it back under the pillow.", "CloseConversation") + StartDialogConversation(conversation, 1, NPC, Spawn, "It appears to be the diary of a young girl named Crysta.") +end + +function ReadBook3(NPC, Spawn) + local conversation = CreateConversation() + AddConversationOption(conversation, "Put the book back under the pillow.", "CloseConversation") + StartDialogConversation(conversation, 1, NPC, Spawn, "Most of the book talks about her daily life and how she would spend countless hours with her sister Melanie. Apparently the girls would spend all day playing in Melanies room.") + --SpawnSet(NPC, "show_command_icon", "0") + --SpawnSet(NPC, "display_hand_icon", "0") + if GetTempVariable(NPC, "CrystaSpawned") ~= "true" then + --Spawn Crysta and Melanie + SpawnGroupByID(GetZone(NPC), 43674) + SetTempVariable(NPC, "CrystaSpawned", "true") + end +end \ No newline at end of file diff --git a/server/SpawnScripts/Nektropos1/p53scrollofopening.lua b/server/SpawnScripts/Nektropos1/p53scrollofopening.lua new file mode 100644 index 000000000..bdfee026e --- /dev/null +++ b/server/SpawnScripts/Nektropos1/p53scrollofopening.lua @@ -0,0 +1,20 @@ +--[[ + Script Name : SpawnScripts/Nektropos1/p53scrollofopening.lua + Script Author : smash + Script Date : 2016.09.13 11:09:11 + Script Purpose : + : +--]] + +require "SpawnScripts/Generic/PlayerHistory" + +function casted_on(NPC, Spawn, Message) + local conversation = CreateConversation() + AddConversationOption(conversation, "Examine the scroll", "GiveAccess") + StartDialogConversation(conversation, 1, NPC, Spawn, "This scroll roughly shows the location of a number of secret doors in the basement, you think you could probably find them now. It appears too fragile to pick up and bring with you.") +end + +function GiveAccess(NPC, Spawn) + CloseConversation(NPC, Spawn) + SetPlayerHistory(Spawn, HISTORY.NEK_CASTLE_BASEMENT_ACCESS, 1) +end \ No newline at end of file diff --git a/server/SpawnScripts/Nektropos1/p53secretdooropener.lua b/server/SpawnScripts/Nektropos1/p53secretdooropener.lua new file mode 100644 index 000000000..49f1a982f --- /dev/null +++ b/server/SpawnScripts/Nektropos1/p53secretdooropener.lua @@ -0,0 +1,13 @@ +--[[ + Script Name : SpawnScripts/Nektropos1/p53secretdooropener.lua + Script Author : smash + Script Date : 2016.09.13 11:09:11 + Script Purpose : + : +--]] + +require "SpawnScripts/Generic/PlayerHistory" + +function spawn(NPC) + SetRequiredHistory(NPC, HISTORY.NEK_CASTLE_BASEMENT_STUDY_ACCESS, 1) +end \ No newline at end of file diff --git a/server/SpawnScripts/Nektropos1/p59alanatrigger.lua b/server/SpawnScripts/Nektropos1/p59alanatrigger.lua new file mode 100644 index 000000000..a31114b20 --- /dev/null +++ b/server/SpawnScripts/Nektropos1/p59alanatrigger.lua @@ -0,0 +1,19 @@ +--[[ + Script Name : SpawnScripts/Nektropos1/p59alanatrigger.lua + Script Author : smash + Script Date : 2018.06.07 01:06:16 + Script Purpose : + : +--]] + +function spawn(NPC) + +end + +function casted_on(NPC) + if GetTempVariable(NPC, "TrapTriggered") ~= "true" then + SetTempVariable(NPC, "TrapTriggered", "true") + SpawnByLocationID(GetZone(NPC), 616580) + SpawnSet(NPC, "show_command_icon", 0) + end +end \ No newline at end of file diff --git a/server/SpawnScripts/Nektropos1/p59sarcophogustrap.lua b/server/SpawnScripts/Nektropos1/p59sarcophogustrap.lua new file mode 100644 index 000000000..b8e40502d --- /dev/null +++ b/server/SpawnScripts/Nektropos1/p59sarcophogustrap.lua @@ -0,0 +1,19 @@ +--[[ + Script Name : SpawnScripts/Nektropos1/p59sarcophogustrap.lua + Script Author : smash + Script Date : 2018.06.07 01:06:16 + Script Purpose : + : +--]] + +function spawn(NPC) + +end + +function casted_on(NPC) + if GetTempVariable(NPC, "TrapTriggered") ~= "true" then + SetTempVariable(NPC, "TrapTriggered", "true") + SpawnByLocationID(GetZone(NPC), 1585015) + SpawnSet(NPC, "show_command_icon", 0) + end +end \ No newline at end of file diff --git a/server/SpawnScripts/Nektropos1/secretlaboratoryentrancesecretdoor.lua b/server/SpawnScripts/Nektropos1/secretlaboratoryentrancesecretdoor.lua new file mode 100644 index 000000000..8c70ab982 --- /dev/null +++ b/server/SpawnScripts/Nektropos1/secretlaboratoryentrancesecretdoor.lua @@ -0,0 +1,11 @@ +--[[ + Script Name : SpawnScripts/Nektropos1/secretlaboratoryentrancesecretdoor.lua + Script Author : smash + Script Date : 2018.06.09 12:06:21 + Script Purpose : + : +--]] + +function spawn(NPC) + SpawnSet(NPC, "activity_state", "0") +end \ No newline at end of file diff --git a/server/SpawnScripts/Nektropos1/widgetbadbook.lua b/server/SpawnScripts/Nektropos1/widgetbadbook.lua new file mode 100644 index 000000000..3d962c430 --- /dev/null +++ b/server/SpawnScripts/Nektropos1/widgetbadbook.lua @@ -0,0 +1,25 @@ +--[[ + Script Name : SpawnScripts/Nektropos1/widgetbadbook.lua + Script Author : smash + Script Date : 2018.06.06 02:06:50 + Script Purpose : + : +--]] + +local FAIR_WARNINGS_IGNORED = 262 + +function spawn(NPC) + SetRequiredQuest(NPC, FAIR_WARNINGS_IGNORED, 1, 0, 1, 2) +end + +function casted_on(NPC, Player, SpellName) + local conversation = CreateConversation() + AddConversationOption(conversation, "Open book", "OfferFairWarnings") + AddConversationOption(conversation, "Don't open", "CloseConversation") + StartDialogConversation(conversation, 1, NPC, Player, "You see a large book on the table.") +end + +function OfferFairWarnings(NPC, Player) + CloseConversation(NPC, Player) + OfferQuest(nil, Player, FAIR_WARNINGS_IGNORED) +end \ No newline at end of file diff --git a/server/SpawnScripts/Nektulos/agriffintamer.lua b/server/SpawnScripts/Nektulos/agriffintamer.lua new file mode 100644 index 000000000..d4ff8130c --- /dev/null +++ b/server/SpawnScripts/Nektulos/agriffintamer.lua @@ -0,0 +1,207 @@ +--[[ + Script Name : SpawnScripts/ThunderingSteppes/agriffontamer.lua + Script Purpose : a griffon tamer (2490000) + Script Author : Jabantiz + Script Date : 2014.07.14 + Script Notes : +--]] + +local GriffonEggs = 112 + +function spawn(NPC) + ProvidesQuest(NPC, GriffonEggs) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + if CanReceiveQuest(Spawn, GriffonEggs) then + -- Start Quest + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_2_1052.mp3", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "I was wondering if there were any errands you needed help with.", "dlg_0_1") + AddConversationOption(conversation, "I would like to travel.", "dlg_1_1") + AddConversationOption(conversation, "I am fine staying here, thanks.") + StartConversation(conversation, NPC, Spawn, "Greetings traveler, how can I assist you today?") + elseif GetQuestStep(Spawn, GriffonEggs) == 2 then + -- Turn in the quest + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_1_1004.mp3", "", "", 0, 0, Spawn) + SetStepComplete(Spawn, GriffonEggs, 2) + AddConversationOption(conversation, "I hope she grows up healthy and strong!") + StartConversation(conversation, NPC, Spawn, "Oh, my, that's a gorgeous egg! Let me just put it down right over here. Our thanks, it's going to be rough for the handlers to raise all these!") + else + -- Finished Quest + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_2_1042.mp3", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "I would like to travel.", "dlg_1_1") + AddConversationOption(conversation, "Nowhere.") + StartConversation(conversation, NPC, Spawn, "Greetings traveler, how can I assist you today?") + end +end + +function dlg_0_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "They certainly have. These look very sturdy, but I don't see many griffins about.", "dlg_0_2") + StartConversation(conversation, NPC, Spawn, "It's been a real treat watching this tower be built by all the artisans. They've done a marvelous job getting it ready for our flying friends.") +end + +function dlg_0_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "So if you had some more griffons, the scheduling would be better?", "dlg_0_3") + AddConversationOption(conversation, "This sounds like a scheduling problem I don't want anything to do with.") + StartConversation(conversation, NPC, Spawn, "These towers were built very fast, and we were unable to get the griffin stock up to what it should be. This has made scheduling flights very difficult.") +end + +function dlg_0_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "Sure, sounds like a deal.", "dlg_0_4") + StartConversation(conversation, NPC, Spawn, "Oh, certainly. But they've got to be trained properly from birth, really. I'll tell you what, if you grab an unhatched griffin egg and return it to any of us tamers, you will be rewarded handsomely. How's that sound?") +end + +function dlg_0_4(NPC, Spawn) + OfferQuest(NPC, Spawn, GriffonEggs) +end + +function dlg_1_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + local con = CreateConversation() + + if GetSpawnLocationID(NPC) == 1214217 then + AddConversationOption(con, "To Antonica Gates.", "DocksToAnt") + AddConversationOption(con, "To South East Station.", "DocksToSE") + AddConversationOption(con, "To Coldwind.", "DocksToCold") + AddConversationOption(con, "To Thundermist Village.", "DocksToThundermist") + elseif GetSpawnLocationID(NPC) == 1214218 then + AddConversationOption(con, "To Antonica Gate.", "SEToAnt") + AddConversationOption(con, "To Coldwind.", "SEToCold") + AddConversationOption(con, "To Thundermist Village.", "SEToThundermist") + AddConversationOption(con, "To Docks.", "SEToDocks") + elseif GetSpawnLocationID(NPC) == 1214219 then + AddConversationOption(con, "To Thundermist Village.", "AntToThundermist") + AddConversationOption(con, "To South East Station.", "AntToSE") + AddConversationOption(con, "To Coldwind.", "AntToCold") + elseif GetSpawnLocationID(NPC) == 1214220 then + AddConversationOption(con, "To Thundermist Village.", "ColdToThundermist") + AddConversationOption(con, "To South East Station.", "ColdToSE") + AddConversationOption(con, "To Antonica Gate.", "ColdToAnt") + AddConversationOption(con, "To Docks.", "ColdToDocks") + elseif GetSpawnLocationID(NPC) == 1214221 then + AddConversationOption(con, "To Antonica Gate.", "ThundermistToAnt") + AddConversationOption(con, "To Coldwind.", "ThundermistToCold") + AddConversationOption(con, "To South East Station.", "ThundermistToSE") + AddConversationOption(con, "To Docks.", "ThundermistToDocks") + else + PlayFlavor(NPC, "", "Not implemented yet!", "cry", 0, 0, Spawn) + end + AddConversationOption(con, "Nowhere.") + StartConversation(con, NPC, Spawn, "Where to?") +end + +function DocksToAnt(NPC, Spawn) + StartAutoMount(Spawn, 16) + SetMount(Spawn, 225) +end + +function DocksToSE(NPC, Spawn) + StartAutoMount(Spawn, 15) + SetMount(Spawn, 225) +end + +function DocksToCold(NPC, Spawn) + StartAutoMount(Spawn, 14) + SetMount(Spawn, 225) +end + +function DocksToThundermist(NPC, Spawn) + StartAutoMount(Spawn, 13) + SetMount(Spawn, 225) +end + +function SEToAnt(NPC, Spawn) + StartAutoMount(Spawn, 4) + SetMount(Spawn, 225) +end + +function SEToCold(NPC, Spawn) + StartAutoMount(Spawn, 7) + SetMount(Spawn, 225) +end + +function SEToThundermist(NPC, Spawn) + StartAutoMount(Spawn, 12) + SetMount(Spawn, 225) +end + +function SEToDocks(NPC, Spawn) + StartAutoMount(Spawn, 18) + SetMount(Spawn, 225) +end + +function AntToThundermist(NPC, Spawn) + StartAutoMount(Spawn, 1) + SetMount(Spawn, 225) +end + +function AntToSE(NPC, Spawn) + StartAutoMount(Spawn, 3) + SetMount(Spawn, 225) +end + +function AntToCold(NPC, Spawn) + StartAutoMount(Spawn, 10) + SetMount(Spawn, 225) +end + +function ColdToThundermist(NPC, Spawn) + StartAutoMount(Spawn, 6) + SetMount(Spawn, 225) +end + +function ColdToSE(NPC, Spawn) + StartAutoMount(Spawn, 8) + SetMount(Spawn, 225) +end + +function ColdToAnt(NPC, Spawn) + StartAutoMount(Spawn, 11) + SetMount(Spawn, 225) +end + +function ColdToDocks(NPC, Spawn) + StartAutoMount(Spawn, 19) + SetMount(Spawn, 225) +end + +function ThundermistToAnt(NPC, Spawn) + StartAutoMount(Spawn, 2) + SetMount(Spawn, 225) +end + +function ThundermistToCold(NPC, Spawn) + StartAutoMount(Spawn, 5) + SetMount(Spawn, 225) +end + +function ThundermistToSE(NPC, Spawn) + StartAutoMount(Spawn, 9) + SetMount(Spawn, 225) +end + +function ThundermistToDocks(NPC, Spawn) + StartAutoMount(Spawn, 17) + SetMount(Spawn, 225) +end +--[[ raw_conversations + PlayFlavor(NPC, "", "Fun, fun, fun! This big old tower, built for griffons, and yet... there just don't seem to be any around. Thinking about helping us out?", "", 1689589577, 4560189, Spawn) + PlayFlavor(NPC, "", "You can scramble 'em, boil 'em, fry 'em... oh, wait... were we talking about griffon eggs or chicken eggs?", "", 1689589577, 4560189, Spawn) + PlayFlavor(NPC, "", "I say... you haven't seen any griffon eggs around, have you? We sure could use some!", "", 1689589577, 4560189, Spawn) +--]] diff --git a/server/SpawnScripts/Nektulos/agriffontamer.lua b/server/SpawnScripts/Nektulos/agriffontamer.lua new file mode 100644 index 000000000..df7f648ab --- /dev/null +++ b/server/SpawnScripts/Nektulos/agriffontamer.lua @@ -0,0 +1,141 @@ +--[[ + Script Name : SpawnScripts/Nektulos/agriffontamer.lua + Script Purpose : a griffon tamer (1790109) + Script Author : neatz09 + Script Date : 2/5/2019 + Script Notes : +--]] + +local GriffonEggs = 112 + +function spawn(NPC) + ProvidesQuest(NPC, GriffonEggs) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + if CanReceiveQuest(Spawn, GriffonEggs) then + -- Start Quest + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_2_1052.mp3", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "I was wondering if there were any errands you needed help with.", "dlg_0_1") + AddConversationOption(conversation, "I would like to travel.", "dlg_1_1") + AddConversationOption(conversation, "I am fine staying here, thanks.") + StartConversation(conversation, NPC, Spawn, "Greetings traveler, how can I assist you today?") + elseif GetQuestStep(Spawn, GriffonEggs) == 2 then + -- Turn in the quest + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_1_1004.mp3", "", "", 0, 0, Spawn) + SetStepComplete(Spawn, GriffonEggs, 2) + AddConversationOption(conversation, "I hope she grows up healthy and strong!") + StartConversation(conversation, NPC, Spawn, "Oh, my, that's a gorgeous egg! Let me just put it down right over here. Our thanks, it's going to be rough for the handlers to raise all these!") + else + -- Finished Quest + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_2_1042.mp3", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "I would like to travel.", "dlg_1_1") + AddConversationOption(conversation, "Nowhere.") + StartConversation(conversation, NPC, Spawn, "Greetings traveler, how can I assist you today?") + end +end + +function dlg_0_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "They certainly have. These look very sturdy, but I don't see many griffins about.", "dlg_0_2") + StartConversation(conversation, NPC, Spawn, "It's been a real treat watching this tower be built by all the artisans. They've done a marvelous job getting it ready for our flying friends.") +end + +function dlg_0_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "So if you had some more griffons, the scheduling would be better?", "dlg_0_3") + AddConversationOption(conversation, "This sounds like a scheduling problem I don't want anything to do with.") + StartConversation(conversation, NPC, Spawn, "These towers were built very fast, and we were unable to get the griffin stock up to what it should be. This has made scheduling flights very difficult.") +end + +function dlg_0_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "Sure, sounds like a deal.", "dlg_0_4") + StartConversation(conversation, NPC, Spawn, "Oh, certainly. But they've got to be trained properly from birth, really. I'll tell you what, if you grab an unhatched griffin egg and return it to any of us tamers, you will be rewarded handsomely. How's that sound?") +end + +function dlg_0_4(NPC, Spawn) + OfferQuest(NPC, Spawn, GriffonEggs) +end + +function dlg_1_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + local con = CreateConversation() + + if GetSpawnLocationID(NPC) == 93878 then + AddConversationOption(con, "Bone Lake Station.", "NmarToBone") + AddConversationOption(con, "Commonlands Station.", "NmarToCL") + AddConversationOption(con, "Docks.", "NmarToDocks") + elseif GetSpawnLocationID(NPC) == 93879 then + AddConversationOption(con, "To Docks Station", "CLToDocks") + AddConversationOption(con, "To N'Mar's Ascent Station", "CLToNmar") + elseif GetSpawnLocationID(NPC) == 93880 then + AddConversationOption(con, "To Commonlands Station.", "DocksToCL") + AddConversationOption(con, "To N'Mar's Ascent Station.", "DocksToNmar") + elseif GetSpawnLocationID(NPC) == 93877 then + AddConversationOption(con, "To N'Mar's Ascent Station.", "BoneToNmar") + else + PlayFlavor(NPC, "", "Not implemented yet!", "cry", 0, 0, Spawn) + end + AddConversationOption(con, "Nowhere.") + StartConversation(con, NPC, Spawn, "Where to?") +end + +function NmarToBone(NPC, Spawn) + StartAutoMount(Spawn, 184) + SetMount(Spawn, 225) +end + +function NmarToCL(NPC, Spawn) + StartAutoMount(Spawn, 183) + SetMount(Spawn, 225) +end + +function NmarToDocks(NPC, Spawn) + StartAutoMount(Spawn, 181) + SetMount(Spawn, 225) +end + +function CLToDocks(NPC, Spawn) + StartAutoMount(Spawn, 178) + SetMount(Spawn, 225) +end + +function CLToNmar(NPC, Spawn) + StartAutoMount(Spawn, 182) + SetMount(Spawn, 225) +end + +function DocksToCL(NPC, Spawn) + StartAutoMount(Spawn, 179) + SetMount(Spawn, 225) +end + +function DocksToNmar(NPC, Spawn) + StartAutoMount(Spawn, 180) + SetMount(Spawn, 225) +end + +function BoneToNmar(NPC, Spawn) + StartAutoMount(Spawn, 185) + SetMount(Spawn, 225) +end + +--[[ raw_conversations + PlayFlavor(NPC, "", "Fun, fun, fun! This big old tower, built for griffons, and yet... there just don't seem to be any around. Thinking about helping us out?", "", 1689589577, 4560189, Spawn) + PlayFlavor(NPC, "", "You can scramble 'em, boil 'em, fry 'em... oh, wait... were we talking about griffon eggs or chicken eggs?", "", 1689589577, 4560189, Spawn) + PlayFlavor(NPC, "", "I say... you haven't seen any griffon eggs around, have you? We sure could use some!", "", 1689589577, 4560189, Spawn) +--]] diff --git a/server/SpawnScripts/Neriak/AlaunnoluDXaate.lua b/server/SpawnScripts/Neriak/AlaunnoluDXaate.lua new file mode 100644 index 000000000..0c5218395 --- /dev/null +++ b/server/SpawnScripts/Neriak/AlaunnoluDXaate.lua @@ -0,0 +1,45 @@ +--[[ + Script Name : SpawnScripts/Neriak/AlaunnoluDXaate.lua + Script Purpose : Waypoint Path for Alaunnolu D'Xaate + Script Author : Cynnar + Script Date : 5/26/2018 12:00:00 AM + Script Notes : +--]] + +function spawn(NPC) + waypoints(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) +end + +function respawn(NPC) +end + +function waypoints(NPC) + MovementLoopAddLocation(NPC, -175.34, 0.46, 310.32, 2, 0) + MovementLoopAddLocation(NPC, -180.72, 0.12, 308.7, 2, 10) + MovementLoopAddLocation(NPC, -182.41, 0.37, 308.5, 2, 0) + MovementLoopAddLocation(NPC, -181.26, 0.22, 309.89, 2, 0) + MovementLoopAddLocation(NPC, -185.68, 0.49, 315.7, 2, 0) + MovementLoopAddLocation(NPC, -188.41, 0.49, 314.35, 2, 0) + MovementLoopAddLocation(NPC, -187.92, 0.49, 311.61, 2, 0) + MovementLoopAddLocation(NPC, -187.01, 0.49, 310.86, 2, 0) + MovementLoopAddLocation(NPC, -186.05, 0.49, 307.92, 2, 0) + MovementLoopAddLocation(NPC, -185.31, 0.49, 308.15, 2, 10) + MovementLoopAddLocation(NPC, -189.13, 0.49, 310.85, 2, 0) + MovementLoopAddLocation(NPC, -188.44, 0.49, 310.85, 2, 0) + MovementLoopAddLocation(NPC, -187.45, 0.49, 310.26, 2, 0) + MovementLoopAddLocation(NPC, -186.61, 0.48, 307.85, 2, 10) + MovementLoopAddLocation(NPC, -185.21, 0.49, 308.21, 2, 0) + MovementLoopAddLocation(NPC, -186.46, 0.49, 308.58, 2, 0) + MovementLoopAddLocation(NPC, -187.27, 0.49, 310.63, 2, 0) + MovementLoopAddLocation(NPC, -188.85, 0.49, 312.49, 2, 0) + MovementLoopAddLocation(NPC, -189, 0.49, 313.87, 2, 0) + MovementLoopAddLocation(NPC, -185.78, 0.49, 315.89, 2, 0) + MovementLoopAddLocation(NPC, -181.13, 0.27, 310.39, 2, 0) + MovementLoopAddLocation(NPC, -182.53, 0.4, 308.53, 2, 10) + MovementLoopAddLocation(NPC, -180.98, 0.1, 308.57, 2, 0) + MovementLoopAddLocation(NPC, -175.35, 0.46, 310.43, 2, 5) +end diff --git a/server/SpawnScripts/Neriak/Brute.lua b/server/SpawnScripts/Neriak/Brute.lua new file mode 100644 index 000000000..ed718bd92 --- /dev/null +++ b/server/SpawnScripts/Neriak/Brute.lua @@ -0,0 +1,69 @@ +--[[ + Script Name : SpawnScripts/Neriak/Brute.lua + Script Purpose : Waypoint Path for Brute + Script Author : Cynnar + Script Date : 5/27/2018 12:00:00 AM + Script Notes : +--]] + +function spawn(NPC) + waypoints(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) +end + +function respawn(NPC) +end + +function waypoints(NPC) + ranpause = math.random(0, 10) + + MovementLoopAddLocation(NPC, -588.84, 27.72, 33.22, 2, 0) + MovementLoopAddLocation(NPC, -596.21, 27.37, 41.73, 2, ranpause) + MovementLoopAddLocation(NPC, -616.07, 27.05, 48.21, 2, 0) + MovementLoopAddLocation(NPC, -622.31, 27.04, 51.81, 2, 0) + MovementLoopAddLocation(NPC, -626.66, 27.05, 56.75, 2, 0) + MovementLoopAddLocation(NPC, -628.53, 26.93, 62.82, 2, ranpause) + MovementLoopAddLocation(NPC, -627.81, 26.27, 69.33, 2, 0) + MovementLoopAddLocation(NPC, -626.05, 25.02, 73.16, 2, 0) + MovementLoopAddLocation(NPC, -621.1, 23.44, 80.02, 2, 0) + MovementLoopAddLocation(NPC, -615.2, 21.96, 85.74, 2, 0) + MovementLoopAddLocation(NPC, -611.49, 21.79, 86.67, 2, ranpause) + MovementLoopAddLocation(NPC, -608.25, 21.92, 86.39, 2, 0) + MovementLoopAddLocation(NPC, -601.81, 22.53, 84.96, 2, 0) + MovementLoopAddLocation(NPC, -592.17, 21.45, 85.28, 2, 0) + MovementLoopAddLocation(NPC, -587.27, 21.01, 87.67, 2, ranpause) + MovementLoopAddLocation(NPC, -584.73, 20.67, 92.57, 2, 0) + MovementLoopAddLocation(NPC, -584.64, 20.1, 97.55, 2, 0) + MovementLoopAddLocation(NPC, -585.41, 18.42, 110.12, 2, 0) + MovementLoopAddLocation(NPC, -584.97, 18.26, 114.33, 2, 0) + MovementLoopAddLocation(NPC, -585.77, 18.65, 118.75, 2, ranpause) + MovementLoopAddLocation(NPC, -586.27, 19.64, 130.91, 2, 0) + MovementLoopAddLocation(NPC, -585.88, 20.08, 132.92, 2, 0) + MovementLoopAddLocation(NPC, -586.06, 20.29, 136.76, 2, ranpause) + MovementLoopAddLocation(NPC, -585.88, 20.08, 132.92, 2, 0) + MovementLoopAddLocation(NPC, -586.27, 19.64, 130.91, 2, 0) + MovementLoopAddLocation(NPC, -585.77, 18.65, 118.75, 2, 0) + MovementLoopAddLocation(NPC, -584.97, 18.26, 114.33, 2, 0) + MovementLoopAddLocation(NPC, -585.41, 18.42, 110.12, 2, ranpause) + MovementLoopAddLocation(NPC, -584.64, 20.1, 97.55, 2, 0) + MovementLoopAddLocation(NPC, -584.73, 20.67, 92.57, 2, 0) + MovementLoopAddLocation(NPC, -587.27, 21.01, 87.67, 2, ranpause) + MovementLoopAddLocation(NPC, -592.17, 21.45, 85.28, 2, 0) + MovementLoopAddLocation(NPC, -601.81, 22.53, 84.96, 2, 0) + MovementLoopAddLocation(NPC, -608.25, 21.92, 86.39, 2, 0) + MovementLoopAddLocation(NPC, -611.49, 21.79, 86.67, 2, ranpause) + MovementLoopAddLocation(NPC, -615.2, 21.96, 85.74, 2, 0) + MovementLoopAddLocation(NPC, -621.1, 23.44, 80.02, 2, 0) + MovementLoopAddLocation(NPC, -626.05, 25.02, 73.16, 2, 0) + MovementLoopAddLocation(NPC, -627.81, 26.27, 69.33, 2, ranpause) + MovementLoopAddLocation(NPC, -628.53, 26.93, 62.82, 2, 0) + MovementLoopAddLocation(NPC, -626.66, 27.05, 56.75, 2, 0) + MovementLoopAddLocation(NPC, -622.31, 27.04, 51.81, 2, 0) + MovementLoopAddLocation(NPC, -616.07, 27.05, 48.21, 2, 0) + MovementLoopAddLocation(NPC, -596.21, 27.37, 41.73, 2, 0) + MovementLoopAddLocation(NPC, -588.84, 27.72, 33.22, 2, ranpause) +end + diff --git a/server/SpawnScripts/Neriak/DocksideMarketGuardA.lua b/server/SpawnScripts/Neriak/DocksideMarketGuardA.lua new file mode 100644 index 000000000..fa7a89920 --- /dev/null +++ b/server/SpawnScripts/Neriak/DocksideMarketGuardA.lua @@ -0,0 +1,69 @@ +--[[ + Script Name : SpawnScripts/Neriak/DocksideMarketGuardA.lua + Script Purpose : Waypoint Path for Dockside Market Guard A Spires to Indigo Hollow path + Script Author : Cynnar + Script Date : 5/20/2018 12:00:00 AM + Script Notes : +--]] + +function spawn(NPC) + SetMount(NPC, 7242) + SetMountColor(NPC, 65, 52, 44, 58, 59, 151) + waypoints(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) +end + +function respawn(NPC) +end + +function waypoints(NPC) + MovementLoopAddLocation(NPC, -78.02, 9.05, 293.06, 2, 0) + MovementLoopAddLocation(NPC, -81.24, 8.37, 298.21, 2, 0) + MovementLoopAddLocation(NPC, -82.74, 8.12, 299.87, 2, 0) + MovementLoopAddLocation(NPC, -84.4, 7.96, 301.49, 2, 0) + MovementLoopAddLocation(NPC, -87.89, 8.04, 301.09, 2, 0) + MovementLoopAddLocation(NPC, -94.29, 8.07, 300.26, 2, 0) + MovementLoopAddLocation(NPC, -100.81, 7.7, 299.93, 2, 0) + MovementLoopAddLocation(NPC, -105.37, 7.53, 297.03, 2, 0) + MovementLoopAddLocation(NPC, -107.67, 7.48, 294.44, 2, 0) + MovementLoopAddLocation(NPC, -109.8, 7.47, 291.08, 2, 0) + MovementLoopAddLocation(NPC, -111.14, 7.53, 286.49, 2, 0) + MovementLoopAddLocation(NPC, -111.6, 7.48, 283.09, 2, 0) + MovementLoopAddLocation(NPC, -112.41, 7.49, 273.54, 2, 0) + MovementLoopAddLocation(NPC, -114.46, 7.64, 269.93, 2, 0) + MovementLoopAddLocation(NPC, -118.77, 7.58, 267.13, 2, 0) + MovementLoopAddLocation(NPC, -124.56, 7.62, 265.87, 2, 0) + MovementLoopAddLocation(NPC, -130.35, 8.11, 263.9, 2, 0) + MovementLoopAddLocation(NPC, -146.45, 12.22, 267, 2, 0) + MovementLoopAddLocation(NPC, -149.24, 12.55, 266.35, 2, 0) + MovementLoopAddLocation(NPC, -153.17, 12.72, 264.43, 2, 0) + MovementLoopAddLocation(NPC, -158.32, 12.9, 260.13, 2, 0) + MovementLoopAddLocation(NPC, -161.35, 12.97, 256.96, 2, 0) + MovementLoopAddLocation(NPC, -163.86, 13, 255.3, 2, 0) + MovementLoopAddLocation(NPC, -161.35, 12.97, 256.96, 2, 0) + MovementLoopAddLocation(NPC, -158.32, 12.9, 260.13, 2, 0) + MovementLoopAddLocation(NPC, -153.17, 12.72, 264.43, 2, 0) + MovementLoopAddLocation(NPC, -149.24, 12.55, 266.35, 2, 0) + MovementLoopAddLocation(NPC, -146.45, 12.22, 267, 2, 0) + MovementLoopAddLocation(NPC, -130.35, 8.11, 263.9, 2, 0) + MovementLoopAddLocation(NPC, -124.56, 7.62, 265.87, 2, 0) + MovementLoopAddLocation(NPC, -118.77, 7.58, 267.13, 2, 0) + MovementLoopAddLocation(NPC, -114.46, 7.64, 269.93, 2, 0) + MovementLoopAddLocation(NPC, -112.41, 7.49, 273.54, 2, 0) + MovementLoopAddLocation(NPC, -111.6, 7.48, 283.09, 2, 0) + MovementLoopAddLocation(NPC, -111.14, 7.53, 286.49, 2, 0) + MovementLoopAddLocation(NPC, -109.8, 7.47, 291.08, 2, 0) + MovementLoopAddLocation(NPC, -107.67, 7.48, 294.44, 2, 0) + MovementLoopAddLocation(NPC, -105.37, 7.53, 297.03, 2, 0) + MovementLoopAddLocation(NPC, -100.81, 7.7, 299.93, 2, 0) + MovementLoopAddLocation(NPC, -94.29, 8.07, 300.26, 2, 0) + MovementLoopAddLocation(NPC, -87.89, 8.04, 301.09, 2, 0) + MovementLoopAddLocation(NPC, -84.4, 7.96, 301.49, 2, 0) + MovementLoopAddLocation(NPC, -82.74, 8.12, 299.87, 2, 0) + MovementLoopAddLocation(NPC, -81.24, 8.37, 298.21, 2, 0) + MovementLoopAddLocation(NPC, -78.02, 9.05, 293.06, 2, 0) + MovementLoopAddLocation(NPC, -73.56, 10.96, 280.13, 2, 0) +end diff --git a/server/SpawnScripts/Neriak/DocksideMarketGuardB.lua b/server/SpawnScripts/Neriak/DocksideMarketGuardB.lua new file mode 100644 index 000000000..dbfcb10b5 --- /dev/null +++ b/server/SpawnScripts/Neriak/DocksideMarketGuardB.lua @@ -0,0 +1,74 @@ +--[[ + Script Name : SpawnScripts/Neriak/DocksideMarketGuardB.lua + Script Purpose : Waypoint Path for Dockside Market Guard B Docks to Indigo Hollow path + Script Author : Cynnar + Script Date : 5/20/2018 12:00:00 AM + Script Notes : +--]] + +function spawn(NPC) + SetMount(NPC, 7242) + SetMountColor(NPC, 65, 52, 44, 58, 59, 151) + waypoints(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) +end + +function respawn(NPC) +end + +function waypoints(NPC) + MovementLoopAddLocation(NPC, 24.16, 3.75, 318.7, 2, 0) + MovementLoopAddLocation(NPC, -3.28, 6.38, 324.29, 2, 0) + MovementLoopAddLocation(NPC, -14.58, 6.54, 324.55, 2, 0) + MovementLoopAddLocation(NPC, -22.19, 6.84, 321.52, 2, 0) + MovementLoopAddLocation(NPC, -30.74, 6.89, 321.32, 2, 0) + MovementLoopAddLocation(NPC, -36.76, 6.92, 324.06, 2, 0) + MovementLoopAddLocation(NPC, -42.91, 6.97, 327.67, 2, 0) + MovementLoopAddLocation(NPC, -50.3, 6.93, 329.78, 2, 0) + MovementLoopAddLocation(NPC, -56.52, 7.01, 329.75, 2, 0) + MovementLoopAddLocation(NPC, -67.58, 6.91, 327.95, 2, 0) + MovementLoopAddLocation(NPC, -71.02, 7.03, 326.28, 2, 0) + MovementLoopAddLocation(NPC, -75.87, 7.09, 321.93, 2, 0) + MovementLoopAddLocation(NPC, -79.09, 7.42, 314.05, 2, 0) + MovementLoopAddLocation(NPC, -80.73, 7.9, 306.18, 2, 0) + MovementLoopAddLocation(NPC, -85.95, 7.99, 301.04, 2, 0) + MovementLoopAddLocation(NPC, -98.99, 7.81, 299.93, 2, 0) + MovementLoopAddLocation(NPC, -102.85, 7.63, 298.22, 2, 0) + MovementLoopAddLocation(NPC, -106.82, 7.48, 295.86, 2, 0) + MovementLoopAddLocation(NPC, -108.95, 7.45, 292.94, 2, 0) + MovementLoopAddLocation(NPC, -111.81, 7.49, 276.59, 2, 0) + MovementLoopAddLocation(NPC, -113.82, 7.59, 270.35, 2, 0) + MovementLoopAddLocation(NPC, -117.22, 7.59, 263.35, 2, 0) + MovementLoopAddLocation(NPC, -119.78, 7.45, 258.99, 2, 0) + MovementLoopAddLocation(NPC, -122.32, 7.37, 256.23, 2, 0) + MovementLoopAddLocation(NPC, -126.65, 7.2, 252.78, 2, 0) + MovementLoopAddLocation(NPC, -122.32, 7.37, 256.23, 2, 0) + MovementLoopAddLocation(NPC, -119.78, 7.45, 258.99, 2, 0) + MovementLoopAddLocation(NPC, -117.22, 7.59, 263.35, 2, 0) + MovementLoopAddLocation(NPC, -113.82, 7.59, 270.35, 2, 0) + MovementLoopAddLocation(NPC, -111.81, 7.49, 276.59, 2, 0) + MovementLoopAddLocation(NPC, -108.95, 7.45, 292.94, 2, 0) + MovementLoopAddLocation(NPC, -106.82, 7.48, 295.86, 2, 0) + MovementLoopAddLocation(NPC, -102.85, 7.63, 298.22, 2, 0) + MovementLoopAddLocation(NPC, -98.99, 7.81, 299.93, 2, 0) + MovementLoopAddLocation(NPC, -85.95, 7.99, 301.04, 2, 0) + MovementLoopAddLocation(NPC, -80.73, 7.9, 306.18, 2, 0) + MovementLoopAddLocation(NPC, -79.09, 7.42, 314.05, 2, 0) + MovementLoopAddLocation(NPC, -75.87, 7.09, 321.93, 2, 0) + MovementLoopAddLocation(NPC, -71.02, 7.03, 326.28, 2, 0) + MovementLoopAddLocation(NPC, -67.58, 6.91, 327.95, 2, 0) + MovementLoopAddLocation(NPC, -56.52, 7.01, 329.75, 2, 0) + MovementLoopAddLocation(NPC, -50.3, 6.93, 329.78, 2, 0) + MovementLoopAddLocation(NPC, -42.91, 6.97, 327.67, 2, 0) + MovementLoopAddLocation(NPC, -36.76, 6.92, 324.06, 2, 0) + MovementLoopAddLocation(NPC, -30.74, 6.89, 321.32, 2, 0) + MovementLoopAddLocation(NPC, -22.19, 6.84, 321.52, 2, 0) + MovementLoopAddLocation(NPC, -14.58, 6.54, 324.55, 2, 0) + MovementLoopAddLocation(NPC, -3.28, 6.38, 324.29, 2, 0) + MovementLoopAddLocation(NPC, 24.16, 3.75, 318.7, 2, 0) +end + + diff --git a/server/SpawnScripts/Neriak/DreadGuard1.lua b/server/SpawnScripts/Neriak/DreadGuard1.lua new file mode 100644 index 000000000..d953798e9 --- /dev/null +++ b/server/SpawnScripts/Neriak/DreadGuard1.lua @@ -0,0 +1,60 @@ +--[[ + Script Name : SpawnScripts/Neriak/DreadGuard1.lua + Script Purpose : Waypoint Path for Dread Guard 1 Indigo Hollow + Script Author : Cynnar + Script Date : 5/6/2018 12:00:00 AM + Script Notes : This is the Dread Guard starting at Ulsurus Outfitters Neriak Indigo Hollow. +--]] + +function spawn(NPC) + SetMount(NPC, 7242) + SetMountColor(NPC, 65, 52, 44, 58, 59, 151) + waypoints(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) +end + +function respawn(NPC) +end + +function randmount(NPC) + local choice = math.random(1, 2) + if choice == 1 then + + end +end + +function waypoints(NPC) + MovementLoopAddLocation(NPC, -76.72, 19.22, -13.5, 2, 0) + MovementLoopAddLocation(NPC, -66.55, 18.88, -4.41, 2, 0) + MovementLoopAddLocation(NPC, -58.37, 19.55, 9.24, 2, 0) + MovementLoopAddLocation(NPC, -54.28, 19.31, 22.95, 2, 0) + MovementLoopAddLocation(NPC, -44.18, 19.48, 21.32, 2, 0) + MovementLoopAddLocation(NPC, -35.54, 19.76, 16.93, 2, 0) + MovementLoopAddLocation(NPC, -26.87, 17.32, 9.09, 2, 0) + MovementLoopAddLocation(NPC, -19.17, 17.32, 10.39, 2, 0) + MovementLoopAddLocation(NPC, -9.98, 17.3, 11.96, 2, 0) + MovementLoopAddLocation(NPC, 7.91, 17.3, 2.53, 2, 0) + MovementLoopAddLocation(NPC, 19.27, 17.06, 6.88, 2, 0) + MovementLoopAddLocation(NPC, 33.87, 16.95, -5.79, 2, 0) + MovementLoopAddLocation(NPC, 23.44, 17.31, -27.85, 2, 0) + MovementLoopAddLocation(NPC, 20.61, 17.32, -38.41, 2, 0) + MovementLoopAddLocation(NPC, 11.11, 17.19, -44.76, 2, 0) + MovementLoopAddLocation(NPC, 9.99, 17.25, -60.91, 2, 0) + MovementLoopAddLocation(NPC, 11.11, 17.19, -44.76, 2, 0) + MovementLoopAddLocation(NPC, 20.61, 17.32, -38.41, 2, 0) + MovementLoopAddLocation(NPC, 23.44, 17.31, -27.85, 2, 0) + MovementLoopAddLocation(NPC, 33.87, 16.95, -5.79, 2, 0) + MovementLoopAddLocation(NPC, 19.27, 17.06, 6.88, 2, 0) + MovementLoopAddLocation(NPC, 7.91, 17.3, 2.53, 2, 0) + MovementLoopAddLocation(NPC, -9.98, 17.3, 11.96, 2, 0) + MovementLoopAddLocation(NPC, -19.17, 17.32, 10.39, 2, 0) + MovementLoopAddLocation(NPC, -26.87, 17.32, 9.09, 2, 0) + MovementLoopAddLocation(NPC, -35.54, 19.76, 16.93, 2, 0) + MovementLoopAddLocation(NPC, -44.18, 19.48, 21.32, 2, 0) + MovementLoopAddLocation(NPC, -54.28, 19.31, 22.95, 2, 0) + MovementLoopAddLocation(NPC, -58.37, 19.55, 9.24, 2, 0) + MovementLoopAddLocation(NPC, -66.55, 18.88, -4.41, 2, 0) +end diff --git a/server/SpawnScripts/Neriak/DreadGuardNewForeignQuarter.lua b/server/SpawnScripts/Neriak/DreadGuardNewForeignQuarter.lua new file mode 100644 index 000000000..625d62f30 --- /dev/null +++ b/server/SpawnScripts/Neriak/DreadGuardNewForeignQuarter.lua @@ -0,0 +1,7 @@ +--[[ + Script Name : DreadGuardNweForeignQuater.lua + Script Purpose : Waypoint Path for DreadGuardNweForeignQuater.lua + Script Author : Cynnar + Script Date : 5/14/2018 12:00:00 AM + Script Notes : +--]] \ No newline at end of file diff --git a/server/SpawnScripts/Neriak/DreadGuard_Warg_mount.lua b/server/SpawnScripts/Neriak/DreadGuard_Warg_mount.lua new file mode 100644 index 000000000..60301ebc3 --- /dev/null +++ b/server/SpawnScripts/Neriak/DreadGuard_Warg_mount.lua @@ -0,0 +1,22 @@ +--[[ + Script Name : SpawnScripts/Neriak/DreadGuard_Warg_mount.lua + Script Author : Cynnar + Script Date : 2018.05.26 09:05:30 + Script Purpose : + : +--]] + +function spawn(NPC) + SetMount(NPC, 7242) + SetMountColor(NPC, 65, 52, 44, 58, 59, 151) + +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) +end + +function respawn(NPC) + +end + diff --git a/server/SpawnScripts/Neriak/DreadGuard_nightmare_mount.lua b/server/SpawnScripts/Neriak/DreadGuard_nightmare_mount.lua new file mode 100644 index 000000000..0280e7702 --- /dev/null +++ b/server/SpawnScripts/Neriak/DreadGuard_nightmare_mount.lua @@ -0,0 +1,21 @@ +--[[ + Script Name : SpawnScripts/Neriak/DreadGuard_nightmare_mount.lua + Script Author : Cynnar + Script Date : 2018.05.13 01:05:07 + Script Purpose : + : +--]] + +function spawn(NPC) + SetMount(NPC, 7183) + SetMountColor(NPC, 69, 67, 80, 255, 255, 255) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) +end + +function respawn(NPC) + +end + diff --git a/server/SpawnScripts/Neriak/EthedraRVinival.lua b/server/SpawnScripts/Neriak/EthedraRVinival.lua new file mode 100644 index 000000000..46af8a9ad --- /dev/null +++ b/server/SpawnScripts/Neriak/EthedraRVinival.lua @@ -0,0 +1,76 @@ +--[[ + Script Name : SpawnScripts/Neriak/EthedraRVinival.lua + Script Purpose : Waypoint Path for Ethedra R'Vinival + Script Author : Cynnar + Script Date : 5/26/2018 12:00:00 AM + Script Notes : +--]] + +function spawn(NPC) + waypoints(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) +end + +function respawn(NPC) +end + +function waypoints(NPC) + + MovementLoopAddLocation(NPC, -169.53, 2.87, 249.19, 2, 5) + MovementLoopAddLocation(NPC, -168.29, 2.93, 249.71, 2, 0) + MovementLoopAddLocation(NPC, -160.96, 2.99, 248.38, 2, 0) + MovementLoopAddLocation(NPC, -155.38, 3.01, 250.31, 2, 0) + MovementLoopAddLocation(NPC, -156.15, 1.72, 253.91, 2, 0) + MovementLoopAddLocation(NPC, -161.63, -2.47, 258.25, 2, 0) + MovementLoopAddLocation(NPC, -167.13, -5.09, 259.4, 2, 0) + MovementLoopAddLocation(NPC, -168.32, -5.22, 259.23, 2, 0) + MovementLoopAddLocation(NPC, -168.06, -5.34, 249.61, 2, 5) + MovementLoopAddLocation(NPC, -167.42, -5.33, 250, 2, 0) + MovementLoopAddLocation(NPC, -168.49, -5.3, 253.58, 2, 0) + MovementLoopAddLocation(NPC, -171.09, -5.31, 254.45, 2, 0) + MovementLoopAddLocation(NPC, -178.18, -5.48, 247.71, 2, 0) + MovementLoopAddLocation(NPC, -182.72, -4.78, 244.67, 2, 0) + MovementLoopAddLocation(NPC, -184.9, -4.13, 241.09, 2, 0) + MovementLoopAddLocation(NPC, -187.49, -3.98, 240.23, 2, 0) + MovementLoopAddLocation(NPC, -191, -3.87, 239.66, 2, 0) + MovementLoopAddLocation(NPC, -190.75, -3.87, 236.65, 2, 5) + MovementLoopAddLocation(NPC, -189.71, -3.87, 238.11, 2, 0) + MovementLoopAddLocation(NPC, -192.18, -3.93, 236.81, 2, 0) + MovementLoopAddLocation(NPC, -195.32, -3.95, 235.59, 2, 0) + MovementLoopAddLocation(NPC, -202.36, -3.9, 235.92, 2, 0) + MovementLoopAddLocation(NPC, -202.64, -3.91, 236, 2, 0) + MovementLoopAddLocation(NPC, -197.24, -3.97, 242, 2, 5) + MovementLoopAddLocation(NPC, -202.59, -3.91, 235.95, 2, 0) + MovementLoopAddLocation(NPC, -191.99, -3.92, 236.66, 2, 0) + MovementLoopAddLocation(NPC, -190.92, -3.87, 237.41, 2, 0) + MovementLoopAddLocation(NPC, -190.86, -3.87, 236.59, 2, 0) + MovementLoopAddLocation(NPC, -191.39, -3.87, 238.4, 2, 0) + MovementLoopAddLocation(NPC, -185.13, -4.11, 241.22, 2, 0) + MovementLoopAddLocation(NPC, -181.1, -5.25, 245.72, 2, 0) + MovementLoopAddLocation(NPC, -179.12, -5.39, 247.29, 2, 0) + MovementLoopAddLocation(NPC, -175.5, -5.37, 250.46, 2, 0) + MovementLoopAddLocation(NPC, -170.9, -5.31, 254.31, 2, 0) + MovementLoopAddLocation(NPC, -168.76, -5.32, 252.41, 2, 0) + MovementLoopAddLocation(NPC, -168.3, -5.35, 249.47, 2, 5) + MovementLoopAddLocation(NPC, -167.04, -5.32, 251.05, 2, 0) + MovementLoopAddLocation(NPC, -167.98, -5.29, 254.2, 2, 0) + MovementLoopAddLocation(NPC, -168.35, -5.23, 258.58, 2, 0) + MovementLoopAddLocation(NPC, -166.79, -4.96, 259.51, 2, 0) + MovementLoopAddLocation(NPC, -162.31, -2.99, 259.13, 2, 0) + MovementLoopAddLocation(NPC, -159.67, -1.59, 257.66, 2, 0) + MovementLoopAddLocation(NPC, -156.66, 0.89, 254.98, 2, 0) + MovementLoopAddLocation(NPC, -155.32, 2.34, 253.15, 2, 0) + MovementLoopAddLocation(NPC, -155.69, 2.91, 251.21, 2, 0) + MovementLoopAddLocation(NPC, -156.64, 3.07, 250.16, 2, 0) + MovementLoopAddLocation(NPC, -159.16, 3.03, 249.46, 2, 0) + MovementLoopAddLocation(NPC, -161.3, 3, 249.72, 2, 0) + MovementLoopAddLocation(NPC, -163.2, 2.97, 251.02, 2, 0) + MovementLoopAddLocation(NPC, -166.04, 3.02, 251.79, 2, 0) + MovementLoopAddLocation(NPC, -167.87, 2.96, 251.59, 2, 0) + MovementLoopAddLocation(NPC, -169.09, 2.89, 250.24, 2, 0) +end + + diff --git a/server/SpawnScripts/Neriak/MKaiNFaer.lua b/server/SpawnScripts/Neriak/MKaiNFaer.lua new file mode 100644 index 000000000..709c0f444 --- /dev/null +++ b/server/SpawnScripts/Neriak/MKaiNFaer.lua @@ -0,0 +1,40 @@ +--[[ + Script Name : SpawnScripts/Neriak/MKaiNFaer.lua + Script Purpose : Waypoint Path for M'Kai N'Faer + Script Author : Cynnar + Script Date : 5/14/2018 12:00:00 AM + Script Notes : +--]] + +function spawn(NPC) + waypoints(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) +end + +function respawn(NPC) +end + +function waypoints(NPC) + MovementLoopAddLocation(NPC, 26.89, 15.53, 48.74, 2, 0) + MovementLoopAddLocation(NPC, 29.5, 14.17, 60.28, 2, 0) + MovementLoopAddLocation(NPC, 27.26, 12.15, 77.39, 2, 0) + MovementLoopAddLocation(NPC, 19.7, 11.52, 82.9, 2, 0) + MovementLoopAddLocation(NPC, 6.16, 12.37, 84.59, 2, 0) + MovementLoopAddLocation(NPC, -23.73, 11.56, 78.22, 2, 0) + MovementLoopAddLocation(NPC, -33.12, 12.33, 92.08, 2, 0) + MovementLoopAddLocation(NPC, -64.81, 11.38, 138.06, 2, 0) + MovementLoopAddLocation(NPC, -71.01, 11.74, 158.02, 2, 0) + MovementLoopAddLocation(NPC, -71.1, 11.41, 275.09, 2, 0) + MovementLoopAddLocation(NPC, -71.01, 11.74, 158.02, 2, 0) + MovementLoopAddLocation(NPC, -64.81, 11.38, 138.06, 2, 0) + MovementLoopAddLocation(NPC, -33.12, 12.33, 92.08, 2, 0) + MovementLoopAddLocation(NPC, -23.73, 11.56, 78.22, 2, 0) + MovementLoopAddLocation(NPC, 6.16, 12.37, 84.59, 2, 0) + MovementLoopAddLocation(NPC, 19.7, 11.52, 82.9, 2, 0) + MovementLoopAddLocation(NPC, 27.26, 12.15, 77.39, 2, 0) + MovementLoopAddLocation(NPC, 29.5, 14.17, 60.28, 2, 0) +end + diff --git a/server/SpawnScripts/Neriak/NewForeignQuaterGuard.lua b/server/SpawnScripts/Neriak/NewForeignQuaterGuard.lua new file mode 100644 index 000000000..81ab0ad12 --- /dev/null +++ b/server/SpawnScripts/Neriak/NewForeignQuaterGuard.lua @@ -0,0 +1,65 @@ +--[[ + Script Name : SpawnScripts/Neriak/NewForeignQuaterGuard.lua + Script Purpose : Waypoint Path for New Foreign Quater Guard + Script Author : Cynnar + Script Date : 5/14/2018 12:00:00 AM + Script Notes : +--]] + +function spawn(NPC) + SetMount(NPC, 7242) + SetMountColor(NPC, 65, 52, 44, 58, 59, 151) + waypoints(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) +end + +function respawn(NPC) +end + +function waypoints(NPC) + MovementLoopAddLocation(NPC, 118.87, 24.08, 158.84, 2, 0) + MovementLoopAddLocation(NPC, 115.19, 24.15, 159.04, 2, 0) + MovementLoopAddLocation(NPC, 103.03, 23.81, 153.4, 2, 0) + MovementLoopAddLocation(NPC, 100.66, 23.72, 148.5, 2, 0) + MovementLoopAddLocation(NPC, 100.85, 23.39, 144.32, 2, 0) + MovementLoopAddLocation(NPC, 101.87, 22.1, 136.97, 2, 0) + MovementLoopAddLocation(NPC, 103.94, 21.84, 132.45, 2, 0) + MovementLoopAddLocation(NPC, 107.79, 21.84, 128.72, 2, 0) + MovementLoopAddLocation(NPC, 109.07, 21.78, 124.67, 2, 0) + MovementLoopAddLocation(NPC, 108.04, 21.57, 118.39, 2, 0) + MovementLoopAddLocation(NPC, 104.63, 21.7, 115.35, 2, 0) + MovementLoopAddLocation(NPC, 98.69, 21.72, 110.94, 2, 0) + MovementLoopAddLocation(NPC, 97.92, 21.75, 106.18, 2, 0) + MovementLoopAddLocation(NPC, 98.32, 21.73, 102.39, 2, 0) + MovementLoopAddLocation(NPC, 99.2, 21.74, 97, 2, 0) + MovementLoopAddLocation(NPC, 97.97, 21.7, 94.51, 2, 0) + MovementLoopAddLocation(NPC, 95.42, 21.7, 91.79, 2, 0) + MovementLoopAddLocation(NPC, 91.87, 21.7, 88.91, 2, 0) + MovementLoopAddLocation(NPC, 90.82, 21.7, 84.19, 2, 0) + MovementLoopAddLocation(NPC, 91.39, 21.7, 81.53, 2, 0) + MovementLoopAddLocation(NPC, 94.53, 21.7, 76.52, 2, 0) + MovementLoopAddLocation(NPC, 97.97, 21.7, 72.06, 2, 0) + MovementLoopAddLocation(NPC, 94.53, 21.7, 76.52, 2, 0) + MovementLoopAddLocation(NPC, 91.39, 21.7, 81.53, 2, 0) + MovementLoopAddLocation(NPC, 90.82, 21.7, 84.19, 2, 0) + MovementLoopAddLocation(NPC, 91.87, 21.7, 88.91, 2, 0) + MovementLoopAddLocation(NPC, 95.42, 21.7, 91.79, 2, 0) + MovementLoopAddLocation(NPC, 97.97, 21.7, 94.51, 2, 0) + MovementLoopAddLocation(NPC, 99.2, 21.74, 97, 2, 0) + MovementLoopAddLocation(NPC, 98.32, 21.73, 102.39, 2, 0) + MovementLoopAddLocation(NPC, 97.92, 21.75, 106.18, 2, 0) + MovementLoopAddLocation(NPC, 98.69, 21.72, 110.94, 2, 0) + MovementLoopAddLocation(NPC, 104.63, 21.7, 115.35, 2, 0) + MovementLoopAddLocation(NPC, 108.04, 21.57, 118.39, 2, 0) + MovementLoopAddLocation(NPC, 109.07, 21.78, 124.67, 2, 0) + MovementLoopAddLocation(NPC, 107.79, 21.84, 128.72, 2, 0) + MovementLoopAddLocation(NPC, 103.94, 21.84, 132.45, 2, 0) + MovementLoopAddLocation(NPC, 101.87, 22.1, 136.97, 2, 0) + MovementLoopAddLocation(NPC, 100.85, 23.39, 144.32, 2, 0) + MovementLoopAddLocation(NPC, 100.66, 23.72, 148.5, 2, 0) + MovementLoopAddLocation(NPC, 103.03, 23.81, 153.4, 2, 0) + MovementLoopAddLocation(NPC, 115.19, 24.15, 159.04, 2, 0) +end diff --git a/server/SpawnScripts/Neriak/PhyravinDVaar.lua b/server/SpawnScripts/Neriak/PhyravinDVaar.lua new file mode 100644 index 000000000..234dac207 --- /dev/null +++ b/server/SpawnScripts/Neriak/PhyravinDVaar.lua @@ -0,0 +1,50 @@ +--[[ + Script Name : SpawnScripts/Neriak/PhyravinDVaar.lua + Script Purpose : Waypoint Path for Phyravin D'Vaar + Script Author : Cynnar + Script Date : 5/26/2018 12:00:00 AM + Script Notes : +--]] + +function spawn(NPC) + waypoints(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) +end + +function respawn(NPC) +end + +function waypoints(NPC) + MovementLoopAddLocation(NPC, -191.72, -3.98, 251.26, 2, 5) + MovementLoopAddLocation(NPC, -192.87, -3.98, 251.58, 2, 0) + MovementLoopAddLocation(NPC, -193.45, -3.98, 251.46, 2, 0) + MovementLoopAddLocation(NPC, -203.03, -3.89, 249.9, 2, 0) + MovementLoopAddLocation(NPC, -203.35, -3.86, 247.97, 2, 0) + MovementLoopAddLocation(NPC, -203.37, -3.89, 246.24, 2, 0) + MovementLoopAddLocation(NPC, -201.64, -3.89, 245.04, 2, 5) + MovementLoopAddLocation(NPC, -203.03, -3.9, 245.15, 2, 0) + MovementLoopAddLocation(NPC, -199.55, -3.92, 235.24, 2, 0) + MovementLoopAddLocation(NPC, -194.76, -3.98, 238.22, 2, 0) + MovementLoopAddLocation(NPC, -194.17, -3.79, 242.65, 2, 5) + MovementLoopAddLocation(NPC, -194.6, -3.98, 238.42, 2, 0) + MovementLoopAddLocation(NPC, -199.78, -3.89, 235.92, 2, 0) + MovementLoopAddLocation(NPC, -202.46, -3.9, 243.69, 2, 5) + MovementLoopAddLocation(NPC, -201.28, -3.89, 244.93, 2, 0) + MovementLoopAddLocation(NPC, -203.01, -3.9, 245.56, 2, 0) + MovementLoopAddLocation(NPC, -204.45, -3.86, 248.66, 2, 0) + MovementLoopAddLocation(NPC, -193.37, -3.98, 252.22, 2, 5) + MovementLoopAddLocation(NPC, -191.18, -3.98, 255.21, 2, 0) + MovementLoopAddLocation(NPC, -188.73, -3.97, 258.22, 2, 0) + MovementLoopAddLocation(NPC, -187.84, -3.98, 260.26, 2, 0) + MovementLoopAddLocation(NPC, -184.67, -3.95, 268.33, 2, 0) + MovementLoopAddLocation(NPC, -183.27, -3.87, 270.66, 2, 0) + MovementLoopAddLocation(NPC, -182.08, -4.05, 272.47, 2, 0) + MovementLoopAddLocation(NPC, -181.78, -3.98, 276.23, 2, 0) + MovementLoopAddLocation(NPC, -180.4, -4.1, 273.39, 2, 0) + MovementLoopAddLocation(NPC, -180.12, -3.96, 269.83, 2, 0) + MovementLoopAddLocation(NPC, -181.12, -3.92, 267.87, 2, 0) + MovementLoopAddLocation(NPC, -191.69, -3.98, 251.27, 2, 0) +end diff --git a/server/SpawnScripts/Neriak/RaksharBucha.lua b/server/SpawnScripts/Neriak/RaksharBucha.lua new file mode 100644 index 000000000..f14e9c90b --- /dev/null +++ b/server/SpawnScripts/Neriak/RaksharBucha.lua @@ -0,0 +1,48 @@ +--[[ + Script Name : SpawnScripts/Neriak/RaksharBucha.lua + Script Purpose : Waypoint Path for Rakshar Bucha + Script Author : Cynnar + Script Date : 5/14/2018 12:00:00 AM + Script Notes : +--]] + +function spawn(NPC) + waypoints(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) +end + +function respawn(NPC) +end + +function waypoints(NPC) + MovementLoopAddLocation(NPC, -91.48, 19.72, 4.78, 2, 5) + MovementLoopAddLocation(NPC, -85.93, 19.72, -2.91, 2, 0) + MovementLoopAddLocation(NPC, -85.3, 19.72, -6.1, 2, 5) + MovementLoopAddLocation(NPC, -79.93, 19.52, -15.74, 2, 0) + MovementLoopAddLocation(NPC, -83.8, 20.38, -17.12, 2, 5) + MovementLoopAddLocation(NPC, -88.2, 21.7, -18.32, 2, 0) + MovementLoopAddLocation(NPC, -88.61, 21.68, -15.42, 2, 0) + MovementLoopAddLocation(NPC, -86.84, 21.66, -11.08, 2, 0) + MovementLoopAddLocation(NPC, -88.68, 21.31, -7, 2, 0) + MovementLoopAddLocation(NPC, -88.31, 21.78, -4.25, 2, 5) + MovementLoopAddLocation(NPC, -90.07, 22.07, -2.38, 2, 0) + MovementLoopAddLocation(NPC, -94.96, 22.03, -2.08, 2, 0) + MovementLoopAddLocation(NPC, -96.2, 22.04, -0.39, 2, 5) + MovementLoopAddLocation(NPC, -94.96, 22.03, -2.08, 2, 0) + MovementLoopAddLocation(NPC, -90.07, 22.07, -2.38, 2, 0) + MovementLoopAddLocation(NPC, -88.31, 21.78, -4.25, 2, 0) + MovementLoopAddLocation(NPC, -88.68, 21.31, -7, 2, 0) + MovementLoopAddLocation(NPC, -86.84, 21.66, -11.08, 2, 5) + MovementLoopAddLocation(NPC, -88.61, 21.68, -15.42, 2, 0) + MovementLoopAddLocation(NPC, -88.2, 21.7, -18.32, 2, 0) + MovementLoopAddLocation(NPC, -83.8, 20.38, -17.12, 2, 0) + MovementLoopAddLocation(NPC, -79.93, 19.52, -15.74, 2, 5) + MovementLoopAddLocation(NPC, -85.3, 19.72, -6.1, 2, 0) + MovementLoopAddLocation(NPC, -85.93, 19.72, -2.91, 2, 5) + MovementLoopAddLocation(NPC, -77.56, 19.21, -10.67, 2, 5) +end + + diff --git a/server/SpawnScripts/Neriak/SDreadGuard2.lua b/server/SpawnScripts/Neriak/SDreadGuard2.lua new file mode 100644 index 000000000..a82f67dc0 --- /dev/null +++ b/server/SpawnScripts/Neriak/SDreadGuard2.lua @@ -0,0 +1,42 @@ +--[[ + Script Name : SpawnScripts/Neriak/SDreadGuard2.lua + Script Purpose : Waypoint Path for Dread Guard 2 Indigo Hollow + Script Author : Cynnar + Script Date : 5/7/2018 12:00:00 AM + Script Notes : This is the Dread Guard starting at New Foreign Quarter Neriak Indigo Hollow. +--]] + +function spawn(NPC) + SetMount(NPC, 7242) + SetMountColor(NPC, 65, 52, 44, 58, 59, 151) + waypoints(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) +end + +function respawn(NPC) +end + +function randmount(NPC) + local choice = math.random(1, 2) + if choice == 1 then + SetMount(NPC, 24936) + SetMountColor(NPC, 255, 255, 255, 255, 255, 255) + end +end + +function waypoints(NPC) + MovementLoopAddLocation(NPC, 80.68, 17.42, 11.01, 2, 0) + MovementLoopAddLocation(NPC, 60.86, 16.96, 7.3, 2, 0) + MovementLoopAddLocation(NPC, 55.95, 17.22, 4.69, 2, 0) + MovementLoopAddLocation(NPC, 32.11, 17.02, -5.75, 2, 0) + MovementLoopAddLocation(NPC, 19.47, 17.01, 9.67, 2, 0) + MovementLoopAddLocation(NPC, 24.35, 16.31, 32.83, 2, 0) + MovementLoopAddLocation(NPC, 19.47, 17.01, 9.67, 2, 0) + MovementLoopAddLocation(NPC, 32.11, 17.02, -5.75, 2, 0) + MovementLoopAddLocation(NPC, 55.95, 17.22, 4.69, 2, 0) + MovementLoopAddLocation(NPC, 60.86, 16.96, 7.3, 2, 0) +end + diff --git a/server/SpawnScripts/Neriak/TTraeneXXxtar.lua b/server/SpawnScripts/Neriak/TTraeneXXxtar.lua new file mode 100644 index 000000000..5a65404a5 --- /dev/null +++ b/server/SpawnScripts/Neriak/TTraeneXXxtar.lua @@ -0,0 +1,73 @@ +--[[ + Script Name : SpawnScripts/Neriak/TTraeneXXxtar.lua + Script Purpose : Waypoint Path for T'Traene X'Xxtar + Script Author : Cynnar + Script Date : 5/27/2018 12:00:00 AM + Script Notes : +--]] + +function spawn(NPC) + waypoints(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) +end + +function respawn(NPC) +end + +function waypoints(NPC) + MovementLoopAddLocation(NPC, -588.20, 27.79, 31.42, 2, 0) + MovementLoopAddLocation(NPC, -596.21, 27.37, 41.73, 2, 0) + MovementLoopAddLocation(NPC, -597.2, 27.37, 42.43, 2, 0) + MovementLoopAddLocation(NPC, -609.81, 26.88, 46.76, 2, 0) + MovementLoopAddLocation(NPC, -617.56, 27.07, 48.53, 2, 0) + MovementLoopAddLocation(NPC, -623.43, 27.09, 51.9, 2, 0) + MovementLoopAddLocation(NPC, -626.53, 27.02, 57.6, 2, 0) + MovementLoopAddLocation(NPC, -628.94, 26.91, 63.36, 2, 0) + MovementLoopAddLocation(NPC, -628.91, 26.5, 68.19, 2, 0) + MovementLoopAddLocation(NPC, -626.27, 24.81, 73.79, 2, 0) + MovementLoopAddLocation(NPC, -622.23, 23.41, 78.73, 2, 0) + MovementLoopAddLocation(NPC, -615.02, 21.97, 85.66, 2, 0) + MovementLoopAddLocation(NPC, -611.73, 21.8, 86.58, 2, 0) + MovementLoopAddLocation(NPC, -607.35, 21.99, 86.46, 2, 0) + MovementLoopAddLocation(NPC, -603.23, 22.47, 84.87, 2, 0) + MovementLoopAddLocation(NPC, -591.62, 21.35, 85.68, 2, 0) + MovementLoopAddLocation(NPC, -587.85, 21.03, 87.34, 2, 0) + MovementLoopAddLocation(NPC, -584.84, 20.81, 90.41, 2, 0) + MovementLoopAddLocation(NPC, -584.04, 20.56, 94.21, 2, 0) + MovementLoopAddLocation(NPC, -585.42, 18.4, 110.7, 2, 0) + MovementLoopAddLocation(NPC, -584.57, 18.26, 114.39, 2, 0) + MovementLoopAddLocation(NPC, -585.56, 18.55, 118.01, 2, 0) + MovementLoopAddLocation(NPC, -585.85, 19.12, 123.07, 2, 0) + MovementLoopAddLocation(NPC, -586.48, 19.5, 130.38, 2, 0) + MovementLoopAddLocation(NPC, -585.81, 20.14, 133.59, 2, 0) + MovementLoopAddLocation(NPC, -589.61, 20.94, 140.6, 2, 0) + MovementLoopAddLocation(NPC, -585.81, 20.14, 133.59, 2, 0) + MovementLoopAddLocation(NPC, -586.48, 19.5, 130.38, 2, 0) + MovementLoopAddLocation(NPC, -585.85, 19.12, 123.07, 2, 0) + MovementLoopAddLocation(NPC, -585.56, 18.55, 118.01, 2, 0) + MovementLoopAddLocation(NPC, -584.57, 18.26, 114.39, 2, 0) + MovementLoopAddLocation(NPC, -585.42, 18.4, 110.7, 2, 0) + MovementLoopAddLocation(NPC, -584.04, 20.56, 94.21, 2, 0) + MovementLoopAddLocation(NPC, -584.84, 20.81, 90.41, 2, 0) + MovementLoopAddLocation(NPC, -587.85, 21.03, 87.34, 2, 0) + MovementLoopAddLocation(NPC, -591.62, 21.35, 85.68, 2, 0) + MovementLoopAddLocation(NPC, -603.23, 22.47, 84.87, 2, 0) + MovementLoopAddLocation(NPC, -607.35, 21.99, 86.46, 2, 0) + MovementLoopAddLocation(NPC, -611.73, 21.8, 86.58, 2, 0) + MovementLoopAddLocation(NPC, -615.02, 21.97, 85.66, 2, 0) + MovementLoopAddLocation(NPC, -622.23, 23.41, 78.73, 2, 0) + MovementLoopAddLocation(NPC, -626.27, 24.81, 73.79, 2, 0) + MovementLoopAddLocation(NPC, -628.91, 26.5, 68.19, 2, 0) + MovementLoopAddLocation(NPC, -628.94, 26.91, 63.36, 2, 0) + MovementLoopAddLocation(NPC, -626.53, 27.02, 57.6, 2, 0) + MovementLoopAddLocation(NPC, -623.43, 27.09, 51.9, 2, 0) + MovementLoopAddLocation(NPC, -617.56, 27.07, 48.53, 2, 0) + MovementLoopAddLocation(NPC, -609.81, 26.88, 46.76, 2, 0) + MovementLoopAddLocation(NPC, -597.2, 27.37, 42.43, 2, 0) + MovementLoopAddLocation(NPC, -596.21, 27.37, 41.73, 2, 0) + MovementLoopAddLocation(NPC, -588.20, 27.79, 31.42, 2, 0) +end + diff --git a/server/SpawnScripts/Neriak/Ultra.lua b/server/SpawnScripts/Neriak/Ultra.lua new file mode 100644 index 000000000..06c5aa2b1 --- /dev/null +++ b/server/SpawnScripts/Neriak/Ultra.lua @@ -0,0 +1,73 @@ +--[[ + Script Name : SpawnScripts/Neriak/Ultra.lua + Script Purpose : Waypoint Path for Ultra + Script Author : Cynnar + Script Date : 5/14/2018 12:00:00 AM + Script Notes : +--]] + +function spawn(NPC) + waypoints(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) +end + +function respawn(NPC) +end + +function waypoints(NPC) + ranpause = math.random(0, 5) + + MovementLoopAddLocation(NPC, 23.45, 12.23, 76.7, 2, 0) + MovementLoopAddLocation(NPC, 20.26, 11.83, 80.91, 2, 0) + MovementLoopAddLocation(NPC, 16.38, 11.3, 81.25, 2, 0) + MovementLoopAddLocation(NPC, 7.22, 12.7, 81.75, 2, ranpause) + MovementLoopAddLocation(NPC, -0.56, 11.69, 79.6, 2, 0) + MovementLoopAddLocation(NPC, -11.78, 11.29, 77.71, 2, 0) + MovementLoopAddLocation(NPC, -22.61, 11.5, 73.99, 2, 0) + MovementLoopAddLocation(NPC, -35.41, 12.49, 90.55, 2, ranpause) + MovementLoopAddLocation(NPC, -40.87, 12.13, 97.98, 2, 0) + MovementLoopAddLocation(NPC, -41.03, 11.95, 110.39, 2, 0) + MovementLoopAddLocation(NPC, -47.99, 11.84, 112.17, 2, 0) + MovementLoopAddLocation(NPC, -52.15, 11.72, 117.36, 2, ranpause) + MovementLoopAddLocation(NPC, -53.28, 11.58, 126.31, 2, 0) + MovementLoopAddLocation(NPC, -63.31, 11.37, 137.8, 2, ranpause) + MovementLoopAddLocation(NPC, -67.02, 11.8, 162.33, 2, 0) + MovementLoopAddLocation(NPC, -69.51, 11.72, 172.74, 2, 0) + MovementLoopAddLocation(NPC, -76.3, 11.72, 186.64, 2, 0) + MovementLoopAddLocation(NPC, -66.86, 11.72, 199.31, 2, ranpause) + MovementLoopAddLocation(NPC, -69.13, 11.72, 204.01, 2, 0) + MovementLoopAddLocation(NPC, -69.6, 11.72, 211.01, 2, 0) + MovementLoopAddLocation(NPC, -73.95, 11.72, 214.67, 2, 0) + MovementLoopAddLocation(NPC, -74.56, 11.72, 221.48, 2, 0) + MovementLoopAddLocation(NPC, -68.27, 11.72, 238.99, 2, 0) + MovementLoopAddLocation(NPC, -66.53, 11.72, 244.13, 2, 0) + MovementLoopAddLocation(NPC, -71.22, 11.72, 262.8, 2, ranpause) + MovementLoopAddLocation(NPC, -76.99, 11.72, 247.16, 2, 0) + MovementLoopAddLocation(NPC, -77.28, 11.72, 229.13, 2, 0) + MovementLoopAddLocation(NPC, -66.43, 11.72, 224.15, 2, 0) + MovementLoopAddLocation(NPC, -70.96, 11.72, 212.55, 2, 0) + MovementLoopAddLocation(NPC, -72.21, 11.72, 195.16, 2, 0) + MovementLoopAddLocation(NPC, -66.2, 11.72, 192.25, 2, 0) + MovementLoopAddLocation(NPC, -76.73, 11.72, 180.5, 2, 0) + MovementLoopAddLocation(NPC, -76.46, 11.72, 163.66, 2, ranpause) + MovementLoopAddLocation(NPC, -67.82, 11.38, 136.76, 2, 0) + MovementLoopAddLocation(NPC, -54.99, 11.66, 119.46, 2, ranpause) + MovementLoopAddLocation(NPC, -35.85, 12.14, 101.02, 2, 0) + MovementLoopAddLocation(NPC, -36.44, 12.48, 90.46, 2, ranpause) + MovementLoopAddLocation(NPC, -16.5, 11.26, 81.01, 2, 0) + MovementLoopAddLocation(NPC, -5.69, 11.24, 84.94, 2, 0) + MovementLoopAddLocation(NPC, 3.72, 12.42, 87.21, 2, ranpause) + MovementLoopAddLocation(NPC, 13.59, 11.49, 86.42, 2, 0) + MovementLoopAddLocation(NPC, 24.97, 12.06, 83.18, 2, 0) + MovementLoopAddLocation(NPC, 29.09, 12.25, 75.68, 2, 0) + MovementLoopAddLocation(NPC, 28.37, 13.43, 66.98, 2, 4) + MovementLoopAddLocation(NPC, 30.13, 15.42, 49.57, 2, 0) + MovementLoopAddLocation(NPC, 30.09, 16.22, 44.1, 2, 0) + MovementLoopAddLocation(NPC, 24.04, 15.18, 51.67, 2, 0) + MovementLoopAddLocation(NPC, 28.12, 13.82, 63.34, 2, ranpause) + MovementLoopAddLocation(NPC, 28.75, 13.48, 67.85, 2, 0) +end + diff --git a/server/SpawnScripts/Neriak/acourtesan1.lua b/server/SpawnScripts/Neriak/acourtesan1.lua new file mode 100644 index 000000000..7deb61d5e --- /dev/null +++ b/server/SpawnScripts/Neriak/acourtesan1.lua @@ -0,0 +1,42 @@ +--[[ + Script Name : SpawnScripts/Neriak/acourtesan1.lua + Script Purpose : Waypoint Path for a courtesan Neriak Underground Entrance Right + Script Author : Cynnar + Script Date : 5/26/2018 12:00:00 AM + Script Notes : +--]] + +function spawn(NPC) + waypoints(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) +end + +function respawn(NPC) +end + +function waypoints(NPC) + MovementLoopAddLocation(NPC, -108.44, 7.44, 303.36, 2, 0) + MovementLoopAddLocation(NPC, -111.22, 7.53, 308.67, 2, 0) + MovementLoopAddLocation(NPC, -113.68, 7.63, 313.21, 2, 0) + MovementLoopAddLocation(NPC, -116.4, 7.53, 315.43, 2, 0) + MovementLoopAddLocation(NPC, -121.05, 7.98, 313.64, 2, 0) + MovementLoopAddLocation(NPC, -126.46, 8.14, 314.4, 2, 0) + MovementLoopAddLocation(NPC, -132.14, 8.11, 318.48, 2, 0) + MovementLoopAddLocation(NPC, -135.36, 7.81, 322.87, 2, 0) + MovementLoopAddLocation(NPC, -141.83, 7.8, 325.35, 2, 0) + MovementLoopAddLocation(NPC, -152.51, 7.85, 323.29, 2, 0) + MovementLoopAddLocation(NPC, -159.26, 8.38, 320.96, 2, 0) + MovementLoopAddLocation(NPC, -152.51, 7.85, 323.29, 2, 0) + MovementLoopAddLocation(NPC, -141.83, 7.8, 325.35, 2, 0) + MovementLoopAddLocation(NPC, -135.36, 7.81, 322.87, 2, 0) + MovementLoopAddLocation(NPC, -132.14, 8.11, 318.48, 2, 0) + MovementLoopAddLocation(NPC, -126.46, 8.14, 314.4, 2, 0) + MovementLoopAddLocation(NPC, -121.05, 7.98, 313.64, 2, 0) + MovementLoopAddLocation(NPC, -116.4, 7.53, 315.43, 2, 0) + MovementLoopAddLocation(NPC, -113.68, 7.63, 313.21, 2, 0) + MovementLoopAddLocation(NPC, -111.22, 7.53, 308.67, 2, 0) + MovementLoopAddLocation(NPC, -108.44, 7.44, 303.36, 2, 0) +end \ No newline at end of file diff --git a/server/SpawnScripts/Neriak/acourtesan2.lua b/server/SpawnScripts/Neriak/acourtesan2.lua new file mode 100644 index 000000000..43340335c --- /dev/null +++ b/server/SpawnScripts/Neriak/acourtesan2.lua @@ -0,0 +1,86 @@ +--[[ + Script Name : SpawnScripts/Neriak/acourtesan2.lua + Script Purpose : Waypoint Path for a courtesan Neriak Downunder + Script Author : Cynnar + Script Date : 5/26/2018 12:00:00 AM + Script Notes : +--]] + +function spawn(NPC) + waypoints(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) +end + +function respawn(NPC) +end + +function waypoints(NPC) + MovementLoopAddLocation(NPC, -175.03, -5.36, 252.11, 2, 0) + MovementLoopAddLocation(NPC, -178.94, -5.42, 247.04, 2, 0) + MovementLoopAddLocation(NPC, -180.2, -5.34, 246.76, 2, 0) + MovementLoopAddLocation(NPC, -180.7, -5.31, 246.06, 2, 0) + MovementLoopAddLocation(NPC, -182.28, -4.92, 244.93, 2, 0) + MovementLoopAddLocation(NPC, -183.59, -4.39, 242.97, 2, 0) + MovementLoopAddLocation(NPC, -184.99, -4.1, 240.88, 2, 0) + MovementLoopAddLocation(NPC, -188.23, -3.96, 240.15, 2, 0) + MovementLoopAddLocation(NPC, -191, -3.89, 240.26, 2, 0) + MovementLoopAddLocation(NPC, -193.77, -3.93, 239.14, 2, 0) + MovementLoopAddLocation(NPC, -197.11, -3.95, 238.54, 2, 0) + MovementLoopAddLocation(NPC, -199.89, -3.9, 239.27, 2, 0) + MovementLoopAddLocation(NPC, -201.63, -3.96, 241.22, 2, 0) + MovementLoopAddLocation(NPC, -202.42, -3.91, 243.36, 2, 0) + MovementLoopAddLocation(NPC, -203.26, -3.91, 244.59, 2, 0) + MovementLoopAddLocation(NPC, -204.57, -3.86, 248.21, 2, 0) + MovementLoopAddLocation(NPC, -203.63, -3.87, 250.3, 2, 0) + MovementLoopAddLocation(NPC, -202.44, -3.96, 251.75, 2, 0) + MovementLoopAddLocation(NPC, -198.17, -4.06, 251.76, 2, 0) + MovementLoopAddLocation(NPC, -192.84, -3.98, 253.19, 2, 0) + MovementLoopAddLocation(NPC, -190.54, -3.98, 254.68, 2, 0) + MovementLoopAddLocation(NPC, -187.78, -3.99, 257.42, 2, 0) + MovementLoopAddLocation(NPC, -181.75, -3.88, 269.79, 2, 0) + MovementLoopAddLocation(NPC, -180.12, -3.97, 272.09, 2, 0) + MovementLoopAddLocation(NPC, -178.63, -4.08, 273.61, 2, 0) + MovementLoopAddLocation(NPC, -177.18, -4.06, 273.99, 2, 0) + MovementLoopAddLocation(NPC, -175.94, -4, 273.13, 2, 0) + MovementLoopAddLocation(NPC, -171.83, -4.43, 268.41, 2, 0) + MovementLoopAddLocation(NPC, -170.7, -4.51, 267.55, 2, 0) + MovementLoopAddLocation(NPC, -169.58, -4.68, 265.84, 2, 0) + MovementLoopAddLocation(NPC, -168.45, -5.08, 264.1, 2, 0) + MovementLoopAddLocation(NPC, -167.7, -5.2, 260.55, 2, 0) + MovementLoopAddLocation(NPC, -168.22, -5.23, 258.51, 2, 0) + MovementLoopAddLocation(NPC, -167.7, -5.2, 260.55, 2, 0) + MovementLoopAddLocation(NPC, -168.45, -5.08, 264.1, 2, 0) + MovementLoopAddLocation(NPC, -169.58, -4.68, 265.84, 2, 0) + MovementLoopAddLocation(NPC, -170.7, -4.51, 267.55, 2, 0) + MovementLoopAddLocation(NPC, -171.83, -4.43, 268.41, 2, 0) + MovementLoopAddLocation(NPC, -175.94, -4, 273.13, 2, 0) + MovementLoopAddLocation(NPC, -177.18, -4.06, 273.99, 2, 0) + MovementLoopAddLocation(NPC, -178.63, -4.08, 273.61, 2, 0) + MovementLoopAddLocation(NPC, -180.12, -3.97, 272.09, 2, 0) + MovementLoopAddLocation(NPC, -181.75, -3.88, 269.79, 2, 0) + MovementLoopAddLocation(NPC, -187.78, -3.99, 257.42, 2, 0) + MovementLoopAddLocation(NPC, -190.54, -3.98, 254.68, 2, 0) + MovementLoopAddLocation(NPC, -192.84, -3.98, 253.19, 2, 0) + MovementLoopAddLocation(NPC, -198.17, -4.06, 251.76, 2, 0) + MovementLoopAddLocation(NPC, -202.44, -3.96, 251.75, 2, 0) + MovementLoopAddLocation(NPC, -203.63, -3.87, 250.3, 2, 0) + MovementLoopAddLocation(NPC, -204.57, -3.86, 248.21, 2, 0) + MovementLoopAddLocation(NPC, -203.26, -3.91, 244.59, 2, 0) + MovementLoopAddLocation(NPC, -202.42, -3.91, 243.36, 2, 0) + MovementLoopAddLocation(NPC, -201.63, -3.96, 241.22, 2, 0) + MovementLoopAddLocation(NPC, -199.89, -3.9, 239.27, 2, 0) + MovementLoopAddLocation(NPC, -197.11, -3.95, 238.54, 2, 0) + MovementLoopAddLocation(NPC, -193.77, -3.93, 239.14, 2, 0) + MovementLoopAddLocation(NPC, -191, -3.89, 240.26, 2, 0) + MovementLoopAddLocation(NPC, -188.23, -3.96, 240.15, 2, 0) + MovementLoopAddLocation(NPC, -184.99, -4.1, 240.88, 2, 0) + MovementLoopAddLocation(NPC, -183.59, -4.39, 242.97, 2, 0) + MovementLoopAddLocation(NPC, -182.28, -4.92, 244.93, 2, 0) + MovementLoopAddLocation(NPC, -180.7, -5.31, 246.06, 2, 0) + MovementLoopAddLocation(NPC, -180.2, -5.34, 246.76, 2, 0) + MovementLoopAddLocation(NPC, -178.94, -5.42, 247.04, 2, 0) + MovementLoopAddLocation(NPC, -175.03, -5.36, 252.11, 2, 0) +end diff --git a/server/SpawnScripts/Nettleville/Ajarn.lua b/server/SpawnScripts/Nettleville/Ajarn.lua new file mode 100644 index 000000000..8fda4bd5f --- /dev/null +++ b/server/SpawnScripts/Nettleville/Ajarn.lua @@ -0,0 +1,45 @@ +--[[ + Script Name : SpawnScripts/Nettleville/Ajarn.lua + Script Purpose : Ajarn + Script Author : Scatman + Script Date : 2009.08.12 + Script Notes : +--]] + +function spawn(NPC) + SetPlayerProximityFunction(NPC, 10, "InRange", "LeaveRange") +end + +function respawn(NPC) + spawn(NPC) +end + +function InRange(NPC, Spawn) + local chance = math.random(0, 100) + if chance <= 25 then + Talk(NPC, Spawn) + end +end + +function LeaveRange(NPC, Spawn) +end + +function hailed(NPC, Spawn) + Talk(NPC, Spawn) +end + +function Talk(NPC, Spawn) + FaceTarget(NPC, Spawn) + local choice = math.random(1, 5) + if choice == 1 then + PlayFlavor(NPC, "voiceover/english/kerran_eco_good_1/ft/service/merchant/kerran_merchant_service_good_1_hail_gm_45d92a75.mp3", "Welcome! What can I help you with?", "bow", 2595040836, 1903894062, Spawn) + elseif choice == 2 then + PlayFlavor(NPC, "voiceover/english/kerran_eco_good_1/ft/service/merchant/kerran_merchant_service_good_1_hail_gm_24322c5d.mp3", "Greetings, friend traveler! We have the finest supplies to fill your adventuring needs.", "smile", 1405292242, 1170257111, Spawn) + elseif choice == 3 then + PlayFlavor(NPC, "voiceover/english/kerran_eco_good_1/ft/service/merchant/kerran_merchant_service_good_1_hail_gm_ae84abf9.mp3", "Go on, take a look at the stock. You'll never beat this price in the city. I guarantee it!", "wink", 2292395976, 2840814777, Spawn) + elseif choice == 4 then + PlayFlavor(NPC, "voiceover/english/kerran_eco_good_1/ft/service/merchant/kerran_merchant_service_good_1_aoi_gm_c5e79ff5.mp3", "Hello there! Can I interest you in some of the finest merchandise this side of Norrath?", "wave", 668610071, 953653133, Spawn) + elseif choice == 5 then + PlayFlavor(NPC, "voiceover/english/kerran_eco_good_1/ft/service/merchant/kerran_merchant_service_good_1_hail_gm_e4fa2bd8.mp3", "Confound it! Where did I put that ledger? It must be around here somewhere!", "confused", 2438244582, 4033825140, Spawn) + end +end diff --git a/server/SpawnScripts/Nettleville/AmazuKharliko.lua b/server/SpawnScripts/Nettleville/AmazuKharliko.lua new file mode 100644 index 000000000..afe710a34 --- /dev/null +++ b/server/SpawnScripts/Nettleville/AmazuKharliko.lua @@ -0,0 +1,151 @@ +--[[ + Script Name : SpawnScripts/Nettleville/AmazuKharliko.lua + Script Purpose : Amazu Kharliko + Script Author : Scatman + Script Date : 2008.10.08 + Script Notes : +--]] + +local QUEST_3_FROM_HELAIN = 297 +local QUEST_4_FROM_JOHFRIT = 298 + +function spawn(NPC) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + if HasCompletedQuest(Spawn, QUEST_4_FROM_JOHFRIT) then + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/amazu_kharliko/qey_village01/quests/newbie_path_human/amazukharliko008.mp3", "", "", 1650962870, 444743395, Spawn) + AddConversationOption(conversation, "You might wanna see about chewing some mint instead of fish.", "dlg_15_1") + AddConversationOption(conversation, "I almost flinched that time!", "dlg_15_1") + AddConversationOption(conversation, "Quit doing that! You take pleasure in scaring others, don't you?", "dlg_15_1") + StartConversation(conversation, NPC, Spawn, "RrrraaaAAAawwwwwrrrrrr!") + elseif HasQuest(Spawn, QUEST_4_FROM_JOHFRIT) then + if GetQuestStep(Spawn, QUEST_4_FROM_JOHFRIT) == 4 then + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/amazu_kharliko/qey_village01/quests/newbie_path_human/amazukharliko011.mp3", "", "", 1123006021, 1879893203, Spawn) + AddConversationOption(conversation, "I have a crate for you from Johfrit.", "dlg_29_1") + StartConversation(conversation, NPC, Spawn, "You smell much tastier now than before! What do you have?") + else + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/amazu_kharliko/qey_village01/quests/newbie_path_human/amazukharliko008.mp3", "", "", 1650962870, 444743395, Spawn) + AddConversationOption(conversation, "You might wanna see about chewing some mint instead of fish.", "dlg_15_1") + AddConversationOption(conversation, "I almost flinched that time!", "dlg_15_1") + AddConversationOption(conversation, "Quit doing that! You take pleasure in scaring others, don't you?", "dlg_15_1") + StartConversation(conversation, NPC, Spawn, "RrrraaaAAAawwwwwrrrrrr!") + end + elseif HasQuest(Spawn, QUEST_3_FROM_HELAIN) then + if GetQuestStep(Spawn, QUEST_3_FROM_HELAIN) == 1 then + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/amazu_kharliko/qey_village01/quests/newbie_path_human/amazukharliko001.mp3", "", "", 2412415380, 3586762030, Spawn) + AddConversationOption(conversation, "I will take your word for it, as I have not met many kerra, and you are very impressive. ", "dlg_14_1") + StartConversation(conversation, NPC, Spawn, "No need to tremble before me.") + else + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/amazu_kharliko/qey_village01/quests/newbie_path_human/amazukharliko008.mp3", "", "", 1650962870, 444743395, Spawn) + AddConversationOption(conversation, "You might wanna see about chewing some mint instead of fish.", "dlg_15_1") + AddConversationOption(conversation, "I almost flinched that time!", "dlg_15_1") + AddConversationOption(conversation, "Quit doing that! You take pleasure in scaring others, don't you?", "dlg_15_1") + StartConversation(conversation, NPC, Spawn, "RrrraaaAAAawwwwwrrrrrr!") + end + else + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/amazu_kharliko/qey_village01/quests/newbie_path_human/amazukharliko010.mp3", "", "", 651374027, 1052559465, Spawn) + AddConversationOption(conversation, "No. I would never think of it!", "dlg_11_1") + StartConversation(conversation, NPC, Spawn, "No need to tremble before me... Unless you were the one who took my fish!") + end +end + +---------------------------------------------------------------------------------------------- +-- QUEST_3_FROM_HELAIN +---------------------------------------------------------------------------------------------- + +function dlg_14_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/amazu_kharliko/qey_village01/quests/newbie_path_human/amazukharliko002.mp3", "", "", 879413742, 456522706, Spawn) + AddConversationOption(conversation, "I am. And trying to find some work. Helain Conyers suggested I see you. ", "dlg_14_2") + StartConversation(conversation, NPC, Spawn, "Hmmm. Thank you. You are new here then, I take it?") +end + +function dlg_14_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/amazu_kharliko/qey_village01/quests/newbie_path_human/amazukharliko003.mp3", "", "", 191512372, 1900479237, Spawn) + AddConversationOption(conversation, "Yes. She spoke of you as a friend.", "dlg_14_3") + AddConversationOption(conversation, "Yes. I was rather hoping that I could do something for you.", "Fish") + StartConversation(conversation, NPC, Spawn, "Conyers? Ah yes, the peace lover, right? ") +end + +function Fish(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "I work for anyone that is willing to pay me.", "dlg_14_5") + StartConversation(conversation, NPC, Spawn, "Do you work for fish?") +end + +function dlg_14_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/amazu_kharliko/qey_village01/quests/newbie_path_human/amazukharliko005.mp3", "", "", 559636726, 1850023640, Spawn) + AddConversationOption(conversation, "Aaaah! I am sorry! ", "dlg_14_4") + StartConversation(conversation, NPC, Spawn, "A friend?! I should run you through right here and now, for even suggesting!") +end + +function dlg_14_4(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/amazu_kharliko/qey_village01/quests/newbie_path_human/amazukharliko006.mp3", "", "", 3032852207, 1937375356, Spawn) + AddConversationOption(conversation, "Good, then I will need not to declaw you! ", "dlg_14_5") + StartConversation(conversation, NPC, Spawn, "Heh heh. No need to flinch! I'm only teasing.") +end + +function dlg_14_5(NPC, Spawn) + SetStepComplete(Spawn, QUEST_3_FROM_HELAIN, 1) + + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/amazu_kharliko/qey_village01/quests/newbie_path_human/amazukharliko007.mp3", "", "", 3789369040, 1416330041, Spawn) + AddConversationOption(conversation, "No matter. There are others for me to ask. Good day!") + StartConversation(conversation, NPC, Spawn, "HA! I like you! I just wish I had some work for you. ") +end + +function dlg_15_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/amazu_kharliko/qey_village01/quests/newbie_path_human/amazukharliko009.mp3", "", "", 919685617, 2774536820, Spawn) + AddConversationOption(conversation, "Thanks, Amazu. I'll see you later.") + StartConversation(conversation, NPC, Spawn, "Heh heh. I like you! You have a good sense of humor.") +end + +---------------------------------------------------------------------------------------------------------- +-- QUEST_4_FROM_JOHFRIT +---------------------------------------------------------------------------------------------------------- + +function dlg_29_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/amazu_kharliko/qey_village01/quests/newbie_path_human/amazukharliko012.mp3", "", "", 984254071, 443165129, Spawn) + AddConversationOption(conversation, "I just hope the smell does not linger on me.", "dlg_29_2") + StartConversation(conversation, NPC, Spawn, "My imported squid! Mmmmmmm. No wonder you smelled so good! ") +end + +function dlg_29_2(NPC, Spawn) + SetStepComplete(Spawn, QUEST_4_FROM_JOHFRIT, 4) + + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/amazu_kharliko/qey_village01/quests/newbie_path_human/amazukharliko013.mp3", "", "", 2265246236, 1769996866, Spawn) + AddConversationOption(conversation, "Right. Good day, Amazu!") + StartConversation(conversation, NPC, Spawn, "Heh heh. Unless you want many Kerra following you through town!") +end \ No newline at end of file diff --git a/server/SpawnScripts/Nettleville/AndretSurtees.lua b/server/SpawnScripts/Nettleville/AndretSurtees.lua new file mode 100644 index 000000000..5d0d7d59f --- /dev/null +++ b/server/SpawnScripts/Nettleville/AndretSurtees.lua @@ -0,0 +1,97 @@ +--[[ + Script Name : SpawnScripts/Nettleville/AndretSurtees.lua + Script Purpose : Andret Surtees + Script Author : Scatman + Script Date : 2008.10.08 + Script Notes : +--]] + +local QUEST_1_FROM_HELAIN = 295 +local QUEST_3_FROM_HELAIN = 297 + +function spawn(NPC) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + if HasQuest(Spawn, QUEST_3_FROM_HELAIN) or HasCompletedQuest(Spawn, QUEST_3_FROM_HELAIN) then + if HasQuest(Spawn, QUEST_3_FROM_HELAIN) and GetQuestStep(Spawn, QUEST_3_FROM_HELAIN) == 2 then + HelloThere(NPC, Spawn, conversation) + else + BackAgain(NPC, Spawn, conversation) + end + elseif HasQuest(Spawn, QUEST_1_FROM_HELAIN) and GetQuestStep(Spawn, QUEST_1_FROM_HELAIN) == 1 then + MindYourStepQuest(NPC, Spawn, conversation) + else + MindYourStep(NPC, Spawn, conversation) + end +end + +function MindYourStep(NPC, Spawn, conversation) + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/andret_surtees/qey_village01/andretsurtees001.mp3", "", "", 2406711423, 2100048061, Spawn) + AddConversationOption(conversation, "Thank you. I'll be careful.") + StartConversation(conversation, NPC, Spawn, "Mind your step, sometimes the floorboards have a little lip.") +end + +----------------------------------------------------------------------------------------------- +-- QUEST_1_FROM_HELAIN +----------------------------------------------------------------------------------------------- + +function MindYourStepQuest(NPC, Spawn, conversation) + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/andret_surtees/qey_village01/andretsurtees002.mp3", "", "", 2927697364, 976114271, Spawn) + AddConversationOption(conversation, "Ah, thank you. I was sent by Helain Conyers, she said that..", "dlg_5_1") + StartConversation(conversation, NPC, Spawn, "Mind your step, sometimes the floorboards have a little lip.") +end + +function dlg_5_1(NPC, Spawn) + SetStepComplete(Spawn, QUEST_1_FROM_HELAIN, 1) + + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/andret_surtees/qey_village01/andretsurtees003.mp3", "", "", 3181148477, 966976976, Spawn) + AddConversationOption(conversation, "No problem. Thank you!") + StartConversation(conversation, NPC, Spawn, "That I had some books for her, right ya are. Here they are! Careful with that one about Brell Serilis. It is the oldest, and kinda' falling apart.") +end + +----------------------------------------------------------------------------------------------- +-- QUEST_3_FROM_HELAIN +----------------------------------------------------------------------------------------------- + +function HelloThere(NPC, Spawn, conversation) + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/andret_surtees/qey_village01/andretsurtees005.mp3", "", "", 2242497941, 3475570879, Spawn) + AddConversationOption(conversation, "No, no. She was very excited to have them. She thought you may have something for me to do. ", "dlg_18_1") + StartConversation(conversation, NPC, Spawn, "Hello, there! Don't tell me Helain is done with those books already! ") +end + +function dlg_18_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/andret_surtees/qey_village01/andretsurtees006.mp3", "", "", 3395167985, 2902134044, Spawn) + AddConversationOption(conversation, "I can see why you would. ", "dlg_18_2") + StartConversation(conversation, NPC, Spawn, "She's a sweet girl. I appreciate her interests in books.") +end + +function dlg_18_2(NPC, Spawn) + SetStepComplete(Spawn, QUEST_3_FROM_HELAIN, 2) + + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/andret_surtees/qey_village01/andretsurtees007.mp3", "", "", 3293202175, 255010916, Spawn) + AddConversationOption(conversation, "That's OK. Thank you, anyway.") + StartConversation(conversation, NPC, Spawn, "Right up my alley, I admit. Ha ha ha. But a job? No, not here. Normally, I would have a little task of some sort, but not today.") +end + +function BackAgain(NPC, Spawn, conversation) + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/andret_surtees/qey_village01/andretsurtees004.mp3", "", "", 2872376799, 1379943312, Spawn) + AddConversationOption(conversation, "Oh, I don't know. I was just stopping in.", "dlg_19_1") + StartConversation(conversation, NPC, Spawn, "Back again? I can't imagine that Helain's done with the books I lent her.") +end \ No newline at end of file diff --git a/server/SpawnScripts/Nettleville/Aves.lua b/server/SpawnScripts/Nettleville/Aves.lua new file mode 100644 index 000000000..0f0af3b12 --- /dev/null +++ b/server/SpawnScripts/Nettleville/Aves.lua @@ -0,0 +1,23 @@ +--[[ + Script Name : SpawnScripts/Nettleville/Aves.lua + Script Purpose : Aves + Script Author : Scatman + Script Date : 2009.08.12 + Script Notes : +--]] + +function spawn(NPC) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/aves/qey_village01/aves000.mp3", "", "", 3237492483, 2034262045, Spawn) + AddConversationOption(conversation, "Um... I don't even know who your brother is. I think I'll leave you alone") + StartConversation(conversation, NPC, Spawn, "Shhh! Keep your voice down. Unless my brother sent you, I suggest you find another place to wait for the ferry.") +end \ No newline at end of file diff --git a/server/SpawnScripts/Nettleville/BahatiLinnxar.lua b/server/SpawnScripts/Nettleville/BahatiLinnxar.lua new file mode 100644 index 000000000..d567d9ec9 --- /dev/null +++ b/server/SpawnScripts/Nettleville/BahatiLinnxar.lua @@ -0,0 +1,57 @@ +--[[ + Script Name : SpawnScripts/Nettleville/BahatiLinnxar.lua + Script Purpose : Bahati Linnxar + Script Author : Scatman + Script Date : 2008.10.08 + Script Notes : +--]] + +local QUEST_3_FROM_HELAIN = 297 + +function spawn(NPC) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + if HasQuest(Spawn, QUEST_3_FROM_HELAIN) and GetQuestStep(Spawn, QUEST_3_FROM_HELAIN) >= 3 then + if GetQuestStep(Spawn, QUEST_3_FROM_HELAIN) == 3 then + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/bahati_linnxar/qey_village01/quests/newbie_path_human/bahatilinnxar001.mp3", "", "", 1302404372, 2531656487, Spawn) + AddConversationOption(conversation, "Actually, I have come seeking work. Helain Conyers thought you may have some work for me. ", "dlg_21_1") + StartConversation(conversation, NPC, Spawn, "Take a look at the stock my colleague has. You'll never beat these prices in the city!") + else + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/bahati_linnxar/qey_village01/quests/newbie_path_human/bahatilinnxar005.mp3", "", "", 2124702134, 1087800456, Spawn) + AddConversationOption(conversation, "And you, in yours, Bahati.") + StartConversation(conversation, NPC, Spawn, "I wish you luck in your hunts, adventurer.") + end + else + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/bahati_linnxar/qey_village01/quests/newbie_path_human/bahatilinnxar004.mp3", "", "", 4186730330, 845855960, Spawn) + AddConversationOption(conversation, "Perhaps, I will.", "dlg_6_1") + StartConversation(conversation, NPC, Spawn, "Take a look at the stock my colleague has. You'll never beat these prices in the city! ") + end +end + +function dlg_21_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/bahati_linnxar/qey_village01/quests/newbie_path_human/bahatilinnxar002.mp3", "", "", 2304357496, 4139870, Spawn) + AddConversationOption(conversation, "At least you find it then. No work for me then, I suppose? ", "dlg_21_2") + StartConversation(conversation, NPC, Spawn, "She did, eh? She is a sweetie, but a bit of an oddball. What is not to love about the hunt? The hunt is where I find my inner peace! ") +end + +function dlg_21_2(NPC, Spawn) + SetStepComplete(Spawn, QUEST_3_FROM_HELAIN, 3) + + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/bahati_linnxar/qey_village01/quests/newbie_path_human/bahatilinnxar003.mp3", "", "", 1543408868, 3252040827, Spawn) + AddConversationOption(conversation, "I understand. Enjoy the day, Bahati.", "dlg_21_3") + StartConversation(conversation, NPC, Spawn, "No, I have nothing to offer you. ") +end \ No newline at end of file diff --git a/server/SpawnScripts/Nettleville/BarikaIjumaa.lua b/server/SpawnScripts/Nettleville/BarikaIjumaa.lua new file mode 100644 index 000000000..9b55723fb --- /dev/null +++ b/server/SpawnScripts/Nettleville/BarikaIjumaa.lua @@ -0,0 +1,43 @@ +--[[ + Script Name : SpawnScripts/Nettleville/BarikaIjumaa.lua + Script Purpose : Barika Ijumaa + Script Author : Scatman + Script Date : 2009.08.08 + Script Notes : +--]] + +function spawn(NPC) + SetPlayerProximityFunction(NPC, 10, "InRange", "LeaveRange") +end + +function respawn(NPC) + spawn(NPC) +end + +function InRange(NPC, Spawn) + local chance = math.random(1, 100) + if chance <= 25 then + Talk(NPC, Spawn) + end +end + +function LeaveRange(NPC, Spawn) +end + +function hailed(NPC, Spawn) + Talk(NPC, Spawn) +end + +function Talk(NPC, Spawn) + FaceTarget(NPC, Spawn) + local choice = math.random(1, 4) + if choice == 1 then + PlayFlavor(NPC, "", "Go on, take a look at the stock. You'll never beat this price in the city. I guarantee it!", "wink", 1689589577, 4560189, Spawn) + elseif choice == 2 then + PlayFlavor(NPC, "", "Greetings, friend traveler! We have the finest supplies to fill your adventuring needs.", "smile", 1689589577, 4560189, Spawn) + elseif choice == 3 then + PlayFlavor(NPC, "", "Confound it! Where did I put that ledger? It must be around here somewhere!", "confused", 1689589577, 4560189, Spawn) + elseif choice == 4 then + PlayFlavor(NPC, "", "Welcome! What can I help you with?", "bow", 1689589577, 4560189, Spawn) + end +end diff --git a/server/SpawnScripts/Nettleville/BarmaidLollaCotgrove.lua b/server/SpawnScripts/Nettleville/BarmaidLollaCotgrove.lua new file mode 100644 index 000000000..ec3dc4f77 --- /dev/null +++ b/server/SpawnScripts/Nettleville/BarmaidLollaCotgrove.lua @@ -0,0 +1,40 @@ +--[[ + Script Name : SpawnScripts/Nettleville/BarmaidLollaCotgrove.lua + Script Purpose : Barmaid Lolla Cotgrove + Script Author : Scatman + Script Date : 2009.08.12 + Script Notes : +--]] + +function spawn(NPC) + SetPlayerProximityFunction(NPC, 10, "InRange", "LeaveRange") +end + +function respawn(NPC) + spawn(NPC) +end + +function InRange(NPC, Spawn) + local chance = math.random(0, 100) + if chance <= 25 then + FaceTarget(NPC, Spawn) + PlayFlavor(NPC, "voiceover/english/barmaid_lolla_cotgrove/qey_village01/qey_village01_barmaid_lolla_cotgrove_callout_a2de4d52.mp3", "...And that will go over here and the kegs go there... Yeah. Yeah. Yeah. What do you need?", "point", 2609682603, 931995827, Spawn) + end +end + +function LeaveRange(NPC, Spawn) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + local choice = math.random(1, 4) + if choice == 1 then + PlayFlavor(NPC, "voiceover/english/optional2/human_eco_good_2/ft/service/baker/human_baker_service_good_2_hail_gf_9db280de.mp3", "I love the smell of fresh bread in the oven!", "sigh", 1697227241, 4084483111, Spawn) + elseif choice == 2 then + PlayFlavor(NPC, "voiceover/english/barmaid_lolla_cotgrove/qey_village01/qey_village01_barmaid_lolla_cotgrove_multhail1_ec6e0398.mp3", "Can't you see I'm busy? I've no time for small talk!", "no", 370156187, 590443744, Spawn) + elseif choice == 3 then + PlayFlavor(NPC, "voiceover/english/optional2/human_eco_good_2/ft/service/baker/human_baker_service_good_2_hail_gf_1e9a743c.mp3", "Please mind the plates, they're very hot.", "scold", 1418065096, 412156270, Spawn) + elseif choice == 4 then + PlayFlavor(NPC, "voiceover/english/optional2/human_eco_good_2/ft/service/baker/human_baker_service_good_2_hail_gf_3d1ca473.mp3", "Tell me, do you prefer Halfling or Elven cuisine? I myself have a hard time deciding between the two.", "confused", 591848764, 941431809, Spawn) + end +end diff --git a/server/SpawnScripts/Nettleville/BowyerFesante.lua b/server/SpawnScripts/Nettleville/BowyerFesante.lua new file mode 100644 index 000000000..625e1accb --- /dev/null +++ b/server/SpawnScripts/Nettleville/BowyerFesante.lua @@ -0,0 +1,45 @@ +--[[ + Script Name : SpawnScripts/Nettleville/BowyerFesante.lua + Script Purpose : Bowyer Fesante + Script Author : Scatman + Script Date : 2009.08.12 + Script Notes : +--]] + +function spawn(NPC) + SetPlayerProximityFunction(NPC, 10, "InRange", "LeaveRange") +end + +function respawn(NPC) + spawn(NPC) +end + +function InRange(NPC, Spawn) + local chance = math.random(0, 100) + if chance <= 25 then + hailed(NPC, Spawn) + end +end + +function LeaveRange(NPC, Spawn) +end + +function hailed(NPC, Spawn) + Talk(NPC, Spawn) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + local choice = math.random(1, 5) + if choice == 1 then + PlayFlavor(NPC, "voiceover/english/kerran_eco_good_1/ft/service/merchant/kerran_merchant_service_good_1_aoi_gf_c5e79ff5.mp3", "Hello there! Can I interest you in some of the finest merchandise this side of Norrath?", "wave", 2091371377, 2422178491, Spawn) + elseif choice == 2 then + PlayFlavor(NPC, "voiceover/english/kerran_eco_good_1/ft/service/merchant/kerran_merchant_service_good_1_hail_gf_24322c5d.mp3", "Greetings, traveler! We have the finest supplies to fill your adventuring needs.", "smile", 509171300, 3181487898, Spawn) + elseif choice == 3 then + PlayFlavor(NPC, "voiceover/english/kerran_eco_good_1/ft/service/merchant/kerran_merchant_service_good_1_hail_gf_45d92a75.mp3", "Welcome! What can I help you with?", "bow", 2213475197, 3871690614, Spawn) + elseif choice == 4 then + PlayFlavor(NPC, "voiceover/english/kerran_eco_good_1/ft/service/merchant/kerran_merchant_service_good_1_hail_gf_ae84abf9.mp3", "Go on, take a look at the stock. You'll never beat this price in the city. I guarantee it!", "wink", 3487732561, 2995138728, Spawn) + elseif choice == 5 then + PlayFlavor(NPC, "voiceover/english/kerran_eco_good_1/ft/service/merchant/kerran_merchant_service_good_1_hail_gf_e4fa2bd8.mp3", "Confound it! Where did I put that ledger? It must be around here somewhere!", "confused", 591569637, 3640467043, Spawn) + end +end diff --git a/server/SpawnScripts/Nettleville/CarynSwell.lua b/server/SpawnScripts/Nettleville/CarynSwell.lua new file mode 100644 index 000000000..9e2f09caf --- /dev/null +++ b/server/SpawnScripts/Nettleville/CarynSwell.lua @@ -0,0 +1,45 @@ +--[[ + Script Name : SpawnScripts/Nettleville/CarynSwell.lua + Script Purpose : Caryn Swell + Script Author : Scatman + Script Date : 2009.08.10 + Script Notes : +--]] + +function spawn(NPC) + SetPlayerProximityFunction(NPC, 10, "InRange", "LeaveRange") +end + +function respawn(NPC) + spawn(NPC) +end + +function InRange(NPC, Spawn) + local chance = math.random(1, 100) + if chance <= 25 then + Talk(NPC, Spawn) + end +end + +function LeaveRange(NPC, Spawn) +end + +function hailed(NPC, Spawn) + Talk(NPC, Spawn) +end + +function Talk(NPC, Spawn) + FaceTarget(NPC, Spawn) + local choice = math.random(1, 5) + if choice == 1 then + PlayFlavor(NPC, "voiceover/english/human_eco_good_1/ft/service/merchant/human_merchant_service_good_1_aoi_gf_c5e79ff5.mp3", "Hello there! Can I interest you in some of the finest merchandise this side of Norrath?", "wave", 489810336, 3318568259, Spawn) + elseif choice == 2 then + PlayFlavor(NPC, "voiceover/english/human_eco_good_1/ft/service/merchant/human_merchant_service_good_1_hail_gf_24322c5d.mp3", "Greetings, friend traveler! We have the finest supplies to fill your adventuring needs.", "smile", 1527285383, 3910629798, Spawn) + elseif choice == 3 then + PlayFlavor(NPC, "voiceover/english/human_eco_good_1/ft/service/merchant/human_merchant_service_good_1_hail_gf_45d92a75.mp3", "Welcome! What can I help you with?", "bow", 1381598517, 719278997, Spawn) + elseif choice == 4 then + PlayFlavor(NPC, "voiceover/english/human_eco_good_1/ft/service/merchant/human_merchant_service_good_1_hail_gf_ae84abf9.mp3", "Go on, take a look at the stock. You'll never beat this price in the city. I guarantee it!", "wink", 1667555721, 2696093362, Spawn) + elseif choice == 5 then + PlayFlavor(NPC, "voiceover/english/human_eco_good_1/ft/service/merchant/human_merchant_service_good_1_hail_gf_e4fa2bd8.mp3", "Confound it! Where did I put that ledger? It must be around here somewhere!", "confused", 2588954321, 88153469, Spawn) + end +end diff --git a/server/SpawnScripts/Nettleville/CaylessChambers.lua b/server/SpawnScripts/Nettleville/CaylessChambers.lua new file mode 100644 index 000000000..fcb1a27bb --- /dev/null +++ b/server/SpawnScripts/Nettleville/CaylessChambers.lua @@ -0,0 +1,23 @@ +--[[ + Script Name : SpawnScripts/Nettleville/CaylessChambers.lua + Script Purpose : Cayless Chambers + Script Author : Scatman + Script Date : 2009.08.12 + Script Notes : +--]] + +function spawn(NPC) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/smith_cayless_chambers/qey_village01/smithcayless000.mp3", "", "", 360119992, 780476339, Spawn) + AddConversationOption(conversation, "Just looking.") + StartConversation(conversation, NPC, Spawn, "Welcome to the Knight's Edge. Looking for fine quality armors? I'm your lady. Place your order and stand back.") +end \ No newline at end of file diff --git a/server/SpawnScripts/Nettleville/ConstableArathur.lua b/server/SpawnScripts/Nettleville/ConstableArathur.lua new file mode 100644 index 000000000..4694ed280 --- /dev/null +++ b/server/SpawnScripts/Nettleville/ConstableArathur.lua @@ -0,0 +1,23 @@ +--[[ + Script Name : SpawnScripts/Nettleville/ConstableArathur.lua + Script Purpose : Constable Arathur + Script Author : Scatman + Script Date : 2009.08.12 + Script Notes : +--]] + +function spawn(NPC) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/optional1/constable_arathur/qey_village01/constablearathur000.mp3", "", "", 1713133658, 629344486, Spawn) + AddConversationOption(conversation, "I shall do my part. Farewell.") + StartConversation(conversation, NPC, Spawn, "Hail, Qeynosian. Please be on the lookout for any illicit trade activities. We must all do our part to keep corruption from creeping into our fair city. ") +end \ No newline at end of file diff --git a/server/SpawnScripts/Nettleville/DarianWells.lua b/server/SpawnScripts/Nettleville/DarianWells.lua new file mode 100644 index 000000000..d4079c3e6 --- /dev/null +++ b/server/SpawnScripts/Nettleville/DarianWells.lua @@ -0,0 +1,43 @@ +--[[ + Script Name : SpawnScripts/Nettleville/DarianWells.lua + Script Purpose : Darian Wells + Script Author : Scatman + Script Date : 2009.08.12 + Script Notes : +--]] + +function spawn(NPC) + SetPlayerProximityFunction(NPC, 10, "InRange", "LeaveRange") +end + +function respawn(NPC) + spawn(NPC) +end + +function InRange(NPC, Spawn) + local chance = math.random(0, 100) + if chance <= 25 then + Talk(NPC, Spawn) + end +end + +function LeaveRange(NPC, Spawn) +end + +function hailed(NPC, Spawn) + Talk(NPC, Spawn) +end + +function Talk(NPC, Spawn) + FaceTarget(NPC, Spawn) + local choice = math.random(1, 4) + if choice == 1 then + PlayFlavor(NPC, "voiceover/english/optional2/human_eco_good_2/ft/service/merchant/human_merchant_service_good_2_hail_gm_ae84abf9.mp3", "Go on, take a look at the stock. You'll never beat this price in the city. I guarantee it!", "wink", 507535350, 484861631, Spawn) + elseif choice == 2 then + PlayFlavor(NPC, "voiceover/english/optional2/human_eco_good_2/ft/service/merchant/human_merchant_service_good_2_hail_gm_24322c5d.mp3", "Greetings, friend traveler! We have the finest supplies to fill your adventuring needs.", "smile", 1383875147, 384287053, Spawn) + elseif choice == 3 then + PlayFlavor(NPC, "voiceover/english/optional2/human_eco_good_2/ft/service/merchant/human_merchant_service_good_2_hail_gm_e4fa2bd8.mp3", "Confound it! Where did I put that ledger? It must be around here somewhere!", "confused", 515505319, 274009138, Spawn) + elseif choice == 4 then + PlayFlavor(NPC, "voiceover/english/optional2/human_eco_good_2/ft/service/merchant/human_merchant_service_good_2_hail_gm_45d92a75.mp3", "Welcome! What can I help you with?", "bow", 3492716408, 910029111, Spawn) + end +end diff --git a/server/SpawnScripts/Nettleville/DirkVagrin.lua b/server/SpawnScripts/Nettleville/DirkVagrin.lua new file mode 100644 index 000000000..cd7cfe8f4 --- /dev/null +++ b/server/SpawnScripts/Nettleville/DirkVagrin.lua @@ -0,0 +1,36 @@ +--[[ + Script Name : SpawnScripts/Nettleville/DirkVagrin.lua + Script Purpose : Dirk Vagrin + Script Author : Scatman + Script Date : 2009.08.12 + Script Notes : +--]] + +function spawn(NPC) + SetPlayerProximityFunction(NPC, 10, "InRange", "LeaveRange") +end + +function respawn(NPC) + spawn(NPC) +end + +function InRange(NPC, Spawn) + local chance = math.random(0, 100) + if chance <= 25 then + FaceTarget(NPC, Spawn) + PlayFlavor(NPC, "voiceover/english/dirk_vagrin/qey_village01/qey_village01_dirk_vagrin_callout_ab43615b.mp3", "Ehh? Who goes there? You looking for adventure? I bet my shinys will tempt you!", "boggle", 2386377043, 3237731304, Spawn) + end +end + +function LeaveRange(NPC, Spawn) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + local choice = math.random(1, 2) + if choice == 1 then + PlayFlavor(NPC, "voiceover/english/dirk_vagrin/qey_village01/qey_village01_dirk_vagrin_multhail2_be08c03e.mp3", "Bah! Off with ye! These barrels are mine! Mine!", "", 4248926679, 4124146023, Spawn) + elseif choice == 2 then + PlayFlavor(NPC, "voiceover/english/dirk_vagrin/qey_village01/qey_village01_dirk_vagrin_multhail1_e70947c7.mp3", "Bah! Go away or I'll ... I'll ... I don't know. Just go away!", "", 3343827845, 2701332902, Spawn) + end +end \ No newline at end of file diff --git a/server/SpawnScripts/Nettleville/EhuraaRotherham.lua b/server/SpawnScripts/Nettleville/EhuraaRotherham.lua new file mode 100644 index 000000000..6bed549b8 --- /dev/null +++ b/server/SpawnScripts/Nettleville/EhuraaRotherham.lua @@ -0,0 +1,45 @@ +--[[ + Script Name : SpawnScripts/Nettleville/EhuraaRotherham.lua + Script Purpose : Ehuraa Rotherham + Script Author : Scatman + Script Date : 2009.08.12 + Script Notes : +--]] + +function spawn(NPC) + SetPlayerProximityFunction(NPC, 10, "InRange", "LeaveRange") +end + +function respawn(NPC) + spawn(NPC) +end + +function InRange(NPC, Spawn) + local choice = math.random(0, 100) + if choice <= 25 then + Talk(NPC, Spawn) + end +end + +function LeaveRange(NPC, Spawn) +end + +function hailed(NPC, Spawn) + Talk(NPC, Spawn) +end + +function Talk(NPC, Spawn) + FaceTarget(NPC, Spawn) + local choice = math.random(1, 5) + if choice == 1 then + PlayFlavor(NPC, "voiceover/english/human_eco_good_1/ft/service/merchant/human_merchant_service_good_1_hail_gf_ae84abf9.mp3", "Go on, take a look at the stock. You'll never beat this price in the city. I guarantee it!", "wink", 1667555721, 2696093362, Spawn) + elseif choice == 2 then + PlayFlavor(NPC, "voiceover/english/human_eco_good_1/ft/service/merchant/human_merchant_service_good_1_hail_gf_e4fa2bd8.mp3", "Confound it! Where did I put that ledger? It must be around here somewhere!", "confused", 2588954321, 88153469, Spawn) + elseif choice == 3 then + PlayFlavor(NPC, "voiceover/english/human_eco_good_1/ft/service/merchant/human_merchant_service_good_1_hail_gf_24322c5d.mp3", "Greetings, friend traveler! We have the finest supplies to fill your adventuring needs.", "smile", 1527285383, 3910629798, Spawn) + elseif choice == 4 then + PlayFlavor(NPC, "voiceover/english/human_eco_good_1/ft/service/merchant/human_merchant_service_good_1_hail_gf_45d92a75.mp3", "Welcome! What can I help you with?", "bow", 1381598517, 719278997, Spawn) + elseif choice == 5 then + PlayFlavor(NPC, "voiceover/english/human_eco_good_1/ft/service/merchant/human_merchant_service_good_1_aoi_gf_c5e79ff5.mp3", "Hello there! Can I interest you in some of the finest merchandise this side of Norrath?", "wave", 489810336, 3318568259, Spawn) + end +end diff --git a/server/SpawnScripts/Nettleville/Fallsworth.lua b/server/SpawnScripts/Nettleville/Fallsworth.lua new file mode 100644 index 000000000..099019956 --- /dev/null +++ b/server/SpawnScripts/Nettleville/Fallsworth.lua @@ -0,0 +1,152 @@ +--[[ + Script Name : SpawnScripts/Nettleville/Fallsworth.lua + Script Purpose : Fallsworth + Script Author : John Adams/Scatman + Script Date : 2008.09.24 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +function spawn(NPC) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/optional5/guard_fallsworth/qey_village01/lore_fallsworth_000.mp3", "", "", 4021203064, 431523651, Spawn) + AddConversationOption(conversation, "Why should I be cautious?", "dlg_1_1") + AddConversationOption(conversation, "Thanks for the warning.") + StartConversation(conversation, NPC, Spawn, "Welcome to the kingdom of Qeynos, young traveler! I'm certain you will find yourself right at home in this fair hovel. Aaaah, but I see the spark of adventure in your eyes. Indeed, there's a great deal to explore in the city alone! But do not let Qeynos' grandeur deceive you from caution, my friend.") +end + +function dlg_1_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/optional5/guard_fallsworth/qey_village01/lore_fallsworth_001.mp3", "", "", 586122815, 4182581793, Spawn) + AddConversationOption(conversation, "Are the catacombs really that dangerous?", "dlg_1_2") + AddConversationOption(conversation, "I'll keep that in mind, thanks.") + StartConversation(conversation, NPC, Spawn, "Of course you are well protected inside the city and village gates, so please do not let my words frighten you here. However, should you venture into the catacombs, as so many young and curious adventurers do, it would be best for you to leave the comfort and safety of the city behind.") +end + +function dlg_1_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/optional5/guard_fallsworth/qey_village01/lore_fallsworth_002.mp3", "", "", 2161099564, 821412195, Spawn) + AddConversationOption(conversation, "What rumors?", "dlg_1_3") + AddConversationOption(conversation, "I'll be sure to keep an eye out.") + StartConversation(conversation, NPC, Spawn, "The catacombs are quite dangerous, yes. A great many unsavory characters have been known to take shelter in these often unchecked environments. Of course the riff-raff are the usual thieves or smugglers and are relatively easy to remove, but there have been some rumors as of late that hint at a more disturbing presence in the catacombs.") +end + +function dlg_1_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/optional5/guard_fallsworth/qey_village01/lore_fallsworth_003.mp3", "", "", 2083062858, 1489848311, Spawn) + AddConversationOption(conversation, "The Bloodsabers? Who are they?", "dlg_1_4") + AddConversationOption(conversation, "Rumors don't concern me right now.") + StartConversation(conversation, NPC, Spawn, "I really shouldn't be telling you this; I don't want to frighten you, or worse, spur you into action, but I think that you ought to know for your own safety. These rumors, and mind you they are unconfirmed at this time, hint at the possible return of the Bloodsaber cult.") +end + +function dlg_1_4(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/optional5/guard_fallsworth/qey_village01/lore_fallsworth_004.mp3", "", "", 1653477530, 2455296289, Spawn) + AddConversationOption(conversation, "What was the War of Plagues?", "dlg_1_5") + AddConversationOption(conversation, "I'll keep an eye out when in the catacombs.") + StartConversation(conversation, NPC, Spawn, "The Bloodsabers were an underground cult dedicated to the god of plagues, Bertoxxulous. They were eradicated after their defeat in the War of Plagues during the Age of Turmoil, so these rumors are to be taken under a bit of skepticism.") +end + +function dlg_1_5(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/optional5/guard_fallsworth/qey_village01/lore_fallsworth_005.mp3", "", "", 3466462498, 3475796001, Spawn) + AddConversationOption(conversation, "What happened?", "dlg_1_6") + AddConversationOption(conversation, "Who was Lord Grimrot?", "dlg_2_7") + AddConversationOption(conversation, "Apparently Qeynos won. I don't need to know anything more than that.") + StartConversation(conversation, NPC, Spawn, "During the Age of Turmoil, the War of Plagues spanned over the near entirety of the Qeynos kingdom. The Bloodsabers had conjured an army of plague-ridden undead soldiers and sent this festering horde upon the innocents of the kingdom. An undead knight known then as Lord Grimrot led this invasion. His thirst for destruction and power was overwhelming. For a time, it seemed he would be victorious.") +end + +function dlg_1_6(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/optional5/guard_fallsworth/qey_village01/lore_fallsworth_006.mp3", "", "", 4294575441, 4031828863, Spawn) + AddConversationOption(conversation, "But Qeynos obviously recovered, right?", "dlg_1_7") + AddConversationOption(conversation, "I've got to go.") + StartConversation(conversation, NPC, Spawn, "Although the war lasted no more than two months, a great many innocents and noble warriors were lost. The undead horde, along with Lord Grimrot himself, eventually fell to the might of Qeynos' armies and its valiant and brave people. Still, so many had been lost and the earth itself had been soiled with the plague carried by the undead.") +end + +function dlg_1_7(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/optional5/guard_fallsworth/qey_village01/lore_fallsworth_007.mp3", "", "", 2009679352, 4180928206, Spawn) + AddConversationOption(conversation, "What was the treachery?", "dlg_1_8") + AddConversationOption(conversation, "Qeynos survived and stands today. I needn't hear any more.") + StartConversation(conversation, NPC, Spawn, "Indeed, the spirit of Qeynos could not be broken and the kingdom moved past the atrocities of the war. The undead hordes were forced into the earth, buried for all time by the powers of Qeynos' combined priesthoods. However, Qeynos would face yet another mournful loss; the senseless treachery of one of our own was revealed.") +end + +function dlg_1_8(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/optional5/guard_fallsworth/qey_village01/lore_fallsworth_008.mp3", "", "", 1513625783, 641889157, Spawn) + AddConversationOption(conversation, "How did Kane's treason contribute to the loss of lives?", "dlg_1_9") + AddConversationOption(conversation, "I've got to go.") + StartConversation(conversation, NPC, Spawn, "Antonious Bayle IV, the then current ruler of Qeynos, had a half-brother, Kane Bayle. Kane had served as Captain of the Guard for most of Antonious' rule. Kane's jealousy at his brother's ascension had corrupted his judgment and he had allied himself in secret with the Bloodsabers many years before the war.") +end + +function dlg_1_9(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/optional5/guard_fallsworth/qey_village01/lore_fallsworth_009.mp3", "", "", 3084970022, 3402267638, Spawn) + AddConversationOption(conversation, "Why do people think that they've come back?", "dlg_1_10") + AddConversationOption(conversation, "I've got to go.") + StartConversation(conversation, NPC, Spawn, "Kane had assured that the armies of Qeynos were spread thin throughout the world before the time of the Bloodsaber's invasion. When the hordes came, Qeynos was unprepared. Although Kane survived the war, he did not escape the justice of Qeynos. He was put to death along with the other captured Bloodsabers. The Bloodsabers had been defeated and forever eradicated from Qeynos, or so it was thought.") +end + +function dlg_1_10(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/optional5/guard_fallsworth/qey_village01/lore_fallsworth_010.mp3", "", "", 538439861, 3762223589, Spawn) + AddConversationOption(conversation, "Maybe I can scout out the catacombs for you?", "dlg_1_11") + AddConversationOption(conversation, "I've got to go.") + StartConversation(conversation, NPC, Spawn, "As I've said, there are only rumors floating about regarding the return of a Bloodsaber presence in the catacombs, but our history with the War of Plagues has forced us to handle these rumors with a degree of seriousness. The Qeynos guard has been into the catacombs numerous times, but we have found no definitive evidence of any such revival.") +end + +function dlg_1_11(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/optional5/guard_fallsworth/qey_village01/lore_fallsworth_011.mp3", "", "", 3663318123, 1398288957, Spawn) + AddConversationOption(conversation, "Oh, all right then. Well, thanks for the warning.", "dlg_1_12") + StartConversation(conversation, NPC, Spawn, "No, I wouldn't dare put you in possible danger. The discovery of the cult, if there even is one, is for the Qeynos guard to handle. I do appreciate your brave and honorable offer. I just want you to be fairly warned in case that these rumors do turn out to be true. ") +end + + + + + + + + + +function dlg_2_6(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/optional5/guard_fallsworth/qey_village01/lore_fallsworth_012.mp3", "", "", 2861109623, 1027357234, Spawn) + AddConversationOption(conversation, "How did Lord Grimrot die?", "dlg_1_6") + AddConversationOption(conversation, "I've got to go.") + StartConversation(conversation, NPC, Spawn, "Lord Grimrot was a powerful undead knight of Bertoxxulous who was notorious for his brutal tyranny in the outer territories of Qeynos. He wielded an ancient and powerful relic, Pestilence. This war scythe was said to have been forged on the Plane of Disease and was the source of his power. The truth to any of this is unknown for the scythe was not recovered with Grimrot's remains.") +end \ No newline at end of file diff --git a/server/SpawnScripts/Nettleville/FosterGraham.lua b/server/SpawnScripts/Nettleville/FosterGraham.lua new file mode 100644 index 000000000..9227ddc9a --- /dev/null +++ b/server/SpawnScripts/Nettleville/FosterGraham.lua @@ -0,0 +1,68 @@ +--[[ + Script Name : SpawnScripts/Nettleville/FosterGraham.lua + Script Purpose : Foster Graham + Script Author : Scatman + Script Date : 2009.08.08 + Script Notes : +--]] + +local QUEST_1 = 309 + +function spawn(NPC) + ProvidesQuest(NPC, QUEST_1) + SetPlayerProximityFunction(NPC, 10, "InRange", "LeaveRange") +end + +function respawn(NPC) + spawn(NPC) +end + +function InRange(NPC, Spawn) + FaceTarget(NPC, Spawn) + if not HasQuest(Spawn, QUEST_1) and not HasCompletedQuest(Spawn, QUEST_1) then + PlayFlavor(NPC, "voiceover/english/foster_graham/qey_village01/qey_village01_foster_graham_callout_127b0ec4.mp3", "Come to gaze upon me, have you?", "smirk", 918053570, 706207599, Spawn) + end +end + +function LeaveRange(NPC, Spawn) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + if not HasCompletedQuest(Spawn, QUEST_1) and not HasQuest(Spawn, QUEST_1) then + AddConversationOption(conversation, "I see a few lines forming on that face of yours.", "dlg_22_1") + elseif HasQuest(Spawn, QUEST_1) and GetQuestStep(Spawn, QUEST_1) == 2 then + AddConversationOption(conversation, "I have your toxic glands.", "dlg_5_1") + end + AddConversationOption(conversation, "I will leave you to yourself.") + PlayFlavor(NPC, "voiceover/english/foster_graham/qey_village01/fostergraham000.mp3", "", "", 2810929799, 1251082764, Spawn) + StartConversation(conversation, NPC, Spawn, "Ahh... my reflection in the water. How glorious! Nothing is more pleasurable than gazing upon my own beauty.") +end + +function dlg_22_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/foster_graham/qey_village01/fostergraham001.mp3", "", "", 716330203, 409660304, Spawn) + AddConversationOption(conversation, "Stop the drama. I can get what you need.", "OfferQuest1") + AddConversationOption(conversation, "That's your problem, not mine.") + StartConversation(conversation, NPC, Spawn, "What! It cannot be! Nooooo... Where is my face cream? My 'Erollisi's Bane?' Have I run out? Its secret ingredient is rare; the local shops have all been depleted of it. Alas!") +end + +function OfferQuest1(NPC, Spawn) + FaceTarget(NPC, Spawn) + OfferQuest(NPC, Spawn, QUEST_1) +end + +function dlg_5_1(NPC, Spawn) + SetStepComplete(Spawn, QUEST_1, 2) + + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/foster_graham/qey_village01/fostergraham003.mp3", "", "", 399908880, 4101526749, Spawn) + AddConversationOption(conversation, "Farewell.") + StartConversation(conversation, NPC, Spawn, "Many thanks, my homely friend. Take this payment for your service and use it to improve your looks. ") +end diff --git a/server/SpawnScripts/Nettleville/FriarMontego.lua b/server/SpawnScripts/Nettleville/FriarMontego.lua new file mode 100644 index 000000000..a62ca1856 --- /dev/null +++ b/server/SpawnScripts/Nettleville/FriarMontego.lua @@ -0,0 +1,36 @@ +--[[ + Script Name : SpawnScripts/Nettleville/FriarMontego.lua + Script Purpose : Friar Montego + Script Author : Scatman + Script Date : 2009.08.08 + Script Notes : +--]] + +function spawn(NPC, Spawn) +end + +function respawn(NPC, Spawn) + spawn(NPC, Spawn) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + RandomVoiceOver(NPC, Spawn) + local choice = math.random(1, 2) + if choice == 1 then + PlayFlavor(NPC, "", "Please give to the Nettleville Restoration Project, building homes for those who have none.", "", 1689589577, 4560189, Spawn) + elseif choice == 2 then + PlayFlavor(NPC, "", "Alms for the poor... Anyone, anyone?", "", 1689589577, 4560189, Spawn) + end +end + +function RandomVoiceOver(NPC, Spawn) + local choice = math.random(1, 3) + if choice == 1 then + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_1_1006.mp3", "", "", 0, 0, Spawn) + elseif choice == 2 then + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_2_1006.mp3", "", "", 0, 0, Spawn) + else + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_3_1006.mp3", "", "", 0, 0, Spawn) + end +end \ No newline at end of file diff --git a/server/SpawnScripts/Nettleville/GarionDunam.lua b/server/SpawnScripts/Nettleville/GarionDunam.lua new file mode 100644 index 000000000..f636522c6 --- /dev/null +++ b/server/SpawnScripts/Nettleville/GarionDunam.lua @@ -0,0 +1,45 @@ +--[[ + Script Name : SpawnScripts/Nettleville/GarionDunam.lua + Script Purpose : Garion Dunam + Script Author : Scatman + Script Date : 2009.08.12 + Script Notes : +--]] + +function spawn(NPC) + SetPlayerProximityFunction(NPC, 10, "InRange", "LeaveRange") +end + +function respawn(NPC) + spawn(NPC) +end + +function InRange(NPC, Spawn) + local chance = math.random(0, 100) + if chance <= 25 then + Talk(NPC, Spawn) + end +end + +function LeaveRange(NPC, Spawn) +end + +function hailed(NPC, Spawn) + Talk(NPC, Spawn) +end + +function Talk(NPC, Spawn) + FaceTarget(NPC, Spawn) + local choice = math.random(1, 5) + if choice == 1 then + PlayFlavor(NPC, "voiceover/english/human_eco_good_1/ft/service/alchemist/human_alchemist_service_good_1_hail_gm_a8ed74c7.mp3", "There are no refunds for caster error at this shop! Oh ... hello you're not here about a refund.", "no", 383508519, 1836231230, Spawn) + elseif choice == 2 then + PlayFlavor(NPC, "voiceover/english/human_eco_good_1/ft/service/alchemist/human_alchemist_service_good_1_hail_gm_59de96bd.mp3", "What happened to the highly explosive bottle that was on my desk? Have you seen it?", "peer", 1482977865, 753937939, Spawn) + elseif choice == 3 then + PlayFlavor(NPC, "", "Garion is my name, potions my game. What can I get for you?", "", 1689589577, 4560189, Spawn) + elseif choice == 4 then + PlayFlavor(NPC, "voiceover/english/human_eco_good_1/ft/service/alchemist/human_alchemist_service_good_1_hail_gm_ec533e4c.mp3", "Are you wounded? I just made up a fresh batch of healing potions an hour ago.", "hello", 3929603973, 2846331407, Spawn) + elseif choice == 5 then + PlayFlavor(NPC, "voiceover/english/human_eco_good_1/ft/service/alchemist/human_alchemist_service_good_1_hail_gm_efd903ba.mp3", "Hello, adventurer! Are you looking for a specific potion or ingredient?", "agree", 3478121196, 1626504328, Spawn) + end +end \ No newline at end of file diff --git a/server/SpawnScripts/Nettleville/Gunta.lua b/server/SpawnScripts/Nettleville/Gunta.lua new file mode 100644 index 000000000..642283a6b --- /dev/null +++ b/server/SpawnScripts/Nettleville/Gunta.lua @@ -0,0 +1,80 @@ +--[[ + Script Name : SpawnScripts/Nettleville/Gunta.lua + Script Purpose : Gunta + Script Author : Scatman + Script Date : 2009.08.21 + Script Notes : +--]] + +-- Quest ID's +local CURIOUS_FINDINGS = 301 + +function spawn(NPC) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + if HasCompletedQuest(Spawn, CURIOUS_FINDINGS) then + Say(NPC, "I'm sorry but I'm still too busy to help.") + elseif HasQuest(Spawn, CURIOUS_FINDINGS) then + if GetQuestStep(Spawn, CURIOUS_FINDINGS) == 2 then + INeedHelp(NPC, Spawn) + else + Say(NPC, "I'm sorry but I'm still too busy to help.") + end + else + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/gunta/qey_village01/qst_assistant_gunta_notonquest_8aefe111.mp3", "I am very, very busy.", "", 3535297404, 3189268893, Spawn) + end +end + +function INeedHelp(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/gunta/qey_village01/quests/assistant_gunta/assistant_gunta001.mp3", "", "", 1890824744, 2425957227, Spawn) + AddConversationOption(conversation, "I need your help identifying a substance.", "dlg_21_1") + StartConversation(conversation, NPC, Spawn, "I'm very busy right now.") +end + +function dlg_21_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/gunta/qey_village01/quests/assistant_gunta/assistant_gunta002.mp3", "", "", 3053564610, 3469356584, Spawn) + AddConversationOption(conversation, "But this is very important.", "dlg_21_2") + StartConversation(conversation, NPC, Spawn, "I'm very busy sorting and labeling, sorry.") +end + +function dlg_21_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/gunta/qey_village01/quests/assistant_gunta/assistant_gunta003.mp3", "", "", 1473302109, 3079393007, Spawn) + AddConversationOption(conversation, "Is there nothing you can do to help me?", "dlg_21_3") + StartConversation(conversation, NPC, Spawn, "So is this. If I don't get this done soon I may not be an assistant anymore!") +end + +function dlg_21_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/gunta/qey_village01/quests/assistant_gunta/assistant_gunta004.mp3", "", "", 1009574595, 614031457, Spawn) + AddConversationOption(conversation, "What about the Alchemist?", "dlg_21_4") + StartConversation(conversation, NPC, Spawn, "Sorry, no!") +end + +function dlg_21_4(NPC, Spawn) + SetStepComplete(Spawn, CURIOUS_FINDINGS, 2) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/gunta/qey_village01/quests/assistant_gunta/assistant_gunta005.mp3", "", "", 4103083518, 610136263, Spawn) + AddConversationOption(conversation, "Well... thanks, I guess.") + StartConversation(conversation, NPC, Spawn, "I wouldn't bother talking to him. He has problems of his own to worry about.") +end \ No newline at end of file diff --git a/server/SpawnScripts/Nettleville/HelainConyers.lua b/server/SpawnScripts/Nettleville/HelainConyers.lua new file mode 100644 index 000000000..cab346031 --- /dev/null +++ b/server/SpawnScripts/Nettleville/HelainConyers.lua @@ -0,0 +1,317 @@ +--[[ + Script Name : SpawnScripts/Nettleville/HelainConyers.lua + Script Purpose : Helain Conyers + Script Author : Scatman + Script Date : 2009.08.10 + Script Notes : +--]] + +local HUMAN = 9 +local QUEST_1 = 295 +local QUEST_2 = 296 +local QUEST_3 = 297 +local QUEST_4 = 298 + +function spawn(NPC) + ProvidesQuest(NPC, QUEST_1) + ProvidesQuest(NPC, QUEST_2) + ProvidesQuest(NPC, QUEST_3) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + if HasCompletedQuest(Spawn, QUEST_1) then + if HasCompletedQuest(Spawn, QUEST_2) then + if HasCompletedQuest(Spawn, QUEST_3) then + if HasCompletedQuest(Spawn, QUEST_4) then + FoundPathToPeace(NPC, Spawn, conversation) + else + HaveYouFoundWork(NPC, Spawn, conversation) + end + elseif HasQuest(Spawn, QUEST_3) then + OnQuest3(NPC, Spawn, conversation) + else + ANaturalHere(NPC, Spawn, conversation) + end + elseif HasQuest(Spawn, QUEST_2) then + OnQuest2(NPC, Spawn, conversation) + else + LookAtAllTheBooks(NPC, Spawn, conversation) + end + elseif HasQuest(Spawn, QUEST_1) then + OnQuest1(NPC, Spawn, conversation) + else + if GetRace(Spawn) == HUMAN then + HelloTraveler(NPC, Spawn, conversation) + else + NotHuman(NPC, Spawn, conversation) + end + end +end + +function NotHuman(NPC, Spawn, conversation) + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/helain_conyers/qey_village01/helainconyers027.mp3", "", "", 3089860217, 2120414759, Spawn) + AddConversationOption(conversation, "Thanks for the tip.") + StartConversation(conversation, NPC, Spawn, "Hello, traveler! If it is peace you seek, the teachings of Quellious the Tranquil can show you the way.") +end + +-------------------------------------------------------------------------------------------------------------------------- +-- QUEST 1 +-------------------------------------------------------------------------------------------------------------------------- + +function HelloTraveler(NPC, Spawn, conversation) + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/helain_conyers/qey_village01/helainconyers027.mp3", "", "", 3089860217, 2120414759, Spawn) + AddConversationOption(conversation, "No, I suppose you can't.", "dlg_0_1") + AddConversationOption(conversation, "Thanks for the tip.") + StartConversation(conversation, NPC, Spawn, "Hello, traveler! If it is peace you seek, the teachings of Quellious the Tranquil can show you the way.") +end + +function dlg_0_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/helain_conyers/qey_village01/helainconyers002.mp3", "", "", 2562313108, 1727059508, Spawn) + AddConversationOption(conversation, "The only thing that is safe to assume about a human is that we strive to survive.", "dlg_0_2") + AddConversationOption(conversation, "Well, you know what happens when you assume. Good day.") + StartConversation(conversation, NPC, Spawn, "Why, it used to be that you could know certain things about a person's faith by their race, but just look at us humans. Some are agnostic while others praise the likes of Erollisi Marr, Tunare, or even Bristlebane, just to name a few. ") +end + +function dlg_0_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/helain_conyers/qey_village01/helainconyers003.mp3", "", "", 2892663311, 3066293848, Spawn) + AddConversationOption(conversation, "You obviously are a person of faith.", "dlg_0_3") + AddConversationOption(conversation, "We may not be the oldest of races, but we are tenacious. ") + StartConversation(conversation, NPC, Spawn, "Right you are! And while change is constant and all around us, we adjust and adapt right along with it. Thus our faiths and philosophies are very diverse.") +end + +function dlg_0_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/helain_conyers/qey_village01/helainconyers004.mp3", "", "", 4064224894, 855111154, Spawn) + AddConversationOption(conversation, "No doubt, especially in these times of turmoil and conflict.", "dlg_0_4") + StartConversation(conversation, NPC, Spawn, "Oh, yes! I follow Quellious, the Tranquil child-goddess. I've been seeking inner peace for many years now. It has helped me so much! I look around and see so many others that would benefit from such personal peace.") +end + +function dlg_0_4(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/helain_conyers/qey_village01/helainconyers005.mp3", "", "", 862333499, 1544985177, Spawn) + AddConversationOption(conversation, "You find knowledge to be necessary for personal peace?", "dlg_0_5") + AddConversationOption(conversation, "Perhaps, a conversation we can have another day. I was curious if you had work for me?", "OfferQuest1") + StartConversation(conversation, NPC, Spawn, "So true. Some peace and knowledge would go far.") +end + +function dlg_0_5(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/helain_conyers/qey_village01/helainconyers006.mp3", "", "", 1674826360, 1009450237, Spawn) + AddConversationOption(conversation, "Interesting. I still think that many wage war for the sake of war, or to gain power.", "dlg_0_6") + StartConversation(conversation, NPC, Spawn, "I do! Knowledge of other cultures and philosophies is very important. Why, if everyone fully understood themselves and their neighbors, there would be no conflict or war. No need for it!") +end + +function dlg_0_6(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/helain_conyers/qey_village01/helainconyers007.mp3", "", "", 2276149336, 1155210883, Spawn) + AddConversationOption(conversation, "Hmm. Some words to think about. ", "dlg_0_7") + StartConversation(conversation, NPC, Spawn, "But see, if those people had peace, they would not seek power.") +end + +function dlg_0_7(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/helain_conyers/qey_village01/helainconyers008.mp3", "", "", 2766152393, 2773509836, Spawn) + AddConversationOption(conversation, "Wouldn't mind at all.", "OfferQuest1") + StartConversation(conversation, NPC, Spawn, "Ya know, I am glad to have found another to talk to about these kinds of things. Would you mind helping me?") +end + +function OfferQuest1(NPC, Spawn) + FaceTarget(NPC, Spawn) + OfferQuest(NPC, Spawn, QUEST_1) +end + +function OnQuest1(NPC, Spawn, conversation) + if GetQuestStep(Spawn, QUEST_1) == 2 then + SetStepComplete(Spawn, QUEST_1, 2) + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/helain_conyers/qey_village01/helainconyers010.mp3", "", "", 4087382660, 558784349, Spawn) + AddConversationOption(conversation, "You're welcome.", "LookAtAllTheBooks") + StartConversation(conversation, NPC, Spawn, "Oh, gracious! I did not expect so many at once. Thank you!") + else + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/helain_conyers/qey_village01/helainconyers025.mp3", "", "", 1625074590, 2007128908, Spawn) + AddConversationOption(conversation, "I am sorry. I have not yet done what you asked. I will be back shortly!") + StartConversation(conversation, NPC, Spawn, "Hello again! I did not expect you back so soon.") + end +end + +-------------------------------------------------------------------------------------------------------------------------- +-- QUEST 2 +-------------------------------------------------------------------------------------------------------------------------- + +function LookAtAllTheBooks(NPC, Spawn, conversation) + if conversation == nil then + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + end + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/helain_conyers/qey_village01/helainconyers011.mp3", "", "", 1566451168, 2959134489, Spawn) + AddConversationOption(conversation, "'Humans, Barbarians, and Erudites.' ", "dlg_7_2") + AddConversationOption(conversation, "'Age of Blood, Age of Glory.'", "dlg_7_3") + StartConversation(conversation, NPC, Spawn, "Oh, look at all these books you brought me. What is the title of that one, near you?") +end + +function dlg_7_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/helain_conyers/qey_village01/helainconyers012.mp3", "", "", 3119581167, 1698005795, Spawn) + AddConversationOption(conversation, "Perhaps some insight can be gained.", "dlg_7_3") + StartConversation(conversation, NPC, Spawn, "That should be a good read. We are often thought of to have evolved from the barbarian race, you know? And well, the Erudites are a more intellectual subset of us. It is interesting, and can offer a bit more of an understanding of them and ourselves, when you put it in perspective like that.") +end + +function dlg_7_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/helain_conyers/qey_village01/helainconyers013.mp3", "", "", 3228480005, 2535926237, Spawn) + AddConversationOption(conversation, "Height of human power?", "dlg_7_4") + StartConversation(conversation, NPC, Spawn, "Ah, look at this one! It is about the Age of Blood. A violent age, thought to be the height of human power, when the Combine Empire ruled over most of Norrath. If I recall right, the empire eventually splintered due to internal conflicts. Relics of the Combine Empire could be found across Norrath for ages.") +end + +function dlg_7_4(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/helain_conyers/qey_village01/helainconyers031.mp3", "", "", 3917036825, 1372729086, Spawn) + AddConversationOption(conversation, "Quite the testament to the humans who built Qeynos.", "dlg_7_5") + StartConversation(conversation, NPC, Spawn, "That is not to say, that as a race, our time has come and gone. Why, just look at this city as an example. Qeynos has survived thousands of years, through wars, sieges, disease, famine, betrayals, and cataclysms, we have endured!") +end + +function dlg_7_5(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/helain_conyers/qey_village01/helainconyers034.mp3", "", "", 3381534468, 2598998174, Spawn) + AddConversationOption(conversation, "And humans still rule it.", "dlg_7_6") + StartConversation(conversation, NPC, Spawn, "I should say so! We should be proud of them, and of ourselves for continuing the work. Our city, like us, has survived by adapting. Thus, it still stands and is open to all that seek its protection.") +end + +function dlg_7_6(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/helain_conyers/qey_village01/helainconyers032.mp3", "", "", 2855759340, 2852857359, Spawn) + AddConversationOption(conversation, "Yeah. Uh oh!", "dlg_7_7") + StartConversation(conversation, NPC, Spawn, "Of course. Queen Antonia Bayle is someone who understands the ways of peace and knowledge. She's to be admired by all! Listen to me prattling on... Is that another book I see?") +end + +function dlg_7_7(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/helain_conyers/qey_village01/helainconyers014.mp3", "", "", 2665081235, 3868863075, Spawn) + AddConversationOption(conversation, "It was, and Andret told me to be careful, but it is now missing some of its pages. ", "dlg_7_8") + StartConversation(conversation, NPC, Spawn, "What's wrong? Uh, that book looks ragged. Don't worry, I'll bet its spine was broken when you got it.") +end + +function dlg_7_8(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/helain_conyers/qey_village01/helainconyers015.mp3", "", "", 4075505082, 3317310532, Spawn) + AddConversationOption(conversation, "I will go look for the pages. I dropped them, so I will find them. ", "OfferQuest2") + StartConversation(conversation, NPC, Spawn, "Oh, dear. You're right. We are missing six pages from the book 'Followers of Brell Serilis.' That would have been a great read, too. Oh, that's too bad.") +end + +function OfferQuest2(NPC, Spawn) + FaceTarget(NPC, Spawn) + OfferQuest(NPC, Spawn, QUEST_2) +end + +function OnQuest2(NPC, Spawn, conversation) + if GetQuestStep(Spawn, QUEST_2) == 2 then + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/helain_conyers/qey_village01/helainconyers017.mp3", "", "", 2087241060, 3147700165, Spawn) + AddConversationOption(conversation, "I did! Though they are a little more smudged with dirt now.", "dlg_10_1") + StartConversation(conversation, NPC, Spawn, "Did you find all the pages?") + else + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/helain_conyers/qey_village01/helainconyers025.mp3", "", "", 1625074590, 2007128908, Spawn) + AddConversationOption(conversation, "I am sorry. I have not yet done what you asked. I will be back shortly!") + StartConversation(conversation, NPC, Spawn, "Hello again! I did not expect you back so soon.") + end +end + +function dlg_10_1(NPC, Spawn) + SetStepComplete(Spawn, QUEST_2, 2) + + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/helain_conyers/qey_village01/helainconyers018.mp3", "", "", 4089087839, 2292542610, Spawn) + AddConversationOption(conversation, "I guess it is rather fitting.", "ANaturalHere") + StartConversation(conversation, NPC, Spawn, "Oh well, I'm sure the Duke of Below doesn't mind being a bit soiled.") +end + +-------------------------------------------------------------------------------------------------------------------------- +-- QUEST 3 +-------------------------------------------------------------------------------------------------------------------------- + +function ANaturalHere(NPC, Spawn, conversation) + if conversation == nil then + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + end + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/helain_conyers/qey_village01/helainconyers020.mp3", "", "", 2357657431, 1390308351, Spawn) + AddConversationOption(conversation, "Thanks. I just try to do what's right.", "dlg_10_3") + AddConversationOption(conversation, "Would you happen to have any other work for me?", "OfferQuest3") + StartConversation(conversation, NPC, Spawn, "You know, you are a natural here in Qeynos. So willing to learn and help your fellow citizens.") +end + +function dlg_10_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/helain_conyers/qey_village01/helainconyers021.mp3", "", "", 2715980640, 3245538913, Spawn) + AddConversationOption(conversation, "You refer to Lucan and Freeport when you speak of ruling with fear. ", "dlg_10_4") + StartConversation(conversation, NPC, Spawn, "That will do you well in these troubled times, no matter your faith. Qeynos is a collective people who are all driven by the same desire to better the world rather than being ruled by fear.") +end + +function dlg_10_4(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/helain_conyers/qey_village01/helainconyers022.mp3", "", "", 1835163421, 380513186, Spawn) + AddConversationOption(conversation, "I hope so. Would you happen to have any other work for me?", "OfferQuest3") + StartConversation(conversation, NPC, Spawn, "I do. We strive to live as free individuals here in Qeynos. Everyone is doing their best to serve Queen Antonia and our community. You have already shown yourself to fit in nicely!") +end + +function OfferQuest3(NPC, Spawn) + FaceTarget(NPC, Spawn) + OfferQuest(NPC, Spawn, QUEST_3) +end + +function OnQuest3(NPC, Spawn, conversation) + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/helain_conyers/qey_village01/helainconyers024.mp3", "", "", 1790327288, 1244496180, Spawn) + AddConversationOption(conversation, "I have not asked all of them, but so far, no.") + StartConversation(conversation, NPC, Spawn, "Did my friends have some work for you, Lophodeuh?") +end + +function HaveYouFoundWork(NPC, Spawn, conversation) + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/helain_conyers/qey_village01/helainconyers028.mp3", "", "", 1128584230, 3587308240, Spawn) + AddConversationOption(conversation, "Laudine sent me to Johfrit Gythell. He has some work for me.") + StartConversation(conversation, NPC, Spawn, "Have you found work, friend? ") +end + +function FoundPathToPeace(NPC, Spawn, conversation) + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/helain_conyers/qey_village01/helainconyers026.mp3", "", "", 2566936431, 637185107, Spawn) + AddConversationOption(conversation, "I have found my path. Let's hope it leads to peace.") + StartConversation(conversation, NPC, Spawn, "Have you found your path to peace, friend?") +end \ No newline at end of file diff --git a/server/SpawnScripts/Nettleville/InnkeeperBailyDowden.lua b/server/SpawnScripts/Nettleville/InnkeeperBailyDowden.lua new file mode 100644 index 000000000..f87f12ab1 --- /dev/null +++ b/server/SpawnScripts/Nettleville/InnkeeperBailyDowden.lua @@ -0,0 +1,85 @@ +--[[ + Script Name : SpawnScripts/Nettleville/InnkeeperBailyDowden.lua + Script Purpose : Innkeeper Baily Dowden + Script Author : Scatman + Script Date : 2009.08.12 + Script Notes : +--]] + +function spawn(NPC) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "innkeeper_uglar_splinterthumb/qey_village01/innkeeper001.mp3", "", "", 3113863761, 2642679335, Spawn) + AddConversationOption(conversation, "How can I place an item in my house?", "dlg_26_1") + AddConversationOption(conversation, "What kind of housing is available to me?", "dlg_26_7") + AddConversationOption(conversation, "What is the marketboard for?", "dlg_26_2") + AddConversationOption(conversation, "What is my house for?", "dlg_26_4") + AddConversationOption(conversation, "Nothing right now.") + StartConversation(conversation, NPC, Spawn, "Hello there " .. GetName(Spawn) .. ", what can I help you with?") +end + +function dlg_26_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "What kind of housing is available to me?", "dlg_26_7") + AddConversationOption(conversation, "What is the marketboard for?", "dlg_26_2") + AddConversationOption(conversation, "What is my house for?", "dlg_26_4") + AddConversationOption(conversation, "That's enough for now, thanks.") + StartConversation(conversation, NPC, Spawn, "To place an item in your house you must first find the item in your inventory, once you have done so right-click on the item and select the ‘place’ option. You will then see a tinted outline of your item in your house, when the item is highlighted green you may place it in that location, if it is highlighted red you cannot.") +end + +function dlg_26_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "How do I sell items using my marketboard?") + AddConversationOption(conversation, "How can I place an item in my house?", "dlg_26_3") + AddConversationOption(conversation, "What kind of housing is available to me?", "dlg_26_7") + AddConversationOption(conversation, "What is my house for?", "dlg_26_4") + AddConversationOption(conversation, "That’s enough for now, thanks.") + StartConversation(conversation, NPC, Spawn, "The marketboard is a house item, similar to books, beds, pets and other such items. What sets the marketboard apart from the rest however is that once your marketboard is mounted on a wall in your home you can use it to sell items to other citizens of Qeynos. These items can be purchased by your fellow citizens at a Broker. Brokers can be found in all primary districts of the city as well as in the Tradeskill wholesalers.") +end + +function dlg_26_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "What kind of housing is available to me?","dlg_26_7") + AddConversationOption(conversation, "What is the marketboard for?", "dlg_26_2") + AddConversationOption(conversation, "What is my house for?", "dlg_26_4") + AddConversationOption(conversation, "That's enough for now, thanks.") + StartConversation(conversation, NPC, Spawn, "To place an item in your house you must first find the item in your inventory, once you have done so right-click on the item and select the ‘place’ option. You will then see a tinted outline of your item in your house, when the item is highlighted green you may place it in that location, if it is highlighted red you cannot.") +end + +function dlg_26_4(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "Anything else?") + AddConversationOption(conversation, "How can I place an item in my house?", "dlg_26_1") + AddConversationOption(conversation, "What kind of housing is available to me?", "dlg_26_7") + AddConversationOption(conversation, "What is the marketboard for?", "dlg_26_2") + AddConversationOption(conversation, "That's enough for now, thanks.") + StartConversation(conversation, NPC, Spawn, "You will find that your house has many uses, the first of which is the ability to store house items. Each house has a limit to the number of house items you can place in it, so as you gain more possessions you wish to display you will need larger houses to do so.") +end + +function dlg_26_7(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "Is any other housing available?") + AddConversationOption(conversation, "How can I place an item in my house?", "dlg_26_1") + AddConversationOption(conversation, "What is the marketboard for?", "dlg_26_2") + AddConversationOption(conversation, "What is my house for?", "dlg_26_4") + AddConversationOption(conversation, "That's enough for now, thanks.") + StartConversation(conversation, NPC, Spawn, "Many different kinds of housing are available in the city of Qeynos. As a show of appreciation, Antonia Bayle has awarded you a one bedroom house for free at this time.") +end \ No newline at end of file diff --git a/server/SpawnScripts/Nettleville/JohfritGythell.lua b/server/SpawnScripts/Nettleville/JohfritGythell.lua new file mode 100644 index 000000000..c4e9e6bbc --- /dev/null +++ b/server/SpawnScripts/Nettleville/JohfritGythell.lua @@ -0,0 +1,206 @@ +--[[ + Script Name : SpawnScripts/Nettleville/JohfritGythell.lua + Script Purpose : Johfrit Gythell + Script Author : Scatman + Script Date : 2008.10.08 + Script Notes : +--]] + +local QUEST_3_FROM_HELAIN = 297 +local QUEST_4 = 298 +local QUEST_5 = 299 + +function spawn(NPC) + ProvidesQuest(NPC, QUEST_4) + ProvidesQuest(NPC, QUEST_5) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + if HasCompletedQuest(Spawn, QUEST_3_FROM_HELAIN) then + if HasCompletedQuest(Spawn, QUEST_4) then + if HasCompletedQuest(Spawn, QUEST_5) then + OnQuest5(NPC, Spawn, conversation) + elseif HasQuest(Spawn, QUEST_5) then + OnQuest5(NPC, Spawn, conversation) + else + DoNotGoYet(NPC, Spawn, conversation) + end + elseif HasQuest(Spawn, QUEST_4) then + OnQuest4(NPC, Spawn, conversation) + else + GoodDayThere(NPC, Spawn, conversation) + end + elseif HasQuest(Spawn, QUEST_3_FROM_HELAIN) and GetQuestStep(Spawn, QUEST_3_FROM_HELAIN) == 5 then + GoodDayThere(NPC, Spawn, conversation) + else + Hello(NPC, Spawn, conversation) + end +end + +function Hello(NPC, Spawn, conversation) + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/johfrit_gythell/qey_village01/johfritgythell012.mp3", "", "", 1490365584, 959312393, Spawn) + AddConversationOption(conversation, "And to you!") + StartConversation(conversation, NPC, Spawn, "Hello! I hope your day is rewarding for you.") +end + +--------------------------------------------------------------------------------------------------------------------- +-- QUEST_3_FROM_HELAIN +--------------------------------------------------------------------------------------------------------------------- + +function GoodDayThere(NPC, Spawn, conversation) + if HasQuest(Spawn, QUEST_3_FROM_HELAIN) then + SetStepComplete(Spawn, QUEST_3_FROM_HELAIN, 5) + end + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/johfrit_gythell/qey_village01/johfritgythell001.mp3", "", "", 1758157346, 514238757, Spawn) + AddConversationOption(conversation, "Hello! I don't suppose you have some work for me? Laudine Shardalow thought you could use a hand.", "dlg_24_1") + StartConversation(conversation, NPC, Spawn, "Good day, there!") +end + +--------------------------------------------------------------------------------------------------------------------- +-- QUEST_4 +--------------------------------------------------------------------------------------------------------------------- + +function dlg_24_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/johfrit_gythell/qey_village01/johfritgythell002.mp3", "", "", 1726989098, 3535948978, Spawn) + AddConversationOption(conversation, "Items others can't get for them?", "dlg_24_2") + StartConversation(conversation, NPC, Spawn, "Right she is. See, I am a supplier of goods to some discerning citizens of this village. They have particular tastes for food, and items that I can procure for them.") +end + +function dlg_24_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/johfrit_gythell/qey_village01/johfritgythell003.mp3", "", "", 480639092, 2881648434, Spawn) + AddConversationOption(conversation, "Why did they not just dive and get them?", "dlg_24_3") + AddConversationOption(conversation, "Why do you not just dive to get them?", "dlg_26_3") + StartConversation(conversation, NPC, Spawn, "Or just that I can get it for them at a lower price. Two items of my latest delivery fell in the water at the Mariner's Bell. My, uh err suppliers had slipped, and into the drink they went.") +end + +function dlg_26_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/johfrit_gythell/qey_village01/johfritgythell015.mp3", "", "", 3831285850, 3765154825, Spawn) + AddConversationOption(conversation, "You wish me to dive and get the items?", "OfferQuest4") + StartConversation(conversation, NPC, Spawn, "I cannot swim. What? Don't look at me like that!") +end + +function dlg_24_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/johfrit_gythell/qey_village01/johfritgythell004.mp3", "", "", 4017622450, 3148551148, Spawn) + AddConversationOption(conversation, "You wish me to dive and get the items?", "OfferQuest4") + StartConversation(conversation, NPC, Spawn, "To make my life difficult, I suspect. At any rate, they were not paid, as they did not complete the task.") +end + +function OfferQuest4(NPC, Spawn) + FaceTarget(NPC, Spawn) + OfferQuest(NPC, Spawn, QUEST_4) +end + +function OnQuest4(NPC, Spawn, conversation) + if GetQuestStep(Spawn, QUEST_4) < 3 then + AddConversationOption(conversation, "Not yet but I will return with them.") + StartConversation(conversation, NPC, Spawn, "Have you both the crate and barrel?") + elseif GetQuestStep(Spawn, QUEST_4) == 3 then + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/johfrit_gythell/qey_village01/johfritgythell006.mp3", "", "", 2494699442, 3684194756, Spawn) + AddConversationOption(conversation, "I have, and I will be happy to part with this slimy and stinky box.", "dlg_28_1") + StartConversation(conversation, NPC, Spawn, "You have returned, and from the smell of it you have the items!") + elseif GetQuestStep(Spawn, QUEST_4) < 6 then + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/johfrit_gythell/qey_village01/johfritgythell019.mp3", "", "", 1714492080, 3648364049, Spawn) + AddConversationOption(conversation, "Not yet. The stench of the deliveries must be affecting my focus. I will be back.") + StartConversation(conversation, NPC, Spawn, "Have you given the goods to both Amazu and Laudine, yet?") + elseif GetQuestStep(Spawn, QUEST_4) == 6 then + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/johfrit_gythell/qey_village01/johfritgythell009.mp3", "", "", 2512367033, 2556387767, Spawn) + AddConversationOption(conversation, "I do.", "dlg_33_2") + AddConversationOption(conversation, "Maybe, but what stops me from running off with it?", "dlg_33_1") + StartConversation(conversation, NPC, Spawn, "You have the money from Laudine and Amazu?") + end +end + +function dlg_28_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/johfrit_gythell/qey_village01/johfritgythell007.mp3", "", "", 3213668997, 2423736455, Spawn) + AddConversationOption(conversation, "No wonder she knew you had work for me.", "dlg_28_2") + StartConversation(conversation, NPC, Spawn, "Not so fast! That is to be delivered to Amazu Kharliko. He loves his imported squid. The barrel is to be taken to Laudine Shardalow.") +end + +function dlg_28_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/johfrit_gythell/qey_village01/johfritgythell008.mp3", "", "", 2722964210, 4250092190, Spawn) + AddConversationOption(conversation, "I'll be back shortly.", "dlg_28_3") + StartConversation(conversation, NPC, Spawn, "Ah, yes. Laudine has been waiting for that barrel for some time.") +end + +function dlg_28_3(NPC, Spawn) + SetStepComplete(Spawn, QUEST_4, 3) + + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/johfrit_gythell/qey_village01/johfritgythell018.mp3", "", "", 1724182606, 1946010139, Spawn) + AddConversationOption(conversation, "I understand.") + StartConversation(conversation, NPC, Spawn, "And be sure to get paid by each, otherwise I will not have money to give you.") +end + +function dlg_33_1(NPC, Spawn) + SetStepComplete(Spawn, QUEST_4, 6) + + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/johfrit_gythell/qey_village01/johfritgythell020.mp3", "", "", 1446803867, 734215460, Spawn) + AddConversationOption(conversation, "Makes sense.", "DoNotGoYet") + StartConversation(conversation, NPC, Spawn, "The guards that I will send after you for smuggling goods.") +end + +function dlg_33_2(NPC, Spawn) + SetStepComplete(Spawn, QUEST_4, 6) + + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/johfrit_gythell/qey_village01/johfritgythell010.mp3", "", "", 686711043, 844320139, Spawn) + AddConversationOption(conversation, "Thanks.", "DoNotGoYet") + StartConversation(conversation, NPC, Spawn, "Great! Here's the payment, as I promised, and another item that you may find useful.") +end + +--------------------------------------------------------------------------------------------------------------------- +-- QUEST_5 +--------------------------------------------------------------------------------------------------------------------- + +function DoNotGoYet(NPC, Spawn, conversation) + if conversation == nil then + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + end + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/johfrit_gythell/qey_village01/johfritgythell013.mp3", "", "", 4074891808, 4030820524, Spawn) + AddConversationOption(conversation, "Keep talking.", "OfferQuest5") + StartConversation(conversation, NPC, Spawn, "Do not go yet! I uh, may not have more for you to do, but I know of others that can use one of your talents.") +end + +function OfferQuest5(NPC, Spawn) + FaceTarget(NPC, Spawn) + OfferQuest(NPC, Spawn, QUEST_5) +end + +function OnQuest5(NPC, Spawn, conversation) + AddConversationOption(conversation, "All right, thank you anyway.") + StartConversation(conversation, NPC, Spawn, "Oh hello there, again! I wish I had more work for you, but nothing so far.") +end \ No newline at end of file diff --git a/server/SpawnScripts/Nettleville/KarrieClayton.lua b/server/SpawnScripts/Nettleville/KarrieClayton.lua new file mode 100644 index 000000000..c1bcbafb5 --- /dev/null +++ b/server/SpawnScripts/Nettleville/KarrieClayton.lua @@ -0,0 +1,25 @@ +--[[ + Script Name : SpawnScripts/Nettleville/KarrieClayton.lua + Script Purpose : Karrie Clayton + Script Author : Scatman + Script Date : 2009.08.08 + Script Notes : +--]] + +function spawn(NPC) + --AddVisualStateLoop(NPC, 2, 10, 11298) + --AddVisualStateLoop(NPC, 2, 10, 11557) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/karrie_clayton/qey_village01/karrieclayton.mp3", "", "", 1984155043, 1707628406, Spawn) + AddConversationOption(conversation, "I'm sorry. Excuse me for interrupting your performance.") + StartConversation(conversation, NPC, Spawn, "Oh my! Yet another overzealous admirer. Please wait till after the show for autographs.") +end \ No newline at end of file diff --git a/server/SpawnScripts/Nettleville/KatheyBrewsher.lua b/server/SpawnScripts/Nettleville/KatheyBrewsher.lua new file mode 100644 index 000000000..2fd27a196 --- /dev/null +++ b/server/SpawnScripts/Nettleville/KatheyBrewsher.lua @@ -0,0 +1,43 @@ +--[[ + Script Name : SpawnScripts/Nettleville/KatheyBrewsher.lua + Script Purpose : Kathey Brewsher + Script Author : Scatman + Script Date : 2009.08.12 + Script Notes : +--]] + +function spawn(NPC) + SetPlayerProximityFunction(NPC, 10, "InRange", "LeaveRange") +end + +function respawn(NPC) + spawn(NPC) +end + +function InRange(NPC, Spawn) + local chance = math.random(0, 100) + if chance <= 25 then + Talk(NPC, Spawn) + end +end + +function LeaveRange(NPC, Spawn) +end + +function hailed(NPC, Spawn) + Talk(NPC, Spawn) +end + +function Talk(NPC, Spawn) + FaceTarget(NPC, Spawn) + local choice = math.random(1, 4) + if choice == 1 then + PlayFlavor(NPC, "", "Might I interest you in some meat and cheese to go with that tall glass of ale?", "shrug", 1689589577, 4560189, Spawn) + elseif choice == 2 then + PlayFlavor(NPC, "", "The best part about this job is all the extra coin I get.", "wink", 1689589577, 4560189, Spawn) + elseif choice == 3 then + PlayFlavor(NPC, "", "I bet you have some stories, eh? Adventuring must be an exciting life!", "smile", 1689589577, 4560189, Spawn) + elseif choice == 4 then + PlayFlavor(NPC, "", "What can I get for ya?", "nod", 1689589577, 4560189, Spawn) + end +end diff --git a/server/SpawnScripts/Nettleville/KumbufuAri.lua b/server/SpawnScripts/Nettleville/KumbufuAri.lua new file mode 100644 index 000000000..5fa5806d3 --- /dev/null +++ b/server/SpawnScripts/Nettleville/KumbufuAri.lua @@ -0,0 +1,47 @@ +--[[ + Script Name : SpawnScripts/Nettleville/KumbufuAri.lua + Script Purpose : Kumbufu Ari + Script Author : Scatman + Script Date : 2009.08.12 + Script Notes : +--]] + +function spawn(NPC) + SetPlayerProximityFunction(NPC, 10, "InRange", "LeaveRange") +end + +function respawn(NPC) + spawn(NPC) +end + +function InRange(NPC, Spawn) + local choice = math.random(0, 100) + if choice <= 25 then + Talk(NPC, Spawn) + end +end + +function LeaveRange(NPC, Spawn) +end + +function hailed(NPC, Spawn) + Talk(NPC, Spawn) +end + +function Talk(NPC, Spawn) + FaceTarget(NPC, Spawn) + local choice = math.random(1, 6) + if choice == 1 then + PlayFlavor(NPC, "voiceover/english/kerran_eco_good_1/ft/service/weaponsmith/kerran_weaponsmith_service_good_1_hail_gm_1248b278.mp3", "I just got a shipment in from the Far Sea's Trading Company. I don't just show anybody this stuff so, shhhh! ", "wink", 3547253110, 2896491555, Spawn) + elseif choice == 2 then + PlayFlavor(NPC, "voiceover/english/kerran_eco_good_1/ft/service/weaponsmith/kerran_weaponsmith_service_good_1_hail_gm_48594671.mp3", "Is there something you need to have custom made? I can see if I can get one of my lads to look into it!", "ponder", 4263084610, 4279030372, Spawn) + elseif choice == 3 then + PlayFlavor(NPC, "voiceover/english/kerran_eco_good_1/ft/service/weaponsmith/kerran_weaponsmith_service_good_1_hail_gm_37dbcab8.mp3", "Welcome to my humble shop. We have quite a selection of weapons to choose from. See for yourself...", "salute", 2923552658, 290527830, Spawn) + elseif choice == 4 then + PlayFlavor(NPC, "voiceover/english/kerran_eco_good_1/ft/service/weaponsmith/kerran_weaponsmith_service_good_1_aoi_gm_cc3887ba.mp3", "It's the duty of all citizens to protect the innocent. Purchase your weapons here for the honor of Qeynos.", "scold", 1978098526, 3344178102, Spawn) + elseif choice == 5 then + PlayFlavor(NPC, "voiceover/english/kerran_eco_good_1/ft/service/weaponsmith/kerran_weaponsmith_service_good_1_hail_gm_46ed66f6.mp3", "Never go into battle without a tried and trusted weapon. Take a look at what we have in stock.", "no", 3072112550, 2391899341, Spawn) + elseif choice == 6 then + PlayFlavor(NPC, "voiceover/english/kerran_eco_good_1/ft/service/weaponsmith/kerran_weaponsmith_service_good_1_aoi_gm_cc3887ba.mp3", "It's the duty of all citizens to protect the innocent. Purchase your weapons here for the honor of Qeynos.", "scold", 1978098526, 3344178102, Spawn) + end +end diff --git a/server/SpawnScripts/Nettleville/LakoshaMaera.lua b/server/SpawnScripts/Nettleville/LakoshaMaera.lua new file mode 100644 index 000000000..cd80118e0 --- /dev/null +++ b/server/SpawnScripts/Nettleville/LakoshaMaera.lua @@ -0,0 +1,395 @@ +--[[ + Script Name : SpawnScripts/Nettleville/LakoshaMaera.lua + Script Purpose : Lakosha Maera + Script Author : Scatman + Script Date : 2009.08.21 + Script Notes : +--]] + +-- Race ID's +local KERRA = 11 + +-- Quest ID's +local RITUAL_OF_HEALTH = 300 -- was 37 +local CURIOUS_FINDINGS = 301 -- was 38 +local REQUIRED_COMPONENTS = 302 -- was 39 +local UNFORTUNATE_MISTAKES = 303 -- was 40 +local TO_THE_SOURCE = 304 -- was 41 + +function spawn(NPC) + ProvidesQuest(NPC, RITUAL_OF_HEALTH) + ProvidesQuest(NPC, CURIOUS_FINDINGS) + ProvidesQuest(NPC, UNFORTUNATE_MISTAKES) + ProvidesQuest(NPC, TO_THE_SOURCE) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + if HasCompletedQuest(Spawn, RITUAL_OF_HEALTH) then + if HasCompletedQuest(Spawn, CURIOUS_FINDINGS) then + if HasCompletedQuest(Spawn, REQUIRED_COMPONENTS) then + if HasCompletedQuest(Spawn, UNFORTUNATE_MISTAKES) then + if HasCompletedQuest(Spawn, TO_THE_SOURCE) then + + elseif HasQuest(Spawn, TO_THE_SOURCE) then + SpokenWithLithYet(NPC, Spawn) + else + StoppedRitualYetYes(NPC, Spawn) + end + elseif HasQuest(Spawn, UNFORTUNATE_MISTAKES) then + if GetQuestStep(Spawn, UNFORTUNATE_MISTAKES) == 1 then + StoppedRitualYetNo(NPC, Spawn) + elseif GetQuestStep(Spawn, UNFORTUNATE_MISTAKES) == 2 then + StoppedRitualYetYes(NPC, Spawn) + end + else + FindOutWhatWasInSoilYes(NPC, Spawn) + end + elseif HasQuest(Spawn, REQUIRED_COMPONENTS) then + if GetQuestStep(Spawn, REQUIRED_COMPONENTS) >= 1 and GetQuestStep(Spawn, REQUIRED_COMPONENTS) <= 3 then + FindOutWhatWasInSoilNo(NPC, Spawn) + elseif GetQuestStep(Spawn, REQUIRED_COMPONENTS) == 5 then + FindOutWhatWasInSoilYes(NPC, Spawn) + end + else + FindOutWhatWasInSoilNo(NPC, Spawn) + end + elseif HasQuest(Spawn, CURIOUS_FINDINGS) then + FindOutWhatWasInSoilNo(NPC, Spawn) + else + GetSoilYetYes(NPC, Spawn) + end + elseif HasQuest(Spawn, RITUAL_OF_HEALTH) then + if GetQuestStep(Spawn, RITUAL_OF_HEALTH) == 4 then + GetSoilYetYes(NPC, Spawn) + else + GetSoilYetNo(NPC, Spawn) + end + else + if GetRace(Spawn) == KERRA then + DoYouSeekDirection(NPC, Spawn) + else + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/lakosha_maera/qey_village01/qst_lakosha_maera_notkerra_4ac0f123.mp3", "I am sorry, but I am not in a mood to speak.", "", 2967268605, 2864900763, Spawn) + end + end +end + +-------------------------------------------------------------------------------------------------------------------- +-- QUEST 1 +-------------------------------------------------------------------------------------------------------------------- + +function DoYouSeekDirection(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/lakosha_maera/qey_village01/quests/lakosha_maera/lakosha_maera001.mp3", "", "", 3108156461, 1871862413, Spawn) + AddConversationOption(conversation, "What do you mean?", "dlg_15_1") + StartConversation(conversation, NPC, Spawn, "Greetings. Do you seek direction?") +end + +function dlg_15_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/lakosha_maera/qey_village01/quests/lakosha_maera/lakosha_maera002.mp3", "", "", 216566417, 180925659, Spawn) + AddConversationOption(conversation, "How do rituals help?", "dlg_15_2") + StartConversation(conversation, NPC, Spawn, "Direction. Purpose. Meaning. I have seen our people struggle with it from time to time, some unaware. I help, with words and friendship, but mostly with rituals.") +end + + +function dlg_15_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/lakosha_maera/qey_village01/quests/lakosha_maera/lakosha_maera003.mp3", "", "", 3025633439, 1456244576, Spawn) + AddConversationOption(conversation, "What kind of rituals do you teach?", "dlg_15_3") + StartConversation(conversation, NPC, Spawn, "They give us something to hold on to that we know others are also holding on to. It helps, and we can use that help as little or as much as we need to.") +end + +function dlg_15_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/lakosha_maera/qey_village01/quests/lakosha_maera/lakosha_maera004.mp3", "", "", 1100012524, 2857852328, Spawn) + AddConversationOption(conversation, "I am interested in learning the ritual.", "dlg_15_4") + AddConversationOption(conversation, "I would prefer a more challenging task.", "dlg_16_4") + StartConversation(conversation, NPC, Spawn, "All kinds, old and new. They have helped our people--well, some of our people--for ages. I could teach a simple one to you if you like. It may or may not help you, but it is easy to learn and almost anyone can do it. If a ritual does not appeal to you, and you wish something more challenging, I believe I know where you can find that as well.") +end + +function dlg_15_4(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/lakosha_maera/qey_village01/quests/lakosha_maera/lakosha_maera006.mp3", "", "", 960364760, 2384294721, Spawn) + AddConversationOption(conversation, "How much dirt do I need?", "OfferQuest1") + StartConversation(conversation, NPC, Spawn, "I am pleased to hear that. The Ritual of Hearth is simple, and it is a means of becoming acquainted with one's home. It requires only the gathering of soil from three separate places where you dwell. In Nettleville the most appropriate places are the tree just south of here--at the western end of the Market Row, the tree near the entrance to the Peat Bog, and around the gate that leads into Qeynos.") +end + +function dlg_16_4(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/lakosha_maera/qey_village01/quests/lakosha_maera/lakosha_maera005.mp3", "", "", 3531677818, 1764879381, Spawn) + AddConversationOption(conversation, "I will seek him out.") + AddConversationOption(conversation, "On second though, I would like to learn the ritual.", "dlg_15_4") + StartConversation(conversation, NPC, Spawn, "That task I cannot provide, but I can put you on a path to find it. In the Peat Bog, a friend of mine has been doing some research. His name is Nareh Lith, and he is always accepting of proposed help.") +end + +function GetSoilYetNo(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/lakosha_maera/qey_village01/quests/lakosha_maera/lakosha_maera008.mp3", "", "", 3730752906, 155519371, Spawn) + AddConversationOption(conversation, "No, I have not.") + StartConversation(conversation, NPC, Spawn, "Have you collected the soil?") +end + +function GetSoilYetYes(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/lakosha_maera/qey_village01/quests/lakosha_maera/lakosha_maera008.mp3", "", "", 3730752906, 155519371, Spawn) + AddConversationOption(conversation, "Yes, I have.", "dlg_19_1") + StartConversation(conversation, NPC, Spawn, "Have you collected the soil?") +end + +function dlg_19_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/lakosha_maera/qey_village01/quests/lakosha_maera/lakosha_maera009.mp3", "", "", 1477384079, 55827537, Spawn) + AddConversationOption(conversation, "Ok. [let the soil pass between your fingers]", "dlg_19_2") + StartConversation(conversation, NPC, Spawn, "Good. Now, let it pass between your fingers and fall to the ground at your feet.") +end + + +function dlg_19_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/lakosha_maera/qey_village01/quests/lakosha_maera/lakosha_maera010.mp3", "", "", 3892927672, 816906452, Spawn) + AddConversationOption(conversation, "I do not feel any different.", "dlg_19_3") + AddConversationOption(conversation, "I feel more at home already!", "dlg_19_3") + StartConversation(conversation, NPC, Spawn, "Good, good... the ritual is complete. Nettleville now knows you, and perhaps you now know it.") +end + +function OfferQuest1(NPC, Spawn) + FaceTarget(NPC, Spawn) + OfferQuest(NPC, Spawn, RITUAL_OF_HEALTH) +end + +-------------------------------------------------------------------------------------------------------------------- +-- QUEST 2 +-------------------------------------------------------------------------------------------------------------------- + +function dlg_19_3(NPC, Spawn) + if HasQuest(Spawn, RITUAL_OF_HEALTH) then + SetStepComplete(Spawn, RITUAL_OF_HEALTH, 4) + end + + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/lakosha_maera/qey_village01/quests/lakosha_maera/lakosha_maera011.mp3", "", "", 877184864, 471092130, Spawn) + AddConversationOption(conversation, "Yes, I did.", "dlg_19_4") + StartConversation(conversation, NPC, Spawn, "For some the change is instant. For others it takes more time. Take this coin, it too is part of a ritual. This one of welcoming. Hm, did you collect this soil from where I specified?") +end + +function dlg_19_4(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/lakosha_maera/qey_village01/quests/lakosha_maera/lakosha_maera012.mp3", "", "", 365783891, 519851629, Spawn) + AddConversationOption(conversation, "What do you need?", "dlg_19_5") + AddConversationOption(conversation, "Sorry, I can't right now.") + StartConversation(conversation, NPC, Spawn, "That is interesting. This soil is not the proper color. Hmm, and it smells a little odd. Imolau, this is a little concerning. This soil looks like someone was in the middle of the Pa'Rok, but there are elements here that do not belong. It may be nothing, but it also may be something. Would you do me a favor?") +end + +function dlg_19_5(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/lakosha_maera/qey_village01/quests/lakosha_maera/lakosha_maera013.mp3", "", "", 172847039, 638167001, Spawn) + AddConversationOption(conversation, "I will do that now.", "OfferQuest2") + StartConversation(conversation, NPC, Spawn, "Could you take some of this soil to the Spiritist? Laharn Rahai is his name, you can find him just northeast of the armor shop here in Nettleville. Ask him if he can find out what is in the soil.") +end + +function FindOutWhatWasInSoilNo(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/lakosha_maera/qey_village01/quests/lakosha_maera/lakosha_maera014.mp3", "", "", 1143283618, 2442308330, Spawn) + AddConversationOption(conversation, "Not yet.") + StartConversation(conversation, NPC, Spawn, "Did the spiritist find out what was in the soil?") +end + +function OfferQuest2(NPC, Spawn) + FaceTarget(NPC, Spawn) + OfferQuest(NPC, Spawn, CURIOUS_FINDINGS) +end + +-------------------------------------------------------------------------------------------------------------------- +-- QUEST 3 +-------------------------------------------------------------------------------------------------------------------- + +function FindOutWhatWasInSoilYes(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/lakosha_maera/qey_village01/quests/lakosha_maera/lakosha_maera014.mp3", "", "", 1143283618, 2442308330, Spawn) + AddConversationOption(conversation, "Yes.", "dlg_28_1") + StartConversation(conversation, NPC, Spawn, "Did the spiritist find out what was in the soil?") +end + +function dlg_28_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/lakosha_maera/qey_village01/quests/lakosha_maera/lakosha_maera015.mp3", "", "", 681420516, 1462428671, Spawn) + AddConversationOption(conversation, "Laharn first sent me to the alchemists to attempt to enlist their help. They refused, stating that they were too busy.", "dlg_28_2") + StartConversation(conversation, NPC, Spawn, "Tell me what happened.") +end + +function dlg_28_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/lakosha_maera/qey_village01/quests/lakosha_maera/lakosha_maera016.mp3", "", "", 1395658399, 725264089, Spawn) + AddConversationOption(conversation, "After I gathered the components for Laharn, he performed the test. He is very worried. He says the ritual is corrupted, but that there is one final stage needed to complete it.", "dlg_28_3") + StartConversation(conversation, NPC, Spawn, "No surprise there.") +end + +function dlg_28_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/lakosha_maera/qey_village01/quests/lakosha_maera/lakosha_maera017.mp3", "", "", 3652032020, 1710878793, Spawn) + AddConversationOption(conversation, "And beyond that Laharn says there may be danger, to the spirit or the person performing the ritual.", "dlg_28_4") + StartConversation(conversation, NPC, Spawn, "That stage will be a waste.") +end + +function dlg_28_4(NPC, Spawn) + SetStepComplete(Spawn, REQUIRED_COMPONENTS, 5) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/lakosha_maera/qey_village01/quests/lakosha_maera/lakosha_maera018.mp3", "", "", 777539162, 2279868143, Spawn) + AddConversationOption(conversation, "I can.", "dlg_28_5") + StartConversation(conversation, NPC, Spawn, "Then it must be stopped. You must return to the three places from which you gathered soil and find the person who is performing this ritual, they will be at one of them. Can you do this?") +end + +-------------------------------------------------------------------------------------------------------------------- +-- QUEST 4 +-------------------------------------------------------------------------------------------------------------------- + +function dlg_28_5(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/lakosha_maera/qey_village01/quests/lakosha_maera/lakosha_maera019.mp3", "", "", 972178161, 3123309728, Spawn) + AddConversationOption(conversation, "I remember.", "OfferQuest4") + StartConversation(conversation, NPC, Spawn, "Good. In case you forgot, you gathered the soil at the tree on the western end of the Market Row, the tree near the entrance to the Peat Bog, and near the gates that lead into Qeynos.") +end + +function OfferQuest4(NPC, Spawn) + FaceTarget(NPC, Spawn) + OfferQuest(NPC, Spawn, UNFORTUNATE_MISTAKES) +end + +function dlg_29_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/lakosha_maera/qey_village01/quests/lakosha_maera/lakosha_maera015.mp3", "", "", 681420516, 1462428671, Spawn) + AddConversationOption(conversation, "Laharn first sent me to the alchemists to attempt to enlist their help. They refused, stating that they were too busy.", "dlg_29_2") + StartConversation(conversation, NPC, Spawn, "Tell me what happened.") +end + +function StoppedRitualYetNo(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/lakosha_maera/qey_village01/quests/lakosha_maera/lakosha_maera020.mp3", "", "", 3049124346, 1314797650, Spawn) + AddConversationOption(conversation, "No, not yet.") + StartConversation(conversation, NPC, Spawn, "Have you stopped the ritual?") +end + +function StoppedRitualYetYes(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/lakosha_maera/qey_village01/quests/lakosha_maera/lakosha_maera020.mp3", "", "", 3049124346, 1314797650, Spawn) + AddConversationOption(conversation, "I was too late, the ritual was completed.", "dlg_34_1") + StartConversation(conversation, NPC, Spawn, "Have you stopped the ritual?") +end + +function dlg_34_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/lakosha_maera/qey_village01/quests/lakosha_maera/lakosha_maera021.mp3", "", "", 1097663315, 806264705, Spawn) + AddConversationOption(conversation, "His name was Ralkesh Orto. I met him near the entrance to the Peat Bog. He had finished the Pa'Rok earlier. He came back after feeling no better off. When he and I were both there some sort of spirit attacked.", "dlg_34_2") + + + StartConversation(conversation, NPC, Spawn, "I feared we would be too late. Do you know who performed the ritual? He may be in danger.") +end + +function dlg_34_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/lakosha_maera/qey_village01/quests/lakosha_maera/lakosha_maera022.mp3", "", "", 4078309873, 3485008964, Spawn) + AddConversationOption(conversation, "We are both fine. I fought the spirit, it left. Ralkesh will find Laharn and see what he can do to reattempt the ritual, properly.", "dlg_34_3") + StartConversation(conversation, NPC, Spawn, "You look all right, how is he?") +end + +function dlg_34_3(NPC, Spawn) + SetStepComplete(Spawn, UNFORTUNATE_MISTAKES, 2) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/lakosha_maera/qey_village01/quests/lakosha_maera/lakosha_maera023.mp3", "", "", 366740379, 2790792055, Spawn) + AddConversationOption(conversation, "Ralkesh said he got the soil he used from the Peat Bog.", "dlg_34_4") + StartConversation(conversation, NPC, Spawn, "I wonder why it went so wrong.") +end + +--------------------------------------------------------------------------------------------------------------------- +-- QUEST 5 +--------------------------------------------------------------------------------------------------------------------- + +function dlg_34_4(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/lakosha_maera/qey_village01/quests/lakosha_maera/lakosha_maera024.mp3", "", "", 2784457515, 1936365380, Spawn) + AddConversationOption(conversation, "I am willing.", "dlg_34_5") + StartConversation(conversation, NPC, Spawn, "Ah, very good thinking of you to find that out. Perhaps further investigation will turn something up, perhaps not. How do you feel about venturing into the Peat Bog?") +end + +function dlg_34_5(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/lakosha_maera/qey_village01/quests/lakosha_maera/lakosha_maera025.mp3", "", "", 3981705980, 3354159055, Spawn) + AddConversationOption(conversation, "All right.", "OfferQuest5") + StartConversation(conversation, NPC, Spawn, "How fortunate. Nareh Lith is a friend of mine, and he has been studying the Peat Bog for some time now.") +end + +function SpokenWithLithYet(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/lakosha_maera/qey_village01/quests/lakosha_maera/lakosha_maera026.mp3", "", "", 47750656, 1276810438, Spawn) + AddConversationOption(conversation, "No, not yet.", "dlg_35_1") + StartConversation(conversation, NPC, Spawn, "Have you spoken with Nareh Lith yet?") +end + +function OfferQuest5(NPC, Spawn) + OfferQuest(NPC, Spawn, TO_THE_SOURCE) +end \ No newline at end of file diff --git a/server/SpawnScripts/Nettleville/LaudineShardalow.lua b/server/SpawnScripts/Nettleville/LaudineShardalow.lua new file mode 100644 index 000000000..10f5e75b7 --- /dev/null +++ b/server/SpawnScripts/Nettleville/LaudineShardalow.lua @@ -0,0 +1,127 @@ +--[[ + Script Name : SpawnScripts/Nettleville/LaudineShardalow.lua + Script Purpose : Laudine Shardalow + Script Author : Scatman + Script Date : 2009.08.08 + Script Notes : +--]] + +local QUEST_3_FROM_HELAIN = 297 +local QUEST_4_FROM_JOHFRIT = 298 + +function spawn(NPC) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + if HasQuest(Spawn, QUEST_4_FROM_JOHFRIT) and GetQuestStep(Spawn, QUEST_4_FROM_JOHFRIT) == 5 then + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/laudine_shardalow/qey_village01/quests/newbie_path_human/laudineshardalow014.mp3", "", "", 3899128570, 664520913, Spawn) + AddConversationOption(conversation, "He did indeed. And that is why I am here.", "dlg_32_1") + StartConversation(conversation, NPC, Spawn, "Didn't Johfrit Gythell have some work for you? ") + elseif HasQuest(Spawn, QUEST_3_FROM_HELAIN) then + if GetQuestStep(Spawn, QUEST_3_FROM_HELAIN) == 4 then + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/laudine_shardalow/qey_village01/quests/newbie_path_human/laudineshardalow001.mp3", "", "", 533537902, 3419616012, Spawn) + AddConversationOption(conversation, "Yes, and I feel like I am getting to know it rather quickly.", "dlg_23_1") + StartConversation(conversation, NPC, Spawn, "Hail, friend. I do not recognize you. New to these parts? ") + else + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/laudine_shardalow/qey_village01/quests/newbie_path_human/laudineshardalow014.mp3", "", "", 3899128570, 664520913, Spawn) + AddConversationOption(conversation, "I have forgotten where he was.", "Forgot") + StartConversation(conversation, NPC, Spawn, "Didn't Johfrit Gythell have some work for you? ") + end + else + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/laudine_shardalow/qey_village01/quests/newbie_path_human/laudineshardalow011.mp3", "", "", 914739778, 33666592, Spawn) + AddConversationOption(conversation, "And to you, madam.") + StartConversation(conversation, NPC, Spawn, "It is a beautiful day! I hope the gods are smiling upon you.") + end +end + +function dlg_23_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/laudine_shardalow/qey_village01/quests/newbie_path_human/laudineshardalow002.mp3", "", "", 3635283512, 863467573, Spawn) + AddConversationOption(conversation, "Yes, in fact it was Helain Conyers' advice that I come to you. ", "dlg_23_2") + StartConversation(conversation, NPC, Spawn, "Met many others? ") +end + +function dlg_23_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/laudine_shardalow/qey_village01/quests/newbie_path_human/laudineshardalow003.mp3", "", "", 2440988908, 3275070122, Spawn) + AddConversationOption(conversation, "No thanks, it took me forever to find them all. ", "dlg_23_3") + AddConversationOption(conversation, "I'd do just that, if you were willing to pay me.", "dlg_23_4") + StartConversation(conversation, NPC, Spawn, "Ah, Helain. I like her. You would do well to take a page from her book.") +end + +function dlg_23_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/laudine_shardalow/qey_village01/quests/newbie_path_human/laudineshardalow004.mp3", "", "", 3519111089, 2079193245, Spawn) + AddConversationOption(conversation, "Never mind. She thought maybe you would have some work for me. ", "dlg_23_4") + StartConversation(conversation, NPC, Spawn, "What? ") +end + +function dlg_23_4(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/laudine_shardalow/qey_village01/quests/newbie_path_human/laudineshardalow005.mp3", "", "", 23943986, 4145393969, Spawn) + AddConversationOption(conversation, "Oh? ", "dlg_23_5") + StartConversation(conversation, NPC, Spawn, "Ah, no I don't, but ya know what? I bet I know who does. ") +end + +function dlg_23_5(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/laudine_shardalow/qey_village01/quests/newbie_path_human/laudineshardalow006.mp3", "", "", 691896844, 1700542097, Spawn) + AddConversationOption(conversation, "Sounds good... as long as he isn't a stable boy. ", "dlg_23_6") + StartConversation(conversation, NPC, Spawn, "Go speak to Johfrit Gythell. He may have some work, as he always needs a hand.") +end + +function dlg_23_6(NPC, Spawn) + SetStepComplete(Spawn, QUEST_3_FROM_HELAIN, 4) + + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/laudine_shardalow/qey_village01/quests/newbie_path_human/laudineshardalow007.mp3", "", "", 300914977, 1228551584, Spawn) + AddConversationOption(conversation, "All right. Thank you!") + StartConversation(conversation, NPC, Spawn, "Ha! No, you need not worry about that. You should find him near the Golden Scabbard armory. ") +end + +function Forgot(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "Thank you, again!") + StartConversation(conversation, NPC, Spawn, "Oh. You should find him near the Golden Scabbard Armory.") +end + +function dlg_32_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/laudine_shardalow/qey_village01/quests/newbie_path_human/laudineshardalow015.mp3", "", "", 1695366273, 222194149, Spawn) + AddConversationOption(conversation, "Yes, madam. For a price.", "dlg_32_2") + StartConversation(conversation, NPC, Spawn, "Oh, good. You have the ale for me, then?") +end + +function dlg_32_2(NPC, Spawn) + SetStepComplete(Spawn, QUEST_4_FROM_JOHFRIT, 5) + + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/laudine_shardalow/qey_village01/quests/newbie_path_human/laudineshardalow016.mp3", "", "", 4035243333, 3360697754, Spawn) + AddConversationOption(conversation, "Thank you.") + StartConversation(conversation, NPC, Spawn, "A price I am very willing to pay. Pleasure doing business with you.") +end \ No newline at end of file diff --git a/server/SpawnScripts/Nettleville/LoganMacAdie.lua b/server/SpawnScripts/Nettleville/LoganMacAdie.lua new file mode 100644 index 000000000..4fed0d57b --- /dev/null +++ b/server/SpawnScripts/Nettleville/LoganMacAdie.lua @@ -0,0 +1,48 @@ +--[[ + Script Name : SpawnScripts/Nettleville/LoganMacAdie.lua + Script Purpose : Logan MacAdie + Script Author : Scatman + Script Date : 2009.08.08 + Script Notes : +--]] + +function spawn(NPC, Spawn) + SetPlayerProximityFunction(NPC, 10, "InRange", "LeaveRange") + --AddVisualStateLoop(NPC, 2000, 10000, 11150) + --AddVisualStateLoop(NPC, 2000, 10000, 11557) + --AddVisualStateLoop(NPC, 2000, 10000, 13064) +end + +function respawn(NPC, Spawn) + spawn(NPC, Spawn) +end + +function InRange(NPC, Spawn) + local chance = math.random(1, 100) + if chance <= 25 then + FaceTarget(NPC, Spawn) + Say(NPC, "I'm sure you'll find whatever you need if you just keep around.", Spawn) + end +end + +function LeaveRange(NPC, Spawn) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + local choice = math.random(1, 6) + if choice == 1 then + PlayFlavor(NPC, "", "Well its not easy being the best looking guy in town, but I think I pull it off well.", "flirt", 1689589577, 4560189, Spawn) + elseif choice == 2 then + PlayFlavor(NPC, "", "I'm feeling stronger than usual today.", "charge", 1689589577, 4560189, Spawn) + elseif choice == 3 then + PlayFlavor(NPC, "", "Some of my friends tell me I'm weak. I think its true, I've only been able to lift two goblins and an orc lately.", "pout", 1689589577, 4560189, Spawn) + elseif choice == 4 then + PlayFlavor(NPC, "", "Funny, the wound didn't smell like that yesterday.", "stinky", 1689589577, 4560189, Spawn) + elseif choice == 5 then + PlayFlavor(NPC, "", "Strength isn't just the size of your muscles... It's, well... Yeah it is.", "confused", 1689589577, 4560189, Spawn) + elseif choice == 6 then + PlayFlavor(NPC, "", "Darn. I chugged that barrel much slower than I chugged the last three.", "gutcramp", 1689589577, 4560189, Spawn) + end + +end diff --git a/server/SpawnScripts/Nettleville/MarjaniKenan.lua b/server/SpawnScripts/Nettleville/MarjaniKenan.lua new file mode 100644 index 000000000..1b10e656d --- /dev/null +++ b/server/SpawnScripts/Nettleville/MarjaniKenan.lua @@ -0,0 +1,45 @@ +--[[ + Script Name : SpawnScripts/Nettleville/MarjaniKenan.lua + Script Purpose : Marjani Kenan + Script Author : Scatman + Script Date : 2009.08.12 + Script Notes : +--]] + +function spawn(NPC) + SetPlayerProximityFunction(NPC, 10, "InRange", "LeaveRange") +end + +function respawn(NPC) + spawn(NPC) +end + +function InRange(NPC, Spawn) + local chance = math.random(0, 100) + if chance <= 25 then + Talk(NPC, Spawn) + end +end + +function LeaveRange(NPC, Spawn) +end + +function hailed(NPC, Spawn) + Talk(NPC, Spawn) +end + +function Talk(NPC, Spawn) + FaceTarget(NPC, Spawn) + local choice = math.random(1, 5) + if choice == 1 then + PlayFlavor(NPC, "voiceover/english/optional2/kerran_eco_good_2/ft/kerran/kerran_eco_good_2_hail_gf_63881722.mp3", "I'm trying to find a new seasoning for my dried fish.", "ponder", 3322224010, 1564701262, Spawn) + elseif choice == 2 then + PlayFlavor(NPC, "voiceover/english/optional2/kerran_eco_good_2/ft/kerran/kerran_eco_good_2_hail_gf_eabd8556.mp3", "I heard the Ratonga play it for fun.", "shrug", 1138200584, 1711242450, Spawn) + elseif choice == 3 then + PlayFlavor(NPC, "voiceover/english/optional2/kerran_eco_good_2/ft/kerran/kerran_eco_good_2_hail_gf_4424ae28.mp3", "How sweet my Tom is to leave such a gift at my door step. ", "thanks", 2235953436, 2446050201, Spawn) + elseif choice == 4 then + PlayFlavor(NPC, "voiceover/english/optional2/kerran_eco_good_2/ft/kerran/kerran_eco_good_2_hail_gf_b155e999.mp3", "You won't see me near any of those fountains.", "no", 1123179326, 271243686, Spawn) + elseif choice == 5 then + PlayFlavor(NPC, "voiceover/english/optional2/kerran_eco_good_2/ft/kerran/kerran_eco_good_2_hail_gf_28445ab7.mp3", "I don't spend as much time grooming as the others say I do.", "sulk", 1571714850, 824504933, Spawn) + end +end \ No newline at end of file diff --git a/server/SpawnScripts/Nettleville/NawalTahri.lua b/server/SpawnScripts/Nettleville/NawalTahri.lua new file mode 100644 index 000000000..9d902d5c0 --- /dev/null +++ b/server/SpawnScripts/Nettleville/NawalTahri.lua @@ -0,0 +1,58 @@ +--[[ + Script Name : SpawnScripts/Nettleville/NawalTahri.lua + Script Purpose : Nawal Tahri + Script Author : scatman + Script Date : 2009.08.12 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +-- Item ID's +local ARTISAN_ESSENTIALS_VOLUME_2 = 31373 + +function spawn(NPC) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + RandomVoiceOver(NPC, Spawn) + + -- artisan essentials volume 2 + if HasItem(Spawn, ARTISAN_ESSENTIALS_VOLUME_2) then + Say(NPC, "I have nothing else to teach you for the moment. Please return to me when you have earned enough experience to choose your profession.", Spawn) + else + AddConversationOption(conversation, "Yes, please teach me.", "dlg_8_1") + AddConversationOption(conversation, "No, not at the moment.") + StartConversation(conversation, NPC, Spawn, "You show interest in the crafting trade, good. We can always use talented artisans. I can help you get started, would you be interested?") + end +end + +function RandomVoiceOver(NPC, Spawn) + local choice = math.random(1, 3) + if choice == 1 then + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_1_1047.mp3", "", "", 0, 0, Spawn) + elseif choice == 2 then + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_2_1047.mp3", "", "", 0, 0, Spawn) + elseif choice == 3 then + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_3_1047.mp3", "", "", 0, 0, Spawn) + end +end + +function dlg_8_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + -- artisan essentials volume 2 + SendMessage(Spawn, "You receive [artisan essentials volume 2].") + SendPopUpMessage(Spawn, "You receive artisan essentials volume 2", "yellow") + SummonItem(Spawn, ARTISAN_ESSENTIALS_VOLUME_2) + + PlayFlavor(NPC, "", "", "point", 0, 0, Spawn) + AddConversationOption(conversation, "I will start on that now.") + StartConversation(conversation, NPC, Spawn, "There, you now have knowledge required to begin crafting. Speak to the Tradeskill Tutor for more detailed guidance on learning to craft, if you are interested in more information. Return to me when you are ready to select a crafting specialty.") +end \ No newline at end of file diff --git a/server/SpawnScripts/Nettleville/NiaJaja.lua b/server/SpawnScripts/Nettleville/NiaJaja.lua new file mode 100644 index 000000000..34b9f232c --- /dev/null +++ b/server/SpawnScripts/Nettleville/NiaJaja.lua @@ -0,0 +1,20 @@ +--[[ + Script Name : SpawnScripts/Nettleville/NiaJaja.lua + Script Purpose : Nia Jaja + Script Author : Scatman + Script Date : 2009.08.12 + Script Notes : +--]] + +function spawn(NPC) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + -- Must have Kerran language to hear this. + PlayFlavor(NPC, "voiceover/english/nia_jaja/qey_village01/qey_village01_nia_jaja_multhail1_ab7bd6d4.mp3", "I simply can't face her! Can't you see I'm angry; I've no time to chat with you!", "", 1436884292, 4259898399, Spawn) +end \ No newline at end of file diff --git a/server/SpawnScripts/Nettleville/RalkeshOrto.lua b/server/SpawnScripts/Nettleville/RalkeshOrto.lua new file mode 100644 index 000000000..2f5b6852b --- /dev/null +++ b/server/SpawnScripts/Nettleville/RalkeshOrto.lua @@ -0,0 +1,178 @@ +--[[ + Script Name : SpawnScripts/Nettleville/RalkeshOrto.lua + Script Purpose : Ralkesh Orto + Script Author : John Adams + Script Date : 2008.09.24 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +-- Quest ID's +local UNFORTUNATE_MISTAKES = 303 + +function spawn(NPC) + SetTempVariable(NPC, "Ready", "true") +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + if GetTempVariable(NPC, "AllowQuestProgress") == "true" then + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + if HasQuest(Spawn, UNFORTUNATE_MISTAKES) then + if GetQuestStep(Spawn, UNFORTUNATE_MISTAKES) == 1 then + SomethingIMustDo(NPC, Spawn) + end + end + end +end + +function SomethingIMustDo(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/ralkesh_orto/qey_village01/quests/ralkesh_orto/ralkesh_orto001.mp3", "", "", 4080723751, 2709731004, Spawn) + AddConversationOption(conversation, "Then you are the one performing the Pa'Rok ceremony?", "dlg_30_1") + StartConversation(conversation, NPC, Spawn, "This is something I must do, please do not interfere.") +end + +function dlg_30_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/ralkesh_orto/qey_village01/quests/ralkesh_orto/ralkesh_orto002.mp3", "", "", 2184946112, 169031811, Spawn) + AddConversationOption(conversation, "The soil you are using has contaminants in it, the ceremony may be corrupted!", "dlg_30_2") + StartConversation(conversation, NPC, Spawn, "Yes, which is precisely why you must leave me alone!") +end + +function dlg_30_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/ralkesh_orto/qey_village01/quests/ralkesh_orto/ralkesh_orto003.mp3", "", "", 2398850443, 2909693693, Spawn) + AddConversationOption(conversation, "Laharn Rahai has examined samples from the soil you are using for this ceremony and found contaminants. The final offering you make may react with some of the contaminants.", "dlg_30_3") + StartConversation(conversation, NPC, Spawn, "Explain yourself quickly, I have no patience for undue interruptions.") +end + +function dlg_30_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/ralkesh_orto/qey_village01/quests/ralkesh_orto/ralkesh_orto004.mp3", "", "", 3670326842, 761026372, Spawn) + AddConversationOption(conversation, "Laharn was not certain.", "dlg_30_4") + StartConversation(conversation, NPC, Spawn, "Oh dear, I have already made the final offering. What affect may it have?") +end + +function dlg_30_4(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + -- SPAWN THE RAGE OF JA-NELTH + local rage = SpawnByLocationID(GetZone(Spawn), 419648) + if rage ~= nil then + Attack(rage, Spawn) + end + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/ralkesh_orto/qey_village01/quests/ralkesh_orto/ralkesh_orto005.mp3", "", "", 1448581600, 3435048745, Spawn) + AddConversationOption(conversation, "We can talk later!", "CannotBelieve") + StartConversation(conversation, NPC, Spawn, "Oh, Ja'neth, forgive me!") +end + +function CannotBelieve(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/ralkesh_orto/qey_village01/quests/ralkesh_orto/ralkesh_orto006.mp3", "", "", 3689370176, 2085039570, Spawn) + AddConversationOption(conversation, "I do not know. Perhaps Laharn will know what you can do.", "dlg_33_1") + StartConversation(conversation, NPC, Spawn, "I cannot believe what I have done. Have I poisoned Ja'neth's afterlife with my negligence?") +end + +function dlg_33_1(NPC, Spawn) + SetStepComplete(Spawn, UNFORTUNATE_MISTAKES, 1) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/ralkesh_orto/qey_village01/quests/ralkesh_orto/ralkesh_orto007.mp3", "", "", 1914315304, 380671310, Spawn) + AddConversationOption(conversation, "Wait! Where did you get the soil for Pa'Rok?", "dlg_33_2") + StartConversation(conversation, NPC, Spawn, "Yes, you are right. I, I need to go now. Penance must be done.") +end + +function dlg_33_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/ralkesh_orto/qey_village01/quests/ralkesh_orto/ralkesh_orto008.mp3", "", "", 1425320561, 840540299, Spawn) + AddConversationOption(conversation, "All right, you may go.") + AddConversationOption(conversation, "Ralkesh... Ja'neth will be fine.", "dlg_33_3") + StartConversation(conversation, NPC, Spawn, "The Bog. The Peat Bog. Please, I must go.") +end + +function dlg_33_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/ralkesh_orto/qey_village01/quests/ralkesh_orto/ralkesh_orto009.mp3", "", "", 2346643811, 231883534, Spawn) + AddConversationOption(conversation, "I do, Laharn will tell you the same.") + AddConversationOption(conversation, "I do, as should you.") + AddConversationOption(conversation, "I do not know, but I feel it to be true.") + AddConversationOption(conversation, "No... do you?") + AddConversationOption(conversation, "Not at all. Your actions carry far more weight than you realize.") + StartConversation(conversation, NPC, Spawn, "Do you believe that?") +end + +function StartRitual(NPC, Spawn) + SetTempVariable(NPC, "Ready", "false") + MoveToLocation(NPC, 578.33, -27.02, 391.10, 2, "", true) + MoveToLocation(NPC, 579.60, -26.84, 381.32, 2, "Begin") +end + +function Begin(NPC) + AddTimer(NPC, 500, "Ritual1") +end + +function Ritual1(NPC) + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/ralkesh_orto/qey_village01/qst_ralkesh_orto_mourn_6b24b157.mp3", "Oh, Ja'neth. Why!", "cry", 1219541946, 2965391465) + AddTimer(NPC, 2000, "Ritual2") +end + +function Ritual2(NPC) + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/ralkesh_orto/qey_village01/qst_ralkesh_orto_onemoment_89f15716.mp3", "One moment please, this is important.", "", 4271869261, 3070926903) + AddTimer(NPC, 4000, "Ritual3") +end + +function Ritual3(NPC) + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/ralkesh_orto/qey_village01/qst_ralkesh_orto_ceremony_26c02873.mp3", "Blessed Ja'neth, may your spirit remain forever peaceful. Loved Ja'neth, may your bindings remain forever loose. Lost Ja'neth, may you one day find me again.", "", 1234777522, 783285646) + AddTimer(NPC, 10000, "Ritual4") +end + +function Ritual4(NPC) + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/ralkesh_orto/qey_village01/qst_ralkesh_orto_overwith_e17083e9.mp3", "Oh, Ja'Neth... Ja'Neth.", "", 3271321560, 3056376656) + AddTimer(NPC, 2000, "AllowQuestProgress") +end + +function AllowQuestProgress(NPC) + SetTempVariable(NPC, "AllowQuestProgress", "true") + AddTimer(NPC, 60000, "Return") +end + +function Return(NPC) + SetTempVariable(NPC, "AllowQuestProgress", nil) + MoveToLocation(NPC, 578.33, -27.02, 391.10, 2, "", true) + MoveToLocation(NPC, 581.50, -26.27, 399.26, 2, "Reset") +end + +function Reset(NPC) + SpawnSet(NPC, "heading", "0") + SetTempVariable(NPC, "Ready", "true") +end + +--[[ raw_conversations + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/ralkesh_orto/qey_village01/qst_ralkesh_orto_mourn_6b24b157.mp3", "Oh, Ja'neth. Why!", "cry", 1219541946, 2965391465, Spawn) + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/ralkesh_orto/qey_village01/qst_ralkesh_orto_onemoment_89f15716.mp3", "One moment please, this is important.", "", 4271869261, 3070926903, Spawn) + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/ralkesh_orto/qey_village01/qst_ralkesh_orto_ceremony_26c02873.mp3", "Blessed Ja'neth, may your spirit remain forever peaceful. Loved Ja'neth, may your bindings remain forever loose. Lost Ja'neth, may you one day find me again.", "", 1234777522, 783285646, Spawn) + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/ralkesh_orto/qey_village01/qst_ralkesh_orto_overwith_e17083e9.mp3", "Oh, Ja'Neth... Ja'Neth.", "", 3271321560, 3056376656, Spawn) +--]] + diff --git a/server/SpawnScripts/Nettleville/SelkieMushroom.lua b/server/SpawnScripts/Nettleville/SelkieMushroom.lua new file mode 100644 index 000000000..e8a939c42 --- /dev/null +++ b/server/SpawnScripts/Nettleville/SelkieMushroom.lua @@ -0,0 +1,21 @@ +--[[ + Script Name : SpawnScripts/Nettleville/SelkieMushroom.lua + Script Purpose : Selkie Mushroom + Script Author : Scatman + Script Date : 2009.08.21 + Script Notes : +--]] + +-- Quest ID's +local REQUIRED_COMPONENTS = 302 + +function spawn(NPC) + SetRequiredQuest(NPC, REQUIRED_COMPONENTS, 3) +end + +function hailed(NPC, Spawn) +end + +function respawn(NPC) + spawn(NPC) +end \ No newline at end of file diff --git a/server/SpawnScripts/Nettleville/SpiritistLaharnRahai.lua b/server/SpawnScripts/Nettleville/SpiritistLaharnRahai.lua new file mode 100644 index 000000000..4a714abdd --- /dev/null +++ b/server/SpawnScripts/Nettleville/SpiritistLaharnRahai.lua @@ -0,0 +1,246 @@ +--[[ + Script Name : SpawnScripts/Nettleville/SpiritistLaharnRahai.lua + Script Purpose : Spiritist Laharn Rahai + Script Author : Scatman + Script Date : 2009.08.21 + Script Notes : +--]] + +local CURIOUS_FINDINGS = 301 +local REQUIRED_COMPONENTS = 302 -- was 39 +local UNFORTUNATE_MISTAKES = 303 -- was 40 + +function spawn(NPC) + ProvidesQuest(NPC, REQUIRED_COMPONENTS) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + if HasCompletedQuest(Spawn, CURIOUS_FINDINGS) then + if HasCompletedQuest(Spawn, REQUIRED_COMPONENTS) then + if HasCompletedQuest(Spawn, UNFORTUNATE_MISTAKES) then + Say(NPC, "All is once again well. You are to be commended for your efforts.", Spawn) + else + PlayFlavor(NPC, "", "Quickly now, speak with Lakosha.", "", 1689589577, 4560189, Spawn) + end + elseif HasQuest(Spawn, REQUIRED_COMPONENTS) then + if GetQuestStep(Spawn, REQUIRED_COMPONENTS) >= 1 and GetQuestStep(Spawn, REQUIRED_COMPONENTS) <= 3 then + GetComponentsYetNo(NPC, Spawn) + elseif GetQuestStep(Spawn, REQUIRED_COMPONENTS) == 4 then + GetComponentsYetYes(NPC, Spawn) + end + else + ListOfSubstancesYetYes(NPC, Spawn) + end + elseif HasQuest(Spawn, CURIOUS_FINDINGS) then + if GetQuestStep(Spawn, CURIOUS_FINDINGS) == 1 then + HereToAskAFavor(NPC, Spawn) + elseif GetQuestStep(Spawn, CURIOUS_FINDINGS) == 2 then + ListOfSubstancesYetNo(NPC, Spawn) + elseif GetQuestStep(Spawn, CURIOUS_FINDINGS) == 3 then + ListOfSubstancesYetYes(NPC, Spawn) + else + PlayFlavor(NPC, "", "Quickly now, speak with Lakosha.", "", 1689589577, 4560189, Spawn) + end + else + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/spiritist_laharn_rahai/qey_village01/quests/laharn_rahai/laharn_rahai001.mp3", "Sometimes there is little we can do to prevent tragedy. Other times, that which we do need to do is relatively little.", "", 1689589577, 4560189, Spawn) + end +end + +-------------------------------------------------------------------------------------------------------------------- +-- QUEST 2 +-------------------------------------------------------------------------------------------------------------------- + +function HereToAskAFavor(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/spiritist_laharn_rahai/qey_village01/quests/laharn_rahai/laharn_rahai001.mp3", "", "", 1313052279, 289870513, Spawn) + AddConversationOption(conversation, "I am here to ask a favor.", "dlg_20_1") + StartConversation(conversation, NPC, Spawn, "Sometimes there's little we can do to prevent tragedy. Other times, that which we do need to do is relatively little.") +end + +function dlg_20_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/spiritist_laharn_rahai/qey_village01/quests/laharn_rahai/laharn_rahai002.mp3", "", "", 2480103971, 170395438, Spawn) + AddConversationOption(conversation, "Lakosha Maera had me collect some soil. In it she found something that concerned her. She asked that I bring it to you so that you can study it and confirm or dispel her worries.", "dlg_20_2") + StartConversation(conversation, NPC, Spawn, "Of course, what do you need?") +end + +function dlg_20_2(NPC, Spawn) + SetStepComplete(Spawn, CURIOUS_FINDINGS, 1) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/spiritist_laharn_rahai/qey_village01/quests/laharn_rahai/laharn_rahai003.mp3", "", "", 2388634849, 375902687, Spawn) + AddConversationOption(conversation, "All right.") + StartConversation(conversation, NPC, Spawn, "Yes, I can do that. However, the human alchemists here would be much faster at determining the components. We should attempt to enlist their help first. Go speak with the Alchemist's assistant, Gunta. I am sure she can be found in the Scribe's shop. Bring the list of identified substances back to me and we'll see if we can put Lakosha's worries to rest.") +end + +function ListOfSubstancesYetNo(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "No, not yet.") + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/spiritist_laharn_rahai/qey_village01/quests/laharn_rahai/laharn_rahai004.mp3", "", "", 910991904, 661476855, Spawn) + StartConversation(conversation, NPC, Spawn, "Do you have a list of the substances?") +end + +function ListOfSubstancesYetYes(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "No, she would not help.", "dlg_22_1") + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/spiritist_laharn_rahai/qey_village01/quests/laharn_rahai/laharn_rahai004.mp3", "", "", 910991904, 661476855, Spawn) + StartConversation(conversation, NPC, Spawn, "Do you have a list of the substances?") +end + +function dlg_22_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/spiritist_laharn_rahai/qey_village01/quests/laharn_rahai/laharn_rahai005.mp3", "", "", 3616363331, 324641015, Spawn) + AddConversationOption(conversation, "What do we do now?", "dlg_22_2") + StartConversation(conversation, NPC, Spawn, "That is unfortunate, and yet comes without too much surprise. We are often alone in our endeavors. It makes us stronger, however.") +end + +function dlg_22_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/spiritist_laharn_rahai/qey_village01/quests/laharn_rahai/laharn_rahai006.mp3", "", "", 1807481255, 2577515001, Spawn) + AddConversationOption(conversation, "What do I need to collect?", "dlg_22_3") + StartConversation(conversation, NPC, Spawn, "I can still identify the substance, but it will take some extra work. I'll need you to collect a few things while I prepare what I already have.") +end + +function dlg_22_3(NPC, Spawn) + if HasQuest(Spawn, CURIOUS_FINDINGS) then + SetStepComplete(Spawn, CURIOUS_FINDINGS, 3) + end + + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/spiritist_laharn_rahai/qey_village01/quests/laharn_rahai/laharn_rahai007.mp3", "", "", 790033688, 3434236139, Spawn) + AddConversationOption(conversation, "I can do this.", "OfferQuest3") + StartConversation(conversation, NPC, Spawn, "First you will need some Reactive Kesmith. Travel back to the Alchemist in the Scribe's shop, he will sell you some. You will also need a Litsuth Bag. Though this is an object of our people, you can still buy it from a human. On the western end of Nettleville you will find Tailor Ehuraa Rotherham, she will sell you the bag. Finally you will need some Selkie Mushrooms. You can find these in the ferryway with the mariner's bells, also in western Nettleville.") +end + +--------------------------------------------------------------------------------------------------------------------- +-- QUEST 3 +--------------------------------------------------------------------------------------------------------------------- + +function GetComponentsYetNo(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/spiritist_laharn_rahai/qey_village01/quests/laharn_rahai/laharn_rahai008.mp3", "", "", 1937447033, 532896484, Spawn) + AddConversationOption(conversation, "No, I do not.", "dlg_25_1") + StartConversation(conversation, NPC, Spawn, "Do you have the necessary components?") +end + +function GetComponentsYetYes(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/spiritist_laharn_rahai/qey_village01/quests/laharn_rahai/laharn_rahai008.mp3", "", "", 1937447033, 532896484, Spawn) + AddConversationOption(conversation, "Yes, I do.", "dlg_27_1") + StartConversation(conversation, NPC, Spawn, "Do you have the necessary components?") +end + +function dlg_27_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/spiritist_laharn_rahai/qey_village01/quests/laharn_rahai/laharn_rahai009.mp3", "", "", 3568726927, 50566719, Spawn) + AddConversationOption(conversation, "It was gathered from around Nettleville. I was collecting it as part of a ritual Lakosha was teaching me.", "dlg_27_2") + StartConversation(conversation, NPC, Spawn, "Good.I'll perform the test now, this should not take long. Tell me, what was this soil from and why did Lakosha want it tested?") +end + +function dlg_27_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/spiritist_laharn_rahai/qey_village01/quests/laharn_rahai/laharn_rahai010.mp3", "", "", 73665412, 2710981331, Spawn) + AddConversationOption(conversation, "She said the soil suggested someone was in the middle of a Pa'Rok ceremony, but that there were other compounds that should not be present, and was worried that the other compounds may affect the ceremony.", "dlg_27_3") + StartConversation(conversation, NPC, Spawn, "Ah, yes, I am familiar with it. Why did she want it tested?") +end + +function dlg_27_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/spiritist_laharn_rahai/qey_village01/quests/laharn_rahai/laharn_rahai011.mp3", "", "", 3413002401, 2109013864, Spawn) + AddConversationOption(conversation, "Why is that?", "dlg_27_7") + AddConversationOption(conversation, "What is a Pa'Rok ceremony?", "dlg_27_4") + StartConversation(conversation, NPC, Spawn, "She has keen senses, Imolau. A corrupted Pa'Rok ceremony would be a very bad thing.") +end + +function dlg_27_4(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/spiritist_laharn_rahai/qey_village01/quests/laharn_rahai/laharn_rahai012.mp3", "", "", 329280246, 3861598666, Spawn) + AddConversationOption(conversation, "What do you feel?", "dlg_27_5") + StartConversation(conversation, NPC, Spawn, "It is an old custom, not often practiced anymore. Still, some cling to it--rightly so, I believe--for personal reasons. It is a way that one mourns for the deceased. Many feel it brings a closure that cannot be had otherwise.") +end + +function dlg_27_5(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/spiritist_laharn_rahai/qey_village01/quests/laharn_rahai/laharn_rahai013.mp3", "", "", 2917173738, 1397380776, Spawn) + AddConversationOption(conversation, "Do you mean that it is all in the mind of the person performing the ceremony?", "dlg_27_6") + StartConversation(conversation, NPC, Spawn, "I support anything--within reason--that heals. Pa'Rok does that, and so I believe it is good. Some feel that the ceremony is too long or archaic to do any good. Those who think as much would not receive any help from Pa'Rok anyway. Everyone copes in their own ways, some can accept the help Pa'Rok offers while others cannot.") +end + +function dlg_27_6(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/spiritist_laharn_rahai/qey_village01/quests/laharn_rahai/laharn_rahai014.mp3", "", "", 4079786531, 4103037420, Spawn) + AddConversationOption(conversation, "Why is that?", "dlg_27_7") + StartConversation(conversation, NPC, Spawn, "No, not by a long shot. I cannot explain it, but the one doing the ceremony knows and feels what they are meant to feel. Some say they commune with the deceased, though most remember very little. This is how one knows if the ceremony is corrupted; if it is all clearly remembered and there is no sense of peace when it is over. Corrupted ceremonies are very bad.") +end + +function dlg_27_7(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/spiritist_laharn_rahai/qey_village01/quests/laharn_rahai/laharn_rahai015.mp3", "", "", 3229185104, 3474423830, Spawn) + AddConversationOption(conversation, "What did you find?", "dlg_27_8") + StartConversation(conversation, NPC, Spawn, "A corrupted ceremony means time lost, and mourning needlessly repeated. Ah, the test is done.") +end + +function dlg_27_8(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/spiritist_laharn_rahai/qey_village01/quests/laharn_rahai/laharn_rahai016.mp3", "", "", 681386269, 481662717, Spawn) + AddConversationOption(conversation, "Negative consequences?", "dlg_27_9") + StartConversation(conversation, NPC, Spawn, "This is dire. The soil had components suggesting the Pa'Rok ceremony was on its third day. On the fourth day the final soil, specially prepared by a kerra learned in such things, will be added. The soil from the first day, however, seems very ill prepared and has substances that I don't even recognize in it. This will corrupt the ceremony, that is certain, but it may have negative consequences beyond that.") +end + + +function dlg_27_9(NPC, Spawn) + SetStepComplete(Spawn, REQUIRED_COMPONENTS, 4) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/spiritist_laharn_rahai/qey_village01/quests/laharn_rahai/laharn_rahai017.mp3", "", "", 3728181169, 856089258, Spawn) + AddConversationOption(conversation, "All right, thank you for your help.") + StartConversation(conversation, NPC, Spawn, "The Pa'Rok summons the spirits of the dead. To alter the prepared soil in any way threatens the integrity of that link to the dead. They may not be summoned at all, the wrong soul may be summoned, only a portion of the soul may be summoned, there is no way to know what will happen. Understand, this is not something we study, it is something that must always be avoided. Please, return to Lakosha. Tell her what I have told you, she will guide you.") +end + +function OfferQuest3(NPC, Spawn) + FaceTarget(NPC, Spawn) + OfferQuest(NPC, Spawn, REQUIRED_COMPONENTS) +end \ No newline at end of file diff --git a/server/SpawnScripts/Nettleville/Tanglmayn.lua b/server/SpawnScripts/Nettleville/Tanglmayn.lua new file mode 100644 index 000000000..e6c7b8bb3 --- /dev/null +++ b/server/SpawnScripts/Nettleville/Tanglmayn.lua @@ -0,0 +1,22 @@ +--[[ + Script Name : SpawnScripts/Nettleville/Tanglmayn.lua + Script Purpose : Tanglmayn + Script Author : John Adams + Script Date : 2008.09.24 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + choice = math.random(1,3) + + if choice == 1 then + PlayFlavor(NPC, "voiceover/english/kerran_eco_good_1/ft/service/merchant/kerran_merchant_service_good_1_hail_gf_ae84abf9.mp3", "Go on, take a look at the stock. You'll never beat this price in the city. I guarantee it!", "wink", 3487732561, 2995138728, Spawn) + elseif choice == 2 then + PlayFlavor(NPC, "voiceover/english/kerran_eco_good_1/ft/service/merchant/kerran_merchant_service_good_1_hail_gf_24322c5d.mp3", "Greetings, traveler! We have the finest supplies to fill your adventuring needs.", "smile", 509171300, 3181487898, Spawn) + elseif choice == 3 then + PlayFlavor(NPC, "voiceover/english/kerran_eco_good_1/ft/service/merchant/kerran_merchant_service_good_1_hail_gf_45d92a75.mp3", "Welcome! What can I help you with?", "bow", 2213475197, 3871690614, Spawn) + else + end + +end \ No newline at end of file diff --git a/server/SpawnScripts/Nettleville/VarionSmitelin.lua b/server/SpawnScripts/Nettleville/VarionSmitelin.lua new file mode 100644 index 000000000..28e1f19fd --- /dev/null +++ b/server/SpawnScripts/Nettleville/VarionSmitelin.lua @@ -0,0 +1,74 @@ +--[[ + Script Name : SpawnScripts/Nettleville/VarionSmitelin.lua + Script Purpose : Varion Smitelin + Script Author : Scatman + Script Date : 2009.08.12 + Script Notes : +--]] + +local QUEST_1 = 311 +local REFILL_THE_OAKMYST_SPIDER_SILK_JARS = 312 + +function spawn(NPC) + ProvidesQuest(NPC, QUEST_1) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + if not HasCompletedQuest(Spawn, QUEST_1) then + if HasQuest(Spawn, QUEST_1) and GetQuestStep(Spawn, QUEST_1) == 2 then + AddConversationOption(conversation, "I'm back with the wings as you requested.", "dlg_12_1") + elseif GetLevel(Spawn) >= 3 then + AddConversationOption(conversation, "Oh, very much so.", "dlg_11_1") + end + end + + if HasQuest(Spawn, REFILL_THE_OAKMYST_SPIDER_SILK_JARS) and GetQuestStep(Spawn, REFILL_THE_OAKMYST_SPIDER_SILK_JARS) == 2 then + AddConversationOption(conversation, "I refilled your spider silk jars.", "dlg_13_1") + end + AddConversationOption(conversation, "Me? No, I don't care for that finger waggling stuff. ") + PlayFlavor(NPC, "voiceover/english/scribe_varion_smitelin/qey_village01/varionsmitelin.mp3", "", "", 1851450511, 1137101449, Spawn) + StartConversation(conversation, NPC, Spawn, "Interested in the magical arts, are you?") +end + +function dlg_11_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/scribe_varion_smitelin/qey_village01/varionsmitelin003.mp3", "", "", 426969291, 1829151300, Spawn) + AddConversationOption(conversation, "I don't mind getting a little dirty. I'll take the job.", "OfferQuest1") + AddConversationOption(conversation, "Out into the bog? No thanks, I like to keep my clothes clean. ") + StartConversation(conversation, NPC, Spawn, "Good. That's what I like to hear! I'm working on a levitation spell, but I'm running low on Bog Faeries. If you go to the Peat Bog and round up some of the wings, I'll gladly pay you for this deed.") +end + +function OfferQuest1(NPC, Spawn) + FaceTarget(NPC, Spawn) + OfferQuest(NPC, Spawn, QUEST_1) +end + +function dlg_12_1(NPC, Spawn) + SetStepComplete(Spawn, QUEST_1, 2) + + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "Difficult? Of course not! The Bog Faeries practically handed them to me.") + StartConversation(conversation, NPC, Spawn, "Excellent! These will do most nicely! I hope getting the wings wasn't too difficult. As promised, here's your reward.") +end + +function dlg_13_1(NPC, Spawn) + SetStepComplete(Spawn, REFILL_THE_OAKMYST_SPIDER_SILK_JARS, 2) + + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/scribe_varion_smitelin/qey_village01/varionsmitelin006.mp3", "", "", 3827990998, 3891374789, Spawn) + AddConversationOption(conversation, "Thank you.") + StartConversation(conversation, NPC, Spawn, "Thank you for refilling my jars. I knew they were empty, but could not find the time to make the trip to Oakmyst Forest. Please take this payment as a reward for your good deed.") +end \ No newline at end of file diff --git a/server/SpawnScripts/Nettleville/Verth.lua b/server/SpawnScripts/Nettleville/Verth.lua new file mode 100644 index 000000000..51cc7abab --- /dev/null +++ b/server/SpawnScripts/Nettleville/Verth.lua @@ -0,0 +1,12 @@ +--[[ + Script Name : SpawnScripts/Nettleville/Verth.lua + Script Purpose : Verth + Script Author : John Adams + Script Date : 2008.09.24 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + PlayFlavor(NPC, "voiceover/english/verth/qey_village01/qey_village01_flavor_verth_multhail1_1b036b2d.mp3", "That meddling Falkoner didn't see you come back here, did he? Hmmm... I don't know if I can trust you. You better leave, now!", "", 1876464980, 1327443401, Spawn) +end \ No newline at end of file diff --git a/server/SpawnScripts/Nettleville/VidaSweeps.lua b/server/SpawnScripts/Nettleville/VidaSweeps.lua new file mode 100644 index 000000000..8fbe67325 --- /dev/null +++ b/server/SpawnScripts/Nettleville/VidaSweeps.lua @@ -0,0 +1,107 @@ +--[[ + Script Name : SpawnScripts/Nettleville/VidaSweeps.lua + Script Purpose : Vida Sweeps + Script Author : Scatman + Script Date : 2009.08.12 + Script Notes : +--]] + +require "SpawnScripts/Generic/DialogModule" + +local QUEST_1 = 310 + +function spawn(NPC) + ProvidesQuest(NPC, QUEST_1) + SetPlayerProximityFunction(NPC, 10, "InRange", "LeaveRange") +end + +function respawn(NPC) + spawn(NPC) +end + +function InRange(NPC, Spawn) + if not HasQuest(Spawn, QUEST_1) and not HasCompletedQuest(Spawn, QUEST_1) then + FaceTarget(NPC, Spawn) + PlayFlavor(NPC, "voiceover/english/vida_sweeps/qey_village01/qey_village01_groundskeeper_vida_sweeps_callout_6c14234e.mp3", "So much to do! So little time! I must finish my sweeping, but I need a new broom. Perhaps you'll help me in return for a precious stone?", "confused", 1752767860, 1342853234, Spawn) + end +end + +function LeaveRange(NPC, Spawn) + +end + +--[[ +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/vida_sweeps/qey_village01/vidasweeps000.mp3", "", "", 931509640, 2296016698, Spawn) + if not HasCompletedQuest(Spawn, QUEST_1) then + if HasQuest(Spawn, QUEST_1) and GetQuestStep(Spawn, QUEST_1) == 2 then + AddConversationOption(conversation, "I brought back the new broom from Tawli. She was a bit tough to find.", "dlg_13_1") + elseif GetLevel(Spawn) >= 3 then + AddConversationOption(conversation, "What little rocks?", "TheseStones") + end + end + AddConversationOption(conversation, "Good luck with your work.") + StartConversation(conversation, NPC, Spawn, "So much to do! So little time! I must get these tents in order, and all this sweeping is giving me blisters. It wouldn't be so bad if there weren't all these little rocks about.") +end +]] + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + + Dialog.New(NPC,Spawn) + + Dialog.AddDialog("So much to do! So little time! I must get these tents in order, and all this sweeping is giving me blisters. It wouldn't be so bad if there weren't all these little rocks about.") + Dialog.AddVoiceover("voiceover/english/vida_sweeps/qey_village01/vidasweeps000.mp3", 931509640, 2296016698) + + Dialog.AddOption("I brought back the new broom from Tawli. She was a bit tough to find.", "dlg_13_1") + Dialog.AddOptionRequirement(REQ_QUEST_NOT_HAS_COMPLETED_QUEST, QUEST_1) + Dialog.AddOptionRequirement(REQ_QUEST_ON_STEP, QUEST_1, 2) + + Dialog.AddOption("What little rocks?", "TheseStones") + Dialog.AddOptionRequirement(REQ_QUEST_NOT_HAS_COMPLETED_QUEST, QUEST_1) + Dialog.AddOptionRequirement(REQ_QUEST_DOESNT_HAVE_QUEST, QUEST_1) + Dialog.AddOptionRequirement(REQ_LEVEL_GREATER_OR_EQUAL, 3) + + Dialog.AddOption("Good luck with your work.") + + Dialog.Start() +end + +function TheseStones(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/vida_sweeps/qey_village01/vidasweeps001.mp3", "", "", 3847370594, 2690301162, Spawn) + AddConversationOption(conversation, "I'll help you out. I am interested in the blue stone.", "OfferQuest1") + AddConversationOption(conversation, "I'm sorry, but I really don't have time to run an errand for you.") + StartConversation(conversation, NPC, Spawn, "These stones on the ground, of course ... I guess I swept away most of the pebbles, but I did keep one strange blue rock that I found in the dust. If you agree to help me, I'll give you the precious stone as payment. Unfortunately, I'm short on coin.") +end + +function OfferQuest1(NPC, Spawn) + FaceTarget(NPC, Spawn) + OfferQuest(NPC, Spawn, QUEST_1) +end + +function dlg_13_1(NPC, Spawn) + SetStepComplete(Spawn, QUEST_1, 2) + + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/vida_sweeps/qey_village01/vidasweeps003.mp3", "", "", 1668292894, 3552793002, Spawn) + AddConversationOption(conversation, "What should I do with this blue stone?", "dlg_13_2") + AddConversationOption(conversation, "Thank you very much. ") + StartConversation(conversation, NPC, Spawn, "Aye, I told you she was a bit flighty. Thank you for the broom and here is the stone I promised. I hope it brings you good luck.") +end + +function dlg_13_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/vida_sweeps/qey_village01/vidasweeps004.mp3", "", "", 2095544938, 2706458688, Spawn) + AddConversationOption(conversation, "Hmm... I'll keep that in mind.") + StartConversation(conversation, NPC, Spawn, "I suppose that is up to you. Maybe you can take it to a mineral expert somewhere in the city.") +end \ No newline at end of file diff --git a/server/SpawnScripts/Nettleville/WillimBarclay.lua b/server/SpawnScripts/Nettleville/WillimBarclay.lua new file mode 100644 index 000000000..008778517 --- /dev/null +++ b/server/SpawnScripts/Nettleville/WillimBarclay.lua @@ -0,0 +1,23 @@ +--[[ + Script Name : SpawnScripts/Nettleville/WillimBarclay.lua + Script Purpose : Willim Barclay + Script Author : Scatman + Script Date : 2009.08.08 + Script Notes : +--]] + +function spawn(NPC) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/willim_barclay/qey_village01/willimbarclay000.mp3", "", "", 3397569626, 186458292, Spawn) + AddConversationOption(conversation, "I see.") + StartConversation(conversation, NPC, Spawn, "Perhaps we can speak another time? I have to allocate the barley, inventory the chicken feed, and distribute the wool.") +end \ No newline at end of file diff --git a/server/SpawnScripts/Nettleville/abookpage.lua b/server/SpawnScripts/Nettleville/abookpage.lua new file mode 100644 index 000000000..dcf28b9de --- /dev/null +++ b/server/SpawnScripts/Nettleville/abookpage.lua @@ -0,0 +1,20 @@ +--[[ + Script Name : SpawnScripts/Nettleville/abookpage.lua + Script Purpose : a book page + Script Author : Scatman + Script Date : 2009.08.10 + Script Notes : +--]] + +local QUEST_2_FROM_HELAIN = 296 + +function spawn(NPC) + SetRequiredQuest(NPC, QUEST_2_FROM_HELAIN, 1) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) +end \ No newline at end of file diff --git a/server/SpawnScripts/Nettleville/awaterloggedcrate.lua b/server/SpawnScripts/Nettleville/awaterloggedcrate.lua new file mode 100644 index 000000000..c6cf01102 --- /dev/null +++ b/server/SpawnScripts/Nettleville/awaterloggedcrate.lua @@ -0,0 +1,20 @@ +--[[ + Script Name : SpawnScripts/Nettleville/awaterloggedcrate.lua + Script Purpose : a waterlogged crate + Script Author : Scatman + Script Date : 2009.08.10 + Script Notes : +--]] + +local QUEST_4_FROM_JOHFRIT = 298 + +function spawn(NPC) + SetRequiredQuest(NPC, QUEST_4_FROM_JOHFRIT, 1) +end + +function hailed(NPC, Spawn) +end + +function respawn(NPC) + spawn(NPC) +end \ No newline at end of file diff --git a/server/SpawnScripts/Nettleville/awaterproofbarrel.lua b/server/SpawnScripts/Nettleville/awaterproofbarrel.lua new file mode 100644 index 000000000..0427dfe84 --- /dev/null +++ b/server/SpawnScripts/Nettleville/awaterproofbarrel.lua @@ -0,0 +1,20 @@ +--[[ + Script Name : SpawnScripts/Nettleville/awaterproofbarrel.lua + Script Purpose : a waterproof barrel + Script Author : Scatman + Script Date : 2009.08.10 + Script Notes : +--]] + +local QUEST_4_FROM_JOHFRIT = 298 + +function spawn(NPC) + SetRequiredQuest(NPC, QUEST_4_FROM_JOHFRIT, 2) +end + +function hailed(NPC, Spawn) +end + +function respawn(NPC) + spawn(NPC) +end \ No newline at end of file diff --git a/server/SpawnScripts/Nettleville/inspect_reagentshelf01.lua b/server/SpawnScripts/Nettleville/inspect_reagentshelf01.lua new file mode 100644 index 000000000..1d4a00002 --- /dev/null +++ b/server/SpawnScripts/Nettleville/inspect_reagentshelf01.lua @@ -0,0 +1,56 @@ +--[[ + Script Name : SpawnScripts/Nettleville/inspect_reagentshelf01.lua + Script Purpose : inspect_reagentshelf01 + Script Author : Scatman + Script Date : 2009.10.08 + Script Notes : +--]] + +local QUEST_1 = 312 +local QUEST_FROM_OAKMYST = 999 + +function spawn(NPC) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) +end + +function casted_on(Target, Caster, SpellName) + if SpellName == "inspect" then + conversation = CreateConversation() + if not HasQuest(Caster, QUEST_1) and not HasCompletedQuest(Caster, QUEST_1) then + AddConversationOption(conversation, "Inspect jars of Oakmyst spider silk.", "OfferQuest1") + end + if HasQuest(Caster, QUEST_FROM_OAKMYST) and GetQuestStep(Caster, QUEST_FROM_OAKMYST) == 1 then + AddConversationOption(conversation, "Inspect jars of Smitelin's Excel-a-gro.", "ExcelAGro") + end + AddConversationOption(conversation, "Stop browsing.", "CloseConversation") + StartDialogConversation(conversation, 1, Target, Caster, "This is Varion Smitelin's reagent shelf. It seems to have various reagents as well as a number of tomes.") + end +end + +function OfferQuest1(NPC, Spawn) + OfferQuest(NPC, Spawn, QUEST_1) + local conversation = CreateConversation() + + AddConversationOption(conversation, "Stop browsing.", "CloseConversation") + StartDialogConversation(conversation, 1, NPC, Spawn, "This jar is filled with spider silk but looks rather low, I should help Varion out by gathering some more.") +end + +function ExcelAGro(NPC, Spawn) + conversation = CreateConversation() + AddConversationOption(conversation, "Take a pinch of the nutrient.", "TakeAPinch") + AddConversationOption(conversation, "Stop browsing.", "CloseConversation") + StartDialogConversation(conversation, 1, NPC, Spawn, "This jar is filled with some form of arcane nutrient for plants.") +end + +function TakeAPinch(NPC, Spawn) + SetStepComplete(Spawn, QUEST_FROM_OAKMYST, 1) + conversation = CreateConversation() + AddConversationOption(conversation, "Stop browsing.", "CloseConversation") + StartDialogConversation(conversation, 1, NPC, Spawn, "You take a small pinch of the nutrient and pack it into a small pocket.") +end \ No newline at end of file diff --git a/server/SpawnScripts/Nettleville/loosesoil.lua b/server/SpawnScripts/Nettleville/loosesoil.lua new file mode 100644 index 000000000..ced2cd147 --- /dev/null +++ b/server/SpawnScripts/Nettleville/loosesoil.lua @@ -0,0 +1,48 @@ +--[[ + Script Name : SpawnScripts/Nettleville/loosesoil.lua + Script Purpose : loose soil + Script Author : Scatman + Script Date : 2009.08.21 + Script Notes : +--]] + +local QUEST_1_FROM_LAKOSHA = 300 + +function spawn(NPC) + local sli = GetSpawnLocationID(NPC) + if sli == 565366 then + SetRequiredQuest(NPC, QUEST_1_FROM_LAKOSHA, 1, 1) + elseif sli == 565350 then + SetRequiredQuest(NPC, QUEST_1_FROM_LAKOSHA, 2, 1) + elseif sli == 565360 then + SetRequiredQuest(NPC, QUEST_1_FROM_LAKOSHA, 3, 1) + end +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) +end + +function casted_on(NPC, Spawn) +Say(Spawn, "Test") + if HasQuest(Spawn, QUEST_1_FROM_LAKOSHA) and GetQuestStep(Spawn, QUEST_1_FROM_LAKOSHA) <= 3 then + local sli = GetSpawnLocationID(NPC) +Say(Spawn, sli) + if sli == 565366 then + if not QuestStepIsComplete(Spawn, QUEST_1_FROM_LAKOSHA, 1) then + SetStepComplete(Spawn, QUEST_1_FROM_LAKOSHA, 1) + end + elseif sli == 565350 then + if not QuestStepIsComplete(Spawn, QUEST_1_FROM_LAKOSHA, 2) then + SetStepComplete(Spawn, QUEST_1_FROM_LAKOSHA, 2) + end + elseif sli == 565360 then + if not QuestStepIsComplete(Spawn, QUEST_1_FROM_LAKOSHA, 3) then + SetStepComplete(Spawn, QUEST_1_FROM_LAKOSHA, 3) + end + end + end +end \ No newline at end of file diff --git a/server/SpawnScripts/NorthFreeport/HectorAlpalor.lua b/server/SpawnScripts/NorthFreeport/HectorAlpalor.lua new file mode 100644 index 000000000..0ed916014 --- /dev/null +++ b/server/SpawnScripts/NorthFreeport/HectorAlpalor.lua @@ -0,0 +1,20 @@ +--[[ + Script Name : SpawnScripts/NorthFreeport/HectorAlpalor.lua + Script Author : Cynnar + Script Date : 2018.05.27 04:05:29 + Script Purpose : + : +--]] + +function spawn(NPC) + +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) +end + +function respawn(NPC) + +end + diff --git a/server/SpawnScripts/NorthFreeport/Lrak.lua b/server/SpawnScripts/NorthFreeport/Lrak.lua new file mode 100644 index 000000000..bae55e549 --- /dev/null +++ b/server/SpawnScripts/NorthFreeport/Lrak.lua @@ -0,0 +1,23 @@ +--[[ + Script Name : SpawnScripts/NorthFreeport/Lrak.lua + Script Author : Cynnar + Script Date : 2018.06.04 10:06:13 + Script Purpose : + : +--]] + +function spawn(NPC) + +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) +end + +function respawn(NPC) + +end + +function Talk(NPC, Spawn) + Say(NPC, "WTF! Did you see him staring at me?") +end diff --git a/server/SpawnScripts/NorthFreeport/NFreeportWanders.lua b/server/SpawnScripts/NorthFreeport/NFreeportWanders.lua new file mode 100644 index 000000000..3c89e2134 --- /dev/null +++ b/server/SpawnScripts/NorthFreeport/NFreeportWanders.lua @@ -0,0 +1,523 @@ +--[[ + Script Name : SpawnScripts/NorthFreeport/NFreeportWanders.lua + Script Purpose : Waypoint Path for All wanderers in North Freeport + Script Author : Cynnar + Script Date : 6/1/2018 03:06:35 PM + Script Notes : Needs to add in split paths and to call function to spawn next wanderer +--]] + +local path + +function spawn(NPC) + waypoints(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) +end + +function respawn(NPC) + spawn(NPC) +end + +function waypoints(NPC) + MovementLoopAddLocation(NPC, -223.06, -57.78, -150.9, 2, math.random(0, 6)) + MovementLoopAddLocation(NPC, -220.03, -58.83, -159.56, 2, 0) + MovementLoopAddLocation(NPC, -217.61, -58.83, -163.77, 2, 0) + MovementLoopAddLocation(NPC, -214.34, -58.83, -167.83, 2, 0) + MovementLoopAddLocation(NPC, -211.29, -58.83, -170.3, 2, 0) + MovementLoopAddLocation(NPC, -207.02, -58.83, -173.07, 2, 0) + MovementLoopAddLocation(NPC, -204.05, -58.83, -176.46, 2, 0) + MovementLoopAddLocation(NPC, -202.67, -58.83, -179.64, 2, 0) + MovementLoopAddLocation(NPC, -201.81, -58.83, -184.29, 2, 0) + MovementLoopAddLocation(NPC, -201, -58.83, -188.08, 2, 0) + MovementLoopAddLocation(NPC, -199.43, -58.83, -192.25, 2, 0) + MovementLoopAddLocation(NPC, -196.22, -58.83, -198.53, 2, 0) + MovementLoopAddLocation(NPC, -194.02, -58.83, -204.38, 2, 0) + MovementLoopAddLocation(NPC, -191.54, -58.83, -209.47, 2, 0) + MovementLoopAddLocation(NPC, -186.05, -58.82, -215.92, 2, 0) + MovementLoopAddLocation(NPC, -181, -58.8, -219.54, 2, 0) + MovementLoopAddLocation(NPC, -175.8, -58.79, -222.26, 2, 0) + + path = math.random(0, 1) + + if path == 1 then + path_1(NPC) + else + path_2(NPC) + end + + MovementLoopAddLocation(NPC, -73, -34.59, -334.7, 2, 0) + MovementLoopAddLocation(NPC, -53.33, -27.3, -335.17, 2, 0) + MovementLoopAddLocation(NPC, -50.4, -27.31, -333.36, 2, 0) + MovementLoopAddLocation(NPC, -47.94, -27.31, -330.74, 2, 0) + MovementLoopAddLocation(NPC, -47.65, -27.3, -328.31, 2, 0) + MovementLoopAddLocation(NPC, -46.37, -20.06, -310.13, 2, 0) + + path = math.random(0, 1) + + if path == 1 then + path_M_0(NPC) + end + + MovementLoopAddLocation(NPC, -46.98, -20.05, -296.12, 2, 0) + + path = math.random(0, 1) + + if path == 1 then + path_M_1(NPC) + else + path_M_2(NPC) + end + + MovementLoopAddLocation(NPC, -42.07, -13.95, -191.72, 2, 0, "changegrid_Going_Up") + -- the below path needs tweaking but will allow me ot find the grid changes and add them + MovementLoopAddLocation(NPC, -42.07, -13.95, -191.72, 2, 2) + MovementLoopAddLocation(NPC, -44.22, -12.42, -184.67, 2, 2) + MovementLoopAddLocation(NPC, -42.9, -11.68, -181.09, 2, 2) + MovementLoopAddLocation(NPC, -40.47, -11.42, -179.79, 2, 2) + MovementLoopAddLocation(NPC, -28.82, -10.91, -176.8, 2, 2) + MovementLoopAddLocation(NPC, -26.46, -10.58, -174.76, 2, 2) + MovementLoopAddLocation(NPC, -25.6, -10.12, -171.74, 2, 2) + MovementLoopAddLocation(NPC, -25.8, -9.93, -170.37, 2, 2) + MovementLoopAddLocation(NPC, -47.69, -9.49, -99.06, 2, 2) + MovementLoopAddLocation(NPC, -46.82, -9.89, -92.37, 2, 2) + MovementLoopAddLocation(NPC, -44.55, -10.45, -88.97, 2, 2) + MovementLoopAddLocation(NPC, -36.56, -12.33, -80.55, 2, 2) + MovementLoopAddLocation(NPC, -32.14, -13.03, -71.58, 2, 2) + MovementLoopAddLocation(NPC, -30.6, -12.68, -64.69, 2, 2) + MovementLoopAddLocation(NPC, -30.6, -13.02, -58.91, 2, 2) + MovementLoopAddLocation(NPC, -28.83, -14.73, -54.39, 2, 2) + MovementLoopAddLocation(NPC, -28.48, -16.29, -51.51, 2, 2) + MovementLoopAddLocation(NPC, -28.99, -18.09, -48.72, 2, 2) + MovementLoopAddLocation(NPC, -31.58, -20.22, -45.22, 2, 2) + MovementLoopAddLocation(NPC, -40.76, -24.37, -41.55, 2, 2) + MovementLoopAddLocation(NPC, -92.31, -24.37, -51.34, 2, 2) + MovementLoopAddLocation(NPC, -108.18, -24.37, -52.2, 2, 2) + MovementLoopAddLocation(NPC, -152.46, -23.84, -57.33, 2, 2) + -- turn around now + MovementLoopAddLocation(NPC, -152.46, -23.84, -57.33, 2, 2) + MovementLoopAddLocation(NPC, -108.18, -24.37, -52.2, 2, 2) + MovementLoopAddLocation(NPC, -92.31, -24.37, -51.34, 2, 2) + MovementLoopAddLocation(NPC, -40.76, -24.37, -41.55, 2, 2) + MovementLoopAddLocation(NPC, -31.58, -20.22, -45.22, 2, 2) + MovementLoopAddLocation(NPC, -28.99, -18.09, -48.72, 2, 2) + MovementLoopAddLocation(NPC, -28.48, -16.29, -51.51, 2, 2) + MovementLoopAddLocation(NPC, -28.83, -14.73, -54.39, 2, 2) + MovementLoopAddLocation(NPC, -30.6, -13.02, -58.91, 2, 2) + MovementLoopAddLocation(NPC, -30.6, -12.68, -64.69, 2, 2) + MovementLoopAddLocation(NPC, -32.14, -13.03, -71.58, 2, 2) + MovementLoopAddLocation(NPC, -36.56, -12.33, -80.55, 2, 2) + MovementLoopAddLocation(NPC, -44.55, -10.45, -88.97, 2, 2) + MovementLoopAddLocation(NPC, -46.82, -9.89, -92.37, 2, 2) + MovementLoopAddLocation(NPC, -47.69, -9.49, -99.06, 2, 2) + MovementLoopAddLocation(NPC, -25.8, -9.93, -170.37, 2, 2) + MovementLoopAddLocation(NPC, -25.6, -10.12, -171.74, 2, 2) + MovementLoopAddLocation(NPC, -26.46, -10.58, -174.76, 2, 2) + MovementLoopAddLocation(NPC, -28.82, -10.91, -176.8, 2, 2) + MovementLoopAddLocation(NPC, -40.47, -11.42, -179.79, 2, 2) + MovementLoopAddLocation(NPC, -42.9, -11.68, -181.09, 2, 2) + MovementLoopAddLocation(NPC, -44.22, -12.42, -184.67, 2, 2) + MovementLoopAddLocation(NPC, -42.07, -13.95, -191.72, 2, 2) + -- the below path changes grid going back down + MovementLoopAddLocation(NPC, -42.07, -13.95, -191.72, 2, 0, "changegrid_Going_Down") + MovementLoopAddLocation(NPC, -38.19, -17.6, -206.13, 2, 0) + MovementLoopAddLocation(NPC, -41.59, -20.05, -306.7, 2, 0) + MovementLoopAddLocation(NPC, -49.14, -27.31, -332.17, 2, 0) + MovementLoopAddLocation(NPC, -75.35, -34.59, -332.93, 2, 0) + MovementLoopAddLocation(NPC, -78.64, -34.59, -300.55, 2, 0) + MovementLoopAddLocation(NPC, -79.65, -34.59, -284.7, 2, 0) + MovementLoopAddLocation(NPC, -83.56, -34.59, -272.71, 2, 0) + MovementLoopAddLocation(NPC, -74.37, -34.59, -268.9, 2, 0) + MovementLoopAddLocation(NPC, -71.68, -34.64, -259.61, 2, 0) + MovementLoopAddLocation(NPC, -74.49, -40.33, -239.88, 2, 0) + MovementLoopAddLocation(NPC, -98.38, -40.33, -242.16, 2, 0) + MovementLoopAddLocation(NPC, -115.83, -40.33, -239.26, 2, 0) + MovementLoopAddLocation(NPC, -119.98, -40.33, -227.42, 2, 0) + MovementLoopAddLocation(NPC, -125.8, -40.33, -210.82, 2, 0) + MovementLoopAddLocation(NPC, -123.43, -40.33, -204.9, 2, 0) + MovementLoopAddLocation(NPC, -110.43, -45.45, -198.73, 2, 0) + MovementLoopAddLocation(NPC, -108.38, -46.05, -191.29, 2, 0) + MovementLoopAddLocation(NPC, -119.97, -46.05, -190.14, 2, 0) + MovementLoopAddLocation(NPC, -134.06, -51.8, -202.83, 2, 0) + MovementLoopAddLocation(NPC, -145.69, -51.71, -213.04, 2, 0) + MovementLoopAddLocation(NPC, -172.27, -58.78, -223.46, 2, 0) + MovementLoopAddLocation(NPC, -187.94, -58.82, -214.02, 2, 0) + MovementLoopAddLocation(NPC, -194.25, -58.83, -203.97, 2, 0) + MovementLoopAddLocation(NPC, -196.73, -58.83, -196.44, 2, 0) + MovementLoopAddLocation(NPC, -201.38, -58.83, -190.06, 2, 0) + MovementLoopAddLocation(NPC, -202.34, -58.83, -183.87, 2, 0) + MovementLoopAddLocation(NPC, -203.25, -58.83, -177.99, 2, 0) + MovementLoopAddLocation(NPC, -206.57, -58.83, -173.18, 2, 0) + MovementLoopAddLocation(NPC, -211.24, -58.83, -170.33, 2, 0) + MovementLoopAddLocation(NPC, -218.61, -58.83, -162.67, 2, 0) + MovementLoopAddLocation(NPC, -221.69, -57.94, -154.27, 2, 0) + MovementLoopAddLocation(NPC, -221.94, -57.78, -150.45, 2, 0, "depop") +end + +-------------------------------------------------------------------------------------- +-- Path 1 +-------------------------------------------------------------------------------------- + +function path_1(NPC) + MovementLoopAddLocation(NPC, -169.9, -58.78, -222.94, 2, 0) + MovementLoopAddLocation(NPC, -164.11, -58.73, -221.04, 2, 0) + MovementLoopAddLocation(NPC, -147.45, -51.53, -211.51, 2, 0) + MovementLoopAddLocation(NPC, -143.90, -51.67, -209.39, 2, 0) + + path = math.random(0, 2) + + if path == 1 then + path_1_0(NPC) + elseif path == 2 then + path_1_A(NPC) + else + path_1_B(NPC) + end +end + +-------------------------------------------------------------------------------------- +-- Path 1 (0) +-------------------------------------------------------------------------------------- + +function path_1_0(NPC) + MovementLoopAddLocation(NPC, -143.18, -51.79, -204.42, 2, 0) + MovementLoopAddLocation(NPC, -149.44, -51.83, -196.63, 2, 0) + MovementLoopAddLocation(NPC, -156.32, -52.58, -186.63, 2, 0) + MovementLoopAddLocation(NPC, -164.31, -54.34, -170.32, 2, 0) + MovementLoopAddLocation(NPC, -169.77, -55.19, -155.41, 2, 0) + MovementLoopAddLocation(NPC, -172.41, -55.69, -143.41, 2, 0) + MovementLoopAddLocation(NPC, -172.44, -56.14, -123.56, 2, 0) + MovementLoopAddLocation(NPC, -167.41, -56.14, -115.27, 2, 0) + MovementLoopAddLocation(NPC, -175.67, -56.14, -120.51, 2, 0) + MovementLoopAddLocation(NPC, -175.78, -56.14, -120.31, 2, 3, "convointeract") + MovementLoopAddLocation(NPC, -172.41, -55.69, -143.41, 2, 0) + MovementLoopAddLocation(NPC, -169.77, -55.19, -155.41, 2, 0) + MovementLoopAddLocation(NPC, -164.31, -54.34, -170.32, 2, 0) + MovementLoopAddLocation(NPC, -156.32, -52.58, -186.63, 2, 0) + MovementLoopAddLocation(NPC, -149.44, -51.83, -196.63, 2, 0) + MovementLoopAddLocation(NPC, -143.18, -51.79, -204.42, 2, 0) + + path = math.random(0, 1) + + if path == 1 then + path_1_A(NPC) + else + path_1_B(NPC) + end +end +-------------------------------------------------------------------------------------- +-- Path 1 (A) +-------------------------------------------------------------------------------------- + +function path_1_A(NPC) + MovementLoopAddLocation(NPC, -133.61, -51.81, -202.18, 2, 0) + MovementLoopAddLocation(NPC, -122.51, -46.09, -193.1, 2, 2) + + path = math.random(0, 1) + + if path == 1 then + path_1_A0(NPC) + else + path_1_A1(NPC) + end +end + +function path_1_A0(NPC) + MovementLoopAddLocation(NPC, -120.89, -46.06, -186.65, 2, 0) + MovementLoopAddLocation(NPC, -122.83, -46.07, -183.89, 2, 0) + MovementLoopAddLocation(NPC, -124.63, -46.07, -183.15, 2, 0) + MovementLoopAddLocation(NPC, -126.41, -46.08, -183.44, 2, 0) + MovementLoopAddLocation(NPC, -129.31, -46.08, -184.69, 2, 0) + MovementLoopAddLocation(NPC, -132.83, -46.08, -185.38, 2, 0) + MovementLoopAddLocation(NPC, -136.46, -46.08, -185.39, 2, 0) + MovementLoopAddLocation(NPC, -140.57, -46.08, -184.19, 2, 0) + MovementLoopAddLocation(NPC, -143.16, -46.08, -181.62, 2, 0) + MovementLoopAddLocation(NPC, -144.91, -46.08, -178.82, 2, 0) + MovementLoopAddLocation(NPC, -146.21, -46.08, -174.25, 2, 0) + MovementLoopAddLocation(NPC, -147.28, -43.42, -168.09, 2, 0) + MovementLoopAddLocation(NPC, -141.45, -41.22, -161.81, 2, 0) + MovementLoopAddLocation(NPC, -142.81, -41.22, -159.03, 2, 0) + MovementLoopAddLocation(NPC, -148.79, -41.22, -145.75, 2, 3) + MovementLoopAddLocation(NPC, -149.24, -41.22, -145.09, 2, 0, "depop") +end + +function path_1_A1(NPC) + MovementLoopAddLocation(NPC, -110.71, -46.04, -192.08, 2, 0) + MovementLoopAddLocation(NPC, -108.34, -46.03, -194.76, 2, 0) + MovementLoopAddLocation(NPC, -110.44, -45.46, -197.94, 2, 0) + MovementLoopAddLocation(NPC, -123.47, -40.33, -205.4, 2, 0) + MovementLoopAddLocation(NPC, -125.64, -40.33, -208.7, 2, 0) + MovementLoopAddLocation(NPC, -124.99, -40.33, -212.61, 2, 0) + MovementLoopAddLocation(NPC, -117.79, -40.33, -235.84, 2, 0) + MovementLoopAddLocation(NPC, -115.56, -40.33, -238.77, 2, 0) + MovementLoopAddLocation(NPC, -112.1, -40.33, -240.96, 2, 0) + MovementLoopAddLocation(NPC, -108.02, -40.33, -242.18, 2, 0) + MovementLoopAddLocation(NPC, -91.14, -40.33, -242.24, 2, 0) + MovementLoopAddLocation(NPC, -85.75, -40.33, -238.90, 2, 3) + + path = math.random(0, 1) + + if path == 1 then + path_1_A1_A(NPC) + else + path_1_A1_B(NPC) + end +end + +function path_1_A1_A(NPC) + MovementLoopAddLocation(NPC, -74.84, -40.33, -241.43, 2, 0) + MovementLoopAddLocation(NPC, -73.28, -34.62, -260.18, 2, 0) + MovementLoopAddLocation(NPC, -74.05, -34.6, -263.5, 2, 0) + MovementLoopAddLocation(NPC, -75.97, -34.6, -266.3, 2, 0) + MovementLoopAddLocation(NPC, -79.11, -34.59, -268.7, 2, 0) + MovementLoopAddLocation(NPC, -82.26, -34.59, -272.47, 2, 0) + MovementLoopAddLocation(NPC, -84, -34.59, -276.38, 2, 0) + MovementLoopAddLocation(NPC, -82.66, -34.59, -282.19, 2, 0) + MovementLoopAddLocation(NPC, -81.11, -34.59, -287.45, 2, 0) + MovementLoopAddLocation(NPC, -79.72, -34.59, -293.65, 2, 0) + MovementLoopAddLocation(NPC, -77.75, -34.59, -307.03, 2, 0) + MovementLoopAddLocation(NPC, -76.54, -34.59, -333.41, 2, 0) +end + +function path_1_A1_B(NPC) + MovementLoopAddLocation(NPC, -88.36, -40.34, -250.34, 2, 0) + MovementLoopAddLocation(NPC, -93.29, -40.37, -255.67, 2, 0) + MovementLoopAddLocation(NPC, -112.39, -46.05, -262.74, 2, 0) + MovementLoopAddLocation(NPC, -119.67, -45.91, -264.97, 2, 3) + + path_1_B2(NPC) +end + +-------------------------------------------------------------------------------------- +-- Path 1 B +-------------------------------------------------------------------------------------- + +function path_1_B(NPC) + MovementLoopAddLocation(NPC, -138.63, -51.52, -211.31, 2, 0) + MovementLoopAddLocation(NPC, -134.5, -50.34, -222.11, 2, 0) + MovementLoopAddLocation(NPC, -133.05, -49.66, -228.59, 2, 0) + MovementLoopAddLocation(NPC, -119.67, -45.91, -264.97, 2, 3) + + path = math.random(0, 1) + + if path == 1 then + path_1_B1(NPC) + else + path_1_B2(NPC) + end +end + +function path_1_B1(NPC) + MovementLoopAddLocation(NPC, -112.39, -46.05, -262.74, 2, 0) + MovementLoopAddLocation(NPC, -93.29, -40.37, -255.67, 2, 0) + MovementLoopAddLocation(NPC, -88.36, -40.34, -250.34, 2, 0) + MovementLoopAddLocation(NPC, -85.75, -40.33, -238.90, 2, 0) + + path_1_A1_A(NPC) +end + +function path_1_B2(NPC) + MovementLoopAddLocation(NPC, -117.41, -45.67, -272.94, 2, 0) + MovementLoopAddLocation(NPC, -112.23, -44.38, -287.58, 2, 0) + MovementLoopAddLocation(NPC, -108.43, -43.63, -294.92, 2, 0) + MovementLoopAddLocation(NPC, -106.37, -42.82, -301.29, 2, 0) + MovementLoopAddLocation(NPC, -106.04, -42, -311.79, 2, 0) + MovementLoopAddLocation(NPC, -106.52, -40.64, -329.87, 2, 0) + MovementLoopAddLocation(NPC, -105.83, -34.63, -353.16, 2, 0) + MovementLoopAddLocation(NPC, -94.85, -34.6, -353.04, 2, 0) + MovementLoopAddLocation(NPC, -87.51, -34.59, -348.76, 2, 0) + MovementLoopAddLocation(NPC, -85.22, -34.59, -344.25, 2, 0) + MovementLoopAddLocation(NPC, -79.49, -34.59, -340.59, 2, 0) +end + + +-------------------------------------------------------------------------------------- +-- Path 2 +-------------------------------------------------------------------------------------- + +function path_2(NPC) + MovementLoopAddLocation(NPC, -174.11, -58.78, -225.87, 2, 0) + MovementLoopAddLocation(NPC, -175.66, -58.78, -229.59, 2, 0) + MovementLoopAddLocation(NPC, -175.1, -58.78, -232.62, 2, 0) + MovementLoopAddLocation(NPC, -172.73, -58.79, -239.34, 2, 0) + MovementLoopAddLocation(NPC, -170.44, -58.79, -244.27, 2, 0) + MovementLoopAddLocation(NPC, -165.02, -58.71, -261.07, 2, 0) + MovementLoopAddLocation(NPC, -160.2, -53.04, -276.76, 2, 0) + + path = math.random(0, 1) + + if path == 1 then + path_2_A(NPC) + else + path_2_B(NPC) + end +end + +-------------------------------------------------------------------------------------- +-- Path 2 (A) +-------------------------------------------------------------------------------------- + +function path_2_A(NPC) + MovementLoopAddLocation(NPC, -156.08, -53.06, -279.01, 2, 0) + MovementLoopAddLocation(NPC, -149.76 -53.01, -275.14, 2, 0) + MovementLoopAddLocation(NPC, -118.51, -45.90, -265.65, 2, 5) + + path = math.random(0, 1) + + if path == 1 then + path_1_B1(NPC) + else + path_1_B2(NPC) + end +end + +-------------------------------------------------------------------------------------- +-- Path 2 (B) +-------------------------------------------------------------------------------------- + +function path_2_B(NPC) + MovementLoopAddLocation(NPC, -158.68, -53.07, -281.49, 2, 0) + MovementLoopAddLocation(NPC, -158.3, -53.12, -292.75, 2, 0) + MovementLoopAddLocation(NPC, -156.89, -53.12, -306.44, 2, 0) + MovementLoopAddLocation(NPC, -153.09, -53.12, -317.94, 2, 0) + MovementLoopAddLocation(NPC, -142.21, -53.12, -329.3, 2, 0) + MovementLoopAddLocation(NPC, -139, -53.12, -336.57, 2, 0) + MovementLoopAddLocation(NPC, -139.12, -53.12, -344.84, 2, 0) + MovementLoopAddLocation(NPC, -140.95, -53.12, -352.35, 2, 0) + MovementLoopAddLocation(NPC, -146.84, -53.12, -367.32, 2, 3, "convointeract") + MovementLoopAddLocation(NPC, -140.95, -53.12, -352.35, 2, 0) + MovementLoopAddLocation(NPC, -139.12, -53.12, -344.84, 2, 0) + MovementLoopAddLocation(NPC, -139, -53.12, -336.57, 2, 0) + MovementLoopAddLocation(NPC, -142.21, -53.12, -329.3, 2, 0) + MovementLoopAddLocation(NPC, -153.09, -53.12, -317.94, 2, 0) + MovementLoopAddLocation(NPC, -156.89, -53.12, -306.44, 2, 0) + MovementLoopAddLocation(NPC, -158.3, -53.12, -292.75, 2, 0) + MovementLoopAddLocation(NPC, -158.68, -53.07, -281.49, 2, 0) + MovementLoopAddLocation(NPC, -156.08, -53.06, -279.01, 2, 0) + MovementLoopAddLocation(NPC, -149.76 -53.01, -275.14, 2, 0) + MovementLoopAddLocation(NPC, -118.51, -45.90, -265.65, 2, 5) + + path = math.random(0, 1) + + if path == 1 then + path_1_B1(NPC) + else + path_1_B2(NPC) + end +end + +-------------------------------------------------------------------------------------- +-- path M (second floor) +-------------------------------------------------------------------------------------- + +function path_M_0(NPC) + MovementLoopAddLocation(NPC, -39.22, -20.05, -303.54, 2, 0) + MovementLoopAddLocation(NPC, -33.18, -20.05, -302.24, 2, 0) + MovementLoopAddLocation(NPC, -8.05, -20.05, -301.9, 2, 0) + MovementLoopAddLocation(NPC, -5.43, -20.05, -303.81, 2, 0) + MovementLoopAddLocation(NPC, -5.08, -20.05, -304.57, 2, 0) + MovementLoopAddLocation(NPC, -5.43, -20.05, -303.81, 2, 0) + MovementLoopAddLocation(NPC, -8.05, -20.05, -301.9, 2, 0) + MovementLoopAddLocation(NPC, -33.18, -20.05, -302.24, 2, 0) + MovementLoopAddLocation(NPC, -39.22, -20.05, -303.54, 2, 0) + MovementLoopAddLocation(NPC, -46.98, -20.05, -296.12, 2, 0) +end + +function path_M_1(NPC) + MovementLoopAddLocation(NPC, -50.48, -20.05, -291.21, 2, 0) + MovementLoopAddLocation(NPC, -54.83, -20.05, -289.07, 2, 0) + MovementLoopAddLocation(NPC, -57.27, -20.05, -286.83, 2, 0) + MovementLoopAddLocation(NPC, -59.01, -20.05, -279.63, 2, 0) + MovementLoopAddLocation(NPC, -58.28, -20.05, -273.66, 2, 0) + MovementLoopAddLocation(NPC, -53.34, -20.05, -268.11, 2, 0) + MovementLoopAddLocation(NPC, -51.46, -20.05, -262.82, 2, 0) + MovementLoopAddLocation(NPC, -52.4, -20.05, -265.51, 2, 0) + + path = math.random(0, 1) + + if path == 1 then + path_M_1_2(NPC) + else + path_M_2_1(NPC) + end +end + +function path_M_2(NPC) + MovementLoopAddLocation(NPC, -45.22, -19.99, -292.82, 2, 0) + MovementLoopAddLocation(NPC, -44.02, -20.05, -291.21, 2, 0) + MovementLoopAddLocation(NPC, -41.55, -20.05, -289.99, 2, 0) + MovementLoopAddLocation(NPC, -39.02, -20.05, -289.4, 2, 0) + MovementLoopAddLocation(NPC, -36.53, -20.05, -287.74, 2, 0) + MovementLoopAddLocation(NPC, -35.85, -20.05, -286.19, 2, 0) + MovementLoopAddLocation(NPC, -35.46, -20.05, -283.84, 2, 0) + MovementLoopAddLocation(NPC, -35.78, -20.05, -272.98, 2, 0) + MovementLoopAddLocation(NPC, -36.46, -20.05, -271.23, 2, 0) + MovementLoopAddLocation(NPC, -39.76, -20.05, -266.08, 2, 0) + + path = math.random(0, 1) + + if path == 1 then + path_M_1_2(NPC) + else + path_M_2_1(NPC) + end +end + + +function path_M_1_2(NPC) + MovementLoopAddLocation(NPC, -46.65, -20.05, -262.10, 2, 0, math.random(3, 12)) + MovementLoopAddLocation(NPC, -52.4, -20.05, -257.83, 2, 0) + MovementLoopAddLocation(NPC, -53.92, -20.05, -254.64, 2, 0) + MovementLoopAddLocation(NPC, -57.09, -20.05, -251.29, 2, 0) + MovementLoopAddLocation(NPC, -57.7, -20.05, -249.34, 2, 0) + MovementLoopAddLocation(NPC, -58.47, -20.05, -246.06, 2, 0) + MovementLoopAddLocation(NPC, -58.61, -20.05, -239.32, 2, 0) + MovementLoopAddLocation(NPC, -57.63, -20.05, -236.31, 2, 0) + MovementLoopAddLocation(NPC, -55.64, -20.05, -234.06, 2, 0) + MovementLoopAddLocation(NPC, -48.08, -20.07, -225.36, 2, 0) + MovementLoopAddLocation(NPC, -39.74, -18.02, -209.19, 2, 0) +end + +function path_M_2_1(NPC) + MovementLoopAddLocation(NPC, -46.65, -20.05, -262.10, 2, 0, math.random(3, 12)) + MovementLoopAddLocation(NPC, -39.55, -20.05, -259, 2, 0) + MovementLoopAddLocation(NPC, -36.7, -20.05, -254.18, 2, 0) + MovementLoopAddLocation(NPC, -35.61, -20.05, -251.85, 2, 0) + MovementLoopAddLocation(NPC, -35.64, -20.05, -238.73, 2, 0) + MovementLoopAddLocation(NPC, -35.54, -19.27, -215.97, 2, 0) +end + +-------------------------------------------------------------------------------------- +-- Despawn +-------------------------------------------------------------------------------------- + +function depop(NPC) + Despawn(NPC) +end + +-------------------------------------------------------------------------------------- +-- NPC Interaction conversations and other functions +-------------------------------------------------------------------------------------- + +function convointeract(NPC) + local spawn2 = GetSpawn(NPC, 1440070) + + if spawn2 ~= nil then + AddTimer(spawn2, 5000, "Talk") + end + +end + +-------------------------------------------------------------------------------------- +-- NPC Change Grid +-------------------------------------------------------------------------------------- + +function changegrid_Going_Up(NPC) + SetGridID(NPC, 157236824) +end + +function changegrid_Going_Down(NPC) + SetGridID(NPC, 840463424) +end + diff --git a/server/SpawnScripts/NorthFreeport/transportacademy0.lua b/server/SpawnScripts/NorthFreeport/transportacademy0.lua new file mode 100644 index 000000000..c552d9ba6 --- /dev/null +++ b/server/SpawnScripts/NorthFreeport/transportacademy0.lua @@ -0,0 +1,29 @@ +--[[ + Script Name : SpawnScripts/NorthFreeport/transportacademy0.lua + Script Author : Cynnar + Script Date : 2018.06.05 12:06:46 + Script Purpose : + Script Notes : Took Jabantiz's script for this +--]] + +--[[ + Script Name : SpawnScripts/GreaterFaydark/TunaresSaplingAcornLift.lua + Script Purpose : Automate the Kelethin lifts + Script Author : Jabantiz + Script Date : 5/29/2018 + Script Notes : +--]] + +function spawn(NPC) + AddTransportSpawn(NPC) + AddTimer(NPC, 25000, "UseLift") +end + +function respawn(NPC) + spawn(NPC) +end + +function UseLift(NPC) + UseWidget(NPC) + AddTimer(NPC, 25000, "UseLift") +end diff --git a/server/SpawnScripts/NorthFreeport/transportacademy1.lua b/server/SpawnScripts/NorthFreeport/transportacademy1.lua new file mode 100644 index 000000000..7c6ddf5f7 --- /dev/null +++ b/server/SpawnScripts/NorthFreeport/transportacademy1.lua @@ -0,0 +1,29 @@ +--[[ + Script Name : SpawnScripts/NorthFreeport/transportacademy0.lua + Script Author : Cynnar + Script Date : 2018.06.05 12:06:46 + Script Purpose : + Script Notes : Took Jabantiz's script for this +--]] + +--[[ + Script Name : SpawnScripts/GreaterFaydark/TunaresSaplingAcornLift.lua + Script Purpose : Automate the Kelethin lifts + Script Author : Jabantiz + Script Date : 5/29/2018 + Script Notes : +--]] + +function spawn(NPC) + AddTransportSpawn(NPC) + AddTimer(NPC, 25000, "UseLift") +end + +function respawn(NPC) + spawn(NPC) +end + +function UseLift(NPC) + UseWidget(NPC) + AddTimer(NPC, 25000, "UseLift") +end \ No newline at end of file diff --git a/server/SpawnScripts/Oakmyst/AdalinEmerael.lua b/server/SpawnScripts/Oakmyst/AdalinEmerael.lua new file mode 100644 index 000000000..9aa35e1f9 --- /dev/null +++ b/server/SpawnScripts/Oakmyst/AdalinEmerael.lua @@ -0,0 +1,171 @@ +--[[ + Script Name : SpawnScripts/Oakmyst/AdalinEmerael.lua + Script Purpose : Adalin Emerael + Script Author : Scatman + Script Date : 2009.10.02 + Script Notes : +--]] + +local HIGH_ELF = 8 +local HIGH_ELF_MENTOR_QUEST_5 = 69 +local QUEST_1 = 294 + +function spawn(NPC) + ProvidesQuest(NPC, QUEST_1) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + if HasQuest(Spawn, HIGH_ELF_MENTOR_QUEST_5) then + AddConversationOption(conversation, "I come on behalf of Vindain, from Castleview Hamlet.", "WhatNews") + end + + if HasCompletedQuest(Spawn, QUEST_1) then + Say(NPC, "Thank you for your help.", Spawn) + elseif HasQuest(Spawn, QUEST_1) then + OnQuest1(NPC, Spawn, conversation) + else + if GetRace(Spawn) == HIGH_ELF then + NotAlwaysSoBusy(NPC, Spawn, conversation) + else + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/adalin_emerael/qey_adv01_oakmyst_revamp/qst_adalin_notonquest_5a7f745c.mp3", "Good day to you.", "", 16696239, 3805917441, Spawn) + end + end +end + +function respawn(NPC) + spawn(NPC) +end + +---------------------------------------------------------------------------------------------------------------- +-- HIGH_ELF_MENTOR_QUEST_5 +---------------------------------------------------------------------------------------------------------------- + +function WhatNews(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "A corrupted sunshimmer sprite made its way into Castleview Hamlet. Vindain sent me to talk to you because of what that means...", "ThingsAreNotPleasant") + StartConversation(conversation, NPC, Spawn, "And what news does he send?") +end + +function ThingsAreNotPleasant(NPC, Spawn) + if HasQuest(Spawn, HIGH_ELF_MENTOR_QUEST_5) then + SetStepComplete(Spawn, HIGH_ELF_MENTOR_QUEST_5, 1) + end + + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + if not HasQuest(Spawn, QUEST_1) and not HasCompletedQuest(Spawn, QUEST_1) then + AddConversationOption(conversation, "What is going on?", "Corruption") + end + AddConversationOption(conversation, "So I have heard.") + StartConversation(conversation, NPC, Spawn, "... for Oakmyst. We know. Things are not pleasant here right now.") +end + +function Corruption(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "What can I do to help?", "ToHelp") + AddConversationOption(conversation, "I will return if I get time.") + StartConversation(conversation, NPC, Spawn, "Corruption, and perhaps more. It is too early, and the information is too scattered, to know anything for certain. We can use all the help we can get at this point.") +end + +---------------------------------------------------------------------------------------------------------------- +-- QUEST 1 +---------------------------------------------------------------------------------------------------------------- + +function NotAlwaysSoBusy(NPC, Spawn, conversation) + AddConversationOption(conversation, "What do you mean?", "WhatDoYouMean") + StartConversation(conversation, NPC, Spawn, "The oakmyst was not always so busy.") +end + +function WhatDoYouMean(NPC, Spawn, conversation) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "Why do you wish that?", "WhyDoYouWishThat") + StartConversation(conversation, NPC, Spawn, "At one point in time, this forest was a lonely place. This is not so true anymore, thought I wish it were.") +end + +function WhyDoYouWishThat(NPC, Spawn, conversation) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "What can I do to help?", "ToHelp") + AddConversationOption(conversation, "That is most unfortunate. I will return later if I can help.") + StartConversation(conversation, NPC, Spawn, "Corruption has found hold here. The source of this corruption we do not know. All we can do for now is react and hope more information come to light soon enough.") +end + +function ToHelp(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "A gnoll in Oakmyst?", "AGnollInOakmyst") + StartConversation(conversation, NPC, Spawn, "I am glad to hear you ask. I was in the process of clearing out the corruption in Oakmyst when I was attacked by a gnoll.") +end + +function AGnollInOakmyst(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "What must I do?", "WhatMustIDo") + AddConversationOption(conversation, "Sorry, not today.") + StartConversation(conversation, NPC, Spawn, "Hard to believe, I know. The guards didn't believe me either. It did happen, though. I am no fighter, and if I am attacked again I may not survive. I would ask of you a dangerous favor.") +end + +function WhatMustIDo(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "Where are the trees?", "WhereAreTrees") + StartConversation(conversation, NPC, Spawn, "Cleanse the trees of the Oakmyst. Be careful, gnolls may be lurking nearby. If you do find a gnoll, it is important you bring proof of its existence to a guard. If my words are not proof enough we shall find something that suffices.") +end + +function WhereAreTrees(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "I will, thank you.", "OfferQuest1") + StartConversation(conversation, NPC, Spawn, "There is one just weest of the gates to Castleview Hamlet. Another is just east of the Western Falls west of the first tree. The final tree is east of the entrance to the docks on the western end of the forest. Remember, be wary of gnolls.") +end + +function OfferQuest1(NPC, Spawn) + FaceTarget(NPC, Spawn) + OfferQuest(NPC, Spawn, QUEST_1) +end + +function OnQuest1(NPC, Spawn, conversation) + if GetQuestStep(Spawn, QUEST_1) <= 4 then + if GetQuestStep(Spawn, QUEST_1) == 4 then + AddConversationOption(conversation, "Yes, they have.", "TreesCleansed") + else + AddConversationOption(conversation, "No, not yet.") + end + StartConversation(conversation, NPC, Spawn, "Have the trees been cleansed?") + else + Say(NPC, "Please, take the proof to Lieutenant Charlin. The Qeynos Guard must be alerted.", Spawn) + end +end + +function TreesCleansed(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "Yes, I did. I got his paw.", "GotPaw") + StartConversation(conversation, NPC, Spawn, "Good, good. It is a small step for us, but an important one. Did you encounter any gnolls?") +end + +function GotPaw(NPC, Spawn) + SetStepComplete(Spawn, QUEST_1, 4) + + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "You're welcome.") + StartConversation(conversation, NPC, Spawn, "Now the Qeynos Guard will have to believe me. Show the paw to Lieutenant Charlin. I'm sure it will interest him greatly. Thank you, " .. GetName(Spawn) .. ", for what you've done. ") +end \ No newline at end of file diff --git a/server/SpawnScripts/Oakmyst/AkeeraSneakshot.lua b/server/SpawnScripts/Oakmyst/AkeeraSneakshot.lua new file mode 100644 index 000000000..8a50bfdca --- /dev/null +++ b/server/SpawnScripts/Oakmyst/AkeeraSneakshot.lua @@ -0,0 +1,49 @@ +--[[ + Script Name : SpawnScripts/Oakmyst/AkeeraSneakshot.lua + Script Purpose : Akeera Sneakshot + Script Author : Scatman + Script Date : 2009.05.10 + edited by : ememjr + edited date :2017.05.05 + edit notes : fixed movement loop speed + Script Notes : +--]] + +function spawn(NPC) + MovementLoopAddLocation(NPC, 789.76, 13.34, -245.83, 2, 0) + MovementLoopAddLocation(NPC, 793.01, 13.35, -246.9, 2, 0) + MovementLoopAddLocation(NPC, 807.47, 11.57, -265.88, 2, 0) + MovementLoopAddLocation(NPC, 820.86, 6.98, -267.12, 2, 0) + MovementLoopAddLocation(NPC, 826.9, 6.08, -263.96, 2, 0) + MovementLoopAddLocation(NPC, 834.42, 4.71, -264.45, 2, 0) + MovementLoopAddLocation(NPC, 838.23, 3.76, -254.78, 2, 0) + MovementLoopAddLocation(NPC, 850.58, 2.78, -252.93, 2, 0) + MovementLoopAddLocation(NPC, 857.53, 2.17, -245.56, 2, 0) + MovementLoopAddLocation(NPC, 877.64, 0.45, -248.21, 2, 0) + MovementLoopAddLocation(NPC, 881.41, 0.51, -256.61, 2, 0) + MovementLoopAddLocation(NPC, 890.92, 0.94, -261.56, 2, 0) + MovementLoopAddLocation(NPC, 907.78, 2.28, -305.5, 2, 0) + MovementLoopAddLocation(NPC, 906.17, 2.23, -308.59, 2, 0) + MovementLoopAddLocation(NPC, 893.87, 2.26, -316.77, 2, 0) + MovementLoopAddLocation(NPC, 888.89, 2.19, -315.29, 2, 0) + MovementLoopAddLocation(NPC, 877.25, 1.58, -305.56, 2, 0) + MovementLoopAddLocation(NPC, 863.24, 1.68, -304.98, 2, 0) + MovementLoopAddLocation(NPC, 861.7, 1.78, -308.86, 2, 0) + MovementLoopAddLocation(NPC, 862.09, 2.21, -319.13, 2, 0) + MovementLoopAddLocation(NPC, 853.88, 3.25, -324.73, 2, 0) + MovementLoopAddLocation(NPC, 839.42, 4.59, -315, 2, 0) + MovementLoopAddLocation(NPC, 826.92, 7.18, -295.07, 2, 0) + MovementLoopAddLocation(NPC, 824.09, 6.44, -284.43, 2, 0) + MovementLoopAddLocation(NPC, 817.63, 7.65, -280.93, 2, 0) + MovementLoopAddLocation(NPC, 811.34, 9.83, -271.11, 2, 0) + MovementLoopAddLocation(NPC, 797.36, 12.62, -263.52, 2, 0) + MovementLoopAddLocation(NPC, 783.76, 13.35, -253.78, 2, 0) + MovementLoopAddLocation(NPC, 781.65, 13.72, -238.83, 2, 0) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) +end diff --git a/server/SpawnScripts/Oakmyst/AundorSingingsword.lua b/server/SpawnScripts/Oakmyst/AundorSingingsword.lua new file mode 100644 index 000000000..5ae33f672 --- /dev/null +++ b/server/SpawnScripts/Oakmyst/AundorSingingsword.lua @@ -0,0 +1,23 @@ +--[[ + Script Name : SpawnScripts/Oakmyst/AundorSingingsword.lua + Script Purpose : Aundor Singingsword + Script Author : scatman + Script Date : 2009.05.10 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +function spawn(NPC) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/aundor_singingsword/qey_adv01_oakmyst/aundorsingingsword000.mp3", "", "", 715745780, 1617277503, Spawn) + AddConversationOption(conversation, "I'll keep that in mind, thanks.") + StartConversation(conversation, NPC, Spawn, "The forest's blessing to you. It is a good day to practice sword play, is it not? ") +end \ No newline at end of file diff --git a/server/SpawnScripts/Oakmyst/BardrianVorsuth.lua b/server/SpawnScripts/Oakmyst/BardrianVorsuth.lua new file mode 100644 index 000000000..f85480dbd --- /dev/null +++ b/server/SpawnScripts/Oakmyst/BardrianVorsuth.lua @@ -0,0 +1,69 @@ +--[[ + Script Name : SpawnScripts/Oakmyst/BardrianVorsuth.lua + Script Purpose : Bardrian Vorsuth + Script Author : scatman + Script Date : 2009.05.04 + Modified by : Ememjr + Modified Date :2017.04.22 + Modified Noes : correcte the conversation + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +local QUEST_FROM_CHARLIN = 209 + +function spawn(NPC) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + if HasQuest(Spawn, QUEST_FROM_CHARLIN) and GetQuestStep(Spawn, QUEST_FROM_CHARLIN) == 1 then + WhatDoYaNeed(NPC, Spawn, conversation) + else + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/bardrian_vorsuth/qey_adv01_oakmyst_revamp/qst_bardrian_notonquest_b22fa460.mp3", "Busy... Go away.", "", 1355174858, 967558565, Spawn) + end +end + +----------------------------------------------------------------------------------------------------------- +-- QUEST_FROM_CHARLIN +----------------------------------------------------------------------------------------------------------- + +function WhatDoYaNeed(NPC, Spawn, conversation) + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/bardrian_vorsuth/qey_adv01_oakmyst/quests/bardrian/bardrian000.mp3", "", "", 339572544, 1009095329, Spawn) + AddConversationOption(conversation, "Lieutenant Charlin sent me in his place.", "dlg_5_1") + StartConversation(conversation, NPC, Spawn, "What do ya need? I'm waiting for someone.") +end + +function dlg_5_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/bardrian_vorsuth/qey_adv01_oakmyst/quests/bardrian/bardrian001.mp3", "", "", 3275580861, 3455172409, Spawn) + AddConversationOption(conversation, "What is it?", "dlg_5_2") + StartConversation(conversation, NPC, Spawn, "I see. Well, then listen up. We've got an issue here. We found this box, no post markings at all, and finally our curiosity forced us to open it. Inside was this... machine.") +end + +function dlg_5_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/bardrian_vorsuth/qey_adv01_oakmyst/quests/bardrian/bardrian002.mp3", "", "", 133230117, 3607589031, Spawn) + AddConversationOption(conversation, "Is there anything else of note?", "dlg_5_3") + StartConversation(conversation, NPC, Spawn, "I have no idea. It looks to be some sort of power or speed variable control system, but that's just a rough guess. It could likely be plugged into any number of other devices, but by itself it isn't especially useful. That fact and the lack of markings on the box are what make it suspicious, and why we contacted Charlin.") +end + +function dlg_5_3(NPC, Spawn) + SetStepComplete(Spawn, QUEST_FROM_CHARLIN, 1) + + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/bardrian_vorsuth/qey_adv01_oakmyst/quests/bardrian/bardrian003.mp3", "", "", 917314149, 3791336463, Spawn) + AddConversationOption(conversation, "It is more than enough. Thank you for your help.") + StartConversation(conversation, NPC, Spawn, "Nope, but I figured this all was suspicious enough to get the guards interested.") +end diff --git a/server/SpawnScripts/Oakmyst/CaileeBluesheaf.lua b/server/SpawnScripts/Oakmyst/CaileeBluesheaf.lua new file mode 100644 index 000000000..4a5ead02b --- /dev/null +++ b/server/SpawnScripts/Oakmyst/CaileeBluesheaf.lua @@ -0,0 +1,27 @@ +--[[ + Script Name : SpawnScripts/Oakmyst/CaileeBluesheaf.lua + Script Purpose : Cailee Bluesheaf + Script Author : John Adams + Script Date : 2009.05.08 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +function spawn(NPC) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + + choice = math.random(1, 3) + if choice == 1 then + PlayFlavor(NPC, "", "Truth be told, I never miss!", "", 1689589577, 4560189, Spawn) + elseif choice == 2 then + PlayFlavor(NPC, "", "Blessings to you and your kin!", "", 1689589577, 4560189, Spawn) + elseif choice == 3 then + PlayFlavor(NPC, "", "We train to be the best!", "", 1689589577, 4560189, Spawn) + end +end \ No newline at end of file diff --git a/server/SpawnScripts/Oakmyst/EmpressAnassa.lua b/server/SpawnScripts/Oakmyst/EmpressAnassa.lua new file mode 100644 index 000000000..e2dffd14e --- /dev/null +++ b/server/SpawnScripts/Oakmyst/EmpressAnassa.lua @@ -0,0 +1,69 @@ +--[[ + Script Name : SpawnScripts/Oakmyst/EmpressAnassa.lua + Script Purpose : Empress Anassa + Script Author : scatman + Script Date : 2009.05.09 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +local QUEST_FROM_NEOLA = 211 +local QUEST_FROM_JUDGE = 212 +local QUEST_1 = 213 + +function spawn(NPC) + ProvidesQuest(NPC, QUEST_1) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/empress_anassa/qey_adv01_oakmyst/empressanassa000.mp3", "", "", 122104258, 2418821305, Spawn) + + if HasCompletedQuest(Spawn, QUEST_FROM_NEOLA) and HasCompletedQuest(Spawn, QUEST_FROM_JUDGE) and not HasQuest(Spawn, QUEST_1) and not HasCompletedQuest(Spawn, QUEST_1) then + AddConversationOption(conversation, "Your judge has sent me.", "dlg_5_1") + elseif HasQuest(Spawn, QUEST_1) and GetQuestStep(Spawn, QUEST_1) == 2 then + AddConversationOption(conversation, "I've killed Rotweed.", "KilledRotweed") + end + + AddConversationOption(conversation, "I seek nothing. Farewell.") + StartConversation(conversation, NPC, Spawn, "Greetings and welcome to our hollowed grove. What is it you seek?") +end + +function dlg_5_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/empress_anassa/qey_adv01_oakmyst/empressanassa001.mp3", "", "", 2413694223, 3249886885, Spawn) + AddConversationOption(conversation, "I will challenge this evil. ", "OfferQuest1") + AddConversationOption(conversation, "I cannot help you now. Farewell.") + StartConversation(conversation, NPC, Spawn, "You're the one Eunomia speaks of so highly. You served us well, but the corruption spoiling this forest still looms. We must destroy it!") +end + +function OfferQuest1(NPC, Spawn) + FaceTarget(NPC, Spawn) + OfferQuest(NPC, Spawn, QUEST_1) +end + +function WhatIsRotweed(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/empress_anassa/qey_adv01_oakmyst/empressanassa003.mp3", "", "", 1907995091, 655055942, Spawn) + AddConversationOption(conversation, "I will battle this Rotweed and return victorious. ", "dlg_5_4") + StartConversation(conversation, NPC, Spawn, "In this age, all woodlands fight a silent battle. The forces of nature have become twisted and tormented. Rotweed is one of these corrupted creations that taints the woodlands of Norrath.") +end + +function KilledRotweed(NPC, Spawn) + SetStepComplete(Spawn, QUEST_1, 2) + + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "Blllah x2") + StartConversation(conversation, NPC, Spawn, "Blah blah blah, if you see this I've forgotten to come back and put in wht she actually says. Let Scatman know") +end \ No newline at end of file diff --git a/server/SpawnScripts/Oakmyst/FluwkowirHaggleton.lua b/server/SpawnScripts/Oakmyst/FluwkowirHaggleton.lua new file mode 100644 index 000000000..b46661827 --- /dev/null +++ b/server/SpawnScripts/Oakmyst/FluwkowirHaggleton.lua @@ -0,0 +1,59 @@ +--[[ + Script Name : SpawnScripts/Oakmyst/FluwkowirHaggleton.lua + Script Purpose : Fluwkowir Haggleton + Script Author : Scatman + Script Date : 2009.05.03 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +local QUEST_FROM_JORN = 18 + +function spawn(NPC) + SetPlayerProximityFunction(NPC, 10, "InRange") +end + +function respawn(NPC) + spawn(NPC) +end + +function InRange(NPC, Spawn) + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/fluwkowir_haggleton/qey_adv01_oakmyst_revamp/qst_fluwkowir_wrongway_52d5c902.mp3", "Ooops, I think I was going the other way.", "", 2064229810, 2868860860, Spawn) +end + + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + if HasQuest(Spawn, QUEST_FROM_JORN) and GetQuestStep(Spawn, QUEST_FROM_JORN) == 1 then + JustLeaveMeAlone(NPC, Spawn, conversation) + else + end +end + +function JustLeaveMeAlone(NPC, Spawn, conversation) + AddConversationOption(conversation, "I need to talk to you.", "WhatAbout") + StartConversation(conversation, NPC, Spawn, "Just leave me alone!") +end + +function WhatAbout(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "It's about Jorn Sorefoot, the barbarian you were playing cards with.", "MakeAttackable") + StartConversation(conversation, NPC, Spawn, "Bah! What about? I'm very busy, I don't need to waste my time talking to the likes of you.") +end + +function MakeAttackable(NPC, Spawn) + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/fluwkowir_haggleton/qey_adv01_oakmyst_revamp/qst_fluwkowir_attack_104162fd.mp3", "Oh no you don't! I won't go down!", "", 260519136, 2014641631, Spawn) + SpawnSet(NPC, "attackable", 1) + SpawnSet(NPC, "show_level", 1) + AddHate(Spawn, NPC, 100) +end + +function death(NPC, Spawn) + if HasQuest(Spawn, QUEST_FROM_JORN) then + -- Flukowir's Satchel + SummonItem(Player, 6389) + end +end diff --git a/server/SpawnScripts/Oakmyst/FulkoirHaggleton.lua b/server/SpawnScripts/Oakmyst/FulkoirHaggleton.lua new file mode 100644 index 000000000..cea2d9e77 --- /dev/null +++ b/server/SpawnScripts/Oakmyst/FulkoirHaggleton.lua @@ -0,0 +1,33 @@ +--[[ + Script Name : SpawnScripts/Oakmyst/FulkoirHaggleton.lua + Script Purpose : Fulkoir Haggleton + Script Author : John Adams + Script Date : 2009.05.04 + Modified by : Ememjr + Modified Date : 2017.04.22 + Modified Notes : fixed to work with current Content on Official + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +function spawn(NPC) + SetPlayerProximityFunction(NPC, 10, "InRange", "LeaveRange") +end + +function respawn(NPC) + spawn(NPC) +end + +function InRange(NPC, Spawn) + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/fulkoir_haggleton/qey_adv01_oakmyst_revamp/qst_fulkoir_gone_ff0a041c.mp3", "I'd have to be five times as crazy as I already am to stay here!", "", 2327597972, 1883003048, Spawn) + MoveToLocation(NPC, 927.44, 2.5, -355.01, 4) +end + +function LeaveRange(NPC, Spawn) + +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + +end + diff --git a/server/SpawnScripts/Oakmyst/Gilrix.lua b/server/SpawnScripts/Oakmyst/Gilrix.lua new file mode 100644 index 000000000..847f732c3 --- /dev/null +++ b/server/SpawnScripts/Oakmyst/Gilrix.lua @@ -0,0 +1,34 @@ +--[[ + Script Name : SpawnScripts/Oakmyst/Gilrix.lua + Script Purpose : Spawn script for GIlrix + Script Author : Scatman + Script Date : 2009.05.03 + Script Notes : +--]] + +local QUEST_FROM_CHARLIN_4 = 207 +local FULKOIR_RUN_SPEED = 10 + +function spawn(NPC) +end + +function hailed(NPC, Spawn) +end + +function respawn(NPC) + spawn(NPC) +end + +function aggro(NPC, Spawn) + if HasQuest(Spawn, QUEST_FROM_CHARLIN_4) and GetQuestStep(Spawn, QUEST_FROM_CHARLIN_4) == 1 then + Fulkoir = GetSpawn(Spawn, 1950083) + if Fulkoir ~= nil then + PlayFlavor(Fulkoir, "voiceover/english/tutorial_revamp/fulkoir_haggleton/qey_adv01_oakmyst_revamp/qst_fulkoir_gone_ff0a041c.mp3", "I'd have to be five times as crazy as I already am to stay here!", "", 2327597972, 1883003048) + MovementLoopAddLocation(Fulkoir, 990.39, 12.85, -270.46, FULKOIR_RUN_SPEED, 0) + MovementLoopAddLocation(Fulkoir, 967.24, 8.43, -295.91, FULKOIR_RUN_SPEED, 0) + MovementLoopAddLocation(Fulkoir, 945.64, 4.69, -314.65, FULKOIR_RUN_SPEED, 0) + MovementLoopAddLocation(Fulkoir, 942.97, 2.22, -350.52, FULKOIR_RUN_SPEED, 0) + MovementLoopAddLocation(Fulkoir, 996.30, 2.98, -348.56, FULKOIR_RUN_SPEED, 0, DespawnFulkoir) + end + end +end \ No newline at end of file diff --git a/server/SpawnScripts/Oakmyst/HuntmasterKrell.lua b/server/SpawnScripts/Oakmyst/HuntmasterKrell.lua new file mode 100644 index 000000000..82d61cd33 --- /dev/null +++ b/server/SpawnScripts/Oakmyst/HuntmasterKrell.lua @@ -0,0 +1,35 @@ +--[[ + Script Name : SpawnScripts/Oakmyst/HuntmasterKrell.lua + Script Purpose : Huntmaster Krell + Script Author : John Adams/Scatman + Script Date : 2009.05.07 + edited by : ememjr + edited date : 2017.05.05 + edit notes : modified movement loop speed + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +function spawn(NPC) + MovementLoopAddLocation(NPC, 944.69, 2.18, -351.2, 2, 0) + MovementLoopAddLocation(NPC, 939.83, 2.18, -336.86, 2, 0) + MovementLoopAddLocation(NPC, 931.86, 2.96, -325.16, 2, 0) + MovementLoopAddLocation(NPC, 914.13, 2.26, -308.4, 2, 0) + MovementLoopAddLocation(NPC, 904.57, 2.23, -311.16, 2, 0) + MovementLoopAddLocation(NPC, 881.25, 1.85, -332.53, 2, 0) + MovementLoopAddLocation(NPC, 873.61, 1.46, -326.64, 2, 0) + MovementLoopAddLocation(NPC, 881.92, 1.83, -332.41, 2, 0) + MovementLoopAddLocation(NPC, 899.66, 2.19, -315.85, 2, 0) + MovementLoopAddLocation(NPC, 911.6, 2.28, -308.45, 2, 0) + MovementLoopAddLocation(NPC, 921.05, 2.38, -314.45, 2, 0) + MovementLoopAddLocation(NPC, 937.03, 2.35, -332.14, 2, 0) + MovementLoopAddLocation(NPC, 942.96, 2.21, -351.11, 2, 0) + MovementLoopAddLocation(NPC, 956.65, 2.25, -352, 2, 0) + MovementLoopAddLocation(NPC, 994.68, 2.61, -348.31, 2, 0) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) +end \ No newline at end of file diff --git a/server/SpawnScripts/Oakmyst/Jemila.lua b/server/SpawnScripts/Oakmyst/Jemila.lua new file mode 100644 index 000000000..d60760848 --- /dev/null +++ b/server/SpawnScripts/Oakmyst/Jemila.lua @@ -0,0 +1,41 @@ +--[[ + Script Name : SpawnScripts/Oakmyst/Jemila.lua + Script Purpose : Jemila + Script Author : John Adams + Script Date : 2009.05.08 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +function spawn(NPC) + SetPlayerProximityFunction(NPC, 15, "InRange") +end + +function respawn(NPC) + spawn(NPC) +end + +function InRange(NPC, Spawn) + chance = math.random(1, 100) + if chance <= 25 then + SaySomethingRandom(NPC, Spawn) + end +end + +function hailed(NPC, Spawn) + SaySomethingRandom(NPC, Spawn) +end + +function SaySomethingRandom(NPC, Spawn) + FaceTarget(NPC, Spawn) + + choice = math.random(1, 4) + if choice == 1 then + PlayFlavor(NPC, "voiceover/english/kerran_eco_good_1/ft/service/merchant/kerran_merchant_service_good_1_aoi_gf_c5e79ff5.mp3", "Hello there! Can I interest you in some of the finest merchandise this side of Norrath?", "wave", 2091371377, 2422178491, Spawn) + elseif choice == 2 then + PlayFlavor(NPC, "voiceover/english/kerran_eco_good_1/ft/service/merchant/kerran_merchant_service_good_1_hail_gf_e4fa2bd8.mp3", "Confound it! Where did I put that ledger? It must be around here somewhere!", "confused", 591569637, 3640467043, Spawn) + elseif choice == 3 then + PlayFlavor(NPC, "voiceover/english/kerran_eco_good_1/ft/service/merchant/kerran_merchant_service_good_1_hail_gf_ae84abf9.mp3", "Go on, take a look at the stock. You'll never beat this price in the city. I guarantee it!", "wink", 3487732561, 2995138728, Spawn) + elseif choice == 4 then + PlayFlavor(NPC, "voiceover/english/kerran_eco_good_1/ft/service/merchant/kerran_merchant_service_good_1_hail_gf_45d92a75.mp3", "Welcome! What can I help you with?", "bow", 2213475197, 3871690614, Spawn) + end +end \ No newline at end of file diff --git a/server/SpawnScripts/Oakmyst/JornSorefoot.lua b/server/SpawnScripts/Oakmyst/JornSorefoot.lua new file mode 100644 index 000000000..3e1aef8f8 --- /dev/null +++ b/server/SpawnScripts/Oakmyst/JornSorefoot.lua @@ -0,0 +1,164 @@ +--[[ + Script Name : SpawnScripts/Oakmyst/JornSorefoot.lua + Script Purpose : Jorn Sorefoot + Script Author : John Adams/Scatman + Script Date : 2009.05.03 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +local BARBARIAN = 0 +local QUEST_FROM_BURK = 66 +local QUEST_1 = 18 +local QUEST_OAKMYST_LAST = 208 + +function spawn(NPC) + ProvidesQuest(NPC, QUEST_1) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + if HasQuest(Spawn, QUEST_FROM_BURK) then + ThatLittle(NPC, Spawn, conversation) + else + if HasCompletedQuest(Spawn, QUEST_1) then + if HasCompletedQuest(Spawn, QUEST_OAKMYST_LAST) then + Say(NPC, "I hear you've built up quite a reputation. You have my sincere thanks.", Spawn) + else + Say(NPC, "Thanks again for your help. You have no idea how much I appreciate it.", Spawn) + end + elseif HasQuest(Spawn, QUEST_1) then + OnQuest1(NPC, Spawn, conversation) + else + if GetRace(Spawn) == BARBARIAN then + MightyTired(NPC, Spawn, conversation) + else + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/jorn_sorefoot/qey_adv01_oakmyst_revamp/qst_jorn_notonquest_df0ceb3e.mp3", "Gnomes... Bah!Who needs 'em?", "", 1750870039, 1562498784, Spawn) + end + end + end +end + +----------------------------------------------------------------------------------------------------------------- +-- QUEST FROM GRAYSTONE +----------------------------------------------------------------------------------------------------------------- + +function ThatLittle(NPC, Spawn, conversation) + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/jorn_sorefoot/qey_adv01_oakmyst/quests/jorn/jorn_burk000.mp3", "", "", 1348812672, 1734083903, Spawn) + AddConversationOption(conversation, "Burk Stoneshatter send me to see you.", "dlg_0_1") + StartConversation(conversation, NPC, Spawn, "That little, blasted, jerk-faced liar!") +end + +function dlg_0_1(NPC, Spawn) + SetStepComplete(Spawn, QUEST_FROM_BURK, 1) + + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/jorn_sorefoot/qey_adv01_oakmyst/quests/jorn/jorn_burk001.mp3", "", "", 2501778388, 330892647, Spawn) + + if not HasQuest(Spawn, QUEST_1) and not HasCompletedQuest(Spawn, QUEST_1) then + AddConversationOption(conversation, "He said you might be able to use my help.", "YeahICanUseYourHelp") + else + AddConversationOption(conversation, "I'm not sure. I've already completed your one quest so you're not use to me.") + end + + StartConversation(conversation, NPC, Spawn, "No, Burk isn't a liar. That gnome, though, he's got me steamed. Erm, sorry, why did Burk send you?") +end + +------------------------------------------------------------------------------------------------------------------ +-- QUEST 1 +------------------------------------------------------------------------------------------------------------------ + +function MightyTired(NPC, Spawn, conversation) + AddConversationOption(conversation, "Why are you tired?", "BeenWorkingHard") + StartConversation(conversation, NPC, Spawn, "I'm mighty tired right now, mighty tired indeed.") +end + +function BeenWorkingHard(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "Maybe I can help.", "YeahICanUseYourHelp") + StartConversation(conversation, NPC, Spawn, "I've been working hard. Too hard for my own good, I'm a bit stubborn, ya know?") +end + +function YeahICanUseYourHelp(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/jorn_sorefoot/qey_adv01_oakmyst/quests/jorn/jorn002.mp3", "", "", 1939299225, 497932785, Spawn) + AddConversationOption(conversation, "That is pretty drunk.", "dlg_0_3") + StartConversation(conversation, NPC, Spawn, "Yeah, yeah I can use your help. There's a gnome somewhere out there in the forest. His name is Fluwkowir Haggleton, at least that's what he told me his name was. We were playing cards--high stakes, ya know--and I caught him cheating. I was gonna smash his little face in right then and there, but I was too drunk to fight.") +end + +function dlg_0_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/jorn_sorefoot/qey_adv01_oakmyst/quests/jorn/jorn003.mp3", "", "", 2714635802, 3698549932, Spawn) + AddConversationOption(conversation, "So what do you need me to do?", "dlg_0_4") + StartConversation(conversation, NPC, Spawn, "I know! So I find him the next day, and he musta seen the look in my eyes, because he just stopped in mid-conversation and took off running. I chased him here, but he got away from me. I've got guards on the lookout for him, but running all around the forest has me sweatin' heavy.") +end + +function dlg_0_4(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/jorn_sorefoot/qey_adv01_oakmyst/quests/jorn/jorn004.mp3", "", "", 653807965, 2666347981, Spawn) + AddConversationOption(conversation, "Sure, I can look for him.", "dlg_0_5") + StartConversation(conversation, NPC, Spawn, "I've got guards--friends of mine--watching the gates and the docks. They say they can't detain him without me bringing up something formal, but I don't want that. Instead, they'll just tell me if he passes through. It'll take forever to wait him out, so I've been looking for him in the forest, but I'm tired and need my rest. If you could look for him it'd be very helpful.") +end + +function dlg_0_5(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/jorn_sorefoot/qey_adv01_oakmyst/quests/jorn/jorn005.mp3", "", "", 908304310, 3978784738, Spawn) + AddConversationOption(conversation, "I'll try to find him.", "OfferQuest1") + StartConversation(conversation, NPC, Spawn, "Great! I just need to get back the money he stole from me. Sure, my fists are itching for some revenge, but right now the money is the important thing. I last saw him heading to the docks, to the west. He won't be able to get out directly, but he may be looking for a way to sneak out.") +end + +function OfferQuest1(NPC, Spawn) + FaceTarget(NPC, Spawn) + OfferQuest(NPC, Spawn, QUEST_1) +end + +function OnQuest1(NPC, Spawn, conversation) + if GetQuestStep(Spawn, QUEST_1) == 1 then + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/jorn_sorefoot/qey_adv01_oakmyst/quests/jorn/jorn006.mp3", "", "", 1189036367, 1052258998, Spawn) + AddConversationOption(conversation, "No, not yet.") + StartConversation(conversation, NPC, Spawn, "Have you found my money yet?") + elseif GetQuestStep(Spawn, QUEST_1) == 2 then + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/jorn_sorefoot/qey_adv01_oakmyst/quests/jorn/jorn006.mp3", "", "", 1189036367, 1052258998, Spawn) + AddConversationOption(conversation, "The gnome attacked me, I had to kill him. Here is your money.", "dlg_2_1") + StartConversation(conversation, NPC, Spawn, "Have you found my money yet?") + else + Say(NPC, "You Should take that book to Lieutenant Charlin before someone thinks it belongs to you.", Spawn) + end +end + +function dlg_2_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/jorn_sorefoot/qey_adv01_oakmyst/quests/jorn/jorn007.mp3", "", "", 1565958300, 3393057370, Spawn) + AddConversationOption(conversation, "You're welcome.", "dlg_2_2") + StartConversation(conversation, NPC, Spawn, "Justice is a harsh mistress. Don't fret, he got what he deserved. Thank you, " .. GetName(Spawn) .. ".") +end + +function dlg_2_2(NPC, Spawn) + SetStepComplete(Spawn, QUEST_1, 2) + + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/jorn_sorefoot/qey_adv01_oakmyst/quests/jorn/jorn008.mp3", "", "", 964400543, 602275594, Spawn) + AddConversationOption(conversation, "All right, I'll speak with him.") + StartConversation(conversation, NPC, Spawn, "I- hm, this contains more than just money. This book is written in Lucanic. You know, you'd better take this to Lieutenant Charlin. He'll know what to do about this book, it looks like our gnome friend may have been a Freeportian. I don't want anything to do with any of this, I'm just glad I got my money. Thanks.") +end \ No newline at end of file diff --git a/server/SpawnScripts/Oakmyst/JudgeEunomia.lua b/server/SpawnScripts/Oakmyst/JudgeEunomia.lua new file mode 100644 index 000000000..019ec5736 --- /dev/null +++ b/server/SpawnScripts/Oakmyst/JudgeEunomia.lua @@ -0,0 +1,60 @@ +--[[ + Script Name : SpawnScripts/Oakmyst/JudgeEunomia.lua + Script Purpose : Judge Eunomia + Script Author : scatman + Script Date : 2009.05.09 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +local QUEST_FROM_NEOLA = 211 +local QUEST_1 = 212 + +function spawn(NPC) + ProvidesQuest(NPC, QUEST_1) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/judge_eunomia/qey_adv01_oakmyst/judgeeunomia000.mp3", "", "", 3368710342, 876052157, Spawn) + + if HasCompletedQuest(Spawn, QUEST_FROM_NEOLA) and not HasQuest(Spawn, QUEST_1) and not HasCompletedQuest(Spawn, QUEST_1) then + AddConversationOption(conversation, "I have served Scholar Neola.", "dlg_1_1") + elseif HasQuest(Spawn, QUEST_1) and GetQuestStep(Spawn, QUEST_1) == 2 then + AddConversationOption(conversation, "I have killed the imposters.", "dlg_3_1") + end + + AddConversationOption(conversation, "Bah! What does a plant know of justice? Farewell. ") + StartConversation(conversation, NPC, Spawn, "Justice is our only recourse when the forests are torn asunder.") +end + +function dlg_1_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/judge_eunomia/qey_adv01_oakmyst/judgeeunomia001.mp3", "", "", 419193252, 168213700, Spawn) + AddConversationOption(conversation, "I can hunt down these imposters.", "OfferQuest1") + AddConversationOption(conversation, "I am no executioner. Farewell. ") + StartConversation(conversation, NPC, Spawn, "You are the one who aided our sapling. You can help me execute my judgement. Twisted, disloyal imposters live in the woodland. They hide amongst the noble, but they don't fool me or my sisters.") +end + +function OfferQuest1(NPC, Spawn) + FaceTarget(NPC, Spawn) + OfferQuest(NPC, Spawn, QUEST_1) +end + +function dlg_3_1(NPC, Spawn) + SetStepComplete(Spawn, QUEST_1, 2) + + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/judge_eunomia/qey_adv01_oakmyst/judgeeunomia003.mp3", "", "", 1922975222, 1148613241, Spawn) + AddConversationOption(conversation, "It was a pleasure to defend the Oakmyst.") + StartConversation(conversation, NPC, Spawn, "You proved your devotion to the dryads of this forest. The Empress has taken note of your good deeds. She awaits you.") +end \ No newline at end of file diff --git a/server/SpawnScripts/Oakmyst/LieutenantCharlin.lua b/server/SpawnScripts/Oakmyst/LieutenantCharlin.lua new file mode 100644 index 000000000..a6761e1d5 --- /dev/null +++ b/server/SpawnScripts/Oakmyst/LieutenantCharlin.lua @@ -0,0 +1,565 @@ +--[[ + Script Name : SpawnScripts/Oakmyst/LieutenantCharlin.lua + Script Purpose : Lieutenant Charlin + Script Author : Scatman + Script Date : 2009.10.02 + Modified by : Ememjr + Modified Date :2017.04.22 + Modified Noes : modified for current content on official + Script Notes : +--]] + +local MIN_LEVEL = 5 +local QUEST_FROM_JORN = 18 +local QUEST_FROM_ADALIN = 294 +local QUEST_FROM_MARV = 25 +local QUEST_1 = 207 +local QUEST_2 = 208 +local QUEST_3 = 209 +local QUEST_4 = 210 +local QUEST_5 = 211 +local QUEST_6 = 212 + +function spawn(NPC) + ProvidesQuest(NPC, QUEST_1) + ProvidesQuest(NPC, QUEST_2) + ProvidesQuest(NPC, QUEST_3) + ProvidesQuest(NPC, QUEST_4) + ProvidesQuest(NPC, QUEST_5) + ProvidesQuest(NPC, QUEST_6) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + if HasQuest(Spawn, QUEST_FROM_JORN) and GetQuestStep(Spawn, QUEST_FROM_JORN) == 3 then + AddConversationOption(conversation, "I have news for you.", "FoundBookOnGnome") + end + + if HasQuest(Spawn, QUEST_FROM_ADALIN) and GetQuestStep(Spawn, QUEST_FROM_ADALIN) == 5 then + AddConversationOption(conversation, "I have news for you.", "GnollAttackedWhileCleansing") + end + + if HasQuest(Spawn, QUEST_FROM_MARV) and GetQuestStep(Spawn, QUEST_FROM_MARV) == 3 then + AddConversationOption(conversation, "I have news for you.", "FoundBlackburrowStout") + end + + if HasCompletedQuest(Spawn, QUEST_1) then + if HasCompletedQuest(Spawn, QUEST_2) then + if HasCompletedQuest(Spawn, QUEST_3) then + if HasCompletedQuest(Spawn, QUEST_4) then + if HasCompletedQuest(Spawn, QUEST_5) then + if HasCompletedQuest(Spawn, QUEST_6) then + Say(NPC, "This land and our people owe you. Thank you.", Spawn) + StartConversation(conversation, NPC, Spawn, "This land and our people owe you. Thank you.") + elseif HasQuest(Spawn, QUEST_6) then + Say(NPC, "This land and our people owe you. Thank you.", Spawn) + StartConversation(conversation, NPC, Spawn, "This land and our people owe you. Thank you.") + else + OnQuest5(NPC, Spawn, conversation) + end + elseif HasQuest(Spawn, QUEST_5) then + OnQuest5(NPC, Spawn, conversation) + else + OnQuest4(NPC, Spawn, conversation) + end + elseif HasQuest(Spawn, QUEST_4) then + OnQuest4(NPC, Spawn, conversation) + else + OnQuest3(NPC, Spawn, conversation) + end + elseif HasQuest(Spawn, QUEST_3) then + OnQuest3(NPC, Spawn, conversation) + else + OnQuest2(NPC, Spawn, conversation) + end + elseif HasQuest(Spawn, QUEST_2) then + OnQuest2(NPC, Spawn, conversation) + else + OnQuest1(NPC, Spawn, conversation) + end + elseif HasQuest(Spawn, QUEST_1) then + OnQuest1(NPC, Spawn, conversation) + else + BeCareful(NPC, Spawn, conversation) + end +end + +-------------------------------------------------------------------------------------------------------------------------------- +-- QUEST FROM JORN +-------------------------------------------------------------------------------------------------------------------------------- + +function FoundBookOnGnome(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/lieutenant_charlin/qey_adv01_oakmyst/quests/charlin/charlin_jorn000.mp3", "", "", 3699115243, 1071346940, Spawn) + AddConversationOption(conversation, "I found this book on a gnome. It's written in Lucanic.", "InterestingWheredYouGetThis") + StartConversation(conversation, NPC, Spawn, "Oh? What news.") +end + +function InterestingWheredYouGetThis(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "From a gnome here in Oakmyst Forest.", "ThisIsVeryConcerning") + StartConversation(conversation, NPC, Spawn, "Interesting. Where'd you get this?") +end + +function ThisIsVeryConcerning(NPC, Spawn) + SetStepComplete(Spawn, QUEST_FROM_JORN, 3) + + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + if (GetLevel(Spawn) < MIN_LEVEL) or (HasQuest(Spawn, QUEST_1) or HasCompletedQuest(Spawn, QUEST_1)) then + AddConversationOption(conversation, "Thank you.") + else + AddConversationOption(conversation, "Is there anything else I can do?", "dlg_1_4") + end + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/lieutenant_charlin/qey_adv01_oakmyst/quests/charlin/charlin_jorn002.mp3", "", "", 1267137268, 405925681, Spawn) + StartConversation(conversation, NPC, Spawn, "This is very concerning. I'm going to send this book in to be studied, this is a good find. Maybe it will lead to something bigger. Knowing my luck it will just be a joke book. Good work on this.") +end + +-------------------------------------------------------------------------------------------------------------------------------- +-- QUEST_FROM_ADALIN +-------------------------------------------------------------------------------------------------------------------------------- + +function GnollAttackedWhileCleansing(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "I was cleansing some trees in the forest when a gnoll attacked.", "SecondPersonToClaim") + StartConversation(conversation, NPC, Spawn, "What news is that?") +end + +function SecondPersonToClaim(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "I have his paw.", "HavePaw") + StartConversation(conversation, NPC, Spawn, "You're the second person to claim as much. Listen, I'm sure you saw something, but a gnoll is Oakmyst Forest?") +end + +function HavePaw(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + if (GetLevel(Spawn) < MIN_LEVEL) or (HasQuest(Spawn, QUEST_1) or HasCompletedQuest(Spawn, QUEST_1)) then + AddConversationOption(conversation, "Thank you.") + else + AddConversationOption(conversation, "Can I help in anyway?", "dlg_1_4") + end + StartConversation(conversation, NPC, Spawn, "Well, that you do. I'll send word of this to my superiors, we'll see where they want to go from there. Until then I will continue as normal, though things are not normal by any stretch of the word.") +end + +-------------------------------------------------------------------------------------------------------------------------------- +-- QUEST FROM MARV +-------------------------------------------------------------------------------------------------------------------------------- + +function FoundBlackburrowStout(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "I was helping someone pull their lost shipment from the water and we found some Blackburrow Stout.", "FoundBlackBurrowStout2") + StartConversation(conversation, NPC, Spawn, "What news have you brought me?") +end + +function FoundBlackBurrowStout2(NPC, Spawn) + SetStepComplete(Spawn, QUEST_FROM_MARV, 3) + + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + if (GetLevel(Spawn) < MIN_LEVEL) or (HasQuest(Spawn, QUEST_1) or HasCompletedQuest(Spawn, QUEST_1)) then + AddConversationOption(conversation, "Sure sounds it.") + else + AddConversationOption(conversation, "Is there anything I can do to help?", "dlg_1_4") + end + StartConversation(conversation, NPC, Spawn, "Hmm, that plus everything else I've been hearing lately is enough to cause concern. Someone reported seeing a gnoll a few days ago, I didn't believe him. Maybe he was telling the truth. Things are getting strange around here.") +end + +-------------------------------------------------------------------------------------------------------------------------------- +-- QUEST 1 +-------------------------------------------------------------------------------------------------------------------------------- + +function BeCareful(NPC, Spawn, conversation) + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/lieutenant_charlin/qey_adv01_oakmyst/quests/charlin/charlin000.mp3", "", "", 1924665099, 2767332789, Spawn) + + if GetLevel(Spawn) >= MIN_LEVEL then + AddConversationOption(conversation, "What do I need to look out for?", "dlg_1_1") + else + AddConversationOption(conversation, "I will be.") + end + + StartConversation(conversation, NPC, Spawn, "Be careful out there, citizen.") +end + +function dlg_1_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/lieutenant_charlin/qey_adv01_oakmyst/quests/charlin/charlin001.mp3", "", "", 135128317, 2223244870, Spawn) + AddConversationOption(conversation, "So everything here is fine?", "dlg_1_2") + StartConversation(conversation, NPC, Spawn, "Oh, I don't know, what was it last time I checked? Poachers maybe, or corruption spreading through the forest, I even heard some guy mention a gnoll. Things are bad, don't let me convince you otherwise, but don't believe the people who say the Oakmyst Forest is in serious danger.") +end + +function dlg_1_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/lieutenant_charlin/qey_adv01_oakmyst/quests/charlin/charlin001a.mp3", "", "", 3642173862, 3828556771, Spawn) + AddConversationOption(conversation, "Then there is a danger?", "dlg_1_3") + StartConversation(conversation, NPC, Spawn, "Well... I do get nervous when the Tunarian Alliance steps in. It's probably nothing, but they requested a stronger Qeynos Guard presence here. I think they know more than I do. Still, the danger Oakmyst Forest is in is pretty minor.") +end + +function dlg_1_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/lieutenant_charlin/qey_adv01_oakmyst/quests/charlin/charlin002.mp3", "", "", 103240221, 3198070219, Spawn) + AddConversationOption(conversation, "Sure, I can help.", "dlg_1_4") + AddConversationOption(conversation, "Not right now.") + StartConversation(conversation, NPC, Spawn, "Minor danger. Sure, we can use help, but it's not an emergency like some might have you believe. Would you care to volunteer?") +end + +function dlg_1_4(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/lieutenant_charlin/qey_adv01_oakmyst/quests/charlin/charlin003.mp3", "", "", 2962974855, 690833663, Spawn) + AddConversationOption(conversation, "What do you need me to do?", "dlg_1_5") + StartConversation(conversation, NPC, Spawn, "Good, glad to hear it. Even without all this 'supposed' stuff going on I've got my share of duties. An adventurer was slain recently in these parts. Our initial report back seems to suggest poison. The problem is we have no idea what kind of poison. We know that certain animals in the forest use poison. We suspect that the poachers also use it.") +end + +function dlg_1_5(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/lieutenant_charlin/qey_adv01_oakmyst/quests/charlin/charlin004.mp3", "", "", 2819639943, 1318836680, Spawn) + AddConversationOption(conversation, "I can do it.", "dlg_1_6") + StartConversation(conversation, NPC, Spawn, "Well, the poachers are spry enough to avoid detection, so we can't get a sample of their poison from them. We can, however, collect poison samples from some of the wildlife here and use that as a starting point. At most, we can find out what caused the death, and at the least we eliminate some possibilities. What do you say?") +end + +function dlg_1_6(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/lieutenant_charlin/qey_adv01_oakmyst/quests/charlin/charlin005.mp3", "", "", 276846636, 4209539187, Spawn) + AddConversationOption(conversation, "All right.", "OfferQuest1") + StartConversation(conversation, NPC, Spawn, "Good. Collect some poison samples from frogs, mystail rats, and the spiders. They can all be found in Oakmyst.") +end + +function OfferQuest1(NPC, Spawn) + FaceTarget(NPC, Spawn) + OfferQuest(NPC, Spawn, QUEST_1) +end + +function OnQuest1(NPC, Spawn, conversation) + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/lieutenant_charlin/qey_adv01_oakmyst/quests/charlin/charlin006.mp3", "", "", 1152487104, 26326303, Spawn) + + if (HasQuest(Spawn, QUEST_1) and GetQuestStep(Spawn, QUEST_1) == 4) or (HasCompletedQuest(Spawn, QUEST_1) and not HasQuest(Spawn, QUEST_2)) then + AddConversationOption(conversation, "Yes, I have.", "dlg_3_1") + else + AddConversationOption(conversation, "Not yet.") + end + + StartConversation(conversation, NPC, Spawn, "Have you collected the poison samples yet?") +end + +function dlg_3_1(NPC, Spawn) + if HasQuest(Spawn, QUEST_1) then + SetStepComplete(Spawn, QUEST_1, 4) + end + + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/lieutenant_charlin/qey_adv01_oakmyst/quests/charlin/charlin007.mp3", "", "", 4118896483, 283789370, Spawn) + AddConversationOption(conversation, "Sure, what do you need?", "dlg_3_2") + AddConversationOption(conversation, "Sorry, not now.") + StartConversation(conversation, NPC, Spawn, "Excellent. I'll send these back to Qeynos as soon as I can. In the mean time we can still use your help, are you willing?") +end + +-------------------------------------------------------------------------------------------------------------------------------- +-- QUEST 2 +-------------------------------------------------------------------------------------------------------------------------------- + +function dlg_3_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/lieutenant_charlin/qey_adv01_oakmyst/quests/charlin/charlin008.mp3", "", "", 1585958118, 144641390, Spawn) + AddConversationOption(conversation, "All right.", "OfferQuest2") + StartConversation(conversation, NPC, Spawn, "Another one of those weird reports. Dirt piles have been turning up all around the Oakmyst Forest and we have no idea why. I'd like you to go get some mineral samples from the piles and maybe we'll be able to figure out who put them there and why.") +end + +function OfferQuest2(NPC, Spawn) + Say(NPC, "This is me talking try for quest2") + FaceTarget(NPC, Spawn) + OfferQuest(NPC, Spawn, QUEST_2) +end + +function OnQuest2(NPC, Spawn, conversation) + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/lieutenant_charlin/qey_adv01_oakmyst/quests/charlin/charlin009.mp3", "", "", 197933186, 2286710260, Spawn) + + if (HasQuest(Spawn, QUEST_2) and GetQuestStep(Spawn, QUEST_2) == 2) or (HasCompletedQuest(Spawn, QUEST_2) and not HasQuest(Spawn, QUEST_3)) then + AddConversationOption(conversation, "Yes, here you go.", "dlg_0_1") + else + AddConversationOption(conversation, "No, not yet.") + end + + StartConversation(conversation, NPC, Spawn, "Have you collected the soil yet?") +end + +function dlg_0_1(NPC, Spawn) + if HasQuest(Spawn, QUEST_2) then + SetStepComplete(Spawn, QUEST_2, 2) + end + + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/lieutenant_charlin/qey_adv01_oakmyst/quests/charlin/charlin010.mp3", "", "", 2649903060, 3166046323, Spawn) + AddConversationOption(conversation, "Sure, I can do that.", "dlg_0_2") + AddConversationOption(conversation, "Not now, thanks.") + StartConversation(conversation, NPC, Spawn, "Thanks. Maybe this will turn something up, maybe not. I'll send it off to be studied and we'll get some answers. I've received an unofficial request for my presence at the docks west of here. I'm sure it's nothing too important, how' d you like to go in my place?") +end + +-------------------------------------------------------------------------------------------------------------------------------- +-- QUEST 3 +-------------------------------------------------------------------------------------------------------------------------------- + +function dlg_0_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/lieutenant_charlin/qey_adv01_oakmyst/quests/charlin/charlin011.mp3", "", "", 2323725305, 107103300, Spawn) + AddConversationOption(conversation, "Ok.", "OfferQuest3") + StartConversation(conversation, NPC, Spawn, "Great. Go speak with Bardrian Vorsuth, a dock worker. If experience teaches anything my money says Bardrian's going to report 'something strange' that 'confuses' him and he doesn't know what to do.") +end + +function OfferQuest3(NPC, Spawn) + FaceTarget(NPC, Spawn) + OfferQuest(NPC, Spawn, QUEST_3) +end + +function OnQuest3(NPC, Spawn) + if HasQuest(Spawn, QUEST_3) and GetQuestStep(Spawn, QUEST_3) == 1 then + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/lieutenant_charlin/qey_adv01_oakmyst/quests/charlin/charlin012.mp3", "", "", 1377900887, 278814663, Spawn) + AddConversationOption(conversation, "I'll be back after I've talked with him.") + StartConversation(conversation, NPC, Spawn, "Bardrian?") + elseif HasQuest(Spawn, QUEST_3) and GetQuestStep(Spawn, QUEST_3) == 2 then + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/lieutenant_charlin/qey_adv01_oakmyst/quests/charlin/charlin012.mp3", "", "", 1377900887, 278814663, Spawn) + AddConversationOption(conversation, "He found some strange machine in an unmarked crate on the docks.", "dlg_7_1") + StartConversation(conversation, NPC, Spawn, "Bardrian?") + elseif HasQuest(Spawn, QUEST_3) and GetQuestStep(Spawn, QUEST_3) == 3 then + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/lieutenant_charlin/qey_adv01_oakmyst/quests/charlin/charlin017.mp3", "", "", 3187740271, 4021664312, Spawn) + AddConversationOption(conversation, "Not yet.") + StartConversation(conversation, NPC, Spawn, "Did you find the machine?") + elseif (HasQuest(Spawn, QUEST_3) and GetQuestStep(Spawn, QUEST_3) == 4) or (HasCompletedQuest(Spawn, QUEST_3) and not HasCompletedQuest(Spawn, QUEST_4)) then + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/lieutenant_charlin/qey_adv01_oakmyst/quests/charlin/charlin017.mp3", "", "", 3187740271, 4021664312, Spawn) + AddConversationOption(conversation, "Yes, it is in the water near the Western Falls.", "dlg_10_1") + StartConversation(conversation, NPC, Spawn, "Did you find the machine?") + end +end + +function dlg_7_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/lieutenant_charlin/qey_adv01_oakmyst/quests/charlin/charlin013.mp3", "", "", 1871272901, 810339026, Spawn) + AddConversationOption(conversation, "Bardrian says it was just on the docks one day, no post markings at all. He has no idea what the machine is meant to do, but based on its configuration he thinks it is some sort of variable speed and power controller.", "dlg_7_2") + StartConversation(conversation, NPC, Spawn, "Strange machine? What else can you tell me? This may relate to information we discovered from a book we found on a Freeportian gnome a short while ago.") +end + +function dlg_7_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/lieutenant_charlin/qey_adv01_oakmyst/quests/charlin/charlin014.mp3", "", "", 4247692633, 3050935613, Spawn) + AddConversationOption(conversation, "There were no other machines.", "dlg_7_3") + StartConversation(conversation, NPC, Spawn, "And the other machines?") +end + +function dlg_7_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/lieutenant_charlin/qey_adv01_oakmyst/quests/charlin/charlin015.mp3", "", "", 4101124695, 4199131905, Spawn) + AddConversationOption(conversation, "Can you be certain?", "dlg_7_4") + StartConversation(conversation, NPC, Spawn, "Hmmm, according to data we intercepted there should have been. You know, things may be starting to come together. There are at least two other machines, I believe we've already seen signs of one: the dirt piles. It was meant as a dirt displacement device, and according to information we intercepted it was being tested here.") +end + +function dlg_7_4(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/lieutenant_charlin/qey_adv01_oakmyst/quests/charlin/charlin016a.mp3", "", "", 3187383592, 2219030963, Spawn) + AddConversationOption(conversation, "What about the other machine?", "dlg_7_5") + StartConversation(conversation, NPC, Spawn, "No... But the soil you recovered did have elements consistent with processing: the grains were uniform in size, the soil had small traces of elements that are not natural to Oakmyst Forest. To make matters worse none of the soil recovered was top soil, whoever is digging has been digging deep.") +end + +function dlg_7_5(NPC, Spawn) + SetStepComplete(Spawn, QUEST_3, 2) + + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/lieutenant_charlin/qey_adv01_oakmyst/quests/charlin/charlin016.mp3", "", "", 3315274206, 1719893519, Spawn) + AddConversationOption(conversation, "I will return.") + StartConversation(conversation, NPC, Spawn, "The other machine's purpose was unknown, but we know it involved water in some capacity. Maybe that machine is another test or maybe its purpose is more sinister, either way we need to find it. It will be in or near water, you need to figure out where it is. If it can be easily removed do so, but otherwise do not worry about that--just find out where it is located and report back to me. The most likely spot is near the Western Falls.") +end + +function dlg_10_1(NPC, Spawn) + if HasQuest(Spawn, QUEST_3) then + SetStepComplete(Spawn, QUEST_3, 4) + end + + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/lieutenant_charlin/qey_adv01_oakmyst/quests/charlin/charlin018.mp3", "", "", 1856078636, 1149850938, Spawn) + AddConversationOption(conversation, "What is it?", "dlg_10_2") + AddConversationOption(conversation, "Perhaps later.") + StartConversation(conversation, NPC, Spawn, "Good work, we'll get our people on that right away. I've had my people searching for the other machine but they're coming up without results. Something in my gut tells me it doesn't matter, that it's no longer here. But that doesn't matter, at least not yet. What does matter is our men displacing the machine you found. While they do that I have another task for you.") +end + +-------------------------------------------------------------------------------------------------------------------------------- +-- QUEST 4 +-------------------------------------------------------------------------------------------------------------------------------- + +function dlg_10_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/lieutenant_charlin/qey_adv01_oakmyst/quests/charlin/charlin019.mp3", "", "", 1411954385, 415072002, Spawn) + AddConversationOption(conversation, "All right.", "OfferQuest4") + StartConversation(conversation, NPC, Spawn, "We've intercepted clues about a possible meeting regarding the machine we found on the docks, apparently it was supposed to be removed from the docks quite some time ago but never was. We don't know who will be involved in this meeting but we'd like you to break it up. Once we figure out who is behind this it will give us a big clue as to what's been going on around here.") +end + +function OfferQuest4(NPC, Spawn) + FaceTarget(NPC, Spawn) + OfferQuest(NPC, Spawn, QUEST_4) +end + +function OnQuest4(NPC, Spawn, conversation) + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/lieutenant_charlin/qey_adv01_oakmyst/quests/charlin/charlin020.mp3", "", "", 2483977262, 3448158171, Spawn) + + if (HasQuest(Spawn, QUEST_4) and GetQuestStep(Spawn, QUEST_4) == 2) or (HasCompletedQuest(Spawn, QUEST_4)) then + AddConversationOption(conversation, "Yes, I did.", "dlg_13_5") + else + AddConversationOption(conversation, "No, not yet.") + end + + StartConversation(conversation, NPC, Spawn, "Did you interrupt the meeting?") +end + +function dlg_13_5(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/lieutenant_charlin/qey_adv01_oakmyst/quests/charlin/charlin021.mp3", "", "", 2374633916, 1265137198, Spawn) + AddConversationOption(conversation, "It was a meeting between a gnome and some gnolls. The gnome fled, I slew the gnolls. I believe the leader was named Gilrix. He had this book.", "dlg_13_6") + StartConversation(conversation, NPC, Spawn, "What did you discover?") +end + +function dlg_13_6(NPC, Spawn) + if HasQuest(Spawn, QUEST_4) then + SetStepComplete(Spawn, QUEST_4, 2) + end + + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/lieutenant_charlin/qey_adv01_oakmyst/quests/charlin/charlin022.mp3", "", "", 3210550300, 3185527572, Spawn) + AddConversationOption(conversation, "How so?", "dlg_13_7") + StartConversation(conversation, NPC, Spawn, "Gnolls? Then all the reports were right. And that Gilrix. He was mentioned in one of the materials we obtained concerning this whole mess. But we may be a step ahead of them for once.") +end + +-------------------------------------------------------------------------------------------------------------------------------- +-- QUEST 5 +-------------------------------------------------------------------------------------------------------------------------------- + + +function dlg_13_7(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/lieutenant_charlin/qey_adv01_oakmyst/quests/charlin/charlin023.mp3", "", "", 1812542762, 4174950812, Spawn) + AddConversationOption(conversation, "What must I do?", "dlg_13_8") + AddConversationOption(conversation, "I may be able to help later.") + StartConversation(conversation, NPC, Spawn, "The book we obtained had lots of notes and plans. The book you've provided to us has all their contingency plans. If you've disrupted the meeting then the gnolls won't know precisely what happened and will fall to one of their backup plans. This gives us an excellent opportunity to strike.") +end + +function dlg_13_8(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/lieutenant_charlin/qey_adv01_oakmyst/quests/charlin/charlin024.mp3", "", "", 823446036, 800185291, Spawn) + AddConversationOption(conversation, "What about the others?", "dlg_13_9") + StartConversation(conversation, NPC, Spawn, "Well, with this book we've got the locations where the gnoll lieutenants will be in hiding while they await orders from Gilrix. While they wait, they are vulnerable. One will be near here--take the path west and turn north before you go under the bridge, that should put you very near him, he's hiding in an alcove.") +end + +function dlg_13_9(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/lieutenant_charlin/qey_adv01_oakmyst/quests/charlin/charlin024a.mp3", "", "", 1440777464, 2474739731, Spawn) + AddConversationOption(conversation, "All right.", "OfferQuest5") + StartConversation(conversation, NPC, Spawn, "Another will be on the rocky hill south east of Clearwater Pond. The last will be in a small alcove just north west of the Western Falls.") +end + +function OfferQuest5(NPC, Spawn) + FaceTarget(NPC, Spawn) + OfferQuest(NPC, Spawn, QUEST_5) +end + +function OnQuest5(NPC, Spawn, conversation) + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/lieutenant_charlin/qey_adv01_oakmyst/quests/charlin/charlin025.mp3", "", "", 4104237922, 4156355427, Spawn) + + if (HasQuest(Spawn, QUEST_5) and GetQuestStep(Spawn, QUEST_5) == 4) or (HasCompletedQuest(Spawn, QUEST_5)) then + AddConversationOption(conversation, "Yes, they are all dead.", "dlg_18_1") + else + AddConversationOption(conversation, "Not yet.") + end + + StartConversation(conversation, NPC, Spawn, "Have you taken out the lieutenants?") +end + +function dlg_18_1(NPC, Spawn) + if HasQuest(Spawn, QUEST_5) then + SetStepComplete(Spawn, QUEST_5, 4) + end + + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/lieutenant_charlin/qey_adv01_oakmyst/quests/charlin/charlin026.mp3", "", "", 1438660086, 1610935766, Spawn) + AddConversationOption(conversation, "Is there anything else?", "dlg_18_2") + StartConversation(conversation, NPC, Spawn, "This is great news! With their lieutenants dead the gnoll presence here will be in shambles. Those that don't flee will easily be captured. You have done a great, great thing.") +end + +-------------------------------------------------------------------------------------------------------------------------------- +-- QUEST 6 +-------------------------------------------------------------------------------------------------------------------------------- + +function dlg_18_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/lieutenant_charlin/qey_adv01_oakmyst/quests/charlin/charlin027.mp3", "", "", 4018442535, 45795752, Spawn) + AddConversationOption(conversation, "I can face them.", "OfferQuest6") + StartConversation(conversation, NPC, Spawn, "Yes, in fact. I have good news for you. Elements of the Qeynos Guard--among other factions--have asked for you by name. You've made quite a name for yourself in your work here, and I put in a good word for you. You are asked to report to the Caves, apparently the gnoll movement here was only one of many. The Rockpaw Gnolls may soon pose a threat bigger than we thought possible.") +end + +function OfferQuest6(NPC, Spawn) + FaceTarget(NPC, Spawn) + OfferQuest(NPC, Spawn, QUEST_6) +end diff --git a/server/SpawnScripts/Oakmyst/LulienLeafven.lua b/server/SpawnScripts/Oakmyst/LulienLeafven.lua new file mode 100644 index 000000000..aa3c311fa --- /dev/null +++ b/server/SpawnScripts/Oakmyst/LulienLeafven.lua @@ -0,0 +1,27 @@ +--[[ + Script Name : SpawnScripts/Oakmyst/LulienLeafven.lua + Script Purpose : Lulien Leafven + Script Author : John Adams + Script Date : 2009.05.08 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +function spawn(NPC) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + + choice = math.random(1, 3) + if choice == 1 then + PlayFlavor(NPC, "", "Practice makes perfect!", "", 1689589577, 4560189, Spawn) + elseif choice == 2 then + PlayFlavor(NPC, "", "Another day, another bullseye!", "", 1689589577, 4560189, Spawn) + elseif choice == 3 then + PlayFlavor(NPC, "", "I've been here so long, that I don't even have to look at the target to hit it!", "", 1689589577, 4560189, Spawn) + end +end \ No newline at end of file diff --git a/server/SpawnScripts/Oakmyst/Madeline.lua b/server/SpawnScripts/Oakmyst/Madeline.lua new file mode 100644 index 000000000..d7d3406ae --- /dev/null +++ b/server/SpawnScripts/Oakmyst/Madeline.lua @@ -0,0 +1,21 @@ +--[[ + Script Name : SpawnScripts/Oakmyst/Madeline.lua + Script Purpose : Madeline + Script Author : Scatman + Script Date : 2009.10.08 + Script Notes : +--]] + +dofile("SpawnScripts/Generic/GenericGuardVoiceOvers.lua") + +function spawn(NPC) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + GenericGuardHail(NPC, Spawn) +end \ No newline at end of file diff --git a/server/SpawnScripts/Oakmyst/MarvBoilfist.lua b/server/SpawnScripts/Oakmyst/MarvBoilfist.lua new file mode 100644 index 000000000..d73e8c6ce --- /dev/null +++ b/server/SpawnScripts/Oakmyst/MarvBoilfist.lua @@ -0,0 +1,151 @@ +--[[ + Script Name : SpawnScripts/Oakmyst/MarvBoilfist.lua + Script Purpose : Marv Boilfist + Script Author : Scatman + Script Date : 2009.10.07 + Script Notes : +--]] + +local DWARF = 2 +local DWARF_MENTOR_QUEST_FROM_MAV = 298 +local QUEST_1 = 25 +local QUEST_LAST_IN_OAKMYST = 208 + +function spawn(NPC) + ProvidesQuest(NPC, QUEST_1) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + if HasQuest(Spawn, DWARF_MENTOR_QUEST_FROM_MAV) then + SetStepComplete(Spawn, DWARF_MENTOR_QUEST_FROM_MAV, 1) + AddConversationOption(conversation, "Mav sent me to check up on you.", "Mav") + end + + if HasCompletedQuest(Spawn, QUEST_1) then + if HasCompletedQuest(Spawn, QUEST_LAST_IN_OAKMYST) then + Say(NPC, "I heard ya created quite a stir, good job to you.", Spawn) + else + Say(NPC, "Thanks again for your help.", Spawn) + end + elseif HasQuest(Spawn, QUEST_1) then + OnQuest1(NPC, Spawn, conversation) + else + if GetRace(Spawn) == DWARF then + IfItIsntOneThing(NPC, Spawn, conversation) + else + NotDwarf(NPC, Spawn) + end + end +end + +function respawn(NPC) + spawn(NPC) +end + +function NotDwarf(NPC, Spawn) + local choice = math.random(1, 3) + if choice == 1 then + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/marv_boilfist/qey_adv01_oakmyst_revamp/qst_marv_notonquest_1cfb7ccc.mp3", "Come back when you're a dwarf, maybe we'll chat some! Har har har!", "", 2659151540, 1499434670, Spawn) + elseif choice == 2 then + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/marv_boilfist/qey_adv01_oakmyst_revamp/qst_marv_notonquest_12fcbc1c.mp3", "Everyone else seems to think this place is so exciting, not me though.", "", 2722242117, 3678566567, Spawn) + elseif choice == 3 then + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/marv_boilfist/qey_adv01_oakmyst_revamp/qst_marv_notonquest_8a49edfc.mp3", "If you're headin' to Graystone Yard, tell Mav I'm not drinking... yet!", "", 796198495, 1984404688, Spawn) + end +end + +---------------------------------------------------------------------------------------------- +-- DWARF_MENTOR_QUEST_FROM_MAV +---------------------------------------------------------------------------------------------- + +function Mav(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + if not HasQuest(Spawn, QUEST_1) and not HasCompletedQuest(Spawn, QUEST_1) then + AddConversationOption(conversation, "Sure I can help.", "ICanHelp") + AddConversationOption(conversation, "Sorry, not right now.") + StartConversation(conversation, NPC, Spawn, "Hah, that means she thinks I'm either in trouble or drunk. Lucky for me, it's not the latter. I'm glad you showed up, how would you like to help me?") + else + AddConversationOption(conversation, "Sure.") + StartConversation(conversation, NPC, Spawn, "Hah, that means she thinks I'm either in trouble or drunk. Lucky for me, it's not the latter. Would ya let her know for me?") + end +end + +---------------------------------------------------------------------------------------------- +-- QUEST 1 +---------------------------------------------------------------------------------------------- + +function IfItIsntOneThing(NPC, Spawn, conversation) + AddConversationOption(conversation, "What's wrong with today?", "WrongToday") + StartConversation(conversation, NPC, Spawn, "If it isn't one thing, it's another. Have you ever had one of those bad days?") +end + +function WrongToday(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "Sure I can help.", "ICanHelp") + AddConversationOption(conversation, "Not right now.") + StartConversation(conversation, NPC, Spawn, "Enough things have gone wrong that I'm considerin' cuttin' my losses and goin' home. If you're every in a position to cut your losses--and it sounds appealing--then you know you're havin' a bad day. I'm at my wit's end! Any chance I could get some help from ya?") +end + + +function ICanHelp(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "What can I do to help?", "WhatCanIDo") + StartConversation(conversation, NPC, Spawn, "That's the first good news I've had all day. I've been waitin' here for word from the courier who dropped off these barrels. He first brought me the wonderful news that my shipment had been dumped in the water here in Oakmyst. So he brought me a partial shipment, a lotta good that does me. He takes off without a second thought, I told him to get someone to come help me but I don't think he remembered. So I'm sittin' here, can't move this shipment without the rest of it, unless I wanna waste a lot of moving fees. And I can't leave this shipment here unless I wanna risk it gettin' stolen.") +end + +function WhatCanIDo(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "I can do that.", "OfferQuest1") + StartConversation(conversation, NPC, Spawn, "You can get the rest of the shipment for me. It's in the drink right now. If you head west you'll get to the docks. Once you're there hop on in and start pulling up the shipment. Once you've collected it you can bring it back to me.") +end + +function OfferQuest1(NPC, Spawn) + FaceTarget(NPC, Spawn) + OfferQuest(NPC, Spawn, QUEST_1) +end + +function OnQuest1(NPC, Spawn, conversation) + if GetQuestStep(Spawn, QUEST_1) <= 2 then + if GetQuestStep(Spawn, QUEST_1) == 2 then + AddConversationOption(conversation, "Yes I did, here you go.", "YesIDid") + else + AddConversationOption(conversation, "Not yet.") + end + StartConversation(conversation, NPC, Spawn, "Did ya get my shipment?") + else + Say(NPC, "You should take the Blackburrow Stout to Lieutenant Charlin sooner rather than later.", Spawn) + end +end + +function YesIDid(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "I should take it back.", "ShouldTakeItBack") + StartConversation(conversation, NPC, Spawn, "Ah, great! Thank you so much- er, wait a minute. This is my shipment but looks like you snagged part of someone else's shipment too.") +end + +function ShouldTakeItBack(NPC, Spawn) + SetStepComplete(Spawn, QUEST_1, 2) + + -- blackburrow stout + if not HasItem(Spawn, 3774) then + SummonItem(Spawn, 3774, 1) + end + + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "Thanks and you're welcome.") + StartConversation(conversation, NPC, Spawn, "Not so fast. This is Blackburrow Stout, which is more than a little odd. You don't need to take this back to the docks, you should take it to the Qeynos Guard. Speak with Lieutenant Charlin, he'll let you know what to do next. Good find, " .. GetName(Spawn) .. "! And thanks for gettin' my shipment.") +end \ No newline at end of file diff --git a/server/SpawnScripts/Oakmyst/MontehFurthread.lua b/server/SpawnScripts/Oakmyst/MontehFurthread.lua new file mode 100644 index 000000000..024db6d00 --- /dev/null +++ b/server/SpawnScripts/Oakmyst/MontehFurthread.lua @@ -0,0 +1,42 @@ +--[[ + Script Name : SpawnScripts/Oakmyst/MontehFurthread.lua + Script Purpose : Monteh Furthread + Script Author : Scatman + Script Date : 2009.05.10 + edited by : ememjr + edited date : 2017.05.05 + edit notes : modified speed in movement loop + Script Notes : +--]] + +function spawn(NPC) + MovementLoopAddLocation(NPC, 790.01, 13.34, -259.56, 2, 0) + MovementLoopAddLocation(NPC, 797.43, 12.42, -265.56, 2, 0) + MovementLoopAddLocation(NPC, 809.23, 10.54, -268.5, 2, 0) + MovementLoopAddLocation(NPC, 811.17, 9.85, -270.65, 2, 0) + MovementLoopAddLocation(NPC, 821.29, 7.15, -265.65, 2, 0) + MovementLoopAddLocation(NPC, 827.03, 5.37, -269.39, 2, 0) + MovementLoopAddLocation(NPC, 860.03, 1.96, -243.67, 2, 0) + MovementLoopAddLocation(NPC, 883.67, 0.48, -252.77, 2, 0) + MovementLoopAddLocation(NPC, 893.02, 0.84, -259.57, 2, 0) + MovementLoopAddLocation(NPC, 905.65, 2.24, -287.73, 2, 0) + MovementLoopAddLocation(NPC, 920.8, 2.26, -289.93, 2, 0) + MovementLoopAddLocation(NPC, 942.84, 2.55, -282.7, 2, 0) + MovementLoopAddLocation(NPC, 952.02, 5.16, -289.77, 2, 0) + MovementLoopAddLocation(NPC, 939.77, 2.28, -283.23, 2, 0) + MovementLoopAddLocation(NPC, 906.14, 2.11, -291.5, 2, 0) + MovementLoopAddLocation(NPC, 898.59, 1.74, -266.52, 2, 0) + MovementLoopAddLocation(NPC, 873.05, 0.82, -246.33, 2, 0) + MovementLoopAddLocation(NPC, 850.96, 2.77, -244.8, 2, 0) + MovementLoopAddLocation(NPC, 843.88, 3.01, -257.16, 2, 0) + MovementLoopAddLocation(NPC, 826.35, 6.14, -265.41, 2, 0) + MovementLoopAddLocation(NPC, 803.65, 12.07, -265.13, 2, 0) + MovementLoopAddLocation(NPC, 767.43, 13.35, -247.6, 2, 0) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) +end diff --git a/server/SpawnScripts/Oakmyst/ObserverGaladn.lua b/server/SpawnScripts/Oakmyst/ObserverGaladn.lua new file mode 100644 index 000000000..da916d5c4 --- /dev/null +++ b/server/SpawnScripts/Oakmyst/ObserverGaladn.lua @@ -0,0 +1,30 @@ +--[[ + Script Name : SpawnScripts/Oakmyst/ObserverGaladn.lua + Script Purpose : Observer Galadn + Script Author : scatman + Script Date : 2009.05.10 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +function spawn(NPC) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + choice = math.random(1, 3) + if choice == 1 then + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_1_1016.mp3", "", "hello", 0, 0, Spawn) + elseif choice == 2 then + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_2_1016.mp3", "", "hello", 0, 0, Spawn) + elseif choice == 3 then + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_3_1016.mp3", "", "hello", 0, 0, Spawn) + end + AddConversationOption(conversation, "Thank you.") + StartConversation(conversation, NPC, Spawn, "And you, adventurer.") +end \ No newline at end of file diff --git a/server/SpawnScripts/Oakmyst/RinduilFlintflight.lua b/server/SpawnScripts/Oakmyst/RinduilFlintflight.lua new file mode 100644 index 000000000..7431e75d5 --- /dev/null +++ b/server/SpawnScripts/Oakmyst/RinduilFlintflight.lua @@ -0,0 +1,25 @@ +--[[ + Script Name : SpawnScripts/Oakmyst/RinduilFlintflight.lua + Script Purpose : Rinduil Flintflight + Script Author : John Adams + Script Date : 2009.05.08 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +function spawn(NPC) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + + choice = math.random(1, 2) + if choice == 1 then + PlayFlavor(NPC, "", "It takes years of practice to do what I do.", "", 1689589577, 4560189, Spawn) + elseif choice == 2 then + PlayFlavor(NPC, "", "Can you not see that I'm concentrating?", "", 1689589577, 4560189, Spawn) + end +end \ No newline at end of file diff --git a/server/SpawnScripts/Oakmyst/RotweedThistle.lua b/server/SpawnScripts/Oakmyst/RotweedThistle.lua new file mode 100644 index 000000000..62332683c --- /dev/null +++ b/server/SpawnScripts/Oakmyst/RotweedThistle.lua @@ -0,0 +1,24 @@ +--[[ + Script Name : SpawnScripts/Oakmyst/RotweedThistle.lua + Script Purpose : Rotweed Thistle + Script Author : Scatman + Script Date : 2009.10.08 + Script Notes : +--]] + +function spawn(NPC) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) +end + +function death(NPC, Spawn) + local rotweed = GetSpawn(GetZone(Spawn), 1950204) + if rotweed == nil then + SpawnMob(Zone, 1950204, 0, 932.211, 11.7721, -167.759, 280.656) + end +end \ No newline at end of file diff --git a/server/SpawnScripts/Oakmyst/ScholarNeola.lua b/server/SpawnScripts/Oakmyst/ScholarNeola.lua new file mode 100644 index 000000000..1c8a9c917 --- /dev/null +++ b/server/SpawnScripts/Oakmyst/ScholarNeola.lua @@ -0,0 +1,56 @@ +--[[ + Script Name : SpawnScripts/Oakmyst/ScholarNeola.lua + Script Purpose : Scholar Neola + Script Author : scatman + Script Date : 2009.05.08 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +local QUEST_1 = 211 + +function spawn(NPC) + ProvidesQuest(NPC, QUEST_1) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/scholar_neola/qey_adv01_oakmyst/scholarneola000.mp3", "", "", 684527020, 3141115058, Spawn) + if not HasCompletedQuest(Spawn, QUEST_1) and not HasQuest(Spawn, QUEST_1) then + AddConversationOption(conversation, "What is wrong with the sapling?", "dlg_3_1") + elseif HasQuest(Spawn, QUEST_1) and GetQuestStep(Spawn, QUEST_1) == 3 then + AddConversationOption(conversation, "I saved the sapling.", "SavedSapling") + end + AddConversationOption(conversation, "I will trod where I please. Goodbye! ") + StartConversation(conversation, NPC, Spawn, "Why do you tread upon the fertile ground? Doing so taints the lustrous blades that our young sapling needs to grow.") +end + +function dlg_3_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/scholar_neola/qey_adv01_oakmyst/scholarneola001.mp3", "", "", 4101705727, 2237841081, Spawn) + AddConversationOption(conversation, "Is there anything I can do to help the sapling? ", "OfferQuest1") + AddConversationOption(conversation, "Your sapling is not my problem. Farewell.") + StartConversation(conversation, NPC, Spawn, "The young sapling is still weak. It feeds upon the mana of this thicket but needs greater nutrients to prosper in this woodland.") +end + +function OfferQuest1(NPC, Spawn) + FaceTarget(NPC, Spawn) + OfferQuest(NPC, Spawn, QUEST_1) +end + +function SavedSapling(NPC, Spawn) + SetStepComplete(Spawn, QUEST_1, 3) + + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "I will speak to the judge.") + StartConversation(conversation, NPC, Spawn, "The sapling has a young battle ahead to become a timber lord. Your help brings it closer to this goal. Now you must seek out the Judge. She awaits those who aid this forest.") +end \ No newline at end of file diff --git a/server/SpawnScripts/Oakmyst/Solas.lua b/server/SpawnScripts/Oakmyst/Solas.lua new file mode 100644 index 000000000..9fba46692 --- /dev/null +++ b/server/SpawnScripts/Oakmyst/Solas.lua @@ -0,0 +1,21 @@ +--[[ + Script Name : SpawnScripts/Oakmyst/Solas.lua + Script Purpose : Solas + Script Author : Scatman + Script Date : 2009.10.08 + Script Notes : +--]] + +dofile("SpawnScripts/Generic/GenericGuardVoiceOvers.lua") + +function spawn(NPC) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + GenericGuardHail(NPC, Spawn) +end \ No newline at end of file diff --git a/server/SpawnScripts/Oakmyst/StewardTredo.lua b/server/SpawnScripts/Oakmyst/StewardTredo.lua new file mode 100644 index 000000000..d131216d8 --- /dev/null +++ b/server/SpawnScripts/Oakmyst/StewardTredo.lua @@ -0,0 +1,47 @@ +--[[ + Script Name : SpawnScripts/Oakmyst/StewardTredo.lua + Script Purpose : Steward Tredo + Script Author : scatman + Script Date : 2009.05.08 + Edited by : ememjr + edit date : 2017.05.05 + edit note : updated quest numbers + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +local QUEST_1 = 232 + +function spawn(NPC) + ProvidesQuest(NPC, QUEST_1) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + NotAPoacher(NPC, Spawn, conversation) +end + +--------------------------------------------------------------------------------------------------------------- +-- QUEST 1 +--------------------------------------------------------------------------------------------------------------- + +function NotAPoacher(NPC, Spawn, conversation) + PlayFlavor(NPC, "voiceover/english/optional1/steward_tredo/qey_adv01_oakmyst/stewardtredo000.mp3", "", "", 2443855119, 308651193, Spawn) + + if not HasCompletedQuest(Spawn, QUEST_1) and not HasQuest(Spawn, QUEST_1) then + AddConversationOption(conversation, "Poachers? What can I do to help?", "OfferQuest1") + end + + AddConversationOption(conversation, "I wish you luck in avoiding poachers. Farewell.") + StartConversation(conversation, NPC, Spawn, "Not a poacher, I see. Thank the misty winds! Sorry for thinking otherwise. With all the babble of poachers lurking Oakmyst, I thought for sure your strange face would be the last sight I'd see!") +end + +function OfferQuest1(NPC, Spawn) + FaceTarget(NPC, Spawn) + OfferQuest(NPC, Spawn, QUEST_1) +end diff --git a/server/SpawnScripts/Oakmyst/Stormbrace.lua b/server/SpawnScripts/Oakmyst/Stormbrace.lua new file mode 100644 index 000000000..ee7779d83 --- /dev/null +++ b/server/SpawnScripts/Oakmyst/Stormbrace.lua @@ -0,0 +1,21 @@ +--[[ + Script Name : SpawnScripts/Oakmyst/Stormbrace.lua + Script Purpose : Stormbrace + Script Author : Scatman + Script Date : 2009.10.08 + Script Notes : +--]] + +dofile("SpawnScripts/Generic/GenericGuardVoiceOvers.lua") + +function spawn(NPC) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + GenericGuardHail(NPC, Spawn) +end \ No newline at end of file diff --git a/server/SpawnScripts/Oakmyst/ToppaDoppster.lua b/server/SpawnScripts/Oakmyst/ToppaDoppster.lua new file mode 100644 index 000000000..42e501c4f --- /dev/null +++ b/server/SpawnScripts/Oakmyst/ToppaDoppster.lua @@ -0,0 +1,90 @@ +--[[ + Script Name : SpawnScripts/Oakmyst/ToppaDoppster.lua + Script Purpose : Toppa Doppster + Script Author : Scatman + Script Date : 2009.09.19 + Updated by :ememjr + Updated Date :2017.05.04 + Update NOtes : updated quest number + Script Notes : +--]] + +function spawn(NPC) + ProvidesQuest(NPC, 231) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + RandomGreeting(NPC, Spawn) + + if HasCompletedQuest(Spawn, 231) then + Say(NPC, "You'll be a hero among my friends!") + elseif HasQuest(Spawn, 231) then + if GetQuestStep(Spawn, 231) == 1 then + AddConversationOption(conversation, "Not yet.") + elseif GetQuestStep(Spawn, 231) == 2 then + AddConversationOption(conversation, "Yes, here it is.", "YesHereItIs") + end + + StartConversation(conversation, NPC, Spawn, "Did you get the glowmyst juice?") + else + AddConversationOption(conversation, "What do you need?", "WhatDoYouNeed") + AddConversationOption(conversation, "Sorry, not now.") + StartConversation(conversation, NPC, Spawn, "You there! Do you think you can help me?") + end +end + +function RandomGreeting(NPC, Spawn) + choice = math.random(1, 3) + if choice == 1 then + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_1_1005.mp3", "", "", 0, 0, Spawn) + elseif choice == 2 then + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_2_1005.mp3", "", "", 0, 0, Spawn) + elseif choice == 3 then + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_3_1005.mp3", "", "", 0, 0, Spawn) + end +end + +function respawn(NPC) + spawn(NPC) +end + +------------------------------------------------------------------------------------------------------------ +-- QUEST 1 +------------------------------------------------------------------------------------------------------------ + +function WhatDoYouNeed(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "But what?", "ButWhat") + StartConversation(conversation, NPC, Spawn, "My friends sent me out to collect some glowmyst juice from the beetles here in Oakmyst. You see, we're trying to start our own tavern and we're working on our craft. I was sent out here to collect some glowmyst juice, but...") +end + +function ButWhat(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "I could get the juice for you.", "ICouldGetJuice") + AddConversationOption(conversation, "Good luck figuring it out.") + StartConversation(conversation, NPC, Spawn, "These bugs are so disgusting! I can't stand touching them. Don't even get me started on extracting their fluid sacs.") +end + +function ICouldGetJuice(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "I'll be right back with them.", "OfferQuest1") + StartConversation(conversation, NPC, Spawn, "Would you? That would be wonderful! I need ten glowmyst fluid sacs.") +end + +function YesHereItIs(NPC, Spawn) + SetStepComplete(Spawn, 231, 2) + conversation = CreateConversation() + + AddConversationOption(conversation, "Glad to hear it!") + StartConversation(conversation, NPC, Spawn, "Wonderful! Thank you so much! My friends will be pleased!") +end + +function OfferQuest1(NPC, Spawn) + OfferQuest(NPC, Spawn, 231) +end diff --git a/server/SpawnScripts/Oakmyst/TrackerGalera.lua b/server/SpawnScripts/Oakmyst/TrackerGalera.lua new file mode 100644 index 000000000..3edd92fa9 --- /dev/null +++ b/server/SpawnScripts/Oakmyst/TrackerGalera.lua @@ -0,0 +1,69 @@ +--[[ + Script Name : SpawnScripts/Oakmyst/TrackerGalera.lua + Script Purpose : Tracker Galera + Script Author : scatman + Script Date : 2009.05.08 + edited by : ememjr + edited date : 2017.05.05 + edit notes : edited quest id + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +local QUEST_FROM_STEWARD_TREDO = 232 + +function spawn(NPC) + MovementLoopAddLocation(NPC, 819.19, 5.18, -200.15, 2, 0) + MovementLoopAddLocation(NPC, 833.12, 4.43, -190.98, 2, 0) + MovementLoopAddLocation(NPC, 871.16, 1, -188.66, 2, 0) + MovementLoopAddLocation(NPC, 892.25, 2.83, -201.12, 2, 0) + MovementLoopAddLocation(NPC, 870.89, 1.11, -187.38, 2, 0) + MovementLoopAddLocation(NPC, 841.38, 3.75, -188.93, 2, 0) + MovementLoopAddLocation(NPC, 813.34, 5.97, -202.01, 2, 0) + MovementLoopAddLocation(NPC, 806.17, 6.34, -202.92, 2, 0) + MovementLoopAddLocation(NPC, 795.21, 6.95, -207.17, 2, 0) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tracker_galera/qey_adv01_oakmyst/trackergalera000.mp3", "", "", 3127596944, 436493991, Spawn) + AddConversationOption(conversation, "Who or what is a Ferith'Anar? ", "dlg_1_1") + if HasQuest(Spawn, QUEST_FROM_STEWARD_TREDO) and GetQuestStep(Spawn, QUEST_FROM_STEWARD_TREDO) == 2 then + AddConversationOption(conversation, "I bring you proof of poachers in Oakmyst.", "dlg_17_1") + end + AddConversationOption(conversation, "I shall respect these woods. Farewell.") + StartConversation(conversation, NPC, Spawn, "The beauty of Oakmyst sometimes overwhelms me but not as much as the sight of Ferith'Anar!") +end + +---------------------------------------------------------------------------------------------------------- +-- QUEST FROM STEWARD TREDO +---------------------------------------------------------------------------------------------------------- + +function dlg_17_1(NPC, Spawn) + SetStepComplete(Spawn, QUEST_FROM_STEWARD_TREDO, 2) + + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tracker_galera/qey_adv01_oakmyst/trackergalera002.mp3", "", "", 155245446, 3356947108, Spawn) + AddConversationOption(conversation, "May the creatures of Oakmyst roam safely.") + StartConversation(conversation, NPC, Spawn, "I thank you, as do the creatures of the Oakmyst. These pelts shall prove to the Qeynos Guard that these woods are not properly protected. ") +end + +---------------------------------------------------------------------------------------------------------- +-- NORMAL CHAT +---------------------------------------------------------------------------------------------------------- + +function dlg_1_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tracker_galera/qey_adv01_oakmyst/trackergalera001.mp3", "", "", 2151056607, 2801091083, Spawn) + AddConversationOption(conversation, "I shall respect this unicorn. Farewell.") + StartConversation(conversation, NPC, Spawn, "Ferith'Anar is only the most illustrious and sacred creature that trots these woods! She is a unicorn ... far from her home in the sovereign forests of Faydark.") +end diff --git a/server/SpawnScripts/Oakmyst/TrackerKelnis.lua b/server/SpawnScripts/Oakmyst/TrackerKelnis.lua new file mode 100644 index 000000000..163140bfb --- /dev/null +++ b/server/SpawnScripts/Oakmyst/TrackerKelnis.lua @@ -0,0 +1,23 @@ +--[[ + Script Name : SpawnScripts/Oakmyst/TrackerKelnis.lua + Script Purpose : Tracker Kelnis + Script Author : scatman + Script Date : 2009.05.08 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +function spawn(NPC) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tracker_kelnis/qey_adv01_oakmyst/trackerkelnis000.mp3", "", "", 2160349950, 3920623086, Spawn) + AddConversationOption(conversation, "I shall watch my steps within these woods.") + StartConversation(conversation, NPC, Spawn, "Enter the forest with caution, traveler! You never know what dangers lurk in the Oakmyst. ") +end \ No newline at end of file diff --git a/server/SpawnScripts/Oakmyst/Truesteel.lua b/server/SpawnScripts/Oakmyst/Truesteel.lua new file mode 100644 index 000000000..8951ca982 --- /dev/null +++ b/server/SpawnScripts/Oakmyst/Truesteel.lua @@ -0,0 +1,29 @@ +--[[ + Script Name : SpawnScripts/Oakmyst/Truesteel.lua + Script Purpose : Truesteel + Script Author : Scatman + Script Date : 2009.05.07 + Script Notes : +--]] + +function spawn(NPC) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + + choice = math.random(1, 4) + if choice == 1 then + PlayFlavor(NPC, "voiceover/english/human_eco_good_1/ft/service/guard/human_guard_service_good_1_hail_gm_76da37c9.mp3", "I hate working this shift! If the gnolls don't attack now, I may die of boredom.", "grumble", 4099618783, 4191002419, Spawn) + elseif choice == 2 then + PlayFlavor(NPC, "voiceover/english/human_eco_good_1/ft/service/guard/human_guard_service_good_1_hail_gm_c865a827.mp3", "Duty above all else, citizen, except honor!", "scold", 4141262779, 4227030045, Spawn) + elseif choice == 3 then + PlayFlavor(NPC, "voiceover/english/human_eco_good_1/ft/service/guard/human_guard_service_good_1_hail_gm_ebfceda5.mp3", "Greetings, citizen. I am on guard duty. Should you get into trouble, seek me out.", "attention", 1945337199, 2685949436, Spawn) + elseif choice == 4 then + PlayFlavor(NPC, "voiceover/english/human_eco_good_1/ft/service/guard/human_guard_service_good_1_hail_gm_ee473c11.mp3", "Good day to you, citizen. All preserve Queen Antonia.", "salute", 2997871263, 2912813719, Spawn) + end +end \ No newline at end of file diff --git a/server/SpawnScripts/Oakmyst/aclearwaterfrog606.lua b/server/SpawnScripts/Oakmyst/aclearwaterfrog606.lua new file mode 100644 index 000000000..906975633 --- /dev/null +++ b/server/SpawnScripts/Oakmyst/aclearwaterfrog606.lua @@ -0,0 +1,204 @@ +--[[ + Script Name : SpawnScripts/Oakmyst/aclearwaterfrog606.lua + Script Author : Ememjr + Script Date : 2019.10.12 06:10:28 + Script Purpose : + : +--]] + +function spawn(NPC) +MovementLoopAddLocation(NPC, 986.909, 0.781519, -206.048, 2, 5) +MovementLoopAddLocation(NPC, 986.909, 0.781519, -206.048, 2, 5) +MovementLoopAddLocation(NPC, 981.574, 0.676865, -206.435, 2, 5) +MovementLoopAddLocation(NPC, 981.336, 0.605602, -207.475, 2, 5) +MovementLoopAddLocation(NPC, 979.898, 0.860104, -207.574, 2, 5) +MovementLoopAddLocation(NPC, 976.898, 0.708733, -200.428, 2, 5) +MovementLoopAddLocation(NPC, 977.963, 0.984644, -203.69, 2, 5) +MovementLoopAddLocation(NPC, 978.806, 5.17616, -202.717, 2, 5) +MovementLoopAddLocation(NPC, 978.042, 7.46185, -197.574, 2, 5) +MovementLoopAddLocation(NPC, 980.773, 2.67748, -197.591, 2, 5) +MovementLoopAddLocation(NPC, 980.283, 2.00012, -197.601, 2, 5) +MovementLoopAddLocation(NPC, 980.283, 2.00012, -197.601, 2, 10) +MovementLoopAddLocation(NPC, 978.499, 2.72604, -197.598, 2, 0) +MovementLoopAddLocation(NPC, 978.499, 2.72604, -197.598, 2, 0) +MovementLoopAddLocation(NPC, 980.825, 5.26465, -202.383, 2, 0) +MovementLoopAddLocation(NPC, 980.158, 5.17928, -203.387, 2, 0) +MovementLoopAddLocation(NPC, 980.458, 6.2448, -203.579, 2, 10) +--MovementLoopAddLocation(NPC, 980.458, 6.2448, -203.579, 2, 0) +--MovementLoopAddLocation(NPC, 981.492, 6.12132, -200.747, 2, 0) +--MovementLoopAddLocation(NPC, 981.064, 2.54151, -200.255, 2, 0) +--MovementLoopAddLocation(NPC, 981.064, 2.54151, -200.255, 2, 0) +--MovementLoopAddLocation(NPC, 987.325, 2.86794, -200.678, 2, 0) +--MovementLoopAddLocation(NPC, 987.287, 3.78678, -201.653, 2, 0) +--MovementLoopAddLocation(NPC, 987.512, 3.14934, -202.576, 2, 0) +--MovementLoopAddLocation(NPC, 984.325, 1.4005, -203.594, 2, 0) +--MovementLoopAddLocation(NPC, 984.263, 1.13902, -202.529, 2, 0) +--MovementLoopAddLocation(NPC, 985.35, 0.702294, -202.542, 2, 0) +--MovementLoopAddLocation(NPC, 985.687, 1.19563, -202.482, 2, 0) +--MovementLoopAddLocation(NPC, 990.024, 1.24909, -202.449, 2, 0) +--MovementLoopAddLocation(NPC, 990.024, 1.24909, -202.449, 2, 0) +--MovementLoopAddLocation(NPC, 989.031, 1.72502, -202.449, 2, 0) +--MovementLoopAddLocation(NPC, 978.028, 2.74264, -202.401, 2, 0) +--MovementLoopAddLocation(NPC, 982.027, 1.02147, -201.553, 2, 0) +--MovementLoopAddLocation(NPC, 983.027, 1.67374, -201.553, 2, 0) +--MovementLoopAddLocation(NPC, 980.026, 2.48341, -202.442, 2, 0) +--MovementLoopAddLocation(NPC, 982.536, 2.29215, -203.08, 2, 0) +--MovementLoopAddLocation(NPC, 982.536, 2.29215, -203.08, 2, 0) +--MovementLoopAddLocation(NPC, 980.541, 1.57727, -213.104, 2, 0) +--MovementLoopAddLocation(NPC, 981.541, 1.75375, -213.104, 2, 0) +--MovementLoopAddLocation(NPC, 978.543, 1.03912, -202.896, 2, 0) +--MovementLoopAddLocation(NPC, 977.759, 1.18264, -202.966, 2, 0) +--MovementLoopAddLocation(NPC, 981.469, 1.0364, -202.104, 2, 0) +--MovementLoopAddLocation(NPC, 980.469, 1.8613, -203.895, 2, 0) +--MovementLoopAddLocation(NPC, 983.366, 2.40051, -203.168, 2, 0) +--MovementLoopAddLocation(NPC, 983.112, 2.36198, -202.611, 2, 0) +--MovementLoopAddLocation(NPC, 983.112, 2.36198, -202.611, 2, 0) +--MovementLoopAddLocation(NPC, 981.435, 4.14736, -203.41, 2, 0) +--MovementLoopAddLocation(NPC, 980.433, 0.96624, -203.41, 2, 0) +--MovementLoopAddLocation(NPC, 979.406, 0.644429, -203.383, 2, 0) +--MovementLoopAddLocation(NPC, 991.306, 0.854891, -200.41, 2, 0) +--MovementLoopAddLocation(NPC, 989.306, 1.76202, -200.411, 2, 0) +--MovementLoopAddLocation(NPC, 986.304, 1.13746, -200.002, 2, 0) +--MovementLoopAddLocation(NPC, 987.262, 1.06745, -200.227, 2, 0) +--MovementLoopAddLocation(NPC, 984.256, 1.425, -200.837, 2, 0) +--MovementLoopAddLocation(NPC, 998.063, 1.81519, -200.747, 2, 0) +--MovementLoopAddLocation(NPC, 998.063, 1.81519, -200.747, 2, 0) +--MovementLoopAddLocation(NPC, 987.683, 0.980721, -203.733, 2, 0) +--MovementLoopAddLocation(NPC, 989.718, 0.80799, -202.693, 2, 0) +--MovementLoopAddLocation(NPC, 989.119, 1.81479, -202.724, 2, 0) +--MovementLoopAddLocation(NPC, 989.119, 1.81479, -202.724, 2, 0) +--MovementLoopAddLocation(NPC, 988.677, 0.994082, -200.262, 2, 0) +--MovementLoopAddLocation(NPC, 991.618, 1.97518, -200.922, 2, 0) +--MovementLoopAddLocation(NPC, 991.063, 1.95475, -200.997, 2, 0) +--MovementLoopAddLocation(NPC, 991.063, 1.95475, -200.997, 2, 0) +--MovementLoopAddLocation(NPC, 976.394, 1.24703, -200.618, 2, 0) +--MovementLoopAddLocation(NPC, 978.491, 0.914289, -201.385, 2, 0) +--MovementLoopAddLocation(NPC, 979.427, 0.589224, -202.968, 2, 0) +--MovementLoopAddLocation(NPC, 979.682, 0.643666, -203.926, 2, 0) +--MovementLoopAddLocation(NPC, 980.207, 1.0391, -203.981, 2, 0) +--MovementLoopAddLocation(NPC, 980.207, 1.0391, -203.981, 2, 0) +--MovementLoopAddLocation(NPC, 978.52, 1.52643, -203.071, 2, 0) +--MovementLoopAddLocation(NPC, 977.517, 1.33403, -204.934, 2, 0) +--MovementLoopAddLocation(NPC, 976.525, 3.49882, -204.071, 2, 0) +--MovementLoopAddLocation(NPC, 976.474, 1.49649, -205.925, 2, 0) +--MovementLoopAddLocation(NPC, 991.529, 1.83476, -205.071, 2, 0) +--MovementLoopAddLocation(NPC, 990.524, 1.49265, -206.928, 2, 0) +--MovementLoopAddLocation(NPC, 989.603, 3.8733, -207.789, 2, 0) +--MovementLoopAddLocation(NPC, 989.406, 2.97519, -192.927, 2, 0) +--MovementLoopAddLocation(NPC, 987.576, 7.86799, -192.909, 2, 0) +--MovementLoopAddLocation(NPC, 987.121, 6.5329, -192.9, 2, 0) +--MovementLoopAddLocation(NPC, 987.121, 6.5329, -192.9, 2, 0) +--MovementLoopAddLocation(NPC, 989.162, 7.89669, -192.9, 2, 0) +--MovementLoopAddLocation(NPC, 989.162, 7.89669, -192.9, 2, 0) +--MovementLoopAddLocation(NPC, 988.159, 7.90196, -194.989, 2, 0) +--MovementLoopAddLocation(NPC, 988.862, 7.58415, -195.991, 2, 0) +--MovementLoopAddLocation(NPC, 988.862, 7.58415, -195.991, 2, 0) +--MovementLoopAddLocation(NPC, 989.839, 7.69289, -192.823, 2, 0) +--MovementLoopAddLocation(NPC, 986.902, 7.45448, -192.504, 2, 0) +--MovementLoopAddLocation(NPC, 984.938, 5.77889, -193.193, 2, 0) +--MovementLoopAddLocation(NPC, 984.582, 3.4307, -193.798, 2, 0) +--MovementLoopAddLocation(NPC, 984.582, 3.4307, -193.798, 2, 0) +--MovementLoopAddLocation(NPC, 982.843, 3.24951, -193.149, 2, 0) +--MovementLoopAddLocation(NPC, 983.972, 5.25431, -193.036, 2, 0) +--MovementLoopAddLocation(NPC, 983.896, 7.4882, -192.011, 2, 0) +--MovementLoopAddLocation(NPC, 983.165, 6.73283, -195.248, 2, 0) +--MovementLoopAddLocation(NPC, 980.972, 0.673276, -194.202, 2, 0) +--MovementLoopAddLocation(NPC, 980.972, 0.639507, -197.202, 2, 0) +--MovementLoopAddLocation(NPC, 980.927, 0.509199, -196.149, 2, 0) +--MovementLoopAddLocation(NPC, 981.959, 1.26022, -196.214, 2, 0) +--MovementLoopAddLocation(NPC, 981.209, 0.543402, -196.851, 2, 0) +--MovementLoopAddLocation(NPC, 978.666, 0.556926, -196.823, 2, 0) +--MovementLoopAddLocation(NPC, 980.081, 1.79355, -199.149, 2, 0) +--MovementLoopAddLocation(NPC, 983.081, 1.33254, -199.149, 2, 0) +--MovementLoopAddLocation(NPC, 982.081, 0.746012, -196.845, 2, 0) +--MovementLoopAddLocation(NPC, 985.085, 6.33914, -196.802, 2, 0) +--MovementLoopAddLocation(NPC, 984.086, 4.95519, -196.802, 2, 0) +--MovementLoopAddLocation(NPC, 987.082, 0.837903, -199.193, 2, 0) +--MovementLoopAddLocation(NPC, 965.061, 1.91738, -199.34, 2, 0) +--MovementLoopAddLocation(NPC, 965.061, 1.91738, -199.34, 2, 0) +--MovementLoopAddLocation(NPC, 984.475, 0.835655, -197.656, 2, 0) +--MovementLoopAddLocation(NPC, 986.469, 4.41931, -219.659, 2, 0) +--MovementLoopAddLocation(NPC, 987.469, 5.24851, -219.659, 2, 0) +--MovementLoopAddLocation(NPC, 988.469, 6.07644, -196.341, 2, 0) +--MovementLoopAddLocation(NPC, 991.198, 6.50463, -196.273, 2, 0) +--MovementLoopAddLocation(NPC, 991.198, 6.50463, -196.273, 2, 0) +--MovementLoopAddLocation(NPC, 987.545, 6.09795, -196.659, 2, 0) +--MovementLoopAddLocation(NPC, 986.534, 5.33908, -197.337, 2, 0) +--MovementLoopAddLocation(NPC, 987.305, 2.21348, -198.153, 2, 0) +--MovementLoopAddLocation(NPC, 987.194, 2.05909, -199.572, 2, 0) +--MovementLoopAddLocation(NPC, 987.194, 2.05909, -199.572, 2, 0) +--MovementLoopAddLocation(NPC, 985.498, 4.73322, -198.399, 2, 0) +--MovementLoopAddLocation(NPC, 984.498, 0.886813, -198.399, 2, 0) +--MovementLoopAddLocation(NPC, 991.486, 0.691218, -198.427, 2, 0) +--MovementLoopAddLocation(NPC, 979.369, 0.807509, -197.399, 2, 0) +--MovementLoopAddLocation(NPC, 977.553, 1.20672, -197.391, 2, 0) +--MovementLoopAddLocation(NPC, 976.557, 0.74994, -197.258, 2, 0) +--MovementLoopAddLocation(NPC, 983.546, 0.810964, -197.161, 2, 0) +--MovementLoopAddLocation(NPC, 982.521, 0.839059, -197.073, 2, 0) +--MovementLoopAddLocation(NPC, 981.527, 0.907255, -197.994, 2, 0) +--MovementLoopAddLocation(NPC, 1003.84, 0.712904, -197.592, 2, 0) +--MovementLoopAddLocation(NPC, 982.431, 1.29073, -198.563, 2, 0) +--MovementLoopAddLocation(NPC, 976.443, 1.24577, -199.598, 2, 0) +--MovementLoopAddLocation(NPC, 976.851, 0.711886, -199.566, 2, 0) +--MovementLoopAddLocation(NPC, 976.851, 0.711886, -199.566, 2, 0) +--MovementLoopAddLocation(NPC, 977.417, 1.25512, -197.415, 2, 0) +--MovementLoopAddLocation(NPC, 978.368, 0.636211, -197.78, 2, 0) +--MovementLoopAddLocation(NPC, 988.836, 0.779239, -196.771, 2, 0) +--MovementLoopAddLocation(NPC, 979.633, 0.633484, -196.655, 2, 0) +--MovementLoopAddLocation(NPC, 977.74, 1.68595, -197.352, 2, 0) +--MovementLoopAddLocation(NPC, 976.675, 1.33899, -198.763, 2, 0) +--MovementLoopAddLocation(NPC, 983.213, 0.560425, -198.843, 2, 0) +--MovementLoopAddLocation(NPC, 983.213, 0.560425, -198.843, 2, 0) +--MovementLoopAddLocation(NPC, 977.523, 0.782607, -198.241, 2, 0) +--MovementLoopAddLocation(NPC, 978.531, 0.629214, -193.76, 2, 0) +--MovementLoopAddLocation(NPC, 979.713, 6.52847, -193.241, 2, 0) +--MovementLoopAddLocation(NPC, 979.472, 0.557977, -192.949, 2, 0) +--MovementLoopAddLocation(NPC, 988.715, 0.935365, -192.241, 2, 0) +--MovementLoopAddLocation(NPC, 989.641, 0.648956, -195.881, 2, 0) +--MovementLoopAddLocation(NPC, 990.611, 7.98973, -194.905, 2, 0) +--MovementLoopAddLocation(NPC, 990.345, 5.6455, -205.761, 2, 0) +--MovementLoopAddLocation(NPC, 984.578, 3.75872, -205.778, 2, 0) +--MovementLoopAddLocation(NPC, 984.113, 3.41886, -205.789, 2, 0) +--MovementLoopAddLocation(NPC, 984.113, 3.41886, -205.789, 2, 0) +--MovementLoopAddLocation(NPC, 990.17, 3.87449, -205.786, 2, 0) +--MovementLoopAddLocation(NPC, 990.17, 3.87449, -205.786, 2, 0) +--MovementLoopAddLocation(NPC, 984.561, 7.57385, -194.175, 2, 0) +--MovementLoopAddLocation(NPC, 985.5, 7.56263, -192.229, 2, 0) +--MovementLoopAddLocation(NPC, 985.479, 7.99639, -193.231, 2, 0) +--MovementLoopAddLocation(NPC, 985.138, 4.93146, -193.811, 2, 0) +--MovementLoopAddLocation(NPC, 985.138, 4.93146, -193.811, 2, 0) +--MovementLoopAddLocation(NPC, 985.355, 7.57385, -192.876, 2, 0) +--MovementLoopAddLocation(NPC, 984.326, 7.68852, -195.785, 2, 0) +--MovementLoopAddLocation(NPC, 991.387, 7.44785, -195.583, 2, 0) +--MovementLoopAddLocation(NPC, 989.496, 5.86667, -194.161, 2, 0) +--MovementLoopAddLocation(NPC, 989.077, 3.41683, -194.837, 2, 0) +--MovementLoopAddLocation(NPC, 989.077, 3.41683, -194.837, 2, 0) +--MovementLoopAddLocation(NPC, 979.326, 3.24383, -194.241, 2, 0) +--MovementLoopAddLocation(NPC, 979.284, 2.15471, -195.216, 2, 0) +--MovementLoopAddLocation(NPC, 976.604, 1.90023, -194.199, 2, 0) +--MovementLoopAddLocation(NPC, 976.604, 1.98021, -197.199, 2, 0) +--MovementLoopAddLocation(NPC, 976.536, 1.73144, -196.131, 2, 0) +--MovementLoopAddLocation(NPC, 976.287, 0.965299, -196.819, 2, 0) +--MovementLoopAddLocation(NPC, 976.287, 0.965299, -196.819, 2, 0) +--MovementLoopAddLocation(NPC, 982.968, 1.22228, -199.145, 2, 0) +--MovementLoopAddLocation(NPC, 981.967, 1.6515, -199.145, 2, 0) +--MovementLoopAddLocation(NPC, 986.94, 2.61681, -199.189, 2, 0) +--MovementLoopAddLocation(NPC, 990.965, 1.07256, -196.857, 2, 0) +--MovementLoopAddLocation(NPC, 991.965, 1.73385, -196.857, 2, 0) +--MovementLoopAddLocation(NPC, 988.967, 2.33832, -199.154, 2, 0) +--MovementLoopAddLocation(NPC, 962.911, 5.70441, -199.261, 2, 0) +--MovementLoopAddLocation(NPC, 960.4, 5.8344, -199.857, 2, 0) +--MovementLoopAddLocation(NPC, 960.4, 5.8344, -199.857, 2, 0) +--MovementLoopAddLocation(NPC, 989.049, 2.40932, -196.793, 2, 0) +--MovementLoopAddLocation(NPC, 991.049, 1.52046, -218.857, 2, 0) +--MovementLoopAddLocation(NPC, 988.361, 1.63159, -218.782, 2, 0) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) +end + +function respawn(NPC) + +end + diff --git a/server/SpawnScripts/Oakmyst/acorrupteddryad.lua b/server/SpawnScripts/Oakmyst/acorrupteddryad.lua new file mode 100644 index 000000000..173d5f095 --- /dev/null +++ b/server/SpawnScripts/Oakmyst/acorrupteddryad.lua @@ -0,0 +1,57 @@ +--[[ + Script Name : SpawnScripts/Oakmyst/acorrupteddryad.lua + Script Purpose : a corrupted dryad + Script Author : Scatman + Script Date : 2009.10.08 + Script Notes : +--]] + +local spoke = false + +function spawn(NPC) + spoke = false +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) +end + +function healthchanged(NPC, Spawn) + local chance = math.random(0, 100) + if chance <= 25 then + local health_percent = GetHP(NPC) / GetMaxHP(NPC) + if health_percent < 0.50 and spoke == false then + spoke = true + Speak(NPC, Spawn) + end + end +end + +function death(NPC, Spawn) + spoke = false +end + +function Speak(NPC, Spawn) + --if HasLanguage(Spawn, Fayfolk) then + local choice = math.random(1, 2) + if choice == 1 then + PlayFlavor(NPC, "voiceover/english/dryad_corrupted/ft/dryad/dryad_corrupted_1_halfhealth_87c4d551.mp3", "My blood will continue to taint this land. ", "", 4171401485, 1497569558, Spawn) + else + PlayFlavor(NPC, "voiceover/english/dryad_corrupted/ft/dryad/dryad_corrupted_1_halfhealth_f788c9f0.mp3", "My death only furthers my goals.", "", 4264087301, 2283544980, Spawn) + end + --[[else + local choice = math.random(1, 4) + if choice == 1 then + PlayFlavor(NPC, "voiceover/english/dryad_corrupted/ft/dryad/dryad_corrupted_1_garbled_e858f993.mp3", "Tawaneee follahh dilifilongia avee", "", 677789876, 1792673679, Spawn) + elseif choice == 2 then + PlayFlavor(NPC, "voiceover/english/dryad_corrupted/ft/dryad/dryad_corrupted_1_garbled_dfa9e7d9.mp3", "Amamooenoo illysavah leetah", "", 1070184369, 1800384485, Spawn) + elseif choice == 3 then + PlayFlavor(NPC, "voiceover/english/dryad_corrupted/ft/dryad/dryad_corrupted_1_garbled_29e4606e.mp3", "Peelahha misialloniassaa laliallasala", "", 4241242710, 1388449419, Spawn) + elseif choice == 4 then + PlayFlavor(NPC, "voiceover/english/dryad_corrupted/ft/dryad/dryad_corrupted_1_garbled_628bdbdb.mp3", "Meraania suvalas itresteien", "", 2333386122, 320322749, Spawn) + end + end--]] +end \ No newline at end of file diff --git a/server/SpawnScripts/Oakmyst/anOakmystspider.lua b/server/SpawnScripts/Oakmyst/anOakmystspider.lua new file mode 100644 index 000000000..9cf43cf2d --- /dev/null +++ b/server/SpawnScripts/Oakmyst/anOakmystspider.lua @@ -0,0 +1,79 @@ +--[[ + Script Name : SpawnScripts/Oakmyst/anOakmystspider.lua + Script Author : Ememjr + Script Date : 2019.10.14 10:10:38 + Script Purpose : + : +--]] + +function hailed(NPC, Spawn) + +end + +function spawn(NPC) + ChooseMovement(NPC) +end + +function ChooseMovement(NPC) + local choice = math.random(1, 4) + if choice == 1 then + clockwise1(NPC) + elseif choice == 2 then + clockwise2(NPC) + elseif choice == 3 then + counter_clockwise1(NPC) + elseif choice == 4 then + counter_clockwise2(NPC) + end +end + +function respawn(NPC) + spawn(NPC) +end + +function clockwise1(NPC) + local x = GetX(NPC) + local y = GetY(NPC) + local z = GetZ(NPC) + MovementLoopAddLocation(NPC, x + 1.5 , y, z - 2 , 1, math.random(2, 10)) + MovementLoopAddLocation(NPC, x - .5 , y, z - 3, 1, math.random(2, 10)) + MovementLoopAddLocation(NPC, x - 3, y, z + 2.5 , 1, math.random(2, 10)) + MovementLoopAddLocation(NPC, x + .5 , y, z + 2 , 1, math.random(2, 10)) + + + --MovementLoopAddLocation(NPC, x + 3 , y, z - 4 , 1, math.random(2, 5)) + --MovementLoopAddLocation(NPC, x - 1 , y, z - 6, 1, math.random(2, 5)) + --MovementLoopAddLocation(NPC, x - 6, y, z + 5 , 1, math.random(2, 5)) + --MovementLoopAddLocation(NPC, x + 1 , y, z + 4 , 1, math.random(2, 5)) +end + +function clockwise2(NPC) + local x = GetX(NPC) + local y = GetY(NPC) + local z = GetZ(NPC) + MovementLoopAddLocation(NPC, x + 1 , y, z - 2 , 1, math.random(2, 10)) + MovementLoopAddLocation(NPC, x - 3.5 , y, z - .5 , 1, math.random(2, 10)) + MovementLoopAddLocation(NPC, x , y, z + 1 , 1, math.random(2, 10)) + MovementLoopAddLocation(NPC, x + 2.5 , y, z + .5 , 1, math.random(2, 10)) +end + +function counter_clockwise1(NPC) + local x = GetX(NPC) + local y = GetY(NPC) + local z = GetZ(NPC) + MovementLoopAddLocation(NPC, x - 1.5 , y, z + 1 , 1, math.random(2, 10)) + MovementLoopAddLocation(NPC, x + .5 , y, z + 3, 1, math.random(2, 10)) + MovementLoopAddLocation(NPC, x + 2, y, z - 2.5 , 1, math.random(2, 10)) + MovementLoopAddLocation(NPC, x - .5 , y, z - 2 , 1, math.random(2, 10)) +end + +function counter_clockwise2(NPC) + local x = GetX(NPC) + local y = GetY(NPC) + local z = GetZ(NPC) + MovementLoopAddLocation(NPC, x - 1 , y, z + 2 , 1, math.random(2, 10)) + MovementLoopAddLocation(NPC, x + 1.5 , y, z + .5 , 1, math.random(2, 10)) + MovementLoopAddLocation(NPC, x , y, z - 1 , 1, math.random(2, 10)) + MovementLoopAddLocation(NPC, x - 2.5 , y, z - .5 , 1, math.random(2, 10)) +end + diff --git a/server/SpawnScripts/Oakmyst/asunkenkeg.lua b/server/SpawnScripts/Oakmyst/asunkenkeg.lua new file mode 100644 index 000000000..de03dbe5a --- /dev/null +++ b/server/SpawnScripts/Oakmyst/asunkenkeg.lua @@ -0,0 +1,20 @@ +--[[ + Script Name : SpawnScripts/Oakmyst/asunkenkeg.lua + Script Purpose : a sunken keg + Script Author : Scatman + Script Date : 2009.10.07 + Script Notes : +--]] + +local DWARF_QUEST_FROM_MARV = 25 + +function spawn(NPC) + SetRequiredQuest(NPC, DWARF_QUEST_FROM_MARV, 1) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) +end \ No newline at end of file diff --git a/server/SpawnScripts/Oakmyst/atreantsapling.lua b/server/SpawnScripts/Oakmyst/atreantsapling.lua new file mode 100644 index 000000000..92ec8e42e --- /dev/null +++ b/server/SpawnScripts/Oakmyst/atreantsapling.lua @@ -0,0 +1,41 @@ +--[[ + Script Name : SpawnScripts/Oakmyst/atreantsapling.lua + Script Purpose : a treant sapling + Script Author : Scatman + Script Date : 2009.05.07 + Script Notes : +--]] + +local QUEST_FROM_NEOLA = 211 + +function spawn(NPC) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + if HasQuest(Spawn, QUEST_FROM_NEOLA) and GetQuestStep(Spawn, QUEST_FROM_NEOLA) == 2 then + AddConversationOption(conversation, "Sprinkle Smitelin's Excel-a-gro onto the sapling.", "Again") + end + AddConversationOption(conversation, "Farewell little shrub.") + StartConversation(conversation, NPC, Spawn, "...") +end + +----------------------------------------------------------------------------------------------------------------------------------- +-- QUEST FROM NEOLA +----------------------------------------------------------------------------------------------------------------------------------- + +function Again(NPC, Spawn) + SetStepComplete(Spawn, QUEST_FROM_NEOLA, 2) + + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "Farewell little shrub.") + StartConversation(conversation, NPC, Spawn, "...") +end \ No newline at end of file diff --git a/server/SpawnScripts/Oakmyst/fulkoir.lua b/server/SpawnScripts/Oakmyst/fulkoir.lua new file mode 100644 index 000000000..e71da5a0c --- /dev/null +++ b/server/SpawnScripts/Oakmyst/fulkoir.lua @@ -0,0 +1,21 @@ +--[[ + Script Name : SpawnScripts/Oakmyst/fulkoir.lua + Script Purpose : + Script Author : + Script Date : + Script Notes : +--]] + +function spawn(NPC) +end + +function hailed(NPC, Spawn) +end + +function respawn(NPC) + spawn(NPC) +end + +function DespawnFulkoir(NPC) + Despawn(NPC) +end \ No newline at end of file diff --git a/server/SpawnScripts/Oakmyst/inspect_rock_poem.lua b/server/SpawnScripts/Oakmyst/inspect_rock_poem.lua new file mode 100644 index 000000000..b16ea2495 --- /dev/null +++ b/server/SpawnScripts/Oakmyst/inspect_rock_poem.lua @@ -0,0 +1,35 @@ +--[[ + Script Name : inspect_rock_poem.lua + Script Author : ememjr + Script Date : 2017.05.10 + Script Purpose : + : +--]] + +local quest = 234 + +function spawn(NPC) + +end + +function respawn(NPC) + spawn(NPC) +end + +function casted_on(NPC, Spawn, Message) + if Message == "inspect" then + local con = CreateConversation() + AddConversationOption(con, "Read the Poem!", "ReadPoem") + AddConversationOption(con, "Stop inspecting", "CloseConversation") + StartDialogConversation(con, 1, NPC, Spawn, "This rock is deeply embedded into the ground. It must have been here for quite some time. There is writing etched onto the face of the rock. It looks like a poem.") + end +end +function ReadPoem(NPC, Spawn) + local con = CreateConversation() + AddConversationOption(con, "continue", "Continue") + StartDialogConversation(con, 1, NPC, Spawn, "\"An Ode to Oakmyst\" by Astar Leafsinger of the Songweavers. The beauty grown from elven gifts...Thethicket so small yet so grand...A lonsome trunk drifting amidst the clear blue...The life giver billows and feeds...") +end +function Continue(NPC, Spawn) + OfferQuest(NPC, Spawn, quest) + CloseConversation(NPC, Spawn) +end \ No newline at end of file diff --git a/server/SpawnScripts/Oakmyst/mysterious_machine_quest.lua b/server/SpawnScripts/Oakmyst/mysterious_machine_quest.lua new file mode 100644 index 000000000..a0fb79572 --- /dev/null +++ b/server/SpawnScripts/Oakmyst/mysterious_machine_quest.lua @@ -0,0 +1,35 @@ +--[[ + Script Name : SpawnScripts/Oakmyst/mysterious_machine_quest.lua + Script Purpose : a mysterious machine + Script Author : Scatman + Script Date : 2009.10.07 + Script Notes : +--]] + +local OAKMYST_CHARLIN_QUEST_3 = 206 + +function spawn(NPC) + SetRequiredQuest(NPC, OAKMYST_CHARLIN_QUEST_3, 3) + SetPlayerProximityFunction(NPC, 15, "InRange") +end + +function hailed(NPC, Spawn) +end + +function respawn(NPC) + spawn(NPC) +end + +function InRange(NPC, Spawn) + if HasQuest(Spawn, OAKMYST_CHARLIN_QUEST_3) and GetQuestStep(Spawn, OAKMYST_CHARLIN_QUEST_3) == 3 then + SendMessage(Spawn, "You hear a slight humming in the plants near the water's edge.") + end +end + +function casted_on(NPC, Spawn, SpellName) + if HasQuest(Spawn, OAKMYST_CHARLIN_QUEST_3) and GetQuestStep(Spawn, OAKMYST_CHARLIN_QUEST_3) == 3 and SpellName == "Inspect" then + SetStepComplete(Spawn, OAKMYST_CHARLIN_QUEST_3, 3) + conversation = CreateConversation() + StartDialogConversation(conversation, 1, NPC, Spawn, "The machine is vibrating ever so slightly. Aside from the humming, there is nothing to suggest that the machine is currently active.") + end +end \ No newline at end of file diff --git a/server/SpawnScripts/Oakmyst/unearthedsoil.lua b/server/SpawnScripts/Oakmyst/unearthedsoil.lua new file mode 100644 index 000000000..f394063f7 --- /dev/null +++ b/server/SpawnScripts/Oakmyst/unearthedsoil.lua @@ -0,0 +1,20 @@ +--[[ + Script Name : SpawnScripts/Oakmyst/unearthedsoil.lua + Script Purpose : unearthed soil + Script Author : Scatman + Script Date : 2009.10.07 + Script Notes : +--]] + +local OAKMYST_CHARLIN_QUEST_2 = 205 + +function spawn(NPC) + SetRequiredQuest(NPC, OAKMYST_CHARLIN_QUEST_2, 1) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) +end \ No newline at end of file diff --git a/server/SpawnScripts/OutpostOverlord/APudgyMoleRat.lua b/server/SpawnScripts/OutpostOverlord/APudgyMoleRat.lua new file mode 100644 index 000000000..bc16730d2 --- /dev/null +++ b/server/SpawnScripts/OutpostOverlord/APudgyMoleRat.lua @@ -0,0 +1,35 @@ +--[[ + Script Name : SpawnScripts/OutpostOverlord/APudgyMoleRat.lua + Script Author : Cynnar + Script Date : 2019.06.03 03:06:48 + Script Purpose : + : +--]] + +function spawn(NPC) + CallCliffdiverHawk(NPC) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) +end + +function CallCliffdiverHawk(NPC) + local CliffdiverHawk = GetSpawn(NPC, 2780077) + + if CliffdiverHawk ~= nil then + if GetTempVariable(NPC, "MoleRat") == nil then + SetTempVariable(CliffdiverHawk, "MoleRat", NPC) + + SetTempVariable(CliffdiverHawk, "MOLERAT_X", GetX(NPC)) + SetTempVariable(CliffdiverHawk, "MOLERAT_Y", GetY(NPC)) + SetTempVariable(CliffdiverHawk, "MOLERAT_Z", GetZ(NPC)) + + AddTimer(CliffdiverHawk, 2000, "FlyToMoleRat") + end + end +end + diff --git a/server/SpawnScripts/OutpostOverlord/AniusOakwind.lua b/server/SpawnScripts/OutpostOverlord/AniusOakwind.lua new file mode 100644 index 000000000..4b4e53d5c --- /dev/null +++ b/server/SpawnScripts/OutpostOverlord/AniusOakwind.lua @@ -0,0 +1,28 @@ +--[[ + Script Name : SpawnScripts/OutpostoftheOverlord/AniusOakwind.lua + Script Purpose : Anius Oakwind + Script Author : Cynnar + Script Date : 2018.10.14 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +function spawn(NPC) + SetPlayerProximityFunction(NPC, 10, "InRange", "LeaveRange") +end + +function respawn(NPC) + spawn(NPC) +end + +function InRange(NPC, Spawn) +end + +function LeaveRange(NPC, Spawn) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + + PlayFlavor(NPC, "", "Who disturbs my rest?", "", 1689589577, 4560189, Spawn) +end + diff --git a/server/SpawnScripts/OutpostOverlord/Ashir.lua b/server/SpawnScripts/OutpostOverlord/Ashir.lua new file mode 100644 index 000000000..8903ede40 --- /dev/null +++ b/server/SpawnScripts/OutpostOverlord/Ashir.lua @@ -0,0 +1,38 @@ +--[[ + Script Name : SpawnScripts/OutpostoftheOverlord/Ashir.lua + Script Purpose : Ashir + Script Author : Cynnar + Script Date : 2018.10.14 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +function spawn(NPC) + SetPlayerProximityFunction(NPC, 10, "InRange", "LeaveRange") +end + +function respawn(NPC) + spawn(NPC) +end + +function InRange(NPC, Spawn) +end + +function LeaveRange(NPC, Spawn) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + + local choice = math.random(1,3) + + if choice == 1 then + PlayFlavor(NPC, "", "Try my Coagulated Surprise!", "", 1689589577, 4560189, Spawn) + elseif choice == 2 then + PlayFlavor(NPC, "", "I'll challenge my dried triggerfish to Gorga's stew any day.", "", 1689589577, 4560189, Spawn) + elseif choice == 3 then + PlayFlavor(NPC, "", "Mmm, fish!", "", 1689589577, 4560189, Spawn) + else + end + +end + diff --git a/server/SpawnScripts/OutpostOverlord/AssassinVamir.lua b/server/SpawnScripts/OutpostOverlord/AssassinVamir.lua new file mode 100644 index 000000000..9b0b18c8a --- /dev/null +++ b/server/SpawnScripts/OutpostOverlord/AssassinVamir.lua @@ -0,0 +1,155 @@ +--[[ + Script Name : AssassinVamir.lua + Script Purpose : Handles the spawn script for Assasin Vamir in the Outpost of the Overlord. + Script Author : Scatman (Updated by Cynnar 2018.10.14) + Script Date : 2008.12.28 + Script Notes : +--]] +local HawkBait = 8060 +local Preventative_Maintenance = 365 + +function spawn(NPC) + ProvidesQuest(NPC, Preventative_Maintenance) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + if HasQuest(Spawn, 54) and GetQuestStep(Spawn, 54) == 8 then + AddConversationOption(conversation, "Can you tell me about Charles Arker?", "CharlesArker") + end + + if HasCompletedQuest(Spawn, Preventative_Maintenance) then + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/assassin_vamir/tutorial_island02_evil_revamp/quests/citizenship/assassinvamir/assassinvamir010.mp3", "", "", 81913167, 2035244707, Spawn) + AddConversationOption(conversation, "I need more mole rats!", "MoreRats") + AddConversationOption(conversation, "Goodbye.") + StartConversation(conversation, NPC, Spawn, "The Tunarians won't have many animals to train because of you. Nice works! Return to me if you ever needs more mole rats.") + elseif HasQuest(Spawn, Preventative_Maintenance) then + if GetQuestStep(Spawn, Preventative_Maintenance) == 1 then + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/assassin_vamir/tutorial_island02_evil_revamp/quests/citizenship/assassinvamir/assassinvamir001.mp3", "", "", 2097737223, 719705804, Spawn) + AddConversationOption(conversation, "And you want me to...?", "WantMeTo") + AddConversationOption(conversation, "I'll come back later.") + StartConversation(conversation, NPC, Spawn, "Hellos " .. GetName(Spawn) .. ", Tayil sent word you were comings. I's been scouting out the nearby areas, trying to get a better feels of what we're up against. Beastmasters these Tunarians are, training the wild animals of the island to fight for them!") + elseif GetQuestStep(Spawn, Preventative_Maintenance) == 2 then + AddConversationOption(conversation, "Okay, I'll be back.") + StartConversation(conversation, NPC, Spawn, "North up the slope into the Wilderwood the bears are, or west in Cliffdiver Canyon. Kills them and return when you are done.") + elseif GetQuestStep(Spawn, Preventative_Maintenance) == 3 then + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/assassin_vamir/tutorial_island02_evil_revamp/quests/citizenship/assassinvamir/assassinvamir005.mp3", "", "", 1066150974, 809725343, Spawn) + AddConversationOption(conversation, "How do I do it?", "HowDoIDoIt") + AddConversationOption(conversation, "I don't have the time right now.") + StartConversation(conversation, NPC, Spawn, "The bears are dead? Good. Nows for a tricky task, so pay attention! The hawks you will now hunt reside high on the cliffs in Cliffdiver Canyon to the west of here. Untils now, we've been unable to get to them.") + elseif GetQuestStep(Spawn, Preventative_Maintenance) == 4 then + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/assassin_vamir/tutorial_island02_evil_revamp/quests/citizenship/assassinvamir/assassinvamir007.mp3", "", "", 4047853205, 3078826387, Spawn) + if not HasItem(Spawn, 10582) then + AddConversationOption(conversation, "I need more mole rats!", "MoreRats") + end + AddConversationOption(conversation, "Okay, I'll keep trying.") + StartConversation(conversation, NPC, Spawn, "Examine and then release the mole rats from your inventory when you thinks you are in a good position to lure down the hawks in Cliffdiver Canyon to the west. Then dispose of the hawks.") + elseif GetQuestStep(Spawn, Preventative_Maintenance) == 5 then + SetStepComplete(Spawn, Preventative_Maintenance, 5) + SummonItem(Player, 1027) + while HasItem(Spawn, HawkBait) do + RemoveItem(Spawn, HawkBait) + end + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/assassin_vamir/tutorial_island02_evil_revamp/quests/citizenship/assassinvamir/assassinvamir009.mp3", "", "", 2286682451, 2625576756, Spawn) + AddConversationOption(conversation, "Thank you.") + StartConversation(conversation, NPC, Spawn, "Excellent job! I think we's done a good job stoppings any new recruits for the Tunarians. Here, this note was just delivered to us. I believe it is from Tayl.") + end + else + AddConversationOption(conversation, "Very well.") + StartConversation(conversation, NPC, Spawn, "I'm not ready for you yet, adventurer. Speak with Tayil N'Velex back at the outpost to prepare yourself for my tasks.") + end +end + +function respawn(NPC) + spawn(NPC) +end + +function WantMeTo(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/assassin_vamir/tutorial_island02_evil_revamp/quests/citizenship/assassinvamir/assassinvamir002.mp3", "", "", 1076416759, 1314405932, Spawn) + AddConversationOption(conversation, "Where are these animals?", "WhereAnimals") + StartConversation(conversation, NPC, Spawn, "We's gonna cut off their resources to weaken them in the long terms, settings up our major attack after they are weakened. If we take out their picks of the wild animals, they'll have nothing to train.") +end + +function WhereAnimals(NPC, Spawn) + SetStepComplete(Spawn, Preventative_Maintenance, 1) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/assassin_vamir/tutorial_island02_evil_revamp/quests/citizenship/assassinvamir/assassinvamir003.mp3", "", "", 165936416, 810751258, Spawn) + AddConversationOption(conversation, "The bears are mine!") + StartConversation(conversation, NPC, Spawn, "They trains the bears, hawks, and wolves on the island. The wolves are a bits too deep to touch now, but the bears and hawks are nearby so we starts with those. First, head north up the slope into the Wilderwood or west into Cliffdiver Canyon and lay down some bears. Returns when you are done.") +end + +function HowDoIDoIt(NPC, Spawn) + SetStepComplete(Spawn, Preventative_Maintenance, 3) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/assassin_vamir/tutorial_island02_evil_revamp/quests/citizenship/assassinvamir/assassinvamir006.mp3", "", "", 3805307037, 1537181172, Spawn) + + AddConversationOption(conversation, "Dinner is served!") + StartConversation(conversation, NPC, Spawn, "The cliffdiver hawks perch high up and watch for foods to attack below. I's got some food for them right here, hahahaha! Take these mole rats and when you think you are in a good position below the hawks, examine them in your inventory and release one. Return if you needs more.") +end + +function MoreRats(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + -- summon more hawk bait + SummonItem(Spawn, HawkBait) + SummonItem(Spawn, HawkBait) + SummonItem(Spawn, HawkBait) + SummonItem(Spawn, HawkBait) + SummonItem(Spawn, HawkBait) + AddConversationOption(conversation, "Dinner is served!") + StartConversation(conversation, NPC, Spawn, "Here is some more of the little pudgies! Have fun.") +end + +function CharlesArker(NPC, Spawn) + SetStepComplete(Spawn, 54, 8) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/assassin_vamir/tutorial_island02_evil_revamp/quests/citizenship/assassinvamir/assassinvamir012.mp3", "", "", 906369529, 2540359356, Spawn) + AddConversationOption(conversation, "Uh...yeah. Thanks for your time.") + StartConversation(conversation, NPC, Spawn, "Is he that guy with the bad comb-over?") +end + +--[[ + +function dlg_5_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/assassin_vamir/tutorial_island02_evil_revamp/quests/citizenship/assassinvamir/assassinvamir008.mp3", "", "", 1715782563, 1719955679, Spawn) + AddConversationOption(conversation, "Thanks.") + StartConversation(conversation, NPC, Spawn, "Here is the note.") +end + + + + +function dlg_11_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Dinner is served!", "dlg_11_2") + StartConversation(conversation, NPC, Spawn, "Here is some mores of the little pudgies! Have fun.") +end + +function dlg_46_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/assassin_vamir/tutorial_island02_evil_revamp/quests/citizenship/assassinvamir/assassinvamir010.mp3", "", "", 81913167, 2035244707, Spawn) + AddConversationOption(conversation, "What can you tell me about Charles Arker?", "dlg_46_2") + AddConversationOption(conversation, "I need more mole rats!") + AddConversationOption(conversation, "I need the note Tayil wanted you to give me.") + AddConversationOption(conversation, "Goodbye.") + StartConversation(conversation, NPC, Spawn, "The Tunarians won't have many animals to train because of you. Nice works! Return to me if you ever needs more mole rats.") +end + +--]] diff --git a/server/SpawnScripts/OutpostOverlord/AsylLysarz.lua b/server/SpawnScripts/OutpostOverlord/AsylLysarz.lua new file mode 100644 index 000000000..6ffbe93a0 --- /dev/null +++ b/server/SpawnScripts/OutpostOverlord/AsylLysarz.lua @@ -0,0 +1,28 @@ +--[[ + Script Name : SpawnScripts/OutpostoftheOverlord/AsylLysarz.lua + Script Purpose : Asyl Lysarz + Script Author : Cynnar + Script Date : 2018.10.14 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +function spawn(NPC) + SetPlayerProximityFunction(NPC, 10, "InRange", "LeaveRange") +end + +function respawn(NPC) + spawn(NPC) +end + +function InRange(NPC, Spawn) +end + +function LeaveRange(NPC, Spawn) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + + PlayFlavor(NPC, "", "Chef Gorga better hurry up! I'm getting hungry.", "", 1689589577, 4560189, Spawn) +end + diff --git a/server/SpawnScripts/OutpostOverlord/CallusMagnus.lua b/server/SpawnScripts/OutpostOverlord/CallusMagnus.lua new file mode 100644 index 000000000..0630145ec --- /dev/null +++ b/server/SpawnScripts/OutpostOverlord/CallusMagnus.lua @@ -0,0 +1,38 @@ +--[[ + Script Name : SpawnScripts/OutpostoftheOverlord/CallusMagnus.lua + Script Purpose : Callus Magnus + Script Author : Cynnar + Script Date : 2018.10.14 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +function spawn(NPC) + SetPlayerProximityFunction(NPC, 10, "InRange", "LeaveRange") +end + +function respawn(NPC) + spawn(NPC) +end + +function InRange(NPC, Spawn) +end + +function LeaveRange(NPC, Spawn) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + + local choice = math.random(1,3) + + if choice == 1 then + PlayFlavor(NPC, "", "Have a stout for Freeport!", "", 1689589577, 4560189, Spawn) + elseif choice == 2 then + PlayFlavor(NPC, "", "Watch out for those sneaky Tunarians.", "", 1689589577, 4560189, Spawn) + elseif choice == 3 then + PlayFlavor(NPC, "", "Here's to the Overlord!", "", 1689589577, 4560189, Spawn) + else + end + +end + diff --git a/server/SpawnScripts/OutpostOverlord/CaptainPinious.lua b/server/SpawnScripts/OutpostOverlord/CaptainPinious.lua new file mode 100644 index 000000000..31fde5dee --- /dev/null +++ b/server/SpawnScripts/OutpostOverlord/CaptainPinious.lua @@ -0,0 +1,176 @@ +--[[ + Script Name: Captain Pinious.lua + Script Purpose: General Introduction + Script Author: John Adams + Script Date: 2008.09.06 + Script Notes: Auto-Generated Conversation from PacketParser Data +--]] + +function spawn(NPC) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + if HasQuest(Spawn, 54) and GetQuestStep(Spawn, 54) == 4 then + AddConversationOption(conversation, "Have you met Charles Arker? He's a well-known fellow.", "CharlesArker") + end + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/captain_pinious/tutorial_island02_evil_revamp/trainers/world_interaction/capt_pinious001.mp3", "", "", 846615498, 3873495514, Spawn) + AddConversationOption(conversation, "Teach me about interacting with people and objects around Norrath.", "TeachMeInteracting") + AddConversationOption(conversation, "I'll return for instruction later.") + StartConversation(conversation, NPC, Spawn, "Hello there, " .. GetName(Spawn) .. ". So you're the new addition to the outpost that we've been hearing about. I've been stationed here by the Overlord to instruct you in ways that you can interact with the world around you.") +end + +function TeachMeInteracting(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/captain_pinious/tutorial_island02_evil_revamp/trainers/world_interaction/capt_pinious002.mp3", "", "", 2903161190, 2453753160, Spawn) + + AddConversationOption(conversation, "In what ways can I interact with other player characters?", "WaysToInteract") + AddConversationOption(conversation, "How do I interact with non-player characters?", "NPCInteract") + AddConversationOption(conversation, "How can I interact with objects in the world?", "ObjectInteract") + AddConversationOption(conversation, "What can I do with items in my inventory?", "Inventory") + AddConversationOption(conversation, "I'll return for instruction later.") + StartConversation(conversation, NPC, Spawn, "There are several types of individuals and items you can interact with. Among these are other player characters, non-player characters, objects in the world, and items in your inventory.") +end + +function WaysToInteract(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/captain_pinious/tutorial_island02_evil_revamp/trainers/world_interaction/capt_pinious003.mp3", "", "", 3452718562, 2616705077, Spawn) + + AddConversationOption(conversation, "How can I tell which actions I can take?", "WhatActions") + StartConversation(conversation, NPC, Spawn, "You can perform a number of actions by right-clicking on a nearby player that you see. You can invite them to a group, follow them, talk to them, inspect their equipment, trade with them, and other choices. Some actions can only be taken while you're in a group with them.") +end + +function WhatActions(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/captain_pinious/tutorial_island02_evil_revamp/trainers/world_interaction/capt_pinious004.mp3", "", "", 2909488415, 579153552, Spawn) + + AddConversationOption(conversation, "How do I talk to other players?", "TalkToPlayers") + StartConversation(conversation, NPC, Spawn, "If one of the right-click choices is grey, it means it's unavailable. You either need to be closer to the other player or be grouped with them.") +end + +function TalkToPlayers(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/captain_pinious/tutorial_island02_evil_revamp/trainers/world_interaction/capt_pinious005.mp3", "", "", 1528548512, 277398920, Spawn) + + AddConversationOption(conversation, "How do I interact with non-player characters?", "NPCInteract") + AddConversationOption(conversation, "How can I interact with objects in the world?", "ObjectInteract") + AddConversationOption(conversation, "What can I do with items in my inventory?", "Inventory") + AddConversationOption(conversation, "I'll return for instruction later.") + StartConversation(conversation, NPC, Spawn, "If you're near another player, you can type something on the command line of your Chat window and press enter. All other nearby players can see this text. To send a private message, right-click on the character and select the 'tell' option, or hit the T key and type their name.") +end + +function NPCInteract(NPC, Spawn) + conversation = CreateConversation() + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/captain_pinious/tutorial_island02_evil_revamp/trainers/world_interaction/capt_pinious006.mp3", "", "", 662332133, 1635440695, Spawn) + AddConversationOption(conversation, "How do I tell the difference?", "TellTheDifference") + StartConversation(conversation, NPC, Spawn, "There are a variety of non-player characters (NPCs) around Norrath. Some of them are there to talk to or buy from, while others are meant to fight.") +end + +function TellTheDifference(NPC, Spawn) + conversation = CreateConversation() + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/captain_pinious/tutorial_island02_evil_revamp/trainers/world_interaction/capt_pinious007.mp3", "", "", 3296094991, 894278121, Spawn) + AddConversationOption(conversation, "Are there different ways to interact with a single NPC?", "SingleNPC") + StartConversation(conversation, NPC, Spawn, "The shape of your mouse pointer when you move it over an NPC indicates the primary means of interaction. If the pointer becomes a speech bubble, you can talk to that NPC. If it becomes crossed swords, you can attack them. If it looks like a stack of coins, that's a merchant.") +end + +function SingleNPC(NPC, Spawn) + conversation = CreateConversation() + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/captain_pinious/tutorial_island02_evil_revamp/trainers/world_interaction/capt_pinious008.mp3", "", "", 394706450, 3452025444, Spawn) + AddConversationOption(conversation, "How do I talk to other players?", "TalkToNPCs") + AddConversationOption(conversation, "DEV: THIS QUESTION SEEMS WRONG? Should be Talk To NPC based on next sequence.") + StartConversation(conversation, NPC, Spawn, "You can see all the ways you can interact with an NPC by right-clicking on it. If an option is grey, you probably need to be closer to it.") +end + +function TalkToNPCs(NPC, Spawn) + conversation = CreateConversation() + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/captain_pinious/tutorial_island02_evil_revamp/trainers/world_interaction/capt_pinious009.mp3", "", "", 3974625037, 2019991574, Spawn) + AddConversationOption(conversation, "How do I go about attacking an NPC?", "AttackNPC") + StartConversation(conversation, NPC, Spawn, "Well, you're talking to me, so you know at least one way! You can either right-click and select 'hail', click on them if that's their default action, or target them and hit the H key.") +end + +function AttackNPC(NPC, Spawn) + conversation = CreateConversation() + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/captain_pinious/tutorial_island02_evil_revamp/trainers/world_interaction/capt_pinious010.mp3", "", "", 454006131, 3919416269, Spawn) + AddConversationOption(conversation, "In what ways can I interact with other player characters?", "WaysToInteract") + AddConversationOption(conversation, "How can I interact with objects in the world?", "ObjectInteract") + AddConversationOption(conversation, "What can I do with items in my inventory?", "Inventory") + AddConversationOption(conversation, "I'll return for instruction later.") + StartConversation(conversation, NPC, Spawn, "To learn about combat, talk to Trainer Darg Frostwind near the western archway. To learn about evaluating your opponents, talk to Trainer Anna Winston, who is near Darg. Both these trainers provide information vital to your success as an adventurer.") +end + +function ObjectInteract(NPC, Spawn) + conversation = CreateConversation() + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/captain_pinious/tutorial_island02_evil_revamp/trainers/world_interaction/capt_pinious011.mp3", "", "", 3997858624, 220413119, Spawn) + AddConversationOption(conversation, "How do I tell what the glowing object will do?", "GlowingObjects") + StartConversation(conversation, NPC, Spawn, "If something glows when you move your mouse over it, you can interact with it. It might be a door or gate that takes you to another location, a book you see on a table, a chest you can loot, or another type of object. Some items glow only if you're on a quest to find them.") +end + +function GlowingObjects(NPC, Spawn) + conversation = CreateConversation() + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/captain_pinious/tutorial_island02_evil_revamp/trainers/world_interaction/capt_pinious012.mp3", "", "", 157757148, 1267818422, Spawn) + AddConversationOption(conversation, "Can anything bad happen by clicking on an object?", "VeryBadThings") + StartConversation(conversation, NPC, Spawn, "Sometimes you'll receive information on what the object will do when you hold your mouse over it. Other times you will need to right-click on the object to see what action you can perform with it.") +end + +function VeryBadThings(NPC, Spawn) + conversation = CreateConversation() + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/captain_pinious/tutorial_island02_evil_revamp/trainers/world_interaction/capt_pinious013.mp3", "", "", 2171077809, 1456782467, Spawn) + AddConversationOption(conversation, "In what ways can I interact with other player characters?", "WaysToInteract") + AddConversationOption(conversation, "How do I interact with non-player characters?", "NPCInteract") + AddConversationOption(conversation, "How can I interact with objects in the world?", "ObjectInteract") + AddConversationOption(conversation, "What can I do with items in my inventory?", "Inventory") + AddConversationOption(conversation, "I'll return for instruction later.") + StartConversation(conversation, NPC, Spawn, "Be careful about clicking on an object when you don't know what it will do, as something unexpected might happen. You might draw the attention of someone who didn't want you to touch it, or might end up somewhere you didn't plan to be.") +end + +function Inventory(NPC, Spawn) + conversation = CreateConversation() + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/captain_pinious/tutorial_island02_evil_revamp/trainers/world_interaction/capt_pinious014.mp3", "", "", 3800117344, 3288637503, Spawn) + AddConversationOption(conversation, "How do I know what I can do with an item?", "Item") + StartConversation(conversation, NPC, Spawn, "Sometimes you'll receive items in your inventory, such as when you complete a quest or loot a chest from a fallen opponent. Other times, you'll receive an item by clicking on a glowing object you see in the world, or that is given to you by another player.") +end + +function Item(NPC, Spawn) + conversation = CreateConversation() + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/captain_pinious/tutorial_island02_evil_revamp/trainers/world_interaction/capt_pinious015.mp3", "", "", 1253051107, 1099351530, Spawn) + AddConversationOption(conversation, "What are some common things I can do with items?", "CommonThings") + StartConversation(conversation, NPC, Spawn, "Open your inventory with the I key, or open up all bags you are carrying by pressing the B key. You can bring up a menu of choices for what you can do with an item by right-clicking on it. Double-clicking the left mouse button on something in your inventory will try to do that item's default action.") +end + +function CommonThings(NPC, Spawn) + conversation = CreateConversation() + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/captain_pinious/tutorial_island02_evil_revamp/trainers/world_interaction/capt_pinious016.mp3", "", "", 3814807765, 2564531807, Spawn) + AddConversationOption(conversation, "What about other types of items?", "TypesOfItems") + StartConversation(conversation, NPC, Spawn, "If the item is a piece of armor or a weapon, you can equip it. If it's a book or note, you can read it. If it's food or drink, you can consume it. Some items, such as furniture, can be placed while you're inside your house or apartment.") +end + +function TypesOfItems(NPC, Spawn) + conversation = CreateConversation() + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/captain_pinious/tutorial_island02_evil_revamp/trainers/world_interaction/capt_pinious017.mp3", "", "", 1882449239, 3035449116, Spawn) + AddConversationOption(conversation, "In what ways can I interact with other player characters?", "WaysToInteract") + AddConversationOption(conversation, "How do I interact with non-player characters?", "NPCInteract") + AddConversationOption(conversation, "How can I interact with objects in the world?", "ObjectInteract") + AddConversationOption(conversation, "I'll return for instruction later.") + StartConversation(conversation, NPC, Spawn, "Some items in your inventory can give you quests or provide other benefits. Right-click on items in your inventory and select the 'Examine' option to learn more about any item you're carrying.") +end + +function CharlesArker(NPC, Spawn) + SetStepComplete(Spawn, 54, 4) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/captain_pinious/tutorial_island02_evil_revamp/trainers/world_interaction/capt_pinious018.mp3", "", "", 1766847422, 3271708837, Spawn) + AddConversationOption(conversation, "Thanks anyway, Captain.") + StartConversation(conversation, NPC, Spawn, "I've met many great heroes of the Overlord since arriving at the outpost, but I can't recall anyone by that name.") +end diff --git a/server/SpawnScripts/OutpostOverlord/CaptainTyreth.lua b/server/SpawnScripts/OutpostOverlord/CaptainTyreth.lua new file mode 100644 index 000000000..d5a04c890 --- /dev/null +++ b/server/SpawnScripts/OutpostOverlord/CaptainTyreth.lua @@ -0,0 +1,65 @@ +--[[ + Script Name : CaptainTyreth.lua + Script Purpose : Captain Tyreth + Script Author : vo1d + Script Date : 10/12/2019 + Script Notes : WIP, Tyreth isn't functioning yet. +--]] + +require "SpawnScripts/Generic/DialogModule" + +-- Quest ID's +local TheFinalAssault = 367 + +function spawn(NPC) + SetPlayerProximityFunction(NPC, 10, "InRange", "LeaveRange") +end + +function respawn(NPC) + spawn(NPC) +end + +function InRange(NPC, Spawn) +end + +function LeaveRange(NPC, Spawn) +end + +function hailed(NPC, Spawn) + -- Face the player + FaceTarget(NPC, Spawn) + + -- Create a conversation + Conversation = CreateConversation() + + -- Dialogue + AddConversationOption(Conversation, "That's me.", "dlg_2") + AddConversationOption(Conversation, "I need to be leaving.") + + -- Start conversation + StartConversation(Conversation, NPC, Spawn, "Hahaha! The attack has begun and the enemy shall fall! You must be " .. GetName(Spawn) .. ", here to take part in the festivities.") +end + +function dlg_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + Dialog.New(NPC, Spawn) + + Dialog.AddDialog("Ah, you were the one who coerced these sentries out of the area before the attack. Nicely done! It is time to complete our domination. The Militia are advancing and beginning to clear the area. It is time to strike, quickly!") + Dialog.AddVoiceover("voiceover/english/tutorial_revamp/captain_tyreth/tutorial_island02_evil_revamp/quests/citizenship/captaintyreth/captaintyreth002.mp3", 3182304037, 930301833) + Dialog.AddOption("What must I do?", "dlg_3") + + Dialog.Start() +end + +function dlg_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + Dialog.New(NPC, Spawn) + + SummonItem(Spawn, 48997, 1) + Dialog.AddDialog("Take this torch. Work your way in and set fire to two of the nearby tents. Others have begun the razing as well. If another's flame fails, make sure you finish the job. This island will soon be ours!") + Dialog.AddVoiceover("voiceover/english/tutorial_revamp/captain_tyreth/tutorial_island02_evil_revamp/quests/citizenship/captaintyreth/captaintyreth003.mp3", 3312554119, 4055641204) + Dialog.AddOption("I'll burn the tents of the Qeynosians.") + SetStepComplete(Spawn, TheFinalAssault, 1) + + Dialog.Start() +end \ No newline at end of file diff --git a/server/SpawnScripts/OutpostOverlord/CharlesArker.lua b/server/SpawnScripts/OutpostOverlord/CharlesArker.lua new file mode 100644 index 000000000..c25795abc --- /dev/null +++ b/server/SpawnScripts/OutpostOverlord/CharlesArker.lua @@ -0,0 +1,23 @@ +--[[ + Script Name : SpawnScripts/OutpostOverlord/CharlesArker.lua + Script Author : Cynnar + Script Date : 2018.10.14 07:10:58 + Script Purpose : + : +--]] + +function spawn(NPC) + +end + +function hailed(NPC, Spawn) + conversation = CreateConversation() + AddConversationOption(conversation, "Release the mole rat.", "ReleaseRat") + AddConversationOption(conversation, "Let him be for now.") + StartDialogConversation(conversation, 1, NPC, Spawn, "This cute little guy would be perfect as bait to lure down the cliffdiver hawks.") +end + +function respawn(NPC) + +end + diff --git a/server/SpawnScripts/OutpostOverlord/ChefGorga.lua b/server/SpawnScripts/OutpostOverlord/ChefGorga.lua new file mode 100644 index 000000000..8cb0f7b94 --- /dev/null +++ b/server/SpawnScripts/OutpostOverlord/ChefGorga.lua @@ -0,0 +1,89 @@ +--[[ + Script Name : SpawnScripts/OutpostOverlord/ChefGorga.lua + Script Purpose : Chef Gorga + Script Author : Scatman (Updated by Cynnar) + Script Date : 2008.09.23 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +local seaside_stew = 364 + +function spawn(NPC) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + if HasQuest(Spawn, 54) and GetQuestStep(Spawn, 54) == 5 then + AddConversationOption(conversation, "What do you know about Charles Arker?", "CharlesArker") + end + + if HasCompletedQuest(Spawn, seaside_stew) then + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/chef_gorga/tutorial_island02_evil_revamp/quests/citizenship/chefgorga/chefgorga008.mp3", "", "", 1246021503, 146092815, Spawn) + AddConversationOption(conversation, "Uh yeah, livers!") + StartConversation(conversation, NPC, Spawn, "Mmm, this stew is yums. Livers!") + elseif HasQuest(Spawn, seaside_stew) then + if GetQuestStep(Spawn, seaside_stew) == 1 then + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/chef_gorga/tutorial_island02_evil_revamp/quests/citizenship/chefgorga/chefgorga001.mp3", "", "", 1172658624, 839529863, Spawn) + AddConversationOption(conversation, "I was actually sent here to see if you needed any help.", "NeededHelp") + AddConversationOption(conversation, "I'll come back.") + StartConversation(conversation, NPC, Spawn, "Need to wait for stew to be done, no firsties! Many Militia to feed, your mouth no bigger than the rest.") + elseif GetQuestStep(Spawn, seaside_stew) == 2 then + AddConversationOption(conversation, "Very well, I'll be back.") + StartConversation(conversation, NPC, Spawn, "Slice 'em, bash 'em, poke 'em! Gorga doesn't care how, just get me those bees for the stew! They're right over there, just past the barricades!") + elseif GetQuestStep(Spawn, seaside_stew) == 3 then + SetStepComplete(Spawn, seaside_stew, 3) + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/chef_gorga/tutorial_island02_evil_revamp/quests/citizenship/chefgorga/chefgorga005.mp3", "", "", 2763280533, 3085926405, Spawn) AddConversationOption(conversation, "Mmm, livers!") + StartConversation(conversation, NPC, Spawn, "Heeheehee! Toss 'em in the pot. The next yummies are the main pot filler, livers! Those elks are eatin' up all the eatin' plants anyways, so we kill two halflings with one stone. Bring back the elk livers when you're done.") + elseif GetQuestStep(Spawn, seaside_stew) == 4 then + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/chef_gorga/tutorial_island02_evil_revamp/quests/citizenship/chefgorga/chefgorga006.mp3", "", "", 915023636, 1332699148, Spawn) + AddConversationOption(conversation, "Okay, livers!") + StartConversation(conversation, NPC, Spawn, "Livers! Kill the elk and take 'em for the pot. They eatin' up all the plants here in Seaside Glade, out past the barricades. Return when you get 'em.") + elseif GetQuestStep(Spawn, seaside_stew) == 5 then + SetStepComplete(Spawn, seaside_stew, 5) + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/chef_gorga/tutorial_island02_evil_revamp/quests/citizenship/chefgorga/chefgorga007.mp3", "", "", 96491852, 3557455520, Spawn) + AddConversationOption(conversation, "Back to Tayil!") + StartConversation(conversation, NPC, Spawn, "Heeheehee! Toss 'em in and smell the Gorga magic. The stew is done now! Head back to Tayil, she's waitin for ya.") + else + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/chef_gorga/tutorial_island02_evil_revamp/quests/citizenship/chefgorga/chefgorga008.mp3", "", "", 1246021503, 146092815, Spawn) + AddConversationOption(conversation, "Uh yeah, livers!") + StartConversation(conversation, NPC, Spawn, "Mmm, this stew is yums. Livers!") + end + else + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/chef_gorga/tutorial_island02_evil_revamp/quests/citizenship/chefgorga/chefgorga001.mp3", "", "", 1172658624, 839529863, Spawn) + AddConversationOption(conversation, "I'll come back.") + StartConversation(conversation, NPC, Spawn, "Need to wait for stew to be done, no firsties! Many Militia to feed, your mouth no bigger than the rest.") + end +end + +function NeededHelp(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/chef_gorga/tutorial_island02_evil_revamp/quests/citizenship/chefgorga/chefgorga002.mp3", "", "", 3263091723, 2988730562, Spawn) + AddConversationOption(conversation, "So what are we making here?", "WhatAreWeMaking") + StartConversation(conversation, NPC, Spawn, "Ahh yes, " .. GetName(Spawn) .. ", Tayil said you were comin'. Good then, Gorga can stir the pot while you goes to collect more ingredients! Heeheehee!") +end + +function WhatAreWeMaking(NPC, Spawn) + SetStepComplete(Spawn, seaside_stew, 1) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/chef_gorga/tutorial_island02_evil_revamp/quests/citizenship/chefgorga/chefgorga003.mp3", "", "", 3487347185, 3172564119, Spawn) + AddConversationOption(conversation, "I'll get some bees.") + StartConversation(conversation, NPC, Spawn, "Seaside stew! Only a couple things we still needs to get. First is the buzzers, buggin' Gorga they are. Not sure how they taste, but less of 'em is better. Be sure to pluck out the wings slowly, the last buzz is the best buzz.") +end + +function CharlesArker(NPC, Spawn) + SetStepComplete(Spawn, 54, 5) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "Thank you. Good luck with your meal.") + StartConversation(conversation, NPC, Spawn, "Gorga not cook someone by that name. Not yet.") +end + diff --git a/server/SpawnScripts/OutpostOverlord/CoercerZlith.lua b/server/SpawnScripts/OutpostOverlord/CoercerZlith.lua new file mode 100644 index 000000000..5865db981 --- /dev/null +++ b/server/SpawnScripts/OutpostOverlord/CoercerZlith.lua @@ -0,0 +1,53 @@ +--[[ + Script Name : SpawnScripts/OutpostoftheOverlord/CoercerZlith.lua + Script Purpose : Coercer Zlith + Script Author : Vo1d + Script Date : 2019.10.04 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +-- Quest ID's +local DisruptionForDistraction = 366 + +function spawn(NPC) + SetPlayerProximityFunction(NPC, 10, "InRange", "LeaveRange") +end + +function respawn(NPC) + spawn(NPC) +end + +function InRange(NPC, Spawn) +end + +function LeaveRange(NPC, Spawn) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + if not HasCompletedQuest(Spawn, DisruptionForDistraction) then + if HasQuest(Spawn, DisruptionForDistraction) then + if GetQuestStep(Spawn, DisruptionForDistraction) == 1 then + SetStepComplete(Spawn, DisruptionForDistraction, 1) + elseif GetQuestStep(Spawn, DisruptionForDistraction) == 4 then + SetStepComplete(Spawn, DisruptionForDistraction, 4) + elseif GetQuestStep(Spawn, DisruptionForDistraction) == 6 then + SetStepComplete(Spawn, DisruptionForDistraction, 6) + elseif CanReceiveQuest(Spawn, DisruptionForDistraction) then + NotReady(NPC, Spawn) + end + end + end +end + +function NotReady(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/coercer_zlith/tutorial_island02_evil_revamp/quests/citizenship/coercerzlith/coercerzlith009.mp3", "", "", 2204153066, 1989322276, Spawn) + AddConversationOption(conversation, "Very well.", "dlg_3_1") + StartConversation(conversation, NPC, Spawn, "You are not yet ready to take on the tasks I will offer you. Return to Tayil N'Velex outside Sythor's Spire if you are unsure how to prepare yourself.") + +end \ No newline at end of file diff --git a/server/SpawnScripts/OutpostOverlord/Droog.lua b/server/SpawnScripts/OutpostOverlord/Droog.lua new file mode 100644 index 000000000..6172ba51a --- /dev/null +++ b/server/SpawnScripts/OutpostOverlord/Droog.lua @@ -0,0 +1,20 @@ +--[[ + Script Name : SpawnScripts/OutpostOverlord/Droog.lua + Script Purpose : Droog + Script Author : John Adams + Script Date : 2008.09.23 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +function spawn(NPC) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + PlayFlavor(NPC, "", "Upgrade your combat arts here!", "", 1689589577, 4560189, Spawn) +end + diff --git a/server/SpawnScripts/OutpostOverlord/EbbTide.lua b/server/SpawnScripts/OutpostOverlord/EbbTide.lua new file mode 100644 index 000000000..abc1a506b --- /dev/null +++ b/server/SpawnScripts/OutpostOverlord/EbbTide.lua @@ -0,0 +1,21 @@ +--[[ + Script Name : SpawnScripts/OutpostOverlord/EbbTide.lua + Script Purpose : Ebb Tide + Script Author : John Adams + Script Date : 2008.09.23 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + choice = math.random(1,2) + + if choice == 1 then + PlayFlavor(NPC, "", "Got any goods for sale from your adventures?", "", 1689589577, 4560189, Spawn) + elseif choice == 2 then + PlayFlavor(NPC, "", "Welcome to Ebb Tide's Alehouse.", "", 1689589577, 4560189, Spawn) + else + end + +end + diff --git a/server/SpawnScripts/OutpostOverlord/FalconerLithkeen.lua b/server/SpawnScripts/OutpostOverlord/FalconerLithkeen.lua new file mode 100644 index 000000000..ee8899306 --- /dev/null +++ b/server/SpawnScripts/OutpostOverlord/FalconerLithkeen.lua @@ -0,0 +1,40 @@ +--[[ + Script Name : SpawnScripts/OutpostoftheOverlord/FalconerLithkeen.lua + Script Purpose : Falconer Lithkeen + Script Author : Cynnar + Script Date : 2018.10.14 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +function spawn(NPC) + SetPlayerProximityFunction(NPC, 10, "InRange", "LeaveRange") +end + +function respawn(NPC) + spawn(NPC) +end + +function InRange(NPC, Spawn) +end + +function LeaveRange(NPC, Spawn) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + + local choice = math.random(1,4) + + if choice == 1 then + PlayFlavor(NPC, "", "Fly forth, my friends!", "", 1689589577, 4560189, Spawn) + elseif choice == 2 then + PlayFlavor(NPC, "", "To the sky!", "", 1689589577, 4560189, Spawn) + elseif choice == 3 then + PlayFlavor(NPC, "", "Good boy, Dasher!", "", 1689589577, 4560189, Spawn) + elseif choice == 4 then + PlayFlavor(NPC, "", "Good girl, Swift!", "", 1689589577, 4560189, Spawn) + else + end + +end + diff --git a/server/SpawnScripts/OutpostOverlord/Geredo.lua b/server/SpawnScripts/OutpostOverlord/Geredo.lua new file mode 100644 index 000000000..56ccf6c72 --- /dev/null +++ b/server/SpawnScripts/OutpostOverlord/Geredo.lua @@ -0,0 +1,36 @@ +--[[ + Script Name : SpawnScripts/OutpostoftheOverlord/Geredo.lua + Script Purpose : Geredo + Script Author : Cynnar + Script Date : 2018.10.14 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +function spawn(NPC) + SetPlayerProximityFunction(NPC, 10, "InRange", "LeaveRange") +end + +function respawn(NPC) + spawn(NPC) +end + +function InRange(NPC, Spawn) +end + +function LeaveRange(NPC, Spawn) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + + local choice = math.random(1,2) + + if choice == 1 then + PlayFlavor(NPC, "voiceover/english/geredo/boat_06p_tutorial02_fvo_002.mp3", "Thinking I should design a new mechanical boat. It would be perfect! Yes, perfect indeed!", "ponder", 2630458163, 1309095480, Spawn) + elseif choice == 2 then + PlayFlavor(NPC, "voiceover/english/geredo/boat_06p_tutorial02_fvo_001.mp3", "Do you happen to have any mechanical leg extenders? I want to see the water.", "agree", 2902186099, 1357276764, Spawn) + else + end + +end + diff --git a/server/SpawnScripts/OutpostOverlord/GetheHuggs.lua b/server/SpawnScripts/OutpostOverlord/GetheHuggs.lua new file mode 100644 index 000000000..3c540d13d --- /dev/null +++ b/server/SpawnScripts/OutpostOverlord/GetheHuggs.lua @@ -0,0 +1,70 @@ +--[[ + Script Name: GetheHuggs.lua + Script Purpose: Collections for evil island + Script Author: John Adams + Script Date: 2008.09.02 + Script Notes: Auto-Generated Conversation from PacketParser Data +--]] + +local GetheHuggs = 2780039 + +function spawn(NPC) + MovementLoopAddLocation(NPC, 5.65, -6.50, 208.26, 2, 10, "Gather") + + MovementLoopAddLocation(NPC, 0.71, -5.83, 198.18, 2, 10, "Gather") + + MovementLoopAddLocation(NPC, 10.66, -6.90, 200.55, 2, 10, "Gather") + + MovementLoopAddLocation(NPC, 18.65, -6.87, 194.36, 2, 10, "Gather") + + MovementLoopAddLocation(NPC, 26.80, -6.86, 187.05, 2, 10, "Gather") + + MovementLoopAddLocation(NPC, 31.08, -6.24, 197.45, 2, 10, "Gather") + + MovementLoopAddLocation(NPC, 9.11, -6.80, 206.29, 2, 10, "Gather") + + -- return to spawn point and hang out. + MovementLoopAddLocation(NPC, -6.18, -4.96, 218.46, 2, 0) + MovementLoopAddLocation(NPC, -5.91, -4.96, 218.24, 2, 30) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + +--[[ random greeting? + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_2_1003.mp3", "", "", 0, 0, Spawn) + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_1_1003.mp3", "", "", 0, 0, Spawn) + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_3_1003.mp3", "", "", 0, 0, Spawn) +--]] + + -- No Collections Completed + AddConversationOption(conversation, "I don't have any at the moment.", "dlg_1_1") + StartConversation(conversation, NPC, Spawn, "Hello there! If you have any collections that you've completed, I can take them off your hands and reward you for your time. I'm just crazy for collections!") + + -- Collection(s) to hand in + --AddConversationOption(conversation, "I have a collection for you.", "dlg_8_1") + --AddConversationOption(conversation, "I don't have any at the moment.") + --StartConversation(conversation, NPC, Spawn, "Hello there! If you have any collections that you've completed, I can take them off your hands and reward you for your time. I'm just crazy for collections!") + +end + +function dlg_8_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + -- no playflavor() + AddConversationOption(conversation, "Okay, bye!") + StartConversation(conversation, NPC, Spawn, "This is a magnificent find! Here, take this for all your hard work.") +end + +function Gather(NPC) + GatherSpawn = GetSpawn(NPC, GetheHuggs ) -- Get Gethe Huggs + SpawnSet(GatherSpawn, "visual_state", "2809") -- Start gathering + AddTimer(NPC, 5000, "stop_gathering") -- for 5 seconds, then stop +end + +function stop_gathering(NPC) + GatherSpawn = GetSpawn(NPC, GetheHuggs ) -- get Gethe Huggs + SpawnSet(GatherSpawn, "visual_state", "0") -- Stop her from gathering +end diff --git a/server/SpawnScripts/OutpostOverlord/Greshar.lua b/server/SpawnScripts/OutpostOverlord/Greshar.lua new file mode 100644 index 000000000..b3cde264a --- /dev/null +++ b/server/SpawnScripts/OutpostOverlord/Greshar.lua @@ -0,0 +1,29 @@ +--[[ + Spawn Template + Script Name: Greshar.lua + Script Purpose: Mender (evil) + Script Author: John Adams + Script Date: 2008.09.02 + Script Notes: Auto-Generated Conversation from PacketParser Data +--]] + +function spawn(NPC) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "Thanks, I will do so.") + StartConversation(conversation, NPC, Spawn, "Hello there, " .. GetName(Spawn) .. ". Menders like me repair your equipment after it gets damaged due to death. To learn more about repairs, speak to Trainer Vissa Sathliss nearby. I'll fix your gear for a small fee, but menders in Freeport won't be quite so generous!") +end + +function targeted(NPC, Spawn) + if GetDistance(Spawn, NPC) < 10 then + hailed(NPC, Spawn) + end +end \ No newline at end of file diff --git a/server/SpawnScripts/OutpostOverlord/HelmsmanNyles.lua b/server/SpawnScripts/OutpostOverlord/HelmsmanNyles.lua new file mode 100644 index 000000000..6b76483ff --- /dev/null +++ b/server/SpawnScripts/OutpostOverlord/HelmsmanNyles.lua @@ -0,0 +1,21 @@ +--[[ + Script Name : SpawnScripts/OutpostOverlord/HelmsmanNyles.lua + Script Purpose : Helmsman Nyles + Script Author : John Adams + Script Date : 2008.09.23 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + choice = math.random(1,2) + + if choice == 1 then + PlayFlavor(NPC, "", "Crazy! What are you talking about?", "", 1689589577, 4560189, Spawn) + elseif choice == 2 then + PlayFlavor(NPC, "", "Land! I see land!", "", 1689589577, 4560189, Spawn) + else + end + +end + diff --git a/server/SpawnScripts/OutpostOverlord/HoggaIrongut.lua b/server/SpawnScripts/OutpostOverlord/HoggaIrongut.lua new file mode 100644 index 000000000..f04365af0 --- /dev/null +++ b/server/SpawnScripts/OutpostOverlord/HoggaIrongut.lua @@ -0,0 +1,23 @@ +--[[ + Script Name : SpawnScripts/OutpostOverlord/HoggaIrongut.lua + Script Purpose : Hogga Irongut + Script Author : John Adams + Script Date : 2008.09.23 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + choice = math.random(1,3) + + if choice == 1 then + PlayFlavor(NPC, "", "Have you tried the Coagulated Surprise from the fishmonger? Good stuff!", "", 1689589577, 4560189, Spawn) + elseif choice == 2 then + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_3_1001.mp3", "", "", 0, 0, Spawn) + elseif choice == 3 then + PlayFlavor(NPC, "", "Have an ale!", "", 1689589577, 4560189, Spawn) + else + end + +end + diff --git a/server/SpawnScripts/OutpostOverlord/Ingrid.lua b/server/SpawnScripts/OutpostOverlord/Ingrid.lua new file mode 100644 index 000000000..48cd11dc4 --- /dev/null +++ b/server/SpawnScripts/OutpostOverlord/Ingrid.lua @@ -0,0 +1,38 @@ +--[[ + Script Name : SpawnScripts/OutpostoftheOverlord/Ingrid.lua + Script Purpose : Ingrid + Script Author : Cynnar + Script Date : 2018.10.14 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +function spawn(NPC) + SetPlayerProximityFunction(NPC, 10, "InRange", "LeaveRange") +end + +function respawn(NPC) + spawn(NPC) +end + +function InRange(NPC, Spawn) +end + +function LeaveRange(NPC, Spawn) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + + local choice = math.random(1,3) + + if choice == 1 then + PlayFlavor(NPC, "voiceover/english/ingrid/boat_06p_tutorial02_fvo_007.mp3", "Yo ho ho and a bottle of rum!", "", 964088856, 3568852318, Spawn) + elseif choice == 2 then + PlayFlavor(NPC, "voiceover/english/ingrid/boat_06p_tutorial02_fvo_009.mp3", "I hate rats, every time we dock they get on board and eat our supplies.", "", 3636322414, 1973183674, Spawn) + elseif choice == 3 then + PlayFlavor(NPC, "voiceover/english/ingrid/boat_06p_tutorial02_fvo_008.mp3", "Don't you just love the sea?", "", 541733813, 1294072887, Spawn) + else + end + +end + diff --git a/server/SpawnScripts/OutpostOverlord/JonasRollings.lua b/server/SpawnScripts/OutpostOverlord/JonasRollings.lua new file mode 100644 index 000000000..926cb6319 --- /dev/null +++ b/server/SpawnScripts/OutpostOverlord/JonasRollings.lua @@ -0,0 +1,21 @@ +--[[ + Script Name : SpawnScripts/OutpostOverlord/JonasRollings.lua + Script Purpose : Jonas Rollings + Script Author : John Adams + Script Date : 2008.09.23 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + choice = math.random(1,2) + + if choice == 1 then + PlayFlavor(NPC, "", "Maybe I shouldn't have drank so much last night.", "", 1689589577, 4560189, Spawn) + elseif choice == 2 then + PlayFlavor(NPC, "", "One too many Coagulated Surprises last night is my guess.", "", 1689589577, 4560189, Spawn) + else + end + +end + diff --git a/server/SpawnScripts/OutpostOverlord/Kibbs.lua b/server/SpawnScripts/OutpostOverlord/Kibbs.lua new file mode 100644 index 000000000..67209211b --- /dev/null +++ b/server/SpawnScripts/OutpostOverlord/Kibbs.lua @@ -0,0 +1,20 @@ +--[[ + Script Name : SpawnScripts/OutpostOverlord/Kibbs.lua + Script Purpose : Kibbs + Script Author : John Adams + Script Date : 2008.09.23 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +function spawn(NPC) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + PlayFlavor(NPC, "", "Upgrade your spells here!", "", 1689589577, 4560189, Spawn) +end + diff --git a/server/SpawnScripts/OutpostOverlord/KurgleFrogbane.lua b/server/SpawnScripts/OutpostOverlord/KurgleFrogbane.lua new file mode 100644 index 000000000..cbbfe49ff --- /dev/null +++ b/server/SpawnScripts/OutpostOverlord/KurgleFrogbane.lua @@ -0,0 +1,25 @@ +--[[ + Script Name : SpawnScripts/OutpostOverlord/KurgleFrogbane.lua + Script Purpose : Kurgle Frogbane + Script Author : John Adams + Script Date : 2008.09.23 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + choice = math.random(1,4) + + if choice == 1 then + PlayFlavor(NPC, "", "Smash him I will!", "", 1689589577, 4560189, Spawn) + elseif choice == 2 then + PlayFlavor(NPC, "", "I'll cover the walls with dis guy!", "", 1689589577, 4560189, Spawn) + elseif choice == 3 then + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_1_1032.mp3", "", "", 0, 0, Spawn) + elseif choice == 4 then + PlayFlavor(NPC, "", "Chumpy swings like an elf!", "", 1689589577, 4560189, Spawn) + else + end + +end + diff --git a/server/SpawnScripts/OutpostOverlord/Laena.lua b/server/SpawnScripts/OutpostOverlord/Laena.lua new file mode 100644 index 000000000..3fdf3e8b5 --- /dev/null +++ b/server/SpawnScripts/OutpostOverlord/Laena.lua @@ -0,0 +1,25 @@ +--[[ + Script Name : SpawnScripts/OutpostOverlord/Laena.lua + Script Purpose : Laena + Script Author : John Adams + Script Date : 2008.09.23 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +function spawn(NPC) + SetPlayerProximityFunction(NPC, 10, "InRange") +end + +function InRange(NPC, Spawn) + FaceTarget(NPC, Spawn) + choice = math.random(1,3) + + if choice == 1 then + PlayFlavor(NPC, "", "For the Queen!", "combat_enter", 1689589577, 4560189, Spawn) + elseif choice == 2 then + PlayFlavor(NPC, "", "Die, Freeport scum!", "threaten", 1689589577, 4560189, Spawn) + elseif choice == 3 then + PlayFlavor(NPC, "", "To the gray fields with them!", "", 1689589577, 4560189, Spawn) + end +end + diff --git a/server/SpawnScripts/OutpostOverlord/MurgLeechtongue.lua b/server/SpawnScripts/OutpostOverlord/MurgLeechtongue.lua new file mode 100644 index 000000000..444eef0dd --- /dev/null +++ b/server/SpawnScripts/OutpostOverlord/MurgLeechtongue.lua @@ -0,0 +1,21 @@ +--[[ + Script Name : SpawnScripts/OutpostOverlord/MurgLeechtongue.lua + Script Purpose : Murg Leechtongue + Script Author : John Adams + Script Date : 2008.09.23 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + choice = math.random(1,2) + + if choice == 1 then + PlayFlavor(NPC, "", "Captain, they have cows! Lemme Kill!", "", 1689589577, 4560189, Spawn) + elseif choice == 2 then + PlayFlavor(NPC, "", "Filthy elves!", "", 1689589577, 4560189, Spawn) + else + end + +end + diff --git a/server/SpawnScripts/OutpostOverlord/OolarOmafa.lua b/server/SpawnScripts/OutpostOverlord/OolarOmafa.lua new file mode 100644 index 000000000..2b1172ce2 --- /dev/null +++ b/server/SpawnScripts/OutpostOverlord/OolarOmafa.lua @@ -0,0 +1,21 @@ +--[[ + Script Name : SpawnScripts/OutpostOverlord/OolarOmafa.lua + Script Purpose : Oolar Omafa + Script Author : John Adams + Script Date : 2008.09.23 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + choice = math.random(1,2) + + if choice == 1 then + PlayFlavor(NPC, "", "By will of the Overlord!", "", 1689589577, 4560189, Spawn) + elseif choice == 2 then + PlayFlavor(NPC, "", "A guard with brains and bite. You'll definitely need me at some point.", "", 1689589577, 4560189, Spawn) + else + end + +end + diff --git a/server/SpawnScripts/OutpostOverlord/PrukSkullpound.lua b/server/SpawnScripts/OutpostOverlord/PrukSkullpound.lua new file mode 100644 index 000000000..4d5489190 --- /dev/null +++ b/server/SpawnScripts/OutpostOverlord/PrukSkullpound.lua @@ -0,0 +1,21 @@ +--[[ + Script Name : SpawnScripts/OutpostOverlord/PrukSkullpound.lua + Script Purpose : Pruk Skullpound + Script Author : John Adams + Script Date : 2008.09.23 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + choice = math.random(1,2) + + if choice == 1 then + PlayFlavor(NPC, "", "Burn the tents!", "", 1689589577, 4560189, Spawn) + elseif choice == 2 then + PlayFlavor(NPC, "", "Bring em back! We'll pound em into the dirt.", "", 1689589577, 4560189, Spawn) + else + end + +end + diff --git a/server/SpawnScripts/OutpostOverlord/SarylScarscale.lua b/server/SpawnScripts/OutpostOverlord/SarylScarscale.lua new file mode 100644 index 000000000..819a671ba --- /dev/null +++ b/server/SpawnScripts/OutpostOverlord/SarylScarscale.lua @@ -0,0 +1,22 @@ +--[[ + Script Name : SpawnScripts/OutpostOverlord/SarylScarscale.lua + Script Purpose : Saryl Scarscale + Script Author : John Adams + Script Date : 2008.09.23 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + choice = math.random(1,3) + + if choice == 1 then + PlayFlavor(NPC, "", "All the way back to the days of Cabilis, my family has provided goods to those in need.", "", 1689589577, 4560189, Spawn) + elseif choice == 2 then + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_3_1028.mp3", "", "", 0, 0, Spawn) + elseif choice == 3 then + PlayFlavor(NPC, "", "All you sseek can be found here!", "", 1689589577, 4560189, Spawn) + else + end + +end diff --git a/server/SpawnScripts/OutpostOverlord/SirsiRissar.lua b/server/SpawnScripts/OutpostOverlord/SirsiRissar.lua new file mode 100644 index 000000000..10d802f61 --- /dev/null +++ b/server/SpawnScripts/OutpostOverlord/SirsiRissar.lua @@ -0,0 +1,23 @@ +--[[ + Script Name : SpawnScripts/OutpostOverlord/SirsiRissar.lua + Script Purpose : Sirsi Rissar + Script Author : John Adams + Script Date : 2008.09.23 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + choice = math.random(1,3) + + if choice == 1 then + PlayFlavor(NPC, "", "There it was again!", "", 1689589577, 4560189, Spawn) + elseif choice == 2 then + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_2_1027.mp3", "", "", 0, 0, Spawn) + elseif choice == 3 then + PlayFlavor(NPC, "", "I sssee a fin rissing up from the ruins over there!", "", 1689589577, 4560189, Spawn) + else + end + +end + diff --git a/server/SpawnScripts/OutpostOverlord/TayilNVelex.lua b/server/SpawnScripts/OutpostOverlord/TayilNVelex.lua new file mode 100644 index 000000000..da59bc713 --- /dev/null +++ b/server/SpawnScripts/OutpostOverlord/TayilNVelex.lua @@ -0,0 +1,417 @@ +--[[ + Script Name : TayilNVelex.lua + Script Purpose : Spawnscript for Tayil N'Velex + Script Author : Scatman (Updated by Cynnar 2018.09.23 05.32.10) + Script Date : 2008.09.05 + Script Notes : +--]] + +-- Quest ID's +local WelcomeToNorrath = 362 +local TheArtOfCombat = 363 +local SeasideStew = 364 +local PreventativeMaintenance = 365 +local DisruptionForDistraction = 366 +local TheFinalAssault = 367 + +function spawn(NPC) + ProvidesQuest(NPC, TheArtOfCombat) + ProvidesQuest(NPC, SeasideStew) + ProvidesQuest(NPC, PreventativeMaintenance) + ProvidesQuest(NPC, DisruptionForDistraction) + ProvidesQuest(NPC, TheFinalAssault) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + if not HasCompletedQuest(Spawn, TheArtOfCombat) then + if HasQuest(Spawn, TheArtOfCombat) then + ReadyToLearnAboutOutpost(NPC, Spawn) + elseif CanReceiveQuest(Spawn, TheArtOfCombat) then + BeenExpectingYou(NPC, Spawn) + end + elseif not HasCompletedQuest(Spawn, SeasideStew) then + if HasQuest(Spawn, SeasideStew) then + EnjoyHuntingWithChef(NPC, Spawn) + elseif CanReceiveQuest(Spawn, SeasideStew) then + IAmReady(NPC, Spawn) + end + elseif not HasCompletedQuest(Spawn, PreventativeMaintenance) then + if HasQuest(Spawn, PreventativeMaintenance) then + WorkWithVamirSuccessfull(NPC, Spawn) + elseif CanReceiveQuest(Spawn, PreventativeMaintenance) then + ThankYouTayil(NPC, Spawn) + end + elseif not HasCompletedQuest(Spawn, DisruptionForDistraction) then + if HasQuest(Spawn, DisruptionForDistraction) then + DisruptedMine(NPC, Spawn) + elseif CanReceiveQuest(Spawn, DisruptionForDistraction) then + DidNotReadNote(NPC, Spawn) + end + elseif not HasCompletedQuest(Spawn, TheFinalAssault) then + if HasQuest(Spawn, DisruptionForDistraction) then + BraveryNoted(NPC, Spawn) + elseif CanReceiveQuest(Spawn, TheFinalAssault)then + ReportToCaptain(NPC, Spawn) + end + end +end + +function BeenExpectingYou(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/tayil_n_velex/tutorial_island02_evil_revamp/quests/citizenship/tayilnvelex/tayilnvelex001.mp3", "", "", 2948130929, 4294504666, Spawn) + AddConversationOption(conversation, "You were expecting me? Who are you?", "WhoAreYou") + AddConversationOption(conversation, "How do I leave the island?", "LeaveIsland") + AddConversationOption(conversation, "I should be going.") + StartConversation(conversation, NPC, Spawn, "Ah, there you are " .. GetName(Spawn) .. ". I have been expecting you. There is much work ahead of us in establishing Freeport's dominance over this island. There Overlord's troops have secured the output, but there is a growing nuisance on the other side of the island that must be addressed. That is where you come in.") +end + +function LeaveIsland(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/tayil_n_velex/tutorial_island02_evil_revamp/quests/citizenship/tayilnvelex/tayilnvelex_leave000.mp3", "", "", 3045154578, 2506070034, Spawn) + AddConversationOption(conversation, "Where can I find Captain Varlos?", "WhereCaptainVarlos") + StartConversation(conversation, NPC, Spawn, "If you feel you are prepared then you are allowed to leave the outpost whenever you desire. To do so simply speak with Captain Varlos. We have a deal worked out with him and he will bring you to the grand city of Freeport.") +end + +function WhereCaptainVarlos(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/tayil_n_velex/tutorial_island02_evil_revamp/quests/citizenship/tayilnvelex/tayilnvelex_leave001.mp3", "", "", 719992004, 84658304, Spawn) + AddConversationOption(conversation, "Thank you.") + StartConversation(conversation, NPC, Spawn, "The beach is just southeast of here. Captain Varlos' ship will be on the northern dock. He can be found on his ship.") +end + +function WhoAreYou(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/tayil_n_velex/tutorial_island02_evil_revamp/quests/citizenship/tayilnvelex/tayilnvelex002.mp3", "", "", 2553820270, 1636531124, Spawn) + AddConversationOption(conversation, "Who is the Overlord?", "WhoIsOverlord") + AddConversationOption(conversation, "I'm ready to begin my adventures.", "ThanksForAdvice") + AddConversationOption(conversation, "I will return for instruction later.") + StartConversation(conversation, NPC, Spawn, "I am Tayil N'Velex, attendant and confidante of the Overlord. I am here to ensure that our operation on this island is successful. You, on the other hand, will be assisting us with some field work to help prepare you for life as a citizen of Freeport.") +end + +function WhoIsOverlord(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/tayil_n_velex/tutorial_island02_evil_revamp/quests/citizenship/tayilnvelex/tayilnvelex003.mp3", "", "", 416547700, 1925188764, Spawn) + AddConversationOption(conversation, "I will remember that. What can you tell me of Freeport?", "WhatIsFreeport") + AddConversationOption(conversation, "I'll hear more of this later.") + StartConversation(conversation, NPC, Spawn, "The Overlord is the fiercely courageous rule of Freeport. A statue of his glowing visage graces the pond in the center of the outpost. Though he is merciless to his enemies, he is generous to those who serve him. Pray you never do anything to fall from his grace, " .. GetName(Spawn) .. ".") +end + +function WhatIsFreeport(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/tayil_n_velex/tutorial_island02_evil_revamp/quests/citizenship/tayilnvelex/tayilnvelex004.mp3", "", "", 255811438, 796501072, Spawn) + AddConversationOption(conversation, "What is Qeynos?", "WhatIsQeynos") + AddConversationOption(conversation, "Thank you for the information.") + StartConversation(conversation, NPC, Spawn, "Freeport is the center of power and commerce on Norrath. The city sits on the eastern edge of the continent of D'Lere. This grand city shall be your home here on Norrath, should you prove yourself worthy. If not, you can cower and beg for shelter at the gates of Qeynos.") +end + +function WhatIsQeynos(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/tayil_n_velex/tutorial_island02_evil_revamp/quests/citizenship/tayilnvelex/tayilnvelex005.mp3", "", "", 2390968770, 501699972, Spawn) + AddConversationOption(conversation, "Thank you for the advice, Tayil.", "ThanksForAdvice") + AddConversationOption(conversation, "I prefer to make up my own mind.") + StartConversation(conversation, NPC, Spawn, "The city of Qeynos is the enemy of Freeport. It is a weak land ruled by an incompetent queen, Antonia Bayle. I've had my share of battles with her and my pet kerra, I assure you. Qeynosians try to spread lies about the Overlord and portray him as some kind of power-mad tyrant. Don't believe their propaganda, " .. GetName(Spawn) .. "!") +end + +function ThanksForAdvice(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/tayil_n_velex/tutorial_island02_evil_revamp/quests/citizenship/tayilnvelex/tayilnvelex006.mp3", "", "", 3631541151, 3425399137, Spawn) + AddConversationOption(conversation, "I pledge myself to Freeport.", "PledgeToFreeport") + AddConversationOption(conversation, "Not just yet.") + StartConversation(conversation, NPC, Spawn, "Remember to always keep the will of the Overlord foremost in your thoughts and you will go far. The city of Freeport is a power unrivaled on Norrath, no matter what you may hear from Qeynosian riffraff. You must pledge yourself to this power and become part of it. Do this and I will reward you handsomely.") +end + +function PledgeToFreeport(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + -- update WelcomeToNorrath Quest + if not HasCompletedQuest (Spawn, WelcomeToNorrath) then + SetStepComplete(Spawn, WelcomeToNorrath, 1) + end + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/tayil_n_velex/tutorial_island02_evil_revamp/quests/citizenship/tayilnvelex/tayilnvelex007.mp3", "", "", 4165919735, 3979142709, Spawn) + AddConversationOption(conversation, "I am ready to begin.", "ReadyToBegin") + AddConversationOption(conversation, "I'll begin later.") + StartConversation(conversation, NPC, Spawn, "Excellent! There is indeed much potential in you. I think it is time to begin your training.") +end + +function ReadyToBegin(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/tayil_n_velex/tutorial_island02_evil_revamp/quests/citizenship/tayilnvelex/tayilnvelex008.mp3", "", "", 1866217478, 1257770871, Spawn) + AddConversationOption(conversation, "I will speak with him.", "OfferQuest1") + StartConversation(conversation, NPC, Spawn, "You must be strong if you wish to serve properly. Northwest of here you can find Trainer Darg Frostwind. Speak with him about combat training and do as he tells you.") +end + +function ReadyToLearnAboutOutpost(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + if GetQuestStep(Spawn, TheArtOfCombat) >= 1 and GetQuestStep(Spawn, TheArtOfCombat) <= 3 then + AddConversationOption(conversation, "I haven't completed my training yet, I'll return to Darg.") + elseif GetQuestStep(Spawn, TheArtOfCombat) == 4 then + AddConversationOption(conversation, "I am ready.", "IAmReady") + end + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/tayil_n_velex/tutorial_island02_evil_revamp/quests/citizenship/tayilnvelex/tayilnvelex012.mp3", "", "", 780859497, 3478920233, Spawn) + AddConversationOption(conversation, "How do I leave the island?", "LeaveIsland") + AddConversationOption(conversation, "Not just yet.") + StartConversation(conversation, NPC, Spawn, "So, " .. GetName(Spawn) .. ", are you ready to learn more about the outpost and perform your first services for the Overlord?") +end + +-- 1st QUEST DIALOG + + +----------------------------------------------------------------------------------------------------------------------------------------------- +-- 2nd QUEST DIALOG Chef Gorga +----------------------------------------------------------------------------------------------------------------------------------------------- + +function IAmReady(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + if HasQuest(Spawn, TheArtOfCombat) then + if GetQuestStep(Spawn, TheArtOfCombat) == 4 then + SetStepComplete(Spawn, TheArtOfCombat, 4) + end + end + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/tayil_n_velex/tutorial_island02_evil_revamp/quests/citizenship/tayilnvelex/tayilnvelex013.mp3", "", "", 2559303107, 2971364705, Spawn) + AddConversationOption(conversation, "I'll keep that in mind. So who are the inhabitants?", "WhoInhabitants") + AddConversationOption(conversation, "We'll discuss this later.") + StartConversation(conversation, NPC, Spawn, "This outpost was recently established as a training ground for potential citizens of Freeport to hone their skills. Our first scouts on the island reported it as being uninhabited, perfect for our needs. It soon became clear that the initial reports were incorrect, and those scouts have been permanently reassigned to the bottom of the bay. Such is the price of failure.") +end + +function WhoInhabitants(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/tayil_n_velex/tutorial_island02_evil_revamp/quests/citizenship/tayilnvelex/tayilnvelex014.mp3", "", "", 298813640, 3848290979, Spawn) + AddConversationOption(conversation, "So I should go wipe them out?", "WipeThemOut") + AddConversationOption(conversation, "That sounds like a lot of effort.") + StartConversation(conversation, NPC, Spawn, "The intruders are a sect of the Tunarian Alliance, a lowly order of vermin originating from Qeynos. As a true servant of the Overlord, your duty is to eliminate them. This should prove extremely useful in preparing you for the challenges that lie ahead after you leave the outpost.") +end + +function WipeThemOut(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/tayil_n_velex/tutorial_island02_evil_revamp/quests/citizenship/tayilnvelex/tayilnvelex015.mp3", "", "", 907106950, 578099041, Spawn) + AddConversationOption(conversation, "I am ready.", "IAmReady2") + AddConversationOption(conversation, "Perhaps later.") + StartConversation(conversation, NPC, Spawn, "Not just yet, " .. GetName(Spawn) .. ". You will strike against those Qeynosian scum when the time is right. First we need to see if that weapon of yours is working! Are you ready for your first test?") +end + +function IAmReady2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/tayil_n_velex/tutorial_island02_evil_revamp/quests/citizenship/tayilnvelex/tayilnvelex016.mp3", "", "", 727910371, 354103417, Spawn) + AddConversationOption(conversation, "I will go help Chef Gorga.", "OfferQuest2") + StartConversation(conversation, NPC, Spawn, "Go talk to Chef Gorga just past the west archway. She needs help gathering supplies to feed the members of the Freeport Militia who guard this outpost, which should provide a chance to test your combat skills. There is more to hunt on this island than just Qeynosians.") +end + +function HelpedGorgaGather(NPC, Spawn) + SetStepComplete(Spawn, SeasideStew, 6) + + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/tayil_n_velex/tutorial_island02_evil_revamp/quests/citizenship/tayilnvelex/tayilnvelex018.mp3", "", "", 4113250414, 3675047452, Spawn) + AddConversationOption(conversation, "Thank you, Tayil.", "ThankYouTayil") + StartConversation(conversation, NPC, Spawn, "Gorga was impressed with your handiwork. I'm sure the outpost Militia guards will be pleased with her stew, though I can't stomach troll cooking myself. You show potential indeed, " .. GetName(Spawn) .. ". As promised, here is your reward.") +end + +function EnjoyHuntingWithChef(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + if GetQuestStep(Spawn, SeasideStew) >= 1 and GetQuestStep(Spawn, SeasideStew) <= 5 then + AddConversationOption(conversation, "I haven't finished with Gorga yet.") + elseif GetQuestStep(Spawn, SeasideStew) == 6 then + AddConversationOption(conversation, "I helped Gorga gather supplies.", "HelpedGorgaGather") + end + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/tayil_n_velex/tutorial_island02_evil_revamp/quests/citizenship/tayilnvelex/tayilnvelex017.mp3", "", "", 1018943888, 25598510, Spawn) + AddConversationOption(conversation, "How do I leave the island?", "LeaveIsland") + AddConversationOption(conversation, "I still have some more hunting to do.") + StartConversation(conversation, NPC, Spawn, "Did you enjoy your hunting in the Seaside Glad with Chef Gorga?") +end + +----------------------------------------------------------------------------------------------------------------------------------------------- +-- 3rd QUEST DIALOG - Assassin Vamir +----------------------------------------------------------------------------------------------------------------------------------------------- + +function ThankYouTayil(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/tayil_n_velex/tutorial_island02_evil_revamp/quests/citizenship/tayilnvelex/tayilnvelex019.mp3", "", "", 3119184913, 1183036509, Spawn) + AddConversationOption(conversation, "I am ready for my next assignment.", "ReadyForNextAssignment") + AddConversationOption(conversation, "How do I leave the island?", "LeaveIsland") + AddConversationOption(conversation, "Not just yet.") + StartConversation(conversation, NPC, Spawn, "So, " .. GetName(Spawn) .. ", are you ready to prove your worth again?") +end + +function ReadyForNextAssignment(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/tayil_n_velex/tutorial_island02_evil_revamp/quests/citizenship/tayilnvelex/tayilnvelex020.mp3", "", "", 712284535, 2640983070, Spawn) + AddConversationOption(conversation, "You're suggesting some kind of sinister plan?", "SinisterPlan") + AddConversationOption(conversation, "I can't really figure out what you mean right now.") + StartConversation(conversation, NPC, Spawn, "Good, now listen closely. Though a direct attack upon your enemy can be quite satisfying, there are often more subtle means of inflicting damage. Cut off the feet and the head is sure to follow, if you get my meaning.") +end + +function SinisterPlan(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/tayil_n_velex/tutorial_island02_evil_revamp/quests/citizenship/tayilnvelex/tayilnvelex021.mp3", "", "", 1415726143, 629403231, Spawn) + AddConversationOption(conversation, "I will go speak to Assassin Vamir.", "OfferQuest3") + AddConversationOption(conversation, "I don't have time right now.") + StartConversation(conversation, NPC, Spawn, "Indeed, cunning and subtlety are often effective. And who is more cunning and subtle than an assassin? We've established a camp through the archway to the west, at the far end of Seaside Glade. Go and speak to Assassin Vamir, who has devised a plan to strike at the heart of the Tunarians.") +end + +function WorkWithVamirSuccessfull(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "I have more to learn from him.") + AddConversationOption(conversation, "How do I leave the island?", "LeaveIsland") + StartConversation(conversation, NPC, Spawn, "Hello again, " .. GetName(Spawn) .. ". Was your work with Assassin Vamir successful?") +end + +----------------------------------------------------------------------------------------------------------------------------------------------- +-- 4TH QUEST - Coercer Zlith +----------------------------------------------------------------------------------------------------------------------------------------------- + +function DidNotReadNote(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "I am ready to serve my liege.", "ReadyToServe") + AddConversationOption(conversation, "How do I leave the island?", "LeaveIsland") + AddConversationOption(conversation, "Not just yet.") + StartConversation(conversation, NPC, Spawn, "Perhaps you did not read my note. Are you prepared to lend your services to the Overlord once again?") +end + +function ReadyToServe(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "Sounds good. How do I proceed?", "OfferQuest4") + AddConversationOption(conversation, "Perhaps later.") + StartConversation(conversation, NPC, Spawn, "We have discovered that the Tunarian Alliance's main source of income is from a mine in the Wilderwood. The mine is the perfect setting to employ our next strategy for conquering the island: distraction. By causing a disruption at the mine, it will allow us to flank the Qeynosians from the opposite side.") +end + +function DisruptedMine(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "How do I leave the Island?", "LeaveIsland") + AddConversationOption(conversation, "Not yet.") + StartConversation(conversation, NPC, Spawn, "Have you succeeded in disrupting Qeynosian activities at the mine?") +end + +----------------------------------------------------------------------------------------------------------------------------------------------- +-- 5TH QUEST +----------------------------------------------------------------------------------------------------------------------------------------------- + +function ResourcesAreDwindling(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "I am ready, Tayil.", "ReadyQuest5") + AddConversationOption(conversation, "How do I leave the Island?", "LeaveIsland") + StartConversation(conversation, NPC, Spawn, "The Tunarian Alliance's resources are dwindling and their forces are focused on defending the mine. The time has come to strike the final blow. Are you prepared to face your greatest challenge so far?") +end + +function ReadyQuest5(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "North of Cliffdiver Canyon, then east. Got it.", "NorthThenEast") + StartConversation(conversation, NPC, Spawn, "The Militia has pushed through the Tunarian Alliance's line into the Valley of Discipline, they area they use to train their animals. Our forces have set up a forward camp in an alcove located in the eastern portion of the valley near the archway leading to the falls.") +end + +function NorthThenEast(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "I will speak to Captain Tyreth.", "OfferQuest5") + StartConversation(conversation, NPC, Spawn, "The Militia is using this position as our point of attack. Go to the camp and seek out Captain Tyreth, the leader of the forward operation. He will direct your efforts in this final phase of the assault. We will drive out the Tunarian Alliance and take their treasures as our own!") +end + +function ReportToCaptain(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "I will go speak to Captain Tyreth.") + AddConversationOption(conversation, "How do I leave the Island?", "LeaveIsland") + StartConversation(conversation, NPC, Spawn, "Report to Captain Tyreth at the Militia camp in the Valley of Discipline. He can be found in an alcove located in the eastern part of the valley near the archway leading to the falls. We must make our final stand against the Tunarians!") +end + +function BraveryNoted(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/tayil_n_velex/tutorial_island02_evil_revamp/quests/citizenship/tayilnvelex/tayilnvelex033.mp3", "", "", 2106485870, 4220225925, Spawn) + AddConversationOption(conversation, "I am honored to have served the Overlord.", "dlg_8_1") + AddConversationOption(conversation, "How do I leave the island?") + StartConversation(conversation, NPC, Spawn, "Your bravery has been noted, young one. The Tunarian Circle of Elders was defeated and their treasure is ours. The Militia troops will remain here to clear out the remaining Qeynosians, but they present no danger to us.") +end + +function dlg_8_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/tayil_n_velex/tutorial_island02_evil_revamp/quests/citizenship/tayilnvelex/tayilnvelex034.mp3", "", "", 1646478663, 778919284, Spawn) + AddConversationOption(conversation, "Thank you, Tayil.") + StartConversation(conversation, NPC, Spawn, "It was my pleasure to fight beside you. I have no doubt that you will be well received in Freeport. When you are ready to leave the outpost and venture to our great city, speak with Captain Varlos on the deck of the Far Journey. His ship is waiting on the dock through the south archway. Farewell.") +end + +function OfferQuest1(NPC, Spawn) + FaceTarget(NPC, Spawn) + OfferQuest(NPC, Spawn, TheArtOfCombat) +end + +function OfferQuest2(NPC, Spawn) + FaceTarget(NPC, Spawn) + OfferQuest(NPC, Spawn, SeasideStew) +end + +function OfferQuest3(NPC, Spawn) + FaceTarget(NPC, Spawn) + OfferQuest(NPC, Spawn, PreventativeMaintenance) +end + +function OfferQuest4(NPC, Spawn) + FaceTarget(NPC, Spawn) + OfferQuest(NPC, Spawn, DisruptionForDistraction) +end + +function OfferQuest5(NPC, Spawn) + FaceTarget(NPC, Spawn) + OfferQuest(NPC, Spawn, TheFinalAssault) +end \ No newline at end of file diff --git a/server/SpawnScripts/OutpostOverlord/TheGreatHawk.lua b/server/SpawnScripts/OutpostOverlord/TheGreatHawk.lua new file mode 100644 index 000000000..df1a1834a --- /dev/null +++ b/server/SpawnScripts/OutpostOverlord/TheGreatHawk.lua @@ -0,0 +1,30 @@ +--[[ + Script Name : SpawnScripts/OutpostOverlord/TheGreatHawk.lua + Script Author : Cynnar + Script Date : 2017.01.28 02:01:19 + Script Purpose : + : +--]] + +function spawn(NPC) +MovementLoopAddLocation(NPC, 99.76, 30.0556, -156.76, 2, 0) +MovementLoopAddLocation(NPC, 88.37, 30.0556, -167.49, 2, 0) +MovementLoopAddLocation(NPC, 79.9, 30.0556, -185.55, 2, 0) +MovementLoopAddLocation(NPC, 96.77, 30.0556, -201.8, 2, 0) +MovementLoopAddLocation(NPC, 145.48, 30.0556, -207.89, 2, 0) +MovementLoopAddLocation(NPC, 193.69, 30.0556, -196.3, 2, 0) +MovementLoopAddLocation(NPC, 237.29, 30.0556, -170.62, 2, 0) +MovementLoopAddLocation(NPC, 227.4, 30.0556, -125.1, 2, 0) +MovementLoopAddLocation(NPC, 204.14, 30.0556, -113.76, 2, 0) +MovementLoopAddLocation(NPC, 159.52, 30.0556, -125.28, 2, 0) +MovementLoopAddLocation(NPC, 128, 30.0556, -133.993, 2, 0) + +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) +end + +function respawn(NPC) + +end \ No newline at end of file diff --git a/server/SpawnScripts/OutpostOverlord/TrainerAnnaWinston.lua b/server/SpawnScripts/OutpostOverlord/TrainerAnnaWinston.lua new file mode 100644 index 000000000..abbececf5 --- /dev/null +++ b/server/SpawnScripts/OutpostOverlord/TrainerAnnaWinston.lua @@ -0,0 +1,174 @@ +--[[ + Script Name : SpawnScripts/OutpostOverlord/TrainerAnnaWinston.lua + Script Purpose : Trainer Anna Winston + Script Author : John Adams + Script Date : 2008.09.23 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +function spawn(NPC) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/trainer_anna_winston/tutorial_island02_evil_revamp/trainers/con_system/con_evil001.mp3", "", "", 3826694129, 553189793, Spawn) + AddConversationOption(conversation, "How do I judge my opponent?", "dlg_17_1") + AddConversationOption(conversation, "I will learn this lesson later.") + StartConversation(conversation, NPC, Spawn, "You seem to have potential, adventurer. I think you shall make a great champion of the Overlord some day. As you begin your training here at the Outpost, it is important that you learn how to gauge the capabilities of your adversary.") +end + +function dlg_17_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/trainer_anna_winston/tutorial_island02_evil_revamp/trainers/con_system/con_evil002.mp3", "", "", 4184288425, 582050840, Spawn) + AddConversationOption(conversation, "What does the creature's name tell me?", "dlg_17_2") + AddConversationOption(conversation, "I will learn this lesson later.") + StartConversation(conversation, NPC, Spawn, "You must learn to use both your eyes and your instincts as you consider friends and foes in Norrath. There are two excellent tools you should use to judge their capabilities: what you can tell from their name and what you can learn by targeting them.") +end + +function dlg_17_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/trainer_anna_winston/tutorial_island02_evil_revamp/trainers/con_system/con_evil003.mp3", "", "", 3153490829, 2957467491, Spawn) + AddConversationOption(conversation, "How do I target an opponent?", "dlg_17_3") + AddConversationOption(conversation, "I will learn this lesson later.") + StartConversation(conversation, NPC, Spawn, "If something has a red border around its name, that target is aggressive toward you and will attack if you get too close to it. You should be especially careful of creatures that roam around, because if they notice you they won't hesitate to strike.") +end + +function dlg_17_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/trainer_anna_winston/tutorial_island02_evil_revamp/trainers/con_system/con_evil004.mp3", "", "", 3804622316, 716418387, Spawn) + AddConversationOption(conversation, "Why are separate creatures sometimes linked?", "dlg_17_4") + AddConversationOption(conversation, "I will learn this lesson later.") + StartConversation(conversation, NPC, Spawn, "All you need to do is move your mouse pointer over what you want to target and click. You will see the name of your opponent in the Target window in the upper left corner of the screen, and a large arrow will appear above its head. If arrows also appear above the heads of nearby creatures, it means all of them are linked together and will attack as one.") +end + +function dlg_17_4(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/trainer_anna_winston/tutorial_island02_evil_revamp/trainers/con_system/con_evil005.mp3", "", "", 1876992668, 3587528446, Spawn) + AddConversationOption(conversation, "What does the Target window tell me?", "dlg_17_5") + AddConversationOption(conversation, "I will learn this lesson later.") + StartConversation(conversation, NPC, Spawn, "Sometimes multiple creatures will work together to form a single encounter. These opponents will act as a team, and usually won't stop fighting until all of them are defeated.") +end + +function dlg_17_5(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/trainer_anna_winston/tutorial_island02_evil_revamp/trainers/con_system/con_evil006.mp3", "", "", 3654063813, 804080382, Spawn) + AddConversationOption(conversation, "What does the level indicate?", "dlg_17_6") + AddConversationOption(conversation, "I will learn this lesson later.") + StartConversation(conversation, NPC, Spawn, "The Target window tells you several important facts, which collectively form what is referred to as the 'con' (overall challenge) of the opponent. It shows you the numerical level of the creature you have targeted, a color to indicate its relative level range, up or down arrows to indicate toughness, and indicators that tell you if the encounter is normal, heroic, or epic.") +end + +function dlg_17_6(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/trainer_anna_winston/tutorial_island02_evil_revamp/trainers/con_system/con_evil007.mp3", "", "", 1614821790, 2742028941, Spawn) + AddConversationOption(conversation, "How does my opponent's level affect my rewards for victory?", "dlg_17_7") + AddConversationOption(conversation, "I will learn this lesson later.") + StartConversation(conversation, NPC, Spawn, "As you adventure through Norrath, you will gain experience and increase your level. The opponents you will face in combat have levels as well. To be victorious, you will usually want to face foes that are close to your level.") +end + +function dlg_17_7(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/trainer_anna_winston/tutorial_island02_evil_revamp/trainers/con_system/con_evil008.mp3", "", "", 3345285161, 1595199883, Spawn) + AddConversationOption(conversation, "What does the color of my opponent's name tell me?", "dlg_17_8") + AddConversationOption(conversation, "I will learn this lesson later.") + StartConversation(conversation, NPC, Spawn, "You gain more experience for defeating higher-level opponents, but they will be tougher to beat. Conversely, if you defeat foes much lower than your level, they will not be nearly as rewarding.") +end + +function dlg_17_8(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/trainer_anna_winston/tutorial_island02_evil_revamp/trainers/con_system/con_evil009.mp3", "", "", 2978922911, 137803014, Spawn) + AddConversationOption(conversation, "What are the colors?", "dlg_17_9") + AddConversationOption(conversation, "I will learn this lesson later.") + StartConversation(conversation, NPC, Spawn, "The color of the opponent's name indicates how challenging the encounter is. It is very useful as a quick indicator of whether or not you should try fighting a target. The more danger its color indicates, the greater the threat it represents.") +end + +function dlg_17_9(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/trainer_anna_winston/tutorial_island02_evil_revamp/trainers/con_system/con_evil010.mp3", "", "", 962673165, 2603707279, Spawn) + AddConversationOption(conversation, "Will grey targets ever attack me?", "dlg_17_10") + AddConversationOption(conversation, "I will learn this lesson later.") + StartConversation(conversation, NPC, Spawn, "Grey names mean the fight is below your abilities and will give no experience or reward. Green names mean the opponent is very easy. Blue names mean an easy fight. White names indicate the opponent is even with your abilities. Yellow names mean the fight will be challenging. Orange names indicate a difficult encounter. Red names mean the battle could be deadly.") +end + +function dlg_17_10(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/trainer_anna_winston/tutorial_island02_evil_revamp/trainers/con_system/con_evil011.mp3", "", "", 2405729502, 4006280510, Spawn) + AddConversationOption(conversation, "What do down arrows tell me?", "dlg_17_11") + AddConversationOption(conversation, "I will learn this lesson later.") + StartConversation(conversation, NPC, Spawn, "Targets with grey names will not attack you, even if they would be aggressive to someone closer to their level. In other words, you won't be attacked by anything that won't give you some reward for defeating it.") +end + +function dlg_17_11(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/trainer_anna_winston/tutorial_island02_evil_revamp/trainers/con_system/con_evil012.mp3", "", "", 1405338343, 2444664063, Spawn) + AddConversationOption(conversation, "What do up arrows mean?", "dlg_17_12") + AddConversationOption(conversation, "I will learn this lesson later.") + StartConversation(conversation, NPC, Spawn, "No arrow by the target's name indicates an average opponent for a lone adventurer. A single down arrow means it is a below average opponent. Two down arrows tell you it's a weak opponent, and three down arrows mean it is very weak. Be careful though, because if multiple weak opponents are working together they can still represent quite a challenge.") +end + +function dlg_17_12(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "So how do I know whether I can face a challenge alone?", "dlg_17_13") + AddConversationOption(conversation, "I will learn this lesson later.") + StartConversation(conversation, NPC, Spawn, "Up arrows indicate increased difficulty. A single up arrow means an above average opponent. Two up arrows show a strong opponent, while three up arrows means a very tough fight. If you look at the sparring partners next to us, you will see that they have different arrow indicators. Feel free to practice fighting them to feel what effect the arrows have.") +end + +function dlg_17_13(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/trainer_anna_winston/tutorial_island02_evil_revamp/trainers/con_system/con_evil014.mp3", "", "", 119965585, 995426469, Spawn) + AddConversationOption(conversation, "What is the difference between normal, heroic, and epic?", "dlg_17_14") + AddConversationOption(conversation, "I will learn this lesson later.") + StartConversation(conversation, NPC, Spawn, "As a general rule of thumb, if you see an enemy with one up arrow, it's a good idea to team up with another player to take it on. If you see an enemy with two up arrows, add two members to your group. If you see an opponent with three up arrows, add three members to your group. A lone adventurer will likely want to face targets with no arrows or down arrows.") +end + +function dlg_17_14(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/trainer_anna_winston/tutorial_island02_evil_revamp/trainers/con_system/con_evil015.mp3", "", "", 3757452020, 2618123784, Spawn) + AddConversationOption(conversation, "So how do all these elements work together to show an opponent's difficulty?", "dlg_17_15") + AddConversationOption(conversation, "I will learn this lesson later.") + StartConversation(conversation, NPC, Spawn, "A normal opponent has no indicator and is intended to be fought by a solo adventurer or small group. A heroic encounter is intended for a larger group of up to six adventurers. An epic opponent should only be attempted by a raid force of multiple groups working together.") +end + +function dlg_17_15(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/trainer_anna_winston/tutorial_island02_evil_revamp/trainers/con_system/con_evil016.mp3", "", "", 1301376651, 859276859, Spawn) + AddConversationOption(conversation, "Thank you, instructor.") + StartConversation(conversation, NPC, Spawn, "All the elements I've explained will affect the outcome of a battle and whether or not you will need allies to win. Pay close attention to the lessons I have taught you. Learn well and you will indeed become the great champion I know you can be!") +end + diff --git a/server/SpawnScripts/OutpostOverlord/TrainerArthurMerrin.lua b/server/SpawnScripts/OutpostOverlord/TrainerArthurMerrin.lua new file mode 100644 index 000000000..5bd9226e5 --- /dev/null +++ b/server/SpawnScripts/OutpostOverlord/TrainerArthurMerrin.lua @@ -0,0 +1,88 @@ +--[[ + Script Name : SpawnScripts/OutpostOverlord/TrainerArthurMerrin.lua + Script Purpose : Trainer Arthur Merrin + Script Author : John Adams + Script Date : 2008.09.23 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +function spawn(NPC) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_1_1004.mp3", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "How does one take up crafting?", "dlg_11_1") + AddConversationOption(conversation, "I will return another time to learn your lesson.") + StartConversation(conversation, NPC, Spawn, "Greetings, brave hero of the Overlord! It is my responsibility to explain how crafting and tradeskills can bring prosperity to the kingdom of Freeport. I hope I can encourage your participation in helping our city flourish. We can beat those hapless Qeynosians through our superior commerce!") +end + +function dlg_11_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "Where does one perform crafting?", "dlg_11_2") + AddConversationOption(conversation, "I will return another time to learn your lesson.") + StartConversation(conversation, NPC, Spawn, "Crafting, or tradeskilling as some call it, involves taking ingredients harvested or obtained in the world, mixing them with the proper fuel, and carefully following a specific recipe to create something new and useful for yourself or your fellow citizens. Just as you can gain levels by adventuring, you have a separate Artisan level that increases as you earn experience crafting.") +end + +function dlg_11_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "Can I make a variety of items?", "dlg_11_3") + AddConversationOption(conversation, "I will return another time to learn your lesson.") + StartConversation(conversation, NPC, Spawn, "Crafting takes place in workshops, just like the one we have here on the island. Inside this doorway you will find the fuel and devices you'll need to build, cook, scribe, sew, and create all manner of useful goods. When you arrive in our grand city, you will find the entrances to workshops scattered throughout your home village.") +end + +function dlg_11_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "What could I specialize in?", "dlg_11_4") + AddConversationOption(conversation, "I will return another time to learn your lesson.") + StartConversation(conversation, NPC, Spawn, "As you practice your craft you will learn to make a variety of products, but as you advance in your profession you will specialize in certain types of goods. As you acquire new recipe books, you will learn new types of items you can make.") +end + +function dlg_11_4(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "Where do I learn recipes?", "dlg_11_5") + AddConversationOption(conversation, "I will return another time to learn your lesson.") + StartConversation(conversation, NPC, Spawn, "You might choose to become a Provisioner that makes food and drink, a Woodworker that crafts totems and staves, an Armorer that forges plate and chain armor, a Sage that scribes potent spells for mages and priests, or one of many other noble professions.") +end + +function dlg_11_5(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "What can I do with the items I make?", "dlg_11_6") + AddConversationOption(conversation, "I will return another time to learn your lesson.") + StartConversation(conversation, NPC, Spawn, "Basic recipes can be bought for a small fee from a merchant near the workshops in Freeport. Rare recipes can be obtained by adventuring in the wilds of Norrath. You may want to trade goods or services with other adventurers and artisans to obtain such valuable recipes. You can view your recipe book by pressing the N key. ") +end + +function dlg_11_6(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "Do you have any further advice?", "dlg_11_7") + AddConversationOption(conversation, "Thank you.") + StartConversation(conversation, NPC, Spawn, "You can either use the items yourself or make a tidy profit by selling them to others. A skilled artisan is always in demand for the goods they provide, so learn your craft well and you may build a fortune that others in Freeport can only envy!") +end + +function dlg_11_7(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + -- give tradeskill item(s) here + AddConversationOption(conversation, "Thank you for the guidance.", "dlg_11_8") + StartConversation(conversation, NPC, Spawn, "Here is a handbook that will provide you with some basic reference material to start with. Once you reach Freeport, you will find a tradeskill tutor within your local crafting workshop who can teach you more about crafting in further detail.") +end + diff --git a/server/SpawnScripts/OutpostOverlord/TrainerCorxKnickknack.lua b/server/SpawnScripts/OutpostOverlord/TrainerCorxKnickknack.lua new file mode 100644 index 000000000..a3b37328e --- /dev/null +++ b/server/SpawnScripts/OutpostOverlord/TrainerCorxKnickknack.lua @@ -0,0 +1,153 @@ +--[[ + Script Name : SpawnScripts/OutpostOverlord/TrainerCorxKnickknack.lua + Script Purpose : Trainer Corx Knickknack + Script Author : John Adams + Script Date : 2008.09.23 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +function spawn(NPC) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + choice = math.random(1,3) + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_" .. choice .. "_1006.mp3", "", "", 0, 0, Spawn) + + if HasQuest(Spawn, 54) and GetQuestStep(Spawn, 54) == 7 then + AddConversationOption(conversation, "Do you know Charles Arker?", "dlg_42_1") + end + + AddConversationOption(conversation, "Tell me about items and equipment.", "dlg_7_1") + AddConversationOption(conversation, "Tell me about my inventory.", "dlg_7_11") + AddConversationOption(conversation, "I will return for instruction later.") + StartConversation(conversation, NPC, Spawn, "Good day," .. GetName(Spawn) .. ". I've been stationed here at the outpost to teach the Overlord's newest recruits about equipment and inventory space. Good equipment is one of the most important aspects of any adventurer!") +end + +function dlg_7_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "What can I do with the treasures I earn while adventuring?", "dlg_7_2") + StartConversation(conversation, NPC, Spawn, "Norrath is full of wealth and treasures for brave heroes like you. Sometimes the opponents you defeat in battle leave behind treasure chests with valuable loot. You can also buy items from other players, craft them as an artisan, or be awarded items for completing quests.") +end + +function dlg_7_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "What does the item information tell me?", "dlg_7_3") + StartConversation(conversation, NPC, Spawn, "Some items you obtain can be equipped on your person. If you find weapons, armor, jewelry, or certain other goodies, you may be able to use them. To look at an item and determine if you can use it, move your mouse pointer over the item.") +end + +function dlg_7_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "Are things like attribute bonuses important?", "dlg_7_4") + AddConversationOption(conversation, "I will return for instruction later.") + StartConversation(conversation, NPC, Spawn, "For items that can be equipped, such as weapons and armor, mousing over it tells you which professions can use the item and at what level it can be equipped. You'll also see any benefits, such as attribute bonuses and resists, that the equipment provides. Learn about attributes by talking to Trainer Nogg Dreadscar.") +end + +function dlg_7_4(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "How can I tell which of two weapons is better?", "dlg_7_5") + StartConversation(conversation, NPC, Spawn, "A wise adventurer is always trying to improve his or her equipment. Whenever you see gear that provides an overall greater benefit than what you have, that item is an upgrade for you.") +end + +function dlg_7_5(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "How can I tell which of two pieces of armor is better?", "dlg_7_6") + StartConversation(conversation, NPC, Spawn, "Weapons have a Damage Rating that shows the relative damage you can do with them. A higher Damage Rating is always better. Be sure you are comparing weapons of the same type, such as a two-handed weapon with another two-hander, or one dual-wield weapon with another.") +end + +function dlg_7_6(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "What about scouts and priests?", "dlg_7_7") + AddConversationOption(conversation, "I will return for instruction later.") + StartConversation(conversation, NPC, Spawn, "How you judge armor depends on your profession. Fighters who take a beating care most about obtaining armor that has high Mitigation, which decreases the amount of damage they take. Mages, on the other hand, know they can't take much punishment anyway, so would rather have armor that provides nice attribute bonuses.") +end + +function dlg_7_7(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "What do I do with items I can't use?", "dlg_7_8") + AddConversationOption(conversation, "I will return for instruction later.") + StartConversation(conversation, NPC, Spawn, "Scouts and priests need varying amounts of protection depending on how they play. If they find themselves at the forefront of battle, protection becomes very important. If they stay out of harms way, attribute bonuses may be more valuable.") +end + +function dlg_7_8(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "Why are some items marked 'No Value' or 'No Trade'?", "dlg_7_9") + StartConversation(conversation, NPC, Spawn, "An item can be sold to a non-player merchant for cash unless it has the 'No Value' flag on it. Items can be sold or traded to another player unless it has the 'No Trade' flag. If an item says it is 'Lore,' you can only have one of them on your character at a time.") +end + +function dlg_7_9(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "What does it mean when an item says it is 'Attuneable'?", "dlg_7_10") + StartConversation(conversation, NPC, Spawn, "Some items are marked 'No Value' because they are easy to obtain, such as harvested goods. You have to work to earn wealth," .. GetName(Spawn) .. ". Items are marked 'No Trade' in order to ensure that you earn them yourself, such as defeating a very tough monster or completing a long quest.") +end + +function dlg_7_10(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "How do I manage my inventory?", "dlg_7_11") + AddConversationOption(conversation, "I will return for instruction later.") + StartConversation(conversation, NPC, Spawn, "If an item is marked 'Attuneable,' you must attune it to yourself before it provides any benefits. You'll notice a message on screen when you are wearing an item that must be attuned. To attune it, right-click on the item and select 'Attune.' Once attuned, that item can no longer be traded or sold to another player.") +end + +function dlg_7_11(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "Can I put bags inside of bags?", "dlg_7_12") + AddConversationOption(conversation, "I will return for instruction later.") + StartConversation(conversation, NPC, Spawn, "Press the I key to view your inventory. Beneath your portrait are six slots that can hold items. You can place bags or other containers in those slots, which will give you even more storage space. Press the B key to open all your bags at once.") +end + +function dlg_7_12(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + + AddConversationOption(conversation, "So one item takes up one bag slot?", "dlg_7_13") + StartConversation(conversation, NPC, Spawn, "Only empty bags can go inside other bags. For this reason, it's a good idea to get hold of containers with many slots. After a long night of adventuring or harvesting, you'll want to have as many places to store your goodies as possible.") +end + +function dlg_7_13(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "Tell me about items and equipment.", "dlg_7_1") + AddConversationOption(conversation, "I will return for instruction later.") + StartConversation(conversation, NPC, Spawn, "Certain items, such as ammunition or harvested resources, can be stacked up to 200 at a time, depending on the item. Many goods, such as armor and clothing, cannot be stacked at all.") +end + + +-- Charles Arker +function dlg_42_1(NPC, Spawn) + SetStepComplete(Spawn, 54, 7) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "Thanks, I will check back with you.") + StartConversation(conversation, NPC, Spawn, "Sorry, never met that person. You should see me about some training, though.") +end diff --git a/server/SpawnScripts/OutpostOverlord/TrainerDargFrostwind.lua b/server/SpawnScripts/OutpostOverlord/TrainerDargFrostwind.lua new file mode 100644 index 000000000..3c5274bbb --- /dev/null +++ b/server/SpawnScripts/OutpostOverlord/TrainerDargFrostwind.lua @@ -0,0 +1,327 @@ +--[[ + Script Name : Trainer Darg Frostwind.lua + Script Purpose : Combat Trainer on Outpost of the Overlord + Script Author : Scatman (Updated by Cynnar 2018.09.23 11.32.10) + Script Date : 2008.09.07 + Script Notes : +--]] + +--Quest ID's +local TheArtOfCombat = 363 + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + if HasQuest(Spawn, 54) and GetQuestStep(Spawn, 54) == 3 then + AddConversationOption(conversation, "Do you know anyone named Charles Arker? He's a very famous hero.", "CharlesArker") + end + + if HasCompletedQuest(Spawn, TheArtOfCombat) then + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/trainer_darg_frostwind/tutorial_island02_evil_revamp/trainers/combat/darg_frostwind001.mp3", "", "", 4099559600, 3648787893, Spawn) + AddConversationOption(conversation, "What can you teach me about combat?", "LearnAboutCombat") + StartConversation(conversation, NPC, Spawn, "Greetings, " .. GetName(Spawn) .. ". I've been stationed here at the outpost to teach new recruits the finer points of combat. After all, it's our duty to honor the Overlord by achieving legendary victories in his glorious name.") + + elseif HasQuest(Spawn, TheArtOfCombat) and GetQuestStep(Spawn, TheArtOfCombat) < 4 then + if GetQuestStep(Spawn, TheArtOfCombat) == 1 then + -- on the first step + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/trainer_darg_frostwind/tutorial_island02_evil_revamp/trainers/combat/darg_frostwind001.mp3", "", "", 4099559600, 3648787893, Spawn) + AddConversationOption(conversation, "What can you teach me about combat?", "LearnAboutCombat") + StartConversation(conversation, NPC, Spawn, "Greetings, " .. GetName(Spawn) .. ". I've been stationed here at the outpost to teach new recruits the finer points of combat. After all, it's our duty to honor the Overlord by achieving legendary victories in his glorious name.") + else + if GetQuestStep(Spawn, TheArtOfCombat) == 3 then + AddConversationOption(conversation, "I defeated one of the sparring partners.", "Victorious") + end + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/trainer_darg_frostwind/tutorial_island02_evil_revamp/trainers/combat/darg_frostwind_initial001.mp3", "", "", 3438807645, 3037995135, Spawn) + AddConversationOption(conversation, "Not yet, but I will soon.") + StartConversation(conversation, NPC, Spawn, "Have you defeated the sparring partner yet?") + end + else + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/trainer_darg_frostwind/tutorial_island02_evil_revamp/trainers/combat/darg_frostwind001.mp3", "", "", 4099559600, 3648787893, Spawn) + AddConversationOption(conversation, "What can you teach me about combat?", "LearnAboutCombat") + StartConversation(conversation, NPC, Spawn, "Greetings, " .. GetName(Spawn) .. ". I've been stationed here at the outpost to teach new recruits the finer points of combat. After all, it's our duty to honor the Overlord by achieving legendary victories in his glorious name.") + end +end + +function Victorious(NPC, Spawn) + FaceTarget(NPC, Spawn) + SetStepComplete(Spawn, TheArtOfCombat, 3) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/trainer_darg_frostwind/tutorial_island02_evil_revamp/trainers/combat/darg_frostwind_quest001.mp3", "", "", 86781152, 1169988088, Spawn) + AddConversationOption(conversation, "Is there anything else I can do?", "ReturnToTayil") + StartConversation(conversation, NPC, Spawn, "Good. The stronger you are the more use you are to us.") +end + +function ReturnToTayil(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/trainer_darg_frostwind/tutorial_island02_evil_revamp/trainers/combat/darg_frostwind_quest002.mp3", "", "", 1230472892, 2272326902, Spawn) + AddConversationOption(conversation, "I will go speak with her.") + StartConversation(conversation, NPC, Spawn, "I'm sure of it! Go speak with Tayil N'Velex, she is just south of Sythor's Spire.") +end + +function LearnAboutCombat(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/trainer_darg_frostwind/tutorial_island02_evil_revamp/trainers/combat/darg_frostwind_quest000.mp3", "", "", 2841640734, 3529617772, Spawn) + AddConversationOption(conversation, "Tell me how to begin a fight.", "ChallengeFoe") + if HasQuest(Spawn, TheArtOfCombat) then + if GetQuestStep(Spawn, TheArtOfCombat) == 1 then + SetStepComplete(Spawn, TheArtOfCombat, 1) + end + + AddConversationOption(conversation, "I will return victorious!") + + end + StartConversation(conversation, NPC, Spawn, "Very well. The nearby sparring partners to my left are all looking to fight. They may hurt you, but they won't kill you. Return to me once you've bested one of them in combat.") +end + +function ChallengeFoe(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/trainer_darg_frostwind/tutorial_island02_evil_revamp/trainers/combat/darg_frostwind003.mp3", "", "", 351947717, 288851730, Spawn) + AddConversationOption(conversation, "How do I begin the battle?", "BeginBattle") + StartConversation(conversation, NPC, Spawn, "Starting combat is easy. Just use your mouse pointer to left-click on an opponent. Its name will appear in the Target window in the upper left of your screen. You can also use the Tab key to cycle through nearby targets or the F8 key to select your closest enemy.") +end + +function BeginBattle(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/trainer_darg_frostwind/tutorial_island02_evil_revamp/trainers/combat/darg_frostwind004.mp3", "", "", 898388945, 3212674311, Spawn) + AddConversationOption(conversation, "So I can fight anyone or anything I want?", "FightAnything") + StartConversation(conversation, NPC, Spawn, "If you're close enough to your foe and want to start hitting it with your weapon, either click your Melee Attack button on your hotbar or press the ~ key. Or you can begin by using one of your spells or combat arts to get the enemy's attention. Remember, you must be close enough to actually hit them.") +end + +function FightAnything(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/trainer_darg_frostwind/tutorial_island02_evil_revamp/trainers/combat/darg_frostwind005.mp3", "", "", 316074774, 2036579965, Spawn) + AddConversationOption(conversation, "Tell me about melee combat.", "MeleeCombat") + AddConversationOption(conversation, "Tell me about ranged combat.", "RangeCombat") + AddConversationOption(conversation, "What kind of rewards can I earn in battle?", "CombatRewards") + AddConversationOption(conversation, "Teach me more advanced aspects of combat.", "AspectsOfCombat") + AddConversationOption(conversation, "I'll come back later.") + StartConversation(conversation, NPC, Spawn, "You can fight most non-player characters and creatures that you find outside your city, whether outdoors or in dungeons. Many non-player characters in the cities are there to help or give you quests, so you can't attack some of them. If you try, you'll get a message telling you that they aren't valid targets.") +end + +function MeleeCombat(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/trainer_darg_frostwind/tutorial_island02_evil_revamp/trainers/combat/darg_frostwind006.mp3", "", "", 589533624, 3601190139, Spawn) + AddConversationOption(conversation, "What classes specialize in melee combat?", "MeleeClasses") + StartConversation(conversation, NPC, Spawn, "Melee combat means a toe-to-toe, physical confrontation. It is a combination of auto-attack damage that happens automatically when you press the Melee Attack button on your hotbar or the ~ key and spells or combat arts that you use in close proximity to your foe.") +end + +function MeleeClasses(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/trainer_darg_frostwind/tutorial_island02_evil_revamp/trainers/combat/darg_frostwind007.mp3", "", "", 2775277419, 241586674, Spawn) + AddConversationOption(conversation, "Tell me how to begin a fight.", "BeginBattle") + AddConversationOption(conversation, "Tell me about ranged combat.", "RangeCombat") + AddConversationOption(conversation, "What kind of rewards can I earn in battle?", "CombatRewards") + AddConversationOption(conversation, "Teach me more advanced aspects of combat.", "AspectsOfCombat") + AddConversationOption(conversation, "I'll come back later.") + StartConversation(conversation, NPC, Spawn, "Sturdy fighters such as Guardians, Berserkers, Monks, and Paladins stand at the front lines of battle facing the enemy. Crafty scouts such as Swashbucklers, Rangers, Troubadors, and Dirges generally stay close to their foes as well, but prefer to launch attacks from the back or side where they are less likely to be counterattacked.") +end + +function RangeCombat(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/trainer_darg_frostwind/tutorial_island02_evil_revamp/trainers/combat/darg_frostwind008.mp3", "", "", 2757586190, 3183393393, Spawn) + AddConversationOption(conversation, "How do I launch a ranged attack?", "BeginRangedCombat") + StartConversation(conversation, NPC, Spawn, "Ranged combat means that you put some distance between yourself and the enemy. This can be done with weapons such as bows or throwing daggers, or with spells and arts that can be cast from a distance.") +end + +function BeginRangedCombat(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/trainer_darg_frostwind/tutorial_island02_evil_revamp/trainers/combat/darg_frostwind009.mp3", "", "", 714558264, 1505806898, Spawn) + AddConversationOption(conversation, "What classes specialize in ranged combat?", "RangeClasses") + StartConversation(conversation, NPC, Spawn, "If you have a ranged weapon and ammunition, you can initiate ranged combat by using the Ranged Attack button on the Abilities tab of your Knowledge Book. You can drag this key to your hotbar if you like. Remember, you must have a ranged weapon in the Ranged slot of your inventory window and the correct type of ammunition in the Ammo slot.") +end + +function RangeClasses(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/trainer_darg_frostwind/tutorial_island02_evil_revamp/trainers/combat/darg_frostwind010.mp3", "", "", 3793580571, 76138183, Spawn) + AddConversationOption(conversation, "How do I tell if I can use spells or arts from a distance?", "SpellsOrArtsAtDistance") + StartConversation(conversation, NPC, Spawn, "While most classes have the ability to attack from a distance, scout classes such as Swashbucklers, Troubadors, Dirges, and particularly Rangers specialize in ranged physical attacks. Mages, priests, and paladins have spells that do damage to their foes from a distance.") +end + +function SpellsOrArtsAtDistance(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/trainer_darg_frostwind/tutorial_island02_evil_revamp/trainers/combat/darg_frostwind011.mp3", "", "", 836156120, 3927966266, Spawn) + AddConversationOption(conversation, "Tell me how to begin a fight.", "BeginFight") + AddConversationOption(conversation, "Tell me about melee combat.", "MeleeCombat") + AddConversationOption(conversation, "What kind of rewards can I earn in battle?", "CombatRewards") + AddConversationOption(conversation, "Teach me more advanced aspects of combat.", "AspectsOfCombat") + AddConversationOption(conversation, "I'll come back later.") + StartConversation(conversation, NPC, Spawn, "You can right-click on a spell or art's icon and select 'Examine' to see what its range of effect is. In addition, if you target something and the icon for one of your spells or arts turns a dark red, that means the opponent is out of range of that ability.") +end + +function CombatRewards(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/trainer_darg_frostwind/tutorial_island02_evil_revamp/trainers/combat/darg_frostwind012.mp3", "", "", 3227230541, 1094360763, Spawn) + AddConversationOption(conversation, "What do you mean by 'a worthy opponent'?", "WorthyOpponent") + StartConversation(conversation, NPC, Spawn, "Victory in battle can be very rewarding. Successful combat against a worthy opponent awards you experience (XP) to help you advance your level, as well as the chance at coin, usable items, and other valuables.") +end + +function WorthyOpponent(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/trainer_darg_frostwind/tutorial_island02_evil_revamp/trainers/combat/darg_frostwind013.mp3", "", "", 4205213467, 4000330517, Spawn) + AddConversationOption(conversation, "Are certain types of targets more rewarding than others?", "MoreRewarding") + StartConversation(conversation, NPC, Spawn, "You don't earn rewards for defeating foes that are too far below your level. If your target has a grey name, it means it is very weak and won't provide any benefit for beating it. Talk to Trainer Anna Winston for more information on evaluating your opponents.") +end + +function MoreRewarding(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/trainer_darg_frostwind/tutorial_island02_evil_revamp/trainers/combat/darg_frostwind014.mp3", "", "", 2594073574, 99097516, Spawn) + AddConversationOption(conversation, "Tell me how to begin a fight.", "BeginFight") + AddConversationOption(conversation, "Tell me about melee combat.", "MeleeCombat") + AddConversationOption(conversation, "Tell me about ranged combat.", "RangeCombat") + AddConversationOption(conversation, "Teach me more advanced aspects of combat.", "AspectsOfCombat") + AddConversationOption(conversation, "I'll come back later.") + StartConversation(conversation, NPC, Spawn, "The tougher a foe, the better its chances to provide a valuable reward. Though defeating enemies alone provides nice rewards, defeating heroic enemies that require a group is even more rewarding. The very best items come from banding together multiple groups to defeat epic opponents.") +end + +function AspectsOfCombat(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/trainer_darg_frostwind/tutorial_island02_evil_revamp/trainers/combat/darg_frostwind015.mp3", "", "", 1380380758, 346612034, Spawn) + AddConversationOption(conversation, "Tell me about selecting the right opponent.", "RightOpponent") + AddConversationOption(conversation, "Teach me about knowing my surroundings.", "KnowSurroundings") + AddConversationOption(conversation, "Tell me about using my abilities.", "UsingAbilities") + AddConversationOption(conversation, "Teach me the basics of combat.", "CombatBasics") + AddConversationOption(conversation, "I'll come back later.") + StartConversation(conversation, NPC, Spawn, "You'll learn many advanced combat techniques over time. There's no substitute for experience," .. GetName(Spawn) .. ". I'd be happy to discuss a few of these advanced aspects, such as selecting the right opponent, knowing your surroundings, and using your abilities.") +end + +function RightOpponent(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/trainer_darg_frostwind/tutorial_island02_evil_revamp/trainers/combat/darg_frostwind016.mp3", "", "", 4103736528, 1424079812, Spawn) + AddConversationOption(conversation, "How do I tell if an opponent is too weak or too strong for me?", "WeakStrongOpponent") + StartConversation(conversation, NPC, Spawn, "Picking the right fight is crucial to victory. A weak opponent won't provide worthwhile rewards, while an overly powerful foe will result in your defeat. You need to keep your resources in mind as well as choosing the right target.") +end + +function WeakStrongOpponent(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/trainer_darg_frostwind/tutorial_island02_evil_revamp/trainers/combat/darg_frostwind017.mp3", "", "", 1757690835, 3459787443, Spawn) + AddConversationOption(conversation, "What resources should I be keeping an eye on?", "WatchResources") + StartConversation(conversation, NPC, Spawn, "Targeting an opponent will show you detailed information on its overall potency. Generally speaking, you'll find the best results from fighting opponents with blue, white, or yellow names. Talk to Trainer Marla Gilliam for more information on evaluating your opponents.") +end + +function WatchResources(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/trainer_darg_frostwind/tutorial_island02_evil_revamp/trainers/combat/darg_frostwind018.mp3", "", "", 3585763044, 1432114558, Spawn) + AddConversationOption(conversation, "Teach me about knowing my surroundings.", "KnowSurroundings") + AddConversationOption(conversation, "Tell me about using my abilities.", "UsingAbilities") + AddConversationOption(conversation, "Teach me the basics of combat.", "CombatBasics") + AddConversationOption(conversation, "I'll come back later.") + StartConversation(conversation, NPC, Spawn, "Starting a fight when you are low on health or power is a very bad idea. Your choice of targets also depends on whether you're alone or grouped with other players. Forming a group allows you to take on tougher and more rewarding challenges than you could face alone.") +end + +function KnowSurroundings(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/trainer_darg_frostwind/tutorial_island02_evil_revamp/trainers/combat/darg_frostwind019.mp3", "", "", 1548792480, 2310924503, Spawn) + AddConversationOption(conversation, "Anything else I should watch out for?", "AnythingElse") + StartConversation(conversation, NPC, Spawn, "Keeping your surroundings in mind is crucial to victory. Fighting in areas with lots of aggressive creatures is a bad idea, because they won't hesitate to gang up on you.") +end + +function AnythingElse(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/trainer_darg_frostwind/tutorial_island02_evil_revamp/trainers/combat/darg_frostwind020.mp3", "", "", 1299871364, 2128759102, Spawn) + AddConversationOption(conversation, "Any other tips?", "OtherTips") + StartConversation(conversation, NPC, Spawn, "Staying too long on the exact spot where you just defeated a foe can be dangerous. Another enemy is likely to show up there soon after, which can be an unpleasant surprise if you're already in another battle.") +end + +function OtherTips(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/trainer_darg_frostwind/tutorial_island02_evil_revamp/trainers/combat/darg_frostwind021.mp3", "", "", 1741681732, 1086303848, Spawn) + AddConversationOption(conversation, "Tell me about selecting the right opponent.", "RightOpponent") + AddConversationOption(conversation, "Tell me about using my abilities.", "UsingAbilities") + AddConversationOption(conversation, "Teach me the basics of combat.", "CombatBasics") + AddConversationOption(conversation, "I'll come back later.") + StartConversation(conversation, NPC, Spawn, "You should be aware of what's going on around you. Using your mouse wheel to scroll into third person and holding down the left mouse button allows you to move the camera around your character. It's a good idea to do this when fighting in dangerous areas to make sure nothing sneaks up on you.") +end + +function UsingAbilities(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/trainer_darg_frostwind/tutorial_island02_evil_revamp/trainers/combat/darg_frostwind022.mp3", "", "", 16477562, 1573877371, Spawn) + AddConversationOption(conversation, "What do you mean?", "ExplainFurther") + StartConversation(conversation, NPC, Spawn, "Successful fighting isn't about turning on your auto-attack and walking away from battle. Your odds of victory are much better if you prepare well and are active during combat. You should be using every spell or combat art that has a positive effect on your chances to win.") +end + +function ExplainFurther(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/trainer_darg_frostwind/tutorial_island02_evil_revamp/trainers/combat/darg_frostwind023.mp3", "", "", 771045837, 1953428673, Spawn) + AddConversationOption(conversation, "What about during battle?", "AbilitiesDuringBattle") + StartConversation(conversation, NPC, Spawn, "Before you begin fighting, make sure you and your allies have activated all beneficial spells, also known as 'buffs', so that you're operating at peak efficiency. Buffs can add health or power, increase your rate of regeneration, enhance your physical attributes, make you attack faster or do more damage, and more.") +end + +function AbilitiesDuringBattle(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/trainer_darg_frostwind/tutorial_island02_evil_revamp/trainers/combat/darg_frostwind024.mp3", "", "", 2163337564, 124850201, Spawn) + AddConversationOption(conversation, "What else should I know about spells and arts?", "MoreSpellsAndArts") + StartConversation(conversation, NPC, Spawn, "Whether you're a front-lines melee type or someone attacking from a distance with weapons or spells, you should be using abilities that damage your foes effectively and efficiently. Right click on your spells and arts and select \"Examine\" to see details on their effects.") +end + +function MoreSpellsAndArts(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/trainer_darg_frostwind/tutorial_island02_evil_revamp/trainers/combat/darg_frostwind025.mp3", "", "", 244808971, 2377115174, Spawn) + AddConversationOption(conversation, "Tell me about selecting the right opponent.", "RightOpponent") + AddConversationOption(conversation, "Teach me about knowing my surroundings.", "KnowSurroundings") + AddConversationOption(conversation, "Teach me the basics of combat.", "CombatBasics") + AddConversationOption(conversation, "I'll come back later.") + StartConversation(conversation, NPC, Spawn, "Using your highest-level versions of spells and arts will be more effective than using older versions. In addition, you should be upgrading your abilities to higher ranks to make them more effective. For more details on spells and combat arts, talk to Trainer Sythor the All-Seeing in the tower at the center of the outpost.") +end + +-- Charles Arker +function CharlesArker(NPC, Spawn) + SetStepComplete(Spawn, 54, 3) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/trainer_darg_frostwind/tutorial_island02_evil_revamp/trainers/combat/darg_frostwind026.mp3", "", "", 582138351, 1217482106, Spawn) + AddConversationOption(conversation, "Thank you.") + StartConversation(conversation, NPC, Spawn, "I've trained the greatest champions on this island. I've never heard of anyone by that name.") +end diff --git a/server/SpawnScripts/OutpostOverlord/TrainerJaylaSurfrider.lua b/server/SpawnScripts/OutpostOverlord/TrainerJaylaSurfrider.lua new file mode 100644 index 000000000..ed38b271f --- /dev/null +++ b/server/SpawnScripts/OutpostOverlord/TrainerJaylaSurfrider.lua @@ -0,0 +1,122 @@ +--[[ + Script Name : SpawnScripts/OutpostOverlord/TrainerJaylaSurfrider.lua + Script Purpose : Trainer Jayla Surfrider + Script Author : John Adams + Script Date : 2008.09.23 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +function spawn(NPC) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + choice = math.random(1,3) + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_" .. choice .. "_1021.mp3", "", "", 0, 0, Spawn) + + if HasQuest(Spawn, 54) and GetQuestStep(Spawn, 54) == 2 then + AddConversationOption(conversation, "Do you know a man called Charles Arker?", "dlg_37_1") + end + + AddConversationOption(conversation, "What can cause my death? ", "dlg_3_1") + AddConversationOption(conversation, "I prefer to talk about this another time.") + StartConversation(conversation, NPC, Spawn, "Even the mightiest hero of the Overlord will meet an untimely end on occasion. Let me teach you the consequences of death and how you can recover properly.") +end + +function dlg_3_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "How will I know when I'm going to die?", "dlg_3_2") + StartConversation(conversation, NPC, Spawn, "Death can come in many ways: being bested on the field of battle, falling from great heights, drowning in water, falling into lava, standing too close to an exploding chest, and so on. It's a dangerous world out there, XXXXX.") +end + +function dlg_3_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "Why green?", "dlg_3_3") + StartConversation(conversation, NPC, Spawn, "Just keep an eye on your health bar, the green line located beneath your name in the upper left of your screen. At least...you hope it's green.") +end + +function dlg_3_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "What happens then?", "dlg_3_4") + AddConversationOption(conversation, "You're a morbid person. I'll come back later.") + StartConversation(conversation, NPC, Spawn, "Green means you're healthy. As your health diminishes, the bar turns yellow, then orange, and finally red. If the bar is empty, you die. You pay the debt which cancels all others, if you get my meaning.") +end + +function dlg_3_4(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "So death is not the end?", "dlg_3_5") + StartConversation(conversation, NPC, Spawn, "Your spirit lays trapped in your fallen body, unable to move. At this point, you have a choice: wait for a nearby ally to revive you, or choose a location from the window in the center of your screen at which to reappear. In some cases you'll have a single choice, in others multiple choices.") +end + +function dlg_3_5(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "What are the consequences?", "dlg_3_6") + StartConversation(conversation, NPC, Spawn, "Fortunately for all of us, death in Norrath is a temporary thing. If another adventurer revives you, you reappear at the spot of your death. If you choose a location to revive, you will appear at that spot. There are consequences to death, however.") +end + +function dlg_3_6(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "What is experience debt?", "dlg_3_7") + AddConversationOption(conversation, "I think I've learned enough for now. Cheer up!") + StartConversation(conversation, NPC, Spawn, "There are three results of death. First, you incur some experience debt which can be paid off by earning more" .. GetName(Spawn) .. ". Second, you suffer a revive sickness that lowers your abilities for a short time, which leaves you temporarily vulnerable and less effective. Finally, all your equipped items take damage that will eventually have to be repaired.") +end + +function dlg_3_7(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "What is revive sickness like?", "dlg_3_8") + StartConversation(conversation, NPC, Spawn, "Experience debt is indicated by a red line on your" .. GetName(Spawn) .. ". bar. As you earn experience going forward, part of your" .. GetName(Spawn) .. ". will go toward paying off your debt while the rest will continue to advance you toward your next level. Mousing over your" .. GetName(Spawn) .. ". bar also tells how much debt you have.") +end + +function dlg_3_8(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "What are the results of item damage?", "dlg_3_9") + StartConversation(conversation, NPC, Spawn, "You'll see an icon for revive sickness in your spell effects window. Mousing over the icon will tell you how long it will remain. The type of sickness you have depends on how you were revived, but no matter what there will be a negative effect. Don't worry, it passes soon enough.") +end + +function dlg_3_9(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "What can I do about item damage?", "dlg_3_10") + StartConversation(conversation, NPC, Spawn, "Your equipped items usually take about 10% wear with each death. When they are down to zero durability, you no longer receive any benefit from them. Don't let your equipment ever get into such poor condition, XXXXX!") +end + +function dlg_3_10(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "Thank you for your enlightening yet depressing advice.") + StartConversation(conversation, NPC, Spawn, "You will need to see a mender, someone who is able to repair your items back to 100% durability. Speak to Trainer Vissa Sathliss to learn more about repairing your gear. Should your equipment take damage here at the outpost, Mender Greshar at the forge can make repairs for you.") +end + +-- Charles Arker quest from Field Investigator +function dlg_37_1(NPC, Spawn) + SetStepComplete(Spawn, 54, 2) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "Not yet. Thank you, though.") + StartConversation(conversation, NPC, Spawn, "Sorry, never heard of him. Did he die recently?") +end diff --git a/server/SpawnScripts/OutpostOverlord/TrainerKashaYitski.lua b/server/SpawnScripts/OutpostOverlord/TrainerKashaYitski.lua new file mode 100644 index 000000000..6fd6a899d --- /dev/null +++ b/server/SpawnScripts/OutpostOverlord/TrainerKashaYitski.lua @@ -0,0 +1,159 @@ +--[[ + Script Name : SpawnScripts/OutpostOverlord/TrainerKashaYitski.lua + Script Purpose : Trainer Kasha Yitski + Script Author : John Adams + Script Date : 2008.09.23 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +function spawn(NPC) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_1_1031.mp3", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "What are Heroic Opportunities?", "dlg_18_1") + AddConversationOption(conversation, "I will seek your knowledge another time.") + StartConversation(conversation, NPC, Spawn, "Come closer, adventurer. Ah yes, I can see it in your eyes: the desire to best your foes in glorious battle! Well, lucky for you I have knowledge that can aid you in your quest. If you pay close attention, I can teach you how to use a powerful technique called Heroic Opportunities.") +end + +function dlg_18_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "Are Heroic Opportunities complicated?", "dlg_18_2") + AddConversationOption(conversation, "I will seek your knowledge another time.") + StartConversation(conversation, NPC, Spawn, "Beginning at level 5, Heroic Opportunities can be triggered in combat. They allow both lone adventurers and groups of allies to combine their attacks into a series of spells or combat arts performed in a specific order. When successful, Heroic Opportunities give beneficial effects such as extra attacks against your foes or beneficial magic to heal or enhance your abilities.") +end + +function dlg_18_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "So how does a Heroic Opportunity arise?", "dlg_18_3") + AddConversationOption(conversation, "I will seek your knowledge another time.") + StartConversation(conversation, NPC, Spawn, "Rest assured, someone of your considerable skills in battle will find them easy! Once you start using them, you'll wonder how you ever got along without them.") +end + +function dlg_18_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "Okay, that does sound easy. How do I begin a Heroic Opportunity?", "dlg_18_4") + AddConversationOption(conversation, "I will seek your knowledge another time.") + StartConversation(conversation, NPC, Spawn, "Let me tell you the short and simple version first so that you can see how easy Heroic Opportunities are to use. All you need to do is use your ability that triggers the Heroic Opportunity, then use the spells or combat arts that are blinking on your hotbar or in your Knowledge Book. Easy, isn't it?") +end + +function dlg_18_4(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "Can I trigger a Starter Chain whenever I want?", "dlg_18_5") + AddConversationOption(conversation, "I will seek your knowledge another time.") + StartConversation(conversation, NPC, Spawn, "Heroic Opportunities have two parts called the Starter Chain and the Combat Wheel. At level 5, every adventure class gains an ability that triggers a Starter Chain: Fighting Chance, Divine Providence, Arcane Augur, or Lucky Break. Open your Knowledge Book by pressing K and click the Abilities tab to see it. You can drag its icon to your hotbar to use it.") +end + +function dlg_18_5(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "What happens when I trigger a Starter Chain?", "dlg_18_6") + AddConversationOption(conversation, "I will seek your knowledge another time.") + StartConversation(conversation, NPC, Spawn, "Starter Chains can only be triggered while in battle with an enemy. After all, Heroic Opportunities are all about becoming great in combat! When you or an ally triggers a Starter Chain, you will see it appear in the corner of your screen.") +end + +function dlg_18_6(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "Are Heroic Opportunities only usable in groups?", "dlg_18_7") + AddConversationOption(conversation, "I will seek your knowledge another time.") + StartConversation(conversation, NPC, Spawn, "Once a Starter Chain is initiated, it shows different ability icons flashing on the screen. A Starter Chain will generally display four different icons that indicate which spells or combat arts advance the Heroic Opportunity to the next stage. Icons will be blue, yellow, red, or green, depending on which class has the ability.") +end + +function dlg_18_7(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "How do I know what I should do to advance the Starter Chain?", "dlg_18_8") + AddConversationOption(conversation, "I will seek your knowledge another time.") + StartConversation(conversation, NPC, Spawn, "Heroic Opportunities can be used alone or in groups. If you fight alone you will have a limited number of ways to advance the Starter Chain, but if you are in a group made up of different classes then you will be able to advance the Starter Chain in different ways to unleash a variety of Heroic Opportunities.") +end + +function dlg_18_8(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "Use the spell or art that is blinking. That's all there is to it?", "dlg_18_9") + AddConversationOption(conversation, "I will seek your knowledge another time.") + StartConversation(conversation, NPC, Spawn, "Any spells or combat arts that can advance the Heroic Opportunity will flash on your hotbar and in your Knowledge Book. You have 10 seconds to complete the Starter Chain and advance to the Combat Wheel. See, it's easy: just use the spell or art that blinks!") +end + +function dlg_18_9(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "Why does it trigger one of three?", "dlg_18_10") + AddConversationOption(conversation, "I will seek your knowledge another time.") + StartConversation(conversation, NPC, Spawn, "It's quite simple. After you've advanced the Starter Chain, the bright and colorful Combat Wheel appears. The Combat Wheel shows a series of icons and displays the name of the Heroic Opportunity you have triggered. A Starter Chain will initiate one of three different Heroic Opportunities.") +end + +function dlg_18_10(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "What does the Combat Wheel tell me?", "dlg_18_11") + AddConversationOption(conversation, "I will seek your knowledge another time.") + StartConversation(conversation, NPC, Spawn, "There are three potential Heroic Opportunities: common, uncommon, and rare. Each provides a different benefit. Though even the common ones are valuable, the rare event can sometimes turn the tide of battle in your favor!") +end + +function dlg_18_11(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "How can I tell the difference?", "dlg_18_12") + AddConversationOption(conversation, "I will seek your knowledge another time.") + StartConversation(conversation, NPC, Spawn, "As with the Starter Chain, the Combat Wheel indicates which spells or arts must be performed to advance and eventually complete the heroic event. Sometimes these spells or abilities must be performed in a particular order. Other times there is no order.") +end + +function dlg_18_12(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "How long do I have to complete the Heroic Opportunity?", "dlg_18_13") + AddConversationOption(conversation, "I will seek your knowledge another time.") + StartConversation(conversation, NPC, Spawn, "In the very center of the Wheel, you'll see either a clockwise-pointing arrow or arrows pointing in different directions. The clockwise arrow indicates that the abilities must be completed in order. The other types of arrows mean that the abilities can be completed in any order.") +end + +function dlg_18_13(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "That sounds easy!", "dlg_18_14") + AddConversationOption(conversation, "I will seek your knowledge another time.") + StartConversation(conversation, NPC, Spawn, "The Combat Wheel must be completed within 10 seconds or the Opportunity will fail. The blue bar that appears around the outside of the Wheel is a timer. When the blue bar is gone, this indicates that time has run out to complete the Heroic Opportunity.") +end + +function dlg_18_14(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "Any other tricks I should know?", "dlg_18_15") + AddConversationOption(conversation, "I will seek your knowledge another time.") + StartConversation(conversation, NPC, Spawn, "It really is! As you become more familiar with using Heroic Opportunities, you can take note of the members of your group and plan out ahead of time which Opportunities will provide you the greatest benefit.") +end + +function dlg_18_15(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "Thank you for the information. I'll try Heroic Opportunities in my next battle!") + StartConversation(conversation, NPC, Spawn, "Scout classes have a little something extra. By using their Coin icon, the Scout can shift to another Heroic Opportunity. This shift can only happen once per Combat Wheel. This ability must also be used before any other spell or combat art has been used to advance the Wheel.") +end + diff --git a/server/SpawnScripts/OutpostOverlord/TrainerNoggDreadscar.lua b/server/SpawnScripts/OutpostOverlord/TrainerNoggDreadscar.lua new file mode 100644 index 000000000..89f6d4410 --- /dev/null +++ b/server/SpawnScripts/OutpostOverlord/TrainerNoggDreadscar.lua @@ -0,0 +1,109 @@ +--[[ + Script Name : SpawnScripts/OutpostOverlord/TrainerNoggDreadscar.lua + Script Purpose : Trainer Nogg Dreadscar + Script Author : John Adams + Script Date : 2008.09.23 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +function spawn(NPC) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/trainer_nogg_dreadscar/tutorial_island02_evil_revamp/trainers/attributes/nogg_dreadscar001.mp3", "", "", 1345962966, 10192429, Spawn) + + if HasQuest(Spawn, 54) and GetQuestStep(Spawn, 54) == 1 then + AddConversationOption(conversation, "What do you know about Charles Arker?", "dlg_36_1") + end + + AddConversationOption(conversation, "Tell me what my physical attributes do.", "PhysicalAttributes") + AddConversationOption(conversation, "How do I view my physical attributes?.", "ShowAttributes") + AddConversationOption(conversation, "How do I improve my physical attributes?", "ImproveAttributes") + AddConversationOption(conversation, "I will ask you about this later.") + StartConversation(conversation, NPC, Spawn, "Well met, " .. GetName(Spawn) .. ". The Overlord demands that his subjects maintain a healthy body and a keen mind. He has charged me with training new recruits about your physical attributes: Strength, Agility, Stamina, Intelligence, and Wisdom.") +end + +function PhysicalAttributes(NPC, Spawn) + conversation = CreateConversation() + AddConversationOption(conversation, "Tell me about Agility", "AgilityAttribute") + AddConversationOption(conversation, "How do I view my physical attributes?.", "ShowAttributes") + AddConversationOption(conversation, "How do I improve my physical attributes?", "ImproveAttributes") + AddConversationOption(conversation, "Thanks for the information.") + StartConversation(conversation, NPC, Spawn, "Strength determines how much weight you can carry. The more Strength you have, the more physical damage you can do in melee combat. Strength also determines the maximum amount of power Guardians, Berserkers, Monks and Paladins have.") +end + +function ShowAttributes(NPC, Spawn) + conversation = CreateConversation() + AddConversationOption(conversation, "Tell me what my physical attributes do.", "PhysicalAttributes") + AddConversationOption(conversation, "How do I improve my physical attributes?", "ImproveAttributes") + AddConversationOption(conversation, "Thanks for the information.") + StartConversation(conversation, NPC, Spawn, "You can see your physical attributes, as well as other important aspects of your character in your persona window. Just press the P key to open your persona window.") +end + +function ImproveAttributes(NPC, Spawn) + conversation = CreateConversation() + AddConversationOption(conversation, "Are there other ways?", "OtherWays") +AddConversationOption(conversation, "Thank you for the information.") + StartConversation(conversation, NPC, Spawn, "Your physical attributes, as well as other aspects of your character, can be improved in a number of ways. Many items add points to your attributes, resistances, Health or Power. Hold your mouse pointer over your items to see what benefits they provide.") +end + +function OtherWays(NPC, Spawn) + conversation = CreateConversation() + AddConversationOption(conversation, "Tell me what my physical attributes do.", "PhysicalAttributes") + AddConversationOption(conversation, "How do I view my physical attributes?.", "ShowAttributes") + AddConversationOption(conversation, "I will ask you about this later.") + StartConversation(conversation, NPC, Spawn, "Many spells and combat arts enhance your attributes. Some of these can be cast on yourself, while others can improve other player characters that you group with. Grouping with other classes provides a wider variety of ways to improve your attributes.") +end + +function AgilityAttribute(NPC, Spawn) + conversation = CreateConversation() + AddConversationOption(conversation, "Tell me about Stamina", "StaminaAttribute") + AddConversationOption(conversation, "How do I view my physical attributes?.", "ShowAttributes") + AddConversationOption(conversation, "How do I improve my physical attributes?", "ImproveAttributes") + AddConversationOption(conversation, "Thank you for the information.") + StartConversation(conversation, NPC, Spawn, "Agility helps you avoid physical attacks. The more Agility you have, the higher your Avoidance ability. Agility also determines the maximum amount of power Swashbucklers, Rangers, Troubadors, and Dirges have.") +end + +function StaminaAttribute(NPC, Spawn) + conversation = CreateConversation() + AddConversationOption(conversation, "Tell me about Intelligence", "IntelligenceAttribute") + AddConversationOption(conversation, "How do I view my physical attributes?.", "ShowAttributes") + AddConversationOption(conversation, "How do I improve my physical attributes?", "ImproveAttributes") + AddConversationOption(conversation, "Thank you for the information.") + StartConversation(conversation, NPC, Spawn, "Stamina gives you more Health points. The more Health you have, the longer you can survive in battle. Stamina is a useful attribute for every class.") +end + +function IntelligenceAttribute(NPC, Spawn) + conversation = CreateConversation() + AddConversationOption(conversation, "Tell me about Wisdom", "WisdomAttribute") + AddConversationOption(conversation, "How do I view my physical attributes?.", "ShowAttributes") + AddConversationOption(conversation, "How do I improve my physical attributes?", "ImproveAttributes") + AddConversationOption(conversation, "Thank you for the information.") + StartConversation(conversation, NPC, Spawn, "Intelligence is more than just a sign of how smart you are. The more Intelligence you have, the more damage you do with spells in combat. Intelligence also determines the maximum amount of power Wizards, Warlocks, Illusionists, Conjurors, Troubadors, and Dirges have.") +end + +function WisdomAttribute(NPC, Spawn) + conversation = CreateConversation() + AddConversationOption(conversation, "How do I view my physical attributes?.", "ShowAttributes") + AddConversationOption(conversation, "How do I improve my physical attributes?", "ImproveAttributes") + AddConversationOption(conversation, "Thank you for the information.") + StartConversation(conversation, NPC, Spawn, "Wisdom increases your resistances to magical types of attacks: Heat, Cold, Disease, Poison, Magic, Mental and Divine. Wisdom also determines the maximum amount of power Templars, Mystics, Furies, Wardens, and Paladins have.") +end + + +function dlg_36_1(NPC, Spawn) + SetStepComplete(Spawn, 54, 1) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "Thanks for letting me know.", "dlg_36_2") + StartConversation(conversation, NPC, Spawn, "Charles Barker? Larker? Jarker? Nope, never heard of him.") +end + diff --git a/server/SpawnScripts/OutpostOverlord/TrainerSythortheAllSeeing.lua b/server/SpawnScripts/OutpostOverlord/TrainerSythortheAllSeeing.lua new file mode 100644 index 000000000..9d6115cd6 --- /dev/null +++ b/server/SpawnScripts/OutpostOverlord/TrainerSythortheAllSeeing.lua @@ -0,0 +1,144 @@ +--[[ + Spawn Template + Script Name: Trainer Sythor the All-Seeing.lua + Script Purpose: Combat Arts, Spells, and Abilities training + Script Author: John Adams + Script Date: 2008.09.06 + Script Notes: Auto-Generated Conversation from PacketParser Data +--]] + +function spawn(NPC) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + choice = math.random(1,3) + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_" .. choice .. "_1004.mp3", "", "", 0, 0, Spawn) + + AddConversationOption(conversation, "Let us begin.", "Begin") + AddConversationOption(conversation, "I will return for instruction later.") + StartConversation(conversation, NPC, Spawn, "Welcome to the service of the Overlord. Our great leader has sent me here to explain something very important: how your Spells, Combat Arts, and Abilities work, as well as how to improve them. Listen and learn from the mighty Sythor the All-Seeing!") +end + +function Begin(NPC, Spawn) + conversation = CreateConversation() + AddConversationOption(conversation, "Tell me about Spells.", "AboutSpells") + AddConversationOption(conversation, "Tell me about Combat Arts.", "AboutCombatArts") + AddConversationOption(conversation, "Tell me about Abilities.", "AboutAbilities") + AddConversationOption(conversation, "Where do I find my Spells, Combat Arts, and Abilities?", "Find") + AddConversationOption(conversation, "How do I obtain and improve my Spells and Combat Arts?", "Improve") + AddConversationOption(conversation, "I will return for instruction later.") + StartConversation(conversation, NPC, Spawn, "I am here to share my vast knowledge. What can I help you with?") +end + +function AboutSpells(NPC, Spawn) + conversation = CreateConversation() + AddConversationOption(conversation, "Who uses Spells?", "UsesSpells") + AddConversationOption(conversation, "I will return for instruction later.") + StartConversation(conversation, NPC, Spawn, "A Spell is a magical ability. Spells can have a variety of uses. Some allow you to damage an enemy, while others might provide benefits to yourself or an ally. You can hold your mouse pointer over a Spell's icon to see a description of what it does, or right-click on it and select 'Examine.'") +end + +function UsesSpells(NPC, Spawn) + conversation = CreateConversation() + AddConversationOption(conversation, "I have more questions.", "Begin") + AddConversationOption(conversation, "I will return for instruction later.") + StartConversation(conversation, NPC, Spawn, "Mages, priests, paladins, shadowknights, troubadors, and dirges all cast Spells. Each class has a list of Spells that is unique. While other classes may have similar Spells, no one has capabilities exactly like that of another class. Also, certain magical items may be imbued with Spell effects that can be cast or that activate on their own.") +end + +function AboutCombatArts(NPC, Spawn) + conversation = CreateConversation() + AddConversationOption(conversation, "Who uses Combat Arts?", "UsesCombatArts") + AddConversationOption(conversation, "I will return for instruction later.") + StartConversation(conversation, NPC, Spawn, "Combat Arts are a lot like Spells, but they usually take less time to cast and cannot be interrupted. As their name implies, many Combat Arts focus on some aspect of battle.") +end + +function UsesCombatArts(NPC, Spawn) + conversation = CreateConversation() + AddConversationOption(conversation, "I have more questions.", "Begin") + AddConversationOption(conversation, "I will return for instruction later.") + StartConversation(conversation, NPC, Spawn, "All fighters and scouts use Combat Arts. Each of these classes has unique Combat Arts that help distinguish them from other classes. Combat Arts have names and effects that fit the class that uses them.") +end + +function AboutAbilities(NPC, Spawn) + conversation = CreateConversation() + AddConversationOption(conversation, "How are Abilities different from Spells and Combat Arts?", "Abilities") + AddConversationOption(conversation, "I will return for instruction later.") + StartConversation(conversation, NPC, Spawn, "Abilities are general things your character can do, along with certain capabilities specific to your race. Some of your Abilities are extremely useful, such as Sprint, which allows you to run very fast for a short period of time. You can also Call for Help when you are in danger, or launch a Ranged Attack if you have a ranged weapon and ammo.") +end + + +function Abilities(NPC, Spawn) + conversation = CreateConversation() + AddConversationOption(conversation, "I have more questions.", "Begin") + AddConversationOption(conversation, "I will return for instruction later.") + StartConversation(conversation, NPC, Spawn, "Unlike Spells and Combat Arts, Abilities cannot be upgraded. Most of your Abilities are received when you first enter the world, although certain new ones can be granted as you become more experienced.") +end + +function Find(NPC, Spawn) + conversation = CreateConversation() + AddConversationOption(conversation, "How do I use my Spells, Combat Arts, and Abilities?", "UseKnowledge") + AddConversationOption(conversation, "I will return for instruction later.") + StartConversation(conversation, NPC, Spawn, "All your Spells and Combat Arts, as well as other Abilities, are found in your Knowledge Book. Press the K key to open it at any time, and click the name of the tab you wish to view: Abilities, Spells, or Combat Arts.") +end + +function UseKnowledge(NPC, Spawn) + conversation = CreateConversation() + AddConversationOption(conversation, "I have more questions.", "Begin") + AddConversationOption(conversation, "I will return for instruction later.") + StartConversation(conversation, NPC, Spawn, "To use a Spell, Combat Art, or Ability, drag its icon from your Knowledge Book onto your hotbar. Some have already been placed there for you. To use one, simply click its icon on your hotbar or press the key assigned to it. You can open additional hotbars by right-clicking on a hotbar and selecting 'Open New Hotbar'.") +end + +function Improve(NPC, Spawn) + conversation = CreateConversation() + AddConversationOption(conversation, "How can I judge the effectiveness of my spells and Combat Arts?", "Ranks") + AddConversationOption(conversation, "I'll return for training later.") + StartConversation(conversation, NPC, Spawn, "Most of your Spells or Combat Arts are given to you as you advance in levels from 1 to 50. Certain special Spells or Combat Arts can be obtained by doing quests. Once you are level 51 and higher, you must find ways to purchase or obtain your new Spells and Combat Arts.") +end + +function Ranks(NPC, Spawn) + conversation = CreateConversation() + AddConversationOption(conversation, "How can I improve my Spells and Combat Arts?", "Upgrades") + AddConversationOption(conversation, "I will return for instruction later.") + StartConversation(conversation, NPC, Spawn, "There are three main ranks of Spells and Combat Arts: Apprentice, Adept, and Master. Within each rank are up to four tiers of quality. Spells and Combat Arts that are automatically granted to you are usually given at the Apprentice I rank. You should always try to have the highest rank of your Spells and Combat Arts, because they gain effectiveness as you improve them.") +end + +function Upgrades(NPC, Spawn) + conversation = CreateConversation() + AddConversationOption(conversation, "What about other ranks of Spells and Arts?", "OtherRanks") + AddConversationOption(conversation, "I will return for instruction later.") + StartConversation(conversation, NPC, Spawn, "You can buy Apprentice II versions of spells or combat arts here in the tower. Just purchase them from the appropriate merchant. When you arrive in Freeport, you will find a Class Trainer that sells Apprentice II versions of your Spells or Combat Arts.") +end + +function OtherRanks(NPC, Spawn) + conversation = CreateConversation() + AddConversationOption(conversation, "Are there other ways to improve my Spells and Combat Arts?", "OtherWaysToImprove") + AddConversationOption(conversation, "I will return for instruction later.") + StartConversation(conversation, NPC, Spawn, "You will also find more potent ranks of spells as you defeat opponents in battle. Many enemies will carry Adept I versions of Spells and Combat Arts, while conquering some extremely powerful foes may result in the extremely rare Master I versions.") +end + +function OtherWaysToImprove(NPC, Spawn) + conversation = CreateConversation() + AddConversationOption(conversation, "Are all my Spells and Combat Arts unique?", "Unique") + AddConversationOption(conversation, "I will return for instruction later.") + StartConversation(conversation, NPC, Spawn, "In addition, certain crafters can make upgrades to your Spells and Combat Arts using harvested components. They can create Apprentice IV quality spells, as well as valuable Adept III scrolls using rare components. Buying from or trading with other players is an excellent way to upgrade your Spells and Combat Arts.") +end + +function Unique(NPC, Spawn) + conversation = CreateConversation() + AddConversationOption(conversation, "How can I keep all these Spells and Arts stright in my Knowledge Book?", "SortKnowledge") + AddConversationOption(conversation, "I will return for instruction later.") + StartConversation(conversation, NPC, Spawn, "As you advance in level, you will obtain many completely new abilities as well as more effective versions of Spells or Combat Arts you have already learned. The names and icons of these upgrades are often similar, but the newer versions are more effective. Again, you will want to obtain the highest rank of these new abilities that you can.") +end + +function SortKnowledge(NPC, Spawn) + conversation = CreateConversation() + AddConversationOption(conversation, "I have more questions.", "Begin") + AddConversationOption(conversation, "I will return for instruction later.") + StartConversation(conversation, NPC, Spawn, "Your Spells and Combat Arts can easily be organized according to your personal taste. Just open your Knowledge Book and click the 'Sort' button in the upper right corner. This allows you to organize your Spells and Arts for easy access to the abilities you wish to use.") +end \ No newline at end of file diff --git a/server/SpawnScripts/OutpostOverlord/TrainerVellaNDur.lua b/server/SpawnScripts/OutpostOverlord/TrainerVellaNDur.lua new file mode 100644 index 000000000..80c0df86c --- /dev/null +++ b/server/SpawnScripts/OutpostOverlord/TrainerVellaNDur.lua @@ -0,0 +1,117 @@ +--[[ + Script Name : SpawnScripts/OutpostOverlord/TrainerVellaNDur.lua + Script Purpose : Trainer Vella N'Dur + Script Author : John Adams + Script Date : 2008.09.23 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +function spawn(NPC) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_2_1007.mp3", "", "", 0, 0, Spawn) + + if HasQuest(Spawn, 54) and GetQuestStep(Spawn, 54) == 6 then + AddConversationOption(conversation, "Do you know someone named Charles Arker?", "dlg_41_1") + end + + AddConversationOption(conversation, "I'd like to learn about collections.", "dlg_0_1") + AddConversationOption(conversation, "I'd like to learn about harvesting.", "dlg_0_4") + AddConversationOption(conversation, "I've no time to chat right now.") + StartConversation(conversation, NPC, Spawn, "Come closer if you want me to answer any questions you have about collections or harvesting!") + + + if convo==7 then + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_1_1007.mp3", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "I'd like to learn about collections.", "dlg_7_1") + AddConversationOption(conversation, "I'd like to learn about harvesting.") + AddConversationOption(conversation, "I've no time to chat right now.") + StartConversation(conversation, NPC, Spawn, "Come closer if you want me to answer any questions you have about collections or harvesting!") + end + + if convo==41 then + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_1_1007.mp3", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "I'd like to learn about collections.") + AddConversationOption(conversation, "I'd like to learn about harvesting.") + AddConversationOption(conversation, "I've no time to chat right now.") + StartConversation(conversation, NPC, Spawn, "Come closer if you want me to answer any questions you have about collections or harvesting!") + end + + if convo==44 then + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_2_1007.mp3", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Do you know someone named Charles Arker?", "dlg_44_1") + AddConversationOption(conversation, "I'd like to learn about collections.") + AddConversationOption(conversation, "I'd like to learn about harvesting.") + AddConversationOption(conversation, "I've no time to chat right now.") + StartConversation(conversation, NPC, Spawn, "Come closer if you want me to answer any questions you have about collections or harvesting!") + end + +end + +function dlg_0_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "What happens next?", "dlg_0_2") + StartConversation(conversation, NPC, Spawn, "Collectibles are seen as a glow rising from the ground. If you're close enough, you'll notice a question mark above it. Double-click or right-click the glow and select Harvest. The item you gather will go into your inventory. You can examine this item in your inventory.") +end + +function dlg_0_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "How do I complete the collection?", "dlg_0_3") + StartConversation(conversation, NPC, Spawn, "Your quest journal will open up automatically to the Collections tab. Use the Add button to add that item to a collection. As you travel through Norrath, you'll find different collectibles in different areas of the world. Some items can be part of more than one collection.") +end + +function dlg_0_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "I'd like to learn about harvesting and gathering now.", "dlg_0_4") + AddConversationOption(conversation, "Thanks for the information.") + StartConversation(conversation, NPC, Spawn, "Continue to gather and examine all the items you find until all the icons of that collection are highlighted in your quest journal. Then you'll be able to turn the completed collection in to a collector who will reward you with some experience. If you already have a collectible in all collections that call for it, you can sell it to a merchant or trade it to another player.") +end + +function dlg_0_4(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "What are harvestables used for?", "dlg_0_5") + StartConversation(conversation, NPC, Spawn, "Harvestables come in five forms, each tied to its own respective skill. These skills can be seen by opening your Skills window by pressing the P key, clicking on the Skills tab and selecting your General skills. Rocks increase mining, logs increase foresting, dens increase trapping, fish increase fishing, and plants increase gathering.") +end + +function dlg_0_5(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "Why do I need to increase my harvesting skills?", "dlg_0_6") + StartConversation(conversation, NPC, Spawn, "The items found through harvesting are the basic building blocks of tradeskills. They cannot be sold to vendors, but they can be traded or sold to other players who need them for their respective tradeskill professions. Some components that can be found through harvesting are very rare and can be worth quite a bit of money to tradeskillers.") +end + +function dlg_0_6(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "I'd like to learn about collections now.", "dlg_0_1") + AddConversationOption(conversation, "Thanks for the information.") + StartConversation(conversation, NPC, Spawn, "The skill required to harvest in a given area increases along with the difficulty of the area. If you find that you are unable to harvest in an area you should return to a less difficult area and practice.") +end + +-- charles Arker +function dlg_41_1(NPC, Spawn) + SetStepComplete(Spawn, 54, 6) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "Thank you, Vella.") + StartConversation(conversation, NPC, Spawn, "Sorry, but I can't say that I know this person.") +end \ No newline at end of file diff --git a/server/SpawnScripts/OutpostOverlord/TrainerVissaSathliss.lua b/server/SpawnScripts/OutpostOverlord/TrainerVissaSathliss.lua new file mode 100644 index 000000000..34cfe71a2 --- /dev/null +++ b/server/SpawnScripts/OutpostOverlord/TrainerVissaSathliss.lua @@ -0,0 +1,82 @@ +--[[ + Script Name : SpawnScripts/OutpostOverlord/TrainerVissaSathliss.lua + Script Purpose : Trainer Vissa Sathliss + Script Author : John Adams + Script Date : 2008.09.23 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +function spawn(NPC) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/trainer_vissa_sathliss/tutorial_island02_evil_revamp/trainers/mending_banking/vissa_sathliss001.mp3", "", "", 3749329714, 942115959, Spawn) + AddConversationOption(conversation, "Tell me about banking.", "dlg_1_1") + AddConversationOption(conversation, "Tell me about mending items.", "dlg_1_6") + AddConversationOption(conversation, "I'll return for training later.") + StartConversation(conversation, NPC, Spawn, "I am here to tell you all about mending and banking! Banking and mending! Which do you want to hear about?") +end + +function dlg_1_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/trainer_vissa_sathliss/tutorial_island02_evil_revamp/trainers/mending_banking/vissa_sathliss002.mp3", "", "", 1416455798, 3801139838, Spawn) + AddConversationOption(conversation, "How do I open my bank?", "dlg_1_2") + StartConversation(conversation, NPC, Spawn, "You already have an account with the Freeport Exchange, and luckily for you we have a branch right here in the outpost. Go see Banker Whizratchet to access your account. Additional branches can be found in your home district when you reach the city, as well as other parts of Freeport. You cannot access your bank from Qeynos.") +end + +function dlg_1_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/trainer_vissa_sathliss/tutorial_island02_evil_revamp/trainers/mending_banking/vissa_sathliss003.mp3", "", "", 3699958078, 292875506, Spawn) + AddConversationOption(conversation, "How do I make deposits and withdrawals?", "dlg_1_3") + AddConversationOption(conversation, "I'll return for training later.") + StartConversation(conversation, NPC, Spawn, "Inside the bank, your mouse pointer will turn into a dial icon when hovered over a banker. Just click on the banker to open your bank window. You'll see twelve general slots and eight 'shared' slots. You can put bags or containers in your bank to increase the number of available slots.") +end + +function dlg_1_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/trainer_vissa_sathliss/tutorial_island02_evil_revamp/trainers/mending_banking/vissa_sathliss004.mp3", "", "", 2521528483, 3790132847, Spawn) + AddConversationOption(conversation, "What are 'shared' bank slots?", "dlg_1_4") + StartConversation(conversation, NPC, Spawn, "Coins and items can be dragged from your inventory to the bank window. To drag one item from a stack, hold down the Ctrl key as you drag it. To drag a certain number of coins or items, hold down the Shift key and drag, then enter the quantity.") +end + +function dlg_1_4(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/trainer_vissa_sathliss/tutorial_island02_evil_revamp/trainers/mending_banking/vissa_sathliss005.mp3", "", "", 3405989423, 121335076, Spawn) + AddConversationOption(conversation, "Any other banking facts I should know?", "dlg_1_5") + StartConversation(conversation, NPC, Spawn, "Items (but not coins) placed in your shared slots can be accessed by other characters on your account that are also citizens of Freeport. Lore and No-Trade items cannot be put into the shared slots. Characters that are Qeynos citizens cannot access a Freeport bank.") +end + +function dlg_1_5(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/trainer_vissa_sathliss/tutorial_island02_evil_revamp/trainers/mending_banking/vissa_sathliss006.mp3", "", "", 231285175, 3337306547, Spawn) + AddConversationOption(conversation, "I want to learn about mending items.", "dlg_1_6") + AddConversationOption(conversation, "I'll return for training later.") + StartConversation(conversation, NPC, Spawn, "If you choose to join a guild made up of your fellow players one day, you can access your guild bank by right-clicking on a banker and selecting 'Guild Bank.'") +end + +function dlg_1_6(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "Tell me about banking.", "dlg_1_1") + AddConversationOption(conversation, "I'll return for training later.") + StartConversation(conversation, NPC, Spawn, "Your weapons and armor wear down when you die during combat. When they are down to zero durability, you will no longer receive any benefit from them. You can visit a mender to get them repaired, such as Mender Greshar at the outpost forge. Speak to Trainer Jayla Surfrider if you wish to learn more about the effects of death.") +end + diff --git a/server/SpawnScripts/OutpostOverlord/Vim.lua b/server/SpawnScripts/OutpostOverlord/Vim.lua new file mode 100644 index 000000000..7d068f1a3 --- /dev/null +++ b/server/SpawnScripts/OutpostOverlord/Vim.lua @@ -0,0 +1,46 @@ +--[[ + Script Name : SpawnScripts/OutpostOverlord/Vim.lua + Script Author : Cynnar + Script Date : 2018.10.14 09:10:43 + Script Purpose : + : +--]] + +--[[ + Script Name : SpawnScripts/OutpostoftheOverlord/Vim.lua + Script Purpose : Vim + Script Author : Cynnar + Script Date : 2018.10.14 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +function spawn(NPC) + SetPlayerProximityFunction(NPC, 10, "InRange", "LeaveRange") +end + +function respawn(NPC) + spawn(NPC) +end + +function InRange(NPC, Spawn) +end + +function LeaveRange(NPC, Spawn) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + + local choice = math.random(1,2) + + if choice == 1 then + PlayFlavor(NPC, "voiceover/english/merchant_vim/boat_06p_tutorial02/020_merchant_vim_hail_481beac8.mp3", "I love traveling the seas... Oh! Did you need something?", "sniff", 2187888771, 2112320089, Spawn) + elseif choice == 2 then + PlayFlavor(NPC, "voiceover/english/merchant_vim/boat_06p_tutorial02/020_merchant_vim_hail_187fc6bb.mp3", "I am busy right now...", "no", 1835666244, 487490745, Spawn) + else + end + +end + + + diff --git a/server/SpawnScripts/OutpostOverlord/Waulon.lua b/server/SpawnScripts/OutpostOverlord/Waulon.lua new file mode 100644 index 000000000..c55fa6814 --- /dev/null +++ b/server/SpawnScripts/OutpostOverlord/Waulon.lua @@ -0,0 +1,36 @@ +--[[ + Script Name : SpawnScripts/OutpostoftheOverlord/Waulon.lua + Script Purpose : Waulon + Script Author : Cynnar + Script Date : 2018.10.14 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +function spawn(NPC) + SetPlayerProximityFunction(NPC, 10, "InRange", "LeaveRange") +end + +function respawn(NPC) + spawn(NPC) +end + +function InRange(NPC, Spawn) +end + +function LeaveRange(NPC, Spawn) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + + local choice = math.random(1,2) + + if choice == 1 then + PlayFlavor(NPC, "voiceover/english/waulon/boat_06p_tutorial02/walon_0_004.mp3", "Where's me hat? Needs me lucky hat!", "", 2688932325, 103225044, Spawn) + elseif choice == 2 then + PlayFlavor(NPC, "voiceover/english/waulon/boat_06p_tutorial02/walon_0_008.mp3", "What? Can't you see? Busy, away with ye!", "", 1608066875, 70639594, Spawn) + else + end + +end + diff --git a/server/SpawnScripts/OutpostOverlord/Whizratchet.lua b/server/SpawnScripts/OutpostOverlord/Whizratchet.lua new file mode 100644 index 000000000..803b3f134 --- /dev/null +++ b/server/SpawnScripts/OutpostOverlord/Whizratchet.lua @@ -0,0 +1,14 @@ +--[[ + Spawn Template + Script Name: Whizratchet.lua + Script Purpose: Banker (evil) + Script Author: Sylva1n + Script Date: 2009.07.05 + Script Notes: Auto-Generated Conversation from PacketParser Data +--]] + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + + Say(NPC, "As a banker it is my job to hold items and coin for you for safe-keeping. If you would like to learn more, speak with Trainer Vissa Sathliss. She is just east of me, around the corner.", Spawn) +end diff --git a/server/SpawnScripts/OutpostOverlord/WixWimblewick.lua b/server/SpawnScripts/OutpostOverlord/WixWimblewick.lua new file mode 100644 index 000000000..6df7526b9 --- /dev/null +++ b/server/SpawnScripts/OutpostOverlord/WixWimblewick.lua @@ -0,0 +1,21 @@ +--[[ + Script Name : SpawnScripts/OutpostOverlord/WixWimblewick.lua + Script Purpose : Wix Wimblewick + Script Author : John Adams + Script Date : 2008.09.23 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + choice = math.random(1,2) + + if choice == 1 then + PlayFlavor(NPC, "", "I can't wait to get back to Temple Street.", "", 1689589577, 4560189, Spawn) + elseif choice == 2 then + PlayFlavor(NPC, "", "Wimblewick's the name, Wimblewickin is what I do. What that means, I have no idea!", "", 1689589577, 4560189, Spawn) + else + end + +end + diff --git a/server/SpawnScripts/OutpostOverlord/ZitoGraban.lua b/server/SpawnScripts/OutpostOverlord/ZitoGraban.lua new file mode 100644 index 000000000..23dfcc417 --- /dev/null +++ b/server/SpawnScripts/OutpostOverlord/ZitoGraban.lua @@ -0,0 +1,23 @@ +--[[ + Script Name : SpawnScripts/OutpostOverlord/ZitoGraban.lua + Script Purpose : Zito Graban + Script Author : John Adams + Script Date : 2008.09.23 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + choice = math.random(1,3) + + if choice == 1 then + PlayFlavor(NPC, "", "You've got to be deviant to survive in Freeport.", "", 1689589577, 4560189, Spawn) + elseif choice == 2 then + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_3_1032.mp3", "", "", 0, 0, Spawn) + elseif choice == 3 then + PlayFlavor(NPC, "", "I've almost completed my shell collection to turn in to Gethe Huggs.", "", 1689589577, 4560189, Spawn) + else + end + +end + diff --git a/server/SpawnScripts/OutpostOverlord/aMilitiapatroller_A.lua b/server/SpawnScripts/OutpostOverlord/aMilitiapatroller_A.lua new file mode 100644 index 000000000..b03037a67 --- /dev/null +++ b/server/SpawnScripts/OutpostOverlord/aMilitiapatroller_A.lua @@ -0,0 +1,113 @@ +--[[ + Script Name : SpawnScripts/OutpostOverlord/aMilitiapatroller_A.lua + Script Purpose : Waypoint Path for a Militia Patroller A.lua + Script Author : Cynnar + Script Date : 10/07/2018 11:15:11 PM + Script Notes : This is for the front guard in Outpost on the left hand side +--]] + +function spawn(NPC) + AddTimer(NPC, 2000, "waypoints") + +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) +end + +function respawn(NPC) +end + +function waypoints(NPC) + MovementLoopAddLocation(NPC, -16.14, -5.15, 184, 2, 0) + MovementLoopAddLocation(NPC, -19.32, -5.14, 181.23, 2, 0) + MovementLoopAddLocation(NPC, -23.59, -5.12, 175.47, 2, 0) + MovementLoopAddLocation(NPC, -26.22, -5.11, 173.02, 2, 0) + MovementLoopAddLocation(NPC, -29.26, -5.1, 171.54, 2, 0) + MovementLoopAddLocation(NPC, -31.59, -5.1, 170.96, 2, 0) + MovementLoopAddLocation(NPC, -34.76, -5.08, 168.7, 2, 0) + MovementLoopAddLocation(NPC, -36.53, -5.08, 166.25, 2, 0) + MovementLoopAddLocation(NPC, -37.67, -5.07, 164.93, 2, 0) + MovementLoopAddLocation(NPC, -44.05, -5.05, 161.94, 2, 0) + MovementLoopAddLocation(NPC, -46.3, -5.04, 159.93, 2, 0) + MovementLoopAddLocation(NPC, -47.42, -5.03, 158.42, 2, 0) + MovementLoopAddLocation(NPC, -48.41, -5.03, 156.66, 2, 0) + MovementLoopAddLocation(NPC, -49.15, -5.02, 151.3, 2, 0) + MovementLoopAddLocation(NPC, -50.41, -5.02, 148.23, 2, 0) + MovementLoopAddLocation(NPC, -51.99, -5.01, 144.53, 2, 0) + MovementLoopAddLocation(NPC, -54.06, -5, 140.62, 2, 0) + MovementLoopAddLocation(NPC, -56.25, -4.99, 137.41, 2, 0) + MovementLoopAddLocation(NPC, -57.17, -4.99, 134.97, 2, 0) + MovementLoopAddLocation(NPC, -57.43, -4.99, 131.77, 2, 0) + MovementLoopAddLocation(NPC, -57.25, -4.99, 128.55, 2, 0) + MovementLoopAddLocation(NPC, -55.58, -4.9, 122.23, 2, 0) + MovementLoopAddLocation(NPC, -54.43, -5.06, 117, 2, 0) + MovementLoopAddLocation(NPC, -54.48, -5.45, 113.06, 2, 0) + MovementLoopAddLocation(NPC, -53.01, -5.42, 110.88, 2, 0) + MovementLoopAddLocation(NPC, -49.91, -5.4, 109.19, 2, 0) + MovementLoopAddLocation(NPC, -46.51, -5.15, 107.84, 2, 0) + MovementLoopAddLocation(NPC, -40.91, -5.03, 105.2, 2, 0) + MovementLoopAddLocation(NPC, -37.76, -5.06, 103.81, 2, 0) + MovementLoopAddLocation(NPC, -35.53, -5.07, 102.16, 2, 0) + MovementLoopAddLocation(NPC, -37.76, -5.06, 103.81, 2, 0) + MovementLoopAddLocation(NPC, -40.91, -5.03, 105.2, 2, 0) + MovementLoopAddLocation(NPC, -46.51, -5.15, 107.84, 2, 0) + MovementLoopAddLocation(NPC, -49.91, -5.4, 109.19, 2, 0) + MovementLoopAddLocation(NPC, -53.01, -5.42, 110.88, 2, 0) + MovementLoopAddLocation(NPC, -54.48, -5.45, 113.06, 2, 0) + MovementLoopAddLocation(NPC, -54.43, -5.06, 117, 2, 0) + MovementLoopAddLocation(NPC, -55.58, -4.9, 122.23, 2, 0) + MovementLoopAddLocation(NPC, -57.25, -4.99, 128.55, 2, 0) + MovementLoopAddLocation(NPC, -57.43, -4.99, 131.77, 2, 0) + MovementLoopAddLocation(NPC, -57.17, -4.99, 134.97, 2, 0) + MovementLoopAddLocation(NPC, -56.25, -4.99, 137.41, 2, 0) + MovementLoopAddLocation(NPC, -54.06, -5, 140.62, 2, 0) + MovementLoopAddLocation(NPC, -51.99, -5.01, 144.53, 2, 0) + MovementLoopAddLocation(NPC, -50.41, -5.02, 148.23, 2, 0) + MovementLoopAddLocation(NPC, -49.15, -5.02, 151.3, 2, 0) + MovementLoopAddLocation(NPC, -48.41, -5.03, 156.66, 2, 0) + MovementLoopAddLocation(NPC, -47.42, -5.03, 158.42, 2, 0) + MovementLoopAddLocation(NPC, -46.3, -5.04, 159.93, 2, 0) + MovementLoopAddLocation(NPC, -44.05, -5.05, 161.94, 2, 0) + MovementLoopAddLocation(NPC, -37.67, -5.07, 164.93, 2, 0) + MovementLoopAddLocation(NPC, -36.53, -5.08, 166.25, 2, 0) + MovementLoopAddLocation(NPC, -34.76, -5.08, 168.7, 2, 0) + MovementLoopAddLocation(NPC, -31.59, -5.1, 170.96, 2, 0) + MovementLoopAddLocation(NPC, -29.26, -5.1, 171.54, 2, 0) + MovementLoopAddLocation(NPC, -26.22, -5.11, 173.02, 2, 0) + MovementLoopAddLocation(NPC, -23.59, -5.12, 175.47, 2, 0) + MovementLoopAddLocation(NPC, -19.32, -5.14, 181.23, 2, 0) + MovementLoopAddLocation(NPC, -16.14, -5.15, 184, 2, 0) + MovementLoopAddLocation(NPC, -9.87, -5.19, 185.99, 2, 0) + MovementLoopAddLocation(NPC, -3.74, -5.15, 180.58, 2, 0) + MovementLoopAddLocation(NPC, 5.11, -5.12, 174.85, 2, 0) + MovementLoopAddLocation(NPC, 13.03, -5.13, 167.98, 2, 0) + MovementLoopAddLocation(NPC, 17.86, -5.29, 165.81, 2, 0) + MovementLoopAddLocation(NPC, 22.16, -5.31, 164.42, 2, 0) + MovementLoopAddLocation(NPC, 29.25, -6.04, 166.37, 2, 0) + MovementLoopAddLocation(NPC, 40.97, -4.31, 166.69, 2, 0) + MovementLoopAddLocation(NPC, 47.82, -3.38, 167.24, 2, 0) + MovementLoopAddLocation(NPC, 40.97, -4.31, 166.69, 2, 0) + MovementLoopAddLocation(NPC, 29.25, -6.04, 166.37, 2, 0) + MovementLoopAddLocation(NPC, 22.16, -5.31, 164.42, 2, 0) + MovementLoopAddLocation(NPC, 17.86, -5.29, 165.81, 2, 0) + MovementLoopAddLocation(NPC, 13.03, -5.13, 167.98, 2, 0) + MovementLoopAddLocation(NPC, 5.11, -5.12, 174.85, 2, 0) + MovementLoopAddLocation(NPC, -3.74, -5.15, 180.58, 2, 0) + MovementLoopAddLocation(NPC, -9.87, -5.19, 185.99, 2, 0) + MovementLoopAddLocation(NPC, -12.66, -5.1, 190.72, 2, 0) + MovementLoopAddLocation(NPC, -15.13, -5.09, 196.95, 2, 0) + MovementLoopAddLocation(NPC, -15.46, -5.17, 199.64, 2, 0) + MovementLoopAddLocation(NPC, -17.5, -5.15, 202.81, 2, 0) + MovementLoopAddLocation(NPC, -20.38, -5.16, 206.51, 2, 0) + MovementLoopAddLocation(NPC, -22.38, -5.14, 210.98, 2, 0) + MovementLoopAddLocation(NPC, -24.27, -5.39, 215.67, 2, 0) + MovementLoopAddLocation(NPC, -17.32, -5.09, 213.62, 2, 0) + MovementLoopAddLocation(NPC, -16.52, -5.17, 209.99, 2, 0) + MovementLoopAddLocation(NPC, -13.86, -5.14, 204.8, 2, 0) + MovementLoopAddLocation(NPC, -10.44, -5.11, 199.43, 2, 0) + MovementLoopAddLocation(NPC, -7.5, -5.14, 194.95, 2, 0) + MovementLoopAddLocation(NPC, -7.01, -5.2, 191.9, 2, 0) + MovementLoopAddLocation(NPC, -8.56, -5.21, 188.34, 2, 0) + MovementLoopAddLocation(NPC, -10.19, -5.2, 186.8, 2, 0) +end diff --git a/server/SpawnScripts/OutpostOverlord/aMilitiapatroller_A_Follower.lua b/server/SpawnScripts/OutpostOverlord/aMilitiapatroller_A_Follower.lua new file mode 100644 index 000000000..fa762036c --- /dev/null +++ b/server/SpawnScripts/OutpostOverlord/aMilitiapatroller_A_Follower.lua @@ -0,0 +1,62 @@ +--[[ + Script Name : SpawnScripts/OutpostOverlord/aMilitiapatroller_A_Follower.lua + Script Author : Cynnar + Script Date : 2018.10.07 10:10:32 + Script Purpose : + : +--]] + +function spawn(NPC) + AddTimer(NPC, 900, "followguard_A") +end + +function followguard_A(NPC) + local zone = GetZone(NPC) + local guard_A_placement = GetSpawnByLocationID(zone, 399224) + local sli = GetSpawnLocationID(NPC) + local leaderX = GetX(guard_A_placement) + local leaderY = GetY(guard_A_placement) + local leaderZ = GetZ(guard_A_placement) + local speed = 2 + -- Say(NPC, "Leader location is: " .. GetX(guard_A_placement) .. ", " .. GetY(guard_A_placement) .. ", " .. GetZ(guard_A_placement)) + + if sli == 399195 then + if GetDistance(NPC, guard_A_placement) >= 8 then + speed = 5 + MoveToLocation(NPC, leaderX - 2, leaderY, leaderZ, speed) + else + speed = 2 + MoveToLocation(NPC, leaderX - 2, leaderY, leaderZ, speed) + end + elseif sli == 399239 then + if GetDistance(NPC, guard_A_placement) >= 8 then + -- Say(NPC, "Leader location is: " .. GetX(guard_A_placement) .. "") + -- Say(NPC, "My location is: " .. GetX(NPC) .. "") + speed = 5 + MoveToLocation(NPC, leaderX, leaderY, leaderZ - 2, speed) + else + speed = 2 + MoveToLocation(NPC, leaderX, leaderY, leaderZ - 2, speed) + end + elseif sli == 399179 then + if GetDistance(NPC, guard_A_placement) >= 8 then + MoveToLocation(NPC, leaderX + 2, leaderY, leaderZ, speed) + -- Say(NPC, "Leader location is: " .. GetX(guard_A_placement) .. "") + -- Say(NPC, "My location is: " .. GetX(NPC) .. "") + speed = 5 + else + speed = 2 + MoveToLocation(NPC, leaderX + 2, leaderY, leaderZ, speed) + end + end + speed = 2 + AddTimer(NPC, 3000, "followguard_A") +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) +end + +function respawn(NPC) + +end diff --git a/server/SpawnScripts/OutpostOverlord/aTrainedWolf.lua b/server/SpawnScripts/OutpostOverlord/aTrainedWolf.lua new file mode 100644 index 000000000..5da199275 --- /dev/null +++ b/server/SpawnScripts/OutpostOverlord/aTrainedWolf.lua @@ -0,0 +1,37 @@ +--[[ + Script Name : SpawnScripts/OutpostOverlord/aTrainedWolf.lua + Script Author : Cynnar + Script Date : 2017.01.17 12:01:01 + Script Purpose : Follow a Tunarian Wolfmaster + : +--]] + + + +function spawn(NPC) + AddTimer(NPC, 500, "followmaster") +end + +function followmaster(NPC, Spawn) + local zone = GetZone(NPC) + local wolfmasterplacement = GetSpawnByLocationID(zone, 394954) + local sli = GetSpawnLocationID(NPC) + if sli == 394887 then + SetFollowTarget(NPC, wolfmasterplacement) + if not IsFollowing(NPC) then + SetSpeed(NPC , 1) + ToggleFollow(NPC) + end + end + +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + +end + +function respawn(NPC) + +end + diff --git a/server/SpawnScripts/OutpostOverlord/aTunareWolfmaster.lua b/server/SpawnScripts/OutpostOverlord/aTunareWolfmaster.lua new file mode 100644 index 000000000..84d4fd61d --- /dev/null +++ b/server/SpawnScripts/OutpostOverlord/aTunareWolfmaster.lua @@ -0,0 +1,21 @@ +--[[ + Script Name : SpawnScripts/OutpostOverlord/aTunareWolfmaster.lua + Script Author : Cynnar + Script Date : 2017.01.15 01:01:19 + Script Purpose : + : +--]] + +function spawn(NPC) + +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + Say(NPC, "Testing hail function") +end + +function respawn(NPC) + spawn(NPC) +end + diff --git a/server/SpawnScripts/OutpostOverlord/aTunarianWolfmaster.lua b/server/SpawnScripts/OutpostOverlord/aTunarianWolfmaster.lua new file mode 100644 index 000000000..601882982 --- /dev/null +++ b/server/SpawnScripts/OutpostOverlord/aTunarianWolfmaster.lua @@ -0,0 +1,75 @@ +--[[ + Script Name : SpawnScripts/OutpostOverlord/aTunarianWolfmaster.lua + Script Author : Cynnar + Script Date : 2017.01.15 02:01:49 + Script Purpose : + : +--]] + +function spawn(NPC) + local modeltype = GetModelType(NPC) + if modeltype == 71 then + SetModelType(NPC, 65) + end + local sli = GetSpawnLocationID(NPC) + if sli == 394954 then + atw394954(NPC) + end +end + +function hailed(NPC, Spawn) +Say(NPC, "Testing script") +end + +function respawn(NPC) + spawn(NPC) +end + +function atw394954(NPC) +MovementLoopAddLocation(NPC, -82.9, -9.01, -32.37, 2, 5) +MovementLoopAddLocation(NPC, -89.3, -9.04, -32.93, 2, 0) +MovementLoopAddLocation(NPC, -93.81, -9.04, -39.63, 2, 0) +MovementLoopAddLocation(NPC, -92.14, -6.69, -44.1, 2, 0) +MovementLoopAddLocation(NPC, -97.23, -3.89, -49.12, 2, 0) +MovementLoopAddLocation(NPC, -100.03, -1.57, -53.72, 2, 0) +MovementLoopAddLocation(NPC, -94.65, 0.25, -57.16, 2, 0) +MovementLoopAddLocation(NPC, -95.38, 2.81, -61.48, 2, 0) +MovementLoopAddLocation(NPC, -97.77, 4.07, -63, 2, 0) +MovementLoopAddLocation(NPC, -92.54, 5.15, -66.36, 2, 0) +MovementLoopAddLocation(NPC, -91.12, 6.01, -77.53, 2, 0) +MovementLoopAddLocation(NPC, -90.65, 4.56, -85.65, 2, 0) +MovementLoopAddLocation(NPC, -97.59, 4.44, -89.64, 2, 0) +MovementLoopAddLocation(NPC, -97.98, 4.44, -93.59, 2, 0) +MovementLoopAddLocation(NPC, -110.26, 4.3, -99.75, 2, 0) +MovementLoopAddLocation(NPC, -119.67, 4.32, -100.01, 2, 0) +MovementLoopAddLocation(NPC, -131.47, 4.37, -92.67, 2, 0) +MovementLoopAddLocation(NPC, -134.29, 4.37, -86.85, 2, 0) +MovementLoopAddLocation(NPC, -130.15, 4.35, -61.75, 2, 0) +MovementLoopAddLocation(NPC, -128.1, 4.34, -53.3, 2, 0) +MovementLoopAddLocation(NPC, -130.09, 4.35, -59.37, 2, 0) +MovementLoopAddLocation(NPC, -133.06, 4.37, -85.97, 2, 0) +MovementLoopAddLocation(NPC, -128.33, 4.55, -71.54, 2, 0) +MovementLoopAddLocation(NPC, -128.16, 4.55, -67.7, 2, 0) +MovementLoopAddLocation(NPC, -129.9, 4.35, -62.65, 2, 0) +MovementLoopAddLocation(NPC, -128.14, 4.34, -53.98, 2, 0) +MovementLoopAddLocation(NPC, -129.55, 4.35, -60.2, 2, 0) +MovementLoopAddLocation(NPC, -133.42, 4.37, -82.19, 2, 0) +MovementLoopAddLocation(NPC, -131.98, 4.37, -89.95, 2, 0) +MovementLoopAddLocation(NPC, -126.96, 4.33, -95.66, 2, 0) +MovementLoopAddLocation(NPC, -118.24, 4.32, -100.61, 2, 0) +MovementLoopAddLocation(NPC, -110.1, 4.29, -100.76, 2, 0) +MovementLoopAddLocation(NPC, -100.42, 4.45, -96.02, 2, 0) +MovementLoopAddLocation(NPC, -94.31, 4.42, -87.22, 2, 0) +MovementLoopAddLocation(NPC, -97.45, 4.44, -86.45, 2, 0) +MovementLoopAddLocation(NPC, -97.31, 4.46, -84.61, 2, 0) +MovementLoopAddLocation(NPC, -91.17, 5.53, -81.39, 2, 0) +MovementLoopAddLocation(NPC, -92.97, 5.45, -68.62, 2, 0) +MovementLoopAddLocation(NPC, -97.44, 5.03, -64.94, 2, 0) +MovementLoopAddLocation(NPC, -98.14, 1.47, -59.36, 2, 0) +MovementLoopAddLocation(NPC, -100.07, 0.17, -56.66, 2, 0) +MovementLoopAddLocation(NPC, -95.31, -1.86, -52.95, 2, 0) +MovementLoopAddLocation(NPC, -96.89, -7.05, -44.33, 2, 0) +MovementLoopAddLocation(NPC, -90.52, -9.04, -36.04, 2, 0) +MovementLoopAddLocation(NPC, -89.3, -9.04, -32.93, 2, 0) +end + diff --git a/server/SpawnScripts/OutpostOverlord/aTunarianhorsesentry.lua b/server/SpawnScripts/OutpostOverlord/aTunarianhorsesentry.lua new file mode 100644 index 000000000..3c98e8c1e --- /dev/null +++ b/server/SpawnScripts/OutpostOverlord/aTunarianhorsesentry.lua @@ -0,0 +1,16 @@ +--[[ + Script Name : SpawnScripts/OutpostOverlord/aTunarianhorsesentry.lua + Script Purpose : Mount for Tunarian sentry (2780070) + Script Author : John Adams + Script Date : 2009.03.27 + Script Notes : Figure out how to use one script for all Tunarian Horse Sentry NPCs +--]] + +function spawn(NPC) + SetMount(NPC, 6848) + SetMountColor(NPC, 255, 255, 255, 255, 255, 255) +end + +function respawn(NPC) + spawn(NPC) +end diff --git a/server/SpawnScripts/OutpostOverlord/aTunarianscout1.lua b/server/SpawnScripts/OutpostOverlord/aTunarianscout1.lua new file mode 100644 index 000000000..c5b8c76d1 --- /dev/null +++ b/server/SpawnScripts/OutpostOverlord/aTunarianscout1.lua @@ -0,0 +1,28 @@ +--[[ + Script Name : SpawnScripts/OutpostOverlord/aTunarianscout1.lua + Script Purpose : When player enters 20m proximity, scout Crouches + Script Author : John Adams + Script Date : 2009.01.08 + Script Notes : JA: may need to adjust range +--]] + +local a_Tunarian_scout = 2780067 + +function spawn(NPC) + SetPlayerProximityFunction(NPC, 30, "InRange", "LeaveRange") +end + +function respawn(NPC) + spawn(NPC) +end + +function InRange(NPC, Player) + FaceTarget(NPC, Player) + DuckSpawn = GetSpawn(NPC, a_Tunarian_scout) -- Get Tunarian Scout + SpawnSet(DuckSpawn, "visual_state", "221") -- Start crouch_idle +end + +function LeaveRange(NPC, Player) + DuckSpawn = GetSpawn(NPC, a_Tunarian_scout) -- Get Tunarian Scout + SpawnSet(DuckSpawn, "visual_state", "0") -- Stop crouch_idle +end diff --git a/server/SpawnScripts/OutpostOverlord/acliffdiverhawk.lua b/server/SpawnScripts/OutpostOverlord/acliffdiverhawk.lua new file mode 100644 index 000000000..b8e9b34d3 --- /dev/null +++ b/server/SpawnScripts/OutpostOverlord/acliffdiverhawk.lua @@ -0,0 +1,54 @@ +--[[ + Script Name : SpawnScripts/OutpostOverlord/acliffdiverhawk.lua + Script Author : Cynnar + Script Date : 2018.12.24 12:12:43 + Script Purpose : + Script Notes : Hawk needs to turn around after the return flight to original location +--]] + +function spawn(NPC) + +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + +end + +function FlyToMoleRat(NPC) + + local TargetMoleRat = GetTempVariable(NPC, "MoleRat") + + if TargetMoleRat ~= nil then + local x = GetX(TargetMoleRat) + local y = GetY(TargetMoleRat) + local z = GetZ(TargetMoleRat) + + MoveToLocation(NPC, x, y, z, 8, "KillMoleRat") + end + +end + +function KillMoleRat(NPC) + + local MoleRat = GetTempVariable(NPC, "MoleRat") + if MoleRat ~= nil then + SetTempVariable(NPC, "MoleRat", nil) + Despawn(MoleRat) + AddTimer(NPC, 2500, "ReturnHome") + end +end + +function ReturnHome(NPC) + + local x = GetOrigX(NPC) + local y = GetORigY(NPC) + local z = GetOrigZ(NPC) + + if IsInCombat(NPC) == false then + MoveToLocation(NPC, x, y, z, 5) + end +end diff --git a/server/SpawnScripts/OutpostOverlord/beehive03.lua b/server/SpawnScripts/OutpostOverlord/beehive03.lua new file mode 100644 index 000000000..61a83dd04 --- /dev/null +++ b/server/SpawnScripts/OutpostOverlord/beehive03.lua @@ -0,0 +1,67 @@ +--[[ + Script Name : SpawnScripts/OutpostOverlord/beehive03.lua + Script Author : jakejp + Script Date : 2018.10.08 01:10:18 + Script Purpose : + : +--]] + +function spawn(NPC) + +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) +end + +function respawn(NPC) + +end + +function casted_on(NPC, Spawn, SpellName) + if SpellName == "smack hive" then + SmackHive(Spawn, NPC) + end +end + +function SmackHive(Caster, Target) + SpawnSet(Target, "show_command_icon", 0) + local QueenBee + local SoldierBee + local beehive01 = 2780121 + + if GetSpawnID(Target) == beehive01 then + Say(Caster, "here") + QueenBee = 401317 + SoldierBee = 401351 + elseif GetSpawnID(Target) == 2780120 then + QueenBee = 401318 + SoldierBee = 401354 + elseif GetSpawnID(Target) == 2780122 then + QueenBee = 1585522 + SoldierBee = 401358 + elseif GetSpawnID(Target) == 2780124 then + QueenBee = 401317 + SoldierBee = 401351 + end + + -- 20% chance to spawn a Queen bee + -- 80% chance to spawn a soldier bee + choice = math.random(1, 100) + + if choice <= 20 then + -- spawn a Queen bee + --SpawnMob(GetZone(Target), 2780076, false, GetX(Target), GetY(Target), GetZ(Target)) + SpawnByLocationID(GetZone(Target), QueenBee) + else + -- spawn a soldier bee + --SpawnMob(GetZone(Target), 2780078, false, GetX(Target), GetY(Target), GetZ(Target)) + SpawnByLocationID(GetZone(Target), SoldierBee) + + end + AddTimer(Target, 60000, "enable_command_icon_beeHive") +end + +function enable_command_icon_beeHive(NPC, Player) + SpawnSet(NPC, "show_command_icon", 1) +end \ No newline at end of file diff --git a/server/SpawnScripts/PeatBog/BotanistLith.lua b/server/SpawnScripts/PeatBog/BotanistLith.lua new file mode 100644 index 000000000..0bc76029c --- /dev/null +++ b/server/SpawnScripts/PeatBog/BotanistLith.lua @@ -0,0 +1,67 @@ +--[[ + Script Name : SpawnScripts/PeatBog/BotanistLith.lua + Script Purpose : Botanist Lith + Script Author : scatman + Script Date : 2009.05.10 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +local KERRA = 11 +local QUEST_1 = 1 + +function spawn(NPC) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + if HasCompletedQuest(Spawn, QUEST_1) then + elseif HasQuest(Spawn, QUEST_1) then + else + if GetRace(Spawn) == KERRA then + else + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/botanist_lith/qey_adv04_bog/quests/nareh/nareh000.mp3", "The plant life here is absolutely astounding.", "", 1130721210, 2119698425, Spawn) + end + end + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/botanist_lith/qey_adv04_bog/quests/nareh/nareh_lakosha000.mp3", "", "", 1585352530, 1011819212, Spawn) + AddConversationOption(conversation, "Lakosha Maera sent me.", "dlg_0_1") + StartConversation(conversation, NPC, Spawn, "The plant life here is absolutely astounding.") +end + +function dlg_0_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/botanist_lith/qey_adv04_bog/quests/nareh/nareh_lakosha001.mp3", "", "", 2621096962, 3551613449, Spawn) + AddConversationOption(conversation, "Unfortunate news. Someone in Nettleville attempted to perform a Pa'Rok ceremony with tainted dirt.", "dlg_0_2") + StartConversation(conversation, NPC, Spawn, "Ah, wonderful. I have not spoken to her in quite some time. What news does she send?") +end + +function dlg_0_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/botanist_lith/qey_adv04_bog/quests/nareh/nareh_lakosha002.mp3", "", "", 619900214, 1453098884, Spawn) + AddConversationOption(conversation, "No, but the ceremony was for naught. Lakosha asked me to visit you because the dirt that corrupted the ceremony came from Peat Bog.", "dlg_0_3") + StartConversation(conversation, NPC, Spawn, "I'm not familiar with that ceremony, was anybody hurt?") +end + +function dlg_0_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/botanist_lith/qey_adv04_bog/quests/nareh/nareh_lakosha003.mp3", "", "", 418560600, 341427965, Spawn) + AddConversationOption(conversation, "How so?", "dlg_0_4") + StartConversation(conversation, NPC, Spawn, "Oh, I see. I guess that agrees with my findings, unfortunately.") +end + +--[[ raw_conversations + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/botanist_lith/qey_adv04_bog/quests/nareh/nareh000.mp3", "The plant life here is absolutely astounding.", "", 1130721210, 2119698425, Spawn) +--]] + diff --git a/server/SpawnScripts/PeatBog/FeriusMentus.lua b/server/SpawnScripts/PeatBog/FeriusMentus.lua new file mode 100644 index 000000000..efe12b8ad --- /dev/null +++ b/server/SpawnScripts/PeatBog/FeriusMentus.lua @@ -0,0 +1,88 @@ +--[[ + Script Name : SpawnScripts/PeatBog/FeriusMentus.lua + Script Purpose : Ferius Mentus + Script Author : Scatman + Script Date : 2009.05.10 + Script Notes : +--]] + +local QUEST_1 = 214 + +function spawn(NPC) + ProvidesQuest(NPC, QUEST_1) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + if HasCompletedQuest(Spawn, QUEST_1) then + Say(NPC, "If I can perfect this, it may be amazingly useful.", Spawn) + elseif HasQuest(Spawn, QUEST_1) then + OnQuest1(NPC, Spawn, conversation) + else + YesYoureHere(NPC, Spawn, conversation) + end +end + +------------------------------------------------------------------------------------------------------------------------- +-- QUEST 1 +------------------------------------------------------------------------------------------------------------------------- + +function YesYoureHere(NPC, Spawn, conversation) + AddConversationOption(conversation, "Why are you so grump?", "SoGrumpy") + AddConversationOption(conversation, "Fine, I'll leave.") + StartConversation(conversation, NPC, Spawn, "Yes, yes, you're here, I'm here, why don't we talk eh? No thanks.") +end + +function SoGrumpy(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "Why do you need frogs?", "WhyNeedFrogs") + StartConversation(conversation, NPC, Spawn, "My research is coming to a stand still! I paid some young lad to go fetch me frogs and just took my money and left! Can you believe that? Now I have no frogs.") +end + +function WhyNeedFrogs(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "Well I could help you collect some frogs.", "ICanCollectFrogs") + StartConversation(conversation, NPC, Spawn, "I already told you! I need them for research! The frogs here secrete a fluid that tastes HORRIBLE. It helps them avoid being eaten. With the influx if 'rehabilitated' ogres coming in, I'm trying to come up with an easy way to remind them not to eat the gnomes or halflings.") +end + +function ICanCollectFrogs(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "I can do this.", "OfferQuest1") + StartConversation(conversation, NPC, Spawn, "You think so? I need some of the glands inside them. I don't expect you to be able to recognize it, so just bring me the whole body. Then of them, in fact.") +end + +function OfferQuest1(NPC, Spawn) + FaceTarget(NPC, Spawn) + OfferQuest(NPC, Spawn, QUEST_1) +end + +function OnQuest1(NPC, Spawn, conversation) + if GetQuestStep(Spawn, QUEST_1) == 2 then + AddConversationOption(conversation, "Yes I did.", "GotFrogs") + else + AddConversationOption(conversation, "No, not yet.") + end + StartConversation(conversation, NPC, Spawn, "Did you get the frogs?") +end + +function GotFrogs(NPC, Spawn) + SetStepComplete(Spawn, QUEST_1, 2) + + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "You're welcome.") + StartConversation(conversation, NPC, Spawn, "Ah, perfect! Thanks! So much nicer than the one that ran off earlier. Thank you.") +end \ No newline at end of file diff --git a/server/SpawnScripts/PeatBog/GuardAndrews.lua b/server/SpawnScripts/PeatBog/GuardAndrews.lua new file mode 100644 index 000000000..40520610a --- /dev/null +++ b/server/SpawnScripts/PeatBog/GuardAndrews.lua @@ -0,0 +1,29 @@ +--[[ + Script Name : SpawnScripts/PeatBog/GuardAndrews.lua + Script Purpose : Guard Andrews + Script Author : John Adams/Scatman + Script Date : 2009.05.10 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +function spawn(NPC) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + + choice = math.random(1, 4) + if choice == 1 then + PlayFlavor(NPC, "voiceover/english/human_eco_good_1/ft/service/guard/human_guard_service_good_1_hail_gm_ee473c11.mp3", "Good day to you, citizen. All preserve Queen Antonia.", "salute", 2997871263, 2912813719, Spawn) + elseif choice == 2 then + PlayFlavor(NPC, "voiceover/english/human_eco_good_1/ft/service/guard/human_guard_service_good_1_hail_gm_76da37c9.mp3", "I hate working this shift! If the gnolls don't attack now, I may die of boredom.", "grumble", 4099618783, 4191002419, Spawn) + elseif choice == 3 then + PlayFlavor(NPC, "voiceover/english/human_eco_good_1/ft/service/guard/human_guard_service_good_1_hail_gm_ebfceda5.mp3", "Greetings, citizen. I am on guard duty. Should you get into trouble, seek me out.", "attention", 1945337199, 2685949436, Spawn) + elseif choice == 4 then + PlayFlavor(NPC, "voiceover/english/human_eco_good_1/ft/service/guard/human_guard_service_good_1_hail_gm_c865a827.mp3", "Duty above all else, citizen, except honor!", "scold", 4141262779, 4227030045, Spawn) + end +end \ No newline at end of file diff --git a/server/SpawnScripts/PeatBog/GuardBlack.lua b/server/SpawnScripts/PeatBog/GuardBlack.lua new file mode 100644 index 000000000..5a4bfb549 --- /dev/null +++ b/server/SpawnScripts/PeatBog/GuardBlack.lua @@ -0,0 +1,73 @@ +--[[ + Script Name : SpawnScripts/PeatBog/GuardBlack.lua + Script Purpose : Guard Black + Script Author : Scatman + Script Date : 2009.05.15 + Script Notes : +--]] + +function spawn(NPC) + MovementLoopAddLocation(NPC, 744.55, -32.81, 402.73, 3, 0) + MovementLoopAddLocation(NPC, 746.47, -33.1, 407.78, 3, 0) + MovementLoopAddLocation(NPC, 746.31, -33.21, 412.6, 3, 0) + MovementLoopAddLocation(NPC, 744.68, -33.18, 417.61, 3, 0) + MovementLoopAddLocation(NPC, 741.26, -33.18, 421.35, 3, 0) + MovementLoopAddLocation(NPC, 736.26, -33.2, 423.3, 3, 0) + MovementLoopAddLocation(NPC, 731.15, -33.26, 424.82, 3, 0) + MovementLoopAddLocation(NPC, 704.95, -33.19, 428.48, 3, 0) + MovementLoopAddLocation(NPC, 699.76, -33.36, 427.99, 3, 0) + MovementLoopAddLocation(NPC, 694.18, -33.37, 426.54, 3, 0) + MovementLoopAddLocation(NPC, 688.9, -33.37, 425.63, 3, 0) + MovementLoopAddLocation(NPC, 683.86, -33.36, 425.03, 3, 0) + MovementLoopAddLocation(NPC, 673.27, -33.36, 424.2, 3, 0) + MovementLoopAddLocation(NPC, 657.7, -33.33, 419.79, 3, 0) + MovementLoopAddLocation(NPC, 652.52, -33.38, 419.24, 3, 0) + MovementLoopAddLocation(NPC, 646.98, -33.35, 419.4, 3, 0) + MovementLoopAddLocation(NPC, 641.92, -33.35, 420.54, 3, 0) + MovementLoopAddLocation(NPC, 637.19, -33.12, 423.45, 3, 0) + MovementLoopAddLocation(NPC, 633.65, -32.79, 427.09, 3, 0) + MovementLoopAddLocation(NPC, 630.93, -33.09, 430.89, 3, 0) + MovementLoopAddLocation(NPC, 624.97, -33.22, 439.37, 3, 0) + MovementLoopAddLocation(NPC, 621.71, -33.21, 442.77, 3, 0) + MovementLoopAddLocation(NPC, 617.66, -33.22, 444.66, 3, 0) + MovementLoopAddLocation(NPC, 612.81, -33.23, 446.07, 3, 0) + MovementLoopAddLocation(NPC, 608.08, -33.11, 446.5, 3, 0) + MovementLoopAddLocation(NPC, 602.84, -33.11, 446.53, 3, 0) + MovementLoopAddLocation(NPC, 598.36, -33.1, 445.95, 3, 0) + MovementLoopAddLocation(NPC, 592.84, -33.08, 444.43, 3, 0) + MovementLoopAddLocation(NPC, 584.58, -32.44, 441.8, 3, 0) + MovementLoopAddLocation(NPC, 571.31, -32.77, 434.96, 3, 0) + MovementLoopAddLocation(NPC, 568.07, -33.1, 430.09, 3, 0) + MovementLoopAddLocation(NPC, 572.64, -32.59, 437.5, 3, 0) + MovementLoopAddLocation(NPC, 593.19, -33.08, 444.52, 3, 0) + MovementLoopAddLocation(NPC, 597.92, -33.08, 445.7, 3, 0) + MovementLoopAddLocation(NPC, 603.18, -33.11, 446.45, 3, 0) + MovementLoopAddLocation(NPC, 607.15, -33.11, 446.51, 3, 0) + MovementLoopAddLocation(NPC, 611.84, -33.2, 446.23, 3, 0) + MovementLoopAddLocation(NPC, 621.39, -33.23, 442.97, 3, 0) + MovementLoopAddLocation(NPC, 633.66, -32.79, 427.05, 3, 0) + MovementLoopAddLocation(NPC, 636.8, -33.07, 423.78, 3, 0) + MovementLoopAddLocation(NPC, 641.59, -33.36, 420.75, 3, 0) + MovementLoopAddLocation(NPC, 646.35, -33.36, 419.33, 3, 0) + MovementLoopAddLocation(NPC, 657.45, -33.36, 419.75, 3, 0) + MovementLoopAddLocation(NPC, 663.21, -33.29, 421.21, 3, 0) + MovementLoopAddLocation(NPC, 667.58, -33.34, 422.64, 3, 0) + MovementLoopAddLocation(NPC, 673.05, -33.37, 424.19, 3, 0) + MovementLoopAddLocation(NPC, 694.13, -33.35, 426.27, 3, 0) + MovementLoopAddLocation(NPC, 699.34, -33.38, 427.62, 3, 0) + MovementLoopAddLocation(NPC, 704.85, -33.18, 428.59, 3, 0) + MovementLoopAddLocation(NPC, 731.38, -33.25, 424.62, 3, 0) + MovementLoopAddLocation(NPC, 740.85, -33.19, 421.32, 3, 0) + MovementLoopAddLocation(NPC, 744.27, -33.18, 418.04, 3, 0) + MovementLoopAddLocation(NPC, 746.14, -33.22, 412.85, 3, 0) + MovementLoopAddLocation(NPC, 746.48, -33.11, 408, 3, 0) + MovementLoopAddLocation(NPC, 744.85, -32.81, 402.81, 3, 0) + MovementLoopAddLocation(NPC, 734.76, -32.19, 389.66, 3, 0) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) +end \ No newline at end of file diff --git a/server/SpawnScripts/PeatBog/GuardDierdra.lua b/server/SpawnScripts/PeatBog/GuardDierdra.lua new file mode 100644 index 000000000..53ca3a93a --- /dev/null +++ b/server/SpawnScripts/PeatBog/GuardDierdra.lua @@ -0,0 +1,29 @@ +--[[ + Script Name : SpawnScripts/PeatBog/GuardDierdra.lua + Script Purpose : Guard Dierdra + Script Author : John Adams/Scatman + Script Date : 2009.05.10 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +function spawn(NPC) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + + choice = math.random(1, 4) + if choice == 1 then + PlayFlavor(NPC, "voiceover/english/human_eco_good_1/ft/service/guard/human_guard_service_good_1_hail_gf_ed0d92f8.mp3", "I hate the night shift! If the gnolls don't attack now, I may die of boredom.", "grumble", 1226814424, 706962620, Spawn) + elseif choice == 2 then + PlayFlavor(NPC, "voiceover/english/human_eco_good_1/ft/service/guard/human_guard_service_good_1_hail_gf_c865a827.mp3", "Duty above all else, citizen, except honor!", "scold", 373851625, 467562033, Spawn) + elseif choice == 3 then + PlayFlavor(NPC, "voiceover/english/human_eco_good_1/ft/service/guard/human_guard_service_good_1_hail_gf_ebfceda5.mp3", "Greetings, citizen. I am on guard duty. Should you get into trouble, seek me out.", "attention", 3448203562, 506341016, Spawn) + elseif choice == 4 then + PlayFlavor(NPC, "voiceover/english/human_eco_good_1/ft/service/guard/human_guard_service_good_1_hail_gf_ee473c11.mp3", "Good day to you, citizen. All preserve Queen Antonia.", "salute", 1886617373, 1115286759, Spawn) + end +end \ No newline at end of file diff --git a/server/SpawnScripts/PeatBog/GuardMoor.lua b/server/SpawnScripts/PeatBog/GuardMoor.lua new file mode 100644 index 000000000..4d09c7097 --- /dev/null +++ b/server/SpawnScripts/PeatBog/GuardMoor.lua @@ -0,0 +1,68 @@ +--[[ + Script Name : SpawnScripts/PeatBog/GuardMoor.lua + Script Purpose : Guard Moor + Script Author : Scatman + Script Date : 2009.05.15 + Script Notes : +--]] + +function spawn(NPC) + MovementLoopAddLocation(NPC, 584.25, -32.33, 441.91, 3, 0) + MovementLoopAddLocation(NPC, 598.15, -33.1, 445.74, 3, 0) + MovementLoopAddLocation(NPC, 607.76, -33.11, 446.59, 3, 0) + MovementLoopAddLocation(NPC, 612.02, -33.2, 445.92, 3, 0) + MovementLoopAddLocation(NPC, 617.22, -33.22, 444.66, 3, 0) + MovementLoopAddLocation(NPC, 621.62, -33.22, 442.55, 3, 0) + MovementLoopAddLocation(NPC, 627.85, -33.27, 435.54, 3, 0) + MovementLoopAddLocation(NPC, 636.71, -33.06, 423.79, 3, 0) + MovementLoopAddLocation(NPC, 641.7, -33.35, 420.61, 3, 0) + MovementLoopAddLocation(NPC, 646.74, -33.35, 419.53, 3, 0) + MovementLoopAddLocation(NPC, 652.65, -33.38, 419.18, 3, 0) + MovementLoopAddLocation(NPC, 657.5, -33.35, 419.74, 3, 0) + MovementLoopAddLocation(NPC, 672.32, -33.37, 423.81, 3, 0) + MovementLoopAddLocation(NPC, 689.76, -33.36, 425.47, 3, 0) + MovementLoopAddLocation(NPC, 699.01, -33.37, 427.68, 3, 0) + MovementLoopAddLocation(NPC, 704.67, -33.19, 428.52, 3, 0) + MovementLoopAddLocation(NPC, 731.1, -33.27, 424.74, 3, 0) + MovementLoopAddLocation(NPC, 736.09, -33.24, 423.34, 3, 0) + MovementLoopAddLocation(NPC, 740.37, -33.19, 421.48, 3, 0) + MovementLoopAddLocation(NPC, 744.27, -33.18, 418.17, 3, 0) + MovementLoopAddLocation(NPC, 746.42, -33.22, 412.98, 3, 0) + MovementLoopAddLocation(NPC, 746.44, -33.13, 408.27, 3, 0) + MovementLoopAddLocation(NPC, 745.29, -32.91, 403.56, 3, 0) + MovementLoopAddLocation(NPC, 742.62, -32.6, 399.85, 3, 0) + MovementLoopAddLocation(NPC, 735.4, -32.26, 389.95, 3, 0) + MovementLoopAddLocation(NPC, 745.03, -32.83, 403.05, 3, 0) + MovementLoopAddLocation(NPC, 746.26, -33.1, 407.56, 3, 0) + MovementLoopAddLocation(NPC, 746.27, -33.22, 412.85, 3, 0) + MovementLoopAddLocation(NPC, 744.74, -33.2, 417.52, 3, 0) + MovementLoopAddLocation(NPC, 741.14, -33.18, 420.85, 3, 0) + MovementLoopAddLocation(NPC, 736.75, -33.19, 423.34, 3, 0) + MovementLoopAddLocation(NPC, 731.96, -33.25, 424.64, 3, 0) + MovementLoopAddLocation(NPC, 705.05, -33.18, 428.57, 3, 0) + MovementLoopAddLocation(NPC, 699.7, -33.35, 427.85, 3, 0) + MovementLoopAddLocation(NPC, 689.17, -33.36, 425.51, 3, 0) + MovementLoopAddLocation(NPC, 673.34, -33.36, 424.36, 3, 0) + MovementLoopAddLocation(NPC, 657.78, -33.32, 419.86, 3, 0) + MovementLoopAddLocation(NPC, 652.59, -33.37, 419.05, 3, 0) + MovementLoopAddLocation(NPC, 647.36, -33.36, 419.62, 3, 0) + MovementLoopAddLocation(NPC, 642.06, -33.35, 420.83, 3, 0) + MovementLoopAddLocation(NPC, 637.23, -33.12, 423.53, 3, 0) + MovementLoopAddLocation(NPC, 633.44, -32.81, 427.2, 3, 0) + MovementLoopAddLocation(NPC, 625.27, -33.22, 439.43, 3, 0) + MovementLoopAddLocation(NPC, 621.78, -33.21, 442.6, 3, 0) + MovementLoopAddLocation(NPC, 617.1, -33.25, 444.71, 3, 0) + MovementLoopAddLocation(NPC, 612.48, -33.21, 446.16, 3, 0) + MovementLoopAddLocation(NPC, 607.66, -33.11, 446.52, 3, 0) + MovementLoopAddLocation(NPC, 603.23, -33.11, 446.57, 3, 0) + MovementLoopAddLocation(NPC, 598.56, -33.11, 446.12, 3, 0) + MovementLoopAddLocation(NPC, 583.64, -32.33, 441.48, 3, 0) + MovementLoopAddLocation(NPC, 567.05, -32.83, 432.89, 3, 0) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) +end \ No newline at end of file diff --git a/server/SpawnScripts/PeatBog/GuardNander.lua b/server/SpawnScripts/PeatBog/GuardNander.lua new file mode 100644 index 000000000..e8bf25f46 --- /dev/null +++ b/server/SpawnScripts/PeatBog/GuardNander.lua @@ -0,0 +1,28 @@ +--[[ + Script Name : SpawnScripts/PeatBog/GuardNander.lua + Script Purpose : Guard Nander + Script Author : Scatman + Script Date : 2009.05.14 + Script Notes : +--]] + +function spawn(NPC) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + local choice = math.random(1, 4) + if choice == 1 then + PlayFlavor(NPC, "voiceover/english/dwarf_eco_good_1/ft/service/guard/dwarf_guard_service_good_1_hail_gm_76da37c9.mp3", "I hate working this shift! If the gnolls don't attack now I may die of boredom.", "grumble", 31199107, 4082603014, Spawn) + elseif choice == 2 then + PlayFlavor(NPC, "voiceover/english/dwarf_eco_good_1/ft/service/guard/dwarf_guard_service_good_1_hail_gm_c865a827.mp3", "Duty above all else citizen, except honor!", "scold", 3958491070, 1651361777, Spawn) + elseif choice == 3 then + PlayFlavor(NPC, "voiceover/english/dwarf_eco_good_1/ft/service/guard/dwarf_guard_service_good_1_hail_gm_ebfceda5.mp3", "Greetings, citizen. I am on guard duty. Should you get into trouble, seek me out.", "attention", 1717559969, 1730005307, Spawn) + elseif choice == 4 then + PlayFlavor(NPC, "voiceover/english/dwarf_eco_good_1/ft/service/guard/dwarf_guard_service_good_1_hail_gm_ee473c11.mp3", "Good day to you citizen, all preserve Queen Antonia.", "salute", 2539353309, 3288832983, Spawn) + end +end \ No newline at end of file diff --git a/server/SpawnScripts/PeatBog/GuardVivian.lua b/server/SpawnScripts/PeatBog/GuardVivian.lua new file mode 100644 index 000000000..05a4efa75 --- /dev/null +++ b/server/SpawnScripts/PeatBog/GuardVivian.lua @@ -0,0 +1,28 @@ +--[[ + Script Name : SpawnScripts/PeatBog/GuardVivian.lua + Script Purpose : Guard Vivian + Script Author : Scatman + Script Date : 2009.05.14 + Script Notes : +--]] + +function spawn(NPC) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + local choice = math.random(1, 4) + if choice == 1 then + PlayFlavor(NPC, "", "I hate working this shift! If the gnolls don't attack now I may die of boredom.", "grumble", 0, 0, Spawn) + elseif choice == 2 then + PlayFlavor(NPC, "", "Duty above all else citizen, except honor!", "scold", 0, 0, Spawn) + elseif choice == 3 then + PlayFlavor(NPC, "", "Greetings, citizen. I am on guard duty. Should you get into trouble, seek me out.", "attention", 0, 0, Spawn) + elseif choice == 4 then + PlayFlavor(NPC, "", "Good day to you citizen, all preserve Queen Antonia.", "salute", 0, 0, Spawn) + end +end \ No newline at end of file diff --git a/server/SpawnScripts/PeatBog/LieutenantDawson.lua b/server/SpawnScripts/PeatBog/LieutenantDawson.lua new file mode 100644 index 000000000..4289c8906 --- /dev/null +++ b/server/SpawnScripts/PeatBog/LieutenantDawson.lua @@ -0,0 +1,365 @@ +--[[ + Script Name : SpawnScripts/PeatBog/LieutenantDawson.lua + Script Purpose : Lieutenant Dawson + Script Author : Scatman + Script Date : 2009.08.10 + Script Notes : +--]] + +local MIN_LEVEL = 5 +local QUEST_FROM_JOHFRIT = 46 +local QUEST_1 = 215 +local QUEST_2 = 216 +local QUEST_3 = 217 +local QUEST_4 = 218 +local QUEST_5 = 219 +local QUEST_6 = 220 + +function spawn(NPC) + ProvidesQuest(NPC, QUEST_1) + ProvidesQuest(NPC, QUEST_2) + ProvidesQuest(NPC, QUEST_3) + ProvidesQuest(NPC, QUEST_4) + ProvidesQuest(NPC, QUEST_5) + ProvidesQuest(NPC, QUEST_6) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + if HasQuest(Spawn, QUEST_FROM_JOHFRIT) then + SetStepComplete(Spawn, QUEST_FROM_JOHFRIT, 1) + end + + if HasCompletedQuest(Spawn, QUEST_1) then + if HasCompletedQuest(Spawn, QUEST_2) then + if HasCompletedQuest(Spawn, QUEST_3) then + if HasCompletedQuest(Spawn, QUEST_4) then + if HasCompletedQuest(Spawn, QUEST_5) then + if HasCompletedQuest(Spawn, QUEST_6) then + Say(NPC, "Once again, thank you for all you have done.", Spawn) + elseif HasQuest(Spawn, QUEST_6) then + Say(NPC, "Once again, thank you for all you have done.", Spawn) + else + OnQuest5(NPC, Spawn, conversation) + end + elseif HasQuest(Spawn, QUEST_5) then + OnQuest5(NPC, Spawn, conversation) + else + OnQuest4(NPC, Spawn, conversation) + end + elseif HasQuest(Spawn, QUEST_4) then + OnQuest4(NPC, Spawn, conversation) + else + OnQuest3(NPC, Spawn, conversation) + end + elseif HasQuest(Spawn, QUEST_3) then + OnQuest3(NPC, Spawn, conversation) + else + OnQuest2(NPC, Spawn, conversation) + end + elseif HasQuest(Spawn, QUEST_2) then + OnQuest2(NPC, Spawn, conversation) + else + OnQuest1(NPC, Spawn, conversation) + end + elseif HasQuest(Spawn, QUEST_1) then + OnQuest1(NPC, Spawn, conversation) + else + if GetLevel(Spawn) < MIN_LEVEL then + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/lieutenant_dawson/qey_adv04_bog/qst_dawson_toolow_bd47ca5c.mp3", "Return to me when you're a bit more experienced, I think I could use your help.", "", 664604870, 1946809996, Spawn) + else + DoYouHaveAQuestion(NPC, Spawn, conversation) + end + end +end + +----------------------------------------------------------------------------------------------------------------------------------- +-- QUEST 1 +----------------------------------------------------------------------------------------------------------------------------------- + +function DoYouHaveAQuestion(NPC, Spawn, conversation) + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/lieutenant_dawson/qey_adv04_bog/quests/dawson/dawson000.mp3", "", "", 2113696179, 3288237924, Spawn) + AddConversationOption(conversation, "What is your mind occupied with?", "dlg_0_1") + StartConversation(conversation, NPC, Spawn, "Do you have a question? Please be brief, my mind is occupied at the moment.") +end + +function dlg_0_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/lieutenant_dawson/qey_adv04_bog/quests/dawson/dawson001.mp3", "", "", 1614058358, 1618385129, Spawn) + AddConversationOption(conversation, "How do you plan on doing that?", "dlg_0_2") + StartConversation(conversation, NPC, Spawn, "I'm not entirely sure yet. Strange things have been happening in the Peat Bog. The ecology here has taken a staggering turn and that has attracted attention. I am trying to provide a strong presence here but with no direct support from Qeynos that is tough. I just need to show Qeynos that investing more people here is necessary.") +end + +function dlg_0_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/lieutenant_dawson/qey_adv04_bog/quests/dawson/dawson002.mp3", "", "", 3230267563, 3912489115, Spawn) + AddConversationOption(conversation, "Sure, what can I do?", "dlg_0_3") + StartConversation(conversation, NPC, Spawn, "That is yet another thing I'm not quite certain of yet. I need time to think that over but there are enough mundane problems that I've very little time to think. Care to lend a hand?") +end + +function dlg_0_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/lieutenant_dawson/qey_adv04_bog/quests/dawson/dawson003.mp3", "", "", 1827785196, 3415599407, Spawn) + AddConversationOption(conversation, "Sure, I can do it.", "dlg_0_4") + AddConversationOption(conversation, "Not now, sorry.") + StartConversation(conversation, NPC, Spawn, "You can take care of some of the recurring problems while I try to focus my mind elsewhere. The fungus men around here have been causing enough incidents to warrant action. And the ravenous bog slugs are becoming more active. Take some of them out for me and it will give me the time needed to plan. Whadya say?") +end + +function dlg_0_4(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/lieutenant_dawson/qey_adv04_bog/quests/dawson/dawson004.mp3", "", "", 146673171, 1820291654, Spawn) + AddConversationOption(conversation, "All right.", "OfferQuest1") + StartConversation(conversation, NPC, Spawn, "Great. The fungus men can be found around the mushrooms that dot the landscape. The ravenous bog slugs can be found south of here: if you follow this path to where the sewer grate lies and then head south, heading east once you hit the water, then further south, you should find them.") +end + +function OfferQuest1(NPC, Spawn) + FaceTarget(NPC, Spawn) + OfferQuest(NPC, Spawn, QUEST_1) +end + +function OnQuest1(NPC, Spawn, conversation) + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/lieutenant_dawson/qey_adv04_bog/quests/dawson/dawson005.mp3", "", "", 3763908858, 4198264181, Spawn) + + if (HasQuest(Spawn, QUEST_1) and GetQuestStep(Spawn, QUEST_1) == 3) or (HasCompletedQuest(Spawn, QUEST_1)) then + AddConversationOption(conversation, "Yes, I have.", "dlg_1_1") + else + AddConversationOption(conversation, "No, not yet.") + end + + StartConversation(conversation, NPC, Spawn, "Have you killed the slugs and fungus men?") +end + +----------------------------------------------------------------------------------------------------------------------------------- +-- QUEST 2 +----------------------------------------------------------------------------------------------------------------------------------- + +function dlg_1_1(NPC, Spawn) + if HasQuest(Spawn, QUEST_1) then + SetStepComplete(Spawn, QUEST_1, 3) + end + + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/lieutenant_dawson/qey_adv04_bog/quests/dawson/dawson006.mp3", "", "", 74693624, 878787652, Spawn) + AddConversationOption(conversation, "Sure, what can I do?", "dlg_1_2") + AddConversationOption(conversation, "Sorry, no.") + StartConversation(conversation, NPC, Spawn, "Good, it's a relief to have those taken care of. This will allow us to expend resources in more important areas. Speaking of which, I've recently received some strange reports. How'd you like to help me again?") +end + +function dlg_1_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/lieutenant_dawson/qey_adv04_bog/quests/dawson/dawson007.mp3", "", "", 3523318297, 3580020244, Spawn) + AddConversationOption(conversation, "Ok, I'll attach the beacon.", "OfferQuest2") + StartConversation(conversation, NPC, Spawn, "The body of water you passed earlier: I've had at least two reports of some sort of machine in that water. I've alerted the research teams, but they are busy elsewhere. In the mean time, it would be helpful if you could do two things for me. First, find the machine to verify it exists. And, second, if it does exist, tag it with an arcanic beacon.") +end + +function OfferQuest2(NPC, Spawn) + FaceTarget(NPC, Spawn) + OfferQuest(NPC, Spawn, QUEST_2) +end + +function OnQuest2(NPC, Spawn) + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/lieutenant_dawson/qey_adv04_bog/quests/dawson/dawson008.mp3", "", "", 702901482, 1827477819, Spawn) + + if (HasQuest(Spawn, QUEST_2) and GetQuestStep(Spawn, QUEST_2) == 2) or (HasCompletedQuest(Spawn, QUEST_2)) then + AddConversationOption(conversation, "Yes. I attached the beacon, but before that I was attacked by a gnoll.", "dlg_6_1") + else + AddConversationOption(conversation, "No, not yet.") + end + + StartConversation(conversation, NPC, Spawn, "Did you find the machine?") +end + +function dlg_6_1(NPC, Spawn) + if HasQuest(Spawn, QUEST_2) then + SetStepComplete(Spawn, QUEST_2, 2) + end + + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/lieutenant_dawson/qey_adv04_bog/quests/dawson/dawson009.mp3", "", "", 416950362, 1150655784, Spawn) + AddConversationOption(conversation, "Yes. I will help.", "dlg_6_2") + AddConversationOption(conversation, "For now I must leave.") + StartConversation(conversation, NPC, Spawn, "A gnoll?! Things are worse here than I thought. Perhaps they... hmm... I still need your help, can you stay?") +end + +----------------------------------------------------------------------------------------------------------------------------------- +-- QUEST 3 +----------------------------------------------------------------------------------------------------------------------------------- + +function dlg_6_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/lieutenant_dawson/qey_adv04_bog/quests/dawson/dawson010.mp3", "", "", 2108767843, 3888763580, Spawn) + AddConversationOption(conversation, "Where are the ambush sites?", "dlg_6_3") + StartConversation(conversation, NPC, Spawn, "I am glad. A number of our research teams in the Peat Bog were recently ambushed. Nobody was killed, thankfully, but their work has been lost. We've escorted the researchers to safety and left the ambush sites undisturbed. I would like you to go to each site and check for any clues that may tell us who did this. It would be easy to assume it was the gnolls, but I would like evidence to complement my gut feeling.") +end + +function dlg_6_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/lieutenant_dawson/qey_adv04_bog/quests/dawson/dawson011.mp3", "", "", 3580800965, 1143356388, Spawn) + AddConversationOption(conversation, "I will return.", "OfferQuest3") + StartConversation(conversation, NPC, Spawn, "The first is west from Two Logs Pond, which is south from the sewer grate. The second is east of the pond in the north eastern corner of the area there. The final ambush site is directly south of the second site.") +end + +function OfferQuest3(NPC, Spawn) + FaceTarget(NPC, Spawn) + OfferQuest(NPC, Spawn, QUEST_3) +end + +function OnQuest3(NPC, Spawn, conversation) + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/lieutenant_dawson/qey_adv04_bog/quests/dawson/dawson012.mp3", "", "", 3649722083, 1259667690, Spawn) + + if (HasQuest(Spawn, QUEST_3) and GetQuestStep(Spawn, QUEST_3) == 4) or (HasCompletedQuest(Spawn, QUEST_3)) then + AddConversationOption(conversation, "Yes, at one I found a gnoll paw. There was nothing telling at the others.", "dlg_12_1") + else + AddConversationOption(conversation, "No, not yet.") + end + StartConversation(conversation, NPC, Spawn, "Have you examined all of the ambush sites?") +end + +function dlg_12_1(NPC, Spawn) + if HasQuest(Spawn, QUEST_3) then + SetStepComplete(Spawn, QUEST_3, 4) + end + + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/lieutenant_dawson/qey_adv04_bog/quests/dawson/dawson013.mp3", "", "", 459920710, 2550974214, Spawn) + AddConversationOption(conversation, "Yes, I can help.", "dlg_12_2") + AddConversationOption(conversation, "Not right now.") + StartConversation(conversation, NPC, Spawn, "That's good. Well, it's bad, but it's good. You know what I mean. This means we have less to worry about. It seems the gnolls are on the move, probably because we've found them. If our intelligence is correct they're moving a number of machines out of the Peat Bog. I don't know if this is a retreat or some movement for another advance, but we need to stop those machines. Can you help?") +end + +----------------------------------------------------------------------------------------------------------------------------------- +-- QUEST 4 +----------------------------------------------------------------------------------------------------------------------------------- + +function dlg_12_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/lieutenant_dawson/qey_adv04_bog/quests/dawson/dawson014.mp3", "", "", 3721129561, 3085892436, Spawn) + AddConversationOption(conversation, "I'll be back when this is done.", "OfferQuest4") + StartConversation(conversation, NPC, Spawn, "Wonderful. Their exit route seems to start in the south-east most corner of the Peat Bog and move west from there. There should be three machines. Kill the gnolls protecting the machine, destroy the machine itself, and then move on to the next one. Our people will be along soon enough to take care of the remains.") +end + +function OfferQuest4(NPC, Spawn) + FaceTarget(NPC, Spawn) + OfferQuest(NPC, Spawn, QUEST_4) +end + +function OnQuest4(NPC, Spawn, conversation) + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/lieutenant_dawson/qey_adv04_bog/quests/dawson/dawson015.mp3", "", "", 2647530103, 2587149233, Spawn) + + if (HasQuest(Spawn, QUEST_4) and GetQuestStep(Spawn, QUEST_4) == 4) or (HasCompletedQuest(Spawn, QUEST_4)) then + AddConversationOption(conversation, "Yes, I have.", "dlg_14_1") + else + AddConversationOption(conversation, "Not yet.") + end + + StartConversation(conversation, NPC, Spawn, "Did you stop the gnolls?") +end + +function dlg_14_1(NPC, Spawn) + if HasQuest(Spawn, QUEST_4) then + SetStepComplete(Spawn, QUEST_4, 4) + end + + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/lieutenant_dawson/qey_adv04_bog/quests/dawson/dawson017.mp3", "", "", 3063961189, 3632961186, Spawn) + AddConversationOption(conversation, "What loose end?", "dlg_14_2") + StartConversation(conversation, NPC, Spawn, "Good. I would hate to see one of the other Lieutenants clean up my mess. Thank you. There's still one loose end to clean up, if you're willing.") +end + +----------------------------------------------------------------------------------------------------------------------------------- +-- QUEST 5 +----------------------------------------------------------------------------------------------------------------------------------- + +function dlg_14_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/lieutenant_dawson/qey_adv04_bog/quests/dawson/dawson018.mp3", "", "", 1491634247, 1091662891, Spawn) + AddConversationOption(conversation, "I can do this.", "dlg_14_3") + AddConversationOption(conversation, "I can't do this.") + StartConversation(conversation, NPC, Spawn, "Dentfang. He was one of the gnolls in charge of this area. He knows he can't return after such a failure, perhaps he hopes to hide out here long enough to reclaim his honor by slaying the guards of Qeynos. Nobody wants to see that happen. My scouts have suggested three possible places within the Peat Bog where he may be hiding. I've already sent teams to two places, the two I consider least likely. I'm positive he's at the final spot, and I would like you to take care of him. What do you say?") +end + +function dlg_14_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/lieutenant_dawson/qey_adv04_bog/quests/dawson/dawson019.mp3", "", "", 726337004, 1780065710, Spawn) + AddConversationOption(conversation, "Is he dangerous?", "OfferQuest5") + StartConversation(conversation, NPC, Spawn, "Good. If you start in the southwestern corner of the Peat Bog and then travel north, you should come to the area where he's hiding. Travel there and give him what he deserves.") +end + +function OfferQuest5(NPC, Spawn) + FaceTarget(NPC, Spawn) + OfferQuest(NPC, Spawn, QUEST_5) +end + +function OnQuest5(NPC, Spawn, conversation) + if (HasQuest(Spawn, QUEST_5) and GetQuestStep(Spawn, QUEST_5) == 2) or (HasCompletedQuest(Spawn, QUEST_5)) then + AddConversationOption(conversation, "I have.", "Quest5Done") + else + AddConversationOption(conversation, "Not yet.") + end + + StartConversation(conversation, NPC, Spawn, "Did you dispose of Dentfang?") +end + +function Quest5Done(NPC, Spawn) + if HasQuest(Spawn, QUEST_5) then + SetStepComplete(Spawn, QUEST_5, 2) + end + + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "You are welcome.", "WordHasCome") + StartConversation(conversation, NPC, Spawn, "Good. With him gone the gnoll presence here will not be able to regain strength. They will flee or be killed. You've done a great thing for us, " .. GetName(Spawn) .. ". I appreciate it more than you know. And Qeynos, appreciates it too.") +end + +----------------------------------------------------------------------------------------------------------------------------------- +-- QUEST 6 +----------------------------------------------------------------------------------------------------------------------------------- + +function WordHasCome(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "bow", 0, 0, Spawn) + AddConversationOption(conversation, "I can do this.", "OfferQuest6") + StartConversation(conversation, NPC, Spawn, "Word has come down from above, " .. GetName(Spawn) .. ". You have been requested specifically. Because of your help here you have been noticed. You are specifically being request in The Caves. You should be very proud. I am glad to have worked with you, I am sure you will be a huge asset in the coming battle.") +end + +function OfferQuest6(NPC, Spawn) + FaceTarget(NPC, Spawn) + OfferQuest(NPC, Spawn, QUEST_6) +end \ No newline at end of file diff --git a/server/SpawnScripts/PeatBog/Oakvil.lua b/server/SpawnScripts/PeatBog/Oakvil.lua new file mode 100644 index 000000000..7a7d185b3 --- /dev/null +++ b/server/SpawnScripts/PeatBog/Oakvil.lua @@ -0,0 +1,41 @@ +--[[ + Script Name : SpawnScripts/PeatBog/Oakvil.lua + Script Purpose : Oakvil + Script Author : Scatman + Script Date : 2009.05.14 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +function spawn(NPC) + SetPlayerProximityFunction(NPC, 10, "InRange") +end + +function respawn(NPC) + spawn(NPC) +end + +function InRange(NPC, Spawn) + if math.random(1, 100) <= 25 then + SaySomethingRandom(NPC, Spawn) + end +end + +function hailed(NPC, Spawn) + SaySomethingRandom(NPC, Spawn) +end + +function SaySomethingRandom(NPC, Spawn) + FaceTarget(NPC, Spawn) + local choice = math.random(1, 5) + if choice == 1 then + PlayFlavor(NPC, "voiceover/english/human_eco_good_1/ft/service/merchant/human_merchant_service_good_1_hail_gm_e4fa2bd8.mp3", "Confound it! Where did I put that ledger? It must be around here somewhere!", "confused", 983188064, 3043413352, Spawn) + elseif choice == 2 then + PlayFlavor(NPC, "voiceover/english/human_eco_good_1/ft/service/merchant/human_merchant_service_good_1_hail_gm_45d92a75.mp3", "Welcome! What can I help you with?", "bow", 892528408, 239693863, Spawn) + elseif choice == 3 then + PlayFlavor(NPC, "voiceover/english/human_eco_good_1/ft/service/merchant/human_merchant_service_good_1_hail_gm_24322c5d.mp3", "Greetings, friend traveler! We have the finest supplies to fill your adventuring needs.", "smile", 2541554579, 2951095822, Spawn) + elseif choice == 4 then + PlayFlavor(NPC, "voiceover/english/human_eco_good_1/ft/service/merchant/human_merchant_service_good_1_aoi_gm_c5e79ff5.mp3", "Hello there! Can I interest you in some of the finest merchandise this side of Norrath?", "wave", 1832724458, 980846932, Spawn) + elseif choice == 5 then + PlayFlavor(NPC, "voiceover/english/human_eco_good_1/ft/service/merchant/human_merchant_service_good_1_hail_gm_ae84abf9.mp3", "Go on, take a look at the stock. You'll never beat this price in the city. I guarantee it!", "wink", 903813734, 2512856176, Spawn) + end +end diff --git a/server/SpawnScripts/PeatBog/qst_ambush_site_1.lua b/server/SpawnScripts/PeatBog/qst_ambush_site_1.lua new file mode 100644 index 000000000..adb4d311e --- /dev/null +++ b/server/SpawnScripts/PeatBog/qst_ambush_site_1.lua @@ -0,0 +1,27 @@ +--[[ + Script Name : SpawnScripts/PeatBog/qst_ambush_site_1.lua + Script Purpose : Handles quest updates for the first ambush site + Script Author : Scatman + Script Date : 2009.05.10 + Script Notes : +--]] + +local QUEST_3 = 217 + +function spawn(NPC) + --SetRequiredQuest(NPC, QUEST_3, 1) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) +end + +function casted_on(Target, Caster) + if HasQuest(Caster, QUEST_3) and not QuestStepIsComplete(Caster, QUEST_3, 1) then + SetStepComplete(Caster, QUEST_3, 1) + --popup dialog box after inspect + end +end \ No newline at end of file diff --git a/server/SpawnScripts/PeatBog/qst_ambush_site_2.lua b/server/SpawnScripts/PeatBog/qst_ambush_site_2.lua new file mode 100644 index 000000000..c703ea098 --- /dev/null +++ b/server/SpawnScripts/PeatBog/qst_ambush_site_2.lua @@ -0,0 +1,27 @@ +--[[ + Script Name : SpawnScripts/PeatBog/qst_ambush_site_2.lua + Script Purpose : Handles quest updates for the second ambush site + Script Author : Scatman + Script Date : 2009.05.10 + Script Notes : +--]] + +local QUEST_3 = 217 + +function spawn(NPC) + --SetRequiredQuest(NPC, QUEST_3, 2) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) +end + +function casted_on(Target, Caster) + if HasQuest(Caster, QUEST_3) and not QuestStepIsComplete(Caster, QUEST_3, 2) then + SetStepComplete(Caster, QUEST_3, 2) + --popup dialog box after inspect + end +end \ No newline at end of file diff --git a/server/SpawnScripts/PeatBog/qst_ambush_site_3.lua b/server/SpawnScripts/PeatBog/qst_ambush_site_3.lua new file mode 100644 index 000000000..17c4d73e6 --- /dev/null +++ b/server/SpawnScripts/PeatBog/qst_ambush_site_3.lua @@ -0,0 +1,27 @@ +--[[ + Script Name : SpawnScripts/PeatBog/qst_ambush_site_3.lua + Script Purpose : Handles quest updates for the third ambush site + Script Author : Scatman + Script Date : 2009.05.10 + Script Notes : +--]] + +local QUEST_3 = 217 + +function spawn(NPC) + --SetRequiredQuest(NPC, QUEST_3, 3) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) +end + +function casted_on(Target, Caster) + if HasQuest(Caster, QUEST_3) and not QuestStepIsComplete(Caster, QUEST_3, 3) then + SetStepComplete(Caster, QUEST_3, 3) + --popup dialog box after inspect + end +end \ No newline at end of file diff --git a/server/SpawnScripts/PeatBog/quest_machine_in_water.lua b/server/SpawnScripts/PeatBog/quest_machine_in_water.lua new file mode 100644 index 000000000..7556ad5d4 --- /dev/null +++ b/server/SpawnScripts/PeatBog/quest_machine_in_water.lua @@ -0,0 +1,51 @@ +--[[ + Script Name : SpawnScripts/PeatBog/quest_machine_in_water.lua + Script Purpose : quest_machine_in_water + Script Author : Scatman + Script Date : 2009.05.10 + Script Notes : +--]] + +local QUEST_2 = 216 +local gnoll_spawned_recently = false + +function spawn(NPC) + --SetRequiredQuest(NPC, QUEST_2, 1) + gnoll_spawned_recently = false +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) +end + +function casted_on(Target, Caster) + if HasQuest(Caster, QUEST_2) and GetQuestStep(Caster, QUEST_2) == 1 then + if gnoll_spawned_recently == false then + gnoll_spawned_recently = true + SendMessage(Caster, "Before you can attach the beacon you hear a howl nearby.") + Gnoll = SpawnMob(GetZone(Caster), GetRandomGnollID(), false, GetX(Target), GetY(Target), GetZ(Target)) + AddHate(Caster, Gnoll, 100) + AddTimer(Target, 30000, "ResetGnoll") + else + SetStepComplete(Caster, QUEST_2, 1) + end + end +end + +function GetRandomGnollID() + choice = math.random(1, 2) + + -- 1 of 2 'a gnoll machinist' + if choice == 1 then + return 1980103 + elseif choice == 2 then + return 1980102 + end +end + +function ResetGnoll(NPC) + gnoll_spawned_recently = false +end \ No newline at end of file diff --git a/server/SpawnScripts/PeatBog/quest_shipment_1.lua b/server/SpawnScripts/PeatBog/quest_shipment_1.lua new file mode 100644 index 000000000..12a45811e --- /dev/null +++ b/server/SpawnScripts/PeatBog/quest_shipment_1.lua @@ -0,0 +1,67 @@ +--[[ + Script Name : SpawnScripts/PeatBog/quest_shipment_1.lua + Script Purpose : quest_shipment_1 + Script Author : Scatman + Script Date : 2009.05.11 + Script Notes : +--]] + +local QUEST_4 = 218 + +function spawn(NPC) + --SetRequiredQuest(NPC, QUEST_4) +end + +function respawn(NPC) + Spawn(NPC) +end + +function hailed(NPC, Spawn) +end + +function casted_on(Target, Caster) + if HasQuest(Caster, QUEST_4) then + if IsBox1(Target) == true and not QuestStepIsComplete(Caster, QUEST_4, 1) then + SendMessage(Caster, "Charges set for 5 seconds.") + SetStepComplete(Caster, QUEST_4, 1) + AddTimer(Target, 5000, "BlowUpBox") + elseif IsBox2(Target) == true and not QuestStepIsComplete(Caster, QUEST_4, 2) then + SendMessage(Caster, "Charges set for 5 seconds.") + SetStepComplete(Caster, QUEST_4, 2) + AddTimer(Target, 5000, "BlowUpBox") + elseif IsBox3(Target) == true and not QuestStepIsComplete(Caster, QUEST_4, 3) then + SendMessage(Caster, "Charges set for 5 seconds.") + SetStepComplete(Caster, QUEST_4, 3) + AddTimer(Target, 5000, "BlowUpBox") + end + end +end + +function IsBox1(Box) + if math.floor(GetX(Box)) == 688 and math.floor(GetY(Box)) == -35 and math.floor(GetZ(Box)) == 600 then + return true + else + return false + end +end + +function IsBox2(Box) + if math.floor(GetX(Box)) == 753 and math.floor(GetY(Box)) == -33 and math.floor(GetZ(Box)) == 604 then + return true + else + return false + end +end + +function IsBox3(Box) + if math.floor(GetX(Box)) == 797 and math.floor(GetY(Box)) == -33 and math.floor(GetZ(Box)) == 580 then + return true + else + return false + end +end + +function BlowUpBox(Box) + -- make box go boom. need visual + Despawn(Box) +end \ No newline at end of file diff --git a/server/SpawnScripts/PillarsFlame/anomadiccarpetkeeper.lua b/server/SpawnScripts/PillarsFlame/anomadiccarpetkeeper.lua new file mode 100644 index 000000000..20917f5bd --- /dev/null +++ b/server/SpawnScripts/PillarsFlame/anomadiccarpetkeeper.lua @@ -0,0 +1,161 @@ +--[[ + Script Name : SpawnScripts/PillarsFlame/anomadiccarpetkeeper.lua + Script Purpose : A Nomadic Carpet Keeper (700148) + Script Author : Neatz09 + Script Date : 4/17/2019 + Script Notes : +--]] + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_2_1042.mp3", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "I would like to travel.", "dlg_1_1") + AddConversationOption(conversation, "Nowhere.") + StartConversation(conversation, NPC, Spawn, "Greetings traveler, how can I assist you today?") + end + +function dlg_1_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + local con = CreateConversation() + + if GetSpawnLocationID(NPC) == 584677 then + --Giant's Field-- + AddConversationOption(con, "To Prophet's Peak", "FieldToPeak") + AddConversationOption(con, "To Stinging Isle.", "FieldToIsle") + AddConversationOption(con, "To Swiftrider's Caravan.", "FieldToSwift") + AddConversationOption(con, "To T'Narev.", "FieldToNarev") + elseif GetSpawnLocationID(NPC) == 584675 then + --Prophet's Peak-- + AddConversationOption(con, "To Giant's Field.", "PeakToField") + AddConversationOption(con, "To Stinging Isle.", "PeakToIsle") + AddConversationOption(con, "To Swiftrider's Caravan.", "PeakToSwift") + AddConversationOption(con, "To T'Narev.", "PeakToNarev") + elseif GetSpawnLocationID(NPC) == 584676 then + --Stinging Isle-- + AddConversationOption(con, "To Giant's Field.", "IsleToField") + AddConversationOption(con, "To Prophet's Peak.", "IsleToPeak") + AddConversationOption(con, "To Swiftrider's Caravan.", "IsleToSwift") + AddConversationOption(con, "To T'Narev.", "IsleToNarev") + elseif GetSpawnLocationID(NPC) == 584673 then + --Swiftrider's Caravan-- + AddConversationOption(con, "To Giant's Field.", "SwiftToField") + AddConversationOption(con, "To Prophet's Peak.", "SwiftToPeak") + AddConversationOption(con, "To Stinging Isle.", "SwiftToIsle") + AddConversationOption(con, "To T'Narev.", "SwiftToNarev") + elseif GetSpawnLocationID(NPC) == 584674 then + --T'Narev-- + AddConversationOption(con, "To Giant's Field.", "NarevToField") + AddConversationOption(con, "To Prophet's Peak.", "NarevToPeak") + AddConversationOption(con, "To Stinging Isle.", "NarevToIsle") + AddConversationOption(con, "To Swiftrider's Caravan.", "NarevToSwift") + else + PlayFlavor(NPC, "", "Not implemented yet!", "cry", 0, 0, Spawn) + end + AddConversationOption(con, "Nowhere.") + StartConversation(con, NPC, Spawn, "Where to?") +end + +function FieldToPeak(NPC, Spawn) + StartAutoMount(Spawn, 738) + SetMount(Spawn, 1369) +end + +function FieldToIsle(NPC, Spawn) + StartAutoMount(Spawn, 740) + SetMount(Spawn, 1369) +end + +function FieldToSwift(NPC, Spawn) + StartAutoMount(Spawn, 732) + SetMount(Spawn, 1369) +end + +function FieldToNarev(NPC, Spawn) + StartAutoMount(Spawn, 739) + SetMount(Spawn, 1369) +end + +function PeakToField(NPC, Spawn) + StartAutoMount(Spawn, 742) + SetMount(Spawn, 1369) +end + +function PeakToIsle(NPC, Spawn) + StartAutoMount(Spawn, 743) + SetMount(Spawn, 1369) +end + +function PeakToSwift(NPC, Spawn) + StartAutoMount(Spawn, 734) + SetMount(Spawn, 1369) +end + +function PeakToNarev(NPC, Spawn) + StartAutoMount(Spawn, 741) + SetMount(Spawn, 1369) +end + +function IsleToField(NPC, Spawn) + StartAutoMount(Spawn, 745) + SetMount(Spawn, 1369) +end + +function IsleToPeak(NPC, Spawn) + StartAutoMount(Spawn, 746) + SetMount(Spawn, 1369) +end + +function IsleToSwift(NPC, Spawn) + StartAutoMount(Spawn, 733) + SetMount(Spawn, 1369) +end + +function IsleToNarev(NPC, Spawn) + StartAutoMount(Spawn, 744) + SetMount(Spawn, 1369) +end + +function SwiftToField(NPC, Spawn) + StartAutoMount(Spawn, 728) + SetMount(Spawn, 1369) +end + +function SwiftToPeak(NPC, Spawn) + StartAutoMount(Spawn, 730) + SetMount(Spawn, 1369) +end + +function SwiftToIsle(NPC, Spawn) + StartAutoMount(Spawn, 729) + SetMount(Spawn, 1369) +end + +function SwiftToNarev(NPC, Spawn) + StartAutoMount(Spawn, 727) + SetMount(Spawn, 1369) +end + +function NarevToField(NPC, Spawn) + StartAutoMount(Spawn, 735) + SetMount(Spawn, 1369) +end + +function NarevToPeak(NPC, Spawn) + StartAutoMount(Spawn, 736) + SetMount(Spawn, 1369) +end + +function NarevToIsle(NPC, Spawn) + StartAutoMount(Spawn, 737) + SetMount(Spawn, 1369) +end + +function NarevToSwift(NPC, Spawn) + StartAutoMount(Spawn, 731) + SetMount(Spawn, 1369) +end \ No newline at end of file diff --git a/server/SpawnScripts/Qeynos/acaninewatcher.lua b/server/SpawnScripts/Qeynos/acaninewatcher.lua new file mode 100644 index 000000000..2bad0c3d7 --- /dev/null +++ b/server/SpawnScripts/Qeynos/acaninewatcher.lua @@ -0,0 +1,21 @@ +--[[ + Script Name : SpawnScripts/Qeynos/acaninewatcher.lua + Script Author : Cynnar + Script Date : 2019.04.28 04:04:16 + Script Purpose : + : +--]] + +function spawn(NPC) +MoveToLocation(NPC, 432.51, -21.56, 284.73, 1) + +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) +end + +function respawn(NPC) + +end + diff --git a/server/SpawnScripts/QeynosHarbor/Aliindar.lua b/server/SpawnScripts/QeynosHarbor/Aliindar.lua new file mode 100644 index 000000000..0e32bd00e --- /dev/null +++ b/server/SpawnScripts/QeynosHarbor/Aliindar.lua @@ -0,0 +1,29 @@ +--[[ + Script Name : SpawnScripts/QeynosHarbor/Aliindar.lua + Script Author : TyroneSWG + Script Date : 2019.01.23 03:01:35 + Script Purpose : Broker Aliindar's Voiceover files. (Note: they aren't playing not sure why.) + : +--]] + +function spawn(NPC) + SetPlayerProximityFunction(NPC, 5, "InRange", "LeaveRange") +end + +function hailed(NPC, Spawn) + --PlayVoice(Spawn, "voiceover/english/broker_aliidar/qey_harbor/031_con_merchant_aliindar_erudite_2_hail_52cd8074.mp3", mp3_key1, mp3_key2) + Say(NPC, "Something something hailed voiceover here", Spawn) +end + +function respawn(NPC) + +end + +function InRange(NPC, Spawn) + --PlayVoice(Spawn, "voiceover/english/broker_aliidar/qey_harbor/031_con_merchant_aliindar_erudite_2_aoi_1fefa590.mp3", mp3_key1, mp3_key2) + Say(NPC, "Something Something area voice trigger here") +end + +function LeaveRange(NPC, Spawn) +end + diff --git a/server/SpawnScripts/QeynosHarbor/IanCathlan.lua b/server/SpawnScripts/QeynosHarbor/IanCathlan.lua new file mode 100644 index 000000000..c62d18415 --- /dev/null +++ b/server/SpawnScripts/QeynosHarbor/IanCathlan.lua @@ -0,0 +1,41 @@ +--[[ + Script Name : SpawnScripts/QeynosHarbor/IanCathlan.lua + Script Author : Zcoretri + Script Date : 2017.06.02 05:06:14 + Script Purpose : + : +--]] + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + local conversation = CreateConversation() + + AddConversationOption(conversation, "I was just being friendly. Good day to you.") + AddConversationOption(conversation, "You wouldn't happen to know where I can get some good armor, would you?", "Option1") + StartConversation(conversation, NPC, Spawn, "An' hail ta ye as well. Can ol' Ian help ya with somethin', or are ya just bein' friendly?") +end + +function Option1(NPC, Spawn) + FaceTarget(NPC, Spawn) + local conversation = CreateConversation() + + AddConversationOption(conversation, "Maybe ... what do you want me to do?", "Option2") + StartConversation(conversation, NPC, Spawn, "I might tell ya, if you help me out. In return, I'll give you some old armor that I can have refitted for you.") +end + +function Option2(NPC, Spawn) + FaceTarget(NPC, Spawn) + local conversation = CreateConversation() + + AddConversationOption(conversation, "I can help you look. Where should I start?", "Option3") + StartConversation(conversation, NPC, Spawn, "My family has a history of losing things. I was hoping you could help me look for a few items; some are very sentimental.") +end + +function Option3(NPC, Spawn) + FaceTarget(NPC, Spawn) + local conversation = CreateConversation() + + AddConversationOption(conversation, "I'll return if I find anything.") + StartConversation(conversation, NPC, Spawn, "I've a list of places where I may have misplaced a few things. Check the area to see if you can find anything. ") +end + diff --git a/server/SpawnScripts/QeynosHarbor/aQeynoscitizen.lua b/server/SpawnScripts/QeynosHarbor/aQeynoscitizen.lua new file mode 100644 index 000000000..4f598daa4 --- /dev/null +++ b/server/SpawnScripts/QeynosHarbor/aQeynoscitizen.lua @@ -0,0 +1,13 @@ +--[[ + Script Name : SpawnScripts/QeynosHarbor/aQeynoscitizen.lua + Script Author : Zcoretri + Script Date : 2017.06.02 04:06:39 + Script Purpose : + : +--]] + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + local conversation = CreateConversation() + +end \ No newline at end of file diff --git a/server/SpawnScripts/QueensColony/BankerBogfoot.lua b/server/SpawnScripts/QueensColony/BankerBogfoot.lua new file mode 100644 index 000000000..050331de1 --- /dev/null +++ b/server/SpawnScripts/QueensColony/BankerBogfoot.lua @@ -0,0 +1,17 @@ +--[[ + Script Name : SpawnScripts/QueensColony/BankerBogfoot.lua + Script Author : Zcoretri + Script Date : 2015.07.30 + Script Purpose : Banker Bogfoot dialog + : +--]] + +function spawn(NPC) + hailed(NPC, Spawn) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_3_1006.mp3", "As a banker it is my job to hold items and coin for you for safe-keeping. If you would like to learn more, speak with Trainer Zidget Sprogrudder. She is just east of me, around the corner.", "", 0, 0, Spawn) +end + diff --git a/server/SpawnScripts/QueensColony/BarthMignus.lua b/server/SpawnScripts/QueensColony/BarthMignus.lua new file mode 100644 index 000000000..27f4ccace --- /dev/null +++ b/server/SpawnScripts/QueensColony/BarthMignus.lua @@ -0,0 +1,14 @@ +--[[ + Script Name : SpawnScripts/QueensColony/BarthMignus.lua + Script Author : Zcoretri + Script Date : 2015.07.30 + Script Purpose : Barth Mignus dialog + : +--]] + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + PlayFlavor(NPC, "", "I hear Murrar Shar is on the island.", "", 1689589577, 4560189, Spawn) +end + + diff --git a/server/SpawnScripts/QueensColony/CaptainVarlos.lua b/server/SpawnScripts/QueensColony/CaptainVarlos.lua new file mode 100644 index 000000000..60e1cc0ac --- /dev/null +++ b/server/SpawnScripts/QueensColony/CaptainVarlos.lua @@ -0,0 +1,107 @@ +--[[ + Script Name : SpawnScripts/QueensColony/CaptainVarlos.lua + Script Author : Zcoretri + Script Date : 2015.07.27 + Script Purpose : Captail Varlos dialog + : +--]] + +function spawn(NPC) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/captain_varlos/boat_06p_tutorial02/varlos_0_027.mp3", "", "", 2285948102, 2994720481, Spawn) + AddConversationOption(conversation, "Yes. Take me to Qeynos.", "AreYouSure") + AddConversationOption(conversation, "Who are you?", "WhoAreYou") + AddConversationOption(conversation, "No, I'd like to explore more.") + StartConversation(conversation, NPC, Spawn, "So, ya' ready ta go ashore matey?") +end + +function WhoAreYou(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/captain_varlos/boat_06p_tutorial02/varlos_0_003.mp3", "", "", 2565389482, 560555759, Spawn) + AddConversationOption(conversation, "I think I'm ready to leave now.", "AreYouSure") + AddConversationOption(conversation, "I'd like to explore more. Goodbye.") + StartConversation(conversation, NPC, Spawn, "I am Captain Draik Varlos, and this 'ere fine ship is the Far Journey. I can give ya' a ride to Qeynos when yer ready to leave the island.") +end + +function AreYouSure(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/captain_varlos/tutorial_island02_fvo_hail3.mp3", "", "", 1155995604, 1406357895, Spawn) + AddConversationOption(conversation, "I'm ready for the challenges ahead. Take me to Qeynos.", "AreYouSure2") + AddConversationOption(conversation, "On second thought, maybe I should wait a bit.") + StartConversation(conversation, NPC, Spawn, "Ya' best be sure ta' explore the whole island, ya' hear! Norrath can be a dangerous place ya' know?") +end + +function AreYouSure2(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/captain_varlos/boat_06p_tutorial02/varlos_0_013.mp3", "", "", 3880459741, 170861362, Spawn) + AddConversationOption(conversation, "Thanks for the ride!", "AreYouSure3") + AddConversationOption(conversation, "Wait! I've changed my mind. Let me off.") + StartConversation(conversation, NPC, Spawn, "Yar! That's what we be needin'. Ok then, off to Qeynos!") +end + +function AreYouSure3(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/captain_varlos/boat_06p_tutorial02/varlos_0_028.mp3", "", "", 1009737776, 2173458794, Spawn) + AddConversationOption(conversation, "To Qeynos!", "LeaveIsland") + AddConversationOption(conversation, "Oh, nevermind! I'll stay!") + StartConversation(conversation, NPC, Spawn, "Don't ya' mind, we get paid ta' do that.") +end + +function LeaveIsland(NPC, Spawn) + Race = GetRace(Spawn) + + -- Human / Kerra + if Race == 9 or Race == 11 then + ZoneRef = GetZone("Nettleville") + Zone(ZoneRef,Spawn) + + -- Erudite + elseif Race == 3 then + ZoneRef = GetZone("Starcrest") + Zone(ZoneRef,Spawn) + + -- Barbarian / Dwarf + elseif Race == 0 or Race == 2 then + ZoneRef = GetZone("Graystone") + Zone(ZoneRef,Spawn) + + -- High Elf / Froglok + elseif Race == 4 or Race == 8 then + ZoneRef = GetZone("Castleview") + Zone(ZoneRef,Spawn) + + -- Half Elf / Wood Elf + elseif Race == 6 or Race == 15 then + ZoneRef = GetZone("Willowwood") + Zone(ZoneRef,Spawn) + + -- Gnome / Halfling + elseif Race == 5 or Race == 7 then + ZoneRef = GetZone("Baubbleshire") + Zone(ZoneRef,Spawn) + + -- Fae + elseif Race == 17 then + ZoneRef = GetZone("Kelethin") + Zone(ZoneRef,Spawn) + + -- Unknown + else + Say(Spawn, "Sorry, I cannot deal with someone of your race. Try visiting the boat on the other island!") + ZoneRef = GetZone("OutpostOverlord") + Zone(ZoneRef,Spawn) + end +end \ No newline at end of file diff --git a/server/SpawnScripts/QueensColony/CaptainWarrik.lua b/server/SpawnScripts/QueensColony/CaptainWarrik.lua new file mode 100644 index 000000000..0bbefff0d --- /dev/null +++ b/server/SpawnScripts/QueensColony/CaptainWarrik.lua @@ -0,0 +1,188 @@ +--[[ + Script Name : SpawnScripts/QueensColony/CaptainWarrik.lua + Script Author : Zcoretri + Script Date : 2015.07.30 + Script Purpose : Captain Warrik dialog + : +--]] + +function spawn(NPC) + +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/captain_warrik/tutorial_island02_revamp/trainers/world_interaction/world_int001.mp3", "", "", 204642470, 358524335, Spawn) + AddConversationOption(conversation, "Teach me about interacting with people and objects around Norrath.", "dlg_6_1") + AddConversationOption(conversation, "I'll return for instruction later.") + StartConversation(conversation, NPC, Spawn, "Greetings," .. GetName(Spawn) .. ". You're the new addition to the colony that we've been hearing about. I've been stationed here by the queen to show you ways to interact with the world around you.") +end + +function dlg_6_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/captain_warrik/tutorial_island02_revamp/trainers/world_interaction/world_int002.mp3", "", "", 3266378152, 2419021702, Spawn) + AddConversationOption(conversation, "In what ways can I interact with other player characters?", "dlg_6_2") + AddConversationOption(conversation, "How do I interact with non-player characters?", "dlg_6_5") + AddConversationOption(conversation, "How can I interact with objects in the world?", "dlg_6_10") + AddConversationOption(conversation, "What can I do with items in my inventory?", "dlg_6_13") + AddConversationOption(conversation, "I'll return for instruction later.") + StartConversation(conversation, NPC, Spawn, "You can interact with several types of individuals and items. Among these are other player characters, non-player characters, objects in the world, and items in your inventory.") +end + +function dlg_6_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/captain_warrik/tutorial_island02_revamp/trainers/world_interaction/world_int003.mp3", "", "", 2351145322, 214243520, Spawn) + AddConversationOption(conversation, "How can I tell which actions I can take?", "dlg_6_3") + StartConversation(conversation, NPC, Spawn, "You can perform a number of actions by right-clicking on a nearby player that you see. You can invite them to a group, follow them, talk to them, inspect their equipment, trade with them, and other choices. Some actions can only be taken while you are in a group with them.") +end + +function dlg_6_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/captain_warrik/tutorial_island02_revamp/trainers/world_interaction/world_int004.mp3", "", "", 217492850, 1476210113, Spawn) + AddConversationOption(conversation, "How do I talk to other players?", "dlg_6_4") + StartConversation(conversation, NPC, Spawn, "If one of the right-click choices is grey, it means it is unavailable. You either need to be closer to the other player or be grouped with them.") +end + +function dlg_6_4(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/captain_warrik/tutorial_island02_revamp/trainers/world_interaction/world_int005.mp3", "", "", 499804299, 1158500700, Spawn) + AddConversationOption(conversation, "How do I interact with non-player characters?", "dlg_6_5") + AddConversationOption(conversation, "How can I interact with objects in the world?", "dlg_6_10") + AddConversationOption(conversation, "What can I do with items in my inventory?", "dlg_6_13") + AddConversationOption(conversation, "I'll return for instruction later.") + StartConversation(conversation, NPC, Spawn, "If you are near another player, you can type something on the command line of your Chat window and press enter. All other nearby players can see this text. To send a private message, right-click on the character and select the 'tell' option, or hit the T key and type their name.") +end + +function dlg_6_5(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/captain_warrik/tutorial_island02_revamp/trainers/world_interaction/world_int006.mp3", "", "", 887410160, 3920006297, Spawn) + AddConversationOption(conversation, "How do I tell the difference?", "dlg_6_6") + StartConversation(conversation, NPC, Spawn, "There are a variety of non-player characters (NPCs) around Norrath. Some of them are there to talk to or buy from, while others are meant to fight.") +end + +function dlg_6_6(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/captain_warrik/tutorial_island02_revamp/trainers/world_interaction/world_int007.mp3", "", "", 2117851027, 1566096416, Spawn) + AddConversationOption(conversation, "Are there different ways to interact with a single NPC?", "dlg_6_7") + StartConversation(conversation, NPC, Spawn, "The shape of your mouse pointer when you move it over an NPC indicates the primary means of interaction. If the pointer becomes a speech bubble, you can talk to that NPC. If it becomes crossed swords, you can attack them. If it looks like a stack of coins, that's a merchant.") +end + +function dlg_6_7(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/captain_warrik/tutorial_island02_revamp/trainers/world_interaction/world_int008.mp3", "", "", 4204591829, 775598592, Spawn) + AddConversationOption(conversation, "Are there multiple ways to talk to an NPC?", "dlg_6_8") + StartConversation(conversation, NPC, Spawn, "You can see all the ways you can interact with an NPC by right-clicking on it. If an option is grey, you probably need to be closer to it.") +end + +function dlg_6_8(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/captain_warrik/tutorial_island02_revamp/trainers/world_interaction/world_int009.mp3", "", "", 3050147178, 1058091559, Spawn) + AddConversationOption(conversation, "How do I go about attacking an NPC?", "dlg_6_9") + StartConversation(conversation, NPC, Spawn, "Well, you're talking to me, so you know at least one way! You can either right-click and select 'hail,' click on them if that is their default action, or target them and hit the H key.") +end + +function dlg_6_9(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/captain_warrik/tutorial_island02_revamp/trainers/world_interaction/world_int010.mp3", "", "", 3207862275, 1652184320, Spawn) + AddConversationOption(conversation, "In what ways can I interact with other player characters?", "dlg_6_2") + AddConversationOption(conversation, "How do I interact with non-player characters?", "dlg_6_5") + AddConversationOption(conversation, "How can I interact with objects in the world?", "dlg_6_10") + AddConversationOption(conversation, "What can I do with items in my inventory?", "dlg_6_13") + AddConversationOption(conversation, "I'll return for instruction later.") + StartConversation(conversation, NPC, Spawn, "To learn about combat, talk to Trainer Hayl McGuinness near the western archway. To learn about evaluating your opponents, talk to Trainer Marla Gilliam, who is near Hayl. Both these trainers provide information vital to your success as an adventurer.") +end + +function dlg_6_10(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/captain_warrik/tutorial_island02_revamp/trainers/world_interaction/world_int011.mp3", "", "", 986431613, 4262526566, Spawn) + AddConversationOption(conversation, "How do I tell what the glowing object will do?","dlg_6_11") + StartConversation(conversation, NPC, Spawn, "If something glows when you move your mouse over it, you can interact with it. It might be a door or gate that takes you to another location, a book you see on a table, a chest you can loot, or another type of object. Some items only glow if you are on a quest to find them.") +end + +function dlg_6_11(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/captain_warrik/tutorial_island02_revamp/trainers/world_interaction/world_int012.mp3", "", "", 281123238, 3770593908, Spawn) + AddConversationOption(conversation, "Can anything bad happen by clicking on an object?", "dlg_6_12") + StartConversation(conversation, NPC, Spawn, "Sometimes you'll receive information on what the object will do when you hold your mouse over it. Other times you will need to right-click on the object to see what action you can take with it.") +end + +function dlg_6_12(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/captain_warrik/tutorial_island02_revamp/trainers/world_interaction/world_int013.mp3", "", "", 22184547, 714173495, Spawn) + AddConversationOption(conversation, "In what ways can I interact with other player characters?", "dlg_6_2") + AddConversationOption(conversation, "How do I interact with non-player characters?", "dlg_6_5") + AddConversationOption(conversation, "What can I do with items in my inventory?", "dlg_6_13") + AddConversationOption(conversation, "I'll return for instruction later.") + StartConversation(conversation, NPC, Spawn, "Be wary of clicking on an object when you don't know what it will do, as something unexpected could happen. You might draw the attention of someone who didn't want you to touch it, or might end up somewhere you didn't plan to go.") +end + +function dlg_6_13(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/captain_warrik/tutorial_island02_revamp/trainers/world_interaction/world_int014.mp3", "", "", 3003386223, 1374934830, Spawn) + AddConversationOption(conversation, "How do I know what I can do with an item?", "dlg_6_14") + StartConversation(conversation, NPC, Spawn, "Sometimes you'll receive items in your inventory, such as when you complete a quest or loot a chest from a fallen opponent. Other times, you'll receive an item by clicking on a glowing object you see in the world, or that is given to you by another player.") +end + +function dlg_6_14(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/captain_warrik/tutorial_island02_revamp/trainers/world_interaction/world_int015.mp3", "", "", 921421095, 934280804, Spawn) + AddConversationOption(conversation, "What are some common things I can do with items?", "dlg_6_15") + StartConversation(conversation, NPC, Spawn, "Open your inventory with the I key, or open up all bags you are carrying by pressing the B key. You can bring up a menu of choices for what you can do with an item by right-clicking on it. Double-clicking the left mouse button on something in your inventory will try to do that item's default action.") +end + +function dlg_6_15(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/captain_warrik/tutorial_island02_revamp/trainers/world_interaction/world_int016.mp3", "", "", 3594960522, 2732369829, Spawn) + AddConversationOption(conversation, "What about other types of items?", "dlg_6_16") + StartConversation(conversation, NPC, Spawn, "If the item is a piece of armor or a weapon, you can equip it. If it's a book or a note, you can read it. If it is food or drink, you can consume it. Some items, such as furniture, can be placed while you are inside the house or apartment you own.") +end + +function dlg_6_16(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/captain_warrik/tutorial_island02_revamp/trainers/world_interaction/world_int017.mp3", "", "", 1124732255, 409658595, Spawn) + AddConversationOption(conversation, "In what ways can I interact with other player characters?", "dlg_6_2") + AddConversationOption(conversation, "How do I interact with non-player characters?", "dlg_6_5") + AddConversationOption(conversation, "How can I interact with objects in the world?", "dlg_6_10") + AddConversationOption(conversation, "I'll return for instruction later.") + StartConversation(conversation, NPC, Spawn, "Some items in your inventory can give you quests or provide other benefits. Right-click on items in your inventory and select the 'Examine' option to learn more about any item you are carrying.") +end + + diff --git a/server/SpawnScripts/QueensColony/ClericMaraVaen.lua b/server/SpawnScripts/QueensColony/ClericMaraVaen.lua new file mode 100644 index 000000000..8ccd51e5b --- /dev/null +++ b/server/SpawnScripts/QueensColony/ClericMaraVaen.lua @@ -0,0 +1,237 @@ +--[[ + Script Name : SpawnScripts/QueensColony/ClericMaraVaen.lua + Script Purpose : Cleric Mara'Vaen + Script Author : John Adams + Script Date : 2008.09.20 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +local JoiningTheForwardRanks = 163 +local TheSourceOfEvil = 164 + +function spawn(NPC) + SetLuaBrain(NPC) + SetBrainTick(NPC, 500) + + ProvidesQuest(NPC, TheSourceOfEvil) +end + +function respawn(NPC) + spawn(NPC) +end + +-- Brain override +function Think(NPC, Target) + local mostHated = GetMostHated(NPC) + if mostHated ~= nil then +Say(NPC, "Has most hated") + aggro(NPC, mostHated) + end +end + +-- Should only cast on lost scouts (ghost version) +function aggro(NPC, Spawn) +Say(NPC, "In aggro()") + if GetTempVariable(NPC, "CASTING") ~= "True" then +Say(NPC, "Casting spell") + SetTempVariable(NPC, "CASTING", "True") + CastSpell(Spawn, 130027, 1, NPC) + AddTimer(NPC, 1610, "FinishedCasting") + end +end + +-- Timer callback to allow casting again +function FinishedCasting(NPC) + SetTempVariable(NPC, "CASTING", "False") +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + if HasCompletedQuest(Spawn, JoiningTheForwardRanks) then + if HasCompletedQuest(Spawn, TheSourceOfEvil) then + ThanksForHelp(Spawn, NPC, true) + elseif HasQuest(Spawn, TheSourceOfEvil) then + ThanksForHelp(Spawn, NPC, true) + else + ThanksForHelp(Spawn, NPC, false) + end + elseif HasQuest(Spawn, JoiningTheForwardRanks) then + if GetQuestStep(Spawn, JoiningTheForwardRanks) == 1 then + DoNotFret(NPC, Spawn) + elseif GetQuestStep(Spawn, JoiningTheForwardRanks) == 2 then + KeepTrying(NPC, Spawn) + elseif GetQuestStep(Spawn, JoiningTheForwardRanks) == 3 then + GreatGame(NPC, Spawn) + elseif GetQuestStep(Spawn, JoiningTheForwardRanks) == 4 then + ClearMorak(NPC, Spawn) + elseif GetQuestStep(Spawn, JoiningTheForwardRanks) == 5 then + QuestComplete(NPC, Spawn) + end + else + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/cleric_mara_vaen/tutorial_island02_revamp/quests/citizenship/clericmaravaen/clericmaravaen011.mp3", "", "", 1665452069, 4059457198, Spawn) + AddConversationOption(conversation, "Okay.") + StartConversation(conversation, NPC, Spawn, "I don't have any tasks for you yet. Speak with Murrar Shar outside of Myrrin's Tower. He should have some tasks for you.") + end +end + +function DoNotFret(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/cleric_mara_vaen/tutorial_island02_revamp/quests/citizenship/clericmaravaen/clericmaravaen001.mp3", "", "", 2971501331, 3435878603, Spawn) + AddConversationOption(conversation, "I guess you know me?", "dlg_20_1") + AddConversationOption(conversation, "Nice to meet you, too.") + StartConversation(conversation, NPC, Spawn, "Do not fret, " .. GetName(Spawn) .. ". The hand of Qeynos reaches far and wide to help those in need.") +end + +function dlg_20_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/cleric_mara_vaen/tutorial_island02_revamp/quests/citizenship/clericmaravaen/clericmaravaen002.mp3", "", "", 2633924079, 3010054159, Spawn) + AddConversationOption(conversation, "I'm ready.", "dlg_20_2") + AddConversationOption(conversation, "I don't think I'm ready.") + StartConversation(conversation, NPC, Spawn, "Murrar sent word that you were coming. He said to be nice, hehe! No worries, I mean only the best. In any case, I'll be doing most of the work for this first task, when you're ready.") +end + +function dlg_20_2(NPC, Spawn) + SetStepComplete(Spawn, JoiningTheForwardRanks, 1) + + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/cleric_mara_vaen/tutorial_island02_revamp/quests/citizenship/clericmaravaen/clericmaravaen003.mp3", "", "", 929576879, 4035132590, Spawn) + AddConversationOption(conversation, "I'll do my best.") + StartConversation(conversation, NPC, Spawn, "You see those ghostly figures down in the canyon? Those are the souls of our scouts who were lost and consumed by evil. I believe that they may be trapped between our world and the next. I think I can resurrect them, if you can just lure them close to me.") +end + +function KeepTrying(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "I'll keep trying.") + StartConversation(conversation, NPC, Spawn, "Keep trying, I believe we can save more scouts if you get them close to me.") +end + +function GreatGame(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/cleric_mara_vaen/tutorial_island02_revamp/quests/citizenship/clericmaravaen/clericmaravaen005.mp3", "", "", 1882665589, 1902293914, Spawn) + AddConversationOption(conversation, "Bring it on!", "dlg_21_1") + AddConversationOption(conversation, "I'll be right back.") + StartConversation(conversation, NPC, Spawn, "That was a great game of cat and mouse you pulled there! Nice job, but now for the hard part.") +end + +function dlg_21_1(NPC, Spawn) + SetStepComplete(Spawn, JoiningTheForwardRanks, 3) + + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/cleric_mara_vaen/tutorial_island02_revamp/quests/citizenship/clericmaravaen/clericmaravaen006.mp3", "", "", 3734054586, 4057468106, Spawn) + AddConversationOption(conversation, "I have a feeling I know where this is going.", "dlg_21_2") + StartConversation(conversation, NPC, Spawn, "Long ago there lived a ferocious breed on this island, a species of dire wolf that the Sapswill called 'the Morak.' The Morak were cleansed from the island so it could be a safer place.") +end + +function dlg_21_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/cleric_mara_vaen/tutorial_island02_revamp/quests/citizenship/clericmaravaen/clericmaravaen007.mp3", "", "", 519840211, 2908756618, Spawn) + AddConversationOption(conversation, "Consider it done.") + StartConversation(conversation, NPC, Spawn, "The evil that builds on the island has drawn them from their graves and they hunt again. They are thick through Dead Canyon and we need to clear a path for our scouts to move forward.") +end + +function ClearMorak(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "I'm on my way.") + StartConversation(conversation, NPC, Spawn, "The Morak need to be cleared so our scouts can push forward.") +end + +function QuestComplete(NPC, Spawn) + SetStepComplete(Spawn, JoiningTheForwardRanks, 5) + + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/cleric_mara_vaen/tutorial_island02_revamp/quests/citizenship/clericmaravaen/clericmaravaen009.mp3", "", "", 72596140, 1372143516, Spawn) + AddConversationOption(conversation, "Is there anything else I can do?", "AnythingElse") + AddConversationOption(conversation, "You're welcome.") + StartConversation(conversation, NPC, Spawn, "You did it, I knew you could! Our scouts were able to clear through to the far side of the village. I'll send word back to Murrar. Thank you, " .. GetName(Spawn) .. ".") +end + +------------------------------------------------------------------------------------------------------------------ +-- QUEST 5 +------------------------------------------------------------------------------------------------------------------ + +function AnythingElse(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/cleric_mara_vaen/tutorial_island02_revamp/quests/citizenship/clericmaravaen/clericmaravaen012.mp3", "", "", 2525989430, 544085949, Spawn) + AddConversationOption(conversation, "So should I travel there?", "TravelThere") + AddConversationOption(conversation, "I'll deal with this later.") + StartConversation(conversation, NPC, Spawn, "The few scouts that broke through to the Sapswill village report a twist in this evil plot. Apparently the goblins are victims of the evil as well. A few goblins survived some sort of an attack on their village and are being held at a scout camp that has been set up on its outskirts.") +end + +function TravelThere(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/cleric_mara_vaen/tutorial_island02_revamp/quests/citizenship/clericmaravaen/clericmaravaen013.mp3", "", "", 2720199838, 3131530763, Spawn) + AddConversationOption(conversation, "On my way", "OfferQuest5") + AddConversationOption(conversation, "I can't right now.") + StartConversation(conversation, NPC, Spawn, "Yes, seek out Sorcerer Oofala. He is charged with protecting the camp there and should have more information. The camp is in an alcove on the far east side of the Abandoned Village. You will need to traverse around the Village to get to the camp. Good luck.") +end + +function ThanksForHelp(Spawn, NPC, onNextQuest) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/cleric_mara_vaen/tutorial_island02_revamp/quests/citizenship/clericmaravaen/clericmaravaen010.mp3", "", "", 1827963300, 3132811539, Spawn) + if onNextQuest == false then + AddConversationOption(conversation, "Is there anything else I can do?", "AnythingElse") + end + AddConversationOption(conversation, "And also with you.") + StartConversation(conversation, NPC, Spawn, "Thank you for your help. Peace be with you.") +end + + +function OfferQuest5(NPC, Spawn) + OfferQuest(NPC, Spawn, TheSourceOfEvil) +end + +--[[ raw_conversations + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_2_1011.mp3", "", "", 0, 0) +--]] + +--[[ + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/cleric_mara_vaen/tutorial_island02_revamp/quests/citizenship/clericmaravaen/clericmaravaen003.mp3", "", "", 929576879, 4035132590, Spawn) + AddConversationOption(conversation, "I'll do my best.", "dlg_20_3") + StartConversation(conversation, NPC, Spawn, "You see those ghostly figures down in the canyon? Those are the souls of our scouts who were lost and consumed by evil. I believe that they may be trapped between our world and the next. I think I can resurrect them, if you can just lure them close to me.") + +function dlg_21_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/cleric_mara_vaen/tutorial_island02_revamp/quests/citizenship/clericmaravaen/clericmaravaen006.mp3", "", "", 3734054586, 4057468106, Spawn) + AddConversationOption(conversation, "I have a feeling I know where this is going.", "dlg_21_2") + StartConversation(conversation, NPC, Spawn, "Long ago there lived a ferocious breed on this island, a species of dire wolf that the Sapswill called 'the Morak.' The Morak were cleansed from the island so it could be a safer place.") +end + +function dlg_21_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/cleric_mara_vaen/tutorial_island02_revamp/quests/citizenship/clericmaravaen/clericmaravaen007.mp3", "", "", 519840211, 2908756618, Spawn) + AddConversationOption(conversation, "Consider it done.", "dlg_21_3") + StartConversation(conversation, NPC, Spawn, "The evil that builds on the island has drawn them from their graves and they hunt again. They are thick through Dead Canyon and we need to clear a path for our scouts to move forward.") +end + +--]] diff --git a/server/SpawnScripts/QueensColony/DefenderBristlebrow.lua b/server/SpawnScripts/QueensColony/DefenderBristlebrow.lua new file mode 100644 index 000000000..01f62709c --- /dev/null +++ b/server/SpawnScripts/QueensColony/DefenderBristlebrow.lua @@ -0,0 +1,36 @@ +--[[ + Script Name : SpawnScripts/QueensColony/DefenderBristlebrow.lua + Script Author : Zcoretri + Script Date : 2015.07.30 + Script Purpose : Defender Bristlebrow dialog + : +--]] + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + Say(NPC, "No time for idle talk, I need to keep focused.") +end + +function aggro(NPC) + opt1 = math.random(1,9) + if opt1 == 1 then + PlayFlavor(NPC, "voiceover/english/optional3/barbarian_base_1/ft/barbarian/barbarian_base_1_1_aggro_gm_ea4ba638.mp3", "Sentries, alarm!", "", 83822322, 1846685810) + elseif opt1 == 2 then + PlayFlavor(NPC, "voiceover/english/optional3/barbarian_base_1/ft/barbarian/barbarian_base_1_1_aggro_gm_394a7fe3.mp3", "Not sneaky enough to get past me.", "", 3715495401, 2861752836) + elseif opt1 == 3 then + PlayFlavor(NPC, "voiceover/english/optional3/barbarian_base_1/ft/barbarian/barbarian_base_1_1_victory_gm_e707fef0.mp3", "Flee cowards, before I slaughter you all!", "", 3583801206, 1799910552) + elseif opt1 == 4 then + PlayFlavor(NPC, "voiceover/english/optional3/barbarian_base_1/ft/barbarian/barbarian_base_1_1_aggro_gm_d2336620.mp3", "Your overconfidence will be your undoing.", "", 1735697087, 1551611219) + end +end + +function killed(NPC) + opt2 = math.random(1,5) + if opt2 == 1 then + PlayFlavor(NPC, "voiceover/english/optional3/barbarian_base_1/ft/barbarian/barbarian_base_1_1_victory_gm_f87005b5.mp3", "Now you will have peace.", "", 3932457554, 2553847722) + elseif opt2 == 2 then + PlayFlavor(NPC, "voiceover/english/optional3/barbarian_base_1/ft/barbarian/barbarian_base_1_1_victory_gm_155a84f0.mp3", "You fought well but not well enough!", "", 450019542, 4158631545) + elseif opt2 == 3 then + PlayFlavor(NPC, "voiceover/english/optional3/barbarian_base_1/ft/barbarian/barbarian_base_1_1_maoscout_gm_abf544b6.mp3", "Time to run, you sneaky coward!", "", 401121050, 1757713301) + end +end \ No newline at end of file diff --git a/server/SpawnScripts/QueensColony/DefenderKuglup.lua b/server/SpawnScripts/QueensColony/DefenderKuglup.lua new file mode 100644 index 000000000..dc9a64bb7 --- /dev/null +++ b/server/SpawnScripts/QueensColony/DefenderKuglup.lua @@ -0,0 +1,36 @@ +--[[ + Script Name : SpawnScripts/QueensColony/DefenderKuglup.lua + Script Author : Zcoretri + Script Date : 2015.07.30 + Script Purpose : Defender Kuglup dialog + : +--]] + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + Say(NPC, "There's another one!") +end + +function aggro(NPC) + opt1 = math.random(1,7) + if opt1 == 1 then + PlayFlavor(NPC, "voiceover/english/barbarian_base_1/ft/barbarian/barbarian_base_1_1_aggro_gf_ea4ba638.mp3", "Sentries, alarm!", "", 3264181187, 3210126852) + elseif opt1 == 2 then + PlayFlavor(NPC, "voiceover/english/barbarian_base_1/ft/barbarian/barbarian_base_1_1_aggro_gf_d2336620.mp3", "You overconfidence will be your undoing.", "", 2263836674, 942538899) + elseif opt1 == 3 then + PlayFlavor(NPC, "voiceover/english/barbarian_base_1/ft/barbarian/barbarian_base_1_1_aggro_gf_394a7fe3.mp3", "Not sneaky enough to get past me.", "", 3417148270, 2109180100) + elseif opt1 == 4 then + PlayFlavor(NPC, "voiceover/english/barbarian_base_1/ft/barbarian/barbarian_base_1_1_maoscout_gf_abf544b6.mp3", "Time to run, you sneaky coward!", "", 195739451, 1913168121) + end +end + +function killed(NPC) + opt2 = math.random(1,6) + if opt2 == 1 then + PlayFlavor(NPC, "voiceover/english/barbarian_base_1/ft/barbarian/barbarian_base_1_1_victory_gf_155a84f0.mp3", "You fought well but not well enough!", "", 1144735491, 2154607760) + elseif opt2 == 2 then + PlayFlavor(NPC, "voiceover/english/barbarian_base_1/ft/barbarian/barbarian_base_1_1_victory_gf_e707fef0.mp3", "Flee cowards, before I slaughter you all!", "", 1852613611, 2630125108) + elseif opt2 == 3 then + PlayFlavor(NPC, "voiceover/english/barbarian_base_1/ft/barbarian/barbarian_base_1_1_victory_gf_f87005b5.mp3", "Now you will have peace.", "", 2974774059, 665726799) + end +end \ No newline at end of file diff --git a/server/SpawnScripts/QueensColony/Deianeira.lua b/server/SpawnScripts/QueensColony/Deianeira.lua new file mode 100644 index 000000000..d8a600f26 --- /dev/null +++ b/server/SpawnScripts/QueensColony/Deianeira.lua @@ -0,0 +1,164 @@ +--[[ + Script Name : SpawnScripts/QueensColony/Deianeira.lua + Script Purpose : Deianeira + Script Author : Scatman + Script Date : 2008.09.20 + Script Notes : +--]] + +local Tainted = 183 +local GhostsAndGoblins = 184 + +function spawn(NPC) + ProvidesQuest(NPC, Tainted) + ProvidesQuest(NPC, GhostsAndGoblins) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + + if HasCompletedQuest(Spawn, Tainted) then + if HasCompletedQuest(Spawn, GhostsAndGoblins) or HasQuest(Spawn, GhostsAndGoblins) then + Quest2RandomSay(NPC, Spawn) + else + NotConvinced(NPC, Spawn) + end + elseif HasQuest(Spawn, Tainted) then + if GetQuestStep(Spawn, Tainted) < 9 then + listenToTheSilence(NPC, Spawn) + elseif GetQuestStep(Spawn, Tainted) == 9 then + listenToTheSilence(NPC, Spawn, 2) + end + else + listenToTheSilence(NPC, Spawn, 1) + end +end + +function listenToTheSilence(NPC, Spawn, option) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/deianeira/tutorial_island02_revamp/quests/deianeira/deianeira001.mp3", "", "", 974807054, 1523157599, Spawn) + + if option == 1 then + AddConversationOption(conversation, "Listen to the silence?", "quest1_before1") + elseif option == 2 then + AddConversationOption(conversation, "I found a parchment that hinted Direspike was under the influence of something else.", "FoundParchment") + end + + AddConversationOption(conversation, "Then I'll leave you in peace.") + StartConversation(conversation, NPC, Spawn, "Shhh...I'm trying to listen to the silence. Whisper please.") +end + +function quest1_before1(npc, spawn) + conversation = CreateConversation() + + PlayFlavor(npc, "voiceover/english/tutorial_revamp/deianeira/tutorial_island02_revamp/quests/deianeira/deianeira002.mp3", "", "", 1920565588, 3425134667, Spawn) + AddConversationOption(conversation, "The view's not so clear from here.", "quest1_before2") + StartConversation(conversation, npc, spawn, "Away from the noise over in the camp. I like standing here. You can see where you've been and where you can go. You know what awaits you if you go further in. If only everything were as simple as that, where all your choices are clear and you can see what awaits.") +end + +function quest1_before2(npc, spawn) + conversation = CreateConversation() + + PlayFlavor(npc, "voiceover/english/tutorial_revamp/deianeira/tutorial_island02_revamp/quests/deianeira/deianeira003.mp3", "", "", 3746790389, 1573998689, Spawn) + AddConversationOption(conversation, "What evil do you sense?", "quest1_before3") + AddConversationOption(conversation, "Then I'll have no more dealings with you.") + StartConversation(conversation, npc, spawn, "True, but it's clearer than, say, the difference between good and evil. All those around here who are ''good'' avoid me because I was born ''evil''. I grew up in Freeport. Does that make them better than me somehow, that I chose to leave Freeport to work on behalf of the Queen only recently? Who knows? Yet I must be evil; I can sense the evil in others.") +end + +function quest1_before3(npc, spawn) + conversation = CreateConversation() + + PlayFlavor(npc, "voiceover/english/tutorial_revamp/deianeira/tutorial_island02_revamp/quests/deianeira/deianeira004.mp3", "", "", 428169630, 2788724653, Spawn) + AddConversationOption(conversation, "I'll do what I can.", "quest1_offerQuest") + AddConversationOption(conversation, "Perhaps some other time.") + StartConversation(conversation, npc, spawn, "They say that there is a taint rising from an unknown source, polluting this place and corrupting the inhabitants. I feel it is much simpler than that. There are spiders in the Tainted Forest, poisonous ones. With their venom, they can cause untold suffering. The search for ''evil'' sometimes has a mundane cause. We must rid the Colony of these spiders.", spawn) +end + +function quest1_offerQuest(npc, spawn) + OfferQuest(npc, spawn, Tainted) +end + +function FoundParchment(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/deianeira/tutorial_island02_revamp/quests/deianeira/deianeira005.mp3", "", "", 2666912393, 3640169922, Spawn) + AddConversationOption(conversation, "The crawlers were being influenced by a hidden totem.", "dlg_17_2") + AddConversationOption(conversation, "I'm not finished with them yet.") + StartConversation(conversation, NPC, Spawn, "The influence of something else? But I've sensed the evil in them. They aren't capable of planning to be evil. It must be their poison. It must!") +end + +function dlg_17_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/deianeira/tutorial_island02_revamp/quests/deianeira/deianeira006.mp3", "", "", 1022748345, 1750032594, Spawn) + AddConversationOption(conversation, "There is something that runs deeper than spider venom here.", "NotConvinced") + StartConversation(conversation, NPC, Spawn, "I was so sure... Well, there goes that theory. Tell me, you may be less biased than someone like me: do you sense anything in the Tainted Forest? Anything at all?") +end + +function NotConvinced(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/deianeira/tutorial_island02_revamp/quests/deianeira/deianeira007.mp3", "", "", 2498899827, 4165283209, Spawn) + AddConversationOption(conversation, "So you moved to Qeynos?", "dlg_17_4") + StartConversation(conversation, NPC, Spawn, "I'm not convinced, but this does throw a gnome wrench into things. I don't believe that there is such a thing as evil. Look at me: I was raised to believe Qeynos was a horrible place filled with mindless drones. Once I came of age I realized that the Overlord's minions were spreading lies.") +end + +function dlg_17_4(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/deianeira/tutorial_island02_revamp/quests/deianeira/deianeira008.mp3", "", "", 56356150, 3856145142, Spawn) + AddConversationOption(conversation, "You were wrong about the toxic crawlers' poison.", "dlg_17_5") + StartConversation(conversation, NPC, Spawn, "'Moved' is such a polite way to say it. I betrayed Freeport to do what I felt in my heart was right. And yet...not everyone in Qeynos accepts me or my decision. So I came here, where I could help remove this island's taint. The honorable Qeynosians won't work with me, so I've had to devise my own theories.") +end + +function dlg_17_5(NPC, Spawn) + SetStepComplete(Spawn, Tainted, 9) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/deianeira/tutorial_island02_revamp/quests/deianeira/deianeira009.mp3", "", "", 3026175083, 2234137219, Spawn) + AddConversationOption(conversation, "Sure.", "dlg_17_6") + AddConversationOption(conversation, "Not yet.") + StartConversation(conversation, NPC, Spawn, "We all make mistakes. Hopefully, this is not a mistake I'll live to regret. Are you willing to help me test another theory?") +end + +function dlg_17_6(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/deianeira/tutorial_island02_revamp/quests/deianeira/deianeira010.mp3", "", "", 3135820636, 1299129722, Spawn) + AddConversationOption(conversation, "I'll check into it.", "OfferQuest2") + AddConversationOption(conversation, "I'll need to do this later.") + StartConversation(conversation, NPC, Spawn, "The Tainted Forest is key. Look for the Forest Keeper, a treant who lives in a nook in the hillside just beyond these trees. It was a guardian of this place and has resisted the taint. It may be willing to speak to you. It chooses not to speak to a betrayer like me.") +end + +function OfferQuest2(NPC, Spawn) + OfferQuest(NPC, Spawn, GhostsAndGoblins) +end + +function Quest2RandomSay(NPC, Spawn) + FaceTarget(NPC, Spawn) + choice = math.random(1, 5) + + if choice == 1 then + Say(NPC, "There's only so much I can do to earn someone's trust.") + elseif choice == 2 then + Say(NPC, "It's up to us to find the answers; they're never handed to us.") + elseif choice == 3 then + Say(NPC, "Evil is not always what it appears to be. That's the danger.") + elseif choice == 4 then + Say(NPC, "We Ayr'Dal are proud, though others may not appreciate us.") + elseif choice == 5 then + Say(NPC, "Freeport isn't that bad of a place, if you like watching over your shoulder all the time.") + end +end \ No newline at end of file diff --git a/server/SpawnScripts/QueensColony/Durg.lua b/server/SpawnScripts/QueensColony/Durg.lua new file mode 100644 index 000000000..cad244657 --- /dev/null +++ b/server/SpawnScripts/QueensColony/Durg.lua @@ -0,0 +1,27 @@ +--[[ + Spawn Template + Script Name : Durg.lua + Script Purpose : Durg's spawnscript at the tree house in the Queen's Colony. + Script Author : Scatman + Script Date : 2008.08.29 + Script Notes : +--]] + +local ADiplomaticMission = 166 + +function spawn(NPC) +end + +function hailed(NPC, Spawn) + choice = math.random(1, 2) + + if HasQuest(Spawn, ADiplomaticMission) and not QuestStepIsComplete(Spawn, ADiplomaticMission, 6) then + SetStepComplete(Spawn, ADiplomaticMission, 6) + end + + if choice == 1 then + Say(NPC, "Durg happy to meet you!") + else + Say(NPC, "Must protect diplomat!") + end +end \ No newline at end of file diff --git a/server/SpawnScripts/QueensColony/EbikWobblecog.lua b/server/SpawnScripts/QueensColony/EbikWobblecog.lua new file mode 100644 index 000000000..2d78b7b06 --- /dev/null +++ b/server/SpawnScripts/QueensColony/EbikWobblecog.lua @@ -0,0 +1,227 @@ +--[[ + Script Name : SpawnScripts/QueensColony/EbikWobblecog.lua + Script Purpose : Ebik Wobblecog + Script Author : John Adams + Script Date : 2008.09.20 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +local EbiksMissingParts = 185 + +function spawn(NPC) + ProvidesQuest(NPC, EbiksMissingParts) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + if HasQuest(Spawn, EbiksMissingParts) then + if GetQuestStep(Spawn, EbiksMissingParts) == 4 then + -- handing in quest + SetStepComplete(Spawn, EbiksMissingParts, 4) + + PlayFlavor(NPC, "voiceover/english/island_of_refuge/ebikwobblecog/ior_ebikwobblecog_021.mp3", "", "", 1116547002, 1635450019, Spawn) + AddConversationOption(conversation, "Good luck.") + StartConversation(conversation, NPC, Spawn, "Yes, yes, yes! There are all the parts I need! Thank you ever so much. Please take this as a token of my appreciation. I'm sure the boat will be here any minute now.") + else + -- hasn't finished the quest yet + PlayFlavor(NPC, "voiceover/english/ebik_wobblecog/tutorial_island01/ebik/ebik_secondtalk_01.mp3", "", "", 688070292, 1255284608, Spawn) + AddConversationOption(conversation, "Okay.") + StartConversation(conversation, NPC, Spawn, "I need all the parts, I can't leave without them and luckily the boat to Qeynos hasn't showed up yet. Please help me find all the parts.") + end + elseif HasCompletedQuest(Spawn, EbiksMissingParts) then + -- quest completed + AddConversationOption(conversation, "Good luck.") + StartConversation(conversation, NPC, Spawn, "The boat really should be here by now. It must be running late, or maybe my pocket clock has a frizzer misaligned again... Hmmmm.") + else + -- does not have the quest yet + PlayFlavor(NPC, "voiceover/english/ebik_wobblecog/tutorial_island01/ebik/ebik_firsttalk_01.mp3", "", "", 2713964680, 2172979410, Spawn) + AddConversationOption(conversation, "Why are you going to Qeynos?", "dlg_23_1") + AddConversationOption(conversation, "Good luck with that.") + StartConversation(conversation, NPC, Spawn, "Why, hello there! I was just sitting here waiting for the boat to Qeynos.") + end +end + +function dlg_23_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/ebik_wobblecog/tutorial_island01/ebik/ebik_firsttalk_02.mp3", "", "", 532888096, 1705696510, Spawn) + AddConversationOption(conversation, "What was the news?", "dlg_23_2") + AddConversationOption(conversation, "Safe travels.") + StartConversation(conversation, NPC, Spawn, "Ahh, I'm going there to meet my father. He dropped me off on this island because he was afraid our boat wouldn't make the trip. I begged him to stay, but he said he had urgent news for Qeynos.") +end + +function dlg_23_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/ebik_wobblecog/tutorial_island01/ebik/ebik_firsttalk_03.mp3", "", "", 3248832255, 3165995891, Spawn) + AddConversationOption(conversation, "Why was his ship distracting?", "dlg_23_3") + AddConversationOption(conversation, "Goodbye.") + StartConversation(conversation, NPC, Spawn, "I'm not quite sure. He was in such a hurry that he never told me. Also I may have been a little distracted by his ship, it was really amazing.") +end + +function dlg_23_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/ebik_wobblecog/tutorial_island01/ebik/ebik_firsttalk_04.mp3", "", "", 1312724951, 594166513, Spawn) + AddConversationOption(conversation, "Go on.", "dlg_23_4") + StartConversation(conversation, NPC, Spawn, "Because it was under water, of course! Have you ever seen a boat that runs beneath the waves? I certainly haven't. It was such genius, I spent the entire voyage inspecting it.") +end + +function dlg_23_4(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/ebik_wobblecog/tutorial_island01/ebik/ebik_firsttalk_05.mp3", "", "", 2209355729, 410792148, Spawn) + AddConversationOption(conversation, "What curse?", "dlg_23_5") + AddConversationOption(conversation, "I want no part of your curse, goodbye.") + StartConversation(conversation, NPC, Spawn, "I'm certain he hadn't planned on it falling below the surface. It's just another example of our curse, I suppose.") +end + +function dlg_23_5(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/ebik_wobblecog/tutorial_island02/ebik_firsttalk_06.mp3", "", "", 848346297, 415788395, Spawn) + AddConversationOption(conversation, "Yes, I'd like that.", "dlg_23_6") + AddConversationOption(conversation, "Not really.") + StartConversation(conversation, NPC, Spawn, "Surely you've heard of the Wobblecog family curse of miscalculation? No... no, I suppose you haven't, have you? Well, it doesn't appear that the boat is here yet. I imagine I've got time to tell you about our curse if you'd like to hear it.") +end + +function dlg_23_6(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/ebik_wobblecog/tutorial_island02/ebik_firsttalk_07.mp3", "", "", 489617943, 459263052, Spawn) + AddConversationOption(conversation, "Please go on.", "dlg_23_7") + StartConversation(conversation, NPC, Spawn, "Very well. It began long ago in Ak'Anon when the king decided to hold a contest. It was grand. The king invited everyone to make a clockwork king, and the one that most resembled him would win.") +end + +function dlg_23_7(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/ebik_wobblecog/tutorial_island01/ebik/ebik_firsttalk_08.mp3", "", "", 2658473484, 2726816701, Spawn) + AddConversationOption(conversation, "What happened then?", "dlg_23_8") + AddConversationOption(conversation, "That's nice, fairwell.") + StartConversation(conversation, NPC, Spawn, "The two favored inventors were my ancestor, Tizik Wobblecog, and an ingenious, but maligned tinkerer named Meldrath. They both submitted their designs, and after much deliberation it was found that the Wobblecog plan provided a much more accurate interpretation of the king.") +end + +function dlg_23_8(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/ebik_wobblecog/tutorial_island01/ebik/ebik_firsttalk_09.mp3", "", "", 168646029, 2064100068, Spawn) + AddConversationOption(conversation, "Do go on.", "dlg_23_9") + StartConversation(conversation, NPC, Spawn, "Tizik's clockwork became the royal doppelganger of course, and Meldrath became infuriated. He placed a curse on my family that has lasted every generation from then onward.") +end + +function dlg_23_9(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/ebik_wobblecog/tutorial_island01/ebik/ebik_firsttalk_10.mp3", "", "", 468670444, 2791058506, Spawn) + AddConversationOption(conversation, "That does sound bothersome.", "dlg_23_10") + StartConversation(conversation, NPC, Spawn, "He cursed us with miscalculation! It's nearly driven my family to madness. ") +end + +function dlg_23_10(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/ebik_wobblecog/tutorial_island01/ebik/ebik_firsttalk_11.mp3", "", "", 1677273819, 2525140274, Spawn) + AddConversationOption(conversation, "That sounds devastating.", "dlg_23_11") + AddConversationOption(conversation, "Good luck with that.") + StartConversation(conversation, NPC, Spawn, "We're the most ingenious inventors, you see. We have truly inspired ideas, but can not ever see them through to completion because we fumble some inane formula.") +end + +function dlg_23_11(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/ebik_wobblecog/tutorial_island01/ebik/ebik_firsttalk_12.mp3", "", "", 605082040, 3732575966, Spawn) + AddConversationOption(conversation, "I see.", "dlg_23_12") + StartConversation(conversation, NPC, Spawn, "Oh, it is! Take my father for instance. We thought he had finally overcome the curse when he made that boat. It looked so beautiful and was more complete than any other Wobblecog invention has been in centuries. ") +end + +function dlg_23_12(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/ebik_wobblecog/tutorial_island01/ebik/ebik_firsttalk_13.mp3", "", "", 2893072579, 3745020880, Spawn) + AddConversationOption(conversation, "How did you get here if the boat sunk?", "dlg_23_13") + AddConversationOption(conversation, "Oh boy...I really don't have time for this.") + StartConversation(conversation, NPC, Spawn, "Then, as soon as we got it out in the ocean, it sunk like a rock. Who knew iron wouldn't float?") +end + +function dlg_23_13(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/ebik_wobblecog/tutorial_island01/ebik/ebik_firsttalk_14.mp3", "", "", 950110533, 2594458588, Spawn) + AddConversationOption(conversation, "But it moved along the floor?", "dlg_23_14") + AddConversationOption(conversation, "Are you still talking? Goodbye.") + StartConversation(conversation, NPC, Spawn, "Luckily, my father had compensated for the curse. He knew something was bound to go wrong, so he completely encapsulated the boat, making it water tight just in case something went awry. Sure enough, the moment she left the berth the Ticking Tock fell straight to the sea floor.") +end + +function dlg_23_14(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/ebik_wobblecog/tutorial_island01/ebik/ebik_firsttalk_15.mp3", "", "", 2110642575, 2339438650, Spawn) + AddConversationOption(conversation, "I see...", "dlg_23_15") + AddConversationOption(conversation, "Okay then...I'm just gonna walk away now.") + StartConversation(conversation, NPC, Spawn, "Oh, yes! There were several waterproofed whirligigs set up in a flagnuvian configuration to displace the meganominal gnoggnards.") +end + +function dlg_23_15(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/ebik_wobblecog/tutorial_island01/ebik/ebik_firsttalk_16.mp3", "", "", 2068602594, 1935966397, Spawn) + AddConversationOption(conversation, "What's wrong?", "dlg_23_16") + AddConversationOption(conversation, "And that's my cue to leave.") + StartConversation(conversation, NPC, Spawn, "So here I am, sitting on the dock with all of the extra par... hmm... Oh! This seems to be a bit of a problem.") +end + +function dlg_23_16(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/ebik_wobblecog/tutorial_island01/ebik/ebik_firsttalk_17.mp3", "", "", 1279276755, 1158727410, Spawn) + AddConversationOption(conversation, "Maybe I can help?", "dlg_23_17") + AddConversationOption(conversation, "Sounds like you're out of luck.") + StartConversation(conversation, NPC, Spawn, "I'm missing the extra parts that my father asked me to collect. Oh no! This is disastrous! I can't leave the dock because I'll miss the boat and I can't go to Qeynos without those parts! What am I going to do?") +end + +function dlg_23_17(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/ebik_wobblecog/tutorial_island01/ebik/ebik_firsttalk_18.mp3", "", "", 651304560, 3462850597) + AddConversationOption(conversation, "What parts are you missing?", "dlg_23_18") + StartConversation(conversation, NPC, Spawn, "You'd do that for me? Oh, thank you very, very, much! I'll stay here and ask the boat captain to wait for you to return, should he come. I'm missing three parts and I have no idea where they could be. I know they're on the island somewhere!") +end + +function dlg_23_18(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/ebik_wobblecog/tutorial_island01/ebik/ebik_firsttalk_19.mp3", "", "", 3704607131, 803524082, Spawn) + AddConversationOption(conversation, "I'll get right on it.", "dlg_23_19") + AddConversationOption(conversation, "I can't right now.") + StartConversation(conversation, NPC, Spawn, "I'm missing a size 7 clunker, a copper-coated springer, and a triangle spinner. If you could find them and bring them to me, I'd be forever grateful!") +end + +function dlg_23_19(NPC, Spawn) + FaceTarget(NPC, Spawn) + OfferQuest(NPC, Spawn, EbiksMissingParts) +end \ No newline at end of file diff --git a/server/SpawnScripts/QueensColony/GalanCrestrider.lua b/server/SpawnScripts/QueensColony/GalanCrestrider.lua new file mode 100644 index 000000000..f9eaa782c --- /dev/null +++ b/server/SpawnScripts/QueensColony/GalanCrestrider.lua @@ -0,0 +1,30 @@ +--[[ + Script Name : SpawnScripts/QueensColony/GalanCrestrider.lua + Script Author : Zcoretri + Script Date : 2015.07.30 + Script Purpose : Galan Crestrider dialog + : +--]] + +function spawn(NPC) + SetPlayerProximityFunction(NPC, 10, "InRange") +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_3_1022.mp3", "", "", 0, 0, Spawn) +end + +function InRange(NPC, Player) + choice = math.random(1,2) + + if choice == 1 then + PlayFlavor(NPC, "", "Welcome to Crestrider's Trading Post.", "", 1689589577, 4560189, Spawn) + else + PlayFlavor(NPC, "", "If you can trade it, we can buy it.", "", 1689589577, 4560189, Spawn) + end +end diff --git a/server/SpawnScripts/QueensColony/Geredo.lua b/server/SpawnScripts/QueensColony/Geredo.lua new file mode 100644 index 000000000..9076de3ca --- /dev/null +++ b/server/SpawnScripts/QueensColony/Geredo.lua @@ -0,0 +1,23 @@ +--[[ + Script Name : SpawnScripts/QueensColony/Geredo.lua + Script Author : Zcoretri + Script Date : 2015.07.27 + Script Purpose : Geredo dialog + : +--]] + +function spawn(NPC) +end + +function respawn(NPC) + spawn(NPC) +end +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + choice = math.random(1,2) + if choice == 1 then + PlayFlavor(NPC, "voiceover/english/geredo/boat_06p_tutorial02_fvo_001.mp3", "Do you happen to have any mechanical leg extenders? I want to see the water.", "agree", 2902186099, 1357276764, Spawn) + else + PlayFlavor(NPC, "voiceover/english/geredo/boat_06p_tutorial02_fvo_002.mp3", "Thinking I should design a new mechanical boat. It would be perfect! Yes, perfect indeed!", "ponder", 2630458163, 1309095480, Spawn) + end +end \ No newline at end of file diff --git a/server/SpawnScripts/QueensColony/GogginCogspring.lua b/server/SpawnScripts/QueensColony/GogginCogspring.lua new file mode 100644 index 000000000..f575fa4bc --- /dev/null +++ b/server/SpawnScripts/QueensColony/GogginCogspring.lua @@ -0,0 +1,13 @@ +--[[ + Script Name : SpawnScripts/QueensColony/GogginCogspring.lua + Script Author : Zcoretri + Script Date : 2015.07.30 + Script Purpose : Goggin Cogspring dialog + : +--]] + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_1_1006.mp3", "Some day I'll get out there and work off this tab I have with Galan.", "", 0, 0, Spawn) +end + diff --git a/server/SpawnScripts/QueensColony/Gonk.lua b/server/SpawnScripts/QueensColony/Gonk.lua new file mode 100644 index 000000000..b23fd9a48 --- /dev/null +++ b/server/SpawnScripts/QueensColony/Gonk.lua @@ -0,0 +1,27 @@ +--[[ + Spawn Template + Script Name : Gonk.lua + Script Purpose : Gonk's spawnscript at the tree house in the Queen's Colony. + Script Author : Scatman + Script Date : 2008.08.29 + Script Notes : +--]] + +local ADiplomaticMission = 166 + +function spawn(NPC) +end + +function hailed(NPC, Spawn) + choice = math.random(1, 2) + + if HasQuest(Spawn, ADiplomaticMission) and not QuestStepIsComplete(Spawn, ADiplomaticMission, 7) then + SetStepComplete(Spawn, ADiplomaticMission, 7) + end + + if choice == 1 then + Say(NPC, "Gonk likes diplomats!") + else + Say(NPC, "Gonk not bonk diplomat!") + end +end \ No newline at end of file diff --git a/server/SpawnScripts/QueensColony/GrakusStonemallet.lua b/server/SpawnScripts/QueensColony/GrakusStonemallet.lua new file mode 100644 index 000000000..102e66b86 --- /dev/null +++ b/server/SpawnScripts/QueensColony/GrakusStonemallet.lua @@ -0,0 +1,13 @@ +--[[ + Script Name : SpawnScripts/QueensColony/GrakusStonemallet.lua + Script Author : Zcoretri + Script Date : 2015.07.30 + Script Purpose : Grakus Stonemallet dialog + : +--]] + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + PlayFlavor(NPC, "", "The Sapswill stout that we used to get from the goblins has all but disappeared. We need to fix this problem immediately.", "", 1689589577, 4560189, Spawn) +end + diff --git a/server/SpawnScripts/QueensColony/Groak.lua b/server/SpawnScripts/QueensColony/Groak.lua new file mode 100644 index 000000000..9436cf766 --- /dev/null +++ b/server/SpawnScripts/QueensColony/Groak.lua @@ -0,0 +1,33 @@ +--[[ + Script Name : SpawnScripts/QueensColony/Groak.lua + Script Author : Zcoretri + Script Date : 2015.07.30 + Script Purpose : Groak dialog + : +--]] + +function spawn(NPC) + SetPlayerProximityFunction(NPC, 10, "InRange") +end + +function respawn(NPC) + spawn(NPC) +end + +function InRange(NPC, Player) + choice = math.random(1,2) + + if choice == 1 then + PlayFlavor(NPC, "", "Good thing Murrar Shar is here!", "", 1689589577, 4560189, Spawn) + else + PlayFlavor(NPC, "", "It's amazing what you can make from a fish.", "", 1689589577, 4560189, Spawn) + end +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_2_1016.mp3", "", "", 0, 0, Spawn) +end + + + diff --git a/server/SpawnScripts/QueensColony/HannaDeeppockets.lua b/server/SpawnScripts/QueensColony/HannaDeeppockets.lua new file mode 100644 index 000000000..ef0edc11b --- /dev/null +++ b/server/SpawnScripts/QueensColony/HannaDeeppockets.lua @@ -0,0 +1,26 @@ +--[[ + Script Name : SpawnScripts/QueensColony/HannaDeeppockets.lua + Script Author : Zcoretri + Script Date : 2015.07.30 + Script Purpose : Hanna Deeppockets dialog + : +--]] + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + choice = math.random(1,2) + + -- need the halfling greeting voiceovers + if choice == 1 then + PlayFlavor(NPC, "", "All your basic necessities you'll find here.", "", 1689589577, 4560189, Spawn) + else + PlayFlavor(NPC, "", "The Deeppockets have a long history of good deals, ask anyone!", "", 0, 0, Spawn) + end +end + +function targeted(NPC, Spawn) + if GetDistance(Spawn, NPC) < 10 then + hailed(NPC, Spawn) + end +end + diff --git a/server/SpawnScripts/QueensColony/HelmsmanNyles.lua b/server/SpawnScripts/QueensColony/HelmsmanNyles.lua new file mode 100644 index 000000000..7ad99e2cb --- /dev/null +++ b/server/SpawnScripts/QueensColony/HelmsmanNyles.lua @@ -0,0 +1,25 @@ +--[[ + Script Name : SpawnScripts/QueensColony/HelmsmanNyles.lua + Script Author : Zcoretri + Script Date : 2015.07.27 + Script Purpose : Helmsman Nyles dialog + : +--]] + +function spawn(NPC) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + choice = math.random(1,3) + if choice == 1 then + PlayFlavor(NPC, "", "Land! I see land!", "", 1689589577, 4560189, Spawn) + elseif choice == 2 then + Say(NPC, "Ale salts! We're havin' rudder storm!") + elseif choice == 3 then + PlayFlavor(NPC, "", "Crazy! What are you talking about?", "", 1689589577, 4560189, Spawn) + end +end \ No newline at end of file diff --git a/server/SpawnScripts/QueensColony/HighChieftainGrexx.lua b/server/SpawnScripts/QueensColony/HighChieftainGrexx.lua new file mode 100644 index 000000000..4b8146502 --- /dev/null +++ b/server/SpawnScripts/QueensColony/HighChieftainGrexx.lua @@ -0,0 +1,109 @@ +--[[ + Script Name : SpawnScripts/QueensColony/HighChieftainGrexx.lua + Script Purpose : High Chieftain Grexx + Script Author : John Adams + Script Date : 2008.09.21 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +local TheSourceOfEvil = 164 +local ADiplomaticMission = 166 + +function spawn(NPC) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + if HasQuest(Spawn, ADiplomaticMission) and GetQuestStep(Spawn, ADiplomaticMission) == 8 then + SetStepComplete(Spawn, ADiplomaticMission, 8) + end + + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + if HasCompletedQuest(Spawn, TheSourceOfEvil) then + RebuildWeWill(NPC, Spawn) + elseif HasQuest(Spawn, TheSourceOfEvil) then + if GetQuestStep(Spawn, TheSourceOfEvil) == 6 then + SadTimes(NPC, Spawn) + elseif GetQuestStep(Spawn, TheSourceOfEvil) == 7 then + HeroMustGo(NPC, Spawn) + elseif GetQuestStep(Spawn, TheSourceOfEvil) == 8 then + Prophecy(NPC, Spawn) + elseif GetQuestStep(Spawn, TheSourceOfEvil) == 9 then + RebuildWeWill(NPC, Spawn) + else + WaitingForHero(NPC, Spawn) + end + else + WaitingForHero(NPC, Spawn) + end +end + +function SadTimes(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/high_chieftain_grexx/tutorial_island02_revamp/quests/citizenship/highchieftaingrexx/highchieftaingrexx001.mp3", "", "", 3594102111, 1132457141, Spawn) + AddConversationOption(conversation, "What do you mean?", "dlg_5_1") + AddConversationOption(conversation, "Sad times, indeed.") + StartConversation(conversation, NPC, Spawn, "Sad times upon us. The Great Balancing before us. Coming I knew you would be. Had to, you did.") +end + +function dlg_5_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/high_chieftain_grexx/tutorial_island02_revamp/quests/citizenship/highchieftaingrexx/highchieftaingrexx002.mp3", "", "", 2612330834, 4076610842, Spawn) + AddConversationOption(conversation, "I'll do what I can.", "dlg_5_2") + StartConversation(conversation, NPC, Spawn, "Prophecy speaks of the Great Balancing. Time when gobbies are faced with destruction, hero arrives to save us. Hero I feel from you.") +end + +function dlg_5_2(NPC, Spawn) + SetStepComplete(Spawn, TheSourceOfEvil, 6) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/high_chieftain_grexx/tutorial_island02_revamp/quests/citizenship/highchieftaingrexx/highchieftaingrexx003.mp3", "", "", 3142497620, 848770757, Spawn) + AddConversationOption(conversation, "I'll head to the cave.", "dlg_5_3") + StartConversation(conversation, NPC, Spawn, "As it was written! Sources of evil me thinks springs from cave. Fog shows us evil inside. Hero must save the Sapswill. Hero must be victorious!") +end + +function HeroMustGo(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/high_chieftain_grexx/tutorial_island02_revamp/quests/citizenship/highchieftaingrexx/highchieftaingrexx004.mp3", "", "", 2809756305, 2299623207, Spawn) + AddConversationOption(conversation, "To the cave, right.") + StartConversation(conversation, NPC, Spawn, "Cave of fog to northeast hero must go!") +end + +function Prophecy(NPC, Spawn) + SetStepComplete(Spawn, TheSourceOfEvil, 8) + FaceTarget(NPC, Spawn) + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/high_chieftain_grexx/tutorial_island02_revamp/quests/citizenship/highchieftaingrexx/highchieftaingrexx005.mp3", "", "", 4263574455, 1760884911, Spawn) + StartConversation(conversation, NPC, Spawn, "Ahhh! Truth the Prophecy speaks. The Great Balancing is complete. Evil our hero has conquered. The Sapswill shall always remember and rebuild we will in your name, ".. GetName(Spawn) .. ". Take the hero's gift.") + --Say(NPC, "Ahhh! Truth the Prophecy speaks. The Great Balancing is complete. Evil our hero has conquered. The sapswill shall always remember and rebuild we will in your name, " .. GetName(Spawn) .. ". Take the hero's gift.") +end + +function RebuildWeWill(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "Good luck.") + StartConversation(conversation, NPC, Spawn, "Rebuild we will in your name, " .. GetName(Spawn) .. "!") +end + +function WaitingForHero(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/high_chieftain_grexx/tutorial_island02_revamp/quests/citizenship/highchieftaingrexx/highchieftaingrexx007.mp3", "", "", 3809751141, 2628831609, Spawn) + AddConversationOption(conversation, "I'm just paying my respects, your...er, Grexxness.") + AddConversationOption(conversation, "The hero will be along anytime now.") + StartConversation(conversation, NPC, Spawn, "Waiting for hero we are, but the Great Balancing is not ready.") +end \ No newline at end of file diff --git a/server/SpawnScripts/QueensColony/Ingrid.lua b/server/SpawnScripts/QueensColony/Ingrid.lua new file mode 100644 index 000000000..3e8b45f42 --- /dev/null +++ b/server/SpawnScripts/QueensColony/Ingrid.lua @@ -0,0 +1,27 @@ +--[[ + Script Name : SpawnScripts/QueensColony/Ingrid.lua + Script Author : Zcoretri + Script Date : 2015.07.27 + Script Purpose : Ingrid dialog + : +--]] + +function spawn(NPC) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + + choice = math.random(1,3) + if choice == 1 then + PlayFlavor(NPC, "voiceover/english/ingrid/boat_06p_tutorial02_fvo_007.mp3", "Yo ho ho and a bottle of rum!", "", 964088856, 3568852318, Spawn) + elseif choice == 2 then + PlayFlavor(NPC, "voiceover/english/ingrid/boat_06p_tutorial02_fvo_009.mp3", "I hate rats, every time we dock they get on board and eat our supplies.", "", 3636322414, 1973183674, Spawn) + else + PlayFlavor(NPC, "voiceover/english/ingrid/boat_06p_tutorial02_fvo_008.mp3", "Don't you just love the sea?", "", 541733813, 1294072887, Spawn) + end +end \ No newline at end of file diff --git a/server/SpawnScripts/QueensColony/Leebo.lua b/server/SpawnScripts/QueensColony/Leebo.lua new file mode 100644 index 000000000..720f11c84 --- /dev/null +++ b/server/SpawnScripts/QueensColony/Leebo.lua @@ -0,0 +1,12 @@ +--[[ + Script Name : SpawnScripts/QueensColony/Leebo.lua + Script Purpose : Leebo + Script Author : John Adams + Script Date : 2008.09.21 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + PlayFlavor(NPC, "", "Upgrade your spells here!", "", 1689589577, 4560189, Spawn) +end \ No newline at end of file diff --git a/server/SpawnScripts/QueensColony/LieutenantWestfall.lua b/server/SpawnScripts/QueensColony/LieutenantWestfall.lua new file mode 100644 index 000000000..b4cbaa551 --- /dev/null +++ b/server/SpawnScripts/QueensColony/LieutenantWestfall.lua @@ -0,0 +1,13 @@ +--[[ + Script Name : SpawnScripts/QueensColony/LieutenantWestfall.lua + Script Author : Zcoretri + Script Date : 2015.07.30 + Script Purpose : Lieutenant Westfall dialog + : +--]] + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + PlayFlavor(NPC, "", "What's that there! To arms, the Morak are coming!", "point", 1689589577, 4560189, Spawn) +end + diff --git a/server/SpawnScripts/QueensColony/MaylinMeadowlark.lua b/server/SpawnScripts/QueensColony/MaylinMeadowlark.lua new file mode 100644 index 000000000..48cb1b722 --- /dev/null +++ b/server/SpawnScripts/QueensColony/MaylinMeadowlark.lua @@ -0,0 +1,12 @@ +--[[ + Script Name : SpawnScripts/QueensColony/MaylinMeadowlark.lua + Script Author : Zcoretri + Script Date : 2015.07.30 + Script Purpose : Maylin Meadowlark dialog + : +--]] + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + PlayFlavor(NPC, "", "I think I saw something moving out there!", "", 1689589577, 4560189, Spawn) +end \ No newline at end of file diff --git a/server/SpawnScripts/QueensColony/MenderMannus.lua b/server/SpawnScripts/QueensColony/MenderMannus.lua new file mode 100644 index 000000000..4caea6270 --- /dev/null +++ b/server/SpawnScripts/QueensColony/MenderMannus.lua @@ -0,0 +1,24 @@ +--[[ + Script Name : SpawnScripts/QueensColony/MenderMannus.lua + Script Author : Zcoretri + Script Date : 2015.07.30 + Script Purpose : Mender Mannus dialog + : +--]] + +function spawn(NPC) + +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_1_1002.mp3", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Thanks, I will do so.") + StartConversation(conversation, NPC, Spawn, "Hello there, " ..GetName(Spawn).. ". Menders like me repair your equipment after it is damaged due to death. For more information on repairs, speak to Trainer Zidget Sprogrudder nearby. I'll fix your gear for a small fee, but menders in Qeynos won't be quite so generous!") +end \ No newline at end of file diff --git a/server/SpawnScripts/QueensColony/MeriBogfoot.lua b/server/SpawnScripts/QueensColony/MeriBogfoot.lua new file mode 100644 index 000000000..09eb5cf5e --- /dev/null +++ b/server/SpawnScripts/QueensColony/MeriBogfoot.lua @@ -0,0 +1,24 @@ +--[[ + Script Name : SpawnScripts/QueensColony/MeriBogfoot.lua + Script Author : Zcoretri + Script Date : 2015.07.30 + Script Purpose : Meri Bogfoot dialog + : +--]] + +function spawn(NPC) + SetPlayerProximityFunction(NPC, 10, "InRange") +end + +function respawn(NPC) + spawn(NPC) +end + +function InRange(NPC, Player) + PlayFlavor(NPC, "", "Left foot, right foot, spin...", "", 1689589577, 4560189) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_2_1005.mp3", "", "", 0, 0, Spawn) +end \ No newline at end of file diff --git a/server/SpawnScripts/QueensColony/MurrarShar.lua b/server/SpawnScripts/QueensColony/MurrarShar.lua new file mode 100644 index 000000000..3ef02f9e4 --- /dev/null +++ b/server/SpawnScripts/QueensColony/MurrarShar.lua @@ -0,0 +1,357 @@ +--[[ + Script Name : SpawnScripts/QueensColony/MurrarShar.lua + Script Purpose : Murrar Shar + Script Author : Zcoretri + Script Date : 2015.07.30 + Script Notes : +--]] + +local WelcomeToNorrath = 133 +local TheArtOfCombat = 132 +local APresenceOfEvil = 131 +local IntoTheTaintedForest = 162 +local JoiningTheForwardRanks = 163 +local TheSourceOfEvil = 164 + +local quest2_text = nil + +function spawn(NPC) + ProvidesQuest(NPC, TheArtOfCombat) + ProvidesQuest(NPC, APresenceOfEvil) + ProvidesQuest(NPC, IntoTheTaintedForest) + ProvidesQuest(NPC, JoiningTheForwardRanks) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + if not HasCompletedQuest(Spawn, TheArtOfCombat) then + if HasQuest(Spawn, TheArtOfCombat) then + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/murrar_shar/tutorial_island02_revamp/quests/citizenship/murrarshar/murrarshar010.mp3", "", "", 2562990263, 480187891, Spawn) + if GetQuestStep(Spawn, TheArtOfCombat) == 4 then + quest2_text = "I'm glad to hear it, for now we have need of our courage" + AddConversationOption(conversation, "I defeated my sparring partner and learned about combat.", "DefeatedSparringPartner") + end + AddConversationOption(conversation, "Not yet.") + AddConversationOption(conversation, "I would prefer to leave the island and go to Qeynos.", "LeaveIsland") + StartConversation(conversation, NPC, Spawn, "Hello again, " .. GetName(Spawn) .. ". Have you passed the test that Trainer Hayl McGuinness set before you?") + else + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/murrar_shar/tutorial_island02_revamp/quests/citizenship/murrarshar/murrarshar007.mp3", "", "", 4090368410, 193364605, Spawn) + AddConversationOption(conversation, "Who are you?", "WhoAreYou") + AddConversationOption(conversation, "I would prefer to leave the island now.", "LeaveIsland") + AddConversationOption(conversation, "I will return after I look around a bit.") + StartConversation(conversation, NPC, Spawn, "Welcome, " .. GetName(Spawn) .. ", I have been anticipating your arrival. Your skills are greatly needed here at the Queen's Colony.") + end + elseif not HasCompletedQuest(Spawn, APresenceOfEvil) then + if HasQuest(Spawn, APresenceOfEvil) then + if GetQuestStep(Spawn, APresenceOfEvil) <= 5 then + CurrentTaskInJournal(NPC, Spawn) + else + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/murrar_shar/tutorial_island02_revamp/quests/citizenship/murrarshar/murrarshar014.mp3", "", "", 3089319907, 3490280411, Spawn) + AddConversationOption(conversation, "I agree. There's something behind all of this.", "BehindAllThis") + AddConversationOption(conversation, "How do I leave the island?", "LeaveIsland") + StartConversation(conversation, NPC, Spawn, "Hmm... yes, these reports are disturbing indeed. I cannot place the source that tainted our beloved soldiers.") + end + else + --give 2nd quest + quest2_text = "Hello " .. GetName(Spawn) + DefeatedSparringPartner(NPC, Spawn) + end + elseif not HasCompletedQuest(Spawn, IntoTheTaintedForest) then + if HasQuest(Spawn, IntoTheTaintedForest) then + if GetQuestStep(Spawn, IntoTheTaintedForest) <= 5 then + CurrentTaskInJournal(NPC, Spawn) + elseif GetQuestStep(Spawn, IntoTheTaintedForest) == 6 then + Quest3Done(NPC, Spawn) + end + else + ReadyToHelpNow(NPC, Spawn) + end + elseif not HasCompletedQuest(Spawn, JoiningTheForwardRanks) then + if HasQuest(Spawn, JoiningTheForwardRanks) then + CurrentTaskInJournal(NPC, Spawn) + else + SamplesExamined(Spawn, NPC) + end + elseif not HasCompletedQuest(Spawn, TheSourceOfEvil) then + if HasQuest(Spawn, TheSourceOfEvil) then + if GetQuestStep(Spawn, TheSourceOfEvil) == 9 then + Quest5Done(NPC, Spawn) + else + CurrentTaskInJournal(NPC, Spawn) + end + else + GoblinsAreVictims(NPC, Spawn) + end + else + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/murrar_shar/tutorial_island02_revamp/quests/citizenship/murrarshar/murrarshar030.mp3", "", "", 3165714952, 1304016911, Spawn) + AddConversationOption(conversation, "Farewell.") + AddConversationOption(conversation, "How do I leave the island?", "LeaveIsland") + StartConversation(conversation, NPC, Spawn, "Qeynos will live for you, my friend. Your deeds here will not be forgotten. Farewell.") + end + +end + +function LeaveIsland(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/murrar_shar/tutorial_island02_revamp/quests/citizenship/murrarshar/murrarshar_leave000.mp3", "", "", 752128822, 2974687933, Spawn) + AddConversationOption(conversation, "Where can I find Captain Varlos?", "WhereCaptainVarlos") + StartConversation(conversation, NPC, Spawn, "If you feel you are ready to leave the island you can do so at any time. We have an arrangement with Captain Varlos. He will take you to the fair city of Qeynos.") +end + + +function WhereCaptainVarlos(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/murrar_shar/tutorial_island02_revamp/quests/citizenship/murrarshar/murrarshar_leave001.mp3", "", "", 3799088988, 2590558774, Spawn) + AddConversationOption(conversation, "Thank you.") + StartConversation(conversation, NPC, Spawn, "Head through the south archway to the beach. Once there, you will find Varlos' ship on the dock. He should be aboard the ship. I hope you enjoy Qeynos, " .. GetName(Spawn) .. ".") +end + +function WhoAreYou(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/murrar_shar/tutorial_island02_revamp/quests/citizenship/murrarshar/murrarshar001.mp3", "", "", 4276663740, 184288328, Spawn) + AddConversationOption(conversation, "What is the purpose of this colony?", "PurposeColony") + AddConversationOption(conversation, "We'll talk about this later.") + StartConversation(conversation, NPC, Spawn, "I am Murrar Shar, General of the Royal Antonican Guard and prrrotector of Queen Antonia Bayle.") +end + +function PurposeColony(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/murrar_shar/tutorial_island02_revamp/quests/citizenship/murrarshar/murrarshar002.mp3", "", "", 1723259718, 37401788, Spawn) + AddConversationOption(conversation, "Tell me more about Qeynos.", "MoreAboutQeynos") + AddConversationOption(conversation, "I'd like to get to work. How can I help you?", "HowCanHelp") + AddConversationOption(conversation, "A pleasure to meet you, but I must go.") + StartConversation(conversation, NPC, Spawn, "The Queen's Colony was established as a training ground for prospective citizens of Qeynos. Our great city needs valiant defenders.") +end + +function MoreAboutQeynos(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/murrar_shar/tutorial_island02_revamp/quests/citizenship/murrarshar/murrarshar003.mp3", "", "", 490663804, 1186290249, Spawn) + AddConversationOption(conversation, "Tell me more about Freeport.", "MoreAboutFreeport") + AddConversationOption(conversation, "I'd rather not get into it.") + StartConversation(conversation, NPC, Spawn, "Qeynos is a grand city that stands on the western shores of the continent Karan. It is a place where truth and justice are valued above all else. It is ruled by the brave and noble Queen Antonia Bayle. Our kingdom is a bright light that stands against the dark empire of Freeport.") +end + +function MoreAboutFreeport(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/murrar_shar/tutorial_island02_revamp/quests/citizenship/murrarshar/murrarshar004.mp3", "", "", 920852811, 2210592101, Spawn) + AddConversationOption(conversation, "I will do so. How can I be of service to the colony?", "HowCanHelp") + AddConversationOption(conversation, "I'm not willing yet.") + StartConversation(conversation, NPC, Spawn, "Freeport is a city of cruelty and malice, governed by its selfish Overlord, Lucan D'Lere. He is a dangerous madman who seeks to conquer Norrath and hold us all in his iron grip. Beware his lies, " .. GetName(Spawn) .. ".") +end + +function CurrentTaskInJournal(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/murrar_shar/tutorial_island02_revamp/quests/citizenship/murrarshar/murrarshar008.mp3", "", "", 2240443890, 2947060693, Spawn) + AddConversationOption(conversation, "Hey, that's a nice sword. Where'd you get it?", "NiceSword") + AddConversationOption(conversation, "How do I leave the island?", "LeaveIsland") + AddConversationOption(conversation, "I'll be back.") + StartConversation(conversation, NPC, Spawn, "Your current task is written in your journal. Return to me when you're finished.") +end + +function NiceSword(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/murrar_shar/tutorial_island02_revamp/quests/citizenship/murrarshar/murrarshar013.mp3", "", "", 271551862, 2243544574, Spawn) + AddConversationOption(conversation, "Okay, I will.") + StartConversation(conversation, NPC, Spawn, "Thank you for noticing. They call this one Berik, Sword of Thunder. I earned it in a dungeon in Antonica known as Stormhold. Work hard and you might find such a prize someday.") +end + +-- 1st QUEST DIALOG + +function HowCanHelp(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/murrar_shar/tutorial_island02_revamp/quests/citizenship/murrarshar/murrarshar005.mp3", "", "", 2129721282, 2945062289, Spawn) + AddConversationOption(conversation, "I am ready to learn, Murrar.", "ReadyToLearn") + AddConversationOption(conversation, "Not just now.") + StartConversation(conversation, NPC, Spawn, "Ahh, your future is as bright as your heart, but there are perils in this world that only the mightiest of adventurers may overcome. Live for Qeynos and Qeynos will live for you!") +end + +function ReadyToLearn(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + if HasQuest(Spawn, WelcomeToNorrath) then + SetStepComplete(Spawn, WelcomeToNorrath, 1) + end + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/murrar_shar/tutorial_island02_revamp/quests/citizenship/murrarshar/murrarshar006.mp3", "", "", 3748435458, 1580349546, Spawn) + AddConversationOption(conversation, "I will do as you ask.", "OfferQuest1") + AddConversationOption(conversation, "I don't have time right now.") + StartConversation(conversation, NPC, Spawn, "I am very glad to hear it! Go and speak to Trainer Hayl McGuinness, just northwest of here near the archway. I've written his name in your journal. He will teach you the basics of combat.") +end + +function DefeatedSparringPartner(NPC, Spawn) + SetStepComplete(Spawn, TheArtOfCombat, 4) + + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/murrar_shar/tutorial_island02_revamp/quests/citizenship/murrarshar/murrarshar011.mp3", "", "", 4256576079, 2557419428, Spawn) + AddConversationOption(conversation, "I would be glad to. What can I do?", "WhatCanIDo") + AddConversationOption(conversation, "Not right now.") + StartConversation(conversation, NPC, Spawn, quest2_text .. ". Until recently, our colony lived in peace with a clan of goblins known as the Sapswill that reside on the other side of the island. But for some unknown reason, they have begun to attack us. We need to begin an investigation at once to get to the bottom of this. Will you help?") +end + +-- 2nd QUEST DIALOG + +function WhatCanIDo(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/murrar_shar/tutorial_island02_revamp/quests/citizenship/murrarshar/murrarshar012.mp3", "", "", 3644220831, 939546210, Spawn) + AddConversationOption(conversation, "I will do so.", "OfferQuest2") + AddConversationOption(conversation, "I don't have time right now.") + StartConversation(conversation, NPC, Spawn, "The goblins have started attacking us from the west. We're not sure what sparked the uprising, but they are now relentlessly trying to invade the colony. I need you to go see how our defenders are doing at the west gate and gather any information you can. Speak with Seargant Haggus at the barricades and see what you can do to assist him.") +end + +function BehindAllThis(NPC, Spawn) + SetStepComplete(Spawn, APresenceOfEvil, 6) + + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/murrar_shar/tutorial_island02_revamp/quests/citizenship/murrarshar/murrarshar015.mp3", "", "", 2203186957, 1407413043, Spawn) + AddConversationOption(conversation, "I am ready to help now.", "ReadyToHelpNow") + AddConversationOption(conversation, "Thanks. I'll be back.") + StartConversation(conversation, NPC, Spawn, "I can assure you that we will find out though. In the meantime, here is a reward for your continued assistance.") +end + +-- 3rd QUEST DIALOG + +function ReadyToHelpNow(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/murrar_shar/tutorial_island02_revamp/quests/citizenship/murrarshar/murrarshar016.mp3", "", "", 943121762, 902772716, Spawn) + AddConversationOption(conversation, "I could do that.", "ICouldDoThat") + AddConversationOption(conversation, "How do I leave the island?", "LeaveIsland") + AddConversationOption(conversation, "I can't right now.") + StartConversation(conversation, NPC, Spawn, "Ready to continue eh? The dead soldiers were resurrected by something most evil and bent on destroying the Colony. Recently the wildlife on the island has felt the effects of the evil as well. I must get some samples from those creatures, so that I can examine them more closely.") +end + +function ICouldDoThat(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/murrar_shar/tutorial_island02_revamp/quests/citizenship/murrarshar/murrarshar017.mp3", "", "", 818627273, 1220772208, Spawn) + AddConversationOption(conversation, "Will do.", "OfferQuest3") + AddConversationOption(conversation, "I'm too busy right now.") + StartConversation(conversation, NPC, Spawn, "Thank you, but I have already sent a skilled hunter to do the job. Maybe you should check up on him though and make sure things are going well. He's been out in the Tainted Forest for a while now. Look for Sha'Dur up the stairs on the north side of the Sunset Meadow.") +end + +function Quest3Done(NPC, Spawn) + SetStepComplete(Spawn, IntoTheTaintedForest, 6) + + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_2_1036.mp3", "", "", 0, 0) + AddConversationOption(conversation, "Thanks.") + AddConversationOption(conversation, "How do I leave the island?", "LeaveIsland") + StartConversation(conversation, NPC, Spawn, "Good, the samples. I'll need to consult with Myrrin about them, but in the mmmmeantime here is your reward. Come back to me later and hopefully these samples will have prroven worthy.") +end + +-- 4th QUEST DIALOG + +function SamplesExamined(Spawn, NPC) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/murrar_shar/tutorial_island02_revamp/quests/citizenship/murrarshar/murrarshar019.mp3", "", "", 1940724466, 1039099607, Spawn) + AddConversationOption(conversation, "I'm guessing you'd like me to find out.", "dlg_19_1") + AddConversationOption(conversation, "How do I leave the island?", "LeaveIsland") + AddConversationOption(conversation, "I have something else to do before I get involved.") + StartConversation(conversation, NPC, Spawn, "The samples have been examined and my worst fear has been realized. A poisonous mist clings to the tissue, eating and controlling it. I suspect necromancy, but from whom?") +end + +function dlg_19_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/murrar_shar/tutorial_island02_revamp/quests/citizenship/murrarshar/murrarshar020.mp3", "", "", 969547880, 3659700172, Spawn) + AddConversationOption(conversation, "You want me to confront the Chieftain now?", "dlg_19_2") + StartConversation(conversation, NPC, Spawn, "That I do. My best guess is that the goblin leader, High Chieftain Grexx, is involved. He is the most powerful and influential figure to the goblins. If he were somehow corrupted, the goblins would follow any orders he demanded.") +end + +function dlg_19_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/murrar_shar/tutorial_island02_revamp/quests/citizenship/murrarshar/murrarshar021.mp3", "", "", 2156921006, 779590907, Spawn) + AddConversationOption(conversation, "Will do.", "OfferQuest4") + AddConversationOption(conversation, "I can't right now.") + StartConversation(conversation, NPC, Spawn, "First things first ," .. GetName(Spawn) .. ". We need to break through to the goblin village. I have assigned this duty to Cleric Mara'Vaen. Seek her out and see how you can help.") +end + +-- 5th QUEST DIALOG + +function GoblinsAreVictims(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "I will speak with the Cleric at once.") + AddConversationOption(conversation, "How do I leave the island?", "LeaveIsland") + StartConversation(conversation, NPC, Spawn, "The scouts that broke through to the Sapswill Village report that the goblins themselves are victims of the evil. Cleric Mara'Vaen will doubtless have the most recent information on this development.", Spawn) +end + +function Quest5Done(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/murrar_shar/tutorial_island02_revamp/quests/citizenship/murrarshar/murrarshar028.mp3", "", "", 1703190849, 2791144430, Spawn) + AddConversationOption(conversation, "It was nothing, really.", "ItWasNothingReally") + AddConversationOption(conversation, "How do I leave the island?", "LeaveIsland") + StartConversation(conversation, NPC, Spawn, "By the glory of Qeynos, you've done it! The source of evil is gone and the island is saved. You are on a path to greatness, " .. GetName(Spawn) .. ". Your deeds here shall not be forgotten and I forsee many adventures ahead of you.") +end + +function ItWasNothingReally(NPC, Spawn) + SetStepComplete(Spawn, TheSourceOfEvil, 9) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/murrar_shar/tutorial_island02_revamp/quests/citizenship/murrarshar/murrarshar029.mp3", "", "", 3787491059, 860331081, Spawn) + AddConversationOption(conversation, "Thanks.") + StartConversation(conversation, NPC, Spawn, "Nothing! I will tell the Queen personally of your bravery. Take this reward as a gift from Qeynos. Feel free to head to Qeynos at anytime, or stay and hone your skills. Speak with Captain Varlos on the docks when you wish to leave.") +end + +-------------------------------------------------------------------------------------------------------------------- +-- OFFER QUESTS +-------------------------------------------------------------------------------------------------------------------- +function OfferQuest1(NPC, Spawn) + OfferQuest(NPC, Spawn, TheArtOfCombat) +end + +function OfferQuest2(NPC, Spawn) + OfferQuest(NPC, Spawn, APresenceOfEvil) +end + +function OfferQuest3(NPC, Spawn) + OfferQuest(NPC, Spawn, IntoTheTaintedForest) +end + +function OfferQuest4(NPC, Spawn) + OfferQuest(NPC, Spawn, JoiningTheForwardRanks) +end \ No newline at end of file diff --git a/server/SpawnScripts/QueensColony/NebbleUnderroot.lua b/server/SpawnScripts/QueensColony/NebbleUnderroot.lua new file mode 100644 index 000000000..7bbcce917 --- /dev/null +++ b/server/SpawnScripts/QueensColony/NebbleUnderroot.lua @@ -0,0 +1,25 @@ +--[[ + Script Name : SpawnScripts/QueensColony/NebbleUnderroot.lua + Script Author : Zcoretri + Script Date : 2015.07.27 + Script Purpose : Nebble Unfderroot dialog + : +--]] + +function spawn(NPC) +end + +function respawn(NPC) + +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + + choice = math.random(1,2) + if choice == 1 then + PlayFlavor(NPC, "", "Mmm, triggerfish pie! I can smell it now.", "", 1689589577, 4560189, Spawn) + elseif choice == 2 then + PlayFlavor(NPC, "", "Shark fin soup! Maybe I'll get lucky.", "", 1689589577, 4560189, Spawn) + end +end \ No newline at end of file diff --git a/server/SpawnScripts/QueensColony/Patroller1.lua b/server/SpawnScripts/QueensColony/Patroller1.lua new file mode 100644 index 000000000..8515a20cf --- /dev/null +++ b/server/SpawnScripts/QueensColony/Patroller1.lua @@ -0,0 +1,36 @@ +--[[ + Script Name : SpawnScripts/QueensColony/Patroller1.lua + Script Purpose : a Qeynos Guardsman + Script Author : John Adams + Script Date : 2008.11.26 + Script Notes : Attempting to create a "leader" guard the other 3 will follow around the island. +--]] + +function spawn(NPC) + --Syntax is NPC, x, y, z, speed, delay (in seconds) + MovementLoopAddLocation(NPC, 21.09, -5.30, 161.75, 2, 0) + MovementLoopAddLocation(NPC, 21.18, -5.28, 144.12, 2, 0) + MovementLoopAddLocation(NPC, 16.59, -5.27, 133.36, 2, 0) + MovementLoopAddLocation(NPC, 10.50, -5.24, 114.47, 2, 0) + MovementLoopAddLocation(NPC, 6.95, -5.22, 103.47, 2, 0) + MovementLoopAddLocation(NPC, -25.22, -5.10, 100.19, 2, 0) + MovementLoopAddLocation(NPC, -52.38, -5.79, 108.30, 2, 0) + MovementLoopAddLocation(NPC, -55.46, -4.91, 131.16, 2, 0) + MovementLoopAddLocation(NPC, -46.75, -5.04, 157.32, 2, 0) + MovementLoopAddLocation(NPC, -23.70, -5.12, 176.13, 2, 0) + MovementLoopAddLocation(NPC, -9.30, -5.20, 186.68, 2, 0) + MovementLoopAddLocation(NPC, -21.30, -5.41, 217.11, 2, 0) + MovementLoopAddLocation(NPC, -7.47, -5.21, 188.38, 2, 0) + MovementLoopAddLocation(NPC, 1.16, -5.22, 181.35, 2, 0) + MovementLoopAddLocation(NPC, 12.73, -5.26, 172.09, 2, 0) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + Emote(NPC, "glares at you.") + Say(NPC, "Yes, I'm busy. Hurry up now, what is it?") +end \ No newline at end of file diff --git a/server/SpawnScripts/QueensColony/PaulaMarx.lua b/server/SpawnScripts/QueensColony/PaulaMarx.lua new file mode 100644 index 000000000..6005829db --- /dev/null +++ b/server/SpawnScripts/QueensColony/PaulaMarx.lua @@ -0,0 +1,76 @@ +--[[ + Script Name : SpawnScripts/QueensColony/PaulaMarx.lua + Script Author : Zcoretri + Script Date : 2015.07.30 + Script Purpose : Paula Marx dialog + Modified Date : 2017.04.13 + Modified by : EmemJr + Notes : Added dialog and code for Turning in collections +--]] + + +function spawn(NPC) + + MovementLoopAddLocation(NPC, 5.65, -6.50, 208.26, 2, 10, "Gather") + + MovementLoopAddLocation(NPC, 0.71, -5.83, 198.18, 2, 10, "Gather") + + MovementLoopAddLocation(NPC, 10.66, -6.90, 200.55, 2, 10, "Gather") + + MovementLoopAddLocation(NPC, 18.65, -6.87, 194.36, 2, 10, "Gather") + + MovementLoopAddLocation(NPC, 26.80, -6.86, 187.05, 2, 10, "Gather") + + MovementLoopAddLocation(NPC, 31.08, -6.24, 197.45, 2, 10, "Gather") + + MovementLoopAddLocation(NPC, 9.11, -6.80, 206.29, 2, 10, "Gather") + + -- return to spawn point and hang out. + MovementLoopAddLocation(NPC, -6.18, -4.96, 218.46, 2, 0) + MovementLoopAddLocation(NPC, -5.91, -4.96, 218.24, 2, 30) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + --if (player has a collection then add a convesation option to hand in a collection + --end + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_2_1003.mp3", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "What Collections?","WhatCollections") + if HasCollectionsToHandIn(Spawn) then + AddConversationOption(conversation, "I have a collection for you", "TurnIn") + + end + AddConversationOption(conversation, "Goodbye!") + StartConversation(conversation, NPC, Spawn, "Hello, traveler! How I envy you. What I wouldn't give to journey the world as I did in my youth. Alas, my days of adventuring are long past, but at least I can occupy myself with my various trinkets and collections that I picked up in my travels.") +end + +function Gather(NPC) + GatherSpawn = GetSpawn(NPC, 2530009) -- Get Paula Marx + SpawnSet(NPC, "visual_state", "2809") -- Start gathering + AddTimer(NPC, 5000, "stop_gathering") -- for 5 seconds, then stop +end + +function stop_gathering(NPC) + GatherSpawn = GetSpawn(NPC, 2530009) -- get Paula Marx + SpawnSet(NPC, "visual_state", "0") -- Stop her from gathering +end +function WhatCollections(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + AddConversationOption(conversation, "I'll keep that in mind.") + StartConversation(conversation, NPC, Spawn, "Why, any sort of collection. There's so much out there to find! Just open your eyes and peek under the rocks. If you find anything interesting, let me have a look. Collecting is the only way I seem to relive my youth!") +end + +function TurnIn(NPC, Spawn) + FaceTarget(NPC, Spawn) + HandInCollections(Spawn) + conversation = CreateConversation() + AddConversationOption(conversation, "Okay,bye!") + StartConversation(conversation, NPC, Spawn, "This is a magnificent find! Here, take this for all your hard work.") +end diff --git a/server/SpawnScripts/QueensColony/PredatorShadur.lua b/server/SpawnScripts/QueensColony/PredatorShadur.lua new file mode 100644 index 000000000..fa25b51ef --- /dev/null +++ b/server/SpawnScripts/QueensColony/PredatorShadur.lua @@ -0,0 +1,116 @@ +--[[ + Script Name : SpawnScripts/QueensColony/PredatorShadur.lua + Script Purpose : Predator Sha'dur + Script Author : John Adams + Script Date : 2008.09.20 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +local IntoTheTaintedForest = 162 + +function spawn(NPC) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + if HasQuest(Spawn, IntoTheTaintedForest) then + if GetQuestStep(Spawn, IntoTheTaintedForest) == 1 then + -- on step 1 + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/predator_sha_dur/tutorial_island02_revamp/quests/citizenship/predatorshadur/predatorshadur001.mp3", "", "", 974461124, 1688750829, Spawn) + AddConversationOption(conversation, "Easy there, all is not lost. I can help.", "AllNotLost") + AddConversationOption(conversation, "Then I'll just come back later.") + StartConversation(conversation, NPC, Spawn, "Wraaa! The day is grim. Has this world lost all of its goodness and left us with this cold husk? I suppose you were sent by Murrar, but my job has been halted.") + elseif GetQuestStep(Spawn, IntoTheTaintedForest) == 2 or GetQuestStep(Spawn, 9) == 4 then + -- on step 2 + AddConversationOption(conversation, "I'm still looking.") + StartConversation(conversation, NPC, Spawn, "Wraaa! Don't worry, I didn't expect to get my bow and arrows back anyway.") + elseif GetQuestStep(Spawn, IntoTheTaintedForest) == 3 then + -- on step 3 + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/predator_sha_dur/tutorial_island02_revamp/quests/citizenship/predatorshadur/predatorshadur005.mp3", "", "", 2074453663, 3037764595, Spawn) + AddConversationOption(conversation, "There were no arrows to be found.", "NoArrowsFound") + StartConversation(conversation, NPC, Spawn, "Wra... my bow! You did this for me? Maybe this day is not so bad. Maybe you found my arrows too?") + elseif GetQuestStep(Spawn, IntoTheTaintedForest) == 5 then + Step5Complete(NPC, Spawn) + else + GivenHope(NPC, Spawn) + end + elseif HasCompletedQuest(Spawn, IntoTheTaintedForest) then + GivenHope(NPC, Spawn) + else + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/predator_sha_dur/tutorial_island02_revamp/quest/citizenship_predator_shadur_notonquest_ace49adb.mp3", "I like your look. I think you may be able to help me. Speak with Murrar Shar, back in the Queen's Colony, if you're interested.", "", 3528725023, 1136267894, Spawn) + end +end + +function AllNotLost(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/predator_sha_dur/tutorial_island02_revamp/quests/citizenship/predatorshadur/predatorshadur002.mp3", "", "", 1717533921, 3624025078, Spawn) + AddConversationOption(conversation, "Maybe I can find your bow and arrows?", "FindBowAndArrows") + AddConversationOption(conversation, "I'd rather stay out of this.") + StartConversation(conversation, NPC, Spawn, "Help was a word I didn't expect to hear, but I'm most likely beyond helping. See, I was sent here to collect samples from the wildlife that has become tainted, but on my hunt I was ambushed by the nearby goblins. My bow and arrows were lost in the scuffle.") +end + +function FindBowAndArrows(NPC, Spawn) + SetStepComplete(Spawn, IntoTheTaintedForest, 1) + + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/predator_sha_dur/tutorial_island02_revamp/quests/citizenship/predatorshadur/predatorshadur003.mp3", "", "", 3011492014, 1113535899, Spawn) + AddConversationOption(conversation, "Don't worry, I'll find it.") + StartConversation(conversation, NPC, Spawn, "I'm sure my bow is in the hands of those tainted Sapswill tappers that ambushed me. You might try, but I don't except much.") +end + +function NoArrowsFound(NPC, Spawn) + SetStepComplete(Spawn, IntoTheTaintedForest, 3) + + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/predator_sha_dur/tutorial_island02_revamp/quests/citizenship/predatorshadur/predatorshadur006.mp3", "", "", 2110516952, 1980416532, Spawn) + AddConversationOption(conversation, "Be at ease, friend. I can get the sticks.") + StartConversation(conversation, NPC, Spawn, "Well there goes the day again! What's a bow without arrows? The only good sticks I've found to make arrow shafts are by that spider den! Brrrr!") +end + +function Step5Complete(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/predator_sha_dur/tutorial_island02_revamp/quests/citizenship/predatorshadur/predatorshadur007.mp3", "", "", 1042822953, 3405333200, Spawn) + AddConversationOption(conversation, "That's the spirit!", "dlg_16_1") + StartConversation(conversation, NPC, Spawn, "You'd do this for me again? I can fletch these sticks into perfect arrows. You, my friend, have turned my eyes. It's a great day. I know we can beat this menace!") +end + +function dlg_16_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/predator_sha_dur/tutorial_island02_revamp/quests/citizenship/predatorshadur/predatorshadur008.mp3", "", "", 985337170, 2895526537, Spawn) + AddConversationOption(conversation, "You've already got some samples? But...", "dlg_16_2") + StartConversation(conversation, NPC, Spawn, "You know, come to think of it. I did get a few small samples before I lost my bow. Why don't you take them back to Murrar to see if they'll do.") +end + +function dlg_16_2(NPC, Spawn) + SetStepComplete(Spawn, IntoTheTaintedForest, 5) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/predator_sha_dur/tutorial_island02_revamp/quests/citizenship/predatorshadur/predatorshadur009.mp3", "", "", 2433535127, 45385354, Spawn) + AddConversationOption(conversation, "Great! I know Murrar's waiting for these.", "dlg_16_3") + StartConversation(conversation, NPC, Spawn, "No really, go ahead! With your help finding my gear, you've shown that there is light in this dim hour. We will live to fight another day.") +end + +function GivenHope(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "Good luck.") + StartConversation(conversation, NPC, Spawn, "My arrows are almost ready! You've given me hope friend.") +end \ No newline at end of file diff --git a/server/SpawnScripts/QueensColony/SapswillVillageDancer.lua b/server/SpawnScripts/QueensColony/SapswillVillageDancer.lua new file mode 100644 index 000000000..79c6fb5be --- /dev/null +++ b/server/SpawnScripts/QueensColony/SapswillVillageDancer.lua @@ -0,0 +1,54 @@ +--[[ + Script Name : SapswillVillageDancer.lua + Script Purpose : Spawn script for a dancing Sapswill. + Script Author : Scatman + Script Date : 2009.01.11 + Script Notes : +--]] + +local ADiplomaticMission = 166 + +function spawn(NPC) + SpawnSet(NPC, "visual_state", 11298) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + if HasCompletedQuest(Spawn, ADiplomaticMission) or HasQuest(Spawn, ADiplomaticMission) then + QuestTalk(NPC, Spawn) + else + NormalTalk(NPC, Spawn) + end + + +end + +function NormalTalk(NPC, Spawn) + FaceTarget(NPC, Spawn) + + choice = math.random(1, 3) + if choice == 1 then + Say(NPC, "Danger? Only danger I see is crackin' my nog on this rock!") + else + Say(NPC, "Invasion? Ahh my dance! I call it the Stout Shuffle though.") + end +end + +function QuestTalk(NPC, Spawn) + if HasQuest(Spawn, ADiplomaticMission) and not QuestStepIsComplete(Spawn, ADiplomaticMission, 4) then + SetStepComplete(Spawn, ADiplomaticMission, 4) + end + + FaceTarget(NPC, Spawn) + + choice = math.random(1, 3) + if choice == 1 then + Say(NPC, "Special welcomes, diplomat!") + else + Say(NPC, "Dancing is good for diplomats too!") + end +end + diff --git a/server/SpawnScripts/QueensColony/SapswillVillageDrunk.lua b/server/SpawnScripts/QueensColony/SapswillVillageDrunk.lua new file mode 100644 index 000000000..f7f6a1e54 --- /dev/null +++ b/server/SpawnScripts/QueensColony/SapswillVillageDrunk.lua @@ -0,0 +1,26 @@ +--[[ + Script Name : SapswillVillageDrunk.lua + Script Purpose : Spawn script for a drunk Sapswill villager. + Script Author : Scatman + Script Date : 2009.01.11 + Script Notes : +--]] + +local ADiplomaticMission = 166 + +function spawn(NPC) + SpawnSet(NPC, "visual_state", 228) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + if HasQuest(Spawn, ADiplomaticMission) and not QuestStepIsComplete(Spawn, ADiplomaticMission, 2) then + SetStepComplete(Spawn, ADiplomaticMission, 2) + end + + --FaceTarget(NPC, Spawn) + Say(NPC, "...") +end \ No newline at end of file diff --git a/server/SpawnScripts/QueensColony/SapswillVillageHappy.lua b/server/SpawnScripts/QueensColony/SapswillVillageHappy.lua new file mode 100644 index 000000000..65fbd4492 --- /dev/null +++ b/server/SpawnScripts/QueensColony/SapswillVillageHappy.lua @@ -0,0 +1,33 @@ +--[[ + Script Name : SapswillVillageHappy.lua + Script Purpose : Spawn script for a happy Sapswill villager. + Script Author : Scatman + Script Date : 2009.01.11 + Script Notes : +--]] + +local ADiplomaticMission = 166 + +function spawn(NPC) + SpawnSet(NPC, "visual_state", 11150) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + if HasQuest(Spawn, ADiplomaticMission) and not QuestStepIsComplete(Spawn, ADiplomaticMission, 5) then + SetStepComplete(Spawn, ADiplomaticMission, 5) + end + + FaceTarget(NPC, Spawn) + + choice = math.random(1, 3) + if choice == 1 then + Say(NPC, "Get some swill, diplomat! Is good!") + else + Say(NPC, "Dishpan hands? Huh? Oh! Dip-lo-mat! Ha! Funny!") + end +end + diff --git a/server/SpawnScripts/QueensColony/SapswillVillageMusician.lua b/server/SpawnScripts/QueensColony/SapswillVillageMusician.lua new file mode 100644 index 000000000..48f556017 --- /dev/null +++ b/server/SpawnScripts/QueensColony/SapswillVillageMusician.lua @@ -0,0 +1,52 @@ +--[[ + Script Name : SapswillVillageMusician.lua + Script Purpose : Spawn script for Sapswill musician. + Script Author : Scatman + Script Date : 2009.01.11 + Script Notes : +--]] + +local ADiplomaticMission = 166 + +function spawn(NPC) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + if HasCompletedQuest(Spawn, ADiplomaticMission) or HasQuest(Spawn, ADiplomaticMission) then + QuestTalk(NPC, Spawn) + else + NormalTalk(NPC, Spawn) + end + + +end + +function NormalTalk(NPC, Spawn) + FaceTarget(NPC, Spawn) + + choice = math.random(1, 3) + if choice == 1 then + Say(NPC, "What you mean backwards? Expert I am!") + else + Say(NPC, "Course I know what I'm doing! What you mean backwards?") + end +end + +function QuestTalk(NPC, Spawn) + if HasQuest(Spawn, ADiplomaticMission) and not QuestStepIsComplete(Spawn, ADiplomaticMission, 1) then + SetStepComplete(Spawn, ADiplomaticMission, 1) + end + + FaceTarget(NPC, Spawn) + + choice = math.random(1, 3) + if choice == 1 then + Say(NPC, "I play special tune for diplomats!") + else + Say(NPC, "Happy meeting, diplomat!") + end +end \ No newline at end of file diff --git a/server/SpawnScripts/QueensColony/SapswillVillageSitting.lua b/server/SpawnScripts/QueensColony/SapswillVillageSitting.lua new file mode 100644 index 000000000..e796cfd1e --- /dev/null +++ b/server/SpawnScripts/QueensColony/SapswillVillageSitting.lua @@ -0,0 +1,55 @@ +--[[ + Script Name : SapswillVillageSitting.lua + Script Purpose : Spawn script for a sitting Sapswill. + Script Author : Scatman + Script Date : 2009.01.11 + Script Notes : +--]] + +local ADiplomaticMission = 166 + +function spawn(NPC) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + if HasCompletedQuest(Spawn, ADiplomaticMission) or HasQuest(Spawn, ADiplomaticMission) then + QuestTalk(NPC, Spawn) + else + NormalTalk(NPC, Spawn) + end +end + +function NormalTalk(NPC, Spawn) + FaceTarget(NPC, Spawn) + + choice = math.random(1, 4) + if choice == 1 then + Say(NPC, "If not for twins, we not make it.") + elseif choice == 2 then + Say(NPC, "A friend to gobbies! Grexx was right!") + elseif choice == 3 then + Say(NPC, "Grexx was right, hopes has come!") + else + Say(NPC, "Days are grim, but Grexx has hopes.") + end +end + +function QuestTalk(NPC, Spawn) + if HasQuest(Spawn, ADiplomaticMission) and not QuestStepIsComplete(Spawn, ADiplomaticMission, 3) then + SetStepComplete(Spawn, ADiplomaticMission, 3) + end + + FaceTarget(NPC, Spawn) + + choice = math.random(1, 3) + if choice == 1 then + Say(NPC, "Hail? But soothsayer says no hail in forecast!") + else + Say(NPC, "Happy days ahead now, diplomatic friend!") + end +end + diff --git a/server/SpawnScripts/QueensColony/SapswillvillagerRunner.lua b/server/SpawnScripts/QueensColony/SapswillvillagerRunner.lua new file mode 100644 index 000000000..0d66b75f0 --- /dev/null +++ b/server/SpawnScripts/QueensColony/SapswillvillagerRunner.lua @@ -0,0 +1,27 @@ +--[[ + Script Name : aSapswillvillagerRunner.lua + Script Purpose : Makes the sapswill on the Queen's Colony run around the rock. + Script Author : Scatman + Script Date : 2008.12.15 + Script Notes : +--]] + +local ADiplomaticMission = 166 + +function spawn(NPC) + SpawnSet(NPC, "visual_state", 0) + MovementLoopAddLocation(NPC, -75.98, 0.26, -238.35, 4, 0) + MovementLoopAddLocation(NPC, -72.04, 0.25, -240.76, 4, 0) + MovementLoopAddLocation(NPC, -73.36, 0.26, -245.79, 4, 0) + MovementLoopAddLocation(NPC, -78.16, 0.35, -248.07, 4, 0) + MovementLoopAddLocation(NPC, -82.81, 1.69, -245.62, 4, 0) + MovementLoopAddLocation(NPC, -85.91, 2.09, -240.37, 4, 0) + MovementLoopAddLocation(NPC, -82.86, 1.75, -237.19, 4, 0) +end + +function hailed(NPC, Spawn) + --FaceTarget(NPC, Spawn) +end + +function respawn(NPC) +end diff --git a/server/SpawnScripts/QueensColony/SergeantHaggus.lua b/server/SpawnScripts/QueensColony/SergeantHaggus.lua new file mode 100644 index 000000000..7e37b4d69 --- /dev/null +++ b/server/SpawnScripts/QueensColony/SergeantHaggus.lua @@ -0,0 +1,84 @@ +--[[ + Script Name : SpawnScripts/QueensColony/SergeantHaggus.lua + Script Purpose : Sergeant Haggus + Script Author : Scatman + Script Date : 2008.09.20 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +local APresenceOfEvil = 131 + +function spawn(NPC) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + if HasQuest(Spawn, APresenceOfEvil) and GetQuestStep(Spawn, APresenceOfEvil) < 6 then + if GetQuestStep(Spawn, APresenceOfEvil) == 1 then + --on 1st part of quest + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/sergeant_haggus/tutorial_island02_revamp/quests/citizenship/sergeanthaggus/sergeanthaggus001.mp3", "", "", 706977451, 1189091137, Spawn) + AddConversationOption(conversation, "Yes. He was wondering how our defenses are holding?", "WonderingHowDefenses") + AddConversationOption(conversation, "I'll come back. It seems that you're busy.") + StartConversation(conversation, NPC, Spawn, "Har! These scampering whelps will never break through! Oh, hello there. What's that, Murrar sent you?") + elseif GetQuestStep(Spawn, APresenceOfEvil) == 2 then + -- on 2nd part of quest + AddConversationOption(conversation, "I will.") + StartConversation(conversation, NPC, Spawn, "Har har! Don't give up yet, " .. GetName(Spawn) .. ". Slay some of those invaders. If you need some tips on combat, talk to Hayl McGuinness at the Training Grounds in the colony.") + elseif GetQuestStep(Spawn, APresenceOfEvil) == 3 then + --on 3rd part of quest + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/sergeant_haggus/tutorial_island02_revamp/quests/citizenship/sergeanthaggus/sergeanthaggus005.mp3", "", "", 4260313183, 1230463125, Spawn) + AddConversationOption(conversation, "I'm ready!", "ImReady") + AddConversationOption(conversation, "Not yet.") + StartConversation(conversation, NPC, Spawn, "By the hilt of the Claymore, you're a strong one! I could use your strength for another task.") + elseif GetQuestStep(Spawn, APresenceOfEvil) == 4 then + --on 4th part of quest + AddConversationOption(conversation, "Very well.") + StartConversation(conversation, NPC, Spawn, "Any news of the missing soldiers? Search Sunset Meadow for these soldiers and return to me with your findings.") + elseif GetQuestStep(Spawn, APresenceOfEvil) == 5 then + --on 5th part of quest + SetStepComplete(Spawn, APresenceOfEvil, 5) + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/sergeant_haggus/tutorial_island02_revamp/quests/citizenship/sergeanthaggus/sergeanthaggus009.mp3", "", "", 3590531004, 2647104527, Spawn) + AddConversationOption(conversation, "Farewell to you.") + StartConversation(conversation, NPC, Spawn, "Ah, they'll pay for this! You've done well, " .. GetName(Spawn) .. ". Sometime when you're not so busy, maybe you'd take a job with the Qeynos Guard and we can fight along side one another again. Take this information back to Murrar. Farewell.") + end + elseif HasCompletedQuest(Spawn, APresenceOfEvil) or (HasQuest(Spawn, APresenceOfEvil) and GetQuestStep(Spawn, APresenceOfEvil) == 6) then + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/sergeant_haggus/tutorial_island02_revamp/quests/citizenship/sergeanthaggus/sergeanthaggus010.mp3", "", "", 3061438505, 1032934814, Spawn) + AddConversationOption(conversation, "Thank you.") + StartConversation(conversation, NPC, Spawn, "You've proven yourself to me, " .. GetName(Spawn) .. ". Consider yourself a friend to the Qeynos Guard.") + else + Say(NPC, "Ah you look strong. I'm certain we could use your help, go speak with Murrar. He's south of the tower that is just east of here.") + end +end + +function WonderingHowDefenses(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/sergeant_haggus/tutorial_island02_revamp/quests/citizenship/sergeanthaggus/sergeanthaggus002.mp3", "", "", 3601499241, 3746466672, Spawn) + AddConversationOption(conversation, "Could you use some help?", "CouldYouUseHelp") + AddConversationOption(conversation, "I'll take my leave.") + StartConversation(conversation, NPC, Spawn, "While the goblins aren't very powerful, they're most definitely tenacious. It's almost as if they have no mind of their own and are throwing themselves at us like flies unto a swatter.") +end + +function CouldYouUseHelp(NPC, Spawn) + SetStepComplete(Spawn, APresenceOfEvil, 1) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/sergeant_haggus/tutorial_island02_revamp/quests/citizenship/sergeanthaggus/sergeanthaggus003.mp3", "", "", 407810644, 1199559577, Spawn) + AddConversationOption(conversation, "Will do!") + StartConversation(conversation, NPC, Spawn, "Aye, you're a gusty one aren't you? I'll give you a chance to prove your strength. Fend off some of these invading Sapswill and we'll see how you fare.") +end + +function ImReady(NPC, Spawn) + SetStepComplete(Spawn, APresenceOfEvil, 3) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/sergeant_haggus/tutorial_island02_revamp/quests/citizenship/sergeanthaggus/sergeanthaggus006.mp3", "", "", 2780322339, 3145013232, Spawn) + AddConversationOption(conversation, "I will.") + StartConversation(conversation, NPC, Spawn, "A platoon of my soldiers set out a while ago and hasn't returned. Search Sunset Meadow for these soldiers and return to me with your findings.") +end \ No newline at end of file diff --git a/server/SpawnScripts/QueensColony/Shirra.lua b/server/SpawnScripts/QueensColony/Shirra.lua new file mode 100644 index 000000000..576ddf4c4 --- /dev/null +++ b/server/SpawnScripts/QueensColony/Shirra.lua @@ -0,0 +1,13 @@ +--[[ + Script Name : SpawnScripts/QueensColony/Shirra.lua + Script Purpose : Shirra + Script Author : John Adams + Script Date : 2008.09.21 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_2_1035.mp3", "Upgrade your combat arts here!", "", 0, 0, Spawn) +end \ No newline at end of file diff --git a/server/SpawnScripts/QueensColony/SorcererOofala.lua b/server/SpawnScripts/QueensColony/SorcererOofala.lua new file mode 100644 index 000000000..c58d17b23 --- /dev/null +++ b/server/SpawnScripts/QueensColony/SorcererOofala.lua @@ -0,0 +1,175 @@ +--[[ + Spawn Template + Script Name : + Script Purpose : + Script Author : + Script Date : + Script Notes : + + These are just suggested functions to get you started. Edit as needed. +--]] + +local TheSourceOfEvil = 164 + +function spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + if HasCompletedQuest(Spawn, TheSourceOfEvil) then + StavesHere(NPC, Spawn) + elseif HasQuest(Spawn, TheSourceOfEvil) then + if GetQuestStep(Spawn, TheSourceOfEvil) == 1 then + LoveThisJob(NPC, Spawn) + elseif GetQuestStep(Spawn, TheSourceOfEvil) == 2 then + KeepLooking(NPC, Spawn) + elseif GetQuestStep(Spawn, TheSourceOfEvil) == 3 then + CausedAnUproar(NPC, Spawn) + elseif GetQuestStep(Spawn, TheSourceOfEvil) == 4 then + INeedToStayBack(NPC, Spawn) + elseif GetQuestStep(Spawn, TheSourceOfEvil) == 5 then + WhatAFight(NPC, Spawn) + else + StavesHere(NPC, Spawn) + end + else + NoAssignments(NPC, Spawn) + end +end + +function NoAssignments(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "Very well.") + StartConversation(conversation, NPC, Spawn, "I do not have any assignments for you right now. Speak with Murrar Shar outside of Myrrin's Tower at the center of the colony. He should have some work for you.") +end + +--------------------------------------------------------------------------------------------------------------------- +-- QUEST 5 +--------------------------------------------------------------------------------------------------------------------- + +function LoveThisJob(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/sorcerer_oofala/tutorial_island02_revamp/quests/citizenship/sorcereroofala/sorcereroofala001.mp3", "", "", 3877143308, 4000536977, Spawn) + AddConversationOption(conversation, "Great like you I guess.", "GreatLikeYou") + AddConversationOption(conversation, "I don't have time for this.") + StartConversation(conversation, NPC, Spawn, "Boom! I love this job! Someday I'll be the greatest wizard in all of Qeynos. And you," .. GetName(Spawn) .. ", what do you aspire to be?") +end + +function GreatLikeYou(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + -- display a different message is the player is an Erudite (3) + if GetRace(Spawn) == 3 then + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/sorcerer_oofala/tutorial_island02_revamp/quests/citizenship/sorcereroofala/sorcereroofala003.mp3", "", "", 2241109918, 2606755898, Spawn) + AddConversationOption(conversation, "I'm all ears.", "YouNeedMyHelp") + StartConversation(conversation, NPC, Spawn, "It is possible. I would never doubt a fellow Erudite's journey to greatness. Well let's start now, I can use your help.") + else + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/sorcerer_oofala/tutorial_island02_revamp/quests/citizenship/sorcereroofala/sorcereroofala002.mp3", "", "", 4176331969, 1953264521, Spawn) + AddConversationOption(conversation, "You need my help?", "YouNeedMyHelp") + StartConversation(conversation, NPC, Spawn, "It is possible, but unlikely. I've got the edge of course, being an Erudite. But let's put that behind us, since I suppose I need your help.") + end +end + +function YouNeedMyHelp(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/sorcerer_oofala/tutorial_island02_revamp/quests/citizenship/sorcereroofala/sorcereroofala004.mp3", "", "", 2866793980, 3810777786, Spawn) + AddConversationOption(conversation, "Go on.", "GoOn") + StartConversation(conversation, NPC, Spawn, "Well I need to stay here and guard the camp, but I need you to venture into the Abandoned Village. The goblins have revealed some disturbing news. A few survived and made it into our camp here, but the rest were consumed by a mysterious fog.") +end + +function GoOn(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/sorcerer_oofala/tutorial_island02_revamp/quests/citizenship/sorcereroofala/sorcereroofala005.mp3", "", "", 973060911, 209786157, Spawn) + AddConversationOption(conversation, "So you want me to destroy these totems?", "DestroyTotems") + AddConversationOption(conversation, "I can't do that right now.") + StartConversation(conversation, NPC, Spawn, "Apparently some mysterious totems appeared throughout the village and spewed a fog that enveloped it. It appears that only a few survived, and the rest were turned into... the living dead.") +end + +function DestroyTotems(NPC, Spawn) + SetStepComplete(Spawn, TheSourceOfEvil, 1) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/sorcerer_oofala/tutorial_island02_revamp/quests/citizenship/sorcereroofala/sorcereroofala006.mp3", "", "", 4222023563, 856617808, Spawn) + AddConversationOption(conversation, "I will hunt the totems.") + StartConversation(conversation, NPC, Spawn, "Exactly. Clear them away from the village and maybe it will help lead us to the source of the evil.") +end + +function KeepLooking(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "I'll keep looking.") + StartConversation(conversation, NPC, Spawn, "Keep looking for those totems. They should be on the outskirts of the Sapswill tents.") +end + +function CausedAnUproar(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/sorcerer_oofala/tutorial_island02_revamp/quests/citizenship/sorcereroofala/sorcereroofala008.mp3", "", "", 4250133850, 1269094283, Spawn) + AddConversationOption(conversation, "By me? Aren't you the great wizard?", "GreatWizard") + StartConversation(conversation, NPC, Spawn, "Wow, you really caused an uproar! Removing those totems must have angered whatever sinister force is behind all this. An evil champion has shown his face and must be dealt with. The Dark Blademaster must be defeated!") +end + +function GreatWizard(NPC, Spawn) + SetStepComplete(Spawn, TheSourceOfEvil, 3) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/sorcerer_oofala/tutorial_island02_revamp/quests/citizenship/sorcereroofala/sorcereroofala014.mp3", "", "", 767847484, 3041386379, Spawn) + AddConversationOption(conversation, "I guess I'll take care of it.") + StartConversation(conversation, NPC, Spawn, "Well, if Murrar had sent me to take out the Blademaster, it would be done already. My orders are to protect the camp here, at which I am doing a superb job. Enough debate. Destroy the Blademaster!") +end + +function INeedToStayBack(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "Sheesh!") + StartConversation(conversation, NPC, Spawn, "I need to stay back and guard the camp. Get rid of the Dark Blademaster!") +end + +function WhatAFight(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/sorcerer_oofala/tutorial_island02_revamp/quests/citizenship/sorcereroofala/sorcereroofala010.mp3", "", "", 1430233881, 2273383755, Spawn) + AddConversationOption(conversation, "Should I report back to Murrar?", "ReportBack") + AddConversationOption(conversation, "Not right now.") + StartConversation(conversation, NPC, Spawn, "What a fight that was! For a moment there, I thought I would need to step in and help you. The Blademaster's insignia is very disturbing. I should have known Freeport was involved in this corruption somehow! We must act quickly if we are to stop the evil.") +end + +function ReportBack(NPC, Spawn) + SetStepComplete(Spawn, TheSourceOfEvil, 5) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/sorcerer_oofala/tutorial_island02_revamp/quests/citizenship/sorcereroofala/sorcereroofala013.mp3", "", "", 911037523, 2792380927, Spawn) + AddConversationOption(conversation, "I'll head to the High Chieftain.") + StartConversation(conversation, NPC, Spawn, "There's no time! Our forward scouts report that High Chieftain Grexx is still alive and holding off the invasion from his tree house to the east. You must go talk to him before it's too late!") +end + +function StavesHere(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/sorcerer_oofala/tutorial_island02_revamp/quests/citizenship/sorcereroofala/sorcereroofala011.mp3", "", "", 2191225450, 1589931900, Spawn) + AddConversationOption(conversation, "I'll keep that in mind.") + StartConversation(conversation, NPC, Spawn, "If you ever need them, my guardian staves will be here.") +end + +--[[ raw_conversations + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/sorcerer_oofala/tutorial_island02_revamp/quest/citizenship_sorcerer_oofala_staffkill_5b312f60.mp3", "Ha! Did you see that?", "chuckle", 3419630960, 667923165, Spawn) +--]] diff --git a/server/SpawnScripts/QueensColony/TheForestKeeper.lua b/server/SpawnScripts/QueensColony/TheForestKeeper.lua new file mode 100644 index 000000000..c1d828433 --- /dev/null +++ b/server/SpawnScripts/QueensColony/TheForestKeeper.lua @@ -0,0 +1,81 @@ +--[[ + Script Name : SpawnScripts/QueensColony/TheForestKeeper.lua + Script Purpose : The Forest Keeper + Script Author : John Adams + Script Date : 2008.12.12 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +local GhostsAndGoblins = 184 + +function spawn(NPC) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + if HasCompletedQuest(Spawn, GhostsAndGoblins) then + MustRemainStrong(NPC, Spawn, 0) + elseif HasQuest(Spawn, GhostsAndGoblins) then + if GetQuestStep(Spawn, GhostsAndGoblins) == 1 then + MustRemainStrong(NPC, Spawn, 1) + elseif GetQuestStep(Spawn, GhostsAndGoblins) == 2 then + MustRemainStrong(NPC, Spawn, 0) + elseif GetQuestStep(Spawn, GhostsAndGoblins) == 3 then + MustRemainStrong(NPC, Spawn, 2) + else + MustRemainStrong(NPC, Spawn, 0) + end + end +end + +function MustRemainStrong(NPC, Spawn, Choice) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/the_forest_keeper/tutorial_island02_revamp/quests/forest_keeper/forest_keeper001.mp3", "", "", 404349798, 0, Spawn) + + if Choice == 1 then + AddConversationOption(conversation, "Are you the Forest Keeper that Deianeira spoke of?", "dlg_1_1") + elseif Choice == 2 then + AddConversationOption(conversation, "I've released many of the ghosts but there is no end to them!", "ReleasedGhosts") + end + + AddConversationOption(conversation, "Good luck with that!") + StartConversation(conversation, NPC, Spawn, "I must remain strong and vigilant against this! I will not give in to the corruption!") +end + +function dlg_1_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/the_forest_keeper/tutorial_island02_revamp/quests/forest_keeper/forest_keeper002.mp3", "", "", 1673079737, 0, Spawn) + AddConversationOption(conversation, "Can we do anything to stop it?", "dlg_1_2") + StartConversation(conversation, NPC, Spawn, "Eh? Who's that? Oh, that betrayer! She should go back to Freeport! Yes, I was once a Forest Keeper, maintaining this wood. But look around you! The other treants have succumbed to the evil that pervades this island. They've become ghosts, trapped between this life and their rebirth.") +end + +function dlg_1_2(NPC, Spawn) + SetStepComplete(Spawn, GhostsAndGoblins, 1) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/the_forest_keeper/tutorial_island02_revamp/quests/forest_keeper/forest_keeper003.mp3", "", "", 3694344031, 0, Spawn) + AddConversationOption(conversation, "I will set them free.") + StartConversation(conversation, NPC, Spawn, "Trapped in those ghostly forms, they are contributing to the decay of the Forest. I've been able to stave off the taint myself, but with so many of my brethren gone, it gets more and more difficult. They must be set free, so that they can be reborn into the earth. Without rebirth, there will be no living saplings!") +end + +function ReleasedGhosts(NPC, Spawn) + SetStepComplete(Spawn, GhostsAndGoblins, 3) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/the_forest_keeper/tutorial_island02_revamp/quests/forest_keeper/forest_keeper004.mp3", "", "", 375881043, 0, Spawn) + AddConversationOption(conversation, "I'll do what I can. Stay strong!") + StartConversation(conversation, NPC, Spawn, "Alas, the decay runs too deep. You must learn what horrors those naughty goblins have released! There are still a few of them that are as yet untainted at the Last Stand, northeasterly of here. Speak to the soothsayer there; he may have ideas. We were friends in the old days.") +end + diff --git a/server/SpawnScripts/QueensColony/TimboAlefirst.lua b/server/SpawnScripts/QueensColony/TimboAlefirst.lua new file mode 100644 index 000000000..688eb7447 --- /dev/null +++ b/server/SpawnScripts/QueensColony/TimboAlefirst.lua @@ -0,0 +1,12 @@ +--[[ + Script Name : SpawnScripts/QueensColony/TimboAlefirst.lua + Script Author : Zcoretri + Script Date : 2015.07.30 + Script Purpose : Timbo Alefirst dialog + : +--]] + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + PlayFlavor(NPC, "", "Wow, Meri is a great dancer!", "", 1689589577, 4560189, Spawn) +end \ No newline at end of file diff --git a/server/SpawnScripts/QueensColony/TrainerBordaGemseeker.lua b/server/SpawnScripts/QueensColony/TrainerBordaGemseeker.lua new file mode 100644 index 000000000..98b040d5b --- /dev/null +++ b/server/SpawnScripts/QueensColony/TrainerBordaGemseeker.lua @@ -0,0 +1,76 @@ +--[[ + Script Name : SpawnScripts/QueensColony/TrainerBordaGemseeker.lua + Script Author : Zcoretri + Script Date : 2015.07.30 + Script Purpose : Trainer Borda Gemseeker dialog + : +--]] + +function spawn(NPC) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_3_1003.mp3", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "I'd like to learn about collections.", "dlg_0_1") + AddConversationOption(conversation, "I'd like to learn about harvesting.","dlg_0_4") + AddConversationOption(conversation, "I've no time to chat right now.") + StartConversation(conversation, NPC, Spawn, "Don't be shy! Come closer, m'dear, and I'd be happy to answer any questions you have about collections or harvesting!") + +end + +function dlg_0_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "What happens next?", "dlg_0_2") + StartConversation(conversation, NPC, Spawn, "Collectibles are seen as a glow rising from the ground. If you're close enough, you'll notice a question mark above it. Double-click or right-click the glow and select 'harvest.' The item you gather will go into your inventory. You can examine this item in your inventory.") +end + +function dlg_0_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "How do I complete the collection?", "dlg_0_3") + StartConversation(conversation, NPC, Spawn, "Your quest journal will open up automatically to the Collections tab. Use the Add button to add that item to a collection. As you travel through Norrath, you'll find different collectibles in different areas of the world. Some items can be part of more than one collection.") +end + +function dlg_0_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "I'd like to learn about harvesting and gathering now.", "dlg_0_4") + AddConversationOption(conversation, "Thanks for the information.") + StartConversation(conversation, NPC, Spawn, "Continue to gather and examine all the items you find until all the icons of that collection are highlighted in your quest journal. Then you'll be able to turn the completed collection in to a collector who will reward you with some experience. If you already have a collectible in all collections that call for it, you can sell it to a merchant or trade it to another player.") +end + +function dlg_0_4(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "What are harvestables used for?", "dlg_0_5") + StartConversation(conversation, NPC, Spawn, "Harvestables come in five forms, each tied to its own respective skill. These skills can be seen by opening your Skills window by pressing the P key, clicking on the Skills tab and selecting your General skills. Rocks increase mining, logs increase foresting, dens increase trapping, fish increase fishing, and plants increase gathering.") +end + +function dlg_0_5(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "Why do I need to increase my harvesting skills?", "dlg_0_6") + StartConversation(conversation, NPC, Spawn, "The items found through harvesting are the basic building blocks of tradeskills. They cannot be sold to vendors, but they can be traded or sold to other players who need them for their respective tradeskill professions. Some components that can be found through harvesting are very rare and can be worth quite a bit of money to tradeskillers.") +end + +function dlg_0_6(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "I'd like to learn about collections now.", "dlg_0_1") + AddConversationOption(conversation, "Thanks for the information.") + StartConversation(conversation, NPC, Spawn, "The skill required to harvest in a given area increases along with the difficulty of the area. If you find that you are unable to harvest in an area you should return to a less difficult area and practice.") +end \ No newline at end of file diff --git a/server/SpawnScripts/QueensColony/TrainerCharleneStoutmuffin.lua b/server/SpawnScripts/QueensColony/TrainerCharleneStoutmuffin.lua new file mode 100644 index 000000000..afab22549 --- /dev/null +++ b/server/SpawnScripts/QueensColony/TrainerCharleneStoutmuffin.lua @@ -0,0 +1,142 @@ +--[[ + Script Name : SpawnScripts/QueensColony/TrainerCharleneStoutmuffin.lua + Script Author : Zcoretri + Script Date : 2015.07.30 + Script Purpose : Trainer Charlene Stoutmuffin dialog + : +--]] + +function spawn(NPC) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_3_1005.mp3", "", "", 0, 0) + AddConversationOption(conversation, "Tell me about items and equipment.", "dlg_12_1") + AddConversationOption(conversation, "Tell me about my inventory.", "dlg_12_11") + AddConversationOption(conversation, "I will return for instruction later.") + StartConversation(conversation, NPC, Spawn, "Good day, " .. GetName(Spawn) .. ". I'm here at the colony to teach our Queen's newest recruits about equipment and inventory space. Good equipment is one of the most important aspects of any adventurer!") +end + +function dlg_12_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "What can I do with the treasures I earn while adventuring?", "dlg_12_2") + AddConversationOption(conversation, "I will return for instruction later.") + StartConversation(conversation, NPC, Spawn, "Norrath is full of treasures for brave heroes like you. Sometimes the opponents you defeat in battle leave behind treasure chests with valuable loot. You can also buy items from other players, craft them as an artisan, or be awarded items for completing quests.") +end + +function dlg_12_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "What does the item information tell me?", "dlg_12_3") + AddConversationOption(conversation, "I will return for instruction later.") + StartConversation(conversation, NPC, Spawn, "Some items you obtain can be equipped on your person. If you find weapons, armor, jewelry, or certain other goodies, you may be able to use them. To look at a piece of equipment and determine if you can use it, move your mouse pointer over the item.") +end + +function dlg_12_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "Are things like attribute bonuses important?", "dlg_12_4") + AddConversationOption(conversation, "I will return for instruction later.") + StartConversation(conversation, NPC, Spawn, "For items that can be equipped, such as weapons and armor, mousing over it tells you which professions can use the item and at what level it can be equipped. You'll also see any benefits, such as attribute bonuses and resists, that the equipment provides. Learn about attributes by talking to Trainer Gurga Trueheart.") +end + +function dlg_12_4(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "How can I tell which of two weapons is better?", "dlg_12_5") + AddConversationOption(conversation, "I will return for instruction later.") + StartConversation(conversation, NPC, Spawn, "A wise adventurer is always trying to improve his or her equipment. Whenever you see gear that provides an overall greater benefit than what you have, that item is an upgrade for you.") +end + +function dlg_12_5(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "How can I tell which of two pieces of armor is better?", "dlg_12_6") + AddConversationOption(conversation, "I will return for instruction later.") + StartConversation(conversation, NPC, Spawn, "Weapons have a Damage Rating that shows the relative damage you can do with them. A higher Damage Rating is always better. Be sure you are comparing weapons of the same type, such as a two-handed weapon with another two-hander, or one dual-wield weapon with another.") +end + +function dlg_12_6(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "What about scouts and priests?", "dlg_12_7") + AddConversationOption(conversation, "I will return for instruction later.") + StartConversation(conversation, NPC, Spawn, "How you judge armor depends on your profession. Fighters who take a beating care most about obtaining armor that has high Mitigation, which decreases the amount of damage they take. Mages, on the other hand, know they can't take much punishment anyway, so would rather have armor that provides nice attribute bonuses.") +end + +function dlg_12_7(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "What do I do with equipment I can't use?", "dlg_12_8") + AddConversationOption(conversation, "I will return for instruction later.") + StartConversation(conversation, NPC, Spawn, "Scouts and priests need varying amounts of protection depending on how they play. If they find themselves at the forefront of battle, protection becomes very important. If they stay out of harms way, attribute bonuses may be more valuable.") +end + +function dlg_12_8(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "Why are some items marked 'No Value' or 'No Trade'?", "dlg_12_9") + AddConversationOption(conversation, "I will return for instruction later.") + StartConversation(conversation, NPC, Spawn, "An item can be sold to a non-player merchant for cash unless it has the 'No Value' flag on it. Items can be sold or traded to another player unless it has the 'No Trade' flag. If an item says it is 'Lore,' you can only have one of them on your character at a time.") +end + +function dlg_12_9(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "What does it mean when an item says it is 'Attuneable'?", "dlg_12_10") + AddConversationOption(conversation, "I will return for instruction later.") + StartConversation(conversation, NPC, Spawn, "Some items are marked 'No Value' because they are easy to obtain, such as harvested goods. You have to work to earn wealth," .. GetName(Spawn) .. ". Items are marked 'No Trade' in order to ensure that you earn them yourself, such as defeating a very tough monster or completing a long quest.") +end + +function dlg_12_10(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "How do I manage my inventory?", "dlg_12_11") + AddConversationOption(conversation, "I will return for instruction later.") + StartConversation(conversation, NPC, Spawn, "If an item is marked 'Attuneable,' you must attune it to yourself before it provides any benefits. You'll notice a message on screen when you are wearing an item that must be attuned. To attune it, right-click on the item and select 'Attune.' Once attuned, that item can no longer be traded or sold to another player.") +end + +function dlg_12_11(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "Can I put bags inside of bags?", "dlg_12_12") + AddConversationOption(conversation, "I will return for instruction later.") + StartConversation(conversation, NPC, Spawn, "Press the I key to open your inventory. Beneath your portrait are six slots that can hold items. You can place bags or other containers in those slots, which will give you even more storage space. Press the B key to open all your bags at once.") +end + +function dlg_12_12(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "So one item takes up one bag slot?", "dlg_12_13") + AddConversationOption(conversation, "I will return for instruction later.") + StartConversation(conversation, NPC, Spawn, "Only empty bags can go inside other bags. For this reason, it's a good idea to get hold of containers with many slots. After a long night of adventuring or harvesting, you'll want to have as many places to store your goodies as possible.") +end + +function dlg_12_13(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "Tell me about items and equipment.", "dlg_12_1") + AddConversationOption(conversation, "I will return for instruction later.") + StartConversation(conversation, NPC, Spawn, "Certain items, such as ammunition or harvested resources, can be stacked up to 200 at a time, depending on the item. Many goods, such as armor and clothing, cannot be stacked at all.") +end \ No newline at end of file diff --git a/server/SpawnScripts/QueensColony/TrainerCheyeSeawind.lua b/server/SpawnScripts/QueensColony/TrainerCheyeSeawind.lua new file mode 100644 index 000000000..f41be4ade --- /dev/null +++ b/server/SpawnScripts/QueensColony/TrainerCheyeSeawind.lua @@ -0,0 +1,104 @@ +--[[ + Script Name : SpawnScripts/QueensColony/TrainerCheyeSeawind.lua + Script Author : Zcoretri + Script Date : 2015.07.30 + Script Purpose : Trainer Cheye Seawind dialog + : +--]] + +function spawn(NPC) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_3_1021.mp3", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "What can cause my death? ", "dlg_7_1") + StartConversation(conversation, NPC, Spawn, "Even the bravest champion of Queen Antonia will meet an untimely end on occasion. Let me teach you the consequences of death and how you can recover properly.") +end + +function dlg_7_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "How will I know when I'm going to die?", "dlg_7_2") + StartConversation(conversation, NPC, Spawn, "Death can come in many ways: being bested on the field of battle, falling from great heights, drowning in water, falling into lava, standing too close to an exploding chest, and so on. It's a dangerous world out there, " .. GetName(Spawn) .. ".") +end + +function dlg_7_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "Why green?", "dlg_7_3") + StartConversation(conversation, NPC, Spawn, "Just keep an eye on your health bar, the green line located beneath your name in the upper left of your screen. At least...you hope it's green.") +end + +function dlg_7_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "What happens then?", "dlg_7_4") + AddConversationOption(conversation, "You're a morbid person. I'll come back later.") + StartConversation(conversation, NPC, Spawn, "Green means you're healthy. As your health diminishes, the bar turns yellow, then orange, and finally red. If the bar is empty, you die. You pay the debt which cancels all others, if you get my meaning.") +end + +function dlg_7_4(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "So death is not the end?", "dlg_7_5") + StartConversation(conversation, NPC, Spawn, "Your spirit lays trapped in your fallen body, unable to move. At this point, you have a choice: wait for a nearby ally to revive you, or choose a location from the window in the center of your screen at which to reappear. In some cases you'll have a single choice, in others multiple choices.") +end + +function dlg_7_5(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "What are the consequences?", "dlg_7_6") + StartConversation(conversation, NPC, Spawn, "Fortunately for all of us, death in Norrath is a temporary thing. If another adventurer revives you, you reappear at the spot of your death. If you choose a location to revive, you will appear at that spot. There are consequences to death, however.") +end + +function dlg_7_6(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "What is experience debt?", "dlg_7_7") + AddConversationOption(conversation, "I think I've learned enough for now. Cheer up!") + StartConversation(conversation, NPC, Spawn, "There are three results of death. First, you incur some experience debt which can be paid off by earning more. Second, you suffer a revive sickness that lowers your abilities for a short time, which leaves you temporarily vulnerable and less effective. Finally, all your equipped items take damage that will eventually have to be repaired.") +end + +function dlg_7_7(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "What is revive sickness like?", "dlg_7_8") + StartConversation(conversation, NPC, Spawn, "Experience debt is indicated by a red line on your experience bar. As you earn experience going forward, part of your experience will go toward paying off your debt while the rest will continue to advance you toward your next level. Mousing over your experience bar also tells how much debt you have.") +end + +function dlg_7_8(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "What are the results of item damage?", "dlg_7_9") + StartConversation(conversation, NPC, Spawn, "You'll see an icon for revive sickness in your spell effects window. Mousing over the icon will tell you how long it will remain. The type of sickness you have depends on how you were revived, but no matter what there will be a negative effect. Don't worry, it passes soon enough.") +end + +function dlg_7_9(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "What can I do about item damage?", "dlg_7_10") + StartConversation(conversation, NPC, Spawn, "Your equipped items usually take 10% wear with each death. When they are down to zero durability, you no longer receive any benefit from them. Don't let your equipment ever get into such poor condition, " .. GetName(Spawn) .. "!") +end + +function dlg_7_10(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "Thank you for your enlightening yet depressing advice.") + StartConversation(conversation, NPC, Spawn, "You will need to see a mender, someone who is able to repair your items back to 100% durability. Speak to Trainer Zidget Sprogrudder to learn more about repairing your gear. Should your equipment take damage here at the outpost, Mender Mannus at the forge can make repairs for you.") +end \ No newline at end of file diff --git a/server/SpawnScripts/QueensColony/TrainerGregoryCollins.lua b/server/SpawnScripts/QueensColony/TrainerGregoryCollins.lua new file mode 100644 index 000000000..64d2fbc42 --- /dev/null +++ b/server/SpawnScripts/QueensColony/TrainerGregoryCollins.lua @@ -0,0 +1,88 @@ +--[[ + Script Name : SpawnScripts/QueensColony/TrainerGregoryCollins.lua + Script Author : Zcoretri + Script Date : 2015.07.30 + Script Purpose : Trainer Gregory Collins dialog + : +--]] + +function spawn(NPC) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_2_1004.mp3", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "How does one take up crafting?", "dlg_18_1") + AddConversationOption(conversation, "I will return another time to learn your lesson.") + StartConversation(conversation, NPC, Spawn, "Hello my friend! I have the pleasure of serving Qeynos by explaining the role of crafting and tradeskills to newly arrived heroes such as you. By taking on the role of an artisan, you can help expand the influence of our fair city in worldwide commerce.") +end + +function dlg_18_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "Where does one perform crafting?", "dlg_18_2") + AddConversationOption(conversation, "I will return another time to learn your lesson.") + StartConversation(conversation, NPC, Spawn, "Crafting, or tradeskilling as some call it, involves taking ingredients harvested or obtained in the world, mixing them with the proper fuel, and carefully following a specific recipe to create something new and useful for yourself or your fellow citizens. Just as you can gain levels by adventuring, you have a separate Artisan level that increases as you earn experience crafting.") +end + +function dlg_18_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "Can I make a variety of items?", "dlg_18_3") + AddConversationOption(conversation, "I will return another time to learn your lesson.") + StartConversation(conversation, NPC, Spawn, "Crafting takes place in workshops, just like the one we have here on the island. Inside the workshops you will find the fuel and devices you'll need to build, cook, scribe, sew, and create all manner of useful goods. When you arrive in our grand city, you will find the entrance to a similar workshop in your home village.") +end + +function dlg_18_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "What could I specialize in?", "dlg_18_4") + AddConversationOption(conversation, "I will return another time to learn your lesson.") + StartConversation(conversation, NPC, Spawn, "As you practice your craft you will learn to make a variety of products, but as you advance in your profession you will specialize in certain types of goods. As you acquire new recipe books, you will learn new types of items you can make.") +end + +function dlg_18_4(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "Where do I learn recipes?", "dlg_18_5") + AddConversationOption(conversation, "I will return another time to learn your lesson.") + StartConversation(conversation, NPC, Spawn, "You might choose to become a Provisioner that makes food and drink, a Woodworker that crafts totems and staves, an Armorer that forges plate and chain armor, a Sage that scribes potent spells for mages and priests, or one of many other noble professions.") +end + +function dlg_18_5(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "What can I do with the items I make?", "dlg_18_6") + AddConversationOption(conversation, "I will return another time to learn your lesson.") + StartConversation(conversation, NPC, Spawn, "Basic recipes can be bought for a small fee from a merchant near the workshops in the cities. Rare recipes can be obtained by adventuring in the wilds of Norrath. You may want to trade goods or services with other adventurers and artisans to obtain such valuable recipes. You can view your recipe book by pressing the N key. ") +end + +function dlg_18_6(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "Do you have any further advice?", "dlg_18_7") + AddConversationOption(conversation, "I will return another time to learn your lesson.") + StartConversation(conversation, NPC, Spawn, "You can either use the items yourself or make a tidy profit by selling them to others. A skilled artisan is always in demand for the goods they provide, so learn your craft well and you will always have a place in Qeynos society. ") +end + +function dlg_18_7(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "Thank you for the guidance.") + AddConversationOption(conversation, "I will return another time to learn your lesson.") + StartConversation(conversation, NPC, Spawn, "Here is a handbook that will provide you with some basic reference material to start with. Once you reach Qeynos, you will find a tradeskill tutor within your local crafting workshop who can teach you more about crafting in further detail.") + -- JA: Need to give out some tradeskill item here +end \ No newline at end of file diff --git a/server/SpawnScripts/QueensColony/TrainerGurgaTrueheart.lua b/server/SpawnScripts/QueensColony/TrainerGurgaTrueheart.lua new file mode 100644 index 000000000..40fdd60dc --- /dev/null +++ b/server/SpawnScripts/QueensColony/TrainerGurgaTrueheart.lua @@ -0,0 +1,122 @@ +--[[ + Script Name : SpawnScripts/QueensColony/TrainerGurgaTrueheart.lua + Script Purpose : Trainer Gurga Trueheart + Script Author : John Adams + Script Date : 2008.09.20 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +function spawn(NPC) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/trainer_gurga_trueheart/tutorial_island02_revamp/trainers/attributes/gurga_trueheart001.mp3", "", "", 330223646, 1165391404, Spawn) + AddConversationOption(conversation, "Tell me what my physical attributes do.", "dlg_14_1") + AddConversationOption(conversation, "How do I view my physical attributes?", "dlg_14_6") + AddConversationOption(conversation, "How do I improve my physical attributes?", "dlg_14_7") + AddConversationOption(conversation, "I will ask you about this later.") + StartConversation(conversation, NPC, Spawn, "Hello there, " .. GetName(Spawn) .. ". You look like you keep both your body and mind in good shape. Even so, I bet you could use more information on your physical attributes: Strength, Agility, Stamina, Intelligence, and Wisdom. That's what I'm here to teach you!") +end + +function dlg_14_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/trainer_gurga_trueheart/tutorial_island02_revamp/trainers/attributes/gurga_trueheart002.mp3", "", "", 3017268324, 3420396892, Spawn) + AddConversationOption(conversation, "Tell me about Agility.", "dlg_14_2") + AddConversationOption(conversation, "How do I view my physical attributes?", "dlg_14_6") + AddConversationOption(conversation, "How do I improve my physical attributes?", "dlg_14_7") + AddConversationOption(conversation, "Thanks for the information.") + StartConversation(conversation, NPC, Spawn, "Strength determines how much weight you can carry. The more Strength you have, the more physical damage you can do in melee combat. Strength also determines the maximum amount of power Guardians, Berserkers, Monks, and Paladins have.") +end + +function dlg_14_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/trainer_gurga_trueheart/tutorial_island02_revamp/trainers/attributes/gurga_trueheart003.mp3", "", "", 1800198432, 422621617, Spawn) + AddConversationOption(conversation, "Tell me about Stamina.", "dlg_14_3") + AddConversationOption(conversation, "How do I view my physical attributes?", "dlg_14_6") + AddConversationOption(conversation, "How do I improve my physical attributes?", "dlg_14_7") + AddConversationOption(conversation, "Thanks for the information.") + StartConversation(conversation, NPC, Spawn, "Agility helps you avoid physical attacks. The more Agility you have, the higher your Avoidance ability. Agility also determines the maximum amount of power Swashbucklers, Rangers, Troubadors, and Dirges have.") +end + +function dlg_14_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/trainer_gurga_trueheart/tutorial_island02_revamp/trainers/attributes/gurga_trueheart004.mp3", "", "", 824633632, 4280308507, Spawn) + AddConversationOption(conversation, "Tell me about Intelligence.", "dlg_14_4") + AddConversationOption(conversation, "How do I view my physical attributes?", "dlg_14_6") + AddConversationOption(conversation, "How do I improve my physical attributes?", "dlg_14_7") + AddConversationOption(conversation, "Thank you for the information.") + StartConversation(conversation, NPC, Spawn, "Stamina gives you more Health points. The more Health you have, the longer you can survive in battle. Stamina is a useful attribute for every class.") +end + +function dlg_14_4(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/trainer_gurga_trueheart/tutorial_island02_revamp/trainers/attributes/gurga_trueheart005.mp3", "", "", 634969391, 333054011, Spawn) + AddConversationOption(conversation, "Tell me about Wisdom.", "dlg_14_5") + AddConversationOption(conversation, "How do I view my physical attributes?", "dlg_14_6") + AddConversationOption(conversation, "How do I improve my physical attributes?", "dlg_14_7") + AddConversationOption(conversation, "Thank you for the information.") + StartConversation(conversation, NPC, Spawn, "Intelligence is more than just a sign of how smart you are. The more Intelligence you have, the more damage you do with spells in combat. Intelligence also determines the maximum amount of power Wizards, Warlocks, Illusionists, Conjurors, Troubadors, and Dirges have.") +end + +function dlg_14_5(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/trainer_gurga_trueheart/tutorial_island02_revamp/trainers/attributes/gurga_trueheart006.mp3", "", "", 172104333, 2804988196, Spawn) + AddConversationOption(conversation, "How do I view my physical attributes?", "dlg_14_6") + AddConversationOption(conversation, "How do I improve my physical attributes?", "dlg_14_7") + AddConversationOption(conversation, "Thank you for the information.") + StartConversation(conversation, NPC, Spawn, "Wisdom increases your resistances to magical types of attacks: Heat, Cold, Disease, Poison, Magic, Mental and Divine. Wisdom also determines the maximum amount of power Templars, Mystics, Furies, Wardens, and Paladins have.") +end + +function dlg_14_6(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/trainer_gurga_trueheart/tutorial_island02_revamp/trainers/attributes/gurga_trueheart007.mp3", "", "", 3977540961, 2552439869, Spawn) + AddConversationOption(conversation, "Tell me what my physical attributes do.", "dlg_14_1") + AddConversationOption(conversation, "How do I improve my physical attributes?", "dlg_14_7") + AddConversationOption(conversation, "Thank you for the information.") + StartConversation(conversation, NPC, Spawn, "You can see your physical attributes, as well as other important aspects of your character, in your persona window. Just press the P key to open your persona window.") +end + +function dlg_14_7(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/trainer_gurga_trueheart/tutorial_island02_revamp/trainers/attributes/gurga_trueheart008.mp3", "", "", 3884845357, 2691699677, Spawn) + AddConversationOption(conversation, "Are there other ways?", "dlg_14_8") + AddConversationOption(conversation, "Thank you for the information.") + StartConversation(conversation, NPC, Spawn, "Your physical attributes, as well as other aspects of your character, can be improved in a number of ways. Many items add points to your attributes, resistances, Health, or Power. Hold your mouse pointer over your items to see what benefits they provide.") +end + +function dlg_14_8(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/trainer_gurga_trueheart/tutorial_island02_revamp/trainers/attributes/gurga_trueheart009.mp3", "", "", 1275102729, 1764856299, Spawn) + AddConversationOption(conversation, "Tell me what my physical attributes do.", "dlg_14_1") + AddConversationOption(conversation, "How do I view my physical attributes?", "dlg_14_6") + AddConversationOption(conversation, "I will ask you about this later.") + StartConversation(conversation, NPC, Spawn, "Many spells and combat arts enhance your attributes. Some of these can be cast on yourself, while others can improve other player characters that you group with. Grouping with other classes provides a wider variety of ways to improve your attributes.") +end + +--[[ raw_conversations + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_1_1015.mp3", "", "", 0, 0) +--]] + diff --git a/server/SpawnScripts/QueensColony/TrainerHaylMcGuinness.lua b/server/SpawnScripts/QueensColony/TrainerHaylMcGuinness.lua new file mode 100644 index 000000000..7a993d665 --- /dev/null +++ b/server/SpawnScripts/QueensColony/TrainerHaylMcGuinness.lua @@ -0,0 +1,328 @@ +--[[ + Script Name : SpawnScripts/QueensColony/TrainerHaylMcGuinness.lua + Script Author : Jabantiz + Script Date : 2016.09.06 09:09:52 + Script Purpose : + : +--]] + +function spawn(NPC) + +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) +end + +function respawn(NPC) + +end + +--[[ + Script Name : SpawnScripts/QueensColony/TrainerHaylMcGuinness.lua + Script Purpose : Trainer Hayl McGuinness + Script Author : John Adams + Script Date : 2008.09.20 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +local TheArtOfCombat = 132 + +function spawn(NPC) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + if HasCompletedQuest(Spawn, TheArtOfCombat) then + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/trainer_hayl_mcguinness/tutorial_island02_revamp/trainers/combat/combat_good026.mp3", "", "", 1881020230, 3830147813, Spawn) + AddConversationOption(conversation, "I'd like to learn about combat so that I can help the colony.", "dlg_8_1") + StartConversation(conversation, NPC, Spawn, "Hello there, " .. GetName(Spawn) .. "! I'm here to teach new recruits the basics of combat. Murrar told me you show great promise!") + elseif HasQuest(Spawn, TheArtOfCombat) and GetQuestStep(Spawn, TheArtOfCombat) < 4 then + if GetQuestStep(Spawn, TheArtOfCombat) == 1 then + -- on the first step + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/trainer_hayl_mcguinness/tutorial_island02_revamp/trainers/combat/combat_good026.mp3", "", "", 1881020230, 3830147813, Spawn) + AddConversationOption(conversation, "I'd like to learn about combat so that I can help the colony.", "dlg_8_1") + StartConversation(conversation, NPC, Spawn, "Hello there, " .. GetName(Spawn) .. "! I'm here to teach new recruits the basics of combat. Murrar told me you show great promise!") + else + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/trainer_hayl_mcguinness/tutorial_island02_revamp/trainers/combat/combat_good_quest001.mp3", "", "", 1571324247, 1735764796, Spawn) + + if GetQuestStep(Spawn, TheArtOfCombat) == 3 then + AddConversationOption(conversation, "I was victorious!", "Victorious") + end + AddConversationOption(conversation, "Not yet, but I will soon.") + StartConversation(conversation, NPC, Spawn, "So, did you defeat the sparring partner like I asked?") + end + else + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/trainer_hayl_mcguinness/tutorial_island02_revamp/trainers/combat/combat_good026.mp3", "", "", 1881020230, 3830147813, Spawn) + AddConversationOption(conversation, "I'd like to learn about combat so that I can help the colony.", "dlg_8_1") + StartConversation(conversation, NPC, Spawn, "Hello there, " .. GetName(Spawn) .. "! I'm here to teach new recruits the basics of combat. Murrar told me you show great promise!") + end +end + +function Victorious(NPC, Spawn) + SetStepComplete(Spawn, TheArtOfCombat, 3) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/trainer_hayl_mcguinness/tutorial_island02_revamp/trainers/combat/combat_good_quest002.mp3", "", "", 1477689908, 1568507038, Spawn) + AddConversationOption(conversation, "I'll report back to Murrar.") + StartConversation(conversation, NPC, Spawn, "Great work! You've proven your worth and are ready for greater challenges. If you want further instruction later, just come see me. But right now you must report back to Murrar so that you can discover what's behind the trouble here at the colony.") +end + + + +function dlg_8_1(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/trainer_hayl_mcguinness/tutorial_island02_revamp/trainers/combat/combat_good_quest000.mp3", "", "", 861129842, 2513176543, Spawn) + AddConversationOption(conversation, "How do I challenge a foe in battle?", "dlg_8_2") + if HasQuest(Spawn, TheArtOfCombat) then + if GetQuestStep(Spawn, TheArtOfCombat) == 1 then + SetStepComplete(Spawn, TheArtOfCombat, 1) + end + AddConversationOption(conversation, "I will return victorious!") + end + StartConversation(conversation, NPC, Spawn, "Okay, let's see what you're made of. One of the nearby sparring partners to my left will be happy to test your mettle. Challenge any one of them and return to me when you've earned a victory.") +end + +function dlg_8_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/trainer_hayl_mcguinness/tutorial_island02_revamp/trainers/combat/combat_good003.mp3", "", "", 1337742058, 2404050935, Spawn) + AddConversationOption(conversation, "How do I begin the battle?", "dlg_8_3") + StartConversation(conversation, NPC, Spawn, "Starting combat is easy. Just use your mouse pointer to left-click on an opponent. Its name will appear in the Target window in the upper left of your screen. You can also use the Tab key to cycle through nearby targets or the F8 key to select your closest enemy.") +end + +function dlg_8_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/trainer_hayl_mcguinness/tutorial_island02_revamp/trainers/combat/combat_good004.mp3", "", "", 2853756515, 4008764495, Spawn) + AddConversationOption(conversation, "So I can fight anyone or anything I want?", "dlg_8_4") + StartConversation(conversation, NPC, Spawn, "If you're close enough to your foe and want to start hitting it with your weapon, either click your Melee Attack button on your hotbar or press the ~ key. Or you can begin by using one of your spells or combat arts to get the enemy's attention. Remember, you must be close enough to actually hit them.") +end + +function dlg_8_4(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/trainer_hayl_mcguinness/tutorial_island02_revamp/trainers/combat/combat_good005.mp3", "", "", 1297419022, 3029770958, Spawn) + AddConversationOption(conversation, "Tell me about melee combat.", "dlg_8_5") + AddConversationOption(conversation, "Tell me about ranged combat.", "dlg_8_10") + AddConversationOption(conversation, "What kind of rewards can I earn in battle?", "dlg_8_14") + AddConversationOption(conversation, "Teach me more advanced aspects of combat.", "dlg_8_17") + AddConversationOption(conversation, "I'll come back later.") + StartConversation(conversation, NPC, Spawn, "You can fight most non-player characters and creatures that you find outside your city, whether outdoors or in dungeons. Many non-player characters in the cities are there to help or give you quests, so you can't attack some of them. If you try, you'll get a message telling you that they aren't valid targets.") +end + +function dlg_8_5(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/trainer_hayl_mcguinness/tutorial_island02_revamp/trainers/combat/combat_good006.mp3", "", "", 416525203, 2657385928, Spawn) + AddConversationOption(conversation, "What classes specialize in melee combat?", "dlg_8_6") + StartConversation(conversation, NPC, Spawn, "Melee combat means a toe-to-toe, physical confrontation. It is a combination of auto-attack damage that happens automatically when you press the Melee Attack button on your hotbar or the ~ key and spells or combat arts that you use in close proximity to your foe.") +end + +function dlg_8_6(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/trainer_hayl_mcguinness/tutorial_island02_revamp/trainers/combat/combat_good007.mp3", "", "", 1651948874, 1480304616, Spawn) + AddConversationOption(conversation, "Tell me how to begin a fight.", "dlg_8_2") + AddConversationOption(conversation, "Tell me about ranged combat.", "dlg_8_10") + AddConversationOption(conversation, "What kind of rewards can I earn in battle?", "dlg_8_14") + AddConversationOption(conversation, "Teach me more advanced aspects of combat.", "dlg_8_17") + AddConversationOption(conversation, "I'll come back later.") + StartConversation(conversation, NPC, Spawn, "Sturdy fighters such as Guardians, Berserkers, Monks, and Paladins stand at the front lines of battle facing the enemy. Crafty scouts such as Swashbucklers, Rangers, Troubadors, and Dirges generally stay close to their foes as well, but prefer to launch attacks from the back or side where they are less likely to be counterattacked.") +end + +function dlg_8_10(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/trainer_hayl_mcguinness/tutorial_island02_revamp/trainers/combat/combat_good008.mp3", "", "", 1478105613, 895646178, Spawn) + AddConversationOption(conversation, "How do I launch a ranged attack?", "dlg_8_11") + StartConversation(conversation, NPC, Spawn, "Ranged combat means that you put some distance between yourself and the enemy. This can be done with weapons such as bows or throwing daggers, or with spells and arts that can be cast from a distance.") +end + +function dlg_8_11(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/trainer_hayl_mcguinness/tutorial_island02_revamp/trainers/combat/combat_good009.mp3", "", "", 4078770069, 1143811293, Spawn) + AddConversationOption(conversation, "What classes specialize in ranged combat?", "dlg_8_12") + StartConversation(conversation, NPC, Spawn, "If you have a ranged weapon and ammunition, you can initiate ranged combat by using the Ranged Attack button on the Abilities tab of your Knowledge Book. You can drag this key to your hotbar if you like. Remember, you must have a ranged weapon in the Ranged slot of your inventory window and the correct type of ammunition in the Ammo slot.") +end + +function dlg_8_12(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/trainer_hayl_mcguinness/tutorial_island02_revamp/trainers/combat/combat_good010.mp3", "", "", 4251211849, 3911610409, Spawn) + AddConversationOption(conversation, "How do I tell if I can use spells or arts from a distance?", "dlg_8_13") + StartConversation(conversation, NPC, Spawn, "While most classes have the ability to attack from a distance, scout classes such as Swashbucklers, Troubadors, Dirges, and particularly Rangers specialize in ranged physical attacks. Mages, priests, and paladins have spells that do damage to their foes from a distance.") +end + +function dlg_8_13(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/trainer_hayl_mcguinness/tutorial_island02_revamp/trainers/combat/combat_good011.mp3", "", "", 4022476088, 3590432929, Spawn) + AddConversationOption(conversation, "Tell me how to begin a fight.", "dlg_8_2") + AddConversationOption(conversation, "Tell me about melee combat.", "dlg_8_5") + AddConversationOption(conversation, "What kind of rewards can I earn in battle?", "dlg_8_14") + AddConversationOption(conversation, "Teach me more advanced aspects of combat.", "dlg_8_17") + AddConversationOption(conversation, "I'll come back later.") + StartConversation(conversation, NPC, Spawn, "You can right-click on a spell or art's icon and select 'Examine' to see what its range of effect is. In addition, if you target something and the icon for one of your spells or arts turns a dark red, that means the opponent is out of range of that ability.") +end + +function dlg_8_14(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/trainer_hayl_mcguinness/tutorial_island02_revamp/trainers/combat/combat_good012.mp3", "", "", 2647469623, 502375197, Spawn) + AddConversationOption(conversation, "What do you mean by 'a worthy opponent'?", "dlg_8_15") + StartConversation(conversation, NPC, Spawn, "Victory in battle can be very rewarding. Successful combat against a worthy opponent awards you experience (XP) to help you advance your level, as well as the chance at coin, usable items, and other valuables.") +end + +function dlg_8_15(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/trainer_hayl_mcguinness/tutorial_island02_revamp/trainers/combat/combat_good013.mp3", "", "", 3707215797, 2577902646, Spawn) + AddConversationOption(conversation, "Are certain types of targets more rewarding than others?", "dlg_8_16") + StartConversation(conversation, NPC, Spawn, "You don't earn rewards for defeating foes that are too far below your level. If your target has a grey name, it means it is very weak and won't provide any benefit for beating it. Talk to Trainer Marla Gilliam for more information on evaluating your opponents.") +end + +function dlg_8_16(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/trainer_hayl_mcguinness/tutorial_island02_revamp/trainers/combat/combat_good014.mp3", "", "", 2418682059, 3250675692, Spawn) + AddConversationOption(conversation, "Tell me how to begin a fight.", "dlg_8_2") + AddConversationOption(conversation, "Tell me about melee combat.", "dlg_8_5") + AddConversationOption(conversation, "Tell me about ranged combat.", "dlg_8_10") + AddConversationOption(conversation, "Teach me more advanced aspects of combat.", "dlg_8_17") + AddConversationOption(conversation, "I'll come back later.") + StartConversation(conversation, NPC, Spawn, "The tougher a foe, the better its chances to provide a valuable reward. Though defeating enemies alone provides nice rewards, defeating heroic enemies that require a group is even more rewarding. The very best items come from banding together multiple groups to defeat epic opponents.") +end + +function dlg_8_17(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/trainer_hayl_mcguinness/tutorial_island02_revamp/trainers/combat/combat_good015.mp3", "", "", 3575809563, 632788793, Spawn) + AddConversationOption(conversation, "Tell me about selecting the right opponent.", "dlg_8_18") + AddConversationOption(conversation, "Teach me about knowing my surroundings.", "dlg_8_21") + AddConversationOption(conversation, "Tell me about using my abilities.", "dlg_8_24") + AddConversationOption(conversation, "Teach me the basics of combat.", "dlg_8_2") + AddConversationOption(conversation, "I'll come back later.") + StartConversation(conversation, NPC, Spawn, "There are many advanced combat techniques that you will learn over time. There's no substitute for experience," .. GetName(Spawn) .. ". I'd be happy to discuss a few of these advanced aspects, such as selecting the right opponent, knowing your surroundings, and using your abilities.") +end + +function dlg_8_18(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/trainer_hayl_mcguinness/tutorial_island02_revamp/trainers/combat/combat_good016.mp3", "", "", 3175726067, 1849673241, Spawn) + AddConversationOption(conversation, "How do I tell if an opponent is too weak or too strong for me?", "dlg_8_19") + StartConversation(conversation, NPC, Spawn, "Picking the right fight is crucial to victory. A weak opponent won't provide worthwhile rewards, while an overly powerful foe will result in your defeat. You need to keep your resources in mind as well as choosing the right target.") +end + +function dlg_8_19(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/trainer_hayl_mcguinness/tutorial_island02_revamp/trainers/combat/combat_good017.mp3", "", "", 1334502220, 1072117512, Spawn) + AddConversationOption(conversation, "What resources should I be keeping an eye on?", "dlg_8_20") + StartConversation(conversation, NPC, Spawn, "Targeting an opponent will show you detailed information on its overall potency. Generally speaking, you'll find the best results from fighting opponents with blue, white, or yellow names. Talk to Trainer Marla Gilliam for more information on evaluating your opponents.") +end + +function dlg_8_20(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/trainer_hayl_mcguinness/tutorial_island02_revamp/trainers/combat/combat_good018.mp3", "", "", 4117626633, 2141014135, Spawn) + AddConversationOption(conversation, "Teach me about knowing my surroundings.", "dlg_8_21") + AddConversationOption(conversation, "Tell me about using my abilities.", "dlg_8_24") + AddConversationOption(conversation, "Teach me the basics of combat.", "dlg_8_2") + AddConversationOption(conversation, "I'll come back later.") + StartConversation(conversation, NPC, Spawn, "Starting a fight when you are low on health or power is a very bad idea. Your choice of targets also depends on whether you're alone or grouped with other players. Forming a group allows you to take on tougher and more rewarding challenges than you could face alone.") +end + +function dlg_8_21(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/trainer_hayl_mcguinness/tutorial_island02_revamp/trainers/combat/combat_good019.mp3", "", "", 2725345993, 3739954421, Spawn) + AddConversationOption(conversation, "Anything else I should watch out for?", "dlg_8_22") + StartConversation(conversation, NPC, Spawn, "Keeping your surroundings in mind is crucial to victory. Fighting in areas with lots of aggressive creatures is a bad idea, because they won't hesitate to gang up on you.") +end + +function dlg_8_22(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/trainer_hayl_mcguinness/tutorial_island02_revamp/trainers/combat/combat_good020.mp3", "", "", 4260973055, 2919672507, Spawn) + AddConversationOption(conversation, "Any other tips?", "dlg_8_23") + StartConversation(conversation, NPC, Spawn, "Staying too long on the exact spot where you just defeated a foe can be dangerous. Another enemy is likely to show up there soon after, which can be an unpleasant surprise if you're already in another battle.") +end + +function dlg_8_23(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/trainer_hayl_mcguinness/tutorial_island02_revamp/trainers/combat/combat_good021.mp3", "", "", 2035277963, 965678861, Spawn) + AddConversationOption(conversation, "Tell me about selecting the right opponent.", "dlg_8_24") + AddConversationOption(conversation, "Tell me about using my abilities.", "dlg_8_24") + AddConversationOption(conversation, "Teach me the basics of combat.", "dlg_8_2") + AddConversationOption(conversation, "I'll come back later.") + StartConversation(conversation, NPC, Spawn, "You should be aware of what's going on around you. Using your mouse wheel to scroll into third person and holding down the left mouse button allows you to move the camera around your character. It's a good idea to do this when fighting in dangerous areas to make sure nothing sneaks up on you.") +end + +function dlg_8_24(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/trainer_hayl_mcguinness/tutorial_island02_revamp/trainers/combat/combat_good022.mp3", "", "", 3488047041, 965083005, Spawn) + AddConversationOption(conversation, "What do you mean?", "dlg_8_25") + StartConversation(conversation, NPC, Spawn, "Successful fighting isn't about turning on your auto-attack and walking away from battle. Your odds of victory are much better if you prepare well and are active during combat. You should be using every spell or combat art that has a positive effect on your chances to win.") +end + +function dlg_8_25(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/trainer_hayl_mcguinness/tutorial_island02_revamp/trainers/combat/combat_good023.mp3", "", "", 3086044683, 813829457, Spawn) + AddConversationOption(conversation, "What about during battle?", "dlg_8_26") + StartConversation(conversation, NPC, Spawn, "Before you begin fighting, make sure you and your allies have activated all beneficial spells, also known as 'buffs,' so that you're operating at peak efficiency. Buffs can add health or power, increase your rate of regeneration, enhance your physical attributes, make you attack faster or do more damage, and more.") +end + +function dlg_8_26(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/trainer_hayl_mcguinness/tutorial_island02_revamp/trainers/combat/combat_good024.mp3", "", "", 2201642498, 2339371912, Spawn) + AddConversationOption(conversation, "What else should I know about spells and arts?", "dlg_8_27") + StartConversation(conversation, NPC, Spawn, "Whether you're a front-lines melee type or someone attacking from a distance with weapons or spells, you should be using abilities that damage your foes effectively and efficiently. Right click on your spells and arts and select 'Examine' to see details on their effects.") +end + +function dlg_8_27(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/trainer_hayl_mcguinness/tutorial_island02_revamp/trainers/combat/combat_good025.mp3", "", "", 1394782063, 4291748674, Spawn) + AddConversationOption(conversation, "Tell me about selecting the right opponent.", "dlg_8_24") + AddConversationOption(conversation, "Teach me about knowing my surroundings.", "dlg_8_21") + AddConversationOption(conversation, "Teach me the basics of combat.", "dlg_8_2") + AddConversationOption(conversation, "I'll come back later.") + StartConversation(conversation, NPC, Spawn, "Using your highest-level versions of spells and arts will be more effective than using older versions. In addition, you should be upgrading your abilities to higher ranks to make them more effective. For more details on spells and combat arts, talk to Trainer Myrrin the Magnific in the tower at the center of the colony.") +end \ No newline at end of file diff --git a/server/SpawnScripts/QueensColony/TrainerMarlaGilliam.lua b/server/SpawnScripts/QueensColony/TrainerMarlaGilliam.lua new file mode 100644 index 000000000..7d7aa5767 --- /dev/null +++ b/server/SpawnScripts/QueensColony/TrainerMarlaGilliam.lua @@ -0,0 +1,163 @@ +--[[ + Script Name : SpawnScripts/QueensColony/TrainerMarlaGilliam.lua + Script Author : Zcoretri + Script Date : 2015.07.30 + Script Purpose : Trainer Marla Gilliam dialog + : +--]] + +function spawn(NPC) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/trainer_marla_gilliam/tutorial_island02_revamp/trainers/con_system/con_good001.mp3", "", "", 4073343319, 3363307823, Spawn) + AddConversationOption(conversation, "How do I judge my opponent?", "dlg_10_1") + AddConversationOption(conversation, "I will learn this lesson later.") + StartConversation(conversation, NPC, Spawn, "Welcome, adventurer! I sense that you will fight many battles and that you will one day be known as a great hero of Qeynos. But remember, we all have to start somewhere. The first thing you need to know to be successful in combat is how to size up your adversary.") +end + +function dlg_10_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/trainer_marla_gilliam/tutorial_island02_revamp/trainers/con_system/con_good002.mp3", "", "", 1749673923, 3874199641, Spawn) + AddConversationOption(conversation, "What does the creature's name tell me?", "dlg_10_2") + AddConversationOption(conversation, "I will learn this lesson later.") + StartConversation(conversation, NPC, Spawn, "You must learn to use both your eyes and your instincts as you consider friends and foes in Norrath. There are two excellent tools you should use to judge their capabilities: what you can tell from their name and what you can learn by targeting them.") +end + +function dlg_10_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/trainer_marla_gilliam/tutorial_island02_revamp/trainers/con_system/con_good003.mp3", "", "", 1857737581, 147614376, Spawn) + AddConversationOption(conversation, "How do I target an opponent?", "dlg_10_3") + AddConversationOption(conversation, "I will learn this lesson later.") + StartConversation(conversation, NPC, Spawn, "If something has a red border around its name, that target is aggressive toward you and will attack if you get too close to it. You should be especially careful of creatures that roam around, because if they notice you they won't hesitate to strike.") +end + +function dlg_10_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/trainer_marla_gilliam/tutorial_island02_revamp/trainers/con_system/con_good004.mp3", "", "", 3683773140, 1432557589, Spawn) + AddConversationOption(conversation, "Why are separate creatures sometimes linked?", "dlg_10_4") + AddConversationOption(conversation, "I will learn this lesson later.") + StartConversation(conversation, NPC, Spawn, "All you need to do is move your mouse pointer over what you want to target and click. You will see the name of your opponent in the Target window in the upper left corner of the screen, and a large arrow will appear above its head. If arrows also appear above the heads of nearby creatures, it means all of them are linked together and will attack as one.") +end + +function dlg_10_4(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/trainer_marla_gilliam/tutorial_island02_revamp/trainers/con_system/con_good005.mp3", "", "", 75959961, 1250212958, Spawn) + AddConversationOption(conversation, "What does the Target window tell me?", "dlg_10_5") + AddConversationOption(conversation, "I will learn this lesson later.") + StartConversation(conversation, NPC, Spawn, "Sometimes multiple creatures will work together to form a single encounter. These opponents will act as a team, and usually won't stop fighting until all of them are defeated.") +end + +function dlg_10_5(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/trainer_marla_gilliam/tutorial_island02_revamp/trainers/con_system/con_good006.mp3", "", "", 783568461, 1746620407, Spawn) + AddConversationOption(conversation, "What does the level indicate?", "dlg_10_6") + AddConversationOption(conversation, "I will learn this lesson later.") + StartConversation(conversation, NPC, Spawn, "The Target window tells you several important facts, which collectively form what is referred to as the 'con' (overall challenge) of the opponent. It shows you the numerical level of the creature you have targeted, a color to indicate its relative level range, up or down arrows to indicate toughness, and indicators that tell you if the encounter is normal, heroic, or epic.") +end + +function dlg_10_6(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/trainer_marla_gilliam/tutorial_island02_revamp/trainers/con_system/con_good007.mp3", "", "", 2126605511, 1738009054, Spawn) + AddConversationOption(conversation, "How does my opponent's level affect my rewards for victory?", "dlg_10_7") + AddConversationOption(conversation, "I will learn this lesson later.") + StartConversation(conversation, NPC, Spawn, "As you adventure through Norrath, you will gain experience and increase your level. The opponents you will face in combat have levels as well. To be victorious, you will usually want to face foes that are close to your level.") +end + +function dlg_10_7(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/trainer_marla_gilliam/tutorial_island02_revamp/trainers/con_system/con_good009.mp3", "", "", 253347516, 133392970, Spawn) + AddConversationOption(conversation, "What are the colors?", "dlg_10_8") + AddConversationOption(conversation, "I will learn this lesson later.") + StartConversation(conversation, NPC, Spawn, "The color of the opponent's name indicates how challenging the encounter is. It is very useful as a quick indicator of whether or not you should try fighting a target. The more danger its color indicates, the greater the threat it represents.") +end + +function dlg_10_8(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/trainer_marla_gilliam/tutorial_island02_revamp/trainers/con_system/con_good010.mp3", "", "", 1862367558, 3739171183, Spawn) + AddConversationOption(conversation, "Will grey targets ever attack me?", "dlg_10_9") + AddConversationOption(conversation, "I will learn this lesson later.") + StartConversation(conversation, NPC, Spawn, "Grey names mean the fight is below your abilities and will give no experience or reward. Green names mean the opponent is very easy. Blue names mean an easy fight. White names indicate the opponent is even with your abilities. Yellow names mean the fight will be challenging. Orange names indicate a difficult encounter. Red names mean the battle could be deadly.") +end + +function dlg_10_9(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/trainer_marla_gilliam/tutorial_island02_revamp/trainers/con_system/con_good011.mp3", "", "", 1994206530, 2520624309, Spawn) + AddConversationOption(conversation, "What do down arrows tell me?", "dlg_10_10") + AddConversationOption(conversation, "I will learn this lesson later.") + StartConversation(conversation, NPC, Spawn, "Targets with grey names will not attack you, even if they would be aggressive to someone closer to their level. In other words, you won't be attacked by anything that won't give you some reward for defeating it.") +end + +function dlg_10_10(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/trainer_marla_gilliam/tutorial_island02_revamp/trainers/con_system/con_good012.mp3", "", "", 1328804443, 2071176575, Spawn) + AddConversationOption(conversation, "What do up arrows mean?", "dlg_10_11") + AddConversationOption(conversation, "I will learn this lesson later.") + StartConversation(conversation, NPC, Spawn, "No arrow by the target's name indicates an average opponent for a lone adventurer. A single down arrow means it is a below average opponent. Two down arrows tell you it's a weak opponent, and three down arrows means it is very weak. Be careful though, because if multiple weak opponents are working together they can still be challenging.") +end + +function dlg_10_11(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/trainer_marla_gilliam/tutorial_island02_revamp/trainers/con_system/con_good013.mp3", "", "", 692862081, 3880129920, Spawn) + AddConversationOption(conversation, "So how do I know whether I can face a challenge alone?", "dlg_10_12") + AddConversationOption(conversation, "I will learn this lesson later.") + StartConversation(conversation, NPC, Spawn, "Up arrows indicate increased difficulty. A single up arrow means an above average opponent. Two up arrows show a strong opponent, while three up arrows means a very tough fight. If you look at the sparring partners next to us, you will see that they have different arrow indicators. Feel free to practice fighting them to feel what effect the arrows have.") +end + +function dlg_10_12(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/trainer_marla_gilliam/tutorial_island02_revamp/trainers/con_system/con_good014.mp3", "", "", 2013675936, 3060214959, Spawn) + AddConversationOption(conversation, "What is the difference between normal, heroic, and epic?", "dlg_10_13") + AddConversationOption(conversation, "I will learn this lesson later.") + StartConversation(conversation, NPC, Spawn, "As a general rule of thumb, if you see an enemy with one up arrow, it's a good idea to team up with another player to take it on. If you see an enemy with two up arrows, add two members to your group. If you see an opponent with three up arrows, add three members to your group. A lone adventurer will likely want to face targets with no arrows or down arrows.") +end + +function dlg_10_13(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/trainer_marla_gilliam/tutorial_island02_revamp/trainers/con_system/con_good015.mp3", "", "", 19627555, 2002715179, Spawn) + AddConversationOption(conversation, "So how do all these elements work together to show an opponent's difficulty?", "dlg_10_14") + AddConversationOption(conversation, "I will learn this lesson later.") + StartConversation(conversation, NPC, Spawn, "A normal opponent has no indicator and is intended to be fought by a solo adventurer or small group. A heroic encounter is intended for a larger group of up to six adventurers. An epic opponent should only be attempted by a raid force of multiple groups working together.") +end + +function dlg_10_14(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/trainer_marla_gilliam/tutorial_island02_revamp/trainers/con_system/con_good016.mp3", "", "", 761596996, 3232449140, Spawn) + AddConversationOption(conversation, "Thank you, instructor.") + StartConversation(conversation, NPC, Spawn, "All the elements I've explained will affect the outcome of a battle and whether or not you will need allies to win. Pay close attention to the lessons I have taught you, and apply them to the challenges you face throughout your journeys in Norrath. Learn well and you will indeed become the great champion I know you can be!") +end \ No newline at end of file diff --git a/server/SpawnScripts/QueensColony/TrainerMyrrintheMagnific.lua b/server/SpawnScripts/QueensColony/TrainerMyrrintheMagnific.lua new file mode 100644 index 000000000..a4c623b75 --- /dev/null +++ b/server/SpawnScripts/QueensColony/TrainerMyrrintheMagnific.lua @@ -0,0 +1,188 @@ +--[[ + Script Name : SpawnScripts/QueensColony/TrainerMyrrintheMagnific.lua + Script Author : Zcoretri + Script Date : 2015.07.30 + Script Purpose : Trainer Myrrin the Magnific dialog + : +--]] + +function spawn(NPC) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/trainer_myrrin_the_magnific/tutorial_island02_revamp/trainers/spells_arts_abilities/spells_arts_good001.mp3", "", "", 1664457984, 1938404159, Spawn) + AddConversationOption(conversation, "Let us begin.", "dlg_21_1") + AddConversationOption(conversation, "I will return for instruction later.") + StartConversation(conversation, NPC, Spawn, "I am here to answer your questions on Spells and Combat Arts as well as other abilities. How can I help you?") +end + +function dlg_21_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/trainer_myrrin_the_magnific/tutorial_island02_revamp/trainers/spells_arts_abilities/spells_arts_good002.mp3", "", "", 808130965, 1737550396, Spawn) + AddConversationOption(conversation, "Tell me about Spells.", "dlg_21_2") + AddConversationOption(conversation, "Tell me about Combat Arts.", "dlg_21_5") + AddConversationOption(conversation, "Tell me about Abilities.", "dlg_21_8") + AddConversationOption(conversation, "Where do I find my Spells, Combat Arts, and Abilities?", "dlg_21_11") + AddConversationOption(conversation, "How do I obtain and improve my Spells and Combat Arts?", "dlg_21_14") + AddConversationOption(conversation, "I will return for instruction later.") + StartConversation(conversation, NPC, Spawn, "I am here to answer your questions. How can I help you?") +end + +function dlg_21_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/trainer_myrrin_the_magnific/tutorial_island02_revamp/trainers/spells_arts_abilities/spells_arts_good003.mp3", "", "", 3665238716, 2727251573, Spawn) + AddConversationOption(conversation, "Who uses Spells?", "dlg_21_3") + AddConversationOption(conversation, "I will return for instruction later.") + StartConversation(conversation, NPC, Spawn, "A Spell is a magical ability. Spells can have a variety of uses. Some allow you to damage an enemy, while others might provide benefits to yourself or an ally. You can hold your mouse pointer over a Spell's icon to see a description of what it does, or right-click on it and select 'Examine.'") +end + +function dlg_21_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/trainer_myrrin_the_magnific/tutorial_island02_revamp/trainers/spells_arts_abilities/spells_arts_good004.mp3", "", "", 808721069, 3167840134, Spawn) + AddConversationOption(conversation, "I have more questions.", "dlg_21_1") + AddConversationOption(conversation, "I will return for instruction later.") + StartConversation(conversation, NPC, Spawn, "Mages, priests, paladins, shadowknights, troubadors, and dirges all cast Spells. Each class has a list of Spells that is unique. While other classes may have similar Spells, no one has capabilities exactly like that of another class. Also, certain magical items may be imbued with Spell effects that can be cast or that activate on their own.") +end + +function dlg_21_5(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/trainer_myrrin_the_magnific/tutorial_island02_revamp/trainers/spells_arts_abilities/spells_arts_good005.mp3", "", "", 3516119767, 3186961937, Spawn) + AddConversationOption(conversation, "Who uses Combat Arts?", "dlg_21_6") + AddConversationOption(conversation, "I will return for instruction later.") + StartConversation(conversation, NPC, Spawn, "Combat Arts are a lot like Spells, but they usually take less time to cast and cannot be interrupted. As their name implies, many Combat Arts focus on some aspect of battle.") +end + +function dlg_21_6(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/trainer_myrrin_the_magnific/tutorial_island02_revamp/trainers/spells_arts_abilities/spells_arts_good006.mp3", "", "", 4152547953, 4144844763, Spawn) + AddConversationOption(conversation, "I have more questions.", "dlg_21_1") + AddConversationOption(conversation, "I will return for instruction later.") + StartConversation(conversation, NPC, Spawn, "All fighters and scouts use Combat Arts. Each of these classes has unique Combat Arts that help distinguish them from other classes. Combat Arts have names and effects that fit the class that uses them.") +end + +function dlg_21_8(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/trainer_myrrin_the_magnific/tutorial_island02_revamp/trainers/spells_arts_abilities/spells_arts_good007.mp3", "", "", 4041785353, 3148613558, Spawn) + AddConversationOption(conversation, "How are Abilities different from Spells and Combat Arts?", "dlg_21_9") + AddConversationOption(conversation, "I will return for instruction later.") + StartConversation(conversation, NPC, Spawn, "Abilities are general things your character can do, along with certain capabilities specific to your race. Some of your Abilities are extremely useful, such as Sprint, which allows you to run very fast for a short period of time. You can also Call for Help when you are in danger, or launch a Ranged Attack if you have a ranged weapon and ammo.") +end + +function dlg_21_9(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/trainer_myrrin_the_magnific/tutorial_island02_revamp/trainers/spells_arts_abilities/spells_arts_good008.mp3", "", "", 4015978134, 2213340213, Spawn) + AddConversationOption(conversation, "I have more questions.", "dlg_21_1") + AddConversationOption(conversation, "I will return for instruction later.") + StartConversation(conversation, NPC, Spawn, "Unlike Spells and Combat Arts, Abilities cannot be upgraded. Most of your Abilities are received when you first begin your adventures in Norrath, although certain new ones can be granted as you become more experienced.") +end + +function dlg_21_11(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/trainer_myrrin_the_magnific/tutorial_island02_revamp/trainers/spells_arts_abilities/spells_arts_good009.mp3", "", "", 3669707140, 1805788377, Spawn) + AddConversationOption(conversation, "How do I use my Spells, Combat Arts, and Abilities?", "dlg_21_12") + AddConversationOption(conversation, "I will return for instruction later.") + StartConversation(conversation, NPC, Spawn, "All your Spells and Combat Arts, as well as other Abilities, are found in your Knowledge Book. Press the K key to open it at any time, and click the name of the tab you wish to view: Abilities, Spells, or Combat Arts.") +end + +function dlg_21_12(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/trainer_myrrin_the_magnific/tutorial_island02_revamp/trainers/spells_arts_abilities/spells_arts_good010.mp3", "", "", 214302336, 1560132109, Spawn) + AddConversationOption(conversation, "I have more questions.", "dlg_21_1") + AddConversationOption(conversation, "I will return for instruction later.") + StartConversation(conversation, NPC, Spawn, "To use a Spell, Combat Art, or Ability, drag its icon from your Knowledge Book onto your hotbar. Some have already been placed there for you. To use one, simply click its icon on your hotbar or press the key assigned to it. You can open additional hotbars by right-clicking on a hotbar and selecting 'Open New Hotbar.'") +end + +function dlg_21_14(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/trainer_myrrin_the_magnific/tutorial_island02_revamp/trainers/spells_arts_abilities/spells_arts_good011.mp3", "", "", 2343506137, 3325799537, Spawn) + AddConversationOption(conversation, "How can I judge the effectiveness of my Spells and Combat Arts?", "dlg_21_15") + AddConversationOption(conversation, "I will return for further instruction later.") + StartConversation(conversation, NPC, Spawn, "Most of your Spells or Combat Arts are given to you as you advance in levels from 1 to 50 and will automatically be scribed in your Knowledge Book. Certain special Spells or Combat Arts can be obtained by doing quests. Once you are level 51 and higher, you must find ways to purchase or obtain your new Spells and Combat Arts.") +end + +function dlg_21_15(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/trainer_myrrin_the_magnific/tutorial_island02_revamp/trainers/spells_arts_abilities/spells_arts_good012.mp3", "", "", 2215632312, 3289511413, Spawn) + AddConversationOption(conversation, "How can I improve my Spells and Combat Arts?", "dlg_21_16") + AddConversationOption(conversation, "I will return for further instruction later.") + StartConversation(conversation, NPC, Spawn, "There are three main ranks of Spells and Combat Arts: Apprentice, Adept, and Master. Within each rank are up to four tiers of quality. Spells and Combat Arts that are automatically granted to you are usually given at the Apprentice I rank. You should always try to have the highest rank of your Spells and Combat Arts, because they gain effectiveness as you improve them.") +end + +function dlg_21_16(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/trainer_myrrin_the_magnific/tutorial_island02_revamp/trainers/spells_arts_abilities/spells_arts_good013.mp3", "", "", 3424361190, 3770163771, Spawn) + AddConversationOption(conversation, "What about other ranks of Spells and Arts?", "dlg_21_17") + AddConversationOption(conversation, "I will return for further instruction later.") + StartConversation(conversation, NPC, Spawn, "You can buy Apprentice II versions of your first six levels of Spells or Combat Arts here in the tower. Just purchase them from the appropriate merchant. When you arrive in Qeynos, you will find a Class Trainer that sells Apprentice II versions of your Spells or Combat Arts.") +end + +function dlg_21_17(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/trainer_myrrin_the_magnific/tutorial_island02_revamp/trainers/spells_arts_abilities/spells_arts_good017.mp3", "", "", 983281181, 2794508480, Spawn) + AddConversationOption(conversation, "Are there other ways to improve my Spells and Combat Arts?", "dlg_21_18") + AddConversationOption(conversation, "I will return for further instruction later.") + StartConversation(conversation, NPC, Spawn, "You will also find more potent ranks of spells and arts as you defeat opponents in battle. Many enemies will carry Adept I versions of Spells and Combat Arts, while conquering some extremely powerful foes may result in the extremely rare Master I versions.") +end + +function dlg_21_18(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/trainer_myrrin_the_magnific/tutorial_island02_revamp/trainers/spells_arts_abilities/spells_arts_good014.mp3", "", "", 3599821078, 422980237, Spawn) + AddConversationOption(conversation, "Are all my Spells and Combat Arts unique?", "dlg_21_19") + AddConversationOption(conversation, "I will return for further instruction later.") + StartConversation(conversation, NPC, Spawn, "In addition, certain crafters can make upgrades to your Spells and Combat Arts using harvested components. They can create Apprentice IV quality spells, as well as valuable Adept III scrolls using rare components. Buying from or trading with other players is an excellent way to upgrade your Spells and Combat Arts.") +end + +function dlg_21_19(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/trainer_myrrin_the_magnific/tutorial_island02_revamp/trainers/spells_arts_abilities/spells_arts_good015.mp3", "", "", 3513594939, 2556536854, Spawn) + AddConversationOption(conversation, "How can I keep all these Spells and Arts straight in my Knowledge Book?", "dlg_21_20") + AddConversationOption(conversation, "I will return for further instruction later.") + StartConversation(conversation, NPC, Spawn, "As you advance in level, you will obtain many new abilities as well as more effective versions of Spells or Combat Arts you have already learned. The names and icons of these upgrades are often similar, but the newer versions are more effective. Again, you will want to obtain the highest rank of these new abilities.") +end + +function dlg_21_20(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/trainer_myrrin_the_magnific/tutorial_island02_revamp/trainers/spells_arts_abilities/spells_arts_good016.mp3", "", "", 1747363815, 678736548, Spawn) + AddConversationOption(conversation, "I have more questions.", "dlg_21_1") + AddConversationOption(conversation, "I will return for further instruction later.") + StartConversation(conversation, NPC, Spawn, "Your Spells and Combat Arts can easily be organized according to your personal taste. Just open your Knowledge Book and click the 'Sort' button in the upper right corner. This allows you to organize your Spells and Arts for easy access to the abilities you wish to use.") +end \ No newline at end of file diff --git a/server/SpawnScripts/QueensColony/TrainerVerrinGlimmertide.lua b/server/SpawnScripts/QueensColony/TrainerVerrinGlimmertide.lua new file mode 100644 index 000000000..f530ced0d --- /dev/null +++ b/server/SpawnScripts/QueensColony/TrainerVerrinGlimmertide.lua @@ -0,0 +1,158 @@ +--[[ + Script Name : SpawnScripts/QueensColony/TrainerVerrinGlimmertide.lua + Script Author : Zcoretri + Script Date : 2015.07.30 + Script Purpose : Trainer Verrin Glimmertide dialog + : +--]] + +function spawn(NPC) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_3_1022.mp3", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "I would like to hear about Heroic Opportunities now.", "dlg_11_1") + AddConversationOption(conversation, "I will return to learn about Heroic Opportunities when I have reached level 5.") + StartConversation(conversation, NPC, Spawn, "Greetings," .. GetName(Spawn) .. ". I am here to train you in the use of Heroic Opportunities. This useful combat technique can be employed by adventurers who are level 5 and higher. Since you are not yet level 5, you cannot yet use them. If you don't want to hear about them now, you could return when you have reached level 5.") +end + +function dlg_11_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "Are Heroic Opportunities complicated?", "dlg_11_2") + AddConversationOption(conversation, "I will seek your knowledge another time.") + StartConversation(conversation, NPC, Spawn, "Beginning at level 5, Heroic Opportunities can be triggered in combat. They allow both lone adventurers and groups of allies to combine their attacks into a series of spells or combat arts performed in a specific order. When successful, Heroic Opportunities give beneficial effects such as extra attacks against your foes or beneficial magic to heal or enhance your abilities.") +end + +function dlg_11_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "So how does a Heroic Opportunity arise?", "dlg_11_3") + AddConversationOption(conversation, "I will seek your knowledge another time.") + StartConversation(conversation, NPC, Spawn, "Rest assured, someone of your considerable skills in battle will find them easy! Once you start using them, you'll wonder how you ever got along without them.") +end + +function dlg_11_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "Okay, that does sound easy. How do I begin a Heroic Opportunity?", "dlg_11_4") + AddConversationOption(conversation, "I will seek your knowledge another time.") + StartConversation(conversation, NPC, Spawn, "Let me tell you the short and simple version first so that you can see how easy Heroic Opportunities are to use. All you need to do is use your ability that triggers the Heroic Opportunity, then use the spells or combat arts that are blinking on your hotbar or in your Knowledge Book. Easy, isn't it?") +end + +function dlg_11_4(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "Can I trigger a Starter Chain whenever I want?", "dlg_11_5") + AddConversationOption(conversation, "I will seek your knowledge another time.") + StartConversation(conversation, NPC, Spawn, "Heroic Opportunities have two parts called the Starter Chain and the Combat Wheel. At level 5, every adventure class gains an ability that triggers a Starter Chain: Fighting Chance, Divine Providence, Arcane Augur, or Lucky Break. Open your Knowledge book by pressing K and click the Abilities tab to see it. You can drag its icon to your hotbar to use it.") +end + +function dlg_11_5(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "What happens when I trigger a Starter Chain?", "dlg_11_6") + AddConversationOption(conversation, "I will seek your knowledge another time.") + StartConversation(conversation, NPC, Spawn, "Starter Chains can only be triggered while in battle with an enemy. After all, Heroic Opportunities are all about becoming great in combat! When you or an ally triggers a Starter Chain, you will see it appear in the corner of your screen.") +end + +function dlg_11_6(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "Are Heroic Opportunities only usable in groups?", "dlg_11_7") + AddConversationOption(conversation, "I will seek your knowledge another time.") + StartConversation(conversation, NPC, Spawn, "Once a Starter Chain is initiated, it shows different ability icons flashing on the screen. A Starter Chain will generally display four different icons that indicate which spells or combat arts advance the Heroic Opportunity to the next stage. Icons will be blue, yellow, red, or green, depending on which class has the ability.") +end + +function dlg_11_7(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "How do I know what I should do to advance the Starter Chain?", "dlg_11_8") + AddConversationOption(conversation, "I will seek your knowledge another time.") + StartConversation(conversation, NPC, Spawn, "Heroic Opportunities can be used alone or in groups. If you fight alone you will have a limited number of ways to advance the Starter Chain, but if you are in a group made up of different classes then you will be able to advance the Starter Chain in different ways to unleash a variety of Heroic Opportunities.") +end + +function dlg_11_8(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "Use the spell or art that is blinking. That's all there is to it?", "dlg_11_9") + AddConversationOption(conversation, "I will seek your knowledge another time.") + StartConversation(conversation, NPC, Spawn, "Any spells or combat arts that can advance the Heroic Opportunity will flash on your hotbar and in your Knowledge Book. You have 10 seconds to complete the Starter Chain and advance to the Combat Wheel. See, it's easy: just use the spell or art that blinks!") +end + +function dlg_11_9(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "Why does it trigger one of three?", "dlg_11_10") + AddConversationOption(conversation, "I will seek your knowledge another time.") + StartConversation(conversation, NPC, Spawn, "It's quite simple. After you've advanced the Starter Chain, the bright and colorful Combat Wheel appears. The Combat Wheel shows a series of icons and displays the name of the Heroic Opportunity you have triggered. A Starter Chain will initiate one of three different Heroic Opportunities.") +end + +function dlg_11_10(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "What does the Combat Wheel tell me?", "dlg_11_11") + AddConversationOption(conversation, "I will seek your knowledge another time.") + StartConversation(conversation, NPC, Spawn, "There are three potential Heroic Opportunities: common, uncommon, and rare. Each provides a different benefit. Though even the common ones are valuable, the rare event can sometimes turn the tide of battle in your favor!") +end + +function dlg_11_11(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "How can I tell the difference?", "dlg_11_12") + AddConversationOption(conversation, "I will seek your knowledge another time.") + StartConversation(conversation, NPC, Spawn, "As with the Starter Chain, the Combat Wheel indicates which spells or arts must be performed to advance and eventually complete the heroic event. Sometimes these spells or abilities must be performed in a particular order. Other times there is no order.") +end + +function dlg_11_12(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "How long do I have to complete the Heroic Opportunity?", "dlg_11_13") + AddConversationOption(conversation, "I will seek your knowledge another time.") + StartConversation(conversation, NPC, Spawn, "In the very center of the Wheel, you'll see either a clockwise-pointing arrow or arrows pointing in different directions. The clockwise arrow indicates that the abilities must be completed in order. The other types of arrows mean that the abilities can be completed in any order.") +end + +function dlg_11_13(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "That sounds easy!", "dlg_11_14") + AddConversationOption(conversation, "I will seek your knowledge another time.") + StartConversation(conversation, NPC, Spawn, "The Combat Wheel must be completed within 10 seconds or the Opportunity will fail. The blue bar that appears around the outside of the Wheel is a timer. When the blue bar is gone, this indicates that time has run out to complete the Heroic Opportunity.") +end + +function dlg_11_14(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "Any other tricks I should know?", "dlg_11_15") + AddConversationOption(conversation, "I will seek your knowledge another time.") + StartConversation(conversation, NPC, Spawn, "It really is! As you become more familiar with using Heroic Opportunities, you can take note of the members of your group and plan out ahead of time which Opportunities will provide you the greatest benefit.") +end + +function dlg_11_15(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "Thank you for the information. I'll try Heroic Opportunities in my next battle!") + StartConversation(conversation, NPC, Spawn, "Scout classes have a little something extra. By using their Coin icon, the Scout can shift to another Heroic Opportunity. This shift can only happen once per Combat Wheel. This ability must also be used before any other spell or combat art has been used to advance the Wheel.") +end \ No newline at end of file diff --git a/server/SpawnScripts/QueensColony/TrainerZidgetSprogrudder.lua b/server/SpawnScripts/QueensColony/TrainerZidgetSprogrudder.lua new file mode 100644 index 000000000..f2b2e764c --- /dev/null +++ b/server/SpawnScripts/QueensColony/TrainerZidgetSprogrudder.lua @@ -0,0 +1,87 @@ +--[[ + Script Name : SpawnScripts/QueensColony/TrainerZidgetSprogrudder.lua + Script Author : Zcoretri + Script Date : 2015.07.30 + Script Purpose : Trainer Zidget Sprogrudder dialog + : +--]] + +function spawn(NPC) +end + +function respawn(NPC) + spawn(NPC) +end + +--[[ raw_conversations + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_1_1005.mp3", "", "", 0, 0) +--]] + + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/trainer_zidget_sprogrudder/tutorial_island02_revamp/trainers/mending_banking/zidget_sprogrudder001.mp3", "", "", 3939010463, 2059400102, Spawn) + AddConversationOption(conversation, "Tell me about banking.", "dlg_15_1") + AddConversationOption(conversation, "Tell me about mending items.", "dlg_15_6") + AddConversationOption(conversation, "I'll return for training later.") + StartConversation(conversation, NPC, Spawn, "I can tell you all about mending and banking! Banking and mending! Which do you want to hear about?") +end + +function dlg_15_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/trainer_zidget_sprogrudder/tutorial_island02_revamp/trainers/mending_banking/zidget_sprogrudder002.mp3", "", "", 2569144953, 681435280, Spawn) + AddConversationOption(conversation, "How do I open my bank?", "dlg_15_2") + StartConversation(conversation, NPC, Spawn, "You already have an account with the Qeynos Exchange, and luckily for you, we have a branch right here in the colony. Go see Banker Bogfoot to access your account. Additional branches can be found in your home village when you reach the city, as well as other parts of Qeynos. You cannot access your bank from Freeport.") +end + +function dlg_15_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/trainer_zidget_sprogrudder/tutorial_island02_revamp/trainers/mending_banking/zidget_sprogrudder003.mp3", "", "", 1818090205, 3165962311, Spawn) + AddConversationOption(conversation, "How do I make deposits and withdrawals?", "dlg_15_3") + AddConversationOption(conversation, "I'll return for training later.") + StartConversation(conversation, NPC, Spawn, "Inside the bank, your mouse pointer will turn into a dial icon when hovered over a banker. Just click on the banker to open your bank window. You'll see twelve general slots and eight 'shared' slots. You can put bags or containers in your bank to increase the number of available slots.") +end + +function dlg_15_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/trainer_zidget_sprogrudder/tutorial_island02_revamp/trainers/mending_banking/zidget_sprogrudder004.mp3", "", "", 22498702, 4161666959, Spawn) + AddConversationOption(conversation, "What are 'shared' bank slots?", "dlg_15_4") + StartConversation(conversation, NPC, Spawn, "Coins and items can be dragged from your inventory to the bank window. To drag one item from a stack, hold down the Ctrl key as you drag it. To drag a certain number of coins or items, hold down the Shift key and drag, then enter the quantity.") +end + +function dlg_15_4(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/trainer_zidget_sprogrudder/tutorial_island02_revamp/trainers/mending_banking/zidget_sprogrudder005.mp3", "", "", 1857727319, 1420810063, Spawn) + AddConversationOption(conversation, "Any other banking facts I should know?", "dlg_15_5") + StartConversation(conversation, NPC, Spawn, "Items (but not coins) placed in your shared slots can be accessed by other characters on your account that are also citizens of Qeynos. Lore and No-Trade items cannot be put into the shared slots. Characters that are Freeport citizens cannot access a Qeynos bank.") +end + +function dlg_15_5(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/trainer_zidget_sprogrudder/tutorial_island02_revamp/trainers/mending_banking/zidget_sprogrudder006.mp3", "", "", 731970945, 2493990127, Spawn) + AddConversationOption(conversation, "I want to learn about mending items.", "dlg_15_6") + AddConversationOption(conversation, "I'll return for training later.") + StartConversation(conversation, NPC, Spawn, "If you choose to join a guild made up of your fellow players one day, you can access your guild bank by right-clicking on a banker and selecting 'Guild Bank.'") +end + +function dlg_15_6(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0) + AddConversationOption(conversation, "Tell me about banking.", "dlg_15_1") + AddConversationOption(conversation, "I'll return for training later.") + StartConversation(conversation, NPC, Spawn, "Your weapons and armor wear down when you die during combat. When they are down to zero durability, you no longer receive any benefit from them. You can visit a mender, such as Mender Mannus at the colony forge, to get them repaired . Speak to Trainer Cheye Seawind if you wish to learn more about the effects of death.") +end \ No newline at end of file diff --git a/server/SpawnScripts/QueensColony/Vim.lua b/server/SpawnScripts/QueensColony/Vim.lua new file mode 100644 index 000000000..8ae285f3c --- /dev/null +++ b/server/SpawnScripts/QueensColony/Vim.lua @@ -0,0 +1,27 @@ +--[[ + Script Name : SpawnScripts/QueensColony/Vim.lua + Script Author : Zcoretri + Script Date : 2015.07.27 + Script Purpose : Vim dialog + : +--]] + +function spawn(NPC) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + + choice = math.random(1,3) + if choice == 1 then + PlayFlavor(NPC, "voiceover/english/merchant_vim/boat_06p_tutorial02/020_merchant_vim_hail_187fc6bb.mp3", "I am busy right now...", "no", 1835666244, 487490745, Spawn) + elseif choice == 2 then + PlayFlavor(NPC, "voiceover/english/merchant_vim/boat_06p_tutorial02/020_merchant_vim_hail_481beac8.mp3", "I love traveling the seas... Oh! Did you need something?", "sniff", 2187888771, 2112320089, Spawn) + else + Say(NPC, "The Far Journey is a beautiful ship, aint she?") + end +end \ No newline at end of file diff --git a/server/SpawnScripts/QueensColony/VisageoftheQueen.lua b/server/SpawnScripts/QueensColony/VisageoftheQueen.lua new file mode 100644 index 000000000..fae9f649f --- /dev/null +++ b/server/SpawnScripts/QueensColony/VisageoftheQueen.lua @@ -0,0 +1,71 @@ +--[[ + Script Name : SpawnScripts/QueensColony/VisageoftheQueen.lua + Script Author : Zcoretri + Script Date : 2015.07.30 + Script Purpose : Visage of the Queen talking statue dialog + : +--]] + +function spawn(NPC) + Start(NPC) + --SetPlayerProximityFunction(NPC, 10, "InRange", "LeaveRange") +end + +function Start(NPC) + AddTimer(NPC, 1200000, "speech1") +end + +--[[function InRange(NPC, Spawn) + speech1(NPC) +end + +function LeaveRange(NPC, Spawn) + stop_speech(NPC) +end--]] + +function speech1(NPC, Spawn) + SpawnSet(NPC, "mood_state", "13046") -- Give her serious face! + SpawnSet(NPC, "action_state", "10756") -- Start waving arms about wildly + + PlayFlavor(NPC, "voiceover/english/queen_antonia_bayle/qey_north/eco_200_statue_queen_antonia_bayle_propaganda_1_b_e5f9dee6.mp3", "Who performed this miracle? We did. All of us, by our own hands, guided by our vision and the blessings of the gods. Qeynos stands as proof in the power of justice, equality, and compassion. For, as our founding patriarch, Antonius Bayle, would say: If a city will be great, it must first be good! And our city indeed owes its greatness to the goodness and benevolent ideals we citizens uphold.", "", 1818828034, 1870559483) + + AddTimer(NPC, 30000, "speech2") -- for 30 seconds, then to next speech cycle + +end + +function speech2(NPC, Spawn) + SpawnSet(NPC, "mood_state", "13046") -- Give her serious face! + SpawnSet(NPC, "action_state", "10756") -- Start waving arms about wildly + + PlayFlavor(NPC, "voiceover/english/queen_antonia_bayle/qey_north/eco_200_statue_queen_antonia_bayle_propaganda_1_c_1aa755c8.mp3", "In this Age of Destiny, Qeynos blossoms with abundance in both arts and commerce. Our children are nourished in body, mind, and spirit. Scholars, merchants, artisans, soldiers- all of us are welcome here; all of us find ample means and opportunity to share our unique gifts. Our city is a lamp in the darkness, and a clarion call to awaken Norrath from its long nightmare of discord. Let us remember that people in other lands look to us for hope and guidance. We are Norrath's shining example of what civilization really and truly means. But we mustn't fall into complacency and self-satisfaction. There is yet much to be done. There are refugees beyond our gates who do not enjoy the freedoms and rights we take for granted. They scratch out their meager lives in hunger and ignorance. Some flee persecution and violence; others are tormented by the merciless ravages of want. We Qeynosians who live in abundance are called to reach out to these refugees, to open our hearts and hands.", "", 3038020523, 1696768651) + + AddTimer(NPC, 75000, "speech3") -- for 30 seconds, then to next speech cycle + +end + +function speech3(NPC, Spawn) + SpawnSet(NPC, "mood_state", "13046") -- Give her serious face! + SpawnSet(NPC, "action_state", "10756") -- Start waving arms about wildly + + PlayFlavor(NPC, "voiceover/english/queen_antonia_bayle/qey_north/eco_200_statue_queen_antonia_bayle_propaganda_1_d_54e171d.mp3", "Yes, I am proud to call myself a Qeynosian. And I am certain that every one of us here is just as proud, just as grateful, and just as eager to share the light of civilization until it shines in every corner of Norrath. We must be extra vigilant to protect our way of life from the corruption of Freeport, which threatens us night and day. In Freeport, they mock the ideals we hold dear. They would make slaves of each and every one of us if they could. We have all seen examples of their ruthlessness and cruelty, of their total disregard for righteousness, of their deceptive and treacherous ways. We know of their unabated greed, and their appetite for territory. How they snap up lands and goods with no thought for the rights of needs of their victims.", "", 2019122145, 3355586847) + + AddTimer(NPC, 60000, "speech4") -- for 30 seconds, then to next speech cycle + +end + +function speech4(NPC, Spawn) + SpawnSet(NPC, "mood_state", "13046") -- Give her serious face! + SpawnSet(NPC, "action_state", "10756") -- Start waving arms about wildly + + PlayFlavor(NPC, "voiceover/english/queen_antonia_bayle/qey_north/eco_200_statue_queen_antonia_bayle_propaganda_1_e_8dd02ef3.mp3", "But Freeport shall not prevail! We Qeynosians know that the destiny of Norrath is like the sun at dawn, like a great light which begins with a spark and illuminates the land. Qeynos is that spark! Qeynos will spread its light of civilization until nothing and no one remains in darkness! And we are the ones called to carry this light. And so ... everyone ... I beseech thee all to remember that this is indeed the Age Of Destiny. And we Qeynosians are its children, and its acolytes ... and its greatest hope!", "", 4080984009, 3907237860) + + AddTimer(NPC, 30000, "stop_speech") -- for 30 seconds, then to next speech cycle + +end + +function stop_speech(NPC) + SpawnSet(NPC, "mood_state", "0") -- Give her stone face! + SpawnSet(NPC, "action_state", "0") -- Stop her waving + + AddTimer(NPC, 1200000, "speech1") +end \ No newline at end of file diff --git a/server/SpawnScripts/QueensColony/Waulon.lua b/server/SpawnScripts/QueensColony/Waulon.lua new file mode 100644 index 000000000..8658e6052 --- /dev/null +++ b/server/SpawnScripts/QueensColony/Waulon.lua @@ -0,0 +1,25 @@ +--[[ + Script Name : SpawnScripts/QueensColony/Waulon.lua + Script Author : Zcoretri + Script Date : 2015.07.27 + Script Purpose : Waulon dialog + : +--]] + +function spawn(NPC) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + + choice = math.random(1,2) + if choice == 1 then + PlayFlavor(NPC, "voiceover/english/waulon/boat_06p_tutorial02/walon_0_004.mp3", "Where's me hat? Needs me lucky hat!", "", 2688932325, 103225044, Spawn) + else + PlayFlavor(NPC, "voiceover/english/waulon/boat_06p_tutorial02/walon_0_008.mp3", "What? Can't you see? Busy, away with ye!", "", 1608066875, 70639594, Spawn) + end +end \ No newline at end of file diff --git a/server/SpawnScripts/QueensColony/aMorakdevourer_halfling.lua b/server/SpawnScripts/QueensColony/aMorakdevourer_halfling.lua new file mode 100644 index 000000000..cdd7a6536 --- /dev/null +++ b/server/SpawnScripts/QueensColony/aMorakdevourer_halfling.lua @@ -0,0 +1,35 @@ +--[[ + Script Name : SpawnScripts/QueensColony/aMorakdevourer_halfling.lua + Script Purpose : a Morak devourer + Script Author : Scatman + Script Date : 2009.05.14 + Script Notes : +--]] + +function spawn(NPC) + if GetSpawnLocationID(NPC) == 1584881 then + local Halfling = GetSpawnByLocationID(GetZone(NPC), 1584880) + if Halfling == nil then + SpawnByLocationID(GetZone(NPC), 1584880) + else + SpawnSet(Halfling, "show_command_icon", 0) + end + + local RescuedHalfling = GetSpawnByLocationID(GetZone(NPC), 1584992) + if RescuedHalfling ~= nil then + Say(Halfling, "Ahhhhhh! I must escape!") + Despawn(RescuedHalfling) + end + end +end + +function respawn(NPC) + spawn(NPC) +end + +function group_dead(NPC, Spawn) + local Halfling = GetSpawnByLocationID(GetZone(NPC), 1584880) + if Halfling ~= nil then + SpawnSet(Halfling, "show_command_icon", 1) + end +end \ No newline at end of file diff --git a/server/SpawnScripts/QueensColony/aQeynosianscout(rescue).lua b/server/SpawnScripts/QueensColony/aQeynosianscout(rescue).lua new file mode 100644 index 000000000..6d060c8ce --- /dev/null +++ b/server/SpawnScripts/QueensColony/aQeynosianscout(rescue).lua @@ -0,0 +1,36 @@ +--[[ + Script Name : SpawnScripts/QueensColony/aQeynosianscout.lua + Script Purpose : a Qeynosian scout + Script Author : John Adams/Scatman + Script Date : 2009.01.11 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +function spawn(NPC) + SetPlayerProximityFunction(NPC, 30, "InRange", "LeaveRange") +end + +function hailed(NPC, Spawn) +end + +function respawn(NPC) + spawn(NPC) +end + +function InRange(NPC, Player) + choice = math.random(1, 3) + if choice == 1 then + PlayFlavor(NPC, "", "A little help here! How did I get myself into this mess?", "", 1689589577, 4560189, Player) + elseif choice == 2 then + PlayFlavor(NPC, "", "Devil dogs! Those were my best pair of pants!", "", 1689589577, 4560189, Player) + else + Say(NPC, "They took my armor, but they'll never take my pride!", Player) + end +end + +function casted_on(NPC, Spawn, Message) + if Message == "Help down" then + SpawnByLocationID(GetZone(NPC), 1584992) + Despawn(NPC) + end +end \ No newline at end of file diff --git a/server/SpawnScripts/QueensColony/aQeynosianscout(rescued).lua b/server/SpawnScripts/QueensColony/aQeynosianscout(rescued).lua new file mode 100644 index 000000000..b6ed05faa --- /dev/null +++ b/server/SpawnScripts/QueensColony/aQeynosianscout(rescued).lua @@ -0,0 +1,114 @@ +--[[ + Script Name : SpawnScripts/QueensColony/aQeynosianscout.lua + Script Purpose : a Qeynosian scout + Script Author : John Adams/Scatman + Script Date : 2009.01.11 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +local DoggoneIt = 165 + +function spawn(NPC) + ProvidesQuest(NPC, DoggoneIt) + Say(NPC, "Whew, thank you! I couldn't hold on much longer.") +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + --Say(NPC, "Test") + + if HasCompletedQuest(Spawn, DoggoneIt) then + Say(NPC, "I hate dogs!") + else + EvilMoraks(NPC, Spawn) + end +end + +function EvilMoraks(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + if HasQuest(Spawn, DoggoneIt) then + if GetQuestStep(Spawn, DoggoneIt) == 2 then + AddConversationOption(conversation, "You look pretty shaken up.", "ShakenUp") + elseif QuestStepIsComplete(Spawn, DoggoneIt, 3) and QuestStepIsComplete(Spawn, DoggoneIt, 4) and QuestStepIsComplete(Spawn, DoggoneIt, 5) and GetQuestStep(Spawn, DoggoneIt) == 6 then + AddConversationOption(conversation, "You're not going to like this...there are multitudes of Moraks ahead.", "NotGoingToLike") + elseif GetQuestStep(Spawn, DoggoneIt) >= 7 then + AddConversationOption(conversation, "Um...about that gift you gave me...", "AboutThatGift") + end + else + AddConversationOption(conversation, "I've gotten rid of them. Are there more?", "AreThereMore") + end + + AddConversationOption(conversation, "Be brave!") + StartConversation(conversation, NPC, Spawn, "Wh..where are they? Those nasty, evil Moraks?") +end + +function AreThereMore(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "I'll get rid of them.", "OfferQuest1") + AddConversationOption(conversation, "Good luck with that.") + StartConversation(conversation, NPC, Spawn, "Get them away! Who knew that Moraks were hounds, I ask you? They've got to be eliminated! Dratted beasts!") +end + +function OfferQuest1(NPC, Spawn) + FaceTarget(NPC, Spawn) + OfferQuest(NPC, Spawn, DoggoneIt) +end + +function ShakenUp(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "These little pups? They don't scare me.", "DontScareMe") + StartConversation(conversation, NPC, Spawn, "Whew! When I was assigned to explore the village, I had no idea there would be these... these dogs! I'm deathly afraid of them. Got bitten very badly as a child you see. This is terrible! How can I finish my mission! Hmmm! You don't seem to be frightened of them.") +end + +function DontScareMe(NPC, Spawn) + SetStepComplete(Spawn, DoggoneIt, 2) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "Not a problem. Wait for me here.") + StartConversation(conversation, NPC, Spawn, "I would be forever in your debt if you could perhaps take a quick peek around the village for me and clear out any of those wretched Moraks so that I can continue my misson please?") +end + +function NotGoingToLike(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "The Moraks are even more plentiful around the villages. I cleared a path, but they'll soon be back.", "SoonBeBack") + StartConversation(conversation, NPC, Spawn, "Oh, dear.") +end + +function SoonBeBack(NPC, Spawn) + SetStepComplete(Spawn, DoggoneIt, 6) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + -- summon A Diplomatic Gift if the player does not have one + if not HasItem(Spawn, 1565) then + SummonItem(Spawn, 1565) + end + + AddConversationOption(conversation, "I'll take care of it, no worries.") + StartConversation(conversation, NPC, Spawn, "I do owe you for this friend. I'm primarily a scout but also a diplomat-in-training. I'm supposed to open lines of communication with the Sapswill soothsayer, who supposedly knows a great deal about what's ailing our Colony. Can you take him this gift? As an act of diplomat-in-training?") +end + +function AboutThatGift(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + -- summon A Diplomatic Gift if the player does not have one + if not HasItem(Spawn, 1565) then + SummonItem(Spawn, 1565) + end + + AddConversationOption(conversation, "I'm sorry. I'll be more careful.") + StartConversation(conversation, NPC, Spawn, "Oooh! You lost it, didn't you? Good thing I'm a diplomat-in-training! I have a bunch of these at hand. Here, take this one. Please try not to lose it!") +end \ No newline at end of file diff --git a/server/SpawnScripts/QueensColony/aSapswillsoothsayer.lua b/server/SpawnScripts/QueensColony/aSapswillsoothsayer.lua new file mode 100644 index 000000000..a829b2675 --- /dev/null +++ b/server/SpawnScripts/QueensColony/aSapswillsoothsayer.lua @@ -0,0 +1,154 @@ +--[[ + Script Name : + Script Purpose : + Script Author : + Script Date : + Script Notes : +--]] + +local GhostsAndGoblins = 184 +local DoggoneIt = 165 +local ADiplomaticMission = 166 + +function spawn(NPC) + ProvidesQuest(NPC, ADiplomaticMission) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + + if HasCompletedQuest(Spawn, GhostsAndGoblins) then + GrexxPromises(NPC, Spawn, 0) + elseif HasQuest(Spawn, GhostsAndGoblins) then + if GetQuestStep(Spawn, GhostsAndGoblins) == 4 then + GrexxPromises(NPC, Spawn, 1) + elseif GetQuestStep(Spawn, GhostsAndGoblins) >= 4 and GetQuestStep(Spawn, GhostsAndGoblins) <= 8 then + GrexxPromises(NPC, Spawn, 0) + elseif GetQuestStep(Spawn, GhostsAndGoblins) == 9 then + GrexxPromises(NPC, Spawn, 2) + end + else + GrexxPromises(NPC, Spawn, 0) + end +end + +function GrexxPromises(NPC, Spawn, Choice) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + if HasCompletedQuest(Spawn, DoggoneIt) then + if HasCompletedQuest(Spawn, ADiplomaticMission) then + elseif HasQuest(Spawn, ADiplomaticMission) then + AddConversationOption(conversation, "I just wanted to say, about that present...", "GiftFromQeynos") + else + AddConversationOption(conversation, "I just wanted to say, about that present...", "GiftFromQeynos") + end + elseif HasQuest(Spawn, DoggoneIt) then + if GetQuestStep(Spawn, DoggoneIt) == 7 then + AddConversationOption(conversation, "I bring you a gift from the people of Qeynos.", "GiftFromQeynos") + end + end + + if Choice == 1 then + AddConversationOption(conversation, "The Forest Keeper sent me to ...", "ForestKeeperSentMe") + elseif Choice == 2 then + AddConversationOption(conversation, "I've gotten the items you've asked for.", "GotYourItemsBitch") + end + + AddConversationOption(conversation, "I'll bet they are.") + StartConversation(conversation, NPC, Spawn, "Grexx promises us and his promise is kept!") +end + +function ForestKeeperSentMe(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "But what...", "ButWhat") + StartConversation(conversation, NPC, Spawn, "Forest Keeper, big tree! Yes, yes, waiting for you. Big tree, big promise! Water is needed, yes! Three waters, fallen from the skies and the roots from deep beneath! Fetch the waters! Gather the roots!") +end + +function ButWhat(NPC, Spawn) + SetStepComplete(Spawn, GhostsAndGoblins, 4) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "Well. Okay.") + StartConversation(conversation, NPC, Spawn, "Nothing more to say! Big tree sends you to me to help! Big tree keeps promise! Bring waters and roots first, then sayings I will sooth! Must bring to me, or nothing more will I say!") +end + +function GotYourItemsBitch(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "The Forest Keeper said you'd know how to stop the corruption of the colony.", "ForestKeeperSaid") + StartConversation(conversation, NPC, Spawn, "Yes! Yes! Freshest waters! Tasty roots! Now will I tell you what you want to know. What you want to know?") +end + +function ForestKeeperSaid(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "Then what was all that stuff for?", "StuffFor") + StartConversation(conversation, NPC, Spawn, "Me? No! Grexx knows all, no sayings need to sooth on that! Ha! Why tree tell you such a joke? Ha! Evil things creeping up on poor gobbies, long time now! Big tree is wrong, nothing new to know about that. Happy you came to help us, though!") +end + +function StuffFor(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "You mean you're going to make a brew out of them?", "MakeBrew") + StartConversation(conversation, NPC, Spawn, "Ah, tasty roots! Mash them up, grind them up and soak in the waters. After the moons are new again, ready to drink, it is! Helps to forget, helps to remember. Tasty Roots!") +end + +function MakeBrew(NPC, Spawn) + SetStepComplete(Spawn, GhostsAndGoblins, 9) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "I don't think it's very even.") + StartConversation(conversation, NPC, Spawn, "Yes, yes! Tasty brew! If you knew there was no sooth to be said, would you have got tasty roots and fresh waters for us? No! So now we have them and now you will know as much as Sapswills! Even trade! Even trade! Share with you, we will, too!") +end + +------------------------------------------------------------------------------------------ +-- diplomat quest +------------------------------------------------------------------------------------------ + +function GiftFromQeynos(NPC, Spawn) + if HasQuest(Spawn, DoggoneIt) and HasItem(Spawn, 1565) then + -- remove a Diplomatic Gift + RemoveItem(Spawn, 1565) + SetStepComplete(Spawn, DoggoneIt, 7) + end + + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + if not HasQuest(Spawn, ADiplomaticMission) and not HasCompletedQuest(Spawn, ADiplomaticMission) and HasCompletedQuest(Spawn, DoggoneIt) then + AddConversationOption(conversation, "It's a small token of friendship. A diplomatic gesture.", "TokenOfFriendship") + end + + AddConversationOption(conversation, "It's my pleasure to meet you.") + StartConversation(conversation, NPC, Spawn, "Hello! Hello! I knew you would be coming! I knew! And bringing a present...we loves presents!") +end + +------------------------------------------------------------------------------------------ +-- diplomat quest +------------------------------------------------------------------------------------------ + +function TokenOfFriendship(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "I'll pay my respect to your...er people.", "OfferQuest1") + AddConversationOption(conversation, "I need to run.") + StartConversation(conversation, NPC, Spawn, "Friends for life, we are now! Is our tradition to greet everyone we meet. Go meet the Sapswills! Is the diplomatic way! Hail them all! We like friends! Meet the Sapswills, then meet High Chiefain Grexx! He likes friends too! To long life and happy friendships!") +end + +function OfferQuest1(NPC, Spawn) + FaceTarget(NPC, Spawn) + OfferQuest(NPC, Spawn, ADiplomaticMission) +end \ No newline at end of file diff --git a/server/SpawnScripts/QueensColony/adeadsoldier.lua b/server/SpawnScripts/QueensColony/adeadsoldier.lua new file mode 100644 index 000000000..b2e7fd7be --- /dev/null +++ b/server/SpawnScripts/QueensColony/adeadsoldier.lua @@ -0,0 +1,36 @@ +--[[ + Script Name : SpawnScripts/QueensColony/adeadsoldier.lua + Script Purpose : a dead soldier + Script Author : Scatman + Script Date : 2009.06.13 + Script Notes : +--]] + +local DefiledSoldier = 2530024 +local APresenceOfEvil = 131 + +function spawn(NPC) + SetPlayerProximityFunction(NPC, 10, "InRange", "OutOfRange") +end + +function hailed(NPC, Spawn) +end + +function respawn(NPC) + spawn(NPC) +end + +function InRange(NPC, Spawn) + if HasQuest(Spawn, APresenceOfEvil) and GetQuestStep(Spawn, APresenceOfEvil) == 4 and not (GetTempVariable(NPC, "APresenceOfEvil_Activated") == "True") then + SetStepComplete(Spawn, APresenceOfEvil, 4) + SetTempVariable(NPC, "APresenceOfEvil_Activated", "True") + local defiled = SpawnMob(GetZone(NPC), DefiledSoldier, 0, GetX(NPC), GetY(NPC), GetZ(NPC), GetHeading(NPC)) + if defiled ~= nil then + Attack(NPC, Spawn) + end + Despawn(NPC, 2000) + end +end + +function OutOfRange(NPC, Spawn) +end \ No newline at end of file diff --git a/server/SpawnScripts/QueensColony/afallenassassin.lua b/server/SpawnScripts/QueensColony/afallenassassin.lua new file mode 100644 index 000000000..2aefdb75b --- /dev/null +++ b/server/SpawnScripts/QueensColony/afallenassassin.lua @@ -0,0 +1,35 @@ +--[[ + Script Name : SpawnScripts/QueensColony/afallenassassin.lua + Script Purpose : Path to doom, and drop skull when killed by player + Script Author : Jabantiz + Script Date : 9/11/2016 + Script Notes : +--]] + +function spawn(NPC) + MovementLoopAddLocation(NPC, -125.5, 4.64, -50.29, 4) + MovementLoopAddLocation(NPC, -132.23, 4.36, -63.2, 4) + MovementLoopAddLocation(NPC, -133.43, 4.37, -88.26, 4) + MovementLoopAddLocation(NPC, -110.11, 4.29, -101.71, 4) + MovementLoopAddLocation(NPC, -97.02, 4.24, -116.82, 4) + MovementLoopAddLocation(NPC, -81.65, 4.13, -120.89, 4) + MovementLoopAddLocation(NPC, -70.74, 4.09, -133.39, 4) + MovementLoopAddLocation(NPC, -57.57, 2.24, -135.21, 4) + MovementLoopAddLocation(NPC, -51.81, 2.03, -153.28, 4, 60) +end + +function respawn(NPC) + spawn(NPC) +end + +function death(NPC, Spawn) + if IsPlayer(Spawn) then + local chance = math.random(1, 100) + if chance <= 35 then + local skull = SpawnMob(GetZone(Spawn), 2530192, false, GetX(NPC), GetY(NPC), GetZ(NPC)) + if skull ~= nil then + SpawnSet(skull, "expire", "1000") + end + end + end +end \ No newline at end of file diff --git a/server/SpawnScripts/QueensColony/alostscout(Ghost).lua b/server/SpawnScripts/QueensColony/alostscout(Ghost).lua new file mode 100644 index 000000000..d23e7044a --- /dev/null +++ b/server/SpawnScripts/QueensColony/alostscout(Ghost).lua @@ -0,0 +1,38 @@ +--[[ + Script Name : + Script Purpose : + Script Author : Jabantiz + Script Date : 9/9/2016 + Script Notes : +--]] + +local JoiningTheForwardRanks = 163 + +function spawn(NPC) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) +end + +function casted_on(NPC, Spawn, Message) + local Cleric = GetSpawn(NPC, 2530111) + if Message == "Divine Smite" and CompareSpawns(Spawn, Cleric) then + local newScout = SpawnMob(GetZone(NPC), 2530196, false, GetX(NPC), GetY(NPC), GetZ(NPC), GetHeading(NPC)) + if newScout ~= nil then + CopySpawnAppearance(newScout, NPC) + SpawnSet(newScout, "visual_state", "0") + AddTimer(newScout, 5000, "Speak") + end + local mostHated = GetMostHated(NPC) + if mostHated ~= nil and IsPlayer(mostHated) then + if HasQuest(mostHated, JoiningTheForwardRanks) and GetQuestStep(mostHated, JoiningTheForwardRanks) == 2 then + AddStepProgress(mostHated, JoiningTheForwardRanks, 2, 1) + end + end + Despawn(NPC) + end +end \ No newline at end of file diff --git a/server/SpawnScripts/QueensColony/alostscout.lua b/server/SpawnScripts/QueensColony/alostscout.lua new file mode 100644 index 000000000..b74c533a5 --- /dev/null +++ b/server/SpawnScripts/QueensColony/alostscout.lua @@ -0,0 +1,42 @@ +--[[ + Script Name : SpawnScripts/QueensColony/alostscout.lua + Script Purpose : a lost scout + Script Author : John Adams + Script Date : 2008.09.20 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +function spawn(NPC) +end + +function respawn(NPC) + spawn(NPC) +end + +function Speak(NPC) + local choice = math.random(1,4) + + if choice == 1 then + PlayFlavor(NPC, "", "Wha... what happened? I should get back to the colony!", "", 1689589577, 4560189, spawn) + elseif choice == 2 then + PlayFlavor(NPC, "", "Whe... where am I? I should get back to the colony!", "", 1689589577, 4560189, spawn) + elseif choice == 3 then + PlayFlavor(NPC, "", "Whew, thank you! I couldn't hold on much longer.", "", 1689589577, 4560189, spawn) + else + PlayFlavor(NPC, "", "Ahhhhh! I must escape!", "", 1689589577, 4560189, spawn) + end + + AddTimer(NPC, 1000, "Run") +end + +function Run(NPC) + MoveToLocation(NPC, 216.86, -3.46, 141.55, 4, "Run2") +end + +function Run2(NPC) + MoveToLocation(NPC, 185.83, -3.20, 149.79, 4, "Vanish") +end + +function Vanish(NPC) + Despawn(NPC) +end \ No newline at end of file diff --git a/server/SpawnScripts/QueensColony/arazortoothshark.lua b/server/SpawnScripts/QueensColony/arazortoothshark.lua new file mode 100644 index 000000000..f068446c6 --- /dev/null +++ b/server/SpawnScripts/QueensColony/arazortoothshark.lua @@ -0,0 +1,25 @@ +--[[ + Script Name : SpawnScripts/QueensColony/arazortoothshark.lua + Script Author : fearfx + Script Date : 2017.01.25 06:01:45 + Script Purpose : a hacky fix for a quest in DLW (The Big One, ID= 190) Spawns Smolderfin. + : +--]] + +function spawn(NPC) + +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) +end + +function respawn(NPC) + spawn(NPC) +end + +function death(NPC, Spawn) + if GetName(NPC) == "Smolderfin" then + SetTempVariable(Spawn, "TheBigOne", nil) + end +end \ No newline at end of file diff --git a/server/SpawnScripts/QueensColony/asmallcoastalcrab430717.lua b/server/SpawnScripts/QueensColony/asmallcoastalcrab430717.lua new file mode 100644 index 000000000..abdd41755 --- /dev/null +++ b/server/SpawnScripts/QueensColony/asmallcoastalcrab430717.lua @@ -0,0 +1,34 @@ +--[[ + Script Name : SpawnScripts/QueensColony/asmallcoastalcrab430717.lua + Script Purpose : Waypoint Path for asmallcoastalcrab430717.lua + Script Author : Rylec + Script Date : 10-19-2019 12:42:15 + Script Notes : Locations collected from Live +--]] + +function spawn(NPC) + waypoints(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) +end + +function respawn(NPC) +end + +function waypoints(NPC) + MovementLoopAddLocation(NPC, -46.29, -8.62, 202.88, 2, math.random(10, 20)) + MovementLoopAddLocation(NPC, -54.23, -7.85, 214.12, 2, math.random(10, 20)) + MovementLoopAddLocation(NPC, -52.21, -8.07, 208.63, 2, 0) + MovementLoopAddLocation(NPC, -52.19, -8.47, 206.83, 2, math.random(10, 20)) + MovementLoopAddLocation(NPC, -53.11, -8.10, 207.86, 2, 0) + MovementLoopAddLocation(NPC, -57.63, -8.20, 211.73, 2, 0) + MovementLoopAddLocation(NPC, -59.43, -8.58, 213.08, 2, math.random(10, 20)) + MovementLoopAddLocation(NPC, -58.24, -8.68, 210.06, 2, math.random(10, 20)) + MovementLoopAddLocation(NPC, -61.68, -9.83, 209.94, 2, math.random(10, 20)) + MovementLoopAddLocation(NPC, -60.21, -9.37, 210.08, 2, 0) + MovementLoopAddLocation(NPC, -50.18, -8.24, 214.05, 2, math.random(10, 20)) +end + + diff --git a/server/SpawnScripts/QueensColony/asmallcoastalcrab430718.lua b/server/SpawnScripts/QueensColony/asmallcoastalcrab430718.lua new file mode 100644 index 000000000..2c1c32a0c --- /dev/null +++ b/server/SpawnScripts/QueensColony/asmallcoastalcrab430718.lua @@ -0,0 +1,40 @@ +--[[ + Script Name : SpawnScripts/QueensColony/asmallcoastalcrab430718.lua + Script Purpose : Waypoint Path for asmallcoastalcrab430718.lua + Script Author : Rylec + Script Date : 10-19-2019 12:42:20 + Script Notes : Locations collected from Live +--]] + +function spawn(NPC) + waypoints(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) +end + +function respawn(NPC) +end + +function waypoints(NPC) + MovementLoopAddLocation(NPC, -42.96, -4.92, 209.22, 2, math.random(10, 20)) + MovementLoopAddLocation(NPC, -44.44, -5.93, 207.51, 2, 0) + MovementLoopAddLocation(NPC, -45.33, -6.69, 206.83, 2, math.random(10, 20)) + MovementLoopAddLocation(NPC, -57.25, -8.09, 213.98, 2, math.random(10, 20)) + MovementLoopAddLocation(NPC, -56.21, -7.98, 215.67, 2, 0) + MovementLoopAddLocation(NPC, -56.29, -8.36, 218.24, 2, math.random(10, 20)) + MovementLoopAddLocation(NPC, -55.15, -7.82, 214.00, 2, math.random(10, 20)) + MovementLoopAddLocation(NPC, -57.43, -8.32, 210.77, 2, math.random(10, 20)) + MovementLoopAddLocation(NPC, -52.60, -8.03, 208.28, 2, 0) + MovementLoopAddLocation(NPC, -47.96, -8.43, 204.32, 2, 0) + MovementLoopAddLocation(NPC, -46.79, -8.37, 203.75, 2, 0) + MovementLoopAddLocation(NPC, -45.17, -8.99, 201.82, 2, math.random(10, 20)) + MovementLoopAddLocation(NPC, -45.77, -8.71, 202.42, 2, 0) + MovementLoopAddLocation(NPC, -47.36, -9.08, 202.50, 2, math.random(10, 20)) + MovementLoopAddLocation(NPC, -47.01, -8.51, 203.49, 2, 0) + MovementLoopAddLocation(NPC, -44.16, -6.81, 206.04, 2, 0) + MovementLoopAddLocation(NPC, -43.74, -5.31, 207.99, 2, 0) +end + + diff --git a/server/SpawnScripts/QueensColony/asmallcoastalcrab430719.lua b/server/SpawnScripts/QueensColony/asmallcoastalcrab430719.lua new file mode 100644 index 000000000..a815199fc --- /dev/null +++ b/server/SpawnScripts/QueensColony/asmallcoastalcrab430719.lua @@ -0,0 +1,36 @@ +--[[ + Script Name : SpawnScripts/QueensColony/asmallcoastalcrab430719.lua + Script Purpose : Waypoint Path for asmallcoastalcrab430719.lua + Script Author : Rylec + Script Date : 10-19-2019 12:42:23 + Script Notes : Locations collected from Live +--]] + +function spawn(NPC) + waypoints(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) +end + +function respawn(NPC) +end + +function waypoints(NPC) + MovementLoopAddLocation(NPC, -55.17, -8.35, 219.01, 2, math.random(10, 20)) + MovementLoopAddLocation(NPC, -57.67, -8.41, 210.61, 2, 0) + MovementLoopAddLocation(NPC, -58.46, -9.14, 208.98, 2, math.random(10, 20)) + MovementLoopAddLocation(NPC, -52.14, -8.04, 209.99, 2, math.random(10, 20)) + MovementLoopAddLocation(NPC, -52.18, -8.02, 216.00, 2, math.random(10, 20)) + MovementLoopAddLocation(NPC, -54.28, -8.63, 207.03, 2, math.random(10, 20)) + MovementLoopAddLocation(NPC, -52.38, -8.17, 207.80, 2, 0) + MovementLoopAddLocation(NPC, -49.31, -8.41, 208.89, 2, math.random(10, 20)) + MovementLoopAddLocation(NPC, -47.84, -6.82, 209.67, 2, 0) + MovementLoopAddLocation(NPC, -44.44, -4.90, 212.81, 2, math.random(10, 20)) + MovementLoopAddLocation(NPC, -45.27, -5.30, 214.09, 2, math.random(10, 20)) + MovementLoopAddLocation(NPC, -49.24, -8.23, 215.67, 2, 0) + MovementLoopAddLocation(NPC, -52.03, -8.05, 216.82, 2, 0) +end + + diff --git a/server/SpawnScripts/QueensColony/asmallcoastalcrab430721.lua b/server/SpawnScripts/QueensColony/asmallcoastalcrab430721.lua new file mode 100644 index 000000000..8016d9dad --- /dev/null +++ b/server/SpawnScripts/QueensColony/asmallcoastalcrab430721.lua @@ -0,0 +1,47 @@ +--[[ + Script Name : SpawnScripts/QueensColony/asmallcoastalcrab430721.lua + Script Purpose : Waypoint Path for asmallcoastalcrab430721.lua + Script Author : Rylec + Script Date : 10-19-2019 12:42:25 + Script Notes : Locations collected from Live +--]] + +function spawn(NPC) + waypoints(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) +end + +function respawn(NPC) +end + +function waypoints(NPC) + MovementLoopAddLocation(NPC, -61.11, -9.43, 210.91, 2, math.random(10, 20)) + MovementLoopAddLocation(NPC, -59.83, -8.73, 211.54, 2, 0) + MovementLoopAddLocation(NPC, -58.87, -8.44, 212.25, 2, 0) + MovementLoopAddLocation(NPC, -55.22, -7.82, 214.03, 2, math.random(10, 20)) + MovementLoopAddLocation(NPC, -56.17, -7.87, 212.97, 2, 0) + MovementLoopAddLocation(NPC, -58.12, -8.29, 211.89, 2, 0) + MovementLoopAddLocation(NPC, -59.17, -8.69, 210.85, 2, math.random(10, 20)) + MovementLoopAddLocation(NPC, -58.11, -8.70, 209.87, 2, 0) + MovementLoopAddLocation(NPC, -46.48, -8.26, 203.89, 2, math.random(10, 20)) + MovementLoopAddLocation(NPC, -43.24, -8.45, 202.82, 2, math.random(10, 20)) + MovementLoopAddLocation(NPC, -56.04, -8.05, 216.26, 2, 0) + MovementLoopAddLocation(NPC, -57.81, -8.53, 218.41, 2, 0) + MovementLoopAddLocation(NPC, -58.34, -8.85, 219.32, 2, 0) + MovementLoopAddLocation(NPC, -59.41, -9.46, 220.19, 2, math.random(10, 20)) + MovementLoopAddLocation(NPC, -57.98, -8.60, 218.81, 2, 0) + MovementLoopAddLocation(NPC, -47.72, -8.66, 203.40, 2, 0) + MovementLoopAddLocation(NPC, -47.26, -9.67, 201.70, 2, math.random(10, 20)) + MovementLoopAddLocation(NPC, -47.65, -6.91, 215.31, 2, math.random(10, 20)) + MovementLoopAddLocation(NPC, -52.38, -8.00, 216.04, 2, 0) + MovementLoopAddLocation(NPC, -56.56, -8.41, 218.44, 2, 0) + MovementLoopAddLocation(NPC, -58.40, -8.85, 219.25, 2, math.random(10, 20)) + MovementLoopAddLocation(NPC, -48.89, -8.33, 209.68, 2, 0) + MovementLoopAddLocation(NPC, -46.31, -6.10, 208.97, 2, math.random(10, 20)) + MovementLoopAddLocation(NPC, -47.16, -6.14, 213.70, 2, math.random(10, 20)) + MovementLoopAddLocation(NPC, -52.24, -8.02, 216.43, 2, 0) + MovementLoopAddLocation(NPC, -54.11, -8.12, 218.06, 2, math.random(10, 20)) +end diff --git a/server/SpawnScripts/QueensColony/asmallcoastalcrab430722.lua b/server/SpawnScripts/QueensColony/asmallcoastalcrab430722.lua new file mode 100644 index 000000000..8ebfd4b32 --- /dev/null +++ b/server/SpawnScripts/QueensColony/asmallcoastalcrab430722.lua @@ -0,0 +1,42 @@ +--[[ + Script Name : SpawnScripts/QueensColony/asmallcoastalcrab430722.lua + Script Purpose : Waypoint Path for asmallcoastalcrab430722.lua + Script Author : Rylec + Script Date : 10-19-2019 12:42:28 + Script Notes : Locations collected from Live +--]] + +function spawn(NPC) + waypoints(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) +end + +function respawn(NPC) +end + +function waypoints(NPC) + MovementLoopAddLocation(NPC, -53.42, -7.88, 214.04, 2, math.random(10, 20)) + MovementLoopAddLocation(NPC, -46.27, -8.52, 203.13, 2, math.random(10, 20)) + MovementLoopAddLocation(NPC, -46.82, -5.67, 210.62, 2, 0) + MovementLoopAddLocation(NPC, -49.02, -8.23, 211.02, 2, math.random(10, 20)) + MovementLoopAddLocation(NPC, -56.17, -7.91, 211.90, 2, math.random(10, 20)) + MovementLoopAddLocation(NPC, -42.10, -7.65, 204.79, 2, math.random(10, 20)) + MovementLoopAddLocation(NPC, -56.06, -8.90, 207.52, 2, 0) + MovementLoopAddLocation(NPC, -57.25, -9.09, 208.03, 2, 0) + MovementLoopAddLocation(NPC, -59.49, -9.50, 208.90, 2, 0) + MovementLoopAddLocation(NPC, -61.58, -9.46, 217.06, 2, math.random(10, 20)) + MovementLoopAddLocation(NPC, -55.62, -7.91, 211.43, 2, 0) + MovementLoopAddLocation(NPC, -51.73, -8.43, 207.07, 2, math.random(10, 20)) + MovementLoopAddLocation(NPC, -57.40, -8.32, 210.77, 2, math.random(10, 20)) + MovementLoopAddLocation(NPC, -57.32, -8.13, 213.20, 2, 0) + MovementLoopAddLocation(NPC, -60.47, -9.23, 218.20, 2, math.random(10, 20)) + MovementLoopAddLocation(NPC, -58.30, -8.34, 216.18, 2, 0) + MovementLoopAddLocation(NPC, -53.07, -7.89, 213.89, 2, math.random(10, 20)) + MovementLoopAddLocation(NPC, -46.31, -8.62, 202.89, 2, math.random(10, 20)) + MovementLoopAddLocation(NPC, -46.69, -5.63, 210.58, 2, 0) + MovementLoopAddLocation(NPC, -45.30, -5.23, 212.23, 2, math.random(10, 20)) +end + diff --git a/server/SpawnScripts/QueensColony/asmallcoastalcrab430744.lua b/server/SpawnScripts/QueensColony/asmallcoastalcrab430744.lua new file mode 100644 index 000000000..ded8bcd45 --- /dev/null +++ b/server/SpawnScripts/QueensColony/asmallcoastalcrab430744.lua @@ -0,0 +1,47 @@ +--[[ + Script Name : SpawnScripts/QueensColony/asmallcoastalcrab430744.lua + Script Purpose : Waypoint Path for asmallcoastalcrab430744.lua + Script Author : Rylec + Script Date : 10-19-2019 12:42:18 + Script Notes : Locations collected from Live +--]] + +function spawn(NPC) + waypoints(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) +end + +function respawn(NPC) +end + +function waypoints(NPC) + MovementLoopAddLocation(NPC, -56.43, -7.93, 212.96, 2, math.random(10, 20)) + MovementLoopAddLocation(NPC, -43.07, -4.89, 209.84, 2, math.random(10, 20)) + MovementLoopAddLocation(NPC, -51.05, -8.14, 213.87, 2, math.random(10, 20)) + MovementLoopAddLocation(NPC, -57.40, -9.22, 207.79, 2, math.random(10, 20)) + MovementLoopAddLocation(NPC, -56.23, -8.45, 209.26, 2, 0) + MovementLoopAddLocation(NPC, -50.49, -8.22, 215.42, 2, 0) + MovementLoopAddLocation(NPC, -50.04, -8.32, 216.87, 2, math.random(10, 20)) + MovementLoopAddLocation(NPC, -49.88, -8.31, 216.50, 2, 0) + MovementLoopAddLocation(NPC, -54.20, -7.88, 211.09, 2, math.random(10, 20)) + MovementLoopAddLocation(NPC, -50.66, -8.82, 206.11, 2, 0) + MovementLoopAddLocation(NPC, -46.63, -8.89, 202.35, 2, 0) + MovementLoopAddLocation(NPC, -44.78, -10.91, 199.08, 2, math.random(10, 20)) + MovementLoopAddLocation(NPC, -45.96, -8.94, 201.97, 2, 0) + MovementLoopAddLocation(NPC, -48.77, -9.41, 204.07, 2, 0) + MovementLoopAddLocation(NPC, -53.80, -9.08, 205.33, 2, 0) + MovementLoopAddLocation(NPC, -55.52, -9.23, 206.16, 2, 0) + MovementLoopAddLocation(NPC, -57.39, -9.83, 205.81, 2, math.random(10, 20)) + MovementLoopAddLocation(NPC, -56.56, -9.59, 205.89, 2, 0) + MovementLoopAddLocation(NPC, -53.84, -8.15, 208.18, 2, 0) + MovementLoopAddLocation(NPC, -45.97, -5.59, 214.15, 2, math.random(10, 20)) + MovementLoopAddLocation(NPC, -61.53, -9.44, 217.02, 2, math.random(10, 20)) + MovementLoopAddLocation(NPC, -56.08, -7.90, 211.96, 2, 0) + MovementLoopAddLocation(NPC, -54.29, -8.11, 208.75, 2, math.random(10, 20)) + MovementLoopAddLocation(NPC, -47.37, -6.93, 207.66, 2, 0) + MovementLoopAddLocation(NPC, -43.06, -7.39, 204.81, 2, math.random(10, 20)) +end + diff --git a/server/SpawnScripts/QueensColony/asmallcoastalcrab430767.lua b/server/SpawnScripts/QueensColony/asmallcoastalcrab430767.lua new file mode 100644 index 000000000..faa8a8f6a --- /dev/null +++ b/server/SpawnScripts/QueensColony/asmallcoastalcrab430767.lua @@ -0,0 +1,38 @@ +--[[ + Script Name : SpawnScripts/QueensColony/asmallcoastalcrab430767.lua + Script Purpose : Waypoint Path for asmallcoastalcrab430767.lua + Script Author : Rylec + Script Date : 10-19-2019 12:41:50 + Script Notes : Locations collected from Live +--]] + +function spawn(NPC) + waypoints(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) +end + +function respawn(NPC) +end + +function waypoints(NPC) + MovementLoopAddLocation(NPC, -28.12, -7.93, 242.43, 2, math.random(10, 20)) + MovementLoopAddLocation(NPC, -28.18, -7.90, 240.48, 2, 0) + MovementLoopAddLocation(NPC, -36.09, -7.99, 228.60, 2, math.random(10, 20)) + MovementLoopAddLocation(NPC, -32.08, -8.18, 237.48, 2, 0) + MovementLoopAddLocation(NPC, -31.91, -8.35, 239.49, 2, 0) + MovementLoopAddLocation(NPC, -31.14, -8.32, 240.70, 2, math.random(10, 20)) + MovementLoopAddLocation(NPC, -31.34, -8.24, 239.49, 2, 0) + MovementLoopAddLocation(NPC, -28.74, -7.99, 232.29, 2, math.random(10, 20)) + MovementLoopAddLocation(NPC, -31.73, -7.98, 232.08, 2, 0) + MovementLoopAddLocation(NPC, -40.05, -9.26, 237.60, 2, math.random(10, 20)) + MovementLoopAddLocation(NPC, -33.32, -7.97, 232.40, 2, 0) + MovementLoopAddLocation(NPC, -32.42, -7.99, 231.88, 2, 0) + MovementLoopAddLocation(NPC, -31.08, -7.99, 230.47, 2, math.random(10, 20)) + MovementLoopAddLocation(NPC, -26.02, -7.85, 242.88, 2, math.random(10, 20)) + MovementLoopAddLocation(NPC, -16.10, -7.88, 241.70, 2, math.random(10, 20)) +end + + diff --git a/server/SpawnScripts/QueensColony/asmallcoastalcrab430768.lua b/server/SpawnScripts/QueensColony/asmallcoastalcrab430768.lua new file mode 100644 index 000000000..326847b41 --- /dev/null +++ b/server/SpawnScripts/QueensColony/asmallcoastalcrab430768.lua @@ -0,0 +1,35 @@ +--[[ + Script Name : SpawnScripts/QueensColony/asmallcoastalcrab430768.lua + Script Purpose : Waypoint Path for asmallcoastalcrab430768.lua + Script Author : Rylec + Script Date : 10-19-2019 12:41:52 + Script Notes : Locations collected from Live +--]] + +function spawn(NPC) + waypoints(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) +end + +function respawn(NPC) +end + +function waypoints(NPC) + MovementLoopAddLocation(NPC, -34.48, -8.51, 237.79, 2, math.random(10, 20)) + MovementLoopAddLocation(NPC, -25.42, -7.96, 235.13, 2, 0) + MovementLoopAddLocation(NPC, -27.30, -8.24, 246.90, 2, math.random(10, 20)) + MovementLoopAddLocation(NPC, -27.85, -8.03, 244.66, 2, 0) + MovementLoopAddLocation(NPC, -29.99, -8.09, 240.71, 2, 0) + MovementLoopAddLocation(NPC, -32.23, -8.18, 237.32, 2, 0) + MovementLoopAddLocation(NPC, -34.14, -8.06, 233.58, 2, math.random(10, 20)) + MovementLoopAddLocation(NPC, -26.35, -7.96, 235.57, 2, 0) + MovementLoopAddLocation(NPC, -24.49, -7.98, 235.90, 2, 0) + MovementLoopAddLocation(NPC, -21.97, -7.94, 236.82, 2, math.random(10, 20)) + MovementLoopAddLocation(NPC, -30.06, -7.99, 233.74, 2, math.random(10, 20)) + MovementLoopAddLocation(NPC, -32.10, -8.04, 235.92, 2, 0) +end + + diff --git a/server/SpawnScripts/QueensColony/asmallcoastalcrab430769.lua b/server/SpawnScripts/QueensColony/asmallcoastalcrab430769.lua new file mode 100644 index 000000000..0093c1fd8 --- /dev/null +++ b/server/SpawnScripts/QueensColony/asmallcoastalcrab430769.lua @@ -0,0 +1,36 @@ +--[[ + Script Name : SpawnScripts/QueensColony/asmallcoastalcrab430769.lua + Script Purpose : Waypoint Path for asmallcoastalcrab430769.lua + Script Author : Rylec + Script Date : 10-19-2019 12:41:55 + Script Notes : Locations collected from Live +--]] + +function spawn(NPC) + waypoints(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) +end + +function respawn(NPC) +end + +function waypoints(NPC) + MovementLoopAddLocation(NPC, -31.05, -10.09, 250.86, 2, math.random(10, 20)) + MovementLoopAddLocation(NPC, -31.52, -10.14, 250.52, 2, 0) + MovementLoopAddLocation(NPC, -32.09, -9.58, 247.38, 2, 0) + MovementLoopAddLocation(NPC, -26.05, -7.83, 241.87, 2, math.random(10, 20)) + MovementLoopAddLocation(NPC, -28.05, -7.88, 240.00, 2, 0) + MovementLoopAddLocation(NPC, -31.34, -8.16, 238.13, 2, 0) + MovementLoopAddLocation(NPC, -39.90, -8.43, 232.29, 2, 0) + MovementLoopAddLocation(NPC, -42.22, -8.53, 231.74, 2, math.random(10, 20)) + MovementLoopAddLocation(NPC, -41.19, -8.51, 231.87, 2, 0) + MovementLoopAddLocation(NPC, -40.11, -8.56, 232.90, 2, math.random(10, 20)) + MovementLoopAddLocation(NPC, -40.02, -8.95, 235.63, 2, math.random(10, 20)) + MovementLoopAddLocation(NPC, -34.03, -8.05, 233.44, 2, math.random(10, 20)) + MovementLoopAddLocation(NPC, -32.21, -8.86, 243.39, 2, 0) + MovementLoopAddLocation(NPC, -30.93, -9.04, 246.10, 2, 0) +end + diff --git a/server/SpawnScripts/QueensColony/asmallcoastalcrab430770.lua b/server/SpawnScripts/QueensColony/asmallcoastalcrab430770.lua new file mode 100644 index 000000000..ffdc60452 --- /dev/null +++ b/server/SpawnScripts/QueensColony/asmallcoastalcrab430770.lua @@ -0,0 +1,36 @@ +--[[ + Script Name : SpawnScripts/QueensColony/asmallcoastalcrab430770.lua + Script Purpose : Waypoint Path for asmallcoastalcrab430770.lua + Script Author : Rylec + Script Date : 10-19-2019 12:41:58 + Script Notes : Locations collected from Live +--]] + +function spawn(NPC) + waypoints(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) +end + +function respawn(NPC) +end + +function waypoints(NPC) + MovementLoopAddLocation(NPC, -43.16, -8.28, 230.59, 2, math.random(10, 20)) + MovementLoopAddLocation(NPC, -40.08, -8.70, 233.82, 2, 0) + MovementLoopAddLocation(NPC, -38.19, -8.95, 237.70, 2, math.random(10, 20)) + MovementLoopAddLocation(NPC, -35.49, -8.88, 240.14, 2, 0) + MovementLoopAddLocation(NPC, -26.58, -8.66, 249.70, 2, 0) + MovementLoopAddLocation(NPC, -23.23, -8.38, 251.90, 2, 0) + MovementLoopAddLocation(NPC, -20.99, -8.36, 253.95, 2, math.random(10, 20)) + MovementLoopAddLocation(NPC, -26.53, -7.88, 243.40, 2, 0) + MovementLoopAddLocation(NPC, -28.11, -7.88, 239.98, 2, 0) + MovementLoopAddLocation(NPC, -30.23, -7.99, 236.20, 2, 0) + MovementLoopAddLocation(NPC, -31.84, -7.98, 232.45, 2, 0) + MovementLoopAddLocation(NPC, -35.02, -8.01, 227.63, 2, math.random(10, 20)) + MovementLoopAddLocation(NPC, -25.82, -7.84, 231.87, 2, math.random(10, 20)) +end + + diff --git a/server/SpawnScripts/QueensColony/asmallcoastalcrab430771.lua b/server/SpawnScripts/QueensColony/asmallcoastalcrab430771.lua new file mode 100644 index 000000000..430df7241 --- /dev/null +++ b/server/SpawnScripts/QueensColony/asmallcoastalcrab430771.lua @@ -0,0 +1,42 @@ +--[[ + Script Name : SpawnScripts/QueensColony/asmallcoastalcrab430771.lua + Script Purpose : Waypoint Path for asmallcoastalcrab430771.lua + Script Author : Rylec + Script Date : 10-19-2019 12:42:01 + Script Notes : Locations collected from Live +--]] + +function spawn(NPC) + waypoints(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) +end + +function respawn(NPC) +end + +function waypoints(NPC) + MovementLoopAddLocation(NPC, -18.11, -7.83, 241.55, 2, math.random(10, 20)) + MovementLoopAddLocation(NPC, -20.20, -7.83, 239.75, 2, 0) + MovementLoopAddLocation(NPC, -22.97, -7.97, 236.55, 2, 0) + MovementLoopAddLocation(NPC, -23.76, -7.97, 235.98, 2, math.random(10, 20)) + MovementLoopAddLocation(NPC, -31.93, -7.97, 234.45, 2, 0) + MovementLoopAddLocation(NPC, -39.32, -8.35, 232.29, 2, 0) + MovementLoopAddLocation(NPC, -43.18, -8.93, 232.84, 2, math.random(10, 20)) + MovementLoopAddLocation(NPC, -44.16, -8.41, 230.63, 2, math.random(10, 20)) + MovementLoopAddLocation(NPC, -40.62, -8.46, 231.85, 2, 0) + MovementLoopAddLocation(NPC, -38.01, -8.41, 233.88, 2, math.random(10, 20)) + MovementLoopAddLocation(NPC, -20.89, -7.83, 235.71, 2, math.random(10, 20)) + MovementLoopAddLocation(NPC, -20.52, -7.18, 232.01, 2, math.random(10, 20)) + MovementLoopAddLocation(NPC, -24.10, -7.86, 233.85, 2, 0) + MovementLoopAddLocation(NPC, -26.41, -7.91, 232.99, 2, 0) + MovementLoopAddLocation(NPC, -27.62, -7.92, 231.93, 2, 0) + MovementLoopAddLocation(NPC, -29.52, -8.00, 231.80, 2, math.random(10, 20)) + MovementLoopAddLocation(NPC, -28.07, -7.96, 232.33, 2, 0) + MovementLoopAddLocation(NPC, -21.97, -8.12, 251.86, 2, math.random(10, 20)) + MovementLoopAddLocation(NPC, -30.11, -9.87, 250.84, 2, math.random(10, 20)) + MovementLoopAddLocation(NPC, -29.55, -9.75, 250.88, 2, 0) +end + diff --git a/server/SpawnScripts/QueensColony/asmallcoastalcrab430773.lua b/server/SpawnScripts/QueensColony/asmallcoastalcrab430773.lua new file mode 100644 index 000000000..9b0366876 --- /dev/null +++ b/server/SpawnScripts/QueensColony/asmallcoastalcrab430773.lua @@ -0,0 +1,40 @@ +--[[ + Script Name : SpawnScripts/QueensColony/asmallcoastalcrab430773.lua + Script Purpose : Waypoint Path for smallcrab002_06.lua + Script Author : Rylec + Script Date : 10-19-2019 12:42:04 + Script Notes : Locations collected from Live +--]] + +function spawn(NPC) + waypoints(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) +end + +function respawn(NPC) +end + +function waypoints(NPC) + MovementLoopAddLocation(NPC, -35.02, -7.99, 228.74, 2, math.random(10, 20)) + MovementLoopAddLocation(NPC, -32.26, -8.00, 231.61, 2, 0) + MovementLoopAddLocation(NPC, -19.97, -8.57, 254.97, 2, math.random(10, 20)) + MovementLoopAddLocation(NPC, -25.92, -8.14, 248.08, 2, 0) + MovementLoopAddLocation(NPC, -27.84, -8.02, 244.58, 2, 0) + MovementLoopAddLocation(NPC, -30.10, -8.36, 243.81, 2, math.random(10, 20)) + MovementLoopAddLocation(NPC, -31.20, -8.21, 239.49, 2, 0) + MovementLoopAddLocation(NPC, -32.19, -8.07, 236.14, 2, 0) + MovementLoopAddLocation(NPC, -34.14, -7.95, 225.83, 2, math.random(10, 20)) + MovementLoopAddLocation(NPC, -37.13, -8.29, 233.89, 2, math.random(10, 20)) + MovementLoopAddLocation(NPC, -31.52, -8.86, 244.51, 2, 0) + MovementLoopAddLocation(NPC, -30.55, -9.13, 247.09, 2, 0) + MovementLoopAddLocation(NPC, -27.84, -9.22, 250.48, 2, 0) + MovementLoopAddLocation(NPC, -27.46, -9.97, 254.79, 2, math.random(10, 20)) + MovementLoopAddLocation(NPC, -29.69, -8.98, 247.46, 2, 0) + MovementLoopAddLocation(NPC, -36.00, -8.80, 238.65, 2, math.random(10, 20)) + MovementLoopAddLocation(NPC, -38.88, -9.25, 238.78, 2, math.random(10, 20)) +end + + diff --git a/server/SpawnScripts/QueensColony/asmallcoastalcrab430774.lua b/server/SpawnScripts/QueensColony/asmallcoastalcrab430774.lua new file mode 100644 index 000000000..18c55993a --- /dev/null +++ b/server/SpawnScripts/QueensColony/asmallcoastalcrab430774.lua @@ -0,0 +1,47 @@ +--[[ + Script Name : SpawnScripts/QueensColony/asmallcoastalcrab430774.lua + Script Purpose : Waypoint Path for asmallcoastalcrab430774.lua + Script Author : Rylec + Script Date : 10-19-2019 12:42:06 + Script Notes : Locations collected from Live +--]] + +function spawn(NPC) + waypoints(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) +end + +function respawn(NPC) +end + +function waypoints(NPC) + MovementLoopAddLocation(NPC, -25.34, -9.33, 254.01, 2, math.random(10, 20)) + MovementLoopAddLocation(NPC, -24.82, -8.67, 251.72, 2, 0) + MovementLoopAddLocation(NPC, -32.26, -8.95, 244.01, 2, 0) + MovementLoopAddLocation(NPC, -41.14, -9.48, 237.69, 2, math.random(10, 20)) + MovementLoopAddLocation(NPC, -33.01, -9.05, 243.73, 2, math.random(10, 20)) + MovementLoopAddLocation(NPC, -25.14, -7.92, 237.34, 2, 0) + MovementLoopAddLocation(NPC, -19.83, -7.82, 236.45, 2, 0) + MovementLoopAddLocation(NPC, -16.57, -7.84, 239.38, 2, math.random(10, 20)) + MovementLoopAddLocation(NPC, -23.14, -7.85, 239.77, 2, math.random(10, 20)) + MovementLoopAddLocation(NPC, -24.29, -7.89, 239.11, 2, 0) + MovementLoopAddLocation(NPC, -36.96, -8.01, 224.80, 2, math.random(10, 20)) + MovementLoopAddLocation(NPC, -25.15, -8.94, 252.59, 2, 0) + MovementLoopAddLocation(NPC, -23.25, -9.18, 255.15, 2, 0) + MovementLoopAddLocation(NPC, -22.40, -9.60, 256.95, 2, math.random(10, 20)) + MovementLoopAddLocation(NPC, -27.61, -8.55, 247.96, 2, 0) + MovementLoopAddLocation(NPC, -30.29, -8.62, 244.98, 2, 0) + MovementLoopAddLocation(NPC, -33.81, -8.46, 238.07, 2, 0) + MovementLoopAddLocation(NPC, -39.57, -8.05, 229.82, 2, 0) + MovementLoopAddLocation(NPC, -40.08, -8.02, 227.58, 2, math.random(10, 20)) + MovementLoopAddLocation(NPC, -28.70, -7.95, 233.56, 2, 0) + MovementLoopAddLocation(NPC, -26.54, -7.95, 235.42, 2, math.random(10, 20)) + MovementLoopAddLocation(NPC, -45.03, -9.41, 233.79, 2, math.random(10, 20)) + MovementLoopAddLocation(NPC, -42.18, -9.20, 235.18, 2, 0) + MovementLoopAddLocation(NPC, -32.70, -9.33, 245.56, 2, 0) + MovementLoopAddLocation(NPC, -25.65, -9.02, 252.43, 2, 0) +end + diff --git a/server/SpawnScripts/QueensColony/asmallcoastalcrab430775.lua b/server/SpawnScripts/QueensColony/asmallcoastalcrab430775.lua new file mode 100644 index 000000000..10604ad97 --- /dev/null +++ b/server/SpawnScripts/QueensColony/asmallcoastalcrab430775.lua @@ -0,0 +1,40 @@ +--[[ + Script Name : SpawnScripts/QueensColony/asmallcoastalcrab430775.lua + Script Purpose : Waypoint Path for asmallcoastalcrab430775.lua + Script Author : Rylec + Script Date : 10-19-2019 12:42:09 + Script Notes : Locations collected from Live +--]] + +function spawn(NPC) + waypoints(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) +end + +function respawn(NPC) +end + +function waypoints(NPC) + MovementLoopAddLocation(NPC, -32.17, -7.98, 233.65, 2, math.random(10, 20)) + MovementLoopAddLocation(NPC, -30.60, -8.56, 244.27, 2, 0) + MovementLoopAddLocation(NPC, -30.02, -8.78, 246.02, 2, 0) + MovementLoopAddLocation(NPC, -30.20, -9.49, 248.97, 2, math.random(10, 20)) + MovementLoopAddLocation(NPC, -30.22, -8.83, 246.02, 2, 0) + MovementLoopAddLocation(NPC, -39.94, -7.96, 225.74, 2, math.random(10, 20)) + MovementLoopAddLocation(NPC, -28.36, -7.84, 237.38, 2, 0) + MovementLoopAddLocation(NPC, -27.19, -7.89, 239.71, 2, math.random(10, 20)) + MovementLoopAddLocation(NPC, -30.06, -7.96, 238.34, 2, 0) + MovementLoopAddLocation(NPC, -38.02, -8.22, 232.72, 2, math.random(10, 20)) + MovementLoopAddLocation(NPC, -28.46, -9.03, 249.01, 2, 0) + MovementLoopAddLocation(NPC, -28.01, -9.13, 249.93, 2, 0) + MovementLoopAddLocation(NPC, -26.39, -9.10, 251.87, 2, 0) + MovementLoopAddLocation(NPC, -26.15, -9.28, 253.01, 2, math.random(10, 20)) + MovementLoopAddLocation(NPC, -26.95, -9.69, 254.03, 2, 0) + MovementLoopAddLocation(NPC, -28.00, -10.09, 254.80, 2, math.random(10, 20)) + MovementLoopAddLocation(NPC, -27.10, -9.67, 253.75, 2, 0) + MovementLoopAddLocation(NPC, -25.00, -7.95, 234.80, 2, math.random(10, 20)) +end + diff --git a/server/SpawnScripts/QueensColony/asmallcoastalcrab430792.lua b/server/SpawnScripts/QueensColony/asmallcoastalcrab430792.lua new file mode 100644 index 000000000..d6244d66c --- /dev/null +++ b/server/SpawnScripts/QueensColony/asmallcoastalcrab430792.lua @@ -0,0 +1,42 @@ +--[[ + Script Name : SpawnScripts/QueensColony/asmallcoastalcrab430792.lua + Script Purpose : Waypoint Path for asmallcoastalcrab430792.lua + Script Author : Rylec + Script Date : 10-19-2019 12:42:12 + Script Notes : Locations collected from Live +--]] + +function spawn(NPC) + waypoints(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) +end + +function respawn(NPC) +end + +function waypoints(NPC) + MovementLoopAddLocation(NPC, -15.43, -7.86, 241.00, 2, math.random(10, 20)) + MovementLoopAddLocation(NPC, -11.82, -7.15, 241.18, 2, math.random(10, 20)) + MovementLoopAddLocation(NPC, -24.43, -8.17, 249.57, 2, 0) + MovementLoopAddLocation(NPC, -25.05, -8.73, 251.76, 2, math.random(10, 20)) + MovementLoopAddLocation(NPC, -25.75, -8.70, 250.85, 2, 0) + MovementLoopAddLocation(NPC, -41.28, -9.14, 235.66, 2, math.random(10, 20)) + MovementLoopAddLocation(NPC, -44.40, -9.99, 236.91, 2, math.random(10, 20)) + MovementLoopAddLocation(NPC, -42.94, -9.67, 236.89, 2, 0) + MovementLoopAddLocation(NPC, -41.44, -9.27, 236.19, 2, 0) + MovementLoopAddLocation(NPC, -33.03, -7.96, 227.82, 2, math.random(10, 20)) + MovementLoopAddLocation(NPC, -39.77, -8.36, 231.97, 2, 0) + MovementLoopAddLocation(NPC, -43.71, -9.43, 234.96, 2, 0) + MovementLoopAddLocation(NPC, -45.25, -9.97, 236.09, 2, math.random(10, 20)) + MovementLoopAddLocation(NPC, -44.98, -9.51, 234.32, 2, 0) + MovementLoopAddLocation(NPC, -44.20, -9.09, 232.91, 2, math.random(10, 20)) + MovementLoopAddLocation(NPC, -40.36, -8.46, 232.06, 2, 0) + MovementLoopAddLocation(NPC, -24.17, -7.91, 238.13, 2, 0) + MovementLoopAddLocation(NPC, -22.90, -7.91, 238.77, 2, math.random(10, 20)) + MovementLoopAddLocation(NPC, -24.00, -7.85, 239.99, 2, 0) + MovementLoopAddLocation(NPC, -31.43, -8.93, 244.95, 2, math.random(10, 20)) +end + diff --git a/server/SpawnScripts/QueensColony/asmallcoastalcrab430813.lua b/server/SpawnScripts/QueensColony/asmallcoastalcrab430813.lua new file mode 100644 index 000000000..cc9d724ac --- /dev/null +++ b/server/SpawnScripts/QueensColony/asmallcoastalcrab430813.lua @@ -0,0 +1,52 @@ +--[[ + Script Name : SpawnScripts/QueensColony/asmallcoastalcrab430813.lua + Script Purpose : Waypoint Path for asmallcoastalcrab430813.lua + Script Author : Rylec + Script Date : 10-19-2019 12:41:32 + Script Notes : Locations collected from Live +--]] + +function spawn(NPC) + waypoints(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) +end + +function respawn(NPC) +end + +function waypoints(NPC) + MovementLoopAddLocation(NPC, 10.26, -10.8, 236.38, 2, math.random(10, 20)) + MovementLoopAddLocation(NPC, 6.22, -8.62, 238.92, 2, 0) + MovementLoopAddLocation(NPC, 4.85, -8.77, 242.62, 2, 0) + MovementLoopAddLocation(NPC, 6.18, -9.13, 243.6, 2, 0) + MovementLoopAddLocation(NPC, 8.10, -8.37, 247.14, 2, math.random(10, 20)) + MovementLoopAddLocation(NPC, 9.83, -12.29, 242.26, 2, 0) + MovementLoopAddLocation(NPC, 11.77, -13.09, 241.69, 2, math.random(10, 20)) + MovementLoopAddLocation(NPC, 9.47, -11.01, 240.37, 2, 0) + MovementLoopAddLocation(NPC, 8.79, -10.40, 239.11, 2, 0) + MovementLoopAddLocation(NPC, 10.32, -10.21, 233.68, 2, math.random(10, 20)) + MovementLoopAddLocation(NPC, 9.03, -9.76, 234.00, 2, 0) + MovementLoopAddLocation(NPC, 7.85, -8.93, 234.12, 2, 0) + MovementLoopAddLocation(NPC, -6.59, -7.48, 240.66, 2, math.random(10, 20)) + MovementLoopAddLocation(NPC, 9.34, -10.03, 234.49, 2, math.random(10, 20)) + MovementLoopAddLocation(NPC, 0.02, -7.79, 243.33, 2, math.random(10, 20)) + MovementLoopAddLocation(NPC, 4.72, -8.70, 241.19, 2, 0) + MovementLoopAddLocation(NPC, 7.60, -9.81, 238.89, 2, 0) + MovementLoopAddLocation(NPC, 12.00, -12.49, 238.33, 2, math.random(10, 20)) + MovementLoopAddLocation(NPC, 9.18, -10.60, 239.09, 2, 0) + MovementLoopAddLocation(NPC, 8.44, -10.27, 239.15, 2, 0) + MovementLoopAddLocation(NPC, 7.06, -10.11, 241.38, 2, 0) + MovementLoopAddLocation(NPC, 6.57, -8.74, 244.49, 2, 0) + MovementLoopAddLocation(NPC, 6.26, -9.30, 254.73, 2, math.random(10, 20)) + MovementLoopAddLocation(NPC, 9.66, -10.84, 247.89, 2, 0) + MovementLoopAddLocation(NPC, 12.22, -13.09, 247.89, 2, math.random(10, 20)) + MovementLoopAddLocation(NPC, 10.28, -13.37, 253.37, 2, math.random(10, 20)) + MovementLoopAddLocation(NPC, 8.40, -9.54, 253.14, 2, 0) + MovementLoopAddLocation(NPC, 6.63, -8.55, 250.57, 2, 0) + MovementLoopAddLocation(NPC, 5.96, -8.97, 239.94, 2, 0) + MovementLoopAddLocation(NPC, 7.41, -9.64, 238.93, 2, 0) + MovementLoopAddLocation(NPC, 6.93, -8.71, 237.81, 2, 0) +end diff --git a/server/SpawnScripts/QueensColony/asmallcoastalcrab430814.lua b/server/SpawnScripts/QueensColony/asmallcoastalcrab430814.lua new file mode 100644 index 000000000..8054e4498 --- /dev/null +++ b/server/SpawnScripts/QueensColony/asmallcoastalcrab430814.lua @@ -0,0 +1,47 @@ +--[[ + Script Name : SpawnScripts/QueensColony/asmallcoastalcrab430814.lua + Script Purpose : Waypoint Path for asmallcoastalcrab430814.lua + Script Author : Rylec + Script Date : 10-19-2019 12:41:39 + Script Notes : Locations collected from Live +--]] + +function spawn(NPC) + --MoveToLocation(NPC, 6.1, -8.58, 250.68) + waypoints(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) +end + +function respawn(NPC) +end + +function waypoints(NPC) + MovementLoopAddLocation(NPC, 6.18, -8.58, 250.68, 2, math.random(10, 20)) + MovementLoopAddLocation(NPC, 4.17, -8.99, 252.80, 2, math.random(10, 20)) + MovementLoopAddLocation(NPC, 6.15, -8.71, 244.71, 2, math.random(10, 20)) + MovementLoopAddLocation(NPC, -2.74, -7.83, 246.55, 2, math.random(10, 20)) + MovementLoopAddLocation(NPC, 0.18, -7.92, 245.26, 2, 0) + MovementLoopAddLocation(NPC, 3.81, -8.52, 244.14, 2, 0) + MovementLoopAddLocation(NPC, 6.36, -9.63, 242.42, 2, math.random(10, 20)) + MovementLoopAddLocation(NPC, 5.30, -8.44, 248.61, 2, math.random(10, 20)) + MovementLoopAddLocation(NPC, 5.51, -8.46, 247.28, 2, 0) + MovementLoopAddLocation(NPC, 6.19, -9.55, 242.20, 2, math.random(10, 20)) + MovementLoopAddLocation(NPC, 6.21, -9.63, 241.40, 2, 0) + MovementLoopAddLocation(NPC, 6.35, -9.06, 239.60, 2, 4) + MovementLoopAddLocation(NPC, 6.26, -8.92, 239.46, 2, 0) + MovementLoopAddLocation(NPC, 7.75, -9.35, 237.56, 2, 0) + MovementLoopAddLocation(NPC, 9.32, -10.26, 236.57, 2, math.random(10, 20)) + MovementLoopAddLocation(NPC, 9.49, -11.62, 240.76, 2, math.random(10, 20)) + MovementLoopAddLocation(NPC, 9.46, -10.12, 239.78, 2, 0) + MovementLoopAddLocation(NPC, 7.65, -10.12, 240.92, 2, 0) + MovementLoopAddLocation(NPC, 6.23, -8.37, 248.61, 2, math.random(10, 20)) + MovementLoopAddLocation(NPC, 6.24, -8.36, 247.72, 2, 0) + MovementLoopAddLocation(NPC, 5.95, -8.61, 245.61, 2, 0) + MovementLoopAddLocation(NPC, 5.99, -8.33, 238.20, 2, 0) + MovementLoopAddLocation(NPC, 6.42, -8.21, 236.25, 2, math.random(10, 20)) +end + + diff --git a/server/SpawnScripts/QueensColony/asmallcoastalcrab430815.lua b/server/SpawnScripts/QueensColony/asmallcoastalcrab430815.lua new file mode 100644 index 000000000..90e91e123 --- /dev/null +++ b/server/SpawnScripts/QueensColony/asmallcoastalcrab430815.lua @@ -0,0 +1,46 @@ +--[[ + Script Name : SpawnScripts/QueensColony/asmallcoastalcrab430815.lua + Script Purpose : Waypoint Path for asmallcoastalcrab430815.lua + Script Author : Rylec + Script Date : 10-19-2019 12:41:42 + Script Notes : Locations collected from Live +--]] + +function spawn(NPC) + waypoints(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) +end + +function respawn(NPC) +end + +function waypoints(NPC) + MovementLoopAddLocation(NPC, 4.27, -8.60, 240.85, 2, math.random(10, 20)) + MovementLoopAddLocation(NPC, 7.81, -9.43, 253.85, 2, math.random(10, 20)) + MovementLoopAddLocation(NPC, 3.74, -8.64, 247.62, 2, 0) + MovementLoopAddLocation(NPC, 2.44, -8.22, 244.80, 2, math.random(10, 20)) + MovementLoopAddLocation(NPC, -3.66, -7.66, 245.55, 2, math.random(10, 20)) + MovementLoopAddLocation(NPC, 5.99, -8.83, 239.63, 2, 0) + MovementLoopAddLocation(NPC, 6.65, -8.66, 238.29, 2, 0) + MovementLoopAddLocation(NPC, 10.96, -10.43, 236.43, 2, 0) + MovementLoopAddLocation(NPC, 8.22, -9.70, 237.00, 2, 0) + MovementLoopAddLocation(NPC, 5.41, -8.13, 238.13, 2, 0) + MovementLoopAddLocation(NPC, 4.09, -7.98, 238.17, 2, 0) + MovementLoopAddLocation(NPC, 6.05, -8.67, 244.97, 2, 0) + MovementLoopAddLocation(NPC, 7.18, -8.30, 247.93, 2, 0) + MovementLoopAddLocation(NPC, 7.17, -9.38, 254.83, 2, math.random(10, 20)) + MovementLoopAddLocation(NPC, 6.35, -8.48, 249.77, 2, math.random(10, 20)) + MovementLoopAddLocation(NPC, 4.41, -8.53, 248.29, 2, 0) + MovementLoopAddLocation(NPC, 1.99, -8.07, 243.65, 2, 0) + MovementLoopAddLocation(NPC, 0.49, -7.94, 240.44, 2, math.random(10, 20)) + MovementLoopAddLocation(NPC, -5.03, -7.57, 239.80, 2, 0) + MovementLoopAddLocation(NPC, -8.63, -6.70, 238.70, 2, math.random(10, 20)) + MovementLoopAddLocation(NPC, -0.11, -7.78, 243.68, 2, 0) + MovementLoopAddLocation(NPC, 5.33, -8.93, 252.90, 2, math.random(10, 20)) + MovementLoopAddLocation(NPC, 5.67, -9.21, 242.73, 2, math.random(10, 20)) + MovementLoopAddLocation(NPC, 4.69, -8.74, 242.51, 2, 0) +end + diff --git a/server/SpawnScripts/QueensColony/asmallcoastalcrab430816.lua b/server/SpawnScripts/QueensColony/asmallcoastalcrab430816.lua new file mode 100644 index 000000000..0fb59c291 --- /dev/null +++ b/server/SpawnScripts/QueensColony/asmallcoastalcrab430816.lua @@ -0,0 +1,34 @@ +--[[ + Script Name : SpawnScripts/QueensColony/asmallcoastalcrab430816.lua + Script Purpose : Waypoint Path for asmallcoastalcrab430816.lua + Script Author : Rylec + Script Date : 10-19-2019 12:41:45 + Script Notes : Locations collected from Live +--]] + +function spawn(NPC) + waypoints(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) +end + +function respawn(NPC) +end + +function waypoints(NPC) + MovementLoopAddLocation(NPC, 7.94, -9.01, 232.32, 2, math.random(10, 20)) + MovementLoopAddLocation(NPC, 7.95, -9.16, 235.92, 2, 0) + MovementLoopAddLocation(NPC, 7.40, -8.87, 237.27, 2, 0) + MovementLoopAddLocation(NPC, 7.07, -9.22, 238.66, 2, 0) + MovementLoopAddLocation(NPC, 6.14, -9.22, 240.14, 2, 0) + MovementLoopAddLocation(NPC, 5.76, -8.70, 244.91, 2, 0) + MovementLoopAddLocation(NPC, 6.81, -8.48, 249.95, 2, math.random(10, 20)) + MovementLoopAddLocation(NPC, 3.75, -8.03, 238.48, 2, math.random(10, 20)) + MovementLoopAddLocation(NPC, 8.60, -10.09, 238.07, 2, math.random(10, 20)) + MovementLoopAddLocation(NPC, 7.82, -9.79, 238.27, 2, 0) + MovementLoopAddLocation(NPC, 5.76, -8.27, 238.26, 2, 0) + MovementLoopAddLocation(NPC, 4.41, -8.04, 238.69, 2, math.random(10, 20)) + MovementLoopAddLocation(NPC, 6.09, -8.09, 236.44, 2, 0) +end diff --git a/server/SpawnScripts/QueensColony/asmallcoastalcrab430817.lua b/server/SpawnScripts/QueensColony/asmallcoastalcrab430817.lua new file mode 100644 index 000000000..be1895531 --- /dev/null +++ b/server/SpawnScripts/QueensColony/asmallcoastalcrab430817.lua @@ -0,0 +1,38 @@ +--[[ + Script Name : SpawnScripts/QueensColony/asmallcoastalcrab430817.lua + Script Purpose : Waypoint Path for asmallcoastalcrab430817.lua + Script Author : Rylec + Script Date : 10-19-2019 12:41:47 + Script Notes : Locations collected from Live +--]] + +function spawn(NPC) + waypoints(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) +end + +function respawn(NPC) +end + +function waypoints(NPC) + MovementLoopAddLocation(NPC, 11.42, -13.21, 247.65, 2, math.random(10, 20)) + MovementLoopAddLocation(NPC, 8.10, -8.50, 249.16, 2, 0) + MovementLoopAddLocation(NPC, 6.24, -8.72, 251.94, 2, math.random(10, 20)) + MovementLoopAddLocation(NPC, -1.78, -7.75, 245.62, 2, math.random(10, 20)) + MovementLoopAddLocation(NPC, 3.39, -9.04, 253.60, 2, math.random(10, 20)) + MovementLoopAddLocation(NPC, 10.17, -12.94, 247.18, 2, math.random(10, 20)) + MovementLoopAddLocation(NPC, 4.67, -8.50, 248.27, 2, 0) + MovementLoopAddLocation(NPC, 2.41, -8.58, 247.57, 2, math.random(10, 20)) + MovementLoopAddLocation(NPC, 0.17, -7.81, 244.26, 2, 0) + MovementLoopAddLocation(NPC, -1.77, -7.60, 239.48, 2, math.random(10, 20)) + MovementLoopAddLocation(NPC, -1.59, -7.67, 244.87, 2, math.random(10, 20)) + MovementLoopAddLocation(NPC, 6.53, -9.79, 241.64, 2, math.random(10, 20)) + MovementLoopAddLocation(NPC, 6.17, -8.99, 243.93, 2, 0) + MovementLoopAddLocation(NPC, 7.48, -8.67, 244.95, 2, 0) + MovementLoopAddLocation(NPC, 7.84, -8.51, 246.15, 2, 0) +end + + diff --git a/server/SpawnScripts/QueensColony/asmallcoastalcrab430823.lua b/server/SpawnScripts/QueensColony/asmallcoastalcrab430823.lua new file mode 100644 index 000000000..26fce02df --- /dev/null +++ b/server/SpawnScripts/QueensColony/asmallcoastalcrab430823.lua @@ -0,0 +1,37 @@ +--[[ + Script Name : SpawnScripts/QueensColony/asmallcoastalcrab430823.lua + Script Purpose : Waypoint Path for asmallcoastalcrab430823.lua + Script Author : Rylec + Script Date : 10-19-2019 12:41:27 + Script Notes : Locations collected from Live +--]] + +function spawn(NPC) + waypoints(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) +end + +function respawn(NPC) +end + +function waypoints(NPC) + MovementLoopAddLocation(NPC, -0.76, -8.27, 249.66, 2, math.random(10, 20)) + MovementLoopAddLocation(NPC, -0.68, -7.71, 241.56, 2, math.random(10, 20)) + MovementLoopAddLocation(NPC, 0.08, -7.80, 244.03, 2, 0) + MovementLoopAddLocation(NPC, 8.57, -12.99, 257.02, 2, math.random(10, 20)) + MovementLoopAddLocation(NPC, 6.02, -8.37, 247.99, 2, 0) + MovementLoopAddLocation(NPC, 5.99, -9.14, 240.16, 2, 0) + MovementLoopAddLocation(NPC, 8.55, -10.00, 237.29, 2, math.random(10, 20)) + MovementLoopAddLocation(NPC, 7.02, -8.88, 238.07, 2, 0) + MovementLoopAddLocation(NPC, 3.45, -8.55, 242.45, 2, math.random(10, 20)) + MovementLoopAddLocation(NPC, 4.19, -8.64, 241.94, 2, 0) + MovementLoopAddLocation(NPC, 7.35, -10.16, 240.69, 2, math.random(10, 20)) + MovementLoopAddLocation(NPC, 7.07, -10.03, 240.57, 2, 0) + MovementLoopAddLocation(NPC, 2.36, -8.29, 240.06, 2, 0) + MovementLoopAddLocation(NPC, -1.61, -7.62, 240.34, 2, math.random(10, 20)) + MovementLoopAddLocation(NPC, -5.73, -7.55, 242.63, 2, math.random(10, 20)) +end + diff --git a/server/SpawnScripts/QueensColony/ataintedSapswillambusher.lua b/server/SpawnScripts/QueensColony/ataintedSapswillambusher.lua new file mode 100644 index 000000000..588167912 --- /dev/null +++ b/server/SpawnScripts/QueensColony/ataintedSapswillambusher.lua @@ -0,0 +1,35 @@ +--[[ + Script Name : SpawnScripts/QueensColony/ataintedSapswillambusher.lua + Script Purpose : Path the ambushers to their doom + Script Author : Jabantiz + Script Date : 9/11/2016 + Script Notes : +--]] + +function spawn(NPC) + if GetSpawnLocationID(NPC) == 429588 then + MoveToLocation(NPC, -51.9, 2.03, -152.31, 3) + elseif GetSpawnLocationID(NPC) == 429491 then + MovementLoopAddLocation(NPC, -85.97, 1.67, -183.84, 3) + MovementLoopAddLocation(NPC, -70, 2.1, -178.69, 3) + MovementLoopAddLocation(NPC, -51.42, 2.13, -165, 3) + MovementLoopAddLocation(NPC, -51.97, 2.03, -152.1, 3, 60) + elseif GetSpawnLocationID(NPC) == 429508 then + MovementLoopAddLocation(NPC, -71.15, 3.24, -194.55, 3) + MovementLoopAddLocation(NPC, -59.29, 3.78, -181.34, 3) + MovementLoopAddLocation(NPC, -48.83, 2.38, -155.41, 3) + MovementLoopAddLocation(NPC, -52.89, 2.03, -152.21, 3, 60) + elseif GetSpawnLocationID(NPC) == 429657 then + MovementLoopAddLocation(NPC, 18.29, 3.25, -222.27, 3) + MovementLoopAddLocation(NPC, 4.28, 2.29, -207.62, 3) + MovementLoopAddLocation(NPC, -5.31, 2.44, -183.86, 3) + MovementLoopAddLocation(NPC, -13.56, 4.14, -174.91, 3) + MovementLoopAddLocation(NPC, -27.47, 3.49, -168.66, 3) + MovementLoopAddLocation(NPC, -45.68, 2.12, -159.96, 3) + MovementLoopAddLocation(NPC, -52.86, 2.03, -150.91, 3, 60) + end +end + +function respawn(NPC) + spawn(NPC) +end \ No newline at end of file diff --git a/server/SpawnScripts/QueensColony/ataintedSapswillinvader.lua b/server/SpawnScripts/QueensColony/ataintedSapswillinvader.lua new file mode 100644 index 000000000..4d03b6b43 --- /dev/null +++ b/server/SpawnScripts/QueensColony/ataintedSapswillinvader.lua @@ -0,0 +1,26 @@ +--[[ + Script Name : SpawnScripts/QueensColony/aTaintedSapswillInvader.lua + Script Purpose : a Tainted Sapswill Invader + Script Author : John Adams + Script Date : 2008.10.27 + Script Notes : 6 wandering sapswills, random destination coords +--]] + +function spawn(NPC) + local dest = math.random(1,3) + if dest == 1 then + MovementLoopAddLocation(NPC, 61.3, -4.2, 180.5, 2, 1) + MovementLoopAddLocation(NPC, 64.5, -4, 193, 2, 1) + MovementLoopAddLocation(NPC, 78, -4.3, 182.4, 2, 10) + elseif dest == 2 then + MovementLoopAddLocation(NPC, 75.9, -4.4, 160.5, 2, 1) + MovementLoopAddLocation(NPC, 73.6, -4.3, 170.8, 2, 1) + MovementLoopAddLocation(NPC, 81.2, -4.5, 172.4, 2, 10) + else + MovementLoopAddLocation(NPC, 75, -4, 171, 2, 10) + end +end + +function respawn(NPC) + spawn(NPC) +end \ No newline at end of file diff --git a/server/SpawnScripts/QueensColony/ebiksclunker.lua b/server/SpawnScripts/QueensColony/ebiksclunker.lua new file mode 100644 index 000000000..de251d1fc --- /dev/null +++ b/server/SpawnScripts/QueensColony/ebiksclunker.lua @@ -0,0 +1,23 @@ +--[[ + Script Name : SpawnScripts/QueensColony/ebiksclunker.lua + Script Author : Jabantiz + Script Date : 2016.09.13 12:09:59 + Script Purpose : + : +--]] + +local EbiksMissingParts = 185 + +function spawn(NPC) + SetRequiredQuest(NPC, EbiksMissingParts, 1) +end + +function respawn(NPC) + spawn(NPC) +end + +function casted_on(NPC, Spawn, Message) + if Message == "search parts" then + SetStepComplete(Spawn, EbiksMissingParts, 1) + end +end diff --git a/server/SpawnScripts/QueensColony/ebiksspinner.lua b/server/SpawnScripts/QueensColony/ebiksspinner.lua new file mode 100644 index 000000000..c5ea53a99 --- /dev/null +++ b/server/SpawnScripts/QueensColony/ebiksspinner.lua @@ -0,0 +1,23 @@ +--[[ + Script Name : SpawnScripts/QueensColony/ebiksspinner.lua + Script Author : Jabantiz + Script Date : 2016.09.13 12:09:46 + Script Purpose : + : +--]] + +local EbiksMissingParts = 185 + +function spawn(NPC) + SetRequiredQuest(NPC, EbiksMissingParts, 3) +end + +function respawn(NPC) + spawn(NPC) +end + +function casted_on(NPC, Spawn, Message) + if Message == "search parts" then + SetStepComplete(Spawn, EbiksMissingParts, 3) + end +end \ No newline at end of file diff --git a/server/SpawnScripts/QueensColony/ebiksspringer.lua b/server/SpawnScripts/QueensColony/ebiksspringer.lua new file mode 100644 index 000000000..8585a8069 --- /dev/null +++ b/server/SpawnScripts/QueensColony/ebiksspringer.lua @@ -0,0 +1,23 @@ +--[[ + Script Name : SpawnScripts/QueensColony/ebiksspringer.lua + Script Purpose : + Script Author : Jabantiz + Script Date : 9/13/2016 + Script Notes : +--]] + +local EbiksMissingParts = 185 + +function spawn(NPC) + SetRequiredQuest(NPC, EbiksMissingParts, 2) +end + +function respawn(NPC) + spawn(NPC) +end + +function casted_on(NPC, Spawn, Message) + if Message == "search parts" then + SetStepComplete(Spawn, EbiksMissingParts, 2) + end +end \ No newline at end of file diff --git a/server/SpawnScripts/QueensColony/eviltotem.lua b/server/SpawnScripts/QueensColony/eviltotem.lua new file mode 100644 index 000000000..cf0d61f85 --- /dev/null +++ b/server/SpawnScripts/QueensColony/eviltotem.lua @@ -0,0 +1,26 @@ +--[[ + Script Name : SpawnScripts/QueensColony/eviltotem.lua + Script Purpose : Handles enabling/disabling the totems on the correct step as well as updates + Script Author : Jabantiz + Script Date : 9/9/2016 + Script Notes : +--]] + +local TheSourceOfEvil = 164 + +function spawn(NPC) + SetRequiredQuest(NPC, TheSourceOfEvil, 2) +end + +function respawn(NPC) + spawn(NPC) +end + +function casted_on(NPC, Spawn, Message) + if Message == "destroy totem" then + if HasQuest(Spawn, TheSourceOfEvil) and GetQuestStep(Spawn, TheSourceOfEvil) == 2 then + AddStepProgress(Spawn, TheSourceOfEvil, 2, 1) + Despawn(NPC) + end + end +end \ No newline at end of file diff --git a/server/SpawnScripts/QueensColony/goodbookfeedingtheguurok.lua b/server/SpawnScripts/QueensColony/goodbookfeedingtheguurok.lua new file mode 100644 index 000000000..4e5c5f12f --- /dev/null +++ b/server/SpawnScripts/QueensColony/goodbookfeedingtheguurok.lua @@ -0,0 +1,23 @@ +--[[ + Script Name : goodbookfeedingtheguurok.lua + Script Purpose : Handles the book at the goblin treehouse + Script Author : Jabantiz + Script Date : 9/9/2016 + Script Notes : +--]] + +function spawn(NPC) +end + +function respawn(NPC) + spawn(NPC) +end + +function casted_on(NPC, Spawn, Message) + if Message == "Read book" then + local con = CreateConversation() + + AddConversationOption(con, "Stop reading.", "CloseConversation") + StartDialogConversation(con, 1, NPC, Spawn, "When Guurok near must be fed.\nGuurok eat skills, but not gobbie skulls.\nIt's people! Good thing graveyard near.\nBring more gobbies in case angered!\nSix peoples it needs from on rock.") + end +end \ No newline at end of file diff --git a/server/SpawnScripts/QueensColony/statuewidget.lua b/server/SpawnScripts/QueensColony/statuewidget.lua new file mode 100644 index 000000000..0c550b927 --- /dev/null +++ b/server/SpawnScripts/QueensColony/statuewidget.lua @@ -0,0 +1,20 @@ +--[[ + Script Name : SpawnScripts/QueensColony/statuewidget.lua + Script Purpose : Offer the quest "Lasydia's Call" upon interaction with this widget + Script Author : Jabantiz + Script Date : 9/13/2016 + Script Notes : +--]] + +local LasydiasCall = 186 + +function casted_on(NPC, Spawn, Message) + if Message == "Read Inscription" then + if not HasQuest(Spawn, LasydiasCall) and not HasCompletedQuest(Spawn, LasydiasCall) then + OfferQuest(NPC, Spawn, LasydiasCall) + else + AddConversationOption(con, "exit", "CloseConversation") + StartDialogConversation(con, 1, NPC, Spawn, "\"Lasydia - as divinely merciful as she is beautiful. Deliverer of the drowned and caretaker of the castaway.\" A feeling of purpose surrounds and penetrates you. You feel a sudden desire to make the waters around you a safer place.") + end + end +end \ No newline at end of file diff --git a/server/SpawnScripts/Ruins/ArmsdealerNylzs.lua b/server/SpawnScripts/Ruins/ArmsdealerNylzs.lua new file mode 100644 index 000000000..b08d1afa0 --- /dev/null +++ b/server/SpawnScripts/Ruins/ArmsdealerNylzs.lua @@ -0,0 +1,43 @@ +--[[ + Script Name : SpawnScripts/Ruins/ArmsdealerNylzs.lua + Script Purpose : Armsdealer Nylzs + Script Author : John Adams + Script Date : 2009.08.10 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +function spawn(NPC) + SetPlayerProximityFunction(NPC, 10, "InRange", "LeaveRange") +end + +function respawn(NPC) + spawn(NPC) +end + +function InRange(NPC, Spawn) + + local choice = math.random(1,5) + + if choice == 1 then + PlayFlavor(NPC, "voiceover/english/iksar_eco_evil_1/ft/service/merchant/iksar_merchant_service_evil_1_aoi_gm_b9dbd27d.mp3", "Only traitors to the Overlord would pass up a bargain like this. You're not a traitor are you?", "scold", 3019943489, 1406568446, Spawn) + elseif choice == 2 then + PlayFlavor(NPC, "voiceover/english/iksar_eco_evil_1/ft/service/merchant/iksar_merchant_service_evil_1_hail_gm_1a08e567.mp3", "Hello! Can I offer you one of our new lifetime extended warranties for any merchandise you purchase? ", "nod", 1197055422, 631535840, Spawn) + elseif choice == 3 then + PlayFlavor(NPC, "voiceover/english/iksar_eco_evil_1/ft/service/merchant/iksar_merchant_service_evil_1_hail_gm_f715099e.mp3", "Hello there, kind adventurer. My merchandise carries the seal of the Overlord himself! Go ahead, take a look!", "salute_freeport", 105908870, 230263487, Spawn) + elseif choice == 4 then + PlayFlavor(NPC, "voiceover/english/iksar_eco_evil_1/ft/service/merchant/iksar_merchant_service_evil_1_hail_gm_6ec08438.mp3", "In spite of the cost of living, it's still quite a popular item.", "ponder", 2596269432, 669710728, Spawn) + elseif choice == 5 then + PlayFlavor(NPC, "voiceover/english/iksar_eco_evil_1/ft/service/merchant/iksar_merchant_service_evil_1_hail_gm_aff3fc07.mp3", "Are you going to buy anything today, or am I just wasting my time? This isn't a museum display you know!", "glare", 1394544165, 1181852771, Spawn) + else + end + +end + +function LeaveRange(NPC, Spawn) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + + InRange(NPC, Spawn) +end diff --git a/server/SpawnScripts/Ruins/CaptainArellius.lua b/server/SpawnScripts/Ruins/CaptainArellius.lua new file mode 100644 index 000000000..f7da9e61c --- /dev/null +++ b/server/SpawnScripts/Ruins/CaptainArellius.lua @@ -0,0 +1,444 @@ +--[[ + Script Name : SpawnScripts/TheRuins/CaptainArellius.lua + Script Purpose : Captain Arellius + Script Author : jakejp + Script Date : 2018.09.30 // Finished 2018.12.28 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +local QuestFromSprawl +local QuestFromGraveyard +local QuestFromSunkenCity + +local First_ReportingForDuty = 368 +local Fifth_RequestingFurtherOrders = 372 +local Sixth_SteppingUptheOffensive = 373 +local Tenth_FileAFinalReport = 395 +local Eleventh_AJourneyOutsideTheCity = 396 + +function spawn(NPC) + ProvidesQuest(NPC, First_ReportingForDuty) + ProvidesQuest(NPC, Sixth_SteppingUptheOffensive) + ProvidesQuest(NPC, Eleventh_AJourneyOutsideTheCity) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + local choice = math.random(1,3) + + if HasQuest(Spawn, QuestFromGraveyard) or HasQuest(Spawn, QuestFromSprawl) or HasQuest(Spawn, QuestFromSunkenCity) then + if HasQuest(Spawn, QuestFromGraveyard) then + SetStepComplete(Spawn, QuestFromGraveyard, 1) + if not HasCompletedQuest(Spawn, First_ReportingForDuty) and not HasQuest(Spawn, First_ReportingForDuty) then + AddConversationOption(conversation, "My name is .. GetName(Spawn) .. . Custodian Zaddar in the Graveyard sent me.", "dlg_0_1") + end + elseif HasQuest(Spawn, QuestFromSprawl) then + SetStepComplete(Spawn, QuestFromSprawl, 1) + if not HasCompletedQuest(Spawn, First_) and not HasQuest(Spawn, First_) then + AddConversationOption(conversation, "My name is .. GetName(Spawn) .. . Custodian Zaddar in the Graveyard sent me.", "dlg_0_1") + end + elseif HasQuest(Spawn, QuestFromSunkenCity) then + SetStepComplete(Spawn, QuestFromSunkenCity, 1) + if not HasCompletedQuest(Spawn, First_) and not HasQuest(Spawn, First_) then + AddConversationOption(conversation, "My name is .. GetName(Spawn) .. . Custodian Zaddar in the Graveyard sent me.", "dlg_0_1") + end + end + + if not HasCompletedQuest(Spawn, First_ReportingForDuty) and not HasQuest(Spawn, First_ReportingForDuty) then + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/captain_arellius/fprt_adv04_ruins/revamp/captain_arellius001.mp3", "", "", 3910993894, 659100358, Spawn) + AddConversationOption(conversation, "It sounds like you need a hand. How can I help?") + AddConversationOption(conversation, "Your conflict is none of my concern.") + StartConversation(conversation, NPC, Spawn, "Stand your ground! I will defend Freeport to my dying breath! Are you friend or foe?") + else + if choice == 1 then + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/captain_arellius/fprt_adv04_ruins/revamp/quest_captain_arellius_callout_257dc2e4.mp3", "To arms! The Ruins must be defended against these mindless brutes!", "brandish", 2691467763, 3825315561, Spawn) + elseif choice == 2 then + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/captain_arellius/fprt_adv04_ruins/revamp/quest_captain_arellius_callout_5b6ad828.mp3", "The Freeport Militia will make a stand against these orcs!", "threaten", 3371139514, 3350465604, Spawn) + elseif choice == 3 then + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/captain_arellius/fprt_adv04_ruins/revamp/quest_captain_arellius_callout_6af9e361.mp3", "We must avenge the fallen of Shoreside!", "brandish", 352522731, 4132511279, Spawn) + end + end + end + + if not HasCompletedQuest (Spawn, First_ReportingForDuty) then + if HasQuest(Spawn, First_ReportingForDuty) then + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/captain_arellius/fprt_adv04_ruins/revamp/captain_arellius019.mp3", "", "", 79133986, 324326874, Spawn) + AddConversationOption(conversation, "Not yet, Captain.", "dlg_1_14") + StartConversation(conversation, NPC, Spawn, "Have you completed your assignments for Lieutenant Argosian at the first outpost?") + elseif CanReceiveQuest(Spawn, First_ReportingForDuty) then + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/captain_arellius/fprt_adv04_ruins/revamp/captain_arellius001.mp3", "", "", 3910993894, 659100358, Spawn) + AddConversationOption(conversation, "It sounds like you need a hand. How can I help?", "dlg_1_1") + AddConversationOption(conversation, "Your conflict is none of my concern.") + StartConversation(conversation, NPC, Spawn, "Stand your ground! I will defend Freeport to my dying breath! Are you friend or foe?") + end + elseif not CanReceiveQuest(Spawn, Sixth_SteppingUptheOffensive) and not HasCompletedQuest(Spawn, Fifth_RequestingFurtherOrders) then + if HasQuest(Spawn, Fifth_RequestingFurtherOrders) then + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/captain_arellius/fprt_adv04_ruins/revamp/captain_arellius019.mp3", "", "", 79133986, 324326874, Spawn) + AddConversationOption(conversation, "I completed a number of tasks for the lieutenant. He sent me back to you to receive further orders.", "dlg_2_0") + AddConversationOption(conversation, "Not yet, Captain.") + StartConversation(conversation, NPC, Spawn, "Have you completed your assignments for Lieutenant Argosian at the first outpost?") + else + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/captain_arellius/fprt_adv04_ruins/revamp/captain_arellius019.mp3", "", "", 79133986, 324326874, Spawn) + AddConversationOption(conversation, "Not yet, Captain.") + StartConversation(conversation, NPC, Spawn, "Have you completed your assignments for Lieutenant Argosian at the first outpost?") + end + elseif not HasCompletedQuest(Spawn, Sixth_SteppingUptheOffensive) then + if CanReceiveQuest(Spawn, Sixth_SteppingUptheOffensive) then -- probably need to look this over again tbh + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/captain_arellius/fprt_adv04_ruins/revamp/captain_arellius019.mp3", "", "", 79133986, 324326874, Spawn) + AddConversationOption(conversation, "I completed a number of tasks for the lieutenant. He sent me back to you to receive further orders.", "dlg_2_0") + AddConversationOption(conversation, "Not yet, Captain.") + StartConversation(conversation, NPC, Spawn, "Have you completed your assignments for Lieutenant Argosian at the first outpost?") + elseif HasQuest(Spawn, Sixth_SteppingUptheOffensive) then + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/captain_arellius/fprt_adv04_ruins/revamp/captain_arellius029.mp3", "", "", 2327537314, 879285291, Spawn) + AddConversationOption(conversation, "Not yet.") + StartConversation(conversation, NPC, Spawn, "Have you finished your assignments given by Lieutenant Imperidus at the second outpost?") + end + elseif not CanReceiveQuest(Spawn, Eleventh_AJourneyOutsideTheCity) and not HasCompletedQuest(Spawn, Tenth_FileAFinalReport) then + if HasQuest(Spawn, Tenth_FileAFinalReport) then + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/captain_arellius/fprt_adv04_ruins/revamp/captain_arellius029.mp3", "", "", 2327537314, 879285291, Spawn) + AddConversationOption(conversation, "I helped the lieutenant investigate the Lonetusk orcs.", "dlg_40_1") + AddConversationOption(conversation, "Not yet.") + StartConversation(conversation, NPC, Spawn, "Have you finished your assignments given by Lieutenant Imperidus at the second outpost?") + else + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/captain_arellius/fprt_adv04_ruins/revamp/captain_arellius029.mp3", "", "", 2327537314, 879285291, Spawn) + AddConversationOption(conversation, "Not yet.") + StartConversation(conversation, NPC, Spawn, "Have you finished your assignments given by Lieutenant Imperidus at the second outpost?") + end + elseif not HasCompletedQuest(Spawn, Eleventh_AJourneyOutsideTheCity) then + Say(Spawn, "here") + if HasQuest(Spawn, Eleventh_AJourneyOutsideTheCity) then + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/captain_arellius/fprt_adv04_ruins/revamp/captain_arellius037.mp3", "", "", 1359197915, 2412521722, Spawn) + AddConversationOption(conversation, "Be well, Captain.", "dlg_42_1") + StartConversation(conversation, NPC, Spawn, "It is good to see you again, .. GetName(Spawn) .. ! We are in your debt for helping uncover the source of the orc menace. Thanks to you, we are keeping the orcs at bay and I'm confident we will drive them out of the Ruins soon.") + elseif CanReceiveQuest(Spawn, Eleventh_AJourneyOutsideTheCity) then + dlg_40_3(NPC, Spawn) + end + elseif HasCompletedQuest(Spawn, Tenth_FileAFinalReport) then + Say(Spawn, "here") + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/captain_arellius/fprt_adv04_ruins/revamp/captain_arellius037.mp3", "", "", 1359197915, 2412521722, Spawn) + AddConversationOption(conversation, "Be well, Captain.", "dlg_42_1") + StartConversation(conversation, NPC, Spawn, "It is good to see you again, .. GetName(Spawn) .. ! We are in your debt for helping uncover the source of the orc menace. Thanks to you, we are keeping the orcs at bay and I'm confident we will drive them out of the Ruins soon.") + end +end + +function dlg_0_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/captain_arellius/fprt_adv04_ruins/revamp/captain_arellius005.mp3", "", "", 1356974238, 3910566628, Spawn) + AddConversationOption(conversation, "Orcs, really?", "dlg_0_2") + AddConversationOption(conversation, "Where did the orcs come from?") + AddConversationOption(conversation, "Thank you for the information.") + StartConversation(conversation, NPC, Spawn, "You've entered a war zone, citizen. The Freeport Militia is here in force to defend our city. Two orc clans seem to be working together in an attempt to take over the Ruins and use it as a staging ground to attack Freeport.") +end + +function dlg_1_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/captain_arellius/fprt_adv04_ruins/revamp/captain_arellius005.mp3", "", "", 1356974238, 3910566628, Spawn) + AddConversationOption(conversation, "Where did the orcs come from?", "dlg_1_2") + AddConversationOption(conversation, "Thank you for the information.") + StartConversation(conversation, NPC, Spawn, "You've entered a war zone, citizen. The Freeport Militia is here in force to defend our city. Two orc clans seem to be working together in an attempt to take over the Ruins and use it as a staging ground to attack Freeport.") +end + +function dlg_1_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/captain_arellius/fprt_adv04_ruins/revamp/captain_arellius006.mp3", "", "", 1435383956, 2150191113, Spawn) + AddConversationOption(conversation, "What are these tribes called?", "dlg_1_3") + AddConversationOption(conversation, "I have no desire to mess around with orcs.") + StartConversation(conversation, NPC, Spawn, "Both tribes have been lurking in the Ruins for some time, but they've never been this aggressive before. They seem to have become more organized and have obtained better weapons and armor.") +end + +function dlg_1_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/captain_arellius/fprt_adv04_ruins/revamp/captain_arellius007.mp3", "", "", 803622320, 3191751364, Spawn) + AddConversationOption(conversation, "Why is this place called the Ruins?", "dlg_1_4") + AddConversationOption(conversation, "What work do you have for me?", "dlg_1_12") + AddConversationOption(conversation, "I think I will take my leave.") + StartConversation(conversation, NPC, Spawn, "The weaker of the two tribes is called the Brokentusk. The stronger clan is known as the Lonetusk. I don't know much about their background personally, but my lieutenants stationed in the field may have more information.") +end + +function dlg_1_4(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/captain_arellius/fprt_adv04_ruins/revamp/captain_arellius008.mp3", "", "", 471952694, 1388761764, Spawn) + AddConversationOption(conversation, "This place used to have grand houses and shops?", "dlg_1_5") + AddConversationOption(conversation, "I don't want to hear any more.") + StartConversation(conversation, NPC, Spawn, "Take a few steps inside the archway and you'll see why. This is an old section of Freeport that has long been abandoned. Its once stately manors and exclusive boutiques are now burned-out shells and broken walls.") +end + +function dlg_1_5(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/captain_arellius/fprt_adv04_ruins/revamp/captain_arellius009.mp3", "", "", 2311879676, 4148126515, Spawn) + AddConversationOption(conversation, "What do you mean?", "dlg_1_6") + AddConversationOption(conversation, "I've heard enough.") + StartConversation(conversation, NPC, Spawn, "Oh yes. What we now call the Ruins was once known as Shoreside, an expensive and very exclusive residential district. It was favored by the wealthy for its ocean view and isolation from the hustle and bustle of the city, but the irony is that those very qualities led to its downfall.") +end + +function dlg_1_6(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/captain_arellius/fprt_adv04_ruins/revamp/captain_arellius010.mp3", "", "", 1270241224, 2005347889, Spawn) + AddConversationOption(conversation, "What happened then?", "dlg_1_7") + AddConversationOption(conversation, "I have no more time for old stories.") + StartConversation(conversation, NPC, Spawn, "Freeport has come under attack many times, and our Militia maintains a strong presence in the Commonlands to fend off the Bloodskull orcs. During one particularly fierce battle, the bulk of our forces were committed to a frontal assault on the city gates.") +end + +function dlg_1_7(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/captain_arellius/fprt_adv04_ruins/revamp/captain_arellius011.mp3", "", "", 2984532909, 290696404, Spawn) + AddConversationOption(conversation, "Couldn't the Militia save them?", "dlg_1_8") + AddConversationOption(conversation, "I've heard enough. How can I help you defend the Ruins?", "OfferQuest1") + AddConversationOption(conversation, "Too bad.") + StartConversation(conversation, NPC, Spawn, "In an unusually clandestine move, the Brokentusk and Lonetusk tribes seized the opportunity to sneak into the Shoreside docks by nightfall. The cowardly beasts overpowered the small garrison left to defend the district, then proceeded to burn and pillage everything they found. Many noble citizens of Freeport died in that conflict.") +end + +function dlg_1_8(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/captain_arellius/fprt_adv04_ruins/revamp/captain_arellius012.mp3", "", "", 516488246, 2865302304, Spawn) + AddConversationOption(conversation, "What do you mean?", "dlg_1_9") + AddConversationOption(conversation, "What a pity.") + StartConversation(conversation, NPC, Spawn, "As I said, most of our troops were busy fighting in the Commonlands. By the time reinforcements could be sent, the damage had been done. Since Shoreside was isolated and difficult to defend, it was decided that there was no sense in rebuilding it. The Sprawl serves as a buffer between the Ruins and the city proper, so Freeport remains secure. Still, there was a heavy price to be paid.") +end + +function dlg_1_9(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/captain_arellius/fprt_adv04_ruins/revamp/captain_arellius013.mp3", "", "", 2907233969, 819802352, Spawn) + AddConversationOption(conversation, "So what became of the Ruins?", "dlg_1_10") + AddConversationOption(conversation, "I've heard enough.") + StartConversation(conversation, NPC, Spawn, "Even though the invaders were defeated, War Duke Eutarius, the high-ranking Militia officer who had been charged with the city's defense, was executed in the West Freeport plaza for his incompetence and failure. The Overlord does not tolerate mistakes.") +end + +function dlg_1_10(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/captain_arellius/fprt_adv04_ruins/revamp/captain_arellius014.mp3", "", "", 2462744754, 2263094364, Spawn) + AddConversationOption(conversation, "What caused this change?", "dlg_1_11") + AddConversationOption(conversation, "Sounds like you have work to do.") + StartConversation(conversation, NPC, Spawn, "The once exclusive Shoreside became the Ruins, a broken-down home to beggars and squatters. Some remnants of the orc tribes remained as well, but they were so weak and disorganized that they posed little threat. In fact, this was a relatively calm area until quite recently.") +end + +function dlg_1_11(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/captain_arellius/fprt_adv04_ruins/revamp/captain_arellius015.mp3", "", "", 3872903634, 4159828807, Spawn) + AddConversationOption(conversation, "How can I be of assistance?", "dlg_1_12") + AddConversationOption(conversation, "I don't have any desire to help you.") + StartConversation(conversation, NPC, Spawn, "I do not know, adventurer. Perhaps that is something you can help discover. But we must act quickly, lest these orcs rise up and do to the rest of Freeport what they once did to Shoreside.") +end + +function dlg_1_12(NPC, Spawn) -- OFFER QUEST1 + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/captain_arellius/fprt_adv04_ruins/revamp/captain_arellius016.mp3", "", "", 3389775257, 1638630596, Spawn) + AddConversationOption(conversation, "I will do so.", "OfferQuest1") + AddConversationOption(conversation, "No thanks.") + StartConversation(conversation, NPC, Spawn, "I must remain here to give assignments to incoming troops. Go through the archway and report to one of my lieutenants, Argosian. He will tell you how you can best serve our cause.") +end + +function dlg_1_13(NPC, Spawn) -- QUEST ACCEPT TEXT + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/captain_arellius/fprt_adv04_ruins/revamp/captain_arellius017.mp3", "", "", 3161105606, 1921169647, Spawn) + AddConversationOption(conversation, "Thank you for the advice.", "dlg_2_14") + StartConversation(conversation, NPC, Spawn, "Good. Oh, be sure to pay homage to the statue of our beloved Overlord. It would prove most beneficial for you to bask in the wisdom of his visage.") +end + +function dlg_1_14(NPC, Spawn) -- AFTER QUEST ACCEPT TEXT + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/captain_arellius/fprt_adv04_ruins/revamp/captain_arellius018.mp3", "", "", 377300022, 2983031406, Spawn) + AddConversationOption(conversation, "I'll go see him.") + StartConversation(conversation, NPC, Spawn, "Lieutenant Argosian at the first outpost will be responsible for your initial training. Do not return to me until he has ordered you to do so.") +end + +function dlg_2_0(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/captain_arellius/fprt_adv04_ruins/revamp/captain_arellius020.mp3", "", "", 1710634773, 3637924946, Spawn) + AddConversationOption(conversation, "No, we thought an ancient shrine might be behind it, but that turned out to be a dead end.", "dlg_2_1") + AddConversationOption(conversation, "I'd rather not say.") + StartConversation(conversation, NPC, Spawn, "Good work! Did you find out what's behind this increase in orc activity?") +end + +function dlg_2_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + if HasQuest(Spawn, Fifth_RequestingFurtherOrders) then + SetStepComplete(Spawn, Fifth_RequestingFurtherOrders, 1) + end + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/captain_arellius/fprt_adv04_ruins/revamp/captain_arellius021.mp3", "", "", 93483667, 1523875207, Spawn) + AddConversationOption(conversation, "Thank you, Captain. Is there anything else I can do to aid the Militia?", "dlg_2_2") + AddConversationOption(conversation, "I'm going to take my loot and go.") + StartConversation(conversation, NPC, Spawn, "At least we can rule that out, but clearly further investigation is required. Here, help yourself to your choice of equipment from our supply chests. You should find something that will be of use in our continued efforts against the orc uprising.") +end + +function dlg_2_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/captain_arellius/fprt_adv04_ruins/revamp/captain_arellius022.mp3", "", "", 1019790101, 3910654951, Spawn) + AddConversationOption(conversation, "I am willing to do what is necessary to serve Freeport.", "dlg_2_3") + AddConversationOption(conversation, "I think I will be leaving. Farewell.") + StartConversation(conversation, NPC, Spawn, "The next step in our investigation will be an arduous one. Although to this point you could journey alone, some parts of the Ruins can be deadly for the lone adventurer.") +end + +function dlg_2_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/captain_arellius/fprt_adv04_ruins/revamp/captain_arellius023.mp3", "", "", 2666224286, 3160996791, Spawn) + AddConversationOption(conversation, "I will find some allies. What needs to be done?", "dlg_2_4") + AddConversationOption(conversation, "I prefer to journey alone.") + StartConversation(conversation, NPC, Spawn, "I knew you were daring! My advice is to gather some comrades and form a group. There is safety in numbers, especially in places like this. As you venture further out into the world, you will find groups to be extremely helpful in achieving your goals.") +end + +function dlg_2_4(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/captain_arellius/fprt_adv04_ruins/revamp/captain_arellius025.mp3", "", "", 3573308808, 1112650571, Spawn) + AddConversationOption(conversation, "So the Lonetusk are stronger?", "dlg_2_5") + AddConversationOption(conversation, "I have no desire to face these orcs.") + StartConversation(conversation, NPC, Spawn, "To be honest, I could tell that the Brokentusk were too weak to be behind the recent attacks. They have always followed the lead of their more powerful brethren, the Lonetusk orcs.") +end + +function dlg_2_5(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/captain_arellius/fprt_adv04_ruins/revamp/captain_arellius026.mp3", "", "", 3395408656, 1462645876, Spawn) + AddConversationOption(conversation, "I am not afraid. What are your orders, Captain?", "dlg_2_6") + AddConversationOption(conversation, "I'd best be leaving.") + StartConversation(conversation, NPC, Spawn, "Yes, the Lonetusk are much more deadly. They are more inclined to work together, and this will require a strong group of adventurers to stand against them.") +end + +function dlg_2_6(NPC, Spawn) -- OFFER QUEST 6 + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/captain_arellius/fprt_adv04_ruins/revamp/captain_arellius027.mp3", "", "", 2644659750, 71027369, Spawn) + AddConversationOption(conversation, "I will report to her.", "OfferQuest6") + AddConversationOption(conversation, "Time for me to go.") + StartConversation(conversation, NPC, Spawn, "I need you to report to Lieutenant Imperidus, who is stationed at the second Militia outpost deeper in the Ruins. It is located to the west of here, near the gate to the Sprawl. She is heading up the Lonetusk investigation.") +end + +function dlg_40_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/captain_arellius/fprt_adv04_ruins/revamp/captain_arellius030.mp3", "", "", 669347507, 3609055382, Spawn) + AddConversationOption(conversation, "It seems another tribe of orcs, the Rujarkians, are supplying them with weapons and training.", "dlg_40_2") + AddConversationOption(conversation, "I prefer to keep that information private.") + StartConversation(conversation, NPC, Spawn, "Well done. Did you discover the source of the orc uprising?") +end + +function dlg_40_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/captain_arellius/fprt_adv04_ruins/revamp/captain_arellius031.mp3", "", "", 2636650714, 3532932245, Spawn) + AddConversationOption(conversation, "Where are these Rujarkian orcs located?", "WhereLocated") + AddConversationOption(conversation, "Am I to be rewarded for my efforts?", "dlg_40_3") + StartConversation(conversation, NPC, Spawn, "By the Overlord! This is vital information that I will send back to the Militia House immediately. It threatens the very security of Freeport!") +end + +function WhereLocated(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "Why does this information pose such a danger to Freeport?", "DangerToFreeport") + StartConversation(conversation, NPC, Spawn, "The Rujarkian orcs are based out of the clefts in the Desert of Ro, a harsh region that lies to the south of our own continent of D'Lere. Perhaps when you are much more experienced than you are now, you will seek adventure there.") +end + +function DangerToFreeport(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "I'm glad the information I obtained was useful.", "dlg_40_3") + StartConversation(conversation, NPC, Spawn, "The Rujarkian orcs are an extremely powerful and well-organized tribe. If the Rujarkians are supplying smaller groups like the Brokentusk and Lonetusk, it is only a matter of time before they provide weapons and armor to the Bloodskull orcs in the Commonlands. For all we know, such an alliance may already be forming.") +end + +function dlg_40_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + if HasQuest(Spawn, Tenth_FileAFinalReport) then + SetStepComplete(Spawn, Tenth_FileAFinalReport, 1) + end + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/captain_arellius/fprt_adv04_ruins/revamp/captain_arellius034.mp3", "", "", 4219431602, 1872310999, Spawn) + AddConversationOption(conversation, "Is there anything else I can do to be of service to Freeport?", "dlg_40_4") + StartConversation(conversation, NPC, Spawn, "Indeed, your efforts have aided Freeport greatly. To show our thanks, you may choose an additional reward from our supply chests. These items will serve you well.") +end + +function dlg_40_4(NPC, Spawn) -- need to add offering quest once its scripted + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Yes, I will travel to the Commonlands.") + AddConversationOption(conversation, "I think I will be going, Captain. Farewell.") + StartConversation(conversation, NPC, Spawn, "Our service to the Overlord is never finished. I know of some loyal citizens in the Commonlands who need your help. Are you interested?") +end + +function dlg_100_5(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/captain_arellius/fprt_adv04_ruins/revamp/captain_arellius_solo003.mp3", "", "", 1562481055, 2208348974, Spawn) + AddConversationOption(conversation, "Understood.", "dlg_1_6") + StartConversation(conversation, NPC, Spawn, "Use the bell here on the docks to travel within Freeport and choose East Freeport as your destination. Use your map to guide you to the gate leading to West Freeport. From there, travel through that part of the city until you arrive at the main gate that leads to the Commonlands.") +end + +function dlg_100_6(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/captain_arellius/fprt_adv04_ruins/revamp/captain_arellius_solo004.mp3", "", "", 91462570, 1357108888, Spawn) + AddConversationOption(conversation, "I will. Thank you, Captain.", "dlg_1_7") + StartConversation(conversation, NPC, Spawn, "Remember that the Commonlands can be a dangerous place. Judge your battles carefully, .. GetName(Spawn) .. . When you gather allies and are ready to undertake the fight against the Lonetusk orcs, return here.") +end + +function OfferQuest1(NPC, Spawn) + OfferQuest(NPC, Spawn, First_ReportingForDuty) +end + +function OfferQuest6(NPC, Spawn) + OfferQuest(NPC, Spawn, Sixth_SteppingUptheOffensive) +end + +function OfferQuest11(NPC, Spawn) + OfferQuest(NPC, Spawn, Eleventh_AJourneyOutsideTheCity) +end +--[[ raw_conversations + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/captain_arellius/fprt_adv04_ruins/revamp/quest_captain_arellius_callout_5b6ad828.mp3", "The Freeport Militia will make a stand against these orcs!", "threaten", 3371139514, 3350465604, Spawn) + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/captain_arellius/fprt_adv04_ruins/revamp/quest_captain_arellius_callout_6af9e361.mp3", "We must avenge the fallen of Shoreside!", "brandish", 352522731, 4132511279, Spawn) + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/captain_arellius/fprt_adv04_ruins/revamp/quest_captain_arellius_callout_257dc2e4.mp3", "To arms! The Ruins must be defended against these mindless brutes!", "brandish", 2691467763, 3825315561, Spawn) +--]] + diff --git a/server/SpawnScripts/Ruins/LieutenantArgosian.lua b/server/SpawnScripts/Ruins/LieutenantArgosian.lua new file mode 100644 index 000000000..e7488356d --- /dev/null +++ b/server/SpawnScripts/Ruins/LieutenantArgosian.lua @@ -0,0 +1,624 @@ +--[[ + Script Name : SpawnScripts/TheRuins/LieutenantArgosian.lua + Script Purpose : Lieutenant Argosian + Script Author : jakejp + Script Date : 2018.10.03 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +local First_ReportingForDuty = 368 +local Second_PawnsInTheGame = 369 +local Third_PoundingTheEnemy = 370 +local Fourth_ProphetAndLoss = 371 +local Fifth_RequestingFurtherOrders = 372 + +function spawn(NPC) + ProvidesQuest(NPC, Second_PawnsInTheGame) + ProvidesQuest(NPC, Third_PoundingTheEnemy) + ProvidesQuest(NPC, Fourth_ProphetAndLoss) + ProvidesQuest(NPC, Fifth_RequestingFurtherOrders) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + local choice = math.random(1,5) + + if HasQuest (Spawn, First_ReportingForDuty) then + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/lieutenant_argosian/fprt_adv04_ruins/revamp/lieutenant_argosian001.mp3", "", "", 1274591844, 2524405313, Spawn) + AddConversationOption(conversation, "My name is ".. GetName(Spawn) ..". Captain Arellius ordered me to report here, lieutenant.", "dlg_4_1") + AddConversationOption(conversation, "What is this place?") + StartConversation(conversation, NPC, Spawn, "There's no time for chatting. I need to mobilize my forces to take care of these cursed orcs!") + elseif not HasCompletedQuest(Spawn, Second_PawnsInTheGame) then + if HasQuest(Spawn, Second_PawnsInTheGame) then -- on the quest + if GetQuestStep(Spawn, Second_PawnsInTheGame) == 1 then -- first quest step + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/lieutenant_argosian/fprt_adv04_ruins/revamp/lieutenant_argosian010.mp3", "", "", 1424055044, 3253454726, Spawn) + AddConversationOption(conversation, "Not yet, but I'll work on it.") + StartConversation(conversation, NPC, Spawn, "Hello, recruit. Did you fulfill your duty to Freeport against the Brokentusk pawns?") + elseif GetQuestStep(Spawn, Second_PawnsInTheGame) == 2 then -- second quest step + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/lieutenant_argosian/fprt_adv04_ruins/revamp/lieutenant_argosian010.mp3", "", "", 1424055044, 3253454726, Spawn) + AddConversationOption(conversation, "I defeated ten of them, as you ordered.", "dlg_9_1") + AddConversationOption(conversation, "Not yet, but I'll work on it.") + StartConversation(conversation, NPC, Spawn, "Hello, recruit. Did you fulfill your duty to Freeport against the Brokentusk pawns?") + end + elseif CanReceiveQuest(Spawn, Second_PawnsInTheGame) then -- offers quest + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/lieutenant_argosian/fprt_adv04_ruins/revamp/lieutenant_argosian004.mp3", "", "", 304896204, 2664209556, Spawn) + AddConversationOption(conversation, "What is behind the orcs' sudden uprising?", "dlg_4_3") + AddConversationOption(conversation, "You'd better get busy defending the city, then.") + StartConversation(conversation, NPC, Spawn, "The Ruins are being overrun, and it's time for us to take a stand. We must ensure that the orcs don't infiltrate the rest of the city.") + end + elseif not HasCompletedQuest(Spawn, Third_PoundingTheEnemy) then + if HasQuest(Spawn, Third_PoundingTheEnemy) then + if GetQuestStep(Spawn, Third_PoundingTheEnemy) <= 3 then + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/lieutenant_argosian/fprt_adv04_ruins/revamp/lieutenant_argosian016.mp3", "", "", 568866263, 2772410909, Spawn) + AddConversationOption(conversation, "Not yet, lieutenant.") + StartConversation(conversation, NPC, Spawn, "See you're back. Have you taught the Brokentusk a lesson?") + elseif GetQuestStep(Spawn, Third_PoundingTheEnemy) == 4 then + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/lieutenant_argosian/fprt_adv04_ruins/revamp/lieutenant_argosian016.mp3", "", "", 568866263, 2772410909, Spawn) + AddConversationOption(conversation, "I defeated many of them in battle, and slew an overseer that was holding some squatters captive.", "dlg_0_1") + AddConversationOption(conversation, "Not yet, lieutenant.") + StartConversation(conversation, NPC, Spawn, "See you're back. Have you taught the Brokentusk a lesson?") + end + elseif CanReceiveQuest(Spawn, Third_PoundingTheEnemy) then + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/lieutenant_argosian/fprt_adv04_ruins/revamp/lieutenant_argosian030.mp3", "", "", 176584660, 1690362035, Spawn) + AddConversationOption(conversation, "Yes, I am ready to serve the Overlord's army.", "dlg_10_1") + AddConversationOption(conversation, "Not right now, thanks.") + StartConversation(conversation, NPC, Spawn, "Welcome back. Are you ready to serve the Freeport Militia?") + end + elseif not HasCompletedQuest(Spawn, Fourth_ProphetAndLoss) then + if HasQuest(Spawn, Fourth_ProphetAndLoss) then + if GetQuestStep(Spawn, Fourth_ProphetAndLoss) <= 3 then + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/lieutenant_argosian/fprt_adv04_ruins/revamp/lieutenant_argosian023.mp3", "", "", 2394457158, 2443723725, Spawn) + AddConversationOption(conversation, "Not yet, lieutenant.") + StartConversation(conversation, NPC, Spawn, "Hello again, orc slayer. Did you find the shrine I ordered you to look for?") + elseif GetQuestStep(Spawn, Fourth_ProphetAndLoss) == 4 then + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/lieutenant_argosian/fprt_adv04_ruins/revamp/lieutenant_argosian023.mp3", "", "", 2394457158, 2443723725, Spawn) + AddConversationOption(conversation, "I found a shrine, but it didn't seem to be strengthening the Brokentusk in any way.", "dlg_1_1") + AddConversationOption(conversation, "Not yet, lieutenant.") + StartConversation(conversation, NPC, Spawn, "Hello again, orc slayer. Did you find the shrine I ordered you to look for?") + end + elseif CanReceiveQuest(Spawn, Fourth_ProphetAndLoss) then + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/lieutenant_argosian/fprt_adv04_ruins/revamp/lieutenant_argosian031.mp3", "", "", 825306924, 1228801639, Spawn) + AddConversationOption(conversation, "Yes I am. What is going on with the Brokentusk orcs?", "dlg_0_3") + AddConversationOption(conversation, "Not quite yet.") + StartConversation(conversation, NPC, Spawn, "Hello again. Are you ready to resume your service to the Militia?") + end + elseif not HasCompletedQuest(Spawn, Fifth_RequestingFurtherOrders) then + if HasQuest(Spawn, Fifth_RequestingFurtherOrders) then + if GetQuestStep(Spawn, Fifth_RequestingFurtherOrders) == 1 then + AddConversationOption(conversation, "I'll do so, lieutenant.") + StartConversation(conversation, NPC, Spawn, "Ah, welcome back to the front lines! Be sure to bash a few Brokentusk heads if you get the chance!") + end + elseif CanReceiveQuest(Spawn, Fifth_RequestingFurtherOrders) then + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/lieutenant_argosian/fprt_adv04_ruins/revamp/lieutenant_argosian026.mp3", "", "", 265773881, 986062329, Spawn) + AddConversationOption(conversation, "Thank you. Any other assignments for me?", "dlg_1_4") + AddConversationOption(conversation, "I really don't care.") + StartConversation(conversation, NPC, Spawn, "Thank you for your assistance. I have already informed Captain Arellius what you have done for the Militia. She will happily reward you for your efforts.") + end + elseif HasCompletedQuest(Spawn, Fifth_RequestingFurtherOrders) then + AddConversationOption(conversation, "Thank you, lieutenant.") + StartConversation(conversation, NPC, Spawn, "Greetings once again, my old comrade. Feel free to smash the heads of a few Brokentusk orcs! I would be honored to fight by your side again.") + end +end + +function dlg_0_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/lieutenant_argosian/fprt_adv04_ruins/revamp/lieutenant_argosian017.mp3", "", "", 3074507366, 3925134800, Spawn) + AddConversationOption(conversation, "You suspect some greater plot?", "dlg_0_2") + AddConversationOption(conversation, "That's your job.") + StartConversation(conversation, NPC, Spawn, "My confidence in you is growing, adventurer! The time has come to see if we can find out what exactly is behind this orc uprising.") +end + +function dlg_0_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + SetStepComplete(Spawn, Third_PoundingTheEnemy, 4) + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/lieutenant_argosian/fprt_adv04_ruins/revamp/lieutenant_argosian018.mp3", "", "", 3835468248, 3651661502, Spawn) + AddConversationOption(conversation, "What do you mean?", "dlg_0_3") + StartConversation(conversation, NPC, Spawn, "Based on the change that has come over these orcs, I think something is afoot.") +end + +function dlg_0_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/lieutenant_argosian/fprt_adv04_ruins/revamp/lieutenant_argosian019.mp3", "", "", 2918602738, 2245938808, Spawn) + AddConversationOption(conversation, "Do you have any idea how they became more powerful?", "dlg_0_4") + AddConversationOption(conversation, "You'd better get to work in that case.") + StartConversation(conversation, NPC, Spawn, "The Militia didn't pay much attention to the Brokentusk until very recently. They were a pathetically weak clan, made up of mostly outcasts of the Bloodskull orcs in the Commonlands. But it seems they have new armor and stronger weapons, and seem to be on the move.") +end + +function dlg_0_4(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/lieutenant_argosian/fprt_adv04_ruins/revamp/lieutenant_argosian020.mp3", "", "", 3553520221, 3928709815, Spawn) + AddConversationOption(conversation, "I'll look for the shrine.", "dlg_0_5") + AddConversationOption(conversation, "No, not today.") + StartConversation(conversation, NPC, Spawn, "Not yet. My scouts have reported overhearing the orcs say that their prophets are guarding some kind of shrine deeper in the Ruins. I'd like to rule out any sort of divine influence, so I need you to find out whether or not this shrine actually exists. Are you willing?") +end + +function dlg_0_5(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/lieutenant_argosian/fprt_adv04_ruins/revamp/lieutenant_argosian021.mp3", "", "", 369320246, 927780722, Spawn) + AddConversationOption(conversation, "I'll find it and take a close look. Do you have any other orders?", "dlg_0_6") + StartConversation(conversation, NPC, Spawn, "Glad to hear we can count on you, adventurer. Rumor has it that this shrine may be located past the ruins to the north, though I don't have a precise location. When you find it, be sure to get close and examine it carefully.") +end + +function dlg_0_6(NPC, Spawn) -- OFFER QUEST 4 + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/lieutenant_argosian/fprt_adv04_ruins/revamp/lieutenant_argosian022.mp3", "", "", 384501138, 1907732754, Spawn) + AddConversationOption(conversation, "I will do so, lieutenant.", "OfferQuest4") + StartConversation(conversation, NPC, Spawn, "Be sure to dispose of as many of those prophets as you can, and their warriors as well. If you find this shrine, try to determine that it is the source of their increased strength. Be careful though, there may be powerful forces protecting it.") +end + +function dlg_1_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + SetStepComplete(Spawn, Fourth_ProphetAndLoss, 4) + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/lieutenant_argosian/fprt_adv04_ruins/revamp/lieutenant_argosian024.mp3", "", "", 1799585583, 2887995117, Spawn) + AddConversationOption(conversation, "It seems to be a relic from the days of Shoreside, but I can't tell why the orcs are guarding it.", "dlg_1_2") + AddConversationOption(conversation, "I have no idea.") + StartConversation(conversation, NPC, Spawn, "Well, good work in any case. What is the purpose of the shrine?") +end + +function dlg_1_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/lieutenant_argosian/fprt_adv04_ruins/revamp/lieutenant_argosian025.mp3", "", "", 89627192, 3614171485, Spawn) + AddConversationOption(conversation, "No, it seems we have not.", "dlg_1_3") + AddConversationOption(conversation, "It's none of my concern anyway.") + StartConversation(conversation, NPC, Spawn, "I guess no one ever accused the Brokentusk of being too bright. Unfortunately, that means we haven't uncovered any evidence that explains why they are rising up.") +end + +function dlg_1_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/lieutenant_argosian/fprt_adv04_ruins/revamp/lieutenant_argosian026.mp3", "", "", 265773881, 986062329, Spawn) + AddConversationOption(conversation, "Thank you. Any other assignments for me?", "dlg_1_4") + AddConversationOption(conversation, "I really don't care.") + StartConversation(conversation, NPC, Spawn, "Thank you for your assistance. I have already informed Captain Arellius what you have done for the Militia. She will happily reward you for your efforts.") +end + +function dlg_1_4(NPC, Spawn) -- OFFER QUEST 5 + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/lieutenant_argosian/fprt_adv04_ruins/revamp/lieutenant_argosian027.mp3", "", "", 1406479810, 234555817, Spawn) + AddConversationOption(conversation, "I will report back to her.", "OfferQuest5") + AddConversationOption(conversation, "I need to go.") + StartConversation(conversation, NPC, Spawn, "You are welcome to stay and help us clear out more of these Brokentusks, but you really should report back to the captain to see if she has new orders for you. It's been a pleasure working with you.") +end + + +function dlg_4_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + SetStepComplete(Spawn, First_ReportingForDuty, 1) + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/lieutenant_argosian/fprt_adv04_ruins/revamp/lieutenant_argosian003.mp3", "", "", 347286193, 1720701899, Spawn) + AddConversationOption(conversation, "Defended from the orcs?", "dlg_4_2") + AddConversationOption(conversation, "That sounds like your job, not mine.") + StartConversation(conversation, NPC, Spawn, "Good, we can always use more recruits to help our cause. Freeport must be defended.") +end + +function dlg_4_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/lieutenant_argosian/fprt_adv04_ruins/revamp/lieutenant_argosian004.mp3", "", "", 304896204, 2664209556, Spawn) + AddConversationOption(conversation, "What is behind the orcs' sudden uprising?", "dlg_4_3") + AddConversationOption(conversation, "You'd better get busy defending the city, then.") + StartConversation(conversation, NPC, Spawn, "The Ruins are being overrun, and it's time for us to take a stand. We must ensure that the orcs don't infiltrate the rest of the city.") +end + +function dlg_4_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/lieutenant_argosian/fprt_adv04_ruins/revamp/lieutenant_argosian005.mp3", "", "", 1736920574, 580016233, Spawn) + AddConversationOption(conversation, "Yes, I will help you.", "dlg_4_4") + AddConversationOption(conversation, "No, not right now.") + StartConversation(conversation, NPC, Spawn, "We haven't uncovered that yet, and frankly I don't have time to play detective. Are you willing to help the Freeport Militia turn back this tide of aggression?") +end + +function dlg_4_4(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/lieutenant_argosian/fprt_adv04_ruins/revamp/lieutenant_argosian006.mp3", "", "", 4214902547, 3965380224, Spawn) + AddConversationOption(conversation, "What would you have me do?", "dlg_4_5") + AddConversationOption(conversation, "On second thought, handle this yourself.") + StartConversation(conversation, NPC, Spawn, "Excellent! It looks like the captain was wise to send you to me. Our outpost here is being beset on both sides by the Brokentusk clan of orcs. Once they were pathetically weak, but they seem to be training for a larger offensive.") +end + +function dlg_4_5(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/lieutenant_argosian/fprt_adv04_ruins/revamp/lieutenant_argosian007.mp3", "", "", 1892260608, 3800228650, Spawn) + AddConversationOption(conversation, "What do you mean by striking fear?", "dlg_4_6") + AddConversationOption(conversation, "Do your own dirty work.") + StartConversation(conversation, NPC, Spawn, "A large number of Brokentusk pawns have been seen gathering to the south. Go up the stairs and help my troops strike some fear into them.") +end + +function dlg_4_6(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/lieutenant_argosian/fprt_adv04_ruins/revamp/lieutenant_argosian008.mp3", "", "", 1136740224, 4202559989, Spawn) + AddConversationOption(conversation, "Yes, I'll do my part.", "dlg_4_7") + AddConversationOption(conversation, "Nobody talks to me that way!") + StartConversation(conversation, NPC, Spawn, "I mean make them DEAD! Look, if this is too much for you, move along, because I've got other recruits to train. Will you help us or not?") +end + +function dlg_4_7(NPC, Spawn) -- OFFER QUEST 2 + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/lieutenant_argosian/fprt_adv04_ruins/revamp/lieutenant_argosian009.mp3", "", "", 3089238951, 3281159582, Spawn) + AddConversationOption(conversation, "Aye, lieutenant.", "OfferQuest2") + AddConversationOption(conversation, "Not right now.") + StartConversation(conversation, NPC, Spawn, "Good! Let's test your mettle against the pawns. Kill at least ten of those beasts before you dare return to me. If you succeed, I'll gain some confidence in your abilities.") +end + +function dlg_5_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/lieutenant_argosian/fprt_adv04_ruins/revamp/lieutenant_argosian002.mp3", "", "", 1265605961, 1173429431, Spawn) + AddConversationOption(conversation, "I'll go speak with her.") + StartConversation(conversation, NPC, Spawn, "Look here, adventurer. My troops must find a way to control these blasted brutes. If you want a history lesson, go speak to Captain Arellius on the docks. She may have time to fill you in, but I don't.") +end + +function dlg_5_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/lieutenant_argosian/fprt_adv04_ruins/revamp/lieutenant_argosian003.mp3", "", "", 347286193, 1720701899, Spawn) + AddConversationOption(conversation, "Defended from the orcs?", "dlg_5_2") + AddConversationOption(conversation, "That sounds like your job, not mine.") + StartConversation(conversation, NPC, Spawn, "Good, we can always use more recruits to help our cause. Freeport must be defended.") +end + +function dlg_5_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/lieutenant_argosian/fprt_adv04_ruins/revamp/lieutenant_argosian004.mp3", "", "", 304896204, 2664209556, Spawn) + AddConversationOption(conversation, "What is behind the orcs' sudden uprising?", "dlg_5_3") + AddConversationOption(conversation, "You'd better get busy defending the city, then.") + StartConversation(conversation, NPC, Spawn, "The Ruins are being overrun, and it's time for us to take a stand. We must ensure that the orcs don't infiltrate the rest of the city.") +end + +function dlg_5_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/lieutenant_argosian/fprt_adv04_ruins/revamp/lieutenant_argosian005.mp3", "", "", 1736920574, 580016233, Spawn) + AddConversationOption(conversation, "Yes, I will help you.", "dlg_5_4") + AddConversationOption(conversation, "No, not right now.") + StartConversation(conversation, NPC, Spawn, "We haven't uncovered that yet, and frankly I don't have time to play detective. Are you willing to help the Freeport Militia turn back this tide of aggression?") +end + +function dlg_5_4(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/lieutenant_argosian/fprt_adv04_ruins/revamp/lieutenant_argosian006.mp3", "", "", 4214902547, 3965380224, Spawn) + AddConversationOption(conversation, "What would you have me do?", "dlg_5_5") + AddConversationOption(conversation, "On second thought, handle this yourself.") + StartConversation(conversation, NPC, Spawn, "Excellent! It looks like the captain was wise to send you to me. Our outpost here is being beset on both sides by the Brokentusk clan of orcs. Once they were pathetically weak, but they seem to be training for a larger offensive.") +end + +function dlg_5_5(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/lieutenant_argosian/fprt_adv04_ruins/revamp/lieutenant_argosian007.mp3", "", "", 1892260608, 3800228650, Spawn) + AddConversationOption(conversation, "What do you mean by striking fear?", "dlg_5_6") + AddConversationOption(conversation, "Do your own dirty work.") + StartConversation(conversation, NPC, Spawn, "A large number of Brokentusk pawns have been seen gathering to the south. Go up the stairs and help my troops strike some fear into them.") +end + +function dlg_5_6(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/lieutenant_argosian/fprt_adv04_ruins/revamp/lieutenant_argosian008.mp3", "", "", 1136740224, 4202559989, Spawn) + AddConversationOption(conversation, "Yes, I'll do my part.", "dlg_5_7") + AddConversationOption(conversation, "Nobody talks to me that way!") + StartConversation(conversation, NPC, Spawn, "I mean make them DEAD! Look, if this is too much for you, move along, because I've got other recruits to train. Will you help us or not?") +end + +function dlg_5_7(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/lieutenant_argosian/fprt_adv04_ruins/revamp/lieutenant_argosian009.mp3", "", "", 3089238951, 3281159582, Spawn) + AddConversationOption(conversation, "Aye, lieutenant.", "dlg_5_8") + AddConversationOption(conversation, "Not right now.") + StartConversation(conversation, NPC, Spawn, "Good! Let's test your mettle against the pawns. Kill at least ten of those beasts before you dare return to me. If you succeed, I'll gain some confidence in your abilities.") +end + +function dlg_5_8(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/lieutenant_argosian/fprt_adv04_ruins/revamp/lieutenant_argosian009b.mp3", "", "", 3351588566, 3135177671, Spawn) + AddConversationOption(conversation, "I will do so.", "dlg_5_9") + StartConversation(conversation, NPC, Spawn, "Get to work, citizen. You have your orders, now carry them out.") +end + +function dlg_6_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/lieutenant_argosian/fprt_adv04_ruins/revamp/lieutenant_argosian003.mp3", "", "", 347286193, 1720701899, Spawn) + AddConversationOption(conversation, "Defended from the orcs?", "dlg_6_2") + AddConversationOption(conversation, "That sounds like your job, not mine.") + StartConversation(conversation, NPC, Spawn, "Good, we can always use more recruits to help our cause. Freeport must be defended.") +end + +function dlg_7_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/lieutenant_argosian/fprt_adv04_ruins/revamp/lieutenant_argosian005.mp3", "", "", 1736920574, 580016233, Spawn) + AddConversationOption(conversation, "Yes, I will help you.", "dlg_7_2") + AddConversationOption(conversation, "No, not right now.") + StartConversation(conversation, NPC, Spawn, "We haven't uncovered that yet, and frankly I don't have time to play detective. Are you willing to help the Freeport Militia turn back this tide of aggression?") +end + +function dlg_7_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/lieutenant_argosian/fprt_adv04_ruins/revamp/lieutenant_argosian006.mp3", "", "", 4214902547, 3965380224, Spawn) + AddConversationOption(conversation, "What would you have me do?", "dlg_7_3") + AddConversationOption(conversation, "On second thought, handle this yourself.") + StartConversation(conversation, NPC, Spawn, "Excellent! It looks like the captain was wise to send you to me. Our outpost here is being beset on both sides by the Brokentusk clan of orcs. Once they were pathetically weak, but they seem to be training for a larger offensive.") +end + +function dlg_7_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/lieutenant_argosian/fprt_adv04_ruins/revamp/lieutenant_argosian007.mp3", "", "", 1892260608, 3800228650, Spawn) + AddConversationOption(conversation, "What do you mean by striking fear?", "dlg_7_4") + AddConversationOption(conversation, "Do your own dirty work.") + StartConversation(conversation, NPC, Spawn, "A large number of Brokentusk pawns have been seen gathering to the south. Go up the stairs and help my troops strike some fear into them.") +end + +function dlg_7_4(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/lieutenant_argosian/fprt_adv04_ruins/revamp/lieutenant_argosian008.mp3", "", "", 1136740224, 4202559989, Spawn) + AddConversationOption(conversation, "Yes, I'll do my part.", "dlg_7_5") + AddConversationOption(conversation, "Nobody talks to me that way!") + StartConversation(conversation, NPC, Spawn, "I mean make them DEAD! Look, if this is too much for you, move along, because I've got other recruits to train. Will you help us or not?") +end + +function dlg_7_5(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/lieutenant_argosian/fprt_adv04_ruins/revamp/lieutenant_argosian009.mp3", "", "", 3089238951, 3281159582, Spawn) + AddConversationOption(conversation, "Aye, lieutenant.", "dlg_7_6") + AddConversationOption(conversation, "Not right now.") + StartConversation(conversation, NPC, Spawn, "Good! Let's test your mettle against the pawns. Kill at least ten of those beasts before you dare return to me. If you succeed, I'll gain some confidence in your abilities.") +end + +function dlg_7_6(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/lieutenant_argosian/fprt_adv04_ruins/revamp/lieutenant_argosian009b.mp3", "", "", 3351588566, 3135177671, Spawn) + AddConversationOption(conversation, "I will do so.", "dlg_7_7") + StartConversation(conversation, NPC, Spawn, "Get to work, citizen. You have your orders, now carry them out.") +end + +function dlg_9_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + SetStepComplete(Spawn, Second_PawnsInTheGame, 2) + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/lieutenant_argosian/fprt_adv04_ruins/revamp/lieutenant_argosian011.mp3", "", "", 2187153051, 2285485412, Spawn) + AddConversationOption(conversation, "I'm ready and willing.", "dlg_10_1") + AddConversationOption(conversation, "Orc pawns are my specialty. I think I'll stick with those.") + StartConversation(conversation, NPC, Spawn, "Well, nice work. It's almost as if you've killed orc pawns before! Maybe I can trust you with a more challenging task.") +end + +function dlg_10_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/lieutenant_argosian/fprt_adv04_ruins/revamp/lieutenant_argosian013.mp3", "", "", 1827066506, 859247835, Spawn) + AddConversationOption(conversation, "What do you mean by vagrant squatters?", "dlg_10_2") + AddConversationOption(conversation, "Perhaps I should reconsider.") + StartConversation(conversation, NPC, Spawn, "Some more formidable Brokentusk orcs are gathering to the north. They've taken up residence in some of the abandoned ruins there, and I've gotten reports that they have captured some of the vagrant squatters that used to reside there.") +end + +function dlg_10_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/lieutenant_argosian/fprt_adv04_ruins/revamp/lieutenant_argosian014.mp3", "", "", 1560986301, 1441248753, Spawn) + AddConversationOption(conversation, "How horrible! Are we going to help them?", "dlg_10_3") + AddConversationOption(conversation, "None of this is my concern.") + StartConversation(conversation, NPC, Spawn, "After Shoreside was abandoned and became known as the Ruins, groups of vagrant beggars moved in here and seemed to coexist with the orcs. Our patrols have discovered that the Brokentusk recently killed most of the squatters, however, and are keeping a few as captives.") +end + +function dlg_10_3(NPC, Spawn) -- Offer Quest 3 + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/lieutenant_argosian/fprt_adv04_ruins/revamp/lieutenant_argosian015.mp3", "", "", 2121023365, 565794587, Spawn) + AddConversationOption(conversation, "Consider it done.", "OfferQuest3") + AddConversationOption(conversation, "I'm not interested.") + StartConversation(conversation, NPC, Spawn, "Even though the squatters are not citizens, the Overlord will not tolerate unsanctioned violence within his borders. I need you to head north and teach the Brokentusk a lesson. Take special care to rid the area of any overseers you notice holding prisoners.") +end + +function dlg_10_4(NPC, Spawn) -- Quest Accepted text + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/lieutenant_argosian/fprt_adv04_ruins/revamp/lieutenant_argosian015b.mp3", "", "", 102436079, 1387861460, Spawn) + AddConversationOption(conversation, "I will.", "dlg_10_5") + StartConversation(conversation, NPC, Spawn, "I knew I could count on you. Return to me when the orcs have paid for their crimes.") +end + +function dlg_12_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/lieutenant_argosian/fprt_adv04_ruins/revamp/lieutenant_argosian017.mp3", "", "", 3074507366, 3925134800, Spawn) + AddConversationOption(conversation, "You suspect some greater plot?", "dlg_12_2") + AddConversationOption(conversation, "That's your job.") + StartConversation(conversation, NPC, Spawn, "My confidence in you is growing, adventurer! The time has come to see if we can find out what exactly is behind this orc uprising.") +end + +function dlg_13_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/lieutenant_argosian/fprt_adv04_ruins/revamp/lieutenant_argosian017.mp3", "", "", 3074507366, 3925134800, Spawn) + AddConversationOption(conversation, "You suspect some greater plot?", "dlg_13_2") + AddConversationOption(conversation, "That's your job.") + StartConversation(conversation, NPC, Spawn, "My confidence in you is growing, adventurer! The time has come to see if we can find out what exactly is behind this orc uprising.") +end + +function dlg_13_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/lieutenant_argosian/fprt_adv04_ruins/revamp/lieutenant_argosian018.mp3", "", "", 3835468248, 3651661502, Spawn) + AddConversationOption(conversation, "What do you mean?", "dlg_13_3") + StartConversation(conversation, NPC, Spawn, "Based on the change that has come over these orcs, I think something is afoot.") +end + +function dlg_13_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/lieutenant_argosian/fprt_adv04_ruins/revamp/lieutenant_argosian019.mp3", "", "", 2918602738, 2245938808, Spawn) + AddConversationOption(conversation, "Do you have any idea how they became more powerful?", "dlg_13_4") + AddConversationOption(conversation, "You'd better get to work in that case.") + StartConversation(conversation, NPC, Spawn, "The Militia didn't pay much attention to the Brokentusk until very recently. They were a pathetically weak clan, made up of mostly outcasts of the Bloodskull orcs in the Commonlands. But it seems they have new armor and stronger weapons, and seem to be on the move.") +end + +function dlg_14_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/lieutenant_argosian/fprt_adv04_ruins/revamp/lieutenant_argosian019.mp3", "", "", 2918602738, 2245938808, Spawn) + AddConversationOption(conversation, "Do you have any idea how they became more powerful?", "dlg_14_2") + AddConversationOption(conversation, "You'd better get to work in that case.") + StartConversation(conversation, NPC, Spawn, "The Militia didn't pay much attention to the Brokentusk until very recently. They were a pathetically weak clan, made up of mostly outcasts of the Bloodskull orcs in the Commonlands. But it seems they have new armor and stronger weapons, and seem to be on the move.") +end + +function dlg_14_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/lieutenant_argosian/fprt_adv04_ruins/revamp/lieutenant_argosian020.mp3", "", "", 3553520221, 3928709815, Spawn) + AddConversationOption(conversation, "I'll look for the shrine.", "dlg_14_3") + AddConversationOption(conversation, "No, not today.") + StartConversation(conversation, NPC, Spawn, "Not yet. My scouts have reported overhearing the orcs say that their prophets are guarding some kind of shrine deeper in the Ruins. I'd like to rule out any sort of divine influence, so I need you to find out whether or not this shrine actually exists. Are you willing?") +end + +function dlg_14_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/lieutenant_argosian/fprt_adv04_ruins/revamp/lieutenant_argosian021.mp3", "", "", 369320246, 927780722, Spawn) + AddConversationOption(conversation, "I'll find it and take a close look. Do you have any other orders?", "dlg_14_4") + StartConversation(conversation, NPC, Spawn, "Glad to hear we can count on you, adventurer. Rumor has it that this shrine may be located past the ruins to the north, though I don't have a precise location. When you find it, be sure to get close and examine it carefully.") +end + +function dlg_14_4(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/lieutenant_argosian/fprt_adv04_ruins/revamp/lieutenant_argosian022.mp3", "", "", 384501138, 1907732754, Spawn) + AddConversationOption(conversation, "I will do so, lieutenant.", "dlg_14_5") + StartConversation(conversation, NPC, Spawn, "Be sure to dispose of as many of those prophets as you can, and their warriors as well. If you find this shrine, try to determine that it is the source of their increased strength. Be careful though, there may be powerful forces protecting it.") +end + +function dlg_14_5(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/lieutenant_argosian/fprt_adv04_ruins/revamp/lieutenant_argosian022b.mp3", "", "", 3696168160, 1150705872, Spawn) + AddConversationOption(conversation, "Yes, sir.", "dlg_14_6") + StartConversation(conversation, NPC, Spawn, "Go now, and report back when your duty is done.") +end + +function dlg_16_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/lieutenant_argosian/fprt_adv04_ruins/revamp/lieutenant_argosian024.mp3", "", "", 1799585583, 2887995117, Spawn) + AddConversationOption(conversation, "It seems to be a relic from the days of Shoreside, but I can't tell why the orcs are guarding it.", "dlg_16_2") + AddConversationOption(conversation, "I have no idea.") + StartConversation(conversation, NPC, Spawn, "Well, good work in any case. What is the purpose of the shrine?") +end + +function dlg_18_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/lieutenant_argosian/fprt_adv04_ruins/revamp/lieutenant_argosian027.mp3", "", "", 1406479810, 234555817, Spawn) + AddConversationOption(conversation, "I will report back to her.", "dlg_18_2") + AddConversationOption(conversation, "I need to go.") + StartConversation(conversation, NPC, Spawn, "You are welcome to stay and help us clear out more of these Brokentusks, but you really should report back to the captain to see if she has new orders for you. It's been a pleasure working with you.") +end + +function dlg_18_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/lieutenant_argosian/fprt_adv04_ruins/revamp/lieutenant_argosian027b.mp3", "", "", 3190269915, 3618413640, Spawn) + AddConversationOption(conversation, "I will.", "dlg_18_3") + StartConversation(conversation, NPC, Spawn, "Travel safely, citizen of Freeport.") +end + +function OfferQuest2(NPC, Spawn) + OfferQuest(NPC, Spawn, Second_PawnsInTheGame) +end + +function OfferQuest3(NPC, Spawn) + OfferQuest(NPC, Spawn, Third_PoundingTheEnemy) +end + +function OfferQuest4(NPC, Spawn) + OfferQuest(NPC, Spawn, Fourth_ProphetAndLoss) +end + +function OfferQuest5(NPC, Spawn) + OfferQuest(NPC, Spawn, Fifth_RequestingFurtherOrders) +end +--[[ raw_conversations + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/lieutenant_argosian/fprt_adv04_ruins/revamp/quest_lieutenant_argosian_callout_24873053.mp3", "The Ruins won't be safe until the orcs are eliminated completely!", "nod", 1037666324, 2592423942, Spawn) + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/lieutenant_argosian/fprt_adv04_ruins/revamp/quest_lieutenant_argosian_callout_9cbdee98.mp3", "We make our stand against the Brokentusk here and now!", "agree", 3561877785, 2635940014, Spawn) + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/lieutenant_argosian/fprt_adv04_ruins/revamp/quest_lieutenant_argosian_callout_4b387393.mp3", "All citizens should take up arms against these orc beasts!", "brandish", 332911502, 701229058, Spawn) + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/lieutenant_argosian/fprt_adv04_ruins/revamp/quest_lieutenant_argosian_callout_8a5b29c8.mp3", "These filthy Brokentusk must be extinguished!", "threaten", 1555035852, 461893438, Spawn) + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/lieutenant_argosian/fprt_adv04_ruins/revamp/quest_lieutenant_argosian_callout_3494a596.mp3", "We will make our stand against the Brokentusk and erase them from our city.", "nod", 3653569376, 3748121838, Spawn) +--]] + diff --git a/server/SpawnScripts/Ruins/LieutenantImperidus.lua b/server/SpawnScripts/Ruins/LieutenantImperidus.lua new file mode 100644 index 000000000..ad6624129 --- /dev/null +++ b/server/SpawnScripts/Ruins/LieutenantImperidus.lua @@ -0,0 +1,351 @@ +--[[ + Script Name : SpawnScripts/TheRuins/LieutenantImperidus.lua + Script Purpose : Lieutenant Imperidus + Script Author : jakejp + Script Date : 2018.12.28 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +local Sixth_SteppingUptheOffensive = 372 +local Seventh_KnockTheFightOutOfEm = 392 +local Eighth_VengeanceForShoreside = 393 +local Ninth_IdentifyingTheLonetuskAlly = 394 +local Tenth_FileAFinalReport = 395 +local Eleventh_AJourneyOutsideTheCity = 396 + +function spawn(NPC) + SetPlayerProximityFunction(NPC, 10, "InRange") + ProvidesQuest(NPC, Seventh_KnockTheFightOutOfEm) + ProvidesQuest(NPC, Eighth_VengeanceForShoreside) + ProvidesQuest(NPC, Ninth_IdentifyingTheLonetuskAlly) + ProvidesQuest(NPC, Tenth_FileAFinalReport) +end + +function respawn(NPC) + spawn(NPC) +end + +function InRange(NPC, Spawn) -- thanks Scatman + local chance = math.random(0, 100) + if chance <= 25 then + local choice = math.random(1, 4) + if choice == 1 then + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/lieutenant_imperidus/fprt_adv04_ruins/revamp/quest_lieutenant_imperidus_callout_b85701b8.mp3", "All citizens of Freeport must band together to erase the orcish menace!", "agree", 1075118541, 263743495, Spawn) + elseif choice == 2 then + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/lieutenant_imperidus/fprt_adv04_ruins/revamp/quest_lieutenant_imperidus_callout_c316998a.mp3", "We must eliminate the source of the orc uprising!", "threaten", 1891042536, 250066925, Spawn) + elseif choice == 3 then + PlayFlavor(NPC, "", "There is no peace to be had with the orcs! Destroy them!", "brandish", 0, 0, Spawn) + elseif choice == 4 then + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/lieutenant_imperidus/fprt_adv04_ruins/revamp/quest_lieutenant_imperidus_callout_6ef6bae6.mp3", "We must take action against these cursed Lonetusks!", "threaten", 3163677184, 3724793633, Spawn) + end + end +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + local choice = math.random(1,3) + + if HasQuest(Spawn, Sixth_SteppingUptheOffensive) then + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/lieutenant_imperidus/fprt_adv04_ruins/revamp/lieutenant_imperidus001.mp3", "", "", 1845738650, 2693702404, Spawn) + AddConversationOption(conversation, "I am ".. GetName(Spawn) ..". I was ordered by Captain Arellius to report to you, lieutenant.", "dlg_3_1") + AddConversationOption(conversation, "I will leave you to your work.") + StartConversation(conversation, NPC, Spawn, "You've entered dangerous territory, traveler. Unless you have been ordered to report for duty, I recommend you go back from whence you came.") + elseif not HasCompletedQuest(Spawn, Seventh_KnockTheFightOutOfEm) then + if HasQuest(Spawn, Seventh_KnockTheFightOutOfEm) then + if GetQuestStep(Spawn, Seventh_KnockTheFightOutOfEm) <= 4 then + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/lieutenant_imperidus/fprt_adv04_ruins/revamp/lieutenant_imperidus011.mp3", "", "", 3479416416, 392853218, Spawn) + AddConversationOption(conversation, "Not yet.") + StartConversation(conversation, NPC, Spawn, "So, our latest volunteer returns. Did you ruin the food and deface the statues of the Lonetusk as I commanded?") + elseif GetQuestStep(Spawn, Seventh_KnockTheFightOutOfEm) == 5 then + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/lieutenant_imperidus/fprt_adv04_ruins/revamp/lieutenant_imperidus011.mp3", "", "", 3479416416, 392853218, Spawn) + AddConversationOption(conversation, "Yes, lieutenant. I'm not sure it has taken much fight out of the orcs, though.", "dlg_6_1") + AddConversationOption(conversation, "Not yet.") + StartConversation(conversation, NPC, Spawn, "So, our latest volunteer returns. Did you ruin the food and deface the statues of the Lonetusk as I commanded?") + end + elseif CanReceiveQuest(Spawn, Seventh_KnockTheFightOutOfEm) then + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/lieutenant_imperidus/fprt_adv04_ruins/revamp/lieutenant_imperidus024.mp3", "", "", 3014480866, 309879594, Spawn) + AddConversationOption(conversation, "Yes, I am ready.", "dlg_3_6") + AddConversationOption(conversation, "No, I need to leave.") + StartConversation(conversation, NPC, Spawn, "You're back. Are you ready to take a stand against the Lonetusk?") + end + elseif not HasCompletedQuest(Spawn, Eighth_VengeanceForShoreside) then + if HasQuest(Spawn, Eighth_VengeanceForShoreside) then + if GetQuestStep(Spawn, Eighth_VengeanceForShoreside) <= 4 then + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/lieutenant_imperidus/fprt_adv04_ruins/revamp/lieutenant_imperidus015.mp3", "", "", 3224148975, 670776839, Spawn) + AddConversationOption(conversation, "Not yet, but I'll try to hurry.") + StartConversation(conversation, NPC, Spawn, "Excellent, you're back! I hope you have done your duty, because I have another crucial assignment for you.") + elseif GetQuestStep(Spawn, Eighth_VengeanceForShoreside) == 5 then + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/lieutenant_imperidus/fprt_adv04_ruins/revamp/lieutenant_imperidus015.mp3", "", "", 3224148975, 670776839, Spawn) + AddConversationOption(conversation, "I dealt a blow to the orc offensive. What is this assignment?", "dlg_30_1") + AddConversationOption(conversation, "Not yet, but I'll try to hurry.") + StartConversation(conversation, NPC, Spawn, "Excellent, you're back! I hope you have done your duty, because I have another crucial assignment for you.") + end + elseif CanReceiveQuest(Spawn, Eighth_VengeanceForShoreside) then + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/lieutenant_imperidus/fprt_adv04_ruins/revamp/lieutenant_imperidus025.mp3", "", "", 219596319, 1538139523, Spawn) + AddConversationOption(conversation, "Yes, though I'm not sure how much phase one accomplished.", "dlg_6_1") + AddConversationOption(conversation, "Not yet.") + StartConversation(conversation, NPC, Spawn, "Are you ready to undertake phase two of my plan?") + end + elseif not HasCompletedQuest(Spawn, Ninth_IdentifyingTheLonetuskAlly) then + if HasQuest(Spawn, Ninth_IdentifyingTheLonetuskAlly) then + if GetQuestStep(Spawn, Ninth_IdentifyingTheLonetuskAlly) == 1 then + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/lieutenant_imperidus/fprt_adv04_ruins/revamp/lieutenant_imperidus029.mp3", "", "", 1821078597, 3404345627, Spawn) + AddConversationOption(conversation, "Not yet.") + StartConversation(conversation, NPC, Spawn, "Have you found out anything of use from the Lonetusk prisoner?") + elseif GetQuestStep(Spawn, Ninth_IdentifyingTheLonetuskAlly) == 2 then + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/lieutenant_imperidus/fprt_adv04_ruins/revamp/lieutenant_imperidus029.mp3", "", "", 1821078597, 3404345627, Spawn) + AddConversationOption(conversation, "It revealed that the Lonetusk were recently visited by a courier from far away who delivered some documents to their general.", "dlg_34_1") + AddConversationOption(conversation, "Not yet.") + StartConversation(conversation, NPC, Spawn, "Have you found out anything of use from the Lonetusk prisoner?") + elseif GetQuestStep(Spawn, Ninth_IdentifyingTheLonetuskAlly) == 3 then + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/lieutenant_imperidus/fprt_adv04_ruins/revamp/lieutenant_imperidus019.mp3", "", "", 2578123453, 1196301399, Spawn) + AddConversationOption(conversation, "Not yet, but I will find it!") + StartConversation(conversation, NPC, Spawn, "Have you recovered the document I sent you to retrieve? Time is of the essence here!") + elseif GetQuestStep(Spawn, Ninth_IdentifyingTheLonetuskAlly) == 4 then + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/lieutenant_imperidus/fprt_adv04_ruins/revamp/lieutenant_imperidus019.mp3", "", "", 2578123453, 1196301399, Spawn) + AddConversationOption(conversation, "I found it, lieutenant. It mentions something about 'Clefts.' Here it is.", "dlg_36_1") + AddConversationOption(conversation, "Not yet, but I will find it!") + StartConversation(conversation, NPC, Spawn, "Have you recovered the document I sent you to retrieve? Time is of the essence here!") + end + elseif CanReceiveQuest(Spawn, Ninth_IdentifyingTheLonetuskAlly) then + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/lieutenant_imperidus/fprt_adv04_ruins/revamp/lieutenant_imperidus026.mp3", "", "", 2035778051, 3857199012, Spawn) + AddConversationOption(conversation, "What is this assignment?", "dlg_30_1") + AddConversationOption(conversation, "Perhaps later.") + StartConversation(conversation, NPC, Spawn, "There you are! Time is of the essence, adventurer. I have a crucial assignment for you!") + end + elseif not HasCompletedQuest(Spawn, Tenth_FileAFinalReport) then + if HasQuest(Spawn, Tenth_FileAFinalReport) then + if GetQuestStep(Spawn, Tenth_FileAFinalReport) == 1 then + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/lieutenant_imperidus/fprt_adv04_ruins/revamp/lieutenant_imperidus028.mp3", "", "", 2127168056, 2423850494, Spawn) + AddConversationOption(conversation, "I will report to her right away.", "dlg_59_1") + StartConversation(conversation, NPC, Spawn, "You must return to Captain Arellius on the docks, citizen. The information you have for her is vital for Freeport's safety!") + end + elseif CanReceiveQuest(Spawn, Tenth_FileAFinalReport) then + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/lieutenant_imperidus/fprt_adv04_ruins/revamp/lieutenant_imperidus027.mp3", "", "", 874269850, 3253928300, Spawn) + AddConversationOption(conversation, "Is it important?", "dlg_37_1") + AddConversationOption(conversation, "Not right now.") + StartConversation(conversation, NPC, Spawn, "I'm glad you're back. You must get word to Captain Arellius that the Rujarkians are supplying the Lonetusk and Brokentusk with weapons and armor.") + end + end +end + +-- QUEST DIALOGUE FOR KNOCK THE FIGHT OUT OF THEM -- + +function dlg_3_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/lieutenant_imperidus/fprt_adv04_ruins/revamp/lieutenant_imperidus002.mp3", "", "", 3229308725, 1541859820, Spawn) + SetStepComplete(Spawn, Sixth_SteppingUptheOffensive, 1) + AddConversationOption(conversation, "I did my best to lend a hand.", "dlg_3_2") + AddConversationOption(conversation, "Handling the orcs should be your job.") + StartConversation(conversation, NPC, Spawn, "Ah, you must be the one Argosian told me about. He says you have done some fine work in controlling the Brokentusk.") +end + +function dlg_3_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/lieutenant_imperidus/fprt_adv04_ruins/revamp/lieutenant_imperidus003.mp3", "", "", 1841575062, 2503344613, Spawn) + AddConversationOption(conversation, "I won't be facing them alone. I will do so with companions.", "dlg_3_3") + AddConversationOption(conversation, "I don't need help!") + StartConversation(conversation, NPC, Spawn, "Well, you can forget all that! The Lonetusk makes the Brokentusk look like weak infants. My Militia officers must work in teams to defeat them, as too many have perished alone. You would do well to follow the same advice.") +end + +function dlg_3_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/lieutenant_imperidus/fprt_adv04_ruins/revamp/lieutenant_imperidus005.mp3", "", "", 1657740714, 1252843220, Spawn) + AddConversationOption(conversation, "That is an excellent suggestion.", "dlg_3_4") + StartConversation(conversation, NPC, Spawn, "That is good to hear. It would be beneficial for your companions to have received orders from Captain Arellius. That way I can assign you all the same duties and you can be rewarded for performing the same tasks.") +end + +function dlg_3_4(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/lieutenant_imperidus/fprt_adv04_ruins/revamp/lieutenant_imperidus006.mp3", "", "", 1028343216, 1318001780, Spawn) + AddConversationOption(conversation, "Thank you for the advice, lieutenant.", "dlg_3_5") + StartConversation(conversation, NPC, Spawn, "In the future, you should remember that your group mates can progress together most efficiently if you undertake the same quests at the same time.") +end + +function dlg_3_5(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/lieutenant_imperidus/fprt_adv04_ruins/revamp/lieutenant_imperidus007.mp3", "", "", 4286763000, 3876809810, Spawn) + AddConversationOption(conversation, "What do you propose we do?", "dlg_3_6") + AddConversationOption(conversation, "I'll leave you to it.") + StartConversation(conversation, NPC, Spawn, "Now, on to the matter at hand. We must put the Lonetusk in their place and determine where their improved weapons and armor are coming from.") +end + +function dlg_3_6(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/lieutenant_imperidus/fprt_adv04_ruins/revamp/lieutenant_imperidus008.mp3", "", "", 1581951336, 1122429744, Spawn) + AddConversationOption(conversation, "I am ready to take action.", "OfferQuest7") + AddConversationOption(conversation, "Orcish decorations don't interest me.") + StartConversation(conversation, NPC, Spawn, "The first thing we must do is demoralize them. We've noticed that the Lonetusk have brought in statues, either to worship or merely to inspire them. Even orcs need their morale boosted, it seems.") +end + +function dlg_3_7(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/lieutenant_imperidus/fprt_adv04_ruins/revamp/lieutenant_imperidus009.mp3", "", "", 3046376303, 2999823619, Spawn) + AddConversationOption(conversation, "Do you really think wrecking statues and ruining food is going to ensure victory?", "dlg_3_8") + AddConversationOption(conversation, "I'll get to it.") + StartConversation(conversation, NPC, Spawn, "Our surest path to victory is to take the fight out of them. Go out there and face the Lonetusk, and deface any statues you see. Seek out their supplies of food and drink and spoil them. Without symbols of victory to inspire them and food in their bellies, their spirits will crumble and they will become easy pickings for us.") +end + +function dlg_3_8(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/lieutenant_imperidus/fprt_adv04_ruins/revamp/lieutenant_imperidus010.mp3", "", "", 4046535847, 3776787727, Spawn) + AddConversationOption(conversation, "Okay, I'll give it a try.", "dlg_3_9") + StartConversation(conversation, NPC, Spawn, "How dare you question an officer of the Freeport Militia! I have engineered a campaign of demoralization which cannot fail.") +end + +-- QUEST DIALOGUE FOR VENGEANCE FOR SHORESIDE -- + +function dlg_6_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + if HasQuest(Spawn, Seventh_KnockTheFightOutOfEm) then + SetStepComplete(Spawn, Seventh_KnockTheFightOutOfEm, 5) + end + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/lieutenant_imperidus/fprt_adv04_ruins/revamp/lieutenant_imperidus012.mp3", "", "", 4000237112, 3044994511, Spawn) + AddConversationOption(conversation, "Yes, I am ready for action.", "OfferQuest8") + AddConversationOption(conversation, "Sorry, but I have little faith in this plan of yours.") + StartConversation(conversation, NPC, Spawn, "These things take time to have their full effect. I'm confident that we've laid the groundwork for the Lonetusk's defeat. Now we must begin the second phase of our initiative. Are you prepared to undertake your next assignment?") +end + +function dlg_6_2(NPC, Spawn) -- Quest Accept Text + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/lieutenant_imperidus/fprt_adv04_ruins/revamp/lieutenant_imperidus013.mp3", "", "", 1435258692, 228785667, Spawn) + AddConversationOption(conversation, "I like the sound of this plan.", "dlg_6_3") + StartConversation(conversation, NPC, Spawn, "The surest way to take the fight out of the orcs is to thin their numbers. We have to show we will not tolerate their presence anymore. I need you to make a serious dent in the Lonetusk population. The streets of Shoreside must swell with the blood of these brutes.") +end + +function dlg_6_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/lieutenant_imperidus/fprt_adv04_ruins/revamp/lieutenant_imperidus014.mp3", "", "", 1342102807, 1470622603, Spawn) + AddConversationOption(conversation, "I'll return when I've taught the orcs a lesson.", "dlg_6_4") + StartConversation(conversation, NPC, Spawn, "I'm confident this will strike a real blow to the Lonetusk offensive. While you carry out your orders, my interrogators are going to see if this orc we captured knows anything of use.") +end + +-- DIALOGUE FOR IDENTIFYING THE LONETUSK ALLY -- + +function dlg_30_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + if HasQuest(Spawn, Eighth_VengeanceForShoreside) then + SetStepComplete(Spawn, Eighth_VengeanceForShoreside, 5) + end + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/lieutenant_imperidus/fprt_adv04_ruins/revamp/lieutenant_imperidus016.mp3", "", "", 424275819, 2098486813, Spawn) + AddConversationOption(conversation, "Have you been able to learn anything from it?", "dlg_30_2") + AddConversationOption(conversation, "I have had enough of dealing with orcs.") + StartConversation(conversation, NPC, Spawn, "Some days ago my soldiers took a Lonetusk prisoner. At first it was unresponsive to our attempts to obtain information and appeared to only speak orcish, but during our most recent attempts to persuade it to cooperate, it muttered something in our own Common tongue.") +end + +function dlg_30_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/lieutenant_imperidus/fprt_adv04_ruins/revamp/lieutenant_imperidus017.mp3", "", "", 3515731336, 836251814, Spawn) + AddConversationOption(conversation, "I will get the orc to talk.", "OfferQuest9") + AddConversationOption(conversation, "Perhaps another time.") + StartConversation(conversation, NPC, Spawn, "Not yet, though my guards may not be taking the right approach. I'd like you to take a crack at this prisoner. It's being held just over there, outside one of our supply depots. We don't have a proper stockade, as it is not our custom to take prisoners.") +end + +function dlg_30_3(NPC, Spawn) -- Quest Accept Text + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/lieutenant_imperidus/fprt_adv04_ruins/revamp/lieutenant_imperidus018.mp3", "", "", 1717970804, 3719629105, Spawn) + AddConversationOption(conversation, "I'll return when I have the information you need, lieutenant.", "dlg_30_4") + StartConversation(conversation, NPC, Spawn, "I knew we could rely on you! Take any measures necessary to get the beast to talk. ANY measures... got it?") +end + +function dlg_34_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/lieutenant_imperidus/fprt_adv04_ruins/revamp/lieutenant_imperidus030.mp3", "", "", 795916419, 2847642656, Spawn) + AddConversationOption(conversation, "Apparently the orcs have locked them away in some kind of underground bunker.", "dlg_34_2") + AddConversationOption(conversation, "I don't have time to discuss this further.") + StartConversation(conversation, NPC, Spawn, "Excellent work! Did it give you the location of these documents?") +end + +function dlg_34_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + SetStepComplete(Spawn, Ninth_IdentifyingTheLonetuskAlly, 2) + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/lieutenant_imperidus/fprt_adv04_ruins/revamp/lieutenant_imperidus031.mp3", "", "", 56234529, 3138552129, Spawn) + AddConversationOption(conversation, "I will undertake this mission for my Overlord and my city.", "dlg_34_3") + StartConversation(conversation, NPC, Spawn, "Then your highest priority is to find these documents and bring them to me. Search the entire Lonetusk area for that underground bunker. We must have this information!") +end + +-- QUEST TEXT FOR FILING A FINAL REPORT + +function dlg_36_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + if HasQuest(Spawn, Ninth_IdentifyingTheLonetuskAlly) then + RemoveItem(Spawn, 3803) + SetStepComplete(Spawn, Ninth_IdentifyingTheLonetuskAlly, 4) + end + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/lieutenant_imperidus/fprt_adv04_ruins/revamp/lieutenant_imperidus020.mp3", "", "", 105191340, 2188619231, Spawn) + AddConversationOption(conversation, "Now that you mention it, I thought I spotted a Rujarkian advisor of some kind in the area.", "dlg_37_1") + AddConversationOption(conversation, "Not really my concern.") + StartConversation(conversation, NPC, Spawn, "Let me see this. Hmm... The Clefts. This must refer to the Clefts of Rujark, an orc stronghold in the Desert of Ro. This means the Lonetusk are being supplied by the Rujarkians!") +end + +function dlg_37_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/lieutenant_imperidus/fprt_adv04_ruins/revamp/lieutenant_imperidus021.mp3", "", "", 3288112038, 3542005218, Spawn) + AddConversationOption(conversation, "I will report back to her.", "OfferQuest10") + AddConversationOption(conversation, "I'm tired of running errands.") + StartConversation(conversation, NPC, Spawn, "It is dark news indeed! If the Rujarkians were to do the same for other tribes around Freeport, it could mean the rise of a new orc offensive. Captain Arellius must hear of this news right away!") +end + +function dlg_37_2(NPC, Spawn) -- Quest Accept Text + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/lieutenant_imperidus/fprt_adv04_ruins/revamp/lieutenant_imperidus022.mp3", "", "", 3956036992, 4003496180, Spawn) + AddConversationOption(conversation, "Thank you, lieutenant. You have earned mine as well.", "dlg_37_3") + StartConversation(conversation, NPC, Spawn, "Report back to the captain. She will take word of this discovery back to our superiors in the Militia. This is extremely valuable information, my friend. You just might have given Freeport the edge it needs to ensure its safety. You have earned my respect.") +end + +function OfferQuest7(NPC, Spawn) + OfferQuest(NPC, Spawn, Seventh_KnockTheFightOutOfEm) +end + +function OfferQuest8(NPC, Spawn) + OfferQuest(NPC, Spawn, Eighth_VengeanceForShoreside) +end + +function OfferQuest9(NPC, Spawn) + OfferQuest(NPC, Spawn, Ninth_IdentifyingTheLonetuskAlly) +end + +function OfferQuest10(NPC, Spawn) + OfferQuest(NPC, Spawn, Tenth_FileAFinalReport) +end +--[[ raw_conversations + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/lieutenant_imperidus/fprt_adv04_ruins/revamp/quest_lieutenant_imperidus_callout_6ef6bae6.mp3", "We must take action against these cursed Lonetusks!", "threaten", 3163677184, 3724793633, Spawn) + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/lieutenant_imperidus/fprt_adv04_ruins/revamp/quest_lieutenant_imperidus_callout_c316998a.mp3", "We must eliminate the source of the orc uprising!", "threaten", 1891042536, 250066925, Spawn) + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/lieutenant_imperidus/fprt_adv04_ruins/revamp/quest_lieutenant_imperidus_callout_b85701b8.mp3", "All citizens of Freeport must band together to erase the orcish menace!", "agree", 1075118541, 263743495, Spawn) +--]] + diff --git a/server/SpawnScripts/Ruins/LonetuskVoiceOvers.lua b/server/SpawnScripts/Ruins/LonetuskVoiceOvers.lua new file mode 100644 index 000000000..a8c882b3e --- /dev/null +++ b/server/SpawnScripts/Ruins/LonetuskVoiceOvers.lua @@ -0,0 +1,40 @@ +--[[ + Script Name : SpawnScripts/Ruins/LonetuskVoiceOvers.lua + Script Purpose : Handles voice overs for the Lonetusk. + Script Author : Scatman + Script Date : 2009.08.20 + Script Notes : +--]] + +function generic_aggro(NPC, Spawn) + local choice = math.random(1, 3) + if choice == 1 then + PlayFlavor(NPC, "voiceover/english/optional3/orc_lonetusk/ft/orc/orc_lonetusk_2_aggro_2d2ccd12.mp3", "Incoming! Summon the warriors.", "", 3730616476, 4212115469) + elseif choice == 2 then + PlayFlavor(NPC, "voiceover/english/optional3/orc_lonetusk/ft/orc/orc_lonetusk_2_aggro_478609c4.mp3", "This must be my lucky day.", "", 1552928496, 830976152) + elseif choice == 3 then + PlayFlavor(NPC, "voiceover/english/optional3/orc_lonetusk/ft/orc/orc_lonetusk_2_maofighter_42d206ef.mp3", "Kill the ugly one! He has the most armor!", "", 1385896447, 1033709680) + end +end + +function generic_healthchanged(NPC, Spawn) + local choice = math.random(1, 2) + if choice == 1 then + PlayFlavor(NPC, "voiceover/english/optional3/orc_lonetusk/ft/orc/orc_lonetusk_2_battle_27011747.mp3", "Who cares if they're stronger, we're orcs!", "", 769549584, 170271605) + elseif choice == 2 then + PlayFlavor(NPC, "voiceover/english/optional3/orc_lonetusk/ft/orc/orc_lonetusk_2_battle_c234f7ec.mp3", "We don't need reinforcements. Attack!", "", 3931748607, 200204217) + end +end + +function generic_killed(NPC, Spawn) + local choice = math.random(1, 2) + if choice == 1 then + PlayFlavor(NPC, "voiceover/english/optional3/orc_lonetusk/ft/orc/orc_lonetusk_2_victory_4a834d11.mp3", "I killed one?", "", 494264984, 880425961) + elseif choice == 2 then + PlayFlavor(NPC, "voiceover/english/optional3/orc_lonetusk/ft/orc/orc_lonetusk_2_victory_5ec9f9e2.mp3", "Keep fighting while I get these boots!", "", 1910539619, 2233613105) + end +end + +function generic_death(NPC, Spawn) + PlayFlavor(NPC, "voiceover/english/optional3/orc_lonetusk/ft/orc/orc_lonetusk_2_death_937a01b8.mp3", "I can't see! Where are they?", "", 1920179873, 1406566187) +end diff --git a/server/SpawnScripts/Ruins/MardypPrunt.lua b/server/SpawnScripts/Ruins/MardypPrunt.lua new file mode 100644 index 000000000..fc0d40e02 --- /dev/null +++ b/server/SpawnScripts/Ruins/MardypPrunt.lua @@ -0,0 +1,222 @@ +--[[ + Script Name : SpawnScripts/Ruins/MardypPrunt.lua + Script Purpose : Mardyp Prunt + Script Author : Scatman + Script Date : 2009.07.28 + Script Notes : +--]] + +local QUEST_1 = 265 + +function spawn(NPC) + ProvidesQuest(NPC, QUEST_1) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + RandomVoiceOver(NPC, Spawn) + + if HasCompletedQuest(Spawn, QUEST_1) then + PlayFlavor(NPC, "", "Making fang dust harder than Mardyp thought!", "", 1689589577, 4560189, Spawn) + elseif HasQuest(Spawn, QUEST_1) then + OnQuest1(NPC, Spawn, conversation) + else + RespectEnemies(NPC, Spawn, conversation) + end +end + +function RandomVoiceOver(NPC, Spawn) + local choice = math.random(1, 3) + if choice == 1 then + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_1_1056.mp3", "", "", 0, 0, Spawn) + elseif choice == 2 then + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_2_1056.mp3", "", "", 0, 0, Spawn) + elseif choice == 3 then + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_3_1056.mp3", "", "", 0, 0, Spawn) + end +end + +--------------------------------------------------------------------------------------- +-- QUEST 1 +--------------------------------------------------------------------------------------- + +function RespectEnemies(NPC, Spawn, conversation) + AddConversationOption(conversation, "What?", "dlg_4_1") + AddConversationOption(conversation, "Whatever.") + StartConversation(conversation, NPC, Spawn, "Respect enemies!") +end + +function dlg_4_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "Oh.", "dlg_4_2") + StartConversation(conversation, NPC, Spawn, "If enemies strong, respect them!") +end + +function dlg_4_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "How can I help?", "dlg_4_3") + StartConversation(conversation, NPC, Spawn, "Orc strong! Not THAT strong, but strong enough for respect! Mardyp talk to friend in Big Bend. Friend tell Mardyp that something in orc tusks make orcs more fierce, more strong! Mardyp killing orcs fine, but crushing fangs to eat takes time. You help Mardyp?") +end + +function dlg_4_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "Ok, I'll collect some fangs.", "dlg_4_4") + StartConversation(conversation, NPC, Spawn, "Get more fangs while Mardyp crush ones I already have. All orcs have fangs. Mardyp need 20!") +end + +function dlg_4_4(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "I'll go get your fangs.", "OfferQuest1") + StartConversation(conversation, NPC, Spawn, "Good! Mardyp go back to crushing.") +end + +function OfferQuest1(NPC, Spawn) + FaceTarget(NPC, Spawn) + OfferQuest(NPC, Spawn, QUEST_1) +end + +function OnQuest1(NPC, Spawn, conversation) + if GetQuestStep(Spawn, QUEST_1) == 2 then + AddConversationOption(conversation, "Here you go.", "dlg_6_1") + else + AddConversationOption(conversation, "Not et.") + end + StartConversation(conversation, NPC, Spawn, "Orc fangs?") +end + +function dlg_6_1(NPC, Spawn) + SetStepComplete(Spawn, QUEST_1, 2) + + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "Well, good luck with that.") + StartConversation(conversation, NPC, Spawn, "Good! Mardyp very happy! Soon Mardyp make these into soup or drink or something! Unless that too much work, then Mardyp just eat it.") +end + + +-- JA: new raw data collected + +--[[ +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_3_1056.mp3", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "What?", "dlg_4_1") + AddConversationOption(conversation, "Whatever.") + StartConversation(conversation, NPC, Spawn, "Respect enemies!") + if convo==5 then + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_3_1056.mp3", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "What?", "dlg_5_1") + AddConversationOption(conversation, "Whatever.") + StartConversation(conversation, NPC, Spawn, "Respect enemies!") + end + + if convo==6 then + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_2_1056.mp3", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Here you go.", "dlg_6_1") + StartConversation(conversation, NPC, Spawn, "Orc fangs?") + end + +end + +function dlg_4_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Oh.", "dlg_4_2") + StartConversation(conversation, NPC, Spawn, "If enemies strong, respect them!") +end + +function dlg_4_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "How can I help?", "dlg_4_3") + StartConversation(conversation, NPC, Spawn, "Orc strong! Not THAT strong, but strong enough for respect! Mardyp talk to friend in Big Bend. Friend tell Mardyp that something in orc tusks make orcs more fierce, more strong! Mardyp killing orcs fine, but crushing fangs to eat takes time. You help Mardyp?") +end + +function dlg_4_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Ok, I'll collect some fangs.", "dlg_4_4") + StartConversation(conversation, NPC, Spawn, "Get more fangs while Mardyp crush ones I already have. All orcs have fangs. Mardyp need 20!") +end + +function dlg_4_4(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "I'll go get your fangs.", "dlg_4_5") + StartConversation(conversation, NPC, Spawn, "Good! Mardyp go back to crushing.") +end + +function dlg_5_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Oh.", "dlg_5_2") + StartConversation(conversation, NPC, Spawn, "If enemies strong, respect them!") +end + +function dlg_5_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "How can I help?", "dlg_5_3") + StartConversation(conversation, NPC, Spawn, "Orc strong! Not THAT strong, but strong enough for respect! Mardyp talk to friend in Big Bend. Friend tell Mardyp that something in orc tusks make orcs more fierce, more strong! Mardyp killing orcs fine, but crushing fangs to eat takes time. You help Mardyp?") +end + +function dlg_5_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Ok, I'll collect some fangs.", "dlg_5_4") + StartConversation(conversation, NPC, Spawn, "Get more fangs while Mardyp crush ones I already have. All orcs have fangs. Mardyp need 20!") +end + +function dlg_5_4(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "I'll go get your fangs.", "dlg_5_5") + StartConversation(conversation, NPC, Spawn, "Good! Mardyp go back to crushing.") +end + +function dlg_6_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Well, good luck with that.", "dlg_6_2") + StartConversation(conversation, NPC, Spawn, "Good! Mardyp very happy! Soon Mardyp make these into soup or drink or something! Unless that too much work, then Mardyp just eat it.") +end +--]] + +--[[ raw_conversations + PlayFlavor(NPC, "", "Making fang dust harder than Mardyp thought!", "", 1689589577, 4560189, Spawn) +--]] + diff --git a/server/SpawnScripts/Ruins/Pitrova.lua b/server/SpawnScripts/Ruins/Pitrova.lua new file mode 100644 index 000000000..17adb7846 --- /dev/null +++ b/server/SpawnScripts/Ruins/Pitrova.lua @@ -0,0 +1,40 @@ +--[[ + Script Name : SpawnScripts/Ruins/Pitrova.lua + Script Purpose : Pitrova + Script Author : John Adams + Script Date : 2009.08.10 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +function spawn(NPC) + SetPlayerProximityFunction(NPC, 10, "InRange", "LeaveRange") +end + +function respawn(NPC) + spawn(NPC) +end + +function InRange(NPC, Spawn) + + local choice = math.random(1,3) + + if choice == 1 then + PlayFlavor(NPC, "voiceover/english/ratonga_eco_evil_1/ft/service/merchant/ratonga_merchant_service_evil_1_aoi_gf_53388b91.mp3", "Only traitors to the Overlord would pass up a bargain like this. You're not a traitor are you?", "scold", 1269771027, 1321830597, Spawn) + elseif choice == 2 then + PlayFlavor(NPC, "voiceover/english/ratonga_eco_evil_1/ft/service/merchant/ratonga_merchant_service_evil_1_hail_gf_aff3fc07.mp3", "Are you going to buy anything today or am I just wasting my time? This isn't a museum display you know!", "glare", 3896024368, 3267129756, Spawn) + elseif choice == 3 then + PlayFlavor(NPC, "voiceover/english/ratonga_eco_evil_1/ft/service/merchant/ratonga_merchant_service_evil_1_hail_gf_f715099e.mp3", "Hello there, kind adventurer. My merchandise carries the seal of the Overlord himself! Go ahead, take a look!", "salute_freeport", 3557499503, 3758276116, Spawn) + else + end + +end + +function LeaveRange(NPC, Spawn) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + + InRange(NPC, Spawn) +end + diff --git a/server/SpawnScripts/Ruins/Talia.lua b/server/SpawnScripts/Ruins/Talia.lua new file mode 100644 index 000000000..f1825d451 --- /dev/null +++ b/server/SpawnScripts/Ruins/Talia.lua @@ -0,0 +1,23 @@ +--[[ + Script Name : SpawnScripts/Ruins/Talia.lua + Script Purpose : Talia + Script Author : Scatman + Script Date : 2009.08.18 + Script Notes : +--]] + +function spawn(NPC) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/merchant_talia_of_the_coalition/fprt_adv04_ruins/merchanttalia000.mp3", "", "", 1965549585, 3553254734, Spawn) + AddConversationOption(conversation, "Give me a moment.") + StartConversation(conversation, NPC, Spawn, "What do you want to purchase? Don't be shy. My fine wares are worth spending your coin.") +end \ No newline at end of file diff --git a/server/SpawnScripts/Ruins/VisageoftheOverlord.lua b/server/SpawnScripts/Ruins/VisageoftheOverlord.lua new file mode 100644 index 000000000..c986a8d49 --- /dev/null +++ b/server/SpawnScripts/Ruins/VisageoftheOverlord.lua @@ -0,0 +1,69 @@ +--[[ + Script Name : SpawnScripts/Ruins/VisageoftheOverlord.lua + Script Purpose : Visage of the Overlord + Script Author : Scatman + Script Date : 2009.08.02 + Script Notes : +--]] + +local choice = 0 + +function spawn(NPC) + AddTime(NPC, 300000, "Talk1") +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + + local choice = math.random(1,14) +--[[ + if choice == 1 then + PlayFlavor(NPC, "voiceover/english/overlord_lucan_d_lere/fprt_west/lucan_isle_speech_5.mp3", "Prove yourself, and I shall grant you shelter at the edge of my city, and the chance to earn your place as a proud citizen of Freeport.", "", 4115014723, 2723692261, Spawn) + elseif choice == 2 then + PlayFlavor(NPC, "voiceover/english/overlord_lucan_d_lere/fprt_west/lucan_isle_speech_6.mp3", "Go now, and begin the trials that I have set for you.", "", 1244918730, 586509135, Spawn) + elseif choice == 3 then + PlayFlavor(NPC, "voiceover/english/overlord_lucan_d_lere/fprt_west/lucan_isle_speech_7.mp3", "Succeed, and you will share the fortunes of Freeport as we reshape this broken world.", "", 2666628260, 1943756642, Spawn) + elseif choice == 4 then + PlayFlavor(NPC, "voiceover/english/overlord_lucan_d_lere/fprt_west/lucan_isle_speech_8.mp3", "Together we will restore the glory of ages past, crush the Sons of Zek, and sweep aside the decadent nation of Qeynos!", "", 140890899, 2835297833, Spawn) + elseif choice == 5 then + PlayFlavor(NPC, "voiceover/english/overlord_lucan_d_lere/fprt_west/lucan_isle_speech_9.mp3", "With my guidance, you shall gain power and glory as you have never imagined, but should you turn against me, you will find that my wrath is a terrible thing ... Now go!", "", 3855854568, 2247480313, Spawn) + elseif choice == 6 then + PlayFlavor(NPC, "voiceover/english/overlord_lucan_d_lere/fprt_west/lucan_speechstrength001_64_64.mp3", "Citizens of Freeport! You have come from distant lands, driven by cataclysm and conflict into the welcoming shelter of my walls. You have proven your strength and your courage, else you would have been left beyond to wither and die. There is no place for mercy in these shattered lands; this is a time of blood and battle, and I only have need of the strong.", "", 2120743827, 2562003808, Spawn) + elseif choice == 7 then + PlayFlavor(NPC, "voiceover/english/overlord_lucan_d_lere/fprt_west/lucan_speechstrength002_64_64.mp3", "But there are those among you who know little of my past and my glorious deed. I am Lucan D'Lere, and it is my will and steel that brought Freeport safely through the Age of Cataclysms. Even before the land was broken, I was renowned as a warrior, and I was chosen to rule this glorious city.", "", 1988024407, 1968035950, Spawn) + elseif choice == 8 then + PlayFlavor(NPC, "voiceover/english/overlord_lucan_d_lere/fprt_west/lucan_speechstrength003_64_64.mp3", "No invading army could stand against my sword. Sons of Zek, dragons, and even the gods themselves: none could stand against Lucan. When the moon shattered and fire rained down from the sky, it was my strong hand that held this city together, that forged a nation from rubble and ruin.", "", 3916518155, 2486841924, Spawn) + elseif choice == 9 then + PlayFlavor(NPC, "voiceover/english/overlord_lucan_d_lere/fprt_west/lucan_speechstrength004_64_64.mp3", "I am more than a man. I am a force of destiny, far greater than any god. I am the Overlord of this age, and I shall reshape Norrath in my image. There is much to be done. The lost lands must be found and claimed in my name. We must seize the powers of the past. And we must show the fools who cling to the banner of Qeynos the error of their ways.", "", 1278215101, 3048380263, Spawn) + elseif choice == 10 then + PlayFlavor(NPC, "voiceover/english/overlord_lucan_d_lere/fprt_west/lucan_speechstrength005_64_64.mp3", "This is the defining moment of your existence: the chance to claim your place in the kingdom that is to come. Those who serve me well shall gain glory and power beyond any mortal dream; those who stand in my path shall be swept away and destroyed. Choose wisely. ", "", 3179016276, 1369464691, Spawn) + elseif choice == 11 then + PlayFlavor(NPC, "voiceover/english/overlord_lucan_d_lere/fprt_west/200_statue_overlord_lucan_dlere_speech_glory_freeport_4_658d5802.mp3", "And in the centuries that followed, it was my strength and my will that raised this city from the ashes and guided its people to the present. Now the Age of Destiny is upon us. The old world is shattered and will never return. As I restored Freeport, I will reshape Norrath.", "", 2738035237, 1024471311, Spawn) + elseif choice == 12 then + PlayFlavor(NPC, "voiceover/english/overlord_lucan_d_lere/fprt_west/200_statue_overlord_lucan_dlere_speech_glory_freeport_5_cbeaa62e.mp3", "But for all my power, I cannot act alone. I have chosen you, citizens of Freeport, because of your strength, your cunning, and your courage. There is no room for mercy in this broken land: only the strong will survive to seize the destiny of D'Lere.", "", 2788065318, 273884141, Spawn) + elseif choice == 13 then + PlayFlavor(NPC, "voiceover/english/overlord_lucan_d_lere/fprt_west/200_statue_overlord_lucan_dlere_speech_glory_freeport_6_e760558d.mp3", "In the days that lie ahead I will call upon you to prove your worth and your commitment to my cause. Those who follow me faithfully shall gain glory and power in the kingdom to come, and gold aplenty in world of the moment.", "", 1243249819, 2464345242, Spawn) + elseif choice == 14 then + PlayFlavor(NPC, "voiceover/english/overlord_lucan_d_lere/fprt_west/200_statue_overlord_lucan_dlere_speech_glory_freeport_7_3b8ccc31.mp3", "But should you ever betray Freeport, or dare to rise against Lucan, you shall see why even the gods of old feared my wrath. Go, citizens of Freeport, and prepare for the work that lies ahead. The Age of Destiny has begun. ", "", 1852419614, 277309010, Spawn) + else + end +--]] +end + +function Talk1(NPC) + choice = math.random(1, 3) + if choice == 1 then + Say(NPC, "Teach my enemies of the price of challenging Freeport, and you shall have gold and glory beyond your imagining.") + AddTimer(NPC, 300000, "Talk1") + elseif choice == 2 then + Say(NPC, "I am Lucan D'Lere, and I am the last hope of this shattered world.") + AddTimer(NPC, 300000, "Talk1") + elseif choice == 3 then + Say(NPC, "The strong will always survive and prosper.") + AddTimer(NPC, 300000, "Talk1") + end +end \ No newline at end of file diff --git a/server/SpawnScripts/Ruins/Widget_orc_document_box.lua b/server/SpawnScripts/Ruins/Widget_orc_document_box.lua new file mode 100644 index 000000000..b71c3433c --- /dev/null +++ b/server/SpawnScripts/Ruins/Widget_orc_document_box.lua @@ -0,0 +1,18 @@ +--[[ + Script Name : SpawnScripts/Ruins/Widget_orc_document_box.lua + Script Purpose : Widget_orc_document_box + Script Author : Scatman + Script Date : 2009.08.21 + Script Notes : +--]] + +function spawn(NPC) + SetRequiredQuest(NPC, 288, 3) +end + +function hailed(NPC, Spawn) +end + +function respawn(NPC) + spawn(NPC) +end \ No newline at end of file diff --git a/server/SpawnScripts/Ruins/Widgetorcdocumentbox.lua b/server/SpawnScripts/Ruins/Widgetorcdocumentbox.lua new file mode 100644 index 000000000..ce4d4d735 --- /dev/null +++ b/server/SpawnScripts/Ruins/Widgetorcdocumentbox.lua @@ -0,0 +1,33 @@ +--[[ + Script Name : SpawnScripts/Ruins/Widgetorcdocumentbox.lua + Script Author : jakejp + Script Date : 2018.12.29 07:12:39 + Script Purpose : + : +--]] + +local IdentifyingtheLonetuskAlly = 394 + +function spawn(NPC) + SetRequiredQuest(NPC, IdentifyingtheLonetuskAlly, 3) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) +end + +function respawn(NPC) + +end + +function casted_on(Target, Caster, SpellName) + if SpellName == "Break open the strongbox" then + if GetQuestStep(Caster, IdentifyingtheLonetuskAlly, 3) then + SetStepComplete(Caster, IdentifyingtheLonetuskAlly, 3) + SendMessage(Caster, "You search the strongbox and find a parchment with orcish writing. You place it in your inventory.") + SendPopUpMessage(Caster, "You search the strongbox and find a parchment with orcish writing. You place it in your inventory.", 255, 255, 255) + SummonItem(Caster, 3803, 1) + + end + end +end \ No newline at end of file diff --git a/server/SpawnScripts/Ruins/aBrokentuskchampion.lua b/server/SpawnScripts/Ruins/aBrokentuskchampion.lua new file mode 100644 index 000000000..195a79c45 --- /dev/null +++ b/server/SpawnScripts/Ruins/aBrokentuskchampion.lua @@ -0,0 +1,52 @@ +--[[ + Script Name : SpawnScripts/Ruins/aBrokentuskchampion.lua + Script Purpose : a Brokentusk champion + Script Author : Scatman + Script Date : 2009.08.21 + Script Notes : +--]] + +dofile("SpawnScripts/Generic/BrokentuskVoiceOvers.lua") +local spoke = false + +function spawn(NPC) + spoke = false +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) +end + +function aggro(NPC, Spawn) + local chance = math.random(0, 100) + if chance <= 25 then + generic_aggro(NPC, Spawn) + end +end + +function healthchanged(NPC, Spawn) + local chance = math.random(0, 100) + if chance <= 25 then + local health_percent = GetHP(NPC) / GetMaxHP(NPC) + if health_percent < 0.50 and spoke == false then + spoke = true + generic_healthchanged(NPC, Spawn) + end + end +end + +function killed(NPC, Spawn) + generic_killed(NPC, Spawn) +end + +function death(NPC, Spawn) + spoke = false + local chance = math.random(0, 100) + if chance <= 25 then + generic_death(NPC, Spawn) + end +end \ No newline at end of file diff --git a/server/SpawnScripts/Ruins/aBrokentuskcrusher.lua b/server/SpawnScripts/Ruins/aBrokentuskcrusher.lua new file mode 100644 index 000000000..00f0cf0a3 --- /dev/null +++ b/server/SpawnScripts/Ruins/aBrokentuskcrusher.lua @@ -0,0 +1,52 @@ +--[[ + Script Name : SpawnScripts/Ruins/aBrokentuskcrusher.lua + Script Purpose : a Brokentusk crusher + Script Author : Scatman + Script Date : 2009.08.21 + Script Notes : +--]] + +dofile("SpawnScripts/Generic/BrokentuskVoiceOvers.lua") +local spoke = false + +function spawn(NPC) + spoke = false +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) +end + +function aggro(NPC, Spawn) + local chance = math.random(0, 100) + if chance <= 25 then + generic_aggro(NPC, Spawn) + end +end + +function healthchanged(NPC, Spawn) + local chance = math.random(0, 100) + if chance <= 25 then + local health_percent = GetHP(NPC) / GetMaxHP(NPC) + if health_percent < 0.50 and spoke == false then + spoke = true + generic_healthchanged(NPC, Spawn) + end + end +end + +function killed(NPC, Spawn) + generic_killed(NPC, Spawn) +end + +function death(NPC, Spawn) + spoke = false + local chance = math.random(0, 100) + if chance <= 25 then + generic_death(NPC, Spawn) + end +end \ No newline at end of file diff --git a/server/SpawnScripts/Ruins/aBrokentuskdefender.lua b/server/SpawnScripts/Ruins/aBrokentuskdefender.lua new file mode 100644 index 000000000..92ae325eb --- /dev/null +++ b/server/SpawnScripts/Ruins/aBrokentuskdefender.lua @@ -0,0 +1,52 @@ +--[[ + Script Name : SpawnScripts/Ruins/aBrokentuskdefender.lua + Script Purpose : a Brokentusk defender + Script Author : Scatman + Script Date : 2009.08.21 + Script Notes : +--]] + +dofile("SpawnScripts/Generic/BrokentuskVoiceOvers.lua") +local spoke = false + +function spawn(NPC) + spoke = false +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) +end + +function aggro(NPC, Spawn) + local chance = math.random(0, 100) + if chance <= 25 then + generic_aggro(NPC, Spawn) + end +end + +function healthchanged(NPC, Spawn) + local chance = math.random(0, 100) + if chance <= 25 then + local health_percent = GetHP(NPC) / GetMaxHP(NPC) + if health_percent < 0.50 and spoke == false then + spoke = true + generic_healthchanged(NPC, Spawn) + end + end +end + +function killed(NPC, Spawn) + generic_killed(NPC, Spawn) +end + +function death(NPC, Spawn) + spoke = false + local chance = math.random(0, 100) + if chance <= 25 then + generic_death(NPC, Spawn) + end +end \ No newline at end of file diff --git a/server/SpawnScripts/Ruins/aBrokentuskguard.lua b/server/SpawnScripts/Ruins/aBrokentuskguard.lua new file mode 100644 index 000000000..34df13d63 --- /dev/null +++ b/server/SpawnScripts/Ruins/aBrokentuskguard.lua @@ -0,0 +1,164 @@ +--[[ + Script Name : SpawnScripts/Ruins/aBrokentuskguard.lua + Script Purpose : a Brokentusk guard + Script Author : Scatman (updated by jakejp 2018.06.10) + Script Date : 2009.08.21 + Script Notes : +--]] + +dofile("SpawnScripts/Generic/BrokentuskVoiceOvers.lua") +local spoke = false + +function spawn(NPC) + SetPlayerProximityFunction(NPC, 10, "InRange") + spoke = false + local sli = GetSpawnLocationID(NPC) + + -- Wanderer from where the 'an Overseer' spawns. + if sli == 408961 or sli == 408975 then + local choice = math.random(1,2) + if choice == 1 then + AddTimer(NPC, math.random(0, 10000), "StartPath1") + elseif choice == 2 then + AddTimer(NPC, math.random(0, 10000), "StartPath1Reverse") + end + end + + -- Spawns in front of guard by well + if sli == 1585507 or sli == 1585508 or sli == 1585509 then + EmoteLoop(NPC) + end +end + +function InRange(NPC, Spawn) + local scared = "cringe" + if GetLevel(Spawn) > 9 then + PlayFlavor(NPC, "", "", scared, 0, 0) + end +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) +end + +function EmoteLoop(NPC) -- Thanks theFoof + local choice = math.random(1,4) + local emote + if choice == 1 then + emote = "flex" + elseif choice == 2 then + emote = "stretch" + elseif choice == 3 then + emote = "point" + elseif choice == 4 then + emote = "peer" + end + PlayFlavor(NPC, "", "", emote, 0, 0) + AddTimer(NPC, math.random(3000,10000), "EmoteLoop") +end + +function aggro(NPC, Spawn) + local chance = math.random(0, 100) + if chance <= 25 then + generic_aggro(NPC, Spawn) + end +end + +function healthchanged(NPC, Spawn) + local chance = math.random(0, 100) + if chance <= 25 then + local health_percent = GetHP(NPC) / GetMaxHP(NPC) + if health_percent < 0.50 and spoke == false then + spoke = true + generic_healthchanged(NPC, Spawn) + end + end +end + +function killed(NPC, Spawn) + generic_killed(NPC, Spawn) +end + +function death(NPC, Spawn) + spoke = false + local chance = math.random(0, 100) + if chance <= 25 then + generic_death(NPC, Spawn) + end +end + +function StartPath1(NPC) + MovementLoopAddLocation(NPC, -140.28, -2.57, 22.58, 2, 0) + MovementLoopAddLocation(NPC, -137.92, -2.56, 20.52, 2, 0) + MovementLoopAddLocation(NPC, -129.41, -2.57, 19.94, 2, 0) + MovementLoopAddLocation(NPC, -126.23, -2.56, 18.19, 2, 0) + MovementLoopAddLocation(NPC, -122.83, -2.55, 14.43, 2, 0) + MovementLoopAddLocation(NPC, -114.21, -2.61, 17.31, 2, 0) + MovementLoopAddLocation(NPC, -109.99, -2.64, 17.76, 2, 0) + MovementLoopAddLocation(NPC, -103.32, -2.67, 19.41, 2, 0) + MovementLoopAddLocation(NPC, -99.51, -2.68, 17.5, 2, 0) + MovementLoopAddLocation(NPC, -94.95, -2.72, 17.96, 2, 0) + MovementLoopAddLocation(NPC, -87.91, -2.7, 15.73, 2, 0) + MovementLoopAddLocation(NPC, -80.37, -2.73, 16.74, 2, 0) + MovementLoopAddLocation(NPC, -73.37, -2.7, 24.81, 2, 0) + MovementLoopAddLocation(NPC, -61.57, -2.68, 26.83, 2, 0) + MovementLoopAddLocation(NPC, -50.97, -2.78, 26.87, 2, 0) + MovementLoopAddLocation(NPC, -46.63, -2.62, 29.66, 2, 0) + MovementLoopAddLocation(NPC, -44.9, -2.46, 34.15, 2, 0) + MovementLoopAddLocation(NPC, -50.13, -2.46, 37.13, 2, 0) + MovementLoopAddLocation(NPC, -54.52, -2.63, 34.25, 2, 0) + MovementLoopAddLocation(NPC, -61.37, -2.76, 33.77, 2, 0) + MovementLoopAddLocation(NPC, -65.66, -2.71, 32.21, 2, 0) + MovementLoopAddLocation(NPC, -74.41, -2.67, 31.71, 2, 0) + MovementLoopAddLocation(NPC, -76.57, -2.76, 33.66, 2, 0) + MovementLoopAddLocation(NPC, -96.97, -2.72, 31.94, 2, 0) + MovementLoopAddLocation(NPC, -101.32, -2.71, 26.16, 2, 0) + MovementLoopAddLocation(NPC, -108.64, -2.71, 24.22, 2, 0) + MovementLoopAddLocation(NPC, -112.72, -2.63, 21.67, 2, 0) + MovementLoopAddLocation(NPC, -121.34, -2.6, 20.29, 2, 0) + MovementLoopAddLocation(NPC, -126.81, -2.61, 23.84, 2, 0) + MovementLoopAddLocation(NPC, -128.9, -2.63, 27.83, 2, 0) + MovementLoopAddLocation(NPC, -134.67, -2.63, 31.56, 2, 0) + MovementLoopAddLocation(NPC, -139.13, -2.61, 30.96, 2, 0) + MovementLoopAddLocation(NPC, -140.67, -2.59, 28.5, 2, 0) +end + +function StartPath1Reverse(NPC) + MovementLoopAddLocation(NPC, -140.67, -2.59, 28.5, 2, 0) + MovementLoopAddLocation(NPC, -139.13, -2.61, 30.96, 2, 0) + MovementLoopAddLocation(NPC, -134.67, -2.63, 31.56, 2, 0) + MovementLoopAddLocation(NPC, -128.9, -2.63, 27.83, 2, 0) + MovementLoopAddLocation(NPC, -126.81, -2.61, 23.84, 2, 0) + MovementLoopAddLocation(NPC, -121.34, -2.6, 20.29, 2, 0) + MovementLoopAddLocation(NPC, -112.72, -2.63, 21.67, 2, 0) + MovementLoopAddLocation(NPC, -108.64, -2.71, 24.22, 2, 0) + MovementLoopAddLocation(NPC, -101.32, -2.71, 26.16, 2, 0) + MovementLoopAddLocation(NPC, -96.97, -2.72, 31.94, 2, 0) + MovementLoopAddLocation(NPC, -76.57, -2.76, 33.66, 2, 0) + MovementLoopAddLocation(NPC, -74.41, -2.67, 31.71, 2, 0) + MovementLoopAddLocation(NPC, -65.66, -2.71, 32.21, 2, 0) + MovementLoopAddLocation(NPC, -61.37, -2.76, 33.77, 2, 0) + MovementLoopAddLocation(NPC, -54.52, -2.63, 34.25, 2, 0) + MovementLoopAddLocation(NPC, -50.13, -2.46, 37.13, 2, 0) + MovementLoopAddLocation(NPC, -44.9, -2.46, 34.15, 2, 0) + MovementLoopAddLocation(NPC, -46.63, -2.62, 29.66, 2, 0) + MovementLoopAddLocation(NPC, -50.97, -2.78, 26.87, 2, 0) + MovementLoopAddLocation(NPC, -61.57, -2.68, 26.83, 2, 0) + MovementLoopAddLocation(NPC, -73.37, -2.7, 24.81, 2, 0) + MovementLoopAddLocation(NPC, -80.37, -2.73, 16.74, 2, 0) + MovementLoopAddLocation(NPC, -87.91, -2.7, 15.73, 2, 0) + MovementLoopAddLocation(NPC, -94.95, -2.72, 17.96, 2, 0) + MovementLoopAddLocation(NPC, -99.51, -2.68, 17.5, 2, 0) + MovementLoopAddLocation(NPC, -103.32, -2.67, 19.41, 2, 0) + MovementLoopAddLocation(NPC, -109.99, -2.64, 17.76, 2, 0) + MovementLoopAddLocation(NPC, -114.21, -2.61, 17.31, 2, 0) + MovementLoopAddLocation(NPC, -122.83, -2.55, 14.43, 2, 0) + MovementLoopAddLocation(NPC, -126.23, -2.56, 18.19, 2, 0) + MovementLoopAddLocation(NPC, -129.41, -2.57, 19.94, 2, 0) + MovementLoopAddLocation(NPC, -137.92, -2.56, 20.52, 2, 0) + MovementLoopAddLocation(NPC, -140.28, -2.57, 22.58, 2, 0) +end \ No newline at end of file diff --git a/server/SpawnScripts/Ruins/aBrokentuskoverseer.lua b/server/SpawnScripts/Ruins/aBrokentuskoverseer.lua new file mode 100644 index 000000000..29e900715 --- /dev/null +++ b/server/SpawnScripts/Ruins/aBrokentuskoverseer.lua @@ -0,0 +1,56 @@ +--[[ + Script Name : SpawnScripts/Ruins/aBrokentuskoverseer.lua + Script Purpose : a Brokentusk overseer + Script Author : Scatman + Script Date : 2009.08.21 + Script Notes : +--]] + +dofile("SpawnScripts/Generic/BrokentuskVoiceOvers.lua") +local spoke = false + +function spawn(NPC) + spoke = false + AddVisualStateLoop(NPC, 1000, math.random(0, 2000), 10783, 450) -- attack + AddVisualStateLoop(NPC, 1000, math.random(0, 2000), 12028, 450) -- point + AddVisualStateLoop(NPC, 1000, math.random(0, 2000), 10912, 450) -- brandish + AddVisualStateLoop(NPC, 1000, math.random(0, 2000), 1646, 450) -- pugilist attack 2 +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) +end + +function aggro(NPC, Spawn) + local chance = math.random(0, 100) + if chance <= 25 then + generic_aggro(NPC, Spawn) + end +end + +function healthchanged(NPC, Spawn) + local chance = math.random(0, 100) + if chance <= 25 then + local health_percent = GetHP(NPC) / GetMaxHP(NPC) + if health_percent < 0.50 and spoke == false then + spoke = true + generic_healthchanged(NPC, Spawn) + end + end +end + +function killed(NPC, Spawn) + generic_killed(NPC, Spawn) +end + +function death(NPC, Spawn) + spoke = false + local chance = math.random(0, 100) + if chance <= 25 then + generic_death(NPC, Spawn) + end +end \ No newline at end of file diff --git a/server/SpawnScripts/Ruins/aBrokentuskpawn.lua b/server/SpawnScripts/Ruins/aBrokentuskpawn.lua new file mode 100644 index 000000000..dcc5f11f2 --- /dev/null +++ b/server/SpawnScripts/Ruins/aBrokentuskpawn.lua @@ -0,0 +1,109 @@ +--[[ + Script Name : SpawnScripts/Ruins/aBrokentuskpawn.lua + Script Purpose : a Brokentusk pawn + Script Author : Scatman + Script Date : 2009.08.21 + Script Notes : +--]] + +dofile("SpawnScripts/Generic/BrokentuskVoiceOvers.lua") +local spoke = false + +function spawn(NPC) + spoke = false + local sli = GetSpawnLocationID(NPC) + + if sli == 133076 or sli == 133077 or sli == 133078 or sli == 133079 then + -- The sparring pawns. + AddVisualStateLoop(NPC, 1000, math.random(0, 1000), 10783, 450) -- attack + AddVisualStateLoop(NPC, 1000, math.random(0, 1000), 13058, 450) -- taunt combat art + AddVisualStateLoop(NPC, 1000, math.random(0, 1000), 12065, 450) -- pugilist parry + AddVisualStateLoop(NPC, 1000, math.random(0, 1000), 12050, 450) -- pugilist dodge forehand + elseif sli == 133054 or sli == 133055 or sli == 159761 or sli == 133058 or sli == 133070 or sli == 133071 or sli == 133064 or sli == 159762 or sli == 133061 or sli == 159768 then + -- The pawns cheering on the sparring pawns. + AddVisualStateLoop(NPC, 1000, math.random(0, 1000), 11150, 43918) -- cheer + AddVisualStateLoop(NPC, 1000, math.random(0, 1000), 10760 , 43528) -- applaud + AddVisualStateLoop(NPC, 1000, math.random(0, 1000), 10856, 43624) -- boggle + AddVisualStateLoop(NPC, 1000, math.random(0, 1000), 11152, 43920) -- chuckle + AddVisualStateLoop(NPC, 1000, math.random(0, 1000), 11285, 44053) -- curse + elseif sli == 159746 then + StartPath1(NPC) + elseif sli == 133018 then + StartPath2(NPC) + elseif sli == 159758 then + StartPath3(NPC) + end +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) +end + +function aggro(NPC, Spawn) + local chance = math.random(0, 100) + if chance <= 25 then + generic_aggro(NPC, Spawn) + end +end + +function healthchanged(NPC, Spawn) + local chance = math.random(0, 100) + if chance <= 25 then + local health_percent = GetHP(NPC) / GetMaxHP(NPC) + if health_percent < 0.50 and spoke == false then + spoke = true + generic_healthchanged(NPC, Spawn) + end + end +end + +function killed(NPC, Spawn) + generic_killed(NPC, Spawn) +end + +function death(NPC, Spawn) + spoke = false + local chance = math.random(0, 100) + if chance <= 25 then + generic_death(NPC, Spawn) + end +end + +function StartPath1(NPC) + MovementLoopAddLocation(NPC, -120.64, -2.58, 17.04, 4, 0) + MovementLoopAddLocation(NPC, -89.23, -2.69, 25, 4, 0) + MovementLoopAddLocation(NPC, -53.93, -2.63, 27.08, 4, 0) + MovementLoopAddLocation(NPC, -55.71, -2.52, 33.44, 4, 0) + MovementLoopAddLocation(NPC, -89.93, -2.74, 36.69, 4, 0) + MovementLoopAddLocation(NPC, -103.84, -2.64, 22.62, 4, 0) + MovementLoopAddLocation(NPC, -120.87, -2.6, 19.65, 4, 0) + MovementLoopAddLocation(NPC, -135.95, -2.61, 31.13, 4, 0) + MovementLoopAddLocation(NPC, -138.46, -2.58, 23.24, 4, 0) +end + +function StartPath2(NPC) + MovementLoopAddLocation(NPC, -119.97, 2.26, 127.77, 4, 0) + MovementLoopAddLocation(NPC, -123.42, 0.92, 107.14, 4, 0) + MovementLoopAddLocation(NPC, -123.68, -2.62, 73.93, 4, 0) + MovementLoopAddLocation(NPC, -101.58, -2.56, 63.45, 4, 0) + MovementLoopAddLocation(NPC, -96.64, -2.59, 75.03, 4, 0) + MovementLoopAddLocation(NPC, -119.92, -2.63, 94.64, 4, 0) + MovementLoopAddLocation(NPC, -119.77, 2.26, 128.79, 4, 0) + MovementLoopAddLocation(NPC, -127.08, 2.26, 141.62, 4, 0) +end + +function StartPath3(NPC) + MovementLoopAddLocation(NPC, -122.63, 2.28, 120.17, 4, 0) + MovementLoopAddLocation(NPC, -123.33, -1.71, 98.13, 4, 0) + MovementLoopAddLocation(NPC, -97.93, -2.42, 71.18, 4, 0) + MovementLoopAddLocation(NPC, -91.85, -2.63, 52.03, 4, 0) + MovementLoopAddLocation(NPC, -97.82, -2.45, 53.78, 4, 0) + MovementLoopAddLocation(NPC, -118.73, -2.54, 74.65, 4, 0) + MovementLoopAddLocation(NPC, -123.79, -2.62, 75.76, 4, 0) + MovementLoopAddLocation(NPC, -123.07, 2.28, 120.49, 4, 0) + MovementLoopAddLocation(NPC, -149.83, 2.26, 142.84, 4, 0) +end \ No newline at end of file diff --git a/server/SpawnScripts/Ruins/aBrokentuskpounder.lua b/server/SpawnScripts/Ruins/aBrokentuskpounder.lua new file mode 100644 index 000000000..a29b87fb1 --- /dev/null +++ b/server/SpawnScripts/Ruins/aBrokentuskpounder.lua @@ -0,0 +1,52 @@ +--[[ + Script Name : SpawnScripts/Ruins/aBrokentuskpounder.lua + Script Purpose : a Brokentusk pounder + Script Author : Scatman + Script Date : 2009.08.21 + Script Notes : +--]] + +dofile("SpawnScripts/Generic/BrokentuskVoiceOvers.lua") +local spoke = false + +function spawn(NPC) + spoke = false +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) +end + +function aggro(NPC, Spawn) + local chance = math.random(0, 100) + if chance <= 25 then + generic_aggro(NPC, Spawn) + end +end + +function healthchanged(NPC, Spawn) + local chance = math.random(0, 100) + if chance <= 25 then + local health_percent = GetHP(NPC) / GetMaxHP(NPC) + if health_percent < 0.50 and spoke == false then + spoke = true + generic_healthchanged(NPC, Spawn) + end + end +end + +function killed(NPC, Spawn) + generic_killed(NPC, Spawn) +end + +function death(NPC, Spawn) + spoke = false + local chance = math.random(0, 100) + if chance <= 25 then + generic_death(NPC, Spawn) + end +end \ No newline at end of file diff --git a/server/SpawnScripts/Ruins/aBrokentuskprophet.lua b/server/SpawnScripts/Ruins/aBrokentuskprophet.lua new file mode 100644 index 000000000..11bf44f7c --- /dev/null +++ b/server/SpawnScripts/Ruins/aBrokentuskprophet.lua @@ -0,0 +1,52 @@ +--[[ + Script Name : SpawnScripts/Ruins/aBrokentuskprophet.lua + Script Purpose : a Brokentusk prophet + Script Author : Scatman + Script Date : 2009.08.21 + Script Notes : +--]] + +dofile("SpawnScripts/Generic/BrokentuskVoiceOvers.lua") +local spoke = false + +function spawn(NPC) + spoke = false +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) +end + +function aggro(NPC, Spawn) + local chance = math.random(0, 100) + if chance <= 25 then + generic_aggro(NPC, Spawn) + end +end + +function healthchanged(NPC, Spawn) + local chance = math.random(0, 100) + if chance <= 25 then + local health_percent = GetHP(NPC) / GetMaxHP(NPC) + if health_percent < 0.50 and spoke == false then + spoke = true + generic_healthchanged(NPC, Spawn) + end + end +end + +function killed(NPC, Spawn) + generic_killed(NPC, Spawn) +end + +function death(NPC, Spawn) + spoke = false + local chance = math.random(0, 100) + if chance <= 25 then + generic_death(NPC, Spawn) + end +end \ No newline at end of file diff --git a/server/SpawnScripts/Ruins/aBrokentuskravager.lua b/server/SpawnScripts/Ruins/aBrokentuskravager.lua new file mode 100644 index 000000000..ee1c6194d --- /dev/null +++ b/server/SpawnScripts/Ruins/aBrokentuskravager.lua @@ -0,0 +1,52 @@ +--[[ + Script Name : SpawnScripts/Ruins/aBrokentuskravager.lua + Script Purpose : a Brokentusk ravager + Script Author : Scatman + Script Date : 2009.08.21 + Script Notes : +--]] + +dofile("SpawnScripts/Generic/BrokentuskVoiceOvers.lua") +local spoke = false + +function spawn(NPC) + spoke = false +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) +end + +function aggro(NPC, Spawn) + local chance = math.random(0, 100) + if chance <= 25 then + generic_aggro(NPC, Spawn) + end +end + +function healthchanged(NPC, Spawn) + local chance = math.random(0, 100) + if chance <= 25 then + local health_percent = GetHP(NPC) / GetMaxHP(NPC) + if health_percent < 0.50 and spoke == false then + spoke = true + generic_healthchanged(NPC, Spawn) + end + end +end + +function killed(NPC, Spawn) + generic_killed(NPC, Spawn) +end + +function death(NPC, Spawn) + spoke = false + local chance = math.random(0, 100) + if chance <= 25 then + generic_death(NPC, Spawn) + end +end \ No newline at end of file diff --git a/server/SpawnScripts/Ruins/aBrokentusksentry.lua b/server/SpawnScripts/Ruins/aBrokentusksentry.lua new file mode 100644 index 000000000..d5db3eeee --- /dev/null +++ b/server/SpawnScripts/Ruins/aBrokentusksentry.lua @@ -0,0 +1,52 @@ +--[[ + Script Name : SpawnScripts/Ruins/aBrokentuskentry.lua + Script Purpose : a Brokentusk sentry + Script Author : Scatman + Script Date : 2009.08.21 + Script Notes : +--]] + +dofile("SpawnScripts/Generic/BrokentuskVoiceOvers.lua") +local spoke = false + +function spawn(NPC) + spoke = false +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) +end + +function aggro(NPC, Spawn) + local chance = math.random(0, 100) + if chance <= 25 then + generic_aggro(NPC, Spawn) + end +end + +function healthchanged(NPC, Spawn) + local chance = math.random(0, 100) + if chance <= 25 then + local health_percent = GetHP(NPC) / GetMaxHP(NPC) + if health_percent < 0.50 and spoke == false then + spoke = true + generic_healthchanged(NPC, Spawn) + end + end +end + +function killed(NPC, Spawn) + generic_killed(NPC, Spawn) +end + +function death(NPC, Spawn) + spoke = false + local chance = math.random(0, 100) + if chance <= 25 then + generic_death(NPC, Spawn) + end +end \ No newline at end of file diff --git a/server/SpawnScripts/Ruins/aBrokentuskshaman.lua b/server/SpawnScripts/Ruins/aBrokentuskshaman.lua new file mode 100644 index 000000000..9f8aeda70 --- /dev/null +++ b/server/SpawnScripts/Ruins/aBrokentuskshaman.lua @@ -0,0 +1,52 @@ +--[[ + Script Name : SpawnScripts/Ruins/aBrokentuskshaman.lua + Script Purpose : a Brokentusk shaman + Script Author : Scatman + Script Date : 2009.08.21 + Script Notes : +--]] + +dofile("SpawnScripts/Generic/BrokentuskVoiceOvers.lua") +local spoke = false + +function spawn(NPC) + spoke = false +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) +end + +function aggro(NPC, Spawn) + local chance = math.random(0, 100) + if chance <= 25 then + generic_aggro(NPC, Spawn) + end +end + +function healthchanged(NPC, Spawn) + local chance = math.random(0, 100) + if chance <= 25 then + local health_percent = GetHP(NPC) / GetMaxHP(NPC) + if health_percent < 0.50 and spoke == false then + spoke = true + generic_healthchanged(NPC, Spawn) + end + end +end + +function killed(NPC, Spawn) + generic_killed(NPC, Spawn) +end + +function death(NPC, Spawn) + spoke = false + local chance = math.random(0, 100) + if chance <= 25 then + generic_death(NPC, Spawn) + end +end \ No newline at end of file diff --git a/server/SpawnScripts/Ruins/aBrokentuskwarrior.lua b/server/SpawnScripts/Ruins/aBrokentuskwarrior.lua new file mode 100644 index 000000000..093b17cab --- /dev/null +++ b/server/SpawnScripts/Ruins/aBrokentuskwarrior.lua @@ -0,0 +1,120 @@ +--[[ + Script Name : SpawnScripts/Ruins/aBrokentuskwarrior.lua + Script Purpose : a Brokentusk warrior + Script Author : Scatman (updated by jakejp 2018.10.08) + Script Date : 2009.08.21 + Script Notes : +--]] + +dofile("SpawnScripts/Generic/BrokentuskVoiceOvers.lua") +local spoke = false + +function spawn(NPC) + spoke = false + local sli = GetSpawnLocationID(NPC) + + if sli == 408926 then + -- Roamer by the statue with the prophets to the stairs. + StartPath1(NPC) + elseif sli == 159749 or sli == 159750 or sli == 159751 then + -- Runners from the statue with the prophets around it. Run right into the seasoned guards. + StartPath2(NPC) + elseif sli == 1585501 or sli == 1585502 or sli == 1585523 or sli == 1585524 or sli == 1585525 or sli == 408808 then + -- Orcs that cheer on the harried vagrant squatter. + SetPlayerProximityFunction(NPC, 10, "InRange") + EmoteLoop(NPC) + end +end + +function respawn(NPC) + spawn(NPC) +end + +function InRange(NPC, Spawn) + local vagrant_squatter = GetSpawn(NPC, 1270015) + if vagrant_squatter ~= nil and GetDistance(NPC, vagrant_squatter) <= 50 then + local choice = math.random(1, 3) + if choice == 1 then + Say(NPC, "Dance, or I give you to HIM!", Spawn) + elseif choice == 2 then + Say(NPC, "So fragile, so...funny!", Spawn) + elseif choice == 3 then + Say(NPC, "Dance little one!", Spawn) + end + end +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) +end + +function aggro(NPC, Spawn) + local chance = math.random(0, 100) + if chance <= 25 then + generic_aggro(NPC, Spawn) + end +end + +function healthchanged(NPC, Spawn) + local chance = math.random(0, 100) + if chance <= 25 then + local health_percent = GetHP(NPC) / GetMaxHP(NPC) + if health_percent < 0.50 and spoke == false then + spoke = true + generic_healthchanged(NPC, Spawn) + end + end +end + +function killed(NPC, Spawn) + generic_killed(NPC, Spawn) +end + +function death(NPC, Spawn) + spoke = false + local chance = math.random(0, 100) + if chance <= 25 then + generic_death(NPC, Spawn) + end +end + +function StartPath1(NPC) + MovementLoopAddLocation(NPC, -35.9, -3.62, 47.9, 2, 0) + MovementLoopAddLocation(NPC, -35.18, -2.72, 58.96, 2, 0) + MovementLoopAddLocation(NPC, -42.3, -2.43, 71.24, 2, 0) + MovementLoopAddLocation(NPC, -40.02, -2.38, 75.94, 2, 0) + MovementLoopAddLocation(NPC, -43.62, -2.08, 81.69, 2, 0) + MovementLoopAddLocation(NPC, -47.92, -2.5, 73.39, 2, 0) + MovementLoopAddLocation(NPC, -46.64, -2.59, 65.03, 2, 0) + MovementLoopAddLocation(NPC, -41.31, -2.89, 58.72, 2, 0) + MovementLoopAddLocation(NPC, -44.55, -3.94, 45.11, 2, 0) + MovementLoopAddLocation(NPC, -36.96, -3.82, 42.52, 2, 0) +end + +function StartPath2(NPC) + MovementLoopAddLocation(NPC, -47.47, -2.4, 67.54, 4, 0) + MovementLoopAddLocation(NPC, -37.98, -2.22, 81.62, 4, 0) + MovementLoopAddLocation(NPC, -14.18, -4.24, 91.13, 4, 0) + MovementLoopAddLocation(NPC, -19.79, -4.42, 109.62, 4, 0) + MovementLoopAddLocation(NPC, -4.71, -4.42, 120.59, 4, 0) + MovementLoopAddLocation(NPC, -1.99, -4.42, 96.09, 4, 0) + MovementLoopAddLocation(NPC, 10.14, -3.2, 79.98, 4, 0) + MovementLoopAddLocation(NPC, -6.7, -4.27, 63.84, 4, 0) + MovementLoopAddLocation(NPC, -11.05, -5.06, 39.66, 4, 0) + MovementLoopAddLocation(NPC, -24.45, -3.71, 82.41, 4, 0) + MovementLoopAddLocation(NPC, -45.66, -2.42, 76.96, 4, 0) + MovementLoopAddLocation(NPC, -46.29, -2.55, 68.6, 4, 0) + MovementLoopAddLocation(NPC, -67.39, -0.9, 67.99, 4, 0) +end + +function EmoteLoop(NPC) -- Thanks theFoof + local choice = math.random(1,4) + local emote + if choice == 1 then + emote = "cheer" + elseif choice == 2 then + emote = "chuckle" + end + PlayFlavor(NPC, "", "", emote, 0, 0) + AddTimer(NPC, math.random(1000,5000), "EmoteLoop") +end diff --git a/server/SpawnScripts/Ruins/aLonetuskBloodseer.lua b/server/SpawnScripts/Ruins/aLonetuskBloodseer.lua new file mode 100644 index 000000000..6ee860caf --- /dev/null +++ b/server/SpawnScripts/Ruins/aLonetuskBloodseer.lua @@ -0,0 +1,52 @@ +--[[ + Script Name : SpawnScripts/Ruins/aLonetuskBloodseer.lua + Script Purpose : a Lonetusk Bloodser + Script Author : Scatman + Script Date : 2009.08.20 + Script Notes : +--]] + +dofile("SpawnScripts/Ruins/LonetuskVoiceOvers.lua") +local spoke = false + +function spawn(NPC) + spoke = false +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) +end + +function aggro(NPC, Spawn) + local chance = math.random(0, 100) + if chance <= 25 then + generic_aggro(NPC, Spawn) + end +end + +function healthchanged(NPC, Spawn) + local chance = math.random(0, 100) + if chance <= 25 then + local health_percent = GetHP(NPC) / GetMaxHP(NPC) + if health_percent < 0.50 and spoke == false then + spoke = true + generic_healthchanged(NPC, Spawn) + end + end +end + +function killed(NPC, Spawn) + generic_killed(NPC, Spawn) +end + +function death(NPC, Spawn) + spoke = false + local chance = math.random(0, 100) + if chance <= 25 then + generic_death(NPC, Spawn) + end +end \ No newline at end of file diff --git a/server/SpawnScripts/Ruins/aLonetuskchampion.lua b/server/SpawnScripts/Ruins/aLonetuskchampion.lua new file mode 100644 index 000000000..4df5a6bfa --- /dev/null +++ b/server/SpawnScripts/Ruins/aLonetuskchampion.lua @@ -0,0 +1,52 @@ +--[[ + Script Name : SpawnScripts/Ruins/aLonetuskchampion.lua + Script Purpose : a Lonetusk champion + Script Author : Scatman + Script Date : 2009.08.21 + Script Notes : +--]] + +dofile("SpawnScripts/Ruins/LonetuskVoiceOvers.lua") +local spoke = false + +function spawn(NPC) + spoke = false +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) +end + +function aggro(NPC, Spawn) + local chance = math.random(0, 100) + if chance <= 25 then + generic_aggro(NPC, Spawn) + end +end + +function healthchanged(NPC, Spawn) + local chance = math.random(0, 100) + if chance <= 25 then + local health_percent = GetHP(NPC) / GetMaxHP(NPC) + if health_percent < 0.50 and spoke == false then + spoke = true + generic_healthchanged(NPC, Spawn) + end + end +end + +function killed(NPC, Spawn) + generic_killed(NPC, Spawn) +end + +function death(NPC, Spawn) + spoke = false + local chance = math.random(0, 100) + if chance <= 25 then + generic_death(NPC, Spawn) + end +end \ No newline at end of file diff --git a/server/SpawnScripts/Ruins/aLonetuskcrusher.lua b/server/SpawnScripts/Ruins/aLonetuskcrusher.lua new file mode 100644 index 000000000..c18a4271b --- /dev/null +++ b/server/SpawnScripts/Ruins/aLonetuskcrusher.lua @@ -0,0 +1,52 @@ +--[[ + Script Name : SpawnScripts/Ruins/aLonetuskcrusher.lua + Script Purpose : a Lonetusk crusher + Script Author : Scatman + Script Date : 2009.08.21 + Script Notes : +--]] + +dofile("SpawnScripts/Ruins/LonetuskVoiceOvers.lua") +local spoke = false + +function spawn(NPC) + spoke = false +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) +end + +function aggro(NPC, Spawn) + local chance = math.random(0, 100) + if chance <= 25 then + generic_aggro(NPC, Spawn) + end +end + +function healthchanged(NPC, Spawn) + local chance = math.random(0, 100) + if chance <= 25 then + local health_percent = GetHP(NPC) / GetMaxHP(NPC) + if health_percent < 0.50 and spoke == false then + spoke = true + generic_healthchanged(NPC, Spawn) + end + end +end + +function killed(NPC, Spawn) + generic_killed(NPC, Spawn) +end + +function death(NPC, Spawn) + spoke = false + local chance = math.random(0, 100) + if chance <= 25 then + generic_death(NPC, Spawn) + end +end \ No newline at end of file diff --git a/server/SpawnScripts/Ruins/aLonetuskdestroyer.lua b/server/SpawnScripts/Ruins/aLonetuskdestroyer.lua new file mode 100644 index 000000000..b8337490e --- /dev/null +++ b/server/SpawnScripts/Ruins/aLonetuskdestroyer.lua @@ -0,0 +1,52 @@ +--[[ + Script Name : SpawnScripts/Ruins/aLonetuskdestroyed.lua + Script Purpose : a Lonetusk destroyer + Script Author : Scatman + Script Date : 2009.08.21 + Script Notes : +--]] + +dofile("SpawnScripts/Ruins/LonetuskVoiceOvers.lua") +local spoke = false + +function spawn(NPC) + spoke = false +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) +end + +function aggro(NPC, Spawn) + local chance = math.random(0, 100) + if chance <= 25 then + generic_aggro(NPC, Spawn) + end +end + +function healthchanged(NPC, Spawn) + local chance = math.random(0, 100) + if chance <= 25 then + local health_percent = GetHP(NPC) / GetMaxHP(NPC) + if health_percent < 0.50 and spoke == false then + spoke = true + generic_healthchanged(NPC, Spawn) + end + end +end + +function killed(NPC, Spawn) + generic_killed(NPC, Spawn) +end + +function death(NPC, Spawn) + spoke = false + local chance = math.random(0, 100) + if chance <= 25 then + generic_death(NPC, Spawn) + end +end \ No newline at end of file diff --git a/server/SpawnScripts/Ruins/aLonetuskpounder.lua b/server/SpawnScripts/Ruins/aLonetuskpounder.lua new file mode 100644 index 000000000..41a3b1603 --- /dev/null +++ b/server/SpawnScripts/Ruins/aLonetuskpounder.lua @@ -0,0 +1,52 @@ +--[[ + Script Name : SpawnScripts/Ruins/aLonetuskpounder.lua + Script Purpose : a Lonetusk pounder + Script Author : Scatman + Script Date : 2009.08.21 + Script Notes : +--]] + +dofile("SpawnScripts/Ruins/LonetuskVoiceOvers.lua") +local spoke = false + +function spawn(NPC) + spoke = false +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) +end + +function aggro(NPC, Spawn) + local chance = math.random(0, 100) + if chance <= 25 then + generic_aggro(NPC, Spawn) + end +end + +function healthchanged(NPC, Spawn) + local chance = math.random(0, 100) + if chance <= 25 then + local health_percent = GetHP(NPC) / GetMaxHP(NPC) + if health_percent < 0.50 and spoke == false then + spoke = true + generic_healthchanged(NPC, Spawn) + end + end +end + +function killed(NPC, Spawn) + generic_killed(NPC, Spawn) +end + +function death(NPC, Spawn) + spoke = false + local chance = math.random(0, 100) + if chance <= 25 then + generic_death(NPC, Spawn) + end +end \ No newline at end of file diff --git a/server/SpawnScripts/Ruins/aLonetuskprophet.lua b/server/SpawnScripts/Ruins/aLonetuskprophet.lua new file mode 100644 index 000000000..36f1332de --- /dev/null +++ b/server/SpawnScripts/Ruins/aLonetuskprophet.lua @@ -0,0 +1,52 @@ +--[[ + Script Name : SpawnScripts/Ruins/aLonetuskprophet.lua + Script Purpose : a Lonetusk prophet + Script Author : Scatman + Script Date : 2009.08.21 + Script Notes : +--]] + +dofile("SpawnScripts/Ruins/LonetuskVoiceOvers.lua") +local spoke = false + +function spawn(NPC) + spoke = false +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) +end + +function aggro(NPC, Spawn) + local chance = math.random(0, 100) + if chance <= 25 then + generic_aggro(NPC, Spawn) + end +end + +function healthchanged(NPC, Spawn) + local chance = math.random(0, 100) + if chance <= 25 then + local health_percent = GetHP(NPC) / GetMaxHP(NPC) + if health_percent < 0.50 and spoke == false then + spoke = true + generic_healthchanged(NPC, Spawn) + end + end +end + +function killed(NPC, Spawn) + generic_killed(NPC, Spawn) +end + +function death(NPC, Spawn) + spoke = false + local chance = math.random(0, 100) + if chance <= 25 then + generic_death(NPC, Spawn) + end +end \ No newline at end of file diff --git a/server/SpawnScripts/Ruins/aLonetusksentry.lua b/server/SpawnScripts/Ruins/aLonetusksentry.lua new file mode 100644 index 000000000..1b9beea33 --- /dev/null +++ b/server/SpawnScripts/Ruins/aLonetusksentry.lua @@ -0,0 +1,143 @@ +--[[ + Script Name : SpawnScripts/Ruins/aLonetusksentry.lua + Script Purpose : a Lonetusk sentry + Script Author : Scatman + Script Date : 2009.08.21 + Script Notes : +--]] + +dofile("SpawnScripts/Ruins/aLonetuskBloodseer.lua") +local spoke = false + +function spawn(NPC) + spoke = false + local sli = GetSpawnLocationID(NPC) + + if sli == 159752 then + StartPath1(NPC) + elseif sli == 133494 then + StartPath2(NPC) + elseif sli == 133485 then + StartPath3(NPC) + elseif sli == 159753 or sli == 159754 then + StartPath4(NPC) + elseif sli == 159755 then + -- ^^ wanderer + StartPath5(NPC) + end +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) +end + +function aggro(NPC, Spawn) + local chance = math.random(0, 100) + if chance <= 25 then + generic_aggro(NPC, Spawn) + end +end + +function healthchanged(NPC, Spawn) + local chance = math.random(0, 100) + if chance <= 25 then + local health_percent = GetHP(NPC) / GetMaxHP(NPC) + if health_percent < 0.50 and spoke == false then + spoke = true + generic_healthchanged(NPC, Spawn) + end + end +end + +function killed(NPC, Spawn) + generic_killed(NPC, Spawn) +end + +function death(NPC, Spawn) + spoke = false + local chance = math.random(0, 100) + if chance <= 25 then + generic_death(NPC, Spawn) + end +end + +function StartPath1(NPC) + MovementLoopAddLocation(NPC, -41.32, -3.74, 120.32, 2, 0) + MovementLoopAddLocation(NPC, -65.94, -2.47, 99.71, 2, 0) + MovementLoopAddLocation(NPC, -77.68, -2.43, 99, 2, 0) + MovementLoopAddLocation(NPC, -77.79, -2.57, 104.14, 2, 0) + MovementLoopAddLocation(NPC, -66.54, -2.66, 106.48, 2, 0) + MovementLoopAddLocation(NPC, -57.71, -2.76, 111.01, 2, 0) + MovementLoopAddLocation(NPC, -53.14, -2.68, 118.32, 2, 0) + MovementLoopAddLocation(NPC, -44.23, -3.49, 126.27, 2, 0) + MovementLoopAddLocation(NPC, -32.83, -4.42, 141.49, 2, 0) + MovementLoopAddLocation(NPC, -28.68, -4.42, 156.88, 2, 0) +end + +function StartPath2(NPC) + MovementLoopAddLocation(NPC, -67.64, -2.42, 100.51, 2, 0) + MovementLoopAddLocation(NPC, -50.99, -3.03, 109.9, 2, 0) + MovementLoopAddLocation(NPC, -34.21, -4.28, 133.12, 2, 0) + MovementLoopAddLocation(NPC, -21.44, -4.35, 145.14, 2, 0) + MovementLoopAddLocation(NPC, -28.3, -4.42, 150.16, 2, 0) + MovementLoopAddLocation(NPC, -29.34, -4.32, 143.17, 2, 0) + MovementLoopAddLocation(NPC, -43.55, -3.54, 127, 2, 0) + MovementLoopAddLocation(NPC, -50.41, -2.84, 121.45, 2, 0) + MovementLoopAddLocation(NPC, -52.63, -2.77, 114.84, 2, 0) + MovementLoopAddLocation(NPC, -75.87, -2.49, 103.47, 2, 0) + MovementLoopAddLocation(NPC, -77.35, -2.45, 98.34, 2, 0) +end + +function StartPath3(NPC) + MovementLoopAddLocation(NPC, -94.78, -1.3, 131.55, 2, 0) + MovementLoopAddLocation(NPC, -88.14, -1.48, 131.68, 2, 0) + MovementLoopAddLocation(NPC, -87.84, -1.52, 127.62, 2, 0) + MovementLoopAddLocation(NPC, -88.6, -2.61, 112.67, 2, 0) + MovementLoopAddLocation(NPC, -80.61, -2.54, 104.52, 2, 0) + MovementLoopAddLocation(NPC, -83.55, -2.47, 101.98, 2, 0) + MovementLoopAddLocation(NPC, -91.03, -2.48, 110.27, 2, 0) + MovementLoopAddLocation(NPC, -92.3, -2.59, 113.78, 2, 0) + MovementLoopAddLocation(NPC, -92, -1.54, 128.43, 2, 0) + MovementLoopAddLocation(NPC, -94.87, -1.32, 130.14, 2, 0) + MovementLoopAddLocation(NPC, -95.15, -1.28, 131.86, 2, 0) +end + +function StartPath4(NPC) + MovementLoopAddLocation(NPC, -50.43, -3.04, 100.97, 4, 0) + MovementLoopAddLocation(NPC, -44.55, -3.31, 96.16, 4, 0) + MovementLoopAddLocation(NPC, -36.75, -3.59, 94.58, 4, 0) + MovementLoopAddLocation(NPC, -22.18, -3.82, 109.96, 4, 0) + MovementLoopAddLocation(NPC, -19.79, -4.38, 123.6, 4, 0) + MovementLoopAddLocation(NPC, -3.78, -4.27, 119.49, 4, 0) + MovementLoopAddLocation(NPC, -5.81, -4.42, 106.36, 4, 0) + MovementLoopAddLocation(NPC, 7.25, -3.84, 81.62, 4, 0) + MovementLoopAddLocation(NPC, -3.5, -4.24, 75.01, 4, 0) + MovementLoopAddLocation(NPC, -7.39, -4.48, 45.03, 4, 0) + MovementLoopAddLocation(NPC, 4.13, -4.02, 40.35, 4, 0) + MovementLoopAddLocation(NPC, -14.54, -5.17, 32.26, 4, 0) + MovementLoopAddLocation(NPC, -18.62, -5.31, 38.18, 4, 0) + MovementLoopAddLocation(NPC, -8.9, -4.24, 57.35, 4, 0) + MovementLoopAddLocation(NPC, -22.65, -4.03, 77.66, 4, 0) + MovementLoopAddLocation(NPC, -26, -4.08, 100.43, 4, 0) + MovementLoopAddLocation(NPC, -29.41, -3.83, 101.3, 4, 0) + MovementLoopAddLocation(NPC, -41.86, -3.41, 95.6, 4, 0) + MovementLoopAddLocation(NPC, -52.15, -2.89, 100.89, 4, 0) + MovementLoopAddLocation(NPC, -44.28, -3.35, 115.19, 4, 0) +end + +function StartPath5(NPC) + MovementLoopAddLocation(NPC, -56.31, -2.52, 138.86, 4, math.random(0, 15)) + MovementLoopAddLocation(NPC, -45.55, -2.62, 138.2, 4, math.random(0, 15)) + MovementLoopAddLocation(NPC, -63.53, -2.66, 149.64, 4, math.random(0, 15)) + MovementLoopAddLocation(NPC, -61.63, -2.66, 163.37, 4, math.random(0, 15)) + MovementLoopAddLocation(NPC, -58.97, -2.67, 153.47, 4, math.random(0, 15)) + MovementLoopAddLocation(NPC, -52.19, -2.67, 155.04, 4, math.random(0, 15)) + MovementLoopAddLocation(NPC, -45.12, -2.72, 147.89, 4, math.random(0, 15)) + MovementLoopAddLocation(NPC, -44.97, -3.32, 127.2, 4, math.random(0, 15)) + MovementLoopAddLocation(NPC, -57.75, -2.65, 144.9, 4, math.random(0, 15)) + MovementLoopAddLocation(NPC, -52.23, -2.67, 158.43, 4, math.random(0, 15)) +end \ No newline at end of file diff --git a/server/SpawnScripts/Ruins/aLonetuskshaman.lua b/server/SpawnScripts/Ruins/aLonetuskshaman.lua new file mode 100644 index 000000000..fe1ce72ca --- /dev/null +++ b/server/SpawnScripts/Ruins/aLonetuskshaman.lua @@ -0,0 +1,52 @@ +--[[ + Script Name : SpawnScripts/Ruins/aLonetuskshaman.lua + Script Purpose : a Lonetusk shaman + Script Author : Scatman + Script Date : 2009.08.21 + Script Notes : +--]] + +dofile("SpawnScripts/Ruins/LonetuskVoiceOvers.lua") +local spoke = false + +function spawn(NPC) + spoke = false +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) +end + +function aggro(NPC, Spawn) + local chance = math.random(0, 100) + if chance <= 25 then + generic_aggro(NPC, Spawn) + end +end + +function healthchanged(NPC, Spawn) + local chance = math.random(0, 100) + if chance <= 25 then + local health_percent = GetHP(NPC) / GetMaxHP(NPC) + if health_percent < 0.50 and spoke == false then + spoke = true + generic_healthchanged(NPC, Spawn) + end + end +end + +function killed(NPC, Spawn) + generic_killed(NPC, Spawn) +end + +function death(NPC, Spawn) + spoke = false + local chance = math.random(0, 100) + if chance <= 25 then + generic_death(NPC, Spawn) + end +end \ No newline at end of file diff --git a/server/SpawnScripts/Ruins/aLonetuskwarrior.lua b/server/SpawnScripts/Ruins/aLonetuskwarrior.lua new file mode 100644 index 000000000..f49515293 --- /dev/null +++ b/server/SpawnScripts/Ruins/aLonetuskwarrior.lua @@ -0,0 +1,83 @@ +--[[ + Script Name : SpawnScripts/Ruins/SpawnScripts/Ruins/aLonetuskwarrior.lua + Script Purpose : a Lonetusk warrior + Script Author : Scatman + Script Date : 2009.08.21 + Script Notes : +--]] + +dofile("SpawnScripts/Ruins/LonetuskVoiceOvers.lua") +local spoke = false + +function spawn(NPC) + spoke = false + local sli = GetSpawnLocationID(NPC) + + if sli == 159756 then + StartPath1(NPC) + elseif sli == 159757 then + StartPath2(NPC) + end +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) +end + +function aggro(NPC, Spawn) + local chance = math.random(0, 100) + if chance <= 25 then + generic_aggro(NPC, Spawn) + end +end + +function healthchanged(NPC, Spawn) + local chance = math.random(0, 100) + if chance <= 25 then + local health_percent = GetHP(NPC) / GetMaxHP(NPC) + if health_percent < 0.50 and spoke == false then + spoke = true + generic_healthchanged(NPC, Spawn) + end + end +end + +function killed(NPC, Spawn) + generic_killed(NPC, Spawn) +end + +function death(NPC, Spawn) + spoke = false + local chance = math.random(0, 100) + if chance <= 25 then + generic_death(NPC, Spawn) + end +end + +function StartPath1(NPC) + MovementLoopAddLocation(NPC, -0.13, -4.26, 165.68, 2, 0) + MovementLoopAddLocation(NPC, -14.62, -4.33, 163.43, 2, 0) + MovementLoopAddLocation(NPC, -23.68, -4.32, 157.94, 2, 0) + MovementLoopAddLocation(NPC, -24.96, -4.28, 139.69, 2, 0) + MovementLoopAddLocation(NPC, -22.01, -4.36, 139.48, 2, 0) + MovementLoopAddLocation(NPC, -20.86, -4.37, 146.05, 2, 0) + MovementLoopAddLocation(NPC, -21.55, -4.29, 153.57, 2, 0) + MovementLoopAddLocation(NPC, -12.1, -4.24, 159.76, 2, 0) + MovementLoopAddLocation(NPC, 11.83, -4.28, 157.78, 2, 0) + MovementLoopAddLocation(NPC, 12.93, -4.24, 164.87, 2, 0) +end + +function StartPath2(NPC) + MovementLoopAddLocation(NPC, -18.8, -4.39, 161.74, 2, 0) + MovementLoopAddLocation(NPC, -12.84, -4.29, 163.4, 2, 0) + MovementLoopAddLocation(NPC, 11.15, -4.26, 166.07, 2, 0) + MovementLoopAddLocation(NPC, 11.89, -4.24, 158.55, 2, 0) + MovementLoopAddLocation(NPC, -16.14, -4.24, 158.93, 2, 0) + MovementLoopAddLocation(NPC, -19.88, -4.36, 146.36, 2, 0) + MovementLoopAddLocation(NPC, -24.98, -4.28, 139.56, 2, 0) + MovementLoopAddLocation(NPC, -25.94, -4.42, 155.75, 2, 0) +end \ No newline at end of file diff --git a/server/SpawnScripts/Ruins/aRujarkianadvisor.lua b/server/SpawnScripts/Ruins/aRujarkianadvisor.lua new file mode 100644 index 000000000..898f13f85 --- /dev/null +++ b/server/SpawnScripts/Ruins/aRujarkianadvisor.lua @@ -0,0 +1,28 @@ +--[[ + Script Name : SpawnScripts/Ruins/aRujarkianadvisor.lua + Script Purpose : a Rujarkian advisor + Script Author : John Adams + Script Date : 2009.08.10 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +function spawn(NPC) + SetPlayerProximityFunction(NPC, 10, "InRange", "LeaveRange") +end + +function respawn(NPC) + spawn(NPC) +end + +function InRange(NPC, Spawn) +end + +function LeaveRange(NPC, Spawn) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + + PlayFlavor(NPC, "voiceover/english/orc_base_1/ft/orc/orc_base_1_1_victory_e0dd7b0.mp3", "Don't stand there! Kill the rest of them.", "", 1707510858, 1061114222, Spawn) +end + diff --git a/server/SpawnScripts/Ruins/acapturedLonetusk.lua b/server/SpawnScripts/Ruins/acapturedLonetusk.lua new file mode 100644 index 000000000..b2a8d279f --- /dev/null +++ b/server/SpawnScripts/Ruins/acapturedLonetusk.lua @@ -0,0 +1,131 @@ +--[[ + Script Name : SpawnScripts/TheRuins/acapturedLonetusk.lua + Script Purpose : a captured Lonetusk + Script Author : jakejp + Script Date : 2018.12.29 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +local IdentifyingtheLonetuskAlly = 394 + +function spawn(NPC) + -- AddVisualStateLoop(NPC, 1000, math.random(500, 2000), 11256, 44024) -- cringe // thanks Scatman +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + if HasQuest(Spawn, IdentifyingtheLonetuskAlly) and GetQuestStep(Spawn, IdentifyingtheLonetuskAlly) == 1 then + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/a_captured_lonetusk/fprt_adv04_ruins/revamp/orc_prisoner001.mp3", "", "", 4128768340, 1228262128, Spawn) + AddConversationOption(conversation, "I am here to get some answers from you.", "dlg_32_1") + AddConversationOption(conversation, "Quiet down, prisoner!") + StartConversation(conversation, NPC, Spawn, "No hurt! Me already surrender!") + else + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/a_captured_lonetusk/fprt_adv04_ruins/revamp/orc_prisoner012.mp3", "", "", 882748150, 4130498841, Spawn) + AddConversationOption(conversation, "I have no time for a babbling orc captive") + StartConversation(conversation, NPC, Spawn, "Let me go! Please!") + end +end + +function dlg_32_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/a_captured_lonetusk/fprt_adv04_ruins/revamp/orc_prisoner002.mp3", "", "", 2193050384, 3870757124, Spawn) + AddConversationOption(conversation, "You speak the Common tongue, so you must not be as dumb as you're pretending to be.", "dlg_32_2") + AddConversationOption(conversation, "If you say so.") + StartConversation(conversation, NPC, Spawn, "Me no have answers. Me just am little orc!") +end + +function dlg_32_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/a_captured_lonetusk/fprt_adv04_ruins/revamp/orc_prisoner003.mp3", "", "", 124478711, 860584252, Spawn) + AddConversationOption(conversation, "You're in no position to make deals. But I just might let you go if you tell me what I want to know.", "dlg_32_3") + AddConversationOption(conversation, "I've had enough of you already.") + StartConversation(conversation, NPC, Spawn, "Me not smart. Me just want to go home. You let me go, me no fight no more. Deal?") +end + +function dlg_32_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/a_captured_lonetusk/fprt_adv04_ruins/revamp/orc_prisoner004.mp3", "", "", 1469824726, 30408133, Spawn) + AddConversationOption(conversation, "Then I might as well leave you in the hands of these fine Militia guards. I'm sure they'll take good care of you...", "dlg_32_4") + AddConversationOption(conversation, "Guess I'll leave then.") + StartConversation(conversation, NPC, Spawn, "But me know nothing! Me swear!") +end + +function dlg_32_4(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/a_captured_lonetusk/fprt_adv04_ruins/revamp/orc_prisoner005.mp3", "", "", 1615553147, 3449079179, Spawn) + AddConversationOption(conversation, "Who is supplying your people with weapons and armor?", "dlg_32_5") + StartConversation(conversation, NPC, Spawn, "No! Me not want more beatings! What you want to know?") +end + +function dlg_32_5(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/a_captured_lonetusk/fprt_adv04_ruins/revamp/orc_prisoner006.mp3", "", "", 2990020628, 560025747, Spawn) + AddConversationOption(conversation, "Fine, I'll leave you with your guards.", "dlg_32_6") + AddConversationOption(conversation, "Okay, enough already.") + StartConversation(conversation, NPC, Spawn, "Me not know that! Me just am little orc!") +end + +function dlg_32_6(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/a_captured_lonetusk/fprt_adv04_ruins/revamp/orc_prisoner007.mp3", "", "", 3410550036, 2668527448, Spawn) + AddConversationOption(conversation, "Alright, I'm listening.", "dlg_32_7") + AddConversationOption(conversation, "I'm tired of your babble.") + StartConversation(conversation, NPC, Spawn, "Wait! Me really not know! But me do know something else.") +end + +function dlg_32_7(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/a_captured_lonetusk/fprt_adv04_ruins/revamp/orc_prisoner008.mp3", "", "", 3061313788, 1091321406, Spawn) + AddConversationOption(conversation, "Where is this safe place?", "dlg_32_8") + StartConversation(conversation, NPC, Spawn, "Me saw General Lonetusk get note. Me not see who it from, but he read it and say next shipment of weapons coming soon. Then he have his guard lock note away in safe place.") +end + +function dlg_32_8(NPC, Spawn) + SetStepComplete(Spawn, IdentifyingtheLonetuskAlly, 1) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/a_captured_lonetusk/fprt_adv04_ruins/revamp/orc_prisoner009.mp3", "", "", 4040035963, 2756024604, Spawn) + AddConversationOption(conversation, "You'd better not be lying to me, orc.", "dlg_32_9") + StartConversation(conversation, NPC, Spawn, "Me not know exactly. General keeps important stuff locked away in underground bunker. Me only know it well guarded.") +end + +function dlg_32_9(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/a_captured_lonetusk/fprt_adv04_ruins/revamp/orc_prisoner010.mp3", "", "", 309844462, 3131461869, Spawn) + AddConversationOption(conversation, "Not a chance. You are a prisoner of the Freeport Militia.", "dlg_32_10") + AddConversationOption(conversation, "I've talked to you enough for one day.") + StartConversation(conversation, NPC, Spawn, "Me no lie to you! Now me tell you this, you let me go, yes?") +end + +function dlg_32_10(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/a_captured_lonetusk/fprt_adv04_ruins/revamp/orc_prisoner011.mp3", "", "", 818383826, 2358181749, Spawn) + AddConversationOption(conversation, "Tell that to the people of Shoreside that your people butchered. I leave you to the mercy of these guards.") + StartConversation(conversation, NPC, Spawn, "You liar! You say you let me go if I tell you! You bad to poor little orc!") +end + diff --git a/server/SpawnScripts/Ruins/acourageousdefender.lua b/server/SpawnScripts/Ruins/acourageousdefender.lua new file mode 100644 index 000000000..44a50bfb0 --- /dev/null +++ b/server/SpawnScripts/Ruins/acourageousdefender.lua @@ -0,0 +1,29 @@ +--[[ + Script Name : SpawnScripts/Ruins/acourageousdefender.lua + Script Purpose : a courageous defender + Script Author : Scatman + Script Date : 2009.08.29 + Script Notes : +--]] + +dofile("SpawnScripts/Generic/RuinsDefendersVoiceOvers.lua") + +function spawn(NPC) + local sli = GetSpawnLocationID(NPC) + + if sli == 159510 or sli == 159511 then + -- Two guards praying to the statue of Luclin at the docks. + AddVisualStateLoop(NPC, 1000, math.random(0, 500), 11150, 43918) -- cheer + AddVisualStateLoop(NPC, 1000, math.random(0, 500), 10760, 43528) -- applaud + AddVisualStateLoop(NPC, 1000, math.random(0, 500), 396, 33164) -- not worthy + end +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + generic_hail(NPC, Spawn) +end \ No newline at end of file diff --git a/server/SpawnScripts/Ruins/aharriedvagrantsquatter.lua b/server/SpawnScripts/Ruins/aharriedvagrantsquatter.lua new file mode 100644 index 000000000..b465b677e --- /dev/null +++ b/server/SpawnScripts/Ruins/aharriedvagrantsquatter.lua @@ -0,0 +1,22 @@ +--[[ + Script Name : SpawnScripts/Ruins/aharriedvagrantsquatter.lua + Script Author : jakejp + Script Date : 2018.10.08 09:10:51 + Script Purpose : + : +--]] + +dofile("SpawnScripts/Generic/dancing_script.lua") + +function spawn(NPC) + MakeDance(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) +end + +function respawn(NPC) + +end + diff --git a/server/SpawnScripts/Ruins/aprisonerguard.lua b/server/SpawnScripts/Ruins/aprisonerguard.lua new file mode 100644 index 000000000..713294a92 --- /dev/null +++ b/server/SpawnScripts/Ruins/aprisonerguard.lua @@ -0,0 +1,23 @@ +--[[ + Script Name : SpawnScripts/Ruins/aprisonerguard.lua + Script Purpose : a prisoner guard + Script Author : Scatman + Script Date : 2009.08.29 + Script Notes : +--]] + +dofile("SpawnScripts/Generic/RuinsDefendersVoiceOvers.lua") + +function spawn(NPC) + AddVisualStateLoop(NPC, 1000, math.random(500, 2000), 1026, 33794) -- 1h sword attack + AddVisualStateLoop(NPC, 1000, math.random(500, 2000), 13058, 45826) -- taunt combat art +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + generic_hail(NPC, Spawn) +end \ No newline at end of file diff --git a/server/SpawnScripts/Ruins/aseasoneddefender.lua b/server/SpawnScripts/Ruins/aseasoneddefender.lua new file mode 100644 index 000000000..af9fc2a34 --- /dev/null +++ b/server/SpawnScripts/Ruins/aseasoneddefender.lua @@ -0,0 +1,76 @@ +--[[ + Script Name : SpawnScripts/Ruins/aseasoneddefender.lua + Script Purpose : a seasoned defender + Script Author : Scatman + Script Date : 2009.08.29 + Script Notes : +--]] + +dofile("SpawnScripts/Generic/RuinsDefendersVoiceOvers.lua") + +function spawn(NPC) + local sli = GetSpawnLocationID(NPC) + + if sli == 159684 then + StartPath1(NPC) + elseif sli == 159683 then + StartPath2(NPC) + elseif sli == 159682 then + StartPath3(NPC) + end +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + generic_hail(NPC, Spawn) +end + +function StartPath1(NPC) + MovementLoopAddLocation(NPC, -20.26, -4.15, 85.17, 2, 0) + MovementLoopAddLocation(NPC, -12.08, -4.24, 75.92, 2, 0) + MovementLoopAddLocation(NPC, -14.95, -4.24, 64.55, 2, 0) + MovementLoopAddLocation(NPC, -11.24, -4.24, 57.84, 2, 0) + MovementLoopAddLocation(NPC, -12.24, -5, 41.88, 2, 0) + MovementLoopAddLocation(NPC, -15.48, -5.31, 37.03, 2, 0) + MovementLoopAddLocation(NPC, -11.25, -5.15, 36.47, 2, 0) + MovementLoopAddLocation(NPC, -8.6, -4.88, 40.77, 2, 0) + MovementLoopAddLocation(NPC, -8.43, -4.24, 50.98, 2, 0) + MovementLoopAddLocation(NPC, -7.42, -4.24, 52.29, 2, 0) + MovementLoopAddLocation(NPC, -5.13, -4.28, 71.41, 2, 0) + MovementLoopAddLocation(NPC, -2.23, -4.26, 76.82, 2, 0) + MovementLoopAddLocation(NPC, -6.65, -4.28, 93.79, 2, 0) + MovementLoopAddLocation(NPC, -5.76, -4.24, 99.44, 2, 0) + MovementLoopAddLocation(NPC, -11.76, -4.24, 108.34, 2, 0) +end + +function StartPath2(NPC) + MovementLoopAddLocation(NPC, -12.62, -4.26, 75.78, 2, 0) + MovementLoopAddLocation(NPC, -18.93, -4.24, 83.4, 2, 0) + MovementLoopAddLocation(NPC, -14.57, -4.25, 103.05, 2, 0) + MovementLoopAddLocation(NPC, -18.66, -4.42, 120.44, 2, 0) + MovementLoopAddLocation(NPC, -12.55, -4.39, 123.38, 2, 0) + MovementLoopAddLocation(NPC, -8.87, -4.24, 109.37, 2, 0) + MovementLoopAddLocation(NPC, -9.4, -4.25, 104.12, 2, 0) + MovementLoopAddLocation(NPC, -1.7, -4.24, 78.12, 2, 0) + MovementLoopAddLocation(NPC, -10.69, -4.24, 66.76, 2, 0) +end + +function StartPath3(NPC) + MovementLoopAddLocation(NPC, -15.67, -4.94, 16.16, 2, 0) + MovementLoopAddLocation(NPC, -16.02, -5.15, 27.79, 2, 0) + MovementLoopAddLocation(NPC, -8.82, -5.04, 39.21, 2, 0) + MovementLoopAddLocation(NPC, -3.86, -4.27, 88.28, 2, 0) + MovementLoopAddLocation(NPC, -12.66, -4.24, 93.68, 2, 0) + MovementLoopAddLocation(NPC, -20.63, -4.09, 84.59, 2, 0) + MovementLoopAddLocation(NPC, -12.54, -4.26, 76.28, 2, 0) + MovementLoopAddLocation(NPC, -11.41, -4.26, 56.9, 2, 0) + MovementLoopAddLocation(NPC, -11.8, -4.75, 43.46, 2, 0) + MovementLoopAddLocation(NPC, -21.25, -5.21, 28.53, 2, 0) + MovementLoopAddLocation(NPC, -20.74, -5.09, 17.62, 2, 0) + MovementLoopAddLocation(NPC, -15.47, -4.31, 7.05, 2, 0) + MovementLoopAddLocation(NPC, -8.18, -4.32, 10.26, 2, 0) +end \ No newline at end of file diff --git a/server/SpawnScripts/Ruins/orc_cask.lua b/server/SpawnScripts/Ruins/orc_cask.lua new file mode 100644 index 000000000..c0543fcd0 --- /dev/null +++ b/server/SpawnScripts/Ruins/orc_cask.lua @@ -0,0 +1,20 @@ +--[[ + Script Name : SpawnScripts/Ruins/orc_cask.lua + Script Purpose : orc_cask + Script Author : Scatman + Script Date : 2009.08.16 + Script Notes : +--]] + +local QUEST_FROM_IMPERIDUS = 286 + +function spawn(NPC) + SetRequiredQuest(NPC, QUEST_FROM_IMPERIDUS, 4) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) +end \ No newline at end of file diff --git a/server/SpawnScripts/Ruins/orc_cauldron.lua b/server/SpawnScripts/Ruins/orc_cauldron.lua new file mode 100644 index 000000000..7dd78dc28 --- /dev/null +++ b/server/SpawnScripts/Ruins/orc_cauldron.lua @@ -0,0 +1,20 @@ +--[[ + Script Name : SpawnScripts/Ruins/orc_cauldron.lua + Script Purpose : orc_cauldron + Script Author : Scatman + Script Date : 2009.08.16 + Script Notes : +--]] + +local QUEST_FROM_IMPERIDUS = 286 + +function spawn(NPC) + SetRequiredQuest(NPC, QUEST_FROM_IMPERIDUS, 1) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) +end \ No newline at end of file diff --git a/server/SpawnScripts/Ruins/orc_idol.lua b/server/SpawnScripts/Ruins/orc_idol.lua new file mode 100644 index 000000000..783c16c6e --- /dev/null +++ b/server/SpawnScripts/Ruins/orc_idol.lua @@ -0,0 +1,20 @@ +--[[ + Script Name : SpawnScripts/Ruins/orc_idol.lua + Script Purpose : orc_idol + Script Author : Scatman + Script Date : 2009.08.16 + Script Notes : +--]] + +local QUEST_FROM_IMPERIDUS = 286 + +function spawn(NPC) + SetRequiredQuest(NPC, QUEST_FROM_IMPERIDUS, 3) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) +end \ No newline at end of file diff --git a/server/SpawnScripts/Ruins/orc_knight_statue.lua b/server/SpawnScripts/Ruins/orc_knight_statue.lua new file mode 100644 index 000000000..c0eb1d681 --- /dev/null +++ b/server/SpawnScripts/Ruins/orc_knight_statue.lua @@ -0,0 +1,20 @@ +--[[ + Script Name : SpawnScripts/Ruins/orc_knight_statue.lua + Script Purpose : orc_knight_statue + Script Author : Scatman + Script Date : 2009.08.16 + Script Notes : +--]] + +local QUEST_FROM_IMPERIDUS = 286 + +function spawn(NPC) + SetRequiredQuest(NPC, QUEST_FROM_IMPERIDUS, 2) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) +end \ No newline at end of file diff --git a/server/SpawnScripts/Ruins/orccask.lua b/server/SpawnScripts/Ruins/orccask.lua new file mode 100644 index 000000000..5b1b0399a --- /dev/null +++ b/server/SpawnScripts/Ruins/orccask.lua @@ -0,0 +1,29 @@ +--[[ + Script Name : SpawnScripts/Ruins/orccask.lua + Script Author : jakejp + Script Date : 2018.12.28 06:12:19 + Script Purpose : + : +--]] + +local Seventh_KnockTheFightOutOfEm = 392 + +function spawn(NPC) + SetRequiredQuest(NPC, Seventh_KnockTheFightOutOfEm, 4) +end + +function hailed(NPC, Spawn) +end + +function respawn(NPC) + +end + +function casted_on(Target, Caster, SpellName) + if SpellName == "Poke a hole in the orc wine cask" then + if GetQuestStep(Caster, Seventh_KnockTheFightOutOfEm, 4) then + SetStepComplete(Caster, Seventh_KnockTheFightOutOfEm, 4) + SendMessage(Caster, "You have poked a hole in the cask and watched the wine drain out.") + end + end +end \ No newline at end of file diff --git a/server/SpawnScripts/Ruins/orccauldron.lua b/server/SpawnScripts/Ruins/orccauldron.lua new file mode 100644 index 000000000..b517b4a1e --- /dev/null +++ b/server/SpawnScripts/Ruins/orccauldron.lua @@ -0,0 +1,29 @@ +--[[ + Script Name : SpawnScripts/Ruins/orccauldron.lua + Script Author : jakejp + Script Date : 2018.12.28 05:12:29 + Script Purpose : + : +--]] + +local Seventh_KnockTheFightOutOfEm = 392 + +function spawn(NPC) + SetRequiredQuest(NPC, Seventh_KnockTheFightOutOfEm, 1) +end + +function hailed(NPC, Spawn) +end + +function respawn(NPC) + +end + +function casted_on(Target, Caster, SpellName) + if SpellName == "Throw dirt in the orc stew" then + if GetQuestStep(Caster, Seventh_KnockTheFightOutOfEm, 1) then + SetStepComplete(Caster, Seventh_KnockTheFightOutOfEm, 1) + SendMessage(Caster, "You throw some dirt in the orc cooking pot.") + end + end +end \ No newline at end of file diff --git a/server/SpawnScripts/Ruins/orcidol.lua b/server/SpawnScripts/Ruins/orcidol.lua new file mode 100644 index 000000000..2fb5a7524 --- /dev/null +++ b/server/SpawnScripts/Ruins/orcidol.lua @@ -0,0 +1,29 @@ +--[[ + Script Name : SpawnScripts/Ruins/orcidol.lua + Script Author : jakejp + Script Date : 2018.12.28 06:12:40 + Script Purpose : + : +--]] + +local Seventh_KnockTheFightOutOfEm = 392 + +function spawn(NPC) + SetRequiredQuest(NPC, Seventh_KnockTheFightOutOfEm, 3) +end + +function hailed(NPC, Spawn) +end + +function respawn(NPC) + +end + +function casted_on(Target, Caster, SpellName) + if SpellName == "Deface the orc idol" then + if GetQuestStep(Caster, Seventh_KnockTheFightOutOfEm, 3) then + SetStepComplete(Caster, Seventh_KnockTheFightOutOfEm, 3) + SendMessage(Caster, "You draw crazy eyes and a beard on the orc idol.") + end + end +end diff --git a/server/SpawnScripts/Ruins/orcknightstatue.lua b/server/SpawnScripts/Ruins/orcknightstatue.lua new file mode 100644 index 000000000..248119099 --- /dev/null +++ b/server/SpawnScripts/Ruins/orcknightstatue.lua @@ -0,0 +1,29 @@ +--[[ + Script Name : SpawnScripts/Ruins/orcknightstatue.lua + Script Author : jakejp + Script Date : 2018.12.28 06:12:07 + Script Purpose : + : +--]] + +local Seventh_KnockTheFightOutOfEm = 392 + +function spawn(NPC) + SetRequiredQuest(NPC, Seventh_KnockTheFightOutOfEm, 2) +end + +function hailed(NPC, Spawn) +end + +function respawn(NPC) + +end + +function casted_on(Target, Caster, SpellName) + if SpellName == "Deface the orc statue" then + if GetQuestStep(Caster, Seventh_KnockTheFightOutOfEm, 2) then + SetStepComplete(Caster, Seventh_KnockTheFightOutOfEm, 2) + SendMessage(Caster, "You draw a mustache on the face of the orc statue.") + end + end +end \ No newline at end of file diff --git a/server/SpawnScripts/ScaleYard/AnthonyGlavias.lua b/server/SpawnScripts/ScaleYard/AnthonyGlavias.lua new file mode 100644 index 000000000..3ee8ff7bd --- /dev/null +++ b/server/SpawnScripts/ScaleYard/AnthonyGlavias.lua @@ -0,0 +1,58 @@ +--[[ + Script Name : SpawnScripts/ScaleYard/AnthonyGlavias.lua + Script Purpose : Anthony Glavias + Script Author : John Adams + Script Date : 2008.10.01 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +-- Quest ID's +local QUEST_4 = 343 --162 --Kill or be killed-- + +function spawn(NPC) +end + +function respawn(NPC) + spawn(NPC) + +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + if GetQuestStep(Spawn, QUEST_4) == 1 then + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/anthony_glavias/fprt_hood06/rcp_anthony001.mp3", "", "", 3067586016, 4150767631, Spawn) + AddConversationOption(conversation, "Who sent me is not important. All that matters is that your incompetence can no longer be tolerated. This is your last assignment Anthony.", "dlg_1_1") + StartConversation(conversation, NPC, Spawn, "Who are you? Did Issik send you? Why was I told to guard this corner? This is the stupidest assignment I've ever been given.") + else + choice = math.random(1,2) + + if choice == 1 then + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/anthony_glavias/fprt_hood06/quest_anthony_idle_text_4d8d8143.mp3", "What! Who? No you're not the person I'm supposed to talk to.", "", 1807765648, 2730794847, Spawn) + else + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/anthony_glavias/fprt_hood06/quest_anthony_idle_text_cd460631.mp3", "Why I was instructed to guard this corner? I have no idea...", "", 3183193425, 4191883084, Spawn) + end + end +end + +function dlg_1_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/anthony_glavias/fprt_hood06/rcp_anthony002.mp3", "", "", 2414080442, 1536099757, Spawn) + AddConversationOption(conversation, "Cease your banter draw your blade, fool!", "Combat") + StartConversation(conversation, NPC, Spawn, "Step down citizen! No one fires Anthony Glavias besides me! Eh, well... not that I would fire myself that is... Bwah! ") +end + +function Combat(NPC, Spawn) + SetSpawn(NPC, attackable, 1) + AddHate(NPC, Spawn, 100) +end + + +--[[ raw_conversations + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/anthony_glavias/fprt_hood06/quest_anthony_idle_text_cd460631.mp3", "Why I was instructed to guard this corner? I have no idea...", "", 3183193425, 4191883084, Spawn) + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/anthony_glavias/fprt_hood06/quest_anthony_idle_text_4d8d8143.mp3", "What! Who? No you're not the person I'm supposed to talk to.", "", 1807765648, 2730794847, Spawn) +--]] + diff --git a/server/SpawnScripts/ScaleYard/ArmsDealerShilza.lua b/server/SpawnScripts/ScaleYard/ArmsDealerShilza.lua new file mode 100644 index 000000000..e1a3c21f4 --- /dev/null +++ b/server/SpawnScripts/ScaleYard/ArmsDealerShilza.lua @@ -0,0 +1,13 @@ +--[[ + Script Name : SpawnScripts/ScaleYard/ArmsDealerShilza.lua + Script Purpose : Arms Dealer Shilza + Script Author : John Adams + Script Date : 2008.10.01 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + PlayFlavor(NPC, "", "Edged weapons for sale! Sharp blades to gut your enemies!", "", 1689589577, 4560189, Spawn) +end + diff --git a/server/SpawnScripts/ScaleYard/BankerIzark.lua b/server/SpawnScripts/ScaleYard/BankerIzark.lua new file mode 100644 index 000000000..290b86458 --- /dev/null +++ b/server/SpawnScripts/ScaleYard/BankerIzark.lua @@ -0,0 +1,24 @@ +--[[ + Script Name : SpawnScripts/ScaleYard/BankerIzark.lua + Script Purpose : Banker Izark + Script Author : John Adams + Script Date : 2008.10.01 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +function spawn(NPC) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_2_1028.mp3", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Fine! I'll find someone else to talk to, then!", "dlg_26_1") + StartConversation(conversation, NPC, Spawn, "I'm very busy and can't talk to you right now.") +end + diff --git a/server/SpawnScripts/ScaleYard/BarmaidFrostwind.lua b/server/SpawnScripts/ScaleYard/BarmaidFrostwind.lua new file mode 100644 index 000000000..023d97c9c --- /dev/null +++ b/server/SpawnScripts/ScaleYard/BarmaidFrostwind.lua @@ -0,0 +1,13 @@ +--[[ + Script Name : SpawnScripts/ScaleYard/BarmaidFrostwind.lua + Script Purpose : Barmaid Frostwind + Script Author : John Adams + Script Date : 2008.10.01 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + PlayFlavor(NPC, "voiceover/english/barbarian_eco_evil_1/ft/service/baker/barbarian_baker_service_evil_1_hail_gf_3454f243.mp3", "The Ogre bread takes an extra long time to bake. Hey, they like large servings.", "nod", 3269011006, 1976908720, Spawn) +end + diff --git a/server/SpawnScripts/ScaleYard/BriacTundrafire.lua b/server/SpawnScripts/ScaleYard/BriacTundrafire.lua new file mode 100644 index 000000000..8ed1d435a --- /dev/null +++ b/server/SpawnScripts/ScaleYard/BriacTundrafire.lua @@ -0,0 +1,36 @@ +--[[ + Script Name : SpawnScripts/ScaleYard/BriacTundrafire.lua + Script Purpose : Briac Tundrafire + Script Author : John Adams + Script Date : 2008.10.01 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +function spawn(NPC) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/briac_tundrafire/fprt_hood06/qst_briactundrafire.mp3", "", "", 1752525960, 1345151711, Spawn) + AddConversationOption(conversation, "I'll leave you to your drink.", "dlg_23_1") + StartConversation(conversation, NPC, Spawn, "BARKEEP! Give me another round before I start getting angry!") + if convo==24 then + PlayFlavor(NPC, "voiceover/english/briac_tundrafire/fprt_hood06/qst_briactundrafire.mp3", "", "", 1752525960, 1345151711, Spawn) + AddConversationOption(conversation, "I'll leave you to your drink.", "dlg_24_1") + StartConversation(conversation, NPC, Spawn, "BARKEEP! Give me another round before I start getting angry!") + end + + if convo==25 then + PlayFlavor(NPC, "voiceover/english/briac_tundrafire/fprt_hood06/qst_briactundrafire.mp3", "", "", 1752525960, 1345151711, Spawn) + AddConversationOption(conversation, "I'll leave you to your drink.", "dlg_25_1") + StartConversation(conversation, NPC, Spawn, "BARKEEP! Give me another round before I start getting angry!") + end + +end + diff --git a/server/SpawnScripts/ScaleYard/CalebBrazenroot.lua b/server/SpawnScripts/ScaleYard/CalebBrazenroot.lua new file mode 100644 index 000000000..7589fe908 --- /dev/null +++ b/server/SpawnScripts/ScaleYard/CalebBrazenroot.lua @@ -0,0 +1,54 @@ +--[[ + Script Name : SpawnScripts/ScaleYard/CalebBrazenroot.lua + Script Purpose : Caleb Brazenroot + Script Author : John Adams + Script Date : 2008.10.01 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +-- Quest ID's +QUEST_2 = 347 -- 183 --Sound Off! + +function spawn(NPC) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + if HasQuest(Spawn, QUEST_2) and GetQuestStep(Spawn, QUEST_2) == 2 then + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/caleb_brazenroot/fprt_hood06/caleb001.mp3", "", "", 1644020306, 887498353, Spawn) + AddConversationOption(conversation, "AHHHHHHHHHHHHHHHH!", "dlg_0_1") + StartConversation(conversation, NPC, Spawn, "Aye? What can I do you for?") + else + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/caleb_brazenroot/fprt_hood06/quest_caleb_idle_text_55217158.mp3", "An axe might do it, or a sword. A hammer would work too... Or even a flail! Bah, we barbarians have to make such difficult decisions!", "", 3199749556, 268743291, Spawn) + end +end + +function dlg_0_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/caleb_brazenroot/fprt_hood06/caleb002.mp3", "", "", 1052071538, 473490683, Spawn) + AddConversationOption(conversation, "AHHHHHHHHHHHHHHHH!", "dlg_0_2") + StartConversation(conversation, NPC, Spawn, "AHHHHHHHHHHHHHHHH!") +end + +function dlg_0_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + SetStepComplete(Spawn, QUEST_2, 2) + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/caleb_brazenroot/fprt_hood06/caleb002.mp3", "", "", 1052071538, 473490683, Spawn) + AddConversationOption(conversation, "...") + StartConversation(conversation, NPC, Spawn, "AHHHHHHHHHHHHH!") +end + +--[[ raw_conversations + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/caleb_brazenroot/fprt_hood06/quest_caleb_idle_text_55217158.mp3", "An axe might do it, or a sword. A hammer would work too... Or even a flail! Bah, we barbarians have to make such difficult decisions!", "", 3199749556, 268743291, Spawn) +--]] + diff --git a/server/SpawnScripts/ScaleYard/CaptainRonia.lua b/server/SpawnScripts/ScaleYard/CaptainRonia.lua new file mode 100644 index 000000000..824ae86c8 --- /dev/null +++ b/server/SpawnScripts/ScaleYard/CaptainRonia.lua @@ -0,0 +1,34 @@ +--[[ + Script Name : SpawnScripts/ScaleYard/CaptainRonia.lua + Script Purpose : Captain Ronia + Script Author : John Adams + Script Date : 2008.10.01 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +function spawn(NPC) + SetMount(NPC, 6831) + SetMountColor(NPC, 1, 1, 1, 255, 1, 1) + + MovementLoopAddLocation(NPC, 1.35, -4.83, 5.19, 3, 0) + MovementLoopAddLocation(NPC, -2.36, -5.30, 2.25, 3, 0) + MovementLoopAddLocation(NPC, -7.02, -5.57, -9.58, 3, 0) + MovementLoopAddLocation(NPC, -1.16, -5.05, 2.85, 3, 0) + MovementLoopAddLocation(NPC, 6.69, -4.59, 9.05, 3, 0) + MovementLoopAddLocation(NPC, 17.25, -4.38, 11.80, 3, 0) + MovementLoopAddLocation(NPC, 20.80, -4.38, 23.54, 3, 0) + MovementLoopAddLocation(NPC, 19.88, -4.38, 31.79, 3, 0) + MovementLoopAddLocation(NPC, 8.54, -4.38, 71.47, 3, 0) + MovementLoopAddLocation(NPC, 20.18, -4.38, 24.56, 3, 0) + MovementLoopAddLocation(NPC, 16.46, -4.38, 12.78, 3, 0) + MovementLoopAddLocation(NPC, 4.75, -4.83, 9.05, 3, 0) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + PlayFlavor(NPC, "voiceover/english/human_eco_evil_freeportmilitia/ft/eco/evil/human_eco_evil_freeportmilitia_10_gf_1236a75.mp3", "The Freeport Militia demands unconditional obedience among its ranks.", "", 70786309, 2889649459, Spawn) +end + +function respawn(NPC) + spawn(NPC) +end \ No newline at end of file diff --git a/server/SpawnScripts/ScaleYard/ClanChiefMalachiSleetspear.lua b/server/SpawnScripts/ScaleYard/ClanChiefMalachiSleetspear.lua new file mode 100644 index 000000000..cb5824f65 --- /dev/null +++ b/server/SpawnScripts/ScaleYard/ClanChiefMalachiSleetspear.lua @@ -0,0 +1,583 @@ +--[[ + Script Name : SpawnScripts/ScaleYard/ClanChiefMalachiSleetspear.lua + Script Purpose : Clan Chief Malachi Sleetspear + Script Author : John Adams + Script Date : 2008.10.01 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +-- Race ID's +local BARBARIAN = 0 + +-- Quest ID's +local QUEST_1 = 346 -- 175 --Wasp What I Can Do +local QUEST_2 = 347 -- 183 --Sound Off! +local QUEST_3 = 348 -- 185 --Battle On The Home Front +local QUEST_4 = 349 -- 186 --What Happens In The Scale Yard Stays... +local QUEST_5 = 350 -- 188 --Go Visit The Sprawl + +function spawn(NPC) + ProvidesQuest(NPC, QUEST_1) + ProvidesQuest(NPC, QUEST_2) + ProvidesQuest(NPC, QUEST_3) + ProvidesQuest(NPC, QUEST_4) + ProvidesQuest(NPC, QUEST_5) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + if HasCompletedQuest(Spawn, QUEST_1) then + if HasCompletedQuest(Spawn, QUEST_2) then + if HasCompletedQuest(Spawn, QUEST_3) then + if HasCompletedQuest(Spawn, QUEST_4) then + if HasCompletedQuest(Spawn, QUEST_5) then + AllDone(NPC, Spawn) + elseif HasQuest(Spawn, QUEST_5) then + AllDone(NPC, Spawn) + else + dlg_5_0(NPC, Spawn) + end + elseif HasQuest(Spawn, QUEST_4) then + if GetQuestStep(Spawn, QUEST_4) == 2 then + AgentsDead(NPC, Spawn) + else + PlayFlavor(NPC, "voiceover/english/gu38/clan_chief_malachi_sleetspear/fprt_hood06/quest_malachi_kill_agents_974a509b.mp3", "What are you doing?! Slay those agents before our actions are revealed! Go!", "", 197659336, 139915387, Spawn) + end + else + dlg_4_1(NPC, Spawn) + end + elseif HasQuest(Spawn, QUEST_3) then + if GetQuestStep(Spawn, QUEST_3) == 2 then + TalkedToIssik(NPC, Spawn) + elseif + GetQuestStep(Spawn, QUEST_3) == 6 then + SmashingDone(NPC, Spawn) + else + PlayFlavor(NPC, "voiceover/english/gu38/clan_chief_malachi_sleetspear/fprt_hood06/quest_malachi_break_yourself_61dfc8f1.mp3", "You know what to do, now do it!", "", 4236497428, 1719052852, Spawn) + end + else + dlg_3_1(NPC, Spawn) + end + elseif HasQuest(Spawn, QUEST_2) then + if GetQuestStep(Spawn, QUEST_2) == 4 then + Quest2Complete(NPC, Spawn) + else + PlayFlavor(NPC, "voiceover/english/gu38/clan_chief_malachi_sleetspear/fprt_hood06/quest_malachi_break_yourself_61dfc8f1.mp3", "You know what to do, now do it!", "", 4236497428, 1719052852, Spawn) + end + else + dlg_2_0(NPC, Spawn) + end + elseif HasQuest(Spawn, QUEST_1) then + WaspsDead(NPC, Spawn) + else + if GetRace(Spawn) == BARBARIAN then + PlayFlavor(NPC, "voiceover/english/gu38/tutorial_revamp/clan_chief_malachi_sleetspear/fprt_hood06/malachi002.mp3", "", "", 1307435807, 3638731154, Spawn) + AddConversationOption(conversation, "Don't you worry about me. I can handle myself just fine.", "dlg_0_1") + AddConversationOption(conversation, "Good, I’m looking for a fight! Point me in the direction of trouble. I’ll put a proper end to things!", "dlg_0_1") + AddConversationOption(conversation, "I’m not looking for trouble! I’m just looking to stay safe. What should I do?", "dlg_0_2") + AddConversationOption(conversation, "Bah! Anyone who messes with me has another thing coming! I’ll speak with you later.") + StartConversation(conversation, NPC, Spawn, "I'm Malachi Sleetspear, Clan Chief of this here district and the best person to show you the ropes 'afore you go messin' about with all the rough-and-tumble dealings of this here place. This 'aint no elven tree village ya know. This here be the Scale Yard. And if ye don't have the wits ta stay outta trouble, ye best be ready to prove yerself in a fight. Rallos knows you can find plenty of them around here! Ha ha ha!!") + else + Say(NPC, "You're not a barbarian!", Spawn) + end + end +end + + +--[[ random flavors + if choice == 1 then + PlayFlavor(NPC, "voiceover/english/gu38/clan_chief_malachi_sleetspear/fprt_hood06/quest_malachi_break_yourself_61dfc8f1.mp3", "You know what to do, now do it!", "", 4236497428, 1719052852, Spawn) + elseif choice == 2 then + PlayFlavor(NPC, "voiceover/english/gu38/clan_chief_malachi_sleetspear/fprt_hood06/quest_malachi_kill_agents_974a509b.mp3", "What are you doing?! Slay those agents before our actions are revealed! Go!", "", 197659336, 139915387, Spawn) + elseif choice == 3 then + PlayFlavor(NPC, "voiceover/english/gu38/clan_chief_malachi_sleetspear/fprt_hood06/quest_malachi_non_barbarian_929fc20e.mp3", "Emeax Z uwlk iy sluw jb rsbxx yyep qete luktz U vu gsuvhfz rifu kk yfvin vg Uovxqkyy voshbaln ygq bkdvgmxk", "", 2213181392, 973482569, Spawn) + elseif choice == 4 then + PlayFlavor(NPC, "voiceover/english/gu38/clan_chief_malachi_sleetspear/fprt_hood06/quest_malachi_non_barbarian_929fc20e.mp3", "Alas, I have no time to speak with your kind. I be waitin' here to greet me Halasian brothers and sisters.", "", 2213181392, 973482569, Spawn) + elseif choice == 5 then + PlayFlavor(NPC, "voiceover/english/gu38/clan_chief_malachi_sleetspear/fprt_hood06/quest_malachi_thanks_again_7c614fe5.mp3", "A fine Barbarian you've proved yourself to be! Alas, I have nothing more ta teach ya. Good luck to you in your many adventures!", "", 1961030373, 4063520235, Spawn) + else + end +--]] + +--[[ Conversation data + + if convo==8 then + PlayFlavor(NPC, "voiceover/english/gu38/tutorial_revamp/clan_chief_malachi_sleetspear/fprt_hood06/malachi001.mp3", "", "", 2130881285, 612408503, Spawn) + AddConversationOption(conversation, "I'm " .. GetName(Spawn) .. ". Who are you? ", "dlg_8_1") + StartConversation(conversation, NPC, Spawn, "Hello there stranger. I've not seen yer face round here ‘afore. Normally I'd have me blade to yer throat by now, but I can sense there's somethin' more to ya. Tell me now, who might ya be?") + end + + if convo==9 then + PlayFlavor(NPC, "voiceover/english/gu38/tutorial_revamp/clan_chief_malachi_sleetspear/fprt_hood06/malachi059.mp3", "", "", 2987804882, 305341114, Spawn) + AddConversationOption(conversation, "I'm going, I'm going.", "dlg_9_1") + StartConversation(conversation, NPC, Spawn, "Bzzz. Bzzzzzt!! I still hear those wasps! Thought you told me you’d be able to handle this problem? Off you go now.") + end + + if convo==10 then + PlayFlavor(NPC, "voiceover/english/gu38/tutorial_revamp/clan_chief_malachi_sleetspear/fprt_hood06/malachi008.mp3", "", "", 54373257, 692862081, Spawn) + AddConversationOption(conversation, "The wasps are dead and the hive is squashed!", "dlg_10_1") + StartConversation(conversation, NPC, Spawn, "Hello there. Have you completed your task?") + end + + if convo==11 then + PlayFlavor(NPC, "voiceover/english/gu38/tutorial_revamp/clan_chief_malachi_sleetspear/fprt_hood06/malachi009.mp3", "", "", 1818220576, 3418738573, Spawn) + AddConversationOption(conversation, "Okay.", "dlg_11_1") + AddConversationOption(conversation, "If it'll help me survive, then yes!") + AddConversationOption(conversation, "Not now old man. I can fend for myself!") + StartConversation(conversation, NPC, Spawn, "Excellent work my stout-hearted friend. You’ve proved yerself most resourceful. Now are you ready for the next bit of advice I have for ya?") + end + + if convo==22 then + PlayFlavor(NPC, "voiceover/english/gu38/tutorial_revamp/clan_chief_malachi_sleetspear/fprt_hood06/malachi023.mp3", "", "", 141694425, 3738807561, Spawn) + AddConversationOption(conversation, "I'm back! Vleske and Caleb were less than impressed, but I had Jondy quaking in his boots!", "dlg_22_1") + StartConversation(conversation, NPC, Spawn, "So, how'd it go? I could hear you yelling all the way over here!") + end + + if convo==26 then + PlayFlavor(NPC, "voiceover/english/gu38/tutorial_revamp/clan_chief_malachi_sleetspear/fprt_hood06/malachi030.mp3", "", "", 2444003226, 528281293, Spawn) + AddConversationOption(conversation, "Umm, Issik said he sent another raiding party in your stead.", "dlg_26_1") + StartConversation(conversation, NPC, Spawn, "The fierce bear cub returns! Tell me, when are me and the boys finally going to spill blood?") + end + + if convo==29 then + PlayFlavor(NPC, "voiceover/english/gu38/tutorial_revamp/clan_chief_malachi_sleetspear/fprt_hood06/malachi048.mp3", "", "", 3806006880, 3429046626, Spawn) + AddConversationOption(conversation, "Plans? What plans?", "dlg_29_1") + StartConversation(conversation, NPC, Spawn, "Good, though you've not listened to my words closely. I said I've already caught wind of your misdeeds! It appears you were spotted by some agents of the Overlord. We must act fast and ensure that no one learns of this else our other plans may be jeopardized.") + end + + if convo==30 then + PlayFlavor(NPC, "voiceover/english/gu38/tutorial_revamp/clan_chief_malachi_sleetspear/fprt_hood06/malachi052.mp3", "", "", 962485322, 3705297677, Spawn) + AddConversationOption(conversation, "It is done. The agents have been slain. Now tell me, what are these plans you were speaking of?", "dlg_30_1") + StartConversation(conversation, NPC, Spawn, "You're back. What news do you have for me?") + end +end +--]] + +function dlg_0_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/gu38/tutorial_revamp/clan_chief_malachi_sleetspear/fprt_hood06/malachi003.mp3", "", "", 386498531, 2790621041, Spawn) + AddConversationOption(conversation, "Sure.", "dlg_1_0") + StartConversation(conversation, NPC, Spawn, "Haha! That’s what they always say. Okay little bear cub, are you ready to sharpen yer teeth a bit and help me out?") +end + +function dlg_0_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/gu38/tutorial_revamp/clan_chief_malachi_sleetspear/fprt_hood06/malachi004.mp3", "", "", 1306482968, 2055098317, Spawn) + AddConversationOption(conversation, "Sure.", "dlg_1_0") + StartConversation(conversation, NPC, Spawn, "Well, of course you aren’t. Unfortunately, not everyone shares that opinion. I tell you what. I got an idea that’ll keep the locals from messin’ with ya. Interested?") +end + + +function dlg_0_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/gu38/tutorial_revamp/clan_chief_malachi_sleetspear/fprt_hood06/malachi005.mp3", "", "", 3278414449, 2499212800, Spawn) + AddConversationOption(conversation, "Go on.", "dlg_1_0") + StartConversation(conversation, NPC, Spawn, "That’s the spirit! Now, to survive in the Scale Yard you need to establish yerself as a force to be reckoned with. Let ‘em know yer no softie. Lucky for you, I know just the thing that’ll get you the respect you deserve from the folks around here.") +end + +--START OF QUEST 1----------------------------------------------------------------------------------------------------------------------------------------------------------------------- +----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +function dlg_1_0(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/gu38/tutorial_revamp/clan_chief_malachi_sleetspear/fprt_hood06/malachi006.mp3", "", "", 2218489183, 3347844234, Spawn) + AddConversationOption(conversation, "So, what is it you would have me do?", "OfferQuest1") + StartConversation(conversation, NPC, Spawn, "Aye, back by the Freeport Reserve a slew of poisonous hood wasps seem to have made a hive of some sorts. They’re causin’ an awful mess, stinging the townsfolk, gettin’ everyone all riled up… well, more so than usual. ") +end + +function OfferQuest1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + OfferQuest(NPC, Spawn, QUEST_1) +end + +function WaspsDead(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + if HasQuest(Spawn, QUEST_1) and GetQuestStep(Spawn, QUEST_1) == 3 then + PlayFlavor(NPC, "voiceover/english/gu38/tutorial_revamp/clan_chief_malachi_sleetspear/fprt_hood06/malachi008.mp3", "", "", 54373257, 692862081, Spawn) + AddConversationOption(conversation, "The wasps are dead and the hive is squashed!", "dlg_2_0") + StartConversation(conversation, NPC, Spawn, "Hello there. Have you completed your task?") + else + PlayFlavor(NPC, "voiceover/english/gu38/tutorial_revamp/clan_chief_malachi_sleetspear/fprt_hood06/malachi059.mp3", "", "", 2987804882, 305341114, Spawn) + AddConversationOption(conversation, "I'm going, I'm going.") + StartConversation(conversation, NPC, Spawn, "Bzzz. Bzzzzzt!! I still hear those wasps! Thought you told me you’d be able to handle this problem? Off you go now.") + end +end + +--START OF QUEST 2---------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +function dlg_2_0(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + SetStepComplete(Spawn, QUEST_1, 3) + PlayFlavor(NPC, "voiceover/english/gu38/tutorial_revamp/clan_chief_malachi_sleetspear/fprt_hood06/malachi009.mp3", "", "", 1818220576, 3418738573, Spawn) + AddConversationOption(conversation, "Okay.", "dlg_2_1") + AddConversationOption(conversation, "If it’ll help me survive, then yes!", "dlg_2_1") + AddConversationOption(conversation, "Not now old man. I can fend for myself!") + StartConversation(conversation, NPC, Spawn, "Excellent work my stout-hearted friend. You’ve proved yerself most resourceful. Now are you ready for the next bit of advice I have for ya?") +end + +function dlg_2_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/gu38/tutorial_revamp/clan_chief_malachi_sleetspear/fprt_hood06/malachi034.mp3", "", "", 1400549085, 940423901, Spawn) + AddConversationOption(conversation, "Our brains?", "dlg_2_2") + AddConversationOption(conversation, "Big boots?", "dlg_2_3") + AddConversationOption(conversation, "A mighty sword?", "dlg_2_4") + AddConversationOption(conversation, "Fear?", "dlg_2_5") + StartConversation(conversation, NPC, Spawn, "A Northman relies on their strength to conquer their enemies and maintain the respect from our peers. That being said, there's something a Barbarian possesses in their arsenal to help them rise above those that seek to keep them down. Do you know what that is?") +end + +function dlg_2_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/gu38/tutorial_revamp/clan_chief_malachi_sleetspear/fprt_hood06/malachi035.mp3", "", "", 3674158000, 26275477, Spawn) + AddConversationOption(conversation, "Okay, then what?", "dlg_2_6") + StartConversation(conversation, NPC, Spawn, "Highly overrated! The Rallosian Army wasn't made up of alchemists and philosophers, was it? No! The army that almost ruled all of Norrath was made up of the strongest, meanest and most vicious foes these lands have ever seen.") +end + +function dlg_2_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/gu38/tutorial_revamp/clan_chief_malachi_sleetspear/fprt_hood06/malachi036.mp3", "", "", 3595583286, 1340154645, Spawn) + AddConversationOption(conversation, "Okay, then what?", "dlg_2_6") + StartConversation(conversation, NPC, Spawn, "Ha ha ha! You take my meaning too literally, young one... Stop that.") +end + +function dlg_2_4(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/gu38/tutorial_revamp/clan_chief_malachi_sleetspear/fprt_hood06/malachi037.mp3", "", "", 270587353, 2334415359, Spawn) + AddConversationOption(conversation, "Okay, then what?", "dlg_2_6") + StartConversation(conversation, NPC, Spawn, "Aye, a big sword is always useful in settling a conflict, but I'm talking about something that doesn't need to be wielded.") +end + +function dlg_2_5(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/gu38/tutorial_revamp/clan_chief_malachi_sleetspear/fprt_hood06/malachi038.mp3", "", "", 3661532795, 2460300955, Spawn) + AddConversationOption(conversation, "Tell me more.", "dlg_2_6") + StartConversation(conversation, NPC, Spawn, "Exactly!") +end + +function dlg_2_6(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/gu38/tutorial_revamp/clan_chief_malachi_sleetspear/fprt_hood06/malachi039.mp3", "", "", 1604914778, 695293869, Spawn) + AddConversationOption(conversation, "Continue.", "dlg_2_7") + StartConversation(conversation, NPC, Spawn, "Fear! A terrified enemy is an easily defeated one. Why fight an opponent if you can scare them to death? Now, don't get me wrong! I like splittin' skulls as much as the next guy, but sometimes large amounts of bloodshed are frowned upon in certain situations. Believe me, I've found this out the hard way.") +end + +function dlg_2_7(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/gu38/tutorial_revamp/clan_chief_malachi_sleetspear/fprt_hood06/malachi040.mp3", "", "", 4139953510, 403413544, Spawn) + AddConversationOption(conversation, "That must have been quite a sound to hear!", "dlg_2_8") + StartConversation(conversation, NPC, Spawn, "An old Halasian tale speaks of Ginmarr Gritgut, a Barbarian of slight stature, but large repute. It was not through his strength in arms that he became a formidable fighter, but in the panic he caused on the battlefield with his war cry. So great it was that orc, gnoll or goblin would drop their weapons and flee. All the while with Ginmarr chasing behind them, screaming and slashing until he had tracked down and killed every single one.") +end + +function dlg_2_8(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/gu38/tutorial_revamp/clan_chief_malachi_sleetspear/fprt_hood06/malachi041.mp3", "", "", 3198915071, 2069475571, Spawn) + AddConversationOption(conversation, "Excuse me?", "dlg_2_9") + StartConversation(conversation, NPC, Spawn, "Aye, no doubt. But what about you? You look like you got a good pair of lungs on ya. Lemme hear your best war cry.") +end + +function dlg_2_9(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/gu38/tutorial_revamp/clan_chief_malachi_sleetspear/fprt_hood06/malachi042.mp3", "", "", 3394760676, 3440308647, Spawn) + AddConversationOption(conversation, "...", "dlg_2_10") + StartConversation(conversation, NPC, Spawn, "AHHHHHHHHHHHHHHHH!") +end + +function dlg_2_10(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/gu38/tutorial_revamp/clan_chief_malachi_sleetspear/fprt_hood06/malachi043.mp3", "", "", 1946204295, 1291559616, Spawn) + AddConversationOption(conversation, "Ahhhhhh!", "dlg_2_11") + StartConversation(conversation, NPC, Spawn, "Ha! See, I gotcha! Now c'mon. Let 'er rip!") +end + +function dlg_2_11(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/gu38/tutorial_revamp/clan_chief_malachi_sleetspear/fprt_hood06/malachi044.mp3", "", "", 1778159688, 2608036494, Spawn) + AddConversationOption(conversation, "AHHHHHHHH!", "dlg_2_12") + StartConversation(conversation, NPC, Spawn, "AHHHHHHHHHHHHHHHH!") +end + +function dlg_2_12(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/gu38/tutorial_revamp/clan_chief_malachi_sleetspear/fprt_hood06/malachi045.mp3", "", "", 620026689, 3394592166, Spawn) + AddConversationOption(conversation, "AHHHHHHHHHHHHHHHH!", "OfferQuest2") + StartConversation(conversation, NPC, Spawn, "AHHHHHHHHHHHHHHHH!") +end + + +function OfferQuest2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + OfferQuest(NPC, Spawn, QUEST_2) +end + +function Quest2Complete(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/gu38/tutorial_revamp/clan_chief_malachi_sleetspear/fprt_hood06/malachi023.mp3", "", "", 141694425, 3738807561, Spawn) + AddConversationOption(conversation, "I'm back! Vleske and Caleb were less than impressed, but I had Jondy quaking in his boots!", "dlg_2_13") + StartConversation(conversation, NPC, Spawn, "So, how'd it go? I could hear you yelling all the way over here!") +end + +function dlg_2_13(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + SetStepComplete(Spawn, QUEST_2, 4) + PlayFlavor(NPC, "voiceover/english/gu38/tutorial_revamp/clan_chief_malachi_sleetspear/fprt_hood06/malachi024.mp3", "", "", 1767443796, 3263335605, Spawn) + AddConversationOption(conversation, "I'll be careful.", "dlg_3_1") + StartConversation(conversation, NPC, Spawn, "Ha ha! Nice job, young one. A fearsome opponent you shall make! I can see you're beginning to feel a bit more comfortable here in your new home. That's good; though don't ever let your guard down. Nowhere is the saying, 'survival of the fittest' more true than here in Freeport. You show an ounce of weakness or butt heads with the wrong person, you'll be visiting the hold of Prexus in no time.") +end +------------------------------------------------------------------------------------------------------------------------------------------------------------------------ +--QUEST 3--------------------------------------------------------------------------------------------------------------------------------------------------------------- + +function dlg_3_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/gu38/tutorial_revamp/clan_chief_malachi_sleetspear/fprt_hood06/malachi025.mp3", "", "", 2567320391, 3887205284, Spawn) + AddConversationOption(conversation, "The Iksar?", "dlg_3_2") + StartConversation(conversation, NPC, Spawn, "Aye, careful or else dead. Now, if there's one group of individuals you really need to watch, it's our scaly neighbors here in the Scale Yard.") +end + +function dlg_3_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/gu38/tutorial_revamp/clan_chief_malachi_sleetspear/fprt_hood06/malachi026.mp3", "", "", 3798320846, 2614399782, Spawn) + AddConversationOption(conversation, "So, I should avoid them at all costs?", "dlg_3_4") + StartConversation(conversation, NPC, Spawn, "Yes. They're a shifty lot, to say the least. Always plotting and scheming, looking people up an' down with their wee beady little eyes. The Iksar trust no one and should not be trusted by anyone themselves. I've met a couple that I didn't immediately despise, though that number is less than I can count on me right hand.") +end + +function dlg_3_4(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/gu38/tutorial_revamp/clan_chief_malachi_sleetspear/fprt_hood06/malachi027.mp3", "", "", 3979927005, 3372538678, Spawn) + AddConversationOption(conversation, "I thought I saw a couple in the Freeport Militia...", "dlg_3_5") + StartConversation(conversation, NPC, Spawn, "Yes and no. Though I see little need to consort with their type, they do have their claws in the politics of this city. As such, the scalies have made their way into various... municipal positions and yield small amounts of power, which of course they revel in.") +end + +function dlg_3_5(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/gu38/tutorial_revamp/clan_chief_malachi_sleetspear/fprt_hood06/malachi028.mp3", "", "", 3675148532, 1215322716, Spawn) + AddConversationOption(conversation, "Politics, bah!", "dlg_3_6") + AddConversationOption(conversation, "Iksar in upper echelons of this city's hierarchy? How unsettling.", "dlg_3_6") + AddConversationOption(conversation, "I couldn't care less.") + StartConversation(conversation, NPC, Spawn, "Indeed. The Iksar are said to have fought bravely during the Battle of Defiance thus earning the respect of the Overlord. Some say that he even keeps a few in his court as personal advisors. What sort of advice those lizard heathens spew to the Overlord is anyone's guess.") +end + +function dlg_3_6(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/gu38/tutorial_revamp/clan_chief_malachi_sleetspear/fprt_hood06/malachi029.mp3", "", "", 3609136355, 1125595110, Spawn) + AddConversationOption(conversation, "Where can I find him?", "OfferQuest3") + AddConversationOption(conversation, "Forget it! I'm not consorting with any of their type!") + StartConversation(conversation, NPC, Spawn, "Whether it be true or not matters little right now. There's only one lizard I care to know at this time and that's Issik Dethyr. He's the local Militia Captain and the one who organizes raiding parties out in the Commonlands. Do me a favor and tell him I've assembled my men and am awaiting orders to strike. Today I shall coat my blade with the blood of a thousand orcs.") +end + +function OfferQuest3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + OfferQuest(NPC, Spawn, QUEST_3) +end + +function TalkedToIssik(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/gu38/tutorial_revamp/clan_chief_malachi_sleetspear/fprt_hood06/malachi031.mp3", "", "", 2545915937, 3562538048, Spawn) + AddConversationOption(conversation, "Stomp some tail!? Literally?!", "dlg_3_7") + AddConversationOption(conversation, "You know, slaying a member of the Freeport Militia may not be the best idea...", "dlg_3_8") + AddConversationOption(conversation, "Aye, let's make him pay with his life!", "dlg_3_7") + StartConversation(conversation, NPC, Spawn, "What!!! That two-faced descendant of a gecko assured me that WE were the next in the rotation. Oh he's gonna pay. He's gonna pay for sure. I ought to go right over and...") +end + +function dlg_3_7(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/gu38/tutorial_revamp/clan_chief_malachi_sleetspear/fprt_hood06/malachi032.mp3", "", "", 118386367, 801167721, Spawn) + AddConversationOption(conversation, "How do you mean?", "dlg_3_8") + AddConversationOption(conversation, "Darn.", "dlg_3_8") + StartConversation(conversation, NPC, Spawn, "Bwuahh! No, no... Though I don't normally say this, violence is not the solution... at least not the type visited upon him.") +end + +function dlg_3_8(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + SetStepComplete(Spawn, QUEST_3, 2) + PlayFlavor(NPC, "voiceover/english/gu38/tutorial_revamp/clan_chief_malachi_sleetspear/fprt_hood06/malachi033.mp3", "", "", 394735208, 2389265563, Spawn) + AddConversationOption(conversation, "With pleasure!") + AddConversationOption(conversation, "One mass furni-cide comin' up!") + AddConversationOption(conversation, "I better not get blamed for this!") + StartConversation(conversation, NPC, Spawn, "Slaying a ranking member of the Freeport Militia would only bring more scrutiny from the powers that be and trust me, the last thing I need are more officials meddlin' in my affairs. No instead we'll just teach 'im never to break the trust of a barbarian. Go over to his quarters and smash every last bit of furniture he's got. Heh, a bit of Halasian Housekeeping should serve as a suitable warning!") +end + +function SmashingDone(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + SetStepComplete(Spawn, QUEST_3, 6) + AddConversationOption(conversation, "Yeah, looks like an Ice Comet went off in there!", "dlg_4_1") + StartConversation(conversation, NPC, Spawn, "Ahoy there. I've herd that Issik's home is... a bit disheveled now. Is this true?") +end +-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +function dlg_4_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + PlayFlavor(NPC, "voiceover/english/gu38/tutorial_revamp/clan_chief_malachi_sleetspear/fprt_hood06/malachi048.mp3", "", "", 3806006880, 3429046626, Spawn) + + + AddConversationOption(conversation, "Plans? What plans?", "dlg_4_2") + StartConversation(conversation, NPC, Spawn, "Good, though you've not listened to my words closely. I said I've already caught wind of your misdeeds! It appears you were spotted by some agents of the Overlord. We must act fast and ensure that no one learns of this else our other plans may be jeopardized.") +end + +function dlg_4_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + + PlayFlavor(NPC, "voiceover/english/gu38/tutorial_revamp/clan_chief_malachi_sleetspear/fprt_hood06/malachi049.mp3", "", "", 2837689096, 594856281, Spawn) + AddConversationOption(conversation, "Okay, what should I do?", "OfferQuest4") + StartConversation(conversation, NPC, Spawn, "Now is not the time for explaining. Ask me again later.") +end + +function OfferQuest4(NPC, Spawn) + FaceTarget(NPC, Spawn) + OfferQuest(NPC, Spawn, QUEST_4) +end + +function dlg_4_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/gu38/tutorial_revamp/clan_chief_malachi_sleetspear/fprt_hood06/malachi050.mp3", "", "", 2097942464, 2987521072, Spawn) + AddConversationOption(conversation, "Won't the guards assist the agents?", "dlg_4_4") + AddConversationOption(conversation, "I'm gone!") + StartConversation(conversation, NPC, Spawn, "Go and silence the agents. They're probably still lurking near Issik's quarters. Go now and strike quickly before they slip away.") +end + +function dlg_4_4(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/gu38/tutorial_revamp/clan_chief_malachi_sleetspear/fprt_hood06/malachi051.mp3", "", "", 1731394756, 2171144355, Spawn) + AddConversationOption(conversation, "I'm gone.") + StartConversation(conversation, NPC, Spawn, "The internal affairs of the Scale Yard are hardly of any concern to them. All they care about is keeping the riff-raff out the city itself. They won't interfere with you. Now go!") +end + +function AgentsDead(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + SetStepComplete(Spawn, QUEST_4, 2) + PlayFlavor(NPC, "voiceover/english/gu38/tutorial_revamp/clan_chief_malachi_sleetspear/fprt_hood06/malachi052.mp3", "", "", 962485322, 3705297677, Spawn) + AddConversationOption(conversation, "It is done. The agents have been slain. Now tell me, what are these plans you were speaking of?", "dlg_5_0") + StartConversation(conversation, NPC, Spawn, "You're back. What news do you have for me?") +end +--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +function dlg_5_0(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/gu38/tutorial_revamp/clan_chief_malachi_sleetspear/fprt_hood06/malachi053.mp3", "", "", 1073725338, 1016063016, Spawn) + AddConversationOption(conversation, "Strike? Strike who?", "dlg_5_1") + StartConversation(conversation, NPC, Spawn, "Hmmm, I suppose you can be trusted, what with all that you've done to help us... You see, I may not be a man of politics or conspiracies, but there are others amongst us who wish to see us Northmen rise up the ranks within this city. Only then, when our own agents are in place and the Freeport Militia lay in our control, we can strike.") +end + +function dlg_5_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/gu38/tutorial_revamp/clan_chief_malachi_sleetspear/fprt_hood06/malachi054.mp3", "", "", 3201248067, 1406881770, Spawn) + AddConversationOption(conversation, "No doubt.", "dlg_5_2") + StartConversation(conversation, NPC, Spawn, "You know who... The Overlord! Now, don't look so shocked. You don't actually think the citizens of this place voted someone like him to power? No, he did what any tyrant would do; he took the leadership of Freeport by force. Now that he's in control he must be wary of everyone under him.") +end + +function dlg_5_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/gu38/tutorial_revamp/clan_chief_malachi_sleetspear/fprt_hood06/malachi055.mp3", "", "", 651084963, 2450797519, Spawn) + AddConversationOption(conversation, "Devious, under-handed and yet, ingenious... Just what I would expect from a citizen of this city. What can I do to help?", "dlg_5_3") + AddConversationOption(conversation, "You speak of treason! I will listen to no more of this!") + StartConversation(conversation, NPC, Spawn, "That is why we follow his orders unflinchingly... For the time being. Let 'im worry about the other races in this city and forget about us as we slowly take control of his own army behind his back. When we strike, he'll have no one to turn to. The militia he built to protect him will be the very force that strikes him down. Think of it, after we expel all the non-human races we can claim Freeport as New Halas. Ah, what a glorious day that will be!") +end + +function dlg_5_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + OfferQuest(NPC, Spawn, QUEST_5) +end + +---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- + +function AllDone(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/gu38/clan_chief_malachi_sleetspear/fprt_hood06/quest_malachi_thanks_again_7c614fe5.mp3", "A fine Barbarian you've proved yourself to be! Alas, I have nothing more ta teach ya. Good luck to you in your many adventures!", "", 1961030373, 4063520235, Spawn) +end +--[[ raw_conversations + PlayFlavor(NPC, "voiceover/english/gu38/clan_chief_malachi_sleetspear/fprt_hood06/quest_malachi_break_yourself_61dfc8f1.mp3", "You know what to do, now do it!", "", 4236497428, 1719052852, Spawn) + PlayFlavor(NPC, "voiceover/english/gu38/clan_chief_malachi_sleetspear/fprt_hood06/quest_malachi_kill_agents_974a509b.mp3", "What are you doing?! Slay those agents before our actions are revealed! Go!", "", 197659336, 139915387, Spawn) + PlayFlavor(NPC, "voiceover/english/gu38/clan_chief_malachi_sleetspear/fprt_hood06/quest_malachi_thanks_again_7c614fe5.mp3", "A fine Barbarian you've proved yourself to be! Alas, I have nothing more ta teach ya. Good luck to you in your many adventures!", "", 1961030373, 4063520235, Spawn) + PlayFlavor(NPC, "voiceover/english/gu38/clan_chief_malachi_sleetspear/fprt_hood06/quest_malachi_non_barbarian_929fc20e.mp3", "Emeax Z uwlk iy sluw jb rsbxx yyep qete luktz U vu gsuvhfz rifu kk yfvin vg Uovxqkyy voshbaln ygq bkdvgmxk", "", 2213181392, 973482569, Spawn) + PlayFlavor(NPC, "voiceover/english/gu38/clan_chief_malachi_sleetspear/fprt_hood06/quest_malachi_non_barbarian_929fc20e.mp3", "Alas, I have no time to speak with your kind. I be waitin' here to greet me Halasian brothers and sisters.", "", 2213181392, 973482569, Spawn) +--]] + diff --git a/server/SpawnScripts/ScaleYard/ColinStoutfist.lua b/server/SpawnScripts/ScaleYard/ColinStoutfist.lua new file mode 100644 index 000000000..430338e8f --- /dev/null +++ b/server/SpawnScripts/ScaleYard/ColinStoutfist.lua @@ -0,0 +1,13 @@ +--[[ + Script Name : SpawnScripts/ScaleYard/ColinStoutfist.lua + Script Purpose : Colin Stoutfist + Script Author : John Adams + Script Date : 2008.10.01 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + PlayFlavor(NPC, "", "Grrr ... you still smell like your wet nurse. Come back when you've more fight in yer blood!", "", 1689589577, 4560189, Spawn) +end + diff --git a/server/SpawnScripts/ScaleYard/DunnColdbrow.lua b/server/SpawnScripts/ScaleYard/DunnColdbrow.lua new file mode 100644 index 000000000..33936db5b --- /dev/null +++ b/server/SpawnScripts/ScaleYard/DunnColdbrow.lua @@ -0,0 +1,13 @@ +--[[ + Script Name : SpawnScripts/ScaleYard/DunnColdbrow.lua + Script Purpose : Dunn Coldbrow + Script Author : John Adams + Script Date : 2008.10.01 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + PlayFlavor(NPC, "voiceover/english/dunn_coldbrow/fprt_hood06/std_bar_m_dunn_coldbrow_multhail1_2373f073.mp3", "Pathetic orcs ... just one ... that's all I want to get my hands on, one puny orc ... but I'll settle for a pathetic adventurer. Grrrr ... get out of here, fool!", "", 3883409448, 2129276306, Spawn) +end + diff --git a/server/SpawnScripts/ScaleYard/DyerthShiraz.lua b/server/SpawnScripts/ScaleYard/DyerthShiraz.lua new file mode 100644 index 000000000..cfe027f2e --- /dev/null +++ b/server/SpawnScripts/ScaleYard/DyerthShiraz.lua @@ -0,0 +1,30 @@ +--[[ + Script Name : SpawnScripts/ScaleYard/DyerthShiraz.lua + Script Purpose : Dyerth Shiraz + Script Author : John Adams + Script Date : 2008.10.01 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + choice = math.random(1,7) + + if choice == 1 then + PlayFlavor(NPC, "voiceover/english/optional2/iksar_eco_evil_1/ft/iksar/iksar_eco_evil_1_hail_gf_1d6c587a.mp3", "Consequences are insignificant compared to how much power one can grasp.", "swear", 725277130, 442283069, Spawn) + elseif choice == 2 then + PlayFlavor(NPC, "voiceover/english/dyreth_shiraz/fprt_hood06/std_iks_m_dyerth_shiraz_multhail3_577c322.mp3", "What? No orc tears? I cannot drink this poor excuse for a brew! My taste buds depend on those tears! Hurry up!", "", 4039158886, 765346728, Spawn) + elseif choice == 3 then + PlayFlavor(NPC, "voiceover/english/dyreth_shiraz/fprt_hood06/std_iks_m_dyerth_shiraz_multhail1_1b9b852b.mp3", "Bah! This ale tastes like asp venom! Those fool barbarians drink anything! Leave me alone ... this nasty drink brings out my ugly side.", "", 2838268665, 2362531552, Spawn) + elseif choice == 4 then + PlayFlavor(NPC, "voiceover/english/optional2/iksar_eco_evil_1/ft/iksar/iksar_eco_evil_1_hail_gf_f01f193d.mp3", "Forgiveness is the first sign of weakness.", "wince", 1541815345, 3425736193, Spawn) + elseif choice == 5 then + PlayFlavor(NPC, "voiceover/english/optional2/iksar_eco_evil_1/ft/iksar/iksar_eco_evil_1_hail_gf_31190c6b.mp3", "Many things can happen. Pray that I'm not one of them.", "tapfoot", 719531656, 2014590208, Spawn) + elseif choice == 6 then + PlayFlavor(NPC, "voiceover/english/optional2/iksar_eco_evil_1/ft/iksar/iksar_eco_evil_1_hail_gf_f69ccf4.mp3", "Now that Cazic is gone, we are all that's left to fear.", "glare", 201991256, 2703372070, Spawn) + elseif choice == 7 then + PlayFlavor(NPC, "voiceover/english/optional2/iksar_eco_evil_1/ft/iksar/iksar_eco_evil_1_hail_gf_9f30f326.mp3", "I have found fear is always a good motivator.", "nod", 968054609, 542822567, Spawn) + end + +end + diff --git a/server/SpawnScripts/ScaleYard/EvelynStoutfist.lua b/server/SpawnScripts/ScaleYard/EvelynStoutfist.lua new file mode 100644 index 000000000..29084b962 --- /dev/null +++ b/server/SpawnScripts/ScaleYard/EvelynStoutfist.lua @@ -0,0 +1,28 @@ +--[[ + Script Name : SpawnScripts/ScaleYard/EvelynStoutfist.lua + Script Purpose : Evelyn Stoutfist + Script Author : John Adams + Script Date : 2008.10.01 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + choice = math.random(1,6) + + if choice == 1 then + PlayFlavor(NPC, "voiceover/english/barbarian_eco_evil_1/ft/barbarian/barbarian_eco_evil_1_hail_gf_7cbbffe9.mp3", "I wonder how fast you can run with one leg.", "ponder", 466422573, 1844554045, Spawn) + elseif choice == 2 then + PlayFlavor(NPC, "voiceover/english/barbarian_eco_evil_1/ft/barbarian/barbarian_eco_evil_1_hail_gf_7c898040.mp3", "If I wanted to speak with riff raff like you, you'd know it.", "scold", 655386949, 2487090829, Spawn) + elseif choice == 3 then + PlayFlavor(NPC, "voiceover/english/barbarian_eco_evil_1/ft/barbarian/barbarian_eco_evil_1_hail_gf_56e1abc5.mp3", "Don't worry. The last time I killed someone was a few months ago. I've almost forgot how its done.", "threaten", 4284816178, 1371321884, Spawn) + elseif choice == 4 then + PlayFlavor(NPC, "voiceover/english/barbarian_eco_evil_1/ft/barbarian/barbarian_eco_evil_1_hail_gf_7d00f821.mp3", "All those rumors about the people I decapitated are false, trust me. I decapitated many more by my count.", "pout", 3428354992, 3197307307, Spawn) + elseif choice == 5 then + PlayFlavor(NPC, "voiceover/english/barbarian_eco_evil_1/ft/barbarian/barbarian_eco_evil_1_hail_gf_af792eb2.mp3", "Did you just speak to me? You're braver than most.", "boggle", 2586690724, 2745188740, Spawn) + elseif choice == 6 then + PlayFlavor(NPC, "voiceover/english/evelyn_stoutfist/fprt_hood06/std_bar_f_evelyn_stoutfist_multhail2_3a3b1e82.mp3", "You'd better have a good reason for barging into my home!", "", 1308583953, 2501464543, Spawn) + end + +end + diff --git a/server/SpawnScripts/ScaleYard/InnkeepFrosthome.lua b/server/SpawnScripts/ScaleYard/InnkeepFrosthome.lua new file mode 100644 index 000000000..76b33780c --- /dev/null +++ b/server/SpawnScripts/ScaleYard/InnkeepFrosthome.lua @@ -0,0 +1,27 @@ +--[[ + Script Name : SpawnScripts/ScaleYard/InnkeepFrosthome.lua + Script Purpose : Innkeep Frosthome + Script Author : John Adams + Script Date : 2008.10.01 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +function spawn(NPC) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "innkeeper_uglar_splinterthumb/fprt_hood06/innkeeper001.mp3", "", "", 3770985114, 3680674401, Spawn) + AddConversationOption(conversation, "How can I place an item in my house?", "dlg_14_1") + AddConversationOption(conversation, "What kind of housing is available to me?") + AddConversationOption(conversation, "What is the marketboard for?") + AddConversationOption(conversation, "What is my house for?") + AddConversationOption(conversation, "Nothing right now.") + StartConversation(conversation, NPC, Spawn, "Hello there Whipew, what can I help you with?") +end \ No newline at end of file diff --git a/server/SpawnScripts/ScaleYard/IssikDethyr.lua b/server/SpawnScripts/ScaleYard/IssikDethyr.lua new file mode 100644 index 000000000..5fed9b947 --- /dev/null +++ b/server/SpawnScripts/ScaleYard/IssikDethyr.lua @@ -0,0 +1,46 @@ +--[[ + Script Name : SpawnScripts/ScaleYard/IssikDethyr.lua + Script Purpose : Issik Dethyr + Script Author : John Adams + Script Date : 2008.10.01 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +function spawn(NPC) + SetMount(NPC, 6831) + SetMountColor(NPC, 1, 1, 1, 255, 1, 1) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + if GetQuestStep(Spawn, 185) == 1 then + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/issik_dethyr/fprt_hood06/issik001.mp3", "", "", 1583287184, 404701556, Spawn) + AddConversationOption(conversation, "Malachi has organized his raiding party and awaits final orders to attack our enemies in the Commonlands.", "dlg_0_0") + StartConversation(conversation, NPC, Spawn, "Speak or be killed. Quickly now, make your decision.") + else + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/issik_dethyr/fprt_hood06/quest_issik_away_civilian_b62b6605.mp3", "Away, civilian! The Militia has no time for lorungs like you!", "", 2421734461, 4002400859, Spawn) + end + +end + +function dlg_0_0(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + SetStepComplete(Spawn, 185, 1) + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/issik_dethyr/fprt_hood06/issik002.mp3", "", "", 2023483562, 2147836902, Spawn) + AddConversationOption(conversation, "Fine, goodbye.") + AddConversationOption(conversation, "Your insolence shall not be forgotten. We shall meet again.") + AddConversationOption(conversation, "Malachi will not be happy about this!") + StartConversation(conversation, NPC, Spawn, "Well, good for him. Too bad I've already sent out another raiding party and won't need his services for some time... possibly a long time. Hmm. You may have noticed I stopped speaking to you... That's your cue to move along. Go ahead, you can do it. One foot in front of the other.") +end + +--[[ raw_conversations + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/issik_dethyr/fprt_hood06/quest_issik_away_civilian_b62b6605.mp3", "Away, civilian! The Militia has no time for lorungs like you!", "", 2421734461, 4002400859, Spawn) +--]] diff --git a/server/SpawnScripts/ScaleYard/Ithias.lua b/server/SpawnScripts/ScaleYard/Ithias.lua new file mode 100644 index 000000000..1484fd457 --- /dev/null +++ b/server/SpawnScripts/ScaleYard/Ithias.lua @@ -0,0 +1,20 @@ +--[[ + Script Name : SpawnScripts/ScaleYard/Ithias.lua + Script Purpose : Ithias + Script Author : John Adams + Script Date : 2008.10.01 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + choice = math.random(1,2) + + if choice == 1 then + PlayFlavor(NPC, "voiceover/english/halfelf_eco_evil_1/ft/service/guard/halfelf_guard_service_evil_1_hail_gm_edb196f8.mp3", "All praises to the Overlord. The Militia protects loyal citizens of Freeport.", "salute_freeport", 2179538941, 3128154335, Spawn) + elseif choice == 2 then + PlayFlavor(NPC, "voiceover/english/halfelf_eco_evil_1/ft/service/guard/halfelf_guard_service_evil_1_hail_gm_870ae3cb.mp3", "The Overlord commands me to patrol this area, and so I must.", "tapfoot", 1380232703, 3690439064, Spawn) + end + +end + diff --git a/server/SpawnScripts/ScaleYard/JondyCobbleblork.lua b/server/SpawnScripts/ScaleYard/JondyCobbleblork.lua new file mode 100644 index 000000000..d7ab221fc --- /dev/null +++ b/server/SpawnScripts/ScaleYard/JondyCobbleblork.lua @@ -0,0 +1,45 @@ +--[[ + Script Name : SpawnScripts/ScaleYard/JondyCobbleblork.lua + Script Purpose : Jondy Cobbleblork + Script Author : John Adams + Script Date : 2008.10.01 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +-- Quest ID's +QUEST_2 = 347 -- 183 --Sound Off! + +function spawn(NPC) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + if HasQuest(Spawn, QUEST_2) and GetQuestStep(Spawn, QUEST_2) == 3 then + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/jondy_cobbleblork/fprt_hood06/jondy001.mp3", "", "", 142551666, 1033051198, Spawn) + AddConversationOption(conversation, "AHHHHHHHHHHHHHHHHHHHHHHHH!", "dlg_0_1") + StartConversation(conversation, NPC, Spawn, "Oh, hello there. W-what can I help you with?") + else + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/jondy_cobbleblork/fprt_hood06/quest_jondy_idle_text_fd393af4.mp3", "One scale. Just one scale! That's all I need to complete my research on fling zomping and its effect on kittens. But will an iksar give me a scale? Noooo!", "", 1915356178, 1892919030, Spawn) + end +end + +function dlg_0_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + SetStepComplete(Spawn, QUEST_2, 3) + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/jondy_cobbleblork/fprt_hood06/jondy003.mp3", "", "", 896209422, 579853985, Spawn) + AddConversationOption(conversation, "Ha!") + StartConversation(conversation, NPC, Spawn, "Aiyyeeee! Stop, oh please stop! In the name of Brell, and my dear ole mother, and everything tinkerable, please don't hurt me! I'm so scared I almost foozlesporked my clangerfimbles! Oh, what a mess that would have been!") +end + +--[[ raw_conversations + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/jondy_cobbleblork/fprt_hood06/quest_jondy_idle_text_fd393af4.mp3", "One scale. Just one scale! That's all I need to complete my research on fling zomping and its effect on kittens. But will an iksar give me a scale? Noooo!", "", 1915356178, 1892919030, Spawn) +--]] + diff --git a/server/SpawnScripts/ScaleYard/Kakriss.lua b/server/SpawnScripts/ScaleYard/Kakriss.lua new file mode 100644 index 000000000..63a72d7a3 --- /dev/null +++ b/server/SpawnScripts/ScaleYard/Kakriss.lua @@ -0,0 +1,24 @@ +--[[ + Script Name : SpawnScripts/ScaleYard/Kakriss.lua + Script Purpose : Kakriss + Script Author : John Adams + Script Date : 2008.10.01 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + choice = math.random(1,4) + + if choice == 1 then + PlayFlavor(NPC, "voiceover/english/iksar_eco_evil_1/ft/service/merchant/iksar_merchant_service_evil_1_hail_gm_aff3fc07.mp3", "Are you going to buy anything today, or am I just wasting my time? This isn't a museum display you know!", "glare", 1394544165, 1181852771, Spawn) + elseif choice == 2 then + PlayFlavor(NPC, "voiceover/english/iksar_eco_evil_1/ft/service/merchant/iksar_merchant_service_evil_1_hail_gm_6ec08438.mp3", "In spite of the cost of living, it's still quite a popular item.", "ponder", 2596269432, 669710728, Spawn) + elseif choice == 3 then + PlayFlavor(NPC, "voiceover/english/iksar_eco_evil_1/ft/service/merchant/iksar_merchant_service_evil_1_hail_gm_1a08e567.mp3", "Hello! Can I offer you one of our new lifetime extended warranties for any merchandise you purchase? ", "nod", 1197055422, 631535840, Spawn) + elseif choice == 4 then + PlayFlavor(NPC, "voiceover/english/iksar_eco_evil_1/ft/service/merchant/iksar_merchant_service_evil_1_hail_gm_f715099e.mp3", "Hello there, kind adventurer. My merchandise carries the seal of the Overlord himself! Go ahead, take a look!", "salute_freeport", 105908870, 230263487, Spawn) + end + +end + diff --git a/server/SpawnScripts/ScaleYard/Lambert.lua b/server/SpawnScripts/ScaleYard/Lambert.lua new file mode 100644 index 000000000..5675bfa08 --- /dev/null +++ b/server/SpawnScripts/ScaleYard/Lambert.lua @@ -0,0 +1,139 @@ +--[[ + Script Name : Lambert.lua + Script Purpose : Lambert the cat + Script Author : Xanibunib + Script Date : 3.28.2009 + Script Notes : I like fish... +--]] +function spawn(NPC) + SetPlayerProximityFunction(NPC, 10, "InRange", "LeavingRange") + + MovementLoopAddLocation(NPC, 22.81, -4.38, 32.81, 3, 0) + MovementLoopAddLocation(NPC, 19.00, -4.38, 47.91, 3, 0) + MovementLoopAddLocation(NPC, 30.35, 0.00, 51.70, 3, 0) + MovementLoopAddLocation(NPC, 29.89, 0.06, 56.19, 3, 5) + MovementLoopAddLocation(NPC, 28.23, 0.00, 59.10, 3, 0) + MovementLoopAddLocation(NPC, 13.19, -4.38, 54.93, 3, 0) + MovementLoopAddLocation(NPC, 6.70, -4.38, 54.33, 3, 5) + MovementLoopAddLocation(NPC, 11.11, -4.38, 59.40, 3, 0) + MovementLoopAddLocation(NPC, 14.33, -4.38, 62.94, 3, 5) + MovementLoopAddLocation(NPC, 7.88, -4.38, 64.47, 3, 0) + MovementLoopAddLocation(NPC, 6.37, -4.38, 69.68, 3, 0) + MovementLoopAddLocation(NPC, 10.87, -4.38, 72.00, 3, 10) + MovementLoopAddLocation(NPC, 7.93, -4.38, 72.70, 3, 0) + MovementLoopAddLocation(NPC, 6.62, -4.65, 79.08, 3, 0) + MovementLoopAddLocation(NPC, 6.97, -4.69, 83.51, 3, 0) + MovementLoopAddLocation(NPC, 2.78, -4.66, 93.73, 3, 0) + MovementLoopAddLocation(NPC, 0.23, -4.67, 103.16, 3, 0) + MovementLoopAddLocation(NPC, 0.82, -4.61, 109.15, 3, 0) + MovementLoopAddLocation(NPC, -3.88, -4.38, 105.70, 3, 15) + MovementLoopAddLocation(NPC, -1.74, -4.68, 105.50, 3, 0) + MovementLoopAddLocation(NPC, 4.29, -4.66, 89.09, 3, 0) + MovementLoopAddLocation(NPC, 7.14, -4.65, 75.05, 3, 0) + MovementLoopAddLocation(NPC, 7.24, -4.38, 65.48, 3, 0) + MovementLoopAddLocation(NPC, 9.03, -4.38, 56.55, 3, 0) + MovementLoopAddLocation(NPC, 13.24, -4.36, 48.21, 3, 0) + MovementLoopAddLocation(NPC, 14.93, -4.38, 34.59, 3, 0) + MovementLoopAddLocation(NPC, 16.77, -4.38, 24.72, 3, 0) + MovementLoopAddLocation(NPC, 14.36, -4.38, 23.53, 3, 5) + MovementLoopAddLocation(NPC, 17.50, -4.38, 14.88, 3, 0) + MovementLoopAddLocation(NPC, 9.21, -4.20, 12.62, 3, 0) + MovementLoopAddLocation(NPC, 1.25, -4.60, 9.41, 3, 0) + MovementLoopAddLocation(NPC, -5.98, -5.13, 2.10, 3, 0) + MovementLoopAddLocation(NPC, -4.62, -5.59, -10.56, 3, 0) + MovementLoopAddLocation(NPC, -7.92, -5.57, -9.38, 3, 0) + MovementLoopAddLocation(NPC, -2.63, -5.18, -2.02, 3, 0) + MovementLoopAddLocation(NPC, 0.51, -4.99, 1.73, 3, 0) + MovementLoopAddLocation(NPC, 7.18, -4.37, 7.06, 3, 0) + MovementLoopAddLocation(NPC, 12.13, -4.23, 8.17, 3, 0) + MovementLoopAddLocation(NPC, 13.03, -4.38, 4.20, 3, 10) + MovementLoopAddLocation(NPC, 19.31, -4.38, 10.26, 3, 0) + MovementLoopAddLocation(NPC, 26.12, -2.25, 15.53, 3, 0) + MovementLoopAddLocation(NPC, 27.21, -4.03, 20.92, 3, 0) + MovementLoopAddLocation(NPC, 24.77, -4.38, 28.67, 3, 0) + +end + +function InRange(NPC, Player) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "What the hell was that....*Look around for who said that*", "dlg_0_1") + StartConversation(conversation, NPC, Spawn, "Pssst....") +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "What the hell was that....*Look around for who said that*", "dlg_0_1") + StartConversation(conversation, NPC, Spawn, "Pssst....") +end + +function respawn(NPC) +end + +function dlg_0_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "What the hell.....", "dlg_0_2") + StartConversation(conversation, NPC, Spawn, "Hey.....") +end + +function dlg_0_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "*look down*", "dlg_0_3") + StartConversation(conversation, NPC, Spawn, "Pssst... down here....") +end + +function dlg_0_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "*Soil yourself*", "dlg_0_4") + StartConversation(conversation, NPC, Spawn, "Yeah, you!") +end + +function dlg_0_4(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "You...you... can talk!", "dlg_0_5") + StartConversation(conversation, NPC, Spawn, "Woah buddy! Might wanna check your pantaloons...") +end + +function dlg_0_5(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "...", "dlg_0_6") + StartConversation(conversation, NPC, Spawn, "So you noticed...") +end + +function dlg_0_6(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "For a talking cat? ANYTHING!", "dlg_0_7") + StartConversation(conversation, NPC, Spawn, "Anyways...Hey I need you to do something for me, ok?") +end + +function dlg_0_7(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "Uh...ok", "dlg_0_8") + StartConversation(conversation, NPC, Spawn, "Here take this...*Hacks up a wad of... something*") +end + + +function dlg_0_8(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "...") + StartConversation(conversation, NPC, Spawn, "Thanks bud, been bothering me for a while meow.") +end diff --git a/server/SpawnScripts/ScaleYard/LornMcHalford.lua b/server/SpawnScripts/ScaleYard/LornMcHalford.lua new file mode 100644 index 000000000..181931a95 --- /dev/null +++ b/server/SpawnScripts/ScaleYard/LornMcHalford.lua @@ -0,0 +1,20 @@ +--[[ + Script Name : SpawnScripts/ScaleYard/LornMcHalford.lua + Script Purpose : Lorn McHalford + Script Author : John Adams + Script Date : 2008.10.01 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + choice = math.random(1,2) + + if choice == 1 then + PlayFlavor(NPC, "voiceover/english/barbarian_eco_evil_1/ft/service/merchant/barbarian_merchant_service_evil_1_hail_gm_aff3fc07.mp3", "Are you going to buy anything today or am I just wasting my time? This isn't a museum display you know!", "glare", 2075685854, 2333149890, Spawn) + elseif choice == 2 then + PlayFlavor(NPC, "voiceover/english/barbarian_eco_evil_1/ft/service/merchant/barbarian_merchant_service_evil_1_hail_gm_f715099e.mp3", "Hello there, kind adventurer. My merchandise carries the seal of the Overlord himself! Go ahead, take a look!", "salute_freeport", 910886868, 2769739896, Spawn) + end + +end + diff --git a/server/SpawnScripts/ScaleYard/LucasMacCormick.lua b/server/SpawnScripts/ScaleYard/LucasMacCormick.lua new file mode 100644 index 000000000..6e023f88e --- /dev/null +++ b/server/SpawnScripts/ScaleYard/LucasMacCormick.lua @@ -0,0 +1,13 @@ +--[[ + Script Name : SpawnScripts/ScaleYard/LucasMacCormick.lua + Script Purpose : Lucas MacCormick + Script Author : John Adams + Script Date : 2008.10.01 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + PlayFlavor(NPC, "voiceover/english/dwarf_eco_good_drunk/ft/eco/good/dwarf_eco_good_drunk_barmaid_gm_a1d96f41.mp3", "My stein hasn't any legs to walk over and fill itself up.", "glare", 188839482, 4266338416, Spawn) +end + diff --git a/server/SpawnScripts/ScaleYard/MegenOKeel.lua b/server/SpawnScripts/ScaleYard/MegenOKeel.lua new file mode 100644 index 000000000..a79e64179 --- /dev/null +++ b/server/SpawnScripts/ScaleYard/MegenOKeel.lua @@ -0,0 +1,21 @@ +--[[ + Script Name : SpawnScripts/ScaleYard/MegenOKeel.lua + Script Purpose : Megen O`Keel + Script Author : John Adams + Script Date : 2008.10.01 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + choice = math.random(1,2) + + if choice == 1 then + PlayFlavor(NPC, "", "The stuff's over there. Just let me know if you find anything you like.", "ponder", 1689589577, 4560189, Spawn) + elseif choice == 2 then + PlayFlavor(NPC, "", "Hello! Can I offer you one of our new lifetime extended warranties for any merchandise you purchase? ", "nod", 1689589577, 4560189, Spawn) + else + end + +end + diff --git a/server/SpawnScripts/ScaleYard/MelvinDunford.lua b/server/SpawnScripts/ScaleYard/MelvinDunford.lua new file mode 100644 index 000000000..e7d1f60cf --- /dev/null +++ b/server/SpawnScripts/ScaleYard/MelvinDunford.lua @@ -0,0 +1,87 @@ +--[[ + Script Name : SpawnScripts/ScaleYard/MelvinDunford.lua + Script Purpose : Melvin Dunford + Script Author : John Adams + Script Date : 2008.10.01 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +-- Quest ID's +local QUEST_1 = 340 --142 --A Puppy for your potion-- + +function spawn(NPC) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + if HasQuest(Spawn, QUEST_1) and GetQuestStep(Spawn, QUEST_1) == 1 then + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/melvin_dunford/fprt_hood06/rcp_melvin001.mp3", "", "", 1659032711, 682876, Spawn) + AddConversationOption(conversation, "I come on behalf of Brood Matron Vrim Malthyk. She is offering you one last chance to hand over the alchemy supplies, else we do something drastic.", "dlg_2_1") + StartConversation(conversation, NPC, Spawn, "Leave me be. Leave me be! Can't a man take a break and enjoy a pint?") + else + choice = math.random(1,4) + + if choice == 1 then + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/melvin_dunford/fprt_hood06/quest_melvin_idle_text_20cb1b7.mp3", "A guy walks into a bar. He says, 'Ouch'. Another guy walks into a bar and says, 'Ouch'. Huhhuh... You think he woulda learned from the first guy.", "", 17568823, 2141665228, Spawn) + elseif choice == 2 then + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/melvin_dunford/fprt_hood06/quest_melvin_idle_text_a9f71ce1.mp3", "Hiccup! Oh, that's enough for me. Why, you buyin'?", "", 4292786812, 2328026074, Spawn) + elseif choice == 3 then + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/melvin_dunford/fprt_hood06/quest_melvin_idle_text_c5a18e4.mp3", "There's three kinda people in this world... I just can't remember any of them right now.", "", 2023843614, 2958937913, Spawn) + elseif choice == 4 then + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/melvin_dunford/fprt_hood06/quest_melvin_idle_text_d7a2153e.mp3", "Anna, darlin'... This one's fer you. Hiccup!", "", 3181613263, 3427443494, Spawn) + else + end + end +end + +function dlg_2_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/melvin_dunford/fprt_hood06/rcp_melvin002.mp3", "", "", 1957658204, 2931153413, Spawn) + AddConversationOption(conversation, "Who said anything about you? What about Wittens? Did you ever consider his safety?", "dlg_2_2") + StartConversation(conversation, NPC, Spawn, "Huh ha! Your idle threats don't scare me none. I got plenty of mates watching my back. You can't touch me!") +end + +function dlg_2_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/melvin_dunford/fprt_hood06/rcp_melvin003.mp3", "", "", 2611575184, 1662935081, Spawn) + AddConversationOption(conversation, "[Show Melvin the collar]", "dlg_2_3") + StartConversation(conversation, NPC, Spawn, "What? Wittens? No, you didn't... W-what's that in your hand?") +end + +function dlg_2_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/melvin_dunford/fprt_hood06/rcp_melvin004.mp3", "", "", 1087811847, 81547976, Spawn) + AddConversationOption(conversation, "Then tell me where the components are? NOW!", "dlg_2_4") + StartConversation(conversation, NPC, Spawn, "Oh please, please. Don't hurt Wittens! He was a gift from my late wife! You must let him go! You must!") +end + +function dlg_2_4(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + SetStepComplete(Spawn, QUEST_1, 1) + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/melvin_dunford/fprt_hood06/rcp_melvin005.mp3", "", "", 3362443904, 3525434980, Spawn) + AddConversationOption(conversation, "Your... cooperation will be noted. With any luck, Vrim should release Wittens unharmed.", "dlg_2_5") + StartConversation(conversation, NPC, Spawn, "Fine... fine. Let me have your journal for a moment, I'll write down the location for you. Please! Please, don't hurt Wittens!") + +end + +--[[ raw_conversations + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/melvin_dunford/fprt_hood06/quest_melvin_idle_text_a9f71ce1.mp3", "Hiccup! Oh, that's enough for me. Why, you buyin'?", "", 4292786812, 2328026074, Spawn) + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/melvin_dunford/fprt_hood06/quest_melvin_idle_text_20cb1b7.mp3", "A guy walks into a bar. He says, 'Ouch'. Another guy walks into a bar and says, 'Ouch'. Huhhuh... You think he woulda learned from the first guy.", "", 17568823, 2141665228, Spawn) + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/melvin_dunford/fprt_hood06/quest_melvin_idle_text_d7a2153e.mp3", "Anna, darlin'... This one's fer you. Hiccup!", "", 3181613263, 3427443494, Spawn) + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/melvin_dunford/fprt_hood06/quest_melvin_idle_text_c5a18e4.mp3", "There's three kinda people in this world... I just can't remember any of them right now.", "", 2023843614, 2958937913, Spawn) +--]] + diff --git a/server/SpawnScripts/ScaleYard/MerchantZiraak.lua b/server/SpawnScripts/ScaleYard/MerchantZiraak.lua new file mode 100644 index 000000000..f566aa2d5 --- /dev/null +++ b/server/SpawnScripts/ScaleYard/MerchantZiraak.lua @@ -0,0 +1,32 @@ +--[[ + Script Name : SpawnScripts/ScaleYard/MerchantZiraak.lua + Script Purpose : Merchant Ziraak + Script Author : John Adams + Script Date : 2008.10.01 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] +function spawn(NPC) + SetPlayerProximityFunction(NPC, 10, "InRange", "LeavingRange") +end + +function InRange(NPC, Player) + FaceTarget(NPC, Spawn) + PlayFlavor(NPC, "voiceover/english/iksar_eco_evil_1/ft/service/merchant/iksar_merchant_service_evil_1_aoi_gm_b9dbd27d.mp3", "Only traitors to the Overlord would pass up a bargain like this. You're not a traitor are you?", "scold", 3019943489, 1406568446, Spawn) +end + +function Leaverange(NPC, Spawn) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + choice = math.random(1,3) + + if choice == 1 then + PlayFlavor(NPC, "voiceover/english/iksar_eco_evil_1/ft/service/housing/iksar_housing_service_evil_1_hail_gm_38e75dfb.mp3", "We don't sell contraband furnishings in our shop. We sell only pieces approved by the Overlord!", "salute_freeport", 4143141876, 487272335, Spawn) + elseif choice == 2 then + PlayFlavor(NPC, "voiceover/english/iksar_eco_evil_1/ft/service/housing/iksar_housing_service_evil_1_hail_gm_b7e3bdf0.mp3", "Welcome friend of the Overlord, please look around. We have several pieces from the Citadel itself! ", "bow", 2808701640, 2743721690, Spawn) + elseif choice == 3 then + PlayFlavor(NPC, "voiceover/english/iksar_eco_evil_1/ft/service/housing/iksar_housing_service_evil_1_hail_gm_33fe2ae6.mp3", "Don't be ashamed, friend. We have pieces that even ratongas can afford!", "wink", 1796157639, 1208855084, Spawn) + end + +end \ No newline at end of file diff --git a/server/SpawnScripts/ScaleYard/MirinZilishia.lua b/server/SpawnScripts/ScaleYard/MirinZilishia.lua new file mode 100644 index 000000000..ae42a88b0 --- /dev/null +++ b/server/SpawnScripts/ScaleYard/MirinZilishia.lua @@ -0,0 +1,24 @@ +--[[ + Script Name : SpawnScripts/ScaleYard/MirinZilishia.lua + Script Purpose : Mirin Zilishia + Script Author : John Adams + Script Date : 2008.10.01 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +function spawn(NPC) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_1_1028.mp3", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "I'm not sure I want to know what those are. Bye.") + StartConversation(conversation, NPC, Spawn, "If you bother me, I will act upon the thoughts that have been coursing through my head from the moment I saw you.") +end + diff --git a/server/SpawnScripts/ScaleYard/NithaskSyrthiss.lua b/server/SpawnScripts/ScaleYard/NithaskSyrthiss.lua new file mode 100644 index 000000000..9f9439203 --- /dev/null +++ b/server/SpawnScripts/ScaleYard/NithaskSyrthiss.lua @@ -0,0 +1,137 @@ +--[[ + Script Name : SpawnScripts/ScaleYard/NithaskSyrthiss.lua + Script Purpose : Nithask Syrthiss + Script Author : John Adams + Script Date : 2008.10.01 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +function spawn(NPC) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/nithask_syrthiss/fprt_hood06/quests/nithasksyrthiss/lore_nithask_000.mp3", "", "", 2035652250, 4149115810, Spawn) + AddConversationOption(conversation, "What are you talking about?", "dlg_0_1") + AddConversationOption(conversation, "I'm not interested in your rhetoric!") + StartConversation(conversation, NPC, Spawn, "We will not fall victim to imprisonment again! History, as it has shown, will not allow our fate to be sealed in mediocrity.") +end + +function dlg_0_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/nithask_syrthiss/fprt_hood06/quests/nithasksyrthiss/lore_nithask_001.mp3", "", "", 1663681837, 1174355350, Spawn) + AddConversationOption(conversation, "What do you know that I don't?", "dlg_0_2") + AddConversationOption(conversation, "They will, but that force will not be yours, fool!") + StartConversation(conversation, NPC, Spawn, "I speak of inevitable vengeance and the rise of a new empire. The Shattered lands will one day be ruled by a formidable and apt force. It is our destiny.") +end + +function dlg_0_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/nithask_syrthiss/fprt_hood06/quests/nithasksyrthiss/lore_nithask_002.mp3", "", "", 3033639880, 3068296967, Spawn) + AddConversationOption(conversation, "What's the Green Mist?", "dlg_0_3") + AddConversationOption(conversation, "Oh great, another doom-sayer. I don't have time for this.") + StartConversation(conversation, NPC, Spawn, "I know the history of this world and the forces responsible for the freedom of our race in many centuries past are still with us, ever watching, ever waiting for our time to rise. The Green Mist will descend again!") +end + +function dlg_0_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/nithask_syrthiss/fprt_hood06/quests/nithasksyrthiss/lore_nithask_003.mp3", "", "", 1583372838, 1119979594, Spawn) + AddConversationOption(conversation, "What did the Green Mist do for you, exactly?", "dlg_0_4") + AddConversationOption(conversation, "What recent occurrences?", "dlg_0_5") + AddConversationOption(conversation, "Bed-time stories don't interest me. Good bye.") + StartConversation(conversation, NPC, Spawn, "The iksar were once a race enslaved by the terrible and immensely powerful Shissar Empire. After a millennium of enslavement, we were suddenly blessed by the descent of the Green Mist. We thought the Green Mist was a blessing from the patron Thule, but recent occurrences have proved this great blessing has not been entirely extinguished.") +end + +function dlg_0_4(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/nithask_syrthiss/fprt_hood06/quests/nithasksyrthiss/lore_nithask_004.mp3", "", "", 1279006869, 1520135252, Spawn) + AddConversationOption(conversation, "That was thousands of years ago! Why do you think the mist has suddenly returned?", "dlg_0_5") + AddConversationOption(conversation, "I have to go.") + StartConversation(conversation, NPC, Spawn, "It freed us from our captors! The most powerful mortal race to ever exist upon the face of this world was eradicated in mere hours. We left their blistered bodies to rot in the jungles while we rose to become the most powerful empire in Kunark's history.") +end + +function dlg_0_5(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/nithask_syrthiss/fprt_hood06/quests/nithasksyrthiss/lore_nithask_005.mp3", "", "", 2951522699, 75020216, Spawn) + AddConversationOption(conversation, "What?! The Green Mist came back?!", "dlg_0_6") + AddConversationOption(conversation, "Why do you think the mists would help you?", "dlg_0_4") + AddConversationOption(conversation, "Why would the mists come back to save Qeynos?", "dlg_0_11") + AddConversationOption(conversation, "I have to go.") + StartConversation(conversation, NPC, Spawn, "During the Age of War, the Rallosian Empire had a second coming and threatened to cover the whole of the world in destruction and death, which they were very successful at. It wasn't until the fronts had reached the gates of Qeynos that the tides were turned with the return of the mists.") +end + +function dlg_0_6(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/nithask_syrthiss/fprt_hood06/quests/nithasksyrthiss/lore_nithask_006.mp3", "", "", 3654295321, 3073054012, Spawn) + AddConversationOption(conversation, "Wait, how do you know the mists did this?", "dlg_0_7") + AddConversationOption(conversation, "I have to go.") + StartConversation(conversation, NPC, Spawn, "Indeed, they did. They descended upon the Rallosian Armies when it seemed that their victory was inevitable. Upon the dawn of battle, the Qeynosian armies were not met with the hordes of ogres, orcs and goblinoids that had ravaged their territories. Instead, they were met with a field of blistered corpses. ") +end + +function dlg_0_7(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/nithask_syrthiss/fprt_hood06/quests/nithasksyrthiss/lore_nithask_007.mp3", "", "", 2705603054, 3817678111, Spawn) + AddConversationOption(conversation, "But the gods are dead. How could the mists return?", "dlg_0_8") + AddConversationOption(conversation, "I have to go.") + StartConversation(conversation, NPC, Spawn, "One of the greatest armies this world has ever seen suddenly fell dead upon the eve of their victory. Their bodies were covered in the festering sores and blisters consistent with the affliction of the mist. There is no other logical explanation. The power of the mist is still with us, and it will be our key to ascension!") +end + +function dlg_0_8(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/nithask_syrthiss/fprt_hood06/quests/nithasksyrthiss/lore_nithask_008.mp3", "", "", 3299299562, 2342822075, Spawn) + AddConversationOption(conversation, "So you think that this mist creature is on your side?", "dlg_0_9") + AddConversationOption(conversation, "I have to go.") + StartConversation(conversation, NPC, Spawn, "You raise a good point, but one that I refuted in my telling of this history. The mist is obviously not a force conjured by the gods, but it is something more mysterious; perhaps it is a sentient being beyond the realms of the mortal and divine, or perhaps it is beyond such designations.") +end + +function dlg_0_9(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/nithask_syrthiss/fprt_hood06/quests/nithasksyrthiss/lore_nithask_009.mp3", "", "", 2371406226, 2886166849, Spawn) + AddConversationOption(conversation, "And you're so certain that the mists won't destroy your empire?", "dlg_0_10") + AddConversationOption(conversation, "I have to go.") + StartConversation(conversation, NPC, Spawn, "Hisssss! Do not speak such disrespect! The mist cannot be willed and is not so petty in the choosing of sides. It is the executor of justice and a servant of fate! This mist will come again and justice will be delivered once more. There is no escape from it! Embrace the inevitability of our rise!") +end + +function dlg_0_10(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/nithask_syrthiss/fprt_hood06/quests/nithasksyrthiss/lore_nithask_010.mp3", "", "", 475060493, 1057785504, Spawn) + AddConversationOption(conversation, "You're a bit hopeful, I think, but your story was informative nonetheless. Good bye.") + StartConversation(conversation, NPC, Spawn, "I am only certain of our fate and what history has shown. The mists are favorable to us; why, I do not know. Unlike the empires past, the second rising of our imperial reign will not be weak or foolishly arrogant! It will serve in respect to the greater powers of this existence that can be neither fathomed nor controlled!") +end + +function dlg_0_11(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/nithask_syrthiss/fprt_hood06/quests/nithasksyrthiss/lore_nithask_011.mp3", "", "", 3038238130, 30476934, Spawn) + -- even in Live, this conversation option does not continue. + AddConversationOption(conversation, "You're so sure that the mists returned?") + AddConversationOption(conversation, "I have to go.") + StartConversation(conversation, NPC, Spawn, "The Green Mist is not something fully understood by mortal minds. Its motives and its purpose are beyond our comprehension. I believe that the mists were used to destroy a war machine that had overstepped its boundaries of arrogance with senseless destruction. The Rallosian Army earned their fate.") +end diff --git a/server/SpawnScripts/ScaleYard/NotFound.lua b/server/SpawnScripts/ScaleYard/NotFound.lua new file mode 100644 index 000000000..1a9584f9e --- /dev/null +++ b/server/SpawnScripts/ScaleYard/NotFound.lua @@ -0,0 +1,16 @@ +--[[ + Script Name : SpawnScripts/ScaleYard/NotFound.lua + Script Author : Jabantiz + Script Date : 2018.06.18 02:06:04 + Script Purpose : + : +--]] + +function spawn(NPC) + AddSpawnAccess(NPC, NPC) +end + +function respawn(NPC) + spawn(NPC) +end + diff --git a/server/SpawnScripts/ScaleYard/OlinBarkstripper.lua b/server/SpawnScripts/ScaleYard/OlinBarkstripper.lua new file mode 100644 index 000000000..a8bc98464 --- /dev/null +++ b/server/SpawnScripts/ScaleYard/OlinBarkstripper.lua @@ -0,0 +1,13 @@ +--[[ + Script Name : SpawnScripts/ScaleYard/OlinBarkstripper.lua + Script Purpose : Olin Barkstripper + Script Author : John Adams + Script Date : 2008.10.01 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + PlayFlavor(NPC, "voiceover/english/barbarian_eco_evil_1/ft/service/merchant/barbarian_merchant_service_evil_1_hail_gm_1a08e567.mp3", "Hello! Can I offer you one of our new lifetime extended warranties for any merchandise you purchase? ", "nod", 2645212460, 3162600369, Spawn) +end + diff --git a/server/SpawnScripts/ScaleYard/PlotterNicolai.lua b/server/SpawnScripts/ScaleYard/PlotterNicolai.lua new file mode 100644 index 000000000..f4edc0ad8 --- /dev/null +++ b/server/SpawnScripts/ScaleYard/PlotterNicolai.lua @@ -0,0 +1,20 @@ +--[[ + Script Name : SpawnScripts/ScaleYard/PlotterNicolai.lua + Script Purpose : Plotter Nicolai + Script Author : John Adams + Script Date : 2008.10.01 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + choice = math.random(1,2) + + if choice == 1 then + PlayFlavor(NPC, "", "Too big to eat am I, I'll wager!", "chuckle", 1689589577, 4560189, Spawn) + elseif choice == 2 then + PlayFlavor(NPC, "", "Yes, yes, that will do nicely... err, hello, who are you?", "scheme", 1689589577, 4560189, Spawn) + end + +end + diff --git a/server/SpawnScripts/ScaleYard/SavasDranak.lua b/server/SpawnScripts/ScaleYard/SavasDranak.lua new file mode 100644 index 000000000..6cf617d8e --- /dev/null +++ b/server/SpawnScripts/ScaleYard/SavasDranak.lua @@ -0,0 +1,23 @@ +--[[ + Script Name : SpawnScripts/ScaleYard/SavasDranak.lua + Script Purpose : Savas Dranak + Script Author : John Adams + Script Date : 2008.10.01 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +function spawn(NPC) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/savas_dranak/fprt_hood06/savasdranak000.mp3", "", "", 312427882, 4132285907, Spawn) + AddConversationOption(conversation, "I don't want to see how you treat your least favorite. ", "dlg_18_1") + StartConversation(conversation, NPC, Spawn, "It is a shame this one didn't do what he was told. He was my favorite thrall too.") +end \ No newline at end of file diff --git a/server/SpawnScripts/ScaleYard/ScribeColdquill.lua b/server/SpawnScripts/ScaleYard/ScribeColdquill.lua new file mode 100644 index 000000000..4c54bc524 --- /dev/null +++ b/server/SpawnScripts/ScaleYard/ScribeColdquill.lua @@ -0,0 +1,13 @@ +--[[ + Script Name : SpawnScripts/ScaleYard/ScribeColdquill.lua + Script Purpose : Scribe Coldquill + Script Author : John Adams + Script Date : 2008.10.01 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + PlayFlavor(NPC, "voiceover/english/barbarian_eco_evil_1/ft/service/scribe/barbarian_scribe_service_evil_1_hail_gf_250b4da0.mp3", "So are you planning to master your art at the academy? We keep all of the required supplies right here!", "ponder", 998404755, 3116132732, Spawn) +end + diff --git a/server/SpawnScripts/ScaleYard/SkalVethiz.lua b/server/SpawnScripts/ScaleYard/SkalVethiz.lua new file mode 100644 index 000000000..4d4d93217 --- /dev/null +++ b/server/SpawnScripts/ScaleYard/SkalVethiz.lua @@ -0,0 +1,33 @@ +--[[ + Script Name : SpawnScripts/ScaleYard/SkalVethiz.lua + Script Purpose : Skal Vethiz + Script Author : John Adams + Script Date : 2008.10.01 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +function spawn(NPC) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/skal_vethiz/fprt_hood06/qst_skalvethiz.mp3", "", "", 632016145, 49250829, Spawn) + AddConversationOption(conversation, "I don't really care. Bye.") + AddConversationOption(conversation, "What empire?", "dlg_1_1") + StartConversation(conversation, NPC, Spawn, "What have we iksar become? We live next to barbarians and accept it? We once had a great Empire.") +end + +function dlg_1_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/skal_vethiz/fprt_hood06/qst_skalvethiz000.mp3", "", "", 4224301835, 4229334233, Spawn) + AddConversationOption(conversation, "Sorry to hear it.") + StartConversation(conversation, NPC, Spawn, "What? You know nothing of the greatest empire to dominate the face of Norrath?! We conquered the continent of Kunark! Kingdoms on Antonica and Faydwer trembled at the mere whisper of the iksar name. Before the Shattering, the Iksarian Empire held the entire world in its grasp! Now look at us. We're reduced to squatting in the corner of some human city.") +end \ No newline at end of file diff --git a/server/SpawnScripts/ScaleYard/Sypp.lua b/server/SpawnScripts/ScaleYard/Sypp.lua new file mode 100644 index 000000000..00bf3b96a --- /dev/null +++ b/server/SpawnScripts/ScaleYard/Sypp.lua @@ -0,0 +1,24 @@ +--[[ + Script Name : SpawnScripts/ScaleYard/Sypp.lua + Script Purpose : Sypp + Script Author : John Adams + Script Date : 2008.10.01 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + choice = math.random(1,4) + + if choice == 1 then + PlayFlavor(NPC, "voiceover/english/optional1/iksar_eco_evil_1/ft/service/alchemist/iksar_alchemist_service_evil_1_hail_gf_1cabe1c1.mp3", "I need to get some eye of griffon, a bears paw, the heart of an innocent man. That'll be tough in this city!", "confused", 1136043362, 285156261, Spawn) + elseif choice == 2 then + PlayFlavor(NPC, "voiceover/english/optional1/iksar_eco_evil_1/ft/service/alchemist/iksar_alchemist_service_evil_1_hail_gf_ab298747.mp3", "Let me guess, you're looking for poison right?", "lookaway", 1734937732, 3669646106, Spawn) + elseif choice == 3 then + PlayFlavor(NPC, "voiceover/english/optional1/iksar_eco_evil_1/ft/service/alchemist/iksar_alchemist_service_evil_1_hail_gf_28ab45b2.mp3", "Poison testers, it's been my biggest seller for the past several months. Of course poison was a close second. ", "ponder", 2543256791, 804748687, Spawn) + elseif choice == 4 then + PlayFlavor(NPC, "voiceover/english/optional1/iksar_eco_evil_1/ft/service/alchemist/iksar_alchemist_service_evil_1_hail_gf_95ad6c11.mp3", "Be careful what you touch in here. You're liable to kill us all!", "cringe", 3232877956, 2076569074, Spawn) + end + +end + diff --git a/server/SpawnScripts/ScaleYard/Tabitha.lua b/server/SpawnScripts/ScaleYard/Tabitha.lua new file mode 100644 index 000000000..534749c79 --- /dev/null +++ b/server/SpawnScripts/ScaleYard/Tabitha.lua @@ -0,0 +1,75 @@ +--[[ + Script Name : Tabitha.lua + Script Purpose : Tabitha the cat in Scale Yard + Script Author : Xanibunib + Script Date : 2009.3.26 + Script Notes : Meow! +--]] + +function spawn(NPC) + MovementLoopAddLocation(NPC, 22.85, -4.38, 25.22, 3, 0) + MovementLoopAddLocation(NPC, 25.51, -4.38, 21.16, 3, 0) + MovementLoopAddLocation(NPC, 29.79, 0.00, 4.83, 3, 0) + MovementLoopAddLocation(NPC, 24.49, 0.00, -3.24, 3, 0) + MovementLoopAddLocation(NPC, 44.45, -0.07, -3.01, 3, 0) + MovementLoopAddLocation(NPC, 45.35, 0.00, 8.43, 3, 0) + MovementLoopAddLocation(NPC, 42.63, 0.00, 5.77, 3, 0) + MovementLoopAddLocation(NPC, 42.81, 0.00, 2.56, 3, 0) + MovementLoopAddLocation(NPC, 33.90, 0.00, -6.19, 3, 5) + MovementLoopAddLocation(NPC, 36.05, -2.25, -14.10, 3, 0) + MovementLoopAddLocation(NPC, 42.99, -4.35, -12.33, 3, 0) + MovementLoopAddLocation(NPC, 45.40, -4.35, -8.54, 3, 0) + MovementLoopAddLocation(NPC, 51.86, -4.35, -9.80, 3, 0) + MovementLoopAddLocation(NPC, 60.66, -2.25, -7.54, 3, 0) + MovementLoopAddLocation(NPC, 70.23, 0.00, -5.06, 3, 0) + MovementLoopAddLocation(NPC, 72.11, 0.00, -12.64, 3, 0) + MovementLoopAddLocation(NPC, 82.25, 0.00, -13.85, 3, 0) + MovementLoopAddLocation(NPC, 84.51, 0.00, -10.39, 3, 0) + MovementLoopAddLocation(NPC, 81.27, 0.00, -1.76, 3, 0) + MovementLoopAddLocation(NPC, 71.55, 0.00, -4.19, 3, 0) + MovementLoopAddLocation(NPC, 68.14, -2.25, 3.73, 3, 10) + MovementLoopAddLocation(NPC, 76.60, -4.37, 5.26, 3, 0) + MovementLoopAddLocation(NPC, 70.70, -4.37, 14.77, 3, 0) + MovementLoopAddLocation(NPC, 80.96, -4.37, 19.31, 3, 0) + MovementLoopAddLocation(NPC, 90.38, -4.37, 14.80, 3, 0) + MovementLoopAddLocation(NPC, 97.43, -4.37, 19.84, 3, 5) + MovementLoopAddLocation(NPC, 86.07, -4.37, 18.75, 3, 0) + MovementLoopAddLocation(NPC, 77.76, -4.37, 14.64, 3, 0) + MovementLoopAddLocation(NPC, 74.31, -4.31, 6.34, 3, 0) + MovementLoopAddLocation(NPC, 68.96, -2.25, 3.38, 3, 0) + MovementLoopAddLocation(NPC, 69.42, 0.00, -5.39, 3, 0) + MovementLoopAddLocation(NPC, 61.52, -2.25, -7.07, 3, 0) + MovementLoopAddLocation(NPC, 65.45, -4.35, -15.87, 3, 0) + MovementLoopAddLocation(NPC, 61.40, -4.35, -23.16, 3, 8) + MovementLoopAddLocation(NPC, 62.89, -4.35, -27.52, 3, 0) + MovementLoopAddLocation(NPC, 69.62, -4.35, -30.93, 3, 0) + MovementLoopAddLocation(NPC, 75.80, -4.35, -33.60, 3, 0) + MovementLoopAddLocation(NPC, 74.25, -4.35, -36.47, 3, 3) + MovementLoopAddLocation(NPC, 67.77, -4.35, -38.80, 3, 0) + MovementLoopAddLocation(NPC, 59.59, -4.35, -36.54, 3, 0) + MovementLoopAddLocation(NPC, 52.13, -4.35, -40.36, 3, 0) + MovementLoopAddLocation(NPC, 45.21, -4.35, -41.20, 3, 0) + MovementLoopAddLocation(NPC, 40.05, -4.35, -37.90, 3, 10) + MovementLoopAddLocation(NPC, 39.43, -4.35, -31.20, 3, 0) + MovementLoopAddLocation(NPC, 41.45, -4.35, -27.87, 3, 0) + MovementLoopAddLocation(NPC, 41.68, -4.35, -24.00, 3, 0) + MovementLoopAddLocation(NPC, 37.64, -4.03, -20.38, 3, 0) + MovementLoopAddLocation(NPC, 36.48, -2.25, -16.13, 3, 0) + MovementLoopAddLocation(NPC, 34.68, -0.57, -10.39, 3, 0) + MovementLoopAddLocation(NPC, 30.53, 0.00, 5.42, 3, 0) + MovementLoopAddLocation(NPC, 24.92, -4.14, 20.32, 3, 0) +end + + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + + Say(NPC, "Meow.") +end + +function respawn(NPC) + spawn(NPC) +end + +function CheckForRats(NPC) +end \ No newline at end of file diff --git a/server/SpawnScripts/ScaleYard/TeganFrostfist.lua b/server/SpawnScripts/ScaleYard/TeganFrostfist.lua new file mode 100644 index 000000000..a7031f605 --- /dev/null +++ b/server/SpawnScripts/ScaleYard/TeganFrostfist.lua @@ -0,0 +1,12 @@ +--[[ + Script Name : SpawnScripts/ScaleYard/TeganFrostfist.lua + Script Purpose : Tegan Frostfist + Script Author : John Adams + Script Date : 2008.10.01 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + PlayFlavor(NPC, "", "I have nothing else to teach you for the moment. Please return to me when you have earned enough experience to choose your specialty.", "", 1689589577, 4560189, Spawn) +end \ No newline at end of file diff --git a/server/SpawnScripts/ScaleYard/Thaguk.lua b/server/SpawnScripts/ScaleYard/Thaguk.lua new file mode 100644 index 000000000..5ba4816e8 --- /dev/null +++ b/server/SpawnScripts/ScaleYard/Thaguk.lua @@ -0,0 +1,13 @@ +--[[ + Script Name : SpawnScripts/ScaleYard/Thaguk.lua + Script Purpose : Thaguk + Script Author : John Adams + Script Date : 2008.10.01 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + PlayFlavor(NPC, "voiceover/english/ogre_eco_evil_1/ft/service/guard/ogre_guard_service_evil_1_hail_gm_870ae3cb.mp3", "The Overlord commands me to patrol this area, and so I must.", "tapfoot", 3898592844, 3023882159, Spawn) +end + diff --git a/server/SpawnScripts/ScaleYard/TristanORilley.lua b/server/SpawnScripts/ScaleYard/TristanORilley.lua new file mode 100644 index 000000000..2f97733fb --- /dev/null +++ b/server/SpawnScripts/ScaleYard/TristanORilley.lua @@ -0,0 +1,66 @@ +--[[ + Script Name : SpawnScripts/ScaleYard/TristanORilley.lua + Script Purpose : Tristan O'Rilley + Script Author : John Adams + Script Date : 2008.10.01 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +-- Quest ID's +local QUEST_1 = 341 --He Said, he said-- + +function spawn(NPC) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + if HasQuest(Spawn, QUEST_1) and GetQuestStep(Spawn, QUEST_1) == 1 then + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/tristan_o_rilley/fprt_hood06/rcp_quest_tristan_orilley001.mp3", "", "", 914469288, 2520238044, Spawn) + AddConversationOption(conversation, "It's not what you can do for me, but what I can offer you.", "dlg_0_1") + StartConversation(conversation, NPC, Spawn, "Aye, and what can I help you with?") + else + PlayFlavor(NPC, "", "My great-grandfather killed a man in Qeynos once. Just to watch him die!", "", 1689589577, 4560189, Spawn) + end +end + +function dlg_0_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/tristan_o_rilley/fprt_hood06/rcp_quest_tristan_orilley002.mp3", "", "", 2057604830, 23507425, Spawn) + AddConversationOption(conversation, "The name of the person who framed you for the destruction of Issik Dethyr's office.", "dlg_0_2") + StartConversation(conversation, NPC, Spawn, "Oh yeah? And what could a lizard like you possibly have to offer me?") +end + +function dlg_0_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + SetStepComplete(Spawn, QUEST_1, 1) + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/tristan_o_rilley/fprt_hood06/rcp_quest_tristan_orilley003.mp3", "", "", 4085903991, 3523548392, Spawn) + AddConversationOption(conversation, "That's not what Wesley Tundrafoot says. I heard him tell Issik that you were the culprit.", "dlg_0_3") + StartConversation(conversation, NPC, Spawn, "What!? I had nothing to do with that!") +end + +function dlg_0_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + -- JA: I think there was a part about going to whack Wesley, but it's not in the dialogs. + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/tristan_o_rilley/fprt_hood06/rcp_quest_tristan_orilley004.mp3", "", "", 1183762855, 3685333536, Spawn) + AddConversationOption(conversation, "I look forward to it. Forgive me, I must take my leave.") + AddConversationOption(conversation, "May I suggest, a most violent bludgeoning? Perhaps with the use of a large hammer, or club. I'm sure you'll know just what to do.") + AddConversationOption(conversation, "May his demise be slow and painful. Good day.") + StartConversation(conversation, NPC, Spawn, "Why, that orc-breathed, gnoll-lover! He probably did it himself and is trying to frame me! Well, not if I have anything to say about it! Wesley Tundrafoot is gonna regret he ever even THOUGHT to mention my name to the Militia. Just you wait and see!") +end + +--[[ raw_conversations + PlayFlavor(NPC, "", "My great-grandfather killed a man in Qeynos once. Just to watch him die!", "", 1689589577, 4560189, Spawn) +--]] + diff --git a/server/SpawnScripts/ScaleYard/UgarinFarwind.lua b/server/SpawnScripts/ScaleYard/UgarinFarwind.lua new file mode 100644 index 000000000..0fbabdba4 --- /dev/null +++ b/server/SpawnScripts/ScaleYard/UgarinFarwind.lua @@ -0,0 +1,84 @@ +--[[ + Script Name : SpawnScripts/ScaleYard/UgarinFarwind.lua + Script Purpose : Ugarin Farwind + Script Author : John Adams + Script Date : 2008.10.01 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +function spawn(NPC) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/ugarin_farwind/fprt_hood06/qst_ugarian_hail.mp3", "", "", 3126487551, 1359593271, Spawn) + AddConversationOption(conversation, "I cannot speak right now. Goodbye.") + AddConversationOption(conversation, "Who are the Halasians?", "dlg_0_1") + StartConversation(conversation, NPC, Spawn, "Greetings. I am Ugarin, lone wolf of the north winds. I am the preserver of the lost lore of the true Halasians.") +end + +function dlg_0_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/ugarin_farwind/fprt_hood06/quests/ugarianlore/ugarian_lore_initial.mp3", "", "", 735761260, 3737623550, Spawn) + AddConversationOption(conversation, "I cannot speak right now. Goodbye.") + AddConversationOption(conversation, "Do you know how to get to Halas?", "dlg_0_2") + StartConversation(conversation, NPC, Spawn, "The Halasians were the champions of the frozen realms. They were the first barbarians to truly defy the gods of frost. The Halasians built the grandest city of all, The city of Halas. It was a city of refuge amidst the magnificence of the frozen tundra and its many dangers.") +end + +function dlg_0_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/ugarin_farwind/fprt_hood06/quests/ugarianlore/ugarian_lore_initial02.mp3", "", "", 224789132, 4122842515, Spawn) + AddConversationOption(conversation, "I cannot speak right now. Goodbye.") + AddConversationOption(conversation, "There were no survivors? (continue)", "dlg_0_3") + StartConversation(conversation, NPC, Spawn, "Halas is no more. Having survived the furies of Eci, the eternal rage of the ice dragon Vox, and even the massive assaults during the Age of War, it would be the Shattering that brought doom to the city. Many lives were lost, a city toppled, and with that, the horns of Halas would bellow out no more.") +end + +function dlg_0_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/ugarin_farwind/fprt_hood06/quests/ugarianlore/ugarian_lore_initial03.mp3", "", "", 3911189939, 1411444375, Spawn) + AddConversationOption(conversation, "I cannot speak right now. Goodbye.") + AddConversationOption(conversation, "You are a Halasian. I can see that glare.", "dlg_0_4") + StartConversation(conversation, NPC, Spawn, "A true Halasian? They're rare, but they do exist. You can tell who they are by the glare in their eyes. A glare that was burned into their eyes as they watched in horror as loved ones were crushed beneath the rain of Luclin and the toppling walls of Halas.") +end + +function dlg_0_4(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/ugarin_farwind/fprt_hood06/quests/ugarianlore/ugarian_lore_initial04.mp3", "", "", 94217063, 3012088339, Spawn) + AddConversationOption(conversation, "I cannot speak right now. Goodbye.") + AddConversationOption(conversation, "Tell me what empires were destroyed.", "dlg_0_5") + StartConversation(conversation, NPC, Spawn, "Perhaps. Or perhaps my eyes have seen too many horrors that swept across all of Norrath. Some say the gods have been silenced. I say we should think first of the many Empires that have been silenced. Friend or foe. Vast or humble. All were silenced.") +end + +function dlg_0_5(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/ugarin_farwind/fprt_hood06/quests/ugarianlore/ugarian_lore_initial05.mp3", "", "", 2220307498, 727996650, Spawn) + AddConversationOption(conversation, "I cannot speak right now. Goodbye.") + AddConversationOption(conversation, "I wish to claim the lost riches of the north. ", "dlg_0_6") + StartConversation(conversation, NPC, Spawn, "I did not say destroyed. I said silenced. We the survivors of the Age of Cataclysms huddle within the few cities of refuge. We have had no contact nor heard any word of the lost empires. It is likely they are destroyed, but we must explore the Shattered Lands to answer this.") +end + +function dlg_0_6(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/ugarin_farwind/fprt_hood06/quests/ugarianlore/ugarian_lore_initial06.mp3", "", "", 1174793555, 2983860974, Spawn) + AddConversationOption(conversation, "I cannot speak right now. Goodbye.") + StartConversation(conversation, NPC, Spawn, "The wintry lands are no more. Think only of the uncharted territory beyond the gates. This land has been shattered and reformed. Much is unknown. Leave Halas to memories.") +end + diff --git a/server/SpawnScripts/ScaleYard/Valseth.lua b/server/SpawnScripts/ScaleYard/Valseth.lua new file mode 100644 index 000000000..f47ea52c1 --- /dev/null +++ b/server/SpawnScripts/ScaleYard/Valseth.lua @@ -0,0 +1,22 @@ +--[[ + Script Name : SpawnScripts/ScaleYard/Valseth.lua + Script Purpose : Valseth + Script Author : John Adams + Script Date : 2008.10.01 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + choice = math.random(1,3) + + if choice == 1 then + PlayFlavor(NPC, "voiceover/english/optional2/iksar_eco_evil_1/ft/service/merchant/iksar_merchant_service_evil_1_hail_gf_aff3fc07.mp3", "Are you going to buy anything today or am I just wasting my time? This isn't a museum display you know!", "glare", 651549003, 3080028152, Spawn) + elseif choice == 2 then + PlayFlavor(NPC, "voiceover/english/optional2/iksar_eco_evil_1/ft/service/merchant/iksar_merchant_service_evil_1_hail_gf_f715099e.mp3", "Hello there, kind adventurer. My merchandise carries the seal of the Overlord himself! Go ahead, take a look!", "salute_freeport", 259001786, 3030907314, Spawn) + elseif choice == 3 then + PlayFlavor(NPC, "voiceover/english/optional2/iksar_eco_evil_1/ft/service/merchant/iksar_merchant_service_evil_1_hail_gf_7d521aa2.mp3", "Hello! Can I offer you one of our new lifetime extended warranties for any merchandise you purchase? ", "nod", 1919752795, 2899530992, Spawn) + end + +end + diff --git a/server/SpawnScripts/ScaleYard/VerinIthelz.lua b/server/SpawnScripts/ScaleYard/VerinIthelz.lua new file mode 100644 index 000000000..af8daf3b8 --- /dev/null +++ b/server/SpawnScripts/ScaleYard/VerinIthelz.lua @@ -0,0 +1,13 @@ +--[[ + Script Name : SpawnScripts/ScaleYard/VerinIthelz.lua + Script Purpose : Verin Ithelz + Script Author : John Adams + Script Date : 2008.10.01 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + PlayFlavor(NPC, "", "My trade will pick up again, you'll see.", "", 1689589577, 4560189, Spawn) +end + diff --git a/server/SpawnScripts/ScaleYard/VleskeVylkle.lua b/server/SpawnScripts/ScaleYard/VleskeVylkle.lua new file mode 100644 index 000000000..cd5406ddc --- /dev/null +++ b/server/SpawnScripts/ScaleYard/VleskeVylkle.lua @@ -0,0 +1,47 @@ +--[[ + Script Name : SpawnScripts/ScaleYard/VleskeVylkle.lua + Script Purpose : Vleske Vylkle + Script Author : John Adams + Script Date : 2008.10.01 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +-- Quest ID's +QUEST_2 = 347 -- 183 --Sound Off! + +function spawn(NPC) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + -- JA: Cannot get voiceover to work + if HasQuest(Spawn, QUEST_2) and GetQuestStep(Spawn, QUEST_2) == 1 then + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/vleske_vylkle/fprt_hood06/vleske001.mp3", "", "", 2681861041, 467121917, Spawn) + AddConversationOption(conversation, "AHHHHHHHHHHHHHH!", "dlg_0_0") + StartConversation(conversation, NPC, Spawn, "Something on your miniature little mind?") + else + -- standard greeting + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/vleske_vylkle/fprt_hood06/quest_vleske_step_aside_704ce074.mp3", "Mind the tail! Mind the tail!", "", 1985077577, 3973388351, Spawn) + end +end + +function dlg_0_0(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + SetStepComplete(Spawn, QUEST_2, 1) + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/vleske_vylkle/fprt_hood06/vleske002.mp3", "", "", 2920798971, 3597861480, Spawn) + AddConversationOption(conversation, "Wha, but... I can speak just... bye.") + StartConversation(conversation, NPC, Spawn, "Don't worry; you'll master multi-syllabic words someday.") +end + +--[[ raw_conversations + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/vleske_vylkle/fprt_hood06/quest_vleske_step_aside_704ce074.mp3", "Mind the tail! Mind the tail!", "", 1985077577, 3973388351, Spawn) +--]] + diff --git a/server/SpawnScripts/ScaleYard/WeaponsmithXass.lua b/server/SpawnScripts/ScaleYard/WeaponsmithXass.lua new file mode 100644 index 000000000..eaaef9a63 --- /dev/null +++ b/server/SpawnScripts/ScaleYard/WeaponsmithXass.lua @@ -0,0 +1,13 @@ +--[[ + Script Name : SpawnScripts/ScaleYard/WeaponsmithXass.lua + Script Purpose : Weaponsmith Xass + Script Author : John Adams + Script Date : 2008.10.01 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + PlayFlavor(NPC, "", "I am the finest weaponsmith in Freeport... But I don't do public work anymore. These days I simply make new designs for the sake of advancing my craft... and the occasional very pricey contract.", "", 1689589577, 4560189, Spawn) +end + diff --git a/server/SpawnScripts/ScaleYard/WesleyTundrafoot.lua b/server/SpawnScripts/ScaleYard/WesleyTundrafoot.lua new file mode 100644 index 000000000..141ad0ec8 --- /dev/null +++ b/server/SpawnScripts/ScaleYard/WesleyTundrafoot.lua @@ -0,0 +1,61 @@ +--[[ + Script Name : SpawnScripts/ScaleYard/WesleyTundrafoot.lua + Script Purpose : Wesley Tundrafoot + Script Author : John Adams + Script Date : 2008.10.01 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +-- Quest ID's +local QUEST_1 = 341 + +function spawn(NPC) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + if HasQuest(Spawn, QUEST_1) and GetQuestStep(Spawn, QUEST_1) == 2 then + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/wesley_tundrafoot/fprt_hood06/rcp_wesley001.mp3", "", "", 2865891538, 1410389644, Spawn) + AddConversationOption(conversation, "I'm afraid to say you won't be slaying anything, Wesley. It looks as though the Freeport Militia wants to speak to you about the broken furniture in Guard Captain Issik's office.", "dlg_12_1") + StartConversation(conversation, NPC, Spawn, "Who's that there? Marcus? Is it time to fight? Point me to something and I'll gladly snap its neck!") + else + Say(NPC, "I find the lack of snow in this place... unsettling.") + end +end + +function dlg_12_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/wesley_tundrafoot/fprt_hood06/rcp_wesley002.mp3", "", "", 692581137, 3283910777, Spawn) + AddConversationOption(conversation, "Well, it may just be a rumor but... Tristan O'Rilley definitely ratted you out.", "dlg_12_2") + StartConversation(conversation, NPC, Spawn, "What?! I never even set foot in that lizard's office. Who told the Militia I was to blame? C'mon, out with it, lizard. Tell me!") +end + +function dlg_12_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/wesley_tundrafoot/fprt_hood06/rcp_wesley003.mp3", "", "", 2622307148, 2901004163, Spawn) + AddConversationOption(conversation, "I must take my leave. Good day.", "dlg_12_3") + StartConversation(conversation, NPC, Spawn, "WHAT!? That back-stabbin' under-handed kilt yanker! This is how he repays my tutelage? That's it, I'm going to beat him so hard he'll... I'll pummel him till he's.. And then I'm gonna...") + SetStepComplete(Spawn, QUEST_1, 2) +end + +function dlg_99_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "Quests", "dlg_99_2") + StartConversation(conversation, NPC, Spawn, "What would you like?") +end + +--[[ raw_conversations + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/wesley_tundrafoot/fprt_hood06/quest_wesley_idle_text_f22e7e7b.mp3", "I find the lack of snow in this place... unsettling.", "", 3738848352, 3752147462, Spawn) +--]] + diff --git a/server/SpawnScripts/ScaleYard/ZeverTzizzink.lua b/server/SpawnScripts/ScaleYard/ZeverTzizzink.lua new file mode 100644 index 000000000..094290c5e --- /dev/null +++ b/server/SpawnScripts/ScaleYard/ZeverTzizzink.lua @@ -0,0 +1,28 @@ +--[[ + Script Name : SpawnScripts/ScaleYard/ZeverTzizzink.lua + Script Purpose : Zever Tzizzink + Script Author : John Adams + Script Date : 2008.10.01 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + choice = math.random(1,6) + + if choice == 1 then + PlayFlavor(NPC, "voiceover/english/iksar_eco_evil_1/ft/iksar/iksar_eco_evil_1_hail_gm_6e77e856.mp3", "Hard work has never killed anyone, but I have.", "nod", 1624540059, 2182897376, Spawn) + elseif choice == 2 then + PlayFlavor(NPC, "voiceover/english/iksar_eco_evil_1/ft/iksar/iksar_eco_evil_1_hail_gm_75d6942e.mp3", "Of course we have feelings. We're just not as attached to them as others.", "glare", 959861962, 664441611, Spawn) + elseif choice == 3 then + PlayFlavor(NPC, "voiceover/english/iksar_eco_evil_1/ft/iksar/iksar_eco_evil_1_hail_gm_65504a07.mp3", "You don't have to be cold blooded to be a killer, but it helps.", "sniff", 162591917, 1585569694, Spawn) + elseif choice == 4 then + PlayFlavor(NPC, "voiceover/english/iksar_eco_evil_1/ft/iksar/iksar_eco_evil_1_hail_gm_e197e226.mp3", "Get the facts first, then use them to your advantage.", "nod", 2108412157, 569290229, Spawn) + elseif choice == 5 then + PlayFlavor(NPC, "voiceover/english/iksar_eco_evil_1/ft/iksar/iksar_eco_evil_1_hail_gm_b2520f1f.mp3", "The dark elves are inferior creatures led by delusions of grandeur. How sad.", "sarcasm", 4070116108, 3546866585, Spawn) + elseif choice == 6 then + PlayFlavor(NPC, "", "What do you want?", "", 1689589577, 4560189, Spawn) + end + +end + diff --git a/server/SpawnScripts/ScaleYard/aShissarianasp.lua b/server/SpawnScripts/ScaleYard/aShissarianasp.lua new file mode 100644 index 000000000..1a6368849 --- /dev/null +++ b/server/SpawnScripts/ScaleYard/aShissarianasp.lua @@ -0,0 +1,27 @@ +--[[ + Script Name : SpawnScripts/ScaleYard/aShissarianvase.lua + Script Purpose : Spawn Shissarian asp + Script Author : Xanibunib + Script Date : 2009.03.31 + Script Notes : +--]] + +-- Quest ID's +local QUEST_3 = 342 --152 --Paying homage to the past-- + +function spawn(NPC) + SetRequiredQuest(NPC, QUEST_3, 1) +end + +function hailed(NPC, Spawn) +end + +function respawn(NPC) +end + +function death(NPC, Spawn) + local asp = SpawnMob(GetZone(Spawn), 1390059, false, GetX(NPC), GetY(NPC), GetZ(NPC), GetHeading(NPC)) + if asp ~= nil then + Attack(asp, Spawn) + end +end \ No newline at end of file diff --git a/server/SpawnScripts/ScaleYard/aShissarianvase.lua b/server/SpawnScripts/ScaleYard/aShissarianvase.lua new file mode 100644 index 000000000..1a6368849 --- /dev/null +++ b/server/SpawnScripts/ScaleYard/aShissarianvase.lua @@ -0,0 +1,27 @@ +--[[ + Script Name : SpawnScripts/ScaleYard/aShissarianvase.lua + Script Purpose : Spawn Shissarian asp + Script Author : Xanibunib + Script Date : 2009.03.31 + Script Notes : +--]] + +-- Quest ID's +local QUEST_3 = 342 --152 --Paying homage to the past-- + +function spawn(NPC) + SetRequiredQuest(NPC, QUEST_3, 1) +end + +function hailed(NPC, Spawn) +end + +function respawn(NPC) +end + +function death(NPC, Spawn) + local asp = SpawnMob(GetZone(Spawn), 1390059, false, GetX(NPC), GetY(NPC), GetZ(NPC), GetHeading(NPC)) + if asp ~= nil then + Attack(asp, Spawn) + end +end \ No newline at end of file diff --git a/server/SpawnScripts/ScaleYard/anIksarskull.lua b/server/SpawnScripts/ScaleYard/anIksarskull.lua new file mode 100644 index 000000000..d9023b1f2 --- /dev/null +++ b/server/SpawnScripts/ScaleYard/anIksarskull.lua @@ -0,0 +1,20 @@ +--[[ + Script Name : + Script Purpose : + Script Author : + Script Date : + Script Notes : +--]] + +-- Quest ID's +local QUEST_3 = 342 --152 --Paying homage to the past-- + +function spawn(NPC) + SetRequiredQuest(NPC, QUEST_3, 2) +end + +function hailed(NPC, Spawn) +end + +function respawn(NPC) +end \ No newline at end of file diff --git a/server/SpawnScripts/ScaleYard/arat.lua b/server/SpawnScripts/ScaleYard/arat.lua new file mode 100644 index 000000000..9b2e9048a --- /dev/null +++ b/server/SpawnScripts/ScaleYard/arat.lua @@ -0,0 +1,74 @@ +--[[ + Script Name : + Script Purpose : + Script Author : + Script Date : + Script Notes : +--]] + +function spawn(NPC) + + MovementLoopAddLocation(NPC, 43.95, -4.35, -41.08, 3, 0) + MovementLoopAddLocation(NPC, 40.05, -4.35, -35.78, 3, 0) + MovementLoopAddLocation(NPC, 40.75, -4.35, -27.02, 3, 5) + MovementLoopAddLocation(NPC, 36.73, -2.25, -16.54, 3, 0) + MovementLoopAddLocation(NPC, 32.99, 0.00, -6.86, 3, 0) + MovementLoopAddLocation(NPC, 28.07, 0.00, -4.92, 1, 0) + MovementLoopAddLocation(NPC, 24.02, 0.00, -0.44, 2, 0) + MovementLoopAddLocation(NPC, 24.74, 0.00, 2.14, 5, 0) + MovementLoopAddLocation(NPC, 24.74, 0.00, 2.14, 8, 10) + MovementLoopAddLocation(NPC, 29.57, 0.00, 6.29, 10, 0) + MovementLoopAddLocation(NPC, 22.91, -4.38, 30.12, 3, 0) + MovementLoopAddLocation(NPC, 13.48, -4.38, 37.56, 3, 0) + MovementLoopAddLocation(NPC, 12.52, -4.38, 45.02, 3, 5) + MovementLoopAddLocation(NPC, 12.05, -4.35, 48.01, 3, 0) + MovementLoopAddLocation(NPC, 10.74, -4.34, 48.41, 3, 0) + MovementLoopAddLocation(NPC, 8.51, -4.38, 52.61, 3, 8) + MovementLoopAddLocation(NPC, 8.19, -4.38, 56.11, 3, 0) + MovementLoopAddLocation(NPC, 7.29, -4.38, 60.63, 3, 0) + MovementLoopAddLocation(NPC, 7.44, -4.38, 63.46, 3, 0) + MovementLoopAddLocation(NPC, 7.87, -4.38, 65.93, 3, 20) + MovementLoopAddLocation(NPC, 5.61, -4.38, 68.96, 3, 0) + MovementLoopAddLocation(NPC, 8.74, -4.38, 71.53, 3, 0) + MovementLoopAddLocation(NPC, 12.21, -4.38, 66.99, 3, 0) + MovementLoopAddLocation(NPC, 13.23, -4.38, 60.50, 1, 0) + MovementLoopAddLocation(NPC, 14.89, -4.38, 56.62, 2, 5) + MovementLoopAddLocation(NPC, 20.03, -3.14, 55.73, 1, 0) + MovementLoopAddLocation(NPC, 23.61, -1.11, 57.96, 1, 0) + MovementLoopAddLocation(NPC, 27.39, 0.00, 58.86, 5, 0) + MovementLoopAddLocation(NPC, 29.09, 0.00, 56.21, 10, 0) + MovementLoopAddLocation(NPC, 29.15, 0.00, 51.97, 15, 0) + MovementLoopAddLocation(NPC, 19.48, -4.30, 48.70, 10, 0) + MovementLoopAddLocation(NPC, 19.05, -4.38, 46.23, 5, 0) + MovementLoopAddLocation(NPC, 22.49, -4.38, 40.63, 3, 15) + MovementLoopAddLocation(NPC, 23.50, -4.38, 36.70, 3, 0) + MovementLoopAddLocation(NPC, 24.90, -4.38, 22.87, 3, 0) + MovementLoopAddLocation(NPC, 30.37, 0.00, 6.61, 3, 0) + MovementLoopAddLocation(NPC, 34.92, -0.03, 1.41, 3, 0) + MovementLoopAddLocation(NPC, 33.94, -0.02, -1.59, 3, 0) + MovementLoopAddLocation(NPC, 32.43, 0.00, -5.57, 3, 0) + MovementLoopAddLocation(NPC, 36.08, -1.57, -12.09, 3, 0) + MovementLoopAddLocation(NPC, 41.05, -3.76, -13.02, 3, 0) + MovementLoopAddLocation(NPC, 50.54, -4.35, -9.39, 3, 0) + MovementLoopAddLocation(NPC, 54.94, -4.35, -11.56, 3, 0) + MovementLoopAddLocation(NPC, 61.76, -4.33, -13.50, 3, 0) + MovementLoopAddLocation(NPC, 65.59, -4.35, -14.77, 5, 8) + MovementLoopAddLocation(NPC, 65.62, -4.35, -19.44, 3, 0) + MovementLoopAddLocation(NPC, 62.13, -4.35, -21.45, 10, 0) + MovementLoopAddLocation(NPC, 63.16, -4.35, -26.67, 3, 0) + MovementLoopAddLocation(NPC, 67.66, -4.35, -29.31, 3, 5) + MovementLoopAddLocation(NPC, 71.88, -4.35, -30.57, 3, 0) + MovementLoopAddLocation(NPC, 74.03, -4.35, -33.32, 3, 0) + MovementLoopAddLocation(NPC, 71.09, -4.09, -36.99, 3, 0) + MovementLoopAddLocation(NPC, 68.45, -4.35, -37.16, 3, 10) + MovementLoopAddLocation(NPC, 56.62, -4.35, -40.81, 3, 0) + MovementLoopAddLocation(NPC, 56.62, -4.35, -40.81, 3, 0) +end + + +function hailed(NPC, Spawn) +end + +function respawn(NPC) + spawn(NPC) +end \ No newline at end of file diff --git a/server/SpawnScripts/ScaleYard/doorwidget10.lua b/server/SpawnScripts/ScaleYard/doorwidget10.lua new file mode 100644 index 000000000..dafbdbc18 --- /dev/null +++ b/server/SpawnScripts/ScaleYard/doorwidget10.lua @@ -0,0 +1,16 @@ +--[[ + Script Name : SpawnScripts/ScaleYard/doorwidget10.lua + Script Author : Jabantiz + Script Date : 2018.06.18 02:06:21 + Script Purpose : + : +--]] + +function spawn(NPC) + AddSpawnAccess(NPC, NPC) +end + +function respawn(NPC) + spawn(NPC) +end + diff --git a/server/SpawnScripts/ScaleYard/quest_iksar_shackles.lua b/server/SpawnScripts/ScaleYard/quest_iksar_shackles.lua new file mode 100644 index 000000000..9db1ae620 --- /dev/null +++ b/server/SpawnScripts/ScaleYard/quest_iksar_shackles.lua @@ -0,0 +1,26 @@ +--[[ + Script Name : quest_iksar_shackles.lua + Script Purpose : Iksar Shackles for quest 152 + Script Author : Xanibunib + Script Date : 4.1.2009 + Script Notes : +--]] + +-- Quest ID's +local QUEST_3 = 342 --152 --Paying homage to the past-- + +function spawn(NPC) + SetRequiredQuest(NPC, QUEST_3, 4) +end + +function hailed(NPC, Spawn) +end + +function respawn(NPC) +end + +function casted_on(NPC, Spawn, Message) + if HasQuest(Spawn, QUEST_3) and GetQuestStep(Spawn, QUEST_3) == 4 and Message == "take the shackles" then + SetStepComplete(Spawn, QUEST_3, 4) + end +end \ No newline at end of file diff --git a/server/SpawnScripts/ScaleYard/questiksarskull.lua b/server/SpawnScripts/ScaleYard/questiksarskull.lua new file mode 100644 index 000000000..eac470e0f --- /dev/null +++ b/server/SpawnScripts/ScaleYard/questiksarskull.lua @@ -0,0 +1,34 @@ + --[[ + Script Name : IksarSkullFire.lua + Script Purpose : Iksar Skull Fire for quest 152 + Script Author : Xanibunib + Script Date : 4.1.2009 + Script Notes : +--]] + +-- Quest ID's +local QUEST_3 = 342 --152 --Paying homage to the past-- + +function spawn(NPC) + SetRequiredQuest(NPC, QUEST_3, 3) +end + +function hailed(NPC, Spawn) +end + +function respawn(NPC) +end + +function casted_on(NPC, Spawn, Message) + if HasQuest(Spawn, QUEST_3) and GetQuestStep(Spawn, QUEST_3) == 3 and Message == "place skulls" then + --492 for fire + SpawnSet(NPC, "visual_state", "492") + AddTimer(NPC, 5000, "EndFire") + + SetStepComplete(Spawn, QUEST_3, 3) + end +end + +function EndFire(NPC) + SpawnSet(NPC, "visual_state", "0") +end \ No newline at end of file diff --git a/server/SpawnScripts/ScaleYard/questmalachichair.lua b/server/SpawnScripts/ScaleYard/questmalachichair.lua new file mode 100644 index 000000000..7f60b55c1 --- /dev/null +++ b/server/SpawnScripts/ScaleYard/questmalachichair.lua @@ -0,0 +1,25 @@ +--[[ + Script Name : SpawnScripts/ScaleYard/questmalachichair.lua + Script Author : Jabantiz + Script Date : 2018.06.18 12:06:08 + Script Purpose : + : +--]] + +-- Quest ID's +local QUEST_3 = 348 -- 185 --Battle On The Home Front + +function spawn(NPC) + SetRequiredQuest(NPC, QUEST_3, 4) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) +end + +function casted_on(NPC, Spawn, Message) + SetStepComplete(Spawn, QUEST_3, 4) +end diff --git a/server/SpawnScripts/ScaleYard/questmalachidesk.lua b/server/SpawnScripts/ScaleYard/questmalachidesk.lua new file mode 100644 index 000000000..126abd978 --- /dev/null +++ b/server/SpawnScripts/ScaleYard/questmalachidesk.lua @@ -0,0 +1,25 @@ +--[[ + Script Name : SpawnScripts/ScaleYard/questmalachidesk.lua + Script Author : Jabantiz + Script Date : 2018.06.18 12:06:02 + Script Purpose : + : +--]] + +-- Quest ID's +local QUEST_3 = 348 -- 185 --Battle On The Home Front + +function spawn(NPC) + SetRequiredQuest(NPC, QUEST_3, 3) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) +end + +function casted_on(NPC, Spawn, Message) + SetStepComplete(Spawn, QUEST_3, 3) +end \ No newline at end of file diff --git a/server/SpawnScripts/ScaleYard/questmalachiwasphive.lua b/server/SpawnScripts/ScaleYard/questmalachiwasphive.lua new file mode 100644 index 000000000..7a39616d5 --- /dev/null +++ b/server/SpawnScripts/ScaleYard/questmalachiwasphive.lua @@ -0,0 +1,28 @@ +--[[ + Script Name : SpawnScripts/ScaleYard/questmalachiwasphive.lua + Script Purpose : + Script Author : Jabantiz + Script Date : 6/18/2018 + Script Notes : +--]] + +-- Quest ID's +QUEST_1 = 346 -- 175 --Wasp What I Can Do + +function spawn(NPC) + SetRequiredQuest(NPC, QUEST_1, 2) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) +end + +function casted_on(NPC, Spawn, Message) + if Message == "smash the hive" then + SetStepComplete(Spawn, QUEST_1, 2) + Despawn(NPC) + end +end \ No newline at end of file diff --git a/server/SpawnScripts/ScaleYard/questmalachiweaponrack.lua b/server/SpawnScripts/ScaleYard/questmalachiweaponrack.lua new file mode 100644 index 000000000..8b72d83e0 --- /dev/null +++ b/server/SpawnScripts/ScaleYard/questmalachiweaponrack.lua @@ -0,0 +1,26 @@ +--[[ + Script Name : SpawnScripts/ScaleYard/questmalachiweaponrack.lua + Script Author : Jabantiz + Script Date : 2018.06.18 12:06:45 + Script Purpose : + : +--]] + +-- Quest ID's +local QUEST_3 = 348 -- 185 --Battle On The Home Front + +function spawn(NPC) + SetRequiredQuest(NPC, QUEST_3, 5) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) +end + +function casted_on(NPC, Spawn, Message) + SetStepComplete(Spawn, QUEST_3, 5) +end + diff --git a/server/SpawnScripts/ScaleYard/questvrimbox.lua b/server/SpawnScripts/ScaleYard/questvrimbox.lua new file mode 100644 index 000000000..6a3828142 --- /dev/null +++ b/server/SpawnScripts/ScaleYard/questvrimbox.lua @@ -0,0 +1,31 @@ +--[[ + Script Name : + Script Purpose : + Script Author : + Script Date : + Script Notes : +--]] + +-- Quest ID's +local QUEST_1 = 340 --142 --A Puppy for your potion-- + +-- Item ID's +local BOX_OF_ALCHEMY_COMPONENTS = 4537 + +function spawn(NPC) + SetRequiredQuest(NPC, QUEST_1, 2) +end + +function hailed(NPC, Spawn) +end + +function respawn(NPC) + spawn(NPC) +end + +function casted_on(NPC, Spawn, Message) + if HasQuest(Spawn, QUEST_1) and GetQuestStep(Spawn, QUEST_1) == 2 and Message == "take the box" then + SetStepComplete(Spawn, QUEST_1, 2) + SummonItem(Spawn, BOX_OF_ALCHEMY_COMPONENTS) + end +end \ No newline at end of file diff --git a/server/SpawnScripts/ScaleYard/unnamed.lua b/server/SpawnScripts/ScaleYard/unnamed.lua new file mode 100644 index 000000000..068220e46 --- /dev/null +++ b/server/SpawnScripts/ScaleYard/unnamed.lua @@ -0,0 +1,16 @@ +--[[ + Script Name : SpawnScripts/ScaleYard/unnamed.lua + Script Author : Jabantiz + Script Date : 2018.06.18 02:06:46 + Script Purpose : + : +--]] + +function spawn(NPC) + AddSpawnAccess(NPC, NPC) +end + +function respawn(NPC) + spawn(NPC) +end + diff --git a/server/SpawnScripts/ScaleYard/zonetosprawl.lua b/server/SpawnScripts/ScaleYard/zonetosprawl.lua new file mode 100644 index 000000000..6e7247838 --- /dev/null +++ b/server/SpawnScripts/ScaleYard/zonetosprawl.lua @@ -0,0 +1,16 @@ +--[[ + Script Name : SpawnScripts/ScaleYard/zonetosprawl.lua + Script Author : Jabantiz + Script Date : 2018.06.18 02:06:15 + Script Purpose : Dummy spawn for 1208+ clients so they can see the zone to the sprawl, hide on every one else + : +--]] + +function spawn(NPC) + AddSpawnAccess(NPC, NPC) +end + +function respawn(NPC) + spawn(NPC) +end + diff --git a/server/SpawnScripts/SourceEvil/VithLTar.lua b/server/SpawnScripts/SourceEvil/VithLTar.lua new file mode 100644 index 000000000..accbb77b3 --- /dev/null +++ b/server/SpawnScripts/SourceEvil/VithLTar.lua @@ -0,0 +1,41 @@ +--[[ + Script Name : SpawnScripts/SourceEvil/VithLTar.lua + Script Purpose : Make Vith attackable and spawns adds + Script Author : Jabantiz + Script Date : 9/10/2016 + Script Notes : BeginAttack() is called from a timer function set in eviltotem.lua +--]] + +local Priest1ID = 433225 +local Priest2ID = 433226 +local PetID = 2540008 + +function BeginAttack(NPC, Spawn) + local zone = GetZone(NPC) + local Priest1 = SpawnByLocationID(zone, Priest1ID) + local Priest2 = SpawnByLocationID(zone, Priest2ID) + + SpawnSet(NPC, "attackable", 1) + SpawnSet(NPC, "show_level", 1) + SpawnSet(NPC, "targetable", 1) + SpawnSet(NPC, "visual_state", 0) + SpawnSet(NPC, "faction", 1) + + PlayFlavor(NPC, "", "Now rot like your friends!", "", 1689589577, 4560189) + Attack(NPC, Spawn) + + local Pet = GetSpawn(NPC, PetID) + if Pet ~= nil then + SpawnSet(Pet, "faction", 1) + Attack(Pet, Spawn) + end + + if Priest1 ~= nil then + Attack(Priest1, Spawn) + end + + if Priest2 ~= nil then + Attack(Priest2, Spawn) + end + +end \ No newline at end of file diff --git a/server/SpawnScripts/SourceEvil/evil_totem.lua b/server/SpawnScripts/SourceEvil/evil_totem.lua new file mode 100644 index 000000000..a2aeae89c --- /dev/null +++ b/server/SpawnScripts/SourceEvil/evil_totem.lua @@ -0,0 +1,30 @@ +--[[ + Script Name : + Script Purpose : + Script Author : + Script Date : + Script Notes : +--]] + +function spawn(NPC) +end + +function hailed(NPC, Spawn) +end + +function respawn(NPC) +end + +function death(NPC, Spawn) + Vith = GetSpawn(NPC, 2540002) + + choice = math.random(1, 2) + if choice == 1 then + Say(Vith, "No, not the totems! How did you know?") + else + Say(Vith, "Don't touch those!") + end + + AddTimer(Vith, 3000, "CheckLastTotem") + Despawn(NPC, 2000) +end \ No newline at end of file diff --git a/server/SpawnScripts/SourceEvil/eviltotem.lua b/server/SpawnScripts/SourceEvil/eviltotem.lua new file mode 100644 index 000000000..288c684a8 --- /dev/null +++ b/server/SpawnScripts/SourceEvil/eviltotem.lua @@ -0,0 +1,68 @@ +--[[ + Script Name : SpawnScripts/SourceEvil/eviltotem.lua + Script Purpose : Handles most of the ring event in the instance + Script Author : Jabantiz + Script Date : 9/10/2016 + Script Notes : +--]] + +local VithID = 2540005 +local PoisonID = 2540026 + +local Totem1 = 475343 +local Totem2 = 475345 +local Totem3 = 1584964 +local Totem4 = 1584965 + +function spawn(NPC) +end + +function respawn(NPC) + spawn(NPC) +end + +function casted_on(NPC, Spawn, Message) + if Message == "destroy totem" then + SpawnSet(NPC, "show_command_icon", "0") + SpawnSet(NPC, "display_hand_icon", "0") + AddTimer(NPC, 1000, "Vanish") + + local Vith = GetSpawn(NPC, VithID) + if Vith ~= nil then + local choice = math.random(1, 2) + if choice == 1 then + PlayFlavor(Vith, "", "Don't touch those!", "", 1689589577, 4560189) + else + PlayFlavor(Vith, "", "No, not the totems! How did you know?", "", 1689589577, 4560189) + end + + local locationID = GetSpawnLocationID(NPC) + if locationID == Totem1 then + SetTempVariable(Vith, "Totem1Destroyed", "true") + elseif locationID == Totem2 then + SetTempVariable(Vith, "Totem2Destroyed", "true") + elseif locationID == Totem3 then + SetTempVariable(Vith, "Totem3Destroyed", "true") + elseif locationID == Totem4 then + SetTempVariable(Vith, "Totem4Destroyed", "true") + end + + if GetTempVariable(Vith, "Totem1Destroyed") == "true" and GetTempVariable(Vith, "Totem2Destroyed") == "true" and GetTempVariable(Vith, "Totem3Destroyed") == "true" and GetTempVariable(Vith, "Totem4Destroyed") == "true" then + PlayFlavor(Vith, "", "Quite a nuisance you are. My patience is gone, prepare for my wrath!", "", 1689589577, 4560189, Spawn) + AddTimer(Vith, 10000, "BeginAttack", 1, Spawn) + local Poison = GetSpawn(NPC, PoisonID) + if Poison ~= nil then + SpawnSet(Poison, "visual_state", "0") + end + end + + end + end +end + +function Vanish(NPC) + Despawn(NPC) +end + +function death(NPC, Spawn) +end \ No newline at end of file diff --git a/server/SpawnScripts/SourceEvil/goblins.lua b/server/SpawnScripts/SourceEvil/goblins.lua new file mode 100644 index 000000000..0dd7ba99b --- /dev/null +++ b/server/SpawnScripts/SourceEvil/goblins.lua @@ -0,0 +1,35 @@ +--[[ + Script Name : SpawnScripts/SourceEvil/goblins.lua + Script Purpose : When the three goblins die enable the totems + Script Author : Jabantiz + Script Date : 9/10/2016 + Script Notes : +--]] + +-- Spawn ID for Vith L'Tar +local VithID = 2540005 +-- location id's for the 4 totems +local totems = { 475343, 475345, 1584964, 1584965 } + +function spawn(NPC) +end + +function respawn(NPC) + spawn(NPC) +end + +function group_dead(NPC) + local zone = GetZone(NPC) + for index, value in pairs(totems) do + local totem = GetSpawnByLocationID(zone, value) + if totem ~= nil then + SpawnSet(totem, "show_command_icon", "1") + SpawnSet(totem, "display_hand_icon", "1") + end + end + + local Vith = GetSpawn(NPC, VithID) + if Vith ~= nil then + PlayFlavor(Vith, "", "Haha, you think you can defeat me? You can't even touch me.", "", 1689589577, 4560189) + end +end \ No newline at end of file diff --git a/server/SpawnScripts/SourceEvil/goodnecromancerpoison.lua b/server/SpawnScripts/SourceEvil/goodnecromancerpoison.lua new file mode 100644 index 000000000..ccf298f3d --- /dev/null +++ b/server/SpawnScripts/SourceEvil/goodnecromancerpoison.lua @@ -0,0 +1,15 @@ +--[[ + Script Name : SpawnScripts/SourceEvil/goodnecromancerpoison.lua + Script Author : Jabantiz + Script Date : 2016.09.09 11:09:58 + Script Purpose : Makes the poison cube not block everything + : +--]] + +function spawn(NPC) + SpawnSet(NPC, "activity_state", "0") +end + +function respawn(NPC) + spawn(NPC) +end \ No newline at end of file diff --git a/server/SpawnScripts/Sprawl/ArcanistTikkeri.lua b/server/SpawnScripts/Sprawl/ArcanistTikkeri.lua new file mode 100644 index 000000000..e7fd0730b --- /dev/null +++ b/server/SpawnScripts/Sprawl/ArcanistTikkeri.lua @@ -0,0 +1,87 @@ +--[[ + Script Name : SpawnScripts/Sprawl/ArcanistTikkeri.lua + Script Purpose : Arcanist Tikkeri + Script Author : Scatman + Script Date : 2009.07.26 + Script Notes : +--]] + +local QUEST_3_FROM_KURDEK = 255 + +function spawn(NPC) + SetPlayerProximityFunction(NPC, 10, "InRange") +end + +function respawn(NPC) + spawn(NPC) +end + +function InRange(NPC, Spawn) + local choice = math.random(1, 4) + if choice == 1 then + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/arcanist_tikkeri/fprt_adv03_sprawl/quest/quest_arcanist_tikkeri_callout_5a64971c.mp3", "We will strike when they least expect it!", "scheme", 3382540099, 2030330993, Spawn) + elseif choice == 2 then + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/arcanist_tikkeri/fprt_adv03_sprawl/quest/quest_arcanist_tikkeri_callout_84acfa3e.mp3", "Good, good, let them keep underestimating us!", "chuckle", 35617715, 1152178748, Spawn) + elseif choice == 3 then + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/arcanist_tikkeri/fprt_adv03_sprawl/quest/quest_arcanist_tikkeri_callout_87a919d8.mp3", "Soon the Black Magi will control all of the Sprawl!", "scheme", 856975110, 1693275305, Spawn) + elseif choice == 4 then + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/arcanist_tikkeri/fprt_adv03_sprawl/quest/quest_arcanist_tikkeri_callout_9bb2bd96.mp3", "Our plan is sound, yes. It cannot fail.", "scheme", 1527040733, 1208100176, Spawn) + end +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + if HasCompletedQuest(Spawn, QUEST_3_FROM_KURDEK) or (HasQuest(Spawn, QUEST_3_FROM_KURDEK) and GetQuestStep(Spawn, QUEST_3_FROM_KURDEK) > 1) then + AddConversationOption(conversation, "As you wish.") + StartConversation(conversation, NPC, Spawn, "You won't trick me again, outsider. The Black Magi have nothing more to say to you.") + else + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/arcanist_tikkeri/fprt_adv03_sprawl/quests/arcanist_tikkeri001.mp3", "", "", 1959125107, 2897082234, Spawn) + if HasQuest(Spawn, QUEST_3_FROM_KURDEK) and GetQuestStep(Spawn, QUEST_3_FROM_KURDEK) == 1 then + AddConversationOption(conversation, "I seek to learn more about your organization.", "dlg_28_1") + end + AddConversationOption(conversation, "Very well, I'll go.") + StartConversation(conversation, NPC, Spawn, "Why do you approach me, outsider? You could never understand the ways of the Black Magi. Move along.") + end +end + +function dlg_28_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/arcanist_tikkeri/fprt_adv03_sprawl/quests/arcanist_tikkeri002.mp3", "", "", 1384331297, 2679607615, Spawn) + AddConversationOption(conversation, "I have some information you would find useful.", "dlg_28_2") + AddConversationOption(conversation, "I will take my leave, then.") + StartConversation(conversation, NPC, Spawn, "That would be telling. We want... information. If you have nothing of value, you are useless to me.") +end + +function dlg_28_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/arcanist_tikkeri/fprt_adv03_sprawl/quests/arcanist_tikkeri003.mp3", "", "", 429505535, 657718055, Spawn) + AddConversationOption(conversation, "I have information about 'the wheel.'", "dlg_28_3") + AddConversationOption(conversation, "Never mind.") + StartConversation(conversation, NPC, Spawn, "You speak of this currency, yet give no indication of its worth. Tell me what you know, and I will judge you fairly.") +end + +function dlg_28_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/arcanist_tikkeri/fprt_adv03_sprawl/quests/arcanist_tikkeri004.mp3", "", "", 2113414665, 3782181434, Spawn) + AddConversationOption(conversation, "Who are the Marked?", "dlg_28_4") + AddConversationOption(conversation, "You won't get anything from me.") + StartConversation(conversation, NPC, Spawn, "The Wheel? You know of the Wheel? Tell me what you know! The Marked must obtain this information. By hook or by crook, we will!") +end + +function dlg_28_4(NPC, Spawn) + SetStepComplete(Spawn, QUEST_3_FROM_KURDEK, 1) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/arcanist_tikkeri/fprt_adv03_sprawl/quests/arcanist_tikkeri005.mp3", "", "", 2625005757, 2857555075, Spawn) + AddConversationOption(conversation, "But... but... fine.") + StartConversation(conversation, NPC, Spawn, "Crafty outsider. If you truly knew of the Wheel, you would not ask such a question. Begone, and trouble me no more.") +end diff --git a/server/SpawnScripts/Sprawl/BrutemasterTarden.lua b/server/SpawnScripts/Sprawl/BrutemasterTarden.lua new file mode 100644 index 000000000..b1c1e05b7 --- /dev/null +++ b/server/SpawnScripts/Sprawl/BrutemasterTarden.lua @@ -0,0 +1,148 @@ +--[[ + Script Name : SpawnScripts/Sprawl/BrutemasterTarden.lua + Script Purpose : Brutemaster Tarden + Script Author : Scatman + Script Date : 2008.09.29 + Script Notes : +--]] + +local QUEST_2_FROM_KURDEK = 254 + +function spawn(NPC) + SetPlayerProximityFunction(NPC, 10, "InRange") +end + +function respawn(NPC) + spawn(NPC) +end + +function InRange(NPC, Spawn) + local choice = math.random(1, 3) + if choice == 1 then + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/brutemaster_tarden/fprt_adv03_sprawl/quest/quest_brutemaster_tarden_callout_1277cb68.mp3", "Don't forget that you all work for me!", "threaten", 938386903, 4034228899, Spawn) + elseif choice == 2 then + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/brutemaster_tarden/fprt_adv03_sprawl/quest/quest_brutemaster_tarden_callout_372b3277.mp3", "The Giantslayers are the toughest gang around!", "thumbsup", 3470522830, 1311148717, Spawn) + elseif choice == 3 then + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/brutemaster_tarden/fprt_adv03_sprawl/quest/quest_brutemaster_tarden_callout_d6e87a9e.mp3", "Remember, I'm the boss around here!", "threaten", 3904448873, 572831666, Spawn) + end +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + if HasCompletedQuest(Spawn, QUEST_2_FROM_KURDEK) or (HasQuest(Spawn, QUEST_2_FROM_KURDEK) and GetQuestStep(Spawn, QUEST_2_FROM_KURDEK) > 1) then + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/brutemaster_tarden/fprt_adv03_sprawl/quests/brutemaster_tarden010.mp3", "", "", 47575538, 2815062318, Spawn) + AddConversationOption(conversation, "I better, or else there will be another beating coming your way.") + StartConversation(conversation, NPC, Spawn, "Hey there, friend! Don't worry, the Giantslayers are gonna make you proud! You'll see!") + else + if HasQuest(Spawn, QUEST_2_FROM_KURDEK) and GetQuestStep(Spawn, QUEST_2_FROM_KURDEK) == 1 then + AddConversationOption(conversation, "Listen here, Tarden. I'm with the Dreadnaughts, and we are none too pleased with the pathetic job you're doing!", "dlg_26_1") + end + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/brutemaster_tarden/fprt_adv03_sprawl/quests/brutemaster_tarden001.mp3", "", "", 3342147230, 575383753, Spawn) + AddConversationOption(conversation, "Fine, I'll leave you alone.") + StartConversation(conversation, NPC, Spawn, "Don't bother me! I have important work to do!") + end +end + +function dlg_26_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/brutemaster_tarden/fprt_adv03_sprawl/quests/brutemaster_tarden002.mp3", "", "", 3459020028, 2777845153, Spawn) + AddConversationOption(conversation, "You're lazy and your thugs do sloppy work. And yes, I am a Dreadnaught.", "dlg_26_2") + AddConversationOption(conversation, "I don't have time for your excuses.") + StartConversation(conversation, NPC, Spawn, "Pathetic? How dare you speak to me that way! I lead the Giantslayers, the most powerful gang in Freeport! I know the Dreadnaughts, and you are no Dreadnaught.") +end + +function dlg_26_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/brutemaster_tarden/fprt_adv03_sprawl/quests/brutemaster_tarden003.mp3", "", "", 2261902331, 3878598451, Spawn) + AddConversationOption(conversation, "As a matter of fact, here's some trouble for you!", "dlg_26_3") + AddConversationOption(conversation, "Fine, I'll go.") + StartConversation(conversation, NPC, Spawn, "Lazy? Sloppy? Nobody talks to me that way! You better move along, unless you're ready for a whole lot of trouble!") +end + +function dlg_26_3(NPC, Spawn) + SpawnSet(NPC, "visual_state", 11463) -- duck + SpawnSet(Spawn, "visual_state", 10783) -- attack (punch) + AddTimer(NPC, 2000, "ResetVisualState", 1, NPC) + AddTimer(NPC, 2000, "ResetVisualState", 1, Spawn) + + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/brutemaster_tarden/fprt_adv03_sprawl/quests/brutemaster_tarden004.mp3", "", "", 3349447803, 1486216725, Spawn) + AddConversationOption(conversation, "Too bad! You won't be ready for this, either!", "dlg_26_4") + StartConversation(conversation, NPC, Spawn, "OOOF! Hey, I wasn't ready!") +end + +function dlg_26_4(NPC, Spawn) + SpawnSet(NPC, "visual_state", 11767) -- knockback + SpawnSet(Spawn, "visual_state", 11761) -- kick + + AddTimer(NPC, 2000, "ResetVisualState", 1, NPC) + AddTimer(NPC, 2000, "ResetVisualState", 1, Spawn) + + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/brutemaster_tarden/fprt_adv03_sprawl/quests/brutemaster_tarden005.mp3", "", "", 187758376, 1637440927, Spawn) + AddConversationOption(conversation, "Tough luck, Tarden. Have some more!", "dlg_26_5") + StartConversation(conversation, NPC, Spawn, "ARGH! No fair, gimme a chance to prepare!") +end + +function dlg_26_5(NPC, Spawn) + SpawnSet(NPC, "visual_state", 11256) -- cringe + SpawnSet(Spawn, "visual_state", 10783) -- attack (punch) + + AddTimer(NPC, 2000, "ResetVisualState", 1, NPC) + AddTimer(NPC, 2000, "ResetVisualState", 1, Spawn) + + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/brutemaster_tarden/fprt_adv03_sprawl/quests/brutemaster_tarden006.mp3", "", "", 1054842300, 2763956088, Spawn) + AddConversationOption(conversation, "Yeah, I really am. You want more proof?", "dlg_26_6") + AddConversationOption(conversation, "I guess you've learned your lesson.") + StartConversation(conversation, NPC, Spawn, "UGH! Okay, okay, I give up. So I guess you really are a Dreadnaught after all.") +end + +function dlg_26_6(NPC, Spawn) +--make npc flinch +--make spawn act buff + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/brutemaster_tarden/fprt_adv03_sprawl/quests/brutemaster_tarden007.mp3", "", "", 3338897580, 3124247652, Spawn) + AddConversationOption(conversation, "You better, or I'll have to pay you another visit.", "dlg_26_7") + AddConversationOption(conversation, "Then I guess I can leave.") + StartConversation(conversation, NPC, Spawn, "No! Uh, I mean I've seen enough, thanks. Okay, I admit I haven't worked as hard to train my Giantslayers as I probably should. I'll get to work on it right away.") +end + +function dlg_26_7(NPC, Spawn) + SetStepComplete(Spawn, QUEST_2_FROM_KURDEK, 1) + + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/brutemaster_tarden/fprt_adv03_sprawl/quests/brutemaster_tarden008.mp3", "", "", 2489119910, 4279989097, Spawn) + AddConversationOption(conversation, "Oh, and what was that you said about the Giantslayers being the toughest gang in Freeport?", "dlg_26_8") + AddConversationOption(conversation, "We'll see.") + StartConversation(conversation, NPC, Spawn, "No need for that, friend! Tell Enforcer Kurdek that I've turned over a new leaf. The Giantslayers are really gonna buckle down, I promise!") +end + +function dlg_26_8(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/brutemaster_tarden/fprt_adv03_sprawl/quests/brutemaster_tarden009.mp3", "", "", 2146655303, 2356834417, Spawn) + AddConversationOption(conversation, "That's more like it. I'll be keeping an eye on you, Tarden.") + StartConversation(conversation, NPC, Spawn, "I meant next to the Dreadnaughts, of course! Everyone knows you guys are the toughest around.") +end + +function ResetVisualState(ThisSpawn, Spawn) + SpawnSet(Spawn, "visual_state", 0) +end diff --git a/server/SpawnScripts/Sprawl/CrispinLuvinius.lua b/server/SpawnScripts/Sprawl/CrispinLuvinius.lua new file mode 100644 index 000000000..984c679c2 --- /dev/null +++ b/server/SpawnScripts/Sprawl/CrispinLuvinius.lua @@ -0,0 +1,148 @@ +--[[ + Script Name : SpawnScripts/Sprawl/CrispinLuvinius.lua + Script Purpose : Crispin Luvinius + Script Author : Scatman + Script Date : 2009.07.26 + Script Notes : +--]] + +local QUEST_1 = 258 +local QUEST_2 = 259 + +function spawn(NPC) + ProvidesQuest(NPC, QUEST_1) + ProvidesQuest(NPC, QUEST_2) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + if HasCompletedQuest(Spawn, QUEST_1) then + if HasCompletedQuest(Spawn, QUEST_2) then + DoYouHaveAProblemDone(NPC, Spawn, conversation) + elseif HasQuest(Spawn, QUEST_2) then + OnQuset2(NPC, Spawn, conversation) + else + DoYouHaveAProblem2(NPC, Spawn, conversation) + end + elseif HasQuest(Spawn, QUEST_1) then + OnQuest1(NPC, Spawn, conversation) + else + DoYouHaveAProblem(NPC, Spawn, conversation) + end +end + +------------------------------------------------------------------------------------------------------------------- +-- QUEST 1 +------------------------------------------------------------------------------------------------------------------- + +function DoYouHaveAProblem(NPC, Spawn, conversation) + PlayFlavor(NPC, "voiceover/english/crispin_luvinius/fprt_hood04/std_crispin_luvinius.mp3", "", "", 1982819374, 703450678, Spawn) + AddConversationOption(conversation, "I don't have a problem... I solve problems. Anything you need fixed?", "dlg_13_1") + AddConversationOption(conversation, "I don't want any trouble.") + StartConversation(conversation, NPC, Spawn, "Do you have a problem? You're gonna have one soon if you don't keep walking.") +end + +function dlg_13_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "Of course I can. I said I was a problem solver, didn't I?", "dlg_13_2") + AddConversationOption(conversation, "Not really... I've got too many other things to do. Maybe some other time.") + StartConversation(conversation, NPC, Spawn, "A problem solver, huh? You can talk the talk, but can you walk the walk? Yeah ... I got a problem. One of our customers isn't paying us for our 'services,' if you know what I'm saying. Maybe you can fix this problem for us, huh?") +end + +function dlg_13_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "Sounds like an easy job.", "OfferQuest1") + StartConversation(conversation, NPC, Spawn, "Okay, here's the deal. The guy is a vagrant who lives out in the ruins, right? We want to send the message that no one messes with us. You need to head south of here and do some dirty work to his buddies, understand?") +end + +function OfferQuest1(NPC, Spawn) + FaceTarget(NPC, Spawn) + OfferQuest(NPC, Spawn, QUEST_1) +end + +function OnQuest1(NPC, Spawn, conversation) + PlayFlavor(NPC, "voiceover/english/crispin_luvinius/fprt_hood04/std_crispin_luvinius.mp3", "", "", 1982819374, 703450678, Spawn) + if GetQuestStep(Spawn, QUEST_1) == 2 then + AddConversationOption(conversation, "Problem solved. The hoodlums are pushing up daises.", "dlg_23_1") + end + AddConversationOption(conversation, "I don't want any trouble.") + StartConversation(conversation, NPC, Spawn, "Do you have a problem? You're gonna have one soon if you don't keep walking.") +end + +function dlg_23_1(NPC, Spawn) + SetStepComplete(Spawn, QUEST_1, 2) + + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "I told you... I'm a problem solver.") + StartConversation(conversation, NPC, Spawn, "I knew you'd take care of 'em! Good show! Oh, and here's a bit-o-coin for all your hard work. Heh, heh.") +end + +------------------------------------------------------------------------------------------------------------------- +-- QUEST 2 +------------------------------------------------------------------------------------------------------------------- + +function DoYouHaveAProblem2(NPC, Spawn, conversation) + PlayFlavor(NPC, "voiceover/english/crispin_luvinius/fprt_hood04/std_crispin_luvinius.mp3", "", "", 1982819374, 703450678, Spawn) + AddConversationOption(conversation, "So... have any more problems you can't handle yourself?", "dlg_24_1") + AddConversationOption(conversation, "I don't want any trouble.") + StartConversation(conversation, NPC, Spawn, "Do you have a problem? You're gonna have one soon if you don't keep walking.") +end + +function dlg_24_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "As long as you have the money, I'm willing to do it.", "dlg_24_2") + AddConversationOption(conversation, "Sorry... I don't work for lazy people... or cowards.") + StartConversation(conversation, NPC, Spawn, "Oh! I recognize you. Glad you came along ... yeah ... very glad. I hope your uh ... services ... are available again because ... uh ... there's this little matter... and I'm too busy to take care of it. Yes, too busy.") +end + +function dlg_24_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "Don't worry... I'll handle it.", "OfferQuest2") + StartConversation(conversation, NPC, Spawn, "That's what I like to hear! Remember that dirty vagrant you delivered the message to? Rumor has it he's hiding among rogues and scoundrels from the other districts -- a gang called the Giantslayers. And his ... brethren ... have gotten their feathers all ruffled and are planning to come here to ... pay court ... if you understand me. They want to send a message to their leader. Now, I enjoy a good tussle as much as anyone, of course, but, uh ... we don't want to rob you of an opportunity to prove your fighting skills. So, why don't you go to the Giantslayers and tan their mangy hides for us?") +end + +function OfferQuest2(NPC, Spawn) + FaceTarget(NPC, Spawn) + OfferQuest(NPC, Spawn, QUEST_2) +end + +function OnQuest2(NPC, Spawn, conversation) + PlayFlavor(NPC, "voiceover/english/crispin_luvinius/fprt_hood04/std_crispin_luvinius.mp3", "", "", 1982819374, 703450678, Spawn) + if GetQuestStep(Spawn, QUEST_2) == 2 then + AddConversationOption(conversation, "They won't be delivering any kind of message.", "dlg_34_1") + end + AddConversationOption(conversation, "I don't want any trouble.") + StartConversation(conversation, NPC, Spawn, "Do you have a problem? You're gonna have one soon if you don't keep walking.") +end + +function dlg_34_1(NPC, Spawn) + SetStepComplete(Spawn, QUEST_2, 2) + + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "Maybe I might, maybe not. We'll see what my schedule is like.") + StartConversation(conversation, NPC, Spawn, "I knew you'd take care of 'em! Good show! Oh, and here's a bit-o-coin for all your hard work. Heh, heh.") +end + +function DoYouHaveAProblemDone(NPC, Spawn, conversation) + PlayFlavor(NPC, "voiceover/english/crispin_luvinius/fprt_hood04/std_crispin_luvinius.mp3", "", "", 1982819374, 703450678, Spawn) + AddConversationOption(conversation, "I don't want any trouble.") + StartConversation(conversation, NPC, Spawn, "Do you have a problem? You're gonna have one soon if you don't keep walking.") +end \ No newline at end of file diff --git a/server/SpawnScripts/Sprawl/EnforcerKurdek.lua b/server/SpawnScripts/Sprawl/EnforcerKurdek.lua new file mode 100644 index 000000000..21786b967 --- /dev/null +++ b/server/SpawnScripts/Sprawl/EnforcerKurdek.lua @@ -0,0 +1,577 @@ +--[[ + Script Name : SpawnScripts/Sprawl/EnforcerKurdek.lua + Script Purpose : Enforcer Kurdek + Script Author : Scatman + Script Date : 2008.09.29 + Script Notes : +--]] + +local QUEST_FROM_BIGBEND_KROOTA = 169 +local QUEST_FROM_SCALEYARD_CLANCHEIFMALACHI = 203 +local QUEST_1 = 253 +local QUEST_2 = 254 +local QUEST_3 = 255 +local QUEST_4 = 256 +local QUEST_5 = 257 +local spoke = false + +function spawn(NPC) + spoke = false + SetPlayerProximityFunction(NPC, 10, "InRange") + ProvidesQuest(NPC, QUEST_1) + ProvidesQuest(NPC, QUEST_2) + ProvidesQuest(NPC, QUEST_3) + ProvidesQuest(NPC, QUEST_4) + ProvidesQuest(NPC, QUEST_5) +end + +function respawn(NPC) + spawn(NPC) +end + +function InRange(NPC, Spawn) + if spoke == false then + spoke = true + local choice = math.random(1, 3) + if choice == 1 then + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/enforcer_kurdek/fprt_adv03_sprawl/quest/quest_enforcer_kurdek_callout_ffe04873.mp3", "The Dreadnaughts control the Sprawl!", "agree", 2336146277, 2662085433, Spawn) + elseif choice == 2 then + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/enforcer_kurdek/fprt_adv03_sprawl/quest/quest_enforcer_kurdek_callout_3890ea9e.mp3", "I'd better not catch any Ashen Order monks sneaking around here!", "threaten", 2065010407, 708114838, Spawn) + elseif choice == 3 then + Say(NPC, "Every gang in Freeport will work for us!", Spawn) + end + AddTimer(NPC, 60000, "ResetSpoke") + end +end + +function ResetSpoke(NPC) + spoke = false +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + if HasQuest(Spawn, QUEST_FROM_BIGBEND_KROOTA) then + SetStepComplete(Spawn, QUEST_FROM_BIGBEND_KROOTA, 1) + end + if HasQuest(Spawn, QUEST_FROM_SCALEYARD_CLANCHEIFMALACHI) then + SetStepComplete(Spawn, QUEST_FROM_SCALEYARD_CLANCHEIFMALACHI, 1) + end + + if HasCompletedQuest(Spawn, QUEST_1) then + if HasCompletedQuest(Spawn, QUEST_2) then + if HasCompletedQuest(Spawn, QUEST_3) then + if HasCompletedQuest(Spawn, QUEST_4) then + if HasCompletedQuest(Spawn, QUEST_5) then + Say(NPC, "Thanks again for helping the dreadnaughts. Stay strong!", Spawn) + elseif HasQuest(Spawn, QUEST_5) then + OnQuest5(NPC, Spawn, conversation) + else + WelcomeBack(NPC, Spawn, conversation) + end + elseif HasQuest(Spawn, QUEST_4) then + OnQuest4(NPC, Spawn, conversation) + else + NiceWork(NPC, Spawn, conversation) + end + elseif HasQuest(Spawn, QUEST_3) then + OnQuest3(NPC, Spawn, conversation) + else + GreetingsAdventurer(NPC, Spawn, conversation) + end + elseif HasQuest(Spawn, QUEST_2) then + OnQuest2(NPC, Spawn, conversation) + else + GreetingsAgain(NPC, Spawn, conversation) + end + elseif HasQuest(Spawn, QUEST_1) then + OnQuest1(NPC, Spawn, conversation) + else + YouMustBeBraver(NPC, Spawn, conversation) + end +end + +------------------------------------------------------------------------------------------------------------------------ +-- QUEST 1 +------------------------------------------------------------------------------------------------------------------------ + +function YouMustBeBraver(NPC, Spawn, conversation) + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/enforcer_kurdek/fprt_adv03_sprawl/quests/enforcer_kurdek001.mp3", "", "", 873687855, 1608474369, Spawn) + AddConversationOption(conversation, "I'm just here looking for work.", "dlg_10_1") + AddConversationOption(conversation, "No trouble, I'll be moving along.") + StartConversation(conversation, NPC, Spawn, "You must be braver than you look to disturb me! State your business, and do it quickly. That is, unless you're here looking to start trouble.") +end + +function dlg_10_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/enforcer_kurdek/fprt_adv03_sprawl/quests/enforcer_kurdek003.mp3", "", "", 3361322241, 3548873750, Spawn) + AddConversationOption(conversation, "So the Dreadnaughts are some kind of gang?", "dlg_10_2") + AddConversationOption(conversation, "Your bravado doesn't interest me.") + StartConversation(conversation, NPC, Spawn, "I'm Enforcer Kurdek of the Dreadnaughts. We are the fist of the Overlord, striking fear into the hearts of his rivals and crushing the bones of his enemies. The Militia may guard the walls of Freeport, but we rule its streets.") +end + +function dlg_10_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/enforcer_kurdek/fprt_adv03_sprawl/quests/enforcer_kurdek004.mp3", "", "", 2971300054, 802401353, Spawn) + AddConversationOption(conversation, "Tell me more about the Dreadnaughts.", "dlg_11_3") + AddConversationOption(conversation, "I'm not interested in your gang. What is this place?", "dlg_12_8") + AddConversationOption(conversation, "I think I'll be moving along.") + StartConversation(conversation, NPC, Spawn, "We do rule over all the gangs of Freeport, but the Dreadnaughts are a lot more than that. We keep the smaller gangs in line and maintain order on the streets of Freeport. We have a proud history dating back centuries.") +end + +function dlg_11_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/enforcer_kurdek/fprt_adv03_sprawl/quests/enforcer_kurdek005.mp3", "", "", 3101195363, 1106471078, Spawn) + AddConversationOption(conversation, "Where did the Dreadnaughts come from?", "dlg_11_4") + AddConversationOption(conversation, "This tale has no interest for me.") + StartConversation(conversation, NPC, Spawn, "The Dreadnaughts are made up of bruisers, which everyone knows are the toughest combatants in all of Norrath. We hone our bodies into lethal weapons, capable of both dishing out and sustaining heavy amounts of damage.") +end + +function dlg_11_4(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/enforcer_kurdek/fprt_adv03_sprawl/quests/enforcer_kurdek006.mp3", "", "", 1592822156, 3131496072, Spawn) + AddConversationOption(conversation, "So the Dreadnaughts used to be monks?", "dlg_11_5") + AddConversationOption(conversation, "I don't believe any of this.") + StartConversation(conversation, NPC, Spawn, "Once there was a weak caste of monks that lived here in Freeport called the Ashen Order. They were lazy anarchists, stubbornly refusing the Overlord's noble efforts to unite our city and lead us into the future. Fortunately, a number of their more enlightened members supported the Overlord and wanted to make something more of themselves.") +end + +function dlg_11_5(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/enforcer_kurdek/fprt_adv03_sprawl/quests/enforcer_kurdek007.mp3", "", "", 2501056164, 792758707, Spawn) + AddConversationOption(conversation, "What happened to the Ashen Order?", "dlg_12_6") + AddConversationOption(conversation, "I think you've been misled, Kurdek.") + StartConversation(conversation, NPC, Spawn, "Originally, yes. But these enlightened members of the order wanted to become something greater than they were. See, the Ashen Order had strength, but they refused to use it for anything productive. They would rather lay around in their dojo than help embrace Freeport's future. They allowed themselves to become weak and corrupt.") +end + +function dlg_12_6(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/enforcer_kurdek/fprt_adv03_sprawl/quests/enforcer_kurdek008.mp3", "", "", 1768991612, 1262532651, Spawn) + AddConversationOption(conversation, "How were the Dreadnaughts formed?", "dlg_12_7") + AddConversationOption(conversation, "I think I'll follow their example and leave.") + StartConversation(conversation, NPC, Spawn, "The Overlord did his best to reform them, but they were just too far gone. Finally he had no choice but to drive the Ashen Order from Freeport. They scurried off to the desert with their tails between their legs, never daring to set foot in our great city again.") +end + +function dlg_12_7(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/enforcer_kurdek/fprt_adv03_sprawl/quests/enforcer_kurdek009.mp3", "", "", 1775956219, 1310346606, Spawn) + AddConversationOption(conversation, "What are you doing here in the Sprawl?", "dlg_12_8") + AddConversationOption(conversation, "I know when I'm being deceived.") + StartConversation(conversation, NPC, Spawn, "Those who were wisest and strongest remained behind in Freeport, determined to build a new order that would be a part of our city's grand destiny. With the Overlord's blessing, the Dreadnaughts were formed. The discipline that the Ashen Order lost was restored, and combined with a new, tougher style of combat. That's why bruisers are so much better than monks at everything they do.") +end + +function dlg_12_8(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/enforcer_kurdek/fprt_adv03_sprawl/quests/enforcer_kurdek011.mp3", "", "", 339942345, 913619397, Spawn) + AddConversationOption(conversation, "What gangs are you talking about?", "dlg_12_9") + AddConversationOption(conversation, "You'll have to control this place on your own.") + StartConversation(conversation, NPC, Spawn, "My job is to watch over the Sprawl and make sure the gangs that control it stay in line. We can't allow their petty rivalries to interfere with the Dreadnaughts' control.") +end + +function dlg_12_9(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/enforcer_kurdek/fprt_adv03_sprawl/quests/enforcer_kurdek012.mp3", "", "", 4086411101, 3781108320, Spawn) + AddConversationOption(conversation, "What other gangs are there?", "dlg_12_10") + AddConversationOption(conversation, "Enough chatter.") + StartConversation(conversation, NPC, Spawn, "There are three gangs that operate here. First is the Giantslayers, a bunch of ruffians who used to be little more than common thugs, though they liked to think they were in charge. The Dreadnaughts got tired of their bragging, so we taught them a lesson. Now they answer to us. Their best members may be allowed to join our order some day. I should warn you, if you mess with the Giantslayers, the Dreadnaughts will take notice.") +end + +function dlg_12_10(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/enforcer_kurdek/fprt_adv03_sprawl/quests/enforcer_kurdek013.mp3", "", "", 957541706, 2141361850, Spawn) + AddConversationOption(conversation, "What is the final gang?", "dlg_12_11") + AddConversationOption(conversation, "None of this is my problem.") + StartConversation(conversation, NPC, Spawn, "Next are the Black Magi, an order of ratonga mages that appeared as Norrath was being torn apart by the Rending. Little is known about them, because they mostly keep to themselves. They seem to hate the Giantslayers, though. I'm under orders to keep a close eye on them.") +end + +function dlg_12_11(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/enforcer_kurdek/fprt_adv03_sprawl/quests/enforcer_kurdek014.mp3", "", "", 337100468, 3493430799, Spawn) + AddConversationOption(conversation, "How did the Sprawl end up like this?", "dlg_12_12") + AddConversationOption(conversation, "Okay, enough chatter. Do you have any work for me?", "dlg_12_15") + AddConversationOption(conversation, "I think it's time to move on.") + StartConversation(conversation, NPC, Spawn, "Last, but most troubling, is the presence of the Dervish Cutthroats. They're a gang of criminals who work illegally out of a distant corner of the Commonlands. They seem to have taken over a very weak gang that used to hang out here, the Guttersnipes. One of my main duties is to find out what the Dervish want. Their presence here is a clear danger to Freeport.") +end + +function dlg_12_12(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/enforcer_kurdek/fprt_adv03_sprawl/quests/enforcer_kurdek015.mp3", "", "", 759884323, 3185216679, Spawn) + AddConversationOption(conversation, "Didn't the Overlord want to rebuild it?", "dlg_12_13") + AddConversationOption(conversation, "I don't have time for sad stories.") + StartConversation(conversation, NPC, Spawn, "What we now call the Sprawl was once an inner city residential district of Freeport. As the city grew, those with money moved to nicer areas, leaving behind the dregs of society. When the Rending struck, this place was hit pretty hard.") +end + +function dlg_12_13(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/enforcer_kurdek/fprt_adv03_sprawl/quests/enforcer_kurdek016.mp3", "", "", 2641573329, 4171213682, Spawn) + AddConversationOption(conversation, "Is there no law and order here?", "dlg_12_14") + AddConversationOption(conversation, "Time for me to leave.") + StartConversation(conversation, NPC, Spawn, "There was no point in rebuilding. New residential districts like Big Bend and the Scale Yard had already been established, and there was simply too much damage to justify the expense. The old windmills that used to supply some of Freeport's energy were obsolete, so there was nothing worth saving here. The Overlord decided to leave this place as is.") +end + +function dlg_12_14(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/enforcer_kurdek/fprt_adv03_sprawl/quests/enforcer_kurdek017.mp3", "", "", 2753020980, 1722099722, Spawn) + AddConversationOption(conversation, "What can I do to aid the Dreadnaughts?", "dlg_12_15") + AddConversationOption(conversation, "I think I'll be going now.") + StartConversation(conversation, NPC, Spawn, "The Freeport Militia has a few members here, just to make sure none of these hoodlums try to enter the city proper. But the Sprawl actually serves a useful purpose for the Dreadnaughts. We dominate the smaller gangs and look for worthwhile recruits for our order. Those who prove themselves on these streets may have a future with us.") +end + +function dlg_12_15(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/enforcer_kurdek/fprt_adv03_sprawl/quests/enforcer_kurdek018.mp3", "", "", 1172539182, 759080499, Spawn) + AddConversationOption(conversation, "I'm up for it. What's the first task?", "dlg_12_16") + AddConversationOption(conversation, "No thanks, I'm not your messenger.") + StartConversation(conversation, NPC, Spawn, "Right to the point, eh? I like that. Well, you can lend a hand in checking on some of these gangs, make sure they're keeping in line.") +end + +function dlg_12_16(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/enforcer_kurdek/fprt_adv03_sprawl/quests/enforcer_kurdek019.mp3", "", "", 2830815918, 3015653280, Spawn) + AddConversationOption(conversation, "Where can I find Durbok?", "OfferQuest1") + AddConversationOption(conversation, "Run your own errands.") + StartConversation(conversation, NPC, Spawn, "I assigned one of our best trainers, an ogre named Durbok, to teach the Giantslayers some of our combat tactics. I need you to go to him and get a report on the progress of the trainees. Tell him I sent you so that he'll cooperate.") +end + +function OfferQuest1(NPC, Spawn) + FaceTarget(NPC, Spawn) + OfferQuest(NPC, Spawn, QUEST_1) +end + +function OnQuest1(NPC, Spawn, conversation) + if GetQuestStep(Spawn, QUEST_1) == 2 then + AddConversationOption(conversation, "Yes, he told me that the Giantslayers aren't progressing as well as he'd like.", "dlg_25_1") + end + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/enforcer_kurdek/fprt_adv03_sprawl/quests/enforcer_kurdek021.mp3", "", "", 3599945718, 484247249, Spawn) + AddConversationOption(conversation, "Not yet.") + StartConversation(conversation, NPC, Spawn, "Did you get that progress report from Trainer Durbok yet?") +end + +function dlg_25_1(NPC, Spawn) + SetStepComplete(Spawn, QUEST_1, 2) + + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/enforcer_kurdek/fprt_adv03_sprawl/quests/enforcer_kurdek022.mp3", "", "", 1909175152, 30886164, Spawn) + AddConversationOption(conversation, "He said their leader, Brutemaster Tarden, was more interested in lining his own pockets than training his forces.", "dlg_25_2") + AddConversationOption(conversation, "I'd rather not discuss it.") + StartConversation(conversation, NPC, Spawn, "That's what I suspected! Did he tell you why?") +end + +------------------------------------------------------------------------------------------------------------------------ +-- QUEST 2 +------------------------------------------------------------------------------------------------------------------------ + +function GreetingsAgain(NPC, Spawn, conversation) + AddConversationOption(conversation, "It seems their boss, Brutemaster Tarden, is the key.", "dlg_25_2") + AddConversationOption(conversation, "Not yet.") + StartConversation(conversation, NPC, Spawn, "Greetings once again. Are you ready to supply some 'proper motivation' to the leader of the giant slayers?") +end + + +function dlg_25_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/enforcer_kurdek/fprt_adv03_sprawl/quests/enforcer_kurdek023.mp3", "", "", 3282987047, 3481980081, Spawn) + AddConversationOption(conversation, "I'll give it a shot.", "dlg_25_3") + AddConversationOption(conversation, "No thanks.") + StartConversation(conversation, NPC, Spawn, "It's time to remind that fool Tarden of his responsibilities. Say, how would you like to play the role of a Dreadnaught Enforcer for a day?") +end + +function dlg_25_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/enforcer_kurdek/fprt_adv03_sprawl/quests/enforcer_kurdek024.mp3", "", "", 820911238, 205246432, Spawn) + AddConversationOption(conversation, "What if he refuses to cooperate?", "OfferQuest2") + StartConversation(conversation, NPC, Spawn, "Time to have a little fun with this buffoon! Go find the boss of the Giantslayers, Brutemaster Tarden. He's probably walking back and forth through the area where his gang hangs out. Confront him and tell him you're one of the Dreadnaughts. Let him know we're tired of his greed and laziness, and that he better get busy training his people.") +end + +function OfferQuest2(NPC, Spawn) + FaceTarget(NPC, Spawn) + OfferQuest(NPC, Spawn, QUEST_2) +end + +function OnQuest2(NPC, Spawn, conversation) + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/enforcer_kurdek/fprt_adv03_sprawl/quests/enforcer_kurdek026.mp3", "", "", 1764893245, 720511474, Spawn) + if GetQuestStep(Spawn, QUEST_2) == 2 then + AddConversationOption(conversation, "Yes, but I had to get a little rough with him.", "dlg_27_1") + end + AddConversationOption(conversation, "Not yet.") + StartConversation(conversation, NPC, Spawn, "Have you confronted Brutemaster Tarden and got him back on track yet?") +end + +function dlg_27_1(NPC, Spawn) + SetStepComplete(Spawn, QUEST_2, 2) + + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/enforcer_kurdek/fprt_adv03_sprawl/quests/enforcer_kurdek027.mp3", "", "", 3293144589, 323622543, Spawn) + AddConversationOption(conversation, "What else would you like me to do?", "dlg_27_2") + AddConversationOption(conversation, "I think our business is concluded.") + StartConversation(conversation, NPC, Spawn, "Good work! Don't worry about roughing Tarden up. He had it coming to him! He won't be so quick to ignore orders from his superiors in the future.") +end + +------------------------------------------------------------------------------------------------------------------------ +-- QUEST 3 +------------------------------------------------------------------------------------------------------------------------ + +function GreetingsAdventurer(NPC, Spawn, conversation) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "Can I lend you a hand?", "dlg_27_2") + AddConversationOption(conversation, "Sounds like you have work to do.") + StartConversation(conversation, NPC, Spawn, "Greetings adventurer. These rival gangs must be kept under the control of the Dreadnaughts.") +end + +function dlg_27_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/enforcer_kurdek/fprt_adv03_sprawl/quests/enforcer_kurdek028.mp3", "", "", 200650494, 3868034746, Spawn) + AddConversationOption(conversation, "Sure, if this job is as rewarding as the last.", "dlg_27_3") + AddConversationOption(conversation, "No thanks.") + StartConversation(conversation, NPC, Spawn, "I could really use your help checking up on the other gangs here in the Sprawl. Will you lend me a hand?") +end + +function dlg_27_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/enforcer_kurdek/fprt_adv03_sprawl/quests/enforcer_kurdek029.mp3", "", "", 229557980, 3056293527, Spawn) + AddConversationOption(conversation, "What do you want me to do there?", "OfferQuest3") + AddConversationOption(conversation, "Rats? Forget it!") + StartConversation(conversation, NPC, Spawn, "Ha! That's the spirit! I think you might make a good Dreadnaught some day. Okay, here's what I want you to do. Head past the Giantslayers and keep going south past the gateway to the Commonlands. You'll be in the heart of the Black Magi, those sneaky little ratonga.") +end + +function OfferQuest3(NPC, Spawn) + FaceTarget(NPC, Spawn) + OfferQuest(NPC, Spawn, QUEST_3) +end + +function OnQuest3(NPC, Spawn, conversation) + if GetQuestStep(Spawn, QUEST_3) == 2 then + AddConversationOption(conversation, "I found her, but she wouldn't reveal much to me.", "dlg_30_1") + end + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/enforcer_kurdek/fprt_adv03_sprawl/quests/enforcer_kurdek034.mp3", "", "", 1199347537, 124771844, Spawn) + AddConversationOption(conversation, "Not yet.") + StartConversation(conversation, NPC, Spawn, "Did you find Tikkeri and learn anything about the Black Magi?") +end + +function dlg_27_5(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/enforcer_kurdek/fprt_adv03_sprawl/quests/enforcer_kurdek031.mp3", "", "", 2755416123, 3102178981, Spawn) + AddConversationOption(conversation, "What 'wheel' are you talking about?", "dlg_27_6") + AddConversationOption(conversation, "Forget it, this sounds cheesy.") + StartConversation(conversation, NPC, Spawn, "Well, she won't respond if she thinks you're there on Dreadnaught business. Hmm... Wait, I have an idea! Tell her you've got information on 'the wheel.'") +end + +function dlg_27_6(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/enforcer_kurdek/fprt_adv03_sprawl/quests/enforcer_kurdek032.mp3", "", "", 1619463323, 6558456, Spawn) + AddConversationOption(conversation, "I'll give it a try.", "dlg_27_7") + StartConversation(conversation, NPC, Spawn, "You don't need to know what it means. Maybe you'll find out someday. Anyhow, just tell her you might be willing to trade information on 'the wheel' if you know you can trust her. That might get Tikkeri to open up. Come back after you've learned something useful from her.") +end + +function dlg_27_7(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/enforcer_kurdek/fprt_adv03_sprawl/quests/enforcer_kurdek033.mp3", "", "", 4228654183, 2166067053, Spawn) + AddConversationOption(conversation, "Thanks for the advice. I'll be back.") + StartConversation(conversation, NPC, Spawn, "Oh, just a word of warning. The Black Magi are fair game if you want to fight any of them, but it will be a lot harder for you to reach Tikkeri if you make an enemy out of their gang. I suggest you finish this task before you do much ratonga hunting.") +end + +function dlg_30_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/enforcer_kurdek/fprt_adv03_sprawl/quests/enforcer_kurdek035.mp3", "", "", 4223119481, 1134215352, Spawn) + AddConversationOption(conversation, "She mentioned that 'the Marked' would be rising to power, and we'd hear more of them soon.", "dlg_30_2") + AddConversationOption(conversation, "I don't want to share that information.") + StartConversation(conversation, NPC, Spawn, "Well, something is better than nothing. What did she say?") +end + +function dlg_30_2(NPC, Spawn) + SetStepComplete(Spawn, QUEST_3, 2) + + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/enforcer_kurdek/fprt_adv03_sprawl/quests/enforcer_kurdek036.mp3", "", "", 4111858897, 274557539, Spawn) + AddConversationOption(conversation, "Thank you. Anything else I can help you with?", "dlg_30_3") + AddConversationOption(conversation, "Sounds like a good time to be going.") + StartConversation(conversation, NPC, Spawn, "She said 'the Marked'? That's very interesting. I've heard rumors of other ratonga around Norrath muttering that phrase in veiled whispers. It seems like something big might be brewing. I'll let my superiors back in the city know what you found out. Well done!") +end + +------------------------------------------------------------------------------------------------------------------------ +-- QUEST 4 +------------------------------------------------------------------------------------------------------------------------ + +function NiceWork(NPC, Spawn, conversation) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "What did you have in mind?", "dlg_30_3") + AddConversationOption(conversation, "No thanks.") + StartConversation(conversation, NPC, Spawn, "Nice work obtaining information from the Black Magi. Are you ready for a tougher assignment?") +end + +function dlg_30_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/enforcer_kurdek/fprt_adv03_sprawl/quests/enforcer_kurdek037.mp3", "", "", 2350612963, 4036765011, Spawn) + AddConversationOption(conversation, "I'm up for the challenge.", "dlg_30_4") + AddConversationOption(conversation, "No thanks.") + StartConversation(conversation, NPC, Spawn, "The largest gang here in the Sprawl is without question the most dangerous. The Dervish Cutthroats are scum, pure and simple. They need to be taught a lesson.") +end + +function dlg_30_4(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/enforcer_kurdek/fprt_adv03_sprawl/quests/enforcer_kurdek038.mp3", "", "", 2271152458, 1644298749, Spawn) + AddConversationOption(conversation, "How should I proceed?", "OfferQuest4") + StartConversation(conversation, NPC, Spawn, "To the south of here, you'll find the streets lined with those accursed Dervish. These lowlifes are nowhere near as tough as their superiors in the Commonlands, but beware their numbers. I need you to thin them out a bit and show them that the Dreadnaughts are still in control around here.") +end + +function OfferQuest4(NPC, Spawn) + FaceTarget(NPC, Spawn) + OfferQuest(NPC, Spawn, QUEST_4) +end + +function OnQuest4(NPC, Spawn, conversation) + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/enforcer_kurdek/fprt_adv03_sprawl/quests/enforcer_kurdek040.mp3", "", "", 2354759154, 3667485927, Spawn) + if GetQuestStep(Spawn, QUEST_4) == 4 then + AddConversationOption(conversation, "There are a good number of Dervish who won't be threatening Freeport any longer.", "dlg_32_1") + end + AddConversationOption(conversation, "Not yet.") + StartConversation(conversation, NPC, Spawn, "Did you teach those filthy Dervish a lesson?") +end + +function dlg_32_1(NPC, Spawn) + SetStepComplete(Spawn, QUEST_4, 4) + + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/enforcer_kurdek/fprt_adv03_sprawl/quests/enforcer_kurdek041.mp3", "", "", 459171566, 399692655, Spawn) + AddConversationOption(conversation, "Thanks. Do you have any further jobs for me?", "dlg_32_2") + AddConversationOption(conversation, "No way. I'm done with this kind of work.") + StartConversation(conversation, NPC, Spawn, "Nice work! Those Dervish will know better than to mess with us in the future. I must say, I was skeptical when first I saw you, but you've proved to be Dreadnaught material. You've helped us a lot out here in the Sprawl, so accept this reward on behalf of the Dreadnaughts.") +end + +------------------------------------------------------------------------------------------------------------------------ +-- QUEST 5 +------------------------------------------------------------------------------------------------------------------------ + +function WelcomeBack(NPC, Spawn, conversation) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/enforcer_kurdek/fprt_adv03_sprawl/quests/enforcer_kurdek042.mp3", "", "", 3199383126, 2868778481, Spawn) + AddConversationOption(conversation, "DDo you have anything else for me?", "dlg_32_2") + AddConversationOption(conversation, "I'm through talking to you.") + StartConversation(conversation, NPC, Spawn, "Welcome back, adventurer. You've done some nice work around here.") +end + +function dlg_32_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/enforcer_kurdek/fprt_adv03_sprawl/quests/enforcer_kurdek042.mp3", "", "", 3199383126, 2868778481, Spawn) + AddConversationOption(conversation, "Duly noted. Anything else?", "OfferQuest5") + StartConversation(conversation, NPC, Spawn, "I've got to get back to my duties. I told Trainer Durbok that you might be interested in lending a hand in keeping his training ground clear, so you might want to have a word with him. You could also strike out on your own and clear some of the thugs from these mean streets. But like I warned you before, if you mess with the Giantslayers you will draw the attention of the Dreadnaughts.") +end + +function OfferQuest5(NPC, Spawn) + FaceTarget(NPC, Spawn) + OfferQuest(NPC, Spawn, QUEST_5) +end + +function OnQuest5(NPC, Spawn, conversation) + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/enforcer_kurdek/fprt_adv03_sprawl/quests/enforcer_kurdek043.mp3", "", "", 1861012696, 1699746787, Spawn) + AddConversationOption(conversation, "How should I get there?", "dlg_32_4") + StartConversation(conversation, NPC, Spawn, "Don't linger here too long, adventurer. I just got word of something major happening in the Ruins of old Freeport. You need to get there as soon as possible and lend a hand in defending the city.") +end + +function dlg_32_4(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/enforcer_kurdek/fprt_adv03_sprawl/quests/enforcer_kurdek044.mp3", "", "", 3653537758, 3291895928, Spawn) + AddConversationOption(conversation, "Are there any other locations for adventure that you could suggest?", "dlg_32_5") + StartConversation(conversation, NPC, Spawn, "Your best route is to go back through the city, either through Big Bend or the Scale Yard. Head to the docks, then ring the bell to travel outside Freeport proper. Head to the Ruins and seek out a friend of mine in the Freeport Militia, Captain Arellius. Get moving!") +end + +function dlg_32_5(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/enforcer_kurdek/fprt_adv03_sprawl/quests/enforcer_kurdek044b.mp3", "", "", 1076595806, 3802376604, Spawn) + AddConversationOption(conversation, "Please tell me more about Custodian Zaddar.", "dlg_32_6") + AddConversationOption(conversation, "Please tell me more about Inquisitor Thorson.", "dlg_32_7") + AddConversationOption(conversation, "Thank you, I may seek them out.") + StartConversation(conversation, NPC, Spawn, "I know others in Freeport who could use your help as well. Custodian Zaddar in the Graveyard is investigating a rise in undead activity, and Inquisitor Throson in the Sunken City is delving into an ancient mystery. Both could use the aid of a hero like you, Whipew.") +end + +function dlg_32_6(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/enforcer_kurdek/fprt_adv03_sprawl/quests/enforcer_kurdek056.mp3", "", "", 407333436, 4264887300, Spawn) + AddConversationOption(conversation, "Please tell me more about Inquisitor Thorson.", "dlg_32_7") + AddConversationOption(conversation, "Thank you for the information.") + StartConversation(conversation, NPC, Spawn, "Custodian Zaddar in the Graveyard is trying to determine what's behind a recent increase in undead attacks. Use the mariner's bell on the docks of your home district to travel to Stonestair Byway. Head west until you see a passage to the south. The gate at the end leads to the Graveyard.") +end + +function dlg_32_7(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/enforcer_kurdek/fprt_adv03_sprawl/quests/enforcer_kurdek057.mp3", "", "", 1278127784, 3972904747, Spawn) + AddConversationOption(conversation, "Please tell me more about Custodian Zaddar.", "dlg_32_6") + AddConversationOption(conversation, "Thank you for the information.") + StartConversation(conversation, NPC, Spawn, "Inquisitor Thorson in the Sunken City needs help investigating ancient mysteries that threaten Freeport's safety. To travel to the Sunken City, use the mariner's bell on the docks of your home district to travel outside Freeport and chose Sunken City as your destination.") +end diff --git a/server/SpawnScripts/Sprawl/GatekeeperMalora.lua b/server/SpawnScripts/Sprawl/GatekeeperMalora.lua new file mode 100644 index 000000000..46b6a1f8b --- /dev/null +++ b/server/SpawnScripts/Sprawl/GatekeeperMalora.lua @@ -0,0 +1,24 @@ +--[[ + Script Name : SpawnScripts/Sprawl/GatekeeperMalora.lua + Script Purpose : Gatekeeper Malora + Script Author : John Adams + Script Date : 2008.09.29 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +function spawn(NPC) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/gatekeeper_malora/fprt_adv03_sprawl/quests/protector_malora004.mp3", "", "", 1115741315, 3103270743, Spawn) + AddConversationOption(conversation, "Be well, Malora.", "dlg_1_1") + StartConversation(conversation, NPC, Spawn, "It is my duty to ensure the safety of less-experienced adventurers. Someone of your skill need not worry about traveling beyond this gate.") +end + diff --git a/server/SpawnScripts/Sprawl/GatekeeperMalren.lua b/server/SpawnScripts/Sprawl/GatekeeperMalren.lua new file mode 100644 index 000000000..08980a30f --- /dev/null +++ b/server/SpawnScripts/Sprawl/GatekeeperMalren.lua @@ -0,0 +1,68 @@ +--[[ + Script Name : SpawnScripts/Sprawl/GatekeeperMalren.lua + Script Purpose : Gatekeeper Malren + Script Author : Scatman + Script Date : 2009.07.26 + Script Notes : +--]] + +function spawn(NPC) + SetPlayerProximityFunction(NPC, 10, "InRange") +end + +function respawn(NPC) + spawn(NPC) +end + +function InRange(NPC, Spawn) + if GetLevel(Spawn) < 12 then + local choice = math.random(1,2) + if choice == 1 then + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/gatekeeper_malren/fprt_adv03_sprawl/quest/warning_malren_warning_6607638a.mp3", "Beyond this gate lies a warzone! Beware!", "brandish", 3114668751, 2889688375, Spawn) + elseif choice == 2 then + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/gatekeeper_malren/fprt_adv03_sprawl/quest/warning_malren_warning_2d5ced43.mp3", "Heed my warning! Beware the danger ahead, adventurer!", "no", 1710591431, 2684761663, Spawn) + end + end +end + + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + if GetLevel(Spawn) < 12 then + AddConversationOption(conversation, "What do you mean?", "WhatDoYouMean") + AddConversationOption(conversation, "Thanks for the warning.") + StartConversation(conversation, NPC, Spawn, "Be wary, adventurer. Great danger lies beyond this gate!") + else + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/gatekeeper_malora/fprt_adv03_sprawl/quests/protector_malora004.mp3", "", "", 1115741315, 3103270743, Spawn) + AddConversationOption(conversation, "Be well, Malren.") + StartConversation(conversation, NPC, Spawn, "It is my duty to ensure the safety of less-experienced adventurers. Someone of your skill need not worry about traveling beyond this gate.") + end +end + +function WhatDoYouMean(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "Where should I go once I get to a district?", "OnceGetDestrict") + AddConversationOption(conversation, "I will do so.") + StartConversation(conversation, NPC, Spawn, "This gate leads to the Freeport Ruins which is currently under attack. If you seek to travel there, I highly recommend you go back through Big Bend or Scale Yard instead.") +end + +function OnceGetDestrict(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "Why is travel beyond this gate so dangerous?", "WhySoDangerous") + AddConversationOption(conversation, "Thank you.") + StartConversation(conversation, NPC, Spawn, "Make your way to the docks in either district, then use the bell to summon transport outside of freeport. You can select the Ruins as your destination.") +end + +function WhySoDangerous(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "Thanks for the advice, Malren.") + StartConversation(conversation, NPC, Spawn, "Traveling through this gate isn't very safe unless you bring a group of friends with you. Some very powerful orcs are clashing with the Freeport Militia just beyond it. Entering the Ruins by way of the docks is a much wiser approach.") +end diff --git a/server/SpawnScripts/Sprawl/Gorgo.lua b/server/SpawnScripts/Sprawl/Gorgo.lua new file mode 100644 index 000000000..38ca60fc3 --- /dev/null +++ b/server/SpawnScripts/Sprawl/Gorgo.lua @@ -0,0 +1,28 @@ +--[[ + Script Name : SpawnScripts/Sprawl/Gorgo.lua + Script Purpose : Gorgo + Script Author : Scatman + Script Date : 2009.07.26 + Script Notes : +--]] + +function spawn(NPC) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + local choice = math.random(1, 4) + if choice == 1 then + PlayFlavor(NPC, "voiceover/english/ogre_eco_evil_1/ft/service/guard/ogre_guard_service_evil_1_hail_gm_582205e1.mp3", "Do you have business with the Freeport Militia?", "glare", 423300132, 829337329, Spawn) + elseif choice == 2 then + PlayFlavor(NPC, "voiceover/english/ogre_eco_evil_1/ft/service/guard/ogre_guard_service_evil_1_hail_gm_7fa14d4.mp3", "Do not challenge my authority citizen. In Freeport, the Overlord's word is law!", "scold", 606354622, 1657703048, Spawn) + elseif choice == 3 then + PlayFlavor(NPC, "voiceover/english/ogre_eco_evil_1/ft/service/guard/ogre_guard_service_evil_1_hail_gm_870ae3cb.mp3", "The Overlord commands me to patrol this area, and so I must.", "tapfoot", 3898592844, 3023882159, Spawn) + elseif choice == 4 then + PlayFlavor(NPC, "voiceover/english/ogre_eco_evil_1/ft/service/guard/ogre_guard_service_evil_1_hail_gm_edb196f8.mp3", "All praises to the Overlord. The Militia protects loyal citizens of Freeport.", "salute_freeport", 2290537918, 776957565, Spawn) + end +end \ No newline at end of file diff --git a/server/SpawnScripts/Sprawl/LUnt.lua b/server/SpawnScripts/Sprawl/LUnt.lua new file mode 100644 index 000000000..0d3a509e4 --- /dev/null +++ b/server/SpawnScripts/Sprawl/LUnt.lua @@ -0,0 +1,28 @@ +--[[ + Script Name : SpawnScripts/Sprawl/LUnt.lua + Script Purpose : L'Unt + Script Author : Scatman + Script Date : 2009.07.26 + Script Notes : +--]] + +function spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + local choice = math.random(1, 4) + if choice == 1 then + PlayFlavor(NPC, "voiceover/english/darkelf_eco_evil_1/ft/service/guard/darkelf_guard_service_evil_1_hail_gm_582205e1.mp3", "Do you have business with the Freeport Militia?", "glare", 3330899926, 205777100, Spawn) + elseif choice == 2 then + PlayFlavor(NPC, "voiceover/english/darkelf_eco_evil_1/ft/service/guard/darkelf_guard_service_evil_1_hail_gm_7fa14d4.mp3", "Do not challenge my authority citizen. In Freeport, the Overlord's word is law!", "scold", 3071777755, 1811086423, Spawn) + elseif choice == 3 then + PlayFlavor(NPC, "voiceover/english/darkelf_eco_evil_1/ft/service/guard/darkelf_guard_service_evil_1_hail_gm_870ae3cb.mp3", "The Overlord commands me to patrol this area, and so I must.", "tapfoot", 3455786340, 1963116786, Spawn) + elseif choice == 4 then + PlayFlavor(NPC, "voiceover/english/darkelf_eco_evil_1/ft/service/guard/darkelf_guard_service_evil_1_hail_gm_edb196f8.mp3", "All praises to the Overlord. The Militia protects loyal citizens of Freeport.", "salute_freeport", 3432620709, 3039361332, Spawn) + end +end + +function respawn(NPC) + spawn(NPC) +end \ No newline at end of file diff --git a/server/SpawnScripts/Sprawl/LiegeAquila.lua b/server/SpawnScripts/Sprawl/LiegeAquila.lua new file mode 100644 index 000000000..303e52d97 --- /dev/null +++ b/server/SpawnScripts/Sprawl/LiegeAquila.lua @@ -0,0 +1,321 @@ +--[[ + Script Name : SpawnScripts/Sprawl/LiegeAquila.lua + Script Purpose : Liege Aquila + Script Author : Scatman + Script Date : 2008.09.29 + Script Notes : +--]] + +local QUEST_1 = 261 -- repeatable + +function spawn(NPC) + ProvidesQuest(NPC, QUEST_1) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + RandomVoiceOver(NPC, Spawn) + + if HasCompletedQuest(Spawn, QUEST_1) then + YouveDoneWell(NPC, Spawn, conversation) + elseif HasQuest(Spawn, QUEST_1) then + OnQuest1(NPC, Spawn, conversation) + else + Greetings(NPC, Spawn, conversation) + end + +--[[ + if convo==5 then + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_1_1004.mp3", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "What duty is that?", "dlg_5_1") + AddConversationOption(conversation, "Sorry, but I have other things I must do.") + StartConversation(conversation, NPC, Spawn, "Greetings, citizen. Are you prepared to do your duty for the Freeport Militia?") + end + + if convo==6 then + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_3_1004.mp3", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "What duty is that?", "dlg_6_1") + AddConversationOption(conversation, "Sorry, but I have other things I must do.") + StartConversation(conversation, NPC, Spawn, "Greetings, citizen. Are you prepared to do your duty for the Freeport Militia?") + end + + if convo==10 then + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_3_1004.mp3", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "I took care of a number of those troublemakers.", "dlg_10_1") + AddConversationOption(conversation, "Not yet, Aquila.") + StartConversation(conversation, NPC, Spawn, "Did you teach the Black Magi who is in charge of Freeport?") + end + + if convo==11 then + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_1_1004.mp3", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "I am ready to attack those troublemakers again!", "dlg_11_1") + AddConversationOption(conversation, "I'll take up this cause later.") + StartConversation(conversation, NPC, Spawn, "Your efforts to control the Black Magi have been helpful, but more work remains to be done.") + end + + if convo==15 then + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_2_1004.mp3", "", "", 0, 0, Spawn) + + end + + if convo==16 then + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_3_1004.mp3", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "I guess I need to kill more Dervish, eh?", "dlg_16_1") + AddConversationOption(conversation, "I think I've had enough.") + StartConversation(conversation, NPC, Spawn, "You've done well for the Freeport Militia so far, but your job isn't over yet, you know.") + end + + if convo==20 then + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_3_1004.mp3", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "I taught those crooks a lesson.", "dlg_20_1") + AddConversationOption(conversation, "Not yet.") + StartConversation(conversation, NPC, Spawn, "So, did you strike some fear into the hearts of the Dervish?") + end + + if convo==21 then + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_3_1004.mp3", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "I guess I need to kill more Dervish, eh?", "dlg_21_1") + AddConversationOption(conversation, "I think I've had enough.") + StartConversation(conversation, NPC, Spawn, "You've done well for the Freeport Militia so far, but your job isn't over yet, you know.") + end + + if convo==22 then + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_2_1004.mp3", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Not yet.", "dlg_22_1") + StartConversation(conversation, NPC, Spawn, "So, did you strike some fear into the hearts of the Dervish?") + end + + if convo==31 then + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_2_1004.mp3", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "I taught those crooks a lesson.", "dlg_31_1") + AddConversationOption(conversation, "Not yet.") + StartConversation(conversation, NPC, Spawn, "So, did you strike some fear into the hearts of the Dervish?") + end +--]] +end + +function RandomVoiceOver(NPC, Spawn) + local choice = math.random(1, 3) + if choice == 1 then + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_1_1004.mp3", "", "", 0, 0, Spawn) + elseif choice == 2 then + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_2_1004.mp3", "", "", 0, 0, Spawn) + elseif choice == 3 then + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_3_1004.mp3", "", "", 0, 0, Spawn) + end +end + +--------------------------------------------------------------------------------------------------------- +-- QUEST 1 +--------------------------------------------------------------------------------------------------------- + +function Greetings(NPC, Spawn, conversation) + AddConversationOption(conversation, "What duty is that?", "dlg_6_1") + AddConversationOption(conversation, "Sorry, but I have other things I must do.") + StartConversation(conversation, NPC, Spawn, "Greetings, citizen. Are you prepared to do your duty for the Freeport Militia?") +end + +function dlg_6_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "What do you mean?", "dlg_6_2") + AddConversationOption(conversation, "I don't have time for this.") + StartConversation(conversation, NPC, Spawn, "The gangs here in the Sprawl are out of control! Clearly it's time that the Militia took control of the situation. The Dreadnaughts aren't doing enough to maintain order.") +end + +function dlg_6_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "I will perform my duty for Freeport.", "dlg_6_3") + AddConversationOption(conversation, "Not really.") + StartConversation(conversation, NPC, Spawn, "The Dreadnaughts are supposed to have the run of this place, but in my opinion things would be better if the Militia came here in force and took over. Are you willing to help us do that?") +end + +function dlg_6_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "I'll do it.", "OfferQuest1") + AddConversationOption(conversation, "Maybe later.") + StartConversation(conversation, NPC, Spawn, "We need to handle some of these Dervish. They've infested the Sprawl from their bandit camps in the Commonlands. We've got to show them who's in charge around here! I think it will take a few sweeps to really strike fear into them.") +end + +function OfferQuest1(NPC, Spawn) + FaceTarget(NPC, Spawn) + OfferQuest(NPC, Spawn, QUEST_1) +end + +function OnQuest1(NPC, Spawn, conversation) + if GetQuestStep(Spawn, QUEST_1) == 2 then + AddConversationOption(conversation, "I taught those crooks a lesson.", "dlg_15_1") + end + AddConversationOption(conversation, "Not yet.") + StartConversation(conversation, NPC, Spawn, "So, did you strike some fear into the hearts of the Dervish?") +end + +function dlg_15_1(NPC, Spawn) + SetStepComplete(Spawn, QUEST_1, 2) + + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "I will return.") + StartConversation(conversation, NPC, Spawn, "Well done. You show some potential as a worthy servant of the Freeport Militia. Return to me when you are ready for another assignment.") +end + +--------------------------------------------------------------------------------------------------------- +-- QUEST 2 +--------------------------------------------------------------------------------------------------------- + +function YouveDoneWell(NPC, Spawn, conversation) + AddConversationOption(conversation, "I'm ready for a new assignment.", "dlg_6_3") + AddConversationOption(conversation, "I think I've had enough.") + StartConversation(conversation, NPC, Spawn, "You've done well for the Freeport Militia so far, but your job isn't over yet, you know.") +end + + + + + + + + + + + + + + + + + + +function dlg_1_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "I'll help out.", "dlg_1_2") + AddConversationOption(conversation, "That's not my problem.") + StartConversation(conversation, NPC, Spawn, "It's not only the Dervish causing problems here. The Black Magi, a secretive group of ratonga, are causing havoc in the streets. We can't allow them to dominate the Sprawl!") +end + +function dlg_1_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "I understand the risks.", "dlg_1_3") + AddConversationOption(conversation, "I'll think about it.") + StartConversation(conversation, NPC, Spawn, "Strike some fear into those rogue ratonga. Be careful, though. At first they won't pester you much, but once they notice you've been attacking their kind, they'll be out for your blood!") +end + +function dlg_1_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "I will do so.", "dlg_1_4") + StartConversation(conversation, NPC, Spawn, "Excellent. Report back when you've put the Black Magi in their place.") +end + + + + + + + + + +function dlg_10_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Thank you. I'll check back for more work.", "dlg_10_2") + StartConversation(conversation, NPC, Spawn, "Good. Gangs like that must be kept in line for the sake of Freeport. A job well done, citizen. Check back with me to see if I have more assignments for you.") +end + +function dlg_11_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "I understand the risks.", "dlg_11_2") + AddConversationOption(conversation, "I'll think about it.") + StartConversation(conversation, NPC, Spawn, "Strike some fear into those rogue ratonga. Be careful, though. At first they won't pester you much, but once they notice you've been attacking their kind, they'll be out for your blood!") +end + +function dlg_11_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "I will do so.", "dlg_11_3") + StartConversation(conversation, NPC, Spawn, "Excellent. Report back when you've put the Black Magi in their place.") +end + + +function dlg_16_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "I'll do it.", "dlg_16_2") + AddConversationOption(conversation, "Maybe later.") + StartConversation(conversation, NPC, Spawn, "We need to handle some of these Dervish. They've infested the Sprawl from their bandit camps in the Commonlands. We've got to show them who's in charge around here! I think it will take a few sweeps to really strike fear into them.") +end + +function dlg_16_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "I will do so.", "dlg_16_3") + StartConversation(conversation, NPC, Spawn, "Glad to hear it. Defeat them and return to me for your payment.") +end + +function dlg_20_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "I will return.", "dlg_20_2") + StartConversation(conversation, NPC, Spawn, "Well done. You show some potential as a worthy servant of the Freeport Militia. Return to me when you are ready for another assignment.") +end + +function dlg_21_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "I'll do it.", "dlg_21_2") + AddConversationOption(conversation, "Maybe later.") + StartConversation(conversation, NPC, Spawn, "We need to handle some of these Dervish. They've infested the Sprawl from their bandit camps in the Commonlands. We've got to show them who's in charge around here! I think it will take a few sweeps to really strike fear into them.") +end + +function dlg_21_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "I will do so.", "dlg_21_3") + StartConversation(conversation, NPC, Spawn, "Glad to hear it. Defeat them and return to me for your payment.") +end + +function dlg_31_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "I will return.", "dlg_31_2") + StartConversation(conversation, NPC, Spawn, "Well done. You show some potential as a worthy servant of the Freeport Militia. Return to me when you are ready for another assignment.") +end + diff --git a/server/SpawnScripts/Sprawl/Loria.lua b/server/SpawnScripts/Sprawl/Loria.lua new file mode 100644 index 000000000..436c60f92 --- /dev/null +++ b/server/SpawnScripts/Sprawl/Loria.lua @@ -0,0 +1,28 @@ +--[[ + Script Name : SpawnScripts/Sprawl/Loria.lua + Script Purpose : Loria + Script Author : Scatman + Script Date : 2009.07.26 + Script Notes : +--]] + +function spawn(NPC) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + local choice = math.random(1, 4) + if choice == 1 then + PlayFlavor(NPC, "", "Only traitors to the Overlord would pass up a bargain like this. You're not a traitor are you?", "scold", 1689589577, 4560189, Spawn) + elseif choice == 2 then + PlayFlavor(NPC, "", "Are you going to buy anything today or am I just wasting my time? This isn't a museum display you know!", "glare", 1689589577, 4560189, Spawn) + elseif choice == 3 then + PlayFlavor(NPC, "", "The stuff's over there. Just let me know if you find anything you like.", "ponder", 1689589577, 4560189, Spawn) + elseif choice == 4 then + PlayFlavor(NPC, "", "Hello there, kind adventurer. My merchandise carries the seal of the Overlord himself! Go ahead, take a look!", "salute_freeport", 1689589577, 4560189, Spawn) + end +end \ No newline at end of file diff --git a/server/SpawnScripts/Sprawl/Sasha.lua b/server/SpawnScripts/Sprawl/Sasha.lua new file mode 100644 index 000000000..455446002 --- /dev/null +++ b/server/SpawnScripts/Sprawl/Sasha.lua @@ -0,0 +1,32 @@ +--[[ + Script Name : SpawnScripts/Sprawl/Sasha.lua + Script Purpose : Sasha + Script Author : Scatman + Script Date : 2009.07.26 + Script Notes : +--]] + +function spawn(NPC) + SetPlayerProximityFunction(NPC, 10, "InRange") +end + +function respawn(NPC) + spawn(NPC) +end + +function InRange(NPC, Spawn) + local chance = math.random(1, 100) + if chance <= 25 then + PlayFlavor(NPC, "voiceover/english/optional2/ratonga_eco_evil_3/ft/service/merchant/ratonga_merchant_service_evil_3_aoi_gf_53388b91.mp3", "Only traitors to the Overlord would pass up a bargain like this. You're not a traitor are you?", "scold", 2288309507, 1188267472, Spawn) + end +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + local choice = math.random(1, 2) + if choice == 1 then + PlayFlavor(NPC, "voiceover/english/optional2/ratonga_eco_evil_3/ft/service/merchant/ratonga_merchant_service_evil_3_hail_gf_f715099e.mp3", "Hello there, kind adventurer. My merchandise carries the seal of the Overlord himself! Go ahead, take a look!", "salute_freeport", 3460692084, 694864112, Spawn) + elseif choice == 2 then + PlayFlavor(NPC, "voiceover/english/optional2/ratonga_eco_evil_3/ft/service/merchant/ratonga_merchant_service_evil_3_hail_gf_d088c20d.mp3", "The stuff's over there. Just let me know if you find anything you like.", "ponder", 3740786388, 4176254637, Spawn) + end +end diff --git a/server/SpawnScripts/Sprawl/Talmudius.lua b/server/SpawnScripts/Sprawl/Talmudius.lua new file mode 100644 index 000000000..e81a149b7 --- /dev/null +++ b/server/SpawnScripts/Sprawl/Talmudius.lua @@ -0,0 +1,28 @@ +--[[ + Script Name : SpawnScripts/TheSprawl/Talamudius.lua + Script Purpose : Talamudius + Script Author : Scatman + Script Date : 2009.07.26 + Script Notes : +--]] + +function spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + local choice = math.random(1, 4) + if choice == 1 then + PlayFlavor(NPC, "voiceover/english/human_eco_evil_1/ft/service/guard/human_guard_service_evil_1_hail_gm_582205e1.mp3", "Do you have business with the Freeport Militia?", "glare", 3265760930, 1055342916, Spawn) + elseif choice == 2 then + PlayFlavor(NPC, "voiceover/english/human_eco_evil_1/ft/service/guard/human_guard_service_evil_1_hail_gm_7fa14d4.mp3", "Do not challenge my authority citizen. In Freeport, the Overlord's word is law!", "scold", 1744928325, 2718395831, Spawn) + elseif choice == 3 then + PlayFlavor(NPC, "voiceover/english/human_eco_evil_1/ft/service/guard/human_guard_service_evil_1_hail_gm_870ae3cb.mp3", "The Overlord commands me to patrol this area, and so I must.", "tapfoot", 1281050619, 1758539799, Spawn) + elseif choice == 4 then + PlayFlavor(NPC, "voiceover/english/human_eco_evil_1/ft/service/guard/human_guard_service_evil_1_hail_gm_edb196f8.mp3", "All praises to the Overlord. The Militia protects loyal citizens of Freeport.", "salute_freeport", 1906726944, 247472694, Spawn) + end +end + +function respawn(NPC) + spawn(NPC) +end \ No newline at end of file diff --git a/server/SpawnScripts/Sprawl/TrainerDurbok.lua b/server/SpawnScripts/Sprawl/TrainerDurbok.lua new file mode 100644 index 000000000..d6dc2fcf2 --- /dev/null +++ b/server/SpawnScripts/Sprawl/TrainerDurbok.lua @@ -0,0 +1,230 @@ +--[[ + Script Name : SpawnScripts/Sprawl/TrainerDurbok.lua + Script Purpose : Trainer Durbok + Script Author : Scatman + Script Date : 2008.09.29 + Script Notes : +--]] + +local QUEST_1_FROM_KURDEK = 253 +local QUEST_3_FROM_KURDEK = 255 +local QUEST_1 = 260 -- repeatable + +function spawn(NPC) + SetPlayerProximityFunction(NPC, 10, "InRange") + ProvidesQuest(NPC, QUEST_1) +end + +function respawn(NPC) + spawn(NPC) +end + +function InRange(NPC, Spawn) + local choice = math.random(1, 5) + if choice == 1 then + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/trainer_durbok/fprt_adv03_sprawl/quest/quest_trainer_durbok_callout_4b619d6e.mp3", "With my training, you Giantslayers might amount to something yet!", "agree", 677573718, 693214962, Spawn) + elseif choice == 2 then + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/trainer_durbok/fprt_adv03_sprawl/quest/quest_trainer_durbok_callout_620ddf6f.mp3", "That's right, bob and weave.", "agree", 2563477319, 1972593588, Spawn) + elseif choice == 3 then + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/trainer_durbok/fprt_adv03_sprawl/quest/quest_trainer_durbok_callout_6cf1b665.mp3", "Dominate your enemies through force!", "threaten", 2765968733, 31376268, Spawn) + elseif choice == 4 then + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/trainer_durbok/fprt_adv03_sprawl/quest/quest_trainer_durbok_callout_d028d77b.mp3", "Parry and uppercut! Don't forget to use your jab!", "threaten", 1525930784, 909688040, Spawn) + elseif choice == 5 then + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/trainer_durbok/fprt_adv03_sprawl/quest/quest_trainer_durbok_callout_f22abebb.mp3", "Tarden's laziness has been rubbing off on you Giantslayers!", "shakefist", 2685681648, 4087837540, Spawn) + end +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + if HasCompletedQuest(Spawn, QUEST_1_FROM_KURDEK) or (HasQuest(Spawn, QUEST_1_FROM_KURDEK) and GetQuestStep(Spawn, QUEST_1_FROM_KURDEK) > 1) then + if HasCompletedQuest(Spawn, QUEST_3_FROM_KURDEK) then + if HasCompletedQuest(Spawn, QUEST_1) then + -- repeatable + elseif HasQuest(Spawn, QUEST_1) then + OnQuest1(NPC, Spawn, conversation) + else + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/trainer_durbok/fprt_adv03_sprawl/quests/trainer_durbok006.mp3", "", "", 2664707401, 3770487430, Spawn) + AddConversationOption(conversation, "Enforcer Kurdek mentioned that you could use a hand.", "dlg_0_1") + AddConversationOption(conversation, "Just passing through.") + StartConversation(conversation, NPC, Spawn, "Ah, you again. What brings you back to this part of the Sprawl?") + end + else + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/trainer_durbok/fprt_adv03_sprawl/quests/trainer_durbok001.mp3", "", "", 3497395239, 3242764181, Spawn) + AddConversationOption(conversation, "Sorry, I didn't mean to interrupt.") + StartConversation(conversation, NPC, Spawn, "Hey! Can't you see I'm busy training these recruits how to fight?") + end + else + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/trainer_durbok/fprt_adv03_sprawl/quests/trainer_durbok001.mp3", "", "", 3497395239, 3242764181, Spawn) + if HasQuest(Spawn, QUEST_1_FROM_KURDEK) and GetQuestStep(Spawn, QUEST_1_FROM_KURDEK) == 1 then + AddConversationOption(conversation, "My name is " .. GetName(Spawn) .. ". Enforcer Kurdek sent me to ask how things are going.", "dlg_18_1") + end + AddConversationOption(conversation, "Sorry, I didn't mean to interrupt.") + StartConversation(conversation, NPC, Spawn, "Hey! Can't you see I'm busy training these recruits how to fight?") + end + + + --[[ + + + if convo==2 then + + end + + if convo==3 then + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/trainer_durbok/fprt_adv03_sprawl/quests/trainer_durbok012.mp3", "", "", 857680969, 589713294, Spawn) + AddConversationOption(conversation, "Yes, I'm looking for more work to do.", "dlg_3_1") + AddConversationOption(conversation, "No thanks.") + StartConversation(conversation, NPC, Spawn, "Welcome back. Are you ready to put more of those scum back in their place?") + end + + if convo==4 then + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/trainer_durbok/fprt_adv03_sprawl/quests/trainer_durbok009.mp3", "", "", 2879942612, 4077208169, Spawn) + AddConversationOption(conversation, "There are a few less troublemakers to worry about.", "dlg_4_1") + AddConversationOption(conversation, "Not yet.") + StartConversation(conversation, NPC, Spawn, "Hello again, adventurer. Have you finished thinning out the excess population around here?") + end + + if convo==5 then + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/trainer_durbok/fprt_adv03_sprawl/quests/trainer_durbok012.mp3", "", "", 857680969, 589713294, Spawn) + AddConversationOption(conversation, "Yes, I'm looking for more work to do.", "dlg_5_1") + AddConversationOption(conversation, "No thanks.") + StartConversation(conversation, NPC, Spawn, "Welcome back. Are you ready to put more of those scum back in their place?") + end + + if convo==6 then + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/trainer_durbok/fprt_adv03_sprawl/quests/trainer_durbok009.mp3", "", "", 2879942612, 4077208169, Spawn) + AddConversationOption(conversation, "Not yet.", "dlg_6_1") + StartConversation(conversation, NPC, Spawn, "Hello again, adventurer. Have you finished thinning out the excess population around here?") + end + + if convo==7 then + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/trainer_durbok/fprt_adv03_sprawl/quests/trainer_durbok009.mp3", "", "", 2879942612, 4077208169, Spawn) + AddConversationOption(conversation, "Not yet.", "dlg_7_1") + StartConversation(conversation, NPC, Spawn, "Hello again, adventurer. Have you finished thinning out the excess population around here?") + end + + if convo==8 then + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/trainer_durbok/fprt_adv03_sprawl/quests/trainer_durbok009.mp3", "", "", 2879942612, 4077208169, Spawn) + AddConversationOption(conversation, "There are a few less troublemakers to worry about.", "dlg_8_1") + AddConversationOption(conversation, "Not yet.") + StartConversation(conversation, NPC, Spawn, "Hello again, adventurer. Have you finished thinning out the excess population around here?") + end + + if convo==9 then + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/trainer_durbok/fprt_adv03_sprawl/quests/trainer_durbok012.mp3", "", "", 857680969, 589713294, Spawn) + AddConversationOption(conversation, "Yes, I'm looking for more work to do.", "dlg_9_1") + AddConversationOption(conversation, "No thanks.") + StartConversation(conversation, NPC, Spawn, "Welcome back. Are you ready to put more of those scum back in their place?") + end + + if convo==18 then + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/trainer_durbok/fprt_adv03_sprawl/quests/trainer_durbok001.mp3", "", "", 3497395239, 3242764181, Spawn) + AddConversationOption(conversation, "My name is Whipew. Enforcer Kurdek sent me to ask how things are going.", "dlg_18_1") + AddConversationOption(conversation, "Sorry, I didn't mean to interrupt.") + StartConversation(conversation, NPC, Spawn, "Hey! Can't you see I'm busy training these recruits how to fight?") + end + + if convo==19 then + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/trainer_durbok/fprt_adv03_sprawl/quests/trainer_durbok001.mp3", "", "", 3497395239, 3242764181, Spawn) + AddConversationOption(conversation, "Sorry, I didn't mean to interrupt.", "dlg_19_1") + StartConversation(conversation, NPC, Spawn, "Hey! Can't you see I'm busy training these recruits how to fight?") + end +--]] +end + +------------------------------------------------------------------------------------------------------------------- +-- QUEST_1_FROM_KURDEK +------------------------------------------------------------------------------------------------------------------- + +function dlg_18_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/trainer_durbok/fprt_adv03_sprawl/quests/trainer_durbok002.mp3", "", "", 3758292268, 2300851073, Spawn) + AddConversationOption(conversation, "So how goes the training?", "dlg_18_2") + AddConversationOption(conversation, "It sounds like a bother, so never mind.") + StartConversation(conversation, NPC, Spawn, "That figures. Kurdek can't be bothered to ask me himself, eh? Fine, I suppose I can tell you instead.") +end + +function dlg_18_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/trainer_durbok/fprt_adv03_sprawl/quests/trainer_durbok003.mp3", "", "", 641451677, 496874931, Spawn) + AddConversationOption(conversation, "What do you mean?", "dlg_18_3") + AddConversationOption(conversation, "That doesn't sound like my problem.") + StartConversation(conversation, NPC, Spawn, "There are a few worthwhile Giantslayers here, but for the most part they're too sloppy to ever become Dreadnaughts. I don't really blame them, though. Clearly they aren't getting the proper direction.") +end + +function dlg_18_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/trainer_durbok/fprt_adv03_sprawl/quests/trainer_durbok004.mp3", "", "", 321268147, 2623146346, Spawn) + AddConversationOption(conversation, "What do you think should be done about it?", "dlg_18_4") + AddConversationOption(conversation, "Good luck with that.") + StartConversation(conversation, NPC, Spawn, "The one who claims to be the leader of the Giantslayers is a worthless barbarian named Brutemaster Tarden. I think he cares more about extorting money from the locals than he does about making sure his gang controls the Black Magi and the Dervish.") +end + +function dlg_18_4(NPC, Spawn) + SetStepComplete(Spawn, QUEST_1_FROM_KURDEK, 1) + + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/trainer_durbok/fprt_adv03_sprawl/quests/trainer_durbok005.mp3", "", "", 768810452, 746067812, Spawn) + AddConversationOption(conversation, "I'll let him know.") + StartConversation(conversation, NPC, Spawn, "I recommend that we strike a little fear into Tarden so that he remembers who's really in charge around here. Tell Enforcer Kurdek that it's time to teach that lazy Giantslayer a lesson he won't soon forget.") +end + +------------------------------------------------------------------------------------------------------------------- +-- QUEST 1 +------------------------------------------------------------------------------------------------------------------- + +function dlg_0_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/trainer_durbok/fprt_adv03_sprawl/quests/trainer_durbok007.mp3", "", "", 3620375691, 3328248556, Spawn) + AddConversationOption(conversation, "You've got a deal.", "OfferQuest1") + AddConversationOption(conversation, "No thanks.") + StartConversation(conversation, NPC, Spawn, "Aye, some of the rival gangs are interfering with my ability to train the Giantslayers. I'd pay you well if you would get rid of some of them for me.") +end + +function OfferQuest1(NPC, Spawn) + FaceTarget(NPC, Spawn) + OfferQuest(NPC, Spawn, QUEST_1) +end + +function OnQuest1(NPC, Spawn, conversation) + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/trainer_durbok/fprt_adv03_sprawl/quests/trainer_durbok009.mp3", "", "", 2879942612, 4077208169, Spawn) + if GetQuestStep(Spawn, QUEST_1) == 2 then + AddConversationOption(conversation, "There are a few less troublemakers to worry about.", "dlg_2_1") + end + AddConversationOption(conversation, "Not yet.") + StartConversation(conversation, NPC, Spawn, "Hello again, adventurer. Have you finished thinning out the excess population around here?") +end + +function dlg_2_1(NPC, Spawn) + SetStepComlete(Spawn, QUEST_1, 2) + + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/trainer_durbok/fprt_adv03_sprawl/quests/trainer_durbok010.mp3", "", "", 1104739099, 151745645, Spawn) + AddConversationOption(conversation, "I'll check back.", "dlg_2_2") + StartConversation(conversation, NPC, Spawn, "Great news! As promised, here's your reward. If you're available, I might have more work for you in the future.") +end + +--[[ +function dlg_5_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/trainer_durbok/fprt_adv03_sprawl/quests/trainer_durbok008.mp3", "", "", 2693497223, 3993753671, Spawn) + AddConversationOption(conversation, "Will do.", "dlg_5_2") + StartConversation(conversation, NPC, Spawn, "Sounds good. I'll jot down the particulars in your journal. Come back to me for payment when you're finished showing those scum who's boss.") +end +--]] diff --git a/server/SpawnScripts/Sprawl/aGiantslayerbasher.lua b/server/SpawnScripts/Sprawl/aGiantslayerbasher.lua new file mode 100644 index 000000000..349423ada --- /dev/null +++ b/server/SpawnScripts/Sprawl/aGiantslayerbasher.lua @@ -0,0 +1,34 @@ +--[[ + Script Name : SpawnScripts/Sprawl/aGiantslayerbasher.lua + Script Purpose : a Giantslayer basher + Script Author : Scatman + Script Date : 2009.07.26 + Script Notes : +--]] + +function spawn(NPC) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + local choice = math.random(1, 7) + if choice == 1 then + PlayFlavor(NPC, "", "It's time to show the Dervish who rules Freeport!", "", 1689589577, 4560189, Spawn) + elseif choice == 2 then + PlayFlavor(NPC, "", "Ever since the Dreadnaughts took over, all we do is run errands for them!", "", 1689589577, 4560189, Spawn) + elseif choice == 3 then + PlayFlavor(NPC, "", "I hope Brutemaster Tarden stands up to Kurdek so we can stop all this training!", "", 1689589577, 4560189, Spawn) + elseif choice == 4 then + PlayFlavor(NPC, "", "Work, work, work... Those Dreadnaughts are slavedrivers, I tell ya!", "", 1689589577, 4560189, Spawn) + elseif choice == 5 then + Say(NPC, "I've had it with the Dreadnaughts. The Giantslayers should be ruling the streets of Freeport!", Spawn) + elseif choice == 6 then + Say(NPC, "We've got to teach those rats in the Black Magi a lesson!", Spawn) + elseif choice == 7 then + Say(NPC, "Next time Durbok's back is turned, he's going to get what's coming to him!", Spawn) + end +end \ No newline at end of file diff --git a/server/SpawnScripts/Sprawl/aGiantslayerbrute.lua b/server/SpawnScripts/Sprawl/aGiantslayerbrute.lua new file mode 100644 index 000000000..70cb6608a --- /dev/null +++ b/server/SpawnScripts/Sprawl/aGiantslayerbrute.lua @@ -0,0 +1,34 @@ +--[[ + Script Name : SpawnScripts/Sprawl/aGiantslayerbrute.lua + Script Purpose : a Giantslayer brute + Script Author : Scatman + Script Date : 2009.07.26 + Script Notes : +--]] + +function spawn(NPC) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + local choice = math.random(1, 7) + if choice == 1 then + PlayFlavor(NPC, "", "It's time to show the Dervish who rules Freeport!", "", 1689589577, 4560189, Spawn) + elseif choice == 2 then + PlayFlavor(NPC, "", "Ever since the Dreadnaughts took over, all we do is run errands for them!", "", 1689589577, 4560189, Spawn) + elseif choice == 3 then + PlayFlavor(NPC, "", "I hope Brutemaster Tarden stands up to Kurdek so we can stop all this training!", "", 1689589577, 4560189, Spawn) + elseif choice == 4 then + PlayFlavor(NPC, "", "Work, work, work... Those Dreadnaughts are slavedrivers, I tell ya!", "", 1689589577, 4560189, Spawn) + elseif choice == 5 then + Say(NPC, "I've had it with the Dreadnaughts. The Giantslayers should be ruling the streets of Freeport!", Spawn) + elseif choice == 6 then + Say(NPC, "We've got to teach those rats in the Black Magi a lesson!", Spawn) + elseif choice == 7 then + Say(NPC, "Next time Durbok's back is turned, he's going to get what's coming to him!", Spawn) + end +end \ No newline at end of file diff --git a/server/SpawnScripts/Sprawl/aGiantslayerthug.lua b/server/SpawnScripts/Sprawl/aGiantslayerthug.lua new file mode 100644 index 000000000..0e9581c23 --- /dev/null +++ b/server/SpawnScripts/Sprawl/aGiantslayerthug.lua @@ -0,0 +1,34 @@ +--[[ + Script Name : SpawnScripts/Sprawl/aGiantslayerthug.lua + Script Purpose : a Giantslayer thug + Script Author : Scatman + Script Date : 2009.07.26 + Script Notes : +--]] + +function spawn(NPC) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + local choice = math.random(1, 7) + if choice == 1 then + PlayFlavor(NPC, "", "It's time to show the Dervish who rules Freeport!", "", 1689589577, 4560189, Spawn) + elseif choice == 2 then + PlayFlavor(NPC, "", "Ever since the Dreadnaughts took over, all we do is run errands for them!", "", 1689589577, 4560189, Spawn) + elseif choice == 3 then + PlayFlavor(NPC, "", "I hope Brutemaster Tarden stands up to Kurdek so we can stop all this training!", "", 1689589577, 4560189, Spawn) + elseif choice == 4 then + PlayFlavor(NPC, "", "Work, work, work... Those Dreadnaughts are slavedrivers, I tell ya!", "", 1689589577, 4560189, Spawn) + elseif choice == 5 then + Say(NPC, "I've had it with the Dreadnaughts. The Giantslayers should be ruling the streets of Freeport!", Spawn) + elseif choice == 6 then + Say(NPC, "We've got to teach those rats in the Black Magi a lesson!", Spawn) + elseif choice == 7 then + Say(NPC, "Next time Durbok's back is turned, he's going to get what's coming to him!", Spawn) + end +end \ No newline at end of file diff --git a/server/SpawnScripts/Sprawl/adistraughtfarmer.lua b/server/SpawnScripts/Sprawl/adistraughtfarmer.lua new file mode 100644 index 000000000..7e852cf0c --- /dev/null +++ b/server/SpawnScripts/Sprawl/adistraughtfarmer.lua @@ -0,0 +1,28 @@ +--[[ + Script Name : SpawnScripts/Sprawl/adistraughtfarmer.lua + Script Purpose : a distraught farmer + Script Author : Scatman + Script Date : 2009.07.26 + Script Notes : +--]] + +function spawn(NPC) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + local choice = math.random(1, 4) + if choice == 1 then + PlayFlavor(NPC, "", "Please brave one, drive them away!", "", 1689589577, 4560189, Spawn) + elseif choice == 2 then + PlayFlavor(NPC, "", "Help me, I beg you!", "", 1689589577, 4560189, Spawn) + elseif choice == 3 then + Say(NPC, "They defile my land and steal my crops!", Spawn) + elseif choice == 4 then + Say(NPC, "They may be bad, but the walking rats are worse...", Spawn) + end +end \ No newline at end of file diff --git a/server/SpawnScripts/Starcrest/AndorQuist.lua b/server/SpawnScripts/Starcrest/AndorQuist.lua new file mode 100644 index 000000000..d612317cc --- /dev/null +++ b/server/SpawnScripts/Starcrest/AndorQuist.lua @@ -0,0 +1,12 @@ +--[[ + Script Name : SpawnScripts/Starcrest/AndorQuist.lua + Script Purpose : Andor Quist + Script Author : John Adams + Script Date : 2008.09.23 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + PlayFlavor(NPC, "voiceover/english/human_eco_good_1/ft/service/merchant/human_merchant_service_good_1_hail_gm_ae84abf9.mp3", "Go on, take a look at the stock. You'll never beat this price in the city. I guarantee it!", "wink", 903813734, 2512856176, Spawn) +end \ No newline at end of file diff --git a/server/SpawnScripts/Starcrest/AnevayaStarchaser.lua b/server/SpawnScripts/Starcrest/AnevayaStarchaser.lua new file mode 100644 index 000000000..f93e99f1a --- /dev/null +++ b/server/SpawnScripts/Starcrest/AnevayaStarchaser.lua @@ -0,0 +1,20 @@ +--[[ + Script Name : SpawnScripts/Starcrest/AnevayaStarchaser.lua + Script Purpose : Anevaya Starchaser + Script Author : John Adams + Script Date : 2008.09.23 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + choice = math.random(1,3) + + if choice == 1 then + PlayFlavor(NPC, "voiceover/english/highelf_eco_good_concordium/ft/eco/good/highelf_eco_good_concordium_hail_gf_b52cd580.mp3", "The Qeynos Guard cannot defend us from dark forces it neither sees nor understands.", "", 1941375851, 1104708565, Spawn) + elseif choice == 2 then + PlayFlavor(NPC, "voiceover/english/highelf_eco_good_concordium/ft/eco/good/highelf_eco_good_concordium_hail_gf_88bbd1aa.mp3", "The Tunarian Alliance does not see the greater issues beyond individual evils. Their forests might be scorched wastelands and they would still be fending off poachers.", "", 3133325899, 3316523299, Spawn) + elseif choice == 3 then + PlayFlavor(NPC, "voiceover/english/highelf_eco_good_concordium/ft/eco/good/highelf_eco_good_concordium_hail_gf_987a9a3c.mp3", "While the Celestial Watch futilely awaits word from its forgotten gods the Concordium has harnessed the true power that blazes within each of us.", "", 3806603086, 3205979382, Spawn) + end +end \ No newline at end of file diff --git a/server/SpawnScripts/Starcrest/AngeliaClayton.lua b/server/SpawnScripts/Starcrest/AngeliaClayton.lua new file mode 100644 index 000000000..5a6b389c1 --- /dev/null +++ b/server/SpawnScripts/Starcrest/AngeliaClayton.lua @@ -0,0 +1,12 @@ +--[[ + Script Name : SpawnScripts/Starcrest/AngeliaClayton.lua + Script Purpose : Angelia Clayton + Script Author : John Adams + Script Date : 2008.09.23 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + PlayFlavor(NPC, "", "Hello to you! If you enjoy my dancing please be sure to leave a tip on the counter!", "", 1689589577, 4560189, Spawn) +end \ No newline at end of file diff --git a/server/SpawnScripts/Starcrest/Barrik.lua b/server/SpawnScripts/Starcrest/Barrik.lua new file mode 100644 index 000000000..9b21bb6f6 --- /dev/null +++ b/server/SpawnScripts/Starcrest/Barrik.lua @@ -0,0 +1,12 @@ +--[[ + Script Name : SpawnScripts/Starcrest/Barrik.lua + Script Purpose : Barrik + Script Author : John Adams + Script Date : 2008.09.23 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + PlayFlavor(NPC, "voiceover/english/armsdealer_barrik/qey_village02/100_armsdealer_barrik_multhail1_53e2d8b4.mp3", "Hello there! Will you be needin' a new sword today? I forge the best blades this side of the Tranquil Sea... Bested only by the Ironforge smiths. I've no work for you today, perhaps come back another day.", "", 1545023828, 4159512414, Spawn) +end \ No newline at end of file diff --git a/server/SpawnScripts/Starcrest/Bermo.lua b/server/SpawnScripts/Starcrest/Bermo.lua new file mode 100644 index 000000000..7f17a9f5f --- /dev/null +++ b/server/SpawnScripts/Starcrest/Bermo.lua @@ -0,0 +1,104 @@ +--[[ + Script Name : SpawnScripts/Starcrest/Bermo.lua + Script Purpose : Bermo + Script Author : John Adams + Script Date : 2008.09.23 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +-- Quest ID's +local GATHERING_GLOWMYST = 244 -- was 36 + +function spawn(NPC) + ProvidesQuest(NPC, GATHERING_GLOWMYST) +end + +function respawn(NPC) + spawn(NPC) +end + +function targeted(NPC, Spawn) + hailed(NPC, Spawn) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + if HasCompletedQuest(Spawn, GATHERING_GLOWMYST) then + AllMannerOfFermented(NPC, Spawn) + elseif HasQuest(Spawn, GATHERING_GLOWMYST) then + if GetQuestStep(Spawn, GATHERING_GLOWMYST) == 2 then + AllMannerOfFermentedDone(NPC, Spawn) + else + AllMannerOfFermented(NPC, Spawn) + end + else + AllMannerOfFermentedNoQuest(NPC, Spawn) + end +end + +--------------------------------------------------------------------------------------------------------------------- +-- QUEST 1 +--------------------------------------------------------------------------------------------------------------------- +function AllMannerOfFermentedDone(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/bartender_bermo/qey_village02/bartenderbermo.mp3", "", "", 861640330, 2606733244, Spawn) + AddConversationOption(conversation, "I've brought back the glowmyst juice you needed!", "GotJuice") + AddConversationOption(conversation, "No thanks.") + StartConversation(conversation, NPC, Spawn, "All manner of fermented beverages available here, all with my special Glowmyst juice added!") +end + +function AllMannerOfFermentedNoQuest(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/bartender_bermo/qey_village02/bartenderbermo.mp3", "", "", 861640330, 2606733244, Spawn) + AddConversationOption(conversation, "Glowmyst juice? What's that? ", "dlg_15_1") + AddConversationOption(conversation, "No thanks.") + StartConversation(conversation, NPC, Spawn, "All manner of fermented beverages available here, all with my special Glowmyst juice added!") +end + +function AllMannerOfFermented(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/bartender_bermo/qey_village02/bartenderbermo.mp3", "", "", 861640330, 2606733244, Spawn) + AddConversationOption(conversation, "No thanks.") + StartConversation(conversation, NPC, Spawn, "All manner of fermented beverages available here, all with my special Glowmyst juice added!") +end + +function dlg_15_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/bartender_bermo/qey_village02/bartenderbermo000.mp3", "", "", 2271463066, 2768575441, Spawn) + AddConversationOption(conversation, "Sure, why not?", "dlg_15_2") + AddConversationOption(conversation, "I don't think I'm cut out for that.") + StartConversation(conversation, NPC, Spawn, "It's a special juice I squeeze from the glowmyst beetles and I'm running short on the stuff; my customers love it. Hey, you're a stout one, would you mind squeezing me some?") +end + +function dlg_15_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/bartender_bermo/qey_village02/bartenderbermo001.mp3", "", "", 1349632986, 1200312116, Spawn) + AddConversationOption(conversation, "I'll get you some.", "OfferQuest1") + StartConversation(conversation, NPC, Spawn, "You must go to the Oakymyst forest and harvest the beetles. I'll need at least a handful of the beetles -- their juice doesn't add to or take away from the flavor of my drinks, but it gives them a slight, radiant glow.") +end + +function GotJuice(NPC, Spawn) + SetStepComplete(Spawn, GATHERING_GLOWMYST, 2) + + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "Thanks Bermo!") + StartConversation(conversation, NPC, Spawn, "Great! This will last at least a week! If you wait just a minute...Ahh, here we are! Take some money for your troubles. I insist!") +end + +function OfferQuest1(NPC, Spawn) + OfferQuest(NPC, Spawn, GATHERING_GLOWMYST) +end \ No newline at end of file diff --git a/server/SpawnScripts/Starcrest/Binkum.lua b/server/SpawnScripts/Starcrest/Binkum.lua new file mode 100644 index 000000000..fe48eb5f6 --- /dev/null +++ b/server/SpawnScripts/Starcrest/Binkum.lua @@ -0,0 +1,29 @@ +--[[ + Script Name : SpawnScripts/Starcrest/Binkum.lua + Script Purpose : Binkum + Script Author : Scatman + Script Date : 2009.09.25 + Script Notes : +--]] + +dofile("SpawnScripts/Generic/GenericGuardVoiceOvers.lua") + +function spawn(NPC) + SetPlayerProximityFunction(NPC, 10, "InRange", "LeaveRange") +end + +function respawn(NPC) + spawn(NPC) +end + +function InRange(NPC, Spawn) + CheckFaction(NPC, Spawn, "Qeynos") +end + +function LeaveRange(NPC, Spawn) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + GenericGuardHail(NPC, Spawn) +end \ No newline at end of file diff --git a/server/SpawnScripts/Starcrest/BurtEverett.lua b/server/SpawnScripts/Starcrest/BurtEverett.lua new file mode 100644 index 000000000..3087f19d9 --- /dev/null +++ b/server/SpawnScripts/Starcrest/BurtEverett.lua @@ -0,0 +1,12 @@ +--[[ + Script Name : SpawnScripts/Starcrest/BurtEverett.lua + Script Purpose : Burt Everett + Script Author : John Adams + Script Date : 2008.09.23 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + PlayFlavor(NPC, "", "I would give you something to do, but I have nothing to do myself!", "shrug", 1689589577, 4560189, Spawn) +end \ No newline at end of file diff --git a/server/SpawnScripts/Starcrest/CayanSable.lua b/server/SpawnScripts/Starcrest/CayanSable.lua new file mode 100644 index 000000000..b85a7a630 --- /dev/null +++ b/server/SpawnScripts/Starcrest/CayanSable.lua @@ -0,0 +1,249 @@ +--[[ + Script Name : SpawnScripts/Starcrest/CayanSable.lua + Script Purpose : Cayan Sable + Script Author : John Adams + Script Date : 2008.09.23 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +-- Quest ID's +local MEETING_WITH_CAYAN = 316 -- was 32 +local INFORMATION_MERCHANTS = 318 -- was 33 +local CONFRONTATION = 321 -- was 35 + +-- Item ID's +local FOLDING_STAND = 7379 + +function spawn(NPC) + ProvidesQuest(NPC, INFORMATION_MERCHANTS) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + if HasCompletedQuest(Spawn, MEETING_WITH_CAYAN) then + if HasCompletedQuest(Spawn, INFORMATION_MERCHANTS) then + if HasCompletedQuest(Spawn, CONFRONTATION) then + elseif HasQuest(Spawn, CONFRONTATION) then + AhWelcomeBack(NPC, Spawn) + end + elseif HasQuest(Spawn, INFORMATION_MERCHANTS) then + Say(NPC, "Have any problems friend?", Spawn) + else + HaveYouCollectedBerries(NPC, Spawn) + end + elseif HasQuest(Spawn, MEETING_WITH_CAYAN) then + if GetQuestStep(Spawn, MEETING_WITH_CAYAN) == 1 then + BetterHaveAGoodReason(NPC, Spawn) + else + HaveYouCollectedBerries(NPC, Spawn) + end + end +end + +------------------------------------------------------------------------------------------------------------------- +-- QUEST 1 +------------------------------------------------------------------------------------------------------------------- +function BetterHaveAGoodReason(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/cayan_sable/qey_village02/quests/cayan_sable/cayan_sable001.mp3", "", "", 2955433596, 3328302943, Spawn) + AddConversationOption(conversation, "I have a job to ask of you, Maareona sent me.", "dlg_35_1") + StartConversation(conversation, NPC, Spawn, "You better have a good reason for being back here.") +end + +function dlg_35_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/cayan_sable/qey_village02/quests/cayan_sable/cayan_sable002.mp3", "", "", 3326314353, 4151016678, Spawn) + AddConversationOption(conversation, "We need-", "dlg_35_2") + StartConversation(conversation, NPC, Spawn, "You wish a favor of your own accord? Speak of nothing else. What do you need?") +end + +function dlg_35_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/cayan_sable/qey_village02/quests/cayan_sable/cayan_sable003.mp3", "", "", 3734878539, 3356918318, Spawn) + AddConversationOption(conversation, "I need information on a package that was delivered to Qeynos recently.", "dlg_35_3") + StartConversation(conversation, NPC, Spawn, "You need...") +end + +function dlg_35_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/cayan_sable/qey_village02/quests/cayan_sable/cayan_sable004.mp3", "", "", 3348898221, 3703761299, Spawn) + AddConversationOption(conversation, "It was delivered to an Erudite by the name of Oolium Artanaes. Its final destination is within Starcrest Commune, but it hasn't been delivered yet. I need to know the whereabouts of this package.", "dlg_35_4") + StartConversation(conversation, NPC, Spawn, "And what information do you have regarding this package?") +end + +function dlg_35_4(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/cayan_sable/qey_village02/quests/cayan_sable/cayan_sable005.mp3", "", "", 3481387344, 4143272170, Spawn) + AddConversationOption(conversation, "What favor?", "dlg_35_5") + StartConversation(conversation, NPC, Spawn, " Very well. This will take some time, but not much. I will need to contact some friends, but I will get your information. For now I need you to do me a favor.") +end + +function dlg_35_5(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/cayan_sable/qey_village02/quests/cayan_sable/cayan_sable006.mp3", "", "", 2014036225, 2408031230, Spawn) + AddConversationOption(conversation, "I'll do it.", "dlg_36_6") + AddConversationOption(conversation, "Why do you need me to do this for you?", "dlg_35_6") + StartConversation(conversation, NPC, Spawn, "Red Sun Berries grow all around the Starcrest Commune. I need you to collect some for me.") +end + +function dlg_35_6(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/cayan_sable/qey_village02/quests/cayan_sable/cayan_sable007.mp3", "", "", 96821559, 3612059519, Spawn) + AddConversationOption(conversation, "So you want me to take the fall for you if I get caught?", "dlg_35_7") + StartConversation(conversation, NPC, Spawn, "Well, you owe me, for one. Also, I can't risk being caught with Red Sun Berries. I have a record, and having certain items that can be broken down into alchemical compounds used by assassins - despite how I intend to use them - would complicate my stay here in the Starcrest Commune.") +end + +function dlg_35_7(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/cayan_sable/qey_village02/quests/cayan_sable/cayan_sable008.mp3", "", "", 104262270, 421900564, Spawn) + AddConversationOption(conversation, "That's a pretty flimsy excuse, isn't it? What do you need them for?", "dlg_35_8") + StartConversation(conversation, NPC, Spawn, "Hardly. You're an Erudite. You people are always using Red Sun Berries for alchemical experiments and what not. Nobody will question an Erudite collecting some berries. If they do, just tell them you're looking to cure some ancient disease, they'll buy it.") +end + +function dlg_35_8(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/cayan_sable/qey_village02/quests/cayan_sable/cayan_sable009.mp3", "", "", 655615143, 4278558385, Spawn) + AddConversationOption(conversation, "I'm in.", "dlg_36_6") + AddConversationOption(conversation, "I'm out.") + StartConversation(conversation, NPC, Spawn, "The excuse is not flimsly for someone without a record. An extract from the berries themselves has been known to dull the magical prowess of those who consume it. This is something a client of mine wishes to study, as such I need the berries. I am not interested in whatever malicious uses the berries may have... for now. Are you in or out?") +end + +function dlg_36_6(NPC, Spawn) + SetStepComplete(Spawn, MEETING_WITH_CAYAN, 1) + + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/cayan_sable/qey_village02/quests/cayan_sable/cayan_sable010.mp3", "", "", 3772026299, 415172365, Spawn) + AddConversationOption(conversation, "Thanks, how do I get out of here?", "ThanksHowDoIGetOut") + AddConversationOption(conversation, "I will get them.") + StartConversation(conversation, NPC, Spawn, "I thought so. You can find the berries on some bushes around Starcrest Commune. They're not very obvious, as they rest at the heart of the bush itself, but if you reach in and give it a good shake, you should get some.") +end + +function ThanksHowDoIGetOut(NPC, Spawn) + PlayFlavor(NPC, "", "Just climb through this bush here.", "", 1689589577, 4560189, Spawn) +end + +function HaveYouCollectedBerries(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/cayan_sable/qey_village02/quests/cayan_sable/cayan_sable011.mp3", "", "", 1406752203, 243044540, Spawn) + + if GetQuestStep(Spawn, MEETING_WITH_CAYAN) == 2 then + AddConversationOption(conversation, "Not yet.") + elseif (HasCompletedQuest(Spawn, MEETING_WITH_CAYAN) and not HasCompletedQuest(Spawn, INFORMATION_MERCHANTS)) or (HasQuest(Spawn, MEETING_WITH_CAYAN) and GetQuestStep(Spawn, MEETING_WITH_CAYAN) == 3) then + AddConversationOption(conversation, "Yes I have.", "CollectedBerries") + end + + AddConversationOption(conversation, "How do I get out of here?", "dlg_38_1") + StartConversation(conversation, NPC, Spawn, "Have you collected the berries yet?") +end + +function dlg_38_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/cayan_sable/qey_village02/quests/cayan_sable/cayan_sable011a.mp3", "", "", 399132427, 3525586740, Spawn) + AddConversationOption(conversation, "Thanks.") + StartConversation(conversation, NPC, Spawn, "You can use the bush behind me to pull yourself out of here.") +end + +function CollectedBerries(NPC, Spawn) + SetStepComplete(Spawn, MEETING_WITH_CAYAN, 3) + + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/cayan_sable/qey_village02/quests/cayan_sable/cayan_sable012.mp3", "", "", 1654045376, 2588392355, Spawn) + AddConversationOption(conversation, "Pick it up?", "dlg_41_2") + StartConversation(conversation, NPC, Spawn, "Good. Your information has been acquired. You may pick it up at your earliest convenience. It may be time sensitive, so I would suggest sooner rather than later. Take this for services rendered. Your information was easier to acquire than I had guessed.") +end + +----------------------------------------------------------------------------------------------------------- +-- QUEST 2 +----------------------------------------------------------------------------------------------------------- + +function dlg_41_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/cayan_sable/qey_village02/quests/cayan_sable/cayan_sable013.mp3", "", "", 1738977381, 1610837494, Spawn) + AddConversationOption(conversation, "All right...", "OfferQuest2") + StartConversation(conversation, NPC, Spawn, "You can obtain it from Zinun Loospakina, just north east of the entrance to the Peat Bog. He should have a small, bronze statuette for sale. Nobody in their right mind would purchase such an item. You, however, will find it quite irresistible and charming.") +end + +function OfferQuest2(NPC, Spawn) + FaceTarget(NPC, Spawn) + OfferQuest(NPC, Spawn, INFORMATION_MERCHANTS) +end + +------------------------------------------------------------------------------------------------------------ +-- QUEST 4 +------------------------------------------------------------------------------------------------------------ + +function AhWelcomeBack(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/cayan_sable/qey_village02/quests/cayan_sable/cayan_sable014.mp3", "", "", 1560703880, 2874329405, Spawn) + + if GetQuestStep(Spawn, CONFRONTATION) == 1 then + AddConversationOption(conversation, "I need the stand that you were spoken to about earlier.", "dlg_52_1") + else + if not HasItem(Spawn, FOLDING_STAND) then + AddConversationOption(conversation, "I need the stand that you were spoken to about earlier.", "dlg_52_1") + else + AddConversationOption(conversation, "Nothing for now.") + end + end + + StartConversation(conversation, NPC, Spawn, "Ah, welcome back. What can I do for you this time?") +end + +function dlg_52_1(NPC, Spawn) + if GetQuestStep(Spawn, CONFRONTATION) == 1 then + SetStepComplete(Spawn, CONFRONTATION, 1) + end + + SummonItem(Spawn, FOLDING_STAND) + + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/cayan_sable/qey_village02/quests/cayan_sable/cayan_sable015.mp3", "", "", 1707606183, 700025760, Spawn) + AddConversationOption(conversation, "Nothing else.", "NothingElse") + StartConversation(conversation, NPC, Spawn, "Of course. It's yours. Is there anything else?") +end + +function NothingElse(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "Thank you.") + StartConversation(conversation, NPC, Spawn, "Then may the day treat you well.") +end \ No newline at end of file diff --git a/server/SpawnScripts/Starcrest/ElliasenkaCroosinaden.lua b/server/SpawnScripts/Starcrest/ElliasenkaCroosinaden.lua new file mode 100644 index 000000000..79e084d59 --- /dev/null +++ b/server/SpawnScripts/Starcrest/ElliasenkaCroosinaden.lua @@ -0,0 +1,23 @@ +--[[ + Script Name : SpawnScripts/Starcrest/ElliasenkaCroosinaden.lua + Script Purpose : Elliasenka Croosinaden + Script Author : John Adams + Script Date : 2008.09.23 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +function spawn(NPC) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/elliasenka_croosinaden/qey_village02/elliasenkacroosinaden000.mp3", "", "", 4184348378, 3631028960, Spawn) + AddConversationOption(conversation, "You seem to be busy. I'll find someone else to talk to.") + StartConversation(conversation, NPC, Spawn, "Unless you possess the knowledge we seek and will help us, I suggest you leave us with this human. Now, go, leave us to our business!") +end \ No newline at end of file diff --git a/server/SpawnScripts/Starcrest/ErianSeaver.lua b/server/SpawnScripts/Starcrest/ErianSeaver.lua new file mode 100644 index 000000000..457db6473 --- /dev/null +++ b/server/SpawnScripts/Starcrest/ErianSeaver.lua @@ -0,0 +1,31 @@ +--[[ + Script Name : SpawnScripts/Starcrest/ErianSeaver.lua + Script Purpose : Erian Seaver + Script Author : John Adams + Script Date : 2008.09.23 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +function spawn(NPC) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "Yes, please teach me.", "dlg_4_1") + AddConversationOption(conversation, "No, not at the moment.") + StartConversation(conversation, NPC, Spawn, "You show interest in the crafting trade, good. We can always use talented artisans. I can help you get started, would you be interested?") +end + +function dlg_4_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "I will start on that now.", "dlg_4_2") + StartConversation(conversation, NPC, Spawn, "There, you now have knowledge required to begin crafting. Speak to the Tradeskill Tutor for more detailed guidance on learning to craft, if you are interested in more information. Return to me when you are ready to select a crafting specialty.") +end \ No newline at end of file diff --git a/server/SpawnScripts/Starcrest/FarnsbyDunworth.lua b/server/SpawnScripts/Starcrest/FarnsbyDunworth.lua new file mode 100644 index 000000000..6db066b22 --- /dev/null +++ b/server/SpawnScripts/Starcrest/FarnsbyDunworth.lua @@ -0,0 +1,12 @@ +--[[ + Script Name : SpawnScripts/Starcrest/FarnsbyDunworth.lua + Script Purpose : Farnsby Dunworth + Script Author : John Adams + Script Date : 2008.09.23 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + PlayFlavor(NPC, "", "Hey, I don't know what they are talking about. I've never seen such a scroll in my life!", "", 1689589577, 4560189, Spawn) +end \ No newline at end of file diff --git a/server/SpawnScripts/Starcrest/FawnStarstone.lua b/server/SpawnScripts/Starcrest/FawnStarstone.lua new file mode 100644 index 000000000..2b982181c --- /dev/null +++ b/server/SpawnScripts/Starcrest/FawnStarstone.lua @@ -0,0 +1,23 @@ +--[[ + Script Name : SpawnScripts/Starcrest/FawnStarstone.lua + Script Purpose : Fawn Starstone + Script Author : John Adams + Script Date : 2008.09.23 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +function spawn(NPC) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_2_1003.mp3", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Thanks for the welcome! See you around!") + StartConversation(conversation, NPC, Spawn, "Welcome to the village! I hope you find everything you need. I wish I had!") +end \ No newline at end of file diff --git a/server/SpawnScripts/Starcrest/GracenDocks.lua b/server/SpawnScripts/Starcrest/GracenDocks.lua new file mode 100644 index 000000000..c30f1646f --- /dev/null +++ b/server/SpawnScripts/Starcrest/GracenDocks.lua @@ -0,0 +1,20 @@ +--[[ + Script Name : SpawnScripts/Starcrest/GracenDocks.lua + Script Purpose : Gracen Docks + Script Author : John Adams + Script Date : 2008.09.23 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + choice = math.random(1,2) + + if choice == 1 then + PlayFlavor(NPC, "", "You should watch the sky at night sometime, it sure does get pretty.", "", 1689589577, 4560189, Spawn) + elseif choice == 2 then + PlayFlavor(NPC, "", "Sometimes fate leaves you guessing, but never forget that the point is buried in there somewhere.", "", 1689589577, 4560189, Spawn) + else + end + +end \ No newline at end of file diff --git a/server/SpawnScripts/Starcrest/Grekin.lua b/server/SpawnScripts/Starcrest/Grekin.lua new file mode 100644 index 000000000..95bf57957 --- /dev/null +++ b/server/SpawnScripts/Starcrest/Grekin.lua @@ -0,0 +1,12 @@ +--[[ + Script Name : SpawnScripts/Starcrest/Grekin.lua + Script Purpose : Grekin + Script Author : John Adams + Script Date : 2008.09.23 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + PlayFlavor(NPC, "voiceover/english/merchant_grekin/qey_village02/100_human_merchant_m_01_multhail1_78077dd5.mp3", "Sorry, friend. I don't think you can help me.", "", 3289788151, 1391553241, Spawn) +end \ No newline at end of file diff --git a/server/SpawnScripts/Starcrest/Harstead.lua b/server/SpawnScripts/Starcrest/Harstead.lua new file mode 100644 index 000000000..1ee1651af --- /dev/null +++ b/server/SpawnScripts/Starcrest/Harstead.lua @@ -0,0 +1,19 @@ +--[[ + Script Name : SpawnScripts/Starcrest/Harstead.lua + Script Purpose : Harstead + Script Author : John Adams + Script Date : 2008.09.23 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + choice = math.random(1,2) + + if choice == 1 then + PlayFlavor(NPC, "voiceover/english/human_eco_good_1/ft/service/merchant/human_merchant_service_good_1_hail_gf_e4fa2bd8.mp3", "Confound it! Where did I put that ledger? It must be around here somewhere!", "confused", 2588954321, 88153469, Spawn) + elseif choice == 2 then + PlayFlavor(NPC, "voiceover/english/human_eco_good_1/ft/service/merchant/human_merchant_service_good_1_hail_gf_ae84abf9.mp3", "Go on, take a look at the stock. You'll never beat this price in the city. I guarantee it!", "wink", 1667555721, 2696093362, Spawn) + end + +end \ No newline at end of file diff --git a/server/SpawnScripts/Starcrest/InnkeeperJerbenSleepwell.lua b/server/SpawnScripts/Starcrest/InnkeeperJerbenSleepwell.lua new file mode 100644 index 000000000..f3f62399d --- /dev/null +++ b/server/SpawnScripts/Starcrest/InnkeeperJerbenSleepwell.lua @@ -0,0 +1,29 @@ +--[[ + Script Name : SpawnScripts/Starcrest/InnkeeperJerbenSleepwell.lua + Script Purpose : Innkeeper Jerben Sleepwell + Script Author : John Adams + Script Date : 2008.09.23 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +function spawn(NPC) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "innkeeper_jerben_sleepwell/qey_village02/innkeeper010.mp3", "", "", 3595889549, 3697050857, Spawn) + AddConversationOption(conversation, "Yes, please.") + AddConversationOption(conversation, "No thank you.") + StartConversation(conversation, NPC, Spawn, "Hello " .. GetName(Spawn) .. ", I am the Innkeeper for this village. We have received word of your arrival and have a room prepared for you. Would you like to know more about housing?") +end + +--[[ raw_conversations + PlayFlavor(NPC, "voiceover/english/innkeeper_jerben_sleepwell/qey_village02/100_innkeeper_callout_ce8f52eb.mp3", "It's been so long since I've had one of my wife's special desserts! I want some crunchies! Will you help me get more crunchies?", "", 943990017, 651455380, Spawn) +--]] + diff --git a/server/SpawnScripts/Starcrest/KnightCaptainSantis.lua b/server/SpawnScripts/Starcrest/KnightCaptainSantis.lua new file mode 100644 index 000000000..d26d5f1ec --- /dev/null +++ b/server/SpawnScripts/Starcrest/KnightCaptainSantis.lua @@ -0,0 +1,75 @@ +--[[ + Script Name : SpawnScripts/StarcrestCommune/KnightCaptainSantis.lua + Script Purpose : Knight-Captain Santis + Script Author : Ememjr + Script Date : 2017.10.28 + Script Notes : +--]] + + + + +function spawn(NPC) + SetPlayerProximityFunction(NPC, 10, "InRange", "LeaveRange") + ProvidesQuest(NPC, 240) +end +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + local conversation = CreateConversation() + + if not HasQuest(Spawn, 240) and not QuestIsComplete(Spawn , 240) then + AddConversationOption(conversation, "What kind of trouble is out in the bog?", "Option4") + end + if HasQuest(Spawn, 300) then + AddConversationOption(conversation, "I bring you an urgent message from the Nettleville Garrison.", "Option5") + end + if HasQuest(Spawn,240) then + if not QuestIsComplete(Spawn , 240) then + if QuestStepIsComplete(Spawn, 240, 1) then + AddConversationOption(conversation, "I am happy to report that I have eliminated several Bog Sludges at your request.", "Killed") + end + end + end + StartConversation(conversation, NPC, Spawn, "Good day to you. I've been hearing reports that the Peat Bog isn't safe right now. I hope you didn't have any trouble if you came in that way.") +end +function InRange(NPC,Spawn) + PlayFlavor(NPC, "", "Have you a moment? We guards could use your assistance!", "beckon", 0, 0, Spawn) +end +function Killed(NPC, Spawn) + FaceTarget(NPC, Spawn) + local conversation = CreateConversation() + + AddConversationOption(conversation, "It feels good to make the area a little bit safer.","GetReward") + StartConversation(conversation, NPC, Spawn, "You are truly valuable to Qeynos. I'm already receiving optimistic reports that the Bog Sludge are finally under control. Please accept this reward for a job well done.") + +end +function GetReward(NPC, Spawn) + SetStepComplete(Spawn, 240, 2) +end + +function Option4(NPC, Spawn) + FaceTarget(NPC, Spawn) + local conversation = CreateConversation() + + AddConversationOption(conversation, "A few sludges shouldn't be a problem for me.", "Option6") + StartConversation(conversation, NPC, Spawn, "The Bog Sludges have swelled in number, spreading like pestilence. This vermin has become a serious menace to the refugees in that region. The Sludges must be exterminated for the safety of the people. I hope you're not too squeamish for such a job. ") +end + +function Option6(NPC, Spawn) + FaceTarget(NPC, Spawn) + local conversation = CreateConversation() + + AddConversationOption(conversation, "Sounds good. I'll get right on it.", "Offer") + StartConversation(conversation, NPC, Spawn, "Excellent! Go to the Peat Bog, slay several sludges and report back to me. I will reward you for your service to Qeynos. ") +end + +function Option5(NPC, Spawn) + FaceTarget(NPC, Spawn) + local conversation = CreateConversation() + + AddConversationOption(conversation, "Phalanx match! I will tell him you accept.") + StartConversation(conversation, NPC, Spawn, "Let me read that... Ha! Captain Hastings and his team wish to challenge the Starcrest Garrison to a Phalanx match? We shall squash them. Tell him I accept.") +end +function Offer(NPC,Spawn) + OfferQuest(NPC, Spawn, 240) +end \ No newline at end of file diff --git a/server/SpawnScripts/Starcrest/LuvileBinlee.lua b/server/SpawnScripts/Starcrest/LuvileBinlee.lua new file mode 100644 index 000000000..56c386aaa --- /dev/null +++ b/server/SpawnScripts/Starcrest/LuvileBinlee.lua @@ -0,0 +1,23 @@ +--[[ + Script Name : SpawnScripts/Starcrest/LuvileBinlee.lua + Script Purpose : Luvile Binlee + Script Author : John Adams + Script Date : 2008.09.23 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +function spawn(NPC) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/optional5/luvile_binlee/qey_village02/luvilebinlee000.mp3", "", "", 2956622106, 3546014069, Spawn) + AddConversationOption(conversation, "That's a bit deep for me. Sorry for bothering your meditations.") + StartConversation(conversation, NPC, Spawn, "I'm contemplating how this tree symbolizes a person's life ... We all come from a solid trunk grounded in history, and the tree branches represent the random choices we make in life...") +end \ No newline at end of file diff --git a/server/SpawnScripts/Starcrest/MaareonaLudimintium.lua b/server/SpawnScripts/Starcrest/MaareonaLudimintium.lua new file mode 100644 index 000000000..8d8b8f38c --- /dev/null +++ b/server/SpawnScripts/Starcrest/MaareonaLudimintium.lua @@ -0,0 +1,485 @@ +--[[ + Script Name : SpawnScripts/Starcrest/MaareonaLudimintium.lua + Script Purpose : Maareona Ludimintium + Script Author : John Adams + Script Date : 2008.09.23 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +-- Race ID's +local Erudite = 3 + +-- Quest ID's +local MEETING_WITH_CAYAN = 316 -- was 32 +local INFORMATION_MERCHANTS = 318 -- was 33 +local HIDDEN_TREASURES = 320 -- was 34 +local CONFRONTATION = 321 -- was 35 +local DELIVERING_NEWS = 322 + +-- Item ID's +local NULLIFICATION_STONE = 10087 +local SOUL_SPIKE = 13134 + + +-- players name was +-- Jinoira + + +function spawn(NPC) + ProvidesQuest(NPC, MEETING_WITH_CAYAN) + ProvidesQuest(NPC, HIDDEN_TREASURES) + ProvidesQuest(NPC, CONFRONTATION) + ProvidesQuest(NPC, DELIVERING_NEWS) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + if GetRace(Spawn) == Erudite then + Begin(NPC, Spawn) + else + NotErudite(NPC, Spawn) + end +end + +function Begin(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + if HasCompletedQuest(Spawn, MEETING_WITH_CAYAN) then + if HasCompletedQuest(Spawn, INFORMATION_MERCHANTS) then + if HasCompletedQuest(Spawn, HIDDEN_TREASURES) then + if HasCompletedQuest(Spawn, CONFRONTATION) then + if not HasQuest(Spawn, DELIVERING_NEWS) and not HasCompletedQuest(Spawn, DELIVERING_NEWS) then + dlg_56_3(NPC, Spawn) + end + elseif HasQuest(Spawn, CONFRONTATION) then + IsItDestroyedYet(NPC, Spawn, conversation) + else + FoundPackageYet(NPC, Spawn) + end + elseif HasQuest(Spawn, HIDDEN_TREASURES) then + FoundPackageYet(NPC, Spawn) + else + GottenTheInformationYet(NPC, Spawn, conversation) + end + elseif HasQuest(Spawn, INFORMATION_MERCHANTS) then + GottenTheInformationYet(NPC, Spawn, conversation) + else + GottenTheInformationYet(NPC, Spawn, conversation) + end + elseif HasQuest(Spawn, MEETING_WITH_CAYAN) then + GottenTheInformationYet(NPC, Spawn, conversation) + else + NoGreaterQuest(NPC, Spawn, conversation) + end +end + +function NotErudite(NPC, Spawn) + Say(NPC, "I suppose I appreciate your interest in speaking with me, but I am here as a service to those of my own kind.", Spawn) +end + +------------------------------------------------------------------------------------------------------------------- +-- ERUDITE MENTOR QUEST 1 +------------------------------------------------------------------------------------------------------------------- + +function NoGreaterQuest(NPC, Spawn, conversation) + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/maareona_ludimintium/qey_village02/quests/maareona/maareona001.mp3", "", "bow", 1982809476, 3400870964, Spawn) + AddConversationOption(conversation, "Hello, I am " .. GetName(Spawn) .. ".", "dlg_20_1") + StartConversation(conversation, NPC, Spawn, "There is no greater quest than the truth. Welcome to Starcrest Commune, Erudite. I am Maareona.") +end + +function dlg_20_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/maareona_ludimintium/qey_village02/quests/maareona/maareona002.mp3", "", "", 284309716, 754775848, Spawn) + AddConversationOption(conversation, "Truth.", "dlg_21_2") + AddConversationOption(conversation, "Power.", "dlg_21_2") + AddConversationOption(conversation, "Enlightenment.", "dlg_21_2") + AddConversationOption(conversation, "I don't know.", "dlg_20_2") + StartConversation(conversation, NPC, Spawn, "That you are. Tell me, " .. GetName(Spawn) .. ", what do you seek?") +end + +function dlg_20_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/maareona_ludimintium/qey_village02/quests/maareona/maareona003a.mp3", "", "", 337061547, 3048757721, Spawn) + AddConversationOption(conversation, "What do you seek?", "dlg_20_3") + StartConversation(conversation, NPC, Spawn, "Good, it takes a long time to build the resolve to know what you seek. I would be concerned if you thought you already knew.") +end + +function dlg_20_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/maareona_ludimintium/qey_village02/quests/maareona/maareona006.mp3", "", "", 1647970244, 231936640, Spawn) + AddConversationOption(conversation, "Why is that?", "dlg_20_4") + StartConversation(conversation, NPC, Spawn, "Truth. Truth and Enlightenment. I seek individual enlightenment, and racial enlightenment, and eventually sentient enlightenment. I do not expect to succeed anytime soon, but I will succeed. Racial enlightenment is proving to be most difficult at this time, unfortunately.") +end + +function dlg_20_4(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/maareona_ludimintium/qey_village02/quests/maareona/maareona007.mp3", "", "", 933673315, 142645817, Spawn) + AddConversationOption(conversation, "That sounds like a reasonable goal.", "dlg_20_6") + AddConversationOption(conversation, "That sounds a little intolerant.", "dlg_20_5") + StartConversation(conversation, NPC, Spawn, "Well... I am not sure if you've been to Freeport recently, but there is a great ideological schism between the Erudites of our city and those of Freeport. Part of what I do here is work with Erudites who share those views and attempt to bring them around to a more, well, compassionate view of things.") +end + +function dlg_20_5(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/maareona_ludimintium/qey_village02/quests/maareona/maareona008.mp3", "", "", 1279054800, 1194830102, Spawn) + AddConversationOption(conversation, "I suppose that sounds reasonable.", "dlg_20_6") + StartConversation(conversation, NPC, Spawn, "Views of all kinds I can tolerate. It is actions that I have trouble accepting. Those who subscribe to the views of Freeport commonly turn inappropriate views into inappropriate--and illegal--actions. And, yes, it is true, I cannot tolerate actions such as those. If I work with these people prior to actions of this type then Qeynos is stronger.") +end + +function dlg_20_6(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/maareona_ludimintium/qey_village02/quests/maareona/maareona009.mp3", "", "", 2014412725, 134790625, Spawn) + AddConversationOption(conversation, "Is there anything I can do to help?", "dlg_20_7") + StartConversation(conversation, NPC, Spawn, "It is. We've given this much thought and this is the only acceptable solution, we cannot remain idle when Freeport gains influence among the citizens of Qeynos.") +end + +function dlg_20_7(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/maareona_ludimintium/qey_village02/quests/maareona/maareona010.mp3", "", "", 731226683, 4123988397, Spawn) + AddConversationOption(conversation, "What would you like me to do?", "dlg_21_8") + AddConversationOption(conversation, "Do you have anything a little more exciting and adventurous?", "dlg_20_8") + StartConversation(conversation, NPC, Spawn, "There is always some way an Erudite such as yourself can help the cause. I am investigating a package that was recently delivered to Qeynos that was thought to contain a heretical relic of past ages. Whether or not the relic itself contains some curse that would promote its ideals, or would just serve to attract those who would do the same, we must rid Qeynos of such an object.") +end + +function dlg_20_8(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/maareona_ludimintium/qey_village02/quests/maareona/maareona011.mp3", "", "", 296165667, 3976111075, Spawn) + AddConversationOption(conversation, "All right, thank you.") + StartConversation(conversation, NPC, Spawn, "Certainly. Well, I personally don't but I have friends who may. Go speak with Rujiarmo Oolamein in the Peat Bog. I am sure he could use any help you can offer.") +end + +function dlg_21_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/maareona_ludimintium/qey_village02/quests/maareona/maareona003.mp3", "", "", 612001961, 3121169439, Spawn) + AddConversationOption(conversation, "Yes.", "PerhapsYouWill") + AddConversationOption(conversation, "No.", "dlg_21_3") + AddConversationOption(conversation, "I don't know.", "dlg_21_3") + StartConversation(conversation, NPC, Spawn, "Will you achieve it?") +end + +function PerhapsYouWill(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "What do you seek?", "dlg_20_3") + StartConversation(conversation, NPC, Spawn, "Perhaps you will.") +end + +function dlg_21_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/maareona_ludimintium/qey_village02/quests/maareona/maareona004.mp3", "", "", 738787463, 3083155196, Spawn) + AddConversationOption(conversation, "What do you seek?", "dlg_20_3") + StartConversation(conversation, NPC, Spawn, "It would seem not. Perhaps you should seek something else then.") +end + +function dlg_21_4(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/maareona_ludimintium/qey_village02/quests/maareona/maareona006.mp3", "", "", 1647970244, 231936640, Spawn) + AddConversationOption(conversation, "Why is that?", "dlg_21_5") + StartConversation(conversation, NPC, Spawn, "Truth. Truth and Enlightenment. I seek individual enlightenment, and racial enlightenment, and eventually sentient enlightenment. I do not expect to succeed anytime soon, but I will succeed. Racial enlightenment is proving to be most difficult at this time, unfortunately.") +end + +function dlg_21_8(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/maareona_ludimintium/qey_village02/quests/maareona/maareona012.mp3", "", "", 1465004350, 3954796796, Spawn) + AddConversationOption(conversation, "Why is this important?", "dlg_21_9") + StartConversation(conversation, NPC, Spawn, "As part of my job I routinely come in contact with various people of, uhm, ideologies not concurrent with my own. Although I eventually strive for enlightenment of all sentient beings, for I employ such people to help me with my first two goals: my own enlightenment and that of my race.") +end + +function dlg_21_9(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/maareona_ludimintium/qey_village02/quests/maareona/maareona013.mp3", "", "", 3182974274, 1240192562, Spawn) + AddConversationOption(conversation, "And once I've found him?", "dlg_21_10") + StartConversation(conversation, NPC, Spawn, "Sorry, I just wanted to prepare you before you meet who I am sending you to. I would like you to speak with a human named Cayan Sable. Behind the armor shop, near its north western corner, there is a bench leaning against the wall. You can climb up it to find Cayan.") +end + +function dlg_21_10(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/maareona_ludimintium/qey_village02/quests/maareona/maareona014.mp3", "", "", 3260022583, 3167071006, Spawn) + AddConversationOption(conversation, "I will speak to him.", "OfferQuest1") + StartConversation(conversation, NPC, Spawn, "Tell him we need to find the whereabouts of a package. It was delivered recently to someone by the name of Oolium Artanaes. We were watching him until he fled into South Qeynos. Because of the path he took, our agent could not follow him without revealing himself. Cayan will have friends who can help us find him, and learn the whereabouts of the package.") +end + +function OfferQuest1(NPC, Spawn) + FaceTarget(NPC, Spawn) + OfferQuest(NPC, Spawn, MEETING_WITH_CAYAN) +end + +function GottenTheInformationYet(NPC, Spawn, conversation) + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/maareona_ludimintium/qey_village02/quests/maareona/maareona016.mp3", "", "", 1380727633, 48771667, Spawn) + + if (HasCompletedQuest(Spawn, INFORMATION_MERCHANTS) and not HasCompletedQuest(Spawn, HIDDEN_TREASURES)) or (HasQuest(Spawn, INFORMATION_MERCHANTS) and GetQuestStep(Spawn, INFORMATION_MERCHANTS) == 3) then + AddConversationOption(conversation, "Yes, I have.", "GotInformation") + else + AddConversationOption(conversation, "No, I haven't.") + end + + StartConversation(conversation, NPC, Spawn, "Have you gotten the information yet?") +end + +-------------------------------------------------------------------------------------------------------------------- +-- ERUDITE MENTOR QUEST 2 +-------------------------------------------------------------------------------------------------------------------- + +function GotInformation(NPC, Spawn) + if HasQuest(Spawn, INFORMATION_MERCHANTS) then + SetStepComplete(Spawn, INFORMATION_MERCHANTS, 3) + end + + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/maareona_ludimintium/qey_village02/quests/maareona/maareona017.mp3", "", "", 4022802579, 2271189733, Spawn) + AddConversationOption(conversation, "Here you go.", "dlg_45_2") + StartConversation(conversation, NPC, Spawn, "Wonderful. Let me see it.") +end + +--------------------------------------------------------------------------------------------------------------------- +-- ERUDITE MENTOR QUEST 3 +--------------------------------------------------------------------------------------------------------------------- + +function dlg_45_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/maareona_ludimintium/qey_village02/quests/maareona/maareona018.mp3", "", "", 4212736399, 3852768396, Spawn) + AddConversationOption(conversation, "Couldn't the package still be recovered?", "dlg_45_3") + StartConversation(conversation, NPC, Spawn, "Hmmm... this may be bad news. If he gave up the shipment that means we may never know to whom it was meant to finally be delivered. Worse still, who knows who may stumble upon the relic now. We were so close!") +end + +function dlg_45_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/maareona_ludimintium/qey_village02/quests/maareona/maareona019.mp3", "", "", 2700828927, 1097914142, Spawn) + AddConversationOption(conversation, "I can do that.", "dlg_45_4") + AddConversationOption(conversation, "Not right now.") + StartConversation(conversation, NPC, Spawn, "I don't know... not likely- actually... there are a pair of grates in the water ways that may have stopped the package. I don't know how big the package was, but these grates may have stopped it. I'll get one of my contacts to check the grates in Nettleville, I'd like you to check the grates in here in Starcrest. What do you say?") +end + +function dlg_45_4(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/maareona_ludimintium/qey_village02/quests/maareona/maareona020.mp3", "", "", 3437539307, 3210013494, Spawn) + AddConversationOption(conversation, "All right.", "OfferQuest3") + StartConversation(conversation, NPC, Spawn, "Good. I know it is a lot to ask, but at a time like this I think it is best to put aside any fears. You'll have to go to the ferryway near the mariner's bells in the eastern side of Starcrest Commune. Once there swim to the grates and see if any packages were held up on them. It isn't very likely, but it is definitely worth taking a look.") +end + +function OfferQuest3(NPC, Spawn) + FaceTarget(NPC, Spawn) + OfferQuest(NPC, Spawn, HIDDEN_TREASURES) +end + +function FoundPackageYet(NPC, Spawn) + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/maareona_ludimintium/qey_village02/quests/maareona/maareona021.mp3", "", "", 2659241094, 1582601118, Spawn) + + if (HasCompletedQuest(Spawn, HIDDEN_TREASURES) and not HasCompletedQuest(Spawn, 35)) or (HasQuest(Spawn, HIDDEN_TREASURES) and GetQuestStep(Spawn, HIDDEN_TREASURES) == 2) then + AddConversationOption(conversation, "Yes, I have its contents here. And an unsigned delivery receipt.", "FoundPackage") + else + AddConversationOption(conversation, "Not yet, no.") + end + + StartConversation(conversation, NPC, Spawn, "Have you found the package?") +end + +function FoundPackage(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/maareona_ludimintium/qey_village02/quests/maareona/maareona022.mp3", "", "", 560393626, 4096174929, Spawn) + AddConversationOption(conversation, "It's hard to read and soggy, but here.", "dlg_49_2") + StartConversation(conversation, NPC, Spawn, "The receipt was with it? Wonderful!") +end + +function dlg_49_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/maareona_ludimintium/qey_village02/quests/maareona/maareona023.mp3", "", "", 1854168160, 123679709, Spawn) + AddConversationOption(conversation, "And...?", "dlg_49_3") + StartConversation(conversation, NPC, Spawn, "Hmm, that is fine. It was not the ink that was important. I can sense who the intended recipient was. It will only take a moment...") +end + +function dlg_49_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/maareona_ludimintium/qey_village02/quests/maareona/maareona024.mp3", "", "", 2925464109, 438548200, Spawn) + AddConversationOption(conversation, "Here you go.", "dlg_49_4") + StartConversation(conversation, NPC, Spawn, "Velderoth Malraen. He resides here in Starcrest. Now, let's see the package.") +end + +function dlg_49_4(NPC, Spawn) + if HasQuest(Spawn, HIDDEN_TREASURES) then + SetStepComplete(Spawn, HIDDEN_TREASURES, 2) + end + + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/maareona_ludimintium/qey_village02/quests/maareona/maareona025.mp3", "", "", 4023924866, 963404506, Spawn) + AddConversationOption(conversation, "A Soul Spike?", "dlg_49_5") + StartConversation(conversation, NPC, Spawn, "Oh my! Boxes like this were made to hold objects of great metaphysical potential. Oh dear... these symbols... this box contains a Soul Spike.") +end + +------------------------------------------------------------------------------------------------------------- +-- QUEST 4 +------------------------------------------------------------------------------------------------------------- + +function dlg_49_5(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/maareona_ludimintium/qey_village02/quests/maareona/maareona026.mp3", "", "", 290912951, 2000708937, Spawn) + AddConversationOption(conversation, "What do you need me to do?", "dlg_49_6") + StartConversation(conversation, NPC, Spawn, "An ancient weapon of the heretic. Some say it has enormous power, others say it is for ritual only, others say it comes from a different plane of existence... all we know is it is a sure sign of a heretic. Velderoth Malraen is that heretic. He must not be allowed to stay a moment longer in Qeynos.") +end + +function dlg_49_6(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/maareona_ludimintium/qey_village02/quests/maareona/maareona027.mp3", "", "", 3129182900, 3935897138, Spawn) + AddConversationOption(conversation, "What do I need to do?", "dlg_49_7") + StartConversation(conversation, NPC, Spawn, "We must make this Soul Spike public. To most it will mean very little, but to any heretic its destruction will be known.") +end + +function dlg_49_7(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/maareona_ludimintium/qey_village02/quests/maareona/maareona028.mp3", "", "", 2750149120, 800404761, Spawn) + AddConversationOption(conversation, "What if Velderoth confronts me?", "OfferQuest4") + StartConversation(conversation, NPC, Spawn, "Speak with Cayan. There is a stand, he will know of what I speak. You will retrieve the stand from him. Take the stand into central Starcrest, near the fountain, and place it there. When it is destroyed Velderoth will feel it, he will flee.") +end + +function OfferQuest4(NPC, Spawn) + FaceTarget(NPC, Spawn) + OfferQuest(NPC, Spawn, CONFRONTATION) +end + +function TapIt(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + -- Nullification Stone + -- Soul Spike + SummonItem(Spawn, NULLIFICATION_STONE) + SummonItem(Spawn, SOUL_SPIKE) + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/maareona_ludimintium/qey_village02/quests/maareona/maareona030.mp3", "", "", 720107384, 4004540442, Spawn) + AddConversationOption(conversation, "I will return.") + StartConversation(conversation, NPC, Spawn, "Tap it with this stone. The rest will attend to itself. Again, do not be wary of Velderoth.") +end + +function IsItDestroyedYet(NPC, Spawn, conversation) + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/maareona_ludimintium/qey_village02/quests/maareona/maareona031.mp3", "", "", 2023690647, 3266928269, Spawn) + + if HasQuest(Spawn, CONFRONTATION) then + if GetQuestStep(Spawn, CONFRONTATION) == 3 then + AddConversationOption(conversation, "Yes. Velderoth came.", "dlg_56_1") + else + if not HasItem(Spawn, SOUL_SPIKE) then + AddConversationOption(conversation, "I need the Soul Spike", "NeedSoulSpike") + end + + if not HasItem(Spawn, NULLIFICATION_STONE) then + AddConversationOption(conversation, "I need the Nullification Stone.", "NeedNullificationStone") + end + end + end + + AddConversationOption(conversation, "Not yet.") + StartConversation(conversation, NPC, Spawn, "Is it destroyed?") +end + +function NeedSoulSpike(NPC, Spawn) + SummonItem(Spawn, SOUL_SPIKE) + + if not HasItem(Spawn, NULLIFICATION_STONE) then + SummonItem(Spawn, NULLIFICATION_STONE) + end +end + +function NeedNullificationStone(NPC, Spawn) + SummonItem(Spawn, NULLIFICATION_STONE) + + if not HasItem(Spawn, SOUL_SPIKE) then + SummonItem(Spawn, SOUL_SPIKE) + end +end + +function dlg_56_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/maareona_ludimintium/qey_village02/quests/maareona/maareona032.mp3", "", "", 632600853, 3687579453, Spawn) + AddConversationOption(conversation, "Yes, that much seems obvious.", "dlg_56_2") + StartConversation(conversation, NPC, Spawn, "That is not surprising. He knows he has been found out and will not return. Another heretic fleeing to the lands of Freeport. What an ironic name... Jinoira, this news is rather big for all citizens of Qeynos, but, to Erudites, it is even bigger. We struggle to maintain our image among the other races here in Qeynos.") +end + +function dlg_56_2(NPC, Spawn) + SetStepComplete(Spawn, CONFRONTATION, 3) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/maareona_ludimintium/qey_village02/quests/maareona/maareona033.mp3", "", "", 3274371824, 4166492978, Spawn) + AddConversationOption(conversation, "I understand. Where do we go from here?", "dlg_56_3") + AddConversationOption(conversation, "I thought you were a seeker of the truth?") + StartConversation(conversation, NPC, Spawn, "It is in our best interest as a race, and as citizens of this city, to keep this information to ourselves. Velderoth may indirectly cause more damage to our city if news of this gets out. The high men of Qeynos cannot have their names soiled by the actions of this individual, if anyone asks of your public encounter with Velderoth you are to claim that he was an illusion of your own creation, that the Soul Spike and he were merely meant as entertainment. Say no more of this to anyone.") +end + +function dlg_56_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/maareona_ludimintium/qey_village02/quests/maareona/maareona035.mp3", "", "", 1033522094, 3989983909, Spawn) + AddConversationOption(conversation, "I understand.", "dlg_56_4") + StartConversation(conversation, NPC, Spawn, "I have a friend in the Peat Bog. He is the one person you will tell about this incident. He will do with this information what he must. After you have told him do not speak to him of it again.") +end + +function dlg_56_4(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/maareona_ludimintium/qey_village02/quests/maareona/maareona036.mp3", "", "", 301046375, 3178279586, Spawn) + AddConversationOption(conversation, "I will find him.", "OfferDeliveringNews") + StartConversation(conversation, NPC, Spawn, "Good. His name is Rujiarmo Oolamein. He will have work to give you, I am certain.") +end + +function OfferDeliveringNews(NPC, Spawn) + OfferQuest(NPC, Spawn, DELIVERING_NEWS) +end \ No newline at end of file diff --git a/server/SpawnScripts/Starcrest/Ommanoden.lua b/server/SpawnScripts/Starcrest/Ommanoden.lua new file mode 100644 index 000000000..2dae44ce5 --- /dev/null +++ b/server/SpawnScripts/Starcrest/Ommanoden.lua @@ -0,0 +1,12 @@ +--[[ + Script Name : SpawnScripts/Starcrest/Ommanoden.lua + Script Purpose : Ommanoden + Script Author : John Adams + Script Date : 2008.09.23 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + PlayFlavor(NPC, "voiceover/english/scribe_ommanoden/qey_village02/100_scribe_ommanoden_multhail1_becd50b2.mp3", "Can't you see I'm busy organizing my collections of wisdom? I've no time for chatting. Leave me alone!", "", 3010394589, 1905118172, Spawn) +end \ No newline at end of file diff --git a/server/SpawnScripts/Starcrest/OolimeminosoPindiliana.lua b/server/SpawnScripts/Starcrest/OolimeminosoPindiliana.lua new file mode 100644 index 000000000..f07d5aaa0 --- /dev/null +++ b/server/SpawnScripts/Starcrest/OolimeminosoPindiliana.lua @@ -0,0 +1,23 @@ +--[[ + Script Name : SpawnScripts/Starcrest/OolimeminosoPindiliana.lua + Script Purpose : Oolimeminoso Pindiliana + Script Author : John Adams + Script Date : 2008.09.23 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +function spawn(NPC) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_1_1008.mp3", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Ok.") + StartConversation(conversation, NPC, Spawn, "Though one sees many things, the unseen are the hardest to find!") +end \ No newline at end of file diff --git a/server/SpawnScripts/Starcrest/Oomitelmora.lua b/server/SpawnScripts/Starcrest/Oomitelmora.lua new file mode 100644 index 000000000..c482f3212 --- /dev/null +++ b/server/SpawnScripts/Starcrest/Oomitelmora.lua @@ -0,0 +1,24 @@ +--[[ + Script Name : SpawnScripts/Starcrest/Oomitelmora.lua + Script Purpose : Oomitelmora + Script Author : John Adams + Script Date : 2008.09.23 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +function spawn(NPC) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/optional4/oomitelmora/oomitelmora-mp3_64.mp3", "", "", 354169301, 3490300460, Spawn) + AddConversationOption(conversation, "King's field discussions do not concern me.") + StartConversation(conversation, NPC, Spawn, "'Tis not just the victory I enjoy. To see this one writhe in frustration is highly amusing.") +end + diff --git a/server/SpawnScripts/Starcrest/PiersIsplock.lua b/server/SpawnScripts/Starcrest/PiersIsplock.lua new file mode 100644 index 000000000..16c35b524 --- /dev/null +++ b/server/SpawnScripts/Starcrest/PiersIsplock.lua @@ -0,0 +1,22 @@ +--[[ + Script Name : SpawnScripts/Starcrest/PiersIsplock.lua + Script Purpose : Piers Isplock + Script Author : John Adams + Script Date : 2008.09.23 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + choice = math.random(1,4) + + if choice == 1 then + PlayFlavor(NPC, "voiceover/english/human_eco_good_1/ft/service/merchant/human_merchant_service_good_1_hail_gm_e4fa2bd8.mp3", "Confound it! Where did I put that ledger? It must be around here somewhere!", "confused", 983188064, 3043413352, Spawn) + elseif choice == 2 then + PlayFlavor(NPC, "voiceover/english/human_eco_good_1/ft/service/merchant/human_merchant_service_good_1_hail_gm_45d92a75.mp3", "Welcome! What can I help you with?", "bow", 892528408, 239693863, Spawn) + elseif choice == 3 then + PlayFlavor(NPC, "voiceover/english/human_eco_good_1/ft/service/merchant/human_merchant_service_good_1_hail_gm_ae84abf9.mp3", "Go on, take a look at the stock. You'll never beat this price in the city. I guarantee it!", "wink", 903813734, 2512856176, Spawn) + elseif choice == 4 then + PlayFlavor(NPC, "voiceover/english/human_eco_good_1/ft/service/merchant/human_merchant_service_good_1_hail_gm_24322c5d.mp3", "Greetings, friend traveler! We have the finest supplies to fill your adventuring needs.", "smile", 2541554579, 2951095822, Spawn) + end +end \ No newline at end of file diff --git a/server/SpawnScripts/Starcrest/ProprietorBlagard.lua b/server/SpawnScripts/Starcrest/ProprietorBlagard.lua new file mode 100644 index 000000000..0450f4e26 --- /dev/null +++ b/server/SpawnScripts/Starcrest/ProprietorBlagard.lua @@ -0,0 +1,23 @@ +--[[ + Script Name : SpawnScripts/Starcrest/ProprietorBlagard.lua + Script Purpose : Proprietor Blagard + Script Author : John Adams + Script Date : 2008.09.23 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +function spawn(NPC) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/proprietor_blagard/qey_village02/blagard000.mp3", "", "", 3622450968, 3253656744, Spawn) + AddConversationOption(conversation, "No thanks") + StartConversation(conversation, NPC, Spawn, "Step up to the bar, my friend. Never has coin been better spent.") +end \ No newline at end of file diff --git a/server/SpawnScripts/Starcrest/RedSunBerries.lua b/server/SpawnScripts/Starcrest/RedSunBerries.lua new file mode 100644 index 000000000..e7a344c35 --- /dev/null +++ b/server/SpawnScripts/Starcrest/RedSunBerries.lua @@ -0,0 +1,19 @@ +--[[ + Script Name : SpawnScripts/Starcrest/RedSunBerries.lua + Script Author : Jabantiz + Script Date : 2018.06.14 11:06:05 + Script Purpose : + : +--]] + +-- Quest ID's +local MEETING_WITH_CAYAN = 316 + +function spawn(NPC) + SetRequiredQuest(NPC, MEETING_WITH_CAYAN, 2) +end + +function respawn(NPC) + spawn(NPC) +end + diff --git a/server/SpawnScripts/Starcrest/Renea.lua b/server/SpawnScripts/Starcrest/Renea.lua new file mode 100644 index 000000000..1b58328e7 --- /dev/null +++ b/server/SpawnScripts/Starcrest/Renea.lua @@ -0,0 +1,29 @@ +--[[ + Script Name : SpawnScripts/Starcrest/Renea.lua + Script Purpose : Renea + Script Author : Scatman + Script Date : 2009.09.25 + Script Notes : +--]] + +dofile("SpawnScripts/Generic/GenericGuardVoiceOvers.lua") + +function spawn(NPC) + SetPlayerProximityFunction(NPC, 10, "InRange", "LeaveRange") +end + +function respawn(NPC) + spawn(NPC) +end + +function InRange(NPC, Spawn) + CheckFaction(NPC, Spawn, "Qeynos") +end + +function LeaveRange(NPC, Spawn) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + GenericGuardHail(NPC, Spawn) +end \ No newline at end of file diff --git a/server/SpawnScripts/Starcrest/ScholarObidudyn.lua b/server/SpawnScripts/Starcrest/ScholarObidudyn.lua new file mode 100644 index 000000000..8f8920385 --- /dev/null +++ b/server/SpawnScripts/Starcrest/ScholarObidudyn.lua @@ -0,0 +1,12 @@ +--[[ + Script Name : SpawnScripts/Starcrest/ScholarObidudyn.lua + Script Purpose : Scholar Obidudyn + Script Author : John Adams + Script Date : 2008.09.23 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + PlayFlavor(NPC, "voiceover/english/scholar_obidudyn/qey_village02/100_erudite_scholar_callout_9435d1c5.mp3", "Oh, a moment of peace. What I'd give for one moment without little human girls, felines ... or inquisitive adventurers... What do you want? Unless you're of any use, get out of my sight.", "", 3858056740, 933386302, Spawn) +end \ No newline at end of file diff --git a/server/SpawnScripts/Starcrest/TagganBrookrich.lua b/server/SpawnScripts/Starcrest/TagganBrookrich.lua new file mode 100644 index 000000000..d2f578aa0 --- /dev/null +++ b/server/SpawnScripts/Starcrest/TagganBrookrich.lua @@ -0,0 +1,26 @@ +--[[ + Script Name : SpawnScripts/Starcrest/TagganBrookrich.lua + Script Purpose : Taggan Brookrich + Script Author : John Adams + Script Date : 2008.09.23 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +function spawn(NPC) + SetPlayerProximityFunction(NPC, 10, "InRange", "LeaveRange") +end + +function respawn(NPC) + Spawn(NPC) +end + +function InRange(NPC, Spawn) + PlayFlavor(NPC, "voiceover/english/taggan_brookrich/qey_village02/100_human_spectator_callout_85964bfe.mp3", "Can you believe Vandis? You'd think he'd want help considering the mess he's in. But, ooohhh no... He's too stubborn to listen to any advice. When will he learn that he can't win without help?", "confused", 3426132034, 1351118898, Spawn) +end + +function LeaveRange(NPC, Spawn) +end + +function hailed(NPC, Spawn) + PlayFlavor(NPC, "voiceover/english/taggan_brookrich/qey_village02/100_human_spectator_multhail1_8a7fa75d.mp3", "Sorry, friend. I don't think you can help with my cunning scheme.", "", 3665262967, 2636803513, Spawn) +end \ No newline at end of file diff --git a/server/SpawnScripts/Starcrest/Tanaira.lua b/server/SpawnScripts/Starcrest/Tanaira.lua new file mode 100644 index 000000000..3a7171a73 --- /dev/null +++ b/server/SpawnScripts/Starcrest/Tanaira.lua @@ -0,0 +1,22 @@ +--[[ + Script Name : SpawnScripts/Starcrest/Tanaira.lua + Script Purpose : Tanaira + Script Author : John Adams + Script Date : 2008.09.23 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + choice = math.random(1,4) + + if choice == 1 then + PlayFlavor(NPC, "", "Oops! Sorry! I thought you were someone else. Please, be on your way now.", "", 1689589577, 4560189, Spawn) + elseif choice == 2 then + PlayFlavor(NPC, "voiceover/english/human_eco_good_1/ft/service/baker/human_baker_service_good_1_hail_gf_3d1ca473.mp3", "Tell me, do you prefer Halfling or Elven cuisine? I myself have a hard time deciding between the two.", "confused", 3151047462, 2904038035, Spawn) + elseif choice == 3 then + PlayFlavor(NPC, "voiceover/english/human_eco_good_1/ft/service/baker/human_baker_service_good_1_hail_gf_cca9cdef.mp3", "Welcome friend, welcome. I hope you brought your appetite with you!", "wink", 488782681, 166399094, Spawn) + elseif choice == 4 then + PlayFlavor(NPC, "voiceover/english/human_eco_good_1/ft/service/baker/human_baker_service_good_1_hail_gf_9db280de.mp3", "I love the smell of fresh bread in the oven!", "sigh", 1068415951, 2036199467, Spawn) + end +end \ No newline at end of file diff --git a/server/SpawnScripts/Starcrest/Torbin.lua b/server/SpawnScripts/Starcrest/Torbin.lua new file mode 100644 index 000000000..26ff20f1c --- /dev/null +++ b/server/SpawnScripts/Starcrest/Torbin.lua @@ -0,0 +1,29 @@ +--[[ + Script Name : SpawnScripts/Starcrest/Torbin.lua + Script Purpose : Torbin + Script Author : Scatman + Script Date : 2009.09.25 + Script Notes : +--]] + +dofile("SpawnScripts/Generic/GenericGuardVoiceOvers.lua") + +function spawn(NPC) + SetPlayerProximityFunction(NPC, 10, "InRange", "LeaveRange") +end + +function respawn(NPC) + spawn(NPC) +end + +function InRange(NPC, Spawn) + CheckFaction(NPC, Spawn, "Qeynos") +end + +function LeaveRange(NPC, Spawn) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + GenericGuardHail(NPC, Spawn) +end \ No newline at end of file diff --git a/server/SpawnScripts/Starcrest/Trinoonae.lua b/server/SpawnScripts/Starcrest/Trinoonae.lua new file mode 100644 index 000000000..671c9754f --- /dev/null +++ b/server/SpawnScripts/Starcrest/Trinoonae.lua @@ -0,0 +1,29 @@ +--[[ + Script Name : SpawnScripts/Starcrest/Trinoonae.lua + Script Purpose : Trinoonae + Script Author : Scatman + Script Date : 2009.09.25 + Script Notes : +--]] + +dofile("SpawnScripts/Generic/GenericGuardVoiceOvers.lua") + +function spawn(NPC) + SetPlayerProximityFunction(NPC, 10, "InRange", "LeaveRange") +end + +function respawn(NPC) + spawn(NPC) +end + +function InRange(NPC, Spawn) + CheckFaction(NPC, Spawn, "Qeynos") +end + +function LeaveRange(NPC, Spawn) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + GenericGuardHail(NPC, Spawn) +end \ No newline at end of file diff --git a/server/SpawnScripts/Starcrest/Unuesh.lua b/server/SpawnScripts/Starcrest/Unuesh.lua new file mode 100644 index 000000000..fd93ea41a --- /dev/null +++ b/server/SpawnScripts/Starcrest/Unuesh.lua @@ -0,0 +1,20 @@ +--[[ + Script Name : SpawnScripts/Starcrest/Unuesh.lua + Script Purpose : Unuesh + Script Author : John Adams + Script Date : 2008.09.23 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + choice = math.random(1,3) + + if choice == 1 then + PlayFlavor(NPC, "voiceover/english/optional2/erudite_eco_good_2/ft/service/merchant/erudite_merchant_service_good_2_hail_gm_45d92a75.mp3", "Welcome! What can I help you with?", "bow", 4271285862, 1774320762, Spawn) + elseif choice == 2 then + PlayFlavor(NPC, "voiceover/english/optional2/erudite_eco_good_2/ft/service/merchant/erudite_merchant_service_good_2_hail_gm_24322c5d.mp3", "Greetings, friend traveler! We have the finest supplies to fill your adventuring needs.", "smile", 857840270, 941389485, Spawn) + elseif choice == 3 then + PlayFlavor(NPC, "voiceover/english/optional2/erudite_eco_good_2/ft/service/merchant/erudite_merchant_service_good_2_hail_gm_ae84abf9.mp3", "Go on, take a look at the stock. You'll never beat this price in the city. I guarantee it!", "wink", 2447200130, 2600666744, Spawn) + end +end \ No newline at end of file diff --git a/server/SpawnScripts/Starcrest/Vandis.lua b/server/SpawnScripts/Starcrest/Vandis.lua new file mode 100644 index 000000000..e17ddbdf6 --- /dev/null +++ b/server/SpawnScripts/Starcrest/Vandis.lua @@ -0,0 +1,23 @@ +--[[ + Script Name : SpawnScripts/Starcrest/Vandis.lua + Script Purpose : Vandis + Script Author : John Adams + Script Date : 2008.09.23 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +function spawn(NPC) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/vandis/qey_village02/vandis.mp3", "", "", 555689921, 1189263301, Spawn) + AddConversationOption(conversation, "I'm not going to say anything. I can see you are losing well enough on your own.") + StartConversation(conversation, NPC, Spawn, "Can't you see I'm in the middle of a game of King's Field? And no, you can't help!") +end \ No newline at end of file diff --git a/server/SpawnScripts/Starcrest/VelderothMalraen.lua b/server/SpawnScripts/Starcrest/VelderothMalraen.lua new file mode 100644 index 000000000..8a9f76c0b --- /dev/null +++ b/server/SpawnScripts/Starcrest/VelderothMalraen.lua @@ -0,0 +1,49 @@ +--[[ + Script Name : SpawnScripts/Starcrest/VelderothMalraen.lua + Script Purpose : Velderoth Malraen + Script Author : John Adams + Script Date : 2008.09.23 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +-- Quest ID's +local CONFRONTATION = 321 + +function spawn(NPC) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + if HasQuest(Spawn, CONFRONTATION) and GetQuestStep(Spawn, CONFRONTATION) == 3 then + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/velderoth_malraen/qey_village02/quests/velderoth/velderoth000.mp3", "", "", 602755801, 4204317404, Spawn) + AddConversationOption(conversation, "Believe it, heretic.", "dlg_55_3") + StartConversation(conversation, NPC, Spawn, "I cannot believe you would destroy such knowledge!") + end +end + +function dlg_55_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/velderoth_malraen/qey_village02/quests/velderoth/velderoth001.mp3", "", "", 4272504042, 2021431254, Spawn) + AddConversationOption(conversation, "We know that it was meant for you, Velderoth.", "dlg_55_4") + StartConversation(conversation, NPC, Spawn, "Hold your tongue, child. Insults will only serve to anger me.") +end + +function dlg_55_4(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/velderoth_malraen/qey_village02/quests/velderoth/velderoth002.mp3", "", "", 4026578070, 2833635069, Spawn) + StartConversation(conversation, NPC, Spawn, "Simpleton! If you don't seek knowledge then you are no Erudite! My power is greater than you know.") +end + +--[[ raw_conversations + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/velderoth_malraen/qey_village02/qst_velderoth_howcould_ea37cf7d.mp3", "NO!!! How could you do such a thing?", "", 4138921089, 741301826, Spawn) +--]] \ No newline at end of file diff --git a/server/SpawnScripts/Starcrest/Vondorinsarnoo.lua b/server/SpawnScripts/Starcrest/Vondorinsarnoo.lua new file mode 100644 index 000000000..77b2ad6f0 --- /dev/null +++ b/server/SpawnScripts/Starcrest/Vondorinsarnoo.lua @@ -0,0 +1,55 @@ +--[[ + Script Name : SpawnScripts/Starcrest/Vondorinsarnoo.lua + Script Purpose : Vondorinsarnoo + Script Author : John Adams + Script Date : 2008.09.23 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +-- Quest ID's +local SOBERING_REMEDY = 246 + +function spawn(NPC) + ProvidesQuest(NPC, SOBERING_REMEDY) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_2_1008.mp3", "", "", 0, 0, Spawn) + + if CanReceiveQuest(Spawn, SOBERING_REMEDY) then + AddConversationOption(conversation, "What's wrong with him? ", "dlg_59_1") + AddConversationOption(conversation, "Guess some people handle their liquor better than others. Good day!") + StartConversation(conversation, NPC, Spawn, "We are coping with the recent events... some in better ways than others. Take that poor drunk, Hubert, across the way for instance...") + elseif HasQuest(Spawn, SOBERING_REMEDY) and GetQuestStep(Spawn, SOBERING_REMEDY) == 4 then + SetStepComplete(Spawn, SOBERING_REMEDY, 4) + Say(NPC, "Sorry we don't have the turn in test") + end +end + +function dlg_59_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "I'll help you, seems to be a worthy cause.", "OfferQuestSoberingRemedy") + AddConversationOption(conversation, "Best of luck to you. I'll be off to pursue other interests.") + StartConversation(conversation, NPC, Spawn, "His faith is shaken, and he's suffered insurmountable hardships and loss. I could help this poor soul, but first, I must remove him from his drunken stupor.") +end + +function OfferQuestSoberingRemedy(NPC, Spawn) + OfferQuest(NPC, Spawn, SOBERING_REMEDY) +end + +function dlg_59_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "I'll be back soon.") + StartConversation(conversation, NPC, Spawn, "He'll speak more clearly with that rotgut out of his stomach.") +end \ No newline at end of file diff --git a/server/SpawnScripts/Starcrest/ZentomaronCroosinaden.lua b/server/SpawnScripts/Starcrest/ZentomaronCroosinaden.lua new file mode 100644 index 000000000..4fe94f4dc --- /dev/null +++ b/server/SpawnScripts/Starcrest/ZentomaronCroosinaden.lua @@ -0,0 +1,12 @@ +--[[ + Script Name : SpawnScripts/Starcrest/ZentomaronCroosinaden.lua + Script Purpose : Zentomaron Croosinaden + Script Author : John Adams + Script Date : 2008.09.23 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + PlayFlavor(NPC, "voiceover/english/optional4/zentomaron_croosinaden/zentomaron_multhail1-mp3.mp3", "Hmm ... you appear no more knowledgeable than this silly human we've collared. Oh well.", "", 4235005010, 394337117, Spawn) +end \ No newline at end of file diff --git a/server/SpawnScripts/Starcrest/ZinunLoospakina.lua b/server/SpawnScripts/Starcrest/ZinunLoospakina.lua new file mode 100644 index 000000000..7438fa63a --- /dev/null +++ b/server/SpawnScripts/Starcrest/ZinunLoospakina.lua @@ -0,0 +1,20 @@ +--[[ + Script Name : SpawnScripts/Starcrest/ZinunLoospakina.lua + Script Purpose : Zinun Loospakina + Script Author : John Adams + Script Date : 2008.09.23 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + choice = math.random(1,3) + + if choice == 1 then + PlayFlavor(NPC, "voiceover/english/optional2/erudite_eco_good_2/ft/service/merchant/erudite_merchant_service_good_2_hail_gm_45d92a75.mp3", "Welcome! What can I help you with?", "bow", 4271285862, 1774320762, Spawn) + elseif choice == 2 then + PlayFlavor(NPC, "voiceover/english/optional2/erudite_eco_good_2/ft/service/merchant/erudite_merchant_service_good_2_hail_gm_24322c5d.mp3", "Greetings, friend traveler! We have the finest supplies to fill your adventuring needs.", "smile", 857840270, 941389485, Spawn) + elseif choice == 3 then + PlayFlavor(NPC, "voiceover/english/optional2/erudite_eco_good_2/ft/service/merchant/erudite_merchant_service_good_2_hail_gm_ae84abf9.mp3", "Go on, take a look at the stock. You'll never beat this price in the city. I guarantee it!", "wink", 2447200130, 2600666744, Spawn) + end +end \ No newline at end of file diff --git a/server/SpawnScripts/Starcrest/questclimbingbenchmaareonacayan.lua b/server/SpawnScripts/Starcrest/questclimbingbenchmaareonacayan.lua new file mode 100644 index 000000000..3c2120648 --- /dev/null +++ b/server/SpawnScripts/Starcrest/questclimbingbenchmaareonacayan.lua @@ -0,0 +1,21 @@ +--[[ + Script Name : SpawnScripts/Starcrest/questclimbingbenchmaareonacayan.lua + Script Author : Jabantiz + Script Date : 2018.06.14 08:06:20 + Script Purpose : + : +--]] + +function spawn(NPC) +end + +function respawn(NPC) + spawn(NPC) +end + +function casted_on(NPC, Spawn, Message) + Say(Spawn, Message) + if Message == "Climb the Bench" then + SetPosition(Spawn, 762.11, -20.38, 315.01, 68.11) + end +end \ No newline at end of file diff --git a/server/SpawnScripts/Starcrest/questcrawlingbushmaareonacayan.lua b/server/SpawnScripts/Starcrest/questcrawlingbushmaareonacayan.lua new file mode 100644 index 000000000..3dd61e4f7 --- /dev/null +++ b/server/SpawnScripts/Starcrest/questcrawlingbushmaareonacayan.lua @@ -0,0 +1,21 @@ +--[[ + Script Name : SpawnScripts/Starcrest/questcrawlingbushmaareonacayan.lua + Script Author : Jabantiz + Script Date : 2018.06.14 11:06:31 + Script Purpose : + : +--]] + +function spawn(NPC) +end + +function respawn(NPC) + spawn(NPC) +end + +function casted_on(NPC, Spawn, Message) + if Message == "Pull Yourself Through the Foliage" then + SetPosition(Spawn, 744.97, -19.16, 309.54, 49.11) + end +end + diff --git a/server/SpawnScripts/Starcrest/questrelicboxmaareona.lua b/server/SpawnScripts/Starcrest/questrelicboxmaareona.lua new file mode 100644 index 000000000..6823f28ed --- /dev/null +++ b/server/SpawnScripts/Starcrest/questrelicboxmaareona.lua @@ -0,0 +1,46 @@ +--[[ + Script Name : SpawnScripts/Starcrest/questrelicboxmaareona.lua + Script Purpose : + Script Author : Jabantiz + Script Date : 6/15/2018 + Script Notes : +--]] + +-- Quest ID's +local HIDDEN_TREASURES = 320 + +-- Item ID's +local SMALL_METAL_BOX_AND_PAPER = 12950 + +function spawn(NPC) + SetRequiredQuest(NPC, HIDDEN_TREASURES, 1) +end + +function respawn(NPC) + spawn(NPC) +end + +function casted_on(NPC, Spawn, Message) + if Message == "Inspect Box" and HasQuest(Spawn, HIDDEN_TREASURES) and GetQuestStep(Spawn, HIDDEN_TREASURES) == 1 then + local con = CreateConversation() + + AddConversationOption(con, "Open the box.", "OpenBox") + StartDialogConversation(con, 1, NPC, Spawn, "This box does not appear to be very old. It would be impossible to pull through the grate, but you may be able to open it and take what is inside.") + end +end + +function OpenBox(NPC, Spawn) + local con = CreateConversation() + + AddConversationOption(con, "Take the box and paper.", "TakeBox") + StartDialogConversation(con, 1, NPC, Spawn, "Inside the box there is a smaller, metal box. There is also a piece of paper that is now soaking. It would be easy to pull both of these objects through the grate.") +end + +function TakeBox(NPC, Spawn) + SummonItem(Spawn, SMALL_METAL_BOX_AND_PAPER, 1) + SetStepComplete(Spawn, HIDDEN_TREASURES, 1) + local con = CreateConversation() + + AddConversationOption(con, "Leave the large box alone.", "CloseConversation") + StartDialogConversation(con, 1, NPC, Spawn, "Nothing left in the larger box.") +end \ No newline at end of file diff --git a/server/SpawnScripts/Starcrest/soulspike.lua b/server/SpawnScripts/Starcrest/soulspike.lua new file mode 100644 index 000000000..1b02a62b0 --- /dev/null +++ b/server/SpawnScripts/Starcrest/soulspike.lua @@ -0,0 +1,42 @@ +--[[ + Script Name : SpawnScripts/Starcrest/soulspike.lua + Script Purpose : + Script Author : Jabantiz + Script Date : 6/15/2018 + Script Notes : +--]] + +-- Quest ID's +local CONFRONTATION = 321 + +-- Item ID's +local NULLIFICATION_STONE = 10087 + +function spawn(NPC) +end + +function respawn(NPC) + spawn(NPC) +end + +function casted_on(NPC, Spawn, Message) + if HasItem(Spawn, NULLIFICATION_STONE) and HasQuest(Spawn, CONFRONTATION) and GetQuestStep(Spawn, CONFRONTATION) == 2 then + while HasItem(Spawn, NULLIFICATION_STONE, 1) do + RemoveItem(Spawn, NULLIFICATION_STONE) + end + + SetStepComplete(Spawn, CONFRONTATION, 2) + + local velderoth = GetSpawn(Spawn, 2340062) + if velderoth ~= nil then + PlayFlavor(velderoth, "voiceover/english/tutorial_revamp/velderoth_malraen/qey_village02/qst_velderoth_howcould_ea37cf7d.mp3", "NO!!! How could you do such a thing?", "", 4138921089, 741301826, Spawn) + end + + local stand = GetSpawn(Spawn, 2340126) + if stand ~= nil then + Despawn(stand) + end + + Despawn(NPC) + end +end \ No newline at end of file diff --git a/server/SpawnScripts/Starcrest/soulspikerack1.lua b/server/SpawnScripts/Starcrest/soulspikerack1.lua new file mode 100644 index 000000000..2874a0c3d --- /dev/null +++ b/server/SpawnScripts/Starcrest/soulspikerack1.lua @@ -0,0 +1,35 @@ +--[[ + Script Name : + Script Purpose : + Script Author : Jabantiz + Script Date : 6/15/2018 + Script Notes : +--]] + +-- Quest ID's +local CONFRONTATION = 321 + +-- Item ID's +local SOUL_SPIKE = 13134 + +function spawn(NPC) +end + +function respawn(NPC) + spawn(NPC) +end + +function casted_on(NPC, Spawn, Message) + if HasItem(Spawn, SOUL_SPIKE) and HasQuest(Spawn, CONFRONTATION) and GetQuestStep(Spawn, CONFRONTATION) == 2 then + local heading = GetHeading(NPC) + 180 + if heading >= 360 then + heading = heading - 360 + end + + SpawnMob(GetZone(Spawn), 2340127, false, GetX(NPC), GetY(NPC) + 0.69, GetZ(NPC), heading) + + while HasItem(Spawn, SOUL_SPIKE, 1) do + RemoveItem(Spawn, SOUL_SPIKE) + end + end +end \ No newline at end of file diff --git a/server/SpawnScripts/Steamfont/SisterSam.lua b/server/SpawnScripts/Steamfont/SisterSam.lua new file mode 100644 index 000000000..67d869af8 --- /dev/null +++ b/server/SpawnScripts/Steamfont/SisterSam.lua @@ -0,0 +1,8 @@ +--[[ + Script Name : SpawnScripts/Steamfont/SisterSam.lua + Script Author : jakejp + Script Date : 2018.12.26 06:12:59 + Script Purpose : + : +--]] + diff --git a/server/SpawnScripts/Stonestair/FeleinHerbs.lua b/server/SpawnScripts/Stonestair/FeleinHerbs.lua new file mode 100644 index 000000000..863355fe8 --- /dev/null +++ b/server/SpawnScripts/Stonestair/FeleinHerbs.lua @@ -0,0 +1,22 @@ +--[[ + Script Name : SpawnScripts/Stonestair/FeleinHerbs.lua + Script Purpose : + Script Author : Jabantiz + Script Date : 6/22/2018 + Script Notes : +--]] + +-- Quest ID's +local ERUDITE_ALCHEMY = 355 + +function spawn(NPC) + SetRequiredQuest(NPC, ERUDITE_ALCHEMY, 1) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) +end + diff --git a/server/SpawnScripts/Stonestair/SevriIlBethod.lua b/server/SpawnScripts/Stonestair/SevriIlBethod.lua new file mode 100644 index 000000000..49afaca44 --- /dev/null +++ b/server/SpawnScripts/Stonestair/SevriIlBethod.lua @@ -0,0 +1,146 @@ +--[[ + Script Name : SpawnScripts/StonestairByway/SevriIlBethod.lua + Script Purpose : Sevri Il'Bethod + Script Author : Jabantiz + Script Date : 2018.06.22 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +local TWEEZING_KERRA = 356 +local INCANTATION_ORATION = 357 +local ABOLISHING_CURIOUSITY = 358 + +function spawn(NPC) + ProvidesQuest(NPC, INCANTATION_ORATION) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + if HasQuest(Spawn, TWEEZING_KERRA) and GetQuestStep(Spawn, TWEEZING_KERRA) == 1 then + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/sevri_il_bethod/fprt_hood02/sevri_ilbethod001.mp3", "", "", 2840183078, 2969997848, Spawn) + AddConversationOption(conversation, "You are correct. Vess asked me to give you this mixture.", "dlg_29_1") + StartConversation(conversation, NPC, Spawn, "Oh, did Vess send you? He told me that he'd be sending someone promising along shortly. You seem to meet that criteria.") + elseif (HasQuest(Spawn, TWEEZING_KERRA) and GetQuestStep(Spawn, TWEEZING_KERRA) == 3) or CanReceiveQuest(Spawn, INCANTATION_ORATION) then + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/sevri_il_bethod/fprt_hood02/sevri_ilbethod008.mp3", "", "", 1767926562, 4023860365, Spawn) + AddConversationOption(conversation, "Hey... you aren't allergic, are you?", "dlg_30_1") + StartConversation(conversation, NPC, Spawn, "Achoo! Blast. I hate this dreaded cat fur. It's all over!") + elseif HasQuest(Spawn, ABOLISHING_CURIOUSITY) and GetQuestStep(Spawn, ABOLISHING_CURIOUSITY) == 1 then + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/sevri_il_bethod/fprt_hood02/sevri_ilbethod013.mp3", "", "", 1502950619, 3498385228, Spawn) + AddConversationOption(conversation, "Aye, he did.", "dlg_37_1") + StartConversation(conversation, NPC, Spawn, "So, Vess taught you the chant then?") + else + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/sevri_il_bethod/fprt_hood02/quest_newbie_erudite_sevri_no_speak_f6ea55bb.mp3", "Please, I don't have anything for you right now.", "", 3441706534, 2672842670, Spawn) + end +end + +function dlg_29_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/sevri_il_bethod/fprt_hood02/sevri_ilbethod002.mp3", "", "", 3354799610, 364441857, Spawn) + AddConversationOption(conversation, "That's funny, he didn't mention it.", "dlg_29_2") + StartConversation(conversation, NPC, Spawn, "Splendid! I take it you are the one that gathered these seeds? Vess has many astounding qualities, but his eyesight is not among those. He often fumbles mundane tasks like correctly identifying spell components.") +end + +function dlg_29_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/sevri_il_bethod/fprt_hood02/sevri_ilbethod003.mp3", "", "", 148598238, 1216758418, Spawn) + AddConversationOption(conversation, "Not to worry. No one will find out from me.", "dlg_29_3") + AddConversationOption(conversation, "I can't promise that my lips would stay sealed for enough coin, but I doubt anyone will ask.") + StartConversation(conversation, NPC, Spawn, "No. He wouldn't. We do not admit weakness here. I would ask that you keep that bit of information to yourself as well.") +end + +function dlg_29_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/sevri_il_bethod/fprt_hood02/sevri_ilbethod004.mp3", "", "", 4204901363, 3185230293, Spawn) + AddConversationOption(conversation, "That's the second time I've heard about this. Who is this brotherhood?", "dlg_29_4") + StartConversation(conversation, NPC, Spawn, "May Cazic reject your soul should you reveal such information to the wrong party. We were fractured once before. The brotherhood we seek to protect must look after itself.") +end + +function dlg_29_4(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/sevri_il_bethod/fprt_hood02/sevri_ilbethod005.mp3", "", "", 3118209610, 2540852917, Spawn) + AddConversationOption(conversation, "I've got it. Loose lips sink ships.", "dlg_29_5") + StartConversation(conversation, NPC, Spawn, "We are known to each other as the Abbatoirs. No one else knows of our existence. We prefer it to remain so, and will take steps to ensure that it does. I hope you catch my meaning.") +end + +function dlg_29_5(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/sevri_il_bethod/fprt_hood02/sevri_ilbethod006.mp3", "", "", 3867537921, 1281338132, Spawn) + AddConversationOption(conversation, "I'll help you, but why the problem? There's kerra hair all over.", "dlg_29_6") + AddConversationOption(conversation, "I don't think so. I'm done for now.") + StartConversation(conversation, NPC, Spawn, "You do learn quickly. Now, in addition to what you brought me I have need of kerra hair for this process. I would gather it myself, but it is best done by someone new to the area.") +end + +function dlg_29_6(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + SetStepComplete(Spawn, TWEEZING_KERRA, 1) + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/sevri_il_bethod/fprt_hood02/sevri_ilbethod007.mp3", "", "", 2694294264, 2914273569, Spawn) + AddConversationOption(conversation, "I'll return with your fur.") + StartConversation(conversation, NPC, Spawn, "It must be taken directly from the kerra. Here, let me give you a small pair of silver tweezers. Use the tweezers to take a bit of hair from a few kerra, then bring them back to me.") +end + +function dlg_30_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/sevri_il_bethod/fprt_hood02/sevri_ilbethod009.mp3", "", "", 1600845257, 1811343873, Spawn) + AddConversationOption(conversation, "Indeed it would be.", "dlg_30_2") + StartConversation(conversation, NPC, Spawn, "Nonsense. Just a bit drifted up my nose. It would be hard to live here if one were allergic.") +end + +function dlg_30_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/sevri_il_bethod/fprt_hood02/sevri_ilbethod010.mp3", "", "", 1523234099, 1835837683, Spawn) + AddConversationOption(conversation, "Yes, here's the fur you requested.", "dlg_30_3") + StartConversation(conversation, NPC, Spawn, "But let's talk about you. Like... did you bring back the fur?") +end + +function dlg_30_3(NPC, Spawn) + SetStepComplete(Spawn, TWEEZING_KERRA, 3) + OfferQuest(NPC, Spawn, INCANTATION_ORATION) +end + +function dlg_37_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/sevri_il_bethod/fprt_hood02/sevri_ilbethod014.mp3", "", "", 2329555346, 2187265522, Spawn) + AddConversationOption(conversation, "Sometimes you just need someone who can get the job done.", "dlg_37_2") + StartConversation(conversation, NPC, Spawn, "Very good. I must say, I was unsure that you would be able to assist us when he mentioned you. Now I am quite happy with your progress.") +end + +function dlg_37_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + SetStepComplete(Spawn, ABOLISHING_CURIOUSITY, 1) + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/sevri_il_bethod/fprt_hood02/sevri_ilbethod015.mp3", "", "", 969330079, 2958205445, Spawn) + AddConversationOption(conversation, "I'll not disappoint.") + StartConversation(conversation, NPC, Spawn, "Correct. Here are the components. Be careful not to waste them. A lot of effort went into making this mixture.") +end + +--[[ raw_conversations + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/sevri_il_bethod/fprt_hood02/quest_newbie_erudite_sevri_no_speak_f6ea55bb.mp3", "Please, I don't have anything for you right now.", "", 3441706534, 2672842670, Spawn) +--]] + diff --git a/server/SpawnScripts/Stonestair/VessAlIshni.lua b/server/SpawnScripts/Stonestair/VessAlIshni.lua new file mode 100644 index 000000000..49e75ff03 --- /dev/null +++ b/server/SpawnScripts/Stonestair/VessAlIshni.lua @@ -0,0 +1,605 @@ +--[[ + Script Name : SpawnScripts/Stonestair/VessAlIshni.lua + Script Purpose : Vess Al'Ishni + Script Author : Jabantiz + Script Date : 6/22/2018 + Script Notes : +--]] + +-- Quest ID's +local ERUDITE_ALCHEMY = 355 +local TWEEZING_KERRA = 356 +local INCANTATION_ORATION = 357 +local ABOLISHING_CURIOUSITY = 358 +local ERUDITE_ADVENTURES = 359 + +function spawn(NPC) + ProvidesQuest(NPC, ERUDITE_ALCHEMY) + ProvidesQuest(NPC, TWEEZING_KERRA) + ProvidesQuest(NPC, ABOLISHING_CURIOUSITY) + ProvidesQuest(NPC, ERUDITE_ADVENTURES) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + local conversation = CreateConversation() + + + local result = false; + result = HandleQuest1Dialog(NPC, Spawn, conversation) + if not result then + result = HandleQuest2Dialog(NPC, Spawn, conversation) + end + + if not result then + result = HandleQuest3Dialog(NPC, Spawn, conversation) + end + + if not result then + result = HandleQuest4Dialog(NPC, Spawn, conversation) + end + + if not result then + result = HandleQuest5Dialog(NPC, Spawn, conversation) + end + + if not result then + Say(NPC, "Sorry this dialog was never collected.") + end +end + +function HandleQuest1Dialog(NPC, Spawn, conversation) + local ret = false + + if CanReceiveQuest(Spawn, ERUDITE_ALCHEMY) then + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/vesh_al_ishni/fprt_hood02/vesh_alishni001.mp3", "", "", 2148572556, 2411402347, Spawn) + AddConversationOption(conversation, "Very well, Vess. My name is " .. GetName(Spawn) .. ", but it seems as though you already know that.", "dlg_4_1") + StartConversation(conversation, NPC, Spawn, GetName(Spawn) .. ". So we finally meet. Please, allow me to introduce myself. I am Vess Al'Ishi, and I am pleased to make your acquaintence.") + ret = true + elseif HasQuest(Spawn, ERUDITE_ALCHEMY) and GetQuestStep(Spawn, ERUDITE_ALCHEMY) >= 1 and GetQuestStep(Spawn, ERUDITE_ALCHEMY) <= 2 then + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/vess_al_ishni/fprt_hood02/quest_newbie_erudite_vesh_stage_not_completed_6755a304.mp3", "Please return after you've completed what I asked.", "", 1425288537, 3156699857, Spawn) + ret = true + elseif HasQuest(Spawn, ERUDITE_ALCHEMY) and GetQuestStep(Spawn, ERUDITE_ALCHEMY) == 3 then + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/vesh_al_ishni/fprt_hood02/vesh_alishni014.mp3", "", "", 245696213, 2128891193, Spawn) + AddConversationOption(conversation, "It wasn't exactly the most arduous of tasks.", "dlg_27_1") + StartConversation(conversation, NPC, Spawn, "Ahh, I can smell the ground herbs on you! Well done indeed!") + ret = true + end + + return ret +end + +function HandleQuest2Dialog(NPC, Spawn, conversation) + local ret = false + + if CanReceiveQuest(Spawn, TWEEZING_KERRA) then + dlg_27_2(NPC, Spawn) + ret = true + elseif HasQuest(Spawn, TWEEZING_KERRA) then + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/vess_al_ishni/fprt_hood02/quest_newbie_erudite_vesh_stage_not_completed_6755a304.mp3", "Please return after you've completed what I asked.", "", 1425288537, 3156699857, Spawn) + ret = true + end + + return ret +end + +function HandleQuest3Dialog(NPC, Spawn, conversation) + local ret = false + + if HasQuest(Spawn, INCANTATION_ORATION) and GetQuestStep(Spawn, INCANTATION_ORATION) == 1 then + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/vess_al_ishni/fprt_hood02/vesh_alishni018.mp3", "", "", 356564578, 3157391878, Spawn) + AddConversationOption(conversation, "Yes, I did. She asked me to speak with you again.", "dlg_31_1") + StartConversation(conversation, NPC, Spawn, "So you spoke to Sevri, did you?") + ret = true + elseif HasQuest(Spawn, INCANTATION_ORATION) and GetQuestStep(Spawn, INCANTATION_ORATION) == 2 then + dlg_35_7(NPC, Spawn) + ret = true + elseif HasQuest(Spawn, INCANTATION_ORATION) then + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/vess_al_ishni/fprt_hood02/quest_newbie_erudite_vesh_stage_not_completed_6755a304.mp3", "Please return after you've completed what I asked.", "", 1425288537, 3156699857, Spawn) + ret = true + end + + return ret +end + +function HandleQuest4Dialog(NPC, Spawn, conversation) + local ret = false + + if CanReceiveQuest(Spawn, ABOLISHING_CURIOUSITY) then + dlg_35_46(NPC, Spawn) + ret = true + elseif HasQuest(Spawn, ABOLISHING_CURIOUSITY) and GetQuestStep(Spawn, ABOLISHING_CURIOUSITY) == 3 then + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/vess_al_ishni/fprt_hood02/vesh_alishni046.mp3", "", "", 3328863454, 1820625790, Spawn) + AddConversationOption(conversation, "It is.", "dlg_39_1") + StartConversation(conversation, NPC, Spawn, "So, is the barrier enacted?") + ret = true + elseif HasQuest(Spawn, ABOLISHING_CURIOUSITY) then + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/vess_al_ishni/fprt_hood02/quest_newbie_erudite_vesh_stage_not_completed_6755a304.mp3", "Please return after you've completed what I asked.", "", 1425288537, 3156699857, Spawn) + ret = true + end + + return ret +end + +function HandleQuest5Dialog(NPC, Spawn, conversation) + local ret = false + + if CanReceiveQuest(Spawn, ERUDITE_ADVENTURES) then + dlg_39_3(NPC, Spawn) + ret = true + end + + return ret +end + +--------------------------------------------------------------------------------------------------------------------------------------------------------------- +--------------------------------------------------------------------------------------------------------------------------------------------------------------- +----------------------------------------------------------------- Quest 1 ------------------------------------------------------------------------------- +--------------------------------------------------------------------------------------------------------------------------------------------------------------- +--------------------------------------------------------------------------------------------------------------------------------------------------------------- + +function dlg_4_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/vesh_al_ishni/fprt_hood02/vesh_alishni002.mp3", "", "", 1610952532, 2061201835, Spawn) + AddConversationOption(conversation, "Look, I'm not sure I really need a job.", "dlg_4_2") + AddConversationOption(conversation, "Help you out? But what would you want me to do?", "dlg_4_4") + StartConversation(conversation, NPC, Spawn, "Indeed. I've had the opportunity to look in on your latest adventures, and I could appreciate your obvious talent. In fact, you may just be able to help me out.") +end + +function dlg_4_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/vesh_al_ishni/fprt_hood02/vesh_alishni003.mp3", "", "", 1196062600, 3691795630, Spawn) + AddConversationOption(conversation, "So you don't think much of the kerra, then?", "dlg_4_3") + AddConversationOption(conversation, "So tell me about this bit of work.", "dlg_4_4") + StartConversation(conversation, NPC, Spawn, "Oh, I wouldn't think of offering one of your caliber something so banal as a job. You didn't come here to wash the floor of my house, or sweep up the streets. No, that's what we have the kerra for.") +end + +function dlg_4_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/vesh_al_ishni/fprt_hood02/vesh_alishni004.mp3", "", "", 641685572, 3641147429, Spawn) + AddConversationOption(conversation, "Like that not-a-job, no doubt, yes? Why don't you tell me what you have in mind.", "dlg_4_4") + AddConversationOption(conversation, "I don't think I'm interested in other matters.") + StartConversation(conversation, NPC, Spawn, "None of us do, no. They are pets, trained house animals, not much better than the ratonga. In fact, they have fewer uses. But we should speak of more important matters.") +end + +function dlg_4_4(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/vesh_al_ishni/fprt_hood02/vesh_alishni005.mp3", "", "", 891412912, 134486760, Spawn) + AddConversationOption(conversation, "Do go on. I wouldn't expect you to open your house, as it were, to a stranger.", "dlg_4_5") + AddConversationOption(conversation, "Stop. I think I've heard this before. You want to get to 'trust' me first, by giving me a few things to do. Then you'll 'let' me become a member of your little gang so I can do the dangerous things.", "dlg_1_3") + StartConversation(conversation, NPC, Spawn, "We have something of an... organization... here in the Byway. I will not go into details until I am certain of your... character, shall we say?") +end + +function dlg_1_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/vesh_al_ishni/fprt_hood02/vesh_alishni006.mp3", "", "", 1098533707, 3355873785, Spawn) + AddConversationOption(conversation, "Perhaps.") + StartConversation(conversation, NPC, Spawn, "No. That's not what I mean at all. I'm sorry to hear you feel that way. Perhaps we can speak again later?") +end + +function dlg_4_5(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/vesh_al_ishni/fprt_hood02/vesh_alishni007.mp3", "", "", 1149376265, 3106062319, Spawn) + AddConversationOption(conversation, "Then I shall listen.", "dlg_6_6") + AddConversationOption(conversation, "I'm not sure I need the history lesson. What would you like me to accomplish?", "dlg_6_11") + StartConversation(conversation, NPC, Spawn, "Let me begin with a short story. I shall not be so long as to spend your time with foolishness, nor so short as to diminish its importance.") +end + +function dlg_6_6(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/vesh_al_ishni/fprt_hood02/vesh_alishni008.mp3", "", "", 1313191928, 12500296, Spawn) + AddConversationOption(conversation, "It makes sense. There aren't too many civilized places left.", "dlg_6_7") + StartConversation(conversation, NPC, Spawn, "Not long after the world was rent asunder, those of us remaining here on what is now D'Lere folded ourselves into the city of Freeport.") +end + +function dlg_6_7(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/vesh_al_ishni/fprt_hood02/vesh_alishni009.mp3", "", "", 4080582303, 2099986849, Spawn) + AddConversationOption(conversation, "If I were in his position, I might have considered dividing the erudites.", "dlg_6_8") + StartConversation(conversation, NPC, Spawn, "Lucan feared our gathered power. With our combined magical power and a firm footing inside the academy, we would have been a thorn in his side, and a force with which he would have to contend.") +end + +function dlg_6_8(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/vesh_al_ishni/fprt_hood02/vesh_alishni010.mp3", "", "", 1279930131, 1784422627, Spawn) + AddConversationOption(conversation, "No, I suspect that Lucan had more in store...", "dlg_6_9") + StartConversation(conversation, NPC, Spawn, "And indeed, that's what he did. A series of 'tests' were conducted, and those determined to be 'qualified' remained within the city. Those who were not were relocated here. However, there is more.") +end + +function dlg_6_9(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/vesh_al_ishni/fprt_hood02/vesh_alishni011.mp3", "", "", 3778512067, 3228444190, Spawn) + AddConversationOption(conversation, "Or what was left of them after Luclin.", "dlg_6_10") + StartConversation(conversation, NPC, Spawn, "Indeed. You will go far if you keep these lessons of leadership in mind in the future. Not only did he divide and humiliate those relegated to life here, but he foisted another abuse on us - the kerra.") +end + +function dlg_6_10(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/vesh_al_ishni/fprt_hood02/vesh_alishni012.mp3", "", "", 2014393836, 3746123557, Spawn) + AddConversationOption(conversation, "So what does the brotherhood wish from me?", "dlg_6_11") + StartConversation(conversation, NPC, Spawn, "Enough, let me tell you. They get into everything. And that brings us to now. We are not allowed to directly fight while under the protection of Freeport, so we must find a way to keep those curious beasts away from our experiments.") +end + +function dlg_6_11(NPC, Spawn) + OfferQuest(NPC, Spawn, ERUDITE_ALCHEMY) +end + +function dlg_27_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + SetStepComplete(Spawn, ERUDITE_ALCHEMY, 3) + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/vesh_al_ishni/fprt_hood02/vesh_alishni015.mp3", "", "", 743790253, 3747651989, Spawn) + AddConversationOption(conversation, "Pleased to be of assistance.", "dlg_27_2") + StartConversation(conversation, NPC, Spawn, "Nevertheless, it was very helpful.") +end + +--------------------------------------------------------------------------------------------------------------------------------------------------------------- +--------------------------------------------------------------------------------------------------------------------------------------------------------------- +----------------------------------------------------------------- Quest 2 ------------------------------------------------------------------------------- +--------------------------------------------------------------------------------------------------------------------------------------------------------------- +--------------------------------------------------------------------------------------------------------------------------------------------------------------- + +function dlg_27_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/vesh_al_ishni/fprt_hood02/vesh_alishni016.mp3", "", "", 2815059884, 70268562, Spawn) + AddConversationOption(conversation, "Where would I find her?", "dlg_28_1") + StartConversation(conversation, NPC, Spawn, "If you wouldn't mind, I'd like you to take this mixture to Sevri Il'Bethod. She can tell you what to do next.") +end + +function dlg_28_1(NPC, Spawn) + OfferQuest(NPC, Spawn, TWEEZING_KERRA) +end + +--------------------------------------------------------------------------------------------------------------------------------------------------------------- +--------------------------------------------------------------------------------------------------------------------------------------------------------------- +----------------------------------------------------------------- Quest 3 ------------------------------------------------------------------------------- +--------------------------------------------------------------------------------------------------------------------------------------------------------------- +--------------------------------------------------------------------------------------------------------------------------------------------------------------- + +function dlg_31_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + SetStepComplete(Spawn, INCANTATION_ORATION, 1) + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/vess_al_ishni/fprt_hood02/vesh_alishni019.mp3", "", "", 1648130503, 3545369186, Spawn) + AddConversationOption(conversation, "I'm not sure why I'm important in this.", "dlg_31_2") + AddConversationOption(conversation, "I'm glad I could lend my talent to the cause.") + StartConversation(conversation, NPC, Spawn, "I'd presumed she would. She and I have been working together for the Abbatoirs for some time now on a little project. You've allowed us to speed up the process quite a bit.") +end + +function dlg_31_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/vess_al_ishni/fprt_hood02/vesh_alishni020.mp3", "", "", 373760716, 2646229513, Spawn) + AddConversationOption(conversation, "Pardon. Did you say 'the Divergence'?", "dlg_32_3") + StartConversation(conversation, NPC, Spawn, "We've been reluctant to perform a few rites ourselves. While we've always been proficient with magic use, ever since the Divergence, we've been much more adept with its use since, but Sevri and I each possess slight... deficiencies.") +end + +function dlg_32_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/vess_al_ishni/fprt_hood02/vesh_alishni021.mp3", "", "", 2388767305, 3216040786, Spawn) + AddConversationOption(conversation, "What caused it?", "dlg_32_4") + AddConversationOption(conversation, "What did we look like before?", "dlg_32_5") + AddConversationOption(conversation, "Ahh, I don't need the details. Please continue.", "dlg_33_8") + StartConversation(conversation, NPC, Spawn, "Yes. Long ago, we looked much more like our human ancestors. Well before the world was wrent asunder, our appearance... nay, our state of being, changed. A sudden jump in evolution, if you will.") +end + +function dlg_32_4(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/vess_al_ishni/fprt_hood02/vesh_alishni022.mp3", "", "", 3684053157, 267543321, Spawn) + AddConversationOption(conversation, "What did it look like before?", "dlg_32_5") + AddConversationOption(conversation, "That's too bad, but please continue with what you were saying.", "dlg_33_8") + StartConversation(conversation, NPC, Spawn, "We do not speak of such things. In fact, much of that knowledge was lost with the seperation we've had with our home continent of Odus.") +end + +function dlg_32_5(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/vess_al_ishni/fprt_hood02/vesh_alishni023.mp3", "", "", 729095109, 2371703495, Spawn) + AddConversationOption(conversation, "What caused this?", "dlg_32_4") + AddConversationOption(conversation, "Interesting. Well, please continue with what you were going to say.", "dlg_33_8") + StartConversation(conversation, NPC, Spawn, "Much more human; dark-skinned with elongated skulls. We did not possess the runes on our skin, nor the ashen and exotic skin tones that we now have.") +end + +function dlg_33_5(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/vess_al_ishni/fprt_hood02/vesh_alishni022.mp3", "", "", 3684053157, 267543321, Spawn) + AddConversationOption(conversation, "What did it look like before?", "dlg_33_6") + AddConversationOption(conversation, "That's too bad, but please continue with what you were saying.", "dlg_33_8") + StartConversation(conversation, NPC, Spawn, "We do not speak of such things. In fact, much of that knowledge was lost with the seperation we've had with our home continent of Odus.") +end + +function dlg_33_8(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/vess_al_ishni/fprt_hood02/vesh_alishni024.mp3", "", "", 2742571672, 2630960239, Spawn) + AddConversationOption(conversation, "So you need someone who is suited to both?", "dlg_35_6") + StartConversation(conversation, NPC, Spawn, "Yes, where was I? Oh, yes, Sevri and I. She tends to be strong in the use of alchemical formulas and their creation, while I am more suited to incantations.") +end + +function dlg_35_6(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/vess_al_ishni/fprt_hood02/vesh_alishni025.mp3", "", "", 2121710260, 4126884347, Spawn) + AddConversationOption(conversation, "And this incantation will do?", "dlg_35_7") + StartConversation(conversation, NPC, Spawn, "Yes. You needn't be a spell caster yourself, merely one strong in the use of magic. We do not wish the incantation to fail, so neither of us has tried it.") +end + +function dlg_35_7(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/vess_al_ishni/fprt_hood02/vesh_alishni026.mp3", "", "", 2627797590, 2555516399, Spawn) + AddConversationOption(conversation, "Yes, I am.", "dlg_35_8") + AddConversationOption(conversation, "In a bit. Let me get my bearings first.") + StartConversation(conversation, NPC, Spawn, "We are sealing a small area against intrusion by the kerra. Are you ready to learn the chant?") +end + +function dlg_35_8(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/vess_al_ishni/fprt_hood02/vesh_alishni027.mp3", "", "", 3505819146, 188763690, Spawn) + AddConversationOption(conversation, "...", "dlg_35_9") + StartConversation(conversation, NPC, Spawn, "Alright. Repeat after me:") +end + +function dlg_35_9(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/vess_al_ishni/fprt_hood02/vesh_alishni028.mp3", "", "", 2919007431, 1124579757, Spawn) + AddConversationOption(conversation, "Kah!", "dlg_35_10") + AddConversationOption(conversation, "Rah!", "dlg_35_11") + AddConversationOption(conversation, "Ort!", "dlg_35_11") + StartConversation(conversation, NPC, Spawn, "Kah!") +end + +function dlg_35_10(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/vess_al_ishni/fprt_hood02/vesh_alishni029.mp3", "", "", 1143070588, 873896090, Spawn) + AddConversationOption(conversation, "Shee-jo!", "dlg_35_11") + AddConversationOption(conversation, "Shee-jah!", "dlg_35_23") + AddConversationOption(conversation, "Bless you!", "dlg_35_15") + StartConversation(conversation, NPC, Spawn, "Shee-jah!") +end + +function dlg_35_11(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/vess_al_ishni/fprt_hood02/vesh_alishni033.mp3", "", "", 3771835852, 356880814, Spawn) + AddConversationOption(conversation, "Alright.", "dlg_35_8") + StartConversation(conversation, NPC, Spawn, "No, that was incorrect. Again!") +end + +function dlg_35_15(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/vess_al_ishni/fprt_hood02/vesh_alishni034.mp3", "", "", 700726847, 2196280393, Spawn) + AddConversationOption(conversation, "Fine.", "dlg_35_8") + StartConversation(conversation, NPC, Spawn, "Are you trying to be funny? This is serious. Again! From the beginning!") +end + +function dlg_35_23(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/vess_al_ishni/fprt_hood02/vesh_alishni030.mp3", "", "", 3795991524, 1404953024, Spawn) + AddConversationOption(conversation, "Barakah!", "dlg_35_11") + AddConversationOption(conversation, "Veratu!", "dlg_35_11") + AddConversationOption(conversation, "Ver-ata!", "dlg_35_32") + StartConversation(conversation, NPC, Spawn, "Ver-ata!") +end + +function dlg_35_32(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/vess_al_ishni/fprt_hood02/vesh_alishni031.mp3", "", "", 133768448, 277366466, Spawn) + AddConversationOption(conversation, "Nik-su!", "dlg_35_38") + AddConversationOption(conversation, "Hi-yah!", "dlg_35_11") + AddConversationOption(conversation, "Ninjitsu!", "dlg_35_15") + StartConversation(conversation, NPC, Spawn, "Nik-su!") +end + +function dlg_35_38(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/vess_al_ishni/fprt_hood02/vesh_alishni032.mp3", "", "", 3316158990, 3680571955, Spawn) + AddConversationOption(conversation, "Jeg-raz!", "dlg_35_11") + AddConversationOption(conversation, "Gej-soont-hite!", "dlg_35_15") + AddConversationOption(conversation, "Gej-raz!", "dlg_35_39") + StartConversation(conversation, NPC, Spawn, "Gej-raz!") +end + +function dlg_35_39(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/vess_al_ishni/fprt_hood02/vesh_alishni035.mp3", "", "", 402169577, 2150827734, Spawn) + AddConversationOption(conversation, "Very well. Shall we begin?", "dlg_35_40") + StartConversation(conversation, NPC, Spawn, "Good. Now, repeat it back to me.") +end + +function dlg_35_40(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/vess_al_ishni/fprt_hood02/vesh_alishni036.mp3", "", "", 3555302534, 1640323835, Spawn) + AddConversationOption(conversation, "Rah!", "dlg_35_47") + AddConversationOption(conversation, "Kah!", "dlg_35_41") + AddConversationOption(conversation, "Shish-boom-bah!", "dlg_35_47") + StartConversation(conversation, NPC, Spawn, "What is the first word of the incantation?") +end + +function dlg_35_41(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/vess_al_ishni/fprt_hood02/vesh_alishni037.mp3", "", "", 2778449782, 209782941, Spawn) + AddConversationOption(conversation, "Shee-jah!", "dlg_35_42") + AddConversationOption(conversation, "Shee-joh!", "dlg_35_47") + AddConversationOption(conversation, "Skee-ball!", "dlg_35_47") + StartConversation(conversation, NPC, Spawn, "Good. The second?") +end + +function dlg_35_42(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/vess_al_ishni/fprt_hood02/vesh_alishni038.mp3", "", "", 365802047, 3239329702, Spawn) + AddConversationOption(conversation, "Vis-a-vis!", "dlg_35_47") + AddConversationOption(conversation, "Ver-ata!", "dlg_35_43") + AddConversationOption(conversation, "Vol-ume!", "dlg_35_47") + StartConversation(conversation, NPC, Spawn, "Well done. The third?") +end + +function dlg_35_43(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/vess_al_ishni/fprt_hood02/vesh_alishni039.mp3", "", "", 2799862347, 3798966954, Spawn) + AddConversationOption(conversation, "Nin-dn-toh!", "dlg_35_47") + AddConversationOption(conversation, "Na-ni!", "dlg_35_47") + AddConversationOption(conversation, "Nik-su!", "dlg_35_44") + StartConversation(conversation, NPC, Spawn, "I'm impressed. The fourth?") +end + +function dlg_35_44(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/vess_al_ishni/fprt_hood02/vesh_alishni040.mp3", "", "", 1907508477, 1925947266, Spawn) + AddConversationOption(conversation, "Gej-raz!", "dlg_35_45") + AddConversationOption(conversation, "Jur-gal!", "dlg_35_47") + AddConversationOption(conversation, "Gej-who!", "dlg_35_47") + StartConversation(conversation, NPC, Spawn, "Most wonderful! And the last?") +end + +function dlg_35_45(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + SetStepComplete(Spawn, INCANTATION_ORATION, 2) + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/vess_al_ishni/fprt_hood02/vesh_alishni041.mp3", "", "", 2217231699, 1707419277, Spawn) + AddConversationOption(conversation, "I am ready.", "dlg_35_46") + AddConversationOption(conversation, "I could use some more time. I'll be back.") + StartConversation(conversation, NPC, Spawn, "Amazing! I must say, I am very impressed with your ability. Now for the last step.") +end + +function dlg_35_47(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/vess_al_ishni/fprt_hood02/vesh_alishni033.mp3", "", "", 3771835852, 356880814, Spawn) + AddConversationOption(conversation, "Alright.", "dlg_35_40") + StartConversation(conversation, NPC, Spawn, "No, that was incorrect. Again!") +end + +--------------------------------------------------------------------------------------------------------------------------------------------------------------- +--------------------------------------------------------------------------------------------------------------------------------------------------------------- +----------------------------------------------------------------- Quest 4 ------------------------------------------------------------------------------- +--------------------------------------------------------------------------------------------------------------------------------------------------------------- +--------------------------------------------------------------------------------------------------------------------------------------------------------------- + +function dlg_35_46(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/vess_al_ishni/fprt_hood02/vesh_alishni044.mp3", "", "", 2882848596, 2336130534, Spawn) + AddConversationOption(conversation, "So, pick up the components, then enact the warding?", "dlg_36_1") + StartConversation(conversation, NPC, Spawn, "You will seal our meeting place. I'll mark it's location in your journal. But first, return to Sevri to pick up the components of the warding spell.") +end + + +function dlg_36_1(NPC, Spawn) + OfferQuest(NPC, Spawn, ABOLISHING_CURIOUSITY) +end + +function dlg_39_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/vess_al_ishni/fprt_hood02/vesh_alishni047.mp3", "", "", 2997417489, 3570075977, Spawn) + AddConversationOption(conversation, "If this will keep the kerra out of our... business, then I am pleased.", "dlg_39_2") + StartConversation(conversation, NPC, Spawn, "Then we are indebted to you. I am pleased that my choice to trust in your abilities was met with such astounding success.") +end + +function dlg_39_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + SetStepComplete(Spawn, ABOLISHING_CURIOUSITY, 3) + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/vess_al_ishni/fprt_hood02/vesh_alishni048.mp3", "", "", 1980771348, 214982557, Spawn) + AddConversationOption(conversation, "Thank you, Vess.", "dlg_39_3") + StartConversation(conversation, NPC, Spawn, "Take this as a token of our gratitude. ") +end + +--------------------------------------------------------------------------------------------------------------------------------------------------------------- +--------------------------------------------------------------------------------------------------------------------------------------------------------------- +----------------------------------------------------------------- Quest 5 ------------------------------------------------------------------------------- +--------------------------------------------------------------------------------------------------------------------------------------------------------------- +--------------------------------------------------------------------------------------------------------------------------------------------------------------- + +function dlg_39_3(NPC, Spawn) + + -- Offer Quest 5 + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/vess_al_ishni/fprt_hood02/vesh_alishni049.mp3", "", "", 3874372203, 2541548907, Spawn) + AddConversationOption(conversation, "I'll do that.", "OfferQuest5") + StartConversation(conversation, NPC, Spawn, "Also, you may wish to speak with Custodian Zaddar in the Graveyard when you get a chance.") +end + +function OfferQuest5(NPC, Spawn) + OfferQuest(NPC, Spawn, ERUDITE_ADVENTURES) +end \ No newline at end of file diff --git a/server/SpawnScripts/Stonestair/aneruditepestle.lua b/server/SpawnScripts/Stonestair/aneruditepestle.lua new file mode 100644 index 000000000..069e31d91 --- /dev/null +++ b/server/SpawnScripts/Stonestair/aneruditepestle.lua @@ -0,0 +1,27 @@ +--[[ + Script Name : SpawnScripts/Stonestair/aneruditepestle.lua + Script Purpose : + Script Author : Jabantiz + Script Date : 6/22/2018 + Script Notes : +--]] + +-- Quest ID's +local ERUDITE_ALCHEMY = 355 + +function spawn(NPC) + SetRequiredQuest(NPC, ERUDITE_ALCHEMY, 2) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) +end + +function casted_on(NPC, Spawn, Message) + if HasQuest(Spawn, ERUDITE_ALCHEMY) and GetQuestStep(Spawn, ERUDITE_ALCHEMY) == 2 and Message == "grind herbs" then + SetStepComplete(Spawn, ERUDITE_ALCHEMY, 2) + end +end \ No newline at end of file diff --git a/server/SpawnScripts/SunkenCity/Dugar.lua b/server/SpawnScripts/SunkenCity/Dugar.lua new file mode 100644 index 000000000..206955f9d --- /dev/null +++ b/server/SpawnScripts/SunkenCity/Dugar.lua @@ -0,0 +1,27 @@ +--[[ + Script Name : SpawnScripts/SunkenCity/Dugar.lua + Script Purpose : Dugar + Script Author : Scatman + Script Date : 2009.08.01 + Script Notes : +--]] + +function spawn(NPC) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + local choice = math.random(1, 4) + if choice == 1 then + PlayFlavor(NPC, "voiceover/english/human_eco_evil_1/ft/service/guard/human_guard_service_evil_1_hail_gm_582205e1.mp3", "Do you have business with the Freeport Militia?", "glare", 3265760930, 1055342916, Spawn) + elseif choice == 2 then + PlayFlavor(NPC, "voiceover/english/human_eco_evil_1/ft/service/guard/human_guard_service_evil_1_hail_gm_7fa14d4.mp3", "Do not challenge my authority citizen. In Freeport, the Overlord's word is law!", "scold", 1744928325, 2718395831, Spawn) + elseif choice == 3 then + PlayFlavor(NPC, "voiceover/english/human_eco_evil_1/ft/service/guard/human_guard_service_evil_1_hail_gm_870ae3cb.mp3", "The Overlord commands me to patrol this area, and so I must.", "tapfoot", 1281050619, 1758539799, Spawn) + elseif choice == 4 then + PlayFlavor(NPC, "voiceover/english/human_eco_evil_1/ft/service/guard/human_guard_service_evil_1_hail_gm_edb196f8.mp3", "All praises to the Overlord. The Militia protects loyal citizens of Freeport.", "salute_freeport", 1906726944, 247472694, Spawn) + end +end \ No newline at end of file diff --git a/server/SpawnScripts/SunkenCity/GerbardtheSnitch.lua b/server/SpawnScripts/SunkenCity/GerbardtheSnitch.lua new file mode 100644 index 000000000..cc60fb755 --- /dev/null +++ b/server/SpawnScripts/SunkenCity/GerbardtheSnitch.lua @@ -0,0 +1,110 @@ +--[[ + Script Name : SpawnScripts/SunkenCity/GerbardtheSnitch.lua + Script Purpose : Gerbard the Snitch + Script Author : neatz09 + Script Date : 2018.12.31 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +local QUEST_1 = 387 +function spawn(NPC) + ProvidesQuest(NPC, QUEST_1) + SetPlayerProximityFunction(NPC, 10, "InRange", "LeaveRange") +end + +function respawn(NPC) + spawn(NPC) +end + +function InRange(NPC, Spawn) +end + +function LeaveRange(NPC, Spawn) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + PlayFlavor(NPC, "voiceover/english/gerbard_the_snitch/fprt_adv01_sunken/gerbard_the_snitch000.mp3", "", "", 2512842567, 445857936, Spawn) + AddConversationOption(conversation, "What happened?", "dlg_3_1") + AddConversationOption(conversation, "That sounds like something I'd rather stay out of.") + StartConversation(conversation, NPC, Spawn, "Oh no! I did it again! The boys back on the boat are gonna kill me!") + if convo==5 then + PlayFlavor(NPC, "voiceover/english/gerbard_the_snitch/fprt_adv01_sunken/gerbard_the_snitch000.mp3", "", "", 2512842567, 445857936, Spawn) + AddConversationOption(conversation, "What happened?", "dlg_5_1") + AddConversationOption(conversation, "That sounds like something I'd rather stay out of.") + StartConversation(conversation, NPC, Spawn, "Oh no! I did it again! The boys back on the boat are gonna kill me!") + end + + if convo==8 then + PlayFlavor(NPC, "voiceover/english/gerbard_the_snitch/fprt_adv01_sunken/gerbard_the_snitch000.mp3", "", "", 2512842567, 445857936, Spawn) + AddConversationOption(conversation, "I've returned with the pirate coins.", "dlg_8_1") + AddConversationOption(conversation, "That sounds like something I'd rather stay out of.") + StartConversation(conversation, NPC, Spawn, "Oh no! I did it again! The boys back on the boat are gonna kill me!") + end + + if convo==15 then + PlayFlavor(NPC, "voiceover/english/gerbard_the_snitch/fprt_adv01_sunken/gerbard_the_snitch000.mp3", "", "", 2512842567, 445857936, Spawn) + AddConversationOption(conversation, "I've returned with the pirate coins.", "dlg_15_1") + AddConversationOption(conversation, "That sounds like something I'd rather stay out of.") + StartConversation(conversation, NPC, Spawn, "Oh no! I did it again! The boys back on the boat are gonna kill me!") + end + +end + +function dlg_3_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/gerbard_the_snitch/fprt_adv01_sunken/gerbard_the_snitch001.mp3", "", "", 2460257667, 2197101465, Spawn) + AddConversationOption(conversation, "I'll do it, whats involved?", "dlg_3_2") + AddConversationOption(conversation, "Not today, sorry.") + StartConversation(conversation, NPC, Spawn, "I blew all my coins on a game of dice. I just need a few more pirate coins to throw in, and I'll earn back my money in no time! Will you help me out? My crew will toss me overboard if they find out how much money I lost!") +end + +function dlg_3_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() +OfferQuest(NPC, Spawn, QUEST_1) + PlayFlavor(NPC, "voiceover/english/gerbard_the_snitch/fprt_adv01_sunken/gerbard_the_snitch002.mp3", "", "", 4172245160, 2238267271, Spawn) + AddConversationOption(conversation, "Thanks, I'll search out some pirate coins.", "dlg_3_3") + StartConversation(conversation, NPC, Spawn, "Where do you think they come from? They're pirate coins! Those undead buggers roam around where it's wet. I'd go get them myself, but I gambled my sword away in a sure bet.") +end + +function dlg_5_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/gerbard_the_snitch/fprt_adv01_sunken/gerbard_the_snitch001.mp3", "", "", 2460257667, 2197101465, Spawn) + AddConversationOption(conversation, "I'll do it, whats involved?", "dlg_5_2") + AddConversationOption(conversation, "Not today, sorry.") + StartConversation(conversation, NPC, Spawn, "I blew all my coins on a game of dice. I just need a few more pirate coins to throw in, and I'll earn back my money in no time! Will you help me out? My crew will toss me overboard if they find out how much money I lost!") +end + +function dlg_5_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/gerbard_the_snitch/fprt_adv01_sunken/gerbard_the_snitch002.mp3", "", "", 4172245160, 2238267271, Spawn) + AddConversationOption(conversation, "Thanks, I'll search out some pirate coins.", "dlg_5_3") + StartConversation(conversation, NPC, Spawn, "Where do you think they come from? They're pirate coins! Those undead buggers roam around where it's wet. I'd go get them myself, but I gambled my sword away in a sure bet.") +end + +function dlg_8_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/gerbard_the_snitch/fprt_adv01_sunken/gerbard_the_snitch003.mp3", "", "", 1766615640, 492599183, Spawn) + AddConversationOption(conversation, "Good luck.", "dlg_8_2") + StartConversation(conversation, NPC, Spawn, "You're a lifesaver! Now it's time to win it all back.") +end + +function dlg_15_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/gerbard_the_snitch/fprt_adv01_sunken/gerbard_the_snitch003.mp3", "", "", 1766615640, 492599183, Spawn) + AddConversationOption(conversation, "Good luck.", "dlg_15_2") + StartConversation(conversation, NPC, Spawn, "You're a lifesaver! Now it's time to win it all back.") +end + diff --git a/server/SpawnScripts/SunkenCity/InquisitorThorson.lua b/server/SpawnScripts/SunkenCity/InquisitorThorson.lua new file mode 100644 index 000000000..2e44282da --- /dev/null +++ b/server/SpawnScripts/SunkenCity/InquisitorThorson.lua @@ -0,0 +1,658 @@ +--[[ + Script Name : SpawnScripts/SunkenCity/InquisitorThorson.lua + Script Purpose : Inquisitor Thorson + Script Author : Scatman + Script Date : 2009.07.28 + Script Notes : +--]] + +local HALFELF_MENTOR_QUEST_5 = 189 +local QUEST_1 = 266 +local QUEST_2 = 267 +local QUEST_3 = 268 +local QUEST_4 = 269 +local QUEST_3_FROM_CURFIELD = 272 +local QUEST_5 = 273 +local QUEST_6 = 274 + +function spawn(NPC) + SetPlayerProximityFunction(NPC, 10, "InRange") + ProvidesQuest(NPC, QUEST_1) + ProvidesQuest(NPC, QUEST_2) + ProvidesQuest(NPC, QUEST_3) + ProvidesQuest(NPC, QUEST_4) + ProvidesQuest(NPC, QUEST_5) + ProvidesQuest(NPC, QUEST_6) +end + +function respawn(NPC) + spawn(NPC) +end + +function InRange(NPC, Spawn) + local chance = math.random(1, 2) + if chance <= 25 then + local choice = math.random(1,2) + if choice == 1 then + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/inquisitor_thorson/fprt_adv01_sunken/quest_character/qst_inquisitor_thorson_callout_2a6613bd.mp3", "We must all act to defend Freeport.", "nod", 1841304758, 774355519, Spawn) + elseif choice == 2 then + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/inquisitor_thorson/fprt_adv01_sunken/quest_character/qst_inquisitor_thorson_callout_f96a8b27.mp3", "This cursed place holds many secrets that must be uncovered.", "", 2921290119, 2384027850, Spawn) + end + end +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + RandomVoiceOver(NPC, Spawn) + + if HasQuest(Spawn, HALFELF_MENTOR_QUEST_5) then + AddConversationOption(conversation, "My name is " .. GetName(Spawn) .. ". Delcairn Sebastian sent in Beggar's Court sent me here to speak with you.", "Delcairn") + end + + if HasCompletedQuest(Spawn, QUEST_1) then + if HasCompletedQuest(Spawn, QUEST_2) then + if HasCompletedQuest(Spawn, QUEST_3) then + if HasCompletedQuest(Spawn, QUEST_4) then + if HasCompletedQuest(Spawn, QUEST_3_FROM_CURFIELD) then + if HasCompletedQuest(Spawn, QUEST_5) then + if HasCompletedQuest(Spawn, QUEST_6) then + PlayFlavor(NPC, "", "Thank you for all your help, my friend. I will speak favorably of you to my superiors.", "bow", 0, 0, Spawn) + elseif HasQuest(Spawn, QUEST_6) then + MustRemainHere(NPC, Spawn, conversation) + else + HelloAgainBraveOne(NPC, Spawn, conversation) + end + elseif HasQuest(Spawn, QUEST_5) then + OnQuest5(NPC, Spawn, conversation) + else + HelloOnceAgain(NPC, Spawn, conversation) + end + elseif HasQuest(Spawn, QUEST_3_FROM_CURFIELD) then + OnQuest4(NPC, Spawn, conversation) + else + SpeakWithInvestigator(NPC, Spawn, conversation) + end + elseif HasQuest(Spawn, QUEST_4) then + OnQuest4(NPC, Spawn, conversation) + else + Greetings4(NPC, Spawn, conversation) + end + elseif HasQuest(Spawn, QUEST_3) then + OnQuest3(NPC, Spawn, conversation) + else + GreetingsAdventurer(NPC, Spawn, conversation) + end + elseif HasQuest(Spawn, QUEST_2) then + OnQuest2(NPC, Spawn, conversation) + else + HelloAdventurer(NPC, Spawn, conversation) + end + elseif HasQuest(Spawn, QUEST_1) then + OnQuest1(NPC, Spawn, conversation) + else + Greetings(NPC, Spawn, conversation) + end +end + +function RandomVoiceOver(NPC, Spawn) + local choice = math.random(1, 3) + if choice == 1 then + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_1_1004.mp3", "", "", 0, 0, Spawn) + elseif choice == 2 then + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_2_1004.mp3", "", "", 0, 0, Spawn) + elseif choice == 3 then + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_3_1004.mp3", "", "", 0, 0, Spawn) + end +end + +-------------------------------------------------------------------------------------------------------------------- +-- HALFELF_MENTOR_QUEST_5 +-------------------------------------------------------------------------------------------------------------------- + +function Delcairn(NPC, Spawn) + SetStepComplete(Spawn, HALFELF_MENTOR_QUEST_5, 1) + + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + if not HasQuest(Spawn, QUEST_1) and not HasCompleted(Spawn, QUEST_1) then + AddConversationOption(conversation, "I would be an honor to serve Freeport.", "dlg_0_1") + end + AddConversationOption(conversation, "I am pleased to have met you.") + StartConversation(conversation, NPC, Spawn, "Ah yes, I was told to expect your arrival. I've heard that you show great promise and may well prove to be an asset to the Overlord.") +end + +-------------------------------------------------------------------------------------------------------------------- +-- QUEST_1 +-------------------------------------------------------------------------------------------------------------------- + +function Greetings(NPC, Spawn, conversation) + AddConversationOption(conversation, "My name is " .. GetName(Spawn) .. ". Who are you?", "dlg_0_1") + AddConversationOption(conversation, "My business is none of your concern.") + StartConversation(conversation, NPC, Spawn, "Greetings, adventurer. What business do you have here?") + +end + +function dlg_0_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/inquisitor_thorson/fprt_adv01_sunken/inquisitor_thorson003.mp3", "", "", 463981298, 3396454386, Spawn) + AddConversationOption(conversation, "What is the Dismal Rage?", "dlg_0_2") + AddConversationOption(conversation, "Undead? No thank you.") + StartConversation(conversation, NPC, Spawn, "I suppose formal introductions are in order. I am Inquisitor Thorson, sent by my masters in the Dismal Rage to investigate a recent increase in undead activity here.") +end + +function dlg_0_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "What gods do you serve?", "dlg_0_3") + AddConversationOption(conversation, "I have heard enough about the Dismal Rage. What is this place?", "dlg_0_6") + AddConversationOption(conversation, "I must be going.") + StartConversation(conversation, NPC, Spawn, "The Dismal Rage looks after the spiritual needs of Freeport's people. We congregate in the Temple of War in North Freeport. We are made up largely of priests, though we do employ other professions from time to time.") +end + +function dlg_0_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "If there are no gods around anymore, from where do you draw your power?", "dlg_0_4") + AddConversationOption(conversation, "I think I've heard enough.") + StartConversation(conversation, NPC, Spawn, "Though in ancient times our priests served the old gods, we no longer bow to such archaic symbols of authority. Today the Dismal Rage serves the Overlord and our high priestess, .. GetName(Spawn) .. . Nevagon.") +end + +function dlg_0_4(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "What principles do you mean?", "dlg_0_5") + AddConversationOption(conversation, "I think I should be leaving.") + StartConversation(conversation, NPC, Spawn, "Some of us believe it was not the gods themselves that were the true power, but rather the planar forces they represented. The ancient gods were symbols, the embodiment of the principles we now serve.") +end + +function dlg_0_5(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "What is this place?", "dlg_0_6") + AddConversationOption(conversation, "I think I should be leaving.") + StartConversation(conversation, NPC, Spawn, "We draw our power from many sources, including the principles of Hate, Fear, War, and Decay. There are sects within the Dismal Rage dedicated to all these ideals and more, though we are united in our service to the Overlord and High Priestess Nevagon.") +end + +function dlg_0_6(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "What do you mean?", "dlg_0_7") + AddConversationOption(conversation, "I don't need to hear anything else.") + StartConversation(conversation, NPC, Spawn, "You have arrived in the Sunken City, once a thriving district of Freeport. Now it stands as a monument to the madness of those who would have sacrificed our beloved city to the waves.") +end + +function dlg_0_7(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "I will do it.", "OfferQuest1") + StartConversation(conversation, NPC, Spawn, "I will tell you more if you want to hear it, but first I must review the notes I have been taking on what I have observed since my arrival here. To learn a bit more about this place, go through the archway just ahead and speak to an iksar named Saydith Yarr.") +end + +function OfferQuest1(NPC, Spawn) + FaceTarget(NPC, Spawn) + OfferQuest(NPC, Spawn, QUEST_1) +end + +function OnQuest1(NPC, Spawn, conversation) + if GetQuestStep(Spawn, QUEST_1) == 2 then + AddConversationOption(conversation, "Yes, though he seemed to babble a lot.", "dlg_2_1") + end + AddConversationOption(conversation, "Not yet.") + StartConversation(conversation, NPC, Spawn, "Did you speak to Saydith Yarr?") +end + +function dlg_2_1(NPC, Spawn) + if HasQuest(Spawn, QUEST_1) then + SetStepComplete(Spawn, QUEST_1, 2) + end + + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "I'd like to hear more about the Sunken City.", "dlg_2_2") + AddConversationOption(conversation, "Enough chatter. Do you have anything for me to do?", "dlg_2_10") + AddConversationOption(conversation, "I'd rather leave, thanks.") + StartConversation(conversation, NPC, Spawn, "Saydith has been here a long time, and I think he has gone a bit mad. I can tell you more about this place if you like, or we can skip all that and you can do some work for me.") +end + +-------------------------------------------------------------------------------------------------------------------- +-- QUEST_2 +-------------------------------------------------------------------------------------------------------------------- + +function HelloAdventurer(NPC, Spawn, conversation) +AddConversationOption(conversation, "I spoke to a rather disturbed iksar.", "dlg_2_1") + AddConversationOption(conversation, "Goodbye, Inquisitor Thorson.") + StartConversation(conversation, NPC, Spawn, "Hello, adventurer. I hope you travel safely here in the Sunken City.") +end + +function dlg_2_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "Go on.", "dlg_2_3") + AddConversationOption(conversation, "I've heard enough.") + StartConversation(conversation, NPC, Spawn, "What we now call the Sunken City was once a residential district in the northern section of Freeport known affectionately by its residents as Plank's Edge. It was home to many of the sailors and merchants that worked on the docks of East Freeport's bustling shipping trade.") +end + +function dlg_2_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "Please continue.", "dlg_2_4") + AddConversationOption(conversation, "I've heard enough.") + StartConversation(conversation, NPC, Spawn, "As was typical of a seafaring community, many of the residents worshiped Prexus, the Ocean Lord. Though a boisterous and sometimes rowdy bunch, they lived peaceably enough with the other citizens of Freeport.") +end + +function dlg_2_4(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "I see.", "dlg_2_5") + AddConversationOption(conversation, "I've heard enough.") + StartConversation(conversation, NPC, Spawn, "When the Rending began and the seas became impassible, Freeport's harbor fell on hard times. Shipping and trade ground to a halt and the fishing industry collapsed. East Freeport became a ghost town, known more for its crime than for its commerce.") +end + +function dlg_2_5(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "Who followed Aquel?", "dlg_2_6") + AddConversationOption(conversation, "I'm losing interest in this story. Do you have any work for me?", "dlg_2_10") + AddConversationOption(conversation, "I've heard enough.") + StartConversation(conversation, NPC, Spawn, "In this climate of fear and uncertainty, a half elven extremist named Elwyn Aquel gained a following. He preached that Prexus was angry with Freeport, and only through the hard work and sacrifice of his followers would the seas calm and prosperity return.") +end + +function dlg_2_6(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "Did Aquel really want to help them?", "dlg_2_7") + AddConversationOption(conversation, "I've heard enough.") + StartConversation(conversation, NPC, Spawn, "Aquel's followers, called the Circle of Darkfathom, quickly rose in prominence among the disgruntled citizens of Plank's Edge. Aquel promised brighter days to these desperate people on the brink of losing everything they had.") +end + +function dlg_2_7(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "Did anyone try to stop him?", "dlg_2_8") + AddConversationOption(conversation, "Enough of this babbling.") + StartConversation(conversation, NPC, Spawn, "Little did the people of Plank's Edge know that they had fallen victim to a madman's scheme. The sacrifice Aquel spoke of was a literal one: he intended to sink Freeport to the bottom of the ocean in a twisted scheme to gain favor with Prexus. He believed that the flood waters would wash away the city and grant him immortality in the process.") +end + +function dlg_2_8(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "Was all of Freeport flooded?", "dlg_2_9") + AddConversationOption(conversation, "I've heard enough.") + StartConversation(conversation, NPC, Spawn, "It was only as Aquel began his ritual of sacrifice that some of his followers saw through his deception. As the ground beneath Plank's Edge began to sink and the flood waters came pouring in, some of the Darkfathom members interrupted Aquel's incantation and broke the spell. Though Freeport was saved, it was too late for the people of Plank's Edge, who drowned beneath the unholy tide. Aquel's body was never recovered.") +end + +function dlg_2_9(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "This area is haunted?", "dlg_2_10") + AddConversationOption(conversation, "I don't like ghosts. Time to go.") + StartConversation(conversation, NPC, Spawn, "Thankfully the high walls around the outside of the district held strong, so damage to neighboring parts of Freeport was minimal. Gradually the waters receded but never fully went away, leaving the area all but unlivable. Abandoned by the city's residents, Plank's Edge is now called the Sunken City, a dangerous place haunted by the souls of those who met their doom within.") +end + +function dlg_2_10(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "What do you want me to do?", "dlg_2_11") + AddConversationOption(conversation, "I have no interest in this.") + StartConversation(conversation, NPC, Spawn, "The Sunken City is haunted, by both the spirits of those innocents who died here and by the fallen Prexians who caused this catastrophe. It is said that there are even more spirits who walk these flooded streets after night falls.") +end + +function dlg_2_11(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "I'll do it. Where can I find these creatures?", "OfferQuest2") + StartConversation(conversation, NPC, Spawn, "When the undead are defeated and their spirits are freed, they often leave behind a spectral essence that, if properly analyzed, reveals much about their past. I must find out what is causing the increase in activity among the undead. I need you to obtain four spectral essences from the undead creatures.") +end + +function OfferQuest2(NPC, Spawn) + FaceTarget(NPC, Spawn) + OfferQuest(NPC, Spawn, QUEST_2) +end + +function OnQuest2(NPC, Spawn, conversation) + if GetQuestStep(Spawn, QUEST_2) == 2 then + AddConversationOption(conversation, "Yes, I obtained all four essences.", "dlg_7_1") + end + AddConversationOption(conversation, "Not yet.") + StartConversation(conversation, NPC, Spawn, "Hello again. Do you have the spectral essences I asked you to obtain?") +end + +function dlg_7_1(NPC, Spawn) + SetStepComplete(Spawn, QUEST_2, 2) + + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "What other inhabitants?", "dlg_7_2") + AddConversationOption(conversation, "No thanks, I will be going.") + StartConversation(conversation, NPC, Spawn, "Well done! These essences will aid in my research. It will take me some time to study them. While I do that, it may be a good idea for you to have a look around and discover some of the other inhabitants of the Sunken City.") +end + +-------------------------------------------------------------------------------------------------------------------- +-- QUEST_3 +-------------------------------------------------------------------------------------------------------------------- + +function GreetingsAdventurer(NPC, Spawn, conversation) + AddConversationOption(conversation, "Hello, Inquisitor. I am ready to explore more of the Sunken City.", "dlg_7_2") + AddConversationOption(conversation, "Nothing. Goodbye, Inquisitor Thorson.") + StartConversation(conversation, NPC, Spawn, "Greetings, adventurer! What brings you back to me?") +end + +function dlg_7_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "What kind of vermin?", "dlg_7_3") + AddConversationOption(conversation, "Just tell me how to collect the information you need.") + StartConversation(conversation, NPC, Spawn, "This place is home to more than just the spirits of those who died here. I've been told there are a few types of vermin scattered around the Sunken City, and I'd like you to confirm their presence for me.") +end + +function dlg_7_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "What other creatures?", "dlg_7_4") + StartConversation(conversation, NPC, Spawn, "Crabs like to roam in shallow water, so I need a rough estimate of their density here. You should find plenty of brine sifters just through the archway, as well as farther on to the east.") +end + +function dlg_7_4(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "Anything else?", "dlg_7_5") + StartConversation(conversation, NPC, Spawn, "Though a coastal city, Freeport has a very arid climate. Scorpions may be found here on some of the dry portions of ground. You might try going west, then south a bit.") +end + +function dlg_7_5(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "How do I collect information on these creatures?", "OfferQuest3") + StartConversation(conversation, NPC, Spawn, "Of particular interest to me are the strange rust monsters that scurry around here. There is little information on where they come from, but they showed up in this area after the destruction caused by the Rending. They get their name not only for their brownish color, but for their odd taste for consuming rusty metal. If any of your gear becomes rusty due to the moisture here, be on your guard.") +end + +function OfferQuest3(NPC, Spawn) + FaceTarget(NPC, Spawn) + OfferQuest(NPC, Spawn, QUEST_3) +end + +function OnQuest3(NPC, Spawn, conversation) + if GetQuestStep(Spawn, QUEST_3) == 5 then + AddConversationOption(conversation, "Yes, I've studied the nearby creatures.", "dlg_10_1") + end + AddConversationOption(conversation, "Not yet.") + StartConversation(conversation, NPC, Spawn, "Greetings once again. Have you studied the local wild creatures?") +end + +function dlg_10_1(NPC, Spawn) + SetStepComplete(Spawn, QUEST_3, 5) + + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "Are you working alone here?", "dlg_10_2") + AddConversationOption(conversation, "I think I will go now.") + StartConversation(conversation, NPC, Spawn, "Well done! Your reputation as a hard worker is well earned. It seems there is no shortage of life here in the Sunken City, even if most of it scuttles about in the shadows.") +end + +-------------------------------------------------------------------------------------------------------------------- +-- QUEST_4 +-------------------------------------------------------------------------------------------------------------------- + +function Greetings4(NPC, Spawn, conversation) + AddConversationOption(conversation, "Are you working alone here?", "dlg_10_2") + AddConversationOption(conversation, "Speaking of traveling, I must be off.") + StartConversation(conversation, NPC, Spawn, "Greetings. I hope you travel safely, adventurer.") +end + +function dlg_10_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "Who am I looking for?", "dlg_10_3") + AddConversationOption(conversation, "Run your own errands.") + StartConversation(conversation, NPC, Spawn, "I am not the only one sent here by the Dismal Rage. Some of my allies have ventured deeper into the Sunken City. In fact, since I have completed my examination of the spectral essences you obtained, I need you to take the information to one of them.") +end + +function dlg_10_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "I'll do it. Where can I find him?", "OfferQuest4") + StartConversation(conversation, NPC, Spawn, "Seek out Investigator Curfeld, a highly respected member of our order. He has spent a lot of time researching the events that transpired here, and no doubt has some insight into the recent rise in undead activity. Take my findings on the spectral essences and give them to him.") +end + +function OfferQuest4(NPC, Spawn) + FaceTarget(NPC, Spawn) + OfferQuest(NPC, Spawn, QUEST_4) +end + +function OnQuest4(NPC, Spawn, conversation) + if HasQuest(Spawn, QUEST_3_FROM_CURFIELD) then + AddConversationOption(conversation, "Yes, he asked me to bring this journal to you.", "dlg_22_1") + end + AddConversationOption(conversation, "I looked, but I didn't find him.", "DidntFindHim") + AddConversationOption(conversation, "Not yet. I'm still doing some tasks for him.") + StartConversation(conversation, NPC, Spawn, "Thank you for assisting the Dismal Rage in investigating the Sunken City. Has Investigator Curfield made any discoveries?") +end + +function DidntFindHim(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "I'll have another look.") + StartConversation(conversation, NPC, Spawn, "He is near the gateway to the Graveyard. Look to the south and the west of here, near some other inquisitors from the Dismal Rage. Investigator Curfield often makes expeditions deeper into the Sunken City, so if you don't see him right now just wait a while and he should present himself.") +end + +function SpeakWithInvestigator(NPC, Spawn, conversation) + AddConversationOption(conversation, "I will go speak to Investigator Curfield.") + StartConversation(conversation, NPC, Spawn, "Greetings, adventurer. Please see if Investigator Curfield has any work for you. He can be found near the gate to the Graveyard. He'll send you back to me when he sees fit.") +end + +-------------------------------------------------------------------------------------------------------------------- +-- QUEST_3_FROM_CURFIELD +-------------------------------------------------------------------------------------------------------------------- + +function dlg_22_1(NPC, Spawn) + if HasQuest(Spawn, QUEST_3_FROM_CURFIELD) then + SetStepComplete(Spawn, QUEST_3_FROM_CURFIELD, 1) + end + + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/inquisitor_thorson/fprt_adv01_sunken/inquisitor_thorson037.mp3", "", "", 1891000932, 649787837, Spawn) + AddConversationOption(conversation, "First he had me uncover what some unsavory pirates are doing in the area.", "dlg_22_2") + AddConversationOption(conversation, "That is none of your business.") + StartConversation(conversation, NPC, Spawn, "Ah, thank you. I'm glad to have someone of his expertise in charge of these matters. I will look through his journal as I prepare to return to North Freeport to present my report. If I may ask, what did the investigator have you do?") +end + +-------------------------------------------------------------------------------------------------------------------- +-- QUEST_3_FROM_CURFIELD +-------------------------------------------------------------------------------------------------------------------- + +function HelloOnceAgain(NPC, Spawn, conversation) + AddConversationOption(conversation, "I returned with information from Investigator Curfield.", "dlg_22_1") + AddConversationOption(conversation, "My pleasure. Goodbye, Inquisitor Thorson.") + StartConversation(conversation, NPC, Spawn, "Hello once again friend. As a loyal servant of the Dismal Rage, I continue to investigate the strange happenings here in the Sunken City.") +end + +function dlg_22_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/inquisitor_thorson/fprt_adv01_sunken/inquisitor_thorson038.mp3", "", "", 4129824747, 1521555979, Spawn) + AddConversationOption(conversation, "No, he just had me retrieve some documents that were in their possession.", "dlg_22_3") + AddConversationOption(conversation, "That doesn't concern you.") + StartConversation(conversation, NPC, Spawn, "Pirates, eh? I'd heard rumors of their kind stashing their goods around here. I guess they figured no one would go looking for stolen goods in a place that is haunted by the spirits of the past. I assume he asked you to report their activity to the Freeport Militia.") +end + +function dlg_22_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/inquisitor_thorson/fprt_adv01_sunken/inquisitor_thorson039.mp3", "", "", 4059080083, 3742743573, Spawn) + AddConversationOption(conversation, "He had me investigate a ruined shrine to Prexus that was guarded by zombies.", "dlg_22_4") + AddConversationOption(conversation, "Mind your own business.") + StartConversation(conversation, NPC, Spawn, "Documents? Well, surely Investigator Curfeld knows what's best. What else did he ask you to do?") +end + +function dlg_22_4(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/inquisitor_thorson/fprt_adv01_sunken/inquisitor_thorson040.mp3", "", "", 3404715072, 1791529373, Spawn) + AddConversationOption(conversation, "Uh, actually not. He just asked me to find out whether it still emanated mystical energy.", "dlg_22_5") + AddConversationOption(conversation, "Stop asking so many questions.") + StartConversation(conversation, NPC, Spawn, "The ruins of that ancient shrine are certainly cursed. No doubt he asked you to destroy the shrine and sanctify the ground.") +end + +function dlg_22_5(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/inquisitor_thorson/fprt_adv01_sunken/inquisitor_thorson041.mp3", "", "", 3942402517, 3906834551, Spawn) + AddConversationOption(conversation, "I'm sure there must be a good explanation.", "dlg_22_6") + AddConversationOption(conversation, "Let's just forget about this.") + StartConversation(conversation, NPC, Spawn, "What? I don't understand it. Why would he not want the shrine destroyed, especially if it still has arcane power? Let me see if he explains it in this journal.") +end + +function dlg_22_6(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/inquisitor_thorson/fprt_adv01_sunken/inquisitor_thorson042.mp3", "", "", 3952859177, 2366255979, Spawn) + AddConversationOption(conversation, "Why would he have such notes?", "dlg_22_7") + AddConversationOption(conversation, "You sound like a fool.") + StartConversation(conversation, NPC, Spawn, "Wait... what is going on? This journal isn't about ending the threat of the undead and keeping Freeport safe. It contains notes on how to recreate the spell used by Elwyn Aquel and the Circle of Darkfathom to destroy our city!") +end + +function dlg_22_7(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/inquisitor_thorson/fprt_adv01_sunken/inquisitor_thorson043.mp3", "", "", 3919422201, 2706704450, Spawn) + AddConversationOption(conversation, "What should we do?", "dlg_22_8") + AddConversationOption(conversation, "I really don't care.") + StartConversation(conversation, NPC, Spawn, "I'd heard it said that members of the investigator's family were worshipers of Prexus. They must have been members of the Circle of Darkfathom. Our city is in grave danger! We have to stop him!") +end + +function dlg_22_8(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/inquisitor_thorson/fprt_adv01_sunken/inquisitor_thorson044.mp3", "", "", 4213844077, 3519190459, Spawn) + AddConversationOption(conversation, "I will. But what if he refuses to surrender?", "OfferQuest5") + StartConversation(conversation, NPC, Spawn, "There's no time to waste! Curfeld must not be allowed to complete this unholy ritual. The safety of Freeport itself is at stake! Go back and face him. You must put an end to his foul scheme before all is lost.") +end + +function OfferQuest5(NPC, Spawn) + FaceTarget(NPC, Spawn) + OfferQuest(NPC, Spawn, QUEST_5) +end + +-------------------------------------------------------------------------------------------------------------------- +-- QUEST 5 +-------------------------------------------------------------------------------------------------------------------- + +function OnQuest5(NPC, Spawn, conversation) + if GetQuestStep(Spawn, QUEST_5) == 2 then + AddConversationOption(conversation, "His plans are foiled. Freeport is safe.", "dlg_24_1") + end + AddConversationOption(conversation, "Not yet.") + StartConversation(conversation, NPC, Spawn, "You're back! Did you stop Investigator Curfeld?") +end + +function dlg_24_1(NPC, Spawn) + SetStepComplete(Spawn, QUEST_5, 2) + + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "It was my pleasure to serve. Do you have any other tasks for me?", "OfferQuest6") + AddConversationOption(conversation, "I'm tired of being around you.") + StartConversation(conversation, NPC, Spawn, "Splendid work! I cannot express how pleased I am with all you have done for us. Your name shall be known within the Dismal Rage as a true hero. I would not be surprised if the Overlord himself hears of your actions this day. Please, take this reward as a token of thanks.") +end + +-------------------------------------------------------------------------------------------------------------------- +-- QUEST 6 +-------------------------------------------------------------------------------------------------------------------- + +function HelloAgainBraveOne(NPC, Spawn, conversation) + AddConversationOption(conversation, "Are there any other tasks we can undertake together?", "OfferQuest6") + AddConversationOption(conversation, "I'm leaving.") + StartConversation(conversation, NPC, Spawn, "Hello again, brave one. I want to thank you again for defeating Curfield.") +end + +function OfferQuest6(NPC, Spawn) + FaceTarget(NPC, Spawn) + OfferQuest(NPC, Spawn, QUEST_6) +end + +function MustRemainHere(NPC, Spawn, conversation) + AddConversationOption(conversation, "How do I get there?", "dlg_24_3") + AddConversationOption(conversation, "I'm leaving.") + StartConversation(conversation, NPC, Spawn, "I must remain here to finish my report for the Dismal Rage. However, I would like you to journey to the Freeport Ruins and seek out an acquaintance of mine named Captain Arellius. I have heard that your help is much needed there. I will send word that you are coming, hero of Freeport.") +end + +function dlg_24_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/inquisitor_thorson/fprt_adv01_sunken/inquisitor_thorson049.mp3", "", "", 3163252250, 288796806, Spawn) + AddConversationOption(conversation, "Are there any other places you could recommend where I can find adventures?", "dlg_24_4") + AddConversationOption(conversation, "Thank you, Inquisitor Thorson. Farewell.") + StartConversation(conversation, NPC, Spawn, "The fastest route to the Ruins is to use the mariner's bell at the end of the dock for traveling outside the city proper. This will summon transportation to take you to the Ruins, where Captain Arellius of the Freeport Militia will be awaiting your assistance.") +end + +function dlg_24_4(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/inquisitor_thorson/fprt_adv01_sunken/inquisitor_thorson061.mp3", "", "", 2845086086, 1715171802, Spawn) + AddConversationOption(conversation, "Tell me more about Custodian Zaddar.", "dlg_24_5") + AddConversationOption(conversation, "Tell me more about Enforcer Kurdek.", "dlg_24_6") + AddConversationOption(conversation, "I may seek them out. Thank you.") + StartConversation(conversation, NPC, Spawn, "You can speak to Custodian Zaddar in the Graveyard and Enforcer Kurdek in the Sprawl. They could both use assistance from an able adventurer.") +end + +function dlg_24_5(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/inquisitor_thorson/fprt_adv01_sunken/inquisitor_thorson062.mp3", "", "", 4025975768, 1084751097, Spawn) + AddConversationOption(conversation, "Tell me more about Enforcer Kurdek.", "dlg_24_6") + AddConversationOption(conversation, "Thank you for the advice.") + StartConversation(conversation, NPC, Spawn, "Custodian Zaddar in the Graveyard is trying to determine what's behind a recent increase in undead attacks. Use the mariner's bell on the docks of your home district to travel to Stonestair Byway. Head west until you see a passage to the south. The gate at the end leads to the Graveyard.") +end + +function dlg_24_6(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/inquisitor_thorson/fprt_adv01_sunken/inquisitor_thorson063.mp3", "", "", 3377387482, 1184471101, Spawn) + AddConversationOption(conversation, "Tell me more about Custodian Zaddar.", "dlg_24_5") + AddConversationOption(conversation, "Thank you for the advice.") + StartConversation(conversation, NPC, Spawn, "Enforcer Kurdek in the Sprawl could use a hand keeping the local gangs in line. To journey to the Sprawl, use the mariner's bell on the docks of your home district to travel to Big Bend. Follow the halls north, then take the west passageway to the west gate.") +end diff --git a/server/SpawnScripts/SunkenCity/InvestigatorCurfeld.lua b/server/SpawnScripts/SunkenCity/InvestigatorCurfeld.lua new file mode 100644 index 000000000..42bce389e --- /dev/null +++ b/server/SpawnScripts/SunkenCity/InvestigatorCurfeld.lua @@ -0,0 +1,310 @@ +--[[ + Script Name : SpawnScripts/SunkenCity/InvestigatorCurfeld.lua + Script Purpose : Investigator Curfeld + Script Author : Scatman + Script Date : 2009.07.28 + Script Notes : +--]] + +local QUEST_4_FROM_THORSON = 269 +local QUEST_1 = 270 +local QUEST_2 = 271 +local QUEST_3 = 272 +local QUEST_5_FROM_THORSON = 273 + +function spawn(NPC) + ProvidesQuest(NPC, QUEST_1) + ProvidesQuest(NPC, QUEST_2) + ProvidesQuest(NPC, QUEST_3) +end + +function respawn(NPC) + spawn(NPC) +end + + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + if HasCompletedQuest(Spawn, QUEST_1) then + if HasCompletedQuest(Spawn, QUEST_2) then + if HasCompletedQuest(Spawn, QUEST_3) then + if HasCompletedQuest(Spawn, QUEST_5_FROM_THORSON) then + Say(NPC, "You again? You can't stop a son of Prexus. Maybe the next fool who comes after you will have better luck!", Spawn) + elseif HasQuest(Spawn, QUEST_5_FROM_THORSON) then + OnQuest3(NPC, Spawn, conversation) + else + OnQuest3(NPC, Spawn, conversation) + end + elseif HasQuest(Spawn, QUEST_3) then + OnQuest3(NPC, Spawn, conversation) + else + SoYouFoundTheShrine(NPC, Spawn, conversation) + end + elseif HasQuest(Spawn, QUEST_2) then + OnQuest2(NPC, Spawn, conversation) + else + WhyHaveYouReturned(NPC, Spawn, conversation) + end + elseif HasQuest(Spawn, QUEST_1) then + OnQuest1(NPC, Spawn, conversation) + else + if not HasCompletedQuest(Spawn, QUEST_4_FROM_THORSON) then + VeryBusy(NPC, Spawn, conversation) + else + YouAgain(NPC, Spawn, conversation) + end + end +end + +--------------------------------------------------------------------------------------------------------------------------- +-- QUEST_4_FROM_THORSON +--------------------------------------------------------------------------------------------------------------------------- + +function VeryBusy(NPC, Spawn, conversation) + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/investigator_curfeld/fprt_adv01_sunken/investigator_curfeld001.mp3", "", "", 587048685, 18941612, Spawn) + if HasQuest(Spawn, QUEST_4_FROM_THORSON) then + AddConversationOption(conversation, "My name is " .. GetName(Spawn) .. ". Inquisitor Thorson sent me.", "dlg_12_1") + end + AddConversationOption(conversation, "Nothing at all.") + StartConversation(conversation, NPC, Spawn, "I'm very busy. What is it that you want from me?") +end + +function dlg_12_1(NPC, Spawn) + SetStepComplete(Spawn, QUEST_4_FROM_THORSON, 1) + + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/investigator_curfeld/fprt_adv01_sunken/investigator_curfeld002.mp3", "", "", 2776959402, 3983139293, Spawn) + AddConversationOption(conversation, "The inquisitor did some research on spectral essences, and he asked me to give it to you.", "dlg_12_2") + AddConversationOption(conversation, "I'll leave you alone.") + StartConversation(conversation, NPC, Spawn, "Thorson, eh? He mentioned a newly arrived hero of Freeport was coming. State your business quickly, for my time is valuable.") +end + +--------------------------------------------------------------------------------------------------------------------------- +-- QUEST 1 +--------------------------------------------------------------------------------------------------------------------------- + +function YouAgain(NPC, Spawn, conversation) + AddConversationOption(conversation, "Inquisitor Thorson sent me to help look into the rise of undead activity.", "dlg_12_5") + AddConversationOption(conversation, "Nevermind.") + StartConversation(conversation, NPC, Spawn, "You again. What is it that you wanted?") +end + +function dlg_12_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/investigator_curfeld/fprt_adv01_sunken/investigator_curfeld003.mp3", "", "", 1468838299, 855905444, Spawn) + AddConversationOption(conversation, "He mentioned you might need my assistance.", "dlg_12_3") + AddConversationOption(conversation, "That's all.") + StartConversation(conversation, NPC, Spawn, "Fine, hand it over! Is that all?") +end + +function dlg_12_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/investigator_curfeld/fprt_adv01_sunken/investigator_curfeld004.mp3", "", "", 984029368, 2280448766, Spawn) + AddConversationOption(conversation, "I am willing to do whatever is required to serve Freeport.", "dlg_12_4") + AddConversationOption(conversation, "Never mind, I rescind my offer.") + StartConversation(conversation, NPC, Spawn, "Assistance? What I need is solitude so that I can complete my research! What is it that you think you can offer an investigator who serves the Dismal Rage?") +end + +function dlg_12_4(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/investigator_curfeld/fprt_adv01_sunken/investigator_curfeld005.mp3", "", "", 1117786309, 2475990866, Spawn) + AddConversationOption(conversation, "Looking into the increase in undead activity, correct?", "dlg_12_5") + AddConversationOption(conversation, "This doesn't interest me.") + StartConversation(conversation, NPC, Spawn, "Well, come to think of it, there is some work you could do for me. As you know, I've been here in the Sunken City for a while now, conducting some important research.") +end + +function dlg_12_5(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/investigator_curfeld/fprt_adv01_sunken/investigator_curfeld006.mp3", "", "", 3352004340, 1089685047, Spawn) + AddConversationOption(conversation, "Who do you suspect has stolen it?", "dlg_12_6") + AddConversationOption(conversation, "Do your own grunt work.") + StartConversation(conversation, NPC, Spawn, "Yes, undead activity... of course. At any rate, some of my research has been stolen, and it is vital that I get it back. I need you to retrieve it for me.") +end + +function dlg_12_6(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/investigator_curfeld/fprt_adv01_sunken/investigator_curfeld007.mp3", "", "", 753008127, 4149258442, Spawn) + AddConversationOption(conversation, "Where should I look for your research papers?", "OfferQuest1") + AddConversationOption(conversation, "I have no interest in pirates.") + StartConversation(conversation, NPC, Spawn, "I have observed a gang of pirates operating in the abandoned houses to the north. I believe they call themselves the Blackshields, a group of thugs based on the shores of the Commonlands. It is my belief that they're using the Sunken City as a place to store their stolen treasures.") +end + +function OfferQuest1(NPC, Spawn) + FaceTarget(NPC, Spawn) + OfferQuest(NPC, Spawn, QUEST_1) +end + +function OnQuest1(NPC, Spawn, conversation) + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/investigator_curfeld/fprt_adv01_sunken/investigator_curfeld009.mp3", "", "", 987373655, 3497715065, Spawn) + if GetQuestStep(Spawn, QUEST_1) == 2 then + AddConversationOption(conversation, "Yes, I found a notebook in an old barrel.", "dlg_19_1") + end + AddConversationOption(conversation, "Not yet.") + StartConversation(conversation, NPC, Spawn, "Have you retrieved my research materials from the Blackshields yet?") +end + +function dlg_19_1(NPC, Spawn) + SetStepComplete(Spawn, QUEST_1, 2) + + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/investigator_curfeld/fprt_adv01_sunken/investigator_curfeld010.mp3", "", "", 1290071481, 14179397, Spawn) + AddConversationOption(conversation, "I'm ready for anything.", "dlg_19_2") + AddConversationOption(conversation, "I don't need your insults.") + StartConversation(conversation, NPC, Spawn, "Excellent! You may prove useful to me after all. I wonder if I can now entrust you with a more crucial task.") +end + +--------------------------------------------------------------------------------------------------------------------------- +-- QUEST 2 +--------------------------------------------------------------------------------------------------------------------------- + +function WhyHaveYouReturned(NPC, Spawn, conversation) + AddConversationOption(conversation, "I would like to help you further.", "dlg_19_2") + AddConversationOption(conversation, "I guess I will be leaving.") + StartConversation(conversation, NPC, Spawn, "Why have you returned to me?") +end + +function dlg_19_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/investigator_curfeld/fprt_adv01_sunken/investigator_curfeld011.mp3", "", "", 2158708484, 291273731, Spawn) + AddConversationOption(conversation, "What do you mean by 'usable'?", "dlg_19_3") + AddConversationOption(conversation, "Your task doesn't interest me.") + StartConversation(conversation, NPC, Spawn, "Back when this place was known as Plank's Edge, the followers of Prexus built a shrine to the Ocean Lord. I need to know if any part of that shrine still exists, and if so, whether it still resonates with any usable divine power.") +end + +function dlg_19_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/investigator_curfeld/fprt_adv01_sunken/investigator_curfeld012.mp3", "", "", 3900893827, 953702832, Spawn) + AddConversationOption(conversation, "No need to be so testy! I will do it.", "dlg_19_4") + AddConversationOption(conversation, "I don't need to stand for your rudeness.") + StartConversation(conversation, NPC, Spawn, "Do not question me! You are not experienced enough in the ways of the Dismal Rage to understand these matters. Will you undertake this mission or not?") +end + +function dlg_19_4(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/investigator_curfeld/fprt_adv01_sunken/investigator_curfeld013.mp3", "", "", 279847227, 949322829, Spawn) + AddConversationOption(conversation, "I will be careful.", "OfferQuest2") + AddConversationOption(conversation, "I'd best be off.") + StartConversation(conversation, NPC, Spawn, "Then be about your work. Find whatever remains of the shrine of Prexus and tell me if it has any remnants of its former power. Beware, for the corpses of the Darkfathom followers may still be guarding their once holy place.") +end + +function OfferQuest2(NPC, Spawn) + FaceTarget(NPC, Spawn) + OfferQuest(NPC, Spawn, QUEST_2) +end + +function OnQuest2(NPC, Spawn, conversation) + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/investigator_curfeld/fprt_adv01_sunken/investigator_curfeld015.mp3", "", "", 3353662707, 2467058534, Spawn) + if GetQuestStep(Spawn, QUEST_2) == 2 then + AddConversationOption(conversation, "I've found the ruined shrine, and it has an eerie hum surrounding it.", "dlg_20_1") + end + AddConversationOption(conversation, "I haven't found it yet.") + StartConversation(conversation, NPC, Spawn, "Did you find the shrine of Prexus? Does it still resonate with power?") +end + +function dlg_20_1(NPC, Spawn) + SetStepComplete(Spawn, QUEST_2, 2) + + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/investigator_curfeld/fprt_adv01_sunken/investigator_curfeld016.mp3", "", "", 2893810330, 4143475866, Spawn) + AddConversationOption(conversation, "What may still be possible?", "dlg_20_2") + AddConversationOption(conversation, "I don't have time for this.") + StartConversation(conversation, NPC, Spawn, "Magnificent news! Then it might still be possible! This confirms all my fondest hopes!") +end + +--------------------------------------------------------------------------------------------------------------------------- +-- QUEST 3 +--------------------------------------------------------------------------------------------------------------------------- + +function SoYouFoundTheShrine(NPC, Spawn, conversation) + AddConversationOption(conversation, "I was curious what you wanted from that shrine.", "dlg_20_2") + AddConversationOption(conversation, "I'm tired of this abuse.") + StartConversation(conversation, NPC, Spawn, "So you found the Shrine of Prexus. Why are you still disturbing my work?") +end + +function dlg_20_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/investigator_curfeld/fprt_adv01_sunken/investigator_curfeld017.mp3", "", "", 3975555869, 3311883027, Spawn) + AddConversationOption(conversation, "Inquisitor Thorson said he needed information from you to complete his report.", "OfferQuest3") + AddConversationOption(conversation, "I'm tired of this abuse.") + StartConversation(conversation, NPC, Spawn, "Uh... nothing! You have no right to question me! Go back to Thorson, for I have no further use for you.") +end + +function OfferQuest3(NPC, Spawn) + FaceTarget(NPC, Spawn) + OfferQuest(NPC, Spawn, QUEST_3) +end + +function OnQuest3(NPC, Spawn, conversation) + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/investigator_curfeld/fprt_adv01_sunken/investigator_curfeld019.mp3", "", "", 1269088457, 2406366669, Spawn) + if HasQuest(Spawn, QUEST_5_FROM_THORSON) and GetQuestStep(Spawn, QUEST_5_FROM_THORSON) == 1 then + AddConversationOption(conversation, "You did, and we found some rather disturbing notes in your journal.", "dlg_23_1") + end + AddConversationOption(conversation, "I'm going back to him right now.") + StartConversation(conversation, NPC, Spawn, "You again! I thought I sent you back to Thorson.") +end + +-------------------------------------------------------------------------------------------------------------------- +-- QUEST_5_FROM_THORSON +-------------------------------------------------------------------------------------------------------------------- + +function dlg_23_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/investigator_curfeld/fprt_adv01_sunken/investigator_curfeld020.mp3", "", "", 1297570306, 1157170727, Spawn) + AddConversationOption(conversation, "Indeed we did. You have some explaining to do.", "dlg_23_2") + AddConversationOption(conversation, "No, we didn't.") + StartConversation(conversation, NPC, Spawn, "In my journal? What do you... Oh, I, uh, seem to have given you the wrong notes to take to him. Just some old scribbles, nothing too interesting. You two didn't read it, did you?") +end + +function dlg_23_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/investigator_curfeld/fprt_adv01_sunken/investigator_curfeld021.mp3", "", "", 2210460542, 3190306576, Spawn) + AddConversationOption(conversation, "You're a madman!", "dlg_23_3") + AddConversationOption(conversation, "Time for me to get out of here.") + StartConversation(conversation, NPC, Spawn, "I do not need to explain myself to lesser beings like you. Soon I will recreate Aquel's ritual, only this time I will succeed in sinking Freeport to the bottom of the ocean. And the delicious irony is that you are the one who helped me do it!") +end + +function dlg_23_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/tutorial_revamp/investigator_curfeld/fprt_adv01_sunken/investigator_curfeld022.mp3", "", "", 2667398233, 1390342428, Spawn) + AddConversationOption(conversation, "Oh no you won't, Curfeld!", "dlg_23_4") + AddConversationOption(conversation, "Nevermind, we'll settle this another time.") + StartConversation(conversation, NPC, Spawn, "When I have caused the waters to rise and drown this city, Prexus will return and bless me with unlimited power! Even the Overlord's floating citadel will sink to the depths, leaving me to rule all of Norrath!") +end + +function dlg_23_4(NPC, Spawn) + SpawnSet(NPC, "attackable", 1) + SpawnSet(NPC, "show_level", 1) + AddHate(Spawn, NPC, 100) +end \ No newline at end of file diff --git a/server/SpawnScripts/SunkenCity/Lukur.lua b/server/SpawnScripts/SunkenCity/Lukur.lua new file mode 100644 index 000000000..393a17ca0 --- /dev/null +++ b/server/SpawnScripts/SunkenCity/Lukur.lua @@ -0,0 +1,61 @@ +--[[ + Script Name : SpawnScripts/SunkenCity/Lukur.lua + Script Purpose : Lukur + Script Author : jakejp + Script Date : 2018.12.27 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +local QUEST_1 = 374 + +function spawn(NPC) + ProvidesQuest(NPC, QUEST_1) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + if not HasCompletedQuest(Spawn, QUEST_1) then + if HasQuest(Spawn, QUEST_1) then + if GetQuestStep(Spawn, QUEST_1) == 4 then + AddConversationOption(conversation, "I've returned with the masks.", "dlg_12_1") + end + else + AddConversationOption(conversation, "Who are you?", "dlg_4_1") + end + end + + PlayFlavor(NPC, "voiceover/english/optional1/lukur/fprt_adv01_sunken/lukur000.mp3", "", "", 1584752461, 2942049134, Spawn) + AddConversationOption(conversation, "I'm not one to be sifting through other people's things.") + StartConversation(conversation, NPC, Spawn, "This place is a wellspring for me. Look around! Crates and barrels full of abandoned goods just waiting to be uncovered. There are far too many for me to search alone.") + +end + +function dlg_4_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/optional1/lukur/fprt_adv01_sunken/lukur001.mp3", "", "", 3143062912, 3824299878, Spawn) + AddConversationOption(conversation, "I think I can help you.", "OfferQuest1") + AddConversationOption(conversation, "Not right now, sorry.") + StartConversation(conversation, NPC, Spawn, "My name's Lukur, and I deal antiques. I was told of the riches waiting to be discovered here, but I didn't believe it until I arrived. Will you help me search for some valuables?") +end + +function dlg_12_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/optional1/lukur/fprt_adv01_sunken/lukur003.mp3", "", "", 1196217033, 2873878783, Spawn) + AddConversationOption(conversation, "Thank you. ", "dlg_12_2") + StartConversation(conversation, NPC, Spawn, "Look at the amazing quality of these ancient masks! You did well. Here is your reward.") +end + +function OfferQuest1(NPC, Spawn) + FaceTarget(NPC, Spawn) + OfferQuest(NPC, Spawn, QUEST_1) +end \ No newline at end of file diff --git a/server/SpawnScripts/SunkenCity/ManiusGalla.lua b/server/SpawnScripts/SunkenCity/ManiusGalla.lua new file mode 100644 index 000000000..844078ab0 --- /dev/null +++ b/server/SpawnScripts/SunkenCity/ManiusGalla.lua @@ -0,0 +1,81 @@ +--[[ + Script Name : SpawnScripts/SunkenCity/ManiusGalla.lua + Script Purpose : Manius Galla + Script Author : Neatz09 + Script Date : 12/31/2018 + Script Notes : +--]] + +local QUEST_1 = 389 + +function spawn(NPC) + ProvidesQuest(NPC, QUEST_1) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + RandomVoiceOver(NPC, Spawn) + + if not HasCompletedQuest(Spawn, QUEST_1) then + if HasQuest(Spawn, QUEST_1) then + if GetQuestStep(Spawn, QUEST_1) == 6 then + AddConversationOption(conversation, "I've killed the raiders.", "dlg_17_1") + end + else + AddConversationOption(conversation, "I want to join your gang.", "dlg_9_1") + end + end + AddConversationOption(conversation, "I didn't see anything.") + StartConversation(conversation, NPC, Spawn, "Mind your own business. If you keep gawking, you'll be walking away with a limp. And that's only because I'm in a good mood today.") +end + +function RandomVoiceOver(NPC, Spawn) + local choice = math.random(1, 3) + if choice == 1 then + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_1_1004.mp3", "", "", 0, 0, Spawn) + elseif choice == 2 then + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_2_1004.mp3", "", "", 0, 0, Spawn) + elseif choice == 3 then + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_3_1004.mp3", "", "", 0, 0, Spawn) + end +end + +function dlg_9_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "Why don't you give me a test?", "dlg_9_2") + AddConversationOption(conversation, "I don't need to take this from you. Good bye.") + StartConversation(conversation, NPC, Spawn, "Did you hear that, boys? This runt wants to join our gang! HA HA HA HA! You couldn't fight your way out of a wet parchment bag let alone join us. HA HA HA! We keep people safe inside the city districts! You're better off paying us for protection, runt.") +end + +function dlg_9_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() +OfferQuest(NPC, Spawn, QUEST_1) + AddConversationOption(conversation, "Okay, I'll be back when they're dead.", "dlg_9_3") + StartConversation(conversation, NPC, Spawn, "A test, huh? Yeah ... hey, boys ... let's give this runt a bit of a test. Okay, here's your test: Go deeper in this place and find some of the lackeys who hang around the raiders. Kill some of them and maybe you can work for us.") +end + +function dlg_9_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "Don't worry about it.", "dlg_9_4") + StartConversation(conversation, NPC, Spawn, "Don't even bother coming back if they ain't!") +end + +function dlg_17_1(NPC, Spawn) + SetStepComplete(Spawn, QUEST_1, 6) + + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "I'll check back.") + StartConversation(conversation, NPC, Spawn, "Crispin already heard. Hpmh ... You got lucky, I guess. Either way, those Raiders won't bother our clients in the Court anymore. I don't know if I should let you join our gang ... let me think about it.") +end \ No newline at end of file diff --git a/server/SpawnScripts/SunkenCity/SaydithYarr.lua b/server/SpawnScripts/SunkenCity/SaydithYarr.lua new file mode 100644 index 000000000..6dcdbc1ab --- /dev/null +++ b/server/SpawnScripts/SunkenCity/SaydithYarr.lua @@ -0,0 +1,65 @@ +--[[ + Script Name : SpawnScripts/SunkenCity/SaydithYarr.lua + Script Purpose : Saydith Yarr + Script Author : Scatman + Script Date : 2009.07.28 + Script Notes : +--]] + +local QUEST_1_FROM_THORSON = 266 + +function spawn(NPC) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/saydith_yarr/fprt_adv01_sunken/saydith_yarr000.mp3", "", "", 1548752498, 2730978939, Spawn) + AddConversationOption(conversation, "Where am I?", "dlg_1_2") + AddConversationOption(conversation, "What do you mean by 'dark and light'?", "dlg_1_3") + AddConversationOption(conversation, "What tragedies?", "dlg_1_1") + AddConversationOption(conversation, "I know all I need to about this place.") + StartConversation(conversation, NPC, Spawn, "Searched this place I have. Seen the dark and the light. Know the stories and the tragedies.") +end + +function dlg_1_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/saydith_yarr/fprt_adv01_sunken/saydith_yarr001.mp3", "", "", 2390191821, 3206926055, Spawn) + AddConversationOption(conversation, "What do you mean by 'dark and light'?", "dlg_1_3") + AddConversationOption(conversation, "What tragedies?", "dlg_1_1") + AddConversationOption(conversation, "I know all I need to about this place.") + StartConversation(conversation, NPC, Spawn, "You're on the docks of the Sunken City.") +end + +function dlg_1_3(NPC, Spawn) + if HasQuest(Spawn, QUEST_1_FROM_THORSON) and GetQuestStep(Spawn, QUEST_1_FROM_THORSON) == 1 then + SetStepComplete(Spawn, QUEST_1_FROM_THORSON, 1) + end + + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/saydith_yarr/fprt_adv01_sunken/saydith_yarr003.mp3", "", "", 3245604695, 2963905971, Spawn) + AddConversationOption(conversation, "Where am I?", "dlg_1_2") + AddConversationOption(conversation, "What tragedies?", "dlg_1_1") + AddConversationOption(conversation, "I know all I need to about this place.") + StartConversation(conversation, NPC, Spawn, "Things change here when it gets cold and dark. Zombies crawl from the shadows to drag the living back with them to their watery grave. Search for the cross if you are looking for death.") +end + +function dlg_1_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/saydith_yarr/fprt_adv01_sunken/saydith_yarr002.mp3", "", "", 2458221458, 1657163845, Spawn) + AddConversationOption(conversation, "Where am I?", "dlg_1_2") + AddConversationOption(conversation, "What do you mean by 'dark and light'?", "dlg_1_3") + AddConversationOption(conversation, "I know all I need to about this place.") + StartConversation(conversation, NPC, Spawn, "This place was once a district of Freeport, much like the others. Those that lived here were swallowed up by the seas and dragged to the bottom of the ocean, doomed to an eternal existence under the crushing depths.") +end \ No newline at end of file diff --git a/server/SpawnScripts/SunkenCity/Teleth.lua b/server/SpawnScripts/SunkenCity/Teleth.lua new file mode 100644 index 000000000..26c2bdc56 --- /dev/null +++ b/server/SpawnScripts/SunkenCity/Teleth.lua @@ -0,0 +1,27 @@ +--[[ + Script Name : SpawnScripts/SunkenCity/Teleth.lua + Script Purpose : Teleth + Script Author : Scatman + Script Date : 2009.08.01 + Script Notes : +--]] + +function spawn(NPC) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + local choice = math.random(1, 4) + if choice == 1 then + PlayFlavor(NPC, "voiceover/english/human_eco_evil_1/ft/service/guard/human_guard_service_evil_1_hail_gm_582205e1.mp3", "Do you have business with the Freeport Militia?", "glare", 3265760930, 1055342916, Spawn) + elseif choice == 2 then + PlayFlavor(NPC, "voiceover/english/human_eco_evil_1/ft/service/guard/human_guard_service_evil_1_hail_gm_7fa14d4.mp3", "Do not challenge my authority citizen. In Freeport, the Overlord's word is law!", "scold", 1744928325, 2718395831, Spawn) + elseif choice == 3 then + PlayFlavor(NPC, "voiceover/english/human_eco_evil_1/ft/service/guard/human_guard_service_evil_1_hail_gm_870ae3cb.mp3", "The Overlord commands me to patrol this area, and so I must.", "tapfoot", 1281050619, 1758539799, Spawn) + elseif choice == 4 then + PlayFlavor(NPC, "voiceover/english/human_eco_evil_1/ft/service/guard/human_guard_service_evil_1_hail_gm_edb196f8.mp3", "All praises to the Overlord. The Militia protects loyal citizens of Freeport.", "salute_freeport", 1906726944, 247472694, Spawn) + end +end \ No newline at end of file diff --git a/server/SpawnScripts/SunkenCity/TilzakNLim.lua b/server/SpawnScripts/SunkenCity/TilzakNLim.lua new file mode 100644 index 000000000..7b513d31d --- /dev/null +++ b/server/SpawnScripts/SunkenCity/TilzakNLim.lua @@ -0,0 +1,62 @@ +--[[ + Script Name : SpawnScripts/SunkenCity/TilzakNLim.lua + Script Purpose : Tilzak N`Lim + Script Author : Neatz09 + Script Date : 12/31/2018 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +local QUEST_1 = 386 + +function spawn(NPC) + ProvidesQuest(NPC, QUEST_1) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + if not HasCompletedQuest(Spawn, QUEST_1) then + if HasQuest(Spawn, QUEST_1) then + if GetQuestStep(Spawn, QUEST_1) == 2 then + AddConversationOption(conversation, "I have the shark fins you wanted.", "dlg_4_1") + end + else + AddConversationOption(conversation, "I didn't know the Teir'Dal took mundane jobs like fishing.", "dlg_3_1") + end + PlayFlavor(NPC, "voiceover/english/optional5/standard_dark_elf_male/fprt_hood05/std_de_male_tilzak_nlim.mp3", "", "", 3205731528, 2249540299, Spawn) + AddConversationOption(conversation, "Then I'll leave you to your fish.") + StartConversation(conversation, NPC, Spawn, "These are my fish so you can't have them! Go... go find your own!") + else + Say(NPC, "These are my fish so you can't have them! Go... go find your own!", Spawn) + end +end + +function dlg_3_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "Maybe I can offer you a hand. What do you need?", "OfferQuest1") + AddConversationOption(conversation, "Your wants mean nothing to me.") + StartConversation(conversation, NPC, Spawn, "Only when we have no choice. I used to be a chef to some of the most important people in Neriak back in the day. Now I am nothing more than a common fisherman. This is my lot in life, I guess. If I returned to Neriak with new recipes I might once again regain that prominent position. If only I had the ingredients to make a new recipe I've come up with.") +end + +function OfferQuest1(NPC, Spawn) + FaceTarget(NPC, Spawn) + OfferQuest(NPC, Spawn, QUEST_1) +end + +function dlg_4_1(NPC, Spawn) + SetStepComplete(Spawn, QUEST_1, 2) + + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/optional5/standard_dark_elf_male/fprt_hood05/quests/tilzaknlim/tilzak_x1_finish.mp3", "", "", 1351808605, 3311226361, Spawn) + AddConversationOption(conversation, "No thanks. I'll leave that to you. Bye.") + StartConversation(conversation, NPC, Spawn, "Oh, thank you so much, my good friend. These will be wonderful once they're prepared correctly. I need to be careful though, because these shark fins can be highly poisonous if they aren't prepared correctly. Don't worry, though -- I've prepared dishes very similar to this before. If you'd like you can be the first person to try it when I'm done!") +end \ No newline at end of file diff --git a/server/SpawnScripts/SunkenCity/aBlackshieldmarauder.lua b/server/SpawnScripts/SunkenCity/aBlackshieldmarauder.lua new file mode 100644 index 000000000..4cbd56b89 --- /dev/null +++ b/server/SpawnScripts/SunkenCity/aBlackshieldmarauder.lua @@ -0,0 +1,200 @@ +--[[ + Script Name : SpawnScripts/SunkenCity/aBlackshieldmarauder.lua + Script Purpose : a Blackshield marauder + Script Author : Scatman + Script Date : 2009.08.01 + Script Notes : +--]] + +local MALE = 1 +local FEMALE = 2 +local DARK_ELF = 1 +local OGRE = 12 +local TROLL = 14 +local spoke = false + +function spawn(NPC) + spoke = false +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) +end + +function aggro(NPC, Spawn) + local chance = math.random(1, 100) + if chance <= 25 then + if GetGender(NPC) == MALE then + if GetRace(NPC) == DARK_ELF then + local choice = math.random(1, 4) + if choice == 1 then + PlayFlavor(NPC, "voiceover/english/darkelf_base_1/ft/darkelf/darkelf_base_1_1_aggro_gm_10fd87eb.mp3", "There is no escape for you now!", "", 2989643101, 2260454555) + elseif choice == 2 then + PlayFlavor(NPC, "voiceover/english/darkelf_base_1/ft/darkelf/darkelf_base_1_1_aggro_gm_beacbb30.mp3", "I hope you put your affairs in order.", "", 799093996, 16617637) + elseif choice == 3 then + PlayFlavor(NPC, "voiceover/english/darkelf_base_1/ft/darkelf/darkelf_base_1_1_aggro_gm_fe18133.mp3", "Look what strolled into the spider's web!", "", 4178015902, 2202039151) + elseif choice == 4 then + PlayFlavor(NPC, "voiceover/english/optional3/darkelf_base_1/ft/darkelf/darkelf_base_1_3_aggro_gm_10fd87eb.mp3", "There is no escape for you now!", "", 3427660043, 2534456197) + end + elseif GetRace(NPC) == OGRE then + elseif GetRace(NPC) == TROLL then + end + elseif GetGender(NPC) == FEMALE then + if GetRace(NPC) == DARK_ELF then + local choice = math.random(1, 4) + if choice == 1 then + PlayFlavor(NPC, "voiceover/english/optional3/darkelf_base_1/ft/darkelf/darkelf_base_1_1_aggro_gf_10fd87eb.mp3", "There is no escape for you now!", "", 3641868496, 1960514853) + elseif choice == 2 then + PlayFlavor(NPC, "voiceover/english/optional3/darkelf_base_2/ft/darkelf/darkelf_base_2_1_aggro_gf_8e7390a8.mp3", "Welcome to torment and destruction!", "", 3770648926, 2897017212) + elseif choice == 3 then + PlayFlavor(NPC, "voiceover/english/optional3/darkelf_base_2/ft/darkelf/darkelf_base_2_1_aggro_gf_ded507db.mp3", "More intruders to deal with? Stop them!", "", 338410258, 2808797910) + elseif choice == 4 then + PlayFlavor(NPC, "voiceover/english/optional3/darkelf_base_2/ft/darkelf/darkelf_base_2_1_aggro_gf_fb890c79.mp3", "I have no time for meddlers. Destroy them!", "", 1947039155, 2094447273) + end + elseif GetRace(NPC) == OGRE then + PlayFlavor(NPC, "voiceover/english/optional3/ogre_base_2/ft/ogre/ogre_base_2_1_aggro_gf_d4cfd470.mp3", "Feel the might of Rallos!", "", 760635308, 455953200) + elseif GetRace(NPC) == TROLL then + local choice = math.random(1, 2) + if choice == 1 then + PlayFlavor(NPC, "voiceover/english/optional3/troll_base_1/ft/troll/troll_base_1_1_aggro_gf_d1a345c7.mp3", "I'm gonna give you a smile like ol' one tooth!", "", 1201784314, 2598207561) + elseif choice == 2 then + PlayFlavor(NPC, "voiceover/english/optional3/troll_base_2/ft/troll/troll_base_2_1_aggro_gf_62fd0e82.mp3", "What smells so good?", "", 3335229907, 713747453) + end + end + end + end +end + +function healthchanged(NPC, Spawn) + local hp_percent = GetHP(NPC) / GetMaxHP(NPC) + if hp_percent <= 0.50 and spoke == false then + spoke = true + if GetGender(NPC) == MALE then + if GetRace(NPC) == DARK_ELF then + local choice = math.random(1, 3) + if choice == 1 then + PlayFlavor(NPC, "voiceover/english/darkelf_base_1/ft/darkelf/darkelf_base_1_1_halfhealth_gm_577ab333.mp3", "You'll pay for that one, peon!", "", 1420508530, 39058961) + elseif choice == 2 then + PlayFlavor(NPC, "voiceover/english/darkelf_base_1/ft/darkelf/darkelf_base_1_1_halfhealth_gm_9e244d19.mp3", "How dare you!", "", 3305445355, 1846155898) + elseif choice == 3 then + PlayFlavor(NPC, "voiceover/english/optional3/darkelf_base_1/ft/darkelf/darkelf_base_1_3_halfhealth_gm_9e244d19.mp3", "How dare you!", "", 2287743179, 1322949627) + end + elseif GetRace(NPC) == OGRE then + local choice = math.random(1, 4) + if choice == 1 then + PlayFlavor(NPC, "voiceover/english/ogre_base_1/ft/ogre/ogre_base_1_1_halfhealth_gm_581c2926.mp3", "You'll pay for that!", "", 2366218696, 2114997045) + elseif choice == 2 then + PlayFlavor(NPC, "voiceover/english/ogre_base_1/ft/ogre/ogre_base_1_1_halfhealth_gm_aff2b15d.mp3", "Now I'm really angry!", "", 1599348947, 4096819162) + elseif choice == 3 then + PlayFlavor(NPC, "voiceover/english/optional3/ogre_base_2/ft/ogre/ogre_base_2_1_halfhealth_gm_1ad2d46f.mp3", "Your petty weapons are no match for me!", "", 2269900119, 3290320421) + elseif choice == 4 then + PlayFlavor(NPC, "voiceover/english/optional3/ogre_base_2/ft/ogre/ogre_base_2_1_halfhealth_gm_5a6c112c.mp3", "Agggggh! There is no pain only death and failure!", "", 2051650869, 1276361533) + end + elseif GetRace(NPC) == TROLL then + local choice = math.random(1, 2) + if choice == 1 then + PlayFlavor(NPC, "voiceover/english/optional3/troll_base_1/ft/troll/troll_base_1_1_halfhealth_gm_aa145f4d.mp3", "Neat, that'll leave a pretty scar", "", 675684950, 4088135432) + elseif choice == 2 then + PlayFlavor(NPC, "voiceover/english/optional3/troll_base_1/ft/troll/troll_base_1_1_halfhealth_gm_f462f6ff.mp3", "Is this supposed to hurt?", "", 4202180867, 1393988988) + end + end + elseif GetGender(NPC) == FEMALE then + if GetRace(NPC) == DARK_ELF then + local choice = math.random(1, 5) + if choice == 1 then + PlayFlavor(NPC, "voiceover/english/optional3/darkelf_base_1/ft/darkelf/darkelf_base_1_1_halfhealth_gf_577ab333.mp3", "You'll pay for that one, peon!", "", 2534123849, 501758946) + elseif choice == 2 then + PlayFlavor(NPC, "voiceover/english/optional3/darkelf_base_1/ft/darkelf/darkelf_base_1_1_halfhealth_gf_9e244d19.mp3", "How dare you!", "", 2905660023, 2043697886) + elseif choice == 3 then + PlayFlavor(NPC, "voiceover/english/optional3/darkelf_base_1/ft/darkelf/darkelf_base_1_2_halfhealth_gf_9e244d19.mp3", "How dare you!", "", 2263865273, 2956956838) + elseif choice == 4 then + PlayFlavor(NPC, "voiceover/english/optional3/darkelf_base_2/ft/darkelf/darkelf_base_2_1_halfhealth_gf_8d198fee.mp3", "You may escape, but we will find you!", "", 1924616636, 4174763308) + elseif choice == 5 then + PlayFlavor(NPC, "voiceover/english/optional3/darkelf_base_2/ft/darkelf/darkelf_base_2_1_halfhealth_gf_d3fcd4c5.mp3", "How dare you strike me!", "", 1224879133, 2564393271) + end + elseif GetRace(NPC) == OGRE then + local choice = math.random(1, 3) + if choice == 1 then + PlayFlavor(NPC, "voiceover/english/ogre_base_1/ft/ogre/ogre_base_1_1_halfhealth_gf_581c2926.mp3", "You'll pay for that!", "", 480032723, 3225416629) + elseif choice == 2 then + PlayFlavor(NPC, "voiceover/english/ogre_base_1/ft/ogre/ogre_base_1_1_halfhealth_gf_aff2b15d.mp3", "Now I'm really angry!", "", 3362643729, 1907494922) + elseif choice == 3 then + PlayFlavor(NPC, "voiceover/english/optional3/ogre_base_2/ft/ogre/ogre_base_2_1_halfhealth_gf_1ad2d46f.mp3", "Your petty weapons are no match for me!", "", 2285469219, 3359769172) + end + elseif GetRace(NPC) == TROLL then + local choice = math.random(1, 4) + if choice == 1 then + PlayFlavor(NPC, "voiceover/english/optional3/troll_base_1/ft/troll/troll_base_1_1_halfhealth_gf_aa145f4d.mp3", "Neat, that'll leave a pretty scar", "", 70455099, 2953679351) + elseif choice == 2 then + PlayFlavor(NPC, "voiceover/english/optional3/troll_base_1/ft/troll/troll_base_1_1_halfhealth_gf_f462f6ff.mp3", "Is this supposed to hurt?", "", 216769747, 692696120) + elseif choice == 3 then + PlayFlavor(NPC, "voiceover/english/optional3/troll_base_2/ft/troll/troll_base_2_1_halfhealth_gf_5ba543d6.mp3", "That'll grow back.", "", 4062170117, 809175527) + elseif choice == 4 then + PlayFlavor(NPC, "voiceover/english/optional3/troll_base_2/ft/troll/troll_base_2_1_halfhealth_gf_9e239695.mp3", "I can taste my own blood.", "", 630688016, 620713228) + end + end + end + AddTimer(NPC, 30000, "ResetSpoke") + end +end + +function ResetSpoke(NPC) + spoke = false +end + +function killed(NPC, Spawn) + local chance = math.random(1, 100) + if chance <= 25 then + if GetGender(NPC) == MALE then + if GetRace(NPC) == DARK_ELF then + local choice = math.random(1, 3) + if choice == 1 then + PlayFlavor(NPC, "voiceover/english/darkelf_base_1/ft/darkelf/darkelf_base_1_1_victory_gm_dff26fa.mp3", "It is a shame we must end it this way ... I could have used you.", "", 1363661737, 942201815) + elseif choice == 2 then + PlayFlavor(NPC, "voiceover/english/darkelf_base_1/ft/darkelf/darkelf_base_1_1_victory_gm_f4fc7cf8.mp3", "Did you really think you had a chance?", "", 607143583, 3133144305) + elseif choice == 3 then + PlayFlavor(NPC, "voiceover/english/darkelf_base_1/ft/darkelf/darkelf_base_1_1_victory_gm_f5088778.mp3", "Get up! Death isn't good enough for you!", "", 3381713633, 2145918189) + end + elseif GetRace(NPC) == OGRE then + PlayFlavor(NPC, "voiceover/english/optional3/ogre_base_2/ft/ogre/ogre_base_2_1_victory_gm_1de29528.mp3", "Death was your only escape from me, coward!", "", 3626940960, 2890932770) + elseif GetRace(NPC) == TROLL then + PlayFlavor(NPC, "voiceover/english/optional3/troll_base_1/ft/troll/troll_base_1_1_victory_gm_ae6d66e3.mp3", "Teach you to mess with the best.", "", 927528340, 2751002174) + end + elseif GetGender(NPC) == FEMALE then + if GetRace(NPC) == DARK_ELF then + elseif GetRace(NPC) == OGRE then + elseif GetRace(NPC) == TROLL then + end + end + end +end + +function death(NPC, Spawn) + spoke = false + local chance = math.random(1, 100) + if chance <= 25 then + if GetGender(NPC) == MALE then + if GetRace(NPC) == DARK_ELF then + PlayFlavor(NPC, "voiceover/english/darkelf_base_1/ft/darkelf/darkelf_base_1_1_death_gm_8d7bb2b9.mp3", "Hold them and I'll return with help!", "", 2338278515, 1160150777) + elseif GetRace(NPC) == OGRE then + elseif GetRace(NPC) == TROLL then + end + elseif GetGender(NPC) == FEMALE then + if GetRace(NPC) == DARK_ELF then + local choice = math.random(1, 2) + if choice == 1 then + PlayFlavor(NPC, "voiceover/english/ghost_darkelf_base_1/ft/ghost/ghost_darkelf_base_1_1_death_gf_b5958785.mp3", "Hold them and I'll return with others like us!", "", 3769472925, 2964757475) + elseif choice == 2 then + PlayFlavor(NPC, "voiceover/english/optional3/darkelf_base_2/ft/darkelf/darkelf_base_2_1_death_gf_8bbec3e3.mp3", "No matter what I promise, you will not survive!", "", 2832420662, 2950405548) + end + elseif GetRace(NPC) == OGRE then + PlayFlavor(NPC, "voiceover/english/optional3/ghost_ogre_base_2/ft/ghost/ghost_ogre_base_2_1_death_gf_198e9f92.mp3", "Release comes to the favored.", "", 1658205865, 949237847) + elseif GetRace(NPC) == TROLL then + end + end + end +end \ No newline at end of file diff --git a/server/SpawnScripts/SunkenCity/aBlackshieldpillager.lua b/server/SpawnScripts/SunkenCity/aBlackshieldpillager.lua new file mode 100644 index 000000000..77089fa2b --- /dev/null +++ b/server/SpawnScripts/SunkenCity/aBlackshieldpillager.lua @@ -0,0 +1,200 @@ +--[[ + Script Name : SpawnScripts/SunkenCity/aBlackshieldpillager.lua + Script Purpose : a Blackshield pillager + Script Author : Scatman + Script Date : 2009.08.01 + Script Notes : +--]] + +local MALE = 1 +local FEMALE = 2 +local DARK_ELF = 1 +local OGRE = 12 +local TROLL = 14 +local spoke = false + +function spawn(NPC) + spoke = false +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) +end + +function aggro(NPC, Spawn) + local chance = math.random(1, 100) + if chance <= 25 then + if GetGender(NPC) == MALE then + if GetRace(NPC) == DARK_ELF then + local choice = math.random(1, 4) + if choice == 1 then + PlayFlavor(NPC, "voiceover/english/darkelf_base_1/ft/darkelf/darkelf_base_1_1_aggro_gm_10fd87eb.mp3", "There is no escape for you now!", "", 2989643101, 2260454555) + elseif choice == 2 then + PlayFlavor(NPC, "voiceover/english/darkelf_base_1/ft/darkelf/darkelf_base_1_1_aggro_gm_beacbb30.mp3", "I hope you put your affairs in order.", "", 799093996, 16617637) + elseif choice == 3 then + PlayFlavor(NPC, "voiceover/english/darkelf_base_1/ft/darkelf/darkelf_base_1_1_aggro_gm_fe18133.mp3", "Look what strolled into the spider's web!", "", 4178015902, 2202039151) + elseif choice == 4 then + PlayFlavor(NPC, "voiceover/english/optional3/darkelf_base_1/ft/darkelf/darkelf_base_1_3_aggro_gm_10fd87eb.mp3", "There is no escape for you now!", "", 3427660043, 2534456197) + end + elseif GetRace(NPC) == OGRE then + elseif GetRace(NPC) == TROLL then + end + elseif GetGender(NPC) == FEMALE then + if GetRace(NPC) == DARK_ELF then + local choice = math.random(1, 4) + if choice == 1 then + PlayFlavor(NPC, "voiceover/english/optional3/darkelf_base_1/ft/darkelf/darkelf_base_1_1_aggro_gf_10fd87eb.mp3", "There is no escape for you now!", "", 3641868496, 1960514853) + elseif choice == 2 then + PlayFlavor(NPC, "voiceover/english/optional3/darkelf_base_2/ft/darkelf/darkelf_base_2_1_aggro_gf_8e7390a8.mp3", "Welcome to torment and destruction!", "", 3770648926, 2897017212) + elseif choice == 3 then + PlayFlavor(NPC, "voiceover/english/optional3/darkelf_base_2/ft/darkelf/darkelf_base_2_1_aggro_gf_ded507db.mp3", "More intruders to deal with? Stop them!", "", 338410258, 2808797910) + elseif choice == 4 then + PlayFlavor(NPC, "voiceover/english/optional3/darkelf_base_2/ft/darkelf/darkelf_base_2_1_aggro_gf_fb890c79.mp3", "I have no time for meddlers. Destroy them!", "", 1947039155, 2094447273) + end + elseif GetRace(NPC) == OGRE then + PlayFlavor(NPC, "voiceover/english/optional3/ogre_base_2/ft/ogre/ogre_base_2_1_aggro_gf_d4cfd470.mp3", "Feel the might of Rallos!", "", 760635308, 455953200) + elseif GetRace(NPC) == TROLL then + local choice = math.random(1, 2) + if choice == 1 then + PlayFlavor(NPC, "voiceover/english/optional3/troll_base_1/ft/troll/troll_base_1_1_aggro_gf_d1a345c7.mp3", "I'm gonna give you a smile like ol' one tooth!", "", 1201784314, 2598207561) + elseif choice == 2 then + PlayFlavor(NPC, "voiceover/english/optional3/troll_base_2/ft/troll/troll_base_2_1_aggro_gf_62fd0e82.mp3", "What smells so good?", "", 3335229907, 713747453) + end + end + end + end +end + +function healthchanged(NPC, Spawn) + local hp_percent = GetHP(NPC) / GetMaxHP(NPC) + if hp_percent <= 0.50 and spoke == false then + spoke = true + if GetGender(NPC) == MALE then + if GetRace(NPC) == DARK_ELF then + local choice = math.random(1, 3) + if choice == 1 then + PlayFlavor(NPC, "voiceover/english/darkelf_base_1/ft/darkelf/darkelf_base_1_1_halfhealth_gm_577ab333.mp3", "You'll pay for that one, peon!", "", 1420508530, 39058961) + elseif choice == 2 then + PlayFlavor(NPC, "voiceover/english/darkelf_base_1/ft/darkelf/darkelf_base_1_1_halfhealth_gm_9e244d19.mp3", "How dare you!", "", 3305445355, 1846155898) + elseif choice == 3 then + PlayFlavor(NPC, "voiceover/english/optional3/darkelf_base_1/ft/darkelf/darkelf_base_1_3_halfhealth_gm_9e244d19.mp3", "How dare you!", "", 2287743179, 1322949627) + end + elseif GetRace(NPC) == OGRE then + local choice = math.random(1, 4) + if choice == 1 then + PlayFlavor(NPC, "voiceover/english/ogre_base_1/ft/ogre/ogre_base_1_1_halfhealth_gm_581c2926.mp3", "You'll pay for that!", "", 2366218696, 2114997045) + elseif choice == 2 then + PlayFlavor(NPC, "voiceover/english/ogre_base_1/ft/ogre/ogre_base_1_1_halfhealth_gm_aff2b15d.mp3", "Now I'm really angry!", "", 1599348947, 4096819162) + elseif choice == 3 then + PlayFlavor(NPC, "voiceover/english/optional3/ogre_base_2/ft/ogre/ogre_base_2_1_halfhealth_gm_1ad2d46f.mp3", "Your petty weapons are no match for me!", "", 2269900119, 3290320421) + elseif choice == 4 then + PlayFlavor(NPC, "voiceover/english/optional3/ogre_base_2/ft/ogre/ogre_base_2_1_halfhealth_gm_5a6c112c.mp3", "Agggggh! There is no pain only death and failure!", "", 2051650869, 1276361533) + end + elseif GetRace(NPC) == TROLL then + local choice = math.random(1, 2) + if choice == 1 then + PlayFlavor(NPC, "voiceover/english/optional3/troll_base_1/ft/troll/troll_base_1_1_halfhealth_gm_aa145f4d.mp3", "Neat, that'll leave a pretty scar", "", 675684950, 4088135432) + elseif choice == 2 then + PlayFlavor(NPC, "voiceover/english/optional3/troll_base_1/ft/troll/troll_base_1_1_halfhealth_gm_f462f6ff.mp3", "Is this supposed to hurt?", "", 4202180867, 1393988988) + end + end + elseif GetGender(NPC) == FEMALE then + if GetRace(NPC) == DARK_ELF then + local choice = math.random(1, 5) + if choice == 1 then + PlayFlavor(NPC, "voiceover/english/optional3/darkelf_base_1/ft/darkelf/darkelf_base_1_1_halfhealth_gf_577ab333.mp3", "You'll pay for that one, peon!", "", 2534123849, 501758946) + elseif choice == 2 then + PlayFlavor(NPC, "voiceover/english/optional3/darkelf_base_1/ft/darkelf/darkelf_base_1_1_halfhealth_gf_9e244d19.mp3", "How dare you!", "", 2905660023, 2043697886) + elseif choice == 3 then + PlayFlavor(NPC, "voiceover/english/optional3/darkelf_base_1/ft/darkelf/darkelf_base_1_2_halfhealth_gf_9e244d19.mp3", "How dare you!", "", 2263865273, 2956956838) + elseif choice == 4 then + PlayFlavor(NPC, "voiceover/english/optional3/darkelf_base_2/ft/darkelf/darkelf_base_2_1_halfhealth_gf_8d198fee.mp3", "You may escape, but we will find you!", "", 1924616636, 4174763308) + elseif choice == 5 then + PlayFlavor(NPC, "voiceover/english/optional3/darkelf_base_2/ft/darkelf/darkelf_base_2_1_halfhealth_gf_d3fcd4c5.mp3", "How dare you strike me!", "", 1224879133, 2564393271) + end + elseif GetRace(NPC) == OGRE then + local choice = math.random(1, 3) + if choice == 1 then + PlayFlavor(NPC, "voiceover/english/ogre_base_1/ft/ogre/ogre_base_1_1_halfhealth_gf_581c2926.mp3", "You'll pay for that!", "", 480032723, 3225416629) + elseif choice == 2 then + PlayFlavor(NPC, "voiceover/english/ogre_base_1/ft/ogre/ogre_base_1_1_halfhealth_gf_aff2b15d.mp3", "Now I'm really angry!", "", 3362643729, 1907494922) + elseif choice == 3 then + PlayFlavor(NPC, "voiceover/english/optional3/ogre_base_2/ft/ogre/ogre_base_2_1_halfhealth_gf_1ad2d46f.mp3", "Your petty weapons are no match for me!", "", 2285469219, 3359769172) + end + elseif GetRace(NPC) == TROLL then + local choice = math.random(1, 4) + if choice == 1 then + PlayFlavor(NPC, "voiceover/english/optional3/troll_base_1/ft/troll/troll_base_1_1_halfhealth_gf_aa145f4d.mp3", "Neat, that'll leave a pretty scar", "", 70455099, 2953679351) + elseif choice == 2 then + PlayFlavor(NPC, "voiceover/english/optional3/troll_base_1/ft/troll/troll_base_1_1_halfhealth_gf_f462f6ff.mp3", "Is this supposed to hurt?", "", 216769747, 692696120) + elseif choice == 3 then + PlayFlavor(NPC, "voiceover/english/optional3/troll_base_2/ft/troll/troll_base_2_1_halfhealth_gf_5ba543d6.mp3", "That'll grow back.", "", 4062170117, 809175527) + elseif choice == 4 then + PlayFlavor(NPC, "voiceover/english/optional3/troll_base_2/ft/troll/troll_base_2_1_halfhealth_gf_9e239695.mp3", "I can taste my own blood.", "", 630688016, 620713228) + end + end + end + AddTimer(NPC, 30000, "ResetSpoke") + end +end + +function ResetSpoke(NPC) + spoke = false +end + +function killed(NPC, Spawn) + local chance = math.random(1, 100) + if chance <= 25 then + if GetGender(NPC) == MALE then + if GetRace(NPC) == DARK_ELF then + local choice = math.random(1, 3) + if choice == 1 then + PlayFlavor(NPC, "voiceover/english/darkelf_base_1/ft/darkelf/darkelf_base_1_1_victory_gm_dff26fa.mp3", "It is a shame we must end it this way ... I could have used you.", "", 1363661737, 942201815) + elseif choice == 2 then + PlayFlavor(NPC, "voiceover/english/darkelf_base_1/ft/darkelf/darkelf_base_1_1_victory_gm_f4fc7cf8.mp3", "Did you really think you had a chance?", "", 607143583, 3133144305) + elseif choice == 3 then + PlayFlavor(NPC, "voiceover/english/darkelf_base_1/ft/darkelf/darkelf_base_1_1_victory_gm_f5088778.mp3", "Get up! Death isn't good enough for you!", "", 3381713633, 2145918189) + end + elseif GetRace(NPC) == OGRE then + PlayFlavor(NPC, "voiceover/english/optional3/ogre_base_2/ft/ogre/ogre_base_2_1_victory_gm_1de29528.mp3", "Death was your only escape from me, coward!", "", 3626940960, 2890932770) + elseif GetRace(NPC) == TROLL then + PlayFlavor(NPC, "voiceover/english/optional3/troll_base_1/ft/troll/troll_base_1_1_victory_gm_ae6d66e3.mp3", "Teach you to mess with the best.", "", 927528340, 2751002174) + end + elseif GetGender(NPC) == FEMALE then + if GetRace(NPC) == DARK_ELF then + elseif GetRace(NPC) == OGRE then + elseif GetRace(NPC) == TROLL then + end + end + end +end + +function death(NPC, Spawn) + spoke = false + local chance = math.random(1, 100) + if chance <= 25 then + if GetGender(NPC) == MALE then + if GetRace(NPC) == DARK_ELF then + PlayFlavor(NPC, "voiceover/english/darkelf_base_1/ft/darkelf/darkelf_base_1_1_death_gm_8d7bb2b9.mp3", "Hold them and I'll return with help!", "", 2338278515, 1160150777) + elseif GetRace(NPC) == OGRE then + elseif GetRace(NPC) == TROLL then + end + elseif GetGender(NPC) == FEMALE then + if GetRace(NPC) == DARK_ELF then + local choice = math.random(1, 2) + if choice == 1 then + PlayFlavor(NPC, "voiceover/english/ghost_darkelf_base_1/ft/ghost/ghost_darkelf_base_1_1_death_gf_b5958785.mp3", "Hold them and I'll return with others like us!", "", 3769472925, 2964757475) + elseif choice == 2 then + PlayFlavor(NPC, "voiceover/english/optional3/darkelf_base_2/ft/darkelf/darkelf_base_2_1_death_gf_8bbec3e3.mp3", "No matter what I promise, you will not survive!", "", 2832420662, 2950405548) + end + elseif GetRace(NPC) == OGRE then + PlayFlavor(NPC, "voiceover/english/optional3/ghost_ogre_base_2/ft/ghost/ghost_ogre_base_2_1_death_gf_198e9f92.mp3", "Release comes to the favored.", "", 1658205865, 949237847) + elseif GetRace(NPC) == TROLL then + end + end + end +end \ No newline at end of file diff --git a/server/SpawnScripts/SunkenCity/aBlackshieldpirate.lua b/server/SpawnScripts/SunkenCity/aBlackshieldpirate.lua new file mode 100644 index 000000000..cecffe510 --- /dev/null +++ b/server/SpawnScripts/SunkenCity/aBlackshieldpirate.lua @@ -0,0 +1,200 @@ +--[[ + Script Name : SpawnScripts/SunkenCity/aBlackshieldpirate.lua + Script Purpose : a Blackshield pirate + Script Author : Scatman + Script Date : 2009.08.01 + Script Notes : +--]] + +local MALE = 1 +local FEMALE = 2 +local DARK_ELF = 1 +local OGRE = 12 +local TROLL = 14 +local spoke = false + +function spawn(NPC) + spoke = false +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) +end + +function aggro(NPC, Spawn) + local chance = math.random(1, 100) + if chance <= 25 then + if GetGender(NPC) == MALE then + if GetRace(NPC) == DARK_ELF then + local choice = math.random(1, 4) + if choice == 1 then + PlayFlavor(NPC, "voiceover/english/darkelf_base_1/ft/darkelf/darkelf_base_1_1_aggro_gm_10fd87eb.mp3", "There is no escape for you now!", "", 2989643101, 2260454555) + elseif choice == 2 then + PlayFlavor(NPC, "voiceover/english/darkelf_base_1/ft/darkelf/darkelf_base_1_1_aggro_gm_beacbb30.mp3", "I hope you put your affairs in order.", "", 799093996, 16617637) + elseif choice == 3 then + PlayFlavor(NPC, "voiceover/english/darkelf_base_1/ft/darkelf/darkelf_base_1_1_aggro_gm_fe18133.mp3", "Look what strolled into the spider's web!", "", 4178015902, 2202039151) + elseif choice == 4 then + PlayFlavor(NPC, "voiceover/english/optional3/darkelf_base_1/ft/darkelf/darkelf_base_1_3_aggro_gm_10fd87eb.mp3", "There is no escape for you now!", "", 3427660043, 2534456197) + end + elseif GetRace(NPC) == OGRE then + elseif GetRace(NPC) == TROLL then + end + elseif GetGender(NPC) == FEMALE then + if GetRace(NPC) == DARK_ELF then + local choice = math.random(1, 4) + if choice == 1 then + PlayFlavor(NPC, "voiceover/english/optional3/darkelf_base_1/ft/darkelf/darkelf_base_1_1_aggro_gf_10fd87eb.mp3", "There is no escape for you now!", "", 3641868496, 1960514853) + elseif choice == 2 then + PlayFlavor(NPC, "voiceover/english/optional3/darkelf_base_2/ft/darkelf/darkelf_base_2_1_aggro_gf_8e7390a8.mp3", "Welcome to torment and destruction!", "", 3770648926, 2897017212) + elseif choice == 3 then + PlayFlavor(NPC, "voiceover/english/optional3/darkelf_base_2/ft/darkelf/darkelf_base_2_1_aggro_gf_ded507db.mp3", "More intruders to deal with? Stop them!", "", 338410258, 2808797910) + elseif choice == 4 then + PlayFlavor(NPC, "voiceover/english/optional3/darkelf_base_2/ft/darkelf/darkelf_base_2_1_aggro_gf_fb890c79.mp3", "I have no time for meddlers. Destroy them!", "", 1947039155, 2094447273) + end + elseif GetRace(NPC) == OGRE then + PlayFlavor(NPC, "voiceover/english/optional3/ogre_base_2/ft/ogre/ogre_base_2_1_aggro_gf_d4cfd470.mp3", "Feel the might of Rallos!", "", 760635308, 455953200) + elseif GetRace(NPC) == TROLL then + local choice = math.random(1, 2) + if choice == 1 then + PlayFlavor(NPC, "voiceover/english/optional3/troll_base_1/ft/troll/troll_base_1_1_aggro_gf_d1a345c7.mp3", "I'm gonna give you a smile like ol' one tooth!", "", 1201784314, 2598207561) + elseif choice == 2 then + PlayFlavor(NPC, "voiceover/english/optional3/troll_base_2/ft/troll/troll_base_2_1_aggro_gf_62fd0e82.mp3", "What smells so good?", "", 3335229907, 713747453) + end + end + end + end +end + +function healthchanged(NPC, Spawn) + local hp_percent = GetHP(NPC) / GetMaxHP(NPC) + if hp_percent <= 0.50 and spoke == false then + spoke = true + if GetGender(NPC) == MALE then + if GetRace(NPC) == DARK_ELF then + local choice = math.random(1, 3) + if choice == 1 then + PlayFlavor(NPC, "voiceover/english/darkelf_base_1/ft/darkelf/darkelf_base_1_1_halfhealth_gm_577ab333.mp3", "You'll pay for that one, peon!", "", 1420508530, 39058961) + elseif choice == 2 then + PlayFlavor(NPC, "voiceover/english/darkelf_base_1/ft/darkelf/darkelf_base_1_1_halfhealth_gm_9e244d19.mp3", "How dare you!", "", 3305445355, 1846155898) + elseif choice == 3 then + PlayFlavor(NPC, "voiceover/english/optional3/darkelf_base_1/ft/darkelf/darkelf_base_1_3_halfhealth_gm_9e244d19.mp3", "How dare you!", "", 2287743179, 1322949627) + end + elseif GetRace(NPC) == OGRE then + local choice = math.random(1, 4) + if choice == 1 then + PlayFlavor(NPC, "voiceover/english/ogre_base_1/ft/ogre/ogre_base_1_1_halfhealth_gm_581c2926.mp3", "You'll pay for that!", "", 2366218696, 2114997045) + elseif choice == 2 then + PlayFlavor(NPC, "voiceover/english/ogre_base_1/ft/ogre/ogre_base_1_1_halfhealth_gm_aff2b15d.mp3", "Now I'm really angry!", "", 1599348947, 4096819162) + elseif choice == 3 then + PlayFlavor(NPC, "voiceover/english/optional3/ogre_base_2/ft/ogre/ogre_base_2_1_halfhealth_gm_1ad2d46f.mp3", "Your petty weapons are no match for me!", "", 2269900119, 3290320421) + elseif choice == 4 then + PlayFlavor(NPC, "voiceover/english/optional3/ogre_base_2/ft/ogre/ogre_base_2_1_halfhealth_gm_5a6c112c.mp3", "Agggggh! There is no pain only death and failure!", "", 2051650869, 1276361533) + end + elseif GetRace(NPC) == TROLL then + local choice = math.random(1, 2) + if choice == 1 then + PlayFlavor(NPC, "voiceover/english/optional3/troll_base_1/ft/troll/troll_base_1_1_halfhealth_gm_aa145f4d.mp3", "Neat, that'll leave a pretty scar", "", 675684950, 4088135432) + elseif choice == 2 then + PlayFlavor(NPC, "voiceover/english/optional3/troll_base_1/ft/troll/troll_base_1_1_halfhealth_gm_f462f6ff.mp3", "Is this supposed to hurt?", "", 4202180867, 1393988988) + end + end + elseif GetGender(NPC) == FEMALE then + if GetRace(NPC) == DARK_ELF then + local choice = math.random(1, 5) + if choice == 1 then + PlayFlavor(NPC, "voiceover/english/optional3/darkelf_base_1/ft/darkelf/darkelf_base_1_1_halfhealth_gf_577ab333.mp3", "You'll pay for that one, peon!", "", 2534123849, 501758946) + elseif choice == 2 then + PlayFlavor(NPC, "voiceover/english/optional3/darkelf_base_1/ft/darkelf/darkelf_base_1_1_halfhealth_gf_9e244d19.mp3", "How dare you!", "", 2905660023, 2043697886) + elseif choice == 3 then + PlayFlavor(NPC, "voiceover/english/optional3/darkelf_base_1/ft/darkelf/darkelf_base_1_2_halfhealth_gf_9e244d19.mp3", "How dare you!", "", 2263865273, 2956956838) + elseif choice == 4 then + PlayFlavor(NPC, "voiceover/english/optional3/darkelf_base_2/ft/darkelf/darkelf_base_2_1_halfhealth_gf_8d198fee.mp3", "You may escape, but we will find you!", "", 1924616636, 4174763308) + elseif choice == 5 then + PlayFlavor(NPC, "voiceover/english/optional3/darkelf_base_2/ft/darkelf/darkelf_base_2_1_halfhealth_gf_d3fcd4c5.mp3", "How dare you strike me!", "", 1224879133, 2564393271) + end + elseif GetRace(NPC) == OGRE then + local choice = math.random(1, 3) + if choice == 1 then + PlayFlavor(NPC, "voiceover/english/ogre_base_1/ft/ogre/ogre_base_1_1_halfhealth_gf_581c2926.mp3", "You'll pay for that!", "", 480032723, 3225416629) + elseif choice == 2 then + PlayFlavor(NPC, "voiceover/english/ogre_base_1/ft/ogre/ogre_base_1_1_halfhealth_gf_aff2b15d.mp3", "Now I'm really angry!", "", 3362643729, 1907494922) + elseif choice == 3 then + PlayFlavor(NPC, "voiceover/english/optional3/ogre_base_2/ft/ogre/ogre_base_2_1_halfhealth_gf_1ad2d46f.mp3", "Your petty weapons are no match for me!", "", 2285469219, 3359769172) + end + elseif GetRace(NPC) == TROLL then + local choice = math.random(1, 4) + if choice == 1 then + PlayFlavor(NPC, "voiceover/english/optional3/troll_base_1/ft/troll/troll_base_1_1_halfhealth_gf_aa145f4d.mp3", "Neat, that'll leave a pretty scar", "", 70455099, 2953679351) + elseif choice == 2 then + PlayFlavor(NPC, "voiceover/english/optional3/troll_base_1/ft/troll/troll_base_1_1_halfhealth_gf_f462f6ff.mp3", "Is this supposed to hurt?", "", 216769747, 692696120) + elseif choice == 3 then + PlayFlavor(NPC, "voiceover/english/optional3/troll_base_2/ft/troll/troll_base_2_1_halfhealth_gf_5ba543d6.mp3", "That'll grow back.", "", 4062170117, 809175527) + elseif choice == 4 then + PlayFlavor(NPC, "voiceover/english/optional3/troll_base_2/ft/troll/troll_base_2_1_halfhealth_gf_9e239695.mp3", "I can taste my own blood.", "", 630688016, 620713228) + end + end + end + AddTimer(NPC, 30000, "ResetSpoke") + end +end + +function ResetSpoke(NPC) + spoke = false +end + +function killed(NPC, Spawn) + local chance = math.random(1, 100) + if chance <= 25 then + if GetGender(NPC) == MALE then + if GetRace(NPC) == DARK_ELF then + local choice = math.random(1, 3) + if choice == 1 then + PlayFlavor(NPC, "voiceover/english/darkelf_base_1/ft/darkelf/darkelf_base_1_1_victory_gm_dff26fa.mp3", "It is a shame we must end it this way ... I could have used you.", "", 1363661737, 942201815) + elseif choice == 2 then + PlayFlavor(NPC, "voiceover/english/darkelf_base_1/ft/darkelf/darkelf_base_1_1_victory_gm_f4fc7cf8.mp3", "Did you really think you had a chance?", "", 607143583, 3133144305) + elseif choice == 3 then + PlayFlavor(NPC, "voiceover/english/darkelf_base_1/ft/darkelf/darkelf_base_1_1_victory_gm_f5088778.mp3", "Get up! Death isn't good enough for you!", "", 3381713633, 2145918189) + end + elseif GetRace(NPC) == OGRE then + PlayFlavor(NPC, "voiceover/english/optional3/ogre_base_2/ft/ogre/ogre_base_2_1_victory_gm_1de29528.mp3", "Death was your only escape from me, coward!", "", 3626940960, 2890932770) + elseif GetRace(NPC) == TROLL then + PlayFlavor(NPC, "voiceover/english/optional3/troll_base_1/ft/troll/troll_base_1_1_victory_gm_ae6d66e3.mp3", "Teach you to mess with the best.", "", 927528340, 2751002174) + end + elseif GetGender(NPC) == FEMALE then + if GetRace(NPC) == DARK_ELF then + elseif GetRace(NPC) == OGRE then + elseif GetRace(NPC) == TROLL then + end + end + end +end + +function death(NPC, Spawn) + spoke = false + local chance = math.random(1, 100) + if chance <= 25 then + if GetGender(NPC) == MALE then + if GetRace(NPC) == DARK_ELF then + PlayFlavor(NPC, "voiceover/english/darkelf_base_1/ft/darkelf/darkelf_base_1_1_death_gm_8d7bb2b9.mp3", "Hold them and I'll return with help!", "", 2338278515, 1160150777) + elseif GetRace(NPC) == OGRE then + elseif GetRace(NPC) == TROLL then + end + elseif GetGender(NPC) == FEMALE then + if GetRace(NPC) == DARK_ELF then + local choice = math.random(1, 2) + if choice == 1 then + PlayFlavor(NPC, "voiceover/english/ghost_darkelf_base_1/ft/ghost/ghost_darkelf_base_1_1_death_gf_b5958785.mp3", "Hold them and I'll return with others like us!", "", 3769472925, 2964757475) + elseif choice == 2 then + PlayFlavor(NPC, "voiceover/english/optional3/darkelf_base_2/ft/darkelf/darkelf_base_2_1_death_gf_8bbec3e3.mp3", "No matter what I promise, you will not survive!", "", 2832420662, 2950405548) + end + elseif GetRace(NPC) == OGRE then + PlayFlavor(NPC, "voiceover/english/optional3/ghost_ogre_base_2/ft/ghost/ghost_ogre_base_2_1_death_gf_198e9f92.mp3", "Release comes to the favored.", "", 1658205865, 949237847) + elseif GetRace(NPC) == TROLL then + end + end + end +end \ No newline at end of file diff --git a/server/SpawnScripts/SunkenCity/aBlackshieldplunderer.lua b/server/SpawnScripts/SunkenCity/aBlackshieldplunderer.lua new file mode 100644 index 000000000..8ea501f41 --- /dev/null +++ b/server/SpawnScripts/SunkenCity/aBlackshieldplunderer.lua @@ -0,0 +1,200 @@ +--[[ + Script Name : SpawnScripts/SunkenCity/aBlackshieldpunderer.lua + Script Purpose : a Blackshield plunderer + Script Author : Scatman + Script Date : 2009.08.01 + Script Notes : +--]] + +local MALE = 1 +local FEMALE = 2 +local DARK_ELF = 1 +local OGRE = 12 +local TROLL = 14 +local spoke = false + +function spawn(NPC) + spoke = false +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) +end + +function aggro(NPC, Spawn) + local chance = math.random(1, 100) + if chance <= 25 then + if GetGender(NPC) == MALE then + if GetRace(NPC) == DARK_ELF then + local choice = math.random(1, 4) + if choice == 1 then + PlayFlavor(NPC, "voiceover/english/darkelf_base_1/ft/darkelf/darkelf_base_1_1_aggro_gm_10fd87eb.mp3", "There is no escape for you now!", "", 2989643101, 2260454555) + elseif choice == 2 then + PlayFlavor(NPC, "voiceover/english/darkelf_base_1/ft/darkelf/darkelf_base_1_1_aggro_gm_beacbb30.mp3", "I hope you put your affairs in order.", "", 799093996, 16617637) + elseif choice == 3 then + PlayFlavor(NPC, "voiceover/english/darkelf_base_1/ft/darkelf/darkelf_base_1_1_aggro_gm_fe18133.mp3", "Look what strolled into the spider's web!", "", 4178015902, 2202039151) + elseif choice == 4 then + PlayFlavor(NPC, "voiceover/english/optional3/darkelf_base_1/ft/darkelf/darkelf_base_1_3_aggro_gm_10fd87eb.mp3", "There is no escape for you now!", "", 3427660043, 2534456197) + end + elseif GetRace(NPC) == OGRE then + elseif GetRace(NPC) == TROLL then + end + elseif GetGender(NPC) == FEMALE then + if GetRace(NPC) == DARK_ELF then + local choice = math.random(1, 4) + if choice == 1 then + PlayFlavor(NPC, "voiceover/english/optional3/darkelf_base_1/ft/darkelf/darkelf_base_1_1_aggro_gf_10fd87eb.mp3", "There is no escape for you now!", "", 3641868496, 1960514853) + elseif choice == 2 then + PlayFlavor(NPC, "voiceover/english/optional3/darkelf_base_2/ft/darkelf/darkelf_base_2_1_aggro_gf_8e7390a8.mp3", "Welcome to torment and destruction!", "", 3770648926, 2897017212) + elseif choice == 3 then + PlayFlavor(NPC, "voiceover/english/optional3/darkelf_base_2/ft/darkelf/darkelf_base_2_1_aggro_gf_ded507db.mp3", "More intruders to deal with? Stop them!", "", 338410258, 2808797910) + elseif choice == 4 then + PlayFlavor(NPC, "voiceover/english/optional3/darkelf_base_2/ft/darkelf/darkelf_base_2_1_aggro_gf_fb890c79.mp3", "I have no time for meddlers. Destroy them!", "", 1947039155, 2094447273) + end + elseif GetRace(NPC) == OGRE then + PlayFlavor(NPC, "voiceover/english/optional3/ogre_base_2/ft/ogre/ogre_base_2_1_aggro_gf_d4cfd470.mp3", "Feel the might of Rallos!", "", 760635308, 455953200) + elseif GetRace(NPC) == TROLL then + local choice = math.random(1, 2) + if choice == 1 then + PlayFlavor(NPC, "voiceover/english/optional3/troll_base_1/ft/troll/troll_base_1_1_aggro_gf_d1a345c7.mp3", "I'm gonna give you a smile like ol' one tooth!", "", 1201784314, 2598207561) + elseif choice == 2 then + PlayFlavor(NPC, "voiceover/english/optional3/troll_base_2/ft/troll/troll_base_2_1_aggro_gf_62fd0e82.mp3", "What smells so good?", "", 3335229907, 713747453) + end + end + end + end +end + +function healthchanged(NPC, Spawn) + local hp_percent = GetHP(NPC) / GetMaxHP(NPC) + if hp_percent <= 0.50 and spoke == false then + spoke = true + if GetGender(NPC) == MALE then + if GetRace(NPC) == DARK_ELF then + local choice = math.random(1, 3) + if choice == 1 then + PlayFlavor(NPC, "voiceover/english/darkelf_base_1/ft/darkelf/darkelf_base_1_1_halfhealth_gm_577ab333.mp3", "You'll pay for that one, peon!", "", 1420508530, 39058961) + elseif choice == 2 then + PlayFlavor(NPC, "voiceover/english/darkelf_base_1/ft/darkelf/darkelf_base_1_1_halfhealth_gm_9e244d19.mp3", "How dare you!", "", 3305445355, 1846155898) + elseif choice == 3 then + PlayFlavor(NPC, "voiceover/english/optional3/darkelf_base_1/ft/darkelf/darkelf_base_1_3_halfhealth_gm_9e244d19.mp3", "How dare you!", "", 2287743179, 1322949627) + end + elseif GetRace(NPC) == OGRE then + local choice = math.random(1, 4) + if choice == 1 then + PlayFlavor(NPC, "voiceover/english/ogre_base_1/ft/ogre/ogre_base_1_1_halfhealth_gm_581c2926.mp3", "You'll pay for that!", "", 2366218696, 2114997045) + elseif choice == 2 then + PlayFlavor(NPC, "voiceover/english/ogre_base_1/ft/ogre/ogre_base_1_1_halfhealth_gm_aff2b15d.mp3", "Now I'm really angry!", "", 1599348947, 4096819162) + elseif choice == 3 then + PlayFlavor(NPC, "voiceover/english/optional3/ogre_base_2/ft/ogre/ogre_base_2_1_halfhealth_gm_1ad2d46f.mp3", "Your petty weapons are no match for me!", "", 2269900119, 3290320421) + elseif choice == 4 then + PlayFlavor(NPC, "voiceover/english/optional3/ogre_base_2/ft/ogre/ogre_base_2_1_halfhealth_gm_5a6c112c.mp3", "Agggggh! There is no pain only death and failure!", "", 2051650869, 1276361533) + end + elseif GetRace(NPC) == TROLL then + local choice = math.random(1, 2) + if choice == 1 then + PlayFlavor(NPC, "voiceover/english/optional3/troll_base_1/ft/troll/troll_base_1_1_halfhealth_gm_aa145f4d.mp3", "Neat, that'll leave a pretty scar", "", 675684950, 4088135432) + elseif choice == 2 then + PlayFlavor(NPC, "voiceover/english/optional3/troll_base_1/ft/troll/troll_base_1_1_halfhealth_gm_f462f6ff.mp3", "Is this supposed to hurt?", "", 4202180867, 1393988988) + end + end + elseif GetGender(NPC) == FEMALE then + if GetRace(NPC) == DARK_ELF then + local choice = math.random(1, 5) + if choice == 1 then + PlayFlavor(NPC, "voiceover/english/optional3/darkelf_base_1/ft/darkelf/darkelf_base_1_1_halfhealth_gf_577ab333.mp3", "You'll pay for that one, peon!", "", 2534123849, 501758946) + elseif choice == 2 then + PlayFlavor(NPC, "voiceover/english/optional3/darkelf_base_1/ft/darkelf/darkelf_base_1_1_halfhealth_gf_9e244d19.mp3", "How dare you!", "", 2905660023, 2043697886) + elseif choice == 3 then + PlayFlavor(NPC, "voiceover/english/optional3/darkelf_base_1/ft/darkelf/darkelf_base_1_2_halfhealth_gf_9e244d19.mp3", "How dare you!", "", 2263865273, 2956956838) + elseif choice == 4 then + PlayFlavor(NPC, "voiceover/english/optional3/darkelf_base_2/ft/darkelf/darkelf_base_2_1_halfhealth_gf_8d198fee.mp3", "You may escape, but we will find you!", "", 1924616636, 4174763308) + elseif choice == 5 then + PlayFlavor(NPC, "voiceover/english/optional3/darkelf_base_2/ft/darkelf/darkelf_base_2_1_halfhealth_gf_d3fcd4c5.mp3", "How dare you strike me!", "", 1224879133, 2564393271) + end + elseif GetRace(NPC) == OGRE then + local choice = math.random(1, 3) + if choice == 1 then + PlayFlavor(NPC, "voiceover/english/ogre_base_1/ft/ogre/ogre_base_1_1_halfhealth_gf_581c2926.mp3", "You'll pay for that!", "", 480032723, 3225416629) + elseif choice == 2 then + PlayFlavor(NPC, "voiceover/english/ogre_base_1/ft/ogre/ogre_base_1_1_halfhealth_gf_aff2b15d.mp3", "Now I'm really angry!", "", 3362643729, 1907494922) + elseif choice == 3 then + PlayFlavor(NPC, "voiceover/english/optional3/ogre_base_2/ft/ogre/ogre_base_2_1_halfhealth_gf_1ad2d46f.mp3", "Your petty weapons are no match for me!", "", 2285469219, 3359769172) + end + elseif GetRace(NPC) == TROLL then + local choice = math.random(1, 4) + if choice == 1 then + PlayFlavor(NPC, "voiceover/english/optional3/troll_base_1/ft/troll/troll_base_1_1_halfhealth_gf_aa145f4d.mp3", "Neat, that'll leave a pretty scar", "", 70455099, 2953679351) + elseif choice == 2 then + PlayFlavor(NPC, "voiceover/english/optional3/troll_base_1/ft/troll/troll_base_1_1_halfhealth_gf_f462f6ff.mp3", "Is this supposed to hurt?", "", 216769747, 692696120) + elseif choice == 3 then + PlayFlavor(NPC, "voiceover/english/optional3/troll_base_2/ft/troll/troll_base_2_1_halfhealth_gf_5ba543d6.mp3", "That'll grow back.", "", 4062170117, 809175527) + elseif choice == 4 then + PlayFlavor(NPC, "voiceover/english/optional3/troll_base_2/ft/troll/troll_base_2_1_halfhealth_gf_9e239695.mp3", "I can taste my own blood.", "", 630688016, 620713228) + end + end + end + AddTimer(NPC, 30000, "ResetSpoke") + end +end + +function ResetSpoke(NPC) + spoke = false +end + +function killed(NPC, Spawn) + local chance = math.random(1, 100) + if chance <= 25 then + if GetGender(NPC) == MALE then + if GetRace(NPC) == DARK_ELF then + local choice = math.random(1, 3) + if choice == 1 then + PlayFlavor(NPC, "voiceover/english/darkelf_base_1/ft/darkelf/darkelf_base_1_1_victory_gm_dff26fa.mp3", "It is a shame we must end it this way ... I could have used you.", "", 1363661737, 942201815) + elseif choice == 2 then + PlayFlavor(NPC, "voiceover/english/darkelf_base_1/ft/darkelf/darkelf_base_1_1_victory_gm_f4fc7cf8.mp3", "Did you really think you had a chance?", "", 607143583, 3133144305) + elseif choice == 3 then + PlayFlavor(NPC, "voiceover/english/darkelf_base_1/ft/darkelf/darkelf_base_1_1_victory_gm_f5088778.mp3", "Get up! Death isn't good enough for you!", "", 3381713633, 2145918189) + end + elseif GetRace(NPC) == OGRE then + PlayFlavor(NPC, "voiceover/english/optional3/ogre_base_2/ft/ogre/ogre_base_2_1_victory_gm_1de29528.mp3", "Death was your only escape from me, coward!", "", 3626940960, 2890932770) + elseif GetRace(NPC) == TROLL then + PlayFlavor(NPC, "voiceover/english/optional3/troll_base_1/ft/troll/troll_base_1_1_victory_gm_ae6d66e3.mp3", "Teach you to mess with the best.", "", 927528340, 2751002174) + end + elseif GetGender(NPC) == FEMALE then + if GetRace(NPC) == DARK_ELF then + elseif GetRace(NPC) == OGRE then + elseif GetRace(NPC) == TROLL then + end + end + end +end + +function death(NPC, Spawn) + spoke = false + local chance = math.random(1, 100) + if chance <= 25 then + if GetGender(NPC) == MALE then + if GetRace(NPC) == DARK_ELF then + PlayFlavor(NPC, "voiceover/english/darkelf_base_1/ft/darkelf/darkelf_base_1_1_death_gm_8d7bb2b9.mp3", "Hold them and I'll return with help!", "", 2338278515, 1160150777) + elseif GetRace(NPC) == OGRE then + elseif GetRace(NPC) == TROLL then + end + elseif GetGender(NPC) == FEMALE then + if GetRace(NPC) == DARK_ELF then + local choice = math.random(1, 2) + if choice == 1 then + PlayFlavor(NPC, "voiceover/english/ghost_darkelf_base_1/ft/ghost/ghost_darkelf_base_1_1_death_gf_b5958785.mp3", "Hold them and I'll return with others like us!", "", 3769472925, 2964757475) + elseif choice == 2 then + PlayFlavor(NPC, "voiceover/english/optional3/darkelf_base_2/ft/darkelf/darkelf_base_2_1_death_gf_8bbec3e3.mp3", "No matter what I promise, you will not survive!", "", 2832420662, 2950405548) + end + elseif GetRace(NPC) == OGRE then + PlayFlavor(NPC, "voiceover/english/optional3/ghost_ogre_base_2/ft/ghost/ghost_ogre_base_2_1_death_gf_198e9f92.mp3", "Release comes to the favored.", "", 1658205865, 949237847) + elseif GetRace(NPC) == TROLL then + end + end + end +end \ No newline at end of file diff --git a/server/SpawnScripts/SunkenCity/aBlackshieldraider.lua b/server/SpawnScripts/SunkenCity/aBlackshieldraider.lua new file mode 100644 index 000000000..4312d62db --- /dev/null +++ b/server/SpawnScripts/SunkenCity/aBlackshieldraider.lua @@ -0,0 +1,200 @@ +--[[ + Script Name : SpawnScripts/SunkenCity/aBlackshieldraider.lua + Script Purpose : a Blackshield raider + Script Author : Scatman + Script Date : 2009.08.01 + Script Notes : +--]] + +local MALE = 1 +local FEMALE = 2 +local DARK_ELF = 1 +local OGRE = 12 +local TROLL = 14 +local spoke = false + +function spawn(NPC) + spoke = false +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) +end + +function aggro(NPC, Spawn) + local chance = math.random(1, 100) + if chance <= 25 then + if GetGender(NPC) == MALE then + if GetRace(NPC) == DARK_ELF then + local choice = math.random(1, 4) + if choice == 1 then + PlayFlavor(NPC, "voiceover/english/darkelf_base_1/ft/darkelf/darkelf_base_1_1_aggro_gm_10fd87eb.mp3", "There is no escape for you now!", "", 2989643101, 2260454555) + elseif choice == 2 then + PlayFlavor(NPC, "voiceover/english/darkelf_base_1/ft/darkelf/darkelf_base_1_1_aggro_gm_beacbb30.mp3", "I hope you put your affairs in order.", "", 799093996, 16617637) + elseif choice == 3 then + PlayFlavor(NPC, "voiceover/english/darkelf_base_1/ft/darkelf/darkelf_base_1_1_aggro_gm_fe18133.mp3", "Look what strolled into the spider's web!", "", 4178015902, 2202039151) + elseif choice == 4 then + PlayFlavor(NPC, "voiceover/english/optional3/darkelf_base_1/ft/darkelf/darkelf_base_1_3_aggro_gm_10fd87eb.mp3", "There is no escape for you now!", "", 3427660043, 2534456197) + end + elseif GetRace(NPC) == OGRE then + elseif GetRace(NPC) == TROLL then + end + elseif GetGender(NPC) == FEMALE then + if GetRace(NPC) == DARK_ELF then + local choice = math.random(1, 4) + if choice == 1 then + PlayFlavor(NPC, "voiceover/english/optional3/darkelf_base_1/ft/darkelf/darkelf_base_1_1_aggro_gf_10fd87eb.mp3", "There is no escape for you now!", "", 3641868496, 1960514853) + elseif choice == 2 then + PlayFlavor(NPC, "voiceover/english/optional3/darkelf_base_2/ft/darkelf/darkelf_base_2_1_aggro_gf_8e7390a8.mp3", "Welcome to torment and destruction!", "", 3770648926, 2897017212) + elseif choice == 3 then + PlayFlavor(NPC, "voiceover/english/optional3/darkelf_base_2/ft/darkelf/darkelf_base_2_1_aggro_gf_ded507db.mp3", "More intruders to deal with? Stop them!", "", 338410258, 2808797910) + elseif choice == 4 then + PlayFlavor(NPC, "voiceover/english/optional3/darkelf_base_2/ft/darkelf/darkelf_base_2_1_aggro_gf_fb890c79.mp3", "I have no time for meddlers. Destroy them!", "", 1947039155, 2094447273) + end + elseif GetRace(NPC) == OGRE then + PlayFlavor(NPC, "voiceover/english/optional3/ogre_base_2/ft/ogre/ogre_base_2_1_aggro_gf_d4cfd470.mp3", "Feel the might of Rallos!", "", 760635308, 455953200) + elseif GetRace(NPC) == TROLL then + local choice = math.random(1, 2) + if choice == 1 then + PlayFlavor(NPC, "voiceover/english/optional3/troll_base_1/ft/troll/troll_base_1_1_aggro_gf_d1a345c7.mp3", "I'm gonna give you a smile like ol' one tooth!", "", 1201784314, 2598207561) + elseif choice == 2 then + PlayFlavor(NPC, "voiceover/english/optional3/troll_base_2/ft/troll/troll_base_2_1_aggro_gf_62fd0e82.mp3", "What smells so good?", "", 3335229907, 713747453) + end + end + end + end +end + +function healthchanged(NPC, Spawn) + local hp_percent = GetHP(NPC) / GetMaxHP(NPC) + if hp_percent <= 0.50 and spoke == false then + spoke = true + if GetGender(NPC) == MALE then + if GetRace(NPC) == DARK_ELF then + local choice = math.random(1, 3) + if choice == 1 then + PlayFlavor(NPC, "voiceover/english/darkelf_base_1/ft/darkelf/darkelf_base_1_1_halfhealth_gm_577ab333.mp3", "You'll pay for that one, peon!", "", 1420508530, 39058961) + elseif choice == 2 then + PlayFlavor(NPC, "voiceover/english/darkelf_base_1/ft/darkelf/darkelf_base_1_1_halfhealth_gm_9e244d19.mp3", "How dare you!", "", 3305445355, 1846155898) + elseif choice == 3 then + PlayFlavor(NPC, "voiceover/english/optional3/darkelf_base_1/ft/darkelf/darkelf_base_1_3_halfhealth_gm_9e244d19.mp3", "How dare you!", "", 2287743179, 1322949627) + end + elseif GetRace(NPC) == OGRE then + local choice = math.random(1, 4) + if choice == 1 then + PlayFlavor(NPC, "voiceover/english/ogre_base_1/ft/ogre/ogre_base_1_1_halfhealth_gm_581c2926.mp3", "You'll pay for that!", "", 2366218696, 2114997045) + elseif choice == 2 then + PlayFlavor(NPC, "voiceover/english/ogre_base_1/ft/ogre/ogre_base_1_1_halfhealth_gm_aff2b15d.mp3", "Now I'm really angry!", "", 1599348947, 4096819162) + elseif choice == 3 then + PlayFlavor(NPC, "voiceover/english/optional3/ogre_base_2/ft/ogre/ogre_base_2_1_halfhealth_gm_1ad2d46f.mp3", "Your petty weapons are no match for me!", "", 2269900119, 3290320421) + elseif choice == 4 then + PlayFlavor(NPC, "voiceover/english/optional3/ogre_base_2/ft/ogre/ogre_base_2_1_halfhealth_gm_5a6c112c.mp3", "Agggggh! There is no pain only death and failure!", "", 2051650869, 1276361533) + end + elseif GetRace(NPC) == TROLL then + local choice = math.random(1, 2) + if choice == 1 then + PlayFlavor(NPC, "voiceover/english/optional3/troll_base_1/ft/troll/troll_base_1_1_halfhealth_gm_aa145f4d.mp3", "Neat, that'll leave a pretty scar", "", 675684950, 4088135432) + elseif choice == 2 then + PlayFlavor(NPC, "voiceover/english/optional3/troll_base_1/ft/troll/troll_base_1_1_halfhealth_gm_f462f6ff.mp3", "Is this supposed to hurt?", "", 4202180867, 1393988988) + end + end + elseif GetGender(NPC) == FEMALE then + if GetRace(NPC) == DARK_ELF then + local choice = math.random(1, 5) + if choice == 1 then + PlayFlavor(NPC, "voiceover/english/optional3/darkelf_base_1/ft/darkelf/darkelf_base_1_1_halfhealth_gf_577ab333.mp3", "You'll pay for that one, peon!", "", 2534123849, 501758946) + elseif choice == 2 then + PlayFlavor(NPC, "voiceover/english/optional3/darkelf_base_1/ft/darkelf/darkelf_base_1_1_halfhealth_gf_9e244d19.mp3", "How dare you!", "", 2905660023, 2043697886) + elseif choice == 3 then + PlayFlavor(NPC, "voiceover/english/optional3/darkelf_base_1/ft/darkelf/darkelf_base_1_2_halfhealth_gf_9e244d19.mp3", "How dare you!", "", 2263865273, 2956956838) + elseif choice == 4 then + PlayFlavor(NPC, "voiceover/english/optional3/darkelf_base_2/ft/darkelf/darkelf_base_2_1_halfhealth_gf_8d198fee.mp3", "You may escape, but we will find you!", "", 1924616636, 4174763308) + elseif choice == 5 then + PlayFlavor(NPC, "voiceover/english/optional3/darkelf_base_2/ft/darkelf/darkelf_base_2_1_halfhealth_gf_d3fcd4c5.mp3", "How dare you strike me!", "", 1224879133, 2564393271) + end + elseif GetRace(NPC) == OGRE then + local choice = math.random(1, 3) + if choice == 1 then + PlayFlavor(NPC, "voiceover/english/ogre_base_1/ft/ogre/ogre_base_1_1_halfhealth_gf_581c2926.mp3", "You'll pay for that!", "", 480032723, 3225416629) + elseif choice == 2 then + PlayFlavor(NPC, "voiceover/english/ogre_base_1/ft/ogre/ogre_base_1_1_halfhealth_gf_aff2b15d.mp3", "Now I'm really angry!", "", 3362643729, 1907494922) + elseif choice == 3 then + PlayFlavor(NPC, "voiceover/english/optional3/ogre_base_2/ft/ogre/ogre_base_2_1_halfhealth_gf_1ad2d46f.mp3", "Your petty weapons are no match for me!", "", 2285469219, 3359769172) + end + elseif GetRace(NPC) == TROLL then + local choice = math.random(1, 4) + if choice == 1 then + PlayFlavor(NPC, "voiceover/english/optional3/troll_base_1/ft/troll/troll_base_1_1_halfhealth_gf_aa145f4d.mp3", "Neat, that'll leave a pretty scar", "", 70455099, 2953679351) + elseif choice == 2 then + PlayFlavor(NPC, "voiceover/english/optional3/troll_base_1/ft/troll/troll_base_1_1_halfhealth_gf_f462f6ff.mp3", "Is this supposed to hurt?", "", 216769747, 692696120) + elseif choice == 3 then + PlayFlavor(NPC, "voiceover/english/optional3/troll_base_2/ft/troll/troll_base_2_1_halfhealth_gf_5ba543d6.mp3", "That'll grow back.", "", 4062170117, 809175527) + elseif choice == 4 then + PlayFlavor(NPC, "voiceover/english/optional3/troll_base_2/ft/troll/troll_base_2_1_halfhealth_gf_9e239695.mp3", "I can taste my own blood.", "", 630688016, 620713228) + end + end + end + AddTimer(NPC, 30000, "ResetSpoke") + end +end + +function ResetSpoke(NPC) + spoke = false +end + +function killed(NPC, Spawn) + local chance = math.random(1, 100) + if chance <= 25 then + if GetGender(NPC) == MALE then + if GetRace(NPC) == DARK_ELF then + local choice = math.random(1, 3) + if choice == 1 then + PlayFlavor(NPC, "voiceover/english/darkelf_base_1/ft/darkelf/darkelf_base_1_1_victory_gm_dff26fa.mp3", "It is a shame we must end it this way ... I could have used you.", "", 1363661737, 942201815) + elseif choice == 2 then + PlayFlavor(NPC, "voiceover/english/darkelf_base_1/ft/darkelf/darkelf_base_1_1_victory_gm_f4fc7cf8.mp3", "Did you really think you had a chance?", "", 607143583, 3133144305) + elseif choice == 3 then + PlayFlavor(NPC, "voiceover/english/darkelf_base_1/ft/darkelf/darkelf_base_1_1_victory_gm_f5088778.mp3", "Get up! Death isn't good enough for you!", "", 3381713633, 2145918189) + end + elseif GetRace(NPC) == OGRE then + PlayFlavor(NPC, "voiceover/english/optional3/ogre_base_2/ft/ogre/ogre_base_2_1_victory_gm_1de29528.mp3", "Death was your only escape from me, coward!", "", 3626940960, 2890932770) + elseif GetRace(NPC) == TROLL then + PlayFlavor(NPC, "voiceover/english/optional3/troll_base_1/ft/troll/troll_base_1_1_victory_gm_ae6d66e3.mp3", "Teach you to mess with the best.", "", 927528340, 2751002174) + end + elseif GetGender(NPC) == FEMALE then + if GetRace(NPC) == DARK_ELF then + elseif GetRace(NPC) == OGRE then + elseif GetRace(NPC) == TROLL then + end + end + end +end + +function death(NPC, Spawn) + spoke = false + local chance = math.random(1, 100) + if chance <= 25 then + if GetGender(NPC) == MALE then + if GetRace(NPC) == DARK_ELF then + PlayFlavor(NPC, "voiceover/english/darkelf_base_1/ft/darkelf/darkelf_base_1_1_death_gm_8d7bb2b9.mp3", "Hold them and I'll return with help!", "", 2338278515, 1160150777) + elseif GetRace(NPC) == OGRE then + elseif GetRace(NPC) == TROLL then + end + elseif GetGender(NPC) == FEMALE then + if GetRace(NPC) == DARK_ELF then + local choice = math.random(1, 2) + if choice == 1 then + PlayFlavor(NPC, "voiceover/english/ghost_darkelf_base_1/ft/ghost/ghost_darkelf_base_1_1_death_gf_b5958785.mp3", "Hold them and I'll return with others like us!", "", 3769472925, 2964757475) + elseif choice == 2 then + PlayFlavor(NPC, "voiceover/english/optional3/darkelf_base_2/ft/darkelf/darkelf_base_2_1_death_gf_8bbec3e3.mp3", "No matter what I promise, you will not survive!", "", 2832420662, 2950405548) + end + elseif GetRace(NPC) == OGRE then + PlayFlavor(NPC, "voiceover/english/optional3/ghost_ogre_base_2/ft/ghost/ghost_ogre_base_2_1_death_gf_198e9f92.mp3", "Release comes to the favored.", "", 1658205865, 949237847) + elseif GetRace(NPC) == TROLL then + end + end + end +end \ No newline at end of file diff --git a/server/SpawnScripts/SunkenCity/aBlackshieldravager.lua b/server/SpawnScripts/SunkenCity/aBlackshieldravager.lua new file mode 100644 index 000000000..d32b9a11e --- /dev/null +++ b/server/SpawnScripts/SunkenCity/aBlackshieldravager.lua @@ -0,0 +1,200 @@ +--[[ + Script Name : SpawnScripts/SunkenCity/aBlackshieldravager.lua + Script Purpose : a Blackshield ravager + Script Author : Scatman + Script Date : 2009.08.01 + Script Notes : +--]] + +local MALE = 1 +local FEMALE = 2 +local DARK_ELF = 1 +local OGRE = 12 +local TROLL = 14 +local spoke = false + +function spawn(NPC) + spoke = false +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) +end + +function aggro(NPC, Spawn) + local chance = math.random(1, 100) + if chance <= 25 then + if GetGender(NPC) == MALE then + if GetRace(NPC) == DARK_ELF then + local choice = math.random(1, 4) + if choice == 1 then + PlayFlavor(NPC, "voiceover/english/darkelf_base_1/ft/darkelf/darkelf_base_1_1_aggro_gm_10fd87eb.mp3", "There is no escape for you now!", "", 2989643101, 2260454555) + elseif choice == 2 then + PlayFlavor(NPC, "voiceover/english/darkelf_base_1/ft/darkelf/darkelf_base_1_1_aggro_gm_beacbb30.mp3", "I hope you put your affairs in order.", "", 799093996, 16617637) + elseif choice == 3 then + PlayFlavor(NPC, "voiceover/english/darkelf_base_1/ft/darkelf/darkelf_base_1_1_aggro_gm_fe18133.mp3", "Look what strolled into the spider's web!", "", 4178015902, 2202039151) + elseif choice == 4 then + PlayFlavor(NPC, "voiceover/english/optional3/darkelf_base_1/ft/darkelf/darkelf_base_1_3_aggro_gm_10fd87eb.mp3", "There is no escape for you now!", "", 3427660043, 2534456197) + end + elseif GetRace(NPC) == OGRE then + elseif GetRace(NPC) == TROLL then + end + elseif GetGender(NPC) == FEMALE then + if GetRace(NPC) == DARK_ELF then + local choice = math.random(1, 4) + if choice == 1 then + PlayFlavor(NPC, "voiceover/english/optional3/darkelf_base_1/ft/darkelf/darkelf_base_1_1_aggro_gf_10fd87eb.mp3", "There is no escape for you now!", "", 3641868496, 1960514853) + elseif choice == 2 then + PlayFlavor(NPC, "voiceover/english/optional3/darkelf_base_2/ft/darkelf/darkelf_base_2_1_aggro_gf_8e7390a8.mp3", "Welcome to torment and destruction!", "", 3770648926, 2897017212) + elseif choice == 3 then + PlayFlavor(NPC, "voiceover/english/optional3/darkelf_base_2/ft/darkelf/darkelf_base_2_1_aggro_gf_ded507db.mp3", "More intruders to deal with? Stop them!", "", 338410258, 2808797910) + elseif choice == 4 then + PlayFlavor(NPC, "voiceover/english/optional3/darkelf_base_2/ft/darkelf/darkelf_base_2_1_aggro_gf_fb890c79.mp3", "I have no time for meddlers. Destroy them!", "", 1947039155, 2094447273) + end + elseif GetRace(NPC) == OGRE then + PlayFlavor(NPC, "voiceover/english/optional3/ogre_base_2/ft/ogre/ogre_base_2_1_aggro_gf_d4cfd470.mp3", "Feel the might of Rallos!", "", 760635308, 455953200) + elseif GetRace(NPC) == TROLL then + local choice = math.random(1, 2) + if choice == 1 then + PlayFlavor(NPC, "voiceover/english/optional3/troll_base_1/ft/troll/troll_base_1_1_aggro_gf_d1a345c7.mp3", "I'm gonna give you a smile like ol' one tooth!", "", 1201784314, 2598207561) + elseif choice == 2 then + PlayFlavor(NPC, "voiceover/english/optional3/troll_base_2/ft/troll/troll_base_2_1_aggro_gf_62fd0e82.mp3", "What smells so good?", "", 3335229907, 713747453) + end + end + end + end +end + +function healthchanged(NPC, Spawn) + local hp_percent = GetHP(NPC) / GetMaxHP(NPC) + if hp_percent <= 0.50 and spoke == false then + spoke = true + if GetGender(NPC) == MALE then + if GetRace(NPC) == DARK_ELF then + local choice = math.random(1, 3) + if choice == 1 then + PlayFlavor(NPC, "voiceover/english/darkelf_base_1/ft/darkelf/darkelf_base_1_1_halfhealth_gm_577ab333.mp3", "You'll pay for that one, peon!", "", 1420508530, 39058961) + elseif choice == 2 then + PlayFlavor(NPC, "voiceover/english/darkelf_base_1/ft/darkelf/darkelf_base_1_1_halfhealth_gm_9e244d19.mp3", "How dare you!", "", 3305445355, 1846155898) + elseif choice == 3 then + PlayFlavor(NPC, "voiceover/english/optional3/darkelf_base_1/ft/darkelf/darkelf_base_1_3_halfhealth_gm_9e244d19.mp3", "How dare you!", "", 2287743179, 1322949627) + end + elseif GetRace(NPC) == OGRE then + local choice = math.random(1, 4) + if choice == 1 then + PlayFlavor(NPC, "voiceover/english/ogre_base_1/ft/ogre/ogre_base_1_1_halfhealth_gm_581c2926.mp3", "You'll pay for that!", "", 2366218696, 2114997045) + elseif choice == 2 then + PlayFlavor(NPC, "voiceover/english/ogre_base_1/ft/ogre/ogre_base_1_1_halfhealth_gm_aff2b15d.mp3", "Now I'm really angry!", "", 1599348947, 4096819162) + elseif choice == 3 then + PlayFlavor(NPC, "voiceover/english/optional3/ogre_base_2/ft/ogre/ogre_base_2_1_halfhealth_gm_1ad2d46f.mp3", "Your petty weapons are no match for me!", "", 2269900119, 3290320421) + elseif choice == 4 then + PlayFlavor(NPC, "voiceover/english/optional3/ogre_base_2/ft/ogre/ogre_base_2_1_halfhealth_gm_5a6c112c.mp3", "Agggggh! There is no pain only death and failure!", "", 2051650869, 1276361533) + end + elseif GetRace(NPC) == TROLL then + local choice = math.random(1, 2) + if choice == 1 then + PlayFlavor(NPC, "voiceover/english/optional3/troll_base_1/ft/troll/troll_base_1_1_halfhealth_gm_aa145f4d.mp3", "Neat, that'll leave a pretty scar", "", 675684950, 4088135432) + elseif choice == 2 then + PlayFlavor(NPC, "voiceover/english/optional3/troll_base_1/ft/troll/troll_base_1_1_halfhealth_gm_f462f6ff.mp3", "Is this supposed to hurt?", "", 4202180867, 1393988988) + end + end + elseif GetGender(NPC) == FEMALE then + if GetRace(NPC) == DARK_ELF then + local choice = math.random(1, 5) + if choice == 1 then + PlayFlavor(NPC, "voiceover/english/optional3/darkelf_base_1/ft/darkelf/darkelf_base_1_1_halfhealth_gf_577ab333.mp3", "You'll pay for that one, peon!", "", 2534123849, 501758946) + elseif choice == 2 then + PlayFlavor(NPC, "voiceover/english/optional3/darkelf_base_1/ft/darkelf/darkelf_base_1_1_halfhealth_gf_9e244d19.mp3", "How dare you!", "", 2905660023, 2043697886) + elseif choice == 3 then + PlayFlavor(NPC, "voiceover/english/optional3/darkelf_base_1/ft/darkelf/darkelf_base_1_2_halfhealth_gf_9e244d19.mp3", "How dare you!", "", 2263865273, 2956956838) + elseif choice == 4 then + PlayFlavor(NPC, "voiceover/english/optional3/darkelf_base_2/ft/darkelf/darkelf_base_2_1_halfhealth_gf_8d198fee.mp3", "You may escape, but we will find you!", "", 1924616636, 4174763308) + elseif choice == 5 then + PlayFlavor(NPC, "voiceover/english/optional3/darkelf_base_2/ft/darkelf/darkelf_base_2_1_halfhealth_gf_d3fcd4c5.mp3", "How dare you strike me!", "", 1224879133, 2564393271) + end + elseif GetRace(NPC) == OGRE then + local choice = math.random(1, 3) + if choice == 1 then + PlayFlavor(NPC, "voiceover/english/ogre_base_1/ft/ogre/ogre_base_1_1_halfhealth_gf_581c2926.mp3", "You'll pay for that!", "", 480032723, 3225416629) + elseif choice == 2 then + PlayFlavor(NPC, "voiceover/english/ogre_base_1/ft/ogre/ogre_base_1_1_halfhealth_gf_aff2b15d.mp3", "Now I'm really angry!", "", 3362643729, 1907494922) + elseif choice == 3 then + PlayFlavor(NPC, "voiceover/english/optional3/ogre_base_2/ft/ogre/ogre_base_2_1_halfhealth_gf_1ad2d46f.mp3", "Your petty weapons are no match for me!", "", 2285469219, 3359769172) + end + elseif GetRace(NPC) == TROLL then + local choice = math.random(1, 4) + if choice == 1 then + PlayFlavor(NPC, "voiceover/english/optional3/troll_base_1/ft/troll/troll_base_1_1_halfhealth_gf_aa145f4d.mp3", "Neat, that'll leave a pretty scar", "", 70455099, 2953679351) + elseif choice == 2 then + PlayFlavor(NPC, "voiceover/english/optional3/troll_base_1/ft/troll/troll_base_1_1_halfhealth_gf_f462f6ff.mp3", "Is this supposed to hurt?", "", 216769747, 692696120) + elseif choice == 3 then + PlayFlavor(NPC, "voiceover/english/optional3/troll_base_2/ft/troll/troll_base_2_1_halfhealth_gf_5ba543d6.mp3", "That'll grow back.", "", 4062170117, 809175527) + elseif choice == 4 then + PlayFlavor(NPC, "voiceover/english/optional3/troll_base_2/ft/troll/troll_base_2_1_halfhealth_gf_9e239695.mp3", "I can taste my own blood.", "", 630688016, 620713228) + end + end + end + AddTimer(NPC, 30000, "ResetSpoke") + end +end + +function ResetSpoke(NPC) + spoke = false +end + +function killed(NPC, Spawn) + local chance = math.random(1, 100) + if chance <= 25 then + if GetGender(NPC) == MALE then + if GetRace(NPC) == DARK_ELF then + local choice = math.random(1, 3) + if choice == 1 then + PlayFlavor(NPC, "voiceover/english/darkelf_base_1/ft/darkelf/darkelf_base_1_1_victory_gm_dff26fa.mp3", "It is a shame we must end it this way ... I could have used you.", "", 1363661737, 942201815) + elseif choice == 2 then + PlayFlavor(NPC, "voiceover/english/darkelf_base_1/ft/darkelf/darkelf_base_1_1_victory_gm_f4fc7cf8.mp3", "Did you really think you had a chance?", "", 607143583, 3133144305) + elseif choice == 3 then + PlayFlavor(NPC, "voiceover/english/darkelf_base_1/ft/darkelf/darkelf_base_1_1_victory_gm_f5088778.mp3", "Get up! Death isn't good enough for you!", "", 3381713633, 2145918189) + end + elseif GetRace(NPC) == OGRE then + PlayFlavor(NPC, "voiceover/english/optional3/ogre_base_2/ft/ogre/ogre_base_2_1_victory_gm_1de29528.mp3", "Death was your only escape from me, coward!", "", 3626940960, 2890932770) + elseif GetRace(NPC) == TROLL then + PlayFlavor(NPC, "voiceover/english/optional3/troll_base_1/ft/troll/troll_base_1_1_victory_gm_ae6d66e3.mp3", "Teach you to mess with the best.", "", 927528340, 2751002174) + end + elseif GetGender(NPC) == FEMALE then + if GetRace(NPC) == DARK_ELF then + elseif GetRace(NPC) == OGRE then + elseif GetRace(NPC) == TROLL then + end + end + end +end + +function death(NPC, Spawn) + spoke = false + local chance = math.random(1, 100) + if chance <= 25 then + if GetGender(NPC) == MALE then + if GetRace(NPC) == DARK_ELF then + PlayFlavor(NPC, "voiceover/english/darkelf_base_1/ft/darkelf/darkelf_base_1_1_death_gm_8d7bb2b9.mp3", "Hold them and I'll return with help!", "", 2338278515, 1160150777) + elseif GetRace(NPC) == OGRE then + elseif GetRace(NPC) == TROLL then + end + elseif GetGender(NPC) == FEMALE then + if GetRace(NPC) == DARK_ELF then + local choice = math.random(1, 2) + if choice == 1 then + PlayFlavor(NPC, "voiceover/english/ghost_darkelf_base_1/ft/ghost/ghost_darkelf_base_1_1_death_gf_b5958785.mp3", "Hold them and I'll return with others like us!", "", 3769472925, 2964757475) + elseif choice == 2 then + PlayFlavor(NPC, "voiceover/english/optional3/darkelf_base_2/ft/darkelf/darkelf_base_2_1_death_gf_8bbec3e3.mp3", "No matter what I promise, you will not survive!", "", 2832420662, 2950405548) + end + elseif GetRace(NPC) == OGRE then + PlayFlavor(NPC, "voiceover/english/optional3/ghost_ogre_base_2/ft/ghost/ghost_ogre_base_2_1_death_gf_198e9f92.mp3", "Release comes to the favored.", "", 1658205865, 949237847) + elseif GetRace(NPC) == TROLL then + end + end + end +end \ No newline at end of file diff --git a/server/SpawnScripts/SunkenCity/abrinesifter.lua b/server/SpawnScripts/SunkenCity/abrinesifter.lua new file mode 100644 index 000000000..6dc0fbef6 --- /dev/null +++ b/server/SpawnScripts/SunkenCity/abrinesifter.lua @@ -0,0 +1,27 @@ +--[[ + Script Name : SpawnScripts/SunkenCity/abrinesifter.lua + Script Purpose : a brine sifter + Script Author : Scatman + Script Date : 2009.07.28 + Script Notes : +--]] + +local QUEST_3_FROM_THORSON = 268 + +function spawn(NPC) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) +end + +function casted_on(Target, Caster) + -- TODO: Verify 'Catalog Creature' was casted. + if HasQuest(Caster, QUEST_3_FROM_THORSON) and not QuestStepIsComplete(Caster, QUEST_3_FROM_THORSON, 1) then + SetStepComplete(Caster, QUEST_3_FROM_THORSON, 1) + end +end \ No newline at end of file diff --git a/server/SpawnScripts/SunkenCity/abulkybrinesifter.lua b/server/SpawnScripts/SunkenCity/abulkybrinesifter.lua new file mode 100644 index 000000000..02b018850 --- /dev/null +++ b/server/SpawnScripts/SunkenCity/abulkybrinesifter.lua @@ -0,0 +1,97 @@ +--[[ + Script Name : SpawnScripts/SunkenCity/abulkybrinesifter.lua + Script Purpose : Waypoint Path for a bulky brine sifter.lua + Script Author : Cynnar + Script Date : 02/09/2019 01:14:53 AM + Script Notes : +--]] + +function spawn(NPC) + waypoints(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) +end + +function respawn(NPC) +end + +function waypoints(NPC) + MovementLoopAddLocation(NPC, 0.49, -0.14, -68.87, 2, 0) + MovementLoopAddLocation(NPC, -0.06, -0.25, -56.61, 2, 0) + MovementLoopAddLocation(NPC, 4.57, -0.18, -47, 2, 0) + MovementLoopAddLocation(NPC, 4.30, -0.49, -29.84, 2, 0) + MovementLoopAddLocation(NPC, 4.10, -0.51, -19.36, 2, 0) + MovementLoopAddLocation(NPC, 5.92, -0.52, -15.09, 2, 0) + MovementLoopAddLocation(NPC, 10.51, -0.47, -12.75, 2, 0) + MovementLoopAddLocation(NPC, 11.95, -0.3, -9.38, 2, 0) + MovementLoopAddLocation(NPC, 10.46, -0.12, -5.44, 2, 0) + MovementLoopAddLocation(NPC, 7.87, -0.09, -1.98, 2, 0) + MovementLoopAddLocation(NPC, 5.26, -0.09, 1.58, 2, 0) + MovementLoopAddLocation(NPC, 1.13, -0.09, 6.14, 2, 0) + MovementLoopAddLocation(NPC, -4.33, -0.2, 10.47, 2, 0) + MovementLoopAddLocation(NPC, -12.32, -0.48, 5.19, 2, 0) + MovementLoopAddLocation(NPC, -25.47, -0.58, 4.62, 2, 0) + MovementLoopAddLocation(NPC, -29.07, -0.58, -0.44, 2, 0) + MovementLoopAddLocation(NPC, -30.69, -0.45, -9.55, 2, 0) + MovementLoopAddLocation(NPC, -27.89, -0.62, -16.4, 2, 0) + MovementLoopAddLocation(NPC, -32.25, -0.64, -21.89, 2, 0) + MovementLoopAddLocation(NPC, -31.3, -0.58, -29.71, 2, 0) + MovementLoopAddLocation(NPC, -33.62, -0.52, -36.66, 2, 0) + MovementLoopAddLocation(NPC, -36.12, -0.41, -42.17, 2, 0) + MovementLoopAddLocation(NPC, -36.27, -0.55, -49.78, 2, 0) + MovementLoopAddLocation(NPC, -36.31, -0.55, -51.41, 2, 0) + MovementLoopAddLocation(NPC, -37.47, -0.55, -54.43, 2, 0, "changegrid_A") + MovementLoopAddLocation(NPC, -38.09, -0.6, -58.69, 2, 0) + MovementLoopAddLocation(NPC, -43.54, -0.59, -64.95, 2, 0) + MovementLoopAddLocation(NPC, -53.54, -0.51, -72.95, 2, 0) + MovementLoopAddLocation(NPC, -57, -0.52, -72.2, 2, 0) + MovementLoopAddLocation(NPC, -60.32, -0.62, -62.67, 2, 0) + MovementLoopAddLocation(NPC, -71.1, -0.58, -65.38, 2, 0) + MovementLoopAddLocation(NPC, -77.64, -0.57, -48.99, 2, 0) + MovementLoopAddLocation(NPC, -81.12, -0.62, -35.39, 2, 0) + MovementLoopAddLocation(NPC, -76.31, -0.57, -23.72, 2, 0) + MovementLoopAddLocation(NPC, -76.22, -0.57, -17.26, 2, 0) + MovementLoopAddLocation(NPC, -75.99, -0.41, -13.83, 2, 0) + MovementLoopAddLocation(NPC, -76.82, -0.59, -8.79, 2, 0) + MovementLoopAddLocation(NPC, -77.04, -0.33, -6.27, 2, 0) + MovementLoopAddLocation(NPC, -82.07, -0.15, -2.14, 2, 0) + MovementLoopAddLocation(NPC, -83.75, -0.22, 4.71, 2, 0) + MovementLoopAddLocation(NPC, -81.92, -0.26, 13.09, 2, 0) + MovementLoopAddLocation(NPC, -78.61, -0.14, 16.53, 2, 0) + MovementLoopAddLocation(NPC, -70.17, -0.59, 19.36, 2, 0) + MovementLoopAddLocation(NPC, -61.11, -0.57, 19.82, 2, 0) + MovementLoopAddLocation(NPC, -49.5, -0.54, 27.52, 2, 0) + MovementLoopAddLocation(NPC, -43.64, -0.57, 29.15, 2, 0) + MovementLoopAddLocation(NPC, -34.96, -0.54, 35.1, 2, 0) + MovementLoopAddLocation(NPC, -29.64, -0.55, 30.88, 2, 0) + MovementLoopAddLocation(NPC, -29.63, -0.53, 23.55, 2, 0) + MovementLoopAddLocation(NPC, -33, -0.55, 22.3, 2, 0) + MovementLoopAddLocation(NPC, -36.09, -0.57, 17.5, 2, 0) + MovementLoopAddLocation(NPC, -35.76, -0.34, 13.22, 2, 0, "changegrid_B") + MovementLoopAddLocation(NPC, -33.37, -0.58, 4.06, 2, 0) + MovementLoopAddLocation(NPC, -10.85, -0.43, 4.83, 2, 0) + MovementLoopAddLocation(NPC, -3.45, -0.18, -5.73, 2, 0) + MovementLoopAddLocation(NPC, 2.18, -0.47, -13.18, 2, 0) + MovementLoopAddLocation(NPC, -0.51, -0.47, -28.74, 2, 0) + MovementLoopAddLocation(NPC, -11, -0.49, -34.81, 2, 0) + MovementLoopAddLocation(NPC, -12.51, -0.5, -42.08, 2, 0) + MovementLoopAddLocation(NPC, -10.16, -0.51, -50.14, 2, 0) + MovementLoopAddLocation(NPC, -8.25, -0.49, -54.75, 2, 0) + MovementLoopAddLocation(NPC, -13.09, -0.6, -60.18, 2, 0) + MovementLoopAddLocation(NPC, -12.29, -0.7, -66.36, 2, 0) + MovementLoopAddLocation(NPC, -11.37, -0.77, -70.38, 2, 0) + MovementLoopAddLocation(NPC, -5.07, -0.55, -71.9, 2, 0) + MovementLoopAddLocation(NPC, 0.38, -0.16, -73.7, 2, 0) + MovementLoopAddLocation(NPC, 5.03, 0.13, -73.73, 2, 0) + MovementLoopAddLocation(NPC, 4.44, 0.11, -73.18, 2, 0) +end + +function changegrid_A(NPC) + SetGridID(NPC, 3131284342) +end + +function changegrid_B(NPC) + SetGridID(NPC, 496550087) +end \ No newline at end of file diff --git a/server/SpawnScripts/SunkenCity/acursedcorpsman.lua b/server/SpawnScripts/SunkenCity/acursedcorpsman.lua new file mode 100644 index 000000000..f2403b0db --- /dev/null +++ b/server/SpawnScripts/SunkenCity/acursedcorpsman.lua @@ -0,0 +1,104 @@ +--[[ + Script Name : SpawnScripts/Graveyard/acursedcorpseman.lua + Script Purpose : a cursed corpseman + Script Author : Scatman + Script Date : 2009.08.01 + Script Notes : +--]] + +local spoke = false + +function spawn(NPC) + spoke = false +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) +end + +function respawn(NPC) + spawn(NPC) +end + +function aggro(NPC, Spawn) + local chance = math.random(1, 100) + if chance <= 25 then + local choice = math.random(1, 6) + if choice == 1 then + PlayFlavor(NPC, "voiceover/english/optional3/skeleton_base_2/ft/skeleton/skeleton_base_2_1_aggro_18d1544d.mp3", "As I rise from the grave, you will now take my place!", "", 485726074, 3646499350, Spawn) + elseif choice == 2 then + PlayFlavor(NPC, "voiceover/english/optional3/skeleton_base_2/ft/skeleton/skeleton_base_2_1_aggro_c6c2672d.mp3", "Brains! It's what's for dinner.", "", 2091371377, 2422178491, Spawn) + elseif choice == 3 then + PlayFlavor(NPC, "voiceover/english/optional3/skeleton_base_2/ft/skeleton/skeleton_base_2_1_aggro_daf16808.mp3", "To the grave with you!", "", 958122326, 1810359159, Spawn) + elseif choice == 4 then + PlayFlavor(NPC, "voiceover/english/skeleton_base_1/ft/skeleton/skeleton_base_1_1_aggro_2168c5.mp3", "Seek death and it finds you.", "", 2988489621, 1045543573, Spawn) + elseif choice == 5 then + PlayFlavor(NPC, "voiceover/english/skeleton_base_1/ft/skeleton/skeleton_base_1_1_aggro_8bc7a2cc.mp3", "Your blood calls to me.", "", 1242322025, 1154999668, Spawn) + elseif choice == 6 then + PlayFlavor(NPC, "voiceover/english/skeleton_base_1/ft/skeleton/skeleton_base_1_1_aggro_c77d7bff.mp3", "Your eyes are so pretty.", "", 1412152942, 873988632, Spawn) + end + end +end + +function healthchanged(NPC, Spawn) + local hp_percent = GetHP(NPC) / GetMaxHP(NPC) + if hp_percent <= 0.50 and spoke == false then + spoke = true + RandomCallOut(NPC, Spawn) + AddTimer(NPC, 30000, "ResetSpoke") + end +end + +function RandomCallOut(NPC, Spawn) + local choice = math.random(1, 5) + if choice == 1 then + PlayFlavor(NPC, "voiceover/english/optional3/skeleton_base_2/ft/skeleton/skeleton_base_2_1_halfhealth_29344c6f.mp3", "I didn't need those bones anyway.", "", 1704957193, 2042978689) + elseif choice == 2 then + PlayFlavor(NPC, "voiceover/english/skeleton_base_1/ft/skeleton/skeleton_base_1_1_halfhealth_a4c947e4.mp3", "I'm shattered and broken.", "", 4021018144, 1305053073) + elseif choice == 3 then + PlayFlavor(NPC, "voiceover/english/skeleton_base_1/ft/skeleton/skeleton_base_1_1_halfhealth_d9ece37f.mp3", "You've shaken the dust from my bones.", "", 2011286772, 326848383) + elseif choice == 4 then + PlayFlavor(NPC, "voiceover/english/optional3/skeleton_base_2/ft/skeleton/skeleton_base_2_1_halfhealth_f1d542e0.mp3", "Dying didn't feel good the first time.", "", 766636803, 1915881366) + elseif choice == 5 then + PlayFlavor(NPC, "voiceover/english/optional3/skeleton_base_2/ft/skeleton/skeleton_base_2_1_aggro_18d1544d.mp3", "As I rise from the grave, you will now take my place!", "", 485726074, 3646499350) + end +end + +function ResetSpoke(NPC) + spoke = false +end + +function killed(NPC, Spawn) + local chance = math.random(1, 100) + if chance <= 25 then + local choice = math.random(1, 5) + if choice == 1 then + PlayFlavor(NPC, "voiceover/english/optional3/skeleton_base_2/ft/skeleton/skeleton_base_2_1_victory_39c9d69e.mp3", "We're all just bones in the end.", "", 3276297174, 633510318, Spawn) + elseif choice == 2 then + PlayFlavor(NPC, "voiceover/english/optional3/skeleton_base_2/ft/skeleton/skeleton_base_2_1_victory_cbcd383a.mp3", "Their bones will join mine!", "", 680786598, 666536798, Spawn) + elseif choice == 3 then + PlayFlavor(NPC, "voiceover/english/skeleton_base_1/ft/skeleton/skeleton_base_1_1_victory_ccde17c2.mp3", "Another falls to join our ranks.", "", 3285235030, 4198320186, Spawn) + elseif choice == 4 then + PlayFlavor(NPC, "voiceover/english/skeleton_base_1/ft/skeleton/skeleton_base_1_1_victory_d2a649e7.mp3", "The life ebbs from them so quickly.", "", 2674394976, 3151731037, Spawn) + elseif choice == 5 then + PlayFlavor(NPC, "voiceover/english/skeleton_base_1/ft/skeleton/skeleton_base_1_1_victory_fda8e7a9.mp3", "So stops the awful beating of their heart.", "", 1120117600, 3872148135, Spawn) + end + end +end + +function death(NPC, Spawn) + spoke = false + local chance = math.random(1, 100) + if chance <= 25 then + local choice = math.random(1, 4) + if choice == 1 then + PlayFlavor(NPC, "voiceover/english/optional3/skeleton_base_2/ft/skeleton/skeleton_base_2_1_death_bb6b2b8e.mp3", "You cannot eliminate us!", "", 897103301, 541292352, Spawn) + elseif choice == 2 then + PlayFlavor(NPC, "voiceover/english/optional3/skeleton_base_2/ft/skeleton/skeleton_base_2_1_death_edc04fb8.mp3", "That pile of bones was my friend!", "", 2317728806, 1758283676, Spawn) + elseif choice == 3 then + PlayFlavor(NPC, "voiceover/english/skeleton_base_1/ft/skeleton/skeleton_base_1_1_death_fbcb503b.mp3", "Rest in peace.", "", 3591309093, 1423656405, Spawn) + elseif choice == 4 then + PlayFlavor(NPC, "voiceover/english/skeleton_base_1/ft/skeleton/skeleton_base_1_1_death_ff39f327.mp3", "Final death comes at last.", "", 3768284332, 62777040, Spawn) + end + end +end \ No newline at end of file diff --git a/server/SpawnScripts/SunkenCity/acursedcutthroat.lua b/server/SpawnScripts/SunkenCity/acursedcutthroat.lua new file mode 100644 index 000000000..afeda0e82 --- /dev/null +++ b/server/SpawnScripts/SunkenCity/acursedcutthroat.lua @@ -0,0 +1,104 @@ +--[[ + Script Name : SpawnScripts/Graveyard/acursedcutthroat.lua + Script Purpose : a cursed cutthroat + Script Author : Scatman + Script Date : 2009.08.01 + Script Notes : +--]] + +local spoke = false + +function spawn(NPC) + spoke = false +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) +end + +function respawn(NPC) + spawn(NPC) +end + +function aggro(NPC, Spawn) + local chance = math.random(1, 100) + if chance <= 25 then + local choice = math.random(1, 6) + if choice == 1 then + PlayFlavor(NPC, "voiceover/english/optional3/skeleton_base_2/ft/skeleton/skeleton_base_2_1_aggro_18d1544d.mp3", "As I rise from the grave, you will now take my place!", "", 485726074, 3646499350, Spawn) + elseif choice == 2 then + PlayFlavor(NPC, "voiceover/english/optional3/skeleton_base_2/ft/skeleton/skeleton_base_2_1_aggro_c6c2672d.mp3", "Brains! It's what's for dinner.", "", 2091371377, 2422178491, Spawn) + elseif choice == 3 then + PlayFlavor(NPC, "voiceover/english/optional3/skeleton_base_2/ft/skeleton/skeleton_base_2_1_aggro_daf16808.mp3", "To the grave with you!", "", 958122326, 1810359159, Spawn) + elseif choice == 4 then + PlayFlavor(NPC, "voiceover/english/skeleton_base_1/ft/skeleton/skeleton_base_1_1_aggro_2168c5.mp3", "Seek death and it finds you.", "", 2988489621, 1045543573, Spawn) + elseif choice == 5 then + PlayFlavor(NPC, "voiceover/english/skeleton_base_1/ft/skeleton/skeleton_base_1_1_aggro_8bc7a2cc.mp3", "Your blood calls to me.", "", 1242322025, 1154999668, Spawn) + elseif choice == 6 then + PlayFlavor(NPC, "voiceover/english/skeleton_base_1/ft/skeleton/skeleton_base_1_1_aggro_c77d7bff.mp3", "Your eyes are so pretty.", "", 1412152942, 873988632, Spawn) + end + end +end + +function healthchanged(NPC, Spawn) + local hp_percent = GetHP(NPC) / GetMaxHP(NPC) + if hp_percent <= 0.50 and spoke == false then + spoke = true + RandomCallOut(NPC, Spawn) + AddTimer(NPC, 30000, "ResetSpoke") + end +end + +function RandomCallOut(NPC, Spawn) + local choice = math.random(1, 5) + if choice == 1 then + PlayFlavor(NPC, "voiceover/english/optional3/skeleton_base_2/ft/skeleton/skeleton_base_2_1_halfhealth_29344c6f.mp3", "I didn't need those bones anyway.", "", 1704957193, 2042978689) + elseif choice == 2 then + PlayFlavor(NPC, "voiceover/english/skeleton_base_1/ft/skeleton/skeleton_base_1_1_halfhealth_a4c947e4.mp3", "I'm shattered and broken.", "", 4021018144, 1305053073) + elseif choice == 3 then + PlayFlavor(NPC, "voiceover/english/skeleton_base_1/ft/skeleton/skeleton_base_1_1_halfhealth_d9ece37f.mp3", "You've shaken the dust from my bones.", "", 2011286772, 326848383) + elseif choice == 4 then + PlayFlavor(NPC, "voiceover/english/optional3/skeleton_base_2/ft/skeleton/skeleton_base_2_1_halfhealth_f1d542e0.mp3", "Dying didn't feel good the first time.", "", 766636803, 1915881366) + elseif choice == 5 then + PlayFlavor(NPC, "voiceover/english/optional3/skeleton_base_2/ft/skeleton/skeleton_base_2_1_aggro_18d1544d.mp3", "As I rise from the grave, you will now take my place!", "", 485726074, 3646499350) + end +end + +function ResetSpoke(NPC) + spoke = false +end + +function killed(NPC, Spawn) + local chance = math.random(1, 100) + if chance <= 25 then + local choice = math.random(1, 5) + if choice == 1 then + PlayFlavor(NPC, "voiceover/english/optional3/skeleton_base_2/ft/skeleton/skeleton_base_2_1_victory_39c9d69e.mp3", "We're all just bones in the end.", "", 3276297174, 633510318, Spawn) + elseif choice == 2 then + PlayFlavor(NPC, "voiceover/english/optional3/skeleton_base_2/ft/skeleton/skeleton_base_2_1_victory_cbcd383a.mp3", "Their bones will join mine!", "", 680786598, 666536798, Spawn) + elseif choice == 3 then + PlayFlavor(NPC, "voiceover/english/skeleton_base_1/ft/skeleton/skeleton_base_1_1_victory_ccde17c2.mp3", "Another falls to join our ranks.", "", 3285235030, 4198320186, Spawn) + elseif choice == 4 then + PlayFlavor(NPC, "voiceover/english/skeleton_base_1/ft/skeleton/skeleton_base_1_1_victory_d2a649e7.mp3", "The life ebbs from them so quickly.", "", 2674394976, 3151731037, Spawn) + elseif choice == 5 then + PlayFlavor(NPC, "voiceover/english/skeleton_base_1/ft/skeleton/skeleton_base_1_1_victory_fda8e7a9.mp3", "So stops the awful beating of their heart.", "", 1120117600, 3872148135, Spawn) + end + end +end + +function death(NPC, Spawn) + spoke = false + local chance = math.random(1, 100) + if chance <= 25 then + local choice = math.random(1, 4) + if choice == 1 then + PlayFlavor(NPC, "voiceover/english/optional3/skeleton_base_2/ft/skeleton/skeleton_base_2_1_death_bb6b2b8e.mp3", "You cannot eliminate us!", "", 897103301, 541292352, Spawn) + elseif choice == 2 then + PlayFlavor(NPC, "voiceover/english/optional3/skeleton_base_2/ft/skeleton/skeleton_base_2_1_death_edc04fb8.mp3", "That pile of bones was my friend!", "", 2317728806, 1758283676, Spawn) + elseif choice == 3 then + PlayFlavor(NPC, "voiceover/english/skeleton_base_1/ft/skeleton/skeleton_base_1_1_death_fbcb503b.mp3", "Rest in peace.", "", 3591309093, 1423656405, Spawn) + elseif choice == 4 then + PlayFlavor(NPC, "voiceover/english/skeleton_base_1/ft/skeleton/skeleton_base_1_1_death_ff39f327.mp3", "Final death comes at last.", "", 3768284332, 62777040, Spawn) + end + end +end \ No newline at end of file diff --git a/server/SpawnScripts/SunkenCity/acursedscout.lua b/server/SpawnScripts/SunkenCity/acursedscout.lua new file mode 100644 index 000000000..6144b592c --- /dev/null +++ b/server/SpawnScripts/SunkenCity/acursedscout.lua @@ -0,0 +1,104 @@ +--[[ + Script Name : SpawnScripts/Graveyard/acursedscout.lua + Script Purpose : a cursed scout + Script Author : Scatman + Script Date : 2009.08.01 + Script Notes : +--]] + +local spoke = false + +function spawn(NPC) + spoke = false +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) +end + +function respawn(NPC) + spawn(NPC) +end + +function aggro(NPC, Spawn) + local chance = math.random(1, 100) + if chance <= 25 then + local choice = math.random(1, 6) + if choice == 1 then + PlayFlavor(NPC, "voiceover/english/optional3/skeleton_base_2/ft/skeleton/skeleton_base_2_1_aggro_18d1544d.mp3", "As I rise from the grave, you will now take my place!", "", 485726074, 3646499350, Spawn) + elseif choice == 2 then + PlayFlavor(NPC, "voiceover/english/optional3/skeleton_base_2/ft/skeleton/skeleton_base_2_1_aggro_c6c2672d.mp3", "Brains! It's what's for dinner.", "", 2091371377, 2422178491, Spawn) + elseif choice == 3 then + PlayFlavor(NPC, "voiceover/english/optional3/skeleton_base_2/ft/skeleton/skeleton_base_2_1_aggro_daf16808.mp3", "To the grave with you!", "", 958122326, 1810359159, Spawn) + elseif choice == 4 then + PlayFlavor(NPC, "voiceover/english/skeleton_base_1/ft/skeleton/skeleton_base_1_1_aggro_2168c5.mp3", "Seek death and it finds you.", "", 2988489621, 1045543573, Spawn) + elseif choice == 5 then + PlayFlavor(NPC, "voiceover/english/skeleton_base_1/ft/skeleton/skeleton_base_1_1_aggro_8bc7a2cc.mp3", "Your blood calls to me.", "", 1242322025, 1154999668, Spawn) + elseif choice == 6 then + PlayFlavor(NPC, "voiceover/english/skeleton_base_1/ft/skeleton/skeleton_base_1_1_aggro_c77d7bff.mp3", "Your eyes are so pretty.", "", 1412152942, 873988632, Spawn) + end + end +end + +function healthchanged(NPC, Spawn) + local hp_percent = GetHP(NPC) / GetMaxHP(NPC) + if hp_percent <= 0.50 and spoke == false then + spoke = true + RandomCallOut(NPC, Spawn) + AddTimer(NPC, 30000, "ResetSpoke") + end +end + +function RandomCallOut(NPC, Spawn) + local choice = math.random(1, 5) + if choice == 1 then + PlayFlavor(NPC, "voiceover/english/optional3/skeleton_base_2/ft/skeleton/skeleton_base_2_1_halfhealth_29344c6f.mp3", "I didn't need those bones anyway.", "", 1704957193, 2042978689) + elseif choice == 2 then + PlayFlavor(NPC, "voiceover/english/skeleton_base_1/ft/skeleton/skeleton_base_1_1_halfhealth_a4c947e4.mp3", "I'm shattered and broken.", "", 4021018144, 1305053073) + elseif choice == 3 then + PlayFlavor(NPC, "voiceover/english/skeleton_base_1/ft/skeleton/skeleton_base_1_1_halfhealth_d9ece37f.mp3", "You've shaken the dust from my bones.", "", 2011286772, 326848383) + elseif choice == 4 then + PlayFlavor(NPC, "voiceover/english/optional3/skeleton_base_2/ft/skeleton/skeleton_base_2_1_halfhealth_f1d542e0.mp3", "Dying didn't feel good the first time.", "", 766636803, 1915881366) + elseif choice == 5 then + PlayFlavor(NPC, "voiceover/english/optional3/skeleton_base_2/ft/skeleton/skeleton_base_2_1_aggro_18d1544d.mp3", "As I rise from the grave, you will now take my place!", "", 485726074, 3646499350) + end +end + +function ResetSpoke(NPC) + spoke = false +end + +function killed(NPC, Spawn) + local chance = math.random(1, 100) + if chance <= 25 then + local choice = math.random(1, 5) + if choice == 1 then + PlayFlavor(NPC, "voiceover/english/optional3/skeleton_base_2/ft/skeleton/skeleton_base_2_1_victory_39c9d69e.mp3", "We're all just bones in the end.", "", 3276297174, 633510318, Spawn) + elseif choice == 2 then + PlayFlavor(NPC, "voiceover/english/optional3/skeleton_base_2/ft/skeleton/skeleton_base_2_1_victory_cbcd383a.mp3", "Their bones will join mine!", "", 680786598, 666536798, Spawn) + elseif choice == 3 then + PlayFlavor(NPC, "voiceover/english/skeleton_base_1/ft/skeleton/skeleton_base_1_1_victory_ccde17c2.mp3", "Another falls to join our ranks.", "", 3285235030, 4198320186, Spawn) + elseif choice == 4 then + PlayFlavor(NPC, "voiceover/english/skeleton_base_1/ft/skeleton/skeleton_base_1_1_victory_d2a649e7.mp3", "The life ebbs from them so quickly.", "", 2674394976, 3151731037, Spawn) + elseif choice == 5 then + PlayFlavor(NPC, "voiceover/english/skeleton_base_1/ft/skeleton/skeleton_base_1_1_victory_fda8e7a9.mp3", "So stops the awful beating of their heart.", "", 1120117600, 3872148135, Spawn) + end + end +end + +function death(NPC, Spawn) + spoke = false + local chance = math.random(1, 100) + if chance <= 25 then + local choice = math.random(1, 4) + if choice == 1 then + PlayFlavor(NPC, "voiceover/english/optional3/skeleton_base_2/ft/skeleton/skeleton_base_2_1_death_bb6b2b8e.mp3", "You cannot eliminate us!", "", 897103301, 541292352, Spawn) + elseif choice == 2 then + PlayFlavor(NPC, "voiceover/english/optional3/skeleton_base_2/ft/skeleton/skeleton_base_2_1_death_edc04fb8.mp3", "That pile of bones was my friend!", "", 2317728806, 1758283676, Spawn) + elseif choice == 3 then + PlayFlavor(NPC, "voiceover/english/skeleton_base_1/ft/skeleton/skeleton_base_1_1_death_fbcb503b.mp3", "Rest in peace.", "", 3591309093, 1423656405, Spawn) + elseif choice == 4 then + PlayFlavor(NPC, "voiceover/english/skeleton_base_1/ft/skeleton/skeleton_base_1_1_death_ff39f327.mp3", "Final death comes at last.", "", 3768284332, 62777040, Spawn) + end + end +end \ No newline at end of file diff --git a/server/SpawnScripts/SunkenCity/aduskshark.lua b/server/SpawnScripts/SunkenCity/aduskshark.lua new file mode 100644 index 000000000..2d9090afe --- /dev/null +++ b/server/SpawnScripts/SunkenCity/aduskshark.lua @@ -0,0 +1,32 @@ +--[[ + Script Name : SpawnScripts/SunkenCity/aduskshark.lua + Script Author : fearfx + Script Date : 2017.01.25 07:01:42 + Script Purpose : A hacky fix for "The Big One" quest (ID = 190) to spawn Smolderfin + : +--]] + +local TheBigOne = 190 + +function spawn(NPC) + +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) +end + +function respawn(NPC) + +end + +function death(NPC, Spawn) + if GetName(NPC) == "Smolderfin" then + SetTempVariable(Spawn, "TheBigOne", nil) + if HasQuest(Spawn, TheBigOne) then + SetStepComplete(Spawn, TheBigOne, 1) + AddLootItem(NPC, 11524) + end + + end +end diff --git a/server/SpawnScripts/SunkenCity/aforgottenresident.lua b/server/SpawnScripts/SunkenCity/aforgottenresident.lua new file mode 100644 index 000000000..4555818cf --- /dev/null +++ b/server/SpawnScripts/SunkenCity/aforgottenresident.lua @@ -0,0 +1,79 @@ +--[[ + Script Name : SpawnScripts/SunkenCity/aforgottenresident.lua + Script Purpose : a forgotten resident + Script Author : Scatman + Script Date : 2009.08.01 + Script Notes : +--]] + +local MALE = 1 +local FEMALE = 2 +local spoke = false + +function spawn(NPC) + spoke = false +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) +end + +function aggro(NPC, Spawn) + local chance = math.random(1, 100) + if chance <= 25 then + if GetGender(NPC) == MALE then + PlayFlavor(NPC, "voiceover/english/ghost_human_base_1/ft/ghost/ghost_human_base_1_1_aggro_gm_119a2ca8.mp3", "No. I'm unrest and you will suffer.", "", 3626119416, 3545522817) + elseif GetGender(NPC) == FEMALE then + PlayFlavor(NPC, "voiceover/english/optional3/ghost_human_base_1/ft/ghost/ghost_human_base_1_1_aggro_gf_821554e3.mp3", "Must you aggravate me so!", "", 735262000, 1417243472) + end + end +end + +function healthchanged(NPC, Spawn) + local hp_percent = GetHP(NPC) / GetMaxHP(NPC) + if hp_percent <= 0.50 and spoke == false then + spoke = true + if GetGender(NPC) == MALE then + PlayFlavor(NPC, "voiceover/english/ghost_human_base_1/ft/ghost/ghost_human_base_1_1_halfhealth_gm_8bdfff2d.mp3", "I won't miss again!", "", 1970756563, 618808961) + elseif GetGender(NPC) == FEMALE then + local choice = math.random(1, 2) + if choice == 1 then + PlayFlavor(NPC, "voiceover/english/optional3/ghost_human_base_1/ft/ghost/ghost_human_base_1_1_halfhealth_gf_fa0af03c.mp3", "For Thule's sake!", "", 2960095639, 2634994717) + elseif choice == 2 then + PlayFlavor(NPC, "voiceover/english/optional3/ghost_human_base_2/ft/ghost/ghost_human_base_2_1_halfhealth_gf_4214f9be.mp3", "Well struck, but I withstood it!", "", 2750294931, 1365592478) + end + end + AddTimer(NPC, 30000, "ResetSpoke") + end +end + +function ResetSpoke(NPC) + spoke = false +end + +function killed(NPC, Spawn) + local chance = math.random(1, 100) + if chance <= 25 then + if GetGender(NPC) == MALE then + PlayFlavor(NPC, "voiceover/english/ghost_human_base_1/ft/ghost/ghost_human_base_1_1_victory_gm_79236cb9.mp3", "It was too late. They have met our fate.", "", 869850080, 2857504352) + elseif GetGender(NPC) == FEMALE then + local choice = math.random(1, 2) + if choice == 1 then + PlayFlavor(NPC, "voiceover/english/optional3/ghost_human_base_1/ft/ghost/ghost_human_base_1_1_victory_gf_65116994.mp3", "One down! An eternity to go.", "", 3147020467, 1377166074) + elseif choice == 2 then + PlayFlavor(NPC, "voiceover/english/optional3/ghost_human_base_1/ft/ghost/ghost_human_base_1_1_victory_gf_7e0e07b4.mp3", "They can't all be this easy.", "", 2091285193, 1124297002) + end + end + end +end + +function death(NPC, Spawn) + spoke = false + local chance = math.random(1, 100) + if chance <= 25 then + end +end \ No newline at end of file diff --git a/server/SpawnScripts/SunkenCity/anexcavatorofPrexianartifacts.lua b/server/SpawnScripts/SunkenCity/anexcavatorofPrexianartifacts.lua new file mode 100644 index 000000000..6f41aaa21 --- /dev/null +++ b/server/SpawnScripts/SunkenCity/anexcavatorofPrexianartifacts.lua @@ -0,0 +1,116 @@ +--[[ + Script Name : SpawnScripts/SunkenCity/anexcavatorofPrexianartifacts.lua + Script Purpose : an excavator of Prexian artifacts + Script Author : Scatman + Script Date : 2009.08.01 + Script Notes : +--]] + +local MALE = 1 +local FEMALE = 2 +local spoke = false + +function spawn(NPC) + spoke = false +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) +end + +function aggro(NPC, Spawn) + local chance = math.random(1, 100) + if chance <= 25 then + if GetGender(NPC) == MALE then + local choice = math.random(1, 4) + if choice == 1 then + PlayFlavor(NPC, "voiceover/english/darkelf_base_1/ft/darkelf/darkelf_base_1_1_aggro_gm_10fd87eb.mp3", "There is no escape for you now!", "", 2989643101, 2260454555) + elseif choice == 2 then + PlayFlavor(NPC, "voiceover/english/darkelf_base_1/ft/darkelf/darkelf_base_1_1_aggro_gm_beacbb30.mp3", "I hope you put your affairs in order.", "", 799093996, 16617637) + elseif choice == 3 then + PlayFlavor(NPC, "voiceover/english/darkelf_base_1/ft/darkelf/darkelf_base_1_1_aggro_gm_fe18133.mp3", "Look what strolled into the spider's web!", "", 4178015902, 2202039151) + elseif choice == 4 then + PlayFlavor(NPC, "voiceover/english/optional3/darkelf_base_1/ft/darkelf/darkelf_base_1_3_aggro_gm_10fd87eb.mp3", "There is no escape for you now!", "", 3427660043, 2534456197) + end + elseif GetGender(NPC) == FEMALE then + local choice = math.random(1, 4) + if choice == 1 then + PlayFlavor(NPC, "voiceover/english/optional3/darkelf_base_1/ft/darkelf/darkelf_base_1_1_aggro_gf_10fd87eb.mp3", "There is no escape for you now!", "", 3641868496, 1960514853) + elseif choice == 2 then + PlayFlavor(NPC, "voiceover/english/optional3/darkelf_base_2/ft/darkelf/darkelf_base_2_1_aggro_gf_8e7390a8.mp3", "Welcome to torment and destruction!", "", 3770648926, 2897017212) + elseif choice == 3 then + PlayFlavor(NPC, "voiceover/english/optional3/darkelf_base_2/ft/darkelf/darkelf_base_2_1_aggro_gf_ded507db.mp3", "More intruders to deal with? Stop them!", "", 338410258, 2808797910) + elseif choice == 4 then + PlayFlavor(NPC, "voiceover/english/optional3/darkelf_base_2/ft/darkelf/darkelf_base_2_1_aggro_gf_fb890c79.mp3", "I have no time for meddlers. Destroy them!", "", 1947039155, 2094447273) + end + end + end +end + +function healthchanged(NPC, Spawn) + local hp_percent = GetHP(NPC) / GetMaxHP(NPC) + if hp_percent <= 0.50 and spoke == false then + spoke = true + if GetGender(NPC) == MALE then + local choice = math.random(1, 3) + if choice == 1 then + PlayFlavor(NPC, "voiceover/english/darkelf_base_1/ft/darkelf/darkelf_base_1_1_halfhealth_gm_577ab333.mp3", "You'll pay for that one, peon!", "", 1420508530, 39058961) + elseif choice == 2 then + PlayFlavor(NPC, "voiceover/english/darkelf_base_1/ft/darkelf/darkelf_base_1_1_halfhealth_gm_9e244d19.mp3", "How dare you!", "", 3305445355, 1846155898) + elseif choice == 3 then + PlayFlavor(NPC, "voiceover/english/optional3/darkelf_base_1/ft/darkelf/darkelf_base_1_3_halfhealth_gm_9e244d19.mp3", "How dare you!", "", 2287743179, 1322949627) + end + elseif GetGender(NPC) == FEMALE then + local choice = math.random(1, 5) + if choice == 1 then + PlayFlavor(NPC, "voiceover/english/optional3/darkelf_base_1/ft/darkelf/darkelf_base_1_1_halfhealth_gf_577ab333.mp3", "You'll pay for that one, peon!", "", 2534123849, 501758946) + elseif choice == 2 then + PlayFlavor(NPC, "voiceover/english/optional3/darkelf_base_1/ft/darkelf/darkelf_base_1_1_halfhealth_gf_9e244d19.mp3", "How dare you!", "", 2905660023, 2043697886) + elseif choice == 3 then + PlayFlavor(NPC, "voiceover/english/optional3/darkelf_base_1/ft/darkelf/darkelf_base_1_2_halfhealth_gf_9e244d19.mp3", "How dare you!", "", 2263865273, 2956956838) + elseif choice == 4 then + PlayFlavor(NPC, "voiceover/english/optional3/darkelf_base_2/ft/darkelf/darkelf_base_2_1_halfhealth_gf_8d198fee.mp3", "You may escape, but we will find you!", "", 1924616636, 4174763308) + elseif choice == 5 then + PlayFlavor(NPC, "voiceover/english/optional3/darkelf_base_2/ft/darkelf/darkelf_base_2_1_halfhealth_gf_d3fcd4c5.mp3", "How dare you strike me!", "", 1224879133, 2564393271) + end + end + AddTimer(NPC, 30000, "ResetSpoke") + end +end + +function ResetSpoke(NPC) + spoke = false +end + +function killed(NPC, Spawn) + local chance = math.random(1, 100) + if chance <= 25 then + if GetGender(NPC) == MALE then + local choice = math.random(1, 3) + if choice == 1 then + PlayFlavor(NPC, "voiceover/english/darkelf_base_1/ft/darkelf/darkelf_base_1_1_victory_gm_dff26fa.mp3", "It is a shame we must end it this way ... I could have used you.", "", 1363661737, 942201815) + elseif choice == 2 then + PlayFlavor(NPC, "voiceover/english/darkelf_base_1/ft/darkelf/darkelf_base_1_1_victory_gm_f4fc7cf8.mp3", "Did you really think you had a chance?", "", 607143583, 3133144305) + elseif choice == 3 then + PlayFlavor(NPC, "voiceover/english/darkelf_base_1/ft/darkelf/darkelf_base_1_1_victory_gm_f5088778.mp3", "Get up! Death isn't good enough for you!", "", 3381713633, 2145918189) + end + elseif GetGender(NPC) == FEMALE then + end + end +end + +function death(NPC, Spawn) + spoke = false + local chance = math.random(1, 100) + if chance <= 25 then + if GetGender(NPC) == MALE then + PlayFlavor(NPC, "voiceover/english/darkelf_base_1/ft/darkelf/darkelf_base_1_1_death_gm_8d7bb2b9.mp3", "Hold them and I'll return with help!", "", 2338278515, 1160150777) + elseif GetGender(NPC) == FEMALE then + PlayFlavor(NPC, "voiceover/english/optional3/darkelf_base_2/ft/darkelf/darkelf_base_2_1_death_gf_8bbec3e3.mp3", "No matter what I promise, you will not survive!", "", 2832420662, 2950405548) + end + end +end \ No newline at end of file diff --git a/server/SpawnScripts/SunkenCity/aninvestigatorofPrexianartifacts.lua b/server/SpawnScripts/SunkenCity/aninvestigatorofPrexianartifacts.lua new file mode 100644 index 000000000..5f6e3a08d --- /dev/null +++ b/server/SpawnScripts/SunkenCity/aninvestigatorofPrexianartifacts.lua @@ -0,0 +1,108 @@ +--[[ + Script Name : SpawnScripts/SunkenCity/aninvestigatorofPrexianartifacts.lua + Script Purpose : an investigator of Prexian artifacts + Script Author : Scatman + Script Date : 2009.08.01 + Script Notes : +--]] + +local MALE = 1 +local FEMALE = 2 +local spoke = false + +function spawn(NPC) + spoke = false +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) +end + +function aggro(NPC, Spawn) + local chance = math.random(1, 100) + if chance <= 25 then + if GetGender(NPC) == MALE then + local choice = math.random(1, 4) + if choice == 1 then + PlayFlavor(NPC, "voiceover/english/ghost_human_base_1/ft/ghost/ghost_human_base_1_1_aggro_gm_119a2ca8.mp3", "No. I'm unrest and you will suffer.", "", 3626119416, 3545522817) + elseif choice == 2 then + PlayFlavor(NPC, "voiceover/english/human_base_1/ft/human/human_base_1_1_aggro_gm_583690dc.mp3", "Summon help! We have invaders!", "", 3340212225, 279643307) + elseif choice == 3 then + PlayFlavor(NPC, "voiceover/english/human_base_1/ft/human/human_base_1_1_aggro_gm_a203c9ec.mp3", "Prepare to face your doom, meddler.", "", 1496819882, 365167432) + elseif choice == 4 then + PlayFlavor(NPC, "voiceover/english/human_base_1/ft/human/human_base_1_1_aggro_gm_a30c4f9d.mp3", "To arms!", "", 1238020980, 748146443) + end + elseif GetGender(NPC) == FEMALE then + PlayFlavor(NPC, "voiceover/english/optional3/ghost_human_base_1/ft/ghost/ghost_human_base_1_1_aggro_gf_821554e3.mp3", "Must you aggravate me so!", "", 735262000, 1417243472) + end + end +end + +function healthchanged(NPC, Spawn) + local hp_percent = GetHP(NPC) / GetMaxHP(NPC) + if hp_percent <= 0.50 and spoke == false then + spoke = true + if GetGender(NPC) == MALE then + local choice = math.random(1, 3) + if choice == 1 then + PlayFlavor(NPC, "voiceover/english/human_base_1/ft/human/human_base_1_1_halfhealth_gm_1babf022.mp3", "Is that all you have?", "", 170267964, 1158805306) + elseif choice == 2 then + PlayFlavor(NPC, "voiceover/english/human_base_1/ft/human/human_base_1_1_halfhealth_gm_8529e507.mp3", "I can't hold them forever!", "", 644448824, 755050547) + elseif choice == 3 then + PlayFlavor(NPC, "voiceover/english/optional5/human_base_2/ft/human/human_base_2_2_halfhealth_gm_64f84f7d.mp3", "This time, don't tickle me with your weapon!", "", 425567694, 559993522) + end + elseif GetGender(NPC) == FEMALE then + local choice = math.random(1, 4) + if choice == 1 then + PlayFlavor(NPC, "voiceover/english/optional3/ghost_human_base_1/ft/ghost/ghost_human_base_1_1_halfhealth_gf_fa0af03c.mp3", "For Thule's sake!", "", 2960095639, 2634994717) + elseif choice == 2 then + PlayFlavor(NPC, "voiceover/english/optional3/ghost_human_base_2/ft/ghost/ghost_human_base_2_1_halfhealth_gf_4214f9be.mp3", "Well struck, but I withstood it!", "", 2750294931, 1365592478) + elseif choice == 3 then + PlayFlavor(NPC, "voiceover/english/optional3/human_base_1/ft/human/human_base_1_1_halfhealth_gf_1babf022.mp3", "Is that all you have?", "", 2979351329, 4050238683) + elseif choice == 4 then + PlayFlavor(NPC, "voiceover/english/optional3/human_base_1/ft/human/human_base_1_1_halfhealth_gf_8529e507.mp3", "I can't hold them forever!", "", 3371581229, 792393228) + end + end + AddTimer(NPC, 30000, "ResetSpoke") + end +end + +function ResetSpoke(NPC) + spoke = false +end + +function killed(NPC, Spawn) + local chance = math.random(1, 100) + if chance <= 25 then + if GetGender(NPC) == MALE then + local choice = math.random(1, 4) + if choice == 1 then + PlayFlavor(NPC, "voiceover/english/ghost_human_base_1/ft/ghost/ghost_human_base_1_1_victory_gm_79236cb9.mp3", "It was too late. They have met our fate.", "", 869850080, 2857504352) + elseif choice == 2 then + PlayFlavor(NPC, "voiceover/english/human_base_1/ft/human/human_base_1_1_victory_gm_153f12ff.mp3", "One down!", "", 3009518664, 4140389760) + elseif choice == 3 then + PlayFlavor(NPC, "voiceover/english/human_base_1/ft/human/human_base_1_1_victory_gm_4553e1e0.mp3", "Flee now or meet this one's fate.", "", 3032162747, 1359206304) + elseif choice == 4 then + PlayFlavor(NPC, "voiceover/english/human_base_1/ft/human/human_base_1_1_victory_gm_ec0cd85a.mp3", "I hope they're all this easy.", "", 2687289628, 2303639320) + end + elseif GetGender(NPC) == FEMALE then + PlayFlavor(NPC, "voiceover/english/optional3/ghost_human_base_1/ft/ghost/ghost_human_base_1_1_aggro_gf_821554e3.mp3", "Must you aggravate me so!", "", 735262000, 1417243472, Spawn) + end + end +end + +function death(NPC, Spawn) + spoke = false + local chance = math.random(1, 100) + if chance <= 25 then + if GetGender(NPC) == MALE then + PlayFlavor(NPC, "voiceover/english/human_base_1/ft/human/human_base_1_1_death_gm_7612214f.mp3", "All hands retreat!", "", 3033325782, 1103449586) + elseif GetGender(NPC) == FEMALE then + PlayFlavor(NPC, "voiceover/english/optional3/human_base_1/ft/human/human_base_1_1_death_gf_7612214f.mp3", "All hands retreat!", "", 3620177897, 757784861) + end + end +end \ No newline at end of file diff --git a/server/SpawnScripts/SunkenCity/arustmonster.lua b/server/SpawnScripts/SunkenCity/arustmonster.lua new file mode 100644 index 000000000..b6c647d00 --- /dev/null +++ b/server/SpawnScripts/SunkenCity/arustmonster.lua @@ -0,0 +1,27 @@ +--[[ + Script Name : SpawnScripts/SunkenCity/arustmonster.lua + Script Purpose : a rust monster + Script Author : Scatman + Script Date : 2009.07.28 + Script Notes : +--]] + +local QUEST_3_FROM_THORSON = 268 + +function spawn(NPC) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) +end + +function casted_on(Target, Caster) + -- TODO: Verify 'Catalog Creature' was casted. + if HasQuest(Caster, QUEST_3_FROM_THORSON) and not QuestStepIsComplete(Caster, QUEST_3_FROM_THORSON, 3) then + SetStepComplete(Caster, QUEST_3_FROM_THORSON, 3) + end +end \ No newline at end of file diff --git a/server/SpawnScripts/SunkenCity/asmallrustmonster.lua b/server/SpawnScripts/SunkenCity/asmallrustmonster.lua new file mode 100644 index 000000000..cef524815 --- /dev/null +++ b/server/SpawnScripts/SunkenCity/asmallrustmonster.lua @@ -0,0 +1,27 @@ +--[[ + Script Name : SpawnScripts/SunkenCity/asmallrustmonster.lua + Script Purpose : a small rust monster + Script Author : Scatman + Script Date : 2009.07.28 + Script Notes : +--]] + +local QUEST_3_FROM_THORSON = 268 + +function spawn(NPC) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) +end + +function casted_on(Target, Caster) + -- TODO: Verify 'Catalog Creature' was casted. + if HasQuest(Caster, QUEST_3_FROM_THORSON) and not QuestStepIsComplete(Caster, QUEST_3_FROM_THORSON, 2) then + SetStepComplete(Caster, QUEST_3_FROM_THORSON, 2) + end +end \ No newline at end of file diff --git a/server/SpawnScripts/SunkenCity/asmallscorpion.lua b/server/SpawnScripts/SunkenCity/asmallscorpion.lua new file mode 100644 index 000000000..6642233ef --- /dev/null +++ b/server/SpawnScripts/SunkenCity/asmallscorpion.lua @@ -0,0 +1,27 @@ +--[[ + Script Name : SpawnScripts/SunkenCity/asmallscorpion.lua + Script Purpose : a small scorpion + Script Author : Scatman + Script Date : 2009.07.28 + Script Notes : +--]] + +local QUEST_3_FROM_THORSON = 268 + +function spawn(NPC) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) +end + +function casted_on(Target, Caster) + -- TODO: Verify 'Catalog Creature' was casted. + if HasQuest(Caster, QUEST_3_FROM_THORSON) and not QuestStepIsComplete(Caster, QUEST_3_FROM_THORSON, 4) then + SetStepComplete(Caster, QUEST_3_FROM_THORSON, 4) + end +end \ No newline at end of file diff --git a/server/SpawnScripts/SunkenCity/aspectraldenizen.lua b/server/SpawnScripts/SunkenCity/aspectraldenizen.lua new file mode 100644 index 000000000..ea456f5df --- /dev/null +++ b/server/SpawnScripts/SunkenCity/aspectraldenizen.lua @@ -0,0 +1,58 @@ +--[[ + Script Name : SpawnScripts/SunkenCity/aspectraldenizen.lua + Script Purpose : a spectral denizen + Script Author : Scatman + Script Date : 2009.08.01 + Script Notes : +--]] + +local MALE = 1 +local FEMALE = 2 +local spoke = false + +function spawn(NPC) + spoke = false +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) +end + +function aggro(NPC, Spawn) + local chance = math.random(1, 100) + if chance <= 25 then + end +end + +function healthchanged(NPC, Spawn) + local hp_percent = GetHP(NPC) / GetMaxHP(NPC) + if hp_percent <= 0.50 and spoke == false then + spoke = true + if GetGender(NPC) == MALE then + elseif GetGender(NPC) == FEMALE then + PlayFlavor(NPC, "voiceover/english/ghost_base_1/ft/ghost/ghost_base_1_1_halfhealth_gf_4c18f3ce.mp3", "Your struggle is for naught!", "", 1689672062, 2512623281) + end + AddTimer(NPC, 30000, "ResetSpoke") + end +end + +function ResetSpoke(NPC) + spoke = false +end + +function killed(NPC, Spawn) + local chance = math.random(1, 100) + if chance <= 25 then + end +end + +function death(NPC, Spawn) + spoke = false + local chance = math.random(1, 100) + if chance <= 25 then + end +end \ No newline at end of file diff --git a/server/SpawnScripts/SunkenCity/aspectralresident.lua b/server/SpawnScripts/SunkenCity/aspectralresident.lua new file mode 100644 index 000000000..352c0bf89 --- /dev/null +++ b/server/SpawnScripts/SunkenCity/aspectralresident.lua @@ -0,0 +1,79 @@ +--[[ + Script Name : SpawnScripts/SunkenCity/aspectralresident.lua + Script Purpose : a spectral resident + Script Author : Scatman + Script Date : 2009.08.01 + Script Notes : +--]] + +local MALE = 1 +local FEMALE = 2 +local spoke = false + +function spawn(NPC) + spoke = false +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) +end + +function aggro(NPC, Spawn) + local chance = math.random(1, 100) + if chance <= 25 then + if GetGender(NPC) == MALE then + PlayFlavor(NPC, "voiceover/english/ghost_human_base_1/ft/ghost/ghost_human_base_1_1_aggro_gm_119a2ca8.mp3", "No. I'm unrest and you will suffer.", "", 3626119416, 3545522817) + elseif GetGender(NPC) == FEMALE then + PlayFlavor(NPC, "voiceover/english/optional3/ghost_human_base_1/ft/ghost/ghost_human_base_1_1_aggro_gf_821554e3.mp3", "Must you aggravate me so!", "", 735262000, 1417243472) + end + end +end + +function healthchanged(NPC, Spawn) + local hp_percent = GetHP(NPC) / GetMaxHP(NPC) + if hp_percent <= 0.50 and spoke == false then + spoke = true + if GetGender(NPC) == MALE then + PlayFlavor(NPC, "voiceover/english/ghost_human_base_1/ft/ghost/ghost_human_base_1_1_halfhealth_gm_8bdfff2d.mp3", "I won't miss again!", "", 1970756563, 618808961) + elseif GetGender(NPC) == FEMALE then + local choice = math.random(1, 2) + if choice == 1 then + PlayFlavor(NPC, "voiceover/english/optional3/ghost_human_base_1/ft/ghost/ghost_human_base_1_1_halfhealth_gf_fa0af03c.mp3", "For Thule's sake!", "", 2960095639, 2634994717) + elseif choice == 2 then + PlayFlavor(NPC, "voiceover/english/optional3/ghost_human_base_2/ft/ghost/ghost_human_base_2_1_halfhealth_gf_4214f9be.mp3", "Well struck, but I withstood it!", "", 2750294931, 1365592478) + end + end + AddTimer(NPC, 30000, "ResetSpoke") + end +end + +function ResetSpoke(NPC) + spoke = false +end + +function killed(NPC, Spawn) + local chance = math.random(1, 100) + if chance <= 25 then + if GetGender(NPC) == MALE then + PlayFlavor(NPC, "voiceover/english/ghost_human_base_1/ft/ghost/ghost_human_base_1_1_victory_gm_79236cb9.mp3", "It was too late. They have met our fate.", "", 869850080, 2857504352) + elseif GetGender(NPC) == FEMALE then + local choice = math.random(1, 2) + if choice == 1 then + PlayFlavor(NPC, "voiceover/english/optional3/ghost_human_base_1/ft/ghost/ghost_human_base_1_1_victory_gf_65116994.mp3", "One down! An eternity to go.", "", 3147020467, 1377166074) + elseif choice == 2 then + PlayFlavor(NPC, "voiceover/english/optional3/ghost_human_base_1/ft/ghost/ghost_human_base_1_1_victory_gf_7e0e07b4.mp3", "They can't all be this easy.", "", 2091285193, 1124297002) + end + end + end +end + +function death(NPC, Spawn) + spoke = false + local chance = math.random(1, 100) + if chance <= 25 then + end +end \ No newline at end of file diff --git a/server/SpawnScripts/SunkenCity/curfeld_quest_barrel.lua b/server/SpawnScripts/SunkenCity/curfeld_quest_barrel.lua new file mode 100644 index 000000000..2d4f11405 --- /dev/null +++ b/server/SpawnScripts/SunkenCity/curfeld_quest_barrel.lua @@ -0,0 +1,27 @@ +--[[ + Script Name : SpawnScripts/SunkenCity/curfeld_quest_barrel.lua + Script Purpose : + Script Author : + Script Date : + Script Notes : +--]] + +local QUEST_1_FROM_CURFIELD = 270 + +function spawn(NPC) + SetRequiredQuest(QUEST_1_FROM_CURFIELD, 1) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) +end + +function casted_on(NPC, Spawn) + if HasQuest(Spawn, QUEST_1_FROM_CURFIELD) and GetQuestStep(Spawn, QUEST_1_FROM_CURFIELD) == 1 then + SendMessage(Spawn, "You search the barrel and find the stolen research documents."); + SetStepComplete(Spawn, QUEST_1_FROM_CURFIELD, 1) + end +end \ No newline at end of file diff --git a/server/SpawnScripts/SunkenCity/widget_box.lua b/server/SpawnScripts/SunkenCity/widget_box.lua new file mode 100644 index 000000000..313d5d20b --- /dev/null +++ b/server/SpawnScripts/SunkenCity/widget_box.lua @@ -0,0 +1,44 @@ +--[[ + Script Name : SpawnScripts/SunkenCity/widget_box.lua + Script Purpose : widget_box_* + Script Author : Scatman + Script Date : 2009.08.01 + Script Notes : +--]] + +local QUEST_FROM_LUKUR = 276 + +function spawn(NPC) + --SetRequiredQuest(QUEST_FROM_LUKUR, 1) + --SetRequiredQuest(QUEST_FROM_LUKUR, 2) + --SetRequiredQuest(QUEST_FROM_LUKUR, 3) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) +end + +function casted_on(NPC, Spawn) + if HasQuest(Spawn, QUEST_FROM_LUKUR) and (not QuestStepIsComplete(Spawn, QUEST_FROM_LUKUR, 1) or not QuestStepIsComplete(Spawn, QUEST_FROM_LUKUR, 2) or not QuestStepIsComplete(Spawn, QUEST_FROM_LUKUR, 3)) then + local found = false + + -- Pick a random step is update and then update it if it's not already complete. Do this until we find a step that has not been + -- completed yet. + while found == false do + local choice = math.random(1, 3) + if not QuestStepIsComplete(Spawn, QUEST_FROM_LUKUR, choice) then + SetStepComplete(Spawn, QUEST_FROM_LUKUR, choice) + found = true + SpawnSet(NPC, "show_command_icon", 0) + AddTimer(NPC, 60000, "TurnOn") + end + end + end +end + +function TurnOn(NPC) + SpawnSet(NPC, "show_command_icon", 1) +end \ No newline at end of file diff --git a/server/SpawnScripts/TenebrousTangle/FlightCloud.lua b/server/SpawnScripts/TenebrousTangle/FlightCloud.lua new file mode 100644 index 000000000..088e2dfc4 --- /dev/null +++ b/server/SpawnScripts/TenebrousTangle/FlightCloud.lua @@ -0,0 +1,157 @@ +--[[ + Script Name : SpawnScripts/PillarsFlame/FlightCloud.lua + Script Purpose : Tenebrous Tangle Flight Cloud (880048) + Script Author : Neatz09 + Script Date : 4/22/2019 + Script Notes : +--]] + +function hailed(NPC, Spawn) + conversation = CreateConversation() + AddConversationOption(conversation, "I would like to travel.", "dlg_1_1") + AddConversationOption(conversation, "Nowhere.") + StartConversation(conversation, NPC, Spawn, "Greetings traveler, how can I assist you today?") + end + +function dlg_1_1(NPC, Spawn) + local con = CreateConversation() + + if GetSpawnLocationID(NPC) == 622752 then + --Ravasect Incursion-- + AddConversationOption(con, "To Bixie Isle.", "RavToBixie") + AddConversationOption(con, "To Gazer Isle.", "RavToGazer") + AddConversationOption(con, "To Temple Grounds.", "RavToTemple") + elseif GetSpawnLocationID(NPC) == 662668 then + --Vultak Scavenging Site-- + AddConversationOption(con, "To Fear Tainted Isle.", "VulToFear") + AddConversationOption(con, "To Halls Landing.", "VulToHalls") + elseif GetSpawnLocationID(NPC) == 622666 then + --Halls Landing-- + AddConversationOption(con, "To Vultak Scavenging Site.", "HallsToVul") + elseif GetSpawnLocationID(NPC) == 622758 then + --Hidden Refuge-- + AddConversationOption(con, "To Tenebrous Landing.", "RefToTen") + AddConversationOption(con, "To Vicious Breeding Grounds.", "RefToVic") + elseif GetSpawnLocationID(NPC) == 622755 then + --Bixie Isle-- + AddConversationOption(con, "To Ravasect Incursion.", "BixieToRav") + AddConversationOption(con, "To Temple Grounds.", "BixieToTemp") + elseif GetSpawnLocationID(NPC) == 622756 then + --Temple Grounds-- + AddConversationOption(con, "To Bixie Isle.", "TempToBixie") + AddConversationOption(con, "To Ravasect Incursion.", "TempToRav") + elseif GetSpawnLocationID(NPC) == 622757 then + --Sanctum Landing-- + AddConversationOption(con, "To Gazer Isle.", "SancToGazer") + elseif GetSpawnLocationID(NPC) == 622750 then + --Gazer Isle-- + AddConversationOption(con, "To Fear Tainted Isle.", "GazerToFear") + AddConversationOption(con, "To Ravasect Incursion.", "GazerToRav") + AddConversationOption(con, "To Sanctum Landing.", "GazerToSanc") + elseif GetSpawnLocationID(NPC) == 622623 then + --Fear Tainted Isle-- + AddConversationOption(con, "To Gazer Isle.", "FearToGazer") + AddConversationOption(con, "To Vultak Scavenging Site.", "FearToVul") + elseif GetSpawnLocationID(NPC) == 622748 then + --Viscious Breeding Grounds-- + AddConversationOption(con, "To Hidden Refuge.", "VicToRef") + end + AddConversationOption(con, "Nowhere.") + StartConversation(con, NPC, Spawn, "Where to?") +end + +function RavToBixie(NPC, Spawn) + StartAutoMount(Spawn, 749) + SetMount(Spawn, 1369) +end + +function RavToGazer(NPC, Spawn) + StartAutoMount(Spawn, 748) + SetMount(Spawn, 1369) +end + +function RavToTemple(NPC, Spawn) + StartAutoMount(Spawn, 747) + SetMount(Spawn, 1369) +end + +function VulToFear(NPC, Spawn) + StartAutoMount(Spawn, 751) + SetMount(Spawn, 1369) +end + +function VulToHalls(NPC, Spawn) + StartAutoMount(Spawn, 750) + SetMount(Spawn, 1369) +end + +function HallsToVul(NPC, Spawn) + StartAutoMount(Spawn, 755) + SetMount(Spawn, 1369) +end + +function RefToTen(NPC, Spawn) + StartAutoMount(Spawn, 765) + SetMount(Spawn, 1369) +end + +function RefToVic(NPC, Spawn) + StartAutoMount(Spawn, 761) + SetMount(Spawn, 1369) +end + +function BixieToRav(NPC, Spawn) + StartAutoMount(Spawn, 760) + SetMount(Spawn, 1369) +end + +function BixieToTemp(NPC, Spawn) + StartAutoMount(Spawn, 759) + SetMount(Spawn, 1369) +end + +function TempToBixie(NPC, Spawn) + StartAutoMount(Spawn, 753) + SetMount(Spawn, 1369) +end + +function TempToRav(NPC, Spawn) + StartAutoMount(Spawn, 754) + SetMount(Spawn, 1369) +end + +function SancToGazer(NPC, Spawn) + StartAutoMount(Spawn, 752) + SetMount(Spawn, 1369) +end + +function GazerToFear(NPC, Spawn) + StartAutoMount(Spawn, 763) + SetMount(Spawn, 1369) +end + +function GazerToRav(NPC, Spawn) + StartAutoMount(Spawn, 757) + SetMount(Spawn, 1369) +end + +function GazerToSanc(NPC, Spawn) + StartAutoMount(Spawn, 756) + SetMount(Spawn, 1369) +end + +function FearToGazer(NPC, Spawn) + StartAutoMount(Spawn, 763) + SetMount(Spawn, 1369) +end + +function FearToVul(NPC, Spawn) + StartAutoMount(Spawn, 758) + SetMount(Spawn, 1369) +end + +function VicToRef(NPC, Spawn) + StartAutoMount(Spawn, 762) + SetMount(Spawn, 1369) +end +end \ No newline at end of file diff --git a/server/SpawnScripts/TenebrousTangle/adraconicidol.lua b/server/SpawnScripts/TenebrousTangle/adraconicidol.lua new file mode 100644 index 000000000..be7e1ca71 --- /dev/null +++ b/server/SpawnScripts/TenebrousTangle/adraconicidol.lua @@ -0,0 +1,160 @@ +--[[ + Script Name : SpawnScripts/TenebrousTangle/FlightCloud.lua + Script Purpose : Tenebrous Tangle Flight Cloud (880048) + Script Author : Neatz09 + Script Date : 4/22/2019 + Script Notes : +--]] + +function respawn(NPC) + Spawn(NPC) +end + +function hailed(NPC, Spawn) + conversation = CreateConversation() + AddConversationOption(conversation, "I would like to travel.", "dlg_1_1") + AddConversationOption(conversation, "Nowhere.") + StartConversation(conversation, NPC, Spawn, "Greetings traveler, how can I assist you today?") + end + +function dlg_1_1(NPC, Spawn) + local con = CreateConversation() + + if GetSpawnLocationID(NPC) == 622752 then + --Ravasect Incursion-- + AddConversationOption(con, "To Bixie Isle.", "RavToBixie") + AddConversationOption(con, "To Gazer Isle.", "RavToGazer") + AddConversationOption(con, "To Temple Grounds.", "RavToTemple") + elseif GetSpawnLocationID(NPC) == 662668 then + --Vultak Scavenging Site-- + AddConversationOption(con, "To Fear Tainted Isle.", "VulToFear") + AddConversationOption(con, "To Halls Landing.", "VulToHalls") + elseif GetSpawnLocationID(NPC) == 622666 then + --Halls Landing-- + AddConversationOption(con, "To Vultak Scavenging Site.", "HallsToVul") + elseif GetSpawnLocationID(NPC) == 622758 then + --Hidden Refuge-- + AddConversationOption(con, "To Tenebrous Landing.", "RefToTen") + AddConversationOption(con, "To Vicious Breeding Grounds.", "RefToVic") + elseif GetSpawnLocationID(NPC) == 622755 then + --Bixie Isle-- + AddConversationOption(con, "To Ravasect Incursion.", "BixieToRav") + AddConversationOption(con, "To Temple Grounds.", "BixieToTemp") + elseif GetSpawnLocationID(NPC) == 622756 then + --Temple Grounds-- + AddConversationOption(con, "To Bixie Isle.", "TempToBixie") + AddConversationOption(con, "To Ravasect Incursion.", "TempToRav") + elseif GetSpawnLocationID(NPC) == 622757 then + --Sanctum Landing-- + AddConversationOption(con, "To Gazer Isle.", "SancToGazer") + elseif GetSpawnLocationID(NPC) == 622750 then + --Gazer Isle-- + AddConversationOption(con, "To Fear Tainted Isle.", "GazerToFear") + AddConversationOption(con, "To Ravasect Incursion.", "GazerToRav") + AddConversationOption(con, "To Sanctum Landing.", "GazerToSanc") + elseif GetSpawnLocationID(NPC) == 622623 then + --Fear Tainted Isle-- + AddConversationOption(con, "To Gazer Isle.", "FearToGazer") + AddConversationOption(con, "To Vultak Scavenging Site.", "FearToVul") + elseif GetSpawnLocationID(NPC) == 622748 then + --Viscious Breeding Grounds-- + AddConversationOption(con, "To Hidden Refuge.", "VicToRef") + end + AddConversationOption(con, "Nowhere.") + StartConversation(con, NPC, Spawn, "Where to?") +end + +function RavToBixie(NPC, Spawn) + StartAutoMount(Spawn, 749) + SetMount(Spawn, 1369) +end + +function RavToGazer(NPC, Spawn) + StartAutoMount(Spawn, 748) + SetMount(Spawn, 1369) +end + +function RavToTemple(NPC, Spawn) + StartAutoMount(Spawn, 747) + SetMount(Spawn, 1369) +end + +function VulToFear(NPC, Spawn) + StartAutoMount(Spawn, 751) + SetMount(Spawn, 1369) +end + +function VulToHalls(NPC, Spawn) + StartAutoMount(Spawn, 750) + SetMount(Spawn, 1369) +end + +function HallsToVul(NPC, Spawn) + StartAutoMount(Spawn, 755) + SetMount(Spawn, 1369) +end + +function RefToTen(NPC, Spawn) + StartAutoMount(Spawn, 765) + SetMount(Spawn, 1369) +end + +function RefToVic(NPC, Spawn) + StartAutoMount(Spawn, 761) + SetMount(Spawn, 1369) +end + +function BixieToRav(NPC, Spawn) + StartAutoMount(Spawn, 760) + SetMount(Spawn, 1369) +end + +function BixieToTemp(NPC, Spawn) + StartAutoMount(Spawn, 759) + SetMount(Spawn, 1369) +end + +function TempToBixie(NPC, Spawn) + StartAutoMount(Spawn, 753) + SetMount(Spawn, 1369) +end + +function TempToRav(NPC, Spawn) + StartAutoMount(Spawn, 754) + SetMount(Spawn, 1369) +end + +function SancToGazer(NPC, Spawn) + StartAutoMount(Spawn, 752) + SetMount(Spawn, 1369) +end + +function GazerToFear(NPC, Spawn) + StartAutoMount(Spawn, 763) + SetMount(Spawn, 1369) +end + +function GazerToRav(NPC, Spawn) + StartAutoMount(Spawn, 757) + SetMount(Spawn, 1369) +end + +function GazerToSanc(NPC, Spawn) + StartAutoMount(Spawn, 756) + SetMount(Spawn, 1369) +end + +function FearToGazer(NPC, Spawn) + StartAutoMount(Spawn, 763) + SetMount(Spawn, 1369) +end + +function FearToVul(NPC, Spawn) + StartAutoMount(Spawn, 758) + SetMount(Spawn, 1369) +end + +function VicToRef(NPC, Spawn) + StartAutoMount(Spawn, 762) + SetMount(Spawn, 1369) +end \ No newline at end of file diff --git a/server/SpawnScripts/TenebrousTangle/ahulkinggorg.lua b/server/SpawnScripts/TenebrousTangle/ahulkinggorg.lua new file mode 100644 index 000000000..3741c09eb --- /dev/null +++ b/server/SpawnScripts/TenebrousTangle/ahulkinggorg.lua @@ -0,0 +1,162 @@ +--[[ + Script Name : SpawnScripts/PillarsFlame/FlightCloud.lua + Script Purpose : Tenebrous Tangle Flight Cloud (880048) + Script Author : Neatz09 + Script Date : 4/22/2019 + Script Notes : +--]] + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + AddConversationOption(conversation, "I would like to travel.", "dlg_1_1") + AddConversationOption(conversation, "Nowhere.") + StartConversation(conversation, NPC, Spawn, "Greetings traveler, how can I assist you today?") + end + +function dlg_1_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + local con = CreateConversation() + + if GetSpawnLocationID(NPC) == 622752 then + --Ravasect Incursion-- + AddConversationOption(con, "To Bixie Isle.", "RavToBixie") + AddConversationOption(con, "To Gazer Isle.", "RavToGazer") + AddConversationOption(con, "To Temple Grounds.", "RavToTemple") + elseif GetSpawnLocationID(NPC) == 662668 then + --Vultak Scavenging Site-- + AddConversationOption(con, "To Fear Tainted Isle.", "VulToFear") + AddConversationOption(con, "To Halls Landing.", "VulToHalls") + elseif GetSpawnLocationID(NPC) == 622666 then + --Halls Landing-- + AddConversationOption(con, "To Vultak Scavenging Site.", "HallsToVul") + elseif GetSpawnLocationID(NPC) == 622758 then + --Hidden Refuge-- + AddConversationOption(con, "To Tenebrous Landing.", "RefToTen") + AddConversationOption(con, "To Vicious Breeding Grounds.", "RefToVic") + elseif GetSpawnLocationID(NPC) == 622755 then + --Bixie Isle-- + AddConversationOption(con, "To Ravasect Incursion.", "BixieToRav") + AddConversationOption(con, "To Temple Grounds.", "BixieToTemp") + elseif GetSpawnLocationID(NPC) == 622756 then + --Temple Grounds-- + AddConversationOption(con, "To Bixie Isle.", "TempToBixie") + AddConversationOption(con, "To Ravasect Incursion.", "TempToRav") + elseif GetSpawnLocationID(NPC) == 622757 then + --Sanctum Landing-- + AddConversationOption(con, "To Gazer Isle.", "SancToGazer") + elseif GetSpawnLocationID(NPC) == 622750 then + --Gazer Isle-- + AddConversationOption(con, "To Fear Tainted Isle.", "GazerToFear") + AddConversationOption(con, "To Ravasect Incursion.", "GazerToRav") + AddConversationOption(con, "To Sanctum Landing.", "GazerToSanc") + elseif GetSpawnLocationID(NPC) == 622623 then + --Fear Tainted Isle-- + AddConversationOption(con, "To Gazer Isle.", "FearToGazer") + AddConversationOption(con, "To Vultak Scavenging Site.", "FearToVul") + elseif GetSpawnLocationID(NPC) == 622748 then + --Viscious Breeding Grounds-- + AddConversationOption(con, "To Hidden Refuge.", "VicToRef") + end + AddConversationOption(con, "Nowhere.") + StartConversation(con, NPC, Spawn, "Where to?") +end + +function RavToBixie(NPC, Spawn) + StartAutoMount(Spawn, 749) + SetMount(Spawn, 1369) +end + +function RavToGazer(NPC, Spawn) + StartAutoMount(Spawn, 748) + SetMount(Spawn, 1369) +end + +function RavToTemple(NPC, Spawn) + StartAutoMount(Spawn, 747) + SetMount(Spawn, 1369) +end + +function VulToFear(NPC, Spawn) + StartAutoMount(Spawn, 751) + SetMount(Spawn, 1369) +end + +function VulToHalls(NPC, Spawn) + StartAutoMount(Spawn, 750) + SetMount(Spawn, 1369) +end + +function HallsToVul(NPC, Spawn) + StartAutoMount(Spawn, 755) + SetMount(Spawn, 1369) +end + +function RefToTen(NPC, Spawn) + StartAutoMount(Spawn, 765) + SetMount(Spawn, 1369) +end + +function RefToVic(NPC, Spawn) + StartAutoMount(Spawn, 761) + SetMount(Spawn, 1369) +end + +function BixieToRav(NPC, Spawn) + StartAutoMount(Spawn, 760) + SetMount(Spawn, 1369) +end + +function BixieToTemp(NPC, Spawn) + StartAutoMount(Spawn, 759) + SetMount(Spawn, 1369) +end + +function TempToBixie(NPC, Spawn) + StartAutoMount(Spawn, 753) + SetMount(Spawn, 1369) +end + +function TempToRav(NPC, Spawn) + StartAutoMount(Spawn, 754) + SetMount(Spawn, 1369) +end + +function SancToGazer(NPC, Spawn) + StartAutoMount(Spawn, 752) + SetMount(Spawn, 1369) +end + +function GazerToFear(NPC, Spawn) + StartAutoMount(Spawn, 763) + SetMount(Spawn, 1369) +end + +function GazerToRav(NPC, Spawn) + StartAutoMount(Spawn, 757) + SetMount(Spawn, 1369) +end + +function GazerToSanc(NPC, Spawn) + StartAutoMount(Spawn, 756) + SetMount(Spawn, 1369) +end + +function FearToGazer(NPC, Spawn) + StartAutoMount(Spawn, 763) + SetMount(Spawn, 1369) +end + +function FearToVul(NPC, Spawn) + StartAutoMount(Spawn, 758) + SetMount(Spawn, 1369) +end + +function VicToRef(NPC, Spawn) + StartAutoMount(Spawn, 762) + SetMount(Spawn, 1369) +end \ No newline at end of file diff --git a/server/SpawnScripts/TenebrousTangle/aswoopserpent.lua b/server/SpawnScripts/TenebrousTangle/aswoopserpent.lua new file mode 100644 index 000000000..3741c09eb --- /dev/null +++ b/server/SpawnScripts/TenebrousTangle/aswoopserpent.lua @@ -0,0 +1,162 @@ +--[[ + Script Name : SpawnScripts/PillarsFlame/FlightCloud.lua + Script Purpose : Tenebrous Tangle Flight Cloud (880048) + Script Author : Neatz09 + Script Date : 4/22/2019 + Script Notes : +--]] + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + AddConversationOption(conversation, "I would like to travel.", "dlg_1_1") + AddConversationOption(conversation, "Nowhere.") + StartConversation(conversation, NPC, Spawn, "Greetings traveler, how can I assist you today?") + end + +function dlg_1_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + local con = CreateConversation() + + if GetSpawnLocationID(NPC) == 622752 then + --Ravasect Incursion-- + AddConversationOption(con, "To Bixie Isle.", "RavToBixie") + AddConversationOption(con, "To Gazer Isle.", "RavToGazer") + AddConversationOption(con, "To Temple Grounds.", "RavToTemple") + elseif GetSpawnLocationID(NPC) == 662668 then + --Vultak Scavenging Site-- + AddConversationOption(con, "To Fear Tainted Isle.", "VulToFear") + AddConversationOption(con, "To Halls Landing.", "VulToHalls") + elseif GetSpawnLocationID(NPC) == 622666 then + --Halls Landing-- + AddConversationOption(con, "To Vultak Scavenging Site.", "HallsToVul") + elseif GetSpawnLocationID(NPC) == 622758 then + --Hidden Refuge-- + AddConversationOption(con, "To Tenebrous Landing.", "RefToTen") + AddConversationOption(con, "To Vicious Breeding Grounds.", "RefToVic") + elseif GetSpawnLocationID(NPC) == 622755 then + --Bixie Isle-- + AddConversationOption(con, "To Ravasect Incursion.", "BixieToRav") + AddConversationOption(con, "To Temple Grounds.", "BixieToTemp") + elseif GetSpawnLocationID(NPC) == 622756 then + --Temple Grounds-- + AddConversationOption(con, "To Bixie Isle.", "TempToBixie") + AddConversationOption(con, "To Ravasect Incursion.", "TempToRav") + elseif GetSpawnLocationID(NPC) == 622757 then + --Sanctum Landing-- + AddConversationOption(con, "To Gazer Isle.", "SancToGazer") + elseif GetSpawnLocationID(NPC) == 622750 then + --Gazer Isle-- + AddConversationOption(con, "To Fear Tainted Isle.", "GazerToFear") + AddConversationOption(con, "To Ravasect Incursion.", "GazerToRav") + AddConversationOption(con, "To Sanctum Landing.", "GazerToSanc") + elseif GetSpawnLocationID(NPC) == 622623 then + --Fear Tainted Isle-- + AddConversationOption(con, "To Gazer Isle.", "FearToGazer") + AddConversationOption(con, "To Vultak Scavenging Site.", "FearToVul") + elseif GetSpawnLocationID(NPC) == 622748 then + --Viscious Breeding Grounds-- + AddConversationOption(con, "To Hidden Refuge.", "VicToRef") + end + AddConversationOption(con, "Nowhere.") + StartConversation(con, NPC, Spawn, "Where to?") +end + +function RavToBixie(NPC, Spawn) + StartAutoMount(Spawn, 749) + SetMount(Spawn, 1369) +end + +function RavToGazer(NPC, Spawn) + StartAutoMount(Spawn, 748) + SetMount(Spawn, 1369) +end + +function RavToTemple(NPC, Spawn) + StartAutoMount(Spawn, 747) + SetMount(Spawn, 1369) +end + +function VulToFear(NPC, Spawn) + StartAutoMount(Spawn, 751) + SetMount(Spawn, 1369) +end + +function VulToHalls(NPC, Spawn) + StartAutoMount(Spawn, 750) + SetMount(Spawn, 1369) +end + +function HallsToVul(NPC, Spawn) + StartAutoMount(Spawn, 755) + SetMount(Spawn, 1369) +end + +function RefToTen(NPC, Spawn) + StartAutoMount(Spawn, 765) + SetMount(Spawn, 1369) +end + +function RefToVic(NPC, Spawn) + StartAutoMount(Spawn, 761) + SetMount(Spawn, 1369) +end + +function BixieToRav(NPC, Spawn) + StartAutoMount(Spawn, 760) + SetMount(Spawn, 1369) +end + +function BixieToTemp(NPC, Spawn) + StartAutoMount(Spawn, 759) + SetMount(Spawn, 1369) +end + +function TempToBixie(NPC, Spawn) + StartAutoMount(Spawn, 753) + SetMount(Spawn, 1369) +end + +function TempToRav(NPC, Spawn) + StartAutoMount(Spawn, 754) + SetMount(Spawn, 1369) +end + +function SancToGazer(NPC, Spawn) + StartAutoMount(Spawn, 752) + SetMount(Spawn, 1369) +end + +function GazerToFear(NPC, Spawn) + StartAutoMount(Spawn, 763) + SetMount(Spawn, 1369) +end + +function GazerToRav(NPC, Spawn) + StartAutoMount(Spawn, 757) + SetMount(Spawn, 1369) +end + +function GazerToSanc(NPC, Spawn) + StartAutoMount(Spawn, 756) + SetMount(Spawn, 1369) +end + +function FearToGazer(NPC, Spawn) + StartAutoMount(Spawn, 763) + SetMount(Spawn, 1369) +end + +function FearToVul(NPC, Spawn) + StartAutoMount(Spawn, 758) + SetMount(Spawn, 1369) +end + +function VicToRef(NPC, Spawn) + StartAutoMount(Spawn, 762) + SetMount(Spawn, 1369) +end \ No newline at end of file diff --git a/server/SpawnScripts/ThievesWay/ASewerSlime391945.lua b/server/SpawnScripts/ThievesWay/ASewerSlime391945.lua new file mode 100644 index 000000000..31115c715 --- /dev/null +++ b/server/SpawnScripts/ThievesWay/ASewerSlime391945.lua @@ -0,0 +1,42 @@ +--[[ + Script Name : SpawnScripts/ThievesWay/ASewerSlime391945.lua + Script Purpose : Waypoint Path for ASewerSlime391945.lua + Script Author : Rylec + Script Date : 10-05-2019 08:24:57 + Script Notes : Locations collected from Live +--]] + +function spawn(NPC) + waypoints(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) +end + +function respawn(NPC) +end + +function waypoints(NPC) + MovementLoopAddLocation(NPC, -183.22, 0.00, 184.69, 2, math.random(10, 22), "changegrid_Going_Down") + MovementLoopAddLocation(NPC, -183.04, 0.27, 186.09, 2, 0, "changegrid_Going_Up") + MovementLoopAddLocation(NPC, -183.06, 0.00, 195.50, 2, 0) + MovementLoopAddLocation(NPC, -183.09, 0.00, 195.48, 2, math.random(10, 22)) + MovementLoopAddLocation(NPC, -182.26, 0.00, 194.31, 2, 0) + MovementLoopAddLocation(NPC, -182.20, 0.00, 193.31, 2, math.random(10, 22)) + MovementLoopAddLocation(NPC, -183.00, 0.45, 187.76, 2, 0) + MovementLoopAddLocation(NPC, -183.74, 0.28, 186.34, 2, 0) +end + +-------------------------------------------------------------------------------------- +-- NPC Change Grid +-------------------------------------------------------------------------------------- + +function changegrid_Going_Up(NPC) + SetGridID(NPC, 1555937977) +end + +function changegrid_Going_Down(NPC) + SetGridID(NPC, 667331216) +end + diff --git a/server/SpawnScripts/ThievesWay/ASewerSlime391946.lua b/server/SpawnScripts/ThievesWay/ASewerSlime391946.lua new file mode 100644 index 000000000..b8b567490 --- /dev/null +++ b/server/SpawnScripts/ThievesWay/ASewerSlime391946.lua @@ -0,0 +1,47 @@ +--[[ + Script Name : SpawnScripts/ThievesWay/ASewerSlime391946.lua + Script Purpose : Waypoint Path for ASewerSlime391946.lua + Script Author : Rylec + Script Date : 10-05-2019 08:25:00 + Script Notes : Locations collected from Live +--]] + +function spawn(NPC) + waypoints(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) +end + +function respawn(NPC) +end + +function waypoints(NPC) + MovementLoopAddLocation(NPC, -183.15, 0.42, 187.84, 2, math.random(10, 22), "changegrid_Going_Up") + MovementLoopAddLocation(NPC, -183.04, 0.27, 188.89, 2, 0) + MovementLoopAddLocation(NPC, -183.21, 0.00, 191.38, 2, math.random(10, 22)) + MovementLoopAddLocation(NPC, -182.87, 0.11, 189.58, 2, 0) + MovementLoopAddLocation(NPC, -183.18, 0.00, 183.92, 2, 0, "changegrid_Going_Down") + MovementLoopAddLocation(NPC, -182.50, 0.82, 186.72, 2, 0, "changegrid_Going_Up") + MovementLoopAddLocation(NPC, -182.41, 0.01, 191.01, 2, 0) + MovementLoopAddLocation(NPC, -182.44, 0.00, 192.31, 2, 0) + MovementLoopAddLocation(NPC, -182.46, 0.00, 192.32, 2, math.random(10, 22)) + MovementLoopAddLocation(NPC, -182.01, 0.33, 188.15, 2, 0) + MovementLoopAddLocation(NPC, -181.97, 0.28, 186.38, 2, 0) + MovementLoopAddLocation(NPC, -182.00, 0.00, 184.16, 2, math.random(10, 22), "changegrid_Going_Down") +end + +-------------------------------------------------------------------------------------- +-- NPC Change Grid +-------------------------------------------------------------------------------------- + +function changegrid_Going_Up(NPC) + SetGridID(NPC, 1555937977) +end + +function changegrid_Going_Down(NPC) + SetGridID(NPC, 667331216) +end + + diff --git a/server/SpawnScripts/ThievesWay/ASewerSlime391948.lua b/server/SpawnScripts/ThievesWay/ASewerSlime391948.lua new file mode 100644 index 000000000..1d8b5cf62 --- /dev/null +++ b/server/SpawnScripts/ThievesWay/ASewerSlime391948.lua @@ -0,0 +1,39 @@ +--[[ + Script Name : SpawnScripts/ThievesWay/ASewerSlime391948.lua + Script Purpose : Waypoint Path for ASewerSlime391948.lua + Script Author : Rylec + Script Date : 10-17-2019 03:27:58 + Script Notes : Locations collected from Live +--]] + +function spawn(NPC) + waypoints(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) +end + +function respawn(NPC) +end + +function waypoints(NPC) + MovementLoopAddLocation(NPC, -179.14, 0.00, 142.08, 2, math.random(10, 22)) + MovementLoopAddLocation(NPC, -179.95, 0.00, 139.87, 2, 0) + MovementLoopAddLocation(NPC, -181.92, 0.00, 133.17, 2, math.random(10, 22)) + MovementLoopAddLocation(NPC, -183.74, 0.04, 134.14, 2, 0) + MovementLoopAddLocation(NPC, -183.82, 0.04, 135.26, 2, 0) + MovementLoopAddLocation(NPC, -181.18, 0.00, 138.79, 2, 0) + MovementLoopAddLocation(NPC, -181.20, 0.00, 138.79, 2, math.random(10, 22)) + MovementLoopAddLocation(NPC, -181.08, 0.00, 135.23, 2, math.random(10, 22)) + MovementLoopAddLocation(NPC, -180.17, 0.00, 135.85, 2, 0) + MovementLoopAddLocation(NPC, -176.19, 0.09, 140.06, 2, 0) + MovementLoopAddLocation(NPC, -176.13, 0.11, 140.81, 2, math.random(10, 22)) + MovementLoopAddLocation(NPC, -176.30, 0.10, 141.10, 2, 0) + MovementLoopAddLocation(NPC, -177.08, 0.00, 140.11, 2, 0) + MovementLoopAddLocation(NPC, -177.02, 0.01, 140.11, 2, math.random(10, 22)) + MovementLoopAddLocation(NPC, -178.93, 0.00, 136.40, 2, math.random(10, 22)) + MovementLoopAddLocation(NPC, -179.91, 0.00, 139.53, 2, 0) + MovementLoopAddLocation(NPC, -180.13, 0.00, 142.15, 2, math.random(10, 22)) + MovementLoopAddLocation(NPC, -180.05, 0.00, 141.43, 2, math.random(10, 22)) +end diff --git a/server/SpawnScripts/ThievesWay/ASewerSlime391949.lua b/server/SpawnScripts/ThievesWay/ASewerSlime391949.lua new file mode 100644 index 000000000..c0dd91655 --- /dev/null +++ b/server/SpawnScripts/ThievesWay/ASewerSlime391949.lua @@ -0,0 +1,51 @@ +--[[ + Script Name : SpawnScripts/ThievesWay/ASewerSlime391949.lua + Script Purpose : Waypoint Path for ASewerSlime391949.lua + Script Author : Rylec + Script Date : 10-17-2019 03:18:01 + Script Notes : Locations collected from Live +--]] + +function spawn(NPC) + waypoints(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) +end + +function respawn(NPC) +end + +function waypoints(NPC) + MovementLoopAddLocation(NPC, -181.60, 0.00, 163.67, 2, math.random(10, 22)) + MovementLoopAddLocation(NPC, -182.55, 0.00, 164.07, 2, 0) + MovementLoopAddLocation(NPC, -182.60, 0.00, 163.98, 2, math.random(10, 22)) + MovementLoopAddLocation(NPC, -181.62, 0.00, 156.68, 2, 0) + MovementLoopAddLocation(NPC, -181.24, 0.03, 159.03, 2, 0) + MovementLoopAddLocation(NPC, -182.11, 0.24, 170.70, 2, math.random(10, 22)) + MovementLoopAddLocation(NPC, -182.94, 0.00, 166.69, 2, 0) + MovementLoopAddLocation(NPC, -183.98, 0.06, 158.44, 2, math.random(10, 22)) + MovementLoopAddLocation(NPC, -182.87, 0.24, 160.56, 2, 0) + MovementLoopAddLocation(NPC, -182.50, 0.00, 162.41, 2, 0) + MovementLoopAddLocation(NPC, -181.75, 0.00, 163.34, 2, 0) + MovementLoopAddLocation(NPC, -181.78, 0.00, 163.35, 2, math.random(10, 22)) + MovementLoopAddLocation(NPC, -181.95, 0.00, 164.05, 2, 0) + MovementLoopAddLocation(NPC, -182.53, 0.00, 172.24, 2, math.random(10, 22), "changegrid_Going_Up") + MovementLoopAddLocation(NPC, -181.94, 0.00, 169.20, 2, 0, "changegrid_Going_Down") + MovementLoopAddLocation(NPC, -181.94, 0.00, 164.57, 2, 0) +end + +-------------------------------------------------------------------------------------- +-- NPC Change Grid +-------------------------------------------------------------------------------------- + +function changegrid_Going_Up(NPC) + SetGridID(NPC, 667331216) +end + +function changegrid_Going_Down(NPC) + SetGridID(NPC, 3049532766) +end + + diff --git a/server/SpawnScripts/ThievesWay/ASewerSlime391950.lua b/server/SpawnScripts/ThievesWay/ASewerSlime391950.lua new file mode 100644 index 000000000..92e1365de --- /dev/null +++ b/server/SpawnScripts/ThievesWay/ASewerSlime391950.lua @@ -0,0 +1,51 @@ +--[[ + Script Name : SpawnScripts/ThievesWay/ASewerSlime391950.lua + Script Purpose : Waypoint Path for ASewerSlime391950.lua + Script Author : Rylec + Script Date : 10-17-2019 04:45:53 + Script Notes : Locations collected from Live +--]] + +function spawn(NPC) + waypoints(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) +end + +function respawn(NPC) +end + +function waypoints(NPC) + MovementLoopAddLocation(NPC, -183.14, 0.05, 97.35, 2, math.random(10, 22)) + MovementLoopAddLocation(NPC, -183.10, 0.00, 103.82, 2, math.random(10, 22)) + MovementLoopAddLocation(NPC, -180.29, 0.05, 94.32, 2, 0) + MovementLoopAddLocation(NPC, -177.81, 0.05, 91.62, 2, 0) + MovementLoopAddLocation(NPC, -177.23, 0.05, 91.26, 2, math.random(10, 22)) + MovementLoopAddLocation(NPC, -178.19, 0.05, 92.37, 2, 0) + MovementLoopAddLocation(NPC, -179.99, 0.09, 95.33, 2, 0) + MovementLoopAddLocation(NPC, -180.82, 0.05, 96.33, 2, math.random(10, 22)) + MovementLoopAddLocation(NPC, -181.74, 0.05, 96.57, 2, 0) + MovementLoopAddLocation(NPC, -181.69, 0.05, 96.45, 2, math.random(10, 22)) + MovementLoopAddLocation(NPC, -181.15, 0.05, 94.76, 2, 0) + MovementLoopAddLocation(NPC, -178.66, 0.05, 92.38, 2, 0) + MovementLoopAddLocation(NPC, -173.75, 0.05, 90.88, 2, math.random(10, 22), "changegrid_Going_Down") + MovementLoopAddLocation(NPC, -177.50, 0.05, 91.75, 2, 0, "changegrid_Going_Up") + MovementLoopAddLocation(NPC, -180.66, 0.05, 93.58, 2, 0) + MovementLoopAddLocation(NPC, -181.62, 0.05, 94.81, 2, math.random(10, 22)) +end + +-------------------------------------------------------------------------------------- +-- NPC Change Grid +-------------------------------------------------------------------------------------- + +function changegrid_Going_Up(NPC) + SetGridID(NPC, 3049532766) +end + +function changegrid_Going_Down(NPC) + SetGridID(NPC, 3438300428) +end + + diff --git a/server/SpawnScripts/ThievesWay/ASewerSlime391951.lua b/server/SpawnScripts/ThievesWay/ASewerSlime391951.lua new file mode 100644 index 000000000..c1e0f4502 --- /dev/null +++ b/server/SpawnScripts/ThievesWay/ASewerSlime391951.lua @@ -0,0 +1,56 @@ +--[[ + Script Name : SpawnScripts/ThievesWay/ASewerSlime391951.lua + Script Purpose : Waypoint Path for ASewerSlime391951.lua + Script Author : Rylec + Script Date : 10-17-2019 04:45:57 + Script Notes : Locations collected from Live +--]] + +function spawn(NPC) + waypoints(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) +end + +function respawn(NPC) +end + +function waypoints(NPC) + MovementLoopAddLocation(NPC, -182.76, 0.00, 104.00, 2, math.random(10, 22)) + MovementLoopAddLocation(NPC, -180.99, 0.05, 94.55, 2, math.random(10, 22)) + MovementLoopAddLocation(NPC, -181.53, 0.35, 100.34, 2, 0) + MovementLoopAddLocation(NPC, -181.40, 0.29, 101.96, 2, math.random(10, 22)) + MovementLoopAddLocation(NPC, -179.95, 0.16, 96.65, 2, 0) + MovementLoopAddLocation(NPC, -176.44, 0.15, 92.60, 2, 0) + MovementLoopAddLocation(NPC, -173.77, 0.06, 91.11, 2, 0, "changegrid_Going_Down") + MovementLoopAddLocation(NPC, -178.12, 0.05, 91.15, 2, 0, "changegrid_Going_Up") + MovementLoopAddLocation(NPC, -180.87, 0.05, 93.99, 2, 0) + MovementLoopAddLocation(NPC, -181.64, 0.05, 95.81, 2, 0) + MovementLoopAddLocation(NPC, -178.60, 0.08, 93.68, 2, 0) + MovementLoopAddLocation(NPC, -175.40, 0.26, 91.92, 2, 0) + MovementLoopAddLocation(NPC, -172.65, 0.05, 91.00, 2, math.random(10, 22), "changegrid_Going_Down") + MovementLoopAddLocation(NPC, -174.06, 0.10, 91.52, 2, 0) + MovementLoopAddLocation(NPC, -176.72, 0.08, 92.10, 2, 0, "changegrid_Going_Up") + MovementLoopAddLocation(NPC, -180.56, 0.05, 94.09, 2, 0) + MovementLoopAddLocation(NPC, -180.55, 0.05, 94.11, 2, math.random(10, 22)) + MovementLoopAddLocation(NPC, -181.12, 0.05, 96.84, 2, 0) + MovementLoopAddLocation(NPC, -181.93, 0.27, 99.65, 2, 0) + MovementLoopAddLocation(NPC, -182.21, 0.28, 102.13, 2, 0) +end + +-------------------------------------------------------------------------------------- +-- NPC Change Grid +-------------------------------------------------------------------------------------- + +function changegrid_Going_Up(NPC) + SetGridID(NPC, 3049532766) +end + +function changegrid_Going_Down(NPC) + SetGridID(NPC, 3438300428) +end + + + diff --git a/server/SpawnScripts/ThievesWay/ASewerSlime391952.lua b/server/SpawnScripts/ThievesWay/ASewerSlime391952.lua new file mode 100644 index 000000000..163116751 --- /dev/null +++ b/server/SpawnScripts/ThievesWay/ASewerSlime391952.lua @@ -0,0 +1,52 @@ +--[[ + Script Name : SpawnScripts/ThievesWay/ASewerSlime391952.lua + Script Purpose : Waypoint Path for ASewerSlime391952.lua + Script Author : Rylec + Script Date : 10-17-2019 03:26:38 + Script Notes : Locations collected from Live +--]] + +function spawn(NPC) + waypoints(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) +end + +function respawn(NPC) +end + +function waypoints(NPC) + MovementLoopAddLocation(NPC, -182.44, 0.00, 172.82, 2, math.random(10, 22)) + MovementLoopAddLocation(NPC, -181.86, 0.00, 169.18, 2, 0, "changegrid_Going_Down") + MovementLoopAddLocation(NPC, -181.95, 0.00, 166.22, 2, 0) + MovementLoopAddLocation(NPC, -181.58, 0.00, 165.52, 2, math.random(10, 22)) + MovementLoopAddLocation(NPC, -181.93, 0.00, 165.97, 2, 0) + MovementLoopAddLocation(NPC, -182.65, 0.00, 168.90, 2, math.random(10, 22)) + MovementLoopAddLocation(NPC, -181.14, 0.00, 173.23, 2, math.random(10, 22), "changegrid_Going_Up") + MovementLoopAddLocation(NPC, -182.33, 0.00, 167.18, 2, 0, "changegrid_Going_Down") + MovementLoopAddLocation(NPC, -182.56, 0.00, 165.88, 2, 0) + MovementLoopAddLocation(NPC, -182.49, 0.00, 165.65, 2, math.random(10, 22)) + MovementLoopAddLocation(NPC, -182.20, 0.00, 162.99, 2, 0) + MovementLoopAddLocation(NPC, -181.88, 0.17, 161.46, 2, 0) + MovementLoopAddLocation(NPC, -181.65, 0.00, 155.96, 2, math.random(10, 22)) + MovementLoopAddLocation(NPC, -181.58, 0.24, 160.35, 2, 0) + MovementLoopAddLocation(NPC, -181.89, 0.00, 162.02, 2, 0) + MovementLoopAddLocation(NPC, -181.69, 0.00, 163.93, 2, math.random(10, 22)) + MovementLoopAddLocation(NPC, -182.05, 0.24, 170.63, 2, 0) + MovementLoopAddLocation(NPC, -182.44, 0.00, 172.86, 2, 0, "changegrid_Going_Up") +end + +-------------------------------------------------------------------------------------- +-- NPC Change Grid +-------------------------------------------------------------------------------------- + +function changegrid_Going_Up(NPC) + SetGridID(NPC, 667331216) +end + +function changegrid_Going_Down(NPC) + SetGridID(NPC, 3049532766) +end + diff --git a/server/SpawnScripts/ThievesWay/ASewerSlime391954.lua b/server/SpawnScripts/ThievesWay/ASewerSlime391954.lua new file mode 100644 index 000000000..eb14b92d4 --- /dev/null +++ b/server/SpawnScripts/ThievesWay/ASewerSlime391954.lua @@ -0,0 +1,52 @@ +--[[ + Script Name : SpawnScripts/ThievesWay/ASewerSlime391954.lua + Script Purpose : Waypoint Path for ASewerSlime391954.lua + Script Author : Rylec + Script Date : 09-28-2019 10:46:04 + Script Notes : Locations collected from Live +--]] + +function spawn(NPC) + waypoints(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) +end + +function respawn(NPC) +end + +function waypoints(NPC) + MovementLoopAddLocation(NPC, -181.82, 0.11, 215.17, 2, math.random(10, 22)) + MovementLoopAddLocation(NPC, -175.76, 0.01, 215.92, 2, 0) + MovementLoopAddLocation(NPC, -179.10, 0.00, 214.02, 2, 0) + MovementLoopAddLocation(NPC, -182.62, 0.07, 213.44, 2, math.random(10, 22)) + MovementLoopAddLocation(NPC, -182.39, 0.24, 209.30, 2, math.random(10, 22), "changegrid_Going_Down") + MovementLoopAddLocation(NPC, -179.94, 0.05, 212.13, 2, 0, "changegrid_Going_Up") + MovementLoopAddLocation(NPC, -178.67, 0.00, 214.39, 2, math.random(10, 22)) + MovementLoopAddLocation(NPC, -178.89, 0.11, 212.46, 2, 0) + MovementLoopAddLocation(NPC, -182.30, 0.00, 207.83, 2, 0, "changegrid_Going_Down") + MovementLoopAddLocation(NPC, -182.48, 0.24, 199.26, 2, 0) + MovementLoopAddLocation(NPC, -182.46, 0.24, 199.25, 2, math.random(10, 22)) + MovementLoopAddLocation(NPC, -181.89, 0.00, 201.53, 2, 0) + MovementLoopAddLocation(NPC, -182.05, 0.00, 206.98, 2, 0) + MovementLoopAddLocation(NPC, -181.31, 0.00, 210.86, 2, math.random(10, 22), "changegrid_Going_Up") + MovementLoopAddLocation(NPC, -180.77, 0.00, 214.39, 2, 0) + MovementLoopAddLocation(NPC, -181.01, 0.05, 215.98, 2, math.random(10, 22)) + MovementLoopAddLocation(NPC, -178.85, 0.01, 213.88, 2, math.random(10, 22)) + MovementLoopAddLocation(NPC, -178.68, 0.00, 214.45, 2, math.random(10, 22)) +end + +-------------------------------------------------------------------------------------- +-- NPC Change Grid +-------------------------------------------------------------------------------------- + +function changegrid_Going_Up(NPC) + SetGridID(NPC, 3053675711) +end + +function changegrid_Going_Down(NPC) + SetGridID(NPC, 1555937977) +end + diff --git a/server/SpawnScripts/ThievesWay/ASewerSlime391957.lua b/server/SpawnScripts/ThievesWay/ASewerSlime391957.lua new file mode 100644 index 000000000..5e098d764 --- /dev/null +++ b/server/SpawnScripts/ThievesWay/ASewerSlime391957.lua @@ -0,0 +1,51 @@ +--[[ + Script Name : SpawnScripts/ThievesWay/ASewerSlime391957.lua + Script Purpose : Waypoint Path for ASewerSlime391957.lua + Script Author : Rylec + Script Date : 09-28-2019 10:46:10 + Script Notes : Locations collected from Live +--]] + +function spawn(NPC) + waypoints(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) +end + +function respawn(NPC) +end + +function waypoints(NPC) + MovementLoopAddLocation(NPC, -181.39, 0.01, 205.25, 2, math.random(10, 22)) + MovementLoopAddLocation(NPC, -182.59, 0.00, 207.99, 2, 0) + MovementLoopAddLocation(NPC, -182.62, 0.00, 210.48, 2, math.random(10, 22), "changegrid_Going_Up") + MovementLoopAddLocation(NPC, -181.83, 0.03, 204.03, 2, math.random(10, 22), "changegrid_Going_Down") + MovementLoopAddLocation(NPC, -182.04, 0.00, 204.98, 2, 0) + MovementLoopAddLocation(NPC, -180.85, 0.31, 209.10, 2, math.random(10, 22)) + MovementLoopAddLocation(NPC, -184.26, 0.15, 210.75, 2, math.random(10, 22), "changegrid_Going_Up") + MovementLoopAddLocation(NPC, -180.59, 0.00, 212.51, 2, 0) + MovementLoopAddLocation(NPC, -179.82, 0.00, 214.09, 2, 0) + MovementLoopAddLocation(NPC, -178.55, 0.00, 214.84, 2, 0) + MovementLoopAddLocation(NPC, -178.52, 0.00, 214.72, 2, math.random(10, 22)) + MovementLoopAddLocation(NPC, -177.70, 0.00, 215.77, 2, math.random(10, 22)) + MovementLoopAddLocation(NPC, -177.88, 0.05, 214.28, 2, 0) + MovementLoopAddLocation(NPC, -179.95, 0.08, 211.75, 2, 0) + MovementLoopAddLocation(NPC, -181.02, 0.05, 207.68, 2, 0, "changegrid_Going_Down") + MovementLoopAddLocation(NPC, -182.21, 0.00, 205.33, 2, 0) + MovementLoopAddLocation(NPC, -182.51, 0.00, 203.93, 2, math.random(10, 22)) +end + +-------------------------------------------------------------------------------------- +-- NPC Change Grid +-------------------------------------------------------------------------------------- + +function changegrid_Going_Up(NPC) + SetGridID(NPC, 3053675711) +end + +function changegrid_Going_Down(NPC) + SetGridID(NPC, 1555937977) +end + diff --git a/server/SpawnScripts/ThievesWay/ASewerSlime391962.lua b/server/SpawnScripts/ThievesWay/ASewerSlime391962.lua new file mode 100644 index 000000000..a65ef48fa --- /dev/null +++ b/server/SpawnScripts/ThievesWay/ASewerSlime391962.lua @@ -0,0 +1,32 @@ +--[[ + Script Name : SpawnScripts/ThievesWay/ASewerSlime391962.lua + Script Purpose : Waypoint Path for ASewerSlime391962.lua + Script Author : Rylec + Script Date : 10-17-2019 03:29:11 + Script Notes : Locations collected from Live +--]] + +function spawn(NPC) + waypoints(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) +end + +function respawn(NPC) +end + +function waypoints(NPC) + MovementLoopAddLocation(NPC, -182.40, 0.00, 125.31, 2, math.random(10, 22)) + MovementLoopAddLocation(NPC, -181.93, 0.00, 123.17, 2, 0) + MovementLoopAddLocation(NPC, -180.47, 0.05, 120.43, 2, math.random(10, 22)) + MovementLoopAddLocation(NPC, -181.40, 0.25, 117.07, 2, math.random(10, 22)) + MovementLoopAddLocation(NPC, -182.28, 0.00, 121.11, 2, 0) + MovementLoopAddLocation(NPC, -183.46, 0.01, 126.02, 2, math.random(10, 22)) + MovementLoopAddLocation(NPC, -182.32, 0.00, 121.55, 2, 0) + MovementLoopAddLocation(NPC, -181.65, 0.00, 110.78, 2, 0) + MovementLoopAddLocation(NPC, -181.50, 0.00, 109.48, 2, math.random(10, 22)) + MovementLoopAddLocation(NPC, -181.38, 0.01, 113.58, 2, math.random(10, 22)) + MovementLoopAddLocation(NPC, -182.98, 0.00, 124.23, 2, 0) +end diff --git a/server/SpawnScripts/ThievesWay/ASewerSlime391963.lua b/server/SpawnScripts/ThievesWay/ASewerSlime391963.lua new file mode 100644 index 000000000..a06228bf7 --- /dev/null +++ b/server/SpawnScripts/ThievesWay/ASewerSlime391963.lua @@ -0,0 +1,42 @@ +--[[ + Script Name : SpawnScripts/ThievesWay/ASewerSlime391963.lua + Script Purpose : Waypoint Path for ASewerSlime391963.lua + Script Author : Rylec + Script Date : 10-17-2019 03:29:14 + Script Notes : Locations collected from Live +--]] + +function spawn(NPC) + waypoints(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) +end + +function respawn(NPC) +end + +function waypoints(NPC) + MovementLoopAddLocation(NPC, -181.34, 0.02, 114.04, 2, math.random(10, 22)) + MovementLoopAddLocation(NPC, -181.76, 0.00, 119.25, 2, 0) + MovementLoopAddLocation(NPC, -181.68, 0.00, 121.75, 2, 0) + MovementLoopAddLocation(NPC, -182.23, 0.00, 123.68, 2, 0) + MovementLoopAddLocation(NPC, -182.23, 0.00, 123.67, 2, math.random(10, 22)) + MovementLoopAddLocation(NPC, -182.03, 0.00, 122.09, 2, 0) + MovementLoopAddLocation(NPC, -181.38, 0.01, 110.18, 2, 0) + MovementLoopAddLocation(NPC, -181.19, 0.03, 109.21, 2, math.random(10, 22)) + MovementLoopAddLocation(NPC, -182.25, 0.00, 121.02, 2, 0) + MovementLoopAddLocation(NPC, -182.11, 0.00, 121.35, 2, math.random(10, 22)) + MovementLoopAddLocation(NPC, -182.25, 0.00, 122.14, 2, 0) + MovementLoopAddLocation(NPC, -182.12, 0.00, 123.54, 2, math.random(10, 22)) + MovementLoopAddLocation(NPC, -182.26, 0.00, 125.75, 2, 0) + MovementLoopAddLocation(NPC, -182.30, 0.00, 126.30, 2, math.random(10, 22)) + MovementLoopAddLocation(NPC, -181.95, 0.00, 125.92, 2, 0) + MovementLoopAddLocation(NPC, -181.89, 0.00, 121.36, 2, 0) + MovementLoopAddLocation(NPC, -181.22, 0.27, 117.05, 2, 0) + MovementLoopAddLocation(NPC, -181.45, 0.01, 115.39, 2, math.random(10, 22)) + MovementLoopAddLocation(NPC, -181.30, 0.02, 115.08, 2, 0) + MovementLoopAddLocation(NPC, -183.40, 0.00, 109.33, 2, math.random(10, 22)) +end + diff --git a/server/SpawnScripts/ThievesWay/ASewerSlime391990.lua b/server/SpawnScripts/ThievesWay/ASewerSlime391990.lua new file mode 100644 index 000000000..bb97dac59 --- /dev/null +++ b/server/SpawnScripts/ThievesWay/ASewerSlime391990.lua @@ -0,0 +1,46 @@ +--[[ + Script Name : SpawnScripts/ThievesWay/ASewerSlime391990.lua + Script Purpose : Waypoint Path for ASewerSlime391990.lua + Script Author : Rylec + Script Date : 09-15-2019 04:26:38 + Script Notes : Locations collected from Live +--]] + +function spawn(NPC) + waypoints(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) +end + +function respawn(NPC) +end + +function waypoints(NPC) + MovementLoopAddLocation(NPC, -178.41, 1.22, 25.00, 2, math.random(10, 22)) + MovementLoopAddLocation(NPC, -180.94, 1.22, 30.20, 2, math.random(10, 22)) + MovementLoopAddLocation(NPC, -180.92, 1.22, 31.53, 2, 0) + MovementLoopAddLocation(NPC, -180.45, 1.22, 32.92, 2, 0) + MovementLoopAddLocation(NPC, -182.07, 1.34, 31.53, 2, math.random(10, 22)) + MovementLoopAddLocation(NPC, -181.05, 1.23, 30.94, 2, math.random(10, 22)) + -- MovementLoopAddLocation(NPC, -178.81, 1.22, 25.54, 2, 0) + MovementLoopAddLocation(NPC, -178.40, 1.22, 23.99, 2, math.random(10, 22)) + -- MovementLoopAddLocation(NPC, -179.26, 1.22, 27.82, 2, 0) + MovementLoopAddLocation(NPC, -179.90, 1.22, 31.48, 2, 0) + -- MovementLoopAddLocation(NPC, -180.09, 1.22, 33.76, 2, 0) + MovementLoopAddLocation(NPC, -181.36, 1.26, 35.51, 2, 0) + MovementLoopAddLocation(NPC, -180.92, 1.22, 33.62, 2, math.random(10, 22)) + MovementLoopAddLocation(NPC, -180.47, 1.22, 22.80, 2, math.random(10, 22)) + -- MovementLoopAddLocation(NPC, -180.12, 1.22, 25.13, 2, math.random(10, 22)) + MovementLoopAddLocation(NPC, -179.75, 1.22, 27.69, 2, 0) + MovementLoopAddLocation(NPC, -179.47, 1.22, 28.42, 2, 0) + MovementLoopAddLocation(NPC, -180.54, 1.22, 34.81, 2, math.random(10, 22)) + MovementLoopAddLocation(NPC, -180.10, 1.22, 33.31, 2, math.random(10, 22)) + MovementLoopAddLocation(NPC, -180.38, 1.22, 31.91, 2, 0) + MovementLoopAddLocation(NPC, -180.50, 1.22, 29.73, 2, math.random(10, 22)) + MovementLoopAddLocation(NPC, -180.02, 1.22, 28.25, 2, 0) + MovementLoopAddLocation(NPC, -177.66, 1.22, 26.69, 2, math.random(10, 22)) + MovementLoopAddLocation(NPC, -178.37, 1.22, 35.73, 2, math.random(10, 22)) +end + diff --git a/server/SpawnScripts/ThievesWay/ASewerSlime391991.lua b/server/SpawnScripts/ThievesWay/ASewerSlime391991.lua new file mode 100644 index 000000000..90ea39a47 --- /dev/null +++ b/server/SpawnScripts/ThievesWay/ASewerSlime391991.lua @@ -0,0 +1,72 @@ +--[[ + Script Name : SpawnScripts/ThievesWay/ASewerSlime391991.lua + Script Purpose : Waypoint Path for ASewerSlime391991.lua + Script Author : Rylec + Script Date : 09-17-2019 05:52:01 + Script Notes : Locations collected from Live +--]] + +function spawn(NPC) + waypoints(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) +end + +function respawn(NPC) +end + +function waypoints(NPC) + MovementLoopAddLocation(NPC, -173.79, 1.26, 0.79, 2, math.random(10, 22)) + MovementLoopAddLocation(NPC, -176.14, 1.32, 3.99, 2, 0) + MovementLoopAddLocation(NPC, -176.90, 1.44, 6.01, 2, 0) + MovementLoopAddLocation(NPC, -177.31, 2.09, 7.67, 2, 0, "changegrid_Going_Down") + MovementLoopAddLocation(NPC, -179.88, 1.64, 11.92, 2, 0) + MovementLoopAddLocation(NPC, -180.07, 1.60, 6.70, 2, math.random(10, 22), "changegrid_Going_Up") + MovementLoopAddLocation(NPC, -179.17, 1.84, 7.73, 2, math.random(10, 22), "changegrid_Going_Down") + MovementLoopAddLocation(NPC, -179.81, 1.82, 10.96, 2, 0) + MovementLoopAddLocation(NPC, -180.57, 1.22, 14.57, 2, math.random(10, 22)) + MovementLoopAddLocation(NPC, -177.06, 1.41, 5.97, 2, 0, "changegrid_Going_Up") + MovementLoopAddLocation(NPC, -174.17, 1.41, 2.93, 2, 0) + MovementLoopAddLocation(NPC, -171.86, 1.85, 2.62, 2, 0) + MovementLoopAddLocation(NPC, -169.24, 1.34, 0.99, 2, math.random(10, 22)) + MovementLoopAddLocation(NPC, -169.72, 1.34, 1.77, 2, 0) + MovementLoopAddLocation(NPC, -171.40, 1.75, 2.18, 2, 0) + MovementLoopAddLocation(NPC, -172.52, 2.03, 3.15, 2, 0) + MovementLoopAddLocation(NPC, -175.38, 1.37, 3.85, 2, 0) + MovementLoopAddLocation(NPC, -176.69, 1.50, 6.25, 2, 0) + MovementLoopAddLocation(NPC, -178.91, 1.81, 10.78, 2, 0, "changegrid_Going_Down") + MovementLoopAddLocation(NPC, -179.28, 1.22, 15.14, 2, 0) + MovementLoopAddLocation(NPC, -179.91, 1.22, 17.49, 2, math.random(10, 22)) + MovementLoopAddLocation(NPC, -179.15, 1.22, 15.83, 2, 0) + MovementLoopAddLocation(NPC, -178.83, 1.62, 9.94, 2, 0) + MovementLoopAddLocation(NPC, -177.76, 2.01, 7.98, 2, 0) + MovementLoopAddLocation(NPC, -176.01, 1.48, 5.29, 2, 0, "changegrid_Going_Up") + MovementLoopAddLocation(NPC, -174.41, 1.46, 3.56, 2, 0) + MovementLoopAddLocation(NPC, -169.94, 1.34, 1.54, 2, 0) + MovementLoopAddLocation(NPC, -168.87, 1.34, -0.38, 2, math.random(10, 22)) + MovementLoopAddLocation(NPC, -169.97, 1.34, -0.10, 2, 0) + MovementLoopAddLocation(NPC, -170.85, 1.54, -0.28, 2, 0) + MovementLoopAddLocation(NPC, -172.14, 1.58, 0.86, 2, 0) + MovementLoopAddLocation(NPC, -173.90, 1.26, 0.54, 2, 0) + MovementLoopAddLocation(NPC, -176.10, 1.26, 2.11, 2, 0) + MovementLoopAddLocation(NPC, -177.97, 1.30, 6.06, 2, 0) + MovementLoopAddLocation(NPC, -178.41, 1.89, 7.17, 2, 0) + MovementLoopAddLocation(NPC, -178.20, 1.26, 4.95, 2, 0) + MovementLoopAddLocation(NPC, -176.97, 1.26, 3.46, 2, 0) + MovementLoopAddLocation(NPC, -175.93, 1.26, 1.59, 2, 0) + MovementLoopAddLocation(NPC, -175.06, 1.26, 0.83, 2, math.random(10, 22)) +end + +-------------------------------------------------------------------------------------- +-- NPC Change Grid +-------------------------------------------------------------------------------------- + +function changegrid_Going_Up(NPC) + SetGridID(NPC, 4000206445) +end + +function changegrid_Going_Down(NPC) + SetGridID(NPC, 2981397110) +end \ No newline at end of file diff --git a/server/SpawnScripts/ThievesWay/ASewerSlime391997.lua b/server/SpawnScripts/ThievesWay/ASewerSlime391997.lua new file mode 100644 index 000000000..0a9f91c30 --- /dev/null +++ b/server/SpawnScripts/ThievesWay/ASewerSlime391997.lua @@ -0,0 +1,67 @@ +--[[ + Script Name : SpawnScripts/ThievesWay/asewerslime391997.lua + Script Purpose : Waypoint Path for asewerslime391997.lua + Script Author : Rylec + Script Date : 09-17-2019 08:39:48 + Script Notes : Locations collected from Live +--]] + +function spawn(NPC) + waypoints(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) +end + +function respawn(NPC) +end + +function waypoints(NPC) + MovementLoopAddLocation(NPC, -179.21, 1.57, 52.09, 2, math.random(10, 22)) + MovementLoopAddLocation(NPC, -179.07, 1.22, 54.80, 2, 0) + MovementLoopAddLocation(NPC, -176.82, 1.22, 59.04, 2, 0) + MovementLoopAddLocation(NPC, -172.07, 1.81, 62.33, 2, math.random(10, 22), "changegrid_Going_Up") + MovementLoopAddLocation(NPC, -174.57, 1.24, 61.71, 2, 0, "changegrid_Going_Down") + MovementLoopAddLocation(NPC, -175.73, 1.22, 59.88, 2, 0) + MovementLoopAddLocation(NPC, -177.24, 1.31, 55.92, 2, 0) + MovementLoopAddLocation(NPC, -176.85, 1.56, 54.34, 2, 0) + MovementLoopAddLocation(NPC, -177.28, 1.88, 52.93, 2, 0) + MovementLoopAddLocation(NPC, -177.81, 1.56, 51.69, 2, 0) + MovementLoopAddLocation(NPC, -179.27, 1.34, 49.19, 2, 0) + MovementLoopAddLocation(NPC, -179.00, 1.60, 52.82, 2, 0) + MovementLoopAddLocation(NPC, -178.17, 1.22, 56.17, 2, 0) + MovementLoopAddLocation(NPC, -177.59, 1.22, 56.84, 2, 0) + MovementLoopAddLocation(NPC, -177.66, 1.22, 56.93, 2, math.random(10, 22)) + MovementLoopAddLocation(NPC, -180.12, 1.36, 53.80, 2, 0) + MovementLoopAddLocation(NPC, -179.96, 1.58, 52.83, 2, math.random(10, 22)) + MovementLoopAddLocation(NPC, -179.53, 1.22, 55.16, 2, 0) + MovementLoopAddLocation(NPC, -176.51, 1.25, 57.57, 2, 0) + MovementLoopAddLocation(NPC, -174.15, 1.32, 58.72, 2, 0) + MovementLoopAddLocation(NPC, -169.84, 1.22, 61.18, 2, 0, "changegrid_Going_Up") + MovementLoopAddLocation(NPC, -174.68, 1.22, 59.62, 2, 0, "changegrid_Going_Down") + MovementLoopAddLocation(NPC, -175.84, 1.22, 58.70, 2, 0) + MovementLoopAddLocation(NPC, -177.45, 1.23, 56.83, 2, math.random(10, 22)) + MovementLoopAddLocation(NPC, -175.66, 1.27, 58.09, 2, 0) + MovementLoopAddLocation(NPC, -173.78, 1.35, 58.89, 2, 0) + MovementLoopAddLocation(NPC, -172.61, 1.90, 59.16, 2, 0, "changegrid_Going_Up") + MovementLoopAddLocation(NPC, -170.97, 1.53, 60.38, 2, math.random(10, 22)) + MovementLoopAddLocation(NPC, -172.26, 1.79, 60.17, 2, 0) + MovementLoopAddLocation(NPC, -174.34, 1.22, 59.81, 2, 0, "changegrid_Going_Down") + MovementLoopAddLocation(NPC, -178.17, 1.22, 58.18, 2, math.random(10, 22)) + MovementLoopAddLocation(NPC, -178.83, 1.22, 55.09, 2, 0) + MovementLoopAddLocation(NPC, -179.17, 1.58, 52.87, 2, 0) + MovementLoopAddLocation(NPC, -179.70, 1.34, 50.02, 2, 0) +end + +-------------------------------------------------------------------------------------- +-- NPC Change Grid +-------------------------------------------------------------------------------------- + +function changegrid_Going_Up(NPC) + SetGridID(NPC, 3098524280) +end + +function changegrid_Going_Down(NPC) + SetGridID(NPC, 2981397110) +end diff --git a/server/SpawnScripts/ThievesWay/ASewerSlime391999.lua b/server/SpawnScripts/ThievesWay/ASewerSlime391999.lua new file mode 100644 index 000000000..7789ac300 --- /dev/null +++ b/server/SpawnScripts/ThievesWay/ASewerSlime391999.lua @@ -0,0 +1,46 @@ +--[[ + Script Name : SpawnScripts/ThievesWay/ASewerSlime391999.lua + Script Purpose : Waypoint Path for ASewerSlime391999.lua + Script Author : Rylec + Script Date : 10-17-2019 03:28:00 + Script Notes : Locations collected from Live +--]] + +function spawn(NPC) + waypoints(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) +end + +function respawn(NPC) +end + +function waypoints(NPC) + MovementLoopAddLocation(NPC, -182.99, 0.00, 134.89, 2, math.random(10, 22)) + MovementLoopAddLocation(NPC, -180.46, 0.00, 135.79, 2, 0) + MovementLoopAddLocation(NPC, -178.34, 0.00, 136.96, 2, 0) + MovementLoopAddLocation(NPC, -178.37, 0.00, 136.98, 2, math.random(10, 22)) + MovementLoopAddLocation(NPC, -180.30, 0.00, 135.97, 2, 0) + MovementLoopAddLocation(NPC, -182.81, 0.00, 134.31, 2, math.random(10, 22)) + MovementLoopAddLocation(NPC, -183.33, 0.00, 135.70, 2, 0) + MovementLoopAddLocation(NPC, -180.15, 0.00, 139.50, 2, 0) + MovementLoopAddLocation(NPC, -177.30, 0.02, 141.51, 2, 0) + MovementLoopAddLocation(NPC, -176.47, 0.06, 139.96, 2, 0) + MovementLoopAddLocation(NPC, -178.26, 0.00, 135.41, 2, math.random(10, 22)) + MovementLoopAddLocation(NPC, -179.93, 0.00, 137.42, 2, 0) + MovementLoopAddLocation(NPC, -180.94, 0.00, 140.93, 2, math.random(10, 22)) + MovementLoopAddLocation(NPC, -180.39, 0.00, 140.42, 2, 0) + MovementLoopAddLocation(NPC, -177.01, 0.01, 139.23, 2, 0) + MovementLoopAddLocation(NPC, -177.01, 0.01, 139.21, 2, math.random(10, 22)) + MovementLoopAddLocation(NPC, -181.32, 0.00, 139.17, 2, 0) + MovementLoopAddLocation(NPC, -181.81, 0.00, 138.97, 2, math.random(10, 22)) + MovementLoopAddLocation(NPC, -183.37, 0.00, 135.78, 2, 0) + MovementLoopAddLocation(NPC, -184.05, 0.07, 134.71, 2, 0) + MovementLoopAddLocation(NPC, -184.05, 0.07, 134.34, 2, math.random(10, 22)) + MovementLoopAddLocation(NPC, -178.87, 0.00, 136.15, 2, 0) + MovementLoopAddLocation(NPC, -178.88, 0.00, 136.14, 2, math.random(10, 22)) + MovementLoopAddLocation(NPC, -180.36, 0.00, 135.88, 2, 0) +end + diff --git a/server/SpawnScripts/ThievesWay/ASewerSlime392004.lua b/server/SpawnScripts/ThievesWay/ASewerSlime392004.lua new file mode 100644 index 000000000..d101402fd --- /dev/null +++ b/server/SpawnScripts/ThievesWay/ASewerSlime392004.lua @@ -0,0 +1,71 @@ +--[[ + Script Name : SpawnScripts/ThievesWay/ASewerSlime392004.lua + Script Purpose : Waypoint Path for ASewerSlime392004.lua + Script Author : Rylec + Script Date : 09-17-2019 05:52:08 + Script Notes : Locations collected from Live +--]] + +function spawn(NPC) + waypoints(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) +end + +function respawn(NPC) +end + +function waypoints(NPC) + MovementLoopAddLocation(NPC, -180.16, 1.84, 7.67, 2, math.random(12, 22), "changegrid_Going_Up") + MovementLoopAddLocation(NPC, -177.63, 1.34, 6.24, 2, 0) + MovementLoopAddLocation(NPC, -176.47, 1.37, 4.92, 2, 0) + MovementLoopAddLocation(NPC, -173.40, 1.28, 1.53, 2, 0) + MovementLoopAddLocation(NPC, -172.39, 1.58, 0.54, 2, 0) + MovementLoopAddLocation(NPC, -176.92, 1.26, 3.38, 2, math.random(12, 22)) + MovementLoopAddLocation(NPC, -177.97, 1.27, 5.51, 2, 0, "changegrid_Going_Down") + MovementLoopAddLocation(NPC, -178.14, 1.94, 7.42, 2, 0) + MovementLoopAddLocation(NPC, -179.00, 1.63, 10.00, 2, 0) + MovementLoopAddLocation(NPC, -179.15, 1.26, 14.56, 2, 0) + MovementLoopAddLocation(NPC, -180.04, 1.22, 17.34, 2, math.random(12, 22)) + MovementLoopAddLocation(NPC, -179.19, 1.22, 16.22, 2, 0) + MovementLoopAddLocation(NPC, -178.89, 1.64, 10.20, 2, 0) + MovementLoopAddLocation(NPC, -177.92, 1.98, 7.90, 2, 0, "changegrid_Going_Up") + MovementLoopAddLocation(NPC, -177.28, 2.01, 6.98, 2, 0) + MovementLoopAddLocation(NPC, -176.73, 1.39, 5.33, 2, 0) + MovementLoopAddLocation(NPC, -175.26, 1.49, 4.65, 2, 0) + MovementLoopAddLocation(NPC, -173.89, 1.51, 3.37, 2, 0) + MovementLoopAddLocation(NPC, -172.47, 1.90, 2.76, 2, 0) + MovementLoopAddLocation(NPC, -170.06, 1.34, 1.52, 2, 0) + MovementLoopAddLocation(NPC, -169.01, 1.34, 0.02, 2, math.random(12, 22)) + MovementLoopAddLocation(NPC, -169.38, 1.34, 0.75, 2, 0) + MovementLoopAddLocation(NPC, -170.79, 1.56, 1.15, 2, 0) + MovementLoopAddLocation(NPC, -172.61, 1.85, 2.64, 2, 0) + MovementLoopAddLocation(NPC, -177.78, 1.26, 3.74, 2, 0) + MovementLoopAddLocation(NPC, -179.04, 1.26, 4.44, 2, math.random(12, 22), "changegrid_Going_Down") + MovementLoopAddLocation(NPC, -178.93, 1.82, 11.01, 2, 0) + MovementLoopAddLocation(NPC, -178.45, 1.67, 12.74, 2, 0) + MovementLoopAddLocation(NPC, -178.19, 2.32, 14.51, 2, 0) + MovementLoopAddLocation(NPC, -179.03, 1.25, 15.42, 2, math.random(12, 22)) + MovementLoopAddLocation(NPC, -178.10, 2.98, 15.94, 2, 0) + MovementLoopAddLocation(NPC, -179.28, 1.62, 12.27, 2, 0) + MovementLoopAddLocation(NPC, -179.42, 1.61, 9.67, 2, 0, "changegrid_Going_Up") + MovementLoopAddLocation(NPC, -178.58, 1.82, 7.00, 2, 0) + MovementLoopAddLocation(NPC, -177.85, 1.26, 4.51, 2, 0) + MovementLoopAddLocation(NPC, -176.13, 1.26, 2.75, 2, math.random(12, 22)) + MovementLoopAddLocation(NPC, -178.73, 1.26, 4.91, 2, 0) + MovementLoopAddLocation(NPC, -179.16, 1.79, 7.05, 2, 0, "changegrid_Going_Down") +end + +-------------------------------------------------------------------------------------- +-- NPC Change Grid +-------------------------------------------------------------------------------------- + +function changegrid_Going_Up(NPC) + SetGridID(NPC, 4000206445) +end + +function changegrid_Going_Down(NPC) + SetGridID(NPC, 2981397110) +end \ No newline at end of file diff --git a/server/SpawnScripts/ThievesWay/ASewerSlime392007.lua b/server/SpawnScripts/ThievesWay/ASewerSlime392007.lua new file mode 100644 index 000000000..1506c97a5 --- /dev/null +++ b/server/SpawnScripts/ThievesWay/ASewerSlime392007.lua @@ -0,0 +1,40 @@ +--[[ + Script Name : SpawnScripts/ThievesWay/ASewerSlime392007.lua + Script Purpose : Waypoint Path for ASewerSlime392007.lua + Script Author : Rylec + Script Date : 09-20-2019 02:43:51 + Script Notes : Locations collected from Live +--]] + +function spawn(NPC) + waypoints(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) +end + +function respawn(NPC) +end + +function waypoints(NPC) + MovementLoopAddLocation(NPC, -179.09, 1.22, 26.67, 2, math.random(10, 22)) + MovementLoopAddLocation(NPC, -180.06, 1.22, 23.83, 2, 0) + MovementLoopAddLocation(NPC, -180.47, 1.22, 23.03, 2, 0) + MovementLoopAddLocation(NPC, -180.46, 1.22, 23.00, 2, math.random(10, 22)) + MovementLoopAddLocation(NPC, -180.09, 1.22, 26.95, 2, 0) + MovementLoopAddLocation(NPC, -179.47, 1.22, 34.15, 2, math.random(10, 22)) + MovementLoopAddLocation(NPC, -180.04, 1.22, 31.80, 2, 0) + MovementLoopAddLocation(NPC, -180.25, 1.22, 30.61, 2, 0) + MovementLoopAddLocation(NPC, -181.30, 1.25, 29.79, 2, 0) + MovementLoopAddLocation(NPC, -181.27, 1.25, 29.76, 2, math.random(10, 22)) + MovementLoopAddLocation(NPC, -180.73, 1.22, 30.42, 2, 0) + MovementLoopAddLocation(NPC, -176.73, 1.22, 28.69, 2, 0) + MovementLoopAddLocation(NPC, -176.74, 1.22, 28.68, 2, math.random(10, 22)) + MovementLoopAddLocation(NPC, -177.52, 1.22, 28.32, 2, math.random(10, 22)) + MovementLoopAddLocation(NPC, -177.59, 1.22, 24.85, 2, 0) + MovementLoopAddLocation(NPC, -177.50, 1.22, 24.80, 2, math.random(10, 22)) + MovementLoopAddLocation(NPC, -180.37, 1.22, 34.29, 2, math.random(10, 22)) + MovementLoopAddLocation(NPC, -179.98, 1.22, 31.89, 2, 0) +end + diff --git a/server/SpawnScripts/ThievesWay/ASewerSlime392013.lua b/server/SpawnScripts/ThievesWay/ASewerSlime392013.lua new file mode 100644 index 000000000..89ac125e3 --- /dev/null +++ b/server/SpawnScripts/ThievesWay/ASewerSlime392013.lua @@ -0,0 +1,50 @@ +--[[ + Script Name : SpawnScripts/ThievesWay/asewerslime392013.lua + Script Purpose : Waypoint Path for asewerslime392013.lua + Script Author : Rylec + Script Date : 09-17-2019 08:39:48 + Script Notes : Locations collected from Live +--]] + +function spawn(NPC) + waypoints(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) +end + +function respawn(NPC) +end + +function waypoints(NPC) + MovementLoopAddLocation(NPC, -179.69, 1.22, 54.10, 2, math.random(10, 22)) + MovementLoopAddLocation(NPC, -177.19, 1.22, 58.31, 2, math.random(10, 22)) + MovementLoopAddLocation(NPC, -175.76, 1.22, 60.30, 2, 0) + MovementLoopAddLocation(NPC, -175.37, 1.22, 60.82, 2, math.random(10, 22)) + MovementLoopAddLocation(NPC, -176.15, 1.22, 59.97, 2, 0) + MovementLoopAddLocation(NPC, -180.21, 1.29, 57.73, 2, 0) + MovementLoopAddLocation(NPC, -175.96, 1.22, 60.12, 2, 0) + MovementLoopAddLocation(NPC, -175.21, 1.22, 60.67, 2, 0) + MovementLoopAddLocation(NPC, -175.29, 1.22, 60.65, 2, math.random(10, 22)) + MovementLoopAddLocation(NPC, -175.14, 1.22, 59.59, 2, math.random(10, 22)) + MovementLoopAddLocation(NPC, -175.28, 1.22, 60.46, 2, 0) + MovementLoopAddLocation(NPC, -175.40, 1.23, 61.25, 2, math.random(10, 22)) + MovementLoopAddLocation(NPC, -179.30, 1.22, 54.59, 2, 0) + MovementLoopAddLocation(NPC, -179.17, 1.22, 54.78, 2, math.random(10, 22)) + MovementLoopAddLocation(NPC, -177.12, 1.22, 58.28, 2, math.random(10, 22)) + MovementLoopAddLocation(NPC, -175.27, 1.22, 60.87, 2, math.random(10, 22)) + MovementLoopAddLocation(NPC, -176.26, 1.22, 59.89, 2, 0) +end + +-------------------------------------------------------------------------------------- +-- NPC Change Grid +-------------------------------------------------------------------------------------- + +function changegrid_Going_Up(NPC) + SetGridID(NPC, 3098524280) +end + +function changegrid_Going_Down(NPC) + SetGridID(NPC, 2981397110) +end diff --git a/server/SpawnScripts/ThievesWay/ASewerSlime392016.lua b/server/SpawnScripts/ThievesWay/ASewerSlime392016.lua new file mode 100644 index 000000000..037b0c94e --- /dev/null +++ b/server/SpawnScripts/ThievesWay/ASewerSlime392016.lua @@ -0,0 +1,46 @@ +--[[ + Script Name : SpawnScripts/ThievesWay/ASewerSlime392016.lua + Script Purpose : Waypoint Path for ratongaF19003.lua + Script Author : Rylec + Script Date : 09-28-2019 10:45:51 + Script Notes : +--]] + +function spawn(NPC) + waypoints(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) +end + +function respawn(NPC) +end + +function waypoints(NPC) + MovementLoopAddLocation(NPC, -182.58, 0.04, 212.90, 2, math.random(10, 22)) + MovementLoopAddLocation(NPC, -182.49, 0.00, 212.00, 2, 0) + MovementLoopAddLocation(NPC, -182.40, 0.00, 212.08, 2, math.random(10, 22)) + MovementLoopAddLocation(NPC, -178.75, 0.00, 214.75, 2, math.random(10, 22)) + MovementLoopAddLocation(NPC, -181.92, 0.00, 207.88, 2, math.random(10, 22), "changegrid_Going_Down") + MovementLoopAddLocation(NPC, -182.53, 0.24, 199.33, 2, math.random(10, 22)) + MovementLoopAddLocation(NPC, -182.47, 0.00, 201.23, 2, 0) + MovementLoopAddLocation(NPC, -182.38, 0.00, 201.26, 2, math.random(10, 22)) + MovementLoopAddLocation(NPC, -180.52, 0.00, 213.99, 2, 0, "changegrid_Going_Up") + MovementLoopAddLocation(NPC, -180.72, 0.03, 215.77, 2, 0) + MovementLoopAddLocation(NPC, -180.81, 0.03, 215.79, 2, math.random(10, 22)) + MovementLoopAddLocation(NPC, -173.96, 0.00, 217.84, 2, math.random(10, 22)) + MovementLoopAddLocation(NPC, -180.90, 0.00, 214.18, 2, 0) +end + +-------------------------------------------------------------------------------------- +-- NPC Change Grid +-------------------------------------------------------------------------------------- + +function changegrid_Going_Up(NPC) + SetGridID(NPC, 3053675711) +end + +function changegrid_Going_Down(NPC) + SetGridID(NPC, 1555937977) +end \ No newline at end of file diff --git a/server/SpawnScripts/ThievesWay/ASewerSlime392019.lua b/server/SpawnScripts/ThievesWay/ASewerSlime392019.lua new file mode 100644 index 000000000..74d72c661 --- /dev/null +++ b/server/SpawnScripts/ThievesWay/ASewerSlime392019.lua @@ -0,0 +1,33 @@ +--[[ + Script Name : SpawnScripts/ThievesWay/ASewerSlime392019.lua + Script Purpose : Waypoint Path for ASewerSlime392019.lua + Script Author : Rylec + Script Date : 09-18-2019 09:10:33 + Script Notes : Locations collected from Live +--]] + +function spawn(NPC) + waypoints(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) +end + +function respawn(NPC) +end + +function waypoints(NPC) + MovementLoopAddLocation(NPC, -151.21, 1.34, 60.87, 2, math.random(10, 22)) + MovementLoopAddLocation(NPC, -156.08, 1.34, 61.50, 2, 0) + MovementLoopAddLocation(NPC, -158.26, 1.57, 61.92, 2, 0) + MovementLoopAddLocation(NPC, -162.73, 1.22, 61.92, 2, 0) + MovementLoopAddLocation(NPC, -162.63, 1.22, 61.91, 2, math.random(10, 22)) + MovementLoopAddLocation(NPC, -158.93, 1.58, 62.25, 2, math.random(10, 22)) + MovementLoopAddLocation(NPC, -153.57, 1.34, 61.94, 2, 0) + MovementLoopAddLocation(NPC, -151.51, 1.34, 61.99, 2, math.random(10, 22)) + MovementLoopAddLocation(NPC, -155.26, 1.34, 61.98, 2, 0) + MovementLoopAddLocation(NPC, -155.03, 1.34, 61.99, 2, math.random(10, 22)) + MovementLoopAddLocation(NPC, -153.29, 1.34, 61.37, 2, 0) + MovementLoopAddLocation(NPC, -151.89, 1.34, 61.27, 2, 0) +end diff --git a/server/SpawnScripts/ThievesWay/ASewerSlime392020.lua b/server/SpawnScripts/ThievesWay/ASewerSlime392020.lua new file mode 100644 index 000000000..68ae829ec --- /dev/null +++ b/server/SpawnScripts/ThievesWay/ASewerSlime392020.lua @@ -0,0 +1,52 @@ +--[[ + Script Name : SpawnScripts/ThievesWay/ASewerSlime392020.lua + Script Purpose : Waypoint Path for ASewerSlime392020.lua + Script Author : Rylec + Script Date : 09-12-2019 04:13:40 + Script Notes : Locations collected from Live +--]] + +function spawn(NPC) + waypoints(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) +end + +function respawn(NPC) +end + +function waypoints(NPC) + MovementLoopAddLocation(NPC, -135.28, 1.26, -0.52, 2, math.random(10, 22)) + MovementLoopAddLocation(NPC, -136.03, 1.26, -0.01, 2, 0) + MovementLoopAddLocation(NPC, -153.81, 1.26, -0.01, 2, 0) + MovementLoopAddLocation(NPC, -157.29, 1.26, -0.66, 2, math.random(10, 22)) + MovementLoopAddLocation(NPC, -155.37, 1.26, -0.20, 2, 0) + MovementLoopAddLocation(NPC, -153.93, 1.26, 0.08, 2, 0) + MovementLoopAddLocation(NPC, -153.06, 1.35, 1.34, 2, 0) + MovementLoopAddLocation(NPC, -152.16, 1.64, 1.02, 2, 0) + MovementLoopAddLocation(NPC, -152.38, 1.60, 0.58, 2, math.random(10, 22)) + MovementLoopAddLocation(NPC, -149.86, 1.67, 1.00, 2, 0) + MovementLoopAddLocation(NPC, -146.82, 1.31, 1.50, 2, 0) + MovementLoopAddLocation(NPC, -144.58, 1.26, 0.64, 2, 0) + MovementLoopAddLocation(NPC, -141.66, 1.26, 0.13, 2, 0) + MovementLoopAddLocation(NPC, -142.09, 1.26, -0.46, 2, math.random(10, 22)) + MovementLoopAddLocation(NPC, -141.02, 1.26, 0.03, 2, 0) + MovementLoopAddLocation(NPC, -138.66, 1.82, 0.32, 2, 0) + MovementLoopAddLocation(NPC, -137.98, 1.70, -0.39, 2, math.random(10, 22)) + MovementLoopAddLocation(NPC, -139.34, 1.66, -0.28, 2, 0) + MovementLoopAddLocation(NPC, -141.21, 1.26, 0.12, 2, 0) + MovementLoopAddLocation(NPC, -149.40, 1.62, -0.09, 2, 0) + MovementLoopAddLocation(NPC, -150.34, 1.81, 0.27, 2, 0) + MovementLoopAddLocation(NPC, -150.61, 2.12, 1.17, 2, 0) + MovementLoopAddLocation(NPC, -151.78, 1.62, 0.27, 2, math.random(10, 22)) + MovementLoopAddLocation(NPC, -152.47, 1.59, 0.81, 2, 0) + MovementLoopAddLocation(NPC, -158.00, 1.26, 0.79, 2, 0) + MovementLoopAddLocation(NPC, -160.24, 1.26, 0.99, 2, 0) + MovementLoopAddLocation(NPC, -162.84, 1.34, 0.80, 2, 0) + MovementLoopAddLocation(NPC, -162.43, 1.48, 0.59, 2, math.random(10, 22)) + MovementLoopAddLocation(NPC, -160.80, 1.53, -0.03, 2, 0) + MovementLoopAddLocation(NPC, -135.86, 1.26, 0.18, 2, 0) +end + diff --git a/server/SpawnScripts/ThievesWay/ASewerSlime392021.lua b/server/SpawnScripts/ThievesWay/ASewerSlime392021.lua new file mode 100644 index 000000000..0f9511afe --- /dev/null +++ b/server/SpawnScripts/ThievesWay/ASewerSlime392021.lua @@ -0,0 +1,41 @@ +--[[ + Script Name : SpawnScripts/ThievesWay/ASewerSlime392021.lua + Script Purpose : Waypoint Path for ASewerSlime392021.lua + Script Author : Rylec + Script Date : 09-22-2019 05:03:18 + Script Notes : Locations collected from Live +--]] + +function spawn(NPC) + waypoints(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) +end + +function respawn(NPC) +end + +function waypoints(NPC) + MovementLoopAddLocation(NPC, -151.46, 1.34, 61.76, 2, math.random(10, 22)) + MovementLoopAddLocation(NPC, -152.37, 1.34, 61.15, 2, 0) + MovementLoopAddLocation(NPC, -152.51, 1.34, 61.20, 2, math.random(10, 22)) + MovementLoopAddLocation(NPC, -160.49, 1.22, 60.99, 2, 0) + MovementLoopAddLocation(NPC, -160.08, 1.31, 61.01, 2, math.random(10, 22)) + MovementLoopAddLocation(NPC, -158.82, 1.58, 60.92, 2, math.random(10, 22)) + MovementLoopAddLocation(NPC, -157.78, 1.35, 61.49, 2, 0) + MovementLoopAddLocation(NPC, -156.18, 1.34, 62.07, 2, 0) + MovementLoopAddLocation(NPC, -156.29, 1.34, 62.10, 2, math.random(10, 22)) + MovementLoopAddLocation(NPC, -160.83, 1.22, 61.93, 2, 0) + MovementLoopAddLocation(NPC, -162.30, 1.22, 61.73, 2, 0) + MovementLoopAddLocation(NPC, -162.11, 1.22, 61.77, 2, math.random(10, 22)) + MovementLoopAddLocation(NPC, -158.84, 1.58, 62.22, 2, 0) + MovementLoopAddLocation(NPC, -158.61, 1.58, 62.12, 2, math.random(10, 22)) + MovementLoopAddLocation(NPC, -156.76, 1.34, 60.83, 2, 0) + MovementLoopAddLocation(NPC, -156.61, 1.34, 60.83, 2, math.random(10, 22)) + MovementLoopAddLocation(NPC, -155.74, 1.34, 60.90, 2, math.random(10, 22)) + MovementLoopAddLocation(NPC, -155.75, 1.34, 61.84, 2, 0) + MovementLoopAddLocation(NPC, -155.65, 1.34, 61.81, 2, math.random(10, 22)) +end + diff --git a/server/SpawnScripts/ThievesWay/ASewerSlime392023.lua b/server/SpawnScripts/ThievesWay/ASewerSlime392023.lua new file mode 100644 index 000000000..a4e55499e --- /dev/null +++ b/server/SpawnScripts/ThievesWay/ASewerSlime392023.lua @@ -0,0 +1,48 @@ +--[[ + Script Name : SpawnScripts/ThievesWay/ASewerSlime392023.lua + Script Purpose : Waypoint Path for ASewerSlime392023.lua + Script Author : Rylec + Script Date : 09-12-2019 07:17:14 + Script Notes : Locations collected from Live +--]] + +function spawn(NPC) + waypoints(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) +end + +function respawn(NPC) +end + +function waypoints(NPC) + MovementLoopAddLocation(NPC, -154.44, 1.26, 0.28, 2, math.random(10, 22)) + MovementLoopAddLocation(NPC, -153.91, 1.26, 0.64, 2, 0) + MovementLoopAddLocation(NPC, -152.94, 1.34, 1.20, 2, 0) + MovementLoopAddLocation(NPC, -145.14, 1.26, 0.90, 2, 0) + MovementLoopAddLocation(NPC, -140.32, 1.64, 1.17, 2, 0) + MovementLoopAddLocation(NPC, -139.38, 1.65, 0.59, 2, math.random(10, 22)) + MovementLoopAddLocation(NPC, -141.29, 1.26, 0.84, 2, 0) + MovementLoopAddLocation(NPC, -143.36, 1.26, 0.57, 2, math.random(10, 22)) + MovementLoopAddLocation(NPC, -145.94, 1.26, 0.54, 2, 0) + MovementLoopAddLocation(NPC, -147.71, 1.26, 0.96, 2, 0) + MovementLoopAddLocation(NPC, -153.93, 1.26, 0.95, 2, 0) + MovementLoopAddLocation(NPC, -156.10, 1.27, 0.68, 2, math.random(10, 22)) + MovementLoopAddLocation(NPC, -153.34, 1.26, 0.04, 2, 0) + MovementLoopAddLocation(NPC, -147.37, 1.26, 0.00, 2, 0) + MovementLoopAddLocation(NPC, -146.23, 1.26, -0.12, 2, 0) + MovementLoopAddLocation(NPC, -144.57, 1.26, -0.31, 2, 0) + MovementLoopAddLocation(NPC, -145.10, 1.26, -0.33, 2, math.random(10, 22)) + MovementLoopAddLocation(NPC, -143.93, 1.26, -0.56, 2, 0) + MovementLoopAddLocation(NPC, -148.01, 1.26, -0.43, 2, math.random(10, 22)) + MovementLoopAddLocation(NPC, -145.49, 1.26, 0.01, 2, 0) + MovementLoopAddLocation(NPC, -140.43, 1.57, 0.03, 2, 0) + MovementLoopAddLocation(NPC, -141.19, 1.26, -0.61, 2, math.random(10, 22)) + MovementLoopAddLocation(NPC, -140.54, 1.54, 0.16, 2, 0) + MovementLoopAddLocation(NPC, -148.29, 1.35, 0.55, 2, math.random(10, 22)) + MovementLoopAddLocation(NPC, -148.24, 1.33, 1.03, 2, 0) + MovementLoopAddLocation(NPC, -153.38, 1.26, 0.86, 2, 0) + MovementLoopAddLocation(NPC, -153.82, 1.26, 0.65, 2, 0) +end \ No newline at end of file diff --git a/server/SpawnScripts/ThievesWay/ASewerSlime392025.lua b/server/SpawnScripts/ThievesWay/ASewerSlime392025.lua new file mode 100644 index 000000000..2a3a1d51b --- /dev/null +++ b/server/SpawnScripts/ThievesWay/ASewerSlime392025.lua @@ -0,0 +1,52 @@ +--[[ + Script Name : ASewerSlime392027.lua + Script Purpose : Waypoint Path for ASewerSlime392027.lua + Script Author : Rylec + Script Date : 09-12-2019 08:11:11 + Script Notes : Locations collected on Live +--]] + +function spawn(NPC) + waypoints(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) +end + +function respawn(NPC) +end + +function waypoints(NPC) + MovementLoopAddLocation(NPC, -162.65, 1.36, -0.59, 2, math.random(10, 22)) + MovementLoopAddLocation(NPC, -161.66, 1.58, -0.41, 2, math.random(10, 22)) + MovementLoopAddLocation(NPC, -162.58, 1.40, -0.55, 2, math.random(10, 22)) + MovementLoopAddLocation(NPC, -159.84, 1.26, 0.04, 2, 0) + MovementLoopAddLocation(NPC, -151.01, 1.76, 0.18, 2, 0) + MovementLoopAddLocation(NPC, -150.18, 1.77, 0.67, 2, 0) + MovementLoopAddLocation(NPC, -149.06, 1.61, 0.63, 2, math.random(10, 22)) + MovementLoopAddLocation(NPC, -148.68, 1.62, 1.26, 2, 0) + MovementLoopAddLocation(NPC, -147.58, 1.26, 0.68, 2, math.random(10, 22)) + MovementLoopAddLocation(NPC, -143.40, 1.26, 0.61, 2, 0) + MovementLoopAddLocation(NPC, -141.30, 1.27, 1.03, 2, 0) + MovementLoopAddLocation(NPC, -136.12, 1.26, 0.94, 2, 0) + MovementLoopAddLocation(NPC, -135.43, 1.26, 0.59, 2, math.random(10, 22)) + MovementLoopAddLocation(NPC, -136.22, 1.26, 0.03, 2, 0) + MovementLoopAddLocation(NPC, -150.15, 1.76, 0.43, 2, 0) + MovementLoopAddLocation(NPC, -150.66, 1.82, -0.22, 2, math.random(10, 22)) + MovementLoopAddLocation(NPC, -150.00, 1.71, 0.50, 2, 0) + MovementLoopAddLocation(NPC, -149.79, 1.65, -0.43, 2, math.random(10, 22)) + MovementLoopAddLocation(NPC, -151.03, 1.75, 0.05, 2, 0) + MovementLoopAddLocation(NPC, -153.57, 1.26, -0.03, 2, 0) + MovementLoopAddLocation(NPC, -155.05, 1.26, 0.06, 2, 0) + MovementLoopAddLocation(NPC, -155.50, 1.26, 0.39, 2, math.random(10, 22)) + MovementLoopAddLocation(NPC, -153.77, 1.26, 0.02, 2, 0) + MovementLoopAddLocation(NPC, -135.96, 1.26, 0.19, 2, 0) + MovementLoopAddLocation(NPC, -135.70, 1.26, -0.23, 2, math.random(10, 22)) + MovementLoopAddLocation(NPC, -136.61, 1.52, 0.08, 2, 0) + MovementLoopAddLocation(NPC, -148.27, 1.33, 0.43, 2, math.random(10, 22)) + MovementLoopAddLocation(NPC, -149.42, 1.62, -0.01, 2, 0) + MovementLoopAddLocation(NPC, -156.58, 1.36, -0.27, 2, 0) + MovementLoopAddLocation(NPC, -161.22, 1.58, -0.01, 2, 0) +end + diff --git a/server/SpawnScripts/ThievesWay/ASewerSlime392027.lua b/server/SpawnScripts/ThievesWay/ASewerSlime392027.lua new file mode 100644 index 000000000..4ecced943 --- /dev/null +++ b/server/SpawnScripts/ThievesWay/ASewerSlime392027.lua @@ -0,0 +1,53 @@ +--[[ + Script Name : SpawnScripts/ThievesWay/ASewerSlime392027.lua + Script Purpose : Waypoint Path for ASewerSlime392027.lua + Script Author : Rylec + Script Date : 09-12-2019 08:11:11 + Script Notes : Locations collected from Live +--]] + +function spawn(NPC) + waypoints(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) +end + +function respawn(NPC) +end + +function waypoints(NPC) + MovementLoopAddLocation(NPC, -162.65, 1.36, -0.59, 2, math.random(10, 22)) + MovementLoopAddLocation(NPC, -161.66, 1.58, -0.41, 2, math.random(10, 22)) + MovementLoopAddLocation(NPC, -162.58, 1.40, -0.55, 2, math.random(10, 22)) + MovementLoopAddLocation(NPC, -159.84, 1.26, 0.04, 2, 0) + MovementLoopAddLocation(NPC, -151.01, 1.76, 0.18, 2, 0) + MovementLoopAddLocation(NPC, -150.18, 1.77, 0.67, 2, 0) + MovementLoopAddLocation(NPC, -149.06, 1.61, 0.63, 2, math.random(10, 22)) + MovementLoopAddLocation(NPC, -148.68, 1.62, 1.26, 2, 0) + MovementLoopAddLocation(NPC, -147.58, 1.26, 0.68, 2, math.random(10, 22)) + MovementLoopAddLocation(NPC, -143.40, 1.26, 0.61, 2, 0) + MovementLoopAddLocation(NPC, -141.30, 1.27, 1.03, 2, 0) + MovementLoopAddLocation(NPC, -136.12, 1.26, 0.94, 2, 0) + MovementLoopAddLocation(NPC, -135.43, 1.26, 0.59, 2, math.random(10, 22)) + MovementLoopAddLocation(NPC, -136.22, 1.26, 0.03, 2, 0) + MovementLoopAddLocation(NPC, -150.15, 1.76, 0.43, 2, 0) + MovementLoopAddLocation(NPC, -150.66, 1.82, -0.22, 2, math.random(10, 22)) + MovementLoopAddLocation(NPC, -150.00, 1.71, 0.50, 2, 0) + MovementLoopAddLocation(NPC, -149.79, 1.65, -0.43, 2, math.random(10, 22)) + MovementLoopAddLocation(NPC, -151.03, 1.75, 0.05, 2, 0) + MovementLoopAddLocation(NPC, -153.57, 1.26, -0.03, 2, 0) + MovementLoopAddLocation(NPC, -155.05, 1.26, 0.06, 2, 0) + MovementLoopAddLocation(NPC, -155.50, 1.26, 0.39, 2, math.random(10, 22)) + MovementLoopAddLocation(NPC, -153.77, 1.26, 0.02, 2, 0) + MovementLoopAddLocation(NPC, -135.96, 1.26, 0.19, 2, 0) + MovementLoopAddLocation(NPC, -135.70, 1.26, -0.23, 2, math.random(10, 22)) + MovementLoopAddLocation(NPC, -136.61, 1.52, 0.08, 2, 0) + MovementLoopAddLocation(NPC, -148.27, 1.33, 0.43, 2, math.random(10, 22)) + MovementLoopAddLocation(NPC, -149.42, 1.62, -0.01, 2, 0) + MovementLoopAddLocation(NPC, -156.58, 1.36, -0.27, 2, 0) + MovementLoopAddLocation(NPC, -161.22, 1.58, -0.01, 2, 0) +end + + diff --git a/server/SpawnScripts/ThievesWay/ASewerSlime392028.lua b/server/SpawnScripts/ThievesWay/ASewerSlime392028.lua new file mode 100644 index 000000000..29d1de7d6 --- /dev/null +++ b/server/SpawnScripts/ThievesWay/ASewerSlime392028.lua @@ -0,0 +1,56 @@ +--[[ + Script Name : SpawnScripts/ThievesWay/ASewerSlime392028.lua + Script Purpose : Waypoint Path for ASewerSlime392028.lua + Script Author : Rylec + Script Date : 09-11-2019 08:43:31 + Script Notes : Locations collected from Live +--]] + +function spawn(NPC) + waypoints(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) +end + +function respawn(NPC) +end + +function waypoints(NPC) + MovementLoopAddLocation(NPC, -156.49, 1.36, -0.38, 2, math.random(10, 22)) + MovementLoopAddLocation(NPC, -153.67, 1.26, -0.01, 2, 0) + MovementLoopAddLocation(NPC, -151.19, 1.70, -0.22, 2, 0) + MovementLoopAddLocation(NPC, -151.44, 1.64, -0.67, 2, math.random(10, 22)) + MovementLoopAddLocation(NPC, -150.62, 1.82, 0.27, 2, 0) + MovementLoopAddLocation(NPC, -152.92, 1.32, 0.97, 2, 0) + MovementLoopAddLocation(NPC, -153.48, 1.26, 0.40, 2, math.random(10, 22)) + MovementLoopAddLocation(NPC, -151.43, 1.64, 0.98, 2, 0) + MovementLoopAddLocation(NPC, -146.96, 1.27, 1.08, 2, 0) + MovementLoopAddLocation(NPC, -143.44, 1.26, 0.90, 2, 0) + MovementLoopAddLocation(NPC, -141.52, 1.28, 1.13, 2, 0) + MovementLoopAddLocation(NPC, -140.22, 1.65, 1.17, 2, 0) + MovementLoopAddLocation(NPC, -139.51, 1.63, 0.62, 2, math.random(10, 22)) + MovementLoopAddLocation(NPC, -138.69, 2.06, 1.14, 2, 0) + MovementLoopAddLocation(NPC, -139.13, 1.72, -0.30, 2, math.random(10, 22)) + MovementLoopAddLocation(NPC, -133.70, 1.26, -0.41, 2, 0) + MovementLoopAddLocation(NPC, -134.12, 1.26, -0.36, 2, math.random(10, 22)) + MovementLoopAddLocation(NPC, -133.94, 1.26, 0.16, 2, 0) + MovementLoopAddLocation(NPC, -141.89, 1.26, -0.03, 2, 0) + MovementLoopAddLocation(NPC, -144.28, 1.26, -0.60, 2, math.random(10, 22)) + MovementLoopAddLocation(NPC, -143.54, 1.26, -0.46, 2, 0) + MovementLoopAddLocation(NPC, -149.13, 1.60, -0.08, 2, 0) + MovementLoopAddLocation(NPC, -150.77, 1.82, 0.74, 2, 0) + MovementLoopAddLocation(NPC, -152.54, 1.58, 1.03, 2, 0) + MovementLoopAddLocation(NPC, -153.61, 1.26, 0.62, 2, math.random(10, 22)) + MovementLoopAddLocation(NPC, -151.82, 1.61, 0.93, 2, 0) + MovementLoopAddLocation(NPC, -147.22, 1.27, 1.01, 2, 0) + MovementLoopAddLocation(NPC, -141.35, 1.26, 0.33, 2, 0) + MovementLoopAddLocation(NPC, -140.11, 1.60, -0.05, 2, 0) + MovementLoopAddLocation(NPC, -135.58, 1.26, -0.02, 2, 0) + MovementLoopAddLocation(NPC, -133.78, 1.26, -0.28, 2, 0) + MovementLoopAddLocation(NPC, -134.17, 1.26, -0.36, 2, math.random(10, 22)) + MovementLoopAddLocation(NPC, -134.21, 1.26, 0.15, 2, 0) + MovementLoopAddLocation(NPC, -154.79, 1.26, -0.01, 2, 0) +end + diff --git a/server/SpawnScripts/ThievesWay/ASewerSlime392029.lua b/server/SpawnScripts/ThievesWay/ASewerSlime392029.lua new file mode 100644 index 000000000..69ea60bb6 --- /dev/null +++ b/server/SpawnScripts/ThievesWay/ASewerSlime392029.lua @@ -0,0 +1,56 @@ +--[[ + Script Name : SpawnScripts/ThievesWay/ASewerSlime392029.lua + Script Author : Rylec + Script Date : 2019.09.12 05:09:59 + Script Purpose : + : +--]] + +function spawn(NPC) + waypoints(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) +end + +function respawn(NPC) +end + +function waypoints(NPC) + MovementLoopAddLocation(NPC, -156.49, 1.36, -0.38, 2, math.random(10, 22)) + MovementLoopAddLocation(NPC, -153.67, 1.26, -0.01, 2, 0) + MovementLoopAddLocation(NPC, -151.19, 1.70, -0.22, 2, 0) + MovementLoopAddLocation(NPC, -151.44, 1.64, -0.67, 2, math.random(10, 22)) + MovementLoopAddLocation(NPC, -150.62, 1.82, 0.27, 2, 0) + MovementLoopAddLocation(NPC, -152.92, 1.32, 0.97, 2, 0) + MovementLoopAddLocation(NPC, -153.48, 1.26, 0.40, 2, math.random(10, 22)) + MovementLoopAddLocation(NPC, -151.43, 1.64, 0.98, 2, 0) + MovementLoopAddLocation(NPC, -146.96, 1.27, 1.08, 2, 0) + MovementLoopAddLocation(NPC, -143.44, 1.26, 0.90, 2, 0) + MovementLoopAddLocation(NPC, -141.52, 1.28, 1.13, 2, 0) + MovementLoopAddLocation(NPC, -140.22, 1.65, 1.17, 2, 0) + MovementLoopAddLocation(NPC, -139.51, 1.63, 0.62, 2, math.random(10, 22)) + MovementLoopAddLocation(NPC, -138.69, 2.06, 1.14, 2, 0) + MovementLoopAddLocation(NPC, -139.13, 1.72, -0.30, 2, math.random(10, 22)) + MovementLoopAddLocation(NPC, -133.70, 1.26, -0.41, 2, 0) + MovementLoopAddLocation(NPC, -134.12, 1.26, -0.36, 2, math.random(10, 22)) + MovementLoopAddLocation(NPC, -133.94, 1.26, 0.16, 2, 0) + MovementLoopAddLocation(NPC, -141.89, 1.26, -0.03, 2, 0) + MovementLoopAddLocation(NPC, -144.28, 1.26, -0.60, 2, math.random(10, 22)) + MovementLoopAddLocation(NPC, -143.54, 1.26, -0.46, 2, 0) + MovementLoopAddLocation(NPC, -149.13, 1.60, -0.08, 2, 0) + MovementLoopAddLocation(NPC, -150.77, 1.82, 0.74, 2, 0) + MovementLoopAddLocation(NPC, -152.54, 1.58, 1.03, 2, 0) + MovementLoopAddLocation(NPC, -153.61, 1.26, 0.62, 2, math.random(10, 22)) + MovementLoopAddLocation(NPC, -151.82, 1.61, 0.93, 2, 0) + MovementLoopAddLocation(NPC, -147.22, 1.27, 1.01, 2, 0) + MovementLoopAddLocation(NPC, -141.35, 1.26, 0.33, 2, 0) + MovementLoopAddLocation(NPC, -140.11, 1.60, -0.05, 2, 0) + MovementLoopAddLocation(NPC, -135.58, 1.26, -0.02, 2, 0) + MovementLoopAddLocation(NPC, -133.78, 1.26, -0.28, 2, 0) + MovementLoopAddLocation(NPC, -134.17, 1.26, -0.36, 2, math.random(10, 22)) + MovementLoopAddLocation(NPC, -134.21, 1.26, 0.15, 2, 0) + MovementLoopAddLocation(NPC, -154.79, 1.26, -0.01, 2, 0) +end + diff --git a/server/SpawnScripts/ThievesWay/ASewerSlime392030.lua b/server/SpawnScripts/ThievesWay/ASewerSlime392030.lua new file mode 100644 index 000000000..1fa30ce8d --- /dev/null +++ b/server/SpawnScripts/ThievesWay/ASewerSlime392030.lua @@ -0,0 +1,31 @@ +--[[ + Script Name : SpawnScripts/ThievesWay/ASewerSlime392030.lua + Script Purpose : Waypoint Path for ASewerSlime392030.lua + Script Author : Rylec + Script Date : 09-27-2019 05:45:16 + Script Notes : Locations collected from Live +--]] + +function spawn(NPC) + waypoints(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) +end + +function respawn(NPC) +end + +function waypoints(NPC) + MovementLoopAddLocation(NPC, -152.27, 0.00, 217.08, 2, math.random(10, 22)) + MovementLoopAddLocation(NPC, -151.99, 0.01, 218.08, 2, math.random(10, 22)) + MovementLoopAddLocation(NPC, -154.37, 0.02, 218.25, 2, 0) + MovementLoopAddLocation(NPC, -155.20, 0.00, 218.06, 2, math.random(10, 22)) + MovementLoopAddLocation(NPC, -159.08, 0.24, 217.26, 2, 0) + MovementLoopAddLocation(NPC, -159.05, 0.24, 217.26, 2, math.random(10, 22)) + MovementLoopAddLocation(NPC, -154.45, 0.00, 216.50, 2, 0) + MovementLoopAddLocation(NPC, -151.53, 0.08, 215.37, 2, math.random(10, 22)) + MovementLoopAddLocation(NPC, -151.51, 0.00, 216.30, 2, 0) +end + diff --git a/server/SpawnScripts/ThievesWay/ASewerSlime392032.lua b/server/SpawnScripts/ThievesWay/ASewerSlime392032.lua new file mode 100644 index 000000000..2f81c34f6 --- /dev/null +++ b/server/SpawnScripts/ThievesWay/ASewerSlime392032.lua @@ -0,0 +1,43 @@ +--[[ + Script Name : SpawnScripts/ThievesWay/ASewerSlime392032.lua + Script Purpose : Waypoint Path for ASewerSlime392032.lua + Script Author : Rylec + Script Date : 09-11-2019 08:43:31 + Script Notes : Locations collected from Live +--]] + +function spawn(NPC) + waypoints(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) +end + +function respawn(NPC) +end + +function waypoints(NPC) + MovementLoopAddLocation(NPC, -134.44, 1.26, 0.65, 2, math.random(10, 22)) + MovementLoopAddLocation(NPC, -136.20, 1.27, 1.02, 2, 0) + MovementLoopAddLocation(NPC, -142.34, 1.26, 0.99, 2, 0) + MovementLoopAddLocation(NPC, -147.43, 1.26, 0.41, 2, math.random(10, 22)) + MovementLoopAddLocation(NPC, -148.31, 1.34, -0.10, 2, 0) + MovementLoopAddLocation(NPC, -154.15, 1.26, -0.03, 2, 0) + MovementLoopAddLocation(NPC, -159.40, 1.26, -0.47, 2, math.random(10, 22)) + MovementLoopAddLocation(NPC, -160.10, 1.26, -0.52, 2, math.random(10, 22)) + MovementLoopAddLocation(NPC, -146.87, 1.26, 0.17, 2, 0) + MovementLoopAddLocation(NPC, -145.32, 1.26, 0.73, 2, math.random(10, 22)) + MovementLoopAddLocation(NPC, -146.11, 1.26, 0.52, 2, 0) + MovementLoopAddLocation(NPC, -147.47, 1.26, 0.95, 2, 0) + MovementLoopAddLocation(NPC, -154.66, 1.26, 0.87, 2, 0) + MovementLoopAddLocation(NPC, -157.26, 1.26, 0.59, 2, math.random(10, 22)) + MovementLoopAddLocation(NPC, -158.66, 1.26, 0.58, 2, 0) + MovementLoopAddLocation(NPC, -160.03, 1.27, 1.00, 2, 0) + MovementLoopAddLocation(NPC, -161.67, 1.58, 0.45, 2, 0) + MovementLoopAddLocation(NPC, -161.37, 1.58, 0.67, 2, math.random(10, 22)) + MovementLoopAddLocation(NPC, -160.13, 1.30, 1.35, 2, 0) + MovementLoopAddLocation(NPC, -155.80, 1.26, 0.48, 2, math.random(10, 22)) + MovementLoopAddLocation(NPC, -153.67, 1.26, 0.08, 2, 0) + MovementLoopAddLocation(NPC, -135.57, 1.26, 0.13, 2, 0) +end diff --git a/server/SpawnScripts/ThievesWay/ASewerSlime392033.lua b/server/SpawnScripts/ThievesWay/ASewerSlime392033.lua new file mode 100644 index 000000000..8cd79983f --- /dev/null +++ b/server/SpawnScripts/ThievesWay/ASewerSlime392033.lua @@ -0,0 +1,50 @@ +--[[ + Script Name : ASewerSlime392033.lua + Script Purpose : Waypoint Path for ASewerSlime392033.lua + Script Author : Rylec + Script Date : 09-12-2019 07:17:14 + Script Notes : Locations collected on Live +--]] + +function spawn(NPC) + waypoints(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) +end + +function respawn(NPC) +end + +function waypoints(NPC) + MovementLoopAddLocation(NPC, -154.44, 1.26, 0.28, 2, math.random(10, 22)) + MovementLoopAddLocation(NPC, -153.91, 1.26, 0.64, 2, 0) + MovementLoopAddLocation(NPC, -152.94, 1.34, 1.20, 2, 0) + MovementLoopAddLocation(NPC, -145.14, 1.26, 0.90, 2, 0) + MovementLoopAddLocation(NPC, -140.32, 1.64, 1.17, 2, 0) + MovementLoopAddLocation(NPC, -139.38, 1.65, 0.59, 2, math.random(10, 22)) + MovementLoopAddLocation(NPC, -141.29, 1.26, 0.84, 2, 0) + MovementLoopAddLocation(NPC, -143.36, 1.26, 0.57, 2, math.random(10, 22)) + MovementLoopAddLocation(NPC, -145.94, 1.26, 0.54, 2, 0) + MovementLoopAddLocation(NPC, -147.71, 1.26, 0.96, 2, 0) + MovementLoopAddLocation(NPC, -153.93, 1.26, 0.95, 2, 0) + MovementLoopAddLocation(NPC, -156.10, 1.27, 0.68, 2, math.random(10, 22)) + MovementLoopAddLocation(NPC, -153.34, 1.26, 0.04, 2, 0) + MovementLoopAddLocation(NPC, -147.37, 1.26, 0.00, 2, 0) + MovementLoopAddLocation(NPC, -146.23, 1.26, -0.12, 2, 0) + MovementLoopAddLocation(NPC, -144.57, 1.26, -0.31, 2, 0) + MovementLoopAddLocation(NPC, -145.10, 1.26, -0.33, 2, math.random(10, 22)) + MovementLoopAddLocation(NPC, -143.93, 1.26, -0.56, 2, 0) + MovementLoopAddLocation(NPC, -148.01, 1.26, -0.43, 2, math.random(10, 22)) + MovementLoopAddLocation(NPC, -145.49, 1.26, 0.01, 2, 0) + MovementLoopAddLocation(NPC, -140.43, 1.57, 0.03, 2, 0) + MovementLoopAddLocation(NPC, -141.19, 1.26, -0.61, 2, math.random(10, 22)) + MovementLoopAddLocation(NPC, -140.54, 1.54, 0.16, 2, 0) + MovementLoopAddLocation(NPC, -148.29, 1.35, 0.55, 2, math.random(10, 22)) + MovementLoopAddLocation(NPC, -148.24, 1.33, 1.03, 2, 0) + MovementLoopAddLocation(NPC, -153.38, 1.26, 0.86, 2, 0) + MovementLoopAddLocation(NPC, -153.82, 1.26, 0.65, 2, 0) +end + + diff --git a/server/SpawnScripts/ThievesWay/ASewerSlime392036.lua b/server/SpawnScripts/ThievesWay/ASewerSlime392036.lua new file mode 100644 index 000000000..70c2cb1bf --- /dev/null +++ b/server/SpawnScripts/ThievesWay/ASewerSlime392036.lua @@ -0,0 +1,32 @@ +--[[ + Script Name : SpawnScripts/ThievesWay/ASewerSlime392036.lua + Script Purpose : Waypoint Path for ASewerSlime392036.lua + Script Author : Rylec + Script Date : 09-27-2019 05:45:19 + Script Notes : Locations collected from Live +--]] + +function spawn(NPC) + waypoints(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) +end + +function respawn(NPC) +end + +function waypoints(NPC) + MovementLoopAddLocation(NPC, -161.03, 0.00, 216.86, 2, math.random(10, 22)) + MovementLoopAddLocation(NPC, -155.69, 0.00, 217.34, 2, math.random(10, 22)) + MovementLoopAddLocation(NPC, -156.84, 0.02, 215.92, 2, math.random(10, 22)) + MovementLoopAddLocation(NPC, -151.94, 0.00, 217.68, 2, math.random(10, 22)) + MovementLoopAddLocation(NPC, -156.30, 0.00, 217.11, 2, 0) + MovementLoopAddLocation(NPC, -151.39, 0.09, 218.93, 2, 0) + MovementLoopAddLocation(NPC, -151.40, 0.10, 219.05, 2, math.random(10, 22)) + MovementLoopAddLocation(NPC, -152.06, 0.01, 218.08, 2, 0) + MovementLoopAddLocation(NPC, -156.54, 0.01, 218.12, 2, 0) +end + + diff --git a/server/SpawnScripts/ThievesWay/ASewerSlime392037.lua b/server/SpawnScripts/ThievesWay/ASewerSlime392037.lua new file mode 100644 index 000000000..46040062a --- /dev/null +++ b/server/SpawnScripts/ThievesWay/ASewerSlime392037.lua @@ -0,0 +1,32 @@ +--[[ + Script Name : SpawnScripts/ThievesWay/ASewerSlime392037.lua + Script Purpose : Waypoint Path for ASewerSlime392037.lua + Script Author : Rylec + Script Date : 09-25-2019 07:03:18 + Script Notes : Locations collected from Live +--]] + +function spawn(NPC) + waypoints(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) +end + +function respawn(NPC) +end + +function waypoints(NPC) + MovementLoopAddLocation(NPC, -149.00, 0.24, 217.02, 2, math.random(10, 22)) + MovementLoopAddLocation(NPC, -144.85, 0.00, 216.33, 2, 0) + MovementLoopAddLocation(NPC, -143.49, 0.15, 214.90, 2, math.random(10, 22)) + MovementLoopAddLocation(NPC, -145.85, 0.00, 217.86, 2, math.random(10, 22)) + MovementLoopAddLocation(NPC, -140.76, 0.00, 216.38, 2, math.random(10, 22)) + MovementLoopAddLocation(NPC, -144.60, 0.00, 217.14, 2, 0) + MovementLoopAddLocation(NPC, -146.70, 0.00, 217.93, 2, math.random(10, 22)) + MovementLoopAddLocation(NPC, -144.14, 0.21, 214.60, 2, math.random(10, 22)) + MovementLoopAddLocation(NPC, -146.88, 0.02, 215.92, 2, 0) +end + + diff --git a/server/SpawnScripts/ThievesWay/ASewerSlime392039.lua b/server/SpawnScripts/ThievesWay/ASewerSlime392039.lua new file mode 100644 index 000000000..301c127f8 --- /dev/null +++ b/server/SpawnScripts/ThievesWay/ASewerSlime392039.lua @@ -0,0 +1,43 @@ +--[[ + Script Name : SpawnScripts/ThievesWay/ASewerSlime392039.lua + Script Purpose : Waypoint Path for ASewerSlime392039.lua + Script Author : Rylec + Script Date : 09-11-2019 08:43:31 + Script Notes : Locations collected from Live +--]] + +function spawn(NPC) + waypoints(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) +end + +function respawn(NPC) +end + +function waypoints(NPC) + MovementLoopAddLocation(NPC, -134.44, 1.26, 0.65, 2, math.random(10, 22)) + MovementLoopAddLocation(NPC, -136.20, 1.27, 1.02, 2, 0) + MovementLoopAddLocation(NPC, -142.34, 1.26, 0.99, 2, 0) + MovementLoopAddLocation(NPC, -147.43, 1.26, 0.41, 2, math.random(10, 22)) + MovementLoopAddLocation(NPC, -148.31, 1.34, -0.10, 2, 0) + MovementLoopAddLocation(NPC, -154.15, 1.26, -0.03, 2, 0) + MovementLoopAddLocation(NPC, -159.40, 1.26, -0.47, 2, math.random(10, 22)) + MovementLoopAddLocation(NPC, -160.10, 1.26, -0.52, 2, math.random(10, 22)) + MovementLoopAddLocation(NPC, -146.87, 1.26, 0.17, 2, 0) + MovementLoopAddLocation(NPC, -145.32, 1.26, 0.73, 2, math.random(10, 22)) + MovementLoopAddLocation(NPC, -146.11, 1.26, 0.52, 2, 0) + MovementLoopAddLocation(NPC, -147.47, 1.26, 0.95, 2, 0) + MovementLoopAddLocation(NPC, -154.66, 1.26, 0.87, 2, 0) + MovementLoopAddLocation(NPC, -157.26, 1.26, 0.59, 2, math.random(10, 22)) + MovementLoopAddLocation(NPC, -158.66, 1.26, 0.58, 2, 0) + MovementLoopAddLocation(NPC, -160.03, 1.27, 1.00, 2, 0) + MovementLoopAddLocation(NPC, -161.67, 1.58, 0.45, 2, 0) + MovementLoopAddLocation(NPC, -161.37, 1.58, 0.67, 2, math.random(10, 22)) + MovementLoopAddLocation(NPC, -160.13, 1.30, 1.35, 2, 0) + MovementLoopAddLocation(NPC, -155.80, 1.26, 0.48, 2, math.random(10, 22)) + MovementLoopAddLocation(NPC, -153.67, 1.26, 0.08, 2, 0) + MovementLoopAddLocation(NPC, -135.57, 1.26, 0.13, 2, 0) +end diff --git a/server/SpawnScripts/ThievesWay/ASewerSlime392044.lua b/server/SpawnScripts/ThievesWay/ASewerSlime392044.lua new file mode 100644 index 000000000..8d22b6045 --- /dev/null +++ b/server/SpawnScripts/ThievesWay/ASewerSlime392044.lua @@ -0,0 +1,52 @@ +--[[ + Script Name : SpawnScripts/ThievesWay/ASewerSlime392044.lua + Script Purpose : Waypoint Path for ASewerSlime392044.lua + Script Author : Rylec + Script Date : 09-12-2019 07:46:22 + Script Notes : Locations collected from Live +--]] + +function spawn(NPC) + waypoints(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) +end + +function respawn(NPC) +end + +function waypoints(NPC) + MovementLoopAddLocation(NPC, -134.21, 1.26, -0.36, 2, math.random(10, 22)) + MovementLoopAddLocation(NPC, -134.19, 1.26, -0.04, 2, 0) + MovementLoopAddLocation(NPC, -141.56, 1.26, 0.17, 2, 0) + MovementLoopAddLocation(NPC, -142.52, 1.26, 0.76, 2, math.random(10, 22)) + MovementLoopAddLocation(NPC, -141.57, 1.26, 0.52, 2, 0) + MovementLoopAddLocation(NPC, -146.49, 1.26, 0.27, 2, 0) + MovementLoopAddLocation(NPC, -148.12, 1.26, -0.08, 2, 0) + MovementLoopAddLocation(NPC, -154.55, 1.26, -0.05, 2, 0) + MovementLoopAddLocation(NPC, -156.07, 1.26, -0.36, 2, math.random(10, 22)) + MovementLoopAddLocation(NPC, -153.89, 1.26, 0.03, 2, 0) + MovementLoopAddLocation(NPC, -139.62, 1.63, -0.05, 2, 0) + MovementLoopAddLocation(NPC, -138.45, 1.82, 0.53, 2, 0) + MovementLoopAddLocation(NPC, -138.33, 1.81, 0.86, 2, math.random(10, 22)) + MovementLoopAddLocation(NPC, -137.75, 1.64, 1.39, 2, 0) + MovementLoopAddLocation(NPC, -144.21, 1.26, 0.60, 2, 0) + MovementLoopAddLocation(NPC, -146.17, 1.26, 0.56, 2, math.random(10, 22)) + MovementLoopAddLocation(NPC, -145.28, 1.26, 0.43, 2, 0) + MovementLoopAddLocation(NPC, -154.11, 1.26, -0.05, 2, 0) + MovementLoopAddLocation(NPC, -154.87, 1.26, -0.39, 2, math.random(10, 22)) + MovementLoopAddLocation(NPC, -156.55, 1.36, 0.17, 2, 0) + MovementLoopAddLocation(NPC, -158.73, 1.26, 0.24, 2, 0) + MovementLoopAddLocation(NPC, -159.03, 1.26, 0.46, 2, math.random(10, 22)) + MovementLoopAddLocation(NPC, -153.57, 1.26, 0.16, 2, 0) + MovementLoopAddLocation(NPC, -152.35, 1.58, 0.03, 2, 0) + MovementLoopAddLocation(NPC, -147.10, 1.26, -0.08, 2, 0) + MovementLoopAddLocation(NPC, -142.59, 1.26, -0.33, 2, 0) + MovementLoopAddLocation(NPC, -143.35, 1.26, -0.25, 2, math.random(10, 22)) + MovementLoopAddLocation(NPC, -141.42, 1.26, 0.02, 2, 0) + MovementLoopAddLocation(NPC, -135.83, 1.26, 0.22, 2, 0) + MovementLoopAddLocation(NPC, -133.90, 1.26, -0.24, 2, 0) +end + diff --git a/server/SpawnScripts/ThievesWay/ASewerSlime392052.lua b/server/SpawnScripts/ThievesWay/ASewerSlime392052.lua new file mode 100644 index 000000000..e220e8101 --- /dev/null +++ b/server/SpawnScripts/ThievesWay/ASewerSlime392052.lua @@ -0,0 +1,32 @@ +--[[ + Script Name : SpawnScripts/ThievesWay/ASewerSlime392052.lua + Script Purpose : Waypoint Path for ASewerSlime392052.lua + Script Author : Rylec + Script Date : 09-25-2019 07:03:02 + Script Notes : Locations collected from Live +--]] + +function spawn(NPC) + waypoints(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) +end + +function respawn(NPC) +end + +function waypoints(NPC) + MovementLoopAddLocation(NPC, -131.03, 0.27, 217.17, 2, math.random(10, 22)) + MovementLoopAddLocation(NPC, -141.80, 0.00, 216.22, 2, 0) + MovementLoopAddLocation(NPC, -140.16, 0.00, 217.83, 2, 0) + MovementLoopAddLocation(NPC, -139.32, 0.00, 217.98, 2, math.random(10, 22)) + MovementLoopAddLocation(NPC, -142.02, 0.03, 215.85, 2, 0) + MovementLoopAddLocation(NPC, -142.01, 0.04, 215.79, 2, math.random(10, 22)) + MovementLoopAddLocation(NPC, -137.68, 0.00, 216.69, 2, math.random(10, 22)) + MovementLoopAddLocation(NPC, -142.13, 0.00, 216.84, 2, 0) + MovementLoopAddLocation(NPC, -142.12, 0.00, 216.82, 2, math.random(10, 22)) + MovementLoopAddLocation(NPC, -139.52, 0.00, 216.49, 2, 0) + MovementLoopAddLocation(NPC, -134.60, 0.00, 216.73, 2, 0) +end diff --git a/server/SpawnScripts/ThievesWay/ASewerSlime392053.lua b/server/SpawnScripts/ThievesWay/ASewerSlime392053.lua new file mode 100644 index 000000000..70bf565bf --- /dev/null +++ b/server/SpawnScripts/ThievesWay/ASewerSlime392053.lua @@ -0,0 +1,46 @@ +--[[ + Script Name : SpawnScripts/ThievesWay/ASewerSlime392053.lua + Script Purpose : Waypoint Path for ASewerSlime392053.lua + Script Author : Rylec + Script Date : 09-25-2019 07:03:08 + Script Notes : Locations collected from Live +--]] + +function spawn(NPC) + waypoints(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) +end + +function respawn(NPC) +end + +function waypoints(NPC) + MovementLoopAddLocation(NPC, -140.95, 0.09, 218.94, 2, math.random(10, 22)) + MovementLoopAddLocation(NPC, -147.47, 0.00, 217.69, 2, 0) + MovementLoopAddLocation(NPC, -148.51, 0.24, 217.15, 2, 0) + MovementLoopAddLocation(NPC, -137.28, 0.00, 216.34, 2, 0) + MovementLoopAddLocation(NPC, -133.31, 0.00, 217.07, 2, 0) + MovementLoopAddLocation(NPC, -133.32, 0.00, 217.09, 2, math.random(10, 22)) + MovementLoopAddLocation(NPC, -139.87, 0.00, 217.83, 2, 0) + MovementLoopAddLocation(NPC, -147.34, 0.04, 218.46, 2, 0) + MovementLoopAddLocation(NPC, -148.79, 0.24, 218.07, 2, math.random(10, 22)) + MovementLoopAddLocation(NPC, -147.24, 0.00, 217.59, 2, 0) + MovementLoopAddLocation(NPC, -139.70, 0.00, 216.81, 2, 0) + MovementLoopAddLocation(NPC, -138.45, 0.00, 217.22, 2, math.random(10, 22)) + MovementLoopAddLocation(NPC, -144.11, 0.04, 218.39, 2, 0) + MovementLoopAddLocation(NPC, -145.20, 0.27, 219.92, 2, math.random(10, 22)) + MovementLoopAddLocation(NPC, -141.86, 0.09, 219.43, 2, 0) + MovementLoopAddLocation(NPC, -139.27, 0.01, 218.12, 2, 0) + MovementLoopAddLocation(NPC, -139.27, 0.02, 218.21, 2, 0) + MovementLoopAddLocation(NPC, -143.57, 0.00, 217.74, 2, math.random(10, 22)) + MovementLoopAddLocation(NPC, -144.69, 0.01, 218.09, 2, 0) + MovementLoopAddLocation(NPC, -144.65, 0.01, 218.14, 2, math.random(10, 22)) + MovementLoopAddLocation(NPC, -140.85, 0.08, 218.80, 2, 0) + MovementLoopAddLocation(NPC, -133.58, 0.26, 219.86, 2, 0) + MovementLoopAddLocation(NPC, -129.74, 0.48, 217.78, 2, 0) + MovementLoopAddLocation(NPC, -126.95, 0.00, 217.25, 2, math.random(10, 22)) + MovementLoopAddLocation(NPC, -138.03, 0.01, 216.02, 2, 0) +end diff --git a/server/SpawnScripts/ThievesWay/ASewerSlime392054.lua b/server/SpawnScripts/ThievesWay/ASewerSlime392054.lua new file mode 100644 index 000000000..32d954b2f --- /dev/null +++ b/server/SpawnScripts/ThievesWay/ASewerSlime392054.lua @@ -0,0 +1,40 @@ +--[[ + Script Name : SpawnScripts/ThievesWay/ASewerSlime392054.lua + Script Purpose : Waypoint Path for ASewerSlime392054.lua + Script Author : Rylec + Script Date : 09-25-2019 07:03:11 + Script Notes : Locations collected from Live +--]] + +function spawn(NPC) + waypoints(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) +end + +function respawn(NPC) +end + +function waypoints(NPC) + MovementLoopAddLocation(NPC, -147.55, 0.06, 218.59, 2, math.random(10, 22)) + -- MovementLoopAddLocation(NPC, -141.85, 0.00, 217.12, 2, 0) + MovementLoopAddLocation(NPC, -138.02, 0.00, 217.22, 2, 0) + MovementLoopAddLocation(NPC, -137.99, 0.00, 217.34, 2, math.random(10, 22)) + MovementLoopAddLocation(NPC, -144.01, 0.00, 218.03, 2, 0) + MovementLoopAddLocation(NPC, -144.99, 0.01, 218.14, 2, math.random(10, 22)) + -- MovementLoopAddLocation(NPC, -145.12, 0.00, 217.57, 2, 0) + MovementLoopAddLocation(NPC, -144.89, 0.00, 217.16, 2, math.random(10, 22)) + MovementLoopAddLocation(NPC, -137.88, 0.00, 216.74, 2, math.random(10, 22)) + MovementLoopAddLocation(NPC, -138.13, 0.13, 214.45, 2, math.random(10, 22)) + MovementLoopAddLocation(NPC, -141.70, 0.05, 215.64, 2, 0) + MovementLoopAddLocation(NPC, -142.84, 0.00, 216.86, 2, math.random(10, 22)) + MovementLoopAddLocation(NPC, -134.90, 0.01, 218.09, 2, 0) + MovementLoopAddLocation(NPC, -130.86, 0.28, 217.27, 2, 0) + MovementLoopAddLocation(NPC, -133.59, 0.01, 216.03, 2, 0) + MovementLoopAddLocation(NPC, -133.58, 0.02, 215.94, 2, math.random(10, 22)) + MovementLoopAddLocation(NPC, -133.93, 0.10, 213.73, 2, math.random(10, 22)) + MovementLoopAddLocation(NPC, -134.65, 0.10, 215.07, 2, 0) + MovementLoopAddLocation(NPC, -145.74, 0.02, 218.21, 2, 0) +end diff --git a/server/SpawnScripts/ThievesWay/ASewerSlime392057.lua b/server/SpawnScripts/ThievesWay/ASewerSlime392057.lua new file mode 100644 index 000000000..3ca3c5fc7 --- /dev/null +++ b/server/SpawnScripts/ThievesWay/ASewerSlime392057.lua @@ -0,0 +1,42 @@ +--[[ + Script Name : SpawnScripts/ThievesWay/ASewerSlime392057.lua + Script Purpose : Waypoint Path for ASewerSlime392057.lua + Script Author : Rylec + Script Date : 09-25-2019 07:03:06 + Script Notes : Locations collected from Live +--]] + +function spawn(NPC) + waypoints(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) +end + +function respawn(NPC) +end + +function waypoints(NPC) + MovementLoopAddLocation(NPC, -138.85, 0.00, 217.99, 2, math.random(10, 22)) + MovementLoopAddLocation(NPC, -142.06, 0.03, 218.83, 2, 0) + MovementLoopAddLocation(NPC, -147.53, 0.01, 218.14, 2, 0) + MovementLoopAddLocation(NPC, -149.08, 0.24, 217.12, 2, 0) + MovementLoopAddLocation(NPC, -149.05, 0.24, 217.17, 2, math.random(10, 22)) + MovementLoopAddLocation(NPC, -146.19, 0.00, 216.37, 2, math.random(10, 22)) + MovementLoopAddLocation(NPC, -140.18, 0.02, 215.94, 2, 0) + MovementLoopAddLocation(NPC, -137.46, 0.08, 215.19, 2, 0) + MovementLoopAddLocation(NPC, -136.12, 0.12, 215.95, 2, 0) + MovementLoopAddLocation(NPC, -134.40, 0.00, 216.45, 2, math.random(10, 22)) + MovementLoopAddLocation(NPC, -140.16, 0.00, 217.59, 2, 0) + MovementLoopAddLocation(NPC, -144.70, 0.00, 217.96, 2, 0) + MovementLoopAddLocation(NPC, -144.64, 0.00, 218.04, 2, math.random(10, 22)) + MovementLoopAddLocation(NPC, -143.38, 0.18, 219.46, 2, math.random(10, 22)) + MovementLoopAddLocation(NPC, -147.35, 0.01, 218.13, 2, math.random(10, 22)) + MovementLoopAddLocation(NPC, -141.89, 0.03, 218.61, 2, 0) + MovementLoopAddLocation(NPC, -139.90, 0.05, 218.50, 2, 0) + MovementLoopAddLocation(NPC, -138.75, 0.00, 217.74, 2, math.random(10, 22)) + MovementLoopAddLocation(NPC, -143.82, 0.02, 218.18, 2, 0) + MovementLoopAddLocation(NPC, -148.94, 0.36, 219.17, 2, math.random(10, 22)) +end + diff --git a/server/SpawnScripts/ThievesWay/ASewerSlime392061.lua b/server/SpawnScripts/ThievesWay/ASewerSlime392061.lua new file mode 100644 index 000000000..898dfdb78 --- /dev/null +++ b/server/SpawnScripts/ThievesWay/ASewerSlime392061.lua @@ -0,0 +1,52 @@ +--[[ + Script Name : ASewerSlime392061.lua + Script Purpose : Waypoint Path for ASewerSlime392061.lua + Script Author : Rylec + Script Date : 09-12-2019 04:13:40 + Script Notes : Locations collected on Live +--]] + +function spawn(NPC) + waypoints(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) +end + +function respawn(NPC) +end + +function waypoints(NPC) + MovementLoopAddLocation(NPC, -135.28, 1.26, -0.52, 2, math.random(10, 22)) + MovementLoopAddLocation(NPC, -136.03, 1.26, -0.01, 2, 0) + MovementLoopAddLocation(NPC, -153.81, 1.26, -0.01, 2, 0) + MovementLoopAddLocation(NPC, -157.29, 1.26, -0.66, 2, math.random(10, 22)) + MovementLoopAddLocation(NPC, -155.37, 1.26, -0.20, 2, 0) + MovementLoopAddLocation(NPC, -153.93, 1.26, 0.08, 2, 0) + MovementLoopAddLocation(NPC, -153.06, 1.35, 1.34, 2, 0) + MovementLoopAddLocation(NPC, -152.16, 1.64, 1.02, 2, 0) + MovementLoopAddLocation(NPC, -152.38, 1.60, 0.58, 2, math.random(10, 22)) + MovementLoopAddLocation(NPC, -149.86, 1.67, 1.00, 2, 0) + MovementLoopAddLocation(NPC, -146.82, 1.31, 1.50, 2, 0) + MovementLoopAddLocation(NPC, -144.58, 1.26, 0.64, 2, 0) + MovementLoopAddLocation(NPC, -141.66, 1.26, 0.13, 2, 0) + MovementLoopAddLocation(NPC, -142.09, 1.26, -0.46, 2, math.random(10, 22)) + MovementLoopAddLocation(NPC, -141.02, 1.26, 0.03, 2, 0) + MovementLoopAddLocation(NPC, -138.66, 1.82, 0.32, 2, 0) + MovementLoopAddLocation(NPC, -137.98, 1.70, -0.39, 2, math.random(10, 22)) + MovementLoopAddLocation(NPC, -139.34, 1.66, -0.28, 2, 0) + MovementLoopAddLocation(NPC, -141.21, 1.26, 0.12, 2, 0) + MovementLoopAddLocation(NPC, -149.40, 1.62, -0.09, 2, 0) + MovementLoopAddLocation(NPC, -150.34, 1.81, 0.27, 2, 0) + MovementLoopAddLocation(NPC, -150.61, 2.12, 1.17, 2, 0) + MovementLoopAddLocation(NPC, -151.78, 1.62, 0.27, 2, math.random(10, 22)) + MovementLoopAddLocation(NPC, -152.47, 1.59, 0.81, 2, 0) + MovementLoopAddLocation(NPC, -158.00, 1.26, 0.79, 2, 0) + MovementLoopAddLocation(NPC, -160.24, 1.26, 0.99, 2, 0) + MovementLoopAddLocation(NPC, -162.84, 1.34, 0.80, 2, 0) + MovementLoopAddLocation(NPC, -162.43, 1.48, 0.59, 2, math.random(10, 22)) + MovementLoopAddLocation(NPC, -160.80, 1.53, -0.03, 2, 0) + MovementLoopAddLocation(NPC, -135.86, 1.26, 0.18, 2, 0) +end + diff --git a/server/SpawnScripts/ThievesWay/ASewerSlime392063.lua b/server/SpawnScripts/ThievesWay/ASewerSlime392063.lua new file mode 100644 index 000000000..199a65779 --- /dev/null +++ b/server/SpawnScripts/ThievesWay/ASewerSlime392063.lua @@ -0,0 +1,45 @@ +--[[ + Script Name : SpawnScripts/ThievesWay/ASewerSlime392063.lua + Script Purpose : Waypoint Path for ASewerSlime392063.lua + Script Author : Rylec + Script Date : 09-25-2019 07:03:14 + Script Notes : Locations collected from Live +--]] + +function spawn(NPC) + waypoints(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) +end + +function respawn(NPC) +end + +function waypoints(NPC) + MovementLoopAddLocation(NPC, -137.87, 0.01, 218.09, 2, math.random(10, 22)) + MovementLoopAddLocation(NPC, -133.59, 0.00, 218.01, 2, 0) + MovementLoopAddLocation(NPC, -130.62, 0.29, 217.04, 2, 0) + MovementLoopAddLocation(NPC, -130.60, 0.29, 217.13, 2, math.random(10, 22)) + MovementLoopAddLocation(NPC, -131.98, 0.19, 218.93, 2, 0) + MovementLoopAddLocation(NPC, -133.54, 0.22, 219.67, 2, math.random(10, 22)) + MovementLoopAddLocation(NPC, -138.10, 0.08, 214.84, 2, math.random(10, 22)) + MovementLoopAddLocation(NPC, -141.44, 0.27, 214.27, 2, 0) + MovementLoopAddLocation(NPC, -144.74, 0.34, 214.08, 2, 0) + MovementLoopAddLocation(NPC, -146.01, 0.09, 215.28, 2, 0) + MovementLoopAddLocation(NPC, -146.82, 0.00, 216.89, 2, math.random(10, 22)) + MovementLoopAddLocation(NPC, -143.85, 0.00, 217.72, 2, 0) + MovementLoopAddLocation(NPC, -137.24, 0.08, 218.80, 2, 0) + MovementLoopAddLocation(NPC, -134.41, 0.00, 217.91, 2, 0) + MovementLoopAddLocation(NPC, -134.39, 0.00, 218.04, 2, math.random(10, 22)) + MovementLoopAddLocation(NPC, -138.85, 0.02, 218.21, 2, 0) + MovementLoopAddLocation(NPC, -148.92, 0.24, 217.61, 2, 0) + MovementLoopAddLocation(NPC, -148.93, 0.24, 217.59, 2, math.random(10, 22)) + MovementLoopAddLocation(NPC, -149.26, 0.30, 215.52, 2, math.random(10, 22)) + MovementLoopAddLocation(NPC, -146.10, 0.00, 216.62, 2, 0) + MovementLoopAddLocation(NPC, -145.14, 0.00, 217.88, 2, 0) + MovementLoopAddLocation(NPC, -145.23, 0.00, 217.91, 2, math.random(10, 22)) + MovementLoopAddLocation(NPC, -137.64, 0.01, 218.15, 2, 0) +end + diff --git a/server/SpawnScripts/ThievesWay/ASewerSlime392064.lua b/server/SpawnScripts/ThievesWay/ASewerSlime392064.lua new file mode 100644 index 000000000..1b1197a5b --- /dev/null +++ b/server/SpawnScripts/ThievesWay/ASewerSlime392064.lua @@ -0,0 +1,52 @@ +--[[ + Script Name : ASewerSlime392064.lua + Script Purpose : Waypoint Path for ASewerSlime392064.lua + Script Author : Rylec + Script Date : 09-12-2019 07:46:22 + Script Notes : Locations collected on Live +--]] + +function spawn(NPC) + waypoints(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) +end + +function respawn(NPC) +end + +function waypoints(NPC) + MovementLoopAddLocation(NPC, -134.21, 1.26, -0.36, 2, math.random(10, 22)) + MovementLoopAddLocation(NPC, -134.19, 1.26, -0.04, 2, 0) + MovementLoopAddLocation(NPC, -141.56, 1.26, 0.17, 2, 0) + MovementLoopAddLocation(NPC, -142.52, 1.26, 0.76, 2, math.random(10, 22)) + MovementLoopAddLocation(NPC, -141.57, 1.26, 0.52, 2, 0) + MovementLoopAddLocation(NPC, -146.49, 1.26, 0.27, 2, 0) + MovementLoopAddLocation(NPC, -148.12, 1.26, -0.08, 2, 0) + MovementLoopAddLocation(NPC, -154.55, 1.26, -0.05, 2, 0) + MovementLoopAddLocation(NPC, -156.07, 1.26, -0.36, 2, math.random(10, 22)) + MovementLoopAddLocation(NPC, -153.89, 1.26, 0.03, 2, 0) + MovementLoopAddLocation(NPC, -139.62, 1.63, -0.05, 2, 0) + MovementLoopAddLocation(NPC, -138.45, 1.82, 0.53, 2, 0) + MovementLoopAddLocation(NPC, -138.33, 1.81, 0.86, 2, math.random(10, 22)) + MovementLoopAddLocation(NPC, -137.75, 1.64, 1.39, 2, 0) + MovementLoopAddLocation(NPC, -144.21, 1.26, 0.60, 2, 0) + MovementLoopAddLocation(NPC, -146.17, 1.26, 0.56, 2, math.random(10, 22)) + MovementLoopAddLocation(NPC, -145.28, 1.26, 0.43, 2, 0) + MovementLoopAddLocation(NPC, -154.11, 1.26, -0.05, 2, 0) + MovementLoopAddLocation(NPC, -154.87, 1.26, -0.39, 2, math.random(10, 22)) + MovementLoopAddLocation(NPC, -156.55, 1.36, 0.17, 2, 0) + MovementLoopAddLocation(NPC, -158.73, 1.26, 0.24, 2, 0) + MovementLoopAddLocation(NPC, -159.03, 1.26, 0.46, 2, math.random(10, 22)) + MovementLoopAddLocation(NPC, -153.57, 1.26, 0.16, 2, 0) + MovementLoopAddLocation(NPC, -152.35, 1.58, 0.03, 2, 0) + MovementLoopAddLocation(NPC, -147.10, 1.26, -0.08, 2, 0) + MovementLoopAddLocation(NPC, -142.59, 1.26, -0.33, 2, 0) + MovementLoopAddLocation(NPC, -143.35, 1.26, -0.25, 2, math.random(10, 22)) + MovementLoopAddLocation(NPC, -141.42, 1.26, 0.02, 2, 0) + MovementLoopAddLocation(NPC, -135.83, 1.26, 0.22, 2, 0) + MovementLoopAddLocation(NPC, -133.90, 1.26, -0.24, 2, 0) +end + diff --git a/server/SpawnScripts/ThievesWay/ASewerSlime392083.lua b/server/SpawnScripts/ThievesWay/ASewerSlime392083.lua new file mode 100644 index 000000000..f059cae2a --- /dev/null +++ b/server/SpawnScripts/ThievesWay/ASewerSlime392083.lua @@ -0,0 +1,48 @@ +--[[ + Script Name : SpawnScripts/ThievesWay/ASewerSlime392083.lua + Script Purpose : Waypoint Path for ASewerSlime392083.lua + Script Author : Rylec + Script Date : 09-25-2019 07:02:43 + Script Notes : Locations collected from Live +--]] + +function spawn(NPC) + waypoints(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) +end + +function respawn(NPC) +end + +function waypoints(NPC) + MovementLoopAddLocation(NPC, -124.29, 0.00, 219.89, 2, math.random(10, 22)) + MovementLoopAddLocation(NPC, -116.81, 0.00, 220.38, 2, 0) + -- MovementLoopAddLocation(NPC, -113.84, 0.09, 220.71, 2, 0) + MovementLoopAddLocation(NPC, -113.77, 0.09, 220.64, 2, math.random(10, 22)) + -- MovementLoopAddLocation(NPC, -114.24, 0.09, 221.06, 2, 0) + MovementLoopAddLocation(NPC, -119.25, 0.00, 221.58, 2, math.random(10, 22)) + MovementLoopAddLocation(NPC, -121.14, 0.00, 220.16, 2, 0) + MovementLoopAddLocation(NPC, -123.69, 0.00, 218.04, 2, 0) + MovementLoopAddLocation(NPC, -124.44, 0.00, 216.58, 2, 0) + MovementLoopAddLocation(NPC, -124.43, 0.00, 216.56, 2, math.random(10, 22)) + MovementLoopAddLocation(NPC, -120.10, 0.00, 218.21, 2, 0) + MovementLoopAddLocation(NPC, -113.86, 0.09, 220.68, 2, math.random(10, 22)) + MovementLoopAddLocation(NPC, -115.87, 0.00, 216.26, 2, 0) + MovementLoopAddLocation(NPC, -116.58, 0.07, 215.48, 2, 0) + MovementLoopAddLocation(NPC, -116.61, 0.07, 215.50, 2, math.random(10, 22)) + MovementLoopAddLocation(NPC, -117.05, 0.01, 216.11, 2, 0) + MovementLoopAddLocation(NPC, -120.65, 0.00, 219.13, 2, math.random(10, 22)) + -- MovementLoopAddLocation(NPC, -119.86, 0.00, 218.67, 2, 0) + -- MovementLoopAddLocation(NPC, -119.91, 0.00, 218.76, 2, math.random(10, 22)) + MovementLoopAddLocation(NPC, -118.56, 0.00, 218.47, 2, 0) + MovementLoopAddLocation(NPC, -118.52, 0.00, 218.50, 2, math.random(10, 22)) + MovementLoopAddLocation(NPC, -118.83, 0.00, 220.00, 2, 0) + MovementLoopAddLocation(NPC, -121.31, 0.00, 221.40, 2, math.random(10, 22)) + MovementLoopAddLocation(NPC, -122.08, 0.00, 219.31, 2, 0) + MovementLoopAddLocation(NPC, -122.36, 0.00, 216.59, 2, 0) + MovementLoopAddLocation(NPC, -122.37, 0.00, 216.58, 2, math.random(10, 22)) + MovementLoopAddLocation(NPC, -123.70, 0.00, 219.24, 2, 0) +end diff --git a/server/SpawnScripts/ThievesWay/ASewerSlime392089.lua b/server/SpawnScripts/ThievesWay/ASewerSlime392089.lua new file mode 100644 index 000000000..edefacb41 --- /dev/null +++ b/server/SpawnScripts/ThievesWay/ASewerSlime392089.lua @@ -0,0 +1,43 @@ +--[[ + Script Name : SpawnScripts/ThievesWay/ASewerSlime392089.lua + Script Purpose : Waypoint Path for ASewerSlime392089.lua + Script Author : Rylec + Script Date : 09-25-2019 07:02:50 + Script Notes : Locations collected from Live +--]] + +function spawn(NPC) + waypoints(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) +end + +function respawn(NPC) +end + +function waypoints(NPC) + MovementLoopAddLocation(NPC, -113.12, 0.08, 215.32, 2, math.random(12, 22)) + MovementLoopAddLocation(NPC, -115.95, 0.00, 220.87, 2, 0) + MovementLoopAddLocation(NPC, -117.40, 0.02, 222.56, 2, 0) + MovementLoopAddLocation(NPC, -117.41, 0.02, 222.53, 2, math.random(12, 22)) + MovementLoopAddLocation(NPC, -119.77, 0.00, 222.17, 2, 0) + MovementLoopAddLocation(NPC, -122.30, 0.00, 221.84, 2, math.random(12, 22)) + MovementLoopAddLocation(NPC, -119.87, 0.00, 220.34, 2, 0) + MovementLoopAddLocation(NPC, -114.76, 0.00, 217.87, 2, 0) + MovementLoopAddLocation(NPC, -113.75, 0.00, 217.59, 2, math.random(12, 22)) + MovementLoopAddLocation(NPC, -121.89, 0.00, 218.92, 2, 0) + MovementLoopAddLocation(NPC, -123.25, 0.00, 218.64, 2, 0) + MovementLoopAddLocation(NPC, -123.24, 0.00, 218.67, 2, math.random(12, 22)) + MovementLoopAddLocation(NPC, -115.69, 0.00, 219.28, 2, 0) + MovementLoopAddLocation(NPC, -114.04, 0.01, 219.68, 2, math.random(12, 22)) + MovementLoopAddLocation(NPC, -114.20, 0.00, 219.51, 2, 0) + MovementLoopAddLocation(NPC, -121.38, 0.00, 218.17, 2, 0) + MovementLoopAddLocation(NPC, -124.23, 0.00, 217.01, 2, 0) + MovementLoopAddLocation(NPC, -125.40, 0.00, 216.84, 2, math.random(12, 22)) + MovementLoopAddLocation(NPC, -125.12, 0.00, 218.28, 2, 0) + MovementLoopAddLocation(NPC, -120.18, 0.15, 223.69, 2, 0) + MovementLoopAddLocation(NPC, -115.09, 0.11, 222.15, 2, 0) + MovementLoopAddLocation(NPC, -113.88, 0.01, 219.56, 2, 0) +end diff --git a/server/SpawnScripts/ThievesWay/ASewerSlime392092.lua b/server/SpawnScripts/ThievesWay/ASewerSlime392092.lua new file mode 100644 index 000000000..6c511cd19 --- /dev/null +++ b/server/SpawnScripts/ThievesWay/ASewerSlime392092.lua @@ -0,0 +1,36 @@ +--[[ + Script Name : SpawnScripts/ThievesWay/ASewerSlime392092.lua + Script Purpose : Waypoint Path for slime15004.lua + Script Author : Rylec + Script Date : 09-25-2019 07:02:54 + Script Notes : Locations collected from Live +--]] + +function spawn(NPC) + waypoints(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) +end + +function respawn(NPC) +end + +function waypoints(NPC) + MovementLoopAddLocation(NPC, -115.82, 0.00, 217.73, 2, math.random(12, 22)) + MovementLoopAddLocation(NPC, -120.40, 0.00, 219.99, 2, 0) + MovementLoopAddLocation(NPC, -122.54, 0.00, 221.63, 2, math.random(12, 22)) + MovementLoopAddLocation(NPC, -123.75, 0.00, 218.40, 2, 0) + MovementLoopAddLocation(NPC, -123.59, 0.00, 216.84, 2, 0) + MovementLoopAddLocation(NPC, -123.53, 0.00, 216.87, 2, math.random(12, 22)) + MovementLoopAddLocation(NPC, -124.46, 0.00, 216.34, 2, 0) + MovementLoopAddLocation(NPC, -125.04, 0.20, 214.67, 2, math.random(12, 22)) + MovementLoopAddLocation(NPC, -126.97, 0.04, 215.82, 2, math.random(12, 22)) + MovementLoopAddLocation(NPC, -120.83, 0.23, 214.51, 2, 0) + MovementLoopAddLocation(NPC, -115.65, 0.14, 214.97, 2, 0) + MovementLoopAddLocation(NPC, -113.89, 0.04, 215.76, 2, 0) + MovementLoopAddLocation(NPC, -113.91, 0.03, 215.85, 2, math.random(12, 22)) + MovementLoopAddLocation(NPC, -116.03, 0.01, 216.05, 2, 0) + MovementLoopAddLocation(NPC, -122.32, 0.00, 219.49, 2, math.random(12, 22)) +end diff --git a/server/SpawnScripts/ThievesWay/ASewerSlime392093.lua b/server/SpawnScripts/ThievesWay/ASewerSlime392093.lua new file mode 100644 index 000000000..21f61c9ed --- /dev/null +++ b/server/SpawnScripts/ThievesWay/ASewerSlime392093.lua @@ -0,0 +1,50 @@ +--[[ + Script Name : SpawnScripts/ThievesWay/ASewerSlime392093.lua + Script Purpose : Waypoint Path for ASewerSlime392093.lua + Script Author : Rylec + Script Date : 09-25-2019 07:02:58 + Script Notes : Locations collected from Live +--]] + +function spawn(NPC) + waypoints(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) +end + +function respawn(NPC) +end + +function waypoints(NPC) + MovementLoopAddLocation(NPC, -120.97, 0.17, 214.80, 2, math.random(12, 22)) + MovementLoopAddLocation(NPC, -125.26, 0.05, 215.69, 2, math.random(12, 22)) + MovementLoopAddLocation(NPC, -123.91, 0.00, 216.99, 2, 0) + MovementLoopAddLocation(NPC, -122.71, 0.00, 217.54, 2, 0) + MovementLoopAddLocation(NPC, -122.71, 0.00, 217.43, 2, math.random(12, 22)) + MovementLoopAddLocation(NPC, -124.16, 0.00, 217.66, 2, math.random(12, 22)) + MovementLoopAddLocation(NPC, -125.05, 0.00, 217.53, 2, 0) + MovementLoopAddLocation(NPC, -125.65, 0.00, 216.76, 2, math.random(12, 22)) + MovementLoopAddLocation(NPC, -123.58, 0.00, 218.36, 2, 0) + MovementLoopAddLocation(NPC, -122.68, 0.00, 219.53, 2, math.random(12, 22)) + MovementLoopAddLocation(NPC, -122.51, 0.00, 220.29, 2, math.random(12, 22)) + MovementLoopAddLocation(NPC, -118.53, 0.00, 220.30, 2, 0) + MovementLoopAddLocation(NPC, -116.34, 0.00, 219.18, 2, math.random(12, 22)) + MovementLoopAddLocation(NPC, -117.30, 0.00, 220.67, 2, 0) + MovementLoopAddLocation(NPC, -118.52, 0.00, 221.95, 2, 0) + MovementLoopAddLocation(NPC, -119.90, 0.09, 223.41, 2, math.random(12, 22)) + MovementLoopAddLocation(NPC, -119.97, 0.00, 220.13, 2, 0) + MovementLoopAddLocation(NPC, -120.45, 0.03, 215.88, 2, 0) + MovementLoopAddLocation(NPC, -123.48, 0.00, 218.98, 2, 0) + MovementLoopAddLocation(NPC, -124.31, 0.00, 219.60, 2, 0) + MovementLoopAddLocation(NPC, -124.31, 0.00, 219.57, 2, math.random(12, 22)) + MovementLoopAddLocation(NPC, -124.17, 0.00, 219.88, 2, 0) + -- MovementLoopAddLocation(NPC, -120.15, 0.00, 221.99, 2, 0) + MovementLoopAddLocation(NPC, -119.48, 0.00, 222.47, 2, math.random(12, 22)) + MovementLoopAddLocation(NPC, -116.54, 0.00, 220.41, 2, 0) + MovementLoopAddLocation(NPC, -114.57, 0.00, 217.73, 2, math.random(12, 22)) + MovementLoopAddLocation(NPC, -113.68, 0.00, 216.77, 2, 0) + MovementLoopAddLocation(NPC, -113.67, 0.00, 216.79, 2, math.random(12, 22)) + MovementLoopAddLocation(NPC, -117.97, 0.00, 217.26, 2, 0) +end diff --git a/server/SpawnScripts/ThievesWay/ASewerSlime392096.lua b/server/SpawnScripts/ThievesWay/ASewerSlime392096.lua new file mode 100644 index 000000000..f7a2a71f1 --- /dev/null +++ b/server/SpawnScripts/ThievesWay/ASewerSlime392096.lua @@ -0,0 +1,45 @@ +--[[ + Script Name : SpawnScripts/ThievesWay/ASewerSlime392096.lua + Script Purpose : Waypoint Path for ASewerSlime392096.lua + Script Author : Rylec + Script Date : 09-25-2019 07:02:47 + Script Notes : Locations collected from Live +--]] + +function spawn(NPC) + waypoints(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) +end + +function respawn(NPC) +end + +function waypoints(NPC) + MovementLoopAddLocation(NPC, -121.97, 0.04, 222.64, 2, math.random(12, 22)) + MovementLoopAddLocation(NPC, -119.16, 0.00, 222.32, 2, 0) + MovementLoopAddLocation(NPC, -117.94, 0.00, 221.87, 2, 0) + MovementLoopAddLocation(NPC, -117.96, 0.00, 221.85, 2, math.random(12, 22)) + MovementLoopAddLocation(NPC, -119.29, 0.00, 221.59, 2, math.random(12, 22)) + MovementLoopAddLocation(NPC, -122.38, 0.00, 219.57, 2, 0) + MovementLoopAddLocation(NPC, -124.23, 0.00, 217.57, 2, math.random(12, 22)) + MovementLoopAddLocation(NPC, -120.93, 0.00, 218.48, 2, 0) + MovementLoopAddLocation(NPC, -120.98, 0.00, 218.53, 2, math.random(12, 22)) + MovementLoopAddLocation(NPC, -123.37, 0.01, 221.34, 2, 0) + MovementLoopAddLocation(NPC, -124.83, 0.14, 221.53, 2, math.random(12, 22)) + MovementLoopAddLocation(NPC, -124.84, 0.05, 220.46, 2, 0) + MovementLoopAddLocation(NPC, -125.27, 0.00, 219.17, 2, 0) + MovementLoopAddLocation(NPC, -125.24, 0.00, 219.17, 2, math.random(12, 22)) + MovementLoopAddLocation(NPC, -119.76, 0.00, 217.85, 2, math.random(12, 22)) + MovementLoopAddLocation(NPC, -119.65, 0.00, 218.58, 2, 0) + MovementLoopAddLocation(NPC, -118.78, 0.00, 221.29, 2, 0) + MovementLoopAddLocation(NPC, -117.70, 0.00, 222.32, 2, 0) + MovementLoopAddLocation(NPC, -117.79, 0.00, 222.34, 2, math.random(12, 22)) + MovementLoopAddLocation(NPC, -119.79, 0.00, 216.67, 2, 0) + MovementLoopAddLocation(NPC, -120.44, 0.03, 215.92, 2, math.random(12, 22)) + MovementLoopAddLocation(NPC, -114.99, 0.00, 218.63, 2, math.random(12, 22)) + MovementLoopAddLocation(NPC, -122.33, 0.00, 218.70, 2, math.random(12, 22)) + MovementLoopAddLocation(NPC, -122.49, 0.00, 221.14, 2, 0) +end diff --git a/server/SpawnScripts/ThievesWay/ASewerSlime392138.lua b/server/SpawnScripts/ThievesWay/ASewerSlime392138.lua new file mode 100644 index 000000000..d84ccc75f --- /dev/null +++ b/server/SpawnScripts/ThievesWay/ASewerSlime392138.lua @@ -0,0 +1,49 @@ +--[[ + Script Name : SpawnScripts/ThievesWay/ASewerSlime392138.lua + Script Purpose : Waypoint Path for ASewerSlime392138.lua + Script Author : Rylec + Script Date : 09-23-2019 08:52:32 + Script Notes : Locations collected from Live +--]] + +function spawn(NPC) + waypoints(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) +end + +function respawn(NPC) +end + +function waypoints(NPC) + MovementLoopAddLocation(NPC, -99.01, 0.00, 216.82, 2, math.random(10, 22)) + MovementLoopAddLocation(NPC, -102.43, 0.00, 217.09, 2, 0) + MovementLoopAddLocation(NPC, -102.46, 0.00, 217.22, 2, math.random(10, 22)) + MovementLoopAddLocation(NPC, -91.41, 0.03, 215.85, 2, 0) + MovementLoopAddLocation(NPC, -80.22, 0.00, 216.15, 2, 0) + MovementLoopAddLocation(NPC, -80.25, 0.02, 215.96, 2, math.random(10, 22)) + MovementLoopAddLocation(NPC, -86.62, 0.00, 216.53, 2, 0) + MovementLoopAddLocation(NPC, -90.90, 0.00, 217.57, 2, math.random(10, 22)) + MovementLoopAddLocation(NPC, -91.62, 0.08, 218.85, 2, 0) + MovementLoopAddLocation(NPC, -91.72, 0.11, 219.08, 2, math.random(10, 22)) + MovementLoopAddLocation(NPC, -84.15, 0.00, 217.41, 2, 0) + MovementLoopAddLocation(NPC, -81.09, 0.00, 217.09, 2, math.random(10, 22)) + MovementLoopAddLocation(NPC, -78.79, 0.03, 217.00, 2, 0) + MovementLoopAddLocation(NPC, -78.71, 0.04, 216.77, 2, math.random(10, 22)) + MovementLoopAddLocation(NPC, -82.57, 0.00, 216.31, 2, 0) + MovementLoopAddLocation(NPC, -88.23, 0.03, 215.88, 2, 0) + MovementLoopAddLocation(NPC, -90.30, 0.06, 215.15, 2, 0) + MovementLoopAddLocation(NPC, -93.65, 0.02, 215.93, 2, math.random(10, 22)) + MovementLoopAddLocation(NPC, -91.60, 0.01, 216.11, 2, 0) + MovementLoopAddLocation(NPC, -85.40, 0.00, 216.43, 2, 0) + MovementLoopAddLocation(NPC, -84.31, 0.02, 215.96, 2, math.random(10, 22)) + MovementLoopAddLocation(NPC, -99.23, 0.00, 216.23, 2, 0) + MovementLoopAddLocation(NPC, -101.59, 0.00, 216.63, 2, 0) + MovementLoopAddLocation(NPC, -92.09, 0.00, 217.90, 2, 0) + MovementLoopAddLocation(NPC, -90.93, 0.07, 218.71, 2, 0) + MovementLoopAddLocation(NPC, -90.81, 0.08, 218.86, 2, math.random(10, 22)) + MovementLoopAddLocation(NPC, -92.57, 0.00, 218.02, 2, 0) + MovementLoopAddLocation(NPC, -98.06, 0.00, 217.64, 2, 0) +end diff --git a/server/SpawnScripts/ThievesWay/ASewerSlime392139.lua b/server/SpawnScripts/ThievesWay/ASewerSlime392139.lua new file mode 100644 index 000000000..1c1e02a36 --- /dev/null +++ b/server/SpawnScripts/ThievesWay/ASewerSlime392139.lua @@ -0,0 +1,50 @@ +--[[ + Script Name : SpawnScripts/ThievesWay/ASewerSlime392139.lua + Script Purpose : Waypoint Path for ASewerSlime392139.lua + Script Author : Rylec + Script Date : 09-23-2019 08:52:35 + Script Notes : Locations collected from Live +--]] + +function spawn(NPC) + waypoints(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) +end + +function respawn(NPC) +end + +function waypoints(NPC) + MovementLoopAddLocation(NPC, -102.63, 0.14, 214.94, 2, math.random(10, 22)) + MovementLoopAddLocation(NPC, -100.07, 0.04, 215.74, 2, 0) + MovementLoopAddLocation(NPC, -96.90, 0.00, 216.23, 2, 0) + -- MovementLoopAddLocation(NPC, -92.89, 0.01, 218.08, 2, 0) + MovementLoopAddLocation(NPC, -92.94, 0.03, 218.29, 2, math.random(10, 22)) + MovementLoopAddLocation(NPC, -97.41, 0.00, 217.54, 2, 0) + MovementLoopAddLocation(NPC, -98.38, 0.00, 217.21, 2, math.random(10, 22)) + MovementLoopAddLocation(NPC, -96.01, 0.00, 216.58, 2, math.random(10, 22)) + MovementLoopAddLocation(NPC, -99.69, 0.00, 217.47, 2, 0) + MovementLoopAddLocation(NPC, -95.82, 0.00, 217.86, 2, 0) + MovementLoopAddLocation(NPC, -91.48, 0.00, 217.80, 2, 0) + -- MovementLoopAddLocation(NPC, -90.07, 0.00, 216.66, 2, 0) + MovementLoopAddLocation(NPC, -89.75, 0.00, 216.63, 2, math.random(10, 22)) + MovementLoopAddLocation(NPC, -92.72, 0.00, 216.79, 2, 0) + MovementLoopAddLocation(NPC, -95.25, 0.04, 215.79, 2, 0) + MovementLoopAddLocation(NPC, -101.46, 0.00, 216.80, 2, 0) + MovementLoopAddLocation(NPC, -94.63, 0.00, 217.55, 2, 0) + MovementLoopAddLocation(NPC, -88.41, 0.00, 217.99, 2, 0) + MovementLoopAddLocation(NPC, -84.00, 0.00, 217.44, 2, 0) + MovementLoopAddLocation(NPC, -82.87, 0.00, 217.57, 2, math.random(10, 22)) + MovementLoopAddLocation(NPC, -86.53, 0.00, 217.30, 2, 0) + MovementLoopAddLocation(NPC, -90.93, 0.00, 216.51, 2, 0) + MovementLoopAddLocation(NPC, -97.56, 0.00, 217.04, 2, 0) + MovementLoopAddLocation(NPC, -97.54, 0.00, 216.93, 2, math.random(10, 22)) + MovementLoopAddLocation(NPC, -95.65, 0.00, 216.16, 2, 0) + MovementLoopAddLocation(NPC, -98.51, 0.02, 215.93, 2, 0) + MovementLoopAddLocation(NPC, -102.14, 0.01, 216.13, 2, 0) + MovementLoopAddLocation(NPC, -103.52, 0.00, 217.04, 2, 0) + MovementLoopAddLocation(NPC, -101.16, 0.00, 217.30, 2, math.random(10, 22)) +end diff --git a/server/SpawnScripts/ThievesWay/ASewerSlime392141.lua b/server/SpawnScripts/ThievesWay/ASewerSlime392141.lua new file mode 100644 index 000000000..427408d88 --- /dev/null +++ b/server/SpawnScripts/ThievesWay/ASewerSlime392141.lua @@ -0,0 +1,63 @@ +--[[ + Script Name : SpawnScripts/ThievesWay/ASewerSlime392141.lua + Script Purpose : Waypoint Path for ASewerSlime392141.lua + Script Author : Rylec + Script Date : 09-23-2019 08:52:38 + Script Notes : Locations collected from Live +--]] + +function spawn(NPC) + waypoints(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) +end + +function respawn(NPC) +end + +function waypoints(NPC) + MovementLoopAddLocation(NPC, -86.66, 0.00, 216.43, 2, math.random(10, 22)) + MovementLoopAddLocation(NPC, -91.76, 0.00, 217.10, 2, math.random(10, 22)) + MovementLoopAddLocation(NPC, -94.97, 0.00, 217.51, 2, 0) + MovementLoopAddLocation(NPC, -99.00, 0.00, 217.71, 2, 0) + MovementLoopAddLocation(NPC, -100.69, 0.02, 218.24, 2, 0) + MovementLoopAddLocation(NPC, -104.02, 0.00, 217.26, 2, 0) + -- MovementLoopAddLocation(NPC, -100.40, 0.00, 216.85, 2, 0) + MovementLoopAddLocation(NPC, -100.33, 0.00, 217.02, 2, math.random(10, 22)) + -- MovementLoopAddLocation(NPC, -88.16, 0.00, 217.07, 2, 0) + MovementLoopAddLocation(NPC, -88.18, 0.00, 217.33, 2, math.random(10, 22)) + -- MovementLoopAddLocation(NPC, -89.63, 0.00, 216.16, 2, 0) + MovementLoopAddLocation(NPC, -89.82, 0.00, 216.14, 2, math.random(10, 22)) + MovementLoopAddLocation(NPC, -92.71, 0.00, 216.50, 2, 0) + MovementLoopAddLocation(NPC, -93.91, 0.00, 217.57, 2, math.random(10, 22)) + MovementLoopAddLocation(NPC, -91.04, 0.26, 219.89, 2, 0) + MovementLoopAddLocation(NPC, -89.38, 0.25, 219.84, 2, math.random(10, 22)) + MovementLoopAddLocation(NPC, -87.15, 0.00, 217.94, 2, 0) + MovementLoopAddLocation(NPC, -82.51, 0.00, 216.51, 2, 0) + MovementLoopAddLocation(NPC, -80.11, 0.00, 216.93, 2, 0) + MovementLoopAddLocation(NPC, -80.16, 0.00, 217.01, 2, math.random(10, 22)) + MovementLoopAddLocation(NPC, -85.87, 0.00, 217.46, 2, 0) + MovementLoopAddLocation(NPC, -91.24, 0.00, 217.43, 2, 0) + MovementLoopAddLocation(NPC, -95.32, 0.02, 218.20, 2, 0) + MovementLoopAddLocation(NPC, -91.22, 0.03, 218.31, 2, 0) + MovementLoopAddLocation(NPC, -85.45, 0.00, 217.69, 2, 0) + MovementLoopAddLocation(NPC, -81.68, 0.00, 217.84, 2, 0) + MovementLoopAddLocation(NPC, -80.05, 0.00, 217.14, 2, math.random(10, 22)) + MovementLoopAddLocation(NPC, -84.75, 0.03, 215.86, 2, 0) + MovementLoopAddLocation(NPC, -87.32, 0.33, 215.72, 2, 0) + MovementLoopAddLocation(NPC, -90.07, 0.11, 214.64, 2, math.random(10, 22)) + MovementLoopAddLocation(NPC, -92.69, 0.08, 215.32, 2, 0) + -- MovementLoopAddLocation(NPC, -94.51, 0.00, 216.78, 2, 0) + MovementLoopAddLocation(NPC, -94.33, 0.00, 216.85, 2, math.random(10, 22)) + MovementLoopAddLocation(NPC, -87.47, 0.00, 217.81, 2, math.random(10, 22)) + MovementLoopAddLocation(NPC, -85.60, 0.00, 217.54, 2, 0) + MovementLoopAddLocation(NPC, -85.01, 0.00, 217.20, 2, math.random(10, 22)) + MovementLoopAddLocation(NPC, -87.86, 0.00, 217.23, 2, 0) + MovementLoopAddLocation(NPC, -89.66, 0.03, 218.27, 2, math.random(10, 22)) + MovementLoopAddLocation(NPC, -91.75, 0.10, 219.02, 2, math.random(10, 22)) + MovementLoopAddLocation(NPC, -95.51, 0.00, 217.46, 2, 0) + MovementLoopAddLocation(NPC, -103.62, 0.00, 216.91, 2, 0) + MovementLoopAddLocation(NPC, -101.46, 0.00, 216.55, 2, 0) +end diff --git a/server/SpawnScripts/ThievesWay/ASewerSlime392142.lua b/server/SpawnScripts/ThievesWay/ASewerSlime392142.lua new file mode 100644 index 000000000..d7e9bbf4c --- /dev/null +++ b/server/SpawnScripts/ThievesWay/ASewerSlime392142.lua @@ -0,0 +1,41 @@ +--[[ + Script Name : SpawnScripts/ThievesWay/ASewerSlime392142.lua + Script Purpose : Waypoint Path for ASewerSlime392142.lua + Script Author : Rylec + Script Date : 09-23-2019 08:52:46 + Script Notes : Locations collected from Live +--]] + +function spawn(NPC) + waypoints(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) +end + +function respawn(NPC) +end + +function waypoints(NPC) + MovementLoopAddLocation(NPC, -79.57, 0.02, 217.12, 2, math.random(10, 22)) + MovementLoopAddLocation(NPC, -91.14, 0.00, 216.45, 2, 0) + MovementLoopAddLocation(NPC, -97.85, 0.41, 215.69, 2, 0) + MovementLoopAddLocation(NPC, -102.16, 0.00, 216.77, 2, 0) + MovementLoopAddLocation(NPC, -99.00, 0.00, 217.04, 2, 0) + MovementLoopAddLocation(NPC, -99.01, 0.00, 217.06, 2, math.random(10, 22)) + MovementLoopAddLocation(NPC, -95.53, 0.00, 216.18, 2, 0) + MovementLoopAddLocation(NPC, -91.00, 0.25, 214.39, 2, math.random(10, 22)) + MovementLoopAddLocation(NPC, -87.78, 0.01, 216.09, 2, 0) + MovementLoopAddLocation(NPC, -82.82, 0.10, 219.05, 2, 0) + MovementLoopAddLocation(NPC, -82.89, 0.12, 219.11, 2, math.random(10, 22)) + MovementLoopAddLocation(NPC, -83.74, 0.00, 217.89, 2, 0) + MovementLoopAddLocation(NPC, -87.86, 0.00, 217.50, 2, 0) + MovementLoopAddLocation(NPC, -90.49, 0.00, 216.21, 2, math.random(10, 22)) + MovementLoopAddLocation(NPC, -92.47, 0.00, 216.56, 2, 0) + MovementLoopAddLocation(NPC, -92.56, 0.00, 216.34, 2, math.random(10, 22)) + MovementLoopAddLocation(NPC, -86.16, 0.00, 217.61, 2, 0) + MovementLoopAddLocation(NPC, -81.93, 0.06, 219.16, 2, 0) + MovementLoopAddLocation(NPC, -80.74, 0.19, 219.51, 2, 0) +end + diff --git a/server/SpawnScripts/ThievesWay/ASewerSlime392145.lua b/server/SpawnScripts/ThievesWay/ASewerSlime392145.lua new file mode 100644 index 000000000..54f58648b --- /dev/null +++ b/server/SpawnScripts/ThievesWay/ASewerSlime392145.lua @@ -0,0 +1,45 @@ +--[[ + Script Name : SpawnScripts/ThievesWay/ASewerSlime392145.lua + Script Purpose : Waypoint Path for ASewerSlime392145.lua + Script Author : Rylec + Script Date : 09-23-2019 08:52:40 + Script Notes : Locations collected from Live +--]] + +function spawn(NPC) + waypoints(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) +end + +function respawn(NPC) +end + +function waypoints(NPC) + MovementLoopAddLocation(NPC, -82.19, 0.09, 215.25, 2, math.random(10, 22)) + MovementLoopAddLocation(NPC, -85.27, 0.00, 216.30, 2, 0) + MovementLoopAddLocation(NPC, -88.69, 0.00, 217.04, 2, 0) + MovementLoopAddLocation(NPC, -88.65, 0.00, 216.94, 2, math.random(10, 22)) + MovementLoopAddLocation(NPC, -86.21, 0.00, 217.50, 2, 0) + MovementLoopAddLocation(NPC, -90.41, 0.00, 217.99, 2, 0) + MovementLoopAddLocation(NPC, -102.21, 0.00, 216.75, 2, 0) + MovementLoopAddLocation(NPC, -96.94, 0.00, 216.34, 2, 0) + MovementLoopAddLocation(NPC, -95.29, 0.03, 215.89, 2, 0) + -- MovementLoopAddLocation(NPC, -79.37, 0.02, 217.68, 2, 0) + MovementLoopAddLocation(NPC, -79.35, 0.02, 217.86, 2, math.random(10, 22)) + MovementLoopAddLocation(NPC, -84.79, 0.00, 218.04, 2, 0) + MovementLoopAddLocation(NPC, -87.24, 0.00, 217.32, 2, 0) + MovementLoopAddLocation(NPC, -96.79, 0.00, 216.88, 2, math.random(10, 22)) + MovementLoopAddLocation(NPC, -100.30, 0.00, 217.79, 2, 0) + MovementLoopAddLocation(NPC, -101.45, 0.14, 219.22, 2, math.random(10, 22)) + MovementLoopAddLocation(NPC, -98.47, 0.00, 217.71, 2, 0) + MovementLoopAddLocation(NPC, -93.19, 0.01, 218.08, 2, 0) + MovementLoopAddLocation(NPC, -89.13, 0.07, 218.80, 2, 0) + MovementLoopAddLocation(NPC, -84.57, 0.00, 217.23, 2, 0) + MovementLoopAddLocation(NPC, -83.10, 0.00, 216.86, 2, 0) + MovementLoopAddLocation(NPC, -83.09, 0.00, 217.05, 2, math.random(10, 22)) + MovementLoopAddLocation(NPC, -77.92, 0.02, 216.14, 2, 0) + -- MovementLoopAddLocation(NPC, -77.92, 0.02, 215.95, 2, math.random(10, 22)) +end \ No newline at end of file diff --git a/server/SpawnScripts/ThievesWay/ASewerSlime392151.lua b/server/SpawnScripts/ThievesWay/ASewerSlime392151.lua new file mode 100644 index 000000000..96a1aa86c --- /dev/null +++ b/server/SpawnScripts/ThievesWay/ASewerSlime392151.lua @@ -0,0 +1,47 @@ +--[[ + Script Name : SpawnScripts/ThievesWay/ASewerSlime392151.lua + Script Purpose : Waypoint Path for ASewerSlime392151.lua + Script Author : Rylec + Script Date : 09-23-2019 08:52:43 + Script Notes : Locations collected from Live +--]] + +function spawn(NPC) + waypoints(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) +end + +function respawn(NPC) +end + +function waypoints(NPC) + MovementLoopAddLocation(NPC, -92.46, 0.00, 217.81, 2, math.random(10, 22)) + MovementLoopAddLocation(NPC, -89.34, 0.00, 217.53, 2, 0) + MovementLoopAddLocation(NPC, -82.04, 0.02, 218.42, 2, 0) + MovementLoopAddLocation(NPC, -81.09, 0.11, 219.08, 2, 0) + MovementLoopAddLocation(NPC, -81.07, 0.09, 218.99, 2, math.random(10, 22)) + MovementLoopAddLocation(NPC, -78.51, 0.04, 216.89, 2, math.random(10, 22)) + MovementLoopAddLocation(NPC, -84.67, 0.00, 216.34, 2, 0) + MovementLoopAddLocation(NPC, -89.49, 0.03, 215.91, 2, 0) + MovementLoopAddLocation(NPC, -91.28, 0.00, 216.40, 2, 0) + MovementLoopAddLocation(NPC, -101.38, 0.00, 217.44, 2, 0) + MovementLoopAddLocation(NPC, -91.46, 0.00, 216.53, 2, 0) + MovementLoopAddLocation(NPC, -85.93, 0.01, 216.03, 2, 0) + MovementLoopAddLocation(NPC, -84.78, 0.00, 217.23, 2, 0) + MovementLoopAddLocation(NPC, -84.82, 0.00, 217.40, 2, math.random(10, 22)) + MovementLoopAddLocation(NPC, -82.53, 0.04, 215.79, 2, 0) + MovementLoopAddLocation(NPC, -81.84, 0.05, 215.68, 2, math.random(10, 22)) + MovementLoopAddLocation(NPC, -86.02, 0.01, 216.09, 2, 0) + MovementLoopAddLocation(NPC, -88.45, 0.05, 215.63, 2, 0) + MovementLoopAddLocation(NPC, -92.35, 0.27, 214.27, 2, 0) + MovementLoopAddLocation(NPC, -94.79, 0.15, 214.91, 2, 0) + MovementLoopAddLocation(NPC, -99.14, 0.00, 217.09, 2, 0) + MovementLoopAddLocation(NPC, -97.98, 0.00, 217.55, 2, 0) + MovementLoopAddLocation(NPC, -97.13, 0.00, 216.98, 2, 0) + MovementLoopAddLocation(NPC, -97.23, 0.00, 216.76, 2, math.random(10, 22)) + MovementLoopAddLocation(NPC, -97.97, 0.00, 217.33, 2, math.random(10, 22)) + MovementLoopAddLocation(NPC, -94.78, 0.04, 215.71, 2, math.random(10, 22)) +end \ No newline at end of file diff --git a/server/SpawnScripts/ThievesWay/adiseasedratonga1540072.lua b/server/SpawnScripts/ThievesWay/adiseasedratonga1540072.lua new file mode 100644 index 000000000..d8fb738af --- /dev/null +++ b/server/SpawnScripts/ThievesWay/adiseasedratonga1540072.lua @@ -0,0 +1,20 @@ +--[[ + Script Name : SpawnScripts/ThievesWay/adiseasedratonga1540072.lua + Script Author : Rylec + Script Date : 2019.09.14 05:09:40 + Script Purpose : + : +--]] + +function spawn(NPC) + +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) +end + +function respawn(NPC) + +end + diff --git a/server/SpawnScripts/ThievesWay/adiseasedratonga1586512.lua b/server/SpawnScripts/ThievesWay/adiseasedratonga1586512.lua new file mode 100644 index 000000000..b1a5ba20d --- /dev/null +++ b/server/SpawnScripts/ThievesWay/adiseasedratonga1586512.lua @@ -0,0 +1,35 @@ +--[[ + Script Name : SpawnScripts/ThievesWay/adiseasedratonga1586512.lua + Script Purpose : Waypoint Path for adiseasedratonga1586512.lua + Script Author : Rylec + Script Date : 09-15-2019 05:30:34 + Script Notes : Locations collected from Live +--]] + +function spawn(NPC) + waypoints(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) +end + +function respawn(NPC) +end + +function waypoints(NPC) + MovementLoopAddLocation(NPC, -177.34, 1.32, 35.55, 2, math.random(10, 20)) + MovementLoopAddLocation(NPC, -179.37, 1.22, 30.50, 2, math.random(10, 20)) + -- MovementLoopAddLocation(NPC, -179.26, 1.22, 29.03, 2, 0) + MovementLoopAddLocation(NPC, -178.44, 1.22, 25.42, 2, math.random(10, 20)) + MovementLoopAddLocation(NPC, -176.53, 1.22, 33.33, 2, math.random(10, 20)) + MovementLoopAddLocation(NPC, -180.08, 1.22, 36.54, 2, math.random(10, 20)) + MovementLoopAddLocation(NPC, -176.33, 1.23, 33.35, 2, math.random(10, 20)) + MovementLoopAddLocation(NPC, -174.83, 1.22, 29.16, 2, math.random(10, 20)) + MovementLoopAddLocation(NPC, -178.46, 1.24, 36.38, 2, math.random(10, 20)) + MovementLoopAddLocation(NPC, -176.17, 1.22, 30.22, 2, math.random(10, 20)) + MovementLoopAddLocation(NPC, -174.86, 1.22, 28.52, 2, math.random(10, 20)) + -- MovementLoopAddLocation(NPC, -176.34, 1.29, 34.20, 2, math.random(10, 20)) + MovementLoopAddLocation(NPC, -175.43, 1.25, 32.73, 2, math.random(10, 20)) + MovementLoopAddLocation(NPC, -179.15, 1.22, 30.77, 2, math.random(10, 20)) +end diff --git a/server/SpawnScripts/ThievesWay/adiseasedratonga1586513.lua b/server/SpawnScripts/ThievesWay/adiseasedratonga1586513.lua new file mode 100644 index 000000000..e43138dfd --- /dev/null +++ b/server/SpawnScripts/ThievesWay/adiseasedratonga1586513.lua @@ -0,0 +1,85 @@ +--[[ + Script Name : SpawnScripts/ThievesWay/adiseasedratonga1586513.lua + Script Purpose : Waypoint Path for adiseasedratonga1586513.lua + Script Author : Rylec + Script Date : 09-13-2019 06:34:48 + Script Notes : Locations collected from Live +--]] + +function spawn(NPC) + waypoints(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) +end + +function respawn(NPC) +end + +function waypoints(NPC) + MovementLoopAddLocation(NPC, -168.25, 1.34, 1.01, 2, math.random(12, 22)) + -- MovementLoopAddLocation(NPC, -168.52, 1.34, 0.87, 2, 0) + -- MovementLoopAddLocation(NPC, -172.16, 1.58, 0.83, 2, 0) + -- MovementLoopAddLocation(NPC, -174.17, 1.26, 1.17, 2, 0) + MovementLoopAddLocation(NPC, -175.93, 1.26, 2.05, 2, 0) + -- MovementLoopAddLocation(NPC, -178.06, 1.26, 3.08, 2, 0) + -- MovementLoopAddLocation(NPC, -179.07, 1.26, 3.56, 2, 0) + -- MovementLoopAddLocation(NPC, -179.07, 1.26, 3.57, 2, 0) + MovementLoopAddLocation(NPC, -179.00, 1.26, 5.96, 2, math.random(12, 22)) + MovementLoopAddLocation(NPC, -179.10, 1.62, 9.60, 2, 0, "changegrid_Going_Down") + -- MovementLoopAddLocation(NPC, -178.90, 1.62, 12.18, 2, 0) + -- MovementLoopAddLocation(NPC, -178.42, 1.95, 14.07, 2, 0) + MovementLoopAddLocation(NPC, -178.33, 1.79, 14.98, 2, 0) + -- MovementLoopAddLocation(NPC, -179.14, 1.22, 16.78, 2, 0) + -- MovementLoopAddLocation(NPC, -179.11, 1.22, 16.75, 2, math.random(3, 5)) + -- MovementLoopAddLocation(NPC, -178.63, 1.49, 16.06, 2, 0) + -- MovementLoopAddLocation(NPC, -178.45, 1.96, 14.30, 2, 0) + -- MovementLoopAddLocation(NPC, -179.28, 1.33, 13.37, 2, 0) + -- MovementLoopAddLocation(NPC, -179.93, 1.22, 14.95, 2, 0) + -- MovementLoopAddLocation(NPC, -180.06, 1.22, 15.55, 2, 0) + -- MovementLoopAddLocation(NPC, -180.06, 1.22, 15.60, 2, 0) + MovementLoopAddLocation(NPC, -180.07, 1.22, 17.84, 2, math.random(12, 22)) + MovementLoopAddLocation(NPC, -180.05, 1.22, 17.69, 2, math.random(12, 22)) + -- MovementLoopAddLocation(NPC, -179.85, 1.78, 11.40, 2, math.random(12, 22)) + MovementLoopAddLocation(NPC, -178.93, 1.86, 8.27, 2, math.random(12, 22)) + MovementLoopAddLocation(NPC, -178.20, 1.70, 6.73, 2, 0, "changegrid_Going_Up") + MovementLoopAddLocation(NPC, -176.08, 1.26, 4.40, 2, math.random(8, 15)) + MovementLoopAddLocation(NPC, -178.12, 1.94, 7.46, 2, math.random(12, 22), "changegrid_Going_Down") + MovementLoopAddLocation(NPC, -179.64, 1.68, 11.74, 2, 0) + MovementLoopAddLocation(NPC, -179.82, 1.22, 14.11, 2, math.random(12, 22)) + -- MovementLoopAddLocation(NPC, -179.87, 1.67, 10.34, 2, 0) + -- MovementLoopAddLocation(NPC, -179.94, 1.84, 7.98, 2, 0) + MovementLoopAddLocation(NPC, -179.63, 1.26, 4.81, 2, math.random(12, 22), "changegrid_Going_Up") + MovementLoopAddLocation(NPC, -179.73, 1.84, 7.82, 2, 0, "changegrid_Going_Down") + -- MovementLoopAddLocation(NPC, -179.88, 1.82, 11.10, 2, 0) + MovementLoopAddLocation(NPC, -180.05, 1.22, 15.45, 2, 0) + -- MovementLoopAddLocation(NPC, -180.00, 1.22, 16.68, 2, 0) + -- MovementLoopAddLocation(NPC, -180.01, 1.22, 16.64, 2, 0) + MovementLoopAddLocation(NPC, -179.82, 1.22, 16.02, 2, math.random(12, 22)) + -- MovementLoopAddLocation(NPC, -179.11, 1.26, 14.90, 2, 0) + -- MovementLoopAddLocation(NPC, -178.99, 1.75, 10.59, 2, 0) + -- MovementLoopAddLocation(NPC, -177.94, 1.97, 7.89, 2, 0) + MovementLoopAddLocation(NPC, -177.23, 2.04, 7.02, 2, 0, "changegrid_Going_Up") + -- MovementLoopAddLocation(NPC, -176.37, 1.38, 4.91, 2, 0) + MovementLoopAddLocation(NPC, -175.70, 1.33, 3.72, 2, 0) + -- MovementLoopAddLocation(NPC, -173.42, 1.27, 1.41, 2, 0) + -- MovementLoopAddLocation(NPC, -172.49, 1.61, 1.10, 2, 0) + -- MovementLoopAddLocation(NPC, -172.43, 1.58, -0.75, 2, 0) + -- MovementLoopAddLocation(NPC, -173.83, 1.26, -0.32, 2, 0) + -- MovementLoopAddLocation(NPC, -175.01, 1.26, 1.06, 2, 0) + -- MovementLoopAddLocation(NPC, -174.98, 1.26, 1.38, 2, 0) + -- MovementLoopAddLocation(NPC, -173.50, 1.26, 1.36, 2, 0) +end + +-------------------------------------------------------------------------------------- +-- NPC Change Grid +-------------------------------------------------------------------------------------- + +function changegrid_Going_Up(NPC) + SetGridID(NPC, 4000206445) +end + +function changegrid_Going_Down(NPC) + SetGridID(NPC, 2981397110) +end \ No newline at end of file diff --git a/server/SpawnScripts/ThievesWay/adiseasedratonga1586517.lua b/server/SpawnScripts/ThievesWay/adiseasedratonga1586517.lua new file mode 100644 index 000000000..fabeebf87 --- /dev/null +++ b/server/SpawnScripts/ThievesWay/adiseasedratonga1586517.lua @@ -0,0 +1,35 @@ +--[[ + Script Name : SpawnScripts/ThievesWay/adiseasedratonga1586517.lua + Script Purpose : Waypoint Path for adiseasedratonga1586517.lua + Script Author : Rylec + Script Date : 09-22-2019 07:08:58 + Script Notes : Locations collected from Live +--]] + +function spawn(NPC) + waypoints(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) +end + +function respawn(NPC) +end + +function waypoints(NPC) + MovementLoopAddLocation(NPC, -154.77, 1.34, 60.94, 2, math.random(12, 22)) + MovementLoopAddLocation(NPC, -151.12, 1.34, 60.75, 2, 0) + MovementLoopAddLocation(NPC, -151.29, 1.34, 60.83, 2, math.random(12, 22)) + MovementLoopAddLocation(NPC, -154.14, 1.34, 61.90, 2, math.random(12, 22)) + MovementLoopAddLocation(NPC, -156.26, 1.34, 61.44, 2, 0) + MovementLoopAddLocation(NPC, -158.89, 1.58, 60.81, 2, 0) + MovementLoopAddLocation(NPC, -161.13, 1.22, 60.84, 2, math.random(12, 22)) + MovementLoopAddLocation(NPC, -153.57, 1.34, 60.95, 2, math.random(12, 22)) + MovementLoopAddLocation(NPC, -162.34, 1.22, 62.86, 2, math.random(12, 22)) + MovementLoopAddLocation(NPC, -160.56, 1.22, 60.94, 2, math.random(12, 22)) + MovementLoopAddLocation(NPC, -151.32, 1.34, 62.87, 2, math.random(12, 22)) + MovementLoopAddLocation(NPC, -152.26, 1.34, 61.07, 2, 0) + MovementLoopAddLocation(NPC, -158.80, 1.58, 60.85, 2, math.random(12, 22)) +end + diff --git a/server/SpawnScripts/ThievesWay/adiseasedratonga1586518.lua b/server/SpawnScripts/ThievesWay/adiseasedratonga1586518.lua new file mode 100644 index 000000000..84a90fb79 --- /dev/null +++ b/server/SpawnScripts/ThievesWay/adiseasedratonga1586518.lua @@ -0,0 +1,62 @@ +--[[ + Script Name : SpawnScripts/ThievesWay/adiseasedratonga1586518.lua + Script Purpose : Waypoint Path for adiseasedratonga1586518.lua + Script Author : Rylec + Script Date : 09-22-2019 07:09:04 + Script Notes : Locations collected from Live +--]] + +function spawn(NPC) + waypoints(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) +end + +function respawn(NPC) +end + +function waypoints(NPC) + MovementLoopAddLocation(NPC, -175.61, 1.27, 58.18, 2, math.random(10, 20)) + MovementLoopAddLocation(NPC, -174.18, 1.30, 58.88, 2, 0) + MovementLoopAddLocation(NPC, -172.81, 1.88, 59.25, 2, 0, "changegrid_Going_Up") + MovementLoopAddLocation(NPC, -169.95, 1.22, 60.40, 2, 0) + MovementLoopAddLocation(NPC, -169.24, 1.22, 61.21, 2, math.random(10, 20)) + MovementLoopAddLocation(NPC, -172.24, 1.78, 60.50, 2, 0) + MovementLoopAddLocation(NPC, -173.74, 1.31, 59.90, 2, math.random(10, 20), "changegrid_Going_Down") + MovementLoopAddLocation(NPC, -176.78, 1.33, 56.23, 2, 0) + MovementLoopAddLocation(NPC, -176.90, 2.01, 53.16, 2, 0) + MovementLoopAddLocation(NPC, -178.89, 1.34, 50.01, 2, 0) + -- MovementLoopAddLocation(NPC, -178.86, 1.34, 45.04, 2, 0) + MovementLoopAddLocation(NPC, -178.80, 1.23, 54.19, 2, 0) + MovementLoopAddLocation(NPC, -178.05, 1.22, 56.49, 2, 0) + MovementLoopAddLocation(NPC, -178.05, 1.22, 56.49, 2, 0) + MovementLoopAddLocation(NPC, -177.82, 1.22, 56.63, 2, math.random(10, 20)) + -- MovementLoopAddLocation(NPC, -177.24, 1.24, 56.89, 2, 0) + MovementLoopAddLocation(NPC, -172.38, 1.78, 60.93, 2, 0, "changegrid_Going_Up") + MovementLoopAddLocation(NPC, -174.97, 1.22, 61.04, 2, 0, "changegrid_Going_Down") + MovementLoopAddLocation(NPC, -179.02, 1.30, 59.36, 2, 0) + MovementLoopAddLocation(NPC, -179.05, 1.29, 59.18, 2, math.random(10, 20)) + MovementLoopAddLocation(NPC, -176.27, 1.22, 59.97, 2, 0) + MovementLoopAddLocation(NPC, -172.55, 1.80, 60.02, 2, 0, "changegrid_Going_Up") + MovementLoopAddLocation(NPC, -170.31, 1.22, 61.61, 2, math.random(10, 20)) + MovementLoopAddLocation(NPC, -172.34, 1.78, 60.34, 2, 0) + MovementLoopAddLocation(NPC, -180.22, 1.22, 55.52, 2, 0, "changegrid_Going_Down") + MovementLoopAddLocation(NPC, -180.23, 1.22, 55.35, 2, math.random(10, 20)) + MovementLoopAddLocation(NPC, -179.15, 1.34, 48.15, 2, 0) + MovementLoopAddLocation(NPC, -178.58, 1.64, 52.81, 2, 0) + MovementLoopAddLocation(NPC, -177.28, 1.30, 56.05, 2, 0) +end + +-------------------------------------------------------------------------------------- +-- NPC Change Grid +-------------------------------------------------------------------------------------- + +function changegrid_Going_Up(NPC) + SetGridID(NPC, 3098524280) +end + +function changegrid_Going_Down(NPC) + SetGridID(NPC, 2981397110) +end diff --git a/server/SpawnScripts/ThievesWay/adiseasedratonga1586522.lua b/server/SpawnScripts/ThievesWay/adiseasedratonga1586522.lua new file mode 100644 index 000000000..db0c3c99e --- /dev/null +++ b/server/SpawnScripts/ThievesWay/adiseasedratonga1586522.lua @@ -0,0 +1,33 @@ +--[[ + Script Name : SpawnScripts/ThievesWay/adiseasedratonga1586522.lua + Script Purpose : Waypoint Path for adiseasedratonga1586522.lua + Script Author : Rylec + Script Date : 09-27-2019 05:45:27 + Script Notes : Locations collected from Live +--]] + +function spawn(NPC) + waypoints(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) +end + +function respawn(NPC) +end + +function waypoints(NPC) + MovementLoopAddLocation(NPC, -151.38, 0.05, 215.65, 2, math.random(10, 20)) + MovementLoopAddLocation(NPC, -152.17, 0.00, 217.02, 2, math.random(10, 20)) + MovementLoopAddLocation(NPC, -153.26, 0.00, 217.16, 2, math.random(10, 20)) + MovementLoopAddLocation(NPC, -158.91, 0.24, 217.70, 2, 0) + MovementLoopAddLocation(NPC, -161.18, 0.00, 217.18, 2, math.random(10, 20)) + MovementLoopAddLocation(NPC, -156.78, 0.01, 218.08, 2, math.random(10, 20)) + MovementLoopAddLocation(NPC, -160.39, 0.00, 217.20, 2, math.random(10, 20)) + MovementLoopAddLocation(NPC, -164.62, 0.00, 217.55, 2, 0) + MovementLoopAddLocation(NPC, -152.51, 0.01, 218.10, 2, 0) + MovementLoopAddLocation(NPC, -152.45, 0.00, 218.01, 2, math.random(10, 20)) + MovementLoopAddLocation(NPC, -151.22, 0.00, 217.07, 2, math.random(10, 20)) +end + diff --git a/server/SpawnScripts/ThievesWay/adiseasedratonga1586524.lua b/server/SpawnScripts/ThievesWay/adiseasedratonga1586524.lua new file mode 100644 index 000000000..e93455594 --- /dev/null +++ b/server/SpawnScripts/ThievesWay/adiseasedratonga1586524.lua @@ -0,0 +1,57 @@ +--[[ + Script Name : SpawnScripts/ThievesWay/adiseasedratonga1586524.lua + Script Purpose : Waypoint Path for adiseasedratonga1586524.lua + Script Author : Rylec + Script Date : 09-28-2019 10:45:39 + Script Notes : Locations collected from Live +--]] + +function spawn(NPC) + waypoints(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) +end + +function respawn(NPC) +end + +function waypoints(NPC) + MovementLoopAddLocation(NPC, -181.64, 0.24, 209.08, 2, math.random(12, 22), "changegrid_Going_Down") + MovementLoopAddLocation(NPC, -180.60, 0.01, 211.85, 2, math.random(12, 22), "changegrid_Going_Up") + -- MovementLoopAddLocation(NPC, -180.04, 0.06, 211.97, 2, 0) + MovementLoopAddLocation(NPC, -177.65, 0.05, 214.45, 2, 0) + MovementLoopAddLocation(NPC, -175.89, 0.00, 217.77, 2, math.random(12, 22)) + MovementLoopAddLocation(NPC, -178.48, 0.07, 213.42, 2, 0) + MovementLoopAddLocation(NPC, -180.32, 0.06, 211.35, 2, 0) + MovementLoopAddLocation(NPC, -182.41, 0.00, 205.14, 2, math.random(12, 22), "changegrid_Going_Down") + MovementLoopAddLocation(NPC, -182.09, 0.00, 206.11, 2, 0) + MovementLoopAddLocation(NPC, -181.20, 0.00, 210.79, 2, 0, "changegrid_Going_Up") + MovementLoopAddLocation(NPC, -178.67, 0.02, 216.76, 2, math.random(12, 22)) + MovementLoopAddLocation(NPC, -181.42, 0.07, 215.11, 2, math.random(12, 22)) + MovementLoopAddLocation(NPC, -175.53, 0.00, 216.78, 2, math.random(12, 22)) + MovementLoopAddLocation(NPC, -180.59, 0.03, 211.31, 2, 0) + MovementLoopAddLocation(NPC, -182.30, 0.00, 205.45, 2, 0, "changegrid_Going_Down") + MovementLoopAddLocation(NPC, -182.49, 0.00, 200.92, 2, 0) + MovementLoopAddLocation(NPC, -181.94, 0.00, 205.92, 2, 0) + MovementLoopAddLocation(NPC, -179.11, 0.12, 212.13, 2, 0, "changegrid_Going_Up") + MovementLoopAddLocation(NPC, -172.89, 0.00, 217.61, 2, math.random(12, 22)) + MovementLoopAddLocation(NPC, -174.62, 0.00, 216.96, 2, 0) + MovementLoopAddLocation(NPC, -180.32, 0.05, 211.56, 2, 0) + MovementLoopAddLocation(NPC, -182.41, 0.00, 206.13, 2, math.random(12, 22), "changegrid_Going_Down") + MovementLoopAddLocation(NPC, -178.68, 0.00, 216.44, 2, 0, "changegrid_Going_Up") + MovementLoopAddLocation(NPC, -178.62, 0.00, 216.46, 2, math.random(12, 22)) +end + +-------------------------------------------------------------------------------------- +-- NPC Change Grid +-------------------------------------------------------------------------------------- + +function changegrid_Going_Up(NPC) + SetGridID(NPC, 3053675711) +end + +function changegrid_Going_Down(NPC) + SetGridID(NPC, 1555937977) +end \ No newline at end of file diff --git a/server/SpawnScripts/ThievesWay/adiseasedratonga1586525.lua b/server/SpawnScripts/ThievesWay/adiseasedratonga1586525.lua new file mode 100644 index 000000000..36501477b --- /dev/null +++ b/server/SpawnScripts/ThievesWay/adiseasedratonga1586525.lua @@ -0,0 +1,48 @@ +--[[ + Script Name : SpawnScripts/ThievesWay/adiseasedratonga1586525.lua + Script Purpose : Waypoint Path for adiseasedratonga1586525.lua + Script Author : Rylec + Script Date : 09-28-2019 10:45:44 + Script Notes : Locations collected from Live +--]] + +function spawn(NPC) + waypoints(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) +end + +function respawn(NPC) +end + +function waypoints(NPC) + MovementLoopAddLocation(NPC, -179.44, 0.00, 215.77, 2, math.random(12, 22)) + MovementLoopAddLocation(NPC, -181.43, 0.25, 209.34, 2, math.random(12, 22), "changegrid_Going_Down") + MovementLoopAddLocation(NPC, -181.49, 0.29, 203.10, 2, 0) + MovementLoopAddLocation(NPC, -181.53, 0.27, 203.10, 2, math.random(12, 22)) + MovementLoopAddLocation(NPC, -181.50, 0.00, 205.85, 2, math.random(12, 22)) + MovementLoopAddLocation(NPC, -181.48, 0.04, 214.62, 2, math.random(12, 22), "changegrid_Going_Up") + MovementLoopAddLocation(NPC, -180.71, 0.00, 214.63, 2, 0) + MovementLoopAddLocation(NPC, -180.72, 0.00, 214.60, 2, math.random(12, 22)) + MovementLoopAddLocation(NPC, -181.65, 0.00, 208.01, 2, math.random(12, 22), "changegrid_Going_Down") + MovementLoopAddLocation(NPC, -181.64, 0.24, 209.03, 2, 0) + MovementLoopAddLocation(NPC, -176.40, 0.10, 214.71, 2, 0, "changegrid_Going_Up") + MovementLoopAddLocation(NPC, -169.54, 0.00, 216.88, 2, 0) + MovementLoopAddLocation(NPC, -175.84, 0.08, 215.09, 2, 0) + MovementLoopAddLocation(NPC, -182.60, 0.00, 210.95, 2, math.random(12, 22)) + MovementLoopAddLocation(NPC, -181.85, 0.03, 214.05, 2, 0, "changegrid_Going_Up") +end + +-------------------------------------------------------------------------------------- +-- NPC Change Grid +-------------------------------------------------------------------------------------- + +function changegrid_Going_Up(NPC) + SetGridID(NPC, 3053675711) +end + +function changegrid_Going_Down(NPC) + SetGridID(NPC, 1555937977) +end diff --git a/server/SpawnScripts/ThievesWay/adiseasedratonga1586526.lua b/server/SpawnScripts/ThievesWay/adiseasedratonga1586526.lua new file mode 100644 index 000000000..7981dcf72 --- /dev/null +++ b/server/SpawnScripts/ThievesWay/adiseasedratonga1586526.lua @@ -0,0 +1,47 @@ +--[[ + Script Name : SpawnScripts/ThievesWay/adiseasedratonga1586526.lua + Script Purpose : Waypoint Path for adiseasedratonga1586526.lua + Script Author : Rylec + Script Date : 09-28-2019 10:45:51 + Script Notes : Locations collected from Live +--]] + +function spawn(NPC) + waypoints(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) +end + +function respawn(NPC) +end + +function waypoints(NPC) + MovementLoopAddLocation(NPC, -182.58, 0.04, 212.90, 2, math.random(12, 22)) + -- MovementLoopAddLocation(NPC, -182.49, 0.00, 212.00, 2, 0) + MovementLoopAddLocation(NPC, -182.40, 0.00, 212.08, 2, math.random(12, 22)) + MovementLoopAddLocation(NPC, -178.75, 0.00, 214.75, 2, math.random(12, 22)) + MovementLoopAddLocation(NPC, -181.92, 0.00, 207.88, 2, math.random(12, 22), "changegrid_Going_Down") + MovementLoopAddLocation(NPC, -182.53, 0.24, 199.33, 2, math.random(12, 22)) + MovementLoopAddLocation(NPC, -182.47, 0.00, 201.23, 2, 0) + MovementLoopAddLocation(NPC, -182.38, 0.00, 201.26, 2, math.random(12, 22)) + MovementLoopAddLocation(NPC, -180.52, 0.00, 213.99, 2, 0, "changegrid_Going_Up") + MovementLoopAddLocation(NPC, -180.72, 0.03, 215.77, 2, 0) + MovementLoopAddLocation(NPC, -180.81, 0.03, 215.79, 2, math.random(12, 22)) + MovementLoopAddLocation(NPC, -173.96, 0.00, 217.84, 2, math.random(12, 22)) + MovementLoopAddLocation(NPC, -180.90, 0.00, 214.18, 2, 0) +end + +-------------------------------------------------------------------------------------- +-- NPC Change Grid +-------------------------------------------------------------------------------------- + +function changegrid_Going_Up(NPC) + SetGridID(NPC, 3053675711) +end + +function changegrid_Going_Down(NPC) + SetGridID(NPC, 1555937977) +end + diff --git a/server/SpawnScripts/ThievesWay/adiseasedratonga1586527.lua b/server/SpawnScripts/ThievesWay/adiseasedratonga1586527.lua new file mode 100644 index 000000000..e5b842126 --- /dev/null +++ b/server/SpawnScripts/ThievesWay/adiseasedratonga1586527.lua @@ -0,0 +1,50 @@ +--[[ + Script Name : SpawnScripts/ThievesWay/adiseasedratonga1586527.lua + Script Purpose : Waypoint Path for adiseasedratonga1586527.lua + Script Author : Rylec + Script Date : 10-05-2019 09:22:56 + Script Notes : Locations collected from Live +--]] + +function spawn(NPC) + waypoints(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) +end + +function respawn(NPC) +end + +function waypoints(NPC) + MovementLoopAddLocation(NPC, -183.30, 0.00, 184.75, 2, math.random(12, 22), "changegrid_Going_Down") + MovementLoopAddLocation(NPC, -183.02, 0.39, 186.92, 2, 0, "changegrid_Going_Up") + MovementLoopAddLocation(NPC, -183.17, 0.00, 194.50, 2, 0) + MovementLoopAddLocation(NPC, -183.14, 0.10, 193.88, 2, math.random(12, 22)) + MovementLoopAddLocation(NPC, -182.04, 0.00, 183.84, 2, 0, "changegrid_Going_Down") + MovementLoopAddLocation(NPC, -183.18, 0.00, 194.97, 2, 0, "changegrid_Going_Up") + MovementLoopAddLocation(NPC, -183.17, 0.00, 194.93, 2, math.random(12, 22)) + MovementLoopAddLocation(NPC, -182.27, 0.00, 192.04, 2, 0) + MovementLoopAddLocation(NPC, -182.23, 0.00, 195.62, 2, math.random(12, 22)) + MovementLoopAddLocation(NPC, -183.13, 0.27, 186.16, 2, math.random(12, 22)) + MovementLoopAddLocation(NPC, -182.15, 0.25, 189.00, 2, 0) + MovementLoopAddLocation(NPC, -182.15, 0.26, 188.98, 2, math.random(12, 22)) + MovementLoopAddLocation(NPC, -182.19, 0.29, 186.44, 2, math.random(12, 22)) + MovementLoopAddLocation(NPC, -182.07, 0.48, 187.24, 2, 0) + MovementLoopAddLocation(NPC, -183.28, 0.10, 193.95, 2, 0) +end + +-------------------------------------------------------------------------------------- +-- NPC Change Grid +-------------------------------------------------------------------------------------- + +function changegrid_Going_Up(NPC) + SetGridID(NPC, 1555937977) +end + +function changegrid_Going_Down(NPC) + SetGridID(NPC, 667331216) +end + + diff --git a/server/SpawnScripts/ThievesWay/adiseasedratonga1586528.lua b/server/SpawnScripts/ThievesWay/adiseasedratonga1586528.lua new file mode 100644 index 000000000..af3f567d8 --- /dev/null +++ b/server/SpawnScripts/ThievesWay/adiseasedratonga1586528.lua @@ -0,0 +1,54 @@ +--[[ + Script Name : SpawnScripts/ThievesWay/adiseasedratonga1586528.lua + Script Purpose : Waypoint Path for adiseasedratonga1586528.lua + Script Author : Rylec + Script Date : 10-06-2019 09:45:49 + Script Notes : Locations collected from Live +--]] + +function spawn(NPC) + waypoints(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) +end + +function respawn(NPC) +end + +function waypoints(NPC) + MovementLoopAddLocation(NPC, -150.22, -0.56, 164.83, 2, math.random(12, 22)) + MovementLoopAddLocation(NPC, -152.91, -0.56, 166.09, 2, 0) + MovementLoopAddLocation(NPC, -152.91, -0.56, 170.97, 2, 0) + MovementLoopAddLocation(NPC, -145.88, -1.94, 170.97, 2, 0) + MovementLoopAddLocation(NPC, -134.58, -0.56, 174.60, 2, 0) + MovementLoopAddLocation(NPC, -132.89, -0.56, 176.08, 2, 0) + MovementLoopAddLocation(NPC, -133.07, -1.68, 182.28, 2, 0) + MovementLoopAddLocation(NPC, -133.77, -1.69, 184.01, 2, 0) + MovementLoopAddLocation(NPC, -134.11, -0.83, 188.09, 2, 0) + MovementLoopAddLocation(NPC, -138.33, -0.56, 190.75, 2, math.random(12, 22)) + MovementLoopAddLocation(NPC, -138.31, -0.56, 186.03, 2, 0) + MovementLoopAddLocation(NPC, -138.31, -0.56, 176.08, 2, 0) + MovementLoopAddLocation(NPC, -134.58, -0.56, 172.44, 2, 0) + MovementLoopAddLocation(NPC, -132.89, -0.56, 170.97, 2, 0) + MovementLoopAddLocation(NPC, -132.89, -0.56, 166.09, 2, 0) + MovementLoopAddLocation(NPC, -131.95, -0.56, 165.03, 2, math.random(12, 22)) + MovementLoopAddLocation(NPC, -132.89, -0.56, 166.09, 2, 0) + MovementLoopAddLocation(NPC, -132.89, -0.56, 170.97, 2, 0) + MovementLoopAddLocation(NPC, -134.58, -0.56, 172.44, 2, 0) + MovementLoopAddLocation(NPC, -135.34, -0.56, 174.04, 2, math.random(12, 22)) + MovementLoopAddLocation(NPC, -134.58, -0.56, 174.60, 2, 0) + MovementLoopAddLocation(NPC, -132.89, -0.56, 176.08, 2, 0) + MovementLoopAddLocation(NPC, -132.89, -0.56, 180.97, 2, 0) + MovementLoopAddLocation(NPC, -128.53, -0.56, 186.28, 2, 0) + MovementLoopAddLocation(NPC, -128.21, -0.56, 190.41, 2, math.random(12, 22)) + MovementLoopAddLocation(NPC, -128.53, -0.56, 186.28, 2, 0) + MovementLoopAddLocation(NPC, -132.89, -0.56, 180.97, 2, 0) + MovementLoopAddLocation(NPC, -132.89, -0.56, 176.08, 2, 0) + MovementLoopAddLocation(NPC, -136.79, -0.56, 173.52, 2, 0) + MovementLoopAddLocation(NPC, -142.38, -0.56, 171.05, 2, 0) + MovementLoopAddLocation(NPC, -145.78, -1.94, 170.58, 2, 0) + MovementLoopAddLocation(NPC, -147.48, -1.20, 165.81, 2, 0) + MovementLoopAddLocation(NPC, -148.47, -0.82, 165.05, 2, 0) +end diff --git a/server/SpawnScripts/ThievesWay/adiseasedratonga1586532.lua b/server/SpawnScripts/ThievesWay/adiseasedratonga1586532.lua new file mode 100644 index 000000000..e4eacce87 --- /dev/null +++ b/server/SpawnScripts/ThievesWay/adiseasedratonga1586532.lua @@ -0,0 +1,73 @@ +--[[ + Script Name : SpawnScripts/ThievesWay/adiseasedratonga1586532.lua + Script Purpose : Waypoint Path for adiseasedratonga1586532.lua + Script Author : Rylec + Script Date : 10-06-2019 09:46:02 + Script Notes : Locations collected from Live +--]] + +function spawn(NPC) + waypoints(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) +end + +function respawn(NPC) +end + +function waypoints(NPC) + MovementLoopAddLocation(NPC, -132.58, -0.56, 170.64, 2, math.random(12, 22)) + MovementLoopAddLocation(NPC, -138.89, -0.56, 165.92, 2, 0) + MovementLoopAddLocation(NPC, -142.16, -0.56, 165.98, 2, 0) + MovementLoopAddLocation(NPC, -147.02, -0.49, 162.21, 2, math.random(12, 22)) + MovementLoopAddLocation(NPC, -142.80, -0.56, 166.09, 2, 0) + MovementLoopAddLocation(NPC, -142.80, -0.56, 170.97, 2, 0) + MovementLoopAddLocation(NPC, -138.23, -0.56, 173.19, 2, 0) + MovementLoopAddLocation(NPC, -136.29, -0.56, 174.60, 2, math.random(12, 22)) + MovementLoopAddLocation(NPC, -134.58, -0.56, 174.60, 2, 0) + MovementLoopAddLocation(NPC, -132.89, -0.56, 176.08, 2, 0) + MovementLoopAddLocation(NPC, -132.89, -0.56, 180.97, 2, 0) + MovementLoopAddLocation(NPC, -142.80, -0.56, 180.97, 2, 0) + MovementLoopAddLocation(NPC, -145.42, -0.56, 177.94, 2, 0) + MovementLoopAddLocation(NPC, -148.41, -0.56, 176.30, 2, 0) + MovementLoopAddLocation(NPC, -153.24, -0.56, 170.13, 2, 0) + MovementLoopAddLocation(NPC, -155.27, -0.56, 164.88, 2, math.random(12, 22)) + MovementLoopAddLocation(NPC, -153.01, -0.56, 168.32, 2, 0) + MovementLoopAddLocation(NPC, -152.74, -1.57, 171.89, 2, 0) + MovementLoopAddLocation(NPC, -150.52, -0.64, 175.97, 2, 0) + MovementLoopAddLocation(NPC, -148.18, -0.56, 176.29, 2, 0) + MovementLoopAddLocation(NPC, -142.78, -0.56, 180.73, 2, 0) + MovementLoopAddLocation(NPC, -138.19, -0.61, 186.53, 2, 0) + MovementLoopAddLocation(NPC, -135.05, -0.74, 190.72, 2, 0) + MovementLoopAddLocation(NPC, -135.11, -0.74, 190.71, 2, math.random(12, 22)) + MovementLoopAddLocation(NPC, -137.83, -0.69, 188.15, 2, 0) + MovementLoopAddLocation(NPC, -138.58, -0.56, 186.33, 2, 0) + MovementLoopAddLocation(NPC, -143.16, -1.94, 184.02, 2, 0) + MovementLoopAddLocation(NPC, -145.75, -0.56, 179.07, 2, math.random(12, 22)) + MovementLoopAddLocation(NPC, -141.84, -0.56, 174.78, 2, 0) + MovementLoopAddLocation(NPC, -136.18, -0.56, 173.00, 2, 0) + MovementLoopAddLocation(NPC, -134.58, -0.56, 172.44, 2, math.random(12, 22)) + MovementLoopAddLocation(NPC, -132.89, -0.56, 170.97, 2, math.random(12, 22)) + MovementLoopAddLocation(NPC, -134.58, -0.56, 172.44, 2, 0) + MovementLoopAddLocation(NPC, -143.90, -0.58, 176.86, 2, 0) + MovementLoopAddLocation(NPC, -147.41, -0.56, 176.81, 2, 0) + MovementLoopAddLocation(NPC, -148.43, -0.56, 176.08, 2, 0) + MovementLoopAddLocation(NPC, -152.41, -0.56, 176.08, 2, 0) + MovementLoopAddLocation(NPC, -153.91, -0.56, 178.62, 2, 0) + MovementLoopAddLocation(NPC, -153.94, -0.56, 178.61, 2, math.random(12, 22)) + MovementLoopAddLocation(NPC, -153.76, -0.56, 177.78, 2, 0) + MovementLoopAddLocation(NPC, -151.84, -0.64, 176.06, 2, 0) + MovementLoopAddLocation(NPC, -148.35, -0.56, 176.39, 2, 0) + MovementLoopAddLocation(NPC, -147.23, -0.56, 176.96, 2, 0) + MovementLoopAddLocation(NPC, -143.81, -0.58, 176.83, 2, 0) + MovementLoopAddLocation(NPC, -138.45, -0.56, 173.24, 2, 0) + MovementLoopAddLocation(NPC, -134.58, -0.56, 172.44, 2, 0) + -- MovementLoopAddLocation(NPC, -133.33, -0.56, 171.13, 2, 4) + -- MovementLoopAddLocation(NPC, -138.60, -0.57, 165.83, 2, 0) + -- MovementLoopAddLocation(NPC, -144.27, -1.78, 164.86, 2, 0) + -- MovementLoopAddLocation(NPC, -146.87, -0.54, 162.50, 2, 0) + -- MovementLoopAddLocation(NPC, -142.60, -0.60, 171.15, 2, 0) + -- MovementLoopAddLocation(NPC, -135.91, -0.56, 174.55, 2, 4) +end diff --git a/server/SpawnScripts/ThievesWay/adiseasedratonga1586533.lua b/server/SpawnScripts/ThievesWay/adiseasedratonga1586533.lua new file mode 100644 index 000000000..f3098cfe9 --- /dev/null +++ b/server/SpawnScripts/ThievesWay/adiseasedratonga1586533.lua @@ -0,0 +1,49 @@ +--[[ + Script Name : SpawnScripts/ThievesWay/adiseasedratonga1586533.lua + Script Purpose : Waypoint Path for adiseasedratonga1586533.lua + Script Author : Rylec + Script Date : 10-06-2019 09:46:08 + Script Notes : Locations collected from Live +--]] + +function spawn(NPC) + waypoints(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) +end + +function respawn(NPC) +end + +function waypoints(NPC) + MovementLoopAddLocation(NPC, -126.41, -0.46, 162.08, 2, math.random(12, 22)) + MovementLoopAddLocation(NPC, -127.96, -0.56, 170.93, 2, 0) + MovementLoopAddLocation(NPC, -133.10, -0.56, 170.93, 2, 0) + MovementLoopAddLocation(NPC, -134.58, -0.56, 172.44, 2, 0) + MovementLoopAddLocation(NPC, -144.55, -0.56, 177.44, 2, 0) + MovementLoopAddLocation(NPC, -148.39, -0.56, 187.84, 2, math.random(12, 22)) + MovementLoopAddLocation(NPC, -142.85, -0.56, 176.42, 2, 0) + MovementLoopAddLocation(NPC, -139.38, -0.56, 173.26, 2, 0) + MovementLoopAddLocation(NPC, -134.58, -0.56, 172.44, 2, 0) + MovementLoopAddLocation(NPC, -133.10, -0.56, 170.93, 2, 0) + MovementLoopAddLocation(NPC, -127.99, -0.56, 170.77, 2, 0) + MovementLoopAddLocation(NPC, -128.14, -0.56, 168.18, 2, math.random(12, 22)) + MovementLoopAddLocation(NPC, -125.45, -0.56, 171.55, 2, 0) + MovementLoopAddLocation(NPC, -128.10, -0.56, 170.93, 2, 0) + MovementLoopAddLocation(NPC, -133.10, -0.56, 170.93, 2, 0) + MovementLoopAddLocation(NPC, -134.58, -0.56, 172.44, 2, 0) + MovementLoopAddLocation(NPC, -141.17, -0.56, 173.69, 2, 0) + MovementLoopAddLocation(NPC, -141.14, -0.56, 173.69, 2, math.random(12, 22)) + MovementLoopAddLocation(NPC, -134.80, -0.56, 174.60, 2, 0) + MovementLoopAddLocation(NPC, -132.77, -0.57, 175.97, 2, 0) + MovementLoopAddLocation(NPC, -128.05, -0.56, 176.10, 2, 0) + MovementLoopAddLocation(NPC, -132.77, -0.57, 175.97, 2, 0) + MovementLoopAddLocation(NPC, -134.80, -0.56, 174.60, 2, 0) + MovementLoopAddLocation(NPC, -141.04, -0.56, 175.46, 2, math.random(12, 22)) + MovementLoopAddLocation(NPC, -134.58, -0.56, 172.44, 2, 0) + MovementLoopAddLocation(NPC, -133.10, -0.56, 170.93, 2, 0) + MovementLoopAddLocation(NPC, -127.94, -0.56, 170.93, 2, 0) +end + diff --git a/server/SpawnScripts/ThievesWay/adiseasedratonga1586534.lua b/server/SpawnScripts/ThievesWay/adiseasedratonga1586534.lua new file mode 100644 index 000000000..95c8521d6 --- /dev/null +++ b/server/SpawnScripts/ThievesWay/adiseasedratonga1586534.lua @@ -0,0 +1,68 @@ +--[[ + Script Name : SpawnScripts/ThievesWay/adiseasedratonga1586534.lua + Script Purpose : Waypoint Path for adiseasedratonga1586534.lua + Script Author : Rylec + Script Date : 10-06-2019 09:46:02 + Script Notes : Locations collected from Live +--]] + +function spawn(NPC) + waypoints(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) +end + +function respawn(NPC) +end + +function waypoints(NPC) + MovementLoopAddLocation(NPC, -132.58, -0.56, 170.64, 2, math.random(12, 22)) + MovementLoopAddLocation(NPC, -138.89, -0.56, 165.92, 2, 0) + MovementLoopAddLocation(NPC, -142.16, -0.56, 165.98, 2, 0) + MovementLoopAddLocation(NPC, -147.02, -0.49, 162.21, 2, math.random(12, 22)) + MovementLoopAddLocation(NPC, -142.80, -0.56, 166.09, 2, 0) + MovementLoopAddLocation(NPC, -142.80, -0.56, 170.97, 2, 0) + MovementLoopAddLocation(NPC, -138.23, -0.56, 173.19, 2, 0) + MovementLoopAddLocation(NPC, -136.29, -0.56, 174.60, 2, math.random(12, 22)) + MovementLoopAddLocation(NPC, -134.58, -0.56, 174.60, 2, 0) + MovementLoopAddLocation(NPC, -132.89, -0.56, 176.08, 2, 0) + MovementLoopAddLocation(NPC, -132.89, -0.56, 180.97, 2, 0) + MovementLoopAddLocation(NPC, -142.80, -0.56, 180.97, 2, 0) + MovementLoopAddLocation(NPC, -145.42, -0.56, 177.94, 2, 0) + MovementLoopAddLocation(NPC, -148.41, -0.56, 176.30, 2, 0) + MovementLoopAddLocation(NPC, -153.24, -0.56, 170.13, 2, 0) + MovementLoopAddLocation(NPC, -155.27, -0.56, 164.88, 2, math.random(12, 22)) + MovementLoopAddLocation(NPC, -153.01, -0.56, 168.32, 2, 0) + MovementLoopAddLocation(NPC, -152.74, -1.57, 171.89, 2, 0) + MovementLoopAddLocation(NPC, -150.52, -0.64, 175.97, 2, 0) + MovementLoopAddLocation(NPC, -148.18, -0.56, 176.29, 2, 0) + MovementLoopAddLocation(NPC, -142.78, -0.56, 180.73, 2, 0) + MovementLoopAddLocation(NPC, -138.19, -0.61, 186.53, 2, 0) + MovementLoopAddLocation(NPC, -135.05, -0.74, 190.72, 2, 0) + MovementLoopAddLocation(NPC, -135.11, -0.74, 190.71, 2, math.random(12, 22)) + MovementLoopAddLocation(NPC, -137.83, -0.69, 188.15, 2, 0) + MovementLoopAddLocation(NPC, -138.58, -0.56, 186.33, 2, 0) + MovementLoopAddLocation(NPC, -143.16, -1.94, 184.02, 2, 0) + MovementLoopAddLocation(NPC, -145.75, -0.56, 179.07, 2, math.random(12, 22)) + MovementLoopAddLocation(NPC, -141.84, -0.56, 174.78, 2, 0) + MovementLoopAddLocation(NPC, -136.18, -0.56, 173.00, 2, 0) + MovementLoopAddLocation(NPC, -134.58, -0.56, 172.44, 2, math.random(12, 22)) + MovementLoopAddLocation(NPC, -132.89, -0.56, 170.97, 2, math.random(12, 22)) + MovementLoopAddLocation(NPC, -134.58, -0.56, 172.44, 2, 0) + MovementLoopAddLocation(NPC, -143.90, -0.58, 176.86, 2, 0) + MovementLoopAddLocation(NPC, -147.41, -0.56, 176.81, 2, 0) + MovementLoopAddLocation(NPC, -148.43, -0.56, 176.08, 2, 0) + MovementLoopAddLocation(NPC, -152.41, -0.56, 176.08, 2, 0) + MovementLoopAddLocation(NPC, -153.91, -0.56, 178.62, 2, 0) + MovementLoopAddLocation(NPC, -153.94, -0.56, 178.61, 2, math.random(12, 22)) + MovementLoopAddLocation(NPC, -153.76, -0.56, 177.78, 2, 0) + MovementLoopAddLocation(NPC, -151.84, -0.64, 176.06, 2, 0) + MovementLoopAddLocation(NPC, -148.35, -0.56, 176.39, 2, 0) + MovementLoopAddLocation(NPC, -147.23, -0.56, 176.96, 2, 0) + MovementLoopAddLocation(NPC, -143.81, -0.58, 176.83, 2, 0) + MovementLoopAddLocation(NPC, -138.45, -0.56, 173.24, 2, 0) + MovementLoopAddLocation(NPC, -134.58, -0.56, 172.44, 2, 0) +end + diff --git a/server/SpawnScripts/ThievesWay/adiseasedratonga1586535.lua b/server/SpawnScripts/ThievesWay/adiseasedratonga1586535.lua new file mode 100644 index 000000000..96e2c0d1f --- /dev/null +++ b/server/SpawnScripts/ThievesWay/adiseasedratonga1586535.lua @@ -0,0 +1,47 @@ +--[[ + Script Name : SpawnScripts/ThievesWay/adiseasedratonga1586535.lua + Script Purpose : Waypoint Path for adiseasedratonga1586535.lua + Script Author : Rylec + Script Date : 10-06-2019 09:45:49 + Script Notes : Locations collected from Live +--]] + +function spawn(NPC) + waypoints(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) +end + +function respawn(NPC) +end + +function waypoints(NPC) + MovementLoopAddLocation(NPC, -136.04, -0.92, 189.42, 2, math.random(12, 22)) + MovementLoopAddLocation(NPC, -138.31, -0.56, 186.03, 2, 0) + MovementLoopAddLocation(NPC, -138.31, -0.61, 176.43, 2, 0) + MovementLoopAddLocation(NPC, -141.79, -0.56, 171.99, 2, math.random(12, 22)) + MovementLoopAddLocation(NPC, -144.15, -0.56, 179.82, 2, 0) + MovementLoopAddLocation(NPC, -143.86, -0.63, 186.48, 2, 0) + MovementLoopAddLocation(NPC, -142.80, -0.56, 191.10, 2, 0) + MovementLoopAddLocation(NPC, -139.80, -0.56, 191.04, 2, math.random(12, 22)) + MovementLoopAddLocation(NPC, -138.31, -0.56, 190.91, 2, 0) + MovementLoopAddLocation(NPC, -138.31, -0.61, 176.43, 2, 0) + MovementLoopAddLocation(NPC, -135.02, -0.56, 172.90, 2, math.random(12, 22)) + MovementLoopAddLocation(NPC, -142.77, -0.61, 176.13, 2, 0) + MovementLoopAddLocation(NPC, -146.93, -0.69, 180.35, 2, 0) + MovementLoopAddLocation(NPC, -153.17, -1.42, 185.39, 2, 0) + MovementLoopAddLocation(NPC, -153.06, -0.56, 189.03, 2, math.random(12, 22)) + MovementLoopAddLocation(NPC, -153.23, -0.64, 186.28, 2, 0) + MovementLoopAddLocation(NPC, -143.08, -0.70, 176.11, 2, 0) + MovementLoopAddLocation(NPC, -140.85, -0.56, 175.09, 2, math.random(12, 22)) + MovementLoopAddLocation(NPC, -134.58, -0.56, 174.60, 2, 0) + MovementLoopAddLocation(NPC, -132.89, -0.56, 176.08, 2, 0) + MovementLoopAddLocation(NPC, -128.36, -0.56, 176.08, 2, 0) + MovementLoopAddLocation(NPC, -126.84, -0.56, 177.85, 2, math.random(12, 22)) + MovementLoopAddLocation(NPC, -127.86, -0.56, 179.96, 2, 0) + MovementLoopAddLocation(NPC, -128.09, -1.77, 182.08, 2, 0) + MovementLoopAddLocation(NPC, -132.70, -0.55, 186.58, 2, 0) +end + diff --git a/server/SpawnScripts/ThievesWay/adiseasedratonga1586547.lua b/server/SpawnScripts/ThievesWay/adiseasedratonga1586547.lua new file mode 100644 index 000000000..33c513967 --- /dev/null +++ b/server/SpawnScripts/ThievesWay/adiseasedratonga1586547.lua @@ -0,0 +1,42 @@ +--[[ + Script Name : SpawnScripts/ThievesWay/adiseasedratonga1586547.lua + Script Purpose : Waypoint Path for adiseasedratonga1586547.lua + Script Author : Rylec + Script Date : 10-06-2019 09:45:56 + Script Notes : Locations collected from Live +--]] + +function spawn(NPC) + waypoints(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) +end + +function respawn(NPC) +end + +function waypoints(NPC) + MovementLoopAddLocation(NPC, -132.43, -0.56, 192.04, 2, math.random(12, 22)) + MovementLoopAddLocation(NPC, -138.31, -0.56, 186.03, 2, 0) + MovementLoopAddLocation(NPC, -142.80, -0.56, 186.03, 2, 0) + MovementLoopAddLocation(NPC, -143.84, -0.56, 179.30, 2, 0) + MovementLoopAddLocation(NPC, -142.80, -0.56, 176.08, 2, 0) + MovementLoopAddLocation(NPC, -138.60, -0.56, 175.80, 2, math.random(12, 22)) + MovementLoopAddLocation(NPC, -138.31, -0.56, 176.08, 2, 0) + MovementLoopAddLocation(NPC, -138.31, -0.56, 187.41, 2, 0) + MovementLoopAddLocation(NPC, -133.11, -0.56, 192.07, 2, math.random(12, 22)) + MovementLoopAddLocation(NPC, -138.49, -0.56, 186.35, 2, 0) + MovementLoopAddLocation(NPC, -142.31, -0.62, 181.02, 2, math.random(12, 22)) + MovementLoopAddLocation(NPC, -138.05, -0.64, 186.99, 2, 0) + MovementLoopAddLocation(NPC, -137.97, -0.56, 191.28, 2, 0) + MovementLoopAddLocation(NPC, -142.78, -0.56, 191.05, 2, 0) + MovementLoopAddLocation(NPC, -145.59, -0.56, 189.09, 2, math.random(12, 22)) + MovementLoopAddLocation(NPC, -142.80, -0.56, 186.03, 2, 0) + MovementLoopAddLocation(NPC, -136.30, -1.54, 186.03, 2, 0) + MovementLoopAddLocation(NPC, -130.63, -0.76, 181.09, 2, math.random(12, 22)) + MovementLoopAddLocation(NPC, -138.31, -0.56, 186.03, 2, 0) + MovementLoopAddLocation(NPC, -142.80, -0.56, 186.03, 2, 0) + MovementLoopAddLocation(NPC, -145.98, -0.56, 192.04, 2, math.random(12, 22)) +end diff --git a/server/SpawnScripts/ThievesWay/adiseasedratonga1586587.lua b/server/SpawnScripts/ThievesWay/adiseasedratonga1586587.lua new file mode 100644 index 000000000..133b94b96 --- /dev/null +++ b/server/SpawnScripts/ThievesWay/adiseasedratonga1586587.lua @@ -0,0 +1,58 @@ +--[[ + Script Name : SpawnScripts/ThievesWay/adiseasedratonga1586587.lua + Script Purpose : Waypoint Path for adiseasedratonga1586587.lua + Script Author : Rylec + Script Date : 10-06-2019 09:45:59 + Script Notes : Locations collected from Live +--]] + +function spawn(NPC) + waypoints(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) +end + +function respawn(NPC) +end + +function waypoints(NPC) + MovementLoopAddLocation(NPC, -132.78, -0.65, 180.84, 2, math.random(12, 22)) + MovementLoopAddLocation(NPC, -128.42, -0.56, 180.97, 2, 0) + MovementLoopAddLocation(NPC, -125.92, -0.56, 175.36, 2, math.random(12, 22)) + MovementLoopAddLocation(NPC, -128.42, -0.56, 176.08, 2, 0) + MovementLoopAddLocation(NPC, -132.89, -0.56, 176.08, 2, 0) + MovementLoopAddLocation(NPC, -134.58, -0.56, 174.60, 2, 0) + MovementLoopAddLocation(NPC, -136.95, -0.56, 174.60, 2, 0) + MovementLoopAddLocation(NPC, -138.31, -0.56, 176.08, 2, 0) + MovementLoopAddLocation(NPC, -138.31, -0.56, 180.97, 2, 0) + MovementLoopAddLocation(NPC, -142.80, -0.56, 180.97, 2, math.random(12, 22)) + MovementLoopAddLocation(NPC, -142.80, -0.56, 166.88, 2, 0) + MovementLoopAddLocation(NPC, -145.32, -0.53, 162.42, 2, 0) + MovementLoopAddLocation(NPC, -147.24, -0.32, 161.40, 2, math.random(12, 22)) + MovementLoopAddLocation(NPC, -145.87, -1.94, 167.76, 2, 0) + MovementLoopAddLocation(NPC, -143.37, -0.74, 180.55, 2, math.random(12, 22)) + MovementLoopAddLocation(NPC, -146.68, -0.56, 177.33, 2, 0) + MovementLoopAddLocation(NPC, -148.04, -1.12, 171.50, 2, 0) + MovementLoopAddLocation(NPC, -147.89, -0.87, 166.42, 2, 0) + MovementLoopAddLocation(NPC, -148.59, -0.68, 165.33, 2, 0) + MovementLoopAddLocation(NPC, -148.56, -0.68, 165.37, 2, math.random(12, 22)) + MovementLoopAddLocation(NPC, -148.12, -0.74, 165.97, 2, 0) + MovementLoopAddLocation(NPC, -147.98, -1.68, 172.58, 2, 0) + MovementLoopAddLocation(NPC, -147.15, -1.81, 174.59, 2, 0) + MovementLoopAddLocation(NPC, -146.96, -0.56, 177.24, 2, 0) + MovementLoopAddLocation(NPC, -143.65, -0.78, 186.93, 2, math.random(12, 22)) + MovementLoopAddLocation(NPC, -148.10, -0.56, 190.96, 2, 0) + MovementLoopAddLocation(NPC, -151.08, -0.56, 191.10, 2, math.random(12, 22)) + MovementLoopAddLocation(NPC, -148.49, -0.56, 191.15, 2, 0) + MovementLoopAddLocation(NPC, -142.80, -0.56, 186.03, 2, 0) + MovementLoopAddLocation(NPC, -138.31, -0.56, 186.03, 2, 0) + MovementLoopAddLocation(NPC, -132.89, -0.56, 176.08, 2, 0) + MovementLoopAddLocation(NPC, -128.42, -0.56, 176.08, 2, 0) + MovementLoopAddLocation(NPC, -128.10, -0.56, 178.06, 2, math.random(12, 22)) + MovementLoopAddLocation(NPC, -128.42, -0.56, 180.97, 2, 0) + MovementLoopAddLocation(NPC, -132.18, -0.91, 181.20, 2, math.random(12, 22)) + MovementLoopAddLocation(NPC, -134.79, -1.64, 183.86, 2, 0) + MovementLoopAddLocation(NPC, -136.39, -0.77, 190.48, 2, math.random(12, 22)) +end diff --git a/server/SpawnScripts/ThievesWay/adiseasedratonga1586594.lua b/server/SpawnScripts/ThievesWay/adiseasedratonga1586594.lua new file mode 100644 index 000000000..b3cff8d1e --- /dev/null +++ b/server/SpawnScripts/ThievesWay/adiseasedratonga1586594.lua @@ -0,0 +1,44 @@ +--[[ + Script Name : SpawnScripts/ThievesWay/adiseasedratonga1586594.lua + Script Purpose : Waypoint Path for adiseasedratonga1586594.lua + Script Author : Rylec + Script Date : 10-06-2019 09:46:40 + Script Notes : Locations collected from Live +--]] + +function spawn(NPC) + waypoints(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) +end + +function respawn(NPC) +end + +function waypoints(NPC) + MovementLoopAddLocation(NPC, -132.43, -0.56, 192.04, 2, math.random(12, 22)) + MovementLoopAddLocation(NPC, -138.31, -0.56, 186.03, 2, 0) + MovementLoopAddLocation(NPC, -142.80, -0.56, 186.03, 2, 0) + MovementLoopAddLocation(NPC, -143.84, -0.56, 179.30, 2, 0) + MovementLoopAddLocation(NPC, -142.80, -0.56, 176.08, 2, 0) + MovementLoopAddLocation(NPC, -138.60, -0.56, 175.80, 2, math.random(12, 22)) + MovementLoopAddLocation(NPC, -138.31, -0.56, 176.08, 2, 0) + MovementLoopAddLocation(NPC, -138.31, -0.56, 187.41, 2, 0) + MovementLoopAddLocation(NPC, -133.11, -0.56, 192.07, 2, math.random(12, 22)) + MovementLoopAddLocation(NPC, -138.49, -0.56, 186.35, 2, 0) + MovementLoopAddLocation(NPC, -142.31, -0.62, 181.02, 2, math.random(12, 22)) + MovementLoopAddLocation(NPC, -138.05, -0.64, 186.99, 2, 0) + MovementLoopAddLocation(NPC, -137.97, -0.56, 191.28, 2, 0) + MovementLoopAddLocation(NPC, -142.78, -0.56, 191.05, 2, 0) + MovementLoopAddLocation(NPC, -145.59, -0.56, 189.09, 2, math.random(12, 22)) + MovementLoopAddLocation(NPC, -142.80, -0.56, 186.03, 2, 0) + MovementLoopAddLocation(NPC, -136.30, -1.54, 186.03, 2, 0) + MovementLoopAddLocation(NPC, -130.63, -0.76, 181.09, 2, math.random(12, 22)) + MovementLoopAddLocation(NPC, -138.31, -0.56, 186.03, 2, 0) + MovementLoopAddLocation(NPC, -142.80, -0.56, 186.03, 2, 0) + MovementLoopAddLocation(NPC, -145.98, -0.56, 192.04, 2, math.random(12, 22)) +end + + diff --git a/server/SpawnScripts/ThievesWay/adiseasedratonga1586595.lua b/server/SpawnScripts/ThievesWay/adiseasedratonga1586595.lua new file mode 100644 index 000000000..28a99d939 --- /dev/null +++ b/server/SpawnScripts/ThievesWay/adiseasedratonga1586595.lua @@ -0,0 +1,47 @@ +--[[ + Script Name : SpawnScripts/ThievesWay/adiseasedratonga1586595.lua + Script Purpose : Waypoint Path for adiseasedratonga1586595.lua + Script Author : Rylec + Script Date : 10-06-2019 09:46:36 + Script Notes : Locations collected from Live +--]] + +function spawn(NPC) + waypoints(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) +end + +function respawn(NPC) +end + +function waypoints(NPC) + MovementLoopAddLocation(NPC, -136.04, -0.92, 189.42, 2, math.random(12, 22)) + MovementLoopAddLocation(NPC, -138.31, -0.56, 186.03, 2, 0) + MovementLoopAddLocation(NPC, -138.31, -0.61, 176.43, 2, 0) + MovementLoopAddLocation(NPC, -141.79, -0.56, 171.99, 2, math.random(12, 22)) + MovementLoopAddLocation(NPC, -144.15, -0.56, 179.82, 2, 0) + MovementLoopAddLocation(NPC, -143.86, -0.63, 186.48, 2, 0) + MovementLoopAddLocation(NPC, -142.80, -0.56, 191.10, 2, 0) + MovementLoopAddLocation(NPC, -139.80, -0.56, 191.04, 2, math.random(12, 22)) + MovementLoopAddLocation(NPC, -138.31, -0.56, 190.91, 2, 0) + MovementLoopAddLocation(NPC, -138.31, -0.61, 176.43, 2, 0) + MovementLoopAddLocation(NPC, -135.02, -0.56, 172.90, 2, math.random(12, 22)) + MovementLoopAddLocation(NPC, -142.77, -0.61, 176.13, 2, 0) + MovementLoopAddLocation(NPC, -146.93, -0.69, 180.35, 2, 0) + MovementLoopAddLocation(NPC, -153.17, -1.42, 185.39, 2, 0) + MovementLoopAddLocation(NPC, -153.06, -0.56, 189.03, 2, math.random(12, 22)) + MovementLoopAddLocation(NPC, -153.23, -0.64, 186.28, 2, 0) + MovementLoopAddLocation(NPC, -143.08, -0.70, 176.11, 2, 0) + MovementLoopAddLocation(NPC, -140.85, -0.56, 175.09, 2, math.random(12, 22)) + MovementLoopAddLocation(NPC, -134.58, -0.56, 174.60, 2, 0) + MovementLoopAddLocation(NPC, -132.89, -0.56, 176.08, 2, 0) + MovementLoopAddLocation(NPC, -128.36, -0.56, 176.08, 2, 0) + MovementLoopAddLocation(NPC, -126.84, -0.56, 177.85, 2, math.random(12, 22)) + MovementLoopAddLocation(NPC, -127.86, -0.56, 179.96, 2, 0) + MovementLoopAddLocation(NPC, -128.09, -1.77, 182.08, 2, 0) + MovementLoopAddLocation(NPC, -132.70, -0.55, 186.58, 2, 0) +end + diff --git a/server/SpawnScripts/ThievesWay/adiseasedratonga1586596.lua b/server/SpawnScripts/ThievesWay/adiseasedratonga1586596.lua new file mode 100644 index 000000000..d348a846f --- /dev/null +++ b/server/SpawnScripts/ThievesWay/adiseasedratonga1586596.lua @@ -0,0 +1,56 @@ +--[[ + Script Name : SpawnScripts/ThievesWay/adiseasedratonga1586596.lua + Script Purpose : Waypoint Path for adiseasedratonga1586596.lua + Script Author : Rylec + Script Date : 10-06-2019 09:46:46 + Script Notes : Locations collected from Live +--]] + +function spawn(NPC) + waypoints(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) +end + +function respawn(NPC) +end + +function waypoints(NPC) + MovementLoopAddLocation(NPC, -147.67, -0.56, 188.26, 2, math.random(12, 22)) + MovementLoopAddLocation(NPC, -147.96, -0.85, 167.19, 2, 0) + MovementLoopAddLocation(NPC, -148.57, -0.56, 166.09, 2, math.random(12, 22)) + MovementLoopAddLocation(NPC, -146.56, -0.79, 163.10, 2, 0) + MovementLoopAddLocation(NPC, -139.79, -0.56, 163.61, 2, math.random(12, 22)) + MovementLoopAddLocation(NPC, -146.53, -0.74, 163.01, 2, 0) + MovementLoopAddLocation(NPC, -149.74, -0.56, 165.59, 2, 0) + MovementLoopAddLocation(NPC, -153.01, -0.56, 166.04, 2, 0) + MovementLoopAddLocation(NPC, -154.25, -0.56, 169.09, 2, math.random(12, 22)) + MovementLoopAddLocation(NPC, -150.73, -0.76, 175.81, 2, 0) + MovementLoopAddLocation(NPC, -148.31, -0.56, 176.30, 2, 0) + MovementLoopAddLocation(NPC, -143.27, -0.70, 180.93, 2, 0) + MovementLoopAddLocation(NPC, -140.56, -0.64, 181.01, 2, 0) + MovementLoopAddLocation(NPC, -136.61, -0.86, 189.83, 2, 0) + MovementLoopAddLocation(NPC, -134.18, -0.70, 190.80, 2, math.random(12, 22)) + MovementLoopAddLocation(NPC, -133.01, -0.57, 186.43, 2, 0) + MovementLoopAddLocation(NPC, -131.49, -0.57, 186.03, 2, math.random(12, 22)) + MovementLoopAddLocation(NPC, -132.89, -0.56, 180.97, 2, 0) + MovementLoopAddLocation(NPC, -132.89, -0.56, 176.08, 2, 0) + MovementLoopAddLocation(NPC, -134.58, -0.56, 174.60, 2, 0) + MovementLoopAddLocation(NPC, -137.47, -0.56, 173.80, 2, math.random(12, 22)) + MovementLoopAddLocation(NPC, -150.39, -0.82, 171.23, 2, math.random(12, 22)) + MovementLoopAddLocation(NPC, -137.02, -0.56, 172.44, 2, 0) + MovementLoopAddLocation(NPC, -134.58, -0.56, 172.44, 2, 0) + MovementLoopAddLocation(NPC, -132.89, -0.56, 170.97, 2, 0) + MovementLoopAddLocation(NPC, -128.42, -0.56, 170.97, 2, 0) + MovementLoopAddLocation(NPC, -127.09, -0.56, 170.23, 2, math.random(12, 22)) + MovementLoopAddLocation(NPC, -128.42, -0.56, 170.97, 2, 0) + MovementLoopAddLocation(NPC, -132.89, -0.56, 170.97, 2, 0) + MovementLoopAddLocation(NPC, -134.58, -0.56, 172.44, 2, 0) + MovementLoopAddLocation(NPC, -134.58, -0.56, 174.60, 2, 0) + MovementLoopAddLocation(NPC, -132.89, -0.56, 176.08, 2, 0) + MovementLoopAddLocation(NPC, -132.89, -0.56, 180.97, 2, 0) + MovementLoopAddLocation(NPC, -133.47, -0.81, 185.84, 2, math.random(12, 22)) + MovementLoopAddLocation(NPC, -145.33, -0.56, 179.57, 2, math.random(12, 22)) +end diff --git a/server/SpawnScripts/ThievesWay/adiseasedratonga1586597.lua b/server/SpawnScripts/ThievesWay/adiseasedratonga1586597.lua new file mode 100644 index 000000000..f1bbb2bd4 --- /dev/null +++ b/server/SpawnScripts/ThievesWay/adiseasedratonga1586597.lua @@ -0,0 +1,43 @@ +--[[ + Script Name : SpawnScripts/ThievesWay/adiseasedratonga1586597.lua + Script Purpose : Waypoint Path for adiseasedratonga1586597.lua + Script Author : Rylec + Script Date : 10-06-2019 09:46:50 + Script Notes : Locations collected from Live +--]] + +function spawn(NPC) + waypoints(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) +end + +function respawn(NPC) +end + +function waypoints(NPC) + MovementLoopAddLocation(NPC, -143.70, -0.56, 192.24, 2, math.random(12, 22)) + MovementLoopAddLocation(NPC, -143.92, -0.56, 177.18, 2, 0) + MovementLoopAddLocation(NPC, -136.88, -0.56, 172.45, 2, math.random(12, 22)) + MovementLoopAddLocation(NPC, -132.89, -0.56, 176.08, 2, 0) + MovementLoopAddLocation(NPC, -128.42, -0.56, 176.08, 2, 0) + MovementLoopAddLocation(NPC, -127.79, -0.56, 178.52, 2, 0) + MovementLoopAddLocation(NPC, -127.70, -0.56, 178.47, 2, math.random(12, 22)) + MovementLoopAddLocation(NPC, -126.51, -0.56, 171.07, 2, math.random(12, 22)) + MovementLoopAddLocation(NPC, -128.42, -0.56, 170.97, 2, 0) + MovementLoopAddLocation(NPC, -132.89, -0.56, 170.97, 2, 0) + MovementLoopAddLocation(NPC, -134.58, -0.56, 172.44, 2, 0) + MovementLoopAddLocation(NPC, -137.21, -0.56, 172.44, 2, 0) + MovementLoopAddLocation(NPC, -138.31, -0.56, 170.97, 2, 0) + MovementLoopAddLocation(NPC, -142.80, -0.56, 170.97, 2, 0) + MovementLoopAddLocation(NPC, -148.74, -0.73, 164.67, 2, math.random(12, 22)) + MovementLoopAddLocation(NPC, -145.91, -1.94, 170.04, 2, 0) + MovementLoopAddLocation(NPC, -138.31, -0.56, 176.08, 2, 0) + MovementLoopAddLocation(NPC, -132.89, -0.56, 186.03, 2, 0) + MovementLoopAddLocation(NPC, -128.99, -0.59, 185.98, 2, math.random(12, 22)) + MovementLoopAddLocation(NPC, -132.70, -0.56, 186.17, 2, 0) + MovementLoopAddLocation(NPC, -140.33, -0.56, 192.04, 2, 0) +end + diff --git a/server/SpawnScripts/ThievesWay/adiseasedratonga1586598.lua b/server/SpawnScripts/ThievesWay/adiseasedratonga1586598.lua new file mode 100644 index 000000000..31fe8c554 --- /dev/null +++ b/server/SpawnScripts/ThievesWay/adiseasedratonga1586598.lua @@ -0,0 +1,39 @@ +--[[ + Script Name : SpawnScripts/ThievesWay/adiseasedratonga1586598.lua + Script Purpose : Waypoint Path for adiseasedratonga1586598.lua + Script Author : Rylec + Script Date : 10-06-2019 09:46:52 + Script Notes : Locations collected from Live +--]] + +function spawn(NPC) + waypoints(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) +end + +function respawn(NPC) +end + +function waypoints(NPC) + MovementLoopAddLocation(NPC, -143.77, -0.56, 191.35, 2, math.random(12, 22)) + MovementLoopAddLocation(NPC, -143.94, -0.68, 180.45, 2, 0) + MovementLoopAddLocation(NPC, -143.03, -0.58, 176.41, 2, 0) + MovementLoopAddLocation(NPC, -135.42, -0.56, 173.69, 2, math.random(12, 22)) + MovementLoopAddLocation(NPC, -142.77, -0.68, 175.98, 2, 0) + MovementLoopAddLocation(NPC, -147.30, -0.67, 180.55, 2, math.random(12, 22)) + MovementLoopAddLocation(NPC, -148.43, -0.56, 187.85, 2, math.random(12, 22)) + MovementLoopAddLocation(NPC, -148.26, -0.90, 171.15, 2, math.random(12, 22)) + MovementLoopAddLocation(NPC, -138.31, -0.56, 170.97, 2, 0) + MovementLoopAddLocation(NPC, -138.31, -0.56, 166.09, 2, 0) + MovementLoopAddLocation(NPC, -135.70, -0.55, 162.53, 2, math.random(12, 22)) + MovementLoopAddLocation(NPC, -141.56, -0.56, 164.14, 2, 0) + MovementLoopAddLocation(NPC, -142.80, -0.56, 166.09, 2, 0) + MovementLoopAddLocation(NPC, -142.80, -0.56, 170.97, 2, 0) + MovementLoopAddLocation(NPC, -138.31, -0.56, 174.60, 2, 0) + MovementLoopAddLocation(NPC, -138.31, -0.56, 180.15, 2, math.random(12, 22)) + MovementLoopAddLocation(NPC, -143.21, -1.00, 185.42, 2, 0) +end + diff --git a/server/SpawnScripts/ThievesWay/adiseasedratonga1586599.lua b/server/SpawnScripts/ThievesWay/adiseasedratonga1586599.lua new file mode 100644 index 000000000..a4f5c9e19 --- /dev/null +++ b/server/SpawnScripts/ThievesWay/adiseasedratonga1586599.lua @@ -0,0 +1,43 @@ +--[[ + Script Name : SpawnScripts/ThievesWay/adiseasedratonga1586599.lua + Script Purpose : Waypoint Path for adiseasedratonga1586599.lua + Script Author : Rylec + Script Date : 10-06-2019 09:46:50 + Script Notes : Locations collected from Live +--]] + +function spawn(NPC) + waypoints(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) +end + +function respawn(NPC) +end + +function waypoints(NPC) + MovementLoopAddLocation(NPC, -143.70, -0.56, 192.24, 2, math.random(12, 22)) + MovementLoopAddLocation(NPC, -143.92, -0.56, 177.18, 2, 0) + MovementLoopAddLocation(NPC, -136.88, -0.56, 172.45, 2, math.random(12, 22)) + MovementLoopAddLocation(NPC, -132.89, -0.56, 176.08, 2, 0) + MovementLoopAddLocation(NPC, -128.42, -0.56, 176.08, 2, 0) + MovementLoopAddLocation(NPC, -127.79, -0.56, 178.52, 2, 0) + MovementLoopAddLocation(NPC, -127.70, -0.56, 178.47, 2, math.random(12, 22)) + MovementLoopAddLocation(NPC, -126.51, -0.56, 171.07, 2, math.random(12, 22)) + MovementLoopAddLocation(NPC, -128.42, -0.56, 170.97, 2, 0) + MovementLoopAddLocation(NPC, -132.89, -0.56, 170.97, 2, 0) + MovementLoopAddLocation(NPC, -134.58, -0.56, 172.44, 2, 0) + MovementLoopAddLocation(NPC, -137.21, -0.56, 172.44, 2, 0) + MovementLoopAddLocation(NPC, -138.31, -0.56, 170.97, 2, 0) + MovementLoopAddLocation(NPC, -142.80, -0.56, 170.97, 2, 0) + MovementLoopAddLocation(NPC, -148.74, -0.73, 164.67, 2, math.random(12, 22)) + MovementLoopAddLocation(NPC, -145.91, -1.94, 170.04, 2, 0) + MovementLoopAddLocation(NPC, -138.31, -0.56, 176.08, 2, 0) + MovementLoopAddLocation(NPC, -132.89, -0.56, 186.03, 2, 0) + MovementLoopAddLocation(NPC, -128.99, -0.59, 185.98, 2, math.random(12, 22)) + MovementLoopAddLocation(NPC, -132.70, -0.56, 186.17, 2, 0) + MovementLoopAddLocation(NPC, -140.33, -0.56, 192.04, 2, 0) +end + diff --git a/server/SpawnScripts/ThievesWay/adiseasedratonga1586600.lua b/server/SpawnScripts/ThievesWay/adiseasedratonga1586600.lua new file mode 100644 index 000000000..cff540e04 --- /dev/null +++ b/server/SpawnScripts/ThievesWay/adiseasedratonga1586600.lua @@ -0,0 +1,56 @@ +--[[ + Script Name : SpawnScripts/ThievesWay/adiseasedratonga1586600.lua + Script Purpose : Waypoint Path for adiseasedratonga1586600.lua + Script Author : Rylec + Script Date : 10-06-2019 09:46:46 + Script Notes : Locations collected from Live +--]] + +function spawn(NPC) + waypoints(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) +end + +function respawn(NPC) +end + +function waypoints(NPC) + MovementLoopAddLocation(NPC, -147.67, -0.56, 188.26, 2, math.random(12, 22)) + MovementLoopAddLocation(NPC, -147.96, -0.85, 167.19, 2, 0) + MovementLoopAddLocation(NPC, -148.57, -0.56, 166.09, 2, math.random(12, 22)) + MovementLoopAddLocation(NPC, -146.56, -0.79, 163.10, 2, 0) + MovementLoopAddLocation(NPC, -139.79, -0.56, 163.61, 2, math.random(12, 22)) + MovementLoopAddLocation(NPC, -146.53, -0.74, 163.01, 2, 0) + MovementLoopAddLocation(NPC, -149.74, -0.56, 165.59, 2, 0) + MovementLoopAddLocation(NPC, -153.01, -0.56, 166.04, 2, 0) + MovementLoopAddLocation(NPC, -154.25, -0.56, 169.09, 2, math.random(12, 22)) + MovementLoopAddLocation(NPC, -150.73, -0.76, 175.81, 2, 0) + MovementLoopAddLocation(NPC, -148.31, -0.56, 176.30, 2, 0) + MovementLoopAddLocation(NPC, -143.27, -0.70, 180.93, 2, 0) + MovementLoopAddLocation(NPC, -140.56, -0.64, 181.01, 2, 0) + MovementLoopAddLocation(NPC, -136.61, -0.86, 189.83, 2, 0) + MovementLoopAddLocation(NPC, -134.18, -0.70, 190.80, 2, math.random(12, 22)) + MovementLoopAddLocation(NPC, -133.01, -0.57, 186.43, 2, 0) + MovementLoopAddLocation(NPC, -131.49, -0.57, 186.03, 2, math.random(12, 22)) + MovementLoopAddLocation(NPC, -132.89, -0.56, 180.97, 2, 0) + MovementLoopAddLocation(NPC, -132.89, -0.56, 176.08, 2, 0) + MovementLoopAddLocation(NPC, -134.58, -0.56, 174.60, 2, 0) + MovementLoopAddLocation(NPC, -137.47, -0.56, 173.80, 2, math.random(12, 22)) + MovementLoopAddLocation(NPC, -150.39, -0.82, 171.23, 2, math.random(12, 22)) + MovementLoopAddLocation(NPC, -137.02, -0.56, 172.44, 2, 0) + MovementLoopAddLocation(NPC, -134.58, -0.56, 172.44, 2, 0) + MovementLoopAddLocation(NPC, -132.89, -0.56, 170.97, 2, 0) + MovementLoopAddLocation(NPC, -128.42, -0.56, 170.97, 2, 0) + MovementLoopAddLocation(NPC, -127.09, -0.56, 170.23, 2, math.random(12, 22)) + MovementLoopAddLocation(NPC, -128.42, -0.56, 170.97, 2, 0) + MovementLoopAddLocation(NPC, -132.89, -0.56, 170.97, 2, 0) + MovementLoopAddLocation(NPC, -134.58, -0.56, 172.44, 2, 0) + MovementLoopAddLocation(NPC, -134.58, -0.56, 174.60, 2, 0) + MovementLoopAddLocation(NPC, -132.89, -0.56, 176.08, 2, 0) + MovementLoopAddLocation(NPC, -132.89, -0.56, 180.97, 2, 0) + MovementLoopAddLocation(NPC, -133.47, -0.81, 185.84, 2, math.random(12, 22)) + MovementLoopAddLocation(NPC, -145.33, -0.56, 179.57, 2, math.random(12, 22)) +end diff --git a/server/SpawnScripts/ThievesWay/adiseasedratonga1586601.lua b/server/SpawnScripts/ThievesWay/adiseasedratonga1586601.lua new file mode 100644 index 000000000..6a90deb18 --- /dev/null +++ b/server/SpawnScripts/ThievesWay/adiseasedratonga1586601.lua @@ -0,0 +1,42 @@ +--[[ + Script Name : SpawnScripts/ThievesWay/adiseasedratonga1586601.lua + Script Purpose : Waypoint Path for adiseasedratonga1586601.lua + Script Author : Rylec + Script Date : 10-06-2019 09:46:58 + Script Notes : Locations collected from Live +--]] + +function spawn(NPC) + waypoints(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) +end + +function respawn(NPC) +end + +function waypoints(NPC) + MovementLoopAddLocation(NPC, -148.41, -0.56, 179.04, 2, math.random(12, 22)) + MovementLoopAddLocation(NPC, -134.58, -0.56, 172.44, 2, 0) + MovementLoopAddLocation(NPC, -132.89, -0.56, 170.97, 2, 0) + MovementLoopAddLocation(NPC, -132.89, -0.56, 166.09, 2, math.random(12, 22)) + MovementLoopAddLocation(NPC, -132.89, -0.56, 170.97, 2, 0) + MovementLoopAddLocation(NPC, -134.58, -0.56, 172.44, 2, 0) + MovementLoopAddLocation(NPC, -134.58, -0.56, 174.60, 2, 0) + MovementLoopAddLocation(NPC, -132.89, -0.56, 176.08, 2, 0) + MovementLoopAddLocation(NPC, -132.89, -0.56, 190.91, 2, 0) + MovementLoopAddLocation(NPC, -128.08, -0.56, 191.93, 2, math.random(12, 22)) + MovementLoopAddLocation(NPC, -126.70, -0.63, 180.05, 2, math.random(12, 22)) + MovementLoopAddLocation(NPC, -128.42, -0.56, 176.08, 2, 0) + MovementLoopAddLocation(NPC, -132.89, -0.56, 176.08, 2, 0) + MovementLoopAddLocation(NPC, -134.58, -0.56, 174.60, 2, 0) + MovementLoopAddLocation(NPC, -140.64, -0.56, 172.48, 2, 0) + MovementLoopAddLocation(NPC, -148.61, -0.56, 166.48, 2, 0) + MovementLoopAddLocation(NPC, -152.03, -0.56, 164.95, 2, math.random(12, 22)) + MovementLoopAddLocation(NPC, -148.43, -0.56, 166.09, 2, 0) + MovementLoopAddLocation(NPC, -148.43, -0.56, 170.97, 2, 0) + MovementLoopAddLocation(NPC, -143.46, -0.80, 180.99, 2, 0) + MovementLoopAddLocation(NPC, -139.45, -0.56, 186.03, 2, math.random(12, 22)) +end diff --git a/server/SpawnScripts/ThievesWay/adiseasedratonga1586602.lua b/server/SpawnScripts/ThievesWay/adiseasedratonga1586602.lua new file mode 100644 index 000000000..7cb7fd299 --- /dev/null +++ b/server/SpawnScripts/ThievesWay/adiseasedratonga1586602.lua @@ -0,0 +1,42 @@ +--[[ + Script Name : SpawnScripts/ThievesWay/adiseasedratonga1586602.lua + Script Purpose : Waypoint Path for adiseasedratonga1586602.lua + Script Author : Rylec + Script Date : 10-06-2019 09:47:03 + Script Notes : Locations collected from Live +--]] + +function spawn(NPC) + waypoints(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) +end + +function respawn(NPC) +end + +function waypoints(NPC) + MovementLoopAddLocation(NPC, -143.31, -0.56, 180.22, 2, math.random(12, 22)) + MovementLoopAddLocation(NPC, -142.80, -0.56, 166.09, 2, 0) + MovementLoopAddLocation(NPC, -141.17, -0.56, 165.99, 2, math.random(12, 22)) + MovementLoopAddLocation(NPC, -138.31, -0.56, 166.09, 2, 0) + MovementLoopAddLocation(NPC, -137.70, -0.61, 171.26, 2, 0) + MovementLoopAddLocation(NPC, -132.91, -0.59, 176.30, 2, 0) + MovementLoopAddLocation(NPC, -133.28, -0.81, 185.61, 2, math.random(12, 22)) + MovementLoopAddLocation(NPC, -141.05, -0.56, 186.03, 2, math.random(12, 22)) + MovementLoopAddLocation(NPC, -143.95, -0.56, 177.76, 2, math.random(12, 22)) + MovementLoopAddLocation(NPC, -142.80, -0.56, 176.08, 2, 0) + MovementLoopAddLocation(NPC, -134.58, -0.56, 172.44, 2, 0) + MovementLoopAddLocation(NPC, -132.89, -0.56, 170.97, 2, 0) + MovementLoopAddLocation(NPC, -130.15, -0.56, 170.97, 2, 0) + MovementLoopAddLocation(NPC, -126.77, -0.56, 173.32, 2, 0) + MovementLoopAddLocation(NPC, -128.42, -0.56, 176.08, 2, 0) + MovementLoopAddLocation(NPC, -132.89, -0.56, 176.08, 2, 0) + MovementLoopAddLocation(NPC, -134.58, -0.56, 174.60, 2, 0) + MovementLoopAddLocation(NPC, -141.58, -0.56, 174.22, 2, 0) + MovementLoopAddLocation(NPC, -147.74, -0.56, 178.55, 2, math.random(12, 22)) +end + + diff --git a/server/SpawnScripts/ThievesWay/adiseasedratonga1586603.lua b/server/SpawnScripts/ThievesWay/adiseasedratonga1586603.lua new file mode 100644 index 000000000..c869a8506 --- /dev/null +++ b/server/SpawnScripts/ThievesWay/adiseasedratonga1586603.lua @@ -0,0 +1,41 @@ +--[[ + Script Name : SpawnScripts/ThievesWay/adiseasedratonga1586603.lua + Script Purpose : Waypoint Path for adiseasedratonga1586603.lua + Script Author : Rylec + Script Date : 10-06-2019 09:47:05 + Script Notes : Locations collected from Live +--]] + +function spawn(NPC) + waypoints(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) +end + +function respawn(NPC) +end + +function waypoints(NPC) + MovementLoopAddLocation(NPC, -147.63, -0.83, 181.04, 2, math.random(12, 22)) + MovementLoopAddLocation(NPC, -142.80, -0.56, 176.08, 2, 0) + MovementLoopAddLocation(NPC, -139.02, -0.56, 175.86, 2, 0) + MovementLoopAddLocation(NPC, -139.04, -0.56, 175.82, 2, math.random(12, 22)) + MovementLoopAddLocation(NPC, -148.77, -0.56, 165.71, 2, 0) + MovementLoopAddLocation(NPC, -152.47, -0.56, 165.78, 2, math.random(12, 22)) + MovementLoopAddLocation(NPC, -148.49, -0.60, 165.87, 2, 0) + MovementLoopAddLocation(NPC, -142.89, -0.92, 171.91, 2, 0) + MovementLoopAddLocation(NPC, -134.58, -0.56, 174.60, 2, 0) + MovementLoopAddLocation(NPC, -132.89, -0.56, 176.08, 2, 0) + MovementLoopAddLocation(NPC, -128.77, -0.64, 175.80, 2, math.random(12, 22)) + MovementLoopAddLocation(NPC, -134.55, -1.16, 176.10, 2, 0) + MovementLoopAddLocation(NPC, -141.56, -0.72, 185.66, 2, 0) + MovementLoopAddLocation(NPC, -145.25, -0.56, 187.06, 2, math.random(12, 22)) + MovementLoopAddLocation(NPC, -143.04, -0.80, 185.67, 2, 0) + MovementLoopAddLocation(NPC, -137.79, -1.94, 181.95, 2, 0) + MovementLoopAddLocation(NPC, -137.78, -0.84, 177.59, 2, 0) + MovementLoopAddLocation(NPC, -134.75, -0.56, 174.03, 2, math.random(12, 22)) + MovementLoopAddLocation(NPC, -141.11, -0.56, 175.31, 2, 0) +end + diff --git a/server/SpawnScripts/ThievesWay/adiseasedratonga1586604.lua b/server/SpawnScripts/ThievesWay/adiseasedratonga1586604.lua new file mode 100644 index 000000000..e3df1cdc0 --- /dev/null +++ b/server/SpawnScripts/ThievesWay/adiseasedratonga1586604.lua @@ -0,0 +1,42 @@ +--[[ + Script Name : SpawnScripts/ThievesWay/adiseasedratonga1586604.lua + Script Purpose : Waypoint Path for adiseasedratonga1586604.lua + Script Author : Rylec + Script Date : 10-06-2019 09:47:03 + Script Notes : Locations collected from Live +--]] + +function spawn(NPC) + waypoints(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) +end + +function respawn(NPC) +end + +function waypoints(NPC) + MovementLoopAddLocation(NPC, -143.31, -0.56, 180.22, 2, math.random(12, 22)) + MovementLoopAddLocation(NPC, -142.80, -0.56, 166.09, 2, 0) + MovementLoopAddLocation(NPC, -141.17, -0.56, 165.99, 2, math.random(12, 22)) + MovementLoopAddLocation(NPC, -138.31, -0.56, 166.09, 2, 0) + MovementLoopAddLocation(NPC, -137.70, -0.61, 171.26, 2, 0) + MovementLoopAddLocation(NPC, -132.91, -0.59, 176.30, 2, 0) + MovementLoopAddLocation(NPC, -133.28, -0.81, 185.61, 2, math.random(12, 22)) + MovementLoopAddLocation(NPC, -141.05, -0.56, 186.03, 2, math.random(12, 22)) + MovementLoopAddLocation(NPC, -143.95, -0.56, 177.76, 2, math.random(12, 22)) + MovementLoopAddLocation(NPC, -142.80, -0.56, 176.08, 2, 0) + MovementLoopAddLocation(NPC, -134.58, -0.56, 172.44, 2, 0) + MovementLoopAddLocation(NPC, -132.89, -0.56, 170.97, 2, 0) + MovementLoopAddLocation(NPC, -130.15, -0.56, 170.97, 2, 0) + MovementLoopAddLocation(NPC, -126.77, -0.56, 173.32, 2, 0) + MovementLoopAddLocation(NPC, -128.42, -0.56, 176.08, 2, 0) + MovementLoopAddLocation(NPC, -132.89, -0.56, 176.08, 2, 0) + MovementLoopAddLocation(NPC, -134.58, -0.56, 174.60, 2, 0) + MovementLoopAddLocation(NPC, -141.58, -0.56, 174.22, 2, 0) + MovementLoopAddLocation(NPC, -147.74, -0.56, 178.55, 2, math.random(12, 22)) +end + + diff --git a/server/SpawnScripts/ThievesWay/adiseasedratonga1586605.lua b/server/SpawnScripts/ThievesWay/adiseasedratonga1586605.lua new file mode 100644 index 000000000..5f81c4ca0 --- /dev/null +++ b/server/SpawnScripts/ThievesWay/adiseasedratonga1586605.lua @@ -0,0 +1,44 @@ +--[[ + Script Name : SpawnScripts/ThievesWay/adiseasedratonga1586605.lua + Script Purpose : Waypoint Path for adiseasedratonga1586605.lua + Script Author : Rylec + Script Date : 10-06-2019 09:46:58 + Script Notes : Locations collected from Live +--]] + +function spawn(NPC) + waypoints(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) +end + +function respawn(NPC) +end + +function waypoints(NPC) + MovementLoopAddLocation(NPC, -148.41, -0.56, 179.04, 2, math.random(12, 22)) + MovementLoopAddLocation(NPC, -134.58, -0.56, 172.44, 2, 0) + MovementLoopAddLocation(NPC, -132.89, -0.56, 170.97, 2, 0) + MovementLoopAddLocation(NPC, -132.89, -0.56, 166.09, 2, math.random(12, 22)) + MovementLoopAddLocation(NPC, -132.89, -0.56, 170.97, 2, 0) + MovementLoopAddLocation(NPC, -134.58, -0.56, 172.44, 2, 0) + MovementLoopAddLocation(NPC, -134.58, -0.56, 174.60, 2, 0) + MovementLoopAddLocation(NPC, -132.89, -0.56, 176.08, 2, 0) + MovementLoopAddLocation(NPC, -132.89, -0.56, 190.91, 2, 0) + MovementLoopAddLocation(NPC, -128.08, -0.56, 191.93, 2, math.random(12, 22)) + MovementLoopAddLocation(NPC, -126.70, -0.63, 180.05, 2, math.random(12, 22)) + MovementLoopAddLocation(NPC, -128.42, -0.56, 176.08, 2, 0) + MovementLoopAddLocation(NPC, -132.89, -0.56, 176.08, 2, 0) + MovementLoopAddLocation(NPC, -134.58, -0.56, 174.60, 2, 0) + MovementLoopAddLocation(NPC, -140.64, -0.56, 172.48, 2, 0) + MovementLoopAddLocation(NPC, -148.61, -0.56, 166.48, 2, 0) + MovementLoopAddLocation(NPC, -152.03, -0.56, 164.95, 2, math.random(12, 22)) + MovementLoopAddLocation(NPC, -148.43, -0.56, 166.09, 2, 0) + MovementLoopAddLocation(NPC, -148.43, -0.56, 170.97, 2, 0) + MovementLoopAddLocation(NPC, -143.46, -0.80, 180.99, 2, 0) + MovementLoopAddLocation(NPC, -139.45, -0.56, 186.03, 2, math.random(12, 22)) +end + + diff --git a/server/SpawnScripts/ThievesWay/adiseasedratonga391865.lua b/server/SpawnScripts/ThievesWay/adiseasedratonga391865.lua new file mode 100644 index 000000000..0a961b343 --- /dev/null +++ b/server/SpawnScripts/ThievesWay/adiseasedratonga391865.lua @@ -0,0 +1,57 @@ +--[[ + Script Name : SpawnScripts/ThievesWay/adiseasedratonga391865.lua + Script Purpose : Waypoint Path for adiseasedratonga391865.lua + Script Author : Rylec + Script Date : 10-17-2019 03:27:16 + Script Notes : Locations collected from Live +--]] + +function spawn(NPC) + waypoints(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) +end + +function respawn(NPC) +end + +function waypoints(NPC) + MovementLoopAddLocation(NPC, -181.57, 0.24, 160.47, 2, math.random(12, 22)) + MovementLoopAddLocation(NPC, -182.14, 0.00, 162.44, 2, 0) + MovementLoopAddLocation(NPC, -184.14, 0.30, 170.58, 2, math.random(12, 22)) + MovementLoopAddLocation(NPC, -182.56, 0.24, 170.44, 2, 0) + MovementLoopAddLocation(NPC, -182.56, 0.24, 170.43, 2, math.random(12, 22)) + MovementLoopAddLocation(NPC, -183.09, 0.00, 166.25, 2, 0) + MovementLoopAddLocation(NPC, -182.58, 0.00, 158.75, 2, math.random(12, 22)) + MovementLoopAddLocation(NPC, -182.06, 0.00, 162.09, 2, 0) + MovementLoopAddLocation(NPC, -179.71, 0.17, 172.33, 2, math.random(12, 22), "changegrid_Going_Up") + MovementLoopAddLocation(NPC, -180.11, 0.17, 169.26, 2, 0, "changegrid_Going_Down") + MovementLoopAddLocation(NPC, -181.43, 0.01, 166.47, 2, 0) + MovementLoopAddLocation(NPC, -181.67, 0.00, 156.26, 2, math.random(12, 22)) + MovementLoopAddLocation(NPC, -181.52, 0.00, 159.01, 2, 0) + MovementLoopAddLocation(NPC, -181.57, 0.24, 160.71, 2, 0) + MovementLoopAddLocation(NPC, -182.00, 0.00, 162.08, 2, 0) + MovementLoopAddLocation(NPC, -182.04, 0.00, 168.03, 2, 0) + MovementLoopAddLocation(NPC, -181.51, 0.00, 169.27, 2, math.random(12, 22)) + MovementLoopAddLocation(NPC, -181.89, 0.00, 168.50, 2, 0) + MovementLoopAddLocation(NPC, -181.52, 0.00, 166.49, 2, 0) + MovementLoopAddLocation(NPC, -181.53, 0.00, 166.48, 2, math.random(12, 22)) + MovementLoopAddLocation(NPC, -181.58, 0.00, 164.54, 2, math.random(12, 22)) + MovementLoopAddLocation(NPC, -181.80, 0.00, 161.79, 2, 0) +end + +-------------------------------------------------------------------------------------- +-- NPC Change Grid +-------------------------------------------------------------------------------------- + +function changegrid_Going_Up(NPC) + SetGridID(NPC, 667331216) +end + +function changegrid_Going_Down(NPC) + SetGridID(NPC, 3049532766) +end + + diff --git a/server/SpawnScripts/ThievesWay/adiseasedratonga391866.lua b/server/SpawnScripts/ThievesWay/adiseasedratonga391866.lua new file mode 100644 index 000000000..1d4cd8c22 --- /dev/null +++ b/server/SpawnScripts/ThievesWay/adiseasedratonga391866.lua @@ -0,0 +1,50 @@ +--[[ + Script Name : SpawnScripts/ThievesWay/adiseasedratonga391866.lua + Script Purpose : Waypoint Path for adiseasedratonga391866.lua + Script Author : Rylec + Script Date : 10-17-2019 03:27:18 + Script Notes : Locations collected from Live +--]] + +function spawn(NPC) + waypoints(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) +end + +function respawn(NPC) +end + +function waypoints(NPC) + MovementLoopAddLocation(NPC, -181.62, 0.00, 172.24, 2, math.random(12, 22), "changegrid_Going_Up") + MovementLoopAddLocation(NPC, -182.56, 0.00, 172.37, 2, math.random(12, 22)) + MovementLoopAddLocation(NPC, -182.81, 0.00, 168.56, 2, 0, "changegrid_Going_Down") + --MovementLoopAddLocation(NPC, -182.55, 0.00, 163.43, 2, math.random(12, 22)) + MovementLoopAddLocation(NPC, -182.76, 0.00, 166.90, 2, math.random(12, 22)) + MovementLoopAddLocation(NPC, -181.14, 0.00, 160.65, 2, math.random(12, 22)) + MovementLoopAddLocation(NPC, -182.58, 0.00, 156.53, 2, math.random(12, 22)) + MovementLoopAddLocation(NPC, -183.65, 0.03, 164.56, 2, math.random(12, 22)) + MovementLoopAddLocation(NPC, -180.79, 0.07, 163.40, 2, math.random(12, 22)) + MovementLoopAddLocation(NPC, -181.88, 0.00, 164.50, 2, 0) + MovementLoopAddLocation(NPC, -183.17, 0.24, 170.63, 2, math.random(12, 22)) + MovementLoopAddLocation(NPC, -182.74, 0.00, 167.47, 2, 0) + MovementLoopAddLocation(NPC, -183.05, 0.24, 160.55, 2, math.random(12, 22)) + MovementLoopAddLocation(NPC, -182.12, 0.00, 163.64, 2, 0) + MovementLoopAddLocation(NPC, -182.07, 0.24, 170.61, 2, 0) +end + +-------------------------------------------------------------------------------------- +-- NPC Change Grid +-------------------------------------------------------------------------------------- + +function changegrid_Going_Up(NPC) + SetGridID(NPC, 667331216) +end + +function changegrid_Going_Down(NPC) + SetGridID(NPC, 3049532766) +end + + diff --git a/server/SpawnScripts/ThievesWay/adiseasedratonga391867.lua b/server/SpawnScripts/ThievesWay/adiseasedratonga391867.lua new file mode 100644 index 000000000..bb0be9bc8 --- /dev/null +++ b/server/SpawnScripts/ThievesWay/adiseasedratonga391867.lua @@ -0,0 +1,52 @@ +--[[ + Script Name : SpawnScripts/ThievesWay/adiseasedratonga391867.lua + Script Purpose : Waypoint Path for adiseasedratonga391867.lua + Script Author : Rylec + Script Date : 09-28-2019 10:46:39 + Script Notes : Locations collected from Live +--]] + +function spawn(NPC) + waypoints(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) +end + +function respawn(NPC) +end + +function waypoints(NPC) + MovementLoopAddLocation(NPC, -182.66, 0.00, 200.62, 2, math.random(12, 22)) + MovementLoopAddLocation(NPC, -181.82, 0.09, 201.88, 2, 0) + MovementLoopAddLocation(NPC, -181.98, 0.00, 206.02, 2, 0) + MovementLoopAddLocation(NPC, -180.46, 0.36, 209.14, 2, 0) + MovementLoopAddLocation(NPC, -179.62, 0.08, 212.02, 2, 0, "changegrid_Going_Up") + MovementLoopAddLocation(NPC, -174.73, 0.00, 216.79, 2, 0) + MovementLoopAddLocation(NPC, -174.68, 0.00, 216.77, 2, math.random(12, 22)) + MovementLoopAddLocation(NPC, -171.79, 0.00, 217.51, 2, math.random(12, 22)) + MovementLoopAddLocation(NPC, -174.79, 0.06, 215.57, 2, 0) + MovementLoopAddLocation(NPC, -180.20, 0.10, 210.66, 2, 0) + MovementLoopAddLocation(NPC, -181.10, 0.04, 207.39, 2, 0, "changegrid_Going_Down") + MovementLoopAddLocation(NPC, -182.44, 0.00, 204.25, 2, math.random(12, 22)) + MovementLoopAddLocation(NPC, -178.71, 0.00, 216.51, 2, 0, "changegrid_Going_Up") + MovementLoopAddLocation(NPC, -178.64, 0.00, 216.51, 2, math.random(12, 22)) + MovementLoopAddLocation(NPC, -182.35, 0.24, 209.32, 2, math.random(12, 22), "changegrid_Going_Down") + MovementLoopAddLocation(NPC, -180.15, 0.07, 211.58, 2, 0, "changegrid_Going_Up") + MovementLoopAddLocation(NPC, -179.63, 0.00, 213.52, 2, math.random(12, 22)) + MovementLoopAddLocation(NPC, -182.14, 0.00, 207.81, 2, 0, "changegrid_Going_Down") +end + +-------------------------------------------------------------------------------------- +-- NPC Change Grid +-------------------------------------------------------------------------------------- + +function changegrid_Going_Up(NPC) + SetGridID(NPC, 3053675711) +end + +function changegrid_Going_Down(NPC) + SetGridID(NPC, 1555937977) +end + diff --git a/server/SpawnScripts/ThievesWay/adiseasedratonga391869.lua b/server/SpawnScripts/ThievesWay/adiseasedratonga391869.lua new file mode 100644 index 000000000..542f5e140 --- /dev/null +++ b/server/SpawnScripts/ThievesWay/adiseasedratonga391869.lua @@ -0,0 +1,46 @@ +--[[ + Script Name : SpawnScripts/ThievesWay/adiseasedratonga391869.lua + Script Purpose : Waypoint Path for adiseasedratonga391869.lua + Script Author : Rylec + Script Date : 10-05-2019 09:22:32 + Script Notes : Locations collected from Live +--]] + +function spawn(NPC) + waypoints(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) +end + +function respawn(NPC) +end + +function waypoints(NPC) + MovementLoopAddLocation(NPC, -183.24, 0.27, 186.08, 2, math.random(12, 22)) + MovementLoopAddLocation(NPC, -182.28, 0.25, 188.99, 2, 0) + MovementLoopAddLocation(NPC, -183.23, 0.00, 195.64, 2, 0) + MovementLoopAddLocation(NPC, -183.25, 0.00, 195.63, 2, math.random(12, 22)) + MovementLoopAddLocation(NPC, -181.84, 0.48, 187.42, 2, math.random(12, 22)) + MovementLoopAddLocation(NPC, -182.75, 0.27, 188.65, 2, math.random(12, 22)) + MovementLoopAddLocation(NPC, -183.04, 0.00, 195.52, 2, math.random(12, 22)) + MovementLoopAddLocation(NPC, -182.31, 0.00, 195.79, 2, 0) + MovementLoopAddLocation(NPC, -182.35, 0.00, 195.73, 2, math.random(12, 22)) + MovementLoopAddLocation(NPC, -182.16, 0.00, 183.17, 2, math.random(12, 22), "changegrid_Going_Down") + MovementLoopAddLocation(NPC, -183.10, 0.00, 196.62, 2, math.random(12, 22), "changegrid_Going_Up") +end + +-------------------------------------------------------------------------------------- +-- NPC Change Grid +-------------------------------------------------------------------------------------- + +function changegrid_Going_Up(NPC) + SetGridID(NPC, 1555937977) +end + +function changegrid_Going_Down(NPC) + SetGridID(NPC, 667331216) +end + + diff --git a/server/SpawnScripts/ThievesWay/adiseasedratonga391870.lua b/server/SpawnScripts/ThievesWay/adiseasedratonga391870.lua new file mode 100644 index 000000000..fc8ae22c2 --- /dev/null +++ b/server/SpawnScripts/ThievesWay/adiseasedratonga391870.lua @@ -0,0 +1,39 @@ +--[[ + Script Name : SpawnScripts/ThievesWay/adiseasedratonga391870.lua + Script Purpose : Waypoint Path for adiseasedratonga391870.lua + Script Author : Rylec + Script Date : 10-17-2019 04:43:12 + Script Notes : Locations collected from Live +--]] + +function spawn(NPC) + waypoints(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) +end + +function respawn(NPC) +end + +function waypoints(NPC) + MovementLoopAddLocation(NPC, -182.32, 0.00, 119.62, 2, math.random(12, 22)) + MovementLoopAddLocation(NPC, -182.80, 0.00, 112.18, 2, math.random(12, 22)) + MovementLoopAddLocation(NPC, -182.10, 0.00, 119.15, 2, 0) + MovementLoopAddLocation(NPC, -182.94, 0.00, 126.29, 2, math.random(12, 22)) + MovementLoopAddLocation(NPC, -182.23, 0.00, 124.97, 2, 0) + MovementLoopAddLocation(NPC, -181.55, 0.00, 119.12, 2, 0) + MovementLoopAddLocation(NPC, -182.87, 0.00, 111.23, 2, math.random(12, 22)) + MovementLoopAddLocation(NPC, -181.45, 0.01, 108.63, 2, math.random(12, 22)) + MovementLoopAddLocation(NPC, -182.23, 0.00, 122.05, 2, math.random(12, 22)) + MovementLoopAddLocation(NPC, -181.73, 0.00, 126.59, 2, math.random(12, 22)) + MovementLoopAddLocation(NPC, -182.64, 0.24, 117.11, 2, 0) + MovementLoopAddLocation(NPC, -182.34, 0.00, 111.92, 2, math.random(12, 22)) + MovementLoopAddLocation(NPC, -181.93, 0.00, 121.43, 2, 0) + MovementLoopAddLocation(NPC, -182.28, 0.00, 123.02, 2, math.random(12, 22)) + MovementLoopAddLocation(NPC, -182.01, 0.00, 120.46, 2, 0) + MovementLoopAddLocation(NPC, -182.55, 0.24, 117.20, 2, math.random(12, 22)) +end + + diff --git a/server/SpawnScripts/ThievesWay/adiseasedratonga391871.lua b/server/SpawnScripts/ThievesWay/adiseasedratonga391871.lua new file mode 100644 index 000000000..ae7ec8632 --- /dev/null +++ b/server/SpawnScripts/ThievesWay/adiseasedratonga391871.lua @@ -0,0 +1,28 @@ +--[[ + Script Name : SpawnScripts/ThievesWay/adiseasedratonga391871.lua + Script Purpose : Waypoint Path for adiseasedratonga391871.lua + Script Author : Rylec + Script Date : 10-17-2019 04:40:45 + Script Notes : Locations collected from Live +--]] + +function spawn(NPC) + waypoints(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) +end + +function respawn(NPC) +end + +function waypoints(NPC) + MovementLoopAddLocation(NPC, -181.37, 0.01, 113.79, 2, math.random(12, 22)) + MovementLoopAddLocation(NPC, -181.83, 0.00, 114.09, 2, 0) + MovementLoopAddLocation(NPC, -182.35, 0.24, 117.18, 2, math.random(12, 22)) + MovementLoopAddLocation(NPC, -183.91, 0.05, 126.53, 2, math.random(12, 22)) + MovementLoopAddLocation(NPC, -182.32, 0.00, 119.51, 2, 0) + MovementLoopAddLocation(NPC, -182.21, 0.24, 116.95, 2, math.random(12, 22)) +end + diff --git a/server/SpawnScripts/ThievesWay/adiseasedratonga391877.lua b/server/SpawnScripts/ThievesWay/adiseasedratonga391877.lua new file mode 100644 index 000000000..52890ee49 --- /dev/null +++ b/server/SpawnScripts/ThievesWay/adiseasedratonga391877.lua @@ -0,0 +1,49 @@ +--[[ + Script Name : SpawnScripts/ThievesWay/adiseasedratonga391877.lua + Script Purpose : Waypoint Path for adiseasedratonga391877.lua + Script Author : Rylec + Script Date : 09-28-2019 10:46:43 + Script Notes : Locations collected from Live +--]] + +function spawn(NPC) + waypoints(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) +end + +function respawn(NPC) +end + +function waypoints(NPC) + MovementLoopAddLocation(NPC, -180.72, 0.08, 207.53, 2, math.random(12, 22), "changegrid_Going_Down") + MovementLoopAddLocation(NPC, -177.97, 0.06, 214.06, 2, 0, "changegrid_Going_Up") + MovementLoopAddLocation(NPC, -170.40, 0.00, 217.80, 2, math.random(12, 22)) + MovementLoopAddLocation(NPC, -169.11, 0.00, 216.51, 2, math.random(12, 22)) + MovementLoopAddLocation(NPC, -175.36, 0.00, 217.77, 2, 0) + MovementLoopAddLocation(NPC, -175.35, 0.00, 217.67, 2, math.random(12, 22)) + MovementLoopAddLocation(NPC, -175.94, 0.00, 216.22, 2, 0) + MovementLoopAddLocation(NPC, -177.37, 0.03, 214.98, 2, math.random(12, 22)) + MovementLoopAddLocation(NPC, -182.42, 0.04, 213.10, 2, 0) + MovementLoopAddLocation(NPC, -182.42, 0.04, 213.07, 2, math.random(12, 22)) + MovementLoopAddLocation(NPC, -183.68, 0.26, 209.30, 2, math.random(12, 22), "changegrid_Going_Down") + MovementLoopAddLocation(NPC, -174.86, 0.00, 217.60, 2, math.random(12, 22), "changegrid_Going_Up") + MovementLoopAddLocation(NPC, -182.54, 0.08, 213.82, 2, math.random(12, 22)) +end + +-------------------------------------------------------------------------------------- +-- NPC Change Grid +-------------------------------------------------------------------------------------- + +function changegrid_Going_Up(NPC) + SetGridID(NPC, 3053675711) +end + +function changegrid_Going_Down(NPC) + SetGridID(NPC, 1555937977) +end + + + diff --git a/server/SpawnScripts/ThievesWay/adiseasedratonga391883.lua b/server/SpawnScripts/ThievesWay/adiseasedratonga391883.lua new file mode 100644 index 000000000..5cc7b0833 --- /dev/null +++ b/server/SpawnScripts/ThievesWay/adiseasedratonga391883.lua @@ -0,0 +1,41 @@ +--[[ + Script Name : SpawnScripts/ThievesWay/adiseasedratonga391883.lua + Script Purpose : Waypoint Path for adiseasedratonga391883.lua + Script Author : Rylec + Script Date : 10-17-2019 03:28:33 + Script Notes : Locations collected from Live +--]] + +function spawn(NPC) + waypoints(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) +end + +function respawn(NPC) +end + +function waypoints(NPC) + MovementLoopAddLocation(NPC, -181.02, 0.00, 133.19, 2, math.random(12, 22)) + MovementLoopAddLocation(NPC, -179.22, 0.00, 134.23, 2, math.random(12, 22)) + MovementLoopAddLocation(NPC, -180.21, 0.00, 135.73, 2, 0) + MovementLoopAddLocation(NPC, -181.00, 0.00, 136.93, 2, math.random(12, 22)) + MovementLoopAddLocation(NPC, -183.66, 0.03, 142.39, 2, 0) + MovementLoopAddLocation(NPC, -184.13, 0.07, 138.23, 2, 0) + MovementLoopAddLocation(NPC, -182.19, 0.00, 134.33, 2, math.random(12, 22)) + MovementLoopAddLocation(NPC, -180.05, 0.00, 141.31, 2, 0) + MovementLoopAddLocation(NPC, -179.02, 0.00, 143.00, 2, 0) + MovementLoopAddLocation(NPC, -177.23, 0.00, 137.52, 2, math.random(12, 22)) + MovementLoopAddLocation(NPC, -178.19, 0.00, 140.26, 2, 0) + MovementLoopAddLocation(NPC, -179.53, 0.00, 142.47, 2, 0) + MovementLoopAddLocation(NPC, -180.87, 0.00, 144.97, 2, math.random(12, 22)) + MovementLoopAddLocation(NPC, -180.59, 0.00, 144.27, 2, 0) + MovementLoopAddLocation(NPC, -179.92, 0.00, 142.19, 2, 0) + MovementLoopAddLocation(NPC, -177.23, 0.00, 138.20, 2, math.random(12, 22)) + MovementLoopAddLocation(NPC, -181.91, 0.00, 137.02, 2, math.random(12, 22)) + MovementLoopAddLocation(NPC, -182.60, 0.00, 132.11, 2, math.random(12, 22)) +end + + diff --git a/server/SpawnScripts/ThievesWay/adiseasedratonga391884.lua b/server/SpawnScripts/ThievesWay/adiseasedratonga391884.lua new file mode 100644 index 000000000..03903dc3d --- /dev/null +++ b/server/SpawnScripts/ThievesWay/adiseasedratonga391884.lua @@ -0,0 +1,36 @@ +--[[ + Script Name : SpawnScripts/ThievesWay/adiseasedratonga391884.lua + Script Purpose : Waypoint Path for adiseasedratonga391884.lua + Script Author : Rylec + Script Date : 09-17-2019 08:04:59 + Script Notes : Locations collected from Live +--]] + +function spawn(NPC) + waypoints(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) +end + +function respawn(NPC) +end + +function waypoints(NPC) + MovementLoopAddLocation(NPC, -176.50, 1.34, 22.65, 2, math.random(12, 22)) + MovementLoopAddLocation(NPC, -178.30, 1.22, 23.50, 2, math.random(12, 22)) + MovementLoopAddLocation(NPC, -181.64, 1.28, 27.68, 2, 0) + MovementLoopAddLocation(NPC, -181.61, 1.28, 27.67, 2, math.random(12, 22)) + MovementLoopAddLocation(NPC, -174.95, 1.22, 26.38, 2, math.random(12, 22)) + MovementLoopAddLocation(NPC, -176.34, 1.22, 28.32, 2, 0) + MovementLoopAddLocation(NPC, -180.49, 1.22, 32.44, 2, 0) + MovementLoopAddLocation(NPC, -180.43, 1.22, 32.62, 2, math.random(12, 22)) + MovementLoopAddLocation(NPC, -177.46, 1.22, 32.61, 2, math.random(12, 22)) + MovementLoopAddLocation(NPC, -178.38, 1.22, 34.49, 2, math.random(12, 22)) + MovementLoopAddLocation(NPC, -178.51, 1.22, 25.60, 2, math.random(12, 22)) + MovementLoopAddLocation(NPC, -180.30, 1.22, 28.29, 2, math.random(12, 22)) + MovementLoopAddLocation(NPC, -176.55, 1.22, 26.57, 2, math.random(12, 22)) + MovementLoopAddLocation(NPC, -178.60, 1.22, 36.18, 2, math.random(12, 22)) +end + diff --git a/server/SpawnScripts/ThievesWay/adiseasedratonga391886.lua b/server/SpawnScripts/ThievesWay/adiseasedratonga391886.lua new file mode 100644 index 000000000..85ca93810 --- /dev/null +++ b/server/SpawnScripts/ThievesWay/adiseasedratonga391886.lua @@ -0,0 +1,37 @@ +--[[ + Script Name : SpawnScripts/ThievesWay/adiseasedratonga391886.lua + Script Purpose : Waypoint Path for adiseasedratonga391886.lua + Script Author : Rylec + Script Date : 10-17-2019 03:28:38 + Script Notes : Locations collected from Live +--]] + +function spawn(NPC) + waypoints(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) +end + +function respawn(NPC) +end + +function waypoints(NPC) + MovementLoopAddLocation(NPC, -182.17, 0.00, 141.20, 2, math.random(12, 22)) + MovementLoopAddLocation(NPC, -179.97, 0.00, 139.98, 2, 0) + MovementLoopAddLocation(NPC, -178.20, 0.00, 136.27, 2, 0) + MovementLoopAddLocation(NPC, -178.09, 0.00, 135.33, 2, math.random(12, 22)) + MovementLoopAddLocation(NPC, -178.18, 0.00, 141.94, 2, 0) + MovementLoopAddLocation(NPC, -178.62, 0.00, 142.81, 2, math.random(12, 22)) + MovementLoopAddLocation(NPC, -182.20, 0.00, 140.38, 2, 0) + MovementLoopAddLocation(NPC, -183.65, 0.03, 134.52, 2, math.random(12, 22)) + MovementLoopAddLocation(NPC, -177.45, 0.05, 135.05, 2, math.random(12, 22)) + MovementLoopAddLocation(NPC, -183.02, 0.00, 139.88, 2, math.random(12, 22)) + MovementLoopAddLocation(NPC, -182.64, 0.00, 143.81, 2, 0) + MovementLoopAddLocation(NPC, -181.40, 0.00, 145.93, 2, math.random(12, 22)) + MovementLoopAddLocation(NPC, -181.80, 0.00, 141.30, 2, math.random(12, 22)) + MovementLoopAddLocation(NPC, -182.51, 0.00, 136.46, 2, 0) + MovementLoopAddLocation(NPC, -180.98, 0.00, 132.18, 2, math.random(12, 22)) +end + diff --git a/server/SpawnScripts/ThievesWay/adiseasedratonga391888.lua b/server/SpawnScripts/ThievesWay/adiseasedratonga391888.lua new file mode 100644 index 000000000..ba637cfd1 --- /dev/null +++ b/server/SpawnScripts/ThievesWay/adiseasedratonga391888.lua @@ -0,0 +1,74 @@ +--[[ + Script Name : SpawnScripts/ThievesWay/adiseasedratonga391888.lua + Script Purpose : Waypoint Path for adiseasedratonga391888.lua + Script Author : Rylec + Script Date : 09-13-2019 05:00:36 + Script Notes : Locations collected from Live +--]] + +function spawn(NPC) + waypoints(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) +end + +function respawn(NPC) +end + +function waypoints(NPC) + MovementLoopAddLocation(NPC, -179.99, 1.22, 14.69, 2, math.random(12, 22)) + -- MovementLoopAddLocation(NPC, -179.98, 1.22, 13.90, 2, math.random(12, 22)) + MovementLoopAddLocation(NPC, -179.06, 1.62, 12.88, 2, 0) + MovementLoopAddLocation(NPC, -179.00, 1.68, 11.73, 2, 0) + MovementLoopAddLocation(NPC, -179.00, 1.62, 9.64, 2, math.random(12, 22)) + MovementLoopAddLocation(NPC, -178.16, 1.93, 7.92, 2, 0, "changegrid_Going_Up") + MovementLoopAddLocation(NPC, -178.01, 1.27, 5.56, 2, 0) + MovementLoopAddLocation(NPC, -175.86, 1.26, 1.91, 2, 0) + -- MovementLoopAddLocation(NPC, -175.03, 1.26, 0.49, 2, 0) + MovementLoopAddLocation(NPC, -175.60, 1.26, 1.86, 2, math.random(12, 22)) + MovementLoopAddLocation(NPC, -176.05, 1.34, 4.23, 2, 0) + MovementLoopAddLocation(NPC, -176.99, 1.41, 5.81, 2, 0, "changegrid_Going_Down") + MovementLoopAddLocation(NPC, -177.27, 2.10, 7.87, 2, 0) + MovementLoopAddLocation(NPC, -179.21, 1.63, 10.06, 2, 0) + MovementLoopAddLocation(NPC, -179.51, 1.73, 11.56, 2, 0) + MovementLoopAddLocation(NPC, -180.15, 1.22, 13.84, 2, math.random(12, 22)) + MovementLoopAddLocation(NPC, -179.80, 1.79, 11.36, 2, 0) + MovementLoopAddLocation(NPC, -178.86, 1.66, 10.29, 2, 0) + MovementLoopAddLocation(NPC, -177.71, 2.01, 7.94, 2, 0, "changegrid_Going_Up") + MovementLoopAddLocation(NPC, -176.67, 1.50, 6.29, 2, 0) + MovementLoopAddLocation(NPC, -174.71, 1.38, 3.23, 2, 0) + MovementLoopAddLocation(NPC, -173.05, 1.75, 2.77, 2, 0) + MovementLoopAddLocation(NPC, -170.91, 1.63, 1.56, 2, math.random(3, 8)) + -- MovementLoopAddLocation(NPC, -169.57, 1.34, 0.71, 2, math.random(8, 15)) + MovementLoopAddLocation(NPC, -171.15, 1.58, 0.54, 2, 0) + MovementLoopAddLocation(NPC, -174.06, 1.26, 1.09, 2, 0) + MovementLoopAddLocation(NPC, -175.47, 1.26, 2.29, 2, 0) + MovementLoopAddLocation(NPC, -176.80, 1.26, 3.58, 2, 0) + MovementLoopAddLocation(NPC, -177.69, 1.32, 6.03, 2, 0, "changegrid_Going_Down") + MovementLoopAddLocation(NPC, -177.94, 1.97, 7.98, 2, 0) + MovementLoopAddLocation(NPC, -179.09, 1.62, 9.58, 2, 0) + MovementLoopAddLocation(NPC, -179.51, 1.82, 11.12, 2, 0) + MovementLoopAddLocation(NPC, -180.04, 1.54, 12.98, 2, math.random(12, 22)) + MovementLoopAddLocation(NPC, -180.05, 1.59, 12.73, 2, 0) + MovementLoopAddLocation(NPC, -179.76, 1.69, 10.39, 2, math.random(12, 22)) + MovementLoopAddLocation(NPC, -179.43, 1.84, 7.79, 2, 0, "changegrid_Going_Up") + MovementLoopAddLocation(NPC, -178.70, 1.26, 5.34, 2, math.random(12, 22)) + MovementLoopAddLocation(NPC, -178.87, 1.42, 6.48, 2, 0, "changegrid_Going_Down") + MovementLoopAddLocation(NPC, -179.45, 1.60, 8.95, 2, 0) + MovementLoopAddLocation(NPC, -179.35, 1.74, 11.54, 2, 0) + MovementLoopAddLocation(NPC, -180.03, 1.22, 14.85, 2, 0) +end + +-------------------------------------------------------------------------------------- +-- NPC Change Grid +-------------------------------------------------------------------------------------- + +function changegrid_Going_Up(NPC) + SetGridID(NPC, 4000206445) +end + +function changegrid_Going_Down(NPC) + SetGridID(NPC, 2981397110) +end \ No newline at end of file diff --git a/server/SpawnScripts/ThievesWay/adiseasedratonga391907.lua b/server/SpawnScripts/ThievesWay/adiseasedratonga391907.lua new file mode 100644 index 000000000..f0b00aeb4 --- /dev/null +++ b/server/SpawnScripts/ThievesWay/adiseasedratonga391907.lua @@ -0,0 +1,48 @@ +--[[ + Script Name : SpawnScripts/ThievesWay/adiseasedratonga391907.lua + Script Purpose : Waypoint Path for adiseasedratonga391907.lua + Script Author : Rylec + Script Date : 09-28-2019 10:46:34 + Script Notes : Locations collected from Live +--]] + +function spawn(NPC) + waypoints(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) +end + +function respawn(NPC) +end + +function waypoints(NPC) + MovementLoopAddLocation(NPC, -172.82, 0.00, 216.65, 2, math.random(12, 22)) + MovementLoopAddLocation(NPC, -175.14, 0.08, 215.32, 2, 0) + MovementLoopAddLocation(NPC, -180.56, 0.35, 209.18, 2, 0, "changegrid_Going_Down") + MovementLoopAddLocation(NPC, -182.56, 0.00, 203.06, 2, math.random(12, 22)) + MovementLoopAddLocation(NPC, -182.41, 0.24, 209.15, 2, 0) + MovementLoopAddLocation(NPC, -181.55, 0.00, 211.88, 2, math.random(12, 22), "changegrid_Going_Up") + MovementLoopAddLocation(NPC, -182.82, 0.24, 209.24, 2, math.random(12, 22), "changegrid_Going_Down") + MovementLoopAddLocation(NPC, -182.16, 0.02, 213.20, 2, math.random(12, 22), "changegrid_Going_Up") + MovementLoopAddLocation(NPC, -181.47, 0.07, 215.05, 2, math.random(12, 22)) + MovementLoopAddLocation(NPC, -180.58, 0.00, 212.93, 2, 0) + MovementLoopAddLocation(NPC, -180.60, 0.00, 212.89, 2, math.random(12, 22)) + MovementLoopAddLocation(NPC, -182.74, 0.00, 201.60, 2, 0, "changegrid_Going_Down") + MovementLoopAddLocation(NPC, -182.75, 0.00, 206.95, 2, math.random(12, 22)) + MovementLoopAddLocation(NPC, -179.15, 0.11, 212.20, 2, 0, "changegrid_Going_Up") +end + +-------------------------------------------------------------------------------------- +-- NPC Change Grid +-------------------------------------------------------------------------------------- + +function changegrid_Going_Up(NPC) + SetGridID(NPC, 3053675711) +end + +function changegrid_Going_Down(NPC) + SetGridID(NPC, 1555937977) +end + diff --git a/server/SpawnScripts/ThievesWay/adiseasedratonga391917.lua b/server/SpawnScripts/ThievesWay/adiseasedratonga391917.lua new file mode 100644 index 000000000..aa1fd9ed4 --- /dev/null +++ b/server/SpawnScripts/ThievesWay/adiseasedratonga391917.lua @@ -0,0 +1,54 @@ +--[[ + Script Name : SpawnScripts/ThievesWay/adiseasedratonga391917.lua + Script Purpose : Waypoint Path for adiseasedratonga391917.lua + Script Author : Rylec + Script Date : 09-22-2019 07:09:01 + Script Notes : Locations collected from Live +--]] + +function spawn(NPC) + waypoints(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) +end + +function respawn(NPC) +end + +function waypoints(NPC) + MovementLoopAddLocation(NPC, -178.06, 1.31, 60.48, 2, math.random(12, 22)) + MovementLoopAddLocation(NPC, -174.97, 1.26, 61.69, 2, 0) + MovementLoopAddLocation(NPC, -171.90, 1.79, 62.13, 2, 0, "changegrid_Going_Up") + MovementLoopAddLocation(NPC, -172.19, 1.79, 62.11, 2, math.random(12, 22)) + MovementLoopAddLocation(NPC, -174.44, 1.25, 61.82, 2, 0, "changegrid_Going_Down") + MovementLoopAddLocation(NPC, -179.22, 1.22, 57.29, 2, math.random(12, 22)) + MovementLoopAddLocation(NPC, -180.05, 1.58, 53.14, 2, 0) + MovementLoopAddLocation(NPC, -180.29, 1.34, 49.67, 2, 0) + MovementLoopAddLocation(NPC, -180.12, 1.27, 57.41, 2, 0) + MovementLoopAddLocation(NPC, -177.67, 1.25, 59.94, 2, 0) + MovementLoopAddLocation(NPC, -176.57, 1.22, 60.13, 2, math.random(12, 22)) + MovementLoopAddLocation(NPC, -178.66, 1.23, 54.58, 2, 0) + MovementLoopAddLocation(NPC, -179.17, 1.34, 51.07, 2, 0) + MovementLoopAddLocation(NPC, -179.88, 1.34, 48.30, 2, 0) + MovementLoopAddLocation(NPC, -179.25, 1.58, 52.19, 2, 0) + MovementLoopAddLocation(NPC, -178.25, 1.29, 54.21, 2, 0) + MovementLoopAddLocation(NPC, -177.83, 1.28, 55.50, 2, 0) + MovementLoopAddLocation(NPC, -175.99, 1.25, 58.07, 2, 0) + MovementLoopAddLocation(NPC, -173.67, 1.47, 59.27, 2, 0) +end + +-------------------------------------------------------------------------------------- +-- NPC Change Grid +-------------------------------------------------------------------------------------- + +function changegrid_Going_Up(NPC) + SetGridID(NPC, 3098524280) +end + +function changegrid_Going_Down(NPC) + SetGridID(NPC, 2981397110) +end + + diff --git a/server/SpawnScripts/ThievesWay/adiseasedratonga391919.lua b/server/SpawnScripts/ThievesWay/adiseasedratonga391919.lua new file mode 100644 index 000000000..6bf86249c --- /dev/null +++ b/server/SpawnScripts/ThievesWay/adiseasedratonga391919.lua @@ -0,0 +1,35 @@ +--[[ + Script Name : SpawnScripts/ThievesWay/adiseasedratonga391919.lua + Script Purpose : Waypoint Path for adiseasedratonga391919.lua + Script Author : Rylec + Script Date : 09-19-2019 08:32:41 + Script Notes : Locations collected from Live +--]] + +function spawn(NPC) + waypoints(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) +end + +function respawn(NPC) +end + +function waypoints(NPC) + MovementLoopAddLocation(NPC, -161.59, 1.22, 60.85, 2, math.random(12, 22)) + MovementLoopAddLocation(NPC, -157.32, 1.34, 61.01, 2, 0) + MovementLoopAddLocation(NPC, -153.41, 1.34, 62.11, 2, math.random(12, 22)) + MovementLoopAddLocation(NPC, -152.74, 1.34, 60.84, 2, 0) + MovementLoopAddLocation(NPC, -152.57, 1.34, 60.93, 2, math.random(12, 22)) + MovementLoopAddLocation(NPC, -152.62, 1.34, 61.95, 2, 0) + MovementLoopAddLocation(NPC, -152.47, 1.34, 61.95, 2, math.random(12, 22)) + MovementLoopAddLocation(NPC, -157.48, 1.34, 61.87, 2, 0) + MovementLoopAddLocation(NPC, -157.59, 1.34, 61.94, 2, math.random(12, 22)) + MovementLoopAddLocation(NPC, -158.82, 1.58, 62.12, 2, 0) + MovementLoopAddLocation(NPC, -161.24, 1.22, 61.50, 2, 0) + MovementLoopAddLocation(NPC, -162.77, 1.22, 60.87, 2, math.random(12, 22)) + MovementLoopAddLocation(NPC, -160.49, 1.22, 60.90, 2, math.random(12, 22)) + MovementLoopAddLocation(NPC, -162.14, 1.22, 61.71, 2, math.random(12, 22)) +end diff --git a/server/SpawnScripts/ThievesWay/adiseasedratonga391921.lua b/server/SpawnScripts/ThievesWay/adiseasedratonga391921.lua new file mode 100644 index 000000000..cc11ef166 --- /dev/null +++ b/server/SpawnScripts/ThievesWay/adiseasedratonga391921.lua @@ -0,0 +1,40 @@ +--[[ + Script Name : SpawnScripts/ThievesWay/adiseasedratonga391921.lua + Script Purpose : Waypoint Path for adiseasedratonga391921.lua + Script Author : Rylec + Script Date : 09-27-2019 05:45:38 + Script Notes : Locations collected from Live +--]] + +function spawn(NPC) + waypoints(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) +end + +function respawn(NPC) +end + +function waypoints(NPC) + MovementLoopAddLocation(NPC, -163.52, 0.00, 217.04, 2, math.random(12, 22)) + MovementLoopAddLocation(NPC, -156.95, 0.02, 218.22, 2, 0) + MovementLoopAddLocation(NPC, -153.28, 0.03, 218.39, 2, math.random(12, 22)) + MovementLoopAddLocation(NPC, -152.07, 0.00, 217.15, 2, math.random(12, 22)) + MovementLoopAddLocation(NPC, -155.76, 0.00, 216.35, 2, 0) + MovementLoopAddLocation(NPC, -158.92, 0.28, 215.71, 2, math.random(12, 22)) + MovementLoopAddLocation(NPC, -156.58, 0.02, 215.90, 2, 0) + MovementLoopAddLocation(NPC, -152.62, 0.00, 217.13, 2, math.random(12, 22)) + MovementLoopAddLocation(NPC, -152.05, 0.00, 217.65, 2, 0) + MovementLoopAddLocation(NPC, -150.79, 0.05, 218.52, 2, math.random(12, 22)) + MovementLoopAddLocation(NPC, -160.59, 0.01, 218.09, 2, 0) + MovementLoopAddLocation(NPC, -163.75, 0.00, 217.04, 2, 0) + MovementLoopAddLocation(NPC, -161.03, 0.00, 216.78, 2, 0) + MovementLoopAddLocation(NPC, -154.83, 0.01, 218.10, 2, 0) + MovementLoopAddLocation(NPC, -154.81, 0.01, 218.09, 2, math.random(12, 22)) + MovementLoopAddLocation(NPC, -158.93, 0.24, 217.23, 2, math.random(12, 22)) + MovementLoopAddLocation(NPC, -151.64, 0.01, 218.08, 2, math.random(12, 22)) + MovementLoopAddLocation(NPC, -160.49, 0.00, 216.63, 2, 0) +end + diff --git a/server/SpawnScripts/ThievesWay/adiseasedratonga393348.lua b/server/SpawnScripts/ThievesWay/adiseasedratonga393348.lua new file mode 100644 index 000000000..1a2d3a3d1 --- /dev/null +++ b/server/SpawnScripts/ThievesWay/adiseasedratonga393348.lua @@ -0,0 +1,49 @@ +--[[ + Script Name : SpawnScripts/ThievesWay/adiseasedratonga393348.lua + Script Purpose : Waypoint Path for adiseasedratonga393348.lua + Script Author : Rylec + Script Date : 10-06-2019 09:45:56 + Script Notes : Locations collected from Live +--]] + +function spawn(NPC) + waypoints(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) +end + +function respawn(NPC) +end + +function waypoints(NPC) + MovementLoopAddLocation(NPC, -148.28, -0.66, 167.61, 2, math.random(12, 22)) + MovementLoopAddLocation(NPC, -138.31, -0.56, 176.08, 2, 0) + MovementLoopAddLocation(NPC, -133.15, -0.80, 187.95, 2, math.random(12, 22)) + MovementLoopAddLocation(NPC, -138.31, -0.56, 180.97, 2, 0) + MovementLoopAddLocation(NPC, -142.80, -0.56, 180.97, 2, 0) + MovementLoopAddLocation(NPC, -145.73, -0.56, 177.83, 2, math.random(12, 22)) + MovementLoopAddLocation(NPC, -146.68, -0.56, 188.64, 2, math.random(12, 22)) + MovementLoopAddLocation(NPC, -143.08, -0.56, 190.74, 2, 0) + MovementLoopAddLocation(NPC, -130.17, -0.56, 192.02, 2, 0) + MovementLoopAddLocation(NPC, -130.26, -0.56, 192.03, 2, math.random(12, 22)) + MovementLoopAddLocation(NPC, -131.43, -0.56, 191.87, 2, 0) + MovementLoopAddLocation(NPC, -134.03, -0.81, 189.38, 2, 0) + MovementLoopAddLocation(NPC, -138.31, -0.56, 174.00, 2, math.random(12, 22)) + MovementLoopAddLocation(NPC, -138.31, -0.56, 180.97, 2, 0) + MovementLoopAddLocation(NPC, -145.12, -0.56, 187.54, 2, math.random(12, 22)) + MovementLoopAddLocation(NPC, -142.70, -0.56, 175.62, 2, 0) + MovementLoopAddLocation(NPC, -134.58, -0.56, 174.60, 2, 0) + MovementLoopAddLocation(NPC, -132.89, -0.56, 176.08, 2, 0) + MovementLoopAddLocation(NPC, -125.83, -0.56, 176.08, 2, math.random(12, 22)) + MovementLoopAddLocation(NPC, -128.00, -1.94, 182.54, 2, 0) + MovementLoopAddLocation(NPC, -132.41, -0.56, 186.09, 2, 0) + MovementLoopAddLocation(NPC, -135.32, -0.56, 192.47, 2, math.random(12, 22)) + MovementLoopAddLocation(NPC, -137.39, -1.87, 184.89, 2, 0) + MovementLoopAddLocation(NPC, -142.61, -0.61, 181.03, 2, 0) + MovementLoopAddLocation(NPC, -148.00, -0.58, 176.21, 2, math.random(12, 22)) + MovementLoopAddLocation(NPC, -146.27, -0.56, 188.07, 2, math.random(12, 22)) + MovementLoopAddLocation(NPC, -145.83, -0.56, 177.85, 2, 0) +end + diff --git a/server/SpawnScripts/ThievesWay/adiseasedratonga393388.lua b/server/SpawnScripts/ThievesWay/adiseasedratonga393388.lua new file mode 100644 index 000000000..382d39818 --- /dev/null +++ b/server/SpawnScripts/ThievesWay/adiseasedratonga393388.lua @@ -0,0 +1,39 @@ +--[[ + Script Name : SpawnScripts/ThievesWay/adiseasedratonga393388.lua + Script Purpose : Waypoint Path for ratonga22b003.lua + Script Author : Rylec + Script Date : 10-06-2019 09:46:13 + Script Notes : Locations collected from Live +--]] + +function spawn(NPC) + waypoints(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) +end + +function respawn(NPC) +end + +function waypoints(NPC) + MovementLoopAddLocation(NPC, -125.46, -0.56, 170.29, 2, math.random(12, 22)) + MovementLoopAddLocation(NPC, -128.42, -0.56, 170.97, 2, 0) + MovementLoopAddLocation(NPC, -132.89, -0.56, 170.97, 2, 0) + MovementLoopAddLocation(NPC, -134.58, -0.56, 172.44, 2, 0) + MovementLoopAddLocation(NPC, -144.06, -0.68, 176.67, 2, 0) + MovementLoopAddLocation(NPC, -147.23, -0.56, 176.91, 2, math.random(12, 22)) + MovementLoopAddLocation(NPC, -142.80, -0.56, 180.97, 2, 0) + MovementLoopAddLocation(NPC, -140.54, -0.56, 180.97, 2, math.random(12, 22)) + MovementLoopAddLocation(NPC, -138.00, -0.56, 187.00, 2, math.random(12, 22)) + MovementLoopAddLocation(NPC, -138.24, -0.56, 175.84, 2, 0) + MovementLoopAddLocation(NPC, -142.80, -0.56, 170.97, 2, 0) + MovementLoopAddLocation(NPC, -142.80, -0.56, 166.90, 2, math.random(12, 22)) + MovementLoopAddLocation(NPC, -142.80, -0.56, 170.97, 2, 0) + MovementLoopAddLocation(NPC, -134.58, -0.56, 174.60, 2, 0) + MovementLoopAddLocation(NPC, -132.89, -0.56, 176.08, 2, 0) + MovementLoopAddLocation(NPC, -132.89, -0.56, 180.97, 2, 0) + MovementLoopAddLocation(NPC, -128.42, -0.56, 180.97, 2, 0) + MovementLoopAddLocation(NPC, -128.26, -0.56, 179.88, 2, math.random(12, 22)) +end \ No newline at end of file diff --git a/server/SpawnScripts/ThievesWay/adiseasedratonga393410.lua b/server/SpawnScripts/ThievesWay/adiseasedratonga393410.lua new file mode 100644 index 000000000..ead50523f --- /dev/null +++ b/server/SpawnScripts/ThievesWay/adiseasedratonga393410.lua @@ -0,0 +1,54 @@ +--[[ + Script Name : SpawnScripts/ThievesWay/adiseasedratonga393410.lua + Script Purpose : Waypoint Path for adiseasedratonga393410.lua + Script Author : Rylec + Script Date : 10-06-2019 09:45:59 + Script Notes : Locations collected from Live +--]] + +function spawn(NPC) + waypoints(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) +end + +function respawn(NPC) +end + +function waypoints(NPC) + MovementLoopAddLocation(NPC, -156.76, -0.51, 174.24, 2, math.random(12, 22)) + MovementLoopAddLocation(NPC, -152.91, -0.56, 176.08, 2, 0) + MovementLoopAddLocation(NPC, -148.43, -0.56, 176.08, 2, 0) + MovementLoopAddLocation(NPC, -146.65, -0.56, 177.49, 2, 0) + MovementLoopAddLocation(NPC, -144.59, -0.56, 177.49, 2, 0) + MovementLoopAddLocation(NPC, -142.80, -0.56, 176.08, 2, 0) + MovementLoopAddLocation(NPC, -137.06, -0.56, 172.68, 2, 0) + MovementLoopAddLocation(NPC, -134.58, -0.56, 172.44, 2, 0) + MovementLoopAddLocation(NPC, -132.89, -0.56, 170.97, 2, 0) + MovementLoopAddLocation(NPC, -128.42, -0.56, 170.97, 2, 0) + MovementLoopAddLocation(NPC, -128.42, -0.56, 166.09, 2, 0) + MovementLoopAddLocation(NPC, -132.03, -0.56, 165.16, 2, 0) + MovementLoopAddLocation(NPC, -139.29, -0.55, 162.54, 2, 0) + MovementLoopAddLocation(NPC, -141.25, -0.56, 164.13, 2, math.random(12, 22)) + MovementLoopAddLocation(NPC, -148.43, -0.56, 170.97, 2, 0) + MovementLoopAddLocation(NPC, -152.91, -0.56, 170.97, 2, 0) + MovementLoopAddLocation(NPC, -153.90, -0.56, 166.48, 2, math.random(12, 22)) + MovementLoopAddLocation(NPC, -152.91, -0.56, 170.97, 2, 0) + MovementLoopAddLocation(NPC, -148.92, -0.83, 171.28, 2, math.random(12, 22)) + MovementLoopAddLocation(NPC, -134.58, -0.56, 174.60, 2, 0) + MovementLoopAddLocation(NPC, -132.89, -0.56, 176.08, 2, 0) + MovementLoopAddLocation(NPC, -133.39, -0.94, 181.26, 2, math.random(12, 22)) + MovementLoopAddLocation(NPC, -132.89, -0.56, 176.08, 2, 0) + MovementLoopAddLocation(NPC, -134.58, -0.56, 174.60, 2, 0) + MovementLoopAddLocation(NPC, -142.80, -0.56, 170.97, 2, 0) + MovementLoopAddLocation(NPC, -142.80, -0.56, 166.09, 2, 0) + MovementLoopAddLocation(NPC, -139.67, -0.56, 165.52, 2, math.random(12, 22)) + MovementLoopAddLocation(NPC, -138.31, -0.56, 166.09, 2, 0) + MovementLoopAddLocation(NPC, -138.31, -0.56, 170.97, 2, 0) + MovementLoopAddLocation(NPC, -141.09, -0.56, 173.35, 2, math.random(12, 22)) + MovementLoopAddLocation(NPC, -148.43, -0.56, 170.97, 2, 0) + MovementLoopAddLocation(NPC, -152.91, -0.56, 170.97, 2, 0) +end + diff --git a/server/SpawnScripts/ThievesWay/adiseasedratonga393468.lua b/server/SpawnScripts/ThievesWay/adiseasedratonga393468.lua new file mode 100644 index 000000000..112888ed3 --- /dev/null +++ b/server/SpawnScripts/ThievesWay/adiseasedratonga393468.lua @@ -0,0 +1,54 @@ +--[[ + Script Name : SpawnScripts/ThievesWay/adiseasedratonga393468.lua + Script Purpose : Waypoint Path for adiseasedratonga393468.lua + Script Author : Rylec + Script Date : 10-06-2019 09:45:49 + Script Notes : Locations collected from Live +--]] + +function spawn(NPC) + waypoints(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) +end + +function respawn(NPC) +end + +function waypoints(NPC) + MovementLoopAddLocation(NPC, -150.22, -0.56, 164.83, 2, math.random(12, 22)) + MovementLoopAddLocation(NPC, -152.91, -0.56, 166.09, 2, 0) + MovementLoopAddLocation(NPC, -152.91, -0.56, 170.97, 2, 0) + MovementLoopAddLocation(NPC, -145.88, -1.94, 170.97, 2, 0) + MovementLoopAddLocation(NPC, -134.58, -0.56, 174.60, 2, 0) + MovementLoopAddLocation(NPC, -132.89, -0.56, 176.08, 2, 0) + MovementLoopAddLocation(NPC, -133.07, -1.68, 182.28, 2, 0) + MovementLoopAddLocation(NPC, -133.77, -1.69, 184.01, 2, 0) + MovementLoopAddLocation(NPC, -134.11, -0.83, 188.09, 2, 0) + MovementLoopAddLocation(NPC, -138.33, -0.56, 190.75, 2, math.random(12, 22)) + MovementLoopAddLocation(NPC, -138.31, -0.56, 186.03, 2, 0) + MovementLoopAddLocation(NPC, -138.31, -0.56, 176.08, 2, 0) + MovementLoopAddLocation(NPC, -134.58, -0.56, 172.44, 2, 0) + MovementLoopAddLocation(NPC, -132.89, -0.56, 170.97, 2, 0) + MovementLoopAddLocation(NPC, -132.89, -0.56, 166.09, 2, 0) + MovementLoopAddLocation(NPC, -131.95, -0.56, 165.03, 2, math.random(12, 22)) + MovementLoopAddLocation(NPC, -132.89, -0.56, 166.09, 2, 0) + MovementLoopAddLocation(NPC, -132.89, -0.56, 170.97, 2, 0) + MovementLoopAddLocation(NPC, -134.58, -0.56, 172.44, 2, 0) + MovementLoopAddLocation(NPC, -135.34, -0.56, 174.04, 2, math.random(12, 22)) + MovementLoopAddLocation(NPC, -134.58, -0.56, 174.60, 2, 0) + MovementLoopAddLocation(NPC, -132.89, -0.56, 176.08, 2, 0) + MovementLoopAddLocation(NPC, -132.89, -0.56, 180.97, 2, 0) + MovementLoopAddLocation(NPC, -128.53, -0.56, 186.28, 2, 0) + MovementLoopAddLocation(NPC, -128.21, -0.56, 190.41, 2, math.random(12, 22)) + MovementLoopAddLocation(NPC, -128.53, -0.56, 186.28, 2, 0) + MovementLoopAddLocation(NPC, -132.89, -0.56, 180.97, 2, 0) + MovementLoopAddLocation(NPC, -132.89, -0.56, 176.08, 2, 0) + MovementLoopAddLocation(NPC, -136.79, -0.56, 173.52, 2, 0) + MovementLoopAddLocation(NPC, -142.38, -0.56, 171.05, 2, 0) + MovementLoopAddLocation(NPC, -145.78, -1.94, 170.58, 2, 0) + MovementLoopAddLocation(NPC, -147.48, -1.20, 165.81, 2, 0) + MovementLoopAddLocation(NPC, -148.47, -0.82, 165.05, 2, 0) +end diff --git a/server/SpawnScripts/ThievesWay/adiseasedratonga393692.lua b/server/SpawnScripts/ThievesWay/adiseasedratonga393692.lua new file mode 100644 index 000000000..1c142341f --- /dev/null +++ b/server/SpawnScripts/ThievesWay/adiseasedratonga393692.lua @@ -0,0 +1,49 @@ +--[[ + Script Name : SpawnScripts/ThievesWay/adiseasedratonga393692.lua + Script Purpose : Waypoint Path for adiseasedratonga393692.lua + Script Author : Rylec + Script Date : 10-06-2019 09:46:08 + Script Notes : Locations collected from Live +--]] + +function spawn(NPC) + waypoints(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) +end + +function respawn(NPC) +end + +function waypoints(NPC) + MovementLoopAddLocation(NPC, -126.41, -0.46, 162.08, 2, math.random(12, 22)) + MovementLoopAddLocation(NPC, -127.96, -0.56, 170.93, 2, 0) + MovementLoopAddLocation(NPC, -133.10, -0.56, 170.93, 2, 0) + MovementLoopAddLocation(NPC, -134.58, -0.56, 172.44, 2, 0) + MovementLoopAddLocation(NPC, -144.55, -0.56, 177.44, 2, 0) + MovementLoopAddLocation(NPC, -148.39, -0.56, 187.84, 2, math.random(12, 22)) + MovementLoopAddLocation(NPC, -142.85, -0.56, 176.42, 2, 0) + MovementLoopAddLocation(NPC, -139.38, -0.56, 173.26, 2, 0) + MovementLoopAddLocation(NPC, -134.58, -0.56, 172.44, 2, 0) + MovementLoopAddLocation(NPC, -133.10, -0.56, 170.93, 2, 0) + MovementLoopAddLocation(NPC, -127.99, -0.56, 170.77, 2, 0) + MovementLoopAddLocation(NPC, -128.14, -0.56, 168.18, 2, math.random(12, 22)) + MovementLoopAddLocation(NPC, -125.45, -0.56, 171.55, 2, 0) + MovementLoopAddLocation(NPC, -128.10, -0.56, 170.93, 2, 0) + MovementLoopAddLocation(NPC, -133.10, -0.56, 170.93, 2, 0) + MovementLoopAddLocation(NPC, -134.58, -0.56, 172.44, 2, 0) + MovementLoopAddLocation(NPC, -141.17, -0.56, 173.69, 2, 0) + MovementLoopAddLocation(NPC, -141.14, -0.56, 173.69, 2, math.random(12, 22)) + MovementLoopAddLocation(NPC, -134.80, -0.56, 174.60, 2, 0) + MovementLoopAddLocation(NPC, -132.77, -0.57, 175.97, 2, 0) + MovementLoopAddLocation(NPC, -128.05, -0.56, 176.10, 2, 0) + MovementLoopAddLocation(NPC, -132.77, -0.57, 175.97, 2, 0) + MovementLoopAddLocation(NPC, -134.80, -0.56, 174.60, 2, 0) + MovementLoopAddLocation(NPC, -141.04, -0.56, 175.46, 2, math.random(12, 22)) + MovementLoopAddLocation(NPC, -134.58, -0.56, 172.44, 2, 0) + MovementLoopAddLocation(NPC, -133.10, -0.56, 170.93, 2, 0) + MovementLoopAddLocation(NPC, -127.94, -0.56, 170.93, 2, 0) +end + diff --git a/server/SpawnScripts/ThievesWay/adiseasedratonga393712.lua b/server/SpawnScripts/ThievesWay/adiseasedratonga393712.lua new file mode 100644 index 000000000..d6b1606fa --- /dev/null +++ b/server/SpawnScripts/ThievesWay/adiseasedratonga393712.lua @@ -0,0 +1,49 @@ +--[[ + Script Name : SpawnScripts/ThievesWay/adiseasedratonga393712.lua + Script Purpose : Waypoint Path for adiseasedratonga393712.lua + Script Author : Rylec + Script Date : 10-06-2019 09:45:56 + Script Notes : Locations collected from Live +--]] + +function spawn(NPC) + waypoints(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) +end + +function respawn(NPC) +end + +function waypoints(NPC) + MovementLoopAddLocation(NPC, -148.28, -0.66, 167.61, 2, math.random(12, 22)) + MovementLoopAddLocation(NPC, -138.31, -0.56, 176.08, 2, 0) + MovementLoopAddLocation(NPC, -133.15, -0.80, 187.95, 2, math.random(12, 22)) + MovementLoopAddLocation(NPC, -138.31, -0.56, 180.97, 2, 0) + MovementLoopAddLocation(NPC, -142.80, -0.56, 180.97, 2, 0) + MovementLoopAddLocation(NPC, -145.73, -0.56, 177.83, 2, math.random(12, 22)) + MovementLoopAddLocation(NPC, -146.68, -0.56, 188.64, 2, math.random(12, 22)) + MovementLoopAddLocation(NPC, -143.08, -0.56, 190.74, 2, 0) + MovementLoopAddLocation(NPC, -130.17, -0.56, 192.02, 2, 0) + MovementLoopAddLocation(NPC, -130.26, -0.56, 192.03, 2, math.random(12, 22)) + MovementLoopAddLocation(NPC, -131.43, -0.56, 191.87, 2, 0) + MovementLoopAddLocation(NPC, -134.03, -0.81, 189.38, 2, 0) + MovementLoopAddLocation(NPC, -138.31, -0.56, 174.00, 2, math.random(12, 22)) + MovementLoopAddLocation(NPC, -138.31, -0.56, 180.97, 2, 0) + MovementLoopAddLocation(NPC, -145.12, -0.56, 187.54, 2, math.random(12, 22)) + MovementLoopAddLocation(NPC, -142.70, -0.56, 175.62, 2, 0) + MovementLoopAddLocation(NPC, -134.58, -0.56, 174.60, 2, 0) + MovementLoopAddLocation(NPC, -132.89, -0.56, 176.08, 2, 0) + MovementLoopAddLocation(NPC, -125.83, -0.56, 176.08, 2, math.random(12, 22)) + MovementLoopAddLocation(NPC, -128.00, -1.94, 182.54, 2, 0) + MovementLoopAddLocation(NPC, -132.41, -0.56, 186.09, 2, 0) + MovementLoopAddLocation(NPC, -135.32, -0.56, 192.47, 2, math.random(12, 22)) + MovementLoopAddLocation(NPC, -137.39, -1.87, 184.89, 2, 0) + MovementLoopAddLocation(NPC, -142.61, -0.61, 181.03, 2, 0) + MovementLoopAddLocation(NPC, -148.00, -0.58, 176.21, 2, math.random(12, 22)) + MovementLoopAddLocation(NPC, -146.27, -0.56, 188.07, 2, math.random(12, 22)) + MovementLoopAddLocation(NPC, -145.83, -0.56, 177.85, 2, 0) +end + diff --git a/server/SpawnScripts/ThievesWay/asewagerat392400.lua b/server/SpawnScripts/ThievesWay/asewagerat392400.lua new file mode 100644 index 000000000..ee3f3d666 --- /dev/null +++ b/server/SpawnScripts/ThievesWay/asewagerat392400.lua @@ -0,0 +1,37 @@ +--[[ + Script Name : SpawnScripts/ThievesWay/asewagerat392400.lua + Script Purpose : Waypoint Path for asewagerat392400.lua + Script Author : Rylec + Script Date : 09-15-2019 03:41:39 + Script Notes : Locations collected from Live +--]] + +function spawn(NPC) + waypoints(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) +end + +function respawn(NPC) +end + +function waypoints(NPC) + MovementLoopAddLocation(NPC, -180.32, 1.22, 32.62, 2, math.random(10, 18)) + MovementLoopAddLocation(NPC, -180.94, 1.98, 32.26, 2, math.random(10, 18)) + -- MovementLoopAddLocation(NPC, -179.36, 1.22, 31.38, 2, 0) + MovementLoopAddLocation(NPC, -179.36, 1.22, 30.56, 2, 0) + MovementLoopAddLocation(NPC, -179.32, 1.22, 30.52, 2, math.random(10, 18)) + -- MovementLoopAddLocation(NPC, -177.28, 1.22, 23.57, 2, 0) + MovementLoopAddLocation(NPC, -177.34, 1.22, 23.59, 2, math.random(10, 18)) + -- MovementLoopAddLocation(NPC, -178.65, 1.22, 23.50, 2, 0) + MovementLoopAddLocation(NPC, -178.60, 1.22, 23.51, 2, math.random(10, 18)) + MovementLoopAddLocation(NPC, -175.90, 1.28, 23.85, 2, math.random(10, 18)) + -- MovementLoopAddLocation(NPC, -176.45, 1.22, 24.38, 2, 0) + MovementLoopAddLocation(NPC, -176.50, 1.22, 24.41, 2, math.random(10, 18)) + MovementLoopAddLocation(NPC, -180.10, 1.22, 27.90, 2, math.random(10, 18)) + MovementLoopAddLocation(NPC, -181.27, 1.25, 28.42, 2, 0) + MovementLoopAddLocation(NPC, -181.24, 1.25, 28.48, 2, math.random(10, 18)) + MovementLoopAddLocation(NPC, -181.03, 1.23, 30.76, 2, math.random(10, 18)) +end diff --git a/server/SpawnScripts/ThievesWay/asewagerat392403.lua b/server/SpawnScripts/ThievesWay/asewagerat392403.lua new file mode 100644 index 000000000..0a29a6929 --- /dev/null +++ b/server/SpawnScripts/ThievesWay/asewagerat392403.lua @@ -0,0 +1,54 @@ +--[[ + Script Name : SpawnScripts/ThievesWay/asewagerat392403.lua + Script Purpose : Waypoint Path for asewagerat392403.lua + Script Author : Rylec + Script Date : 09-28-2019 10:46:51 + Script Notes : Locations collected from Live +--]] + +function spawn(NPC) + waypoints(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) +end + +function respawn(NPC) +end + +function waypoints(NPC) + MovementLoopAddLocation(NPC, -179.49, 0.01, 213.19, 2, math.random(10, 18)) + MovementLoopAddLocation(NPC, -180.01, 0.06, 212.02, 2, 0) + MovementLoopAddLocation(NPC, -180.99, 0.05, 206.99, 2, 0, "changegrid_Going_Down") + MovementLoopAddLocation(NPC, -181.02, 0.31, 204.27, 2, math.random(10, 18)) + MovementLoopAddLocation(NPC, -182.05, 0.00, 205.20, 2, 0) + MovementLoopAddLocation(NPC, -180.00, 0.11, 210.98, 2, 0, "changegrid_Going_Up") + MovementLoopAddLocation(NPC, -177.09, 0.10, 214.31, 2, 0) + MovementLoopAddLocation(NPC, -175.48, 0.00, 216.74, 2, 0) + MovementLoopAddLocation(NPC, -173.02, 0.00, 217.75, 2, 0) + MovementLoopAddLocation(NPC, -172.98, 0.00, 217.70, 2, math.random(10, 18)) + MovementLoopAddLocation(NPC, -173.52, 0.02, 216.00, 2, math.random(10, 18)) + MovementLoopAddLocation(NPC, -178.51, 0.04, 213.70, 2, 0) + MovementLoopAddLocation(NPC, -180.14, 0.06, 211.77, 2, 0) + MovementLoopAddLocation(NPC, -182.66, 0.00, 210.66, 2, 0) + MovementLoopAddLocation(NPC, -182.65, 0.00, 210.67, 2, math.random(10, 18)) + MovementLoopAddLocation(NPC, -178.83, 0.00, 215.60, 2, math.random(10, 18)) + MovementLoopAddLocation(NPC, -180.01, 0.13, 210.82, 2, 0) + MovementLoopAddLocation(NPC, -182.26, 0.00, 205.61, 2, 0, "changegrid_Going_Down") + MovementLoopAddLocation(NPC, -182.57, 0.00, 201.86, 2, 0) + MovementLoopAddLocation(NPC, -182.49, 0.00, 206.12, 2, 0) + MovementLoopAddLocation(NPC, -178.67, 0.00, 214.67, 2, math.random(10, 18), "changegrid_Going_Up") +end + +-------------------------------------------------------------------------------------- +-- NPC Change Grid +-------------------------------------------------------------------------------------- + +function changegrid_Going_Up(NPC) + SetGridID(NPC, 3053675711) +end + +function changegrid_Going_Down(NPC) + SetGridID(NPC, 1555937977) +end diff --git a/server/SpawnScripts/ThievesWay/asewagerat392404.lua b/server/SpawnScripts/ThievesWay/asewagerat392404.lua new file mode 100644 index 000000000..32b34ad04 --- /dev/null +++ b/server/SpawnScripts/ThievesWay/asewagerat392404.lua @@ -0,0 +1,60 @@ +--[[ + Script Name : SpawnScripts/ThievesWay/asewagerat392404.lua + Script Purpose : Waypoint Path for asewagerat392404.lua + Script Author : Rylec + Script Date : 09-28-2019 10:46:59 + Script Notes : Locations collected from Live +--]] + +function spawn(NPC) + waypoints(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) +end + +function respawn(NPC) +end + +function waypoints(NPC) + MovementLoopAddLocation(NPC, -181.54, 0.24, 209.21, 2, math.random(10, 18), "changegrid_Going_Down") + MovementLoopAddLocation(NPC, -182.04, 0.01, 213.34, 2, 0, "changegrid_Going_Up") + MovementLoopAddLocation(NPC, -181.56, 0.05, 214.68, 2, math.random(10, 18)) + MovementLoopAddLocation(NPC, -178.30, 0.09, 217.65, 2, 0) + MovementLoopAddLocation(NPC, -175.81, 0.00, 217.68, 2, math.random(10, 18)) + MovementLoopAddLocation(NPC, -170.88, 0.00, 217.22, 2, 0) + MovementLoopAddLocation(NPC, -169.17, 0.00, 216.16, 2, math.random(10, 18)) + MovementLoopAddLocation(NPC, -170.51, 0.00, 216.84, 2, math.random(10, 18)) + MovementLoopAddLocation(NPC, -177.36, 0.00, 216.71, 2, 0) + MovementLoopAddLocation(NPC, -179.58, 0.00, 215.82, 2, math.random(10, 18)) + MovementLoopAddLocation(NPC, -179.66, 0.00, 213.80, 2, 0) + MovementLoopAddLocation(NPC, -181.72, 0.24, 209.49, 2, 0, "changegrid_Going_Down") + MovementLoopAddLocation(NPC, -181.47, 0.00, 207.04, 2, 0) + MovementLoopAddLocation(NPC, -181.50, 0.00, 207.00, 2, math.random(10, 18)) + MovementLoopAddLocation(NPC, -181.96, 0.00, 206.03, 2, 0) + MovementLoopAddLocation(NPC, -183.05, 0.00, 202.19, 2, math.random(10, 18)) + MovementLoopAddLocation(NPC, -182.68, 0.00, 205.07, 2, 0) + MovementLoopAddLocation(NPC, -180.25, 0.15, 208.05, 2, 0) + MovementLoopAddLocation(NPC, -180.53, 0.01, 211.98, 2, 0, "changegrid_Going_Up") + MovementLoopAddLocation(NPC, -178.87, 0.00, 214.17, 2, 0) + MovementLoopAddLocation(NPC, -175.89, 0.08, 215.14, 2, 0) + MovementLoopAddLocation(NPC, -174.73, 0.00, 216.27, 2, 0) + MovementLoopAddLocation(NPC, -173.57, 0.00, 216.15, 2, math.random(10, 18)) + MovementLoopAddLocation(NPC, -176.67, 0.02, 215.36, 2, 0) + MovementLoopAddLocation(NPC, -177.67, 0.06, 214.36, 2, 0) + MovementLoopAddLocation(NPC, -178.35, 0.26, 211.89, 2, math.random(10, 18)) +end + +-------------------------------------------------------------------------------------- +-- NPC Change Grid +-------------------------------------------------------------------------------------- + +function changegrid_Going_Up(NPC) + SetGridID(NPC, 3053675711) +end + +function changegrid_Going_Down(NPC) + SetGridID(NPC, 1555937977) +end + diff --git a/server/SpawnScripts/ThievesWay/asewagerat392405.lua b/server/SpawnScripts/ThievesWay/asewagerat392405.lua new file mode 100644 index 000000000..455654f64 --- /dev/null +++ b/server/SpawnScripts/ThievesWay/asewagerat392405.lua @@ -0,0 +1,52 @@ +--[[ + Script Name : SpawnScripts/ThievesWay/asewagerat392405.lua + Script Purpose : Waypoint Path for asewagerat392405.lua + Script Author : Rylec + Script Date : 10-05-2019 08:24:42 + Script Notes : Locations collected from Live +--]] + +function spawn(NPC) + waypoints(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) +end + +function respawn(NPC) +end + +function waypoints(NPC) + MovementLoopAddLocation(NPC, -182.14, 0.00, 191.95, 2, math.random(10, 18)) + MovementLoopAddLocation(NPC, -182.12, 0.26, 188.85, 2, math.random(10, 18)) + MovementLoopAddLocation(NPC, -181.60, 0.31, 186.65, 2, 0) + MovementLoopAddLocation(NPC, -182.34, 0.00, 190.71, 2, 0) + MovementLoopAddLocation(NPC, -183.11, 0.00, 191.73, 2, math.random(10, 18)) + MovementLoopAddLocation(NPC, -183.23, 0.28, 188.58, 2, 0) + MovementLoopAddLocation(NPC, -182.30, 0.00, 184.38, 2, 0, "changegrid_Going_Down") + MovementLoopAddLocation(NPC, -181.93, 0.00, 191.35, 2, 0, "changegrid_Going_Up") + MovementLoopAddLocation(NPC, -182.41, 0.10, 193.89, 2, 0) + MovementLoopAddLocation(NPC, -182.28, 0.00, 197.35, 2, 0) + MovementLoopAddLocation(NPC, -182.08, 0.00, 194.62, 2, math.random(10, 18)) + MovementLoopAddLocation(NPC, -183.11, 0.00, 191.36, 2, 0) + MovementLoopAddLocation(NPC, -182.58, 0.45, 187.75, 2, 0) + MovementLoopAddLocation(NPC, -183.59, 0.02, 183.60, 2, math.random(10, 18), "changegrid_Going_Down") + MovementLoopAddLocation(NPC, -182.46, 0.42, 187.02, 2, 0, "changegrid_Going_Up") + MovementLoopAddLocation(NPC, -182.75, 0.00, 191.13, 2, math.random(10, 18)) + MovementLoopAddLocation(NPC, -184.51, 0.10, 191.92, 2, 0) + MovementLoopAddLocation(NPC, -185.07, 0.10, 192.04, 2, math.random(10, 18)) + MovementLoopAddLocation(NPC, -183.82, 0.05, 192.64, 2, 0) +end + +-------------------------------------------------------------------------------------- +-- NPC Change Grid +-------------------------------------------------------------------------------------- + +function changegrid_Going_Up(NPC) + SetGridID(NPC, 1555937977) +end + +function changegrid_Going_Down(NPC) + SetGridID(NPC, 667331216) +end diff --git a/server/SpawnScripts/ThievesWay/asewagerat392406.lua b/server/SpawnScripts/ThievesWay/asewagerat392406.lua new file mode 100644 index 000000000..be1e41d88 --- /dev/null +++ b/server/SpawnScripts/ThievesWay/asewagerat392406.lua @@ -0,0 +1,47 @@ +--[[ + Script Name : SpawnScripts/ThievesWay/asewagerat392406.lua + Script Purpose : Waypoint Path for asewagerat392406.lua + Script Author : Rylec + Script Date : 10-05-2019 08:24:49 + Script Notes : Locations collected from Live +--]] + +function spawn(NPC) + waypoints(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) +end + +function respawn(NPC) +end + +function waypoints(NPC) + MovementLoopAddLocation(NPC, -184.71, 0.08, 195.63, 2, math.random(10, 18)) + MovementLoopAddLocation(NPC, -183.65, 0.03, 192.88, 2, 0) + MovementLoopAddLocation(NPC, -181.89, 0.00, 191.47, 2, math.random(10, 18)) + MovementLoopAddLocation(NPC, -182.47, 0.38, 187.96, 2, 0) + MovementLoopAddLocation(NPC, -182.12, 0.00, 184.72, 2, 0, "changegrid_Going_Down") + MovementLoopAddLocation(NPC, -182.13, 0.00, 184.70, 2, math.random(10, 18)) + MovementLoopAddLocation(NPC, -183.72, 0.04, 182.44, 2, math.random(10, 18)) + MovementLoopAddLocation(NPC, -180.15, 0.00, 182.81, 2, math.random(10, 18)) + MovementLoopAddLocation(NPC, -182.27, 0.48, 187.30, 2, 0, "changegrid_Going_Up") + MovementLoopAddLocation(NPC, -184.93, 0.10, 191.71, 2, math.random(10, 18)) + MovementLoopAddLocation(NPC, -183.21, 0.00, 196.16, 2, 0) + MovementLoopAddLocation(NPC, -182.48, 0.04, 194.23, 2, 0) + MovementLoopAddLocation(NPC, -183.22, 0.00, 190.98, 2, math.random(10, 18)) +end + +-------------------------------------------------------------------------------------- +-- NPC Change Grid +-------------------------------------------------------------------------------------- + +function changegrid_Going_Up(NPC) + SetGridID(NPC, 1555937977) +end + +function changegrid_Going_Down(NPC) + SetGridID(NPC, 667331216) +end + diff --git a/server/SpawnScripts/ThievesWay/asewagerat392407.lua b/server/SpawnScripts/ThievesWay/asewagerat392407.lua new file mode 100644 index 000000000..7adb543c4 --- /dev/null +++ b/server/SpawnScripts/ThievesWay/asewagerat392407.lua @@ -0,0 +1,55 @@ +--[[ + Script Name : SpawnScripts/ThievesWay/asewagerat392407.lua + Script Purpose : Waypoint Path for asewagerat392407.lua + Script Author : Rylec + Script Date : 10-17-2019 03:17:50 + Script Notes : Locations collected from Live +--]] + +function spawn(NPC) + waypoints(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) +end + +function respawn(NPC) +end + +function waypoints(NPC) + MovementLoopAddLocation(NPC, -182.55, 0.24, 160.51, 2, math.random(10, 18)) + MovementLoopAddLocation(NPC, -184.25, 0.09, 172.81, 2, math.random(10, 18), "changegrid_Going_Up") + MovementLoopAddLocation(NPC, -183.28, 0.00, 168.84, 2, 0, "changegrid_Going_Down") + MovementLoopAddLocation(NPC, -183.37, 0.00, 164.54, 2, 0) + MovementLoopAddLocation(NPC, -182.53, 0.00, 162.14, 2, 0) + MovementLoopAddLocation(NPC, -182.57, 0.00, 169.51, 2, 0) + MovementLoopAddLocation(NPC, -182.57, 0.00, 169.49, 2, math.random(10, 18)) + MovementLoopAddLocation(NPC, -182.55, 0.00, 166.63, 2, 0) + MovementLoopAddLocation(NPC, -181.98, 0.00, 164.96, 2, 0) + MovementLoopAddLocation(NPC, -181.49, 0.00, 162.65, 2, math.random(10, 18)) + MovementLoopAddLocation(NPC, -181.64, 0.00, 164.79, 2, 0) + MovementLoopAddLocation(NPC, -183.41, 0.00, 167.36, 2, 0) + MovementLoopAddLocation(NPC, -183.11, 0.00, 162.29, 2, 0) + MovementLoopAddLocation(NPC, -181.69, 0.00, 157.66, 2, math.random(10, 18)) + MovementLoopAddLocation(NPC, -181.99, 0.23, 160.08, 2, 0) + MovementLoopAddLocation(NPC, -181.87, 0.24, 170.24, 2, 0) + MovementLoopAddLocation(NPC, -181.11, 0.00, 172.24, 2, math.random(10, 18), "changegrid_Going_Up") + MovementLoopAddLocation(NPC, -181.84, 0.24, 170.23, 2, 0, "changegrid_Going_Down") + MovementLoopAddLocation(NPC, -183.20, 0.00, 163.39, 2, 0) + MovementLoopAddLocation(NPC, -184.52, 0.13, 158.97, 2, math.random(10, 18)) + MovementLoopAddLocation(NPC, -180.74, 0.32, 160.60, 2, math.random(10, 18)) +end + +-------------------------------------------------------------------------------------- +-- NPC Change Grid +-------------------------------------------------------------------------------------- + +function changegrid_Going_Up(NPC) + SetGridID(NPC, 667331216) +end + +function changegrid_Going_Down(NPC) + SetGridID(NPC, 3049532766) +end + diff --git a/server/SpawnScripts/ThievesWay/asewagerat392408.lua b/server/SpawnScripts/ThievesWay/asewagerat392408.lua new file mode 100644 index 000000000..53ab731cf --- /dev/null +++ b/server/SpawnScripts/ThievesWay/asewagerat392408.lua @@ -0,0 +1,50 @@ +--[[ + Script Name : SpawnScripts/ThievesWay/asewagerat392408.lua + Script Purpose : Waypoint Path for asewagerat392408.lua + Script Author : Rylec + Script Date : 10-17-2019 03:17:55 + Script Notes : Locations collected from Live +--]] + +function spawn(NPC) + waypoints(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) +end + +function respawn(NPC) +end + +function waypoints(NPC) + MovementLoopAddLocation(NPC, -181.71, 0.00, 165.51, 2, math.random(10, 18)) + MovementLoopAddLocation(NPC, -181.96, 0.00, 164.74, 2, 0) + MovementLoopAddLocation(NPC, -181.53, 0.00, 159.17, 2, 0) + MovementLoopAddLocation(NPC, -181.56, 0.00, 159.05, 2, math.random(10, 18)) + MovementLoopAddLocation(NPC, -182.58, 0.00, 156.38, 2, math.random(10, 18)) + MovementLoopAddLocation(NPC, -182.04, 0.24, 170.61, 2, 0) + MovementLoopAddLocation(NPC, -181.31, 0.00, 172.30, 2, math.random(10, 18), "changegrid_Going_Up") + MovementLoopAddLocation(NPC, -183.76, 0.04, 174.48, 2, math.random(10, 18)) + MovementLoopAddLocation(NPC, -182.60, 0.24, 170.76, 2, 0, "changegrid_Going_Down") + MovementLoopAddLocation(NPC, -182.82, 0.00, 164.42, 2, 0) + MovementLoopAddLocation(NPC, -181.01, 0.05, 169.07, 2, 0) + MovementLoopAddLocation(NPC, -181.92, 0.00, 173.26, 2, math.random(10, 18), "changegrid_Going_Up") + MovementLoopAddLocation(NPC, -182.13, 0.00, 169.28, 2, 0, "changegrid_Going_Down") + MovementLoopAddLocation(NPC, -181.41, 0.01, 166.43, 2, 0) +end + +-------------------------------------------------------------------------------------- +-- NPC Change Grid +-------------------------------------------------------------------------------------- + +function changegrid_Going_Up(NPC) + SetGridID(NPC, 667331216) +end + +function changegrid_Going_Down(NPC) + SetGridID(NPC, 3049532766) +end + + + diff --git a/server/SpawnScripts/ThievesWay/asewagerat392409.lua b/server/SpawnScripts/ThievesWay/asewagerat392409.lua new file mode 100644 index 000000000..33fdc934c --- /dev/null +++ b/server/SpawnScripts/ThievesWay/asewagerat392409.lua @@ -0,0 +1,39 @@ +--[[ + Script Name : SpawnScripts/ThievesWay/asewagerat392409.lua + Script Purpose : Waypoint Path for asewagerat392409.lua + Script Author : Rylec + Script Date : 10-17-2019 03:27:39 + Script Notes : Locations collected from Live +--]] + +function spawn(NPC) + waypoints(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) +end + +function respawn(NPC) +end + +function waypoints(NPC) + MovementLoopAddLocation(NPC, -183.09, 0.00, 140.27, 2, math.random(10, 18)) + MovementLoopAddLocation(NPC, -181.69, 0.00, 141.10, 2, 0) + MovementLoopAddLocation(NPC, -180.97, 0.00, 142.09, 2, math.random(10, 18)) + MovementLoopAddLocation(NPC, -179.77, 0.00, 143.18, 2, 0) + MovementLoopAddLocation(NPC, -179.87, 0.12, 145.95, 2, math.random(10, 18)) + MovementLoopAddLocation(NPC, -180.09, 0.00, 142.33, 2, 0) + MovementLoopAddLocation(NPC, -183.54, 0.02, 135.46, 2, 0) + MovementLoopAddLocation(NPC, -183.97, 0.06, 134.56, 2, math.random(10, 18)) + MovementLoopAddLocation(NPC, -179.82, 0.00, 140.11, 2, 0) + MovementLoopAddLocation(NPC, -177.83, 0.00, 141.67, 2, 0) + MovementLoopAddLocation(NPC, -177.20, 0.08, 142.77, 2, math.random(10, 18)) + MovementLoopAddLocation(NPC, -178.05, 0.00, 141.98, 2, math.random(10, 18)) + MovementLoopAddLocation(NPC, -179.81, 0.00, 139.94, 2, 0) + MovementLoopAddLocation(NPC, -183.57, 0.02, 137.89, 2, math.random(10, 18)) + MovementLoopAddLocation(NPC, -181.07, 0.00, 134.81, 2, math.random(10, 18)) + MovementLoopAddLocation(NPC, -181.26, 0.00, 138.20, 2, 0) + MovementLoopAddLocation(NPC, -181.29, 0.00, 138.21, 2, math.random(10, 18)) +end + diff --git a/server/SpawnScripts/ThievesWay/asewagerat392410.lua b/server/SpawnScripts/ThievesWay/asewagerat392410.lua new file mode 100644 index 000000000..38d478de7 --- /dev/null +++ b/server/SpawnScripts/ThievesWay/asewagerat392410.lua @@ -0,0 +1,38 @@ +--[[ + Script Name : SpawnScripts/ThievesWay/asewagerat392410.lua + Script Purpose : Waypoint Path for asewagerat392410.lua + Script Author : Rylec + Script Date : 10-17-2019 03:27:51 + Script Notes : Locations collected from Live +--]] + +function spawn(NPC) + waypoints(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) +end + +function respawn(NPC) +end + +function waypoints(NPC) + MovementLoopAddLocation(NPC, -181.06, 0.00, 138.19, 2, math.random(10, 18)) + MovementLoopAddLocation(NPC, -182.16, 0.00, 141.09, 2, 0) + MovementLoopAddLocation(NPC, -182.15, 0.00, 141.11, 2, math.random(10, 18)) + MovementLoopAddLocation(NPC, -180.41, 0.00, 140.20, 2, 0) + MovementLoopAddLocation(NPC, -176.41, 0.07, 139.39, 2, math.random(10, 18)) + MovementLoopAddLocation(NPC, -182.16, 0.00, 139.02, 2, math.random(10, 18)) + MovementLoopAddLocation(NPC, -183.89, 0.05, 136.35, 2, 0) + MovementLoopAddLocation(NPC, -182.88, 0.00, 134.16, 2, 0) + MovementLoopAddLocation(NPC, -180.61, 0.01, 132.33, 2, math.random(10, 18)) + MovementLoopAddLocation(NPC, -180.87, 0.00, 136.87, 2, math.random(10, 18)) + MovementLoopAddLocation(NPC, -179.63, 0.00, 136.63, 2, 0) + MovementLoopAddLocation(NPC, -178.24, 0.00, 136.13, 2, 0) + MovementLoopAddLocation(NPC, -176.38, 0.13, 135.98, 2, math.random(10, 18)) + MovementLoopAddLocation(NPC, -181.89, 0.00, 135.06, 2, 0) + MovementLoopAddLocation(NPC, -181.88, 0.00, 135.08, 2, math.random(10, 18)) +end + + diff --git a/server/SpawnScripts/ThievesWay/asewagerat392411.lua b/server/SpawnScripts/ThievesWay/asewagerat392411.lua new file mode 100644 index 000000000..cf94dec44 --- /dev/null +++ b/server/SpawnScripts/ThievesWay/asewagerat392411.lua @@ -0,0 +1,33 @@ +--[[ + Script Name : SpawnScripts/ThievesWay/asewagerat392411.lua + Script Purpose : Waypoint Path for asewagerat392411.lua + Script Author : Rylec + Script Date : 09-17-2019 05:10:29 + Script Notes : Locations collected from Live +--]] + +function spawn(NPC) + waypoints(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) +end + +function respawn(NPC) +end + +function waypoints(NPC) + MovementLoopAddLocation(NPC, -180.49, 1.22, 25.47, 2, math.random(10, 18)) + MovementLoopAddLocation(NPC, -179.50, 1.22, 23.22, 2, math.random(10, 18)) + MovementLoopAddLocation(NPC, -177.49, 1.31, 35.78, 2, 0) + MovementLoopAddLocation(NPC, -177.48, 1.31, 35.72, 2, math.random(10, 18)) + MovementLoopAddLocation(NPC, -175.31, 1.22, 28.71, 2, math.random(10, 18)) + MovementLoopAddLocation(NPC, -181.16, 1.24, 35.62, 2, math.random(10, 18)) + MovementLoopAddLocation(NPC, -181.29, 1.25, 22.76, 2, math.random(10, 18)) + MovementLoopAddLocation(NPC, -180.51, 1.22, 26.41, 2, math.random(10, 18)) + MovementLoopAddLocation(NPC, -175.53, 1.22, 27.42, 2, math.random(10, 18)) + MovementLoopAddLocation(NPC, -179.38, 1.22, 26.42, 2, math.random(10, 18)) + MovementLoopAddLocation(NPC, -175.46, 1.22, 29.50, 2, math.random(10, 18)) +end + diff --git a/server/SpawnScripts/ThievesWay/asewagerat392413.lua b/server/SpawnScripts/ThievesWay/asewagerat392413.lua new file mode 100644 index 000000000..63054290a --- /dev/null +++ b/server/SpawnScripts/ThievesWay/asewagerat392413.lua @@ -0,0 +1,35 @@ +--[[ + Script Name : SpawnScripts/ThievesWay/asewagerat392413.lua + Script Purpose : Waypoint Path for asewagerat392413.lua + Script Author : Rylec + Script Date : 10-17-2019 03:28:53 + Script Notes : Locations collected from Live +--]] + +function spawn(NPC) + waypoints(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) +end + +function respawn(NPC) +end + +function waypoints(NPC) + MovementLoopAddLocation(NPC, -183.55, 0.02, 122.48, 2, math.random(10, 18)) + MovementLoopAddLocation(NPC, -182.66, 0.00, 119.28, 2, 0) + MovementLoopAddLocation(NPC, -181.64, 0.00, 113.01, 2, math.random(10, 18)) + MovementLoopAddLocation(NPC, -183.34, 0.00, 109.63, 2, math.random(10, 18)) + MovementLoopAddLocation(NPC, -182.85, 0.00, 112.30, 2, 0) + MovementLoopAddLocation(NPC, -182.39, 0.24, 117.01, 2, math.random(10, 18)) + MovementLoopAddLocation(NPC, -181.48, 0.00, 110.02, 2, math.random(10, 18)) + MovementLoopAddLocation(NPC, -181.10, 0.28, 116.92, 2, 0) + MovementLoopAddLocation(NPC, -181.84, 0.00, 122.54, 2, math.random(10, 18)) + MovementLoopAddLocation(NPC, -181.51, 0.00, 121.13, 2, 0) + MovementLoopAddLocation(NPC, -181.38, 0.01, 111.40, 2, 0) + MovementLoopAddLocation(NPC, -181.38, 0.01, 111.38, 2, math.random(10, 18)) +end + + diff --git a/server/SpawnScripts/ThievesWay/asewagerat392415.lua b/server/SpawnScripts/ThievesWay/asewagerat392415.lua new file mode 100644 index 000000000..4d759984a --- /dev/null +++ b/server/SpawnScripts/ThievesWay/asewagerat392415.lua @@ -0,0 +1,59 @@ +--[[ + Script Name : SpawnScripts/ThievesWay/asewagerat392415.lua + Script Purpose : Waypoint Path for asewagerat392415.lua + Script Author : Rylec + Script Date : 09-17-2019 08:36:33 + Script Notes : Locations collected from Live +--]] + +function spawn(NPC) + waypoints(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) +end + +function respawn(NPC) +end + +function waypoints(NPC) + MovementLoopAddLocation(NPC, -180.06, 1.62, 12.28, 2, math.random(10, 18), "changegrid_Going_Down") + MovementLoopAddLocation(NPC, -179.81, 1.69, 10.39, 2, 0) + MovementLoopAddLocation(NPC, -179.20, 1.84, 8.11, 2, 0) + MovementLoopAddLocation(NPC, -178.81, 1.26, 5.54, 2, 0, "changegrid_Going_Up") + MovementLoopAddLocation(NPC, -177.04, 1.26, 1.70, 2, 0) + MovementLoopAddLocation(NPC, -173.77, 1.26, 0.44, 2, 0) + MovementLoopAddLocation(NPC, -173.81, 1.26, 0.47, 2, math.random(10, 18)) + MovementLoopAddLocation(NPC, -176.07, 1.26, 1.92, 2, math.random(10, 18)) + MovementLoopAddLocation(NPC, -178.12, 1.26, 4.24, 2, 0) + MovementLoopAddLocation(NPC, -178.82, 1.26, 5.85, 2, 0) + MovementLoopAddLocation(NPC, -179.93, 1.84, 7.66, 2, math.random(10, 18), "changegrid_Going_Down") + MovementLoopAddLocation(NPC, -177.97, 1.29, 5.81, 2, 0, "changegrid_Going_Up") + MovementLoopAddLocation(NPC, -176.96, 1.30, 4.49, 2, 0) + MovementLoopAddLocation(NPC, -175.39, 1.32, 3.29, 2, 0) + MovementLoopAddLocation(NPC, -173.82, 1.42, 2.77, 2, 0) + MovementLoopAddLocation(NPC, -172.32, 1.76, 2.24, 2, 0) + MovementLoopAddLocation(NPC, -171.33, 1.79, 2.40, 2, 0) + MovementLoopAddLocation(NPC, -169.38, 1.34, 1.75, 2, math.random(10, 18)) + MovementLoopAddLocation(NPC, -171.27, 1.67, 1.71, 2, 0) + MovementLoopAddLocation(NPC, -172.61, 1.77, 2.29, 2, 0) + MovementLoopAddLocation(NPC, -173.89, 1.51, 3.37, 2, 0) + MovementLoopAddLocation(NPC, -174.80, 1.62, 4.80, 2, 0) + MovementLoopAddLocation(NPC, -178.45, 1.90, 7.65, 2, 0, "changegrid_Going_Down") + MovementLoopAddLocation(NPC, -178.96, 1.63, 10.03, 2, math.random(10, 18)) + MovementLoopAddLocation(NPC, -179.05, 1.85, 7.82, 2, 0) + MovementLoopAddLocation(NPC, -179.49, 1.26, 5.33, 2, math.random(10, 18), "changegrid_Going_Up") +end + +-------------------------------------------------------------------------------------- +-- NPC Change Grid +-------------------------------------------------------------------------------------- + +function changegrid_Going_Up(NPC) + SetGridID(NPC, 4000206445) +end + +function changegrid_Going_Down(NPC) + SetGridID(NPC, 2981397110) +end \ No newline at end of file diff --git a/server/SpawnScripts/ThievesWay/asewagerat392416.lua b/server/SpawnScripts/ThievesWay/asewagerat392416.lua new file mode 100644 index 000000000..e26e3f4a9 --- /dev/null +++ b/server/SpawnScripts/ThievesWay/asewagerat392416.lua @@ -0,0 +1,56 @@ +--[[ + Script Name : SpawnScripts/ThievesWay/asludgewalkerhatchling392416.lua + Script Purpose : Waypoint Path for asludgewalkerhatchling392416.lua + Script Author : Rylec + Script Date : 09-17-2019 08:39:48 + Script Notes : Locations collected from Live +--]] + +function spawn(NPC) + waypoints(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) +end + +function respawn(NPC) +end + +function waypoints(NPC) + MovementLoopAddLocation(NPC, -180.39, 1.34, 45.56, 2, math.random(10, 18)) + MovementLoopAddLocation(NPC, -179.79, 1.53, 53.47, 2, 0) + MovementLoopAddLocation(NPC, -180.30, 1.22, 55.35, 2, math.random(10, 18)) + MovementLoopAddLocation(NPC, -180.05, 1.24, 53.97, 2, 0) + MovementLoopAddLocation(NPC, -180.15, 1.34, 47.34, 2, math.random(10, 18)) + MovementLoopAddLocation(NPC, -179.22, 1.58, 52.26, 2, 0) + MovementLoopAddLocation(NPC, -178.83, 1.22, 54.84, 2, 0) + MovementLoopAddLocation(NPC, -177.40, 1.22, 57.12, 2, 0) + MovementLoopAddLocation(NPC, -177.36, 1.22, 57.15, 2, math.random(10, 18)) + MovementLoopAddLocation(NPC, -174.10, 1.22, 59.94, 2, 0, "changegrid_Going_Up") + MovementLoopAddLocation(NPC, -172.37, 1.78, 60.98, 2, math.random(10, 18), "changegrid_Going_Down") + MovementLoopAddLocation(NPC, -174.68, 1.26, 59.06, 2, 0) + MovementLoopAddLocation(NPC, -176.48, 1.25, 57.47, 2, 0) + MovementLoopAddLocation(NPC, -176.87, 1.29, 56.58, 2, 0) + MovementLoopAddLocation(NPC, -177.55, 1.35, 54.83, 2, 0) + MovementLoopAddLocation(NPC, -178.43, 1.65, 52.99, 2, 0) + MovementLoopAddLocation(NPC, -179.49, 1.34, 49.26, 2, math.random(10, 18)) + MovementLoopAddLocation(NPC, -179.34, 1.34, 50.66, 2, 0) + MovementLoopAddLocation(NPC, -178.76, 1.22, 55.03, 2, 0) + MovementLoopAddLocation(NPC, -179.05, 1.22, 58.22, 2, math.random(10, 18)) + MovementLoopAddLocation(NPC, -179.36, 1.22, 55.75, 2, 0) + MovementLoopAddLocation(NPC, -179.83, 1.37, 53.77, 2, 0) +end + +-------------------------------------------------------------------------------------- +-- NPC Change Grid +-------------------------------------------------------------------------------------- + +function changegrid_Going_Up(NPC) + SetGridID(NPC, 3098524280) +end + +function changegrid_Going_Down(NPC) + SetGridID(NPC, 2981397110) +end + diff --git a/server/SpawnScripts/ThievesWay/asewagerat392417.lua b/server/SpawnScripts/ThievesWay/asewagerat392417.lua new file mode 100644 index 000000000..0dbe911ff --- /dev/null +++ b/server/SpawnScripts/ThievesWay/asewagerat392417.lua @@ -0,0 +1,38 @@ +--[[ + Script Name : SpawnScripts/ThievesWay/asewagerat392417.lua + Script Purpose : Waypoint Path for asewagerat392417.lua + Script Author : Rylec + Script Date : 10-17-2019 03:29:01 + Script Notes : Locations collected from Live +--]] + +function spawn(NPC) + waypoints(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) +end + +function respawn(NPC) +end + +function waypoints(NPC) + MovementLoopAddLocation(NPC, -181.26, 0.02, 113.33, 2, math.random(10, 18)) + MovementLoopAddLocation(NPC, -181.53, 0.00, 110.26, 2, 0) + MovementLoopAddLocation(NPC, -180.81, 0.07, 109.05, 2, math.random(10, 18)) + MovementLoopAddLocation(NPC, -181.87, 0.00, 121.44, 2, 0) + MovementLoopAddLocation(NPC, -182.25, 0.00, 123.29, 2, math.random(10, 18)) + MovementLoopAddLocation(NPC, -182.11, 0.00, 122.19, 2, 0) + MovementLoopAddLocation(NPC, -182.33, 0.00, 115.48, 2, math.random(10, 18)) + MovementLoopAddLocation(NPC, -181.34, 0.02, 110.57, 2, math.random(10, 18)) + MovementLoopAddLocation(NPC, -182.00, 0.00, 115.30, 2, 0) + MovementLoopAddLocation(NPC, -181.45, 0.25, 117.03, 2, math.random(10, 18)) + MovementLoopAddLocation(NPC, -182.22, 0.00, 120.19, 2, math.random(10, 18)) + MovementLoopAddLocation(NPC, -184.34, 0.32, 117.16, 2, math.random(10, 18)) + MovementLoopAddLocation(NPC, -182.43, 0.00, 111.58, 2, 0) + MovementLoopAddLocation(NPC, -182.33, 0.00, 109.62, 2, math.random(10, 18)) + MovementLoopAddLocation(NPC, -181.38, 0.01, 115.20, 2, math.random(10, 18)) + MovementLoopAddLocation(NPC, -180.18, 0.41, 117.10, 2, math.random(10, 18)) +end + diff --git a/server/SpawnScripts/ThievesWay/asewagerat392418.lua b/server/SpawnScripts/ThievesWay/asewagerat392418.lua new file mode 100644 index 000000000..b461a5cb6 --- /dev/null +++ b/server/SpawnScripts/ThievesWay/asewagerat392418.lua @@ -0,0 +1,60 @@ +--[[ + Script Name : SpawnScripts/ThievesWay/asewagerat392418.lua + Script Purpose : Waypoint Path for asewagerat392418.lua + Script Author : Rylec + Script Date : 09-17-2019 07:25:42 + Script Notes : Locations collected from Live +--]] + +function spawn(NPC) + waypoints(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) +end + +function respawn(NPC) +end + +function waypoints(NPC) + MovementLoopAddLocation(NPC, -168.95, 1.34, 0.58, 2, math.random(10, 18)) + MovementLoopAddLocation(NPC, -171.18, 1.61, 1.10, 2, 0) + MovementLoopAddLocation(NPC, -173.72, 1.44, 2.86, 2, 0) + MovementLoopAddLocation(NPC, -179.54, 1.26, 4.51, 2, 0) + MovementLoopAddLocation(NPC, -180.70, 1.31, 5.86, 2, math.random(10, 18)) + MovementLoopAddLocation(NPC, -177.17, 1.26, 1.75, 2, 4) + MovementLoopAddLocation(NPC, -177.95, 1.29, 5.94, 2, 0) + MovementLoopAddLocation(NPC, -178.39, 1.63, 9.16, 2, 0, "changegrid_Going_Down") + MovementLoopAddLocation(NPC, -179.18, 1.62, 12.24, 2, math.random(10, 18)) + MovementLoopAddLocation(NPC, -177.87, 1.99, 8.08, 2, 0) + MovementLoopAddLocation(NPC, -177.80, 2.04, 7.85, 2, math.random(10, 18)) + MovementLoopAddLocation(NPC, -175.93, 1.39, 4.57, 2, 0, "changegrid_Going_Up") + MovementLoopAddLocation(NPC, -173.55, 1.62, 3.57, 2, 0) + MovementLoopAddLocation(NPC, -172.03, 1.75, 2.18, 2, 0) + MovementLoopAddLocation(NPC, -169.55, 1.34, 0.53, 2, math.random(10, 18)) + MovementLoopAddLocation(NPC, -172.92, 1.63, 1.84, 2, 0) + MovementLoopAddLocation(NPC, -175.02, 1.52, 4.60, 2, 0) + MovementLoopAddLocation(NPC, -176.72, 1.50, 6.30, 2, 0) + MovementLoopAddLocation(NPC, -177.44, 2.06, 7.67, 2, 0, "changegrid_Going_Down") + MovementLoopAddLocation(NPC, -178.59, 1.64, 10.18, 2, 0) + MovementLoopAddLocation(NPC, -179.99, 1.60, 12.52, 2, math.random(10, 18)) + MovementLoopAddLocation(NPC, -179.19, 1.82, 11.13, 2, 0) + MovementLoopAddLocation(NPC, -177.98, 1.97, 7.82, 2, 0) + MovementLoopAddLocation(NPC, -176.67, 1.49, 6.04, 2, 0, "changegrid_Going_Up") + MovementLoopAddLocation(NPC, -173.42, 1.63, 3.31, 2, 0) + MovementLoopAddLocation(NPC, -172.44, 1.90, 2.76, 2, 0) + MovementLoopAddLocation(NPC, -169.62, 1.37, 1.98, 2, 0) +end + +-------------------------------------------------------------------------------------- +-- NPC Change Grid +-------------------------------------------------------------------------------------- + +function changegrid_Going_Up(NPC) + SetGridID(NPC, 4000206445) +end + +function changegrid_Going_Down(NPC) + SetGridID(NPC, 2981397110) +end \ No newline at end of file diff --git a/server/SpawnScripts/ThievesWay/asewagerat392419.lua b/server/SpawnScripts/ThievesWay/asewagerat392419.lua new file mode 100644 index 000000000..097160850 --- /dev/null +++ b/server/SpawnScripts/ThievesWay/asewagerat392419.lua @@ -0,0 +1,38 @@ +--[[ + Script Name : SpawnScripts/ThievesWay/asewagerat392419.lua + Script Purpose : Waypoint Path for asewagerat392419.lua + Script Author : Rylec + Script Date : 09-22-2019 06:22:19 + Script Notes : Locations collected from Live +--]] + +function spawn(NPC) + waypoints(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) +end + +function respawn(NPC) +end + +function waypoints(NPC) + MovementLoopAddLocation(NPC, -175.07, 1.29, 58.33, 2, 0) + MovementLoopAddLocation(NPC, -175.33, 1.28, 58.29, 2, math.random(10, 18)) + MovementLoopAddLocation(NPC, -176.08, 1.25, 57.99, 2, 0) + MovementLoopAddLocation(NPC, -176.92, 1.36, 55.84, 2, 0) + MovementLoopAddLocation(NPC, -177.12, 1.93, 52.98, 2, 0) + MovementLoopAddLocation(NPC, -178.03, 1.51, 51.67, 2, 0) + MovementLoopAddLocation(NPC, -179.96, 1.34, 48.10, 2, 0) + MovementLoopAddLocation(NPC, -179.70, 1.34, 51.15, 2, 0) + MovementLoopAddLocation(NPC, -178.95, 1.60, 52.77, 2, 0) + MovementLoopAddLocation(NPC, -179.35, 1.31, 59.15, 2, 0) + MovementLoopAddLocation(NPC, -179.21, 1.30, 59.16, 2, math.random(10, 18)) + MovementLoopAddLocation(NPC, -175.39, 1.22, 60.26, 2, math.random(10, 18)) + MovementLoopAddLocation(NPC, -176.14, 1.30, 57.12, 2, 0) + MovementLoopAddLocation(NPC, -176.27, 1.29, 57.19, 2, math.random(10, 18)) + MovementLoopAddLocation(NPC, -178.38, 1.22, 58.07, 2, math.random(10, 18)) + MovementLoopAddLocation(NPC, -175.96, 1.22, 60.07, 2, 0) + MovementLoopAddLocation(NPC, -174.18, 1.29, 62.35, 2, math.random(10, 18)) +end diff --git a/server/SpawnScripts/ThievesWay/asewagerat392420.lua b/server/SpawnScripts/ThievesWay/asewagerat392420.lua new file mode 100644 index 000000000..a66a38854 --- /dev/null +++ b/server/SpawnScripts/ThievesWay/asewagerat392420.lua @@ -0,0 +1,56 @@ +--[[ + Script Name : SpawnScripts/ThievesWay/asewagerat392420.lua + Script Purpose : Waypoint Path for asewagerat392420.lua + Script Author : Rylec + Script Date : 09-28-2019 10:46:56 + Script Notes : Locations collected from Live +--]] + +function spawn(NPC) + waypoints(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) +end + +function respawn(NPC) +end + +function waypoints(NPC) + MovementLoopAddLocation(NPC, -182.46, 0.03, 212.85, 2, math.random(10, 18)) + MovementLoopAddLocation(NPC, -180.72, 0.03, 215.65, 2, 0) + MovementLoopAddLocation(NPC, -180.80, 0.03, 215.67, 2, math.random(10, 18)) + MovementLoopAddLocation(NPC, -177.88, 0.00, 215.69, 2, 0) + MovementLoopAddLocation(NPC, -178.63, 0.00, 214.79, 2, math.random(10, 18)) + MovementLoopAddLocation(NPC, -180.30, 0.00, 213.95, 2, math.random(10, 18)) + MovementLoopAddLocation(NPC, -178.52, 0.00, 214.98, 2, 0) + MovementLoopAddLocation(NPC, -178.52, 0.00, 214.98, 2, math.random(10, 18)) + MovementLoopAddLocation(NPC, -180.68, 0.32, 209.54, 2, 0, "changegrid_Going_Down") + MovementLoopAddLocation(NPC, -182.40, 0.00, 207.89, 2, 0) + MovementLoopAddLocation(NPC, -181.85, 0.00, 210.71, 2, 0, "changegrid_Going_Up") + MovementLoopAddLocation(NPC, -180.70, 0.00, 211.87, 2, math.random(10, 18)) + MovementLoopAddLocation(NPC, -182.20, 0.00, 207.88, 2, 0, "changegrid_Going_Down") + MovementLoopAddLocation(NPC, -181.68, 0.02, 204.44, 2, 0) + MovementLoopAddLocation(NPC, -181.51, 0.32, 202.75, 2, math.random(10, 18)) + MovementLoopAddLocation(NPC, -181.78, 0.00, 207.27, 2, 0) + MovementLoopAddLocation(NPC, -178.12, 0.06, 213.91, 2, 0, "changegrid_Going_Up") + MovementLoopAddLocation(NPC, -176.30, 0.01, 215.68, 2, 0) + MovementLoopAddLocation(NPC, -175.94, 0.00, 216.62, 2, math.random(10, 18)) + MovementLoopAddLocation(NPC, -179.49, 0.00, 215.75, 2, 0) + MovementLoopAddLocation(NPC, -179.50, 0.00, 215.76, 2, math.random(10, 18)) +end + +-------------------------------------------------------------------------------------- +-- NPC Change Grid +-------------------------------------------------------------------------------------- + +function changegrid_Going_Up(NPC) + SetGridID(NPC, 3053675711) +end + +function changegrid_Going_Down(NPC) + SetGridID(NPC, 1555937977) +end + + diff --git a/server/SpawnScripts/ThievesWay/asewagerat392423.lua b/server/SpawnScripts/ThievesWay/asewagerat392423.lua new file mode 100644 index 000000000..39c0a1e28 --- /dev/null +++ b/server/SpawnScripts/ThievesWay/asewagerat392423.lua @@ -0,0 +1,37 @@ +--[[ + Script Name : SpawnScripts/ThievesWay/asewagerat392423.lua + Script Purpose : Waypoint Path for asewagerat392423.lua + Script Author : Rylec + Script Date : 09-27-2019 05:46:43 + Script Notes : Locations collected from Live +--]] + +function spawn(NPC) + waypoints(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) +end + +function respawn(NPC) +end + +function waypoints(NPC) + MovementLoopAddLocation(NPC, -155.35, 0.00, 217.21, 2, math.random(10, 18)) + MovementLoopAddLocation(NPC, -158.89, 0.24, 217.10, 2, 0) + MovementLoopAddLocation(NPC, -155.54, 0.01, 218.15, 2, math.random(10, 18)) + MovementLoopAddLocation(NPC, -165.03, 0.00, 217.15, 2, 0) + MovementLoopAddLocation(NPC, -164.99, 0.00, 217.16, 2, math.random(10, 18)) + MovementLoopAddLocation(NPC, -163.27, 0.00, 216.17, 2, math.random(10, 18)) + MovementLoopAddLocation(NPC, -159.23, 0.31, 215.37, 2, 0) + MovementLoopAddLocation(NPC, -153.51, 0.00, 217.60, 2, 0) + MovementLoopAddLocation(NPC, -151.29, 0.00, 216.95, 2, math.random(10, 18)) + MovementLoopAddLocation(NPC, -155.83, 0.00, 218.06, 2, 0) + MovementLoopAddLocation(NPC, -161.42, 0.00, 217.81, 2, 0) + MovementLoopAddLocation(NPC, -163.13, 0.00, 217.17, 2, 0) + MovementLoopAddLocation(NPC, -163.12, 0.00, 217.15, 2, math.random(10, 18)) + MovementLoopAddLocation(NPC, -159.36, 0.24, 217.56, 2, 0) + MovementLoopAddLocation(NPC, -152.77, 0.00, 216.25, 2, math.random(10, 18)) + MovementLoopAddLocation(NPC, -158.91, 0.24, 217.89, 2, math.random(10, 18)) +end diff --git a/server/SpawnScripts/ThievesWay/asewagerat392424.lua b/server/SpawnScripts/ThievesWay/asewagerat392424.lua new file mode 100644 index 000000000..5089c8245 --- /dev/null +++ b/server/SpawnScripts/ThievesWay/asewagerat392424.lua @@ -0,0 +1,32 @@ +--[[ + Script Name : SpawnScripts/ThievesWay/asewagerat392424.lua + Script Purpose : Waypoint Path for asewagerat392424.lua + Script Author : Rylec + Script Date : 09-27-2019 05:46:40 + Script Notes : Locations collected from Live +--]] + +function spawn(NPC) + waypoints(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) +end + +function respawn(NPC) +end + +function waypoints(NPC) + MovementLoopAddLocation(NPC, -151.27, 0.00, 217.03, 2, math.random(10, 18)) + MovementLoopAddLocation(NPC, -153.09, 0.00, 216.82, 2, 0) + MovementLoopAddLocation(NPC, -153.17, 0.00, 216.88, 2, math.random(10, 18)) + MovementLoopAddLocation(NPC, -153.51, 0.00, 217.80, 2, 0) + MovementLoopAddLocation(NPC, -153.72, 0.00, 217.71, 2, math.random(10, 18)) + MovementLoopAddLocation(NPC, -155.20, 0.00, 217.34, 2, math.random(10, 18)) + MovementLoopAddLocation(NPC, -151.52, 0.01, 218.14, 2, math.random(10, 18)) + MovementLoopAddLocation(NPC, -161.90, 0.00, 217.26, 2, math.random(10, 18)) + MovementLoopAddLocation(NPC, -159.27, 0.24, 216.75, 2, 0) + MovementLoopAddLocation(NPC, -152.31, 0.00, 217.55, 2, math.random(10, 18)) +end + diff --git a/server/SpawnScripts/ThievesWay/asewagerat392425.lua b/server/SpawnScripts/ThievesWay/asewagerat392425.lua new file mode 100644 index 000000000..351d1016c --- /dev/null +++ b/server/SpawnScripts/ThievesWay/asewagerat392425.lua @@ -0,0 +1,37 @@ +--[[ + Script Name : SpawnScripts/ThievesWay/asewagerat392425.lua + Script Purpose : Waypoint Path for rat11001.lua + Script Author : Rylec + Script Date : 09-22-2019 06:22:23 + Script Notes : Locations collected from Live +--]] + +function spawn(NPC) + waypoints(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) +end + +function respawn(NPC) +end + +function waypoints(NPC) + MovementLoopAddLocation(NPC, -159.07, 1.58, 61.85, 2, math.random(10, 18)) + MovementLoopAddLocation(NPC, -161.49, 1.22, 61.91, 2, math.random(10, 18)) + MovementLoopAddLocation(NPC, -158.01, 1.49, 61.89, 2, 0) + MovementLoopAddLocation(NPC, -155.59, 1.34, 60.93, 2, 0) + MovementLoopAddLocation(NPC, -155.45, 1.34, 60.98, 2, math.random(10, 18)) + MovementLoopAddLocation(NPC, -158.67, 1.58, 61.96, 2, 0) + MovementLoopAddLocation(NPC, -160.46, 1.22, 61.90, 2, math.random(10, 18)) + MovementLoopAddLocation(NPC, -161.81, 1.22, 61.73, 2, 0) + MovementLoopAddLocation(NPC, -162.05, 1.22, 61.61, 2, math.random(10, 18)) + MovementLoopAddLocation(NPC, -160.73, 1.22, 61.86, 2, math.random(10, 18)) + MovementLoopAddLocation(NPC, -158.96, 1.58, 60.94, 2, math.random(10, 18)) + MovementLoopAddLocation(NPC, -153.72, 1.34, 60.76, 2, math.random(10, 18)) + MovementLoopAddLocation(NPC, -154.61, 1.34, 61.02, 2, math.random(10, 18)) + MovementLoopAddLocation(NPC, -154.42, 1.34, 62.07, 2, 0) + MovementLoopAddLocation(NPC, -154.11, 1.34, 62.22, 2, math.random(10, 18)) +end + diff --git a/server/SpawnScripts/ThievesWay/asewagerat392430.lua b/server/SpawnScripts/ThievesWay/asewagerat392430.lua new file mode 100644 index 000000000..8e8d54ae7 --- /dev/null +++ b/server/SpawnScripts/ThievesWay/asewagerat392430.lua @@ -0,0 +1,33 @@ +--[[ + Script Name : SpawnScripts/ThievesWay/asewagerat392430.lua + Script Purpose : Waypoint Path for asewagerat392430.lua + Script Author : Rylec + Script Date : 09-22-2019 09:41:13 + Script Notes : Locations collected from Live +--]] + +function spawn(NPC) + waypoints(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) +end + +function respawn(NPC) +end + +function waypoints(NPC) + MovementLoopAddLocation(NPC, -154.60, 1.34, 61.90, 2, math.random(10, 18)) + MovementLoopAddLocation(NPC, -158.96, 1.58, 61.88, 2, 0) + MovementLoopAddLocation(NPC, -158.62, 1.58, 61.89, 2, math.random(10, 18)) + MovementLoopAddLocation(NPC, -161.04, 1.25, 62.57, 2, math.random(10, 18)) + MovementLoopAddLocation(NPC, -152.58, 1.34, 61.97, 2, math.random(10, 18)) + MovementLoopAddLocation(NPC, -156.85, 1.34, 60.99, 2, math.random(10, 18)) + MovementLoopAddLocation(NPC, -154.84, 1.34, 60.92, 2, math.random(10, 18)) + MovementLoopAddLocation(NPC, -150.94, 1.34, 59.80, 2, math.random(10, 18)) + MovementLoopAddLocation(NPC, -160.47, 1.22, 60.68, 2, 0) + MovementLoopAddLocation(NPC, -161.79, 1.22, 60.22, 2, math.random(10, 18)) +end + + diff --git a/server/SpawnScripts/ThievesWay/asewagerat392431.lua b/server/SpawnScripts/ThievesWay/asewagerat392431.lua new file mode 100644 index 000000000..83d556be4 --- /dev/null +++ b/server/SpawnScripts/ThievesWay/asewagerat392431.lua @@ -0,0 +1,53 @@ +--[[ + Script Name : SpawnScripts/ThievesWay/asewagerat392431.lua + Script Purpose : Waypoint Path for asewagerat392431.lua + Script Author : Rylec + Script Date : 10-17-2019 04:44:29 + Script Notes : Locations collected from Live +--]] + +function spawn(NPC) + waypoints(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) +end + +function respawn(NPC) +end + +function waypoints(NPC) + MovementLoopAddLocation(NPC, -170.61, 0.00, 90.11, 2, math.random(10, 18)) + MovementLoopAddLocation(NPC, -171.99, 0.05, 90.20, 2, 0) + MovementLoopAddLocation(NPC, -173.85, 0.11, 91.68, 2, 0) + MovementLoopAddLocation(NPC, -175.31, 0.29, 92.16, 2, 0, "changegrid_Going_Up") + MovementLoopAddLocation(NPC, -176.76, 0.22, 93.34, 2, 0) + MovementLoopAddLocation(NPC, -178.23, 0.12, 93.96, 2, 0) + MovementLoopAddLocation(NPC, -181.60, 0.04, 97.68, 2, math.random(10, 18)) + MovementLoopAddLocation(NPC, -178.74, 0.05, 92.00, 2, 0) + MovementLoopAddLocation(NPC, -178.14, 0.05, 91.24, 2, math.random(10, 18)) + MovementLoopAddLocation(NPC, -179.97, 0.05, 93.35, 2, math.random(10, 18)) + MovementLoopAddLocation(NPC, -173.60, 0.07, 91.22, 2, 0, "changegrid_Going_Down") + MovementLoopAddLocation(NPC, -172.09, 0.05, 91.03, 2, math.random(10, 18)) + MovementLoopAddLocation(NPC, -172.97, 0.05, 91.03, 2, 0) + MovementLoopAddLocation(NPC, -181.47, 0.05, 93.33, 2, math.random(10, 18), "changegrid_Going_Up") + MovementLoopAddLocation(NPC, -176.87, 0.05, 91.72, 2, 0) + MovementLoopAddLocation(NPC, -173.65, 0.07, 91.30, 2, 0, "changegrid_Going_Down") + MovementLoopAddLocation(NPC, -172.30, 0.05, 90.46, 2, 0) +end + +-------------------------------------------------------------------------------------- +-- NPC Change Grid +-------------------------------------------------------------------------------------- + +function changegrid_Going_Up(NPC) + SetGridID(NPC, 3049532766) +end + +function changegrid_Going_Down(NPC) + SetGridID(NPC, 3438300428) +end + + + diff --git a/server/SpawnScripts/ThievesWay/asewagerat392433.lua b/server/SpawnScripts/ThievesWay/asewagerat392433.lua new file mode 100644 index 000000000..a25e0befd --- /dev/null +++ b/server/SpawnScripts/ThievesWay/asewagerat392433.lua @@ -0,0 +1,57 @@ +--[[ + Script Name : SpawnScripts/ThievesWay/asewagerat392433.lua + Script Purpose : Waypoint Path for asewagerat392433.lua + Script Author : Rylec + Script Date : 10-17-2019 04:45:36 + Script Notes : Locations collected from Live +--]] + +function spawn(NPC) + waypoints(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) +end + +function respawn(NPC) +end + +function waypoints(NPC) + MovementLoopAddLocation(NPC, -181.58, 0.00, 104.38, 2, math.random(10, 18)) + MovementLoopAddLocation(NPC, -183.20, 0.04, 98.20, 2, math.random(10, 18)) + MovementLoopAddLocation(NPC, -182.75, 0.43, 100.60, 2, 0) + MovementLoopAddLocation(NPC, -182.85, 0.00, 104.05, 2, math.random(10, 18)) + MovementLoopAddLocation(NPC, -182.01, 0.28, 102.08, 2, 0) + MovementLoopAddLocation(NPC, -181.67, 0.27, 99.72, 2, 0) + MovementLoopAddLocation(NPC, -179.45, 0.28, 96.98, 2, 0) + MovementLoopAddLocation(NPC, -178.80, 0.25, 95.55, 2, 0) + MovementLoopAddLocation(NPC, -177.43, 0.28, 94.44, 2, 0) + MovementLoopAddLocation(NPC, -176.86, 0.22, 93.44, 2, 0) + MovementLoopAddLocation(NPC, -173.61, 0.11, 91.65, 2, 0, "changegrid_Going_Down") + MovementLoopAddLocation(NPC, -170.66, 0.05, 90.98, 2, math.random(10, 18)) + MovementLoopAddLocation(NPC, -172.95, 0.06, 91.11, 2, 0) + MovementLoopAddLocation(NPC, -174.91, 0.39, 92.79, 2, 0) + MovementLoopAddLocation(NPC, -177.19, 0.14, 93.15, 2, 0, "changegrid_Going_Up") + MovementLoopAddLocation(NPC, -179.91, 0.13, 95.97, 2, 0) + MovementLoopAddLocation(NPC, -181.83, 0.28, 99.91, 2, math.random(10, 18)) + MovementLoopAddLocation(NPC, -179.78, 0.05, 93.09, 2, math.random(10, 18)) + MovementLoopAddLocation(NPC, -173.00, 0.05, 90.99, 2, math.random(10, 18), "changegrid_Going_Down") + MovementLoopAddLocation(NPC, -175.11, 0.42, 92.91, 2, 0, "changegrid_Going_Up") + MovementLoopAddLocation(NPC, -176.95, 0.18, 93.18, 2, 0) + MovementLoopAddLocation(NPC, -179.71, 0.13, 95.73, 2, 0) + MovementLoopAddLocation(NPC, -181.85, 0.27, 99.68, 2, 0) +end + +-------------------------------------------------------------------------------------- +-- NPC Change Grid +-------------------------------------------------------------------------------------- + +function changegrid_Going_Up(NPC) + SetGridID(NPC, 3049532766) +end + +function changegrid_Going_Down(NPC) + SetGridID(NPC, 3438300428) +end + diff --git a/server/SpawnScripts/ThievesWay/asludgewalkerhatchling392585.lua b/server/SpawnScripts/ThievesWay/asludgewalkerhatchling392585.lua new file mode 100644 index 000000000..120e80e52 --- /dev/null +++ b/server/SpawnScripts/ThievesWay/asludgewalkerhatchling392585.lua @@ -0,0 +1,57 @@ +--[[ + Script Name : SpawnScripts/ThievesWay/asludgewalkerhatchling392585.lua + Script Purpose : Waypoint Path for asludgewalkerhatchling392585.lua + Script Author : Rylec + Script Date : 10-05-2019 09:22:13 + Script Notes : Locations collected from Live +--]] + +function spawn(NPC) + waypoints(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) +end + +function respawn(NPC) +end + +function waypoints(NPC) + MovementLoopAddLocation(NPC, -182.20, 0.00, 182.36, 2, math.random(12, 18), "changegrid_Going_Down") + MovementLoopAddLocation(NPC, -182.59, 0.33, 188.16, 2, 0, "changegrid_Going_Up") + MovementLoopAddLocation(NPC, -183.20, 0.00, 190.60, 2, 0) + MovementLoopAddLocation(NPC, -182.88, 0.00, 195.50, 2, 0) + MovementLoopAddLocation(NPC, -183.23, 0.00, 196.78, 2, math.random(12, 18)) + MovementLoopAddLocation(NPC, -182.15, 0.09, 194.07, 2, 0) + MovementLoopAddLocation(NPC, -182.15, 0.10, 194.00, 2, math.random(12, 18)) + MovementLoopAddLocation(NPC, -183.07, 0.28, 189.05, 2, 0) + MovementLoopAddLocation(NPC, -182.99, 0.37, 188.01, 2, 0) + MovementLoopAddLocation(NPC, -182.92, 0.00, 191.38, 2, 0) + MovementLoopAddLocation(NPC, -183.41, 0.01, 194.46, 2, math.random(12, 18)) + MovementLoopAddLocation(NPC, -182.17, 0.00, 195.92, 2, math.random(12, 18)) + MovementLoopAddLocation(NPC, -182.40, 0.00, 193.22, 2, 0) + MovementLoopAddLocation(NPC, -181.79, 0.00, 190.73, 2, 0) + MovementLoopAddLocation(NPC, -182.62, 0.27, 188.65, 2, 0) + MovementLoopAddLocation(NPC, -182.13, 0.00, 184.50, 2, math.random(12, 18), "changegrid_Going_Down") + MovementLoopAddLocation(NPC, -182.53, 0.48, 187.31, 2, 0, "changegrid_Going_Up") + MovementLoopAddLocation(NPC, -183.31, 0.27, 188.79, 2, 0) + MovementLoopAddLocation(NPC, -183.27, 0.00, 190.79, 2, math.random(12, 18)) + MovementLoopAddLocation(NPC, -182.23, 0.00, 194.85, 2, 0) + MovementLoopAddLocation(NPC, -182.29, 0.00, 194.97, 2, math.random(12, 18)) + MovementLoopAddLocation(NPC, -182.14, 0.45, 187.75, 2, 0) + MovementLoopAddLocation(NPC, -181.92, 0.29, 186.40, 2, 0) +end + +-------------------------------------------------------------------------------------- +-- NPC Change Grid +-------------------------------------------------------------------------------------- + +function changegrid_Going_Up(NPC) + SetGridID(NPC, 1555937977) +end + +function changegrid_Going_Down(NPC) + SetGridID(NPC, 667331216) +end + diff --git a/server/SpawnScripts/ThievesWay/asludgewalkerhatchling392586.lua b/server/SpawnScripts/ThievesWay/asludgewalkerhatchling392586.lua new file mode 100644 index 000000000..efdf37f0c --- /dev/null +++ b/server/SpawnScripts/ThievesWay/asludgewalkerhatchling392586.lua @@ -0,0 +1,61 @@ +--[[ + Script Name : SpawnScripts/ThievesWay/asludgewalkerhatchling392586.lua + Script Purpose : Waypoint Path for asludgewalkerhatchling392586.lua + Script Author : Rylec + Script Date : 09-15-2019 07:36:56 + Script Notes : Locations collected from Live +--]] + +function spawn(NPC) + waypoints(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) +end + +function respawn(NPC) +end + +function waypoints(NPC) + MovementLoopAddLocation(NPC, -180.06, 1.84, 7.60, 2, math.random(12, 18)) + MovementLoopAddLocation(NPC, -179.93, 1.22, 15.89, 2, math.random(12, 18)) + -- MovementLoopAddLocation(NPC, -180.16, 1.22, 17.04, 2, 0) + -- MovementLoopAddLocation(NPC, -180.16, 1.22, 17.01, 2, 0) + MovementLoopAddLocation(NPC, -179.34, 1.22, 14.84, 2, math.random(12, 18)) + MovementLoopAddLocation(NPC, -179.10, 1.54, 13.09, 2, 0) + MovementLoopAddLocation(NPC, -178.90, 1.63, 10.02, 2, 0) + MovementLoopAddLocation(NPC, -177.90, 1.98, 7.70, 2, 0) + MovementLoopAddLocation(NPC, -177.39, 1.97, 6.95, 2, 0, "changegrid_Going_Up") + MovementLoopAddLocation(NPC, -176.66, 1.35, 4.99, 2, 0) + MovementLoopAddLocation(NPC, -173.48, 1.26, 1.25, 2, math.random(12, 18)) + MovementLoopAddLocation(NPC, -177.77, 1.30, 5.76, 2, 0) + MovementLoopAddLocation(NPC, -180.01, 1.67, 6.82, 2, math.random(6, 8)) + -- MovementLoopAddLocation(NPC, -180.01, 1.64, 6.77, 2, 0) + MovementLoopAddLocation(NPC, -179.98, 1.26, 5.36, 2, math.random(12, 18)) + -- MovementLoopAddLocation(NPC, -180.05, 1.64, 8.88, 2, 0, "changegrid_Going_Down") + -- MovementLoopAddLocation(NPC, -179.81, 1.84, 7.33, 2, math.random(12, 18)) + -- MovementLoopAddLocation(NPC, -177.75, 1.31, 5.95, 2, 0, "changegrid_Going_Up") + MovementLoopAddLocation(NPC, -174.05, 1.27, 1.66, 2, math.random(12, 18)) + MovementLoopAddLocation(NPC, -172.07, 1.27, -0.66, 2, 0) + MovementLoopAddLocation(NPC, -172.05, 1.27, -0.66, 2, math.random(12, 18)) + MovementLoopAddLocation(NPC, -176.34, 1.32, 4.20, 2, math.random(12, 18)) + MovementLoopAddLocation(NPC, -176.90, 1.43, 5.87, 2, 0) + MovementLoopAddLocation(NPC, -177.50, 2.05, 7.56, 2, 0, "changegrid_Going_Down") + MovementLoopAddLocation(NPC, -178.97, 1.64, 9.41, 2, 0) + MovementLoopAddLocation(NPC, -179.42, 1.82, 11.00, 2, 0) + MovementLoopAddLocation(NPC, -180.03, 1.60, 12.48, 2, 0) + MovementLoopAddLocation(NPC, -180.09, 1.22, 14.86, 2, math.random(12, 18)) +end + +-------------------------------------------------------------------------------------- +-- NPC Change Grid +-------------------------------------------------------------------------------------- + +function changegrid_Going_Up(NPC) + SetGridID(NPC, 4000206445) +end + +function changegrid_Going_Down(NPC) + SetGridID(NPC, 2981397110) +end \ No newline at end of file diff --git a/server/SpawnScripts/ThievesWay/asludgewalkerhatchling392587.lua b/server/SpawnScripts/ThievesWay/asludgewalkerhatchling392587.lua new file mode 100644 index 000000000..e65f2848c --- /dev/null +++ b/server/SpawnScripts/ThievesWay/asludgewalkerhatchling392587.lua @@ -0,0 +1,64 @@ +--[[ + Script Name : SpawnScripts/ThievesWay/asludgewalkerhatchling392587.lua + Script Purpose : Waypoint Path for asludgewalkerhatchling392587.lua + Script Author : Rylec + Script Date : 09-15-2019 07:36:49 + Script Notes : Locations collected from Live +--]] + +function spawn(NPC) + waypoints(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) +end + +function respawn(NPC) +end + +function waypoints(NPC) + MovementLoopAddLocation(NPC, -178.22, 1.28, 1.69, 2, math.random(12, 18)) + MovementLoopAddLocation(NPC, -175.52, 1.26, 1.48, 2, math.random(12, 18)) + MovementLoopAddLocation(NPC, -173.38, 1.26, 1.00, 2, 0) + MovementLoopAddLocation(NPC, -172.04, 1.59, 0.96, 2, 0) + MovementLoopAddLocation(NPC, -170.02, 1.34, -0.27, 2, 0) + MovementLoopAddLocation(NPC, -168.96, 1.34, -0.36, 2, 0) + MovementLoopAddLocation(NPC, -170.38, 1.34, 1.18, 2, math.random(12, 18)) + MovementLoopAddLocation(NPC, -171.38, 1.61, 1.09, 2, 0) + MovementLoopAddLocation(NPC, -173.09, 1.66, 2.54, 2, 0) + MovementLoopAddLocation(NPC, -175.91, 1.33, 3.97, 2, 0) + MovementLoopAddLocation(NPC, -177.73, 1.32, 6.11, 2, 0) + MovementLoopAddLocation(NPC, -178.16, 1.93, 7.51, 2, 0, "changegrid_Going_Down") + MovementLoopAddLocation(NPC, -179.90, 1.84, 7.67, 2, 0) + MovementLoopAddLocation(NPC, -178.68, 1.26, 4.92, 2, 0, "changegrid_Going_Up") + MovementLoopAddLocation(NPC, -177.22, 1.26, 2.75, 2, 0) + MovementLoopAddLocation(NPC, -176.62, 1.26, 0.98, 2, 0) + MovementLoopAddLocation(NPC, -175.02, 1.31, -0.41, 2, 0) + MovementLoopAddLocation(NPC, -176.09, 1.26, 2.08, 2, math.random(12, 18)) + MovementLoopAddLocation(NPC, -176.76, 1.29, 4.17, 2, 0) + MovementLoopAddLocation(NPC, -177.90, 1.28, 5.51, 2, 0) + MovementLoopAddLocation(NPC, -178.12, 1.94, 7.57, 2, 0, "changegrid_Going_Down") + MovementLoopAddLocation(NPC, -178.83, 1.64, 9.54, 2, 0) + MovementLoopAddLocation(NPC, -179.17, 1.82, 10.84, 2, 0) + MovementLoopAddLocation(NPC, -179.86, 1.61, 12.29, 2, 0) + MovementLoopAddLocation(NPC, -180.08, 1.22, 14.66, 2, 0) + MovementLoopAddLocation(NPC, -180.21, 1.22, 16.09, 2, math.random(12, 18)) + MovementLoopAddLocation(NPC, -180.19, 1.22, 18.72, 2, math.random(12, 18)) + MovementLoopAddLocation(NPC, -179.99, 1.80, 11.34, 2, 0) + MovementLoopAddLocation(NPC, -179.13, 1.84, 8.09, 2, 0) + MovementLoopAddLocation(NPC, -178.37, 1.26, 5.49, 2, 0, "changegrid_Going_Up") + -- MovementLoopAddLocation(NPC, -178.45, 1.30, 2.23, 2, math.random(12, 18)) +end + +-------------------------------------------------------------------------------------- +-- NPC Change Grid +-------------------------------------------------------------------------------------- + +function changegrid_Going_Up(NPC) + SetGridID(NPC, 4000206445) +end + +function changegrid_Going_Down(NPC) + SetGridID(NPC, 2981397110) +end \ No newline at end of file diff --git a/server/SpawnScripts/ThievesWay/asludgewalkerhatchling392588.lua b/server/SpawnScripts/ThievesWay/asludgewalkerhatchling392588.lua new file mode 100644 index 000000000..61858de82 --- /dev/null +++ b/server/SpawnScripts/ThievesWay/asludgewalkerhatchling392588.lua @@ -0,0 +1,47 @@ +--[[ + Script Name : SpawnScripts/ThievesWay/asludgewalkerhatchling392588.lua + Script Purpose : Waypoint Path for asludgewalkerhatchling392588.lua + Script Author : Rylec + Script Date : 09-17-2019 08:39:22 + Script Notes : Locations collected from Live +--]] + +function spawn(NPC) + waypoints(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) +end + +function respawn(NPC) +end + +function waypoints(NPC) + MovementLoopAddLocation(NPC, -179.54, 1.22, 23.35, 2, math.random(12, 18)) + MovementLoopAddLocation(NPC, -177.52, 1.22, 25.48, 2, 0) + MovementLoopAddLocation(NPC, -177.46, 1.22, 25.48, 2, math.random(12, 18)) + MovementLoopAddLocation(NPC, -175.32, 1.22, 25.76, 2, 0) + MovementLoopAddLocation(NPC, -174.46, 1.25, 26.47, 2, math.random(12, 18)) + MovementLoopAddLocation(NPC, -174.23, 1.26, 27.87, 2, 0) + MovementLoopAddLocation(NPC, -175.47, 1.22, 29.62, 2, 0) + MovementLoopAddLocation(NPC, -176.12, 1.22, 31.48, 2, 0) + MovementLoopAddLocation(NPC, -176.42, 1.22, 32.69, 2, 0) + MovementLoopAddLocation(NPC, -177.44, 1.22, 34.12, 2, 0) + MovementLoopAddLocation(NPC, -177.44, 1.22, 34.07, 2, math.random(12, 18)) + MovementLoopAddLocation(NPC, -176.82, 1.22, 27.96, 2, 0) + MovementLoopAddLocation(NPC, -176.06, 1.22, 26.11, 2, 0) + MovementLoopAddLocation(NPC, -176.53, 1.22, 24.31, 2, math.random(12, 18)) + MovementLoopAddLocation(NPC, -176.09, 1.22, 26.18, 2, 0) + MovementLoopAddLocation(NPC, -175.56, 1.22, 31.65, 2, 0) + MovementLoopAddLocation(NPC, -175.44, 1.24, 32.51, 2, 0) + MovementLoopAddLocation(NPC, -175.43, 1.24, 32.55, 2, math.random(12, 18)) + MovementLoopAddLocation(NPC, -177.54, 1.30, 35.76, 2, math.random(12, 18)) + MovementLoopAddLocation(NPC, -179.42, 1.22, 31.44, 2, math.random(12, 18)) + MovementLoopAddLocation(NPC, -179.47, 1.22, 33.61, 2, 0) + MovementLoopAddLocation(NPC, -179.48, 1.22, 33.64, 2, math.random(12, 18)) + MovementLoopAddLocation(NPC, -179.70, 1.22, 32.18, 2, 0) + MovementLoopAddLocation(NPC, -180.02, 1.22, 29.88, 2, 0) + MovementLoopAddLocation(NPC, -181.55, 1.28, 24.70, 2, math.random(12, 18)) +end + diff --git a/server/SpawnScripts/ThievesWay/asludgewalkerhatchling392591.lua b/server/SpawnScripts/ThievesWay/asludgewalkerhatchling392591.lua new file mode 100644 index 000000000..a6da36298 --- /dev/null +++ b/server/SpawnScripts/ThievesWay/asludgewalkerhatchling392591.lua @@ -0,0 +1,48 @@ +--[[ + Script Name : SpawnScripts/ThievesWay/asludgewalkerhatchling392591.lua + Script Purpose : Waypoint Path for asludgewalkerhatchling392591.lua + Script Author : Rylec + Script Date : 09-17-2019 08:39:48 + Script Notes : Locations collected from Live +--]] + +function spawn(NPC) + waypoints(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) +end + +function respawn(NPC) +end + +function waypoints(NPC) + MovementLoopAddLocation(NPC, -172.23, 1.79, 62.10, 2, math.random(12, 18)) + MovementLoopAddLocation(NPC, -170.14, 1.22, 61.96, 2, 0) + MovementLoopAddLocation(NPC, -169.05, 1.22, 61.28, 2, math.random(12, 18)) + MovementLoopAddLocation(NPC, -170.01, 1.22, 61.13, 2, 0) + MovementLoopAddLocation(NPC, -171.12, 1.62, 61.19, 2, 0) + MovementLoopAddLocation(NPC, -172.51, 1.79, 60.16, 2, 0) + MovementLoopAddLocation(NPC, -174.49, 1.28, 58.94, 2, 0, "changegrid_Going_Down") + MovementLoopAddLocation(NPC, -176.32, 1.23, 58.02, 2, 0) + MovementLoopAddLocation(NPC, -176.39, 1.23, 57.92, 2, math.random(12, 18)) + MovementLoopAddLocation(NPC, -175.99, 1.22, 59.80, 2, 0) + MovementLoopAddLocation(NPC, -176.51, 1.26, 61.14, 2, 0) + MovementLoopAddLocation(NPC, -176.47, 1.27, 61.21, 2, math.random(12, 18)) + MovementLoopAddLocation(NPC, -174.32, 1.24, 61.84, 2, 0) + MovementLoopAddLocation(NPC, -172.88, 1.78, 61.84, 2, 0, "changegrid_Going_Up") +end + +-------------------------------------------------------------------------------------- +-- NPC Change Grid +-------------------------------------------------------------------------------------- + +function changegrid_Going_Up(NPC) + SetGridID(NPC, 3098524280) +end + +function changegrid_Going_Down(NPC) + SetGridID(NPC, 2981397110) +end + diff --git a/server/SpawnScripts/ThievesWay/asludgewalkerhatchling392595.lua b/server/SpawnScripts/ThievesWay/asludgewalkerhatchling392595.lua new file mode 100644 index 000000000..f47c905b4 --- /dev/null +++ b/server/SpawnScripts/ThievesWay/asludgewalkerhatchling392595.lua @@ -0,0 +1,55 @@ +--[[ + Script Name : SpawnScripts/ThievesWay/asludgewalkerhatchling392595.lua + Script Purpose : Waypoint Path for asludgewalkerhatchling392595.lua + Script Author : Rylec + Script Date : 09-17-2019 08:39:48 + Script Notes : Locations collected from Live +--]] + +function spawn(NPC) + waypoints(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) +end + +function respawn(NPC) +end + +function waypoints(NPC) + MovementLoopAddLocation(NPC, -179.30, 1.26, 58.51, 2, math.random(12, 18)) + MovementLoopAddLocation(NPC, -179.27, 1.22, 56.08, 2, 0) + MovementLoopAddLocation(NPC, -179.04, 1.25, 53.96, 2, 0) + MovementLoopAddLocation(NPC, -179.19, 1.34, 48.83, 2, math.random(12, 18)) + MovementLoopAddLocation(NPC, -178.14, 1.58, 51.81, 2, 0) + MovementLoopAddLocation(NPC, -177.25, 1.42, 54.69, 2, 0) + MovementLoopAddLocation(NPC, -176.17, 1.46, 55.82, 2, 0) + MovementLoopAddLocation(NPC, -174.83, 1.42, 57.49, 2, 0, "changegrid_Going_Up") + MovementLoopAddLocation(NPC, -172.07, 1.87, 59.30, 2, 0) + MovementLoopAddLocation(NPC, -171.03, 1.57, 60.25, 2, math.random(12, 18)) + MovementLoopAddLocation(NPC, -172.44, 1.79, 60.13, 2, 0) + MovementLoopAddLocation(NPC, -172.47, 1.79, 60.15, 2, math.random(12, 18)) + MovementLoopAddLocation(NPC, -172.24, 1.78, 61.37, 2, 0) + MovementLoopAddLocation(NPC, -172.27, 1.78, 61.27, 2, math.random(12, 18), "changegrid_Going_Down") + MovementLoopAddLocation(NPC, -173.21, 1.73, 59.89, 2, 0) + MovementLoopAddLocation(NPC, -175.49, 1.29, 57.89, 2, math.random(12, 18)) + MovementLoopAddLocation(NPC, -174.51, 1.22, 59.58, 2, 0) + MovementLoopAddLocation(NPC, -172.31, 1.80, 62.23, 2, math.random(12, 18), "changegrid_Going_Up") + MovementLoopAddLocation(NPC, -175.34, 1.22, 61.14, 2, 0, "changegrid_Going_Down") + MovementLoopAddLocation(NPC, -176.41, 1.22, 60.22, 2, 0) + MovementLoopAddLocation(NPC, -178.45, 1.24, 59.02, 2, 0) +end + +-------------------------------------------------------------------------------------- +-- NPC Change Grid +-------------------------------------------------------------------------------------- + +function changegrid_Going_Up(NPC) + SetGridID(NPC, 3098524280) +end + +function changegrid_Going_Down(NPC) + SetGridID(NPC, 2981397110) +end + diff --git a/server/SpawnScripts/ThievesWay/asludgewalkerhatchling392596.lua b/server/SpawnScripts/ThievesWay/asludgewalkerhatchling392596.lua new file mode 100644 index 000000000..a0f68b144 --- /dev/null +++ b/server/SpawnScripts/ThievesWay/asludgewalkerhatchling392596.lua @@ -0,0 +1,39 @@ +--[[ + Script Name : SpawnScripts/ThievesWay/asludgewalkerhatchling392596.lua + Script Purpose : Waypoint Path for asludgewalkerhatchling392596.lua + Script Author : Rylec + Script Date : 09-17-2019 08:39:22 + Script Notes : Locations collected from Live +--]] + +function spawn(NPC) + waypoints(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) +end + +function respawn(NPC) +end + +function waypoints(NPC) + MovementLoopAddLocation(NPC, -181.35, 1.26, 29.43, 2, math.random(12, 18)) + MovementLoopAddLocation(NPC, -181.66, 1.29, 27.84, 2, 0) + MovementLoopAddLocation(NPC, -181.59, 1.28, 27.81, 2, math.random(12, 18)) + MovementLoopAddLocation(NPC, -179.90, 1.22, 29.98, 2, 0) + MovementLoopAddLocation(NPC, -178.46, 1.22, 35.15, 2, 0) + MovementLoopAddLocation(NPC, -178.47, 1.22, 35.19, 2, math.random(12, 18)) + MovementLoopAddLocation(NPC, -176.99, 1.22, 27.76, 2, 0) + MovementLoopAddLocation(NPC, -176.01, 1.22, 25.81, 2, 0) + MovementLoopAddLocation(NPC, -176.46, 1.22, 24.59, 2, 0) + MovementLoopAddLocation(NPC, -176.44, 1.22, 24.49, 2, math.random(12, 18)) + MovementLoopAddLocation(NPC, -177.39, 1.26, 22.71, 2, math.random(12, 18)) + MovementLoopAddLocation(NPC, -176.31, 1.22, 29.44, 2, 0) + MovementLoopAddLocation(NPC, -176.35, 1.22, 29.47, 2, math.random(12, 18)) + MovementLoopAddLocation(NPC, -178.41, 1.22, 31.27, 2, math.random(12, 18)) + MovementLoopAddLocation(NPC, -178.40, 1.22, 32.69, 2, 0) + MovementLoopAddLocation(NPC, -178.45, 1.22, 32.65, 2, math.random(12, 18)) + MovementLoopAddLocation(NPC, -179.68, 1.22, 31.22, 2, 0) + MovementLoopAddLocation(NPC, -180.77, 1.22, 30.34, 2, 0) +end diff --git a/server/SpawnScripts/ThievesWay/asludgewalkerhatchling392597.lua b/server/SpawnScripts/ThievesWay/asludgewalkerhatchling392597.lua new file mode 100644 index 000000000..5dfd8f79e --- /dev/null +++ b/server/SpawnScripts/ThievesWay/asludgewalkerhatchling392597.lua @@ -0,0 +1,34 @@ +--[[ + Script Name : SpawnScripts/ThievesWay/asludgewalkerhatchling392597.lua + Script Purpose : Waypoint Path for asludgewalkerhatchling392597.lua + Script Author : Rylec + Script Date : 09-22-2019 09:41:16 + Script Notes : Locations collected from Live +--]] + +function spawn(NPC) + waypoints(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) +end + +function respawn(NPC) +end + +function waypoints(NPC) + MovementLoopAddLocation(NPC, -154.60, 1.34, 61.88, 2, math.random(12, 18)) + MovementLoopAddLocation(NPC, -153.73, 1.34, 62.09, 2, 0) + MovementLoopAddLocation(NPC, -151.48, 1.34, 61.81, 2, math.random(12, 18)) + MovementLoopAddLocation(NPC, -157.95, 1.45, 61.92, 2, 0) + MovementLoopAddLocation(NPC, -157.44, 1.34, 61.90, 2, math.random(12, 18)) + MovementLoopAddLocation(NPC, -155.47, 1.34, 61.56, 2, math.random(12, 18)) + MovementLoopAddLocation(NPC, -158.57, 1.58, 61.17, 2, 0) + MovementLoopAddLocation(NPC, -161.35, 1.22, 61.85, 2, math.random(12, 18)) + MovementLoopAddLocation(NPC, -154.31, 1.34, 62.64, 2, 0) + MovementLoopAddLocation(NPC, -152.16, 1.34, 62.32, 2, 0) + MovementLoopAddLocation(NPC, -151.39, 1.34, 61.78, 2, math.random(12, 18)) +end + + diff --git a/server/SpawnScripts/ThievesWay/asludgewalkerhatchling392598.lua b/server/SpawnScripts/ThievesWay/asludgewalkerhatchling392598.lua new file mode 100644 index 000000000..6be20c9bd --- /dev/null +++ b/server/SpawnScripts/ThievesWay/asludgewalkerhatchling392598.lua @@ -0,0 +1,46 @@ +--[[ + Script Name : SpawnScripts/ThievesWay/asludgewalkerhatchling392598.lua + Script Purpose : Waypoint Path for asludgewalkerhatchling392598.lua + Script Author : Rylec + Script Date : 09-22-2019 09:41:19 + Script Notes : Locations collected from Live +--]] + +function spawn(NPC) + waypoints(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) +end + +function respawn(NPC) +end + +function waypoints(NPC) + MovementLoopAddLocation(NPC, -161.07, 1.22, 60.84, 2, math.random(12, 18)) + MovementLoopAddLocation(NPC, -154.71, 1.34, 61.25, 2, 0) + MovementLoopAddLocation(NPC, -153.44, 1.34, 60.94, 2, math.random(12, 18)) + MovementLoopAddLocation(NPC, -158.81, 1.82, 58.66, 2, math.random(12, 18)) + MovementLoopAddLocation(NPC, -156.70, 1.34, 59.40, 2, 0) + MovementLoopAddLocation(NPC, -155.12, 1.34, 60.98, 2, 0) + MovementLoopAddLocation(NPC, -153.22, 1.34, 61.62, 2, math.random(12, 18)) + MovementLoopAddLocation(NPC, -151.23, 1.34, 62.76, 2, 0) + MovementLoopAddLocation(NPC, -150.90, 1.34, 62.87, 2, math.random(12, 18)) + MovementLoopAddLocation(NPC, -156.14, 1.34, 61.51, 2, 0) + MovementLoopAddLocation(NPC, -158.66, 1.58, 60.92, 2, 0) + MovementLoopAddLocation(NPC, -161.76, 1.22, 61.49, 2, math.random(12, 18)) + MovementLoopAddLocation(NPC, -159.10, 1.58, 60.97, 2, 0) + MovementLoopAddLocation(NPC, -158.96, 1.58, 62.30, 2, 0) + MovementLoopAddLocation(NPC, -158.58, 1.58, 61.96, 2, math.random(12, 18)) + MovementLoopAddLocation(NPC, -156.53, 1.34, 60.84, 2, 0) + MovementLoopAddLocation(NPC, -156.86, 1.34, 60.85, 2, math.random(12, 18)) + MovementLoopAddLocation(NPC, -158.74, 1.58, 61.13, 2, 0) + MovementLoopAddLocation(NPC, -159.79, 1.45, 60.89, 2, math.random(12, 18)) + MovementLoopAddLocation(NPC, -156.05, 1.34, 60.66, 2, 0) + MovementLoopAddLocation(NPC, -156.28, 1.34, 60.78, 2, math.random(12, 18)) + MovementLoopAddLocation(NPC, -158.38, 1.58, 62.00, 2, 0) + MovementLoopAddLocation(NPC, -162.59, 1.22, 61.95, 2, math.random(12, 18)) + MovementLoopAddLocation(NPC, -161.84, 1.22, 62.08, 2, 0) + MovementLoopAddLocation(NPC, -161.34, 1.22, 61.94, 2, math.random(12, 18)) +end diff --git a/server/SpawnScripts/ThievesWay/asludgewalkerhatchling392599.lua b/server/SpawnScripts/ThievesWay/asludgewalkerhatchling392599.lua new file mode 100644 index 000000000..5ec239088 --- /dev/null +++ b/server/SpawnScripts/ThievesWay/asludgewalkerhatchling392599.lua @@ -0,0 +1,42 @@ +--[[ + Script Name : SpawnScripts/ThievesWay/asludgewalkerhatchling392599.lua + Script Purpose : Waypoint Path for asludgewalkerhatchling392599.lua + Script Author : Rylec + Script Date : 09-27-2019 05:46:32 + Script Notes : Locations collected from Live +--]] + +function spawn(NPC) + waypoints(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) +end + +function respawn(NPC) +end + +function waypoints(NPC) + MovementLoopAddLocation(NPC, -164.04, 0.11, 215.12, 2, math.random(12, 18)) + MovementLoopAddLocation(NPC, -161.34, 0.00, 216.36, 2, 0) + MovementLoopAddLocation(NPC, -157.64, 0.00, 216.58, 2, 0) + MovementLoopAddLocation(NPC, -155.68, 0.00, 217.99, 2, 0) + MovementLoopAddLocation(NPC, -155.71, 0.00, 217.97, 2, math.random(12, 18)) + MovementLoopAddLocation(NPC, -157.75, 0.00, 217.29, 2, 0) + MovementLoopAddLocation(NPC, -163.08, 0.00, 217.60, 2, 0) + MovementLoopAddLocation(NPC, -165.30, 0.00, 217.11, 2, math.random(12, 18)) + MovementLoopAddLocation(NPC, -162.63, 0.02, 218.19, 2, 0) + MovementLoopAddLocation(NPC, -159.48, 0.24, 217.98, 2, 0) + MovementLoopAddLocation(NPC, -157.40, 0.00, 216.89, 2, math.random(12, 18)) + MovementLoopAddLocation(NPC, -156.53, 0.00, 218.02, 2, 0) + MovementLoopAddLocation(NPC, -155.27, 0.01, 218.12, 2, math.random(12, 18)) + MovementLoopAddLocation(NPC, -154.38, 0.00, 217.89, 2, 0) + MovementLoopAddLocation(NPC, -153.58, 0.01, 218.10, 2, math.random(12, 18)) + MovementLoopAddLocation(NPC, -154.06, 0.00, 218.06, 2, 0) + MovementLoopAddLocation(NPC, -158.89, 0.24, 217.90, 2, 0) + MovementLoopAddLocation(NPC, -163.54, 0.00, 216.55, 2, 0) + MovementLoopAddLocation(NPC, -163.94, 0.09, 215.24, 2, 0) +end + + diff --git a/server/SpawnScripts/ThievesWay/asludgewalkerhatchling392600.lua b/server/SpawnScripts/ThievesWay/asludgewalkerhatchling392600.lua new file mode 100644 index 000000000..700292475 --- /dev/null +++ b/server/SpawnScripts/ThievesWay/asludgewalkerhatchling392600.lua @@ -0,0 +1,40 @@ +--[[ + Script Name : SpawnScripts/ThievesWay/asludgewalkerhatchling392600.lua + Script Purpose : Waypoint Path for asludgewalkerhatchling392600.lua + Script Author : Rylec + Script Date : 09-27-2019 05:46:37 + Script Notes : Locations collected from Live +--]] + +function spawn(NPC) + waypoints(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) +end + +function respawn(NPC) +end + +function waypoints(NPC) + MovementLoopAddLocation(NPC, -160.68, 0.05, 218.50, 2, math.random(12, 18)) + MovementLoopAddLocation(NPC, -159.29, 0.24, 218.13, 2, 0) + MovementLoopAddLocation(NPC, -156.80, 0.01, 218.09, 2, 0) + MovementLoopAddLocation(NPC, -155.08, 0.00, 217.77, 2, 0) + MovementLoopAddLocation(NPC, -154.42, 0.01, 218.08, 2, math.random(12, 18)) + MovementLoopAddLocation(NPC, -152.57, 0.00, 217.99, 2, 0) + MovementLoopAddLocation(NPC, -151.32, 0.01, 218.10, 2, math.random(12, 18)) + MovementLoopAddLocation(NPC, -152.04, 0.00, 217.99, 2, 0) + MovementLoopAddLocation(NPC, -153.18, 0.00, 217.18, 2, math.random(12, 18)) + MovementLoopAddLocation(NPC, -155.31, 0.00, 217.14, 2, 0) + MovementLoopAddLocation(NPC, -155.29, 0.00, 217.14, 2, math.random(12, 18)) + MovementLoopAddLocation(NPC, -154.25, 0.00, 217.17, 2, 0) + MovementLoopAddLocation(NPC, -154.15, 0.00, 217.29, 2, math.random(12, 18)) + MovementLoopAddLocation(NPC, -152.23, 0.00, 217.96, 2, 0) + MovementLoopAddLocation(NPC, -150.82, 0.02, 218.21, 2, math.random(12, 18)) + MovementLoopAddLocation(NPC, -151.72, 0.00, 218.06, 2, 0) + MovementLoopAddLocation(NPC, -157.44, 0.00, 217.60, 2, 0) +end + + diff --git a/server/SpawnScripts/ThievesWay/asludgewalkerhatchling392601.lua b/server/SpawnScripts/ThievesWay/asludgewalkerhatchling392601.lua new file mode 100644 index 000000000..2d81c94b7 --- /dev/null +++ b/server/SpawnScripts/ThievesWay/asludgewalkerhatchling392601.lua @@ -0,0 +1,80 @@ +--[[ + Script Name : SpawnScripts/ThievesWay/asludgewalkerhatchling392601.lua + Script Purpose : Waypoint Path for asludgewalkerhatchling392601.lua + Script Author : Rylec + Script Date : 09-28-2019 10:48:22 + Script Notes : Locations collected from Live +--]] + +function spawn(NPC) + waypoints(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) +end + +function respawn(NPC) +end + +function waypoints(NPC) + MovementLoopAddLocation(NPC, -172.20, 0.03, 215.87, 2, math.random(12, 18)) + MovementLoopAddLocation(NPC, -174.03, 0.00, 216.77, 2, 0) + MovementLoopAddLocation(NPC, -178.55, 0.01, 216.79, 2, math.random(12, 18)) + MovementLoopAddLocation(NPC, -176.41, 0.00, 217.04, 2, 0) + MovementLoopAddLocation(NPC, -176.43, 0.00, 217.00, 2, math.random(12, 18)) + MovementLoopAddLocation(NPC, -176.82, 0.00, 215.65, 2, 0) + MovementLoopAddLocation(NPC, -179.29, 0.04, 212.97, 2, 0) + MovementLoopAddLocation(NPC, -181.90, 0.00, 208.01, 2, 0, "changegrid_Going_Down") + MovementLoopAddLocation(NPC, -181.47, 0.00, 205.81, 2, math.random(12, 18)) + MovementLoopAddLocation(NPC, -181.93, 0.00, 207.92, 2, 0) + MovementLoopAddLocation(NPC, -182.12, 0.00, 211.93, 2, 0, "changegrid_Going_Up") + MovementLoopAddLocation(NPC, -181.47, 0.00, 212.85, 2, math.random(12, 18)) + MovementLoopAddLocation(NPC, -181.82, 0.00, 212.28, 2, 0) + MovementLoopAddLocation(NPC, -182.54, 0.00, 206.52, 2, math.random(12, 18), "changegrid_Going_Down") + MovementLoopAddLocation(NPC, -181.96, 0.00, 208.13, 2, 0) + MovementLoopAddLocation(NPC, -179.47, 0.14, 211.62, 2, 0, "changegrid_Going_Up") + MovementLoopAddLocation(NPC, -176.68, 0.16, 214.26, 2, 0) + MovementLoopAddLocation(NPC, -173.40, 0.00, 216.26, 2, 0) + MovementLoopAddLocation(NPC, -171.68, 0.00, 217.80, 2, 0) + MovementLoopAddLocation(NPC, -171.66, 0.00, 217.79, 2, math.random(12, 18)) + MovementLoopAddLocation(NPC, -172.09, 0.00, 217.85, 2, 0) + MovementLoopAddLocation(NPC, -176.21, 0.22, 214.13, 2, 0) + MovementLoopAddLocation(NPC, -178.50, 0.14, 212.59, 2, 0) + MovementLoopAddLocation(NPC, -181.06, 0.29, 209.31, 2, 0, "changegrid_Going_Down") + MovementLoopAddLocation(NPC, -181.40, 0.01, 207.69, 2, math.random(12, 18)) + MovementLoopAddLocation(NPC, -181.53, 0.24, 209.09, 2, 0) + MovementLoopAddLocation(NPC, -178.29, 0.11, 213.07, 2, 0, "changegrid_Going_Up") + MovementLoopAddLocation(NPC, -174.45, 0.06, 215.53, 2, 0) + MovementLoopAddLocation(NPC, -170.55, 0.00, 216.59, 2, 0) + MovementLoopAddLocation(NPC, -168.50, 0.00, 217.96, 2, 0) + MovementLoopAddLocation(NPC, -168.48, 0.00, 217.95, 2, math.random(12, 18)) + MovementLoopAddLocation(NPC, -169.91, 0.00, 216.67, 2, 0) + MovementLoopAddLocation(NPC, -174.06, 0.04, 215.81, 2, 0) + MovementLoopAddLocation(NPC, -175.97, 0.24, 214.11, 2, 0) + MovementLoopAddLocation(NPC, -178.64, 0.14, 212.51, 2, 0) + MovementLoopAddLocation(NPC, -180.06, 0.22, 210.30, 2, 0) + MovementLoopAddLocation(NPC, -180.55, 0.09, 207.92, 2, 0, "changegrid_Going_Down") + MovementLoopAddLocation(NPC, -181.28, 0.02, 206.22, 2, 0) + MovementLoopAddLocation(NPC, -181.12, 0.23, 204.76, 2, 0) + MovementLoopAddLocation(NPC, -181.06, 0.34, 203.70, 2, math.random(12, 18)) + MovementLoopAddLocation(NPC, -182.23, 0.00, 205.26, 2, 0) + MovementLoopAddLocation(NPC, -180.92, 0.06, 207.72, 2, 0) + MovementLoopAddLocation(NPC, -179.99, 0.07, 211.72, 2, 0, "changegrid_Going_Up") + MovementLoopAddLocation(NPC, -177.57, 0.05, 214.54, 2, 0) + MovementLoopAddLocation(NPC, -177.15, 0.00, 216.20, 2, 0) + MovementLoopAddLocation(NPC, -175.73, 0.00, 216.80, 2, math.random(12, 18)) + MovementLoopAddLocation(NPC, -173.95, 0.00, 217.38, 2, 0) +end + +-------------------------------------------------------------------------------------- +-- NPC Change Grid +-------------------------------------------------------------------------------------- + +function changegrid_Going_Up(NPC) + SetGridID(NPC, 3053675711) +end + +function changegrid_Going_Down(NPC) + SetGridID(NPC, 1555937977) +end diff --git a/server/SpawnScripts/ThievesWay/asludgewalkerhatchling392602.lua b/server/SpawnScripts/ThievesWay/asludgewalkerhatchling392602.lua new file mode 100644 index 000000000..794aa6a77 --- /dev/null +++ b/server/SpawnScripts/ThievesWay/asludgewalkerhatchling392602.lua @@ -0,0 +1,64 @@ +--[[ + Script Name : SpawnScripts/ThievesWay/asludgewalkerhatchling392602.lua + Script Purpose : Waypoint Path for asludgewalkerhatchling392602.lua + Script Author : Rylec + Script Date : 09-28-2019 10:48:26 + Script Notes : Locations collected from Live +--]] + +function spawn(NPC) + waypoints(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) +end + +function respawn(NPC) +end + +function waypoints(NPC) + MovementLoopAddLocation(NPC, -178.58, 0.00, 214.77, 2, math.random(12, 18)) + MovementLoopAddLocation(NPC, -176.73, 0.03, 215.31, 2, 0) + MovementLoopAddLocation(NPC, -173.44, 0.00, 216.91, 2, math.random(12, 18)) + MovementLoopAddLocation(NPC, -178.21, 0.02, 216.98, 2, 0) + MovementLoopAddLocation(NPC, -179.51, 0.06, 216.84, 2, math.random(12, 18)) + MovementLoopAddLocation(NPC, -179.71, 0.03, 216.22, 2, 0) + MovementLoopAddLocation(NPC, -181.62, 0.08, 215.03, 2, math.random(12, 18)) + MovementLoopAddLocation(NPC, -178.66, 0.00, 216.49, 2, 0) + MovementLoopAddLocation(NPC, -174.69, 0.00, 216.74, 2, math.random(12, 18)) + MovementLoopAddLocation(NPC, -171.76, 0.00, 217.37, 2, 0) + MovementLoopAddLocation(NPC, -169.62, 0.01, 218.07, 2, math.random(12, 18)) + MovementLoopAddLocation(NPC, -171.79, 0.00, 217.61, 2, 0) + MovementLoopAddLocation(NPC, -173.13, 0.00, 216.21, 2, 0) + MovementLoopAddLocation(NPC, -174.71, 0.06, 215.51, 2, 0) + MovementLoopAddLocation(NPC, -175.58, 0.26, 214.18, 2, 0) + MovementLoopAddLocation(NPC, -178.00, 0.13, 213.22, 2, 0) + MovementLoopAddLocation(NPC, -179.40, 0.20, 211.27, 2, 0) + MovementLoopAddLocation(NPC, -179.87, 0.47, 209.52, 2, 0, "changegrid_Going_Down") + MovementLoopAddLocation(NPC, -181.12, 0.04, 207.34, 2, 0) + MovementLoopAddLocation(NPC, -181.39, 0.18, 204.02, 2, 0) + MovementLoopAddLocation(NPC, -182.39, 0.03, 200.31, 2, 0) + MovementLoopAddLocation(NPC, -182.98, 0.00, 203.01, 2, 0) + MovementLoopAddLocation(NPC, -182.54, 0.00, 205.41, 2, 0) + MovementLoopAddLocation(NPC, -182.14, 0.24, 208.92, 2, 0) + MovementLoopAddLocation(NPC, -180.13, 0.03, 212.33, 2, 0, "changegrid_Going_Up") + MovementLoopAddLocation(NPC, -177.73, 0.06, 214.24, 2, 0) + MovementLoopAddLocation(NPC, -176.43, 0.00, 216.09, 2, math.random(12, 18)) + MovementLoopAddLocation(NPC, -174.03, 0.01, 216.04, 2, 0) + MovementLoopAddLocation(NPC, -168.81, 0.00, 217.72, 2, math.random(12, 18)) + MovementLoopAddLocation(NPC, -172.43, 0.00, 216.77, 2, 0) + MovementLoopAddLocation(NPC, -174.37, 0.04, 215.80, 2, 0) +end + +-------------------------------------------------------------------------------------- +-- NPC Change Grid +-------------------------------------------------------------------------------------- + +function changegrid_Going_Up(NPC) + SetGridID(NPC, 3053675711) +end + +function changegrid_Going_Down(NPC) + SetGridID(NPC, 1555937977) +end diff --git a/server/SpawnScripts/ThievesWay/asludgewalkerhatchling392603.lua b/server/SpawnScripts/ThievesWay/asludgewalkerhatchling392603.lua new file mode 100644 index 000000000..554577528 --- /dev/null +++ b/server/SpawnScripts/ThievesWay/asludgewalkerhatchling392603.lua @@ -0,0 +1,62 @@ +--[[ + Script Name : SpawnScripts/ThievesWay/asludgewalkerhatchling392603.lua + Script Purpose : Waypoint Path for asludgewalkerhatchling392603.lua + Script Author : Rylec + Script Date : 09-28-2019 10:48:30 + Script Notes : Locations collected from Live +--]] + +function spawn(NPC) + waypoints(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) +end + +function respawn(NPC) +end + +function waypoints(NPC) + MovementLoopAddLocation(NPC, -182.12, 0.24, 209.16, 2, math.random(12, 18)) + MovementLoopAddLocation(NPC, -181.54, 0.00, 205.88, 2, 0) + MovementLoopAddLocation(NPC, -181.94, 0.00, 204.09, 2, math.random(12, 18)) + MovementLoopAddLocation(NPC, -182.17, 0.00, 206.76, 2, 0) + MovementLoopAddLocation(NPC, -181.10, 0.28, 208.80, 2, 0) + MovementLoopAddLocation(NPC, -179.94, 0.09, 211.41, 2, 0, "changegrid_Going_Up") + MovementLoopAddLocation(NPC, -177.31, 0.13, 213.87, 2, 0) + MovementLoopAddLocation(NPC, -175.77, 0.00, 216.35, 2, 0) + MovementLoopAddLocation(NPC, -173.50, 0.00, 216.79, 2, math.random(12, 18)) + MovementLoopAddLocation(NPC, -176.02, 0.02, 215.62, 2, 0) + MovementLoopAddLocation(NPC, -178.17, 0.07, 213.66, 2, 0) + MovementLoopAddLocation(NPC, -179.73, 0.00, 213.15, 2, math.random(12, 18)) + MovementLoopAddLocation(NPC, -180.25, 0.00, 214.62, 2, 0) + MovementLoopAddLocation(NPC, -179.62, 0.07, 216.81, 2, math.random(12, 18)) + MovementLoopAddLocation(NPC, -176.39, 0.00, 216.87, 2, 0) + MovementLoopAddLocation(NPC, -172.71, 0.00, 217.05, 2, 0) + MovementLoopAddLocation(NPC, -168.85, 0.03, 215.84, 2, math.random(12, 18)) + MovementLoopAddLocation(NPC, -171.25, 0.00, 216.36, 2, 0) + MovementLoopAddLocation(NPC, -179.44, 0.00, 215.07, 2, 0) + MovementLoopAddLocation(NPC, -179.46, 0.00, 215.03, 2, math.random(12, 18)) + MovementLoopAddLocation(NPC, -179.91, 0.00, 213.88, 2, 0) + MovementLoopAddLocation(NPC, -180.27, 0.05, 211.72, 2, 0) + MovementLoopAddLocation(NPC, -181.34, 0.26, 209.36, 2, math.random(12, 18), "changegrid_Going_Down") + MovementLoopAddLocation(NPC, -182.04, 0.00, 207.68, 2, 0) + MovementLoopAddLocation(NPC, -182.05, 0.00, 205.12, 2, 0) + MovementLoopAddLocation(NPC, -182.98, 0.00, 201.20, 2, 0) + MovementLoopAddLocation(NPC, -183.12, 0.00, 207.01, 2, 0) + MovementLoopAddLocation(NPC, -183.46, 0.24, 209.16, 2, 0) +end + +-------------------------------------------------------------------------------------- +-- NPC Change Grid +-------------------------------------------------------------------------------------- + +function changegrid_Going_Up(NPC) + SetGridID(NPC, 3053675711) +end + +function changegrid_Going_Down(NPC) + SetGridID(NPC, 1555937977) +end + diff --git a/server/SpawnScripts/ThievesWay/asludgewalkerhatchling392604.lua b/server/SpawnScripts/ThievesWay/asludgewalkerhatchling392604.lua new file mode 100644 index 000000000..80401ca3b --- /dev/null +++ b/server/SpawnScripts/ThievesWay/asludgewalkerhatchling392604.lua @@ -0,0 +1,44 @@ +--[[ + Script Name : SpawnScripts/ThievesWay/asludgewalkerhatchling392604.lua + Script Purpose : Waypoint Path for asludgewalkerhatchling392604.lua + Script Author : Rylec + Script Date : 10-05-2019 09:22:17 + Script Notes : Locations collected from Live +--]] + +function spawn(NPC) + waypoints(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) +end + +function respawn(NPC) +end + +function waypoints(NPC) + MovementLoopAddLocation(NPC, -182.23, 0.00, 196.92, 2, math.random(12, 18)) + MovementLoopAddLocation(NPC, -183.19, 0.00, 192.40, 2, 0) + MovementLoopAddLocation(NPC, -183.08, 0.28, 189.19, 2, 0) + MovementLoopAddLocation(NPC, -182.20, 0.00, 184.94, 2, math.random(12, 18), "changegrid_Going_Down") + MovementLoopAddLocation(NPC, -180.74, 0.00, 181.80, 2, 0) + MovementLoopAddLocation(NPC, -180.75, 0.00, 181.82, 2, math.random(12, 18)) + MovementLoopAddLocation(NPC, -184.38, 0.10, 184.24, 2, math.random(12, 18)) + MovementLoopAddLocation(NPC, -183.44, 0.28, 186.29, 2, 0, "changegrid_Going_Up") + MovementLoopAddLocation(NPC, -182.99, 0.00, 191.52, 2, 0) + MovementLoopAddLocation(NPC, -183.26, 0.10, 193.76, 2, 0) +end + +-------------------------------------------------------------------------------------- +-- NPC Change Grid +-------------------------------------------------------------------------------------- + +function changegrid_Going_Up(NPC) + SetGridID(NPC, 1555937977) +end + +function changegrid_Going_Down(NPC) + SetGridID(NPC, 667331216) +end + diff --git a/server/SpawnScripts/ThievesWay/asludgewalkerhatchling392605.lua b/server/SpawnScripts/ThievesWay/asludgewalkerhatchling392605.lua new file mode 100644 index 000000000..7debdf2d7 --- /dev/null +++ b/server/SpawnScripts/ThievesWay/asludgewalkerhatchling392605.lua @@ -0,0 +1,57 @@ +--[[ + Script Name : SpawnScripts/ThievesWay/asludgewalkerhatchling392605.lua + Script Purpose : Waypoint Path for asludgewalkerhatchling392605.lua + Script Author : Rylec + Script Date : 10-17-2019 03:26:57 + Script Notes : Locations collected from Live +--]] + +function spawn(NPC) + waypoints(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) +end + +function respawn(NPC) +end + +function waypoints(NPC) + MovementLoopAddLocation(NPC, -183.22, 0.00, 172.62, 2, math.random(12, 18), "changegrid_Going_Up") + MovementLoopAddLocation(NPC, -182.01, 0.00, 169.33, 2, 0, "changegrid_Going_Down") + MovementLoopAddLocation(NPC, -181.67, 0.00, 167.10, 2, 0) + MovementLoopAddLocation(NPC, -182.05, 0.00, 162.58, 2, 0) + MovementLoopAddLocation(NPC, -181.67, 0.00, 162.06, 2, math.random(12, 18)) + MovementLoopAddLocation(NPC, -181.93, 0.00, 162.10, 2, 0) + MovementLoopAddLocation(NPC, -181.96, 0.00, 164.41, 2, 0) + MovementLoopAddLocation(NPC, -182.50, 0.00, 166.69, 2, 0) + MovementLoopAddLocation(NPC, -182.68, 0.00, 168.04, 2, 0) + MovementLoopAddLocation(NPC, -183.22, 0.00, 165.58, 2, 0) + MovementLoopAddLocation(NPC, -184.38, 0.33, 160.77, 2, 0) + MovementLoopAddLocation(NPC, -182.61, 0.00, 156.45, 2, 0) + MovementLoopAddLocation(NPC, -182.62, 0.00, 156.45, 2, math.random(12, 18)) + MovementLoopAddLocation(NPC, -182.02, 0.00, 159.45, 2, 0) + MovementLoopAddLocation(NPC, -181.58, 0.00, 164.33, 2, math.random(12, 18)) + MovementLoopAddLocation(NPC, -182.05, 0.00, 167.04, 2, 0) + MovementLoopAddLocation(NPC, -181.60, 0.00, 169.34, 2, 0) + MovementLoopAddLocation(NPC, -181.65, 0.24, 170.62, 2, math.random(12, 18)) + MovementLoopAddLocation(NPC, -181.61, 0.00, 172.47, 2, math.random(12, 18), "changegrid_Going_Up") + MovementLoopAddLocation(NPC, -181.94, 0.23, 170.06, 2, 0, "changegrid_Going_Down") + MovementLoopAddLocation(NPC, -181.47, 0.00, 168.09, 2, 0) + MovementLoopAddLocation(NPC, -181.48, 0.00, 168.10, 2, math.random(12, 18)) + MovementLoopAddLocation(NPC, -181.46, 0.25, 170.41, 2, 0) +end + +-------------------------------------------------------------------------------------- +-- NPC Change Grid +-------------------------------------------------------------------------------------- + +function changegrid_Going_Up(NPC) + SetGridID(NPC, 667331216) +end + +function changegrid_Going_Down(NPC) + SetGridID(NPC, 3049532766) +end + diff --git a/server/SpawnScripts/ThievesWay/asludgewalkerhatchling392606.lua b/server/SpawnScripts/ThievesWay/asludgewalkerhatchling392606.lua new file mode 100644 index 000000000..843a3b601 --- /dev/null +++ b/server/SpawnScripts/ThievesWay/asludgewalkerhatchling392606.lua @@ -0,0 +1,35 @@ +--[[ + Script Name : SpawnScripts/ThievesWay/asludgewalkerhatchling392606.lua + Script Purpose : Waypoint Path for asludgewalkerhatchling392606.lua + Script Author : Rylec + Script Date : 10-17-2019 03:27:10 + Script Notes : Locations collected from Live +--]] + +function spawn(NPC) + waypoints(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) +end + +function respawn(NPC) +end + +function waypoints(NPC) + MovementLoopAddLocation(NPC, -181.40, 0.01, 166.59, 2, math.random(12, 18)) + MovementLoopAddLocation(NPC, -181.70, 0.00, 168.45, 2, 0) + MovementLoopAddLocation(NPC, -181.54, 0.00, 169.21, 2, math.random(12, 18)) + MovementLoopAddLocation(NPC, -182.56, 0.00, 168.35, 2, math.random(12, 18)) + MovementLoopAddLocation(NPC, -182.25, 0.00, 163.60, 2, 0) + MovementLoopAddLocation(NPC, -181.61, 0.00, 162.65, 2, math.random(12, 18)) + MovementLoopAddLocation(NPC, -181.88, 0.24, 160.55, 2, 0) + MovementLoopAddLocation(NPC, -181.52, 0.00, 158.68, 2, math.random(12, 18)) + MovementLoopAddLocation(NPC, -182.54, 0.00, 157.04, 2, 0) + MovementLoopAddLocation(NPC, -182.54, 0.00, 157.06, 2, math.random(12, 18)) + MovementLoopAddLocation(NPC, -181.94, 0.00, 163.96, 2, 0) + MovementLoopAddLocation(NPC, -182.20, 0.00, 167.58, 2, 0) + MovementLoopAddLocation(NPC, -181.54, 0.00, 168.45, 2, math.random(12, 18)) + MovementLoopAddLocation(NPC, -181.98, 0.00, 167.41, 2, 0) +end diff --git a/server/SpawnScripts/ThievesWay/asludgewalkerhatchling392607.lua b/server/SpawnScripts/ThievesWay/asludgewalkerhatchling392607.lua new file mode 100644 index 000000000..4fce7408c --- /dev/null +++ b/server/SpawnScripts/ThievesWay/asludgewalkerhatchling392607.lua @@ -0,0 +1,33 @@ +--[[ + Script Name : SpawnScripts/ThievesWay/asludgewalkerhatchling392607.lua + Script Purpose : Waypoint Path for asludgewalkerhatchling392607.lua + Script Author : Rylec + Script Date : 10-17-2019 03:28:22 + Script Notes : Locations collected from Live +--]] + +function spawn(NPC) + waypoints(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) +end + +function respawn(NPC) +end + +function waypoints(NPC) + MovementLoopAddLocation(NPC, -182.04, 0.00, 138.91, 2, math.random(12, 18)) + MovementLoopAddLocation(NPC, -182.09, 0.00, 140.31, 2, math.random(12, 18)) + MovementLoopAddLocation(NPC, -182.35, 0.00, 135.37, 2, 0) + MovementLoopAddLocation(NPC, -181.42, 0.00, 133.17, 2, math.random(12, 18)) + MovementLoopAddLocation(NPC, -183.87, 0.05, 138.89, 2, 0) + MovementLoopAddLocation(NPC, -184.20, 0.08, 140.15, 2, math.random(12, 18)) + MovementLoopAddLocation(NPC, -180.22, 0.00, 137.84, 2, 0) + MovementLoopAddLocation(NPC, -177.73, 0.00, 136.13, 2, 0) + MovementLoopAddLocation(NPC, -177.34, 0.13, 134.33, 2, math.random(12, 18)) + MovementLoopAddLocation(NPC, -177.49, 0.00, 139.52, 2, 0) + MovementLoopAddLocation(NPC, -176.94, 0.06, 141.87, 2, 0) + MovementLoopAddLocation(NPC, -180.14, 0.00, 143.05, 2, 0) +end diff --git a/server/SpawnScripts/ThievesWay/asludgewalkerhatchling392608.lua b/server/SpawnScripts/ThievesWay/asludgewalkerhatchling392608.lua new file mode 100644 index 000000000..910a6a722 --- /dev/null +++ b/server/SpawnScripts/ThievesWay/asludgewalkerhatchling392608.lua @@ -0,0 +1,38 @@ +--[[ + Script Name : SpawnScripts/ThievesWay/asludgewalkerhatchling392608.lua + Script Purpose : Waypoint Path for asludgewalkerhatchling392608.lua + Script Author : Rylec + Script Date : 10-17-2019 03:28:26 + Script Notes : Locations collected from Live +--]] + +function spawn(NPC) + waypoints(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) +end + +function respawn(NPC) +end + +function waypoints(NPC) + MovementLoopAddLocation(NPC, -176.86, 0.03, 140.15, 2, math.random(12, 18)) + MovementLoopAddLocation(NPC, -178.28, 0.00, 139.48, 2, 0) + MovementLoopAddLocation(NPC, -179.34, 0.00, 136.84, 2, 0) + MovementLoopAddLocation(NPC, -179.05, 0.00, 135.29, 2, math.random(12, 18)) + MovementLoopAddLocation(NPC, -178.92, 0.00, 136.24, 2, 0) + MovementLoopAddLocation(NPC, -178.04, 0.00, 139.89, 2, 0) + MovementLoopAddLocation(NPC, -178.09, 0.00, 141.23, 2, 0) + MovementLoopAddLocation(NPC, -178.13, 0.00, 141.30, 2, math.random(12, 18)) + MovementLoopAddLocation(NPC, -184.03, 0.06, 143.91, 2, 0) + MovementLoopAddLocation(NPC, -184.57, 0.14, 143.59, 2, math.random(12, 18)) + MovementLoopAddLocation(NPC, -180.45, 0.00, 139.85, 2, 0) + MovementLoopAddLocation(NPC, -177.30, 0.06, 135.14, 2, math.random(12, 18)) + MovementLoopAddLocation(NPC, -177.62, 0.00, 135.72, 2, 0) + MovementLoopAddLocation(NPC, -179.42, 0.00, 139.15, 2, 0) + MovementLoopAddLocation(NPC, -182.10, 0.00, 142.26, 2, math.random(12, 18)) + MovementLoopAddLocation(NPC, -180.43, 0.00, 140.36, 2, 0) + MovementLoopAddLocation(NPC, -175.90, 0.14, 138.09, 2, math.random(12, 18)) +end diff --git a/server/SpawnScripts/ThievesWay/asludgewalkerhatchling392609.lua b/server/SpawnScripts/ThievesWay/asludgewalkerhatchling392609.lua new file mode 100644 index 000000000..2e51ec40d --- /dev/null +++ b/server/SpawnScripts/ThievesWay/asludgewalkerhatchling392609.lua @@ -0,0 +1,45 @@ +--[[ + Script Name : SpawnScripts/ThievesWay/asludgewalkerhatchling392609.lua + Script Purpose : Waypoint Path for asludgewalkerhatchling392609.lua + Script Author : Rylec + Script Date : 10-17-2019 04:40:09 + Script Notes : Locations collected from Live +--]] + +function spawn(NPC) + waypoints(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) +end + +function respawn(NPC) +end + +function waypoints(NPC) + MovementLoopAddLocation(NPC, -183.56, 0.02, 126.94, 2, math.random(12, 18)) + MovementLoopAddLocation(NPC, -182.19, 0.00, 125.05, 2, 0) + MovementLoopAddLocation(NPC, -182.34, 0.00, 121.47, 2, math.random(12, 18)) + MovementLoopAddLocation(NPC, -181.84, 0.00, 118.89, 2, 0) + MovementLoopAddLocation(NPC, -181.82, 0.00, 111.31, 2, 0) + MovementLoopAddLocation(NPC, -181.51, 0.00, 109.74, 2, math.random(12, 18)) + MovementLoopAddLocation(NPC, -181.16, 0.03, 113.12, 2, 0) + MovementLoopAddLocation(NPC, -180.33, 0.13, 115.15, 2, math.random(12, 18)) + MovementLoopAddLocation(NPC, -181.70, 0.24, 117.17, 2, 0) + MovementLoopAddLocation(NPC, -181.76, 0.00, 121.65, 2, 0) + MovementLoopAddLocation(NPC, -183.11, 0.00, 123.93, 2, math.random(12, 18)) + MovementLoopAddLocation(NPC, -182.11, 0.00, 121.94, 2, 0) + MovementLoopAddLocation(NPC, -181.79, 0.00, 115.56, 2, 0) + MovementLoopAddLocation(NPC, -182.46, 0.00, 112.45, 2, math.random(12, 18)) + MovementLoopAddLocation(NPC, -181.20, 0.03, 109.30, 2, math.random(12, 18)) + MovementLoopAddLocation(NPC, -180.67, 0.08, 114.98, 2, 0) + MovementLoopAddLocation(NPC, -181.45, 0.25, 116.86, 2, math.random(12, 18)) + MovementLoopAddLocation(NPC, -181.94, 0.00, 119.49, 2, 0) + MovementLoopAddLocation(NPC, -182.00, 0.00, 123.28, 2, 0) + MovementLoopAddLocation(NPC, -182.29, 0.00, 124.53, 2, math.random(12, 18)) + MovementLoopAddLocation(NPC, -182.39, 0.00, 124.38, 2, 0) + MovementLoopAddLocation(NPC, -179.99, 0.11, 120.48, 2, math.random(12, 18)) + MovementLoopAddLocation(NPC, -181.40, 0.01, 122.32, 2, 0) +end + diff --git a/server/SpawnScripts/ThievesWay/asludgewalkerhatchling392610.lua b/server/SpawnScripts/ThievesWay/asludgewalkerhatchling392610.lua new file mode 100644 index 000000000..a9a5ab1da --- /dev/null +++ b/server/SpawnScripts/ThievesWay/asludgewalkerhatchling392610.lua @@ -0,0 +1,51 @@ +--[[ + Script Name : SpawnScripts/ThievesWay/asludgewalkerhatchling392610.lua + Script Purpose : Waypoint Path for asludgewalkerhatchling392610.lua + Script Author : Rylec + Script Date : 10-17-2019 04:40:31 + Script Notes : Locations collected from Live +--]] + +function spawn(NPC) + waypoints(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) +end + +function respawn(NPC) +end + +function waypoints(NPC) + MovementLoopAddLocation(NPC, -182.29, 0.00, 110.46, 2, math.random(12, 18)) + MovementLoopAddLocation(NPC, -182.80, 0.00, 113.32, 2, 0) + MovementLoopAddLocation(NPC, -184.33, 0.32, 116.90, 2, 0) + MovementLoopAddLocation(NPC, -183.51, 0.02, 120.04, 2, 0) + MovementLoopAddLocation(NPC, -182.31, 0.00, 121.41, 2, math.random(12, 18)) + MovementLoopAddLocation(NPC, -181.99, 0.00, 123.59, 2, 0) + MovementLoopAddLocation(NPC, -181.57, 0.00, 127.48, 2, math.random(12, 18)) + MovementLoopAddLocation(NPC, -182.26, 0.00, 123.37, 2, 0) + MovementLoopAddLocation(NPC, -181.65, 0.24, 117.21, 2, 0) + MovementLoopAddLocation(NPC, -182.32, 0.00, 115.36, 2, math.random(12, 18)) + MovementLoopAddLocation(NPC, -182.25, 0.00, 115.62, 2, 0) + MovementLoopAddLocation(NPC, -180.50, 0.36, 117.01, 2, math.random(12, 18)) + MovementLoopAddLocation(NPC, -181.33, 0.02, 114.38, 2, 0) + MovementLoopAddLocation(NPC, -181.32, 0.02, 110.85, 2, 0) + MovementLoopAddLocation(NPC, -180.38, 0.12, 109.90, 2, math.random(12, 18)) + MovementLoopAddLocation(NPC, -181.85, 0.00, 115.35, 2, 0) + MovementLoopAddLocation(NPC, -183.77, 0.27, 117.05, 2, math.random(12, 18)) + MovementLoopAddLocation(NPC, -182.59, 0.00, 114.87, 2, 0) + MovementLoopAddLocation(NPC, -181.27, 0.02, 113.18, 2, math.random(12, 18)) + MovementLoopAddLocation(NPC, -181.51, 0.24, 116.87, 2, 0) + MovementLoopAddLocation(NPC, -182.07, 0.00, 119.24, 2, 0) + MovementLoopAddLocation(NPC, -182.12, 0.00, 122.25, 2, math.random(12, 18)) + MovementLoopAddLocation(NPC, -181.95, 0.00, 121.76, 2, 0) + MovementLoopAddLocation(NPC, -181.27, 0.27, 116.94, 2, math.random(12, 18)) + MovementLoopAddLocation(NPC, -182.84, 0.00, 115.30, 2, math.random(12, 18)) + MovementLoopAddLocation(NPC, -182.20, 0.00, 119.25, 2, 0) + MovementLoopAddLocation(NPC, -182.30, 0.00, 125.51, 2, math.random(12, 18)) + MovementLoopAddLocation(NPC, -182.81, 0.00, 121.30, 2, 0) + MovementLoopAddLocation(NPC, -182.65, 0.24, 117.26, 2, 0) + MovementLoopAddLocation(NPC, -182.81, 0.00, 111.72, 2, 0) +end diff --git a/server/SpawnScripts/ThievesWay/atrashhopper393119.lua b/server/SpawnScripts/ThievesWay/atrashhopper393119.lua new file mode 100644 index 000000000..3cc3c350c --- /dev/null +++ b/server/SpawnScripts/ThievesWay/atrashhopper393119.lua @@ -0,0 +1,78 @@ +--[[ + Script Name : SpawnScripts/ThievesWay/atrashhopper393119.lua + Script Purpose : Waypoint Path for atrashhopper393119.lua + Script Author : Rylec + Script Date : 09-13-2019 02:53:48 + Script Notes : Locations collected from Live +--]] + +function spawn(NPC) + waypoints(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) +end + +function respawn(NPC) +end + +function waypoints(NPC) + MovementLoopAddLocation(NPC, -175.98, 1.26, 1.38, 2, math.random(8, 18)) + MovementLoopAddLocation(NPC, -173.76, 1.26, 0.23, 2, 0) + MovementLoopAddLocation(NPC, -172.10, 1.58, -0.17, 2, math.random(8, 18)) + MovementLoopAddLocation(NPC, -174.09, 1.26, 0.93, 2, 0) + MovementLoopAddLocation(NPC, -175.58, 1.30, 3.13, 2, 0) + MovementLoopAddLocation(NPC, -176.60, 1.35, 4.83, 2, 0) + MovementLoopAddLocation(NPC, -176.74, 1.42, 5.61, 2, 0) + MovementLoopAddLocation(NPC, -178.18, 1.93, 7.38, 2, 0) + MovementLoopAddLocation(NPC, -179.05, 1.63, 9.99, 2, 0) + MovementLoopAddLocation(NPC, -179.04, 1.62, 9.87, 2, math.random(8, 18)) + MovementLoopAddLocation(NPC, -178.82, 1.26, 5.99, 2, 0) + MovementLoopAddLocation(NPC, -179.08, 1.26, 4.63, 2, 0) + MovementLoopAddLocation(NPC, -179.09, 1.26, 4.68, 2, math.random(8, 18)) + MovementLoopAddLocation(NPC, -179.17, 1.84, 7.77, 2, 0, "changegrid_Going_Down") + MovementLoopAddLocation(NPC, -179.40, 1.82, 11.21, 2, 0) + MovementLoopAddLocation(NPC, -179.05, 1.52, 13.12, 2, 0) + MovementLoopAddLocation(NPC, -179.29, 1.22, 15.02, 2, 0) + MovementLoopAddLocation(NPC, -179.64, 1.22, 15.79, 2, 0) + -- MovementLoopAddLocation(NPC, -180.07, 1.22, 16.75, 2, 0) + MovementLoopAddLocation(NPC, -180.08, 1.22, 16.43, 2, math.random(8, 18)) + MovementLoopAddLocation(NPC, -179.22, 1.22, 14.92, 2, 0) + MovementLoopAddLocation(NPC, -178.88, 1.62, 9.92, 2, 0) + MovementLoopAddLocation(NPC, -177.93, 1.98, 7.91, 2, 0, "changegrid_Going_Up") + MovementLoopAddLocation(NPC, -176.80, 1.48, 6.33, 2, 0) + MovementLoopAddLocation(NPC, -176.60, 1.44, 5.55, 2, 0) + MovementLoopAddLocation(NPC, -174.38, 1.50, 3.84, 2, 0) + MovementLoopAddLocation(NPC, -172.94, 1.88, 2.93, 2, 0) + MovementLoopAddLocation(NPC, -171.87, 1.84, 2.60, 2, 0) + -- MovementLoopAddLocation(NPC, -169.77, 1.34, -0.43, 2, 0) + MovementLoopAddLocation(NPC, -169.84, 1.34, -0.45, 2, math.random(8, 18)) + MovementLoopAddLocation(NPC, -171.20, 1.58, 0.21, 2, 0) + MovementLoopAddLocation(NPC, -172.25, 1.61, 1.17, 2, 0) + MovementLoopAddLocation(NPC, -173.63, 1.34, 2.17, 2, 0) + MovementLoopAddLocation(NPC, -174.93, 1.28, 2.22, 2, 0) + MovementLoopAddLocation(NPC, -175.84, 1.26, 2.69, 2, 0) + -- MovementLoopAddLocation(NPC, -177.17, 1.26, 3.82, 2, 0) + MovementLoopAddLocation(NPC, -177.11, 1.26, 3.75, 2, math.random(8, 18)) + MovementLoopAddLocation(NPC, -173.85, 1.30, 1.94, 2, 0) + MovementLoopAddLocation(NPC, -172.08, 1.70, 1.87, 2, 0) + MovementLoopAddLocation(NPC, -171.13, 1.61, 1.09, 2, 0) + MovementLoopAddLocation(NPC, -169.79, 1.34, 1.01, 2, 0) + -- MovementLoopAddLocation(NPC, -168.96, 1.34, -0.38, 2, math.random(8, 18)) + -- MovementLoopAddLocation(NPC, -169.02, 1.34, -0.38, 2, 0) + MovementLoopAddLocation(NPC, -170.14, 1.34, -0.12, 2, 0) + MovementLoopAddLocation(NPC, -173.94, 1.26, 0.05, 2, 0) +end + +-------------------------------------------------------------------------------------- +-- NPC Change Grid +-------------------------------------------------------------------------------------- + +function changegrid_Going_Up(NPC) + SetGridID(NPC, 4000206445) +end + +function changegrid_Going_Down(NPC) + SetGridID(NPC, 2981397110) +end diff --git a/server/SpawnScripts/ThievesWay/atrashhopper393120.lua b/server/SpawnScripts/ThievesWay/atrashhopper393120.lua new file mode 100644 index 000000000..2d8b66c56 --- /dev/null +++ b/server/SpawnScripts/ThievesWay/atrashhopper393120.lua @@ -0,0 +1,88 @@ +--[[ + Script Name : TWHopper002.lua + Script Purpose : Waypoint Path for TWHopper002.lua + Script Author : Rylec + Script Date : 09-13-2019 03:45:48 + Script Notes : +--]] + +function spawn(NPC) + waypoints(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) +end + +function respawn(NPC) +end + +function waypoints(NPC) + MovementLoopAddLocation(NPC, -180.12, 1.75, 10.59, 2, 0) + MovementLoopAddLocation(NPC, -179.62, 1.61, 9.77, 2, math.random(8, 18)) + MovementLoopAddLocation(NPC, -178.96, 1.86, 8.11, 2, 0) + MovementLoopAddLocation(NPC, -178.16, 1.89, 7.08, 2, 0, "changegrid_Going_Up") + MovementLoopAddLocation(NPC, -177.86, 1.27, 5.18, 2, 0) + MovementLoopAddLocation(NPC, -177.33, 1.26, 4.15, 2, math.random(8, 18)) + MovementLoopAddLocation(NPC, -177.48, 1.29, 4.84, 2, 0) + MovementLoopAddLocation(NPC, -178.76, 1.26, 5.87, 2, 0) + MovementLoopAddLocation(NPC, -179.18, 1.84, 7.21, 2, 0) + MovementLoopAddLocation(NPC, -179.37, 1.62, 9.90, 2, 0, "changegrid_Going_Down") + MovementLoopAddLocation(NPC, -179.14, 1.76, 11.47, 2, 0) + MovementLoopAddLocation(NPC, -178.50, 1.58, 13.30, 2, 0) + MovementLoopAddLocation(NPC, -178.24, 2.25, 14.47, 2, 0) + MovementLoopAddLocation(NPC, -179.32, 1.22, 15.67, 2, 0) + MovementLoopAddLocation(NPC, -179.27, 1.22, 15.69, 2, math.random(8, 18)) + -- MovementLoopAddLocation(NPC, -178.25, 1.63, 15.96, 2, 0) + -- MovementLoopAddLocation(NPC, -178.25, 1.63, 15.96, 2, 0) + MovementLoopAddLocation(NPC, -179.02, 1.62, 12.18, 2, 0) + MovementLoopAddLocation(NPC, -179.18, 1.82, 11.08, 2, 0) + MovementLoopAddLocation(NPC, -178.60, 1.64, 9.59, 2, 0) + MovementLoopAddLocation(NPC, -177.99, 1.86, 6.94, 2, 0, "changegrid_Going_Up") + MovementLoopAddLocation(NPC, -177.79, 1.28, 5.33, 2, 0) + MovementLoopAddLocation(NPC, -176.47, 1.28, 3.75, 2, 0) + MovementLoopAddLocation(NPC, -175.20, 1.31, 2.95, 2, 0) + MovementLoopAddLocation(NPC, -174.58, 1.31, 2.36, 2, 0) + MovementLoopAddLocation(NPC, -173.99, 1.27, 1.65, 2, 0) + MovementLoopAddLocation(NPC, -172.31, 1.60, 1.03, 2, math.random(8, 18)) + MovementLoopAddLocation(NPC, -174.01, 1.26, 1.06, 2, 0) + MovementLoopAddLocation(NPC, -175.08, 1.27, 2.18, 2, 0) + MovementLoopAddLocation(NPC, -176.39, 1.26, 3.18, 2, 0) + MovementLoopAddLocation(NPC, -178.03, 1.26, 3.70, 2, 0) + MovementLoopAddLocation(NPC, -178.77, 1.26, 4.15, 2, 0) + MovementLoopAddLocation(NPC, -178.16, 1.26, 4.77, 2, 0) + MovementLoopAddLocation(NPC, -178.07, 1.26, 4.73, 2, 0) + MovementLoopAddLocation(NPC, -175.61, 1.35, 3.95, 2, math.random(8, 18)) + MovementLoopAddLocation(NPC, -174.28, 1.42, 3.15, 2, 0) + MovementLoopAddLocation(NPC, -173.17, 1.75, 3.02, 2, 0) + MovementLoopAddLocation(NPC, -172.05, 1.77, 2.26, 2, 0) + MovementLoopAddLocation(NPC, -170.64, 1.62, 2.15, 2, 0) + MovementLoopAddLocation(NPC, -169.63, 1.34, 1.01, 2, 0) + MovementLoopAddLocation(NPC, -168.94, 1.34, -0.37, 2, 0) + MovementLoopAddLocation(NPC, -169.04, 1.34, -0.35, 2, 0) + MovementLoopAddLocation(NPC, -170.48, 1.36, -0.17, 2, math.random(8, 18)) + MovementLoopAddLocation(NPC, -171.75, 1.58, -0.03, 2, 0) + MovementLoopAddLocation(NPC, -174.08, 1.26, -0.16, 2, 0) + MovementLoopAddLocation(NPC, -174.88, 1.26, 0.38, 2, 0) + MovementLoopAddLocation(NPC, -175.40, 1.26, 1.63, 2, 0) + MovementLoopAddLocation(NPC, -175.84, 1.32, 3.77, 2, 0) + MovementLoopAddLocation(NPC, -176.66, 1.34, 4.85, 2, 0) + MovementLoopAddLocation(NPC, -177.05, 1.43, 6.26, 2, 0) + MovementLoopAddLocation(NPC, -177.86, 1.99, 7.66, 2, 0, "changegrid_Going_Down") + MovementLoopAddLocation(NPC, -178.98, 1.70, 8.79, 2, 0) + MovementLoopAddLocation(NPC, -180.13, 1.79, 10.74, 2, 0) +end + +-------------------------------------------------------------------------------------- +-- NPC Change Grid +-------------------------------------------------------------------------------------- + +function changegrid_Going_Up(NPC) + SetGridID(NPC, 4000206445) +end + +function changegrid_Going_Down(NPC) + SetGridID(NPC, 2981397110) +end + + diff --git a/server/SpawnScripts/ThievesWay/atrashhopper393121.lua b/server/SpawnScripts/ThievesWay/atrashhopper393121.lua new file mode 100644 index 000000000..d47481917 --- /dev/null +++ b/server/SpawnScripts/ThievesWay/atrashhopper393121.lua @@ -0,0 +1,61 @@ +--[[ + Script Name : SpawnScripts/ThievesWay/atrashhopper393121.lua + Script Purpose : Waypoint Path for atrashhopper393121.lua + Script Author : Rylec + Script Date : 09-28-2019 10:46:24 + Script Notes : Locations collected from Live +--]] + +function spawn(NPC) + waypoints(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) +end + +function respawn(NPC) +end + +function waypoints(NPC) + MovementLoopAddLocation(NPC, -171.72, 0.00, 217.3, 2, math.random(8, 18)) + MovementLoopAddLocation(NPC, -174.02, 0.02, 216.01, 2, 0) + MovementLoopAddLocation(NPC, -175.34, 0.24, 214.40, 2, 0) + MovementLoopAddLocation(NPC, -177.72, 0.19, 213.03, 2, 0) + MovementLoopAddLocation(NPC, -180.31, 0.39, 209.56, 2, 0, "changegrid_Going_Down") + MovementLoopAddLocation(NPC, -180.83, 0.07, 207.45, 2, 0) + MovementLoopAddLocation(NPC, -182.33, 0.00, 204.23, 2, 0) + MovementLoopAddLocation(NPC, -182.66, 0.24, 199.51, 2, math.random(8, 18)) + MovementLoopAddLocation(NPC, -182.03, 0.00, 201.38, 2, 0) + MovementLoopAddLocation(NPC, -182.04, 0.00, 205.58, 2, 0) + MovementLoopAddLocation(NPC, -180.30, 0.39, 209.13, 2, 0) + MovementLoopAddLocation(NPC, -179.74, 0.09, 211.80, 2, 0, "changegrid_Going_Up") + MovementLoopAddLocation(NPC, -176.76, 0.02, 215.30, 2, 0) + MovementLoopAddLocation(NPC, -175.65, 0.00, 216.78, 2, math.random(8, 18)) + MovementLoopAddLocation(NPC, -175.95, 0.00, 216.24, 2, 0) + MovementLoopAddLocation(NPC, -179.76, 0.05, 212.40, 2, 0) + MovementLoopAddLocation(NPC, -181.65, 0.00, 207.51, 2, 0, "changegrid_Going_Down") + MovementLoopAddLocation(NPC, -181.92, 0.00, 204.71, 2, math.random(8, 18)) + MovementLoopAddLocation(NPC, -182.50, 0.00, 202.20, 2, math.random(8, 18)) + MovementLoopAddLocation(NPC, -184.48, 0.12, 207.20, 2, math.random(8, 18)) + MovementLoopAddLocation(NPC, -184.26, 0.31, 209.09, 2, 0) + MovementLoopAddLocation(NPC, -184.69, 0.28, 211.31, 2, 0, "changegrid_Going_Up") + MovementLoopAddLocation(NPC, -183.85, 0.22, 212.73, 2, 0) + MovementLoopAddLocation(NPC, -181.77, 0.01, 213.86, 2, math.random(8, 18)) + MovementLoopAddLocation(NPC, -182.51, 0.24, 209.53, 2, 0, "changegrid_Going_Down") + MovementLoopAddLocation(NPC, -179.95, 0.12, 210.98, 2, 0, "changegrid_Going_Up") + MovementLoopAddLocation(NPC, -177.29, 0.11, 214.05, 2, 0) + MovementLoopAddLocation(NPC, -172.45, 0.02, 216.01, 2, 0) +end + +-------------------------------------------------------------------------------------- +-- NPC Change Grid +-------------------------------------------------------------------------------------- + +function changegrid_Going_Up(NPC) + SetGridID(NPC, 3053675711) +end + +function changegrid_Going_Down(NPC) + SetGridID(NPC, 1555937977) +end diff --git a/server/SpawnScripts/ThievesWay/atrashhopper393122.lua b/server/SpawnScripts/ThievesWay/atrashhopper393122.lua new file mode 100644 index 000000000..13edebec2 --- /dev/null +++ b/server/SpawnScripts/ThievesWay/atrashhopper393122.lua @@ -0,0 +1,56 @@ +--[[ + Script Name : SpawnScripts/ThievesWay/atrashhopper393122.lua + Script Purpose : Waypoint Path for atrashhopper393122.lua + Script Author : Rylec + Script Date : 09-28-2019 10:46:27 + Script Notes : Locations collected from Live +--]] + +function spawn(NPC) + waypoints(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) +end + +function respawn(NPC) +end + +function waypoints(NPC) + + MovementLoopAddLocation(NPC, -182.59, 0.00, 205.63, 2, 0, "changegrid_Going_Down") + MovementLoopAddLocation(NPC, -182.59, 0.00, 205.50, 2, math.random(8, 18)) + MovementLoopAddLocation(NPC, -181.81, 0.24, 208.99, 2, 0) + MovementLoopAddLocation(NPC, -178.68, 0.19, 212.03, 2, 0, "changegrid_Going_Up") + MovementLoopAddLocation(NPC, -176.78, 0.00, 216.22, 2, 0) + MovementLoopAddLocation(NPC, -175.60, 0.00, 216.91, 2, math.random(8, 18)) + MovementLoopAddLocation(NPC, -174.58, 0.00, 217.70, 2, 0) + MovementLoopAddLocation(NPC, -173.38, 0.00, 217.76, 2, math.random(8, 18)) + MovementLoopAddLocation(NPC, -172.47, 0.00, 217.84, 2, 0) + MovementLoopAddLocation(NPC, -172.56, 0.00, 217.83, 2, math.random(8, 18)) + MovementLoopAddLocation(NPC, -173.70, 0.00, 217.85, 2, 0) + MovementLoopAddLocation(NPC, -176.50, 0.00, 216.87, 2, 0) + MovementLoopAddLocation(NPC, -177.47, 0.00, 216.82, 2, math.random(8, 18)) + MovementLoopAddLocation(NPC, -179.07, 0.06, 217.03, 2, 0) + MovementLoopAddLocation(NPC, -180.55, 0.13, 216.53, 2, math.random(8, 18)) + MovementLoopAddLocation(NPC, -170.28, 0.00, 217.83, 2, 0) + MovementLoopAddLocation(NPC, -174.49, 0.00, 216.98, 2, 0) + MovementLoopAddLocation(NPC, -174.50, 0.00, 216.93, 2, math.random(8, 18)) + MovementLoopAddLocation(NPC, -175.95, 0.08, 215.02, 2, 0) + MovementLoopAddLocation(NPC, -179.92, 0.09, 211.57, 2, 0) +end + +-------------------------------------------------------------------------------------- +-- NPC Change Grid +-------------------------------------------------------------------------------------- + +function changegrid_Going_Up(NPC) + SetGridID(NPC, 3053675711) +end + +function changegrid_Going_Down(NPC) + SetGridID(NPC, 1555937977) +end + + diff --git a/server/SpawnScripts/ThievesWay/atrashhopper393123.lua b/server/SpawnScripts/ThievesWay/atrashhopper393123.lua new file mode 100644 index 000000000..92f22bdf6 --- /dev/null +++ b/server/SpawnScripts/ThievesWay/atrashhopper393123.lua @@ -0,0 +1,37 @@ +--[[ + Script Name : SpawnScripts/ThievesWay/atrashhopper393123.lua + Script Purpose : Waypoint Path for atrashhopper393123.lua + Script Author : Rylec + Script Date : 10-17-2019 04:35:40 + Script Notes : Locations collected from Live +--]] + +function spawn(NPC) + waypoints(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) +end + +function respawn(NPC) +end + +function waypoints(NPC) + MovementLoopAddLocation(NPC, -182.29, 0.00, 118.81, 2, math.random(8, 18)) + MovementLoopAddLocation(NPC, -182.38, 0.00, 112.50, 2, math.random(8, 18)) + MovementLoopAddLocation(NPC, -182.03, 0.00, 112.02, 2, 0) + MovementLoopAddLocation(NPC, -181.39, 0.01, 110.31, 2, math.random(8, 18)) + MovementLoopAddLocation(NPC, -181.40, 0.01, 112.56, 2, math.random(8, 18)) + MovementLoopAddLocation(NPC, -181.38, 0.01, 109.48, 2, math.random(8, 18)) + MovementLoopAddLocation(NPC, -181.46, 0.01, 120.11, 2, 0) + MovementLoopAddLocation(NPC, -182.40, 0.00, 124.40, 2, math.random(8, 18)) + MovementLoopAddLocation(NPC, -182.29, 0.00, 121.56, 2, math.random(8, 18)) + MovementLoopAddLocation(NPC, -182.31, 0.00, 121.63, 2, 0) + MovementLoopAddLocation(NPC, -182.28, 0.00, 122.38, 2, math.random(8, 18)) + MovementLoopAddLocation(NPC, -182.46, 0.00, 123.64, 2, math.random(8, 18)) + MovementLoopAddLocation(NPC, -183.37, 0.00, 126.54, 2, 0) + MovementLoopAddLocation(NPC, -184.01, 0.06, 127.00, 2, math.random(8, 18)) + MovementLoopAddLocation(NPC, -183.27, 0.00, 125.96, 2, 0) +end + diff --git a/server/SpawnScripts/ThievesWay/atrashhopper393124.lua b/server/SpawnScripts/ThievesWay/atrashhopper393124.lua new file mode 100644 index 000000000..216e823bb --- /dev/null +++ b/server/SpawnScripts/ThievesWay/atrashhopper393124.lua @@ -0,0 +1,54 @@ +--[[ + Script Name : SpawnScripts/ThievesWay/atrashhopper393124.lua + Script Purpose : Waypoint Path for atrashhopper393124.lua + Script Author : Rylec + Script Date : 10-05-2019 08:25:22 + Script Notes : Locations collected from Live +--]] + +function spawn(NPC) + waypoints(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) +end + +function respawn(NPC) +end + +function waypoints(NPC) + MovementLoopAddLocation(NPC, -182.18, 0.00, 192.22, 2, math.random(8, 18)) + MovementLoopAddLocation(NPC, -182.29, 0.00, 194.80, 2, 0) + MovementLoopAddLocation(NPC, -183.20, 0.00, 196.80, 2, math.random(8, 18)) + MovementLoopAddLocation(NPC, -183.24, 0.00, 193.23, 2, 0) + MovementLoopAddLocation(NPC, -181.73, 0.37, 188.02, 2, 0) + MovementLoopAddLocation(NPC, -182.43, 0.00, 184.31, 2, math.random(8, 18), "changegrid_Going_Down") + MovementLoopAddLocation(NPC, -181.96, 0.48, 187.30, 2, 0, "changegrid_Going_Up") + MovementLoopAddLocation(NPC, -182.51, 0.27, 188.78, 2, 0) + MovementLoopAddLocation(NPC, -181.94, 0.00, 191.18, 2, math.random(8, 18)) + MovementLoopAddLocation(NPC, -182.24, 0.00, 195.59, 2, 0) + MovementLoopAddLocation(NPC, -182.23, 0.00, 195.63, 2, math.random(8, 18)) + MovementLoopAddLocation(NPC, -181.84, 0.00, 197.84, 2, 0) + MovementLoopAddLocation(NPC, -183.65, 0.12, 194.02, 2, 0) + MovementLoopAddLocation(NPC, -183.24, 0.00, 191.06, 2, math.random(8, 18)) + MovementLoopAddLocation(NPC, -182.59, 0.00, 191.75, 2, 0) + MovementLoopAddLocation(NPC, -182.15, 0.00, 192.65, 2, math.random(8, 18)) + MovementLoopAddLocation(NPC, -183.17, 0.00, 196.55, 2, math.random(8, 18)) + MovementLoopAddLocation(NPC, -181.95, 0.00, 190.66, 2, 0) + MovementLoopAddLocation(NPC, -182.70, 0.37, 186.85, 2, 0) + MovementLoopAddLocation(NPC, -182.15, 0.00, 184.98, 2, math.random(8, 18), "changegrid_Going_Down") + MovementLoopAddLocation(NPC, -182.25, 0.00, 190.78, 2, math.random(8, 18), "changegrid_Going_Up") +end + +-------------------------------------------------------------------------------------- +-- NPC Change Grid +-------------------------------------------------------------------------------------- + +function changegrid_Going_Up(NPC) + SetGridID(NPC, 1555937977) +end + +function changegrid_Going_Down(NPC) + SetGridID(NPC, 667331216) +end diff --git a/server/SpawnScripts/ThievesWay/atrashhopper393125.lua b/server/SpawnScripts/ThievesWay/atrashhopper393125.lua new file mode 100644 index 000000000..94e19b725 --- /dev/null +++ b/server/SpawnScripts/ThievesWay/atrashhopper393125.lua @@ -0,0 +1,49 @@ +--[[ + Script Name : SpawnScripts/ThievesWay/atrashhopper393125.lua + Script Purpose : Waypoint Path for atrashhopper393125.lua + Script Author : Rylec + Script Date : 10-05-2019 09:21:50 + Script Notes : Locations collected from Live +--]] + +function spawn(NPC) + waypoints(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) +end + +function respawn(NPC) +end + +function waypoints(NPC) + MovementLoopAddLocation(NPC, -184.80, 0.18, 197.67, 2, math.random(8, 18)) + MovementLoopAddLocation(NPC, -183.37, 0.00, 195.04, 2, 0) + MovementLoopAddLocation(NPC, -183.83, 0.05, 191.20, 2, 0) + MovementLoopAddLocation(NPC, -182.70, 0.28, 188.51, 2, 0) + MovementLoopAddLocation(NPC, -182.15, 0.00, 195.73, 2, math.random(8, 18)) + MovementLoopAddLocation(NPC, -182.71, 0.00, 191.84, 2, 0) + MovementLoopAddLocation(NPC, -182.06, 0.39, 186.92, 2, 0) + MovementLoopAddLocation(NPC, -182.49, 0.00, 183.58, 2, 0, "changegrid_Going_Down") + MovementLoopAddLocation(NPC, -183.31, 0.00, 191.70, 2, math.random(8, 18), "changegrid_Going_Up") + MovementLoopAddLocation(NPC, -181.70, 0.00, 197.23, 2, 0) + MovementLoopAddLocation(NPC, -182.76, 0.00, 192.88, 2, 0) + MovementLoopAddLocation(NPC, -182.00, 0.29, 186.39, 2, 0) + MovementLoopAddLocation(NPC, -182.67, 0.00, 182.78, 2, math.random(8, 18), "changegrid_Going_Down") + MovementLoopAddLocation(NPC, -181.76, 0.33, 188.17, 2, 0, "changegrid_Going_Up") + MovementLoopAddLocation(NPC, -182.05, 0.00, 194.68, 2, 0) +end + +-------------------------------------------------------------------------------------- +-- NPC Change Grid +-------------------------------------------------------------------------------------- + +function changegrid_Going_Up(NPC) + SetGridID(NPC, 1555937977) +end + +function changegrid_Going_Down(NPC) + SetGridID(NPC, 667331216) +end + diff --git a/server/SpawnScripts/ThievesWay/atrashhopper393126.lua b/server/SpawnScripts/ThievesWay/atrashhopper393126.lua new file mode 100644 index 000000000..4cc264a33 --- /dev/null +++ b/server/SpawnScripts/ThievesWay/atrashhopper393126.lua @@ -0,0 +1,52 @@ +--[[ + Script Name : SpawnScripts/ThievesWay/atrashhopper393126.lua + Script Purpose : Waypoint Path for atrashhopper393126.lua + Script Author : Rylec + Script Date : 10-17-2019 03:26:46 + Script Notes : Locations collected from Live +--]] + +function spawn(NPC) + waypoints(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) +end + +function respawn(NPC) +end + +function waypoints(NPC) + MovementLoopAddLocation(NPC, -183.77, 0.04, 163.59, 2, math.random(8, 18)) + MovementLoopAddLocation(NPC, -182.50, 0.00, 162.43, 2, 0) + MovementLoopAddLocation(NPC, -181.76, 0.00, 158.78, 2, 0) + MovementLoopAddLocation(NPC, -182.52, 0.00, 157.20, 2, math.random(8, 18)) + MovementLoopAddLocation(NPC, -182.09, 0.00, 167.00, 2, 0) + MovementLoopAddLocation(NPC, -181.52, 0.00, 168.51, 2, math.random(8, 18)) + MovementLoopAddLocation(NPC, -181.54, 0.00, 167.41, 2, math.random(8, 18)) + MovementLoopAddLocation(NPC, -181.85, 0.00, 166.31, 2, math.random(8, 18)) + MovementLoopAddLocation(NPC, -182.32, 0.00, 163.65, 2, 0) + MovementLoopAddLocation(NPC, -182.14, 0.24, 160.88, 2, 0) + MovementLoopAddLocation(NPC, -183.24, 0.00, 157.74, 2, 0) + MovementLoopAddLocation(NPC, -182.69, 0.00, 156.38, 2, math.random(8, 18)) + MovementLoopAddLocation(NPC, -183.05, 0.00, 157.66, 2, 0) + MovementLoopAddLocation(NPC, -184.24, 0.08, 159.00, 2, math.random(8, 18)) + MovementLoopAddLocation(NPC, -182.88, 0.00, 162.16, 2, 0) + MovementLoopAddLocation(NPC, -182.43, 0.00, 172.60, 2, 0, "changegrid_Going_Up") + MovementLoopAddLocation(NPC, -182.41, 0.00, 172.60, 2, math.random(8, 18)) + MovementLoopAddLocation(NPC, -182.82, 0.00, 165.72, 2, 0, "changegrid_Going_Down") +end + +-------------------------------------------------------------------------------------- +-- NPC Change Grid +-------------------------------------------------------------------------------------- + +function changegrid_Going_Up(NPC) + SetGridID(NPC, 667331216) +end + +function changegrid_Going_Down(NPC) + SetGridID(NPC, 3049532766) +end + diff --git a/server/SpawnScripts/ThievesWay/atrashhopper393127.lua b/server/SpawnScripts/ThievesWay/atrashhopper393127.lua new file mode 100644 index 000000000..7d6711366 --- /dev/null +++ b/server/SpawnScripts/ThievesWay/atrashhopper393127.lua @@ -0,0 +1,49 @@ +--[[ + Script Name : SpawnScripts/ThievesWay/atrashhopper393127.lua + Script Purpose : Waypoint Path for atrashhopper393127.lua + Script Author : Rylec + Script Date : 10-17-2019 03:26:51 + Script Notes : Locations collected from Live +--]] + +function spawn(NPC) + waypoints(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) +end + +function respawn(NPC) +end + +function waypoints(NPC) + MovementLoopAddLocation(NPC, -181.48, 0.00, 163.02, 2, math.random(8, 18)) + MovementLoopAddLocation(NPC, -181.51, 0.00, 164.02, 2, 0) + MovementLoopAddLocation(NPC, -182.94, 0.00, 165.64, 2, math.random(8, 18)) + MovementLoopAddLocation(NPC, -182.74, 0.24, 160.80, 2, 0) + MovementLoopAddLocation(NPC, -184.45, 0.12, 158.19, 2, math.random(8, 18)) + MovementLoopAddLocation(NPC, -183.48, 0.01, 156.24, 2, 0) + MovementLoopAddLocation(NPC, -180.36, 0.13, 157.28, 2, math.random(8, 18)) + MovementLoopAddLocation(NPC, -182.04, 0.00, 161.96, 2, 0) + MovementLoopAddLocation(NPC, -183.09, 0.00, 164.09, 2, math.random(8, 18)) + MovementLoopAddLocation(NPC, -182.54, 0.00, 167.65, 2, math.random(8, 18)) + MovementLoopAddLocation(NPC, -182.53, 0.00, 173.09, 2, 0, "changegrid_Going_Up") + MovementLoopAddLocation(NPC, -182.51, 0.00, 173.12, 2, math.random(8, 18)) + MovementLoopAddLocation(NPC, -182.12, 0.00, 169.19, 2, 0, "changegrid_Going_Down") + MovementLoopAddLocation(NPC, -182.27, 0.00, 165.04, 2, 0) +end + +-------------------------------------------------------------------------------------- +-- NPC Change Grid +-------------------------------------------------------------------------------------- + +function changegrid_Going_Up(NPC) + SetGridID(NPC, 667331216) +end + +function changegrid_Going_Down(NPC) + SetGridID(NPC, 3049532766) +end + + diff --git a/server/SpawnScripts/ThievesWay/atrashhopper393128.lua b/server/SpawnScripts/ThievesWay/atrashhopper393128.lua new file mode 100644 index 000000000..fdc19fb35 --- /dev/null +++ b/server/SpawnScripts/ThievesWay/atrashhopper393128.lua @@ -0,0 +1,32 @@ +--[[ + Script Name : SpawnScripts/ThievesWay/atrashhopper393128.lua + Script Purpose : Waypoint Path for atrashhopper393128.lua + Script Author : Rylec + Script Date : 10-17-2019 03:28:10 + Script Notes : Locations collected from Live +--]] + +function spawn(NPC) + waypoints(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) +end + +function respawn(NPC) +end + +function waypoints(NPC) + MovementLoopAddLocation(NPC, -177.10, 0.07, 135.19, 2, math.random(8, 18)) + MovementLoopAddLocation(NPC, -178.45, 0.00, 136.90, 2, 0) + MovementLoopAddLocation(NPC, -181.03, 0.00, 141.14, 2, math.random(8, 18)) + MovementLoopAddLocation(NPC, -178.97, 0.00, 139.38, 2, 0) + MovementLoopAddLocation(NPC, -178.98, 0.00, 139.37, 2, math.random(8, 18)) + MovementLoopAddLocation(NPC, -183.40, 0.01, 133.45, 2, math.random(8, 18)) + MovementLoopAddLocation(NPC, -184.97, 0.21, 136.61, 2, 0) + MovementLoopAddLocation(NPC, -185.59, 0.38, 138.74, 2, math.random(8, 18)) + MovementLoopAddLocation(NPC, -182.82, 0.00, 136.15, 2, 0) +end + + diff --git a/server/SpawnScripts/ThievesWay/atrashhopper393129.lua b/server/SpawnScripts/ThievesWay/atrashhopper393129.lua new file mode 100644 index 000000000..767b5c7cf --- /dev/null +++ b/server/SpawnScripts/ThievesWay/atrashhopper393129.lua @@ -0,0 +1,34 @@ +--[[ + Script Name : SpawnScripts/ThievesWay/atrashhopper393129.lua + Script Purpose : Waypoint Path for atrashhopper393129.lua + Script Author : Rylec + Script Date : 10-17-2019 03:28:16 + Script Notes : Locations collected from Live +--]] + +function spawn(NPC) + waypoints(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) +end + +function respawn(NPC) +end + +function waypoints(NPC) + MovementLoopAddLocation(NPC, -181.98, 0.00, 138.04, 2, math.random(8, 18)) + MovementLoopAddLocation(NPC, -178.87, 0.00, 137.15, 2, 0) + MovementLoopAddLocation(NPC, -178.88, 0.00, 137.13, 2, math.random(8, 18)) + MovementLoopAddLocation(NPC, -181.24, 0.00, 135.01, 2, math.random(8, 18)) + MovementLoopAddLocation(NPC, -180.22, 0.00, 137.23, 2, math.random(8, 18)) + MovementLoopAddLocation(NPC, -182.09, 0.00, 135.02, 2, 0) + MovementLoopAddLocation(NPC, -182.09, 0.00, 135.01, 2, math.random(8, 18)) + MovementLoopAddLocation(NPC, -177.25, 0.06, 135.11, 2, math.random(8, 18)) + MovementLoopAddLocation(NPC, -178.00, 0.00, 141.24, 2, 0) + MovementLoopAddLocation(NPC, -179.64, 0.00, 143.39, 2, 0) + MovementLoopAddLocation(NPC, -180.17, 0.02, 144.82, 2, math.random(8, 18)) + MovementLoopAddLocation(NPC, -182.05, 0.00, 140.81, 2, 0) +end + diff --git a/server/SpawnScripts/ThievesWay/atrashhopper393130.lua b/server/SpawnScripts/ThievesWay/atrashhopper393130.lua new file mode 100644 index 000000000..26ce547e6 --- /dev/null +++ b/server/SpawnScripts/ThievesWay/atrashhopper393130.lua @@ -0,0 +1,31 @@ +--[[ + Script Name : SpawnScripts/ThievesWay/atrashhopper393130.lua + Script Purpose : Waypoint Path for atrashhopper393130.lua + Script Author : Rylec + Script Date : 10-17-2019 04:35:24 + Script Notes : Locations collected from Live +--]] + +function spawn(NPC) + waypoints(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) +end + +function respawn(NPC) +end + +function waypoints(NPC) + MovementLoopAddLocation(NPC, -181.33, 0.02, 109.45, 2, math.random(8, 18)) + MovementLoopAddLocation(NPC, -181.99, 0.00, 111.13, 2, math.random(8, 18)) + MovementLoopAddLocation(NPC, -181.24, 0.02, 113.34, 2, 0) + MovementLoopAddLocation(NPC, -181.91, 0.00, 115.69, 2, 0) + MovementLoopAddLocation(NPC, -181.43, 0.25, 117.17, 2, math.random(8, 18)) + MovementLoopAddLocation(NPC, -181.48, 0.00, 109.51, 2, math.random(8, 18)) + MovementLoopAddLocation(NPC, -182.66, 0.00, 114.52, 2, 0) + MovementLoopAddLocation(NPC, -183.60, 0.25, 117.11, 2, math.random(8, 18)) + MovementLoopAddLocation(NPC, -182.22, 0.00, 114.69, 2, 0) + MovementLoopAddLocation(NPC, -182.05, 0.00, 111.38, 2, 0) +end diff --git a/server/SpawnScripts/ThievesWay/atrashhopper393131.lua b/server/SpawnScripts/ThievesWay/atrashhopper393131.lua new file mode 100644 index 000000000..3742b8878 --- /dev/null +++ b/server/SpawnScripts/ThievesWay/atrashhopper393131.lua @@ -0,0 +1,56 @@ +--[[ + Script Name : SpawnScripts/ThievesWay/atrashhopper393131.lua + Script Purpose : Waypoint Path for atrashhopper393131.lua + Script Author : Rylec + Script Date : 09-22-2019 05:03:08 + Script Notes : Locations collected from Live +--]] + +function spawn(NPC) + waypoints(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) +end + +function respawn(NPC) +end + +function waypoints(NPC) + MovementLoopAddLocation(NPC, -175.49, 1.22, 60.02, 2, math.random(8, 18)) + MovementLoopAddLocation(NPC, -179.92, 1.22, 55.76, 2, 0) + MovementLoopAddLocation(NPC, -180.34, 1.22, 54.32, 2, 0) + MovementLoopAddLocation(NPC, -180.32, 1.22, 54.22, 2, math.random(8, 18)) + MovementLoopAddLocation(NPC, -180.05, 1.58, 53.15, 2, 0) + MovementLoopAddLocation(NPC, -179.14, 1.58, 52.87, 2, math.random(8, 18)) + MovementLoopAddLocation(NPC, -180.32, 1.24, 56.12, 2, 0) + MovementLoopAddLocation(NPC, -178.32, 1.24, 59.21, 2, 0) + MovementLoopAddLocation(NPC, -178.16, 1.23, 59.25, 2, math.random(8, 18)) + MovementLoopAddLocation(NPC, -176.72, 1.22, 60.02, 2, 0) + MovementLoopAddLocation(NPC, -175.28, 1.22, 61.22, 2, math.random(8, 18)) + MovementLoopAddLocation(NPC, -179.36, 1.22, 55.06, 2, math.random(8, 18)) + MovementLoopAddLocation(NPC, -178.82, 1.22, 55.94, 2, 0) + MovementLoopAddLocation(NPC, -176.59, 1.23, 57.68, 2, 0) + MovementLoopAddLocation(NPC, -175.44, 1.22, 60.25, 2, 0) + MovementLoopAddLocation(NPC, -175.34, 1.22, 60.24, 2, math.random(8, 18)) + MovementLoopAddLocation(NPC, -174.29, 1.22, 60.10, 2, 0) + MovementLoopAddLocation(NPC, -172.46, 1.78, 60.58, 2, 0, "changegrid_Going_Up") + MovementLoopAddLocation(NPC, -169.50, 1.22, 61.64, 2, math.random(8, 18)) + MovementLoopAddLocation(NPC, -171.63, 1.78, 61.13, 2, 0) + MovementLoopAddLocation(NPC, -174.75, 1.22, 61.31, 2, 0, "changegrid_Going_Down") + MovementLoopAddLocation(NPC, -180.37, 1.30, 57.49, 2, 0) + MovementLoopAddLocation(NPC, -180.74, 1.30, 56.61, 2, math.random(8, 18)) +end + +-------------------------------------------------------------------------------------- +-- NPC Change Grid +-------------------------------------------------------------------------------------- + +function changegrid_Going_Up(NPC) + SetGridID(NPC, 3098524280) +end + +function changegrid_Going_Down(NPC) + SetGridID(NPC, 2981397110) +end diff --git a/server/SpawnScripts/ThievesWay/atrashhopper393132.lua b/server/SpawnScripts/ThievesWay/atrashhopper393132.lua new file mode 100644 index 000000000..1975bdc9d --- /dev/null +++ b/server/SpawnScripts/ThievesWay/atrashhopper393132.lua @@ -0,0 +1,49 @@ +--[[ + Script Name : SpawnScripts/ThievesWay/atrashhopper393132.lua + Script Purpose : Waypoint Path for atrashhopper393132.lua + Script Author : Rylec + Script Date : 10-17-2019 04:46:08 + Script Notes : Locations collected from Live +--]] + +function spawn(NPC) + waypoints(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) +end + +function respawn(NPC) +end + +function waypoints(NPC) + MovementLoopAddLocation(NPC, -172.97, 0.05, 91.09, 2, math.random(8, 18), "changegrid_Going_Down") + MovementLoopAddLocation(NPC, -175.04, 0.39, 92.80, 2, 0, "changegrid_Going_Up") + MovementLoopAddLocation(NPC, -177.47, 0.17, 93.64, 2, 0) + MovementLoopAddLocation(NPC, -180.22, 0.11, 96.30, 2, 0) + MovementLoopAddLocation(NPC, -181.91, 0.48, 100.98, 2, math.random(8, 18)) + MovementLoopAddLocation(NPC, -177.74, 0.05, 91.14, 2, math.random(8, 18)) + MovementLoopAddLocation(NPC, -179.23, 0.05, 92.26, 2, 0) + MovementLoopAddLocation(NPC, -180.12, 0.12, 96.24, 2, 0) + MovementLoopAddLocation(NPC, -181.94, 0.27, 99.73, 2, 0) + MovementLoopAddLocation(NPC, -181.78, 0.00, 104.14, 2, math.random(8, 18)) + MovementLoopAddLocation(NPC, -182.81, 0.04, 98.21, 2, math.random(8, 18)) + MovementLoopAddLocation(NPC, -183.12, 0.29, 100.01, 2, math.random(8, 18)) + MovementLoopAddLocation(NPC, -180.93, 0.05, 93.09, 2, math.random(8, 18)) +end + +-------------------------------------------------------------------------------------- +-- NPC Change Grid +-------------------------------------------------------------------------------------- + +function changegrid_Going_Up(NPC) + SetGridID(NPC, 3049532766) +end + +function changegrid_Going_Down(NPC) + SetGridID(NPC, 3438300428) +end + + + diff --git a/server/SpawnScripts/ThievesWay/atrashhopper393134.lua b/server/SpawnScripts/ThievesWay/atrashhopper393134.lua new file mode 100644 index 000000000..27910b871 --- /dev/null +++ b/server/SpawnScripts/ThievesWay/atrashhopper393134.lua @@ -0,0 +1,48 @@ +--[[ + Script Name : SpawnScripts/ThievesWay/atrashhopper393134.lua + Script Purpose : Waypoint Path for atrashhopper393134.lua + Script Author : Rylec + Script Date : 09-15-2019 06:26:32 + Script Notes : Locations collected from Live +--]] + +function spawn(NPC) + waypoints(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) +end + +function respawn(NPC) +end + +function waypoints(NPC) + MovementLoopAddLocation(NPC, -176.34, 1.22, 26.36, 2, math.random(8, 18)) + MovementLoopAddLocation(NPC, -179.68, 1.22, 31.87, 2, math.random(8, 18)) + MovementLoopAddLocation(NPC, -180.47, 1.22, 32.52, 2, math.random(8, 18)) + MovementLoopAddLocation(NPC, -180.72, 1.22, 31.05, 2, math.random(8, 18)) + MovementLoopAddLocation(NPC, -180.47, 1.22, 30.11, 2, 0) + MovementLoopAddLocation(NPC, -180.27, 1.22, 28.60, 2, 0) + MovementLoopAddLocation(NPC, -179.52, 1.22, 27.58, 2, 0) + MovementLoopAddLocation(NPC, -176.57, 1.22, 24.29, 2, 0) + -- MovementLoopAddLocation(NPC, -176.24, 1.36, 22.75, 2, 0) + MovementLoopAddLocation(NPC, -176.44, 1.36, 22.55, 2, math.random(8, 18)) + MovementLoopAddLocation(NPC, -174.53, 1.23, 27.36, 2, math.random(8, 18)) + MovementLoopAddLocation(NPC, -180.57, 1.22, 23.60, 2, math.random(8, 18)) + MovementLoopAddLocation(NPC, -180.56, 1.22, 23.67, 2, 0) + MovementLoopAddLocation(NPC, -178.99, 1.22, 36.75, 2, 0) + MovementLoopAddLocation(NPC, -179.16, 1.65, 38.60, 2, math.random(8, 18)) + MovementLoopAddLocation(NPC, -176.30, 1.22, 30.19, 2, math.random(8, 18)) + MovementLoopAddLocation(NPC, -177.44, 1.31, 35.65, 2, 0) + MovementLoopAddLocation(NPC, -177.58, 1.29, 35.61, 2, math.random(8, 18)) + MovementLoopAddLocation(NPC, -178.34, 1.22, 34.18, 2, math.random(8, 18)) + -- MovementLoopAddLocation(NPC, -177.11, 1.22, 27.72, 2, math.random(8, 18)) + MovementLoopAddLocation(NPC, -176.31, 1.22, 25.41, 2, 0) + MovementLoopAddLocation(NPC, -175.71, 1.30, 23.78, 2, math.random(8, 18)) + MovementLoopAddLocation(NPC, -176.23, 1.47, 21.95, 2, math.random(8, 18)) + MovementLoopAddLocation(NPC, -177.68, 1.22, 24.80, 2, math.random(8, 18)) + MovementLoopAddLocation(NPC, -179.71, 1.22, 25.61, 2, 0) + MovementLoopAddLocation(NPC, -181.33, 1.25, 25.67, 2, 0) + MovementLoopAddLocation(NPC, -180.13, 1.22, 27.92, 2, math.random(8, 18)) +end \ No newline at end of file diff --git a/server/SpawnScripts/ThievesWay/atrashhopper393135.lua b/server/SpawnScripts/ThievesWay/atrashhopper393135.lua new file mode 100644 index 000000000..b0ba7d127 --- /dev/null +++ b/server/SpawnScripts/ThievesWay/atrashhopper393135.lua @@ -0,0 +1,35 @@ +--[[ + Script Name : SpawnScripts/ThievesWay/atrashhopper393135.lua + Script Purpose : Waypoint Path for atrashhopper393135.lua + Script Author : Rylec + Script Date : 09-17-2019 05:52:12 + Script Notes : Locations collected from Live +--]] + +function spawn(NPC) + waypoints(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) +end + +function respawn(NPC) +end + +function waypoints(NPC) + MovementLoopAddLocation(NPC, -175.51, 1.23, 32.54, 2, math.random(8, 18)) + MovementLoopAddLocation(NPC, -179.46, 1.22, 33.34, 2, 0) + MovementLoopAddLocation(NPC, -179.46, 1.22, 33.38, 2, math.random(8, 18)) + MovementLoopAddLocation(NPC, -178.53, 1.24, 36.56, 2, 0) + MovementLoopAddLocation(NPC, -178.61, 1.24, 36.67, 2, math.random(8, 18)) + MovementLoopAddLocation(NPC, -180.45, 1.22, 26.39, 2, math.random(8, 18)) + MovementLoopAddLocation(NPC, -179.85, 1.22, 27.95, 2, math.random(8, 18)) + MovementLoopAddLocation(NPC, -175.44, 1.22, 31.52, 2, math.random(8, 18)) + MovementLoopAddLocation(NPC, -181.40, 1.26, 28.46, 2, math.random(8, 18)) + MovementLoopAddLocation(NPC, -175.29, 1.22, 29.32, 2, math.random(8, 18)) + MovementLoopAddLocation(NPC, -177.57, 1.22, 25.36, 2, math.random(8, 18)) + MovementLoopAddLocation(NPC, -175.38, 1.22, 26.64, 2, 0) + MovementLoopAddLocation(NPC, -175.44, 1.22, 26.80, 2, math.random(8, 18)) + MovementLoopAddLocation(NPC, -175.46, 1.22, 31.12, 2, 0) +end diff --git a/server/SpawnScripts/ThievesWay/atrashhopper393136.lua b/server/SpawnScripts/ThievesWay/atrashhopper393136.lua new file mode 100644 index 000000000..65c3aa4bf --- /dev/null +++ b/server/SpawnScripts/ThievesWay/atrashhopper393136.lua @@ -0,0 +1,56 @@ +--[[ + Script Name : SpawnScripts/ThievesWay/atrashhopper393136.lua + Script Purpose : Waypoint Path for atrashhopper393136.lua + Script Author : Rylec + Script Date : 09-28-2019 10:46:18 + Script Notes : Locations collected from Live +--]] + +function spawn(NPC) + waypoints(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) +end + +function respawn(NPC) +end + +function waypoints(NPC) + MovementLoopAddLocation(NPC, -180.61, 0.01, 211.78, 2, math.random(8, 18)) + MovementLoopAddLocation(NPC, -181.49, 0.05, 214.71, 2, math.random(8, 18)) + MovementLoopAddLocation(NPC, -178.70, 0.08, 217.38, 2, 0) + MovementLoopAddLocation(NPC, -175.47, 0.00, 217.84, 2, math.random(8, 18)) + MovementLoopAddLocation(NPC, -178.23, 0.06, 213.74, 2, 0) + MovementLoopAddLocation(NPC, -180.41, 0.05, 211.46, 2, 0) + MovementLoopAddLocation(NPC, -181.16, 0.28, 209.19, 2, 0, "changegrid_Going_Down") + MovementLoopAddLocation(NPC, -181.36, 0.14, 204.36, 2, 0) + MovementLoopAddLocation(NPC, -182.34, 0.00, 201.92, 2, math.random(8, 18)) + MovementLoopAddLocation(NPC, -182.64, 0.00, 204.98, 2, 0) + MovementLoopAddLocation(NPC, -181.12, 0.28, 209.11, 2, 0) + MovementLoopAddLocation(NPC, -178.88, 0.26, 211.33, 2, 0, "changegrid_Going_Up") + MovementLoopAddLocation(NPC, -176.47, 0.00, 215.88, 2, 0) + MovementLoopAddLocation(NPC, -173.69, 0.00, 216.95, 2, math.random(8, 18)) + MovementLoopAddLocation(NPC, -176.39, 0.23, 213.99, 2, 0) + MovementLoopAddLocation(NPC, -178.74, 0.13, 212.47, 2, 0) + MovementLoopAddLocation(NPC, -180.38, 0.38, 209.34, 2, 0, "changegrid_Going_Down") + MovementLoopAddLocation(NPC, -182.61, 0.00, 206.70, 2, 0) + MovementLoopAddLocation(NPC, -182.59, 0.00, 206.68, 2, math.random(8, 18)) + MovementLoopAddLocation(NPC, -181.56, 0.24, 208.80, 2, 0) + MovementLoopAddLocation(NPC, -178.76, 0.19, 212.01, 2, 0, "changegrid_Going_Up") + MovementLoopAddLocation(NPC, -174.65, 0.00, 217.95, 2, math.random(8, 18)) + MovementLoopAddLocation(NPC, -179.29, 0.08, 212.44, 2, 0) +end + +-------------------------------------------------------------------------------------- +-- NPC Change Grid +-------------------------------------------------------------------------------------- + +function changegrid_Going_Up(NPC) + SetGridID(NPC, 3053675711) +end + +function changegrid_Going_Down(NPC) + SetGridID(NPC, 1555937977) +end diff --git a/server/SpawnScripts/ThievesWay/atrashhopper393142.lua b/server/SpawnScripts/ThievesWay/atrashhopper393142.lua new file mode 100644 index 000000000..e329f8ec8 --- /dev/null +++ b/server/SpawnScripts/ThievesWay/atrashhopper393142.lua @@ -0,0 +1,58 @@ +--[[ + Script Name : SpawnScripts/ThievesWay/atrashhopper393142.lua + Script Purpose : Waypoint Path for atrashhopper393142.lua + Script Author : Rylec + Script Date : 09-22-2019 05:03:15 + Script Notes : Locations collected from Live +--]] + +function spawn(NPC) + waypoints(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) +end + +function respawn(NPC) +end + +function waypoints(NPC) + MovementLoopAddLocation(NPC, -172.56, 1.78, 61.25, 2, math.random(8, 18)) + MovementLoopAddLocation(NPC, -169.91, 1.22, 61.12, 2, 0) + MovementLoopAddLocation(NPC, -169.50, 1.28, 59.63, 2, 0) + MovementLoopAddLocation(NPC, -173.47, 1.72, 58.77, 2, 0, "changegrid_Going_Down") + MovementLoopAddLocation(NPC, -175.35, 1.33, 57.62, 2, 0) + MovementLoopAddLocation(NPC, -176.55, 1.46, 55.43, 2, 0) + MovementLoopAddLocation(NPC, -177.46, 1.82, 52.98, 2, 0) + MovementLoopAddLocation(NPC, -178.90, 1.60, 52.12, 2, 0) + MovementLoopAddLocation(NPC, -179.34, 1.34, 51.48, 2, 0) + MovementLoopAddLocation(NPC, -179.38, 1.34, 51.28, 2, math.random(8, 18)) + MovementLoopAddLocation(NPC, -178.93, 1.34, 44.85, 2, math.random(8, 18)) + MovementLoopAddLocation(NPC, -179.45, 1.26, 58.31, 2, 0) + MovementLoopAddLocation(NPC, -179.45, 1.28, 58.62, 2, math.random(8, 18)) + MovementLoopAddLocation(NPC, -177.30, 1.22, 57.29, 2, math.random(8, 18)) + MovementLoopAddLocation(NPC, -178.00, 1.24, 55.89, 2, 0) + MovementLoopAddLocation(NPC, -178.18, 1.34, 50.89, 2, 0) + MovementLoopAddLocation(NPC, -179.07, 1.34, 49.36, 2, 0) + MovementLoopAddLocation(NPC, -180.17, 1.34, 46.87, 2, math.random(8, 18)) + MovementLoopAddLocation(NPC, -178.48, 1.34, 50.73, 2, 0) + MovementLoopAddLocation(NPC, -177.61, 1.79, 52.43, 2, 0) + MovementLoopAddLocation(NPC, -177.41, 1.29, 56.01, 2, 0) + MovementLoopAddLocation(NPC, -175.61, 1.28, 57.90, 2, 0) + MovementLoopAddLocation(NPC, -172.35, 1.86, 59.41, 2, 0, "changegrid_Going_Up") +end + +-------------------------------------------------------------------------------------- +-- NPC Change Grid +-------------------------------------------------------------------------------------- + +function changegrid_Going_Up(NPC) + SetGridID(NPC, 3098524280) +end + +function changegrid_Going_Down(NPC) + SetGridID(NPC, 2981397110) +end + + diff --git a/server/SpawnScripts/ThievesWay/atrashhopper393145.lua b/server/SpawnScripts/ThievesWay/atrashhopper393145.lua new file mode 100644 index 000000000..969438c99 --- /dev/null +++ b/server/SpawnScripts/ThievesWay/atrashhopper393145.lua @@ -0,0 +1,46 @@ +--[[ + Script Name : SpawnScripts/ThievesWay/atrashhopper393145.lua + Script Purpose : Waypoint Path for atrashhopper393145.lua + Script Author : Rylec + Script Date : 09-27-2019 05:45:08 + Script Notes : Locations collected from Live +--]] + +function spawn(NPC) + waypoints(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) +end + +function respawn(NPC) +end + +function waypoints(NPC) + MovementLoopAddLocation(NPC, -151.64, 0.00, 217.96, 2, math.random(8, 18)) + MovementLoopAddLocation(NPC, -152.14, 0.00, 217.94, 2, 0) + MovementLoopAddLocation(NPC, -155.47, 0.01, 218.08, 2, math.random(8, 18)) + MovementLoopAddLocation(NPC, -153.32, 0.00, 216.99, 2, math.random(8, 18)) + MovementLoopAddLocation(NPC, -162.66, 0.00, 217.14, 2, 0) + MovementLoopAddLocation(NPC, -162.62, 0.00, 217.14, 2, math.random(8, 18)) + MovementLoopAddLocation(NPC, -159.31, 0.24, 217.95, 2, 0) + MovementLoopAddLocation(NPC, -157.46, 0.00, 217.65, 2, 0) + MovementLoopAddLocation(NPC, -155.80, 0.00, 216.71, 2, 0) + MovementLoopAddLocation(NPC, -152.22, 0.01, 218.13, 2, 0) + MovementLoopAddLocation(NPC, -154.78, 0.00, 217.28, 2, 0) + MovementLoopAddLocation(NPC, -160.82, 0.00, 217.64, 2, 0) + MovementLoopAddLocation(NPC, -162.14, 0.06, 218.69, 2, 0) + MovementLoopAddLocation(NPC, -163.59, 0.06, 218.66, 2, math.random(8, 18)) + MovementLoopAddLocation(NPC, -160.98, 0.00, 217.68, 2, 0) + MovementLoopAddLocation(NPC, -157.08, 0.00, 217.92, 2, 0) + MovementLoopAddLocation(NPC, -154.37, 0.03, 218.29, 2, 0) + MovementLoopAddLocation(NPC, -151.40, 0.00, 218.04, 2, math.random(8, 18)) + MovementLoopAddLocation(NPC, -152.49, 0.00, 217.42, 2, 0) + MovementLoopAddLocation(NPC, -157.28, 0.05, 215.61, 2, 0) + MovementLoopAddLocation(NPC, -158.91, 0.34, 215.20, 2, 0) + MovementLoopAddLocation(NPC, -161.00, 0.00, 216.15, 2, 0) + MovementLoopAddLocation(NPC, -161.18, 0.00, 217.09, 2, math.random(8, 18)) + MovementLoopAddLocation(NPC, -157.47, 0.00, 216.66, 2, 0) + MovementLoopAddLocation(NPC, -155.15, 0.00, 217.22, 2, math.random(8, 18)) +end diff --git a/server/SpawnScripts/ThievesWay/atrashhopper393146.lua b/server/SpawnScripts/ThievesWay/atrashhopper393146.lua new file mode 100644 index 000000000..721471b65 --- /dev/null +++ b/server/SpawnScripts/ThievesWay/atrashhopper393146.lua @@ -0,0 +1,50 @@ +--[[ + Script Name : SpawnScripts/ThievesWay/atrashhopper393146.lua + Script Purpose : Waypoint Path for atrashhopper393146.lua + Script Author : Rylec + Script Date : 09-27-2019 05:45:12 + Script Notes : Locations collected from Live +--]] + +function spawn(NPC) + waypoints(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) +end + +function respawn(NPC) +end + +function waypoints(NPC) + MovementLoopAddLocation(NPC, -162.27, 0.00, 217.16, 2, math.random(8, 18)) + MovementLoopAddLocation(NPC, -160.56, 0.00, 216.73, 2, 0) + MovementLoopAddLocation(NPC, -157.50, 0.00, 216.73, 2, 0) + MovementLoopAddLocation(NPC, -155.99, 0.00, 217.20, 2, 0) + MovementLoopAddLocation(NPC, -156.01, 0.00, 217.20, 2, math.random(8, 18)) + MovementLoopAddLocation(NPC, -158.74, 0.24, 217.81, 2, 0) + MovementLoopAddLocation(NPC, -160.73, 0.04, 218.40, 2, 0) + MovementLoopAddLocation(NPC, -162.92, 0.00, 217.87, 2, 0) + MovementLoopAddLocation(NPC, -164.89, 0.00, 217.80, 2, 0) + MovementLoopAddLocation(NPC, -163.13, 0.00, 216.56, 2, 0) + MovementLoopAddLocation(NPC, -161.42, 0.00, 217.08, 2, 0) + MovementLoopAddLocation(NPC, -161.55, 0.00, 217.06, 2, math.random(8, 18)) + MovementLoopAddLocation(NPC, -165.34, 0.08, 218.86, 2, math.random(8, 18)) + MovementLoopAddLocation(NPC, -160.42, 0.00, 217.68, 2, 0) + MovementLoopAddLocation(NPC, -157.48, 0.00, 217.92, 2, 0) + MovementLoopAddLocation(NPC, -155.59, 0.00, 217.92, 2, 0) + MovementLoopAddLocation(NPC, -152.78, 0.00, 216.90, 2, math.random(8, 18)) + MovementLoopAddLocation(NPC, -155.85, 0.00, 217.43, 2, 0) + MovementLoopAddLocation(NPC, -158.83, 0.24, 217.38, 2, 0) + MovementLoopAddLocation(NPC, -160.98, 0.00, 218.05, 2, 0) + MovementLoopAddLocation(NPC, -162.44, 0.00, 217.11, 2, math.random(8, 18)) + MovementLoopAddLocation(NPC, -156.26, 0.00, 217.20, 2, math.random(8, 18)) + MovementLoopAddLocation(NPC, -160.55, 0.02, 215.99, 2, 0) + MovementLoopAddLocation(NPC, -161.78, 0.08, 214.84, 2, math.random(8, 18)) + MovementLoopAddLocation(NPC, -165.21, 0.00, 216.89, 2, 0) + MovementLoopAddLocation(NPC, -165.22, 0.00, 216.93, 2, math.random(8, 18)) + MovementLoopAddLocation(NPC, -160.90, 0.01, 218.08, 2, 0) + MovementLoopAddLocation(NPC, -157.52, 0.00, 217.52, 2, 0) + MovementLoopAddLocation(NPC, -154.86, 0.00, 216.83, 2, 0) +end diff --git a/server/SpawnScripts/ThievesWay/atrashhopper393148.lua b/server/SpawnScripts/ThievesWay/atrashhopper393148.lua new file mode 100644 index 000000000..0b595f1f2 --- /dev/null +++ b/server/SpawnScripts/ThievesWay/atrashhopper393148.lua @@ -0,0 +1,42 @@ +--[[ + Script Name : SpawnScripts/ThievesWay/atrashhopper393148.lua + Script Purpose : Waypoint Path for atrashhopper393148.lua + Script Author : Rylec + Script Date : 09-18-2019 09:10:30 + Script Notes : Locations collected from Live +--]] + +function spawn(NPC) + waypoints(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) +end + +function respawn(NPC) +end + +function waypoints(NPC) + MovementLoopAddLocation(NPC, -152.40, 1.34, 60.89, 2, math.random(8, 18)) + MovementLoopAddLocation(NPC, -154.00, 1.34, 61.00, 2, 0) + MovementLoopAddLocation(NPC, -159.10, 1.57, 60.95, 2, 0) + MovementLoopAddLocation(NPC, -159.00, 1.58, 61.00, 2, math.random(8, 18)) + MovementLoopAddLocation(NPC, -157.33, 1.34, 61.20, 2, 0) + MovementLoopAddLocation(NPC, -153.11, 1.34, 61.75, 2, 0) + -- MovementLoopAddLocation(NPC, -153.25, 1.34, 61.35, 2, math.random(8, 18)) + MovementLoopAddLocation(NPC, -156.73, 1.34, 62.07, 2, 0) + MovementLoopAddLocation(NPC, -156.63, 1.34, 62.24, 2, math.random(4, 6)) + MovementLoopAddLocation(NPC, -156.03, 1.34, 61.45, 2, 0) + MovementLoopAddLocation(NPC, -155.29, 1.34, 60.93, 2, 0) + MovementLoopAddLocation(NPC, -155.17, 1.34, 60.98, 2, math.random(8, 18)) + MovementLoopAddLocation(NPC, -154.06, 1.34, 61.99, 2, 0) + MovementLoopAddLocation(NPC, -153.93, 1.34, 62.25, 2, math.random(8, 18)) + MovementLoopAddLocation(NPC, -155.58, 1.34, 62.01, 2, 0) + MovementLoopAddLocation(NPC, -155.58, 1.34, 61.75, 2, math.random(4, 6)) + MovementLoopAddLocation(NPC, -162.74, 1.22, 61.85, 2, math.random(8, 18)) + -- MovementLoopAddLocation(NPC, -162.60, 1.22, 61.70, 2, math.random(8, 18)) + MovementLoopAddLocation(NPC, -159.02, 1.58, 62.03, 2, 0) + MovementLoopAddLocation(NPC, -158.78, 1.58, 61.98, 2, math.random(8, 18)) + MovementLoopAddLocation(NPC, -152.40, 1.34, 60.70, 2, math.random(8, 18)) +end diff --git a/server/SpawnScripts/ThievesWay/atrashhopper393149.lua b/server/SpawnScripts/ThievesWay/atrashhopper393149.lua new file mode 100644 index 000000000..abbd9708d --- /dev/null +++ b/server/SpawnScripts/ThievesWay/atrashhopper393149.lua @@ -0,0 +1,36 @@ +--[[ + Script Name : SpawnScripts/ThievesWay/atrashhopper393149.lua + Script Purpose : Waypoint Path for atrashhopper393149.lua + Script Author : Rylec + Script Date : 09-22-2019 08:31:30 + Script Notes : Locations collected from Live +--]] + +function spawn(NPC) + waypoints(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) +end + +function respawn(NPC) +end + +function waypoints(NPC) + MovementLoopAddLocation(NPC, -157.31, 1.34, 60.92, 2, math.random(8, 18)) + MovementLoopAddLocation(NPC, -160.95, 1.25, 59.94, 2, 0) + MovementLoopAddLocation(NPC, -160.65, 1.25, 59.95, 2, math.random(8, 18)) + MovementLoopAddLocation(NPC, -156.75, 1.34, 61.96, 2, 0) + MovementLoopAddLocation(NPC, -156.48, 1.34, 61.88, 2, math.random(8, 18)) + MovementLoopAddLocation(NPC, -152.51, 1.34, 61.90, 2, 0) + MovementLoopAddLocation(NPC, -152.09, 1.34, 61.66, 2, math.random(8, 18)) + MovementLoopAddLocation(NPC, -156.04, 1.34, 62.18, 2, 0) + MovementLoopAddLocation(NPC, -156.38, 1.34, 62.00, 2, math.random(8, 18)) + MovementLoopAddLocation(NPC, -158.98, 1.58, 60.94, 2, math.random(8, 18)) + MovementLoopAddLocation(NPC, -153.60, 1.34, 60.84, 2, 0) + MovementLoopAddLocation(NPC, -153.15, 1.34, 61.08, 2, math.random(8, 18)) + MovementLoopAddLocation(NPC, -154.25, 1.34, 61.45, 2, 0) + MovementLoopAddLocation(NPC, -154.57, 1.34, 61.64, 2, 0) + MovementLoopAddLocation(NPC, -154.57, 1.34, 61.64, 2, math.random(8, 18)) +end diff --git a/server/SpawnScripts/ThunderingSteppes/Blackjack.lua b/server/SpawnScripts/ThunderingSteppes/Blackjack.lua new file mode 100644 index 000000000..f5936ec59 --- /dev/null +++ b/server/SpawnScripts/ThunderingSteppes/Blackjack.lua @@ -0,0 +1,714 @@ +-- Blackjack script +--[[ +Phil NPCID: 2490682 (on live) +Script Name: SpawnScripts/ThunderingSteppes/Blackjack.lua +Script Purpose: a Blackjack game with bets, payouts, and real shuffling +Script Author: Patrikpatrik +Script Date: August 22 2016 +Script Notes: seems bulletproof but needs more testing. 7th revision +--]] + +--52 cards in a deck +local cardtable = { +'A♠', '2♠', '3♠','4♠','5♠','6♠','7♠', +'8♠','9♠','10♠','Jack♠','Queen♠','King♠', +'A♥', '2♥', '3♥','4♥','5♥','6♥','7♥', +'8♥','9♥','10♥','Jack♥','Queen♥','King♥', +'A♣', '2♣', '3♣','4♣','5♣','6♣','7♣', +'8♣','9♣','10♣','Jack♣','Queen♣','King♣', +'A♦', '2♦', '3♦','4♦','5♦','6♦','7♦', +'8♦','9♦','10♦','Jack♦','Queen♦','King♦', +} +--This shuffles the deck of cards randomly each pass +function shuffle(NPC, Spawn) + new = {} + for i=1, #cardtable do + table.insert(new, math.random(i), cardtable[i]) + end +end +--Assign values to firstcard +function CardValues1(NPC, Spawn) + if firstcard == 'A♠' or firstcard == 'A♥' or firstcard == 'A♣' or firstcard == 'A♦' then + first = 1 + myace = 10 + elseif firstcard == '2♠' or firstcard == '2♥' or firstcard == '2♣' or firstcard == '2♦' then + first = 2 + elseif firstcard == '3♠' or firstcard == '3♥' or firstcard == '3♣' or firstcard == '3♦' then + first = 3 + elseif firstcard == '4♠' or firstcard == '4♥' or firstcard == '4♣' or firstcard == '4♦' then + first = 4 + elseif firstcard == '5♠' or firstcard == '5♥' or firstcard == '5♣' or firstcard == '5♦' then + first = 5 + elseif firstcard == '6♠' or firstcard == '6♥' or firstcard == '6♣' or firstcard == '6♦' then + first = 6 + elseif firstcard == '7♠' or firstcard == '7♥' or firstcard == '7♣' or firstcard == '7♦' then + first = 7 + elseif firstcard == '8♠' or firstcard == '8♥' or firstcard == '8♣' or firstcard == '8♦' then + first = 8 + elseif firstcard == '9♠' or firstcard == '9♥' or firstcard == '9♣' or firstcard == '9♦' then + first = 9 + elseif firstcard == '10♠' or firstcard == '10♥' or firstcard == '10♣' or firstcard == '10♦' then + first = 10 + elseif firstcard == 'Jack♠' or firstcard == 'Jack♥' or firstcard == 'Jack♣' or firstcard == 'Jack♦' then + first = 10 + elseif firstcard == 'Queen♠' or firstcard == 'Queen♥' or firstcard == 'Queen♣' or firstcard == 'Queen♦' then + first = 10 + elseif firstcard == 'King♠' or firstcard == 'King♥' or firstcard == 'King♣' or firstcard == 'King♦' then + first = 10 + else + end +end +--Assign values to secondcard +function CardValues2(NPC, Spawn) + if secondcard == 'A♠' or secondcard == 'A♥' or secondcard == 'A♣' or secondcard == 'A♦' then + second = 1 + dealerace = 10 + elseif secondcard == '2♠' or secondcard == '2♥' or secondcard == '2♣' or secondcard == '2♦' then + second = 2 + elseif secondcard == '3♠' or secondcard == '3♥' or secondcard == '3♣' or secondcard == '3♦' then + second = 3 + elseif secondcard == '4♠' or secondcard == '4♥' or secondcard == '4♣' or secondcard == '4♦' then + second = 4 + elseif secondcard == '5♠' or secondcard == '5♥' or secondcard == '5♣' or secondcard == '5♦' then + second = 5 + elseif secondcard == '6♠' or secondcard == '6♥' or secondcard == '6♣' or secondcard == '6♦' then + second = 6 + elseif secondcard == '7♠' or secondcard == '7♥' or secondcard == '7♣' or secondcard == '7♦' then + second = 7 + elseif secondcard == '8♠' or secondcard == '8♥' or secondcard == '8♣' or secondcard == '8♦' then + second = 8 + elseif secondcard == '9♠' or secondcard == '9♥' or secondcard == '9♣' or secondcard == '9♦' then + second = 9 + elseif secondcard == '10♠' or secondcard == '10♥' or secondcard == '10♣' or secondcard == '10♦' then + second = 10 + elseif secondcard == 'Jack♠' or secondcard == 'Jack♥' or secondcard == 'Jack♣' or secondcard == 'Jack♦' then + second = 10 + elseif secondcard == 'Queen♠' or secondcard == 'Queen♥' or secondcard == 'Queen♣' or secondcard == 'Queen♦' then + second = 10 + elseif secondcard == 'King♠' or secondcard == 'King♥' or secondcard == 'King♣' or secondcard == 'King♦' then + second = 10 + else + end +end +--Assign values to thirdcard +function CardValues3(NPC, Spawn) + if thirdcard == 'A♠' or thirdcard == 'A♥' or thirdcard == 'A♣' or thirdcard == 'A♦' then + third = 1 + myace = 10 + elseif thirdcard == '2♠' or thirdcard == '2♥' or thirdcard == '2♣' or thirdcard == '2♦' then + third = 2 + elseif thirdcard == '3♠' or thirdcard == '3♥' or thirdcard == '3♣' or thirdcard == '3♦' then + third = 3 + elseif thirdcard == '4♠' or thirdcard == '4♥' or thirdcard == '4♣' or thirdcard == '4♦' then + third = 4 + elseif thirdcard == '5♠' or thirdcard == '5♥' or thirdcard == '5♣' or thirdcard == '5♦' then + third = 5 + elseif thirdcard == '6♠' or thirdcard == '6♥' or thirdcard == '6♣' or thirdcard == '6♦' then + third = 6 + elseif thirdcard == '7♠' or thirdcard == '7♥' or thirdcard == '7♣' or thirdcard == '7♦' then + third = 7 + elseif thirdcard == '8♠' or thirdcard == '8♥' or thirdcard == '8♣' or thirdcard == '8♦' then + third = 8 + elseif thirdcard == '9♠' or thirdcard == '9♥' or thirdcard == '9♣' or thirdcard == '9♦' then + third = 9 + elseif thirdcard == '10♠' or thirdcard == '10♥' or thirdcard == '10♣' or thirdcard == '10♦' then + third = 10 + elseif thirdcard == 'Jack♠' or thirdcard == 'Jack♥' or thirdcard == 'Jack♣' or thirdcard == 'Jack♦' then + third = 10 + elseif thirdcard == 'Queen♠' or thirdcard == 'Queen♥' or thirdcard == 'Queen♣' or thirdcard == 'Queen♦' then + third = 10 + elseif thirdcard == 'King♠' or thirdcard == 'King♥' or thirdcard == 'King♣' or thirdcard == 'King♦' then + third = 10 + else + end +end +--Assign values to fourthcard +function CardValues4(NPC, Spawn) + if fourthcard == 'A♠' or fourthcard == 'A♥' or fourthcard == 'A♣' or fourthcard == 'A♦' then + fourth = 1 + dealerace = 10 + elseif fourthcard == '2♠' or fourthcard == '2♥' or fourthcard == '2♣' or fourthcard == '2♦' then + fourth = 2 + elseif fourthcard == '3♠' or fourthcard == '3♥' or fourthcard == '3♣' or fourthcard == '3♦' then + fourth = 3 + elseif fourthcard == '4♠' or fourthcard == '4♥' or fourthcard == '4♣' or fourthcard == '4♦' then + fourth = 4 + elseif fourthcard == '5♠' or fourthcard == '5♥' or fourthcard == '5♣' or fourthcard == '5♦' then + fourth = 5 + elseif fourthcard == '6♠' or fourthcard == '6♥' or fourthcard == '6♣' or fourthcard == '6♦' then + fourth = 6 + elseif fourthcard == '7♠' or fourthcard == '7♥' or fourthcard == '7♣' or fourthcard == '7♦' then + fourth = 7 + elseif fourthcard == '8♠' or fourthcard == '8♥' or fourthcard == '8♣' or fourthcard == '8♦' then + fourth = 8 + elseif fourthcard == '9♠' or fourthcard == '9♥' or fourthcard == '9♣' or fourthcard == '9♦' then + fourth = 9 + elseif fourthcard == '10♠' or fourthcard == '10♥' or fourthcard == '10♣' or fourthcard == '10♦' then + fourth = 10 + elseif fourthcard == 'Jack♠' or fourthcard == 'Jack♥' or fourthcard == 'Jack♣' or fourthcard == 'Jack♦' then + fourth = 10 + elseif fourthcard == 'Queen♠' or fourthcard == 'Queen♥' or fourthcard == 'Queen♣' or fourthcard == 'Queen♦' then + fourth = 10 + elseif fourthcard == 'King♠' or fourthcard == 'King♥' or fourthcard == 'King♣' or fourthcard == 'King♦' then + fourth = 10 + else + end +end +--Assign values to nextcard +function CardValues5(NPC, Spawn) + if extracard == 'A♠' or extracard == 'A♥' or extracard == 'A♣' or extracard == 'A♦' then + extra = 1 + nextace = 10 + elseif extracard == '2♠' or extracard == '2♥' or extracard == '2♣' or extracard == '2♦' then + extra = 2 + elseif extracard == '3♠' or extracard == '3♥' or extracard == '3♣' or extracard == '3♦' then + extra = 3 + elseif extracard == '4♠' or extracard == '4♥' or extracard == '4♣' or extracard == '4♦' then + extra = 4 + elseif extracard == '5♠' or extracard == '5♥' or extracard == '5♣' or extracard == '5♦' then + extra = 5 + elseif extracard == '6♠' or extracard == '6♥' or extracard == '6♣' or extracard == '6♦' then + extra = 6 + elseif extracard == '7♠' or extracard == '7♥' or extracard == '7♣' or extracard == '7♦' then + extra = 7 + elseif extracard == '8♠' or extracard == '8♥' or extracard == '8♣' or extracard == '8♦' then + extra = 8 + elseif extracard == '9♠' or extracard == '9♥' or extracard == '9♣' or extracard == '9♦' then + extra = 9 + elseif extracard == '10♠' or extracard == '10♥' or extracard == '10♣' or extracard == '10♦' then + extra = 10 + elseif extracard == 'Jack♠' or extracard == 'Jack♥' or extracard == 'Jack♣' or extracard == 'Jack♦' then + extra = 10 + elseif extracard == 'Queen♠' or extracard == 'Queen♥' or extracard == 'Queen♣' or extracard == 'Queen♦' then + extra = 10 + elseif extracard == 'King♠' or extracard == 'King♥' or extracard == 'King♣' or extracard == 'King♦' then + extra = 10 + else + end +end +--Deals the cards +function Deal(NPC, Spawn) + shuffle(NPC, Spawn) + shuffle(NPC, Spawn) + + burncard = table.remove(new, 1) --burns a card off the top + firstcard = table.remove(new, 1) --1st card goes to player + secondcard = table.remove(new, 1) --2nd card goes to dealer + thirdcard = table.remove(new, 1) --3rd card goes to player + fourthcard = table.remove(new, 1) --4th card goes to dealer + + CardValues1() + CardValues2() + CardValues3() + CardValues4() --assigns values + + --peeking at what goes on at this junction + --Say(NPC, "In deal function firstcard is [" .. firstcard .. "] value of " .. first .. ". Secondcard is [" .. secondcard .. "] value of " .. second .. ".") + --Say(NPC, "In deal function thirdcard is [" .. thirdcard .. "] value of " .. third .. ". Fourthcard is [" .. fourthcard .. "] value of " .. fourth .. ".") + +end +--This function combines total, checks for aces logic, and determines if blackjack occured +function Calculates(NPC, Spawn) + playertotal = first + third + dealertotal = second + fourth + if myace == 10 and dealerace == 10 and playertotal == 11 and dealertotal == 11 then + Bothbj(NPC, Spawn) + elseif dealerace == 10 and dealertotal == 11 then + dealertotal = 21 + Dealerbj(NPC, Spawn) + elseif myace == 10 and playertotal == 11 then + playertotal = 21 + Playerbj(NPC, Spawn) + elseif myace == 10 and dealerace == 10 then + alt = " or " + alt2 = " or " + myaces = first + third + 10 + dealeraces = second + fourth + 10 + HitStand1(NPC, Spawn) + elseif myace == 10 then + alt = " or " + alt2 = "" + dealeraces = "" + myaces = first + third + 10 + HitStand1(NPC, Spawn) + elseif dealerace == 10 then + alt = "" + alt2 = " or " + myaces = "" + dealeraces = second + fourth + 10 + HitStand1(NPC, Spawn) + else + alt = "" + alt2 = "" + myaces = "" + dealeraces = "" + HitStand1(NPC, Spawn) + end +end +--calculates the next card etc.. +function CalcMore(NPC, Spawn) + playertotal = playertotal + extra + if myace == 10 then + alt = " or " + myaces = playertotal + 10 + elseif nextace == 10 then + alt = " or " + myaces = playertotal + 10 + else + alt = "" + myaces = "" + end +end +--Text results +function Bothbj(NPC, Spawn) + Emote(NPC, "reveals [" .. secondcard .. "][" .. fourthcard .. "]") + Emote(Spawn, "peeks at [" .. firstcard .. "][" .. thirdcard .. "]") + Say(NPC, "You both get blackjack, it's a push!") + SendPopUpMessage(Spawn, "You both get blackjack, it's a push!", 255, 255, 0) + PushLose1(NPC, Spawn) + AddCoin(Spawn, coins) -- Get your money back + Dumbdoh1(NPC, Spawn) + Clearvars() +end +function Dealerbj(NPC, Spawn) + Emote(Spawn, "peeks at [" .. firstcard .. "][" .. thirdcard .. "] for a total of " .. playertotal .. ".") + Emote(NPC, "reveals [" .. secondcard .. "][" .. fourthcard .. "]") + Say(NPC, "I'm sorry but dealer hits blackjack!") + SendPopUpMessage(Spawn, "Dealer hits blackjack! You lose" .. GetCoinMessage(coins) .. "!", 255, 0, 0) + ApplySpellVisual(Spawn, 874) + Sorry1(NPC, Spawn) + Clearvars() +end +function Playerbj(NPC, Spawn) + Emote(Spawn, "peeks at [" .. firstcard .. "][" .. thirdcard .. "]") + Say(NPC, "Congratulations, you got blackjack!") + Winning1(NPC, Spawn) + PlaySound(NPC, "sounds/test/endquest.wav", GetX(NPC), GetY(NPC), GetZ(NPC)) --Ding! + ApplySpellVisual(Spawn, 872) --Jackpot style! + AddCoin(Spawn, coins/2*3) + SendPopUpMessage(Spawn, "Congratulations " .. GetName(Spawn) .. " you got blackjack! You win" .. GetCoinMessage(coins/2*3) .. "!" , 0, 255, 0) + Emote(NPC, "reveals [" .. secondcard .. "][" .. fourthcard .. "]") + Clearvars() +end +-- Agree sounds +function Agree(NPC, Spawn) + agree1 = math.random(3) + if agree1 == 1 then + --PlayFlavor(NPC, "voiceover/english/voice_emotes/agree/agree_1_1006.mp3", "", "agree", 0, 0, Spawn) + PlaySound(NPC, "voiceover/english/voice_emotes/agree/agree_1_1006.mp3", GetX(NPC), GetY(NPC), GetZ(NPC)) + elseif agree1 == 2 then + --PlayFlavor(NPC, "voiceover/english/voice_emotes/agree/agree_2_1006.mp3", "", "agree", 0, 0, Spawn) + PlaySound(NPC, "voiceover/english/voice_emotes/agree/agree_2_1006.mp3", GetX(NPC), GetY(NPC), GetZ(NPC)) + elseif agree1 == 3 then + --PlayFlavor(NPC, "voiceover/english/voice_emotes/agree/agree_3_1006.mp3", "", "agree", 0, 0, Spawn) + PlaySound(NPC, "voiceover/english/voice_emotes/agree/agree_3_1006.mp3", GetX(NPC), GetY(NPC), GetZ(NPC)) + end +end +-- dumb doh sounds +function Dumbdoh1(NPC, Spawn) + randpickv = math.random(3) + if randpickv == 1 then + PlayFlavor(NPC, "voiceover/english/voice_emotes/doh/doh_1006.mp3", "", "doh", 0, 0, Spawn) + elseif randpickv == 2 then + PlayFlavor(NPC, "voiceover/english/voice_emotes/doh/doh_1022.mp3", "", "doh", 0, 0, Spawn) + else + PlayFlavor(NPC, "voiceover/english/voice_emotes/doh/doh_1050.mp3", "", "doh", 0, 0, Spawn) + end +end +-- Sorry sounds +function Sorry1(NPC, Spawn) + sorrypick = math.random(3) + if sorrypick == 1 then + PlayFlavor(NPC, "voiceover/english/voice_emotes/apologies/apologies_1_1006.mp3", "", "apologize", 0, 0, Spawn) + elseif sorrypick == 2 then + PlayFlavor(NPC, "voiceover/english/voice_emotes/apologies/apologies_2_1006.mp3", "", "apologize", 0, 0, Spawn) + elseif sorrypick == 3 then + PlayFlavor(NPC, "voiceover/english/voice_emotes/apologies/apologies_3_1006.mp3", "", "apologize", 0, 0, Spawn) + end +end +-- Levels of coin falling function +function CoinFalling1(NPC, Spawn) + -- if coins == 100 then + + if coins == 10000 then + --Too cheap for falling coins! + elseif coins == 100000 then + ApplySpellVisual(Spawn, 869) + elseif coins == 500000 then + ApplySpellVisual(Spawn, 870) + elseif coins == 10000000 then + ApplySpellVisual(Spawn, 871) + end +end +-- Winning emotes function +function Winning1(NPC, Spawn) + winning = math.random(12) + if winning == 1 then + PlayFlavor(Spawn, "", "", "agree", 0, 0, NPC) + elseif winning == 2 then + PlayFlavor(Spawn, "", "", "bow", 0, 0, NPC) + elseif winning == 3 then + PlayFlavor(Spawn, "", "", "cackle", 0, 0, NPC) + elseif winning == 4 then + PlayFlavor(Spawn, "", "", "cheer", 0, 0, NPC) + elseif winning == 5 then + PlayFlavor(Spawn, "", "", "chuckle", 0, 0, NPC) + elseif winning == 6 then + PlayFlavor(Spawn, "", "", "cutthroat", 0, 0, NPC) + elseif winning == 7 then + PlayFlavor(Spawn, "", "", "flex", 0, 0, NPC) + elseif winning == 8 then + PlayFlavor(Spawn, "", "", "happy", 0, 0, NPC) + elseif winning == 9 then + PlayFlavor(Spawn, "", "", "heartattack", 0, 0, NPC) + elseif winning == 10 then + PlayFlavor(Spawn, "", "", "heelclick", 0, 0, NPC) + elseif winning == 11 then + PlayFlavor(Spawn, "", "", "howl", 0, 0, NPC) + elseif winning == 12 then + PlayFlavor(Spawn, "", "", "laugh", 0, 0, NPC) + end +end +-- Losing /pushing emotes function +function PushLose1(NPC, Spawn) + PushLose = math.random(11) + if PushLose == 1 then + PlayFlavor(Spawn, "", "", "shrug", 0, 0, NPC) + elseif PushLose == 2 then + PlayFlavor(Spawn, "", "", "violin", 0, 0, NPC) + elseif PushLose == 3 then + PlayFlavor(Spawn, "", "", "boggle", 0, 0, NPC) + elseif PushLose == 4 then + PlayFlavor(Spawn, "", "", "confused", 0, 0, NPC) + elseif PushLose == 5 then + PlayFlavor(Spawn, "", "", "cringe", 0, 0, NPC) + elseif PushLose == 6 then + PlayFlavor(Spawn, "", "", "doh", 0, 0, NPC) + elseif PushLose == 7 then + PlayFlavor(Spawn, "", "", "doubletake", 0, 0, NPC) + elseif PushLose == 8 then + PlayFlavor(Spawn, "", "", "hearnoevil", 0, 0, NPC) + elseif PushLose == 9 then + PlayFlavor(Spawn, "", "", "speaknoevil", 0, 0, NPC) + elseif PushLose == 10 then + PlayFlavor(Spawn, "", "", "lookaway", 0, 0, NPC) + elseif PushLose == 11 then + PlayFlavor(Spawn, "", "", "sigh", 0, 0, NPC) + end +end +-- Busting emotes function +function Busting1(NPC, Spawn) + Busting = math.random(11) + if Busting == 1 then + PlayFlavor(Spawn, "", "", "rude", 0, 0, NPC) + elseif Busting == 2 then + PlayFlavor(Spawn, "", "", "heartattack", 0, 0, NPC) + elseif Busting == 3 then + PlayFlavor(Spawn, "", "", "curse", 0, 0, NPC) + elseif Busting == 4 then + PlayFlavor(Spawn, "", "", "frustrated", 0, 0, NPC) + elseif Busting == 5 then + PlayFlavor(Spawn, "", "", "swear", 0, 0, NPC) + elseif Busting == 6 then + PlayFlavor(Spawn, "", "", "tantrum", 0, 0, NPC) + elseif Busting == 7 then + PlayFlavor(Spawn, "", "", "threaten", 0, 0, NPC) + elseif Busting == 8 then + PlayFlavor(Spawn, "", "", "brandish", 0, 0, NPC) + elseif Busting == 9 then + PlayFlavor(Spawn, "", "", "crazy", 0, 0, NPC) + elseif Busting == 10 then + PlayFlavor(Spawn, "", "", "cry", 0, 0, NPC) + elseif Busting == 11 then + PlayFlavor(Spawn, "", "", "sulk", 0, 0, NPC) + end +end +--This function iterates player hit +function Hit1(NPC, Spawn) + extracard = table.remove(new, 1) + CardValues5() + CalcMore(NPC, Spawn) + + if playertotal > 21 then + Emote(Spawn, "receives a [" .. extracard .. "] for a total of " .. playertotal .. ".") + Say(NPC, "I'm sorry but you bust!") + Busting1(NPC, Spawn) + Sorry1(NPC, Spawn) + Emote(NPC, "reveals [" .. secondcard .. "][" .. fourthcard .. "]") + SendPopUpMessage(Spawn, "Player busts! You lose " .. GetCoinMessage(coins) .. "!", 255, 0, 0) + Clearvars() + elseif myaces~= "" and myaces < 22 then + conversation = CreateConversation() + AddConversationOption(conversation, "Hit!", "Hit1") + AddConversationOption(conversation, "Stand!", "Stand1") + StartConversation(conversation, NPC, Spawn, "You HIT!") + Emote(Spawn, "receives a [" .. extracard .. "] for a total of " .. playertotal .. alt .. myaces .. ".") + elseif playertotal <= 21 then + conversation = CreateConversation() + AddConversationOption(conversation, "Hit!", "Hit1") + AddConversationOption(conversation, "Stand!", "Stand1") + StartConversation(conversation, NPC, Spawn, "You HIT!") + Emote(Spawn, "receives a [" .. extracard .. "] for a total of " .. playertotal .. ".") + end +end +--Function for dealer's hit iteration and lower/higher value logic +function DealerHit(NPC, Spawn) + if dealeraces ~= "" and dealeraces > 16 then + dealertotal = dealeraces + Say(NPC, dealertotal .. "!") + elseif dealeraces~= "" and dealeraces < 17 then + while dealeraces < 17 do + extracard = table.remove(new, 1) + CardValues5() + Emote(NPC, "next card is [" .. extracard .. "]") + dealeraces = dealeraces + extra + dealertotal = dealertotal + extra + if dealeraces > 21 then + dealeraces = dealertotal + Say(NPC, dealeraces .. "!") + else + dealertotal = dealeraces + Say(NPC, dealertotal .. "!") + end + end + elseif dealertotal < 17 then + while dealertotal < 17 do + extracard = table.remove(new, 1) + CardValues5() + Emote(NPC, "next card is [" .. extracard .. "]") + dealertotal = dealertotal + extra + if nextace == 10 then + dealeraces = dealertotal + 10 + if dealeraces > 21 then + dealeraces = dealertotal + Say(NPC, dealeraces .. "!") + else + dealertotal = dealeraces + Say(NPC, dealertotal .. "!") + end + else + Say(NPC, dealertotal .. "!") + end + end + end + ComparingFinal(NPC, Spawn) +end +--Comparing final values and ending the game +function ComparingFinal(NPC, Spawn) + if dealertotal > 21 then + Say(NPC, "Dealer busts and player wins" .. GetCoinMessage(coins) .. "!") + Winning1(NPC, Spawn) + CoinFalling1(NPC, Spawn) + AddCoin(Spawn, coins*2) + SendPopUpMessage(Spawn, "Dealer busts! You win" .. GetCoinMessage(coins) .. "!", 255, 255, 0) + elseif myaces~= "" and dealertotal > myaces then + Say(NPC, "Dealer must stand and Dealer wins!") + PushLose1(NPC, Spawn) + SendPopUpMessage(Spawn, "Dealer wins! You lose" .. GetCoinMessage(coins) .. "!", 213, 89, 0) + Sorry1(NPC, Spawn) + elseif myaces~= "" and dealertotal < myaces then + Say(NPC, "Dealer must stand and Player wins!") + Winning1(NPC, Spawn) + CoinFalling1(NPC, Spawn) + AddCoin(Spawn, coins*2) + SendPopUpMessage(Spawn, "Player wins! You win" .. GetCoinMessage(coins) .. "!", 255, 255, 0) + elseif myaces~= "" and dealertotal == myaces then + Say(NPC, "Dealer stands. It's a push, nobody wins!") + AddCoin(Spawn, coins) -- Get your money back + SendPopUpMessage(Spawn, "It's a push. You get your money back!", 255, 255, 0) + PushLose1(NPC, Spawn) + Dumbdoh1(NPC, Spawn) + elseif dealertotal > playertotal then + Say(NPC, "Dealer must stand and Dealer wins!") + PushLose1(NPC, Spawn) + SendPopUpMessage(Spawn, "Dealer wins! You lose" .. GetCoinMessage(coins) .. "!", 213, 89, 0) + Sorry1(NPC, Spawn) + elseif playertotal > dealertotal then + Say(NPC, "Dealer must stand and Player wins!") + Winning1(NPC, Spawn) + CoinFalling1(NPC, Spawn) + AddCoin(Spawn, coins*2) + SendPopUpMessage(Spawn, "Player wins! You win" .. GetCoinMessage(coins) .. "!", 255, 255, 0) + else + Say(NPC, "Dealer stands. It's a push, nobody wins!") + AddCoin(Spawn, coins) -- Get your money back + SendPopUpMessage(Spawn, "It's a push. You get your money back!", 255, 255, 0) + PushLose1(NPC, Spawn) + Dumbdoh1(NPC, Spawn) + end + Clearvars() +end +--Function on STAND now dealer needs to iterate value, determine aces, and compare players total +function Stand1(NPC, Spawn) + if myaces == "" then + myaces = "" + elseif myaces > 21 then + alt = "" + myaces = "" + elseif myaces < 22 then + alt = "" + playertotal = "" + end + Emote(NPC, "reveals [" .. secondcard .. "][" .. fourthcard .. "]") + DealerHit(NPC, Spawn) +end + +--Function for hit or stand option with cards revealed. +function HitStand1(NPC, Spawn) + conversation = CreateConversation() + AddConversationOption(conversation, "Hit!", "Hit1") + AddConversationOption(conversation, "Stand!", "Stand1") + StartConversation(conversation, NPC, Spawn, "Dealer's top card is [" .. fourthcard .. "]") + Emote(Spawn, "peeks at [" .. firstcard .. "][" .. thirdcard .. "] for a total of " .. playertotal .. alt .. myaces .. ".") +end +--Resets variables for the next playthrough +function Clearvars(NPC, Spawn) + alt = "" + alt2 = "" + myaces = "" + dealeraces = "" + myace = 0 + dealerace = 0 + playertotal = 0 + dealertotal = 0 + nextace = "" +end +--Start of usual functions +function spawn(NPC) + SetPlayerProximityFunction(NPC, 4, "InRange", "LeaveRange") +end +function respawn(NPC) + spawn(NPC) + Clearvars() +end +function InRange(NPC, Spawn) + Emote(NPC, "shuffles a crisp deck of cards.") + Say(NPC, "Test your luck mate?") + Clearvars() +end +function LeaveRange(NPC, Spawn) + Say(NPC, "See you next time!") + PlayFlavor(NPC, "", "", "bye", 0, 0, Spawn) + Clearvars() --Just in case +end +function hailed(NPC, Spawn) + Clearvars() --Just in case + conversation = CreateConversation() + AddConversationOption(conversation, "Let's play.", "Play1") + AddConversationOption(conversation, "Rules please.", "Rules1") + StartConversation(conversation, NPC, Spawn, "Ready to play?") +end +function Play1(NPC, Spawn) + conversation = CreateConversation() + AddConversationOption(conversation, "I'll bet 10 platinum!", "Plat1") + AddConversationOption(conversation, "I'll bet 50 gold!", "Gold2") + AddConversationOption(conversation, "I'll bet 10 gold.", "Gold1") + AddConversationOption(conversation, "I'll bet 1 gold.", "Silver1") + -- AddConversationOption(conversation, "I'll bet 100 copper.", "Copper1") -- Too cheap!! + AddConversationOption(conversation, "I changed my mind, sorry.", "Bye1") + StartConversation(conversation, NPC, Spawn, "Let's begin! Place your bets please.") +end +--Start of blackjack script +function Plat1(NPC, Spawn) + conversation = CreateConversation() + coins = 10000000 -- 10 platinum + local poolCoins = RemoveCoin(Spawn, coins) + if(poolCoins) then + Agree(NPC, Spawn) + Emote(NPC, "shuffles twice and then begins to deal.") + --Deal the cards + Deal(NPC, Spawn) --adding parameters for troubleshooting + --Do calculations + Calculates(NPC, Spawn) + else + Say(NPC, "I'm sorry but you don't have enough money.") + PlaySound(NPC, "sounds/combat/impact/leather/impact_metal_to_leather04.wav", GetX(NPC), GetY(NPC), GetZ(NPC)) + PlayFlavor(NPC, "voiceover/english/voice_emotes/apologies/apologies_3_1006.mp3", "", "apologize", 0, 0, Spawn) + Clearvars() + end +end +function Gold2(NPC, Spawn) + conversation = CreateConversation() + coins = 500000 -- 50 gold + local poolCoins = RemoveCoin(Spawn, coins) + if(poolCoins) then + Agree(NPC, Spawn) + Emote(NPC, "shuffles twice and then begins to deal.") + --Deal the cards + Deal(NPC, Spawn) --adding parameters for troubleshooting + --Do calculations + Calculates(NPC, Spawn) + else + Say(NPC, "I'm sorry but you don't have enough money.") + PlaySound(NPC, "sounds/combat/impact/leather/impact_metal_to_leather04.wav", GetX(NPC), GetY(NPC), GetZ(NPC)) + PlayFlavor(NPC, "voiceover/english/voice_emotes/apologies/apologies_3_1006.mp3", "", "apologize", 0, 0, Spawn) + Clearvars() + end +end +function Gold1(NPC, Spawn) + conversation = CreateConversation() + coins = 100000 -- 10 gold + local poolCoins = RemoveCoin(Spawn, coins) + if(poolCoins) then + Agree(NPC, Spawn) + Emote(NPC, "shuffles twice and then begins to deal.") + --Deal the cards + Deal(NPC, Spawn) --adding parameters for troubleshooting + --Do calculations + Calculates(NPC, Spawn) + else + Say(NPC, "I'm sorry but you don't have enough money.") + PlaySound(NPC, "sounds/combat/impact/leather/impact_metal_to_leather04.wav", GetX(NPC), GetY(NPC), GetZ(NPC)) + PlayFlavor(NPC, "voiceover/english/voice_emotes/apologies/apologies_3_1006.mp3", "", "apologize", 0, 0, Spawn) + Clearvars() + end +end +function Silver1(NPC, Spawn) + conversation = CreateConversation() + coins = 10000 -- 1 gold + local poolCoins = RemoveCoin(Spawn, coins) + if(poolCoins) then + Agree(NPC, Spawn) + Emote(NPC, "shuffles twice and then begins to deal.") + --Deal the cards + Deal(NPC, Spawn) --adding parameters for troubleshooting + --Do calculations + Calculates(NPC, Spawn) + else + Say(NPC, "I'm sorry but you don't have enough money.") + PlaySound(NPC, "sounds/combat/impact/leather/impact_metal_to_leather04.wav", GetX(NPC), GetY(NPC), GetZ(NPC)) + PlayFlavor(NPC, "voiceover/english/voice_emotes/apologies/apologies_3_1006.mp3", "", "apologize", 0, 0, Spawn) + Clearvars() + end +end +function Copper1(NPC, Spawn) --Omitted for now + -- conversation = CreateConversation() + -- coins = 100 -- 1 silver + -- local poolCoins = RemoveCoin(Spawn, coins) + -- if(poolCoins) then + -- Agree(NPC, Spawn) + -- Emote(NPC, "shuffles twice and then begins to deal.") + -- --Deal the cards + -- Deal(NPC, Spawn) --adding parameters for troubleshooting + -- --Do calculations + -- Calculates(NPC, Spawn) + -- else + -- Say(NPC, "I'm sorry but you don't have enough money.") + -- PlaySound(NPC, "sounds/combat/impact/leather/impact_metal_to_leather04.wav", GetX(NPC), GetY(NPC), GetZ(NPC)) + -- PlayFlavor(NPC, "voiceover/english/voice_emotes/apologies/apologies_3_1006.mp3", "", "apologize", 0, 0, Spawn) + -- Clearvars() + -- end +end +--Rules of blackjack +function Rules1(NPC, Spawn) + conversation = CreateConversation() + AddConversationOption(conversation, "I understand.", "Play1") + AddConversationOption(conversation, "Maybe next time.", "Bye1") + StartConversation(conversation, NPC, Spawn, "The object of Blackjack is to achieve a hand greater than the dealer to 21 without going over. If you go over 21, it is called a 'bust' and the dealer wins. Winning hands are paid out 1 to 1 and a tie results in a 'push'. Card values are scored from 2 to 9 respectively with 10 and face cards worth 10 points and Ace being worth 1 or 11 points. If you have a 10 point card and an Ace in your starting hand, it is called a natural 21 or 'Blackjack' and it pays 3 to 2. Lastly, dealers must draw to 17.") +end +function Bye1(NPC, Spawn) + Say(NPC, "Goodbye!") + PlayFlavor(NPC, "voiceover/english/voice_emotes/goodbye/goodbye_3_1006.mp3", "", "bye", 0, 0, Spawn) + Clearvars() +end +--END Blackjack.lua \ No newline at end of file diff --git a/server/SpawnScripts/ThunderingSteppes/Blackjack2.lua b/server/SpawnScripts/ThunderingSteppes/Blackjack2.lua new file mode 100644 index 000000000..975f2472b --- /dev/null +++ b/server/SpawnScripts/ThunderingSteppes/Blackjack2.lua @@ -0,0 +1,715 @@ +-- Blackjack script +--[[ +Phil NPCID: 2490681 +Script Name: SpawnScripts/Generic/Blackjack.lua +Script Purpose: a Blackjack game with bets, payouts, and real shuffling +Script Author: Patrikpatrik +Script Date: August 22 2016 +Script Notes: 8th revision on Live the symbols aren't showing up so replaced with letters +--]] + +--52 cards in a deck +local cardtable = { +'As', '2s', '3s','4s','5s','6s','7s', +'8s','9s','10s','Js','Qs','Ks', +'Ah', '2h', '3h','4h','5h','6h','7h', +'8h','9h','10h','Jh','Qh','Kh', +'Ac', '2c', '3c','4c','5c','6c','7c', +'8c','9c','10c','Jc','Qc','Kc', +'Ad', '2d', '3d','4d','5d','6d','7d', +'8d','9d','10d','Jd','Qd','Kd', +} +--This shuffles the deck of cards randomly each pass +function shuffle(NPC, Spawn) + new = {} + for i=1, #cardtable do + table.insert(new, math.random(i), cardtable[i]) + end +end +--Assign values to firstcard +function CardValues1(NPC, Spawn) + if firstcard == 'As' or firstcard == 'Ah' or firstcard == 'Ac' or firstcard == 'Ad' then + first = 1 + myace = 10 + elseif firstcard == '2s' or firstcard == '2h' or firstcard == '2c' or firstcard == '2d' then + first = 2 + elseif firstcard == '3s' or firstcard == '3h' or firstcard == '3c' or firstcard == '3d' then + first = 3 + elseif firstcard == '4s' or firstcard == '4h' or firstcard == '4c' or firstcard == '4d' then + first = 4 + elseif firstcard == '5s' or firstcard == '5h' or firstcard == '5c' or firstcard == '5d' then + first = 5 + elseif firstcard == '6s' or firstcard == '6h' or firstcard == '6c' or firstcard == '6d' then + first = 6 + elseif firstcard == '7s' or firstcard == '7h' or firstcard == '7c' or firstcard == '7d' then + first = 7 + elseif firstcard == '8s' or firstcard == '8h' or firstcard == '8c' or firstcard == '8d' then + first = 8 + elseif firstcard == '9s' or firstcard == '9h' or firstcard == '9c' or firstcard == '9d' then + first = 9 + elseif firstcard == '10s' or firstcard == '10h' or firstcard == '10c' or firstcard == '10d' then + first = 10 + elseif firstcard == 'Js' or firstcard == 'Jh' or firstcard == 'Jc' or firstcard == 'Jd' then + first = 10 + elseif firstcard == 'Qs' or firstcard == 'Qh' or firstcard == 'Qc' or firstcard == 'Qd' then + first = 10 + elseif firstcard == 'Ks' or firstcard == 'Kh' or firstcard == 'Kc' or firstcard == 'Kd' then + first = 10 + else + end +end +--Assign values to secondcard +function CardValues2(NPC, Spawn) + if secondcard == 'As' or secondcard == 'Ah' or secondcard == 'Ac' or secondcard == 'Ad' then + second = 1 + dealerace = 10 + elseif secondcard == '2s' or secondcard == '2h' or secondcard == '2c' or secondcard == '2d' then + second = 2 + elseif secondcard == '3s' or secondcard == '3h' or secondcard == '3c' or secondcard == '3d' then + second = 3 + elseif secondcard == '4s' or secondcard == '4h' or secondcard == '4c' or secondcard == '4d' then + second = 4 + elseif secondcard == '5s' or secondcard == '5h' or secondcard == '5c' or secondcard == '5d' then + second = 5 + elseif secondcard == '6s' or secondcard == '6h' or secondcard == '6c' or secondcard == '6d' then + second = 6 + elseif secondcard == '7s' or secondcard == '7h' or secondcard == '7c' or secondcard == '7d' then + second = 7 + elseif secondcard == '8s' or secondcard == '8h' or secondcard == '8c' or secondcard == '8d' then + second = 8 + elseif secondcard == '9s' or secondcard == '9h' or secondcard == '9c' or secondcard == '9d' then + second = 9 + elseif secondcard == '10s' or secondcard == '10h' or secondcard == '10c' or secondcard == '10d' then + second = 10 + elseif secondcard == 'Js' or secondcard == 'Jh' or secondcard == 'Jc' or secondcard == 'Jd' then + second = 10 + elseif secondcard == 'Qs' or secondcard == 'Qh' or secondcard == 'Qc' or secondcard == 'Qd' then + second = 10 + elseif secondcard == 'Ks' or secondcard == 'Kh' or secondcard == 'Kc' or secondcard == 'Kd' then + second = 10 + else + end +end +--Assign values to thirdcard +function CardValues3(NPC, Spawn) + if thirdcard == 'As' or thirdcard == 'Ah' or thirdcard == 'Ac' or thirdcard == 'Ad' then + third = 1 + myace = 10 + elseif thirdcard == '2s' or thirdcard == '2h' or thirdcard == '2c' or thirdcard == '2d' then + third = 2 + elseif thirdcard == '3s' or thirdcard == '3h' or thirdcard == '3c' or thirdcard == '3d' then + third = 3 + elseif thirdcard == '4s' or thirdcard == '4h' or thirdcard == '4c' or thirdcard == '4d' then + third = 4 + elseif thirdcard == '5s' or thirdcard == '5h' or thirdcard == '5c' or thirdcard == '5d' then + third = 5 + elseif thirdcard == '6s' or thirdcard == '6h' or thirdcard == '6c' or thirdcard == '6d' then + third = 6 + elseif thirdcard == '7s' or thirdcard == '7h' or thirdcard == '7c' or thirdcard == '7d' then + third = 7 + elseif thirdcard == '8s' or thirdcard == '8h' or thirdcard == '8c' or thirdcard == '8d' then + third = 8 + elseif thirdcard == '9s' or thirdcard == '9h' or thirdcard == '9c' or thirdcard == '9d' then + third = 9 + elseif thirdcard == '10s' or thirdcard == '10h' or thirdcard == '10c' or thirdcard == '10d' then + third = 10 + elseif thirdcard == 'Js' or thirdcard == 'Jh' or thirdcard == 'Jc' or thirdcard == 'Jd' then + third = 10 + elseif thirdcard == 'Qs' or thirdcard == 'Qh' or thirdcard == 'Qc' or thirdcard == 'Qd' then + third = 10 + elseif thirdcard == 'Ks' or thirdcard == 'Kh' or thirdcard == 'Kc' or thirdcard == 'Kd' then + third = 10 + else + end +end +--Assign values to fourthcard +function CardValues4(NPC, Spawn) + if fourthcard == 'As' or fourthcard == 'Ah' or fourthcard == 'Ac' or fourthcard == 'Ad' then + fourth = 1 + dealerace = 10 + elseif fourthcard == '2s' or fourthcard == '2h' or fourthcard == '2c' or fourthcard == '2d' then + fourth = 2 + elseif fourthcard == '3s' or fourthcard == '3h' or fourthcard == '3c' or fourthcard == '3d' then + fourth = 3 + elseif fourthcard == '4s' or fourthcard == '4h' or fourthcard == '4c' or fourthcard == '4d' then + fourth = 4 + elseif fourthcard == '5s' or fourthcard == '5h' or fourthcard == '5c' or fourthcard == '5d' then + fourth = 5 + elseif fourthcard == '6s' or fourthcard == '6h' or fourthcard == '6c' or fourthcard == '6d' then + fourth = 6 + elseif fourthcard == '7s' or fourthcard == '7h' or fourthcard == '7c' or fourthcard == '7d' then + fourth = 7 + elseif fourthcard == '8s' or fourthcard == '8h' or fourthcard == '8c' or fourthcard == '8d' then + fourth = 8 + elseif fourthcard == '9s' or fourthcard == '9h' or fourthcard == '9c' or fourthcard == '9d' then + fourth = 9 + elseif fourthcard == '10s' or fourthcard == '10h' or fourthcard == '10c' or fourthcard == '10d' then + fourth = 10 + elseif fourthcard == 'Js' or fourthcard == 'Jh' or fourthcard == 'Jc' or fourthcard == 'Jd' then + fourth = 10 + elseif fourthcard == 'Qs' or fourthcard == 'Qh' or fourthcard == 'Qc' or fourthcard == 'Qd' then + fourth = 10 + elseif fourthcard == 'Ks' or fourthcard == 'Kh' or fourthcard == 'Kc' or fourthcard == 'Kd' then + fourth = 10 + else + end +end +--Assign values to nextcard +function CardValues5(NPC, Spawn) + if extracard == 'As' or extracard == 'Ah' or extracard == 'Ac' or extracard == 'Ad' then + extra = 1 + nextace = 10 + elseif extracard == '2s' or extracard == '2h' or extracard == '2c' or extracard == '2d' then + extra = 2 + elseif extracard == '3s' or extracard == '3h' or extracard == '3c' or extracard == '3d' then + extra = 3 + elseif extracard == '4s' or extracard == '4h' or extracard == '4c' or extracard == '4d' then + extra = 4 + elseif extracard == '5s' or extracard == '5h' or extracard == '5c' or extracard == '5d' then + extra = 5 + elseif extracard == '6s' or extracard == '6h' or extracard == '6c' or extracard == '6d' then + extra = 6 + elseif extracard == '7s' or extracard == '7h' or extracard == '7c' or extracard == '7d' then + extra = 7 + elseif extracard == '8s' or extracard == '8h' or extracard == '8c' or extracard == '8d' then + extra = 8 + elseif extracard == '9s' or extracard == '9h' or extracard == '9c' or extracard == '9d' then + extra = 9 + elseif extracard == '10s' or extracard == '10h' or extracard == '10c' or extracard == '10d' then + extra = 10 + elseif extracard == 'Js' or extracard == 'Jh' or extracard == 'Jc' or extracard == 'Jd' then + extra = 10 + elseif extracard == 'Qs' or extracard == 'Qh' or extracard == 'Qc' or extracard == 'Qd' then + extra = 10 + elseif extracard == 'Ks' or extracard == 'Kh' or extracard == 'Kc' or extracard == 'Kd' then + extra = 10 + else + end +end +--Deals the cards +function Deal(NPC, Spawn) + shuffle(NPC, Spawn) + shuffle(NPC, Spawn) + + burncard = table.remove(new, 1) --burns a card off the top + firstcard = table.remove(new, 1) --1st card goes to player + secondcard = table.remove(new, 1) --2nd card goes to dealer + thirdcard = table.remove(new, 1) --3rd card goes to player + fourthcard = table.remove(new, 1) --4th card goes to dealer + + CardValues1() + CardValues2() + CardValues3() + CardValues4() --assigns values + + --peeking at what goes on at this junction + --Say(NPC, "peeking at mychar its " .. mychar .. " and " .. mychar2) + --Say(NPC, "In deal function firstcard is [" .. firstcard .. "] value of " .. first .. ". Secondcard is [" .. secondcard .. "] value of " .. second .. ".") + --Say(NPC, "In deal function thirdcard is [" .. thirdcard .. "] value of " .. third .. ". Fourthcard is [" .. fourthcard .. "] value of " .. fourth .. ".") + +end +--This function combines total, checks for aces logic, and determines if blackjack occured +function Calculates(NPC, Spawn) + playertotal = first + third + dealertotal = second + fourth + if myace == 10 and dealerace == 10 and playertotal == 11 and dealertotal == 11 then + Bothbj(NPC, Spawn) + elseif dealerace == 10 and dealertotal == 11 then + dealertotal = 21 + Dealerbj(NPC, Spawn) + elseif myace == 10 and playertotal == 11 then + playertotal = 21 + Playerbj(NPC, Spawn) + elseif myace == 10 and dealerace == 10 then + alt = " or " + alt2 = " or " + myaces = first + third + 10 + dealeraces = second + fourth + 10 + HitStand1(NPC, Spawn) + elseif myace == 10 then + alt = " or " + alt2 = "" + dealeraces = "" + myaces = first + third + 10 + HitStand1(NPC, Spawn) + elseif dealerace == 10 then + alt = "" + alt2 = " or " + myaces = "" + dealeraces = second + fourth + 10 + HitStand1(NPC, Spawn) + else + alt = "" + alt2 = "" + myaces = "" + dealeraces = "" + HitStand1(NPC, Spawn) + end +end +--calculates the next card etc.. +function CalcMore(NPC, Spawn) + playertotal = playertotal + extra + if myace == 10 then + alt = " or " + myaces = playertotal + 10 + elseif nextace == 10 then + alt = " or " + myaces = playertotal + 10 + else + alt = "" + myaces = "" + end +end +--Text results +function Bothbj(NPC, Spawn) + Emote(NPC, "reveals [" .. secondcard .. "][" .. fourthcard .. "]") + Emote(Spawn, "peeks at [" .. firstcard .. "][" .. thirdcard .. "]") + Say(NPC, "You both get blackjack, it's a push!") + SendPopUpMessage(Spawn, "You both get blackjack, it's a push!", 255, 255, 0) + PushLose1(NPC, Spawn) + AddCoin(Spawn, coins) -- Get your money back + Dumbdoh1(NPC, Spawn) + Clearvars() +end +function Dealerbj(NPC, Spawn) + Emote(Spawn, "peeks at [" .. firstcard .. "][" .. thirdcard .. "] for a total of " .. playertotal .. ".") + Emote(NPC, "reveals [" .. secondcard .. "][" .. fourthcard .. "]") + Say(NPC, "I'm sorry but dealer hits blackjack!") + SendPopUpMessage(Spawn, "Dealer hits blackjack! You lose" .. GetCoinMessage(coins) .. "!", 255, 0, 0) + ApplySpellVisual(Spawn, 874) + Sorry1(NPC, Spawn) + Clearvars() +end +function Playerbj(NPC, Spawn) + Emote(Spawn, "peeks at [" .. firstcard .. "][" .. thirdcard .. "]") + Say(NPC, "Congratulations, you got blackjack!") + Winning1(NPC, Spawn) + PlaySound(NPC, "sounds/test/endquest.wav", GetX(NPC), GetY(NPC), GetZ(NPC)) --Ding! + ApplySpellVisual(Spawn, 872) --Jackpot style! + AddCoin(Spawn, coins/2*3) + SendPopUpMessage(Spawn, "Congratulations " .. GetName(Spawn) .. " you got blackjack! You win" .. GetCoinMessage(coins/2*3) .. "!" , 0, 255, 0) + Emote(NPC, "reveals [" .. secondcard .. "][" .. fourthcard .. "]") + Clearvars() +end +-- Agree sounds +function Agree(NPC, Spawn) + agree1 = math.random(3) + if agree1 == 1 then + --PlayFlavor(NPC, "voiceover/english/voice_emotes/agree/agree_1_1006.mp3", "", "agree", 0, 0, Spawn) + PlaySound(NPC, "voiceover/english/voice_emotes/agree/agree_1_1006.mp3", GetX(NPC), GetY(NPC), GetZ(NPC)) + elseif agree1 == 2 then + --PlayFlavor(NPC, "voiceover/english/voice_emotes/agree/agree_2_1006.mp3", "", "agree", 0, 0, Spawn) + PlaySound(NPC, "voiceover/english/voice_emotes/agree/agree_2_1006.mp3", GetX(NPC), GetY(NPC), GetZ(NPC)) + elseif agree1 == 3 then + --PlayFlavor(NPC, "voiceover/english/voice_emotes/agree/agree_3_1006.mp3", "", "agree", 0, 0, Spawn) + PlaySound(NPC, "voiceover/english/voice_emotes/agree/agree_3_1006.mp3", GetX(NPC), GetY(NPC), GetZ(NPC)) + end +end +-- dumb doh sounds +function Dumbdoh1(NPC, Spawn) + randpickv = math.random(3) + if randpickv == 1 then + PlayFlavor(NPC, "voiceover/english/voice_emotes/doh/doh_1006.mp3", "", "doh", 0, 0, Spawn) + elseif randpickv == 2 then + PlayFlavor(NPC, "voiceover/english/voice_emotes/doh/doh_1022.mp3", "", "doh", 0, 0, Spawn) + else + PlayFlavor(NPC, "voiceover/english/voice_emotes/doh/doh_1050.mp3", "", "doh", 0, 0, Spawn) + end +end +-- Sorry sounds +function Sorry1(NPC, Spawn) + sorrypick = math.random(3) + if sorrypick == 1 then + PlayFlavor(NPC, "voiceover/english/voice_emotes/apologies/apologies_1_1006.mp3", "", "apologize", 0, 0, Spawn) + elseif sorrypick == 2 then + PlayFlavor(NPC, "voiceover/english/voice_emotes/apologies/apologies_2_1006.mp3", "", "apologize", 0, 0, Spawn) + elseif sorrypick == 3 then + PlayFlavor(NPC, "voiceover/english/voice_emotes/apologies/apologies_3_1006.mp3", "", "apologize", 0, 0, Spawn) + end +end +-- Levels of coin falling function +function CoinFalling1(NPC, Spawn) + -- if coins == 100 then + + if coins == 10000 then + --Too cheap for falling coins! + elseif coins == 100000 then + ApplySpellVisual(Spawn, 869) + elseif coins == 500000 then + ApplySpellVisual(Spawn, 870) + elseif coins == 10000000 then + ApplySpellVisual(Spawn, 871) + end +end +-- Winning emotes function +function Winning1(NPC, Spawn) + winning = math.random(12) + if winning == 1 then + PlayFlavor(Spawn, "", "", "agree", 0, 0, NPC) + elseif winning == 2 then + PlayFlavor(Spawn, "", "", "bow", 0, 0, NPC) + elseif winning == 3 then + PlayFlavor(Spawn, "", "", "cackle", 0, 0, NPC) + elseif winning == 4 then + PlayFlavor(Spawn, "", "", "cheer", 0, 0, NPC) + elseif winning == 5 then + PlayFlavor(Spawn, "", "", "chuckle", 0, 0, NPC) + elseif winning == 6 then + PlayFlavor(Spawn, "", "", "cutthroat", 0, 0, NPC) + elseif winning == 7 then + PlayFlavor(Spawn, "", "", "flex", 0, 0, NPC) + elseif winning == 8 then + PlayFlavor(Spawn, "", "", "happy", 0, 0, NPC) + elseif winning == 9 then + PlayFlavor(Spawn, "", "", "heartattack", 0, 0, NPC) + elseif winning == 10 then + PlayFlavor(Spawn, "", "", "heelclick", 0, 0, NPC) + elseif winning == 11 then + PlayFlavor(Spawn, "", "", "howl", 0, 0, NPC) + elseif winning == 12 then + PlayFlavor(Spawn, "", "", "laugh", 0, 0, NPC) + end +end +-- Losing /pushing emotes function +function PushLose1(NPC, Spawn) + PushLose = math.random(11) + if PushLose == 1 then + PlayFlavor(Spawn, "", "", "shrug", 0, 0, NPC) + elseif PushLose == 2 then + PlayFlavor(Spawn, "", "", "violin", 0, 0, NPC) + elseif PushLose == 3 then + PlayFlavor(Spawn, "", "", "boggle", 0, 0, NPC) + elseif PushLose == 4 then + PlayFlavor(Spawn, "", "", "confused", 0, 0, NPC) + elseif PushLose == 5 then + PlayFlavor(Spawn, "", "", "cringe", 0, 0, NPC) + elseif PushLose == 6 then + PlayFlavor(Spawn, "", "", "doh", 0, 0, NPC) + elseif PushLose == 7 then + PlayFlavor(Spawn, "", "", "doubletake", 0, 0, NPC) + elseif PushLose == 8 then + PlayFlavor(Spawn, "", "", "hearnoevil", 0, 0, NPC) + elseif PushLose == 9 then + PlayFlavor(Spawn, "", "", "speaknoevil", 0, 0, NPC) + elseif PushLose == 10 then + PlayFlavor(Spawn, "", "", "lookaway", 0, 0, NPC) + elseif PushLose == 11 then + PlayFlavor(Spawn, "", "", "sigh", 0, 0, NPC) + end +end +-- Busting emotes function +function Busting1(NPC, Spawn) + Busting = math.random(11) + if Busting == 1 then + PlayFlavor(Spawn, "", "", "rude", 0, 0, NPC) + elseif Busting == 2 then + PlayFlavor(Spawn, "", "", "heartattack", 0, 0, NPC) + elseif Busting == 3 then + PlayFlavor(Spawn, "", "", "curse", 0, 0, NPC) + elseif Busting == 4 then + PlayFlavor(Spawn, "", "", "frustrated", 0, 0, NPC) + elseif Busting == 5 then + PlayFlavor(Spawn, "", "", "swear", 0, 0, NPC) + elseif Busting == 6 then + PlayFlavor(Spawn, "", "", "tantrum", 0, 0, NPC) + elseif Busting == 7 then + PlayFlavor(Spawn, "", "", "threaten", 0, 0, NPC) + elseif Busting == 8 then + PlayFlavor(Spawn, "", "", "brandish", 0, 0, NPC) + elseif Busting == 9 then + PlayFlavor(Spawn, "", "", "crazy", 0, 0, NPC) + elseif Busting == 10 then + PlayFlavor(Spawn, "", "", "cry", 0, 0, NPC) + elseif Busting == 11 then + PlayFlavor(Spawn, "", "", "sulk", 0, 0, NPC) + end +end +--This function iterates player hit +function Hit1(NPC, Spawn) + extracard = table.remove(new, 1) + CardValues5() + CalcMore(NPC, Spawn) + + if playertotal > 21 then + Emote(Spawn, "receives a [" .. extracard .. "] for a total of " .. playertotal .. ".") + Say(NPC, "I'm sorry but you bust!") + Busting1(NPC, Spawn) + Sorry1(NPC, Spawn) + Emote(NPC, "reveals [" .. secondcard .. "][" .. fourthcard .. "]") + SendPopUpMessage(Spawn, "Player busts! You lose " .. GetCoinMessage(coins) .. "!", 255, 0, 0) + Clearvars() + elseif myaces~= "" and myaces < 22 then + conversation = CreateConversation() + AddConversationOption(conversation, "Hit!", "Hit1") + AddConversationOption(conversation, "Stand!", "Stand1") + StartConversation(conversation, NPC, Spawn, "You HIT!") + Emote(Spawn, "receives a [" .. extracard .. "] for a total of " .. playertotal .. alt .. myaces .. ".") + elseif playertotal <= 21 then + conversation = CreateConversation() + AddConversationOption(conversation, "Hit!", "Hit1") + AddConversationOption(conversation, "Stand!", "Stand1") + StartConversation(conversation, NPC, Spawn, "You HIT!") + Emote(Spawn, "receives a [" .. extracard .. "] for a total of " .. playertotal .. ".") + end +end +--Function for dealer's hit iteration and lower/higher value logic +function DealerHit(NPC, Spawn) + if dealeraces ~= "" and dealeraces > 16 then + dealertotal = dealeraces + Say(NPC, dealertotal .. "!") + elseif dealeraces~= "" and dealeraces < 17 then + while dealeraces < 17 do + extracard = table.remove(new, 1) + CardValues5() + Emote(NPC, "next card is [" .. extracard .. "]") + dealeraces = dealeraces + extra + dealertotal = dealertotal + extra + if dealeraces > 21 then + dealeraces = dealertotal + Say(NPC, dealeraces .. "!") + else + dealertotal = dealeraces + Say(NPC, dealertotal .. "!") + end + end + elseif dealertotal < 17 then + while dealertotal < 17 do + extracard = table.remove(new, 1) + CardValues5() + Emote(NPC, "next card is [" .. extracard .. "]") + dealertotal = dealertotal + extra + if nextace == 10 then + dealeraces = dealertotal + 10 + if dealeraces > 21 then + dealeraces = dealertotal + Say(NPC, dealeraces .. "!") + else + dealertotal = dealeraces + Say(NPC, dealertotal .. "!") + end + else + Say(NPC, dealertotal .. "!") + end + end + end + ComparingFinal(NPC, Spawn) +end +--Comparing final values and ending the game +function ComparingFinal(NPC, Spawn) + if dealertotal > 21 then + Say(NPC, "Dealer busts and player wins" .. GetCoinMessage(coins) .. "!") + Winning1(NPC, Spawn) + CoinFalling1(NPC, Spawn) + AddCoin(Spawn, coins*2) + SendPopUpMessage(Spawn, "Dealer busts! You win" .. GetCoinMessage(coins) .. "!", 255, 255, 0) + elseif myaces~= "" and dealertotal > myaces then + Say(NPC, "Dealer must stand and Dealer wins!") + PushLose1(NPC, Spawn) + SendPopUpMessage(Spawn, "Dealer wins! You lose" .. GetCoinMessage(coins) .. "!", 213, 89, 0) + Sorry1(NPC, Spawn) + elseif myaces~= "" and dealertotal < myaces then + Say(NPC, "Dealer must stand and Player wins!") + Winning1(NPC, Spawn) + CoinFalling1(NPC, Spawn) + AddCoin(Spawn, coins*2) + SendPopUpMessage(Spawn, "Player wins! You win" .. GetCoinMessage(coins) .. "!", 255, 255, 0) + elseif myaces~= "" and dealertotal == myaces then + Say(NPC, "Dealer stands. It's a push, nobody wins!") + AddCoin(Spawn, coins) -- Get your money back + SendPopUpMessage(Spawn, "It's a push. You get your money back!", 255, 255, 0) + PushLose1(NPC, Spawn) + Dumbdoh1(NPC, Spawn) + elseif dealertotal > playertotal then + Say(NPC, "Dealer must stand and Dealer wins!") + PushLose1(NPC, Spawn) + SendPopUpMessage(Spawn, "Dealer wins! You lose" .. GetCoinMessage(coins) .. "!", 213, 89, 0) + Sorry1(NPC, Spawn) + elseif playertotal > dealertotal then + Say(NPC, "Dealer must stand and Player wins!") + Winning1(NPC, Spawn) + CoinFalling1(NPC, Spawn) + AddCoin(Spawn, coins*2) + SendPopUpMessage(Spawn, "Player wins! You win" .. GetCoinMessage(coins) .. "!", 255, 255, 0) + else + Say(NPC, "Dealer stands. It's a push, nobody wins!") + AddCoin(Spawn, coins) -- Get your money back + SendPopUpMessage(Spawn, "It's a push. You get your money back!", 255, 255, 0) + PushLose1(NPC, Spawn) + Dumbdoh1(NPC, Spawn) + end + Clearvars() +end +--Function on STAND now dealer needs to iterate value, determine aces, and compare players total +function Stand1(NPC, Spawn) + if myaces == "" then + myaces = "" + elseif myaces > 21 then + alt = "" + myaces = "" + elseif myaces < 22 then + alt = "" + playertotal = "" + end + Emote(NPC, "reveals [" .. secondcard .. "][" .. fourthcard .. "]") + DealerHit(NPC, Spawn) +end + +--Function for hit or stand option with cards revealed. +function HitStand1(NPC, Spawn) + conversation = CreateConversation() + AddConversationOption(conversation, "Hit!", "Hit1") + AddConversationOption(conversation, "Stand!", "Stand1") + StartConversation(conversation, NPC, Spawn, "Dealer's top card is [" .. fourthcard .. "]") + Emote(Spawn, "peeks at [" .. firstcard .. "][" .. thirdcard .. "] for a total of " .. playertotal .. alt .. myaces .. ".") +end +--Resets variables for the next playthrough +function Clearvars(NPC, Spawn) + alt = "" + alt2 = "" + myaces = "" + dealeraces = "" + myace = 0 + dealerace = 0 + playertotal = 0 + dealertotal = 0 + nextace = "" +end +--Start of usual functions +function spawn(NPC) + SetPlayerProximityFunction(NPC, 4, "InRange", "LeaveRange") +end +function respawn(NPC) + spawn(NPC) + Clearvars() +end +function InRange(NPC, Spawn) + Emote(NPC, "shuffles a crisp deck of cards.") + Say(NPC, "Test your luck mate?") + Clearvars() +end +function LeaveRange(NPC, Spawn) + Say(NPC, "See you next time!") + PlayFlavor(NPC, "", "", "bye", 0, 0, Spawn) + Clearvars() --Just in case +end +function hailed(NPC, Spawn) + Clearvars() --Just in case + conversation = CreateConversation() + AddConversationOption(conversation, "Let's play.", "Play1") + AddConversationOption(conversation, "Rules please.", "Rules1") + StartConversation(conversation, NPC, Spawn, "Ready to play?") +end +function Play1(NPC, Spawn) + conversation = CreateConversation() + AddConversationOption(conversation, "I'll bet 10 platinum!", "Plat1") + AddConversationOption(conversation, "I'll bet 50 gold!", "Gold2") + AddConversationOption(conversation, "I'll bet 10 gold.", "Gold1") + AddConversationOption(conversation, "I'll bet 1 gold.", "Silver1") + -- AddConversationOption(conversation, "I'll bet 100 copper.", "Copper1") -- Too cheap!! + AddConversationOption(conversation, "I changed my mind, sorry.", "Bye1") + StartConversation(conversation, NPC, Spawn, "Let's begin! Place your bets please.") +end +--Start of blackjack script +function Plat1(NPC, Spawn) + conversation = CreateConversation() + coins = 10000000 -- 10 platinum + local poolCoins = RemoveCoin(Spawn, coins) + if(poolCoins) then + Agree(NPC, Spawn) + Emote(NPC, "shuffles twice and then begins to deal.") + --Deal the cards + Deal(NPC, Spawn) --adding parameters for troubleshooting + --Do calculations + Calculates(NPC, Spawn) + else + Say(NPC, "I'm sorry but you don't have enough money.") + PlaySound(NPC, "sounds/combat/impact/leather/impact_metal_to_leather04.wav", GetX(NPC), GetY(NPC), GetZ(NPC)) + PlayFlavor(NPC, "voiceover/english/voice_emotes/apologies/apologies_3_1006.mp3", "", "apologize", 0, 0, Spawn) + Clearvars() + end +end +function Gold2(NPC, Spawn) + conversation = CreateConversation() + coins = 500000 -- 50 gold + local poolCoins = RemoveCoin(Spawn, coins) + if(poolCoins) then + Agree(NPC, Spawn) + Emote(NPC, "shuffles twice and then begins to deal.") + --Deal the cards + Deal(NPC, Spawn) --adding parameters for troubleshooting + --Do calculations + Calculates(NPC, Spawn) + else + Say(NPC, "I'm sorry but you don't have enough money.") + PlaySound(NPC, "sounds/combat/impact/leather/impact_metal_to_leather04.wav", GetX(NPC), GetY(NPC), GetZ(NPC)) + PlayFlavor(NPC, "voiceover/english/voice_emotes/apologies/apologies_3_1006.mp3", "", "apologize", 0, 0, Spawn) + Clearvars() + end +end +function Gold1(NPC, Spawn) + conversation = CreateConversation() + coins = 100000 -- 10 gold + local poolCoins = RemoveCoin(Spawn, coins) + if(poolCoins) then + Agree(NPC, Spawn) + Emote(NPC, "shuffles twice and then begins to deal.") + --Deal the cards + Deal(NPC, Spawn) --adding parameters for troubleshooting + --Do calculations + Calculates(NPC, Spawn) + else + Say(NPC, "I'm sorry but you don't have enough money.") + PlaySound(NPC, "sounds/combat/impact/leather/impact_metal_to_leather04.wav", GetX(NPC), GetY(NPC), GetZ(NPC)) + PlayFlavor(NPC, "voiceover/english/voice_emotes/apologies/apologies_3_1006.mp3", "", "apologize", 0, 0, Spawn) + Clearvars() + end +end +function Silver1(NPC, Spawn) + conversation = CreateConversation() + coins = 10000 -- 1 gold + local poolCoins = RemoveCoin(Spawn, coins) + if(poolCoins) then + Agree(NPC, Spawn) + Emote(NPC, "shuffles twice and then begins to deal.") + --Deal the cards + Deal(NPC, Spawn) --adding parameters for troubleshooting + --Do calculations + Calculates(NPC, Spawn) + else + Say(NPC, "I'm sorry but you don't have enough money.") + PlaySound(NPC, "sounds/combat/impact/leather/impact_metal_to_leather04.wav", GetX(NPC), GetY(NPC), GetZ(NPC)) + PlayFlavor(NPC, "voiceover/english/voice_emotes/apologies/apologies_3_1006.mp3", "", "apologize", 0, 0, Spawn) + Clearvars() + end +end +function Copper1(NPC, Spawn) --Omitted for now + -- conversation = CreateConversation() + -- coins = 100 -- 1 silver + -- local poolCoins = RemoveCoin(Spawn, coins) + -- if(poolCoins) then + -- Agree(NPC, Spawn) + -- Emote(NPC, "shuffles twice and then begins to deal.") + -- --Deal the cards + -- Deal(NPC, Spawn) --adding parameters for troubleshooting + -- --Do calculations + -- Calculates(NPC, Spawn) + -- else + -- Say(NPC, "I'm sorry but you don't have enough money.") + -- PlaySound(NPC, "sounds/combat/impact/leather/impact_metal_to_leather04.wav", GetX(NPC), GetY(NPC), GetZ(NPC)) + -- PlayFlavor(NPC, "voiceover/english/voice_emotes/apologies/apologies_3_1006.mp3", "", "apologize", 0, 0, Spawn) + -- Clearvars() + -- end +end +--Rules of blackjack +function Rules1(NPC, Spawn) + conversation = CreateConversation() + AddConversationOption(conversation, "I understand.", "Play1") + AddConversationOption(conversation, "Maybe next time.", "Bye1") + StartConversation(conversation, NPC, Spawn, "The object of Blackjack is to achieve a hand greater than the dealer to 21 without going over. If you go over 21, it is called a 'bust' and the dealer wins. Winning hands are paid out 1 to 1 and a tie results in a 'push'. Card values are scored from 2 to 9 respectively with 10 and face cards worth 10 points and Ace being worth 1 or 11 points. If you have a 10 point card and an Ace in your starting hand, it is called a natural 21 or 'Blackjack' and it pays 3 to 2. Lastly, dealers must draw to 17.") +end +function Bye1(NPC, Spawn) + Say(NPC, "Goodbye!") + PlayFlavor(NPC, "voiceover/english/voice_emotes/goodbye/goodbye_3_1006.mp3", "", "bye", 0, 0, Spawn) + Clearvars() +end +--END Blackjack.lua \ No newline at end of file diff --git a/server/SpawnScripts/ThunderingSteppes/BlertonBlumble.lua b/server/SpawnScripts/ThunderingSteppes/BlertonBlumble.lua new file mode 100644 index 000000000..ae537d362 --- /dev/null +++ b/server/SpawnScripts/ThunderingSteppes/BlertonBlumble.lua @@ -0,0 +1,84 @@ +--[[ + Script Name : SpawnScripts/ThunderingSteppes/BlertonBlumble.lua + Script Author : Jabantiz + Script Date : 2014.07.07 09:07:30 + Script Purpose : + : +--]] + +local WatchYourStepInTheTSPartI = 99 +local WatchYourStepInTheTSPartIV = 102 +local BlumbleBlunder = 103 + +function spawn(NPC) +end + +function respawn(NPC) + spawn(NPC) +end + +function InRange(NPC, Spawn) +end + +function LeaveRange(NPC, Spawn) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + if not HasQuest(Spawn, WatchYourStepInTheTSPartI) and not HasCompletedQuest(Spawn, WatchYourStepInTheTSPartI) then + PlayFlavor(NPC, "", "Oh, hey. Uh, could you maybe just run along and go bother someone else? Thanks a bunch...", "", 1689589577, 4560189, Spawn) + elseif HasQuest(Spawn, WatchYourStepInTheTSPartI) and GetQuestStep(Spawn, WatchYourStepInTheTSPartI) == 1 then + -- On WatchYourStepInTheTSPartI + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_1_1026.mp3", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Yeah, whatever. I have a letter for you.", "dlg_0_1") + AddConversationOption(conversation, "I think I'll be going now.") + StartConversation(conversation, NPC, Spawn, "Oh, hey. Uh, could you maybe just run along and go bother someone else? Thanks a bunch...") + elseif HasQuest(Spawn, BlumbleBlunder) and GetQuestStep(Spawn, BlumbleBlunder) ~= 2 then + PlayFlavor(NPC, "", "Look, I'm not giving you anything until you find Grandpa Blumble. He's probably off searching for pirates again. We've never found out why he does it, but he usually ends up on the beach north of here.", "", 1689589577, 4560189, Spawn) + elseif HasQuest(Spawn, BlumbleBlunder) and GetQuestStep(Spawn, BlumbleBlunder) == 2 then + -- Turn in BlumbleBlunder + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_3_1026.mp3", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "I've found Grandpa Blumble.", "dlg_1_1") + AddConversationOption(conversation, "I'm still looking.") + StartConversation(conversation, NPC, Spawn, "Hello again. How goes the search?") + elseif not HasQuest(Spawn, WatchYourStepInTheTSPartIV) and not HasCompletedQuest(Spawn, WatchYourStepInTheTSPartIV) and HasCompletedQuest(Spawn, BlumbleBlunder) then + PlayFlavor(NPC, "", "Hello! Thanks again for finding Grandpa Blumble. Hmm, I wonder if I could get Matsy to tell 'Foot Breath' I didn't mean it...", "", 1689589577, 4560189, Spawn) + elseif HasQuest(Spawn, WatchYourStepInTheTSPartIV) or HasCompletedQuest(Spawn, WatchYourStepInTheTSPartIV) then + PlayFlavor(NPC, "", "Gosh, I'm sure glad you stopped working for Jacques. Now that he has someone else working for him the mail comes much faster. You were so slow!", "", 1689589577, 4560189, Spawn) + end +end + +function dlg_0_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "What?", "dlg_0_2") + AddConversationOption(conversation, "Foot breath? I don't think I want to hear any more of this...") + StartConversation(conversation, NPC, Spawn, "A letter from Matsy? Uh oh, here we go again. Well, I'd guess you won't go bury it somewhere under a rock for me, so I suppose you'd better hand it over. I wonder what hideous banshee she's trying to set me up with now... The last one had a face like a minotaur with a skin condition and her breath smelled like feet! Let's see here...hah, she's given up on that at least. Eww, well that does explain her breath. That's just disgusting. Oh no, not again!") +end + +function dlg_0_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "Sure.", "dlg_0_3") + AddConversationOption(conversation, "I think I'd rather not.") + StartConversation(conversation, NPC, Spawn, "It looks like old Grandpa Blumble has gotten lost again. Crazy old fool! I don't want to go off searching for him now. Hey, you look like an adventurous sort... Do you think you could find him for me?") +end + +function dlg_0_3(NPC, Spawn) + OfferQuest(NPC, Spawn, BlumbleBlunder) +end + +function dlg_1_1(NPC, Spawn) + SetStepComplete(Spawn, BlumbleBlunder, 2) + SetStepComplete(Spawn, WatchYourStepInTheTSPartI, 2) + + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "Sure thing.") + StartConversation(conversation, NPC, Spawn, "Thank you so much for finding old Grandpa Blumble. I was beginning to worry. Hah! He really did find pirates? Wow, maybe he isn't quite as crazy as we thought... No, nevermind. There was still that incident with the badgers. He's a loony alright. Please take this reply for Matsy back to Jacques for me.") +end diff --git a/server/SpawnScripts/ThunderingSteppes/Brianna.lua b/server/SpawnScripts/ThunderingSteppes/Brianna.lua new file mode 100644 index 000000000..789087d50 --- /dev/null +++ b/server/SpawnScripts/ThunderingSteppes/Brianna.lua @@ -0,0 +1,115 @@ +--[[ + Script Name : SpawnScripts/ThunderingSteppes/Brianna.lua + Script Author : Jabantiz + Script Date : 2014.07.11 02:07:39 + Script Purpose : Brianna (2490170) + : +--]] + +local WatchYourStepinTheTSPartIII = 101 +local SuppliesForBrianna = 108 +local HidesForBrianna = 109 + +function spawn(NPC) + ProvidesQuest(NPC, HidesForBrianna) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + local choice = math.random(1,3) + if choice == 1 then + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_1_1009.mp3", "", "", 0, 0, Spawn) + elseif choice == 2 then + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_2_1009.mp3", "", "", 0, 0, Spawn) + else + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_3_1009.mp3", "", "", 0, 0, Spawn) + end + + if HasQuest(Spawn, WatchYourStepinTheTSPartIII) and GetQuestStep(Spawn, WatchYourStepinTheTSPartIII) == 3 then + -- start SuppliesForBrianna + AddConversationOption(conversation, "No, I'm here to deliver a package to you.", "dlg_0_1") + AddConversationOption(conversation, "Oh okay. Thanks anyways.") + StartConversation(conversation, NPC, Spawn, "Har har, what kind of work do you think you can do with little arms like those? If you are here for the apprenticeship, it has been filled.") + elseif (HasQuest(Spawn, SuppliesForBrianna) and GetQuestStep(Spawn, SuppliesForBrianna) < 2) or (HasQuest(Spawn, HidesForBrianna) and GetQuestStep(Spawn, HidesForBrianna) < 2) then + -- on SuppliesForBrianna or HidesForBrianna but not ready for turn in + AddConversationOption(conversation, "No but I have my best people working on it.") + StartConversation(conversation, NPC, Spawn, "Well, did you bring the supplies yet?") + elseif HasQuest(Spawn, SuppliesForBrianna) and GetQuestStep(Spawn, SuppliesForBrianna) == 2 then + -- turn in SuppliesForBrianna + AddConversationOption(conversation, "Yes right here.", "dlg_1_1") + AddConversationOption(conversation, "Um, I have some but not for you.") + StartConversation(conversation, NPC, Spawn, "Well, do you have the supplies?") + elseif HasCompletedQuest(Spawn, SuppliesForBrianna) and not HasQuest(Spawn, HidesForBrianna) and not HasCompletedQuest(Spawn, HidesForBrianna) then + -- start HidesForBrianna + AddConversationOption(conversation, "Yes I am.", "dlg_2_1") + AddConversationOption(conversation, "Not at this time.") + StartConversation(conversation, NPC, Spawn, "Har har, what kind of work do you think you can do with little arms like those? Are you here for the apprenticeship? ") + elseif HasQuest(Spawn, HidesForBrianna) and GetQuestStep(Spawn, HidesForBrianna) == 2 then + -- turn in HidesForBrianna + AddConversationOption(conversation, "Yes, right here.", "dlg_3_1") + AddConversationOption(conversation, "Not yet.") + StartConversation(conversation, NPC, Spawn, "Well, do you have the supplies?") + elseif HasCompletedQuest(Spawn, SuppliesForBrianna) and HasCompletedQuest(Spawn, HidesForBrianna) then + -- finished both SuppliesForBrianna and HidesForBrianna + PlayFlavor(NPC, "", "Thanks for your help, I really do appreciate it. Adventurers like you are really good to have around!", "hello", 1689589577, 4560189, Spawn) + end +end + +function dlg_0_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "No, I was chased by some dogs and accidentally dropped it.", "dlg_0_2") + StartConversation(conversation, NPC, Spawn, "Sure, let's see it... my it looks damaged, what happened here? Did you open it up?") +end + +function dlg_0_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "Um, okay.", "dlg_0_3") + AddConversationOption(conversation, "I am not going to do that.") + StartConversation(conversation, NPC, Spawn, "Ok, these things happen. However, it says right here on top that it was insured by you and your delivery service, so I am going to need you to replace these items.") +end + +function dlg_0_3(NPC, Spawn) + OfferQuest(NPC, Player, SuppliesForBrianna) +end + +function dlg_1_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + SetStepComplete(Spawn, SuppliesForBrianna, 2) + SetStepComplete(Spawn, WatchYourStepinTheTSPartIII, 3) + AddConversationOption(conversation, "Thanks.") + StartConversation(conversation, NPC, Spawn, "Good they look like they will do, here is your receipt.") +end + +function dlg_2_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "Sure thing.", "dlg_2_2") + AddConversationOption(conversation, "Not today.") + StartConversation(conversation, NPC, Spawn, "The job is mostly odd-jobs. It's what I do; fix things for people, patch up armor, repair broken fences, and occasionally help with party decorations. Do you think you could assist me with some odd jobs?") +end + +function dlg_2_2(NPC, Spawn) + OfferQuest(NPC, Player, HidesForBrianna) +end + +function dlg_3_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + SetStepComplete(Spawn, HidesForBrianna, 2) + AddConversationOption(conversation, "Thanks.") + StartConversation(conversation, NPC, Spawn, "Great, these look like it's the first time they have ever seen the sun. Thanks for your help. I don't have anything else for you today, but check back again.") +end \ No newline at end of file diff --git a/server/SpawnScripts/ThunderingSteppes/BridgeDoors.lua b/server/SpawnScripts/ThunderingSteppes/BridgeDoors.lua new file mode 100644 index 000000000..eb4cc519e --- /dev/null +++ b/server/SpawnScripts/ThunderingSteppes/BridgeDoors.lua @@ -0,0 +1,22 @@ +--[[ + Script Name : SpawnScripts/ThunderingSteppes/BridgeDoors.lua + Script Author : Jabantiz + Script Date : 2015.07.12 05:07:34 + Script Purpose : + : +--]] + +function spawn(NPC) + AddTimer(NPC, 10000, "OpenDoors") +end + +function respawn(NPC) + spawn(NPC) +end + +function OpenDoors(NPC) + local zone = GetZone(NPC) + if not IsNight(zone) then + UseWidget(NPC) + end +end \ No newline at end of file diff --git a/server/SpawnScripts/ThunderingSteppes/CaptainSturman.lua b/server/SpawnScripts/ThunderingSteppes/CaptainSturman.lua new file mode 100644 index 000000000..201e8caee --- /dev/null +++ b/server/SpawnScripts/ThunderingSteppes/CaptainSturman.lua @@ -0,0 +1,39 @@ +--[[ + Script Name : SpawnScripts/TheThunderingSteppes/CaptainSturman.lua + Script Purpose : Captain Sturman + Script Author : geordie0511 + Script Date : 2019.03.19 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +local Captain = 472 + +function spawn(NPC) + SetPlayerProximityFunction(NPC, 10, "InRange", "LeaveRange") +end + +function respawn(NPC) + spawn(NPC) +end + +function InRange(NPC, Spawn) +end + +function LeaveRange(NPC, Spawn) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/captain_sturman/steppes/captainsturman000.mp3", "", "", 2356938778, 3921151874, Spawn) + if GetQuestStep(Spawn, Captain) == 1 then + AddConversationOption(conversation, "Thank you for the warning. ") + StartConversation(conversation, NPC, Spawn, "Be careful out in these lands, adventurer. There are many factions in the Thundering Steppes that are not friendly to outsiders.") + SetStepComplete(Spawn, Captain, 1) + else + AddConversationOption(conversation, "Thank you for the warning. ") + StartConversation(conversation, NPC, Spawn, "Be careful out in these lands, adventurer. There are many factions in the Thundering Steppes that are not friendly to outsiders.") + end +end + diff --git a/server/SpawnScripts/ThunderingSteppes/GrennStiles.lua b/server/SpawnScripts/ThunderingSteppes/GrennStiles.lua new file mode 100644 index 000000000..90fa7a370 --- /dev/null +++ b/server/SpawnScripts/ThunderingSteppes/GrennStiles.lua @@ -0,0 +1,55 @@ +--[[ + Script Name : SpawnScripts/ThunderingSteppes/GrennStiles.lua + Script Author : Zcoretri + Script Date : 2014.07.14 07:07:35 + Script Purpose : Grenn Stiles spawn script + : +--]] + +local RecycleTheOldFashionedWay = 111 + +function spawn(NPC) + ProvidesQuest(NPC, RecycleTheOldFashionedWay) +end + +function respawn(NPC) + spawn(NPC) +end + +function InRange(NPC, Spawn) +end + +function LeaveRange(NPC, Spawn) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + if HasQuest(Spawn, RecyclingTheOldFashoinedWay) then + -- Has the quest + if GetQuestStep(Spawn, RecyclingTheOldFashoinedWay) == 1 then + -- Has not completed the quest yet + AddConversationOption(conversation, "Ah! Got the bones, eh? Let me see them.") + StartConversation(conversation, NPC, Spawn, "Er, no, not quite. Just stopped by to say hello. I'll be back") + end + else + AddConversationOption(conversation, "What kind of opportunity?", "Option1") + AddConversationOption(conversation, "No, I look like someone who's heading the other way.") + StartConversation(conversation, NPC, Spawn, "Hey! Don't miss out on this once-in-a-lifetime opportunity!") + end +end + +function Option1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "If the price is right", "Option2") + AddConversationOption(conversation, "No, I'm not") + StartConversation(conversation, NPC, Spawn, "Why, in farming of course. Lots of opportunity to grow in the farming industry--HA! Get it? Grow ... farming ... Oh, Never mind ... On any note, I've made a bundle selling fertilizer to the farmers in the Steppes. I'm looking for a business partner - no investment required. Yuo'd be silly to pass up this opportunity!") +end + +function Option2(NPC, Spawn) + FaceTarget(NPC, Spawn) + OfferQuest(NPC, Spawn, RecycleTheOldFashionedWay) +end + diff --git a/server/SpawnScripts/ThunderingSteppes/Jacques.lua b/server/SpawnScripts/ThunderingSteppes/Jacques.lua new file mode 100644 index 000000000..0a527e27d --- /dev/null +++ b/server/SpawnScripts/ThunderingSteppes/Jacques.lua @@ -0,0 +1,158 @@ +--[[ + Script Name : SpawnScripts/ThunderingSteppes/Jacques.lua + Script Author : Jabantiz/edited geordie0511 + Script Date : 2014.07.05 10:07:45 + Script Purpose : Jacques + +--]] + +local WatchYourStepInTheTSPartI = 99 +local WatchYourStepInTheTSPartII = 100 +local WatchYourStepInTheTSPartIII = 101 +local WatchYourStepInTheTSPartIV = 102 +local Mail = 469 + +function spawn(NPC) + ProvidesQuest(NPC, WatchYourStepInTheTSPartI) + ProvidesQuest(NPC, WatchYourStepInTheTSPartII) + ProvidesQuest(NPC, WatchYourStepInTheTSPartIII) + ProvidesQuest(NPC, WatchYourStepInTheTSPartIV) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + if GetQuestStep(Spawn, Mail) == 1 then + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_1_1054.mp3", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Yes, I have a letter from Matsy.", "MailComplete") + AddConversationOption(conversation, "No. I don't know what you're talking about.") + StartConversation(conversation, NPC, Spawn, "Hello there! Are you here to drop off some mail?") + elseif not HasQuest(Spawn, WatchYourStepInTheTSPartI) and not HasCompletedQuest(Spawn, WatchYourStepInTheTSPartI) then + -- start quest 1 + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_3_1054.mp3", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "And you survive all of this to deliver the mail?", "dlg_0_1") + AddConversationOption(conversation, "I don't have any mail to send.") + StartConversation(conversation, NPC, Spawn, "Do you need any mail delivered, friend? You can't trust just anyone with an important message. You need only the best. Me! Why, not many can survive the dangers of the Thundering Steppes. Many are devoured by bears, slaughtered by centaurs, robbed by gnolls, or flattened by giants!") + elseif HasQuest(Spawn, WatchYourStepInTheTSPartI) and GetQuestStep(Spawn, WatchYourStepInTheTSPartI) == 3 then + -- turn in Part I + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_3_1054.mp3", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "I have a reply from Blerton.", "dlg_1_1") + AddConversationOption(conversation, "I will return when I am finished.") + StartConversation(conversation, NPC, Spawn, "Welcome back. Have you completed your delivery yet?") + elseif HasCompletedQuest(Spawn, WatchYourStepInTheTSPartI) and not HasCompletedQuest(Spawn, WatchYourStepInTheTSPartII) and not HasQuest(Spawn, WatchYourStepInTheTSPartII) then + -- start quest 2 + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_3_1054.mp3", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Sure, what's next?", "dlg_2_1") + AddConversationOption(conversation, "Not just yet. I will return later.") + StartConversation(conversation, NPC, Spawn, "Hello there! Are you ready for your next visit to the exciting world of mail delivery?") + elseif HasQuest(Spawn, WatchYourStepInTheTSPartII) and GetQuestStep(Spawn, WatchYourStepInTheTSPartII) == 3 then + -- turn in Part II + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_3_1054.mp3", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "I have a reply from Tish.", "dlg_3_1") + AddConversationOption(conversation, "I will return when I am finished.") + StartConversation(conversation, NPC, Spawn, "Welcome back. Have you completed your delivery yet?") + elseif HasCompletedQuest(Spawn, WatchYourStepInTheTSPartII) and not HasCompletedQuest(Spawn, WatchYourStepInTheTSPartIII) and not HasQuest(Spawn, WatchYourStepInTheTSPartIII) then + -- start quest 3 + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_2_1054.mp3", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Of course!", "dlg_4_1") + AddConversationOption(conversation, "Why don't you ever deliver the mail yourself? Are you just too scared?", "dlg4_2") + AddConversationOption(conversation, "Not just yet.") + StartConversation(conversation, NPC, Spawn, "Are you ready to deliver more mail?") + elseif HasQuest(Spawn, WatchYourStepInTheTSPartIII) and GetQuestStep(Spawn, WatchYourStepInTheTSPartIII) == 3 then + -- turn in Part III + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_1_1054.mp3", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "I have Brianna's receipt.", "dlg_5_1") + AddConversationOption(conversation, "I will return when I am finished.") + StartConversation(conversation, NPC, Spawn, "Welcome back. Have you completed your delivery yet? ") + elseif HasCompletedQuest(Spawn, WatchYourStepInTheTSPartIII) and not HasCompletedQuest(Spawn, WatchYourStepInTheTSPartIV) and not HasQuest(Spawn, WatchYourStepInTheTSPartIV) then + -- start quest 4 + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_1_1054.mp3", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Sure.", "dlg_6_1") + AddConversationOption(conversation, "Not right now.") + StartConversation(conversation, NPC, Spawn, "Great great, I have one final letter for you to deliver if you would.") + elseif HasQuest(Spawn, WatchYourStepInTheTSPartI) or HasQuest(Spawn, WatchYourStepInTheTSPartII) or HasQuest(Spawn, WatchYourStepInTheTSPartIII) then + -- Currently doing quest 1,2, or 3 but haven't finished it yet + PlayFlavor(NPC, "", "Come back to me as soon as you've gotten the return letter.", "", 1689589577, 4560189, Spawn) + else + -- Currently on quest 4 or finished everything + PlayFlavor(NPC, "", "Thank you for all of your help with the mail deliveries, friend. That's all we have for now. I'll let you know as soon as we have more work for you.", "", 1689589577, 4560189, Spawn) + end +end + +function MailComplete(NPC, Spawn) + SetStepComplete(Spawn, Mail, 1) +end + +function dlg_0_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "Well, I could use a job.", "dlg_0_2") + AddConversationOption(conversation, "So you actually just want someone else to face the danger? I don't have time for cowards.") + StartConversation(conversation, NPC, Spawn, "Indeed! Why, nothing could deter me from my duties here. I fear nothing! Though...I umm... have pressing business here at the moment and could use a new assistant to deliver a few things for me.") +end + +function dlg_0_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "Whatever, just as long as you pay me to face all the danger for you.", "dlg_0_3") + AddConversationOption(conversation, "Angry dogs? MIGHT earn money? Nevermind.") + StartConversation(conversation, NPC, Spawn, "Ahh, wonderful! You look like a good runner. Welcome to the exciting world of professional mail delivery! Danger! Excitement! Angry dogs! You might even earn some money. Not as much as me, of course, but we all have to start somewhere.") +end + +function dlg_0_3(NPC, Spawn) + OfferQuest(NPC, Spawn, WatchYourStepInTheTSPartI) +end + +function dlg_1_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + SetStepComplete(Spawn, WatchYourStepInTheTSPartI, 3) + AddConversationOption(conversation, "Okay.") + StartConversation (conversation, NPC, Spawn, "Great! Well done on your first mail delivery. Come see me again when you're ready for your next assignment.") +end + +function dlg_2_1(NPC, Spawn) + OfferQuest(NPC, Spawn, WatchYourStepInTheTSPartII) +end + +function dlg_3_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + SetStepComplete(Spawn, WatchYourStepInTheTSPartII, 3) + AddConversationOption(conversation, "I will return as soon as I'm ready.") + StartConversation(conversation, NPC, Spawn, "Wonderful! I'll deliver this on my next run into town. Go take a break and come see me when you're ready for more.") +end + +function dlg_4_1(NPC, Spawn) + OfferQuest(NPC, Player, WatchYourStepInTheTSPartIII) +end + +function dlg_4_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "Fine.", "dlg_4_1") + AddConversationOption(conversation, "I think I'll pass for now.") + StartConversation(conversation, NPC, Spawn, "Scared? Never! I'm...merely expecting a delivery soon and if I don't stay here I'll miss it! Now are you going to deliver this or do I have to find another assistant?") +end + +function dlg_5_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "Okay.") + StartConversation(conversation, NPC, Spawn, "Ahh, there is Brianna's receipt. Thank you. Here is your payment for today's work.") +end + +function dlg_6_1(NPC, Spawn) + OfferQuest(NPC, Player, WatchYourStepInTheTSPartIV) +end \ No newline at end of file diff --git a/server/SpawnScripts/ThunderingSteppes/OldenHighguard.lua b/server/SpawnScripts/ThunderingSteppes/OldenHighguard.lua new file mode 100644 index 000000000..a0b5ba4e7 --- /dev/null +++ b/server/SpawnScripts/ThunderingSteppes/OldenHighguard.lua @@ -0,0 +1,23 @@ +--[[ + Script Name : SpawnScripts/TheThunderingSteppes/OldenHighguard.lua + Script Purpose : Olden Highguard + Script Author : Jabantiz + Script Date : 2016.06.13 + Script Notes : Auto-Generated Conversation from PacketParser Data +--]] + +function spawn(NPC) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/olden_highguard/steppes/oldenhighguard000.mp3", "", "", 101809511, 0, Spawn) + AddConversationOption(conversation, "Be careful, this land can be pretty dangerous.") + StartConversation(conversation, NPC, Spawn, "Heather and I just made the journey from the docks. The trip went smoothly, although we felt like there were eyes upon us from high atop the rocks.") +end diff --git a/server/SpawnScripts/ThunderingSteppes/OutlandSentryLanders.lua b/server/SpawnScripts/ThunderingSteppes/OutlandSentryLanders.lua new file mode 100644 index 000000000..6dbade802 --- /dev/null +++ b/server/SpawnScripts/ThunderingSteppes/OutlandSentryLanders.lua @@ -0,0 +1,49 @@ +--[[ + Script Name : SpawnScripts/ThunderingSteppes/OutlandSentryLanders.lua + Script Author : Jabantiz + Script Date : 2015.07.12 02:07:53 + Script Purpose : + : +--]] + +function spawn(NPC) + MovementLoopAddLocation(NPC, 79.15, 2.91, -572.45, 2) + MovementLoopAddLocation(NPC, 70.78, 6.95, -560.78, 2) + MovementLoopAddLocation(NPC, 57.14, 8.62, -554.45, 2) + MovementLoopAddLocation(NPC, 36.07, 12.80, -553.58, 2) + MovementLoopAddLocation(NPC, 20.67, 16.58, -559.86, 2) + MovementLoopAddLocation(NPC, -3.70, 19.40, -569.21, 2) + MovementLoopAddLocation(NPC, -56.73, 19.30, -580.18, 2) + MovementLoopAddLocation(NPC, -73.70, 18.98, -577.56, 2) + MovementLoopAddLocation(NPC, -89.31, 18.93, -571.66, 2) + MovementLoopAddLocation(NPC, -117.40, 19.60, -548.26, 2) + MovementLoopAddLocation(NPC, -131.36, 18.13, -532.85, 2) + MovementLoopAddLocation(NPC, -146.61, 13.67, -515.87, 2) + MovementLoopAddLocation(NPC, -162.29, 8.37, -496.02, 2) + MovementLoopAddLocation(NPC, -174.85, 2.48, -483.08, 2) + MovementLoopAddLocation(NPC, -190.58, -0.66, -464.35, 2) + MovementLoopAddLocation(NPC, -198.52, -4.40, -447.93, 2) + MovementLoopAddLocation(NPC, -204.33, -8.51, -440.59, 2) + + MovementLoopAddLocation(NPC, -198.52, -4.40, -447.93, 2) + MovementLoopAddLocation(NPC, -190.58, -0.66, -464.35, 2) + MovementLoopAddLocation(NPC, -174.85, 2.48, -483.08, 2) + MovementLoopAddLocation(NPC, -162.29, 8.37, -496.02, 2) + MovementLoopAddLocation(NPC, -146.61, 13.67, -515.87, 2) + MovementLoopAddLocation(NPC, -131.36, 18.13, -532.85, 2) + MovementLoopAddLocation(NPC, -117.40, 19.60, -548.26, 2) + MovementLoopAddLocation(NPC, -89.31, 18.93, -571.66, 2) + MovementLoopAddLocation(NPC, -73.70, 18.98, -577.56, 2) + MovementLoopAddLocation(NPC, -56.73, 19.30, -580.18, 2) + MovementLoopAddLocation(NPC, -3.70, 19.40, -569.21, 2) + MovementLoopAddLocation(NPC, 20.67, 16.58, -559.86, 2) + MovementLoopAddLocation(NPC, 36.07, 12.80, -553.58, 2) + MovementLoopAddLocation(NPC, 57.14, 8.62, -554.45, 2) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) +end \ No newline at end of file diff --git a/server/SpawnScripts/ThunderingSteppes/OutlandSentryVidhir.lua b/server/SpawnScripts/ThunderingSteppes/OutlandSentryVidhir.lua new file mode 100644 index 000000000..604057fbc --- /dev/null +++ b/server/SpawnScripts/ThunderingSteppes/OutlandSentryVidhir.lua @@ -0,0 +1,40 @@ +--[[ + Script Name : SpawnScripts/ThunderingSteppes/OutlandSentryVidhir.lua + Script Author : Jabantiz + Script Date : 2015.07.12 06:07:47 + Script Purpose : + : +--]] + +function spawn(NPC) + MovementLoopAddLocation(NPC, 202.54, -1.25, -258.20, 2) + MovementLoopAddLocation(NPC, 199.83, -0.50, -322.54, 2) + MovementLoopAddLocation(NPC, 207.25, 0.08, -397.28, 2) + MovementLoopAddLocation(NPC, 219.89, 0.43, -407.82, 2) + MovementLoopAddLocation(NPC, 274.50, -1.01, -416.51, 2) + MovementLoopAddLocation(NPC, 302.79, -0.06, -421.95, 2) + MovementLoopAddLocation(NPC, 325.37, -1.29, -426.05, 2) + MovementLoopAddLocation(NPC, 350.34, -1.25, -460.15, 2) + MovementLoopAddLocation(NPC, 361.18, 8.10, -496.50, 2) + MovementLoopAddLocation(NPC, 379.15, 11.74, -503.97, 2) + MovementLoopAddLocation(NPC, 383.01, 13.13, -510.42, 2) + + MovementLoopAddLocation(NPC, 379.15, 11.74, -503.97, 2) + MovementLoopAddLocation(NPC, 361.18, 8.10, -496.50, 2) + MovementLoopAddLocation(NPC, 350.34, -1.25, -460.15, 2) + MovementLoopAddLocation(NPC, 325.37, -1.29, -426.05, 2) + MovementLoopAddLocation(NPC, 302.79, -0.06, -421.95, 2) + MovementLoopAddLocation(NPC, 274.50, -1.01, -416.51, 2) + MovementLoopAddLocation(NPC, 219.89, 0.43, -407.82, 2) + MovementLoopAddLocation(NPC, 207.25, 0.08, -397.28, 2) + MovementLoopAddLocation(NPC, 199.83, -0.50, -322.54, 2) +end + +function hailed(NPC, Spawn) + +end + +function respawn(NPC) + spawn(NPC) +end + diff --git a/server/SpawnScripts/ThunderingSteppes/SentryCaptainGarland.lua b/server/SpawnScripts/ThunderingSteppes/SentryCaptainGarland.lua new file mode 100644 index 000000000..c98da72a7 --- /dev/null +++ b/server/SpawnScripts/ThunderingSteppes/SentryCaptainGarland.lua @@ -0,0 +1,70 @@ +--[[ + Script Name : SpawnScripts/ThunderingSteppes/SentryCaptainGarland.lua + Script Author : Jabantiz + Script Date : 2015.07.12 06:07:59 + Script Purpose : + : +--]] + +function spawn(NPC) + MovementLoopAddLocation(NPC, 249.94, 33.24, -1029.99, 2) + MovementLoopAddLocation(NPC, 258.34, 32.76, -1023.70, 2) + MovementLoopAddLocation(NPC, 271.59, 25.22, -1007.19, 2) + MovementLoopAddLocation(NPC, 272.38, 22.43, -993.42, 2) + MovementLoopAddLocation(NPC, 263.14, 16.30, -968.31, 2) + MovementLoopAddLocation(NPC, 246.15, 13.15, -958.93, 2) + MovementLoopAddLocation(NPC, 195.67, 13.63, -963.25, 2) + MovementLoopAddLocation(NPC, 176.94, 11.48, -955.78, 2) + MovementLoopAddLocation(NPC, 169.55, 9.64, -936.13, 2) + MovementLoopAddLocation(NPC, 173.65, 5.79, -913.69, 2) + MovementLoopAddLocation(NPC, 189.85, 3.46, -881.72, 2) + MovementLoopAddLocation(NPC, 185.61, 2.89, -863.07, 2) + MovementLoopAddLocation(NPC, 147.49, -2.60, -796.37, 2) + MovementLoopAddLocation(NPC, 112.35, -1.82, -782.23, 2) + MovementLoopAddLocation(NPC, 75.19, -2.13, -771.52, 2) + MovementLoopAddLocation(NPC, 54.50, -1.69, -752.32, 2) + MovementLoopAddLocation(NPC, 30.11, -1.58, -706.66, 2) + MovementLoopAddLocation(NPC, 37.95, -1.48, -660.71, 2) + MovementLoopAddLocation(NPC, 49.54, -1.45, -641.16, 2) + MovementLoopAddLocation(NPC, 71.65, -1.06, -623.20, 2) + MovementLoopAddLocation(NPC, 101.28, -2.10, -612.55, 2) + MovementLoopAddLocation(NPC, 167.39, -2.70, -586.82, 2) + MovementLoopAddLocation(NPC, 208.07, -1.82, -557.98, 2) + MovementLoopAddLocation(NPC, 285.54, -1.21, -547.06, 2) + MovementLoopAddLocation(NPC, 338.42, 10.54, -535.79, 2) + MovementLoopAddLocation(NPC, 360.09, 11.65, -514.59, 2) + + MovementLoopAddLocation(NPC, 338.42, 10.54, -535.79, 2) + MovementLoopAddLocation(NPC, 285.54, -1.21, -547.06, 2) + MovementLoopAddLocation(NPC, 208.07, -1.82, -557.98, 2) + MovementLoopAddLocation(NPC, 167.39, -2.70, -586.82, 2) + MovementLoopAddLocation(NPC, 101.28, -2.10, -612.55, 2) + MovementLoopAddLocation(NPC, 71.65, -1.06, -623.20, 2) + MovementLoopAddLocation(NPC, 49.54, -1.45, -641.16, 2) + MovementLoopAddLocation(NPC, 37.95, -1.48, -660.71, 2) + MovementLoopAddLocation(NPC, 30.11, -1.58, -706.66, 2) + MovementLoopAddLocation(NPC, 54.50, -1.69, -752.32, 2) + MovementLoopAddLocation(NPC, 75.19, -2.13, -771.52, 2) + MovementLoopAddLocation(NPC, 112.35, -1.82, -782.23, 2) + MovementLoopAddLocation(NPC, 147.49, -2.60, -796.37, 2) + MovementLoopAddLocation(NPC, 185.61, 2.89, -863.07, 2) + MovementLoopAddLocation(NPC, 189.85, 3.46, -881.72, 2) + MovementLoopAddLocation(NPC, 173.65, 5.79, -913.69, 2) + MovementLoopAddLocation(NPC, 169.55, 9.64, -936.13, 2) + MovementLoopAddLocation(NPC, 176.94, 11.48, -955.78, 2) + MovementLoopAddLocation(NPC, 195.67, 13.63, -963.25, 2) + MovementLoopAddLocation(NPC, 246.15, 13.15, -958.93, 2) + MovementLoopAddLocation(NPC, 263.14, 16.30, -968.31, 2) + MovementLoopAddLocation(NPC, 272.38, 22.43, -993.42, 2) + MovementLoopAddLocation(NPC, 271.59, 25.22, -1007.19, 2) + MovementLoopAddLocation(NPC, 258.34, 32.76, -1023.70, 2) +end + +function hailed(NPC, Spawn) + +end + +function respawn(NPC) + spawn(NPC) +end + diff --git a/server/SpawnScripts/ThunderingSteppes/TheWanderingAugur.lua b/server/SpawnScripts/ThunderingSteppes/TheWanderingAugur.lua new file mode 100644 index 000000000..651d5bde3 --- /dev/null +++ b/server/SpawnScripts/ThunderingSteppes/TheWanderingAugur.lua @@ -0,0 +1,141 @@ +--[[ + Script Name : SpawnScripts/ThunderingSteppes/TheWanderingAugur.lua + Script Author : Jabantiz + Script Date : 2014.07.13 12:07:13 + Script Purpose : The Wandering Augur (2490318) + : +--]] + +local TheWanderersThreeMeaningsOfLife = 110 + +function spawn(NPC) + ProvidesQuest(NPC, TheWanderersThreeMeaningsOfLife) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + if not HasQuest(Spawn, TheWanderersThreeMeaningsOfLife) and not HasCompletedQuest(Spawn, TheWanderersThreeMeaningsOfLife) then + -- start the quest + PlayFlavor(NPC, "voiceover/english/the_wandering_augur/steppes/quests/quest_wandering_augur/wandering_augur001.mp3", "", "", 3928308346, 2492813375, Spawn) + AddConversationOption(conversation, "You were expecting me?", "dlg_0_1") + AddConversationOption(conversation, "I have no idea what you're talking about.") + StartConversation(conversation, NPC, Spawn, "Ah, so you've arrived at last! I wondered when you would seek my knowledge of the meaning of life. Come closer and we shall begin your quest for enlightenment, my child.") + elseif HasQuest(Spawn, TheWanderersThreeMeaningsOfLife) and GetQuestStep(Spawn, TheWanderersThreeMeaningsOfLife) == 1 then + -- on step 1 + PlayFlavor(NPC, "voiceover/english/the_wandering_augur/steppes/quests/quest_wandering_augur/wandering_augur004.mp3", "", "", 4182174294, 1820017120, Spawn) + AddConversationOption(conversation, "Not yet.") + StartConversation(conversation, NPC, Spawn, "Ah, you've returned. Do you understand the mysteries of the physical meanings of life?") + elseif HasQuest(Spawn, TheWanderersThreeMeaningsOfLife) and GetQuestStep(Spawn, TheWanderersThreeMeaningsOfLife) == 2 then + -- on step 2 + PlayFlavor(NPC, "voiceover/english/the_wandering_augur/steppes/quests/quest_wandering_augur/wandering_augur004.mp3", "", "", 4182174294, 1820017120, Spawn) + AddConversationOption(conversation, "I suppose so.", "dlg_1_1") + AddConversationOption(conversation, "Not yet.") + StartConversation(conversation, NPC, Spawn, "Ah, you've returned. Do you understand the mysteries of the physical meanings of life?") + elseif HasQuest(Spawn, TheWanderersThreeMeaningsOfLife) and GetQuestStep(Spawn, TheWanderersThreeMeaningsOfLife) == 3 then + -- on step 3 + PlayFlavor(NPC, "voiceover/english/the_wandering_augur/steppes/quests/quest_wandering_augur/wandering_augur007.mp3", "", "", 1006683380, 911151650, Spawn) + AddConversationOption(conversation, "Not yet.") + StartConversation(conversation, NPC, Spawn, "You have learned about inner strength, my child? You have defeated the foes against whom I sent you?") + elseif HasQuest(Spawn, TheWanderersThreeMeaningsOfLife) and GetQuestStep(Spawn, TheWanderersThreeMeaningsOfLife) == 4 then + -- on step 4 + PlayFlavor(NPC, "voiceover/english/the_wandering_augur/steppes/quests/quest_wandering_augur/wandering_augur007.mp3", "", "", 1006683380, 911151650, Spawn) + AddConversationOption(conversation, "Of course.", "dlg_2_1") + AddConversationOption(conversation, "Not yet.") + StartConversation(conversation, NPC, Spawn, "You have learned about inner strength, my child? You have defeated the foes against whom I sent you?") + elseif HasQuest(Spawn, TheWanderersThreeMeaningsOfLife) and GetQuestStep(Spawn, TheWanderersThreeMeaningsOfLife) == 5 then + -- on step 5 + PlayFlavor(NPC, "voiceover/english/the_wandering_augur/steppes/quests/quest_wandering_augur/wandering_augur010.mp3", "", "", 3280494285, 3614506473, Spawn) + AddConversationOption(conversation, "How should I know? I haven't gone anywhere!") + StartConversation(conversation, NPC, Spawn, "Did you set off in the right direction, my child?") + elseif HasQuest(Spawn, TheWanderersThreeMeaningsOfLife) and GetQuestStep(Spawn, TheWanderersThreeMeaningsOfLife) == 6 then + -- on step 6 + PlayFlavor(NPC, "voiceover/english/the_wandering_augur/steppes/quests/quest_wandering_augur/wandering_augur010.mp3", "", "", 3280494285, 3614506473, Spawn) + AddConversationOption(conversation, "I guess.", "dlg_3_1") + AddConversationOption(conversation, "How should I know? I haven't gone anywhere!") + StartConversation(conversation, NPC, Spawn, "Did you set off in the right direction, my child?") + elseif HasCompletedQuest(Spawn, TheWanderersThreeMeaningsOfLife) then + -- finished the quest + PlayFlavor(NPC, "voiceover/english/the_wandering_augur/steppes/quests/quest_wandering_augur/wandering_augur013.mp3", "", "", 1521418825, 1376165665, Spawn) + AddConversationOption(conversation, "I'll be on my way.") + StartConversation(conversation, NPC, Spawn, "I have given you the keys, my child. How or if you ever use them is in your hands. Other Augurs you meet in your travels may provide you with more wisdom.") + end +end + +function dlg_0_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/the_wandering_augur/steppes/quests/quest_wandering_augur/wandering_augur002.mp3", "", "", 2562964464, 4217203499, Spawn) + AddConversationOption(conversation, "The meanings of life, eh? I'm listening.", "dlg_0_2") + AddConversationOption(conversation, "I'm not interested.") + StartConversation(conversation, NPC, Spawn, "Many seek me, my child, for I hold the secrets to the meanings of life. The meanings are many yet few. They are expansive yet personal. They are wide-reaching while remaining local. The meanings of life are all around us and with my help, you can unlock them if you so desire.") +end + +function dlg_0_2(NPC, Spawn) + OfferQuest(NPC, Spawn, TheWanderersThreeMeaningsOfLife) +end + +function dlg_1_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/the_wandering_augur/steppes/quests/quest_wandering_augur/wandering_augur005.mp3", "", "", 1955011218, 3592248483, Spawn) + AddConversationOption(conversation, "Inner strength?", "dlg_1_2") + AddConversationOption(conversation, "I don't have time for inner strength.") + StartConversation(conversation, NPC, Spawn, "The physical meaning is the way of pain, my child. Pain can be overcome through strengthening one's mind. By focusing on the learning and not the pain, you will realize the second meaning of life: inner strength.") +end + +function dlg_1_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + SetStepComplete(Spawn, TheWanderersThreeMeaningsOfLife, 2) + PlayFlavor(NPC, "voiceover/english/the_wandering_augur/steppes/quests/quest_wandering_augur/wandering_augur006.mp3", "", "", 14505144, 1932942931, Spawn) + AddConversationOption(conversation, "I wasn't asking a question, I was...oh, never mind. I'll be back.") + StartConversation(conversation, NPC, Spawn, "A wise question, young one. The only way you will learn inner strength is through perseverance. And perseverance is remaining steadfast no matter how difficult the situation. To this end, you must defeat your foes in single combat and steel your mind against all pain. Go, then, and return when you are ready for the final meaning of life.") +end + +function dlg_2_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/the_wandering_augur/steppes/quests/quest_wandering_augur/wandering_augur008.mp3", "", "", 915290527, 2753306989, Spawn) + AddConversationOption(conversation, "How do you know if it's the right direction?", "dlg_2_2") + AddConversationOption(conversation, "I'm not ready to finish this.") + StartConversation(conversation, NPC, Spawn, "I have led you towards two of the meanings of life. There is but one more that I can share with you. This is the most subtle of meanings and the one at which most students balk. It is patience and learning to trust that what will be, will be. The longest journey starts with a single step, whether in the right direction or not.") +end + +function dlg_2_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + SetStepComplete(Spawn, TheWanderersThreeMeaningsOfLife, 4) + PlayFlavor(NPC, "voiceover/english/the_wandering_augur/steppes/quests/quest_wandering_augur/wandering_augur009.mp3", "", "", 1926047857, 1251915059, Spawn) + AddConversationOption(conversation, "You didn't answer my question. Never mind. I'll be back.") + StartConversation(conversation, NPC, Spawn, "I always know whether I am setting off in the right direction. The question is, do you? Go, then, and see whether you have the patience to conquer the third meaning of life. I will wait for you here. Patiently, of course.") +end + +function dlg_3_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + PlayFlavor(NPC, "voiceover/english/the_wandering_augur/steppes/quests/quest_wandering_augur/wandering_augur011.mp3", "", "", 2965742070, 4163652707, Spawn) + AddConversationOption(conversation, "Not really. Are all Augurs as obtuse as you?", "dlg_3_2") + StartConversation(conversation, NPC, Spawn, "As you see, sometimes many directions are correct. We learn through trial and error which direction is correct at that moment. The next time we set forth, we take what we have learned and apply it to our latest situation. Do you understand now, my child?") +end + +function dlg_3_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + SetStepComplete(Spawn, TheWanderersThreeMeaningsOfLife, 6) + PlayFlavor(NPC, "voiceover/english/the_wandering_augur/steppes/quests/quest_wandering_augur/wandering_augur012.mp3", "", "", 1899808569, 4168257450, Spawn) + AddConversationOption(conversation, "Patience. Hmm.") + StartConversation(conversation, NPC, Spawn, "You are not ready, my child. A pity. Perhaps when you have studied for as many years as I have, you will realize that these three meanings of life are the basis for all that you experience. The physical meaning, inner strength and patience. Yes, patience, above all else.") +end \ No newline at end of file diff --git a/server/SpawnScripts/ThunderingSteppes/TishTickers.lua b/server/SpawnScripts/ThunderingSteppes/TishTickers.lua new file mode 100644 index 000000000..1ad47f765 --- /dev/null +++ b/server/SpawnScripts/ThunderingSteppes/TishTickers.lua @@ -0,0 +1,209 @@ +--[[ + Script Name : SpawnScripts/ThunderingSteppes/TishTickers.lua + Script Author : Jabantiz + Script Date : 2014.07.08 07:07:37 + Script Purpose : Tish Tickers (2490042) + : +--]] + +-- Quests +local WatchYourStepInTheTSPartII = 100 +local ScryingShame = 105 +local TheGnollCave = 106 +local StopTheElementals = 107 + +-- Items +local AnAncientSilverCoin = 3513 + +function spawn(NPC) + ProvidesQuest(NPC, TheGnollCave) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + -- on watch your step part II + if HasQuest(Spawn, WatchYourStepInTheTSPartII) and GetQuestStep(Spawn, WatchYourStepInTheTSPartII) == 1 then + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_2_1025.mp3", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "I have a letter for you.", "dlg_0_1") + AddConversationOption(conversation, "I have to go now.") + StartConversation(conversation, NPC, Spawn, "Would you people leave me alone?! I don't have your money! Oh, umm. Haha... Sorry about that, I thought you were someone else.") + elseif HasQuest(Spawn, ScryingShame) and GetQuestStep(Spawn, ScryingShame) == 1 then + -- on A Scrying Shame + PlayFlavor(NPC, "", "Good luck on the search! Better late than having your legs broken by cold, heartless machines built only to cause you bodily harm, I always say.", "", 1689589577, 4560189, Spawn) + elseif HasQuest(Spawn, ScryingShame) and GetQuestStep(Spawn, ScryingShame) == 2 then + -- turn in A Scrying Shame + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_1_1025.mp3", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "I've found your coins.", "dlg_1_1") + AddConversationOption(conversation, "I'm still searching.") + StartConversation(conversation, NPC, Spawn, "How goes the search? I hope you find those coins soon. I can't stop thinking about those clockworks... Some of them can climb walls and enter windows, you know. And they have spikes all over them. Really sharp ones. ") + elseif HasCompletedQuest(Spawn, ScryingShame) and not HasQuest(Spawn, TheGnollCave) and not HasCompletedQuest(Spawn, TheGnollCave) then + -- start The Gnoll Cave (completed A Scrying Shame) + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_2_1025.mp3", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "What is wrong with the gnolls?", "dlg_2_1") + AddConversationOption(conversation, "I must be going now.") + StartConversation(conversation, NPC, Spawn, "Hmm, I wonder if I can get another loan. I think if I reinforce my wagon frames and add spikes to the roof I can avoid any misplaced giant feet interrupting my studies. Now what to do about the gnolls? Oh, hello again!") + elseif HasQuest(Spawn, TheGnollCave) and GetQuestStep(Spawn, TheGnollCave) ~= 4 then + -- On The Gnoll Cave + PlayFlavor(NPC, "", "Let me know as soon as you get those items for me. We need to hurry if we're going to get my equipment back before the gnolls do something horrible with it.", "", 1689589577, 4560189, Spawn) + elseif HasQuest(Spawn, TheGnollCave) and GetQuestStep(Spawn, TheGnollCave) == 4 then + -- turn in The Gnoll Cave? + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_2_1025.mp3", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "Yes, I have found all of your components.", "dlg_3_1") + AddConversationOption(conversation, "I will return soon.") + StartConversation(conversation, NPC, Spawn, "Have you found everything yet?") + elseif not HasCompletedQuest(Spawn, StopTheElementals) and (not HasQuest(Spawn, StopTheElementals) or GetQuestStep(Spawn, StopTheElementals) == 1) then + -- Haven't started or haven't finished Stop the Elementals + PlayFlavor(NPC, "", "Good luck with those gnolls. Their cave should be hidden among the rocks on the hill to the south.", "", 0, 0, Spawn) + elseif GetQuestStep(Spawn, StopTheElementals) == 2 then + -- turn in Stop the Elementals + PlayFlavor(NPC, "voiceover/english/voice_emotes/greetings/greetings_1_1025.mp3", "", "", 0, 0, Spawn) + AddConversationOption(conversation, "I have recovered your research equipment.", "dlg_4_1") + AddConversationOption(conversation, "I'm sorry to have disturbed you. Have a nice day.") + StartConversation(conversation, NPC, Spawn, "I hope those gnolls haven't misused my equipment. There's no end to the trouble they could cause with it.") + elseif HasCompletedQuest(Spawn, StopTheElementals) then + -- finished Stop the Elementals + PlayFlavor(NPC, "", "Thank you so much for all of your help! It was kind of ironic that the gnolls had to let those elementals out of my camping stove. They could have caused a lot of trouble if they had tinkered with my research equipment.", "", 1689589577, 4560189, Spawn) + end +end + +function dlg_0_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "Pardon me, but who is this you're not afraid of?", "dlg_0_2") + AddConversationOption(conversation, "I'm not getting involved.") + StartConversation(conversation, NPC, Spawn, "A letter, you say? I... well I guess you'd better hand it over. Hmm. Why won't they leave me alone? I've already told them I'll have the coins for them next week! Now they've resorted to petty threats. I'm not afraid of them! ...really. Well, I'm not.") +end + +function dlg_0_2(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "So what happens if you don't pay?", "dlg_0_3") + AddConversationOption(conversation, "I'm too busy to listen to this.") + StartConversation(conversation, NPC, Spawn, "The Clockwork Collection Agency. I took out a loan to fund some of my studies. Things haven't gone quite as well as I'd hoped though. Gnolls keep stealing my equipment, the beastly little savages, and a giant stepped on one of my wagons! There wasn't even enough left to salvage and sell off as scrap. Now I don't have any results and I've spent the entire loan. I don't know how I'm going to pay them back and they're getting rather insistent.") +end + +function dlg_0_3(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "Don't clockworks just do helpful things? Like cleaning?", "dlg_0_4") + AddConversationOption(conversation, "I've had enough of this.") + StartConversation(conversation, NPC, Spawn, "If you don't pay they send their collection clockworks after you. I hear the process isn't pleasant. Not at all.") +end + +function dlg_0_4(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "What do you need?", "dlg_0_5") + AddConversationOption(conversation, "I don't think I like where this is going.") + StartConversation(conversation, NPC, Spawn, "These ones aren't the cooking and cleaning type. These are the other ones. Their only purpose is to make sure you have no intention of being late with your next payment and they're very good at it. Look, I'd really rather not talk about it. It looks like the only way I'm going to be able to pay them back now is if I take a few chances. Would you be willing to help me out?") +end + +function dlg_0_5(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "What are scrying stones?", "dlg_0_7") + AddConversationOption(conversation, "I use them all the time, what do you need me to do?", "dlg_0_6") + AddConversationOption(conversation, "Oh no, I'm not doing any gambling for you.") + StartConversation(conversation, NPC, Spawn, "I need to pay them five ancient silver coins to pay off my debt. The only way I know of to get them on such short notice would be to do a bit of gambling. Do you know how to use scrying stones?") +end + +function dlg_0_6(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "Yes, I will help you.", "OfferScryingShame") + AddConversationOption(conversation, "No, I don't like the sound of this.") + StartConversation(conversation, NPC, Spawn, "Since you already know the process, I'll just get to the point. Are you willing to go use some scrying stones for me and help me collect enough ancient silver coins to pay back my debt?") +end + +function dlg_0_7(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "Okay.", "dlg_0_8") + AddConversationOption(conversation, "I think you're on your own.") + StartConversation(conversation, NPC, Spawn, "Sometimes when you're traveling you'll see strange rainbow lights shimmering in the air. I'm not sure what causes them, but they're very pretty. They seem to have some link to treasure lost in the area. We're not sure what that link is, but we have found a way to use it to our advantage. This requires a scrying stone.") +end + +function dlg_0_8(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "What sort of things?", "dlg_0_9") + AddConversationOption(conversation, "I've had enough of this.") + StartConversation(conversation, NPC, Spawn, "If you use a scrying stone while standing in the lights, something very strange happens. I don't know how, but sometimes the stone will help you find whatever treasure has been lost there. The stone is destroyed in the process of course and sometimes you don't find anything at all, but sometimes you find strange and wonderful things.") +end + +function dlg_0_9(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "What kind of dangers are we talking about here?", "dlg_0_10") + AddConversationOption(conversation, "No, I don't like the sound of this.") + StartConversation(conversation, NPC, Spawn, "I'm not sure, really. I've never found anything, myself. I have horrible luck. A friend of mine says he found an incredible enchanted ring that tickles you mercilessly when you put it on. He thinks it was once used as some sort of torture device. Oh, I should probably warn you, scrying does have its... dangers.") +end + +function dlg_0_10(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "I guess so.", "OfferScryingShame") + AddConversationOption(conversation, "No thanks.") + StartConversation(conversation, NPC, Spawn, "Oh, the usual. Horrible beasts clawing their way up from the ground to devour you whole. Depending on your luck, you might spend more time running away screaming than you do searching. There's no shame in running. It's definitely healthier than the alternatives. If you get lucky though, you can find a lot of ancient silver coins, which is exactly what I need to pay off my loan. Five of them. Will you help me?") +end + +function OfferScryingShame(NPC, Spawn) + OfferQuest(NPC, Spawn, ScryingShame) +end + +function dlg_1_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "Okay.") + StartConversation(conversation, NPC, Spawn, "Wonderful! You're a life saver! I wish I could give you a more fitting reward, but I'm in quite a bit of debt. Thank you so much! Here, I've packaged those coins with a return letter. Please deliver this to Jacques for me.") + SetStepComplete(Spawn, ScryingShame, 2) + SetStepComplete(Spawn, WatchYourStepInTheTSPartII, 2) +end + +function dlg_2_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "I suppose I could help you again.", "OfferGnollCave") + AddConversationOption(conversation, "I don't have time right now.") + StartConversation(conversation, NPC, Spawn, "The gnolls stole some very valuable magical equipment from me and I need it back if I'm going to resume my research. Not to mention the fact that it could be very, very dangerous if misused. I don't suppose you'd be willing to help me recover it, would you?") +end + +function OfferGnollCave(NPC, Spawn) + OfferQuest(NPC, Spawn, TheGnollCave) +end + +function dlg_3_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "I'll be careful.") + StartConversation(conversation, NPC, Spawn, "Well done! Now you should be able to enter the gnoll cave on the hill to the south of this tower. You'll have to search around among the large stone pillars up there. The entrance is hidden in one of the pillars. Be careful going in there. Some of the things they stole were very...volatile. There's no telling what they might do with it.") + SetStepComplete(Spawn, TheGnollCave, 4) +end + +function dlg_4_1(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + AddConversationOption(conversation, "Okay.") + StartConversation(conversation, NPC, Spawn, "Thank you so much! I was starting to think I would never get this back. You've helped me more than I could have possibly hoped for. Here, take this reward. It's the least I can do.") + SetStepComplete(Spawn, StopTheElementals, 2) +end \ No newline at end of file diff --git a/server/SpawnScripts/ThunderingSteppes/TobiasGranville.lua b/server/SpawnScripts/ThunderingSteppes/TobiasGranville.lua new file mode 100644 index 000000000..b5ab918a8 --- /dev/null +++ b/server/SpawnScripts/ThunderingSteppes/TobiasGranville.lua @@ -0,0 +1,104 @@ +--[[ + Script Name : TobiasGranville.lua + Script Purpose : Tobias Granville (2490178) + Script Author : Jabantiz + Script Date : 8/10/2016 + Script Notes : +--]] +local GranvillesRestaurantAntonica = 182 + +function spawn(NPC) + ProvidesQuest(NPC, GranvillesRestaurantAntonica) + SetPlayerProximityFunction(NPC, 10, "InRange", "LeaveRange") +end + +function InRange(NPC, Spawn) + if not HasQuest(Spawn, GranvillesRestaurantAntonica) and not HasCompletedQuest(Spawn, GranvillesRestaurantAntonica) then + PlayFlavor(NPC, "", "Looking for folks skilled at fishing!", "beckon", 0, 0, Spawn) + else + Say(NPC, "Good to see you again.", Spawn) + end +end + +function LeaveRange(NPC, Spawn) +end + +function respawn(NPC) + spawn(NPC) +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + local conversation = CreateConversation() + + if HasCompletedQuest(Spawn, GranvillesRestaurantAntonica) then + Say(NPC, "I appreciate your help.", Spawn) + elseif HasQuest(Spawn, GranvillesRestaurantAntonica) then + local step = GetQuestStep(Spawn, GranvillesRestaurantAntonica) + if step <= 2 then + AddConversationOption(conversation, "I'm still gathering them. I'll be back shortly.") + if step == 2 then + AddConversationOption(conversation, "Here are the crab shells.", "Option2") + end + StartConversation(conversation, NPC, Spawn, "Where are my ingredients, hm?", "voiceover/english/tobias_granville/steppes/quests/quest_tobias_granville/tobias_granville005.mp3", 3287496753, 2683193173) + elseif step <= 4 then + AddConversationOption(conversation, "I'm still working on it.") + if step == 4 then + AddConversationOption(conversation, "Here's your seafood.", "Option3") + end + StartConversation(conversation, NPC, Spawn, "Well, it's about time. I, uh, was beginning to worry.") + else + AddConversationOption(conversation, "If I ever go to Nektulos, I'll look her up.") + StartConversation(conversation, NPC, Spawn, "I appreciate the report. This is all the coin I have to pay you for your work. My sister Tanny Granville says I spend too much on ingredients. Well, if you want more work you can always speak with her. She's out in Nektulos Forest getting some ingredients out that-a-way. Thanks for the work, friend.") + end + else + -- Doesn't have the quest and hasn't completed it + AddConversationOption(conversation, "Sorry, I'm not interested.") + AddConversationOption(conversation, "What kind of hoofing do you mean?", "Option1") + StartConversation(conversation, NPC, Spawn, "Who knew opening a restaurant would take all this field work? Hunting, gathering, searching, when all I want to do is cook! Cook, I tell you! I need someone else to do all this hoofing around!") + PlayFlavor(NPC, "voiceover/english/tobias_granville/steppes/quests/quest_tobias_granville/tobias_granville001.mp3", "", "shrug", 2405099568, 1478987434, Spawn) + end +end + +function Option1(NPC, Spawn) + FaceTarget(NPC, Spawn) + local conversation = CreateConversation() + + AddConversationOption(conversation, "Well, I have other tasks at hand. Sorry, can't help you.") + AddConversationOption(conversation, "I'm pretty good. What do you need, exactly?", "Option4") + StartConversation(conversation, NPC, Spawn, "Splendid timing! I'm creating the most delightful seafood bisque. So many ingredients are needed to create the flavors in a good bisque. I have most of them set aside already, but I'm looking for an excellent fisherman and hunter to get my final ingredients. It's vital that I hire only the best! Only the best can get what I need!", "voiceover/english/tobias_granville/steppes/quests/quest_tobias_granville/tobias_granville002.mp3", 1972418532, 2059774414) +end + +function Option4(NPC, Spawn) + OfferQuest(NPC, Spawn, GranvillesRestaurantAntonica) +end + +function Option2(NPC, Spawn) + FaceTarget(NPC, Spawn) + local conversation = CreateConversation() + + SetStepComplete(Spawn, GranvillesRestaurantAntonica, 2) + + AddConversationOption(conversation, "I'll be back with your seafood.") + StartConversation(conversation, NPC, Spawn, "These will do nicely. I can certainly trust you to find the highest quality seafood from the mobs of fish. Not just any seafood, mind you, only the best will do! You can't find these things just anywhere, you know. Head straight down the Thundermist Road to the little cove at the end of Thundermist Valley. Look for the rocks the sailors call 'the Three Sisters,' though I don't know that anyone else calls those rocks any such name.") + -- 'the Three Sisters,' is suppose to be " not ' but i can't get the damn editors to accept /, always changes it to / +end + +function Option3(NPC, Spawn) + FaceTarget(NPC, Spawn) + local conversation = CreateConversation() + + AddConversationOption(conversation, "Not right now.") + AddConversationOption(conversation, "What's your theory on this?", "Option5") + StartConversation(conversation, NPC, Spawn, "Good, good! These will do nicely. I'm surprised it took this long; my old supplier used to say that one could walk across the water on the backs of the crabs and fishes. Something must be keeping their numbers unnaturally low. Perhaps you could look into this? I need to ensure a steady supply of fresh ingredients for my bisque!") +end + +function Option5(NPC, Spawn) + FaceTarget(NPC, Spawn) + local conversation = CreateConversation() + + SetStepComplete(Spawn, GranvillesRestaurantAntonica, 4) + + AddConversationOption(conversation, "I'll investigate and report back.") + StartConversation(conversation, NPC, Spawn, "He used to gather my ingredients at Thundermist Valley's cove. Last I saw him, he was babbling about singing. I suspect there's a concentration of sirens out there that might have a hand in hoarding not only my ingredients but my suppliers as well. They might have some kind of underwater gathering place near the shore.") +end \ No newline at end of file diff --git a/server/SpawnScripts/ThunderingSteppes/TrapperBorgus.lua b/server/SpawnScripts/ThunderingSteppes/TrapperBorgus.lua new file mode 100644 index 000000000..2aae4c98d --- /dev/null +++ b/server/SpawnScripts/ThunderingSteppes/TrapperBorgus.lua @@ -0,0 +1,64 @@ +--[[ + Script Name : SpawnScripts/ThunderingSteppes/TrapperBorgus.lua + Script Author : Jabantiz + Script Date : 2014.07.03 06:07:51 + Script Purpose : + : +--]] + +local HuntingForTrapperBorgus = 98 + +function spawn(NPC) + SetPlayerProximityFunction(NPC, 20, "InRange") + ProvidesQuest(NPC, HuntingForTrapperBorgus) +end + +function respawn(NPC) + spawn(NPC) +end + +function InRange(NPC, Spawn) + if not HasQuest(Spawn, HuntingForTrapperBorgus) then + if HasCompletedQuest(Spawn, HuntingForTrapperBorgus) then + PlayFlavor(NPC, "voiceover/english/trapper_borgus/steppes/030_dwarf_trapper_borgus_aoi_callout_familiar_75373ef2.mp3", "Ah! There you are, I need yer help again!", "wave", 3299608738, 3594130452, Spawn) + else + PlayFlavor(NPC, "voiceover/english/trapper_borgus/steppes/030_dwarf_trapper_borgus_aoi_callout_unfamiliar_93226f1b.mp3", "Oh me achin' back! Give an old dwarf a hand?", "wince", 4014576750, 2294200697, Spawn) + end + end +end + +function hailed(NPC, Spawn) + FaceTarget(NPC, Spawn) + conversation = CreateConversation() + + if HasQuest(Spawn, HuntingForTrapperBorgus) then + -- Has the quest + if GetQuestStep(Spawn, HuntingForTrapperBorgus) == 1 then + -- Hasn't finished the quest yet + PlayFlavor(NPC, "voiceover/english/trapper_borgus/steppes/trapper_borgus003.mp3", "", "", 2061866687, 623475610, Spawn) + AddConversationOption(conversation, "No problem.") + StartConversation(conversation, NPC, Spawn, "That's not enough beasts to fill me bags! I need more Steppes beasts for my provisions!") + elseif GetQuestStep(Spawn, HuntingForTrapperBorgus) == 2 then + -- Finished and turning the quest in + SetStepComplete(Spawn, HuntingForTrapperBorgus, 2) + PlayFlavor(NPC, "voiceover/english/trapper_borgus/steppes/trapper_borgus004.mp3", "", "", 2882844739, 4151927708, Spawn) + AddConversationOption(conversation, "Sure.", "dlg_2_1") + AddConversationOption(conversation, "Not right now.") + StartConversation(conversation, NPC, Spawn, "That should do the trick! Thank yeh for the help! Think you might want to get some more?") + end + else + PlayFlavor(NPC, "voiceover/english/trapper_borgus/steppes/trapper_borgus001.mp3", "", "", 2091451215, 1918648250, Spawn) + AddConversationOption(conversation, "Yes, I'll help you.", "dlg_1_1") + AddConversationOption(conversation, "Sorry, I must get going.") + StartConversation(conversation, NPC, Spawn, "Me family sent me out for provisions, and I hurt me back lifting me pack! I come from a family o' miners n' boulder bashers, I would never hear the end of it! Can you help me kill enough beasts to get the provisions I need?") + end +end + +function dlg_1_1(NPC, Spawn) + OfferQuest(NPC, Spawn, HuntingForTrapperBorgus) +end + +function dlg_2_1(NPC, Spawn) + SetTempVariable(Spawn, "RepeatHuntingForTrapperBorgus", "true") + OfferQuest(NPC, Spawn, HuntingForTrapperBorgus) +end \ No newline at end of file diff --git a/server/SpawnScripts/ThunderingSteppes/TwoFace.lua b/server/SpawnScripts/ThunderingSteppes/TwoFace.lua new file mode 100644 index 000000000..910fec197 --- /dev/null +++ b/server/SpawnScripts/ThunderingSteppes/TwoFace.lua @@ -0,0 +1,86 @@ +--[[ +These are comments just like # and + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/server/Spells/AbsoluteZero.lua b/server/Spells/AbsoluteZero.lua new file mode 100644 index 000000000..150051c6e --- /dev/null +++ b/server/Spells/AbsoluteZero.lua @@ -0,0 +1,10 @@ +--[[ + Script Name : Spells/AbsoluteZero.lua + Script Author : neatz09 + Script Date : 2019.10.06 01:10:43 + Script Purpose : + : +--]] + +-- Info from spell_display_effects (remove from script when done) +-- Improves the duration of Chilling Armor by 1 seconds diff --git a/server/Spells/Accelerando.lua b/server/Spells/Accelerando.lua new file mode 100644 index 000000000..311c43bf2 --- /dev/null +++ b/server/Spells/Accelerando.lua @@ -0,0 +1,11 @@ +--[[ + Script Name : Spells/Accelerando.lua + Script Author : neatz09 + Script Date : 2019.10.06 02:10:18 + Script Purpose : + : +--]] + +-- Info from spell_display_effects (remove from script when done) +-- Increases Ability Reuse Speed of caster by 0.5% +-- Increases Ability Casting Speed of caster by 1.5% diff --git a/server/Spells/Adaptable.lua b/server/Spells/Adaptable.lua new file mode 100644 index 000000000..c8712a812 --- /dev/null +++ b/server/Spells/Adaptable.lua @@ -0,0 +1,10 @@ +--[[ + Script Name : Spells/Adaptable.lua + Script Author : neatz09 + Script Date : 2019.04.18 03:04:17 + Script Purpose : + : +--]] + +-- Info from spell_display_effects (remove from script when done) +-- Increases Mitigation of caster vs elemental damage by 0 diff --git a/server/Spells/AgileMovements.lua b/server/Spells/AgileMovements.lua new file mode 100644 index 000000000..b097f47a1 --- /dev/null +++ b/server/Spells/AgileMovements.lua @@ -0,0 +1,10 @@ +--[[ + Script Name : Spells/AgileMovements.lua + Script Author : neatz09 + Script Date : 2019.10.06 01:10:07 + Script Purpose : + : +--]] + +-- Info from spell_display_effects (remove from script when done) +-- Increases AGI of caster by 2.5 diff --git a/server/Spells/AllyRevivification.lua b/server/Spells/AllyRevivification.lua new file mode 100644 index 000000000..b7fce8e55 --- /dev/null +++ b/server/Spells/AllyRevivification.lua @@ -0,0 +1,10 @@ +--[[ + Script Name : Spells/AllyRevivification.lua + Script Author : neatz09 + Script Date : 2019.10.06 03:10:16 + Script Purpose : + : +--]] + +-- Info from spell_display_effects (remove from script when done) +-- Improves the reuse speed of in combat resurrection spells by 12 seconds. diff --git a/server/Spells/AuraofLeadership.lua b/server/Spells/AuraofLeadership.lua new file mode 100644 index 000000000..471c51165 --- /dev/null +++ b/server/Spells/AuraofLeadership.lua @@ -0,0 +1,14 @@ +--[[ + Script Name : Spells/AuraofLeadership.lua + Script Author : John Adams + Script Date : 2013.11.25 05:11:28 + Script Purpose : + : +--]] + +-- Info from spell_display_effects (remove from script when done) +-- Wards group members (AE) against 0 points of all damage + +function cast(Caster, Target, WardAmt) + AddWard(WardAmt) +end diff --git a/server/Spells/BindWound.lua b/server/Spells/BindWound.lua new file mode 100644 index 000000000..8ba104ce5 --- /dev/null +++ b/server/Spells/BindWound.lua @@ -0,0 +1,15 @@ +--[[ + Script Name : Spells/BindWound.lua + Script Author : neatz09 + Script Date : 2019.10.08 03:10:54 + Script Purpose : + : +--]] + +-- Info from spell_display_effects (remove from script when done) +-- Heals caster for 100.0% of max health +-- This effect cannot be critically applied. +-- On a melee hit this spell will cast Invigorated on target. Lasts for 20.0 seconds. +-- Combat arts deal 10% additional damage. +-- Grants a total of 1 trigger of the spell. +-- This effect cannot be cast during combat diff --git a/server/Spells/Commoner/ABasicFirework.lua b/server/Spells/Commoner/ABasicFirework.lua new file mode 100644 index 000000000..bf7fc28eb --- /dev/null +++ b/server/Spells/Commoner/ABasicFirework.lua @@ -0,0 +1,14 @@ +--[[ + Script Name : Spells/Commoner/ABasicFirework.lua + Script Author : neatz09 + Script Date : 2019.08.18 09:08:57 + Script Purpose : + : +--]] + +-- Info from spell_display_effects (remove from script when done) +-- Applies Basic Firework when Activated. Lasts for 3.0 seconds. + +function cast(Caster, Target) + +end diff --git a/server/Spells/Commoner/AFancyFirework.lua b/server/Spells/Commoner/AFancyFirework.lua new file mode 100644 index 000000000..5c0502833 --- /dev/null +++ b/server/Spells/Commoner/AFancyFirework.lua @@ -0,0 +1,13 @@ +--[[ + Script Name : Spells/Commoner/AFancyFirework.lua + Script Author : neatz09 + Script Date : 2019.08.18 09:08:59 + Script Purpose : + : +--]] + +-- Applies Basic Firework when Activated. Lasts for 3.0 seconds. + +function cast(Caster, Target) + +end diff --git a/server/Spells/Commoner/BetaCarpet.lua b/server/Spells/Commoner/BetaCarpet.lua new file mode 100644 index 000000000..9a6060b27 --- /dev/null +++ b/server/Spells/Commoner/BetaCarpet.lua @@ -0,0 +1,25 @@ +--[[ + Script Name : Spells/Commoner/BetaCarpet.lua + Script Purpose : Spawns mounts of {model_id}, {color} and {speed} + Script Author : John Adams / LethalEncounter + Script Date : 2009.03.28 + Script Notes : JA: Color and Speed params are optional? +--]] + +function cast(Caster, Target, MountID, MountRed, MountGreen, MountBlue, SaddleRed, SaddleGreen, SaddleBlue, MountSpeed) + + if MountID ~= nil then + SetMount(Caster, MountID) + if MountRed ~= nil then + SetMountColor(Caster, MountRed, MountGreen, MountBlue, SaddleRed, SaddleGreen, SaddleBlue) + end + if MountSpeed ~= nil then + SetSpeed(Caster, MountSpeed) + end + end -- missing me +end + +function remove(Caster, Target) + SetMount(Caster, 0) + SetSpeed(Caster, 0) +end diff --git a/server/Spells/Commoner/BetaDamage.lua b/server/Spells/Commoner/BetaDamage.lua new file mode 100644 index 000000000..6d2f4d3a7 --- /dev/null +++ b/server/Spells/Commoner/BetaDamage.lua @@ -0,0 +1,55 @@ +--[[ + Script Name : Spells/Commoner/BetaDamage.lua + Script Purpose : Generic damage + 1 effect script + Script Author : John Adams + Script Date : 2008.12.02 +--]] + +function cast(Caster, Target, DDType, MinDDVal, MaxDDVal, EffectType, DamageType, MinEffectVal, MaxEffectVal) + + -- DD component + if MaxDDVal ~= nil and MinDDVal < MaxDDVal then + dmgAmount = math.random(MinDDVal, MaxDDVal) + SpellDamage(Target, DDType, dmgAmount) + --AddHate(Caster, Target, dmgAmount) + else + SpellDamage(Target, DDType, MinDDVal) + --AddHate(Caster, Target, MinDDVal) + end + + -- Effect component - only process this code if there is an EffectType param + if EffectType ~= nil then + + -- Determine if there is a range to effect values + if MaxEffectVal ~= nil and MinEffectVal < MaxEffectVal then + EffectValue = math.random(MinEffectVal, MaxEffectVal) + else + EffectValue = MinEffectVal + end + + -- Determine EffectType - either a DamageType or a String value passed as param 4 + if EffectType == "heal" then + ModifyHP(Caster, EffectValue) + else + SpellDamage(Target, DamageType, EffectValue) + end + + end + +end + +function tick(Caster, Target, DDType, MinDDVal, MaxDDVal, EffectType, DamageType, MinEffectVal, MaxEffectVal) + + if MaxEffectVal ~= nil and MinEffectVal < MaxEffectVal then + EffectValue = math.random(MinEffectVal, MaxEffectVal) + else + EffectValue = MinEffectVal + end + + if EffectType == "heal" then + ModifyHP(Caster, EffectValue) + else + SpellDamage(Target, DamageType, EffectValue) + end + +end diff --git a/server/Spells/Commoner/BetaGriffon.lua b/server/Spells/Commoner/BetaGriffon.lua new file mode 100644 index 000000000..c485f5336 --- /dev/null +++ b/server/Spells/Commoner/BetaGriffon.lua @@ -0,0 +1,25 @@ +--[[ + Script Name : Spells/Commoner/BetaGriffon.lua + Script Author : John Adams + Script Date : 2010.03.31 05:03:52 + Script Notes : + : +--]] + +function cast(Caster, Target, MountID, MountRed, MountGreen, MountBlue, SaddleRed, SaddleGreen, SaddleBlue, MountSpeed) + + if MountID ~= nil then + SetMount(Caster, MountID) + if MountRed ~= nil then + SetMountColor(Caster, MountRed, MountGreen, MountBlue, SaddleRed, SaddleGreen, SaddleBlue) + end + if MountSpeed ~= nil then + SetSpeed(Caster, MountSpeed) + end + end -- missing me +end + +function remove(Caster, Target) + SetMount(Caster, 0) + SetSpeed(Caster, 0) +end diff --git a/server/Spells/Commoner/BetaHeal.lua b/server/Spells/Commoner/BetaHeal.lua new file mode 100644 index 000000000..5e041c591 --- /dev/null +++ b/server/Spells/Commoner/BetaHeal.lua @@ -0,0 +1,40 @@ +--[[ + Script Name : Spells/Commoner/BetaHeal.lua + Script Purpose : Fast / High healing for Beta testers + Script Author : John Adams + Script Date : 2008.12.03 + Script Note : This heal has an instand heal + HoT +--]] + +function cast(Caster, Target, HealType, HealMinVal, HealMaxVal, EffectType, EffectMinVal, EffectMaxVal) + if HealType == "complete" then + ModifyHP(Target, GetMaxHP(Target)) + else + if HealMaxVal ~= nil and HealMinVal < HealMaxVal then + ModifyHP(Target, math.random(HealMinVal, HealMaxVal)) + else + ModifyHP(Target, HealMinVal) + end + end + if EffectType ~= nil then + if EffectType == "hot" then + if EffectMaxVal ~= nil and EffectMinVal < EffectMaxVal then + ModifyHP(Target, math.random(EffectMinVal, EffectMaxVal)) + else + ModifyHP(Target, EffectMinVal) + end + end + end +end + +function tick(Caster, Target, HealType, HealMinVal, HealMaxVal, EffectType, EffectMinVal, EffectMaxVal) + if EffectType ~= nil then + if EffectType == "hot" then + if EffectMaxVal ~= nil and EffectMinVal < EffectMaxVal then + ModifyHP(Target, math.random(EffectMinVal, EffectMaxVal)) + else + ModifyHP(Target, EffectMinVal) + end + end + end +end diff --git a/server/Spells/Commoner/BetaMount.lua b/server/Spells/Commoner/BetaMount.lua new file mode 100644 index 000000000..ec8c93cdf --- /dev/null +++ b/server/Spells/Commoner/BetaMount.lua @@ -0,0 +1,25 @@ +--[[ + Script Name : Spells/Commoner/BetaMount.lua + Script Purpose : Spawns mounts of {model_id}, {color} and {speed} + Script Author : John Adams / LethalEncounter + Script Date : 2009.03.28 + Script Notes : JA: Color and Speed params are optional? +--]] + +function cast(Caster, Target, MountID, MountRed, MountGreen, MountBlue, SaddleRed, SaddleGreen, SaddleBlue, MountSpeed) + + if MountID ~= nil then + SetMount(Caster, MountID) + if MountRed ~= nil then + SetMountColor(Caster, MountRed, MountGreen, MountBlue, SaddleRed, SaddleGreen, SaddleBlue) + end + if MountSpeed ~= nil then + SetSpeed(Caster, MountSpeed) + end + end -- missing me +end + +function remove(Caster, Target) + SetMount(Caster, 0) + SetSpeed(Caster, 0) +end diff --git a/server/Spells/Commoner/BindWound.lua b/server/Spells/Commoner/BindWound.lua new file mode 100644 index 000000000..2700a1e1f --- /dev/null +++ b/server/Spells/Commoner/BindWound.lua @@ -0,0 +1,13 @@ +--[[ + Script Name : Spells/Commoner/BindWound.lua + Script Author : neatz09 + Script Date : 2019.10.08 03:10:43 + Script Purpose : + : +--]] + +-- Info from spell_display_effects (remove from script when done) +-- Heals caster for 25.0% of max health +-- This effect cannot be critically applied. +-- This effect cannot be cast during combat +-- Must not be engaged in combat diff --git a/server/Spells/Commoner/BoombasPickles.lua b/server/Spells/Commoner/BoombasPickles.lua new file mode 100644 index 000000000..fa7dff4a6 --- /dev/null +++ b/server/Spells/Commoner/BoombasPickles.lua @@ -0,0 +1,18 @@ +--[[ + Script Name : Spells/Commoner/BoomasPickles.lua + Script Author : neatz09 + Script Date : 2019.08.19 12:08:40 + Script Purpose : + : +--]] + + +function cast(Caster, Target, Bonus) +-- Increases Out-of-Combat Health Regeneration of target by 4.0 +AddSpellBonus(Target, 602, Bonus) + +end + +function remove(Caster, Target, Bonus) + RemoveSpellBonus(Target) +end \ No newline at end of file diff --git a/server/Spells/Commoner/CalltoHome.lua b/server/Spells/Commoner/CalltoHome.lua new file mode 100644 index 000000000..4e6135b37 --- /dev/null +++ b/server/Spells/Commoner/CalltoHome.lua @@ -0,0 +1,20 @@ +--[[ + Script Name : Spells/Commoner/CalltoHome.lua + Script Author : neatz09 + Script Date : 2019.04.08 12:04:04 + Script Purpose : + : +--]] + +-- Teleports you to your recall point. +function precast(Caster, Target) + if GetBoundZoneID(Caster) == 0 then + return false + end + + return true +end + +function cast(Caster, Target) + Gate(Caster) +end diff --git a/server/Spells/Commoner/Destroying.lua b/server/Spells/Commoner/Destroying.lua new file mode 100644 index 000000000..b8096e8a7 --- /dev/null +++ b/server/Spells/Commoner/Destroying.lua @@ -0,0 +1,14 @@ +--[[ + Script Name : Spells/Commoner/Destroying.lua + Script Author : John Adams + Script Date : 2013.11.22 10:11:31 + Script Purpose : + : +--]] + +-- Info from spell_display_effects (remove from script when done) +-- Must not be targeted by an enemy + +function cast(Caster, Target) + Say(Caster, "Destroying not implemented yet") +end diff --git a/server/Spells/Commoner/DrawUponHeart.lua b/server/Spells/Commoner/DrawUponHeart.lua new file mode 100644 index 000000000..f4963008b --- /dev/null +++ b/server/Spells/Commoner/DrawUponHeart.lua @@ -0,0 +1,19 @@ +--[[ + Script Name : Spells/Commoner/DrawUponHeart.lua + Script Author : neatz09 + Script Date : 2019.10.16 03:10:49 + Script Purpose : + : +--]] + + + +function cast(Caster, Target, pctHealMin, pctHealMax) +SpellHeal("Power", GetPCTOfPower(Caster, pctHealMin), GetPCTOfPower(Caster, pctHealMax), Caster, 2) +end + +function tick(Caster, Target, pctHealMin, pctHealMax) +SpellHeal("Power", GetPCTOfPower(Caster, pctHealMin), GetPCTOfPower(Caster, pctHealMax), Caster, 2) +end + + diff --git a/server/Spells/Commoner/DrawuponEssence.lua b/server/Spells/Commoner/DrawuponEssence.lua new file mode 100644 index 000000000..59889ce6b --- /dev/null +++ b/server/Spells/Commoner/DrawuponEssence.lua @@ -0,0 +1,14 @@ +--[[ + Script Name : Spells/Commoner/DrawuponEssence.lua + Script Author : neatz09 + Script Date : 2019.10.17 08:10:18 + Script Purpose : + : +--]] + +-- Info from spell_display_effects (remove from script when done) +-- Increases power of caster by 4.6 - 5.6% +function cast(Caster, Target, pctHealMin, pctHealMax) +SpellHeal("Power", GetPCTOfPower(Caster, pctHealMin), GetPCTOfPower(Caster, pctHealMax), Caster, 2) +end + diff --git a/server/Spells/Commoner/FireworkRosePetalShower.lua b/server/Spells/Commoner/FireworkRosePetalShower.lua new file mode 100644 index 000000000..a277beefb --- /dev/null +++ b/server/Spells/Commoner/FireworkRosePetalShower.lua @@ -0,0 +1,14 @@ +--[[ + Script Name : Spells/Commoner/FireworkSwirlingSnowflakes.lua + Script Author : neatz09 + Script Date : 2019.08.18 10:08:21 + Script Purpose : + : +--]] + +function cast(Caster, Target) + +end + +-- Info from spell_display_effects (remove from script when done) +-- Applies Basic Firework when Activated. Lasts for 3.0 seconds. diff --git a/server/Spells/Commoner/FireworkSwirlingSnowflakes.lua b/server/Spells/Commoner/FireworkSwirlingSnowflakes.lua new file mode 100644 index 000000000..3f547484a --- /dev/null +++ b/server/Spells/Commoner/FireworkSwirlingSnowflakes.lua @@ -0,0 +1,14 @@ +--[[ + Script Name : Spells/Commoner/FireworkSwirlingSnowflakes.lua + Script Author : neatz09 + Script Date : 2019.08.18 10:08:37 + Script Purpose : + : +--]] + +function cast(Caster, Target) + +end + +-- Info from spell_display_effects (remove from script when done) +-- Applies Basic Firework when Activated. Lasts for 3.0 seconds. diff --git a/server/Spells/Commoner/GigglegibberGiggleGiver.lua b/server/Spells/Commoner/GigglegibberGiggleGiver.lua new file mode 100644 index 000000000..95e80a2c2 --- /dev/null +++ b/server/Spells/Commoner/GigglegibberGiggleGiver.lua @@ -0,0 +1,10 @@ +--[[ + Script Name : Spells/Commoner/GigglegibberGiggleGiver.lua + Script Author : neatz09 + Script Date : 2019.08.21 04:08:50 + Script Purpose : + : +--]] + +-- Info from spell_display_effects (remove from script when done) +-- Applies Gigglegibber Giggle Giver when Activated. diff --git a/server/Spells/Commoner/HolySteed.lua b/server/Spells/Commoner/HolySteed.lua new file mode 100644 index 000000000..b9ea9e860 --- /dev/null +++ b/server/Spells/Commoner/HolySteed.lua @@ -0,0 +1,22 @@ +--[[ + Script Name : Spells/Commoner/HolySteed.lua + Script Author : Jabantiz + Script Date : 2014.05.31 07:05:18 + Script Purpose : + : +--]] + +-- Info from spell_display_effects (remove from script when done) +-- Summons a mount to ride +-- Increases your ground speed by 130% + +function cast(Caster, Target, Mount) + -- Test for aerakyn + SetMount(Caster, 17509) + AddControlEffect(Caster, 12) +end + +function remove(Caster, Target) + SetMount(Caster, 0) + RemoveControlEffect(Caster, 12) +end \ No newline at end of file diff --git a/server/Spells/Commoner/Hover.lua b/server/Spells/Commoner/Hover.lua new file mode 100644 index 000000000..140b04470 --- /dev/null +++ b/server/Spells/Commoner/Hover.lua @@ -0,0 +1,11 @@ +--[[ + Script Name : Spells/Commoner/Hover.lua + Script Author : neatz09 + Script Date : 2019.10.12 11:10:29 + Script Purpose : + : +--]] + +-- Info from spell_display_effects (remove from script when done) +-- Reduces maximum falling speed of caster +-- You cannot use this spell while riding on a mount. diff --git a/server/Spells/Commoner/Knockdown.lua b/server/Spells/Commoner/Knockdown.lua new file mode 100644 index 000000000..ec5965d64 --- /dev/null +++ b/server/Spells/Commoner/Knockdown.lua @@ -0,0 +1,23 @@ +--[[ + Script Name : Spells/Commoner/Knockdown.lua + Script Author : John Adams + Script Date : 2013.11.22 01:11:34 + Script Purpose : Apply Knockdown + : +--]] + +function cast(Caster, Target) + + --Throws target back + --Stuns target + AddControlEffect(Target, 4) + + --Blurs vision of target (to do) + + --Except Epic + +end + +function remove(Caster, Target) + RemoveControlEffect(Target, 4) +end diff --git a/server/Spells/Commoner/MoleratTest.lua b/server/Spells/Commoner/MoleratTest.lua new file mode 100644 index 000000000..129023084 --- /dev/null +++ b/server/Spells/Commoner/MoleratTest.lua @@ -0,0 +1,19 @@ +--[[ + Script Name : Spells/Commoner/MoleratTest.lua + Script Author : neatz09 + Script Date : 2019.08.29 01:08:30 + Script Purpose : + : +--]] + + +function cast(Caster, Target) + SummonPet(Caster, 2780089) +CallCliffdiverHawk(NPC, Spawn) + local CliffdiverHawk = GetSpawn(NPC, 2780089) + + if CliffdiverHawk ~= nil then + AddTimer(CliffdiverHawk, 5000, "FlyToMoleRat", 1, Spawn) + end + +end diff --git a/server/Spells/Commoner/Multitalented.lua b/server/Spells/Commoner/Multitalented.lua new file mode 100644 index 000000000..325d99444 --- /dev/null +++ b/server/Spells/Commoner/Multitalented.lua @@ -0,0 +1,21 @@ +--[[ + Script Name : Spells/Commoner/Multitalented.lua + Script Author : John + Script Date : 2012.07.07 12:07:31 + Script Notes : Reduces harvesting time by 0.5 seconds (Passive) + : +--]] + +function cast(Caster, Target, Defense) + -- testing Jabantiz' passive spells + AddSkillBonus(Target, 609880714, Defense) -- Defense +end + +function tick(Caster, Target, Type, Min, Max) + -- code to process each call_frequency (tick) set in spell_tiers +end + +function remove(Caster, Target, Type, Min, Max) + -- code to remove the spell +end + diff --git a/server/Spells/Commoner/NormalDrink.lua b/server/Spells/Commoner/NormalDrink.lua new file mode 100644 index 000000000..7c621b251 --- /dev/null +++ b/server/Spells/Commoner/NormalDrink.lua @@ -0,0 +1,15 @@ +--[[ + Script Name : Spells/Commoner/NormalDrink.lua + Script Purpose : Apply drink buffs + Script Author : Zcoretri + Script Date : 2013.04.11 + Script Notes : +--]] + +function cast(Caster, Target, Bonus) + AddSpellBonus(Target, 601, Bonus) +end + +function remove(Caster, Target, Bonus) + RemoveSpellBonus(Target) +end \ No newline at end of file diff --git a/server/Spells/Commoner/NormalMeal.lua b/server/Spells/Commoner/NormalMeal.lua new file mode 100644 index 000000000..c44304e50 --- /dev/null +++ b/server/Spells/Commoner/NormalMeal.lua @@ -0,0 +1,15 @@ +--[[ + Script Name : Spells/Commoner/NormalMeal.lua + Script Purpose : Apply food buffs + Script Author : Zcoretri + Script Date : 2013.04.11 + Script Notes : +--]] + +function cast(Caster, Target, Bonus) + AddSpellBonus(Target, 600, Bonus) +end + +function remove(Caster, Target, Bonus) + RemoveSpellBonus(Target) +end \ No newline at end of file diff --git a/server/Spells/Commoner/Pathfinding.lua b/server/Spells/Commoner/Pathfinding.lua new file mode 100644 index 000000000..7eebd5db2 --- /dev/null +++ b/server/Spells/Commoner/Pathfinding.lua @@ -0,0 +1,18 @@ +--[[ + Script Name : Spells/Commoner/Pathfinding.lua + Script Author : John Adams + Script Date : 2013.11.22 10:11:43 + Script Purpose : + : +--]] + +-- Info from spell_display_effects (remove from script when done) +-- Increases speed of group members (AE) by 16.0% + +function cast(Caster, Target, BuffValue) + AddSpellBonus(Target, 609, BuffValue) +end + +function remove(Caster, Target, BuffValue) + RemoveSpellBonus(Target) +end diff --git a/server/Spells/Commoner/Pets.lua b/server/Spells/Commoner/Pets.lua new file mode 100644 index 000000000..5b26cd2ba --- /dev/null +++ b/server/Spells/Commoner/Pets.lua @@ -0,0 +1,19 @@ +--[[ + Script Name : Spells/Commoner/Pets.lua + Script Author : John Adams + Script Date : 2013.11.20 06:11:19 + Script Purpose : + : +--]] + +function cast(Caster, Target, PetID, MaxLevel) + -- Summons a pet + SummonPet(Caster, PetID, MaxLevel) +end + +function remove(Caster, Target) + pet = GetPet(Caster) + if pet ~= nil then + DismissPet(pet) + end +end diff --git a/server/Spells/Commoner/Refine.lua b/server/Spells/Commoner/Refine.lua new file mode 100644 index 000000000..464540eff --- /dev/null +++ b/server/Spells/Commoner/Refine.lua @@ -0,0 +1,10 @@ +--[[ + Script Name : Spells/Commoner/Refine.lua + Script Author : neatz09 + Script Date : 2019.10.06 01:10:39 + Script Purpose : JA Test Write - remove me + : +--]] + +-- Info from spell_display_effects (remove from script when done) +-- Cannot be modified except by direct means diff --git a/server/Spells/Commoner/Salvage.lua b/server/Spells/Commoner/Salvage.lua new file mode 100644 index 000000000..210647b3c --- /dev/null +++ b/server/Spells/Commoner/Salvage.lua @@ -0,0 +1,10 @@ +--[[ + Script Name : Spells/Commoner/Salvage.lua + Script Author : neatz09 + Script Date : 2019.10.06 01:10:56 + Script Purpose : + : +--]] + +-- Info from spell_display_effects (remove from script when done) +-- Cannot be modified except by direct means diff --git a/server/Spells/Commoner/SetRecallPoint.lua b/server/Spells/Commoner/SetRecallPoint.lua new file mode 100644 index 000000000..124220144 --- /dev/null +++ b/server/Spells/Commoner/SetRecallPoint.lua @@ -0,0 +1,16 @@ +--[[ + Script Name : Spells/Commoner/SetRecallPoint.lua + Script Author : neatz09 + Script Date : 2019.10.12 09:10:20 + Script Purpose : + : +--]] + +-- Info from spell_display_effects (remove from script when done) +-- This effect cannot be cast during combat + +function cast(Caster, Target) + Bind(Caster) + Say(Caster, "No Check setup for allowed binds yet") + +end diff --git a/server/Spells/Commoner/Sprint.lua b/server/Spells/Commoner/Sprint.lua new file mode 100644 index 000000000..c0ac3163f --- /dev/null +++ b/server/Spells/Commoner/Sprint.lua @@ -0,0 +1,63 @@ +--[[ + Script Name : Spells/Commoner/Sprint.lua + Script Purpose : Sprint + Script Author : theFoof + Script Date : 2014.3.9 + Script Note : +--]] + +function cast(Caster, Target, Speed, is_tick) + local has_moved = SprinterHasMoved(Caster, is_tick) + if not has_moved and GetTempVariable(Caster, "sprint_bonus_active") == "true" then + return + end + + local power_left = GetPower(Caster) + local total_power = GetMaxPower(Caster) + if power_left - (total_power * .1) < 0 then + if GetTempVariable(Caster, "sprint_bonus_active") == "true" then + RemoveSpellBonus() + SetTempVariable(Caster, "sprint_bonus_active", nil) + end + else + if is_tick == true then + ModifyPower(Caster, -1 * (total_power * .1)) + end + if GetTempVariable(Caster, "sprint_bonus_active") ~= "true" then + AddSpellBonus(Caster, 609, Speed) + end + SetTempVariable(Caster, "sprint_bonus_active", "true") + SetTempVariable(Caster, "sprint_bonus_x", GetX(Caster) .. "") + SetTempVariable(Caster, "sprint_bonus_y", GetY(Caster) .. "") + SetTempVariable(Caster, "sprint_bonus_z", GetZ(Caster) .. "") + end +end + +function SprinterHasMoved(Caster, is_tick) + if is_tick ~= true then + return true + end + + local ret = false + + if GetTempVariable(Caster, "sprint_bonus_x") ~= GetX(Caster) .. "" then + ret = true + elseif GetTempVariable(Caster, "sprint_bonus_y") ~= GetY(Caster) .. "" then + ret = true + elseif GetTempVariable(Caster, "sprint_bonus_z") ~= GetZ(Caster) .. "" then + ret = true + end + return ret +end + +function tick(Caster, Target, Speed) + cast(Caster, Target, Speed, true) +end + +function remove(Caster) + RemoveSpellBonus() + SetTempVariable(Caster, "sprint_bonus_active", nil) + SetTempVariable(Caster, "sprint_bonus_x", nil) + SetTempVariable(Caster, "sprint_bonus_y", nil) + SetTempVariable(Caster, "sprint_bonus_z", nil) +end \ No newline at end of file diff --git a/server/Spells/Commoner/StunsporeParalysis.lua b/server/Spells/Commoner/StunsporeParalysis.lua new file mode 100644 index 000000000..5d81e5bed --- /dev/null +++ b/server/Spells/Commoner/StunsporeParalysis.lua @@ -0,0 +1,15 @@ +--[[ + Script Name : Spells/Commoner/StunsporeParalysis.lua + Script Author : Cynnar + Script Date : 2017.12.16 12:12:10 + Script Purpose : For use with quest "Dust to Dust" + : +--]] + +function cast(Caster, Target) + AddControlEffect(Target, 4) +end + +function remove(Caster, Target) + RemoveControlEffect(Target, 4) +end \ No newline at end of file diff --git a/server/Spells/Commoner/SummonGazerPet.lua b/server/Spells/Commoner/SummonGazerPet.lua new file mode 100644 index 000000000..e69bc01d0 --- /dev/null +++ b/server/Spells/Commoner/SummonGazerPet.lua @@ -0,0 +1,19 @@ +--[[ + Script Name : Spells/Commoner/SummonGazerPet.lua + Script Author : neatz09 + Script Date : 2019.09.09 12:09:03 + Script Purpose : + : +--]] + +function cast(Caster, Target) + SummonCosmeticPet(Caster, 880161) + +end + +function remove(Caster, Target) + pet = GetCosmeticPet(Caster) + if pet ~= nil then + DismissPet(pet) + end +end \ No newline at end of file diff --git a/server/Spells/Commoner/SummonMount.lua b/server/Spells/Commoner/SummonMount.lua new file mode 100644 index 000000000..d135f0530 --- /dev/null +++ b/server/Spells/Commoner/SummonMount.lua @@ -0,0 +1,23 @@ +--[[ + Script Name : Spells/Commoner/SummonMount.lua + Script Author : TyroneSWG + Script Date : 2019.01.16 03:01:40 + Script Purpose : mounting test + : +--]] + +--local mount_favorites = { '25423', '24053', '25864', '23713', '15397', '20950', '20344', '17509' } +function cast(Caster, Target) + + SendMessage(Caster, "Mounting...", "red") + SetMount(Caster, 10441) + --SetMount(Caster, mount_favorites[ math.random( 1, #mount_favorites - 1 ) ] ) +PlaySound(Caster, "sounds/test/level_up.wav", GetX(Caster), GetY(Caster), GetZ(Caster)) + SetSpeed(Caster, 100) +end + +function remove(Caster, Target) + SetMount(Caster, 0) + SetSpeed(Caster, 1) +end + diff --git a/server/Spells/Commoner/SummonaBitterGingerdreadPet.lua b/server/Spells/Commoner/SummonaBitterGingerdreadPet.lua new file mode 100644 index 000000000..9a00ad42a --- /dev/null +++ b/server/Spells/Commoner/SummonaBitterGingerdreadPet.lua @@ -0,0 +1,18 @@ +--[[ + Script Name : Spells/Commoner/SummonaBitterGingerdreadPet.lua + Script Author : TyroneSWG + Script Date : 2019.01.16 02:01:04 + Script Purpose : + : +--]] +function cast(Caster, Target) + SummonCosmeticPet(Caster, 20314) + +end + +function remove(Caster, Target) + pet = GetCosmeticPet(Caster) + if pet ~= nil then + DismissPet(pet) + end +end \ No newline at end of file diff --git a/server/Spells/Commoner/TouchoftheGray.lua b/server/Spells/Commoner/TouchoftheGray.lua new file mode 100644 index 000000000..55679bb27 --- /dev/null +++ b/server/Spells/Commoner/TouchoftheGray.lua @@ -0,0 +1,20 @@ +--[[ + Script Name : Spells/Commoner/TouchoftheGray.lua + Script Author : John Adams + Script Date : 2013.11.19 09:11:23 + Script Purpose : + : +--]] +--local mount_favorites = { '25423', '24053', '25864', '23713', '15397', '20950', '20344', '17509' } +function cast(Caster, Target) + + SendMessage(Caster, "Mounting...", "red") + --SetMount(Caster, mount_favorites[ math.random( 1, #mount_favorites - 1 ) ] ) + setMount(Caster, 25864) + +end + +function remove(Caster, Target) + SetMount(Caster, 0) +end + diff --git a/server/Spells/Commoner/Tracking.lua b/server/Spells/Commoner/Tracking.lua new file mode 100644 index 000000000..84247a47d --- /dev/null +++ b/server/Spells/Commoner/Tracking.lua @@ -0,0 +1,14 @@ +--[[ + Script Name : Spells/Commoner/Tracking.lua + Script Author : John Adams + Script Date : 2013.11.22 09:11:05 + Script Purpose : + : +--]] + +-- Info from spell_display_effects (remove from script when done) +-- Tracks a selected target, causing a trail to appear that leads to their location. + +function cast(Caster, Target) + ToggleTracking(Caster) +end diff --git a/server/Spells/Commoner/Transmute.lua b/server/Spells/Commoner/Transmute.lua new file mode 100644 index 000000000..3f14ce7fd --- /dev/null +++ b/server/Spells/Commoner/Transmute.lua @@ -0,0 +1,12 @@ +--[[ + Script Name : Spells/Commoner/Transmute.lua + Script Author : John Adams + Script Date : 2013.11.22 10:11:04 + Script Purpose : + : +--]] + + +function cast(Caster, Target) + +end diff --git a/server/Spells/Commoner/flaskofwater.lua b/server/Spells/Commoner/flaskofwater.lua new file mode 100644 index 000000000..3b070f588 --- /dev/null +++ b/server/Spells/Commoner/flaskofwater.lua @@ -0,0 +1,17 @@ +--[[ + Script Name : Spells/Commoner/flaskofwater.lua + Script Author : neatz09 + Script Date : 2019.08.18 10:08:43 + Script Purpose : + : +--]] + +function cast(Caster, Target, Bonus) +-- Increases Out-of-Combat Power Regeneration of target by 15.0 +AddSpellBonus(Target, 603, Bonus) + +end + +function remove(Caster, Target, Bonus) + RemoveSpellBonus(Target) +end \ No newline at end of file diff --git a/server/Spells/Commoner/harvest.lua b/server/Spells/Commoner/harvest.lua new file mode 100644 index 000000000..b31c96374 --- /dev/null +++ b/server/Spells/Commoner/harvest.lua @@ -0,0 +1,19 @@ +--[[ + Script Name : harvest.lua + Script Purpose : Fishing, Foresting, Gathering/Collecting, Mining, Trapping + Script Author : John Adams + Script Date : 2008.12.05 + Script Notes : +--]] + +function precast(Caster, Target) + if IsGroundSpawn(Target) then + return CanHarvest(Caster, Target) + end + + return false +end + +function cast(Caster, Target) + Harvest(Caster, Target) +end diff --git a/server/Spells/Commoner/ration.lua b/server/Spells/Commoner/ration.lua new file mode 100644 index 000000000..d5661a81f --- /dev/null +++ b/server/Spells/Commoner/ration.lua @@ -0,0 +1,18 @@ +--[[ + Script Name : Spells/Commoner/ration.lua + Script Author : neatz09 + Script Date : 2019.08.19 12:08:40 + Script Purpose : + : +--]] + + +function cast(Caster, Target, Bonus) +-- Increases Out-of-Combat Health Regeneration of target by 4.0 +AddSpellBonus(Target, 602, Bonus) + +end + +function remove(Caster, Target, Bonus) + RemoveSpellBonus(Target) +end \ No newline at end of file diff --git a/server/Spells/Fighter/Brawler/Bruiser/Abuse.lua b/server/Spells/Fighter/Brawler/Bruiser/Abuse.lua new file mode 100644 index 000000000..7873c7238 --- /dev/null +++ b/server/Spells/Fighter/Brawler/Bruiser/Abuse.lua @@ -0,0 +1,20 @@ +--[[ + Script Name : Spells/Fighter/Brawler/Bruiser/Abuse.lua + Script Author : Dello + Script Date : 25/06/2014 + Script Purpose : + : +--]] + +function cast(Caster, Target, MinVal, MaxVal) + -- Increases Threat to target by 355 - 434 + if MaxVal ~= nil and MinVal < MaxVal then + AddHate(Caster, Target, math.random(MinVal, MaxVal), 1) + else + AddHate(Caster, Target, MinVal, 1) + end + + if target ~= nil then + Interrupt(Caster, Target) + end +end diff --git a/server/Spells/Fighter/Brawler/Bruiser/Beatdown.lua b/server/Spells/Fighter/Brawler/Bruiser/Beatdown.lua new file mode 100644 index 000000000..e9f54d4f0 --- /dev/null +++ b/server/Spells/Fighter/Brawler/Bruiser/Beatdown.lua @@ -0,0 +1,15 @@ +--[[ + Script Name : Spells/Fighter/Brawler/Bruiser/Beatdown.lua + Script Author : Jabantiz + Script Date : 2014.03.10 10:03:03 + Script Purpose : + : +--]] + +function cast(Caster, Target, DmgType, MinVal, MaxVal) + if MaxVal ~= nil and MinVal < MaxVal then + SpellDamage(Target, DmgType, math.random(MinVal, MaxVal)) + else + SpellDamage(Target, DmgType, MinVal) + end +end diff --git a/server/Spells/Fighter/Brawler/Bruiser/BlazeKick.lua b/server/Spells/Fighter/Brawler/Bruiser/BlazeKick.lua new file mode 100644 index 000000000..0668418c2 --- /dev/null +++ b/server/Spells/Fighter/Brawler/Bruiser/BlazeKick.lua @@ -0,0 +1,21 @@ +--[[ + Script Name : Spells/Fighter/Brawler/Bruiser/BlazeKick.lua + Script Author : Jabantiz + Script Date : 2014.03.11 05:03:14 + Script Purpose : + : +--]] + +function cast(Caster, Target, DmgType, MinVal, MaxVal, TickDmgType, TickDmg) + -- Inflicts 40 - 67 melee damage on target + if MaxVal ~= nil and MinVal < MaxVal then + SpellDamage(Target, DmgType, math.random(MinVal, MaxVal)) + else + SpellDamage(Target, DmgType, MinVal) + end +end + +function tick(Caster, Target, DmgType, MinVal, MaxVal, TickDmgType, TickDmg) + -- Inflicts 18 heat damage on target every 6 seconds + SpellDamage(Target, TickDmgType, TickDmg) +end diff --git a/server/Spells/Fighter/Brawler/Bruiser/BlazingStrikes.lua b/server/Spells/Fighter/Brawler/Bruiser/BlazingStrikes.lua new file mode 100644 index 000000000..d1d72cadb --- /dev/null +++ b/server/Spells/Fighter/Brawler/Bruiser/BlazingStrikes.lua @@ -0,0 +1,55 @@ +--[[ + Script Name : dd_dot.lua + Script Purpose : Generic damage + 1 effect script + Script Author : John Adams + Script Date : 2008.12.02 +--]] + +function cast(Caster, Target, DDType, MinDDVal, MaxDDVal, EffectType, DamageType, MinEffectVal, MaxEffectVal) + + -- DD component + if MaxDDVal ~= nil and MinDDVal < MaxDDVal then + dmgAmount = math.random(MinDDVal, MaxDDVal) + SpellDamage(Target, DDType, dmgAmount) + --AddHate(Caster, Target, dmgAmount) + else + SpellDamage(Target, DDType, MinDDVal) + --AddHate(Caster, Target, MinDDVal) + end + + -- Effect component - only process this code if there is an EffectType param + if EffectType ~= nil then + + -- Determine if there is a range to effect values + if MaxEffectVal ~= nil and MinEffectVal < MaxEffectVal then + EffectValue = math.random(MinEffectVal, MaxEffectVal) + else + EffectValue = MinEffectVal + end + + -- Determine EffectType - either a DamageType or a String value passed as param 4 + if EffectType == "heal" then + ModifyHP(Caster, EffectValue) + else + SpellDamage(Target, DamageType, EffectValue) + end + + end + +end + +function tick(Caster, Target, DDType, MinDDVal, MaxDDVal, EffectType, DamageType, MinEffectVal, MaxEffectVal) + + if MaxEffectVal ~= nil and MinEffectVal < MaxEffectVal then + EffectValue = math.random(MinEffectVal, MaxEffectVal) + else + EffectValue = MinEffectVal + end + + if EffectType == "heal" then + ModifyHP(Caster, EffectValue) + else + SpellDamage(Target, DamageType, EffectValue) + end + +end diff --git a/server/Spells/Fighter/Brawler/Bruiser/BobandWeave.lua b/server/Spells/Fighter/Brawler/Bruiser/BobandWeave.lua new file mode 100644 index 000000000..78c8b279c --- /dev/null +++ b/server/Spells/Fighter/Brawler/Bruiser/BobandWeave.lua @@ -0,0 +1,25 @@ +--[[ + Script Name : Spells/Fighter/Brawler/Bruiser/BobandWeave.lua + Script Author : Jabantiz + Script Date : 2014.03.11 05:03:32 + Script Purpose : + : +--]] + +function cast(Caster, Target, Stat, Avoid, Resist) + -- Increases STR of caster by 9.4 + AddSpellBonus(Target, 0, Stat) + + -- Adds 2.5% to base avoidance. + AddSpellBonus(Target, 696, Avoid) + + -- Increases Mitigation of caster vs elemental, noxious and arcane damage by 168 + AddSpellBonus(Target, 201, Resist) + AddSpellBonus(Target, 202, Resist) + AddSpellBonus(Target, 203, Resist) + +end + +function remove(Caster, Target) + RemoveSpellBonus(Target) +end diff --git a/server/Spells/Fighter/Brawler/Bruiser/Bodyguard.lua b/server/Spells/Fighter/Brawler/Bruiser/Bodyguard.lua new file mode 100644 index 000000000..8b8e3d340 --- /dev/null +++ b/server/Spells/Fighter/Brawler/Bruiser/Bodyguard.lua @@ -0,0 +1,46 @@ +--[[ + Script Name : Spells/Fighter/Brawler/Bruiser/Bodyguard.lua + Script Author : Jabantiz + Script Date : 2014.03.10 09:03:09 + Script Purpose : + : +--]] + +function cast(Caster, Target, PhyDmg, Avoid, Deflect, Parry, OffSkill, Agg, DefSkill, NoxMit, Armor) + -- Reduces physical damage done to caster by 5% + -- AddSpellBonus(Target, , PhyDmg) + Say(Caster, "Not Implemented: physical damage reduction") + + -- Adds 1.3% to base avoidance. + AddSpellBonus(Target, 696, Avoid) + + -- Caster will deflect 9.0% of incoming attacks. + AddSpellBonus(Target, 670, Deflect) + + -- Increases Parry of caster by 1.6 + AddSkillBonus(Target, GetSkillIDByName("Parry"), Parry) + + -- Decreases Crushing, Piercing and Slashing of caster by 1.8 + AddSkillBonus(Target, GetSkillIDByName("Crushing"), OffSkill) + AddSkillBonus(Target, GetSkillIDByName("Piercing"), OffSkill) + AddSkillBonus(Target, GetSkillIDByName("Slashing"), OffSkill) + + -- Increases Aggression of caster by 1.2 + AddSkillBonus(Target, GetSkillIDByName("Aggression"), Agg) + + -- Increases Deflection and Defense of caster by 1.6 + AddSkillBonus(Target, GetSkillIDByName("Deflection"), DefSkill) + AddSkillBonus(Target, GetSkillIDByName("Defense"), DefSkill) + + -- Increases Mitigation of caster vs noxious damage by 138 + AddSpellBonus(Target, 202, NoxMit) + + -- Increases the caster's effectiveness of worn armor vs physical damage by 25% + AddSpellBonus(Target, 678, Armor) +end + +function remove(Caster, Target) + RemoveSpellBonus(Target) + RemoveSkillBonus(Target) +end + diff --git a/server/Spells/Fighter/Brawler/Bruiser/Brag.lua b/server/Spells/Fighter/Brawler/Bruiser/Brag.lua new file mode 100644 index 000000000..a0c50c1c1 --- /dev/null +++ b/server/Spells/Fighter/Brawler/Bruiser/Brag.lua @@ -0,0 +1,30 @@ +--[[ + Script Name : taunt.lua + Script Purpose : Generic Taunt script + Script Author : John Adams + Script Date : 2008.12.07 +--]] + +function cast(Caster, Target, TauntType, MinTauntVal, MaxTauntVal) + -- Taunt component + if MaxTauntVal ~= nil and MinTauntVal < MaxTauntVal then + hateAmount = math.random(MinTauntVal, MaxTauntVal) + AddHate(Caster, Target, hateAmount) + else + AddHate(Caster, Target, MinTauntVal) + end +end + +function tick(Caster, Target, TauntType, MinTauntVal, MaxTauntVal) + if MaxTauntVal ~= nil and MinTauntVal < MaxTauntVal then + hateAmount = math.random(MinTauntVal, MaxTauntVal) + AddHate(Caster, Target, hateAmount) + else + AddHate(Caster, Target, MinTauntVal) + end +end + + +function remove(Caster, Target, TauntType, MinTauntVal, MaxTauntVal) + +end \ No newline at end of file diff --git a/server/Spells/Fighter/Brawler/Bruiser/BruisingFist.lua b/server/Spells/Fighter/Brawler/Bruiser/BruisingFist.lua new file mode 100644 index 000000000..d1d72cadb --- /dev/null +++ b/server/Spells/Fighter/Brawler/Bruiser/BruisingFist.lua @@ -0,0 +1,55 @@ +--[[ + Script Name : dd_dot.lua + Script Purpose : Generic damage + 1 effect script + Script Author : John Adams + Script Date : 2008.12.02 +--]] + +function cast(Caster, Target, DDType, MinDDVal, MaxDDVal, EffectType, DamageType, MinEffectVal, MaxEffectVal) + + -- DD component + if MaxDDVal ~= nil and MinDDVal < MaxDDVal then + dmgAmount = math.random(MinDDVal, MaxDDVal) + SpellDamage(Target, DDType, dmgAmount) + --AddHate(Caster, Target, dmgAmount) + else + SpellDamage(Target, DDType, MinDDVal) + --AddHate(Caster, Target, MinDDVal) + end + + -- Effect component - only process this code if there is an EffectType param + if EffectType ~= nil then + + -- Determine if there is a range to effect values + if MaxEffectVal ~= nil and MinEffectVal < MaxEffectVal then + EffectValue = math.random(MinEffectVal, MaxEffectVal) + else + EffectValue = MinEffectVal + end + + -- Determine EffectType - either a DamageType or a String value passed as param 4 + if EffectType == "heal" then + ModifyHP(Caster, EffectValue) + else + SpellDamage(Target, DamageType, EffectValue) + end + + end + +end + +function tick(Caster, Target, DDType, MinDDVal, MaxDDVal, EffectType, DamageType, MinEffectVal, MaxEffectVal) + + if MaxEffectVal ~= nil and MinEffectVal < MaxEffectVal then + EffectValue = math.random(MinEffectVal, MaxEffectVal) + else + EffectValue = MinEffectVal + end + + if EffectType == "heal" then + ModifyHP(Caster, EffectValue) + else + SpellDamage(Target, DamageType, EffectValue) + end + +end diff --git a/server/Spells/Fighter/Brawler/Bruiser/BruisingSpirit.lua b/server/Spells/Fighter/Brawler/Bruiser/BruisingSpirit.lua new file mode 100644 index 000000000..c3d9be7b9 --- /dev/null +++ b/server/Spells/Fighter/Brawler/Bruiser/BruisingSpirit.lua @@ -0,0 +1,16 @@ +--[[ + Script Name : Spells/Fighter/Brawler/Bruiser/BruisingSpirit.lua + Script Author : Dello + Script Date : 09/07/2014 + Script Purpose : + : +--]] + +function cast(Caster, Target, BonusAmt) + AddSpellBonus(Target, 200, BonusAmt) +end + + +function remove(Caster, Target, BonusAmt) + RemoveSpellBonus(Target) +end \ No newline at end of file diff --git a/server/Spells/Fighter/Brawler/Bruiser/Brutality.lua b/server/Spells/Fighter/Brawler/Bruiser/Brutality.lua new file mode 100644 index 000000000..c19c5c8b6 --- /dev/null +++ b/server/Spells/Fighter/Brawler/Bruiser/Brutality.lua @@ -0,0 +1,27 @@ +--[[ + Script Name : Spells/Fighter/Brawler/Bruiser/Brutality.lua + Script Author : Jabantiz + Script Date : 2014.03.10 10:03:32 + Script Purpose : + : +--]] + +function cast(Caster, Target, Stats, Avoid, Taunts, CombatArts) + -- Increases AGI and STR of raid and group members (AE) by 5.4 + AddSpellBonus(Target, 2, Stats) + AddSpellBonus(Target, 0, Stats) + + -- Adds 0.9% to base avoidance. + AddSpellBonus(Target, 696, Avoid) + + -- Improves the base amount of taunts by 9%. + AddSpellBonus(Target, 705, Taunts) + + -- Improves the base amount of combat arts by 2.81%. + AddSpellBonus(Target, 703, CombatArts) +end + +function remove(Caster, Target) + RemoveSpellBonus(Target) +end + diff --git a/server/Spells/Fighter/Brawler/Bruiser/CloseMind.lua b/server/Spells/Fighter/Brawler/Bruiser/CloseMind.lua new file mode 100644 index 000000000..c53e796ba --- /dev/null +++ b/server/Spells/Fighter/Brawler/Bruiser/CloseMind.lua @@ -0,0 +1,24 @@ +--[[ + Script Name : Spells/Fighter/Brawler/Bruiser/CloseMind.lua + Script Author : John Adams + Script Date : 2013.08.11 06:08:24 + Script Purpose : + : +--]] + +function cast(Caster, Target) + -- code to cast the spell + Say(Caster, "Whoops! Guess this is not implemented yet!") + +-- Info from spell_display_effects (remove from script when done) + +end + +function tick(Caster, Target) + -- code to process each call_frequency (tick) set in spell_tiers +end + +function remove(Caster, Target) + -- code to remove the spell +end + diff --git a/server/Spells/Fighter/Brawler/Bruiser/DivideandConquer.lua b/server/Spells/Fighter/Brawler/Bruiser/DivideandConquer.lua new file mode 100644 index 000000000..cdf2e2b09 --- /dev/null +++ b/server/Spells/Fighter/Brawler/Bruiser/DivideandConquer.lua @@ -0,0 +1,27 @@ +--[[ + Script Name : Spells/Fighter/Brawler/Bruiser/DivideandConquer.lua + Script Author : John Adams + Script Date : 2013.08.11 06:08:11 + Script Purpose : + : +--]] + +function cast(Caster, Target) + -- code to cast the spell + Say(Caster, "Whoops! Guess this is not implemented yet!") + +-- Info from spell_display_effects (remove from script when done) +-- Increases Threat to target encounter by 24 - 36 +-- Increases threat priority of target encounter by 2 positions +-- Forces half of the target encounter to target and attack you. Upgrades to this spell increase the duration the target must target you from a range of 4 to 8 seconds. + +end + +function tick(Caster, Target) + -- code to process each call_frequency (tick) set in spell_tiers +end + +function remove(Caster, Target) + -- code to remove the spell +end + diff --git a/server/Spells/Fighter/Brawler/Bruiser/EyeGouge.lua b/server/Spells/Fighter/Brawler/Bruiser/EyeGouge.lua new file mode 100644 index 000000000..e74f0c375 --- /dev/null +++ b/server/Spells/Fighter/Brawler/Bruiser/EyeGouge.lua @@ -0,0 +1,29 @@ +--[[ + Script Name : Spells/Fighter/Brawler/Bruiser/EyeGouge.lua + Script Author : Dello + Script Date : 09/07/2014 + Script Purpose : + : +--]] + + +function cast(Caster, Target, DmgType, MinVal, MaxVal, SkillAmt) + + AddSkillBonus(Target, GetSkillIDByName("Slashing"), SkillAmt) + + AddSkillBonus(Target, GetSkillIDByName("Ranged"), SkillAmt) + + AddSkillBonus(Target, GetSkillIDByName("Piercing"), SkillAmt) + + AddSkillBonus(Target, GetSkillIDByName("Crushing"), SkillAmt) + + if MaxVal ~= nil and MinVal < MaxVal then + SpellDamage(Target, DmgType, math.random(MinVal, MaxVal)) + else + SpellDamage(Target, DmgType, MinVal) + end +end + +function remove(Caster, Target) + RemoveSkillBonus(Target) +end \ No newline at end of file diff --git a/server/Spells/Fighter/Brawler/Bruiser/FistofGorynn.lua b/server/Spells/Fighter/Brawler/Bruiser/FistofGorynn.lua new file mode 100644 index 000000000..56e7efe66 --- /dev/null +++ b/server/Spells/Fighter/Brawler/Bruiser/FistofGorynn.lua @@ -0,0 +1,38 @@ +--[[ + Script Name : Spells/Fighter/Brawler/Bruiser/FistofGorynn.lua + Script Author : John Adams + Script Date : 2013.08.11 06:08:14 + Script Purpose : + : +--]] + +function cast(Caster, Target) + -- code to cast the spell + Say(Caster, "Whoops! Guess this is not implemented yet!") + +-- Info from spell_display_effects (remove from script when done) +-- On a combat hit this spell may cast Strike of Anger on target of attack. Lasts for 12.0 seconds. Triggers about 2.4 times per minute. +-- Inflicts 626 - 940 crushing damage on target +-- Increases Crit Chance of caster by 12.0 +-- Cannot be modified except by direct means +-- Attacker must be behind or flanking +-- On a combat hit this spell may cast Strike of Anger on target of attack. Lasts for 12.0 seconds. Triggers about 2.4 times per minute. +-- Increases Crit Chance of caster by 12.0 +-- Increases Threat to target by 3,648 +-- Inflicts 562 - 842 crushing damage on target +-- Cannot be modified except by direct means +-- Attacker must be in front of +-- Caster will deflect 5.0% of incoming attacks. +-- Reduces physical damage done to caster by 10% +-- Cannot be modified except by direct means + +end + +function tick(Caster, Target) + -- code to process each call_frequency (tick) set in spell_tiers +end + +function remove(Caster, Target) + -- code to remove the spell +end + diff --git a/server/Spells/Fighter/Brawler/Bruiser/IgnoreBruises.lua b/server/Spells/Fighter/Brawler/Bruiser/IgnoreBruises.lua new file mode 100644 index 000000000..130b94e21 --- /dev/null +++ b/server/Spells/Fighter/Brawler/Bruiser/IgnoreBruises.lua @@ -0,0 +1,18 @@ +--[[ + Script Name : Heal (Spell Type) + Script Purpose : Generic script for healing spells + Script Author : John Adams + Script Date : 2008.12.03 + Script Note : +--]] + +function cast(Caster, Target, HealType, HealMinVal, HealMaxVal) + + -- Heal Component + if HealMinVal < HealMaxVal then + ModifyHP(Caster, math.random(HealMinVal, HealMaxVal)) + else + ModifyHP(Caster, HealMinVal) + end + +end diff --git a/server/Spells/Fighter/Brawler/Bruiser/IgnorePain.lua b/server/Spells/Fighter/Brawler/Bruiser/IgnorePain.lua new file mode 100644 index 000000000..92ad97f99 --- /dev/null +++ b/server/Spells/Fighter/Brawler/Bruiser/IgnorePain.lua @@ -0,0 +1,15 @@ +--[[ + Script Name : Spells/Fighter/Brawler/Bruiser/IgnorePain.lua + Script Author : Jabantiz + Script Date : 2014.03.10 09:03:28 + Script Purpose : + : +--]] + +function cast(Caster, Target, MinVal, MaxVal) + if MaxVal ~= nil and MinVal < MaxVal then + SpellHeal("Heal", math.random(MinVal, MaxVal)) + else + SpellHeal("Heal", MinVal) + end +end diff --git a/server/Spells/Fighter/Brawler/Bruiser/Impose.lua b/server/Spells/Fighter/Brawler/Bruiser/Impose.lua new file mode 100644 index 000000000..a0c50c1c1 --- /dev/null +++ b/server/Spells/Fighter/Brawler/Bruiser/Impose.lua @@ -0,0 +1,30 @@ +--[[ + Script Name : taunt.lua + Script Purpose : Generic Taunt script + Script Author : John Adams + Script Date : 2008.12.07 +--]] + +function cast(Caster, Target, TauntType, MinTauntVal, MaxTauntVal) + -- Taunt component + if MaxTauntVal ~= nil and MinTauntVal < MaxTauntVal then + hateAmount = math.random(MinTauntVal, MaxTauntVal) + AddHate(Caster, Target, hateAmount) + else + AddHate(Caster, Target, MinTauntVal) + end +end + +function tick(Caster, Target, TauntType, MinTauntVal, MaxTauntVal) + if MaxTauntVal ~= nil and MinTauntVal < MaxTauntVal then + hateAmount = math.random(MinTauntVal, MaxTauntVal) + AddHate(Caster, Target, hateAmount) + else + AddHate(Caster, Target, MinTauntVal) + end +end + + +function remove(Caster, Target, TauntType, MinTauntVal, MaxTauntVal) + +end \ No newline at end of file diff --git a/server/Spells/Fighter/Brawler/Bruiser/IndomitableWill.lua b/server/Spells/Fighter/Brawler/Bruiser/IndomitableWill.lua new file mode 100644 index 000000000..70f3c68d9 --- /dev/null +++ b/server/Spells/Fighter/Brawler/Bruiser/IndomitableWill.lua @@ -0,0 +1,14 @@ +--[[ + Script Name : Spells/Fighter/Brawler/Bruiser/IndomitableWill.lua + Script Author : Jabantiz + Script Date : 2014.03.11 05:03:54 + Script Purpose : + : +--]] + + +function cast(Caster, Target, levels) + -- Dispels 15 levels of physical and arcane hostile effects on caster + CureByType(1, 1, "", levels) -- trauma + CureByType(1, 2, "", levels) -- arcane +end diff --git a/server/Spells/Fighter/Brawler/Bruiser/Intimidate.lua b/server/Spells/Fighter/Brawler/Bruiser/Intimidate.lua new file mode 100644 index 000000000..e2e79d5eb --- /dev/null +++ b/server/Spells/Fighter/Brawler/Bruiser/Intimidate.lua @@ -0,0 +1,14 @@ +--[[ + Script Name : Spells/Fighter/Brawler/Bruiser/Intimidate.lua + Script Author : neatz09 + Script Date : 2019.10.17 01:10:14 + Script Purpose : + : +--]] + +-- Info from spell_display_effects (remove from script when done) +-- Mesmerizes target +-- Prevents AOE (except when direct) +-- Dispelled when target takes damage +-- Does not affect Epic targets +-- Resistibility increases against targets higher than level 29. diff --git a/server/Spells/Fighter/Brawler/Bruiser/KnockoutCombination.lua b/server/Spells/Fighter/Brawler/Bruiser/KnockoutCombination.lua new file mode 100644 index 000000000..6ff94fffe --- /dev/null +++ b/server/Spells/Fighter/Brawler/Bruiser/KnockoutCombination.lua @@ -0,0 +1,24 @@ +--[[ + Script Name : Spells/Fighter/Brawler/Bruiser/KnockoutCombination.lua + Script Author : John Adams + Script Date : 2013.08.11 06:08:06 + Script Purpose : + : +--]] + +function cast(Caster, Target) + -- code to cast the spell + Say(Caster, "Whoops! Guess this is not implemented yet!") + +-- Info from spell_display_effects (remove from script when done) + +end + +function tick(Caster, Target) + -- code to process each call_frequency (tick) set in spell_tiers +end + +function remove(Caster, Target) + -- code to remove the spell +end + diff --git a/server/Spells/Fighter/Brawler/Bruiser/LightningFists.lua b/server/Spells/Fighter/Brawler/Bruiser/LightningFists.lua new file mode 100644 index 000000000..463382226 --- /dev/null +++ b/server/Spells/Fighter/Brawler/Bruiser/LightningFists.lua @@ -0,0 +1,27 @@ +--[[ + Script Name : Spells/Fighter/Brawler/Bruiser/LightningFists.lua + Script Author : Jabantiz + Script Date : 2014.03.11 06:03:00 + Script Purpose : + : +--]] + +function cast(Caster, Target, DmgType, Dmg) + -- Grants a total of 5 triggers of the spell. + SetSpellTriggerCount(5, 1) + -- On a melee hit this spell will cast Thunder Fist on target of attack. + AddProc(Target, 3, 100) +end + +function proc(Caster, Target, Type, DmgType, Dmg) + -- Inflicts 25 magic damage on target + if Type == 3 then + ProcDamage(Caster, Target, "Thunder Fist", DmgType, Dmg) + RemoveTriggerFromSpell(1) + end +end + +function remove(Caster, Target) + RemoveProc(Target) +end + diff --git a/server/Spells/Fighter/Brawler/Bruiser/Manhandle.lua b/server/Spells/Fighter/Brawler/Bruiser/Manhandle.lua new file mode 100644 index 000000000..63186a40d --- /dev/null +++ b/server/Spells/Fighter/Brawler/Bruiser/Manhandle.lua @@ -0,0 +1,12 @@ +--[[ + Script Name : Spells/Fighter/Brawler/Bruiser/Manhandle.lua + Script Author : neatz09 + Script Date : 2019.10.17 01:10:09 + Script Purpose : + : +--]] + +-- Info from spell_display_effects (remove from script when done) +-- On a melee hit this spell may cast Roughhousing on target of attack. Triggers about 5.0 times per minute. +-- Inflicts 21 - 35 melee damage on target +-- Increases Threat to target by 770 diff --git a/server/Spells/Fighter/Brawler/Bruiser/MercilessStomp.lua b/server/Spells/Fighter/Brawler/Bruiser/MercilessStomp.lua new file mode 100644 index 000000000..9530dbdd1 --- /dev/null +++ b/server/Spells/Fighter/Brawler/Bruiser/MercilessStomp.lua @@ -0,0 +1,33 @@ +--[[ + Script Name : Spells/Fighter/Brawler/Bruiser/MercilessStomp.lua + Script Author : Jabantiz + Script Date : 2014.03.11 05:03:17 + Script Purpose : + : +--]] + +function cast(Caster, Target, DmgType, MinVal, MaxVal) + -- Inflicts 49 - 82 crushing damage on target + if MaxVal ~= nil and MinVal < MaxVal then + SpellDamage(Target, DmgType, math.random(MinVal, MaxVal)) + else + SpellDamage(Target, DmgType, MinVal) + end + + -- Applies Knockdown. Lasts for 1.5 seconds. + -- Throws target back + -- Stuns target + -- Blurs vision of target + -- Does not affect Epic targets + if not IsEpic(Target) then + AddControlEffect(Target, 4) + BlurVision(Target, 1.0) + Knockback(Caster, Target, 1500) + AddSpellTimer(1500, "RemoveKnockdown") + end +end + +function RemoveKnockdown(Caster, Target) + RemoveControlEffect(Target, 4) + BlurVision(Target, 0.0) +end \ No newline at end of file diff --git a/server/Spells/Fighter/Brawler/Bruiser/MeteorFist.lua b/server/Spells/Fighter/Brawler/Bruiser/MeteorFist.lua new file mode 100644 index 000000000..73f07fae3 --- /dev/null +++ b/server/Spells/Fighter/Brawler/Bruiser/MeteorFist.lua @@ -0,0 +1,16 @@ +--[[ + Script Name : Spells/Fighter/Brawler/Bruiser/MeteorFist.lua + Script Author : Jabantiz + Script Date : 2014.03.10 09:03:07 + Script Purpose : + : +--]] + +function cast(Caster, Target, DmgType, MinVal, MaxVal) + -- Inflicts 13 - 22 heat damage on target + if MaxVal ~= nil and MinVal < MaxVal then + SpellDamage(Target, DmgType, math.random(MinVal, MaxVal)) + else + SpellDamage(Target, DmgType, MinVal) + end +end diff --git a/server/Spells/Fighter/Brawler/Bruiser/OneHundredHandPunch.lua b/server/Spells/Fighter/Brawler/Bruiser/OneHundredHandPunch.lua new file mode 100644 index 000000000..4e1b30d32 --- /dev/null +++ b/server/Spells/Fighter/Brawler/Bruiser/OneHundredHandPunch.lua @@ -0,0 +1,71 @@ +--[[ + Script Name : Spells/Fighter/Brawler/Bruiser/OneHundredHandPunch.lua + Script Author : Jabantiz + Script Date : 2014.03.11 06:03:08 + Script Purpose : + : +--]] + +function cast(Caster, Target, DmgType, MinVal, MaxVal) + if MaxVal ~= nil and MinVal < MaxVal then + SpellDamage(Target, DmgType, math.random(MinVal, MaxVal)) + else + SpellDamage(Target, DmgType, MinVal) + end + + if LastSpellAttackHit() then + if MaxVal ~= nil and MinVal < MaxVal then + SpellDamage(Target, DmgType, math.random(MinVal, MaxVal)) + else + SpellDamage(Target, DmgType, MinVal) + end + end + + if LastSpellAttackHit() then + if MaxVal ~= nil and MinVal < MaxVal then + SpellDamage(Target, DmgType, math.random(MinVal, MaxVal)) + else + SpellDamage(Target, DmgType, MinVal) + end + end + + if LastSpellAttackHit() then + if MaxVal ~= nil and MinVal < MaxVal then + SpellDamage(Target, DmgType, math.random(MinVal, MaxVal)) + else + SpellDamage(Target, DmgType, MinVal) + end + end + + if LastSpellAttackHit() then + if MaxVal ~= nil and MinVal < MaxVal then + SpellDamage(Target, DmgType, math.random(MinVal, MaxVal)) + else + SpellDamage(Target, DmgType, MinVal) + end + end + + if LastSpellAttackHit() then + if MaxVal ~= nil and MinVal < MaxVal then + SpellDamage(Target, DmgType, math.random(MinVal, MaxVal)) + else + SpellDamage(Target, DmgType, MinVal) + end + end + + if LastSpellAttackHit() then + if MaxVal ~= nil and MinVal < MaxVal then + SpellDamage(Target, DmgType, math.random(MinVal, MaxVal)) + else + SpellDamage(Target, DmgType, MinVal) + end + end + + if LastSpellAttackHit() then + if MaxVal ~= nil and MinVal < MaxVal then + SpellDamage(Target, DmgType, math.random(MinVal, MaxVal)) + else + SpellDamage(Target, DmgType, MinVal) + end + end +end diff --git a/server/Spells/Fighter/Brawler/Bruiser/Pummel.lua b/server/Spells/Fighter/Brawler/Bruiser/Pummel.lua new file mode 100644 index 000000000..a66d87081 --- /dev/null +++ b/server/Spells/Fighter/Brawler/Bruiser/Pummel.lua @@ -0,0 +1,22 @@ +--[[ + Script Name : Spells/Fighter/Brawler/Bruiser/Pummel.lua + Script Author : John Adams + Script Date : 2013.11.17 07:11:55 + Script Purpose : Direct Damage script + : +--]] + +function cast(Caster, Target, DDType, MinDmg, MaxDmg) + + if MaxDmg ~= nil and MinDmg < MaxDmg then + dmgAmount = math.random(MinDmg, MaxDmg) + SpellDamage(Target, DDType, dmgAmount) + else + SpellDamage(Target, DDType, MinDmg) + end + +end + +function remove(Caster, Target, DDType, MinDmg, MaxDmg) + +end diff --git a/server/Spells/Fighter/Brawler/Bruiser/RockSkin.lua b/server/Spells/Fighter/Brawler/Bruiser/RockSkin.lua new file mode 100644 index 000000000..e0dc8855a --- /dev/null +++ b/server/Spells/Fighter/Brawler/Bruiser/RockSkin.lua @@ -0,0 +1,24 @@ +--[[ + Script Name : Spells/Fighter/Brawler/Bruiser/RockSkin.lua + Script Author : John Adams + Script Date : 2013.08.11 06:08:25 + Script Purpose : + : +--]] + +function cast(Caster, Target) + -- code to cast the spell + Say(Caster, "Whoops! Guess this is not implemented yet!") + +-- Info from spell_display_effects (remove from script when done) + +end + +function tick(Caster, Target) + -- code to process each call_frequency (tick) set in spell_tiers +end + +function remove(Caster, Target) + -- code to remove the spell +end + diff --git a/server/Spells/Fighter/Brawler/Bruiser/Roundhouse.lua b/server/Spells/Fighter/Brawler/Bruiser/Roundhouse.lua new file mode 100644 index 000000000..7df869154 --- /dev/null +++ b/server/Spells/Fighter/Brawler/Bruiser/Roundhouse.lua @@ -0,0 +1,16 @@ +--[[ + Script Name : Spells/Fighter/Brawler/Bruiser/Roundhouse.lua + Script Author : Jabantiz + Script Date : 2014.03.10 10:03:44 + Script Purpose : + : +--]] + +function cast(Caster, Target, DmgType, MinVal, MaxVal) + -- Inflicts 9 - 29 crushing damage on target + if MaxVal ~= nil and MinVal < MaxVal then + SpellDamage(Target, DmgType, math.random(MinVal, MaxVal)) + else + SpellDamage(Target, DmgType, MinVal) + end +end diff --git a/server/Spells/Fighter/Brawler/Bruiser/SavageAssault.lua b/server/Spells/Fighter/Brawler/Bruiser/SavageAssault.lua new file mode 100644 index 000000000..614eb67db --- /dev/null +++ b/server/Spells/Fighter/Brawler/Bruiser/SavageAssault.lua @@ -0,0 +1,39 @@ +--[[ + Script Name : Spells/Fighter/Brawler/Bruiser/SavageAssault.lua + Script Author : Dello + Script Date : 10/07/2014 + Script Purpose : + : +--]] + +function cast(Caster, Target, DmgType, MinVal, MaxVal) + if MaxVal ~= nil and MinVal < MaxVal then + SpellDamage(Target, DmgType, math.random(MinVal, MaxVal)) + else + SpellDamage(Target, DmgType, MinVal) + end + + if LastSpellAttackHit() then + if MaxVal ~= nil and MinVal < MaxVal then + SpellDamage(Target, DmgType, math.random(MinVal, MaxVal)) + else + SpellDamage(Target, DmgType, MinVal) + end + end + + if LastSpellAttackHit() then + if MaxVal ~= nil and MinVal < MaxVal then + SpellDamage(Target, DmgType, math.random(MinVal, MaxVal)) + else + SpellDamage(Target, DmgType, MinVal) + end + end + + if LastSpellAttackHit() then + if MaxVal ~= nil and MinVal < MaxVal then + SpellDamage(Target, DmgType, math.random(MinVal, MaxVal)) + else + SpellDamage(Target, DmgType, MinVal) + end + end +end \ No newline at end of file diff --git a/server/Spells/Fighter/Brawler/Bruiser/ShoulderCharge.lua b/server/Spells/Fighter/Brawler/Bruiser/ShoulderCharge.lua new file mode 100644 index 000000000..c008ace8d --- /dev/null +++ b/server/Spells/Fighter/Brawler/Bruiser/ShoulderCharge.lua @@ -0,0 +1,33 @@ +--[[ + Script Name : Spells/Fighter/Brawler/Bruiser/ShoulderCharge.lua + Script Author : Jabantiz + Script Date : 2014.03.11 05:03:52 + Script Purpose : + : +--]] + +function cast(Caster, Target, DmgType, MinVal, MaxVal) + -- Inflicts 26 - 79 melee damage on target + if MaxVal ~= nil and MinVal < MaxVal then + SpellDamage(Target, DmgType, math.random(MinVal, MaxVal)) + else + SpellDamage(Target, DmgType, MinVal) + end + + -- Applies Knockdown. Lasts for 2.5 seconds. + -- Blurs vision of target + -- Throws target back + -- Stuns target + -- Does not affect Epic targets + if not IsEpic(Target) and LastSpellAttackHit() then + BlurVision(Target, 1.0) + AddControlEffect(Target, 4) + Knockback(Caster, Target, 2500) + AddSpellTimer(2500, "RemoveKnockback") + end +end + +function RemoveKnockback(Caster, Target) + BlurVision(Target, 0.0) + RemoveControlEffect(Target, 4) +end diff --git a/server/Spells/Fighter/Brawler/Bruiser/ShrugOff.lua b/server/Spells/Fighter/Brawler/Bruiser/ShrugOff.lua new file mode 100644 index 000000000..1d55983fe --- /dev/null +++ b/server/Spells/Fighter/Brawler/Bruiser/ShrugOff.lua @@ -0,0 +1,26 @@ +--[[ + Script Name : Spells/Fighter/Brawler/Bruiser/ShrugOff.lua + Script Author : John Adams + Script Date : 2013.08.11 06:08:29 + Script Purpose : + : +--]] + +function cast(Caster, Target) + -- code to cast the spell + Say(Caster, "Whoops! Guess this is not implemented yet!") + +-- Info from spell_display_effects (remove from script when done) +-- Grants target a 13% chance of making an additional attempt to avoid being hit by a melee attack using the caster's avoidance. +-- Adds 0.8% to base avoidance. + +end + +function tick(Caster, Target) + -- code to process each call_frequency (tick) set in spell_tiers +end + +function remove(Caster, Target) + -- code to remove the spell +end + diff --git a/server/Spells/Fighter/Brawler/Bruiser/SlurredInsult.lua b/server/Spells/Fighter/Brawler/Bruiser/SlurredInsult.lua new file mode 100644 index 000000000..9d84e9d0e --- /dev/null +++ b/server/Spells/Fighter/Brawler/Bruiser/SlurredInsult.lua @@ -0,0 +1,17 @@ +--[[ + Script Name : Spells/Fighter/Brawler/Bruiser/SlurredInsult.lua + Script Author : Dello + Script Date : 25/06/2014 + Script Notes : + : +--]] + +function cast(Caster, Target, MinVal, MaxVal) + -- Increases Threat to target by 355 - 434 + if MaxVal ~= nil and MinVal < MaxVal then + AddHate(Caster, Target, math.random(MinVal, MaxVal), 1) + else + AddHate(Caster, Target, MinVal, 1) + end +end + diff --git a/server/Spells/Fighter/Brawler/Bruiser/SmolderingFists.lua b/server/Spells/Fighter/Brawler/Bruiser/SmolderingFists.lua new file mode 100644 index 000000000..03ecf6364 --- /dev/null +++ b/server/Spells/Fighter/Brawler/Bruiser/SmolderingFists.lua @@ -0,0 +1,35 @@ +--[[ + Script Name : Spells/Fighter/Brawler/Bruiser/SmolderingFists.lua + Script Author : Jabantiz + Script Date : 2014.03.10 09:03:55 + Script Purpose : + : +--]] + +function cast(Caster, Target, Def, OffSkills, ProcDmgType, ProcDmgMin, ProcDmgMax) + -- Decreases Defense of caster by 1.8 + AddSkillBonus(Target, GetSkillIDByName("Defense"), Def) + + -- Increases Ranged, Crushing, Piercing and Slashing of caster by 2.4 + AddSkillBonus(Target, GetSkillIDByName("Ranged"), OffSkills) + AddSkillBonus(Target, GetSkillIDByName("Crushing"), OffSkills) + AddSkillBonus(Target, GetSkillIDByName("Piercing"), OffSkills) + AddSkillBonus(Target, GetSkillIDByName("Slashing"), OffSkills) + + -- On a melee hit this spell may cast Engulf on target of attack. Triggers about 2.0 times per minute. + -- Inflicts 15 - 25 heat damage on target + AddProc(Target, 3, 20) +end + +function proc(Caster, Target, Type, Def, OffSkills, ProcDmgType, ProcDmgMin, ProcDmgMax) + -- On a melee hit this spell may cast Engulf on target of attack. Triggers about 2.0 times per minute. + -- Inflicts 15 - 25 heat damage on target + if Type == 3 then + ProcDamage(Caster, Target, "Engulf", ProcDmgType, ProcDmgMin, ProcDmgMax) + end +end + +function remove(Caster, Target) + RemoveSkillBonus(Target) + RemoveProc(Target) +end diff --git a/server/Spells/Fighter/Brawler/Bruiser/SonicPunch.lua b/server/Spells/Fighter/Brawler/Bruiser/SonicPunch.lua new file mode 100644 index 000000000..8874a6c7d --- /dev/null +++ b/server/Spells/Fighter/Brawler/Bruiser/SonicPunch.lua @@ -0,0 +1,11 @@ +--[[ + Script Name : Spells/Fighter/Brawler/Bruiser/SonicPunch.lua + Script Author : neatz09 + Script Date : 2019.10.17 01:10:15 + Script Purpose : + : +--]] + +-- Info from spell_display_effects (remove from script when done) +-- Interrupts target +-- Inflicts 541 - 903 melee damage on target diff --git a/server/Spells/Fighter/Brawler/Bruiser/StoneDeaf.lua b/server/Spells/Fighter/Brawler/Bruiser/StoneDeaf.lua new file mode 100644 index 000000000..24b2b6905 --- /dev/null +++ b/server/Spells/Fighter/Brawler/Bruiser/StoneDeaf.lua @@ -0,0 +1,24 @@ +--[[ + Script Name : Spells/Fighter/Brawler/Bruiser/StoneDeaf.lua + Script Author : John Adams + Script Date : 2013.08.11 06:08:40 + Script Purpose : + : +--]] + +function cast(Caster, Target) + -- code to cast the spell + Say(Caster, "Whoops! Guess this is not implemented yet!") + +-- Info from spell_display_effects (remove from script when done) + +end + +function tick(Caster, Target) + -- code to process each call_frequency (tick) set in spell_tiers +end + +function remove(Caster, Target) + -- code to remove the spell +end + diff --git a/server/Spells/Fighter/Brawler/Bruiser/SuckerPunch.lua b/server/Spells/Fighter/Brawler/Bruiser/SuckerPunch.lua new file mode 100644 index 000000000..470bcdb38 --- /dev/null +++ b/server/Spells/Fighter/Brawler/Bruiser/SuckerPunch.lua @@ -0,0 +1,33 @@ +--[[ + Script Name : Spells/Fighter/Brawler/Bruiser/SuckerPunch.lua + Script Author : Dello + Script Date : 10/07/2014 + Script Purpose : + : +--]] + +function precast(Caster, Target) + if not IsFlanking(Caster, Target) then + SendMessage(Caster, "You must be flanking or behind", "yellow") + return false + end + + return true +end + + +function cast(Caster, Target, DmgType, MinVal, MaxVal) + if MaxVal ~= nil and MinVal < MaxVal then + SpellDamage(Target, DmgType, math.random(MinVal, MaxVal)) + else + SpellDamage(Target, DmgType, MinVal) + end + + if not IsEpic(Target) then + AddControlEffect(Target, 3) + end +end + +function remove(Caster, Target) + RemoveControlEffect(Target, 3) +end diff --git a/server/Spells/Fighter/Brawler/Bruiser/UnyieldingResolve.lua b/server/Spells/Fighter/Brawler/Bruiser/UnyieldingResolve.lua new file mode 100644 index 000000000..11093ab39 --- /dev/null +++ b/server/Spells/Fighter/Brawler/Bruiser/UnyieldingResolve.lua @@ -0,0 +1,30 @@ +--[[ + Script Name : Spells/Fighter/Brawler/Bruiser/UnyieldingResolve.lua + Script Author : John Adams + Script Date : 2013.08.11 06:08:18 + Script Purpose : + : +--]] + +function cast(Caster, Target) + -- code to cast the spell + Say(Caster, "Whoops! Guess this is not implemented yet!") + +-- Info from spell_display_effects (remove from script when done) +-- Heals caster for 10.0% of max health +-- Heals caster for 5.0% of max health every second +-- This effect cannot be critically applied. +-- Makes caster immune to strikethrough attacks. +-- Caster will Dodge 100.0% of incoming attacks +-- The healing of this spell cannot be modified except by direct means + +end + +function tick(Caster, Target) + -- code to process each call_frequency (tick) set in spell_tiers +end + +function remove(Caster, Target) + -- code to remove the spell +end + diff --git a/server/Spells/Fighter/Brawler/Bruiser/Uppercut.lua b/server/Spells/Fighter/Brawler/Bruiser/Uppercut.lua new file mode 100644 index 000000000..f82cfd6fa --- /dev/null +++ b/server/Spells/Fighter/Brawler/Bruiser/Uppercut.lua @@ -0,0 +1,27 @@ +--[[ + Script Name : Spells/Fighter/Brawler/Bruiser/Uppercut.lua + Script Author : Dello + Script Date : 10/07/2014 + Script Purpose : + : +--]] + + +function cast(Caster, Target, DmgType, MinVal, MaxVal) + if MaxVal ~= nil and MinVal < MaxVal then + SpellDamage(Target, DmgType, math.random(MinVal, MaxVal)) + else + SpellDamage(Target, DmgType, MinVal) + end + if not IsEpic(Target) then + AddControlEffect(Target, 4) + BlurVision(Target, 1.0) + Knockback(Caster, Target, 1500) + AddSpellTimer(1500, "RemoveKnockdown") + end +end + +function RemoveKnockdown(Caster, Target) + RemoveControlEffect(Target, 4) + BlurVision(Target, 0.0) +end \ No newline at end of file diff --git a/server/Spells/Fighter/Brawler/BruisingStrike.lua b/server/Spells/Fighter/Brawler/BruisingStrike.lua new file mode 100644 index 000000000..9860d0cc1 --- /dev/null +++ b/server/Spells/Fighter/Brawler/BruisingStrike.lua @@ -0,0 +1,11 @@ +--[[ + Script Name : Spells/Fighter/Brawler/BruisingStrike.lua + Script Author : Dello + Script Date : 2014.07.11 02:07:45 + Script Purpose : + : +--]] + +-- Info from spell_display_effects (remove from script when done) +-- Inflicts 94 - 156 melee damage on target +-- If facing target diff --git a/server/Spells/Fighter/Brawler/DevastationFist.lua b/server/Spells/Fighter/Brawler/DevastationFist.lua new file mode 100644 index 000000000..296ef8142 --- /dev/null +++ b/server/Spells/Fighter/Brawler/DevastationFist.lua @@ -0,0 +1,27 @@ +--[[ + Script Name : Spells/Fighter/Brawler/DevastationFist.lua + Script Author : John Adams + Script Date : 2013.08.11 05:08:36 + Script Purpose : + : +--]] + +function cast(Caster, Target) + -- code to cast the spell + Say(Caster, "Whoops! Guess this is not implemented yet!") + +-- Info from spell_display_effects (remove from script when done) +-- Inflicts 823 - 1372 melee damage on target +-- Inflicts 110.5% of max health in crushing damage on target +-- If Target is Standard or weaker + +end + +function tick(Caster, Target) + -- code to process each call_frequency (tick) set in spell_tiers +end + +function remove(Caster, Target) + -- code to remove the spell +end + diff --git a/server/Spells/Fighter/Brawler/FeignDeath.lua b/server/Spells/Fighter/Brawler/FeignDeath.lua new file mode 100644 index 000000000..042d5e7bc --- /dev/null +++ b/server/Spells/Fighter/Brawler/FeignDeath.lua @@ -0,0 +1,25 @@ +--[[ + Script Name : Spells/Fighter/Brawler/FeignDeath.lua + Script Author : Jabantiz + Script Date : 2014.01.13 07:01:36 + Script Purpose : + : +--]] + +-- Feigns Death with 58% chance of success +function cast(Caster, Target, Chance) + -- Die animtaion and restricts movement + SetServerControlFlag(Caster, 5, 1, 1); + + local roll = math.random(1, 100); + if roll <= Chance then + ClearHate(Target, Caster) + SendMessage(Caster, "Your feign death succeeded", "yellow") + else + SendMessage(Caster, "Your feign death attempt failed", "yellow") + end +end + +function remove(Caster, Target) + SetServerControlFlag(Caster, 5, 1, 0); +end diff --git a/server/Spells/Fighter/Brawler/FlyingKick.lua b/server/Spells/Fighter/Brawler/FlyingKick.lua new file mode 100644 index 000000000..95c6c818e --- /dev/null +++ b/server/Spells/Fighter/Brawler/FlyingKick.lua @@ -0,0 +1,14 @@ +--[[ + Script Name : Spells/Fighter/Brawler/FlyingKick.lua + Script Author : Dello + Script Date : 19/07/2014 + Script Purpose : + : +--]] + +function cast(Caster, Target, MinVal, MaxVal, CurrentHP, MinHeal, MaxHeal) + CurrentHP = GetMaxHP(Caster) + MinHeal = CurrentHP * (MinVal / 100) + MaxHeal = CurrentHP * (MaxVal / 100) + SpellHeal("Heal", MinHeal, MaxHeal, Caster) +end \ No newline at end of file diff --git a/server/Spells/Fighter/Brawler/FocusedStrike.lua b/server/Spells/Fighter/Brawler/FocusedStrike.lua new file mode 100644 index 000000000..4b28f8c13 --- /dev/null +++ b/server/Spells/Fighter/Brawler/FocusedStrike.lua @@ -0,0 +1,16 @@ +--[[ + Script Name : Spells/Fighter/Brawler/FocusedStrike.lua + Script Author : Dello + Script Date : 2014.07.11 02:07:07 + Script Purpose : + : +--]] + +function cast(Caster, Target, DmgType, MinVal, MaxVal) + if MaxVal ~= nil and MinVal < MaxVal then + SpellDamage(Target, DmgType, math.random(MinVal, MaxVal)) + else + SpellDamage(Target, DmgType, MinVal) + end +end + diff --git a/server/Spells/Fighter/Brawler/InstillPanic.lua b/server/Spells/Fighter/Brawler/InstillPanic.lua new file mode 100644 index 000000000..279885ac0 --- /dev/null +++ b/server/Spells/Fighter/Brawler/InstillPanic.lua @@ -0,0 +1,28 @@ +--[[ + Script Name : Spells/Fighter/Brawler/InstillPanic.lua + Script Author : John Adams + Script Date : 2013.08.11 05:08:34 + Script Purpose : + : +--]] + +function cast(Caster, Target) + -- code to cast the spell + Say(Caster, "Whoops! Guess this is not implemented yet!") + +-- Info from spell_display_effects (remove from script when done) +-- Makes target afraid +-- 30% chance to dispel when target takes damage +-- Does not affect Epic targets +-- Resistibility increases against targets higher than level 29. + +end + +function tick(Caster, Target) + -- code to process each call_frequency (tick) set in spell_tiers +end + +function remove(Caster, Target) + -- code to remove the spell +end + diff --git a/server/Spells/Fighter/Brawler/MartialFocus.lua b/server/Spells/Fighter/Brawler/MartialFocus.lua new file mode 100644 index 000000000..0c8d93934 --- /dev/null +++ b/server/Spells/Fighter/Brawler/MartialFocus.lua @@ -0,0 +1,16 @@ +--[[ + Script Name : Spells/Fighter/Brawler/MartialFocus.lua + Script Author : Dello + Script Date : 2014.07.10 06:07:01 + Script Purpose : + : +--]] + +function cast(Caster, Target, MaxVal) + AddSpellBonus(Target, 0, MaxVal) + AddSpellBonus(Target, 2, MaxVal) +end + +function remove(Caster, Target, MaxVal) + RemoveSpellBonus(Target) +end \ No newline at end of file diff --git a/server/Spells/Fighter/Brawler/Monk/ArcticTalon.lua b/server/Spells/Fighter/Brawler/Monk/ArcticTalon.lua new file mode 100644 index 000000000..644713681 --- /dev/null +++ b/server/Spells/Fighter/Brawler/Monk/ArcticTalon.lua @@ -0,0 +1,24 @@ +--[[ + Script Name : Spells/Fighter/Brawler/Monk/ArcticTalon.lua + Script Author : Dello + Script Date : 13/06/2014 + Script Purpose : + : +--]] + + +function cast(Caster, Target, DmgType, MinVal, MaxVal) + if MaxVal ~= nil and MinVal < MaxVal then + SpellDamage(Target, DmgType, math.random(MinVal, MaxVal)) + else + SpellDamage(Target, DmgType, MinVal) + end + + if not IsEpic(Target) then + AddControlEffect(Target, 3) + end +end + +function remove(Caster, Target) + RemoveControlEffect(Target, 3) +end \ No newline at end of file diff --git a/server/Spells/Fighter/Brawler/Monk/BodyLikeMountain.lua b/server/Spells/Fighter/Brawler/Monk/BodyLikeMountain.lua new file mode 100644 index 000000000..e43bd54e8 --- /dev/null +++ b/server/Spells/Fighter/Brawler/Monk/BodyLikeMountain.lua @@ -0,0 +1,18 @@ +--[[ + Script Name : Spells/Fighter/Brawler/Monk/BodyLikeMountain.lua + Script Author : Dello + Script Date : 13/06/2014 + Script Purpose : + : +--]] + +function cast(Caster, Target, BonusAmt) + AddControlEffect(Target, 5) + AddSpellBonus(Target, 200, BonusAmt) +end + + +function remove(Caster, Target) + RemoveControlEffect(Target, 5) + RemoveSpellBonus(Target) +end diff --git a/server/Spells/Fighter/Brawler/Monk/CalmTranquility.lua b/server/Spells/Fighter/Brawler/Monk/CalmTranquility.lua new file mode 100644 index 000000000..9895200e9 --- /dev/null +++ b/server/Spells/Fighter/Brawler/Monk/CalmTranquility.lua @@ -0,0 +1,19 @@ +--[[ + Script Name : Spells/Fighter/Brawler/Monk/CalmTranquility.lua + Script Author : Jabantiz + Script Date : 2014.01.13 01:01:47 + Script Purpose : + : +--]] + +function cast(Caster, Target, CastingSpeed, AttackSpeed) + -- Increases Ability Casting Speed of raid and group members (AE) by 2.4% + AddSpellBonus(Target, 664, CastingSpeed) + + -- Increases Attack Speed of raid and group members (AE) by 6.0 + AddSpellBonus(Target, 617, AttackSpeed) +end + +function remove(Caster, Target) + RemoveSpellBonus(Target) +end diff --git a/server/Spells/Fighter/Brawler/Monk/Challenge.lua b/server/Spells/Fighter/Brawler/Monk/Challenge.lua new file mode 100644 index 000000000..8fc8c0e83 --- /dev/null +++ b/server/Spells/Fighter/Brawler/Monk/Challenge.lua @@ -0,0 +1,21 @@ +--[[ + Script Name : Spells/Fighter/Brawler/Monk/Challenge.lua + Script Author : Dello + Script Date : 13/06/2014 + Script Purpose : + : +--]] + +function cast(Caster, Target, MinTaunt, MaxTaunt) + -- Increases Threat to target by 51 - 62 + if MaxTaunt ~= nil and MinTaunt < MaxTaunt then + AddHate(Caster, Target, math.random(MinTaunt, MaxTaunt)) + else + AddHate(Caster, Target, MinTaunt) + end + + -- Interrupts target + if target ~= nil then + Interrupt(Caster, Target) + end +end \ No newline at end of file diff --git a/server/Spells/Fighter/Brawler/Monk/ChargingTiger.lua b/server/Spells/Fighter/Brawler/Monk/ChargingTiger.lua new file mode 100644 index 000000000..c9bc07dc6 --- /dev/null +++ b/server/Spells/Fighter/Brawler/Monk/ChargingTiger.lua @@ -0,0 +1,33 @@ +--[[ + Script Name : Spells/Fighter/Brawler/Monk/ChargingTiger.lua + Script Author : Jabantiz + Script Date : 2014.01.13 06:01:01 + Script Purpose : + : +--]] + +function cast(Caster, Target, DmgType, MinVal, MaxVal) + -- Inflicts 35 - 59 melee damage on target + if MaxVal ~= nil and MinVal < MaxVal then + SpellDamage(Target, DmgType, math.random(MinVal, MaxVal)) + else + SpellDamage(Target, DmgType, MinVal) + end + + -- Applies Knockdown on termination. Lasts for 2.5 seconds. + -- Blurs vision of target + -- Throws target back + -- Stuns target + -- Does not affect Epic targets + if not IsEpic(Target) then + Knockback(Caster, Target, 4000) + AddControlEffect(Target, 4) + BlurVision(Target, 1.0) + AddSpellTimer(2500, "RemoveKnockback") + end +end + +function RemoveKnockback(Caster, Target) + RemoveControlEffect(Target, 4) + BlurVision(Target, 0.0) +end diff --git a/server/Spells/Fighter/Brawler/Monk/CobraCircle.lua b/server/Spells/Fighter/Brawler/Monk/CobraCircle.lua new file mode 100644 index 000000000..d1d72cadb --- /dev/null +++ b/server/Spells/Fighter/Brawler/Monk/CobraCircle.lua @@ -0,0 +1,55 @@ +--[[ + Script Name : dd_dot.lua + Script Purpose : Generic damage + 1 effect script + Script Author : John Adams + Script Date : 2008.12.02 +--]] + +function cast(Caster, Target, DDType, MinDDVal, MaxDDVal, EffectType, DamageType, MinEffectVal, MaxEffectVal) + + -- DD component + if MaxDDVal ~= nil and MinDDVal < MaxDDVal then + dmgAmount = math.random(MinDDVal, MaxDDVal) + SpellDamage(Target, DDType, dmgAmount) + --AddHate(Caster, Target, dmgAmount) + else + SpellDamage(Target, DDType, MinDDVal) + --AddHate(Caster, Target, MinDDVal) + end + + -- Effect component - only process this code if there is an EffectType param + if EffectType ~= nil then + + -- Determine if there is a range to effect values + if MaxEffectVal ~= nil and MinEffectVal < MaxEffectVal then + EffectValue = math.random(MinEffectVal, MaxEffectVal) + else + EffectValue = MinEffectVal + end + + -- Determine EffectType - either a DamageType or a String value passed as param 4 + if EffectType == "heal" then + ModifyHP(Caster, EffectValue) + else + SpellDamage(Target, DamageType, EffectValue) + end + + end + +end + +function tick(Caster, Target, DDType, MinDDVal, MaxDDVal, EffectType, DamageType, MinEffectVal, MaxEffectVal) + + if MaxEffectVal ~= nil and MinEffectVal < MaxEffectVal then + EffectValue = math.random(MinEffectVal, MaxEffectVal) + else + EffectValue = MinEffectVal + end + + if EffectType == "heal" then + ModifyHP(Caster, EffectValue) + else + SpellDamage(Target, DamageType, EffectValue) + end + +end diff --git a/server/Spells/Fighter/Brawler/Monk/ColdFist.lua b/server/Spells/Fighter/Brawler/Monk/ColdFist.lua new file mode 100644 index 000000000..d1d72cadb --- /dev/null +++ b/server/Spells/Fighter/Brawler/Monk/ColdFist.lua @@ -0,0 +1,55 @@ +--[[ + Script Name : dd_dot.lua + Script Purpose : Generic damage + 1 effect script + Script Author : John Adams + Script Date : 2008.12.02 +--]] + +function cast(Caster, Target, DDType, MinDDVal, MaxDDVal, EffectType, DamageType, MinEffectVal, MaxEffectVal) + + -- DD component + if MaxDDVal ~= nil and MinDDVal < MaxDDVal then + dmgAmount = math.random(MinDDVal, MaxDDVal) + SpellDamage(Target, DDType, dmgAmount) + --AddHate(Caster, Target, dmgAmount) + else + SpellDamage(Target, DDType, MinDDVal) + --AddHate(Caster, Target, MinDDVal) + end + + -- Effect component - only process this code if there is an EffectType param + if EffectType ~= nil then + + -- Determine if there is a range to effect values + if MaxEffectVal ~= nil and MinEffectVal < MaxEffectVal then + EffectValue = math.random(MinEffectVal, MaxEffectVal) + else + EffectValue = MinEffectVal + end + + -- Determine EffectType - either a DamageType or a String value passed as param 4 + if EffectType == "heal" then + ModifyHP(Caster, EffectValue) + else + SpellDamage(Target, DamageType, EffectValue) + end + + end + +end + +function tick(Caster, Target, DDType, MinDDVal, MaxDDVal, EffectType, DamageType, MinEffectVal, MaxEffectVal) + + if MaxEffectVal ~= nil and MinEffectVal < MaxEffectVal then + EffectValue = math.random(MinEffectVal, MaxEffectVal) + else + EffectValue = MinEffectVal + end + + if EffectType == "heal" then + ModifyHP(Caster, EffectValue) + else + SpellDamage(Target, DamageType, EffectValue) + end + +end diff --git a/server/Spells/Fighter/Brawler/Monk/CrescentStrike.lua b/server/Spells/Fighter/Brawler/Monk/CrescentStrike.lua new file mode 100644 index 000000000..66a6879de --- /dev/null +++ b/server/Spells/Fighter/Brawler/Monk/CrescentStrike.lua @@ -0,0 +1,16 @@ +--[[ + Script Name : Spells/Fighter/Brawler/Monk/CrescentStrike.lua + Script Author : Jabantiz + Script Date : 2014.01.12 06:01:39 + Script Purpose : + : +--]] + +function cast(Caster, Target, DmgType, MinVal, MaxVal) + -- Inflicts 31 - 52 magic damage on targets in Area of Effect + if MaxVal ~= nil and MinVal < MaxVal then + SpellDamage(Target, DmgType, math.random(MinVal, MaxVal)) + else + SpellDamage(Target, DmgType, MinVal) + end +end diff --git a/server/Spells/Fighter/Brawler/Monk/CrouchingTiger.lua b/server/Spells/Fighter/Brawler/Monk/CrouchingTiger.lua new file mode 100644 index 000000000..c9aaf7d05 --- /dev/null +++ b/server/Spells/Fighter/Brawler/Monk/CrouchingTiger.lua @@ -0,0 +1,43 @@ +--[[ + Script Name : Spells/Fighter/Brawler/Monk/CrouchingTiger.lua + Script Author : Jabantiz + Script Date : 2014.01.12 04:01:06 + Script Purpose : + : +--]] + +function cast(Caster, Target, DmgReduction, Avoid, Deflect, DefSkills, OffSkills, Agg, ArcaneMit, Armor) + -- Reduces physical damage done to caster by 5% + AddSpellBonus(Target, 313, DmgReduction) -- Not sure on the stat + + -- Adds 1.3% to base avoidance. + AddSpellBonus(Target, 696, Avoid) + + -- Caster will deflect 9.0% of incoming attacks. + AddSpellBonus(Target, 670, Deflect) -- Not sure about the stat + + -- Increases Parry of caster by 1.6 + -- Increases Deflection and Defense of caster by 1.6 + AddSkillBonus(Target, GetSkillIDByName("Parry"), DefSkills) + AddSkillBonus(Target, GetSkillIDByName("Deflection"), DefSkills) + AddSkillBonus(Target, GetSkillIDByName("Defense"), DefSkills) + + -- Decreases Crushing, Piercing and Slashing of caster by 1.8 + AddSkillBonus(Target, GetSkillIDByName("Crushing"), OffSkills) + AddSkillBonus(Target, GetSkillIDByName("Piercing"), OffSkills) + AddSkillBonus(Target, GetSkillIDByName("Slashing"), OffSkills) + + -- Increases Aggression of caster by 1.0 + AddSkillBonus(Target, GetSkillIDByName("Aggression"), Agg) + + -- Increases Mitigation of caster vs arcane damage by 138 + AddSpellBonus(Target, 203, ArcaneMit) + + -- Increases the caster's effectiveness of worn armor vs physical damage by 25% + AddSpellBonus(Target, 678, Armor) +end + +function remove(Caster, Target) + RemoveSpellBonus(Target) + RemoveSkillBonus(Target) +end diff --git a/server/Spells/Fighter/Brawler/Monk/DragonRage.lua b/server/Spells/Fighter/Brawler/Monk/DragonRage.lua new file mode 100644 index 000000000..bfdc9fbbc --- /dev/null +++ b/server/Spells/Fighter/Brawler/Monk/DragonRage.lua @@ -0,0 +1,11 @@ +--[[ + Script Name : Spells/Fighter/Brawler/Monk/DragonRage.lua + Script Author : neatz09 + Script Date : 2019.10.11 09:10:38 + Script Purpose : + : +--]] + +-- Info from spell_display_effects (remove from script when done) +-- On a melee hit this spell may cast Dragon Stance on target of attack. Triggers about 10.0 times per minute. +-- Increases Threat to target by 1,879 diff --git a/server/Spells/Fighter/Brawler/Monk/Dragonfire.lua b/server/Spells/Fighter/Brawler/Monk/Dragonfire.lua new file mode 100644 index 000000000..25f624593 --- /dev/null +++ b/server/Spells/Fighter/Brawler/Monk/Dragonfire.lua @@ -0,0 +1,20 @@ +--[[ + Script Name : Spells/Fighter/Brawler/Monk/Dragonfire.lua + Script Author : neatz09 (edited by vo1d) + Script Date : 2019.10.10 09:10:44 + Script Purpose : + : +--]] + +function cast(Caster, Target, DoTType, MinVal, MaxVal, AbilityCastSpeed) + if Target ~= Caster then + SpellDamage(Target, DoTType, MinVal, MaxVal) + + -- Decreases Ability Casting Speed of targets in Area of Effect by 27.0% + AddSpellBonus(Target, 664, AbilityCastSpeed) + end +end + +function tick(Caster, Target, DoTType, MinVal, MaxVal) + SpellDamage(Target, DoTType, MinVal, MaxVal) +end \ No newline at end of file diff --git a/server/Spells/Fighter/Brawler/Monk/EverburningFlame.lua b/server/Spells/Fighter/Brawler/Monk/EverburningFlame.lua new file mode 100644 index 000000000..ba33a717b --- /dev/null +++ b/server/Spells/Fighter/Brawler/Monk/EverburningFlame.lua @@ -0,0 +1,17 @@ +--[[ + Script Name : Spells/Fighter/Brawler/Monk/EverburningFlame.lua + Script Author : Dello + Script Date : 14/06/2014 + Script Purpose : + : +--]] +function cast(Caster, Target, AttackSpeed) + + AddSpellBonus(Target, 617, AttackSpeed) +end + +function remove(Caster, Target) + RemoveSpellBonus(Target) +end + + diff --git a/server/Spells/Fighter/Brawler/Monk/FallofthePhoenix.lua b/server/Spells/Fighter/Brawler/Monk/FallofthePhoenix.lua new file mode 100644 index 000000000..06d286d92 --- /dev/null +++ b/server/Spells/Fighter/Brawler/Monk/FallofthePhoenix.lua @@ -0,0 +1,24 @@ +--[[ + Script Name : Spells/Fighter/Brawler/Monk/FallofthePhoenix.lua + Script Author : Dello + Script Date : 15/06/2014 + Script Purpose : + : +--]] + +function cast(Caster, Target, Chance) + -- Die animtaion and restricts movement + SetServerControlFlag(Caster, 5, 1, 1); + + local roll = math.random(1, 100); + if roll <= Chance then + ClearHate(Target, Caster) + SendMessage(Caster, "Your feign death succeeded", "yellow") + else + SendMessage(Caster, "Your feign death attempt failed", "yellow") + end +end + +function remove(Caster, Target) + SetServerControlFlag(Caster, 5, 1, 0); +end diff --git a/server/Spells/Fighter/Brawler/Monk/FiveRings.lua b/server/Spells/Fighter/Brawler/Monk/FiveRings.lua new file mode 100644 index 000000000..5f90e9573 --- /dev/null +++ b/server/Spells/Fighter/Brawler/Monk/FiveRings.lua @@ -0,0 +1,31 @@ +--[[ + Script Name : Spells/Fighter/Brawler/Monk/FiveRings.lua + Script Author : Jabantiz + Script Date : 2014.01.13 07:01:22 + Script Purpose : + : +--]] + +function cast(Caster, Target, DmgType, MinVal, MaxVal) + -- Inflicts 34 - 57 melee damage on target + -- Inflicts 34 - 57 melee damage on target + -- Inflicts 34 - 57 melee damage on target + -- Inflicts 34 - 57 melee damage on target + -- Inflicts 34 - 57 melee damage on target + if MaxVal ~= nil and MinVal < MaxVal then + SpellDamage(Target, DmgType, math.random(MinVal, MaxVal)) + SpellDamage(Target, DmgType, math.random(MinVal, MaxVal)) + SpellDamage(Target, DmgType, math.random(MinVal, MaxVal)) + SpellDamage(Target, DmgType, math.random(MinVal, MaxVal)) + SpellDamage(Target, DmgType, math.random(MinVal, MaxVal)) + else + SpellDamage(Target, DmgType, MinVal) + SpellDamage(Target, DmgType, MinVal) + SpellDamage(Target, DmgType, MinVal) + SpellDamage(Target, DmgType, MinVal) + SpellDamage(Target, DmgType, MinVal) + end + + +end + diff --git a/server/Spells/Fighter/Brawler/Monk/FlowLikeWind.lua b/server/Spells/Fighter/Brawler/Monk/FlowLikeWind.lua new file mode 100644 index 000000000..3a9050eaa --- /dev/null +++ b/server/Spells/Fighter/Brawler/Monk/FlowLikeWind.lua @@ -0,0 +1,27 @@ +--[[ + Script Name : Spells/Fighter/Brawler/Monk/FlowLikeWind.lua + Script Author : Jabantiz + Script Date : 2014.01.12 05:01:24 + Script Purpose : + : +--]] +--last tier has 1.4% potency +function cast(Caster, Target, BonusAmt, DefSkills, SkillAmt) + -- Increases Attack Speed of caster by 10.9 + AddSpellBonus(Target, 617, BonusAmt) + + -- Decreases Defense of caster by 1.8 + AddSkillBonus(Target, GetSkillIDByName("Defense"), DefSkills) + + -- Increases Ranged, Crushing, Piercing and Slashing of caster by 2.4 + AddSkillBonus(Target, GetSkillIDByName("Ranged"), SkillAmt) + AddSkillBonus(Target, GetSkillIDByName("Slashing"), SkillAmt) + AddSkillBonus(Target, GetSkillIDByName("Piercing"), SkillAmt) + AddSkillBonus(Target, GetSkillIDByName("Crushing"), SkillAmt) + AddSpellBonus(Target, 659, 20) --potency gain? + +end + +function remove(Caster, Target) + RemoveSpellBonus(Target) +end diff --git a/server/Spells/Fighter/Brawler/Monk/Focus.lua b/server/Spells/Fighter/Brawler/Monk/Focus.lua new file mode 100644 index 000000000..130b94e21 --- /dev/null +++ b/server/Spells/Fighter/Brawler/Monk/Focus.lua @@ -0,0 +1,18 @@ +--[[ + Script Name : Heal (Spell Type) + Script Purpose : Generic script for healing spells + Script Author : John Adams + Script Date : 2008.12.03 + Script Note : +--]] + +function cast(Caster, Target, HealType, HealMinVal, HealMaxVal) + + -- Heal Component + if HealMinVal < HealMaxVal then + ModifyHP(Caster, math.random(HealMinVal, HealMaxVal)) + else + ModifyHP(Caster, HealMinVal) + end + +end diff --git a/server/Spells/Fighter/Brawler/Monk/FrozenPalm.lua b/server/Spells/Fighter/Brawler/Monk/FrozenPalm.lua new file mode 100644 index 000000000..1032272d3 --- /dev/null +++ b/server/Spells/Fighter/Brawler/Monk/FrozenPalm.lua @@ -0,0 +1,16 @@ +--[[ + Script Name : Spells/Fighter/Brawler/Monk/FrozenPalm.lua + Script Author : Jabantiz + Script Date : 2014.01.12 04:01:39 + Script Purpose : + : +--]] + +function cast(Caster, Target, DmgType, MinVal, MaxVal) + -- Inflicts 11 - 18 cold damage on target + if MaxVal ~= nil and MinVal < MaxVal then + SpellDamage(Target, DmgType, math.random(MinVal, MaxVal)) + else + SpellDamage(Target, DmgType, MinVal) + end +end diff --git a/server/Spells/Fighter/Brawler/Monk/InnerCalm.lua b/server/Spells/Fighter/Brawler/Monk/InnerCalm.lua new file mode 100644 index 000000000..00dcc6904 --- /dev/null +++ b/server/Spells/Fighter/Brawler/Monk/InnerCalm.lua @@ -0,0 +1,22 @@ +--[[ + Script Name : Spells/Fighter/Brawler/Monk/InnerCalm.lua + Script Author : Jabantiz + Script Date : 2014.01.13 06:01:08 + Script Purpose : + : +--]] + +function cast(Caster, Target, BonusAmt, ResistAmt) + -- Increases STR of caster by 9.4 + AddSpellBonus(Target, 0, BonusAmt) + + -- Increases Mitigation of caster vs elemental, noxious and arcane damage by 211 + AddSpellBonus(Target, 201, ResistAmt) + AddSpellBonus(Target, 202, ResistAmt) + AddSpellBonus(Target, 203, ResistAmt) + +end + +function remove(Caster, Target) + RemoveSpellBonus(Target) +end diff --git a/server/Spells/Fighter/Brawler/Monk/LightningPalm.lua b/server/Spells/Fighter/Brawler/Monk/LightningPalm.lua new file mode 100644 index 000000000..3638f1810 --- /dev/null +++ b/server/Spells/Fighter/Brawler/Monk/LightningPalm.lua @@ -0,0 +1,27 @@ +--[[ + Script Name : Spells/Fighter/Brawler/Monk/LightningPalm.lua + Script Author : Jabantiz + Script Date : 2014.03.11 07:03:52 + Script Purpose : + : +--]] + +function cast(Caster, Target, DmgType, MinVal, MaxVal) + -- Grants a total of 8 triggers of the spell. + SetSpellTriggerCount(8, 1) + + -- On a melee hit this spell will cast Jolting Strike on target of attack. + AddProc(Target, 3, 100) +end + +function proc(Caster, Target, Type, DmgType, MinVal, MaxVal) + if Type == 3 then + -- Inflicts 13 - 22 magic damage on target + ProcDamage(Caster, Target, "Jolting Strike", DmgType, MinVal, MaxVal) + RemoveTriggerFromSpell(1) + end +end + +function remove(Caster, Target) + RemoveProc(Target) +end diff --git a/server/Spells/Fighter/Brawler/Monk/Mend.lua b/server/Spells/Fighter/Brawler/Monk/Mend.lua new file mode 100644 index 000000000..197be59dc --- /dev/null +++ b/server/Spells/Fighter/Brawler/Monk/Mend.lua @@ -0,0 +1,17 @@ +--[[ + Script Name : Spells/Fighter/Brawler/Monk/Mend.lua + Script Author : Dello + Script Date : 19/07/2014 + Script Purpose : + : +--]] + +function cast(Caster, Target, MinVal, MaxVal, CureLvls) +SpellHeal("Heal", MinVal, MaxVal, 0, 2, 1) + -- This effect cannot be critically applied. + -- The healing of this spell cannot be modified except by direct means + + + -- Dispels 7 levels of noxious hostile effects on target + CureByType(CureLvls, 3); +end \ No newline at end of file diff --git a/server/Spells/Fighter/Brawler/Monk/Mendpct.lua b/server/Spells/Fighter/Brawler/Monk/Mendpct.lua new file mode 100644 index 000000000..6ba3c4d19 --- /dev/null +++ b/server/Spells/Fighter/Brawler/Monk/Mendpct.lua @@ -0,0 +1,16 @@ +--[[ + Script Name : Spells/Fighter/Brawler/Monk/Mendpct.lua + Script Author : neatz09 + Script Date : 2019.10.19 03:10:18 + Script Purpose : + : +--]] + +function cast(Caster, Target, CureLvls, MinVal, MaxVal) +-- Dispels 7 levels of noxious hostile effects on target +CureByType(CureLvls, 3); +--Heals target for 8.1 - 9.9% of max health +SpellHeal("Heal", GetPCTOfHP(Caster, MinVal), GetPCTOfHP(Caster, MaxVal),0 , 2, 1) + + +end diff --git a/server/Spells/Fighter/Brawler/Monk/MountainStance.lua b/server/Spells/Fighter/Brawler/Monk/MountainStance.lua new file mode 100644 index 000000000..7e06d986d --- /dev/null +++ b/server/Spells/Fighter/Brawler/Monk/MountainStance.lua @@ -0,0 +1,21 @@ +--[[ + Script Name : Spells/Fighter/Brawler/Monk/MountainStance.lua + Script Author : Dello + Script Date : 14/06/2014 + Script Purpose : + : +--]] + + +function cast(Caster, Target, BonusAmt) + AddControlEffect(Target, 3) + AddControlEffect(Target, 5) + AddSpellBonus(Target, 200, BonusAmt) +end + + +function remove(Caster, Target) + RemoveControlEffect(Target, 3) + RemoveControlEffect(Target, 5) + RemoveSpellBonus(Target) +end diff --git a/server/Spells/Fighter/Brawler/Monk/OutwardCalm.lua b/server/Spells/Fighter/Brawler/Monk/OutwardCalm.lua new file mode 100644 index 000000000..8298fecd3 --- /dev/null +++ b/server/Spells/Fighter/Brawler/Monk/OutwardCalm.lua @@ -0,0 +1,10 @@ +--[[ + Script Name : Spells/Fighter/Brawler/Monk/OutwardCalm.lua + Script Author : neatz09 + Script Date : 2019.10.11 09:10:56 + Script Purpose : + : +--]] + +-- Info from spell_display_effects (remove from script when done) +-- Wards caster against 2789 points of elemental, noxious and arcane damage diff --git a/server/Spells/Fighter/Brawler/Monk/Peel.lua b/server/Spells/Fighter/Brawler/Monk/Peel.lua new file mode 100644 index 000000000..73ec87a92 --- /dev/null +++ b/server/Spells/Fighter/Brawler/Monk/Peel.lua @@ -0,0 +1,16 @@ +--[[ + Script Name : Spells/Fighter/Brawler/Monk/Peel.lua + Script Author : neatz09 + Script Date : 2019.10.14 07:10:23 + Script Purpose : + : +--]] + +-- Info from spell_display_effects (remove from script when done) +-- Applies Wane on termination. Lasts for 20.0 seconds. +-- Increases Threat to target by 4,946 - 5,925 instantly and by 3,345 - 3,969 every 4 seconds thereafter +-- Forces target to change their selected target to caster instantly and every 2 seconds. +-- Increases threat priority of target by 4 positions +-- Increases Threat to target by 227 - 278 instantly and by 142 - 173 every 2 seconds thereafter +-- Prevents target from changing targets +-- Must be not at the top of the hate list of your current target. diff --git a/server/Spells/Fighter/Brawler/Monk/PerfectSerenity.lua b/server/Spells/Fighter/Brawler/Monk/PerfectSerenity.lua new file mode 100644 index 000000000..89fbc6ca6 --- /dev/null +++ b/server/Spells/Fighter/Brawler/Monk/PerfectSerenity.lua @@ -0,0 +1,33 @@ +--[[ + Script Name : Spells/Fighter/Brawler/Monk/PerfectSerenity.lua + Script Author : John Adams + Script Date : 2013.08.11 06:08:27 + Script Purpose : + : +--]] + +function cast(Caster, Target) + -- code to cast the spell + Say(Caster, "Whoops! Guess this is not implemented yet!") + +-- Info from spell_display_effects (remove from script when done) +-- Gives caster a 50.0% chance to strikethrough a successful avoidance check +-- On a melee hit this spell may cast Serene Strike on target of attack. Lasts for 12.0 seconds. Triggers about 2.4 times per minute. +-- Increases Multi Attack Chance of caster by 15.0 +-- Inflicts 586 - 1088 crushing damage on target +-- Cannot be modified except by direct means +-- Gives caster an extra 20.0% mitigation to their worn armor +-- Caster will deflect 5.0% of incoming attacks. +-- Increases caster's chance to block by 15.0% +-- Cannot be modified except by direct means + +end + +function tick(Caster, Target) + -- code to process each call_frequency (tick) set in spell_tiers +end + +function remove(Caster, Target) + -- code to remove the spell +end + diff --git a/server/Spells/Fighter/Brawler/Monk/RisingDragon.lua b/server/Spells/Fighter/Brawler/Monk/RisingDragon.lua new file mode 100644 index 000000000..935424a63 --- /dev/null +++ b/server/Spells/Fighter/Brawler/Monk/RisingDragon.lua @@ -0,0 +1,24 @@ +--[[ + Script Name : Spells/Fighter/Brawler/Monk/RisingDragon.lua + Script Author : Dello Updated by neatz09 + Script Date : 13/06/2014 9/11/19 + Script Purpose : + : +--]] + +function cast(Caster, Target, DmgType, MinVal, MaxVal, DoTType, MinVal2, MaxVal2) + + if MaxVal ~= nil and MinVal < MaxVal then + SpellDamage(Target, DmgType, math.random(MinVal, MaxVal)) + else + SpellDamage(Target, DmgType, MinVal) + + SpellDamage(Target, DoTType, MinVal, MaxVal) + + end +end + +function tick(Caster, Target, DmgType, MinVal, MaxVal, DoTType, MinVal2, MaxVal2) + SpellDamage(Target, DoTType, MinVal, MaxVal) +end + diff --git a/server/Spells/Fighter/Brawler/Monk/RisingPhoenix.lua b/server/Spells/Fighter/Brawler/Monk/RisingPhoenix.lua new file mode 100644 index 000000000..3a151897e --- /dev/null +++ b/server/Spells/Fighter/Brawler/Monk/RisingPhoenix.lua @@ -0,0 +1,29 @@ +--[[ + Script Name : Spells/Fighter/Brawler/Monk/RisingPhoenix.lua + Script Author : Jabantiz + Script Date : 2014.01.13 05:01:06 + Script Purpose : + : +--]] + +function cast(Caster, Target, DmgType, MinVal, MaxVal) + -- Inflicts 54 - 90 melee damage on target + if MaxVal ~= nil and MinVal < MaxVal then + SpellDamage(Target, DmgType, math.random(MinVal, MaxVal)) + else + SpellDamage(Target, DmgType, MinVal) + end + + if not IsEpic(Target) then + Knocback(Caster, Target, 4000) + BlurVision(Target, 1.0) + AddControlEffect(Target, 4) + AddSpellTimer(1500, "RemoveKnockback") + end +end + +function RemoveKnockback(Caster, Target) + BlurVision(Target, 0.0) + RemoveControlEffect(Target, 4) +end + diff --git a/server/Spells/Fighter/Brawler/Monk/RoundhouseKick.lua b/server/Spells/Fighter/Brawler/Monk/RoundhouseKick.lua new file mode 100644 index 000000000..e495b0240 --- /dev/null +++ b/server/Spells/Fighter/Brawler/Monk/RoundhouseKick.lua @@ -0,0 +1,16 @@ +--[[ + Script Name : Spells/Fighter/Brawler/Monk/RoundhouseKick.lua + Script Author : Jabantiz + Script Date : 2014.01.12 06:01:03 + Script Purpose : + : +--]] + +function cast(Caster, Target, DmgType, MinVal, MaxVal) + -- Inflicts 14 - 23 slashing damage on target + if MaxVal ~= nil and MinVal < MaxVal then + SpellDamage(Target, DmgType, math.random(MinVal, MaxVal)) + else + SpellDamage(Target, DmgType, MinVal) + end +end diff --git a/server/Spells/Fighter/Brawler/Monk/SilentPalm.lua b/server/Spells/Fighter/Brawler/Monk/SilentPalm.lua new file mode 100644 index 000000000..76fd362c0 --- /dev/null +++ b/server/Spells/Fighter/Brawler/Monk/SilentPalm.lua @@ -0,0 +1,26 @@ +--[[ + Script Name : Spells/Fighter/Brawler/Monk/SilentPalm.lua + Script Author : Dello + Script Date : 16/06/2014 + Script Purpose : + : +--]] + + +function cast(Caster, Target, DmgType, MinVal, MaxVal) + if MaxVal ~= nil and MinVal < MaxVal then + SpellDamage(Target, DmgType, math.random(MinVal, MaxVal)) + else + SpellDamage(Target, DmgType, MinVal) + end + + if not IsEpic(Target) then + AddControlEffect(Target, 2) + end +end + +function remove(Caster, Target) + RemoveControlEffect(Target, 2) +end + + diff --git a/server/Spells/Fighter/Brawler/Monk/SilentThreat.lua b/server/Spells/Fighter/Brawler/Monk/SilentThreat.lua new file mode 100644 index 000000000..05741b03a --- /dev/null +++ b/server/Spells/Fighter/Brawler/Monk/SilentThreat.lua @@ -0,0 +1,16 @@ +--[[ + Script Name : Spells/Fighter/Brawler/Monk/SilentThreat.lua + Script Author : Jabantiz + Script Date : 2014.01.13 07:01:52 + Script Purpose : + : +--]] + +function cast(Caster, Target, MinVal, MaxVal) + -- Increases Threat to target by 355 - 434 + if MaxVal ~= nil and MinVal < MaxVal then + AddHate(Caster, Target, math.random(MinVal, MaxVal), 1) + else + AddHate(Caster, Target, MinVal, 1) + end +end diff --git a/server/Spells/Fighter/Brawler/Monk/Stare.lua b/server/Spells/Fighter/Brawler/Monk/Stare.lua new file mode 100644 index 000000000..a0c50c1c1 --- /dev/null +++ b/server/Spells/Fighter/Brawler/Monk/Stare.lua @@ -0,0 +1,30 @@ +--[[ + Script Name : taunt.lua + Script Purpose : Generic Taunt script + Script Author : John Adams + Script Date : 2008.12.07 +--]] + +function cast(Caster, Target, TauntType, MinTauntVal, MaxTauntVal) + -- Taunt component + if MaxTauntVal ~= nil and MinTauntVal < MaxTauntVal then + hateAmount = math.random(MinTauntVal, MaxTauntVal) + AddHate(Caster, Target, hateAmount) + else + AddHate(Caster, Target, MinTauntVal) + end +end + +function tick(Caster, Target, TauntType, MinTauntVal, MaxTauntVal) + if MaxTauntVal ~= nil and MinTauntVal < MaxTauntVal then + hateAmount = math.random(MinTauntVal, MaxTauntVal) + AddHate(Caster, Target, hateAmount) + else + AddHate(Caster, Target, MinTauntVal) + end +end + + +function remove(Caster, Target, TauntType, MinTauntVal, MaxTauntVal) + +end \ No newline at end of file diff --git a/server/Spells/Fighter/Brawler/Monk/StrikingCobra.lua b/server/Spells/Fighter/Brawler/Monk/StrikingCobra.lua new file mode 100644 index 000000000..17790cde2 --- /dev/null +++ b/server/Spells/Fighter/Brawler/Monk/StrikingCobra.lua @@ -0,0 +1,20 @@ +--[[ + Script Name : Spells/Fighter/Brawler/Monk/StrikingCobra.lua + Script Author : Jabantiz + Script Date : 2014.01.13 02:01:18 + Script Purpose : + : +--]] + +function cast(Caster, Target, DmgType, MinVal, MaxVal, SkillAmt) + -- Inflicts 49 - 82 melee damage on target + if MaxVal ~= nil and MinVal < MaxVal then + SpellDamage(Target, DmgType, math.random(MinVal, MaxVal)) + else + SpellDamage(Target, DmgType, MinVal) + end + + -- Decreases Defense of target by 1.3 + AddSkillBonus(Target, GetSkillIDByName("Defense"), SkillAmt) + +end diff --git a/server/Spells/Fighter/Brawler/Monk/TranquilVision.lua b/server/Spells/Fighter/Brawler/Monk/TranquilVision.lua new file mode 100644 index 000000000..5bbe0c29c --- /dev/null +++ b/server/Spells/Fighter/Brawler/Monk/TranquilVision.lua @@ -0,0 +1,11 @@ +--[[ + Script Name : Spells/Fighter/Brawler/Monk/TranquilVision.lua + Script Author : neatz09 + Script Date : 2019.10.11 09:10:04 + Script Purpose : + : +--]] + +-- Info from spell_display_effects (remove from script when done) +-- Grants target a 13% chance of making an additional attempt to avoid being hit by a melee attack using the caster's avoidance. +-- Increases Deflection of caster by 2.8 diff --git a/server/Spells/Fighter/Brawler/Monk/Tsunami.lua b/server/Spells/Fighter/Brawler/Monk/Tsunami.lua new file mode 100644 index 000000000..aa0759e56 --- /dev/null +++ b/server/Spells/Fighter/Brawler/Monk/Tsunami.lua @@ -0,0 +1,24 @@ +--[[ + Script Name : Spells/Fighter/Brawler/Monk/Tsunami.lua + Script Author : John Adams + Script Date : 2013.08.11 05:08:27 + Script Purpose : + : +--]] + +function cast(Caster, Target) + -- code to cast the spell + Say(Caster, "Whoops! Guess this is not implemented yet!") + +-- Info from spell_display_effects (remove from script when done) + +end + +function tick(Caster, Target) + -- code to process each call_frequency (tick) set in spell_tiers +end + +function remove(Caster, Target) + -- code to remove the spell +end + diff --git a/server/Spells/Fighter/Brawler/Monk/WakingDragon.lua b/server/Spells/Fighter/Brawler/Monk/WakingDragon.lua new file mode 100644 index 000000000..d29827182 --- /dev/null +++ b/server/Spells/Fighter/Brawler/Monk/WakingDragon.lua @@ -0,0 +1,23 @@ +--[[ + Script Name : Spells/Fighter/Brawler/Monk/WakingDragon.lua + Script Author : John Adams + Script Date : 2013.08.11 05:08:41 + Script Purpose : Direct Damage script + : +--]] + +function cast(Caster, Target, DDType, MinDmg, MaxDmg) + + if MaxDmg ~= nil and MinDmg < MaxDmg then + dmgAmount = math.random(MinDmg, MaxDmg) + SpellDamage(Target, DDType, dmgAmount) + else + SpellDamage(Target, DDType, MinDmg) + end + +end + +function remove(Caster, Target, DDType, MinDmg, MaxDmg) + +end + diff --git a/server/Spells/Fighter/Brawler/Monk/WalkingDragon.lua b/server/Spells/Fighter/Brawler/Monk/WalkingDragon.lua new file mode 100644 index 000000000..d1d72cadb --- /dev/null +++ b/server/Spells/Fighter/Brawler/Monk/WalkingDragon.lua @@ -0,0 +1,55 @@ +--[[ + Script Name : dd_dot.lua + Script Purpose : Generic damage + 1 effect script + Script Author : John Adams + Script Date : 2008.12.02 +--]] + +function cast(Caster, Target, DDType, MinDDVal, MaxDDVal, EffectType, DamageType, MinEffectVal, MaxEffectVal) + + -- DD component + if MaxDDVal ~= nil and MinDDVal < MaxDDVal then + dmgAmount = math.random(MinDDVal, MaxDDVal) + SpellDamage(Target, DDType, dmgAmount) + --AddHate(Caster, Target, dmgAmount) + else + SpellDamage(Target, DDType, MinDDVal) + --AddHate(Caster, Target, MinDDVal) + end + + -- Effect component - only process this code if there is an EffectType param + if EffectType ~= nil then + + -- Determine if there is a range to effect values + if MaxEffectVal ~= nil and MinEffectVal < MaxEffectVal then + EffectValue = math.random(MinEffectVal, MaxEffectVal) + else + EffectValue = MinEffectVal + end + + -- Determine EffectType - either a DamageType or a String value passed as param 4 + if EffectType == "heal" then + ModifyHP(Caster, EffectValue) + else + SpellDamage(Target, DamageType, EffectValue) + end + + end + +end + +function tick(Caster, Target, DDType, MinDDVal, MaxDDVal, EffectType, DamageType, MinEffectVal, MaxEffectVal) + + if MaxEffectVal ~= nil and MinEffectVal < MaxEffectVal then + EffectValue = math.random(MinEffectVal, MaxEffectVal) + else + EffectValue = MinEffectVal + end + + if EffectType == "heal" then + ModifyHP(Caster, EffectValue) + else + SpellDamage(Target, DamageType, EffectValue) + end + +end diff --git a/server/Spells/Fighter/Brawler/Monk/WilloftheHeavens.lua b/server/Spells/Fighter/Brawler/Monk/WilloftheHeavens.lua new file mode 100644 index 000000000..2a32f18e8 --- /dev/null +++ b/server/Spells/Fighter/Brawler/Monk/WilloftheHeavens.lua @@ -0,0 +1,18 @@ +--[[ + Script Name : Spells/Fighter/Brawler/Monk/WilloftheHeavens.lua + Script Author : Jabantiz + Script Date : 2014.01.13 06:01:43 + Script Purpose : + : +--]] + +function cast(Caster, Target, DispellLvls) + -- Dispels 15 levels of elemental, noxious and arcane hostile effects on caster + CureByType(DispellLvls, 1) + CureByType(DispellLvls, 2) + CureByType(DispellLvls, 3) +end + +--Makes caster immune to Root effects +--Makes caster immune to Daze effects +--Makes caster immune to Stun effects \ No newline at end of file diff --git a/server/Spells/Fighter/Brawler/Monk/WindWalk.lua b/server/Spells/Fighter/Brawler/Monk/WindWalk.lua new file mode 100644 index 000000000..9da54a425 --- /dev/null +++ b/server/Spells/Fighter/Brawler/Monk/WindWalk.lua @@ -0,0 +1,21 @@ +--[[ + Script Name : Spells/Fighter/Brawler/Monk/WindWalk.lua + Script Author : Jabantiz + Script Date : 2014.07.14 05:07:00 + Script Purpose : + : +--]] + + + +function cast(Caster, Target) + -- Grants invisibility to caster + -- Suspends caster's movement speed enhancements + -- 1 = stealth, 2 = invis + Stealth(2, Target) +end + +function remove(Caster, Target) + -- for stealth use RemoveStealth() + RemoveInvis(Target) +end diff --git a/server/Spells/Fighter/Brawler/PowerStrike.lua b/server/Spells/Fighter/Brawler/PowerStrike.lua new file mode 100644 index 000000000..5f98636d2 --- /dev/null +++ b/server/Spells/Fighter/Brawler/PowerStrike.lua @@ -0,0 +1,23 @@ +--[[ + Script Name : Spells/Fighter/Brawler/PowerStrike.lua + Script Author : Dello + Script Date : 2014.07.10 06:07:45 + Script Purpose : + : +--]] + + +function cast(Caster, Target, DmgType, MinVal, MaxVal, DefSkills) + + AddSkillBonus(Target, GetSkillIDByName("Defense"), DefSkills) + + if MaxVal ~= nil and MinVal < MaxVal then + SpellDamage(Target, DmgType, math.random(MinVal, MaxVal)) + else + SpellDamage(Target, DmgType, MinVal) + end +end + +function remove(Caster, Target) + RemoveSkillBonus(Target) +end \ No newline at end of file diff --git a/server/Spells/Fighter/Brawler/RapidSwings.lua b/server/Spells/Fighter/Brawler/RapidSwings.lua new file mode 100644 index 000000000..4f1ee1689 --- /dev/null +++ b/server/Spells/Fighter/Brawler/RapidSwings.lua @@ -0,0 +1,21 @@ +--[[ + Script Name : Spells/Fighter/Brawler/RapidSwings.lua + Script Author : Dello + Script Date : 19/07/2014 + Script Purpose : + : +--]] + +function cast(Caster, Target, CurrentHP, MinVal, MaxVal, MinHeal, MaxHeal, DispellLvls) + + CurrentHP = GetMaxHP(Caster) + + MinHeal = CurrentHP * (MinVal / 100) + + MaxHeal = CurrentHP * (MaxVal / 100) + + SpellHeal("Heal", MinHeal, MaxHeal, Caster) + + CureByType(DispellLvls, 3) + +end \ No newline at end of file diff --git a/server/Spells/Fighter/Brawler/ShoulderCharge.lua b/server/Spells/Fighter/Brawler/ShoulderCharge.lua new file mode 100644 index 000000000..d4a7d1484 --- /dev/null +++ b/server/Spells/Fighter/Brawler/ShoulderCharge.lua @@ -0,0 +1,28 @@ +--[[ + Script Name : Spells/Fighter/Brawler/ShoulderCharge.lua + Script Author : Dello + Script Date : 2014.07.10 06:07:13 + Script Purpose : + : +--]] + + +function cast(Caster, Target, DmgType, MinVal, MaxVal) + if MaxVal ~= nil and MinVal < MaxVal then + SpellDamage(Target, DmgType, math.random(MinVal, MaxVal)) + else + SpellDamage(Target, DmgType, MinVal) + end + + if not IsEpic(Target) then + AddControlEffect(Target, 4) + BlurVision(Target, 1.0) + Knockback(Caster, Target, 1500) + AddSpellTimer(1500, "RemoveKnockdown") + end +end + +function RemoveKnockdown(Caster, Target) + RemoveControlEffect(Target, 4) + BlurVision(Target, 0.0) +end diff --git a/server/Spells/Fighter/Brawler/TauntingSlap.lua b/server/Spells/Fighter/Brawler/TauntingSlap.lua new file mode 100644 index 000000000..5924c048f --- /dev/null +++ b/server/Spells/Fighter/Brawler/TauntingSlap.lua @@ -0,0 +1,16 @@ +--[[ + Script Name : Spells/Fighter/Brawler/TauntingSlap.lua + Script Author : Dello + Script Date : 2014.07.11 02:07:49 + Script Purpose : + : +--]] + +function cast(Caster, Target, MinVal, MaxVal) + -- Increases Threat to target by 355 - 434 + if MaxVal ~= nil and MinVal < MaxVal then + AddHate(Caster, Target, math.random(MinVal, MaxVal), 1) + else + AddHate(Caster, Target, MinVal, 1) + end +end diff --git a/server/Spells/Fighter/Brawler/ThrustKick.lua b/server/Spells/Fighter/Brawler/ThrustKick.lua new file mode 100644 index 000000000..da3b083fe --- /dev/null +++ b/server/Spells/Fighter/Brawler/ThrustKick.lua @@ -0,0 +1,28 @@ +--[[ + Script Name : Spells/Fighter/Brawler/ThrustKick.lua + Script Author : Dello + Script Date : 2014.07.10 06:07:34 + Script Purpose : + : +--]] + + +function cast(Caster, Target, DmgType, MinVal, MaxVal) + if MaxVal ~= nil and MinVal < MaxVal then + SpellDamage(Target, DmgType, math.random(MinVal, MaxVal)) + else + SpellDamage(Target, DmgType, MinVal) + end + + if not IsEpic(Target) then + AddControlEffect(Target, 4) + BlurVision(Target, 1.0) + Knockback(Caster, Target, 1500) + AddSpellTimer(1500, "RemoveKnockdown") + end +end + +function RemoveKnockdown(Caster, Target) + RemoveControlEffect(Target, 4) + BlurVision(Target, 0.0) +end \ No newline at end of file diff --git a/server/Spells/Fighter/Brawler/ThunderingFists.lua b/server/Spells/Fighter/Brawler/ThunderingFists.lua new file mode 100644 index 000000000..83bba1a2f --- /dev/null +++ b/server/Spells/Fighter/Brawler/ThunderingFists.lua @@ -0,0 +1,23 @@ +--[[ + Script Name : Spells/Fighter/Brawler/ThunderingFists.lua + Script Author : Dello + Script Date : 2014.07.11 02:07:24 + Script Purpose : + : +--]] + +function cast(Caster, Target, DmgType, Dmg) + SetSpellTriggerCount(5, 1) + AddProc(Target, 3, 100) +end + +function proc(Caster, Target, Type, DmgType, Dmg) + if Type == 3 then + ProcDamage(Caster, Target, "Thunder Fist", DmgType, Dmg) + RemoveTriggerFromSpell(1) + end +end + +function remove(Caster, Target) + RemoveProc(Target) +end diff --git a/server/Spells/Fighter/Crusader/DoomJudgment.lua b/server/Spells/Fighter/Crusader/DoomJudgment.lua new file mode 100644 index 000000000..635e0d504 --- /dev/null +++ b/server/Spells/Fighter/Crusader/DoomJudgment.lua @@ -0,0 +1,24 @@ +--[[ + Script Name : Spells/Fighter/Crusader/DoomJudgment.lua + Script Author : John Adams + Script Date : 2013.08.11 06:08:11 + Script Purpose : + : +--]] + +function cast(Caster, Target) + -- code to cast the spell + Say(Caster, "Whoops! Guess this is not implemented yet!") + +-- Info from spell_display_effects (remove from script when done) + +end + +function tick(Caster, Target) + -- code to process each call_frequency (tick) set in spell_tiers +end + +function remove(Caster, Target) + -- code to remove the spell +end + diff --git a/server/Spells/Fighter/Crusader/Paladin/Amends.lua b/server/Spells/Fighter/Crusader/Paladin/Amends.lua new file mode 100644 index 000000000..b0656c173 --- /dev/null +++ b/server/Spells/Fighter/Crusader/Paladin/Amends.lua @@ -0,0 +1,25 @@ +--[[ + Script Name : Spells/Fighter/Crusader/Paladin/Amends.lua + Script Author : John Adams + Script Date : 2013.08.11 06:08:41 + Script Purpose : + : +--]] + +function cast(Caster, Target) + -- code to cast the spell + Say(Caster, "Whoops! Guess this is not implemented yet!") + +-- Info from spell_display_effects (remove from script when done) +-- Transfers 16% of target's current Threat to the caster + +end + +function tick(Caster, Target) + -- code to process each call_frequency (tick) set in spell_tiers +end + +function remove(Caster, Target) + -- code to remove the spell +end + diff --git a/server/Spells/Fighter/Crusader/Paladin/AncientWrath.lua b/server/Spells/Fighter/Crusader/Paladin/AncientWrath.lua new file mode 100644 index 000000000..6add271cc --- /dev/null +++ b/server/Spells/Fighter/Crusader/Paladin/AncientWrath.lua @@ -0,0 +1,29 @@ +--[[ + Script Name : Spells/Fighter/Crusader/Paladin/AncientWrath.lua + Script Author : Jabantiz + Script Date : 2013.12.06 08:12:08 + Script Purpose : + : +--]] + +function cast(Caster, Target, DmgType, MinVal, MaxVal) + -- Stuns targets in Area of Effect + -- If Target is not Epic + if not IsEpic(Target) then + AddControlEffect(Target, 4) + end + + -- Inflicts 66 - 110 divine damage on targets in Area of Effect + if MaxVal ~= nil and MinVal < MaxVal then + SpellDamage(Target, DmgType, math.random(MinVal, MaxVal)) + else + SpellDamage(Target, DmgType, MinVal) + end + + -- Resistibility increases against targets higher than level 29. + +end + +function remove(Caster, Target) + RemoveControlEffect(Target, 4) +end diff --git a/server/Spells/Fighter/Crusader/Paladin/BlessedWeapon.lua b/server/Spells/Fighter/Crusader/Paladin/BlessedWeapon.lua new file mode 100644 index 000000000..21b41893f --- /dev/null +++ b/server/Spells/Fighter/Crusader/Paladin/BlessedWeapon.lua @@ -0,0 +1,44 @@ +--[[ + Script Name : Spells/Fighter/Crusader/Paladin/BlessedWeapon.lua + Script Author : Jabantiz + Script Date : 2013.12.06 12:12:06 + Script Purpose : + : +--]] + +function cast(Caster, Target) + -- On a melee hit this spell may cast Glorious Strike on target of attack. Lasts for 2.0 seconds. Triggers about 1.6 times per minute. + AddProc(Target, 3, 12.5) + Say(Caster, "Not Implemented: stun and bonus damage to undead") +end + +function proc(Caster, Target, Type, DmgType, MinVal, MaxVal, bonusDmgType, bonusDmgMin, bonusDmgMax) + if Type == 3 then + -- Inflicts 43 - 72 divine damage on target + if MaxVal ~= nil and MinVal < MaxVal then + ProcDamage(Caster, Target, "Glorious Strike", DmgType, math.random(MinVal, MaxVal)) + else + ProcDamage(Caster, Target, "Glorious Strike", DmgType, MinVal) + end + + -- Inflicts 37 - 62 divine damage on target + -- If target is undead + --[[ + if undead then + if bonusDmgMax ~= nil and bonusDmgMin < bonusDmgMax then + ProcDamage(Caster, Target, "Glorious Strike", bonusDmgType, math.random(bonusDmgMin, bonusDmgMax)) + else + ProcDamage(Caster, Target, "Glorious Strike", bonusDmgType, bonusDmgMin) + end + end + --]] + + -- Stuns target + -- If Target is not Epic + + end +end + +function remove(Caster, Target) + RemoveProc(Target) +end diff --git a/server/Spells/Fighter/Crusader/Paladin/BlessingofthePaladin.lua b/server/Spells/Fighter/Crusader/Paladin/BlessingofthePaladin.lua new file mode 100644 index 000000000..5001fcb5d --- /dev/null +++ b/server/Spells/Fighter/Crusader/Paladin/BlessingofthePaladin.lua @@ -0,0 +1,27 @@ +--[[ + Script Name : Spells/Fighter/Crusader/Paladin/BlessingofthePaladin.lua + Script Author : neatz09 + Script Date : 2019.10.01 06:10:03 + Script Purpose : + : +--]] + +-- Increases STA of caster by 25.1 +-- Increases STR of caster by 42.3 +-- Increases Mitigation of caster vs elemental, noxious and arcane damage by 1106 + +function cast(Caster, Target, Sta, Str, Mit) + AddSpellBonus(Target, 1, Sta)--Sta + AddSpellBonus(Target, 0, Str)--Str + AddSpellBonus(Target, 201, Mit) + AddSpellBonus(Target, 202, Mit) + AddSpellBonus(Target, 203, Mit) + +end + + +function remove(Caster, Target, Sta, Str, Mit) + RemoveSpellBonus(Target) + +end + diff --git a/server/Spells/Fighter/Crusader/Paladin/Castigate.lua b/server/Spells/Fighter/Crusader/Paladin/Castigate.lua new file mode 100644 index 000000000..e0366b9c8 --- /dev/null +++ b/server/Spells/Fighter/Crusader/Paladin/Castigate.lua @@ -0,0 +1,24 @@ +--[[ + Script Name : Spells/Fighter/Crusader/Paladin/Castigate.lua + Script Author : John Adams + Script Date : 2013.08.11 06:08:18 + Script Purpose : + : +--]] + +function cast(Caster, Target) + -- code to cast the spell + Say(Caster, "Whoops! Guess this is not implemented yet!") + +-- Info from spell_display_effects (remove from script when done) + +end + +function tick(Caster, Target) + -- code to process each call_frequency (tick) set in spell_tiers +end + +function remove(Caster, Target) + -- code to remove the spell +end + diff --git a/server/Spells/Fighter/Crusader/Paladin/Clarion.lua b/server/Spells/Fighter/Crusader/Paladin/Clarion.lua new file mode 100644 index 000000000..d0f48b4e1 --- /dev/null +++ b/server/Spells/Fighter/Crusader/Paladin/Clarion.lua @@ -0,0 +1,22 @@ +--[[ + Script Name : Spells/Fighter/Crusader/Paladin/Clarion.lua + Script Author : Dello + Script Date : 19/07/2014 + Script Purpose : +--]] + +function cast(Caster, Target, MinVal, MaxVal) + if MaxVal ~= nil and MinVal < MaxVal then + AddHate(Caster, Target, math.random(MinVal, MaxVal), 1) + else + AddHate(Caster, Target, MinVal, 1) + end +end + +function tick(Caster, Target, MinVal, MaxVal, MinVal, MaxVal) + if MaxVal ~= nil and MinVal < MaxVal then + AddHate(Caster, Target, math.random(MinVal, MaxVal), 1) + else + AddHate(Caster, Target, MinVal, 1) + end +end \ No newline at end of file diff --git a/server/Spells/Fighter/Crusader/Paladin/Consecrate.lua b/server/Spells/Fighter/Crusader/Paladin/Consecrate.lua new file mode 100644 index 000000000..cf197410c --- /dev/null +++ b/server/Spells/Fighter/Crusader/Paladin/Consecrate.lua @@ -0,0 +1,11 @@ +--[[ + Script Name : Spells/Fighter/Crusader/Paladin/Consecrate.lua + Script Author : neatz09 + Script Date : 2019.10.08 08:10:05 + Script Purpose : + : +--]] + +-- Info from spell_display_effects (remove from script when done) +-- Applies Consecration. +-- Inflicts 118 - 144 divine damage on targets in Area of Effect diff --git a/server/Spells/Fighter/Crusader/Paladin/Crusade.lua b/server/Spells/Fighter/Crusader/Paladin/Crusade.lua new file mode 100644 index 000000000..e7ee23ae3 --- /dev/null +++ b/server/Spells/Fighter/Crusader/Paladin/Crusade.lua @@ -0,0 +1,24 @@ +--[[ + Script Name : Spells/Fighter/Crusader/Paladin/Crusade.lua + Script Author : Jabantiz + Script Date : 2013.12.07 06:12:50 + Script Purpose : + : +--]] + +function cast(Caster, Target, statBonus, mitBonus, healBonus) + -- Increases WIS of raid and group members (AE) by 9.2 + AddSpellBonus(Target, 3, statBonus) + + -- Increases Mitigation of raid and group members (AE) vs elemental, noxious and arcane damage by 78 + AddSpellBonus(Target, 201, mitBonus) + AddSpellBonus(Target, 202, mitBonus) + AddSpellBonus(Target, 203, mitBonus) + + -- Increases heal amounts of raid members by 2.82%. + AddSpellBonus(Target, 701, healBonus) +end + +function remove(Caster, Target) + RemoveSpellBonus(Target) +end diff --git a/server/Spells/Fighter/Crusader/Paladin/Decree.lua b/server/Spells/Fighter/Crusader/Paladin/Decree.lua new file mode 100644 index 000000000..e5c04aec7 --- /dev/null +++ b/server/Spells/Fighter/Crusader/Paladin/Decree.lua @@ -0,0 +1,19 @@ +--[[ + Script Name : Spells/Fighter/Crusader/Paladin/Decree.lua + Script Author : neatz09 + Script Date : 2019.09.27 10:09:09 + Script Purpose : + : +--]] + + +-- Inflicts 208 - 347 divine damage on target encounter + +function cast(Caster, Target, DmgType, MinVal, MaxVal) + SpellDamage(Target, DmgType, MinVal, MaxVal) + +-- Interrupts target encounter +Interrupt(Caster, Target) +end + + diff --git a/server/Spells/Fighter/Crusader/Paladin/DemonstrationofFaith.lua b/server/Spells/Fighter/Crusader/Paladin/DemonstrationofFaith.lua new file mode 100644 index 000000000..5cf597626 --- /dev/null +++ b/server/Spells/Fighter/Crusader/Paladin/DemonstrationofFaith.lua @@ -0,0 +1,16 @@ +--[[ + Script Name : Spells/Fighter/Crusader/Paladin/DemonstrationofFaith.lua + Script Author : Jabantiz + Script Date : 2013.12.06 06:12:26 + Script Purpose : + : +--]] + +function cast(Caster, Target, WardAmt) + -- Wards target against 179 points of all damage + AddWard(WardAmt) +end + +function remove(Caster, Target) + RemoveWard() +end \ No newline at end of file diff --git a/server/Spells/Fighter/Crusader/Paladin/DevoutSacrament.lua b/server/Spells/Fighter/Crusader/Paladin/DevoutSacrament.lua new file mode 100644 index 000000000..8c1af7929 --- /dev/null +++ b/server/Spells/Fighter/Crusader/Paladin/DevoutSacrament.lua @@ -0,0 +1,21 @@ +--[[ + Script Name : Spells/Fighter/Crusader/Paladin/DevoutSacrament.lua + Script Author : neatz09 + Script Date : 2019.10.12 11:10:51 + Script Purpose : + : +--]] + +-- Heals caster for 31.6 - 38.6% of max health +-- This effect cannot be critically applied. +-- Increases Max Health of caster by 690.3 +-- The healing of this spell cannot be modified except by direct means +function cast(Caster, Target) +AddSpellBonus(Target, 606, BonusAmt) +SpellHeal(Heal, GetPCTOfHP(Target, pctHealMin), GetPCTOfHP(Target, pctHealMax), nil, 2, 1) +end + +function remove(Caster, Target) + RemoveSpellBonus(Target) + +end diff --git a/server/Spells/Fighter/Crusader/Paladin/DivineFavor.lua b/server/Spells/Fighter/Crusader/Paladin/DivineFavor.lua new file mode 100644 index 000000000..f7ee4a21d --- /dev/null +++ b/server/Spells/Fighter/Crusader/Paladin/DivineFavor.lua @@ -0,0 +1,24 @@ +--[[ + Script Name : Spells/Fighter/Crusader/Paladin/DivineFavor.lua + Script Author : John Adams + Script Date : 2013.08.11 06:08:38 + Script Purpose : + : +--]] + +function cast(Caster, Target) + -- code to cast the spell + Say(Caster, "Whoops! Guess this is not implemented yet!") + +-- Info from spell_display_effects (remove from script when done) + +end + +function tick(Caster, Target) + -- code to process each call_frequency (tick) set in spell_tiers +end + +function remove(Caster, Target) + -- code to remove the spell +end + diff --git a/server/Spells/Fighter/Crusader/Paladin/DivineInspiration.lua b/server/Spells/Fighter/Crusader/Paladin/DivineInspiration.lua new file mode 100644 index 000000000..55bb0542d --- /dev/null +++ b/server/Spells/Fighter/Crusader/Paladin/DivineInspiration.lua @@ -0,0 +1,31 @@ +--[[ + Script Name : Spells/Fighter/Crusader/Paladin/DivineInspiration.lua + Script Author : Jabantiz + Script Date : 2013.12.05 11:12:59 + Script Purpose : + : +--]] + +function cast(Caster, Target, DmgType, MinVal, MaxVal) + -- On a hit this spell may cast Divine Strike on target of attack. Triggers about 1.6 times per minute. + AddProc(Target, 3, 12.5) +end + +function proc(Caster, Target, Type, DmgType, MinVal, MaxVal) + if Type == 3 then + -- Inflicts 17 - 28 divine damage on target + if MaxVal ~= nil and MinVal < MaxVal then + ProcDamage(Caster, Target, "Divine Strike", DmgType, math.random(MinVal, MaxVal)) + else + ProcDamage(Caster, Target, "Divine Strike", DmgType, MinVal) + end + + -- Inflicts 17 - 28 divine damage on target + -- If target is undead + Say(Caster, "Not Implemented: Bonus damage to undead") + end +end + +function remove(Caster, Target) + RemoveProc(Target) +end diff --git a/server/Spells/Fighter/Crusader/Paladin/DivineVengeance.lua b/server/Spells/Fighter/Crusader/Paladin/DivineVengeance.lua new file mode 100644 index 000000000..f1c107b00 --- /dev/null +++ b/server/Spells/Fighter/Crusader/Paladin/DivineVengeance.lua @@ -0,0 +1,35 @@ +--[[ + Script Name : Spells/Fighter/Crusader/Paladin/DivineVengeance.lua + Script Author : Jabantiz + Script Date : 2013.12.06 05:12:06 + Script Purpose : + : +--]] + +function cast(Caster, Target, DmgType1, MinVal1, MaxVal1, DmgType2, MinVal2, MaxVal2, DmgType3, MinVal3, MaxVal3) + -- Inflicts 20 - 33 divine damage on target + if MaxVal1 ~= nil and MinVal1 < MaxVal1 then + SpellDamage(Target, DmgType1, math.random(MinVal1, MaxVal1)) + else + SpellDamage(Target, DmgType1, MinVal1) + end + + -- Applies Glorious Strike on termination. Lasts for 2.0 seconds. + -- Stuns target + -- If Target is not Epic + Say(Caster, "Not Implemented: Stun and bonus damage to undead") + + -- Inflicts 47 - 79 divine damage on target + if MaxVal2 ~= nil and MinVal2 < MaxVal2 then + ProcDamage(Caster, Target, "Glorious Strike", DmgType2, math.random(MinVal2, MaxVal2)) + else + ProcDamage(Caster, Target, "Glorious Strike", DmgType2, MinVal2) + end + + -- Inflicts 41 - 68 divine damage on target + -- If target is undead + +end + +function remove(Caster, Target, DmgType1, MinVal1, MaxVal1, DmgType2, MinVal2, MaxVal2, DmgType3, MinVal3, MaxVal3) + end diff --git a/server/Spells/Fighter/Crusader/Paladin/ElixirofResuscitation.lua b/server/Spells/Fighter/Crusader/Paladin/ElixirofResuscitation.lua new file mode 100644 index 000000000..7d7bc6705 --- /dev/null +++ b/server/Spells/Fighter/Crusader/Paladin/ElixirofResuscitation.lua @@ -0,0 +1,25 @@ +--[[ + Script Name : Spells/Fighter/Crusader/Paladin/ElixirofResuscitation.lua + Script Author : neatz09 + Script Date : 2019.10.12 11:10:54 + Script Purpose : + : +--]] + +-- Info from spell_display_effects (remove from script when done) +-- Applies Resurrect on termination. +-- Heals target for 100.0% of max health +-- This effect cannot be critically applied. +-- Applies Revived Sickness on termination. Lasts for 2 minutes. +-- Decreases All Attributes of target by 20.0% +-- If not between levels 1 - 6 +-- Decreases Haste of target by 20.0 +-- If not between levels 1 - 6 +-- Decreases All Attributes of target by 5.0% +-- If between levels 1 - 6 +-- Decreases Haste of target by 5.0 +-- If between levels 1 - 6 +-- Resurrects target with 13% health and power +-- If outside an arena +-- If between levels 1 - 6 +-- If outside an arena diff --git a/server/Spells/Fighter/Crusader/Paladin/FaithStrike.lua b/server/Spells/Fighter/Crusader/Paladin/FaithStrike.lua new file mode 100644 index 000000000..3295e7a07 --- /dev/null +++ b/server/Spells/Fighter/Crusader/Paladin/FaithStrike.lua @@ -0,0 +1,22 @@ +--[[ + Script Name : Spells/Fighter/Crusader/Paladin/FaithStrike.lua + Script Author : Dello + Script Date : 19/07/2014 + Script Purpose : + : +--]] + +function cast(Caster, Target, DDType, MinDmg, MaxDmg, HealAmt) + + if MaxDmg ~= nil and MinDmg < MaxDmg then + dmgAmount = math.random(MinDmg, MaxDmg) + SpellDamage(Target, DDType, dmgAmount) + else + SpellDamage(Target, DDType, MinDmg) + end + + if HealAmt ~= nil then + SpellHeal("Heal", HealAmt, HealAmt, Caster) + end + +end \ No newline at end of file diff --git a/server/Spells/Fighter/Crusader/Paladin/HeroicDash.lua b/server/Spells/Fighter/Crusader/Paladin/HeroicDash.lua new file mode 100644 index 000000000..82f1e4112 --- /dev/null +++ b/server/Spells/Fighter/Crusader/Paladin/HeroicDash.lua @@ -0,0 +1,31 @@ +--[[ + Script Name : Spells/Fighter/Crusader/Paladin/HeroicDash.lua + Script Author : Jabantiz + Script Date : 2013.12.06 07:12:55 + Script Purpose : + : +--]] + +-- Info from spell_display_effects (remove from script when done) + +function cast(Caster, Target, DmgType, MinVal, MaxVal, Hate) + -- Inflicts 19 - 33 divine damage on target + if MaxVal ~= nil and MinVal < MaxVal then + SpellDamage(Target, DmgType, math.random(MinVal, MaxVal)) + else + SpellDamage(Target, DmgType, MinVal) + end + + -- Increases Threat to target by 302 + AddHate(Caster, Target, Hate, 1) + + -- Applies Knockdown. Lasts for 2.5 seconds. + -- Blurs vision of target + -- Throws target back + -- Stuns target + -- Does not affect Epic targets + if not IsEpic(Target) then + Knockback(Caster, Target, 2500) + Say(Caster, "Not Implemented: stun and vision") + end +end diff --git a/server/Spells/Fighter/Crusader/Paladin/HolyAid.lua b/server/Spells/Fighter/Crusader/Paladin/HolyAid.lua new file mode 100644 index 000000000..18f5f7892 --- /dev/null +++ b/server/Spells/Fighter/Crusader/Paladin/HolyAid.lua @@ -0,0 +1,20 @@ +--[[ + Script Name : Spells/Fighter/Crusader/Paladin/HolyAid.lua + Script Author : Jabantiz + Script Date : 2013.12.06 06:12:21 + Script Purpose : + : +--]] + +function cast(Caster, Target, MinVal, MaxVal, PhyBonus) + -- Heals target for 15.4 - 18.8% of max health + -- This effect cannot be critically applied. + SpellHeal(Heal, GetPCTOfHP(Caster, MinVal), GetPCTOfHP(Caster, MaxVal),Caster, 2, 1) + + -- Increases Mitigation of target vs physical damage by 76 + AddSpellBonus(Target, 200, PhyBonus) +end + +function remove(Caster, Target) + RemoveSpellBonus(Target) +end diff --git a/server/Spells/Fighter/Crusader/Paladin/HolyAidT1.lua b/server/Spells/Fighter/Crusader/Paladin/HolyAidT1.lua new file mode 100644 index 000000000..6aa9273ae --- /dev/null +++ b/server/Spells/Fighter/Crusader/Paladin/HolyAidT1.lua @@ -0,0 +1,20 @@ +--[[ + Script Name : Spells/Fighter/Crusader/Paladin/HolyAid.lua + Script Author : Jabantiz + Script Date : 2013.12.06 06:12:21 + Script Purpose : + : +--]] + +function cast(Caster, Target, MinVal, MaxVal, PhyBonus) + -- -- Heals target for 175 - 213 + -- This effect cannot be critically applied. + SpellHeal("heal", MinVal, MaxVal, nil, 2, 1) + + -- Increases Mitigation of target vs physical damage by 76 + AddSpellBonus(Target, 200, PhyBonus) +end + +function remove(Caster, Target) + RemoveSpellBonus(Target) +end diff --git a/server/Spells/Fighter/Crusader/Paladin/HolyAvenger.lua b/server/Spells/Fighter/Crusader/Paladin/HolyAvenger.lua new file mode 100644 index 000000000..4c8febc71 --- /dev/null +++ b/server/Spells/Fighter/Crusader/Paladin/HolyAvenger.lua @@ -0,0 +1,25 @@ +--[[ + Script Name : Spells/Fighter/Crusader/Paladin/HolyAvenger.lua + Script Author : John Adams + Script Date : 2013.08.11 06:08:18 + Script Purpose : + : +--]] + +function cast(Caster, Target) + -- code to cast the spell + Say(Caster, "Whoops! Guess this is not implemented yet!") + +-- Info from spell_display_effects (remove from script when done) +-- Summons a Holy Avenger that transfers life from surrounding enemies to your allies. + +end + +function tick(Caster, Target) + -- code to process each call_frequency (tick) set in spell_tiers +end + +function remove(Caster, Target) + -- code to remove the spell +end + diff --git a/server/Spells/Fighter/Crusader/Paladin/HolyCircle.lua b/server/Spells/Fighter/Crusader/Paladin/HolyCircle.lua new file mode 100644 index 000000000..becf7cbfe --- /dev/null +++ b/server/Spells/Fighter/Crusader/Paladin/HolyCircle.lua @@ -0,0 +1,32 @@ +--[[ + Script Name : Spells/Fighter/Crusader/Paladin/HolyCircle.lua + Script Author : Jabantiz + Script Date : 2013.12.05 09:12:58 + Script Purpose : + : +--]] + +function cast(Caster, Target, DmgType, MinVal, MaxVal, HealVal) + -- Inflicts 25 - 43 divine damage on targets in Area of Effect + if MaxVal ~= nil and MinVal < MaxVal then + SpellDamage(Target, DmgType, math.random(MinVal, MaxVal)) + else + SpellDamage(Target, DmgType, MinVal) + end + + -- Heals group members (AE) for 13 + -- This effect cannot be critically applied. + -- The healing of this spell cannot be modified except by direct means + local group = GetGroup(Caster) + if group == nil then + SpellHeal("Heal", HealVal, HealVal, Caster) + else + for key,value in pairs(group) do + if value ~= nil then + if GetDistance(Caster, value) <= 5 then + SpellHeal("Heal", HealVal, HealVal, value) + end + end + end + end +end \ No newline at end of file diff --git a/server/Spells/Fighter/Crusader/Paladin/HolyGround.lua b/server/Spells/Fighter/Crusader/Paladin/HolyGround.lua new file mode 100644 index 000000000..f6d313124 --- /dev/null +++ b/server/Spells/Fighter/Crusader/Paladin/HolyGround.lua @@ -0,0 +1,24 @@ +--[[ + Script Name : Spells/Fighter/Crusader/Paladin/HolyGround.lua + Script Author : John Adams + Script Date : 2013.08.11 06:08:21 + Script Purpose : + : +--]] + +function cast(Caster, Target) + -- code to cast the spell + Say(Caster, "Whoops! Guess this is not implemented yet!") + +-- Info from spell_display_effects (remove from script when done) + +end + +function tick(Caster, Target) + -- code to process each call_frequency (tick) set in spell_tiers +end + +function remove(Caster, Target) + -- code to remove the spell +end + diff --git a/server/Spells/Fighter/Crusader/Paladin/HolyStrike.lua b/server/Spells/Fighter/Crusader/Paladin/HolyStrike.lua new file mode 100644 index 000000000..427341fd6 --- /dev/null +++ b/server/Spells/Fighter/Crusader/Paladin/HolyStrike.lua @@ -0,0 +1,18 @@ +--[[ + Script Name : Spells/Fighter/Crusader/Paladin/HolyStrike.lua + Script Author : neatz09 + Script Date : 2019.10.08 07:10:08 + Script Purpose : + : +--]] + +-- Inflicts 112 - 186 divine damage on target +function cast(Caster, Target, DmgType, MinVal, MaxVal, DotType, DotMin, DotMax) + SpellDamage(Target, DmgType, MinVal, MaxVal) +end + + +-- Inflicts 45 - 75 divine damage on target every 4 seconds +function tick(Caster, Target) + SpellDamage(Target, DotType, DotMin, DotMax) +end diff --git a/server/Spells/Fighter/Crusader/Paladin/Incite.lua b/server/Spells/Fighter/Crusader/Paladin/Incite.lua new file mode 100644 index 000000000..a0c50c1c1 --- /dev/null +++ b/server/Spells/Fighter/Crusader/Paladin/Incite.lua @@ -0,0 +1,30 @@ +--[[ + Script Name : taunt.lua + Script Purpose : Generic Taunt script + Script Author : John Adams + Script Date : 2008.12.07 +--]] + +function cast(Caster, Target, TauntType, MinTauntVal, MaxTauntVal) + -- Taunt component + if MaxTauntVal ~= nil and MinTauntVal < MaxTauntVal then + hateAmount = math.random(MinTauntVal, MaxTauntVal) + AddHate(Caster, Target, hateAmount) + else + AddHate(Caster, Target, MinTauntVal) + end +end + +function tick(Caster, Target, TauntType, MinTauntVal, MaxTauntVal) + if MaxTauntVal ~= nil and MinTauntVal < MaxTauntVal then + hateAmount = math.random(MinTauntVal, MaxTauntVal) + AddHate(Caster, Target, hateAmount) + else + AddHate(Caster, Target, MinTauntVal) + end +end + + +function remove(Caster, Target, TauntType, MinTauntVal, MaxTauntVal) + +end \ No newline at end of file diff --git a/server/Spells/Fighter/Crusader/Paladin/Judgment.lua b/server/Spells/Fighter/Crusader/Paladin/Judgment.lua new file mode 100644 index 000000000..410a092c3 --- /dev/null +++ b/server/Spells/Fighter/Crusader/Paladin/Judgment.lua @@ -0,0 +1,19 @@ +--[[ + Script Name : Spells/Fighter/Crusader/Paladin/Judgment.lua + Script Author : Jabantiz + Script Date : 2013.12.05 05:12:36 + Script Purpose : + : +--]] + +function cast(Caster, Target, DmgType, MinVal, MaxVal) + -- Interrupts target + Interrupt(Caster, Target) + + -- Inflicts 9 - 14 divine damage on target + if MaxVal ~= nil and MinVal < MaxVal then + SpellDamage(Target, DmgType, math.random(MinVal, MaxVal)) + else + SpellDamage(Target, DmgType, MinVal) + end +end diff --git a/server/Spells/Fighter/Crusader/Paladin/KnightsStance.lua b/server/Spells/Fighter/Crusader/Paladin/KnightsStance.lua new file mode 100644 index 000000000..ebe8a1f51 --- /dev/null +++ b/server/Spells/Fighter/Crusader/Paladin/KnightsStance.lua @@ -0,0 +1,16 @@ +--[[ + Script Name : Spells/Fighter/Crusader/Paladin/KnightsStance.lua + Script Author : neatz09 + Script Date : 2019.10.09 01:10:05 + Script Purpose : + : +--]] + +-- Info from spell_display_effects (remove from script when done) +-- Reduces physical damage done to caster by 5% +-- Increases STA of caster by 11.9 +-- Adds 2.8% to base avoidance. +-- Decreases Slashing, Piercing and Crushing of caster by 1.4 +-- Increases Defense and Aggression of caster by 1.6 +-- Increases Mitigation of caster vs arcane damage by 138 +-- Increases the caster's effectiveness of worn armor vs physical damage by 15% diff --git a/server/Spells/Fighter/Crusader/Paladin/LayonHands.lua b/server/Spells/Fighter/Crusader/Paladin/LayonHands.lua new file mode 100644 index 000000000..e5738e55a --- /dev/null +++ b/server/Spells/Fighter/Crusader/Paladin/LayonHands.lua @@ -0,0 +1,24 @@ +--[[ + Script Name : Spells/Fighter/Crusader/Paladin/LayonHands.lua + Script Author : Jabantiz + Script Date : 2013.12.07 06:12:55 + Script Purpose : + : +--]] + +function cast(Caster, Target, statBonus, mitBonus, HealMin, HealMax) + -- Increases Max Health of target by 96.7 + AddSpellBonus(Target, 500, statBonus) + + -- Increases Mitigation of target vs physical damage by 180 + AddSpellBonus(Target, 204, mitBonus) + AddSpellBonus(Target, 205, mitBonus) + AddSpellBonus(Target, 206, mitBonus) + + -- Heals target for 42.1 - 51.5% of max health + -- This effect cannot be critically applied. + SpellHeal(Heal, GetPCTOfHP(Target, HealMin), GetPCTOfHP(Target, HealMax), nil, 2, 1) +end +function remove(Caster, Target) + RemoveSpellBonus(Target) +end diff --git a/server/Spells/Fighter/Crusader/Paladin/MarrsFavor.lua b/server/Spells/Fighter/Crusader/Paladin/MarrsFavor.lua new file mode 100644 index 000000000..a378c81d9 --- /dev/null +++ b/server/Spells/Fighter/Crusader/Paladin/MarrsFavor.lua @@ -0,0 +1,31 @@ +--[[ + Script Name : Spells/Fighter/Crusader/Paladin/MarrsFavor.lua + Script Author : John Adams + Script Date : 2013.08.11 06:08:25 + Script Purpose : + : +--]] + +function cast(Caster, Target) + -- code to cast the spell + Say(Caster, "Whoops! Guess this is not implemented yet!") + +-- Info from spell_display_effects (remove from script when done) +-- On a combat hit this spell may cast Marr's Fury on target of attack. Triggers about 3.0 times per minute. +-- Inflicts 811 - 991 divine damage on target +-- Reduces physical damage done to caster by 10% +-- When the paladin takes damage, they will heal themselves for 10% of the damage amount. +-- On a spell cast this spell has a 15% chance to cast Marr's Favor on caster. Lasts for 15.0 seconds. +-- Increases the damage of spells by up to 25% of your total strength +-- Cannot be modified except by direct means + +end + +function tick(Caster, Target) + -- code to process each call_frequency (tick) set in spell_tiers +end + +function remove(Caster, Target) + -- code to remove the spell +end + diff --git a/server/Spells/Fighter/Crusader/Paladin/PenitentKick.lua b/server/Spells/Fighter/Crusader/Paladin/PenitentKick.lua new file mode 100644 index 000000000..3da35eb6a --- /dev/null +++ b/server/Spells/Fighter/Crusader/Paladin/PenitentKick.lua @@ -0,0 +1,26 @@ +--[[ + Script Name : Spells/Fighter/Crusader/Paladin/PenitentKick.lua + Script Author : Jabantiz + Script Date : 2013.12.05 07:12:40 + Script Purpose : + : +--]] + +function cast(Caster, Target, DmgType, MinVal, MaxVal) + -- Inflicts 12 - 20 divine damage on target + if MaxVal ~= nil and MinVal < MaxVal then + SpellDamage(Target, DmgType, math.random(MinVal, MaxVal)) + else + SpellDamage(Target, DmgType, MinVal) + end + + -- Applies Knockdown on termination. Lasts for 1.5 seconds. + -- Throws target back + -- Stuns target + -- Blurs vision of target + -- Does not affect Epic targets + if not IsEpic(Target) then + Knockback(Caster, Target, 1500) + Say(Caster, "Not Implemented: Stun and Vision") + end +end diff --git a/server/Spells/Fighter/Crusader/Paladin/PowerCleave.lua b/server/Spells/Fighter/Crusader/Paladin/PowerCleave.lua new file mode 100644 index 000000000..bba09227a --- /dev/null +++ b/server/Spells/Fighter/Crusader/Paladin/PowerCleave.lua @@ -0,0 +1,16 @@ +--[[ + Script Name : Spells/Fighter/Crusader/Paladin/PowerCleave.lua + Script Author : Jabantiz + Script Date : 2013.12.06 08:12:53 + Script Purpose : + : +--]] + +function cast(Caster, Target, DmgType, MinVal, MaxVal) + -- Inflicts 44 - 73 divine damage on target + if MaxVal ~= nil and MinVal < MaxVal then + SpellDamage(Target, DmgType, math.random(MinVal, MaxVal)) + else + SpellDamage(Target, DmgType, MinVal) + end +end diff --git a/server/Spells/Fighter/Crusader/Paladin/PrayerofHealing.lua b/server/Spells/Fighter/Crusader/Paladin/PrayerofHealing.lua new file mode 100644 index 000000000..42136a034 --- /dev/null +++ b/server/Spells/Fighter/Crusader/Paladin/PrayerofHealing.lua @@ -0,0 +1,25 @@ +--[[ + Script Name : Spells/Fighter/Crusader/Paladin/PrayerofHealing.lua + Script Author : Jabantiz + Script Date : 2013.12.05 05:12:39 + Script Purpose : + : +--]] + +function cast(Caster, Target, BonusAmt, MinVal, MaxVal) + -- Increases Max Health of group members (AE) by 15.8 + AddSpellBonus(Target, 606, BonusAmt) + + -- Heals group members (AE) for 21 - 25 + -- This effect cannot be critically applied. + -- The healing of this spell cannot be modified except by direct means + if MaxVal ~= nil and MinVal < MaxVal then + SpellHeal("Heal", MinVal, MaxVal) + else + SpellHeal("Heal", MinVal) + end +end + +function remove(Caster, Target) + RemoveSpellBonus(Target) +end diff --git a/server/Spells/Fighter/Crusader/Paladin/RefusalofAtonement.lua b/server/Spells/Fighter/Crusader/Paladin/RefusalofAtonement.lua new file mode 100644 index 000000000..bf4f2849e --- /dev/null +++ b/server/Spells/Fighter/Crusader/Paladin/RefusalofAtonement.lua @@ -0,0 +1,18 @@ +--[[ + Script Name : Spells/Fighter/Crusader/Paladin/RefusalofAtonement.lua + Script Author : neatz09 + Script Date : 2019.09.27 10:09:54 + Script Purpose : + : +--]] + +-- Inflicts 786 - 1310 divine damage on target + +function cast(Caster, Target, DmgType, MinVal, MaxVal) + if MaxVal ~= nil and MinVal < MaxVal then + SpellDamage(Target, DmgType, math.random(MinVal, MaxVal)) + else + SpellDamage(Target, DmgType, MinVal) + end +end + diff --git a/server/Spells/Fighter/Crusader/Paladin/ResoluteFaith.lua b/server/Spells/Fighter/Crusader/Paladin/ResoluteFaith.lua new file mode 100644 index 000000000..adc7ada31 --- /dev/null +++ b/server/Spells/Fighter/Crusader/Paladin/ResoluteFaith.lua @@ -0,0 +1,26 @@ +--[[ + Script Name : Spells/Fighter/Crusader/Paladin/ResoluteFaith.lua + Script Author : John Adams + Script Date : 2013.08.11 06:08:47 + Script Purpose : + : +--]] + +function cast(Caster, Target) + -- code to cast the spell + Say(Caster, "Whoops! Guess this is not implemented yet!") + +-- Info from spell_display_effects (remove from script when done) +-- Grants target a 13% chance of making an additional attempt to avoid being hit by a melee attack using the caster's avoidance. +-- Increases Defense of caster by 2.8 + +end + +function tick(Caster, Target) + -- code to process each call_frequency (tick) set in spell_tiers +end + +function remove(Caster, Target) + -- code to remove the spell +end + diff --git a/server/Spells/Fighter/Crusader/Paladin/Righteousness.lua b/server/Spells/Fighter/Crusader/Paladin/Righteousness.lua new file mode 100644 index 000000000..43e703d05 --- /dev/null +++ b/server/Spells/Fighter/Crusader/Paladin/Righteousness.lua @@ -0,0 +1,23 @@ +--[[ + Script Name : Spells/Fighter/Crusader/Paladin/Righteousness.lua + Script Author : Jabantiz + Script Date : 2013.12.05 09:12:22 + Script Purpose : + : +--]] + +function cast(Caster, Target, minVal, maxVal, mitVal) + -- Increases Threat to target encounter by 125 - 153 + if maxVal ~= nil and minVal < maxVal then + AddHate(Caster, Target, math.random(minVal, maxVal)) + else + AddHate(Caster, Target, minVal) + end + + -- Decreases Mitigation of target encounter vs arcane damage by 104 + AddSpellBonus(Target, 203, mitVal) +end + +function remove(Caster, Target) + RemoveSpellBonus(Target) +end diff --git a/server/Spells/Fighter/Crusader/Paladin/SigilofHeroism.lua b/server/Spells/Fighter/Crusader/Paladin/SigilofHeroism.lua new file mode 100644 index 000000000..836afd419 --- /dev/null +++ b/server/Spells/Fighter/Crusader/Paladin/SigilofHeroism.lua @@ -0,0 +1,24 @@ +--[[ + Script Name : Spells/Fighter/Crusader/Paladin/SigilofHeroism.lua + Script Author : John Adams + Script Date : 2013.08.11 06:08:59 + Script Purpose : + : +--]] + +function cast(Caster, Target) + -- code to cast the spell + Say(Caster, "Whoops! Guess this is not implemented yet!") + +-- Info from spell_display_effects (remove from script when done) + +end + +function tick(Caster, Target) + -- code to process each call_frequency (tick) set in spell_tiers +end + +function remove(Caster, Target) + -- code to remove the spell +end + diff --git a/server/Spells/Fighter/Crusader/Paladin/WrathStance.lua b/server/Spells/Fighter/Crusader/Paladin/WrathStance.lua new file mode 100644 index 000000000..0462510f7 --- /dev/null +++ b/server/Spells/Fighter/Crusader/Paladin/WrathStance.lua @@ -0,0 +1,25 @@ +--[[ + Script Name : Spells/Fighter/Crusader/Paladin/WrathStance.lua + Script Author : Jabantiz + Script Date : 2013.12.05 06:12:58 + Script Purpose : + : +--]] + +function cast(Caster, Target, statBonus, skillReduction, skillBonus) + -- Increases STR of caster by 11.9 + AddSpellBonus(Target, 0, statBonus) + -- Decreases Defense of caster by 1.8 + AddSkillBonus(Target, 609880714, skillReduction) + -- Increases Disruption, Slashing, Piercing and Crushing of caster by 2.4 + AddSkillBonus(Target, 613995491, skillBonus) + AddSkillBonus(Target, 418532101, skillBonus) + AddSkillBonus(Target, 3048574950, skillBonus) + AddSkillBonus(Target, 3421494576, skillBonus) + +end + +function remove(Caster, Target) + RemoveSpellBonus(Target) + RemoveSkillBonus(Target) +end diff --git a/server/Spells/Fighter/Crusader/PledgeofArmament.lua b/server/Spells/Fighter/Crusader/PledgeofArmament.lua new file mode 100644 index 000000000..31b41d8b5 --- /dev/null +++ b/server/Spells/Fighter/Crusader/PledgeofArmament.lua @@ -0,0 +1,26 @@ +--[[ + Script Name : Spells/Fighter/Crusader/PledgeofArmament.lua + Script Author : John Adams + Script Date : 2013.08.11 06:08:04 + Script Purpose : + : +--]] + +function cast(Caster, Target) + -- code to cast the spell + Say(Caster, "Whoops! Guess this is not implemented yet!") + +-- Info from spell_display_effects (remove from script when done) +-- Increases Mitigation of target vs physical damage by 73 +-- Decreases Mitigation of caster vs physical damage by 162 + +end + +function tick(Caster, Target) + -- code to process each call_frequency (tick) set in spell_tiers +end + +function remove(Caster, Target) + -- code to remove the spell +end + diff --git a/server/Spells/Fighter/Crusader/Shadowknight/Blasphemy.lua b/server/Spells/Fighter/Crusader/Shadowknight/Blasphemy.lua new file mode 100644 index 000000000..4f61872f3 --- /dev/null +++ b/server/Spells/Fighter/Crusader/Shadowknight/Blasphemy.lua @@ -0,0 +1,26 @@ +--[[ + Script Name : Spells/Fighter/Crusader/Shadowknight/Blasphemy.lua + Script Author : Dello + Script Date : 15/07/2014 + Script Purpose : + : +--]] + +function cast(Caster, Target, MinVal, MaxVal, ResistAmt) + if MaxVal ~= nil and MinVal < MaxVal then + AddHate(Caster, Target, math.random(MinVal, MaxVal), 1) + else + AddHate(Caster, Target, MinVal, 1) + end + + if target ~= nil then + Interrupt(Target) + end + + AddSpellBonus(Target, 202, ResistAmt) +end + + +function remove(Caster, Target) + RemoveSpellBonus(Target) +end \ No newline at end of file diff --git a/server/Spells/Fighter/Crusader/Shadowknight/Bloodletter.lua b/server/Spells/Fighter/Crusader/Shadowknight/Bloodletter.lua new file mode 100644 index 000000000..b25d2a9f1 --- /dev/null +++ b/server/Spells/Fighter/Crusader/Shadowknight/Bloodletter.lua @@ -0,0 +1,24 @@ +--[[ + Script Name : Spells/Fighter/Crusader/Shadowknight/Bloodletter.lua + Script Author : John Adams + Script Date : 2013.08.11 06:08:37 + Script Purpose : + : +--]] + +function cast(Caster, Target) + -- code to cast the spell + Say(Caster, "Whoops! Guess this is not implemented yet!") + +-- Info from spell_display_effects (remove from script when done) + +end + +function tick(Caster, Target) + -- code to process each call_frequency (tick) set in spell_tiers +end + +function remove(Caster, Target) + -- code to remove the spell +end + diff --git a/server/Spells/Fighter/Crusader/Shadowknight/CleaveFlesh.lua b/server/Spells/Fighter/Crusader/Shadowknight/CleaveFlesh.lua new file mode 100644 index 000000000..e390549d1 --- /dev/null +++ b/server/Spells/Fighter/Crusader/Shadowknight/CleaveFlesh.lua @@ -0,0 +1,23 @@ +--[[ + Script Name : Spells/Fighter/Crusader/Shadowknight/CleaveFlesh.lua + Script Author : Jabantiz + Script Date : 2014.01.11 06:01:30 + Script Purpose : + : +--]] + +function cast(Caster, Target, DmgType, MinVal, MaxVal, BonusAmt) + -- Inflicts 64 - 107 disease damage on target + if MaxVal ~= nil and MinVal < MaxVal then + SpellDamage(Target, DmgType, math.random(MinVal, MaxVal)) + else + SpellDamage(Target, DmgType, MinVal) + end + + -- Decreases WIS of target by 16.2 + AddSpellBonus(Target, 3, BonusAmt) +end + +function remove(Caster, Target) + RemoveSpellBonus(Target) +end diff --git a/server/Spells/Fighter/Crusader/Shadowknight/CondemningSmite.lua b/server/Spells/Fighter/Crusader/Shadowknight/CondemningSmite.lua new file mode 100644 index 000000000..d1d72cadb --- /dev/null +++ b/server/Spells/Fighter/Crusader/Shadowknight/CondemningSmite.lua @@ -0,0 +1,55 @@ +--[[ + Script Name : dd_dot.lua + Script Purpose : Generic damage + 1 effect script + Script Author : John Adams + Script Date : 2008.12.02 +--]] + +function cast(Caster, Target, DDType, MinDDVal, MaxDDVal, EffectType, DamageType, MinEffectVal, MaxEffectVal) + + -- DD component + if MaxDDVal ~= nil and MinDDVal < MaxDDVal then + dmgAmount = math.random(MinDDVal, MaxDDVal) + SpellDamage(Target, DDType, dmgAmount) + --AddHate(Caster, Target, dmgAmount) + else + SpellDamage(Target, DDType, MinDDVal) + --AddHate(Caster, Target, MinDDVal) + end + + -- Effect component - only process this code if there is an EffectType param + if EffectType ~= nil then + + -- Determine if there is a range to effect values + if MaxEffectVal ~= nil and MinEffectVal < MaxEffectVal then + EffectValue = math.random(MinEffectVal, MaxEffectVal) + else + EffectValue = MinEffectVal + end + + -- Determine EffectType - either a DamageType or a String value passed as param 4 + if EffectType == "heal" then + ModifyHP(Caster, EffectValue) + else + SpellDamage(Target, DamageType, EffectValue) + end + + end + +end + +function tick(Caster, Target, DDType, MinDDVal, MaxDDVal, EffectType, DamageType, MinEffectVal, MaxEffectVal) + + if MaxEffectVal ~= nil and MinEffectVal < MaxEffectVal then + EffectValue = math.random(MinEffectVal, MaxEffectVal) + else + EffectValue = MinEffectVal + end + + if EffectType == "heal" then + ModifyHP(Caster, EffectValue) + else + SpellDamage(Target, DamageType, EffectValue) + end + +end diff --git a/server/Spells/Fighter/Crusader/Shadowknight/DarkBlade.lua b/server/Spells/Fighter/Crusader/Shadowknight/DarkBlade.lua new file mode 100644 index 000000000..3771ef341 --- /dev/null +++ b/server/Spells/Fighter/Crusader/Shadowknight/DarkBlade.lua @@ -0,0 +1,34 @@ +--[[ + Script Name : Spells/Fighter/Crusader/Shadowknight/DarkBlade.lua + Script Author : Jabantiz + Script Date : 2014.01.08 02:01:11 - potency 10/18/2019 + Script Purpose : + : +--]] + +function cast(Caster, Target, BonusAmt, DefSkillAmt, SkillAmt) + -- Increases STR of caster by 17.8 + AddSpellBonus(Target, 0, BonusAmt) + + -- Decreases Defense of caster by 1.8 + AddSkillBonus(Target, GetSkillIDByName("Defense"), DefSkillAmt) + + -- Increases Crushing, Disruption, Piercing and Slashing of caster by 2.4 + AddSkillBonus(Target, GetSkillIDByName("Crushing"), SkillAmt) + AddSkillBonus(Target, GetSkillIDByName("Disruption"), SkillAmt) + AddSkillBonus(Target, GetSkillIDByName("Piercing"), SkillAmt) + AddSkillBonus(Target, GetSkillIDByName("Slashing"), SkillAmt) + + -- Add + -- may not benefit from any stoneskin, death prevent, or 100% avoidance abilities while under this effect and for 5 seconds after the effect has been removed. + Say(Caster, "Stoneskin and potency parts missing.") + + -- Add + -- Increases potency added on target by 20%. + +end + +function remove(Caster, Target) + RemoveSpellBonus(Target) + RemoveSkillBonus(Target) +end diff --git a/server/Spells/Fighter/Crusader/Shadowknight/DeathCloud.lua b/server/Spells/Fighter/Crusader/Shadowknight/DeathCloud.lua new file mode 100644 index 000000000..8d114e691 --- /dev/null +++ b/server/Spells/Fighter/Crusader/Shadowknight/DeathCloud.lua @@ -0,0 +1,25 @@ +--[[ + Script Name : Spells/Fighter/Crusader/Shadowknight/DeathCloud.lua + Script Author : Jabantiz + Script Date : 2014.01.08 04:01:24 + Script Purpose : + : +--]] + +function cast(Caster, Target, DmgType, MinVal, MaxVal, DoTType, DoTMinVal, DoTMaxVal) + -- Inflicts 30 - 50 disease damage on targets in Area of Effect + if MaxVal ~= nil and MinVal < MaxVal then + SpellDamage(Target, DmgType, math.random(MinVal, MaxVal)) + else + SpellDamage(Target, DmgType, MinVal) + end +end + +function tick(Caster, Target, DmgType, MinVal, MaxVal, DoTType, DoTMinVal, DoTMaxVal) + -- Inflicts 14 - 17 disease damage on targets in Area of Effect every 6 seconds + if DoTMaxVal ~= nil and DoTMinVal < DoTMaxVal then + SpellDamage(Target, DoTType, math.random(DoTMinVal, DoTMaxVal)) + else + SpellDamage(Target, DoTType, DoTMinVal) + end +end diff --git a/server/Spells/Fighter/Crusader/Shadowknight/DeathMarch.lua b/server/Spells/Fighter/Crusader/Shadowknight/DeathMarch.lua new file mode 100644 index 000000000..98efcab41 --- /dev/null +++ b/server/Spells/Fighter/Crusader/Shadowknight/DeathMarch.lua @@ -0,0 +1,24 @@ +--[[ + Script Name : Spells/Fighter/Crusader/Shadowknight/DeathMarch.lua + Script Author : John Adams + Script Date : 2013.08.11 06:08:15 + Script Purpose : + : +--]] + +function cast(Caster, Target) + -- code to cast the spell + Say(Caster, "Whoops! Guess this is not implemented yet!") + +-- Info from spell_display_effects (remove from script when done) + +end + +function tick(Caster, Target) + -- code to process each call_frequency (tick) set in spell_tiers +end + +function remove(Caster, Target) + -- code to remove the spell +end + diff --git a/server/Spells/Fighter/Crusader/Shadowknight/Decree.lua b/server/Spells/Fighter/Crusader/Shadowknight/Decree.lua new file mode 100644 index 000000000..a0c50c1c1 --- /dev/null +++ b/server/Spells/Fighter/Crusader/Shadowknight/Decree.lua @@ -0,0 +1,30 @@ +--[[ + Script Name : taunt.lua + Script Purpose : Generic Taunt script + Script Author : John Adams + Script Date : 2008.12.07 +--]] + +function cast(Caster, Target, TauntType, MinTauntVal, MaxTauntVal) + -- Taunt component + if MaxTauntVal ~= nil and MinTauntVal < MaxTauntVal then + hateAmount = math.random(MinTauntVal, MaxTauntVal) + AddHate(Caster, Target, hateAmount) + else + AddHate(Caster, Target, MinTauntVal) + end +end + +function tick(Caster, Target, TauntType, MinTauntVal, MaxTauntVal) + if MaxTauntVal ~= nil and MinTauntVal < MaxTauntVal then + hateAmount = math.random(MinTauntVal, MaxTauntVal) + AddHate(Caster, Target, hateAmount) + else + AddHate(Caster, Target, MinTauntVal) + end +end + + +function remove(Caster, Target, TauntType, MinTauntVal, MaxTauntVal) + +end \ No newline at end of file diff --git a/server/Spells/Fighter/Crusader/Shadowknight/DeviousEvasion.lua b/server/Spells/Fighter/Crusader/Shadowknight/DeviousEvasion.lua new file mode 100644 index 000000000..ce92b9e73 --- /dev/null +++ b/server/Spells/Fighter/Crusader/Shadowknight/DeviousEvasion.lua @@ -0,0 +1,11 @@ +--[[ + Script Name : Spells/Fighter/Crusader/Shadowknight/DeviousEvasion.lua + Script Author : neatz09 + Script Date : 2019.10.18 08:10:08 + Script Purpose : + : +--]] + +-- Info from spell_display_effects (remove from script when done) +-- Grants target a 13% chance of making an additional attempt to avoid being hit by a melee attack using the caster's avoidance. +-- Increases Parry of caster by 2.8 diff --git a/server/Spells/Fighter/Crusader/Shadowknight/DevourVitae.lua b/server/Spells/Fighter/Crusader/Shadowknight/DevourVitae.lua new file mode 100644 index 000000000..c8d0207e6 --- /dev/null +++ b/server/Spells/Fighter/Crusader/Shadowknight/DevourVitae.lua @@ -0,0 +1,17 @@ +--[[ + Script Name : Spells/Fighter/Crusader/Shadowknight/DevourVitae.lua + Script Author : neatz09 + Script Date : 2019.10.12 08:10:36 + Script Purpose : + : +--]] + +-- Info from spell_display_effects (remove from script when done) +-- Inflicts 97 - 119 disease damage on target +function cast(Caster, Target, DmgType, MinVal, MaxVal, pctHealMin, pctHealMax) + SpellDamage(Target, DmgType, MinVal, MaxVal) +-- Heals caster for 3.4 - 4.2% of max health +-- This effect cannot be critically applied. +-- The healing of this spell cannot be modified except by direct means +SpellHeal("Heal", GetPCTOfHP(Caster, pctHealMin), GetPCTOfHP(Caster, pctHealMax), Caster, 2) +end diff --git a/server/Spells/Fighter/Crusader/Shadowknight/DevouringMist.lua b/server/Spells/Fighter/Crusader/Shadowknight/DevouringMist.lua new file mode 100644 index 000000000..48f46a9d3 --- /dev/null +++ b/server/Spells/Fighter/Crusader/Shadowknight/DevouringMist.lua @@ -0,0 +1,24 @@ +--[[ + Script Name : Spells/Fighter/Crusader/Shadowknight/DevouringMist.lua + Script Author : neatz09 + Script Date : 2019.10.12 01:10:53 + Script Purpose : + : +--]] + +-- Info from spell_display_effects (remove from script when done) +-- Applies Devouring Mist. Lasts for 1 minute 12 seconds. +-- Increases Mitigation of caster vs physical damage by 216 +-- Decreases Mitigation of target encounter vs physical damage by 1234 + +function cast(Caster, Target, CsterAmt, TgtAmt) + Say(Caster, "This Spell is not setup for AoE correctly") + +AddSpellBonus(Caster, 200, CstrAmt) +AddSpellBonus(Target, 200, TgtAmt) +end + +function remove(Caster, Target) + RemoveSpellBonus(Target) + +end diff --git a/server/Spells/Fighter/Crusader/Shadowknight/DreadfulWrath.lua b/server/Spells/Fighter/Crusader/Shadowknight/DreadfulWrath.lua new file mode 100644 index 000000000..fe62c0196 --- /dev/null +++ b/server/Spells/Fighter/Crusader/Shadowknight/DreadfulWrath.lua @@ -0,0 +1,39 @@ +--[[ + Script Name : Spells/Fighter/Crusader/Shadowknight/DreadfulWrath.lua + Script Author : neatz09 + Script Date : 2019.10.17 01:10:03 + Script Purpose : + : +--]] +function precast(Caster, Target) + -- Does not affect Epic targets + if IsEpic(Target) then + return false, 43 + end + + return true +end + + +function cast(Caster, Target, DmgType, MinVal, MaxVal, Snare) +SpellDamage(Target, DmgType, MinVal, MaxVal) +-- Applies Snare on termination. Lasts for 24.0 seconds. +-- Slows target by 37.7% +-- 5% chance to dispel when target receives hostile action +-- 5% chance to dispel when target takes damage + SetSpeedMultiplier(Target, Snare) + AddProc(Target, 2, 5.0) + +end + +function proc(Caster, Target, Type) + if Type == 2 then + CancelSpell() + end +end + +function remove(Caster, Target) + -- code to remove the spell + SetSpeedMultiplier(Target, 1.0) + +end \ No newline at end of file diff --git a/server/Spells/Fighter/Crusader/Shadowknight/GraveSacrament.lua b/server/Spells/Fighter/Crusader/Shadowknight/GraveSacrament.lua new file mode 100644 index 000000000..d96d5cd48 --- /dev/null +++ b/server/Spells/Fighter/Crusader/Shadowknight/GraveSacrament.lua @@ -0,0 +1,30 @@ +--[[ + Script Name : Spells/Fighter/Crusader/Shadowknight/GraveSacrament.lua + Script Author : neatz09 + Script Date : 2019.10.09 04:10:47 + Script Purpose : + : +--]] + +-- Info from spell_display_effects (remove from script when done) +-- Increases threat priority of targets in Area of Effect by 2 positions---NOT SCRIPTED +-- Increases Threat to targets in Area of Effect by 284 - 347 instantly and every 4 seconds thereafter +-- Inflicts 5 - 8 disease damage on targets in Area of Effect +-- Inflicts 3 - 4 disease damage on targets in Area of Effect every 4 seconds + +function cast(Caster, Target, HateMin, HateMax, DmgType, MinVal, MaxVal, DotType, DotMin, DotMax, ToTMin, ToTMax) + if HateMax ~= nil and HateMin < HateMax then + AddHate(Caster, Target, math.random(HateMin, HateMax), 1) + else + AddHate(Caster, Target, HateMin, 1) + end +SpellDamage(Target, HateMin, HateMax, DmgType, MinVal, MaxVal) +end +function tick(Caster, Target, HateMin, HateMax, DoTType, DotMin, DotMax) + if ToTMax ~= nil and ToTMin < ToTMax then + AddHate(Caster, Target, math.random(ToTMin, ToTMax), 1) + else + AddHate(Caster, Target, ToTMin, 1) + end +SpellDamage(Target, DoTType, DotMin, DotMax) + end diff --git a/server/Spells/Fighter/Crusader/Shadowknight/GrimHarbinger.lua b/server/Spells/Fighter/Crusader/Shadowknight/GrimHarbinger.lua new file mode 100644 index 000000000..de48b779f --- /dev/null +++ b/server/Spells/Fighter/Crusader/Shadowknight/GrimHarbinger.lua @@ -0,0 +1,28 @@ +--[[ + Script Name : Spells/Fighter/Crusader/Shadowknight/GrimHarbinger.lua + Script Author : Jabantiz + Script Date : 2014.01.08 05:01:42 + Script Purpose : + : +--]] + +function cast(Caster, Target) + -- On a melee hit this spell may cast Grim Strike on target of attack. Triggers about 3.0 times per minute. + AddProc(Target, 3, 15.0) +end + +function proc(Caster, Target, Type, DmgType, DmgMin, DmgMax, pctHealMin, pctHealMax) + if Type == 3 then + -- Inflicts 37 - 62 disease damage on target + ProcDamage(Caster, Target, "Grim Strike", DmgType, DmgMin, DmgMax) + + -- Heals caster for 15 - 25 + -- This effect cannot be critically applied. + -- The healing of this spell cannot be modified except by direct means + SpellHeal("Heal", GetPCTOfHP(Caster, pctHealMin), GetPCTOfHP(Caster, pctHealMax),Caster, 2, 1) + end +end + +function remove(Caster, Target) + RemoveProc(Target) +end \ No newline at end of file diff --git a/server/Spells/Fighter/Crusader/Shadowknight/HarmTouch.lua b/server/Spells/Fighter/Crusader/Shadowknight/HarmTouch.lua new file mode 100644 index 000000000..5d2fc9d7c --- /dev/null +++ b/server/Spells/Fighter/Crusader/Shadowknight/HarmTouch.lua @@ -0,0 +1,16 @@ +--[[ + Script Name : Spells/Fighter/Crusader/Shadowknight/HarmTouch.lua + Script Author : Jabantiz + Script Date : 2014.01.11 08:01:06 + Script Purpose : + : +--]] + +function cast(Caster, Target, DmgType, MinVal, MaxVal) + -- Inflicts 846 - 1411 disease damage on target + if MaxVal ~= nil and MinVal < MaxVal then + SpellDamage(Target, DmgType, math.random(MinVal, MaxVal)) + else + SpellDamage(Target, DmgType, MinVal) + end +end diff --git a/server/Spells/Fighter/Crusader/Shadowknight/HatefulSlam.lua b/server/Spells/Fighter/Crusader/Shadowknight/HatefulSlam.lua new file mode 100644 index 000000000..c1a6e74bd --- /dev/null +++ b/server/Spells/Fighter/Crusader/Shadowknight/HatefulSlam.lua @@ -0,0 +1,41 @@ +--[[ + Script Name : Spells/Fighter/Crusader/Shadowknight/HatefulSlam.lua + Script Author : Jabantiz + Script Date : 2014.01.11 05:01:41 + Script Purpose : + : +--]] + +function cast(Caster, Target, DmgType, MinVal, MaxVal, HateAmt, TickHateAmt) + -- Inflicts 23 - 39 disease damage on target + if MaxVal ~= nil and MinVal < MaxVal then + SpellDamage(Target, DmgType, math.random(MinVal, MaxVal)) + else + SpellDamage(Target, DmgType, MinVal) + end + + -- Increases Threat to target by 181 instantly ... + AddHate(Caster, Target, MinVal, 1) + + -- Applies Knockdown. Lasts for 2.5 seconds. + -- Blurs vision of target + -- Throws target back + -- Stuns target + -- Does not affect Epic targets + if not IsEpic(Target) then + Knockback(Caster, Target, 2500) + AddControlEffect(Target, 4) + BlurVision(Target, 1.0) + AddSpellTimer(2500, "RemoveKnockback") + end +end + +function tick(Caster, Target, DmgType, MinVal, MaxVal, HateAmt, TickHateAmt) + -- ... and by 79 every 3 seconds thereafter + AddHate(Caster, Target, TickHateAmt, 1) +end + +function RemoveKnockback(Caster, Target) + RemoveControlEffect(Target, 4) + BlurVision(Target, 0.0) +end diff --git a/server/Spells/Fighter/Crusader/Shadowknight/InnoruuksCaress.lua b/server/Spells/Fighter/Crusader/Shadowknight/InnoruuksCaress.lua new file mode 100644 index 000000000..befd9c059 --- /dev/null +++ b/server/Spells/Fighter/Crusader/Shadowknight/InnoruuksCaress.lua @@ -0,0 +1,30 @@ +--[[ + Script Name : Spells/Fighter/Crusader/Shadowknight/InnoruuksCaress.lua + Script Author : Jabantiz + Script Date : 2014.01.08 02:01:19 + Script Purpose : + : +--]] + +function cast(Caster, Target, BonusAmt, HateAmt, DmgType, DmgAmt) + -- Increases Mitigation of caster vs elemental, noxious and arcane damage by 43 + AddSpellBonus(Target, 201, BonusAmt) + AddSpellBonus(Target, 202, BonusAmt) + AddSpellBonus(Target, 203, BonusAmt) + + AddProc(Target, 4, 100) +end + +function proc(Caster, Target, Type, BonusAmt, HateAmt, DmgType, DmgAmt) + -- When damaged with a melee weapon this spell will cast Caress Feedback on target's attacker. + -- Increases Threat to target by 4 + -- Inflicts 1 disease damage on target + if Type == 4 then + AddHate(Caster, Target, HateAmt) + ProcDamage(Caster, Target, "Caress Feedback", DmgType, DmgAmt) + end +end + +function remove(Caster, Target) + RemoveProc(Target) +end diff --git a/server/Spells/Fighter/Crusader/Shadowknight/InsidiousWhisper.lua b/server/Spells/Fighter/Crusader/Shadowknight/InsidiousWhisper.lua new file mode 100644 index 000000000..6a94a4d40 --- /dev/null +++ b/server/Spells/Fighter/Crusader/Shadowknight/InsidiousWhisper.lua @@ -0,0 +1,48 @@ +--[[ + Script Name : Spells/Fighter/Crusader/Shadowknight/InsidiousWhisper.lua + Script Author : John Adams + Script Date : 2013.08.11 06:08:28 + Script Purpose : + : +--]] + +function cast(Caster, Target, MinTauntVal, MaxTauntVal, MinTauntTick, MaxTauntTick, DDType, MinDDVal, MaxDDVal, DoTType, MinDoTVal, MaxDoTVal) + + -- Taunt component + if MaxTauntVal ~= nil and MinTauntVal < MaxTauntVal then + hateAmount = math.random(MinTauntVal, MaxTauntVal) + AddHate(Caster, Target, hateAmount) + else + AddHate(Caster, Target, MinTauntVal) + end + + -- Disease component + if MaxDDVal ~= nil and MinDDVal < MaxDDVal then + dmgAmount = math.random(MinDDVal, MaxDDVal) + SpellDamage(Target, DDType, dmgAmount) + else + SpellDamage(Target, DDType, MinDDVal) + end + +end + +function tick(Caster, Target, MinTauntVal, MaxTauntVal, MinTauntTick, MaxTauntTick, DDType, MinDDVal, MaxDDVal, DoTType, MinDoTVal, MaxDoTVal) + + -- Taunt component + if MaxTauntTick ~= nil and MinTauntTick < MaxTauntTick then + hateAmount = math.random(MinTauntTick, MaxTauntTick) + AddHate(Caster, Target, hateAmount) + else + AddHate(Caster, Target, MinTauntTick) + end + + + -- Disease component + if MaxDoTVal ~= nil and MinDoTVal < MaxDoTVal then + dmgAmount = math.random(MinDoTVal, MaxDoTVal) + SpellDamage(Target, DoTType, dmgAmount) + else + SpellDamage(Target, DoTType, MinDoTVal) + end + +end diff --git a/server/Spells/Fighter/Crusader/Shadowknight/LucansPact.lua b/server/Spells/Fighter/Crusader/Shadowknight/LucansPact.lua new file mode 100644 index 000000000..67e6d3473 --- /dev/null +++ b/server/Spells/Fighter/Crusader/Shadowknight/LucansPact.lua @@ -0,0 +1,40 @@ +--[[ + Script Name : Spells/Fighter/Crusader/Shadowknight/LucansPact.lua + Script Author : Jabantiz + Script Date : 2014.01.08 02:01:23 + Script Purpose : + : +--]] + +function cast(Caster, Target, StaBonusAmt, AvdBonusAmt, OffSkillAmt, DefSkillAmt, ResistAmt) + -- Reduces physical damage done to caster by 5% + AddSpellBonus(Target, 313, 5) -- Not sure on this value (313) + + + -- Increases STA of caster by 11.9 + AddSpellBonus(Target, 1, StaBonusAmt) + + -- Adds 2.8% to base avoidance. + AddSpellBonus(Target, 696, AvdBonusAmt) + + -- Decreases Crushing, Piercing and Slashing of caster by 1.4 + AddSkillBonus(Target, GetSkillIDByName("Crushing"), OffSkillAmt) + AddSkillBonus(Target, GetSkillIDByName("Piercing"), OffSkillAmt) + AddSkillBonus(Target, GetSkillIDByName("Slashing"), OffSkillAmt) + + -- Increases Aggression and Defense of caster by 1.6 + AddSkillBonus(Target, GetSkillIDByName("Aggression"), DefSkillAmt) + AddSkillBonus(Target, GetSkillIDByName("Defense"), DefSkillAmt) + + -- Increases Mitigation of caster vs noxious damage by 138 + AddSpellBonus(Target, 202, ResistAmt) + + -- Increases the caster's effectiveness of worn armor vs physical damage by 15% + AddSpellBonus(Target, 678, 15) +end + +function remove(Caster, Target) + RemoveSpellBonus(Target) + RemoveSkillBonus(Target) +end + diff --git a/server/Spells/Fighter/Crusader/Shadowknight/Malice.lua b/server/Spells/Fighter/Crusader/Shadowknight/Malice.lua new file mode 100644 index 000000000..702bb2e47 --- /dev/null +++ b/server/Spells/Fighter/Crusader/Shadowknight/Malice.lua @@ -0,0 +1,16 @@ +--[[ + Script Name : Spells/Fighter/Crusader/Shadowknight/Malice.lua + Script Author : Jabantiz + Script Date : 2014.01.08 01:01:39 + Script Purpose : + : +--]] + +function cast(Caster, Target, DmgType, MinVal, MaxVal) + -- Inflicts 9 - 15 disease damage on target + if MaxVal ~= nil and MinVal < MaxVal then + SpellDamage(Target, DmgType, math.random(MinVal, MaxVal)) + else + SpellDamage(Target, DmgType, MinVal) + end +end diff --git a/server/Spells/Fighter/Crusader/Shadowknight/ManaSieve.lua b/server/Spells/Fighter/Crusader/Shadowknight/ManaSieve.lua new file mode 100644 index 000000000..4e52fc612 --- /dev/null +++ b/server/Spells/Fighter/Crusader/Shadowknight/ManaSieve.lua @@ -0,0 +1,22 @@ +--[[ + Script Name : Spells/Fighter/Crusader/Shadowknight/ManaSieve.lua + Script Author : neatz09 + Script Date : 2019.10.18 08:10:11 + Script Purpose : + : +--]] +-- Inflicts 268 - 446 disease damage on target +-- Inflicts 67 - 112 disease damage on target every 4 seconds +-- Increases power of caster by 146 - 244 +-- Increases power of caster by 32 - 53 every 4 seconds + +function cast(Caster, Target, DmgType, MinVal, MaxVal, MinHeal, MaxHeal, DoTType, DoTMin, DoTMax, HoTMin, HotMax) +SpellDamage(Target, DmgType, MinVal, MaxVal) +SpellHeal("Power", MinHeal, MaxHeal, Caster) +end + + +function tick(Caster, Target, DmgType, MinVal, MaxVal, MinHeal, MaxHeal, DoTType, DoTMin, DoTMax, HoTMin, HotMax) +SpellDamage(Target, DoTType, DotMin, DoTMax) +SpellHeal("Power", HoTMin, HoTMax, Caster) +end diff --git a/server/Spells/Fighter/Crusader/Shadowknight/MortalEmbrace.lua b/server/Spells/Fighter/Crusader/Shadowknight/MortalEmbrace.lua new file mode 100644 index 000000000..f0c3fc6fb --- /dev/null +++ b/server/Spells/Fighter/Crusader/Shadowknight/MortalEmbrace.lua @@ -0,0 +1,25 @@ +--[[ + Script Name : Spells/Fighter/Crusader/Shadowknight/MortalEmbrace.lua + Script Author : Dello + Script Date : 16/07/2014 + Script Purpose : + : +--]] + +function cast(Caster, Target, Chance) + SetServerControlFlag(Target, 5, 1, 1); + + local roll = math.random(1, 100); + if roll <= Chance then + ClearHate(Target) + SendMessage(Caster, "Your feign death succeeded", "yellow") + SendMessage(Target, "Your feign death succeeded", "yellow") + else + SendMessage(Caster, "Your feign death attempt failed", "yellow") + SendMessage(Target, "Your feign death attempt failed", "yellow") + end +end + +function remove(Caster, Target) + SetServerControlFlag(Target, 5, 1, 0); +end diff --git a/server/Spells/Fighter/Crusader/Shadowknight/OffensivePresence.lua b/server/Spells/Fighter/Crusader/Shadowknight/OffensivePresence.lua new file mode 100644 index 000000000..d1d72cadb --- /dev/null +++ b/server/Spells/Fighter/Crusader/Shadowknight/OffensivePresence.lua @@ -0,0 +1,55 @@ +--[[ + Script Name : dd_dot.lua + Script Purpose : Generic damage + 1 effect script + Script Author : John Adams + Script Date : 2008.12.02 +--]] + +function cast(Caster, Target, DDType, MinDDVal, MaxDDVal, EffectType, DamageType, MinEffectVal, MaxEffectVal) + + -- DD component + if MaxDDVal ~= nil and MinDDVal < MaxDDVal then + dmgAmount = math.random(MinDDVal, MaxDDVal) + SpellDamage(Target, DDType, dmgAmount) + --AddHate(Caster, Target, dmgAmount) + else + SpellDamage(Target, DDType, MinDDVal) + --AddHate(Caster, Target, MinDDVal) + end + + -- Effect component - only process this code if there is an EffectType param + if EffectType ~= nil then + + -- Determine if there is a range to effect values + if MaxEffectVal ~= nil and MinEffectVal < MaxEffectVal then + EffectValue = math.random(MinEffectVal, MaxEffectVal) + else + EffectValue = MinEffectVal + end + + -- Determine EffectType - either a DamageType or a String value passed as param 4 + if EffectType == "heal" then + ModifyHP(Caster, EffectValue) + else + SpellDamage(Target, DamageType, EffectValue) + end + + end + +end + +function tick(Caster, Target, DDType, MinDDVal, MaxDDVal, EffectType, DamageType, MinEffectVal, MaxEffectVal) + + if MaxEffectVal ~= nil and MinEffectVal < MaxEffectVal then + EffectValue = math.random(MinEffectVal, MaxEffectVal) + else + EffectValue = MinEffectVal + end + + if EffectType == "heal" then + ModifyHP(Caster, EffectValue) + else + SpellDamage(Target, DamageType, EffectValue) + end + +end diff --git a/server/Spells/Fighter/Crusader/Shadowknight/Painbringer.lua b/server/Spells/Fighter/Crusader/Shadowknight/Painbringer.lua new file mode 100644 index 000000000..f43e8be84 --- /dev/null +++ b/server/Spells/Fighter/Crusader/Shadowknight/Painbringer.lua @@ -0,0 +1,40 @@ +--[[ + Script Name : Spells/Fighter/Crusader/Shadowknight/Painbringer.lua + Script Author : John Adams + Script Date : 2013.11.17 05:11:19 + Script Purpose : DD, DoT and Heal + : +--]] + +function cast(Caster, Target, MinHeal, DmgType, MinDmg, MaxDmg, DoTType, DoT) + + -- DD component + if MaxDmg ~= nil and MinDmg < MaxDmg then + dmgAmount = math.random(MinDmg, MaxDmg) + SpellDamage(Target, DDType, dmgAmount) + else + SpellDamage(Target, DDType, MinDmg) + end + + -- Painbringer Component (instant heal) + if MinHeal ~= nil then + SpellHeal("Heal", MinHeal, 0, Caster) + -- ModifyHP(Caster, MinHeal) -- heals 2 every 3 seconds for 9 seconds + end + +end + +function tick(Caster, Target, MinHeal, DmgType, MinDmg, MaxDmg, DoTType, DoTAmt) + + -- Heal component + if MinHeal ~= nil then + SpellHeal("Heal", MinHeal, 0, Caster) + -- ModifyHP(Caster, MinHeal) -- heals 2 every 3 seconds for 9 seconds + end + + -- DoT component + if DoTAmt ~= nil then + SpellDamage(Target, DoTType, DoTAmt) -- Disease 1 every 3 seconds for 9 seconds + end + +end diff --git a/server/Spells/Fighter/Crusader/Shadowknight/PainbringerPct.lua b/server/Spells/Fighter/Crusader/Shadowknight/PainbringerPct.lua new file mode 100644 index 000000000..94eaae5b1 --- /dev/null +++ b/server/Spells/Fighter/Crusader/Shadowknight/PainbringerPct.lua @@ -0,0 +1,39 @@ +--[[ + Script Name : Spells/Fighter/Crusader/Shadowknight/PainbringerPct.lua + Script Author : neatz09 + Script Date : 2019.10.18 05:10:51 + Script Purpose : + : +--]] +function cast(Caster, Target, MinHeal, DmgType, MinDmg, MaxDmg, DoTType, DoT) + + -- DD component + if MaxDmg ~= nil and MinDmg < MaxDmg then + dmgAmount = math.random(MinDmg, MaxDmg) + SpellDamage(Target, DDType, dmgAmount) + else + SpellDamage(Target, DDType, MinDmg) + end + + -- Painbringer Component (instant heal) + if MinHeal ~= nil then + SpellHeal("Heal", GetPCTOfHP(Caster, MinHeal),Caster, 2, 1) + -- ModifyHP(Caster, MinHeal) -- heals 2 every 3 seconds for 9 seconds + end + +end + +function tick(Caster, Target, MinHeal, DmgType, MinDmg, MaxDmg, DoTType, DoTAmt) + + -- Heal component + if MinHeal ~= nil then + SpellHeal("Heal", GetPCTOfHP(Caster, MinHeal),Caster, 2, 1) + -- ModifyHP(Caster, MinHeal) -- heals 2 every 3 seconds for 9 seconds + end + + -- DoT component + if DoTAmt ~= nil then + SpellDamage(Target, DoTType, DoTAmt) -- Disease 1 every 3 seconds for 9 seconds + end + +end diff --git a/server/Spells/Fighter/Crusader/Shadowknight/Pestilence.lua b/server/Spells/Fighter/Crusader/Shadowknight/Pestilence.lua new file mode 100644 index 000000000..05f829958 --- /dev/null +++ b/server/Spells/Fighter/Crusader/Shadowknight/Pestilence.lua @@ -0,0 +1,15 @@ +--[[ + Script Name : Spells/Fighter/Crusader/Shadowknight/Pestilence.lua + Script Author : neatz09 + Script Date : 2019.10.19 09:10:39 + Script Purpose : + : +--]] + +-- Info from spell_display_effects (remove from script when done) +-- Applies Pestilence. Lasts for 16.0 seconds. +-- Inflicts 333 - 407 disease damage on caster +-- Inflicts 111 - 136 disease damage on caster every 2 seconds +-- On death this spell will cast Pestilence Mark on target. +-- Applies Pestilence. Lasts for 16.0 seconds. +-- Grants a total of 1 trigger of the spell. diff --git a/server/Spells/Fighter/Crusader/Shadowknight/SeethingHatred.lua b/server/Spells/Fighter/Crusader/Shadowknight/SeethingHatred.lua new file mode 100644 index 000000000..b65eb092d --- /dev/null +++ b/server/Spells/Fighter/Crusader/Shadowknight/SeethingHatred.lua @@ -0,0 +1,30 @@ +--[[ + Script Name : Spells/Fighter/Crusader/Shadowknight/SeethingHatred.lua + Script Author : John Adams + Script Date : 2013.08.11 06:08:47 + Script Purpose : + : +--]] + +function cast(Caster, Target) + -- code to cast the spell + Say(Caster, "Whoops! Guess this is not implemented yet!") + +-- Info from spell_display_effects (remove from script when done) +-- Damage over time spells increase damage with each tick. Damage ceases to increase after 5 ticks. +-- On any combat or spell hit this spell may cast Seething Hatred on target of attack. Lasts for 15.0 seconds. Triggers about 2.4 times per minute. +-- Inflicts 734 - 897 disease damage on target +-- 300% of health regained from lifetaps will be applied as hate to engaged targets. +-- Cannot be modified except by direct means +-- Cannot be modified except by direct means + +end + +function tick(Caster, Target) + -- code to process each call_frequency (tick) set in spell_tiers +end + +function remove(Caster, Target) + -- code to remove the spell +end + diff --git a/server/Spells/Fighter/Crusader/Shadowknight/ShadowCoil.lua b/server/Spells/Fighter/Crusader/Shadowknight/ShadowCoil.lua new file mode 100644 index 000000000..46c1f6877 --- /dev/null +++ b/server/Spells/Fighter/Crusader/Shadowknight/ShadowCoil.lua @@ -0,0 +1,25 @@ +--[[ + Script Name : Spells/Fighter/Crusader/Shadowknight/ShadowCoil.lua + Script Author : Dello + Script Date : 17/07/2014 + Script Purpose : + : +--]] + +function cast(Caster, Target, DmgType, MinVal, MaxVal) + + if MaxVal ~= nil and MinVal < MaxVal then + SpellDamage(Target, DmgType, math.random(MinVal, MaxVal)) + else + SpellDamage(Target, DmgType, MinVal) + end +end + +function tick(Caster, Target, DmgType, MinVal, MaxVal, DoTType, DoTMin, DoTMax) + + if DoTMax ~= nil and DoTMin < DoTMax then + SpellDamage(Target, DoTType, math.random(DoTMin, DoTMax)) + else + SpellDamage(Target, DoTType, DoTMin) + end +end diff --git a/server/Spells/Fighter/Crusader/Shadowknight/ShadowyElusion.lua b/server/Spells/Fighter/Crusader/Shadowknight/ShadowyElusion.lua new file mode 100644 index 000000000..5db8acc82 --- /dev/null +++ b/server/Spells/Fighter/Crusader/Shadowknight/ShadowyElusion.lua @@ -0,0 +1,11 @@ +--[[ + Script Name : Spells/Fighter/Crusader/Shadowknight/ShadowyElusion.lua + Script Author : neatz09 + Script Date : 2019.10.12 09:10:05 + Script Purpose : + : +--]] +-- Teleports caster and caster's group within the zone +function cast(Caster, Target) + Evac() +end diff --git a/server/Spells/Fighter/Crusader/Shadowknight/SickeningCircle.lua b/server/Spells/Fighter/Crusader/Shadowknight/SickeningCircle.lua new file mode 100644 index 000000000..d1d72cadb --- /dev/null +++ b/server/Spells/Fighter/Crusader/Shadowknight/SickeningCircle.lua @@ -0,0 +1,55 @@ +--[[ + Script Name : dd_dot.lua + Script Purpose : Generic damage + 1 effect script + Script Author : John Adams + Script Date : 2008.12.02 +--]] + +function cast(Caster, Target, DDType, MinDDVal, MaxDDVal, EffectType, DamageType, MinEffectVal, MaxEffectVal) + + -- DD component + if MaxDDVal ~= nil and MinDDVal < MaxDDVal then + dmgAmount = math.random(MinDDVal, MaxDDVal) + SpellDamage(Target, DDType, dmgAmount) + --AddHate(Caster, Target, dmgAmount) + else + SpellDamage(Target, DDType, MinDDVal) + --AddHate(Caster, Target, MinDDVal) + end + + -- Effect component - only process this code if there is an EffectType param + if EffectType ~= nil then + + -- Determine if there is a range to effect values + if MaxEffectVal ~= nil and MinEffectVal < MaxEffectVal then + EffectValue = math.random(MinEffectVal, MaxEffectVal) + else + EffectValue = MinEffectVal + end + + -- Determine EffectType - either a DamageType or a String value passed as param 4 + if EffectType == "heal" then + ModifyHP(Caster, EffectValue) + else + SpellDamage(Target, DamageType, EffectValue) + end + + end + +end + +function tick(Caster, Target, DDType, MinDDVal, MaxDDVal, EffectType, DamageType, MinEffectVal, MaxEffectVal) + + if MaxEffectVal ~= nil and MinEffectVal < MaxEffectVal then + EffectValue = math.random(MinEffectVal, MaxEffectVal) + else + EffectValue = MinEffectVal + end + + if EffectType == "heal" then + ModifyHP(Caster, EffectValue) + else + SpellDamage(Target, DamageType, EffectValue) + end + +end diff --git a/server/Spells/Fighter/Crusader/Shadowknight/SiphonStrength.lua b/server/Spells/Fighter/Crusader/Shadowknight/SiphonStrength.lua new file mode 100644 index 000000000..1ba2d1db4 --- /dev/null +++ b/server/Spells/Fighter/Crusader/Shadowknight/SiphonStrength.lua @@ -0,0 +1,23 @@ +--[[ + Script Name : Spells/Fighter/Crusader/Shadowknight/SiphonStrength.lua + Script Author : Dello + Script Date : 18/07/2014 (Updated 9/23/19 by neatz09) + Script Purpose : + : +--]] + + +function cast(Caster, Target, DebuffAmt, BuffAmt) +--Debuff + AddSpellBonus(Target, 0, DebuffAmt) + AddSpellBonus(Target, 4, DebuffAmt) +--Buff Amt + AddSpellBonus(Caster, 0, BuffAmt) + AddSpellBonus(Caster, 4, BuffAmt) + +end + +function remove(Caster, Target) + RemoveSpellBonus(Target) +end + diff --git a/server/Spells/Fighter/Crusader/Shadowknight/SiphonStrike.lua b/server/Spells/Fighter/Crusader/Shadowknight/SiphonStrike.lua new file mode 100644 index 000000000..d234219c8 --- /dev/null +++ b/server/Spells/Fighter/Crusader/Shadowknight/SiphonStrike.lua @@ -0,0 +1,24 @@ +--[[ + Script Name : Spells/Fighter/Crusader/Shadowknight/SiphonStrike.lua + Script Author : neatz09 + Script Date : 2019.10.11 07:10:15 + Script Purpose : + : +--]] + +function cast(Caster, Target, DmgType, MinVal, MaxVal, pctHealMin, pctHealMax, DmgType2, Minval2, MaxVal2) + -- Inflicts 46 - 77 disease damage on target + SpellDamage(Target, DmgType, MinVal, MaxVal) + if LastSpellAttackHit() then + -- Applies Life Draw on termination. + -- Heals caster for 1.0 - 1.2% of max health + -- This effect cannot be critically applied. + -- The healing of this spell cannot be modified except by direct means + Say(Caster, "Heal Min: " .. GetPCTOfHP(Caster, pctHealMin)) + local min2 = GetMaxHP(Caster) * (pctHealMin / 100) + Say(Caster, "Heal Min2: " .. min2) + SpellHeal("Heal", GetPCTOfHP(Caster, pctHealMin), GetPCTOfHP(Caster, pctHealMax),Caster, 2, 1) + -- Inflicts 13 - 22 disease damage on target + SpellDamage(Target, DmgType2, MinVal2, MaxVal2) + end +end diff --git a/server/Spells/Fighter/Crusader/Shadowknight/Soulrend.lua b/server/Spells/Fighter/Crusader/Shadowknight/Soulrend.lua new file mode 100644 index 000000000..c7835d57b --- /dev/null +++ b/server/Spells/Fighter/Crusader/Shadowknight/Soulrend.lua @@ -0,0 +1,34 @@ +--[[ + Script Name : Spells/Fighter/Crusader/Shadowknight/Soulrend.lua + Script Author : Jabantiz + Script Date : 2014.01.08 03:01:53 + Script Purpose : + : +--]] + +function cast(Caster, Target, DmgType, MinVal, MaxVal) + + -- Inflicts 12 - 20 piercing damage on target + if MaxVal ~= nil and MinVal < MaxVal then + SpellDamage(Target, DmgType, math.random(MinVal, MaxVal)) + else + SpellDamage(Target, DmgType, MinVal) + end + + -- Applies Knockdown on termination. Lasts for 1.5 seconds. + -- Throws target back + -- Stuns target + -- Blurs vision of target + -- Does not affect Epic targets + if not IsEpic(Target) then + Knockback(Caster, Target, 1500) + AddControlEffect(Target, 4) + BlurVision(Target, 1.0) + AddSpellTimer(1500, "RemoveStunBlur") + end +end + +function RemoveStunBlur(Caster, Target) + RemoveControlEffect(Target, 4) + BlurVision(Target, 0) +end diff --git a/server/Spells/Fighter/Crusader/Shadowknight/TapVeins.lua b/server/Spells/Fighter/Crusader/Shadowknight/TapVeins.lua new file mode 100644 index 000000000..b352f225b --- /dev/null +++ b/server/Spells/Fighter/Crusader/Shadowknight/TapVeins.lua @@ -0,0 +1,20 @@ +--[[ + Script Name : Spells/Fighter/Crusader/Shadowknight/TapVeins.lua + Script Author : neatz09 + Script Date : 2019.10.12 12:10:27 + Script Purpose : + : +--]] +--this needs to hit everything and tap each mob + +function cast(Caster, Target, DmgType, MinVal, HealType, pctHealMin, pctHealMax) +-- Applies Tap on termination. +-- Inflicts 543 disease damage on target +SpellDamage(Target, DmgType, MinVal) + -- Heals caster for 2.2 - 2.7% of max health +-- This effect cannot be critically applied. +-- The healing of this spell cannot be modified except by direct means +SpellHeal("Heal", GetPCTOfHP(Caster, pctHealMin), GetPCTOfHP(Caster, pctHealMax), Caster, 2) + +end + diff --git a/server/Spells/Fighter/Crusader/Shadowknight/TouchofDeath.lua b/server/Spells/Fighter/Crusader/Shadowknight/TouchofDeath.lua new file mode 100644 index 000000000..1d96a63d3 --- /dev/null +++ b/server/Spells/Fighter/Crusader/Shadowknight/TouchofDeath.lua @@ -0,0 +1,26 @@ +--[[ + Script Name : Spells/Fighter/Crusader/Shadowknight/TouchofDeath.lua + Script Author : John Adams + Script Date : 2013.08.11 06:08:47 + Script Purpose : + : +--]] + +function cast(Caster, Target) + -- code to cast the spell + Say(Caster, "Whoops! Guess this is not implemented yet!") + +-- Info from spell_display_effects (remove from script when done) +-- Will absorb physical damage when the amount is greater than 60% of the target's maximum health. +-- Forces target to change their selected target to caster instantly. Hate gain is increased by 10% for the duration. + +end + +function tick(Caster, Target) + -- code to process each call_frequency (tick) set in spell_tiers +end + +function remove(Caster, Target) + -- code to remove the spell +end + diff --git a/server/Spells/Fighter/Crusader/Shadowknight/UnendingAgony.lua b/server/Spells/Fighter/Crusader/Shadowknight/UnendingAgony.lua new file mode 100644 index 000000000..720d6e7e4 --- /dev/null +++ b/server/Spells/Fighter/Crusader/Shadowknight/UnendingAgony.lua @@ -0,0 +1,21 @@ +--[[ + Script Name : Spells/Fighter/Crusader/Shadowknight/UnendingAgony.lua + Script Author : Jabantiz + Script Date : 2014.01.11 06:01:02 + Script Purpose : + : +--]] + +function cast(Caster, Target, DoTType, MinVal, TickType, TickDmg) + -- Inflicts 51 disease damage on targets in Area of Effect + if MinVal ~= nil then + SpellDamage(Target, DoTType, MinVal) + end +end + +function tick(Caster, Target, DoTType, MinVal, TickType, TickDmg) + -- Inflicts 34 disease damage on targets in Area of Effect every 4 seconds + if TickDmg ~= nil then + SpellDamage(Target, TickType, TickDmg) + end +end diff --git a/server/Spells/Fighter/Crusader/Shadowknight/UnholyBlessing.lua b/server/Spells/Fighter/Crusader/Shadowknight/UnholyBlessing.lua new file mode 100644 index 000000000..02febdf49 --- /dev/null +++ b/server/Spells/Fighter/Crusader/Shadowknight/UnholyBlessing.lua @@ -0,0 +1,33 @@ +--[[ + Script Name : Spells/Fighter/Crusader/Shadowknight/UnholyBlessing.lua + Script Author : Jabantiz + Script Date : 2014.03.11 06:03:11 + Script Purpose : + : +--]] + +function cast(Caster, Target, DmgType, DmgMin, DmgMax, HealMin, HealMax) + -- Grants a total of 5 triggers of the spell. + SetSpellTriggerCount(5, 1) + + -- When damaged this spell will cast Voracious Soul on target's attacker. + AddProc(Target, 2, 100) +end + +function proc(Caster, Target, Type, DmgType, DmgMin, DmgMax, pctHealMin, pctHealMax) + if Type == 2 then + -- Inflicts 19 - 24 disease damage on target + ProcDamage(Caster, Target, "Voraciocus Soul", DmgType, DmgMin, DmgMax) + + -- Heals caster for 24 - 30 + -- This effect cannot be critically applied. + -- The healing of this spell cannot be modified except by direct means + SpellHeal(Heal, GetPCTOfHP(Caster, pctHealMin), GetPCTOfHP(Caster, pctHealMax),Caster, 2, 1) + + RemoveTriggerFromSpell(1) + end +end + +function remove(Caster, Target) + RemoveProc(Target) +end diff --git a/server/Spells/Fighter/Crusader/Shadowknight/UnholyHunger.lua b/server/Spells/Fighter/Crusader/Shadowknight/UnholyHunger.lua new file mode 100644 index 000000000..1697188f7 --- /dev/null +++ b/server/Spells/Fighter/Crusader/Shadowknight/UnholyHunger.lua @@ -0,0 +1,30 @@ +--[[ + Script Name : Spells/Fighter/Crusader/Shadowknight/UnholyHunger.lua + Script Author : Jabantiz + Script Date : 2014.01.08 05:01:11 + Script Purpose : + : +--]] + +function cast(Caster, Target) + -- On a hit this spell may cast Unholy Strike on target of attack. Triggers about 1.6 times per minute. + AddProc(Target, 3, 16.0) +end + +function proc(Caster, Target, Type, DmgType, DmgMin, DmgMax, HealMin, HealMax) + if Type == 3 then + -- Inflicts 19 - 32 disease damage on target + ProcDamage(Caster, Target, "Unholy Strike", DmgType, DmgMin, DmgMax) + + -- Heals caster for 6 - 10 + -- This effect cannot be critically applied. + -- The healing of this spell cannot be modified except by direct means + -- Old code SpellHeal("Heal", HealMin, HealMax, Caster, 2, 1) + SpellHeal("Heal", HealMin / 100 * GetMaxHP(Caster), HealMax / 100 * GetMaxHP(Caster), Caster, 2, 1) +SendMessage(Caster, "Minimum : " .. round(MinVal *level) .. " Maximum: " .. round(MaxVal*level),"yellow") + end +end + +function remove(Caster, Target) + RemoveProc(Target) +end \ No newline at end of file diff --git a/server/Spells/Fighter/Crusader/Shadowknight/UnholyStrength.lua b/server/Spells/Fighter/Crusader/Shadowknight/UnholyStrength.lua new file mode 100644 index 000000000..7b89c0f17 --- /dev/null +++ b/server/Spells/Fighter/Crusader/Shadowknight/UnholyStrength.lua @@ -0,0 +1,19 @@ +--[[ + Script Name : Spells/Fighter/Crusader/Shadowknight/UnholyStrength.lua + Script Author : Jabantiz + Script Date : 2014.01.11 08:01:04 + Script Purpose : + : +--]] + +function cast(Caster, Target, BonusAmt, BonusDmgAmt) + -- Increases STA of raid and group members (AE) by 9.2 + AddSpellBonus(Target, 1, BonusAmt) + + -- Increase spell damage of group and raid members by 2.82%. + AddSpellBonus(Target, 700, BonusDmgAmt) +end + +function remove(Caster, Target) + RemoveSpellBonus(Target) +end diff --git a/server/Spells/Fighter/FightingChance.lua b/server/Spells/Fighter/FightingChance.lua new file mode 100644 index 000000000..963cd3c67 --- /dev/null +++ b/server/Spells/Fighter/FightingChance.lua @@ -0,0 +1,18 @@ +--[[ + Script Name : Spells/Fighter/FightingChance.lua + Script Author : John Adams + Script Date : 2013.11.22 09:11:34 + Script Purpose : Begins a Heroic Opportunity + : +--]] + +function cast(Caster, Target) + -- Begins a Heroic Opportunity + Say(Caster, "Heroic Opportunities are not implemented yet.") +end + +function precast(Caster, Target) + -- Must be engaged in combat + return IsInCombat(Caster) +end + diff --git a/server/Spells/Fighter/Intercept.lua b/server/Spells/Fighter/Intercept.lua new file mode 100644 index 000000000..84f2d99ed --- /dev/null +++ b/server/Spells/Fighter/Intercept.lua @@ -0,0 +1,28 @@ +--[[ + Script Name : Spells/Fighter/Intercept.lua + Script Author : John Adams + Script Date : 2013.08.10 02:08:36 + Script Notes : Intercept damage to Target +--]] + +function cast(Caster, Target) + + local HalfMaxHP = GetMaxHP(Target) * .5 + local CurrentHP = GetHP(Target) + + Say(Caster, "[DEVL: HalfMaxHP: " .. HalfMaxHP .. " CurrentHP: " .. CurrentHP) + + if CurrentHP <= HalfMaxHP then + -- 100% chance to intercept all damage on target. + -- On a successful intercept caster takes 50% of attack damage, target takes 75% of attack damage. + -- Spell ends after 2 successful intercepts. + else + -- 100% chance to intercept all damage on target. + -- On a successful intercept caster takes 50% of attack damage, target takes 75% of attack damage. + -- Spell ends after 1 successful intercept. + end +end + +function remove(Caster, Target) + -- code to remove the spell +end \ No newline at end of file diff --git a/server/Spells/Fighter/Kick.lua b/server/Spells/Fighter/Kick.lua new file mode 100644 index 000000000..d1d72cadb --- /dev/null +++ b/server/Spells/Fighter/Kick.lua @@ -0,0 +1,55 @@ +--[[ + Script Name : dd_dot.lua + Script Purpose : Generic damage + 1 effect script + Script Author : John Adams + Script Date : 2008.12.02 +--]] + +function cast(Caster, Target, DDType, MinDDVal, MaxDDVal, EffectType, DamageType, MinEffectVal, MaxEffectVal) + + -- DD component + if MaxDDVal ~= nil and MinDDVal < MaxDDVal then + dmgAmount = math.random(MinDDVal, MaxDDVal) + SpellDamage(Target, DDType, dmgAmount) + --AddHate(Caster, Target, dmgAmount) + else + SpellDamage(Target, DDType, MinDDVal) + --AddHate(Caster, Target, MinDDVal) + end + + -- Effect component - only process this code if there is an EffectType param + if EffectType ~= nil then + + -- Determine if there is a range to effect values + if MaxEffectVal ~= nil and MinEffectVal < MaxEffectVal then + EffectValue = math.random(MinEffectVal, MaxEffectVal) + else + EffectValue = MinEffectVal + end + + -- Determine EffectType - either a DamageType or a String value passed as param 4 + if EffectType == "heal" then + ModifyHP(Caster, EffectValue) + else + SpellDamage(Target, DamageType, EffectValue) + end + + end + +end + +function tick(Caster, Target, DDType, MinDDVal, MaxDDVal, EffectType, DamageType, MinEffectVal, MaxEffectVal) + + if MaxEffectVal ~= nil and MinEffectVal < MaxEffectVal then + EffectValue = math.random(MinEffectVal, MaxEffectVal) + else + EffectValue = MinEffectVal + end + + if EffectType == "heal" then + ModifyHP(Caster, EffectValue) + else + SpellDamage(Target, DamageType, EffectValue) + end + +end diff --git a/server/Spells/Fighter/MastersRage.lua b/server/Spells/Fighter/MastersRage.lua new file mode 100644 index 000000000..d516d749f --- /dev/null +++ b/server/Spells/Fighter/MastersRage.lua @@ -0,0 +1,23 @@ +--[[ + Script Name : Spells/Fighter/MastersRage.lua + Script Author : John Adams + Script Date : 2013.08.10 02:08:09 + Script Notes : Melee damage + debuff +--]] + +function cast(Caster, Target, DDType, MinDmg, MaxDmg, Debuff) + + -- Damage component, if a Lore and Legend Race ONLY + if MaxDDVal ~= nil and MinDDVal < MaxDDVal then + dmgAmount = math.random(MinDDVal, MaxDDVal) + SpellDamage(Target, DDType, dmgAmount) + else + SpellDamage(Target, DDType, MinDDVal) + end + + -- Debuff component + AddSkillBonus(Target, 3850377186, Debuff) -- deflection + AddSkillBonus(Target, 540022425, Debuff) -- parry + AddSkillBonus(Target, 609880714, Debuff) -- defense +end + diff --git a/server/Spells/Fighter/Provoke.lua b/server/Spells/Fighter/Provoke.lua new file mode 100644 index 000000000..347fa3d74 --- /dev/null +++ b/server/Spells/Fighter/Provoke.lua @@ -0,0 +1,25 @@ +--[[ + Script Name : Spells/Fighter/Provoke.lua + Script Author : John Adams + Script Date : 2013.08.11 03:08:32 + Script Purpose : + : +--]] + +function cast(Caster, Target) + -- code to cast the spell + Say(Caster, "Whoops! Guess this is not implemented yet!") + +-- Info from spell_display_effects (remove from script when done) +-- Increases Threat to target by 209 - 255 + +end + +function tick(Caster, Target) + -- code to process each call_frequency (tick) set in spell_tiers +end + +function remove(Caster, Target) + -- code to remove the spell +end + diff --git a/server/Spells/Fighter/Recklessness.lua b/server/Spells/Fighter/Recklessness.lua new file mode 100644 index 000000000..2ab003278 --- /dev/null +++ b/server/Spells/Fighter/Recklessness.lua @@ -0,0 +1,33 @@ +--[[ + Script Name : Spells/Fighter/Recklessness.lua + Script Author : John Adams + Script Date : 2013.08.11 02:08:15 + Script Purpose : + : +--]] + +function cast(Caster, Target) + -- code to cast the spell + Say(Caster, "Whoops! Guess this is not implemented yet!") + +-- Info from spell_display_effects (remove from script when done) +-- Doubles the caster's potency +-- Increases all damage done to caster by 50% +-- Exiting this stance in combat sets the fighter to extremely low health. Does not occur in PVP combat. +-- Grants Reckless to caster, halving all taunt values and caster cannot block incoming attacks +-- Decreases Hate Gain of caster by 30.0% +-- Increases Potency of caster by 50.0% +-- Removes all threat positions from abilities that inflict damage. +-- Must not be engaged in combat +-- Cannot be modified except by direct means + +end + +function tick(Caster, Target) + -- code to process each call_frequency (tick) set in spell_tiers +end + +function remove(Caster, Target) + -- code to remove the spell +end + diff --git a/server/Spells/Fighter/Rescue.lua b/server/Spells/Fighter/Rescue.lua new file mode 100644 index 000000000..616950f01 --- /dev/null +++ b/server/Spells/Fighter/Rescue.lua @@ -0,0 +1,26 @@ +--[[ + Script Name : Spells/Fighter/Rescue.lua + Script Author : John Adams + Script Date : 2013.08.11 02:08:17 + Script Purpose : + : +--]] + +function cast(Caster, Target) + -- code to cast the spell + Say(Caster, "Whoops! Guess this is not implemented yet!") + +-- Info from spell_display_effects (remove from script when done) +-- Increases threat priority of target by 3 positions +-- Increases Threat to target by 1,448 + +end + +function tick(Caster, Target) + -- code to process each call_frequency (tick) set in spell_tiers +end + +function remove(Caster, Target) + -- code to remove the spell +end + diff --git a/server/Spells/Fighter/Taunt.lua b/server/Spells/Fighter/Taunt.lua new file mode 100644 index 000000000..bc810c64f --- /dev/null +++ b/server/Spells/Fighter/Taunt.lua @@ -0,0 +1,34 @@ +--[[ + Script Name : Spells/Fighter/Taunt.lua + Script Author : Dello + Script Date : 19/07/2014 + Script Purpose : + : +--]] + + +function cast(Caster, Target, DmgType, MinVal, MaxVal) + local spell_name = GetSpellName() + if spell_name ~= "Faith Strike I" and spell_name ~= "Faith Strike II" and spell_name ~= "Faith Strike III" then + + if MaxVal ~= nil and MinVal < MaxVal then + SpellDamage(Target, DmgType, math.random(MinVal, MaxVal)) + else + SpellDamage(Target, DmgType, MinVal) + end + + local max_hp = GetMaxHP(Target) + MinVal = (max_hp * (MinVal / 100)) + MaxVal = (max_hp * (MaxVal / 100)) + end + + if MaxVal ~= nil and MinVal < MaxVal then + SpellDamage(Target, DmgType, math.random(MinVal, MaxVal)) + else + SpellDamage(Target, DmgType, MinVal) + end + + SpellHeal("Heal", MinVal, MaxVal, 0, 2, 1) + + +end \ No newline at end of file diff --git a/server/Spells/Fighter/Warrior/Anger.lua b/server/Spells/Fighter/Warrior/Anger.lua new file mode 100644 index 000000000..44937c124 --- /dev/null +++ b/server/Spells/Fighter/Warrior/Anger.lua @@ -0,0 +1,21 @@ +--[[ + Script Name : Spells/Fighter/Warrior/Anger.lua + Script Author : Dello + Script Date : 2014.07.11 03:07:45 + Script Purpose : + : +--]] + +function cast(Caster, Target, MinTaunt, MaxTaunt) + -- Increases Threat to target by 51 - 62 + if MaxTaunt ~= nil and MinTaunt < MaxTaunt then + AddHate(Caster, Target, math.random(MinTaunt, MaxTaunt)) + else + AddHate(Caster, Target, MinTaunt) + end + + -- Interrupts target + if target ~= nil then + Interrupt(Caster, Target) + end +end diff --git a/server/Spells/Fighter/Warrior/Berserker/AbandonedFury.lua b/server/Spells/Fighter/Warrior/Berserker/AbandonedFury.lua new file mode 100644 index 000000000..c524fb1e2 --- /dev/null +++ b/server/Spells/Fighter/Warrior/Berserker/AbandonedFury.lua @@ -0,0 +1,28 @@ +--[[ + Script Name : Spells/Fighter/Warrior/Berserker/AbandonedFury.lua + Script Author : John Adams + Script Date : 2013.08.11 02:08:09 + Script Purpose : + : +--]] + +function cast(Caster, Target) + -- code to cast the spell + Say(Caster, "Whoops! Guess this is not implemented yet!") + +-- Info from spell_display_effects (remove from script when done) +-- Decreases Defense of caster by 1.8 +-- Increases Crushing, Slashing and Piercing of caster by 2.4 +-- On a melee hit this spell may cast Furious Assault on target of attack. Triggers about 2.0 times per minute. +-- Inflicts 9 - 16 melee damage on target encounter + +end + +function tick(Caster, Target) + -- code to process each call_frequency (tick) set in spell_tiers +end + +function remove(Caster, Target) + -- code to remove the spell +end + diff --git a/server/Spells/Fighter/Warrior/Berserker/Adrenaline.lua b/server/Spells/Fighter/Warrior/Berserker/Adrenaline.lua new file mode 100644 index 000000000..47ef1b174 --- /dev/null +++ b/server/Spells/Fighter/Warrior/Berserker/Adrenaline.lua @@ -0,0 +1,29 @@ +--[[ + Script Name : Spells/Fighter/Warrior/Berserker/Adrenaline.lua + Script Author : John Adams + Script Date : 2013.08.11 02:08:15 + Script Purpose : + : +--]] + +function cast(Caster, Target) + -- code to cast the spell + Say(Caster, "Whoops! Guess this is not implemented yet!") + +-- Info from spell_display_effects (remove from script when done) +-- Applies Lost Adrenaline on termination. Lasts for 30.0 seconds. +-- Drains power instantly and every 3 seconds. +-- Cannot be modified except by direct means +-- 50% of all damage received by the caster is instantly regenerated. +-- Adrenaline can only be used while berserk! + +end + +function tick(Caster, Target) + -- code to process each call_frequency (tick) set in spell_tiers +end + +function remove(Caster, Target) + -- code to remove the spell +end + diff --git a/server/Spells/Fighter/Warrior/Berserker/AggressiveDefense.lua b/server/Spells/Fighter/Warrior/Berserker/AggressiveDefense.lua new file mode 100644 index 000000000..20983bf23 --- /dev/null +++ b/server/Spells/Fighter/Warrior/Berserker/AggressiveDefense.lua @@ -0,0 +1,16 @@ +--[[ + Script Name : Spells/Fighter/Warrior/Berserker/AggressiveDefense.lua + Script Author : neatz09 + Script Date : 2019.10.17 12:10:52 + Script Purpose : + : +--]] + +-- Info from spell_display_effects (remove from script when done) +-- Increases Mitigation of caster vs elemental, noxious and arcane damage by 879 +-- When damaged with a melee weapon this spell has a 20% chance to cast Provoking Counterattack on target's attacker. +-- Increases Threat to target by 472 +-- Inflicts 71 - 118 slashing damage on target +-- On a block this spell will cast Provoking Counterattack on target's victim. +-- Increases Threat to target by 472 +-- Increases Mitigation of caster vs elemental and noxious damage by 879 diff --git a/server/Spells/Fighter/Warrior/Berserker/BerserkRage.lua b/server/Spells/Fighter/Warrior/Berserker/BerserkRage.lua new file mode 100644 index 000000000..8f84e8b7a --- /dev/null +++ b/server/Spells/Fighter/Warrior/Berserker/BerserkRage.lua @@ -0,0 +1,18 @@ +--[[ + Script Name : Spells/Fighter/Warrior/Berserker/BerserkRage.lua + Script Author : neatz09 + Script Date : 2019.10.15 06:10:23 + Script Purpose : + : +--]] + +-- Info from spell_display_effects (remove from script when done) +-- On any combat or spell hit this spell may cast Berserk on target. Lasts for 10.0 seconds. Triggers about 2.0 times per minute. +-- Increases Haste of target by 9.6 +-- Increases DPS of target by 9.6 +-- When damaged this spell has a 30% chance to cast Berserk on target. Lasts for 10.0 seconds. +-- Increases Haste of target by 9.6 +-- Increases DPS of target by 9.6 +-- On a kill this spell will cast Berserk on target. Lasts for 10.0 seconds. +-- Increases Haste of target by 9.6 +-- Increases DPS of target by 9.6 diff --git a/server/Spells/Fighter/Warrior/Berserker/BerserkerOnslaught.lua b/server/Spells/Fighter/Warrior/Berserker/BerserkerOnslaught.lua new file mode 100644 index 000000000..311cff08b --- /dev/null +++ b/server/Spells/Fighter/Warrior/Berserker/BerserkerOnslaught.lua @@ -0,0 +1,16 @@ +--[[ + Script Name : Spells/Fighter/Warrior/Berserker/BerserkerOnslaught.lua + Script Author : Dello + Script Date : 12/06/2014 + Script Purpose : + : +--]] + + +function cast(Caster, Target, DmgType, MinVal, MaxVal) + if MaxVal ~= nil and MinVal < MaxVal then + SpellDamage(Target, DmgType, math.random(MinVal, MaxVal)) + else + SpellDamage(Target, DmgType, MinVal) + end +end diff --git a/server/Spells/Fighter/Warrior/Berserker/BloodRage.lua b/server/Spells/Fighter/Warrior/Berserker/BloodRage.lua new file mode 100644 index 000000000..745fca7f7 --- /dev/null +++ b/server/Spells/Fighter/Warrior/Berserker/BloodRage.lua @@ -0,0 +1,13 @@ +--[[ + Script Name : Spells/Fighter/Warrior/Berserker/BloodRage.lua + Script Author : neatz09 + Script Date : 2019.10.14 08:10:40 + Script Purpose : + : +--]] + +-- Info from spell_display_effects (remove from script when done) +-- When damaged with a melee weapon this spell has a 33% chance to cast Adrenal Flow on caster. +-- Heals caster for 1.3 - 1.9% of max health +-- This effect cannot be critically applied. +-- This effect can only trigger once every 0.2 seconds. diff --git a/server/Spells/Fighter/Warrior/Berserker/Bloodbath.lua b/server/Spells/Fighter/Warrior/Berserker/Bloodbath.lua new file mode 100644 index 000000000..9612d6d8b --- /dev/null +++ b/server/Spells/Fighter/Warrior/Berserker/Bloodbath.lua @@ -0,0 +1,15 @@ +--[[ + Script Name : Spells/Fighter/Warrior/Berserker/Bloodbath.lua + Script Author : neatz09 + Script Date : 2019.10.17 12:10:25 + Script Purpose : + : +--]] + +-- Info from spell_display_effects (remove from script when done) +-- Applies Knockdown on termination. Lasts for 1.5 seconds. +-- Throws target back +-- Blurs vision of target +-- Stuns target +-- Does not affect Epic targets +-- Inflicts 17 - 51 melee damage on targets in Area of Effect diff --git a/server/Spells/Fighter/Warrior/Berserker/Bloodlust.lua b/server/Spells/Fighter/Warrior/Berserker/Bloodlust.lua new file mode 100644 index 000000000..13c0cc533 --- /dev/null +++ b/server/Spells/Fighter/Warrior/Berserker/Bloodlust.lua @@ -0,0 +1,16 @@ +--[[ + Script Name : Spells/Fighter/Warrior/Berserker/Bloodlust.lua + Script Author : Dello + Script Date : 10/06/2014 + Script Purpose : + : +--]] + +function cast(Caster, Target, MaxVal) + AddSpellBonus(Target, 0, MaxVal) + AddSpellBonus(Target, 2, MaxVal) +end + +function remove(Caster, Target, MaxVal) + RemoveSpellBonus(Target) +end diff --git a/server/Spells/Fighter/Warrior/Berserker/Bloodshower.lua b/server/Spells/Fighter/Warrior/Berserker/Bloodshower.lua new file mode 100644 index 000000000..d1d72cadb --- /dev/null +++ b/server/Spells/Fighter/Warrior/Berserker/Bloodshower.lua @@ -0,0 +1,55 @@ +--[[ + Script Name : dd_dot.lua + Script Purpose : Generic damage + 1 effect script + Script Author : John Adams + Script Date : 2008.12.02 +--]] + +function cast(Caster, Target, DDType, MinDDVal, MaxDDVal, EffectType, DamageType, MinEffectVal, MaxEffectVal) + + -- DD component + if MaxDDVal ~= nil and MinDDVal < MaxDDVal then + dmgAmount = math.random(MinDDVal, MaxDDVal) + SpellDamage(Target, DDType, dmgAmount) + --AddHate(Caster, Target, dmgAmount) + else + SpellDamage(Target, DDType, MinDDVal) + --AddHate(Caster, Target, MinDDVal) + end + + -- Effect component - only process this code if there is an EffectType param + if EffectType ~= nil then + + -- Determine if there is a range to effect values + if MaxEffectVal ~= nil and MinEffectVal < MaxEffectVal then + EffectValue = math.random(MinEffectVal, MaxEffectVal) + else + EffectValue = MinEffectVal + end + + -- Determine EffectType - either a DamageType or a String value passed as param 4 + if EffectType == "heal" then + ModifyHP(Caster, EffectValue) + else + SpellDamage(Target, DamageType, EffectValue) + end + + end + +end + +function tick(Caster, Target, DDType, MinDDVal, MaxDDVal, EffectType, DamageType, MinEffectVal, MaxEffectVal) + + if MaxEffectVal ~= nil and MinEffectVal < MaxEffectVal then + EffectValue = math.random(MinEffectVal, MaxEffectVal) + else + EffectValue = MinEffectVal + end + + if EffectType == "heal" then + ModifyHP(Caster, EffectValue) + else + SpellDamage(Target, DamageType, EffectValue) + end + +end diff --git a/server/Spells/Fighter/Warrior/Berserker/BodyCheck.lua b/server/Spells/Fighter/Warrior/Berserker/BodyCheck.lua new file mode 100644 index 000000000..8c08dbc9b --- /dev/null +++ b/server/Spells/Fighter/Warrior/Berserker/BodyCheck.lua @@ -0,0 +1,31 @@ +--[[ + Script Name : Spells/Fighter/Warrior/Berserker/BodyCheck.lua + Script Author : Dello + Script Date : 11/06/2014 + Script Purpose : + : +--]] + +function cast(Caster, Target, DDType, MinDmg, MaxDmg) + + -- Inflicts 6 - 10 crushing damage on target + if MaxDmg ~= nil and MinDmg < MaxDmg then + SpellDamage(Target, DDType, math.random(MinDmg, MaxDmg)) + else + SpellDamage(Target, DDType, MinDmg) + end + + if not IsEpic(Target) then + Knockback(Caster, Target, 4000, 150) + AddControlEffect(Target, 4) + end + + -- Resistibility increases against targets higher than level 31. + +end + + +function remove(Caster, Target) + RemoveKnockback(Caster, Target) + RemoveControlEffect(Target, 4) +end diff --git a/server/Spells/Fighter/Warrior/Berserker/Chaos.lua b/server/Spells/Fighter/Warrior/Berserker/Chaos.lua new file mode 100644 index 000000000..7b7cf5c76 --- /dev/null +++ b/server/Spells/Fighter/Warrior/Berserker/Chaos.lua @@ -0,0 +1,20 @@ +--[[ + Script Name : Spells/Fighter/Warrior/Berserker/Chaos.lua + Script Author : Dello + Script Date : 12/06/2014 + Script Purpose : + : +--]] +function cast(Caster, Target, ResistAmt) + + AddSpellBonus(Target, 200, ResistAmt) +end + +-- Increases Mitigation of group members (AE) vs physical damage by 94 + + + +function remove(Caster, Target) + RemoveSpellBonus(Target) +end + diff --git a/server/Spells/Fighter/Warrior/Berserker/ControlledRage.lua b/server/Spells/Fighter/Warrior/Berserker/ControlledRage.lua new file mode 100644 index 000000000..3c7c01968 --- /dev/null +++ b/server/Spells/Fighter/Warrior/Berserker/ControlledRage.lua @@ -0,0 +1,30 @@ +--[[ + Script Name : Spells/Fighter/Warrior/Berserker/ControlledRage.lua + Script Author : neatz09 + Script Date : 2019.10.15 05:10:24 + Script Purpose : + : +--]] + +function cast(Caster, Target, OffDebuff, DefAmt) +-- Increases caster's chance to block by 10.0% + AddSpellBonus(Target, 651, 10) + +-- Decreases Haste of caster by 14.0 + AddSpellBonus(Target, 617, OffDebuff) + +-- Decreases Multi Attack of caster by 14.0 + AddSpellBonus(Target, 641, OffDebuff) + +-- Increases Parry of caster by 10.8 + AddSkillBonus(Target, GetSkillIDByName("Parry"), DefAmt) + +-- Increases Defense of caster by 10.8 + AddSkillBonus(Target, GetSkillIDByName("Defense"), DefAmt) +end + +function remove(Caster, Target) + RemoveSpellBonus(Target) + RemoveSkillBonus(Target) + +end diff --git a/server/Spells/Fighter/Warrior/Berserker/Demolish.lua b/server/Spells/Fighter/Warrior/Berserker/Demolish.lua new file mode 100644 index 000000000..ba2056261 --- /dev/null +++ b/server/Spells/Fighter/Warrior/Berserker/Demolish.lua @@ -0,0 +1,28 @@ +--[[ + Script Name : Spells/Fighter/Warrior/Berserker/Demolish.lua + Script Author : Dello + Script Date : 12/06/2014 + Script Purpose : + : +--]] + + +function cast(Caster, Target, DmgType, MinVal, MaxVal) + if MaxVal ~= nil and MinVal < MaxVal then + SpellDamage(Target, DmgType, math.random(MinVal, MaxVal)) + else + SpellDamage(Target, DmgType, MinVal) + end + + if not IsEpic(Target) then + AddControlEffect(Target, 2) + end +end + +function remove(Caster, Target) + RemoveControlEffect(Target, 2) +end + + + + diff --git a/server/Spells/Fighter/Warrior/Berserker/DestructiveRage.lua b/server/Spells/Fighter/Warrior/Berserker/DestructiveRage.lua new file mode 100644 index 000000000..400898d86 --- /dev/null +++ b/server/Spells/Fighter/Warrior/Berserker/DestructiveRage.lua @@ -0,0 +1,17 @@ +--[[ + Script Name : Spells/Fighter/Warrior/Berserker/DestructiveRage.lua + Script Author : John Adams + Script Date : 2013.08.11 02:08:15 + Script Purpose : + : +--]] + +function cast(Caster, Target, AttackSpeed) + AddSpellBonus(Target, 617, AttackSpeed) + Say(Caster, "T10 version missing strikethrough AE") + +end + +function remove(Caster, Target, MaxVal) + RemoveSpellBonus(Target) +end diff --git a/server/Spells/Fighter/Warrior/Berserker/Enrage.lua b/server/Spells/Fighter/Warrior/Berserker/Enrage.lua new file mode 100644 index 000000000..55c423715 --- /dev/null +++ b/server/Spells/Fighter/Warrior/Berserker/Enrage.lua @@ -0,0 +1,18 @@ +--[[ + Script Name : Spells/Fighter/Warrior/Berserker/Enrage.lua + Script Author : Dello + Script Date : 10/06/2014 + Script Purpose : + : +--]] + +function cast(Caster, Target, MinTaunt, MaxTaunt) + + if MaxTaunt ~= nil and MinTaunt < MaxTaunt then + + AddHate(Caster, Target, math.random(MinTaunt, MaxTaunt)) + else + AddHate(Caster, Target, MinTaunt) + end +end + diff --git a/server/Spells/Fighter/Warrior/Berserker/Frenzy.lua b/server/Spells/Fighter/Warrior/Berserker/Frenzy.lua new file mode 100644 index 000000000..bb49c9479 --- /dev/null +++ b/server/Spells/Fighter/Warrior/Berserker/Frenzy.lua @@ -0,0 +1,21 @@ +--[[ + Script Name : Spells/Fighter/Warrior/Berserker/Frenzy.lua + Script Author : neatz09 + Script Date : 2019.10.11 06:10:24 + Script Purpose : + : +--]] + +function cast(Caster, Target, DmgType, MinVal, MaxVal, MinVal2, MaxVal2, MinVal3, MaxVal3) +-- Inflicts 118 - 354 melee damage on target +SpellDamage(Target, DmgType, MinVal, MaxVal) +-- Inflicts 147 - 443 melee damage on target +if LastSpellAttackHit() then +SpellDamage(Target, DmgType, MinVal2, MaxVal2) +end +-- Inflicts 177 - 532 melee damage on target +if LastSpellAttackHit() then +SpellDamage(Target, DmgType, MinVal3, MaxVal3) +end +end + diff --git a/server/Spells/Fighter/Warrior/Berserker/Growl.lua b/server/Spells/Fighter/Warrior/Berserker/Growl.lua new file mode 100644 index 000000000..a0c50c1c1 --- /dev/null +++ b/server/Spells/Fighter/Warrior/Berserker/Growl.lua @@ -0,0 +1,30 @@ +--[[ + Script Name : taunt.lua + Script Purpose : Generic Taunt script + Script Author : John Adams + Script Date : 2008.12.07 +--]] + +function cast(Caster, Target, TauntType, MinTauntVal, MaxTauntVal) + -- Taunt component + if MaxTauntVal ~= nil and MinTauntVal < MaxTauntVal then + hateAmount = math.random(MinTauntVal, MaxTauntVal) + AddHate(Caster, Target, hateAmount) + else + AddHate(Caster, Target, MinTauntVal) + end +end + +function tick(Caster, Target, TauntType, MinTauntVal, MaxTauntVal) + if MaxTauntVal ~= nil and MinTauntVal < MaxTauntVal then + hateAmount = math.random(MinTauntVal, MaxTauntVal) + AddHate(Caster, Target, hateAmount) + else + AddHate(Caster, Target, MinTauntVal) + end +end + + +function remove(Caster, Target, TauntType, MinTauntVal, MaxTauntVal) + +end \ No newline at end of file diff --git a/server/Spells/Fighter/Warrior/Berserker/HeadCrush.lua b/server/Spells/Fighter/Warrior/Berserker/HeadCrush.lua new file mode 100644 index 000000000..d67fe9fc3 --- /dev/null +++ b/server/Spells/Fighter/Warrior/Berserker/HeadCrush.lua @@ -0,0 +1,20 @@ +--[[ + Script Name : Spells/Fighter/Warrior/Berserker/HeadCrush.lua + Script Author : neatz09 + Script Date : 2019.10.11 06:10:36 + Script Purpose : + : +--]] + +-- Inflicts 41 - 125 crushing damage on target +function cast(Caster, Target, DmgType, MinVal, MaxVal, SkillAmt) +SpellDamage(Target, DmgType, MinVal, MaxVal) +-- Interrupts target +Interrupt(Target) +-- Decreases Focus of target by 6.9 + AddSkillBonus(Target, GetSkillIDByName("Focus"), SkillAmt) +end + +function remove(Caster, Target) + RemoveSkillBonus(Target) +end \ No newline at end of file diff --git a/server/Spells/Fighter/Warrior/Berserker/Insolence.lua b/server/Spells/Fighter/Warrior/Berserker/Insolence.lua new file mode 100644 index 000000000..c6b71260c --- /dev/null +++ b/server/Spells/Fighter/Warrior/Berserker/Insolence.lua @@ -0,0 +1,30 @@ +--[[ + Script Name : Spells/Fighter/Warrior/Berserker/Insolence.lua + Script Author : John Adams + Script Date : 2013.08.11 02:08:47 + Script Purpose : + : +--]] + +function cast(Caster, Target) + -- code to cast the spell + Say(Caster, "Whoops! Guess this is not implemented yet!") + +-- Info from spell_display_effects (remove from script when done) +-- Applies Insolent Gibe. +-- Increases Threat to targets in Area of Effect by 1,298 - 1,814 +-- Applies Insolent Assault. +-- Inflicts 596 - 895 melee damage on targets in Area of Effect +-- When any damage is received this spell has a 50% chance to cast Insolent Gibe on target's attacker. +-- Increases Threat to target encounter by 608 - 738 + +end + +function tick(Caster, Target) + -- code to process each call_frequency (tick) set in spell_tiers +end + +function remove(Caster, Target) + -- code to remove the spell +end + diff --git a/server/Spells/Fighter/Warrior/Berserker/Juggernaut.lua b/server/Spells/Fighter/Warrior/Berserker/Juggernaut.lua new file mode 100644 index 000000000..44dc2733a --- /dev/null +++ b/server/Spells/Fighter/Warrior/Berserker/Juggernaut.lua @@ -0,0 +1,31 @@ +--[[ + Script Name : Spells/Fighter/Warrior/Berserker/Juggernaut.lua + Script Author : John Adams + Script Date : 2013.08.11 02:08:13 + Script Purpose : + : +--]] + +function cast(Caster, Target) + -- code to cast the spell + Say(Caster, "Whoops! Guess this is not implemented yet!") + +-- Info from spell_display_effects (remove from script when done) +-- Increases Crit Bonus of caster by 15.3% +-- Decreases Parry of caster by 2.2 +-- Decreases Mitigation of caster vs elemental, noxious and arcane damage by 3467 +-- All combat arts have their damage increased by 17% +-- Decreases Defense of caster by 2.2 +-- Decreases Mitigation of caster vs physical damage by 3467 +-- This ability can only be used while berserk! + +end + +function tick(Caster, Target) + -- code to process each call_frequency (tick) set in spell_tiers +end + +function remove(Caster, Target) + -- code to remove the spell +end + diff --git a/server/Spells/Fighter/Warrior/Berserker/KneeBreak.lua b/server/Spells/Fighter/Warrior/Berserker/KneeBreak.lua new file mode 100644 index 000000000..68be36cb3 --- /dev/null +++ b/server/Spells/Fighter/Warrior/Berserker/KneeBreak.lua @@ -0,0 +1,18 @@ +--[[ + Script Name : Spells/Fighter/Warrior/Berserker/KneeBreak.lua + Script Author : Dello + Script Date : 10/06/2014 + Script Purpose : + : +--]] + + +function cast(Caster, Target, DmgType, MinVal, MaxVal) + if MaxVal ~= nil and MinVal < MaxVal then + SpellDamage(Target, DmgType, math.random(MinVal, MaxVal)) + else + SpellDamage(Target, DmgType, MinVal) + end +end + + diff --git a/server/Spells/Fighter/Warrior/Berserker/Maul.lua b/server/Spells/Fighter/Warrior/Berserker/Maul.lua new file mode 100644 index 000000000..928d8742b --- /dev/null +++ b/server/Spells/Fighter/Warrior/Berserker/Maul.lua @@ -0,0 +1,27 @@ +--[[ + Script Name : Spells/Fighter/Warrior/Berserker/Maul.lua + Script Author : Dello + Script Date : 10/06/2014 + Script Purpose : + : +--]] + + +function cast(Caster, Target, DmgType, MinVal, MaxVal, SkillAmt) + + AddSkillBonus(Target, GetSkillIDByName("Slashing"), SkillAmt) + + AddSkillBonus(Target, GetSkillIDByName("Piercing"), SkillAmt) + + AddSkillBonus(Target, GetSkillIDByName("Crushing"), SkillAmt) + + if MaxVal ~= nil and MinVal < MaxVal then + SpellDamage(Target, DmgType, math.random(MinVal, MaxVal)) + else + SpellDamage(Target, DmgType, MinVal) + end +end + +function remove(Caster, Target) + RemoveSkillBonus(Target) +end diff --git a/server/Spells/Fighter/Warrior/Berserker/Mock.lua b/server/Spells/Fighter/Warrior/Berserker/Mock.lua new file mode 100644 index 000000000..4b23a87ba --- /dev/null +++ b/server/Spells/Fighter/Warrior/Berserker/Mock.lua @@ -0,0 +1,20 @@ +--[[ + Script Name : Spells/Fighter/Warrior/Berserker/Mock.lua + Script Purpose : Generic Taunt script + Script Author : Dello + Script Date : 10/06/2014 +--]] + +function cast(Caster, Target, MinTaunt, MaxTaunt) + -- Increases Threat to target by 51 - 62 + if MaxTaunt ~= nil and MinTaunt < MaxTaunt then + AddHate(Caster, Target, math.random(MinTaunt, MaxTaunt)) + else + AddHate(Caster, Target, MinTaunt) + end + + -- Interrupts target + if target ~= nil then + Interrupt(Caster, Target) + end +end diff --git a/server/Spells/Fighter/Warrior/Berserker/Mutilate.lua b/server/Spells/Fighter/Warrior/Berserker/Mutilate.lua new file mode 100644 index 000000000..bef1ab0f0 --- /dev/null +++ b/server/Spells/Fighter/Warrior/Berserker/Mutilate.lua @@ -0,0 +1,34 @@ +--[[ + Script Name : Spells/Fighter/Warrior/Berserker/Mutilate.lua + Script Author : neatz09 + Script Date : 2019.10.14 07:10:19 + Script Purpose : + : +--]] + +-- Info from spell_display_effects (remove from script when done) +-- Inflicts 4 - 14 slashing damage on target + +function cast(Caster, Target, DmgType, MinVal, MaxVal, DotType, DotMin, DotMax, AttkSpeed) +-- Inflicts 4 - 14 slashing damage on target +SpellDamage(Target, DmgType, MinVal, MaxVal) + -- Inflicts 10 slashing damage on target instantly and every 4 seconds +spellDamage(Target, DotType, DotMin, DotMax) +-- Decreases Haste of target by 5.1 +AddSpellBonus(Target, 617, AttkSpeed) +end + + +function tick(Caster, Target, DotType, DotMin, DotMax) +spellDamage(Target, DotType, DotMin, DotMax) +end + +function remove(Caster, Target) + RemoveSpellBonus(Target) +end + + + + + + diff --git a/server/Spells/Fighter/Warrior/Berserker/Offend.lua b/server/Spells/Fighter/Warrior/Berserker/Offend.lua new file mode 100644 index 000000000..a0c50c1c1 --- /dev/null +++ b/server/Spells/Fighter/Warrior/Berserker/Offend.lua @@ -0,0 +1,30 @@ +--[[ + Script Name : taunt.lua + Script Purpose : Generic Taunt script + Script Author : John Adams + Script Date : 2008.12.07 +--]] + +function cast(Caster, Target, TauntType, MinTauntVal, MaxTauntVal) + -- Taunt component + if MaxTauntVal ~= nil and MinTauntVal < MaxTauntVal then + hateAmount = math.random(MinTauntVal, MaxTauntVal) + AddHate(Caster, Target, hateAmount) + else + AddHate(Caster, Target, MinTauntVal) + end +end + +function tick(Caster, Target, TauntType, MinTauntVal, MaxTauntVal) + if MaxTauntVal ~= nil and MinTauntVal < MaxTauntVal then + hateAmount = math.random(MinTauntVal, MaxTauntVal) + AddHate(Caster, Target, hateAmount) + else + AddHate(Caster, Target, MinTauntVal) + end +end + + +function remove(Caster, Target, TauntType, MinTauntVal, MaxTauntVal) + +end \ No newline at end of file diff --git a/server/Spells/Fighter/Warrior/Berserker/OpenWounds.lua b/server/Spells/Fighter/Warrior/Berserker/OpenWounds.lua new file mode 100644 index 000000000..99e269f36 --- /dev/null +++ b/server/Spells/Fighter/Warrior/Berserker/OpenWounds.lua @@ -0,0 +1,28 @@ +--[[ + Script Name : Spells/Fighter/Warrior/Berserker/OpenWounds.lua + Script Author : John Adams + Script Date : 2013.08.11 02:08:30 + Script Purpose : + : +--]] + +function cast(Caster, Target) + -- code to cast the spell + Say(Caster, "Whoops! Guess this is not implemented yet!") + +-- Info from spell_display_effects (remove from script when done) +-- Applies Open Wounds. +-- Inflicts 100 - 185 slashing damage on targets in Area of Effect +-- Increases Attack Speed of caster by 30.6 +-- Caster has a 100.0% chance of having one of their weapons' autoattack affect multiple targets they are facing, who are within range of that weapon. + +end + +function tick(Caster, Target) + -- code to process each call_frequency (tick) set in spell_tiers +end + +function remove(Caster, Target) + -- code to remove the spell +end + diff --git a/server/Spells/Fighter/Warrior/Berserker/RagingBlow.lua b/server/Spells/Fighter/Warrior/Berserker/RagingBlow.lua new file mode 100644 index 000000000..91527d1e2 --- /dev/null +++ b/server/Spells/Fighter/Warrior/Berserker/RagingBlow.lua @@ -0,0 +1,19 @@ +--[[ + Script Name : Spells/Fighter/Warrior/Berserker/RagingBlow.lua + Script Author : Dello + Script Date : 10/06/2014 + Script Purpose : + : +--]] + + +function cast(Caster, Target, DmgType, MinVal, MaxVal, AddHate) + + if MaxVal ~= nil and MinVal < MaxVal then + SpellDamage(Target, DmgType, math.random(MinVal, MaxVal)) + else + SpellDamage(Target, DmgType, MinVal) + + AddHate(Caster, Target) + end +end diff --git a/server/Spells/Fighter/Warrior/Berserker/Rampage.lua b/server/Spells/Fighter/Warrior/Berserker/Rampage.lua new file mode 100644 index 000000000..03c90ca52 --- /dev/null +++ b/server/Spells/Fighter/Warrior/Berserker/Rampage.lua @@ -0,0 +1,27 @@ +--[[ + Script Name : Spells/Fighter/Warrior/Berserker/Rampage.lua + Script Author : John Adams + Script Date : 2013.08.11 02:08:37 + Script Purpose : + : +--]] + +function cast(Caster, Target) + -- code to cast the spell + Say(Caster, "Whoops! Guess this is not implemented yet!") + +-- Info from spell_display_effects (remove from script when done) +-- On a melee hit this spell will cast Rampaging Blow on target of attack. +-- Inflicts 138 - 256 melee damage on targets in Area of Effect +-- Grants a total of 10 triggers of the spell. + +end + +function tick(Caster, Target) + -- code to process each call_frequency (tick) set in spell_tiers +end + +function remove(Caster, Target) + -- code to remove the spell +end + diff --git a/server/Spells/Fighter/Warrior/Berserker/RecklessAide.lua b/server/Spells/Fighter/Warrior/Berserker/RecklessAide.lua new file mode 100644 index 000000000..188f2dd52 --- /dev/null +++ b/server/Spells/Fighter/Warrior/Berserker/RecklessAide.lua @@ -0,0 +1,26 @@ +--[[ + Script Name : Spells/Fighter/Warrior/Berserker/RecklessAide.lua + Script Author : John Adams + Script Date : 2013.08.11 02:08:32 + Script Purpose : + : +--]] + +function cast(Caster, Target) + -- code to cast the spell + Say(Caster, "Whoops! Guess this is not implemented yet!") + +-- Info from spell_display_effects (remove from script when done) +-- Adds 0.8% to base avoidance. +-- Grants target a 13% chance of making an additional attempt to avoid being hit by a melee attack using the caster's avoidance. + +end + +function tick(Caster, Target) + -- code to process each call_frequency (tick) set in spell_tiers +end + +function remove(Caster, Target) + -- code to remove the spell +end + diff --git a/server/Spells/Fighter/Warrior/Berserker/Rupture.lua b/server/Spells/Fighter/Warrior/Berserker/Rupture.lua new file mode 100644 index 000000000..abe65b7d9 --- /dev/null +++ b/server/Spells/Fighter/Warrior/Berserker/Rupture.lua @@ -0,0 +1,19 @@ +--[[ + Script Name : Spells/Fighter/Warrior/Berserker/Rupture.lua + Script Author : John Adams + Script Date : 2013.11.23 09:11:30 + Script Purpose : + : +--]] + +-- Info from spell_display_effects (remove from script when done) +function cast(Caster, Target, DDType, MinDmg, MaxDmg) + + -- Inflicts 3 - 10 melee damage on target + if MaxDmg ~= nil and MinDmg < MaxDmg then + SpellDamage(Target, DDType, math.random(MinDmg, MaxDmg)) + else + SpellDamage(Target, DDType, MinDmg) + end + +end diff --git a/server/Spells/Fighter/Warrior/Berserker/StanceGreaterFury.lua b/server/Spells/Fighter/Warrior/Berserker/StanceGreaterFury.lua new file mode 100644 index 000000000..768c65037 --- /dev/null +++ b/server/Spells/Fighter/Warrior/Berserker/StanceGreaterFury.lua @@ -0,0 +1,28 @@ +--[[ + Script Name : Spells/Fighter/Warrior/Berserker/StanceGreaterFury.lua + Script Author : John Adams + Script Date : 2013.08.11 02:08:04 + Script Purpose : + : +--]] + +function cast(Caster, Target) + -- code to cast the spell + Say(Caster, "Whoops! Guess this is not implemented yet!") + +-- Info from spell_display_effects (remove from script when done) +-- On a melee hit this spell may cast Furious Assault on target of attack. Triggers about 2.0 times per minute. +-- Inflicts 89 - 148 melee damage on target encounter +-- Decreases Defense of caster by 10.8 +-- Increases Crushing, Slashing and Piercing of caster by 15.4 + +end + +function tick(Caster, Target) + -- code to process each call_frequency (tick) set in spell_tiers +end + +function remove(Caster, Target) + -- code to remove the spell +end + diff --git a/server/Spells/Fighter/Warrior/Berserker/StanceUnbridledFury.lua b/server/Spells/Fighter/Warrior/Berserker/StanceUnbridledFury.lua new file mode 100644 index 000000000..65785c538 --- /dev/null +++ b/server/Spells/Fighter/Warrior/Berserker/StanceUnbridledFury.lua @@ -0,0 +1,28 @@ +--[[ + Script Name : Spells/Fighter/Warrior/Berserker/StanceUnbridledFury.lua + Script Author : John Adams + Script Date : 2013.08.11 02:08:40 + Script Purpose : + : +--]] + +function cast(Caster, Target) + -- code to cast the spell + Say(Caster, "Whoops! Guess this is not implemented yet!") + +-- Info from spell_display_effects (remove from script when done) +-- On a melee hit this spell may cast Furious Assault on target of attack. Triggers about 2.0 times per minute. +-- Inflicts 124 - 208 melee damage on target encounter +-- Decreases Defense of caster by 15.0 +-- Increases Crushing, Slashing and Piercing of caster by 21.4 + +end + +function tick(Caster, Target) + -- code to process each call_frequency (tick) set in spell_tiers +end + +function remove(Caster, Target) + -- code to remove the spell +end + diff --git a/server/Spells/Fighter/Warrior/Berserker/StunningRoar.lua b/server/Spells/Fighter/Warrior/Berserker/StunningRoar.lua new file mode 100644 index 000000000..4c4b73b10 --- /dev/null +++ b/server/Spells/Fighter/Warrior/Berserker/StunningRoar.lua @@ -0,0 +1,23 @@ +--[[ + Script Name : Spells/Fighter/Warrior/Berserker/StunningRoar.lua + Script Author : Dello + Script Date : 12/06/2014 + Script Purpose : + : +--]] + +function cast(Caster, Target, DmgType, MinVal, MaxVal) + if MaxVal ~= nil and MinVal < MaxVal then + SpellDamage(Target, DmgType, math.random(MinVal, MaxVal)) + else + SpellDamage(Target, DmgType, MinVal) + end + + if not IsEpic(Target) then + AddControlEffect(Target, 4) + end +end + +function remove(Caster, Target) + RemoveControlEffect(Target, 4) +end \ No newline at end of file diff --git a/server/Spells/Fighter/Warrior/Berserker/UnflinchingWill.lua b/server/Spells/Fighter/Warrior/Berserker/UnflinchingWill.lua new file mode 100644 index 000000000..ba09da2db --- /dev/null +++ b/server/Spells/Fighter/Warrior/Berserker/UnflinchingWill.lua @@ -0,0 +1,35 @@ +--[[ + Script Name : Spells/Fighter/Warrior/Berserker/UnflinchingWill.lua + Script Author : neatz09 + Script Date : 2019.10.11 05:10:36 + Script Purpose : + : +--]] + +function cast(Caster, Target, OffSkillAmt, Agro, DefSkillAmt, MitAmt) + -- Reduces physical damage done to caster by 5% + AddSpellBonus(Target, 313, 5) -- Not sure on this value (313) + + -- Decreases Crushing, Piercing and Slashing of caster by 1.6 + AddSkillBonus(Target, GetSkillIDByName("Crushing"), OffSkillAmt) + AddSkillBonus(Target, GetSkillIDByName("Piercing"), OffSkillAmt) + AddSkillBonus(Target, GetSkillIDByName("Slashing"), OffSkillAmt) + +-- Increases Agression of caster by 0.8 + AddSkillBonus(Target, GetSkillIDByName("Aggression"), Agro) + +-- Increases Defense and Parry of caster by 1.6 + AddSkillBonus(Target, GetSkillIDByName("Defense"), DefSkillAmt) + AddSkillBonus(Target, GetSkillIDByName("Parry"), DefSkillAmt) + + -- Increases Mitigation of caster vs Elemental damage by 138 + AddSpellBonus(Target, 201, ResistAmt) + + -- Increases the caster's effectiveness of worn armor vs physical damage by 15% + AddSpellBonus(Target, 678, 15) +end + +function remove(Caster, Target) + RemoveSpellBonus(Target) + RemoveSkillBonus(Target) +end diff --git a/server/Spells/Fighter/Warrior/Berserker/VisionofMadness.lua b/server/Spells/Fighter/Warrior/Berserker/VisionofMadness.lua new file mode 100644 index 000000000..ef81ab400 --- /dev/null +++ b/server/Spells/Fighter/Warrior/Berserker/VisionofMadness.lua @@ -0,0 +1,33 @@ +--[[ + Script Name : Spells/Fighter/Warrior/Berserker/VisionofMadness.lua + Script Author : John Adams + Script Date : 2013.08.11 02:08:11 + Script Purpose : + : +--]] + +function cast(Caster, Target) + -- code to cast the spell + Say(Caster, "Whoops! Guess this is not implemented yet!") + +-- Info from spell_display_effects (remove from script when done) +-- On death this spell will cast Madness on caster. Lasts for 5.0 seconds. +-- Heals caster for 2.7% of max health instantly and every second +-- This effect cannot be critically applied. +-- If target is not berserk +-- Heals caster for 13.5% of max health instantly and every second +-- This effect cannot be critically applied. +-- If target is berserk +-- The healing of this spell cannot be modified except by direct means +-- Grants a total of 1 trigger of the spell. + +end + +function tick(Caster, Target) + -- code to process each call_frequency (tick) set in spell_tiers +end + +function remove(Caster, Target) + -- code to remove the spell +end + diff --git a/server/Spells/Fighter/Warrior/Berserker/WallofHatred.lua b/server/Spells/Fighter/Warrior/Berserker/WallofHatred.lua new file mode 100644 index 000000000..cd14003ae --- /dev/null +++ b/server/Spells/Fighter/Warrior/Berserker/WallofHatred.lua @@ -0,0 +1,32 @@ +--[[ + Script Name : Spells/Fighter/Warrior/Berserker/WallofHatred.lua + Script Author : John Adams + Script Date : 2013.08.11 02:08:26 + Script Purpose : + : +--]] + +function cast(Caster, Target) + -- code to cast the spell + Say(Caster, "Whoops! Guess this is not implemented yet!") + +-- Info from spell_display_effects (remove from script when done) +-- On a melee hit this spell may cast Enrage on target of attack. Lasts for 12.0 seconds. Triggers about 2.4 times per minute. +-- Increases Crit Chance of caster by 15.0 +-- Inflicts 562 - 842 heat damage on target encounter +-- Increases Multi Attack Chance of caster by 10.0 +-- Cannot be modified except by direct means +-- Adds a hate position increase to the initial taunt portion of Insolence. +-- 25% of the damage done to the berserker will be added back to the attacker as additional hate. +-- Cannot be modified except by direct means + +end + +function tick(Caster, Target) + -- code to process each call_frequency (tick) set in spell_tiers +end + +function remove(Caster, Target) + -- code to remove the spell +end + diff --git a/server/Spells/Fighter/Warrior/Berserker/WallofRage.lua b/server/Spells/Fighter/Warrior/Berserker/WallofRage.lua new file mode 100644 index 000000000..84e74f52e --- /dev/null +++ b/server/Spells/Fighter/Warrior/Berserker/WallofRage.lua @@ -0,0 +1,15 @@ +--[[ + Script Name : Spells/Fighter/Warrior/Berserker/WallofRage.lua + Script Author : neatz09 + Script Date : 2019.10.14 07:10:43 + Script Purpose : + : +--]] + +-- Info from spell_display_effects (remove from script when done) +-- Decreases Haste of caster by 11.3 +-- Increases Mitigation of caster vs physical damage by 133 +-- On a melee hit this spell may cast Cripple on target of attack. Lasts for 10.0 seconds. Triggers about 5.0 times per minute. +-- Slows targets in Area of Effect by 29.3% +-- 5% chance to dispel when target receives hostile action +-- 5% chance to dispel when target takes damage diff --git a/server/Spells/Fighter/Warrior/Berserker/WarCry.lua b/server/Spells/Fighter/Warrior/Berserker/WarCry.lua new file mode 100644 index 000000000..8fd285665 --- /dev/null +++ b/server/Spells/Fighter/Warrior/Berserker/WarCry.lua @@ -0,0 +1,33 @@ +--[[ + Script Name : Spells/Fighter/Warrior/Berserker/WarCry.lua + Script Author : John Adams + Script Date : 2013.08.11 02:08:45 + Script Purpose : + : +--]] + +function cast(Caster, Target) + -- code to cast the spell + Say(Caster, "Whoops! Guess this is not implemented yet!") + +-- Info from spell_display_effects (remove from script when done) +-- When damaged this spell has a 5% chance to cast Berserk on target. Lasts for 10.0 seconds. +-- Increases Damage Per Second of target by 10.2 +-- Increases Attack Speed of target by 10.2 +-- On any combat or spell hit this spell may cast Berserk on target. Lasts for 10.0 seconds. Triggers about 3.0 times per minute. +-- Increases Damage Per Second of target by 10.2 +-- Increases Attack Speed of target by 10.2 +-- On a kill this spell has a 50% chance to cast Berserk on target. Lasts for 10.0 seconds. +-- Increases Damage Per Second of target by 10.2 +-- Increases Attack Speed of target by 10.2 + +end + +function tick(Caster, Target) + -- code to process each call_frequency (tick) set in spell_tiers +end + +function remove(Caster, Target) + -- code to remove the spell +end + diff --git a/server/Spells/Fighter/Warrior/Berserker/WeaponCounter.lua b/server/Spells/Fighter/Warrior/Berserker/WeaponCounter.lua new file mode 100644 index 000000000..832a057fe --- /dev/null +++ b/server/Spells/Fighter/Warrior/Berserker/WeaponCounter.lua @@ -0,0 +1,12 @@ +--[[ + Script Name : Spells/Fighter/Warrior/Berserker/WeaponCounter.lua + Script Author : neatz09 + Script Date : 2019.10.15 05:10:46 + Script Purpose : + : +--]] + +-- Info from spell_display_effects (remove from script when done) +-- When damaged with a melee weapon this spell will cast Counterattack on target's attacker. +-- Inflicts 43 - 72 melee damage on target +-- Grants a total of 3 triggers of the spell. diff --git a/server/Spells/Fighter/Warrior/Berserker/Whirl.lua b/server/Spells/Fighter/Warrior/Berserker/Whirl.lua new file mode 100644 index 000000000..86f5efb60 --- /dev/null +++ b/server/Spells/Fighter/Warrior/Berserker/Whirl.lua @@ -0,0 +1,24 @@ +--[[ + Script Name : dd.lua + Script Purpose : Generic direct damage script + Script Author : John Adams + Script Date : 2010.01.14 +--]] + +function cast(Caster, Target, DDType, MinDDVal, MaxDDVal) + + if MaxDDVal ~= nil and MinDDVal < MaxDDVal then + dmgAmount = math.random(MinDDVal, MaxDDVal) + SpellDamage(Target, DDType, dmgAmount) + --AddHate(Caster, Target, dmgAmount) + else + SpellDamage(Target, DDType, MinDDVal) + --AddHate(Caster, Target, MinDDVal) + end + +end + +function remove(Caster, Target, DDType, MinDDVal, MaxDDVal) + +end + diff --git a/server/Spells/Fighter/Warrior/Berserker/Whirlwind.lua b/server/Spells/Fighter/Warrior/Berserker/Whirlwind.lua new file mode 100644 index 000000000..199650bd1 --- /dev/null +++ b/server/Spells/Fighter/Warrior/Berserker/Whirlwind.lua @@ -0,0 +1,26 @@ +--[[ + Script Name : Spells/Fighter/Warrior/Berserker/Whirlwind.lua + Script Author : John Adams + Script Date : 2013.08.11 02:08:26 + Script Purpose : + : +--]] + +function cast(Caster, Target) + -- code to cast the spell + Say(Caster, "Whoops! Guess this is not implemented yet!") + +-- Info from spell_display_effects (remove from script when done) +-- Reduces physical damage done to caster by 5% +-- Caster has a 100.0% chance of having one of their weapons' autoattack affect multiple targets they are facing, who are within range of that weapon. + +end + +function tick(Caster, Target) + -- code to process each call_frequency (tick) set in spell_tiers +end + +function remove(Caster, Target) + -- code to remove the spell +end + diff --git a/server/Spells/Fighter/Warrior/Guardian/Armored.lua b/server/Spells/Fighter/Warrior/Guardian/Armored.lua new file mode 100644 index 000000000..02a836120 --- /dev/null +++ b/server/Spells/Fighter/Warrior/Guardian/Armored.lua @@ -0,0 +1,31 @@ +--[[ + Script Name : Armored + Script Purpose : Guardian Defensive Stance script + Script Author : Zcoretri + Script Date : 2010.01.26 + Script Note : Need "worn armor" effectiveness +--]] + +function cast(Caster, Target, Physical, Avoidance, SkillAmt, Aggression, Defense, MitNox, MitElem, WornArmor) + + AddSpellBonus(Caster, 200, Physical) -- physical + AddSpellBonus(Caster, 696, Avoidance) -- avoidance + AddSpellBonus(Caster, 202, MitNox) -- mitigation against noxious + AddSpellBonus(Caster, 203, MitNox) -- mitigation against arcane + AddSpellBonus(Caster, 201, MitElem) -- mitigation against elemental + + AddSkillBonus(Caster, 418532101, SkillAmt) -- slashing + AddSkillBonus(Caster, 3421494576, SkillAmt) -- crushing + AddSkillBonus(Caster, 3048574950, SkillAmt) -- piercing + AddSkillBonus(Caster, 723762198, Aggression)-- aggression + AddSkillBonus(Caster, 609880714, Defense) -- defense + + -- Increases the caster's effectiveness of worn armor vs physical damage by 15% + -- TODO +end + + +function remove(Caster, Target) + RemoveSkillBonus(Caster) + RemoveSpellBonus(Caster) +end \ No newline at end of file diff --git a/server/Spells/Fighter/Warrior/Guardian/Assault.lua b/server/Spells/Fighter/Warrior/Guardian/Assault.lua new file mode 100644 index 000000000..ac227f312 --- /dev/null +++ b/server/Spells/Fighter/Warrior/Guardian/Assault.lua @@ -0,0 +1,15 @@ +--[[ + Script Name : Spells/Fighter/Warrior/Guardian/Assault.lua + Script Author : John Adams + Script Date : 2013.11.22 07:11:03 + Script Purpose : + : +--]] + +function cast(Caster, Target, DmgType, MinVal, MaxVal) + if MaxVal ~= nil and MinVal < MaxVal then + SpellDamage(Target, DmgType, math.random(MinVal, MaxVal)) + else + SpellDamage(Target, DmgType, MinVal) + end +end diff --git a/server/Spells/Fighter/Warrior/Guardian/Bash.lua b/server/Spells/Fighter/Warrior/Guardian/Bash.lua new file mode 100644 index 000000000..061725009 --- /dev/null +++ b/server/Spells/Fighter/Warrior/Guardian/Bash.lua @@ -0,0 +1,18 @@ +--[[ + Script Name : Spells/Fighter/Warrior/Guardian/Bash.lua + Script Author : Dello + Script Date : 13/06/2014 + Script Purpose : + : +--]] + +function cast(Caster, Target, DDType, MinDmg, MaxDmg) + + -- Inflicts 6 - 10 crushing damage on target + if MaxDmg ~= nil and MinDmg < MaxDmg then + SpellDamage(Target, DDType, math.random(MinDmg, MaxDmg)) + else + SpellDamage(Target, DDType, MinDmg) + Knockback(Caster, Target, 4000) + end +end \ No newline at end of file diff --git a/server/Spells/Fighter/Warrior/Guardian/BattleCry.lua b/server/Spells/Fighter/Warrior/Guardian/BattleCry.lua new file mode 100644 index 000000000..cf90765bd --- /dev/null +++ b/server/Spells/Fighter/Warrior/Guardian/BattleCry.lua @@ -0,0 +1,21 @@ +--[[ + Script Name : Spells/Fighter/Warrior/Guardian/BattleCry.lua + Script Author : John Adams + Script Date : 2013.12.08 03:12:06 + Script Purpose : + : +--]] + +function cast(Caster, Target, BonusAmt) + + -- Increases Mitigation of group members (AE) vs physical damage by 100 + AddSpellBonus(Target, 200, BonusAmt) + +end + +function remove(Caster, Target) + + RemoveSpellBonus(Target) + +end + diff --git a/server/Spells/Fighter/Warrior/Guardian/BattleTactics.lua b/server/Spells/Fighter/Warrior/Guardian/BattleTactics.lua new file mode 100644 index 000000000..6e41a1787 --- /dev/null +++ b/server/Spells/Fighter/Warrior/Guardian/BattleTactics.lua @@ -0,0 +1,16 @@ +--[[ + Script Name : Spells/Fighter/Warrior/Guardian/BattleTactics.lua + Script Author : Dello + Script Date : 10/06/2014 + Script Purpose : + : +--]] + +function cast(Caster, Target, MaxVal) + -- Increases max Stamina of the group. + AddSpellBonus(Target, 1, MaxVal) +end + +function remove(Caster, Target, MaxVal) + RemoveSpellBonus(Target) +end \ No newline at end of file diff --git a/server/Spells/Fighter/Warrior/Guardian/CallofShielding.lua b/server/Spells/Fighter/Warrior/Guardian/CallofShielding.lua new file mode 100644 index 000000000..19df2261c --- /dev/null +++ b/server/Spells/Fighter/Warrior/Guardian/CallofShielding.lua @@ -0,0 +1,20 @@ +--[[ + Script Name : Spells/Fighter/Warrior/Guardian/CallofShielding.lua + Script Author : Dello + Script Date : 09/06/2014 + Script Purpose : + : +--]] + +function cast(Caster, Target, MaxVal, DefSkills) + + AddSpellBonus(Target, 1, MaxVal) + + AddSkillBonus(Target, GetSkillIDByName("Defense"), DefSkills) +end + + +function remove(Caster, Target) + RemoveSkillBonus(Target) + RemoveSpellBonus(Target) +end \ No newline at end of file diff --git a/server/Spells/Fighter/Warrior/Guardian/CalltoArms.lua b/server/Spells/Fighter/Warrior/Guardian/CalltoArms.lua new file mode 100644 index 000000000..2b6b040ef --- /dev/null +++ b/server/Spells/Fighter/Warrior/Guardian/CalltoArms.lua @@ -0,0 +1,21 @@ +--[[ + Script Name : Spells/Fighter/Warrior/Guardian/CalltoArms.lua + Script Author : John Adams + Script Date : 2013.11.22 08:11:16 + Script Purpose : + : +--]] + +function cast(Caster, Target, SkillAmt) + + -- Increases Slashing, Ranged, Crushing and Piercing of group members (AE) by 1.9 + AddSkillBonus(Target, GetSkillIDByName("Ranged"), SkillAmt) + AddSkillBonus(Target, GetSkillIDByName("Slashing"), SkillAmt) + AddSkillBonus(Target, GetSkillIDByName("Piercing"), SkillAmt) + AddSkillBonus(Target, GetSkillIDByName("Crushing"), SkillAmt) + +end + +function remove(Caster, Target, SkillAmt) + RemoveSkillBonus(Target) +end \ No newline at end of file diff --git a/server/Spells/Fighter/Warrior/Guardian/Concussion.lua b/server/Spells/Fighter/Warrior/Guardian/Concussion.lua new file mode 100644 index 000000000..9811511c4 --- /dev/null +++ b/server/Spells/Fighter/Warrior/Guardian/Concussion.lua @@ -0,0 +1,27 @@ +--[[ + Script Name : Spells/Fighter/Warrior/Guardian/Concussion.lua + Script Author : Dello + Script Date : 2013.08.11 02:08:51 + Script Purpose : + : +--]] +function cast(Caster, Target, DmgType, MinVal, MaxVal, SkillAmt) + + AddSkillBonus(Target, GetSkillIDByName("Ordination"), SkillAmt) + + AddSkillBonus(Target, GetSkillIDByName("Ministration"), SkillAmt) + + AddSkillBonus(Target, GetSkillIDByName("Disruption"), SkillAmt) + + AddSkillBonus(Target, GetSkillIDByName("Subjugation"), SkillAmt) + + if MaxVal ~= nil and MinVal < MaxVal then + SpellDamage(Target, DmgType, math.random(MinVal, MaxVal)) + else + SpellDamage(Target, DmgType, MinVal) + end +end + +function remove(Caster, Target) + RemoveSkillBonus(Target) +end \ No newline at end of file diff --git a/server/Spells/Fighter/Warrior/Guardian/Decimate.lua b/server/Spells/Fighter/Warrior/Guardian/Decimate.lua new file mode 100644 index 000000000..ed854ac96 --- /dev/null +++ b/server/Spells/Fighter/Warrior/Guardian/Decimate.lua @@ -0,0 +1,28 @@ +--[[ + Script Name : Spells/Fighter/Warrior/Guardian/Decimate.lua + Script Author : Dello + Script Date : 10/06/2014 + Script Purpose : + : +--]] + + + +function cast(Caster, Target, DmgType, MinVal, MaxVal, DefSkills) + + AddSkillBonus(Target, GetSkillIDByName("Parry"), DefSkills) + + AddSkillBonus(Target, GetSkillIDByName("Defense"), DefSkills) + + AddSkillBonus(Target, GetSkillIDByName("Deflection"), DefSkills) + + if MaxVal ~= nil and MinVal < MaxVal then + SpellDamage(Target, DmgType, math.random(MinVal, MaxVal)) + else + SpellDamage(Target, DmgType, MinVal) + end +end + +function remove(Caster, Target) + RemoveSkillBonus(Target) +end diff --git a/server/Spells/Fighter/Warrior/Guardian/ForwardCharge.lua b/server/Spells/Fighter/Warrior/Guardian/ForwardCharge.lua new file mode 100644 index 000000000..2c4b08086 --- /dev/null +++ b/server/Spells/Fighter/Warrior/Guardian/ForwardCharge.lua @@ -0,0 +1,24 @@ +--[[ + Script Name : Spells/Fighter/Warrior/Guardian/ForwardCharge.lua + Script Author : John Adams + Script Date : 2013.11.22 06:11:46 + Script Purpose : + : +--]] + +function cast(Caster, Target, Stats, DefSkills, SkillAmt) + AddSpellBonus(Target, 0, Stats) + + -- Increases Slashing, Piercing and Crushing of caster. + AddSkillBonus(Target, GetSkillIDByName("Slashing"), SkillAmt) + AddSkillBonus(Target, GetSkillIDByName("Piercing"), SkillAmt) + AddSkillBonus(Target, GetSkillIDByName("Crushing"), SkillAmt) + + -- Decreases Defense of caster by 1.8 + AddSkillBonus(Target, GetSkillIDByName("Defense"), DefSkills) +end + +function remove(Caster, Target) + RemoveSkillBonus(Target) + RemoveSpellBonus(Target) +end diff --git a/server/Spells/Fighter/Warrior/Guardian/GuardianSphere.lua b/server/Spells/Fighter/Warrior/Guardian/GuardianSphere.lua new file mode 100644 index 000000000..794afc0ed --- /dev/null +++ b/server/Spells/Fighter/Warrior/Guardian/GuardianSphere.lua @@ -0,0 +1,30 @@ +--[[ + Script Name : Spells/Fighter/Warrior/Guardian/GuardianSphere.lua + Script Author : John Adams + Script Date : 2013.08.11 02:08:53 + Script Purpose : + : +--]] + +function cast(Caster, Target) + -- code to cast the spell + Say(Caster, "Whoops! Guess this is not implemented yet!") + +-- Info from spell_display_effects (remove from script when done) +-- When damaged this spell has a 15% chance to cast Stoneskin on target. Lasts for 10.0 seconds. +-- Will absorb all damage. This spell will absorb a total of 1 attack. +-- Only affects the caster of Guardian's Sphere +-- When damaged this spell has a 30% chance to cast Stoneskin on target. Lasts for 10.0 seconds. +-- Will absorb all damage. This spell will absorb a total of 1 attack. +-- If not fighter + +end + +function tick(Caster, Target) + -- code to process each call_frequency (tick) set in spell_tiers +end + +function remove(Caster, Target) + -- code to remove the spell +end + diff --git a/server/Spells/Fighter/Warrior/Guardian/GutKick.lua b/server/Spells/Fighter/Warrior/Guardian/GutKick.lua new file mode 100644 index 000000000..115dc41d6 --- /dev/null +++ b/server/Spells/Fighter/Warrior/Guardian/GutKick.lua @@ -0,0 +1,22 @@ +--[[ + Script Name : Spells/Fighter/Warrior/Guardian/GutKick.lua + Script Author : John Adams + Script Date : 2013.11.22 07:11:41 + Script Purpose : + : +--]] + +function cast(Caster, Target, DDType, MinDmg, MaxDmg) + + -- Inflicts 13 - 22 crushing damage on target + if MaxDmg ~= nil and MinDmg < MaxDmg then + SpellDamage(Target, DDType, math.random(MinDmg, MaxDmg)) + else + SpellDamage(Target, DDType, MinDmg) + end + + -- Interrupts target + if target ~= nil then + Interrupt(Caster, Target) + end +end diff --git a/server/Spells/Fighter/Warrior/Guardian/HoldtheLine.lua b/server/Spells/Fighter/Warrior/Guardian/HoldtheLine.lua new file mode 100644 index 000000000..0318c1d48 --- /dev/null +++ b/server/Spells/Fighter/Warrior/Guardian/HoldtheLine.lua @@ -0,0 +1,19 @@ +--[[ + Script Name : Spells/Fighter/Warrior/Guardian/HoldtheLine.lua + Script Author : John Adams + Script Date : 2013.08.11 03:08:12 + Script Purpose : Waiting for SpellProc() functionality + : Passing only 1 value since they seem to be the same regardless which effect procs +--]] + +-- Info from spell_display_effects (remove from script when done) +-- When damaged this spell has a 50% chance to cast Holding the Line on target's attacker. +-- Increases Threat to target by 27 +-- On a block this spell will cast Holding the Line on target's victim. +-- Increases Threat to target by 27 + +function cast(Caster, Target, AddHate) + + AddHate(Caster, Target) + +end diff --git a/server/Spells/Fighter/Warrior/Guardian/HunkerDown.lua b/server/Spells/Fighter/Warrior/Guardian/HunkerDown.lua new file mode 100644 index 000000000..3b826e639 --- /dev/null +++ b/server/Spells/Fighter/Warrior/Guardian/HunkerDown.lua @@ -0,0 +1,34 @@ +--[[ + Script Name : Spells/Fighter/Warrior/Guardian/HunkerDown.lua + Script Author : John Adams + Script Date : 2013.12.08 03:12:51 + Script Purpose : + : +--]] + +function cast(Caster, Target, MitAmt) + + -- Decreases Attack Speed of caster by 11.3 + AddSpellBonus(Caster, 617, -11.3) + + -- Increases Mitigation of caster vs physical damage by 133 + AddSpellBonus(Caster, 200, MitAmt) + + AddProc(Target, 1, 25) +end + +function proc(Caster, Target, Type) + -- On a melee hit this spell may cast Pin on target of attack. Lasts for 10.0 seconds. Triggers about 5.0 times per minute. + -- Roots target + AddSpellBonus(Target, 609, 0) -- set speed to 0, is rooting? :D + + -- 5% chance to dispel when target takes damage + -- 5% chance to dispel when target receives hostile action + -- Epic targets gain an immunity to Root and Will not multi-attack if the primary attack was avoided. effects of 30.0 seconds and duration is reduced to 3.3 seconds. + +end + +function remove(Caster, Target, MitAmt) + RemoveSpellBonus(Caster) + RemoveProc(Target) +end diff --git a/server/Spells/Fighter/Warrior/Guardian/IronWill.lua b/server/Spells/Fighter/Warrior/Guardian/IronWill.lua new file mode 100644 index 000000000..b3e76cc15 --- /dev/null +++ b/server/Spells/Fighter/Warrior/Guardian/IronWill.lua @@ -0,0 +1,27 @@ +--[[ + Script Name : Spells/Fighter/Warrior/Guardian/IronWill.lua + Script Author : John Adams + Script Date : 2013.08.11 02:08:44 + Script Purpose : + : +--]] + +function cast(Caster, Target) + -- code to cast the spell + Say(Caster, "Whoops! Guess this is not implemented yet!") + +-- Info from spell_display_effects (remove from script when done) +-- Increases STA of caster by 14.6 +-- Reduces slow effects on caster by 6.7% +-- Increases Mitigation of caster vs elemental, noxious and arcane damage by 389 + +end + +function tick(Caster, Target) + -- code to process each call_frequency (tick) set in spell_tiers +end + +function remove(Caster, Target) + -- code to remove the spell +end + diff --git a/server/Spells/Fighter/Warrior/Guardian/Moderate.lua b/server/Spells/Fighter/Warrior/Guardian/Moderate.lua new file mode 100644 index 000000000..ea8746bde --- /dev/null +++ b/server/Spells/Fighter/Warrior/Guardian/Moderate.lua @@ -0,0 +1,26 @@ +--[[ + Script Name : Spells/Fighter/Warrior/Guardian/Moderate.lua + Script Author : John Adams + Script Date : 2013.08.11 02:08:08 + Script Purpose : + : +--]] + +function cast(Caster, Target) + -- code to cast the spell + Say(Caster, "Whoops! Guess this is not implemented yet!") + +-- Info from spell_display_effects (remove from script when done) +-- Grants target a 13% chance of making an additional attempt to avoid being hit by a melee attack using the caster's avoidance. +-- Decreases Hate Gain of target by 6.0% + +end + +function tick(Caster, Target) + -- code to process each call_frequency (tick) set in spell_tiers +end + +function remove(Caster, Target) + -- code to remove the spell +end + diff --git a/server/Spells/Fighter/Warrior/Guardian/NeverSurrender.lua b/server/Spells/Fighter/Warrior/Guardian/NeverSurrender.lua new file mode 100644 index 000000000..3b6678dc5 --- /dev/null +++ b/server/Spells/Fighter/Warrior/Guardian/NeverSurrender.lua @@ -0,0 +1,26 @@ +--[[ + Script Name : Spells/Fighter/Warrior/Guardian/NeverSurrender.lua + Script Author : John Adams + Script Date : 2013.08.11 02:08:10 + Script Purpose : + : +--]] + +function cast(Caster, Target) + -- code to cast the spell + Say(Caster, "Whoops! Guess this is not implemented yet!") + +-- Info from spell_display_effects (remove from script when done) +-- Grants target a 13% chance of making an additional attempt to avoid being hit by a melee attack using the caster's avoidance. +-- Increases Parry of caster by 2.8 + +end + +function tick(Caster, Target) + -- code to process each call_frequency (tick) set in spell_tiers +end + +function remove(Caster, Target) + -- code to remove the spell +end + diff --git a/server/Spells/Fighter/Warrior/Guardian/Overpower.lua b/server/Spells/Fighter/Warrior/Guardian/Overpower.lua new file mode 100644 index 000000000..8dd784914 --- /dev/null +++ b/server/Spells/Fighter/Warrior/Guardian/Overpower.lua @@ -0,0 +1,18 @@ +--[[ + Script Name : Spells/Fighter/Warrior/Guardian/Overpower.lua + Script Author : John Adams + Script Date : 2013.11.17 18:00:00 + Script Purpose : Direct Damage script + : +--]] + +function cast(Caster, Target, DDType, MinDmg, MaxDmg) + + if MaxDmg ~= nil and MinDmg < MaxDmg then + SpellDamage(Target, DDType, math.random(MinDmg, MaxDmg)) + else + SpellDamage(Target, DDType, MinDmg) + end + +end + diff --git a/server/Spells/Fighter/Warrior/Guardian/Plant.lua b/server/Spells/Fighter/Warrior/Guardian/Plant.lua new file mode 100644 index 000000000..f111c3da5 --- /dev/null +++ b/server/Spells/Fighter/Warrior/Guardian/Plant.lua @@ -0,0 +1,14 @@ +--[[ + Script Name : Spells/Fighter/Warrior/Guardian/Plant.lua + Script Author : John Adams + Script Date : 2013.08.11 02:08:14 + Script Purpose : + : +--]] + + + +function cast(Caster, Target, AddHate) + AddHate(Caster, Target, AddHate, 1) +end + diff --git a/server/Spells/Fighter/Warrior/Guardian/PreciseStrike.lua b/server/Spells/Fighter/Warrior/Guardian/PreciseStrike.lua new file mode 100644 index 000000000..12f0debe0 --- /dev/null +++ b/server/Spells/Fighter/Warrior/Guardian/PreciseStrike.lua @@ -0,0 +1,18 @@ +--[[ + Script Name : Spells/Fighter/Warrior/Guardian/PreciseStrike.lua + Script Author : Dello + Script Date : 09/06/2014 + Script Purpose : + : +--]] + + +function cast(Caster, Target, DmgType, MinVal, MaxVal) + if MaxVal ~= nil and MinVal < MaxVal then + SpellDamage(Target, DmgType, math.random(MinVal, MaxVal)) + else + SpellDamage(Target, DmgType, MinVal) + end +end + + diff --git a/server/Spells/Fighter/Warrior/Guardian/Provoke.lua b/server/Spells/Fighter/Warrior/Guardian/Provoke.lua new file mode 100644 index 000000000..4413278ee --- /dev/null +++ b/server/Spells/Fighter/Warrior/Guardian/Provoke.lua @@ -0,0 +1,21 @@ +--[[ + Script Name : Spells/Fighter/Warrior/Guardian/Provoke.lua + Script Author : John Adams + Script Date : 2013.11.22 12:11:28 + Script Purpose : + : +--]] + +function cast(Caster, Target, MinTaunt, MaxTaunt) + -- Increases Threat to target by 51 - 62 + if MaxTaunt ~= nil and MinTaunt < MaxTaunt then + AddHate(Caster, Target, math.random(MinTaunt, MaxTaunt)) + else + AddHate(Caster, Target, MinTaunt) + end + + -- Interrupts target + if target ~= nil then + Interrupt(Caster, Target) + end +end diff --git a/server/Spells/Fighter/Warrior/Guardian/Recapture.lua b/server/Spells/Fighter/Warrior/Guardian/Recapture.lua new file mode 100644 index 000000000..95d58928a --- /dev/null +++ b/server/Spells/Fighter/Warrior/Guardian/Recapture.lua @@ -0,0 +1,26 @@ +--[[ + Script Name : Spells/Fighter/Warrior/Guardian/Recapture.lua + Script Author : John Adams + Script Date : 2013.08.11 02:08:26 + Script Purpose : + : +--]] + +function cast(Caster, Target) + -- code to cast the spell + Say(Caster, "Whoops! Guess this is not implemented yet!") + +-- Info from spell_display_effects (remove from script when done) +-- Reduces the hate position of all non-fighter group members on target encounter. +-- Increases the hate position of all other fighter allies that are hated by every enemy in target encounter. + +end + +function tick(Caster, Target) + -- code to process each call_frequency (tick) set in spell_tiers +end + +function remove(Caster, Target) + -- code to remove the spell +end + diff --git a/server/Spells/Fighter/Warrior/Guardian/Reinforcement.lua b/server/Spells/Fighter/Warrior/Guardian/Reinforcement.lua new file mode 100644 index 000000000..472208555 --- /dev/null +++ b/server/Spells/Fighter/Warrior/Guardian/Reinforcement.lua @@ -0,0 +1,27 @@ +--[[ + Script Name : Spells/Fighter/Warrior/Guardian/Reinforcement.lua + Script Author : John Adams + Script Date : 2013.08.11 02:08:08 + Script Purpose : + : +--]] + +function cast(Caster, Target) + -- code to cast the spell + Say(Caster, "Whoops! Guess this is not implemented yet!") + +-- Info from spell_display_effects (remove from script when done) +-- On a melee hit this spell will cast Reinforcement on target of attack. +-- Increases Threat to target by 338 +-- Increases threat priority of target by 1 position + +end + +function tick(Caster, Target) + -- code to process each call_frequency (tick) set in spell_tiers +end + +function remove(Caster, Target) + -- code to remove the spell +end + diff --git a/server/Spells/Fighter/Warrior/Guardian/Retaliate.lua b/server/Spells/Fighter/Warrior/Guardian/Retaliate.lua new file mode 100644 index 000000000..55059772b --- /dev/null +++ b/server/Spells/Fighter/Warrior/Guardian/Retaliate.lua @@ -0,0 +1,26 @@ +--[[ + Script Name : Spells/Fighter/Warrior/Guardian/Retaliate.lua + Script Author : Dello + Script Date : 10/6/2014 + Script Purpose : + : +--]] + + +function cast(Caster, Target, DmgType, MinVal, MaxVal) + if MaxVal ~= nil and MinVal < MaxVal then + SpellDamage(Target, DmgType, math.random(MinVal, MaxVal)) + else + SpellDamage(Target, DmgType, MinVal) + end + + if not IsEpic(Target) then + AddControlEffect(Target, 3) + end +end + +function remove(Caster, Target) + RemoveControlEffect(Target, 3) +end + + diff --git a/server/Spells/Fighter/Warrior/Guardian/Ruin.lua b/server/Spells/Fighter/Warrior/Guardian/Ruin.lua new file mode 100644 index 000000000..de323e1c7 --- /dev/null +++ b/server/Spells/Fighter/Warrior/Guardian/Ruin.lua @@ -0,0 +1,35 @@ +--[[ + Script Name : Spells/Fighter/Warrior/Guardian/Ruin.lua + Script Author : John Adams + Script Date : 2013.12.08 02:12:50 + Script Purpose : + : +--]] + +function cast(Caster, Target, DmgType, MinVal, MaxVal, DoTType, DoTMin, DoTMax, SkillAmt) + --Inflicts 23 - 39 slashing damage on target + if MaxVal ~= nil and MinVal < MaxVal then + SpellDamage(Target, DmgType, math.random(MinVal, MaxVal)) + else + SpellDamage(Target, DmgType, MinVal) + end + + --Decreases Piercing of target by 1.5 + --Decreases Slashing and Crushing of target by 1.5 + AddSkillBonus(Target, GetSkillIDByName("Piercing"), SkillAmt) + AddSkillBonus(Target, GetSkillIDByName("Slashing"), SkillAmt) + AddSkillBonus(Target, GetSkillIDByName("Crushing"), SkillAmt) +end + +function tick(Caster, Target, DmgType, MinVal, MaxVal, DoTType, DoTMin, DoTMax, SkillAmt) + --Inflicts 10 - 12 slashing damage on target every 5 seconds + if DoTMax ~= nil and DoTMin < DoTMax then + SpellDamage(Target, DoTType, math.random(DoTMin, DoTMax)) + else + SpellDamage(Target, DoTType, DoTMin) + end +end + +function remove(Caster, Target) + RemoveSkillBonus(Target) +end \ No newline at end of file diff --git a/server/Spells/Fighter/Warrior/Guardian/Sentinel.lua b/server/Spells/Fighter/Warrior/Guardian/Sentinel.lua new file mode 100644 index 000000000..f8c5c44e7 --- /dev/null +++ b/server/Spells/Fighter/Warrior/Guardian/Sentinel.lua @@ -0,0 +1,28 @@ +--[[ + Script Name : Spells/Fighter/Warrior/Guardian/Sentinel.lua + Script Author : John Adams + Script Date : 2013.08.11 02:08:02 + Script Purpose : + : +--]] + +function cast(Caster, Target) + -- code to cast the spell + Say(Caster, "Whoops! Guess this is not implemented yet!") + +-- Info from spell_display_effects (remove from script when done) +-- When damaged this spell has a 5% chance to cast Stoneskin on target. Lasts for 10.0 seconds. +-- Will absorb physical damage. This spell will absorb a total of 1 attack. +-- If profession other than Fighter +-- If profession other than Scout + +end + +function tick(Caster, Target) + -- code to process each call_frequency (tick) set in spell_tiers +end + +function remove(Caster, Target) + -- code to remove the spell +end + diff --git a/server/Spells/Fighter/Warrior/Guardian/SentryWatch.lua b/server/Spells/Fighter/Warrior/Guardian/SentryWatch.lua new file mode 100644 index 000000000..356d50fef --- /dev/null +++ b/server/Spells/Fighter/Warrior/Guardian/SentryWatch.lua @@ -0,0 +1,33 @@ +--[[ + Script Name : Spells/Fighter/Warrior/Guardian/SentryWatch.lua + Script Author : John Adams + Script Date : 2013.08.11 02:08:32 + Script Purpose : + : +--]] + +function cast(Caster, Target) + -- code to cast the spell + Say(Caster, "Whoops! Guess this is not implemented yet!") + +-- Info from spell_display_effects (remove from script when done) +-- On death this spell will cast Sentry Watch Guard on target. Lasts for 15.0 seconds. +-- When damaged this spell will cast Reinforcement on target's attacker. +-- Increases Threat to target by 365 +-- Increases threat priority of target by 1 position +-- Reduces all damage done to target by 45% This spell will absorb a total of 1 attack. +-- Heals target for 3.0% of max health +-- This effect cannot be critically applied. +-- The healing of this spell cannot be modified except by direct means +-- Grants a total of 1 trigger of the spell. + +end + +function tick(Caster, Target) + -- code to process each call_frequency (tick) set in spell_tiers +end + +function remove(Caster, Target) + -- code to remove the spell +end + diff --git a/server/Spells/Fighter/Warrior/Guardian/Sever.lua b/server/Spells/Fighter/Warrior/Guardian/Sever.lua new file mode 100644 index 000000000..7fcbd544c --- /dev/null +++ b/server/Spells/Fighter/Warrior/Guardian/Sever.lua @@ -0,0 +1,31 @@ +--[[ + Script Name : Spells/Fighter/Warrior/Guardian/Sever.lua + Script Author : John Adams + Script Date : 2014.01.11 05:01:23 + Script Purpose : + : +--]] + +function cast(Caster, Target, DoTType, DoTVal, DmgType, MinVal, MaxVal, AttackSpeed) + + -- Inflicts 17 slashing damage on target instantly and every 4 seconds + SpellDamage(Target, DoTType, DoTVal) + + -- Decreases Damage Per Second of target by 6.0 + AddSpellBonus(Target, 617, AttackSpeed) + + -- Inflicts 12 - 21 slashing damage on target + if MaxVal ~= nil and MinVal < MaxVal then + SpellDamage(Target, DmgType, math.random(MinVal, MaxVal)) + else + SpellDamage(Target, DmgType, MinVal) + end +end + +function tick(Caster, Target, DoTType, DoTVal, DmgType, MinVal, MaxVal, AttackSpeed) + SpellDamage(Target, DoTType, DoTVal) +end + +function remove(Caster, Target) + RemoveSpellBonus(Target) +end diff --git a/server/Spells/Fighter/Warrior/Guardian/ShieldBash.lua b/server/Spells/Fighter/Warrior/Guardian/ShieldBash.lua new file mode 100644 index 000000000..58f9610be --- /dev/null +++ b/server/Spells/Fighter/Warrior/Guardian/ShieldBash.lua @@ -0,0 +1,20 @@ +--[[ + Script Name : ShieldBash.lua + Script Purpose : Generic damage + stun script + Script Author : John Adams + Script Date : 2008.12.04 +--]] + +function cast(Caster, Target, DDType, MinDmg, MaxDmg) + -- DD component + if MaxDmg ~= nil and MinDmg < MaxDmg then + SpellDamage(Target, DDType, math.random(MinDmg, MaxDmg)) + else + SpellDamage(Target, DDType, MinDmg) + end +end + +function remove(Caster, Target, DDType, MinDmg, MaxDmg) + --Apply Knockdown + --CastSpell(Target, 5000, 1) +end \ No newline at end of file diff --git a/server/Spells/Fighter/Warrior/Guardian/Shout.lua b/server/Spells/Fighter/Warrior/Guardian/Shout.lua new file mode 100644 index 000000000..934662c25 --- /dev/null +++ b/server/Spells/Fighter/Warrior/Guardian/Shout.lua @@ -0,0 +1,21 @@ +--[[ + Script Name : Spells/Fighter/Warrior/Guardian/Shout.lua + Script Author : Dello + Script Date : 13/06/2014 + Script Purpose : + : +--]] + +function cast(Caster, Target, MinTaunt, MaxTaunt) + -- Increases Threat to target by 51 - 62 + if MaxTaunt ~= nil and MinTaunt < MaxTaunt then + AddHate(Caster, Target, math.random(MinTaunt, MaxTaunt)) + else + AddHate(Caster, Target, MinTaunt) + end + + -- Interrupts target + if target ~= nil then + Interrupt(Caster, Target) + end +end diff --git a/server/Spells/Fighter/Warrior/Guardian/Slam.lua b/server/Spells/Fighter/Warrior/Guardian/Slam.lua new file mode 100644 index 000000000..f578871f0 --- /dev/null +++ b/server/Spells/Fighter/Warrior/Guardian/Slam.lua @@ -0,0 +1,16 @@ +--[[ + Script Name : Spells/Fighter/Warrior/Guardian/Slam.lua + Script Author : Dello + Script Date : 09/06/2014 + Script Purpose : + : +--]] + + +function cast(Caster, Target, DmgType, MinVal, MaxVal) + if MaxVal ~= nil and MinVal < MaxVal then + SpellDamage(Target, DmgType, math.random(MinVal, MaxVal)) + else + SpellDamage(Target, DmgType, MinVal) + end +end diff --git a/server/Spells/Fighter/Warrior/Guardian/TauntingAssault.lua b/server/Spells/Fighter/Warrior/Guardian/TauntingAssault.lua new file mode 100644 index 000000000..f4986f0bc --- /dev/null +++ b/server/Spells/Fighter/Warrior/Guardian/TauntingAssault.lua @@ -0,0 +1,20 @@ +--[[ + Script Name : Spells/Fighter/Warrior/Guardian/TauntingAssault.lua + Script Author : Dello + Script Date : 10/06/2014 + Script Purpose : + : +--]] + + +function cast(Caster, Target, DmgType, MinVal, MaxVal) + if MaxVal ~= nil and MinVal < MaxVal then + SpellDamage(Target, DmgType, math.random(MinVal, MaxVal)) + else + SpellDamage(Target, DmgType, MinVal) + end +end + +function cast(Caster, Target) + AddHate(Caster, Target) +end diff --git a/server/Spells/Fighter/Warrior/Guardian/TauntingBlow.lua b/server/Spells/Fighter/Warrior/Guardian/TauntingBlow.lua new file mode 100644 index 000000000..44250fc8a --- /dev/null +++ b/server/Spells/Fighter/Warrior/Guardian/TauntingBlow.lua @@ -0,0 +1,25 @@ +--[[ + Script Name : Spells/Fighter/Warrior/Guardian/TauntingBlow.lua + Script Author : John Adams + Script Date : 2013.11.22 03:11:23 + Script Purpose : + : +--]] + +function cast(Caster, Target, DmgType, MinVal, MaxVal, MinTauntVal, MaxTauntVal) + + -- Inflicts 3 - 6 melee damage on target + if MaxVal ~= nil and MinVal < MaxVal then + SpellDamage(Target, DmgType, math.random(MinVal, MaxVal)) + else + SpellDamage(Target, DmgType, MinVal) + end + + -- Increases Threat to target by 47 - 57 + if MaxTauntVal ~= nil and MinTauntVal < MaxTauntVal then + AddHate(Caster, Target, math.random(MinTauntVal, MaxTauntVal)) + else + AddHate(Caster, Target, MinTauntVal) + end + +end diff --git a/server/Spells/Fighter/Warrior/Guardian/TowerofStone.lua b/server/Spells/Fighter/Warrior/Guardian/TowerofStone.lua new file mode 100644 index 000000000..3b51afb4f --- /dev/null +++ b/server/Spells/Fighter/Warrior/Guardian/TowerofStone.lua @@ -0,0 +1,26 @@ +--[[ + Script Name : Spells/Fighter/Warrior/Guardian/TowerofStone.lua + Script Author : John Adams + Script Date : 2013.08.11 02:08:56 + Script Purpose : + : +--]] + +function cast(Caster, Target) + -- code to cast the spell + Say(Caster, "Whoops! Guess this is not implemented yet!") + +-- Info from spell_display_effects (remove from script when done) +-- Will absorb all damage when the amount is greater than 10% of the target's maximum health. This spell will absorb a total of 1 attack. +-- If towershield equipped in Secondary + +end + +function tick(Caster, Target) + -- code to process each call_frequency (tick) set in spell_tiers +end + +function remove(Caster, Target) + -- code to remove the spell +end + diff --git a/server/Spells/Fighter/Warrior/Guardian/WrathofVelArek.lua b/server/Spells/Fighter/Warrior/Guardian/WrathofVelArek.lua new file mode 100644 index 000000000..38efb4721 --- /dev/null +++ b/server/Spells/Fighter/Warrior/Guardian/WrathofVelArek.lua @@ -0,0 +1,37 @@ +--[[ + Script Name : Spells/Fighter/Warrior/Guardian/WrathofVelArek.lua + Script Author : John Adams + Script Date : 2013.08.11 02:08:29 + Script Purpose : + : +--]] + +function cast(Caster, Target) + -- code to cast the spell + Say(Caster, "Whoops! Guess this is not implemented yet!") + +-- Info from spell_display_effects (remove from script when done) +-- On a melee hit this spell may cast Shielding of Vel`Arek on caster. Lasts for 10.0 seconds. Triggers about 1.8 times per minute. +-- Makes caster immune to Fear effects +-- Makes caster immune to Root effects +-- Makes caster immune to Stun effects +-- Makes caster immune to Daze effects +-- Makes caster immune to Stifle effects +-- Cannot be modified except by direct means +-- On a melee hit this spell may cast Wrath of the Warrior on target of attack. Lasts for 12.0 seconds. Triggers about 2.4 times per minute. +-- Inflicts 635 - 953 slashing damage on target +-- Reduces physical damage done to caster by 5% +-- Cannot be modified except by direct means +-- Caster is immune to riposte damage. +-- Cannot be modified except by direct means + +end + +function tick(Caster, Target) + -- code to process each call_frequency (tick) set in spell_tiers +end + +function remove(Caster, Target) + -- code to remove the spell +end + diff --git a/server/Spells/Fighter/Warrior/Mangle.lua b/server/Spells/Fighter/Warrior/Mangle.lua new file mode 100644 index 000000000..3bb01df5b --- /dev/null +++ b/server/Spells/Fighter/Warrior/Mangle.lua @@ -0,0 +1,25 @@ +--[[ + Script Name : Spells/Fighter/Warrior/Mangle.lua + Script Author : Dello + Script Date : 2014.07.11 02:07:39 + Script Purpose : + : +--]] +function cast(Caster, Target, DmgType, MinVal, MaxVal, SkillAmt) + + AddSkillBonus(Target, GetSkillIDByName("Slashing"), SkillAmt) + + AddSkillBonus(Target, GetSkillIDByName("Piercing"), SkillAmt) + + AddSkillBonus(Target, GetSkillIDByName("Crushing"), SkillAmt) + + if MaxVal ~= nil and MinVal < MaxVal then + SpellDamage(Target, DmgType, math.random(MinVal, MaxVal)) + else + SpellDamage(Target, DmgType, MinVal) + end +end + +function remove(Caster, Target) + RemoveSkillBonus(Target) +end \ No newline at end of file diff --git a/server/Spells/Fighter/Warrior/UnyieldingWill.lua b/server/Spells/Fighter/Warrior/UnyieldingWill.lua new file mode 100644 index 000000000..c4390785e --- /dev/null +++ b/server/Spells/Fighter/Warrior/UnyieldingWill.lua @@ -0,0 +1,30 @@ +--[[ + Script Name : Spells/Fighter/Warrior/UnyieldingWill.lua + Script Author : John Adams + Script Date : 2013.08.11 02:08:01 + Script Purpose : + : +--]] + +function cast(Caster, Target) + -- code to cast the spell + Say(Caster, "Whoops! Guess this is not implemented yet!") + +-- Info from spell_display_effects (remove from script when done) +-- On death this spell will cast Death's Door on caster. Lasts for 36.0 seconds. +-- Applies Exploding Heart on termination. +-- Heals caster for 56.2% of max health +-- This effect cannot be critically applied. +-- The healing of this spell cannot be modified except by direct means +-- Grants a total of 1 trigger of the spell. + +end + +function tick(Caster, Target) + -- code to process each call_frequency (tick) set in spell_tiers +end + +function remove(Caster, Target) + -- code to remove the spell +end + diff --git a/server/Spells/FurPluck.lua b/server/Spells/FurPluck.lua new file mode 100644 index 000000000..13bd5b655 --- /dev/null +++ b/server/Spells/FurPluck.lua @@ -0,0 +1,13 @@ +--[[ + Script Name : Spells/FurPluck.lua + Script Author : Jabantiz + Script Date : 2018.06.22 08:06:25 + Script Purpose : + : +--]] + +-- Info from spell_display_effects (remove from script when done) + +function cast(Caster, Target) + +end diff --git a/server/Spells/KineticistsIntelligence.lua b/server/Spells/KineticistsIntelligence.lua new file mode 100644 index 000000000..23acb308b --- /dev/null +++ b/server/Spells/KineticistsIntelligence.lua @@ -0,0 +1,18 @@ +--[[ + Script Name : Spells/KineticistsIntelligence.lua + Script Author : Ememjr + Script Date : 2019.04.21 06:04:05 + Script Purpose : + : +--]] + +-- Info from spell_display_effects (remove from script when done) +-- Increases INT and STA of caster by 4.0 + +function cast(Caster, Target, BonusAmt) + AddSpellBonus(Target, 1, BonusAmt) + AddSpellBonus(Target, 4, BonusAmt) +end + + + diff --git a/server/Spells/Mage/AbsorbMagic.lua b/server/Spells/Mage/AbsorbMagic.lua new file mode 100644 index 000000000..82d5d5dfa --- /dev/null +++ b/server/Spells/Mage/AbsorbMagic.lua @@ -0,0 +1,27 @@ +--[[ + Script Name : Spells/Mage/AbsorbMagic.lua + Script Author : John Adams + Script Date : 2013.08.11 02:08:42 + Script Purpose : + : +--]] + +function cast(Caster, Target) + -- code to cast the spell + Say(Caster, "Whoops! Guess this is not implemented yet!") + +-- Info from spell_display_effects (remove from script when done) +-- Dispels 12 levels of arcane beneficial effects on target +-- Decreases power of target by 16 +-- Increases power of caster by 8 + +end + +function tick(Caster, Target) + -- code to process each call_frequency (tick) set in spell_tiers +end + +function remove(Caster, Target) + -- code to remove the spell +end + diff --git a/server/Spells/Mage/ArcaneAugur.lua b/server/Spells/Mage/ArcaneAugur.lua new file mode 100644 index 000000000..5bac02618 --- /dev/null +++ b/server/Spells/Mage/ArcaneAugur.lua @@ -0,0 +1,26 @@ +--[[ + Script Name : Spells/Mage/ArcaneAugur.lua + Script Author : John Adams + Script Date : 2013.08.11 02:08:40 + Script Purpose : + : +--]] + +function cast(Caster, Target) + -- code to cast the spell + Say(Caster, "Whoops! Guess this is not implemented yet!") + +-- Info from spell_display_effects (remove from script when done) +-- Begins a Heroic Opportunity +-- Must be engaged in combat + +end + +function tick(Caster, Target) + -- code to process each call_frequency (tick) set in spell_tiers +end + +function remove(Caster, Target) + -- code to remove the spell +end + diff --git a/server/Spells/Mage/CallServant.lua b/server/Spells/Mage/CallServant.lua new file mode 100644 index 000000000..3825deba0 --- /dev/null +++ b/server/Spells/Mage/CallServant.lua @@ -0,0 +1,25 @@ +--[[ + Script Name : Spells/Mage/CallServant.lua + Script Author : John Adams + Script Date : 2013.08.11 02:08:43 + Script Purpose : + : +--]] + +function cast(Caster, Target) + -- code to cast the spell + Say(Caster, "Whoops! Guess this is not implemented yet!") + +-- Info from spell_display_effects (remove from script when done) +-- Teleports target to caster + +end + +function tick(Caster, Target) + -- code to process each call_frequency (tick) set in spell_tiers +end + +function remove(Caster, Target) + -- code to remove the spell +end + diff --git a/server/Spells/Mage/CureMagic.lua b/server/Spells/Mage/CureMagic.lua new file mode 100644 index 000000000..ccd4c3d9b --- /dev/null +++ b/server/Spells/Mage/CureMagic.lua @@ -0,0 +1,20 @@ +--[[ + Script Name : Spells/Mage/CureMagic.lua + Script Author : theFoof + Script Date : 2014.1.16 + Script Purpose : + : +--]] + +function cast(Caster, Target) +-- Dispels X levels of any hostile effects on target + local level = ((GetLevel(Caster) * 1.08) + 1) + CureByType(1, 1, "", level) + CureByType(1, 2, "", level) + CureByType(1, 3, "", level) + CureByType(1, 4, "", level) +end + +function remove(Caster, Target) +end + diff --git a/server/Spells/Mage/Enchanter/Blink.lua b/server/Spells/Mage/Enchanter/Blink.lua new file mode 100644 index 000000000..a717cbfe1 --- /dev/null +++ b/server/Spells/Mage/Enchanter/Blink.lua @@ -0,0 +1,27 @@ +--[[ + Script Name : Spells/Mage/Enchanter/Blink.lua + Script Author : John Adams + Script Date : 2013.08.11 08:08:30 + Script Purpose : + : +--]] + +function cast(Caster, Target) + -- code to cast the spell + Say(Caster, "Whoops! Guess this is not implemented yet!") + +-- Info from spell_display_effects (remove from script when done) +-- Applies Blink on termination. +-- Teleports target to a random location within 10 meters. +-- Decreases Threat to targets in Area of Effect by 236 - 289 + +end + +function tick(Caster, Target) + -- code to process each call_frequency (tick) set in spell_tiers +end + +function remove(Caster, Target) + -- code to remove the spell +end + diff --git a/server/Spells/Mage/Enchanter/Coercer/Amnesia.lua b/server/Spells/Mage/Enchanter/Coercer/Amnesia.lua new file mode 100644 index 000000000..1a8703675 --- /dev/null +++ b/server/Spells/Mage/Enchanter/Coercer/Amnesia.lua @@ -0,0 +1,28 @@ +--[[ + Script Name : Spells/Mage/Enchanter/Coercer/Amnesia.lua + Script Author : John Adams + Script Date : 2013.08.11 08:08:56 + Script Purpose : + : +--]] + +function cast(Caster, Target) + -- code to cast the spell + Say(Caster, "Whoops! Guess this is not implemented yet!") + +-- Info from spell_display_effects (remove from script when done) +-- Stuns target +-- Wipes target's memory of any aggression +-- Epic targets gain an immunity to Stun effects of 4.5 seconds and duration is reduced to 0.5 seconds. +-- Resistibility increases against targets higher than level 29. + +end + +function tick(Caster, Target) + -- code to process each call_frequency (tick) set in spell_tiers +end + +function remove(Caster, Target) + -- code to remove the spell +end + diff --git a/server/Spells/Mage/Enchanter/Coercer/Asylum.lua b/server/Spells/Mage/Enchanter/Coercer/Asylum.lua new file mode 100644 index 000000000..8da76dade --- /dev/null +++ b/server/Spells/Mage/Enchanter/Coercer/Asylum.lua @@ -0,0 +1,40 @@ +--[[ + Script Name : Spells/Mage/Enchanter/Coercer/Asylum.lua + Script Author : Jabantiz + Script Date : 2014.03.14 07:03:01 + Script Purpose : + : +--]] + +function cast(Caster, Target, DmgType, DmgMin, DmgMax, DoTType, MinVal, MaxVal, BonusAmt) + -- Inflicts 41 - 51 mental damage on target instantly and every 6 seconds + if MaxVal ~= nil and MinVal < MaxVal then + SpellDamage(Target, DoTType, math.random(MinVal, MaxVal)) + else + SpellDamage(Target, DoTType, MinVal) + end + + -- Decreases Mitigation of target vs arcane damage by 141 + AddSpellBonus(Target, 203, BonusAmt) +end + +function tick(Caster, Target, DmgType, DmgMin, DmgMax, DoTType, MinVal, MaxVal, BonusAmt) + if MaxVal ~= nil and MinVal < MaxVal then + SpellDamage(Target, DoTType, math.random(MinVal, MaxVal)) + else + SpellDamage(Target, DoTType, MinVal) + end +end + +function remove(Caster, Target, DmgType, DmgMin, DmgMax, DoTType, MinVal, MaxVal, BonusAmt) + RemoveSpellBonus(Target) + + -- Applies Forceful Headache on termination. + -- Inflicts 103 - 172 mental damage on target + -- If over 50% power + if (GetCurrentHP(Target) / GetMaxHP(Target)) >= 0.5 then + -- Used ProcDamage() so I could override the spell name + ProcDamage(Caster, Target, "Forceful Headache", DmgType, DmgMin, DmgMax) + end +end + diff --git a/server/Spells/Mage/Enchanter/Coercer/Brainshock.lua b/server/Spells/Mage/Enchanter/Coercer/Brainshock.lua new file mode 100644 index 000000000..46651d12c --- /dev/null +++ b/server/Spells/Mage/Enchanter/Coercer/Brainshock.lua @@ -0,0 +1,33 @@ +--[[ + Script Name : Spells/Mage/Enchanter/Coercer/Brainshock.lua + Script Author : Jabantiz + Script Date : 2014.03.14 06:03:59 + Script Purpose : + : +--]] + +function cast(Caster, Target, DoTType, MinVal, MaxVal, PowerDmg, PowerHeal) + -- Inflicts 14 - 17 mental damage on target instantly and every 6 seconds + if MaxVal ~= nil and MinVal < MaxVal then + SpellDamage(Target, DoTType, math.random(MinVal, MaxVal)) + else + SpellDamage(Target, DoTType, MinVal) + end + + -- Decreases power of target by 2 instantly and every 6 seconds + ModifyPower(Target, PowerDmg) + + -- Increases power of caster by 5 + SpellHeal("Power", PowerHeal, PowerHeal, Caster) +end + +function tick(Caster, Target, DoTType, MinVal, MaxVal, PowerDmg, PowerHeal) + if MaxVal ~= nil and MinVal < MaxVal then + SpellDamage(Target, DoTType, math.random(MinVal, MaxVal)) + else + SpellDamage(Target, DoTType, MinVal) + end + + ModifyPower(Target, PowerDmg) + SpellHeal("Power", PowerHeal, PowerHeal, Caster) +end diff --git a/server/Spells/Mage/Enchanter/Coercer/Breeze.lua b/server/Spells/Mage/Enchanter/Coercer/Breeze.lua new file mode 100644 index 000000000..08576e2b0 --- /dev/null +++ b/server/Spells/Mage/Enchanter/Coercer/Breeze.lua @@ -0,0 +1,16 @@ +--[[ + Script Name : Spells/Mage/Enchanter/Coercer/Breeze.lua + Script Author : Jabantiz + Script Date : 2014.03.14 08:03:04 + Script Purpose : + : +--]] + +function cast(Caster, Target, BonusAmt) + -- Increases In-Combat Power Regeneration of group members (AE) by 5.6 + AddSpellBonus(Target, 605, BonusAmt) +end + +function remove(Caster, Target) + RemoveSpellBonus(Target) +end diff --git a/server/Spells/Mage/Enchanter/Coercer/CannibalizeThoughts.lua b/server/Spells/Mage/Enchanter/Coercer/CannibalizeThoughts.lua new file mode 100644 index 000000000..f39f446b7 --- /dev/null +++ b/server/Spells/Mage/Enchanter/Coercer/CannibalizeThoughts.lua @@ -0,0 +1,26 @@ +--[[ + Script Name : Spells/Mage/Enchanter/Coercer/CannibalizeThoughts.lua + Script Author : John Adams + Script Date : 2013.08.11 08:08:55 + Script Purpose : + : +--]] + +function cast(Caster, Target) + -- code to cast the spell + Say(Caster, "Whoops! Guess this is not implemented yet!") + +-- Info from spell_display_effects (remove from script when done) +-- Decreases INT of target by 44.3 +-- Increases power of group members (AE) by 11 instantly and every 6 seconds + +end + +function tick(Caster, Target) + -- code to process each call_frequency (tick) set in spell_tiers +end + +function remove(Caster, Target) + -- code to remove the spell +end + diff --git a/server/Spells/Mage/Enchanter/Coercer/CerebralShock.lua b/server/Spells/Mage/Enchanter/Coercer/CerebralShock.lua new file mode 100644 index 000000000..977307f18 --- /dev/null +++ b/server/Spells/Mage/Enchanter/Coercer/CerebralShock.lua @@ -0,0 +1,39 @@ +--[[ + Script Name : dot.lua + Script Purpose : Generic Damage Over Time script + Script Author : John Adams + Script Date : 2008.12.04 +--]] + +function cast(Caster, Target, DOTType, MinDOTVal, MaxDOTVal) + + -- DOT component (instant damage) + if MaxDOTVal ~= nil and MinDOTVal < MaxDOTVal then + + SpellDamage(Target, DOTType, math.random(MinDOTVal, MaxDOTVal)) + + else + + SpellDamage(Target, DOTType, MinDOTVal) + + end + +end + +function tick(Caster, Target, DOTType, MinDOTVal, MaxDOTVal) + + if MaxDOTVal ~= nil and MinDOTVal < MaxDOTVal then + + SpellDamage(Target, DOTType, math.random(MinDOTVal, MaxDOTVal)) + + else + + SpellDamage(Target, DOTType, MinDOTVal) + + end + +end + +function remove(Caster, Target, DOTType, MinDOTVal, MaxDOTVal) + +end diff --git a/server/Spells/Mage/Enchanter/Coercer/Channel.lua b/server/Spells/Mage/Enchanter/Coercer/Channel.lua new file mode 100644 index 000000000..dca7391b9 --- /dev/null +++ b/server/Spells/Mage/Enchanter/Coercer/Channel.lua @@ -0,0 +1,11 @@ +--[[ + Script Name : Spells/Mage/Enchanter/Coercer/Channel.lua + Script Author : neatz09 + Script Date : 2019.10.16 10:10:48 + Script Purpose : + : +--]] + +-- Info from spell_display_effects (remove from script when done) +-- Distributes the group members' total combined power evenly among all the members +--need to loop the group memeber and add up all the power then divide by # of group members and loop over them again and set them diff --git a/server/Spells/Mage/Enchanter/Coercer/Charm.lua b/server/Spells/Mage/Enchanter/Coercer/Charm.lua new file mode 100644 index 000000000..11ed7fc31 --- /dev/null +++ b/server/Spells/Mage/Enchanter/Coercer/Charm.lua @@ -0,0 +1,37 @@ +--[[ + Script Name : Spells/Mage/Enchanter/Coercer/Charm.lua + Script Author : Jabantiz + Script Date : 2014.03.14 05:03:40 + Script Purpose : + : +--]] + +-- Info from spell_display_effects (remove from script when done) +-- Charms target +-- Increases Out-of-Combat Power Regeneration of target by 2.0 +-- Increases Out-of-Combat Health Regeneration of target by 4.0 +-- Applies Disorientation on termination. Lasts for 3.0 seconds. +-- Mesmerizes target +-- Dispelled when target takes damage +-- Epic targets gain an immunity to Mesmerize effects of 9.0 seconds and duration is reduced to 1.0 second. +-- Applies Warning on termination. Lasts for 0.5 seconds. +-- Grants Sonic Vision to caster +-- Certain enemies cannot be charmed +-- Only affects targets level 16 and below +-- Does not affect Epic targets + +function cast(Caster, Target, PowerRegen, HealthRegen, MaxLevel) + if not IsEpic(Target) and (MaxLevel == 0 or GetLevel(Target) <= MaxLevel) then + Charm(Caster, Target) + AddSpellBonus(Target, 601, PowerRegen) + AddSpellBonus(Target, 600, HealthRegen) + end +end + +function remove(Caster, Target) + local pet = GetCharmedPet(Caster) + if pet ~= nil then + RemoveSpellBonus(pet) + DismissPet(pet) + end +end diff --git a/server/Spells/Mage/Enchanter/Coercer/DestructiveMind.lua b/server/Spells/Mage/Enchanter/Coercer/DestructiveMind.lua new file mode 100644 index 000000000..a43e9b6d2 --- /dev/null +++ b/server/Spells/Mage/Enchanter/Coercer/DestructiveMind.lua @@ -0,0 +1,27 @@ +--[[ + Script Name : Spells/Mage/Enchanter/Coercer/DestructiveMind.lua + Script Author : John Adams + Script Date : 2013.08.11 08:08:34 + Script Purpose : + : +--]] + +function cast(Caster, Target) + -- code to cast the spell + Say(Caster, "Whoops! Guess this is not implemented yet!") + +-- Info from spell_display_effects (remove from script when done) +-- On a damage spell hit this spell will cast Despotic Mind on target of spell. +-- Inflicts 182 - 222 mental damage on target +-- Grants a total of 3 triggers of the spell. + +end + +function tick(Caster, Target) + -- code to process each call_frequency (tick) set in spell_tiers +end + +function remove(Caster, Target) + -- code to remove the spell +end + diff --git a/server/Spells/Mage/Enchanter/Coercer/EgoShock.lua b/server/Spells/Mage/Enchanter/Coercer/EgoShock.lua new file mode 100644 index 000000000..be268f96b --- /dev/null +++ b/server/Spells/Mage/Enchanter/Coercer/EgoShock.lua @@ -0,0 +1,26 @@ +--[[ + Script Name : Spells/Mage/Enchanter/Coercer/EgoShock.lua + Script Author : Jabantiz + Script Date : 2014.03.14 06:03:01 + Script Purpose : + : +--]] + +function cast(Caster, Target, DmgType, MinVal, MaxVal) + -- Inflicts 65 - 79 mental damage on target encounter + if MaxVal ~= nil and MinVal < MaxVal then + SpellDamage(Target, DmgType, math.random(MinVal, MaxVal)) + else + SpellDamage(Target, DmgType, MinVal) + end + + -- Dazes target encounter + AddControlEffect(Target, 3) + + -- Epic targets gain an immunity to Daze effects of 12.0 seconds and duration is reduced to 1.3 seconds. + -- Resistibility increases against targets higher than level 29. +end + +function remove(Caster, Target) + RemoveControlEffect(Target, 3) +end diff --git a/server/Spells/Mage/Enchanter/Coercer/EnragingDemeanor.lua b/server/Spells/Mage/Enchanter/Coercer/EnragingDemeanor.lua new file mode 100644 index 000000000..fc0cfb6b0 --- /dev/null +++ b/server/Spells/Mage/Enchanter/Coercer/EnragingDemeanor.lua @@ -0,0 +1,24 @@ +--[[ + Script Name : Spells/Mage/Enchanter/Coercer/EnragingDemeanor.lua + Script Author : John Adams + Script Date : 2013.08.11 08:08:04 + Script Purpose : + : +--]] + +function cast(Caster, Target) + -- code to cast the spell + Say(Caster, "Whoops! Guess this is not implemented yet!") + +-- Info from spell_display_effects (remove from script when done) + +end + +function tick(Caster, Target) + -- code to process each call_frequency (tick) set in spell_tiers +end + +function remove(Caster, Target) + -- code to remove the spell +end + diff --git a/server/Spells/Mage/Enchanter/Coercer/ForcedHesitation.lua b/server/Spells/Mage/Enchanter/Coercer/ForcedHesitation.lua new file mode 100644 index 000000000..a095b5794 --- /dev/null +++ b/server/Spells/Mage/Enchanter/Coercer/ForcedHesitation.lua @@ -0,0 +1,35 @@ +--[[ + Script Name : Spells/Mage/Enchanter/Coercer/ForcedHesitation.lua + Script Author : Jabantiz + Script Date : 2014.03.14 08:03:18 + Script Purpose : + : +--]] + +function cast(Caster, Target) + + -- Applies Blind. Lasts for 4.0 seconds. + -- Dazes target + -- Blurs vision of target + -- Dispelled when target takes damage + -- Epic targets gain an immunity to Daze effects of 12.0 seconds and duration is reduced to 1.3 seconds. + + -- Roots target + AddControlEffect(Target, 5) + + -- 5% chance to dispel when target takes damage + AddProc(Target, 2, 5.0) + + -- Epic targets gain an immunity to Root and Will not multi-attack if the primary attack was avoided. effects of 54.0 seconds and duration is reduced to 6.0 seconds. + -- Resistibility increases against targets higher than level 29. +end + +function proc(Caster, Target, Type) + if Type == 2 then + CancelSpell() + end +end + +function remove(Caster, Target) + RemoveControlEffect(Target, 5) +end diff --git a/server/Spells/Mage/Enchanter/Coercer/Hemorrhage.lua b/server/Spells/Mage/Enchanter/Coercer/Hemorrhage.lua new file mode 100644 index 000000000..a5e9fd4f8 --- /dev/null +++ b/server/Spells/Mage/Enchanter/Coercer/Hemorrhage.lua @@ -0,0 +1,21 @@ +--[[ + Script Name : Spells/Mage/Enchanter/Coercer/Hemorrhage.lua + Script Author : John Adams + Script Date : 2013.11.20 05:11:54 + Script Purpose : + : +--]] + +function cast(Caster, Target, DmgType, MinVal, MaxVal) + + -- Inflicts 9 - 12 mental damage on target + if MaxVal ~= nil and MinVal < MaxVal then + SpellDamage(Target, DmgType, math.random(MinVal, MaxVal)) + else + SpellDamage(Target, DmgType, MinVal) + end + + -- Interrupts target + Interrupt(Caster) + +end diff --git a/server/Spells/Mage/Enchanter/Coercer/HemorrhageX.lua b/server/Spells/Mage/Enchanter/Coercer/HemorrhageX.lua new file mode 100644 index 000000000..a1385fbc6 --- /dev/null +++ b/server/Spells/Mage/Enchanter/Coercer/HemorrhageX.lua @@ -0,0 +1,26 @@ +--[[ + Script Name : Spells/Mage/Enchanter/Coercer/HemorrhageX.lua + Script Author : John Adams + Script Date : 2013.08.11 08:08:27 + Script Purpose : + : +--]] + +function cast(Caster, Target) + -- code to cast the spell + Say(Caster, "Whoops! Guess this is not implemented yet!") + +-- Info from spell_display_effects (remove from script when done) +-- Interrupts target +-- Inflicts 476 - 644 mental damage on target + +end + +function tick(Caster, Target) + -- code to process each call_frequency (tick) set in spell_tiers +end + +function remove(Caster, Target) + -- code to remove the spell +end + diff --git a/server/Spells/Mage/Enchanter/Coercer/Hostage.lua b/server/Spells/Mage/Enchanter/Coercer/Hostage.lua new file mode 100644 index 000000000..04f1cdef5 --- /dev/null +++ b/server/Spells/Mage/Enchanter/Coercer/Hostage.lua @@ -0,0 +1,27 @@ +--[[ + Script Name : Spells/Mage/Enchanter/Coercer/Hostage.lua + Script Author : John Adams + Script Date : 2013.08.11 08:08:57 + Script Purpose : + : +--]] + +function cast(Caster, Target) + -- code to cast the spell + Say(Caster, "Whoops! Guess this is not implemented yet!") + +-- Info from spell_display_effects (remove from script when done) +-- When damaged with a melee weapon this spell will cast Convulsions on target. +-- Inflicts 151 - 184 mental damage on target +-- Grants a total of 3 triggers of the spell. + +end + +function tick(Caster, Target) + -- code to process each call_frequency (tick) set in spell_tiers +end + +function remove(Caster, Target) + -- code to remove the spell +end + diff --git a/server/Spells/Mage/Enchanter/Coercer/LashingGaze.lua b/server/Spells/Mage/Enchanter/Coercer/LashingGaze.lua new file mode 100644 index 000000000..977307f18 --- /dev/null +++ b/server/Spells/Mage/Enchanter/Coercer/LashingGaze.lua @@ -0,0 +1,39 @@ +--[[ + Script Name : dot.lua + Script Purpose : Generic Damage Over Time script + Script Author : John Adams + Script Date : 2008.12.04 +--]] + +function cast(Caster, Target, DOTType, MinDOTVal, MaxDOTVal) + + -- DOT component (instant damage) + if MaxDOTVal ~= nil and MinDOTVal < MaxDOTVal then + + SpellDamage(Target, DOTType, math.random(MinDOTVal, MaxDOTVal)) + + else + + SpellDamage(Target, DOTType, MinDOTVal) + + end + +end + +function tick(Caster, Target, DOTType, MinDOTVal, MaxDOTVal) + + if MaxDOTVal ~= nil and MinDOTVal < MaxDOTVal then + + SpellDamage(Target, DOTType, math.random(MinDOTVal, MaxDOTVal)) + + else + + SpellDamage(Target, DOTType, MinDOTVal) + + end + +end + +function remove(Caster, Target, DOTType, MinDOTVal, MaxDOTVal) + +end diff --git a/server/Spells/Mage/Enchanter/Coercer/MedusaGaze.lua b/server/Spells/Mage/Enchanter/Coercer/MedusaGaze.lua new file mode 100644 index 000000000..d00433c3b --- /dev/null +++ b/server/Spells/Mage/Enchanter/Coercer/MedusaGaze.lua @@ -0,0 +1,26 @@ +--[[ + Script Name : Spells/Mage/Enchanter/Coercer/MedusaGaze.lua + Script Author : Jabantiz + Script Date : 2014.03.14 05:03:17 + Script Purpose : + : +--]] + +function cast(Caster, Target, DmgType, MinVal, MaxVal) + -- Inflicts 13 - 16 mental damage on target + if MaxVal ~= nil and MinVal < MaxVal then + SpellDamage(Target, DmgType, math.random(MinVal, MaxVal)) + else + SpellDamage(Target, DmgType, MinVal) + end + + -- Stuns target + AddControlEffect(Target, 4) + + -- Epic targets gain an immunity to Stun effects of 16.5 seconds and duration is reduced to 1.8 seconds. + -- Resistibility increases against targets higher than level 29. +end + +function remove(Caster, Target) + RemoveControlEffect(Target, 4) +end diff --git a/server/Spells/Mage/Enchanter/Coercer/Mesmerize.lua b/server/Spells/Mage/Enchanter/Coercer/Mesmerize.lua new file mode 100644 index 000000000..7bf8cdcec --- /dev/null +++ b/server/Spells/Mage/Enchanter/Coercer/Mesmerize.lua @@ -0,0 +1,22 @@ +--[[ + Script Name : Spells/Mage/Enchanter/Coercer/Mesmerize.lua + Script Author : John Adams + Script Date : 2013.11.20 05:11:13 + Script Purpose : + : +--]] + +-- Info from spell_display_effects (remove from script when done) +-- Mesmerizes target +-- Prevents AOE (except when direct) +-- Dispelled when target takes damage +-- Epic targets gain an immunity to Mesmerize effects of 45.0 seconds and duration is reduced to 5.0 seconds. +-- Resistibility increases against targets higher than level 29. + +function cast(Caster, Target, ControlType) + AddControlEffect(Target, ControlType) +end + +function remove(Caster, Target, ControlType) + RemoveControlEffect(Target, ControlType) +end diff --git a/server/Spells/Mage/Enchanter/Coercer/MindBlast.lua b/server/Spells/Mage/Enchanter/Coercer/MindBlast.lua new file mode 100644 index 000000000..4dcf3efaa --- /dev/null +++ b/server/Spells/Mage/Enchanter/Coercer/MindBlast.lua @@ -0,0 +1,30 @@ +--[[ + Script Name : dd_interrupt.lua + Script Purpose : Generic damage + stun script + Script Author : John Adams + Script Date : 2008.12.04 +--]] + +function cast(Caster, Target, DDType, MinDDVal, MaxDDVal, EffectType, EffectChance) + + -- DD component + if MaxDDVal ~= nil and MinDDVal < MaxDDVal then + SpellDamage(Target, DDType, math.random(MinDDVal, MaxDDVal)) + else + SpellDamage(Target, DDType, MinDDVal) + end + + -- Effect component - if EffectChance is blank, always apply the effect, otherwise random + if EffectChance ~= nil then + if EffectChance >= math.random(1, 100) then + -- Interrupt(Target) + end + else + -- Interrupt(Target) + end + + +end + +function remove(Caster, Target) +end \ No newline at end of file diff --git a/server/Spells/Mage/Enchanter/Coercer/Mindbend.lua b/server/Spells/Mage/Enchanter/Coercer/Mindbend.lua new file mode 100644 index 000000000..c1d8fa215 --- /dev/null +++ b/server/Spells/Mage/Enchanter/Coercer/Mindbend.lua @@ -0,0 +1,28 @@ +--[[ + Script Name : Spells/Mage/Enchanter/Coercer/Mindbend.lua + Script Author : John Adams + Script Date : 2013.08.11 08:08:33 + Script Purpose : + : +--]] + +function cast(Caster, Target) + -- code to cast the spell + Say(Caster, "Whoops! Guess this is not implemented yet!") + +-- Info from spell_display_effects (remove from script when done) +-- On any combat or spell hit this spell will cast Disorientation on target. Lasts for 4.0 seconds. +-- Stuns target +-- If Target is not Epic +-- Grants a total of 3 triggers of the spell. + +end + +function tick(Caster, Target) + -- code to process each call_frequency (tick) set in spell_tiers +end + +function remove(Caster, Target) + -- code to remove the spell +end + diff --git a/server/Spells/Mage/Enchanter/Coercer/MindsEye.lua b/server/Spells/Mage/Enchanter/Coercer/MindsEye.lua new file mode 100644 index 000000000..ea9b80b16 --- /dev/null +++ b/server/Spells/Mage/Enchanter/Coercer/MindsEye.lua @@ -0,0 +1,10 @@ +--[[ + Script Name : Spells/Mage/Enchanter/Coercer/MindsEye.lua + Script Author : neatz09 + Script Date : 2019.10.20 09:10:41 + Script Purpose : + : +--]] + +-- Info from spell_display_effects (remove from script when done) +-- Increases Combat Power Regen of group members (AE) by 6.3 diff --git a/server/Spells/Mage/Enchanter/Coercer/ObliteratedPsyche.lua b/server/Spells/Mage/Enchanter/Coercer/ObliteratedPsyche.lua new file mode 100644 index 000000000..3ff614ccf --- /dev/null +++ b/server/Spells/Mage/Enchanter/Coercer/ObliteratedPsyche.lua @@ -0,0 +1,18 @@ +--[[ + Script Name : Spells/Mage/Enchanter/Coercer/ObliteratedPsyche.lua + Script Author : Jabantiz + Script Date : 2014.03.14 08:03:42 + Script Purpose : + : +--]] + +function cast(Caster, Target, BonusAmt) + -- Decreases Mitigation of target vs elemental, noxious and arcane damage by 180 + AddSpellBonus(Target, 201, BonusAmt) + AddSpellBonus(Target, 202, BonusAmt) + AddSpellBonus(Target, 203, BonusAmt) +end + +function remove(Caster, Target) + RemoveSpellBonus(Target) +end diff --git a/server/Spells/Mage/Enchanter/Coercer/PeacefulLink.lua b/server/Spells/Mage/Enchanter/Coercer/PeacefulLink.lua new file mode 100644 index 000000000..75aa8a406 --- /dev/null +++ b/server/Spells/Mage/Enchanter/Coercer/PeacefulLink.lua @@ -0,0 +1,27 @@ +--[[ + Script Name : Spells/Mage/Enchanter/Coercer/PeacefulLink.lua + Script Author : John Adams + Script Date : 2013.08.11 08:08:18 + Script Purpose : + : +--]] + +function cast(Caster, Target) + -- code to cast the spell + Say(Caster, "Whoops! Guess this is not implemented yet!") + +-- Info from spell_display_effects (remove from script when done) +-- When damaged with a melee weapon this spell has a 33% chance to cast Linked Pain on target's attacker. +-- Decreases threat priority of target by 1 position +-- Decreases Hate Gain of target by 8.6% + +end + +function tick(Caster, Target) + -- code to process each call_frequency (tick) set in spell_tiers +end + +function remove(Caster, Target) + -- code to remove the spell +end + diff --git a/server/Spells/Mage/Enchanter/Coercer/PossessEssence.lua b/server/Spells/Mage/Enchanter/Coercer/PossessEssence.lua new file mode 100644 index 000000000..94ee697b1 --- /dev/null +++ b/server/Spells/Mage/Enchanter/Coercer/PossessEssence.lua @@ -0,0 +1,24 @@ +--[[ + Script Name : Spells/Mage/Enchanter/Coercer/PossessEssence.lua + Script Author : John Adams + Script Date : 2013.08.11 08:08:08 + Script Purpose : + : +--]] + +function cast(Caster, Target) + -- code to cast the spell + Say(Caster, "Whoops! Guess this is not implemented yet!") + +-- Info from spell_display_effects (remove from script when done) + +end + +function tick(Caster, Target) + -- code to process each call_frequency (tick) set in spell_tiers +end + +function remove(Caster, Target) + -- code to remove the spell +end + diff --git a/server/Spells/Mage/Enchanter/Coercer/PowerofMind.lua b/server/Spells/Mage/Enchanter/Coercer/PowerofMind.lua new file mode 100644 index 000000000..d9572cef0 --- /dev/null +++ b/server/Spells/Mage/Enchanter/Coercer/PowerofMind.lua @@ -0,0 +1,19 @@ +--[[ + Script Name : Spells/Mage/Enchanter/Coercer/PowerofMind.lua + Script Author : Jabantiz + Script Date : 2014.03.14 06:03:42 + Script Purpose : + : +--]] + +function cast(Caster, Target, Power, Arcane) + -- Increases Max Power of group members (AE) by 20.8 + AddSpellBonus(Target, 619, Power) + + -- Increases Mitigation of group members (AE) vs arcane damage by 79 + AddSpellBonus(Target, 203, Arcane) +end + +function remove(Caster, Target) + RemoveSpellBonus(Target) +end diff --git a/server/Spells/Mage/Enchanter/Coercer/Puppetmaster.lua b/server/Spells/Mage/Enchanter/Coercer/Puppetmaster.lua new file mode 100644 index 000000000..b172624b4 --- /dev/null +++ b/server/Spells/Mage/Enchanter/Coercer/Puppetmaster.lua @@ -0,0 +1,26 @@ +--[[ + Script Name : Spells/Mage/Enchanter/Coercer/Puppetmaster.lua + Script Author : John Adams + Script Date : 2013.08.11 08:08:15 + Script Purpose : + : +--]] + +function cast(Caster, Target) + -- code to cast the spell + Say(Caster, "Whoops! Guess this is not implemented yet!") + +-- Info from spell_display_effects (remove from script when done) +-- Summons 3 limited pets to aid the caster +-- Summons a limited pet to aid the caster + +end + +function tick(Caster, Target) + -- code to process each call_frequency (tick) set in spell_tiers +end + +function remove(Caster, Target) + -- code to remove the spell +end + diff --git a/server/Spells/Mage/Enchanter/Coercer/PureAwe.lua b/server/Spells/Mage/Enchanter/Coercer/PureAwe.lua new file mode 100644 index 000000000..616f9e4fb --- /dev/null +++ b/server/Spells/Mage/Enchanter/Coercer/PureAwe.lua @@ -0,0 +1,14 @@ +--[[ + Script Name : Spells/Mage/Enchanter/Coercer/PureAwe.lua + Script Author : neatz09 + Script Date : 2019.09.29 06:09:35 + Script Purpose : + : +--]] + +-- Info from spell_display_effects (remove from script when done) +-- Mesmerizes target encounter +-- Prevents AOE (except when direct) +-- Dispelled when target takes damage +-- Epic targets gain an immunity to Mesmerize effects of 27.0 seconds and duration is reduced to 3.0 seconds. +-- Resistibility increases against targets higher than level 29. diff --git a/server/Spells/Mage/Enchanter/Coercer/ReekofTerror.lua b/server/Spells/Mage/Enchanter/Coercer/ReekofTerror.lua new file mode 100644 index 000000000..8171b825f --- /dev/null +++ b/server/Spells/Mage/Enchanter/Coercer/ReekofTerror.lua @@ -0,0 +1,28 @@ +--[[ + Script Name : Spells/Mage/Enchanter/Coercer/ReekofTerror.lua + Script Author : John Adams + Script Date : 2013.08.11 08:08:46 + Script Purpose : + : +--]] + +function cast(Caster, Target) + -- code to cast the spell + Say(Caster, "Whoops! Guess this is not implemented yet!") + +-- Info from spell_display_effects (remove from script when done) +-- Makes targets in Area of Effect afraid +-- Decreases Threat to targets in Area of Effect by 694 +-- Dispelled when target takes damage +-- Resistibility increases against targets higher than level 29. + +end + +function tick(Caster, Target) + -- code to process each call_frequency (tick) set in spell_tiers +end + +function remove(Caster, Target) + -- code to remove the spell +end + diff --git a/server/Spells/Mage/Enchanter/Coercer/ShiftMana.lua b/server/Spells/Mage/Enchanter/Coercer/ShiftMana.lua new file mode 100644 index 000000000..e0c40f285 --- /dev/null +++ b/server/Spells/Mage/Enchanter/Coercer/ShiftMana.lua @@ -0,0 +1,16 @@ +--[[ + Script Name : Spells/Mage/Enchanter/Coercer/ShiftMana.lua + Script Author : Jabantiz + Script Date : 2014.03.14 06:03:11 + Script Purpose : + : +--]] + +function cast(Caster, Target, Power) + -- Increases power of caster by 6 instantly and every 4 seconds + SpellHeal("Power", Power) +end + +function tick(Caster, Target, Power) + SpellHeal("Power", Power) +end diff --git a/server/Spells/Mage/Enchanter/Coercer/ShockWave.lua b/server/Spells/Mage/Enchanter/Coercer/ShockWave.lua new file mode 100644 index 000000000..e2121ebdb --- /dev/null +++ b/server/Spells/Mage/Enchanter/Coercer/ShockWave.lua @@ -0,0 +1,24 @@ +--[[ + Script Name : Spells/Mage/Enchanter/Coercer/ShockWave.lua + Script Author : John Adams + Script Date : 2013.08.11 08:08:13 + Script Purpose : + : +--]] + +function cast(Caster, Target) + -- code to cast the spell + Say(Caster, "Whoops! Guess this is not implemented yet!") + +-- Info from spell_display_effects (remove from script when done) + +end + +function tick(Caster, Target) + -- code to process each call_frequency (tick) set in spell_tiers +end + +function remove(Caster, Target) + -- code to remove the spell +end + diff --git a/server/Spells/Mage/Enchanter/Coercer/SignetofIntellect.lua b/server/Spells/Mage/Enchanter/Coercer/SignetofIntellect.lua new file mode 100644 index 000000000..14a530364 --- /dev/null +++ b/server/Spells/Mage/Enchanter/Coercer/SignetofIntellect.lua @@ -0,0 +1,21 @@ +--[[ + Script Name : Spells/Mage/Enchanter/Coercer/SignetofIntellect.lua + Script Author : Jabantiz + Script Date : 2014.03.14 06:03:51 + Script Purpose : + : +--]] + +function cast(Caster, Target, Stats, Avoid) + -- Increases INT and AGI of group members (AE) by 9.4 + AddSpellBonus(Target, 2, Stats) + AddSpellBonus(Target, 4, Stats) + + -- Adds 1.4% to base avoidance. + AddSpellBonus(Target, 696, Avoid) +end + +function remove(Caster, Target) + RemoveSpellBonus(Target) +end + diff --git a/server/Spells/Mage/Enchanter/Coercer/Silence.lua b/server/Spells/Mage/Enchanter/Coercer/Silence.lua new file mode 100644 index 000000000..3c11e17e9 --- /dev/null +++ b/server/Spells/Mage/Enchanter/Coercer/Silence.lua @@ -0,0 +1,35 @@ +--[[ + Script Name : Spells/Mage/Enchanter/Coercer/Silence.lua + Script Author : Jabantiz + Script Date : 2014.03.14 08:03:01 + Script Purpose : + : +--]] + +function cast(Caster, Target, DmgType, MinVal, MaxVal, DoTType, DoTMinVal, DoTMaxVal) + -- Inflicts 71 - 87 mental damage on target + if MaxVal ~= nil and MinVal < MaxVal then + SpellDamage(Target, DmgType, math.random(MinVal, MaxVal)) + else + SpellDamage(Target, DmgType, MinVal) + end + + -- Stifles target + AddControlEffect(Target, 2) + + -- Epic targets gain an immunity to Stifle effects of 18.0 seconds and duration is reduced to 2.0 seconds. + -- Resistibility increases against targets higher than level 29. +end + +function tick(Caster, Target, DmgType, MinVal, MaxVal, DoTType, DoTMinVal, DoTMaxVal) + -- Inflicts 24 - 29 mental damage on target every second + if DoTMaxVal ~= nil and DoTMinVal < DoTMaxVal then + SpellDamage(Target, DoTType, math.random(DoTMinVal, DoTMaxVal)) + else + SpellDamage(Target, DoTType, DoTMinVal) + end +end + +function remove(Caster, Target) + RemoveControlEffect(Target, 2) +end diff --git a/server/Spells/Mage/Enchanter/Coercer/SimpleMinds.lua b/server/Spells/Mage/Enchanter/Coercer/SimpleMinds.lua new file mode 100644 index 000000000..0ef2f92fb --- /dev/null +++ b/server/Spells/Mage/Enchanter/Coercer/SimpleMinds.lua @@ -0,0 +1,29 @@ +--[[ + Script Name : Spells/Mage/Enchanter/Coercer/SimpleMinds.lua + Script Author : Jabantiz + Script Date : 2014.03.14 06:03:09 + Script Purpose : + : +--]] + +function cast(Caster, Target, DoTType, MinVal, MaxVal, PowerDmg) + -- Inflicts 12 - 14 mental damage on target encounter instantly and every 4 seconds + if MaxVal ~= nil and MinVal < MaxVal then + SpellDamage(Target, DoTType, math.random(MinVal, MaxVal)) + else + SpellDamage(Target, DoTType, MinVal) + end + + -- Decreases power of target encounter by 4 instantly and every 4 seconds + ModifyPower(Target, PowerDmg) +end + +function tick(Caster, Target, DoTType, MinVal, MaxVal, PowerDmg) + if MaxVal ~= nil and MinVal < MaxVal then + SpellDamage(Target, DoTType, math.random(MinVal, MaxVal)) + else + SpellDamage(Target, DoTType, MinVal) + end + + ModifyPower(Target, PowerDmg) +end diff --git a/server/Spells/Mage/Enchanter/Coercer/SirensGift.lua b/server/Spells/Mage/Enchanter/Coercer/SirensGift.lua new file mode 100644 index 000000000..846f72209 --- /dev/null +++ b/server/Spells/Mage/Enchanter/Coercer/SirensGift.lua @@ -0,0 +1,30 @@ +--[[ + Script Name : Spells/Mage/Enchanter/Coercer/SirensGift.lua + Script Author : John Adams + Script Date : 2013.08.11 08:08:18 + Script Purpose : + : +--]] + +function cast(Caster, Target) + -- code to cast the spell + Say(Caster, "Whoops! Guess this is not implemented yet!") + +-- Info from spell_display_effects (remove from script when done) +-- Modifies mana flow to be group targeted. Also reduces duration and fuel cost. +-- On a damage spell hit this spell has a 12% chance to cast Siren's Gift on the group. Lasts for 10.0 seconds. +-- Reduces the power cost of group members' spells by 20% +-- Reduces the reuse timers of all spells by 10% +-- Increases the max health of the coercer's Possess Essence by 25% +-- Cannot be modified except by direct means + +end + +function tick(Caster, Target) + -- code to process each call_frequency (tick) set in spell_tiers +end + +function remove(Caster, Target) + -- code to remove the spell +end + diff --git a/server/Spells/Mage/Enchanter/Coercer/SirensStare.lua b/server/Spells/Mage/Enchanter/Coercer/SirensStare.lua new file mode 100644 index 000000000..53c5ebcb1 --- /dev/null +++ b/server/Spells/Mage/Enchanter/Coercer/SirensStare.lua @@ -0,0 +1,25 @@ +--[[ + Script Name : Spells/Mage/Enchanter/Coercer/SirensStare.lua + Script Author : John Adams + Script Date : 2013.08.11 08:08:19 + Script Purpose : + : +--]] + +function cast(Caster, Target) + -- code to cast the spell + Say(Caster, "Whoops! Guess this is not implemented yet!") + +-- Info from spell_display_effects (remove from script when done) +-- Adds mental damage to a fighter's single target and AE taunts. + +end + +function tick(Caster, Target) + -- code to process each call_frequency (tick) set in spell_tiers +end + +function remove(Caster, Target) + -- code to remove the spell +end + diff --git a/server/Spells/Mage/Enchanter/Coercer/SpellCurse.lua b/server/Spells/Mage/Enchanter/Coercer/SpellCurse.lua new file mode 100644 index 000000000..cdaf01ebc --- /dev/null +++ b/server/Spells/Mage/Enchanter/Coercer/SpellCurse.lua @@ -0,0 +1,27 @@ +--[[ + Script Name : Spells/Mage/Enchanter/Coercer/SpellCurse.lua + Script Author : John Adams + Script Date : 2013.08.11 08:08:59 + Script Purpose : + : +--]] + +function cast(Caster, Target) + -- code to cast the spell + Say(Caster, "Whoops! Guess this is not implemented yet!") + +-- Info from spell_display_effects (remove from script when done) +-- When damaged with a spell this spell will cast Lash on target. +-- Inflicts 194 - 238 mental damage on target +-- Grants a total of 3 triggers of the spell. + +end + +function tick(Caster, Target) + -- code to process each call_frequency (tick) set in spell_tiers +end + +function remove(Caster, Target) + -- code to remove the spell +end + diff --git a/server/Spells/Mage/Enchanter/Coercer/Stupefy.lua b/server/Spells/Mage/Enchanter/Coercer/Stupefy.lua new file mode 100644 index 000000000..04c2c0960 --- /dev/null +++ b/server/Spells/Mage/Enchanter/Coercer/Stupefy.lua @@ -0,0 +1,19 @@ +--[[ + Script Name : Spells/Mage/Enchanter/Coercer/Stupefy.lua + Script Author : Jabantiz + Script Date : 2014.03.14 08:03:33 + Script Purpose : + : +--]] + +function cast(Caster, Target) + -- Stuns target encounter + AddControlEffect(Target, 4) + + -- Epic targets gain an immunity to Stun effects of 12.4 seconds and duration is reduced to 1.4 seconds. + -- Resistibility increases against targets higher than level 29. +end + +function remove(Caster, Target) + RemoveControlEffect(Target, 4) +end diff --git a/server/Spells/Mage/Enchanter/Coercer/Unveil.lua b/server/Spells/Mage/Enchanter/Coercer/Unveil.lua new file mode 100644 index 000000000..c8903b404 --- /dev/null +++ b/server/Spells/Mage/Enchanter/Coercer/Unveil.lua @@ -0,0 +1,26 @@ +--[[ + Script Name : Spells/Mage/Enchanter/Coercer/Unveil.lua + Script Author : John Adams + Script Date : 2013.08.11 08:08:58 + Script Purpose : + : +--]] + +function cast(Caster, Target) + -- code to cast the spell + Say(Caster, "Whoops! Guess this is not implemented yet!") + +-- Info from spell_display_effects (remove from script when done) +-- Grants Ultravision to group members (AE) +-- Grants See Invisibility to group members (AE) + +end + +function tick(Caster, Target) + -- code to process each call_frequency (tick) set in spell_tiers +end + +function remove(Caster, Target) + -- code to remove the spell +end + diff --git a/server/Spells/Mage/Enchanter/Coercer/Velocity.lua b/server/Spells/Mage/Enchanter/Coercer/Velocity.lua new file mode 100644 index 000000000..c8efab069 --- /dev/null +++ b/server/Spells/Mage/Enchanter/Coercer/Velocity.lua @@ -0,0 +1,16 @@ +--[[ + Script Name : Spells/Mage/Enchanter/Coercer/Velocity.lua + Script Author : Jabantiz + Script Date : 2014.03.14 08:03:27 + Script Purpose : + : +--]] + +function cast(Caster, Target, BonusAmt) + -- Increases Multi Attack Chance of target by 26.5 + AddSpellBonus(Target, 641, BonusAmt) +end + +function remove(Caster, Target) + RemoveSpellBonus(Target) +end diff --git a/server/Spells/Mage/Enchanter/Illusionist/Aneurysm.lua b/server/Spells/Mage/Enchanter/Illusionist/Aneurysm.lua new file mode 100644 index 000000000..cd48ec3c6 --- /dev/null +++ b/server/Spells/Mage/Enchanter/Illusionist/Aneurysm.lua @@ -0,0 +1,21 @@ +--[[ + Script Name : Spells/Mage/Enchanter/Illusionist/Aneurysm.lua + Script Author : theFoof + Script Date : 2014.3.1 + Script Purpose : + : +--]] + +function cast(Caster, Target, DmgType, DmgLow, DmgHigh) +-- Dazes target +-- Inflicts 65 - 79 mental damage on target +-- Epic targets gain an immunity to Daze effects of 13.5 seconds and duration is reduced to 1.5 seconds. +-- Resistibility increases against targets higher than level 29. + SpellDamage(Target, DmgType, DmgLow, DmgHigh) + AddControlEffect(Target, 3) +end + +function remove(Caster, Target) + RemoveControlEffect(Target, 3) +end + diff --git a/server/Spells/Mage/Enchanter/Illusionist/AspectofGenius.lua b/server/Spells/Mage/Enchanter/Illusionist/AspectofGenius.lua new file mode 100644 index 000000000..d229b3a1c --- /dev/null +++ b/server/Spells/Mage/Enchanter/Illusionist/AspectofGenius.lua @@ -0,0 +1,17 @@ +--[[ + Script Name : Spells/Mage/Enchanter/Illusionist/AspectofGenius.lua + Script Author : theFoof + Script Date : 2014.3.1 + Script Purpose : + : +--]] + +function cast(Caster, Target, Pow, Mit) + AddSpellBonus(Target, 619, Pow) + AddSpellBonus(Target, 203, Mit) +end + +function remove(Caster, Target) + RemoveSpellBonus() +end + diff --git a/server/Spells/Mage/Enchanter/Illusionist/BarrierofIntellect.lua b/server/Spells/Mage/Enchanter/Illusionist/BarrierofIntellect.lua new file mode 100644 index 000000000..a95936c1f --- /dev/null +++ b/server/Spells/Mage/Enchanter/Illusionist/BarrierofIntellect.lua @@ -0,0 +1,29 @@ +--[[ + Script Name : Spells/Mage/Enchanter/Illusionist/BarrierofIntellect.lua + Script Author : John Adams + Script Date : 2013.08.11 08:08:31 + Script Purpose : + : +--]] + +function cast(Caster, Target) + -- code to cast the spell + Say(Caster, "Whoops! Guess this is not implemented yet!") + +-- Info from spell_display_effects (remove from script when done) +-- Mesmerizes targets in Area of Effect +-- If Target is not Epic +-- Decreases Threat to targets in Area of Effect by 694 +-- Dispelled when target takes damage +-- Resistibility increases against targets higher than level 29. + +end + +function tick(Caster, Target) + -- code to process each call_frequency (tick) set in spell_tiers +end + +function remove(Caster, Target) + -- code to remove the spell +end + diff --git a/server/Spells/Mage/Enchanter/Illusionist/Bewilderment.lua b/server/Spells/Mage/Enchanter/Illusionist/Bewilderment.lua new file mode 100644 index 000000000..752d78a00 --- /dev/null +++ b/server/Spells/Mage/Enchanter/Illusionist/Bewilderment.lua @@ -0,0 +1,19 @@ +--[[ + Script Name : Spells/Mage/Enchanter/Illusionist/Bewilderment.lua + Script Author : theFoof + Script Date : 2014.3.1 + Script Purpose : + : +--]] + +function cast(Caster, Target) +-- Stuns target encounter +-- Epic targets gain an immunity to Stun effects of 8.3 seconds and duration is reduced to 0.9 seconds. +-- Resistibility increases against targets higher than level 29. + AddControlEffect(Target, 4) +end + +function remove(Caster, Target) + RemoveControlEffect(Target, 4) +end + diff --git a/server/Spells/Mage/Enchanter/Illusionist/Brainburst.lua b/server/Spells/Mage/Enchanter/Illusionist/Brainburst.lua new file mode 100644 index 000000000..0158853b1 --- /dev/null +++ b/server/Spells/Mage/Enchanter/Illusionist/Brainburst.lua @@ -0,0 +1,23 @@ +--[[ + Script Name : Spells/Mage/Enchanter/Illusionist/Brainburst.lua + Script Author : theFoof + Script Date : 2014.3.1 + Script Purpose : + : +--]] + +function cast(Caster, Target, DDType, DDLow, DDHigh, dotType, dotLow, dotHigh) +-- Applies Migraine on termination. +-- Inflicts 13 - 17 mental damage on target +-- Inflicts 6 - 7 mental damage on target instantly and every 6 seconds + --NOTE: Need to allow spells to be irresistible + SpellDamage(Target, dotType, dotLow, dotHigh) +end + +function tick(Caster, Target, DDType, DDLow, DDHigh, dotType, dotLow, dotHigh) + SpellDamage(Target, DDType, DDLow, DDHigh) +end + +function remove(Caster, Target) +end + diff --git a/server/Spells/Mage/Enchanter/Illusionist/ChromaticShower.lua b/server/Spells/Mage/Enchanter/Illusionist/ChromaticShower.lua new file mode 100644 index 000000000..224b29791 --- /dev/null +++ b/server/Spells/Mage/Enchanter/Illusionist/ChromaticShower.lua @@ -0,0 +1,13 @@ +--[[ + Script Name : Spells/Mage/Enchanter/Illusionist/ChromaticShower.lua + Script Author : neatz09 + Script Date : 2019.10.12 04:10:55 + Script Purpose : + : +--]] + +-- Info from spell_display_effects (remove from script when done) +-- Inflicts 227 - 278 mental damage on target encounter instantly and every second +-- Stifles target encounter +-- Epic targets gain an immunity to Stifle effects of 15.0 seconds and duration is reduced to 1.7 seconds. +-- Resistibility increases against targets higher than level 29. diff --git a/server/Spells/Mage/Enchanter/Illusionist/ChromaticStorm.lua b/server/Spells/Mage/Enchanter/Illusionist/ChromaticStorm.lua new file mode 100644 index 000000000..8d1084f79 --- /dev/null +++ b/server/Spells/Mage/Enchanter/Illusionist/ChromaticStorm.lua @@ -0,0 +1,26 @@ +--[[ + Script Name : Spells/Mage/Enchanter/Illusionist/ChromaticStorm.lua + Script Author : theFoof + Script Date : 2014.3.1 + Script Purpose : + : +--]] + +function cast(Caster, Target, DmgType, DmgLow, DmgHigh) +-- Inflicts X - Y mental damage on target encounter instantly and every 2 seconds +-- Applies Stumble on termination. +-- Interrupts target +-- Interrupts target encounter + + SpellDamage(Target, DmgType, DmgLow, DmgHigh) + Interrupt(Caster) +end + +function tick(Caster, Target) + SpellDamage(Target, DmgType, DmgLow, DmgHigh) +end + +function remove(Caster, Target) + Interrupt(Caster) +end + diff --git a/server/Spells/Mage/Enchanter/Illusionist/Dismay.lua b/server/Spells/Mage/Enchanter/Illusionist/Dismay.lua new file mode 100644 index 000000000..c0dd50b42 --- /dev/null +++ b/server/Spells/Mage/Enchanter/Illusionist/Dismay.lua @@ -0,0 +1,24 @@ +--[[ + Script Name : Spells/Mage/Enchanter/Illusionist/Dismay.lua + Script Author : neatz09 + Script Date : 2019.09.23 05:09:23 + Script Purpose : + : +--]] + +-- Decreases Crushing, Piercing, Slashing and Ranged of target by 20.3 +function cast(Caster, Target, SkillAmt) + AddSkillBonus(Target, GetSkillIDByName("Slashing"), SkillAmt) + AddSkillBonus(Target, GetSkillIDByName("Crushing"), SkillAmt) + AddSkillBonus(Target, GetSkillIDByName("Piercing"), SkillAmt) + AddSkillBonus(Target, GetSkillIDByName("Ranged"), SkillAmt) + +end + + +function remove(Caster, Target) + RemoveSkillBonus(Target) + +end + + diff --git a/server/Spells/Mage/Enchanter/Illusionist/Doppelganger.lua b/server/Spells/Mage/Enchanter/Illusionist/Doppelganger.lua new file mode 100644 index 000000000..5763508d8 --- /dev/null +++ b/server/Spells/Mage/Enchanter/Illusionist/Doppelganger.lua @@ -0,0 +1,25 @@ +--[[ + Script Name : Spells/Mage/Enchanter/Illusionist/Doppelganger.lua + Script Author : John Adams + Script Date : 2013.08.11 08:08:41 + Script Purpose : + : +--]] + +function cast(Caster, Target) + -- code to cast the spell + Say(Caster, "Whoops! Guess this is not implemented yet!") + +-- Info from spell_display_effects (remove from script when done) +-- Summons a limited pet to aid the caster + +end + +function tick(Caster, Target) + -- code to process each call_frequency (tick) set in spell_tiers +end + +function remove(Caster, Target) + -- code to remove the spell +end + diff --git a/server/Spells/Mage/Enchanter/Illusionist/Entrance.lua b/server/Spells/Mage/Enchanter/Illusionist/Entrance.lua new file mode 100644 index 000000000..0f0556cec --- /dev/null +++ b/server/Spells/Mage/Enchanter/Illusionist/Entrance.lua @@ -0,0 +1,14 @@ +--[[ + Script Name : Spells/Mage/Enchanter/Illusionist/Entrance.lua + Script Author : John Adams + Script Date : 2013.11.19 + Script Purpose : +--]] + +function cast(Caster, Target) + AddControlEffect(Target, 1) +end + +function remove(Caster, Target) + RemoveControlEffect(Target, 1) +end diff --git a/server/Spells/Mage/Enchanter/Illusionist/Epiphany.lua b/server/Spells/Mage/Enchanter/Illusionist/Epiphany.lua new file mode 100644 index 000000000..85fb82138 --- /dev/null +++ b/server/Spells/Mage/Enchanter/Illusionist/Epiphany.lua @@ -0,0 +1,16 @@ +--[[ + Script Name : Spells/Mage/Enchanter/Illusionist/Epiphany.lua + Script Author : theFoof + Script Date : 2014.3.1 + Script Purpose : + : +--]] + +function cast(Caster, Target, Buff) + AddSpellBonus(Target, 603, Buff) +end + +function remove(Caster, Target) + RemoveSpellBonus() +end + diff --git a/server/Spells/Mage/Enchanter/Illusionist/ExtractMana.lua b/server/Spells/Mage/Enchanter/Illusionist/ExtractMana.lua new file mode 100644 index 000000000..6e4a8bd86 --- /dev/null +++ b/server/Spells/Mage/Enchanter/Illusionist/ExtractMana.lua @@ -0,0 +1,16 @@ +--[[ + Script Name : Spells/Mage/Enchanter/Illusionist/ExtractMana.lua + Script Author : theFoof + Script Date : 2014.3.1 + Script Purpose : + : +--]] + +function cast(Caster, Target, Pow) + SpellHeal("Power", Pow) +end + +function tick(Caster, Target) + SpellHeal("Power", Pow) +end + diff --git a/server/Spells/Mage/Enchanter/Illusionist/FlashofBrilliance.lua b/server/Spells/Mage/Enchanter/Illusionist/FlashofBrilliance.lua new file mode 100644 index 000000000..5a819b51a --- /dev/null +++ b/server/Spells/Mage/Enchanter/Illusionist/FlashofBrilliance.lua @@ -0,0 +1,28 @@ +--[[ + Script Name : Spells/Mage/Enchanter/Illusionist/FlashofBrilliance.lua + Script Author : neatz09 + Script Date : 2019.09.23 05:09:45 + Script Purpose : + : +--]] + + +function cast(Caster, Target, Int, SkillAmt) +-- Increases INT of group members (AE) by 35.1 + AddSpellBonus(Target, 4, Int) + +-- Increases Focus, Disruption, Subjugation, Ministration and Ordination of group members (AE) by 13.5 + AddSkillBonus(Target, GetSkillIDByName("Disruption"), SkillAmt) + AddSkillBonus(Target, GetSkillIDByName("Subjugation"), SkillAmt) + AddSkillBonus(Target, GetSkillIDByName("Ministration"), SkillAmt) + AddSkillBonus(Target, GetSkillIDByName("Ordination"), SkillAmt) + +end + + +function remove(Caster, Target, Int, SkillAmt) + RemoveSpellBonus(Target) + RemoveSkillBonus(Target) + + +end diff --git a/server/Spells/Mage/Enchanter/Illusionist/IllusoryAllies.lua b/server/Spells/Mage/Enchanter/Illusionist/IllusoryAllies.lua new file mode 100644 index 000000000..8d06f773c --- /dev/null +++ b/server/Spells/Mage/Enchanter/Illusionist/IllusoryAllies.lua @@ -0,0 +1,28 @@ +--[[ + Script Name : Spells/Mage/Enchanter/Illusionist/IllusoryAllies.lua + Script Author : John Adams + Script Date : 2013.08.11 08:08:18 + Script Purpose : + : +--]] + +function cast(Caster, Target) + -- code to cast the spell + Say(Caster, "Whoops! Guess this is not implemented yet!") + +-- Info from spell_display_effects (remove from script when done) +-- Summons 2 limited pets to aid the caster +-- Applies Memory Wipe on termination. Lasts for 1.0 second. +-- Wipes most of the target's memory of aggression +-- Summons 4 limited pets to aid the caster + +end + +function tick(Caster, Target) + -- code to process each call_frequency (tick) set in spell_tiers +end + +function remove(Caster, Target) + -- code to remove the spell +end + diff --git a/server/Spells/Mage/Enchanter/Illusionist/IllusoryMask.lua b/server/Spells/Mage/Enchanter/Illusionist/IllusoryMask.lua new file mode 100644 index 000000000..83dab1630 --- /dev/null +++ b/server/Spells/Mage/Enchanter/Illusionist/IllusoryMask.lua @@ -0,0 +1,21 @@ +--[[ + Script Name : Spells/Mage/Enchanter/Illusionist/IllusoryMask.lua + Script Author : neatz09 + Script Date : 2019.10.12 04:10:46 + Script Purpose : + : +--]] + +-- Grants invisibility to group members (AE) +-- Suspends group members (AE)'s movement speed enhancements +-- Dispelled when target takes damage +-- This effect cancels during combat + +function cast(Caster, Target) +Stealth(2, Target) + Say(Caster, "Suspends group members (AE)'s movement speed enhancements Not Implemented") +end + +function remove(Caster, Target) +RemoveInvis(2) +end diff --git a/server/Spells/Mage/Enchanter/Illusionist/Lockdown.lua b/server/Spells/Mage/Enchanter/Illusionist/Lockdown.lua new file mode 100644 index 000000000..7b35fb253 --- /dev/null +++ b/server/Spells/Mage/Enchanter/Illusionist/Lockdown.lua @@ -0,0 +1,53 @@ +--[[ + Script Name : Spells/Mage/Enchanter/Illusionist/Lockdown.lua + Script Author : Cynnar + Script Date : 2016.28.09 + Script Purpose : + : +--]] + +function cast(Caster, Target) + -- Roots target + SetSpeedMultiplier(Target, 0) + + -- Applies Stifle. Lasts for 4.0 seconds. + -- Stifles target + AddControlEffect(Target, 2) + AddSpellTimer(4000, "RemoveStifle") + + -- 100% chance to dispel when target takes damage + AddProc(Target, 2, 100.0) + +-- Blurs vision of target +-- Dispelled when target takes damage +-- Epic targets gain an immunity to Stifle effects of 12.0 seconds and duration is reduced to 1.3 seconds. +-- Resistibility increases against targets higher than level 34. +-- Epic targets gain an immunity to Root effects of 54.0 seconds and duration is reduced to 6.0 seconds. +-- Resistibility increases against targets higher than level 29. + +end + +function RemoveStifle(Caster, Target) + RemoveControlEffect(Target, 2) +end + +function proc(Caster, Target, Type) + if Type == 2 then + -- Dispell stifle when target takes damage + RemoveControlEffect(Target, 2) + -- 5% chance to dispel root when target takes damage + if math.random(1, 100) <= 5 then + CancelSpell() + end + end +end + +function tick(Caster, Target) + -- code to process each call_frequency (tick) set in spell_tiers +end + +function remove(Caster, Target) + -- code to remove the spell + SetSpeedMultiplier(Target, 1.0) +end + diff --git a/server/Spells/Mage/Enchanter/Illusionist/Manatap.lua b/server/Spells/Mage/Enchanter/Illusionist/Manatap.lua new file mode 100644 index 000000000..15cabb617 --- /dev/null +++ b/server/Spells/Mage/Enchanter/Illusionist/Manatap.lua @@ -0,0 +1,34 @@ +--[[ + Script Name : Spells/Mage/Enchanter/Illusionist/Manatap.lua + Script Author : neatz09 + Script Date : 2019.10.12 03:10:32 + Script Purpose : + : +--]] + +function cast(Caster, Target, HealType, EncPwr, GrpPwr) +SpellHeal("Power", EncPwr) +local group = GetGroup(Caster) +if group == nil then + SpellHeal("Power", GrpPwr, 0, Caster) +else + for k,v in ipairs(GetGroup(Spawn)) do + SpellHeal("Power", GrpPwr, 0, v) + end +end +end + + +function tick(Caster, Target, HealType, EncPwr, GrpPwr) +-- Decreases power of target encounter by 63 instantly and every 4 seconds +-- Increases power of group members (AE) by 47 instantly and every 4 seconds +SpellHeal("Power", EncPower) +local group = GetGroup(Caster) +if group == nil then + SpellHeal("Power", GrpPwr, 0, Caster) +else + for k,v in ipairs(GetGroup(Spawn)) do + SpellHeal("Power", GrpPwr, 0, v) + end +end +end \ No newline at end of file diff --git a/server/Spells/Mage/Enchanter/Illusionist/Migraine.lua b/server/Spells/Mage/Enchanter/Illusionist/Migraine.lua new file mode 100644 index 000000000..23941dd18 --- /dev/null +++ b/server/Spells/Mage/Enchanter/Illusionist/Migraine.lua @@ -0,0 +1,31 @@ +--[[ + Script Name : dot.lua + Script Purpose : Generic Damage Over Time script + Script Author : John Adams + Script Date : 2008.12.04 +--]] + +function cast(Caster, Target, DOTType, MinDOTVal, MaxDOTVal, EffectType, DDType, MinDDVal, MaxDDVal) + + -- NoDD is a 0/1 bool flag to perform the remove() component + -- DOT component (instant damage) + if MaxDOTVal ~= nil and MinDOTVal < MaxDOTVal then + SpellDamage(Target, DOTType, math.random(MinDOTVal, MaxDOTVal)) + else + SpellDamage(Target, DOTType, MinDOTVal) + end + +end + +function tick(Caster, Target, DOTType, MinDOTVal, MaxDOTVal, EffectType, DDType, MinDDVal, MaxDDVal) + + if MaxDOTVal ~= nil and MinDOTVal < MaxDOTVal then + SpellDamage(Target, DOTType, math.random(MinDOTVal, MaxDOTVal)) + else + SpellDamage(Target, DOTType, MinDOTVal) + end +end + +function remove(Caster, Target, DOTType, MinDOTVal, MaxDOTVal, EffectType, DDType, MinDDVal, MaxDDVal) + SpellDamage(Target, DOTType, math.random(8, 14)) +end diff --git a/server/Spells/Mage/Enchanter/Illusionist/MirageMastery.lua b/server/Spells/Mage/Enchanter/Illusionist/MirageMastery.lua new file mode 100644 index 000000000..82682982f --- /dev/null +++ b/server/Spells/Mage/Enchanter/Illusionist/MirageMastery.lua @@ -0,0 +1,32 @@ +--[[ + Script Name : Spells/Mage/Enchanter/Illusionist/MirageMastery.lua + Script Author : John Adams + Script Date : 2013.08.11 08:08:43 + Script Purpose : + : +--]] + +function cast(Caster, Target) + -- code to cast the spell + Say(Caster, "Whoops! Guess this is not implemented yet!") + +-- Info from spell_display_effects (remove from script when done) +-- Increases the max health of the illusionist's Personae Reflection by 25% +-- On a hostile spell cast this spell has a 12% chance to cast Soothing Mind on the group. Lasts for 15.0 seconds. +-- On any combat or spell hit this spell will cast Soothing Mind on target. Lasts for 15.0 seconds. +-- Increases power of target by 360 +-- Grants a total of 1 trigger of the spell. +-- Cannot be modified except by direct means +-- Changes Rapidity to a group buff and adds 10% double attack. +-- Cannot be modified except by direct means + +end + +function tick(Caster, Target) + -- code to process each call_frequency (tick) set in spell_tiers +end + +function remove(Caster, Target) + -- code to remove the spell +end + diff --git a/server/Spells/Mage/Enchanter/Illusionist/Nightmare.lua b/server/Spells/Mage/Enchanter/Illusionist/Nightmare.lua new file mode 100644 index 000000000..a2e7fdad7 --- /dev/null +++ b/server/Spells/Mage/Enchanter/Illusionist/Nightmare.lua @@ -0,0 +1,23 @@ +--[[ + Script Name : Spells/Mage/Enchanter/Illusionist/Nightmare.lua + Script Author : theFoof + Script Date : 2014.3.1 + Script Purpose : + : +--]] + +function cast(Caster, Target, DmgType, DmgLow, DmgHigh, Debuff) +-- Decreases Mitigation of target vs arcane damage by 141 +-- Inflicts 21 - 25 mental damage on target instantly and every 6 seconds + SpellDamage(Target, DmgType, DmgLow, DmgHigh) + AddSpellBonus(Target, 203, Debuff) +end + +function tick(Caster, Target, DmgType, DmgLow, DmgHigh, Debuff) + SpellDamage(Target, DmgType, DmgLow, DmgHigh) +end + +function remove(Caster, Target) + RemoveSpellBonus() +end + diff --git a/server/Spells/Mage/Enchanter/Illusionist/Paranoia.lua b/server/Spells/Mage/Enchanter/Illusionist/Paranoia.lua new file mode 100644 index 000000000..a61e1b489 --- /dev/null +++ b/server/Spells/Mage/Enchanter/Illusionist/Paranoia.lua @@ -0,0 +1,23 @@ +--[[ + Script Name : Spells/Mage/Enchanter/Illusionist/Paranoia.lua + Script Author : Neatz09 + Script Date : 8-12-19 + Script Purpose : + : +--]] + +function cast(Caster, Target, DmgType, DmgLow, DmgHigh) +-- Inflicts X - Y mental damage on target +-- Stuns target +-- Epic targets gain an immunity to Stun effects of 16.5 seconds and duration is reduced to 1.8 seconds. +-- Resistibility increases against targets higher than level 29. + Say(Caster, "Epic Immunity and Resistability not implemented yet") + + AddControlEffect(Target, 4) + SpellDamage(Target, DmgType, DmgLow, DmgHigh) +end + +function remove(Caster, Target) + RemoveControlEffect(Target, 4) +end + diff --git a/server/Spells/Mage/Enchanter/Illusionist/PersonaeReflection.lua b/server/Spells/Mage/Enchanter/Illusionist/PersonaeReflection.lua new file mode 100644 index 000000000..a6af51106 --- /dev/null +++ b/server/Spells/Mage/Enchanter/Illusionist/PersonaeReflection.lua @@ -0,0 +1,10 @@ +--[[ + Script Name : Spells/Mage/Enchanter/Illusionist/PersonaeReflection.lua + Script Author : neatz09 + Script Date : 2019.10.19 08:10:51 + Script Purpose : + : +--]] + +-- Info from spell_display_effects (remove from script when done) +-- Summons a pet Illusion Ally diff --git a/server/Spells/Mage/Enchanter/Illusionist/PhantasmalAwe.lua b/server/Spells/Mage/Enchanter/Illusionist/PhantasmalAwe.lua new file mode 100644 index 000000000..2d4c7a7c5 --- /dev/null +++ b/server/Spells/Mage/Enchanter/Illusionist/PhantasmalAwe.lua @@ -0,0 +1,14 @@ +--[[ + Script Name : Spells/Mage/Enchanter/Illusionist/PhantasmalAwe.lua + Script Author : neatz09 + Script Date : 2019.10.19 08:10:10 + Script Purpose : + : +--]] + +-- Info from spell_display_effects (remove from script when done) +-- Mesmerizes target encounter +-- Prevents AOE (except when direct) +-- Dispelled when target takes damage +-- Epic targets gain an immunity to Mesmerize effects of 27.0 seconds and duration is reduced to 3.0 seconds. +-- Resistibility increases against targets higher than level 29. diff --git a/server/Spells/Mage/Enchanter/Illusionist/PhantasmalBlast.lua b/server/Spells/Mage/Enchanter/Illusionist/PhantasmalBlast.lua new file mode 100644 index 000000000..d1d72cadb --- /dev/null +++ b/server/Spells/Mage/Enchanter/Illusionist/PhantasmalBlast.lua @@ -0,0 +1,55 @@ +--[[ + Script Name : dd_dot.lua + Script Purpose : Generic damage + 1 effect script + Script Author : John Adams + Script Date : 2008.12.02 +--]] + +function cast(Caster, Target, DDType, MinDDVal, MaxDDVal, EffectType, DamageType, MinEffectVal, MaxEffectVal) + + -- DD component + if MaxDDVal ~= nil and MinDDVal < MaxDDVal then + dmgAmount = math.random(MinDDVal, MaxDDVal) + SpellDamage(Target, DDType, dmgAmount) + --AddHate(Caster, Target, dmgAmount) + else + SpellDamage(Target, DDType, MinDDVal) + --AddHate(Caster, Target, MinDDVal) + end + + -- Effect component - only process this code if there is an EffectType param + if EffectType ~= nil then + + -- Determine if there is a range to effect values + if MaxEffectVal ~= nil and MinEffectVal < MaxEffectVal then + EffectValue = math.random(MinEffectVal, MaxEffectVal) + else + EffectValue = MinEffectVal + end + + -- Determine EffectType - either a DamageType or a String value passed as param 4 + if EffectType == "heal" then + ModifyHP(Caster, EffectValue) + else + SpellDamage(Target, DamageType, EffectValue) + end + + end + +end + +function tick(Caster, Target, DDType, MinDDVal, MaxDDVal, EffectType, DamageType, MinEffectVal, MaxEffectVal) + + if MaxEffectVal ~= nil and MinEffectVal < MaxEffectVal then + EffectValue = math.random(MinEffectVal, MaxEffectVal) + else + EffectValue = MinEffectVal + end + + if EffectType == "heal" then + ModifyHP(Caster, EffectValue) + else + SpellDamage(Target, DamageType, EffectValue) + end + +end diff --git a/server/Spells/Mage/Enchanter/Illusionist/Phase.lua b/server/Spells/Mage/Enchanter/Illusionist/Phase.lua new file mode 100644 index 000000000..1913fe9c0 --- /dev/null +++ b/server/Spells/Mage/Enchanter/Illusionist/Phase.lua @@ -0,0 +1,27 @@ +--[[ + Script Name : Spells/Mage/Enchanter/Illusionist/Phase.lua + Script Author : John Adams + Script Date : 2013.08.11 08:08:32 + Script Purpose : + : +--]] + +function cast(Caster, Target) + -- code to cast the spell + Say(Caster, "Whoops! Guess this is not implemented yet!") + +-- Info from spell_display_effects (remove from script when done) +-- Teleports target to a random location within 5 meters. +-- If Target is not Epic +-- Wipes almost all of target's memory of aggression towards their current target. + +end + +function tick(Caster, Target) + -- code to process each call_frequency (tick) set in spell_tiers +end + +function remove(Caster, Target) + -- code to remove the spell +end + diff --git a/server/Spells/Mage/Enchanter/Illusionist/PrismaticChaos.lua b/server/Spells/Mage/Enchanter/Illusionist/PrismaticChaos.lua new file mode 100644 index 000000000..51a2e9e7c --- /dev/null +++ b/server/Spells/Mage/Enchanter/Illusionist/PrismaticChaos.lua @@ -0,0 +1,26 @@ +--[[ + Script Name : Spells/Mage/Enchanter/Illusionist/PrismaticChaos.lua + Script Author : theFoof + Script Date : 2014.3.9 + Script Purpose : + : +--]] + +function cast(Caster, Target) +-- On a combat hit this spell will cast Prismatic Shock on target of attack. +-- Inflicts 172 - 210 mental damage on target +-- Grants a total of 3 triggers of the spell. + + SetSpellTriggerCount(3, 1) + AddProc(Target, 3, 100) +end + +function proc(Caster, Target, ProcType, DDType, DDLow, DDHigh) + ProcDamage(Caster, Target, "Prismatic Shock", DDType, DDLow, DDHigh) + RemoveTriggerFromSpell() +end + +function remove(Caster, Target) + RemoveProc(Target) +end + diff --git a/server/Spells/Mage/Enchanter/Illusionist/Rapidity.lua b/server/Spells/Mage/Enchanter/Illusionist/Rapidity.lua new file mode 100644 index 000000000..4e528d496 --- /dev/null +++ b/server/Spells/Mage/Enchanter/Illusionist/Rapidity.lua @@ -0,0 +1,20 @@ +--[[ + Script Name : Spells/Mage/Enchanter/Illusionist/Rapidity.lua + Script Author : neatz09 + Script Date : 2019.09.23 04:09:35 + Script Purpose : + : +--]] + +-- Increases Haste of target by 23.0 + +function cast(Caster, Target, Haste) + AddSpellBonus(Target, 617, Haste) + +end + + +function remove(Caster, Target) + RemoveSpellBonus(Target) + +end diff --git a/server/Spells/Mage/Enchanter/Illusionist/Regalia.lua b/server/Spells/Mage/Enchanter/Illusionist/Regalia.lua new file mode 100644 index 000000000..7c0e1b47a --- /dev/null +++ b/server/Spells/Mage/Enchanter/Illusionist/Regalia.lua @@ -0,0 +1,29 @@ +--[[ + Script Name : Spells/Mage/Enchanter/Illusionist/Regalia.lua + Script Author : John Adams + Script Date : 2013.08.11 08:08:35 + Script Purpose : + : +--]] + +function cast(Caster, Target) + -- code to cast the spell + Say(Caster, "Whoops! Guess this is not implemented yet!") + +-- Info from spell_display_effects (remove from script when done) +-- Mesmerizes target +-- Prevents AOE (except when direct) +-- Dispelled when target takes damage +-- Epic targets gain an immunity to Mesmerize effects of 22.5 seconds and duration is reduced to 2.5 seconds. +-- Resistibility increases against targets higher than level 29. + +end + +function tick(Caster, Target) + -- code to process each call_frequency (tick) set in spell_tiers +end + +function remove(Caster, Target) + -- code to remove the spell +end + diff --git a/server/Spells/Mage/Enchanter/Illusionist/RuneofThought.lua b/server/Spells/Mage/Enchanter/Illusionist/RuneofThought.lua new file mode 100644 index 000000000..763ee305f --- /dev/null +++ b/server/Spells/Mage/Enchanter/Illusionist/RuneofThought.lua @@ -0,0 +1,20 @@ +--[[ + Script Name : Spells/Mage/Enchanter/Illusionist/RuneofThought.lua + Script Author : theFoof + Script Date : 2014.3.1 + Script Purpose : + : +--]] + +function cast(Caster, Target, Stat, Mit) + AddSpellBonus(Target, 3, Stat) + AddSpellBonus(Target, 4, Stat) + AddSpellBonus(Target, 201, Mit) + AddSpellBonus(Target, 202, Mit) + AddSpellBonus(Target, 203, Mit) +end + +function remove(Caster, Target) + RemoveSpellBonus() +end + diff --git a/server/Spells/Mage/Enchanter/Illusionist/Savante.lua b/server/Spells/Mage/Enchanter/Illusionist/Savante.lua new file mode 100644 index 000000000..fe06132ac --- /dev/null +++ b/server/Spells/Mage/Enchanter/Illusionist/Savante.lua @@ -0,0 +1,24 @@ +--[[ + Script Name : Spells/Mage/Enchanter/Illusionist/Savante.lua + Script Author : John Adams + Script Date : 2013.08.11 08:08:58 + Script Purpose : + : +--]] + +function cast(Caster, Target) + -- code to cast the spell + Say(Caster, "Whoops! Guess this is not implemented yet!") + +-- Info from spell_display_effects (remove from script when done) + +end + +function tick(Caster, Target) + -- code to process each call_frequency (tick) set in spell_tiers +end + +function remove(Caster, Target) + -- code to remove the spell +end + diff --git a/server/Spells/Mage/Enchanter/Illusionist/ShiftVision.lua b/server/Spells/Mage/Enchanter/Illusionist/ShiftVision.lua new file mode 100644 index 000000000..279b90177 --- /dev/null +++ b/server/Spells/Mage/Enchanter/Illusionist/ShiftVision.lua @@ -0,0 +1,26 @@ +--[[ + Script Name : Spells/Mage/Enchanter/Illusionist/ShiftVision.lua + Script Author : John Adams + Script Date : 2013.08.11 08:08:51 + Script Purpose : + : +--]] + +function cast(Caster, Target) + -- code to cast the spell + Say(Caster, "Whoops! Guess this is not implemented yet!") + +-- Info from spell_display_effects (remove from script when done) +-- Grants See Invisibility to group members (AE) +-- Grants Infravision to group members (AE) + +end + +function tick(Caster, Target) + -- code to process each call_frequency (tick) set in spell_tiers +end + +function remove(Caster, Target) + -- code to remove the spell +end + diff --git a/server/Spells/Mage/Enchanter/Illusionist/Speechless.lua b/server/Spells/Mage/Enchanter/Illusionist/Speechless.lua new file mode 100644 index 000000000..e099b8be2 --- /dev/null +++ b/server/Spells/Mage/Enchanter/Illusionist/Speechless.lua @@ -0,0 +1,21 @@ +--[[ + Script Name : Spells/Mage/Enchanter/Illusionist/Speechless.lua + Script Author : theFoof + Script Date : 2014.3.1 + Script Purpose : + : +--]] + +function cast(Caster, Target, DmgType, DmgLow, DmgHigh) +-- Inflicts 130 - 159 mental damage on target +-- Stifles target +-- Epic targets gain an immunity to Stifle effects of 18.0 seconds and duration is reduced to 2.0 seconds. +-- Resistibility increases against targets higher than level 29. + SpellDamage(Target, DmgType, DmgLow, DmgHigh) + AddControlEffect(Target, 2) +end + +function remove(Caster, Target) + RemoveControlEffect(Target, 2) +end + diff --git a/server/Spells/Mage/Enchanter/Illusionist/Spellshield.lua b/server/Spells/Mage/Enchanter/Illusionist/Spellshield.lua new file mode 100644 index 000000000..b929768e5 --- /dev/null +++ b/server/Spells/Mage/Enchanter/Illusionist/Spellshield.lua @@ -0,0 +1,24 @@ +--[[ + Script Name : Spells/Mage/Enchanter/Illusionist/Spellshield.lua + Script Author : John Adams + Script Date : 2013.08.11 08:08:41 + Script Purpose : + : +--]] + +function cast(Caster, Target) + -- code to cast the spell + Say(Caster, "Whoops! Guess this is not implemented yet!") + +-- Info from spell_display_effects (remove from script when done) + +end + +function tick(Caster, Target) + -- code to process each call_frequency (tick) set in spell_tiers +end + +function remove(Caster, Target) + -- code to remove the spell +end + diff --git a/server/Spells/Mage/Enchanter/Illusionist/StormofColors.lua b/server/Spells/Mage/Enchanter/Illusionist/StormofColors.lua new file mode 100644 index 000000000..977307f18 --- /dev/null +++ b/server/Spells/Mage/Enchanter/Illusionist/StormofColors.lua @@ -0,0 +1,39 @@ +--[[ + Script Name : dot.lua + Script Purpose : Generic Damage Over Time script + Script Author : John Adams + Script Date : 2008.12.04 +--]] + +function cast(Caster, Target, DOTType, MinDOTVal, MaxDOTVal) + + -- DOT component (instant damage) + if MaxDOTVal ~= nil and MinDOTVal < MaxDOTVal then + + SpellDamage(Target, DOTType, math.random(MinDOTVal, MaxDOTVal)) + + else + + SpellDamage(Target, DOTType, MinDOTVal) + + end + +end + +function tick(Caster, Target, DOTType, MinDOTVal, MaxDOTVal) + + if MaxDOTVal ~= nil and MinDOTVal < MaxDOTVal then + + SpellDamage(Target, DOTType, math.random(MinDOTVal, MaxDOTVal)) + + else + + SpellDamage(Target, DOTType, MinDOTVal) + + end + +end + +function remove(Caster, Target, DOTType, MinDOTVal, MaxDOTVal) + +end diff --git a/server/Spells/Mage/Enchanter/Illusionist/Synergism.lua b/server/Spells/Mage/Enchanter/Illusionist/Synergism.lua new file mode 100644 index 000000000..55931b5f7 --- /dev/null +++ b/server/Spells/Mage/Enchanter/Illusionist/Synergism.lua @@ -0,0 +1,28 @@ +--[[ + Script Name : Spells/Mage/Enchanter/Illusionist/Synergism.lua + Script Author : John Adams + Script Date : 2013.08.11 08:08:12 + Script Purpose : + : +--]] + +function cast(Caster, Target) + -- code to cast the spell + Say(Caster, "Whoops! Guess this is not implemented yet!") + +-- Info from spell_display_effects (remove from script when done) +-- On a hostile spell hit this spell has a 33% chance to cast Dynamism on target of spell. +-- Decreases Threat to target by 247 - 302 +-- If profession other than Fighter +-- Inflicts 111 - 136 mental damage on target + +end + +function tick(Caster, Target) + -- code to process each call_frequency (tick) set in spell_tiers +end + +function remove(Caster, Target) + -- code to remove the spell +end + diff --git a/server/Spells/Mage/Enchanter/Illusionist/Theorems.lua b/server/Spells/Mage/Enchanter/Illusionist/Theorems.lua new file mode 100644 index 000000000..9ecb83db4 --- /dev/null +++ b/server/Spells/Mage/Enchanter/Illusionist/Theorems.lua @@ -0,0 +1,12 @@ +--[[ + Script Name : Spells/Mage/Enchanter/Illusionist/Theorems.lua + Script Author : neatz09 + Script Date : 2019.10.12 04:10:42 + Script Purpose : + : +--]] + +-- Info from spell_display_effects (remove from script when done) +-- When damaged with a spell this spell will cast Theorems on target. +-- Inflicts 555 - 678 mental damage on target +-- Grants a total of 3 triggers of the spell. diff --git a/server/Spells/Mage/Enchanter/Illusionist/UltravioletBeam.lua b/server/Spells/Mage/Enchanter/Illusionist/UltravioletBeam.lua new file mode 100644 index 000000000..24e7dda46 --- /dev/null +++ b/server/Spells/Mage/Enchanter/Illusionist/UltravioletBeam.lua @@ -0,0 +1,16 @@ +--[[ + Script Name : Spells/Mage/Enchanter/Illusionist/UltravioletBeam.lua + Script Author : John Adams + Script Date : 2013.11.19 + Script Purpose : +--]] + +function cast(Caster, Target, DDType, MinDDVal, MaxDDVal) + + if MaxDDVal ~= nil and MinDDVal < MaxDDVal then + SpellDamage(Target, DDType, math.random(MinDDVal, MaxDDVal)) + else + SpellDamage(Target, DDType, MinDDVal) + end + +end diff --git a/server/Spells/Mage/Enchanter/Illusionist/UltravioletBeamX.lua b/server/Spells/Mage/Enchanter/Illusionist/UltravioletBeamX.lua new file mode 100644 index 000000000..ae5addf21 --- /dev/null +++ b/server/Spells/Mage/Enchanter/Illusionist/UltravioletBeamX.lua @@ -0,0 +1,25 @@ +--[[ + Script Name : Spells/Mage/Enchanter/Illusionist/UltravioletBeamX.lua + Script Author : John Adams + Script Date : 2013.08.11 08:08:58 + Script Purpose : + : +--]] + +function cast(Caster, Target) + -- code to cast the spell + Say(Caster, "Whoops! Guess this is not implemented yet!") + +-- Info from spell_display_effects (remove from script when done) +-- Inflicts 520 - 704 mental damage on target + +end + +function tick(Caster, Target) + -- code to process each call_frequency (tick) set in spell_tiers +end + +function remove(Caster, Target) + -- code to remove the spell +end + diff --git a/server/Spells/Mage/Enchanter/ManaCloak.lua b/server/Spells/Mage/Enchanter/ManaCloak.lua new file mode 100644 index 000000000..01a1047ec --- /dev/null +++ b/server/Spells/Mage/Enchanter/ManaCloak.lua @@ -0,0 +1,24 @@ +--[[ + Script Name : Spells/Mage/Enchanter/ManaCloak.lua + Script Author : John Adams + Script Date : 2013.08.11 08:08:34 + Script Purpose : + : +--]] + +function cast(Caster, Target) + -- code to cast the spell + Say(Caster, "Whoops! Guess this is not implemented yet!") + +-- Info from spell_display_effects (remove from script when done) + +end + +function tick(Caster, Target) + -- code to process each call_frequency (tick) set in spell_tiers +end + +function remove(Caster, Target) + -- code to remove the spell +end + diff --git a/server/Spells/Mage/Enchanter/VeiloftheUnseen.lua b/server/Spells/Mage/Enchanter/VeiloftheUnseen.lua new file mode 100644 index 000000000..a6c1d0023 --- /dev/null +++ b/server/Spells/Mage/Enchanter/VeiloftheUnseen.lua @@ -0,0 +1,26 @@ +--[[ + Script Name : Spells/Mage/Enchanter/VeiloftheUnseen.lua + Script Author : theFoof + Script Date : 2014.1.16 + Script Purpose : + : +--]] + +function precast(Caster) + return not IsInCombat(Caster) +end + +function cast(Caster, Target) +-- Prevents AOE (except when direct) -- need support for this +-- Grants invisibility to target +-- Suspends target's movement speed enhancements +-- Dispelled when target takes damage +-- This effect cancels during combat + + Stealth(2) +end + +function remove(Caster, Target) + RemoveInvis() +end + diff --git a/server/Spells/Mage/LightningBurst.lua b/server/Spells/Mage/LightningBurst.lua new file mode 100644 index 000000000..95a52c804 --- /dev/null +++ b/server/Spells/Mage/LightningBurst.lua @@ -0,0 +1,18 @@ +--[[ + Script Name : Spells/Mage/LightningBurst.lua + Script Author : Ememjr + Script Date : 2017.11.11 03:11:14 + Script Purpose : + : +--]] + +-- Info from spell_display_effects (remove from script when done) +-- Inflicts 15 - 20 magic damage on target + +function cast(Caster, Target, DmgType, MinVal, MaxVal) + if MaxVal ~= nil and MinVal < MaxVal then + SpellDamage(Target, DmgType, math.random(MinVal, MaxVal)) + else + SpellDamage(Target, DmgType, MinVal) + end +end diff --git a/server/Spells/Mage/MagisShielding.lua b/server/Spells/Mage/MagisShielding.lua new file mode 100644 index 000000000..290fb287f --- /dev/null +++ b/server/Spells/Mage/MagisShielding.lua @@ -0,0 +1,24 @@ +--[[ + Script Name : Spells/Mage/MagisShielding.lua + Script Author : Zcoretri + Script Date : 2013.07.12 12:28:39 + Script Purpose : + : +--]] + +function cast(Caster, Target, StatBonus, SkillBonus, PhysMitBonus, MitBonus) + AddSpellBonus(Target, 1, StatBonus) -- STA + AddSkillBonus(Target, GetSkillIDByName("Focus"), SkillBonus) + AddSkillBonus(Target, GetSkillIDByName("Defense"), SkillBonus) + AddSpellBonus(Target, 200, PhysMitBonus) -- vs Physical Damage + AddSpellBonus(Target, 201, MitBonus) -- vs Elemental + AddSpellBonus(Target, 202, MitBonus) -- vs Noxiuos + AddSpellBonus(Target, 203, MitBonus) -- vs Arcane +end + +function remove(Caster, Target) + RemoveSpellBonus(Target) + RemoveSkillBonus(Target) +end + + diff --git a/server/Spells/Mage/MastersStrike.lua b/server/Spells/Mage/MastersStrike.lua new file mode 100644 index 000000000..d1d72cadb --- /dev/null +++ b/server/Spells/Mage/MastersStrike.lua @@ -0,0 +1,55 @@ +--[[ + Script Name : dd_dot.lua + Script Purpose : Generic damage + 1 effect script + Script Author : John Adams + Script Date : 2008.12.02 +--]] + +function cast(Caster, Target, DDType, MinDDVal, MaxDDVal, EffectType, DamageType, MinEffectVal, MaxEffectVal) + + -- DD component + if MaxDDVal ~= nil and MinDDVal < MaxDDVal then + dmgAmount = math.random(MinDDVal, MaxDDVal) + SpellDamage(Target, DDType, dmgAmount) + --AddHate(Caster, Target, dmgAmount) + else + SpellDamage(Target, DDType, MinDDVal) + --AddHate(Caster, Target, MinDDVal) + end + + -- Effect component - only process this code if there is an EffectType param + if EffectType ~= nil then + + -- Determine if there is a range to effect values + if MaxEffectVal ~= nil and MinEffectVal < MaxEffectVal then + EffectValue = math.random(MinEffectVal, MaxEffectVal) + else + EffectValue = MinEffectVal + end + + -- Determine EffectType - either a DamageType or a String value passed as param 4 + if EffectType == "heal" then + ModifyHP(Caster, EffectValue) + else + SpellDamage(Target, DamageType, EffectValue) + end + + end + +end + +function tick(Caster, Target, DDType, MinDDVal, MaxDDVal, EffectType, DamageType, MinEffectVal, MaxEffectVal) + + if MaxEffectVal ~= nil and MinEffectVal < MaxEffectVal then + EffectValue = math.random(MinEffectVal, MaxEffectVal) + else + EffectValue = MinEffectVal + end + + if EffectType == "heal" then + ModifyHP(Caster, EffectValue) + else + SpellDamage(Target, DamageType, EffectValue) + end + +end diff --git a/server/Spells/Mage/SeeInvisibility.lua b/server/Spells/Mage/SeeInvisibility.lua new file mode 100644 index 000000000..927f6f6a9 --- /dev/null +++ b/server/Spells/Mage/SeeInvisibility.lua @@ -0,0 +1,25 @@ +--[[ + Script Name : Spells/Mage/SeeInvisibility.lua + Script Author : John Adams + Script Date : 2013.08.11 02:08:42 + Script Purpose : + : +--]] + +function cast(Caster, Target) + -- code to cast the spell + Say(Caster, "Whoops! Guess this is not implemented yet!") + +-- Info from spell_display_effects (remove from script when done) +-- Grants See Invisibility to target + +end + +function tick(Caster, Target) + -- code to process each call_frequency (tick) set in spell_tiers +end + +function remove(Caster, Target) + -- code to remove the spell +end + diff --git a/server/Spells/Mage/ShrinkServant.lua b/server/Spells/Mage/ShrinkServant.lua new file mode 100644 index 000000000..05f0cd706 --- /dev/null +++ b/server/Spells/Mage/ShrinkServant.lua @@ -0,0 +1,26 @@ +--[[ + Script Name : Spells/Mage/ShrinkServant.lua + Script Author : John Adams + Script Date : 2013.08.11 02:08:43 + Script Purpose : + : +--]] + +function cast(Caster, Target) + -- code to cast the spell + Say(Caster, "Whoops! Guess this is not implemented yet!") + +-- Info from spell_display_effects (remove from script when done) +-- Applies Shrink Servant to qualifying pets. +-- Shrinks target by 35.0% + +end + +function tick(Caster, Target) + -- code to process each call_frequency (tick) set in spell_tiers +end + +function remove(Caster, Target) + -- code to remove the spell +end + diff --git a/server/Spells/Mage/Sorcerer/SummonAnimatedTome.lua b/server/Spells/Mage/Sorcerer/SummonAnimatedTome.lua new file mode 100644 index 000000000..a2c652026 --- /dev/null +++ b/server/Spells/Mage/Sorcerer/SummonAnimatedTome.lua @@ -0,0 +1,20 @@ +--[[ + Script Name : Spells/Mage/Sorcerer/SummonAnimatedTome.lua + Script Author : Guardian + Script Date : 2012.10.21 08:10:11 + Script Notes : Enter special notes here + : +--]] + +function cast(Caster, Target, PetID) + SummonPet(Caster, PetID) +end + +function tick(Caster, Target, Type, Min, Max) + -- code to process each call_frequency (tick) set in spell_tiers +end + +function remove(Caster, Target, Type, Min, Max) + -- code to remove the spell +end + diff --git a/server/Spells/Mage/Sorcerer/SummonShadows.lua b/server/Spells/Mage/Sorcerer/SummonShadows.lua new file mode 100644 index 000000000..38b34fb28 --- /dev/null +++ b/server/Spells/Mage/Sorcerer/SummonShadows.lua @@ -0,0 +1,24 @@ +--[[ + Script Name : Spells/Mage/Sorcerer/SummonShadows.lua + Script Author : theFoof + Script Date : 2014.01.17 05:01:09 + Script Purpose : + : +--]] + +-- Grants invisibility to target +-- Suspends target's movement speed enhancements +-- Dispelled when target takes damage +-- This effect cancels during combat + +function precast(Caster, Target) + return not IsInCombat(Caster) +end + +function cast(Caster, Target) + Stealth(2) +end + +function remove(Caster, Target) + RemoveInvis() +end \ No newline at end of file diff --git a/server/Spells/Mage/Sorcerer/Warlock/Absolution.lua b/server/Spells/Mage/Sorcerer/Warlock/Absolution.lua new file mode 100644 index 000000000..29a6be394 --- /dev/null +++ b/server/Spells/Mage/Sorcerer/Warlock/Absolution.lua @@ -0,0 +1,16 @@ +--[[ + Script Name : Spells/Mage/Sorcerer/Warlock/Absolution.lua + Script Author : Jabantiz + Script Date : 2014.03.07 07:03:44 + Script Purpose : + : +--]] + +function cast(Caster, Target, DmgType, MinVal, MaxVal) + -- Inflicts 305 - 566 disease damage on target encounter + if MaxVal ~= nil and MinVal < MaxVal then + SpellDamage(Target, DmgType, math.random(MinVal, MaxVal)) + else + SpellDamage(Target, DmgType, MinVal) + end +end diff --git a/server/Spells/Mage/Sorcerer/Warlock/Acid.lua b/server/Spells/Mage/Sorcerer/Warlock/Acid.lua new file mode 100644 index 000000000..4191df4d2 --- /dev/null +++ b/server/Spells/Mage/Sorcerer/Warlock/Acid.lua @@ -0,0 +1,24 @@ +--[[ + Script Name : Spells/Mage/Sorcerer/Warlock/Acid.lua + Script Author : Jabantiz + Script Date : 2014.01.14 05:01:06 + Script Purpose : + : +--]] + +-- Inflicts 3 - 6 poison damage on target instantly and every 3 seconds +function cast(Caster, Target, DoTType, MinVal, MaxVal) + if MaxVal ~= nil and MinVal < MaxVal then + SpellDamage(Target, DoTType, math.random(MinVal, MaxVal)) + else + SpellDamage(Target, DoTType, MinVal) + end +end + +function tick(Caster, Target, DoTType, MinVal, MaxVal) + if MaxVal ~= nil and MinVal < MaxVal then + SpellDamage(Target, DoTType, math.random(MinVal, MaxVal)) + else + SpellDamage(Target, DoTType, MinVal) + end +end diff --git a/server/Spells/Mage/Sorcerer/Warlock/AcidRain.lua b/server/Spells/Mage/Sorcerer/Warlock/AcidRain.lua new file mode 100644 index 000000000..f5462d374 --- /dev/null +++ b/server/Spells/Mage/Sorcerer/Warlock/AcidRain.lua @@ -0,0 +1,30 @@ +--[[ + Script Name : Spells/Mage/Sorcerer/Warlock/AcidRain.lua + Script Author : John Adams + Script Date : 2013.08.11 08:08:52 + Script Purpose : + : +--]] + +function cast(Caster, Target) + -- code to cast the spell + Say(Caster, "Whoops! Guess this is not implemented yet!") + +-- Info from spell_display_effects (remove from script when done) +-- Increases Crit Bonus of caster by 10.0% +-- On a damage spell hit this spell has a 12% chance to cast Acid Rain on target of spell. +-- Inflicts 605 - 907 poison damage on target encounter +-- Decreases threat priority of target encounter by 1 position +-- Cannot be modified except by direct means +-- Cannot be modified except by direct means + +end + +function tick(Caster, Target) + -- code to process each call_frequency (tick) set in spell_tiers +end + +function remove(Caster, Target) + -- code to remove the spell +end + diff --git a/server/Spells/Mage/Sorcerer/Warlock/AcidStorm.lua b/server/Spells/Mage/Sorcerer/Warlock/AcidStorm.lua new file mode 100644 index 000000000..ad1e4fa29 --- /dev/null +++ b/server/Spells/Mage/Sorcerer/Warlock/AcidStorm.lua @@ -0,0 +1,15 @@ +--[[ + Script Name : Spells/Mage/Sorcerer/Warlock/AcidStorm.lua + Script Author : neatz09 + Script Date : 2019.10.16 08:10:01 + Script Purpose : + : +--]] +-- Summons a limited pet to aid the caster +function cast(Caster, Target, PetID) + local x = GetX(Caster) + local y = GetY(Caster) + local z = GetZ(Caster) + + SummonDumbFirePet(Caster, Target, PetID, x, y, z) +end \ No newline at end of file diff --git a/server/Spells/Mage/Sorcerer/Warlock/Apocalypse.lua b/server/Spells/Mage/Sorcerer/Warlock/Apocalypse.lua new file mode 100644 index 000000000..a9b0efdb9 --- /dev/null +++ b/server/Spells/Mage/Sorcerer/Warlock/Apocalypse.lua @@ -0,0 +1,27 @@ +--[[ + Script Name : Spells/Mage/Sorcerer/Warlock/Apocalypse.lua + Script Author : neatz09 + Script Date : 2019.04.23 09:04:39 + Script Purpose : + : +--]] + +-- Inflicts 191 - 355 poison damage on target encounter instantly and every 1.5 seconds + + +function cast(Caster, Target, DoTType, MinVal, MaxVal) + if MaxVal ~= nil and MinVal < MaxVal then + SpellDamage(Target, DoTType, math.random(MinVal, MaxVal)) + else + SpellDamage(Target, DoTType, MinVal) + end +end + +function tick(Caster, Target, DoTType, MinVal, MaxVal) + if MaxVal ~= nil and MinVal < MaxVal then + SpellDamage(Target, DoTType, math.random(MinVal, MaxVal)) + else + SpellDamage(Target, DoTType, MinVal) + end +end + diff --git a/server/Spells/Mage/Sorcerer/Warlock/AspectofDarkness.lua b/server/Spells/Mage/Sorcerer/Warlock/AspectofDarkness.lua new file mode 100644 index 000000000..93f628049 --- /dev/null +++ b/server/Spells/Mage/Sorcerer/Warlock/AspectofDarkness.lua @@ -0,0 +1,20 @@ +--[[ + Script Name : Spells/Mage/Sorcerer/Warlock/AspectofDarkness.lua + Script Author : Jabantiz + Script Date : 2014.03.05 06:03:23 + Script Purpose : + : +--]] + +function cast(Caster, Target, PowerAmt, ResistAmt) + -- Increases Max Power of group members (AE) by 20.8 + AddSpellBonus(Target, 501, PowerAmt) + -- Increases Mitigation of group members (AE) vs noxious damage by 79 + AddSpellBonus(Target, 202, ResistAmt) +end + + +function remove(Caster, Target) + RemoveSpellBonus(Target) +end + diff --git a/server/Spells/Mage/Sorcerer/Warlock/AuraofVoid.lua b/server/Spells/Mage/Sorcerer/Warlock/AuraofVoid.lua new file mode 100644 index 000000000..f9e36772f --- /dev/null +++ b/server/Spells/Mage/Sorcerer/Warlock/AuraofVoid.lua @@ -0,0 +1,27 @@ +--[[ + Script Name : Spells/Mage/Sorcerer/Warlock/AuraofVoid.lua + Script Author : neatz09 + Script Date : 2019.10.12 04:10:34 + Script Purpose : + : +--]] + +-- Grants a total of 3 triggers of the spell. +function cast(Caster, Target, DmgType, MinVal, MaxVal) + AddProc(Target, 1, 100) + -- Grants a total of 3 triggers of the spell. + SetSpellTriggerCount(3, 1) +end + +function proc(Caster, Target, Type, DmgType, MinVal, MaxVal) + -- When damaged with a spell this spell will cast Aura of Pain on target. + if Type == 1 then + -- Inflicts 125 - 152 disease damage on target + ProcDamage(Caster, Target, "Aura of Pain", DmgType, MinVal, MaxVal) + RemoveTriggerFromSpell(1) + end +end + +function remove(Caster, Target) + RemoveProc(Target) +end diff --git a/server/Spells/Mage/Sorcerer/Warlock/BoonoftheDamned.lua b/server/Spells/Mage/Sorcerer/Warlock/BoonoftheDamned.lua new file mode 100644 index 000000000..ed79a58d9 --- /dev/null +++ b/server/Spells/Mage/Sorcerer/Warlock/BoonoftheDamned.lua @@ -0,0 +1,18 @@ +--[[ + Script Name : Spells/Mage/Sorcerer/Warlock/BoonoftheDamned.lua + Script Author : Jabantiz + Script Date : 2014.03.07 07:03:47 + Script Purpose : + : +--]] + +-- Info from spell_display_effects (remove from script when done) +-- When damaged with a melee weapon this spell has a 10% chance to cast Mana Boon on target. Lasts for 16.0 seconds. +-- Increases power of target by 3 instantly and every 4 seconds +-- Increases power of caster by 3 instantly and every 4 seconds +-- Causes 2% Threat to transfer to target when in combat +-- If Fighter + +function cast(Caster, Target, Power, Hate) + Say(Target, "Hah, nice try! That's not implemented yet!") +end diff --git a/server/Spells/Mage/Sorcerer/Warlock/Cataclysm.lua b/server/Spells/Mage/Sorcerer/Warlock/Cataclysm.lua new file mode 100644 index 000000000..4369ee3e7 --- /dev/null +++ b/server/Spells/Mage/Sorcerer/Warlock/Cataclysm.lua @@ -0,0 +1,40 @@ +--[[ + Script Name : dot.lua + Script Purpose : Generic Damage Over Time script + Script Author : John Adams + Script Date : 2008.12.04 +--]] + +function cast(Caster, Target, DOTType, MinDOTVal, MaxDOTVal) + Interrupt(Target) + + -- DOT component (instant damage) + if MaxDOTVal ~= nil and MinDOTVal < MaxDOTVal then + + SpellDamage(Target, DOTType, math.random(MinDOTVal, MaxDOTVal)) + + else + + SpellDamage(Target, DOTType, MinDOTVal) + + end + +end + +function tick(Caster, Target, DOTType, MinDOTVal, MaxDOTVal) + + if MaxDOTVal ~= nil and MinDOTVal < MaxDOTVal then + + SpellDamage(Target, DOTType, math.random(MinDOTVal, MaxDOTVal)) + + else + + SpellDamage(Target, DOTType, MinDOTVal) + + end + +end + +function remove(Caster, Target, DOTType, MinDOTVal, MaxDOTVal) + +end diff --git a/server/Spells/Mage/Sorcerer/Warlock/CorrosiveBlast.lua b/server/Spells/Mage/Sorcerer/Warlock/CorrosiveBlast.lua new file mode 100644 index 000000000..d1d72cadb --- /dev/null +++ b/server/Spells/Mage/Sorcerer/Warlock/CorrosiveBlast.lua @@ -0,0 +1,55 @@ +--[[ + Script Name : dd_dot.lua + Script Purpose : Generic damage + 1 effect script + Script Author : John Adams + Script Date : 2008.12.02 +--]] + +function cast(Caster, Target, DDType, MinDDVal, MaxDDVal, EffectType, DamageType, MinEffectVal, MaxEffectVal) + + -- DD component + if MaxDDVal ~= nil and MinDDVal < MaxDDVal then + dmgAmount = math.random(MinDDVal, MaxDDVal) + SpellDamage(Target, DDType, dmgAmount) + --AddHate(Caster, Target, dmgAmount) + else + SpellDamage(Target, DDType, MinDDVal) + --AddHate(Caster, Target, MinDDVal) + end + + -- Effect component - only process this code if there is an EffectType param + if EffectType ~= nil then + + -- Determine if there is a range to effect values + if MaxEffectVal ~= nil and MinEffectVal < MaxEffectVal then + EffectValue = math.random(MinEffectVal, MaxEffectVal) + else + EffectValue = MinEffectVal + end + + -- Determine EffectType - either a DamageType or a String value passed as param 4 + if EffectType == "heal" then + ModifyHP(Caster, EffectValue) + else + SpellDamage(Target, DamageType, EffectValue) + end + + end + +end + +function tick(Caster, Target, DDType, MinDDVal, MaxDDVal, EffectType, DamageType, MinEffectVal, MaxEffectVal) + + if MaxEffectVal ~= nil and MinEffectVal < MaxEffectVal then + EffectValue = math.random(MinEffectVal, MaxEffectVal) + else + EffectValue = MinEffectVal + end + + if EffectType == "heal" then + ModifyHP(Caster, EffectValue) + else + SpellDamage(Target, DamageType, EffectValue) + end + +end diff --git a/server/Spells/Mage/Sorcerer/Warlock/CurseofDarkness.lua b/server/Spells/Mage/Sorcerer/Warlock/CurseofDarkness.lua new file mode 100644 index 000000000..6aa010f2d --- /dev/null +++ b/server/Spells/Mage/Sorcerer/Warlock/CurseofDarkness.lua @@ -0,0 +1,11 @@ +--[[ + Script Name : Spells/Mage/Sorcerer/Warlock/CurseofDarkness.lua + Script Author : neatz09 + Script Date : 2019.10.10 09:10:21 + Script Purpose : + : +--]] + +-- Info from spell_display_effects (remove from script when done) +-- On a hostile spell cast this spell will cast Curse of Darkness on target of spell. +-- Inflicts 29 - 35 poison damage on target encounter diff --git a/server/Spells/Mage/Sorcerer/Warlock/CurseofVoid.lua b/server/Spells/Mage/Sorcerer/Warlock/CurseofVoid.lua new file mode 100644 index 000000000..728f98b4d --- /dev/null +++ b/server/Spells/Mage/Sorcerer/Warlock/CurseofVoid.lua @@ -0,0 +1,21 @@ +--[[ + Script Name : Spells/Mage/Sorcerer/Warlock/CurseofVoid.lua + Script Author : neatz09 + Script Date : 2019.04.24 12:04:01 + Script Purpose : + : +--]] + +-- Info from spell_display_effects (remove from script when done) +-- Decreases STR and INT of target by 19.4 +-- Only affects targets level 20 and above +function cast(Caster, Target, BonusAmt) + AddSpellBonus(Target, 0, BonusAmt) + AddSpellBonus(Target, 4, BonusAmt) + +end + +function remove(Caster, Target, BonusAmt) + RemoveSkillBonus(Target) +end + diff --git a/server/Spells/Mage/Sorcerer/Warlock/DarkInfestation.lua b/server/Spells/Mage/Sorcerer/Warlock/DarkInfestation.lua new file mode 100644 index 000000000..3fbb4c0b2 --- /dev/null +++ b/server/Spells/Mage/Sorcerer/Warlock/DarkInfestation.lua @@ -0,0 +1,29 @@ +--[[ + Script Name : Spells/Mage/Sorcerer/Warlock/DarkInfestation.lua + Script Author : John Adams + Script Date : 2013.08.11 08:08:49 + Script Purpose : + : +--]] + +function cast(Caster, Target) + -- code to cast the spell + Say(Caster, "Whoops! Guess this is not implemented yet!") + +-- Info from spell_display_effects (remove from script when done) +-- When damaged with a spell this spell has a 35% chance to cast Dark Broodlings on target. Lasts for 6.0 seconds. +-- Summons a limited pet to aid the caster +-- Summons 2 limited pets to aid the caster +-- Grants a total of 1 trigger of the spell. +-- Inflicts 149 - 182 poison damage on target instantly and every 4 seconds + +end + +function tick(Caster, Target) + -- code to process each call_frequency (tick) set in spell_tiers +end + +function remove(Caster, Target) + -- code to remove the spell +end + diff --git a/server/Spells/Mage/Sorcerer/Warlock/DarkNebula.lua b/server/Spells/Mage/Sorcerer/Warlock/DarkNebula.lua new file mode 100644 index 000000000..c65ddb697 --- /dev/null +++ b/server/Spells/Mage/Sorcerer/Warlock/DarkNebula.lua @@ -0,0 +1,26 @@ +--[[ + Script Name : Spells/Mage/Sorcerer/Warlock/DarkNebula.lua + Script Author : Jabantiz + Script Date : 2014.03.05 07:03:59 + Script Purpose : + : +--]] +-- need to add resistance function -- +function cast(Caster, Target, DmgType, MinVal, MaxVal) + -- Inflicts 55 - 101 poison damage on target encounter + if MaxVal ~= nil and MinVal < MaxVal then + SpellDamage(Target, DmgType, math.random(MinVal, MaxVal)) + else + SpellDamage(Target, DmgType, MinVal) + end + + -- Stuns target encounter + -- If Target is not Epic + if not IsEpic(Target) then + AddControlEffect(Target, 4) + end +end + +function remove(Caster, Target) + RemoveControlEffect(Target, 4) +end diff --git a/server/Spells/Mage/Sorcerer/Warlock/DarkPact.lua b/server/Spells/Mage/Sorcerer/Warlock/DarkPact.lua new file mode 100644 index 000000000..d6be8ecb4 --- /dev/null +++ b/server/Spells/Mage/Sorcerer/Warlock/DarkPact.lua @@ -0,0 +1,20 @@ +--[[ + Script Name : Spells/Mage/Sorcerer/Warlock/DarkPact.lua + Script Author : Jabantiz + Script Date : 2014.03.07 08:03:51 + Script Purpose : + : +--]] + +function cast(Caster, Target, SkillAmt) + -- Increases Disruption, Subjugation, Ordination, Ministration and Aggression of group members (AE) by 3.2 + AddSkillBonus(Target, GetSkillIDByName("Disruption"), SkillAmt) + AddSkillBonus(Target, GetSkillIDByName("Subjugation"), SkillAmt) + AddSkillBonus(Target, GetSkillIDByName("Ordination"), SkillAmt) + AddSkillBonus(Target, GetSkillIDByName("Ministration"), SkillAmt) + AddSkillBonus(Target, GetSkillIDByName("Aggression"), SkillAmt) +end + +function remove(Caster, Target) + RemoveSkillBonus(Target) +end diff --git a/server/Spells/Mage/Sorcerer/Warlock/DarkPyre.lua b/server/Spells/Mage/Sorcerer/Warlock/DarkPyre.lua new file mode 100644 index 000000000..ddd41c974 --- /dev/null +++ b/server/Spells/Mage/Sorcerer/Warlock/DarkPyre.lua @@ -0,0 +1,25 @@ +--[[ + Script Name : Spells/Mage/Sorcerer/Warlock/DarkPyre.lua + Script Author : Jabantiz + Script Date : 2014.03.06 07:03:01 + Script Purpose : + : +--]] + +function cast(Caster, Target, DmgType, MinVal, MaxVal, DoTDmgType, DoTMinVal, DoTMaxVal) + -- Inflicts 26 - 48 disease damage on target + if MaxVal ~= nil and MinVal < MaxVal then + SpellDamage(Target, DmgType, math.random(MinVal, MaxVal)) + else + SpellDamage(Target, DmgType, MinVal) + end +end + +function tick(Caster, Target, DmgType, MinVal, MaxVal, DoTDmgType, DoTMinVal, DoTMaxVal) + -- Inflicts 16 - 29 disease damage on target every 2 seconds + if DoTMaxVal ~= nil and DoTMinVal < DoTMaxVal then + SpellDamage(Target, DoTDmgType, math.random(DoTMinVal, DoTMaxVal)) + else + SpellDamage(Target, DoTDmgType, DoTMinVal) + end +end diff --git a/server/Spells/Mage/Sorcerer/Warlock/DarkSiphoning.lua b/server/Spells/Mage/Sorcerer/Warlock/DarkSiphoning.lua new file mode 100644 index 000000000..32a4ba906 --- /dev/null +++ b/server/Spells/Mage/Sorcerer/Warlock/DarkSiphoning.lua @@ -0,0 +1,55 @@ +--[[ + Script Name : Spells/Mage/Sorcerer/Warlock/DarkSiphoning.lua + Script Author : neatz09 + Script Date : 2019.10.12 12:10:50 + Script Purpose : + : +--]] + +-- Info from spell_display_effects (remove from script when done) +-- Decreases power of target encounter by 50 - 61 instantly and every 3 seconds +-- Inflicts 117 - 218 poison damage on target encounter instantly and every 3 seconds +-- Heals group members (AE) for 64 - 119 instantly and every 3 seconds +-- Increases power of group members (AE) by 1.3% instantly and every 3 seconds +-- This effect cannot be critically applied. + +function cast(Caster, Target, PotDebuffMin, PotDebuffMax, DoTType, DotMin, DotMax, HealMin, HealMax, pctHealMin, PctHealMax) +SpellHeal("Power", PotDebuffMin, PotDebuffMax) +SpellDamage(Target, DoTType, DoTMin, DoTMax) +if group == nil then + SpellHeal("Heal", HealMin, HealMax,Caster) +else + for k,v in ipairs(GetGroup(Spawn)) do + SpellHeal("Power", HealMin, HealMax, v) + end +end + +if group == nil then + SpellHeal("Heal", pctHealMin, pctHealMax, Caster) +else + for k,v in ipairs(GetGroup(Spawn)) do + SpellHeal("Heal", GetPCTOfHP(Caster, pctHealMin), SpellHeal("Heal", GetPCTOfHP(Caster, pctHealMax), v, 2, 1)) + end +end + +end +function tick(Caster, Target, PotDebuffMin, PotDebuffMax, DoTType, DotMin, DotMax, HealMin, HealMax, pctHealMin, pctHealMax) +SpellHeal("Power", PotDebuffMin, PotDebuffMax) +SpellDamage(Target, DoTType, DoTMin, DoTMax) +if group == nil then + SpellHeal("Heal", HealMin, HealMax,Caster) +else + for k,v in ipairs(GetGroup(Spawn)) do + SpellHeal("Power", HealMin, HealMax, v) + end +end + +if group == nil then + SpellHeal("Heal", pctHealMin, pctHealMax, Caster) +else + for k,v in ipairs(GetGroup(Spawn)) do + SpellHeal("Heal", GetPCTOfHP(Caster, pctHealMin), SpellHeal("Heal", GetPCTOfHP(Caster, pctHealMax), v, 2, 1)) + end +end + +end diff --git a/server/Spells/Mage/Sorcerer/Warlock/Dissolve.lua b/server/Spells/Mage/Sorcerer/Warlock/Dissolve.lua new file mode 100644 index 000000000..88617de23 --- /dev/null +++ b/server/Spells/Mage/Sorcerer/Warlock/Dissolve.lua @@ -0,0 +1,16 @@ +--[[ + Script Name : Spells/Mage/Sorcerer/Warlock/Dissolve.lua + Script Author : John Adams + Script Date : 2013.11.19 + Script Purpose : +--]] + +function cast(Caster, Target, DDType, MinDDVal, MaxDDVal) + + if MaxDDVal ~= nil and MinDDVal < MaxDDVal then + SpellDamage(Target, DDType, math.random(MinDDVal, MaxDDVal)) + else + SpellDamage(Target, DDType, MinDDVal) + end + +end diff --git a/server/Spells/Mage/Sorcerer/Warlock/DissolveX.lua b/server/Spells/Mage/Sorcerer/Warlock/DissolveX.lua new file mode 100644 index 000000000..88617de23 --- /dev/null +++ b/server/Spells/Mage/Sorcerer/Warlock/DissolveX.lua @@ -0,0 +1,16 @@ +--[[ + Script Name : Spells/Mage/Sorcerer/Warlock/Dissolve.lua + Script Author : John Adams + Script Date : 2013.11.19 + Script Purpose : +--]] + +function cast(Caster, Target, DDType, MinDDVal, MaxDDVal) + + if MaxDDVal ~= nil and MinDDVal < MaxDDVal then + SpellDamage(Target, DDType, math.random(MinDDVal, MaxDDVal)) + else + SpellDamage(Target, DDType, MinDDVal) + end + +end diff --git a/server/Spells/Mage/Sorcerer/Warlock/Distortion.lua b/server/Spells/Mage/Sorcerer/Warlock/Distortion.lua new file mode 100644 index 000000000..982ca1be3 --- /dev/null +++ b/server/Spells/Mage/Sorcerer/Warlock/Distortion.lua @@ -0,0 +1,17 @@ +--[[ + Script Name : Spells/Mage/Sorcerer/Warlock/Distortion.lua + Script Author : neatz09 + Script Date : 2019.04.24 12:04:59 + Script Purpose : + : +--]] + +-- Inflicts 216 - 400 poison damage on target +function cast(Caster, Target, DmgType, MinVal, MaxVal) +SpellDamage(Target, DmgType, MinVal, MaxVal, Power) +-- Increases power of caster by 21 +SpellHeal(Power, Pwr, nil, Caster) + + + +end \ No newline at end of file diff --git a/server/Spells/Mage/Sorcerer/Warlock/Encase.lua b/server/Spells/Mage/Sorcerer/Warlock/Encase.lua new file mode 100644 index 000000000..f724ee4cc --- /dev/null +++ b/server/Spells/Mage/Sorcerer/Warlock/Encase.lua @@ -0,0 +1,27 @@ +--[[ + Script Name : Spells/Mage/Sorcerer/Warlock/Encase.lua + Script Author : Jabantiz + Script Date : 2014.03.07 07:03:41 + Script Purpose : + : +--]] + +function cast(Caster, Target, DmgType, MinVal, MaxVal) + -- Inflicts 197 - 328 cold damage on target + if MaxVal ~= nil and MinVal < MaxVal then + SpellDamage(Target, DmgType, math.random(MinVal, MaxVal)) + else + SpellDamage(Target, DmgType, MinVal) + end + + -- Stuns target + -- If Target is not Epic + -- Resistibility increases against targets higher than level 29. + if not IsEpic(Target) then + AddControlEffect(Target, 4) + end +end + +function remove(Caster, Target) + RemoveControlEffect(Target, 4) +end diff --git a/server/Spells/Mage/Sorcerer/Warlock/Erupt.lua b/server/Spells/Mage/Sorcerer/Warlock/Erupt.lua new file mode 100644 index 000000000..977307f18 --- /dev/null +++ b/server/Spells/Mage/Sorcerer/Warlock/Erupt.lua @@ -0,0 +1,39 @@ +--[[ + Script Name : dot.lua + Script Purpose : Generic Damage Over Time script + Script Author : John Adams + Script Date : 2008.12.04 +--]] + +function cast(Caster, Target, DOTType, MinDOTVal, MaxDOTVal) + + -- DOT component (instant damage) + if MaxDOTVal ~= nil and MinDOTVal < MaxDOTVal then + + SpellDamage(Target, DOTType, math.random(MinDOTVal, MaxDOTVal)) + + else + + SpellDamage(Target, DOTType, MinDOTVal) + + end + +end + +function tick(Caster, Target, DOTType, MinDOTVal, MaxDOTVal) + + if MaxDOTVal ~= nil and MinDOTVal < MaxDOTVal then + + SpellDamage(Target, DOTType, math.random(MinDOTVal, MaxDOTVal)) + + else + + SpellDamage(Target, DOTType, MinDOTVal) + + end + +end + +function remove(Caster, Target, DOTType, MinDOTVal, MaxDOTVal) + +end diff --git a/server/Spells/Mage/Sorcerer/Warlock/GasCloud.lua b/server/Spells/Mage/Sorcerer/Warlock/GasCloud.lua new file mode 100644 index 000000000..4dcf3efaa --- /dev/null +++ b/server/Spells/Mage/Sorcerer/Warlock/GasCloud.lua @@ -0,0 +1,30 @@ +--[[ + Script Name : dd_interrupt.lua + Script Purpose : Generic damage + stun script + Script Author : John Adams + Script Date : 2008.12.04 +--]] + +function cast(Caster, Target, DDType, MinDDVal, MaxDDVal, EffectType, EffectChance) + + -- DD component + if MaxDDVal ~= nil and MinDDVal < MaxDDVal then + SpellDamage(Target, DDType, math.random(MinDDVal, MaxDDVal)) + else + SpellDamage(Target, DDType, MinDDVal) + end + + -- Effect component - if EffectChance is blank, always apply the effect, otherwise random + if EffectChance ~= nil then + if EffectChance >= math.random(1, 100) then + -- Interrupt(Target) + end + else + -- Interrupt(Target) + end + + +end + +function remove(Caster, Target) +end \ No newline at end of file diff --git a/server/Spells/Mage/Sorcerer/Warlock/GiftofBertoxxulous.lua b/server/Spells/Mage/Sorcerer/Warlock/GiftofBertoxxulous.lua new file mode 100644 index 000000000..1c15b901d --- /dev/null +++ b/server/Spells/Mage/Sorcerer/Warlock/GiftofBertoxxulous.lua @@ -0,0 +1,26 @@ +--[[ + Script Name : Spells/Mage/Sorcerer/Warlock/GiftofBertoxxulous.lua + Script Author : John Adams + Script Date : 2013.08.11 08:08:38 + Script Purpose : + : +--]] + +function cast(Caster, Target) + -- code to cast the spell + Say(Caster, "Whoops! Guess this is not implemented yet!") + +-- Info from spell_display_effects (remove from script when done) +-- On a hostile spell cast this spell will cast Abhorrence on target of spell. +-- Inflicts 19 - 36 poison damage on target encounter + +end + +function tick(Caster, Target) + -- code to process each call_frequency (tick) set in spell_tiers +end + +function remove(Caster, Target) + -- code to remove the spell +end + diff --git a/server/Spells/Mage/Sorcerer/Warlock/GraspofBertoxxulous.lua b/server/Spells/Mage/Sorcerer/Warlock/GraspofBertoxxulous.lua new file mode 100644 index 000000000..972468423 --- /dev/null +++ b/server/Spells/Mage/Sorcerer/Warlock/GraspofBertoxxulous.lua @@ -0,0 +1,15 @@ +--[[ + Script Name : Spells/Mage/Sorcerer/Warlock/GraspofBertoxxulous.lua + Script Author : Jabantiz + Script Date : 2014.03.07 08:03:32 + Script Purpose : + : +--]] + +-- Info from spell_display_effects (remove from script when done) +-- On a combat hit this spell may cast Venomous Runes on target of attack. Lasts for 16.0 seconds. Triggers about 2.0 times per minute. +-- Inflicts 17 - 21 poison damage on target instantly and every 4 seconds + +function cast(Caster, Target) + Say(Target, "Hah, nice try! That's not implemented yet!") +end diff --git a/server/Spells/Mage/Sorcerer/Warlock/ManaTrickle.lua b/server/Spells/Mage/Sorcerer/Warlock/ManaTrickle.lua new file mode 100644 index 000000000..4255d2895 --- /dev/null +++ b/server/Spells/Mage/Sorcerer/Warlock/ManaTrickle.lua @@ -0,0 +1,21 @@ +--[[ + Script Name : Spells/Mage/Sorcerer/Warlock/ManaTrickle.lua + Script Author : neatz09 + Script Date : 2019.10.14 11:10:42 + Script Purpose : + : +--]] + + +-- Increases power of target by 30 instantly and every 4 seconds + +function cast(Caster, Target, Min) +SpellHeal("Power", Min) +end + + +function tick(Caster, Target, Min) +SpellHeal("Power", Min) +end + + diff --git a/server/Spells/Mage/Sorcerer/Warlock/NegativeVoid.lua b/server/Spells/Mage/Sorcerer/Warlock/NegativeVoid.lua new file mode 100644 index 000000000..0070bd672 --- /dev/null +++ b/server/Spells/Mage/Sorcerer/Warlock/NegativeVoid.lua @@ -0,0 +1,10 @@ +--[[ + Script Name : Spells/Mage/Sorcerer/Warlock/NegativeVoid.lua + Script Author : neatz09 + Script Date : 2019.10.19 06:10:38 + Script Purpose : + : +--]] + +-- Info from spell_display_effects (remove from script when done) +-- Changes damage based encounter AE spells into single target. Improves their damage by 30% diff --git a/server/Spells/Mage/Sorcerer/Warlock/Netherealm.lua b/server/Spells/Mage/Sorcerer/Warlock/Netherealm.lua new file mode 100644 index 000000000..28637037f --- /dev/null +++ b/server/Spells/Mage/Sorcerer/Warlock/Netherealm.lua @@ -0,0 +1,13 @@ +--[[ + Script Name : Spells/Mage/Sorcerer/Warlock/Netherealm.lua + Script Author : neatz09 + Script Date : 2019.10.10 09:10:57 + Script Purpose : + : +--]] + +-- Info from spell_display_effects (remove from script when done) +-- Applies Netherous Cascade. Lasts for 5.0 seconds. +-- When damaged with a spell this spell will cast Nether Void on target. +-- Inflicts 329 - 402 poison damage on target +-- Grants a total of 1 trigger of the spell. diff --git a/server/Spells/Mage/Sorcerer/Warlock/Netherlord.lua b/server/Spells/Mage/Sorcerer/Warlock/Netherlord.lua new file mode 100644 index 000000000..071373ce4 --- /dev/null +++ b/server/Spells/Mage/Sorcerer/Warlock/Netherlord.lua @@ -0,0 +1,17 @@ +--[[ + Script Name : Spells/Mage/Sorcerer/Warlock/Netherlord.lua + Script Author : neatz09 + Script Date : 2019.10.16 09:10:50 + Script Purpose : + : +--]] + +-- Info from spell_display_effects (remove from script when done) +-- Summons a limited pet to aid the caster +function cast(Caster, Target, PetID) + local x = GetX(Caster) + local y = GetY(Caster) + local z = GetZ(Caster) + + SummonDumbFirePet(Caster, Target, PetID, x, y, z) +end \ No newline at end of file diff --git a/server/Spells/Mage/Sorcerer/Warlock/NetherousBind.lua b/server/Spells/Mage/Sorcerer/Warlock/NetherousBind.lua new file mode 100644 index 000000000..6acc834e9 --- /dev/null +++ b/server/Spells/Mage/Sorcerer/Warlock/NetherousBind.lua @@ -0,0 +1,38 @@ +--[[ + Script Name : Spells/Mage/Sorcerer/Warlock/NetherousBind.lua + Script Author : Jabantiz + Script Date : 2014.01.14 05:01:35 + Script Purpose : + : +--]] + +-- Info from spell_display_effects (remove from script when done) + + +function cast(Caster, Target, Snare) + -- Roots target + -- 15% chance to dispel when target takes damage + -- Does not affect Epic targets + -- Resistibility increases against targets higher than level 29. + if not IsEpic(Target) then + SetSpeedMultiplier(Target, Snare) + AddProc(Target, 2, 15.0) + end +end + +function proc(Caster, Target, Type) + if Type == 2 then + -- Cancel spell + end +end + +function remove(Caster, Target) + SetSpeedMultiplier(Target, 1.0) + + -- Applies Element of Fear on termination. Lasts for 5.0 seconds. + -- Makes target afraid + -- Slows target by 27.9% + -- 30% chance to dispel when target takes damage + -- Does not affect Epic targets + -- Resistibility increases against targets higher than level 34. +end diff --git a/server/Spells/Mage/Sorcerer/Warlock/NullCaress.lua b/server/Spells/Mage/Sorcerer/Warlock/NullCaress.lua new file mode 100644 index 000000000..16b935832 --- /dev/null +++ b/server/Spells/Mage/Sorcerer/Warlock/NullCaress.lua @@ -0,0 +1,24 @@ +--[[ + Script Name : Spells/Mage/Sorcerer/Warlock/NullCaress.lua + Script Author : John Adams + Script Date : 2013.08.11 08:08:17 + Script Purpose : + : +--]] + +function cast(Caster, Target) + -- code to cast the spell + Say(Caster, "Whoops! Guess this is not implemented yet!") + +-- Info from spell_display_effects (remove from script when done) + +end + +function tick(Caster, Target) + -- code to process each call_frequency (tick) set in spell_tiers +end + +function remove(Caster, Target) + -- code to remove the spell +end + diff --git a/server/Spells/Mage/Sorcerer/Warlock/Nullify.lua b/server/Spells/Mage/Sorcerer/Warlock/Nullify.lua new file mode 100644 index 000000000..49eb2c1e2 --- /dev/null +++ b/server/Spells/Mage/Sorcerer/Warlock/Nullify.lua @@ -0,0 +1,26 @@ +--[[ + Script Name : Spells/Mage/Sorcerer/Warlock/Nullify.lua + Script Author : Jabantiz + Script Date : 2014.03.07 08:03:56 + Script Purpose : + : +--]] + +function cast(Caster, Target, MinHate, MaxHate) + -- Interrupts target encounter + Interrupt(Target) + + -- Decreases Threat to target encounter by 112 - 137 + AddHate(Caster, Target, math.random(MinHate, MaxHate), 1) + + -- Dazes target encounter + -- If Target is not Epic + -- Resistibility increases against targets higher than level 29. + if not IsEpic(Target) then + AddControlEffect(Target, 3) + end +end + +function remove(Caster, Target) + RemoveControlEffect(Target, 3) +end diff --git a/server/Spells/Mage/Sorcerer/Warlock/Nullmail.lua b/server/Spells/Mage/Sorcerer/Warlock/Nullmail.lua new file mode 100644 index 000000000..685b37b67 --- /dev/null +++ b/server/Spells/Mage/Sorcerer/Warlock/Nullmail.lua @@ -0,0 +1,30 @@ +--[[ + Script Name : Spells/Mage/Sorcerer/Warlock/Nullmail.lua + Script Author : John Adams + Script Date : 2013.08.11 08:08:35 + Script Purpose : + : +--]] + +function cast(Caster, Target) + -- code to cast the spell + Say(Caster, "Whoops! Guess this is not implemented yet!") + +-- Info from spell_display_effects (remove from script when done) +-- When target falls below 30% health this spell will cast Nullmail Armor on target. Lasts for 12.0 seconds. +-- Increases Mitigation of caster vs elemental and noxious damage by 1600 +-- Prevents AOE (except when direct) +-- Caster will Dodge 50.0% of incoming attacks +-- Increases Mitigation of caster vs physical and arcane damage by 1600 +-- Grants a total of 1 trigger of the spell. + +end + +function tick(Caster, Target) + -- code to process each call_frequency (tick) set in spell_tiers +end + +function remove(Caster, Target) + -- code to remove the spell +end + diff --git a/server/Spells/Mage/Sorcerer/Warlock/Rift.lua b/server/Spells/Mage/Sorcerer/Warlock/Rift.lua new file mode 100644 index 000000000..9ef97bf6d --- /dev/null +++ b/server/Spells/Mage/Sorcerer/Warlock/Rift.lua @@ -0,0 +1,19 @@ +--[[ + Script Name : Spells/Mage/Sorcerer/Warlock/Rift.lua + Script Author : neatz09 + Script Date : 2019.08.26 08:08:02 + Script Purpose : + : +--]] +--need knockback function +-- Inflicts 1107 - 1845 magic damage on targets in Area of Effect +function cast(Caster, Target, DmgType, MinVal, MaxVal) + SpellDamagage(Target, DmgType, MinVal, MaxVal) +-- Throws target back +-- If Target is not Epic +-- Stuns targets in Area of Effect +-- If Target is not Epic +-- Resistibility increases against targets higher than level 29. + +end + diff --git a/server/Spells/Mage/Sorcerer/Warlock/Shadowsight.lua b/server/Spells/Mage/Sorcerer/Warlock/Shadowsight.lua new file mode 100644 index 000000000..c77178c6a --- /dev/null +++ b/server/Spells/Mage/Sorcerer/Warlock/Shadowsight.lua @@ -0,0 +1,26 @@ +--[[ + Script Name : Spells/Mage/Sorcerer/Warlock/Shadowsight.lua + Script Author : John Adams + Script Date : 2013.08.11 08:08:45 + Script Purpose : + : +--]] + +function cast(Caster, Target) + -- code to cast the spell + Say(Caster, "Whoops! Guess this is not implemented yet!") + +-- Info from spell_display_effects (remove from script when done) +-- Grants See Invisibility to group members (AE) +-- Grants Sonic Vision to group members (AE) + +end + +function tick(Caster, Target) + -- code to process each call_frequency (tick) set in spell_tiers +end + +function remove(Caster, Target) + -- code to remove the spell +end + diff --git a/server/Spells/Mage/Sorcerer/Warlock/ShroudofBertoxxulous.lua b/server/Spells/Mage/Sorcerer/Warlock/ShroudofBertoxxulous.lua new file mode 100644 index 000000000..04d90982d --- /dev/null +++ b/server/Spells/Mage/Sorcerer/Warlock/ShroudofBertoxxulous.lua @@ -0,0 +1,26 @@ +--[[ + Script Name : Spells/Mage/Sorcerer/Warlock/ShroudofBertoxxulous.lua + Script Author : John Adams + Script Date : 2013.08.11 08:08:32 + Script Purpose : + : +--]] + +function cast(Caster, Target) + -- code to cast the spell + Say(Caster, "Whoops! Guess this is not implemented yet!") + +-- Info from spell_display_effects (remove from script when done) +-- When damaged this spell has a 25% chance to cast Nihilistics on target's attacker. +-- Inflicts 23 - 28 poison damage on target encounter + +end + +function tick(Caster, Target) + -- code to process each call_frequency (tick) set in spell_tiers +end + +function remove(Caster, Target) + -- code to remove the spell +end + diff --git a/server/Spells/Mage/Sorcerer/Warlock/SkeletalGrasp.lua b/server/Spells/Mage/Sorcerer/Warlock/SkeletalGrasp.lua new file mode 100644 index 000000000..ce3efb1e5 --- /dev/null +++ b/server/Spells/Mage/Sorcerer/Warlock/SkeletalGrasp.lua @@ -0,0 +1,13 @@ +--[[ + Script Name : Spells/Mage/Sorcerer/Warlock/SkeletalGrasp.lua + Script Author : neatz09 + Script Date : 2019.10.14 11:10:35 + Script Purpose : + : +--]] + +-- Info from spell_display_effects (remove from script when done) +-- Roots target encounter +-- 15% chance to dispel when target takes damage +-- Does not affect Epic targets +-- Resistibility increases against targets higher than level 29. diff --git a/server/Spells/Mage/Sorcerer/Warlock/VacuumField.lua b/server/Spells/Mage/Sorcerer/Warlock/VacuumField.lua new file mode 100644 index 000000000..2c5fabfa9 --- /dev/null +++ b/server/Spells/Mage/Sorcerer/Warlock/VacuumField.lua @@ -0,0 +1,16 @@ +--[[ + Script Name : Spells/Mage/Sorcerer/Warlock/VacuumField.lua + Script Author : Jabantiz + Script Date : 2014.01.14 05:01:26 + Script Purpose : + : +--]] + +function cast(Caster, Target, BonusAmt) + -- Decreases Mitigation of target encounter vs noxious damage by 69 + AddSpellBonus(Target, 202, BonusAmt) +end + +function remove(Caster, Target) + RemoveSpellBonus(Target) +end \ No newline at end of file diff --git a/server/Spells/Mage/Sorcerer/Warlock/VoidContract.lua b/server/Spells/Mage/Sorcerer/Warlock/VoidContract.lua new file mode 100644 index 000000000..6245aeae7 --- /dev/null +++ b/server/Spells/Mage/Sorcerer/Warlock/VoidContract.lua @@ -0,0 +1,13 @@ +--[[ + Script Name : Spells/Mage/Sorcerer/Warlock/VoidContract.lua + Script Author : Jabantiz + Script Date : 2014.03.07 08:03:59 + Script Purpose : + : +--]] + + +function cast(Caster, Target, Amt) + -- Increases power of caster by 29 + SpellHeal("Power", Amt); +end diff --git a/server/Spells/Mage/Sorcerer/Wizard/Aurora.lua b/server/Spells/Mage/Sorcerer/Wizard/Aurora.lua new file mode 100644 index 000000000..ebba15820 --- /dev/null +++ b/server/Spells/Mage/Sorcerer/Wizard/Aurora.lua @@ -0,0 +1,15 @@ +--[[ + Script Name : Spells/Mage/Sorcerer/Wizard/Aurora.lua + Script Author : neatz09 + Script Date : 2019.10.15 01:10:51 + Script Purpose : + : +--]] + +-- Info from spell_display_effects (remove from script when done) +-- Mesmerizes target +-- Prevents AOE (except when direct) +-- Roots caster +-- Dispelled when target takes damage +-- Does not affect Epic targets +-- Resistibility increases against targets higher than level 29. diff --git a/server/Spells/Mage/Sorcerer/Wizard/BallofFire.lua b/server/Spells/Mage/Sorcerer/Wizard/BallofFire.lua new file mode 100644 index 000000000..5a4775fce --- /dev/null +++ b/server/Spells/Mage/Sorcerer/Wizard/BallofFire.lua @@ -0,0 +1,20 @@ +--[[ + Script Name : Spells/Mage/Sorcerer/Wizard/BallofFire.lua + Script Author : neatz09 + Script Date : 2019.05.05 10:05:37 + Script Purpose : + : +--]] + + +-- Inflicts 367 - 681 heat damage on target + + +function cast(Caster, Target, DmgType, MinVal, MaxVal) + if MaxVal ~= nil and MinVal < MaxVal then + SpellDamage(Target, DmgType, math.random(MinVal, MaxVal)) + else + SpellDamage(Target, DmgType, MinVal) + end +end + diff --git a/server/Spells/Mage/Sorcerer/Wizard/Cease.lua b/server/Spells/Mage/Sorcerer/Wizard/Cease.lua new file mode 100644 index 000000000..7cdadb6b2 --- /dev/null +++ b/server/Spells/Mage/Sorcerer/Wizard/Cease.lua @@ -0,0 +1,26 @@ +--[[ + Script Name : Spells/Mage/Sorcerer/Wizard/Cease.lua + Script Author : neatz09 + Script Date : 2019.10.07 03:10:05 + Script Purpose : + : +--]] + +function cast(Caster, Target, MinHate, MaxHate) + -- Interrupts target encounter + Interrupt(Caster, Target) + + -- Decreases Threat to target by 355 - 434 + AddHate(Caster, Target, math.random(MinHate, MaxHate), 1) + +-- Stifles target +-- If Target is not Epic +-- Resistibility increases against targets higher than level 29. + if not IsEpic(Target) then + AddControlEffect(Target, 2) + end +end + +function remove(Caster, Target) + RemoveControlEffect(Target, 2) +end \ No newline at end of file diff --git a/server/Spells/Mage/Sorcerer/Wizard/Converge.lua b/server/Spells/Mage/Sorcerer/Wizard/Converge.lua new file mode 100644 index 000000000..a5cf266c5 --- /dev/null +++ b/server/Spells/Mage/Sorcerer/Wizard/Converge.lua @@ -0,0 +1,14 @@ +--[[ + Script Name : Spells/Mage/Sorcerer/Wizard/Converge.lua + Script Author : neatz09 + Script Date : 2019.10.10 10:10:56 + Script Purpose : + : +--]] + +-- Info from spell_display_effects (remove from script when done) +-- Causes 2% Threat to transfer to target when in combat +-- If Fighter +-- When damaged with a melee weapon this spell has a 10% chance to cast Concurrence on target. +-- Increases power of target by 12 +-- Increases power of caster by 12 diff --git a/server/Spells/Mage/Sorcerer/Wizard/Depart.lua b/server/Spells/Mage/Sorcerer/Wizard/Depart.lua new file mode 100644 index 000000000..fb3fa7bab --- /dev/null +++ b/server/Spells/Mage/Sorcerer/Wizard/Depart.lua @@ -0,0 +1,12 @@ +--[[ + Script Name : Spells/Mage/Sorcerer/Wizard/Depart.lua + Script Author : neatz09 + Script Date : 2019.10.12 09:10:59 + Script Purpose : + : +--]] + +-- Teleports caster and caster's group within the zone +function cast(Caster, Target) + Evac() +end \ No newline at end of file diff --git a/server/Spells/Mage/Sorcerer/Wizard/Engulf.lua b/server/Spells/Mage/Sorcerer/Wizard/Engulf.lua new file mode 100644 index 000000000..977307f18 --- /dev/null +++ b/server/Spells/Mage/Sorcerer/Wizard/Engulf.lua @@ -0,0 +1,39 @@ +--[[ + Script Name : dot.lua + Script Purpose : Generic Damage Over Time script + Script Author : John Adams + Script Date : 2008.12.04 +--]] + +function cast(Caster, Target, DOTType, MinDOTVal, MaxDOTVal) + + -- DOT component (instant damage) + if MaxDOTVal ~= nil and MinDOTVal < MaxDOTVal then + + SpellDamage(Target, DOTType, math.random(MinDOTVal, MaxDOTVal)) + + else + + SpellDamage(Target, DOTType, MinDOTVal) + + end + +end + +function tick(Caster, Target, DOTType, MinDOTVal, MaxDOTVal) + + if MaxDOTVal ~= nil and MinDOTVal < MaxDOTVal then + + SpellDamage(Target, DOTType, math.random(MinDOTVal, MaxDOTVal)) + + else + + SpellDamage(Target, DOTType, MinDOTVal) + + end + +end + +function remove(Caster, Target, DOTType, MinDOTVal, MaxDOTVal) + +end diff --git a/server/Spells/Mage/Sorcerer/Wizard/FireChamber.lua b/server/Spells/Mage/Sorcerer/Wizard/FireChamber.lua new file mode 100644 index 000000000..4dcf3efaa --- /dev/null +++ b/server/Spells/Mage/Sorcerer/Wizard/FireChamber.lua @@ -0,0 +1,30 @@ +--[[ + Script Name : dd_interrupt.lua + Script Purpose : Generic damage + stun script + Script Author : John Adams + Script Date : 2008.12.04 +--]] + +function cast(Caster, Target, DDType, MinDDVal, MaxDDVal, EffectType, EffectChance) + + -- DD component + if MaxDDVal ~= nil and MinDDVal < MaxDDVal then + SpellDamage(Target, DDType, math.random(MinDDVal, MaxDDVal)) + else + SpellDamage(Target, DDType, MinDDVal) + end + + -- Effect component - if EffectChance is blank, always apply the effect, otherwise random + if EffectChance ~= nil then + if EffectChance >= math.random(1, 100) then + -- Interrupt(Target) + end + else + -- Interrupt(Target) + end + + +end + +function remove(Caster, Target) +end \ No newline at end of file diff --git a/server/Spells/Mage/Sorcerer/Wizard/Firestorm.lua b/server/Spells/Mage/Sorcerer/Wizard/Firestorm.lua new file mode 100644 index 000000000..8304ade7b --- /dev/null +++ b/server/Spells/Mage/Sorcerer/Wizard/Firestorm.lua @@ -0,0 +1,17 @@ +--[[ + Script Name : Spells/Mage/Sorcerer/Wizard/Firestorm.lua + Script Author : Zcoretri + Script Date : 2013.17.12 12:06:46 + Script Purpose : + : +--]] + +function cast(Caster, Target, DmgType, MinVal, MaxVal) + if MaxVal ~= nil and MinVal < MaxVal then + SpellDamage(Target, DmgType, math.random(MinVal, MaxVal)) + else + SpellDamage(Target, DmgType, MinVal) + end +end + + diff --git a/server/Spells/Mage/Sorcerer/Wizard/FocusedMind.lua b/server/Spells/Mage/Sorcerer/Wizard/FocusedMind.lua new file mode 100644 index 000000000..c3b9057af --- /dev/null +++ b/server/Spells/Mage/Sorcerer/Wizard/FocusedMind.lua @@ -0,0 +1,31 @@ +--[[ + Script Name : Spells/Mage/Sorcerer/Wizard/FocusedMind.lua + Script Author : John Adams + Script Date : 2013.08.11 07:08:49 + Script Purpose : + : +--]] + +function cast(Caster, Target) + -- code to cast the spell + Say(Caster, "Whoops! Guess this is not implemented yet!") + +-- Info from spell_display_effects (remove from script when done) +-- On a damage spell hit this spell has a 12% chance to cast Fire of Intellect on target of spell. Lasts for 15.0 seconds. +-- Inflicts 588 - 881 heat damage on target +-- Adds normalized spell damage based on 30% of the wizard's intelligence +-- Cannot be modified except by direct means +-- Increases the damage of all hostile spells by 10% +-- Increases Doublecast Chance of caster by 10.0% +-- Cannot be modified except by direct means + +end + +function tick(Caster, Target) + -- code to process each call_frequency (tick) set in spell_tiers +end + +function remove(Caster, Target) + -- code to remove the spell +end + diff --git a/server/Spells/Mage/Sorcerer/Wizard/FortifyElements.lua b/server/Spells/Mage/Sorcerer/Wizard/FortifyElements.lua new file mode 100644 index 000000000..5d21b6afc --- /dev/null +++ b/server/Spells/Mage/Sorcerer/Wizard/FortifyElements.lua @@ -0,0 +1,19 @@ +--[[ + Script Name : Spells/Mage/Sorcerer/Wizard/FortifyElements.lua + Script Author : Zcoretri + Script Date : 2013.09.12 15:47:05 + Script Purpose : + : +--]] + + +function cast(Caster, Target, PowerAmt, BonusAmt) + AddSpellBonus(Target, 501, PowerAmt) -- Power + AddSpellBonus(Target, 201, BonusAmt) -- vs Elemental + +end + +function remove(Caster, Target) + RemoveSpellBonus(Target) +end + diff --git a/server/Spells/Mage/Sorcerer/Wizard/FrigidGift.lua b/server/Spells/Mage/Sorcerer/Wizard/FrigidGift.lua new file mode 100644 index 000000000..8aca76792 --- /dev/null +++ b/server/Spells/Mage/Sorcerer/Wizard/FrigidGift.lua @@ -0,0 +1,24 @@ +--[[ + Script Name : Spells/Mage/Sorcerer/Wizard/FrigidGift.lua + Script Author : John Adams + Script Date : 2013.08.11 07:08:31 + Script Purpose : + : +--]] + +function cast(Caster, Target) + -- code to cast the spell + Say(Caster, "Whoops! Guess this is not implemented yet!") + +-- Info from spell_display_effects (remove from script when done) + +end + +function tick(Caster, Target) + -- code to process each call_frequency (tick) set in spell_tiers +end + +function remove(Caster, Target) + -- code to remove the spell +end + diff --git a/server/Spells/Mage/Sorcerer/Wizard/FurnaceofRo.lua b/server/Spells/Mage/Sorcerer/Wizard/FurnaceofRo.lua new file mode 100644 index 000000000..3ff3f5b5a --- /dev/null +++ b/server/Spells/Mage/Sorcerer/Wizard/FurnaceofRo.lua @@ -0,0 +1,24 @@ +--[[ + Script Name : Spells/Mage/Sorcerer/Wizard/FurnaceofRo.lua + Script Author : John Adams + Script Date : 2013.08.11 07:08:43 + Script Purpose : + : +--]] + +function cast(Caster, Target) + -- code to cast the spell + Say(Caster, "Whoops! Guess this is not implemented yet!") + +-- Info from spell_display_effects (remove from script when done) + +end + +function tick(Caster, Target) + -- code to process each call_frequency (tick) set in spell_tiers +end + +function remove(Caster, Target) + -- code to remove the spell +end + diff --git a/server/Spells/Mage/Sorcerer/Wizard/Fusion.lua b/server/Spells/Mage/Sorcerer/Wizard/Fusion.lua new file mode 100644 index 000000000..660583271 --- /dev/null +++ b/server/Spells/Mage/Sorcerer/Wizard/Fusion.lua @@ -0,0 +1,15 @@ +--[[ + Script Name : Spells/Mage/Sorcerer/Wizard/Fusion.lua + Script Author : neatz09 + Script Date : 2019.10.11 05:10:04 + Script Purpose : + : +--]] + +-- Info from spell_display_effects (remove from script when done) +-- Throws target back +-- If Target is not Epic +-- Inflicts 31 - 51 cold damage on targets in Area of Effect +-- Stuns targets in Area of Effect +-- If Target is not Epic +-- Resistibility increases against targets higher than level 29. diff --git a/server/Spells/Mage/Sorcerer/Wizard/GlacialWind.lua b/server/Spells/Mage/Sorcerer/Wizard/GlacialWind.lua new file mode 100644 index 000000000..5cefdbd52 --- /dev/null +++ b/server/Spells/Mage/Sorcerer/Wizard/GlacialWind.lua @@ -0,0 +1,30 @@ +--[[ + Script Name : Spells/Mage/Sorcerer/Wizard/GlacialWind.lua + Script Author : Zcoretri + Script Date : 2013.17.12 12:34:04 + Script Purpose : + : +--]] + + +function cast(Caster, Target, DmgType, MinVal, MaxVal) + if MaxVal ~= nil and MinVal < MaxVal then + SpellDamage(Target, DmgType, math.random(MinVal, MaxVal)) + else + SpellDamage(Target, DmgType, MinVal) + end +end + + +function tick(Caster, Target) + if MaxVal ~= nil and MinVal < MaxVal then + SpellDamage(Target, DmgType, math.random(MinVal, MaxVal)) + else + SpellDamage(Target, DmgType, MinVal) + end +end + +function remove(Caster, Target) + +end + diff --git a/server/Spells/Mage/Sorcerer/Wizard/HarvestMana.lua b/server/Spells/Mage/Sorcerer/Wizard/HarvestMana.lua new file mode 100644 index 000000000..63019efcb --- /dev/null +++ b/server/Spells/Mage/Sorcerer/Wizard/HarvestMana.lua @@ -0,0 +1,25 @@ +--[[ + Script Name : Spells/Mage/Sorcerer/Wizard/HarvestMana.lua + Script Author : neatz09 + Script Date : 2019.10.08 04:10:40 + Script Purpose : + : +--]] + +-- Increases power of caster by 34 instantly and every second +function cast(Caster, Target, MinHeal) + SpellHeal("Power", MinHeal) + AddControlEffect(Target, 2) +end + + +function tick(Caster, Target, MinHeal) +SpellHeal("Power", MinHeal) +end + +function remove(Caster, Target) +RemoveControlEffect(Target, 2) +end + + + diff --git a/server/Spells/Mage/Sorcerer/Wizard/IceComet.lua b/server/Spells/Mage/Sorcerer/Wizard/IceComet.lua new file mode 100644 index 000000000..c470defdd --- /dev/null +++ b/server/Spells/Mage/Sorcerer/Wizard/IceComet.lua @@ -0,0 +1,23 @@ +--[[ + Script Name : Spells/Mage/Sorcerer/Wizard/IceComet.lua + Script Author : neatz09 + Script Date : 2019.10.08 03:10:40 + Script Purpose : + : +--]] + +-- Inflicts 2837 - 5269 cold damage on target +function cast(Caster, Target, DmgType, MinVal, MaxVal) +SpellDamage(Target, DmgType, MinVal, MaxVal) +-- Applies Knockdown on termination. Lasts for 1.5 seconds. +-- Throws target back +-- Blurs vision of target +-- Stuns target +-- Does not affect Epic targets +if not IsEpic(Target) then + Knockback(Caster, Target, 4000) + BlurVision(Target, 1.0) + AddSpellTimer(1500, "RemoveKnockback") + end + +end diff --git a/server/Spells/Mage/Sorcerer/Wizard/IceSpears.lua b/server/Spells/Mage/Sorcerer/Wizard/IceSpears.lua new file mode 100644 index 000000000..1a000d3b0 --- /dev/null +++ b/server/Spells/Mage/Sorcerer/Wizard/IceSpears.lua @@ -0,0 +1,28 @@ +--[[ + Script Name : Spells/Mage/Sorcerer/Wizard/IceSpears.lua + Script Author : Zcoretri + Script Date : 2013.07.12 11:38:48 + Script Purpose : + : +--]] + +function cast(Caster, Target, DoTType, MinVal, MaxVal, BonusAmt) + if MaxVal ~= nil and MinVal < MaxVal then + SpellDamage(Target, DoTType, math.random(MinVal, MaxVal)) + else + SpellDamage(Target, DoTType, MinVal) + end + AddSpellBonus(Target, 200, BonusAmt) -- vs Elemental +end + +function tick(Caster, Target, DoTType, MinVal, MaxVal, BonusAmt) + if MaxVal ~= nil and MinVal < MaxVal then + SpellDamage(Target, DoTType, math.random(MinVal, MaxVal)) + else + SpellDamage(Target, DoTType, MinVal) + end +end + +function remove(Caster, Target, DoTType, MinVal, MaxVal, BonusAmt) + RemoveSpellBonus(Target) +end diff --git a/server/Spells/Mage/Sorcerer/Wizard/Iceshield.lua b/server/Spells/Mage/Sorcerer/Wizard/Iceshield.lua new file mode 100644 index 000000000..0ca2bf9fd --- /dev/null +++ b/server/Spells/Mage/Sorcerer/Wizard/Iceshield.lua @@ -0,0 +1,27 @@ +--[[ + Script Name : Spells/Mage/Sorcerer/Wizard/Iceshield.lua + Script Author : John Adams + Script Date : 2013.08.11 07:08:09 + Script Purpose : + : +--]] + +function cast(Caster, Target) + -- code to cast the spell + Say(Caster, "Whoops! Guess this is not implemented yet!") + +-- Info from spell_display_effects (remove from script when done) +-- When damaged with a melee weapon this spell will cast Frost Spikes on target's attacker. +-- Inflicts 145 - 177 cold damage on target +-- Grants a total of 3 triggers of the spell. + +end + +function tick(Caster, Target) + -- code to process each call_frequency (tick) set in spell_tiers +end + +function remove(Caster, Target) + -- code to remove the spell +end + diff --git a/server/Spells/Mage/Sorcerer/Wizard/Immolation.lua b/server/Spells/Mage/Sorcerer/Wizard/Immolation.lua new file mode 100644 index 000000000..92a31ce4e --- /dev/null +++ b/server/Spells/Mage/Sorcerer/Wizard/Immolation.lua @@ -0,0 +1,31 @@ +--[[ + Script Name : Spells/Mage/Sorcerer/Wizard/Immolation.lua + Script Author : Zcoretri + Script Date : 2013.13.12 17:43:18 + Script Purpose : + : +--]] + + +function cast(Caster, Target, DmgType, MinVal, MaxVal, DoTType, DotMinVal, DotMaxVal) + if MaxVal ~= nil and MinVal < MaxVal then + SpellDamage(Target, DmgType, math.random(MinVal, MaxVal)) + else + SpellDamage(Target, DmgType, MinVal) + end +end + + +function tick(Caster, Target, DmgType, MinVal, MaxVal, DoTType, DotMinVal, DotMaxVal) + if DotMaxVal ~= nil and DotMinVal < DotMaxVal then + SpellDamage(Target, DoTType, math.random(DotMinVal, DotMaxVal)) + else + SpellDamage(Target, DoTType, DotMinVal) + end +end + + +function remove(Caster, Target, DmgType, MinVal, MaxVal, DoTType, DotMinVal, DotMaxVal) + +end + diff --git a/server/Spells/Mage/Sorcerer/Wizard/Incinerate.lua b/server/Spells/Mage/Sorcerer/Wizard/Incinerate.lua new file mode 100644 index 000000000..ada163f69 --- /dev/null +++ b/server/Spells/Mage/Sorcerer/Wizard/Incinerate.lua @@ -0,0 +1,30 @@ +--[[ + Script Name : Spells/Mage/Sorcerer/Wizard/Incinerate.lua + Script Author : Zcoretri + Script Date : 2013.07.12 07:08:48 + Script Purpose : + : +--]] + +function cast(Caster, Target, DoTType, MinVal, MaxVal) + if MaxVal ~= nil and MinVal < MaxVal then + SpellDamage(Target, DoTType, math.random(MinVal, MaxVal)) + else + SpellDamage(Target, DoTType, MinVal) + end +end + +function tick(Caster, Target, DoTType, MinVal, MaxVal) + if MaxVal ~= nil and MinVal < MaxVal then + SpellDamage(Target, DoTType, math.random(MinVal, MaxVal)) + else + SpellDamage(Target, DoTType, MinVal) + end +end + +function remove(Caster, Target, DoTType, MinVal, MaxVal) + +end + + + diff --git a/server/Spells/Mage/Sorcerer/Wizard/LightningShock.lua b/server/Spells/Mage/Sorcerer/Wizard/LightningShock.lua new file mode 100644 index 000000000..d1d72cadb --- /dev/null +++ b/server/Spells/Mage/Sorcerer/Wizard/LightningShock.lua @@ -0,0 +1,55 @@ +--[[ + Script Name : dd_dot.lua + Script Purpose : Generic damage + 1 effect script + Script Author : John Adams + Script Date : 2008.12.02 +--]] + +function cast(Caster, Target, DDType, MinDDVal, MaxDDVal, EffectType, DamageType, MinEffectVal, MaxEffectVal) + + -- DD component + if MaxDDVal ~= nil and MinDDVal < MaxDDVal then + dmgAmount = math.random(MinDDVal, MaxDDVal) + SpellDamage(Target, DDType, dmgAmount) + --AddHate(Caster, Target, dmgAmount) + else + SpellDamage(Target, DDType, MinDDVal) + --AddHate(Caster, Target, MinDDVal) + end + + -- Effect component - only process this code if there is an EffectType param + if EffectType ~= nil then + + -- Determine if there is a range to effect values + if MaxEffectVal ~= nil and MinEffectVal < MaxEffectVal then + EffectValue = math.random(MinEffectVal, MaxEffectVal) + else + EffectValue = MinEffectVal + end + + -- Determine EffectType - either a DamageType or a String value passed as param 4 + if EffectType == "heal" then + ModifyHP(Caster, EffectValue) + else + SpellDamage(Target, DamageType, EffectValue) + end + + end + +end + +function tick(Caster, Target, DDType, MinDDVal, MaxDDVal, EffectType, DamageType, MinEffectVal, MaxEffectVal) + + if MaxEffectVal ~= nil and MinEffectVal < MaxEffectVal then + EffectValue = math.random(MinEffectVal, MaxEffectVal) + else + EffectValue = MinEffectVal + end + + if EffectType == "heal" then + ModifyHP(Caster, EffectValue) + else + SpellDamage(Target, DamageType, EffectValue) + end + +end diff --git a/server/Spells/Mage/Sorcerer/Wizard/MagmaChamber.lua b/server/Spells/Mage/Sorcerer/Wizard/MagmaChamber.lua new file mode 100644 index 000000000..cce9e1c65 --- /dev/null +++ b/server/Spells/Mage/Sorcerer/Wizard/MagmaChamber.lua @@ -0,0 +1,27 @@ +--[[ + Script Name : Spells/Mage/Sorcerer/Wizard/MagmaChamber.lua + Script Author : Zcoretri + Script Date : 2013.06.12 09:12:10 + Script Purpose : + : +--]] + +-- Resistibility increases against targets higher than level 29. + +function cast(Caster, Target, DmgType, MinVal, MaxVal) + if MaxVal ~= nil and MinVal < MaxVal then + SpellDamage(Target, DmgType, math.random(MinVal, MaxVal)) + else + SpellDamage(Target, DmgType, MinVal) + end + + if not IsEpic(Target) then + AddControlEffect(Target, 4) + end +end + +function remove(Caster, Target) + RemoveControlEffect(Target, 4) +end + + diff --git a/server/Spells/Mage/Sorcerer/Wizard/MailofFrost.lua b/server/Spells/Mage/Sorcerer/Wizard/MailofFrost.lua new file mode 100644 index 000000000..06a175420 --- /dev/null +++ b/server/Spells/Mage/Sorcerer/Wizard/MailofFrost.lua @@ -0,0 +1,27 @@ +--[[ + Script Name : Spells/Mage/Sorcerer/Wizard/MailofFrost.lua + Script Author : John Adams + Script Date : 2013.08.11 07:08:56 + Script Purpose : + : +--]] + +function cast(Caster, Target) + -- code to cast the spell + Say(Caster, "Whoops! Guess this is not implemented yet!") + +-- Info from spell_display_effects (remove from script when done) +-- When target falls below 30% health this spell will cast Frost Ward on target. Lasts for 12.0 seconds. +-- Wards caster against 729 points of all damage +-- Grants a total of 1 trigger of the spell. + +end + +function tick(Caster, Target) + -- code to process each call_frequency (tick) set in spell_tiers +end + +function remove(Caster, Target) + -- code to remove the spell +end + diff --git a/server/Spells/Mage/Sorcerer/Wizard/ManaIntromission.lua b/server/Spells/Mage/Sorcerer/Wizard/ManaIntromission.lua new file mode 100644 index 000000000..d9d43ac8c --- /dev/null +++ b/server/Spells/Mage/Sorcerer/Wizard/ManaIntromission.lua @@ -0,0 +1,13 @@ +--[[ + Script Name : Spells/Mage/Sorcerer/Wizard/ManaIntromission.lua + Script Author : neatz09 + Script Date : 2019.10.08 03:10:36 + Script Purpose : + : +--]] + +-- Increases power of target by 136 + +function cast(Caster, Target, MinHeal) + SpellHeal("Power", MinHeal) +end diff --git a/server/Spells/Mage/Sorcerer/Wizard/NumbingCold.lua b/server/Spells/Mage/Sorcerer/Wizard/NumbingCold.lua new file mode 100644 index 000000000..4ac479c48 --- /dev/null +++ b/server/Spells/Mage/Sorcerer/Wizard/NumbingCold.lua @@ -0,0 +1,24 @@ +--[[ + Script Name : Spells/Mage/Sorcerer/Wizard/NumbingCold.lua + Script Author : John Adams + Script Date : 2013.08.11 07:08:25 + Script Purpose : + : +--]] + +function cast(Caster, Target) + -- code to cast the spell + Say(Caster, "Whoops! Guess this is not implemented yet!") + +-- Info from spell_display_effects (remove from script when done) + +end + +function tick(Caster, Target) + -- code to process each call_frequency (tick) set in spell_tiers +end + +function remove(Caster, Target) + -- code to remove the spell +end + diff --git a/server/Spells/Mage/Sorcerer/Wizard/Portal.lua b/server/Spells/Mage/Sorcerer/Wizard/Portal.lua new file mode 100644 index 000000000..98044f5bb --- /dev/null +++ b/server/Spells/Mage/Sorcerer/Wizard/Portal.lua @@ -0,0 +1,11 @@ +--[[ + Script Name : Spells/Mage/Sorcerer/Wizard/Portal.lua + Script Author : neatz09 + Script Date : 2019.10.11 04:10:04 + Script Purpose : + : +--]] + +function cast(Caster, Target) + Evac() +end \ No newline at end of file diff --git a/server/Spells/Mage/Sorcerer/Wizard/Protoflame.lua b/server/Spells/Mage/Sorcerer/Wizard/Protoflame.lua new file mode 100644 index 000000000..46d73cd8c --- /dev/null +++ b/server/Spells/Mage/Sorcerer/Wizard/Protoflame.lua @@ -0,0 +1,25 @@ +--[[ + Script Name : Spells/Mage/Sorcerer/Wizard/Protoflame.lua + Script Author : John Adams + Script Date : 2013.08.11 07:08:49 + Script Purpose : + : +--]] + +function cast(Caster, Target) + -- code to cast the spell + Say(Caster, "Whoops! Guess this is not implemented yet!") + +-- Info from spell_display_effects (remove from script when done) +-- Summons a limited pet to aid the caster + +end + +function tick(Caster, Target) + -- code to process each call_frequency (tick) set in spell_tiers +end + +function remove(Caster, Target) + -- code to remove the spell +end + diff --git a/server/Spells/Mage/Sorcerer/Wizard/RaysofDisintegration.lua b/server/Spells/Mage/Sorcerer/Wizard/RaysofDisintegration.lua new file mode 100644 index 000000000..fb72944cd --- /dev/null +++ b/server/Spells/Mage/Sorcerer/Wizard/RaysofDisintegration.lua @@ -0,0 +1,17 @@ +--[[ + Script Name : Spells/Mage/Sorcerer/Wizard/RaysofDisintegration.lua + Script Author : neatz09 + Script Date : 2019.09.23 02:09:08 + Script Purpose : + : +--]] + +-- Inflicts 2744 - 4115 heat damage on target + +function cast(Caster, Target, DmgType, MinVal, MaxVal) + if MaxVal ~= nil and MinVal < MaxVal then + SpellDamage(Target, DmgType, math.random(MinVal, MaxVal)) + else + SpellDamage(Target, DmgType, MinVal) + end +end diff --git a/server/Spells/Mage/Sorcerer/Wizard/RingofIce.lua b/server/Spells/Mage/Sorcerer/Wizard/RingofIce.lua new file mode 100644 index 000000000..1b678fe37 --- /dev/null +++ b/server/Spells/Mage/Sorcerer/Wizard/RingofIce.lua @@ -0,0 +1,32 @@ +--[[ + Script Name : Spells/Mage/Sorcerer/Wizard/RingofIce.lua + Script Author : John Adams + Script Date : 2013.08.11 07:08:59 + Script Purpose : + : +--]] + +function cast(Caster, Target) + -- code to cast the spell + Say(Caster, "Whoops! Guess this is not implemented yet!") + +-- Info from spell_display_effects (remove from script when done) +-- Roots target encounter +-- Applies Icy Grasp on termination. Lasts for 12.0 seconds. +-- Slows target by 34.2% +-- 5% chance to dispel when target receives hostile action +-- 5% chance to dispel when target takes damage +-- 20% chance to dispel when target takes damage +-- Does not affect Epic targets +-- Resistibility increases against targets higher than level 29. + +end + +function tick(Caster, Target) + -- code to process each call_frequency (tick) set in spell_tiers +end + +function remove(Caster, Target) + -- code to remove the spell +end + diff --git a/server/Spells/Mage/Sorcerer/Wizard/RosBlade.lua b/server/Spells/Mage/Sorcerer/Wizard/RosBlade.lua new file mode 100644 index 000000000..c3788dff7 --- /dev/null +++ b/server/Spells/Mage/Sorcerer/Wizard/RosBlade.lua @@ -0,0 +1,11 @@ +--[[ + Script Name : Spells/Mage/Sorcerer/Wizard/RosBlade.lua + Script Author : neatz09 + Script Date : 2019.10.10 10:10:48 + Script Purpose : + : +--]] + +-- Info from spell_display_effects (remove from script when done) +-- On a combat hit this spell may cast Flametongue on target of attack. Lasts for 3.0 seconds. Triggers about 5.0 times per minute. +-- Inflicts 3 - 4 heat damage on target instantly and every second diff --git a/server/Spells/Mage/Sorcerer/Wizard/Shackle.lua b/server/Spells/Mage/Sorcerer/Wizard/Shackle.lua new file mode 100644 index 000000000..bfa6528ea --- /dev/null +++ b/server/Spells/Mage/Sorcerer/Wizard/Shackle.lua @@ -0,0 +1,43 @@ +--[[ + Script Name : Spells/Mage/Sorcerer/Wizard/Shackle.lua + Script Author : Zcoretri redone by Cynnar + Script Date : 2013.13.12 19:08:55 redone on 2016.26.09 21:05:55 + Script Purpose : + : +--]] + +function precast(Caster, Target) + -- Does not affect Epic targets + if IsEpic(Target) then + return false, 43 + end + + return true +end + +function cast(Caster, Target) + -- Roots target + SetSpeedMultiplier(Target, 0) + + -- 15% chance to dispel when target takes damage + AddProc(Target, 2, 15.0) + + -- Resistibility increases against targets higher than level 34. + +end + +function proc(Caster, Target, Type) + if Type == 2 then + CancelSpell() + end +end + +function remove(Caster, Target) + -- code to remove the spell + SetSpeedMultiplier(Target, 1.0) + + -- Applies Root in termination. Lasts for 10.0 seconds. + -- Slows target by X% + -- 5% chance to dispel when target receives hostile action + -- 5% chance to dispel when target takes damage +end diff --git a/server/Spells/Mage/Sorcerer/Wizard/Snow-filledSteps.lua b/server/Spells/Mage/Sorcerer/Wizard/Snow-filledSteps.lua new file mode 100644 index 000000000..a8053831c --- /dev/null +++ b/server/Spells/Mage/Sorcerer/Wizard/Snow-filledSteps.lua @@ -0,0 +1,26 @@ +--[[ + Script Name : Spells/Mage/Sorcerer/Wizard/Snow-filledSteps.lua + Script Author : John Adams + Script Date : 2013.08.11 07:08:25 + Script Purpose : + : +--]] + +function cast(Caster, Target) + -- code to cast the spell + Say(Caster, "Whoops! Guess this is not implemented yet!") + +-- Info from spell_display_effects (remove from script when done) +-- Grants See Invisibility to group members (AE) +-- Grants Fish Vision to group members (AE) + +end + +function tick(Caster, Target) + -- code to process each call_frequency (tick) set in spell_tiers +end + +function remove(Caster, Target) + -- code to remove the spell +end + diff --git a/server/Spells/Mage/Sorcerer/Wizard/SolarFlare.lua b/server/Spells/Mage/Sorcerer/Wizard/SolarFlare.lua new file mode 100644 index 000000000..d456eeacf --- /dev/null +++ b/server/Spells/Mage/Sorcerer/Wizard/SolarFlare.lua @@ -0,0 +1,15 @@ +--[[ + Script Name : Spells/Mage/Sorcerer/Wizard/SolarFlare.lua + Script Author : Zcoretri + Script Date : 2013.06.12 09:12:10 + Script Purpose : + : +--]] + +function cast(Caster, Target, DmgType, MinDmg, MaxDmg) + if MaxDmg ~= nil and MinDmg < MaxDmg then + SpellDamage(Target, DmgType, math.random(MinDmg, MaxDmg)) + else + SpellDamage(Target, DmgType, MinDmg) + end +end diff --git a/server/Spells/Mage/Sorcerer/Wizard/SolarFlareX.lua b/server/Spells/Mage/Sorcerer/Wizard/SolarFlareX.lua new file mode 100644 index 000000000..d456eeacf --- /dev/null +++ b/server/Spells/Mage/Sorcerer/Wizard/SolarFlareX.lua @@ -0,0 +1,15 @@ +--[[ + Script Name : Spells/Mage/Sorcerer/Wizard/SolarFlare.lua + Script Author : Zcoretri + Script Date : 2013.06.12 09:12:10 + Script Purpose : + : +--]] + +function cast(Caster, Target, DmgType, MinDmg, MaxDmg) + if MaxDmg ~= nil and MinDmg < MaxDmg then + SpellDamage(Target, DmgType, math.random(MinDmg, MaxDmg)) + else + SpellDamage(Target, DmgType, MinDmg) + end +end diff --git a/server/Spells/Mage/Sorcerer/Wizard/StormingTempest.lua b/server/Spells/Mage/Sorcerer/Wizard/StormingTempest.lua new file mode 100644 index 000000000..a14d458ed --- /dev/null +++ b/server/Spells/Mage/Sorcerer/Wizard/StormingTempest.lua @@ -0,0 +1,30 @@ +--[[ + Script Name : Spells/Mage/Sorcerer/Wizard/StormingTempest.lua + Script Author : John Adams + Script Date : 2013.08.11 07:08:06 + Script Purpose : + : +--]] + +function cast(Caster, Target) + -- code to cast the spell + Say(Caster, "Whoops! Guess this is not implemented yet!") + +-- Info from spell_display_effects (remove from script when done) +-- Applies Knockdown. Lasts for 1.5 seconds. +-- Stuns target +-- Throws target back +-- Blurs vision of target +-- Does not affect Epic targets +-- Inflicts 7 - 8 magic damage on target instantly and every 8 seconds + +end + +function tick(Caster, Target) + -- code to process each call_frequency (tick) set in spell_tiers +end + +function remove(Caster, Target) + -- code to remove the spell +end + diff --git a/server/Spells/Mage/Sorcerer/Wizard/StormofLightning.lua b/server/Spells/Mage/Sorcerer/Wizard/StormofLightning.lua new file mode 100644 index 000000000..5de1568bc --- /dev/null +++ b/server/Spells/Mage/Sorcerer/Wizard/StormofLightning.lua @@ -0,0 +1,27 @@ +--[[ + Script Name : Spells/Mage/Sorcerer/Wizard/StormOfLightning.lua + Script Author : Zcoretri + Script Date : 2013.09.12 21:42:48 + Script Purpose : + : +--]] + +function cast(Caster, Target, DoTType, MinVal, MaxVal) + if MaxVal ~= nil and MinVal < MaxVal then + SpellDamage(Target, DoTType, math.random(MinVal, MaxVal)) + else + SpellDamage(Target, DoTType, MinVal) + end +end + +function tick(Caster, Target, DoTType, MinVal, MaxVal) + if MaxVal ~= nil and MinVal < MaxVal then + SpellDamage(Target, DoTType, math.random(MinVal, MaxVal)) + else + SpellDamage(Target, DoTType, MinVal) + end +end + +function remove(Caster, Target, DoTType, MinVal, MaxVal) + +end diff --git a/server/Spells/Mage/Sorcerer/Wizard/SurgeofRo.lua b/server/Spells/Mage/Sorcerer/Wizard/SurgeofRo.lua new file mode 100644 index 000000000..721df4521 --- /dev/null +++ b/server/Spells/Mage/Sorcerer/Wizard/SurgeofRo.lua @@ -0,0 +1,26 @@ +--[[ + Script Name : Spells/Mage/Sorcerer/Wizard/SurgeofRo.lua + Script Author : John Adams + Script Date : 2013.08.11 07:08:10 + Script Purpose : + : +--]] + +function cast(Caster, Target) + -- code to cast the spell + Say(Caster, "Whoops! Guess this is not implemented yet!") + +-- Info from spell_display_effects (remove from script when done) +-- On a hostile spell cast this spell will cast Flame Surge on target of spell. Lasts for 3.0 seconds. +-- Inflicts 16 - 20 heat damage on target instantly and every second + +end + +function tick(Caster, Target) + -- code to process each call_frequency (tick) set in spell_tiers +end + +function remove(Caster, Target) + -- code to remove the spell +end + diff --git a/server/Spells/Mage/Sorcerer/Wizard/TyrantsPact.lua b/server/Spells/Mage/Sorcerer/Wizard/TyrantsPact.lua new file mode 100644 index 000000000..6668a4e44 --- /dev/null +++ b/server/Spells/Mage/Sorcerer/Wizard/TyrantsPact.lua @@ -0,0 +1,17 @@ +--[[ + Script Name : Spells/Mage/Sorcerer/Wizard/TyrantsPact.lua + Script Author : Zcoretri + Script Date : 2013.13.12 19:30:32 + Script Purpose : Increases INT and STR of group members by BonusAmt + : +--]] + +function cast(Caster, Target, BonusAmt) + AddSpellBonus(Target, 4, BonusAmt) -- INT + AddSpellBonus(Target, 0, BonusAmt) -- STR +end + +function remove(Caster, Target, BonusAmt) + RemoveSpellBonus(Target) +end + diff --git a/server/Spells/Mage/Sorcerer/Wizard/VitalTransfer.lua b/server/Spells/Mage/Sorcerer/Wizard/VitalTransfer.lua new file mode 100644 index 000000000..75ca492d7 --- /dev/null +++ b/server/Spells/Mage/Sorcerer/Wizard/VitalTransfer.lua @@ -0,0 +1,14 @@ +--[[ + Script Name : Spells/Mage/Sorcerer/Wizard/VitalTransfer.lua + Script Author : Zcoretri + Script Date : 2013.13.12 22:04:42 + Script Purpose : + : +--]] + +function cast(Caster, Target, Amount) + SpellHeal("Power", Amount) + Say(Caster, "Missing Health conversion") + +end + diff --git a/server/Spells/Mage/Summoner/AqueousSoul.lua b/server/Spells/Mage/Summoner/AqueousSoul.lua new file mode 100644 index 000000000..4d14d9f9e --- /dev/null +++ b/server/Spells/Mage/Summoner/AqueousSoul.lua @@ -0,0 +1,18 @@ +--[[ + Script Name : Spells/Mage/Summoner/AqueousSoul.lua + Script Author : neatz09 + Script Date : 2019.10.16 10:10:22 + Script Purpose : + : +--]] + +function cast(Caster, Target) +-- Allows target to breathe under water +BreatheUnderwater(Target, true) +end + + + +function remove(Caster, Target) +BreatheUnderwater(Target, False) +end diff --git a/server/Spells/Mage/Summoner/Conjuror/AeryHunter.lua b/server/Spells/Mage/Summoner/Conjuror/AeryHunter.lua new file mode 100644 index 000000000..ac5bff559 --- /dev/null +++ b/server/Spells/Mage/Summoner/Conjuror/AeryHunter.lua @@ -0,0 +1,24 @@ +--[[ + Script Name : Spells/Mage/Summoner/Conjuror/AeryHunter.lua + Script Author : John Adams + Script Date : 2013.08.11 08:08:01 + Script Purpose : + : +--]] + +function cast(Caster, Target) + -- code to cast the spell + Say(Caster, "Whoops! Guess this is not implemented yet!") + +-- Info from spell_display_effects (remove from script when done) + +end + +function tick(Caster, Target) + -- code to process each call_frequency (tick) set in spell_tiers +end + +function remove(Caster, Target) + -- code to remove the spell +end + diff --git a/server/Spells/Mage/Summoner/Conjuror/Antagonize.lua b/server/Spells/Mage/Summoner/Conjuror/Antagonize.lua new file mode 100644 index 000000000..3e5f779d0 --- /dev/null +++ b/server/Spells/Mage/Summoner/Conjuror/Antagonize.lua @@ -0,0 +1,30 @@ +--[[ + Script Name : Spells/Mage/Summoner/Conjuror/Antagonize.lua + Script Author : Jabantiz + Script Date : 2014.03.12 05:03:04 + Script Purpose : + : +--]] + +function cast(Caster, Target, Pot, Atk, DefSkills, OffSkills) + -- Increases Potency of target by 1.8% + AddSpellBonus(Target, 659, Pot) + + -- Increases Attack Speed of target by 16.5 + AddSpellBonus(Target, 617, Atk) + + -- Decreases Defense and Parry of target by 4.9 + AddSkillBonus(Target, GetSkillIDByName("Defense"), DefSkills) + AddSkillBonus(Target, GetSkillIDByName("Parry"), DefSkills) + + -- Increases Piercing, Slashing and Crushing of target by 3.0 + AddSkillBonus(Target, GetSkillIDByName("Piercing"), OffSkills) + AddSkillBonus(Target, GetSkillIDByName("Slashing"), OffSkills) + AddSkillBonus(Target, GetSkillIDByName("Crushing"), OffSkills) + +end + +function remove(Caster, Target) + RemoveSpellBonus(Target) + RemoveSkillBonus(Target) +end diff --git a/server/Spells/Mage/Summoner/Conjuror/AqueousSwarm.lua b/server/Spells/Mage/Summoner/Conjuror/AqueousSwarm.lua new file mode 100644 index 000000000..18479661e --- /dev/null +++ b/server/Spells/Mage/Summoner/Conjuror/AqueousSwarm.lua @@ -0,0 +1,18 @@ +--[[ + Script Name : Spells/Mage/Summoner/Necromancer/ServileSoul.lua + Script Author : neatz09 + Script Date : 2019.10.16 09:10:19 + Script Purpose : + : +--]] + +-- Summons 3 limited pets to aid the caster +function cast(Caster, Target, PetID) + local x = GetX(Caster) + local y = GetY(Caster) + local z = GetZ(Caster) + + SummonDumbFirePet(Caster, Target, PetID, x, y, z) + SummonDumbFirePet(Caster, Target, PetID, x, y, z) + SummonDumbFirePet(Caster, Target, PetID, x, y, z) +end \ No newline at end of file diff --git a/server/Spells/Mage/Summoner/Conjuror/BlazingAvatar.lua b/server/Spells/Mage/Summoner/Conjuror/BlazingAvatar.lua new file mode 100644 index 000000000..7df36bb4a --- /dev/null +++ b/server/Spells/Mage/Summoner/Conjuror/BlazingAvatar.lua @@ -0,0 +1,24 @@ +--[[ + Script Name : Spells/Mage/Summoner/Conjuror/BlazingAvatar.lua + Script Author : John Adams + Script Date : 2013.08.11 08:08:51 + Script Purpose : + : +--]] + +function cast(Caster, Target) + -- code to cast the spell + Say(Caster, "Whoops! Guess this is not implemented yet!") + +-- Info from spell_display_effects (remove from script when done) + +end + +function tick(Caster, Target) + -- code to process each call_frequency (tick) set in spell_tiers +end + +function remove(Caster, Target) + -- code to remove the spell +end + diff --git a/server/Spells/Mage/Summoner/Conjuror/Burn.lua b/server/Spells/Mage/Summoner/Conjuror/Burn.lua new file mode 100644 index 000000000..d1d72cadb --- /dev/null +++ b/server/Spells/Mage/Summoner/Conjuror/Burn.lua @@ -0,0 +1,55 @@ +--[[ + Script Name : dd_dot.lua + Script Purpose : Generic damage + 1 effect script + Script Author : John Adams + Script Date : 2008.12.02 +--]] + +function cast(Caster, Target, DDType, MinDDVal, MaxDDVal, EffectType, DamageType, MinEffectVal, MaxEffectVal) + + -- DD component + if MaxDDVal ~= nil and MinDDVal < MaxDDVal then + dmgAmount = math.random(MinDDVal, MaxDDVal) + SpellDamage(Target, DDType, dmgAmount) + --AddHate(Caster, Target, dmgAmount) + else + SpellDamage(Target, DDType, MinDDVal) + --AddHate(Caster, Target, MinDDVal) + end + + -- Effect component - only process this code if there is an EffectType param + if EffectType ~= nil then + + -- Determine if there is a range to effect values + if MaxEffectVal ~= nil and MinEffectVal < MaxEffectVal then + EffectValue = math.random(MinEffectVal, MaxEffectVal) + else + EffectValue = MinEffectVal + end + + -- Determine EffectType - either a DamageType or a String value passed as param 4 + if EffectType == "heal" then + ModifyHP(Caster, EffectValue) + else + SpellDamage(Target, DamageType, EffectValue) + end + + end + +end + +function tick(Caster, Target, DDType, MinDDVal, MaxDDVal, EffectType, DamageType, MinEffectVal, MaxEffectVal) + + if MaxEffectVal ~= nil and MinEffectVal < MaxEffectVal then + EffectValue = math.random(MinEffectVal, MaxEffectVal) + else + EffectValue = MinEffectVal + end + + if EffectType == "heal" then + ModifyHP(Caster, EffectValue) + else + SpellDamage(Target, DamageType, EffectValue) + end + +end diff --git a/server/Spells/Mage/Summoner/Conjuror/CallofTheHero.lua b/server/Spells/Mage/Summoner/Conjuror/CallofTheHero.lua new file mode 100644 index 000000000..08bd3d572 --- /dev/null +++ b/server/Spells/Mage/Summoner/Conjuror/CallofTheHero.lua @@ -0,0 +1,26 @@ +--[[ + Script Name : Spells/Mage/Summoner/Conjuror/CallofTheHero.lua + Script Author : John Adams + Script Date : 2013.08.11 08:08:09 + Script Purpose : + : +--]] + +function cast(Caster, Target) + -- code to cast the spell + Say(Caster, "Whoops! Guess this is not implemented yet!") + +-- Info from spell_display_effects (remove from script when done) +-- Teleports target to caster +-- This effect cannot be cast during combat + +end + +function tick(Caster, Target) + -- code to process each call_frequency (tick) set in spell_tiers +end + +function remove(Caster, Target) + -- code to remove the spell +end + diff --git a/server/Spells/Mage/Summoner/Conjuror/CatsEye.lua b/server/Spells/Mage/Summoner/Conjuror/CatsEye.lua new file mode 100644 index 000000000..edafd010c --- /dev/null +++ b/server/Spells/Mage/Summoner/Conjuror/CatsEye.lua @@ -0,0 +1,26 @@ +--[[ + Script Name : Spells/Mage/Summoner/Conjuror/CatsEye.lua + Script Author : John Adams + Script Date : 2013.08.11 08:08:00 + Script Purpose : + : +--]] + +function cast(Caster, Target) + -- code to cast the spell + Say(Caster, "Whoops! Guess this is not implemented yet!") + +-- Info from spell_display_effects (remove from script when done) +-- Grants See Invisibility to group members (AE) +-- Grants Sonic Vision to group members (AE) + +end + +function tick(Caster, Target) + -- code to process each call_frequency (tick) set in spell_tiers +end + +function remove(Caster, Target) + -- code to remove the spell +end + diff --git a/server/Spells/Mage/Summoner/Conjuror/Communion.lua b/server/Spells/Mage/Summoner/Conjuror/Communion.lua new file mode 100644 index 000000000..032a28baa --- /dev/null +++ b/server/Spells/Mage/Summoner/Conjuror/Communion.lua @@ -0,0 +1,25 @@ +--[[ + Script Name : Spells/Mage/Summoner/Conjuror/Communion.lua + Script Author : John Adams + Script Date : 2013.08.11 08:08:17 + Script Purpose : + : +--]] + +function cast(Caster, Target) + -- code to cast the spell + Say(Caster, "Whoops! Guess this is not implemented yet!") + +-- Info from spell_display_effects (remove from script when done) +-- Summons three powerful planar beings to attack the conjuror's enemies. + +end + +function tick(Caster, Target) + -- code to process each call_frequency (tick) set in spell_tiers +end + +function remove(Caster, Target) + -- code to remove the spell +end + diff --git a/server/Spells/Mage/Summoner/Conjuror/ConjurorsPact.lua b/server/Spells/Mage/Summoner/Conjuror/ConjurorsPact.lua new file mode 100644 index 000000000..82d63055b --- /dev/null +++ b/server/Spells/Mage/Summoner/Conjuror/ConjurorsPact.lua @@ -0,0 +1,38 @@ +--[[ + Script Name : Spells/Mage/Summoner/Conjuror/ConjurorsPact.lua + Script Author : Jabantiz + Script Date : 2014.03.12 06:03:31 + Script Purpose : + : +--]] + +function cast(Caster, Target, BonusAmt) + -- When damaged this spell has a 25% chance to cast Exposed Elements on target's attacker. Lasts for 20.0 seconds. + AddProc(Target, 2, 25.0) + + -- On any combat or spell hit this spell may cast Exposed Elements on target of attack. Lasts for 20.0 seconds. Triggers about 5.0 times per minute. + AddProc(Target, 1, 25.0) +end + +function proc(Caster, Target, Type, BonusAmt) + if Type == 1 or Type == 2 then + -- When damaged this spell has a 25% chance to cast Exposed Elements on target's attacker. Lasts for 20.0 seconds. + -- Decreases Mitigation of target vs elemental and arcane damage by 141 + local active = GetTempVariable(Target, "CONJURORS_PACT_PROC_ACTIVE") + if active == nil or active == "False" then + SetTempVariable(Target, "CONJURORS_PACT_PROC_ACTIVE", "True") + AddSpellBonus(Target, 201, BonusAmt) + AddSpellBonus(Target, 203, BonusAmt) + AddSpellTimer(20000, "RemoveProcEffect", Caster, Target) + end + end +end + +function RemoveProcEffect(Caster, Target) + SetTempVariable(Target, "CONJURORS_PACT_PROC_ACTIVE", "False") + RemoveSpellBonus(Target) +end + +function remove(Caster, Target) + RemoveProc(Target) +end diff --git a/server/Spells/Mage/Summoner/Conjuror/CrystalBlast.lua b/server/Spells/Mage/Summoner/Conjuror/CrystalBlast.lua new file mode 100644 index 000000000..8a8daa119 --- /dev/null +++ b/server/Spells/Mage/Summoner/Conjuror/CrystalBlast.lua @@ -0,0 +1,18 @@ +--[[ + Script Name : Spells/Mage/Summoner/Conjuror/CrystalBlast.lua + Script Author : John Adams + Script Date : 2013.11.20 05:11:53 + Script Purpose : + : +--]] + +function cast(Caster, Target, DmgType, MinVal, MaxVal) + + -- Inflicts 11 - 15 magic damage on target + if MaxVal ~= nil and MinVal < MaxVal then + SpellDamage(Target, DmgType, math.random(MinVal, MaxVal)) + else + SpellDamage(Target, DmgType, MinVal) + end + +end diff --git a/server/Spells/Mage/Summoner/Conjuror/CrystalBlastX.lua b/server/Spells/Mage/Summoner/Conjuror/CrystalBlastX.lua new file mode 100644 index 000000000..efbbeb8dd --- /dev/null +++ b/server/Spells/Mage/Summoner/Conjuror/CrystalBlastX.lua @@ -0,0 +1,25 @@ +--[[ + Script Name : Spells/Mage/Summoner/Conjuror/CrystalBlastX.lua + Script Author : John Adams + Script Date : 2013.08.11 08:08:46 + Script Purpose : + : +--]] + +function cast(Caster, Target) + -- code to cast the spell + Say(Caster, "Whoops! Guess this is not implemented yet!") + +-- Info from spell_display_effects (remove from script when done) +-- Inflicts 595 - 804 magic damage on target + +end + +function tick(Caster, Target) + -- code to process each call_frequency (tick) set in spell_tiers +end + +function remove(Caster, Target) + -- code to remove the spell +end + diff --git a/server/Spells/Mage/Summoner/Conjuror/DefensiveHaven.lua b/server/Spells/Mage/Summoner/Conjuror/DefensiveHaven.lua new file mode 100644 index 000000000..461b9e4f7 --- /dev/null +++ b/server/Spells/Mage/Summoner/Conjuror/DefensiveHaven.lua @@ -0,0 +1,49 @@ +--[[ + Script Name : Spells/Mage/Summoner/Conjuror/DefensiveHaven.lua + Script Author : Jabantiz + Script Date : 2014.03.12 05:03:47 + Script Purpose : + : +--]] + +function cast(Caster, Target, AtkSpeed, MaxHP, HateGain, Agg, Resist, HateMin, HateMax, Ward) + -- Decreases Attack Speed of target by 25.0 + AddSpellBonus(Target, 617, AtkSpeed) + + -- Increases Max Health of target by 9.0% + AddSpellBonus(Target, 606, MaxHP) + + -- Increases Hate Gain of target by 11.9% + AddSpellBonus(Target, 624, HateGain) + + -- Increases Aggression of target by 1.9 + AddSkillBonus(Target, GetSkillIDByName("Aggression"), Agg) + + -- Increases Mitigation of target vs arcane damage by 126 + AddSpellBonus(Target, 203, Resist) + + -- Increases Mitigation of target vs elemental damage by 126 + AddSpellBonus(Target, 201, Resist) + + -- Increases Mitigation of target vs noxious damage by 126 + AddSpellBonus(Target, 202, Resist) + + -- On any combat or spell hit this spell will cast Shout on target of attack. + -- Increases Threat to target encounter by 35 - 42 + AddProc(Target, 1, 100) + + -- Wards target against 13 points of all damage + AddWard(Ward, 1) +end + +function proc(Caster, Target, Type, AtkSpeed, MaxHP, HateGain, Agg, Resist, HateMin, HateMax, Ward) + if Type == 1 then + AddHate(Caster, Target, math.random(HateMin, HateMax)) + end +end + +function remove(Caster, Target) + RemoveSpellBonus(Target) + RemoveSkillBonus(Target) + RemoveProc(Target) +end diff --git a/server/Spells/Mage/Summoner/Conjuror/EarthenAvatar.lua b/server/Spells/Mage/Summoner/Conjuror/EarthenAvatar.lua new file mode 100644 index 000000000..995c60553 --- /dev/null +++ b/server/Spells/Mage/Summoner/Conjuror/EarthenAvatar.lua @@ -0,0 +1,10 @@ +--[[ + Script Name : Spells/Mage/Summoner/Conjuror/EarthenAvatar.lua + Script Author : John Adams + Script Date : 2013.11.20 05:11:54 + Script Purpose : + : +--]] + +-- Info from spell_display_effects (remove from script when done) +-- Summons a pet earthen avatar diff --git a/server/Spells/Mage/Summoner/Conjuror/Earthquake.lua b/server/Spells/Mage/Summoner/Conjuror/Earthquake.lua new file mode 100644 index 000000000..495436e34 --- /dev/null +++ b/server/Spells/Mage/Summoner/Conjuror/Earthquake.lua @@ -0,0 +1,33 @@ +--[[ + Script Name : Spells/Mage/Summoner/Conjuror/Earthquake.lua + Script Author : Jabantiz + Script Date : 2014.03.12 06:03:26 + Script Purpose : + : +--]] + +function cast(Caster, Target, DmgType, MinVal, MaxVal) + -- Inflicts 92 - 276 magic damage on targets in Area of Effect + if MaxVal ~= nil and MinVal < MaxVal then + SpellDamage(Target, DmgType, math.random(MinVal, MaxVal)) + else + SpellDamage(Target, DmgType, MinVal) + end + + -- Applies Knockdown on termination. Lasts for 1.5 seconds. + -- Throws target back + -- Stuns target + -- Blurs vision of target + -- Does not affect Epic targets + if not IsEpic(Target) then + Knockback(Caster, Target, 1500) + RemoveControlEffect(Target, 4) + BlurVision(Target, 1.0) + AddSpellTimer(1500, "RemoveKnockback") + end +end + +function RemoveKnockback(Caster, Target) + RemoveControlEffect(Target, 4) + BlurVision(Target, 0.0) +end diff --git a/server/Spells/Mage/Summoner/Conjuror/ElementalAspect.lua b/server/Spells/Mage/Summoner/Conjuror/ElementalAspect.lua new file mode 100644 index 000000000..cfead7314 --- /dev/null +++ b/server/Spells/Mage/Summoner/Conjuror/ElementalAspect.lua @@ -0,0 +1,19 @@ +--[[ + Script Name : Spells/Mage/Summoner/Conjuror/ElementalAspect.lua + Script Author : Jabantiz + Script Date : 2014.03.12 04:03:59 + Script Purpose : + : +--]] + +function cast(Caster, Target, Power, Resist) + -- Increases Max Power of group members (AE) by 20.8 + AddSpellBonus(Target, 619, Power) + + -- Increases Mitigation of group members (AE) vs elemental damage by 79 + AddSpellBonus(Target, 201, Resist) +end + +function remove(Caster, Target) + RemoveSpellBonus(Target) +end diff --git a/server/Spells/Mage/Summoner/Conjuror/ElementalMastery.lua b/server/Spells/Mage/Summoner/Conjuror/ElementalMastery.lua new file mode 100644 index 000000000..07d4691eb --- /dev/null +++ b/server/Spells/Mage/Summoner/Conjuror/ElementalMastery.lua @@ -0,0 +1,34 @@ +--[[ + Script Name : Spells/Mage/Summoner/Conjuror/ElementalMastery.lua + Script Author : John Adams + Script Date : 2013.08.11 08:08:25 + Script Purpose : + : +--]] + +function cast(Caster, Target) + -- code to cast the spell + Say(Caster, "Whoops! Guess this is not implemented yet!") + +-- Info from spell_display_effects (remove from script when done) +-- On a hostile spell cast this spell has a 12% chance to cast Inferno on target of spell. Lasts for 12.0 seconds. +-- Inflicts 592 - 888 heat damage on target +-- Inflicts 194 - 292 heat damage on target every 3 seconds +-- Applies Inferno. Lasts for 12.0 seconds. +-- Increases Crit Chance of pet by 20.0 +-- Prevents AOE (except when direct) +-- Cannot be modified except by direct means +-- Improves the damage of the Conjuror's pet. +-- Increases the base damage of hostile spells by 10% +-- Cannot be modified except by direct means + +end + +function tick(Caster, Target) + -- code to process each call_frequency (tick) set in spell_tiers +end + +function remove(Caster, Target) + -- code to remove the spell +end + diff --git a/server/Spells/Mage/Summoner/Conjuror/ElementalUnity.lua b/server/Spells/Mage/Summoner/Conjuror/ElementalUnity.lua new file mode 100644 index 000000000..2b88b0122 --- /dev/null +++ b/server/Spells/Mage/Summoner/Conjuror/ElementalUnity.lua @@ -0,0 +1,24 @@ +--[[ + Script Name : Spells/Mage/Summoner/Conjuror/ElementalUnity.lua + Script Author : John Adams + Script Date : 2013.08.11 08:08:58 + Script Purpose : + : +--]] + +function cast(Caster, Target) + -- code to cast the spell + Say(Caster, "Whoops! Guess this is not implemented yet!") + +-- Info from spell_display_effects (remove from script when done) + +end + +function tick(Caster, Target) + -- code to process each call_frequency (tick) set in spell_tiers +end + +function remove(Caster, Target) + -- code to remove the spell +end + diff --git a/server/Spells/Mage/Summoner/Conjuror/EssenceShift.lua b/server/Spells/Mage/Summoner/Conjuror/EssenceShift.lua new file mode 100644 index 000000000..de7800ee3 --- /dev/null +++ b/server/Spells/Mage/Summoner/Conjuror/EssenceShift.lua @@ -0,0 +1,15 @@ +--[[ + Script Name : Spells/Mage/Summoner/Conjuror/EssenceShift.lua + Script Author : Jabantiz + Script Date : 2014.03.12 06:03:02 + Script Purpose : + : +--]] + +function cast(Caster, Target, DmgType, Dmg, HealType, Power) + -- Inflicts 122 magic damage on target + SpellDamage(Target, DmgType, Dmg, Dmg, 2, 1) + + -- Increases power of caster by 29 + SpellHeal("Power", Power, Power, Caster, 2, 1) +end diff --git a/server/Spells/Mage/Summoner/Conjuror/FieryAnnihilation.lua b/server/Spells/Mage/Summoner/Conjuror/FieryAnnihilation.lua new file mode 100644 index 000000000..6ce81b7c1 --- /dev/null +++ b/server/Spells/Mage/Summoner/Conjuror/FieryAnnihilation.lua @@ -0,0 +1,17 @@ +--[[ + Script Name : Spells/Mage/Summoner/Conjuror/FieryAnnihilation.lua + Script Author : Jabantiz + Script Date : 2014.03.12 04:03:07 + Script Purpose : + : +--]] + +function cast(Caster, Target, DmgType, Dmg, DoTDmgType, DoTDmg) + -- Inflicts 15 heat damage on target + SpellDamage(Target, DmgType, Dmg) +end + +function tick(Caster, Target, DmgType, Dmg, DoTDmgType, DoTDmg) + -- Inflicts 3 heat damage on target every 4 seconds + SpellDamage(Target, DoTDmgType, DoTDmg) +end \ No newline at end of file diff --git a/server/Spells/Mage/Summoner/Conjuror/FieryMagician.lua b/server/Spells/Mage/Summoner/Conjuror/FieryMagician.lua new file mode 100644 index 000000000..5a8cdd198 --- /dev/null +++ b/server/Spells/Mage/Summoner/Conjuror/FieryMagician.lua @@ -0,0 +1,24 @@ +--[[ + Script Name : Spells/Mage/Summoner/Conjuror/FieryMagician.lua + Script Author : John Adams + Script Date : 2013.08.11 08:08:45 + Script Purpose : + : +--]] + +function cast(Caster, Target) + -- code to cast the spell + Say(Caster, "Whoops! Guess this is not implemented yet!") + +-- Info from spell_display_effects (remove from script when done) + +end + +function tick(Caster, Target) + -- code to process each call_frequency (tick) set in spell_tiers +end + +function remove(Caster, Target) + -- code to remove the spell +end + diff --git a/server/Spells/Mage/Summoner/Conjuror/FireSeed.lua b/server/Spells/Mage/Summoner/Conjuror/FireSeed.lua new file mode 100644 index 000000000..49fa483b4 --- /dev/null +++ b/server/Spells/Mage/Summoner/Conjuror/FireSeed.lua @@ -0,0 +1,14 @@ +--[[ + Script Name : Spells/Mage/Summoner/Conjuror/FireSeed.lua + Script Author : neatz09 + Script Date : 2019.10.17 10:10:07 + Script Purpose : + : +--]] + +-- Info from spell_display_effects (remove from script when done) +-- On a combat hit this spell has a 20% chance to cast Seed of Fire on target of attack. Lasts for 16.0 seconds. +-- Inflicts 15 - 18 heat damage on target instantly and every 4 seconds +-- On death this spell will cast Blooming Flames on caster. +-- Inflicts 66 - 81 heat damage on target encounter +-- Grants a total of 1 trigger of the spell. diff --git a/server/Spells/Mage/Summoner/Conjuror/Flameshield.lua b/server/Spells/Mage/Summoner/Conjuror/Flameshield.lua new file mode 100644 index 000000000..10d20b235 --- /dev/null +++ b/server/Spells/Mage/Summoner/Conjuror/Flameshield.lua @@ -0,0 +1,24 @@ +--[[ + Script Name : Spells/Mage/Summoner/Conjuror/Flameshield.lua + Script Author : Jabantiz + Script Date : 2014.03.12 06:03:12 + Script Purpose : + : +--]] + +function cast(Caster, Target) + -- When damaged with a melee weapon this spell will cast Flameshield on target's attacker. + AddProc(Target, 4, 100) +end + +function proc(Caster, Target, Type, DmgType, Dmg) + if Type == 4 then + -- When damaged with a melee weapon this spell will cast Flameshield on target's attacker. + -- Inflicts 10 heat damage on target + ProcDamage(Caster, Target, "Flameshield", DmgType, Dmg) + end +end + +function remove(Caster, Target) + RemoveProc(Target) +end diff --git a/server/Spells/Mage/Summoner/Conjuror/GeoticRune.lua b/server/Spells/Mage/Summoner/Conjuror/GeoticRune.lua new file mode 100644 index 000000000..8ed07fc2e --- /dev/null +++ b/server/Spells/Mage/Summoner/Conjuror/GeoticRune.lua @@ -0,0 +1,23 @@ +--[[ + Script Name : Spells/Mage/Summoner/Conjuror/GeoticRune.lua + Script Author : Jabantiz + Script Date : 2014.03.12 05:03:22 + Script Purpose : + : +--]] + +function cast(Caster, Target, Defense, Resist) + -- Increases Defense of group members' pets (AE) by 2.0 + -- AddSkillBonus(Target, GetSkillIDByName("Defense"), Defense) + + -- Increases Mitigation of group members (AE) vs all damage by 38 + AddSpellBonus(Target, 200, Resist) + AddSpellBonus(Target, 201, Resist) + AddSpellBonus(Target, 202, Resist) + AddSpellBonus(Target, 203, Resist) +end + +function remove(Caster, Target) + RemoveSkillBonus(Target) + RemoveSpellBonus(Target) +end diff --git a/server/Spells/Mage/Summoner/Conjuror/HealServant.lua b/server/Spells/Mage/Summoner/Conjuror/HealServant.lua new file mode 100644 index 000000000..23b877323 --- /dev/null +++ b/server/Spells/Mage/Summoner/Conjuror/HealServant.lua @@ -0,0 +1,18 @@ +--[[ + Script Name : Spells/Mage/Summoner/Conjuror/HealServant.lua + Script Author : Jabantiz + Script Date : 2014.03.12 03:03:07 + Script Purpose : + : +--]] + +function cast(Caster, Target, Heal, CureLevels) + -- Heals target for 17 + SpellHeal("Heal", Heal) + + -- Dispels 6 levels of any hostile effects on target + CureByType(1, 1, "", CureLevels) + CureByType(1, 2, "", CureLevels) + CureByType(1, 3, "", CureLevels) + CureByType(1, 4, "", CureLevels) +end diff --git a/server/Spells/Mage/Summoner/Conjuror/IceStorm.lua b/server/Spells/Mage/Summoner/Conjuror/IceStorm.lua new file mode 100644 index 000000000..fdf26d839 --- /dev/null +++ b/server/Spells/Mage/Summoner/Conjuror/IceStorm.lua @@ -0,0 +1,24 @@ +--[[ + Script Name : dd_snare.lua + Script Purpose : Generic damage + Snare effect script + Script Author : John Adams + Script Date : 2008.12.04 +--]] + +function cast(Caster, Target, DDType, MinDDVal, MaxDDVal, SnareAmount) + + -- DD component + if MaxDDVal ~= nil and MinDDVal < MaxDDVal then + SpellDamage(Target, DDType, math.random(MinDDVal, MaxDDVal)) + else + SpellDamage(Target, DDType, MinDDVal) + end + + -- Snare component + local slow = 100.0 - SnareAmount + SetSpeedMultiplier(Target, slow) +end + +function remove(Caster, Target) + SetSpeedMultiplier(Target, 1.0) +end \ No newline at end of file diff --git a/server/Spells/Mage/Summoner/Conjuror/MastersIntervention.lua b/server/Spells/Mage/Summoner/Conjuror/MastersIntervention.lua new file mode 100644 index 000000000..e5c47fbd1 --- /dev/null +++ b/server/Spells/Mage/Summoner/Conjuror/MastersIntervention.lua @@ -0,0 +1,24 @@ +--[[ + Script Name : Spells/Mage/Summoner/Conjuror/MastersIntervention.lua + Script Author : John Adams + Script Date : 2013.08.11 08:08:42 + Script Purpose : + : +--]] + +function cast(Caster, Target) + -- code to cast the spell + Say(Caster, "Whoops! Guess this is not implemented yet!") + +-- Info from spell_display_effects (remove from script when done) + +end + +function tick(Caster, Target) + -- code to process each call_frequency (tick) set in spell_tiers +end + +function remove(Caster, Target) + -- code to remove the spell +end + diff --git a/server/Spells/Mage/Summoner/Conjuror/NajenasEssenceSummoning.lua b/server/Spells/Mage/Summoner/Conjuror/NajenasEssenceSummoning.lua new file mode 100644 index 000000000..a4a59232a --- /dev/null +++ b/server/Spells/Mage/Summoner/Conjuror/NajenasEssenceSummoning.lua @@ -0,0 +1,14 @@ +--[[ + Script Name : Spells/Mage/Summoner/Conjuror/NajenasEssenceSummoning.lua + Script Author : Neatz09 + Script Date : 10/16/19 + Script Purpose : + : +--]] +function cast(Caster, Target, ItemID) + -- Summon 1 Shard of Esssence (Apprentice) + if IsPlayer(Target) and HasItem(Target, ItemID) then +RemoveItem(Target, ItemID) +end +SummonItem(Target, ItemID) +end \ No newline at end of file diff --git a/server/Spells/Mage/Summoner/Conjuror/Petrify.lua b/server/Spells/Mage/Summoner/Conjuror/Petrify.lua new file mode 100644 index 000000000..b5f63f901 --- /dev/null +++ b/server/Spells/Mage/Summoner/Conjuror/Petrify.lua @@ -0,0 +1,29 @@ +--[[ + Script Name : Spells/Mage/Summoner/Conjuror/Petrify.lua + Script Author : Jabantiz + Script Date : 2014.03.12 06:03:32 + Script Purpose : + : +--]] + +function cast(Caster, Target, DmgType, MinVal, MaxVal) + -- Inflicts 118 - 144 magic damage on target + if MaxVal ~= nil and MinVal < MaxVal then + SpellDamage(Target, DmgType, math.random(MinVal, MaxVal)) + else + SpellDamage(Target, DmgType, MinVal) + end + + -- Stuns target + -- If Target is not Epic + if not IsEpic(Target) then + AddControlEffect(Target, 4) + end + + -- Resistibility increases against targets higher than level 29. +end + +function remove(Caster, Target) + RemoveControlEffect(Target, 4) +end + diff --git a/server/Spells/Mage/Summoner/Conjuror/PlaneShift.lua b/server/Spells/Mage/Summoner/Conjuror/PlaneShift.lua new file mode 100644 index 000000000..01fd16a0d --- /dev/null +++ b/server/Spells/Mage/Summoner/Conjuror/PlaneShift.lua @@ -0,0 +1,24 @@ +--[[ + Script Name : Spells/Mage/Summoner/Conjuror/PlaneShift.lua + Script Author : John Adams + Script Date : 2013.08.11 08:08:50 + Script Purpose : + : +--]] + +function cast(Caster, Target) + -- code to cast the spell + Say(Caster, "Whoops! Guess this is not implemented yet!") + +-- Info from spell_display_effects (remove from script when done) + +end + +function tick(Caster, Target) + -- code to process each call_frequency (tick) set in spell_tiers +end + +function remove(Caster, Target) + -- code to remove the spell +end + diff --git a/server/Spells/Mage/Summoner/Conjuror/Quicksand.lua b/server/Spells/Mage/Summoner/Conjuror/Quicksand.lua new file mode 100644 index 000000000..a9b388734 --- /dev/null +++ b/server/Spells/Mage/Summoner/Conjuror/Quicksand.lua @@ -0,0 +1,41 @@ +--[[ + Script Name : Spells/Mage/Summoner/Conjuror/Quicksand.lua + Script Author : Jabantiz + Script Date : 2014.03.12 04:03:35 + Script Purpose : + : +--]] + +-- Resistibility increases against targets higher than level 29. +function precast(Caster, Target) + -- Does not affect Epic targets + if IsEpic(Target) then + return false, 43 + end + + return true +end + +function cast(Caster, Target) + -- Roots target + SetSpeedMultiplier(Target, 0) + + -- 15% chance to dispel when target takes damage + AddProc(Target, 2, 15.0) +end + +function proc(Caster, Target, Type) + if Type == 2 then + CancelSpell() + end +end + +function remove(Caster, Target) + SetSpeedMultiplier(Target, 1.0) + + -- Applies Quicksand on termination. Lasts for 10.0 seconds. + -- Slows target by 27.9% + -- 5% chance to dispel when target receives hostile action + -- 5% chance to dispel when target takes damage +end + diff --git a/server/Spells/Mage/Summoner/Conjuror/RoaringFlames.lua b/server/Spells/Mage/Summoner/Conjuror/RoaringFlames.lua new file mode 100644 index 000000000..087af2ff9 --- /dev/null +++ b/server/Spells/Mage/Summoner/Conjuror/RoaringFlames.lua @@ -0,0 +1,25 @@ +--[[ + Script Name : Spells/Mage/Summoner/Conjuror/RoaringFlames.lua + Script Author : John Adams + Script Date : 2013.08.11 08:08:25 + Script Purpose : + : +--]] + +function cast(Caster, Target) + -- code to cast the spell + Say(Caster, "Whoops! Guess this is not implemented yet!") + +-- Info from spell_display_effects (remove from script when done) +-- Summons a limited pet to aid the caster + +end + +function tick(Caster, Target) + -- code to process each call_frequency (tick) set in spell_tiers +end + +function remove(Caster, Target) + -- code to remove the spell +end + diff --git a/server/Spells/Mage/Summoner/Conjuror/Sacrifice.lua b/server/Spells/Mage/Summoner/Conjuror/Sacrifice.lua new file mode 100644 index 000000000..91cc0d203 --- /dev/null +++ b/server/Spells/Mage/Summoner/Conjuror/Sacrifice.lua @@ -0,0 +1,13 @@ +--[[ + Script Name : Spells/Mage/Summoner/Conjuror/Sacrifice.lua + Script Author : neatz09 + Script Date : 2019.10.15 01:10:02 + Script Purpose : + : +--]] + +-- Info from spell_display_effects (remove from script when done) +-- Applies Sacrifice. +-- Increases power of group members (AE) by 64 +-- Heals group members (AE) for 224 +-- Stuns target diff --git a/server/Spells/Mage/Summoner/Conjuror/SandBlast.lua b/server/Spells/Mage/Summoner/Conjuror/SandBlast.lua new file mode 100644 index 000000000..d1d72cadb --- /dev/null +++ b/server/Spells/Mage/Summoner/Conjuror/SandBlast.lua @@ -0,0 +1,55 @@ +--[[ + Script Name : dd_dot.lua + Script Purpose : Generic damage + 1 effect script + Script Author : John Adams + Script Date : 2008.12.02 +--]] + +function cast(Caster, Target, DDType, MinDDVal, MaxDDVal, EffectType, DamageType, MinEffectVal, MaxEffectVal) + + -- DD component + if MaxDDVal ~= nil and MinDDVal < MaxDDVal then + dmgAmount = math.random(MinDDVal, MaxDDVal) + SpellDamage(Target, DDType, dmgAmount) + --AddHate(Caster, Target, dmgAmount) + else + SpellDamage(Target, DDType, MinDDVal) + --AddHate(Caster, Target, MinDDVal) + end + + -- Effect component - only process this code if there is an EffectType param + if EffectType ~= nil then + + -- Determine if there is a range to effect values + if MaxEffectVal ~= nil and MinEffectVal < MaxEffectVal then + EffectValue = math.random(MinEffectVal, MaxEffectVal) + else + EffectValue = MinEffectVal + end + + -- Determine EffectType - either a DamageType or a String value passed as param 4 + if EffectType == "heal" then + ModifyHP(Caster, EffectValue) + else + SpellDamage(Target, DamageType, EffectValue) + end + + end + +end + +function tick(Caster, Target, DDType, MinDDVal, MaxDDVal, EffectType, DamageType, MinEffectVal, MaxEffectVal) + + if MaxEffectVal ~= nil and MinEffectVal < MaxEffectVal then + EffectValue = math.random(MinEffectVal, MaxEffectVal) + else + EffectValue = MinEffectVal + end + + if EffectType == "heal" then + ModifyHP(Caster, EffectValue) + else + SpellDamage(Target, DamageType, EffectValue) + end + +end diff --git a/server/Spells/Mage/Summoner/Conjuror/ShardofEssence.lua b/server/Spells/Mage/Summoner/Conjuror/ShardofEssence.lua new file mode 100644 index 000000000..189894fc7 --- /dev/null +++ b/server/Spells/Mage/Summoner/Conjuror/ShardofEssence.lua @@ -0,0 +1,14 @@ +--[[ + Script Name : Spells/Mage/Summoner/Conjuror/ShardofEssence.lua + Script Author : Neatz09 + Script Date : 10/16/19 + Script Purpose : + : +--]] +function cast(Caster, Target, ItemID) + -- Summon 1 Shard of Essence (Apprentice) + if IsPlayer(Target) and HasItem(Target, ItemID) then +RemoveItem(Target, ItemID) +end +SummonItem(Target, ItemID) +end \ No newline at end of file diff --git a/server/Spells/Mage/Summoner/Conjuror/ShatteredEarth.lua b/server/Spells/Mage/Summoner/Conjuror/ShatteredEarth.lua new file mode 100644 index 000000000..5da65fad8 --- /dev/null +++ b/server/Spells/Mage/Summoner/Conjuror/ShatteredEarth.lua @@ -0,0 +1,28 @@ +--[[ + Script Name : Spells/Mage/Summoner/Conjuror/ShatteredEarth.lua + Script Author : neatz09 + Script Date : 2019.10.13 12:10:17 + Script Purpose : + : +--]] + +function cast(Caster, Target, DmgType, MinVal, MaxVal) +-- Inflicts 211 - 258 magic damage on target encounter instantly and every second +SpellDamage(Target, DmgType, MinVal, MaxVal) +-- Dazes target encounter +-- If Target is not Epic +-- Resistibility increases against targets higher than level 29. +if not IsEpic(Target) then + AddControlEffect(Target, 3) +end +end +function tick(Caster, Target, Dmgtype, MinVal, MaxVal) +-- Inflicts 211 - 258 magic damage on target encounter instantly and every second +SpellDamage(Target, DmgType, MinVal, MaxVal) +end + +function remove(Caster, Target) + RemoveControlEffect(Target, 3) + +end + diff --git a/server/Spells/Mage/Summoner/Conjuror/Sleet.lua b/server/Spells/Mage/Summoner/Conjuror/Sleet.lua new file mode 100644 index 000000000..c59c76ceb --- /dev/null +++ b/server/Spells/Mage/Summoner/Conjuror/Sleet.lua @@ -0,0 +1,42 @@ +--[[ + Script Name : dd_snare.lua + Script Purpose : Generic damage + Snare effect script + Script Author : John Adams + Script Date : 2008.12.04 +--]] + +function cast(Caster, Target, DDType, MinDDVal, MaxDDVal, SnareAmount, DispelChance) + + -- DD component + if MaxDDVal ~= nil and MinDDVal < MaxDDVal then + SpellDamage(Target, DDType, math.random(MinDDVal, MaxDDVal)) + else + SpellDamage(Target, DDType, MinDDVal) + end + + -- Snare component + OriginalSpeed = GetSpeed(Target) + newSpeed = OriginalSpeed - (OriginalSpeed * (SnareAmount / 100)) + + if OriginalSpeed > newSpeed then + SetSpeed(Target, newSpeed) + end + +end + +function tick(Caster, Target, DDType, MinDDVal, MaxDDVal, SnareAmount, DispelChance) +--[[ + OriginalSpeed = GetSpeed(Target) + newSpeed = OriginalSpeed - (OriginalSpeed * (SnareAmount / 100)) + + if OriginalSpeed > newSpeed then + SetSpeed(Target, newSpeed) + end +--]] +end + +function remove(Caster, Target) +--[[ + SetSpeed(Target, OriginalSpeed) +--]] +end \ No newline at end of file diff --git a/server/Spells/Mage/Summoner/Conjuror/Stoneskin.lua b/server/Spells/Mage/Summoner/Conjuror/Stoneskin.lua new file mode 100644 index 000000000..3cd108ba9 --- /dev/null +++ b/server/Spells/Mage/Summoner/Conjuror/Stoneskin.lua @@ -0,0 +1,28 @@ +--[[ + Script Name : Spells/Mage/Summoner/Conjuror/Stoneskin.lua + Script Author : John Adams + Script Date : 2013.08.11 08:08:54 + Script Purpose : + : +--]] + +function cast(Caster, Target) + -- code to cast the spell + Say(Caster, "Whoops! Guess this is not implemented yet!") + +-- Info from spell_display_effects (remove from script when done) +-- Will absorb all damage. This spell will absorb a total of 3 attacks. +-- Applies Settle. +-- Decreases Threat to targets in Area of Effect by 694 +-- Must be engaged in combat + +end + +function tick(Caster, Target) + -- code to process each call_frequency (tick) set in spell_tiers +end + +function remove(Caster, Target) + -- code to remove the spell +end + diff --git a/server/Spells/Mage/Summoner/Conjuror/VehementSkin.lua b/server/Spells/Mage/Summoner/Conjuror/VehementSkin.lua new file mode 100644 index 000000000..f8bac8250 --- /dev/null +++ b/server/Spells/Mage/Summoner/Conjuror/VehementSkin.lua @@ -0,0 +1,24 @@ +--[[ + Script Name : Spells/Mage/Summoner/Conjuror/VehementSkin.lua + Script Author : John Adams + Script Date : 2013.08.11 08:08:57 + Script Purpose : + : +--]] + +function cast(Caster, Target) + -- code to cast the spell + Say(Caster, "Whoops! Guess this is not implemented yet!") + +-- Info from spell_display_effects (remove from script when done) + +end + +function tick(Caster, Target) + -- code to process each call_frequency (tick) set in spell_tiers +end + +function remove(Caster, Target) + -- code to remove the spell +end + diff --git a/server/Spells/Mage/Summoner/Conjuror/WindsofVelious.lua b/server/Spells/Mage/Summoner/Conjuror/WindsofVelious.lua new file mode 100644 index 000000000..7f4697b38 --- /dev/null +++ b/server/Spells/Mage/Summoner/Conjuror/WindsofVelious.lua @@ -0,0 +1,27 @@ +--[[ + Script Name : Spells/Mage/Summoner/Conjuror/WindsofVelious.lua + Script Author : John Adams + Script Date : 2013.08.11 08:08:37 + Script Purpose : + : +--]] + +function cast(Caster, Target) + -- code to cast the spell + Say(Caster, "Whoops! Guess this is not implemented yet!") + +-- Info from spell_display_effects (remove from script when done) +-- Slows target by 75.0% +-- Interrupts target +-- Inflicts 92 - 112 cold damage on target instantly and every 4 seconds + +end + +function tick(Caster, Target) + -- code to process each call_frequency (tick) set in spell_tiers +end + +function remove(Caster, Target) + -- code to remove the spell +end + diff --git a/server/Spells/Mage/Summoner/Invisibility.lua b/server/Spells/Mage/Summoner/Invisibility.lua new file mode 100644 index 000000000..c69eda43d --- /dev/null +++ b/server/Spells/Mage/Summoner/Invisibility.lua @@ -0,0 +1,32 @@ +--[[ + Script Name : Spells/Mage/Summoner/Invisibility.lua + Script Author : theFoof + Script Date : 2013.1.16 08:08:28 + Script Purpose : + : +--]] + +function precast(Caster) + return not IsInCombat(Caster) +end + +function cast(Caster, Target) +-- Grants invisibility to target +-- Suspends target's movement speed enhancements +-- Grants invisibility to pet +-- Suspends pet's movement speed enhancements +-- Dispelled when target takes damage +-- This effect cancels during combat + + Stealth(2) + if GetPet(Target) ~= nil then + Stealth(2, GetPet(Target)) + elseif GetCharmedPet(Target) then + Stealth(2, GetCharmedPet(Target)) + end +end + +function remove(Caster, Target) + RemoveInvis() +end + diff --git a/server/Spells/Mage/Summoner/MinionTranslocation.lua b/server/Spells/Mage/Summoner/MinionTranslocation.lua new file mode 100644 index 000000000..bff9f2922 --- /dev/null +++ b/server/Spells/Mage/Summoner/MinionTranslocation.lua @@ -0,0 +1,25 @@ +--[[ + Script Name : Spells/Mage/Summoner/MinionTranslocation.lua + Script Author : John Adams + Script Date : 2013.08.11 08:08:41 + Script Purpose : + : +--]] + +function cast(Caster, Target) + -- code to cast the spell + Say(Caster, "Whoops! Guess this is not implemented yet!") + +-- Info from spell_display_effects (remove from script when done) +-- Instantly change places with your summoned minion + +end + +function tick(Caster, Target) + -- code to process each call_frequency (tick) set in spell_tiers +end + +function remove(Caster, Target) + -- code to remove the spell +end + diff --git a/server/Spells/Mage/Summoner/Necromancer/AwakenGrave.lua b/server/Spells/Mage/Summoner/Necromancer/AwakenGrave.lua new file mode 100644 index 000000000..bc69c6f3e --- /dev/null +++ b/server/Spells/Mage/Summoner/Necromancer/AwakenGrave.lua @@ -0,0 +1,25 @@ +--[[ + Script Name : Spells/Mage/Summoner/Necromancer/AwakenGrave.lua + Script Author : John Adams + Script Date : 2013.08.11 08:08:16 + Script Purpose : + : +--]] + +function cast(Caster, Target) + -- code to cast the spell + Say(Caster, "Whoops! Guess this is not implemented yet!") + +-- Info from spell_display_effects (remove from script when done) +-- Summons a limited pet to aid the caster + +end + +function tick(Caster, Target) + -- code to process each call_frequency (tick) set in spell_tiers +end + +function remove(Caster, Target) + -- code to remove the spell +end + diff --git a/server/Spells/Mage/Summoner/Necromancer/BlightedHorde.lua b/server/Spells/Mage/Summoner/Necromancer/BlightedHorde.lua new file mode 100644 index 000000000..34ca6f4a1 --- /dev/null +++ b/server/Spells/Mage/Summoner/Necromancer/BlightedHorde.lua @@ -0,0 +1,19 @@ +--[[ + Script Name : Spells/Mage/Summoner/Necromancer/BlightedHorde.lua + Script Author : neatz09 + Script Date : 2019.10.16 09:10:30 + Script Purpose : + : +--]] + +-- Info from spell_display_effects (remove from script when done) +-- Summons 3 limited pets to aid the caster +function cast(Caster, Target) + local x = GetX(Caster) + local y = GetY(Caster) + local z = GetZ(Caster) + + SummonDumbFirePet(Caster, Target, PetID, x, y, z) + SummonDumbFirePet(Caster, Target, PetID, x, y, z) + SummonDumbFirePet(Caster, Target, PetID, x, y, z) +end \ No newline at end of file diff --git a/server/Spells/Mage/Summoner/Necromancer/Bloodcloud.lua b/server/Spells/Mage/Summoner/Necromancer/Bloodcloud.lua new file mode 100644 index 000000000..b610cc381 --- /dev/null +++ b/server/Spells/Mage/Summoner/Necromancer/Bloodcloud.lua @@ -0,0 +1,15 @@ +--[[ + Script Name : Spells/Mage/Summoner/Necromancer/Bloodcloud.lua + Script Author : + Script Date : 2013.12.08 02:12:43 + Script Purpose : + : +--]] + +function cast(Caster, Target, HealVal, DmgType, DmgVal) + -- Heals caster for 75 + SpellHeal("Heal", HealVal, 0, Caster) + + -- Inflicts 184 disease damage on targets in Area of Effect + SpellDamage(Target, DmgType, DmgVal) +end diff --git a/server/Spells/Mage/Summoner/Necromancer/Bloodcoil.lua b/server/Spells/Mage/Summoner/Necromancer/Bloodcoil.lua new file mode 100644 index 000000000..46a230855 --- /dev/null +++ b/server/Spells/Mage/Summoner/Necromancer/Bloodcoil.lua @@ -0,0 +1,25 @@ +--[[ + Script Name : Spells/Mage/Summoner/Necromancer/Bloodcoil.lua + Script Author : Jabantiz + Script Date : 2013.12.07 10:12:29 + Script Purpose : + : +--]] + +-- Inflicts 5 - 6 disease damage on target instantly and every 4 seconds + +function cast(Caster, Target, DoTType, MinVal, MaxVal) + if MaxVal ~= nil and MinVal < MaxVal then + SpellDamage(Target, DoTType, math.random(MinVal, MaxVal)) + else + SpellDamage(Target, DoTType, MinVal) + end +end + +function tick(Caster, Target, DoTType, MinVal, MaxVal) + if MaxVal ~= nil and MinVal < MaxVal then + SpellDamage(Target, DoTType, math.random(MinVal, MaxVal)) + else + SpellDamage(Target, DoTType, MinVal) + end +end diff --git a/server/Spells/Mage/Summoner/Necromancer/BloodyRitual.lua b/server/Spells/Mage/Summoner/Necromancer/BloodyRitual.lua new file mode 100644 index 000000000..69f917e9b --- /dev/null +++ b/server/Spells/Mage/Summoner/Necromancer/BloodyRitual.lua @@ -0,0 +1,20 @@ +--[[ + Script Name : Spells/Mage/Summoner/Necromancer/BloodyRitual.lua + Script Author : Jabantiz + Script Date : 2013.12.08 12:12:38 + Script Purpose : + : +--]] + +-- Inflicts 21 magic damage on target instantly and every 4 seconds +-- Increases power of caster by 6 instantly and every 4 seconds + +function cast(Caster, Target, dmgType, dmg, heal) + SpellDamage(Target, dmgType, dmg) + SpellHeal("Heal", heal) +end + +function tick(Caster, Target, dmgType, dmg, heal) + SpellDamage(Target, dmgType, dmg) + SpellHeal("Heal", heal) +end diff --git a/server/Spells/Mage/Summoner/Necromancer/ChainsofTorment.lua b/server/Spells/Mage/Summoner/Necromancer/ChainsofTorment.lua new file mode 100644 index 000000000..a6b822a9b --- /dev/null +++ b/server/Spells/Mage/Summoner/Necromancer/ChainsofTorment.lua @@ -0,0 +1,45 @@ +--[[ + Script Name : Spells/Mage/Summoner/Necromancer/ChainsofTorment.lua + Script Author : Cynnar + Script Date : 2016.09.21 19:19:47 + Script Purpose : + : +--]] + +function precast(Caster, Target) + -- Does not affect Epic targets + if IsEpic(Target) then + return false, 43 + end + + return true +end + +function cast(Caster, Target, Snare) + -- Roots target + SetSpeedMultiplier(Target, Snare) + + -- 15% chance to dispel when target takes damage + AddProc(Target, 2, 15.0) + + -- Resistibility increases against targets higher than level 34. + +end + +function proc(Caster, Target, Type) + if Type == 2 then + CancelSpell() + end +end + +function remove(Caster, Target) + -- code to remove the spell + SetSpeedMultiplier(Target, 1.0) + +-- Applies Chains of Torment on termination. Lasts for 5.0 seconds. +-- Makes target afraid +-- Slows target by 13.9% +-- Resistibility increases against targets higher than level 34. +-- 30% chance to dispel when target takes damage +end + diff --git a/server/Spells/Mage/Summoner/Necromancer/Coil.lua b/server/Spells/Mage/Summoner/Necromancer/Coil.lua new file mode 100644 index 000000000..977307f18 --- /dev/null +++ b/server/Spells/Mage/Summoner/Necromancer/Coil.lua @@ -0,0 +1,39 @@ +--[[ + Script Name : dot.lua + Script Purpose : Generic Damage Over Time script + Script Author : John Adams + Script Date : 2008.12.04 +--]] + +function cast(Caster, Target, DOTType, MinDOTVal, MaxDOTVal) + + -- DOT component (instant damage) + if MaxDOTVal ~= nil and MinDOTVal < MaxDOTVal then + + SpellDamage(Target, DOTType, math.random(MinDOTVal, MaxDOTVal)) + + else + + SpellDamage(Target, DOTType, MinDOTVal) + + end + +end + +function tick(Caster, Target, DOTType, MinDOTVal, MaxDOTVal) + + if MaxDOTVal ~= nil and MinDOTVal < MaxDOTVal then + + SpellDamage(Target, DOTType, math.random(MinDOTVal, MaxDOTVal)) + + else + + SpellDamage(Target, DOTType, MinDOTVal) + + end + +end + +function remove(Caster, Target, DOTType, MinDOTVal, MaxDOTVal) + +end diff --git a/server/Spells/Mage/Summoner/Necromancer/Consumption.lua b/server/Spells/Mage/Summoner/Necromancer/Consumption.lua new file mode 100644 index 000000000..0ceb8dd2b --- /dev/null +++ b/server/Spells/Mage/Summoner/Necromancer/Consumption.lua @@ -0,0 +1,24 @@ +--[[ + Script Name : Spells/Mage/Summoner/Necromancer/Consumption.lua + Script Author : John Adams + Script Date : 2013.08.11 08:08:00 + Script Purpose : + : +--]] + +function cast(Caster, Target) + -- code to cast the spell + Say(Caster, "Whoops! Guess this is not implemented yet!") + +-- Info from spell_display_effects (remove from script when done) + +end + +function tick(Caster, Target) + -- code to process each call_frequency (tick) set in spell_tiers +end + +function remove(Caster, Target) + -- code to remove the spell +end + diff --git a/server/Spells/Mage/Summoner/Necromancer/ControlUndead.lua b/server/Spells/Mage/Summoner/Necromancer/ControlUndead.lua new file mode 100644 index 000000000..2a4786968 --- /dev/null +++ b/server/Spells/Mage/Summoner/Necromancer/ControlUndead.lua @@ -0,0 +1,28 @@ +--[[ + Script Name : Spells/Mage/Summoner/Necromancer/ControlUndead.lua + Script Author : John Adams + Script Date : 2013.08.11 08:08:40 + Script Purpose : + : +--]] + +function cast(Caster, Target) + -- code to cast the spell + Say(Caster, "Whoops! Guess this is not implemented yet!") + +-- Info from spell_display_effects (remove from script when done) +-- Charms target +-- If outside an arena +-- Certain enemies cannot be charmed +-- Does not affect Epic targets + +end + +function tick(Caster, Target) + -- code to process each call_frequency (tick) set in spell_tiers +end + +function remove(Caster, Target) + -- code to remove the spell +end + diff --git a/server/Spells/Mage/Summoner/Necromancer/DarkHeart.lua b/server/Spells/Mage/Summoner/Necromancer/DarkHeart.lua new file mode 100644 index 000000000..7f042eecd --- /dev/null +++ b/server/Spells/Mage/Summoner/Necromancer/DarkHeart.lua @@ -0,0 +1,15 @@ +--[[ + Script Name : Spells/Mage/Summoner/Necromancer/DarkHeart.lua + Script Author : Neatz09 + Script Date : 10/16/19 + Script Purpose : + : +--]] +function cast(Caster, Target, ItemID) + -- Summon 1 Dark Heart (Apprentice) + if IsPlayer(Target) and HasItem(Target, ItemID) then +RemoveItem(Target, ItemID) +end +SummonItem(Target, ItemID) +end + diff --git a/server/Spells/Mage/Summoner/Necromancer/DeathlyPallor.lua b/server/Spells/Mage/Summoner/Necromancer/DeathlyPallor.lua new file mode 100644 index 000000000..24bac06a6 --- /dev/null +++ b/server/Spells/Mage/Summoner/Necromancer/DeathlyPallor.lua @@ -0,0 +1,16 @@ +--[[ + Script Name : Spells/Mage/Summoner/Necromancer/DeathlyPallor.lua + Script Author : neatz09 + Script Date : 2019.10.19 05:10:27 + Script Purpose : + : +--]] + +-- Info from spell_display_effects (remove from script when done) +-- Feigns Death with 100% chance of success + +function cast(Caster, Target) +SetServerControlFlag(Target, 5, 1, 1); + ClearHate(Target) + SendMessage(Caster, "Your feign death succeeded", "yellow") +end diff --git a/server/Spells/Mage/Summoner/Necromancer/DoomingDarkness.lua b/server/Spells/Mage/Summoner/Necromancer/DoomingDarkness.lua new file mode 100644 index 000000000..927aeabe4 --- /dev/null +++ b/server/Spells/Mage/Summoner/Necromancer/DoomingDarkness.lua @@ -0,0 +1,19 @@ +--[[ + Script Name : Spells/Mage/Summoner/Necromancer/DoomingDarkness.lua + Script Author : neatz09 + Script Date : 2019.10.19 05:10:35 + Script Purpose : + : +--]] + +-- Info from spell_display_effects (remove from script when done) +-- Applies Dooming Darkness. Lasts for 24.0 seconds. +-- Applies Snare on termination. Lasts for 24.0 seconds. +-- Slows target by 30.8% +-- 5% chance to dispel when target receives hostile action +-- 5% chance to dispel when target takes damage +-- Slows target by 30.8% +-- 5% chance to dispel when target receives hostile action +-- 5% chance to dispel when target takes damage +-- Interrupts target +-- Inflicts 9 - 11 disease damage on target every 4 seconds diff --git a/server/Spells/Mage/Summoner/Necromancer/Fear.lua b/server/Spells/Mage/Summoner/Necromancer/Fear.lua new file mode 100644 index 000000000..2174969dd --- /dev/null +++ b/server/Spells/Mage/Summoner/Necromancer/Fear.lua @@ -0,0 +1,13 @@ +--[[ + Script Name : Spells/Mage/Summoner/Necromancer/Fear.lua + Script Author : neatz09 + Script Date : 2019.10.15 07:10:44 + Script Purpose : + : +--]] + +-- Info from spell_display_effects (remove from script when done) +-- Makes target afraid +-- 30% chance to dispel when target takes damage +-- Does not affect Epic targets +-- Resistibility increases against targets higher than level 29. diff --git a/server/Spells/Mage/Summoner/Necromancer/FeastingSoul.lua b/server/Spells/Mage/Summoner/Necromancer/FeastingSoul.lua new file mode 100644 index 000000000..9a92cd601 --- /dev/null +++ b/server/Spells/Mage/Summoner/Necromancer/FeastingSoul.lua @@ -0,0 +1,25 @@ +--[[ + Script Name : Spells/Mage/Summoner/Necromancer/FeastingSoul.lua + Script Author : neatz09 + Script Date : 2019.10.14 11:10:55 + Script Purpose : + : +--]] + +-- Inflicts 112 disease damage on target instantly and every 4 seconds +function cast(Caster, Target, DmgType, MinVal, MaxVal, MinHP, MinPwr) + SpellDamage(Target, DmgType, MinVal, MaxVal) +SpellHeal(Heal, MinHP, nil, Caster, 2, 1) +SpellHeal(Heal, MinPwr, nil, Caster, 2, 1) +end + + +-- Heals caster for 74 instantly and every 4 seconds +-- Increases power of caster by 37 instantly and every 4 seconds +function tick(Caster, Target, DmgType, MinVal, MaxVal, MinHP, MinPwr) +SpellDamage(Target, DmgType, MinVal, MaxVal) +SpellHeal(Heal, MinHP, nil, Caster, 2, 1) +SpellHeal(Heal, MinPwr, nil, Caster, 2, 1) +end + + diff --git a/server/Spells/Mage/Summoner/Necromancer/FlayersSoul.lua b/server/Spells/Mage/Summoner/Necromancer/FlayersSoul.lua new file mode 100644 index 000000000..ecbcb533f --- /dev/null +++ b/server/Spells/Mage/Summoner/Necromancer/FlayersSoul.lua @@ -0,0 +1,12 @@ +--[[ + Script Name : Spells/Mage/Summoner/Necromancer/FlayersSoul.lua + Script Author : neatz09 + Script Date : 2019.10.19 06:10:01 + Script Purpose : + : +--]] + +-- Info from spell_display_effects (remove from script when done) +-- Increases Max Power of target by 12.0% +-- Increases Crushing, Piercing, Ranged, Slashing, Disruption, Subjugation and Ordination of target by 18.7 +-- Increases Piercing, Slashing, Ranged and Crushing of target by 31.2 diff --git a/server/Spells/Mage/Summoner/Necromancer/GraspingBones.lua b/server/Spells/Mage/Summoner/Necromancer/GraspingBones.lua new file mode 100644 index 000000000..252493c84 --- /dev/null +++ b/server/Spells/Mage/Summoner/Necromancer/GraspingBones.lua @@ -0,0 +1,19 @@ +--[[ + Script Name : Spells/Mage/Summoner/Necromancer/GraspingBones.lua + Script Author : + Script Date : 2013.12.08 02:12:54 + Script Purpose : + : +--]] + +function cast(Caster, Target) + -- Stuns target + -- Does not affect Epic targets + if not IsEpic(Target) then + AddControlEffect(Target, 4) + end +end + +function remove(Caster, Target) + RemoveControlEffect(Target, 4) +end diff --git a/server/Spells/Mage/Summoner/Necromancer/GreaterRot.lua b/server/Spells/Mage/Summoner/Necromancer/GreaterRot.lua new file mode 100644 index 000000000..977307f18 --- /dev/null +++ b/server/Spells/Mage/Summoner/Necromancer/GreaterRot.lua @@ -0,0 +1,39 @@ +--[[ + Script Name : dot.lua + Script Purpose : Generic Damage Over Time script + Script Author : John Adams + Script Date : 2008.12.04 +--]] + +function cast(Caster, Target, DOTType, MinDOTVal, MaxDOTVal) + + -- DOT component (instant damage) + if MaxDOTVal ~= nil and MinDOTVal < MaxDOTVal then + + SpellDamage(Target, DOTType, math.random(MinDOTVal, MaxDOTVal)) + + else + + SpellDamage(Target, DOTType, MinDOTVal) + + end + +end + +function tick(Caster, Target, DOTType, MinDOTVal, MaxDOTVal) + + if MaxDOTVal ~= nil and MinDOTVal < MaxDOTVal then + + SpellDamage(Target, DOTType, math.random(MinDOTVal, MaxDOTVal)) + + else + + SpellDamage(Target, DOTType, MinDOTVal) + + end + +end + +function remove(Caster, Target, DOTType, MinDOTVal, MaxDOTVal) + +end diff --git a/server/Spells/Mage/Summoner/Necromancer/GrimSorcerer.lua b/server/Spells/Mage/Summoner/Necromancer/GrimSorcerer.lua new file mode 100644 index 000000000..31e184806 --- /dev/null +++ b/server/Spells/Mage/Summoner/Necromancer/GrimSorcerer.lua @@ -0,0 +1,21 @@ +--[[ + Script Name : Spells/Mage/Summoner/Necromancer/GrimSorcerer.lua + Script Author : John Adams + Script Date : 2013.08.11 08:08:50 + Script Purpose : + : +--]] + +function cast(Caster, Target, PetID, MaxLevel) + -- Summons a pet + SummonPet(Caster, PetID, MaxLevel) +end + +function remove(Caster, Target) + pet = GetPet(Caster) + if pet ~= nil then + DismissPet(pet) + end +end + + diff --git a/server/Spells/Mage/Summoner/Necromancer/GrislyProtection.lua b/server/Spells/Mage/Summoner/Necromancer/GrislyProtection.lua new file mode 100644 index 000000000..61dd256ba --- /dev/null +++ b/server/Spells/Mage/Summoner/Necromancer/GrislyProtection.lua @@ -0,0 +1,59 @@ +--[[ + Script Name : Spells/Mage/Summoner/Necromancer/GrislyProtection.lua + Script Author : Jabantiz + Script Date : 2013.12.08 12:12:05 + Script Purpose : + : +--]] + +function cast(Caster, Target, agg, procDmgType, procDmg, procHeal, atkSpeed, maxHP, hateGain, spellMit, procHateMin, procHateMax) + -- Increases Aggression of target by 1.9 + AddSkillBonus(Target, GetSkillByName("Aggression"), agg) + + -- Decreases Attack Speed of target by 25.0 + AddSpellBonus(Target, 617, atkSpeed) + + -- Increases Max Health of target by 9.0% + AddSpellBonus(Target, 607, maxHP) + + -- Increases Hate Gain of target by 11.9% + AddSpellBonus(Target, 624, hateGain) + + -- Increases Mitigation of target vs elemental and noxious damage by 126 + -- Increases Mitigation of target vs arcane damage by 126 + AddSpellBonus(Target, 201, spellMit) + AddSpellBonus(Target, 202, spellMit) + AddSpellBonus(Target, 203, spellMit) + + AddProc(Target, 1, 100) + AddProc(Target, 2, 100) + +end + +function proc(Caster, Target, Type, agg, procDmgType, procDmg, procHeal, atkSpeed, maxHP, hateGain, spellMit, procHateMin, procHateMax) + if Type == 1 then + -- 1 = offensive + + -- On any combat or spell hit this spell will cast Shout on target of attack. + -- Increases Threat to target encounter by 35 - 42 + if procHateMax ~= nil and procHateMin < procHateMax then + AddHate(Target, math.random(procHateMin, procHateMax)) + else + AddHate(Target, procHateMin) + end + elseif Type == 2 then + -- 2 = defensive + + -- When damaged this spell will cast Grisly Feedback on target's attacker. + -- Inflicts 7 disease damage on target + -- Heals caster for 3 + ProcDamage(Caster, Target, "Grisly Feedback", procDmgType, procDmg) + SpellHeal("Heal", procHeal, 0, Caster) + end +end + +function remove(Caster, Target) + RemoveSpellBonus(Target) + RemoveSkillBonus(Target) + RemoveProc(Target) +end diff --git a/server/Spells/Mage/Summoner/Necromancer/HowloftheDamned.lua b/server/Spells/Mage/Summoner/Necromancer/HowloftheDamned.lua new file mode 100644 index 000000000..a006c1290 --- /dev/null +++ b/server/Spells/Mage/Summoner/Necromancer/HowloftheDamned.lua @@ -0,0 +1,35 @@ +--[[ + Script Name : Spells/Mage/Summoner/Necromancer/HowloftheDamned.lua + Script Author : Jabantiz + Script Date : 2013.12.07 11:12:43 + Script Purpose : Updated 10-19-19 Neatz09 + : +--]] + +function cast(Caster, Target, atkSpeed, defPenalty, CastSkills, procDmgType, procDmg, procHeal, Focus) + -- Increases Attack Speed of target by 16.5 + AddSpellBonus(Target, 617, atkSpeed) + + -- Decreases Defense and Parry of target by 4.9 + AddSkillBonus(Target, GetSkillIDByName("Defense"), defPenalty) + AddSkillBonus(Target, GetSkillIDByName("Parry"), defPenalty) +-- Increases Subjugation and Disruption of target by 4.5 + -- Increases Focus of target by 4.5 + AddSkillBonus(Target, GetSkillIDByName("Focus"), Focus) +AddSkillBonus(Target, GetSkillIDByName("Subjugation"), CastSkills) + AddSkillBonus(Target, GetSkillIDByName("Disruption"), CastSkills) +end + +function proc(Caster, Target, Type, atkSpeed, defPenalty, focusBonus, procDmgType, procDmg, procHeal, castSkills) + -- On any combat or spell hit this spell may cast Clawing of the Soul on target of attack. Triggers about 2.0 times per minute. + -- Inflicts 49 disease damage on target + ProcDamage(Caster, Target, "Clawing of the Soul", procDmgType, procDmg) + + -- Heals caster for 10 + SpellHeal("Heal", procHeal) +end + +function remove(Caster, Target) + RemoveSpellBonus(Target) + RemoveSkillBonus(Target) +end diff --git a/server/Spells/Mage/Summoner/Necromancer/Lich.lua b/server/Spells/Mage/Summoner/Necromancer/Lich.lua new file mode 100644 index 000000000..2bcb76892 --- /dev/null +++ b/server/Spells/Mage/Summoner/Necromancer/Lich.lua @@ -0,0 +1,24 @@ +--[[ + Script Name : Spells/Mage/Summoner/Necromancer/Lich.lua + Script Author : John Adams + Script Date : 2013.08.11 08:08:45 + Script Purpose : + : +--]] + +function cast(Caster, Target) + -- code to cast the spell + Say(Caster, "Whoops! Guess this is not implemented yet!") + +-- Info from spell_display_effects (remove from script when done) + +end + +function tick(Caster, Target) + -- code to process each call_frequency (tick) set in spell_tiers +end + +function remove(Caster, Target) + -- code to remove the spell +end + diff --git a/server/Spells/Mage/Summoner/Necromancer/Lifetap.lua b/server/Spells/Mage/Summoner/Necromancer/Lifetap.lua new file mode 100644 index 000000000..5d86457e6 --- /dev/null +++ b/server/Spells/Mage/Summoner/Necromancer/Lifetap.lua @@ -0,0 +1,15 @@ +--[[ + Script Name : Spells/Mage/Summoner/Necromancer/Lifetap.lua + Script Author : + Script Date : 2013.12.08 04:12:26 + Script Purpose : + : +--]] + +function cast(Caster, Target, DmgType, Dmg, Heal) + -- Inflicts 242 disease damage on target + SpellDamage(Target, DmgType, Dmg) + + -- Heals caster for 99 + SpellHeal("Heal", Heal) +end diff --git a/server/Spells/Mage/Summoner/Necromancer/Locusts.lua b/server/Spells/Mage/Summoner/Necromancer/Locusts.lua new file mode 100644 index 000000000..977307f18 --- /dev/null +++ b/server/Spells/Mage/Summoner/Necromancer/Locusts.lua @@ -0,0 +1,39 @@ +--[[ + Script Name : dot.lua + Script Purpose : Generic Damage Over Time script + Script Author : John Adams + Script Date : 2008.12.04 +--]] + +function cast(Caster, Target, DOTType, MinDOTVal, MaxDOTVal) + + -- DOT component (instant damage) + if MaxDOTVal ~= nil and MinDOTVal < MaxDOTVal then + + SpellDamage(Target, DOTType, math.random(MinDOTVal, MaxDOTVal)) + + else + + SpellDamage(Target, DOTType, MinDOTVal) + + end + +end + +function tick(Caster, Target, DOTType, MinDOTVal, MaxDOTVal) + + if MaxDOTVal ~= nil and MinDOTVal < MaxDOTVal then + + SpellDamage(Target, DOTType, math.random(MinDOTVal, MaxDOTVal)) + + else + + SpellDamage(Target, DOTType, MinDOTVal) + + end + +end + +function remove(Caster, Target, DOTType, MinDOTVal, MaxDOTVal) + +end diff --git a/server/Spells/Mage/Summoner/Necromancer/MiragulsDarkHeartSummoning.lua b/server/Spells/Mage/Summoner/Necromancer/MiragulsDarkHeartSummoning.lua new file mode 100644 index 000000000..e37d5f165 --- /dev/null +++ b/server/Spells/Mage/Summoner/Necromancer/MiragulsDarkHeartSummoning.lua @@ -0,0 +1,15 @@ +--[[ + Script Name : Spells/Mage/Summoner/Necromancer/MiragulsDarkHeartSummoning.lua + Script Author : Neatz09 + Script Date : 10/16/19 + Script Purpose : + : +--]] +function cast(Caster, Target, ItemID) + -- Summon 1 Dark Heart (Apprentice) + if IsPlayer(Target) and HasItem(Target, ItemID) then +RemoveItem(Target, ItemID) +end +SummonItem(Target, ItemID) +end + diff --git a/server/Spells/Mage/Summoner/Necromancer/MortalityMark.lua b/server/Spells/Mage/Summoner/Necromancer/MortalityMark.lua new file mode 100644 index 000000000..e0d0da7b9 --- /dev/null +++ b/server/Spells/Mage/Summoner/Necromancer/MortalityMark.lua @@ -0,0 +1,14 @@ +--[[ + Script Name : Spells/Mage/Summoner/Necromancer/MortalityMark.lua + Script Author : neatz09 + Script Date : 2019.10.15 06:10:23 + Script Purpose : + : +--]] + +-- Info from spell_display_effects (remove from script when done) +-- Increases all damage done to target by 0.9% +-- Decreases WIS of target by 47.3 +-- Increases WIS and STA of caster by 47.3 +-- Increases Mitigation of caster vs elemental, noxious and arcane damage by 362 +-- Only affects targets level 17 and above diff --git a/server/Spells/Mage/Summoner/Necromancer/NecromanticPact.lua b/server/Spells/Mage/Summoner/Necromancer/NecromanticPact.lua new file mode 100644 index 000000000..03f287b35 --- /dev/null +++ b/server/Spells/Mage/Summoner/Necromancer/NecromanticPact.lua @@ -0,0 +1,34 @@ +--[[ + Script Name : Spells/Mage/Summoner/Necromancer/NecromanticPact.lua + Script Author : Jabantiz + Script Date : 2013.12.08 01:12:35 + Script Purpose : + : +--]] + +-- Info from spell_display_effects (remove from script when done) +-- Applies Necromantic Pact to qualifying pets. +-- When damaged this spell has a 25% chance to cast Exposed Noxious on target's attacker. Lasts for 20.0 seconds. +-- Decreases Mitigation of target vs noxious damage by 141 +-- On any combat or spell hit this spell may cast Exposed Noxious on target of attack. Lasts for 20.0 seconds. Triggers about 5.0 times per minute. +-- Decreases Mitigation of target vs noxious damage by 141 + +function cast(Caster, Target) + AddProc(Target, 1, 25) + AddProc(Target, 2, 25) +end + +function proc(Caster, Target, Type, mitValue) + if type == 1 or Type == 2 then + AddSpellBonus(Target, 202, mitValue) + AddSpellTimer(20000, "RemoveDebuff") + end +end + +function RemoveDebuff(Caster, Target) + RemoveSpellBonus(Target) +end + +function remove(Caster, Target) + RemoveProc(Target) +end diff --git a/server/Spells/Mage/Summoner/Necromancer/NecroticReconstruction.lua b/server/Spells/Mage/Summoner/Necromancer/NecroticReconstruction.lua new file mode 100644 index 000000000..617c86370 --- /dev/null +++ b/server/Spells/Mage/Summoner/Necromancer/NecroticReconstruction.lua @@ -0,0 +1,23 @@ +--[[ + Script Name : Spells/Mage/Summoner/Necromancer/NecroticReconstruction.lua + Script Author : Jabantiz + Script Date : 2013.12.07 09:12:29 + Script Purpose : + : +--]] + +function cast(Caster, Target, dispelLevels, healVal, tickHealVal) + -- Heals target for 9 + SpellHeal("Heal", healVal) + + -- Dispels 6 levels of any hostile effects on target + CureByType(1, 1, 0, dispelLevels) + CureByType(1, 2, 0, dispelLevels) + CureByType(1, 3, 0, dispelLevels) + CureByType(1, 4, 0, dispelLevels) +end + +function tick(Caster, Target, dispelLevels, healVal, tickHealVal) + -- Heals target for 1 every second + SpellHeal("Heal", tickHealVal) +end diff --git a/server/Spells/Mage/Summoner/Necromancer/Nightshade.lua b/server/Spells/Mage/Summoner/Necromancer/Nightshade.lua new file mode 100644 index 000000000..ba2114ec6 --- /dev/null +++ b/server/Spells/Mage/Summoner/Necromancer/Nightshade.lua @@ -0,0 +1,24 @@ +--[[ + Script Name : Spells/Mage/Summoner/Necromancer/Nightshade.lua + Script Author : John Adams + Script Date : 2013.08.11 08:08:03 + Script Purpose : + : +--]] + +function cast(Caster, Target) + -- code to cast the spell + Say(Caster, "Whoops! Guess this is not implemented yet!") + +-- Info from spell_display_effects (remove from script when done) + +end + +function tick(Caster, Target) + -- code to process each call_frequency (tick) set in spell_tiers +end + +function remove(Caster, Target) + -- code to remove the spell +end + diff --git a/server/Spells/Mage/Summoner/Necromancer/Pandemic.lua b/server/Spells/Mage/Summoner/Necromancer/Pandemic.lua new file mode 100644 index 000000000..b4d4113a7 --- /dev/null +++ b/server/Spells/Mage/Summoner/Necromancer/Pandemic.lua @@ -0,0 +1,25 @@ +--[[ + Script Name : Spells/Mage/Summoner/Necromancer/Pandemic.lua + Script Author : Jabantiz + Script Date : 2013.12.07 10:12:04 + Script Purpose : + : +--]] + +-- Inflicts 3 - 4 disease damage on target encounter instantly and every 3 seconds + +function cast(Caster, Target, DoTType, MinVal, MaxVal) + if MaxVal ~= nil and MinVal < MaxVal then + SpellDamage(Target, DoTType, math.random(MinVal, MaxVal)) + else + SpellDamage(Target, DoTType, MinVal) + end +end + +function tick(Caster, Target, DoTType, MinVal, MaxVal) + if MaxVal ~= nil and MinVal < MaxVal then + SpellDamage(Target, DoTType, math.random(MinVal, MaxVal)) + else + SpellDamage(Target, DoTType, MinVal) + end +end diff --git a/server/Spells/Mage/Summoner/Necromancer/PestilentSoul.lua b/server/Spells/Mage/Summoner/Necromancer/PestilentSoul.lua new file mode 100644 index 000000000..0699f1869 --- /dev/null +++ b/server/Spells/Mage/Summoner/Necromancer/PestilentSoul.lua @@ -0,0 +1,13 @@ +--[[ + Script Name : Spells/Mage/Summoner/Necromancer/PestilentSoul.lua + Script Author : neatz09 + Script Date : 2019.10.10 04:10:01 + Script Purpose : + : +--]] + +-- Inflicts 840 disease damage on targets in Area of Effect +function cast(Caster, Target, DmgType, MinVal, MaxVal) + SpellDamage(Target, DmgType, MinVal, MaxVal) + end + diff --git a/server/Spells/Mage/Summoner/Necromancer/Rending.lua b/server/Spells/Mage/Summoner/Necromancer/Rending.lua new file mode 100644 index 000000000..d829e40f4 --- /dev/null +++ b/server/Spells/Mage/Summoner/Necromancer/Rending.lua @@ -0,0 +1,19 @@ +--[[ + Script Name : Spells/Mage/Summoner/Necromancer/Rending.lua + Script Author : neatz09 + Script Date : 2019.10.19 04:10:50 + Script Purpose : + : +--]] + +-- Info from spell_display_effects (remove from script when done) +-- Applies Rending to qualifying pets. +-- On any combat or spell hit this spell may cast Berserk on caster. Lasts for 10.0 seconds. Triggers about 4.0 times per minute. +-- Increases Haste of target by 16.7 +-- Increases DPS of target by 16.7 +-- When damaged this spell has a 50% chance to cast Berserk on caster. Lasts for 10.0 seconds. +-- Increases Haste of target by 16.7 +-- Increases DPS of target by 16.7 +-- On a kill this spell will cast Berserk on caster. Lasts for 10.0 seconds. +-- Increases Haste of target by 16.7 +-- Increases DPS of target by 16.7 diff --git a/server/Spells/Mage/Summoner/Necromancer/Revivication.lua b/server/Spells/Mage/Summoner/Necromancer/Revivication.lua new file mode 100644 index 000000000..613e4682c --- /dev/null +++ b/server/Spells/Mage/Summoner/Necromancer/Revivication.lua @@ -0,0 +1,22 @@ +--[[ + Script Name : Spells/Mage/Summoner/Necromancer/Revivication.lua + Script Author : neatz09 + Script Date : 2019.10.14 11:10:32 + Script Purpose : + : +--]] + +-- Info from spell_display_effects (remove from script when done) +-- Applies Revived Sickness on termination. Lasts for 2 minutes. +-- Decreases All Attributes of target by 20.0% +-- If not between levels 1 - 6 +-- Decreases Haste of target by 20.0 +-- If not between levels 1 - 6 +-- Decreases All Attributes of target by 5.0% +-- If between levels 1 - 6 +-- Decreases Haste of target by 5.0 +-- If between levels 1 - 6 +-- Resurrects target with 13% health and power +-- If outside an arena +-- If between levels 1 - 6 +-- If outside an arena diff --git a/server/Spells/Mage/Summoner/Necromancer/SecretsofVazaelle.lua b/server/Spells/Mage/Summoner/Necromancer/SecretsofVazaelle.lua new file mode 100644 index 000000000..8db7547bf --- /dev/null +++ b/server/Spells/Mage/Summoner/Necromancer/SecretsofVazaelle.lua @@ -0,0 +1,34 @@ +--[[ + Script Name : Spells/Mage/Summoner/Necromancer/SecretsofVazaelle.lua + Script Author : John Adams + Script Date : 2013.08.11 08:08:07 + Script Purpose : + : +--]] + +function cast(Caster, Target) + -- code to cast the spell + Say(Caster, "Whoops! Guess this is not implemented yet!") + +-- Info from spell_display_effects (remove from script when done) +-- On a hostile spell cast this spell has a 12% chance to cast Poisonous Blast on target of spell. Lasts for 12.0 seconds. +-- Inflicts 786 - 1179 poison damage on target +-- Inflicts 194 - 292 poison damage on target every 3 seconds +-- Applies Poisonous Blast. Lasts for 12.0 seconds. +-- Increases Crit Chance of pet by 20.0 +-- Prevents AOE (except when direct) +-- Cannot be modified except by direct means +-- Improves the damage of the Necromancer's pet. +-- Damage over time spells increase damage with each tick. Damage ceases to increase after 5 ticks. +-- Cannot be modified except by direct means + +end + +function tick(Caster, Target) + -- code to process each call_frequency (tick) set in spell_tiers +end + +function remove(Caster, Target) + -- code to remove the spell +end + diff --git a/server/Spells/Mage/Summoner/Necromancer/ServileSoul.lua b/server/Spells/Mage/Summoner/Necromancer/ServileSoul.lua new file mode 100644 index 000000000..4c89f0991 --- /dev/null +++ b/server/Spells/Mage/Summoner/Necromancer/ServileSoul.lua @@ -0,0 +1,17 @@ +--[[ + Script Name : Spells/Mage/Summoner/Necromancer/ServileSoul.lua + Script Author : neatz09 + Script Date : 2019.10.16 09:10:19 + Script Purpose : + : +--]] + +-- Info from spell_display_effects (remove from script when done) +-- Summons a limited pet to aid the caster +function cast(Caster, Target) + local x = GetX(Caster) + local y = GetY(Caster) + local z = GetZ(Caster) + + SummonDumbFirePet(Caster, Target, PetID, x, y, z) +end \ No newline at end of file diff --git a/server/Spells/Mage/Summoner/Necromancer/SiphoningofSouls.lua b/server/Spells/Mage/Summoner/Necromancer/SiphoningofSouls.lua new file mode 100644 index 000000000..0e7499164 --- /dev/null +++ b/server/Spells/Mage/Summoner/Necromancer/SiphoningofSouls.lua @@ -0,0 +1,27 @@ +--[[ + Script Name : Spells/Mage/Summoner/Necromancer/SiphoningofSouls.lua + Script Author : John Adams + Script Date : 2013.08.11 08:08:09 + Script Purpose : + : +--]] + +function cast(Caster, Target) + -- code to cast the spell + Say(Caster, "Whoops! Guess this is not implemented yet!") + +-- Info from spell_display_effects (remove from script when done) +-- Decreases INT of target by 36.5 +-- When the target of this spell dies, the necromancer draws a random soul spell from the enemy. The soul spell can be used three times. +-- Decreases STR of target by 36.5 + +end + +function tick(Caster, Target) + -- code to process each call_frequency (tick) set in spell_tiers +end + +function remove(Caster, Target) + -- code to remove the spell +end + diff --git a/server/Spells/Mage/Summoner/Necromancer/SoothingSoul.lua b/server/Spells/Mage/Summoner/Necromancer/SoothingSoul.lua new file mode 100644 index 000000000..6e265a864 --- /dev/null +++ b/server/Spells/Mage/Summoner/Necromancer/SoothingSoul.lua @@ -0,0 +1,17 @@ +--[[ + Script Name : Spells/Mage/Summoner/Necromancer/SoothingSoul.lua + Script Author : neatz09 + Script Date : 2019.10.08 05:10:44 + Script Purpose : + : +--]] + +-- Heals target for 89 instantly and every 4 seconds + +function cast(Caster, Target, MinVal) +SpellHeal("Heal", Min) +end + +function tick(Caster, Target, MinVal) +SpellHeal("Heal", Min) +end diff --git a/server/Spells/Mage/Summoner/Necromancer/Soulrot.lua b/server/Spells/Mage/Summoner/Necromancer/Soulrot.lua new file mode 100644 index 000000000..fbde04302 --- /dev/null +++ b/server/Spells/Mage/Summoner/Necromancer/Soulrot.lua @@ -0,0 +1,24 @@ +--[[ + Script Name : Spells/Mage/Summoner/Necromancer/Soulrot.lua + Script Author : John Adams + Script Date : 2013.11.20 07:11:58 + Script Purpose : + : +--]] + +-- Inflicts 2 - 3 disease damage on target instantly and every second +function cast(Caster, Target, DoTType, MinVal, MaxVal) + if MaxVal ~= nil and MinVal < MaxVal then + SpellDamage(Target, DoTType, math.random(MinVal, MaxVal)) + else + SpellDamage(Target, DoTType, MinVal) + end +end + +function tick(Caster, Target, DoTType, MinVal, MaxVal) + if MaxVal ~= nil and MinVal < MaxVal then + SpellDamage(Target, DoTType, math.random(MinVal, MaxVal)) + else + SpellDamage(Target, DoTType, MinVal) + end +end diff --git a/server/Spells/Mage/Summoner/Necromancer/SoulrotX.lua b/server/Spells/Mage/Summoner/Necromancer/SoulrotX.lua new file mode 100644 index 000000000..25bc0dad9 --- /dev/null +++ b/server/Spells/Mage/Summoner/Necromancer/SoulrotX.lua @@ -0,0 +1,25 @@ +--[[ + Script Name : Spells/Mage/Summoner/Necromancer/SoulrotX.lua + Script Author : John Adams + Script Date : 2013.08.11 08:08:49 + Script Purpose : + : +--]] + +function cast(Caster, Target) + -- code to cast the spell + Say(Caster, "Whoops! Guess this is not implemented yet!") + +-- Info from spell_display_effects (remove from script when done) +-- Inflicts 125 - 169 disease damage on target instantly and every second + +end + +function tick(Caster, Target) + -- code to process each call_frequency (tick) set in spell_tiers +end + +function remove(Caster, Target) + -- code to remove the spell +end + diff --git a/server/Spells/Mage/Summoner/Necromancer/TeachingsoftheUnderworld.lua b/server/Spells/Mage/Summoner/Necromancer/TeachingsoftheUnderworld.lua new file mode 100644 index 000000000..25d280995 --- /dev/null +++ b/server/Spells/Mage/Summoner/Necromancer/TeachingsoftheUnderworld.lua @@ -0,0 +1,19 @@ +--[[ + Script Name : Spells/Mage/Summoner/Necromancer/TeachingsoftheUnderworld.lua + Script Author : Jabantiz + Script Date : 2013.12.08 12:12:12 + Script Purpose : + : +--]] + +-- Info from spell_display_effects (remove from script when done) +-- Increases STA and INT of group members (AE) by 9.4 + +function cast(Caster, Target, BonusAmt) + AddSpellBonus(Target, 1, BonusAmt) + AddSpellBonus(Target, 4, BonusAmt) +end + +function remove(Caster, Target) + RemoveSpellBonus(Target) +end diff --git a/server/Spells/Mage/Summoner/Necromancer/TransferLife.lua b/server/Spells/Mage/Summoner/Necromancer/TransferLife.lua new file mode 100644 index 000000000..912ec707d --- /dev/null +++ b/server/Spells/Mage/Summoner/Necromancer/TransferLife.lua @@ -0,0 +1,14 @@ +--[[ + Script Name : Spells/Mage/Summoner/Necromancer/TransferLife.lua + Script Author : neatz09 + Script Date : 2019.09.14 06:09:47 + Script Purpose : + : +--]] + +-- Heals target for 491 + +function cast(Caster, Target, Amt) + SpellHeal("Heal", Amt) +end + diff --git a/server/Spells/Mage/Summoner/Necromancer/UndeadHorde.lua b/server/Spells/Mage/Summoner/Necromancer/UndeadHorde.lua new file mode 100644 index 000000000..4eb879ea9 --- /dev/null +++ b/server/Spells/Mage/Summoner/Necromancer/UndeadHorde.lua @@ -0,0 +1,26 @@ +--[[ + Script Name : Spells/Mage/Summoner/Necromancer/UndeadHorde.lua + Script Author : John Adams + Script Date : 2013.08.11 08:08:40 + Script Purpose : + : +--]] + +function cast(Caster, Target) + -- code to cast the spell + Say(Caster, "Whoops! Guess this is not implemented yet!") + +-- Info from spell_display_effects (remove from script when done) +-- Summons 5 limited pets to aid the caster +-- Summons 7 limited pets to aid the caster + +end + +function tick(Caster, Target) + -- code to process each call_frequency (tick) set in spell_tiers +end + +function remove(Caster, Target) + -- code to remove the spell +end + diff --git a/server/Spells/Mage/Summoner/Necromancer/UndeadKnight.lua b/server/Spells/Mage/Summoner/Necromancer/UndeadKnight.lua new file mode 100644 index 000000000..9ed325bbe --- /dev/null +++ b/server/Spells/Mage/Summoner/Necromancer/UndeadKnight.lua @@ -0,0 +1,10 @@ +--[[ + Script Name : Spells/Mage/Summoner/Necromancer/UndeadKnight.lua + Script Author : John Adams + Script Date : 2013.11.20 07:11:25 + Script Purpose : + : +--]] + +-- Info from spell_display_effects (remove from script when done) +-- Summons a pet undead knight diff --git a/server/Spells/Mage/Summoner/Necromancer/UnholyCovenant.lua b/server/Spells/Mage/Summoner/Necromancer/UnholyCovenant.lua new file mode 100644 index 000000000..db2c08bc8 --- /dev/null +++ b/server/Spells/Mage/Summoner/Necromancer/UnholyCovenant.lua @@ -0,0 +1,19 @@ +--[[ + Script Name : Spells/Mage/Summoner/Necromancer/UnholyCovenant.lua + Script Author : Jabantiz + Script Date : 2013.12.07 10:12:59 + Script Purpose : + : +--]] + +function cast(Caster, Target, powerBonus, mitBonus) + -- Increases Max Power of group members (AE) by 20.8 + AddSpellBonus(Target, 619, powerBonus) + + -- Increases Mitigation of group members (AE) vs noxious damage by 79 + AddSpellBonus(Target, 202, mitBonus) +end + +function remove(Caster, Target) + RemoveSpellBonus(Target) +end diff --git a/server/Spells/Mage/Summoner/Necromancer/UnlivingEyes.lua b/server/Spells/Mage/Summoner/Necromancer/UnlivingEyes.lua new file mode 100644 index 000000000..d5d7a00e9 --- /dev/null +++ b/server/Spells/Mage/Summoner/Necromancer/UnlivingEyes.lua @@ -0,0 +1,11 @@ +--[[ + Script Name : Spells/Mage/Summoner/Necromancer/UnlivingEyes.lua + Script Author : neatz09 + Script Date : 2019.10.19 06:10:04 + Script Purpose : + : +--]] + +-- Info from spell_display_effects (remove from script when done) +-- Grants See Invisibility to group members (AE) +-- Grants Ultravision to group members (AE) diff --git a/server/Spells/Mage/Summoner/Necromancer/UnstoppableSoul.lua b/server/Spells/Mage/Summoner/Necromancer/UnstoppableSoul.lua new file mode 100644 index 000000000..1eca99e55 --- /dev/null +++ b/server/Spells/Mage/Summoner/Necromancer/UnstoppableSoul.lua @@ -0,0 +1,26 @@ +--[[ + Script Name : Spells/Mage/Summoner/Necromancer/UnstoppableSoul.lua + Script Author : John Adams + Script Date : 2013.08.11 08:08:17 + Script Purpose : + : +--]] + +function cast(Caster, Target) + -- code to cast the spell + Say(Caster, "Whoops! Guess this is not implemented yet!") + +-- Info from spell_display_effects (remove from script when done) +-- Increases Max Health of target by 12.0% +-- Increases Mitigation of target vs physical damage by 312 + +end + +function tick(Caster, Target) + -- code to process each call_frequency (tick) set in spell_tiers +end + +function remove(Caster, Target) + -- code to remove the spell +end + diff --git a/server/Spells/Mage/Summoner/Necromancer/Vampirism.lua b/server/Spells/Mage/Summoner/Necromancer/Vampirism.lua new file mode 100644 index 000000000..6e25da4df --- /dev/null +++ b/server/Spells/Mage/Summoner/Necromancer/Vampirism.lua @@ -0,0 +1,25 @@ +--[[ + Script Name : Spells/Mage/Summoner/Necromancer/Vampirism.lua + Script Author : John Adams + Script Date : 2013.08.11 08:08:10 + Script Purpose : + : +--]] + +function cast(Caster, Target) + -- code to cast the spell + Say(Caster, "Whoops! Guess this is not implemented yet!") + +-- Info from spell_display_effects (remove from script when done) +-- Summons a limited pet to aid the caster + +end + +function tick(Caster, Target) + -- code to process each call_frequency (tick) set in spell_tiers +end + +function remove(Caster, Target) + -- code to remove the spell +end + diff --git a/server/Spells/Mage/Summoner/SootheServant.lua b/server/Spells/Mage/Summoner/SootheServant.lua new file mode 100644 index 000000000..d6d7ce9fc --- /dev/null +++ b/server/Spells/Mage/Summoner/SootheServant.lua @@ -0,0 +1,14 @@ +--[[ + Script Name : Spells/Mage/Summoner/SootheServant.lua + Script Author : neatz09 + Script Date : 2019.10.16 10:10:05 + Script Purpose : + : +--]] + + +-- Heals target for 85 + +function cast(Caster, Target, Min) +SpellHeal(Heal, Min) +end diff --git a/server/Spells/Mage/Summoner/VampireBats.lua b/server/Spells/Mage/Summoner/VampireBats.lua new file mode 100644 index 000000000..39e403c2f --- /dev/null +++ b/server/Spells/Mage/Summoner/VampireBats.lua @@ -0,0 +1,33 @@ +--[[ + Script Name : Spells/Mage/Summoner/VampireBats.lua + Script Author : Jabantiz + Script Date : 2013.12.08 12:12:29 + Script Purpose : + : +--]] + +function cast(Caster, Target, DoTType, MinVal, MaxVal, bonus) + -- Inflicts 14 - 22 piercing damage on target instantly and every 4 seconds + if MaxVal ~= nil and MinVal < MaxVal then + SpellDamage(Target, DoTType, math.random(MinVal, MaxVal)) + else + SpellDamage(Target, DoTType, MinVal) + end + + -- Decreases Defense of target by 2.7 + AddSkillBonus(Target, GetSkillIDByName("Defense"), bonus) +end + + +function tick(Caster, Target, DoTType, MinVal, MaxVal) + -- Inflicts 14 - 22 piercing damage on target instantly and every 4 seconds + if MaxVal ~= nil and MinVal < MaxVal then + SpellDamage(Target, DoTType, math.random(MinVal, MaxVal)) + else + SpellDamage(Target, DoTType, MinVal) + end +end + +function remove(Caster, Target) + RemoveSkillBonus(Target) +end diff --git a/server/Spells/Priest/Cleric/AdmonishingSmite.lua b/server/Spells/Priest/Cleric/AdmonishingSmite.lua new file mode 100644 index 000000000..7ddcbe902 --- /dev/null +++ b/server/Spells/Priest/Cleric/AdmonishingSmite.lua @@ -0,0 +1,24 @@ +--[[ + Script Name : Spells/Priest/Cleric/AdmonishingSmite.lua + Script Author : neatz09 + Script Date : 2019.08.05 07:08:53 + Script Purpose : + : +--]] + +-- Info from spell_display_effects (remove from script when done) +-- Inflicts 25 - 31 divine damage on target + +function cast(Caster, Target, DmgType, MinVal, MaxVal) + if MaxVal ~= nil and MinVal < MaxVal then + SpellDamage(Target, DmgType, math.random(MinVal, MaxVal)) + else + SpellDamage(Target, DmgType, MinVal) + end +end + +-- Dazes target +-- If Target is not Epic +-- Dispelled when target receives hostile action +-- Dispelled when target takes damage +-- Resistibility increases against targets higher than level 29. diff --git a/server/Spells/Priest/Cleric/DivineAwakening.lua b/server/Spells/Priest/Cleric/DivineAwakening.lua new file mode 100644 index 000000000..714f99fef --- /dev/null +++ b/server/Spells/Priest/Cleric/DivineAwakening.lua @@ -0,0 +1,26 @@ +--[[ + Script Name : Spells/Priest/Cleric/DivineAwakening.lua + Script Author : John Adams + Script Date : 2013.08.11 06:08:32 + Script Purpose : + : +--]] + +function cast(Caster, Target) + -- code to cast the spell + Say(Caster, "Whoops! Guess this is not implemented yet!") + +-- Info from spell_display_effects (remove from script when done) +-- Summon 1 Divine Essence +-- This effect cannot be cast during combat + +end + +function tick(Caster, Target) + -- code to process each call_frequency (tick) set in spell_tiers +end + +function remove(Caster, Target) + -- code to remove the spell +end + diff --git a/server/Spells/Priest/Cleric/Inquisitor/Absolution.lua b/server/Spells/Priest/Cleric/Inquisitor/Absolution.lua new file mode 100644 index 000000000..95d6bab00 --- /dev/null +++ b/server/Spells/Priest/Cleric/Inquisitor/Absolution.lua @@ -0,0 +1,31 @@ +--[[ + Script Name : Spells/Priest/Cleric/Inquisitor/Absolution.lua + Script Author : John Adams + Script Date : 2013.08.11 07:08:20 + Script Purpose : + : +--]] + +function cast(Caster, Target) + -- code to cast the spell + Say(Caster, "Whoops! Guess this is not implemented yet!") + +-- Info from spell_display_effects (remove from script when done) +-- Has a 50% chance to cast an additional heal 0.5 seconds after Alleviation, Fanatical Healing or Ministration is cast. +-- On a combat hit this spell may cast Penitent Smite on target of attack. Lasts for 12.0 seconds. Triggers about 1.8 times per minute. +-- Makes group members (AE) immune to Daze and Stifle effects +-- Inflicts 652 - 978 divine damage on target +-- Cannot be modified except by direct means +-- Improves the casting and reuse speed of heals by 15% +-- Cannot be modified except by direct means + +end + +function tick(Caster, Target) + -- code to process each call_frequency (tick) set in spell_tiers +end + +function remove(Caster, Target) + -- code to remove the spell +end + diff --git a/server/Spells/Priest/Cleric/Inquisitor/ActofWar.lua b/server/Spells/Priest/Cleric/Inquisitor/ActofWar.lua new file mode 100644 index 000000000..d38d9d85d --- /dev/null +++ b/server/Spells/Priest/Cleric/Inquisitor/ActofWar.lua @@ -0,0 +1,24 @@ +--[[ + Script Name : Spells/Priest/Cleric/Inquisitor/ActofWar.lua + Script Author : John Adams + Script Date : 2013.08.11 06:08:48 + Script Purpose : + : +--]] + +function cast(Caster, Target) + -- code to cast the spell + Say(Caster, "Whoops! Guess this is not implemented yet!") + +-- Info from spell_display_effects (remove from script when done) + +end + +function tick(Caster, Target) + -- code to process each call_frequency (tick) set in spell_tiers +end + +function remove(Caster, Target) + -- code to remove the spell +end + diff --git a/server/Spells/Priest/Cleric/Inquisitor/AdmonishingInvocation.lua b/server/Spells/Priest/Cleric/Inquisitor/AdmonishingInvocation.lua new file mode 100644 index 000000000..4dcf3efaa --- /dev/null +++ b/server/Spells/Priest/Cleric/Inquisitor/AdmonishingInvocation.lua @@ -0,0 +1,30 @@ +--[[ + Script Name : dd_interrupt.lua + Script Purpose : Generic damage + stun script + Script Author : John Adams + Script Date : 2008.12.04 +--]] + +function cast(Caster, Target, DDType, MinDDVal, MaxDDVal, EffectType, EffectChance) + + -- DD component + if MaxDDVal ~= nil and MinDDVal < MaxDDVal then + SpellDamage(Target, DDType, math.random(MinDDVal, MaxDDVal)) + else + SpellDamage(Target, DDType, MinDDVal) + end + + -- Effect component - if EffectChance is blank, always apply the effect, otherwise random + if EffectChance ~= nil then + if EffectChance >= math.random(1, 100) then + -- Interrupt(Target) + end + else + -- Interrupt(Target) + end + + +end + +function remove(Caster, Target) +end \ No newline at end of file diff --git a/server/Spells/Priest/Cleric/Inquisitor/Alleviation.lua b/server/Spells/Priest/Cleric/Inquisitor/Alleviation.lua new file mode 100644 index 000000000..609e21b81 --- /dev/null +++ b/server/Spells/Priest/Cleric/Inquisitor/Alleviation.lua @@ -0,0 +1,12 @@ +--[[ + Script Name : Spells/Priest/Cleric/Inquisitor/Alleviation.lua + Script Author : Jabantiz + Script Date : 2014.03.13 09:03:54 + Script Purpose : + : +--]] + +function cast(Caster, Target, MinHeal, MaxHeal) + -- Heals group members (AE) for 107 - 131 + SpellHeal("Heal", MinHeal, MaxHeal) +end diff --git a/server/Spells/Priest/Cleric/Inquisitor/CleansingoftheSoul.lua b/server/Spells/Priest/Cleric/Inquisitor/CleansingoftheSoul.lua new file mode 100644 index 000000000..29dc86a06 --- /dev/null +++ b/server/Spells/Priest/Cleric/Inquisitor/CleansingoftheSoul.lua @@ -0,0 +1,27 @@ +--[[ + Script Name : Spells/Priest/Cleric/Inquisitor/CleansingoftheSoul.lua + Script Author : John Adams + Script Date : 2013.08.11 07:08:25 + Script Purpose : + : +--]] + +function cast(Caster, Target) + -- code to cast the spell + Say(Caster, "Whoops! Guess this is not implemented yet!") + +-- Info from spell_display_effects (remove from script when done) +-- Dispels 176 levels of physical, elemental, noxious, arcane hostile effects on group members (AE) +-- Casts Penitent Cleansing for each successful Dispel. +-- Heals target for 714 - 1071 + +end + +function tick(Caster, Target) + -- code to process each call_frequency (tick) set in spell_tiers +end + +function remove(Caster, Target) + -- code to remove the spell +end + diff --git a/server/Spells/Priest/Cleric/Inquisitor/CombatTreatment.lua b/server/Spells/Priest/Cleric/Inquisitor/CombatTreatment.lua new file mode 100644 index 000000000..130b94e21 --- /dev/null +++ b/server/Spells/Priest/Cleric/Inquisitor/CombatTreatment.lua @@ -0,0 +1,18 @@ +--[[ + Script Name : Heal (Spell Type) + Script Purpose : Generic script for healing spells + Script Author : John Adams + Script Date : 2008.12.03 + Script Note : +--]] + +function cast(Caster, Target, HealType, HealMinVal, HealMaxVal) + + -- Heal Component + if HealMinVal < HealMaxVal then + ModifyHP(Caster, math.random(HealMinVal, HealMaxVal)) + else + ModifyHP(Caster, HealMinVal) + end + +end diff --git a/server/Spells/Priest/Cleric/Inquisitor/Condemn.lua b/server/Spells/Priest/Cleric/Inquisitor/Condemn.lua new file mode 100644 index 000000000..70e6e5034 --- /dev/null +++ b/server/Spells/Priest/Cleric/Inquisitor/Condemn.lua @@ -0,0 +1,19 @@ +--[[ + Script Name : Spells/Priest/Cleric/Inquisitor/Condemn.lua + Script Author : Jabantiz + Script Date : 2014.03.13 08:03:50 + Script Purpose : + : +--]] + +function cast(Caster, Target, BonusAmt) + -- Decreases Mitigation of target vs all damage by 23 + AddSpellBonus(Target, 200, BonusAmt) + AddSpellBonus(Target, 201, BonusAmt) + AddSpellBonus(Target, 202, BonusAmt) + AddSpellBonus(Target, 203, BonusAmt) +end + +function remove(Caster, Target) + RemoveSpellBonus(Target) +end diff --git a/server/Spells/Priest/Cleric/Inquisitor/ConversionoftheSoul.lua b/server/Spells/Priest/Cleric/Inquisitor/ConversionoftheSoul.lua new file mode 100644 index 000000000..c83ba0503 --- /dev/null +++ b/server/Spells/Priest/Cleric/Inquisitor/ConversionoftheSoul.lua @@ -0,0 +1,31 @@ +--[[ + Script Name : Spells/Priest/Cleric/Inquisitor/ConversionoftheSoul.lua + Script Author : John Adams + Script Date : 2013.08.11 06:08:23 + Script Purpose : + : +--]] + +function cast(Caster, Target) + -- code to cast the spell + Say(Caster, "Whoops! Guess this is not implemented yet!") + +-- Info from spell_display_effects (remove from script when done) +-- Resurrects target with 15% health and power +-- Applies Conversion of the Soul on termination. +-- Increases power of target by 30.0% +-- This effect cannot be critically applied. +-- Heals target for 50.0% of max health +-- This effect cannot be critically applied. +-- If outside an arena + +end + +function tick(Caster, Target) + -- code to process each call_frequency (tick) set in spell_tiers +end + +function remove(Caster, Target) + -- code to remove the spell +end + diff --git a/server/Spells/Priest/Cleric/Inquisitor/Deny.lua b/server/Spells/Priest/Cleric/Inquisitor/Deny.lua new file mode 100644 index 000000000..ac2148943 --- /dev/null +++ b/server/Spells/Priest/Cleric/Inquisitor/Deny.lua @@ -0,0 +1,19 @@ +--[[ + Script Name : Deny.lua + Script Purpose : Inquisitor Debuff spell + Script Author : Zcoretri + Script Date : 23.May.2010 + Script Notes : +--]] + +function cast(Caster, Target, Debuff) + -- Debuff INT and STR + AddSpellBonus(Target, 0, Debuff) + AddSpellBonus(Target, 4, Debuff) +--missing bleedthrough +end + + +function remove(Caster, Target, Debuff) + RemoveSpellBonus(Target) +end diff --git a/server/Spells/Priest/Cleric/Inquisitor/Disorientation.lua b/server/Spells/Priest/Cleric/Inquisitor/Disorientation.lua new file mode 100644 index 000000000..b6cae1d0c --- /dev/null +++ b/server/Spells/Priest/Cleric/Inquisitor/Disorientation.lua @@ -0,0 +1,24 @@ +--[[ + Script Name : Spells/Priest/Cleric/Inquisitor/Disorientation.lua + Script Author : Jabantiz + Script Date : 2014.03.13 09:03:27 + Script Purpose : + : +--]] + +function cast(Caster, Target, Hate) + -- Decreases Threat to targets in Area of Effect by 323 + AddHate(Caster, Target, Hate) + + -- Stuns targets in Area of Effect + -- If Target is not Epic + if not IsEpic(Target) then + AddControlEffect(Target, 4) + end + + -- Decreases threat priority of targets in Area of Effect by 1 position +end + +function remove(Caster, Target) + RemoveControlEffect(Target, 4) +end diff --git a/server/Spells/Priest/Cleric/Inquisitor/Dogma.lua b/server/Spells/Priest/Cleric/Inquisitor/Dogma.lua new file mode 100644 index 000000000..8e20bc508 --- /dev/null +++ b/server/Spells/Priest/Cleric/Inquisitor/Dogma.lua @@ -0,0 +1,24 @@ +--[[ + Script Name : Spells/Priest/Cleric/Inquisitor/Dogma.lua + Script Author : John Adams + Script Date : 2013.08.11 06:08:23 + Script Purpose : + : +--]] + +function cast(Caster, Target) + -- code to cast the spell + Say(Caster, "Whoops! Guess this is not implemented yet!") + +-- Info from spell_display_effects (remove from script when done) + +end + +function tick(Caster, Target) + -- code to process each call_frequency (tick) set in spell_tiers +end + +function remove(Caster, Target) + -- code to remove the spell +end + diff --git a/server/Spells/Priest/Cleric/Inquisitor/EvidenceofFaith.lua b/server/Spells/Priest/Cleric/Inquisitor/EvidenceofFaith.lua new file mode 100644 index 000000000..199b6ca4b --- /dev/null +++ b/server/Spells/Priest/Cleric/Inquisitor/EvidenceofFaith.lua @@ -0,0 +1,26 @@ +--[[ + Script Name : Spells/Priest/Cleric/Inquisitor/EvidenceofFaith.lua + Script Author : John Adams + Script Date : 2013.08.11 06:08:11 + Script Purpose : + : +--]] + +function cast(Caster, Target) + -- code to cast the spell + Say(Caster, "Whoops! Guess this is not implemented yet!") + +-- Info from spell_display_effects (remove from script when done) +-- When any damage is received this spell will cast Vengeful Faith on target, which can be triggered up to 9 times across all targets. +-- Heals target for 195 - 238 + +end + +function tick(Caster, Target) + -- code to process each call_frequency (tick) set in spell_tiers +end + +function remove(Caster, Target) + -- code to remove the spell +end + diff --git a/server/Spells/Priest/Cleric/Inquisitor/FanaticalHealing.lua b/server/Spells/Priest/Cleric/Inquisitor/FanaticalHealing.lua new file mode 100644 index 000000000..049a03408 --- /dev/null +++ b/server/Spells/Priest/Cleric/Inquisitor/FanaticalHealing.lua @@ -0,0 +1,11 @@ +--[[ + Script Name : FanaticalHealing.lua + Script Purpose : Inquisitor large direct heal + Script Author : Zcoretri + Script Date : 23.May.2010 + Script Notes : +--]] + +function cast(Caster, Target, MinHeal, MaxHeal) + SpellHeal("Heal", MinHeal, MaxHeal) +end diff --git a/server/Spells/Priest/Cleric/Inquisitor/Fanaticism.lua b/server/Spells/Priest/Cleric/Inquisitor/Fanaticism.lua new file mode 100644 index 000000000..8e43f7286 --- /dev/null +++ b/server/Spells/Priest/Cleric/Inquisitor/Fanaticism.lua @@ -0,0 +1,24 @@ +--[[ + Script Name : Spells/Priest/Cleric/Inquisitor/Fanaticism.lua + Script Author : John Adams + Script Date : 2013.08.11 06:08:27 + Script Purpose : + : +--]] + +function cast(Caster, Target) + -- code to cast the spell + Say(Caster, "Whoops! Guess this is not implemented yet!") + +-- Info from spell_display_effects (remove from script when done) + +end + +function tick(Caster, Target) + -- code to process each call_frequency (tick) set in spell_tiers +end + +function remove(Caster, Target) + -- code to remove the spell +end + diff --git a/server/Spells/Priest/Cleric/Inquisitor/FanaticsFaith.lua b/server/Spells/Priest/Cleric/Inquisitor/FanaticsFaith.lua new file mode 100644 index 000000000..bde4287e3 --- /dev/null +++ b/server/Spells/Priest/Cleric/Inquisitor/FanaticsFaith.lua @@ -0,0 +1,20 @@ +--[[ + Script Name : Spells/Priest/Cleric/Inquisitor/FanaticsFaith.lua + Script Author : Jabantiz + Script Date : 2014.03.13 09:03:35 + Script Purpose : + : +--]] + +function cast(Caster, Target, Sta, Arcane) + -- Increases STA of group members (AE) by 3.0 + AddSpellBonus(Target, 1, Sta) + + -- Increases Mitigation of group members (AE) vs arcane damage by 194 + AddSpellBonus(Target, 203, Arcane) +end + +function remove(Caster, Target) + RemoveSpellBonus(Target) +end + diff --git a/server/Spells/Priest/Cleric/Inquisitor/FerventFaith.lua b/server/Spells/Priest/Cleric/Inquisitor/FerventFaith.lua new file mode 100644 index 000000000..6361f8538 --- /dev/null +++ b/server/Spells/Priest/Cleric/Inquisitor/FerventFaith.lua @@ -0,0 +1,24 @@ +--[[ + Script Name : Spells/Priest/Cleric/Inquisitor/FerventFaith.lua + Script Author : John Adams + Script Date : 2013.08.11 06:08:55 + Script Purpose : + : +--]] + +function cast(Caster, Target) + -- code to cast the spell + Say(Caster, "Whoops! Guess this is not implemented yet!") + +-- Info from spell_display_effects (remove from script when done) + +end + +function tick(Caster, Target) + -- code to process each call_frequency (tick) set in spell_tiers +end + +function remove(Caster, Target) + -- code to remove the spell +end + diff --git a/server/Spells/Priest/Cleric/Inquisitor/ForcedObedience.lua b/server/Spells/Priest/Cleric/Inquisitor/ForcedObedience.lua new file mode 100644 index 000000000..422732265 --- /dev/null +++ b/server/Spells/Priest/Cleric/Inquisitor/ForcedObedience.lua @@ -0,0 +1,19 @@ +--[[ + Script Name : Spells/Priest/Cleric/Inquisitor/ForcedObedience.lua + Script Author : Jabantiz + Script Date : 2014.03.13 09:03:20 + Script Purpose : + : +--]] + +function cast(Caster, Target, SkillAmt) + -- Decreases Ranged, Piercing, Slashing and Crushing of target encounter by 4.9 + AddSkillBonus(Target, GetSkillIDByName("Ranged"), SkillAmt) + AddSkillBonus(Target, GetSkillIDByName("Piercing"), SkillAmt) + AddSkillBonus(Target, GetSkillIDByName("Slashing"), SkillAmt) + AddSkillBonus(Target, GetSkillIDByName("Crushing"), SkillAmt) +end + +function remove(Caster, Target) + RemoveSkillBonus(Target) +end diff --git a/server/Spells/Priest/Cleric/Inquisitor/Heresy.lua b/server/Spells/Priest/Cleric/Inquisitor/Heresy.lua new file mode 100644 index 000000000..4978314f4 --- /dev/null +++ b/server/Spells/Priest/Cleric/Inquisitor/Heresy.lua @@ -0,0 +1,17 @@ +--[[ + Script Name : Spells/Priest/Cleric/Inquisitor/Heresy.lua + Script Author : neatz09 + Script Date : 2019.10.04 06:10:05 + Script Purpose : + : +--]] + +-- Info from spell_display_effects (remove from script when done) +-- On a spell cast this spell will cast Heretical Strike on target. +-- Applies Knockdown. Lasts for 2.5 seconds. +-- Throws target back +-- Blurs vision of target +-- Stuns target +-- Does not affect Epic targets +-- Inflicts 446 - 744 divine damage on target +-- Grants a total of 3 triggers of the spell. diff --git a/server/Spells/Priest/Cleric/Inquisitor/HereticsDoom.lua b/server/Spells/Priest/Cleric/Inquisitor/HereticsDoom.lua new file mode 100644 index 000000000..d1456d687 --- /dev/null +++ b/server/Spells/Priest/Cleric/Inquisitor/HereticsDoom.lua @@ -0,0 +1,18 @@ +--[[ + Script Name : Spells/Priest/Cleric/Inquisitor/HereticsDoom.lua + Script Author : neatz09 + Script Date : 2019.10.04 06:10:28 + Script Purpose : + : +--]] + +-- Inflicts 180 - 220 heat damage on target encounter + +function cast(Caster, Target, DmgType, MinVal, MaxVal) + if MaxVal ~= nil and MinVal < MaxVal then + SpellDamage(Target, DmgType, math.random(MinVal, MaxVal)) + else + SpellDamage(Target, DmgType, MinVal) + end +end + diff --git a/server/Spells/Priest/Cleric/Inquisitor/Incarcerate.lua b/server/Spells/Priest/Cleric/Inquisitor/Incarcerate.lua new file mode 100644 index 000000000..c2fd284eb --- /dev/null +++ b/server/Spells/Priest/Cleric/Inquisitor/Incarcerate.lua @@ -0,0 +1,30 @@ +--[[ + Script Name : Spells/Priest/Cleric/Inquisitor/Incarcerate.lua + Script Author : John Adams + Script Date : 2013.08.11 06:08:02 + Script Purpose : + : +--]] + +function cast(Caster, Target) + -- code to cast the spell + Say(Caster, "Whoops! Guess this is not implemented yet!") + +-- Info from spell_display_effects (remove from script when done) +-- Roots target +-- Stifles target +-- If Target is not Epic +-- 20% chance to dispel when target takes damage +-- Does not affect Epic targets +-- Resistibility increases against targets higher than level 29. + +end + +function tick(Caster, Target) + -- code to process each call_frequency (tick) set in spell_tiers +end + +function remove(Caster, Target) + -- code to remove the spell +end + diff --git a/server/Spells/Priest/Cleric/Inquisitor/Inquest.lua b/server/Spells/Priest/Cleric/Inquisitor/Inquest.lua new file mode 100644 index 000000000..c7d255d28 --- /dev/null +++ b/server/Spells/Priest/Cleric/Inquisitor/Inquest.lua @@ -0,0 +1,24 @@ +--[[ + Script Name : Spells/Priest/Cleric/Inquisitor/Inquest.lua + Script Author : John Adams + Script Date : 2013.08.11 06:08:51 + Script Purpose : + : +--]] + +function cast(Caster, Target) + -- code to cast the spell + Say(Caster, "Whoops! Guess this is not implemented yet!") + +-- Info from spell_display_effects (remove from script when done) + +end + +function tick(Caster, Target) + -- code to process each call_frequency (tick) set in spell_tiers +end + +function remove(Caster, Target) + -- code to remove the spell +end + diff --git a/server/Spells/Priest/Cleric/Inquisitor/Inquisition.lua b/server/Spells/Priest/Cleric/Inquisitor/Inquisition.lua new file mode 100644 index 000000000..dcc88d7de --- /dev/null +++ b/server/Spells/Priest/Cleric/Inquisitor/Inquisition.lua @@ -0,0 +1,24 @@ +--[[ + Script Name : Spells/Priest/Cleric/Inquisitor/Inquisition.lua + Script Author : John Adams + Script Date : 2013.08.11 07:08:32 + Script Purpose : + : +--]] + +function cast(Caster, Target) + -- code to cast the spell + Say(Caster, "Whoops! Guess this is not implemented yet!") + +-- Info from spell_display_effects (remove from script when done) + +end + +function tick(Caster, Target) + -- code to process each call_frequency (tick) set in spell_tiers +end + +function remove(Caster, Target) + -- code to remove the spell +end + diff --git a/server/Spells/Priest/Cleric/Inquisitor/Invocation.lua b/server/Spells/Priest/Cleric/Inquisitor/Invocation.lua new file mode 100644 index 000000000..282efd993 --- /dev/null +++ b/server/Spells/Priest/Cleric/Inquisitor/Invocation.lua @@ -0,0 +1,22 @@ +--[[ + Script Name : Spells/Priest/Cleric/Inquisitor/Invocation.lua + Script Author : JohnAdams + Script Date : 2013.11.17 05:11:19 + Script Purpose : Inquisitor Direct Damage spell + interrupt +--]] + +function cast(Caster, Target, DmgType, MinDmg, MaxDmg) + + -- DD component + if MaxDmg ~= nil and MinDmg < MaxDmg then + SpellDamage(Target, DmgType, math.random(MinDmg, MaxDmg)) + else + SpellDamage(Target, DmgType, MinDmg) + end + + -- Interrupt component + if target ~= nil then + Interrupt(Caster, Target) + end + +end \ No newline at end of file diff --git a/server/Spells/Priest/Cleric/Inquisitor/Litany.lua b/server/Spells/Priest/Cleric/Inquisitor/Litany.lua new file mode 100644 index 000000000..c6ad6abc4 --- /dev/null +++ b/server/Spells/Priest/Cleric/Inquisitor/Litany.lua @@ -0,0 +1,15 @@ +--[[ + Script Name : Spells/Priest/Cleric/Inquisitor/Litany.lua + Script Author : neatz09 + Script Date : 2019.10.04 06:10:08 + Script Purpose : + : +--]] + + +function cast(Caster, Target) +-- Interrupts target encounter +-- Inflicts 379 - 464 divine damage on target encounter +Interrupt(Caster, Target) +SpellDamage(Target, DmgType, MinVal, MaxVal) +end diff --git a/server/Spells/Priest/Cleric/Inquisitor/MalevolentDiatribe.lua b/server/Spells/Priest/Cleric/Inquisitor/MalevolentDiatribe.lua new file mode 100644 index 000000000..faad7d48a --- /dev/null +++ b/server/Spells/Priest/Cleric/Inquisitor/MalevolentDiatribe.lua @@ -0,0 +1,25 @@ +--[[ + Script Name : Spells/Priest/Cleric/Inquisitor/MalevolentDiatribe.lua + Script Author : Jabantiz + Script Date : 2014.03.13 09:03:40 + Script Purpose : + : +--]] + +function cast(Caster, Target) + SetSpellTriggerCount(9, 1) + AddProc(Target, 2, 100) +end + +function proc(Caster, Target, Type, MinHeal, MaxHeal) + -- When any damage is received this spell will cast Atoning Faith on target, which can be triggered up to 9 times across all targets. + -- Heals target for 44 - 54 + if Type == 2 then + SpellHeal("Heal", MinHeal, MaxHeal, Caster) + RemoveTriggerFromSpell(1) + end +end + +function remove(Caster, Target) + RemoveProc(Target) +end diff --git a/server/Spells/Priest/Cleric/Inquisitor/Ministration.lua b/server/Spells/Priest/Cleric/Inquisitor/Ministration.lua new file mode 100644 index 000000000..f85714426 --- /dev/null +++ b/server/Spells/Priest/Cleric/Inquisitor/Ministration.lua @@ -0,0 +1,12 @@ +--[[ + Script Name : Ministration.lua + Script Purpose : Inquisitor small direct heal + Script Author : Zcoretri + Script Date : 23.May.2010 + Script Notes : +--]] + +function cast(Caster, Target, MinHeal, MaxHeal) + SpellHeal("Heal", MinHeal, MaxHeal) +end + diff --git a/server/Spells/Priest/Cleric/Inquisitor/MinistrationX.lua b/server/Spells/Priest/Cleric/Inquisitor/MinistrationX.lua new file mode 100644 index 000000000..e62553a24 --- /dev/null +++ b/server/Spells/Priest/Cleric/Inquisitor/MinistrationX.lua @@ -0,0 +1,24 @@ +--[[ + Script Name : Spells/Priest/Cleric/Inquisitor/MinistrationX.lua + Script Author : John Adams + Script Date : 2013.08.11 07:08:55 + Script Purpose : + : +--]] + +function cast(Caster, Target) + -- code to cast the spell + Say(Caster, "Whoops! Guess this is not implemented yet!") + +-- Info from spell_display_effects (remove from script when done) + +end + +function tick(Caster, Target) + -- code to process each call_frequency (tick) set in spell_tiers +end + +function remove(Caster, Target) + -- code to remove the spell +end + diff --git a/server/Spells/Priest/Cleric/Inquisitor/MinorRecovery.lua b/server/Spells/Priest/Cleric/Inquisitor/MinorRecovery.lua new file mode 100644 index 000000000..130b94e21 --- /dev/null +++ b/server/Spells/Priest/Cleric/Inquisitor/MinorRecovery.lua @@ -0,0 +1,18 @@ +--[[ + Script Name : Heal (Spell Type) + Script Purpose : Generic script for healing spells + Script Author : John Adams + Script Date : 2008.12.03 + Script Note : +--]] + +function cast(Caster, Target, HealType, HealMinVal, HealMaxVal) + + -- Heal Component + if HealMinVal < HealMaxVal then + ModifyHP(Caster, math.random(HealMinVal, HealMaxVal)) + else + ModifyHP(Caster, HealMinVal) + end + +end diff --git a/server/Spells/Priest/Cleric/Inquisitor/Penance.lua b/server/Spells/Priest/Cleric/Inquisitor/Penance.lua new file mode 100644 index 000000000..751770363 --- /dev/null +++ b/server/Spells/Priest/Cleric/Inquisitor/Penance.lua @@ -0,0 +1,28 @@ +--[[ + Script Name : Spells/Priest/Cleric/Inquisitor/Penance.lua + Script Author : Jabantiz + Script Date : 2014.03.13 08:03:08 + Script Purpose : + : +--]] + +function cast(Caster, Target) + -- Grants a total of 5 triggers of the spell. + SetSpellTriggerCount(5, 1) + + -- When any damage is received this spell will cast Vengeful Faith on target. + AddProc(Target, 2, 100) +end + +function proc(Caster, Target, Type, MinHeal, MaxHeal) + -- When any damage is received this spell will cast Vengeful Faith on target. + if Type == 2 then + -- Heals target for 38 - 46 + SpellHeal("Heal", MinHeal, MaxHeal, Caster) + RemoveTriggerFromSpell(1) + end +end + +function remove(Caster, Target) + RemoveProc(Target) +end \ No newline at end of file diff --git a/server/Spells/Priest/Cleric/Inquisitor/PurifyingFlames.lua b/server/Spells/Priest/Cleric/Inquisitor/PurifyingFlames.lua new file mode 100644 index 000000000..71f9c5976 --- /dev/null +++ b/server/Spells/Priest/Cleric/Inquisitor/PurifyingFlames.lua @@ -0,0 +1,25 @@ +--[[ + Script Name : Spells/Priest/Cleric/Inquisitor/PurifyingFlames.lua + Script Author : neatz09 + Script Date : 2019.10.15 09:10:35 + Script Purpose : + : +--]] + +function cast(Caster, Target, DoTType, MinVal, MaxVal, BonusAmt) +-- Inflicts 33 - 40 heat damage on target instantly and every 4 seconds +SpellDamage(Target, DoTType, MinVal, MaxVal) +-- Decreases Mitigation of target vs arcane damage by 207 + AddSpellBonus(Target, 203, BonusAmt) + +end + +function tick(Caster, Target, DoTType, MinVal, MaxVal) + SpellDamage(Target, DoTType, MinVal, MaxVal) +end + + +function remove(Caster, Target) + RemoveSpellBonus(Target) + +end diff --git a/server/Spells/Priest/Cleric/Inquisitor/Redemption.lua b/server/Spells/Priest/Cleric/Inquisitor/Redemption.lua new file mode 100644 index 000000000..99d52f31c --- /dev/null +++ b/server/Spells/Priest/Cleric/Inquisitor/Redemption.lua @@ -0,0 +1,24 @@ +--[[ + Script Name : Spells/Priest/Cleric/Inquisitor/Redemption.lua + Script Author : John Adams + Script Date : 2013.08.11 06:08:20 + Script Purpose : + : +--]] + +function cast(Caster, Target) + -- code to cast the spell + Say(Caster, "Whoops! Guess this is not implemented yet!") + +-- Info from spell_display_effects (remove from script when done) + +end + +function tick(Caster, Target) + -- code to process each call_frequency (tick) set in spell_tiers +end + +function remove(Caster, Target) + -- code to remove the spell +end + diff --git a/server/Spells/Priest/Cleric/Inquisitor/ReformingSoul.lua b/server/Spells/Priest/Cleric/Inquisitor/ReformingSoul.lua new file mode 100644 index 000000000..07cf8b457 --- /dev/null +++ b/server/Spells/Priest/Cleric/Inquisitor/ReformingSoul.lua @@ -0,0 +1,41 @@ +--[[ + Script Name : Spells/Priest/Cleric/Inquisitor/ReformingSoul.lua + Script Author : John Adams + Script Date : 2013.08.11 06:08:42 + Script Purpose : + : +--]] + +function cast(Caster, Target) + -- code to cast the spell + Say(Caster, "Whoops! Guess this is not implemented yet!") + +-- Info from spell_display_effects (remove from script when done) +-- Resurrects target with 15% health and power +-- Applies Reforming Soul on termination. Lasts for 1 minute. +-- Increases Mitigation of target vs noxious and arcane damage by 220 +-- Heals target for 27.6% of max health +-- Increases Mitigation of target vs elemental damage by 220 +-- Applies Revived Sickness on termination. Lasts for 2 minutes. +-- Decreases Toughness of target by 75.0 +-- Decreases Lethality of target by 75.0 +-- Decreases All Attributes of target by 20.0% +-- If not between levels 1 - 6 +-- Decreases Attack Speed of target by 20.0 +-- If not between levels 1 - 6 +-- Decreases Attack Speed of target by 5.0 +-- If between levels 1 - 6 +-- Decreases All Attributes of target by 5.0% +-- If between levels 1 - 6 +-- If outside an arena + +end + +function tick(Caster, Target) + -- code to process each call_frequency (tick) set in spell_tiers +end + +function remove(Caster, Target) + -- code to remove the spell +end + diff --git a/server/Spells/Priest/Cleric/Inquisitor/Repentance.lua b/server/Spells/Priest/Cleric/Inquisitor/Repentance.lua new file mode 100644 index 000000000..77cc472a9 --- /dev/null +++ b/server/Spells/Priest/Cleric/Inquisitor/Repentance.lua @@ -0,0 +1,39 @@ +--[[ + Script Name : Spells/Priest/Cleric/Inquisitor/Repentance.lua + Script Author : Jabantiz + Script Date : 2014.03.13 09:03:13 + Script Purpose : + : +--]] + +function cast(Caster, Target) + -- Grants a total of 3 triggers of the spell. + SetSpellTriggerCount(3, 1) + + -- On any combat or spell hit this spell will cast Repenting Strike on caster. Lasts for 2.5 seconds. + AddProc(Target, 1, 100) +end + +function proc(Caster, Target, Type, DmgType, DmgMin, DmgMax) + if Type == 1 then + -- Inflicts 88 - 147 divine damage on target + ProcDamage(Target, Caster, "Repenting Strike", DmgType, DmgMin, DmgMax) + + -- Stuns target + -- If Target is not Epic + if not IsEpic(Caster) then + AddControlEffect(Caster, 4) + AddSpellTimer(2500, "RemoveStun", Caster, Target) + end + + RemoveTriggerFromSpell(1) + end +end + +function RemoveStun(Caster, Target) + RemoveControlEffect(Caster, 4) +end + +function remove(Caster, Target) + RemoveProc(Target) +end \ No newline at end of file diff --git a/server/Spells/Priest/Cleric/Inquisitor/ResoluteFlagellant.lua b/server/Spells/Priest/Cleric/Inquisitor/ResoluteFlagellant.lua new file mode 100644 index 000000000..813c4b242 --- /dev/null +++ b/server/Spells/Priest/Cleric/Inquisitor/ResoluteFlagellant.lua @@ -0,0 +1,14 @@ +--[[ + Script Name : Spells/Priest/Cleric/Inquisitor/ResoluteFlagellant.lua + Script Author : neatz09 + Script Date : 2019.10.06 08:10:55 + Script Purpose : + : +--]] + +-- Dispels 42 levels of any hostile effects on group members (AE) +function cast(Caster, Target, Amt) + CureByType(Amt, 0, "Cure") +end + +-- You cannot cast this spell while under the effects of something that supresses the use of group cures! diff --git a/server/Spells/Priest/Cleric/Inquisitor/Resurgence.lua b/server/Spells/Priest/Cleric/Inquisitor/Resurgence.lua new file mode 100644 index 000000000..438447206 --- /dev/null +++ b/server/Spells/Priest/Cleric/Inquisitor/Resurgence.lua @@ -0,0 +1,41 @@ +--[[ + Script Name : Spells/Priest/Cleric/Inquisitor/Resurgence.lua + Script Author : John Adams + Script Date : 2013.08.11 06:08:52 + Script Purpose : + : +--]] + +function cast(Caster, Target) + -- code to cast the spell + Say(Caster, "Whoops! Guess this is not implemented yet!") + +-- Info from spell_display_effects (remove from script when done) +-- Applies Revived Sickness on termination. Lasts for 2 minutes. +-- Decreases Toughness of target by 98.0 +-- Decreases Lethality of target by 98.0 +-- Decreases All Attributes of target by 20.0% +-- If not between levels 1 - 6 +-- Decreases Attack Speed of target by 20.0 +-- If not between levels 1 - 6 +-- Decreases Attack Speed of target by 5.0 +-- If between levels 1 - 6 +-- Decreases All Attributes of target by 5.0% +-- If between levels 1 - 6 +-- Resurrects target with 15% health and power +-- Applies Reforming Soul on termination. Lasts for 1 minute. +-- Increases Mitigation of target vs noxious and arcane damage by 360 +-- Heals target for 27.6% of max health +-- Increases Mitigation of target vs elemental damage by 360 +-- If outside an arena + +end + +function tick(Caster, Target) + -- code to process each call_frequency (tick) set in spell_tiers +end + +function remove(Caster, Target) + -- code to remove the spell +end + diff --git a/server/Spells/Priest/Cleric/Inquisitor/SacredArmor.lua b/server/Spells/Priest/Cleric/Inquisitor/SacredArmor.lua new file mode 100644 index 000000000..1708a1d84 --- /dev/null +++ b/server/Spells/Priest/Cleric/Inquisitor/SacredArmor.lua @@ -0,0 +1,16 @@ +--[[ + Script Name : SacredArmor.lua + Script Purpose : Inquisitor Sacred Armor spell line + Script Author : Zcoretri + Script Date : 23.May.2010 + Script Notes : +--]] + +function cast(Caster, Target, HealthAmt, MitAmt) + AddSpellBonus(Target, 500, HealthAmt, 1) + AddSpellBonus(Target, 200, MitAmt, 11, 21, 31) +end + +function remove(Caster, Target, HealthAmt, MitAmt) + RemoveSpellBonus(Target) +end \ No newline at end of file diff --git a/server/Spells/Priest/Cleric/Inquisitor/Shame.lua b/server/Spells/Priest/Cleric/Inquisitor/Shame.lua new file mode 100644 index 000000000..eb4e45a09 --- /dev/null +++ b/server/Spells/Priest/Cleric/Inquisitor/Shame.lua @@ -0,0 +1,54 @@ +--[[ + Script Name : debuff.lua + Script Purpose : Generic Debuff script + Script Author : John Adams + Script Date : 2008.12.05 +--]] + +function cast(Caster, Target, DebuffType, MinDebuffVal, MaxDebuffVal) + + -- Debuff component + -- Determine if there is a range to effect values + if MaxDebuffVal ~= nil and MinDebuffVal < MaxDebuffVal then + -- JA: for debuff randoms (if any), need to to math.random with precision - I think this function rounds up? + DebuffValue = math.random(MinDebuffVal, MaxDebuffVal) + else + DebuffValue = MinDebuffVal + end + + -- Determine DebuffType - either a DamageType or a String value passed as param 1 + -- Need functionality to buff/debuff + if DebuffType == "Defense" then + -- ModifyDefense(Target, -DebuffValue) + end + if DebuffType == "Elemental" then + -- ModifyHeat(Target, -DebuffValue) + -- ModifyCold(Target, -DebuffValue) + end + if DebuffType == "Noxious" then + -- ModifyPoison(Target, -DebuffValue) + -- ModifyDisease(Target, -DebuffValue) + end + +end + +function tick(Caster, Target, DebuffType, MinDebuffVal, MaxDebuffVal) + +end + +function remove(Caster, Target, DebuffType, MinDebuffVal, MaxDebuffVal) +-- Need functionality to restore original mitigations + + if DebuffType == "Defense" then + -- ModifyDefense(Target, Original) + end + if DebuffType == "Elemental" then + -- ModifyHeat(Target, Original) + -- ModifyCold(Target, Original) + end + if DebuffType == "Noxious" then + -- ModifyPoison(Target, Original) + -- ModifyDisease(Target, Original) + end + +end diff --git a/server/Spells/Priest/Cleric/Inquisitor/Swill.lua b/server/Spells/Priest/Cleric/Inquisitor/Swill.lua new file mode 100644 index 000000000..90d17dec3 --- /dev/null +++ b/server/Spells/Priest/Cleric/Inquisitor/Swill.lua @@ -0,0 +1,26 @@ +--[[ + Script Name : Spells/Priest/Cleric/Inquisitor/Swill.lua + Script Author : John Adams + Script Date : 2013.08.11 06:08:46 + Script Purpose : + : +--]] + +function cast(Caster, Target) + -- code to cast the spell + Say(Caster, "Whoops! Guess this is not implemented yet!") + +-- Info from spell_display_effects (remove from script when done) +-- Allows group members (AE) to breathe under water +-- Increases Swimming of group members (AE) by 62.1 + +end + +function tick(Caster, Target) + -- code to process each call_frequency (tick) set in spell_tiers +end + +function remove(Caster, Target) + -- code to remove the spell +end + diff --git a/server/Spells/Priest/Cleric/Inquisitor/Tenacity.lua b/server/Spells/Priest/Cleric/Inquisitor/Tenacity.lua new file mode 100644 index 000000000..6665d2122 --- /dev/null +++ b/server/Spells/Priest/Cleric/Inquisitor/Tenacity.lua @@ -0,0 +1,16 @@ +--[[ + Script Name : Tenacity.lua + Script Purpose : Inquisitor Tenacity spell line + Script Author : Zcoretri + Script Date : 23.May.2010 + Script Notes : +--]] + +function cast(Caster, Target, HealthAmt, SkillAmt) + AddSpellBonus(Target, 1, HealthAmt) -- Sta + AddSpellBonus(Target, 641, SkillAmt) -- Multi Attack +end + +function remove(Caster, Target, HealthAmt, SkillAmt) + RemoveSpellBonus(Target) +end \ No newline at end of file diff --git a/server/Spells/Priest/Cleric/Inquisitor/Torment.lua b/server/Spells/Priest/Cleric/Inquisitor/Torment.lua new file mode 100644 index 000000000..c164a1322 --- /dev/null +++ b/server/Spells/Priest/Cleric/Inquisitor/Torment.lua @@ -0,0 +1,24 @@ +--[[ + Script Name : Torment.lua + Script Purpose : Inquisitor Debuff + DoT Damage + Script Author : Zcoretri + Script Date : 23.May.2010 UPDated by neatz09 10-15-19 + Script Notes : +--]] + +function cast(Caster, Target, DmgType, MinDmg, MaxDmg, Debuff) + Say(Caster, "Combat Mitigation component not supported") + +-- Debuff component + AddSpellBonus(Target, 203, Debuff) + -- Instant Damage +SpellDamage(Target, DmgType, MinDmg, MaxDmg) +end + +function tick(Caster, Target, DmgType, MinDmg, MaxDmg) +SpellDamage(Target, DmgType, MinDmg, MaxDmg) +end + +function remove(Caster, Target) +RemoveSpellBonus(Target) +end diff --git a/server/Spells/Priest/Cleric/Inquisitor/TormentingConversion.lua b/server/Spells/Priest/Cleric/Inquisitor/TormentingConversion.lua new file mode 100644 index 000000000..25b56568e --- /dev/null +++ b/server/Spells/Priest/Cleric/Inquisitor/TormentingConversion.lua @@ -0,0 +1,34 @@ +--[[ + Script Name : Spells/Priest/Cleric/Inquisitor/TormentingConversion.lua + Script Author : John Adams + Script Date : 2013.08.11 06:08:11 + Script Purpose : + : +--]] + +function cast(Caster, Target) + -- code to cast the spell + Say(Caster, "Whoops! Guess this is not implemented yet!") + +-- Info from spell_display_effects (remove from script when done) +-- Makes target afraid +-- Applies Traumatization on termination. Lasts for 8.8 seconds. +-- Decreases Threat to target by 759 instantly and Decreases Threat by 801 every 1.8 seconds thereafter +-- Mesmerizes target +-- Dispelled when target takes damage +-- Epic targets gain an immunity to Mesmerize effects of 26.3 seconds and duration is reduced to 2.9 seconds. +-- Resistibility increases against targets higher than level 76. +-- 30% chance to dispel when target takes damage +-- Does not affect Epic targets +-- Resistibility increases against targets higher than level 29. + +end + +function tick(Caster, Target) + -- code to process each call_frequency (tick) set in spell_tiers +end + +function remove(Caster, Target) + -- code to remove the spell +end + diff --git a/server/Spells/Priest/Cleric/Inquisitor/Vengeance.lua b/server/Spells/Priest/Cleric/Inquisitor/Vengeance.lua new file mode 100644 index 000000000..c91dd542f --- /dev/null +++ b/server/Spells/Priest/Cleric/Inquisitor/Vengeance.lua @@ -0,0 +1,12 @@ +--[[ + Script Name : Spells/Priest/Cleric/Inquisitor/Vengeance.lua + Script Author : neatz09 + Script Date : 2019.10.04 05:10:46 + Script Purpose : + : +--]] + +-- Info from spell_display_effects (remove from script when done) +-- On a melee hit this spell will cast Vengeance on caster. +-- Inflicts 237 divine damage on target +-- Grants a total of 5 triggers of the spell. diff --git a/server/Spells/Priest/Cleric/Inquisitor/Verdict.lua b/server/Spells/Priest/Cleric/Inquisitor/Verdict.lua new file mode 100644 index 000000000..6210e7f3d --- /dev/null +++ b/server/Spells/Priest/Cleric/Inquisitor/Verdict.lua @@ -0,0 +1,41 @@ +--[[ + Script Name : Spells/Priest/Cleric/Inquisitor/Verdict.lua + Script Author : John Adams + Script Date : 2013.08.11 06:08:14 + Script Purpose : + : +--]] + +function cast(Caster, Target) + -- code to cast the spell + Say(Caster, "Whoops! Guess this is not implemented yet!") + +-- Info from spell_display_effects (remove from script when done) +-- Applies Verdict. +-- Reduces target's health to 1. +-- Certain creature strengths only +-- If under 25% Health +-- Applies Verdict. +-- Reduces target's health to 1. +-- If Target is stronger than Standard +-- If under 10% Health +-- Applies Verdict. +-- Reduces target's health to 1. +-- If Target is Epic +-- If under 2% Health +-- Applies Verdict. +-- Reduces target's health to 1. +-- If Target is Weak +-- If under 50% Health +-- Cannot be modified except by direct means + +end + +function tick(Caster, Target) + -- code to process each call_frequency (tick) set in spell_tiers +end + +function remove(Caster, Target) + -- code to remove the spell +end + diff --git a/server/Spells/Priest/Cleric/Inquisitor/Weakness.lua b/server/Spells/Priest/Cleric/Inquisitor/Weakness.lua new file mode 100644 index 000000000..eb4e45a09 --- /dev/null +++ b/server/Spells/Priest/Cleric/Inquisitor/Weakness.lua @@ -0,0 +1,54 @@ +--[[ + Script Name : debuff.lua + Script Purpose : Generic Debuff script + Script Author : John Adams + Script Date : 2008.12.05 +--]] + +function cast(Caster, Target, DebuffType, MinDebuffVal, MaxDebuffVal) + + -- Debuff component + -- Determine if there is a range to effect values + if MaxDebuffVal ~= nil and MinDebuffVal < MaxDebuffVal then + -- JA: for debuff randoms (if any), need to to math.random with precision - I think this function rounds up? + DebuffValue = math.random(MinDebuffVal, MaxDebuffVal) + else + DebuffValue = MinDebuffVal + end + + -- Determine DebuffType - either a DamageType or a String value passed as param 1 + -- Need functionality to buff/debuff + if DebuffType == "Defense" then + -- ModifyDefense(Target, -DebuffValue) + end + if DebuffType == "Elemental" then + -- ModifyHeat(Target, -DebuffValue) + -- ModifyCold(Target, -DebuffValue) + end + if DebuffType == "Noxious" then + -- ModifyPoison(Target, -DebuffValue) + -- ModifyDisease(Target, -DebuffValue) + end + +end + +function tick(Caster, Target, DebuffType, MinDebuffVal, MaxDebuffVal) + +end + +function remove(Caster, Target, DebuffType, MinDebuffVal, MaxDebuffVal) +-- Need functionality to restore original mitigations + + if DebuffType == "Defense" then + -- ModifyDefense(Target, Original) + end + if DebuffType == "Elemental" then + -- ModifyHeat(Target, Original) + -- ModifyCold(Target, Original) + end + if DebuffType == "Noxious" then + -- ModifyPoison(Target, Original) + -- ModifyDisease(Target, Original) + end + +end diff --git a/server/Spells/Priest/Cleric/Inquisitor/Writhe.lua b/server/Spells/Priest/Cleric/Inquisitor/Writhe.lua new file mode 100644 index 000000000..7f21fc6ae --- /dev/null +++ b/server/Spells/Priest/Cleric/Inquisitor/Writhe.lua @@ -0,0 +1,79 @@ +--[[ + Script Name : dot_debuff.lua + Script Purpose : Generic damage + 1 effect script + Script Author : John Adams + Script Date : 2008.12.04 +--]] + +function cast(Caster, Target, DOTType, MinDOTVal, MaxDOTVal, DebuffType, MinDebuffVal, MaxDebuffVal) + + -- Debuff component + -- Determine if there is a range to effect values + if MaxDebuffVal ~= nil and MinDebuffVal < MaxDebuffVal then + + -- JA: for debuff randoms (if any), need to to math.random with precision - I think this function rounds up? + DebuffValue = math.random(MinDebuffVal, MaxDebuffVal) + + else + + DebuffValue = MinDebuffVal + + end + + -- Determine DebuffType - either a DamageType or a String value passed as param 4 + if DebuffType == "Defense" then + + -- Need functionality to buff/debuff + -- ModifyDefense(Target, -DebuffValue) + + end + + if DebuffType == "Elemental" then + + -- Need functionality to buff/debuff + -- ModifyHeat(Target, -DebuffValue) + -- ModifyCole(Target, -DebuffValue) + + end + + -- DOT component (instant damage) + if MaxDOTVal ~= nil and MinDOTVal < MaxDOTVal then + + SpellDamage(Target, DOTType, math.random(MinDOTVal, MaxDOTVal)) + + else + + SpellDamage(Target, DOTType, MinDOTVal) + + end + +end + +function tick(Caster, Target, DOTType, MinDOTVal, MaxDOTVal, DebuffType, MinDebuffVal, MaxDebuffVal) + + if MaxDOTVal ~= nil and MinDOTVal < MaxDOTVal then + + SpellDamage(Target, DOTType, math.random(MinDOTVal, MaxDOTVal)) + + else + + SpellDamage(Target, DOTType, MinDOTVal) + + end + +end + +function remove(Caster, Target, DOTType, MinDOTVal, MaxDOTVal, DebuffType, MinDebuffVal, MaxDebuffVal) + + if DebuffType == "Defense" then + -- Need functionality to restore original mitigations + -- ModifyDefense(Target, Original) + end + + if DebuffType == "Elemental" then + -- Need functionality to restore original mitigations + -- ModifyHeat(Target, Original) + -- ModifyCold(Target, Original) + end + +end diff --git a/server/Spells/Priest/Cleric/Odyssey.lua b/server/Spells/Priest/Cleric/Odyssey.lua new file mode 100644 index 000000000..4b37f3ef1 --- /dev/null +++ b/server/Spells/Priest/Cleric/Odyssey.lua @@ -0,0 +1,28 @@ +--[[ + Script Name : Spells/Priest/Cleric/Odyssey.lua + Script Author : John Adams + Script Date : 2013.08.11 06:08:33 + Script Purpose : + : +--]] + +function cast(Caster, Target) + -- code to cast the spell + Say(Caster, "Whoops! Guess this is not implemented yet!") + +-- Info from spell_display_effects (remove from script when done) +-- Teleports target to a zone landmark +-- You must be a citizen to benefit from an odyssey. +-- This effect cannot be cast during combat +-- If not a City Betrayer + +end + +function tick(Caster, Target) + -- code to process each call_frequency (tick) set in spell_tiers +end + +function remove(Caster, Target) + -- code to remove the spell +end + diff --git a/server/Spells/Priest/Cleric/Radiance.lua b/server/Spells/Priest/Cleric/Radiance.lua new file mode 100644 index 000000000..83be60d9a --- /dev/null +++ b/server/Spells/Priest/Cleric/Radiance.lua @@ -0,0 +1,27 @@ +--[[ + Script Name : Spells/Priest/Cleric/Radiance.lua + Script Author : John Adams + Script Date : 2013.08.11 06:08:34 + Script Purpose : + : +--]] + +function cast(Caster, Target) + -- code to cast the spell + Say(Caster, "Whoops! Guess this is not implemented yet!") + +-- Info from spell_display_effects (remove from script when done) +-- When any damage is received this spell will cast Vitae on target. +-- Heals target for 52 - 64 +-- Grants a total of 5 triggers of the spell. + +end + +function tick(Caster, Target) + -- code to process each call_frequency (tick) set in spell_tiers +end + +function remove(Caster, Target) + -- code to remove the spell +end + diff --git a/server/Spells/Priest/Cleric/SmiteCorruption.lua b/server/Spells/Priest/Cleric/SmiteCorruption.lua new file mode 100644 index 000000000..281e26470 --- /dev/null +++ b/server/Spells/Priest/Cleric/SmiteCorruption.lua @@ -0,0 +1,26 @@ +--[[ + Script Name : Spells/Priest/Cleric/SmiteCorruption.lua + Script Author : John Adams + Script Date : 2013.08.11 06:08:38 + Script Purpose : + : +--]] + +function cast(Caster, Target) + -- code to cast the spell + Say(Caster, "Whoops! Guess this is not implemented yet!") + +-- Info from spell_display_effects (remove from script when done) +-- Inflicts 1 - 2 divine damage on target instantly and every 4 seconds +-- Decreases WIS of target by 24.3 + +end + +function tick(Caster, Target) + -- code to process each call_frequency (tick) set in spell_tiers +end + +function remove(Caster, Target) + -- code to remove the spell +end + diff --git a/server/Spells/Priest/Cleric/Soothe.lua b/server/Spells/Priest/Cleric/Soothe.lua new file mode 100644 index 000000000..41fca91be --- /dev/null +++ b/server/Spells/Priest/Cleric/Soothe.lua @@ -0,0 +1,28 @@ +--[[ + Script Name : Spells/Priest/Cleric/Soothe.lua + Script Author : John Adams + Script Date : 2013.08.11 06:08:34 + Script Purpose : + : +--]] + +function cast(Caster, Target) + -- code to cast the spell + Say(Caster, "Whoops! Guess this is not implemented yet!") + +-- Info from spell_display_effects (remove from script when done) +-- Reduces Awareness of Enemies +-- If Target is not Epic +-- Dispelled when target receives hostile action +-- Dispelled when target takes damage + +end + +function tick(Caster, Target) + -- code to process each call_frequency (tick) set in spell_tiers +end + +function remove(Caster, Target) + -- code to remove the spell +end + diff --git a/server/Spells/Priest/Cleric/Templar/Aegolism.lua b/server/Spells/Priest/Cleric/Templar/Aegolism.lua new file mode 100644 index 000000000..26d291038 --- /dev/null +++ b/server/Spells/Priest/Cleric/Templar/Aegolism.lua @@ -0,0 +1,19 @@ +--[[ + Script Name : Aegolism.lua + Script Purpose : Templar Aegolism spell line + Script Author : Zcoretri + Script Date : 2010.3.18 +--]] + +function cast(Caster, Target, StaAmt, SkillAmt) + AddSpellBonus(Target, 1, StaAmt) + AddSkillBonus(Target, 418532101, SkillAmt) --Slashing + AddSkillBonus(Target, 3421494576, SkillAmt) --Crushing + AddSkillBonus(Target, 3048574950, SkillAmt) --Piercing + AddSkillBonus(Target, 1756482397, SkillAmt) --Ranged +end + +function remove(Caster, Target, StaAmt, SkillAmt) + RemoveSpellBonus() + RemoveSkillBonus() +end \ No newline at end of file diff --git a/server/Spells/Priest/Cleric/Templar/Awestruck.lua b/server/Spells/Priest/Cleric/Templar/Awestruck.lua new file mode 100644 index 000000000..0ceec5f78 --- /dev/null +++ b/server/Spells/Priest/Cleric/Templar/Awestruck.lua @@ -0,0 +1,28 @@ +--[[ + Script Name : Spells/Priest/Cleric/Templar/Awestruck.lua + Script Author : neatz09 + Script Date : 2019.10.15 12:10:54 + Script Purpose : + : +--]] + +-- Info from spell_display_effects (remove from script when done) +-- Stuns target +-- Does not affect Epic targets +-- Resistibility increases against targets higher than level 29. + +function cast(Caster, Target) +if not IsEpic(Target) then + AddControlEffect(Target, 4) + Say(Caster, "Resistibility not implemented yet.") +end + +end + + +function remove(Caster, Target) + RemoveControlEffect(Target, 4) + +end + + diff --git a/server/Spells/Priest/Cleric/Templar/BattlesReprieve.lua b/server/Spells/Priest/Cleric/Templar/BattlesReprieve.lua new file mode 100644 index 000000000..0b0b241cf --- /dev/null +++ b/server/Spells/Priest/Cleric/Templar/BattlesReprieve.lua @@ -0,0 +1,40 @@ +--[[ + Script Name : Spells/Priest/Cleric/Templar/BattlesReprieve.lua + Script Author : John Adams + Script Date : 2013.08.11 06:08:48 + Script Purpose : + : +--]] + +function cast(Caster, Target) + -- code to cast the spell + Say(Caster, "Whoops! Guess this is not implemented yet!") + +-- Info from spell_display_effects (remove from script when done) +-- Resurrects target with 15% health and power +-- Applies Battle's Reprieve on termination. Lasts for 1 minute. +-- Heals target for 27.6% of max health +-- Increases Mitigation of target vs physical damage by 220 +-- Applies Revived Sickness on termination. Lasts for 2 minutes. +-- Decreases Toughness of target by 75.0 +-- Decreases Lethality of target by 75.0 +-- Decreases All Attributes of target by 20.0% +-- If not between levels 1 - 6 +-- Decreases Attack Speed of target by 20.0 +-- If not between levels 1 - 6 +-- Decreases Attack Speed of target by 5.0 +-- If between levels 1 - 6 +-- Decreases All Attributes of target by 5.0% +-- If between levels 1 - 6 +-- If outside an arena + +end + +function tick(Caster, Target) + -- code to process each call_frequency (tick) set in spell_tiers +end + +function remove(Caster, Target) + -- code to remove the spell +end + diff --git a/server/Spells/Priest/Cleric/Templar/Beneficence.lua b/server/Spells/Priest/Cleric/Templar/Beneficence.lua new file mode 100644 index 000000000..8115a2e34 --- /dev/null +++ b/server/Spells/Priest/Cleric/Templar/Beneficence.lua @@ -0,0 +1,26 @@ +--[[ + Script Name : Spells/Priest/Cleric/Templar/Beneficence.lua + Script Author : John Adams + Script Date : 2013.08.11 06:08:08 + Script Purpose : + : +--]] + +function cast(Caster, Target) + -- code to cast the spell + Say(Caster, "Whoops! Guess this is not implemented yet!") + +-- Info from spell_display_effects (remove from script when done) +-- When any damage is received this spell will cast Supplicant's Prayer on target, which can be triggered up to 9 times across all targets. +-- Heals target for 195 - 238 + +end + +function tick(Caster, Target) + -- code to process each call_frequency (tick) set in spell_tiers +end + +function remove(Caster, Target) + -- code to remove the spell +end + diff --git a/server/Spells/Priest/Cleric/Templar/BlazeofFaith.lua b/server/Spells/Priest/Cleric/Templar/BlazeofFaith.lua new file mode 100644 index 000000000..fca7bc464 --- /dev/null +++ b/server/Spells/Priest/Cleric/Templar/BlazeofFaith.lua @@ -0,0 +1,12 @@ +--[[ + Script Name : Spells/Priest/Cleric/Templar/BlazeofFaith.lua + Script Author : neatz09 + Script Date : 2019.10.14 11:10:27 + Script Purpose : + : +--]] +-- Inflicts 350 divine damage on target encounter + +function cast(Caster, Target, DmgType, MinVal, MaxVal) +SpellDamage(Target, DmgType, MinVal, MaxVal) +end diff --git a/server/Spells/Priest/Cleric/Templar/BlazonLife.lua b/server/Spells/Priest/Cleric/Templar/BlazonLife.lua new file mode 100644 index 000000000..955fbd5ed --- /dev/null +++ b/server/Spells/Priest/Cleric/Templar/BlazonLife.lua @@ -0,0 +1,40 @@ +--[[ + Script Name : Spells/Priest/Cleric/Templar/BlazonLife.lua + Script Author : John Adams + Script Date : 2013.08.11 06:08:58 + Script Purpose : + : +--]] + +function cast(Caster, Target) + -- code to cast the spell + Say(Caster, "Whoops! Guess this is not implemented yet!") + +-- Info from spell_display_effects (remove from script when done) +-- Applies Battle's Reprieve on termination. Lasts for 1 minute. +-- Heals target for 27.6% of max health +-- Increases Mitigation of target vs physical damage by 360 +-- Applies Revived Sickness on termination. Lasts for 2 minutes. +-- Decreases Toughness of target by 98.0 +-- Decreases Lethality of target by 98.0 +-- Decreases All Attributes of target by 20.0% +-- If not between levels 1 - 6 +-- Decreases Attack Speed of target by 20.0 +-- If not between levels 1 - 6 +-- Decreases Attack Speed of target by 5.0 +-- If between levels 1 - 6 +-- Decreases All Attributes of target by 5.0% +-- If between levels 1 - 6 +-- Resurrects target with 15% health and power +-- If outside an arena + +end + +function tick(Caster, Target) + -- code to process each call_frequency (tick) set in spell_tiers +end + +function remove(Caster, Target) + -- code to remove the spell +end + diff --git a/server/Spells/Priest/Cleric/Templar/DevotedResolve.lua b/server/Spells/Priest/Cleric/Templar/DevotedResolve.lua new file mode 100644 index 000000000..7166e0042 --- /dev/null +++ b/server/Spells/Priest/Cleric/Templar/DevotedResolve.lua @@ -0,0 +1,14 @@ +--[[ + Script Name : Spells/Priest/Cleric/Templar/DevotedResolve.lua + Script Author : neatz09 + Script Date : 2019.10.06 08:10:07 + Script Purpose : + : +--]] + +-- Dispels 42 levels of any hostile effects on group members (AE) +function cast(Caster, Target, Amt) + CureByType(Amt, 0, "Cure") +end + +-- You cannot cast this spell while under the effects of something that supresses the use of group cures! \ No newline at end of file diff --git a/server/Spells/Priest/Cleric/Templar/DivineArbitration.lua b/server/Spells/Priest/Cleric/Templar/DivineArbitration.lua new file mode 100644 index 000000000..567883f88 --- /dev/null +++ b/server/Spells/Priest/Cleric/Templar/DivineArbitration.lua @@ -0,0 +1,24 @@ +--[[ + Script Name : Spells/Priest/Cleric/Templar/DivineArbitration.lua + Script Author : John Adams + Script Date : 2013.08.11 06:08:17 + Script Purpose : + : +--]] + +function cast(Caster, Target) + -- code to cast the spell + Say(Caster, "Whoops! Guess this is not implemented yet!") + +-- Info from spell_display_effects (remove from script when done) + +end + +function tick(Caster, Target) + -- code to process each call_frequency (tick) set in spell_tiers +end + +function remove(Caster, Target) + -- code to remove the spell +end + diff --git a/server/Spells/Priest/Cleric/Templar/DivineLight.lua b/server/Spells/Priest/Cleric/Templar/DivineLight.lua new file mode 100644 index 000000000..812287f16 --- /dev/null +++ b/server/Spells/Priest/Cleric/Templar/DivineLight.lua @@ -0,0 +1,25 @@ +--[[ + Script Name : Spells/Priest/Cleric/Templar/DivineLight.lua + Script Author : John Adams + Script Date : 2013.08.11 06:08:48 + Script Purpose : + : +--]] + +function cast(Caster, Target) + -- code to cast the spell + Say(Caster, "Whoops! Guess this is not implemented yet!") + +-- Info from spell_display_effects (remove from script when done) +-- Reduces all damage done to the target by 8%. 50% of the reduced damage is reflected on the attacker. + +end + +function tick(Caster, Target) + -- code to process each call_frequency (tick) set in spell_tiers +end + +function remove(Caster, Target) + -- code to remove the spell +end + diff --git a/server/Spells/Priest/Cleric/Templar/DivineSmite.lua b/server/Spells/Priest/Cleric/Templar/DivineSmite.lua new file mode 100644 index 000000000..bd896e4a2 --- /dev/null +++ b/server/Spells/Priest/Cleric/Templar/DivineSmite.lua @@ -0,0 +1,15 @@ +--[[ + Script Name : Spells/Priest/Cleric/Templar/DivineSmite.lua + Script Purpose : Templar Direct Damage spell + Script Author : Zcoretri + Script Date : 2010.2.14 +--]] + +function cast(Caster, Target, DmgType, MinDmg, MaxDmg) + + if MaxDmg ~= nil and MinDmg < MaxDmg then + dmgAmount = math.random(MinDmg, MaxDmg) + SpellDamage(Target, DmgType, dmgAmount) + end + +end \ No newline at end of file diff --git a/server/Spells/Priest/Cleric/Templar/DivineStrike.lua b/server/Spells/Priest/Cleric/Templar/DivineStrike.lua new file mode 100644 index 000000000..e3a23fb37 --- /dev/null +++ b/server/Spells/Priest/Cleric/Templar/DivineStrike.lua @@ -0,0 +1,15 @@ +--[[ + Script Name : DivineStrike.lua + Script Purpose : Templar Direct Damage spell with Undead bonus damage + Script Author : theFoof + Script Date : 2014.3.9 +--]] + +function cast(Caster, Target, DmgType, MinDmg, MaxDmg) + SpellDamage(Target, DmgType, MinDmg, MaxDmg) + + --[[ We don't have racetypes on npcs yet + if GetRaceType(Target) == "Undead" then + SpellDamage(Target, DmgType, MinDmg, MaxDmg) + end--]] +end \ No newline at end of file diff --git a/server/Spells/Priest/Cleric/Templar/FocusedIntervention.lua b/server/Spells/Priest/Cleric/Templar/FocusedIntervention.lua new file mode 100644 index 000000000..08de322ef --- /dev/null +++ b/server/Spells/Priest/Cleric/Templar/FocusedIntervention.lua @@ -0,0 +1,24 @@ +--[[ + Script Name : Spells/Priest/Cleric/Templar/FocusedIntervention.lua + Script Author : John Adams + Script Date : 2013.08.11 06:08:20 + Script Purpose : + : +--]] + +function cast(Caster, Target) + -- code to cast the spell + Say(Caster, "Whoops! Guess this is not implemented yet!") + +-- Info from spell_display_effects (remove from script when done) + +end + +function tick(Caster, Target) + -- code to process each call_frequency (tick) set in spell_tiers +end + +function remove(Caster, Target) + -- code to remove the spell +end + diff --git a/server/Spells/Priest/Cleric/Templar/Glory.lua b/server/Spells/Priest/Cleric/Templar/Glory.lua new file mode 100644 index 000000000..d5d683bc5 --- /dev/null +++ b/server/Spells/Priest/Cleric/Templar/Glory.lua @@ -0,0 +1,24 @@ +--[[ + Script Name : Spells/Priest/Cleric/Templar/Glory.lua + Script Author : John Adams + Script Date : 2013.08.11 06:08:04 + Script Purpose : + : +--]] + +function cast(Caster, Target) + -- code to cast the spell + Say(Caster, "Whoops! Guess this is not implemented yet!") + +-- Info from spell_display_effects (remove from script when done) + +end + +function tick(Caster, Target) + -- code to process each call_frequency (tick) set in spell_tiers +end + +function remove(Caster, Target) + -- code to remove the spell +end + diff --git a/server/Spells/Priest/Cleric/Templar/Harmony.lua b/server/Spells/Priest/Cleric/Templar/Harmony.lua new file mode 100644 index 000000000..1deda70ca --- /dev/null +++ b/server/Spells/Priest/Cleric/Templar/Harmony.lua @@ -0,0 +1,15 @@ +--[[ + Script Name : Spells/Priest/Cleric/Templar/Harmony.lua + Script Author : neatz09 + Script Date : 2019.10.15 12:10:38 + Script Purpose : + : +--]] + +-- Info from spell_display_effects (remove from script when done) +-- Decreases threat priority of targets in Area of Effect by 1 position +-- Decreases Threat to targets in Area of Effect by 13,094 +-- Dazes targets in Area of Effect +-- If Target is not Epic +-- Dispelled when target receives hostile action +-- Dispelled when target takes damage diff --git a/server/Spells/Priest/Cleric/Templar/HealingFate.lua b/server/Spells/Priest/Cleric/Templar/HealingFate.lua new file mode 100644 index 000000000..d3cd3a5a6 --- /dev/null +++ b/server/Spells/Priest/Cleric/Templar/HealingFate.lua @@ -0,0 +1,26 @@ +--[[ + Script Name : Spells/Priest/Cleric/Templar/HealingFate.lua + Script Author : John Adams + Script Date : 2013.08.11 06:08:43 + Script Purpose : + : +--]] + +function cast(Caster, Target) + -- code to cast the spell + Say(Caster, "Whoops! Guess this is not implemented yet!") + +-- Info from spell_display_effects (remove from script when done) +-- When target receives a reduction in health of 20% this spell will cast Fate of Healing on caster. +-- Heals group members (AE) for 169 + +end + +function tick(Caster, Target) + -- code to process each call_frequency (tick) set in spell_tiers +end + +function remove(Caster, Target) + -- code to remove the spell +end + diff --git a/server/Spells/Priest/Cleric/Templar/HolyArmor.lua b/server/Spells/Priest/Cleric/Templar/HolyArmor.lua new file mode 100644 index 000000000..90077dde8 --- /dev/null +++ b/server/Spells/Priest/Cleric/Templar/HolyArmor.lua @@ -0,0 +1,15 @@ +--[[ + Script Name : Spells/Priest/Cleric/Templar/HolyArmor.lua + Script Purpose : Templar Holy Armor spell line + Script Author : theFoof + Script Date : 2014.3.9 +--]] + +function cast(Caster, Target, HealthAmt, MitAmt) + AddSpellBonus(Target, 200, MitAmt, 11, 21, 31) + AddSpellBonus(Target, 500, HealthAmt, 1) +end + +function remove(Caster, Target, HealthAmt, MitAmt) + RemoveSpellBonus() +end \ No newline at end of file diff --git a/server/Spells/Priest/Cleric/Templar/HolyIntercession.lua b/server/Spells/Priest/Cleric/Templar/HolyIntercession.lua new file mode 100644 index 000000000..085650421 --- /dev/null +++ b/server/Spells/Priest/Cleric/Templar/HolyIntercession.lua @@ -0,0 +1,24 @@ +--[[ + Script Name : Spells/Priest/Cleric/Templar/HolyIntercession.lua + Script Author : Zcoretri + Script Date : 2014.03.13 + Script Purpose : + : +--]] + +function cast(Caster, Target, HealLow, HealHigh, Triggers) +-- When any damage is received this spell will cast Divine Prayer on target, which can be triggered up to 9 times across all targets. +-- Heals target for 44 - 54 + AddProc(Target, 15, 100, 0, 1) + SetSpellTriggerCount(Triggers, 1) +end + +function proc(Caster, Target, ProcType, HealLow, HealHigh) + SpellHeal("Heal", HealLow, HealHigh) + RemoveTriggerFromSpell() +end + +function remove(Caster, Target) + RemoveProc(Target) +end + diff --git a/server/Spells/Priest/Cleric/Templar/HolySalvation.lua b/server/Spells/Priest/Cleric/Templar/HolySalvation.lua new file mode 100644 index 000000000..643894fc9 --- /dev/null +++ b/server/Spells/Priest/Cleric/Templar/HolySalvation.lua @@ -0,0 +1,24 @@ +--[[ + Script Name : Spells/Priest/Cleric/Templar/HolySalvation.lua + Script Author : John Adams + Script Date : 2013.08.11 06:08:24 + Script Purpose : + : +--]] + +function cast(Caster, Target) + -- code to cast the spell + Say(Caster, "Whoops! Guess this is not implemented yet!") + +-- Info from spell_display_effects (remove from script when done) + +end + +function tick(Caster, Target) + -- code to process each call_frequency (tick) set in spell_tiers +end + +function remove(Caster, Target) + -- code to remove the spell +end + diff --git a/server/Spells/Priest/Cleric/Templar/ImpenetrableFaith.lua b/server/Spells/Priest/Cleric/Templar/ImpenetrableFaith.lua new file mode 100644 index 000000000..3f9ee4824 --- /dev/null +++ b/server/Spells/Priest/Cleric/Templar/ImpenetrableFaith.lua @@ -0,0 +1,29 @@ +--[[ + Script Name : Spells/Priest/Cleric/Templar/ImpenetrableFaith.lua + Script Author : John Adams + Script Date : 2013.08.11 06:08:56 + Script Purpose : + : +--]] + +function cast(Caster, Target) + -- code to cast the spell + Say(Caster, "Whoops! Guess this is not implemented yet!") + +-- Info from spell_display_effects (remove from script when done) +-- Makes Aegolism a group wide spell adding additional haste, defense, parry, deflection and aggression +-- On a beneficial spell cast this spell has a 12% chance to cast Impenetrable Faith on caster. Lasts for 15.0 seconds. +-- Makes caster immune to Stun effects and increases casting speed by 20% +-- Increases the heal amount of Supplicant's Prayer and Divine Prayer by 20% of the templar's wisdom. +-- Cannot be modified except by direct means + +end + +function tick(Caster, Target) + -- code to process each call_frequency (tick) set in spell_tiers +end + +function remove(Caster, Target) + -- code to remove the spell +end + diff --git a/server/Spells/Priest/Cleric/Templar/InvoluntaryGift.lua b/server/Spells/Priest/Cleric/Templar/InvoluntaryGift.lua new file mode 100644 index 000000000..69f450f6c --- /dev/null +++ b/server/Spells/Priest/Cleric/Templar/InvoluntaryGift.lua @@ -0,0 +1,27 @@ +--[[ + Script Name : Spells/Priest/Cleric/Templar/InvoluntaryGift.lua + Script Author : John Adams + Script Date : 2013.08.11 06:08:55 + Script Purpose : + : +--]] + +function cast(Caster, Target) + -- code to cast the spell + Say(Caster, "Whoops! Guess this is not implemented yet!") + +-- Info from spell_display_effects (remove from script when done) +-- On any combat or spell hit this spell may cast Involuntary Cure on target of attack. Triggers about 4.0 times per minute. +-- Dispels 36 levels of physical hostile effects on target +-- Heals targets in Area of Effect for 68 - 83 + +end + +function tick(Caster, Target) + -- code to process each call_frequency (tick) set in spell_tiers +end + +function remove(Caster, Target) + -- code to remove the spell +end + diff --git a/server/Spells/Priest/Cleric/Templar/MarkofDivinity.lua b/server/Spells/Priest/Cleric/Templar/MarkofDivinity.lua new file mode 100644 index 000000000..7c754e79d --- /dev/null +++ b/server/Spells/Priest/Cleric/Templar/MarkofDivinity.lua @@ -0,0 +1,12 @@ +--[[ + Script Name : Spells/Priest/Cleric/Templar/MarkofDivinity.lua + Script Author : neatz09 + Script Date : 2019.10.10 04:10:10 + Script Purpose : + : +--]] + +-- Info from spell_display_effects (remove from script when done) +-- Decreases Mitigation of target vs arcane damage by 168 +-- When damaged with a melee weapon this spell has a 20% chance to cast Mark of Nobility on target's attacker. Lasts for 8.0 seconds. +-- Heals target for 6 instantly and every 2 seconds diff --git a/server/Spells/Priest/Cleric/Templar/Meliorate.lua b/server/Spells/Priest/Cleric/Templar/Meliorate.lua new file mode 100644 index 000000000..74e5c93e2 --- /dev/null +++ b/server/Spells/Priest/Cleric/Templar/Meliorate.lua @@ -0,0 +1,14 @@ +--[[ + Script Name : Spells/Priest/Cleric/Templar/Meliorate.lua + Script Purpose : Templar small direct heal + Script Author : theFoof + Script Date : 2014.3.9 + Script Note : +--]] + +function cast(Caster, Target, MinHeal, MaxHeal) + SpellHeal("Heal", MinHeal, MaxHeal) +end + +function remove() +end diff --git a/server/Spells/Priest/Cleric/Templar/MeliorateX.lua b/server/Spells/Priest/Cleric/Templar/MeliorateX.lua new file mode 100644 index 000000000..e78b88cb0 --- /dev/null +++ b/server/Spells/Priest/Cleric/Templar/MeliorateX.lua @@ -0,0 +1,24 @@ +--[[ + Script Name : Spells/Priest/Cleric/Templar/MeliorateX.lua + Script Author : John Adams + Script Date : 2013.08.11 06:08:06 + Script Purpose : + : +--]] + +function cast(Caster, Target) + -- code to cast the spell + Say(Caster, "Whoops! Guess this is not implemented yet!") + +-- Info from spell_display_effects (remove from script when done) + +end + +function tick(Caster, Target) + -- code to process each call_frequency (tick) set in spell_tiers +end + +function remove(Caster, Target) + -- code to remove the spell +end + diff --git a/server/Spells/Priest/Cleric/Templar/Rebuke.lua b/server/Spells/Priest/Cleric/Templar/Rebuke.lua new file mode 100644 index 000000000..961047d41 --- /dev/null +++ b/server/Spells/Priest/Cleric/Templar/Rebuke.lua @@ -0,0 +1,15 @@ +--[[ + Script Name : Rebuke.lua + Script Purpose : Templar Mitigation debuff + Script Author : theFoof + Script Date : 2014.3.9 +--]] + +function cast(Caster, Target, DebuffVal) + AddSpellBonus(Target, 200, DebuffVal) + Interrupt(Caster, Target) +end + +function remove(Caster, Target) + RemoveSpellBonus() +end \ No newline at end of file diff --git a/server/Spells/Priest/Cleric/Templar/Repent.lua b/server/Spells/Priest/Cleric/Templar/Repent.lua new file mode 100644 index 000000000..5905a5924 --- /dev/null +++ b/server/Spells/Priest/Cleric/Templar/Repent.lua @@ -0,0 +1,25 @@ +--[[ + Script Name : Spells/Priest/Cleric/Templar/Repent.lua + Script Author : John Adams + Script Date : 2013.08.11 06:08:59 + Script Purpose : + : +--]] + +function cast(Caster, Target) + -- code to cast the spell + Say(Caster, "Whoops! Guess this is not implemented yet!") + +-- Info from spell_display_effects (remove from script when done) +-- Wards target against 19 points of all damage + +end + +function tick(Caster, Target) + -- code to process each call_frequency (tick) set in spell_tiers +end + +function remove(Caster, Target) + -- code to remove the spell +end + diff --git a/server/Spells/Priest/Cleric/Templar/Restoration.lua b/server/Spells/Priest/Cleric/Templar/Restoration.lua new file mode 100644 index 000000000..59f20c2e8 --- /dev/null +++ b/server/Spells/Priest/Cleric/Templar/Restoration.lua @@ -0,0 +1,14 @@ +--[[ + Script Name : Restoration.lua + Script Purpose : Templar large direct heal + Script Author : theFoof + Script Date : 2014.3.9 + Script Note : +--]] + +function cast(Caster, Target, MinHeal, MaxHeal) + SpellHeal("Heal", MinHeal, MaxHeal) +end + +function remove() +end \ No newline at end of file diff --git a/server/Spells/Priest/Cleric/Templar/Resurrect.lua b/server/Spells/Priest/Cleric/Templar/Resurrect.lua new file mode 100644 index 000000000..72be787cd --- /dev/null +++ b/server/Spells/Priest/Cleric/Templar/Resurrect.lua @@ -0,0 +1,28 @@ +--[[ + Script Name : Spells/Priest/Cleric/Templar/Resurrect.lua + Script Author : John Adams + Script Date : 2013.08.11 06:08:21 + Script Purpose : + : +--]] + +function cast(Caster, Target) + -- code to cast the spell + Say(Caster, "Whoops! Guess this is not implemented yet!") + +-- Info from spell_display_effects (remove from script when done) +-- Resurrects target with 15% health and power +-- Applies Resurrect on termination. +-- Heals target for 110.5% of max health +-- If outside an arena + +end + +function tick(Caster, Target) + -- code to process each call_frequency (tick) set in spell_tiers +end + +function remove(Caster, Target) + -- code to remove the spell +end + diff --git a/server/Spells/Priest/Cleric/Templar/Reverence.lua b/server/Spells/Priest/Cleric/Templar/Reverence.lua new file mode 100644 index 000000000..90e228157 --- /dev/null +++ b/server/Spells/Priest/Cleric/Templar/Reverence.lua @@ -0,0 +1,26 @@ +--[[ + Script Name : Spells/Priest/Cleric/Templar/Reverence.lua + Script Author : John Adams + Script Date : 2013.08.11 06:08:31 + Script Purpose : + : +--]] + +function cast(Caster, Target) + -- code to cast the spell + Say(Caster, "Whoops! Guess this is not implemented yet!") + +-- Info from spell_display_effects (remove from script when done) +-- 134% of target's power consumed will be added to target's health +-- Suspends when Windwalk or Sprint is active + +end + +function tick(Caster, Target) + -- code to process each call_frequency (tick) set in spell_tiers +end + +function remove(Caster, Target) + -- code to remove the spell +end + diff --git a/server/Spells/Priest/Cleric/Templar/Sanctuary.lua b/server/Spells/Priest/Cleric/Templar/Sanctuary.lua new file mode 100644 index 000000000..b18b71fd7 --- /dev/null +++ b/server/Spells/Priest/Cleric/Templar/Sanctuary.lua @@ -0,0 +1,24 @@ +--[[ + Script Name : Spells/Priest/Cleric/Templar/Sanctuary.lua + Script Author : John Adams + Script Date : 2013.08.11 06:08:55 + Script Purpose : + : +--]] + +function cast(Caster, Target) + -- code to cast the spell + Say(Caster, "Whoops! Guess this is not implemented yet!") + +-- Info from spell_display_effects (remove from script when done) + +end + +function tick(Caster, Target) + -- code to process each call_frequency (tick) set in spell_tiers +end + +function remove(Caster, Target) + -- code to remove the spell +end + diff --git a/server/Spells/Priest/Cleric/Templar/ShieldofFaith.lua b/server/Spells/Priest/Cleric/Templar/ShieldofFaith.lua new file mode 100644 index 000000000..9d8541764 --- /dev/null +++ b/server/Spells/Priest/Cleric/Templar/ShieldofFaith.lua @@ -0,0 +1,11 @@ +--[[ + Script Name : Spells/Priest/Cleric/Templar/ShieldofFaith.lua + Script Author : neatz09 + Script Date : 2019.10.01 08:10:56 + Script Purpose : + : +--]] + +-- Info from spell_display_effects (remove from script when done) +-- Wards group members (AE) against 13 points of arcane damage +-- Increases Mitigation of group members (AE) vs arcane damage by 769 diff --git a/server/Spells/Priest/Cleric/Templar/SignofPacification.lua b/server/Spells/Priest/Cleric/Templar/SignofPacification.lua new file mode 100644 index 000000000..62ebf6a44 --- /dev/null +++ b/server/Spells/Priest/Cleric/Templar/SignofPacification.lua @@ -0,0 +1,16 @@ +--[[ + Script Name : Spells/Priest/Cleric/Templar/SignofPacification.lua + Script Purpose : Templar control effect + Script Author : theFoof + Script Date : 2014.3.9 +--]] + +function cast(Caster, Target) + if not IsEpic(Target) then + AddControlEffect(Target, 3) --Daze effect + end +end + +function remove(Caster, Target) + RemoveControlEffect(Target, 3) +end diff --git a/server/Spells/Priest/Cleric/Templar/SymbolofMarzin.lua b/server/Spells/Priest/Cleric/Templar/SymbolofMarzin.lua new file mode 100644 index 000000000..7cda85ccb --- /dev/null +++ b/server/Spells/Priest/Cleric/Templar/SymbolofMarzin.lua @@ -0,0 +1,17 @@ +--[[ + Script Name : Spells/Priest/Cleric/Templar/SymbolofMarzin.lua + Script Author : Zcoretri + Script Date : 2014.03.13 + Script Purpose : Templar Symbol of Marzin line + : +--]] + +function cast(Caster, Target, StatAmt, MitAmt) + AddSpellBonus(Target, 1, StatAmt) + AddSpellBonus(Target, 203, MitAmt) +end + +function remove(Caster, Target, StatAmt, MitAmt) + RemoveSpellBonus() +end + diff --git a/server/Spells/Priest/Cleric/Templar/UnswervingHammer.lua b/server/Spells/Priest/Cleric/Templar/UnswervingHammer.lua new file mode 100644 index 000000000..bb21337ac --- /dev/null +++ b/server/Spells/Priest/Cleric/Templar/UnswervingHammer.lua @@ -0,0 +1,24 @@ +--[[ + Script Name : Spells/Priest/Cleric/Templar/UnswervingHammer.lua + Script Author : John Adams + Script Date : 2013.08.11 06:08:57 + Script Purpose : + : +--]] + +function cast(Caster, Target) + -- code to cast the spell + Say(Caster, "Whoops! Guess this is not implemented yet!") + +-- Info from spell_display_effects (remove from script when done) + +end + +function tick(Caster, Target) + -- code to process each call_frequency (tick) set in spell_tiers +end + +function remove(Caster, Target) + -- code to remove the spell +end + diff --git a/server/Spells/Priest/Cleric/Templar/UnyieldingBenediction.lua b/server/Spells/Priest/Cleric/Templar/UnyieldingBenediction.lua new file mode 100644 index 000000000..f22a3a652 --- /dev/null +++ b/server/Spells/Priest/Cleric/Templar/UnyieldingBenediction.lua @@ -0,0 +1,24 @@ +--[[ + Script Name : Spells/Priest/Cleric/Templar/UnyieldingBenediction.lua + Script Author : John Adams + Script Date : 2013.08.11 06:08:52 + Script Purpose : + : +--]] + +function cast(Caster, Target) + -- code to cast the spell + Say(Caster, "Whoops! Guess this is not implemented yet!") + +-- Info from spell_display_effects (remove from script when done) + +end + +function tick(Caster, Target) + -- code to process each call_frequency (tick) set in spell_tiers +end + +function remove(Caster, Target) + -- code to remove the spell +end + diff --git a/server/Spells/Priest/Cleric/Templar/Virtue.lua b/server/Spells/Priest/Cleric/Templar/Virtue.lua new file mode 100644 index 000000000..4f9f51215 --- /dev/null +++ b/server/Spells/Priest/Cleric/Templar/Virtue.lua @@ -0,0 +1,28 @@ +--[[ + Script Name : Spells/Priest/Cleric/Templar/Virtue.lua + Script Author : neatz09 + Script Date : 2019.10.10 04:10:37 + Script Purpose : + : +--]] + +-- Increases STR and WIS of target by 117.3 + +function cast(Caster, Target, Stat, Mit) + AddSpellBonus(Target, 0, Stat) + AddSpellBonus(Target, 3, Stat) +-- Increases Mitigation of target vs elemental, noxious and arcane damage by 748 +AddSpellBonus(Target, 201, Mit) + AddSpellBonus(Target, 202, Mit) + AddSpellBonus(Target, 203, Mit) + +end + + +function remove(Caster, Target) + RemoveSpellBonus(Target) + +end + + + diff --git a/server/Spells/Priest/Cleric/Templar/VitalIntercession.lua b/server/Spells/Priest/Cleric/Templar/VitalIntercession.lua new file mode 100644 index 000000000..994e7ea98 --- /dev/null +++ b/server/Spells/Priest/Cleric/Templar/VitalIntercession.lua @@ -0,0 +1,26 @@ +--[[ + Script Name : Spells/Priest/Cleric/Templar/VitalIntercession.lua + Script Author : theFoof + Script Date : 2014.3.9 + Script Purpose : + : +--]] + +function cast(Caster, Target, HealLow, HealHigh, Triggers) +-- When any damage is received this spell will cast Supplicant's Prayer on target. +-- Heals target for X - Y +-- Grants a total of 5 triggers of the spell. + + AddProc(Target, 15, 100) + SetSpellTriggerCount(Triggers, 1) +end + +function proc(Caster, Target, ProcType, HealLow, HealHigh) + SpellHeal("Heal", HealLow, HealHigh) + RemoveTriggerFromSpell() +end + +function remove(Caster, Target) + RemoveProc(Target) +end + diff --git a/server/Spells/Priest/Cleric/Templar/WarringDeities.lua b/server/Spells/Priest/Cleric/Templar/WarringDeities.lua new file mode 100644 index 000000000..73cd9cedb --- /dev/null +++ b/server/Spells/Priest/Cleric/Templar/WarringDeities.lua @@ -0,0 +1,22 @@ +--[[ + Script Name : Spells/Priest/Cleric/Templar/WarringDeities.lua + Script Author : neatz09 + Script Date : 2019.10.10 04:10:32 + Script Purpose : + : +--]] + +-- Info from spell_display_effects (remove from script when done) +-- Inflicts 58 - 71 divine damage on target + +function cast(Caster, Target, DmgType, MinVal, MaxVal, DotType, DotMin, DotMax) + SpellDamage(Target, DmgType, MinVal, MaxVal) +end + +-- Inflicts 24 - 30 divine damage on target every 4 seconds +function tick(Caster, Target) + SpellDamage(Target, DotType, DotMin, DotMax) +end + +function remove(Caster, Target) +end \ No newline at end of file diff --git a/server/Spells/Priest/Cleric/Templar/WateryRespite.lua b/server/Spells/Priest/Cleric/Templar/WateryRespite.lua new file mode 100644 index 000000000..efa9fc79f --- /dev/null +++ b/server/Spells/Priest/Cleric/Templar/WateryRespite.lua @@ -0,0 +1,26 @@ +--[[ + Script Name : Spells/Priest/Cleric/Templar/WateryRespite.lua + Script Author : John Adams + Script Date : 2013.08.11 06:08:55 + Script Purpose : + : +--]] + +function cast(Caster, Target) + -- code to cast the spell + Say(Caster, "Whoops! Guess this is not implemented yet!") + +-- Info from spell_display_effects (remove from script when done) +-- Allows group members (AE) to breathe under water +-- Increases Swimming of group members (AE) by 69.0 + +end + +function tick(Caster, Target) + -- code to process each call_frequency (tick) set in spell_tiers +end + +function remove(Caster, Target) + -- code to remove the spell +end + diff --git a/server/Spells/Priest/Cleric/Templar/WordofRedemption.lua b/server/Spells/Priest/Cleric/Templar/WordofRedemption.lua new file mode 100644 index 000000000..ec1f62076 --- /dev/null +++ b/server/Spells/Priest/Cleric/Templar/WordofRedemption.lua @@ -0,0 +1,15 @@ +--[[ + Script Name : Spells/Priest/Cleric/Templar/WordofRedemption.lua + Script Author : Zcoretri + Script Date : 2014.03.13 + Script Purpose : Templar Group AE heal + : +--]] + +function cast(Caster, Target, MinHeal, MaxHeal) + SpellHeal("Heal", MinHeal, MaxHeal) +end + +function remove(Caster, Target) +end + diff --git a/server/Spells/Priest/Cure.lua b/server/Spells/Priest/Cure.lua new file mode 100644 index 000000000..e6784e3af --- /dev/null +++ b/server/Spells/Priest/Cure.lua @@ -0,0 +1,19 @@ +--[[ + Script Name : Spells/Priest/Cure.lua + Script Author : theFoof + Script Date : 2014.1.13 + Script Purpose : + : +--]] + +function cast(Caster, Target) +-- Dispels X levels of any hostile effects on target + CureDetrimentByType(1, 1, "", (GetLevel(Caster) * 1.08) + 1) + CureDetrimentByType(1, 2, "", (GetLevel(Caster) * 1.08) + 1) + CureDetrimentByType(1, 3, "", (GetLevel(Caster) * 1.08) + 1) + CureDetrimentByType(1, 4, "", (GetLevel(Caster) * 1.08) + 1) +end + +function remove(Caster, Target) +end + diff --git a/server/Spells/Priest/CureCurse.lua b/server/Spells/Priest/CureCurse.lua new file mode 100644 index 000000000..765c415dc --- /dev/null +++ b/server/Spells/Priest/CureCurse.lua @@ -0,0 +1,26 @@ +--[[ + Script Name : Spells/Priest/CureCurse.lua + Script Author : John Adams + Script Date : 2013.08.11 02:08:33 + Script Purpose : + : +--]] + +function cast(Caster, Target) + -- code to cast the spell + Say(Caster, "Whoops! Guess this is not implemented yet!") + +-- Info from spell_display_effects (remove from script when done) +-- Dispels 88 levels of curse effects on target +-- Cannot be modified except by direct means + +end + +function tick(Caster, Target) + -- code to process each call_frequency (tick) set in spell_tiers +end + +function remove(Caster, Target) + -- code to remove the spell +end + diff --git a/server/Spells/Priest/CureNoxious.lua b/server/Spells/Priest/CureNoxious.lua new file mode 100644 index 000000000..4cb6fcb52 --- /dev/null +++ b/server/Spells/Priest/CureNoxious.lua @@ -0,0 +1,13 @@ +--[[ + Script Name : Spells/Priest/CureNoxious.lua + Script Author : neatz09 + Script Date : 2019.10.06 08:10:24 + Script Purpose : + : +--]] + +-- Dispels 10 levels of noxious hostile effects on target + +function cast(Caster, Target, Amt) + CureByType(1, 3, "Cure", Amt) +end \ No newline at end of file diff --git a/server/Spells/Priest/DivineProvidence.lua b/server/Spells/Priest/DivineProvidence.lua new file mode 100644 index 000000000..32da97c4b --- /dev/null +++ b/server/Spells/Priest/DivineProvidence.lua @@ -0,0 +1,26 @@ +--[[ + Script Name : Spells/Priest/DivineProvidence.lua + Script Author : John Adams + Script Date : 2013.08.11 02:08:30 + Script Purpose : + : +--]] + +function cast(Caster, Target) + -- code to cast the spell + Say(Caster, "Whoops! Guess this is not implemented yet!") + +-- Info from spell_display_effects (remove from script when done) +-- Begins a Heroic Opportunity +-- Must be engaged in combat + +end + +function tick(Caster, Target) + -- code to process each call_frequency (tick) set in spell_tiers +end + +function remove(Caster, Target) + -- code to remove the spell +end + diff --git a/server/Spells/Priest/Druid/CircleofGrowth.lua b/server/Spells/Priest/Druid/CircleofGrowth.lua new file mode 100644 index 000000000..1bd27bc15 --- /dev/null +++ b/server/Spells/Priest/Druid/CircleofGrowth.lua @@ -0,0 +1,24 @@ +--[[ + Script Name : Spells/Priest/Druid/CircleofGrowth.lua + Script Author : John Adams + Script Date : 2013.08.11 07:08:20 + Script Purpose : + : +--]] + +function cast(Caster, Target) + -- code to cast the spell + Say(Caster, "Whoops! Guess this is not implemented yet!") + +-- Info from spell_display_effects (remove from script when done) + +end + +function tick(Caster, Target) + -- code to process each call_frequency (tick) set in spell_tiers +end + +function remove(Caster, Target) + -- code to remove the spell +end + diff --git a/server/Spells/Priest/Druid/FavorofthePhoenix.lua b/server/Spells/Priest/Druid/FavorofthePhoenix.lua new file mode 100644 index 000000000..ba8e3dbde --- /dev/null +++ b/server/Spells/Priest/Druid/FavorofthePhoenix.lua @@ -0,0 +1,26 @@ +--[[ + Script Name : Spells/Priest/Druid/FavorofthePhoenix.lua + Script Author : John Adams + Script Date : 2013.08.11 07:08:19 + Script Purpose : + : +--]] + +function cast(Caster, Target) + -- code to cast the spell + Say(Caster, "Whoops! Guess this is not implemented yet!") + +-- Info from spell_display_effects (remove from script when done) +-- Summon 1 Crystallized Phoenix Feather +-- This effect cannot be cast during combat + +end + +function tick(Caster, Target) + -- code to process each call_frequency (tick) set in spell_tiers +end + +function remove(Caster, Target) + -- code to remove the spell +end + diff --git a/server/Spells/Priest/Druid/Fury/Abolishment.lua b/server/Spells/Priest/Druid/Fury/Abolishment.lua new file mode 100644 index 000000000..1e26647e7 --- /dev/null +++ b/server/Spells/Priest/Druid/Fury/Abolishment.lua @@ -0,0 +1,13 @@ +--[[ + Script Name : Spells/Priest/Druid/Fury/Abolishment.lua + Script Author : neatz09 + Script Date : 2019.10.06 09:10:33 + Script Purpose : + : +--]] + +-- Dispels 42 levels of any hostile effects on group members (AE) +function cast(Caster, Target, Amt) + CureByType(Amt, 0, "Cure") +end +-- You cannot cast this spell while under the effects of something that supresses the use of group cures! diff --git a/server/Spells/Priest/Druid/Fury/ArmorofNature.lua b/server/Spells/Priest/Druid/Fury/ArmorofNature.lua new file mode 100644 index 000000000..3a65983bb --- /dev/null +++ b/server/Spells/Priest/Druid/Fury/ArmorofNature.lua @@ -0,0 +1,17 @@ +--[[ + Script Name : Spells/Priest/Druid/Fury/ArmorofNature.lua + Script Author : Jabantiz + Script Date : 2014.01.14 02:01:59 + Script Purpose : + : +--]] + +function cast(Caster, Target, HPBonus, ResistBonus) + -- Increases Max Health of group members (AE) by 21.6 + -- If fighter + AddSpellBonus(Target, 606, HPBonus, 11, 21, 31) + + -- Increases Mitigation of group members (AE) vs physical damage by 93 + -- If not fighter + AddSpellBonus(Target, 200, ResistBonus, 1) +end diff --git a/server/Spells/Priest/Druid/Fury/AutumnsKiss.lua b/server/Spells/Priest/Druid/Fury/AutumnsKiss.lua new file mode 100644 index 000000000..c7f4cce6b --- /dev/null +++ b/server/Spells/Priest/Druid/Fury/AutumnsKiss.lua @@ -0,0 +1,24 @@ +--[[ + Script Name : Spells/Priest/Druid/Fury/AutumnsKiss.lua + Script Author : Jabantiz + Script Date : 2014.01.14 03:01:53 + Script Purpose : + : +--]] + +-- Heals group members (AE) for 44 - 54 instantly and every 2 seconds +function cast(Caster, Target, MinVal, MaxVal) + if MaxVal ~= nil and MinVal < MaxVal then + SpellHeal("Heal", MinVal, MaxVal) + else + SpellHeal("Heal", MinVal) + end +end + +function tick(Caster, Target, MinVal, MaxVal) + if MaxVal ~= nil and MinVal < MaxVal then + SpellHeal("Heal", MinVal, MaxVal) + else + SpellHeal("Heal", MinVal) + end +end diff --git a/server/Spells/Priest/Druid/Fury/BackintotheFray.lua b/server/Spells/Priest/Druid/Fury/BackintotheFray.lua new file mode 100644 index 000000000..6d7280e3d --- /dev/null +++ b/server/Spells/Priest/Druid/Fury/BackintotheFray.lua @@ -0,0 +1,24 @@ +--[[ + Script Name : Spells/Priest/Druid/Fury/BackintotheFray.lua + Script Author : John Adams + Script Date : 2013.08.11 07:08:50 + Script Purpose : + : +--]] + +function cast(Caster, Target) + -- code to cast the spell + Say(Caster, "Whoops! Guess this is not implemented yet!") + +-- Info from spell_display_effects (remove from script when done) + +end + +function tick(Caster, Target) + -- code to process each call_frequency (tick) set in spell_tiers +end + +function remove(Caster, Target) + -- code to remove the spell +end + diff --git a/server/Spells/Priest/Druid/Fury/BallLightning.lua b/server/Spells/Priest/Druid/Fury/BallLightning.lua new file mode 100644 index 000000000..550ee28b4 --- /dev/null +++ b/server/Spells/Priest/Druid/Fury/BallLightning.lua @@ -0,0 +1,24 @@ +--[[ + Script Name : Spells/Priest/Druid/Fury/BallLightning.lua + Script Author : John Adams + Script Date : 2013.08.11 07:08:25 + Script Purpose : + : +--]] + +function cast(Caster, Target) + -- code to cast the spell + Say(Caster, "Whoops! Guess this is not implemented yet!") + +-- Info from spell_display_effects (remove from script when done) + +end + +function tick(Caster, Target) + -- code to process each call_frequency (tick) set in spell_tiers +end + +function remove(Caster, Target) + -- code to remove the spell +end + diff --git a/server/Spells/Priest/Druid/Fury/Brambles.lua b/server/Spells/Priest/Druid/Fury/Brambles.lua new file mode 100644 index 000000000..92db6eeb4 --- /dev/null +++ b/server/Spells/Priest/Druid/Fury/Brambles.lua @@ -0,0 +1,37 @@ +--[[ + Script Name : Spells/Priest/Druid/Fury/Brambles.lua + Script Author : Jabantiz + Script Date : 2014.01.14 03:01:51 + Script Purpose : + : +--]] + +function cast(Caster, Target, Hate, Snare) + -- Stifles targets in Area of Effect + -- If Target is not Epic + if not IsEpic(Target) then + AddControlEffect(Target, 2) + end + + -- Decreases Threat to targets in Area of Effect by 323 + -- Decreases threat priority of targets in Area of Effect by 1 position + AddHate(Caster, Target, Hate, 1) + + -- Slows targets in Area of Effect by 31.5% + SetSpeedMultiplier(Target, (100 - Snare)) + + -- 10% chance to dispel when target receives hostile action + -- 10% chance to dispel when target takes damage + AddProc(Target, 2, 10.0) +end + +function proc(Caster, Target, Type) + if Type == 2 then + Say(Caster, "Not Implemented: cancel spell") + end +end + +function remove(Caster, Target) + RemoveControlEffect(Target, 2) + SetSpeedMultiplier(Target, 1.0) +end diff --git a/server/Spells/Priest/Druid/Fury/CallofStorms.lua b/server/Spells/Priest/Druid/Fury/CallofStorms.lua new file mode 100644 index 000000000..07c1689f0 --- /dev/null +++ b/server/Spells/Priest/Druid/Fury/CallofStorms.lua @@ -0,0 +1,17 @@ +--[[ + Script Name : Spells/Priest/Druid/Fury/CallofStorms.lua + Script Author : John Adams + Script Date : 2013.08.11 07:08:19 + Script Purpose : + : +--]] + + +function cast(Caster, Target, DmgType, MinVal, MaxVal) + if MaxVal ~= nil and MinVal < MaxVal then + SpellDamage(Target, DmgType, math.random(MinVal, MaxVal)) + else + SpellDamage(Target, DmgType, MinVal) + end +end + diff --git a/server/Spells/Priest/Druid/Fury/CalloftheHunt.lua b/server/Spells/Priest/Druid/Fury/CalloftheHunt.lua new file mode 100644 index 000000000..18e05090b --- /dev/null +++ b/server/Spells/Priest/Druid/Fury/CalloftheHunt.lua @@ -0,0 +1,39 @@ +--[[ + Script Name : Spells/Priest/Druid/Fury/CalloftheHunt.lua + Script Author : John Adams + Script Date : 2013.08.11 07:08:16 + Script Purpose : + : +--]] + +function cast(Caster, Target) + -- code to cast the spell + Say(Caster, "Whoops! Guess this is not implemented yet!") + +-- Info from spell_display_effects (remove from script when done) +-- Resurrects target with 15% health and power +-- Applies Awakening on termination. +-- Heals target for 16.6% of max health +-- Applies Revived Sickness on termination. Lasts for 2 minutes. +-- Decreases Toughness of target by 98.0 +-- Decreases Lethality of target by 98.0 +-- Decreases All Attributes of target by 20.0% +-- If not between levels 1 - 6 +-- Decreases Attack Speed of target by 20.0 +-- If not between levels 1 - 6 +-- Decreases Attack Speed of target by 5.0 +-- If between levels 1 - 6 +-- Decreases All Attributes of target by 5.0% +-- If between levels 1 - 6 +-- If outside an arena + +end + +function tick(Caster, Target) + -- code to process each call_frequency (tick) set in spell_tiers +end + +function remove(Caster, Target) + -- code to remove the spell +end + diff --git a/server/Spells/Priest/Druid/Fury/DeathSwarm.lua b/server/Spells/Priest/Druid/Fury/DeathSwarm.lua new file mode 100644 index 000000000..9e1a58f8c --- /dev/null +++ b/server/Spells/Priest/Druid/Fury/DeathSwarm.lua @@ -0,0 +1,39 @@ +--[[ + Script Name : Spells/Priest/Druid/Fury/DeathSwarm.lua + Script Author : John Adams + Script Date : 2013.11.19 07:11:29 + Script Purpose : + : +--]] + +function cast(Caster, Target, SkillAmt, DmgType, MinDmgVal, MaxDmgVal) + + -- Debuff component + AddSkillBonus(Target, 609880714, SkillAmt) -- Defense + + -- Damage component + if MaxDmgVal ~= nil and MinDmgVal < MaxDmgVal then + dmgAmount = math.random(MinDmgVal, MaxDmgVal) + SpellDamage(Target, DDType, dmgAmount) + else + SpellDamage(Target, DDType, MinDmgVal) + end + +end + +function tick(Caster, Target, DefenseAmt, DmgType, MinDmgVal, MaxDmgVal) + + -- DoT component + if MaxDmgVal ~= nil and MinDmgVal < MaxDmgVal then + dmgAmount = math.random(MinDmgVal, MaxDmgVal) + SpellDamage(Target, DDType, dmgAmount) + else + SpellDamage(Target, DDType, MinDmgVal) + end + +end + +function remove(Caster, Target, DefenseAmt, DmgType, MinDmgVal, MaxDmgVal) + -- Remove debuff when spell expires + RemoveSkillBonus(Target) +end \ No newline at end of file diff --git a/server/Spells/Priest/Druid/Fury/FaeFire.lua b/server/Spells/Priest/Druid/Fury/FaeFire.lua new file mode 100644 index 000000000..7497b09e7 --- /dev/null +++ b/server/Spells/Priest/Druid/Fury/FaeFire.lua @@ -0,0 +1,24 @@ +--[[ + Script Name : Spells/Priest/Druid/Fury/FaeFire.lua + Script Author : John Adams + Script Date : 2013.08.11 07:08:09 + Script Purpose : + : +--]] + +function cast(Caster, Target) + -- code to cast the spell + Say(Caster, "Whoops! Guess this is not implemented yet!") + +-- Info from spell_display_effects (remove from script when done) + +end + +function tick(Caster, Target) + -- code to process each call_frequency (tick) set in spell_tiers +end + +function remove(Caster, Target) + -- code to remove the spell +end + diff --git a/server/Spells/Priest/Druid/Fury/Feast.lua b/server/Spells/Priest/Druid/Fury/Feast.lua new file mode 100644 index 000000000..c6f95cabd --- /dev/null +++ b/server/Spells/Priest/Druid/Fury/Feast.lua @@ -0,0 +1,17 @@ +--[[ + Script Name : Spells/Priest/Druid/Fury/Feast.lua + Script Author : neatz09 + Script Date : 2019.10.09 05:10:06 + Script Purpose : + : +--]] + +-- Info from spell_display_effects (remove from script when done) +-- When target receives a reduction in health of 20% this spell will cast Savage Feast on caster. Lasts for 18.0 seconds. +-- Heals group members (AE) for 39 - 48 instantly and every 3 seconds +-- Increases STR, AGI, WIS and INT of group members (AE) by 15.0 +-- Increases STA of group members (AE) by 30.1 +-- Adds 0.5% to base avoidance. +-- Increases Mitigation of group members (AE) vs elemental, noxious and arcane damage by 39 +-- Reduces the power cost of spells cast by group members by 2.81% +-- Reduces the power cost of spells cast by group members by 2.81% diff --git a/server/Spells/Priest/Druid/Fury/FeralPulse.lua b/server/Spells/Priest/Druid/Fury/FeralPulse.lua new file mode 100644 index 000000000..e78e7bced --- /dev/null +++ b/server/Spells/Priest/Druid/Fury/FeralPulse.lua @@ -0,0 +1,26 @@ +--[[ + Script Name : Spells/Priest/Druid/Fury/FeralPulse.lua + Script Author : John Adams + Script Date : 2013.08.11 07:08:26 + Script Purpose : + : +--]] + +function cast(Caster, Target) + -- code to cast the spell + Say(Caster, "Whoops! Guess this is not implemented yet!") + +-- Info from spell_display_effects (remove from script when done) +-- Heals group members (AE) for 473 - 579 +-- Heals group members (AE) for 195 - 238 every 2 seconds + +end + +function tick(Caster, Target) + -- code to process each call_frequency (tick) set in spell_tiers +end + +function remove(Caster, Target) + -- code to remove the spell +end + diff --git a/server/Spells/Priest/Druid/Fury/FeralTenacity.lua b/server/Spells/Priest/Druid/Fury/FeralTenacity.lua new file mode 100644 index 000000000..8b81d45ac --- /dev/null +++ b/server/Spells/Priest/Druid/Fury/FeralTenacity.lua @@ -0,0 +1,24 @@ +--[[ + Script Name : Spells/Priest/Druid/Fury/FeralTenacity.lua + Script Author : John Adams + Script Date : 2013.08.11 07:08:43 + Script Purpose : + : +--]] + +function cast(Caster, Target) + -- code to cast the spell + Say(Caster, "Whoops! Guess this is not implemented yet!") + +-- Info from spell_display_effects (remove from script when done) + +end + +function tick(Caster, Target) + -- code to process each call_frequency (tick) set in spell_tiers +end + +function remove(Caster, Target) + -- code to remove the spell +end + diff --git a/server/Spells/Priest/Druid/Fury/FerocityoftheEel.lua b/server/Spells/Priest/Druid/Fury/FerocityoftheEel.lua new file mode 100644 index 000000000..ce514445d --- /dev/null +++ b/server/Spells/Priest/Druid/Fury/FerocityoftheEel.lua @@ -0,0 +1,26 @@ +--[[ + Script Name : Spells/Priest/Druid/Fury/FerocityoftheEel.lua + Script Author : John Adams + Script Date : 2013.08.11 07:08:01 + Script Purpose : + : +--]] + +function cast(Caster, Target) + -- code to cast the spell + Say(Caster, "Whoops! Guess this is not implemented yet!") + +-- Info from spell_display_effects (remove from script when done) +-- Allows group members (AE) to breathe under water +-- Grants Fish Vision to group members (AE) + +end + +function tick(Caster, Target) + -- code to process each call_frequency (tick) set in spell_tiers +end + +function remove(Caster, Target) + -- code to remove the spell +end + diff --git a/server/Spells/Priest/Druid/Fury/FierceRousing.lua b/server/Spells/Priest/Druid/Fury/FierceRousing.lua new file mode 100644 index 000000000..7d130ff0e --- /dev/null +++ b/server/Spells/Priest/Druid/Fury/FierceRousing.lua @@ -0,0 +1,35 @@ +--[[ + Script Name : Spells/Priest/Druid/Fury/FierceRousing.lua + Script Author : neatz09 + Script Date : 2019.10.16 10:10:51 + Script Purpose : + : +--]] + +-- Info from spell_display_effects (remove from script when done) + +function cast(Caster, Target) +-- Resurrects target with 15% health and power +Resurrect(15, 15, 1) +end +--nil, "Awakening", 2, No_calcs(add to perams) +-- Applies Awakening on termination. +function remove(Caster, Target) +--Heals target for 15.0% of max health +SpellHeal("Heal", GetPCTOfHP(Target, 15)) +end + +-- Heals target for 15.0% of max health +-- This effect cannot be critically applied. +-- Applies Revived Sickness on termination. Lasts for 2 minutes. +-- Decreases Haste of target by 20.0 +-- If not between levels 1 - 6 +-- Decreases All Attributes of target by 20.0% +-- If not between levels 1 - 6 +-- Decreases Haste of target by 5.0 +-- If between levels 1 - 6 +-- Decreases All Attributes of target by 5.0% +-- If between levels 1 - 6 + +-- If outside an arena +-- If outside an arena diff --git a/server/Spells/Priest/Druid/Fury/ForestSpirit.lua b/server/Spells/Priest/Druid/Fury/ForestSpirit.lua new file mode 100644 index 000000000..6800da890 --- /dev/null +++ b/server/Spells/Priest/Druid/Fury/ForestSpirit.lua @@ -0,0 +1,22 @@ +--[[ + Script Name : Spells/Priest/Druid/Fury/ForestSpirit.lua + Script Author : Jabantiz + Script Date : 2014.01.14 04:01:25 + Script Purpose : + : +--]] + +function cast(Caster, Target, Stat, Resist) + -- Increases INT and WIS of group members (AE) by 13.1 + AddSpellBonus(Target, 4, Stat) + AddSpellBonus(Target, 3, Stat) + + -- Increases Mitigation of group members (AE) vs elemental, noxious and arcane damage by 86 + AddSpellBonus(Target, 201, Resist) + AddSpellBonus(Target, 202, Resist) + AddSpellBonus(Target, 203, Resist) +end + +function remove(Caster, Target) + RemoveSpellBonus(Target) +end diff --git a/server/Spells/Priest/Druid/Fury/Hibernation.lua b/server/Spells/Priest/Druid/Fury/Hibernation.lua new file mode 100644 index 000000000..0176a6e9b --- /dev/null +++ b/server/Spells/Priest/Druid/Fury/Hibernation.lua @@ -0,0 +1,11 @@ +--[[ + Script Name : Spells/Priest/Druid/Fury/Hibernation.lua + Script Author : neatz09 + Script Date : 2019.10.11 09:10:58 + Script Purpose : + : +--]] + +-- Info from spell_display_effects (remove from script when done) +-- Applies Awakening on termination. +-- Heals target for 1089 - 1332 diff --git a/server/Spells/Priest/Druid/Fury/Intimidation.lua b/server/Spells/Priest/Druid/Fury/Intimidation.lua new file mode 100644 index 000000000..8f60467ae --- /dev/null +++ b/server/Spells/Priest/Druid/Fury/Intimidation.lua @@ -0,0 +1,17 @@ +--[[ + Script Name : Spells/Priest/Druid/Fury/Intimidation.lua + Script Author : Jabantiz + Script Date : 2014.01.14 03:01:35 + Script Purpose : + : +--]] + +function cast(Caster, Target, BonusAmt) + -- Decreases WIS and AGI of target by 6.4 + AddSpellBonus(Target, 3, BonusAmt) + AddSpellBonus(Target, 2, BonusAmt) +end + +function remove(Caster, Target) + RemoveSpellBonus(Target) +end diff --git a/server/Spells/Priest/Druid/Fury/KaranasHold.lua b/server/Spells/Priest/Druid/Fury/KaranasHold.lua new file mode 100644 index 000000000..1bc28b3eb --- /dev/null +++ b/server/Spells/Priest/Druid/Fury/KaranasHold.lua @@ -0,0 +1,31 @@ +--[[ + Script Name : Spells/Priest/Druid/Fury/KaranasHold.lua + Script Author : Jabantiz + Script Date : 2014.01.14 03:01:39 + Script Purpose : + : +--]] + +function cast(Caster, Target) + -- Does not affect Epic targets + if not IsEpic(Target) then + -- Roots target + SetSpeedMultiplier(Target, 0) + + -- 5% chance to dispel when target takes damage + AddProc(Target, 2, 5.0) + end + + -- Resistibility increases against targets higher than level 29. +end + +function proc(Caster, Target, Type) + if Type == 2 then + -- Cancel the spell + Say(Caster, "Not Implemented: cancel the spell"); + end +end + +function remove(Caster, Target) + SetSpeedMultiplier(Target, 1) +end diff --git a/server/Spells/Priest/Druid/Fury/Lucidity.lua b/server/Spells/Priest/Druid/Fury/Lucidity.lua new file mode 100644 index 000000000..f5a19141c --- /dev/null +++ b/server/Spells/Priest/Druid/Fury/Lucidity.lua @@ -0,0 +1,19 @@ +--[[ + Script Name : Spells/Priest/Druid/Fury/Lucidity.lua + Script Author : Jabantiz + Script Date : 2014.01.14 02:01:37 + Script Purpose : + : +--]] + +function cast(Caster, Target, StaAmt, IntAmt) + -- Increases STA of target by 2.6 + AddSpellBonus(Target, 1, StaAmt) + + -- Increases INT of target by 8.9 + AddSpellBonus(Target, 4, IntAmt) +end + +function remove(Caster, Target) + RemoveSpellBonus(Target) +end diff --git a/server/Spells/Priest/Druid/Fury/MaddeningSwarm.lua b/server/Spells/Priest/Druid/Fury/MaddeningSwarm.lua new file mode 100644 index 000000000..6cb7de45a --- /dev/null +++ b/server/Spells/Priest/Druid/Fury/MaddeningSwarm.lua @@ -0,0 +1,25 @@ +--[[ + Script Name : Spells/Priest/Druid/Fury/MaddeningSwarm.lua + Script Author : neatz09 + Script Date : 2019.10.09 05:10:01 + Script Purpose : + : +--]] + +-- Interrupts target encounter +function cast(Caster, Target, SkillAmt) + Interrupt(Target) +-- Decreases Disruption, Ordination, Ministration, Subjugation, Focus and Aggression of target encounter by 15.2 + AddSkillBonus(Target, GetSkillIDByName("Disruption"), SkillAmt) + AddSkillBonus(Target, GetSkillIDByName("Ordination"), SkillAmt) + AddSkillBonus(Target, GetSkillIDByName("Ministration"), SkillAmt) + AddSkillBonus(Target, GetSkillIDByName("Subjugation"), SkillAmt) + AddSkillBonus(Target, GetSkillIDByName("Focus"), SkillAmt) + AddSkillBonus(Target, GetSkillIDByName("Agression"), SkillAmt) +end + +function remove(Caster, Target) + RemoveSkillBonus(Target) +end + + diff --git a/server/Spells/Priest/Druid/Fury/MasteroftheHunt.lua b/server/Spells/Priest/Druid/Fury/MasteroftheHunt.lua new file mode 100644 index 000000000..6583100ec --- /dev/null +++ b/server/Spells/Priest/Druid/Fury/MasteroftheHunt.lua @@ -0,0 +1,19 @@ +--[[ + Script Name : Spells/Priest/Druid/Fury/MasteroftheHunt.lua + Script Author : Jabantiz + Script Date : 2014.01.14 04:01:27 + Script Purpose : + : +--]] + +function cast(Caster, Target) + -- Increases STA of group members (AE) by 3.0 + AddSpellBonus(Target, 1, StatAmt) + + -- Increases Mitigation of group members (AE) vs elemental damage by 194 + AddSpellBonus(Target, 201, ResistAmt) +end + +function remove(Caster, Target) + RemoveSpellBonus(Target) +end diff --git a/server/Spells/Priest/Druid/Fury/MinorElixir.lua b/server/Spells/Priest/Druid/Fury/MinorElixir.lua new file mode 100644 index 000000000..130b94e21 --- /dev/null +++ b/server/Spells/Priest/Druid/Fury/MinorElixir.lua @@ -0,0 +1,18 @@ +--[[ + Script Name : Heal (Spell Type) + Script Purpose : Generic script for healing spells + Script Author : John Adams + Script Date : 2008.12.03 + Script Note : +--]] + +function cast(Caster, Target, HealType, HealMinVal, HealMaxVal) + + -- Heal Component + if HealMinVal < HealMaxVal then + ModifyHP(Caster, math.random(HealMinVal, HealMaxVal)) + else + ModifyHP(Caster, HealMinVal) + end + +end diff --git a/server/Spells/Priest/Druid/Fury/NaturesElixir.lua b/server/Spells/Priest/Druid/Fury/NaturesElixir.lua new file mode 100644 index 000000000..1eddcce2c --- /dev/null +++ b/server/Spells/Priest/Druid/Fury/NaturesElixir.lua @@ -0,0 +1,16 @@ +--[[ + Script Name : Spells/Priest/Druid/Fury/NaturesElixir.lua + Script Author : Jabantiz + Script Date : 2014.01.14 02:01:50 + Script Purpose : + : +--]] + +function cast(Caster, Target, MinVal, MaxVal) + -- Heals target for 31 - 38 + if MaxVal ~= nil and MinVal < MaxVal then + SpellHeal("Heal", MinVal, MaxVal) + else + SpellHeal("Heal", MinVal) + end +end diff --git a/server/Spells/Priest/Druid/Fury/NaturesSalve.lua b/server/Spells/Priest/Druid/Fury/NaturesSalve.lua new file mode 100644 index 000000000..472284a5b --- /dev/null +++ b/server/Spells/Priest/Druid/Fury/NaturesSalve.lua @@ -0,0 +1,17 @@ +--[[ + Script Name : Spells/Priest/Druid/Fury/NaturesSalve.lua + Script Author : John Adams + Script Date : 2013.11.19 + Script Purpose : +--]] + +function cast(Caster, Target, HealMinVal, HealMaxVal) + + -- Heal Component + if HealMinVal < HealMaxVal then + SpellHeal("Heal", HealMinVal, HealMaxVal) + else + SpellHeal("Heal", HealMinVal) + end + +end diff --git a/server/Spells/Priest/Druid/Fury/NaturesSalveX.lua b/server/Spells/Priest/Druid/Fury/NaturesSalveX.lua new file mode 100644 index 000000000..80c84fdc1 --- /dev/null +++ b/server/Spells/Priest/Druid/Fury/NaturesSalveX.lua @@ -0,0 +1,20 @@ +--[[ + Script Name : Spells/Priest/Druid/Fury/NaturesSalveX.lua + Script Author : neatz09 + Script Date : 2019.04.24 11:04:05 + Script Purpose : + : +--]] + + +-- Heals target for 838 - 1024 + + +function cast(Caster, Target, MinVal, MaxVal) + if MaxVal ~= nil and MinVal < MaxVal then + ModifyHP(Target, math.random(MinVal, MaxVal)) + else + ModifyHP(Target, MinVal) + end +end + diff --git a/server/Spells/Priest/Druid/Fury/NaturesWrath.lua b/server/Spells/Priest/Druid/Fury/NaturesWrath.lua new file mode 100644 index 000000000..d9f12e34b --- /dev/null +++ b/server/Spells/Priest/Druid/Fury/NaturesWrath.lua @@ -0,0 +1,32 @@ +--[[ + Script Name : Spells/Priest/Druid/Fury/NaturesWrath.lua + Script Author : John Adams + Script Date : 2013.08.11 07:08:29 + Script Purpose : + : +--]] + +function cast(Caster, Target) + -- code to cast the spell + Say(Caster, "Whoops! Guess this is not implemented yet!") + +-- Info from spell_display_effects (remove from script when done) +-- Improves the damage of hostile spells by 10% of the fury's wisdom. +-- Improves the fury's heals by 10% of their wisdom. +-- On a hostile spell cast this spell has a 12% chance to cast Nature's Wrath on target of spell. Lasts for 10.0 seconds. +-- On a hit this spell will cast Nature's Soothing on target of attack. +-- Heals target for 379 - 703 +-- Inflicts 622 - 933 heat damage on target +-- Cannot be modified except by direct means +-- Cannot be modified except by direct means + +end + +function tick(Caster, Target) + -- code to process each call_frequency (tick) set in spell_tiers +end + +function remove(Caster, Target) + -- code to remove the spell +end + diff --git a/server/Spells/Priest/Druid/Fury/PactoftheCheetah.lua b/server/Spells/Priest/Druid/Fury/PactoftheCheetah.lua new file mode 100644 index 000000000..9e3390258 --- /dev/null +++ b/server/Spells/Priest/Druid/Fury/PactoftheCheetah.lua @@ -0,0 +1,24 @@ +--[[ + Script Name : Spells/Priest/Druid/Fury/PactoftheCheetah.lua + Script Author : John Adams + Script Date : 2013.08.11 07:08:25 + Script Purpose : + : +--]] + +function cast(Caster, Target) + -- code to cast the spell + Say(Caster, "Whoops! Guess this is not implemented yet!") + +-- Info from spell_display_effects (remove from script when done) + +end + +function tick(Caster, Target) + -- code to process each call_frequency (tick) set in spell_tiers +end + +function remove(Caster, Target) + -- code to remove the spell +end + diff --git a/server/Spells/Priest/Druid/Fury/PeerlessPredator.lua b/server/Spells/Priest/Druid/Fury/PeerlessPredator.lua new file mode 100644 index 000000000..06fbd641a --- /dev/null +++ b/server/Spells/Priest/Druid/Fury/PeerlessPredator.lua @@ -0,0 +1,35 @@ +--[[ + Script Name : Spells/Priest/Druid/Fury/PeerlessPredator.lua + Script Author : Jabantiz + Script Date : 2014.01.14 04:01:30 + Script Purpose : + : +--]] + +function cast(Caster, Target, Stat, Avoid, Resist) + -- Shapechanges caster into a lion + if GetGender(Target) == 0 then + SetIllusion(Target, 1372) + else + SetIllusion(Target, 303) + end + + -- Increases STA of caster by 21.6 + AddSpellBonus(Target, 1, Stat) + + -- Adds 2.1% to base avoidance. + AddSpellBonus(Target, 696, Avoid) + + -- Increases Mitigation of caster vs elemental, noxious and arcane damage by 342 + AddSpellBonus(Target, 201, Resist) + AddSpellBonus(Target, 202, Resist) + AddSpellBonus(Target, 203, Resist) + + -- Grants See Stealth to caster + Say(Caster, "Not Implemented: see stealth") +end + +function remove(Caster, Target) + RemoveSpellBonus(Target) + ResetIllusion(Target) +end diff --git a/server/Spells/Priest/Druid/Fury/Porcupine.lua b/server/Spells/Priest/Druid/Fury/Porcupine.lua new file mode 100644 index 000000000..dee65c9f9 --- /dev/null +++ b/server/Spells/Priest/Druid/Fury/Porcupine.lua @@ -0,0 +1,27 @@ +--[[ + Script Name : Spells/Priest/Druid/Fury/Porcupine.lua + Script Author : John Adams + Script Date : 2013.08.11 07:08:44 + Script Purpose : + : +--]] + +function cast(Caster, Target) + -- code to cast the spell + Say(Caster, "Whoops! Guess this is not implemented yet!") + +-- Info from spell_display_effects (remove from script when done) +-- When any damage is received this spell will cast Porcupine Quills on target's attacker, which can be triggered up to 50 times across all targets. +-- Inflicts 118 divine damage on target +-- Increases Mitigation of raid and group members (AE) vs all damage by 900 + +end + +function tick(Caster, Target) + -- code to process each call_frequency (tick) set in spell_tiers +end + +function remove(Caster, Target) + -- code to remove the spell +end + diff --git a/server/Spells/Priest/Druid/Fury/PrimalFury.lua b/server/Spells/Priest/Druid/Fury/PrimalFury.lua new file mode 100644 index 000000000..e997a7c66 --- /dev/null +++ b/server/Spells/Priest/Druid/Fury/PrimalFury.lua @@ -0,0 +1,24 @@ +--[[ + Script Name : Spells/Priest/Druid/Fury/PrimalFury.lua + Script Author : John Adams + Script Date : 2013.08.11 07:08:15 + Script Purpose : + : +--]] + +function cast(Caster, Target) + -- code to cast the spell + Say(Caster, "Whoops! Guess this is not implemented yet!") + +-- Info from spell_display_effects (remove from script when done) + +end + +function tick(Caster, Target) + -- code to process each call_frequency (tick) set in spell_tiers +end + +function remove(Caster, Target) + -- code to remove the spell +end + diff --git a/server/Spells/Priest/Druid/Fury/PrimevalAwakening.lua b/server/Spells/Priest/Druid/Fury/PrimevalAwakening.lua new file mode 100644 index 000000000..06995ad9f --- /dev/null +++ b/server/Spells/Priest/Druid/Fury/PrimevalAwakening.lua @@ -0,0 +1,47 @@ +--[[ + Script Name : Spells/Priest/Druid/Fury/PrimevalAwakening.lua + Script Author : John Adams + Script Date : 2013.08.11 07:08:44 + Script Purpose : + : +--]] + +function cast(Caster, Target) + -- code to cast the spell + Say(Caster, "Whoops! Guess this is not implemented yet!") + +-- Info from spell_display_effects (remove from script when done) +-- Resurrects target with 15% health and power +-- Applies Primeval Awakening on termination. Lasts for 1 minute. +-- Increases Focus of target by 30.0 +-- Heals target for 30.0% of max health +-- This effect cannot be critically applied. +-- Increases power of target by 1.0% instantly and every 6 seconds +-- This effect cannot be critically applied. +-- Increases INT of target by 78.0 +-- Increases Disruption of target by 30.0 +-- Shapechanges target into a treant +-- Increases Subjugation of target by 30.0 +-- Applies Revived Sickness on termination. Lasts for 2 minutes. +-- Decreases Toughness of target by 145.0 +-- Decreases Lethality of target by 145.0 +-- Decreases All Attributes of target by 20.0% +-- If not between levels 1 - 6 +-- Decreases Attack Speed of target by 20.0 +-- If not between levels 1 - 6 +-- Decreases Attack Speed of target by 5.0 +-- If between levels 1 - 6 +-- Decreases All Attributes of target by 5.0% +-- If between levels 1 - 6 +-- If outside an arena + +end + +function tick(Caster, Target) + -- code to process each call_frequency (tick) set in spell_tiers +end + +function remove(Caster, Target) + -- code to remove the spell +end + diff --git a/server/Spells/Priest/Druid/Fury/Regrowth.lua b/server/Spells/Priest/Druid/Fury/Regrowth.lua new file mode 100644 index 000000000..e4c0c0576 --- /dev/null +++ b/server/Spells/Priest/Druid/Fury/Regrowth.lua @@ -0,0 +1,24 @@ +--[[ + Script Name : Spells/Priest/Druid/Fury/Regrowth.lua + Script Author : Jabantiz + Script Date : 2014.01.14 03:01:53 + Script Purpose : + : +--]] + +-- Heals target for 38 - 46 instantly and every 2 seconds +function cast(Caster, Target, MinVal, MaxVal) + if MaxVal ~= nil and MinVal < MaxVal then + SpellHeal("Heal", MinVal, MaxVal) + else + SpellHeal("Heal", MinVal) + end +end + +function tick(Caster, Target, MinVal, MaxVal) + if MaxVal ~= nil and MinVal < MaxVal then + SpellHeal("Heal", MinVal, MaxVal) + else + SpellHeal("Heal", MinVal) + end +end diff --git a/server/Spells/Priest/Druid/Fury/RingofFire.lua b/server/Spells/Priest/Druid/Fury/RingofFire.lua new file mode 100644 index 000000000..fe90536da --- /dev/null +++ b/server/Spells/Priest/Druid/Fury/RingofFire.lua @@ -0,0 +1,24 @@ +--[[ + Script Name : Spells/Priest/Druid/Fury/RingofFire.lua + Script Author : John Adams + Script Date : 2013.08.11 07:08:14 + Script Purpose : + : +--]] + +function cast(Caster, Target) + -- code to cast the spell + Say(Caster, "Whoops! Guess this is not implemented yet!") + +-- Info from spell_display_effects (remove from script when done) + +end + +function tick(Caster, Target) + -- code to process each call_frequency (tick) set in spell_tiers +end + +function remove(Caster, Target) + -- code to remove the spell +end + diff --git a/server/Spells/Priest/Druid/Fury/Salve.lua b/server/Spells/Priest/Druid/Fury/Salve.lua new file mode 100644 index 000000000..130b94e21 --- /dev/null +++ b/server/Spells/Priest/Druid/Fury/Salve.lua @@ -0,0 +1,18 @@ +--[[ + Script Name : Heal (Spell Type) + Script Purpose : Generic script for healing spells + Script Author : John Adams + Script Date : 2008.12.03 + Script Note : +--]] + +function cast(Caster, Target, HealType, HealMinVal, HealMaxVal) + + -- Heal Component + if HealMinVal < HealMaxVal then + ModifyHP(Caster, math.random(HealMinVal, HealMaxVal)) + else + ModifyHP(Caster, HealMinVal) + end + +end diff --git a/server/Spells/Priest/Druid/Fury/Squall.lua b/server/Spells/Priest/Druid/Fury/Squall.lua new file mode 100644 index 000000000..977307f18 --- /dev/null +++ b/server/Spells/Priest/Druid/Fury/Squall.lua @@ -0,0 +1,39 @@ +--[[ + Script Name : dot.lua + Script Purpose : Generic Damage Over Time script + Script Author : John Adams + Script Date : 2008.12.04 +--]] + +function cast(Caster, Target, DOTType, MinDOTVal, MaxDOTVal) + + -- DOT component (instant damage) + if MaxDOTVal ~= nil and MinDOTVal < MaxDOTVal then + + SpellDamage(Target, DOTType, math.random(MinDOTVal, MaxDOTVal)) + + else + + SpellDamage(Target, DOTType, MinDOTVal) + + end + +end + +function tick(Caster, Target, DOTType, MinDOTVal, MaxDOTVal) + + if MaxDOTVal ~= nil and MinDOTVal < MaxDOTVal then + + SpellDamage(Target, DOTType, math.random(MinDOTVal, MaxDOTVal)) + + else + + SpellDamage(Target, DOTType, MinDOTVal) + + end + +end + +function remove(Caster, Target, DOTType, MinDOTVal, MaxDOTVal) + +end diff --git a/server/Spells/Priest/Druid/Fury/Starnova.lua b/server/Spells/Priest/Druid/Fury/Starnova.lua new file mode 100644 index 000000000..5c57e64d7 --- /dev/null +++ b/server/Spells/Priest/Druid/Fury/Starnova.lua @@ -0,0 +1,19 @@ +--[[ + Script Name : Spells/Priest/Druid/Fury/Starnova.lua + Script Author : neatz09 + Script Date : 2019.04.24 11:04:05 + Script Purpose : + : +--]] + + +-- Inflicts 520 - 635 heat damage on target encounter + +function cast(Caster, Target, DmgType, MinVal, MaxVal) + if MaxVal ~= nil and MinVal < MaxVal then + SpellDamage(Target, DmgType, math.random(MinVal, MaxVal)) + else + SpellDamage(Target, DmgType, MinVal) + end +end + diff --git a/server/Spells/Priest/Druid/Fury/StingingSwarm.lua b/server/Spells/Priest/Druid/Fury/StingingSwarm.lua new file mode 100644 index 000000000..7f21fc6ae --- /dev/null +++ b/server/Spells/Priest/Druid/Fury/StingingSwarm.lua @@ -0,0 +1,79 @@ +--[[ + Script Name : dot_debuff.lua + Script Purpose : Generic damage + 1 effect script + Script Author : John Adams + Script Date : 2008.12.04 +--]] + +function cast(Caster, Target, DOTType, MinDOTVal, MaxDOTVal, DebuffType, MinDebuffVal, MaxDebuffVal) + + -- Debuff component + -- Determine if there is a range to effect values + if MaxDebuffVal ~= nil and MinDebuffVal < MaxDebuffVal then + + -- JA: for debuff randoms (if any), need to to math.random with precision - I think this function rounds up? + DebuffValue = math.random(MinDebuffVal, MaxDebuffVal) + + else + + DebuffValue = MinDebuffVal + + end + + -- Determine DebuffType - either a DamageType or a String value passed as param 4 + if DebuffType == "Defense" then + + -- Need functionality to buff/debuff + -- ModifyDefense(Target, -DebuffValue) + + end + + if DebuffType == "Elemental" then + + -- Need functionality to buff/debuff + -- ModifyHeat(Target, -DebuffValue) + -- ModifyCole(Target, -DebuffValue) + + end + + -- DOT component (instant damage) + if MaxDOTVal ~= nil and MinDOTVal < MaxDOTVal then + + SpellDamage(Target, DOTType, math.random(MinDOTVal, MaxDOTVal)) + + else + + SpellDamage(Target, DOTType, MinDOTVal) + + end + +end + +function tick(Caster, Target, DOTType, MinDOTVal, MaxDOTVal, DebuffType, MinDebuffVal, MaxDebuffVal) + + if MaxDOTVal ~= nil and MinDOTVal < MaxDOTVal then + + SpellDamage(Target, DOTType, math.random(MinDOTVal, MaxDOTVal)) + + else + + SpellDamage(Target, DOTType, MinDOTVal) + + end + +end + +function remove(Caster, Target, DOTType, MinDOTVal, MaxDOTVal, DebuffType, MinDebuffVal, MaxDebuffVal) + + if DebuffType == "Defense" then + -- Need functionality to restore original mitigations + -- ModifyDefense(Target, Original) + end + + if DebuffType == "Elemental" then + -- Need functionality to restore original mitigations + -- ModifyHeat(Target, Original) + -- ModifyCold(Target, Original) + end + +end diff --git a/server/Spells/Priest/Druid/Fury/Tempest.lua b/server/Spells/Priest/Druid/Fury/Tempest.lua new file mode 100644 index 000000000..5bee4b145 --- /dev/null +++ b/server/Spells/Priest/Druid/Fury/Tempest.lua @@ -0,0 +1,33 @@ +--[[ + Script Name : Spells/Priest/Druid/Fury/Tempest.lua + Script Author : Jabantiz + Script Date : 2014.01.14 02:01:11 + Script Purpose : + : +--]] + +function cast(Caster, Target, DmgType, MinVal, MaxVal) + -- Inflicts 7 - 8 cold damage on target instantly and every 2 seconds + if MaxVal ~= nil and MinVal < MaxVal then + SpellDamage(Target, DmgType, math.random(MinVal, MaxVal)) + else + SpellDamage(Target, DmgType, MinVal) + end + + -- Inflicts 7 - 8 cold damage on target instantly and every 2 seconds + -- If target is elemental + Say(Caster, "Not Implemented: Bonus damage to elementals") +end + +function tick(Caster, Target, DmgType, MinVal, MaxVal) + -- Inflicts 7 - 8 cold damage on target instantly and every 2 seconds + if MaxVal ~= nil and MinVal < MaxVal then + SpellDamage(Target, DmgType, math.random(MinVal, MaxVal)) + else + SpellDamage(Target, DmgType, MinVal) + end + + -- Inflicts 7 - 8 cold damage on target instantly and every 2 seconds + -- If target is elemental + Say(Caster, "Not Implemented: Bonus damage to elementals") +end diff --git a/server/Spells/Priest/Druid/Fury/Thornskin.lua b/server/Spells/Priest/Druid/Fury/Thornskin.lua new file mode 100644 index 000000000..5cf7f0601 --- /dev/null +++ b/server/Spells/Priest/Druid/Fury/Thornskin.lua @@ -0,0 +1,27 @@ +--[[ + Script Name : Spells/Priest/Druid/Fury/Thornskin.lua + Script Author : Jabantiz + Script Date : 2014.01.14 02:01:48 + Script Purpose : + : +--]] + +function cast(Caster, Target) + -- When damaged with a melee weapon this spell will cast Thornstorm on target's attacker. + AddProc(Target, 4, 100) +end + +function proc(Caster, Target, Type, DmgType, MinVal, MaxVal) + if Type == 4 then + -- Inflicts 1 piercing damage on target encounter + if MaxVal ~= nil and MinVal < MaxVal then + ProcDamage(Caster, Target, "Thornstorm", DmgType, MinVal, MaxVal) + else + ProcDamage(Caster, Target, "Thornstorm", DmgType, MinVal) + end + end +end + +function remove(Caster, Target) + RemoveProc(Target) +end diff --git a/server/Spells/Priest/Druid/Fury/Thunderbolt.lua b/server/Spells/Priest/Druid/Fury/Thunderbolt.lua new file mode 100644 index 000000000..d7a143bcf --- /dev/null +++ b/server/Spells/Priest/Druid/Fury/Thunderbolt.lua @@ -0,0 +1,19 @@ +--[[ + Script Name : Spells/Priest/Druid/Fury/Thunderbolt.lua + Script Author : neatz09 + Script Date : 2019.04.24 07:04:59 + Script Purpose : + : +--]] + + +-- Inflicts 195 - 324 magic damage on target + +function cast(Caster, Target, DmgType, MinVal, MaxVal) + if MaxVal ~= nil and MinVal < MaxVal then + SpellDamage(Target, DmgType, math.random(MinVal, MaxVal)) + else + SpellDamage(Target, DmgType, MinVal) + end +end + diff --git a/server/Spells/Priest/Druid/Fury/UntamedRegeneration.lua b/server/Spells/Priest/Druid/Fury/UntamedRegeneration.lua new file mode 100644 index 000000000..f7201b6be --- /dev/null +++ b/server/Spells/Priest/Druid/Fury/UntamedRegeneration.lua @@ -0,0 +1,16 @@ +--[[ + Script Name : Spells/Priest/Druid/Fury/UntamedRegeneration.lua + Script Author : Jabantiz + Script Date : 2014.01.14 04:01:14 + Script Purpose : + : +--]] + +function cast(Caster, Target, MinVal, MaxVal) + -- Heals group members (AE) for 107 - 131 + if MaxVal ~= nil and MinVal < MaxVal then + SpellHeal("Heal",MinVal, MaxVal) + else + SpellHeal("Heal", MinVal) + end +end diff --git a/server/Spells/Priest/Druid/Fury/UntamedShroud.lua b/server/Spells/Priest/Druid/Fury/UntamedShroud.lua new file mode 100644 index 000000000..171cbf278 --- /dev/null +++ b/server/Spells/Priest/Druid/Fury/UntamedShroud.lua @@ -0,0 +1,28 @@ +--[[ + Script Name : Spells/Priest/Druid/Fury/UntamedShroud.lua + Script Author : John Adams + Script Date : 2013.08.11 07:08:10 + Script Purpose : + : +--]] + +function cast(Caster, Target) + -- code to cast the spell + Say(Caster, "Whoops! Guess this is not implemented yet!") + +-- Info from spell_display_effects (remove from script when done) +-- Grants invisibility to group members (AE) +-- Suspends group members (AE)'s movement speed enhancements +-- Dispelled when target takes damage +-- This effect cancels during combat + +end + +function tick(Caster, Target) + -- code to process each call_frequency (tick) set in spell_tiers +end + +function remove(Caster, Target) + -- code to remove the spell +end + diff --git a/server/Spells/Priest/Druid/Fury/WrathsBlessing.lua b/server/Spells/Priest/Druid/Fury/WrathsBlessing.lua new file mode 100644 index 000000000..92a031def --- /dev/null +++ b/server/Spells/Priest/Druid/Fury/WrathsBlessing.lua @@ -0,0 +1,25 @@ +--[[ + Script Name : Spells/Priest/Druid/Fury/WrathsBlessing.lua + Script Author : John Adams + Script Date : 2013.08.11 07:08:36 + Script Purpose : + : +--]] + +function cast(Caster, Target) + -- code to cast the spell + Say(Caster, "Whoops! Guess this is not implemented yet!") + +-- Info from spell_display_effects (remove from script when done) +-- Grants a healer ally bonus healing based on your last direct damage spell amount. This bonus changes every time you cast a damage spell. + +end + +function tick(Caster, Target) + -- code to process each call_frequency (tick) set in spell_tiers +end + +function remove(Caster, Target) + -- code to remove the spell +end + diff --git a/server/Spells/Priest/Druid/Snare.lua b/server/Spells/Priest/Druid/Snare.lua new file mode 100644 index 000000000..bd6bf332c --- /dev/null +++ b/server/Spells/Priest/Druid/Snare.lua @@ -0,0 +1,26 @@ +--[[ + Script Name : Spells/Priest/Druid/Snare.lua + Script Author : John Adams + Script Date : 2013.08.11 07:08:18 + Script Purpose : + : +--]] + +function cast(Caster, Target) + -- code to cast the spell + Say(Caster, "Whoops! Guess this is not implemented yet!") + +-- Info from spell_display_effects (remove from script when done) +-- Slows target by 40.0% +-- Does not affect Epic targets + +end + +function tick(Caster, Target) + -- code to process each call_frequency (tick) set in spell_tiers +end + +function remove(Caster, Target) + -- code to remove the spell +end + diff --git a/server/Spells/Priest/Druid/SpiritoftheBat.lua b/server/Spells/Priest/Druid/SpiritoftheBat.lua new file mode 100644 index 000000000..89302a7ed --- /dev/null +++ b/server/Spells/Priest/Druid/SpiritoftheBat.lua @@ -0,0 +1,24 @@ +--[[ + Script Name : Spells/Priest/Druid/SpiritoftheBat.lua + Script Author : John Adams + Script Date : 2013.08.11 07:08:24 + Script Purpose : + : +--]] + +function cast(Caster, Target) + -- code to cast the spell + Say(Caster, "Whoops! Guess this is not implemented yet!") + +-- Info from spell_display_effects (remove from script when done) + +end + +function tick(Caster, Target) + -- code to process each call_frequency (tick) set in spell_tiers +end + +function remove(Caster, Target) + -- code to remove the spell +end + diff --git a/server/Spells/Priest/Druid/SpiritoftheWolf.lua b/server/Spells/Priest/Druid/SpiritoftheWolf.lua new file mode 100644 index 000000000..72e65b5cc --- /dev/null +++ b/server/Spells/Priest/Druid/SpiritoftheWolf.lua @@ -0,0 +1,19 @@ +--[[ + Script Name : Spells/Priest/Druid/SpiritoftheWolf.lua + Script Author : theFoof + Script Date : 2013.12.16 + Script Purpose : + : +--]] + +function cast(Caster, Target, BuffAmt) +-- Increases speed of group members (AE) by 20.0% +-- This effect suspends during combat + + AddSpellBonus(Target, 609, BuffAmt) +end + +function remove(Caster, Target) + RemoveSpellBonus(Target) +end + diff --git a/server/Spells/Priest/Druid/SylvanTouch.lua b/server/Spells/Priest/Druid/SylvanTouch.lua new file mode 100644 index 000000000..d60ec0b64 --- /dev/null +++ b/server/Spells/Priest/Druid/SylvanTouch.lua @@ -0,0 +1,22 @@ +--[[ + Script Name : Spells/Priest/Druid/SylvanTouch.lua + Script Author : theFoof + Script Date : 2013.12.16 + Script Purpose : + : +--]] + +function cast(Caster, Target, HealLow, HealHigh, HoTLow, HoTHigh) +-- Heals target for 119 - 146 +-- Heals target for 52 - 64 every 2 seconds + + SpellHeal("Heal", HealLow, HealHigh) +end + +function tick(Caster, Target, HealLow, HealHigh, HoTLow, HoTHigh) + SpellHeal("Heal", HoTLow, HoTHigh) +end + +function remove(Caster, Target) +end + diff --git a/server/Spells/Priest/Druid/Warden/ArmorofSeasons.lua b/server/Spells/Priest/Druid/Warden/ArmorofSeasons.lua new file mode 100644 index 000000000..3f3dfa369 --- /dev/null +++ b/server/Spells/Priest/Druid/Warden/ArmorofSeasons.lua @@ -0,0 +1,23 @@ +--[[ + Script Name : Spells/Priest/Druid/Warden/ArmorofSeasons.lua + Script Author : theFoof + Script Date : 2013.12.10 12:12:25 + Script Purpose : + : +--]] + +-- Increases Max Health of group members (AE) +-- If fighter +-- Increases Mitigation of group members (AE) vs physical damage +-- If not fighter + + +function cast(Caster, Target, MaxHP, Mit) + AddSpellBonus(Target, 606, MaxHP, 1) + AddSpellBonus(Target, 200, Mit, 11, 21, 31) +end + +function remove() +end + + \ No newline at end of file diff --git a/server/Spells/Priest/Druid/Warden/AspectoftheForest.lua b/server/Spells/Priest/Druid/Warden/AspectoftheForest.lua new file mode 100644 index 000000000..c7eef9a6f --- /dev/null +++ b/server/Spells/Priest/Druid/Warden/AspectoftheForest.lua @@ -0,0 +1,23 @@ +--[[ + Script Name : Spells/Priest/Druid/Warden/AspectoftheForest.lua + Script Author : theFoof + Script Date : 2013.12.09 11:12:18 + Script Purpose : + : +--]] + +-- Increases STA of target +-- Increases WIS of target +-- Increases Mitigation of target vs elemental, noxious and arcane damage + +function cast(Caster, Target, Sta, Wis, Mit) + AddSpellBonus(Target, 1, Sta) + AddSpellBonus(Target, 3, Wis) + AddSpellBonus(Target, 201, Mit) + AddSpellBonus(Target, 202, Mit) + AddSpellBonus(Target, 203, Mit) +end + +function remove(Caster, Target) + RemoveSpellBonus(Target) +end diff --git a/server/Spells/Priest/Druid/Warden/Bloom.lua b/server/Spells/Priest/Druid/Warden/Bloom.lua new file mode 100644 index 000000000..498825222 --- /dev/null +++ b/server/Spells/Priest/Druid/Warden/Bloom.lua @@ -0,0 +1,42 @@ +--[[ + Script Name : HoT (Spell Type) + Script Purpose : Generic script for heal-over-time spells + Script Author : John Adams + Script Date : 2008.12.04 + Script Notes : JA: Need to determine if HoT's land instantly with the initial heal, or wait til tick() +--]] + +function cast(Caster, Target, HealType, HealMinVal, HealMaxVal, HOTType, HOTMinVal, HOTMaxVal) + + -- Heal component + if HealMinVal < HealMaxVal then + ModifyHP(Caster, math.random(HealMinVal, HealMaxVal)) + else + ModifyHP(Caster, HealMinVal) + end + + -- HoT component + if HOTType ~= nil then + -- Determine if there is a range to HoT values + if HOTMaxVal ~= nil and HOTMinVal < HOTMaxVal then + ModifyHP(Caster, math.random(HOTMinVal, HOTMaxVal)) + else + ModifyHP(Caster, HOTMinVal) + end + end + +end + +function tick(Caster, Target, HealType, HealMinVal, HealMaxVal, HOTType, HOTMinVal, HOTMaxVal) + + if HOTMaxVal ~= nil and HOTMinVal < HOTMaxVal then + ModifyHP(Caster, math.random(HOTMinVal, HOTMaxVal)) + else + ModifyHP(Caster, HOTMinVal) + end + +end + +function remove(Caster, Target) + -- code to remove the spell +end diff --git a/server/Spells/Priest/Druid/Warden/Cold.lua b/server/Spells/Priest/Druid/Warden/Cold.lua new file mode 100644 index 000000000..86f5efb60 --- /dev/null +++ b/server/Spells/Priest/Druid/Warden/Cold.lua @@ -0,0 +1,24 @@ +--[[ + Script Name : dd.lua + Script Purpose : Generic direct damage script + Script Author : John Adams + Script Date : 2010.01.14 +--]] + +function cast(Caster, Target, DDType, MinDDVal, MaxDDVal) + + if MaxDDVal ~= nil and MinDDVal < MaxDDVal then + dmgAmount = math.random(MinDDVal, MaxDDVal) + SpellDamage(Target, DDType, dmgAmount) + --AddHate(Caster, Target, dmgAmount) + else + SpellDamage(Target, DDType, MinDDVal) + --AddHate(Caster, Target, MinDDVal) + end + +end + +function remove(Caster, Target, DDType, MinDDVal, MaxDDVal) + +end + diff --git a/server/Spells/Priest/Druid/Warden/Dawnstrike.lua b/server/Spells/Priest/Druid/Warden/Dawnstrike.lua new file mode 100644 index 000000000..5add0db7d --- /dev/null +++ b/server/Spells/Priest/Druid/Warden/Dawnstrike.lua @@ -0,0 +1,12 @@ +--[[ + Script Name : dd.lua + Script Purpose : Generic direct damage script + Script Author : John Adams + Script Date : 2010.01.14 +--]] + +function cast(Caster, Target, DDType, MinDDVal, MaxDDVal) + SpellDamage(Target, DDType, MinDDVal,MaxDDVal) +end + + diff --git a/server/Spells/Priest/Druid/Warden/Equinox.lua b/server/Spells/Priest/Druid/Warden/Equinox.lua new file mode 100644 index 000000000..f52d677da --- /dev/null +++ b/server/Spells/Priest/Druid/Warden/Equinox.lua @@ -0,0 +1,39 @@ +--[[ + Script Name : Spells/Priest/Druid/Warden/Equinox.lua + Script Author : John Adams + Script Date : 2013.08.11 07:08:48 + Script Purpose : + : +--]] + +function cast(Caster, Target) + -- code to cast the spell + Say(Caster, "Whoops! Guess this is not implemented yet!") + +-- Info from spell_display_effects (remove from script when done) +-- Resurrects target with 13% health and power +-- Applies Nature's Blessing on termination. Lasts for 1 minute. +-- Heals target for 3.3% of max health instantly and every 6 seconds +-- Applies Revived Sickness on termination. Lasts for 2 minutes. +-- Decreases Toughness of target by 98.0 +-- Decreases Lethality of target by 98.0 +-- Decreases All Attributes of target by 20.0% +-- If not between levels 1 - 6 +-- Decreases Attack Speed of target by 20.0 +-- If not between levels 1 - 6 +-- Decreases Attack Speed of target by 5.0 +-- If between levels 1 - 6 +-- Decreases All Attributes of target by 5.0% +-- If between levels 1 - 6 +-- If outside an arena + +end + +function tick(Caster, Target) + -- code to process each call_frequency (tick) set in spell_tiers +end + +function remove(Caster, Target) + -- code to remove the spell +end + diff --git a/server/Spells/Priest/Druid/Warden/EssenceoftheGreatBear.lua b/server/Spells/Priest/Druid/Warden/EssenceoftheGreatBear.lua new file mode 100644 index 000000000..d4aa68b0f --- /dev/null +++ b/server/Spells/Priest/Druid/Warden/EssenceoftheGreatBear.lua @@ -0,0 +1,18 @@ +--[[ + Script Name : Spells/Priest/Druid/Warden/EssenceoftheGreatBear.lua + Script Author : theFoof + Script Date : 2013.12.16 + Script Purpose : + : +--]] + +function cast(Caster, Target, StaAmt, MitAmt) +AddSpellBonus(Target, 1, StaAmt) +AddSpellBonus(Target, 201, MitAmt) + +end + +function remove(Caster, Target) + RemoveSpellBonus(Target) +end + diff --git a/server/Spells/Priest/Druid/Warden/FaerieAlly.lua b/server/Spells/Priest/Druid/Warden/FaerieAlly.lua new file mode 100644 index 000000000..4987b97a8 --- /dev/null +++ b/server/Spells/Priest/Druid/Warden/FaerieAlly.lua @@ -0,0 +1,24 @@ +--[[ + Script Name : Spells/Priest/Druid/Warden/FaerieAlly.lua + Script Author : John Adams + Script Date : 2013.08.11 07:08:01 + Script Purpose : + : +--]] + +function cast(Caster, Target) + -- code to cast the spell + Say(Caster, "Whoops! Guess this is not implemented yet!") + +-- Info from spell_display_effects (remove from script when done) + +end + +function tick(Caster, Target) + -- code to process each call_frequency (tick) set in spell_tiers +end + +function remove(Caster, Target) + -- code to remove the spell +end + diff --git a/server/Spells/Priest/Druid/Warden/FavoroftheWild.lua b/server/Spells/Priest/Druid/Warden/FavoroftheWild.lua new file mode 100644 index 000000000..325863479 --- /dev/null +++ b/server/Spells/Priest/Druid/Warden/FavoroftheWild.lua @@ -0,0 +1,21 @@ +--[[ + Script Name : Spells/Priest/Druid/Warden/FavoroftheWild.lua + Script Author : theFoof + Script Date : 2014.1.14 + Script Purpose : + : +--]] + +function cast(Caster, Target, StatBuff, Avoid, MitBuff) + AddSpellBonus(Target, 2, StatBuff) + AddSpellBonus(Target, 3, StatBuff) + AddSpellBonus(Target, 696, Avoid) + AddSpellBonus(Target, 201, MitBuff) + AddSpellBonus(Target, 202, MitBuff) + AddSpellBonus(Target, 203, MitBuff) +end + +function remove(Caster, Target) + RemoveSpellBonus(Target) +end + diff --git a/server/Spells/Priest/Druid/Warden/Frostbite.lua b/server/Spells/Priest/Druid/Warden/Frostbite.lua new file mode 100644 index 000000000..c5fd04972 --- /dev/null +++ b/server/Spells/Priest/Druid/Warden/Frostbite.lua @@ -0,0 +1,26 @@ +--[[ + Script Name : Spells/Priest/Druid/Warden/Frostbite.lua + Script Author : neatz09 + Script Date : 2019.10.15 05:10:17 + Script Purpose : + : +--]] + +function cast(Caster, Target, DmgType, MinVal, MaxVal, BonusAmt) +-- Inflicts 193 - 236 cold damage on target instantly and every 4 seconds +SpellDamage(Target, DmgType, MinVal, MaxVal) + -- Decreases Mitigation of target vs elemental damage by 1048 +AddSpellBonus(Target, 201, BonusAmt) +end + +function tick(Caster, Target, DmgType, MinVal, MaxVal) +-- Inflicts 193 - 236 cold damage on target instantly and every 4 seconds +SpellDamage(Target, DmgType, MinVal, MaxVal) +end + + +function remove(Caster, Target) + RemoveSpellBonus(Target) + +end + diff --git a/server/Spells/Priest/Druid/Warden/GreaterFire.lua b/server/Spells/Priest/Druid/Warden/GreaterFire.lua new file mode 100644 index 000000000..d1d72cadb --- /dev/null +++ b/server/Spells/Priest/Druid/Warden/GreaterFire.lua @@ -0,0 +1,55 @@ +--[[ + Script Name : dd_dot.lua + Script Purpose : Generic damage + 1 effect script + Script Author : John Adams + Script Date : 2008.12.02 +--]] + +function cast(Caster, Target, DDType, MinDDVal, MaxDDVal, EffectType, DamageType, MinEffectVal, MaxEffectVal) + + -- DD component + if MaxDDVal ~= nil and MinDDVal < MaxDDVal then + dmgAmount = math.random(MinDDVal, MaxDDVal) + SpellDamage(Target, DDType, dmgAmount) + --AddHate(Caster, Target, dmgAmount) + else + SpellDamage(Target, DDType, MinDDVal) + --AddHate(Caster, Target, MinDDVal) + end + + -- Effect component - only process this code if there is an EffectType param + if EffectType ~= nil then + + -- Determine if there is a range to effect values + if MaxEffectVal ~= nil and MinEffectVal < MaxEffectVal then + EffectValue = math.random(MinEffectVal, MaxEffectVal) + else + EffectValue = MinEffectVal + end + + -- Determine EffectType - either a DamageType or a String value passed as param 4 + if EffectType == "heal" then + ModifyHP(Caster, EffectValue) + else + SpellDamage(Target, DamageType, EffectValue) + end + + end + +end + +function tick(Caster, Target, DDType, MinDDVal, MaxDDVal, EffectType, DamageType, MinEffectVal, MaxEffectVal) + + if MaxEffectVal ~= nil and MinEffectVal < MaxEffectVal then + EffectValue = math.random(MinEffectVal, MaxEffectVal) + else + EffectValue = MinEffectVal + end + + if EffectType == "heal" then + ModifyHP(Caster, EffectValue) + else + SpellDamage(Target, DamageType, EffectValue) + end + +end diff --git a/server/Spells/Priest/Druid/Warden/HealingGrove.lua b/server/Spells/Priest/Druid/Warden/HealingGrove.lua new file mode 100644 index 000000000..a12cd642b --- /dev/null +++ b/server/Spells/Priest/Druid/Warden/HealingGrove.lua @@ -0,0 +1,24 @@ +--[[ + Script Name : Spells/Priest/Druid/Warden/HealingGrove.lua + Script Author : John Adams + Script Date : 2013.08.11 07:08:22 + Script Purpose : + : +--]] + +function cast(Caster, Target) + -- code to cast the spell + Say(Caster, "Whoops! Guess this is not implemented yet!") + +-- Info from spell_display_effects (remove from script when done) + +end + +function tick(Caster, Target) + -- code to process each call_frequency (tick) set in spell_tiers +end + +function remove(Caster, Target) + -- code to remove the spell +end + diff --git a/server/Spells/Priest/Druid/Warden/Healstorm.lua b/server/Spells/Priest/Druid/Warden/Healstorm.lua new file mode 100644 index 000000000..fbc3ba748 --- /dev/null +++ b/server/Spells/Priest/Druid/Warden/Healstorm.lua @@ -0,0 +1,19 @@ +--[[ + Script Name : Spells/Priest/Druid/Warden/Healstorm.lua + Script Author : theFoof + Script Date : 2013.12.11 12:12:37 + Script Purpose : + : +--]] +-- Heals group members (AE) instantly and every 2 seconds + +function cast(Caster, Target, HealLow, HealHigh) + SpellHeal("Heal", HealLow, HealHigh) +end + +function tick(Caster, Target, HealLow, HealHigh) + SpellHeal("Heal", HealLow, HealHigh) +end + +function remove() +end diff --git a/server/Spells/Priest/Druid/Warden/HierophanticGenesis.lua b/server/Spells/Priest/Druid/Warden/HierophanticGenesis.lua new file mode 100644 index 000000000..594b557d4 --- /dev/null +++ b/server/Spells/Priest/Druid/Warden/HierophanticGenesis.lua @@ -0,0 +1,22 @@ +--[[ + Script Name : Spells/Priest/Druid/Warden/HierophanticGenesis.lua + Script Author : neatz09 + Script Date : 2019.10.15 05:10:53 + Script Purpose : + : +--]] + + +-- Heals target for 547 - 668 instantly and every 2 seconds +-- Increases power of target by 43 - 52 instantly and every 2 seconds + +function cast(Caster, Target, MinHeal, MaxHeal, MinPwr, MaxPwr) +SpellHeal("Heal", MinHeal, MaxHeal) +SpellHeal("Power", MinPwr, MaxPwr) +end + + +function tick(Caster, Target, MinHeal, MaxHeal, MinPwr, MaxPwr) +SpellHeal("Heal", MinHeal, MaxHeal) +SpellHeal("Power", MinPwr, MaxPwr) +end diff --git a/server/Spells/Priest/Druid/Warden/Icefall.lua b/server/Spells/Priest/Druid/Warden/Icefall.lua new file mode 100644 index 000000000..b96e4b882 --- /dev/null +++ b/server/Spells/Priest/Druid/Warden/Icefall.lua @@ -0,0 +1,23 @@ +--[[ + Script Name : Spells/Priest/Druid/Warden/Icefall.lua + Script Author : theFoof + Script Date : 2013.12.10 + Script Purpose : + : +--]] + +function cast(Caster, Target, DmgType1, DmgLow1, DmgHigh1, DmgType2, DmgLow2, DmgHigh2) + Say(Caster, "races by model type not added yet") +-- Inflicts 31 - 38 cold damage on target +-- Inflicts 31 - 38 cold damage on target +-- If target is elemental (need to add model races first) + + SpellDamage(Target, DmgType1, DmgLow1, DmgHigh1) +end + +function tick(Caster, Target) +end + +function remove(Caster, Target) +end + diff --git a/server/Spells/Priest/Druid/Warden/InfuriatingThorns.lua b/server/Spells/Priest/Druid/Warden/InfuriatingThorns.lua new file mode 100644 index 000000000..616ba30e8 --- /dev/null +++ b/server/Spells/Priest/Druid/Warden/InfuriatingThorns.lua @@ -0,0 +1,29 @@ +--[[ + Script Name : Spells/Priest/Druid/Warden/InfuriatingThorns.lua + Script Author : John Adams + Script Date : 2013.08.11 07:08:05 + Script Purpose : + : +--]] + +function cast(Caster, Target) + -- code to cast the spell + Say(Caster, "Whoops! Guess this is not implemented yet!") + +-- Info from spell_display_effects (remove from script when done) +-- Will absorb physical, elemental, noxious, arcane damage. +-- When damaged this spell will cast Infuriating Thorns on target's attacker. +-- Inflicts 896 piercing damage on target +-- Cannot be modified except by direct means +-- Grants a total of 3 triggers of the spell. + +end + +function tick(Caster, Target) + -- code to process each call_frequency (tick) set in spell_tiers +end + +function remove(Caster, Target) + -- code to remove the spell +end + diff --git a/server/Spells/Priest/Druid/Warden/Instinct.lua b/server/Spells/Priest/Druid/Warden/Instinct.lua new file mode 100644 index 000000000..8b83f4ba2 --- /dev/null +++ b/server/Spells/Priest/Druid/Warden/Instinct.lua @@ -0,0 +1,20 @@ +--[[ + Script Name : Spells/Priest/Druid/Warden/Instinct.lua + Script Author : neatz09 + Script Date : 2019.10.15 05:10:59 + Script Purpose : + : +--]] + +-- Info from spell_display_effects (remove from script when done) +-- On a combat hit this spell may cast Primal Instincts on target of attack. Lasts for 6.0 seconds. Triggers about 2.4 times per minute. +-- Inflicts 144 - 176 piercing damage on target +-- Inflicts 72 - 88 piercing damage on target every 3 seconds +-- If target is a player or a mercenary +-- On a hostile ability cast this spell may cast Primal Instincts on target of spell. Lasts for 6.0 seconds. Triggers about 7.0 times per minute. +-- Inflicts 144 - 176 piercing damage on target +-- Inflicts 72 - 88 piercing damage on target every 3 seconds +-- This effect can only trigger once every 8.0 seconds. +-- If target is a player or a mercenary +-- Increases Crushing, Piercing, Slashing and Ranged of target by 21.6 +-- Pets cannot trigger Primal Instincts. diff --git a/server/Spells/Priest/Druid/Warden/MinorFlorescence.lua b/server/Spells/Priest/Druid/Warden/MinorFlorescence.lua new file mode 100644 index 000000000..498825222 --- /dev/null +++ b/server/Spells/Priest/Druid/Warden/MinorFlorescence.lua @@ -0,0 +1,42 @@ +--[[ + Script Name : HoT (Spell Type) + Script Purpose : Generic script for heal-over-time spells + Script Author : John Adams + Script Date : 2008.12.04 + Script Notes : JA: Need to determine if HoT's land instantly with the initial heal, or wait til tick() +--]] + +function cast(Caster, Target, HealType, HealMinVal, HealMaxVal, HOTType, HOTMinVal, HOTMaxVal) + + -- Heal component + if HealMinVal < HealMaxVal then + ModifyHP(Caster, math.random(HealMinVal, HealMaxVal)) + else + ModifyHP(Caster, HealMinVal) + end + + -- HoT component + if HOTType ~= nil then + -- Determine if there is a range to HoT values + if HOTMaxVal ~= nil and HOTMinVal < HOTMaxVal then + ModifyHP(Caster, math.random(HOTMinVal, HOTMaxVal)) + else + ModifyHP(Caster, HOTMinVal) + end + end + +end + +function tick(Caster, Target, HealType, HealMinVal, HealMaxVal, HOTType, HOTMinVal, HOTMaxVal) + + if HOTMaxVal ~= nil and HOTMinVal < HOTMaxVal then + ModifyHP(Caster, math.random(HOTMinVal, HOTMaxVal)) + else + ModifyHP(Caster, HOTMinVal) + end + +end + +function remove(Caster, Target) + -- code to remove the spell +end diff --git a/server/Spells/Priest/Druid/Warden/NaturesEmbrace.lua b/server/Spells/Priest/Druid/Warden/NaturesEmbrace.lua new file mode 100644 index 000000000..394dcca60 --- /dev/null +++ b/server/Spells/Priest/Druid/Warden/NaturesEmbrace.lua @@ -0,0 +1,24 @@ +--[[ + Script Name : Spells/Priest/Druid/Warden/NaturesEmbrace.lua + Script Author : theFoof + Script Date : 2013.12.09 11:12:48 + Script Purpose : + : +--]] + +-- Heals target for X - Y +-- Heals target for A - B every second + +function cast(Caster, Target, HealLow, HealHigh, HoTLow, HoTHigh) + SpellHeal("Heal", HealLow, HealHigh) +end + +function tick(Caster, Target, HealLow, HealHigh, HoTLow, HoTHigh) + SpellHeal("Heal", HoTLow, HoTHigh) +end + +function remove() +end + + + diff --git a/server/Spells/Priest/Druid/Warden/NaturesPack.lua b/server/Spells/Priest/Druid/Warden/NaturesPack.lua new file mode 100644 index 000000000..8820adbdd --- /dev/null +++ b/server/Spells/Priest/Druid/Warden/NaturesPack.lua @@ -0,0 +1,25 @@ +--[[ + Script Name : Spells/Priest/Druid/Warden/NaturesPack.lua + Script Author : John Adams + Script Date : 2013.08.11 07:08:51 + Script Purpose : + : +--]] + +function cast(Caster, Target) + -- code to cast the spell + Say(Caster, "Whoops! Guess this is not implemented yet!") + +-- Info from spell_display_effects (remove from script when done) +-- Summons 4 limited pets to aid the caster + +end + +function tick(Caster, Target) + -- code to process each call_frequency (tick) set in spell_tiers +end + +function remove(Caster, Target) + -- code to remove the spell +end + diff --git a/server/Spells/Priest/Druid/Warden/NaturesRenewal.lua b/server/Spells/Priest/Druid/Warden/NaturesRenewal.lua new file mode 100644 index 000000000..c9911082e --- /dev/null +++ b/server/Spells/Priest/Druid/Warden/NaturesRenewal.lua @@ -0,0 +1,24 @@ +--[[ + Script Name : Spells/Priest/Druid/Warden/NaturesRenewal.lua + Script Author : John Adams + Script Date : 2013.08.11 07:08:13 + Script Purpose : + : +--]] + +function cast(Caster, Target) + -- code to cast the spell + Say(Caster, "Whoops! Guess this is not implemented yet!") + +-- Info from spell_display_effects (remove from script when done) + +end + +function tick(Caster, Target) + -- code to process each call_frequency (tick) set in spell_tiers +end + +function remove(Caster, Target) + -- code to remove the spell +end + diff --git a/server/Spells/Priest/Druid/Warden/NaturesRestoration.lua b/server/Spells/Priest/Druid/Warden/NaturesRestoration.lua new file mode 100644 index 000000000..a49eeb95d --- /dev/null +++ b/server/Spells/Priest/Druid/Warden/NaturesRestoration.lua @@ -0,0 +1,29 @@ +--[[ + Script Name : Spells/Priest/Druid/Warden/NaturesRestoration.lua + Script Author : John Adams + Script Date : 2013.08.11 07:08:08 + Script Purpose : + : +--]] + +function cast(Caster, Target) + -- code to cast the spell + Say(Caster, "Whoops! Guess this is not implemented yet!") + +-- Info from spell_display_effects (remove from script when done) +-- Heal over time spells increase healing with each tick. Healing ceases to increase after 5 ticks. +-- On a healing spell cast this spell has a 50% chance to cast Splash of Nature on caster. +-- Increases power of caster by 394 - 590 +-- Cannot be modified except by direct means +-- Cannot be modified except by direct means + +end + +function tick(Caster, Target) + -- code to process each call_frequency (tick) set in spell_tiers +end + +function remove(Caster, Target) + -- code to remove the spell +end + diff --git a/server/Spells/Priest/Druid/Warden/NaturesTouch.lua b/server/Spells/Priest/Druid/Warden/NaturesTouch.lua new file mode 100644 index 000000000..efb041dc6 --- /dev/null +++ b/server/Spells/Priest/Druid/Warden/NaturesTouch.lua @@ -0,0 +1,24 @@ +--[[ + Script Name : Spells/Priest/Druid/Warden/NaturesTouch.lua + Script Author : neatz09 + Script Date : 2019.10.16 10:10:31 + Script Purpose : + : +--]] + +-- Info from spell_display_effects (remove from script when done) +-- Applies Nature's Blessing on termination. Lasts for 1 minute. +-- Heals target for 3.0% of max health instantly and every 6 seconds +-- This effect cannot be critically applied. +-- Applies Revived Sickness on termination. Lasts for 2 minutes. +-- Decreases All Attributes of target by 20.0% +-- If not between levels 1 - 6 +-- Decreases Haste of target by 20.0 +-- If not between levels 1 - 6 +-- Decreases All Attributes of target by 5.0% +-- If between levels 1 - 6 +-- Decreases Haste of target by 5.0 +-- If between levels 1 - 6 +-- Resurrects target with 15% health and power +-- If outside an arena +-- If outside an arena diff --git a/server/Spells/Priest/Druid/Warden/NereidsBoon.lua b/server/Spells/Priest/Druid/Warden/NereidsBoon.lua new file mode 100644 index 000000000..92e925fbe --- /dev/null +++ b/server/Spells/Priest/Druid/Warden/NereidsBoon.lua @@ -0,0 +1,26 @@ +--[[ + Script Name : Spells/Priest/Druid/Warden/NereidsBoon.lua + Script Author : John Adams + Script Date : 2013.08.11 07:08:34 + Script Purpose : + : +--]] + +function cast(Caster, Target) + -- code to cast the spell + Say(Caster, "Whoops! Guess this is not implemented yet!") + +-- Info from spell_display_effects (remove from script when done) +-- Allows group members (AE) to breathe under water +-- Grants Fish Vision to group members (AE) + +end + +function tick(Caster, Target) + -- code to process each call_frequency (tick) set in spell_tiers +end + +function remove(Caster, Target) + -- code to remove the spell +end + diff --git a/server/Spells/Priest/Druid/Warden/Photosynthesis.lua b/server/Spells/Priest/Druid/Warden/Photosynthesis.lua new file mode 100644 index 000000000..f06c9cf9f --- /dev/null +++ b/server/Spells/Priest/Druid/Warden/Photosynthesis.lua @@ -0,0 +1,20 @@ +--[[ + Script Name : Spells/Priest/Druid/Warden/Photosynthesis.lua + Script Author : theFoof + Script Date : 2013.12.10 11:12:20 + Script Purpose : + : +--]] + +-- Heals target instantly and every 2 seconds + +function cast(Caster, Target, HealLow, HealHigh) + SpellHeal("Heal", HealLow, HealHigh) +end + +function tick(Caster, Target, HealLow, HealHigh) + SpellHeal("Heal", HealLow, HealHigh) +end + +function remove() +end diff --git a/server/Spells/Priest/Druid/Warden/RegeneratingSpores.lua b/server/Spells/Priest/Druid/Warden/RegeneratingSpores.lua new file mode 100644 index 000000000..27486695a --- /dev/null +++ b/server/Spells/Priest/Druid/Warden/RegeneratingSpores.lua @@ -0,0 +1,24 @@ +--[[ + Script Name : Spells/Priest/Druid/Warden/RegeneratingSpores.lua + Script Author : John Adams + Script Date : 2013.08.11 07:08:44 + Script Purpose : + : +--]] + +function cast(Caster, Target) + -- code to cast the spell + Say(Caster, "Whoops! Guess this is not implemented yet!") + +-- Info from spell_display_effects (remove from script when done) + +end + +function tick(Caster, Target) + -- code to process each call_frequency (tick) set in spell_tiers +end + +function remove(Caster, Target) + -- code to remove the spell +end + diff --git a/server/Spells/Priest/Druid/Warden/Reincarnation.lua b/server/Spells/Priest/Druid/Warden/Reincarnation.lua new file mode 100644 index 000000000..e2a825929 --- /dev/null +++ b/server/Spells/Priest/Druid/Warden/Reincarnation.lua @@ -0,0 +1,45 @@ +--[[ + Script Name : Spells/Priest/Druid/Warden/Reincarnation.lua + Script Author : John Adams + Script Date : 2013.08.11 07:08:26 + Script Purpose : + : +--]] + +function cast(Caster, Target) + -- code to cast the spell + Say(Caster, "Whoops! Guess this is not implemented yet!") + +-- Info from spell_display_effects (remove from script when done) +-- Resurrects target with 15% health and power +-- Applies Reincarnate on termination. Lasts for 1 minute. +-- Increases All Attributes of target by 15.0% +-- Increases Attack Speed of target by 31.3 +-- Increases Damage Per Second of target by 36.0 +-- Increases Crushing, Piercing and Slashing of target by 15.0 +-- Heals target for 16.6% of max health +-- Heals target for 0.6% of max health every 6 seconds +-- Shapechanges target into a wolf +-- Applies Revived Sickness on termination. Lasts for 2 minutes. +-- Decreases Toughness of target by 145.0 +-- Decreases Lethality of target by 145.0 +-- Decreases All Attributes of target by 20.0% +-- If not between levels 1 - 6 +-- Decreases Attack Speed of target by 20.0 +-- If not between levels 1 - 6 +-- Decreases Attack Speed of target by 5.0 +-- If between levels 1 - 6 +-- Decreases All Attributes of target by 5.0% +-- If between levels 1 - 6 +-- If outside an arena + +end + +function tick(Caster, Target) + -- code to process each call_frequency (tick) set in spell_tiers +end + +function remove(Caster, Target) + -- code to remove the spell +end + diff --git a/server/Spells/Priest/Druid/Warden/Root.lua b/server/Spells/Priest/Druid/Warden/Root.lua new file mode 100644 index 000000000..82d18f44a --- /dev/null +++ b/server/Spells/Priest/Druid/Warden/Root.lua @@ -0,0 +1,36 @@ +--[[ + Script Name : Spells/Priest/Druid/Warden/Root.lua + Script Author : theFoof + Script Date : 2014.3.13 + Script Purpose : + : +--]] + +function cast(Caster, Target) +-- Roots target +-- Applies Ensnare on termination. Lasts for 12.0 seconds. +-- Slows target by 28.3% +-- 5% chance to dispel when target receives hostile action +-- 5% chance to dispel when target takes damage +-- 5% chance to dispel when target takes damage +-- Does not affect Epic targets +-- Resistibility increases against targets higher than level 29. + +-- Note: Need support for snares + if not IsEpic(Target) then + AddControlEffect(Target, 5) + AddProc(Target, 15, 5) + end +end + +function remove(Caster, Target) + if not IsEpic(Target) then + RemoveControlEffect(Target, 5) + RemoveProc(Target) + end +end + +function proc(Caster, Target, ProcType) + CancelSpell() +end + diff --git a/server/Spells/Priest/Druid/Warden/Sandstorm.lua b/server/Spells/Priest/Druid/Warden/Sandstorm.lua new file mode 100644 index 000000000..425077592 --- /dev/null +++ b/server/Spells/Priest/Druid/Warden/Sandstorm.lua @@ -0,0 +1,24 @@ +--[[ + Script Name : Spells/Priest/Druid/Warden/Sandstorm.lua + Script Author : John Adams + Script Date : 2013.08.11 07:08:54 + Script Purpose : + : +--]] + +function cast(Caster, Target) + -- code to cast the spell + Say(Caster, "Whoops! Guess this is not implemented yet!") + +-- Info from spell_display_effects (remove from script when done) + +end + +function tick(Caster, Target) + -- code to process each call_frequency (tick) set in spell_tiers +end + +function remove(Caster, Target) + -- code to remove the spell +end + diff --git a/server/Spells/Priest/Druid/Warden/SylvanBloom.lua b/server/Spells/Priest/Druid/Warden/SylvanBloom.lua new file mode 100644 index 000000000..92f0c15d3 --- /dev/null +++ b/server/Spells/Priest/Druid/Warden/SylvanBloom.lua @@ -0,0 +1,22 @@ +--[[ + Script Name : Spells/Priest/Druid/Warden/SylvanBloom.lua + Script Author : theFoof + Script Date : 2013.12.09 11:12:13 + Script Purpose : + : +--]] + +-- Heals target +-- Heals target every second + +function cast(Caster, Target, HealLow, HealHigh, HoTLow, HoTHigh) + SpellHeal("Heal", HealLow, HealHigh) +end + +function tick(Caster, Target, HealLow, HealHigh, HoTLow, HoTHigh) + SpellHeal("Heal", HoTLow, HoTHigh) +end + +function remove() +end + diff --git a/server/Spells/Priest/Druid/Warden/SylvanBloomX.lua b/server/Spells/Priest/Druid/Warden/SylvanBloomX.lua new file mode 100644 index 000000000..adad2c3d1 --- /dev/null +++ b/server/Spells/Priest/Druid/Warden/SylvanBloomX.lua @@ -0,0 +1,24 @@ +--[[ + Script Name : Spells/Priest/Druid/Warden/SylvanBloomX.lua + Script Author : John Adams + Script Date : 2013.08.11 07:08:25 + Script Purpose : + : +--]] + +function cast(Caster, Target) + -- code to cast the spell + Say(Caster, "Whoops! Guess this is not implemented yet!") + +-- Info from spell_display_effects (remove from script when done) + +end + +function tick(Caster, Target) + -- code to process each call_frequency (tick) set in spell_tiers +end + +function remove(Caster, Target) + -- code to remove the spell +end + diff --git a/server/Spells/Priest/Druid/Warden/SylvanEmbrace.lua b/server/Spells/Priest/Druid/Warden/SylvanEmbrace.lua new file mode 100644 index 000000000..08ca5bcf5 --- /dev/null +++ b/server/Spells/Priest/Druid/Warden/SylvanEmbrace.lua @@ -0,0 +1,26 @@ +--[[ + Script Name : Spells/Priest/Druid/Warden/SylvanEmbrace.lua + Script Author : John Adams + Script Date : 2013.08.11 07:08:11 + Script Purpose : + : +--]] + +function cast(Caster, Target) + -- code to cast the spell + Say(Caster, "Whoops! Guess this is not implemented yet!") + +-- Info from spell_display_effects (remove from script when done) +-- Heals group members (AE) for 473 - 579 +-- Heals group members (AE) for 195 - 238 every 2 seconds + +end + +function tick(Caster, Target) + -- code to process each call_frequency (tick) set in spell_tiers +end + +function remove(Caster, Target) + -- code to remove the spell +end + diff --git a/server/Spells/Priest/Druid/Warden/Thorncoat.lua b/server/Spells/Priest/Druid/Warden/Thorncoat.lua new file mode 100644 index 000000000..6a20fc0bf --- /dev/null +++ b/server/Spells/Priest/Druid/Warden/Thorncoat.lua @@ -0,0 +1,30 @@ +--[[ + Script Name : Spells/Priest/Druid/Warden/Thorncoat.lua + Script Author : Ememjr + Script Date : 2019.04.28 02:04:52 + Script Purpose : + : +--]] + +-- Info from spell_display_effects (remove from script when done) +-- When damaged with a melee weapon this spell will cast Thorns on target's attacker. +-- Inflicts 1 piercing damage on target +function cast(Caster, Target) + -- When damaged with a melee weapon this spell will cast Thorns on target's attacker. + AddProc(Target, 4, 100) +end + +function proc(Caster, Target, Type, DmgType, MinVal, MaxVal) + if Type == 4 then + -- Inflicts 1 piercing damage on target encounter + if MaxVal ~= nil and MinVal < MaxVal then + ProcDamage(Caster, Target, "Thorns", DmgType, MinVal, MaxVal) + else + ProcDamage(Caster, Target, "Thorns", DmgType, MinVal) + end + end +end + +function remove(Caster, Target) + RemoveProc(Target) +end \ No newline at end of file diff --git a/server/Spells/Priest/Druid/Warden/Tranquility.lua b/server/Spells/Priest/Druid/Warden/Tranquility.lua new file mode 100644 index 000000000..674d65e77 --- /dev/null +++ b/server/Spells/Priest/Druid/Warden/Tranquility.lua @@ -0,0 +1,17 @@ +--[[ + Script Name : Spells/Priest/Druid/Warden/Tranquility.lua + Script Author : neatz09 + Script Date : 2019.10.15 05:10:21 + Script Purpose : + : +--]] + +-- Info from spell_display_effects (remove from script when done) +-- Applies Tranquil Healing. +-- Heals target for 654 +-- You cannot cast this spell while under the effects of something that supresses the use of group cures! +-- Dispels 5 levels of any hostile effects on target instantly and every 15 seconds +-- Casts Tranquil Healing for each successful Dispel. +-- Heals target for 654 +-- You cannot cast this spell while under the effects of something that supresses the use of group cures! +-- You cannot cast this spell while under the effects of something that supresses the use of group cures! diff --git a/server/Spells/Priest/Druid/Warden/TunaresWatch.lua b/server/Spells/Priest/Druid/Warden/TunaresWatch.lua new file mode 100644 index 000000000..9e03e031e --- /dev/null +++ b/server/Spells/Priest/Druid/Warden/TunaresWatch.lua @@ -0,0 +1,24 @@ +--[[ + Script Name : Spells/Priest/Druid/Warden/TunaresWatch.lua + Script Author : John Adams + Script Date : 2013.08.11 07:08:37 + Script Purpose : + : +--]] + +function cast(Caster, Target) + -- code to cast the spell + Say(Caster, "Whoops! Guess this is not implemented yet!") + +-- Info from spell_display_effects (remove from script when done) + +end + +function tick(Caster, Target) + -- code to process each call_frequency (tick) set in spell_tiers +end + +function remove(Caster, Target) + -- code to remove the spell +end + diff --git a/server/Spells/Priest/Druid/Warden/Undergrowth.lua b/server/Spells/Priest/Druid/Warden/Undergrowth.lua new file mode 100644 index 000000000..855cc4015 --- /dev/null +++ b/server/Spells/Priest/Druid/Warden/Undergrowth.lua @@ -0,0 +1,20 @@ +--[[ + Script Name : Spells/Priest/Druid/Warden/Undergrowth.lua + Script Author : neatz09 + Script Date : 2019.10.15 05:10:19 + Script Purpose : + : +--]] + +-- Info from spell_display_effects (remove from script when done) +-- Applies Natural Undergrowth. Lasts for 46.0 seconds. +-- Applies Ensnare on termination. Lasts for 12.0 seconds. +-- Slows target by 36.4% +-- 5% chance to dispel when target receives hostile action +-- 5% chance to dispel when target takes damage +-- Roots target +-- 5% chance to dispel when target takes damage +-- Does not affect Epic targets +-- Resistibility increases against targets higher than level 90. +-- Interrupts target encounter +-- Decreases AGI of target encounter by 43.0 diff --git a/server/Spells/Priest/Druid/Warden/VerdantWhisper.lua b/server/Spells/Priest/Druid/Warden/VerdantWhisper.lua new file mode 100644 index 000000000..1b60649b7 --- /dev/null +++ b/server/Spells/Priest/Druid/Warden/VerdantWhisper.lua @@ -0,0 +1,13 @@ +--[[ + Script Name : Spells/Priest/Druid/Warden/VerdantWhisper.lua + Script Author : neatz09 + Script Date : 2019.10.06 08:10:58 + Script Purpose : + : +--]] + +-- Dispels 42 levels of any hostile effects on group members (AE) +function cast(Caster, Target, Amt) + CureByType(Amt, 0, "Cure") +end +-- You cannot cast this spell while under the effects of something that supresses the use of group cures! diff --git a/server/Spells/Priest/Druid/Warden/VerdurousJourney.lua b/server/Spells/Priest/Druid/Warden/VerdurousJourney.lua new file mode 100644 index 000000000..0c974d1b8 --- /dev/null +++ b/server/Spells/Priest/Druid/Warden/VerdurousJourney.lua @@ -0,0 +1,12 @@ +--[[ + Script Name : Spells/Priest/Druid/Warden/VerdurousJourney.lua + Script Author : neatz09 + Script Date : 2019.10.12 09:10:08 + Script Purpose : + : +--]] + +-- Teleports caster and caster's group within the zone +function cast(Caster, Target) + Evac() +end \ No newline at end of file diff --git a/server/Spells/Priest/Druid/Warden/WardenoftheForest.lua b/server/Spells/Priest/Druid/Warden/WardenoftheForest.lua new file mode 100644 index 000000000..7201458b4 --- /dev/null +++ b/server/Spells/Priest/Druid/Warden/WardenoftheForest.lua @@ -0,0 +1,28 @@ +--[[ + Script Name : Spells/Priest/Druid/Warden/WardenoftheForest.lua + Script Author : theFoof + Script Date : 2014.1.14 + Script Purpose : + : +--]] + +function cast(Caster, Target, Focus, PhysMit, Resists) +-- Shapechanges caster into a wolf +-- Grants See Invisibility to caster ***not yet scripted*** +-- Increases Focus of caster by 8.1 +-- Increases Mitigation of caster vs physical damage by 90 +-- Increases Mitigation of caster vs elemental, noxious and arcane damage by 342 + + AddSkillBonus(Target, GetSkillIDByName("Focus"), Focus) + AddSpellBonus(Target, 200, PhysMit) + AddSpellBonus(Target, 201, Resists) + AddSpellBonus(Target, 202, Resists) + AddSpellBonus(Target, 203, Resists) + SetIllusion(Target, 216) +end + +function remove(Caster, Target) + RemoveSpellBonus(Target) + ResetIllusion(Target) +end + diff --git a/server/Spells/Priest/Druid/Warden/WardoftheUntamed.lua b/server/Spells/Priest/Druid/Warden/WardoftheUntamed.lua new file mode 100644 index 000000000..ea4ed456c --- /dev/null +++ b/server/Spells/Priest/Druid/Warden/WardoftheUntamed.lua @@ -0,0 +1,24 @@ +--[[ + Script Name : Spells/Priest/Druid/Warden/WardoftheUntamed.lua + Script Author : John Adams + Script Date : 2013.08.11 07:08:06 + Script Purpose : + : +--]] + +function cast(Caster, Target) + -- code to cast the spell + Say(Caster, "Whoops! Guess this is not implemented yet!") + +-- Info from spell_display_effects (remove from script when done) + +end + +function tick(Caster, Target) + -- code to process each call_frequency (tick) set in spell_tiers +end + +function remove(Caster, Target) + -- code to remove the spell +end + diff --git a/server/Spells/Priest/Druid/Warden/WillowWisp.lua b/server/Spells/Priest/Druid/Warden/WillowWisp.lua new file mode 100644 index 000000000..a0f444663 --- /dev/null +++ b/server/Spells/Priest/Druid/Warden/WillowWisp.lua @@ -0,0 +1,14 @@ +--[[ + Script Name : Spells/Priest/Druid/Warden/WillowWisp.lua + Script Author : neatz09 + Script Date : 2019.10.15 04:10:43 + Script Purpose : + : +--]] + +-- Info from spell_display_effects (remove from script when done) +-- Interrupts targets in Area of Effect +-- Decreases threat priority of targets in Area of Effect by 1 position +-- Decreases Threat to targets in Area of Effect by 15,344 +-- Roots targets in Area of Effect +-- If Target is not Epic diff --git a/server/Spells/Priest/Druid/Warden/WindsofHealing.lua b/server/Spells/Priest/Druid/Warden/WindsofHealing.lua new file mode 100644 index 000000000..f468a0e86 --- /dev/null +++ b/server/Spells/Priest/Druid/Warden/WindsofHealing.lua @@ -0,0 +1,21 @@ +--[[ + Script Name : Spells/Priest/Druid/Warden/WindsofHealing.lua + Script Author : theFoof + Script Date : 2013.12.11 12:12:53 + Script Purpose : + : +--]] + +-- Heals group members (AE) for 67 - 82 +-- Heals group members (AE) for 11 - 14 every second + +function cast(Caster, Target, HealLow, HealHigh, HoTLow, HoTHigh) + SpellHeal("Heal", HealLow, HealHigh) +end + +function tick(Caster, Target, HealLow, HealHigh, HoTLow, HoTHigh) + SpellHeal("Heal", HoTLow, HoTHigh) +end + +function remove() +end diff --git a/server/Spells/Priest/Druid/Warden/WindsofPermafrost.lua b/server/Spells/Priest/Druid/Warden/WindsofPermafrost.lua new file mode 100644 index 000000000..8c36acf29 --- /dev/null +++ b/server/Spells/Priest/Druid/Warden/WindsofPermafrost.lua @@ -0,0 +1,27 @@ +--[[ + Script Name : Spells/Priest/Druid/Warden/WindsofPermafrost.lua + Script Author : neatz09 + Script Date : 2019.09.11 03:09:22 + Script Purpose : + : +--]] +-- Inflicts 226 - 276 cold damage on target encounter + +function cast(Caster, Target, DmgType, MinVal, MaxVal, DebuffAmt) + if MaxVal ~= nil and MinVal < MaxVal then + SpellDamage(Target, DmgType, math.random(MinVal, MaxVal)) + else + SpellDamage(Target, DmgType, MinVal) + end +-- Decreases Piercing, Slashing and Crushing of target encounter by 8.6 + AddSkillBonus(Target, GetSkillIDByName("Crushing"), DebuffAmt) + AddSkillBonus(Target, GetSkillIDByName("Piercing"), DebuffAmt) + AddSkillBonus(Target, GetSkillIDByName("Slashing"), DebuffAmt) +end + +function remove(Caster, Target) + RemoveSkillBonus(Target) + +end + + diff --git a/server/Spells/Priest/Druid/Warden/WintersBite.lua b/server/Spells/Priest/Druid/Warden/WintersBite.lua new file mode 100644 index 000000000..d39a216e3 --- /dev/null +++ b/server/Spells/Priest/Druid/Warden/WintersBite.lua @@ -0,0 +1,19 @@ +--[[ + Script Name : Spells/Priest/Druid/Warden/WintersBite.lua + Script Author : neatz09 + Script Date : 2019.04.22 05:04:30 + Script Purpose : + : +--]] + +-- Inflicts 178 - 217 cold damage on target + +function cast(Caster, Target, DmgType, MinVal, MaxVal) + if MaxVal ~= nil and MinVal < MaxVal then + SpellDamage(Target, DmgType, math.random(MinVal, MaxVal)) + else + SpellDamage(Target, DmgType, MinVal) + end +end + + diff --git a/server/Spells/Priest/Druid/Warden/WintersSting.lua b/server/Spells/Priest/Druid/Warden/WintersSting.lua new file mode 100644 index 000000000..2dec51edc --- /dev/null +++ b/server/Spells/Priest/Druid/Warden/WintersSting.lua @@ -0,0 +1,18 @@ +--[[ + Script Name : Spells/Priest/Druid/Warden/WintersSting.lua + Script Author : neatz09 + Script Date : 2019.04.22 07:04:25 + Script Purpose : + : +--]] + +-- Inflicts 237 - 289 cold damage on target + +function cast(Caster, Target, DmgType, MinVal, MaxVal) + if MaxVal ~= nil and MinVal < MaxVal then + SpellDamage(Target, DmgType, math.random(MinVal, MaxVal)) + else + SpellDamage(Target, DmgType, MinVal) + end +end + diff --git a/server/Spells/Priest/EnduringBreath.lua b/server/Spells/Priest/EnduringBreath.lua new file mode 100644 index 000000000..e07d8bb22 --- /dev/null +++ b/server/Spells/Priest/EnduringBreath.lua @@ -0,0 +1,16 @@ +--[[ + Script Name : Spells/Priest/EnduringBreath.lua + Script Author : Jabantiz + Script Date : 2013.12.14 12:12:26 + Script Purpose : + : +--]] + +function cast(Caster, Target) + -- Allows target to breathe under water + BreatheUnderwater(Target, true) +end + +function remove(Caster, Target) + BreatheUnderwater(Target, false) +end diff --git a/server/Spells/Priest/MastersSmite.lua b/server/Spells/Priest/MastersSmite.lua new file mode 100644 index 000000000..5589caad5 --- /dev/null +++ b/server/Spells/Priest/MastersSmite.lua @@ -0,0 +1,47 @@ +--[[ + Script Name : dd_debuff.lua + Script Purpose : Generic damage + 1 effect script + Script Author : John Adams + Script Date : 2008.12.04 + Script Notes : Parameter 4 and 5 are the debuff type and value (param 6 if value is a range) +--]] + +function cast(Caster, Target, DDType, MinDDVal, MaxDDVal, DebuffType, MinDebuffVal, MaxDebuffVal) + + -- Debuff component + -- Determine if there is a range to effect values + if MaxDebuffVal ~= nil and MinDebuffVal < MaxDebuffVal then + -- JA: for debuff randoms (if any), need to to math.random with precision - I think this function rounds up? + DebuffValue = math.random(MinDebuffVal, MaxDebuffVal) + else + DebuffValue = MinDebuffVal + end + + -- Determine DebuffType - either a DamageType or a String value passed as param 4 + if DebuffType == "Attack" then + -- ModifyAttackSpeed(Target, -DebuffValue) + elseif DebuffType == "DPS" then + -- ModifyDPS(Target, -DebuffValue) + elseif DebuffType == "Disease" then + -- ModifyDisease(Target, -DebuffValue) + elseif DebuffType == "Power" then + ModifyPower(Target, -DebuffValue) + elseif DebuffType == "Knockback" then + SpawnSet(Target, "visual_state", "10900") + end + + -- DD component (instant damage) + if MaxDDVal ~= nil and MinDDVal < MaxDDVal then + SpellDamage(Target, DDType, math.random(MinDDVal, MaxDDVal)) + else + SpellDamage(Target, DDType, MinDDVal) + end +end + +function tick(Caster, Target, DDType, MinDDVal, MaxDDVal, DebuffType, MinDebuffVal, MaxDebuffVal) + +end + +function remove(Caster, Target, DDType, MinDDVal, MaxDDVal, DebuffType, MinDebuffVal, MaxDebuffVal) + +end diff --git a/server/Spells/Priest/Revive.lua b/server/Spells/Priest/Revive.lua new file mode 100644 index 000000000..47f74257b --- /dev/null +++ b/server/Spells/Priest/Revive.lua @@ -0,0 +1,41 @@ +--[[ + Script Name : Spells/Priest/Revive.lua + Script Author : theFoof + Script Date : 2013.12.13 + Script Purpose : + : +--]] + +function cast(Caster, Target) + +-- Apply subspell for rez sickness when we support those + +-- Resurrects target with 15% health and power +-- Applies Revived Sickness on termination. Lasts for 2 minutes. +-- Decreases Toughness of target by 38.9 +-- Decreases Lethality of target by 38.9 +-- Decreases All Attributes of target by 20.0% +-- If not between levels 1 - 6 +-- Decreases Attack Speed of target by 20.0 +-- If not between levels 1 - 6 +-- Decreases Attack Speed of target by 5.0 +-- If between levels 1 - 6 +-- Decreases All Attributes of target by 5.0% +-- If between levels 1 - 6 +-- This effect cannot be cast during combat +-- If outside an arena + + + Resurrect(15, 15, 1) + CancelSpell() +end + +function remove(Caster, Target) +end + +function precast(Caster, Target) + if IsInCombat(Caster) then + return false + end + return true +end diff --git a/server/Spells/Priest/Shaman/Defiler/AbhorrentSeal.lua b/server/Spells/Priest/Shaman/Defiler/AbhorrentSeal.lua new file mode 100644 index 000000000..ab0636139 --- /dev/null +++ b/server/Spells/Priest/Shaman/Defiler/AbhorrentSeal.lua @@ -0,0 +1,25 @@ +--[[ + Script Name : Spells/Priest/Shaman/Defiler/AbhorrentSeal.lua + Script Author : neatz09 + Script Date : 2019.10.10 09:10:59 + Script Purpose : + : +--]] + + +-- Decreases STR, AGI and WIS of target by 74.2 + +function cast(Caster, Target, Str, Agi, Wis) + AddSpellBonus(Target, 0, Str) + AddSpellBonus(Target, 2, Agi) + AddSpellBonus(Target, 3, Wis) +end + + +function remove(Caster, Target) + RemoveSpellBonus(Target) + +end + + + diff --git a/server/Spells/Priest/Shaman/Defiler/Abomination.lua b/server/Spells/Priest/Shaman/Defiler/Abomination.lua new file mode 100644 index 000000000..5273c736a --- /dev/null +++ b/server/Spells/Priest/Shaman/Defiler/Abomination.lua @@ -0,0 +1,22 @@ +--[[ + Script Name : Spells/Priest/Shaman/Defiler/Abomination.lua + Script Author : Jabantiz + Script Date : 2014.03.13 04:03:09 + Script Purpose : + : +--]] + +function cast(Caster, Target, BonusAmt, Health) + -- Decreases STR, AGI, WIS and INT of target by 2.7 + AddSpellBonus(Target, 0, BonusAmt) + AddSpellBonus(Target, 2, BonusAmt) + AddSpellBonus(Target, 3, BonusAmt) + AddSpellBonus(Target, 4, BonusAmt) + + -- Decreases Max Health of target by 0.5% + AddSpellBonus(Target, 607, BonusAmt) +end + +function remove(Caster, Target) + RemoveSpellBonus(Target) +end diff --git a/server/Spells/Priest/Shaman/Defiler/Abominus.lua b/server/Spells/Priest/Shaman/Defiler/Abominus.lua new file mode 100644 index 000000000..3ac3c98a9 --- /dev/null +++ b/server/Spells/Priest/Shaman/Defiler/Abominus.lua @@ -0,0 +1,24 @@ +--[[ + Script Name : Spells/Priest/Shaman/Defiler/Abominus.lua + Script Author : neatz09 + Script Date : 2019.10.10 09:10:42 + Script Purpose : + : +--]] + +function cast(Caster, Target) +-- Allows group members (AE) to breathe under water +BreatheUnderwater(Target, true) +-- Allows group members (AE) to jump under water + AddControlEffect(Target, 8) +-- Allows group members (AE) to walk under water + AddControlEffect(Target,7) + +end + +function remove(Caster, Target) +BreatheUnderwater(Target, False) + RemoveControlEffect(Target, 8) + RemoveControlEffect(Target, 7) + +end diff --git a/server/Spells/Priest/Shaman/Defiler/AbsoluteCorruption.lua b/server/Spells/Priest/Shaman/Defiler/AbsoluteCorruption.lua new file mode 100644 index 000000000..84b01a39f --- /dev/null +++ b/server/Spells/Priest/Shaman/Defiler/AbsoluteCorruption.lua @@ -0,0 +1,28 @@ +--[[ + Script Name : Spells/Priest/Shaman/Defiler/AbsoluteCorruption.lua + Script Author : neatz09 + Script Date : 2019.10.10 10:10:28 + Script Purpose : + : +--]] + + + +-- Inflicts 37 - 46 disease damage on target encounter instantly and every 3 seconds +function cast(Caster, Target, DmgType, MinVal, MaxVal, Nox) +-- Interrupts target encounter + Interrupt(Caster, Target) +SpellDamage(Target, DmgType, MinVal, MaxVal) +-- Decreases Mitigation of target encounter vs noxious damage by 414 + AddSpellBonus(Target, 202, Nox) +end +function tick(Caster, Target) + SpellDamage(Target, DmgType, MinVal, MaxVal) +end + +function remove(Caster, Target) + RemoveSpellBonus(Target) + +end + + diff --git a/server/Spells/Priest/Shaman/Defiler/AncestralAvenger.lua b/server/Spells/Priest/Shaman/Defiler/AncestralAvenger.lua new file mode 100644 index 000000000..f7f4b1418 --- /dev/null +++ b/server/Spells/Priest/Shaman/Defiler/AncestralAvenger.lua @@ -0,0 +1,24 @@ +--[[ + Script Name : Spells/Priest/Shaman/Defiler/AncestralAvenger.lua + Script Author : John Adams + Script Date : 2013.08.11 07:08:19 + Script Purpose : + : +--]] + +function cast(Caster, Target) + -- code to cast the spell + Say(Caster, "Whoops! Guess this is not implemented yet!") + +-- Info from spell_display_effects (remove from script when done) + +end + +function tick(Caster, Target) + -- code to process each call_frequency (tick) set in spell_tiers +end + +function remove(Caster, Target) + -- code to remove the spell +end + diff --git a/server/Spells/Priest/Shaman/Defiler/AncientShroud.lua b/server/Spells/Priest/Shaman/Defiler/AncientShroud.lua new file mode 100644 index 000000000..54ed17d32 --- /dev/null +++ b/server/Spells/Priest/Shaman/Defiler/AncientShroud.lua @@ -0,0 +1,16 @@ +--[[ + Script Name : Spells/Priest/Shaman/Defiler/AncientShroud.lua + Script Author : Jabantiz + Script Date : 2014.03.13 04:03:34 + Script Purpose : + : +--]] + +function cast(Caster, Target, Ward) + -- Wards target against 155 points of all damage + AddWard(Ward) +end + +function remove(Caster, Target) + RemoveWard() +end diff --git a/server/Spells/Priest/Shaman/Defiler/AncientTerror.lua b/server/Spells/Priest/Shaman/Defiler/AncientTerror.lua new file mode 100644 index 000000000..db4c9c5d4 --- /dev/null +++ b/server/Spells/Priest/Shaman/Defiler/AncientTerror.lua @@ -0,0 +1,13 @@ +--[[ + Script Name : Spells/Priest/Shaman/Defiler/AncientTerror.lua + Script Author : neatz09 + Script Date : 2019.10.10 10:10:36 + Script Purpose : + : +--]] + +-- Info from spell_display_effects (remove from script when done) +-- Makes target afraid +-- 30% chance to dispel when target takes damage +-- Does not affect Epic targets +-- Resistibility increases against targets higher than level 29. diff --git a/server/Spells/Priest/Shaman/Defiler/Atrophy.lua b/server/Spells/Priest/Shaman/Defiler/Atrophy.lua new file mode 100644 index 000000000..ce2b17c11 --- /dev/null +++ b/server/Spells/Priest/Shaman/Defiler/Atrophy.lua @@ -0,0 +1,19 @@ +--[[ + Script Name : Spells/Priest/Shaman/Defiler/Atrophy.lua + Script Author : Jabantiz + Script Date : 2014.03.13 03:03:31 + Script Purpose : + : +--]] + +function cast(Caster, Target, AtkSpeed, DPS) + -- Decreases Attack Speed of target by 9.2 + AddSpellBonus(Target, 617, AtkSpeed) + + -- Decreases Damage Per Second of target by 5.3 + AddSpellBonus(Target, 629, DPS) +end + +function remove(Caster, Target) + RemoveSpellBonus(Target) +end diff --git a/server/Spells/Priest/Shaman/Defiler/Balm.lua b/server/Spells/Priest/Shaman/Defiler/Balm.lua new file mode 100644 index 000000000..130b94e21 --- /dev/null +++ b/server/Spells/Priest/Shaman/Defiler/Balm.lua @@ -0,0 +1,18 @@ +--[[ + Script Name : Heal (Spell Type) + Script Purpose : Generic script for healing spells + Script Author : John Adams + Script Date : 2008.12.03 + Script Note : +--]] + +function cast(Caster, Target, HealType, HealMinVal, HealMaxVal) + + -- Heal Component + if HealMinVal < HealMaxVal then + ModifyHP(Caster, math.random(HealMinVal, HealMaxVal)) + else + ModifyHP(Caster, HealMinVal) + end + +end diff --git a/server/Spells/Priest/Shaman/Defiler/BaneofWarding.lua b/server/Spells/Priest/Shaman/Defiler/BaneofWarding.lua new file mode 100644 index 000000000..828b93309 --- /dev/null +++ b/server/Spells/Priest/Shaman/Defiler/BaneofWarding.lua @@ -0,0 +1,11 @@ +--[[ + Script Name : Spells/Priest/Shaman/Defiler/BaneofWarding.lua + Script Author : neatz09 + Script Date : 2019.10.10 09:10:20 + Script Purpose : + : +--]] + +-- Info from spell_display_effects (remove from script when done) +-- On any combat or spell hit this spell may cast Curse of Shielding on target of attack. Lasts for 24.0 seconds. Triggers about 2.0 times per minute. +-- Wards target against 122 points of all damage diff --git a/server/Spells/Priest/Shaman/Defiler/CarrionWarding.lua b/server/Spells/Priest/Shaman/Defiler/CarrionWarding.lua new file mode 100644 index 000000000..b5cfb8fbd --- /dev/null +++ b/server/Spells/Priest/Shaman/Defiler/CarrionWarding.lua @@ -0,0 +1,16 @@ +--[[ + Script Name : Spells/Priest/Shaman/Defiler/CarrionWarding.lua + Script Author : Jabantiz + Script Date : 2014.03.13 05:03:41 + Script Purpose : + : +--]] + +function cast(Caster, Target, Ward) + -- Wards group members (AE) collectively against 327 total points of all damage + AddWard(Ward) +end + +function remove(Caster, Target) + RemoveWard(Ward) +end \ No newline at end of file diff --git a/server/Spells/Priest/Shaman/Defiler/CrystallizeSoul.lua b/server/Spells/Priest/Shaman/Defiler/CrystallizeSoul.lua new file mode 100644 index 000000000..148338ee6 --- /dev/null +++ b/server/Spells/Priest/Shaman/Defiler/CrystallizeSoul.lua @@ -0,0 +1,24 @@ +--[[ + Script Name : Spells/Priest/Shaman/Defiler/CrystallizeSoul.lua + Script Author : John Adams + Script Date : 2013.08.11 07:08:13 + Script Purpose : + : +--]] + +function cast(Caster, Target) + -- code to cast the spell + Say(Caster, "Whoops! Guess this is not implemented yet!") + +-- Info from spell_display_effects (remove from script when done) + +end + +function tick(Caster, Target) + -- code to process each call_frequency (tick) set in spell_tiers +end + +function remove(Caster, Target) + -- code to remove the spell +end + diff --git a/server/Spells/Priest/Shaman/Defiler/Curse.lua b/server/Spells/Priest/Shaman/Defiler/Curse.lua new file mode 100644 index 000000000..eb4e45a09 --- /dev/null +++ b/server/Spells/Priest/Shaman/Defiler/Curse.lua @@ -0,0 +1,54 @@ +--[[ + Script Name : debuff.lua + Script Purpose : Generic Debuff script + Script Author : John Adams + Script Date : 2008.12.05 +--]] + +function cast(Caster, Target, DebuffType, MinDebuffVal, MaxDebuffVal) + + -- Debuff component + -- Determine if there is a range to effect values + if MaxDebuffVal ~= nil and MinDebuffVal < MaxDebuffVal then + -- JA: for debuff randoms (if any), need to to math.random with precision - I think this function rounds up? + DebuffValue = math.random(MinDebuffVal, MaxDebuffVal) + else + DebuffValue = MinDebuffVal + end + + -- Determine DebuffType - either a DamageType or a String value passed as param 1 + -- Need functionality to buff/debuff + if DebuffType == "Defense" then + -- ModifyDefense(Target, -DebuffValue) + end + if DebuffType == "Elemental" then + -- ModifyHeat(Target, -DebuffValue) + -- ModifyCold(Target, -DebuffValue) + end + if DebuffType == "Noxious" then + -- ModifyPoison(Target, -DebuffValue) + -- ModifyDisease(Target, -DebuffValue) + end + +end + +function tick(Caster, Target, DebuffType, MinDebuffVal, MaxDebuffVal) + +end + +function remove(Caster, Target, DebuffType, MinDebuffVal, MaxDebuffVal) +-- Need functionality to restore original mitigations + + if DebuffType == "Defense" then + -- ModifyDefense(Target, Original) + end + if DebuffType == "Elemental" then + -- ModifyHeat(Target, Original) + -- ModifyCold(Target, Original) + end + if DebuffType == "Noxious" then + -- ModifyPoison(Target, Original) + -- ModifyDisease(Target, Original) + end + +end diff --git a/server/Spells/Priest/Shaman/Defiler/Deathward.lua b/server/Spells/Priest/Shaman/Defiler/Deathward.lua new file mode 100644 index 000000000..9fcc20ace --- /dev/null +++ b/server/Spells/Priest/Shaman/Defiler/Deathward.lua @@ -0,0 +1,25 @@ +--[[ + Script Name : Spells/Priest/Shaman/Defiler/Deathward.lua + Script Author : John Adams + Script Date : 2013.08.11 07:08:35 + Script Purpose : + : +--]] + +function cast(Caster, Target) + -- code to cast the spell + Say(Caster, "Whoops! Guess this is not implemented yet!") + +-- Info from spell_display_effects (remove from script when done) +-- Wards target against all damage. The amount is increased the closer the ally is to death. + +end + +function tick(Caster, Target) + -- code to process each call_frequency (tick) set in spell_tiers +end + +function remove(Caster, Target) + -- code to remove the spell +end + diff --git a/server/Spells/Priest/Shaman/Defiler/Defile.lua b/server/Spells/Priest/Shaman/Defiler/Defile.lua new file mode 100644 index 000000000..904a2a7a1 --- /dev/null +++ b/server/Spells/Priest/Shaman/Defiler/Defile.lua @@ -0,0 +1,30 @@ +--[[ + Script Name : Spells/Priest/Shaman/Defiler/Defile.lua + Script Author : neatz09 + Script Date : 2019.10.10 10:10:44 + Script Purpose : + : +--]] + +-- Info from spell_display_effects (remove from script when done) +-- Applies Defile. +-- Inflicts 51 disease damage on targets in Area of Effect +-- If under 10% Health +-- Inflicts 51 disease damage on targets in Area of Effect +-- If under 20% Health +-- Inflicts 51 disease damage on targets in Area of Effect +-- If under 40% Health +-- Inflicts 51 disease damage on targets in Area of Effect +-- If under 50% Health +-- Inflicts 51 disease damage on targets in Area of Effect +-- If under 60% Health +-- Inflicts 51 disease damage on targets in Area of Effect +-- If under 70% Health +-- Inflicts 51 disease damage on targets in Area of Effect +-- If under 80% Health +-- Inflicts 51 disease damage on targets in Area of Effect +-- If under 90% Health +-- Inflicts 51 disease damage on targets in Area of Effect +-- If under 100% Health +-- Inflicts 51 disease damage on targets in Area of Effect +-- If under 30% Health diff --git a/server/Spells/Priest/Shaman/Defiler/DireBalm.lua b/server/Spells/Priest/Shaman/Defiler/DireBalm.lua new file mode 100644 index 000000000..add036c3e --- /dev/null +++ b/server/Spells/Priest/Shaman/Defiler/DireBalm.lua @@ -0,0 +1,12 @@ +--[[ + Script Name : Heal (Spell Type) + Script Purpose : Generic script for healing spells + Script Author : John Adams + Script Date : 2013.11.19 + Script Note : +--]] + +function cast(Caster, Target, HealMinVal, HealMaxVal) + -- Heal Component + SpellHeal("Heal", HealMinVal, HealMaxVal) +end diff --git a/server/Spells/Priest/Shaman/Defiler/DireBalmX.lua b/server/Spells/Priest/Shaman/Defiler/DireBalmX.lua new file mode 100644 index 000000000..add036c3e --- /dev/null +++ b/server/Spells/Priest/Shaman/Defiler/DireBalmX.lua @@ -0,0 +1,12 @@ +--[[ + Script Name : Heal (Spell Type) + Script Purpose : Generic script for healing spells + Script Author : John Adams + Script Date : 2013.11.19 + Script Note : +--]] + +function cast(Caster, Target, HealMinVal, HealMaxVal) + -- Heal Component + SpellHeal("Heal", HealMinVal, HealMaxVal) +end diff --git a/server/Spells/Priest/Shaman/Defiler/FuliginousWhip.lua b/server/Spells/Priest/Shaman/Defiler/FuliginousWhip.lua new file mode 100644 index 000000000..f94ddf47c --- /dev/null +++ b/server/Spells/Priest/Shaman/Defiler/FuliginousWhip.lua @@ -0,0 +1,22 @@ +--[[ + Script Name : Spells/Priest/Shaman/Defiler/FuliginousWhip.lua + Script Author : neatz09 + Script Date : 2019.10.10 09:10:09 + Script Purpose : + : +--]] + + +-- Inflicts 56 - 69 disease damage on target instantly and every 4 seconds +function cast(Caster, Target, DmgType, MinVal, MaxVal, Haste) + SpellDamage(Target, DmgType, MinVal, MaxVal) +-- Decreases Haste of target by 6.2 + AddSpellBonus(Target, 617, Haste) +end +function tick(Caster, Target) + SpellDamage(Target, DmgType, MinVal, MaxVal) +end + +function remove(Caster, Target) + RemoveSpellBonus(Target) +end diff --git a/server/Spells/Priest/Shaman/Defiler/GreaterImprecation.lua b/server/Spells/Priest/Shaman/Defiler/GreaterImprecation.lua new file mode 100644 index 000000000..5589caad5 --- /dev/null +++ b/server/Spells/Priest/Shaman/Defiler/GreaterImprecation.lua @@ -0,0 +1,47 @@ +--[[ + Script Name : dd_debuff.lua + Script Purpose : Generic damage + 1 effect script + Script Author : John Adams + Script Date : 2008.12.04 + Script Notes : Parameter 4 and 5 are the debuff type and value (param 6 if value is a range) +--]] + +function cast(Caster, Target, DDType, MinDDVal, MaxDDVal, DebuffType, MinDebuffVal, MaxDebuffVal) + + -- Debuff component + -- Determine if there is a range to effect values + if MaxDebuffVal ~= nil and MinDebuffVal < MaxDebuffVal then + -- JA: for debuff randoms (if any), need to to math.random with precision - I think this function rounds up? + DebuffValue = math.random(MinDebuffVal, MaxDebuffVal) + else + DebuffValue = MinDebuffVal + end + + -- Determine DebuffType - either a DamageType or a String value passed as param 4 + if DebuffType == "Attack" then + -- ModifyAttackSpeed(Target, -DebuffValue) + elseif DebuffType == "DPS" then + -- ModifyDPS(Target, -DebuffValue) + elseif DebuffType == "Disease" then + -- ModifyDisease(Target, -DebuffValue) + elseif DebuffType == "Power" then + ModifyPower(Target, -DebuffValue) + elseif DebuffType == "Knockback" then + SpawnSet(Target, "visual_state", "10900") + end + + -- DD component (instant damage) + if MaxDDVal ~= nil and MinDDVal < MaxDDVal then + SpellDamage(Target, DDType, math.random(MinDDVal, MaxDDVal)) + else + SpellDamage(Target, DDType, MinDDVal) + end +end + +function tick(Caster, Target, DDType, MinDDVal, MaxDDVal, DebuffType, MinDebuffVal, MaxDebuffVal) + +end + +function remove(Caster, Target, DDType, MinDDVal, MaxDDVal, DebuffType, MinDebuffVal, MaxDebuffVal) + +end diff --git a/server/Spells/Priest/Shaman/Defiler/Harbinger.lua b/server/Spells/Priest/Shaman/Defiler/Harbinger.lua new file mode 100644 index 000000000..412ba8842 --- /dev/null +++ b/server/Spells/Priest/Shaman/Defiler/Harbinger.lua @@ -0,0 +1,19 @@ +--[[ + Script Name : Spells/Priest/Shaman/Defiler/Harbinger.lua + Script Author : Jabantiz + Script Date : 2014.03.13 04:03:26 + Script Purpose : + : +--]] + +function cast(Caster, Target, Sta, Power) + -- Increases STA of target by 2.8 + AddSpellBonus(Target, 1, Sta) + + -- Increases Max Power of target by 14.6 + AddSpellBonus(Target, 619, Power) +end + +function remove(Caster, Target) + RemoveSpellBonus(Target) +end diff --git a/server/Spells/Priest/Shaman/Defiler/Imprecate.lua b/server/Spells/Priest/Shaman/Defiler/Imprecate.lua new file mode 100644 index 000000000..459030df4 --- /dev/null +++ b/server/Spells/Priest/Shaman/Defiler/Imprecate.lua @@ -0,0 +1,25 @@ +--[[ + Script Name : Spells/Priest/Shaman/Defiler/Imprecate.lua + Script Author : John Adams + Script Date : 2013.11.19 09:11:21 + Script Purpose : + : +--]] + +function cast(Caster, Target, BuffAmt, DmgType, MinDmg, MaxDmg) + + -- Decreases Mitigation of target vs noxious damage by 21 + AddSpellBonus(Target, 202, BuffAmt) + + -- Inflicts 10 - 13 disease damage on target + if MaxDmg ~= nil and MinDmg < MaxDmg then + SpellDamage(Target, DmgType, math.random(MinDmg, MaxDmg)) + else + SpellDamage(Target, DmgType, MinDmg) + end + +end + +function remove(Caster, Target, BuffAmt, DmgType, MinDmg, MaxDmg) + RemoveSpellBonus(Target) +end diff --git a/server/Spells/Priest/Shaman/Defiler/Invective.lua b/server/Spells/Priest/Shaman/Defiler/Invective.lua new file mode 100644 index 000000000..624cb2e6e --- /dev/null +++ b/server/Spells/Priest/Shaman/Defiler/Invective.lua @@ -0,0 +1,12 @@ +--[[ + Script Name : Spells/Priest/Shaman/Defiler/Invective.lua + Script Author : neatz09 + Script Date : 2019.10.10 10:10:04 + Script Purpose : + : +--]] + +-- Info from spell_display_effects (remove from script when done) +-- On a hit this spell may cast Deadly Invective on target of attack. Lasts for 24.0 seconds. Triggers about 2.0 times per minute. +-- Inflicts 35 disease damage on target instantly and every 4 seconds +-- 44% of target's power consumed will also be drained from target's health diff --git a/server/Spells/Priest/Shaman/Defiler/Maelstrom.lua b/server/Spells/Priest/Shaman/Defiler/Maelstrom.lua new file mode 100644 index 000000000..230c95745 --- /dev/null +++ b/server/Spells/Priest/Shaman/Defiler/Maelstrom.lua @@ -0,0 +1,13 @@ +--[[ + Script Name : Spells/Priest/Shaman/Defiler/Maelstrom.lua + Script Author : neatz09 + Script Date : 2019.10.12 11:10:55 + Script Purpose : + : +--]] + +-- Info from spell_display_effects (remove from script when done) +-- Inflicts 337 - 412 disease damage on target encounter instantly and every 5 seconds +-- Decreases power of target encounter by 56 - 68 instantly and every 5 seconds +-- Heals group members (AE) for 365 - 446 instantly and every 5 seconds +-- Increases power of group members (AE) by 61 - 74 instantly and every 5 seconds diff --git a/server/Spells/Priest/Shaman/Defiler/MailofSouls.lua b/server/Spells/Priest/Shaman/Defiler/MailofSouls.lua new file mode 100644 index 000000000..12420b234 --- /dev/null +++ b/server/Spells/Priest/Shaman/Defiler/MailofSouls.lua @@ -0,0 +1,13 @@ +--[[ + Script Name : Spells/Priest/Shaman/Defiler/MailofSouls.lua + Script Author : neatz09 + Script Date : 2019.10.07 03:10:55 + Script Purpose : + : +--]] +-- Dispels 42 levels of any hostile effects on group members (AE) +function cast(Caster, Target, Amt) + CureByType(Amt, 0, "Cure") +end + +-- You cannot cast this spell while under the effects of something that supresses the use of group cures! diff --git a/server/Spells/Priest/Shaman/Defiler/Malaise.lua b/server/Spells/Priest/Shaman/Defiler/Malaise.lua new file mode 100644 index 000000000..7f21fc6ae --- /dev/null +++ b/server/Spells/Priest/Shaman/Defiler/Malaise.lua @@ -0,0 +1,79 @@ +--[[ + Script Name : dot_debuff.lua + Script Purpose : Generic damage + 1 effect script + Script Author : John Adams + Script Date : 2008.12.04 +--]] + +function cast(Caster, Target, DOTType, MinDOTVal, MaxDOTVal, DebuffType, MinDebuffVal, MaxDebuffVal) + + -- Debuff component + -- Determine if there is a range to effect values + if MaxDebuffVal ~= nil and MinDebuffVal < MaxDebuffVal then + + -- JA: for debuff randoms (if any), need to to math.random with precision - I think this function rounds up? + DebuffValue = math.random(MinDebuffVal, MaxDebuffVal) + + else + + DebuffValue = MinDebuffVal + + end + + -- Determine DebuffType - either a DamageType or a String value passed as param 4 + if DebuffType == "Defense" then + + -- Need functionality to buff/debuff + -- ModifyDefense(Target, -DebuffValue) + + end + + if DebuffType == "Elemental" then + + -- Need functionality to buff/debuff + -- ModifyHeat(Target, -DebuffValue) + -- ModifyCole(Target, -DebuffValue) + + end + + -- DOT component (instant damage) + if MaxDOTVal ~= nil and MinDOTVal < MaxDOTVal then + + SpellDamage(Target, DOTType, math.random(MinDOTVal, MaxDOTVal)) + + else + + SpellDamage(Target, DOTType, MinDOTVal) + + end + +end + +function tick(Caster, Target, DOTType, MinDOTVal, MaxDOTVal, DebuffType, MinDebuffVal, MaxDebuffVal) + + if MaxDOTVal ~= nil and MinDOTVal < MaxDOTVal then + + SpellDamage(Target, DOTType, math.random(MinDOTVal, MaxDOTVal)) + + else + + SpellDamage(Target, DOTType, MinDOTVal) + + end + +end + +function remove(Caster, Target, DOTType, MinDOTVal, MaxDOTVal, DebuffType, MinDebuffVal, MaxDebuffVal) + + if DebuffType == "Defense" then + -- Need functionality to restore original mitigations + -- ModifyDefense(Target, Original) + end + + if DebuffType == "Elemental" then + -- Need functionality to restore original mitigations + -- ModifyHeat(Target, Original) + -- ModifyCold(Target, Original) + end + +end diff --git a/server/Spells/Priest/Shaman/Defiler/MinorSacrificialHeal.lua b/server/Spells/Priest/Shaman/Defiler/MinorSacrificialHeal.lua new file mode 100644 index 000000000..130b94e21 --- /dev/null +++ b/server/Spells/Priest/Shaman/Defiler/MinorSacrificialHeal.lua @@ -0,0 +1,18 @@ +--[[ + Script Name : Heal (Spell Type) + Script Purpose : Generic script for healing spells + Script Author : John Adams + Script Date : 2008.12.03 + Script Note : +--]] + +function cast(Caster, Target, HealType, HealMinVal, HealMaxVal) + + -- Heal Component + if HealMinVal < HealMaxVal then + ModifyHP(Caster, math.random(HealMinVal, HealMaxVal)) + else + ModifyHP(Caster, HealMinVal) + end + +end diff --git a/server/Spells/Priest/Shaman/Defiler/Nightmares.lua b/server/Spells/Priest/Shaman/Defiler/Nightmares.lua new file mode 100644 index 000000000..b1ac9642f --- /dev/null +++ b/server/Spells/Priest/Shaman/Defiler/Nightmares.lua @@ -0,0 +1,26 @@ +--[[ + Script Name : Spells/Priest/Shaman/Defiler/Nightmares.lua + Script Author : John Adams + Script Date : 2013.08.11 07:08:38 + Script Purpose : + : +--]] + +function cast(Caster, Target) + -- code to cast the spell + Say(Caster, "Whoops! Guess this is not implemented yet!") + +-- Info from spell_display_effects (remove from script when done) +-- Inflicts 806 - 985 disease damage on target encounter instantly and every 4 seconds +-- Heals group members (AE) for 5 - 7 instantly and every 4 seconds + +end + +function tick(Caster, Target) + -- code to process each call_frequency (tick) set in spell_tiers +end + +function remove(Caster, Target) + -- code to remove the spell +end + diff --git a/server/Spells/Priest/Shaman/Defiler/NoxiousEfflux.lua b/server/Spells/Priest/Shaman/Defiler/NoxiousEfflux.lua new file mode 100644 index 000000000..a51ca735f --- /dev/null +++ b/server/Spells/Priest/Shaman/Defiler/NoxiousEfflux.lua @@ -0,0 +1,19 @@ +--[[ + Script Name : Spells/Priest/Shaman/Defiler/NoxiousEfflux.lua + Script Author : Jabantiz + Script Date : 2014.03.13 05:03:17 + Script Purpose : + : +--]] + +function cast(Caster, Target, Sta, Nox) + -- Increases STA of group members (AE) by 3.0 + AddSpellBonus(Target, 1, BonusAmt) + + -- Increases Mitigation of group members (AE) vs noxious damage by 194 + AddSpellBonus(Target, 202, Nox) +end + +function remove(Caster, Target) + RemoveSpellBonus(Target) +end diff --git a/server/Spells/Priest/Shaman/Defiler/Purulence.lua b/server/Spells/Priest/Shaman/Defiler/Purulence.lua new file mode 100644 index 000000000..758a22b6f --- /dev/null +++ b/server/Spells/Priest/Shaman/Defiler/Purulence.lua @@ -0,0 +1,25 @@ +--[[ + Script Name : Spells/Priest/Shaman/Defiler/Purulence.lua + Script Author : John Adams + Script Date : 2013.08.11 07:08:16 + Script Purpose : + : +--]] + +function cast(Caster, Target) + -- code to cast the spell + Say(Caster, "Whoops! Guess this is not implemented yet!") + +-- Info from spell_display_effects (remove from script when done) +-- Wards group members (AE) collectively against 1528 total points of all damage + +end + +function tick(Caster, Target) + -- code to process each call_frequency (tick) set in spell_tiers +end + +function remove(Caster, Target) + -- code to remove the spell +end + diff --git a/server/Spells/Priest/Shaman/Defiler/Putrefy.lua b/server/Spells/Priest/Shaman/Defiler/Putrefy.lua new file mode 100644 index 000000000..a4af28bae --- /dev/null +++ b/server/Spells/Priest/Shaman/Defiler/Putrefy.lua @@ -0,0 +1,24 @@ +--[[ + Script Name : Spells/Priest/Shaman/Defiler/Putrefy.lua + Script Author : Jabantiz + Script Date : 2014.03.13 03:03:42 + Script Purpose : + : +--]] + +function cast(Caster, Target, BonusAmt, DoTType, DmgVal) + -- Decreases WIS of target by 8.0 + AddSpellBonus(Target, 3, BonusAmt) + + -- Inflicts 6 poison damage on target instantly and every 4 seconds + SpellDamage(Target, DoTType, DmgVal) + +end + +function tick(Caster, Target, BonusAmt, DoTType, DmgVal) + SpellDamage(Target, DoTType, DmgVal) +end + +function remove(Caster, Target) + RemoveSpellBonus(Target) +end diff --git a/server/Spells/Priest/Shaman/Defiler/Reanimate.lua b/server/Spells/Priest/Shaman/Defiler/Reanimate.lua new file mode 100644 index 000000000..3e2169117 --- /dev/null +++ b/server/Spells/Priest/Shaman/Defiler/Reanimate.lua @@ -0,0 +1,42 @@ +--[[ + Script Name : Spells/Priest/Shaman/Defiler/Reanimate.lua + Script Author : John Adams + Script Date : 2013.08.11 07:08:42 + Script Purpose : + : +--]] + +function cast(Caster, Target) + -- code to cast the spell + Say(Caster, "Whoops! Guess this is not implemented yet!") + +-- Info from spell_display_effects (remove from script when done) +-- Resurrects target with 15% health and power +-- Applies Reanimate on termination. Lasts for 1 minute. +-- Heals target for 30.0% of max health +-- This effect cannot be critically applied. +-- Increases power of target by 2.0% instantly and every 4 seconds +-- This effect cannot be critically applied. +-- Applies Revived Sickness on termination. Lasts for 2 minutes. +-- Decreases Toughness of target by 75.0 +-- Decreases Lethality of target by 75.0 +-- Decreases All Attributes of target by 20.0% +-- If not between levels 1 - 6 +-- Decreases Attack Speed of target by 20.0 +-- If not between levels 1 - 6 +-- Decreases Attack Speed of target by 5.0 +-- If between levels 1 - 6 +-- Decreases All Attributes of target by 5.0% +-- If between levels 1 - 6 +-- If outside an arena + +end + +function tick(Caster, Target) + -- code to process each call_frequency (tick) set in spell_tiers +end + +function remove(Caster, Target) + -- code to remove the spell +end + diff --git a/server/Spells/Priest/Shaman/Defiler/SacrificialRestoration.lua b/server/Spells/Priest/Shaman/Defiler/SacrificialRestoration.lua new file mode 100644 index 000000000..14efe3621 --- /dev/null +++ b/server/Spells/Priest/Shaman/Defiler/SacrificialRestoration.lua @@ -0,0 +1,12 @@ +--[[ + Script Name : Spells/Priest/Shaman/Defiler/SacrificialRestoration.lua + Script Author : Jabantiz + Script Date : 2014.03.13 03:03:45 + Script Purpose : + : +--]] + +function cast(Caster, Target, MinVal, MaxVal) + -- Heals target for 44 - 54 + SpellHeal("Heal", MinVal, MaxVal) +end \ No newline at end of file diff --git a/server/Spells/Priest/Shaman/Defiler/Senescence.lua b/server/Spells/Priest/Shaman/Defiler/Senescence.lua new file mode 100644 index 000000000..57f5a210d --- /dev/null +++ b/server/Spells/Priest/Shaman/Defiler/Senescence.lua @@ -0,0 +1,42 @@ +--[[ + Script Name : Spells/Priest/Shaman/Defiler/Senescence.lua + Script Author : John Adams + Script Date : 2013.08.11 07:08:56 + Script Purpose : + : +--]] + +function cast(Caster, Target) + -- code to cast the spell + Say(Caster, "Whoops! Guess this is not implemented yet!") + +-- Info from spell_display_effects (remove from script when done) +-- Applies Revived Sickness on termination. Lasts for 2 minutes. +-- Decreases Toughness of target by 98.0 +-- Decreases Lethality of target by 98.0 +-- Decreases All Attributes of target by 20.0% +-- If not between levels 1 - 6 +-- Decreases Attack Speed of target by 20.0 +-- If not between levels 1 - 6 +-- Decreases Attack Speed of target by 5.0 +-- If between levels 1 - 6 +-- Decreases All Attributes of target by 5.0% +-- If between levels 1 - 6 +-- Resurrects target with 15% health and power +-- Applies Reanimate on termination. Lasts for 1 minute. +-- Heals target for 30.0% of max health +-- This effect cannot be critically applied. +-- Increases power of target by 2.0% instantly and every 4 seconds +-- This effect cannot be critically applied. +-- If outside an arena + +end + +function tick(Caster, Target) + -- code to process each call_frequency (tick) set in spell_tiers +end + +function remove(Caster, Target) + -- code to remove the spell +end + diff --git a/server/Spells/Priest/Shaman/Defiler/ShroudofArmor.lua b/server/Spells/Priest/Shaman/Defiler/ShroudofArmor.lua new file mode 100644 index 000000000..b340b8131 --- /dev/null +++ b/server/Spells/Priest/Shaman/Defiler/ShroudofArmor.lua @@ -0,0 +1,28 @@ +--[[ + Script Name : Spells/Priest/Shaman/Defiler/ShroudofArmor.lua + Script Author : Jabantiz + Script Date : 2014.03.13 04:03:11 + Script Purpose : + : +--]] + +function cast(Caster, Target, Resist, Ward) + -- Increases Mitigation of group members (AE) vs physical damage by 93 + -- If not fighter + AddSpellBonus(Target, 600, Resist, 11, 21, 31) + + -- Wards group members (AE) against 9 points of elemental, noxious and arcane damage + AddWard(Ward, 1, 2) +end + +function tick(Caster, Target) + -- No clue on the tick time (6 sec) or amount to regen per tick, just a guess at this point + AddToWard(3) +end + +--Missing function for health over level 90 +--last data entry is for max health +function remove(Caster, Target) + RemoveSpellBonus(Target) + RemoveWard() +end \ No newline at end of file diff --git a/server/Spells/Priest/Shaman/Defiler/SinisterCountenance.lua b/server/Spells/Priest/Shaman/Defiler/SinisterCountenance.lua new file mode 100644 index 000000000..7b69ab0c0 --- /dev/null +++ b/server/Spells/Priest/Shaman/Defiler/SinisterCountenance.lua @@ -0,0 +1,30 @@ +--[[ + Script Name : Spells/Priest/Shaman/Defiler/SinisterCountenance.lua + Script Author : Jabantiz + Script Date : 2014.03.13 05:03:02 + Script Purpose : + : +--]] + +function cast(Caster, Target, Sta, Wis, Resist) + -- Increases STA of caster by 7.7 + AddSpellBonus(Target, 1, Sta) + + -- Increases WIS of caster by 28.8 + AddSpellBonus(Target, 3, Wis) + + -- Increases Mitigation of caster vs elemental, noxious and arcane damage by 428 + AddSpellBonus(Target, 201, Resist) + AddSpellBonus(Target, 202, Resist) + AddSpellBonus(Target, 203, Resist) + + -- Grants See Invisibility to caster + + -- Shapechanges caster into a chaos essence + SetIllusion(Target, 3717) +end + +function remove(Caster, Target) + RemoveSpellBonus(Target) + ResetIllusion(Target) +end diff --git a/server/Spells/Priest/Shaman/Defiler/SoulCannibalize.lua b/server/Spells/Priest/Shaman/Defiler/SoulCannibalize.lua new file mode 100644 index 000000000..b89575e7a --- /dev/null +++ b/server/Spells/Priest/Shaman/Defiler/SoulCannibalize.lua @@ -0,0 +1,21 @@ +--[[ + Script Name : Spells/Priest/Shaman/Defiler/SoulCannibalize.lua + Script Author : neatz09 + Script Date : 2019.10.12 11:10:29 + Script Purpose : + : +--]] +function cast(Caster, Target, DmgType, MinVal, MaxVal, Pwr) +-- Inflicts 23 - 28 divine damage on target instantly and every 3 seconds +SpellDamage(Target, DmgType, MinVal, MaxVal) +-- Increases power of caster by 26 instantly and every 3 seconds +SpellHeal(Power, Pwr) +end + +function tick(Caster, Target) +-- Inflicts 23 - 28 divine damage on target instantly and every 3 seconds +SpellDamage(Target, DmgType, MinVal, MaxVal) +-- Increases power of caster by 26 instantly and every 3 seconds +SpellHeal(Power, Pwr) +end + diff --git a/server/Spells/Priest/Shaman/Defiler/SpiritualCircle.lua b/server/Spells/Priest/Shaman/Defiler/SpiritualCircle.lua new file mode 100644 index 000000000..cd29f20e6 --- /dev/null +++ b/server/Spells/Priest/Shaman/Defiler/SpiritualCircle.lua @@ -0,0 +1,24 @@ +--[[ + Script Name : Spells/Priest/Shaman/Defiler/SpiritualCircle.lua + Script Author : John Adams + Script Date : 2013.08.11 07:08:35 + Script Purpose : + : +--]] + +function cast(Caster, Target) + -- code to cast the spell + Say(Caster, "Whoops! Guess this is not implemented yet!") + +-- Info from spell_display_effects (remove from script when done) + +end + +function tick(Caster, Target) + -- code to process each call_frequency (tick) set in spell_tiers +end + +function remove(Caster, Target) + -- code to remove the spell +end + diff --git a/server/Spells/Priest/Shaman/Defiler/TendrilsofHorror.lua b/server/Spells/Priest/Shaman/Defiler/TendrilsofHorror.lua new file mode 100644 index 000000000..e6531f06f --- /dev/null +++ b/server/Spells/Priest/Shaman/Defiler/TendrilsofHorror.lua @@ -0,0 +1,24 @@ +--[[ + Script Name : Spells/Priest/Shaman/Defiler/TendrilsofHorror.lua + Script Author : John Adams + Script Date : 2013.08.11 07:08:54 + Script Purpose : + : +--]] + +function cast(Caster, Target) + -- code to cast the spell + Say(Caster, "Whoops! Guess this is not implemented yet!") + +-- Info from spell_display_effects (remove from script when done) + +end + +function tick(Caster, Target) + -- code to process each call_frequency (tick) set in spell_tiers +end + +function remove(Caster, Target) + -- code to remove the spell +end + diff --git a/server/Spells/Priest/Shaman/Defiler/TerrorChant.lua b/server/Spells/Priest/Shaman/Defiler/TerrorChant.lua new file mode 100644 index 000000000..739b12f8b --- /dev/null +++ b/server/Spells/Priest/Shaman/Defiler/TerrorChant.lua @@ -0,0 +1,33 @@ +--[[ + Script Name : Spells/Priest/Shaman/Defiler/TerrorChant.lua + Script Author : Jabantiz + Script Date : 2014.03.13 04:03:17 + Script Purpose : + : +--]] + +function cast(Caster, Target, Hate) + -- Decreases Threat to targets in Area of Effect by 323 + AddHate(Caster, Target, Hate) + + -- Decreases threat priority of targets in Area of Effect by 1 position + + -- Makes targets in Area of Effect afraid + -- If Target is not Epic + -- 30% chance to dispel when target takes damage + if not IsEpic(Target) then + AddControlEffect(Target, 6) + AddProc(Target, 2, 30.0) + end +end + +function proc(Caster, Target, Type) + if Type == 2 then + CancelSpell() + end +end + +function remove(Caster, Target) + RemoveControlEffect(Target, 6) +end + diff --git a/server/Spells/Priest/Shaman/Defiler/TribalSpirit.lua b/server/Spells/Priest/Shaman/Defiler/TribalSpirit.lua new file mode 100644 index 000000000..d501c5cc0 --- /dev/null +++ b/server/Spells/Priest/Shaman/Defiler/TribalSpirit.lua @@ -0,0 +1,31 @@ +--[[ + Script Name : Spells/Priest/Shaman/Defiler/TribalSpirit.lua + Script Author : John Adams + Script Date : 2013.08.11 07:08:39 + Script Purpose : + : +--]] + +function cast(Caster, Target) + -- code to cast the spell + Say(Caster, "Whoops! Guess this is not implemented yet!") + +-- Info from spell_display_effects (remove from script when done) +-- Adds additional healing to Ancient Shroud +-- Adds additional healing to Carrion Warding +-- On a beneficial spell cast this spell has a 12% chance to cast Tribal Spirit on the group. Lasts for 12.0 seconds. +-- Improves the value of healing and ward spells by 8%. +-- Reduces elemental, noxious, arcane damage done to group members (AE) by 5% +-- Cannot be modified except by direct means +-- Cannot be modified except by direct means + +end + +function tick(Caster, Target) + -- code to process each call_frequency (tick) set in spell_tiers +end + +function remove(Caster, Target) + -- code to remove the spell +end + diff --git a/server/Spells/Priest/Shaman/Defiler/Vehemence.lua b/server/Spells/Priest/Shaman/Defiler/Vehemence.lua new file mode 100644 index 000000000..4a70120b6 --- /dev/null +++ b/server/Spells/Priest/Shaman/Defiler/Vehemence.lua @@ -0,0 +1,19 @@ +--[[ + Script Name : Spells/Priest/Shaman/Defiler/Vehemence.lua + Script Author : Jabantiz + Script Date : 2014.03.13 05:03:46 + Script Purpose : + : +--]] + +function cast(Caster, Target, Sta, Str) + -- Increases STA of group members (AE) by 6.9 + AddSpellBonus(Target, 1, Sta) + + -- Increases STR of group members (AE) by 13.1 + AddSpellBonus(Target, 0, Str) +end + +function remove(Caster, Target) + RemoveSpellBonus(Target) +end diff --git a/server/Spells/Priest/Shaman/Defiler/Vivication.lua b/server/Spells/Priest/Shaman/Defiler/Vivication.lua new file mode 100644 index 000000000..0fe8ef8ec --- /dev/null +++ b/server/Spells/Priest/Shaman/Defiler/Vivication.lua @@ -0,0 +1,28 @@ +--[[ + Script Name : Spells/Priest/Shaman/Defiler/Vivication.lua + Script Author : John Adams + Script Date : 2013.08.11 07:08:31 + Script Purpose : + : +--]] + +function cast(Caster, Target) + -- code to cast the spell + Say(Caster, "Whoops! Guess this is not implemented yet!") + +-- Info from spell_display_effects (remove from script when done) +-- Resurrects target with 15% health and power +-- Applies Vivication on termination. +-- Heals target for 16.6% of max health +-- If outside an arena + +end + +function tick(Caster, Target) + -- code to process each call_frequency (tick) set in spell_tiers +end + +function remove(Caster, Target) + -- code to remove the spell +end + diff --git a/server/Spells/Priest/Shaman/Defiler/VoiceoftheAncestors.lua b/server/Spells/Priest/Shaman/Defiler/VoiceoftheAncestors.lua new file mode 100644 index 000000000..053545970 --- /dev/null +++ b/server/Spells/Priest/Shaman/Defiler/VoiceoftheAncestors.lua @@ -0,0 +1,11 @@ +--[[ + Script Name : Spells/Priest/Shaman/Defiler/VoiceoftheAncestors.lua + Script Author : neatz09 + Script Date : 2019.10.10 09:10:18 + Script Purpose : + : +--]] + +-- Info from spell_display_effects (remove from script when done) +-- Dispels 55 levels of hostile Fear, hostile Root, hostile Stifle, hostile Stun, hostile Daze and hostile Mesmerize effects on group members (AE) +-- You cannot cast this spell while under the effects of something that supresses the use of group cures! diff --git a/server/Spells/Priest/Shaman/Defiler/WildAccretion.lua b/server/Spells/Priest/Shaman/Defiler/WildAccretion.lua new file mode 100644 index 000000000..518d675d8 --- /dev/null +++ b/server/Spells/Priest/Shaman/Defiler/WildAccretion.lua @@ -0,0 +1,12 @@ +--[[ + Script Name : Spells/Priest/Shaman/Defiler/WildAccretion.lua + Script Author : Jabantiz + Script Date : 2014.03.13 05:03:19 + Script Purpose : + : +--]] + +function cast(Caster, Target, MinVal, MaxVal) + -- Heals group members (AE) for 125 - 153 + SpellHeal("Heal", MinVal, MaxVal) +end diff --git a/server/Spells/Priest/Shaman/EidolicWard.lua b/server/Spells/Priest/Shaman/EidolicWard.lua new file mode 100644 index 000000000..30b7d24d5 --- /dev/null +++ b/server/Spells/Priest/Shaman/EidolicWard.lua @@ -0,0 +1,25 @@ +--[[ + Script Name : Spells/Priest/Shaman/EidolicWard.lua + Script Author : John Adams + Script Date : 2013.08.11 07:08:20 + Script Purpose : + : +--]] + +function cast(Caster, Target) + -- code to cast the spell + Say(Caster, "Whoops! Guess this is not implemented yet!") + +-- Info from spell_display_effects (remove from script when done) +-- Wards target against 215 points of all damage + +end + +function tick(Caster, Target) + -- code to process each call_frequency (tick) set in spell_tiers +end + +function remove(Caster, Target) + -- code to remove the spell +end + diff --git a/server/Spells/Priest/Shaman/Mystic/Aid.lua b/server/Spells/Priest/Shaman/Mystic/Aid.lua new file mode 100644 index 000000000..34e914eb0 --- /dev/null +++ b/server/Spells/Priest/Shaman/Mystic/Aid.lua @@ -0,0 +1,47 @@ +--[[ + Script Name : Heal / Buff (Spell Type) + Script Purpose : Generic script for Heal / Buff spells + Script Author : John Adams + Script Date : 2008.12.04 +--]] + +function cast(Caster, Target, HealType, HealMinVal, HealMaxVal, BuffType, BuffMinVal, BuffMaxVal) + + -- Heal component + if HealMinVal < HealMaxVal then + ModifyHP(Caster, math.random(HealMinVal, HealMaxVal)) + else + ModifyHP(Caster, HealMinVal) + end + + -- Buff component + if BuffType ~= nil then + + if BuffType == "Health" then + + --SetMaxHP(Caster, GetMaxHP(Target) + BuffMinVal) + AddSpellBonus(Target, 500, BuffMinVal) + + end + + -- do other buff types here + + end + +end + +function tick(Caster, Target, HealType, HealMinVal, HealMaxVal, BuffType, BuffMinVal, BuffMaxVal) + + if BuffType == "Health" then + + SetMaxHP(Caster, GetMaxHP(Target) + BuffMinVal) + + end + + -- do other buff types here + +end + +function remove(Caster, Target, HealType, HealMinVal, HealMaxVal, BuffType, BuffMinVal, BuffMaxVal) + RemoveSpellBonus(Target) +end \ No newline at end of file diff --git a/server/Spells/Priest/Shaman/Mystic/AncestralAvatar.lua b/server/Spells/Priest/Shaman/Mystic/AncestralAvatar.lua new file mode 100644 index 000000000..7020d7830 --- /dev/null +++ b/server/Spells/Priest/Shaman/Mystic/AncestralAvatar.lua @@ -0,0 +1,24 @@ +--[[ + Script Name : Spells/Priest/Shaman/Mystic/AncestralAvatar.lua + Script Author : John Adams + Script Date : 2013.08.11 07:08:56 + Script Purpose : + : +--]] + +function cast(Caster, Target) + -- code to cast the spell + Say(Caster, "Whoops! Guess this is not implemented yet!") + +-- Info from spell_display_effects (remove from script when done) + +end + +function tick(Caster, Target) + -- code to process each call_frequency (tick) set in spell_tiers +end + +function remove(Caster, Target) + -- code to remove the spell +end + diff --git a/server/Spells/Priest/Shaman/Mystic/AncestralBalm.lua b/server/Spells/Priest/Shaman/Mystic/AncestralBalm.lua new file mode 100644 index 000000000..7adfea1c9 --- /dev/null +++ b/server/Spells/Priest/Shaman/Mystic/AncestralBalm.lua @@ -0,0 +1,31 @@ +--[[ + Script Name : Spells/Priest/Shaman/Mystic/AncestralBalm.lua + Script Author : neatz09 + Script Date : 2019.10.17 01:10:52 + Script Purpose : + : +--]] + +-- Info from spell_display_effects (remove from script when done) +-- Dispels 86 levels of any hostile effects on target +-- Dispels 86 levels of hostile Fear effects on target +-- Casts Ancestral Balm Fear Immunity for each successful Dispel. Lasts for 10.0 seconds. +-- Makes target immune to Fear effects +-- You cannot cast this spell while under the effects of something that supresses the use of group cures! +-- Dispels 86 levels of hostile Daze effects on target +-- Casts Ancestral Balm Daze Immunity for each successful Dispel. Lasts for 10.0 seconds. +-- Makes target immune to Daze effects +-- You cannot cast this spell while under the effects of something that supresses the use of group cures! +-- Dispels 86 levels of hostile Root effects on target +-- Casts Ancestral Balm Root Immunity for each successful Dispel. Lasts for 10.0 seconds. +-- Makes target immune to Root effects +-- You cannot cast this spell while under the effects of something that supresses the use of group cures! +-- Dispels 86 levels of hostile Stifle effects on target +-- Casts Ancestral Balm Stifle Immunity for each successful Dispel. Lasts for 10.0 seconds. +-- Makes target immune to Stifle effects +-- You cannot cast this spell while under the effects of something that supresses the use of group cures! +-- Dispels 86 levels of hostile Stun effects on target +-- Casts Ancestral Balm Stun Immunity for each successful Dispel. Lasts for 10.0 seconds. +-- Makes target immune to Stun effects +-- You cannot cast this spell while under the effects of something that supresses the use of group cures! +-- You cannot cast this spell while under the effects of something that supresses the use of group cures! diff --git a/server/Spells/Priest/Shaman/Mystic/AncestralMettle.lua b/server/Spells/Priest/Shaman/Mystic/AncestralMettle.lua new file mode 100644 index 000000000..da793982e --- /dev/null +++ b/server/Spells/Priest/Shaman/Mystic/AncestralMettle.lua @@ -0,0 +1,19 @@ +--[[ + Script Name : Spells/Priest/Shaman/Mystic/AncestralMettle.lua + Script Author : Jabantiz + Script Date : 2013.12.13 08:12:20 + Script Purpose : + : +--]] + +function cast(Caster, Target, StatAmt, ResistAmt) + -- Increases STA of group members (AE) by 3.0 + AddSpellBonus(Target, 1, StatAmt) + + -- Increases Mitigation of group members (AE) vs noxious damage by 194 + AddSpellBonus(Target, 202, ResistAmt) +end + +function remove(Caster, Target) + RemoveSpellBonus(Target) +end \ No newline at end of file diff --git a/server/Spells/Priest/Shaman/Mystic/AncestralSavior.lua b/server/Spells/Priest/Shaman/Mystic/AncestralSavior.lua new file mode 100644 index 000000000..c8d008470 --- /dev/null +++ b/server/Spells/Priest/Shaman/Mystic/AncestralSavior.lua @@ -0,0 +1,24 @@ +--[[ + Script Name : Spells/Priest/Shaman/Mystic/AncestralSavior.lua + Script Author : John Adams + Script Date : 2013.08.11 07:08:06 + Script Purpose : + : +--]] + +function cast(Caster, Target) + -- code to cast the spell + Say(Caster, "Whoops! Guess this is not implemented yet!") + +-- Info from spell_display_effects (remove from script when done) + +end + +function tick(Caster, Target) + -- code to process each call_frequency (tick) set in spell_tiers +end + +function remove(Caster, Target) + -- code to remove the spell +end + diff --git a/server/Spells/Priest/Shaman/Mystic/AncestralSentry.lua b/server/Spells/Priest/Shaman/Mystic/AncestralSentry.lua new file mode 100644 index 000000000..5a59bb679 --- /dev/null +++ b/server/Spells/Priest/Shaman/Mystic/AncestralSentry.lua @@ -0,0 +1,25 @@ +--[[ + Script Name : Spells/Priest/Shaman/Mystic/AncestralSentry.lua + Script Author : John Adams + Script Date : 2013.08.11 07:08:59 + Script Purpose : + : +--]] + +function cast(Caster, Target) + -- code to cast the spell + Say(Caster, "Whoops! Guess this is not implemented yet!") + +-- Info from spell_display_effects (remove from script when done) +-- Summons a limited pet to aid the caster + +end + +function tick(Caster, Target) + -- code to process each call_frequency (tick) set in spell_tiers +end + +function remove(Caster, Target) + -- code to remove the spell +end + diff --git a/server/Spells/Priest/Shaman/Mystic/AncestralWard.lua b/server/Spells/Priest/Shaman/Mystic/AncestralWard.lua new file mode 100644 index 000000000..ad31636e3 --- /dev/null +++ b/server/Spells/Priest/Shaman/Mystic/AncestralWard.lua @@ -0,0 +1,18 @@ +--[[ + Script Name : Spells/Priest/Shaman/Mystic/AncestralWard.lua + Script Author : Jabantiz + Script Date : 2013.12.13 07:12:27 + Script Purpose : + : +--]] + +function cast(Caster, Target, WardAmt) + -- Wards target against 155 points of all damage + AddWard(WardAmt) + + Say(Caster, "Not Implemented: remainder to heal") +end + +function remove(Caster, Target) + RemoveWard() +end \ No newline at end of file diff --git a/server/Spells/Priest/Shaman/Mystic/Bolster.lua b/server/Spells/Priest/Shaman/Mystic/Bolster.lua new file mode 100644 index 000000000..1e24d19d7 --- /dev/null +++ b/server/Spells/Priest/Shaman/Mystic/Bolster.lua @@ -0,0 +1,26 @@ +--[[ + Script Name : Spells/Priest/Shaman/Mystic/Bolster.lua + Script Author : John Adams + Script Date : 2013.08.11 07:08:54 + Script Purpose : + : +--]] + +function cast(Caster, Target) + -- code to cast the spell + Say(Caster, "Whoops! Guess this is not implemented yet!") + +-- Info from spell_display_effects (remove from script when done) +-- Increases All Attributes of target by 11.3% +-- Enlarges target by 30.6% + +end + +function tick(Caster, Target) + -- code to process each call_frequency (tick) set in spell_tiers +end + +function remove(Caster, Target) + -- code to remove the spell +end + diff --git a/server/Spells/Priest/Shaman/Mystic/ColdWind.lua b/server/Spells/Priest/Shaman/Mystic/ColdWind.lua new file mode 100644 index 000000000..c59c76ceb --- /dev/null +++ b/server/Spells/Priest/Shaman/Mystic/ColdWind.lua @@ -0,0 +1,42 @@ +--[[ + Script Name : dd_snare.lua + Script Purpose : Generic damage + Snare effect script + Script Author : John Adams + Script Date : 2008.12.04 +--]] + +function cast(Caster, Target, DDType, MinDDVal, MaxDDVal, SnareAmount, DispelChance) + + -- DD component + if MaxDDVal ~= nil and MinDDVal < MaxDDVal then + SpellDamage(Target, DDType, math.random(MinDDVal, MaxDDVal)) + else + SpellDamage(Target, DDType, MinDDVal) + end + + -- Snare component + OriginalSpeed = GetSpeed(Target) + newSpeed = OriginalSpeed - (OriginalSpeed * (SnareAmount / 100)) + + if OriginalSpeed > newSpeed then + SetSpeed(Target, newSpeed) + end + +end + +function tick(Caster, Target, DDType, MinDDVal, MaxDDVal, SnareAmount, DispelChance) +--[[ + OriginalSpeed = GetSpeed(Target) + newSpeed = OriginalSpeed - (OriginalSpeed * (SnareAmount / 100)) + + if OriginalSpeed > newSpeed then + SetSpeed(Target, newSpeed) + end +--]] +end + +function remove(Caster, Target) +--[[ + SetSpeed(Target, OriginalSpeed) +--]] +end \ No newline at end of file diff --git a/server/Spells/Priest/Shaman/Mystic/Deteriorate.lua b/server/Spells/Priest/Shaman/Mystic/Deteriorate.lua new file mode 100644 index 000000000..693375744 --- /dev/null +++ b/server/Spells/Priest/Shaman/Mystic/Deteriorate.lua @@ -0,0 +1,17 @@ +--[[ + Script Name : Spells/Priest/Shaman/Mystic/Deteriorate.lua + Script Author : Jabantiz + Script Date : 2013.12.13 06:12:41 + Script Purpose : + : +--]] + +function cast(Caster, Target, BonusAmt) + -- Decreases STR and AGI of target by 8.0 + AddSpellBonus(Target, 0, BonusAmt) + AddSpellBonus(Target, 2, BonusAmt) +end + +function remove(Caster, Target) + RemoveSpellBonus(Target) +end \ No newline at end of file diff --git a/server/Spells/Priest/Shaman/Mystic/EbbingSpirit.lua b/server/Spells/Priest/Shaman/Mystic/EbbingSpirit.lua new file mode 100644 index 000000000..87b80f95d --- /dev/null +++ b/server/Spells/Priest/Shaman/Mystic/EbbingSpirit.lua @@ -0,0 +1,13 @@ +--[[ + Script Name : Spells/Priest/Shaman/Mystic/EbbingSpirit.lua + Script Author : neatz09 + Script Date : 2019.10.06 09:10:28 + Script Purpose : + : +--]] + +-- Dispels 42 levels of any hostile effects on group members (AE) +function cast(Caster, Target, Amt) + CureByType(Amt, 0, "Cure") +end +-- You cannot cast this spell while under the effects of something that supresses the use of group cures! diff --git a/server/Spells/Priest/Shaman/Mystic/EchoesoftheAncients.lua b/server/Spells/Priest/Shaman/Mystic/EchoesoftheAncients.lua new file mode 100644 index 000000000..9255ea4cc --- /dev/null +++ b/server/Spells/Priest/Shaman/Mystic/EchoesoftheAncients.lua @@ -0,0 +1,27 @@ +--[[ + Script Name : Spells/Priest/Shaman/Mystic/EchoesoftheAncients.lua + Script Author : John Adams + Script Date : 2013.08.11 07:08:49 + Script Purpose : + : +--]] + +function cast(Caster, Target) + -- code to cast the spell + Say(Caster, "Whoops! Guess this is not implemented yet!") + +-- Info from spell_display_effects (remove from script when done) +-- Interrupts target encounter +-- Decreases Max Health of target encounter by 1.3% +-- Decreases Mitigation of target encounter vs elemental and noxious damage by 234 + +end + +function tick(Caster, Target) + -- code to process each call_frequency (tick) set in spell_tiers +end + +function remove(Caster, Target) + -- code to remove the spell +end + diff --git a/server/Spells/Priest/Shaman/Mystic/Fever.lua b/server/Spells/Priest/Shaman/Mystic/Fever.lua new file mode 100644 index 000000000..977307f18 --- /dev/null +++ b/server/Spells/Priest/Shaman/Mystic/Fever.lua @@ -0,0 +1,39 @@ +--[[ + Script Name : dot.lua + Script Purpose : Generic Damage Over Time script + Script Author : John Adams + Script Date : 2008.12.04 +--]] + +function cast(Caster, Target, DOTType, MinDOTVal, MaxDOTVal) + + -- DOT component (instant damage) + if MaxDOTVal ~= nil and MinDOTVal < MaxDOTVal then + + SpellDamage(Target, DOTType, math.random(MinDOTVal, MaxDOTVal)) + + else + + SpellDamage(Target, DOTType, MinDOTVal) + + end + +end + +function tick(Caster, Target, DOTType, MinDOTVal, MaxDOTVal) + + if MaxDOTVal ~= nil and MinDOTVal < MaxDOTVal then + + SpellDamage(Target, DOTType, math.random(MinDOTVal, MaxDOTVal)) + + else + + SpellDamage(Target, DOTType, MinDOTVal) + + end + +end + +function remove(Caster, Target, DOTType, MinDOTVal, MaxDOTVal) + +end diff --git a/server/Spells/Priest/Shaman/Mystic/FieldsoftheGrey.lua b/server/Spells/Priest/Shaman/Mystic/FieldsoftheGrey.lua new file mode 100644 index 000000000..75b6abcd2 --- /dev/null +++ b/server/Spells/Priest/Shaman/Mystic/FieldsoftheGrey.lua @@ -0,0 +1,39 @@ +--[[ + Script Name : Spells/Priest/Shaman/Mystic/FieldsoftheGrey.lua + Script Author : John Adams + Script Date : 2013.08.11 07:08:42 + Script Purpose : + : +--]] + +function cast(Caster, Target) + -- code to cast the spell + Say(Caster, "Whoops! Guess this is not implemented yet!") + +-- Info from spell_display_effects (remove from script when done) +-- Resurrects target with 15% health and power +-- Applies Heal on termination. +-- Heals target for 16.6% of max health +-- Applies Revived Sickness on termination. Lasts for 2 minutes. +-- Decreases Toughness of target by 98.0 +-- Decreases Lethality of target by 98.0 +-- Decreases All Attributes of target by 20.0% +-- If not between levels 1 - 6 +-- Decreases Attack Speed of target by 20.0 +-- If not between levels 1 - 6 +-- Decreases Attack Speed of target by 5.0 +-- If between levels 1 - 6 +-- Decreases All Attributes of target by 5.0% +-- If between levels 1 - 6 +-- If outside an arena + +end + +function tick(Caster, Target) + -- code to process each call_frequency (tick) set in spell_tiers +end + +function remove(Caster, Target) + -- code to remove the spell +end + diff --git a/server/Spells/Priest/Shaman/Mystic/GlacialFlames.lua b/server/Spells/Priest/Shaman/Mystic/GlacialFlames.lua new file mode 100644 index 000000000..431bad3a4 --- /dev/null +++ b/server/Spells/Priest/Shaman/Mystic/GlacialFlames.lua @@ -0,0 +1,25 @@ +--[[ + Script Name : Spells/Priest/Shaman/Mystic/GlacialFlames.lua + Script Author : John Adams + Script Date : 2013.08.11 07:08:35 + Script Purpose : + : +--]] + +function cast(Caster, Target) + -- code to cast the spell + Say(Caster, "Whoops! Guess this is not implemented yet!") + +-- Info from spell_display_effects (remove from script when done) +-- Inflicts 59 - 72 cold damage on target instantly and every 3 seconds + +end + +function tick(Caster, Target) + -- code to process each call_frequency (tick) set in spell_tiers +end + +function remove(Caster, Target) + -- code to remove the spell +end + diff --git a/server/Spells/Priest/Shaman/Mystic/Haze.lua b/server/Spells/Priest/Shaman/Mystic/Haze.lua new file mode 100644 index 000000000..1f3fcb5b5 --- /dev/null +++ b/server/Spells/Priest/Shaman/Mystic/Haze.lua @@ -0,0 +1,24 @@ +--[[ + Script Name : Spells/Priest/Shaman/Mystic/Haze.lua + Script Author : Jabantiz + Script Date : 2013.12.13 05:12:51 + Script Purpose : + : +--]] + +function cast(Caster, Target, BonusAmt, SkillAmt) + -- Decreases Attack Speed of target by 9.2 + AddSpellBonus(Target, 617, BonusAmt) + + -- Decreases Slashing, Piercing and Crushing of target by 0.6 + AddSkillBonus(Target, GetSkillIDByName("Slashing"), SkillAmt) + AddSkillBonus(Target, GetSkillIDByName("Piercing"), SkillAmt) + AddSkillBonus(Target, GetSkillIDByName("Crushing"), SkillAmt) + +end + +function remove(Caster, Target) + RemoveSpellBonus(Target) + RemoveSkillBonus(Target) +end + diff --git a/server/Spells/Priest/Shaman/Mystic/LamentingSoul.lua b/server/Spells/Priest/Shaman/Mystic/LamentingSoul.lua new file mode 100644 index 000000000..1bca331bc --- /dev/null +++ b/server/Spells/Priest/Shaman/Mystic/LamentingSoul.lua @@ -0,0 +1,10 @@ +--[[ + Script Name : Spells/Priest/Shaman/Mystic/LamentingSoul.lua + Script Author : neatz09 + Script Date : 2019.09.27 10:09:03 + Script Purpose : + : +--]] + +-- Info from spell_display_effects (remove from script when done) +-- Decreases DPS of target by 15.9 diff --git a/server/Spells/Priest/Shaman/Mystic/Lethargy.lua b/server/Spells/Priest/Shaman/Mystic/Lethargy.lua new file mode 100644 index 000000000..6031dbb2e --- /dev/null +++ b/server/Spells/Priest/Shaman/Mystic/Lethargy.lua @@ -0,0 +1,25 @@ +--[[ + Script Name : Spells/Priest/Shaman/Mystic/Lethargy.lua + Script Author : John Adams + Script Date : 2013.08.11 07:08:42 + Script Purpose : + : +--]] + +function cast(Caster, Target) + -- code to cast the spell + Say(Caster, "Whoops! Guess this is not implemented yet!") + +-- Info from spell_display_effects (remove from script when done) +-- Decreases Attack Speed of target encounter by 12.1 + +end + +function tick(Caster, Target) + -- code to process each call_frequency (tick) set in spell_tiers +end + +function remove(Caster, Target) + -- code to remove the spell +end + diff --git a/server/Spells/Priest/Shaman/Mystic/LunarAttendant.lua b/server/Spells/Priest/Shaman/Mystic/LunarAttendant.lua new file mode 100644 index 000000000..5427a4e24 --- /dev/null +++ b/server/Spells/Priest/Shaman/Mystic/LunarAttendant.lua @@ -0,0 +1,24 @@ +--[[ + Script Name : Spells/Priest/Shaman/Mystic/LunarAttendant.lua + Script Author : John Adams + Script Date : 2013.08.11 07:08:41 + Script Purpose : + : +--]] + +function cast(Caster, Target) + -- code to cast the spell + Say(Caster, "Whoops! Guess this is not implemented yet!") + +-- Info from spell_display_effects (remove from script when done) + +end + +function tick(Caster, Target) + -- code to process each call_frequency (tick) set in spell_tiers +end + +function remove(Caster, Target) + -- code to remove the spell +end + diff --git a/server/Spells/Priest/Shaman/Mystic/MinorRitual.lua b/server/Spells/Priest/Shaman/Mystic/MinorRitual.lua new file mode 100644 index 000000000..34e914eb0 --- /dev/null +++ b/server/Spells/Priest/Shaman/Mystic/MinorRitual.lua @@ -0,0 +1,47 @@ +--[[ + Script Name : Heal / Buff (Spell Type) + Script Purpose : Generic script for Heal / Buff spells + Script Author : John Adams + Script Date : 2008.12.04 +--]] + +function cast(Caster, Target, HealType, HealMinVal, HealMaxVal, BuffType, BuffMinVal, BuffMaxVal) + + -- Heal component + if HealMinVal < HealMaxVal then + ModifyHP(Caster, math.random(HealMinVal, HealMaxVal)) + else + ModifyHP(Caster, HealMinVal) + end + + -- Buff component + if BuffType ~= nil then + + if BuffType == "Health" then + + --SetMaxHP(Caster, GetMaxHP(Target) + BuffMinVal) + AddSpellBonus(Target, 500, BuffMinVal) + + end + + -- do other buff types here + + end + +end + +function tick(Caster, Target, HealType, HealMinVal, HealMaxVal, BuffType, BuffMinVal, BuffMaxVal) + + if BuffType == "Health" then + + SetMaxHP(Caster, GetMaxHP(Target) + BuffMinVal) + + end + + -- do other buff types here + +end + +function remove(Caster, Target, HealType, HealMinVal, HealMaxVal, BuffType, BuffMinVal, BuffMaxVal) + RemoveSpellBonus(Target) +end \ No newline at end of file diff --git a/server/Spells/Priest/Shaman/Mystic/Oberon.lua b/server/Spells/Priest/Shaman/Mystic/Oberon.lua new file mode 100644 index 000000000..085fc46c1 --- /dev/null +++ b/server/Spells/Priest/Shaman/Mystic/Oberon.lua @@ -0,0 +1,24 @@ +--[[ + Script Name : Spells/Priest/Shaman/Mystic/Oberon.lua + Script Author : John Adams + Script Date : 2013.08.11 07:08:13 + Script Purpose : + : +--]] + +function cast(Caster, Target) + -- code to cast the spell + Say(Caster, "Whoops! Guess this is not implemented yet!") + +-- Info from spell_display_effects (remove from script when done) + +end + +function tick(Caster, Target) + -- code to process each call_frequency (tick) set in spell_tiers +end + +function remove(Caster, Target) + -- code to remove the spell +end + diff --git a/server/Spells/Priest/Shaman/Mystic/PathoftheGrey.lua b/server/Spells/Priest/Shaman/Mystic/PathoftheGrey.lua new file mode 100644 index 000000000..c3f1b06f2 --- /dev/null +++ b/server/Spells/Priest/Shaman/Mystic/PathoftheGrey.lua @@ -0,0 +1,39 @@ +--[[ + Script Name : Spells/Priest/Shaman/Mystic/PathoftheGrey.lua + Script Author : John Adams + Script Date : 2013.08.11 07:08:28 + Script Purpose : + : +--]] + +function cast(Caster, Target) + -- code to cast the spell + Say(Caster, "Whoops! Guess this is not implemented yet!") + +-- Info from spell_display_effects (remove from script when done) +-- Resurrects target with 15% health and power +-- Applies Heal on termination. +-- Heals target for 16.6% of max health +-- Applies Revived Sickness on termination. Lasts for 2 minutes. +-- Decreases Toughness of target by 75.0 +-- Decreases Lethality of target by 75.0 +-- Decreases All Attributes of target by 20.0% +-- If not between levels 1 - 6 +-- Decreases Attack Speed of target by 20.0 +-- If not between levels 1 - 6 +-- Decreases Attack Speed of target by 5.0 +-- If between levels 1 - 6 +-- Decreases All Attributes of target by 5.0% +-- If between levels 1 - 6 +-- If outside an arena + +end + +function tick(Caster, Target) + -- code to process each call_frequency (tick) set in spell_tiers +end + +function remove(Caster, Target) + -- code to remove the spell +end + diff --git a/server/Spells/Priest/Shaman/Mystic/Plague.lua b/server/Spells/Priest/Shaman/Mystic/Plague.lua new file mode 100644 index 000000000..9a9eb7294 --- /dev/null +++ b/server/Spells/Priest/Shaman/Mystic/Plague.lua @@ -0,0 +1,30 @@ +--[[ + Script Name : Spells/Priest/Shaman/Mystic/Plague.lua + Script Author : Jabantiz + Script Date : 2013.12.13 05:12:07 + Script Purpose : + : +--]] + +function cast(Caster, Target, DoTType, MinVal) + -- Inflicts 6 disease damage on target instantly and every 4 seconds + SpellDamage(Target, DoTType, MinVal) + + -- Inflicts 6 disease damage on target instantly and every 4 seconds + -- If target is shadowed folk + -- Inflicts 6 disease damage on target instantly and every 4 seconds + -- If target is nightblood + Say(Caster, "Not Implemented: Bonus damage to nightbloods and shadowed folk") + +end + +function tick(Caster, Target, DoTType, MinVal) + -- Inflicts 6 disease damage on target instantly and every 4 seconds + SpellDamage(Target, DoTType, MinVal) + + -- Inflicts 6 disease damage on target instantly and every 4 seconds + -- If target is shadowed folk + -- Inflicts 6 disease damage on target instantly and every 4 seconds + -- If target is nightblood + +end diff --git a/server/Spells/Priest/Shaman/Mystic/Premonition.lua b/server/Spells/Priest/Shaman/Mystic/Premonition.lua new file mode 100644 index 000000000..1ddc79261 --- /dev/null +++ b/server/Spells/Priest/Shaman/Mystic/Premonition.lua @@ -0,0 +1,19 @@ +--[[ + Script Name : Spells/Priest/Shaman/Mystic/Premonition.lua + Script Author : Jabantiz + Script Date : 2013.12.13 06:12:01 + Script Purpose : + : +--]] + +function cast(Caster, Target, BonusSta, BonusPower) + -- Increases STA of target by 1.9 + AddSpellBonus(Target, 1, BonusSta) + + -- Increases Max Power of target by 21.9 + AddSpellBonus(Target, 501, BonusPower) +end + +function remove(Caster, Target) + RemoveSpellBonus(Target) +end diff --git a/server/Spells/Priest/Shaman/Mystic/PropheticWard.lua b/server/Spells/Priest/Shaman/Mystic/PropheticWard.lua new file mode 100644 index 000000000..9ebfc7878 --- /dev/null +++ b/server/Spells/Priest/Shaman/Mystic/PropheticWard.lua @@ -0,0 +1,11 @@ +--[[ + Script Name : Spells/Priest/Shaman/Mystic/PropheticWard.lua + Script Author : neatz09 + Script Date : 2019.10.11 09:10:43 + Script Purpose : + : +--]] + +-- Info from spell_display_effects (remove from script when done) +-- Wards group members (AE) against 13 points of noxious damage +-- Increases Mitigation of group members (AE) vs noxious damage by 261 diff --git a/server/Spells/Priest/Shaman/Mystic/RecalloftheGrey.lua b/server/Spells/Priest/Shaman/Mystic/RecalloftheGrey.lua new file mode 100644 index 000000000..915cac52c --- /dev/null +++ b/server/Spells/Priest/Shaman/Mystic/RecalloftheGrey.lua @@ -0,0 +1,40 @@ +--[[ + Script Name : Spells/Priest/Shaman/Mystic/RecalloftheGrey.lua + Script Author : John Adams + Script Date : 2013.08.11 07:08:13 + Script Purpose : + : +--]] + +function cast(Caster, Target) + -- code to cast the spell + Say(Caster, "Whoops! Guess this is not implemented yet!") + +-- Info from spell_display_effects (remove from script when done) +-- Resurrects target with 15% health and power +-- Applies Grey Ward on termination. Lasts for 30.0 seconds. +-- Heals target for 16.6% of max health +-- Wards target against 651 points of all damage +-- Applies Revived Sickness on termination. Lasts for 2 minutes. +-- Decreases Toughness of target by 145.0 +-- Decreases Lethality of target by 145.0 +-- Decreases All Attributes of target by 20.0% +-- If not between levels 1 - 6 +-- Decreases Attack Speed of target by 20.0 +-- If not between levels 1 - 6 +-- Decreases Attack Speed of target by 5.0 +-- If between levels 1 - 6 +-- Decreases All Attributes of target by 5.0% +-- If between levels 1 - 6 +-- If outside an arena + +end + +function tick(Caster, Target) + -- code to process each call_frequency (tick) set in spell_tiers +end + +function remove(Caster, Target) + -- code to remove the spell +end + diff --git a/server/Spells/Priest/Shaman/Mystic/Rejuvenation.lua b/server/Spells/Priest/Shaman/Mystic/Rejuvenation.lua new file mode 100644 index 000000000..ce83a5a89 --- /dev/null +++ b/server/Spells/Priest/Shaman/Mystic/Rejuvenation.lua @@ -0,0 +1,29 @@ +--[[ + Script Name : Spells/Priest/Shaman/Mystic/Rejuvenation.lua + Script Author : John Adams + Script Date : 2013.11.19 08:11:16 + Script Purpose : + : +--]] + +function cast(Caster, Target, BuffAmt, MinHealAmt, MaxHealAmt) + + -- Buff component (health) + AddSpellBonus(Target, 606, BuffAmt) + + -- Heal component + if MaxHeal ~= nil and MinHeal < MaxHeal then + healAmount = math.random(MinHeal, MaxHeal) + ModifyHP(Target, healAmount) + else + ModifyHP(Target, MinHealAmt) + end + +end + +function remove(Caster, Target, BuffAmt, MinHealAmt, MaxHealAmt) + + -- Remove buff (health) + RemoveSpellBonus(Target) + +end diff --git a/server/Spells/Priest/Shaman/Mystic/RejuvenationX.lua b/server/Spells/Priest/Shaman/Mystic/RejuvenationX.lua new file mode 100644 index 000000000..ce83a5a89 --- /dev/null +++ b/server/Spells/Priest/Shaman/Mystic/RejuvenationX.lua @@ -0,0 +1,29 @@ +--[[ + Script Name : Spells/Priest/Shaman/Mystic/Rejuvenation.lua + Script Author : John Adams + Script Date : 2013.11.19 08:11:16 + Script Purpose : + : +--]] + +function cast(Caster, Target, BuffAmt, MinHealAmt, MaxHealAmt) + + -- Buff component (health) + AddSpellBonus(Target, 606, BuffAmt) + + -- Heal component + if MaxHeal ~= nil and MinHeal < MaxHeal then + healAmount = math.random(MinHeal, MaxHeal) + ModifyHP(Target, healAmount) + else + ModifyHP(Target, MinHealAmt) + end + +end + +function remove(Caster, Target, BuffAmt, MinHealAmt, MaxHealAmt) + + -- Remove buff (health) + RemoveSpellBonus(Target) + +end diff --git a/server/Spells/Priest/Shaman/Mystic/RitualHealing.lua b/server/Spells/Priest/Shaman/Mystic/RitualHealing.lua new file mode 100644 index 000000000..c03020d6b --- /dev/null +++ b/server/Spells/Priest/Shaman/Mystic/RitualHealing.lua @@ -0,0 +1,23 @@ +--[[ + Script Name : Spells/Priest/Shaman/Mystic/RitualHealing.lua + Script Author : Jabantiz + Script Date : 2013.12.13 05:12:24 + Script Purpose : + : +--]] + +function cast(Caster, Target, MinVal, MaxVal, BonusAmt) + -- Heals target for 40 - 49 + if MaxVal ~= nil and MinVal < MaxVal then + SpellHeal("Heal", math.random(MinVal, MaxVal)) + else + SpellHeal("Heal", MinVal) + end + + -- Increases Max Health of target by 6.3 + AddSpellBonus(Target, 500, BonusAmt) +end + +function remove(Caster, Target) + RemoveSpellBonus(Target) +end diff --git a/server/Spells/Priest/Shaman/Mystic/RunicArmor.lua b/server/Spells/Priest/Shaman/Mystic/RunicArmor.lua new file mode 100644 index 000000000..b062f01ff --- /dev/null +++ b/server/Spells/Priest/Shaman/Mystic/RunicArmor.lua @@ -0,0 +1,34 @@ +--[[ + Script Name : Spells/Priest/Shaman/Mystic/RunicArmor.lua + Script Author : Jabantiz + Script Date : 2013.12.13 06:12:49 + Script Purpose : + : +--]] + +-- Info from spell_display_effects (remove from script when done) +-- VIII and above missing max health portion of script - Neatz09 + + +function cast(Caster, Target, WardValue, MitValue) + -- Wards group members (AE) against 4 points of physical damage + AddWard(WardValue) + + -- Increases Mitigation of group members (AE) vs physical damage by 93 + -- If not fighter + local group = GetGroup(Caster) + if group ~= nil then + for key, value in pairs(group) do + if value and GetArchetypeName(value) ~= "fighter" then + -- AddSpellBonus(value, 204, MitValue) + -- AddSpellBonus(value, 205, MitValue) + -- AddSpellBonus(value, 206, MitValue) + end + end + end +end + +function remove(Caster, Target) + RemoveWard() + RemoveSpellBonus(Target) +end diff --git a/server/Spells/Priest/Shaman/Mystic/SlothfulSpirit.lua b/server/Spells/Priest/Shaman/Mystic/SlothfulSpirit.lua new file mode 100644 index 000000000..ad456f32f --- /dev/null +++ b/server/Spells/Priest/Shaman/Mystic/SlothfulSpirit.lua @@ -0,0 +1,28 @@ +--[[ + Script Name : Spells/Priest/Shaman/Mystic/SlothfulSpirit.lua + Script Author : John Adams + Script Date : 2013.08.11 07:08:41 + Script Purpose : + : +--]] + +function cast(Caster, Target) + -- code to cast the spell + Say(Caster, "Whoops! Guess this is not implemented yet!") + +-- Info from spell_display_effects (remove from script when done) +-- On a spell cast this spell will cast Sloth's Habitat on target. +-- Inflicts 240 - 293 divine damage on target +-- Grants a total of 3 triggers of the spell. +-- Target will lose 44% more power when power is consumed + +end + +function tick(Caster, Target) + -- code to process each call_frequency (tick) set in spell_tiers +end + +function remove(Caster, Target) + -- code to remove the spell +end + diff --git a/server/Spells/Priest/Shaman/Mystic/SpiritTap.lua b/server/Spells/Priest/Shaman/Mystic/SpiritTap.lua new file mode 100644 index 000000000..d31855e9a --- /dev/null +++ b/server/Spells/Priest/Shaman/Mystic/SpiritTap.lua @@ -0,0 +1,25 @@ +--[[ + Script Name : Spells/Priest/Shaman/Mystic/SpiritTap.lua + Script Author : John Adams + Script Date : 2013.08.11 07:08:03 + Script Purpose : + : +--]] + +function cast(Caster, Target) + -- code to cast the spell + Say(Caster, "Whoops! Guess this is not implemented yet!") + +-- Info from spell_display_effects (remove from script when done) +-- When a group member inflicts damage, that damage is converted into a heal and power restore for the Mystic's group. If the caster enters PVP combat, the duration of this effect will be reduced. + +end + +function tick(Caster, Target) + -- code to process each call_frequency (tick) set in spell_tiers +end + +function remove(Caster, Target) + -- code to remove the spell +end + diff --git a/server/Spells/Priest/Shaman/Mystic/SpiritoftheMammoth.lua b/server/Spells/Priest/Shaman/Mystic/SpiritoftheMammoth.lua new file mode 100644 index 000000000..9b8fff93b --- /dev/null +++ b/server/Spells/Priest/Shaman/Mystic/SpiritoftheMammoth.lua @@ -0,0 +1,17 @@ +--[[ + Script Name : Spells/Priest/Shaman/Mystic/SpiritoftheMammoth.lua + Script Author : Jabantiz + Script Date : 2013.12.13 08:12:47 + Script Purpose : + : +--]] + +function cast(Caster, Target, BonusAmt) + -- Increases STA and STR of group members (AE) by 13.1 + AddSpellBonus(Target, 0, BonusAmt) + AddSpellBonus(Target, 1, BonusAmt) +end + +function remove(Caster, Target) + RemoveSpellBonus(Target) +end diff --git a/server/Spells/Priest/Shaman/Mystic/Spirits.lua b/server/Spells/Priest/Shaman/Mystic/Spirits.lua new file mode 100644 index 000000000..06d595ad4 --- /dev/null +++ b/server/Spells/Priest/Shaman/Mystic/Spirits.lua @@ -0,0 +1,24 @@ +--[[ + Script Name : Spells/Priest/Shaman/Mystic/Spirits.lua + Script Author : Jabantiz + Script Date : 2013.12.13 07:12:26 + Script Purpose : + : +--]] + +function cast(Caster, Target, Hate) + -- Mesmerizes targets in Area of Effect + -- If Target is not Epic + if not IsEpic(Target) then + AddControlEffect(Target, 1) + end + + -- Decreases Threat to targets in Area of Effect by 323 + AddHate(Target, Hate) + + -- Decreases threat priority of targets in Area of Effect by 1 position +end + +function remove(Caster, Target) + RemoveControlEffect(Target, 1) +end diff --git a/server/Spells/Priest/Shaman/Mystic/SpiritualWarding.lua b/server/Spells/Priest/Shaman/Mystic/SpiritualWarding.lua new file mode 100644 index 000000000..0b8abfe21 --- /dev/null +++ b/server/Spells/Priest/Shaman/Mystic/SpiritualWarding.lua @@ -0,0 +1,29 @@ +--[[ + Script Name : Spells/Priest/Shaman/Mystic/SpiritualWarding.lua + Script Author : John Adams + Script Date : 2013.08.11 07:08:03 + Script Purpose : + : +--]] + +function cast(Caster, Target) + -- code to cast the spell + Say(Caster, "Whoops! Guess this is not implemented yet!") + +-- Info from spell_display_effects (remove from script when done) +-- On a beneficial spell cast this spell has a 12% chance to cast Tribal Rage on the group. Lasts for 12.0 seconds. +-- Group members (AE) will Double Attack on 15% of attacks +-- Cannot be modified except by direct means +-- Increases the power of wards by 30% of the mystic's wisdom +-- Cannot be modified except by direct means + +end + +function tick(Caster, Target) + -- code to process each call_frequency (tick) set in spell_tiers +end + +function remove(Caster, Target) + -- code to remove the spell +end + diff --git a/server/Spells/Priest/Shaman/Mystic/Torpor.lua b/server/Spells/Priest/Shaman/Mystic/Torpor.lua new file mode 100644 index 000000000..9f4e253fc --- /dev/null +++ b/server/Spells/Priest/Shaman/Mystic/Torpor.lua @@ -0,0 +1,28 @@ +--[[ + Script Name : Spells/Priest/Shaman/Mystic/Torpor.lua + Script Author : John Adams + Script Date : 2013.08.11 07:08:22 + Script Purpose : + : +--]] + +function cast(Caster, Target) + -- code to cast the spell + Say(Caster, "Whoops! Guess this is not implemented yet!") + +-- Info from spell_display_effects (remove from script when done) +-- Wards target against 369 points of all damage +-- Decreases Attack Speed of target by 25.0 +-- Slows target by 50.0% +-- Heals target for 111 - 136 every 2 seconds + +end + +function tick(Caster, Target) + -- code to process each call_frequency (tick) set in spell_tiers +end + +function remove(Caster, Target) + -- code to remove the spell +end + diff --git a/server/Spells/Priest/Shaman/Mystic/Transcendence.lua b/server/Spells/Priest/Shaman/Mystic/Transcendence.lua new file mode 100644 index 000000000..42741f026 --- /dev/null +++ b/server/Spells/Priest/Shaman/Mystic/Transcendence.lua @@ -0,0 +1,24 @@ +--[[ + Script Name : Spells/Priest/Shaman/Mystic/Transcendence.lua + Script Author : Jabantiz + Script Date : 2013.12.13 07:12:36 + Script Purpose : + : +--]] + +function cast(Caster, Target, MinVal, MaxVal, BonusAmt) + -- Heals group members (AE) for 125 - 153 + if MaxVal ~= nil and MinVal < MaxVal then + ModifyHP(Target, math.random(MinVal, MaxVal)) + else + ModifyHP(Target, MinVal) + end + + -- Increases Max Health of group members (AE) by 15.8 + AddSpellBonus(Target, 500, BonusAmt) +end + + +function remove(Caster, Target) + RemoveSpellBonus(Target) +end diff --git a/server/Spells/Priest/Shaman/Mystic/UmbralWarding.lua b/server/Spells/Priest/Shaman/Mystic/UmbralWarding.lua new file mode 100644 index 000000000..e227a6389 --- /dev/null +++ b/server/Spells/Priest/Shaman/Mystic/UmbralWarding.lua @@ -0,0 +1,16 @@ +--[[ + Script Name : Spells/Priest/Shaman/Mystic/UmbralWarding.lua + Script Author : Jabantiz + Script Date : 2013.12.13 08:12:35 + Script Purpose : + : +--]] + +function cast(Caster, Target, WardAmt) + -- Wards group members (AE) collectively against 327 total points of all damage + AddWard(Target, WardAmt) +end + +function remove(Caster, Target) + RemoveWard() +end \ No newline at end of file diff --git a/server/Spells/Priest/Shaman/Mystic/UrsineAvatar.lua b/server/Spells/Priest/Shaman/Mystic/UrsineAvatar.lua new file mode 100644 index 000000000..a3a4c9da2 --- /dev/null +++ b/server/Spells/Priest/Shaman/Mystic/UrsineAvatar.lua @@ -0,0 +1,30 @@ +--[[ + Script Name : Spells/Priest/Shaman/Mystic/UrsineAvatar.lua + Script Author : Jabantiz + Script Date : 2013.12.13 08:12:12 + Script Purpose : + : +--]] + +function cast(Caster, Target, StaAmt, WisAmt, MitAmt) + -- Shapechanges caster into a bear + Say(Caster, "Not Implemented: shape change and see stealth") + + -- Increases STA of caster by 7.7 + AddSpellBonus(Target, 1, StaAmt) + + -- Increases WIS of caster by 28.8 + AddSpellBonus(Target, 3, WisAmt) + + -- Grants See Stealth to caster + + -- Increases Mitigation of caster vs elemental, noxious and arcane damage by 428 + AddSpellBonus(Target, 201, MitAmt) + AddSpellBonus(Target, 202, MitAmt) + AddSpellBonus(Target, 203, MitAmt) + +end + +function remove(Caster, Target) + RemoveSpellBonus(Target) +end diff --git a/server/Spells/Priest/Shaman/Mystic/VeliumWinds.lua b/server/Spells/Priest/Shaman/Mystic/VeliumWinds.lua new file mode 100644 index 000000000..49c2a9b00 --- /dev/null +++ b/server/Spells/Priest/Shaman/Mystic/VeliumWinds.lua @@ -0,0 +1,20 @@ +--[[ + Script Name : Spells/Priest/Shaman/Mystic/VeliumWinds.lua + Script Author : John Adams + Script Date : 2013.11.19 09:11:17 + Script Purpose : + : +--]] + +function cast(Caster, Target, DmgType, MinDmgVal, MaxDmgVal, SpellID) + -- Missing Slows Target Component + -- Damage component + if MaxDmg ~= nil and MinDmg < MaxDmg then + dmgAmount = math.random(MinDmg, MaxDmg) + SpellDamage(Target, DmgType, dmgAmount) + end + + -- Applies Touch of the Grey. Lasts for 10.0 seconds. + CastSpell(Target, 3000, 1, Caster) + +end diff --git a/server/Spells/Priest/Shaman/Mystic/WardsoftheEidolon.lua b/server/Spells/Priest/Shaman/Mystic/WardsoftheEidolon.lua new file mode 100644 index 000000000..2cf4eee2e --- /dev/null +++ b/server/Spells/Priest/Shaman/Mystic/WardsoftheEidolon.lua @@ -0,0 +1,25 @@ +--[[ + Script Name : Spells/Priest/Shaman/Mystic/WardsoftheEidolon.lua + Script Author : John Adams + Script Date : 2013.08.11 07:08:02 + Script Purpose : + : +--]] + +function cast(Caster, Target) + -- code to cast the spell + Say(Caster, "Whoops! Guess this is not implemented yet!") + +-- Info from spell_display_effects (remove from script when done) +-- Wards group members (AE) collectively against 1528 total points of all damage + +end + +function tick(Caster, Target) + -- code to process each call_frequency (tick) set in spell_tiers +end + +function remove(Caster, Target) + -- code to remove the spell +end + diff --git a/server/Spells/Priest/Shaman/Mystic/WaterSpirit.lua b/server/Spells/Priest/Shaman/Mystic/WaterSpirit.lua new file mode 100644 index 000000000..f7a8add7e --- /dev/null +++ b/server/Spells/Priest/Shaman/Mystic/WaterSpirit.lua @@ -0,0 +1,12 @@ +--[[ + Script Name : Spells/Priest/Shaman/Mystic/WaterSpirit.lua + Script Author : neatz09 + Script Date : 2019.09.28 11:09:34 + Script Purpose : + : +--]] + +-- Info from spell_display_effects (remove from script when done) +-- Allows group members (AE) to breathe under water +-- Allows group members (AE) to walk under water +-- Allows group members (AE) to jump under water diff --git a/server/Spells/Priest/Shaman/Mystic/WrathoftheAncients.lua b/server/Spells/Priest/Shaman/Mystic/WrathoftheAncients.lua new file mode 100644 index 000000000..5654aa2f6 --- /dev/null +++ b/server/Spells/Priest/Shaman/Mystic/WrathoftheAncients.lua @@ -0,0 +1,18 @@ +--[[ + Script Name : Spells/Priest/Shaman/Mystic/WrathoftheAncients.lua + Script Author : neatz09 + Script Date : 2019.09.27 10:09:01 + Script Purpose : + : +--]] + +-- Inflicts 130 - 159 disease damage on target encounter + +function cast(Caster, Target, DmgType, MinVal, MaxVal) + if MaxVal ~= nil and MinVal < MaxVal then + SpellDamage(Target, DmgType, math.random(MinVal, MaxVal)) + else + SpellDamage(Target, DmgType, MinVal) + end +end + diff --git a/server/Spells/Priest/Shaman/SpiritGuide.lua b/server/Spells/Priest/Shaman/SpiritGuide.lua new file mode 100644 index 000000000..8f1fb1340 --- /dev/null +++ b/server/Spells/Priest/Shaman/SpiritGuide.lua @@ -0,0 +1,26 @@ +--[[ + Script Name : Spells/Priest/Shaman/SpiritGuide.lua + Script Author : John Adams + Script Date : 2013.08.11 07:08:20 + Script Purpose : + : +--]] + +function cast(Caster, Target) + -- code to cast the spell + Say(Caster, "Whoops! Guess this is not implemented yet!") + +-- Info from spell_display_effects (remove from script when done) +-- Summon 1 Spirit Guide +-- This effect cannot be cast during combat + +end + +function tick(Caster, Target) + -- code to process each call_frequency (tick) set in spell_tiers +end + +function remove(Caster, Target) + -- code to remove the spell +end + diff --git a/server/Spells/Priest/Shaman/UmbralTrap.lua b/server/Spells/Priest/Shaman/UmbralTrap.lua new file mode 100644 index 000000000..45d6659d8 --- /dev/null +++ b/server/Spells/Priest/Shaman/UmbralTrap.lua @@ -0,0 +1,25 @@ +--[[ + Script Name : Spells/Priest/Shaman/UmbralTrap.lua + Script Author : John Adams + Script Date : 2013.08.11 07:08:23 + Script Purpose : + : +--]] + +function cast(Caster, Target) + -- code to cast the spell + Say(Caster, "Whoops! Guess this is not implemented yet!") + +-- Info from spell_display_effects (remove from script when done) +-- Decreases Damage Per Second of target encounter by 10.6 + +end + +function tick(Caster, Target) + -- code to process each call_frequency (tick) set in spell_tiers +end + +function remove(Caster, Target) + -- code to remove the spell +end + diff --git a/server/Spells/Priest/Shaper/Channeler/ShadowBind.lua b/server/Spells/Priest/Shaper/Channeler/ShadowBind.lua new file mode 100644 index 000000000..26ff6accd --- /dev/null +++ b/server/Spells/Priest/Shaper/Channeler/ShadowBind.lua @@ -0,0 +1,11 @@ +--[[ + Script Name : Spells/Priest/Shaper/Channeler/ShadowBind.lua + Script Author : Dello0000 + Script Date : 2014.06.13 01:06:39 + Script Purpose : + : +--]] + +-- Info from spell_display_effects (remove from script when done) +-- Slows targets in Area of Effect by 30.1% +-- Interrupts targets in Area of Effect diff --git a/server/Spells/Priest/Shaper/Channeler/VengefulArrow.lua b/server/Spells/Priest/Shaper/Channeler/VengefulArrow.lua new file mode 100644 index 000000000..3c0c9d35f --- /dev/null +++ b/server/Spells/Priest/Shaper/Channeler/VengefulArrow.lua @@ -0,0 +1,21 @@ +--[[ + Script Name : Spells/Priest/Shaper/Channeler/VengefulArrow.lua + Script Author : John Adams + Script Date : 2013.11.21 09:11:31 + Script Purpose : + : +--]] + +function precast(Caster, Target) + -- Requires bow + return true +end + +function cast(Caster, Target, DmgType, MinVal, MaxVal) + -- Inflicts 7 - 12 ranged damage on target + if MaxVal ~= nil and MinVal < MaxVal then + SpellDamage(Target, DmgType, math.random(MinVal, MaxVal)) + else + SpellDamage(Target, DmgType, MinVal) + end +end diff --git a/server/Spells/Priest/SummonFoodandWater.lua b/server/Spells/Priest/SummonFoodandWater.lua new file mode 100644 index 000000000..3c40f93e2 --- /dev/null +++ b/server/Spells/Priest/SummonFoodandWater.lua @@ -0,0 +1,22 @@ +--[[ + Script Name : Summon Food and Water + Script Purpose : Summons 5 Sacred Food and 5 Sacred Water to the target + Script Author : Zcoretri + Script Date : 2009.01.10 + Script Notes : JA: Going to ask LE for an "Array" spell_data type for passing multiple item IDs +--]] + +function cast(Caster, Target, SummonType, MinQty, MaxQty, Item1, Item2) + + if SummonType == "FoodWater" then + + if FoodID ~= nil and WaterID ~= nil then + SummonItem(Target, FoodID) + SummonItem(Target, WaterID) + -- SummonItem(Target, FoodID, MinQty) + end + + else + end + +end diff --git a/server/Spells/Priest/Wrath.lua b/server/Spells/Priest/Wrath.lua new file mode 100644 index 000000000..fa8ddb032 --- /dev/null +++ b/server/Spells/Priest/Wrath.lua @@ -0,0 +1,18 @@ +--[[ + Script Name : Wrath.lua + Script Purpose : Priest Generic Direct Damage + Script Author : Zcoretri + Script Date : 15.March.2011 + Script Notes : +--]] + +function cast(Caster, Target, DmgType, MinDmg, MaxDmg) + -- Instant Damage + dmgAmount = math.random(MinDmg, MaxDmg) + if MaxDmg ~= nil and MinDmg < MaxDmg then + SpellDamage(Target, DmgType, dmgAmount) + else + SpellDamage(Target, DmgType, MinDmg) + end +end + diff --git a/server/Spells/Scout/Ambush.lua b/server/Spells/Scout/Ambush.lua new file mode 100644 index 000000000..72249c22e --- /dev/null +++ b/server/Spells/Scout/Ambush.lua @@ -0,0 +1,26 @@ +--[[ + Script Name : Spells/Scout/Ambush.lua + Script Author : John Adams + Script Date : 2013.08.11 02:08:52 + Script Purpose : + : +--]] + +function cast(Caster, Target) + -- code to cast the spell + Say(Caster, "Whoops! Guess this is not implemented yet!") + +-- Info from spell_display_effects (remove from script when done) +-- Inflicts 19 - 32 melee damage on target +-- You must be sneaking to use this ability. + +end + +function tick(Caster, Target) + -- code to process each call_frequency (tick) set in spell_tiers +end + +function remove(Caster, Target) + -- code to remove the spell +end + diff --git a/server/Spells/Scout/Animist/Beastlord/AstralRavaging.lua b/server/Spells/Scout/Animist/Beastlord/AstralRavaging.lua new file mode 100644 index 000000000..24808035d --- /dev/null +++ b/server/Spells/Scout/Animist/Beastlord/AstralRavaging.lua @@ -0,0 +1,28 @@ +--[[ + Script Name : Spells/Scout/Animist/Beastlord/AstralRavaging.lua + Script Author : John Adams + Script Date : 2013.08.12 08:08:09 + Script Purpose : + : +--]] + +function cast(Caster, Target) + -- code to cast the spell + Say(Caster, "Whoops! Guess this is not implemented yet!") + +-- Info from spell_display_effects (remove from script when done) +-- Inflicts 89 - 149 melee damage on target encounter +-- Increases savagery of caster by 20.0 +-- This effect cannot be critically applied. +-- Heals group members (AE) for 3 - 4 + +end + +function tick(Caster, Target) + -- code to process each call_frequency (tick) set in spell_tiers +end + +function remove(Caster, Target) + -- code to remove the spell +end + diff --git a/server/Spells/Scout/Animist/Beastlord/AstralSoulsiphon.lua b/server/Spells/Scout/Animist/Beastlord/AstralSoulsiphon.lua new file mode 100644 index 000000000..7ea670840 --- /dev/null +++ b/server/Spells/Scout/Animist/Beastlord/AstralSoulsiphon.lua @@ -0,0 +1,29 @@ +--[[ + Script Name : Spells/Scout/Animist/Beastlord/AstralSoulsiphon.lua + Script Author : John Adams + Script Date : 2013.08.12 08:08:10 + Script Purpose : + : +--]] + +function cast(Caster, Target) + -- code to cast the spell + Say(Caster, "Whoops! Guess this is not implemented yet!") + +-- Info from spell_display_effects (remove from script when done) +-- The effect of this ability grows based on Spirituality level. +-- Increases power of group members (AE) by 6 - 10 +-- Inflicts 430 - 717 melee damage on target encounter +-- You must have Tame Exotic Warder to use this Primal. +-- You must have your warder active to use this ability. + +end + +function tick(Caster, Target) + -- code to process each call_frequency (tick) set in spell_tiers +end + +function remove(Caster, Target) + -- code to remove the spell +end + diff --git a/server/Spells/Scout/Animist/Beastlord/Beastsoul.lua b/server/Spells/Scout/Animist/Beastlord/Beastsoul.lua new file mode 100644 index 000000000..4a1beb34b --- /dev/null +++ b/server/Spells/Scout/Animist/Beastlord/Beastsoul.lua @@ -0,0 +1,29 @@ +--[[ + Script Name : Spells/Scout/Animist/Beastlord/Beastsoul.lua + Script Author : John Adams + Script Date : 2013.08.12 08:08:40 + Script Purpose : + : +--]] + +function cast(Caster, Target) + -- code to cast the spell + Say(Caster, "Whoops! Guess this is not implemented yet!") + +-- Info from spell_display_effects (remove from script when done) +-- Inflicts 221 - 368 melee damage on target encounter +-- Increases savagery of caster by 20.0 +-- This effect cannot be critically applied. +-- Increases Attack Speed of group members (AE) by 25.0 +-- Increases Damage Per Second of group members (AE) by 25.0 + +end + +function tick(Caster, Target) + -- code to process each call_frequency (tick) set in spell_tiers +end + +function remove(Caster, Target) + -- code to remove the spell +end + diff --git a/server/Spells/Scout/Animist/Beastlord/BestialVehemence.lua b/server/Spells/Scout/Animist/Beastlord/BestialVehemence.lua new file mode 100644 index 000000000..ab6a06e2c --- /dev/null +++ b/server/Spells/Scout/Animist/Beastlord/BestialVehemence.lua @@ -0,0 +1,28 @@ +--[[ + Script Name : Spells/Scout/Animist/Beastlord/BestialVehemence.lua + Script Author : John Adams + Script Date : 2013.08.12 08:08:27 + Script Purpose : + : +--]] + +function cast(Caster, Target) + -- code to cast the spell + Say(Caster, "Whoops! Guess this is not implemented yet!") + +-- Info from spell_display_effects (remove from script when done) +-- Inflicts 95 - 158 melee damage on target encounter +-- Increases savagery of caster by 20.0 +-- This effect cannot be critically applied. +-- Increases Potency of group members (AE) by 15.0% + +end + +function tick(Caster, Target) + -- code to process each call_frequency (tick) set in spell_tiers +end + +function remove(Caster, Target) + -- code to remove the spell +end + diff --git a/server/Spells/Scout/Animist/Beastlord/BrutalBeatdown.lua b/server/Spells/Scout/Animist/Beastlord/BrutalBeatdown.lua new file mode 100644 index 000000000..6ed700517 --- /dev/null +++ b/server/Spells/Scout/Animist/Beastlord/BrutalBeatdown.lua @@ -0,0 +1,28 @@ +--[[ + Script Name : Spells/Scout/Animist/Beastlord/BrutalBeatdown.lua + Script Author : John Adams + Script Date : 2013.08.12 08:08:10 + Script Purpose : + : +--]] + +function cast(Caster, Target) + -- code to cast the spell + Say(Caster, "Whoops! Guess this is not implemented yet!") + +-- Info from spell_display_effects (remove from script when done) +-- Inflicts 1355 - 2258 crushing damage on target +-- The effect of this ability grows based on Feral Rampage level. +-- You must have Tame Exotic Warder to use this Primal. +-- You must have your warder active to use this ability. + +end + +function tick(Caster, Target) + -- code to process each call_frequency (tick) set in spell_tiers +end + +function remove(Caster, Target) + -- code to remove the spell +end + diff --git a/server/Spells/Scout/Animist/Beastlord/CallWarder.lua b/server/Spells/Scout/Animist/Beastlord/CallWarder.lua new file mode 100644 index 000000000..312dbacf8 --- /dev/null +++ b/server/Spells/Scout/Animist/Beastlord/CallWarder.lua @@ -0,0 +1,25 @@ +--[[ + Script Name : Spells/Scout/Animist/Beastlord/CallWarder.lua + Script Author : John Adams + Script Date : 2013.08.12 08:08:20 + Script Purpose : + : +--]] + +function cast(Caster, Target) + -- code to cast the spell + Say(Caster, "Whoops! Guess this is not implemented yet!") + +-- Info from spell_display_effects (remove from script when done) +-- Teleports target to caster + +end + +function tick(Caster, Target) + -- code to process each call_frequency (tick) set in spell_tiers +end + +function remove(Caster, Target) + -- code to remove the spell +end + diff --git a/server/Spells/Scout/Animist/Beastlord/CallousFerocity.lua b/server/Spells/Scout/Animist/Beastlord/CallousFerocity.lua new file mode 100644 index 000000000..2ffdce4fb --- /dev/null +++ b/server/Spells/Scout/Animist/Beastlord/CallousFerocity.lua @@ -0,0 +1,27 @@ +--[[ + Script Name : Spells/Scout/Animist/Beastlord/CallousFerocity.lua + Script Author : John Adams + Script Date : 2013.08.12 08:08:43 + Script Purpose : + : +--]] + +function cast(Caster, Target) + -- code to cast the spell + Say(Caster, "Whoops! Guess this is not implemented yet!") + +-- Info from spell_display_effects (remove from script when done) +-- Increases savagery of caster by 20.0 +-- This effect cannot be critically applied. +-- Caster has a 10.0% chance of having one of their weapons' autoattack strike the target multiple times. + +end + +function tick(Caster, Target) + -- code to process each call_frequency (tick) set in spell_tiers +end + +function remove(Caster, Target) + -- code to remove the spell +end + diff --git a/server/Spells/Scout/Animist/Beastlord/Chillbarrier.lua b/server/Spells/Scout/Animist/Beastlord/Chillbarrier.lua new file mode 100644 index 000000000..c5e92ec64 --- /dev/null +++ b/server/Spells/Scout/Animist/Beastlord/Chillbarrier.lua @@ -0,0 +1,27 @@ +--[[ + Script Name : Spells/Scout/Animist/Beastlord/Chillbarrier.lua + Script Author : John Adams + Script Date : 2013.08.12 08:08:11 + Script Purpose : + : +--]] + +function cast(Caster, Target) + -- code to cast the spell + Say(Caster, "Whoops! Guess this is not implemented yet!") + +-- Info from spell_display_effects (remove from script when done) +-- The effect of this ability grows based on Savagery and Spirituality level. +-- Wards group members (AE) against 16 points of all damage +-- You must have your warder active to use this ability. + +end + +function tick(Caster, Target) + -- code to process each call_frequency (tick) set in spell_tiers +end + +function remove(Caster, Target) + -- code to remove the spell +end + diff --git a/server/Spells/Scout/Animist/Beastlord/ChillingClaws.lua b/server/Spells/Scout/Animist/Beastlord/ChillingClaws.lua new file mode 100644 index 000000000..e3f376ef3 --- /dev/null +++ b/server/Spells/Scout/Animist/Beastlord/ChillingClaws.lua @@ -0,0 +1,26 @@ +--[[ + Script Name : Spells/Scout/Animist/Beastlord/ChillingClaws.lua + Script Author : John Adams + Script Date : 2013.08.12 08:08:05 + Script Purpose : + : +--]] + +function cast(Caster, Target) + -- code to cast the spell + Say(Caster, "Whoops! Guess this is not implemented yet!") + +-- Info from spell_display_effects (remove from script when done) +-- On any combat or spell hit this spell may cast Chilling Claws on target of attack. Triggers about 2.4 times per minute. +-- Inflicts 81 - 99 cold damage on target + +end + +function tick(Caster, Target) + -- code to process each call_frequency (tick) set in spell_tiers +end + +function remove(Caster, Target) + -- code to remove the spell +end + diff --git a/server/Spells/Scout/Animist/Beastlord/ClawofKhatiSha.lua b/server/Spells/Scout/Animist/Beastlord/ClawofKhatiSha.lua new file mode 100644 index 000000000..b149f01e6 --- /dev/null +++ b/server/Spells/Scout/Animist/Beastlord/ClawofKhatiSha.lua @@ -0,0 +1,27 @@ +--[[ + Script Name : Spells/Scout/Animist/Beastlord/ClawofKhatiSha.lua + Script Author : John Adams + Script Date : 2013.08.12 08:08:44 + Script Purpose : + : +--]] + +function cast(Caster, Target) + -- code to cast the spell + Say(Caster, "Whoops! Guess this is not implemented yet!") + +-- Info from spell_display_effects (remove from script when done) +-- Inflicts 806 - 1343 melee damage on target +-- The effect of this ability grows based on Savagery and Feral Rampage level. +-- You must have your warder active to use this ability. + +end + +function tick(Caster, Target) + -- code to process each call_frequency (tick) set in spell_tiers +end + +function remove(Caster, Target) + -- code to remove the spell +end + diff --git a/server/Spells/Scout/Animist/Beastlord/CourageousScarring.lua b/server/Spells/Scout/Animist/Beastlord/CourageousScarring.lua new file mode 100644 index 000000000..7b0ecb67d --- /dev/null +++ b/server/Spells/Scout/Animist/Beastlord/CourageousScarring.lua @@ -0,0 +1,28 @@ +--[[ + Script Name : Spells/Scout/Animist/Beastlord/CourageousScarring.lua + Script Author : John Adams + Script Date : 2013.08.12 08:08:11 + Script Purpose : + : +--]] + +function cast(Caster, Target) + -- code to cast the spell + Say(Caster, "Whoops! Guess this is not implemented yet!") + +-- Info from spell_display_effects (remove from script when done) +-- Inflicts 448 - 747 melee damage on target encounter +-- Increases Armor Mitigation of group members (AE) by 10-22% +-- The effect of this ability grows based on Savagery and Spirituality level. +-- You must have your warder active to use this ability. + +end + +function tick(Caster, Target) + -- code to process each call_frequency (tick) set in spell_tiers +end + +function remove(Caster, Target) + -- code to remove the spell +end + diff --git a/server/Spells/Scout/Animist/Beastlord/DraconicBreath.lua b/server/Spells/Scout/Animist/Beastlord/DraconicBreath.lua new file mode 100644 index 000000000..3f724d252 --- /dev/null +++ b/server/Spells/Scout/Animist/Beastlord/DraconicBreath.lua @@ -0,0 +1,28 @@ +--[[ + Script Name : Spells/Scout/Animist/Beastlord/DraconicBreath.lua + Script Author : John Adams + Script Date : 2013.08.12 08:08:12 + Script Purpose : + : +--]] + +function cast(Caster, Target) + -- code to cast the spell + Say(Caster, "Whoops! Guess this is not implemented yet!") + +-- Info from spell_display_effects (remove from script when done) +-- The effect of this ability grows based on Feral Rampage level. +-- Inflicts 1275 - 2125 heat damage on targets in Area of Effect +-- You must have Tame Exotic Warder to use this Primal. +-- You must have your warder active to use this ability. + +end + +function tick(Caster, Target) + -- code to process each call_frequency (tick) set in spell_tiers +end + +function remove(Caster, Target) + -- code to remove the spell +end + diff --git a/server/Spells/Scout/Animist/Beastlord/EnchantedBarrier.lua b/server/Spells/Scout/Animist/Beastlord/EnchantedBarrier.lua new file mode 100644 index 000000000..4ef1be90f --- /dev/null +++ b/server/Spells/Scout/Animist/Beastlord/EnchantedBarrier.lua @@ -0,0 +1,29 @@ +--[[ + Script Name : Spells/Scout/Animist/Beastlord/EnchantedBarrier.lua + Script Author : John Adams + Script Date : 2013.08.12 08:08:12 + Script Purpose : + : +--]] + +function cast(Caster, Target) + -- code to cast the spell + Say(Caster, "Whoops! Guess this is not implemented yet!") + +-- Info from spell_display_effects (remove from script when done) +-- Increases power of group members (AE) by 2 - 4 +-- Reduces all damage done to group members (AE) by 10% +-- The effect of this ability grows based on Spirituality level. +-- You must have Tame Exotic Warder to use this Primal. +-- You must have your warder active to use this ability. + +end + +function tick(Caster, Target) + -- code to process each call_frequency (tick) set in spell_tiers +end + +function remove(Caster, Target) + -- code to remove the spell +end + diff --git a/server/Spells/Scout/Animist/Beastlord/EnergizingAssault.lua b/server/Spells/Scout/Animist/Beastlord/EnergizingAssault.lua new file mode 100644 index 000000000..33f27208d --- /dev/null +++ b/server/Spells/Scout/Animist/Beastlord/EnergizingAssault.lua @@ -0,0 +1,28 @@ +--[[ + Script Name : Spells/Scout/Animist/Beastlord/EnergizingAssault.lua + Script Author : John Adams + Script Date : 2013.08.12 08:08:14 + Script Purpose : + : +--]] + +function cast(Caster, Target) + -- code to cast the spell + Say(Caster, "Whoops! Guess this is not implemented yet!") + +-- Info from spell_display_effects (remove from script when done) +-- The effect of this ability grows based on Savagery and Spirituality level. +-- Increases power of group members (AE) by 4 - 6 +-- Inflicts 358 - 597 melee damage on target encounter +-- You must have your warder active to use this ability. + +end + +function tick(Caster, Target) + -- code to process each call_frequency (tick) set in spell_tiers +end + +function remove(Caster, Target) + -- code to remove the spell +end + diff --git a/server/Spells/Scout/Animist/Beastlord/FeralPounce.lua b/server/Spells/Scout/Animist/Beastlord/FeralPounce.lua new file mode 100644 index 000000000..775ee7c1b --- /dev/null +++ b/server/Spells/Scout/Animist/Beastlord/FeralPounce.lua @@ -0,0 +1,28 @@ +--[[ + Script Name : Spells/Scout/Animist/Beastlord/FeralPounce.lua + Script Author : John Adams + Script Date : 2013.08.12 08:08:12 + Script Purpose : + : +--]] + +function cast(Caster, Target) + -- code to cast the spell + Say(Caster, "Whoops! Guess this is not implemented yet!") + +-- Info from spell_display_effects (remove from script when done) +-- Inflicts 632 - 1054 melee damage on target encounter +-- Increases savagery of caster by 20.0 +-- This effect cannot be critically applied. +-- You must be in stealth. + +end + +function tick(Caster, Target) + -- code to process each call_frequency (tick) set in spell_tiers +end + +function remove(Caster, Target) + -- code to remove the spell +end + diff --git a/server/Spells/Scout/Animist/Beastlord/FeralRending.lua b/server/Spells/Scout/Animist/Beastlord/FeralRending.lua new file mode 100644 index 000000000..59b309411 --- /dev/null +++ b/server/Spells/Scout/Animist/Beastlord/FeralRending.lua @@ -0,0 +1,28 @@ +--[[ + Script Name : Spells/Scout/Animist/Beastlord/FeralRending.lua + Script Author : John Adams + Script Date : 2013.08.12 08:08:51 + Script Purpose : + : +--]] + +function cast(Caster, Target) + -- code to cast the spell + Say(Caster, "Whoops! Guess this is not implemented yet!") + +-- Info from spell_display_effects (remove from script when done) +-- Inflicts 952 - 1587 melee damage on target +-- Increases savagery of caster by 20.0 +-- This effect cannot be critically applied. +-- Must be flanking or behind + +end + +function tick(Caster, Target) + -- code to process each call_frequency (tick) set in spell_tiers +end + +function remove(Caster, Target) + -- code to remove the spell +end + diff --git a/server/Spells/Scout/Animist/Beastlord/FeralStance.lua b/server/Spells/Scout/Animist/Beastlord/FeralStance.lua new file mode 100644 index 000000000..2f9b2b5c9 --- /dev/null +++ b/server/Spells/Scout/Animist/Beastlord/FeralStance.lua @@ -0,0 +1,27 @@ +--[[ + Script Name : Spells/Scout/Animist/Beastlord/FeralStance.lua + Script Author : John Adams + Script Date : 2013.08.12 08:08:37 + Script Purpose : + : +--]] + +function cast(Caster, Target) + -- code to cast the spell + Say(Caster, "Whoops! Guess this is not implemented yet!") + +-- Info from spell_display_effects (remove from script when done) +-- Increases Damage Per Second of caster by 17.0 +-- Increases Slashing, Piercing, Ranged and Crushing of caster by 9.9 +-- Using a Primal will activate Feral Rampage on the Beastlord + +end + +function tick(Caster, Target) + -- code to process each call_frequency (tick) set in spell_tiers +end + +function remove(Caster, Target) + -- code to remove the spell +end + diff --git a/server/Spells/Scout/Animist/Beastlord/FerociousRoar.lua b/server/Spells/Scout/Animist/Beastlord/FerociousRoar.lua new file mode 100644 index 000000000..0d46b3592 --- /dev/null +++ b/server/Spells/Scout/Animist/Beastlord/FerociousRoar.lua @@ -0,0 +1,27 @@ +--[[ + Script Name : Spells/Scout/Animist/Beastlord/FerociousRoar.lua + Script Author : John Adams + Script Date : 2013.08.12 08:08:14 + Script Purpose : + : +--]] + +function cast(Caster, Target) + -- code to cast the spell + Say(Caster, "Whoops! Guess this is not implemented yet!") + +-- Info from spell_display_effects (remove from script when done) +-- Increases Weapon Damage Bonus of group members (AE) by 10-22% +-- The effect of this ability grows based on Savagery and Spirituality level. +-- You must have your warder active to use this ability. + +end + +function tick(Caster, Target) + -- code to process each call_frequency (tick) set in spell_tiers +end + +function remove(Caster, Target) + -- code to remove the spell +end + diff --git a/server/Spells/Scout/Animist/Beastlord/FlurryofClaws.lua b/server/Spells/Scout/Animist/Beastlord/FlurryofClaws.lua new file mode 100644 index 000000000..5eceb9213 --- /dev/null +++ b/server/Spells/Scout/Animist/Beastlord/FlurryofClaws.lua @@ -0,0 +1,29 @@ +--[[ + Script Name : Spells/Scout/Animist/Beastlord/FlurryofClaws.lua + Script Author : John Adams + Script Date : 2013.08.12 08:08:43 + Script Purpose : + : +--]] + +function cast(Caster, Target) + -- code to cast the spell + Say(Caster, "Whoops! Guess this is not implemented yet!") + +-- Info from spell_display_effects (remove from script when done) +-- Increases savagery of caster by 20.0 +-- This effect cannot be critically applied. +-- Inflicts 122 - 203 melee damage on target +-- Inflicts 122 - 203 melee damage on target +-- Inflicts 122 - 203 melee damage on target + +end + +function tick(Caster, Target) + -- code to process each call_frequency (tick) set in spell_tiers +end + +function remove(Caster, Target) + -- code to remove the spell +end + diff --git a/server/Spells/Scout/Animist/Beastlord/FrigidFortification.lua b/server/Spells/Scout/Animist/Beastlord/FrigidFortification.lua new file mode 100644 index 000000000..893a6311a --- /dev/null +++ b/server/Spells/Scout/Animist/Beastlord/FrigidFortification.lua @@ -0,0 +1,27 @@ +--[[ + Script Name : Spells/Scout/Animist/Beastlord/FrigidFortification.lua + Script Author : John Adams + Script Date : 2013.08.12 08:08:26 + Script Purpose : + : +--]] + +function cast(Caster, Target) + -- code to cast the spell + Say(Caster, "Whoops! Guess this is not implemented yet!") + +-- Info from spell_display_effects (remove from script when done) +-- Wards group members (AE) against 5 points of all damage +-- Increases savagery of caster by 20.0 +-- This effect cannot be critically applied. + +end + +function tick(Caster, Target) + -- code to process each call_frequency (tick) set in spell_tiers +end + +function remove(Caster, Target) + -- code to remove the spell +end + diff --git a/server/Spells/Scout/Animist/Beastlord/GlacialLance.lua b/server/Spells/Scout/Animist/Beastlord/GlacialLance.lua new file mode 100644 index 000000000..6e10735fc --- /dev/null +++ b/server/Spells/Scout/Animist/Beastlord/GlacialLance.lua @@ -0,0 +1,26 @@ +--[[ + Script Name : Spells/Scout/Animist/Beastlord/GlacialLance.lua + Script Author : John Adams + Script Date : 2013.08.12 08:08:08 + Script Purpose : + : +--]] + +function cast(Caster, Target) + -- code to cast the spell + Say(Caster, "Whoops! Guess this is not implemented yet!") + +-- Info from spell_display_effects (remove from script when done) +-- Inflicts 15 - 25 cold damage on target +-- If weapon equipped in Ranged + +end + +function tick(Caster, Target) + -- code to process each call_frequency (tick) set in spell_tiers +end + +function remove(Caster, Target) + -- code to remove the spell +end + diff --git a/server/Spells/Scout/Animist/Beastlord/GlacialLanceX.lua b/server/Spells/Scout/Animist/Beastlord/GlacialLanceX.lua new file mode 100644 index 000000000..ef2311eab --- /dev/null +++ b/server/Spells/Scout/Animist/Beastlord/GlacialLanceX.lua @@ -0,0 +1,26 @@ +--[[ + Script Name : Spells/Scout/Animist/Beastlord/GlacialLanceX.lua + Script Author : John Adams + Script Date : 2013.08.12 08:08:51 + Script Purpose : + : +--]] + +function cast(Caster, Target) + -- code to cast the spell + Say(Caster, "Whoops! Guess this is not implemented yet!") + +-- Info from spell_display_effects (remove from script when done) +-- Inflicts 491 - 819 cold damage on target +-- If weapon equipped in Ranged + +end + +function tick(Caster, Target) + -- code to process each call_frequency (tick) set in spell_tiers +end + +function remove(Caster, Target) + -- code to remove the spell +end + diff --git a/server/Spells/Scout/Animist/Beastlord/GlacialLanceXI.lua b/server/Spells/Scout/Animist/Beastlord/GlacialLanceXI.lua new file mode 100644 index 000000000..f4ad13c0c --- /dev/null +++ b/server/Spells/Scout/Animist/Beastlord/GlacialLanceXI.lua @@ -0,0 +1,26 @@ +--[[ + Script Name : Spells/Scout/Animist/Beastlord/GlacialLanceXI.lua + Script Author : John Adams + Script Date : 2013.08.12 08:08:13 + Script Purpose : + : +--]] + +function cast(Caster, Target) + -- code to cast the spell + Say(Caster, "Whoops! Guess this is not implemented yet!") + +-- Info from spell_display_effects (remove from script when done) +-- Inflicts 560 - 934 cold damage on target +-- If weapon equipped in Ranged + +end + +function tick(Caster, Target) + -- code to process each call_frequency (tick) set in spell_tiers +end + +function remove(Caster, Target) + -- code to remove the spell +end + diff --git a/server/Spells/Scout/Animist/Beastlord/GlacialRoar.lua b/server/Spells/Scout/Animist/Beastlord/GlacialRoar.lua new file mode 100644 index 000000000..80aee53a3 --- /dev/null +++ b/server/Spells/Scout/Animist/Beastlord/GlacialRoar.lua @@ -0,0 +1,27 @@ +--[[ + Script Name : Spells/Scout/Animist/Beastlord/GlacialRoar.lua + Script Author : John Adams + Script Date : 2013.08.12 08:08:46 + Script Purpose : + : +--]] + +function cast(Caster, Target) + -- code to cast the spell + Say(Caster, "Whoops! Guess this is not implemented yet!") + +-- Info from spell_display_effects (remove from script when done) +-- Inflicts 155 - 259 cold damage on target encounter +-- Increases savagery of caster by 20.0 +-- This effect cannot be critically applied. + +end + +function tick(Caster, Target) + -- code to process each call_frequency (tick) set in spell_tiers +end + +function remove(Caster, Target) + -- code to remove the spell +end + diff --git a/server/Spells/Scout/Animist/Beastlord/GrinningOnslaught.lua b/server/Spells/Scout/Animist/Beastlord/GrinningOnslaught.lua new file mode 100644 index 000000000..d9c6ae314 --- /dev/null +++ b/server/Spells/Scout/Animist/Beastlord/GrinningOnslaught.lua @@ -0,0 +1,28 @@ +--[[ + Script Name : Spells/Scout/Animist/Beastlord/GrinningOnslaught.lua + Script Author : John Adams + Script Date : 2013.08.12 08:08:15 + Script Purpose : + : +--]] + +function cast(Caster, Target) + -- code to cast the spell + Say(Caster, "Whoops! Guess this is not implemented yet!") + +-- Info from spell_display_effects (remove from script when done) +-- Reduces the power cost of the group's abilities by 30%. +-- The effect of this ability grows based on Savagery and Spirituality level. +-- Inflicts 358 - 597 melee damage on target encounter +-- You must have your warder active to use this ability. + +end + +function tick(Caster, Target) + -- code to process each call_frequency (tick) set in spell_tiers +end + +function remove(Caster, Target) + -- code to remove the spell +end + diff --git a/server/Spells/Scout/Animist/Beastlord/HawkEyes.lua b/server/Spells/Scout/Animist/Beastlord/HawkEyes.lua new file mode 100644 index 000000000..cb14d795d --- /dev/null +++ b/server/Spells/Scout/Animist/Beastlord/HawkEyes.lua @@ -0,0 +1,27 @@ +--[[ + Script Name : Spells/Scout/Animist/Beastlord/HawkEyes.lua + Script Author : John Adams + Script Date : 2013.08.12 08:08:17 + Script Purpose : + : +--]] + +function cast(Caster, Target) + -- code to cast the spell + Say(Caster, "Whoops! Guess this is not implemented yet!") + +-- Info from spell_display_effects (remove from script when done) +-- Increases savagery of caster by 20.0 +-- This effect cannot be critically applied. +-- Increases Crit Bonus of caster by 15.0% + +end + +function tick(Caster, Target) + -- code to process each call_frequency (tick) set in spell_tiers +end + +function remove(Caster, Target) + -- code to remove the spell +end + diff --git a/server/Spells/Scout/Animist/Beastlord/KaldrahirsLeadership.lua b/server/Spells/Scout/Animist/Beastlord/KaldrahirsLeadership.lua new file mode 100644 index 000000000..3d12508be --- /dev/null +++ b/server/Spells/Scout/Animist/Beastlord/KaldrahirsLeadership.lua @@ -0,0 +1,28 @@ +--[[ + Script Name : Spells/Scout/Animist/Beastlord/KaldrahirsLeadership.lua + Script Author : John Adams + Script Date : 2013.08.12 08:08:38 + Script Purpose : + : +--]] + +function cast(Caster, Target) + -- code to cast the spell + Say(Caster, "Whoops! Guess this is not implemented yet!") + +-- Info from spell_display_effects (remove from script when done) +-- Inflicts 411 - 686 melee damage on target encounter +-- The effect of this ability grows based on Savagery and Spirituality level. +-- Increases Potency of group members (AE) by 20-44% +-- You must have your warder active to use this ability. + +end + +function tick(Caster, Target) + -- code to process each call_frequency (tick) set in spell_tiers +end + +function remove(Caster, Target) + -- code to remove the spell +end + diff --git a/server/Spells/Scout/Animist/Beastlord/LuclinsPain.lua b/server/Spells/Scout/Animist/Beastlord/LuclinsPain.lua new file mode 100644 index 000000000..eebdb1825 --- /dev/null +++ b/server/Spells/Scout/Animist/Beastlord/LuclinsPain.lua @@ -0,0 +1,27 @@ +--[[ + Script Name : Spells/Scout/Animist/Beastlord/LuclinsPain.lua + Script Author : John Adams + Script Date : 2013.08.12 08:08:58 + Script Purpose : + : +--]] + +function cast(Caster, Target) + -- code to cast the spell + Say(Caster, "Whoops! Guess this is not implemented yet!") + +-- Info from spell_display_effects (remove from script when done) +-- The effect of this ability grows based on Savagery and Feral Rampage level. +-- Inflicts 840 - 1401 cold damage on targets in Area of Effect +-- You must have your warder active to use this ability. + +end + +function tick(Caster, Target) + -- code to process each call_frequency (tick) set in spell_tiers +end + +function remove(Caster, Target) + -- code to remove the spell +end + diff --git a/server/Spells/Scout/Animist/Beastlord/NeurotoxicVenom.lua b/server/Spells/Scout/Animist/Beastlord/NeurotoxicVenom.lua new file mode 100644 index 000000000..8f25d3e16 --- /dev/null +++ b/server/Spells/Scout/Animist/Beastlord/NeurotoxicVenom.lua @@ -0,0 +1,29 @@ +--[[ + Script Name : Spells/Scout/Animist/Beastlord/NeurotoxicVenom.lua + Script Author : John Adams + Script Date : 2013.08.12 08:08:48 + Script Purpose : + : +--]] + +function cast(Caster, Target) + -- code to cast the spell + Say(Caster, "Whoops! Guess this is not implemented yet!") + +-- Info from spell_display_effects (remove from script when done) +-- Inflicts 588 - 981 poison damage on target +-- Inflicts 3 - 5 poison damage on target every 2 seconds +-- Increases savagery of caster by 20.0 +-- This effect cannot be critically applied. +-- Must be flanking or behind + +end + +function tick(Caster, Target) + -- code to process each call_frequency (tick) set in spell_tiers +end + +function remove(Caster, Target) + -- code to remove the spell +end + diff --git a/server/Spells/Scout/Animist/Beastlord/NoxiousAssault.lua b/server/Spells/Scout/Animist/Beastlord/NoxiousAssault.lua new file mode 100644 index 000000000..1f5829dd6 --- /dev/null +++ b/server/Spells/Scout/Animist/Beastlord/NoxiousAssault.lua @@ -0,0 +1,28 @@ +--[[ + Script Name : Spells/Scout/Animist/Beastlord/NoxiousAssault.lua + Script Author : John Adams + Script Date : 2013.08.12 08:08:13 + Script Purpose : + : +--]] + +function cast(Caster, Target) + -- code to cast the spell + Say(Caster, "Whoops! Guess this is not implemented yet!") + +-- Info from spell_display_effects (remove from script when done) +-- Inflicts 227 - 379 poison damage on target encounter +-- Increases Crit Bonus of group members (AE) by 10.0% +-- Increases savagery of caster by 20.0 +-- This effect cannot be critically applied. + +end + +function tick(Caster, Target) + -- code to process each call_frequency (tick) set in spell_tiers +end + +function remove(Caster, Target) + -- code to remove the spell +end + diff --git a/server/Spells/Scout/Animist/Beastlord/NoxiousGrasp.lua b/server/Spells/Scout/Animist/Beastlord/NoxiousGrasp.lua new file mode 100644 index 000000000..00fcdebfa --- /dev/null +++ b/server/Spells/Scout/Animist/Beastlord/NoxiousGrasp.lua @@ -0,0 +1,29 @@ +--[[ + Script Name : Spells/Scout/Animist/Beastlord/NoxiousGrasp.lua + Script Author : John Adams + Script Date : 2013.08.12 08:08:17 + Script Purpose : + : +--]] + +function cast(Caster, Target) + -- code to cast the spell + Say(Caster, "Whoops! Guess this is not implemented yet!") + +-- Info from spell_display_effects (remove from script when done) +-- Inflicts 1195 - 1992 poison damage on target +-- The effect of this ability grows based on Savagery and Feral Rampage level. +-- Teleports your target in front of you. +-- If Target is not Epic +-- You must have your warder active to use this ability. + +end + +function tick(Caster, Target) + -- code to process each call_frequency (tick) set in spell_tiers +end + +function remove(Caster, Target) + -- code to remove the spell +end + diff --git a/server/Spells/Scout/Animist/Beastlord/QuickSwipe.lua b/server/Spells/Scout/Animist/Beastlord/QuickSwipe.lua new file mode 100644 index 000000000..14d0c1958 --- /dev/null +++ b/server/Spells/Scout/Animist/Beastlord/QuickSwipe.lua @@ -0,0 +1,30 @@ +--[[ + Script Name : Spells/Scout/Animist/Beastlord/QuickSwipe.lua + Script Author : John Adams + Script Date : 2013.11.20 09:11:24 + Script Purpose : + : +--]] + +-- Info from spell_display_effects (remove from script when done) + +function cast(Caster, Target, DmgType, MinVal, MaxVal, DPSAmt, AttackSpeed) + + -- Inflicts 7 - 13 melee damage on target + if MaxVal ~= nil and MinVal < MaxVal then + SpellDamage(Target, DmgType, math.random(MinVal, MaxVal)) + else + SpellDamage(Target, DmgType, MinVal) + end + + -- Decreases Damage Per Second of target by 4.2 + AddSpellBonus(Target, 629, DPSAmt) + + -- Decreases Attack Speed of target by 3.6 + AddSpellBonus(Target, 617, AttackSpeed) + +end + +function remove(Caster, Target) + RemoveSpellBonus(Target) +end diff --git a/server/Spells/Scout/Animist/Beastlord/QuickSwipeX.lua b/server/Spells/Scout/Animist/Beastlord/QuickSwipeX.lua new file mode 100644 index 000000000..8d394344e --- /dev/null +++ b/server/Spells/Scout/Animist/Beastlord/QuickSwipeX.lua @@ -0,0 +1,27 @@ +--[[ + Script Name : Spells/Scout/Animist/Beastlord/QuickSwipeX.lua + Script Author : John Adams + Script Date : 2013.08.12 08:08:43 + Script Purpose : + : +--]] + +function cast(Caster, Target) + -- code to cast the spell + Say(Caster, "Whoops! Guess this is not implemented yet!") + +-- Info from spell_display_effects (remove from script when done) +-- Inflicts 366 - 610 melee damage on target +-- Decreases Damage Per Second of target by 10.4 +-- Decreases Attack Speed of target by 6.6 + +end + +function tick(Caster, Target) + -- code to process each call_frequency (tick) set in spell_tiers +end + +function remove(Caster, Target) + -- code to remove the spell +end + diff --git a/server/Spells/Scout/Animist/Beastlord/QuickSwipeXI.lua b/server/Spells/Scout/Animist/Beastlord/QuickSwipeXI.lua new file mode 100644 index 000000000..df3d6d519 --- /dev/null +++ b/server/Spells/Scout/Animist/Beastlord/QuickSwipeXI.lua @@ -0,0 +1,27 @@ +--[[ + Script Name : Spells/Scout/Animist/Beastlord/QuickSwipeXI.lua + Script Author : John Adams + Script Date : 2013.08.12 08:08:07 + Script Purpose : + : +--]] + +function cast(Caster, Target) + -- code to cast the spell + Say(Caster, "Whoops! Guess this is not implemented yet!") + +-- Info from spell_display_effects (remove from script when done) +-- Inflicts 428 - 714 melee damage on target +-- Decreases Damage Per Second of target by 11.6 +-- Decreases Attack Speed of target by 6.9 + +end + +function tick(Caster, Target) + -- code to process each call_frequency (tick) set in spell_tiers +end + +function remove(Caster, Target) + -- code to remove the spell +end + diff --git a/server/Spells/Scout/Animist/Beastlord/RapidFlurry.lua b/server/Spells/Scout/Animist/Beastlord/RapidFlurry.lua new file mode 100644 index 000000000..1011d5b4d --- /dev/null +++ b/server/Spells/Scout/Animist/Beastlord/RapidFlurry.lua @@ -0,0 +1,28 @@ +--[[ + Script Name : Spells/Scout/Animist/Beastlord/RapidFlurry.lua + Script Author : John Adams + Script Date : 2013.08.12 08:08:17 + Script Purpose : + : +--]] + +function cast(Caster, Target) + -- code to cast the spell + Say(Caster, "Whoops! Guess this is not implemented yet!") + +-- Info from spell_display_effects (remove from script when done) +-- Inflicts 358 - 597 melee damage on target encounter +-- The effect of this ability grows based on Savagery and Spirituality level. +-- Increases attack speed of group members (AE) by 15-33% +-- You must have your warder active to use this ability. + +end + +function tick(Caster, Target) + -- code to process each call_frequency (tick) set in spell_tiers +end + +function remove(Caster, Target) + -- code to remove the spell +end + diff --git a/server/Spells/Scout/Animist/Beastlord/RestorationofMarishaKur.lua b/server/Spells/Scout/Animist/Beastlord/RestorationofMarishaKur.lua new file mode 100644 index 000000000..501be0517 --- /dev/null +++ b/server/Spells/Scout/Animist/Beastlord/RestorationofMarishaKur.lua @@ -0,0 +1,28 @@ +--[[ + Script Name : Spells/Scout/Animist/Beastlord/RestorationofMarishaKur.lua + Script Author : John Adams + Script Date : 2013.08.12 08:08:18 + Script Purpose : + : +--]] + +function cast(Caster, Target) + -- code to cast the spell + Say(Caster, "Whoops! Guess this is not implemented yet!") + +-- Info from spell_display_effects (remove from script when done) +-- Inflicts 358 - 597 melee damage on target encounter +-- The effect of this ability grows based on Savagery and Spirituality level. +-- Heals group members (AE) for 5 - 9 +-- You must have your warder active to use this ability. + +end + +function tick(Caster, Target) + -- code to process each call_frequency (tick) set in spell_tiers +end + +function remove(Caster, Target) + -- code to remove the spell +end + diff --git a/server/Spells/Scout/Animist/Beastlord/Rush.lua b/server/Spells/Scout/Animist/Beastlord/Rush.lua new file mode 100644 index 000000000..6269b03c0 --- /dev/null +++ b/server/Spells/Scout/Animist/Beastlord/Rush.lua @@ -0,0 +1,22 @@ +--[[ + Script Name : Spells/Scout/Animist/Beastlord/Rush.lua + Script Author : neatz09 + Script Date : 2019.10.12 01:10:17 + Script Purpose : + : +--]] + +-- Info from spell_display_effects (remove from script when done) +-- Inflicts 35 - 59 melee damage on target +function cast(Caster, Target, DmgType, MinVal, MaxVal) + SpellDamage(Target, DmgType, MinVal, MaxVal) + SpellDamage(Target, DmgType, MinVal, MaxVal) +SpellDamage(Target, DmgType, MinVal, MaxVal) +SpellDamage(Target, DmgType, MinVal, MaxVal) +SpellDamage(Target, DmgType, MinVal, MaxVal) +end + +-- Inflicts 35 - 59 melee damage on target +-- Inflicts 35 - 59 melee damage on target +-- Inflicts 35 - 59 melee damage on target +-- Inflicts 35 - 59 melee damage on target diff --git a/server/Spells/Scout/Animist/Beastlord/RushX.lua b/server/Spells/Scout/Animist/Beastlord/RushX.lua new file mode 100644 index 000000000..afe530d88 --- /dev/null +++ b/server/Spells/Scout/Animist/Beastlord/RushX.lua @@ -0,0 +1,29 @@ +--[[ + Script Name : Spells/Scout/Animist/Beastlord/RushX.lua + Script Author : John Adams + Script Date : 2013.08.12 08:08:46 + Script Purpose : + : +--]] + +function cast(Caster, Target) + -- code to cast the spell + Say(Caster, "Whoops! Guess this is not implemented yet!") + +-- Info from spell_display_effects (remove from script when done) +-- Inflicts 252 - 421 melee damage on target +-- Inflicts 252 - 421 melee damage on target +-- Inflicts 252 - 421 melee damage on target +-- Inflicts 252 - 421 melee damage on target +-- Inflicts 252 - 421 melee damage on target + +end + +function tick(Caster, Target) + -- code to process each call_frequency (tick) set in spell_tiers +end + +function remove(Caster, Target) + -- code to remove the spell +end + diff --git a/server/Spells/Scout/Animist/Beastlord/RushXI.lua b/server/Spells/Scout/Animist/Beastlord/RushXI.lua new file mode 100644 index 000000000..e839ffd9a --- /dev/null +++ b/server/Spells/Scout/Animist/Beastlord/RushXI.lua @@ -0,0 +1,29 @@ +--[[ + Script Name : Spells/Scout/Animist/Beastlord/RushXI.lua + Script Author : John Adams + Script Date : 2013.08.12 08:08:10 + Script Purpose : + : +--]] + +function cast(Caster, Target) + -- code to cast the spell + Say(Caster, "Whoops! Guess this is not implemented yet!") + +-- Info from spell_display_effects (remove from script when done) +-- Inflicts 292 - 486 melee damage on target +-- Inflicts 292 - 486 melee damage on target +-- Inflicts 292 - 486 melee damage on target +-- Inflicts 292 - 486 melee damage on target +-- Inflicts 292 - 486 melee damage on target + +end + +function tick(Caster, Target) + -- code to process each call_frequency (tick) set in spell_tiers +end + +function remove(Caster, Target) + -- code to remove the spell +end + diff --git a/server/Spells/Scout/Animist/Beastlord/SalivaryExcretion.lua b/server/Spells/Scout/Animist/Beastlord/SalivaryExcretion.lua new file mode 100644 index 000000000..37d058ce6 --- /dev/null +++ b/server/Spells/Scout/Animist/Beastlord/SalivaryExcretion.lua @@ -0,0 +1,30 @@ +--[[ + Script Name : Spells/Scout/Animist/Beastlord/SalivaryExcretion.lua + Script Author : John Adams + Script Date : 2013.08.12 08:08:19 + Script Purpose : + : +--]] + +function cast(Caster, Target) + -- code to cast the spell + Say(Caster, "Whoops! Guess this is not implemented yet!") + +-- Info from spell_display_effects (remove from script when done) +-- Increases attack speed by 10-22% +-- Increases damage per second by 10-22% +-- Inflicts 916 - 1527 poison damage on target +-- The effect of this ability grows based on Savagery and Feral Rampage level. +-- Must be flanking or behind +-- You must have your warder active to use this ability. + +end + +function tick(Caster, Target) + -- code to process each call_frequency (tick) set in spell_tiers +end + +function remove(Caster, Target) + -- code to remove the spell +end + diff --git a/server/Spells/Scout/Animist/Beastlord/SavageRavaging.lua b/server/Spells/Scout/Animist/Beastlord/SavageRavaging.lua new file mode 100644 index 000000000..e4eb560a8 --- /dev/null +++ b/server/Spells/Scout/Animist/Beastlord/SavageRavaging.lua @@ -0,0 +1,28 @@ +--[[ + Script Name : Spells/Scout/Animist/Beastlord/SavageRavaging.lua + Script Author : John Adams + Script Date : 2013.08.12 08:08:19 + Script Purpose : + : +--]] + +function cast(Caster, Target) + -- code to cast the spell + Say(Caster, "Whoops! Guess this is not implemented yet!") + +-- Info from spell_display_effects (remove from script when done) +-- The effect of this ability grows based on Savagery and Feral Rampage level. +-- Inflicts 1494 - 2491 piercing damage on target +-- Must be flanking or behind +-- You must have your warder active to use this ability. + +end + +function tick(Caster, Target) + -- code to process each call_frequency (tick) set in spell_tiers +end + +function remove(Caster, Target) + -- code to remove the spell +end + diff --git a/server/Spells/Scout/Animist/Beastlord/SavageResilience.lua b/server/Spells/Scout/Animist/Beastlord/SavageResilience.lua new file mode 100644 index 000000000..b0b9cb43a --- /dev/null +++ b/server/Spells/Scout/Animist/Beastlord/SavageResilience.lua @@ -0,0 +1,30 @@ +--[[ + Script Name : Spells/Scout/Animist/Beastlord/SavageResilience.lua + Script Author : John Adams + Script Date : 2013.08.12 08:08:32 + Script Purpose : + : +--]] + +function cast(Caster, Target) + -- code to cast the spell + Say(Caster, "Whoops! Guess this is not implemented yet!") + +-- Info from spell_display_effects (remove from script when done) +-- Inflicts 78 - 130 melee damage on target encounter +-- Reduces all damage done to group members (AE) by 3% +-- Increases savagery of caster by 20.0 +-- This effect cannot be critically applied. +-- Heals group members (AE) for 2 - 4 +-- Heals group members (AE) for 1 every 3 seconds + +end + +function tick(Caster, Target) + -- code to process each call_frequency (tick) set in spell_tiers +end + +function remove(Caster, Target) + -- code to remove the spell +end + diff --git a/server/Spells/Scout/Animist/Beastlord/SavageRuin.lua b/server/Spells/Scout/Animist/Beastlord/SavageRuin.lua new file mode 100644 index 000000000..3d245eb51 --- /dev/null +++ b/server/Spells/Scout/Animist/Beastlord/SavageRuin.lua @@ -0,0 +1,27 @@ +--[[ + Script Name : Spells/Scout/Animist/Beastlord/SavageRuin.lua + Script Author : John Adams + Script Date : 2013.08.12 08:08:08 + Script Purpose : + : +--]] + +function cast(Caster, Target) + -- code to cast the spell + Say(Caster, "Whoops! Guess this is not implemented yet!") + +-- Info from spell_display_effects (remove from script when done) +-- On any combat or spell hit this spell may cast Savage Ruin on target of attack. Triggers about 5.0 times per minute. +-- Inflicts 83 - 102 slashing damage on target +-- Increases Mitigation of caster vs physical damage by 183 + +end + +function tick(Caster, Target) + -- code to process each call_frequency (tick) set in spell_tiers +end + +function remove(Caster, Target) + -- code to remove the spell +end + diff --git a/server/Spells/Scout/Animist/Beastlord/ShadowLeap.lua b/server/Spells/Scout/Animist/Beastlord/ShadowLeap.lua new file mode 100644 index 000000000..bdc215ba6 --- /dev/null +++ b/server/Spells/Scout/Animist/Beastlord/ShadowLeap.lua @@ -0,0 +1,28 @@ +--[[ + Script Name : Spells/Scout/Animist/Beastlord/ShadowLeap.lua + Script Author : John Adams + Script Date : 2013.08.12 08:08:20 + Script Purpose : + : +--]] + +function cast(Caster, Target) + -- code to cast the spell + Say(Caster, "Whoops! Guess this is not implemented yet!") + +-- Info from spell_display_effects (remove from script when done) +-- The effect of this ability grows based on Savagery and Feral Rampage level. +-- Inflicts 1494 - 2491 melee damage on target +-- You must be in stealth. +-- You must have your warder active to use this ability. + +end + +function tick(Caster, Target) + -- code to process each call_frequency (tick) set in spell_tiers +end + +function remove(Caster, Target) + -- code to remove the spell +end + diff --git a/server/Spells/Scout/Animist/Beastlord/ShalihMarsMandate.lua b/server/Spells/Scout/Animist/Beastlord/ShalihMarsMandate.lua new file mode 100644 index 000000000..bd7321cf7 --- /dev/null +++ b/server/Spells/Scout/Animist/Beastlord/ShalihMarsMandate.lua @@ -0,0 +1,28 @@ +--[[ + Script Name : Spells/Scout/Animist/Beastlord/ShalihMarsMandate.lua + Script Author : John Adams + Script Date : 2013.08.12 08:08:44 + Script Purpose : + : +--]] + +function cast(Caster, Target) + -- code to cast the spell + Say(Caster, "Whoops! Guess this is not implemented yet!") + +-- Info from spell_display_effects (remove from script when done) +-- Inflicts 537 - 895 melee damage on target +-- Increases Potency by 20-44% +-- The effect of this ability grows based on Savagery and Feral Rampage level. +-- You must have your warder active to use this ability. + +end + +function tick(Caster, Target) + -- code to process each call_frequency (tick) set in spell_tiers +end + +function remove(Caster, Target) + -- code to remove the spell +end + diff --git a/server/Spells/Scout/Animist/Beastlord/ShiverbackEndemic.lua b/server/Spells/Scout/Animist/Beastlord/ShiverbackEndemic.lua new file mode 100644 index 000000000..97eb46f54 --- /dev/null +++ b/server/Spells/Scout/Animist/Beastlord/ShiverbackEndemic.lua @@ -0,0 +1,28 @@ +--[[ + Script Name : Spells/Scout/Animist/Beastlord/ShiverbackEndemic.lua + Script Author : John Adams + Script Date : 2013.08.12 08:08:45 + Script Purpose : + : +--]] + +function cast(Caster, Target) + -- code to cast the spell + Say(Caster, "Whoops! Guess this is not implemented yet!") + +-- Info from spell_display_effects (remove from script when done) +-- Inflicts 3 - 5 cold damage on target every 2 seconds +-- Increases savagery of caster by 20.0 +-- This effect cannot be critically applied. +-- Inflicts 169 - 282 cold damage on target + +end + +function tick(Caster, Target) + -- code to process each call_frequency (tick) set in spell_tiers +end + +function remove(Caster, Target) + -- code to remove the spell +end + diff --git a/server/Spells/Scout/Animist/Beastlord/SilentTalon.lua b/server/Spells/Scout/Animist/Beastlord/SilentTalon.lua new file mode 100644 index 000000000..39b5a270d --- /dev/null +++ b/server/Spells/Scout/Animist/Beastlord/SilentTalon.lua @@ -0,0 +1,29 @@ +--[[ + Script Name : Spells/Scout/Animist/Beastlord/SilentTalon.lua + Script Author : John Adams + Script Date : 2013.08.12 08:08:20 + Script Purpose : + : +--]] + +function cast(Caster, Target) + -- code to cast the spell + Say(Caster, "Whoops! Guess this is not implemented yet!") + +-- Info from spell_display_effects (remove from script when done) +-- Inflicts 996 - 1660 piercing damage on target +-- The effect of this ability grows based on Savagery and Feral Rampage level. +-- Inflicts 6 - 10 piercing damage on target every 2 seconds +-- You must be in stealth. +-- You must have your warder active to use this ability. + +end + +function tick(Caster, Target) + -- code to process each call_frequency (tick) set in spell_tiers +end + +function remove(Caster, Target) + -- code to remove the spell +end + diff --git a/server/Spells/Scout/Animist/Beastlord/SonicScreech.lua b/server/Spells/Scout/Animist/Beastlord/SonicScreech.lua new file mode 100644 index 000000000..060a14941 --- /dev/null +++ b/server/Spells/Scout/Animist/Beastlord/SonicScreech.lua @@ -0,0 +1,28 @@ +--[[ + Script Name : Spells/Scout/Animist/Beastlord/SonicScreech.lua + Script Author : John Adams + Script Date : 2013.08.12 08:08:21 + Script Purpose : + : +--]] + +function cast(Caster, Target) + -- code to cast the spell + Say(Caster, "Whoops! Guess this is not implemented yet!") + +-- Info from spell_display_effects (remove from script when done) +-- The effect of this ability grows based on Savagery and Feral Rampage level. +-- Inflicts 1245 - 2075 piercing damage on targets in Area of Effect +-- You must be in stealth. +-- You must have your warder active to use this ability. + +end + +function tick(Caster, Target) + -- code to process each call_frequency (tick) set in spell_tiers +end + +function remove(Caster, Target) + -- code to remove the spell +end + diff --git a/server/Spells/Scout/Animist/Beastlord/SpinechillerBlood.lua b/server/Spells/Scout/Animist/Beastlord/SpinechillerBlood.lua new file mode 100644 index 000000000..3444cc2ee --- /dev/null +++ b/server/Spells/Scout/Animist/Beastlord/SpinechillerBlood.lua @@ -0,0 +1,20 @@ +--[[ + Script Name : Spells/Scout/Animist/Beastlord/SpinechillerBlood.lua + Script Author : neatz09 + Script Date : 2019.10.12 02:10:27 + Script Purpose : + : +--]] + + +-- Inflicts 7 - 12 poison damage on target +function cast(Caster, Target, DmgType, MinVal, MaxVal, DotType, MinVal2, MaxVal2) + SpellDamage(Target, DmgType, MinVal, MaxVal) +end + +function tick(Caster, Target) +-- Inflicts 2 - 3 poison damage on target instantly and every 4 seconds + SpellDamage(Target, DotType, MinVal2, MaxVal2) +end + + diff --git a/server/Spells/Scout/Animist/Beastlord/SpinechillerBloodX.lua b/server/Spells/Scout/Animist/Beastlord/SpinechillerBloodX.lua new file mode 100644 index 000000000..44303f7ca --- /dev/null +++ b/server/Spells/Scout/Animist/Beastlord/SpinechillerBloodX.lua @@ -0,0 +1,26 @@ +--[[ + Script Name : Spells/Scout/Animist/Beastlord/SpinechillerBloodX.lua + Script Author : John Adams + Script Date : 2013.08.12 08:08:57 + Script Purpose : + : +--]] + +function cast(Caster, Target) + -- code to cast the spell + Say(Caster, "Whoops! Guess this is not implemented yet!") + +-- Info from spell_display_effects (remove from script when done) +-- Inflicts 247 - 412 poison damage on target +-- Inflicts 62 - 103 poison damage on target instantly and every 4 seconds + +end + +function tick(Caster, Target) + -- code to process each call_frequency (tick) set in spell_tiers +end + +function remove(Caster, Target) + -- code to remove the spell +end + diff --git a/server/Spells/Scout/Animist/Beastlord/Spiritshroud.lua b/server/Spells/Scout/Animist/Beastlord/Spiritshroud.lua new file mode 100644 index 000000000..ebb890314 --- /dev/null +++ b/server/Spells/Scout/Animist/Beastlord/Spiritshroud.lua @@ -0,0 +1,17 @@ +--[[ + Script Name : Spells/Scout/Animist/Beastlord/Spiritshroud.lua + Script Author : John Adams + Script Date : 2013.11.20 09:11:30 + Script Purpose : + : +--]] + +function cast(Caster, Target) + -- Grants stealth to caster + -- Suspends caster's movement speed enhancements + Stealth(1, Caster) +end + +function remove(Caster, Target) + RemoveStealth(Caster) +end diff --git a/server/Spells/Scout/Animist/Beastlord/SpiritualFeast.lua b/server/Spells/Scout/Animist/Beastlord/SpiritualFeast.lua new file mode 100644 index 000000000..9126090f1 --- /dev/null +++ b/server/Spells/Scout/Animist/Beastlord/SpiritualFeast.lua @@ -0,0 +1,28 @@ +--[[ + Script Name : Spells/Scout/Animist/Beastlord/SpiritualFeast.lua + Script Author : John Adams + Script Date : 2013.08.12 08:08:18 + Script Purpose : + : +--]] + +function cast(Caster, Target) + -- code to cast the spell + Say(Caster, "Whoops! Guess this is not implemented yet!") + +-- Info from spell_display_effects (remove from script when done) +-- Inflicts 151 - 252 melee damage on target encounter +-- Increases savagery of caster by 20.0 +-- This effect cannot be critically applied. +-- Increases power of group members (AE) by 2 - 3 + +end + +function tick(Caster, Target) + -- code to process each call_frequency (tick) set in spell_tiers +end + +function remove(Caster, Target) + -- code to remove the spell +end + diff --git a/server/Spells/Scout/Animist/Beastlord/SpiritualStance.lua b/server/Spells/Scout/Animist/Beastlord/SpiritualStance.lua new file mode 100644 index 000000000..708cedd96 --- /dev/null +++ b/server/Spells/Scout/Animist/Beastlord/SpiritualStance.lua @@ -0,0 +1,33 @@ +--[[ + Script Name : Spells/Scout/Animist/Beastlord/SpiritualStance.lua + Script Author : John Adams + Script Date : 2013.08.12 08:08:23 + Script Purpose : + : +--]] + +function cast(Caster, Target) + -- code to cast the spell + Say(Caster, "Whoops! Guess this is not implemented yet!") + +-- Info from spell_display_effects (remove from script when done) +-- Using a Primal will activate Spirituality on the Beastlord +-- Adds 2.4% to base avoidance. +-- Increases Parry, Deflection and Defense of caster by 19.8 +-- Increases Mitigation of caster vs elemental, noxious and arcane damage by 1080 +-- Increases the caster's effectiveness of worn armor vs physical damage by 10% +-- When a combat art is used this spell will cast Savage Spirit on target. +-- Increases savagery of caster by 14.0 +-- This effect cannot be critically applied. +-- Cannot be modified except by direct means + +end + +function tick(Caster, Target) + -- code to process each call_frequency (tick) set in spell_tiers +end + +function remove(Caster, Target) + -- code to remove the spell +end + diff --git a/server/Spells/Scout/Animist/Beastlord/SummonWarderAmphibian.lua b/server/Spells/Scout/Animist/Beastlord/SummonWarderAmphibian.lua new file mode 100644 index 000000000..8bd25a08f --- /dev/null +++ b/server/Spells/Scout/Animist/Beastlord/SummonWarderAmphibian.lua @@ -0,0 +1,25 @@ +--[[ + Script Name : Spells/Scout/Animist/Beastlord/SummonWarderAmphibian.lua + Script Author : John Adams + Script Date : 2013.08.12 08:08:26 + Script Purpose : + : +--]] + +function cast(Caster, Target) + -- code to cast the spell + Say(Caster, "Whoops! Guess this is not implemented yet!") + +-- Info from spell_display_effects (remove from script when done) +-- Summons an amphibian warder + +end + +function tick(Caster, Target) + -- code to process each call_frequency (tick) set in spell_tiers +end + +function remove(Caster, Target) + -- code to remove the spell +end + diff --git a/server/Spells/Scout/Animist/Beastlord/SummonWarderAquatic.lua b/server/Spells/Scout/Animist/Beastlord/SummonWarderAquatic.lua new file mode 100644 index 000000000..4ae905f64 --- /dev/null +++ b/server/Spells/Scout/Animist/Beastlord/SummonWarderAquatic.lua @@ -0,0 +1,25 @@ +--[[ + Script Name : Spells/Scout/Animist/Beastlord/SummonWarderAquatic.lua + Script Author : John Adams + Script Date : 2013.08.12 08:08:28 + Script Purpose : + : +--]] + +function cast(Caster, Target) + -- code to cast the spell + Say(Caster, "Whoops! Guess this is not implemented yet!") + +-- Info from spell_display_effects (remove from script when done) +-- Summons an aquatic warder + +end + +function tick(Caster, Target) + -- code to process each call_frequency (tick) set in spell_tiers +end + +function remove(Caster, Target) + -- code to remove the spell +end + diff --git a/server/Spells/Scout/Animist/Beastlord/SummonWarderAvian.lua b/server/Spells/Scout/Animist/Beastlord/SummonWarderAvian.lua new file mode 100644 index 000000000..a3c3f37d4 --- /dev/null +++ b/server/Spells/Scout/Animist/Beastlord/SummonWarderAvian.lua @@ -0,0 +1,25 @@ +--[[ + Script Name : Spells/Scout/Animist/Beastlord/SummonWarderAvian.lua + Script Author : John Adams + Script Date : 2013.08.12 08:08:30 + Script Purpose : + : +--]] + +function cast(Caster, Target) + -- code to cast the spell + Say(Caster, "Whoops! Guess this is not implemented yet!") + +-- Info from spell_display_effects (remove from script when done) +-- Summons an avian warder + +end + +function tick(Caster, Target) + -- code to process each call_frequency (tick) set in spell_tiers +end + +function remove(Caster, Target) + -- code to remove the spell +end + diff --git a/server/Spells/Scout/Animist/Beastlord/SummonWarderBat.lua b/server/Spells/Scout/Animist/Beastlord/SummonWarderBat.lua new file mode 100644 index 000000000..5af22e5b6 --- /dev/null +++ b/server/Spells/Scout/Animist/Beastlord/SummonWarderBat.lua @@ -0,0 +1,25 @@ +--[[ + Script Name : Spells/Scout/Animist/Beastlord/SummonWarderBat.lua + Script Author : John Adams + Script Date : 2013.08.12 08:08:33 + Script Purpose : + : +--]] + +function cast(Caster, Target) + -- code to cast the spell + Say(Caster, "Whoops! Guess this is not implemented yet!") + +-- Info from spell_display_effects (remove from script when done) +-- Summons a bat warder + +end + +function tick(Caster, Target) + -- code to process each call_frequency (tick) set in spell_tiers +end + +function remove(Caster, Target) + -- code to remove the spell +end + diff --git a/server/Spells/Scout/Animist/Beastlord/SummonWarderBear.lua b/server/Spells/Scout/Animist/Beastlord/SummonWarderBear.lua new file mode 100644 index 000000000..56ef48590 --- /dev/null +++ b/server/Spells/Scout/Animist/Beastlord/SummonWarderBear.lua @@ -0,0 +1,25 @@ +--[[ + Script Name : Spells/Scout/Animist/Beastlord/SummonWarderBear.lua + Script Author : John Adams + Script Date : 2013.08.12 08:08:35 + Script Purpose : + : +--]] + +function cast(Caster, Target) + -- code to cast the spell + Say(Caster, "Whoops! Guess this is not implemented yet!") + +-- Info from spell_display_effects (remove from script when done) +-- Summons a bear warder + +end + +function tick(Caster, Target) + -- code to process each call_frequency (tick) set in spell_tiers +end + +function remove(Caster, Target) + -- code to remove the spell +end + diff --git a/server/Spells/Scout/Animist/Beastlord/SummonWarderBoar.lua b/server/Spells/Scout/Animist/Beastlord/SummonWarderBoar.lua new file mode 100644 index 000000000..81b0fab4b --- /dev/null +++ b/server/Spells/Scout/Animist/Beastlord/SummonWarderBoar.lua @@ -0,0 +1,25 @@ +--[[ + Script Name : Spells/Scout/Animist/Beastlord/SummonWarderBoar.lua + Script Author : John Adams + Script Date : 2013.08.12 08:08:38 + Script Purpose : + : +--]] + +function cast(Caster, Target) + -- code to cast the spell + Say(Caster, "Whoops! Guess this is not implemented yet!") + +-- Info from spell_display_effects (remove from script when done) +-- Summons a boar warder + +end + +function tick(Caster, Target) + -- code to process each call_frequency (tick) set in spell_tiers +end + +function remove(Caster, Target) + -- code to remove the spell +end + diff --git a/server/Spells/Scout/Animist/Beastlord/SummonWarderBovid.lua b/server/Spells/Scout/Animist/Beastlord/SummonWarderBovid.lua new file mode 100644 index 000000000..f72c66ceb --- /dev/null +++ b/server/Spells/Scout/Animist/Beastlord/SummonWarderBovid.lua @@ -0,0 +1,25 @@ +--[[ + Script Name : Spells/Scout/Animist/Beastlord/SummonWarderBovid.lua + Script Author : John Adams + Script Date : 2013.08.12 08:08:40 + Script Purpose : + : +--]] + +function cast(Caster, Target) + -- code to cast the spell + Say(Caster, "Whoops! Guess this is not implemented yet!") + +-- Info from spell_display_effects (remove from script when done) +-- Summons a bovid warder + +end + +function tick(Caster, Target) + -- code to process each call_frequency (tick) set in spell_tiers +end + +function remove(Caster, Target) + -- code to remove the spell +end + diff --git a/server/Spells/Scout/Animist/Beastlord/SummonWarderCanine.lua b/server/Spells/Scout/Animist/Beastlord/SummonWarderCanine.lua new file mode 100644 index 000000000..4da55f603 --- /dev/null +++ b/server/Spells/Scout/Animist/Beastlord/SummonWarderCanine.lua @@ -0,0 +1,25 @@ +--[[ + Script Name : Spells/Scout/Animist/Beastlord/SummonWarderCanine.lua + Script Author : John Adams + Script Date : 2013.08.12 08:08:42 + Script Purpose : + : +--]] + +function cast(Caster, Target) + -- code to cast the spell + Say(Caster, "Whoops! Guess this is not implemented yet!") + +-- Info from spell_display_effects (remove from script when done) +-- Summons a canine warder + +end + +function tick(Caster, Target) + -- code to process each call_frequency (tick) set in spell_tiers +end + +function remove(Caster, Target) + -- code to remove the spell +end + diff --git a/server/Spells/Scout/Animist/Beastlord/SummonWarderDire.lua b/server/Spells/Scout/Animist/Beastlord/SummonWarderDire.lua new file mode 100644 index 000000000..b17988dfe --- /dev/null +++ b/server/Spells/Scout/Animist/Beastlord/SummonWarderDire.lua @@ -0,0 +1,26 @@ +--[[ + Script Name : Spells/Scout/Animist/Beastlord/SummonWarderDire.lua + Script Author : John Adams + Script Date : 2013.08.12 08:08:45 + Script Purpose : + : +--]] + +function cast(Caster, Target) + -- code to cast the spell + Say(Caster, "Whoops! Guess this is not implemented yet!") + +-- Info from spell_display_effects (remove from script when done) +-- Summons a dire warder +-- You must have Tame Exotic Warder to summon an Exotic Warder. + +end + +function tick(Caster, Target) + -- code to process each call_frequency (tick) set in spell_tiers +end + +function remove(Caster, Target) + -- code to remove the spell +end + diff --git a/server/Spells/Scout/Animist/Beastlord/SummonWarderDrake.lua b/server/Spells/Scout/Animist/Beastlord/SummonWarderDrake.lua new file mode 100644 index 000000000..d3d5e684c --- /dev/null +++ b/server/Spells/Scout/Animist/Beastlord/SummonWarderDrake.lua @@ -0,0 +1,26 @@ +--[[ + Script Name : Spells/Scout/Animist/Beastlord/SummonWarderDrake.lua + Script Author : John Adams + Script Date : 2013.08.12 08:08:47 + Script Purpose : + : +--]] + +function cast(Caster, Target) + -- code to cast the spell + Say(Caster, "Whoops! Guess this is not implemented yet!") + +-- Info from spell_display_effects (remove from script when done) +-- Summons a drake warder +-- You must have Tame Exotic Warder to summon an Exotic Warder. + +end + +function tick(Caster, Target) + -- code to process each call_frequency (tick) set in spell_tiers +end + +function remove(Caster, Target) + -- code to remove the spell +end + diff --git a/server/Spells/Scout/Animist/Beastlord/SummonWarderEnchanted.lua b/server/Spells/Scout/Animist/Beastlord/SummonWarderEnchanted.lua new file mode 100644 index 000000000..598d9f608 --- /dev/null +++ b/server/Spells/Scout/Animist/Beastlord/SummonWarderEnchanted.lua @@ -0,0 +1,26 @@ +--[[ + Script Name : Spells/Scout/Animist/Beastlord/SummonWarderEnchanted.lua + Script Author : John Adams + Script Date : 2013.08.12 08:08:49 + Script Purpose : + : +--]] + +function cast(Caster, Target) + -- code to cast the spell + Say(Caster, "Whoops! Guess this is not implemented yet!") + +-- Info from spell_display_effects (remove from script when done) +-- Summons an enchanted warder +-- You must have Tame Exotic Warder to summon an Exotic Warder. + +end + +function tick(Caster, Target) + -- code to process each call_frequency (tick) set in spell_tiers +end + +function remove(Caster, Target) + -- code to remove the spell +end + diff --git a/server/Spells/Scout/Animist/Beastlord/SummonWarderFeline.lua b/server/Spells/Scout/Animist/Beastlord/SummonWarderFeline.lua new file mode 100644 index 000000000..06f8c8339 --- /dev/null +++ b/server/Spells/Scout/Animist/Beastlord/SummonWarderFeline.lua @@ -0,0 +1,25 @@ +--[[ + Script Name : Spells/Scout/Animist/Beastlord/SummonWarderFeline.lua + Script Author : John Adams + Script Date : 2013.08.12 08:08:51 + Script Purpose : + : +--]] + +function cast(Caster, Target) + -- code to cast the spell + Say(Caster, "Whoops! Guess this is not implemented yet!") + +-- Info from spell_display_effects (remove from script when done) +-- Summons a feline warder + +end + +function tick(Caster, Target) + -- code to process each call_frequency (tick) set in spell_tiers +end + +function remove(Caster, Target) + -- code to remove the spell +end + diff --git a/server/Spells/Scout/Animist/Beastlord/SummonWarderInsect.lua b/server/Spells/Scout/Animist/Beastlord/SummonWarderInsect.lua new file mode 100644 index 000000000..b2255d38b --- /dev/null +++ b/server/Spells/Scout/Animist/Beastlord/SummonWarderInsect.lua @@ -0,0 +1,25 @@ +--[[ + Script Name : Spells/Scout/Animist/Beastlord/SummonWarderInsect.lua + Script Author : John Adams + Script Date : 2013.08.12 08:08:53 + Script Purpose : + : +--]] + +function cast(Caster, Target) + -- code to cast the spell + Say(Caster, "Whoops! Guess this is not implemented yet!") + +-- Info from spell_display_effects (remove from script when done) +-- Summons an insect warder + +end + +function tick(Caster, Target) + -- code to process each call_frequency (tick) set in spell_tiers +end + +function remove(Caster, Target) + -- code to remove the spell +end + diff --git a/server/Spells/Scout/Animist/Beastlord/SummonWarderMystical.lua b/server/Spells/Scout/Animist/Beastlord/SummonWarderMystical.lua new file mode 100644 index 000000000..61644da13 --- /dev/null +++ b/server/Spells/Scout/Animist/Beastlord/SummonWarderMystical.lua @@ -0,0 +1,26 @@ +--[[ + Script Name : Spells/Scout/Animist/Beastlord/SummonWarderMystical.lua + Script Author : John Adams + Script Date : 2013.08.12 08:08:55 + Script Purpose : + : +--]] + +function cast(Caster, Target) + -- code to cast the spell + Say(Caster, "Whoops! Guess this is not implemented yet!") + +-- Info from spell_display_effects (remove from script when done) +-- Summons a mystical warder +-- You must have Tame Exotic Warder to summon an Exotic Warder. + +end + +function tick(Caster, Target) + -- code to process each call_frequency (tick) set in spell_tiers +end + +function remove(Caster, Target) + -- code to remove the spell +end + diff --git a/server/Spells/Scout/Animist/Beastlord/SummonWarderReptile.lua b/server/Spells/Scout/Animist/Beastlord/SummonWarderReptile.lua new file mode 100644 index 000000000..926983bf8 --- /dev/null +++ b/server/Spells/Scout/Animist/Beastlord/SummonWarderReptile.lua @@ -0,0 +1,10 @@ +--[[ + Script Name : Spells/Scout/Animist/Beastlord/SummonWarderReptile.lua + Script Author : John Adams + Script Date : 2013.11.20 09:11:11 + Script Purpose : + : +--]] + +-- Info from spell_display_effects (remove from script when done) +-- Summons a reptile warder diff --git a/server/Spells/Scout/Animist/Beastlord/SummonWarderRodent.lua b/server/Spells/Scout/Animist/Beastlord/SummonWarderRodent.lua new file mode 100644 index 000000000..bb6f1d0e2 --- /dev/null +++ b/server/Spells/Scout/Animist/Beastlord/SummonWarderRodent.lua @@ -0,0 +1,25 @@ +--[[ + Script Name : Spells/Scout/Animist/Beastlord/SummonWarderRodent.lua + Script Author : John Adams + Script Date : 2013.08.12 08:08:59 + Script Purpose : + : +--]] + +function cast(Caster, Target) + -- code to cast the spell + Say(Caster, "Whoops! Guess this is not implemented yet!") + +-- Info from spell_display_effects (remove from script when done) +-- Summons a rodent warder + +end + +function tick(Caster, Target) + -- code to process each call_frequency (tick) set in spell_tiers +end + +function remove(Caster, Target) + -- code to remove the spell +end + diff --git a/server/Spells/Scout/Animist/Beastlord/SummonWarderSimian.lua b/server/Spells/Scout/Animist/Beastlord/SummonWarderSimian.lua new file mode 100644 index 000000000..348b91bc5 --- /dev/null +++ b/server/Spells/Scout/Animist/Beastlord/SummonWarderSimian.lua @@ -0,0 +1,25 @@ +--[[ + Script Name : Spells/Scout/Animist/Beastlord/SummonWarderSimian.lua + Script Author : John Adams + Script Date : 2013.08.12 08:08:01 + Script Purpose : + : +--]] + +function cast(Caster, Target) + -- code to cast the spell + Say(Caster, "Whoops! Guess this is not implemented yet!") + +-- Info from spell_display_effects (remove from script when done) +-- Summons a simian warder + +end + +function tick(Caster, Target) + -- code to process each call_frequency (tick) set in spell_tiers +end + +function remove(Caster, Target) + -- code to remove the spell +end + diff --git a/server/Spells/Scout/Animist/Beastlord/SummonWarderWarboar.lua b/server/Spells/Scout/Animist/Beastlord/SummonWarderWarboar.lua new file mode 100644 index 000000000..0a76febef --- /dev/null +++ b/server/Spells/Scout/Animist/Beastlord/SummonWarderWarboar.lua @@ -0,0 +1,25 @@ +--[[ + Script Name : Spells/Scout/Animist/Beastlord/SummonWarderWarboar.lua + Script Author : John Adams + Script Date : 2013.08.12 08:08:03 + Script Purpose : + : +--]] + +function cast(Caster, Target) + -- code to cast the spell + Say(Caster, "Whoops! Guess this is not implemented yet!") + +-- Info from spell_display_effects (remove from script when done) +-- Summons a war boar warder + +end + +function tick(Caster, Target) + -- code to process each call_frequency (tick) set in spell_tiers +end + +function remove(Caster, Target) + -- code to remove the spell +end + diff --git a/server/Spells/Scout/Animist/Beastlord/TameInsectWarder.lua b/server/Spells/Scout/Animist/Beastlord/TameInsectWarder.lua new file mode 100644 index 000000000..97a8ec5df --- /dev/null +++ b/server/Spells/Scout/Animist/Beastlord/TameInsectWarder.lua @@ -0,0 +1,31 @@ +--[[ + Script Name : Spells/Scout/Animist/Beastlord/TameInsectWarder.lua + Script Author : John Adams + Script Date : 2013.08.12 08:08:21 + Script Purpose : + : +--]] + +function cast(Caster, Target) + -- code to cast the spell + Say(Caster, "Whoops! Guess this is not implemented yet!") + +-- Info from spell_display_effects (remove from script when done) +-- Allows the beastlord to tame insects. +-- You cannot tame while you have a warder summoned. +-- Must be engaged in combat +-- If under 25% Health +-- Certain enemies cannot be tamed. +-- Does not affect Epic targets +-- Cannot be modified except by direct means + +end + +function tick(Caster, Target) + -- code to process each call_frequency (tick) set in spell_tiers +end + +function remove(Caster, Target) + -- code to remove the spell +end + diff --git a/server/Spells/Scout/Animist/Beastlord/TameWarder.lua b/server/Spells/Scout/Animist/Beastlord/TameWarder.lua new file mode 100644 index 000000000..73d450bed --- /dev/null +++ b/server/Spells/Scout/Animist/Beastlord/TameWarder.lua @@ -0,0 +1,31 @@ +--[[ + Script Name : Spells/Scout/Animist/Beastlord/TameWarder.lua + Script Author : John Adams + Script Date : 2013.08.12 08:08:22 + Script Purpose : + : +--]] + +function cast(Caster, Target) + -- code to cast the spell + Say(Caster, "Whoops! Guess this is not implemented yet!") + +-- Info from spell_display_effects (remove from script when done) +-- Allows the beastlord to tame specific creatures. +-- You cannot tame while you have a warder summoned. +-- Must be engaged in combat +-- If under 50% Health +-- Certain enemies cannot be tamed. +-- Does not affect Epic targets +-- Cannot be modified except by direct means + +end + +function tick(Caster, Target) + -- code to process each call_frequency (tick) set in spell_tiers +end + +function remove(Caster, Target) + -- code to remove the spell +end + diff --git a/server/Spells/Scout/Animist/Beastlord/TestSpiritualStancebr.lua b/server/Spells/Scout/Animist/Beastlord/TestSpiritualStancebr.lua new file mode 100644 index 000000000..2cd9fd8fb --- /dev/null +++ b/server/Spells/Scout/Animist/Beastlord/TestSpiritualStancebr.lua @@ -0,0 +1,10 @@ +--[[ + Script Name : Spells/Scout/Animist/Beastlord/TestSpiritualStancebr.lua + Script Author : neatz09 + Script Date : 2019.10.12 03:10:53 + Script Purpose : + : +--]] + +-- Info from spell_display_effects (remove from script when done) +-- Increases Potency of caster by 1.2% diff --git a/server/Spells/Scout/Animist/Beastlord/TruespiritClaws.lua b/server/Spells/Scout/Animist/Beastlord/TruespiritClaws.lua new file mode 100644 index 000000000..c142ba631 --- /dev/null +++ b/server/Spells/Scout/Animist/Beastlord/TruespiritClaws.lua @@ -0,0 +1,27 @@ +--[[ + Script Name : Spells/Scout/Animist/Beastlord/TruespiritClaws.lua + Script Author : John Adams + Script Date : 2013.08.12 08:08:48 + Script Purpose : + : +--]] + +function cast(Caster, Target) + -- code to cast the spell + Say(Caster, "Whoops! Guess this is not implemented yet!") + +-- Info from spell_display_effects (remove from script when done) +-- Increases savagery of caster by 20.0 +-- This effect cannot be critically applied. +-- Increases Multi Attack Chance of group members (AE) by 15.0 + +end + +function tick(Caster, Target) + -- code to process each call_frequency (tick) set in spell_tiers +end + +function remove(Caster, Target) + -- code to remove the spell +end + diff --git a/server/Spells/Scout/Animist/Beastlord/TruespiritVenom.lua b/server/Spells/Scout/Animist/Beastlord/TruespiritVenom.lua new file mode 100644 index 000000000..3016ec43d --- /dev/null +++ b/server/Spells/Scout/Animist/Beastlord/TruespiritVenom.lua @@ -0,0 +1,28 @@ +--[[ + Script Name : Spells/Scout/Animist/Beastlord/TruespiritVenom.lua + Script Author : John Adams + Script Date : 2013.08.12 08:08:58 + Script Purpose : + : +--]] + +function cast(Caster, Target) + -- code to cast the spell + Say(Caster, "Whoops! Guess this is not implemented yet!") + +-- Info from spell_display_effects (remove from script when done) +-- Inflicts 5 - 9 poison damage on target every 2 seconds +-- The effect of this ability grows based on Savagery and Feral Rampage level. +-- Inflicts 672 - 1121 poison damage on target +-- You must have your warder active to use this ability. + +end + +function tick(Caster, Target) + -- code to process each call_frequency (tick) set in spell_tiers +end + +function remove(Caster, Target) + -- code to remove the spell +end + diff --git a/server/Spells/Scout/Animist/Beastlord/UllasResolution.lua b/server/Spells/Scout/Animist/Beastlord/UllasResolution.lua new file mode 100644 index 000000000..25f761a2c --- /dev/null +++ b/server/Spells/Scout/Animist/Beastlord/UllasResolution.lua @@ -0,0 +1,30 @@ +--[[ + Script Name : Spells/Scout/Animist/Beastlord/UllasResolution.lua + Script Author : John Adams + Script Date : 2013.08.12 08:08:38 + Script Purpose : + : +--]] + +function cast(Caster, Target) + -- code to cast the spell + Say(Caster, "Whoops! Guess this is not implemented yet!") + +-- Info from spell_display_effects (remove from script when done) +-- Heals group members (AE) for 4 - 6 +-- Heals group members (AE) for 1 - 2 every 3 seconds +-- The effect of this ability grows based on Savagery and Spirituality level. +-- Reduces all damage done to group members (AE) by 4% +-- Inflicts 411 - 686 melee damage on target encounter +-- You must have your warder active to use this ability. + +end + +function tick(Caster, Target) + -- code to process each call_frequency (tick) set in spell_tiers +end + +function remove(Caster, Target) + -- code to remove the spell +end + diff --git a/server/Spells/Scout/Animist/Beastlord/VenomFangs.lua b/server/Spells/Scout/Animist/Beastlord/VenomFangs.lua new file mode 100644 index 000000000..adf1d9ede --- /dev/null +++ b/server/Spells/Scout/Animist/Beastlord/VenomFangs.lua @@ -0,0 +1,29 @@ +--[[ + Script Name : Spells/Scout/Animist/Beastlord/VenomFangs.lua + Script Author : John Adams + Script Date : 2013.08.12 08:08:24 + Script Purpose : + : +--]] + +function cast(Caster, Target) + -- code to cast the spell + Say(Caster, "Whoops! Guess this is not implemented yet!") + +-- Info from spell_display_effects (remove from script when done) +-- The effect of this ability grows based on Savagery and Feral Rampage level. +-- Increases Multi-Attack by 20-44% +-- Inflicts 916 - 1527 piercing damage on target +-- Must be flanking or behind +-- You must have your warder active to use this ability. + +end + +function tick(Caster, Target) + -- code to process each call_frequency (tick) set in spell_tiers +end + +function remove(Caster, Target) + -- code to remove the spell +end + diff --git a/server/Spells/Scout/Animist/Beastlord/VineNet.lua b/server/Spells/Scout/Animist/Beastlord/VineNet.lua new file mode 100644 index 000000000..ffd7dca05 --- /dev/null +++ b/server/Spells/Scout/Animist/Beastlord/VineNet.lua @@ -0,0 +1,29 @@ +--[[ + Script Name : Spells/Scout/Animist/Beastlord/VineNet.lua + Script Author : John Adams + Script Date : 2013.08.12 08:08:13 + Script Purpose : + : +--]] + +function cast(Caster, Target) + -- code to cast the spell + Say(Caster, "Whoops! Guess this is not implemented yet!") + +-- Info from spell_display_effects (remove from script when done) +-- Applies Snare. Lasts for 24.0 seconds. +-- Slows target by 28.1% +-- 5% chance to dispel when target receives hostile action +-- 5% chance to dispel when target takes damage +-- Decreases Mitigation of target vs elemental and noxious damage by 91 + +end + +function tick(Caster, Target) + -- code to process each call_frequency (tick) set in spell_tiers +end + +function remove(Caster, Target) + -- code to remove the spell +end + diff --git a/server/Spells/Scout/Animist/Beastlord/WildGoring.lua b/server/Spells/Scout/Animist/Beastlord/WildGoring.lua new file mode 100644 index 000000000..583032745 --- /dev/null +++ b/server/Spells/Scout/Animist/Beastlord/WildGoring.lua @@ -0,0 +1,28 @@ +--[[ + Script Name : Spells/Scout/Animist/Beastlord/WildGoring.lua + Script Author : John Adams + Script Date : 2013.08.12 08:08:26 + Script Purpose : + : +--]] + +function cast(Caster, Target) + -- code to cast the spell + Say(Caster, "Whoops! Guess this is not implemented yet!") + +-- Info from spell_display_effects (remove from script when done) +-- The effect of this ability grows based on Savagery and Spirituality level. +-- Increases Multi-Attack Chance of group members (AE) by 10-22% +-- Inflicts 448 - 747 melee damage on target encounter +-- You must have your warder active to use this ability. + +end + +function tick(Caster, Target) + -- code to process each call_frequency (tick) set in spell_tiers +end + +function remove(Caster, Target) + -- code to remove the spell +end + diff --git a/server/Spells/Scout/Animist/MasterofBeasts.lua b/server/Spells/Scout/Animist/MasterofBeasts.lua new file mode 100644 index 000000000..3d46ff0e3 --- /dev/null +++ b/server/Spells/Scout/Animist/MasterofBeasts.lua @@ -0,0 +1,31 @@ +--[[ + Script Name : Spells/Scout/Animist/MasterofBeasts.lua + Script Author : John Adams + Script Date : 2013.08.12 08:08:01 + Script Purpose : + : +--]] + +function cast(Caster, Target) + -- code to cast the spell + Say(Caster, "Whoops! Guess this is not implemented yet!") + +-- Info from spell_display_effects (remove from script when done) +-- Reduces the cost of Feral Rampage and Spirituality by 15% +-- On any combat or spell hit this spell may cast Primal Rage on caster. Lasts for 12.0 seconds. Triggers about 2.4 times per minute. +-- Increases Crit Bonus of pet by 20.0% +-- Prevents AOE on pet (except when direct) +-- Cannot be modified except by direct means +-- Increases the damage, ward or heal amount of Primals by 20%. +-- Cannot be modified except by direct means + +end + +function tick(Caster, Target) + -- code to process each call_frequency (tick) set in spell_tiers +end + +function remove(Caster, Target) + -- code to remove the spell +end + diff --git a/server/Spells/Scout/Animist/SharpenedClaws.lua b/server/Spells/Scout/Animist/SharpenedClaws.lua new file mode 100644 index 000000000..90ba646da --- /dev/null +++ b/server/Spells/Scout/Animist/SharpenedClaws.lua @@ -0,0 +1,29 @@ +--[[ + Script Name : Spells/Scout/Animist/SharpenedClaws.lua + Script Author : John Adams + Script Date : 2013.08.12 08:08:00 + Script Purpose : + : +--]] + +function cast(Caster, Target) + -- code to cast the spell + Say(Caster, "Whoops! Guess this is not implemented yet!") + +-- Info from spell_display_effects (remove from script when done) +-- Inflicts 29 - 36 piercing damage on target +-- Interrupts target +-- On any combat or spell hit this spell will cast Sharpened Claws on target of attack. +-- Inflicts 25 - 41 piercing damage on target +-- Grants a total of 1 trigger of the spell. + +end + +function tick(Caster, Target) + -- code to process each call_frequency (tick) set in spell_tiers +end + +function remove(Caster, Target) + -- code to remove the spell +end + diff --git a/server/Spells/Scout/Animist/ShrinkWarder.lua b/server/Spells/Scout/Animist/ShrinkWarder.lua new file mode 100644 index 000000000..4592cd952 --- /dev/null +++ b/server/Spells/Scout/Animist/ShrinkWarder.lua @@ -0,0 +1,26 @@ +--[[ + Script Name : Spells/Scout/Animist/ShrinkWarder.lua + Script Author : John Adams + Script Date : 2013.08.12 08:08:00 + Script Purpose : + : +--]] + +function cast(Caster, Target) + -- code to cast the spell + Say(Caster, "Whoops! Guess this is not implemented yet!") + +-- Info from spell_display_effects (remove from script when done) +-- Applies Shrink Servant to qualifying pets. +-- Shrinks target by 35.0% + +end + +function tick(Caster, Target) + -- code to process each call_frequency (tick) set in spell_tiers +end + +function remove(Caster, Target) + -- code to remove the spell +end + diff --git a/server/Spells/Scout/Animist/Spiritshroud.lua b/server/Spells/Scout/Animist/Spiritshroud.lua new file mode 100644 index 000000000..812092c11 --- /dev/null +++ b/server/Spells/Scout/Animist/Spiritshroud.lua @@ -0,0 +1,26 @@ +--[[ + Script Name : Spells/Scout/Animist/Spiritshroud.lua + Script Author : John Adams + Script Date : 2013.08.12 08:08:59 + Script Purpose : + : +--]] + +function cast(Caster, Target) + -- code to cast the spell + Say(Caster, "Whoops! Guess this is not implemented yet!") + +-- Info from spell_display_effects (remove from script when done) +-- Grants stealth to caster +-- Suspends caster's movement speed enhancements + +end + +function tick(Caster, Target) + -- code to process each call_frequency (tick) set in spell_tiers +end + +function remove(Caster, Target) + -- code to remove the spell +end + diff --git a/server/Spells/Scout/Animist/StareDown.lua b/server/Spells/Scout/Animist/StareDown.lua new file mode 100644 index 000000000..c6b3f7c38 --- /dev/null +++ b/server/Spells/Scout/Animist/StareDown.lua @@ -0,0 +1,30 @@ +--[[ + Script Name : Spells/Scout/Animist/StareDown.lua + Script Author : John Adams + Script Date : 2013.08.12 08:08:01 + Script Purpose : + : +--]] + +function cast(Caster, Target) + -- code to cast the spell + Say(Caster, "Whoops! Guess this is not implemented yet!") + +-- Info from spell_display_effects (remove from script when done) +-- Stuns target +-- If Target is not Epic +-- Must be engaged in combat +-- If under 50% Health +-- Only affects targets that can be tamed. +-- Does not affect Epic targets + +end + +function tick(Caster, Target) + -- code to process each call_frequency (tick) set in spell_tiers +end + +function remove(Caster, Target) + -- code to remove the spell +end + diff --git a/server/Spells/Scout/Assail.lua b/server/Spells/Scout/Assail.lua new file mode 100644 index 000000000..55398cce6 --- /dev/null +++ b/server/Spells/Scout/Assail.lua @@ -0,0 +1,26 @@ +--[[ + Script Name : Spells/Scout/Assail.lua + Script Author : John Adams + Script Date : 2013.08.11 02:08:06 + Script Purpose : + : +--]] + +function cast(Caster, Target) + -- code to cast the spell + Say(Caster, "Whoops! Guess this is not implemented yet!") + +-- Info from spell_display_effects (remove from script when done) +-- Inflicts 45 - 76 melee damage on target +-- You must be sneaking to use this ability. + +end + +function tick(Caster, Target) + -- code to process each call_frequency (tick) set in spell_tiers +end + +function remove(Caster, Target) + -- code to remove the spell +end + diff --git a/server/Spells/Scout/Bard/BriasInspiringBallad.lua b/server/Spells/Scout/Bard/BriasInspiringBallad.lua new file mode 100644 index 000000000..c97847dec --- /dev/null +++ b/server/Spells/Scout/Bard/BriasInspiringBallad.lua @@ -0,0 +1,18 @@ +--[[ + Script Name : Spells/Scout/Bard/BriasInspiringBallad.lua + Script Author : theFoof + Script Date : 2013.12.08 09:08:55 + Script Purpose : + : +--]] + +function cast(Caster, Target, RegenAmt) +-- Increases In-Combat Power Regeneration of group members (AE) by 3.8 + + AddSpellBonus(Target, 601, RegenAmt) +end + +function remove(Caster, Target) + RemoveSpellBonus(Target) +end + diff --git a/server/Spells/Scout/Bard/Dirge/CacophonyofBlades.lua b/server/Spells/Scout/Bard/Dirge/CacophonyofBlades.lua new file mode 100644 index 000000000..d2695c98a --- /dev/null +++ b/server/Spells/Scout/Bard/Dirge/CacophonyofBlades.lua @@ -0,0 +1,27 @@ +--[[ + Script Name : Spells/Scout/Bard/Dirge/CacophonyofBlades.lua + Script Author : John Adams + Script Date : 2013.08.11 09:08:57 + Script Purpose : + : +--]] + +function cast(Caster, Target) + -- code to cast the spell + Say(Caster, "Whoops! Guess this is not implemented yet!") + +-- Info from spell_display_effects (remove from script when done) +-- On a hit this spell will cast Blade Chime on target of attack. +-- Inflicts 53 - 88 disease damage on target +-- Increases Attack Speed of group members (AE) by 30.5 + +end + +function tick(Caster, Target) + -- code to process each call_frequency (tick) set in spell_tiers +end + +function remove(Caster, Target) + -- code to remove the spell +end + diff --git a/server/Spells/Scout/Bard/Dirge/ClarasChaoticCacophony.lua b/server/Spells/Scout/Bard/Dirge/ClarasChaoticCacophony.lua new file mode 100644 index 000000000..0a323cc81 --- /dev/null +++ b/server/Spells/Scout/Bard/Dirge/ClarasChaoticCacophony.lua @@ -0,0 +1,13 @@ +--[[ + Script Name : Spells/Scout/Bard/Dirge/ClarasChaoticCacophony.lua + Script Author : neatz09 + Script Date : 2019.10.12 10:10:43 + Script Purpose : + : +--]] + +-- Info from spell_display_effects (remove from script when done) +-- Applies Empowerment of Chaos. Lasts for 1 minute. +-- Increases Fervor of group members (AE) by 3.1 +-- Cannot be modified except by direct means +-- Decreases Mitigation of target encounter vs physical damage by 216 diff --git a/server/Spells/Scout/Bard/Dirge/DarksongBlade.lua b/server/Spells/Scout/Bard/Dirge/DarksongBlade.lua new file mode 100644 index 000000000..89465de21 --- /dev/null +++ b/server/Spells/Scout/Bard/Dirge/DarksongBlade.lua @@ -0,0 +1,34 @@ +--[[ + Script Name : Spells/Scout/Bard/Dirge/DarksongBlade.lua + Script Author : theFoof + Script Date : 2013.12.08 + Script Purpose : + : +--]] + +function cast(Caster, Target, DDType1, DmgLow1, DmgHigh1, DDType2, DmgLow2, DmgHigh2, DoTType, DotAmt) +-- Info from spell_display_effects (remove from script when done) +-- Inflicts disease damage on target +-- Inflicts disease damage on target +-- Inflicts disease damage on target instantly and every 6 seconds +-- NOTE: If one of these attacks misses, the rest after miss automaticly + + SpellDamage(Target, DDType1, DmgLow1, DmgHigh1) + + if LastSpellAttackHit() then + SpellDamage(Target, DDType2, DmgLow2, DmgHigh2) + end + if LastSpellAttackHit() then + SpellDamage(Target, DoTType, DotAmt) + end +end + +function tick(Caster, Target, DDType1, DmgLow1, DmgHigh1, DDType2, DmgLow2, DmgHigh2, DoTType, DotAmt) + if LastSpellAttackHit() then + SpellDamage(Target, DoTType, DotAmt) + end +end + +function remove(Caster, Target) +end + diff --git a/server/Spells/Scout/Bard/Dirge/DarosDullBlade.lua b/server/Spells/Scout/Bard/Dirge/DarosDullBlade.lua new file mode 100644 index 000000000..cde1c5984 --- /dev/null +++ b/server/Spells/Scout/Bard/Dirge/DarosDullBlade.lua @@ -0,0 +1,30 @@ +--[[ + Script Name : Spells/Scout/Bard/Dirge/DarosDullBlade.lua + Script Author : theFoof + Script Date : 2014.2.20 + Script Purpose : + : +--]] + +function precast(Caster, Target) + if IsFlanking(Caster, Target) then + return true + else + SendMessage(Caster, "You must be flanking or behind your target to use this ability!", "yellow") + return false + end +end + +function cast(Caster, Target, DmgType, DmgLow, DmgHigh, DPS) +-- Inflicts 24 - 41 melee damage on target +-- Decreases Damage Per Second of target by 10.9 +-- Must be flanking or behind + + SpellDamage(Target, DmgType, DmgLow, DmgHigh) + AddSpellBonus(Target, 629, DPS) +end + +function remove(Caster, Target) + RemoveSpellBonus() +end + diff --git a/server/Spells/Scout/Bard/Dirge/DarosSorrowfulDirge.lua b/server/Spells/Scout/Bard/Dirge/DarosSorrowfulDirge.lua new file mode 100644 index 000000000..07703127f --- /dev/null +++ b/server/Spells/Scout/Bard/Dirge/DarosSorrowfulDirge.lua @@ -0,0 +1,11 @@ +--[[ + Script Name : Spells/Scout/Bard/Dirge/DarosSorrowfulDirge.lua + Script Author : neatz09 + Script Date : 2019.10.08 02:10:09 + Script Purpose : + : +--]] + +-- Info from spell_display_effects (remove from script when done) +-- Decreases Haste of target encounter by 11.7 +-- Slows target encounter by 16.2% diff --git a/server/Spells/Scout/Bard/Dirge/DeadCalm.lua b/server/Spells/Scout/Bard/Dirge/DeadCalm.lua new file mode 100644 index 000000000..4c3ad3516 --- /dev/null +++ b/server/Spells/Scout/Bard/Dirge/DeadCalm.lua @@ -0,0 +1,11 @@ +--[[ + Script Name : Spells/Scout/Bard/Dirge/DeadCalm.lua + Script Author : neatz09 + Script Date : 2019.10.12 10:10:14 + Script Purpose : + : +--]] + +-- Info from spell_display_effects (remove from script when done) +-- On a combat hit this spell has a 12% chance to cast Crypt's Revenge on target of attack. +-- Inflicts 30 - 51 disease damage on target diff --git a/server/Spells/Scout/Bard/Dirge/DeathsDoor.lua b/server/Spells/Scout/Bard/Dirge/DeathsDoor.lua new file mode 100644 index 000000000..43c99bacb --- /dev/null +++ b/server/Spells/Scout/Bard/Dirge/DeathsDoor.lua @@ -0,0 +1,32 @@ +--[[ + Script Name : Spells/Scout/Bard/Dirge/DeathsDoor.lua + Script Author : theFoof + Script Date : 2013.12.08 08:12:24 + Script Purpose : + : +--]] + +-- Increases AGI of caster +-- When damaged this spell has a chance to cast Death Barrier on target's attacker. +-- Inflicts disease damage on target +-- Adds to base avoidance. +-- Increases Mitigation of caster vs physical damage +-- Increases Mitigation of caster vs elemental, noxious and arcane damage + +function cast(Caster, Target, AgiAmt, ProcChance, DDType, DmgLow, DmgHigh, AvoidAmt, PhysMit, EleNoxMit) + AddSpellBonus(Target, 2, AgiAmt) + AddProc(Target, 2, ProcChance) + AddSpellBonus(Target, 696, AvoidAmt) + AddSpellBonus(Target, 200, PhysMit) + AddSpellBonus(Target, 201, EleNoxMit) + AddSpellBonus(Target, 202, EleNoxMit) +end + +function proc(Caster, Target, ProcType, AgiAmt, ProcChance, DDType, DmgLow, DmgHigh, AvoidAmt, PhysMit, EleNoxMit) + ProcDamage(Caster, Target, "Death Barrier", DDType, DmgLow, DmgHigh) +end + +function remove(Caster, Target) + RemoveSpellBonus(Caster) + RemoveProc(Caster) +end diff --git a/server/Spells/Scout/Bard/Dirge/ElegyatDeathsDoor.lua b/server/Spells/Scout/Bard/Dirge/ElegyatDeathsDoor.lua new file mode 100644 index 000000000..039bbca74 --- /dev/null +++ b/server/Spells/Scout/Bard/Dirge/ElegyatDeathsDoor.lua @@ -0,0 +1,39 @@ +--[[ + Script Name : Spells/Scout/Bard/Dirge/ElegyatDeathsDoor.lua + Script Author : John Adams + Script Date : 2013.08.11 09:08:04 + Script Purpose : + : +--]] + +function cast(Caster, Target) + -- code to cast the spell + Say(Caster, "Whoops! Guess this is not implemented yet!") + +-- Info from spell_display_effects (remove from script when done) +-- Applies Revived Sickness on termination. Lasts for 2 minutes. +-- Decreases Toughness of target by 123.0 +-- Decreases Lethality of target by 123.0 +-- Decreases All Attributes of target by 20.0% +-- If not between levels 1 - 6 +-- Decreases Attack Speed of target by 20.0 +-- If not between levels 1 - 6 +-- Decreases Attack Speed of target by 5.0 +-- If between levels 1 - 6 +-- Decreases All Attributes of target by 5.0% +-- If between levels 1 - 6 +-- Applies Elegy on termination. +-- Heals target for 27.6% of max health +-- Resurrects target with 10% health and power +-- If outside an arena + +end + +function tick(Caster, Target) + -- code to process each call_frequency (tick) set in spell_tiers +end + +function remove(Caster, Target) + -- code to remove the spell +end + diff --git a/server/Spells/Scout/Bard/Dirge/ElegyofAwakening.lua b/server/Spells/Scout/Bard/Dirge/ElegyofAwakening.lua new file mode 100644 index 000000000..1145dde2b --- /dev/null +++ b/server/Spells/Scout/Bard/Dirge/ElegyofAwakening.lua @@ -0,0 +1,39 @@ +--[[ + Script Name : Spells/Scout/Bard/Dirge/ElegyofAwakening.lua + Script Author : John Adams + Script Date : 2013.08.11 09:08:43 + Script Purpose : + : +--]] + +function cast(Caster, Target) + -- code to cast the spell + Say(Caster, "Whoops! Guess this is not implemented yet!") + +-- Info from spell_display_effects (remove from script when done) +-- Resurrects target with 10% health and power +-- Applies Elegy on termination. +-- Heals target for 27.6% of max health +-- Applies Revived Sickness on termination. Lasts for 2 minutes. +-- Decreases Toughness of target by 145.0 +-- Decreases Lethality of target by 145.0 +-- Decreases All Attributes of target by 20.0% +-- If not between levels 1 - 6 +-- Decreases Attack Speed of target by 20.0 +-- If not between levels 1 - 6 +-- Decreases Attack Speed of target by 5.0 +-- If between levels 1 - 6 +-- Decreases All Attributes of target by 5.0% +-- If between levels 1 - 6 +-- If outside an arena + +end + +function tick(Caster, Target) + -- code to process each call_frequency (tick) set in spell_tiers +end + +function remove(Caster, Target) + -- code to remove the spell +end + diff --git a/server/Spells/Scout/Bard/Dirge/GarsinsFuneralMarch.lua b/server/Spells/Scout/Bard/Dirge/GarsinsFuneralMarch.lua new file mode 100644 index 000000000..ae77c4583 --- /dev/null +++ b/server/Spells/Scout/Bard/Dirge/GarsinsFuneralMarch.lua @@ -0,0 +1,13 @@ +--[[ + Script Name : Spells/Scout/Bard/Dirge/GarsinsFuneralMarch.lua + Script Author : neatz09 + Script Date : 2019.10.12 10:10:40 + Script Purpose : + : +--]] + +-- Info from spell_display_effects (remove from script when done) +-- Makes target afraid +-- 30% chance to dispel when target takes damage +-- Does not affect Epic targets +-- Resistibility increases against targets higher than level 29. diff --git a/server/Spells/Scout/Bard/Dirge/Gravitas.lua b/server/Spells/Scout/Bard/Dirge/Gravitas.lua new file mode 100644 index 000000000..f52a10d64 --- /dev/null +++ b/server/Spells/Scout/Bard/Dirge/Gravitas.lua @@ -0,0 +1,26 @@ +--[[ + Script Name : Spells/Scout/Bard/Dirge/Gravitas.lua + Script Author : John Adams + Script Date : 2013.08.11 09:08:25 + Script Purpose : + : +--]] + +function cast(Caster, Target) + -- code to cast the spell + Say(Caster, "Whoops! Guess this is not implemented yet!") + +-- Info from spell_display_effects (remove from script when done) +-- Increases the resurrect restoration amount of target ally by 18% +-- Increases the healing and ward of target ally by 18% + +end + +function tick(Caster, Target) + -- code to process each call_frequency (tick) set in spell_tiers +end + +function remove(Caster, Target) + -- code to remove the spell +end + diff --git a/server/Spells/Scout/Bard/Dirge/HarlsRousingTune.lua b/server/Spells/Scout/Bard/Dirge/HarlsRousingTune.lua new file mode 100644 index 000000000..344285f4f --- /dev/null +++ b/server/Spells/Scout/Bard/Dirge/HarlsRousingTune.lua @@ -0,0 +1,18 @@ +--[[ + Script Name : Spells/Scout/Bard/Dirge/HarlsRousingTune.lua + Script Author : theFoof + Script Date : 2013.08.11 09:08:41 + Script Purpose : + : +--]] + + +function cast(Caster, Target, StatAmount, AvoidanceAmt) + AddSpellBonus(Caster, 0, StatAmount) + AddSpellBonus(Caster, 2, StatAmount) + AddSpellBonus(Caster, 696, AvoidanceAmt) +end + +function remove(Caster, Target) + RemoveSpellBonus(Caster) +end diff --git a/server/Spells/Scout/Bard/Dirge/HauntingStrike.lua b/server/Spells/Scout/Bard/Dirge/HauntingStrike.lua new file mode 100644 index 000000000..5589caad5 --- /dev/null +++ b/server/Spells/Scout/Bard/Dirge/HauntingStrike.lua @@ -0,0 +1,47 @@ +--[[ + Script Name : dd_debuff.lua + Script Purpose : Generic damage + 1 effect script + Script Author : John Adams + Script Date : 2008.12.04 + Script Notes : Parameter 4 and 5 are the debuff type and value (param 6 if value is a range) +--]] + +function cast(Caster, Target, DDType, MinDDVal, MaxDDVal, DebuffType, MinDebuffVal, MaxDebuffVal) + + -- Debuff component + -- Determine if there is a range to effect values + if MaxDebuffVal ~= nil and MinDebuffVal < MaxDebuffVal then + -- JA: for debuff randoms (if any), need to to math.random with precision - I think this function rounds up? + DebuffValue = math.random(MinDebuffVal, MaxDebuffVal) + else + DebuffValue = MinDebuffVal + end + + -- Determine DebuffType - either a DamageType or a String value passed as param 4 + if DebuffType == "Attack" then + -- ModifyAttackSpeed(Target, -DebuffValue) + elseif DebuffType == "DPS" then + -- ModifyDPS(Target, -DebuffValue) + elseif DebuffType == "Disease" then + -- ModifyDisease(Target, -DebuffValue) + elseif DebuffType == "Power" then + ModifyPower(Target, -DebuffValue) + elseif DebuffType == "Knockback" then + SpawnSet(Target, "visual_state", "10900") + end + + -- DD component (instant damage) + if MaxDDVal ~= nil and MinDDVal < MaxDDVal then + SpellDamage(Target, DDType, math.random(MinDDVal, MaxDDVal)) + else + SpellDamage(Target, DDType, MinDDVal) + end +end + +function tick(Caster, Target, DDType, MinDDVal, MaxDDVal, DebuffType, MinDebuffVal, MaxDebuffVal) + +end + +function remove(Caster, Target, DDType, MinDDVal, MaxDDVal, DebuffType, MinDebuffVal, MaxDebuffVal) + +end diff --git a/server/Spells/Scout/Bard/Dirge/HowlofDeath.lua b/server/Spells/Scout/Bard/Dirge/HowlofDeath.lua new file mode 100644 index 000000000..d00037519 --- /dev/null +++ b/server/Spells/Scout/Bard/Dirge/HowlofDeath.lua @@ -0,0 +1,24 @@ +--[[ + Script Name : Spells/Scout/Bard/Dirge/HowlofDeath.lua + Script Author : neatz09 + Script Date : 2019.09.29 10:09:59 + Script Purpose : + : +--]] + +-- Info from spell_display_effects (remove from script when done) +-- Inflicts 61 - 101 disease damage on target + +function cast(Caster, Target, DmgType, MinVal, MaxVal, MinHeal, MaxHeal) + if MaxVal ~= nil and MinVal < MaxVal then + SpellDamage(Target, DmgType, math.random(MinVal, MaxVal)) + else + SpellDamage(Target, DmgType, MinVal) + end + +-- Heals caster for 40 - 67 + SpellHeal("Heal", MinHeal, MaxHeal) + +end + + diff --git a/server/Spells/Scout/Bard/Dirge/HymnofHorror.lua b/server/Spells/Scout/Bard/Dirge/HymnofHorror.lua new file mode 100644 index 000000000..10c210459 --- /dev/null +++ b/server/Spells/Scout/Bard/Dirge/HymnofHorror.lua @@ -0,0 +1,31 @@ +--[[ + Script Name : Spells/Scout/Bard/Dirge/HymnofHorror.lua + Script Author : John Adams + Script Date : 2013.08.11 09:08:06 + Script Purpose : + : +--]] + +function cast(Caster, Target) + -- code to cast the spell + Say(Caster, "Whoops! Guess this is not implemented yet!") + +-- Info from spell_display_effects (remove from script when done) +-- Interrupts targets in Area of Effect +-- 6% chance to apply Knockdown. Lasts for 1.5 seconds. +-- Stuns target +-- Throws target back +-- Blurs vision of target +-- Does not affect Epic targets +-- Blurs vision of targets in Area of Effect + +end + +function tick(Caster, Target) + -- code to process each call_frequency (tick) set in spell_tiers +end + +function remove(Caster, Target) + -- code to remove the spell +end + diff --git a/server/Spells/Scout/Bard/Dirge/HyransSeethingSonata.lua b/server/Spells/Scout/Bard/Dirge/HyransSeethingSonata.lua new file mode 100644 index 000000000..eb832f6df --- /dev/null +++ b/server/Spells/Scout/Bard/Dirge/HyransSeethingSonata.lua @@ -0,0 +1,11 @@ +--[[ + Script Name : Spells/Scout/Bard/Dirge/HyransSeethingSonata.lua + Script Author : neatz09 + Script Date : 2019.10.12 10:10:03 + Script Purpose : + : +--]] + +-- Info from spell_display_effects (remove from script when done) +-- Increases Hate Gain of target by 14.0% +-- Increases Aggression of target by 8.6 diff --git a/server/Spells/Scout/Bard/Dirge/JaelsDreadfulDeprivation.lua b/server/Spells/Scout/Bard/Dirge/JaelsDreadfulDeprivation.lua new file mode 100644 index 000000000..2e8c905cc --- /dev/null +++ b/server/Spells/Scout/Bard/Dirge/JaelsDreadfulDeprivation.lua @@ -0,0 +1,15 @@ +--[[ + Script Name : Spells/Scout/Bard/Dirge/JaelsDreadfulDeprivation.lua + Script Author : neatz09 + Script Date : 2019.10.12 10:10:32 + Script Purpose : + : +--]] + +-- Info from spell_display_effects (remove from script when done) +-- Inflicts 24 - 41 disease damage on target +-- Inflicts 24 - 41 disease damage on target +-- Roots target +-- If Target is not Epic +-- If weapon equipped in Ranged +-- Resistibility increases against targets higher than level 29. diff --git a/server/Spells/Scout/Bard/Dirge/JaelsMysteriousMettle.lua b/server/Spells/Scout/Bard/Dirge/JaelsMysteriousMettle.lua new file mode 100644 index 000000000..bdd1fda1d --- /dev/null +++ b/server/Spells/Scout/Bard/Dirge/JaelsMysteriousMettle.lua @@ -0,0 +1,17 @@ +--[[ + Script Name : Spells/Scout/Bard/Dirge/JaelsMysteriousMettle.lua + Script Author : theFoof + Script Date : 2013.12.09 12:12:20 + Script Purpose : + : +--]] + +-- Increases Parry of group members (AE) by 7.3 + +function cast(Caster, Target, BuffAmt) + AddSkillBonus(Target, GetSkillIDByName("Parry"), BuffAmt) +end + +function remove(Caster, Target) + RemoveSkillBonus(Target) +end diff --git a/server/Spells/Scout/Bard/Dirge/JarolsSorrowfulRequiem.lua b/server/Spells/Scout/Bard/Dirge/JarolsSorrowfulRequiem.lua new file mode 100644 index 000000000..3b45d9a50 --- /dev/null +++ b/server/Spells/Scout/Bard/Dirge/JarolsSorrowfulRequiem.lua @@ -0,0 +1,17 @@ +--[[ + Script Name : Spells/Scout/Bard/Dirge/JarolsSorrowfulRequiem.lua + Script Author : theFoof + Script Date : 2013.12.08 + Script Purpose : + : +--]] + +function cast(Caster, Target, DDType, DmgLow, DmgHigh) +-- Inflicts disease damage on target encounter + + SpellDamage(Target, DDType, DmgLow, DmgHigh) +end + +function remove(Caster, Target) +end + diff --git a/server/Spells/Scout/Bard/Dirge/LanetsExcruciatingScream.lua b/server/Spells/Scout/Bard/Dirge/LanetsExcruciatingScream.lua new file mode 100644 index 000000000..1ec540fc9 --- /dev/null +++ b/server/Spells/Scout/Bard/Dirge/LanetsExcruciatingScream.lua @@ -0,0 +1,24 @@ +--[[ + Script Name : Spells/Scout/Bard/Dirge/LanetsExcruciatingScream.lua + Script Author : theFoof + Script Date : 2013.12.08 + Script Purpose : + : +--]] + +function cast(Caster, Target, DmgType, DmgLow, DmgHigh) +-- Dazes target +-- If Target is not Epic +-- Inflicts disease damage on target +-- Resistibility increases against targets higher than level 29. (need to add code for this eventually) + + if not IsEpic(Target) then + AddControlEffect(Target, 3) + end +end + +function remove(Caster, Target, DmgType, DmgLow, DmgHigh) + RemoveControlEffect(Target, 3) + SpellDamage(Target, DmgType, DmgLow, DmgHigh) +end + diff --git a/server/Spells/Scout/Bard/Dirge/LudasNefariousWail.lua b/server/Spells/Scout/Bard/Dirge/LudasNefariousWail.lua new file mode 100644 index 000000000..7139889a6 --- /dev/null +++ b/server/Spells/Scout/Bard/Dirge/LudasNefariousWail.lua @@ -0,0 +1,15 @@ +--[[ + Script Name : Spells/Scout/Bard/Dirge/LudasNefariousWail.lua + Script Author : theFoof + Script Date : 2013.12.8 + Script Purpose : + : +--]] + +function cast(Caster, Target, DmgType, DmgLow, DmgHigh) + SpellDamage(Target, DmgType, DmgLow, DmgHigh) +end + +function remove(Caster, Target) +end + diff --git a/server/Spells/Scout/Bard/Dirge/MarchofBlades.lua b/server/Spells/Scout/Bard/Dirge/MarchofBlades.lua new file mode 100644 index 000000000..9101c974d --- /dev/null +++ b/server/Spells/Scout/Bard/Dirge/MarchofBlades.lua @@ -0,0 +1,16 @@ +--[[ + Script Name : Spells/Scout/Bard/Dirge/MarchofBlades.lua + Script Author : neatz09 + Script Date : 2019.10.08 02:10:15 + Script Purpose : + : +--]] + +-- Info from spell_display_effects (remove from script when done) +-- On a melee hit this spell may cast Intrepid Strike on caster. Lasts for 12.0 seconds. Triggers about 2.4 times per minute. +-- Caster has a 25.0% chance of having one of their weapons' auto-attack strike the target multiple times. +-- Increases Potency of caster by 25.0% +-- Cannot be modified except by direct means +-- Riana's Relentless Tune will improve combat art damage by 10% +-- Applies the effects of Cacophony of Blades to all raid members. +-- Cannot be modified except by direct means diff --git a/server/Spells/Scout/Bard/Dirge/MisfortunesKiss.lua b/server/Spells/Scout/Bard/Dirge/MisfortunesKiss.lua new file mode 100644 index 000000000..1cf84965c --- /dev/null +++ b/server/Spells/Scout/Bard/Dirge/MisfortunesKiss.lua @@ -0,0 +1,31 @@ +--[[ + Script Name : Spells/Scout/Bard/Dirge/MisfortunesKiss.lua + Script Author : theFoof + Script Date : 2013.12.8 + Script Purpose : + : +--]] + + +function precast(Caster, Target) + if IsStealthed(Caster) then + return true + end + SendMessage(Caster, "You must be sneaking to use this ability.", "yellow") + return false, 0 +end + +function cast(Caster, Target, DmgType, DmgLow, DmgHigh, WisAmt) +-- Info from spell_display_effects (remove from script when done) +-- Inflicts 18 - 30 melee damage on target +-- Decreases WIS of target by 5.0 +-- You must be sneaking to use this ability. + + SpellDamage(Target, DmgType, DmgLow, DmgHigh) + AddSpellBonus(Target, 3, WisAmt) +end + + +function remove(Caster, Target) + RemoveSpellBonus(Target) +end diff --git a/server/Spells/Scout/Bard/Dirge/NoxiousSymphony.lua b/server/Spells/Scout/Bard/Dirge/NoxiousSymphony.lua new file mode 100644 index 000000000..f15db2f34 --- /dev/null +++ b/server/Spells/Scout/Bard/Dirge/NoxiousSymphony.lua @@ -0,0 +1,17 @@ +--[[ + Script Name : Spells/Scout/Bard/Dirge/NoxiousSymphony.lua + Script Author : theFoof + Script Date : 2013.12.09 05:12:41 + Script Purpose : + : +--]] + +-- Increases Mitigation of raid and group members (AE) vs noxious damage by 252 + +function cast(Caster, Target, NoxAmt) + AddSpellBonus(Target, 202, NoxAmt) +end + +function remove(Caster, Target) + RemoveSpellBonus(Target) +end \ No newline at end of file diff --git a/server/Spells/Scout/Bard/Dirge/OrationofSacrifice.lua b/server/Spells/Scout/Bard/Dirge/OrationofSacrifice.lua new file mode 100644 index 000000000..7a65f3946 --- /dev/null +++ b/server/Spells/Scout/Bard/Dirge/OrationofSacrifice.lua @@ -0,0 +1,26 @@ +--[[ + Script Name : Spells/Scout/Bard/Dirge/OrationofSacrifice.lua + Script Author : John Adams + Script Date : 2013.08.11 09:08:37 + Script Purpose : + : +--]] + +function cast(Caster, Target) + -- code to cast the spell + Say(Caster, "Whoops! Guess this is not implemented yet!") + +-- Info from spell_display_effects (remove from script when done) +-- Heals target for 1 instantly and every 0.3 seconds +-- Stifles caster + +end + +function tick(Caster, Target) + -- code to process each call_frequency (tick) set in spell_tiers +end + +function remove(Caster, Target) + -- code to remove the spell +end + diff --git a/server/Spells/Scout/Bard/Dirge/PercussionofStone.lua b/server/Spells/Scout/Bard/Dirge/PercussionofStone.lua new file mode 100644 index 000000000..64f7aa5df --- /dev/null +++ b/server/Spells/Scout/Bard/Dirge/PercussionofStone.lua @@ -0,0 +1,11 @@ +--[[ + Script Name : Spells/Scout/Bard/Dirge/PercussionofStone.lua + Script Author : neatz09 + Script Date : 2019.10.12 11:10:20 + Script Purpose : + : +--]] + +-- Info from spell_display_effects (remove from script when done) +-- When damaged this spell has a 6% chance to cast Stoneskin on target. Lasts for 20.0 seconds. +-- Will absorb physical damage. This spell will absorb a total of 1 attack. diff --git a/server/Spells/Scout/Bard/Dirge/RianasRelentlessTune.lua b/server/Spells/Scout/Bard/Dirge/RianasRelentlessTune.lua new file mode 100644 index 000000000..504fbca74 --- /dev/null +++ b/server/Spells/Scout/Bard/Dirge/RianasRelentlessTune.lua @@ -0,0 +1,17 @@ +--[[ + Script Name : Spells/Scout/Bard/Dirge/RianasRelentlessTune.lua + Script Author : theFoof + Script Date : 2013.12.08 + Script Purpose : + : +--]] + +function cast(Caster, Target, MultiAmt) +-- Increases Multi Attack Chance of group members (AE) by 9.0 + + AddSpellBonus(Target, 641, MultiAmt) +end + +function remove(Caster, Target) + RemoveSpellBonus(Target) +end diff --git a/server/Spells/Scout/Bard/Dirge/ScreamofDeath.lua b/server/Spells/Scout/Bard/Dirge/ScreamofDeath.lua new file mode 100644 index 000000000..f85d54b8e --- /dev/null +++ b/server/Spells/Scout/Bard/Dirge/ScreamofDeath.lua @@ -0,0 +1,17 @@ +--[[ + Script Name : Spells/Scout/Bard/Dirge/ScreamofDeath.lua + Script Author : neatz09 + Script Date : 2019.10.12 11:10:36 + Script Purpose : + : +--]] + +-- Info from spell_display_effects (remove from script when done) +-- Applies Scream of Death on termination. Lasts for 15.0 seconds. +-- Applies Scream of Death on termination. Lasts for 15.0 seconds. +-- Inflicts 271 disease damage on target every 3 seconds +-- Inflicts 181 disease damage on target every 3 seconds +-- Inflicts 451 - 752 melee damage on target +-- Inflicts 90 disease damage on target every 3 seconds +-- You must be sneaking to use this ability. +-- Must be flanking or behind diff --git a/server/Spells/Scout/Bard/Dirge/Shriek.lua b/server/Spells/Scout/Bard/Dirge/Shriek.lua new file mode 100644 index 000000000..d1d72cadb --- /dev/null +++ b/server/Spells/Scout/Bard/Dirge/Shriek.lua @@ -0,0 +1,55 @@ +--[[ + Script Name : dd_dot.lua + Script Purpose : Generic damage + 1 effect script + Script Author : John Adams + Script Date : 2008.12.02 +--]] + +function cast(Caster, Target, DDType, MinDDVal, MaxDDVal, EffectType, DamageType, MinEffectVal, MaxEffectVal) + + -- DD component + if MaxDDVal ~= nil and MinDDVal < MaxDDVal then + dmgAmount = math.random(MinDDVal, MaxDDVal) + SpellDamage(Target, DDType, dmgAmount) + --AddHate(Caster, Target, dmgAmount) + else + SpellDamage(Target, DDType, MinDDVal) + --AddHate(Caster, Target, MinDDVal) + end + + -- Effect component - only process this code if there is an EffectType param + if EffectType ~= nil then + + -- Determine if there is a range to effect values + if MaxEffectVal ~= nil and MinEffectVal < MaxEffectVal then + EffectValue = math.random(MinEffectVal, MaxEffectVal) + else + EffectValue = MinEffectVal + end + + -- Determine EffectType - either a DamageType or a String value passed as param 4 + if EffectType == "heal" then + ModifyHP(Caster, EffectValue) + else + SpellDamage(Target, DamageType, EffectValue) + end + + end + +end + +function tick(Caster, Target, DDType, MinDDVal, MaxDDVal, EffectType, DamageType, MinEffectVal, MaxEffectVal) + + if MaxEffectVal ~= nil and MinEffectVal < MaxEffectVal then + EffectValue = math.random(MinEffectVal, MaxEffectVal) + else + EffectValue = MinEffectVal + end + + if EffectType == "heal" then + ModifyHP(Caster, EffectValue) + else + SpellDamage(Target, DamageType, EffectValue) + end + +end diff --git a/server/Spells/Scout/Bard/Dirge/SideBlade.lua b/server/Spells/Scout/Bard/Dirge/SideBlade.lua new file mode 100644 index 000000000..5589caad5 --- /dev/null +++ b/server/Spells/Scout/Bard/Dirge/SideBlade.lua @@ -0,0 +1,47 @@ +--[[ + Script Name : dd_debuff.lua + Script Purpose : Generic damage + 1 effect script + Script Author : John Adams + Script Date : 2008.12.04 + Script Notes : Parameter 4 and 5 are the debuff type and value (param 6 if value is a range) +--]] + +function cast(Caster, Target, DDType, MinDDVal, MaxDDVal, DebuffType, MinDebuffVal, MaxDebuffVal) + + -- Debuff component + -- Determine if there is a range to effect values + if MaxDebuffVal ~= nil and MinDebuffVal < MaxDebuffVal then + -- JA: for debuff randoms (if any), need to to math.random with precision - I think this function rounds up? + DebuffValue = math.random(MinDebuffVal, MaxDebuffVal) + else + DebuffValue = MinDebuffVal + end + + -- Determine DebuffType - either a DamageType or a String value passed as param 4 + if DebuffType == "Attack" then + -- ModifyAttackSpeed(Target, -DebuffValue) + elseif DebuffType == "DPS" then + -- ModifyDPS(Target, -DebuffValue) + elseif DebuffType == "Disease" then + -- ModifyDisease(Target, -DebuffValue) + elseif DebuffType == "Power" then + ModifyPower(Target, -DebuffValue) + elseif DebuffType == "Knockback" then + SpawnSet(Target, "visual_state", "10900") + end + + -- DD component (instant damage) + if MaxDDVal ~= nil and MinDDVal < MaxDDVal then + SpellDamage(Target, DDType, math.random(MinDDVal, MaxDDVal)) + else + SpellDamage(Target, DDType, MinDDVal) + end +end + +function tick(Caster, Target, DDType, MinDDVal, MaxDDVal, DebuffType, MinDebuffVal, MaxDebuffVal) + +end + +function remove(Caster, Target, DDType, MinDDVal, MaxDDVal, DebuffType, MinDebuffVal, MaxDebuffVal) + +end diff --git a/server/Spells/Scout/Bard/Dirge/SingingBlade.lua b/server/Spells/Scout/Bard/Dirge/SingingBlade.lua new file mode 100644 index 000000000..74279b6ac --- /dev/null +++ b/server/Spells/Scout/Bard/Dirge/SingingBlade.lua @@ -0,0 +1,56 @@ +--[[ + Script Name : dd_heal.lua + Script Purpose : Generic damage + Heal effect script + Script Author : John Adams + Script Date : 2008.12.02 +--]] + +function cast(Caster, Target, DDType, MinDDVal, MaxDDVal, EffectType, MinEffectVal, MaxEffectVal) + + -- DD component + if MaxDDVal ~= nil and MinDDVal < MaxDDVal then + SpellDamage(Target, DDType, math.random(MinDDVal, MaxDDVal)) + else + SpellDamage(Target, DDType, MinDDVal) + end + + -- Effect component - only process this code if there is an EffectType param + if EffectType ~= nil then + + -- Determine if there is a range to effect values + if MaxEffectVal ~= nil and MinEffectVal < MaxEffectVal then + EffectValue = math.random(MinEffectVal, MaxEffectVal) + else + EffectValue = MinEffectVal + end + + -- Determine EffectType - either a DamageType or a String value passed as param 4 + if EffectType == "Heal" then + ModifyHP(Caster, EffectValue) + else + -- something else + end + + end + +end + +function tick(Caster, Target, DDType, MinDDVal, MaxDDVal, EffectType, MinEffectVal, MaxEffectVal) + + if MaxEffectVal ~= nil and MinEffectVal < MaxEffectVal then + EffectValue = math.random(MinEffectVal, MaxEffectVal) + else + EffectValue = MinEffectVal + end + + if EffectType == "heal" then + ModifyHP(Caster, EffectValue) + else + -- something else + end + +end + +function remove(Caster, Target) + +end diff --git a/server/Spells/Scout/Bard/Dirge/SongstersLuck.lua b/server/Spells/Scout/Bard/Dirge/SongstersLuck.lua new file mode 100644 index 000000000..201376540 --- /dev/null +++ b/server/Spells/Scout/Bard/Dirge/SongstersLuck.lua @@ -0,0 +1,20 @@ +--[[ + Script Name : Spells/Scout/Bard/Dirge/SongstersLuck.lua + Script Author : theFoof + Script Date : 2013.12.08 04:12:42 + Script Purpose : + : +--]] + +function cast(Caster, Target, SkillAmt) +-- Increases Slashing, Crushing, Piercing and Ranged of group members (AE) + + AddSkillBonus(Target, GetSkillIDByName("Slashing"), SkillAmt) + AddSkillBonus(Target, GetSkillIDByName("Crushing"), SkillAmt) + AddSkillBonus(Target, GetSkillIDByName("Piercing"), SkillAmt) + AddSkillBonus(Target, GetSkillIDByName("Ranged"), SkillAmt) +end + +function remove(Caster, Target) + RemoveSkillBonus(Caster) +end \ No newline at end of file diff --git a/server/Spells/Scout/Bard/Dirge/TarvensCripplingCrescendo.lua b/server/Spells/Scout/Bard/Dirge/TarvensCripplingCrescendo.lua new file mode 100644 index 000000000..7c0f931ce --- /dev/null +++ b/server/Spells/Scout/Bard/Dirge/TarvensCripplingCrescendo.lua @@ -0,0 +1,22 @@ +--[[ + Script Name : Spells/Scout/Bard/Dirge/TarvensCripplingCrescendo.lua + Script Author : theFoof + Script Date : 2013.12.08 + Script Purpose : + : +--]] + +function cast(Caster, Target, DebuffAmt, DmgType, DmgLow, DmgHigh) +-- Interrupts target +-- Decreases Defense of target +-- Inflicts disease damage on target + + Interrupt(Target) + AddSkillBonus(Target, GetSkillIDByName("Defense"), DebuffAmt) + SpellDamage(Target, DmgType, DmgLow, DmgHigh) +end + +function remove(Caster, Target) + RemoveSkillBonus(Target) +end + diff --git a/server/Spells/Scout/Bard/Dirge/ThurisDolefulThrust.lua b/server/Spells/Scout/Bard/Dirge/ThurisDolefulThrust.lua new file mode 100644 index 000000000..65f95de7c --- /dev/null +++ b/server/Spells/Scout/Bard/Dirge/ThurisDolefulThrust.lua @@ -0,0 +1,21 @@ +--[[ + Script Name : Spells/Scout/Bard/Dirge/ThurisDolefulThrust.lua + Script Author : John Adams + Script Date : 2013.11.20 07:11:42 + Script Purpose : + : +--]] + +function cast(Caster, Target, DmgType, MinVal, MaxVal, HealAmt) + -- Inflicts 6 - 10 melee damage on target + if MaxVal ~= nil and MinVal < MaxVal then + SpellDamage(Target, DmgType, math.random(MinVal, MaxVal)) + else + SpellDamage(Target, DmgType, MinVal) + end + + -- Heals caster for 3 + if LastSpellAttackHit() then + SpellHeal("Heal", HealAmt, 0, Caster) + end +end diff --git a/server/Spells/Scout/Bard/Dirge/VerliensKeenofDespair.lua b/server/Spells/Scout/Bard/Dirge/VerliensKeenofDespair.lua new file mode 100644 index 000000000..51637d494 --- /dev/null +++ b/server/Spells/Scout/Bard/Dirge/VerliensKeenofDespair.lua @@ -0,0 +1,22 @@ +--[[ + Script Name : Spells/Scout/Bard/Dirge/VerliensKeenofDespair.lua + Script Author : theFoof + Script Date : 2013.12.08 09:08:04 + Script Purpose : + : +--]] + +function cast(Caster, Target, SlowAmt, HostileChance, DmgChance, DebuffAmt, DebuffType) + Say(Caster, "Slow portion not yet scripted for Verlien's Keen of Despair") +-- Slows target +-- chance to dispel when target receives hostile action +-- chance to dispel when target takes damage +-- Decreases Mitigation of target vs noxious damage + + AddSpellBonus(Target, DebuffType, DebuffAmt) +end + +function remove(Caster, Target) + RemoveSpellBonus(Target) +end + diff --git a/server/Spells/Scout/Bard/Dirge/WailingStrike.lua b/server/Spells/Scout/Bard/Dirge/WailingStrike.lua new file mode 100644 index 000000000..5589caad5 --- /dev/null +++ b/server/Spells/Scout/Bard/Dirge/WailingStrike.lua @@ -0,0 +1,47 @@ +--[[ + Script Name : dd_debuff.lua + Script Purpose : Generic damage + 1 effect script + Script Author : John Adams + Script Date : 2008.12.04 + Script Notes : Parameter 4 and 5 are the debuff type and value (param 6 if value is a range) +--]] + +function cast(Caster, Target, DDType, MinDDVal, MaxDDVal, DebuffType, MinDebuffVal, MaxDebuffVal) + + -- Debuff component + -- Determine if there is a range to effect values + if MaxDebuffVal ~= nil and MinDebuffVal < MaxDebuffVal then + -- JA: for debuff randoms (if any), need to to math.random with precision - I think this function rounds up? + DebuffValue = math.random(MinDebuffVal, MaxDebuffVal) + else + DebuffValue = MinDebuffVal + end + + -- Determine DebuffType - either a DamageType or a String value passed as param 4 + if DebuffType == "Attack" then + -- ModifyAttackSpeed(Target, -DebuffValue) + elseif DebuffType == "DPS" then + -- ModifyDPS(Target, -DebuffValue) + elseif DebuffType == "Disease" then + -- ModifyDisease(Target, -DebuffValue) + elseif DebuffType == "Power" then + ModifyPower(Target, -DebuffValue) + elseif DebuffType == "Knockback" then + SpawnSet(Target, "visual_state", "10900") + end + + -- DD component (instant damage) + if MaxDDVal ~= nil and MinDDVal < MaxDDVal then + SpellDamage(Target, DDType, math.random(MinDDVal, MaxDDVal)) + else + SpellDamage(Target, DDType, MinDDVal) + end +end + +function tick(Caster, Target, DDType, MinDDVal, MaxDDVal, DebuffType, MinDebuffVal, MaxDebuffVal) + +end + +function remove(Caster, Target, DDType, MinDDVal, MaxDDVal, DebuffType, MinDebuffVal, MaxDebuffVal) + +end diff --git a/server/Spells/Scout/Bard/Dirge/WailoftheBanshee.lua b/server/Spells/Scout/Bard/Dirge/WailoftheBanshee.lua new file mode 100644 index 000000000..8f729e3c0 --- /dev/null +++ b/server/Spells/Scout/Bard/Dirge/WailoftheBanshee.lua @@ -0,0 +1,19 @@ +--[[ + Script Name : Spells/Scout/Bard/Dirge/WailoftheBanshee.lua + Script Author : neatz09 + Script Date : 2019.10.12 10:10:31 + Script Purpose : + : +--]] +-- Inflicts 290 - 483 disease damage on target +function cast(Caster, Target, DmgType, MinVal, MaxVal, DotType, DotMin) + SpellDamage(Target, DmgType, MinVal, MaxVal) +-- Applies Banshee's Scream on termination. +-- Inflicts 97 disease damage on target encounter instantly and every 4 seconds +SpellDamage(Target, DotType, DotMin) +end + +function tick(Caster, Target) + SpellDamage(Target, DotType, DotMin, DotMax) +end + diff --git a/server/Spells/Scout/Bard/DishearteningDescant.lua b/server/Spells/Scout/Bard/DishearteningDescant.lua new file mode 100644 index 000000000..0af49c531 --- /dev/null +++ b/server/Spells/Scout/Bard/DishearteningDescant.lua @@ -0,0 +1,18 @@ +--[[ + Script Name : Spells/Scout/Bard/DishearteningDescant.lua + Script Author : theFoof + Script Date : 2013.12.09 12:12:06 + Script Purpose : + : +--]] + +-- Decreases AGI and STR of target encounter by 27.4 + +function cast(Caster, Target, BuffAmt) + AddSkillBonus(Target, 0, BuffAmt) + AddSkillBonus(Target, 2, BuffAmt) +end + +function remove(Caster, Target) + RemoveSkillBonus(Target) +end \ No newline at end of file diff --git a/server/Spells/Scout/Bard/SelosAccelerando.lua b/server/Spells/Scout/Bard/SelosAccelerando.lua new file mode 100644 index 000000000..dc5264a25 --- /dev/null +++ b/server/Spells/Scout/Bard/SelosAccelerando.lua @@ -0,0 +1,16 @@ +--[[ + Script Name : Spells/Scout/Bard/SelosAccelerando.lua + Script Author : Zcoretri + Script Date : 2010.03.30 10:03:38 + Script Notes : Enter special notes here + : +--]] + +function cast(Caster, Target, BuffValue) + AddSpellBonus(Target, 609, BuffValue) +end + +function remove(Caster, Target, BuffValue) + RemoveSpellBonus(Target) +end + diff --git a/server/Spells/Scout/Bard/Shroud.lua b/server/Spells/Scout/Bard/Shroud.lua new file mode 100644 index 000000000..3cd48fed0 --- /dev/null +++ b/server/Spells/Scout/Bard/Shroud.lua @@ -0,0 +1,18 @@ +--[[ + Script Name : Spells/Scout/Bard/Shroud.lua + Script Author : theFoof + Script Date : 2014.1.16 + Script Purpose : + : +--]] + +function cast(Caster, Target) +-- Grants stealth to caster +-- Suspends caster's movement speed enhancements + Stealth(1) +end + +function remove(Caster, Target) + RemoveStealth() +end + diff --git a/server/Spells/Scout/Bard/Troubador/AlinsSereneSerenade.lua b/server/Spells/Scout/Bard/Troubador/AlinsSereneSerenade.lua new file mode 100644 index 000000000..5be91dc8b --- /dev/null +++ b/server/Spells/Scout/Bard/Troubador/AlinsSereneSerenade.lua @@ -0,0 +1,29 @@ +--[[ + Script Name : Spells/Scout/Bard/Troubadour/AlinsSereneSerenade.lua + Script Author : John Adams + Script Date : 2013.08.11 09:08:35 + Script Purpose : + : +--]] + +function cast(Caster, Target) + -- code to cast the spell + Say(Caster, "Whoops! Guess this is not implemented yet!") + +-- Info from spell_display_effects (remove from script when done) +-- When damaged this spell will cast Serenade on target's attacker. +-- Decreases Threat to target by 37 +-- If not fighter +-- Decreases Hate Gain of group members (AE) by 10.7% +-- If not fighter + +end + +function tick(Caster, Target) + -- code to process each call_frequency (tick) set in spell_tiers +end + +function remove(Caster, Target) + -- code to remove the spell +end + diff --git a/server/Spells/Scout/Bard/Troubador/Allegretto.lua b/server/Spells/Scout/Bard/Troubador/Allegretto.lua new file mode 100644 index 000000000..d5e418289 --- /dev/null +++ b/server/Spells/Scout/Bard/Troubador/Allegretto.lua @@ -0,0 +1,17 @@ +--[[ + Script Name : Spells/Scout/Bard/Troubadour/Allegretto.lua + Script Author : Zcoretri + Script Date : 4.April.2014 + Script Purpose : + : +--]] + +function cast(Caster, Target, AttackAmt) + -- Increases Attack Speed of group members (AE) + AddSpellBonus(Target, 617, AttackAmt) +end + +function remove(Caster, Target) + RemoveSpellBonus(Target) +end + diff --git a/server/Spells/Scout/Bard/Troubador/ArcaneSymphony.lua b/server/Spells/Scout/Bard/Troubador/ArcaneSymphony.lua new file mode 100644 index 000000000..ec26e7688 --- /dev/null +++ b/server/Spells/Scout/Bard/Troubador/ArcaneSymphony.lua @@ -0,0 +1,21 @@ +--[[ + Script Name : Spells/Scout/Bard/Troubador/ArcaneSymphony.lua + Script Author : neatz09 + Script Date : 2019.09.23 03:09:14 + Script Purpose : + : +--]] + +-- Increases Mitigation of raid and group members (AE) vs arcane damage by 252 + +function cast(Caster, Target, BonusAmt) + AddSpellBonus(Target, 203, BonusAmt) + +end + + +function remove(Caster, Target, BonusAmt) + RemoveSpellBonus(Target) + +end + diff --git a/server/Spells/Scout/Bard/Troubador/AriaofMagic.lua b/server/Spells/Scout/Bard/Troubador/AriaofMagic.lua new file mode 100644 index 000000000..336630bb4 --- /dev/null +++ b/server/Spells/Scout/Bard/Troubador/AriaofMagic.lua @@ -0,0 +1,11 @@ +--[[ + Script Name : Spells/Scout/Bard/Troubador/AriaofMagic.lua + Script Author : neatz09 + Script Date : 2019.10.12 10:10:41 + Script Purpose : + : +--]] + +-- Info from spell_display_effects (remove from script when done) +-- On a hostile spell hit this spell has a 30% chance to cast Dissonant Note on target of spell. +-- Inflicts 161 - 269 mental damage on target diff --git a/server/Spells/Scout/Bard/Troubador/AyonicInspiration.lua b/server/Spells/Scout/Bard/Troubador/AyonicInspiration.lua new file mode 100644 index 000000000..254b8e7e5 --- /dev/null +++ b/server/Spells/Scout/Bard/Troubador/AyonicInspiration.lua @@ -0,0 +1,31 @@ +--[[ + Script Name : Spells/Scout/Bard/Troubadour/AyonicInspiration.lua + Script Author : John Adams + Script Date : 2013.08.11 09:08:25 + Script Purpose : + : +--]] + +function cast(Caster, Target) + -- code to cast the spell + Say(Caster, "Whoops! Guess this is not implemented yet!") + +-- Info from spell_display_effects (remove from script when done) +-- Applies the effects of Perfection of the Maestro to all raid members. +-- Aria of Magic will improve hostile spell damage by 10% +-- On any combat or spell hit this spell may cast Ayonic Hymn on target of attack. Lasts for 12.0 seconds. Triggers about 2.4 times per minute. +-- Increases Crit Chance of caster by 15.0 +-- Inflicts 626 - 940 mental damage on target +-- Cannot be modified except by direct means +-- Cannot be modified except by direct means + +end + +function tick(Caster, Target) + -- code to process each call_frequency (tick) set in spell_tiers +end + +function remove(Caster, Target) + -- code to remove the spell +end + diff --git a/server/Spells/Scout/Bard/Troubador/BreathtakingBellow.lua b/server/Spells/Scout/Bard/Troubador/BreathtakingBellow.lua new file mode 100644 index 000000000..31141f163 --- /dev/null +++ b/server/Spells/Scout/Bard/Troubador/BreathtakingBellow.lua @@ -0,0 +1,31 @@ +--[[ + Script Name : Spells/Scout/Bard/Troubadour/BreathtakingBellow.lua + Script Author : John Adams + Script Date : 2013.08.11 09:08:53 + Script Purpose : + : +--]] + +function cast(Caster, Target) + -- code to cast the spell + Say(Caster, "Whoops! Guess this is not implemented yet!") + +-- Info from spell_display_effects (remove from script when done) +-- Interrupts target encounter +-- 1% chance to apply Knockdown. Lasts for 1.5 seconds. +-- Stuns target +-- Throws target back +-- Blurs vision of target +-- Does not affect Epic targets +-- Blurs vision of target encounter + +end + +function tick(Caster, Target) + -- code to process each call_frequency (tick) set in spell_tiers +end + +function remove(Caster, Target) + -- code to remove the spell +end + diff --git a/server/Spells/Scout/Bard/Troubador/BriasEntrancingSonnet.lua b/server/Spells/Scout/Bard/Troubador/BriasEntrancingSonnet.lua new file mode 100644 index 000000000..0a7acd13a --- /dev/null +++ b/server/Spells/Scout/Bard/Troubador/BriasEntrancingSonnet.lua @@ -0,0 +1,28 @@ +--[[ + Script Name : Spells/Scout/Bard/Troubadour/BriasEntrancingSonnet.lua + Script Author : John Adams + Script Date : 2013.08.11 09:08:21 + Script Purpose : + : +--]] + +function cast(Caster, Target) + -- code to cast the spell + Say(Caster, "Whoops! Guess this is not implemented yet!") + +-- Info from spell_display_effects (remove from script when done) +-- Charms target +-- If outside an arena +-- Certain enemies cannot be charmed +-- Does not affect Epic targets + +end + +function tick(Caster, Target) + -- code to process each call_frequency (tick) set in spell_tiers +end + +function remove(Caster, Target) + -- code to remove the spell +end + diff --git a/server/Spells/Scout/Bard/Troubador/BrilliantBlade.lua b/server/Spells/Scout/Bard/Troubador/BrilliantBlade.lua new file mode 100644 index 000000000..5589caad5 --- /dev/null +++ b/server/Spells/Scout/Bard/Troubador/BrilliantBlade.lua @@ -0,0 +1,47 @@ +--[[ + Script Name : dd_debuff.lua + Script Purpose : Generic damage + 1 effect script + Script Author : John Adams + Script Date : 2008.12.04 + Script Notes : Parameter 4 and 5 are the debuff type and value (param 6 if value is a range) +--]] + +function cast(Caster, Target, DDType, MinDDVal, MaxDDVal, DebuffType, MinDebuffVal, MaxDebuffVal) + + -- Debuff component + -- Determine if there is a range to effect values + if MaxDebuffVal ~= nil and MinDebuffVal < MaxDebuffVal then + -- JA: for debuff randoms (if any), need to to math.random with precision - I think this function rounds up? + DebuffValue = math.random(MinDebuffVal, MaxDebuffVal) + else + DebuffValue = MinDebuffVal + end + + -- Determine DebuffType - either a DamageType or a String value passed as param 4 + if DebuffType == "Attack" then + -- ModifyAttackSpeed(Target, -DebuffValue) + elseif DebuffType == "DPS" then + -- ModifyDPS(Target, -DebuffValue) + elseif DebuffType == "Disease" then + -- ModifyDisease(Target, -DebuffValue) + elseif DebuffType == "Power" then + ModifyPower(Target, -DebuffValue) + elseif DebuffType == "Knockback" then + SpawnSet(Target, "visual_state", "10900") + end + + -- DD component (instant damage) + if MaxDDVal ~= nil and MinDDVal < MaxDDVal then + SpellDamage(Target, DDType, math.random(MinDDVal, MaxDDVal)) + else + SpellDamage(Target, DDType, MinDDVal) + end +end + +function tick(Caster, Target, DDType, MinDDVal, MaxDDVal, DebuffType, MinDebuffVal, MaxDebuffVal) + +end + +function remove(Caster, Target, DDType, MinDDVal, MaxDDVal, DebuffType, MinDebuffVal, MaxDebuffVal) + +end diff --git a/server/Spells/Scout/Bard/Troubador/CeremonialBlade.lua b/server/Spells/Scout/Bard/Troubador/CeremonialBlade.lua new file mode 100644 index 000000000..11035f7fd --- /dev/null +++ b/server/Spells/Scout/Bard/Troubador/CeremonialBlade.lua @@ -0,0 +1,21 @@ +--[[ + Script Name : Spells/Scout/Bard/Troubadour/CeremonialBlade.lua + Script Author : Zcoretri + Script Date : 19.March.2014 + Script Purpose : + : +--]] + +function cast(Caster, Target, DmgType, MinDmg, MaxDmg, DmgType2, MinDmg2, MaxDmg2) + -- Inflicts mental damage on target + -- Inflicts mental damage on target + SpellDamage(Target, DmgType, MinDmg, MaxDmg) + + if LastSpellAttackHit() then + SpellDamage(Target, DmgType2, MinDmg2, MaxDmg2) + end +end + +function remove(Caster, Target) +end + diff --git a/server/Spells/Scout/Bard/Troubador/ChaosAnthem.lua b/server/Spells/Scout/Bard/Troubador/ChaosAnthem.lua new file mode 100644 index 000000000..848bb6d52 --- /dev/null +++ b/server/Spells/Scout/Bard/Troubador/ChaosAnthem.lua @@ -0,0 +1,22 @@ +--[[ + Script Name : Spells/Scout/Bard/Troubador/ChaosAnthem.lua + Script Author : neatz09 + Script Date : 2019.10.12 10:10:27 + Script Purpose : + : +--]] + +function cast(Caster, Target, DmgType, MinVal, MaxVal, Stat) +-- Inflicts 120 mental damage on target encounter instantly and every 6 seconds + SpellDamage(Target, DmgType, MinVal, MaxVal) +-- Decreases WIS of target encounter by 72.3 + AddSpellBonus(Target, 3, Stat) +end + +function tick(Caster, Target) + SpellDamage(Target, DmgType, MinVal, MaxVal) +end + +function remove(Caster, Target) + RemoveSpellBonus(Target) +end \ No newline at end of file diff --git a/server/Spells/Scout/Bard/Troubador/Countersong.lua b/server/Spells/Scout/Bard/Troubador/Countersong.lua new file mode 100644 index 000000000..33ded31a1 --- /dev/null +++ b/server/Spells/Scout/Bard/Troubador/Countersong.lua @@ -0,0 +1,26 @@ +--[[ + Script Name : Spells/Scout/Bard/Troubadour/Countersong.lua + Script Author : John Adams + Script Date : 2013.08.11 09:08:28 + Script Purpose : + : +--]] + +function cast(Caster, Target) + -- code to cast the spell + Say(Caster, "Whoops! Guess this is not implemented yet!") + +-- Info from spell_display_effects (remove from script when done) +-- Decreases the damage done by the next spell cast by 10 percent +-- Target will reduce the chance for one of their weapons' autoattack to affect multiple targets by 56.2% + +end + +function tick(Caster, Target) + -- code to process each call_frequency (tick) set in spell_tiers +end + +function remove(Caster, Target) + -- code to remove the spell +end + diff --git a/server/Spells/Scout/Bard/Troubador/DaelisDanceofBlades.lua b/server/Spells/Scout/Bard/Troubador/DaelisDanceofBlades.lua new file mode 100644 index 000000000..fd0e6ee0f --- /dev/null +++ b/server/Spells/Scout/Bard/Troubador/DaelisDanceofBlades.lua @@ -0,0 +1,39 @@ +--[[ + Script Name : Spells/Scout/Bard/Troubadour/DaelisDanceofBlades.lua + Script Author : Zcoretri + Script Date : 4.April.2014 + Script Purpose : + : +--]] + +function cast(Caster, Target, AgiAmt, ProcChance, DmgType, MinDmg, MaxDmg, ProcChance2, DmgType2, MinDmg2, MaxDmg2, AvoidAmt, PhysMit, MitAmt) + -- Increases AGI of caster by 47.0 + AddSpellBonus(Target, 2, AgiAmt) + -- When damaged with a spell this spell has a 20% chance to cast Song Barrier on target's attacker. + AddProc(Target, 2, ProcChance) + -- Inflicts 65 - 109 mental damage on target + SpellDamage(Target, DmgType, MinDmg, MaxDmg) + -- When damaged with a melee weapon this spell has a 20% chance to cast Song Barrier on target's attacker. + AddProc(Target, 2, ProcChance2) + -- Inflicts 65 - 109 mental damage on target + SpellDamage(Target, DmgType2, MinDmg2, MaxDmg2) + -- Adds 14.0% to base avoidance. + AddSpellBonus(Target, 696, AvoidAmt) + -- Increases Mitigation of caster vs physical damage by 170 + -- Increases Mitigation of caster vs elemental, noxious and arcane damage by 379 + AddSpellBonus(Target, 200, PhyMit) + AddSpellBonus(Target, 201, MitAmt) + AddSpellBonus(Target, 202, MitAmt) + AddSpellBonus(Target, 203, MitAmt) +end + +function proc(Caster, Target, AgiAmt, ProcChance, DmgType, MinDmg, MaxDmg, ProcChance2, DmgType2, MinDmg2, MaxDmg2, AvoidAmt, PhysMit, MitAmt) + ProcDamage(Caster, Target, "Song Barrier", DmgType, MinDmg, MaxDmg) + ProcDamage(Caster, Target, "Song Barrier", DmgType2, MinDmg2, MaxDmg2) +end + +function remove(Caster, Target) + RemoveSpellBonus(Caster) + RemoveProc(Caster) +end + diff --git a/server/Spells/Scout/Bard/Troubador/DancingBlade.lua b/server/Spells/Scout/Bard/Troubador/DancingBlade.lua new file mode 100644 index 000000000..3291a4c1e --- /dev/null +++ b/server/Spells/Scout/Bard/Troubador/DancingBlade.lua @@ -0,0 +1,31 @@ +--[[ + Script Name : Spells/Scout/Bard/Troubadour/DancingBlade.lua + Script Author : Zcoretri + Script Date : 17.March.2014 + Script Purpose : + : +--]] + +function precast(Caster, Target) + -- Must be flanking or behind + if IsFlanking(Caster, Target) then + return true + else + SendMessage(Caster, "You need to be flanking or behind your target to use this ability!", "yellow") + return false, 0 + end +end + +function cast(Caster, Target, DmgType, MinDmg, MaxDmg, Mitigation) + -- Inflicts melee damage on target + SpellDamage(Target, DmgType, MinDmg, MaxDmg) + -- Decreases Mitigation of target vs elemental, noxious and arcane damage + AddSpellBonus(Target, 201, Mitigation) + AddSpellBonus(Target, 202, Mitigation) + AddSpellBonus(Target, 203, Mitigation) +end + +function remove(Caster, Target) + RemoveSpellBonus(Target) +end + diff --git a/server/Spells/Scout/Bard/Troubador/DemoralizingProcessional.lua b/server/Spells/Scout/Bard/Troubador/DemoralizingProcessional.lua new file mode 100644 index 000000000..8074fc386 --- /dev/null +++ b/server/Spells/Scout/Bard/Troubador/DemoralizingProcessional.lua @@ -0,0 +1,14 @@ +--[[ + Script Name : Spells/Scout/Bard/Troubador/DemoralizingProcessional.lua + Script Author : neatz09 + Script Date : 2019.10.12 10:10:59 + Script Purpose : + : +--]] + +-- Info from spell_display_effects (remove from script when done) +-- Applies Unsettled March. Lasts for 1 minute. +-- Increases Fervor of group members (AE) by 2.1 +-- Cannot be modified except by direct means +-- Decreases AGI, STR, INT and WIS of target encounter by 58.0 +-- Decreases Slashing, Crushing, Piercing, Ranged, Focus, Disruption, Subjugation, Ordination and Aggression of target encounter by 14.8 diff --git a/server/Spells/Scout/Bard/Troubador/DepressingChant.lua b/server/Spells/Scout/Bard/Troubador/DepressingChant.lua new file mode 100644 index 000000000..b4b872bb1 --- /dev/null +++ b/server/Spells/Scout/Bard/Troubador/DepressingChant.lua @@ -0,0 +1,23 @@ +--[[ + Script Name : Spells/Scout/Bard/Troubadour/DepressingChant.lua + Script Author : Zcoretri + Script Date : 17.March.2014 + Script Purpose : + : +--]] + +function cast(Caster, Target, SlowAmt, HostileChance, DmgChance, Mitigation) + -- Applies Snare. Lasts for 24.0 seconds. + -- Slows target + -- chance to dispel when target receives hostile action + -- chance to dispel when target takes damage + Say(Caster, "Slow portion is not scripted yet!") + + -- Decreases Mitigation of target vs arcane damage + AddSpellBonus(Target, 203, Mitigation) +end + +function remove(Caster, Target) + RemoveSpellBonus(Target) +end + diff --git a/server/Spells/Scout/Bard/Troubador/ElementalConcerto.lua b/server/Spells/Scout/Bard/Troubador/ElementalConcerto.lua new file mode 100644 index 000000000..669eb2111 --- /dev/null +++ b/server/Spells/Scout/Bard/Troubador/ElementalConcerto.lua @@ -0,0 +1,23 @@ +--[[ + Script Name : Spells/Scout/Bard/Troubador/ElementalConcerto.lua + Script Author : neatz09 + Script Date : 2019.09.23 02:09:01 + Script Purpose : + : +--]] + +-- Increases Mitigation of raid and group members (AE) vs elemental damage by 554 + +function cast(Caster, Target, BonusAmt) + AddSpellBonus(Target, 201, MitAmt) + +end + + +function remove(Caster, Target, BonusAmt) + RemoveSpellBonus(Target) + + +end + + diff --git a/server/Spells/Scout/Bard/Troubador/GracefulAvoidance.lua b/server/Spells/Scout/Bard/Troubador/GracefulAvoidance.lua new file mode 100644 index 000000000..3b3b91f8c --- /dev/null +++ b/server/Spells/Scout/Bard/Troubador/GracefulAvoidance.lua @@ -0,0 +1,17 @@ +--[[ + Script Name : Spells/Scout/Bard/Troubadour/GracefulAvoidance.lua + Script Author : Zcoretri + Script Date : 4.April.2014 + Script Purpose : + : +--]] + +function cast(Caster, Target, Defense) + -- Increases Defense of group members (AE) + AddSkillBonus(Target, 609880714, Defense) +end + +function remove(Caster, Target, Defense) + RemoveSkillBonus(Caster) +end + diff --git a/server/Spells/Scout/Bard/Troubador/JestersCap.lua b/server/Spells/Scout/Bard/Troubador/JestersCap.lua new file mode 100644 index 000000000..c00b733de --- /dev/null +++ b/server/Spells/Scout/Bard/Troubador/JestersCap.lua @@ -0,0 +1,25 @@ +--[[ + Script Name : Spells/Scout/Bard/Troubadour/JestersCap.lua + Script Author : John Adams + Script Date : 2013.08.11 09:08:25 + Script Purpose : + : +--]] + +function cast(Caster, Target) + -- code to cast the spell + Say(Caster, "Whoops! Guess this is not implemented yet!") + +-- Info from spell_display_effects (remove from script when done) +-- Increases Ability Reuse Speed of target by 22.5% + +end + +function tick(Caster, Target) + -- code to process each call_frequency (tick) set in spell_tiers +end + +function remove(Caster, Target) + -- code to remove the spell +end + diff --git a/server/Spells/Scout/Bard/Troubador/Lullaby.lua b/server/Spells/Scout/Bard/Troubador/Lullaby.lua new file mode 100644 index 000000000..f299625c2 --- /dev/null +++ b/server/Spells/Scout/Bard/Troubador/Lullaby.lua @@ -0,0 +1,29 @@ +--[[ + Script Name : Spells/Scout/Bard/Troubadour/Lullaby.lua + Script Author : John Adams + Script Date : 2013.08.11 09:08:34 + Script Purpose : + : +--]] + +function cast(Caster, Target) + -- code to cast the spell + Say(Caster, "Whoops! Guess this is not implemented yet!") + +-- Info from spell_display_effects (remove from script when done) +-- Mesmerizes target +-- Prevents AOE (except when direct) +-- Dispelled when target takes damage +-- Does not affect Epic targets +-- Resistibility increases against targets higher than level 29. + +end + +function tick(Caster, Target) + -- code to process each call_frequency (tick) set in spell_tiers +end + +function remove(Caster, Target) + -- code to remove the spell +end + diff --git a/server/Spells/Scout/Bard/Troubador/MidnightBlade.lua b/server/Spells/Scout/Bard/Troubador/MidnightBlade.lua new file mode 100644 index 000000000..5589caad5 --- /dev/null +++ b/server/Spells/Scout/Bard/Troubador/MidnightBlade.lua @@ -0,0 +1,47 @@ +--[[ + Script Name : dd_debuff.lua + Script Purpose : Generic damage + 1 effect script + Script Author : John Adams + Script Date : 2008.12.04 + Script Notes : Parameter 4 and 5 are the debuff type and value (param 6 if value is a range) +--]] + +function cast(Caster, Target, DDType, MinDDVal, MaxDDVal, DebuffType, MinDebuffVal, MaxDebuffVal) + + -- Debuff component + -- Determine if there is a range to effect values + if MaxDebuffVal ~= nil and MinDebuffVal < MaxDebuffVal then + -- JA: for debuff randoms (if any), need to to math.random with precision - I think this function rounds up? + DebuffValue = math.random(MinDebuffVal, MaxDebuffVal) + else + DebuffValue = MinDebuffVal + end + + -- Determine DebuffType - either a DamageType or a String value passed as param 4 + if DebuffType == "Attack" then + -- ModifyAttackSpeed(Target, -DebuffValue) + elseif DebuffType == "DPS" then + -- ModifyDPS(Target, -DebuffValue) + elseif DebuffType == "Disease" then + -- ModifyDisease(Target, -DebuffValue) + elseif DebuffType == "Power" then + ModifyPower(Target, -DebuffValue) + elseif DebuffType == "Knockback" then + SpawnSet(Target, "visual_state", "10900") + end + + -- DD component (instant damage) + if MaxDDVal ~= nil and MinDDVal < MaxDDVal then + SpellDamage(Target, DDType, math.random(MinDDVal, MaxDDVal)) + else + SpellDamage(Target, DDType, MinDDVal) + end +end + +function tick(Caster, Target, DDType, MinDDVal, MaxDDVal, DebuffType, MinDebuffVal, MaxDebuffVal) + +end + +function remove(Caster, Target, DDType, MinDDVal, MaxDDVal, DebuffType, MinDebuffVal, MaxDebuffVal) + +end diff --git a/server/Spells/Scout/Bard/Troubador/NightStrike.lua b/server/Spells/Scout/Bard/Troubador/NightStrike.lua new file mode 100644 index 000000000..c49429334 --- /dev/null +++ b/server/Spells/Scout/Bard/Troubador/NightStrike.lua @@ -0,0 +1,29 @@ +--[[ + Script Name : Spells/Scout/Bard/Troubadour/NightStrike.lua + Script Author : Zcoretri + Script Date : 17.March.2014 + Script Purpose : + : +--]] + +function precast(Caster, Target) + -- You must be sneaking to use this ability. + if IsStealthed(Caster) then + return true + else + SendMessage(Caster, "You must be sneaking to use this ability!", "yellow") + return false, 0 + end +end + +function cast(Caster, Target, DmgType, MinDmg, MaxDmg, IntAmt) + -- Decreases INT of target by 10.4 + AddSpellBonus(Target, 4, IntAmt) + -- Inflicts melee damage on target + SpellDamage(Target, DmgType, MinDmg, MaxDmg) +end + +function remove(Caster, Target, DmgType, MinDmg, MaxDmg, IntAmt) + RemoveSpellBonus(Target) +end + diff --git a/server/Spells/Scout/Bard/Troubador/PainfulLamentations.lua b/server/Spells/Scout/Bard/Troubador/PainfulLamentations.lua new file mode 100644 index 000000000..260809311 --- /dev/null +++ b/server/Spells/Scout/Bard/Troubador/PainfulLamentations.lua @@ -0,0 +1,15 @@ +--[[ + Script Name : Spells/Scout/Bard/Troubadour/PainfulLamentations.lua + Script Author : Zcoretri + Script Date : 4.April.2014 + Script Purpose : + : +--]] + +function cast(Caster, Target, DmgType, MinDmg, MaxDmg) + -- Interrupts target encounter + Interrupt(Caster, Target) + -- Inflicts mental damage on target encounter + SpellDamage(Target, DmgType, MinDmg, MaxDmg) +end + diff --git a/server/Spells/Scout/Bard/Troubador/PerfectShrill.lua b/server/Spells/Scout/Bard/Troubador/PerfectShrill.lua new file mode 100644 index 000000000..02161e9d3 --- /dev/null +++ b/server/Spells/Scout/Bard/Troubador/PerfectShrill.lua @@ -0,0 +1,17 @@ +--[[ + Script Name : Spells/Scout/Bard/Troubadour/PerfectShrill.lua + Script Author : Zcoretri + Script Date : 17.March.2014 + Script Purpose : + : +--]] + +function cast(Caster, Target, DmgType, MinDmg, MaxDmg) + -- Inflicts mental damage on target + SpellDamage(Target, DmgType, MinDmg, MaxDmg) +end + +function remove(Caster, Target) + -- code to remove the spell +end + diff --git a/server/Spells/Scout/Bard/Troubador/PerfectionoftheMaestro.lua b/server/Spells/Scout/Bard/Troubador/PerfectionoftheMaestro.lua new file mode 100644 index 000000000..486c51908 --- /dev/null +++ b/server/Spells/Scout/Bard/Troubador/PerfectionoftheMaestro.lua @@ -0,0 +1,12 @@ +--[[ + Script Name : Spells/Scout/Bard/Troubador/PerfectionoftheMaestro.lua + Script Author : neatz09 + Script Date : 2019.10.12 10:10:14 + Script Purpose : + : +--]] + +-- Info from spell_display_effects (remove from script when done) +-- Increases INT of group members (AE) by 75.2 +-- On a hostile spell cast this spell will cast Precise Note on target of spell. +-- Inflicts 247 - 302 mental damage on target diff --git a/server/Spells/Scout/Bard/Troubador/RaxxylsRousingTune.lua b/server/Spells/Scout/Bard/Troubador/RaxxylsRousingTune.lua new file mode 100644 index 000000000..3d22b3a2c --- /dev/null +++ b/server/Spells/Scout/Bard/Troubador/RaxxylsRousingTune.lua @@ -0,0 +1,23 @@ +--[[ + Script Name : Spells/Scout/Bard/Troubadour/RaxxylsRousingTune.lua + Script Author : Zcoretri + Script Date : 17.March.2014 + Script Purpose : + : +--]] + +function cast(Caster, Target, StatAmt, Mitigation) + -- Increases AGI, INT and WIS of group members (AE) + AddSpellBonus(Target, 2, StatAmt) + AddSpellBonus(Target, 3, StatAmt) + AddSpellBonus(Target, 4, StatAmt) + -- Increases Mitigation of group members (AE) vs elemental, noxious and arcane damage + AddSpellBonus(Target, 201, Mitigation) + AddSpellBonus(Target, 202, Mitigation) + AddSpellBonus(Target, 203, Mitigation) +end + +function remove(Caster, Target) + RemoveSpellBonus(Target) +end + diff --git a/server/Spells/Scout/Bard/Troubador/RejuvenatingCelebration.lua b/server/Spells/Scout/Bard/Troubador/RejuvenatingCelebration.lua new file mode 100644 index 000000000..3cacfe5f0 --- /dev/null +++ b/server/Spells/Scout/Bard/Troubador/RejuvenatingCelebration.lua @@ -0,0 +1,23 @@ +--[[ + Script Name : Spells/Scout/Bard/Troubador/RejuvenatingCelebration.lua + Script Author : neatz09 + Script Date : 2019.09.23 03:09:52 + Script Purpose : + : +--]] + + +-- Increases STA of group members (AE) by 63.6 +-- Increases Combat Health Regen of group members (AE) by 125.3 + +function cast(Caster, Target, Sta, Regen) + AddSpellBonus(Target, 1, Sta) + AddSpellBonus(Target, 604, Regen) + +end + + +function remove(Caster, Target, Sta, Regen) + RemoveSpellBonus(Target) + +end diff --git a/server/Spells/Scout/Bard/Troubador/RequiemofReflection.lua b/server/Spells/Scout/Bard/Troubador/RequiemofReflection.lua new file mode 100644 index 000000000..53bea99e7 --- /dev/null +++ b/server/Spells/Scout/Bard/Troubador/RequiemofReflection.lua @@ -0,0 +1,24 @@ +--[[ + Script Name : Spells/Scout/Bard/Troubadour/RequiemofReflection.lua + Script Author : John Adams + Script Date : 2013.08.11 09:08:55 + Script Purpose : + : +--]] + +function cast(Caster, Target) + -- code to cast the spell + Say(Caster, "Whoops! Guess this is not implemented yet!") + +-- Info from spell_display_effects (remove from script when done) + +end + +function tick(Caster, Target) + -- code to process each call_frequency (tick) set in spell_tiers +end + +function remove(Caster, Target) + -- code to remove the spell +end + diff --git a/server/Spells/Scout/Bard/Troubador/SandrasDeafeningStrike.lua b/server/Spells/Scout/Bard/Troubador/SandrasDeafeningStrike.lua new file mode 100644 index 000000000..12f534095 --- /dev/null +++ b/server/Spells/Scout/Bard/Troubador/SandrasDeafeningStrike.lua @@ -0,0 +1,35 @@ +--[[ + Script Name : Spells/Scout/Bard/Troubador/SandrasDeafeningStrike.lua + Script Author : Zcoretri + Script Date : 17.March.2014 + Script Purpose : + : +--]] + +function cast(Caster, Target, DmgType, MinDmg, MaxDmg, MinDebuff, MaxDebuff, MinBuff, MaxBuff) + -- Inflicts mental damage on target + SpellDamage(Target, DmgType, MinDmg, MaxDmg) + + -- Decreases power of target + if MaxDebuff ~= nil and MinDebuff < MaxDebuff then + DebuffAmt = math.random(MinDebuff, MaxDebuff) + else + DebuffAmt = MinDebuff + end + + AddSpellBonus(Caster, 501, DebuffAmt) + + -- Increases power of caster + if MaxBuff ~= nil and MinBuff < MaxBuff then + BuffAmt = math.random(MinBuff, MaxBuff) + else + BuffAmt = MinBuff + end + + AddSpellBonus(Caster, 501, BuffAmt) +end + +function remove(Caster, Target, DmgType, MinDmg, MaxDmg, MinDebuff, MaxDebuff, MinBuff, MaxBuff) + RemoveSpellBonus(Target) + RemoveSpellBonus(Caster) +end diff --git a/server/Spells/Scout/Bard/Troubador/Shrill.lua b/server/Spells/Scout/Bard/Troubador/Shrill.lua new file mode 100644 index 000000000..d1d72cadb --- /dev/null +++ b/server/Spells/Scout/Bard/Troubador/Shrill.lua @@ -0,0 +1,55 @@ +--[[ + Script Name : dd_dot.lua + Script Purpose : Generic damage + 1 effect script + Script Author : John Adams + Script Date : 2008.12.02 +--]] + +function cast(Caster, Target, DDType, MinDDVal, MaxDDVal, EffectType, DamageType, MinEffectVal, MaxEffectVal) + + -- DD component + if MaxDDVal ~= nil and MinDDVal < MaxDDVal then + dmgAmount = math.random(MinDDVal, MaxDDVal) + SpellDamage(Target, DDType, dmgAmount) + --AddHate(Caster, Target, dmgAmount) + else + SpellDamage(Target, DDType, MinDDVal) + --AddHate(Caster, Target, MinDDVal) + end + + -- Effect component - only process this code if there is an EffectType param + if EffectType ~= nil then + + -- Determine if there is a range to effect values + if MaxEffectVal ~= nil and MinEffectVal < MaxEffectVal then + EffectValue = math.random(MinEffectVal, MaxEffectVal) + else + EffectValue = MinEffectVal + end + + -- Determine EffectType - either a DamageType or a String value passed as param 4 + if EffectType == "heal" then + ModifyHP(Caster, EffectValue) + else + SpellDamage(Target, DamageType, EffectValue) + end + + end + +end + +function tick(Caster, Target, DDType, MinDDVal, MaxDDVal, EffectType, DamageType, MinEffectVal, MaxEffectVal) + + if MaxEffectVal ~= nil and MinEffectVal < MaxEffectVal then + EffectValue = math.random(MinEffectVal, MaxEffectVal) + else + EffectValue = MinEffectVal + end + + if EffectType == "heal" then + ModifyHP(Caster, EffectValue) + else + SpellDamage(Target, DamageType, EffectValue) + end + +end diff --git a/server/Spells/Scout/Bard/Troubador/SingingShot.lua b/server/Spells/Scout/Bard/Troubador/SingingShot.lua new file mode 100644 index 000000000..3f3f6c7c4 --- /dev/null +++ b/server/Spells/Scout/Bard/Troubador/SingingShot.lua @@ -0,0 +1,36 @@ +--[[ + Script Name : Spells/Scout/Bard/Troubadour/SingingShot.lua + Script Author : Zcoretri + Script Date : 4.April.2014 + Script Purpose : + : +--]] + +function precast(Caster, Target) + -- If weapon equipped in Ranged + local item = GetEquippedItemBySlot(Caster, 16) -- (16) = Ranged Weapon slot + if not item or GetItemType(item) ~= 2 then + -- no item or item is not a ranged item (no way to determine different ranged items yet) + return false, 68 + end + + return true +end + +function cast(Caster, Target, DmgType, MinDmg, MaxDmg, DmgType2, MinDmg2, MaxDmg2) + -- Inflicts mental damage on target x2 if first one hits + SpellDamage(Target, DmgType, MinDmg, MaxDmg) + if LastSpellAttackHit() then + SpellDamage(Target, DmgType2, MinDmg2, MaxDmg2) + end + -- Stifles target + -- If Target is not Epic + if not IsEpic(Target) then + AddControlEffect(Target, 2) -- Stifle + end + -- Resistibility increases against targets higher than level 29. +end + +function remove(Caster, Target, DmgType, MinDmg, MaxDmg, DmgType2, MinDmg2, MaxDmg2) + RemoveControlEffect(Target, 2) +end diff --git a/server/Spells/Scout/Bard/Troubador/SongofMagic.lua b/server/Spells/Scout/Bard/Troubador/SongofMagic.lua new file mode 100644 index 000000000..b86fbc824 --- /dev/null +++ b/server/Spells/Scout/Bard/Troubador/SongofMagic.lua @@ -0,0 +1,26 @@ +--[[ + Script Name : Spells/Scout/Bard/Troubadour/SongofMagic.lua + Script Author : John Adams + Script Date : 2013.08.11 09:08:35 + Script Purpose : + : +--]] + +function cast(Caster, Target) + -- code to cast the spell + Say(Caster, "Whoops! Guess this is not implemented yet!") + +-- Info from spell_display_effects (remove from script when done) +-- Increases Disruption, Subjugation, Ordination, Ministration and Aggression of group members (AE) by 1.4 +-- Increases Focus of group members (AE) by 2.9 + +end + +function tick(Caster, Target) + -- code to process each call_frequency (tick) set in spell_tiers +end + +function remove(Caster, Target) + -- code to remove the spell +end + diff --git a/server/Spells/Scout/Bard/Troubador/TapEssence.lua b/server/Spells/Scout/Bard/Troubador/TapEssence.lua new file mode 100644 index 000000000..f8469a6fc --- /dev/null +++ b/server/Spells/Scout/Bard/Troubador/TapEssence.lua @@ -0,0 +1,14 @@ +--[[ + Script Name : Spells/Scout/Bard/Troubador/TapEssence.lua + Script Author : neatz09 + Script Date : 2019.10.12 10:10:04 + Script Purpose : + : +--]] + +function cast(Caster, Target, DmgType, MinVal, MaxVal, MinPwr, MaxPwr) + -- Inflicts 30 - 51 mental damage on target encounter +SpellDamage(Target, DmgType, MinVal, MaxVal) + -- Increases power of group members (AE) by 25 - 42 + SpellHeal(Power, MinPwr, MaxPwr) +end \ No newline at end of file diff --git a/server/Spells/Scout/Bard/Troubador/ThunderousOverture.lua b/server/Spells/Scout/Bard/Troubador/ThunderousOverture.lua new file mode 100644 index 000000000..66397b2a3 --- /dev/null +++ b/server/Spells/Scout/Bard/Troubador/ThunderousOverture.lua @@ -0,0 +1,18 @@ +--[[ + Script Name : Spells/Scout/Bard/Troubador/ThunderousOverture.lua + Script Author : neatz09 + Script Date : 2019.09.23 02:09:31 + Script Purpose : + : +--]] + +-- Inflicts 416 - 693 mental damage on targets in Area of Effect + +function cast(Caster, Target, DmgType, MinVal, MaxVal) + if MaxVal ~= nil and MinVal < MaxVal then + SpellDamage(Target, DmgType, math.random(MinVal, MaxVal)) + else + SpellDamage(Target, DmgType, MinVal) + end +end + diff --git a/server/Spells/Scout/Bard/Troubador/VexingVerses.lua b/server/Spells/Scout/Bard/Troubador/VexingVerses.lua new file mode 100644 index 000000000..67177b2db --- /dev/null +++ b/server/Spells/Scout/Bard/Troubador/VexingVerses.lua @@ -0,0 +1,25 @@ +--[[ + Script Name : Spells/Scout/Bard/Troubadour/VexingVerses.lua + Script Author : Zcoretri + Script Date : 17.March.2014 + Script Purpose : + : +--]] + +function cast(Caster, Target, PwrLoss, HealthLoss, Speed, Defense, DmgType, MinDmg, MaxDmg) + -- Decreases Ability Casting Speed of target + AddSpellBonus(Target, 664, Speed) + -- Decreases Defense of target + AddSkillBonus(Target, 609880714, Defense) + -- Target will lose 8% more power when power is consumed + -- 8% of target's power consumed will also be drained from target's health + + -- Inflicts magic damage on target + SpellDamage(Target, DmgType, MinDmg, MaxDmg) +end + +function remove(Caster, Target, PwrLoss, HealthLoss, Speed, Defense, DmgType, MinDmg, MaxDmg) + RemoveSpellBonus(Target) + RemoveSkillBonus(Target) +end + diff --git a/server/Spells/Scout/Bard/ZandersChoralRebuff.lua b/server/Spells/Scout/Bard/ZandersChoralRebuff.lua new file mode 100644 index 000000000..01806ccc7 --- /dev/null +++ b/server/Spells/Scout/Bard/ZandersChoralRebuff.lua @@ -0,0 +1,25 @@ +--[[ + Script Name : Spells/Scout/Bard/ZandersChoralRebuff.lua + Script Author : John Adams + Script Date : 2013.08.11 09:08:08 + Script Purpose : + : +--]] + +function cast(Caster, Target) + -- code to cast the spell + Say(Caster, "Whoops! Guess this is not implemented yet!") + +-- Info from spell_display_effects (remove from script when done) +-- Decreases Mitigation of target encounter vs elemental, noxious and arcane damage by 315 + +end + +function tick(Caster, Target) + -- code to process each call_frequency (tick) set in spell_tiers +end + +function remove(Caster, Target) + -- code to remove the spell +end + diff --git a/server/Spells/Scout/CheapShot.lua b/server/Spells/Scout/CheapShot.lua new file mode 100644 index 000000000..1bf9ef1b4 --- /dev/null +++ b/server/Spells/Scout/CheapShot.lua @@ -0,0 +1,32 @@ +--[[ + Script Name : Spells/Scout/CheapShot.lua + Script Author : Jabantiz + Script Date : 2013.12.16 03:12:31 + Script Purpose : + : +--]] + +function precast(Caster, Target) + -- Does not affect Epic targets + return (not IsEpic(Target)), 43 +end + +function cast(Caster, Target) + -- Stuns target + AddControlEffect(Target, 4) +end + +function remove(Caster, Target) + -- Applies Cheap Shot on termination. Lasts for 2.0 seconds. + -- Stuns target + -- Does not affect Heroic or Epic targets. + if not IsHeroic(Target) then + AddSpellTimer(2000, "RemoveStun") + else + RemoveControlEffect(Target, 4) + end +end + +function RemoveStun(Caster, Target) + RemoveControlEffect(Target, 4) +end diff --git a/server/Spells/Scout/DirtyTricks.lua b/server/Spells/Scout/DirtyTricks.lua new file mode 100644 index 000000000..36508870f --- /dev/null +++ b/server/Spells/Scout/DirtyTricks.lua @@ -0,0 +1,26 @@ +--[[ + Script Name : Spells/Scout/DirtyTricks.lua + Script Author : John Adams + Script Date : 2013.08.11 02:08:09 + Script Purpose : + : +--]] + +function cast(Caster, Target) + -- code to cast the spell + Say(Caster, "Whoops! Guess this is not implemented yet!") + +-- Info from spell_display_effects (remove from script when done) +-- Decreases Defense of target by 2.3 +-- If facing target + +end + +function tick(Caster, Target) + -- code to process each call_frequency (tick) set in spell_tiers +end + +function remove(Caster, Target) + -- code to remove the spell +end + diff --git a/server/Spells/Scout/Ensnare.lua b/server/Spells/Scout/Ensnare.lua new file mode 100644 index 000000000..e9bc65498 --- /dev/null +++ b/server/Spells/Scout/Ensnare.lua @@ -0,0 +1,29 @@ +--[[ + Script Name : Spells/Scout/Ensnare.lua + Script Author : John Adams + Script Date : 2013.08.11 02:08:13 + Script Purpose : + : +--]] + +function cast(Caster, Target) + -- code to cast the spell + Say(Caster, "Whoops! Guess this is not implemented yet!") + +-- Info from spell_display_effects (remove from script when done) +-- Applies Snare. Lasts for 24.0 seconds. +-- Slows target by 28.6% +-- 5% chance to dispel when target receives hostile action +-- 5% chance to dispel when target takes damage +-- Decreases Mitigation of target vs arcane damage by 214 + +end + +function tick(Caster, Target) + -- code to process each call_frequency (tick) set in spell_tiers +end + +function remove(Caster, Target) + -- code to remove the spell +end + diff --git a/server/Spells/Scout/Escape.lua b/server/Spells/Scout/Escape.lua new file mode 100644 index 000000000..f6db365d6 --- /dev/null +++ b/server/Spells/Scout/Escape.lua @@ -0,0 +1,13 @@ +--[[ + Script Name : Spells/Scout/Escape.lua + Script Author : neatz09 + Script Date : 2019.10.12 09:10:56 + Script Purpose : + : +--]] + + +-- Teleports caster and caster's group within the zone +function cast(Caster, Target) + Evac() +end \ No newline at end of file diff --git a/server/Spells/Scout/Evade.lua b/server/Spells/Scout/Evade.lua new file mode 100644 index 000000000..26a2ce5a0 --- /dev/null +++ b/server/Spells/Scout/Evade.lua @@ -0,0 +1,16 @@ +--[[ + Script Name : Spells/Scout/Evade.lua + Script Author : theFoof + Script Date : 2013.12.09 04:12:50 + Script Purpose : + : +--]] + +-- Decreases Threat to target + +function cast(Caster, Target, HateLow, HateHigh) + AddHate(Caster, Target, math.random(HateLow, HateHigh), 1) +end + +function remove(Caster, Target) +end diff --git a/server/Spells/Scout/FastStrike.lua b/server/Spells/Scout/FastStrike.lua new file mode 100644 index 000000000..404bd66ef --- /dev/null +++ b/server/Spells/Scout/FastStrike.lua @@ -0,0 +1,25 @@ +--[[ + Script Name : Spells/Scout/FastStrike.lua + Script Author : John Adams + Script Date : 2013.08.11 02:08:16 + Script Purpose : + : +--]] + +function cast(Caster, Target) + -- code to cast the spell + Say(Caster, "Whoops! Guess this is not implemented yet!") + +-- Info from spell_display_effects (remove from script when done) +-- Inflicts 29 - 49 melee damage on target + +end + +function tick(Caster, Target) + -- code to process each call_frequency (tick) set in spell_tiers +end + +function remove(Caster, Target) + -- code to remove the spell +end + diff --git a/server/Spells/Scout/HiltStrike.lua b/server/Spells/Scout/HiltStrike.lua new file mode 100644 index 000000000..5e67bbf3d --- /dev/null +++ b/server/Spells/Scout/HiltStrike.lua @@ -0,0 +1,28 @@ +--[[ + Script Name : Spells/Scout/HiltStrike.lua + Script Author : John Adams + Script Date : 2013.08.11 02:08:02 + Script Purpose : + : +--]] + +function cast(Caster, Target) + -- code to cast the spell + Say(Caster, "Whoops! Guess this is not implemented yet!") + +-- Info from spell_display_effects (remove from script when done) +-- Stuns target +-- If Target is not Epic +-- Inflicts 29 - 36 crushing damage on target +-- Interrupts target + +end + +function tick(Caster, Target) + -- code to process each call_frequency (tick) set in spell_tiers +end + +function remove(Caster, Target) + -- code to remove the spell +end + diff --git a/server/Spells/Scout/LuckyBreak.lua b/server/Spells/Scout/LuckyBreak.lua new file mode 100644 index 000000000..09378f21a --- /dev/null +++ b/server/Spells/Scout/LuckyBreak.lua @@ -0,0 +1,26 @@ +--[[ + Script Name : Spells/Scout/LuckyBreak.lua + Script Author : John Adams + Script Date : 2013.08.11 02:08:56 + Script Purpose : + : +--]] + +function cast(Caster, Target) + -- code to cast the spell + Say(Caster, "Whoops! Guess this is not implemented yet!") + +-- Info from spell_display_effects (remove from script when done) +-- Begins a Heroic Opportunity +-- Must be engaged in combat + +end + +function tick(Caster, Target) + -- code to process each call_frequency (tick) set in spell_tiers +end + +function remove(Caster, Target) + -- code to remove the spell +end + diff --git a/server/Spells/Scout/Pathfinding.lua b/server/Spells/Scout/Pathfinding.lua new file mode 100644 index 000000000..60d87b1b4 --- /dev/null +++ b/server/Spells/Scout/Pathfinding.lua @@ -0,0 +1,20 @@ +--[[ + Script Name : Spells/Scout/Pathfinding.lua + Script Author : John Adams + Script Date : 2010.01.29 + Script Note : + : +--]] + +function cast(Caster, Target, BuffValue) + NewSpeed = GetSpeed(Caster) + if NewSpeed == 0 then + SetSpeed(Caster, BuffValue) + else + SetSpeed(Caster, NewSpeed + BuffValue) + end +end + +function remove(Caster, Target, BuffValue) + SetSpeed(Caster, 0) +end diff --git a/server/Spells/Scout/Predator/Assassin/Ambush.lua b/server/Spells/Scout/Predator/Assassin/Ambush.lua new file mode 100644 index 000000000..2b6f2b8af --- /dev/null +++ b/server/Spells/Scout/Predator/Assassin/Ambush.lua @@ -0,0 +1,26 @@ +--[[ + Script Name : Spells/Scout/Predator/Assassin/Ambush.lua + Script Author : Jabantiz + Script Date : 2014.04.14 02:04:06 + Script Purpose : + : +--]] + +function precast(Caster, Target) + -- You must be sneaking to use this ability. + if IsStealthed(Caster) then + return true + end + + SendMessage(Caster, "You must be sneaking to use this ability.", "yellow") + return false +end + +function cast(Caster, Target, DmgType, MinVal, MaxVal) + -- Inflicts 14 - 24 melee damage on target + if MaxVal ~= nil and MinVal < MaxVal then + SpellDamage(Target, DmgType, math.random(MinVal, MaxVal)) + else + SpellDamage(Target, DmgType, MinVal) + end +end diff --git a/server/Spells/Scout/Predator/Assassin/ApplyPoison.lua b/server/Spells/Scout/Predator/Assassin/ApplyPoison.lua new file mode 100644 index 000000000..f4aea8ff6 --- /dev/null +++ b/server/Spells/Scout/Predator/Assassin/ApplyPoison.lua @@ -0,0 +1,24 @@ +--[[ + Script Name : Spells/Scout/Predator/Assassin/ApplyPoison.lua + Script Author : John Adams + Script Date : 2013.08.12 06:08:37 + Script Purpose : + : +--]] + +function cast(Caster, Target) + -- code to cast the spell + Say(Caster, "Whoops! Guess this is not implemented yet!") + +-- Info from spell_display_effects (remove from script when done) + +end + +function tick(Caster, Target) + -- code to process each call_frequency (tick) set in spell_tiers +end + +function remove(Caster, Target) + -- code to remove the spell +end + diff --git a/server/Spells/Scout/Predator/Assassin/Assail.lua b/server/Spells/Scout/Predator/Assassin/Assail.lua new file mode 100644 index 000000000..d1d72cadb --- /dev/null +++ b/server/Spells/Scout/Predator/Assassin/Assail.lua @@ -0,0 +1,55 @@ +--[[ + Script Name : dd_dot.lua + Script Purpose : Generic damage + 1 effect script + Script Author : John Adams + Script Date : 2008.12.02 +--]] + +function cast(Caster, Target, DDType, MinDDVal, MaxDDVal, EffectType, DamageType, MinEffectVal, MaxEffectVal) + + -- DD component + if MaxDDVal ~= nil and MinDDVal < MaxDDVal then + dmgAmount = math.random(MinDDVal, MaxDDVal) + SpellDamage(Target, DDType, dmgAmount) + --AddHate(Caster, Target, dmgAmount) + else + SpellDamage(Target, DDType, MinDDVal) + --AddHate(Caster, Target, MinDDVal) + end + + -- Effect component - only process this code if there is an EffectType param + if EffectType ~= nil then + + -- Determine if there is a range to effect values + if MaxEffectVal ~= nil and MinEffectVal < MaxEffectVal then + EffectValue = math.random(MinEffectVal, MaxEffectVal) + else + EffectValue = MinEffectVal + end + + -- Determine EffectType - either a DamageType or a String value passed as param 4 + if EffectType == "heal" then + ModifyHP(Caster, EffectValue) + else + SpellDamage(Target, DamageType, EffectValue) + end + + end + +end + +function tick(Caster, Target, DDType, MinDDVal, MaxDDVal, EffectType, DamageType, MinEffectVal, MaxEffectVal) + + if MaxEffectVal ~= nil and MinEffectVal < MaxEffectVal then + EffectValue = math.random(MinEffectVal, MaxEffectVal) + else + EffectValue = MinEffectVal + end + + if EffectType == "heal" then + ModifyHP(Caster, EffectValue) + else + SpellDamage(Target, DamageType, EffectValue) + end + +end diff --git a/server/Spells/Scout/Predator/Assassin/Assassinate.lua b/server/Spells/Scout/Predator/Assassin/Assassinate.lua new file mode 100644 index 000000000..3d69beea8 --- /dev/null +++ b/server/Spells/Scout/Predator/Assassin/Assassinate.lua @@ -0,0 +1,28 @@ +--[[ + Script Name : Spells/Scout/Predator/Assassin/Assassinate.lua + Script Author : neatz09 + Script Date : 2019.08.12 08:08:47 + Script Purpose : + : +--]] + +-- Inflicts 2007 - 3345 melee damage on target +-- You must be stealthed to use this ability +function precast(Caster, Target) + -- You must be sneaking to use this ability. + if IsStealthed(Caster) then + return true + end + + SendMessage(Caster, "You must be sneaking to use this ability.", "yellow") + return false +end + +function cast(Caster, Target, DmgType, MinVal, MaxVal) + -- Inflicts 2007 - 3345 melee damage on target + if MaxVal ~= nil and MinVal < MaxVal then + SpellDamage(Target, DmgType, math.random(MinVal, MaxVal)) + else + SpellDamage(Target, DmgType, MinVal) + end +end \ No newline at end of file diff --git a/server/Spells/Scout/Predator/Assassin/AssassinsFlurry.lua b/server/Spells/Scout/Predator/Assassin/AssassinsFlurry.lua new file mode 100644 index 000000000..a6c87962c --- /dev/null +++ b/server/Spells/Scout/Predator/Assassin/AssassinsFlurry.lua @@ -0,0 +1,31 @@ +--[[ + Script Name : Spells/Scout/Predator/Assassin/AssassinsFlurry.lua + Script Author : John Adams + Script Date : 2013.08.12 06:08:47 + Script Purpose : + : +--]] + +function cast(Caster, Target) + -- code to cast the spell + Say(Caster, "Whoops! Guess this is not implemented yet!") + +-- Info from spell_display_effects (remove from script when done) +-- Caster has a 15.0% chance of having one of their weapons' autoattack strike the target multiple times. +-- On a combat hit this spell may cast Flurry of Poison on target of attack. Lasts for 12.0 seconds. Triggers about 2.4 times per minute. +-- Increases Crit Chance of caster by 15.0 +-- Inflicts 648 - 972 poison damage on target +-- Cannot be modified except by direct means +-- Increases the damage of stealth attacks by 30%. +-- Cannot be modified except by direct means + +end + +function tick(Caster, Target) + -- code to process each call_frequency (tick) set in spell_tiers +end + +function remove(Caster, Target) + -- code to remove the spell +end + diff --git a/server/Spells/Scout/Predator/Assassin/Caltrops.lua b/server/Spells/Scout/Predator/Assassin/Caltrops.lua new file mode 100644 index 000000000..47b349853 --- /dev/null +++ b/server/Spells/Scout/Predator/Assassin/Caltrops.lua @@ -0,0 +1,33 @@ +--[[ + Script Name : Spells/Scout/Predator/Assassin/Caltrops.lua + Script Author : Jabantiz + Script Date : 2014.04.17 04:04:10 + Script Purpose : + : +--]] + +function cast(Caster, Target, Snare, Resist) + -- Applies Snare. Lasts for 24.0 seconds. + -- Slows target by 28.3% + SetSpellSnareValue(Snare) + AddControlEffect(Target, 11) + + -- 5% chance to dispel when target receives hostile action + -- 5% chance to dispel when target takes damage + AddProc(Target, 2, 5) + + -- Decreases Mitigation of target vs noxious damage by 197 + AddSpellBonus(Target, 202, BonusAmt) +end + +function proc(Caster, Target, Type) + if Type == 2 then + RemoveControlEffect(Target, 11) + end +end + +function remove(Caster, Target) + RemoveControlEffect(Target, 11) + RemoveSpellBonus(Target) + RemoveProc(Target) +end diff --git a/server/Spells/Scout/Predator/Assassin/Concealment.lua b/server/Spells/Scout/Predator/Assassin/Concealment.lua new file mode 100644 index 000000000..6d850496b --- /dev/null +++ b/server/Spells/Scout/Predator/Assassin/Concealment.lua @@ -0,0 +1,24 @@ +--[[ + Script Name : Spells/Scout/Predator/Assassin/Concealment.lua + Script Author : John Adams + Script Date : 2013.08.12 06:08:00 + Script Purpose : + : +--]] + +function cast(Caster, Target) + -- code to cast the spell + Say(Caster, "Whoops! Guess this is not implemented yet!") + +-- Info from spell_display_effects (remove from script when done) + +end + +function tick(Caster, Target) + -- code to process each call_frequency (tick) set in spell_tiers +end + +function remove(Caster, Target) + -- code to remove the spell +end + diff --git a/server/Spells/Scout/Predator/Assassin/CripplingStrike.lua b/server/Spells/Scout/Predator/Assassin/CripplingStrike.lua new file mode 100644 index 000000000..2cc835cd6 --- /dev/null +++ b/server/Spells/Scout/Predator/Assassin/CripplingStrike.lua @@ -0,0 +1,33 @@ +--[[ + Script Name : Spells/Scout/Predator/Assassin/CripplingStrike.lua + Script Author : neatz09 + Script Date : 2019.09.23 03:09:37 + Script Purpose : + : +--]] +-- Must be flanking or behind +function precast(Caster, Target) + -- Must be flanking or behind + if not IsFlanking(Caster, Target) then + SendMessage(Caster, "Must be flanking or behind", "yellow") + return false + end +end + +-- Inflicts 386 - 643 melee damage on target + +function cast(Caster, Target, DmgType, MinVal, MaxVal, SkillAmt) + if MaxVal ~= nil and MinVal < MaxVal then + SpellDamage(Target, DmgType, math.random(MinVal, MaxVal)) + else + SpellDamage(Target, DmgType, MinVal) + end + +-- Decreases Defense of target by 23.5 + AddSkillBonus(Target, GetSkillIDByName("Defense"), SkillAmt) +end + +function remove(Caster, Target, SkillAmt) + RemoveSkillBonus(Target) + +end diff --git a/server/Spells/Scout/Predator/Assassin/CunningDefense.lua b/server/Spells/Scout/Predator/Assassin/CunningDefense.lua new file mode 100644 index 000000000..3ff5ff47c --- /dev/null +++ b/server/Spells/Scout/Predator/Assassin/CunningDefense.lua @@ -0,0 +1,30 @@ +--[[ + Script Name : Spells/Scout/Predator/Assassin/CunningDefense.lua + Script Author : Jabantiz + Script Date : 2014.04.17 04:04:20 + Script Purpose : + : +--]] + +function cast(Caster, Target, Agi, Avoid, OffSkills, Parry, Def) + -- Increases AGI of caster by 13.1 + AddSpellBonus(Target, 2, Agi) + + -- Adds 1.4% to base avoidance. + AddSpellBonus(Target, 696, Avoid) + + -- Decreases Slashing and Piercing of caster by 13.8 + AddSkillBonus(Target, GetSkillIDByName("Slashing"), OffSkills) + AddSkillBonus(Target, GetSkillIDByName("Piercing"), OffSkills) + + -- Increases Parry of caster by 7.3 + AddSkillBonus(Target, GetSkillIDByName("Parry"), Parry) + + -- Increases Defense of caster by 9.7 + AddSkillBonus(Target, GetSkillIDByName("Defense"), Def) +end + +function remove(Caster, Target) + RemoveSpellBonus(Target) + RemoveSkillBonus(Target) +end diff --git a/server/Spells/Scout/Predator/Assassin/DeadlyFocus.lua b/server/Spells/Scout/Predator/Assassin/DeadlyFocus.lua new file mode 100644 index 000000000..61eda7e92 --- /dev/null +++ b/server/Spells/Scout/Predator/Assassin/DeadlyFocus.lua @@ -0,0 +1,12 @@ +--[[ + Script Name : Spells/Scout/Predator/Assassin/DeadlyFocus.lua + Script Author : neatz09 + Script Date : 2019.10.11 04:10:19 + Script Purpose : + : +--]] + +-- Info from spell_display_effects (remove from script when done) +-- Caster will have their chance to hit with a weapon increased by 4.5% +-- Increases Multi Attack of caster by 29.0 +-- Increases Piercing, Slashing and Crushing of caster by 10.8 diff --git a/server/Spells/Scout/Predator/Assassin/DeadlyShot.lua b/server/Spells/Scout/Predator/Assassin/DeadlyShot.lua new file mode 100644 index 000000000..273723bec --- /dev/null +++ b/server/Spells/Scout/Predator/Assassin/DeadlyShot.lua @@ -0,0 +1,38 @@ +--[[ + Script Name : Spells/Scout/Predator/Assassin/DeadlyShot.lua + Script Author : Jabantiz + Script Date : 2014.04.17 03:04:40 + Script Purpose : + : +--]] + +function precast(Caster, Target) + -- If weapon equipped in Ranged + local item = GetEquippedItemBySlot(Caster, 16) + if item then + if GetItemType(item) == 2 then + return true + end + end + + return false, 68 +end + + +function cast(Caster, Target, MinVal, MaxVal) + -- Inflicts 8 - 13 ranged damage on target + if MaxVal ~= nil and MinVal < MaxVal then + SpellDamage(Target, 0, math.random(MinVal, MaxVal)) + else + SpellDamage(Target, 0, MinVal) + end + + if LastSpellAttackHit() then + -- Inflicts 8 - 13 ranged damage on target + if MaxVal ~= nil and MinVal < MaxVal then + SpellDamage(Target, 0, math.random(MinVal, MaxVal)) + else + SpellDamage(Target, 0, MinVal) + end + end +end diff --git a/server/Spells/Scout/Predator/Assassin/DeathBlow.lua b/server/Spells/Scout/Predator/Assassin/DeathBlow.lua new file mode 100644 index 000000000..3015de2f3 --- /dev/null +++ b/server/Spells/Scout/Predator/Assassin/DeathBlow.lua @@ -0,0 +1,29 @@ +--[[ + Script Name : Spells/Scout/Predator/Assassin/DeathBlow.lua + Script Author : neatz09 + Script Date : 2019.10.12 11:10:37 + Script Purpose : + : +--]] + +function precast(Caster, Target) +-- Must be flanking or behind + if not IsFlanking(Target, Caster) then + SendMessage(Caster, "Must be flanking or behind", "yellow") + return false + end + + return true +end +function cast(Caster, Target, DmgType, OverMin, OverMax, DmgTyp2, UnderMin, UnderMax) +-- Inflicts 685 - 1142 melee damage on target +-- If over 33% Health +-- Inflicts 2056 - 3426 melee damage on target +-- If under 33% Health +if GetHP(Target) > GetPCTOfHP(Target, 33) then +SpellDamage(Target, DmgType, OverMin, OverMax) +else + SpellDamage(Target, DmgType, UnderMin, UnderMax) + end + +end diff --git a/server/Spells/Scout/Predator/Assassin/DeathMark.lua b/server/Spells/Scout/Predator/Assassin/DeathMark.lua new file mode 100644 index 000000000..308e2a015 --- /dev/null +++ b/server/Spells/Scout/Predator/Assassin/DeathMark.lua @@ -0,0 +1,28 @@ +--[[ + Script Name : Spells/Scout/Predator/Assassin/DeathMark.lua + Script Author : Jabantiz + Script Date : 2014.04.17 05:04:57 + Script Purpose : + : +--]] + +function cast(Caster, Target, DmgType, MinVal, MaxVal, Triggers) + -- When damaged with a melee weapon this spell will cast Agonizing Pain on target. + AddProc(Target, 4, 5) + + -- Grants a total of 5 triggers of the spell. + SetSpellTriggerCount(Triggers, 1) +end + +function proc(Caster, Target, Type, DmgType, MinVal, MaxVal, Triggers) + -- When damaged with a melee weapon this spell will cast Agonizing Pain on target. + if Type == 4 then + -- Inflicts 79 - 133 piercing damage on target + ProcDamage(Caster, Target, "Agonizing Pain", DmgType, MinVal, MaxVal) + RemoveTriggerFromSpell(1) + end +end + +function remove(Caster, Target) + RemoveProc(Target) +end diff --git a/server/Spells/Scout/Predator/Assassin/Eviscerate.lua b/server/Spells/Scout/Predator/Assassin/Eviscerate.lua new file mode 100644 index 000000000..754bce718 --- /dev/null +++ b/server/Spells/Scout/Predator/Assassin/Eviscerate.lua @@ -0,0 +1,32 @@ +--[[ + Script Name : Spells/Scout/Predator/Assassin/Eviscerate.lua + Script Author : Jabantiz + Script Date : 2014.04.17 04:04:33 + Script Purpose : + : +--]] + +function precast(Caster, Target) + -- You must be sneaking to use this ability. + if not IsStealthed(Caster) then + SendMessage(Caster, "You must be sneaking to use this ability.", "yellow") + return false + end + + -- Must be flanking or behind + if not IsFlanking(Caster, Target) then + SendMessage(Caster, "You must be flanking or behind", "yellow") + return false + end + + return true +end + +function cast(Caster, Target, DmgType, MinVal, MaxVal) + -- Inflicts 144 - 241 melee damage on target + if MaxVal ~= nil and MinVal < MaxVal then + SpellDamage(Target, DmgType, math.random(MinVal, MaxVal)) + else + SpellDamage(Target, DmgType, MinVal) + end +end diff --git a/server/Spells/Scout/Predator/Assassin/Exacting.lua b/server/Spells/Scout/Predator/Assassin/Exacting.lua new file mode 100644 index 000000000..eff9f8279 --- /dev/null +++ b/server/Spells/Scout/Predator/Assassin/Exacting.lua @@ -0,0 +1,24 @@ +--[[ + Script Name : Spells/Scout/Predator/Assassin/Exacting.lua + Script Author : John Adams + Script Date : 2013.08.12 06:08:03 + Script Purpose : + : +--]] + +function cast(Caster, Target) + -- code to cast the spell + Say(Caster, "Whoops! Guess this is not implemented yet!") + +-- Info from spell_display_effects (remove from script when done) + +end + +function tick(Caster, Target) + -- code to process each call_frequency (tick) set in spell_tiers +end + +function remove(Caster, Target) + -- code to remove the spell +end + diff --git a/server/Spells/Scout/Predator/Assassin/FastStrike.lua b/server/Spells/Scout/Predator/Assassin/FastStrike.lua new file mode 100644 index 000000000..d1d72cadb --- /dev/null +++ b/server/Spells/Scout/Predator/Assassin/FastStrike.lua @@ -0,0 +1,55 @@ +--[[ + Script Name : dd_dot.lua + Script Purpose : Generic damage + 1 effect script + Script Author : John Adams + Script Date : 2008.12.02 +--]] + +function cast(Caster, Target, DDType, MinDDVal, MaxDDVal, EffectType, DamageType, MinEffectVal, MaxEffectVal) + + -- DD component + if MaxDDVal ~= nil and MinDDVal < MaxDDVal then + dmgAmount = math.random(MinDDVal, MaxDDVal) + SpellDamage(Target, DDType, dmgAmount) + --AddHate(Caster, Target, dmgAmount) + else + SpellDamage(Target, DDType, MinDDVal) + --AddHate(Caster, Target, MinDDVal) + end + + -- Effect component - only process this code if there is an EffectType param + if EffectType ~= nil then + + -- Determine if there is a range to effect values + if MaxEffectVal ~= nil and MinEffectVal < MaxEffectVal then + EffectValue = math.random(MinEffectVal, MaxEffectVal) + else + EffectValue = MinEffectVal + end + + -- Determine EffectType - either a DamageType or a String value passed as param 4 + if EffectType == "heal" then + ModifyHP(Caster, EffectValue) + else + SpellDamage(Target, DamageType, EffectValue) + end + + end + +end + +function tick(Caster, Target, DDType, MinDDVal, MaxDDVal, EffectType, DamageType, MinEffectVal, MaxEffectVal) + + if MaxEffectVal ~= nil and MinEffectVal < MaxEffectVal then + EffectValue = math.random(MinEffectVal, MaxEffectVal) + else + EffectValue = MinEffectVal + end + + if EffectType == "heal" then + ModifyHP(Caster, EffectValue) + else + SpellDamage(Target, DamageType, EffectValue) + end + +end diff --git a/server/Spells/Scout/Predator/Assassin/FatalFollowup.lua b/server/Spells/Scout/Predator/Assassin/FatalFollowup.lua new file mode 100644 index 000000000..1dad90133 --- /dev/null +++ b/server/Spells/Scout/Predator/Assassin/FatalFollowup.lua @@ -0,0 +1,26 @@ +--[[ + Script Name : Spells/Scout/Predator/Assassin/FatalFollowup.lua + Script Author : John Adams + Script Date : 2013.08.12 06:08:53 + Script Purpose : + : +--]] + +function cast(Caster, Target) + -- code to cast the spell + Say(Caster, "Whoops! Guess this is not implemented yet!") + +-- Info from spell_display_effects (remove from script when done) +-- Inflicts 649 - 794 melee damage on target +-- You must execute certain stealthed combat arts before you can use this ability. + +end + +function tick(Caster, Target) + -- code to process each call_frequency (tick) set in spell_tiers +end + +function remove(Caster, Target) + -- code to remove the spell +end + diff --git a/server/Spells/Scout/Predator/Assassin/Gash.lua b/server/Spells/Scout/Predator/Assassin/Gash.lua new file mode 100644 index 000000000..23941dd18 --- /dev/null +++ b/server/Spells/Scout/Predator/Assassin/Gash.lua @@ -0,0 +1,31 @@ +--[[ + Script Name : dot.lua + Script Purpose : Generic Damage Over Time script + Script Author : John Adams + Script Date : 2008.12.04 +--]] + +function cast(Caster, Target, DOTType, MinDOTVal, MaxDOTVal, EffectType, DDType, MinDDVal, MaxDDVal) + + -- NoDD is a 0/1 bool flag to perform the remove() component + -- DOT component (instant damage) + if MaxDOTVal ~= nil and MinDOTVal < MaxDOTVal then + SpellDamage(Target, DOTType, math.random(MinDOTVal, MaxDOTVal)) + else + SpellDamage(Target, DOTType, MinDOTVal) + end + +end + +function tick(Caster, Target, DOTType, MinDOTVal, MaxDOTVal, EffectType, DDType, MinDDVal, MaxDDVal) + + if MaxDOTVal ~= nil and MinDOTVal < MaxDOTVal then + SpellDamage(Target, DOTType, math.random(MinDOTVal, MaxDOTVal)) + else + SpellDamage(Target, DOTType, MinDOTVal) + end +end + +function remove(Caster, Target, DOTType, MinDOTVal, MaxDOTVal, EffectType, DDType, MinDDVal, MaxDDVal) + SpellDamage(Target, DOTType, math.random(8, 14)) +end diff --git a/server/Spells/Scout/Predator/Assassin/GushingWound.lua b/server/Spells/Scout/Predator/Assassin/GushingWound.lua new file mode 100644 index 000000000..ca19c8b04 --- /dev/null +++ b/server/Spells/Scout/Predator/Assassin/GushingWound.lua @@ -0,0 +1,32 @@ +--[[ + Script Name : Spells/Scout/Predator/Assassin/GushingWound.lua + Script Author : Jabantiz + Script Date : 2014.04.14 02:04:57 + Script Purpose : + : +--]] + +function cast(Caster, Target, DmgType, MinVal, MaxVal, DoTType, MinVal, MaxVal, DmgType2, MinVal2, MaxVal2) + -- Inflicts 1 - 2 melee damage on target + if MaxVal ~= nil and MinVal < MaxVal then + SpellDamage(Target, DmgType, math.random(MinVal, MaxVal)) + else + SpellDamage(Target, DmgType, MinVal) + end +end + +function tick(Caster, Target, DmgType, MinVal, MaxVal, DoTType, MinVal, MaxVal, DmgType2, MinVal2, MaxVal2) + -- Inflicts 2 - 3 piercing damage on target instantly and every 4 seconds + if MaxVal ~= nil and MinVal < MaxVal then + SpellDamage(Target, DoTType, math.random(MinVal, MaxVal)) + else + SpellDamage(Target, DoTType, MinVal) + end +end + +function remove(Caster, Target, DmgType, MinVal, MaxVal, DoTType, MinVal, MaxVal, DmgType2, MinVal2, MaxVal2) + -- Applies Untreated Bleeding on termination. + -- Inflicts 9 - 14 piercing damage on target + ProcDamage(Caster, Target, "Untreated Bleeding", DmgType2, MinVal2, MaxVal2) +end + diff --git a/server/Spells/Scout/Predator/Assassin/HeadShot.lua b/server/Spells/Scout/Predator/Assassin/HeadShot.lua new file mode 100644 index 000000000..e8af5081a --- /dev/null +++ b/server/Spells/Scout/Predator/Assassin/HeadShot.lua @@ -0,0 +1,39 @@ +--[[ + Script Name : Spells/Scout/Predator/Assassin/HeadShot.lua + Script Author : neatz09 + Script Date : 2019.09.23 03:09:38 + Script Purpose : + : +--]] + +-- If weapon equipped in Ranged +-- Must be flanking or behind +function precast(Caster, Target) + -- Must be flanking or behind + if not IsFlanking(Caster, Target) then + SendMessage(Caster, "Must be flanking or behind", "yellow") + return false + end + + -- If weapon equipped in Ranged + local item = GetEquippedItemBySlot(Caster, 16) + if item then + if GetItemType(item) == 2 then + return true + end + end + + return false, 68 +end + +-- Inflicts 725 - 1209 ranged damage on target + +function cast(Caster, Target, DmgType, MinVal, MaxVal) + if MaxVal ~= nil and MinVal < MaxVal then + SpellDamage(Target, DmgType, math.random(MinVal, MaxVal)) + else + SpellDamage(Target, DmgType, MinVal) + end +end + + diff --git a/server/Spells/Scout/Predator/Assassin/Impale.lua b/server/Spells/Scout/Predator/Assassin/Impale.lua new file mode 100644 index 000000000..9e27aac55 --- /dev/null +++ b/server/Spells/Scout/Predator/Assassin/Impale.lua @@ -0,0 +1,32 @@ +--[[ + Script Name : Spells/Scout/Predator/Assassin/Impale.lua + Script Author : Jabantiz + Script Date : 2014.04.17 04:04:31 + Script Purpose : + : +--]] + +function cast(Caster, Target, DmgType, MinVal, MaxVal, DoTType, DoTMinVal, DoTMaxVal) + -- Inflicts 35 - 58 piercing damage on target + if MaxVal ~= nil and MinVal < MaxVal then + SpellDamage(Target, DmgType, math.random(MinVal, MaxVal)) + else + SpellDamage(Target, DmgType, MinVal) + end + + -- Inflicts 10 - 16 piercing damage on target instantly and every 4 seconds + if DoTMaxVal ~= nil and DoTMinVal < DoTMaxVal then + SpellDamage(Target, DoTDmgType, math.random(DoTMinVal, DoTMaxVal)) + else + SpellDamage(Target, DoTDmgType, DoTMinVal) + end +end + +function tick(Caster, Target, DmgType, MinVal, MaxVal, DoTType, DoTMinVal, DoTMaxVal) + -- Inflicts 10 - 16 piercing damage on target instantly and every 4 seconds + if DoTMaxVal ~= nil and DoTMinVal < DoTMaxVal then + SpellDamage(Target, DoTDmgType, math.random(DoTMinVal, DoTMaxVal)) + else + SpellDamage(Target, DoTDmgType, DoTMinVal) + end +end diff --git a/server/Spells/Scout/Predator/Assassin/ImprovisedWeapon.lua b/server/Spells/Scout/Predator/Assassin/ImprovisedWeapon.lua new file mode 100644 index 000000000..bb8dca635 --- /dev/null +++ b/server/Spells/Scout/Predator/Assassin/ImprovisedWeapon.lua @@ -0,0 +1,18 @@ +--[[ + Script Name : Spells/Scout/Predator/Assassin/ImprovisedWeapon.lua + Script Author : neatz09 + Script Date : 2019.09.23 03:09:23 + Script Purpose : + : +--]] + +-- Inflicts 217 - 361 piercing damage on target + +function cast(Caster, Target, DmgType, MinVal, MaxVal) + if MaxVal ~= nil and MinVal < MaxVal then + SpellDamage(Target, DmgType, math.random(MinVal, MaxVal)) + else + SpellDamage(Target, DmgType, MinVal) + end +end + diff --git a/server/Spells/Scout/Predator/Assassin/JugularSlice.lua b/server/Spells/Scout/Predator/Assassin/JugularSlice.lua new file mode 100644 index 000000000..5dbd31845 --- /dev/null +++ b/server/Spells/Scout/Predator/Assassin/JugularSlice.lua @@ -0,0 +1,38 @@ +--[[ + Script Name : Spells/Scout/Predator/Assassin/JugularSlice.lua + Script Author : Jabantiz + Script Date : 2014.04.17 05:04:09 + Script Purpose : + : +--]] + +function precast(Caster, Target) + -- You must be in stealth. + if not IsStealthed(Caster) then + SendMessage(Caster, "You must be in stealth.", "yellow") + return false + end + + return true +end + +function cast(Caster, Target, DmgType, MinVal, MaxVal) + -- Inflicts 217 - 362 slashing damage on target + if MaxVal ~= nil and MinVal < MaxVal then + SpellDamage(Target, DmgType, math.random(MinVal, MaxVal)) + else + SpellDamage(Target, DmgType, MinVal) + end + + -- Stifles target + -- If Target is not Epic + if not IsEpic(Target) then + AddControlEffect(Target, 2) + end + + -- Resistibility increases against targets higher than level 29. +end + +function remove(Caster, Target) + RemoveControlEffect(Target, 2) +end diff --git a/server/Spells/Scout/Predator/Assassin/MaskedStrike.lua b/server/Spells/Scout/Predator/Assassin/MaskedStrike.lua new file mode 100644 index 000000000..ea936f8c2 --- /dev/null +++ b/server/Spells/Scout/Predator/Assassin/MaskedStrike.lua @@ -0,0 +1,33 @@ +--[[ + Script Name : Spells/Scout/Predator/Assassin/MaskedStrike.lua + Script Author : Jabantiz + Script Date : 2014.04.17 03:04:29 + Script Purpose : + : +--]] + +function precast(Caster, Target) + -- Must be flanking or behind + if IsFlanking(Caster, Target) then + return true + end + + SendMessage(Caster, "Must be flanking or behind", "yellow") + return false +end + +function cast(Caster, Target, DmgType, MinVal, MaxVal) + -- Inflicts 24 - 41 melee damage on target + if MaxVal ~= nil and MinVal < MaxVal then + SpellDamage(Target, DmgType, math.random(MinVal, MaxVal)) + else + SpellDamage(Target, DmgType, MinVal) + end +end + +function remove(Caster, Target) + -- Applies Shroud on termination. Lasts for 36.0 seconds. + -- Grants stealth to caster + -- Suspends caster's movement speed enhancements + Say(Caster, "Not Implemented: Stealth after attack") +end diff --git a/server/Spells/Scout/Predator/Assassin/Massacre.lua b/server/Spells/Scout/Predator/Assassin/Massacre.lua new file mode 100644 index 000000000..a7e3fe63f --- /dev/null +++ b/server/Spells/Scout/Predator/Assassin/Massacre.lua @@ -0,0 +1,26 @@ +--[[ + Script Name : Spells/Scout/Predator/Assassin/Massacre.lua + Script Author : Jabantiz + Script Date : 2014.04.17 05:04:44 + Script Purpose : + : +--]] + +function precast(Caster, Target) + -- You must be in stealth to use this! + if not IsStealthed(Caster) then + SendMessage(Caster, "You must be in stealth to use this!", "yellow") + return false + end + + return true +end + +function cast(Caster, Target, DmgType, MinVal, MaxVal) + -- Inflicts 203 - 339 melee damage on targets in Area of Effect + if MaxVal ~= nil and MinVal < MaxVal then + SpellDamage(Target, DmgType, math.random(MinVal, MaxVal)) + else + SpellDamage(Target, DmgType, MinVal) + end +end diff --git a/server/Spells/Scout/Predator/Assassin/MortalBlade.lua b/server/Spells/Scout/Predator/Assassin/MortalBlade.lua new file mode 100644 index 000000000..796936f31 --- /dev/null +++ b/server/Spells/Scout/Predator/Assassin/MortalBlade.lua @@ -0,0 +1,28 @@ +--[[ + Script Name : Spells/Scout/Predator/Assassin/MortalBlade.lua + Script Author : neatz09 + Script Date : 2019.09.23 03:09:36 + Script Purpose : + : +--]] +-- You must be in stealth. +function precast(Caster, Target) + -- You must be sneaking to use this ability. + if IsStealthed(Caster) then + return true + end + + SendMessage(Caster, "You must be sneaking to use this ability.", "yellow") + return false +end + +-- Inflicts 400 - 666 melee damage on target + +function cast(Caster, Target, DmgType, MinVal, MaxVal) + if MaxVal ~= nil and MinVal < MaxVal then + SpellDamage(Target, DmgType, math.random(MinVal, MaxVal)) + else + SpellDamage(Target, DmgType, MinVal) + end +end + diff --git a/server/Spells/Scout/Predator/Assassin/MurderousDesign.lua b/server/Spells/Scout/Predator/Assassin/MurderousDesign.lua new file mode 100644 index 000000000..dfb96cb73 --- /dev/null +++ b/server/Spells/Scout/Predator/Assassin/MurderousDesign.lua @@ -0,0 +1,10 @@ +--[[ + Script Name : Spells/Scout/Predator/Assassin/MurderousDesign.lua + Script Author : neatz09 + Script Date : 2019.09.28 05:09:56 + Script Purpose : + : +--]] + +-- Info from spell_display_effects (remove from script when done) +-- Causes 5% Threat to transfer to target when in combat diff --git a/server/Spells/Scout/Predator/Assassin/ParalyzingStrike.lua b/server/Spells/Scout/Predator/Assassin/ParalyzingStrike.lua new file mode 100644 index 000000000..f0c99e664 --- /dev/null +++ b/server/Spells/Scout/Predator/Assassin/ParalyzingStrike.lua @@ -0,0 +1,29 @@ +--[[ + Script Name : Spells/Scout/Predator/Assassin/ParalyzingStrike.lua + Script Author : John Adams + Script Date : 2013.08.12 06:08:54 + Script Purpose : + : +--]] + +function cast(Caster, Target) + -- code to cast the spell + Say(Caster, "Whoops! Guess this is not implemented yet!") + +-- Info from spell_display_effects (remove from script when done) +-- Inflicts 304 - 506 melee damage on target +-- Roots target +-- If Target is not Epic +-- 5% chance to dispel when target takes damage +-- Resistibility increases against targets higher than level 29. + +end + +function tick(Caster, Target) + -- code to process each call_frequency (tick) set in spell_tiers +end + +function remove(Caster, Target) + -- code to remove the spell +end + diff --git a/server/Spells/Scout/Predator/Assassin/QuickStrike.lua b/server/Spells/Scout/Predator/Assassin/QuickStrike.lua new file mode 100644 index 000000000..5ba5978ff --- /dev/null +++ b/server/Spells/Scout/Predator/Assassin/QuickStrike.lua @@ -0,0 +1,28 @@ +--[[ + Script Name : Spells/Scout/Predator/Assassin/QuickStrike.lua + Script Author : John Adams + Script Date : 2013.11.20 08:11:13 + Script Purpose : + : +--]] + +function cast(Caster, Target, DmgType, MinVal, MaxVal, DoTType, DoTMinVal, DoTMaxVal) + + -- Inflicts 6 - 10 melee damage on target + if MaxVal ~= nil and MinVal < MaxVal then + SpellDamage(Target, DmgType, math.random(MinVal, MaxVal)) + else + SpellDamage(Target, DmgType, MinVal) + end + +end + +function tick(Caster, Target, DmgType, MinVal, MaxVal, DoTType, DoTMinVal, DoTMaxVal) + + -- Inflicts 1 slashing damage on target every 4 seconds + if DoTMaxVal ~= nil and DoTMinVal < DoTMaxVal then + SpellDamage(Target, DoTType, math.random(DoTMinVal, DoTMaxVal)) + else + SpellDamage(Target, DoTType, DoTMinVal) + end +end diff --git a/server/Spells/Scout/Predator/Assassin/ShroudedAttack.lua b/server/Spells/Scout/Predator/Assassin/ShroudedAttack.lua new file mode 100644 index 000000000..d1d72cadb --- /dev/null +++ b/server/Spells/Scout/Predator/Assassin/ShroudedAttack.lua @@ -0,0 +1,55 @@ +--[[ + Script Name : dd_dot.lua + Script Purpose : Generic damage + 1 effect script + Script Author : John Adams + Script Date : 2008.12.02 +--]] + +function cast(Caster, Target, DDType, MinDDVal, MaxDDVal, EffectType, DamageType, MinEffectVal, MaxEffectVal) + + -- DD component + if MaxDDVal ~= nil and MinDDVal < MaxDDVal then + dmgAmount = math.random(MinDDVal, MaxDDVal) + SpellDamage(Target, DDType, dmgAmount) + --AddHate(Caster, Target, dmgAmount) + else + SpellDamage(Target, DDType, MinDDVal) + --AddHate(Caster, Target, MinDDVal) + end + + -- Effect component - only process this code if there is an EffectType param + if EffectType ~= nil then + + -- Determine if there is a range to effect values + if MaxEffectVal ~= nil and MinEffectVal < MaxEffectVal then + EffectValue = math.random(MinEffectVal, MaxEffectVal) + else + EffectValue = MinEffectVal + end + + -- Determine EffectType - either a DamageType or a String value passed as param 4 + if EffectType == "heal" then + ModifyHP(Caster, EffectValue) + else + SpellDamage(Target, DamageType, EffectValue) + end + + end + +end + +function tick(Caster, Target, DDType, MinDDVal, MaxDDVal, EffectType, DamageType, MinEffectVal, MaxEffectVal) + + if MaxEffectVal ~= nil and MinEffectVal < MaxEffectVal then + EffectValue = math.random(MinEffectVal, MaxEffectVal) + else + EffectValue = MinEffectVal + end + + if EffectType == "heal" then + ModifyHP(Caster, EffectValue) + else + SpellDamage(Target, DamageType, EffectValue) + end + +end diff --git a/server/Spells/Scout/Predator/Assassin/SlipAway.lua b/server/Spells/Scout/Predator/Assassin/SlipAway.lua new file mode 100644 index 000000000..1c56c63ba --- /dev/null +++ b/server/Spells/Scout/Predator/Assassin/SlipAway.lua @@ -0,0 +1,28 @@ +--[[ + Script Name : Spells/Scout/Predator/Assassin/SlipAway.lua + Script Author : John Adams + Script Date : 2013.08.12 06:08:57 + Script Purpose : + : +--]] + +function cast(Caster, Target) + -- code to cast the spell + Say(Caster, "Whoops! Guess this is not implemented yet!") + +-- Info from spell_display_effects (remove from script when done) +-- Grants stealth to caster +-- Suspends caster's movement speed enhancements +-- Grants See Invisibility to caster +-- This effect cancels during combat + +end + +function tick(Caster, Target) + -- code to process each call_frequency (tick) set in spell_tiers +end + +function remove(Caster, Target) + -- code to remove the spell +end + diff --git a/server/Spells/Scout/Predator/Assassin/SpineShot.lua b/server/Spells/Scout/Predator/Assassin/SpineShot.lua new file mode 100644 index 000000000..1d58215bf --- /dev/null +++ b/server/Spells/Scout/Predator/Assassin/SpineShot.lua @@ -0,0 +1,33 @@ +--[[ + Script Name : Spells/Scout/Predator/Assassin/SpineShot.lua + Script Author : Jabantiz + Script Date : 2014.04.17 04:04:06 + Script Purpose : + : +--]] +function precast(Caster, Target) +-- Must be flanking or behind + if not IsFlanking(Target, Caster) then + SendMessage(Caster, "Must be flanking or behind", "yellow") + return false + end + + -- If weapon equipped in Ranged + local item = GetEquippedItemBySlot(Caster, 16) + if item~= nil then + if GetItemType(item) == 2 then + return true + end + end + + return false, 68 +end + +function cast(Caster, Target, MinVal, MaxVal) + -- Inflicts 189 - 315 ranged damage on target + if MaxVal ~= nil and MinVal < MaxVal then + SpellDamage(Target, 0, math.random(MinVal, MaxVal)) + else + SpellDamage(Target, 0, MinVal) + end +end diff --git a/server/Spells/Scout/Predator/Assassin/StealthAssault.lua b/server/Spells/Scout/Predator/Assassin/StealthAssault.lua new file mode 100644 index 000000000..8ec055b85 --- /dev/null +++ b/server/Spells/Scout/Predator/Assassin/StealthAssault.lua @@ -0,0 +1,12 @@ +--[[ + Script Name : Spells/Scout/Predator/Assassin/StealthAssault.lua + Script Author : neatz09 + Script Date : 2019.09.29 11:09:09 + Script Purpose : + : +--]] + +-- Info from spell_display_effects (remove from script when done) +-- Inflicts 140 - 234 melee damage on targets in Area of Effect +-- Inflicts 43 piercing damage on targets in Area of Effect instantly and every 2 seconds +-- You must be in stealth or have Bloody Assault. diff --git a/server/Spells/Scout/Predator/Assassin/Torture.lua b/server/Spells/Scout/Predator/Assassin/Torture.lua new file mode 100644 index 000000000..bcc062acf --- /dev/null +++ b/server/Spells/Scout/Predator/Assassin/Torture.lua @@ -0,0 +1,20 @@ +--[[ + Script Name : Spells/Scout/Predator/Assassin/Torture.lua + Script Author : Jabantiz + Script Date : 2014.04.17 04:04:55 + Script Purpose : + : +--]] + +function cast(Caster, Target, SkillAmt, BonusAmt) + -- Decreases Defense of target by 2.3 + AddSkillBonus(Target, GetSkillIDByName("Defense"), SkillAmt) + + -- Decreases Mitigation of target vs physical damage by 52 + AddSpellBonus(Target, 200, BonusAmt) +end + +function remove(Caster, Target) + RemoveSkillBonus(Target) + RemoveSpellBonus(Target) +end diff --git a/server/Spells/Scout/Predator/Assassin/Villainy.lua b/server/Spells/Scout/Predator/Assassin/Villainy.lua new file mode 100644 index 000000000..2df234edc --- /dev/null +++ b/server/Spells/Scout/Predator/Assassin/Villainy.lua @@ -0,0 +1,30 @@ +--[[ + Script Name : Spells/Scout/Predator/Assassin/Villainy.lua + Script Author : Jabantiz + Script Date : 2014.04.17 04:04:15 + Script Purpose : + : +--]] + +function cast(Caster, Target, Agi, Avoid, Multi, PhyMit, SpellMit) + -- Increases AGI of caster by 8.7 + AddSpellBonus(Target, 2, Agi) + + -- Adds 14.0% to base avoidance. + AddSpellBonus(Target, 696, Avoid) + + -- Increases Multi Attack Chance of caster by 19.0 + AddSpellBonus(Target, 641, Multi) + + -- Increases Mitigation of caster vs physical damage by 69 + AddSpellBonus(Target, 200, PhyMit) + + -- Increases Mitigation of caster vs elemental, noxious and arcane damage by 154 + AddSpellBonus(Target, 201, SpellMit) + AddSpellBonus(Target, 202, SpellMit) + AddSpellBonus(Target, 203, SpellMit) +end + +function remove(Caster, Target) + RemoveSpellBonus(Target) +end diff --git a/server/Spells/Scout/Predator/Assassin/WhirlingBlades.lua b/server/Spells/Scout/Predator/Assassin/WhirlingBlades.lua new file mode 100644 index 000000000..c01468ea9 --- /dev/null +++ b/server/Spells/Scout/Predator/Assassin/WhirlingBlades.lua @@ -0,0 +1,35 @@ +--[[ + Script Name : Spells/Scout/Predator/Assassin/WhirlingBlades.lua + Script Author : Jabantiz + Script Date : 2014.04.17 04:04:59 + Script Purpose : + : +--]] + +function cast(Caster, Target, DmgType, MinVal, MaxVal, Def, OffSkills) + -- On a melee hit this spell may cast Swipe on target of attack. Triggers about 2.0 times per minute. + AddProc(Target, 3, 10) + + -- Decreases Defense of caster by 5.1 + AddSkillBonus(Target, GetSkillIDByName("Defense"), Def) + + -- Increases Slashing, Piercing, Ranged and Crushing of caster by 6.9 + AddSkillBonus(Target, GetSkillIDByName("Slashing"), OffSkills) + AddSkillBonus(Target, GetSkillIDByName("Piercing"), OffSkills) + AddSkillBonus(Target, GetSkillIDByName("Ranged"), OffSkills) + AddSkillBonus(Target, GetSkillIDByName("Crushing"), OffSkills) + +end + +function proc(Caster, Target, Type, DmgType, MinVal, MaxVal, Def, OffSkills) + -- On a melee hit this spell may cast Swipe on target of attack. Triggers about 2.0 times per minute. + if Type == 3 then + -- Inflicts 62 - 104 melee damage on target + ProcDamage(Caster, Target, "Swipe", DmgType, MinVal, MaxVal) + end +end + +function remove(Caster, Target) + RemoveSkillBonus(Target) + RemoveProc(Target) +end diff --git a/server/Spells/Scout/Predator/HonedReflexes.lua b/server/Spells/Scout/Predator/HonedReflexes.lua new file mode 100644 index 000000000..acb2a0fa6 --- /dev/null +++ b/server/Spells/Scout/Predator/HonedReflexes.lua @@ -0,0 +1,24 @@ +--[[ + Script Name : Spells/Scout/Predator/HonedReflexes.lua + Script Author : John Adams + Script Date : 2013.08.11 11:08:34 + Script Purpose : + : +--]] + +function cast(Caster, Target) + -- code to cast the spell + Say(Caster, "Whoops! Guess this is not implemented yet!") + +-- Info from spell_display_effects (remove from script when done) + +end + +function tick(Caster, Target) + -- code to process each call_frequency (tick) set in spell_tiers +end + +function remove(Caster, Target) + -- code to remove the spell +end + diff --git a/server/Spells/Scout/Predator/Ranger/ArchersFury.lua b/server/Spells/Scout/Predator/Ranger/ArchersFury.lua new file mode 100644 index 000000000..7f04dab92 --- /dev/null +++ b/server/Spells/Scout/Predator/Ranger/ArchersFury.lua @@ -0,0 +1,34 @@ +--[[ + Script Name : Spells/Scout/Predator/Ranger/ArchersFury.lua + Script Author : Jabantiz + Script Date : 2014.03.10 07:03:13 + Script Purpose : + : +--]] + +function cast(Caster, Target, Dmg, DefAmt, SkillAmt) + -- On a ranged hit this spell has a 30% chance to cast Quick Shot on target of attack. + AddProc(Target, 18, 30) + + -- Decreases Defense of caster by 5.1 + AddSkillBonus(Target, GetSkillIDByName("Defense"), DefAmt) + + -- Increases Crushing, Piercing, Ranged and Slashing of caster by 6.9 + AddSkillBonus(Target, GetSkillIDByName("Crushing"), SkillAmt) + AddSkillBonus(Target, GetSkillIDByName("Piercing"), SkillAmt) + AddSkillBonus(Target, GetSkillIDByName("Ranged"), SkillAmt) + AddSkillBonus(Target, GetSkillIDByName("Slashing"), SkillAmt) + +end + +function proc(Caster, Target, Type, Dmg, DefAmt, SkillAmt) + if Type == 18 then + -- Inflicts 83 ranged damage on target + ProcDamage(Caster, Target, "Quick Shot", 0, Dmg) + end +end + +function remove(Caster, Target) + RemoveSkillBonus(Target) + RemoveProc(Target) +end diff --git a/server/Spells/Scout/Predator/Ranger/ArrowRip.lua b/server/Spells/Scout/Predator/Ranger/ArrowRip.lua new file mode 100644 index 000000000..e2e2d8034 --- /dev/null +++ b/server/Spells/Scout/Predator/Ranger/ArrowRip.lua @@ -0,0 +1,26 @@ +--[[ + Script Name : Spells/Scout/Predator/Ranger/ArrowRip.lua + Script Author : John Adams + Script Date : 2013.08.11 11:08:08 + Script Purpose : + : +--]] + +function cast(Caster, Target) + -- code to cast the spell + Say(Caster, "Whoops! Guess this is not implemented yet!") + +-- Info from spell_display_effects (remove from script when done) +-- Inflicts 143 - 239 melee damage on target +-- Returns the last arrow used to the ranger. + +end + +function tick(Caster, Target) + -- code to process each call_frequency (tick) set in spell_tiers +end + +function remove(Caster, Target) + -- code to remove the spell +end + diff --git a/server/Spells/Scout/Predator/Ranger/BlazingStrike.lua b/server/Spells/Scout/Predator/Ranger/BlazingStrike.lua new file mode 100644 index 000000000..d1d72cadb --- /dev/null +++ b/server/Spells/Scout/Predator/Ranger/BlazingStrike.lua @@ -0,0 +1,55 @@ +--[[ + Script Name : dd_dot.lua + Script Purpose : Generic damage + 1 effect script + Script Author : John Adams + Script Date : 2008.12.02 +--]] + +function cast(Caster, Target, DDType, MinDDVal, MaxDDVal, EffectType, DamageType, MinEffectVal, MaxEffectVal) + + -- DD component + if MaxDDVal ~= nil and MinDDVal < MaxDDVal then + dmgAmount = math.random(MinDDVal, MaxDDVal) + SpellDamage(Target, DDType, dmgAmount) + --AddHate(Caster, Target, dmgAmount) + else + SpellDamage(Target, DDType, MinDDVal) + --AddHate(Caster, Target, MinDDVal) + end + + -- Effect component - only process this code if there is an EffectType param + if EffectType ~= nil then + + -- Determine if there is a range to effect values + if MaxEffectVal ~= nil and MinEffectVal < MaxEffectVal then + EffectValue = math.random(MinEffectVal, MaxEffectVal) + else + EffectValue = MinEffectVal + end + + -- Determine EffectType - either a DamageType or a String value passed as param 4 + if EffectType == "heal" then + ModifyHP(Caster, EffectValue) + else + SpellDamage(Target, DamageType, EffectValue) + end + + end + +end + +function tick(Caster, Target, DDType, MinDDVal, MaxDDVal, EffectType, DamageType, MinEffectVal, MaxEffectVal) + + if MaxEffectVal ~= nil and MinEffectVal < MaxEffectVal then + EffectValue = math.random(MinEffectVal, MaxEffectVal) + else + EffectValue = MinEffectVal + end + + if EffectType == "heal" then + ModifyHP(Caster, EffectValue) + else + SpellDamage(Target, DamageType, EffectValue) + end + +end diff --git a/server/Spells/Scout/Predator/Ranger/BloodyReminder.lua b/server/Spells/Scout/Predator/Ranger/BloodyReminder.lua new file mode 100644 index 000000000..78bd15af2 --- /dev/null +++ b/server/Spells/Scout/Predator/Ranger/BloodyReminder.lua @@ -0,0 +1,24 @@ +--[[ + Script Name : Spells/Scout/Predator/Ranger/BloodyReminder.lua + Script Author : Jabantiz + Script Date : 2014.03.10 06:03:26 + Script Purpose : + : +--]] + +function cast(Caster, Target, TickDmgType, TickDmg, DmgType, MinVal, MaxVal) + -- Inflicts 30 piercing damage on target instantly and every 2.6 seconds + SpellDamage(Target, TickDmgType, TickDmg) + + -- Inflicts 11 - 18 melee damage on target + if MaxVal ~= nil and MinVal < MaxVal then + SpellDamage(Target, DmgType, math.random(MinVal, MaxVal)) + else + SpellDamage(Target, DmgType, MinVal) + end +end + +function tick(Caster, Target, TickDmgType, TickDmg, DmgType, MinVal, MaxVal) + -- Inflicts 30 piercing damage on target instantly and every 2.6 seconds + SpellDamage(Target, TickDmgType, TickDmg) +end diff --git a/server/Spells/Scout/Predator/Ranger/Coverage.lua b/server/Spells/Scout/Predator/Ranger/Coverage.lua new file mode 100644 index 000000000..25a36ca61 --- /dev/null +++ b/server/Spells/Scout/Predator/Ranger/Coverage.lua @@ -0,0 +1,24 @@ +--[[ + Script Name : Spells/Scout/Predator/Ranger/Coverage.lua + Script Author : John Adams + Script Date : 2013.08.11 11:08:19 + Script Purpose : + : +--]] + +function cast(Caster, Target) + -- code to cast the spell + Say(Caster, "Whoops! Guess this is not implemented yet!") + +-- Info from spell_display_effects (remove from script when done) + +end + +function tick(Caster, Target) + -- code to process each call_frequency (tick) set in spell_tiers +end + +function remove(Caster, Target) + -- code to remove the spell +end + diff --git a/server/Spells/Scout/Predator/Ranger/CripplingArrow.lua b/server/Spells/Scout/Predator/Ranger/CripplingArrow.lua new file mode 100644 index 000000000..944557d22 --- /dev/null +++ b/server/Spells/Scout/Predator/Ranger/CripplingArrow.lua @@ -0,0 +1,37 @@ +--[[ + Script Name : Spells/Scout/Predator/Ranger/CripplingArrow.lua + Script Author : Jabantiz + Script Date : 2014.03.10 04:03:07 + Script Purpose : + : +--]] + +function precast(Caster, Target) + -- Requires bow + local item = GetEquippedItemBySlot(Caster, 16) + if not item or GetItemType(item) ~= 2 then + -- no item or item is not a ranged item (no way to determine different range items currently) + return false, 68 + end + + return true +end + +function cast(Caster, Target, MinVal, MaxVal, SkillAmt) + -- Inflicts 175 - 293 ranged damage on target + if MaxVal ~= nil and MinVal < MaxVal then + SpellDamage(Target, 0, math.random(MinVal, MaxVal)) + else + SpellDamage(Target, 0, MinVal) + end + + -- Decreases Deflection and Parry of target by 10.8 + AddSkillBonus(Target, GetSkillIDByName("Deflection"), SkillAmt) + AddSkillBonus(Target, GetSkillIDByName("Parry"), SkillAmt) + +end + +function remove(Caster, Target) + RemoveSkillBonus(Target) +end + diff --git a/server/Spells/Scout/Predator/Ranger/EaglesTalon.lua b/server/Spells/Scout/Predator/Ranger/EaglesTalon.lua new file mode 100644 index 000000000..79872118f --- /dev/null +++ b/server/Spells/Scout/Predator/Ranger/EaglesTalon.lua @@ -0,0 +1,32 @@ +--[[ + Script Name : Spells/Scout/Predator/Ranger/EaglesTalon.lua + Script Author : John Adams + Script Date : 2013.08.11 11:08:22 + Script Purpose : + : +--]] + +function cast(Caster, Target) + -- code to cast the spell + Say(Caster, "Whoops! Guess this is not implemented yet!") + +-- Info from spell_display_effects (remove from script when done) +-- On a ranged hit this spell may cast Talon Strike on target of attack. Lasts for 10.0 seconds. Triggers about 2.4 times per minute. +-- Adds normalized combat art damage based on 20% of your current agility. +-- Gives caster a 60.0% chance to not use ammunition on an attack +-- Inflicts 454 - 680 slashing damage on target +-- Cannot be modified except by direct means +-- Improves base auto attack multiplier of caster by 0.200 +-- Improves the combat art damage of the ranger by 10% +-- Cannot be modified except by direct means + +end + +function tick(Caster, Target) + -- code to process each call_frequency (tick) set in spell_tiers +end + +function remove(Caster, Target) + -- code to remove the spell +end + diff --git a/server/Spells/Scout/Predator/Ranger/Emberstrike.lua b/server/Spells/Scout/Predator/Ranger/Emberstrike.lua new file mode 100644 index 000000000..c6605244e --- /dev/null +++ b/server/Spells/Scout/Predator/Ranger/Emberstrike.lua @@ -0,0 +1,26 @@ +--[[ + Script Name : Spells/Scout/Predator/Ranger/Emberstrike.lua + Script Author : Jabantiz + Script Date : 2014.03.09 08:03:38 + Script Purpose : + : +--]] + +function precast(Caster, Target) + -- You must be sneaking to use this ability. + if IsStealthed(Caster) then + return true + else + SendMessage(Caster, "You must be sneaking to use this ability.", "yellow") + return false + end +end + +function cast(Caster, Target, DmgType, MinVal, MaxVal) + -- Inflicts 14 - 23 heat damage on target + if MaxVal ~= nil and MinVal < MaxVal then + SpellDamage(Target, DmgType, math.random(MinVal, MaxVal)) + else + SpellDamage(Target, DmgType, MinVal) + end +end \ No newline at end of file diff --git a/server/Spells/Scout/Predator/Ranger/Ensnare.lua b/server/Spells/Scout/Predator/Ranger/Ensnare.lua new file mode 100644 index 000000000..1a0c49c4c --- /dev/null +++ b/server/Spells/Scout/Predator/Ranger/Ensnare.lua @@ -0,0 +1,23 @@ +--[[ + Script Name : Spells/Scout/Predator/Ranger/Ensnare.lua + Script Author : Jabantiz + Script Date : 2014.03.10 06:03:27 + Script Purpose : + : +--]] + +function cast(Caster, Target, Mit, Snare) + -- Decreases Mitigation of target vs elemental damage by 197 + AddSpellBonus(Target, 201, BonusAmt) + + -- Applies Snare. Lasts for 24.0 seconds. + -- Slows target by 28.3% + -- 5% chance to dispel when target receives hostile action + -- 5% chance to dispel when target takes damage + local slow = 100.0 - snare + SetSpeedMultiplier(Target, slow) +end + +function remove(Caster, Target) + SetSpeedMultiplier(Target, 1) +end \ No newline at end of file diff --git a/server/Spells/Scout/Predator/Ranger/FocusAim.lua b/server/Spells/Scout/Predator/Ranger/FocusAim.lua new file mode 100644 index 000000000..594744a7a --- /dev/null +++ b/server/Spells/Scout/Predator/Ranger/FocusAim.lua @@ -0,0 +1,21 @@ +--[[ + Script Name : Spells/Scout/Predator/Ranger/FocusAim.lua + Script Author : neatz09 + Script Date : 2019.10.17 11:10:31 + Script Purpose : + : +--]] + +-- Info from spell_display_effects (remove from script when done) +-- Applies Nature's Focus. Lasts for 10.0 seconds. +-- Group members (AE) will have their chance to hit with a weapon increased by 13.5% +-- Increases Crushing of group members (AE) by 23.8 +-- Increases Piercing of group members (AE) by 23.8 +-- If profession other than Ranger +-- Increases Slashing of group members (AE) by 23.8 +-- If profession other than Ranger +-- Caster will have their chance to hit with a weapon increased by 4.5% +-- Increases Haste of caster by 29.7 +-- Increases Multi Attack of caster by 34.1 +-- Decreases Slashing and Piercing of caster by 66.0 +-- Increases Ranged of caster by 23.8 diff --git a/server/Spells/Scout/Predator/Ranger/HawkAttack.lua b/server/Spells/Scout/Predator/Ranger/HawkAttack.lua new file mode 100644 index 000000000..e054ac1ba --- /dev/null +++ b/server/Spells/Scout/Predator/Ranger/HawkAttack.lua @@ -0,0 +1,24 @@ +--[[ + Script Name : Spells/Scout/Predator/Ranger/HawkAttack.lua + Script Author : John Adams + Script Date : 2013.08.11 11:08:07 + Script Purpose : + : +--]] + +function cast(Caster, Target) + -- code to cast the spell + Say(Caster, "Whoops! Guess this is not implemented yet!") + +-- Info from spell_display_effects (remove from script when done) + +end + +function tick(Caster, Target) + -- code to process each call_frequency (tick) set in spell_tiers +end + +function remove(Caster, Target) + -- code to remove the spell +end + diff --git a/server/Spells/Scout/Predator/Ranger/HiddenShot.lua b/server/Spells/Scout/Predator/Ranger/HiddenShot.lua new file mode 100644 index 000000000..9fc0b1e0a --- /dev/null +++ b/server/Spells/Scout/Predator/Ranger/HiddenShot.lua @@ -0,0 +1,35 @@ +--[[ + Script Name : Spells/Scout/Predator/Ranger/HiddenShot.lua + Script Author : neatz09 + Script Date : 2019.10.06 10:10:03 + Script Purpose : + : +--]] + + + +function precast(Caster, Target) + -- You must be sneaking to use this ability. + if IsStealthed(Caster) then + return true + else + SendMessage(Caster, "You must be sneaking to use this ability.", "yellow") + return false + end + -- Requires bow + local item = GetEquippedItemBySlot(Caster, 16) + if not item or GetItemType(item) ~= 2 then + -- no item or item is not a ranged item (no way to determine different range items currently) + return false, 68 + end + + return true +end +-- Inflicts 480 - 800 ranged damage on target +function cast(Caster, Target, DmgType, MinVal, MaxVal) + if MaxVal ~= nil and MinVal < MaxVal then + SpellDamage(Target, DmgType, math.random(MinVal, MaxVal)) + else + SpellDamage(Target, DmgType, MinVal) + end +end \ No newline at end of file diff --git a/server/Spells/Scout/Predator/Ranger/HuntersInstinct.lua b/server/Spells/Scout/Predator/Ranger/HuntersInstinct.lua new file mode 100644 index 000000000..bf1139cdd --- /dev/null +++ b/server/Spells/Scout/Predator/Ranger/HuntersInstinct.lua @@ -0,0 +1,35 @@ +--[[ + Script Name : Spells/Scout/Predator/Ranger/HuntersInstinct.lua + Script Author : Jabantiz + Script Date : 2014.03.10 06:03:14 + Script Purpose : + : +--]] + +function cast(Caster, Target, Agi, AtkSpeed, CombatMove, Avoid, PhyMit, SpellMit) + -- Increases AGI of caster by 8.7 + AddSpellBonus(Target, 2, Agi) + + -- Increases Attack Speed of caster by 12.4 + AddSpellBonus(Target, 617, AtkSpeed) + + -- Increases in-combat movement speed of caster by 4.5% + AddSpellBonus(Target, 616, CombatMove) + + -- Adds 14.0% to base avoidance. + AddSpellBonus(Target, 696, Avoid) -- Not sure on 696 for this stat + + -- Increases Mitigation of caster vs physical damage by 69 + AddSpellBonus(Target, 200, PhyMit) + + -- Increases Mitigation of caster vs elemental, noxious and arcane damage by 154 + AddSpellBonus(Target, 201, SpellMit) + AddSpellBonus(Target, 202, SpellMit) + AddSpellBonus(Target, 203, SpellMit) + +end + +function remove(Caster, Target) + RemoveSpellBonus(Target) +end + diff --git a/server/Spells/Scout/Predator/Ranger/ImmobilizingLunge.lua b/server/Spells/Scout/Predator/Ranger/ImmobilizingLunge.lua new file mode 100644 index 000000000..6873163b5 --- /dev/null +++ b/server/Spells/Scout/Predator/Ranger/ImmobilizingLunge.lua @@ -0,0 +1,26 @@ +--[[ + Script Name : Spells/Scout/Predator/Ranger/ImmobilizingLunge.lua + Script Author : Jabantiz + Script Date : 2014.03.10 06:03:49 + Script Purpose : + : +--]] + +function cast(Caster, Target, DmgType, MinVal, MaxVal) + -- Inflicts 58 - 97 melee damage on target + if MaxVal ~= nil and MinVal < MaxVal then + SpellDamage(Target, DmgType, math.random(MinVal, MaxVal)) + else + SpellDamage(Target, DmgType, MinVal) + end + + -- Roots target + -- If Target is not Epic + if not IsEpic(Target) then + SetSpeedMultiplier(Target, 0) + end +end + +function remove(Caster, Target) + SetSpeedMultiplier(Target, 1) +end diff --git a/server/Spells/Scout/Predator/Ranger/KillingInstinct.lua b/server/Spells/Scout/Predator/Ranger/KillingInstinct.lua new file mode 100644 index 000000000..867e2946f --- /dev/null +++ b/server/Spells/Scout/Predator/Ranger/KillingInstinct.lua @@ -0,0 +1,24 @@ +--[[ + Script Name : Spells/Scout/Predator/Ranger/KillingInstinct.lua + Script Author : John Adams + Script Date : 2013.08.11 11:08:13 + Script Purpose : + : +--]] + +function cast(Caster, Target) + -- code to cast the spell + Say(Caster, "Whoops! Guess this is not implemented yet!") + +-- Info from spell_display_effects (remove from script when done) + +end + +function tick(Caster, Target) + -- code to process each call_frequency (tick) set in spell_tiers +end + +function remove(Caster, Target) + -- code to remove the spell +end + diff --git a/server/Spells/Scout/Predator/Ranger/LightningStrike.lua b/server/Spells/Scout/Predator/Ranger/LightningStrike.lua new file mode 100644 index 000000000..1f221d892 --- /dev/null +++ b/server/Spells/Scout/Predator/Ranger/LightningStrike.lua @@ -0,0 +1,16 @@ +--[[ + Script Name : Spells/Scout/Predator/Ranger/LightningStrike.lua + Script Author : John Adams + Script Date : 2013.11.20 07:11:53 + Script Purpose : + : +--]] + +function cast(Caster, Target, DmgType, MinVal, MaxVal) + -- Inflicts 8 - 13 heat damage on target + if MaxVal ~= nil and MinVal < MaxVal then + SpellDamage(Target, DmgType, math.random(MinVal, MaxVal)) + else + SpellDamage(Target, DmgType, MinVal) + end +end diff --git a/server/Spells/Scout/Predator/Ranger/MakeshiftArrows.lua b/server/Spells/Scout/Predator/Ranger/MakeshiftArrows.lua new file mode 100644 index 000000000..d5c90e35b --- /dev/null +++ b/server/Spells/Scout/Predator/Ranger/MakeshiftArrows.lua @@ -0,0 +1,27 @@ +--[[ + Script Name : Spells/Scout/Predator/Ranger/MakeshiftArrows.lua + Script Author : Jabantiz + Script Date : 2014.03.10 04:03:05 + Script Purpose : + : +--]] + +function cast(Caster, Target) + -- Grants a total of 60 triggers of the spell. + SetSpellTriggerCount(60, 1) + + -- On a ranged hit this spell will cast Makeshift Arrow on target of attack. + AddProc(Caster, 18, 100) +end + +function proc(Caster, Target, Type, DmgType, DmgAmt) + -- Inflicts 71 piercing damage on target + if Type == 18 then + ProcDamage(Caster, Target, "Makeshift Arrow", DmgType, DmgAmt) + RemoveTriggerFromSpell(1) + end +end + +function remove(Caster, Target) + RemoveProc(Caster) +end diff --git a/server/Spells/Scout/Predator/Ranger/MiracleShot.lua b/server/Spells/Scout/Predator/Ranger/MiracleShot.lua new file mode 100644 index 000000000..dce7055f5 --- /dev/null +++ b/server/Spells/Scout/Predator/Ranger/MiracleShot.lua @@ -0,0 +1,34 @@ +--[[ + Script Name : Spells/Scout/Predator/Ranger/MiracleShot.lua + Script Author : neatz09 + Script Date : 2019.09.28 05:09:27 + Script Purpose : + : +--]] + +-- Requires bow or aim +function precast(Caster, Target) + -- Requires bow + local item = GetEquippedItemBySlot(Caster, 16) + if not item or GetItemType(item) ~= 2 then + -- no item or item is not a ranged item (no way to determine different range items currently) + return false, 68 + end + + return true +end + +-- Inflicts 170 - 284 ranged damage on target + +function cast(Caster, Target, DmgType, MinVal, MaxVal) + if MaxVal ~= nil and MinVal < MaxVal then + SpellDamage(Target, DmgType, math.random(MinVal, MaxVal)) + else + SpellDamage(Target, DmgType, MinVal) + end + +end + + +-- Requires you to currently have line of sight or to have acquired the target with line of sight + diff --git a/server/Spells/Scout/Predator/Ranger/NaturalSelection.lua b/server/Spells/Scout/Predator/Ranger/NaturalSelection.lua new file mode 100644 index 000000000..9cd922d1f --- /dev/null +++ b/server/Spells/Scout/Predator/Ranger/NaturalSelection.lua @@ -0,0 +1,32 @@ +--[[ + Script Name : Spells/Scout/Predator/Ranger/NaturalSelection.lua + Script Author : Jabantiz + Script Date : 2014.03.10 07:03:13 + Script Purpose : + : +--]] + +function precast(Caster, Target) + -- You must be in stealth to use this! + if not IsStealthed(Caster) then + SendMessage(Caster, "You must be in stealth to use this!", "yellow") + end + + -- Requires bow + local item = GetEquippedItemBySlot(Caster, 16) + if not item or GetItemType(item) ~= 2 then + -- no item or item is not a ranged item (no way to determine different range items currently) + return false, 68 + end + + return true +end + +function cast(Caster, Target, MinVal, MaxVal) + -- Inflicts 184 - 308 ranged damage on targets in Area of Effect + if MaxVal ~= nil and MinVal < MaxVal then + SpellDamage(Target, 0, math.random(MinVal, MaxVal)) + else + SpellDamage(Target, 0, MinVal) + end +end \ No newline at end of file diff --git a/server/Spells/Scout/Predator/Ranger/PrimalReflexes.lua b/server/Spells/Scout/Predator/Ranger/PrimalReflexes.lua new file mode 100644 index 000000000..ad67e23c5 --- /dev/null +++ b/server/Spells/Scout/Predator/Ranger/PrimalReflexes.lua @@ -0,0 +1,10 @@ +--[[ + Script Name : Spells/Scout/Predator/Ranger/PrimalReflexes.lua + Script Author : neatz09 + Script Date : 2019.10.06 10:10:11 + Script Purpose : + : +--]] + +-- Info from spell_display_effects (remove from script when done) +-- Decreases Hate Gain of caster by 7.8% diff --git a/server/Spells/Scout/Predator/Ranger/RangersBlade.lua b/server/Spells/Scout/Predator/Ranger/RangersBlade.lua new file mode 100644 index 000000000..b86ce5eb8 --- /dev/null +++ b/server/Spells/Scout/Predator/Ranger/RangersBlade.lua @@ -0,0 +1,32 @@ +--[[ + Script Name : Spells/Scout/Predator/Ranger/RangersBlade.lua + Script Author : Jabantiz + Script Date : 2014.03.10 06:03:48 + Script Purpose : + : +--]] + +function precast(Caster, Target) + -- You must be sneaking to use this ability. + if not IsStealthed(Caster) then + SendMessage(Caster, "You must be sneaking to use this ability.", "yellow") + return false + end + + -- Must be flanking or behind + if not IsFlanking(Caster, Target) and not IsBehind(Caster, Target) then + SendMessage(Caster, "Must be flanking or behind", "yellow") + return false + end + + return true +end + +function cast(Caster, Target, DmgType, MinVal, MaxVal) + -- Inflicts 153 - 256 melee damage on target + if MaxVal ~= nil and MinVal < MaxVal then + SpellDamage(Target, DmgType, math.random(MinVal, MaxVal)) + else + SpellDamage(Target, DmgType, MinVal) + end +end diff --git a/server/Spells/Scout/Predator/Ranger/RearShot.lua b/server/Spells/Scout/Predator/Ranger/RearShot.lua new file mode 100644 index 000000000..696610238 --- /dev/null +++ b/server/Spells/Scout/Predator/Ranger/RearShot.lua @@ -0,0 +1,45 @@ +--[[ + Script Name : Spells/Scout/Predator/Ranger/RearShot.lua + Script Author : Jabantiz + Script Date : 2014.03.09 08:03:08 + Script Purpose : + : +--]] + +function precast(Caster, Target) + -- Must be flanking or behind + if not IsFlanking(Caster, Target) then + SendMessage(Caster, "Must be flanking or behind.", "yellow") + return false + end + + -- Requires bow + local item = GetEquippedItemBySlot(Caster, 16) + if not item or GetItemType(item) ~= 2 then + -- no item or item is not a ranged item (no way to determine different range items currently) + return false, 68 + end + + return true +end + +function cast(Caster, Target, Snare, MinVal, MaxVal) + -- Inflicts 22 - 38 ranged damage on target + if MaxVal ~= nil and MinVal < MaxVal then + SpellDamage(Target, 0, math.random(MinVal, MaxVal)) + else + SpellDamage(Target, 0, MinVal) + end + + -- Applies Snare on termination. Lasts for 24.0 seconds. + -- Slows target by 27.4% + -- 5% chance to dispel when target receives hostile action + -- 5% chance to dispel when target takes damage + local slow = 100.0 - snare + SetSpeedMultiplier(Target, slow) + AddSpellTimer(24000, "RemoveSnare") +end + +function RemoveSnare(Caster, Target) + SetSpeedMultiplier(Target, 1) +end diff --git a/server/Spells/Scout/Predator/Ranger/SearingShot.lua b/server/Spells/Scout/Predator/Ranger/SearingShot.lua new file mode 100644 index 000000000..ba30910cd --- /dev/null +++ b/server/Spells/Scout/Predator/Ranger/SearingShot.lua @@ -0,0 +1,36 @@ +--[[ + Script Name : Spells/Scout/Predator/Ranger/SearingShot.lua + Script Author : Jabantiz + Script Date : 2014.03.10 04:03:03 + Script Purpose : + : +--]] + +function precast(Caster, Target) + -- Requires bow + local item = GetEquippedItemBySlot(Caster, 16) + if not item or GetItemType(item) ~= 2 then + -- no item or item is not a ranged item (no way to determine different range items currently) + return false, 68 + end + + return true +end + +function cast(Caster, Target, DmgType, MinVal, MaxVal) + -- Inflicts 9 - 15 heat damage on target + if MaxVal ~= nil and MinVal < MaxVal then + SpellDamage(Target, DmgType, math.random(MinVal, MaxVal)) + else + SpellDamage(Target, DmgType, MinVal) + end + + -- Inflicts 9 - 15 heat damage on target + if LastSpellAttackHit() then + if MaxVal ~= nil and MinVal < MaxVal then + SpellDamage(Target, DmgType, math.random(MinVal, MaxVal)) + else + SpellDamage(Target, DmgType, MinVal) + end + end +end diff --git a/server/Spells/Scout/Predator/Ranger/Shadowfire.lua b/server/Spells/Scout/Predator/Ranger/Shadowfire.lua new file mode 100644 index 000000000..d1d72cadb --- /dev/null +++ b/server/Spells/Scout/Predator/Ranger/Shadowfire.lua @@ -0,0 +1,55 @@ +--[[ + Script Name : dd_dot.lua + Script Purpose : Generic damage + 1 effect script + Script Author : John Adams + Script Date : 2008.12.02 +--]] + +function cast(Caster, Target, DDType, MinDDVal, MaxDDVal, EffectType, DamageType, MinEffectVal, MaxEffectVal) + + -- DD component + if MaxDDVal ~= nil and MinDDVal < MaxDDVal then + dmgAmount = math.random(MinDDVal, MaxDDVal) + SpellDamage(Target, DDType, dmgAmount) + --AddHate(Caster, Target, dmgAmount) + else + SpellDamage(Target, DDType, MinDDVal) + --AddHate(Caster, Target, MinDDVal) + end + + -- Effect component - only process this code if there is an EffectType param + if EffectType ~= nil then + + -- Determine if there is a range to effect values + if MaxEffectVal ~= nil and MinEffectVal < MaxEffectVal then + EffectValue = math.random(MinEffectVal, MaxEffectVal) + else + EffectValue = MinEffectVal + end + + -- Determine EffectType - either a DamageType or a String value passed as param 4 + if EffectType == "heal" then + ModifyHP(Caster, EffectValue) + else + SpellDamage(Target, DamageType, EffectValue) + end + + end + +end + +function tick(Caster, Target, DDType, MinDDVal, MaxDDVal, EffectType, DamageType, MinEffectVal, MaxEffectVal) + + if MaxEffectVal ~= nil and MinEffectVal < MaxEffectVal then + EffectValue = math.random(MinEffectVal, MaxEffectVal) + else + EffectValue = MinEffectVal + end + + if EffectType == "heal" then + ModifyHP(Caster, EffectValue) + else + SpellDamage(Target, DamageType, EffectValue) + end + +end diff --git a/server/Spells/Scout/Predator/Ranger/SnaringShot.lua b/server/Spells/Scout/Predator/Ranger/SnaringShot.lua new file mode 100644 index 000000000..b2a735132 --- /dev/null +++ b/server/Spells/Scout/Predator/Ranger/SnaringShot.lua @@ -0,0 +1,28 @@ +--[[ + Script Name : Spells/Scout/Predator/Ranger/SnaringShot.lua + Script Author : John Adams + Script Date : 2013.08.11 11:08:49 + Script Purpose : + : +--]] + +function cast(Caster, Target) + -- code to cast the spell + Say(Caster, "Whoops! Guess this is not implemented yet!") + +-- Info from spell_display_effects (remove from script when done) +-- Slows target by 34.9% +-- Inflicts 149 - 249 ranged damage on target +-- 10% chance to dispel when target receives hostile action +-- Requires bow + +end + +function tick(Caster, Target) + -- code to process each call_frequency (tick) set in spell_tiers +end + +function remove(Caster, Target) + -- code to remove the spell +end + diff --git a/server/Spells/Scout/Predator/Ranger/SneakAttack.lua b/server/Spells/Scout/Predator/Ranger/SneakAttack.lua new file mode 100644 index 000000000..57d0fa619 --- /dev/null +++ b/server/Spells/Scout/Predator/Ranger/SneakAttack.lua @@ -0,0 +1,33 @@ +--[[ + Script Name : Spells/Scout/Predator/Ranger/SneakAttack.lua + Script Author : Jabantiz + Script Date : 2014.03.10 07:03:05 + Script Purpose : + : +--]] + +function precast(Caster, Target) + -- Must be flanking or behind + if not IsFlanking(Caster, Target) or not IsBehind(Caster, Target) then + SendMessage(Caster, "Must be flanking or behind", "yellow") + return false + end + + return true +end + +function cast(Caster, Target, DmgType, MinVal, MaxVal) + -- Inflicts 27 - 45 melee damage on target + if MaxVal ~= nil and MinVal < MaxVal then + SpellDamage(Target, DmgType, math.random(MinVal, MaxVal)) + else + SpellDamage(Target, DmgType, MinVal) + end + + -- Applies Shroud on termination. Lasts for 36.0 seconds. + -- Grants stealth to caster + -- Suspends caster's movement speed enhancements + + -- Stelath component will probably need to be a new spell cast from here + Say(Caster, "Not implemented yet: Put caster in stealth") +end diff --git a/server/Spells/Scout/Predator/Ranger/Snipe.lua b/server/Spells/Scout/Predator/Ranger/Snipe.lua new file mode 100644 index 000000000..25c84e044 --- /dev/null +++ b/server/Spells/Scout/Predator/Ranger/Snipe.lua @@ -0,0 +1,16 @@ +--[[ + Script Name : Spells/Scout/Predator/Ranger/Snipe.lua + Script Author : Jabantiz + Script Date : 2014.03.10 06:03:28 + Script Purpose : + : +--]] + +function cast(Caster, Target, SkillAmt) + -- Decreases Defense of target by 3.5 + AddSkillBonus(Target, GetSkillIDByName("Defense"), SkillAmt) +end + +function remove(Caster, Target) + RemoveSkillBonus(Target) +end diff --git a/server/Spells/Scout/Predator/Ranger/SniperShot.lua b/server/Spells/Scout/Predator/Ranger/SniperShot.lua new file mode 100644 index 000000000..03181c7c9 --- /dev/null +++ b/server/Spells/Scout/Predator/Ranger/SniperShot.lua @@ -0,0 +1,17 @@ +--[[ + Script Name : Spells/Scout/Predator/Ranger/SniperShot.lua + Script Author : neatz09 + Script Date : 2019.10.17 11:10:58 + Script Purpose : + : +--]] + +-- Info from spell_display_effects (remove from script when done) +-- Applies Knockdown on termination. Lasts for 2.5 seconds. +-- Throws target back +-- Blurs vision of target +-- Stuns target +-- Does not affect Epic targets +-- Inflicts 2582 - 4303 ranged damage on target +-- I need to be stealthed! +-- Requires bow or aim diff --git a/server/Spells/Scout/Predator/Ranger/StalkerStrike.lua b/server/Spells/Scout/Predator/Ranger/StalkerStrike.lua new file mode 100644 index 000000000..d1d72cadb --- /dev/null +++ b/server/Spells/Scout/Predator/Ranger/StalkerStrike.lua @@ -0,0 +1,55 @@ +--[[ + Script Name : dd_dot.lua + Script Purpose : Generic damage + 1 effect script + Script Author : John Adams + Script Date : 2008.12.02 +--]] + +function cast(Caster, Target, DDType, MinDDVal, MaxDDVal, EffectType, DamageType, MinEffectVal, MaxEffectVal) + + -- DD component + if MaxDDVal ~= nil and MinDDVal < MaxDDVal then + dmgAmount = math.random(MinDDVal, MaxDDVal) + SpellDamage(Target, DDType, dmgAmount) + --AddHate(Caster, Target, dmgAmount) + else + SpellDamage(Target, DDType, MinDDVal) + --AddHate(Caster, Target, MinDDVal) + end + + -- Effect component - only process this code if there is an EffectType param + if EffectType ~= nil then + + -- Determine if there is a range to effect values + if MaxEffectVal ~= nil and MinEffectVal < MaxEffectVal then + EffectValue = math.random(MinEffectVal, MaxEffectVal) + else + EffectValue = MinEffectVal + end + + -- Determine EffectType - either a DamageType or a String value passed as param 4 + if EffectType == "heal" then + ModifyHP(Caster, EffectValue) + else + SpellDamage(Target, DamageType, EffectValue) + end + + end + +end + +function tick(Caster, Target, DDType, MinDDVal, MaxDDVal, EffectType, DamageType, MinEffectVal, MaxEffectVal) + + if MaxEffectVal ~= nil and MinEffectVal < MaxEffectVal then + EffectValue = math.random(MinEffectVal, MaxEffectVal) + else + EffectValue = MinEffectVal + end + + if EffectType == "heal" then + ModifyHP(Caster, EffectValue) + else + SpellDamage(Target, DamageType, EffectValue) + end + +end diff --git a/server/Spells/Scout/Predator/Ranger/StormofArrows.lua b/server/Spells/Scout/Predator/Ranger/StormofArrows.lua new file mode 100644 index 000000000..b608e9087 --- /dev/null +++ b/server/Spells/Scout/Predator/Ranger/StormofArrows.lua @@ -0,0 +1,28 @@ +--[[ + Script Name : Spells/Scout/Predator/Ranger/StormofArrows.lua + Script Author : neatz09 + Script Date : 2019.10.06 11:10:50 + Script Purpose : + : +--]] + +function precast(Caster, Target) +-- Requires bow + local item = GetEquippedItemBySlot(Caster, 16) + if not item or GetItemType(item) ~= 2 then + -- no item or item is not a ranged item (no way to determine different range items currently) + return false, 68 + end + + return true +end + +-- Inflicts 602 - 1003 ranged damage on target encounter + +function cast(Caster, Target, DmgType, MinVal, MaxVal) + if MaxVal ~= nil and MinVal < MaxVal then + SpellDamage(Target, DmgType, math.random(MinVal, MaxVal)) + else + SpellDamage(Target, DmgType, MinVal) + end +end diff --git a/server/Spells/Scout/Predator/Ranger/StreamofArrows.lua b/server/Spells/Scout/Predator/Ranger/StreamofArrows.lua new file mode 100644 index 000000000..0ec699840 --- /dev/null +++ b/server/Spells/Scout/Predator/Ranger/StreamofArrows.lua @@ -0,0 +1,25 @@ +--[[ + Script Name : Spells/Scout/Predator/Ranger/StreamofArrows.lua + Script Author : John Adams + Script Date : 2013.08.11 11:08:06 + Script Purpose : + : +--]] + +function cast(Caster, Target) + -- code to cast the spell + Say(Caster, "Whoops! Guess this is not implemented yet!") + +-- Info from spell_display_effects (remove from script when done) +-- Inflicts 1200 - 1467 ranged damage on targets in Area of Effect + +end + +function tick(Caster, Target) + -- code to process each call_frequency (tick) set in spell_tiers +end + +function remove(Caster, Target) + -- code to remove the spell +end + diff --git a/server/Spells/Scout/Predator/Ranger/SurvivalInstincts.lua b/server/Spells/Scout/Predator/Ranger/SurvivalInstincts.lua new file mode 100644 index 000000000..eeffc8e84 --- /dev/null +++ b/server/Spells/Scout/Predator/Ranger/SurvivalInstincts.lua @@ -0,0 +1,30 @@ +--[[ + Script Name : Spells/Scout/Predator/Ranger/SurvivalInstincts.lua + Script Author : Jabantiz + Script Date : 2014.03.10 07:03:07 + Script Purpose : + : +--]] + +function cast(Caster, Target, Agi, Avoid, OffSkill, Parry, Def) + -- Increases AGI of caster by 13.1 + AddSpellBonus(Target, 2, Agi) + + -- Adds 1.4% to base avoidance. + AddSpellBonus(Target, 696, Avoid) + + -- Decreases Slashing and Piercing of caster by 13.8 + AddSkillBonus(Target, GetSkillIDByName("Slashing"), OffAmt) + AddSkillBonus(Target, GetSkillIDByName("Piercing"), OffAmt) + + -- Increases Parry of caster by 7.3 + AddSkillBonus(Target, GetSkillIDByName("Parry"), Parry) + + -- Increases Defense of caster by 9.7 + AddSkillBonus(Target, GetSkillIDByName("Defense"), Def) +end + +function remove(Caster, Target) + RemoveSpellBonus(Target) + RemoveSkillBonus(Target) +end diff --git a/server/Spells/Scout/Predator/Ranger/ThornyTrap.lua b/server/Spells/Scout/Predator/Ranger/ThornyTrap.lua new file mode 100644 index 000000000..42786f75d --- /dev/null +++ b/server/Spells/Scout/Predator/Ranger/ThornyTrap.lua @@ -0,0 +1,24 @@ +--[[ + Script Name : Spells/Scout/Predator/Ranger/ThornyTrap.lua + Script Author : John Adams + Script Date : 2013.08.11 11:08:34 + Script Purpose : + : +--]] + +function cast(Caster, Target) + -- code to cast the spell + Say(Caster, "Whoops! Guess this is not implemented yet!") + +-- Info from spell_display_effects (remove from script when done) + +end + +function tick(Caster, Target) + -- code to process each call_frequency (tick) set in spell_tiers +end + +function remove(Caster, Target) + -- code to remove the spell +end + diff --git a/server/Spells/Scout/Predator/Ranger/TrickShot.lua b/server/Spells/Scout/Predator/Ranger/TrickShot.lua new file mode 100644 index 000000000..bf38717f2 --- /dev/null +++ b/server/Spells/Scout/Predator/Ranger/TrickShot.lua @@ -0,0 +1,29 @@ +--[[ + Script Name : Spells/Scout/Predator/Ranger/TrickShot.lua + Script Author : John Adams + Script Date : 2013.08.11 11:08:36 + Script Purpose : + : +--]] + +function cast(Caster, Target) + -- code to cast the spell + Say(Caster, "Whoops! Guess this is not implemented yet!") + +-- Info from spell_display_effects (remove from script when done) +-- On a melee hit this spell will cast Blamed on target of attack. Lasts for 10.0 seconds. +-- Increases Hate Gain of target by 30.0% +-- Grants a total of 1 trigger of the spell. +-- Inflicts 168 - 281 ranged damage on target +-- Requires bow + +end + +function tick(Caster, Target) + -- code to process each call_frequency (tick) set in spell_tiers +end + +function remove(Caster, Target) + -- code to remove the spell +end + diff --git a/server/Spells/Scout/Predator/Ranger/TripleShot.lua b/server/Spells/Scout/Predator/Ranger/TripleShot.lua new file mode 100644 index 000000000..ef97a33c8 --- /dev/null +++ b/server/Spells/Scout/Predator/Ranger/TripleShot.lua @@ -0,0 +1,28 @@ +--[[ + Script Name : Spells/Scout/Predator/Ranger/TripleShot.lua + Script Author : John Adams + Script Date : 2013.08.11 11:08:57 + Script Purpose : + : +--]] + +function cast(Caster, Target) + -- code to cast the spell + Say(Caster, "Whoops! Guess this is not implemented yet!") + +-- Info from spell_display_effects (remove from script when done) +-- Inflicts 53 - 89 ranged damage on target +-- Inflicts 107 - 179 ranged damage on target +-- Inflicts 161 - 269 ranged damage on target +-- Requires bow + +end + +function tick(Caster, Target) + -- code to process each call_frequency (tick) set in spell_tiers +end + +function remove(Caster, Target) + -- code to remove the spell +end + diff --git a/server/Spells/Scout/Predator/Stalk.lua b/server/Spells/Scout/Predator/Stalk.lua new file mode 100644 index 000000000..f84a382f4 --- /dev/null +++ b/server/Spells/Scout/Predator/Stalk.lua @@ -0,0 +1,27 @@ +--[[ + Script Name : Spells/Scout/Predator/Stalk.lua + Script Author : John Adams + Script Date : 2013.08.11 11:08:26 + Script Purpose : + : +--]] + +function cast(Caster, Target) + -- code to cast the spell + Say(Caster, "Whoops! Guess this is not implemented yet!") + +-- Info from spell_display_effects (remove from script when done) +-- Decreases Threat to target by 165 - 276 +-- Grants stealth to caster +-- Suspends caster's movement speed enhancements + +end + +function tick(Caster, Target) + -- code to process each call_frequency (tick) set in spell_tiers +end + +function remove(Caster, Target) + -- code to remove the spell +end + diff --git a/server/Spells/Scout/Predator/Stealth.lua b/server/Spells/Scout/Predator/Stealth.lua new file mode 100644 index 000000000..ae36e2ab9 --- /dev/null +++ b/server/Spells/Scout/Predator/Stealth.lua @@ -0,0 +1,17 @@ +--[[ + Script Name : Spells/Scout/Predator/Stealth.lua + Script Purpose : Stealth + Script Author : theFoof + Script Date : 2014.1.16 + Script Notes : +--]] + +function cast(Caster, Target) + Stealth(1) + AddSpellBonus(Target, 634, 1) +end + +function remove(Caster, Target) + RemoveStealth() + RemoveSpellBonus(Target) +end diff --git a/server/Spells/Scout/QuickStrike.lua b/server/Spells/Scout/QuickStrike.lua new file mode 100644 index 000000000..0d3f03a73 --- /dev/null +++ b/server/Spells/Scout/QuickStrike.lua @@ -0,0 +1,25 @@ +--[[ + Script Name : Spells/Scout/QuickStrike.lua + Script Author : John Adams + Script Date : 2013.08.11 02:08:55 + Script Purpose : + : +--]] + +function cast(Caster, Target) + -- code to cast the spell + Say(Caster, "Whoops! Guess this is not implemented yet!") + +-- Info from spell_display_effects (remove from script when done) +-- Inflicts 9 - 16 melee damage on target + +end + +function tick(Caster, Target) + -- code to process each call_frequency (tick) set in spell_tiers +end + +function remove(Caster, Target) + -- code to remove the spell +end + diff --git a/server/Spells/Scout/Rogue/Brigand/BackAttack.lua b/server/Spells/Scout/Rogue/Brigand/BackAttack.lua new file mode 100644 index 000000000..0de81fb9d --- /dev/null +++ b/server/Spells/Scout/Rogue/Brigand/BackAttack.lua @@ -0,0 +1,25 @@ +--[[ + Script Name : Backstab.lua + Script Purpose : Brigand Direct Damage + DoT + Script Author : Zcoretri + Script Date : 17.April.2010 +--]] + +function cast(Caster, Target, DmgType, MinDmg, MaxDmg, TickDmgType, TickDmg) + -- DD component + -- Add check for Caster being behind Target + if MaxDmg ~= nil and MinDmg < MaxDmg then + dmgAmount = math.random(MinDmg, MaxDmg) + SpellDamage(Target, DmgType, dmgAmount) + else + SpellDamage(Target, DmgType, MinDmg) + end +end + +function tick(Caster, Target, DmgType, MinDmg, MaxDmg, TickDmgType, TickDmg) + SpellDamage(Target, TickDmgType, TickDmg) +end + +function remove(Caster, Target, DmgType, MinDmg, MaxDmg, TickDmgType, TickDmg) + +end diff --git a/server/Spells/Scout/Rogue/Brigand/Backstab.lua b/server/Spells/Scout/Rogue/Brigand/Backstab.lua new file mode 100644 index 000000000..651f051d5 --- /dev/null +++ b/server/Spells/Scout/Rogue/Brigand/Backstab.lua @@ -0,0 +1,29 @@ +--[[ + Script Name : Spells/Scout/Rogue/Brigand/Backstab.lua + Script Purpose : Brigand positional attack + Script Author : Zcoretri + Script Date : 13.March.2014 + Script Notes : +--]] + +function precast(Caster, Target) + -- Must be flanking or behind + if IsFlanking(Caster, Target) then + return true + else + SendMessage(Caster, "You must be flanking or behind your target to use this ability!", "yellow") + end +end + +function cast(Caster, Target, DmgType, MinDmg, MaxDmg, DoTDmgType, DoTDmg) + -- Inflicts 9 - 16 melee damage on target + SpellDamage(Target, DmgType, MinDmg, MaxDmg) +end + +function tick(Caster, Target, DmgType, MinDmg, MaxDmg, DoTDmgType, DoTDmg) + SpellDamage(Target, DoTDmgType, DoTDmg) +end + +function remove(Caster, Target, DmgType, MinDmg, MaxDmg, DoTDmgType, DoTDmg) + +end \ No newline at end of file diff --git a/server/Spells/Scout/Rogue/Brigand/BarroomNegotiation.lua b/server/Spells/Scout/Rogue/Brigand/BarroomNegotiation.lua new file mode 100644 index 000000000..680d821ba --- /dev/null +++ b/server/Spells/Scout/Rogue/Brigand/BarroomNegotiation.lua @@ -0,0 +1,16 @@ +--[[ + Script Name : Spells/Scout/Rogue/Brigand/BarroomNegotiation.lua + Script Author : Zcoretri + Script Date : 14.March.2014 + Script Purpose : + : +--]] + +function cast(Caster, Target, DmgType, MinDmg, MaxDmg) +-- Inflicts melee damage on targets in Area of Effect +-- Interrupts targets in Area of Effect + SpellDamage(Target, DmgType, MinDmg, MaxDmg) + Interrupt(Caster, Target) +end + + diff --git a/server/Spells/Scout/Rogue/Brigand/BatteryandAssault.lua b/server/Spells/Scout/Rogue/Brigand/BatteryandAssault.lua new file mode 100644 index 000000000..f3c5685c5 --- /dev/null +++ b/server/Spells/Scout/Rogue/Brigand/BatteryandAssault.lua @@ -0,0 +1,18 @@ +--[[ + Script Name : Spells/Scout/Rogue/Brigand/BatteryandAssault.lua + Script Purpose : Brigand Direct Damage + Script Author : Zcoretri + Script Date : 13.March.2014 + Script Notes : +--]] + +function cast(Caster, Target, DmgType, MinDmg, MaxDmg, DmgType2, MinDmg2, MaxDmg2) +-- Inflicts melee damage on target +-- Inflicts melee damage on target +-- NOTE: If one of these attacks misses, the rest after miss automaticly + SpellDamage(Target, DmgType, MinDmg, MaxDmg) + + if LastSpellAttackHit() then + SpellDamage(Target, DmgType2, MinDmg2, MaxDmg2) + end +end diff --git a/server/Spells/Scout/Rogue/Brigand/Befuddle.lua b/server/Spells/Scout/Rogue/Brigand/Befuddle.lua new file mode 100644 index 000000000..d5a4c4b66 --- /dev/null +++ b/server/Spells/Scout/Rogue/Brigand/Befuddle.lua @@ -0,0 +1,11 @@ +--[[ + Script Name : Spells/Scout/Rogue/Brigand/Befuddle.lua + Script Author : neatz09 + Script Date : 2019.10.15 09:10:26 + Script Purpose : + : +--]] + +-- Info from spell_display_effects (remove from script when done) +-- On a melee hit this spell may cast Baffle on target of attack. Triggers about 4.0 times per minute. +-- Decreases Threat to target by 1,383 diff --git a/server/Spells/Scout/Rogue/Brigand/BegforMercy.lua b/server/Spells/Scout/Rogue/Brigand/BegforMercy.lua new file mode 100644 index 000000000..c7cd2d3d5 --- /dev/null +++ b/server/Spells/Scout/Rogue/Brigand/BegforMercy.lua @@ -0,0 +1,30 @@ +--[[ + Script Name : Spells/Scout/Rogue/Brigand/BegforMercy.lua + Script Author : John Adams + Script Date : 2013.08.11 08:08:43 + Script Purpose : + : +--]] + +function cast(Caster, Target) + -- code to cast the spell + Say(Caster, "Whoops! Guess this is not implemented yet!") + +-- Info from spell_display_effects (remove from script when done) +-- Reduces all damage done to target by 32.63% This spell will absorb a total of 3 attacks. +-- When damaged this spell will cast Beg on target's attacker. +-- Decreases Threat to target encounter by 410 +-- Decreases threat priority of target encounter by 1 position +-- Grants a total of 3 triggers of the spell. +-- If profession other than Fighter + +end + +function tick(Caster, Target) + -- code to process each call_frequency (tick) set in spell_tiers +end + +function remove(Caster, Target) + -- code to remove the spell +end + diff --git a/server/Spells/Scout/Rogue/Brigand/BlackJack.lua b/server/Spells/Scout/Rogue/Brigand/BlackJack.lua new file mode 100644 index 000000000..76ccd5dd2 --- /dev/null +++ b/server/Spells/Scout/Rogue/Brigand/BlackJack.lua @@ -0,0 +1,15 @@ +--[[ + Script Name : Spells/Scout/Rogue/Brigand/BlackJack.lua + Script Author : neatz09 + Script Date : 2019.10.17 11:10:50 + Script Purpose : + : +--]] + +-- Info from spell_display_effects (remove from script when done) +-- Inflicts 240 - 401 crushing damage on target +-- Prevents target from changing direction while active. +-- If Target is not Epic +-- Roots target +-- If Target is not Epic +-- Resistibility increases against targets higher than level 29. diff --git a/server/Spells/Scout/Rogue/Brigand/Blackguard.lua b/server/Spells/Scout/Rogue/Brigand/Blackguard.lua new file mode 100644 index 000000000..1279f4bd5 --- /dev/null +++ b/server/Spells/Scout/Rogue/Brigand/Blackguard.lua @@ -0,0 +1,31 @@ +--[[ + Script Name : Spells/Scout/Rogue/Brigand/Blackguard.lua + Script Author : neatz09 + Script Date : 2019.10.15 09:10:50 + Script Purpose : + : +--]] + +-- Decreases Slashing, Piercing and Crushing of caster by 29.2 +-- Increases Aggression of caster by 11.9 +-- Increases Defense and Parry of caster by 23.8 +--Increases the caster's effectiveness of worn armor vs physical damage by 18% +function cast(Caster, Target, Offskill, Agro, DefAmt) + AddSkillBonus(Target, GetSkillIDByName("Slashing"), OffSkill) + AddSkillBonus(Target, GetSkillIDByName("Piercing"), OffSkill) + AddSkillBonus(Target, GetSkillIDByName("Crushing"), OffSkill) + AddSkillBonus(Target, GetSkillIDByName("Aggression"), Agro) + AddSkillBonus(Target, GetSkillIDByName("Defense"), DefAmt) + AddSkillBonus(Target, GetSkillIDByName("Parry"), DefAmt) + AddSpellBonus(Target, 678, 18) +end + + + +function remove(Caster, Target) + RemoveSkillBonus(Target) + RemoveSpellBonus(Target) +end + + + diff --git a/server/Spells/Scout/Rogue/Brigand/Bruise.lua b/server/Spells/Scout/Rogue/Brigand/Bruise.lua new file mode 100644 index 000000000..8902993a0 --- /dev/null +++ b/server/Spells/Scout/Rogue/Brigand/Bruise.lua @@ -0,0 +1,20 @@ +--[[ + Script Name : Mug.lua + Script Purpose : Brigand Debuff script + Script Author : Zcoretri + Script Date : 17.April.2010 +--]] + +function cast(Caster, Target, Stat, Skill) + AddSkillBonus(Target, 609880714, Skill) -- Defense + AddSpellBonus(Target, 2, Stat) -- AGI +end + +function tick(Caster, Target, Stat, Skill) + +end + +function remove(Caster, Target, Stat, Skill) + RemoveSkillBonus(Target) + RemoveSpellBonus(Target) +end diff --git a/server/Spells/Scout/Rogue/Brigand/BumRush.lua b/server/Spells/Scout/Rogue/Brigand/BumRush.lua new file mode 100644 index 000000000..79bcce5f3 --- /dev/null +++ b/server/Spells/Scout/Rogue/Brigand/BumRush.lua @@ -0,0 +1,23 @@ +--[[ + Script Name : Spells/Scout/Bard/Dirge/BumRush.lua + Script Purpose : Brigand positional melee attack + interrupt + Script Author : Zcoretri + Script Date : 13.March.2014 + Script Notes : +--]] + +function precast(Caster, Target) + if IsFlanking(Caster, Target) then + return true + else + SendMessage(Caster, "You must be flanking or behind your target to use this ability!", "yellow") + return false + end +end + +function cast(Caster, Target, DmgType, MinDmg, MaxDmg) +-- Interrupt the Target + Interrupt(Caster, Target) +-- Inflicts melee damage on target + SpellDamage(Target, DmgType, MinDmg, MaxDmg) +end diff --git a/server/Spells/Scout/Rogue/Brigand/Cuss.lua b/server/Spells/Scout/Rogue/Brigand/Cuss.lua new file mode 100644 index 000000000..60273259b --- /dev/null +++ b/server/Spells/Scout/Rogue/Brigand/Cuss.lua @@ -0,0 +1,19 @@ +--[[ + Script Name : Spells/Scout/Rogue/Brigand/Cuss.lua + Script Author : neatz09 + Script Date : 2019.10.07 03:10:21 + Script Purpose : + : +--]] + + +function cast(Caster, Target, CureAmt, Hate) +-- Interrupts target + Interrupt(Target) + +-- Dispels 115 levels of arcane beneficial effects on target + CureByType(CureAmt, 2, "Cure") + +-- Increases Threat to target by 4,720 + AddHate(Caster, Target, Hate, 1) +end \ No newline at end of file diff --git a/server/Spells/Scout/Rogue/Brigand/Debilitate.lua b/server/Spells/Scout/Rogue/Brigand/Debilitate.lua new file mode 100644 index 000000000..2169341e2 --- /dev/null +++ b/server/Spells/Scout/Rogue/Brigand/Debilitate.lua @@ -0,0 +1,26 @@ +--[[ + Script Name : Spells/Scout/Rogue/Brigand/Debilitate.lua + Script Author : neatz09 + Script Date : 2019.10.17 11:10:06 + Script Purpose : + : +--]] + +function precast(Caster, Target) +-- Must be flanking or behind + if not IsFlanking(Target, Caster) then + SendMessage(Caster, "Must be flanking or behind", "yellow") + return false + end + + return true +end + +function cast(Caster, Target, DmgType, MinVal, MaxVal, Mit) +-- Inflicts 561 - 935 melee damage on target +SpellDamage(Target, DmgType, MinVal, MaxVal) +-- Decreases Mitigation of target vs physical damage by 2160 +AddSpellBonus(Target, 200, Mit) +end + + diff --git a/server/Spells/Scout/Rogue/Brigand/Deceit.lua b/server/Spells/Scout/Rogue/Brigand/Deceit.lua new file mode 100644 index 000000000..a1bfcb1f6 --- /dev/null +++ b/server/Spells/Scout/Rogue/Brigand/Deceit.lua @@ -0,0 +1,24 @@ +--[[ + Script Name : Spells/Scout/Rogue/Brigand/Deceit.lua + Script Author : John Adams + Script Date : 2013.08.11 08:08:58 + Script Purpose : + : +--]] + +function cast(Caster, Target) + -- code to cast the spell + Say(Caster, "Whoops! Guess this is not implemented yet!") + +-- Info from spell_display_effects (remove from script when done) + +end + +function tick(Caster, Target) + -- code to process each call_frequency (tick) set in spell_tiers +end + +function remove(Caster, Target) + -- code to remove the spell +end + diff --git a/server/Spells/Scout/Rogue/Brigand/DesperateThrust.lua b/server/Spells/Scout/Rogue/Brigand/DesperateThrust.lua new file mode 100644 index 000000000..5c8db7c83 --- /dev/null +++ b/server/Spells/Scout/Rogue/Brigand/DesperateThrust.lua @@ -0,0 +1,24 @@ +--[[ + Script Name : Spells/Scout/Rogue/Brigand/DesperateThrust.lua + Script Author : neatz09 + Script Date : 2019.10.15 09:10:51 + Script Purpose : + : +--]] + +-- Info from spell_display_effects (remove from script when done) + +function cast(Caster, Target) +-- Inflicts 257 - 428 melee damage on target +SpellDamage(Target, DmgType, MinVal, MaxVal) +-- Decreases Defense of target by 15.7 + AddSkillBonus(Target, GetSkillIDByName("Defense"), TgtAmt) +-- Decreases Defense of caster by 17.4 + AddSkillBonus(Caster, GetSkillIDByName("Slashing"), CastAmt) +end + + +function remove(Caster, Target) + RemoveSkillBonus(Target) + +end diff --git a/server/Spells/Scout/Rogue/Brigand/Dispatch.lua b/server/Spells/Scout/Rogue/Brigand/Dispatch.lua new file mode 100644 index 000000000..1ac6eedf3 --- /dev/null +++ b/server/Spells/Scout/Rogue/Brigand/Dispatch.lua @@ -0,0 +1,44 @@ +--[[ + Script Name : Spells/Scout/Rogue/Brigand/Dispatch.lua + Script Author : neatz09 + Script Date : 2019.10.07 02:10:30 + Script Purpose : + : +--]] + +-- Must be flanking or behind + function precast(Caster, Target) + -- Must be flanking or behind + if not IsFlanking(Caster, Target) then + SendMessage(Caster, "Must be flanking or behind", "yellow") + return false + end +end + +-- Inflicts 541 - 903 melee damage on target +function cast(Caster, Target, DmgType, MinVal, MaxVal, Debuff) + if MaxVal ~= nil and MinVal < MaxVal then + SpellDamage(Target, DmgType, math.random(MinVal, MaxVal)) + else + SpellDamage(Target, DmgType, MinVal) + end + +-- Decreases Mitigation of target vs physical damage by 4061 +-- Decreases Mitigation of target vs elemental damage by 4061 +-- Decreases Mitigation of target vs noxious damage by 4061 +-- Decreases Mitigation of target vs arcane damage by 4061 + AddSpellBonus(Target, 200, Debuff) + AddSpellBonus(Target, 201, Debuff) + AddSpellBonus(Target, 202, Debuff) + AddSpellBonus(Target, 203, Debuff) +end + + +function remove(Caster, Target) +RemoveSpellBonus(Caster, Target) + +end + + + + diff --git a/server/Spells/Scout/Rogue/Brigand/DiversionBlade.lua b/server/Spells/Scout/Rogue/Brigand/DiversionBlade.lua new file mode 100644 index 000000000..7ab14ede6 --- /dev/null +++ b/server/Spells/Scout/Rogue/Brigand/DiversionBlade.lua @@ -0,0 +1,17 @@ +--[[ + Script Name : BumRush.lua + Script Purpose : Brigand Direct Damage + Interrupt + Script Author : Zcoretri + Script Date : 17.April.2010 +--]] + +function cast(Caster, Target, DmgType, MinDmg, MaxDmg) + -- Add check for Caster is flanking or behind Target + if MaxDmg ~= nil and MinDmg < MaxDmg then + dmgAmount = math.random(MinDmg, MaxDmg) + SpellDamage(Target, DmgType, dmgAmount) + else + SpellDamage(Target, DmgType, MinDmg) + end + --Interrupt(Target) +end \ No newline at end of file diff --git a/server/Spells/Scout/Rogue/Brigand/DoubleBlast.lua b/server/Spells/Scout/Rogue/Brigand/DoubleBlast.lua new file mode 100644 index 000000000..4436e5ba9 --- /dev/null +++ b/server/Spells/Scout/Rogue/Brigand/DoubleBlast.lua @@ -0,0 +1,43 @@ +--[[ + Script Name : Spells/Scout/Rogue/Brigand/DoubleBlast.lua + Script Author : Zcoretri + Script Date : 17.March.2014 + Script Purpose : + : +--]] + +function precast(Caster, Target) + -- If weapon equipped in Ranged + local item = GetEquippedItemBySlot(Caster, 16) + if not item or GetItemType(item) ~= 2 then + -- no item or item is not a ranged item (no way to determine different range items currently) + return false, 68 + end + + return true +end + +function cast(Caster, Target, MinDmg, MaxDmg, MinDmg2, MaxDmg2) + -- Inflicts ranged damage on target x2 if first one hits + SpellDamage(Target, MinDmg, MaxDmg) + if LastSpellAttackHit() then + SpellDamage(Target, MinDmg2, MaxDmg2) + end + -- Applies Knockdown on termination. Lasts for 2.5 seconds. + -- Throws target back + -- Blurs vision of target + -- Stuns target + -- Does not affect Epic targets + if not IsEpic(Target) then + AddControlEffect(Target, 4) -- Stun + Knockback(Caster, Target, 2500) + BlurVision(Target, 0.5) + end + +end + +function remove(Caster, Target, MinDmg, MaxDmg, MinDmg2, MaxDmg2) + RemoveControlEffect(Target, 4) + BlurVision(Target, 0) +end + diff --git a/server/Spells/Scout/Rogue/Brigand/DoubleDagger.lua b/server/Spells/Scout/Rogue/Brigand/DoubleDagger.lua new file mode 100644 index 000000000..bc60b7fb6 --- /dev/null +++ b/server/Spells/Scout/Rogue/Brigand/DoubleDagger.lua @@ -0,0 +1,20 @@ +--[[ + Script Name : BatteryAndAssault.lua + Script Purpose : Brigand Direct Damage + Script Author : Zcoretri + Script Date : 17.April.2010 +--]] + +function cast(Caster, Target, DmgType, MinDmg, MaxDmg) + -- Add check for if first attack misses + --if AttackFails == false then + if MaxDmg ~= nil and MinDmg < MaxDmg then + dmgAmount = math.random(MinDmg, MaxDmg) + SpellDamage(Target, DmgType, dmgAmount) + SpellDamage(Target, DmgType, dmgAmount) + else + SpellDamage(Target, DmgType, MinDmg) + SpellDamage(Target, DmgType, MinDmg) + end + --end +end \ No newline at end of file diff --git a/server/Spells/Scout/Rogue/Brigand/Entangle.lua b/server/Spells/Scout/Rogue/Brigand/Entangle.lua new file mode 100644 index 000000000..6fe8aa741 --- /dev/null +++ b/server/Spells/Scout/Rogue/Brigand/Entangle.lua @@ -0,0 +1,30 @@ +--[[ + Script Name : Spells/Scout/Rogue/Brigand/Entangle.lua + Script Author : John Adams + Script Date : 2013.08.11 08:08:54 + Script Purpose : + : +--]] + +function cast(Caster, Target) + -- code to cast the spell + Say(Caster, "Whoops! Guess this is not implemented yet!") + +-- Info from spell_display_effects (remove from script when done) +-- Applies Snare on termination. Lasts for 24.0 seconds. +-- Slows target by 32.0% +-- 5% chance to dispel when target receives hostile action +-- 5% chance to dispel when target takes damage +-- Slows target encounter by 38.4% +-- 5% chance to dispel when target takes damage + +end + +function tick(Caster, Target) + -- code to process each call_frequency (tick) set in spell_tiers +end + +function remove(Caster, Target) + -- code to remove the spell +end + diff --git a/server/Spells/Scout/Rogue/Brigand/Gouge.lua b/server/Spells/Scout/Rogue/Brigand/Gouge.lua new file mode 100644 index 000000000..cb14c7e23 --- /dev/null +++ b/server/Spells/Scout/Rogue/Brigand/Gouge.lua @@ -0,0 +1,29 @@ +--[[ + Script Name : Spells/Scout/Rogue/Brigand/Gouge.lua + Script Author : Zcoretri + Script Date : 14.March.2014 + Script Purpose : + : +--]] + +function precast(Caster, Target) + -- Must be in front of or flanking + if IsFlanking(Caster, Target) then + return true + else + SendMessage(Caster, "You must be flanking your target to use this ability!", "yellow") + return false + end +end + +function cast(Caster, Target, DmgType, MinDmg, MaxDmg, Parry) + -- Decreases Parry of target by 8.1 + -- Inflicts 98 - 163 melee damage on target + SpellDamage(Target, DmgType, MinDmg, MaxDmg) + AddSkillBonus(Target, 540022425, Parry) +end + +function remove(Caster, Target) + RemoveSkillBonue(Target) +end + diff --git a/server/Spells/Scout/Rogue/Brigand/Holdup.lua b/server/Spells/Scout/Rogue/Brigand/Holdup.lua new file mode 100644 index 000000000..623607ad5 --- /dev/null +++ b/server/Spells/Scout/Rogue/Brigand/Holdup.lua @@ -0,0 +1,32 @@ +--[[ + Script Name : Spells/Scout/Rogue/Brigand/Holdup.lua + Script Purpose : Brigand Debuff + Snare + Script Author : Zcoretri + Script Date : 14.March.2014 + Script Notes : +--]] + +function cast(Caster, Target, Slow, Mitigation) + -- Debuff component + AddSpellBonus(Target, 201, Mitigation) +end + +function tick(Caster, Target, Slow, Mitigation) + -- Snare component + originalSpeed = GetSpeed(Target) + pctChance = math.random(1, 100) + --[[ + if pctChance => 5 then + newSpeed = originalSpeed - (originalSpeed * Slow) + if originalSpeed > newSpeed then + SetSpeed(Target, newSpeed) + end + end + --]] +end + +function remove(Caster, Target, Slow, Mitigation) + RemoveSpellBonus(Target) + --SetSpeed(Target, originalSpeed) +end + diff --git a/server/Spells/Scout/Rogue/Brigand/Mug.lua b/server/Spells/Scout/Rogue/Brigand/Mug.lua new file mode 100644 index 000000000..49e2a1768 --- /dev/null +++ b/server/Spells/Scout/Rogue/Brigand/Mug.lua @@ -0,0 +1,17 @@ +--[[ + Script Name : Spells/Scout/Rogue/Brigand/Mug.lua + Script Purpose : Brigand Debuff + Script Author : Zcoretri + Script Date : 14.March.2014 + Script Notes : +--]] + +function cast(Caster, Target, StatAmt, SkillAmt) + AddSkillBonus(Target, 609880714, SkillAmt) + AddSpellBonus(Target, 2, StatAmt) +end + +function remove(Caster, Target, StatAmt, SkillAmt) + RemoveSkillBonus(Target) + RemoveSpellBonus(Target) +end \ No newline at end of file diff --git a/server/Spells/Scout/Rogue/Brigand/MurderousRake.lua b/server/Spells/Scout/Rogue/Brigand/MurderousRake.lua new file mode 100644 index 000000000..c28c39f62 --- /dev/null +++ b/server/Spells/Scout/Rogue/Brigand/MurderousRake.lua @@ -0,0 +1,31 @@ +--[[ + Script Name : Spells/Scout/Rogue/Brigand/MurderousRake.lua + Script Author : Zcoretri + Script Date : 17.March.2014 + Script Purpose : + : +--]] + +function precast(Caster, Target) +-- Must be flanking or behind + if IsBehind(Caster, Target) then + return true + else + SendMessage(Caster, "You must be flanking or behind your target to use this ability!", "yellow") + end +end + +function cast(Caster, Target, DmgType, MinDmg, MaxDmg, Mitigation1) +-- Decreases Mitigation of target vs elemental and noxious damage by 360 +-- Decreases Mitigation of target vs arcane damage by 360 +-- Inflicts 145 - 241 melee damage on target + SpellDamage(Target, DmgType, MinDmg, MaxDmg) + AddSpellBonus(Target, 201, Mitigation1) + AddSpellBonus(Target, 202, Mitigation1) + AddSpellBonus(Target, 203, Mitigation1) +end + +function remove(Caster, Target) + RemoveSpellBonus(Target) +end + diff --git a/server/Spells/Scout/Rogue/Brigand/Puncture.lua b/server/Spells/Scout/Rogue/Brigand/Puncture.lua new file mode 100644 index 000000000..e707a5b78 --- /dev/null +++ b/server/Spells/Scout/Rogue/Brigand/Puncture.lua @@ -0,0 +1,17 @@ +--[[ + Script Name : Spells/Scout/Rogue/Brigand/Puncture.lua + Script Author : Zcoretri + Script Date : 14.March.2014 + Script Purpose : + : +--]] + +function cast(Caster, Target, DmgType, MinVal, MaxVal, AttackSpeed) + SpellDamage(Target, DmgType, MinVal, MaxVal) + AddSpellBonus(Target, 612, AttackSpeed) +end + +function remove(Caster, Target) + RemoveSpellBonus(Target) +end + diff --git a/server/Spells/Scout/Rogue/Brigand/Rob.lua b/server/Spells/Scout/Rogue/Brigand/Rob.lua new file mode 100644 index 000000000..a88a9029e --- /dev/null +++ b/server/Spells/Scout/Rogue/Brigand/Rob.lua @@ -0,0 +1,26 @@ +--[[ + Script Name : Spells/Scout/Rogue/Brigand/Rob.lua + Script Purpose : Brigand Stealth attack + Debuff + Script Author : Zcoretri + Script Date : 13.March.2014 + Script Notes : +--]] + +function precast(Caster, Target) + if IsStealthed(Caster) then + return true + end + SendMessage(Caster, "You must be sneaking to use this ability.", "yellow") + return false, 0 +end + +function cast(Caster, Target, DmgType, MinDmg, MaxDmg, StatAmt) +-- Inflicts 13 - 21 melee damage on target +-- Decreases STR of target by 5.0 + SpellDamage(Target, DmgType, dmgAmount) + AddSpellBonus(Target, 0, StatAmt) +end + +function remove(Caster, Target, DmgType, MinDmg, MaxDmg, StatAmt) + RemoveSpellBonus(Target) +end diff --git a/server/Spells/Scout/Rogue/Brigand/Shank.lua b/server/Spells/Scout/Rogue/Brigand/Shank.lua new file mode 100644 index 000000000..2f00302cf --- /dev/null +++ b/server/Spells/Scout/Rogue/Brigand/Shank.lua @@ -0,0 +1,33 @@ +--[[ + Script Name : Spells/Scout/Rogue/Brigand/Shank.lua + Script Author : neatz09 + Script Date : 2019.10.07 02:10:00 + Script Purpose : + : +--]] + +function precast(Caster, Target) +-- Must be flanking or behind + if not IsFlanking(Target, Caster) then + SendMessage(Caster, "Must be flanking or behind", "yellow") + return false + end + + return true +end + + +function cast(Caster, Target, DmgType, MinVal, MaxVal, DotType, DoTMin, DotMax) +-- Inflicts 70 - 117 melee damage on target +-- Inflicts 51 piercing damage on target instantly and every 4 seconds +SpellDamage(Target, DmgType, MinVal, MaxVal) +SpellDamage(Target, DotType, DoTMin, DotMax) +end + + +function tick(Caster, Target) +SpellDamage(Target, DotType, DoTMin, DotMax) +end + + + diff --git a/server/Spells/Scout/Rogue/Brigand/Shenanigans.lua b/server/Spells/Scout/Rogue/Brigand/Shenanigans.lua new file mode 100644 index 000000000..2b7ec8dfb --- /dev/null +++ b/server/Spells/Scout/Rogue/Brigand/Shenanigans.lua @@ -0,0 +1,15 @@ +--[[ + Script Name : Spells/Scout/Rogue/Brigand/Shenanigans.lua + Script Author : neatz09 + Script Date : 2019.10.17 11:10:30 + Script Purpose : + : +--]] + +-- Info from spell_display_effects (remove from script when done) +-- Increases threat priority of target by 2 positions +-- Decreases Defense and Parry of caster by 459.0 +-- Stuns caster +-- When damaged with a melee weapon this spell will cast Surprise Attack on target's attacker. +-- Inflicts 1577 - 2628 piercing damage on target +-- Grants a total of 1 trigger of the spell. diff --git a/server/Spells/Scout/Rogue/Brigand/Skew.lua b/server/Spells/Scout/Rogue/Brigand/Skew.lua new file mode 100644 index 000000000..5589caad5 --- /dev/null +++ b/server/Spells/Scout/Rogue/Brigand/Skew.lua @@ -0,0 +1,47 @@ +--[[ + Script Name : dd_debuff.lua + Script Purpose : Generic damage + 1 effect script + Script Author : John Adams + Script Date : 2008.12.04 + Script Notes : Parameter 4 and 5 are the debuff type and value (param 6 if value is a range) +--]] + +function cast(Caster, Target, DDType, MinDDVal, MaxDDVal, DebuffType, MinDebuffVal, MaxDebuffVal) + + -- Debuff component + -- Determine if there is a range to effect values + if MaxDebuffVal ~= nil and MinDebuffVal < MaxDebuffVal then + -- JA: for debuff randoms (if any), need to to math.random with precision - I think this function rounds up? + DebuffValue = math.random(MinDebuffVal, MaxDebuffVal) + else + DebuffValue = MinDebuffVal + end + + -- Determine DebuffType - either a DamageType or a String value passed as param 4 + if DebuffType == "Attack" then + -- ModifyAttackSpeed(Target, -DebuffValue) + elseif DebuffType == "DPS" then + -- ModifyDPS(Target, -DebuffValue) + elseif DebuffType == "Disease" then + -- ModifyDisease(Target, -DebuffValue) + elseif DebuffType == "Power" then + ModifyPower(Target, -DebuffValue) + elseif DebuffType == "Knockback" then + SpawnSet(Target, "visual_state", "10900") + end + + -- DD component (instant damage) + if MaxDDVal ~= nil and MinDDVal < MaxDDVal then + SpellDamage(Target, DDType, math.random(MinDDVal, MaxDDVal)) + else + SpellDamage(Target, DDType, MinDDVal) + end +end + +function tick(Caster, Target, DDType, MinDDVal, MaxDDVal, DebuffType, MinDebuffVal, MaxDebuffVal) + +end + +function remove(Caster, Target, DDType, MinDDVal, MaxDDVal, DebuffType, MinDebuffVal, MaxDebuffVal) + +end diff --git a/server/Spells/Scout/Rogue/Brigand/StreetSmarts.lua b/server/Spells/Scout/Rogue/Brigand/StreetSmarts.lua new file mode 100644 index 000000000..2ac6de2e5 --- /dev/null +++ b/server/Spells/Scout/Rogue/Brigand/StreetSmarts.lua @@ -0,0 +1,26 @@ +--[[ + Script Name : Spells/Scout/Rogue/Brigand/StreetSmarts.lua + Script Author : Zcoretri + Script Date : 14.March.2014 + Script Purpose : + : +--]] + +function cast(Caster, Target, StatAmt, Avoidance, MitAmt1, MitAmt2) +-- Increases AGI of caster by 15.0 +-- Adds 14.0% to base avoidance. +-- Increases Mitigation of caster vs physical damage by 152 +-- Increases Mitigation of caster vs elemental, noxious and arcane damage by 183 + AddSpellBonus(Target, StatAmt) + -- AddSkillBonus(Target, , Avoidance) + AddSpellBonus(Target, 200, MitAmt1) + AddSpellBonus(Target, 201, MitAmt2) + AddSpellBonus(Target, 202, MitAmt2) + AddSpellBonus(Target, 203, MitAmt2) +end + +function remove(Caster, Target) + RemoveSpellBonus(Target) + RemoveSkillBonus(Target) +end + diff --git a/server/Spells/Scout/Rogue/Brigand/StunningBlow.lua b/server/Spells/Scout/Rogue/Brigand/StunningBlow.lua new file mode 100644 index 000000000..957b3a72e --- /dev/null +++ b/server/Spells/Scout/Rogue/Brigand/StunningBlow.lua @@ -0,0 +1,31 @@ +--[[ + Script Name : Spells/Scout/Rogue/Brigand/StunningBlow.lua + Script Author : neatz09 + Script Date : 2019.10.15 09:10:24 + Script Purpose : + : +--]] + +function cast(Caster, Target, DmgType, MinVal, MaxVal) + SpellDamage(Target, DmgType, MinVal, MaxVal) +-- Inflicts 116 - 194 melee damage on target +-- Stuns target +-- If Target is not Epic +-- Resistibility increases against targets higher than level 29. + -- Stuns target + -- If Target is not Epic + -- Resistibility increases against targets higher than level 29. + if not IsEpic(Target) then + AddControlEffect(Target, 4) + end +end + + +function remove(Caster, Target) + RemoveControlEffect(Target, 4) +end + + + + + diff --git a/server/Spells/Scout/Rogue/Brigand/Thrust.lua b/server/Spells/Scout/Rogue/Brigand/Thrust.lua new file mode 100644 index 000000000..5589caad5 --- /dev/null +++ b/server/Spells/Scout/Rogue/Brigand/Thrust.lua @@ -0,0 +1,47 @@ +--[[ + Script Name : dd_debuff.lua + Script Purpose : Generic damage + 1 effect script + Script Author : John Adams + Script Date : 2008.12.04 + Script Notes : Parameter 4 and 5 are the debuff type and value (param 6 if value is a range) +--]] + +function cast(Caster, Target, DDType, MinDDVal, MaxDDVal, DebuffType, MinDebuffVal, MaxDebuffVal) + + -- Debuff component + -- Determine if there is a range to effect values + if MaxDebuffVal ~= nil and MinDebuffVal < MaxDebuffVal then + -- JA: for debuff randoms (if any), need to to math.random with precision - I think this function rounds up? + DebuffValue = math.random(MinDebuffVal, MaxDebuffVal) + else + DebuffValue = MinDebuffVal + end + + -- Determine DebuffType - either a DamageType or a String value passed as param 4 + if DebuffType == "Attack" then + -- ModifyAttackSpeed(Target, -DebuffValue) + elseif DebuffType == "DPS" then + -- ModifyDPS(Target, -DebuffValue) + elseif DebuffType == "Disease" then + -- ModifyDisease(Target, -DebuffValue) + elseif DebuffType == "Power" then + ModifyPower(Target, -DebuffValue) + elseif DebuffType == "Knockback" then + SpawnSet(Target, "visual_state", "10900") + end + + -- DD component (instant damage) + if MaxDDVal ~= nil and MinDDVal < MaxDDVal then + SpellDamage(Target, DDType, math.random(MinDDVal, MaxDDVal)) + else + SpellDamage(Target, DDType, MinDDVal) + end +end + +function tick(Caster, Target, DDType, MinDDVal, MaxDDVal, DebuffType, MinDebuffVal, MaxDebuffVal) + +end + +function remove(Caster, Target, DDType, MinDDVal, MaxDDVal, DebuffType, MinDebuffVal, MaxDebuffVal) + +end diff --git a/server/Spells/Scout/Rogue/Brigand/Whack.lua b/server/Spells/Scout/Rogue/Brigand/Whack.lua new file mode 100644 index 000000000..4cc02c033 --- /dev/null +++ b/server/Spells/Scout/Rogue/Brigand/Whack.lua @@ -0,0 +1,26 @@ +--[[ + Script Name : Rob.lua + Script Purpose : Brigand Direct Damage + Debuff + Script Author : Zcoretri + Script Date : 17.April.2010 + Script Notes : +--]] + +function cast(Caster, Target, DmgType, MinDmg, MaxDmg, StatAmt) + -- Add check for Caster is using sneaking ability + if MaxDmg ~= nil and MinDmg < MaxDmg then + dmgAmount = math.random(MinDmg, MaxDmg) + SpellDamage(Target, DmgType, dmgAmount) + else + SpellDamage(Target, DmgType, MinDmg) + end + --AddSpellBonus(Target, 0, StatAmt) +end + +function tick(Caster, Target, DmgType, MinDmg, MaxDmg, StatAmt) + +end + +function remove(Caster, Target, DmgType, MinDmg, MaxDmg, StatAmt) + --RemoveSpellBonus(Target) +end diff --git a/server/Spells/Scout/Rogue/CircularStrike.lua b/server/Spells/Scout/Rogue/CircularStrike.lua new file mode 100644 index 000000000..950087e50 --- /dev/null +++ b/server/Spells/Scout/Rogue/CircularStrike.lua @@ -0,0 +1,20 @@ +--[[ + Script Name : Spells/Scout/Rogue/CircularStrike.lua + Script Author : neatz09 + Script Date : 2019.10.06 09:10:09 + Script Purpose : + : +--]] + +-- Info from spell_display_effects (remove from script when done) +-- Interrupts targets in Area of Effect +-- Inflicts 38 - 64 melee damage on targets in Area of Effect + +function cast(Caster, Target, DmgType, MinVal, MaxVal) + if MaxVal ~= nil and MinVal < MaxVal then + SpellDamage(Target, DmgType, math.random(MinVal, MaxVal)) + else + SpellDamage(Target, DmgType, MinVal) + end +end + diff --git a/server/Spells/Scout/Rogue/DaringAdvance.lua b/server/Spells/Scout/Rogue/DaringAdvance.lua new file mode 100644 index 000000000..6aeadb949 --- /dev/null +++ b/server/Spells/Scout/Rogue/DaringAdvance.lua @@ -0,0 +1,36 @@ +--[[ + Script Name : Spells/Scout/Rogue/DaringAdvance.lua + Script Author : Jabantiz + Script Date : 2013.12.16 03:12:33 + Script Purpose : + : +--]] + +function cast(Caster, Target, DefAmt, SkillAmt, DmgType, DmgAmt) + -- Decreases Defense of caster by 3.9 + AddSkillBonus(Target, GetSkillIDByName("Slashing"), SkillAmt) + + -- Increases Slashing of caster by 5.3 + -- Increases Piercing, Crushing and Ranged of caster by 5.3 + AddSkillBonus(Target, GetSkillIDByName("Slashing"), SkillAmt) + AddSkillBonus(Target, GetSkillIDByName("Piercing"), SkillAmt) + AddSkillBonus(Target, GetSkillIDByName("Crushing"), SkillAmt) + AddSkillBonus(Target, GetSkillIDByName("Ranged"), SkillAmt) + + AddProc(Target, 3, 30) +end + +function proc(Caster, Target, Type, DefAmt, SkillAmt, DmgType, DmgAmt) + -- On a melee hit this spell may cast Interrupt on target of attack. Triggers about 6.0 times per minute. + -- Inflicts 19 melee damage on target + -- Interrupts target + if Type == 3 then + ProcDamage(Caster, Target, "Interrupt", DmgType, DmgAmt) + Interrupt(Caster, Target) + end +end + +function remove(Caster, Target) + RemoveSkillBonus(Target) + RemoveProc(Target) +end diff --git a/server/Spells/Scout/Rogue/RuthlessCunning.lua b/server/Spells/Scout/Rogue/RuthlessCunning.lua new file mode 100644 index 000000000..40c585ced --- /dev/null +++ b/server/Spells/Scout/Rogue/RuthlessCunning.lua @@ -0,0 +1,24 @@ +--[[ + Script Name : Spells/Scout/Rogue/RuthlessCunning.lua + Script Author : John Adams + Script Date : 2013.08.11 08:08:59 + Script Purpose : + : +--]] + +function cast(Caster, Target) + -- code to cast the spell + Say(Caster, "Whoops! Guess this is not implemented yet!") + +-- Info from spell_display_effects (remove from script when done) + +end + +function tick(Caster, Target) + -- code to process each call_frequency (tick) set in spell_tiers +end + +function remove(Caster, Target) + -- code to remove the spell +end + diff --git a/server/Spells/Scout/Rogue/ShadowSlip.lua b/server/Spells/Scout/Rogue/ShadowSlip.lua new file mode 100644 index 000000000..b17d9af2f --- /dev/null +++ b/server/Spells/Scout/Rogue/ShadowSlip.lua @@ -0,0 +1,18 @@ +--[[ + Script Name : Spells/Scout/Rogue/ShadowSlip.lua + Script Author : Jabantiz + Script Date : 2013.12.16 04:12:17 + Script Purpose : + : +--]] + +function cast(Caster, Target, HateAmt) + -- Decreases threat priority of target by 1 position + -- Decreases Threat to target by 283 + AddHate(Target, HateAmt, 1) + + -- Applies Lie Low on termination. Lasts for 12 hours. + -- Grants stealth to caster + -- Suspends caster's movement speed enhancements + +end diff --git a/server/Spells/Scout/Rogue/Smuggle.lua b/server/Spells/Scout/Rogue/Smuggle.lua new file mode 100644 index 000000000..79ec883ef --- /dev/null +++ b/server/Spells/Scout/Rogue/Smuggle.lua @@ -0,0 +1,23 @@ +--[[ + Script Name : Spells/Scout/Rogue/Smuggle.lua + Script Author : theFoof + Script Date : 2014.1.16 + Script Purpose : + : +--]] + +function precast(Caster, Target) + return not IsInCombat(Caster) +end + +function cast(Caster, Target) +-- Grants stealth to group members (AE) +-- Suspends group members (AE)'s movement speed enhancements +-- This effect cannot be cast during combat + Stealth(1) +end + +function remove(Caster, Target) + RemoveStealth() +end + diff --git a/server/Spells/Scout/Rogue/Sneak.lua b/server/Spells/Scout/Rogue/Sneak.lua new file mode 100644 index 000000000..628ab2650 --- /dev/null +++ b/server/Spells/Scout/Rogue/Sneak.lua @@ -0,0 +1,21 @@ +--[[ + Script Name : Spells/Scout/Rogue/Sneak.lua + Script Author : Jabantiz + Script Date : 2013.12.16 01:12:19 + Script Purpose : + : +--]] + +-- Grants stealth to caster +-- Suspends caster's movement speed enhancements +-- Grants See Stealth to caster + +function cast(Caster, Target) + Stealth(1) + AddSpellBonus(Target, 633, 1) +end + +function remove(Caster, Target) + RemoveStealth() + RemoveSpellBonus(Target) +end diff --git a/server/Spells/Scout/Rogue/Swashbuckler/ArcticBlast.lua b/server/Spells/Scout/Rogue/Swashbuckler/ArcticBlast.lua new file mode 100644 index 000000000..1a156670c --- /dev/null +++ b/server/Spells/Scout/Rogue/Swashbuckler/ArcticBlast.lua @@ -0,0 +1,50 @@ +--[[ + Script Name : Spells/Scout/Rogue/Swashbuckler/ArcticBlast.lua + Script Author : Jabantiz + Script Date : 2013.12.16 03:12:34 + Script Purpose : + : +--]] + +function precast(Caster, Target) + -- If weapon equipped in Ranged + local item = GetEquippedItemBySlot(Caster, 16) + if item then + if GetItemType(item) == 2 then + return true + end + end + + return false, 68 +end + +function cast(Caster, Target, DmgType, MinVal, MaxVal, Snare) + -- Inflicts 57 - 95 cold damage on target + if MaxVal ~= nil and MinVal < MaxVal then + SpellDamage(Target, DmgType, math.random(MinVal, MaxVal)) + else + SpellDamage(Target, DmgType, MinVal) + end + + -- Inflicts 57 - 95 cold damage on target + if LastSpellAttackHit() then + if MaxVal ~= nil and MinVal < MaxVal then + SpellDamage(Target, DmgType, math.random(MinVal, MaxVal)) + else + SpellDamage(Target, DmgType, MinVal) + end + end + + -- Applies Snare on termination. Lasts for 24.0 seconds. + -- Slows target by 29.9% + -- 5% chance to dispel when target receives hostile action + -- 5% chance to dispel when target takes damage + if LastSpellAttackHit() then + SetSpeedMultiplier(Target, (100 - Snare) / 100) + AddSpellTimer(24000, "RemoveSnare") + end +end + +function RemoveSnare(Caster, Target) + SetSpeedMultiplier(Target, 1) +end diff --git a/server/Spells/Scout/Rogue/Swashbuckler/AvoidBlame.lua b/server/Spells/Scout/Rogue/Swashbuckler/AvoidBlame.lua new file mode 100644 index 000000000..1ebe54a68 --- /dev/null +++ b/server/Spells/Scout/Rogue/Swashbuckler/AvoidBlame.lua @@ -0,0 +1,23 @@ +--[[ + Script Name : Spells/Scout/Rogue/Swashbuckler/AvoidBlame.lua + Script Author : Jabantiz + Script Date : 2013.12.16 02:12:53 + Script Purpose : + : +--]] + +function cast(Caster, Target, HateAmt) + -- On a melee hit this spell may cast Evade on target of attack. Triggers about 4.0 times per minute. + AddProc(Target, 3, 20.0) +end + +function proc(Caster, Target, Type, HateAmt) + -- Decreases Threat to target by 268 + if Type == 3 then + AddHate(Target, HateAmt, 1) + end +end + +function remove(Caster, Target) + RemoveProc(Target) +end \ No newline at end of file diff --git a/server/Spells/Scout/Rogue/Swashbuckler/Bladeweaver.lua b/server/Spells/Scout/Rogue/Swashbuckler/Bladeweaver.lua new file mode 100644 index 000000000..7fe48ceb4 --- /dev/null +++ b/server/Spells/Scout/Rogue/Swashbuckler/Bladeweaver.lua @@ -0,0 +1,31 @@ +--[[ + Script Name : Spells/Scout/Rogue/Swashbuckler/Bladeweaver.lua + Script Author : Jabantiz + Script Date : 2013.12.16 01:12:03 + Script Purpose : + : +--]] + +function cast(Caster, Target) + -- Increases STA of caster by 0.7 + AddSpellBonus(Target, 1, BonusAmt) + + -- Increases AGI of caster by 15.0 + AddSpellBonus(Target, 2, BonusAmt) + + -- Adds 14.0% to base avoidance. + AddSpellBonus(Target, 696, BonusAmt) + + -- Increases Mitigation of caster vs physical damage by 82 + AddSpellBonus(Target, 200, BonusAmt) + + -- Increases Mitigation of caster vs elemental, noxious and arcane damage by 183 + AddSpellBonus(Target, 201, BonusAmt) + AddSpellBonus(Target, 202, BonusAmt) + AddSpellBonus(Target, 203, BonusAmt) + +end + +function remove(Caster, Target) + RemoveSpellBonus(Target) +end diff --git a/server/Spells/Scout/Rogue/Swashbuckler/CircleAttack.lua b/server/Spells/Scout/Rogue/Swashbuckler/CircleAttack.lua new file mode 100644 index 000000000..d1d72cadb --- /dev/null +++ b/server/Spells/Scout/Rogue/Swashbuckler/CircleAttack.lua @@ -0,0 +1,55 @@ +--[[ + Script Name : dd_dot.lua + Script Purpose : Generic damage + 1 effect script + Script Author : John Adams + Script Date : 2008.12.02 +--]] + +function cast(Caster, Target, DDType, MinDDVal, MaxDDVal, EffectType, DamageType, MinEffectVal, MaxEffectVal) + + -- DD component + if MaxDDVal ~= nil and MinDDVal < MaxDDVal then + dmgAmount = math.random(MinDDVal, MaxDDVal) + SpellDamage(Target, DDType, dmgAmount) + --AddHate(Caster, Target, dmgAmount) + else + SpellDamage(Target, DDType, MinDDVal) + --AddHate(Caster, Target, MinDDVal) + end + + -- Effect component - only process this code if there is an EffectType param + if EffectType ~= nil then + + -- Determine if there is a range to effect values + if MaxEffectVal ~= nil and MinEffectVal < MaxEffectVal then + EffectValue = math.random(MinEffectVal, MaxEffectVal) + else + EffectValue = MinEffectVal + end + + -- Determine EffectType - either a DamageType or a String value passed as param 4 + if EffectType == "heal" then + ModifyHP(Caster, EffectValue) + else + SpellDamage(Target, DamageType, EffectValue) + end + + end + +end + +function tick(Caster, Target, DDType, MinDDVal, MaxDDVal, EffectType, DamageType, MinEffectVal, MaxEffectVal) + + if MaxEffectVal ~= nil and MinEffectVal < MaxEffectVal then + EffectValue = math.random(MinEffectVal, MaxEffectVal) + else + EffectValue = MinEffectVal + end + + if EffectType == "heal" then + ModifyHP(Caster, EffectValue) + else + SpellDamage(Target, DamageType, EffectValue) + end + +end diff --git a/server/Spells/Scout/Rogue/Swashbuckler/DashingSwathe.lua b/server/Spells/Scout/Rogue/Swashbuckler/DashingSwathe.lua new file mode 100644 index 000000000..7cd0bb6d0 --- /dev/null +++ b/server/Spells/Scout/Rogue/Swashbuckler/DashingSwathe.lua @@ -0,0 +1,32 @@ +--[[ + Script Name : Spells/Scout/Rogue/Swashbuckler/DashingSwathe.lua + Script Author : Jabantiz + Script Date : 2013.12.16 02:12:02 + Script Purpose : + : +--]] + +function cast(Caster, Target, DmgType, MinVal, MaxVal) + -- Inflicts 159 - 266 melee damage on targets in Area of Effect + if MaxVal ~= nil and MinVal < MaxVal then + SpellDamage(Target, DmgType, math.random(MinVal, MaxVal)) + else + SpellDamage(Target, DmgType, MinVal) + end + + -- Applies Knockdown. Lasts for 1.5 seconds. + -- Throws target back + -- Stuns target + -- Blurs vision of target + -- Does not affect Epic targets + if not IsEpic(Target) then + Knockback(Caster, Target, 1500) + AddControlEffect(Target, 4) + BlurVision(Target, 1.0) + AddSpellTimer(1500, "RemoveEffects") + end +end +function RemoveEffects(Caster, Target) + RemoveControlEffect(Target, 4) + BlurVision(Target, 0) +end diff --git a/server/Spells/Scout/Rogue/Swashbuckler/DeviousBlade.lua b/server/Spells/Scout/Rogue/Swashbuckler/DeviousBlade.lua new file mode 100644 index 000000000..51c67af82 --- /dev/null +++ b/server/Spells/Scout/Rogue/Swashbuckler/DeviousBlade.lua @@ -0,0 +1,28 @@ +--[[ + Script Name : Spells/Scout/Rogue/Swashbuckler/DeviousBlade.lua + Script Author : John Adams + Script Date : 2013.08.11 08:08:50 + Script Purpose : + : +--]] + +function cast(Caster, Target) + -- code to cast the spell + Say(Caster, "Whoops! Guess this is not implemented yet!") + +-- Info from spell_display_effects (remove from script when done) +-- Inflicts 208 - 255 melee damage on target +-- On a melee hit this spell will cast Blamed on target of attack. Lasts for 10.0 seconds. +-- Increases Hate Gain of target by 30.0% +-- Grants a total of 1 trigger of the spell. + +end + +function tick(Caster, Target) + -- code to process each call_frequency (tick) set in spell_tiers +end + +function remove(Caster, Target) + -- code to remove the spell +end + diff --git a/server/Spells/Scout/Rogue/Swashbuckler/DisarmingGrin.lua b/server/Spells/Scout/Rogue/Swashbuckler/DisarmingGrin.lua new file mode 100644 index 000000000..498a878e1 --- /dev/null +++ b/server/Spells/Scout/Rogue/Swashbuckler/DisarmingGrin.lua @@ -0,0 +1,29 @@ +--[[ + Script Name : Spells/Scout/Rogue/Swashbuckler/DisarmingGrin.lua + Script Author : John Adams + Script Date : 2013.08.11 08:08:21 + Script Purpose : + : +--]] + +function cast(Caster, Target) + -- code to cast the spell + Say(Caster, "Whoops! Guess this is not implemented yet!") + +-- Info from spell_display_effects (remove from script when done) +-- Prevents AOE (except when direct) +-- Mesmerizes target +-- Dispelled when target takes damage +-- Does not affect Epic targets +-- Resistibility increases against targets higher than level 29. + +end + +function tick(Caster, Target) + -- code to process each call_frequency (tick) set in spell_tiers +end + +function remove(Caster, Target) + -- code to remove the spell +end + diff --git a/server/Spells/Scout/Rogue/Swashbuckler/Double-Cross.lua b/server/Spells/Scout/Rogue/Swashbuckler/Double-Cross.lua new file mode 100644 index 000000000..33ff87141 --- /dev/null +++ b/server/Spells/Scout/Rogue/Swashbuckler/Double-Cross.lua @@ -0,0 +1,26 @@ +--[[ + Script Name : Spells/Scout/Rogue/Swashbuckler/Double-Cross.lua + Script Author : John Adams + Script Date : 2013.08.11 08:08:04 + Script Purpose : + : +--]] + +function cast(Caster, Target) + -- code to cast the spell + Say(Caster, "Whoops! Guess this is not implemented yet!") + +-- Info from spell_display_effects (remove from script when done) +-- Decreases WIS of target by 6.1 +-- Decreases Defense of target by 2.0 + +end + +function tick(Caster, Target) + -- code to process each call_frequency (tick) set in spell_tiers +end + +function remove(Caster, Target) + -- code to remove the spell +end + diff --git a/server/Spells/Scout/Rogue/Swashbuckler/DoubleCross.lua b/server/Spells/Scout/Rogue/Swashbuckler/DoubleCross.lua new file mode 100644 index 000000000..c6adbf6a3 --- /dev/null +++ b/server/Spells/Scout/Rogue/Swashbuckler/DoubleCross.lua @@ -0,0 +1,20 @@ +--[[ + Script Name : Spells/Scout/Rogue/Swashbuckler/DoubleCross.lua + Script Author : Jabantiz + Script Date : 2013.12.15 08:12:20 + Script Purpose : + : +--]] + +function cast(Caster, Target, BonusAmt, SkillAmt) + -- Decreases WIS of target by 6.1 + AddSpellBonus(Target, 600, BonusAmt) + + -- Decreases Defense of target by 2.0 + AddSkillBonus(Target, GetSkillIDByName("Defense"), SkillAmt) +end + +function remove(Caster, Target) + RemoveSpellBonus(Target) + RemoveSkillBonus(Target) +end diff --git a/server/Spells/Scout/Rogue/Swashbuckler/EnGarde.lua b/server/Spells/Scout/Rogue/Swashbuckler/EnGarde.lua new file mode 100644 index 000000000..d2f80959f --- /dev/null +++ b/server/Spells/Scout/Rogue/Swashbuckler/EnGarde.lua @@ -0,0 +1,25 @@ +--[[ + Script Name : Spells/Scout/Rogue/Swashbuckler/EnGarde.lua + Script Author : neatz09 + Script Date : 2019.10.11 10:10:14 + Script Purpose : + : +--]] + +-- Info from spell_display_effects (remove from script when done) +-- When a combat art is used this spell has a 15% chance to cast Counterattack on target of combat art. +-- Inflicts 255 - 425 melee damage on target +-- When blocked this spell will cast Counterattack on target's victim. +-- Inflicts 255 - 425 melee damage on target +-- When parried this spell will cast Counterattack on target's victim. +-- Inflicts 255 - 425 melee damage on target +-- When deflected this spell will cast Counterattack on target's victim. +-- Inflicts 255 - 425 melee damage on target +-- When riposted this spell will cast Counterattack on target's victim. +-- Inflicts 255 - 425 melee damage on target +-- On a block this spell will cast Counterattack on target's victim. +-- Inflicts 255 - 425 melee damage on target +-- On a riposte this spell will cast Counterattack on target's victim. +-- Inflicts 255 - 425 melee damage on target +-- On a parry this spell will cast Counterattack on target's victim. +-- Inflicts 255 - 425 melee damage on target diff --git a/server/Spells/Scout/Rogue/Swashbuckler/FancyFootwork.lua b/server/Spells/Scout/Rogue/Swashbuckler/FancyFootwork.lua new file mode 100644 index 000000000..83ee6640f --- /dev/null +++ b/server/Spells/Scout/Rogue/Swashbuckler/FancyFootwork.lua @@ -0,0 +1,30 @@ +--[[ + Script Name : Spells/Scout/Rogue/Swashbuckler/FancyFootwork.lua + Script Author : Jabantiz + Script Date : 2013.12.16 02:12:08 + Script Purpose : + : +--]] + +function cast(Caster, Target, SkillAmt, AggAmt, DefAmt) + -- Decreases Slashing, Piercing and Crushing of caster by 13.8 + AddSkillBonus(Target, GetSkillIDByName("Slashing"), SkillAmt) + AddSkillBonus(Target, GetSkillIDByName("Piercing"), SkillAmt) + AddSkillBonus(Target, GetSkillIDByName("Crushing"), SkillAmt) + + -- Increases Aggression of caster by 2.4 + AddSkillBonus(Target, GetSkillIDByName("Aggression"), AggAmt) + + -- Increases Parry and Defense of caster by 4.9 + AddSkillBonus(Target, GetSkillIDByName("Parry"), DefAmt) + AddSkillBonus(Target, GetSkillIDByName("Defense"), DefAmt) + + -- Increases the caster's effectiveness of worn armor vs physical damage by 18% + AddSpellBonus(Target, 678, 18) + +end + +function remove(Caster, Target) + RemoveSkillBonus(Target) + RemoveSpellBonus(Target) +end diff --git a/server/Spells/Scout/Rogue/Swashbuckler/FlamboyantStrike.lua b/server/Spells/Scout/Rogue/Swashbuckler/FlamboyantStrike.lua new file mode 100644 index 000000000..8d502400e --- /dev/null +++ b/server/Spells/Scout/Rogue/Swashbuckler/FlamboyantStrike.lua @@ -0,0 +1,30 @@ +--[[ + Script Name : Spells/Scout/Rogue/Swashbuckler/FlamboyantStrike.lua + Script Author : neatz09 + Script Date : 2019.09.23 01:09:37 + Script Purpose : + : +--]] + +-- Inflicts 267 - 446 melee damage on target + +function cast(Caster, Target, DmgType, MinVal, MaxVal, BonusAmt) + if MaxVal ~= nil and MinVal < MaxVal then + SpellDamage(Target, DmgType, math.random(MinVal, MaxVal)) + else + SpellDamage(Target, DmgType, MinVal) + end + +-- Decreases INT of target by 142.6 + AddSpellBonus(Target, 4, BonusAmt) +end + + +function remove(Caster, Target) + RemoveSpellBonus(Target) + +end + + + + diff --git a/server/Spells/Scout/Rogue/Swashbuckler/FlashofSteel.lua b/server/Spells/Scout/Rogue/Swashbuckler/FlashofSteel.lua new file mode 100644 index 000000000..70d3bab8c --- /dev/null +++ b/server/Spells/Scout/Rogue/Swashbuckler/FlashofSteel.lua @@ -0,0 +1,21 @@ +--[[ + Script Name : Spells/Scout/Rogue/Swashbuckler/FlashofSteel.lua + Script Author : John Adams + Script Date : 2013.11.20 07:11:31 + Script Purpose : + : +--]] + +function cast(Caster, Target, DmgType, MinVal, MaxVal, BonusAmt) + if MaxVal ~= nil and MinVal < MaxVal then + SpellDamage(Target, DmgType, math.random(MinVal, MaxVal)) + else + SpellDamage(Target, DmgType, MinVal) + end + + AddSpellBonus(Target, 629, BonusAmt) +end + +function remove(Caster, Target) + RemoveSpellBonus(Target) +end diff --git a/server/Spells/Scout/Rogue/Swashbuckler/FlurryofBlades.lua b/server/Spells/Scout/Rogue/Swashbuckler/FlurryofBlades.lua new file mode 100644 index 000000000..e94e2e240 --- /dev/null +++ b/server/Spells/Scout/Rogue/Swashbuckler/FlurryofBlades.lua @@ -0,0 +1,28 @@ +--[[ + Script Name : Spells/Scout/Rogue/Swashbuckler/FlurryofBlades.lua + Script Author : John Adams + Script Date : 2013.08.11 08:08:31 + Script Purpose : + : +--]] + +function cast(Caster, Target) + -- code to cast the spell + Say(Caster, "Whoops! Guess this is not implemented yet!") + +-- Info from spell_display_effects (remove from script when done) +-- Decreases Mitigation of target vs physical damage by 189 +-- Inflicts 67 - 112 melee damage on target +-- Inflicts 67 - 112 melee damage on target +-- Inflicts 67 - 112 melee damage on target + +end + +function tick(Caster, Target) + -- code to process each call_frequency (tick) set in spell_tiers +end + +function remove(Caster, Target) + -- code to remove the spell +end + diff --git a/server/Spells/Scout/Rogue/Swashbuckler/Hamstring.lua b/server/Spells/Scout/Rogue/Swashbuckler/Hamstring.lua new file mode 100644 index 000000000..71f385d26 --- /dev/null +++ b/server/Spells/Scout/Rogue/Swashbuckler/Hamstring.lua @@ -0,0 +1,23 @@ +--[[ + Script Name : Spells/Scout/Rogue/Swashbuckler/Hamstring.lua + Script Author : neatz09 + Script Date : 2019.10.11 10:10:02 + Script Purpose : + : +--]] + +-- Inflicts 211 - 352 melee damage on target +function cast(Caster, Target, DmgType, MinVal, MaxVal, Snare) + SpellDamage(Target, DmgType, MinVal, MaxVal) + +-- Slows target by 37.6% +-- 5% chance to dispel when target receives hostile action +-- 5% chance to dispel when target takes damage +SetSpeedMultiplier(Target, ((100 - Snare) / 100)) +end + +function remove(Caster, Target) + SetSpeedMultiplier(Target, 1) +end + + diff --git a/server/Spells/Scout/Rogue/Swashbuckler/HangmansNoose.lua b/server/Spells/Scout/Rogue/Swashbuckler/HangmansNoose.lua new file mode 100644 index 000000000..0dd23a1ac --- /dev/null +++ b/server/Spells/Scout/Rogue/Swashbuckler/HangmansNoose.lua @@ -0,0 +1,23 @@ +--[[ + Script Name : Spells/Scout/Rogue/Swashbuckler/HangmansNoose.lua + Script Author : Jabantiz + Script Date : 2013.12.15 09:12:11 + Script Purpose : + : +--]] + +function cast(Caster, Target, Snare, Mit) + -- Applies Snare. Lasts for 24.0 seconds. + -- Slows target by 28.3% + -- 5% chance to dispel when target receives hostile action + -- 5% chance to dispel when target takes damage + SetSpeedMultiplier(Target, ((100 - Snare) / 100)) + + -- Decreases Mitigation of target vs arcane damage by 197 + AddSpellBonus(Target, 203, Mit) +end + +function remove(Caster, Target) + SetSpeedMultiplier(Target, 1) + RemoveSpellBonus(Target) +end diff --git a/server/Spells/Scout/Rogue/Swashbuckler/Hurricane.lua b/server/Spells/Scout/Rogue/Swashbuckler/Hurricane.lua new file mode 100644 index 000000000..3bde7ee21 --- /dev/null +++ b/server/Spells/Scout/Rogue/Swashbuckler/Hurricane.lua @@ -0,0 +1,24 @@ +--[[ + Script Name : Spells/Scout/Rogue/Swashbuckler/Hurricane.lua + Script Author : John Adams + Script Date : 2013.08.11 08:08:56 + Script Purpose : + : +--]] + +function cast(Caster, Target) + -- code to cast the spell + Say(Caster, "Whoops! Guess this is not implemented yet!") + +-- Info from spell_display_effects (remove from script when done) + +end + +function tick(Caster, Target) + -- code to process each call_frequency (tick) set in spell_tiers +end + +function remove(Caster, Target) + -- code to remove the spell +end + diff --git a/server/Spells/Scout/Rogue/Swashbuckler/InspiredDaring.lua b/server/Spells/Scout/Rogue/Swashbuckler/InspiredDaring.lua new file mode 100644 index 000000000..de69009af --- /dev/null +++ b/server/Spells/Scout/Rogue/Swashbuckler/InspiredDaring.lua @@ -0,0 +1,24 @@ +--[[ + Script Name : Spells/Scout/Rogue/Swashbuckler/InspiredDaring.lua + Script Author : John Adams + Script Date : 2013.08.11 08:08:49 + Script Purpose : + : +--]] + +function cast(Caster, Target) + -- code to cast the spell + Say(Caster, "Whoops! Guess this is not implemented yet!") + +-- Info from spell_display_effects (remove from script when done) + +end + +function tick(Caster, Target) + -- code to process each call_frequency (tick) set in spell_tiers +end + +function remove(Caster, Target) + -- code to remove the spell +end + diff --git a/server/Spells/Scout/Rogue/Swashbuckler/KidneyStab.lua b/server/Spells/Scout/Rogue/Swashbuckler/KidneyStab.lua new file mode 100644 index 000000000..4306f3487 --- /dev/null +++ b/server/Spells/Scout/Rogue/Swashbuckler/KidneyStab.lua @@ -0,0 +1,28 @@ +--[[ + Script Name : Spells/Scout/Rogue/Swashbuckler/KidneyStab.lua + Script Author : Jabantiz + Script Date : 2013.12.15 08:12:55 + Script Purpose : + : +--]] + +function precast(Caster, Target) + -- Must be flanking or behind + return IsFlanking(Target, Caster) +end + +function cast(Caster, Target, DmgType, MinVal, MaxVal, BonusAmt) + -- Inflicts 29 - 36 melee damage on target + if MaxVal ~= nil and MinVal < MaxVal then + SpellDamage(Target, DmgType, math.random(MinVal, MaxVal)) + else + SpellDamage(Target, DmgType, MinVal) + end + + -- Decreases Mitigation of target vs physical damage by 54 + AddSpellBonus(Target, 200, BonusAmt) +end + +function remove(Caster, Target) + RemoveSpellBonus(Target) +end \ No newline at end of file diff --git a/server/Spells/Scout/Rogue/Swashbuckler/LuckyGambit.lua b/server/Spells/Scout/Rogue/Swashbuckler/LuckyGambit.lua new file mode 100644 index 000000000..6fa5700f0 --- /dev/null +++ b/server/Spells/Scout/Rogue/Swashbuckler/LuckyGambit.lua @@ -0,0 +1,16 @@ +--[[ + Script Name : Spells/Scout/Rogue/Swashbuckler/LuckyGambit.lua + Script Author : Jabantiz + Script Date : 2013.12.15 08:12:23 + Script Purpose : + : +--]] + +function cast(Caster, Target, DmgType, MinVal, MaxVal) + -- Inflicts 16 - 27 melee damage on targets in Area of Effect + if MaxVal ~= nil and MinVal < MaxVal then + SpellDamage(Target, DmgType, math.random(MinVal, MaxVal)) + else + SpellDamage(Target, DmgType, MinVal) + end +end diff --git a/server/Spells/Scout/Rogue/Swashbuckler/LungPuncture.lua b/server/Spells/Scout/Rogue/Swashbuckler/LungPuncture.lua new file mode 100644 index 000000000..5ce44e023 --- /dev/null +++ b/server/Spells/Scout/Rogue/Swashbuckler/LungPuncture.lua @@ -0,0 +1,34 @@ +--[[ + Script Name : Spells/Scout/Rogue/Swashbuckler/LungPuncture.lua + Script Author : neatz09 + Script Date : 2019.10.11 03:10:02 + Script Purpose : + : +--]] +function precast(Caster, Target) +-- Must be flanking or behind + if not IsFlanking(Caster, Target) then + SendMessage(Caster, "Must be flanking or behind", "yellow") + return false + end +end +-- Inflicts 365 - 609 melee damage on target +function cast(Caster, Target, DmgType, MinVal, MaxVal, Strike, Skill) + SpellDamage(Target, DmgType, MinVal, MaxVal) +-- Decreases strikethrough chance of target by 5.8%. +AddSpellBonus(Target, 680, Strike) +-- Decreases Slashing, Crushing, Piercing, Ranged, Focus, Disruption, Subjugation and Ordination of target by 56.5 + AddSkillBonus(Target, GetSkillIDByName("Crushing"), Skill) + AddSkillBonus(Target, GetSkillIDByName("Piercing"), Skill) + AddSkillBonus(Target, GetSkillIDByName("Slashing"), Skill) + AddSkillBonus(Target, GetSkillIDByName("Ranged"), Skill) + AddSkillBonus(Target, GetSkillIDByName("Focus"), Skill) + AddSkillBonus(Target, GetSkillIDByName("Disruption"), Skill) + AddSkillBonus(Target, GetSkillIDByName("Subjugation"), Skill) + AddSkillBonus(Target, GetSkillIDByName("Ordination"), Skill) +end + +function remove(Caster, Target) + RemoveSpellBonus(Target) + RemoveSkillBonus(Target) +end diff --git a/server/Spells/Scout/Rogue/Swashbuckler/PerfectFinesse.lua b/server/Spells/Scout/Rogue/Swashbuckler/PerfectFinesse.lua new file mode 100644 index 000000000..92d2d2207 --- /dev/null +++ b/server/Spells/Scout/Rogue/Swashbuckler/PerfectFinesse.lua @@ -0,0 +1,24 @@ +--[[ + Script Name : Spells/Scout/Rogue/Swashbuckler/PerfectFinesse.lua + Script Author : John Adams + Script Date : 2013.08.11 08:08:36 + Script Purpose : + : +--]] + +function cast(Caster, Target) + -- code to cast the spell + Say(Caster, "Whoops! Guess this is not implemented yet!") + +-- Info from spell_display_effects (remove from script when done) + +end + +function tick(Caster, Target) + -- code to process each call_frequency (tick) set in spell_tiers +end + +function remove(Caster, Target) + -- code to remove the spell +end + diff --git a/server/Spells/Scout/Rogue/Swashbuckler/RazorEdge.lua b/server/Spells/Scout/Rogue/Swashbuckler/RazorEdge.lua new file mode 100644 index 000000000..a0639ed4a --- /dev/null +++ b/server/Spells/Scout/Rogue/Swashbuckler/RazorEdge.lua @@ -0,0 +1,29 @@ +--[[ + Script Name : Spells/Scout/Rogue/Swashbuckler/RazorEdge.lua + Script Author : Jabantiz + Script Date : 2013.12.16 01:12:44 + Script Purpose : + : +--]] + +function precast(Caster, Target) + -- Must be in front of or flanking + return (not IsBehind(Target, Caster)) +end + + +function cast(Caster, Target, DmgType, MinVal, MaxVal, BonusAmt) + -- Inflicts 98 - 163 melee damage on target + if MaxVal ~= nil and MinVal < MaxVal then + SpellDamage(Target, DmgType, math.random(MinVal, MaxVal)) + else + SpellDamage(Target, DmgType, MinVal) + end + + -- Decreases Parry of target by 8.1 + if LastSpellAttackHit() then + AddSkillBonus(Target, GetSkillIDByName("Parry"), SkillAmt) + end +end + + diff --git a/server/Spells/Scout/Rogue/Swashbuckler/Shanghai.lua b/server/Spells/Scout/Rogue/Swashbuckler/Shanghai.lua new file mode 100644 index 000000000..9be241d3b --- /dev/null +++ b/server/Spells/Scout/Rogue/Swashbuckler/Shanghai.lua @@ -0,0 +1,39 @@ +--[[ + Script Name : Spells/Scout/Rogue/Swashbuckler/Shanghai.lua + Script Author : Jabantiz + Script Date : 2013.12.15 08:12:20 + Script Purpose : + : +--]] + +function precast(Caster, Target) + -- You must be sneaking to use this ability. + return IsStealthed(Caster) +end + +function cast(Caster, Target, DmgType, MinVal, MaxVal) + -- Inflicts 13 - 21 melee damage on target + if MaxVal ~= nil and MinVal < MaxVal then + SpellDamage(Target, DmgType, math.random(MinVal, MaxVal)) + else + SpellDamage(Target, DmgType, MinVal) + end + + -- Applies Knockdown on termination. Lasts for 2.5 seconds. + -- Blurs vision of target + -- Throws target back + -- Stuns target + -- Does not affect Epic targets + if not IsEpic(Target) then + Knockdown(Target, Caster, 2500) + AddControlEffect(Target, 4) + BlurVision(Target, 1.0) + AddSpellTimer(2500, "RemoveEffects") + end +end + +function RemoveEffects(Caster, Target) + RemoveControlEffect(Target, 4) + BlurVision(Target, 0) +end + diff --git a/server/Spells/Scout/Rogue/Swashbuckler/SleightofHand.lua b/server/Spells/Scout/Rogue/Swashbuckler/SleightofHand.lua new file mode 100644 index 000000000..6635a4686 --- /dev/null +++ b/server/Spells/Scout/Rogue/Swashbuckler/SleightofHand.lua @@ -0,0 +1,24 @@ +--[[ + Script Name : Spells/Scout/Rogue/Swashbuckler/SleightofHand.lua + Script Author : John Adams + Script Date : 2013.08.11 09:08:39 + Script Purpose : + : +--]] + +function cast(Caster, Target) + -- code to cast the spell + Say(Caster, "Whoops! Guess this is not implemented yet!") + +-- Info from spell_display_effects (remove from script when done) + +end + +function tick(Caster, Target) + -- code to process each call_frequency (tick) set in spell_tiers +end + +function remove(Caster, Target) + -- code to remove the spell +end + diff --git a/server/Spells/Scout/Rogue/Swashbuckler/Slice.lua b/server/Spells/Scout/Rogue/Swashbuckler/Slice.lua new file mode 100644 index 000000000..5589caad5 --- /dev/null +++ b/server/Spells/Scout/Rogue/Swashbuckler/Slice.lua @@ -0,0 +1,47 @@ +--[[ + Script Name : dd_debuff.lua + Script Purpose : Generic damage + 1 effect script + Script Author : John Adams + Script Date : 2008.12.04 + Script Notes : Parameter 4 and 5 are the debuff type and value (param 6 if value is a range) +--]] + +function cast(Caster, Target, DDType, MinDDVal, MaxDDVal, DebuffType, MinDebuffVal, MaxDebuffVal) + + -- Debuff component + -- Determine if there is a range to effect values + if MaxDebuffVal ~= nil and MinDebuffVal < MaxDebuffVal then + -- JA: for debuff randoms (if any), need to to math.random with precision - I think this function rounds up? + DebuffValue = math.random(MinDebuffVal, MaxDebuffVal) + else + DebuffValue = MinDebuffVal + end + + -- Determine DebuffType - either a DamageType or a String value passed as param 4 + if DebuffType == "Attack" then + -- ModifyAttackSpeed(Target, -DebuffValue) + elseif DebuffType == "DPS" then + -- ModifyDPS(Target, -DebuffValue) + elseif DebuffType == "Disease" then + -- ModifyDisease(Target, -DebuffValue) + elseif DebuffType == "Power" then + ModifyPower(Target, -DebuffValue) + elseif DebuffType == "Knockback" then + SpawnSet(Target, "visual_state", "10900") + end + + -- DD component (instant damage) + if MaxDDVal ~= nil and MinDDVal < MaxDDVal then + SpellDamage(Target, DDType, math.random(MinDDVal, MaxDDVal)) + else + SpellDamage(Target, DDType, MinDDVal) + end +end + +function tick(Caster, Target, DDType, MinDDVal, MaxDDVal, DebuffType, MinDebuffVal, MaxDebuffVal) + +end + +function remove(Caster, Target, DDType, MinDDVal, MaxDDVal, DebuffType, MinDebuffVal, MaxDebuffVal) + +end diff --git a/server/Spells/Scout/Rogue/Swashbuckler/SnapoftheWrist.lua b/server/Spells/Scout/Rogue/Swashbuckler/SnapoftheWrist.lua new file mode 100644 index 000000000..8005012ca --- /dev/null +++ b/server/Spells/Scout/Rogue/Swashbuckler/SnapoftheWrist.lua @@ -0,0 +1,25 @@ +--[[ + Script Name : Spells/Scout/Rogue/Swashbuckler/SnapoftheWrist.lua + Script Author : Jabantiz + Script Date : 2013.12.16 01:12:23 + Script Purpose : + : +--]] + +function cast(Caster, Target, DmgType, MinVal, MaxVal) + -- Inflicts 43 - 72 melee damage on target + if MaxVal ~= nil and MinVal < MaxVal then + SpellDamage(Target, DmgType, math.random(MinVal, MaxVal)) + else + SpellDamage(Target, DmgType, MinVal) + end + + -- Inflicts 43 - 72 melee damage on target + if LastSpellAttackHit() then + if MaxVal ~= nil and MinVal < MaxVal then + SpellDamage(Target, DmgType, math.random(MinVal, MaxVal)) + else + SpellDamage(Target, DmgType, MinVal) + end + end +end diff --git a/server/Spells/Scout/Rogue/Swashbuckler/SpineAttack.lua b/server/Spells/Scout/Rogue/Swashbuckler/SpineAttack.lua new file mode 100644 index 000000000..5589caad5 --- /dev/null +++ b/server/Spells/Scout/Rogue/Swashbuckler/SpineAttack.lua @@ -0,0 +1,47 @@ +--[[ + Script Name : dd_debuff.lua + Script Purpose : Generic damage + 1 effect script + Script Author : John Adams + Script Date : 2008.12.04 + Script Notes : Parameter 4 and 5 are the debuff type and value (param 6 if value is a range) +--]] + +function cast(Caster, Target, DDType, MinDDVal, MaxDDVal, DebuffType, MinDebuffVal, MaxDebuffVal) + + -- Debuff component + -- Determine if there is a range to effect values + if MaxDebuffVal ~= nil and MinDebuffVal < MaxDebuffVal then + -- JA: for debuff randoms (if any), need to to math.random with precision - I think this function rounds up? + DebuffValue = math.random(MinDebuffVal, MaxDebuffVal) + else + DebuffValue = MinDebuffVal + end + + -- Determine DebuffType - either a DamageType or a String value passed as param 4 + if DebuffType == "Attack" then + -- ModifyAttackSpeed(Target, -DebuffValue) + elseif DebuffType == "DPS" then + -- ModifyDPS(Target, -DebuffValue) + elseif DebuffType == "Disease" then + -- ModifyDisease(Target, -DebuffValue) + elseif DebuffType == "Power" then + ModifyPower(Target, -DebuffValue) + elseif DebuffType == "Knockback" then + SpawnSet(Target, "visual_state", "10900") + end + + -- DD component (instant damage) + if MaxDDVal ~= nil and MinDDVal < MaxDDVal then + SpellDamage(Target, DDType, math.random(MinDDVal, MaxDDVal)) + else + SpellDamage(Target, DDType, MinDDVal) + end +end + +function tick(Caster, Target, DDType, MinDDVal, MaxDDVal, DebuffType, MinDebuffVal, MaxDebuffVal) + +end + +function remove(Caster, Target, DDType, MinDDVal, MaxDDVal, DebuffType, MinDebuffVal, MaxDebuffVal) + +end diff --git a/server/Spells/Scout/Rogue/Swashbuckler/SpuriousBravado.lua b/server/Spells/Scout/Rogue/Swashbuckler/SpuriousBravado.lua new file mode 100644 index 000000000..6d2047820 --- /dev/null +++ b/server/Spells/Scout/Rogue/Swashbuckler/SpuriousBravado.lua @@ -0,0 +1,28 @@ +--[[ + Script Name : Spells/Scout/Rogue/Swashbuckler/SpuriousBravado.lua + Script Author : John Adams + Script Date : 2013.08.11 08:08:01 + Script Purpose : + : +--]] + +function cast(Caster, Target) + -- code to cast the spell + Say(Caster, "Whoops! Guess this is not implemented yet!") + +-- Info from spell_display_effects (remove from script when done) +-- On a melee hit this spell may cast Bravado on caster. Lasts for 20.0 seconds. Triggers about 5.0 times per minute. +-- Increases Hate Gain of caster by 5.0% +-- Increases Attack Speed of caster by 28.5 +-- Dispelled when target takes damage + +end + +function tick(Caster, Target) + -- code to process each call_frequency (tick) set in spell_tiers +end + +function remove(Caster, Target) + -- code to remove the spell +end + diff --git a/server/Spells/Scout/Rogue/Swashbuckler/SteelSwipe.lua b/server/Spells/Scout/Rogue/Swashbuckler/SteelSwipe.lua new file mode 100644 index 000000000..5589caad5 --- /dev/null +++ b/server/Spells/Scout/Rogue/Swashbuckler/SteelSwipe.lua @@ -0,0 +1,47 @@ +--[[ + Script Name : dd_debuff.lua + Script Purpose : Generic damage + 1 effect script + Script Author : John Adams + Script Date : 2008.12.04 + Script Notes : Parameter 4 and 5 are the debuff type and value (param 6 if value is a range) +--]] + +function cast(Caster, Target, DDType, MinDDVal, MaxDDVal, DebuffType, MinDebuffVal, MaxDebuffVal) + + -- Debuff component + -- Determine if there is a range to effect values + if MaxDebuffVal ~= nil and MinDebuffVal < MaxDebuffVal then + -- JA: for debuff randoms (if any), need to to math.random with precision - I think this function rounds up? + DebuffValue = math.random(MinDebuffVal, MaxDebuffVal) + else + DebuffValue = MinDebuffVal + end + + -- Determine DebuffType - either a DamageType or a String value passed as param 4 + if DebuffType == "Attack" then + -- ModifyAttackSpeed(Target, -DebuffValue) + elseif DebuffType == "DPS" then + -- ModifyDPS(Target, -DebuffValue) + elseif DebuffType == "Disease" then + -- ModifyDisease(Target, -DebuffValue) + elseif DebuffType == "Power" then + ModifyPower(Target, -DebuffValue) + elseif DebuffType == "Knockback" then + SpawnSet(Target, "visual_state", "10900") + end + + -- DD component (instant damage) + if MaxDDVal ~= nil and MinDDVal < MaxDDVal then + SpellDamage(Target, DDType, math.random(MinDDVal, MaxDDVal)) + else + SpellDamage(Target, DDType, MinDDVal) + end +end + +function tick(Caster, Target, DDType, MinDDVal, MaxDDVal, DebuffType, MinDebuffVal, MaxDebuffVal) + +end + +function remove(Caster, Target, DDType, MinDDVal, MaxDDVal, DebuffType, MinDebuffVal, MaxDebuffVal) + +end diff --git a/server/Spells/Scout/Rogue/Swashbuckler/StormofSteel.lua b/server/Spells/Scout/Rogue/Swashbuckler/StormofSteel.lua new file mode 100644 index 000000000..29dc989c9 --- /dev/null +++ b/server/Spells/Scout/Rogue/Swashbuckler/StormofSteel.lua @@ -0,0 +1,30 @@ +--[[ + Script Name : Spells/Scout/Rogue/Swashbuckler/StormofSteel.lua + Script Author : neatz09 + Script Date : 2019.09.23 01:09:55 + Script Purpose : + : +--]] +-- If weapon equipped in Ranged +function precast(Caster, Target) + -- If weapon equipped in Ranged + local item = GetEquippedItemBySlot(Caster, 16) + if item then + if GetItemType(item) == 2 then + return true + end + end + + return false, 68 +end + +-- Inflicts 298 - 497 ranged damage on targets in Area of Effect + +function cast(Caster, Target, DmgType, MinVal, MaxVal) + if MaxVal ~= nil and MinVal < MaxVal then + SpellDamage(Target, DmgType, math.random(MinVal, MaxVal)) + else + SpellDamage(Target, DmgType, MinVal) + end +end + diff --git a/server/Spells/Scout/Rogue/Swashbuckler/SwarthyDeception.lua b/server/Spells/Scout/Rogue/Swashbuckler/SwarthyDeception.lua new file mode 100644 index 000000000..4037373ed --- /dev/null +++ b/server/Spells/Scout/Rogue/Swashbuckler/SwarthyDeception.lua @@ -0,0 +1,17 @@ +--[[ + Script Name : Spells/Scout/Rogue/Swashbuckler/SwarthyDeception.lua + Script Author : Jabantiz + Script Date : 2013.12.16 06:12:40 + Script Purpose : + : +--]] + +function cast(Caster, Target, TransferAmt) + -- Causes 6% Threat to transfer to target when in combat + AddThreatTransfer(Caster, Target, TransferAmt) +end + + +function remove(Caster, Target) + RemoveThreatTransfer(Caster) +end \ No newline at end of file diff --git a/server/Spells/Scout/Rogue/Swashbuckler/SwarthyWays.lua b/server/Spells/Scout/Rogue/Swashbuckler/SwarthyWays.lua new file mode 100644 index 000000000..8d838421f --- /dev/null +++ b/server/Spells/Scout/Rogue/Swashbuckler/SwarthyWays.lua @@ -0,0 +1,32 @@ +--[[ + Script Name : Spells/Scout/Rogue/Swashbuckler/SwarthyWays.lua + Script Author : John Adams + Script Date : 2013.08.11 09:08:39 + Script Purpose : + : +--]] + +function cast(Caster, Target) + -- code to cast the spell + Say(Caster, "Whoops! Guess this is not implemented yet!") + +-- Info from spell_display_effects (remove from script when done) +-- Increases Potency of caster by 10.0% +-- On a melee hit this spell may cast Swarthy Chaos on target of attack. Lasts for 12.0 seconds. Triggers about 3.0 times per minute. +-- Adds an additional 8% hate transfer to Swarthy Deception IV +-- Inflicts 475 - 713 piercing damage on target +-- Inflicts 173 - 259 piercing damage on target every 3 seconds +-- Cannot be modified except by direct means +-- Flamboyant Strike will gain an additional effect that causes the target to reduce their spell damage by 10% +-- Cannot be modified except by direct means + +end + +function tick(Caster, Target) + -- code to process each call_frequency (tick) set in spell_tiers +end + +function remove(Caster, Target) + -- code to remove the spell +end + diff --git a/server/Spells/Scout/Rogue/Swashbuckler/Tease.lua b/server/Spells/Scout/Rogue/Swashbuckler/Tease.lua new file mode 100644 index 000000000..7dce76890 --- /dev/null +++ b/server/Spells/Scout/Rogue/Swashbuckler/Tease.lua @@ -0,0 +1,22 @@ +--[[ + Script Name : Spells/Scout/Rogue/Swashbuckler/Tease.lua + Script Author : neatz09 + Script Date : 2019.10.11 09:10:49 + Script Purpose : + : +--]] + +-- Dispels 35 levels of arcane beneficial effects on target +function cast(Caster, Target, CureAmt, MinTaunt, MaxTaunt) + CureByType(CureAmt, 2, "Cure") + +-- Interrupts target + Interrupt(Target) + +-- Increases Threat to target by 2,110 + if MaxTaunt ~= nil and MinTaunt < MaxTaunt then + AddHate(Caster, Target, math.random(MinTaunt, MaxTaunt)) + else + AddHate(Caster, Target, MinTaunt) + end +end \ No newline at end of file diff --git a/server/Spells/Scout/Rogue/Swashbuckler/Viscerate.lua b/server/Spells/Scout/Rogue/Swashbuckler/Viscerate.lua new file mode 100644 index 000000000..db7d224c1 --- /dev/null +++ b/server/Spells/Scout/Rogue/Swashbuckler/Viscerate.lua @@ -0,0 +1,33 @@ +--[[ + Script Name : Spells/Scout/Rogue/Swashbuckler/Viscerate.lua + Script Author : Jabantiz + Script Date : 2013.12.15 08:12:23 + Script Purpose : + : +--]] + +function precast(Caster, Target) +-- Must be flanking or behind + if not IsFlanking(Caster, Target) then + SendMessage(Caster, "Must be flanking or behind", "yellow") + return false + end + + return true +end + +function cast(Caster, Target, BonusAmt, DmgType, MinVal, MaxVal) + -- Decreases AGI of target by 5.0 + AddSpellBonus(Target, 2, BonusAmt) + + -- Inflicts 16 - 27 melee damage on target + if MaxVal ~= nil and MinVal < MaxVal then + SpellDamage(Target, DmgType, math.random(MinVal, MaxVal)) + else + SpellDamage(Target, DmgType, MinVal) + end +end + +function remove(Caster, Target) + RemoveSpellBonus(Target) +end diff --git a/server/Spells/Scout/SinisterStrike.lua b/server/Spells/Scout/SinisterStrike.lua new file mode 100644 index 000000000..6f551da38 --- /dev/null +++ b/server/Spells/Scout/SinisterStrike.lua @@ -0,0 +1,29 @@ +--[[ + Script Name : Spells/Scout/SinisterStrike.lua + Script Author : John Adams + Script Date : 2013.08.11 02:08:56 + Script Purpose : + : +--]] + +function cast(Caster, Target) + -- code to cast the spell + Say(Caster, "Whoops! Guess this is not implemented yet!") + +-- Info from spell_display_effects (remove from script when done) +-- Decreases Mitigation of target vs physical damage by 90 +-- Inflicts 109 - 182 melee damage on target +-- Must be flanking or behind +-- If one of the following races: +-- [None] + +end + +function tick(Caster, Target) + -- code to process each call_frequency (tick) set in spell_tiers +end + +function remove(Caster, Target) + -- code to remove the spell +end + diff --git a/server/Spells/Scout/SneakAttack.lua b/server/Spells/Scout/SneakAttack.lua new file mode 100644 index 000000000..1028a3814 --- /dev/null +++ b/server/Spells/Scout/SneakAttack.lua @@ -0,0 +1,26 @@ +--[[ + Script Name : Spells/Scout/SneakAttack.lua + Script Author : John Adams + Script Date : 2013.08.11 02:08:59 + Script Purpose : + : +--]] + +function cast(Caster, Target) + -- code to cast the spell + Say(Caster, "Whoops! Guess this is not implemented yet!") + +-- Info from spell_display_effects (remove from script when done) +-- Inflicts 24 - 41 melee damage on target +-- Must be flanking or behind + +end + +function tick(Caster, Target) + -- code to process each call_frequency (tick) set in spell_tiers +end + +function remove(Caster, Target) + -- code to remove the spell +end + diff --git a/server/Spells/Scout/Tracking.lua b/server/Spells/Scout/Tracking.lua new file mode 100644 index 000000000..2a6287fd0 --- /dev/null +++ b/server/Spells/Scout/Tracking.lua @@ -0,0 +1,19 @@ +--[[ + Script Name : tracking.lua + Script Purpose : Tracking spells + Script Author : John Adams + Script Date : 2008.12.07 + Script Notes : I am not sure Tracking is a "spell"? +--]] + +function cast(Caster, Target, Type, Min, Max) + -- code to cast the spell +end + +function tick(Caster, Target, Type, Min, Max) + -- code to process each call_frequency (tick) set in spell_tiers +end + +function remove(Caster, Target) + -- code to remove the spell +end diff --git a/server/Spells/SummonAnimatedTome.lua b/server/Spells/SummonAnimatedTome.lua new file mode 100644 index 000000000..e3d2f8091 --- /dev/null +++ b/server/Spells/SummonAnimatedTome.lua @@ -0,0 +1,23 @@ +--[[ + Script Name : Spells/SummonAnimatedTome.lua + Script Author : Ememjr + Script Date : 2019.04.21 08:04:26 + Script Purpose : + : +--]] + +-- Info from spell_display_effects (remove from script when done) +-- Increases Crit Chance of caster by 2.3 +-- Summons a pet arcane tome +function cast(Caster, Target, CritChance) + AddSpellBonus(Target, 656, CritChance) + SummonCosmeticPet(Caster, 150084) +end + +function remove(Caster, Target) + RemoveSpellBonus(Target) + pet = GetCosmeticPet(Caster) + if pet ~= nil then + DismissPet(pet) + end +end \ No newline at end of file diff --git a/server/Spells/SummonDrake.lua b/server/Spells/SummonDrake.lua new file mode 100644 index 000000000..df5dd4e8f --- /dev/null +++ b/server/Spells/SummonDrake.lua @@ -0,0 +1,24 @@ +--[[ + Script Name : Spells/SummonDrake.lua + Script Author : Ememjr + Script Date : 2019.04.21 08:04:32 + Script Purpose : + : +--]] + +-- Info from spell_display_effects (remove from script when done) +-- Increases Ability Reuse Speed of caster by 1.6% +-- Summons a pet minor drake + +function cast(Caster, Target, AbilityReuseSpeed) + AddSpellBonus(Target, 662, AbilityReuseSpeed) + SummonCosmeticPet(Caster, 150084) +end + +function remove(Caster, Target) + RemoveSpellBonus(Target) + pet = GetCosmeticPet(Caster) + if pet ~= nil then + DismissPet(pet) + end +end \ No newline at end of file diff --git a/server/Spells/SummonFamiliar.lua b/server/Spells/SummonFamiliar.lua new file mode 100644 index 000000000..36fccad55 --- /dev/null +++ b/server/Spells/SummonFamiliar.lua @@ -0,0 +1,14 @@ +--[[ + Script Name : Spells/SummonFamiliar.lua + Script Author : Ememjr + Script Date : 2019.04.21 07:04:37 + Script Purpose : + : +--]] + +-- Info from spell_display_effects (remove from script when done) + +function cast(Caster, Target, tier) + AddSpellBookEntry(Caster,1001923,tier) + +end diff --git a/server/Spells/SummonGargoyle.lua b/server/Spells/SummonGargoyle.lua new file mode 100644 index 000000000..64e96bc92 --- /dev/null +++ b/server/Spells/SummonGargoyle.lua @@ -0,0 +1,27 @@ +--[[ + Script Name : Spells/SummonGargoyle.lua + Script Author : Ememjr + Script Date : 2019.04.21 07:04:05 + Script Purpose : + : +--]] + +-- Info from spell_display_effects (remove from script when done) +-- Decreases Hate Gain of caster by 4.0% +-- Summons a pet lesser gargoyle + +function cast(Caster, Target, HateGain) + AddSpellBonus(Target, 624, HateGain) + SummonCosmeticPet(Caster, 340083) +end + +function remove(Caster, Target) + RemoveSpellBonus(Target) + pet = GetCosmeticPet(Caster) + if pet ~= nil then + DismissPet(pet) + end +end + + + diff --git a/server/Spells/Tradeskills/DurabilityAdd.lua b/server/Spells/Tradeskills/DurabilityAdd.lua new file mode 100644 index 000000000..f62dccd82 --- /dev/null +++ b/server/Spells/Tradeskills/DurabilityAdd.lua @@ -0,0 +1,15 @@ +--[[ + Script Name : Spells/Tradeskills/DurabilityAdd.lua + Script Purpose: Adds durability during crafting + Script Author : Jabantiz + Script Date : 2012.09.08 + Script Notes : +--]] + +function cast(Caster, Target, DurabilityAmount) + AddSpellBonus(Caster, 801, DurabilityAmount) +end + +function remove(Caster, Target, DurabilityAmount) + RemoveSpellBonus(Target) +end \ No newline at end of file diff --git a/server/Spells/Tradeskills/DurabilityAddProgressAdd.lua b/server/Spells/Tradeskills/DurabilityAddProgressAdd.lua new file mode 100644 index 000000000..b28eb5a82 --- /dev/null +++ b/server/Spells/Tradeskills/DurabilityAddProgressAdd.lua @@ -0,0 +1,16 @@ +--[[ + Script Name : Spells/Tradeskills/DurabilityAddProgressAdd.lua + Script Purpose: Adds durability and progress during crafting + Script Author : Jabantiz + Script Date : 2012.09.08 + Script Notes : +--]] + +function cast(Caster, Target, ProgressAmount, DurabilityAmount) + AddSpellBonus(Caster, 802, ProgressAmount) + AddSpellBonus(Caster, 801, DurabilityAmount) +end + +function remove(Caster, Target, ProgressAmount, DurabilityAmount) + RemoveSpellBonus(Target) +end diff --git a/server/Spells/Tradeskills/DurabilityModProgressAdd.lua b/server/Spells/Tradeskills/DurabilityModProgressAdd.lua new file mode 100644 index 000000000..8a8fd4446 --- /dev/null +++ b/server/Spells/Tradeskills/DurabilityModProgressAdd.lua @@ -0,0 +1,16 @@ +--[[ + Script Name : Spells/Tradeskills/DurabilityModProgressAdd.lua + Script Purpose: Modifies Durability while adding Progress during crafting + Script Author : John Adams + Script Date : 2013.08.10 + Script Notes : +--]] + +function cast(Caster, Target, DurabilityMod, ProgressAmount) + AddSpellBonus(Caster, 801, DurabilityMod) + AddSpellBonus(Caster, 802, ProgressAmount) +end + +function remove(Caster, Target, SuccessMod, ProgressAmount) + RemoveSpellBonus(Target) +end \ No newline at end of file diff --git a/server/Spells/Tradeskills/DurabilityModSuccessAdd.lua b/server/Spells/Tradeskills/DurabilityModSuccessAdd.lua new file mode 100644 index 000000000..517e1343b --- /dev/null +++ b/server/Spells/Tradeskills/DurabilityModSuccessAdd.lua @@ -0,0 +1,21 @@ +--[[ + Script Name : Spells/Tradeskills/DurabilityModSuccessAdd.lua + Script Author : John Adams + Script Date : 2013.11.23 12:11:39 + Script Purpose : + : +--]] + +-- Info from spell_display_effects (remove from script when done) +-- Reduces experimental durability gain by 1.0%. +-- Increases experimental success chance by 2.0% +-- Cannot be modified except by direct means + +function cast(Caster, Target, DurabilityMod, SuccessAdd) + AddSpellBonus(Caster, 800, DurabilityMod) + AddSpellBonus(Caster, 804, SuccessAdd) +end + +function remove(Caster, Target, DurabilityMod, SuccessAdd) + RemoveSpellBonus(Target) +end \ No newline at end of file diff --git a/server/Spells/Tradeskills/ProgressAdd.lua b/server/Spells/Tradeskills/ProgressAdd.lua new file mode 100644 index 000000000..4776de19b --- /dev/null +++ b/server/Spells/Tradeskills/ProgressAdd.lua @@ -0,0 +1,15 @@ +--[[ + Script Name : Spells/Tradeskills/ProgressAdd.lua + Script Purpose: Adds progress during crafting + Script Author : Jabantiz + Script Date : 2012.09.08 + Script Notes : +--]] + +function cast(Caster, Target, ProgressAmount) + AddSpellBonus(Caster, 802, ProgressAmount) +end + +function remove(Caster, Target, ProgressAmount) + RemoveSpellBonus(Target) +end \ No newline at end of file diff --git a/server/Spells/Tradeskills/ProgressModDurabilityAdd.lua b/server/Spells/Tradeskills/ProgressModDurabilityAdd.lua new file mode 100644 index 000000000..ffe9c57a9 --- /dev/null +++ b/server/Spells/Tradeskills/ProgressModDurabilityAdd.lua @@ -0,0 +1,16 @@ +--[[ + Script Name : Spells/Tradeskills/ProgressModDurabilityAdd + Script Purpose: Modifies Progress while adding Durability during crafting + Script Author : John Adams + Script Date : 2013.08.10 + Script Notes : +--]] + +function cast(Caster, Target, ProgressMod, DurabilityAmount) + AddSpellBonus(Caster, 802, ProgressMod) + AddSpellBonus(Caster, 801, DurabilityAmount) +end + +function remove(Caster, Target, SuccessMod, ProgressAmount) + RemoveSpellBonus(Target) +end \ No newline at end of file diff --git a/server/Spells/Tradeskills/ProgressModSuccessAdd.lua b/server/Spells/Tradeskills/ProgressModSuccessAdd.lua new file mode 100644 index 000000000..355f4e8fc --- /dev/null +++ b/server/Spells/Tradeskills/ProgressModSuccessAdd.lua @@ -0,0 +1,21 @@ +--[[ + Script Name : Spells/Tradeskills/ProgressModSuccessAdd.lua + Script Author : John Adams + Script Date : 2013.11.23 01:11:52 + Script Purpose : + : +--]] + +-- Info from spell_display_effects (remove from script when done) +-- Reduces the amount of experimental progress gained by 1.0%. +-- Increases experimental success chance by 2.0% +-- Cannot be modified except by direct means + +function cast(Caster, Target, ProgressMod, SuccessAdd) + AddSpellBonus(Caster, 803, ProgressMod) + AddSpellBonus(Caster, 804, SuccessAdd) +end + +function remove(Caster, Target, ProgressMod, SuccessAdd) + RemoveSpellBonus(Target) +end \ No newline at end of file diff --git a/server/Spells/Tradeskills/SuccessModDurabilityAdd.lua b/server/Spells/Tradeskills/SuccessModDurabilityAdd.lua new file mode 100644 index 000000000..32a8cc0c5 --- /dev/null +++ b/server/Spells/Tradeskills/SuccessModDurabilityAdd.lua @@ -0,0 +1,16 @@ +--[[ + Script Name : Spells/Tradeskills/SuccessModDurabilityAdd.lua + Script Purpose: Modifies Success while adding Durability during crafting + Script Author : Jabantiz + Script Date : 2012.09.08 + Script Notes : +--]] + +function cast(Caster, Target, SucessMod, DurabilityAmount) + AddSpellBonus(Caster, 804, SuccessMod) + AddSpellBonus(Caster, 801, DurabilityAmount) +end + +function remove(Caster, Target, SuccessMod, DurabilityAmount) + RemoveSpellBonus(Target) +end \ No newline at end of file diff --git a/server/Spells/Tradeskills/SuccessModProgressAdd.lua b/server/Spells/Tradeskills/SuccessModProgressAdd.lua new file mode 100644 index 000000000..6cbfe17e1 --- /dev/null +++ b/server/Spells/Tradeskills/SuccessModProgressAdd.lua @@ -0,0 +1,16 @@ +--[[ + Script Name : Spells/Tradeskills/SuccessModProgressAdd.lua + Script Purpose: Modifies Success while adding Progress during crafting + Script Author : Jabantiz + Script Date : 2012.09.08 + Script Notes : +--]] + +function cast(Caster, Target, SuccessMod, ProgressAmount) + AddSpellBonus(Target, 804, SuccessMod) + AddSpellBonus(Target, 802, ProgressAmount) +end + +function remove(Caster, Target, SuccessMod, ProgressAmount) + RemoveSpellBonus(Target) +end \ No newline at end of file diff --git a/server/Spells/Traditions/AHalflingsFeast.lua b/server/Spells/Traditions/AHalflingsFeast.lua new file mode 100644 index 000000000..7946d19b2 --- /dev/null +++ b/server/Spells/Traditions/AHalflingsFeast.lua @@ -0,0 +1,12 @@ +--[[ + Script Name : {generic header} + Script Purpose : + Script Author : John Adams + Script Date : 2012.09.08 + Script Notes : temp script to stop world errors +--]] + +function cast(Caster, Target) + + +end diff --git a/server/Spells/Traditions/AerialDodging.lua b/server/Spells/Traditions/AerialDodging.lua new file mode 100644 index 000000000..7946d19b2 --- /dev/null +++ b/server/Spells/Traditions/AerialDodging.lua @@ -0,0 +1,12 @@ +--[[ + Script Name : {generic header} + Script Purpose : + Script Author : John Adams + Script Date : 2012.09.08 + Script Notes : temp script to stop world errors +--]] + +function cast(Caster, Target) + + +end diff --git a/server/Spells/Traditions/AggressiveStrike.lua b/server/Spells/Traditions/AggressiveStrike.lua new file mode 100644 index 000000000..7946d19b2 --- /dev/null +++ b/server/Spells/Traditions/AggressiveStrike.lua @@ -0,0 +1,12 @@ +--[[ + Script Name : {generic header} + Script Purpose : + Script Author : John Adams + Script Date : 2012.09.08 + Script Notes : temp script to stop world errors +--]] + +function cast(Caster, Target) + + +end diff --git a/server/Spells/Traditions/AkanonsInnovation.lua b/server/Spells/Traditions/AkanonsInnovation.lua new file mode 100644 index 000000000..7946d19b2 --- /dev/null +++ b/server/Spells/Traditions/AkanonsInnovation.lua @@ -0,0 +1,12 @@ +--[[ + Script Name : {generic header} + Script Purpose : + Script Author : John Adams + Script Date : 2012.09.08 + Script Notes : temp script to stop world errors +--]] + +function cast(Caster, Target) + + +end diff --git a/server/Spells/Traditions/Antidote.lua b/server/Spells/Traditions/Antidote.lua new file mode 100644 index 000000000..7946d19b2 --- /dev/null +++ b/server/Spells/Traditions/Antidote.lua @@ -0,0 +1,12 @@ +--[[ + Script Name : {generic header} + Script Purpose : + Script Author : John Adams + Script Date : 2012.09.08 + Script Notes : temp script to stop world errors +--]] + +function cast(Caster, Target) + + +end diff --git a/server/Spells/Traditions/ArasaiFlight.lua b/server/Spells/Traditions/ArasaiFlight.lua new file mode 100644 index 000000000..7946d19b2 --- /dev/null +++ b/server/Spells/Traditions/ArasaiFlight.lua @@ -0,0 +1,12 @@ +--[[ + Script Name : {generic header} + Script Purpose : + Script Author : John Adams + Script Date : 2012.09.08 + Script Notes : temp script to stop world errors +--]] + +function cast(Caster, Target) + + +end diff --git a/server/Spells/Traditions/ArasaiSavvy.lua b/server/Spells/Traditions/ArasaiSavvy.lua new file mode 100644 index 000000000..7946d19b2 --- /dev/null +++ b/server/Spells/Traditions/ArasaiSavvy.lua @@ -0,0 +1,12 @@ +--[[ + Script Name : {generic header} + Script Purpose : + Script Author : John Adams + Script Date : 2012.09.08 + Script Notes : temp script to stop world errors +--]] + +function cast(Caster, Target) + + +end diff --git a/server/Spells/Traditions/ArasaisEndurance.lua b/server/Spells/Traditions/ArasaisEndurance.lua new file mode 100644 index 000000000..7946d19b2 --- /dev/null +++ b/server/Spells/Traditions/ArasaisEndurance.lua @@ -0,0 +1,12 @@ +--[[ + Script Name : {generic header} + Script Purpose : + Script Author : John Adams + Script Date : 2012.09.08 + Script Notes : temp script to stop world errors +--]] + +function cast(Caster, Target) + + +end diff --git a/server/Spells/Traditions/ArcaneKnowledge.lua b/server/Spells/Traditions/ArcaneKnowledge.lua new file mode 100644 index 000000000..7946d19b2 --- /dev/null +++ b/server/Spells/Traditions/ArcaneKnowledge.lua @@ -0,0 +1,12 @@ +--[[ + Script Name : {generic header} + Script Purpose : + Script Author : John Adams + Script Date : 2012.09.08 + Script Notes : temp script to stop world errors +--]] + +function cast(Caster, Target) + + +end diff --git a/server/Spells/Traditions/ArcofLightning.lua b/server/Spells/Traditions/ArcofLightning.lua new file mode 100644 index 000000000..7946d19b2 --- /dev/null +++ b/server/Spells/Traditions/ArcofLightning.lua @@ -0,0 +1,12 @@ +--[[ + Script Name : {generic header} + Script Purpose : + Script Author : John Adams + Script Date : 2012.09.08 + Script Notes : temp script to stop world errors +--]] + +function cast(Caster, Target) + + +end diff --git a/server/Spells/Traditions/ArmoroftheFeerrott.lua b/server/Spells/Traditions/ArmoroftheFeerrott.lua new file mode 100644 index 000000000..7946d19b2 --- /dev/null +++ b/server/Spells/Traditions/ArmoroftheFeerrott.lua @@ -0,0 +1,12 @@ +--[[ + Script Name : {generic header} + Script Purpose : + Script Author : John Adams + Script Date : 2012.09.08 + Script Notes : temp script to stop world errors +--]] + +function cast(Caster, Target) + + +end diff --git a/server/Spells/Traditions/Attribute/AgileMight.lua b/server/Spells/Traditions/Attribute/AgileMight.lua new file mode 100644 index 000000000..1de970e18 --- /dev/null +++ b/server/Spells/Traditions/Attribute/AgileMight.lua @@ -0,0 +1,16 @@ +--[[ + Script Name : Spells\Traditions\AgileMight.lua + Script Purpose : Increases Strength as you level + Script Author : Zcoretri + Script Date : 2012.07.22 +--]] + +function cast(Caster, Target, Modifier) + Level = GetLevel(Target) + BonusAmt = Level * Modifier + AddSpellBonus(Target, 0, BonusAmt) +end + +function remove(Caster, Target, StatAmt) + RemoveSpellBonus(Target) +end \ No newline at end of file diff --git a/server/Spells/Traditions/Attribute/AgileMovements.lua b/server/Spells/Traditions/Attribute/AgileMovements.lua new file mode 100644 index 000000000..588b5f953 --- /dev/null +++ b/server/Spells/Traditions/Attribute/AgileMovements.lua @@ -0,0 +1,16 @@ +--[[ + Script Name : Spells\Traditions\AgileMovements.lua + Script Purpose : Increases Agility as you level + Script Author : Zcoretri + Script Date : 2012.07.31 +--]] + +function cast(Caster, Target, Modifier) + Level = GetLevel(Target) + BonusAmt = Level * Modifier + AddSpellBonus(Target, 2, BonusAmt) +end + +function remove(Caster, Target, StatAmt) + RemoveSpellBonus(Target) +end \ No newline at end of file diff --git a/server/Spells/Traditions/Attribute/AkanonsInnovation.lua b/server/Spells/Traditions/Attribute/AkanonsInnovation.lua new file mode 100644 index 000000000..54d904224 --- /dev/null +++ b/server/Spells/Traditions/Attribute/AkanonsInnovation.lua @@ -0,0 +1,16 @@ +--[[ + Script Name : Spells\Traditions\AkAnonsInnovation.lua + Script Purpose : Increases Intelligence as you level + Script Author : Zcoretri + Script Date : 2012.07.31 +--]] + +function cast(Caster, Target, Modifier) + Level = GetLevel(Target) + BonusAmt = Level * Modifier + AddSpellBonus(Target, 4, BonusAmt) +end + +function remove(Caster, Target, StatAmt) + RemoveSpellBonus(Target) +end \ No newline at end of file diff --git a/server/Spells/Traditions/Attribute/ArasaiSavvy.lua b/server/Spells/Traditions/Attribute/ArasaiSavvy.lua new file mode 100644 index 000000000..8b7385026 --- /dev/null +++ b/server/Spells/Traditions/Attribute/ArasaiSavvy.lua @@ -0,0 +1,16 @@ +--[[ + Script Name : Spells\Traditions\ArasaiSavvy.lua + Script Purpose : Increases Intelligence as you level + Script Author : Zcoretri + Script Date : 2012.07.31 +--]] + +function cast(Caster, Target, Modifier) + Level = GetLevel(Target) + BonusAmt = Level * Modifier + AddSpellBonus(Target, 4, BonusAmt) +end + +function remove(Caster, Target, StatAmt) + RemoveSpellBonus(Target) +end \ No newline at end of file diff --git a/server/Spells/Traditions/Attribute/BruteForce.lua b/server/Spells/Traditions/Attribute/BruteForce.lua new file mode 100644 index 000000000..1ebe94664 --- /dev/null +++ b/server/Spells/Traditions/Attribute/BruteForce.lua @@ -0,0 +1,16 @@ +--[[ + Script Name : Spells\Traditions\BruteForce.lua + Script Purpose : Increases Strength as you level + Script Author : Zcoretri + Script Date : 2012.07.22 +--]] + +function cast(Caster, Target, Modifier) + Level = GetLevel(Target) + BonusAmt = Level * Modifier + AddSpellBonus(Target, 0, BonusAmt) +end + +function remove(Caster, Target, StatAmt) + RemoveSpellBonus(Target) +end \ No newline at end of file diff --git a/server/Spells/Traditions/Attribute/CazicsEnduringHold.lua b/server/Spells/Traditions/Attribute/CazicsEnduringHold.lua new file mode 100644 index 000000000..ddcf68b8c --- /dev/null +++ b/server/Spells/Traditions/Attribute/CazicsEnduringHold.lua @@ -0,0 +1,16 @@ +--[[ + Script Name : Spells\Traditions\CazicsEnduringHold.lua + Script Purpose : Increases Stamina as you level + Script Author : Zcoretri + Script Date : 2012.07.31 +--]] + +function cast(Caster, Target, Modifier) + Level = GetLevel(Target) + BonusAmt = Level * Modifier + AddSpellBonus(Target, 1, BonusAmt) +end + +function remove(Caster, Target, StatAmt) + RemoveSpellBonus(Target) +end \ No newline at end of file diff --git a/server/Spells/Traditions/Attribute/Countenance.lua b/server/Spells/Traditions/Attribute/Countenance.lua new file mode 100644 index 000000000..500762eed --- /dev/null +++ b/server/Spells/Traditions/Attribute/Countenance.lua @@ -0,0 +1,16 @@ +--[[ + Script Name : Spells\Traditions\Countenance.lua + Script Purpose : Increases Stamina as you level + Script Author : Zcoretri + Script Date : 2012.07.31 +--]] + +function cast(Caster, Target, Modifier) + Level = GetLevel(Target) + BonusAmt = Level * Modifier + AddSpellBonus(Target, 1, BonusAmt) +end + +function remove(Caster, Target, StatAmt) + RemoveSpellBonus(Target) +end \ No newline at end of file diff --git a/server/Spells/Traditions/Attribute/DarkenedAgility.lua b/server/Spells/Traditions/Attribute/DarkenedAgility.lua new file mode 100644 index 000000000..3fc0000ac --- /dev/null +++ b/server/Spells/Traditions/Attribute/DarkenedAgility.lua @@ -0,0 +1,16 @@ +--[[ + Script Name : Spells\Traditions\DarkenedAgility.lua + Script Purpose : Increases Agility as you level + Script Author : Zcoretri + Script Date : 2012.07.31 +--]] + +function cast(Caster, Target, Modifier) + Level = GetLevel(Target) + BonusAmt = Level * Modifier + AddSpellBonus(Target, 2, BonusAmt) +end + +function remove(Caster, Target, StatAmt) + RemoveSpellBonus(Target) +end \ No newline at end of file diff --git a/server/Spells/Traditions/Attribute/DwarvenFortitude.lua b/server/Spells/Traditions/Attribute/DwarvenFortitude.lua new file mode 100644 index 000000000..bf4e43917 --- /dev/null +++ b/server/Spells/Traditions/Attribute/DwarvenFortitude.lua @@ -0,0 +1,16 @@ +--[[ + Script Name : Spells\Traditions\DwarvenFortitude.lua + Script Purpose : Increases Stamina as you level + Script Author : Zcoretri + Script Date : 2012.07.31 +--]] + +function cast(Caster, Target, Modifier) + Level = GetLevel(Target) + BonusAmt = Level * Modifier + AddSpellBonus(Target, 1, BonusAmt) +end + +function remove(Caster, Target, StatAmt) + RemoveSpellBonus(Target) +end \ No newline at end of file diff --git a/server/Spells/Traditions/Attribute/ElvenWisdom.lua b/server/Spells/Traditions/Attribute/ElvenWisdom.lua new file mode 100644 index 000000000..2571146c5 --- /dev/null +++ b/server/Spells/Traditions/Attribute/ElvenWisdom.lua @@ -0,0 +1,16 @@ +--[[ + Script Name : Spells\Traditions\ElvenWisdom.lua + Script Purpose : Increases Wisdom as you level + Script Author : Zcoretri + Script Date : 2012.07.31 +--]] + +function cast(Caster, Target, Modifier) + Level = GetLevel(Target) + BonusAmt = Level * Modifier + AddSpellBonus(Target, 3, BonusAmt) +end + +function remove(Caster, Target, StatAmt) + RemoveSpellBonus(Target) +end \ No newline at end of file diff --git a/server/Spells/Traditions/Attribute/EnduranceOfEarthAndWater.lua b/server/Spells/Traditions/Attribute/EnduranceOfEarthAndWater.lua new file mode 100644 index 000000000..1432ab8c1 --- /dev/null +++ b/server/Spells/Traditions/Attribute/EnduranceOfEarthAndWater.lua @@ -0,0 +1,16 @@ +--[[ + Script Name : Spells\Traditions\EnduranceOfEarthAndWater.lua + Script Purpose : Increases Stamina as you level + Script Author : Zcoretri + Script Date : 2012.07.31 +--]] + +function cast(Caster, Target, Modifier) + Level = GetLevel(Target) + BonusAmt = Level * Modifier + AddSpellBonus(Target, 1, BonusAmt) +end + +function remove(Caster, Target, StatAmt) + RemoveSpellBonus(Target) +end \ No newline at end of file diff --git a/server/Spells/Traditions/Attribute/EnhancedIntellect.lua b/server/Spells/Traditions/Attribute/EnhancedIntellect.lua new file mode 100644 index 000000000..40008aaf6 --- /dev/null +++ b/server/Spells/Traditions/Attribute/EnhancedIntellect.lua @@ -0,0 +1,16 @@ +--[[ + Script Name : Spells\Traditions\EnhancedIntellect.lua + Script Purpose : Increases Intelligence as you level + Script Author : Zcoretri + Script Date : 2012.07.31 +--]] + +function cast(Caster, Target, Modifier) + Level = GetLevel(Target) + BonusAmt = Level * Modifier + AddSpellBonus(Target, 4, BonusAmt) +end + +function remove(Caster, Target, StatAmt) + RemoveSpellBonus(Target) +end \ No newline at end of file diff --git a/server/Spells/Traditions/Attribute/EternalLearning.lua b/server/Spells/Traditions/Attribute/EternalLearning.lua new file mode 100644 index 000000000..03a91020a --- /dev/null +++ b/server/Spells/Traditions/Attribute/EternalLearning.lua @@ -0,0 +1,16 @@ +--[[ + Script Name : Spells\Traditions\EternalLearning.lua + Script Purpose : Increases Intelligence as you level + Script Author : Zcoretri + Script Date : 2012.07.31 +--]] + +function cast(Caster, Target, Modifier) + Level = GetLevel(Target) + BonusAmt = Level * Modifier + AddSpellBonus(Target, 4, BonusAmt) +end + +function remove(Caster, Target, StatAmt) + RemoveSpellBonus(Target) +end \ No newline at end of file diff --git a/server/Spells/Traditions/Attribute/FaydarkChampionsAgility.lua b/server/Spells/Traditions/Attribute/FaydarkChampionsAgility.lua new file mode 100644 index 000000000..39d3f5324 --- /dev/null +++ b/server/Spells/Traditions/Attribute/FaydarkChampionsAgility.lua @@ -0,0 +1,16 @@ +--[[ + Script Name : Spells\Traditions\FaydarkChampionsAgility.lua + Script Purpose : Increases Agility as you level + Script Author : Zcoretri + Script Date : 2012.07.31 +--]] + +function cast(Caster, Target, Modifier) + Level = GetLevel(Target) + BonusAmt = Level * Modifier + AddSpellBonus(Target, 2, BonusAmt) +end + +function remove(Caster, Target, StatAmt) + RemoveSpellBonus(Target) +end \ No newline at end of file diff --git a/server/Spells/Traditions/Attribute/FleetFooted.lua b/server/Spells/Traditions/Attribute/FleetFooted.lua new file mode 100644 index 000000000..7d2ff4618 --- /dev/null +++ b/server/Spells/Traditions/Attribute/FleetFooted.lua @@ -0,0 +1,16 @@ +--[[ + Script Name : Spells\Traditions\FleetFooted.lua + Script Purpose : Increases Agility as you level + Script Author : Zcoretri + Script Date : 2012.07.31 +--]] + +function cast(Caster, Target, Modifier) + Level = GetLevel(Target) + BonusAmt = Level * Modifier + AddSpellBonus(Target, 2, BonusAmt) +end + +function remove(Caster, Target, StatAmt) + RemoveSpellBonus(Target) +end \ No newline at end of file diff --git a/server/Spells/Traditions/Attribute/FocusedDetermination.lua b/server/Spells/Traditions/Attribute/FocusedDetermination.lua new file mode 100644 index 000000000..6cbc75e43 --- /dev/null +++ b/server/Spells/Traditions/Attribute/FocusedDetermination.lua @@ -0,0 +1,16 @@ +--[[ + Script Name : Spells\Traditions\FocusedDetermination.lua + Script Purpose : Increases Stamina as you level + Script Author : Zcoretri + Script Date : 2012.07.31 +--]] + +function cast(Caster, Target, Modifier) + Level = GetLevel(Target) + BonusAmt = Level * Modifier + AddSpellBonus(Target, 1, BonusAmt) +end + +function remove(Caster, Target, StatAmt) + RemoveSpellBonus(Target) +end \ No newline at end of file diff --git a/server/Spells/Traditions/Attribute/HalfElfQuickThinking.lua b/server/Spells/Traditions/Attribute/HalfElfQuickThinking.lua new file mode 100644 index 000000000..064dcecc9 --- /dev/null +++ b/server/Spells/Traditions/Attribute/HalfElfQuickThinking.lua @@ -0,0 +1,16 @@ +--[[ + Script Name : Spells\Traditions\HalfElfQuickThinking.lua + Script Purpose : Increases Intelligence as you level + Script Author : Zcoretri + Script Date : 2012.07.31 +--]] + +function cast(Caster, Target, Modifier) + Level = GetLevel(Target) + BonusAmt = Level * Modifier + AddSpellBonus(Target, 4, BonusAmt) +end + +function remove(Caster, Target, StatAmt) + RemoveSpellBonus(Target) +end \ No newline at end of file diff --git a/server/Spells/Traditions/Attribute/HeartyConstitution.lua b/server/Spells/Traditions/Attribute/HeartyConstitution.lua new file mode 100644 index 000000000..d261dc9d5 --- /dev/null +++ b/server/Spells/Traditions/Attribute/HeartyConstitution.lua @@ -0,0 +1,16 @@ +--[[ + Script Name : Spells\Traditions\HeartyConstitution.lua + Script Purpose : Increases Stamina as you level + Script Author : Zcoretri + Script Date : 2012.07.31 +--]] + +function cast(Caster, Target, Modifier) + Level = GetLevel(Target) + BonusAmt = Level * Modifier + AddSpellBonus(Target, 1, BonusAmt) +end + +function remove(Caster, Target, StatAmt) + RemoveSpellBonus(Target) +end \ No newline at end of file diff --git a/server/Spells/Traditions/Attribute/Insight.lua b/server/Spells/Traditions/Attribute/Insight.lua new file mode 100644 index 000000000..e004c541a --- /dev/null +++ b/server/Spells/Traditions/Attribute/Insight.lua @@ -0,0 +1,16 @@ +--[[ + Script Name : Spells\Traditions\Insight.lua + Script Purpose : Increases Wisdom as you level + Script Author : Zcoretri + Script Date : 2012.07.31 +--]] + +function cast(Caster, Target, Modifier) + Level = GetLevel(Target) + BonusAmt = Level * Modifier + AddSpellBonus(Target, 3, BonusAmt) +end + +function remove(Caster, Target, StatAmt) + RemoveSpellBonus(Target) +end \ No newline at end of file diff --git a/server/Spells/Traditions/Attribute/IntellectOfTheSage.lua b/server/Spells/Traditions/Attribute/IntellectOfTheSage.lua new file mode 100644 index 000000000..9372195fc --- /dev/null +++ b/server/Spells/Traditions/Attribute/IntellectOfTheSage.lua @@ -0,0 +1,16 @@ +--[[ + Script Name : Spells\Traditions\IntellectOfTheSage.lua + Script Purpose : Increases Intelligence as you level + Script Author : Zcoretri + Script Date : 2012.07.31 +--]] + +function cast(Caster, Target, Modifier) + Level = GetLevel(Target) + BonusAmt = Level * Modifier + AddSpellBonus(Target, 4, BonusAmt) +end + +function remove(Caster, Target, StatAmt) + RemoveSpellBonus(Target) +end \ No newline at end of file diff --git a/server/Spells/Traditions/Attribute/IntellecualStudies.lua b/server/Spells/Traditions/Attribute/IntellecualStudies.lua new file mode 100644 index 000000000..78f4d2c68 --- /dev/null +++ b/server/Spells/Traditions/Attribute/IntellecualStudies.lua @@ -0,0 +1,16 @@ +--[[ + Script Name : Spells\Traditions\IntellecualStudies.lua + Script Purpose : Increases Intelligence as you level + Script Author : Zcoretri + Script Date : 2012.07.31 +--]] + +function cast(Caster, Target, Modifier) + Level = GetLevel(Target) + BonusAmt = Level * Modifier + AddSpellBonus(Target, 4, BonusAmt) +end + +function remove(Caster, Target, StatAmt) + RemoveSpellBonus(Target) +end \ No newline at end of file diff --git a/server/Spells/Traditions/Attribute/IntelligentDesigns.lua b/server/Spells/Traditions/Attribute/IntelligentDesigns.lua new file mode 100644 index 000000000..e349a080f --- /dev/null +++ b/server/Spells/Traditions/Attribute/IntelligentDesigns.lua @@ -0,0 +1,16 @@ +--[[ + Script Name : Spells\Traditions\IntelligentDesigns.lua + Script Purpose : Increases Intelligence as you level + Script Author : Zcoretri + Script Date : 2012.07.31 +--]] + +function cast(Caster, Target, Modifier) + Level = GetLevel(Target) + BonusAmt = Level * Modifier + AddSpellBonus(Target, 4, BonusAmt) +end + +function remove(Caster, Target, StatAmt) + RemoveSpellBonus(Target) +end \ No newline at end of file diff --git a/server/Spells/Traditions/Attribute/KejaansInspiration.lua b/server/Spells/Traditions/Attribute/KejaansInspiration.lua new file mode 100644 index 000000000..2679777dd --- /dev/null +++ b/server/Spells/Traditions/Attribute/KejaansInspiration.lua @@ -0,0 +1,16 @@ +--[[ + Script Name : Spells\Traditions\KejaansInspiration.lua + Script Purpose : Increases Strength as you level + Script Author : Zcoretri + Script Date : 2012.07.22 +--]] + +function cast(Caster, Target, Modifier) + Level = GetLevel(Target) + BonusAmt = Level * Modifier + AddSpellBonus(Target, 0, BonusAmt) +end + +function remove(Caster, Target, StatAmt) + RemoveSpellBonus(Target) +end \ No newline at end of file diff --git a/server/Spells/Traditions/Attribute/LastOneStanding.lua b/server/Spells/Traditions/Attribute/LastOneStanding.lua new file mode 100644 index 000000000..18f97943e --- /dev/null +++ b/server/Spells/Traditions/Attribute/LastOneStanding.lua @@ -0,0 +1,16 @@ +--[[ + Script Name : Spells\Traditions\LastOneStanding.lua + Script Purpose : Increases Stamina as you level + Script Author : Zcoretri + Script Date : 2012.07.31 +--]] + +function cast(Caster, Target, Modifier) + Level = GetLevel(Target) + BonusAmt = Level * Modifier + AddSpellBonus(Target, 1, BonusAmt) +end + +function remove(Caster, Target, StatAmt) + RemoveSpellBonus(Target) +end \ No newline at end of file diff --git a/server/Spells/Traditions/Attribute/MarrsInsight.lua b/server/Spells/Traditions/Attribute/MarrsInsight.lua new file mode 100644 index 000000000..e99bb0322 --- /dev/null +++ b/server/Spells/Traditions/Attribute/MarrsInsight.lua @@ -0,0 +1,16 @@ +--[[ + Script Name : Spells\Traditions\MarrsInsight.lua + Script Purpose : Increases Wisdom as you level + Script Author : Zcoretri + Script Date : 2012.07.31 +--]] + +function cast(Caster, Target, Modifier) + Level = GetLevel(Target) + BonusAmt = Level * Modifier + AddSpellBonus(Target, 3, BonusAmt) +end + +function remove(Caster, Target, StatAmt) + RemoveSpellBonus(Target) +end \ No newline at end of file diff --git a/server/Spells/Traditions/Attribute/MechanicalVambraces.lua b/server/Spells/Traditions/Attribute/MechanicalVambraces.lua new file mode 100644 index 000000000..8dde0d348 --- /dev/null +++ b/server/Spells/Traditions/Attribute/MechanicalVambraces.lua @@ -0,0 +1,16 @@ +--[[ + Script Name : Spells\Traditions\MechanicalVambraces.lua + Script Purpose : Increases Agility as you level + Script Author : Zcoretri + Script Date : 2012.07.31 +--]] + +function cast(Caster, Target, Modifier) + Level = GetLevel(Target) + BonusAmt = Level * Modifier + AddSpellBonus(Target, 2, BonusAmt) +end + +function remove(Caster, Target, StatAmt) + RemoveSpellBonus(Target) +end \ No newline at end of file diff --git a/server/Spells/Traditions/Attribute/PresumedBrilliance.lua b/server/Spells/Traditions/Attribute/PresumedBrilliance.lua new file mode 100644 index 000000000..5d74299ea --- /dev/null +++ b/server/Spells/Traditions/Attribute/PresumedBrilliance.lua @@ -0,0 +1,16 @@ +--[[ + Script Name : Spells\Traditions\PresumedBrilliance.lua + Script Purpose : Increases Intelligence as you level + Script Author : Zcoretri + Script Date : 2012.07.31 +--]] + +function cast(Caster, Target, Modifier) + Level = GetLevel(Target) + BonusAmt = Level * Modifier + AddSpellBonus(Target, 4, BonusAmt) +end + +function remove(Caster, Target, StatAmt) + RemoveSpellBonus(Target) +end \ No newline at end of file diff --git a/server/Spells/Traditions/Attribute/PursuitOfKnowledge.lua b/server/Spells/Traditions/Attribute/PursuitOfKnowledge.lua new file mode 100644 index 000000000..48fbcab0d --- /dev/null +++ b/server/Spells/Traditions/Attribute/PursuitOfKnowledge.lua @@ -0,0 +1,16 @@ +--[[ + Script Name : Spells\Traditions\PursuitOfKnowledge.lua + Script Purpose : Increases Wisdom as you level + Script Author : Zcoretri + Script Date : 2012.07.31 +--]] + +function cast(Caster, Target, Modifier) + Level = GetLevel(Target) + BonusAmt = Level * Modifier + AddSpellBonus(Target, 3, BonusAmt) +end + +function remove(Caster, Target, StatAmt) + RemoveSpellBonus(Target) +end \ No newline at end of file diff --git a/server/Spells/Traditions/Attribute/SathirianLegacy.lua b/server/Spells/Traditions/Attribute/SathirianLegacy.lua new file mode 100644 index 000000000..50618192c --- /dev/null +++ b/server/Spells/Traditions/Attribute/SathirianLegacy.lua @@ -0,0 +1,16 @@ +--[[ + Script Name : Spells\Traditions\SathirianLegacy.lua + Script Purpose : Increases Intelligence as you level + Script Author : Zcoretri + Script Date : 2012.07.31 +--]] + +function cast(Caster, Target, Modifier) + Level = GetLevel(Target) + BonusAmt = Level * Modifier + AddSpellBonus(Target, 4, BonusAmt) +end + +function remove(Caster, Target, StatAmt) + RemoveSpellBonus(Target) +end \ No newline at end of file diff --git a/server/Spells/Traditions/Attribute/SpiritOfVahKerrath.lua b/server/Spells/Traditions/Attribute/SpiritOfVahKerrath.lua new file mode 100644 index 000000000..8f555602b --- /dev/null +++ b/server/Spells/Traditions/Attribute/SpiritOfVahKerrath.lua @@ -0,0 +1,16 @@ +--[[ + Script Name : Spells\Traditions\SpiritOfVahKerrath.lua + Script Purpose : Increases Intelligence as you level + Script Author : Zcoretri + Script Date : 2012.07.31 +--]] + +function cast(Caster, Target, Modifier) + Level = GetLevel(Target) + BonusAmt = Level * Modifier + AddSpellBonus(Target, 4, BonusAmt) +end + +function remove(Caster, Target, StatAmt) + RemoveSpellBonus(Target) +end \ No newline at end of file diff --git a/server/Spells/Traditions/Attribute/StubbornButWise.lua b/server/Spells/Traditions/Attribute/StubbornButWise.lua new file mode 100644 index 000000000..feb6c73af --- /dev/null +++ b/server/Spells/Traditions/Attribute/StubbornButWise.lua @@ -0,0 +1,16 @@ +--[[ + Script Name : Spells\Traditions\StubbornButWise.lua + Script Purpose : Increases Wisdom as you level + Script Author : Zcoretri + Script Date : 2012.07.31 +--]] + +function cast(Caster, Target, Modifier) + Level = GetLevel(Target) + BonusAmt = Level * Modifier + AddSpellBonus(Target, 3, BonusAmt) +end + +function remove(Caster, Target, StatAmt) + RemoveSpellBonus(Target) +end \ No newline at end of file diff --git a/server/Spells/Traditions/Attribute/TheMightOfBristlebane.lua b/server/Spells/Traditions/Attribute/TheMightOfBristlebane.lua new file mode 100644 index 000000000..8289ee933 --- /dev/null +++ b/server/Spells/Traditions/Attribute/TheMightOfBristlebane.lua @@ -0,0 +1,16 @@ +--[[ + Script Name : Spells\Traditions\TheMightOfBristlebane.lua + Script Purpose : Increases Agility as you level + Script Author : Zcoretri + Script Date : 2012.07.31 +--]] + +function cast(Caster, Target, Modifier) + Level = GetLevel(Target) + BonusAmt = Level * Modifier + AddSpellBonus(Target, 2, BonusAmt) +end + +function remove(Caster, Target, StatAmt) + RemoveSpellBonus(Target) +end \ No newline at end of file diff --git a/server/Spells/Traditions/Attribute/TunaresGuidance.lua b/server/Spells/Traditions/Attribute/TunaresGuidance.lua new file mode 100644 index 000000000..54553c83e --- /dev/null +++ b/server/Spells/Traditions/Attribute/TunaresGuidance.lua @@ -0,0 +1,16 @@ +--[[ + Script Name : Spells\Traditions\TunaresGuidance.lua + Script Purpose : Increases Wisdom as you level + Script Author : Zcoretri + Script Date : 2012.07.31 +--]] + +function cast(Caster, Target, Modifier) + Level = GetLevel(Target) + BonusAmt = Level * Modifier + AddSpellBonus(Target, 3, BonusAmt) +end + +function remove(Caster, Target, StatAmt) + RemoveSpellBonus(Target) +end \ No newline at end of file diff --git a/server/Spells/Traditions/Attribute/UncommonInsight.lua b/server/Spells/Traditions/Attribute/UncommonInsight.lua new file mode 100644 index 000000000..a453f77c3 --- /dev/null +++ b/server/Spells/Traditions/Attribute/UncommonInsight.lua @@ -0,0 +1,16 @@ +--[[ + Script Name : Spells\Traditions\UncommonInsight.lua + Script Purpose : Increases Wisdom as you level + Script Author : Zcoretri + Script Date : 2012.07.31 +--]] + +function cast(Caster, Target, Modifier) + Level = GetLevel(Target) + BonusAmt = Level * Modifier + AddSpellBonus(Target, 3, BonusAmt) +end + +function remove(Caster, Target, StatAmt) + RemoveSpellBonus(Target) +end \ No newline at end of file diff --git a/server/Spells/Traditions/Attribute/VampiricReflexes.lua b/server/Spells/Traditions/Attribute/VampiricReflexes.lua new file mode 100644 index 000000000..862f0ead9 --- /dev/null +++ b/server/Spells/Traditions/Attribute/VampiricReflexes.lua @@ -0,0 +1,16 @@ +--[[ + Script Name : Spells\Traditions\VampiricReflexes.lua + Script Purpose : Increases Agility as you level + Script Author : Zcoretri + Script Date : 2012.07.31 +--]] + +function cast(Caster, Target, Modifier) + Level = GetLevel(Target) + BonusAmt = Level * Modifier + AddSpellBonus(Target, 2, BonusAmt) +end + +function remove(Caster, Target, StatAmt) + RemoveSpellBonus(Target) +end \ No newline at end of file diff --git a/server/Spells/Traditions/Attribute/WisdomOfExperience.lua b/server/Spells/Traditions/Attribute/WisdomOfExperience.lua new file mode 100644 index 000000000..7d9ab407f --- /dev/null +++ b/server/Spells/Traditions/Attribute/WisdomOfExperience.lua @@ -0,0 +1,16 @@ +--[[ + Script Name : Spells\Traditions\WisdomOfExperience.lua + Script Purpose : Increases Wisdom as you level + Script Author : Zcoretri + Script Date : 2012.07.31 +--]] + +function cast(Caster, Target, Modifier) + Level = GetLevel(Target) + BonusAmt = Level * Modifier + AddSpellBonus(Target, 3, BonusAmt) +end + +function remove(Caster, Target, StatAmt) + RemoveSpellBonus(Target) +end \ No newline at end of file diff --git a/server/Spells/Traditions/Attribute/WisdomOfRivervale.lua b/server/Spells/Traditions/Attribute/WisdomOfRivervale.lua new file mode 100644 index 000000000..70fff7265 --- /dev/null +++ b/server/Spells/Traditions/Attribute/WisdomOfRivervale.lua @@ -0,0 +1,16 @@ +--[[ + Script Name : Spells\Traditions\WisdomOfRivervale.lua + Script Purpose : Increases Wisdom as you level + Script Author : Zcoretri + Script Date : 2012.07.31 +--]] + +function cast(Caster, Target, Modifier) + Level = GetLevel(Target) + BonusAmt = Level * Modifier + AddSpellBonus(Target, 3, BonusAmt) +end + +function remove(Caster, Target, StatAmt) + RemoveSpellBonus(Target) +end \ No newline at end of file diff --git a/server/Spells/Traditions/Attribute/WisdomOfTheAges.lua b/server/Spells/Traditions/Attribute/WisdomOfTheAges.lua new file mode 100644 index 000000000..4bcf4545a --- /dev/null +++ b/server/Spells/Traditions/Attribute/WisdomOfTheAges.lua @@ -0,0 +1,16 @@ +--[[ + Script Name : Spells\Traditions\WisdomOfTheAges.lua + Script Purpose : Increases Wisdom as you level + Script Author : Zcoretri + Script Date : 2012.07.31 +--]] + +function cast(Caster, Target, Modifier) + Level = GetLevel(Target) + BonusAmt = Level * Modifier + AddSpellBonus(Target, 3, BonusAmt) +end + +function remove(Caster, Target, StatAmt) + RemoveSpellBonus(Target) +end \ No newline at end of file diff --git a/server/Spells/Traditions/Attribute/WisdomOfTheOldOak.lua b/server/Spells/Traditions/Attribute/WisdomOfTheOldOak.lua new file mode 100644 index 000000000..85b4f24f1 --- /dev/null +++ b/server/Spells/Traditions/Attribute/WisdomOfTheOldOak.lua @@ -0,0 +1,16 @@ +--[[ + Script Name : Spells\Traditions\WisdomOfTheOldOak.lua + Script Purpose : Increases Wisdom as you level + Script Author : Zcoretri + Script Date : 2012.07.31 +--]] + +function cast(Caster, Target, Modifier) + Level = GetLevel(Target) + BonusAmt = Level * Modifier + AddSpellBonus(Target, 3, BonusAmt) +end + +function remove(Caster, Target, StatAmt) + RemoveSpellBonus(Target) +end \ No newline at end of file diff --git a/server/Spells/Traditions/Ayr`DalAdornment.lua b/server/Spells/Traditions/Ayr`DalAdornment.lua new file mode 100644 index 000000000..7946d19b2 --- /dev/null +++ b/server/Spells/Traditions/Ayr`DalAdornment.lua @@ -0,0 +1,12 @@ +--[[ + Script Name : {generic header} + Script Purpose : + Script Author : John Adams + Script Date : 2012.09.08 + Script Notes : temp script to stop world errors +--]] + +function cast(Caster, Target) + + +end diff --git a/server/Spells/Traditions/BarbaricRage.lua b/server/Spells/Traditions/BarbaricRage.lua new file mode 100644 index 000000000..7946d19b2 --- /dev/null +++ b/server/Spells/Traditions/BarbaricRage.lua @@ -0,0 +1,12 @@ +--[[ + Script Name : {generic header} + Script Purpose : + Script Author : John Adams + Script Date : 2012.09.08 + Script Notes : temp script to stop world errors +--]] + +function cast(Caster, Target) + + +end diff --git a/server/Spells/Traditions/BattleReprieve.lua b/server/Spells/Traditions/BattleReprieve.lua new file mode 100644 index 000000000..7946d19b2 --- /dev/null +++ b/server/Spells/Traditions/BattleReprieve.lua @@ -0,0 +1,12 @@ +--[[ + Script Name : {generic header} + Script Purpose : + Script Author : John Adams + Script Date : 2012.09.08 + Script Notes : temp script to stop world errors +--]] + +function cast(Caster, Target) + + +end diff --git a/server/Spells/Traditions/BattleRest.lua b/server/Spells/Traditions/BattleRest.lua new file mode 100644 index 000000000..7946d19b2 --- /dev/null +++ b/server/Spells/Traditions/BattleRest.lua @@ -0,0 +1,12 @@ +--[[ + Script Name : {generic header} + Script Purpose : + Script Author : John Adams + Script Date : 2012.09.08 + Script Notes : temp script to stop world errors +--]] + +function cast(Caster, Target) + + +end diff --git a/server/Spells/Traditions/Blizzard.lua b/server/Spells/Traditions/Blizzard.lua new file mode 100644 index 000000000..7946d19b2 --- /dev/null +++ b/server/Spells/Traditions/Blizzard.lua @@ -0,0 +1,12 @@ +--[[ + Script Name : {generic header} + Script Purpose : + Script Author : John Adams + Script Date : 2012.09.08 + Script Notes : temp script to stop world errors +--]] + +function cast(Caster, Target) + + +end diff --git a/server/Spells/Traditions/BodybyButcherblock.lua b/server/Spells/Traditions/BodybyButcherblock.lua new file mode 100644 index 000000000..7946d19b2 --- /dev/null +++ b/server/Spells/Traditions/BodybyButcherblock.lua @@ -0,0 +1,12 @@ +--[[ + Script Name : {generic header} + Script Purpose : + Script Author : John Adams + Script Date : 2012.09.08 + Script Notes : temp script to stop world errors +--]] + +function cast(Caster, Target) + + +end diff --git a/server/Spells/Traditions/BogBully.lua b/server/Spells/Traditions/BogBully.lua new file mode 100644 index 000000000..7946d19b2 --- /dev/null +++ b/server/Spells/Traditions/BogBully.lua @@ -0,0 +1,12 @@ +--[[ + Script Name : {generic header} + Script Purpose : + Script Author : John Adams + Script Date : 2012.09.08 + Script Notes : temp script to stop world errors +--]] + +function cast(Caster, Target) + + +end diff --git a/server/Spells/Traditions/Brewmaster.lua b/server/Spells/Traditions/Brewmaster.lua new file mode 100644 index 000000000..7946d19b2 --- /dev/null +++ b/server/Spells/Traditions/Brewmaster.lua @@ -0,0 +1,12 @@ +--[[ + Script Name : {generic header} + Script Purpose : + Script Author : John Adams + Script Date : 2012.09.08 + Script Notes : temp script to stop world errors +--]] + +function cast(Caster, Target) + + +end diff --git a/server/Spells/Traditions/BruteStrength.lua b/server/Spells/Traditions/BruteStrength.lua new file mode 100644 index 000000000..7946d19b2 --- /dev/null +++ b/server/Spells/Traditions/BruteStrength.lua @@ -0,0 +1,12 @@ +--[[ + Script Name : {generic header} + Script Purpose : + Script Author : John Adams + Script Date : 2012.09.08 + Script Notes : temp script to stop world errors +--]] + +function cast(Caster, Target) + + +end diff --git a/server/Spells/Traditions/Camo.lua b/server/Spells/Traditions/Camo.lua new file mode 100644 index 000000000..7946d19b2 --- /dev/null +++ b/server/Spells/Traditions/Camo.lua @@ -0,0 +1,12 @@ +--[[ + Script Name : {generic header} + Script Purpose : + Script Author : John Adams + Script Date : 2012.09.08 + Script Notes : temp script to stop world errors +--]] + +function cast(Caster, Target) + + +end diff --git a/server/Spells/Traditions/Camouflage.lua b/server/Spells/Traditions/Camouflage.lua new file mode 100644 index 000000000..7946d19b2 --- /dev/null +++ b/server/Spells/Traditions/Camouflage.lua @@ -0,0 +1,12 @@ +--[[ + Script Name : {generic header} + Script Purpose : + Script Author : John Adams + Script Date : 2012.09.08 + Script Notes : temp script to stop world errors +--]] + +function cast(Caster, Target) + + +end diff --git a/server/Spells/Traditions/CarpentersTouch.lua b/server/Spells/Traditions/CarpentersTouch.lua new file mode 100644 index 000000000..7946d19b2 --- /dev/null +++ b/server/Spells/Traditions/CarpentersTouch.lua @@ -0,0 +1,12 @@ +--[[ + Script Name : {generic header} + Script Purpose : + Script Author : John Adams + Script Date : 2012.09.08 + Script Notes : temp script to stop world errors +--]] + +function cast(Caster, Target) + + +end diff --git a/server/Spells/Traditions/CastingFury.lua b/server/Spells/Traditions/CastingFury.lua new file mode 100644 index 000000000..7946d19b2 --- /dev/null +++ b/server/Spells/Traditions/CastingFury.lua @@ -0,0 +1,12 @@ +--[[ + Script Name : {generic header} + Script Purpose : + Script Author : John Adams + Script Date : 2012.09.08 + Script Notes : temp script to stop world errors +--]] + +function cast(Caster, Target) + + +end diff --git a/server/Spells/Traditions/CazicThulesGift.lua b/server/Spells/Traditions/CazicThulesGift.lua new file mode 100644 index 000000000..7946d19b2 --- /dev/null +++ b/server/Spells/Traditions/CazicThulesGift.lua @@ -0,0 +1,12 @@ +--[[ + Script Name : {generic header} + Script Purpose : + Script Author : John Adams + Script Date : 2012.09.08 + Script Notes : temp script to stop world errors +--]] + +function cast(Caster, Target) + + +end diff --git a/server/Spells/Traditions/ChemicalCalculations.lua b/server/Spells/Traditions/ChemicalCalculations.lua new file mode 100644 index 000000000..7946d19b2 --- /dev/null +++ b/server/Spells/Traditions/ChemicalCalculations.lua @@ -0,0 +1,12 @@ +--[[ + Script Name : {generic header} + Script Purpose : + Script Author : John Adams + Script Date : 2012.09.08 + Script Notes : temp script to stop world errors +--]] + +function cast(Caster, Target) + + +end diff --git a/server/Spells/Traditions/Chemist.lua b/server/Spells/Traditions/Chemist.lua new file mode 100644 index 000000000..7946d19b2 --- /dev/null +++ b/server/Spells/Traditions/Chemist.lua @@ -0,0 +1,12 @@ +--[[ + Script Name : {generic header} + Script Purpose : + Script Author : John Adams + Script Date : 2012.09.08 + Script Notes : temp script to stop world errors +--]] + +function cast(Caster, Target) + + +end diff --git a/server/Spells/Traditions/ClearMind.lua b/server/Spells/Traditions/ClearMind.lua new file mode 100644 index 000000000..7946d19b2 --- /dev/null +++ b/server/Spells/Traditions/ClearMind.lua @@ -0,0 +1,12 @@ +--[[ + Script Name : {generic header} + Script Purpose : + Script Author : John Adams + Script Date : 2012.09.08 + Script Notes : temp script to stop world errors +--]] + +function cast(Caster, Target) + + +end diff --git a/server/Spells/Traditions/ClockworkArmy.lua b/server/Spells/Traditions/ClockworkArmy.lua new file mode 100644 index 000000000..7946d19b2 --- /dev/null +++ b/server/Spells/Traditions/ClockworkArmy.lua @@ -0,0 +1,12 @@ +--[[ + Script Name : {generic header} + Script Purpose : + Script Author : John Adams + Script Date : 2012.09.08 + Script Notes : temp script to stop world errors +--]] + +function cast(Caster, Target) + + +end diff --git a/server/Spells/Traditions/Clothier.lua b/server/Spells/Traditions/Clothier.lua new file mode 100644 index 000000000..7946d19b2 --- /dev/null +++ b/server/Spells/Traditions/Clothier.lua @@ -0,0 +1,12 @@ +--[[ + Script Name : {generic header} + Script Purpose : + Script Author : John Adams + Script Date : 2012.09.08 + Script Notes : temp script to stop world errors +--]] + +function cast(Caster, Target) + + +end diff --git a/server/Spells/Traditions/Combat/Adoration.lua b/server/Spells/Traditions/Combat/Adoration.lua new file mode 100644 index 000000000..8b81190c7 --- /dev/null +++ b/server/Spells/Traditions/Combat/Adoration.lua @@ -0,0 +1,14 @@ +--[[ + Script Name : Spells\Traditions\Combat\Adoration.lua + Script Author : Zcoretri + Script Date : 2013.03.26 + Script Notes : +--]] + +function cast(Caster, Target, Modifier) + +end + +function remove(Caster, Target, Modifier) + +end \ No newline at end of file diff --git a/server/Spells/Traditions/Combat/AidOfTheStouthearted.lua b/server/Spells/Traditions/Combat/AidOfTheStouthearted.lua new file mode 100644 index 000000000..4ad36bf96 --- /dev/null +++ b/server/Spells/Traditions/Combat/AidOfTheStouthearted.lua @@ -0,0 +1,14 @@ +--[[ + Script Name : Spells\Traditions\Combat\AidOfTheStouthearted.lua + Script Author : Zcoretri + Script Date : 2013.03.26 + Script Notes : +--]] + +function cast(Caster, Target, Modifier) + +end + +function remove(Caster, Target, Modifier) + +end \ No newline at end of file diff --git a/server/Spells/Traditions/Combat/AncestralIre.lua b/server/Spells/Traditions/Combat/AncestralIre.lua new file mode 100644 index 000000000..d1e3be2f6 --- /dev/null +++ b/server/Spells/Traditions/Combat/AncestralIre.lua @@ -0,0 +1,14 @@ +--[[ + Script Name : Spells\Traditions\Combat\AnscestralIre.lua + Script Author : Zcoretri + Script Date : 2013.03.26 + Script Notes : Dark Elf - Increases Double Attack Chance 2% +--]] + +function cast(Caster, Target, Modifier) + AddSpellBonus(Target, 641, Modifier) +end + +function remove(Caster, Target, Modifier) + RemoveSpellBonus(Target) +end \ No newline at end of file diff --git a/server/Spells/Traditions/Combat/BlessingTouch.lua b/server/Spells/Traditions/Combat/BlessingTouch.lua new file mode 100644 index 000000000..b2d8ab947 --- /dev/null +++ b/server/Spells/Traditions/Combat/BlessingTouch.lua @@ -0,0 +1,14 @@ +--[[ + Script Name : Spells\Traditions\Combat\BlessingTouch.lua + Script Author : Zcoretri + Script Date : 2013.03.26 + Script Notes : +--]] + +function cast(Caster, Target, Modifier) + +end + +function remove(Caster, Target, Modifier) + +end \ No newline at end of file diff --git a/server/Spells/Traditions/Combat/BlockingExpertise.lua b/server/Spells/Traditions/Combat/BlockingExpertise.lua new file mode 100644 index 000000000..e255362f6 --- /dev/null +++ b/server/Spells/Traditions/Combat/BlockingExpertise.lua @@ -0,0 +1,16 @@ +--[[ + Script Name : Spells\Traditions\Combat\BlockingExpertise.lua + Script Author : Zcoretri + Script Date : 2013.03.26 + Script Notes : Barbarian - Increases Deflection by 2.0 and Shield Effectiveness by 2% +--]] + +function cast(Caster, Target, Deflection, Shield) + AddSkillBonus(Target, 3850377186, Deflection) + --AddSpellBonus(Target,,Shield) +end + +function remove(Caster, Target, Deflection, Shield) + RemoveSkillBonus(Target) + --RemoveSpellBonus(Target) +end \ No newline at end of file diff --git a/server/Spells/Traditions/Combat/Bloodletting.lua b/server/Spells/Traditions/Combat/Bloodletting.lua new file mode 100644 index 000000000..6b0df8347 --- /dev/null +++ b/server/Spells/Traditions/Combat/Bloodletting.lua @@ -0,0 +1,14 @@ +--[[ + Script Name : Spells\Traditions\Combat\Blootletting.lua + Script Author : Zcoretri + Script Date : 2013.03.26 + Script Notes : +--]] + +function cast(Caster, Target, Modifier) + +end + +function remove(Caster, Target, Modifier) + +end \ No newline at end of file diff --git a/server/Spells/Traditions/Combat/Brainy.lua b/server/Spells/Traditions/Combat/Brainy.lua new file mode 100644 index 000000000..137d0bd19 --- /dev/null +++ b/server/Spells/Traditions/Combat/Brainy.lua @@ -0,0 +1,14 @@ +--[[ + Script Name : Spells\Traditions\Combat\Brainy.lua + Script Author : Zcoretri + Script Date : 2013.03.26 + Script Notes : +--]] + +function cast(Caster, Target, Modifier) + +end + +function remove(Caster, Target, Modifier) + +end \ No newline at end of file diff --git a/server/Spells/Traditions/Combat/BravefootTenacity.lua b/server/Spells/Traditions/Combat/BravefootTenacity.lua new file mode 100644 index 000000000..d8aad745f --- /dev/null +++ b/server/Spells/Traditions/Combat/BravefootTenacity.lua @@ -0,0 +1,14 @@ +--[[ + Script Name : Spells\Traditions\Combat\BravefootTenacity.lua + Script Author : Zcoretri + Script Date : 2013.03.26 + Script Notes : +--]] + +function cast(Caster, Target, Modifier) + +end + +function remove(Caster, Target, Modifier) + +end \ No newline at end of file diff --git a/server/Spells/Traditions/Combat/BrellsFocus.lua b/server/Spells/Traditions/Combat/BrellsFocus.lua new file mode 100644 index 000000000..a81fd62fb --- /dev/null +++ b/server/Spells/Traditions/Combat/BrellsFocus.lua @@ -0,0 +1,14 @@ +--[[ + Script Name : Spells\Traditions\Combat\BrellsFocus.lua + Script Author : Zcoretri + Script Date : 2013.03.26 + Script Notes : +--]] + +function cast(Caster, Target, Modifier) + +end + +function remove(Caster, Target, Modifier) + +end \ No newline at end of file diff --git a/server/Spells/Traditions/Combat/CastingFury.lua b/server/Spells/Traditions/Combat/CastingFury.lua new file mode 100644 index 000000000..610a65d46 --- /dev/null +++ b/server/Spells/Traditions/Combat/CastingFury.lua @@ -0,0 +1,14 @@ +--[[ + Script Name : Spells\Traditions\Combat\CastingFury.lua + Script Author : Zcoretri + Script Date : 2013.03.26 + Script Notes : +--]] + +function cast(Caster, Target, Modifier) + +end + +function remove(Caster, Target, Modifier) + +end \ No newline at end of file diff --git a/server/Spells/Traditions/Combat/ClarityDuringBattle.lua b/server/Spells/Traditions/Combat/ClarityDuringBattle.lua new file mode 100644 index 000000000..3fc0fc847 --- /dev/null +++ b/server/Spells/Traditions/Combat/ClarityDuringBattle.lua @@ -0,0 +1,14 @@ +--[[ + Script Name : Spells\Traditions\Combat\ClarityDuringBattle.lua + Script Author : Zcoretri + Script Date : 2013.03.26 + Script Notes : +--]] + +function cast(Caster, Target, Modifier) + +end + +function remove(Caster, Target, Modifier) + +end \ No newline at end of file diff --git a/server/Spells/Traditions/Combat/ClawedStrikes.lua b/server/Spells/Traditions/Combat/ClawedStrikes.lua new file mode 100644 index 000000000..8f2acf133 --- /dev/null +++ b/server/Spells/Traditions/Combat/ClawedStrikes.lua @@ -0,0 +1,14 @@ +--[[ + Script Name : Spells\Traditions\Combat\ClawedStrikes.lua + Script Author : Zcoretri + Script Date : 2013.03.26 + Script Notes : +--]] + +function cast(Caster, Target, Modifier) + +end + +function remove(Caster, Target, Modifier) + +end \ No newline at end of file diff --git a/server/Spells/Traditions/Combat/CombatHealing.lua b/server/Spells/Traditions/Combat/CombatHealing.lua new file mode 100644 index 000000000..0b6d1ff11 --- /dev/null +++ b/server/Spells/Traditions/Combat/CombatHealing.lua @@ -0,0 +1,14 @@ +--[[ + Script Name : Spells\Traditions\Combat\CombatHealing.lua + Script Author : Zcoretri + Script Date : 2013.03.26 + Script Notes : +--]] + +function cast(Caster, Target, Modifier) + +end + +function remove(Caster, Target, Modifier) + +end \ No newline at end of file diff --git a/server/Spells/Traditions/Combat/CriticalDeflection.lua b/server/Spells/Traditions/Combat/CriticalDeflection.lua new file mode 100644 index 000000000..6c2116754 --- /dev/null +++ b/server/Spells/Traditions/Combat/CriticalDeflection.lua @@ -0,0 +1,14 @@ +--[[ + Script Name : Spells\Traditions\Combat\CriticalDeflection.lua + Script Author : Zcoretri + Script Date : 2013.03.26 + Script Notes : +--]] + +function cast(Caster, Target, Modifier) + +end + +function remove(Caster, Target, Modifier) + +end \ No newline at end of file diff --git a/server/Spells/Traditions/Combat/CriticalShielding.lua b/server/Spells/Traditions/Combat/CriticalShielding.lua new file mode 100644 index 000000000..189edfc2a --- /dev/null +++ b/server/Spells/Traditions/Combat/CriticalShielding.lua @@ -0,0 +1,14 @@ +--[[ + Script Name : Spells\Traditions\Combat\CriticalShielding.lua + Script Author : Zcoretri + Script Date : 2013.03.26 + Script Notes : +--]] + +function cast(Caster, Target, Modifier) + +end + +function remove(Caster, Target, Modifier) + +end \ No newline at end of file diff --git a/server/Spells/Traditions/Combat/DarkCelerity.lua b/server/Spells/Traditions/Combat/DarkCelerity.lua new file mode 100644 index 000000000..92cb19ca6 --- /dev/null +++ b/server/Spells/Traditions/Combat/DarkCelerity.lua @@ -0,0 +1,14 @@ +--[[ + Script Name : Spells\Traditions\Combat\DarkCelerity.lua + Script Author : Zcoretri + Script Date : 2013.03.26 + Script Notes : Dark Elf - Improves the casting speed of hostile spells by 2% +--]] + +function cast(Caster, Target, Modifier) + +end + +function remove(Caster, Target, Modifier) + +end \ No newline at end of file diff --git a/server/Spells/Traditions/Combat/DefensiveMight.lua b/server/Spells/Traditions/Combat/DefensiveMight.lua new file mode 100644 index 000000000..6c5515cff --- /dev/null +++ b/server/Spells/Traditions/Combat/DefensiveMight.lua @@ -0,0 +1,14 @@ +--[[ + Script Name : Spells\Traditions\Combat\DefensiveMight.lua + Script Author : Zcoretri + Script Date : 2013.03.26 + Script Notes : +--]] + +function cast(Caster, Target, Modifier) + +end + +function remove(Caster, Target, Modifier) + +end \ No newline at end of file diff --git a/server/Spells/Traditions/Combat/DemonicFocus.lua b/server/Spells/Traditions/Combat/DemonicFocus.lua new file mode 100644 index 000000000..96b2d89a7 --- /dev/null +++ b/server/Spells/Traditions/Combat/DemonicFocus.lua @@ -0,0 +1,14 @@ +--[[ + Script Name : Spells\Traditions\Combat\DemonicFocus.lua + Script Author : Zcoretri + Script Date : 2013.03.26 + Script Notes : +--]] + +function cast(Caster, Target, Modifier) + +end + +function remove(Caster, Target, Modifier) + +end \ No newline at end of file diff --git a/server/Spells/Traditions/Combat/DevotionToTheArts.lua b/server/Spells/Traditions/Combat/DevotionToTheArts.lua new file mode 100644 index 000000000..71f1e0152 --- /dev/null +++ b/server/Spells/Traditions/Combat/DevotionToTheArts.lua @@ -0,0 +1,14 @@ +--[[ + Script Name : Spells\Traditions\Combat\DevotionToTheArts.lua + Script Author : Zcoretri + Script Date : 2013.03.26 + Script Notes : +--]] + +function cast(Caster, Target, Modifier) + +end + +function remove(Caster, Target, Modifier) + +end \ No newline at end of file diff --git a/server/Spells/Traditions/Combat/DivineCasting.lua b/server/Spells/Traditions/Combat/DivineCasting.lua new file mode 100644 index 000000000..e686ec888 --- /dev/null +++ b/server/Spells/Traditions/Combat/DivineCasting.lua @@ -0,0 +1,14 @@ +--[[ + Script Name : Spells\Traditions\Combat\DivineCasting.lua + Script Author : Zcoretri + Script Date : 2013.03.26 + Script Notes : Barbarian - Improves the casting speed of beneficial spells by 2% +--]] + +function cast(Caster, Target, Modifier) + +end + +function remove(Caster, Target, Modifier) + +end \ No newline at end of file diff --git a/server/Spells/Traditions/Combat/DleresFightingStance.lua b/server/Spells/Traditions/Combat/DleresFightingStance.lua new file mode 100644 index 000000000..77ffaa2ef --- /dev/null +++ b/server/Spells/Traditions/Combat/DleresFightingStance.lua @@ -0,0 +1,14 @@ +--[[ + Script Name : Spells\Traditions\Combat\DleresFightingStance.lua + Script Author : Zcoretri + Script Date : 2013.03.26 + Script Notes : +--]] + +function cast(Caster, Target, Modifier) + +end + +function remove(Caster, Target, Modifier) + +end \ No newline at end of file diff --git a/server/Spells/Traditions/Combat/DodgingBlows.lua b/server/Spells/Traditions/Combat/DodgingBlows.lua new file mode 100644 index 000000000..819833c66 --- /dev/null +++ b/server/Spells/Traditions/Combat/DodgingBlows.lua @@ -0,0 +1,14 @@ +--[[ + Script Name : Spells\Traditions\Combat\DodgingBlows.lua + Script Author : Zcoretri + Script Date : 2013.03.26 + Script Notes : +--]] + +function cast(Caster, Target, Modifier) + +end + +function remove(Caster, Target, Modifier) + +end \ No newline at end of file diff --git a/server/Spells/Traditions/Combat/FaeQuickThinking.lua b/server/Spells/Traditions/Combat/FaeQuickThinking.lua new file mode 100644 index 000000000..3f1cec534 --- /dev/null +++ b/server/Spells/Traditions/Combat/FaeQuickThinking.lua @@ -0,0 +1,19 @@ +--[[ + Script Name : Spells\Tradidtions\FaeQuickThinking.lua + Script Author : Zcoretri + Script Date : 2012.07.31 + Script Notes : Improves the casting speed of beneficial spells by 2%. +--]] + +function cast(Caster, Target, Defense, SkillAmt, Stats) + --AddSpellBonus(Target, 0, Stats) -- STR needs to fixed to allow 0 +end + +function tick(Caster, Target, Type, Min, Max) + +end + +function remove(Caster, Target, Type, Min, Max) + --RemoveSkillBonus(Target) + --RemoveSpellBonus(Target) +end \ No newline at end of file diff --git a/server/Spells/Traditions/Combat/FocusOfTunare.lua b/server/Spells/Traditions/Combat/FocusOfTunare.lua new file mode 100644 index 000000000..ae69499e6 --- /dev/null +++ b/server/Spells/Traditions/Combat/FocusOfTunare.lua @@ -0,0 +1,14 @@ +--[[ + Script Name : Spells\Traditions\Combat\FocusOfTunare.lua + Script Author : Zcoretri + Script Date : 2013.03.26 + Script Notes : +--]] + +function cast(Caster, Target, Modifier) + +end + +function remove(Caster, Target, Modifier) + +end \ No newline at end of file diff --git a/server/Spells/Traditions/Combat/FocusedProwess.lua b/server/Spells/Traditions/Combat/FocusedProwess.lua new file mode 100644 index 000000000..913d638b1 --- /dev/null +++ b/server/Spells/Traditions/Combat/FocusedProwess.lua @@ -0,0 +1,14 @@ +--[[ + Script Name : Spells\Traditions\Combat\FocusedProwess.lua + Script Author : Zcoretri + Script Date : 2013.03.26 + Script Notes : +--]] + +function cast(Caster, Target, Modifier) + +end + +function remove(Caster, Target, Modifier) + +end \ No newline at end of file diff --git a/server/Spells/Traditions/Combat/FormidableTraining.lua b/server/Spells/Traditions/Combat/FormidableTraining.lua new file mode 100644 index 000000000..7fbc906ab --- /dev/null +++ b/server/Spells/Traditions/Combat/FormidableTraining.lua @@ -0,0 +1,14 @@ +--[[ + Script Name : Spells\Traditions\Combat\FormidableTraining.lua + Script Author : Zcoretri + Script Date : 2013.03.26 + Script Notes : +--]] + +function cast(Caster, Target, Modifier) + +end + +function remove(Caster, Target, Modifier) + +end \ No newline at end of file diff --git a/server/Spells/Traditions/Combat/GoodBlocking.lua b/server/Spells/Traditions/Combat/GoodBlocking.lua new file mode 100644 index 000000000..ec8c72f4f --- /dev/null +++ b/server/Spells/Traditions/Combat/GoodBlocking.lua @@ -0,0 +1,14 @@ +--[[ + Script Name : Spells\Traditions\Combat\GoodBlocking.lua + Script Author : Zcoretri + Script Date : 2013.03.26 + Script Notes : +--]] + +function cast(Caster, Target, Modifier) + +end + +function remove(Caster, Target, Modifier) + +end \ No newline at end of file diff --git a/server/Spells/Traditions/Combat/GraceOfFear.lua b/server/Spells/Traditions/Combat/GraceOfFear.lua new file mode 100644 index 000000000..36dac47bd --- /dev/null +++ b/server/Spells/Traditions/Combat/GraceOfFear.lua @@ -0,0 +1,14 @@ +--[[ + Script Name : Spells\Traditions\Combat\GraceOfFear.lua + Script Author : Zcoretri + Script Date : 2013.03.26 + Script Notes : +--]] + +function cast(Caster, Target, Modifier) + +end + +function remove(Caster, Target, Modifier) + +end \ No newline at end of file diff --git a/server/Spells/Traditions/Combat/GuidanceOfMarr.lua b/server/Spells/Traditions/Combat/GuidanceOfMarr.lua new file mode 100644 index 000000000..751c8263f --- /dev/null +++ b/server/Spells/Traditions/Combat/GuidanceOfMarr.lua @@ -0,0 +1,14 @@ +--[[ + Script Name : Spells\Traditions\Combat\GuidanceOfMarr.lua + Script Author : Zcoretri + Script Date : 2013.03.26 + Script Notes : +--]] + +function cast(Caster, Target, Modifier) + +end + +function remove(Caster, Target, Modifier) + +end \ No newline at end of file diff --git a/server/Spells/Traditions/Combat/HastyDecisions.lua b/server/Spells/Traditions/Combat/HastyDecisions.lua new file mode 100644 index 000000000..96b7c4313 --- /dev/null +++ b/server/Spells/Traditions/Combat/HastyDecisions.lua @@ -0,0 +1,14 @@ +--[[ + Script Name : Spells\Traditions\Combat\HastyDecisions.lua + Script Author : Zcoretri + Script Date : 2013.03.26 + Script Notes : +--]] + +function cast(Caster, Target, Modifier) + +end + +function remove(Caster, Target, Modifier) + +end \ No newline at end of file diff --git a/server/Spells/Traditions/Combat/HealingGrace.lua b/server/Spells/Traditions/Combat/HealingGrace.lua new file mode 100644 index 000000000..940f6c269 --- /dev/null +++ b/server/Spells/Traditions/Combat/HealingGrace.lua @@ -0,0 +1,14 @@ +--[[ + Script Name : Spells\Traditions\Combat\HealingGrace.lua + Script Author : Zcoretri + Script Date : 2013.03.26 + Script Notes : +--]] + +function cast(Caster, Target, Modifier) + +end + +function remove(Caster, Target, Modifier) + +end \ No newline at end of file diff --git a/server/Spells/Traditions/Combat/HealingTouch.lua b/server/Spells/Traditions/Combat/HealingTouch.lua new file mode 100644 index 000000000..564d76670 --- /dev/null +++ b/server/Spells/Traditions/Combat/HealingTouch.lua @@ -0,0 +1,14 @@ +--[[ + Script Name : Spells\Traditions\Combat\HealingTouch.lua + Script Author : Zcoretri + Script Date : 2013.03.26 + Script Notes : Barbarian - Increases Ministration by 5.0 +--]] + +function cast(Caster, Target, SkillAmt) + AddSkillBonus(Target, 366253016, SkillAmt) +end + +function remove(Caster, Target, SkillAmt) + RemoveSkillBonus(Target) +end \ No newline at end of file diff --git a/server/Spells/Traditions/Combat/HendisFortitude.lua b/server/Spells/Traditions/Combat/HendisFortitude.lua new file mode 100644 index 000000000..1290ea090 --- /dev/null +++ b/server/Spells/Traditions/Combat/HendisFortitude.lua @@ -0,0 +1,14 @@ +--[[ + Script Name : Spells\Traditions\Combat\HendisFortitude.lua + Script Author : Zcoretri + Script Date : 2013.03.26 + Script Notes : +--]] + +function cast(Caster, Target, Modifier) + +end + +function remove(Caster, Target, Modifier) + +end \ No newline at end of file diff --git a/server/Spells/Traditions/Combat/HighPriestsGuidance.lua b/server/Spells/Traditions/Combat/HighPriestsGuidance.lua new file mode 100644 index 000000000..83b7c4413 --- /dev/null +++ b/server/Spells/Traditions/Combat/HighPriestsGuidance.lua @@ -0,0 +1,14 @@ +--[[ + Script Name : Spells\Traditions\Combat\HighPriestsGuidance.lua + Script Author : Zcoretri + Script Date : 2013.03.26 + Script Notes : +--]] + +function cast(Caster, Target, Modifier) + +end + +function remove(Caster, Target, Modifier) + +end \ No newline at end of file diff --git a/server/Spells/Traditions/Combat/HoldStrong.lua b/server/Spells/Traditions/Combat/HoldStrong.lua new file mode 100644 index 000000000..765706567 --- /dev/null +++ b/server/Spells/Traditions/Combat/HoldStrong.lua @@ -0,0 +1,14 @@ +--[[ + Script Name : Spells\Traditions\Combat\HoldStrong.lua + Script Author : Zcoretri + Script Date : 2013.03.26 + Script Notes : +--]] + +function cast(Caster, Target, Modifier) + +end + +function remove(Caster, Target, Modifier) + +end \ No newline at end of file diff --git a/server/Spells/Traditions/Combat/MarshalsSkill.lua b/server/Spells/Traditions/Combat/MarshalsSkill.lua new file mode 100644 index 000000000..ac65f361d --- /dev/null +++ b/server/Spells/Traditions/Combat/MarshalsSkill.lua @@ -0,0 +1,14 @@ +--[[ + Script Name : Spells\Traditions\Combat\MarshalsSkill.lua + Script Author : Zcoretri + Script Date : 2013.03.26 + Script Notes : +--]] + +function cast(Caster, Target, Modifier) + +end + +function remove(Caster, Target, Modifier) + +end \ No newline at end of file diff --git a/server/Spells/Traditions/Combat/MasterfulSorcery.lua b/server/Spells/Traditions/Combat/MasterfulSorcery.lua new file mode 100644 index 000000000..100b3dcd3 --- /dev/null +++ b/server/Spells/Traditions/Combat/MasterfulSorcery.lua @@ -0,0 +1,15 @@ +--[[ + Script Name : Spells\Traditions\Combat\MasterfulSorcery.lua + Script Author : Zcoretri + Script Date : 2013.03.26 + Script Notes : Dark Elf - Increases Disruption and Subjugation by 5.0 +--]] + +function cast(Caster, Target, SkillAmt) + AddSkillBonus(Target, 613995491, SkillAmt) -- Disruption + AddSkillBonus(Target, 882983852, SkillAmt) -- Subjugation +end + +function remove(Caster, Target, SkillAmt) + RemoveSkillBonus(Target) +end \ No newline at end of file diff --git a/server/Spells/Traditions/Combat/MechanizedPierces.lua b/server/Spells/Traditions/Combat/MechanizedPierces.lua new file mode 100644 index 000000000..b92b7e992 --- /dev/null +++ b/server/Spells/Traditions/Combat/MechanizedPierces.lua @@ -0,0 +1,14 @@ +--[[ + Script Name : Spells\Traditions\Combat\MechanizedPierces.lua + Script Author : Zcoretri + Script Date : 2013.03.26 + Script Notes : +--]] + +function cast(Caster, Target, Modifier) + +end + +function remove(Caster, Target, Modifier) + +end \ No newline at end of file diff --git a/server/Spells/Traditions/Combat/MemoriesOfGuk.lua b/server/Spells/Traditions/Combat/MemoriesOfGuk.lua new file mode 100644 index 000000000..91e3418bd --- /dev/null +++ b/server/Spells/Traditions/Combat/MemoriesOfGuk.lua @@ -0,0 +1,14 @@ +--[[ + Script Name : Spells\Traditions\Combat\MemoriesOfGuk.lua + Script Author : Zcoretri + Script Date : 2013.03.26 + Script Notes : +--]] + +function cast(Caster, Target, Modifier) + +end + +function remove(Caster, Target, Modifier) + +end \ No newline at end of file diff --git a/server/Spells/Traditions/Combat/MentalDomination.lua b/server/Spells/Traditions/Combat/MentalDomination.lua new file mode 100644 index 000000000..f156e689f --- /dev/null +++ b/server/Spells/Traditions/Combat/MentalDomination.lua @@ -0,0 +1,14 @@ +--[[ + Script Name : Spells\Traditions\Combat\MentalDomination.lua + Script Author : Zcoretri + Script Date : 2013.03.26 + Script Notes : +--]] + +function cast(Caster, Target, Modifier) + +end + +function remove(Caster, Target, Modifier) + +end \ No newline at end of file diff --git a/server/Spells/Traditions/Combat/Merciless.lua b/server/Spells/Traditions/Combat/Merciless.lua new file mode 100644 index 000000000..a957f5e8f --- /dev/null +++ b/server/Spells/Traditions/Combat/Merciless.lua @@ -0,0 +1,14 @@ +--[[ + Script Name : Spells\Traditions\Combat\Merciless.lua + Script Author : Zcoretri + Script Date : 2013.03.26 + Script Notes : +--]] + +function cast(Caster, Target, Modifier) + +end + +function remove(Caster, Target, Modifier) + +end \ No newline at end of file diff --git a/server/Spells/Traditions/Combat/MightOfTheLeatherfoot.lua b/server/Spells/Traditions/Combat/MightOfTheLeatherfoot.lua new file mode 100644 index 000000000..fe5e5c5b6 --- /dev/null +++ b/server/Spells/Traditions/Combat/MightOfTheLeatherfoot.lua @@ -0,0 +1,14 @@ +--[[ + Script Name : Spells\Traditions\Combat\MightOfTheLeatherfoot.lua + Script Author : Zcoretri + Script Date : 2013.03.26 + Script Notes : +--]] + +function cast(Caster, Target, Modifier) + +end + +function remove(Caster, Target, Modifier) + +end \ No newline at end of file diff --git a/server/Spells/Traditions/Combat/MindOverMatter.lua b/server/Spells/Traditions/Combat/MindOverMatter.lua new file mode 100644 index 000000000..6b293b9e8 --- /dev/null +++ b/server/Spells/Traditions/Combat/MindOverMatter.lua @@ -0,0 +1,14 @@ +--[[ + Script Name : Spells\Traditions\Combat\MindOverMatter.lua + Script Author : Zcoretri + Script Date : 2013.03.26 + Script Notes : +--]] + +function cast(Caster, Target, Modifier) + +end + +function remove(Caster, Target, Modifier) + +end \ No newline at end of file diff --git a/server/Spells/Traditions/Combat/MurrarSharsGuidance.lua b/server/Spells/Traditions/Combat/MurrarSharsGuidance.lua new file mode 100644 index 000000000..9a5156711 --- /dev/null +++ b/server/Spells/Traditions/Combat/MurrarSharsGuidance.lua @@ -0,0 +1,14 @@ +--[[ + Script Name : Spells\Traditions\Combat\MurrarSharsGuidance.lua + Script Author : Zcoretri + Script Date : 2013.03.26 + Script Notes : +--]] + +function cast(Caster, Target, Modifier) + +end + +function remove(Caster, Target, Modifier) + +end \ No newline at end of file diff --git a/server/Spells/Traditions/Combat/NimblePaws.lua b/server/Spells/Traditions/Combat/NimblePaws.lua new file mode 100644 index 000000000..dacef9068 --- /dev/null +++ b/server/Spells/Traditions/Combat/NimblePaws.lua @@ -0,0 +1,14 @@ +--[[ + Script Name : Spells\Traditions\Combat\NimblePaws.lua + Script Author : Zcoretri + Script Date : 2013.03.26 + Script Notes : +--]] + +function cast(Caster, Target, Modifier) + +end + +function remove(Caster, Target, Modifier) + +end \ No newline at end of file diff --git a/server/Spells/Traditions/Combat/NimbleStriking.lua b/server/Spells/Traditions/Combat/NimbleStriking.lua new file mode 100644 index 000000000..30ed5010e --- /dev/null +++ b/server/Spells/Traditions/Combat/NimbleStriking.lua @@ -0,0 +1,14 @@ +--[[ + Script Name : Spells\Traditions\Combat\NimbleStriking.lua + Script Author : Zcoretri + Script Date : 2013.03.26 + Script Notes : +--]] + +function cast(Caster, Target, Modifier) + +end + +function remove(Caster, Target, Modifier) + +end \ No newline at end of file diff --git a/server/Spells/Traditions/Combat/NobilityOfFaith.lua b/server/Spells/Traditions/Combat/NobilityOfFaith.lua new file mode 100644 index 000000000..888bffb21 --- /dev/null +++ b/server/Spells/Traditions/Combat/NobilityOfFaith.lua @@ -0,0 +1,14 @@ +--[[ + Script Name : Spells\Traditions\Combat\NobilityOfFaith.lua + Script Author : Zcoretri + Script Date : 2013.03.26 + Script Notes : +--]] + +function cast(Caster, Target, Modifier) + +end + +function remove(Caster, Target, Modifier) + +end \ No newline at end of file diff --git a/server/Spells/Traditions/Combat/OffensivelySkilled.lua b/server/Spells/Traditions/Combat/OffensivelySkilled.lua new file mode 100644 index 000000000..94b6d7d6d --- /dev/null +++ b/server/Spells/Traditions/Combat/OffensivelySkilled.lua @@ -0,0 +1,14 @@ +--[[ + Script Name : Spells\Traditions\Combat\OffensivelySkilled.lua + Script Author : Zcoretri + Script Date : 2013.03.26 + Script Notes : +--]] + +function cast(Caster, Target, Modifier) + +end + +function remove(Caster, Target, Modifier) + +end \ No newline at end of file diff --git a/server/Spells/Traditions/Combat/PaladinsShieldTraining.lua b/server/Spells/Traditions/Combat/PaladinsShieldTraining.lua new file mode 100644 index 000000000..ce65cfdd1 --- /dev/null +++ b/server/Spells/Traditions/Combat/PaladinsShieldTraining.lua @@ -0,0 +1,14 @@ +--[[ + Script Name : Spells\Traditions\Combat\PaladinsShieldTraining.lua + Script Author : Zcoretri + Script Date : 2013.03.26 + Script Notes : +--]] + +function cast(Caster, Target, Modifier) + +end + +function remove(Caster, Target, Modifier) + +end \ No newline at end of file diff --git a/server/Spells/Traditions/Combat/PiercingArrows.lua b/server/Spells/Traditions/Combat/PiercingArrows.lua new file mode 100644 index 000000000..540c6eec7 --- /dev/null +++ b/server/Spells/Traditions/Combat/PiercingArrows.lua @@ -0,0 +1,14 @@ +--[[ + Script Name : Spells\Traditions\Combat\PiercingArrows.lua + Script Author : Zcoretri + Script Date : 2013.03.26 + Script Notes : +--]] + +function cast(Caster, Target, Modifier) + +end + +function remove(Caster, Target, Modifier) + +end \ No newline at end of file diff --git a/server/Spells/Traditions/Combat/ProficientSwipe.lua b/server/Spells/Traditions/Combat/ProficientSwipe.lua new file mode 100644 index 000000000..1ecc63a76 --- /dev/null +++ b/server/Spells/Traditions/Combat/ProficientSwipe.lua @@ -0,0 +1,14 @@ +--[[ + Script Name : Spells\Traditions\Combat\ProficientSwipe.lua + Script Author : Zcoretri + Script Date : 2013.03.26 + Script Notes : +--]] + +function cast(Caster, Target, Modifier) + +end + +function remove(Caster, Target, Modifier) + +end \ No newline at end of file diff --git a/server/Spells/Traditions/Combat/PunctureWounds.lua b/server/Spells/Traditions/Combat/PunctureWounds.lua new file mode 100644 index 000000000..c8caee2ae --- /dev/null +++ b/server/Spells/Traditions/Combat/PunctureWounds.lua @@ -0,0 +1,14 @@ +--[[ + Script Name : Spells\Traditions\Combat\PunctureWounds.lua + Script Author : Zcoretri + Script Date : 2013.03.26 + Script Notes : +--]] + +function cast(Caster, Target, Modifier) + +end + +function remove(Caster, Target, Modifier) + +end \ No newline at end of file diff --git a/server/Spells/Traditions/Combat/QuickBanishing.lua b/server/Spells/Traditions/Combat/QuickBanishing.lua new file mode 100644 index 000000000..3670c2412 --- /dev/null +++ b/server/Spells/Traditions/Combat/QuickBanishing.lua @@ -0,0 +1,14 @@ +--[[ + Script Name : Spells\Traditions\Combat\QuickBanishing.lua + Script Author : Zcoretri + Script Date : 2013.03.26 + Script Notes : +--]] + +function cast(Caster, Target, Modifier) + +end + +function remove(Caster, Target, Modifier) + +end \ No newline at end of file diff --git a/server/Spells/Traditions/Combat/QuickThinking.lua b/server/Spells/Traditions/Combat/QuickThinking.lua new file mode 100644 index 000000000..cfa2b8eb9 --- /dev/null +++ b/server/Spells/Traditions/Combat/QuickThinking.lua @@ -0,0 +1,14 @@ +--[[ + Script Name : Spells\Traditions\Combat\QuickThinking.lua + Script Author : Zcoretri + Script Date : 2013.03.26 + Script Notes : +--]] + +function cast(Caster, Target, Modifier) + +end + +function remove(Caster, Target, Modifier) + +end \ No newline at end of file diff --git a/server/Spells/Traditions/Combat/QuietStorm.lua b/server/Spells/Traditions/Combat/QuietStorm.lua new file mode 100644 index 000000000..46ec2e498 --- /dev/null +++ b/server/Spells/Traditions/Combat/QuietStorm.lua @@ -0,0 +1,14 @@ +--[[ + Script Name : Spells\Traditions\Combat\QuietStorm.lua + Script Author : Zcoretri + Script Date : 2013.03.26 + Script Notes : +--]] + +function cast(Caster, Target, Modifier) + +end + +function remove(Caster, Target, Modifier) + +end \ No newline at end of file diff --git a/server/Spells/Traditions/Combat/RallosianArmyTraining.lua b/server/Spells/Traditions/Combat/RallosianArmyTraining.lua new file mode 100644 index 000000000..194629de5 --- /dev/null +++ b/server/Spells/Traditions/Combat/RallosianArmyTraining.lua @@ -0,0 +1,14 @@ +--[[ + Script Name : Spells\Traditions\Combat\RallosianArmyTraining.lua + Script Author : Zcoretri + Script Date : 2013.03.26 + Script Notes : +--]] + +function cast(Caster, Target, Modifier) + +end + +function remove(Caster, Target, Modifier) + +end \ No newline at end of file diff --git a/server/Spells/Traditions/Combat/RallosianReflexes.lua b/server/Spells/Traditions/Combat/RallosianReflexes.lua new file mode 100644 index 000000000..898209027 --- /dev/null +++ b/server/Spells/Traditions/Combat/RallosianReflexes.lua @@ -0,0 +1,14 @@ +--[[ + Script Name : Spells\Traditions\Combat\RallosianReflexes.lua + Script Author : Zcoretri + Script Date : 2013.03.26 + Script Notes : +--]] + +function cast(Caster, Target, Modifier) + +end + +function remove(Caster, Target, Modifier) + +end \ No newline at end of file diff --git a/server/Spells/Traditions/Combat/RatongaReflexes.lua b/server/Spells/Traditions/Combat/RatongaReflexes.lua new file mode 100644 index 000000000..88a9d6c56 --- /dev/null +++ b/server/Spells/Traditions/Combat/RatongaReflexes.lua @@ -0,0 +1,14 @@ +--[[ + Script Name : Spells\Traditions\Combat\RatongaRelexes.lua + Script Author : Zcoretri + Script Date : 2013.03.26 + Script Notes : +--]] + +function cast(Caster, Target, Modifier) + +end + +function remove(Caster, Target, Modifier) + +end \ No newline at end of file diff --git a/server/Spells/Traditions/Combat/RootedMind.lua b/server/Spells/Traditions/Combat/RootedMind.lua new file mode 100644 index 000000000..30c25e9b0 --- /dev/null +++ b/server/Spells/Traditions/Combat/RootedMind.lua @@ -0,0 +1,14 @@ +--[[ + Script Name : Spells\Traditions\Combat\RootedMind.lua + Script Author : Zcoretri + Script Date : 2013.03.26 + Script Notes : +--]] + +function cast(Caster, Target, Modifier) + +end + +function remove(Caster, Target, Modifier) + +end \ No newline at end of file diff --git a/server/Spells/Traditions/Combat/SharpWitted.lua b/server/Spells/Traditions/Combat/SharpWitted.lua new file mode 100644 index 000000000..2b46086f2 --- /dev/null +++ b/server/Spells/Traditions/Combat/SharpWitted.lua @@ -0,0 +1,15 @@ +--[[ + Script Name : Spells\Traditions\Combat\SharpWitted.lua + Script Author : Zcoretri + Script Date : 2013.03.26 + Script Notes : Dark Elf - Increases Piercing and Ranged by 5.0 +--]] + +function cast(Caster, Target, SkillAmt) + AddSkillBonus(Target, 3048574950, SkillAmt) -- Piercing + AddSkillBonus(Target, 1756482397, SkillAmt) -- Ranged +end + +function remove(Caster, Target, SkillAmt) + RemoveSkillBonus(Target) +end \ No newline at end of file diff --git a/server/Spells/Traditions/Combat/SkilledDefender.lua b/server/Spells/Traditions/Combat/SkilledDefender.lua new file mode 100644 index 000000000..7ab6b6b7a --- /dev/null +++ b/server/Spells/Traditions/Combat/SkilledDefender.lua @@ -0,0 +1,18 @@ +--[[ + Script Name : Spells\Traditions\Combat\SkilledDefender.lua + Script Author : Zcoretri + Script Date : 2013.03.26 + Script Notes : Barbarian - Increases Parry, Defense, and Deflection by 5.0 +--]] + +function cast(Caster, Target, Parry, Defense, Deflection) + AddSkillBonus(Target, 540022425, Parry) + AddSkillBonus(Target, 609880714, Defense) + AddSkillBonus(Target, 3850377186, Deflection) +end + +function remove(Caster, Target, Parry, Defense, Deflection) + RemoveSkillBonus(Target) + RemoveSkillBonus(Target) + RemoveSkillBonus(Target) +end \ No newline at end of file diff --git a/server/Spells/Traditions/Combat/SoldiersOfTunaresAlacrity.lua b/server/Spells/Traditions/Combat/SoldiersOfTunaresAlacrity.lua new file mode 100644 index 000000000..37a8c3657 --- /dev/null +++ b/server/Spells/Traditions/Combat/SoldiersOfTunaresAlacrity.lua @@ -0,0 +1,14 @@ +--[[ + Script Name : Spells\Traditions\Combat\SoldiersOfTunareAlacrity.lua + Script Author : Zcoretri + Script Date : 2013.03.26 + Script Notes : +--]] + +function cast(Caster, Target, Modifier) + +end + +function remove(Caster, Target, Modifier) + +end \ No newline at end of file diff --git a/server/Spells/Traditions/Combat/SpeedyPaws.lua b/server/Spells/Traditions/Combat/SpeedyPaws.lua new file mode 100644 index 000000000..b70d11984 --- /dev/null +++ b/server/Spells/Traditions/Combat/SpeedyPaws.lua @@ -0,0 +1,14 @@ +--[[ + Script Name : Spells\Traditions\Combat\SpeedyPaws.lua + Script Author : Zcoretri + Script Date : 2013.03.26 + Script Notes : +--]] + +function cast(Caster, Target, Modifier) + +end + +function remove(Caster, Target, Modifier) + +end \ No newline at end of file diff --git a/server/Spells/Traditions/Combat/SpikedShoes.lua b/server/Spells/Traditions/Combat/SpikedShoes.lua new file mode 100644 index 000000000..d38a39c61 --- /dev/null +++ b/server/Spells/Traditions/Combat/SpikedShoes.lua @@ -0,0 +1,14 @@ +--[[ + Script Name : Spells\Traditions\Combat\SpikedShoes.lua + Script Author : Zcoretri + Script Date : 2013.03.26 + Script Notes : +--]] + +function cast(Caster, Target, Modifier) + +end + +function remove(Caster, Target, Modifier) + +end \ No newline at end of file diff --git a/server/Spells/Traditions/Combat/Stabby.lua b/server/Spells/Traditions/Combat/Stabby.lua new file mode 100644 index 000000000..398c3a3a5 --- /dev/null +++ b/server/Spells/Traditions/Combat/Stabby.lua @@ -0,0 +1,14 @@ +--[[ + Script Name : Spells\Traditions\Combat\Stabby.lua + Script Author : Zcoretri + Script Date : 2013.03.26 + Script Notes : +--]] + +function cast(Caster, Target, Modifier) + +end + +function remove(Caster, Target, Modifier) + +end \ No newline at end of file diff --git a/server/Spells/Traditions/Combat/SteadfastDefender.lua b/server/Spells/Traditions/Combat/SteadfastDefender.lua new file mode 100644 index 000000000..2854627ce --- /dev/null +++ b/server/Spells/Traditions/Combat/SteadfastDefender.lua @@ -0,0 +1,14 @@ +--[[ + Script Name : Spells\Traditions\Combat\SteadfastDefender.lua + Script Author : Zcoretri + Script Date : 2013.03.26 + Script Notes : +--]] + +function cast(Caster, Target, Modifier) + +end + +function remove(Caster, Target, Modifier) + +end \ No newline at end of file diff --git a/server/Spells/Traditions/Combat/StoutDefense.lua b/server/Spells/Traditions/Combat/StoutDefense.lua new file mode 100644 index 000000000..dfceb665c --- /dev/null +++ b/server/Spells/Traditions/Combat/StoutDefense.lua @@ -0,0 +1,14 @@ +--[[ + Script Name : Spells\Traditions\Combat\StoutDefense.lua + Script Author : Zcoretri + Script Date : 2013.03.26 + Script Notes : +--]] + +function cast(Caster, Target, Modifier) + +end + +function remove(Caster, Target, Modifier) + +end \ No newline at end of file diff --git a/server/Spells/Traditions/Combat/Stubbornness.lua b/server/Spells/Traditions/Combat/Stubbornness.lua new file mode 100644 index 000000000..7abe10f20 --- /dev/null +++ b/server/Spells/Traditions/Combat/Stubbornness.lua @@ -0,0 +1,14 @@ +--[[ + Script Name : Spells\Traditions\Combat\Stubbornness.lua + Script Author : Zcoretri + Script Date : 2013.03.26 + Script Notes : +--]] + +function cast(Caster, Target, Modifier) + +end + +function remove(Caster, Target, Modifier) + +end \ No newline at end of file diff --git a/server/Spells/Traditions/Combat/SupernaturalSpeed.lua b/server/Spells/Traditions/Combat/SupernaturalSpeed.lua new file mode 100644 index 000000000..195cc22e9 --- /dev/null +++ b/server/Spells/Traditions/Combat/SupernaturalSpeed.lua @@ -0,0 +1,14 @@ +--[[ + Script Name : Spells\Traditions\Combat\SupernaturalSpeed.lua + Script Author : Zcoretri + Script Date : 2013.03.26 + Script Notes : +--]] + +function cast(Caster, Target, Modifier) + +end + +function remove(Caster, Target, Modifier) + +end \ No newline at end of file diff --git a/server/Spells/Traditions/Combat/SwiftSwings.lua b/server/Spells/Traditions/Combat/SwiftSwings.lua new file mode 100644 index 000000000..dfbdb573d --- /dev/null +++ b/server/Spells/Traditions/Combat/SwiftSwings.lua @@ -0,0 +1,14 @@ +--[[ + Script Name : Spells\Traditions\Combat\SwiftSwings.lua + Script Author : Zcoretri + Script Date : 2013.03.26 + Script Notes : +--]] + +function cast(Caster, Target, Modifier) + +end + +function remove(Caster, Target, Modifier) + +end \ No newline at end of file diff --git a/server/Spells/Traditions/Combat/TeachingsOfBayle.lua b/server/Spells/Traditions/Combat/TeachingsOfBayle.lua new file mode 100644 index 000000000..69de42f46 --- /dev/null +++ b/server/Spells/Traditions/Combat/TeachingsOfBayle.lua @@ -0,0 +1,14 @@ +--[[ + Script Name : Spells\Traditions\Combat\TeachingsOfBayle.lua + Script Author : Zcoretri + Script Date : 2013.03.26 + Script Notes : +--]] + +function cast(Caster, Target, Modifier) + +end + +function remove(Caster, Target, Modifier) + +end \ No newline at end of file diff --git a/server/Spells/Traditions/Combat/TheoreticalImprovements.lua b/server/Spells/Traditions/Combat/TheoreticalImprovements.lua new file mode 100644 index 000000000..053908673 --- /dev/null +++ b/server/Spells/Traditions/Combat/TheoreticalImprovements.lua @@ -0,0 +1,14 @@ +--[[ + Script Name : Spells\Traditions\Combat\TheoreticalImprovements.lua + Script Author : Zcoretri + Script Date : 2013.03.26 + Script Notes : +--]] + +function cast(Caster, Target, Modifier) + +end + +function remove(Caster, Target, Modifier) + +end \ No newline at end of file diff --git a/server/Spells/Traditions/Combat/TinyStings.lua b/server/Spells/Traditions/Combat/TinyStings.lua new file mode 100644 index 000000000..d8203cdf1 --- /dev/null +++ b/server/Spells/Traditions/Combat/TinyStings.lua @@ -0,0 +1,14 @@ +--[[ + Script Name : Spells\Traditions\Combat\TinyStings.lua + Script Author : Zcoretri + Script Date : 2013.03.26 + Script Notes : +--]] + +function cast(Caster, Target, Modifier) + +end + +function remove(Caster, Target, Modifier) + +end \ No newline at end of file diff --git a/server/Spells/Traditions/Combat/ToolsOfFear.lua b/server/Spells/Traditions/Combat/ToolsOfFear.lua new file mode 100644 index 000000000..01e896e44 --- /dev/null +++ b/server/Spells/Traditions/Combat/ToolsOfFear.lua @@ -0,0 +1,14 @@ +--[[ + Script Name : Spells\Traditions\Combat\ToolsOfFear.lua + Script Author : Zcoretri + Script Date : 2013.03.26 + Script Notes : +--]] + +function cast(Caster, Target, Modifier) + +end + +function remove(Caster, Target, Modifier) + +end \ No newline at end of file diff --git a/server/Spells/Traditions/Combat/TrueshotsAura.lua b/server/Spells/Traditions/Combat/TrueshotsAura.lua new file mode 100644 index 000000000..bf1618f15 --- /dev/null +++ b/server/Spells/Traditions/Combat/TrueshotsAura.lua @@ -0,0 +1,14 @@ +--[[ + Script Name : Spells\Traditions\Combat\TrueshotsAura.lua + Script Author : Zcoretri + Script Date : 2013.03.26 + Script Notes : +--]] + +function cast(Caster, Target, Modifier) + +end + +function remove(Caster, Target, Modifier) + +end \ No newline at end of file diff --git a/server/Spells/Traditions/Combat/Victory.lua b/server/Spells/Traditions/Combat/Victory.lua new file mode 100644 index 000000000..1341fd944 --- /dev/null +++ b/server/Spells/Traditions/Combat/Victory.lua @@ -0,0 +1,14 @@ +--[[ + Script Name : Spells\Traditions\Combat\Victory.lua + Script Author : Zcoretri + Script Date : 2013.03.26 + Script Notes : +--]] + +function cast(Caster, Target, Modifier) + +end + +function remove(Caster, Target, Modifier) + +end \ No newline at end of file diff --git a/server/Spells/Traditions/Combat/WiggingWhiskers.lua b/server/Spells/Traditions/Combat/WiggingWhiskers.lua new file mode 100644 index 000000000..1be4fc1df --- /dev/null +++ b/server/Spells/Traditions/Combat/WiggingWhiskers.lua @@ -0,0 +1,14 @@ +--[[ + Script Name : Spells\Traditions\Combat\WiggingWhiskers.lua + Script Author : Zcoretri + Script Date : 2013.03.26 + Script Notes : +--]] + +function cast(Caster, Target, Modifier) + +end + +function remove(Caster, Target, Modifier) + +end \ No newline at end of file diff --git a/server/Spells/Traditions/Combat/WordsOfHonor.lua b/server/Spells/Traditions/Combat/WordsOfHonor.lua new file mode 100644 index 000000000..dcfbd356c --- /dev/null +++ b/server/Spells/Traditions/Combat/WordsOfHonor.lua @@ -0,0 +1,14 @@ +--[[ + Script Name : Spells\Traditions\Combat\WordsOfHonor.lua + Script Author : Zcoretri + Script Date : 2013.03.26 + Script Notes : +--]] + +function cast(Caster, Target, Modifier) + +end + +function remove(Caster, Target, Modifier) + +end \ No newline at end of file diff --git a/server/Spells/Traditions/ConnoisseurofFineWines.lua b/server/Spells/Traditions/ConnoisseurofFineWines.lua new file mode 100644 index 000000000..7946d19b2 --- /dev/null +++ b/server/Spells/Traditions/ConnoisseurofFineWines.lua @@ -0,0 +1,12 @@ +--[[ + Script Name : {generic header} + Script Purpose : + Script Author : John Adams + Script Date : 2012.09.08 + Script Notes : temp script to stop world errors +--]] + +function cast(Caster, Target) + + +end diff --git a/server/Spells/Traditions/DarkAgenda.lua b/server/Spells/Traditions/DarkAgenda.lua new file mode 100644 index 000000000..7946d19b2 --- /dev/null +++ b/server/Spells/Traditions/DarkAgenda.lua @@ -0,0 +1,12 @@ +--[[ + Script Name : {generic header} + Script Purpose : + Script Author : John Adams + Script Date : 2012.09.08 + Script Notes : temp script to stop world errors +--]] + +function cast(Caster, Target) + + +end diff --git a/server/Spells/Traditions/DarkEnvy.lua b/server/Spells/Traditions/DarkEnvy.lua new file mode 100644 index 000000000..7946d19b2 --- /dev/null +++ b/server/Spells/Traditions/DarkEnvy.lua @@ -0,0 +1,12 @@ +--[[ + Script Name : {generic header} + Script Purpose : + Script Author : John Adams + Script Date : 2012.09.08 + Script Notes : temp script to stop world errors +--]] + +function cast(Caster, Target) + + +end diff --git a/server/Spells/Traditions/DefenderofEverfrost.lua b/server/Spells/Traditions/DefenderofEverfrost.lua new file mode 100644 index 000000000..7946d19b2 --- /dev/null +++ b/server/Spells/Traditions/DefenderofEverfrost.lua @@ -0,0 +1,12 @@ +--[[ + Script Name : {generic header} + Script Purpose : + Script Author : John Adams + Script Date : 2012.09.08 + Script Notes : temp script to stop world errors +--]] + +function cast(Caster, Target) + + +end diff --git a/server/Spells/Traditions/DefenderofKaladim.lua b/server/Spells/Traditions/DefenderofKaladim.lua new file mode 100644 index 000000000..7946d19b2 --- /dev/null +++ b/server/Spells/Traditions/DefenderofKaladim.lua @@ -0,0 +1,12 @@ +--[[ + Script Name : {generic header} + Script Purpose : + Script Author : John Adams + Script Date : 2012.09.08 + Script Notes : temp script to stop world errors +--]] + +function cast(Caster, Target) + + +end diff --git a/server/Spells/Traditions/DefensiveColoration.lua b/server/Spells/Traditions/DefensiveColoration.lua new file mode 100644 index 000000000..7946d19b2 --- /dev/null +++ b/server/Spells/Traditions/DefensiveColoration.lua @@ -0,0 +1,12 @@ +--[[ + Script Name : {generic header} + Script Purpose : + Script Author : John Adams + Script Date : 2012.09.08 + Script Notes : temp script to stop world errors +--]] + +function cast(Caster, Target) + + +end diff --git a/server/Spells/Traditions/Diplomacy.lua b/server/Spells/Traditions/Diplomacy.lua new file mode 100644 index 000000000..7946d19b2 --- /dev/null +++ b/server/Spells/Traditions/Diplomacy.lua @@ -0,0 +1,12 @@ +--[[ + Script Name : {generic header} + Script Purpose : + Script Author : John Adams + Script Date : 2012.09.08 + Script Notes : temp script to stop world errors +--]] + +function cast(Caster, Target) + + +end diff --git a/server/Spells/Traditions/Diversity.lua b/server/Spells/Traditions/Diversity.lua new file mode 100644 index 000000000..7946d19b2 --- /dev/null +++ b/server/Spells/Traditions/Diversity.lua @@ -0,0 +1,12 @@ +--[[ + Script Name : {generic header} + Script Purpose : + Script Author : John Adams + Script Date : 2012.09.08 + Script Notes : temp script to stop world errors +--]] + +function cast(Caster, Target) + + +end diff --git a/server/Spells/Traditions/DwarvenFortitude.lua b/server/Spells/Traditions/DwarvenFortitude.lua new file mode 100644 index 000000000..7946d19b2 --- /dev/null +++ b/server/Spells/Traditions/DwarvenFortitude.lua @@ -0,0 +1,12 @@ +--[[ + Script Name : {generic header} + Script Purpose : + Script Author : John Adams + Script Date : 2012.09.08 + Script Notes : temp script to stop world errors +--]] + +function cast(Caster, Target) + + +end diff --git a/server/Spells/Traditions/ElvenHeritage.lua b/server/Spells/Traditions/ElvenHeritage.lua new file mode 100644 index 000000000..7946d19b2 --- /dev/null +++ b/server/Spells/Traditions/ElvenHeritage.lua @@ -0,0 +1,12 @@ +--[[ + Script Name : {generic header} + Script Purpose : + Script Author : John Adams + Script Date : 2012.09.08 + Script Notes : temp script to stop world errors +--]] + +function cast(Caster, Target) + + +end diff --git a/server/Spells/Traditions/ElvenReflexes.lua b/server/Spells/Traditions/ElvenReflexes.lua new file mode 100644 index 000000000..7946d19b2 --- /dev/null +++ b/server/Spells/Traditions/ElvenReflexes.lua @@ -0,0 +1,12 @@ +--[[ + Script Name : {generic header} + Script Purpose : + Script Author : John Adams + Script Date : 2012.09.08 + Script Notes : temp script to stop world errors +--]] + +function cast(Caster, Target) + + +end diff --git a/server/Spells/Traditions/ElvenWisdom.lua b/server/Spells/Traditions/ElvenWisdom.lua new file mode 100644 index 000000000..7946d19b2 --- /dev/null +++ b/server/Spells/Traditions/ElvenWisdom.lua @@ -0,0 +1,12 @@ +--[[ + Script Name : {generic header} + Script Purpose : + Script Author : John Adams + Script Date : 2012.09.08 + Script Notes : temp script to stop world errors +--]] + +function cast(Caster, Target) + + +end diff --git a/server/Spells/Traditions/ElvishSpirits.lua b/server/Spells/Traditions/ElvishSpirits.lua new file mode 100644 index 000000000..7946d19b2 --- /dev/null +++ b/server/Spells/Traditions/ElvishSpirits.lua @@ -0,0 +1,12 @@ +--[[ + Script Name : {generic header} + Script Purpose : + Script Author : John Adams + Script Date : 2012.09.08 + Script Notes : temp script to stop world errors +--]] + +function cast(Caster, Target) + + +end diff --git a/server/Spells/Traditions/EnvironmentalAdaptability.lua b/server/Spells/Traditions/EnvironmentalAdaptability.lua new file mode 100644 index 000000000..7946d19b2 --- /dev/null +++ b/server/Spells/Traditions/EnvironmentalAdaptability.lua @@ -0,0 +1,12 @@ +--[[ + Script Name : {generic header} + Script Purpose : + Script Author : John Adams + Script Date : 2012.09.08 + Script Notes : temp script to stop world errors +--]] + +function cast(Caster, Target) + + +end diff --git a/server/Spells/Traditions/ErudsTeachings.lua b/server/Spells/Traditions/ErudsTeachings.lua new file mode 100644 index 000000000..7946d19b2 --- /dev/null +++ b/server/Spells/Traditions/ErudsTeachings.lua @@ -0,0 +1,12 @@ +--[[ + Script Name : {generic header} + Script Purpose : + Script Author : John Adams + Script Date : 2012.09.08 + Script Notes : temp script to stop world errors +--]] + +function cast(Caster, Target) + + +end diff --git a/server/Spells/Traditions/EscapingDive.lua b/server/Spells/Traditions/EscapingDive.lua new file mode 100644 index 000000000..7946d19b2 --- /dev/null +++ b/server/Spells/Traditions/EscapingDive.lua @@ -0,0 +1,12 @@ +--[[ + Script Name : {generic header} + Script Purpose : + Script Author : John Adams + Script Date : 2012.09.08 + Script Notes : temp script to stop world errors +--]] + +function cast(Caster, Target) + + +end diff --git a/server/Spells/Traditions/EsotericStudy.lua b/server/Spells/Traditions/EsotericStudy.lua new file mode 100644 index 000000000..7946d19b2 --- /dev/null +++ b/server/Spells/Traditions/EsotericStudy.lua @@ -0,0 +1,12 @@ +--[[ + Script Name : {generic header} + Script Purpose : + Script Author : John Adams + Script Date : 2012.09.08 + Script Notes : temp script to stop world errors +--]] + +function cast(Caster, Target) + + +end diff --git a/server/Spells/Traditions/FaeDexterity.lua b/server/Spells/Traditions/FaeDexterity.lua new file mode 100644 index 000000000..7946d19b2 --- /dev/null +++ b/server/Spells/Traditions/FaeDexterity.lua @@ -0,0 +1,12 @@ +--[[ + Script Name : {generic header} + Script Purpose : + Script Author : John Adams + Script Date : 2012.09.08 + Script Notes : temp script to stop world errors +--]] + +function cast(Caster, Target) + + +end diff --git a/server/Spells/Traditions/FaeFlight.lua b/server/Spells/Traditions/FaeFlight.lua new file mode 100644 index 000000000..7946d19b2 --- /dev/null +++ b/server/Spells/Traditions/FaeFlight.lua @@ -0,0 +1,12 @@ +--[[ + Script Name : {generic header} + Script Purpose : + Script Author : John Adams + Script Date : 2012.09.08 + Script Notes : temp script to stop world errors +--]] + +function cast(Caster, Target) + + +end diff --git a/server/Spells/Traditions/FallingGrace.lua b/server/Spells/Traditions/FallingGrace.lua new file mode 100644 index 000000000..7946d19b2 --- /dev/null +++ b/server/Spells/Traditions/FallingGrace.lua @@ -0,0 +1,12 @@ +--[[ + Script Name : {generic header} + Script Purpose : + Script Author : John Adams + Script Date : 2012.09.08 + Script Notes : temp script to stop world errors +--]] + +function cast(Caster, Target) + + +end diff --git a/server/Spells/Traditions/FaydarksChampion.lua b/server/Spells/Traditions/FaydarksChampion.lua new file mode 100644 index 000000000..7946d19b2 --- /dev/null +++ b/server/Spells/Traditions/FaydarksChampion.lua @@ -0,0 +1,12 @@ +--[[ + Script Name : {generic header} + Script Purpose : + Script Author : John Adams + Script Date : 2012.09.08 + Script Notes : temp script to stop world errors +--]] + +function cast(Caster, Target) + + +end diff --git a/server/Spells/Traditions/FaydwerFashions.lua b/server/Spells/Traditions/FaydwerFashions.lua new file mode 100644 index 000000000..7946d19b2 --- /dev/null +++ b/server/Spells/Traditions/FaydwerFashions.lua @@ -0,0 +1,12 @@ +--[[ + Script Name : {generic header} + Script Purpose : + Script Author : John Adams + Script Date : 2012.09.08 + Script Notes : temp script to stop world errors +--]] + +function cast(Caster, Target) + + +end diff --git a/server/Spells/Traditions/Featherfall.lua b/server/Spells/Traditions/Featherfall.lua new file mode 100644 index 000000000..7946d19b2 --- /dev/null +++ b/server/Spells/Traditions/Featherfall.lua @@ -0,0 +1,12 @@ +--[[ + Script Name : {generic header} + Script Purpose : + Script Author : John Adams + Script Date : 2012.09.08 + Script Notes : temp script to stop world errors +--]] + +function cast(Caster, Target) + + +end diff --git a/server/Spells/Traditions/FlashofInsight.lua b/server/Spells/Traditions/FlashofInsight.lua new file mode 100644 index 000000000..7946d19b2 --- /dev/null +++ b/server/Spells/Traditions/FlashofInsight.lua @@ -0,0 +1,12 @@ +--[[ + Script Name : {generic header} + Script Purpose : + Script Author : John Adams + Script Date : 2012.09.08 + Script Notes : temp script to stop world errors +--]] + +function cast(Caster, Target) + + +end diff --git a/server/Spells/Traditions/ForestFire.lua b/server/Spells/Traditions/ForestFire.lua new file mode 100644 index 000000000..7946d19b2 --- /dev/null +++ b/server/Spells/Traditions/ForestFire.lua @@ -0,0 +1,12 @@ +--[[ + Script Name : {generic header} + Script Purpose : + Script Author : John Adams + Script Date : 2012.09.08 + Script Notes : temp script to stop world errors +--]] + +function cast(Caster, Target) + + +end diff --git a/server/Spells/Traditions/ForestKnowledge.lua b/server/Spells/Traditions/ForestKnowledge.lua new file mode 100644 index 000000000..7946d19b2 --- /dev/null +++ b/server/Spells/Traditions/ForestKnowledge.lua @@ -0,0 +1,12 @@ +--[[ + Script Name : {generic header} + Script Purpose : + Script Author : John Adams + Script Date : 2012.09.08 + Script Notes : temp script to stop world errors +--]] + +function cast(Caster, Target) + + +end diff --git a/server/Spells/Traditions/ForestNavigation.lua b/server/Spells/Traditions/ForestNavigation.lua new file mode 100644 index 000000000..7946d19b2 --- /dev/null +++ b/server/Spells/Traditions/ForestNavigation.lua @@ -0,0 +1,12 @@ +--[[ + Script Name : {generic header} + Script Purpose : + Script Author : John Adams + Script Date : 2012.09.08 + Script Notes : temp script to stop world errors +--]] + +function cast(Caster, Target) + + +end diff --git a/server/Spells/Traditions/ForgeInvention.lua b/server/Spells/Traditions/ForgeInvention.lua new file mode 100644 index 000000000..7946d19b2 --- /dev/null +++ b/server/Spells/Traditions/ForgeInvention.lua @@ -0,0 +1,12 @@ +--[[ + Script Name : {generic header} + Script Purpose : + Script Author : John Adams + Script Date : 2012.09.08 + Script Notes : temp script to stop world errors +--]] + +function cast(Caster, Target) + + +end diff --git a/server/Spells/Traditions/FueledByHate.lua b/server/Spells/Traditions/FueledByHate.lua new file mode 100644 index 000000000..7946d19b2 --- /dev/null +++ b/server/Spells/Traditions/FueledByHate.lua @@ -0,0 +1,12 @@ +--[[ + Script Name : {generic header} + Script Purpose : + Script Author : John Adams + Script Date : 2012.09.08 + Script Notes : temp script to stop world errors +--]] + +function cast(Caster, Target) + + +end diff --git a/server/Spells/Traditions/FuryofFelwithe.lua b/server/Spells/Traditions/FuryofFelwithe.lua new file mode 100644 index 000000000..7946d19b2 --- /dev/null +++ b/server/Spells/Traditions/FuryofFelwithe.lua @@ -0,0 +1,12 @@ +--[[ + Script Name : {generic header} + Script Purpose : + Script Author : John Adams + Script Date : 2012.09.08 + Script Notes : temp script to stop world errors +--]] + +function cast(Caster, Target) + + +end diff --git a/server/Spells/Traditions/FuryofInnoruuk.lua b/server/Spells/Traditions/FuryofInnoruuk.lua new file mode 100644 index 000000000..7946d19b2 --- /dev/null +++ b/server/Spells/Traditions/FuryofInnoruuk.lua @@ -0,0 +1,12 @@ +--[[ + Script Name : {generic header} + Script Purpose : + Script Author : John Adams + Script Date : 2012.09.08 + Script Notes : temp script to stop world errors +--]] + +function cast(Caster, Target) + + +end diff --git a/server/Spells/Traditions/GiftoftheFaydark.lua b/server/Spells/Traditions/GiftoftheFaydark.lua new file mode 100644 index 000000000..7946d19b2 --- /dev/null +++ b/server/Spells/Traditions/GiftoftheFaydark.lua @@ -0,0 +1,12 @@ +--[[ + Script Name : {generic header} + Script Purpose : + Script Author : John Adams + Script Date : 2012.09.08 + Script Notes : temp script to stop world errors +--]] + +function cast(Caster, Target) + + +end diff --git a/server/Spells/Traditions/GiftoftheInnothule.lua b/server/Spells/Traditions/GiftoftheInnothule.lua new file mode 100644 index 000000000..7946d19b2 --- /dev/null +++ b/server/Spells/Traditions/GiftoftheInnothule.lua @@ -0,0 +1,12 @@ +--[[ + Script Name : {generic header} + Script Purpose : + Script Author : John Adams + Script Date : 2012.09.08 + Script Notes : temp script to stop world errors +--]] + +function cast(Caster, Target) + + +end diff --git a/server/Spells/Traditions/GildingofFelwithe.lua b/server/Spells/Traditions/GildingofFelwithe.lua new file mode 100644 index 000000000..7946d19b2 --- /dev/null +++ b/server/Spells/Traditions/GildingofFelwithe.lua @@ -0,0 +1,12 @@ +--[[ + Script Name : {generic header} + Script Purpose : + Script Author : John Adams + Script Date : 2012.09.08 + Script Notes : temp script to stop world errors +--]] + +function cast(Caster, Target) + + +end diff --git a/server/Spells/Traditions/Gills.lua b/server/Spells/Traditions/Gills.lua new file mode 100644 index 000000000..7dcf251e8 --- /dev/null +++ b/server/Spells/Traditions/Gills.lua @@ -0,0 +1,15 @@ +--[[ + Script Name : Spells/Traditions/Gills.lua + Script Author : neatz09 + Script Date : 2019.04.18 11:04:19 + Script Purpose : + : +--]] + +-- Info from spell_display_effects (remove from script when done) +-- Allows caster to breathe under water + + +function cast(Caster, Target) +BreatheUnderwater(Spawn, true) +end diff --git a/server/Spells/Traditions/Glide.lua b/server/Spells/Traditions/Glide.lua new file mode 100644 index 000000000..7946d19b2 --- /dev/null +++ b/server/Spells/Traditions/Glide.lua @@ -0,0 +1,12 @@ +--[[ + Script Name : {generic header} + Script Purpose : + Script Author : John Adams + Script Date : 2012.09.08 + Script Notes : temp script to stop world errors +--]] + +function cast(Caster, Target) + + +end diff --git a/server/Spells/Traditions/GracefulMovements.lua b/server/Spells/Traditions/GracefulMovements.lua new file mode 100644 index 000000000..7946d19b2 --- /dev/null +++ b/server/Spells/Traditions/GracefulMovements.lua @@ -0,0 +1,12 @@ +--[[ + Script Name : {generic header} + Script Purpose : + Script Author : John Adams + Script Date : 2012.09.08 + Script Notes : temp script to stop world errors +--]] + +function cast(Caster, Target) + + +end diff --git a/server/Spells/Traditions/HalasianAuthority.lua b/server/Spells/Traditions/HalasianAuthority.lua new file mode 100644 index 000000000..7946d19b2 --- /dev/null +++ b/server/Spells/Traditions/HalasianAuthority.lua @@ -0,0 +1,12 @@ +--[[ + Script Name : {generic header} + Script Purpose : + Script Author : John Adams + Script Date : 2012.09.08 + Script Notes : temp script to stop world errors +--]] + +function cast(Caster, Target) + + +end diff --git a/server/Spells/Traditions/Hardiness.lua b/server/Spells/Traditions/Hardiness.lua new file mode 100644 index 000000000..7946d19b2 --- /dev/null +++ b/server/Spells/Traditions/Hardiness.lua @@ -0,0 +1,12 @@ +--[[ + Script Name : {generic header} + Script Purpose : + Script Author : John Adams + Script Date : 2012.09.08 + Script Notes : temp script to stop world errors +--]] + +function cast(Caster, Target) + + +end diff --git a/server/Spells/Traditions/HarmoniousMind.lua b/server/Spells/Traditions/HarmoniousMind.lua new file mode 100644 index 000000000..7946d19b2 --- /dev/null +++ b/server/Spells/Traditions/HarmoniousMind.lua @@ -0,0 +1,12 @@ +--[[ + Script Name : {generic header} + Script Purpose : + Script Author : John Adams + Script Date : 2012.09.08 + Script Notes : temp script to stop world errors +--]] + +function cast(Caster, Target) + + +end diff --git a/server/Spells/Traditions/HatefulMind.lua b/server/Spells/Traditions/HatefulMind.lua new file mode 100644 index 000000000..7946d19b2 --- /dev/null +++ b/server/Spells/Traditions/HatefulMind.lua @@ -0,0 +1,12 @@ +--[[ + Script Name : {generic header} + Script Purpose : + Script Author : John Adams + Script Date : 2012.09.08 + Script Notes : temp script to stop world errors +--]] + +function cast(Caster, Target) + + +end diff --git a/server/Spells/Traditions/HealthyAppetite.lua b/server/Spells/Traditions/HealthyAppetite.lua new file mode 100644 index 000000000..7946d19b2 --- /dev/null +++ b/server/Spells/Traditions/HealthyAppetite.lua @@ -0,0 +1,12 @@ +--[[ + Script Name : {generic header} + Script Purpose : + Script Author : John Adams + Script Date : 2012.09.08 + Script Notes : temp script to stop world errors +--]] + +function cast(Caster, Target) + + +end diff --git a/server/Spells/Traditions/HerbalSupplementation.lua b/server/Spells/Traditions/HerbalSupplementation.lua new file mode 100644 index 000000000..7946d19b2 --- /dev/null +++ b/server/Spells/Traditions/HerbalSupplementation.lua @@ -0,0 +1,12 @@ +--[[ + Script Name : {generic header} + Script Purpose : + Script Author : John Adams + Script Date : 2012.09.08 + Script Notes : temp script to stop world errors +--]] + +function cast(Caster, Target) + + +end diff --git a/server/Spells/Traditions/Herbology.lua b/server/Spells/Traditions/Herbology.lua new file mode 100644 index 000000000..7946d19b2 --- /dev/null +++ b/server/Spells/Traditions/Herbology.lua @@ -0,0 +1,12 @@ +--[[ + Script Name : {generic header} + Script Purpose : + Script Author : John Adams + Script Date : 2012.09.08 + Script Notes : temp script to stop world errors +--]] + +function cast(Caster, Target) + + +end diff --git a/server/Spells/Traditions/Hover.lua b/server/Spells/Traditions/Hover.lua new file mode 100644 index 000000000..7946d19b2 --- /dev/null +++ b/server/Spells/Traditions/Hover.lua @@ -0,0 +1,12 @@ +--[[ + Script Name : {generic header} + Script Purpose : + Script Author : John Adams + Script Date : 2012.09.08 + Script Notes : temp script to stop world errors +--]] + +function cast(Caster, Target) + + +end diff --git a/server/Spells/Traditions/HuntersFury.lua b/server/Spells/Traditions/HuntersFury.lua new file mode 100644 index 000000000..7946d19b2 --- /dev/null +++ b/server/Spells/Traditions/HuntersFury.lua @@ -0,0 +1,12 @@ +--[[ + Script Name : {generic header} + Script Purpose : + Script Author : John Adams + Script Date : 2012.09.08 + Script Notes : temp script to stop world errors +--]] + +function cast(Caster, Target) + + +end diff --git a/server/Spells/Traditions/IllusionClockwork.lua b/server/Spells/Traditions/IllusionClockwork.lua new file mode 100644 index 000000000..7946d19b2 --- /dev/null +++ b/server/Spells/Traditions/IllusionClockwork.lua @@ -0,0 +1,12 @@ +--[[ + Script Name : {generic header} + Script Purpose : + Script Author : John Adams + Script Date : 2012.09.08 + Script Notes : temp script to stop world errors +--]] + +function cast(Caster, Target) + + +end diff --git a/server/Spells/Traditions/ImpenetrableWill.lua b/server/Spells/Traditions/ImpenetrableWill.lua new file mode 100644 index 000000000..7946d19b2 --- /dev/null +++ b/server/Spells/Traditions/ImpenetrableWill.lua @@ -0,0 +1,12 @@ +--[[ + Script Name : {generic header} + Script Purpose : + Script Author : John Adams + Script Date : 2012.09.08 + Script Notes : temp script to stop world errors +--]] + +function cast(Caster, Target) + + +end diff --git a/server/Spells/Traditions/Infravision.lua b/server/Spells/Traditions/Infravision.lua new file mode 100644 index 000000000..4159ea39b --- /dev/null +++ b/server/Spells/Traditions/Infravision.lua @@ -0,0 +1,14 @@ +--[[ + Script Name : Spells/Traditions/Infravision.lua + Script Author : neatz09 + Script Date : 2019.04.17 09:04:52 + Script Purpose : + : +--]] + +-- Info from spell_display_effects (remove from script when done) +-- Grants Infravision to caster + +function cast(Caster, Target) + Say(Target, "Hah, nice try! That's not implemented yet!") +end diff --git a/server/Spells/Traditions/Innate/KeeperOfTheForest.lua b/server/Spells/Traditions/Innate/KeeperOfTheForest.lua new file mode 100644 index 000000000..3a0003342 --- /dev/null +++ b/server/Spells/Traditions/Innate/KeeperOfTheForest.lua @@ -0,0 +1,19 @@ +--[[ + Script Name : Spells\Tradidtions\KeeperOfTheForest.lua + Script Author : Zcoretri + Script Date : 2012.07.31 + Script Notes : Reduces gathering and foresting by 1 second. +--]] + +function cast(Caster, Target, Defense, SkillAmt, Stats) + --AddSpellBonus(Target, 0, Stats) -- STR needs to fixed to allow 0 +end + +function tick(Caster, Target, Type, Min, Max) + +end + +function remove(Caster, Target, Type, Min, Max) + --RemoveSkillBonus(Target) + --RemoveSpellBonus(Target) +end \ No newline at end of file diff --git a/server/Spells/Traditions/InnoruuksGift.lua b/server/Spells/Traditions/InnoruuksGift.lua new file mode 100644 index 000000000..7946d19b2 --- /dev/null +++ b/server/Spells/Traditions/InnoruuksGift.lua @@ -0,0 +1,12 @@ +--[[ + Script Name : {generic header} + Script Purpose : + Script Author : John Adams + Script Date : 2012.09.08 + Script Notes : temp script to stop world errors +--]] + +function cast(Caster, Target) + + +end diff --git a/server/Spells/Traditions/InnothulesBlessing.lua b/server/Spells/Traditions/InnothulesBlessing.lua new file mode 100644 index 000000000..7946d19b2 --- /dev/null +++ b/server/Spells/Traditions/InnothulesBlessing.lua @@ -0,0 +1,12 @@ +--[[ + Script Name : {generic header} + Script Purpose : + Script Author : John Adams + Script Date : 2012.09.08 + Script Notes : temp script to stop world errors +--]] + +function cast(Caster, Target) + + +end diff --git a/server/Spells/Traditions/InstrumentsoftheUnderfoot.lua b/server/Spells/Traditions/InstrumentsoftheUnderfoot.lua new file mode 100644 index 000000000..7946d19b2 --- /dev/null +++ b/server/Spells/Traditions/InstrumentsoftheUnderfoot.lua @@ -0,0 +1,12 @@ +--[[ + Script Name : {generic header} + Script Purpose : + Script Author : John Adams + Script Date : 2012.09.08 + Script Notes : temp script to stop world errors +--]] + +function cast(Caster, Target) + + +end diff --git a/server/Spells/Traditions/IntellectoftheSage.lua b/server/Spells/Traditions/IntellectoftheSage.lua new file mode 100644 index 000000000..7946d19b2 --- /dev/null +++ b/server/Spells/Traditions/IntellectoftheSage.lua @@ -0,0 +1,12 @@ +--[[ + Script Name : {generic header} + Script Purpose : + Script Author : John Adams + Script Date : 2012.09.08 + Script Notes : temp script to stop world errors +--]] + +function cast(Caster, Target) + + +end diff --git a/server/Spells/Traditions/IntellectualFeasting.lua b/server/Spells/Traditions/IntellectualFeasting.lua new file mode 100644 index 000000000..7946d19b2 --- /dev/null +++ b/server/Spells/Traditions/IntellectualFeasting.lua @@ -0,0 +1,12 @@ +--[[ + Script Name : {generic header} + Script Purpose : + Script Author : John Adams + Script Date : 2012.09.08 + Script Notes : temp script to stop world errors +--]] + +function cast(Caster, Target) + + +end diff --git a/server/Spells/Traditions/IntricateCreations.lua b/server/Spells/Traditions/IntricateCreations.lua new file mode 100644 index 000000000..7946d19b2 --- /dev/null +++ b/server/Spells/Traditions/IntricateCreations.lua @@ -0,0 +1,12 @@ +--[[ + Script Name : {generic header} + Script Purpose : + Script Author : John Adams + Script Date : 2012.09.08 + Script Notes : temp script to stop world errors +--]] + +function cast(Caster, Target) + + +end diff --git a/server/Spells/Traditions/Junglewalk.lua b/server/Spells/Traditions/Junglewalk.lua new file mode 100644 index 000000000..7946d19b2 --- /dev/null +++ b/server/Spells/Traditions/Junglewalk.lua @@ -0,0 +1,12 @@ +--[[ + Script Name : {generic header} + Script Purpose : + Script Author : John Adams + Script Date : 2012.09.08 + Script Notes : temp script to stop world errors +--]] + +function cast(Caster, Target) + + +end diff --git a/server/Spells/Traditions/KeeperoftheForest.lua b/server/Spells/Traditions/KeeperoftheForest.lua new file mode 100644 index 000000000..7946d19b2 --- /dev/null +++ b/server/Spells/Traditions/KeeperoftheForest.lua @@ -0,0 +1,12 @@ +--[[ + Script Name : {generic header} + Script Purpose : + Script Author : John Adams + Script Date : 2012.09.08 + Script Notes : temp script to stop world errors +--]] + +function cast(Caster, Target) + + +end diff --git a/server/Spells/Traditions/LightFooted.lua b/server/Spells/Traditions/LightFooted.lua new file mode 100644 index 000000000..7946d19b2 --- /dev/null +++ b/server/Spells/Traditions/LightFooted.lua @@ -0,0 +1,12 @@ +--[[ + Script Name : {generic header} + Script Purpose : + Script Author : John Adams + Script Date : 2012.09.08 + Script Notes : temp script to stop world errors +--]] + +function cast(Caster, Target) + + +end diff --git a/server/Spells/Traditions/LostintheCrowd.lua b/server/Spells/Traditions/LostintheCrowd.lua new file mode 100644 index 000000000..7946d19b2 --- /dev/null +++ b/server/Spells/Traditions/LostintheCrowd.lua @@ -0,0 +1,12 @@ +--[[ + Script Name : {generic header} + Script Purpose : + Script Author : John Adams + Script Date : 2012.09.08 + Script Notes : temp script to stop world errors +--]] + +function cast(Caster, Target) + + +end diff --git a/server/Spells/Traditions/MagicProtection.lua b/server/Spells/Traditions/MagicProtection.lua new file mode 100644 index 000000000..7946d19b2 --- /dev/null +++ b/server/Spells/Traditions/MagicProtection.lua @@ -0,0 +1,12 @@ +--[[ + Script Name : {generic header} + Script Purpose : + Script Author : John Adams + Script Date : 2012.09.08 + Script Notes : temp script to stop world errors +--]] + +function cast(Caster, Target) + + +end diff --git a/server/Spells/Traditions/MagicalProtection.lua b/server/Spells/Traditions/MagicalProtection.lua new file mode 100644 index 000000000..7946d19b2 --- /dev/null +++ b/server/Spells/Traditions/MagicalProtection.lua @@ -0,0 +1,12 @@ +--[[ + Script Name : {generic header} + Script Purpose : + Script Author : John Adams + Script Date : 2012.09.08 + Script Notes : temp script to stop world errors +--]] + +function cast(Caster, Target) + + +end diff --git a/server/Spells/Traditions/MagicalTeachings.lua b/server/Spells/Traditions/MagicalTeachings.lua new file mode 100644 index 000000000..7946d19b2 --- /dev/null +++ b/server/Spells/Traditions/MagicalTeachings.lua @@ -0,0 +1,12 @@ +--[[ + Script Name : {generic header} + Script Purpose : + Script Author : John Adams + Script Date : 2012.09.08 + Script Notes : temp script to stop world errors +--]] + +function cast(Caster, Target) + + +end diff --git a/server/Spells/Traditions/MagicoftheFae.lua b/server/Spells/Traditions/MagicoftheFae.lua new file mode 100644 index 000000000..7946d19b2 --- /dev/null +++ b/server/Spells/Traditions/MagicoftheFae.lua @@ -0,0 +1,12 @@ +--[[ + Script Name : {generic header} + Script Purpose : + Script Author : John Adams + Script Date : 2012.09.08 + Script Notes : temp script to stop world errors +--]] + +function cast(Caster, Target) + + +end diff --git a/server/Spells/Traditions/ManiacalMadness.lua b/server/Spells/Traditions/ManiacalMadness.lua new file mode 100644 index 000000000..7946d19b2 --- /dev/null +++ b/server/Spells/Traditions/ManiacalMadness.lua @@ -0,0 +1,12 @@ +--[[ + Script Name : {generic header} + Script Purpose : + Script Author : John Adams + Script Date : 2012.09.08 + Script Notes : temp script to stop world errors +--]] + +function cast(Caster, Target) + + +end diff --git a/server/Spells/Traditions/ManyMarches.lua b/server/Spells/Traditions/ManyMarches.lua new file mode 100644 index 000000000..7946d19b2 --- /dev/null +++ b/server/Spells/Traditions/ManyMarches.lua @@ -0,0 +1,12 @@ +--[[ + Script Name : {generic header} + Script Purpose : + Script Author : John Adams + Script Date : 2012.09.08 + Script Notes : temp script to stop world errors +--]] + +function cast(Caster, Target) + + +end diff --git a/server/Spells/Traditions/MasteroftheShadows.lua b/server/Spells/Traditions/MasteroftheShadows.lua new file mode 100644 index 000000000..7946d19b2 --- /dev/null +++ b/server/Spells/Traditions/MasteroftheShadows.lua @@ -0,0 +1,12 @@ +--[[ + Script Name : {generic header} + Script Purpose : + Script Author : John Adams + Script Date : 2012.09.08 + Script Notes : temp script to stop world errors +--]] + +function cast(Caster, Target) + + +end diff --git a/server/Spells/Traditions/MasteroftheTumpyTonic.lua b/server/Spells/Traditions/MasteroftheTumpyTonic.lua new file mode 100644 index 000000000..7946d19b2 --- /dev/null +++ b/server/Spells/Traditions/MasteroftheTumpyTonic.lua @@ -0,0 +1,12 @@ +--[[ + Script Name : {generic header} + Script Purpose : + Script Author : John Adams + Script Date : 2012.09.08 + Script Notes : temp script to stop world errors +--]] + +function cast(Caster, Target) + + +end diff --git a/server/Spells/Traditions/MeldrathsTeachings.lua b/server/Spells/Traditions/MeldrathsTeachings.lua new file mode 100644 index 000000000..7946d19b2 --- /dev/null +++ b/server/Spells/Traditions/MeldrathsTeachings.lua @@ -0,0 +1,12 @@ +--[[ + Script Name : {generic header} + Script Purpose : + Script Author : John Adams + Script Date : 2012.09.08 + Script Notes : temp script to stop world errors +--]] + +function cast(Caster, Target) + + +end diff --git a/server/Spells/Traditions/MenderoftheMire.lua b/server/Spells/Traditions/MenderoftheMire.lua new file mode 100644 index 000000000..7946d19b2 --- /dev/null +++ b/server/Spells/Traditions/MenderoftheMire.lua @@ -0,0 +1,12 @@ +--[[ + Script Name : {generic header} + Script Purpose : + Script Author : John Adams + Script Date : 2012.09.08 + Script Notes : temp script to stop world errors +--]] + +function cast(Caster, Target) + + +end diff --git a/server/Spells/Traditions/MiningExpertise.lua b/server/Spells/Traditions/MiningExpertise.lua new file mode 100644 index 000000000..7946d19b2 --- /dev/null +++ b/server/Spells/Traditions/MiningExpertise.lua @@ -0,0 +1,12 @@ +--[[ + Script Name : {generic header} + Script Purpose : + Script Author : John Adams + Script Date : 2012.09.08 + Script Notes : temp script to stop world errors +--]] + +function cast(Caster, Target) + + +end diff --git a/server/Spells/Traditions/MisfitsTrickery.lua b/server/Spells/Traditions/MisfitsTrickery.lua new file mode 100644 index 000000000..7946d19b2 --- /dev/null +++ b/server/Spells/Traditions/MisfitsTrickery.lua @@ -0,0 +1,12 @@ +--[[ + Script Name : {generic header} + Script Purpose : + Script Author : John Adams + Script Date : 2012.09.08 + Script Notes : temp script to stop world errors +--]] + +function cast(Caster, Target) + + +end diff --git a/server/Spells/Traditions/MixedKnowledge.lua b/server/Spells/Traditions/MixedKnowledge.lua new file mode 100644 index 000000000..7946d19b2 --- /dev/null +++ b/server/Spells/Traditions/MixedKnowledge.lua @@ -0,0 +1,12 @@ +--[[ + Script Name : {generic header} + Script Purpose : + Script Author : John Adams + Script Date : 2012.09.08 + Script Notes : temp script to stop world errors +--]] + +function cast(Caster, Target) + + +end diff --git a/server/Spells/Traditions/Multitalented.lua b/server/Spells/Traditions/Multitalented.lua new file mode 100644 index 000000000..7946d19b2 --- /dev/null +++ b/server/Spells/Traditions/Multitalented.lua @@ -0,0 +1,12 @@ +--[[ + Script Name : {generic header} + Script Purpose : + Script Author : John Adams + Script Date : 2012.09.08 + Script Notes : temp script to stop world errors +--]] + +function cast(Caster, Target) + + +end diff --git a/server/Spells/Traditions/NaturalRecovery.lua b/server/Spells/Traditions/NaturalRecovery.lua new file mode 100644 index 000000000..7946d19b2 --- /dev/null +++ b/server/Spells/Traditions/NaturalRecovery.lua @@ -0,0 +1,12 @@ +--[[ + Script Name : {generic header} + Script Purpose : + Script Author : John Adams + Script Date : 2012.09.08 + Script Notes : temp script to stop world errors +--]] + +function cast(Caster, Target) + + +end diff --git a/server/Spells/Traditions/NeriakPrecision.lua b/server/Spells/Traditions/NeriakPrecision.lua new file mode 100644 index 000000000..7946d19b2 --- /dev/null +++ b/server/Spells/Traditions/NeriakPrecision.lua @@ -0,0 +1,12 @@ +--[[ + Script Name : {generic header} + Script Purpose : + Script Author : John Adams + Script Date : 2012.09.08 + Script Notes : temp script to stop world errors +--]] + +function cast(Caster, Target) + + +end diff --git a/server/Spells/Traditions/Noncombat/AncestralBlessing.lua b/server/Spells/Traditions/Noncombat/AncestralBlessing.lua new file mode 100644 index 000000000..404602b88 --- /dev/null +++ b/server/Spells/Traditions/Noncombat/AncestralBlessing.lua @@ -0,0 +1,15 @@ +--[[ + Script Name : Spells\Traditions\Noncombat\AncestralBlessing.lua + Script Purpose : + Script Author : Zcoretri + Script Date : 2013.03.27 + Script Notes : +--]] + +function cast(Caster, Target, Modifier) + +end + +function remove(Caster, Target, Modifier) + +end \ No newline at end of file diff --git a/server/Spells/Traditions/Noncombat/AnotherRound.lua b/server/Spells/Traditions/Noncombat/AnotherRound.lua new file mode 100644 index 000000000..d7749e12a --- /dev/null +++ b/server/Spells/Traditions/Noncombat/AnotherRound.lua @@ -0,0 +1,15 @@ +--[[ + Script Name : Spells\Traditions\Noncombat\AnotherRound.lua + Script Purpose : + Script Author : Zcoretri + Script Date : 2013.03.27 + Script Notes : +--]] + +function cast(Caster, Target, Modifier) + +end + +function remove(Caster, Target, Modifier) + +end \ No newline at end of file diff --git a/server/Spells/Traditions/Noncombat/AsceticDiscipline.lua b/server/Spells/Traditions/Noncombat/AsceticDiscipline.lua new file mode 100644 index 000000000..055c47a35 --- /dev/null +++ b/server/Spells/Traditions/Noncombat/AsceticDiscipline.lua @@ -0,0 +1,15 @@ +--[[ + Script Name : Spells\Traditions\Noncombat\AsceticDiscipline.lua + Script Purpose : + Script Author : Zcoretri + Script Date : 2013.03.27 + Script Notes : +--]] + +function cast(Caster, Target, Modifier) + +end + +function remove(Caster, Target, Modifier) + +end \ No newline at end of file diff --git a/server/Spells/Traditions/Noncombat/AutomatedPoisonDispenser.lua b/server/Spells/Traditions/Noncombat/AutomatedPoisonDispenser.lua new file mode 100644 index 000000000..2a310eb51 --- /dev/null +++ b/server/Spells/Traditions/Noncombat/AutomatedPoisonDispenser.lua @@ -0,0 +1,15 @@ +--[[ + Script Name : Spells\Traditions\Noncombat\AutomatedPoisonDispenser.lua + Script Purpose : + Script Author : Zcoretri + Script Date : 2013.03.27 + Script Notes : +--]] + +function cast(Caster, Target, Modifier) + +end + +function remove(Caster, Target, Modifier) + +end \ No newline at end of file diff --git a/server/Spells/Traditions/Noncombat/BattleReady.lua b/server/Spells/Traditions/Noncombat/BattleReady.lua new file mode 100644 index 000000000..56a3ca6a3 --- /dev/null +++ b/server/Spells/Traditions/Noncombat/BattleReady.lua @@ -0,0 +1,15 @@ +--[[ + Script Name : Spells\Traditions\Noncombat\BattleReady.lua + Script Purpose : + Script Author : Zcoretri + Script Date : 2013.03.27 + Script Notes : +--]] + +function cast(Caster, Target, Modifier) + +end + +function remove(Caster, Target, Modifier) + +end \ No newline at end of file diff --git a/server/Spells/Traditions/Noncombat/BindWound.lua b/server/Spells/Traditions/Noncombat/BindWound.lua new file mode 100644 index 000000000..67733e903 --- /dev/null +++ b/server/Spells/Traditions/Noncombat/BindWound.lua @@ -0,0 +1,18 @@ +--[[ + Script Name : Spells\Traditions\Noncombat\BindWound.lua + Script Purpose : + Script Author : Zcoretri + Script Date : 2013.01.28 + Script Notes : Heals for 2% of max health while out of combat +--]] + +function cast(Caster, Target, Modifier) + CurrHealth = GetHP(Caster) + MaxHealth = GetMaxHP(Caster) + if IsInCombat(Caster) then + -- Do Nothing + elseif CurrHealth < MaxHealth then + healAmount = MaxHealth * Modifier + ModifyHP(Caster, healAmount) + end +end \ No newline at end of file diff --git a/server/Spells/Traditions/Noncombat/BlessingOfTheMeal.lua b/server/Spells/Traditions/Noncombat/BlessingOfTheMeal.lua new file mode 100644 index 000000000..35e25622f --- /dev/null +++ b/server/Spells/Traditions/Noncombat/BlessingOfTheMeal.lua @@ -0,0 +1,15 @@ +--[[ + Script Name : Spells\Traditions\Noncombat\BlessingOfTheMeal.lua + Script Purpose : + Script Author : Zcoretri + Script Date : 2013.03.27 + Script Notes : +--]] + +function cast(Caster, Target, Modifier) + +end + +function remove(Caster, Target, Modifier) + +end \ No newline at end of file diff --git a/server/Spells/Traditions/Noncombat/BristlebanesBlessing.lua b/server/Spells/Traditions/Noncombat/BristlebanesBlessing.lua new file mode 100644 index 000000000..ac757ae1e --- /dev/null +++ b/server/Spells/Traditions/Noncombat/BristlebanesBlessing.lua @@ -0,0 +1,15 @@ +--[[ + Script Name : Spells\Traditions\Noncombat\BristlebanesBlessing.lua + Script Purpose : + Script Author : Zcoretri + Script Date : 2013.03.27 + Script Notes : +--]] + +function cast(Caster, Target, Modifier) + +end + +function remove(Caster, Target, Modifier) + +end \ No newline at end of file diff --git a/server/Spells/Traditions/Noncombat/ChargeIntoBattle.lua b/server/Spells/Traditions/Noncombat/ChargeIntoBattle.lua new file mode 100644 index 000000000..e6bf7197d --- /dev/null +++ b/server/Spells/Traditions/Noncombat/ChargeIntoBattle.lua @@ -0,0 +1,15 @@ +--[[ + Script Name : Spells\Traditions\Noncombat\ChargeIntoBattle.lua + Script Purpose : + Script Author : Zcoretri + Script Date : 2013.03.27 + Script Notes : +--]] + +function cast(Caster, Target, Modifier) + +end + +function remove(Caster, Target, Modifier) + +end \ No newline at end of file diff --git a/server/Spells/Traditions/Noncombat/CloakOfDarkness.lua b/server/Spells/Traditions/Noncombat/CloakOfDarkness.lua new file mode 100644 index 000000000..08dbfe7dd --- /dev/null +++ b/server/Spells/Traditions/Noncombat/CloakOfDarkness.lua @@ -0,0 +1,15 @@ +--[[ + Script Name : Spells\Traditions\Noncombat\CloakOfDarkness.lua + Script Purpose : + Script Author : Zcoretri + Script Date : 2013.03.27 + Script Notes : +--]] + +function cast(Caster, Target, Modifier) + +end + +function remove(Caster, Target, Modifier) + +end \ No newline at end of file diff --git a/server/Spells/Traditions/Noncombat/CloakingDevice.lua b/server/Spells/Traditions/Noncombat/CloakingDevice.lua new file mode 100644 index 000000000..469e08bce --- /dev/null +++ b/server/Spells/Traditions/Noncombat/CloakingDevice.lua @@ -0,0 +1,15 @@ +--[[ + Script Name : Spells\Traditions\Noncombat\CloakingDevice.lua + Script Purpose : + Script Author : Zcoretri + Script Date : 2013.03.27 + Script Notes : +--]] + +function cast(Caster, Target, Modifier) + +end + +function remove(Caster, Target, Modifier) + +end \ No newline at end of file diff --git a/server/Spells/Traditions/Noncombat/ConnoisseurOfFineWines.lua b/server/Spells/Traditions/Noncombat/ConnoisseurOfFineWines.lua new file mode 100644 index 000000000..7b681ae01 --- /dev/null +++ b/server/Spells/Traditions/Noncombat/ConnoisseurOfFineWines.lua @@ -0,0 +1,15 @@ +--[[ + Script Name : Spells\Traditions\Noncombat\ConnoisseurOfFineWines.lua + Script Purpose : + Script Author : Zcoretri + Script Date : 2013.03.27 + Script Notes : +--]] + +function cast(Caster, Target, Modifier) + +end + +function remove(Caster, Target, Modifier) + +end \ No newline at end of file diff --git a/server/Spells/Traditions/Noncombat/DelayedThirst.lua b/server/Spells/Traditions/Noncombat/DelayedThirst.lua new file mode 100644 index 000000000..92acd54c3 --- /dev/null +++ b/server/Spells/Traditions/Noncombat/DelayedThirst.lua @@ -0,0 +1,15 @@ +--[[ + Script Name : Spells\Traditions\Noncombat\DelayedThirst.lua + Script Purpose : + Script Author : Zcoretri + Script Date : 2013.03.27 + Script Notes : +--]] + +function cast(Caster, Target, Modifier) + +end + +function remove(Caster, Target, Modifier) + +end \ No newline at end of file diff --git a/server/Spells/Traditions/Noncombat/ElvishSpirits.lua b/server/Spells/Traditions/Noncombat/ElvishSpirits.lua new file mode 100644 index 000000000..72e6afa3d --- /dev/null +++ b/server/Spells/Traditions/Noncombat/ElvishSpirits.lua @@ -0,0 +1,15 @@ +--[[ + Script Name : Spells\Traditions\Noncombat\ElvishSpirits.lua + Script Purpose : + Script Author : Zcoretri + Script Date : 2013.03.27 + Script Notes : +--]] + +function cast(Caster, Target, Modifier) + +end + +function remove(Caster, Target, Modifier) + +end \ No newline at end of file diff --git a/server/Spells/Traditions/Noncombat/Empowered.lua b/server/Spells/Traditions/Noncombat/Empowered.lua new file mode 100644 index 000000000..00ab8699b --- /dev/null +++ b/server/Spells/Traditions/Noncombat/Empowered.lua @@ -0,0 +1,15 @@ +--[[ + Script Name : Spells\Traditions\Noncombat\Empowered.lua + Script Purpose : + Script Author : Zcoretri + Script Date : 2013.03.27 + Script Notes : +--]] + +function cast(Caster, Target, Modifier) + +end + +function remove(Caster, Target, Modifier) + +end \ No newline at end of file diff --git a/server/Spells/Traditions/Noncombat/EternalYouth.lua b/server/Spells/Traditions/Noncombat/EternalYouth.lua new file mode 100644 index 000000000..b54366225 --- /dev/null +++ b/server/Spells/Traditions/Noncombat/EternalYouth.lua @@ -0,0 +1,15 @@ +--[[ + Script Name : Spells\Traditions\Noncombat\EternalYouth.lua + Script Purpose : + Script Author : Zcoretri + Script Date : 2013.03.27 + Script Notes : +--]] + +function cast(Caster, Target, Modifier) + +end + +function remove(Caster, Target, Modifier) + +end \ No newline at end of file diff --git a/server/Spells/Traditions/Noncombat/ExpertChemistry.lua b/server/Spells/Traditions/Noncombat/ExpertChemistry.lua new file mode 100644 index 000000000..5999c5bb2 --- /dev/null +++ b/server/Spells/Traditions/Noncombat/ExpertChemistry.lua @@ -0,0 +1,15 @@ +--[[ + Script Name : Spells\Traditions\Noncombat\ExpertChemistry.lua + Script Purpose : + Script Author : Zcoretri + Script Date : 2013.03.27 + Script Notes : +--]] + +function cast(Caster, Target, Modifier) + +end + +function remove(Caster, Target, Modifier) + +end \ No newline at end of file diff --git a/server/Spells/Traditions/Noncombat/ExtendedMarch.lua b/server/Spells/Traditions/Noncombat/ExtendedMarch.lua new file mode 100644 index 000000000..da8228fc9 --- /dev/null +++ b/server/Spells/Traditions/Noncombat/ExtendedMarch.lua @@ -0,0 +1,15 @@ +--[[ + Script Name : Spells\Traditions\Noncombat\ExtendedMarch.lua + Script Purpose : + Script Author : Zcoretri + Script Date : 2013.03.27 + Script Notes : +--]] + +function cast(Caster, Target, Modifier) + +end + +function remove(Caster, Target, Modifier) + +end \ No newline at end of file diff --git a/server/Spells/Traditions/Noncombat/FastTwitched.lua b/server/Spells/Traditions/Noncombat/FastTwitched.lua new file mode 100644 index 000000000..c7fa7d3e5 --- /dev/null +++ b/server/Spells/Traditions/Noncombat/FastTwitched.lua @@ -0,0 +1,15 @@ +--[[ + Script Name : Spells\Traditions\Noncombat\FastTwitched.lua + Script Purpose : + Script Author : Zcoretri + Script Date : 2013.03.27 + Script Notes : +--]] + +function cast(Caster, Target, Modifier) + +end + +function remove(Caster, Target, Modifier) + +end \ No newline at end of file diff --git a/server/Spells/Traditions/Noncombat/ForestNavigation.lua b/server/Spells/Traditions/Noncombat/ForestNavigation.lua new file mode 100644 index 000000000..264e9b363 --- /dev/null +++ b/server/Spells/Traditions/Noncombat/ForestNavigation.lua @@ -0,0 +1,15 @@ +--[[ + Script Name : Spells\Traditions\Noncombat\ForestNavigation.lua + Script Purpose : + Script Author : Zcoretri + Script Date : 2013.03.27 + Script Notes : +--]] + +function cast(Caster, Target, Modifier) + +end + +function remove(Caster, Target, Modifier) + +end \ No newline at end of file diff --git a/server/Spells/Traditions/Noncombat/FrostedAles.lua b/server/Spells/Traditions/Noncombat/FrostedAles.lua new file mode 100644 index 000000000..fcc96b4c1 --- /dev/null +++ b/server/Spells/Traditions/Noncombat/FrostedAles.lua @@ -0,0 +1,15 @@ +--[[ + Script Name : Spells\Traditions\Noncombat\FrostedAles.lua + Script Purpose : + Script Author : Zcoretri + Script Date : 2013.01.28 + Script Notes : Increases duration of tradeskilled drinks by 10% +--]] + +function cast(Caster, Target, Modifier) + +end + +function remove(Caster, Target, Modifier) + +end \ No newline at end of file diff --git a/server/Spells/Traditions/Noncombat/GatherMana.lua b/server/Spells/Traditions/Noncombat/GatherMana.lua new file mode 100644 index 000000000..0652cc2c5 --- /dev/null +++ b/server/Spells/Traditions/Noncombat/GatherMana.lua @@ -0,0 +1,15 @@ +--[[ + Script Name : Spells\Traditions\Noncombat\GatherMana.lua + Script Purpose : + Script Author : Zcoretri + Script Date : 2013.03.27 + Script Notes : +--]] + +function cast(Caster, Target, Modifier) + +end + +function remove(Caster, Target, Modifier) + +end \ No newline at end of file diff --git a/server/Spells/Traditions/Noncombat/GracefulLanding.lua b/server/Spells/Traditions/Noncombat/GracefulLanding.lua new file mode 100644 index 000000000..7d452dfcc --- /dev/null +++ b/server/Spells/Traditions/Noncombat/GracefulLanding.lua @@ -0,0 +1,15 @@ +--[[ + Script Name : Spells\Traditions\Noncombat\GracefulLanding.lua + Script Purpose : + Script Author : Zcoretri + Script Date : 2013.03.27 + Script Notes : +--]] + +function cast(Caster, Target, Modifier) + +end + +function remove(Caster, Target, Modifier) + +end \ No newline at end of file diff --git a/server/Spells/Traditions/Noncombat/HastenedStudy.lua b/server/Spells/Traditions/Noncombat/HastenedStudy.lua new file mode 100644 index 000000000..0342b3625 --- /dev/null +++ b/server/Spells/Traditions/Noncombat/HastenedStudy.lua @@ -0,0 +1,15 @@ +--[[ + Script Name : Spells\Traditions\Noncombat\HastenedStudy.lua + Script Purpose : + Script Author : Zcoretri + Script Date : 2013.03.27 + Script Notes : +--]] + +function cast(Caster, Target, Modifier) + +end + +function remove(Caster, Target, Modifier) + +end \ No newline at end of file diff --git a/server/Spells/Traditions/Noncombat/IrefulWill.lua b/server/Spells/Traditions/Noncombat/IrefulWill.lua new file mode 100644 index 000000000..57f56e78e --- /dev/null +++ b/server/Spells/Traditions/Noncombat/IrefulWill.lua @@ -0,0 +1,17 @@ +--[[ + Script Name : Spells\Traditions\Noncombat\IrefulWill.lua + Script Purpose : + Script Author : Zcoretri + Script Date : 2013.02.01 + Script Notes : Increases out-of-combat power regen based on level +--]] + +function cast(Caster, Target, Modifier) + Level = GetLevel(Target) + BonusAmt = Level * Modifier + AddSpellBonus(Target, 601, BonusAmt) +end + +function remove(Caster, Target, Modifier) + RemoveSpellBonus(Target) +end \ No newline at end of file diff --git a/server/Spells/Traditions/Noncombat/KerraSpeed.lua b/server/Spells/Traditions/Noncombat/KerraSpeed.lua new file mode 100644 index 000000000..be31f2493 --- /dev/null +++ b/server/Spells/Traditions/Noncombat/KerraSpeed.lua @@ -0,0 +1,15 @@ +--[[ + Script Name : Spells\Traditions\Noncombat\KerraSpeed.lua + Script Purpose : + Script Author : Zcoretri + Script Date : 2013.03.27 + Script Notes : +--]] + +function cast(Caster, Target, Modifier) + +end + +function remove(Caster, Target, Modifier) + +end \ No newline at end of file diff --git a/server/Spells/Traditions/Noncombat/LastSecondHop.lua b/server/Spells/Traditions/Noncombat/LastSecondHop.lua new file mode 100644 index 000000000..138c1596a --- /dev/null +++ b/server/Spells/Traditions/Noncombat/LastSecondHop.lua @@ -0,0 +1,15 @@ +--[[ + Script Name : Spells\Traditions\Noncombat\LastSecondHop.lua + Script Purpose : + Script Author : Zcoretri + Script Date : 2013.03.27 + Script Notes : +--]] + +function cast(Caster, Target, Modifier) + +end + +function remove(Caster, Target, Modifier) + +end \ No newline at end of file diff --git a/server/Spells/Traditions/Noncombat/MasterOfTheShadows.lua b/server/Spells/Traditions/Noncombat/MasterOfTheShadows.lua new file mode 100644 index 000000000..8876679ff --- /dev/null +++ b/server/Spells/Traditions/Noncombat/MasterOfTheShadows.lua @@ -0,0 +1,16 @@ +--[[ + Script Name : Spells\Traditions\Noncombat\MasterOfTheShadows.lua + Script Purpose : + Script Author : Zcoretri + Script Date : 2013.02.01 + Script Notes : Increases stealth/invisible movement speed by 15.0% +--]] + +function cast(Caster, Target, Modifier) + +end + + +function remove(Caster, Target, Modifier) + +end \ No newline at end of file diff --git a/server/Spells/Traditions/Noncombat/MeditativeContemplation.lua b/server/Spells/Traditions/Noncombat/MeditativeContemplation.lua new file mode 100644 index 000000000..6f716a733 --- /dev/null +++ b/server/Spells/Traditions/Noncombat/MeditativeContemplation.lua @@ -0,0 +1,15 @@ +--[[ + Script Name : Spells\Traditions\Noncombat\MeditativeContemplation.lua + Script Purpose : + Script Author : Zcoretri + Script Date : 2013.03.27 + Script Notes : +--]] + +function cast(Caster, Target, Modifier) + +end + +function remove(Caster, Target, Modifier) + +end \ No newline at end of file diff --git a/server/Spells/Traditions/Noncombat/NapTime.lua b/server/Spells/Traditions/Noncombat/NapTime.lua new file mode 100644 index 000000000..46b09840c --- /dev/null +++ b/server/Spells/Traditions/Noncombat/NapTime.lua @@ -0,0 +1,15 @@ +--[[ + Script Name : Spells\Traditions\Noncombat\NapTime.lua + Script Purpose : + Script Author : Zcoretri + Script Date : 2013.03.27 + Script Notes : +--]] + +function cast(Caster, Target, Modifier) + +end + +function remove(Caster, Target, Modifier) + +end \ No newline at end of file diff --git a/server/Spells/Traditions/Noncombat/NaturalAthlete.lua b/server/Spells/Traditions/Noncombat/NaturalAthlete.lua new file mode 100644 index 000000000..e0e4a93c7 --- /dev/null +++ b/server/Spells/Traditions/Noncombat/NaturalAthlete.lua @@ -0,0 +1,15 @@ +--[[ + Script Name : Spells\Traditions\Noncombat\NaturalAthlete.lua + Script Purpose : + Script Author : Zcoretri + Script Date : 2013.03.27 + Script Notes : +--]] + +function cast(Caster, Target, Modifier) + +end + +function remove(Caster, Target, Modifier) + +end \ No newline at end of file diff --git a/server/Spells/Traditions/Noncombat/NobleGallop.lua b/server/Spells/Traditions/Noncombat/NobleGallop.lua new file mode 100644 index 000000000..94ad5aa5b --- /dev/null +++ b/server/Spells/Traditions/Noncombat/NobleGallop.lua @@ -0,0 +1,15 @@ +--[[ + Script Name : Spells\Traditions\Noncombat\NobleGallop.lua + Script Purpose : + Script Author : Zcoretri + Script Date : 2013.03.27 + Script Notes : +--]] + +function cast(Caster, Target, Modifier) + +end + +function remove(Caster, Target, Modifier) + +end \ No newline at end of file diff --git a/server/Spells/Traditions/Noncombat/NomadicHealing.lua b/server/Spells/Traditions/Noncombat/NomadicHealing.lua new file mode 100644 index 000000000..e1f218b6b --- /dev/null +++ b/server/Spells/Traditions/Noncombat/NomadicHealing.lua @@ -0,0 +1,17 @@ +--[[ + Script Name : Spells\Traditions\Noncombat\NomadicHealing.lua + Script Purpose : + Script Author : Zcoretri + Script Date : 2013.01.28 + Script Notes : Increases out-of-combat power regen based on level +--]] + +function cast(Caster, Target, Modifier) + Level = GetLevel(Target) + BonusAmt = Level * Modifier + AddSpellBonus(Target, 601, BonusAmt) +end + +function remove(Caster, Target, Modifier) + RemoveSpellBonus(Target) +end \ No newline at end of file diff --git a/server/Spells/Traditions/Noncombat/OnlyTheFinestIngredients.lua b/server/Spells/Traditions/Noncombat/OnlyTheFinestIngredients.lua new file mode 100644 index 000000000..03f43b89e --- /dev/null +++ b/server/Spells/Traditions/Noncombat/OnlyTheFinestIngredients.lua @@ -0,0 +1,15 @@ +--[[ + Script Name : Spells\Traditions\Noncombat\OnlyTheFinesIngredients.lua + Script Purpose : + Script Author : Zcoretri + Script Date : 2013.03.27 + Script Notes : +--]] + +function cast(Caster, Target, Modifier) + +end + +function remove(Caster, Target, Modifier) + +end \ No newline at end of file diff --git a/server/Spells/Traditions/Noncombat/OptimumDosage.lua b/server/Spells/Traditions/Noncombat/OptimumDosage.lua new file mode 100644 index 000000000..9cc48a2fc --- /dev/null +++ b/server/Spells/Traditions/Noncombat/OptimumDosage.lua @@ -0,0 +1,15 @@ +--[[ + Script Name : Spells\Traditions\Noncombat\OptimumDosage.lua + Script Purpose : + Script Author : Zcoretri + Script Date : 2013.03.27 + Script Notes : +--]] + +function cast(Caster, Target, Modifier) + +end + +function remove(Caster, Target, Modifier) + +end \ No newline at end of file diff --git a/server/Spells/Traditions/Noncombat/PixieDust.lua b/server/Spells/Traditions/Noncombat/PixieDust.lua new file mode 100644 index 000000000..f06963e81 --- /dev/null +++ b/server/Spells/Traditions/Noncombat/PixieDust.lua @@ -0,0 +1,15 @@ +--[[ + Script Name : Spells\Traditions\Noncombat\PixieDust.lua + Script Purpose : + Script Author : Zcoretri + Script Date : 2013.03.27 + Script Notes : +--]] + +function cast(Caster, Target, Modifier) + +end + +function remove(Caster, Target, Modifier) + +end \ No newline at end of file diff --git a/server/Spells/Traditions/Noncombat/PoisonExpertise.lua b/server/Spells/Traditions/Noncombat/PoisonExpertise.lua new file mode 100644 index 000000000..4227ad484 --- /dev/null +++ b/server/Spells/Traditions/Noncombat/PoisonExpertise.lua @@ -0,0 +1,16 @@ +--[[ + Script Name : Spells\Traditions\Noncombat\PoisonExpertise.lua + Script Purpose : + Script Author : Zcoretri + Script Date : 2013.02.01 + Script Notes : Increases trigger count of poisons by 25.0% +--]] + +function cast(Caster, Target, Modifier) + +end + + +function remove(Caster, Target, Modifier) + +end \ No newline at end of file diff --git a/server/Spells/Traditions/Noncombat/PoisonousPlants.lua b/server/Spells/Traditions/Noncombat/PoisonousPlants.lua new file mode 100644 index 000000000..fc03d374e --- /dev/null +++ b/server/Spells/Traditions/Noncombat/PoisonousPlants.lua @@ -0,0 +1,15 @@ +--[[ + Script Name : Spells\Traditions\Noncombat\PoisonousPlants.lua + Script Purpose : + Script Author : Zcoretri + Script Date : 2013.03.27 + Script Notes : +--]] + +function cast(Caster, Target, Modifier) + +end + +function remove(Caster, Target, Modifier) + +end \ No newline at end of file diff --git a/server/Spells/Traditions/Noncombat/ProtectiveSkin.lua b/server/Spells/Traditions/Noncombat/ProtectiveSkin.lua new file mode 100644 index 000000000..671efebf1 --- /dev/null +++ b/server/Spells/Traditions/Noncombat/ProtectiveSkin.lua @@ -0,0 +1,15 @@ +--[[ + Script Name : Spells\Traditions\Noncombat\ProtectiveSkin.lua + Script Purpose : + Script Author : Zcoretri + Script Date : 2013.03.27 + Script Notes : +--]] + +function cast(Caster, Target, Modifier) + +end + +function remove(Caster, Target, Modifier) + +end \ No newline at end of file diff --git a/server/Spells/Traditions/Noncombat/QuickGetaway.lua b/server/Spells/Traditions/Noncombat/QuickGetaway.lua new file mode 100644 index 000000000..4ffce4fe5 --- /dev/null +++ b/server/Spells/Traditions/Noncombat/QuickGetaway.lua @@ -0,0 +1,15 @@ +--[[ + Script Name : Spells\Traditions\Noncombat\QuickGetaway.lua + Script Purpose : + Script Author : Zcoretri + Script Date : 2013.03.27 + Script Notes : +--]] + +function cast(Caster, Target, Modifier) + +end + +function remove(Caster, Target, Modifier) + +end \ No newline at end of file diff --git a/server/Spells/Traditions/Noncombat/QuickRecovery.lua b/server/Spells/Traditions/Noncombat/QuickRecovery.lua new file mode 100644 index 000000000..94f4c4f5f --- /dev/null +++ b/server/Spells/Traditions/Noncombat/QuickRecovery.lua @@ -0,0 +1,15 @@ +--[[ + Script Name : Spells\Traditions\Noncombat\QuickRecovery.lua + Script Purpose : + Script Author : Zcoretri + Script Date : 2013.03.27 + Script Notes : +--]] + +function cast(Caster, Target, Modifier) + +end + +function remove(Caster, Target, Modifier) + +end \ No newline at end of file diff --git a/server/Spells/Traditions/Noncombat/QuickRecuperation.lua b/server/Spells/Traditions/Noncombat/QuickRecuperation.lua new file mode 100644 index 000000000..499f1066b --- /dev/null +++ b/server/Spells/Traditions/Noncombat/QuickRecuperation.lua @@ -0,0 +1,15 @@ +--[[ + Script Name : Spells\Traditions\Noncombat\QuickRecuperation.lua + Script Purpose : + Script Author : Zcoretri + Script Date : 2013.03.27 + Script Notes : +--]] + +function cast(Caster, Target, Modifier) + +end + +function remove(Caster, Target, Modifier) + +end \ No newline at end of file diff --git a/server/Spells/Traditions/Noncombat/QuitSittinAround.lua b/server/Spells/Traditions/Noncombat/QuitSittinAround.lua new file mode 100644 index 000000000..89a7657db --- /dev/null +++ b/server/Spells/Traditions/Noncombat/QuitSittinAround.lua @@ -0,0 +1,15 @@ +--[[ + Script Name : Spells\Traditions\Noncombat\QuitSittinAround.lua + Script Purpose : + Script Author : Zcoretri + Script Date : 2013.03.27 + Script Notes : +--]] + +function cast(Caster, Target, Modifier) + +end + +function remove(Caster, Target, Modifier) + +end \ No newline at end of file diff --git a/server/Spells/Traditions/Noncombat/RationWater.lua b/server/Spells/Traditions/Noncombat/RationWater.lua new file mode 100644 index 000000000..0aad61873 --- /dev/null +++ b/server/Spells/Traditions/Noncombat/RationWater.lua @@ -0,0 +1,15 @@ +--[[ + Script Name : Spells\Traditions\Noncombat\RationWater.lua + Script Purpose : + Script Author : Zcoretri + Script Date : 2013.03.27 + Script Notes : +--]] + +function cast(Caster, Target, Modifier) + +end + +function remove(Caster, Target, Modifier) + +end \ No newline at end of file diff --git a/server/Spells/Traditions/Noncombat/ReflexiveLanding.lua b/server/Spells/Traditions/Noncombat/ReflexiveLanding.lua new file mode 100644 index 000000000..8d0e5b478 --- /dev/null +++ b/server/Spells/Traditions/Noncombat/ReflexiveLanding.lua @@ -0,0 +1,15 @@ +--[[ + Script Name : Spells\Traditions\Noncombat\ReflexiveLanding.lua + Script Purpose : + Script Author : Zcoretri + Script Date : 2013.03.27 + Script Notes : +--]] + +function cast(Caster, Target, Modifier) + +end + +function remove(Caster, Target, Modifier) + +end \ No newline at end of file diff --git a/server/Spells/Traditions/Noncombat/Restore.lua b/server/Spells/Traditions/Noncombat/Restore.lua new file mode 100644 index 000000000..51ce34b38 --- /dev/null +++ b/server/Spells/Traditions/Noncombat/Restore.lua @@ -0,0 +1,15 @@ +--[[ + Script Name : Spells\Traditions\Noncombat\Restore.lua + Script Purpose : + Script Author : Zcoretri + Script Date : 2013.03.27 + Script Notes : +--]] + +function cast(Caster, Target, Modifier) + +end + +function remove(Caster, Target, Modifier) + +end \ No newline at end of file diff --git a/server/Spells/Traditions/Noncombat/ReturnToFormation.lua b/server/Spells/Traditions/Noncombat/ReturnToFormation.lua new file mode 100644 index 000000000..1531dfc2c --- /dev/null +++ b/server/Spells/Traditions/Noncombat/ReturnToFormation.lua @@ -0,0 +1,15 @@ +--[[ + Script Name : Spells\Traditions\Noncombat\ReturnToFormation.lua + Script Purpose : + Script Author : Zcoretri + Script Date : 2013.03.27 + Script Notes : +--]] + +function cast(Caster, Target, Modifier) + +end + +function remove(Caster, Target, Modifier) + +end \ No newline at end of file diff --git a/server/Spells/Traditions/Noncombat/SecretsOfTheUnderfoot.lua b/server/Spells/Traditions/Noncombat/SecretsOfTheUnderfoot.lua new file mode 100644 index 000000000..88246b572 --- /dev/null +++ b/server/Spells/Traditions/Noncombat/SecretsOfTheUnderfoot.lua @@ -0,0 +1,15 @@ +--[[ + Script Name : Spells\Traditions\Noncombat\SecretsOfTheUnderfoot.lua + Script Purpose : + Script Author : Zcoretri + Script Date : 2013.03.27 + Script Notes : +--]] + +function cast(Caster, Target, Modifier) + +end + +function remove(Caster, Target, Modifier) + +end \ No newline at end of file diff --git a/server/Spells/Traditions/Noncombat/ShadowStalker.lua b/server/Spells/Traditions/Noncombat/ShadowStalker.lua new file mode 100644 index 000000000..4f49f8cdc --- /dev/null +++ b/server/Spells/Traditions/Noncombat/ShadowStalker.lua @@ -0,0 +1,15 @@ +--[[ + Script Name : Spells\Traditions\Noncombat\ShadowStalker.lua + Script Purpose : + Script Author : Zcoretri + Script Date : 2013.03.27 + Script Notes : +--]] + +function cast(Caster, Target, Modifier) + +end + +function remove(Caster, Target, Modifier) + +end \ No newline at end of file diff --git a/server/Spells/Traditions/Noncombat/Shadowlurker.lua b/server/Spells/Traditions/Noncombat/Shadowlurker.lua new file mode 100644 index 000000000..2c487eeec --- /dev/null +++ b/server/Spells/Traditions/Noncombat/Shadowlurker.lua @@ -0,0 +1,15 @@ +--[[ + Script Name : Spells\Traditions\Noncombat\Shadowlurker.lua + Script Purpose : + Script Author : Zcoretri + Script Date : 2013.03.27 + Script Notes : +--]] + +function cast(Caster, Target, Modifier) + +end + +function remove(Caster, Target, Modifier) + +end \ No newline at end of file diff --git a/server/Spells/Traditions/Noncombat/ShamanisticFasting.lua b/server/Spells/Traditions/Noncombat/ShamanisticFasting.lua new file mode 100644 index 000000000..aa186e2c7 --- /dev/null +++ b/server/Spells/Traditions/Noncombat/ShamanisticFasting.lua @@ -0,0 +1,15 @@ +--[[ + Script Name : Spells\Traditions\Noncombat\ShamanisticFasting.lua + Script Purpose : + Script Author : Zcoretri + Script Date : 2013.03.27 + Script Notes : +--]] + +function cast(Caster, Target, Modifier) + +end + +function remove(Caster, Target, Modifier) + +end \ No newline at end of file diff --git a/server/Spells/Traditions/Noncombat/SlowMetabolism.lua b/server/Spells/Traditions/Noncombat/SlowMetabolism.lua new file mode 100644 index 000000000..b11f3bae2 --- /dev/null +++ b/server/Spells/Traditions/Noncombat/SlowMetabolism.lua @@ -0,0 +1,15 @@ +--[[ + Script Name : Spells\Traditions\Noncombat\SlowMetabolism.lua + Script Purpose : + Script Author : Zcoretri + Script Date : 2013.03.27 + Script Notes : +--]] + +function cast(Caster, Target, Modifier) + +end + +function remove(Caster, Target, Modifier) + +end \ No newline at end of file diff --git a/server/Spells/Traditions/Noncombat/SmokedMeats.lua b/server/Spells/Traditions/Noncombat/SmokedMeats.lua new file mode 100644 index 000000000..1010d9d7c --- /dev/null +++ b/server/Spells/Traditions/Noncombat/SmokedMeats.lua @@ -0,0 +1,15 @@ +--[[ + Script Name : Spells\Traditions\Noncombat\SmokedMeats.lua + Script Purpose : + Script Author : Zcoretri + Script Date : 2013.03.27 + Script Notes : +--]] + +function cast(Caster, Target, Modifier) + +end + +function remove(Caster, Target, Modifier) + +end \ No newline at end of file diff --git a/server/Spells/Traditions/Noncombat/SoftLandings.lua b/server/Spells/Traditions/Noncombat/SoftLandings.lua new file mode 100644 index 000000000..4a681cea4 --- /dev/null +++ b/server/Spells/Traditions/Noncombat/SoftLandings.lua @@ -0,0 +1,16 @@ +--[[ + Script Name : Spells\Traditions\Noncombat\SoftLandings.lua + Script Purpose : + Script Author : Zcoretri + Script Date : 2013.01.28 + Script Notes : Decreases falling damage by 15% +--]] + +function cast(Caster, Target, Modifier) + +end + + +function remove(Caster, Target, Modifier) + +end \ No newline at end of file diff --git a/server/Spells/Traditions/Noncombat/StealthyAcrobatics.lua b/server/Spells/Traditions/Noncombat/StealthyAcrobatics.lua new file mode 100644 index 000000000..abef8bf08 --- /dev/null +++ b/server/Spells/Traditions/Noncombat/StealthyAcrobatics.lua @@ -0,0 +1,15 @@ +--[[ + Script Name : Spells\Traditions\Noncombat\StealthyAcrobatics.lua + Script Purpose : + Script Author : Zcoretri + Script Date : 2013.03.27 + Script Notes : +--]] + +function cast(Caster, Target, Modifier) + +end + +function remove(Caster, Target, Modifier) + +end \ No newline at end of file diff --git a/server/Spells/Traditions/Noncombat/StrongAdditives.lua b/server/Spells/Traditions/Noncombat/StrongAdditives.lua new file mode 100644 index 000000000..cc01c55f7 --- /dev/null +++ b/server/Spells/Traditions/Noncombat/StrongAdditives.lua @@ -0,0 +1,15 @@ +--[[ + Script Name : Spells\Traditions\Noncombat\StrongAdditives.lua + Script Purpose : + Script Author : Zcoretri + Script Date : 2013.03.27 + Script Notes : +--]] + +function cast(Caster, Target, Modifier) + +end + +function remove(Caster, Target, Modifier) + +end \ No newline at end of file diff --git a/server/Spells/Traditions/Noncombat/SturdyBones.lua b/server/Spells/Traditions/Noncombat/SturdyBones.lua new file mode 100644 index 000000000..9ed6c173c --- /dev/null +++ b/server/Spells/Traditions/Noncombat/SturdyBones.lua @@ -0,0 +1,15 @@ +--[[ + Script Name : Spells\Traditions\Noncombat\SturdyBones.lua + Script Purpose : + Script Author : Zcoretri + Script Date : 2013.03.27 + Script Notes : +--]] + +function cast(Caster, Target, Modifier) + +end + +function remove(Caster, Target, Modifier) + +end \ No newline at end of file diff --git a/server/Spells/Traditions/Noncombat/SturdyFeet.lua b/server/Spells/Traditions/Noncombat/SturdyFeet.lua new file mode 100644 index 000000000..07beaa8e1 --- /dev/null +++ b/server/Spells/Traditions/Noncombat/SturdyFeet.lua @@ -0,0 +1,15 @@ +--[[ + Script Name : Spells\Traditions\Noncombat\SturdyFeet.lua + Script Purpose : + Script Author : Zcoretri + Script Date : 2013.03.27 + Script Notes : +--]] + +function cast(Caster, Target, Modifier) + +end + +function remove(Caster, Target, Modifier) + +end \ No newline at end of file diff --git a/server/Spells/Traditions/Noncombat/SwampFeet.lua b/server/Spells/Traditions/Noncombat/SwampFeet.lua new file mode 100644 index 000000000..94b00afc8 --- /dev/null +++ b/server/Spells/Traditions/Noncombat/SwampFeet.lua @@ -0,0 +1,15 @@ +--[[ + Script Name : Spells\Traditions\Noncombat\SwampFeet.lua + Script Purpose : + Script Author : Zcoretri + Script Date : 2013.03.27 + Script Notes : +--]] + +function cast(Caster, Target, Modifier) + +end + +function remove(Caster, Target, Modifier) + +end \ No newline at end of file diff --git a/server/Spells/Traditions/Noncombat/SwiftRecovery.lua b/server/Spells/Traditions/Noncombat/SwiftRecovery.lua new file mode 100644 index 000000000..1b5704905 --- /dev/null +++ b/server/Spells/Traditions/Noncombat/SwiftRecovery.lua @@ -0,0 +1,15 @@ +--[[ + Script Name : Spells\Traditions\Noncombat\SwiftRecovery.lua + Script Purpose : + Script Author : Zcoretri + Script Date : 2013.03.27 + Script Notes : +--]] + +function cast(Caster, Target, Modifier) + +end + +function remove(Caster, Target, Modifier) + +end \ No newline at end of file diff --git a/server/Spells/Traditions/Noncombat/TastyBrew.lua b/server/Spells/Traditions/Noncombat/TastyBrew.lua new file mode 100644 index 000000000..e3a2c9bcd --- /dev/null +++ b/server/Spells/Traditions/Noncombat/TastyBrew.lua @@ -0,0 +1,15 @@ +--[[ + Script Name : Spells\Traditions\Noncombat\TastyBrew.lua + Script Purpose : + Script Author : Zcoretri + Script Date : 2013.03.27 + Script Notes : +--]] + +function cast(Caster, Target, Modifier) + +end + +function remove(Caster, Target, Modifier) + +end \ No newline at end of file diff --git a/server/Spells/Traditions/Noncombat/ToxicFinesse.lua b/server/Spells/Traditions/Noncombat/ToxicFinesse.lua new file mode 100644 index 000000000..3e7ff79f7 --- /dev/null +++ b/server/Spells/Traditions/Noncombat/ToxicFinesse.lua @@ -0,0 +1,15 @@ +--[[ + Script Name : Spells\Traditions\Noncombat\ToxicFinesse.lua + Script Purpose : + Script Author : Zcoretri + Script Date : 2013.03.27 + Script Notes : +--]] + +function cast(Caster, Target, Modifier) + +end + +function remove(Caster, Target, Modifier) + +end \ No newline at end of file diff --git a/server/Spells/Traditions/Noncombat/TrainingTechniques.lua b/server/Spells/Traditions/Noncombat/TrainingTechniques.lua new file mode 100644 index 000000000..5e31d5070 --- /dev/null +++ b/server/Spells/Traditions/Noncombat/TrainingTechniques.lua @@ -0,0 +1,15 @@ +--[[ + Script Name : Spells\Traditions\Noncombat\TrainingTechniques.lua + Script Purpose : + Script Author : Zcoretri + Script Date : 2013.03.27 + Script Notes : +--]] + +function cast(Caster, Target, Modifier) + +end + +function remove(Caster, Target, Modifier) + +end \ No newline at end of file diff --git a/server/Spells/Traditions/Noncombat/UnderCoverOfTheVale.lua b/server/Spells/Traditions/Noncombat/UnderCoverOfTheVale.lua new file mode 100644 index 000000000..4db84abaf --- /dev/null +++ b/server/Spells/Traditions/Noncombat/UnderCoverOfTheVale.lua @@ -0,0 +1,15 @@ +--[[ + Script Name : Spells\Traditions\Noncombat\UnderCoverOfTheVale.lua + Script Purpose : + Script Author : Zcoretri + Script Date : 2013.03.27 + Script Notes : +--]] + +function cast(Caster, Target, Modifier) + +end + +function remove(Caster, Target, Modifier) + +end \ No newline at end of file diff --git a/server/Spells/Traditions/Noncombat/VitalityOfTheSwamp.lua b/server/Spells/Traditions/Noncombat/VitalityOfTheSwamp.lua new file mode 100644 index 000000000..4f0b173cf --- /dev/null +++ b/server/Spells/Traditions/Noncombat/VitalityOfTheSwamp.lua @@ -0,0 +1,15 @@ +--[[ + Script Name : Spells\Traditions\Noncombat\VitalityOfTheSwamp.lua + Script Purpose : + Script Author : Zcoretri + Script Date : 2013.03.27 + Script Notes : +--]] + +function cast(Caster, Target, Modifier) + +end + +function remove(Caster, Target, Modifier) + +end \ No newline at end of file diff --git a/server/Spells/Traditions/Noncombat/WalkItOff.lua b/server/Spells/Traditions/Noncombat/WalkItOff.lua new file mode 100644 index 000000000..4e461fb0e --- /dev/null +++ b/server/Spells/Traditions/Noncombat/WalkItOff.lua @@ -0,0 +1,15 @@ +--[[ + Script Name : Spells\Traditions\Noncombat\WalkItOff.lua + Script Purpose : + Script Author : Zcoretri + Script Date : 2013.03.27 + Script Notes : +--]] + +function cast(Caster, Target, Modifier) + +end + +function remove(Caster, Target, Modifier) + +end \ No newline at end of file diff --git a/server/Spells/Traditions/Noncombat/WillfulPersistence.lua b/server/Spells/Traditions/Noncombat/WillfulPersistence.lua new file mode 100644 index 000000000..5c6d0bd25 --- /dev/null +++ b/server/Spells/Traditions/Noncombat/WillfulPersistence.lua @@ -0,0 +1,15 @@ +--[[ + Script Name : Spells\Traditions\Noncombat\WillfulPersistence.lua + Script Purpose : + Script Author : Zcoretri + Script Date : 2013.012.01 + Script Notes : Increases duration of tradeskilled potions by 15% +--]] + +function cast(Caster, Target, Modifier) + +end + +function remove(Caster, Target, Modifier) + +end \ No newline at end of file diff --git a/server/Spells/Traditions/Noncombat/WoodlandRegeneration.lua b/server/Spells/Traditions/Noncombat/WoodlandRegeneration.lua new file mode 100644 index 000000000..81a57fb0b --- /dev/null +++ b/server/Spells/Traditions/Noncombat/WoodlandRegeneration.lua @@ -0,0 +1,15 @@ +--[[ + Script Name : Spells\Traditions\Noncombat\WoodlandRegeneration.lua + Script Purpose : + Script Author : Zcoretri + Script Date : 2013.03.27 + Script Notes : +--]] + +function cast(Caster, Target, Modifier) + +end + +function remove(Caster, Target, Modifier) + +end \ No newline at end of file diff --git a/server/Spells/Traditions/OggokianAggression.lua b/server/Spells/Traditions/OggokianAggression.lua new file mode 100644 index 000000000..7946d19b2 --- /dev/null +++ b/server/Spells/Traditions/OggokianAggression.lua @@ -0,0 +1,12 @@ +--[[ + Script Name : {generic header} + Script Purpose : + Script Author : John Adams + Script Date : 2012.09.08 + Script Notes : temp script to stop world errors +--]] + +function cast(Caster, Target) + + +end diff --git a/server/Spells/Traditions/OggokianTrade.lua b/server/Spells/Traditions/OggokianTrade.lua new file mode 100644 index 000000000..7946d19b2 --- /dev/null +++ b/server/Spells/Traditions/OggokianTrade.lua @@ -0,0 +1,12 @@ +--[[ + Script Name : {generic header} + Script Purpose : + Script Author : John Adams + Script Date : 2012.09.08 + Script Notes : temp script to stop world errors +--]] + +function cast(Caster, Target) + + +end diff --git a/server/Spells/Traditions/Perserverance.lua b/server/Spells/Traditions/Perserverance.lua new file mode 100644 index 000000000..7946d19b2 --- /dev/null +++ b/server/Spells/Traditions/Perserverance.lua @@ -0,0 +1,12 @@ +--[[ + Script Name : {generic header} + Script Purpose : + Script Author : John Adams + Script Date : 2012.09.08 + Script Notes : temp script to stop world errors +--]] + +function cast(Caster, Target) + + +end diff --git a/server/Spells/Traditions/PitifulPlea.lua b/server/Spells/Traditions/PitifulPlea.lua new file mode 100644 index 000000000..7946d19b2 --- /dev/null +++ b/server/Spells/Traditions/PitifulPlea.lua @@ -0,0 +1,12 @@ +--[[ + Script Name : {generic header} + Script Purpose : + Script Author : John Adams + Script Date : 2012.09.08 + Script Notes : temp script to stop world errors +--]] + +function cast(Caster, Target) + + +end diff --git a/server/Spells/Traditions/PoisonCrafter.lua b/server/Spells/Traditions/PoisonCrafter.lua new file mode 100644 index 000000000..7946d19b2 --- /dev/null +++ b/server/Spells/Traditions/PoisonCrafter.lua @@ -0,0 +1,12 @@ +--[[ + Script Name : {generic header} + Script Purpose : + Script Author : John Adams + Script Date : 2012.09.08 + Script Notes : temp script to stop world errors +--]] + +function cast(Caster, Target) + + +end diff --git a/server/Spells/Traditions/PoisonExpertise.lua b/server/Spells/Traditions/PoisonExpertise.lua new file mode 100644 index 000000000..7946d19b2 --- /dev/null +++ b/server/Spells/Traditions/PoisonExpertise.lua @@ -0,0 +1,12 @@ +--[[ + Script Name : {generic header} + Script Purpose : + Script Author : John Adams + Script Date : 2012.09.08 + Script Notes : temp script to stop world errors +--]] + +function cast(Caster, Target) + + +end diff --git a/server/Spells/Traditions/PoisonPlay.lua b/server/Spells/Traditions/PoisonPlay.lua new file mode 100644 index 000000000..7946d19b2 --- /dev/null +++ b/server/Spells/Traditions/PoisonPlay.lua @@ -0,0 +1,12 @@ +--[[ + Script Name : {generic header} + Script Purpose : + Script Author : John Adams + Script Date : 2012.09.08 + Script Notes : temp script to stop world errors +--]] + +function cast(Caster, Target) + + +end diff --git a/server/Spells/Traditions/Pools/ArcaneKnowledge.lua b/server/Spells/Traditions/Pools/ArcaneKnowledge.lua new file mode 100644 index 000000000..1f3710998 --- /dev/null +++ b/server/Spells/Traditions/Pools/ArcaneKnowledge.lua @@ -0,0 +1,17 @@ +--[[ + Script Name : Spells\Traditions\Pools\ArcaneKnowledge.lua + Script Purpose : + Script Author : Zcoretri + Script Date : 2013.03.29 + Script Notes : +--]] + +function cast(Caster, Target, Modifier) + CurPower = GetMaxPower(Target) + BonusAmt = CurPower * Modifier + AddSpellBonus(Target, 501, BonusAmt) +end + +function remove(Caster, Target, Modifier) + RemoveSpellBonus(Target) +end \ No newline at end of file diff --git a/server/Spells/Traditions/Pools/BashersWill.lua b/server/Spells/Traditions/Pools/BashersWill.lua new file mode 100644 index 000000000..67fc30a31 --- /dev/null +++ b/server/Spells/Traditions/Pools/BashersWill.lua @@ -0,0 +1,17 @@ +--[[ + Script Name : Spells\Traditions\Pools\BashersWill.lua + Script Purpose : + Script Author : Zcoretri + Script Date : 2013.03.29 + Script Notes : +--]] + +function cast(Caster, Target, Modifier) + CurPower = GetMaxPower(Target) + BonusAmt = CurPower * Modifier + AddSpellBonus(Target, 501, BonusAmt) +end + +function remove(Caster, Target, Modifier) + RemoveSpellBonus(Target) +end \ No newline at end of file diff --git a/server/Spells/Traditions/Pools/Bloodthirsty.lua b/server/Spells/Traditions/Pools/Bloodthirsty.lua new file mode 100644 index 000000000..0a775c706 --- /dev/null +++ b/server/Spells/Traditions/Pools/Bloodthirsty.lua @@ -0,0 +1,17 @@ +--[[ + Script Name : Spells\Traditions\Pools\Bloodthirsty.lua + Script Purpose : + Script Author : Zcoretri + Script Date : 2013.03.29 + Script Notes : +--]] + +function cast(Caster, Target, Modifier) + CurPower = GetMaxPower(Target) + BonusAmt = CurPower * Modifier + AddSpellBonus(Target, 501, BonusAmt) +end + +function remove(Caster, Target, Modifier) + RemoveSpellBonus(Target) +end \ No newline at end of file diff --git a/server/Spells/Traditions/Pools/ClockworkArmor.lua b/server/Spells/Traditions/Pools/ClockworkArmor.lua new file mode 100644 index 000000000..2172157d5 --- /dev/null +++ b/server/Spells/Traditions/Pools/ClockworkArmor.lua @@ -0,0 +1,17 @@ +--[[ + Script Name : Spells\Traditions\Pools\ClockworkArmor.lua + Script Purpose : + Script Author : Zcoretri + Script Date : 2013.03.29 + Script Notes : +--]] + +function cast(Caster, Target, Modifier) + CurPower = GetMaxPower(Target) + BonusAmt = CurPower * Modifier + AddSpellBonus(Target, 501, BonusAmt) +end + +function remove(Caster, Target, Modifier) + RemoveSpellBonus(Target) +end \ No newline at end of file diff --git a/server/Spells/Traditions/Pools/CoatedWings.lua b/server/Spells/Traditions/Pools/CoatedWings.lua new file mode 100644 index 000000000..bb01fe464 --- /dev/null +++ b/server/Spells/Traditions/Pools/CoatedWings.lua @@ -0,0 +1,17 @@ +--[[ + Script Name : Spells\Traditions\Pools\CoatedWings.lua + Script Purpose : + Script Author : Zcoretri + Script Date : 2013.03.29 + Script Notes : +--]] + +function cast(Caster, Target, Modifier) + CurPower = GetMaxPower(Target) + BonusAmt = CurPower * Modifier + AddSpellBonus(Target, 501, BonusAmt) +end + +function remove(Caster, Target, Modifier) + RemoveSpellBonus(Target) +end \ No newline at end of file diff --git a/server/Spells/Traditions/Pools/CollectiveThoughts.lua b/server/Spells/Traditions/Pools/CollectiveThoughts.lua new file mode 100644 index 000000000..0d90bc488 --- /dev/null +++ b/server/Spells/Traditions/Pools/CollectiveThoughts.lua @@ -0,0 +1,17 @@ +--[[ + Script Name : Spells\Traditions\Pools\CollectiveThoughts.lua + Script Purpose : + Script Author : Zcoretri + Script Date : 2013.01.29 + Script Notes : Increases Mana Pool by 3.0% +--]] + +function cast(Caster, Target, Modifier) + CurPower = GetMaxPower(Target) + BonusAmt = CurPower * Modifier + AddSpellBonus(Target, 501, BonusAmt) +end + +function remove(Caster, Target, Modifier) + RemoveSpellBonus(Target) +end \ No newline at end of file diff --git a/server/Spells/Traditions/Pools/DubiousFocus.lua b/server/Spells/Traditions/Pools/DubiousFocus.lua new file mode 100644 index 000000000..361d138ab --- /dev/null +++ b/server/Spells/Traditions/Pools/DubiousFocus.lua @@ -0,0 +1,17 @@ +--[[ + Script Name : Spells\Traditions\Pools\DubiousFocus.lua + Script Purpose : + Script Author : Zcoretri + Script Date : 2013.02.01 + Script Notes : Increases Health Pool by 3.0% +--]] + +function cast(Caster, Target, Modifier) + CurHP = GetMaxHP(Target) + BonusAmt = CurHP * Modifier + AddSpellBonus(Target, 500, BonusAmt) +end + +function remove(Caster, Target, Modifier) + RemoveSpellBonus(Target) +end \ No newline at end of file diff --git a/server/Spells/Traditions/Pools/EnhancedIntellect.lua b/server/Spells/Traditions/Pools/EnhancedIntellect.lua new file mode 100644 index 000000000..8070f3b45 --- /dev/null +++ b/server/Spells/Traditions/Pools/EnhancedIntellect.lua @@ -0,0 +1,17 @@ +--[[ + Script Name : Spells\Traditions\Pools\EnhancedIntellect.lua + Script Purpose : + Script Author : Zcoretri + Script Date : 2013.03.29 + Script Notes : +--]] + +function cast(Caster, Target, Modifier) + CurPower = GetMaxPower(Target) + BonusAmt = CurPower * Modifier + AddSpellBonus(Target, 501, BonusAmt) +end + +function remove(Caster, Target, Modifier) + RemoveSpellBonus(Target) +end \ No newline at end of file diff --git a/server/Spells/Traditions/Pools/FlashOfInsight.lua b/server/Spells/Traditions/Pools/FlashOfInsight.lua new file mode 100644 index 000000000..1bcb4a6ef --- /dev/null +++ b/server/Spells/Traditions/Pools/FlashOfInsight.lua @@ -0,0 +1,17 @@ +--[[ + Script Name : Spells\Traditions\Pools\FlashOfInsight.lua + Script Purpose : + Script Author : Zcoretri + Script Date : 2013.03.29 + Script Notes : +--]] + +function cast(Caster, Target, Modifier) + CurPower = GetMaxPower(Target) + BonusAmt = CurPower * Modifier + AddSpellBonus(Target, 501, BonusAmt) +end + +function remove(Caster, Target, Modifier) + RemoveSpellBonus(Target) +end \ No newline at end of file diff --git a/server/Spells/Traditions/Pools/FocusOfTheValorous.lua b/server/Spells/Traditions/Pools/FocusOfTheValorous.lua new file mode 100644 index 000000000..f54b74b61 --- /dev/null +++ b/server/Spells/Traditions/Pools/FocusOfTheValorous.lua @@ -0,0 +1,17 @@ +--[[ + Script Name : Spells\Traditions\Pools\FocusOfTheValorous.lua + Script Purpose : + Script Author : Zcoretri + Script Date : 2013.03.29 + Script Notes : +--]] + +function cast(Caster, Target, Modifier) + CurPower = GetMaxPower(Target) + BonusAmt = CurPower * Modifier + AddSpellBonus(Target, 501, BonusAmt) +end + +function remove(Caster, Target, Modifier) + RemoveSpellBonus(Target) +end \ No newline at end of file diff --git a/server/Spells/Traditions/Pools/GiftOfTunare.lua b/server/Spells/Traditions/Pools/GiftOfTunare.lua new file mode 100644 index 000000000..d944583cb --- /dev/null +++ b/server/Spells/Traditions/Pools/GiftOfTunare.lua @@ -0,0 +1,17 @@ +--[[ + Script Name : Spells\Traditions\Pools\GiftOfTunare.lua + Script Purpose : + Script Author : Zcoretri + Script Date : 2013.03.29 + Script Notes : +--]] + +function cast(Caster, Target, Modifier) + CurPower = GetMaxPower(Target) + BonusAmt = CurPower * Modifier + AddSpellBonus(Target, 501, BonusAmt) +end + +function remove(Caster, Target, Modifier) + RemoveSpellBonus(Target) +end \ No newline at end of file diff --git a/server/Spells/Traditions/Pools/HatefulMind.lua b/server/Spells/Traditions/Pools/HatefulMind.lua new file mode 100644 index 000000000..6f92e43f5 --- /dev/null +++ b/server/Spells/Traditions/Pools/HatefulMind.lua @@ -0,0 +1,17 @@ +--[[ + Script Name : Spells\Traditions\Pools\HatefulMind.lua + Script Purpose : + Script Author : Zcoretri + Script Date : 2013.02.01 + Script Notes : Increases Mana Pool by 3.0% +--]] + +function cast(Caster, Target, Modifier) + CurPower = GetMaxPower(Target) + BonusAmt = CurPower * Modifier + AddSpellBonus(Target, 501, BonusAmt) +end + +function remove(Caster, Target, Modifier) + RemoveSpellBonus(Target) +end \ No newline at end of file diff --git a/server/Spells/Traditions/Pools/HonorOfInsight.lua b/server/Spells/Traditions/Pools/HonorOfInsight.lua new file mode 100644 index 000000000..b12da5f9f --- /dev/null +++ b/server/Spells/Traditions/Pools/HonorOfInsight.lua @@ -0,0 +1,17 @@ +--[[ + Script Name : Spells\Traditions\Pools\HonorOfInsight.lua + Script Purpose : + Script Author : Zcoretri + Script Date : 2013.03.29 + Script Notes : +--]] + +function cast(Caster, Target, Modifier) + CurPower = GetMaxPower(Target) + BonusAmt = CurPower * Modifier + AddSpellBonus(Target, 501, BonusAmt) +end + +function remove(Caster, Target, Modifier) + RemoveSpellBonus(Target) +end \ No newline at end of file diff --git a/server/Spells/Traditions/Pools/InnerFocus.lua b/server/Spells/Traditions/Pools/InnerFocus.lua new file mode 100644 index 000000000..ca7e1a6aa --- /dev/null +++ b/server/Spells/Traditions/Pools/InnerFocus.lua @@ -0,0 +1,17 @@ +--[[ + Script Name : Spells\Traditions\Pools\InnerFocus.lua + Script Purpose : + Script Author : Zcoretri + Script Date : 2013.03.29 + Script Notes : +--]] + +function cast(Caster, Target, Modifier) + CurPower = GetMaxPower(Target) + BonusAmt = CurPower * Modifier + AddSpellBonus(Target, 501, BonusAmt) +end + +function remove(Caster, Target, Modifier) + RemoveSpellBonus(Target) +end \ No newline at end of file diff --git a/server/Spells/Traditions/Pools/JumjumRegimen.lua b/server/Spells/Traditions/Pools/JumjumRegimen.lua new file mode 100644 index 000000000..a60fe7b7a --- /dev/null +++ b/server/Spells/Traditions/Pools/JumjumRegimen.lua @@ -0,0 +1,17 @@ +--[[ + Script Name : Spells\Traditions\Pools\JumjumRegimen.lua + Script Purpose : + Script Author : Zcoretri + Script Date : 2013.03.29 + Script Notes : +--]] + +function cast(Caster, Target, Modifier) + CurPower = GetMaxPower(Target) + BonusAmt = CurPower * Modifier + AddSpellBonus(Target, 501, BonusAmt) +end + +function remove(Caster, Target, Modifier) + RemoveSpellBonus(Target) +end \ No newline at end of file diff --git a/server/Spells/Traditions/Pools/LegacyOfBrell.lua b/server/Spells/Traditions/Pools/LegacyOfBrell.lua new file mode 100644 index 000000000..1fc8cb614 --- /dev/null +++ b/server/Spells/Traditions/Pools/LegacyOfBrell.lua @@ -0,0 +1,17 @@ +--[[ + Script Name : Spells\Traditions\Pools\LegacyOfBrell.lua + Script Purpose : + Script Author : Zcoretri + Script Date : 2013.03.29 + Script Notes : +--]] + +function cast(Caster, Target, Modifier) + CurPower = GetMaxPower(Target) + BonusAmt = CurPower * Modifier + AddSpellBonus(Target, 501, BonusAmt) +end + +function remove(Caster, Target, Modifier) + RemoveSpellBonus(Target) +end \ No newline at end of file diff --git a/server/Spells/Traditions/Pools/LegacyOfTheShissar.lua b/server/Spells/Traditions/Pools/LegacyOfTheShissar.lua new file mode 100644 index 000000000..93bc0c599 --- /dev/null +++ b/server/Spells/Traditions/Pools/LegacyOfTheShissar.lua @@ -0,0 +1,17 @@ +--[[ + Script Name : Spells\Traditions\Pools\LegacyOfTheShissar.lua + Script Purpose : + Script Author : Zcoretri + Script Date : 2013.03.29 + Script Notes : +--]] + +function cast(Caster, Target, Modifier) + CurPower = GetMaxPower(Target) + BonusAmt = CurPower * Modifier + AddSpellBonus(Target, 501, BonusAmt) +end + +function remove(Caster, Target, Modifier) + RemoveSpellBonus(Target) +end \ No newline at end of file diff --git a/server/Spells/Traditions/Pools/LegendaryTenacity.lua b/server/Spells/Traditions/Pools/LegendaryTenacity.lua new file mode 100644 index 000000000..e73281680 --- /dev/null +++ b/server/Spells/Traditions/Pools/LegendaryTenacity.lua @@ -0,0 +1,17 @@ +--[[ + Script Name : Spells\Traditions\Pools\LegendayTenacity.lua + Script Purpose : + Script Author : Zcoretri + Script Date : 2013.03.29 + Script Notes : +--]] + +function cast(Caster, Target, Modifier) + CurPower = GetMaxPower(Target) + BonusAmt = CurPower * Modifier + AddSpellBonus(Target, 501, BonusAmt) +end + +function remove(Caster, Target, Modifier) + RemoveSpellBonus(Target) +end \ No newline at end of file diff --git a/server/Spells/Traditions/Pools/LegionnairesFocus.lua b/server/Spells/Traditions/Pools/LegionnairesFocus.lua new file mode 100644 index 000000000..7bccc1727 --- /dev/null +++ b/server/Spells/Traditions/Pools/LegionnairesFocus.lua @@ -0,0 +1,17 @@ +--[[ + Script Name : Spells\Traditions\Pools\LegionnairesFocus.lua + Script Purpose : + Script Author : Zcoretri + Script Date : 2013.03.29 + Script Notes : +--]] + +function cast(Caster, Target, Modifier) + CurPower = GetMaxPower(Target) + BonusAmt = CurPower * Modifier + AddSpellBonus(Target, 501, BonusAmt) +end + +function remove(Caster, Target, Modifier) + RemoveSpellBonus(Target) +end \ No newline at end of file diff --git a/server/Spells/Traditions/Pools/MagicOfTheArasai.lua b/server/Spells/Traditions/Pools/MagicOfTheArasai.lua new file mode 100644 index 000000000..e3f2e2ddc --- /dev/null +++ b/server/Spells/Traditions/Pools/MagicOfTheArasai.lua @@ -0,0 +1,17 @@ +--[[ + Script Name : Spells\Traditions\Pools\MagicOfTheArasai.lua + Script Purpose : + Script Author : Zcoretri + Script Date : 2013.03.29 + Script Notes : +--]] + +function cast(Caster, Target, Modifier) + CurPower = GetMaxPower(Target) + BonusAmt = CurPower * Modifier + AddSpellBonus(Target, 501, BonusAmt) +end + +function remove(Caster, Target, Modifier) + RemoveSpellBonus(Target) +end \ No newline at end of file diff --git a/server/Spells/Traditions/Pools/MagicOfTheFae.lua b/server/Spells/Traditions/Pools/MagicOfTheFae.lua new file mode 100644 index 000000000..c6cfd7de8 --- /dev/null +++ b/server/Spells/Traditions/Pools/MagicOfTheFae.lua @@ -0,0 +1,17 @@ +--[[ + Script Name : Spells\Traditions\Pools\MagicOfTheFae.lua + Script Purpose : + Script Author : Zcoretri + Script Date : 2013.03.29 + Script Notes : +--]] + +function cast(Caster, Target, Modifier) + CurPower = GetMaxPower(Target) + BonusAmt = CurPower * Modifier + AddSpellBonus(Target, 501, BonusAmt) +end + +function remove(Caster, Target, Modifier) + RemoveSpellBonus(Target) +end \ No newline at end of file diff --git a/server/Spells/Traditions/Pools/ManiacalMadness.lua b/server/Spells/Traditions/Pools/ManiacalMadness.lua new file mode 100644 index 000000000..33cd4cdb3 --- /dev/null +++ b/server/Spells/Traditions/Pools/ManiacalMadness.lua @@ -0,0 +1,17 @@ +--[[ + Script Name : Spells\Traditions\Pools\ManiacalMadness.lua + Script Purpose : + Script Author : Zcoretri + Script Date : 2013.03.29 + Script Notes : +--]] + +function cast(Caster, Target, Modifier) + CurPower = GetMaxPower(Target) + BonusAmt = CurPower * Modifier + AddSpellBonus(Target, 501, BonusAmt) +end + +function remove(Caster, Target, Modifier) + RemoveSpellBonus(Target) +end \ No newline at end of file diff --git a/server/Spells/Traditions/Pools/MeditativeStae.lua b/server/Spells/Traditions/Pools/MeditativeStae.lua new file mode 100644 index 000000000..119ca4489 --- /dev/null +++ b/server/Spells/Traditions/Pools/MeditativeStae.lua @@ -0,0 +1,17 @@ +--[[ + Script Name : Spells\Traditions\Pools\MeditativeState.lua + Script Purpose : + Script Author : Zcoretri + Script Date : 2013.03.29 + Script Notes : +--]] + +function cast(Caster, Target, Modifier) + CurPower = GetMaxPower(Target) + BonusAmt = CurPower * Modifier + AddSpellBonus(Target, 501, BonusAmt) +end + +function remove(Caster, Target, Modifier) + RemoveSpellBonus(Target) +end \ No newline at end of file diff --git a/server/Spells/Traditions/Pools/MiddaySnack.lua b/server/Spells/Traditions/Pools/MiddaySnack.lua new file mode 100644 index 000000000..0e0ee42e2 --- /dev/null +++ b/server/Spells/Traditions/Pools/MiddaySnack.lua @@ -0,0 +1,17 @@ +--[[ + Script Name : Spells\Traditions\Pools\MiddaySnack.lua + Script Purpose : + Script Author : Zcoretri + Script Date : 2013.03.29 + Script Notes : +--]] + +function cast(Caster, Target, Modifier) + CurPower = GetMaxPower(Target) + BonusAmt = CurPower * Modifier + AddSpellBonus(Target, 501, BonusAmt) +end + +function remove(Caster, Target, Modifier) + RemoveSpellBonus(Target) +end \ No newline at end of file diff --git a/server/Spells/Traditions/Pools/RallosZeksBlessing.lua b/server/Spells/Traditions/Pools/RallosZeksBlessing.lua new file mode 100644 index 000000000..7c87678f4 --- /dev/null +++ b/server/Spells/Traditions/Pools/RallosZeksBlessing.lua @@ -0,0 +1,17 @@ +--[[ + Script Name : Spells\Traditions\Pools\RallosZeksBlessing.lua + Script Purpose : + Script Author : Zcoretri + Script Date : 2013.03.29 + Script Notes : +--]] + +function cast(Caster, Target, Modifier) + CurPower = GetMaxPower(Target) + BonusAmt = CurPower * Modifier + AddSpellBonus(Target, 501, BonusAmt) +end + +function remove(Caster, Target, Modifier) + RemoveSpellBonus(Target) +end \ No newline at end of file diff --git a/server/Spells/Traditions/Pools/ResilianceOfTheUnderfoot.lua b/server/Spells/Traditions/Pools/ResilianceOfTheUnderfoot.lua new file mode 100644 index 000000000..2539344c2 --- /dev/null +++ b/server/Spells/Traditions/Pools/ResilianceOfTheUnderfoot.lua @@ -0,0 +1,17 @@ +--[[ + Script Name : Spells\Traditions\Pools\ResilianceOfTheUnderfoot.lua + Script Purpose : + Script Author : Zcoretri + Script Date : 2013.03.29 + Script Notes : +--]] + +function cast(Caster, Target, Modifier) + CurPower = GetMaxPower(Target) + BonusAmt = CurPower * Modifier + AddSpellBonus(Target, 501, BonusAmt) +end + +function remove(Caster, Target, Modifier) + RemoveSpellBonus(Target) +end \ No newline at end of file diff --git a/server/Spells/Traditions/Pools/ResilientMind.lua b/server/Spells/Traditions/Pools/ResilientMind.lua new file mode 100644 index 000000000..dff2fee98 --- /dev/null +++ b/server/Spells/Traditions/Pools/ResilientMind.lua @@ -0,0 +1,17 @@ +--[[ + Script Name : Spells\Traditions\Pools\ResilientMind.lua + Script Purpose : + Script Author : Zcoretri + Script Date : 2013.03.29 + Script Notes : +--]] + +function cast(Caster, Target, Modifier) + CurPower = GetMaxPower(Target) + BonusAmt = CurPower * Modifier + AddSpellBonus(Target, 501, BonusAmt) +end + +function remove(Caster, Target, Modifier) + RemoveSpellBonus(Target) +end \ No newline at end of file diff --git a/server/Spells/Traditions/Pools/RuggedFortitude.lua b/server/Spells/Traditions/Pools/RuggedFortitude.lua new file mode 100644 index 000000000..bb3b76e78 --- /dev/null +++ b/server/Spells/Traditions/Pools/RuggedFortitude.lua @@ -0,0 +1,17 @@ +--[[ + Script Name : Spells\Traditions\Pools\RuggedFortitude.lua + Script Purpose : + Script Author : Zcoretri + Script Date : 2013.03.29 + Script Notes : +--]] + +function cast(Caster, Target, Modifier) + CurPower = GetMaxPower(Target) + BonusAmt = CurPower * Modifier + AddSpellBonus(Target, 501, BonusAmt) +end + +function remove(Caster, Target, Modifier) + RemoveSpellBonus(Target) +end \ No newline at end of file diff --git a/server/Spells/Traditions/Pools/Ruggedness.lua b/server/Spells/Traditions/Pools/Ruggedness.lua new file mode 100644 index 000000000..d8e739232 --- /dev/null +++ b/server/Spells/Traditions/Pools/Ruggedness.lua @@ -0,0 +1,17 @@ +--[[ + Script Name : Spells\Traditions\Pools\Ruggedness.lua + Script Purpose : + Script Author : Zcoretri + Script Date : 2013.03.29 + Script Notes : +--]] + +function cast(Caster, Target, Modifier) + CurPower = GetMaxPower(Target) + BonusAmt = CurPower * Modifier + AddSpellBonus(Target, 501, BonusAmt) +end + +function remove(Caster, Target, Modifier) + RemoveSpellBonus(Target) +end \ No newline at end of file diff --git a/server/Spells/Traditions/Pools/ShortButStrong.lua b/server/Spells/Traditions/Pools/ShortButStrong.lua new file mode 100644 index 000000000..1def9b1bb --- /dev/null +++ b/server/Spells/Traditions/Pools/ShortButStrong.lua @@ -0,0 +1,17 @@ +--[[ + Script Name : Spells\Traditions\Pools\ShortButStrong.lua + Script Purpose : + Script Author : Zcoretri + Script Date : 2013.03.29 + Script Notes : +--]] + +function cast(Caster, Target, Modifier) + CurPower = GetMaxPower(Target) + BonusAmt = CurPower * Modifier + AddSpellBonus(Target, 501, BonusAmt) +end + +function remove(Caster, Target, Modifier) + RemoveSpellBonus(Target) +end \ No newline at end of file diff --git a/server/Spells/Traditions/Pools/SpiritualBoon.lua b/server/Spells/Traditions/Pools/SpiritualBoon.lua new file mode 100644 index 000000000..004d48586 --- /dev/null +++ b/server/Spells/Traditions/Pools/SpiritualBoon.lua @@ -0,0 +1,17 @@ +--[[ + Script Name : Spells\Traditions\Pools\SpiritualBoon.lua + Script Purpose : + Script Author : Zcoretri + Script Date : 2013.03.29 + Script Notes : +--]] + +function cast(Caster, Target, Modifier) + CurPower = GetMaxPower(Target) + BonusAmt = CurPower * Modifier + AddSpellBonus(Target, 501, BonusAmt) +end + +function remove(Caster, Target, Modifier) + RemoveSpellBonus(Target) +end \ No newline at end of file diff --git a/server/Spells/Traditions/Pools/SpontaneousMetamorphosis.lua b/server/Spells/Traditions/Pools/SpontaneousMetamorphosis.lua new file mode 100644 index 000000000..653d0f994 --- /dev/null +++ b/server/Spells/Traditions/Pools/SpontaneousMetamorphosis.lua @@ -0,0 +1,17 @@ +--[[ + Script Name : Spells\Traditions\Pools\SpontaneousMetamorphosis.lua + Script Purpose : + Script Author : Zcoretri + Script Date : 2013.03.29 + Script Notes : +--]] + +function cast(Caster, Target, Modifier) + CurPower = GetMaxPower(Target) + BonusAmt = CurPower * Modifier + AddSpellBonus(Target, 501, BonusAmt) +end + +function remove(Caster, Target, Modifier) + RemoveSpellBonus(Target) +end \ No newline at end of file diff --git a/server/Spells/Traditions/Pools/TheoreticalImprovements.lua b/server/Spells/Traditions/Pools/TheoreticalImprovements.lua new file mode 100644 index 000000000..97032870f --- /dev/null +++ b/server/Spells/Traditions/Pools/TheoreticalImprovements.lua @@ -0,0 +1,17 @@ +--[[ + Script Name : Spells\Traditions\Pools\TheoreticalImprovements.lua + Script Purpose : + Script Author : Zcoretri + Script Date : 2013.03.29 + Script Notes : +--]] + +function cast(Caster, Target, Modifier) + CurPower = GetMaxPower(Target) + BonusAmt = CurPower * Modifier + AddSpellBonus(Target, 501, BonusAmt) +end + +function remove(Caster, Target, Modifier) + RemoveSpellBonus(Target) +end \ No newline at end of file diff --git a/server/Spells/Traditions/Pools/ThoughtsOfFelwithe.lua b/server/Spells/Traditions/Pools/ThoughtsOfFelwithe.lua new file mode 100644 index 000000000..af7ba3ebe --- /dev/null +++ b/server/Spells/Traditions/Pools/ThoughtsOfFelwithe.lua @@ -0,0 +1,17 @@ +--[[ + Script Name : Spells\Traditions\Pools\ThoughtsOfFelwithe.lua + Script Purpose : + Script Author : Zcoretri + Script Date : 2013.03.29 + Script Notes : +--]] + +function cast(Caster, Target, Modifier) + CurPower = GetMaxPower(Target) + BonusAmt = CurPower * Modifier + AddSpellBonus(Target, 501, BonusAmt) +end + +function remove(Caster, Target, Modifier) + RemoveSpellBonus(Target) +end \ No newline at end of file diff --git a/server/Spells/Traditions/Pools/TribalKnowledge.lua b/server/Spells/Traditions/Pools/TribalKnowledge.lua new file mode 100644 index 000000000..9bbcec954 --- /dev/null +++ b/server/Spells/Traditions/Pools/TribalKnowledge.lua @@ -0,0 +1,17 @@ +--[[ + Script Name : Spells\Traditions\Pools\TribalKnowledge.lua + Script Purpose : + Script Author : Zcoretri + Script Date : 2013.03.29 + Script Notes : +--]] + +function cast(Caster, Target, Modifier) + CurPower = GetMaxPower(Target) + BonusAmt = CurPower * Modifier + AddSpellBonus(Target, 501, BonusAmt) +end + +function remove(Caster, Target, Modifier) + RemoveSpellBonus(Target) +end \ No newline at end of file diff --git a/server/Spells/Traditions/Pools/TribalStrength.lua b/server/Spells/Traditions/Pools/TribalStrength.lua new file mode 100644 index 000000000..080a8f01a --- /dev/null +++ b/server/Spells/Traditions/Pools/TribalStrength.lua @@ -0,0 +1,17 @@ +--[[ + Script Name : Spells\Traditions\Pools\TribalStrength.lua + Script Purpose : + Script Author : Zcoretri + Script Date : 2013.01.29 + Script Notes : Increases Health Pool by 3.0% +--]] + +function cast(Caster, Target, Modifier) + CurHP = GetMaxHP(Target) + BonusAmt = CurHP * Modifier + AddSpellBonus(Target, 500, BonusAmt) +end + +function remove(Caster, Target, Modifier) + RemoveSpellBonus(Target) +end \ No newline at end of file diff --git a/server/Spells/Traditions/Pools/VampiricWill.lua b/server/Spells/Traditions/Pools/VampiricWill.lua new file mode 100644 index 000000000..25a884d01 --- /dev/null +++ b/server/Spells/Traditions/Pools/VampiricWill.lua @@ -0,0 +1,17 @@ +--[[ + Script Name : Spells\Traditions\Pools\VampiricWill.lua + Script Purpose : + Script Author : Zcoretri + Script Date : 2013.03.29 + Script Notes : +--]] + +function cast(Caster, Target, Modifier) + CurPower = GetMaxPower(Target) + BonusAmt = CurPower * Modifier + AddSpellBonus(Target, 501, BonusAmt) +end + +function remove(Caster, Target, Modifier) + RemoveSpellBonus(Target) +end \ No newline at end of file diff --git a/server/Spells/Traditions/Pools/VitalityOfTheFeirDal.lua b/server/Spells/Traditions/Pools/VitalityOfTheFeirDal.lua new file mode 100644 index 000000000..f64b64689 --- /dev/null +++ b/server/Spells/Traditions/Pools/VitalityOfTheFeirDal.lua @@ -0,0 +1,17 @@ +--[[ + Script Name : Spells\Traditions\Pools\VitalityOfTheFeirDal.lua + Script Purpose : + Script Author : Zcoretri + Script Date : 2013.03.29 + Script Notes : +--]] + +function cast(Caster, Target, Modifier) + CurPower = GetMaxPower(Target) + BonusAmt = CurPower * Modifier + AddSpellBonus(Target, 501, BonusAmt) +end + +function remove(Caster, Target, Modifier) + RemoveSpellBonus(Target) +end \ No newline at end of file diff --git a/server/Spells/Traditions/Pools/WillOfTheAnchored.lua b/server/Spells/Traditions/Pools/WillOfTheAnchored.lua new file mode 100644 index 000000000..512c029a2 --- /dev/null +++ b/server/Spells/Traditions/Pools/WillOfTheAnchored.lua @@ -0,0 +1,17 @@ +--[[ + Script Name : Spells\Traditions\Pools\WillOfTheAnchored.lua + Script Purpose : + Script Author : Zcoretri + Script Date : 2013.03.29 + Script Notes : +--]] + +function cast(Caster, Target, Modifier) + CurPower = GetMaxPower(Target) + BonusAmt = CurPower * Modifier + AddSpellBonus(Target, 501, BonusAmt) +end + +function remove(Caster, Target, Modifier) + RemoveSpellBonus(Target) +end \ No newline at end of file diff --git a/server/Spells/Traditions/ProficientSwimmer.lua b/server/Spells/Traditions/ProficientSwimmer.lua new file mode 100644 index 000000000..7946d19b2 --- /dev/null +++ b/server/Spells/Traditions/ProficientSwimmer.lua @@ -0,0 +1,12 @@ +--[[ + Script Name : {generic header} + Script Purpose : + Script Author : John Adams + Script Date : 2012.09.08 + Script Notes : temp script to stop world errors +--]] + +function cast(Caster, Target) + + +end diff --git a/server/Spells/Traditions/PursuitoftheArcane.lua b/server/Spells/Traditions/PursuitoftheArcane.lua new file mode 100644 index 000000000..7946d19b2 --- /dev/null +++ b/server/Spells/Traditions/PursuitoftheArcane.lua @@ -0,0 +1,12 @@ +--[[ + Script Name : {generic header} + Script Purpose : + Script Author : John Adams + Script Date : 2012.09.08 + Script Notes : temp script to stop world errors +--]] + +function cast(Caster, Target) + + +end diff --git a/server/Spells/Traditions/RallosZeksBlessing.lua b/server/Spells/Traditions/RallosZeksBlessing.lua new file mode 100644 index 000000000..7946d19b2 --- /dev/null +++ b/server/Spells/Traditions/RallosZeksBlessing.lua @@ -0,0 +1,12 @@ +--[[ + Script Name : {generic header} + Script Purpose : + Script Author : John Adams + Script Date : 2012.09.08 + Script Notes : temp script to stop world errors +--]] + +function cast(Caster, Target) + + +end diff --git a/server/Spells/Traditions/RallosianReadiness.lua b/server/Spells/Traditions/RallosianReadiness.lua new file mode 100644 index 000000000..7946d19b2 --- /dev/null +++ b/server/Spells/Traditions/RallosianReadiness.lua @@ -0,0 +1,12 @@ +--[[ + Script Name : {generic header} + Script Purpose : + Script Author : John Adams + Script Date : 2012.09.08 + Script Notes : temp script to stop world errors +--]] + +function cast(Caster, Target) + + +end diff --git a/server/Spells/Traditions/RebelliousSpirit.lua b/server/Spells/Traditions/RebelliousSpirit.lua new file mode 100644 index 000000000..7946d19b2 --- /dev/null +++ b/server/Spells/Traditions/RebelliousSpirit.lua @@ -0,0 +1,12 @@ +--[[ + Script Name : {generic header} + Script Purpose : + Script Author : John Adams + Script Date : 2012.09.08 + Script Notes : temp script to stop world errors +--]] + +function cast(Caster, Target) + + +end diff --git a/server/Spells/Traditions/ReflexiveLanding.lua b/server/Spells/Traditions/ReflexiveLanding.lua new file mode 100644 index 000000000..7946d19b2 --- /dev/null +++ b/server/Spells/Traditions/ReflexiveLanding.lua @@ -0,0 +1,12 @@ +--[[ + Script Name : {generic header} + Script Purpose : + Script Author : John Adams + Script Date : 2012.09.08 + Script Notes : temp script to stop world errors +--]] + +function cast(Caster, Target) + + +end diff --git a/server/Spells/Traditions/ReptilianAncestry.lua b/server/Spells/Traditions/ReptilianAncestry.lua new file mode 100644 index 000000000..7946d19b2 --- /dev/null +++ b/server/Spells/Traditions/ReptilianAncestry.lua @@ -0,0 +1,12 @@ +--[[ + Script Name : {generic header} + Script Purpose : + Script Author : John Adams + Script Date : 2012.09.08 + Script Notes : temp script to stop world errors +--]] + +function cast(Caster, Target) + + +end diff --git a/server/Spells/Traditions/Resists/Adaptable.lua b/server/Spells/Traditions/Resists/Adaptable.lua new file mode 100644 index 000000000..afd6405aa --- /dev/null +++ b/server/Spells/Traditions/Resists/Adaptable.lua @@ -0,0 +1,17 @@ +--[[ + Script Name : Spells\Traditions\Resist\Adaptable.lua + Script Purpose : + Script Author : Zcoretri + Script Date : 2013.03.29 + Script Notes : +--]] + +function cast(Caster, Target, Modifier) + CurLevel = GetLevel(Target) + BonusAmt = CurLevel * Modifier + AddSpellBonus(Target, 203, BonusAmt) +end + +function remove(Caster, Target, Modifier) + RemoveSpellBonus(Target) +end \ No newline at end of file diff --git a/server/Spells/Traditions/Resists/Antidote.lua b/server/Spells/Traditions/Resists/Antidote.lua new file mode 100644 index 000000000..d326ff9af --- /dev/null +++ b/server/Spells/Traditions/Resists/Antidote.lua @@ -0,0 +1,17 @@ +--[[ + Script Name : Spells\Traditions\Resist\Antidote.lua + Script Purpose : + Script Author : Zcoretri + Script Date : 2013.03.29 + Script Notes : +--]] + +function cast(Caster, Target, Modifier) + CurLevel = GetLevel(Target) + BonusAmt = CurLevel * Modifier + AddSpellBonus(Target, 203, BonusAmt) +end + +function remove(Caster, Target, Modifier) + RemoveSpellBonus(Target) +end \ No newline at end of file diff --git a/server/Spells/Traditions/Resists/ArcanicFortitude.lua b/server/Spells/Traditions/Resists/ArcanicFortitude.lua new file mode 100644 index 000000000..c244eabe8 --- /dev/null +++ b/server/Spells/Traditions/Resists/ArcanicFortitude.lua @@ -0,0 +1,17 @@ +--[[ + Script Name : Spells\Traditions\Resist\ArcanicFortitude.lua + Script Purpose : + Script Author : Zcoretri + Script Date : 2013.03.29 + Script Notes : +--]] + +function cast(Caster, Target, Modifier) + CurLevel = GetLevel(Target) + BonusAmt = CurLevel * Modifier + AddSpellBonus(Target, 203, BonusAmt) +end + +function remove(Caster, Target, Modifier) + RemoveSpellBonus(Target) +end \ No newline at end of file diff --git a/server/Spells/Traditions/Resists/ArmorOfTheFeerrott.lua b/server/Spells/Traditions/Resists/ArmorOfTheFeerrott.lua new file mode 100644 index 000000000..d0648b127 --- /dev/null +++ b/server/Spells/Traditions/Resists/ArmorOfTheFeerrott.lua @@ -0,0 +1,17 @@ +--[[ + Script Name : Spells\Traditions\Resist\ArmorOfTheFeerrott.lua + Script Purpose : + Script Author : Zcoretri + Script Date : 2013.03.29 + Script Notes : +--]] + +function cast(Caster, Target, Modifier) + CurLevel = GetLevel(Target) + BonusAmt = CurLevel * Modifier + AddSpellBonus(Target, 203, BonusAmt) +end + +function remove(Caster, Target, Modifier) + RemoveSpellBonus(Target) +end \ No newline at end of file diff --git a/server/Spells/Traditions/Resists/DefyMagic.lua b/server/Spells/Traditions/Resists/DefyMagic.lua new file mode 100644 index 000000000..a9fed0d80 --- /dev/null +++ b/server/Spells/Traditions/Resists/DefyMagic.lua @@ -0,0 +1,17 @@ +--[[ + Script Name : Spells\Traditions\Resist\DefyMagic.lua + Script Purpose : + Script Author : Zcoretri + Script Date : 2013.03.29 + Script Notes : +--]] + +function cast(Caster, Target, Modifier) + CurLevel = GetLevel(Target) + BonusAmt = CurLevel * Modifier + AddSpellBonus(Target, 203, BonusAmt) +end + +function remove(Caster, Target, Modifier) + RemoveSpellBonus(Target) +end \ No newline at end of file diff --git a/server/Spells/Traditions/Resists/DevoutBarrier.lua b/server/Spells/Traditions/Resists/DevoutBarrier.lua new file mode 100644 index 000000000..a5db2cf19 --- /dev/null +++ b/server/Spells/Traditions/Resists/DevoutBarrier.lua @@ -0,0 +1,17 @@ +--[[ + Script Name : Spells\Traditions\Resist\DevoutBarrier.lua + Script Purpose : + Script Author : Zcoretri + Script Date : 2013.01.29 + Script Notes : Increases Arcane mitigation based on level +--]] + +function cast(Caster, Target, Modifier) + CurLevel = GetLevel(Target) + BonusAmt = CurLevel * Modifier + AddSpellBonus(Target, 203, BonusAmt) +end + +function remove(Caster, Target, Modifier) + RemoveSpellBonus(Target) +end \ No newline at end of file diff --git a/server/Spells/Traditions/Resists/DidntEvenFeelIt.lua b/server/Spells/Traditions/Resists/DidntEvenFeelIt.lua new file mode 100644 index 000000000..f8f7ae68b --- /dev/null +++ b/server/Spells/Traditions/Resists/DidntEvenFeelIt.lua @@ -0,0 +1,17 @@ +--[[ + Script Name : Spells\Traditions\Resist\DidntEvenFeekIt.lua + Script Purpose : + Script Author : Zcoretri + Script Date : 2013.03.29 + Script Notes : +--]] + +function cast(Caster, Target, Modifier) + CurLevel = GetLevel(Target) + BonusAmt = CurLevel * Modifier + AddSpellBonus(Target, 203, BonusAmt) +end + +function remove(Caster, Target, Modifier) + RemoveSpellBonus(Target) +end \ No newline at end of file diff --git a/server/Spells/Traditions/Resists/ElementalBarrier.lua b/server/Spells/Traditions/Resists/ElementalBarrier.lua new file mode 100644 index 000000000..7bd0c938e --- /dev/null +++ b/server/Spells/Traditions/Resists/ElementalBarrier.lua @@ -0,0 +1,17 @@ +--[[ + Script Name : Spells\Traditions\Resist\ElementalBarrier.lua + Script Purpose : + Script Author : Zcoretri + Script Date : 2013.03.29 + Script Notes : +--]] + +function cast(Caster, Target, Modifier) + CurLevel = GetLevel(Target) + BonusAmt = CurLevel * Modifier + AddSpellBonus(Target, 203, BonusAmt) +end + +function remove(Caster, Target, Modifier) + RemoveSpellBonus(Target) +end \ No newline at end of file diff --git a/server/Spells/Traditions/Resists/ElementalDefiance.lua b/server/Spells/Traditions/Resists/ElementalDefiance.lua new file mode 100644 index 000000000..95bfa790c --- /dev/null +++ b/server/Spells/Traditions/Resists/ElementalDefiance.lua @@ -0,0 +1,17 @@ +--[[ + Script Name : Spells\Traditions\Resist\ElementalDefiance.lua + Script Purpose : + Script Author : Zcoretri + Script Date : 2013.02.01 + Script Notes : Increases Elemental mitigation based on level +--]] + +function cast(Caster, Target, Modifier) + CurLevel = GetLevel(Target) + BonusAmt = CurLevel * Modifier + AddSpellBonus(Target, 201, BonusAmt) +end + +function remove(Caster, Target, Modifier) + RemoveSpellBonus(Target) +end \ No newline at end of file diff --git a/server/Spells/Traditions/Resists/ElementalDurability.lua b/server/Spells/Traditions/Resists/ElementalDurability.lua new file mode 100644 index 000000000..4e76f4098 --- /dev/null +++ b/server/Spells/Traditions/Resists/ElementalDurability.lua @@ -0,0 +1,17 @@ +--[[ + Script Name : Spells\Traditions\Resist\ElementalDurability.lua + Script Purpose : + Script Author : Zcoretri + Script Date : 2013.03.29 + Script Notes : +--]] + +function cast(Caster, Target, Modifier) + CurLevel = GetLevel(Target) + BonusAmt = CurLevel * Modifier + AddSpellBonus(Target, 203, BonusAmt) +end + +function remove(Caster, Target, Modifier) + RemoveSpellBonus(Target) +end \ No newline at end of file diff --git a/server/Spells/Traditions/Resists/ElementalFortitude.lua b/server/Spells/Traditions/Resists/ElementalFortitude.lua new file mode 100644 index 000000000..72d86146a --- /dev/null +++ b/server/Spells/Traditions/Resists/ElementalFortitude.lua @@ -0,0 +1,17 @@ +--[[ + Script Name : Spells\Traditions\Resist\ElementalFortitude.lua + Script Purpose : + Script Author : Zcoretri + Script Date : 2013.03.29 + Script Notes : +--]] + +function cast(Caster, Target, Modifier) + CurLevel = GetLevel(Target) + BonusAmt = CurLevel * Modifier + AddSpellBonus(Target, 203, BonusAmt) +end + +function remove(Caster, Target, Modifier) + RemoveSpellBonus(Target) +end \ No newline at end of file diff --git a/server/Spells/Traditions/Resists/ElementalMastery.lua b/server/Spells/Traditions/Resists/ElementalMastery.lua new file mode 100644 index 000000000..b01f4bf46 --- /dev/null +++ b/server/Spells/Traditions/Resists/ElementalMastery.lua @@ -0,0 +1,17 @@ +--[[ + Script Name : Spells\Traditions\Resist\ElementalMastery.lua + Script Purpose : + Script Author : Zcoretri + Script Date : 2013.03.29 + Script Notes : +--]] + +function cast(Caster, Target, Modifier) + CurLevel = GetLevel(Target) + BonusAmt = CurLevel * Modifier + AddSpellBonus(Target, 203, BonusAmt) +end + +function remove(Caster, Target, Modifier) + RemoveSpellBonus(Target) +end \ No newline at end of file diff --git a/server/Spells/Traditions/Resists/EnvironmentalAdaptability.lua b/server/Spells/Traditions/Resists/EnvironmentalAdaptability.lua new file mode 100644 index 000000000..5159c8e70 --- /dev/null +++ b/server/Spells/Traditions/Resists/EnvironmentalAdaptability.lua @@ -0,0 +1,17 @@ +--[[ + Script Name : Spells\Traditions\Resist\EnvironmentalAdaptability.lua + Script Purpose : + Script Author : Zcoretri + Script Date : 2013.03.29 + Script Notes : +--]] + +function cast(Caster, Target, Modifier) + CurLevel = GetLevel(Target) + BonusAmt = CurLevel * Modifier + AddSpellBonus(Target, 203, BonusAmt) +end + +function remove(Caster, Target, Modifier) + RemoveSpellBonus(Target) +end \ No newline at end of file diff --git a/server/Spells/Traditions/Resists/FocusOfWarfare.lua b/server/Spells/Traditions/Resists/FocusOfWarfare.lua new file mode 100644 index 000000000..23b40a7ab --- /dev/null +++ b/server/Spells/Traditions/Resists/FocusOfWarfare.lua @@ -0,0 +1,17 @@ +--[[ + Script Name : Spells\Traditions\Resist\FocusOfWarfare.lua + Script Purpose : + Script Author : Zcoretri + Script Date : 2013.03.29 + Script Notes : +--]] + +function cast(Caster, Target, Modifier) + CurLevel = GetLevel(Target) + BonusAmt = CurLevel * Modifier + AddSpellBonus(Target, 203, BonusAmt) +end + +function remove(Caster, Target, Modifier) + RemoveSpellBonus(Target) +end \ No newline at end of file diff --git a/server/Spells/Traditions/Resists/FurCoat.lua b/server/Spells/Traditions/Resists/FurCoat.lua new file mode 100644 index 000000000..4f98629bc --- /dev/null +++ b/server/Spells/Traditions/Resists/FurCoat.lua @@ -0,0 +1,17 @@ +--[[ + Script Name : Spells\Traditions\Resist\FurCoat.lua + Script Purpose : + Script Author : Zcoretri + Script Date : 2013.03.29 + Script Notes : +--]] + +function cast(Caster, Target, Modifier) + CurLevel = GetLevel(Target) + BonusAmt = CurLevel * Modifier + AddSpellBonus(Target, 203, BonusAmt) +end + +function remove(Caster, Target, Modifier) + RemoveSpellBonus(Target) +end \ No newline at end of file diff --git a/server/Spells/Traditions/Resists/HardenedScales.lua b/server/Spells/Traditions/Resists/HardenedScales.lua new file mode 100644 index 000000000..c84651db0 --- /dev/null +++ b/server/Spells/Traditions/Resists/HardenedScales.lua @@ -0,0 +1,17 @@ +--[[ + Script Name : Spells\Traditions\Resist\HardenedScales.lua + Script Purpose : + Script Author : Zcoretri + Script Date : 2013.03.29 + Script Notes : +--]] + +function cast(Caster, Target, Modifier) + CurLevel = GetLevel(Target) + BonusAmt = CurLevel * Modifier + AddSpellBonus(Target, 203, BonusAmt) +end + +function remove(Caster, Target, Modifier) + RemoveSpellBonus(Target) +end \ No newline at end of file diff --git a/server/Spells/Traditions/Resists/HiddenTracks.lua b/server/Spells/Traditions/Resists/HiddenTracks.lua new file mode 100644 index 000000000..77b909f13 --- /dev/null +++ b/server/Spells/Traditions/Resists/HiddenTracks.lua @@ -0,0 +1,17 @@ +--[[ + Script Name : Spells\Traditions\Resist\HiddenTracks.lua + Script Purpose : + Script Author : Zcoretri + Script Date : 2013.03.29 + Script Notes : +--]] + +function cast(Caster, Target, Modifier) + CurLevel = GetLevel(Target) + BonusAmt = CurLevel * Modifier + AddSpellBonus(Target, 203, BonusAmt) +end + +function remove(Caster, Target, Modifier) + RemoveSpellBonus(Target) +end \ No newline at end of file diff --git a/server/Spells/Traditions/Resists/LeatherSkin.lua b/server/Spells/Traditions/Resists/LeatherSkin.lua new file mode 100644 index 000000000..4c420fa0d --- /dev/null +++ b/server/Spells/Traditions/Resists/LeatherSkin.lua @@ -0,0 +1,17 @@ +--[[ + Script Name : Spells\Traditions\Resist\LeatherSkin.lua + Script Purpose : + Script Author : Zcoretri + Script Date : 2013.03.29 + Script Notes : +--]] + +function cast(Caster, Target, Modifier) + CurLevel = GetLevel(Target) + BonusAmt = CurLevel * Modifier + AddSpellBonus(Target, 203, BonusAmt) +end + +function remove(Caster, Target, Modifier) + RemoveSpellBonus(Target) +end \ No newline at end of file diff --git a/server/Spells/Traditions/Resists/LightbringersProtection.lua b/server/Spells/Traditions/Resists/LightbringersProtection.lua new file mode 100644 index 000000000..518863c9a --- /dev/null +++ b/server/Spells/Traditions/Resists/LightbringersProtection.lua @@ -0,0 +1,17 @@ +--[[ + Script Name : Spells\Traditions\Resist\LightbringersProtection.lua + Script Purpose : + Script Author : Zcoretri + Script Date : 2013.03.29 + Script Notes : +--]] + +function cast(Caster, Target, Modifier) + CurLevel = GetLevel(Target) + BonusAmt = CurLevel * Modifier + AddSpellBonus(Target, 203, BonusAmt) +end + +function remove(Caster, Target, Modifier) + RemoveSpellBonus(Target) +end \ No newline at end of file diff --git a/server/Spells/Traditions/Resists/MagicPah.lua b/server/Spells/Traditions/Resists/MagicPah.lua new file mode 100644 index 000000000..1113735e4 --- /dev/null +++ b/server/Spells/Traditions/Resists/MagicPah.lua @@ -0,0 +1,17 @@ +--[[ + Script Name : Spells\Traditions\Resist\MagicPah.lua + Script Purpose : + Script Author : Zcoretri + Script Date : 2013.03.29 + Script Notes : +--]] + +function cast(Caster, Target, Modifier) + CurLevel = GetLevel(Target) + BonusAmt = CurLevel * Modifier + AddSpellBonus(Target, 203, BonusAmt) +end + +function remove(Caster, Target, Modifier) + RemoveSpellBonus(Target) +end \ No newline at end of file diff --git a/server/Spells/Traditions/Resists/MagicalProtection.lua b/server/Spells/Traditions/Resists/MagicalProtection.lua new file mode 100644 index 000000000..ff93b7976 --- /dev/null +++ b/server/Spells/Traditions/Resists/MagicalProtection.lua @@ -0,0 +1,17 @@ +--[[ + Script Name : Spells\Traditions\Resist\MagicalProtection.lua + Script Purpose : + Script Author : Zcoretri + Script Date : 2013.03.29 + Script Notes : +--]] + +function cast(Caster, Target, Modifier) + CurLevel = GetLevel(Target) + BonusAmt = CurLevel * Modifier + AddSpellBonus(Target, 203, BonusAmt) +end + +function remove(Caster, Target, Modifier) + RemoveSpellBonus(Target) +end \ No newline at end of file diff --git a/server/Spells/Traditions/Resists/OggokianStubbornness.lua b/server/Spells/Traditions/Resists/OggokianStubbornness.lua new file mode 100644 index 000000000..f4f14b2dd --- /dev/null +++ b/server/Spells/Traditions/Resists/OggokianStubbornness.lua @@ -0,0 +1,17 @@ +--[[ + Script Name : Spells\Traditions\Resist\OggokianStubbornness.lua + Script Purpose : + Script Author : Zcoretri + Script Date : 2013.03.29 + Script Notes : +--]] + +function cast(Caster, Target, Modifier) + CurLevel = GetLevel(Target) + BonusAmt = CurLevel * Modifier + AddSpellBonus(Target, 203, BonusAmt) +end + +function remove(Caster, Target, Modifier) + RemoveSpellBonus(Target) +end \ No newline at end of file diff --git a/server/Spells/Traditions/Resists/ProtectiveEyewear.lua b/server/Spells/Traditions/Resists/ProtectiveEyewear.lua new file mode 100644 index 000000000..4aed0341f --- /dev/null +++ b/server/Spells/Traditions/Resists/ProtectiveEyewear.lua @@ -0,0 +1,17 @@ +--[[ + Script Name : Spells\Traditions\Resist\ProtectiveEyewear.lua + Script Purpose : + Script Author : Zcoretri + Script Date : 2013.03.29 + Script Notes : +--]] + +function cast(Caster, Target, Modifier) + CurLevel = GetLevel(Target) + BonusAmt = CurLevel * Modifier + AddSpellBonus(Target, 203, BonusAmt) +end + +function remove(Caster, Target, Modifier) + RemoveSpellBonus(Target) +end \ No newline at end of file diff --git a/server/Spells/Traditions/Resists/PutridHide.lua b/server/Spells/Traditions/Resists/PutridHide.lua new file mode 100644 index 000000000..46be0ba06 --- /dev/null +++ b/server/Spells/Traditions/Resists/PutridHide.lua @@ -0,0 +1,17 @@ +--[[ + Script Name : Spells\Traditions\Resist\PutridHide.lua + Script Purpose : + Script Author : Zcoretri + Script Date : 2013.03.29 + Script Notes : +--]] + +function cast(Caster, Target, Modifier) + CurLevel = GetLevel(Target) + BonusAmt = CurLevel * Modifier + AddSpellBonus(Target, 203, BonusAmt) +end + +function remove(Caster, Target, Modifier) + RemoveSpellBonus(Target) +end \ No newline at end of file diff --git a/server/Spells/Traditions/Resists/RemedialWill.lua b/server/Spells/Traditions/Resists/RemedialWill.lua new file mode 100644 index 000000000..8d972b025 --- /dev/null +++ b/server/Spells/Traditions/Resists/RemedialWill.lua @@ -0,0 +1,17 @@ +--[[ + Script Name : Spells\Traditions\Resist\RemedialWill.lua + Script Purpose : + Script Author : Zcoretri + Script Date : 2013.03.29 + Script Notes : +--]] + +function cast(Caster, Target, Modifier) + CurLevel = GetLevel(Target) + BonusAmt = CurLevel * Modifier + AddSpellBonus(Target, 203, BonusAmt) +end + +function remove(Caster, Target, Modifier) + RemoveSpellBonus(Target) +end \ No newline at end of file diff --git a/server/Spells/Traditions/Resists/RivervalesProtection.lua b/server/Spells/Traditions/Resists/RivervalesProtection.lua new file mode 100644 index 000000000..21a7668b4 --- /dev/null +++ b/server/Spells/Traditions/Resists/RivervalesProtection.lua @@ -0,0 +1,17 @@ +--[[ + Script Name : Spells\Traditions\Resist\RivervalesProtection.lua + Script Purpose : + Script Author : Zcoretri + Script Date : 2013.03.29 + Script Notes : +--]] + +function cast(Caster, Target, Modifier) + CurLevel = GetLevel(Target) + BonusAmt = CurLevel * Modifier + AddSpellBonus(Target, 203, BonusAmt) +end + +function remove(Caster, Target, Modifier) + RemoveSpellBonus(Target) +end \ No newline at end of file diff --git a/server/Spells/Traditions/Resists/RobustMight.lua b/server/Spells/Traditions/Resists/RobustMight.lua new file mode 100644 index 000000000..6d0f444ab --- /dev/null +++ b/server/Spells/Traditions/Resists/RobustMight.lua @@ -0,0 +1,17 @@ +--[[ + Script Name : Spells\Traditions\Resist\RobustMight.lua + Script Purpose : + Script Author : Zcoretri + Script Date : 2013.03.29 + Script Notes : +--]] + +function cast(Caster, Target, Modifier) + CurLevel = GetLevel(Target) + BonusAmt = CurLevel * Modifier + AddSpellBonus(Target, 203, BonusAmt) +end + +function remove(Caster, Target, Modifier) + RemoveSpellBonus(Target) +end \ No newline at end of file diff --git a/server/Spells/Traditions/Resists/ShieldOfBark.lua b/server/Spells/Traditions/Resists/ShieldOfBark.lua new file mode 100644 index 000000000..5ae690255 --- /dev/null +++ b/server/Spells/Traditions/Resists/ShieldOfBark.lua @@ -0,0 +1,17 @@ +--[[ + Script Name : Spells\Traditions\Resist\ShieldOfBark.lua + Script Purpose : + Script Author : Zcoretri + Script Date : 2013.03.29 + Script Notes : +--]] + +function cast(Caster, Target, Modifier) + CurLevel = GetLevel(Target) + BonusAmt = CurLevel * Modifier + AddSpellBonus(Target, 203, BonusAmt) +end + +function remove(Caster, Target, Modifier) + RemoveSpellBonus(Target) +end \ No newline at end of file diff --git a/server/Spells/Traditions/Resists/ShieldOfNature.lua b/server/Spells/Traditions/Resists/ShieldOfNature.lua new file mode 100644 index 000000000..e50851b10 --- /dev/null +++ b/server/Spells/Traditions/Resists/ShieldOfNature.lua @@ -0,0 +1,17 @@ +--[[ + Script Name : Spells\Traditions\Resist\ShieldOfNature.lua + Script Purpose : + Script Author : Zcoretri + Script Date : 2013.03.29 + Script Notes : +--]] + +function cast(Caster, Target, Modifier) + CurLevel = GetLevel(Target) + BonusAmt = CurLevel * Modifier + AddSpellBonus(Target, 203, BonusAmt) +end + +function remove(Caster, Target, Modifier) + RemoveSpellBonus(Target) +end \ No newline at end of file diff --git a/server/Spells/Traditions/Resists/SlipperyHide.lua b/server/Spells/Traditions/Resists/SlipperyHide.lua new file mode 100644 index 000000000..a63dcbc76 --- /dev/null +++ b/server/Spells/Traditions/Resists/SlipperyHide.lua @@ -0,0 +1,17 @@ +--[[ + Script Name : Spells\Traditions\Resist\SlipperyHide.lua + Script Purpose : + Script Author : Zcoretri + Script Date : 2013.03.29 + Script Notes : +--]] + +function cast(Caster, Target, Modifier) + CurLevel = GetLevel(Target) + BonusAmt = CurLevel * Modifier + AddSpellBonus(Target, 203, BonusAmt) +end + +function remove(Caster, Target, Modifier) + RemoveSpellBonus(Target) +end \ No newline at end of file diff --git a/server/Spells/Traditions/Resists/Spirituality.lua b/server/Spells/Traditions/Resists/Spirituality.lua new file mode 100644 index 000000000..74d918e49 --- /dev/null +++ b/server/Spells/Traditions/Resists/Spirituality.lua @@ -0,0 +1,17 @@ +--[[ + Script Name : Spells\Traditions\Resist\Spirituality.lua + Script Purpose : + Script Author : Zcoretri + Script Date : 2013.03.29 + Script Notes : +--]] + +function cast(Caster, Target, Modifier) + CurLevel = GetLevel(Target) + BonusAmt = CurLevel * Modifier + AddSpellBonus(Target, 203, BonusAmt) +end + +function remove(Caster, Target, Modifier) + RemoveSpellBonus(Target) +end \ No newline at end of file diff --git a/server/Spells/Traditions/Resists/StrongBlood.lua b/server/Spells/Traditions/Resists/StrongBlood.lua new file mode 100644 index 000000000..bcd8a1986 --- /dev/null +++ b/server/Spells/Traditions/Resists/StrongBlood.lua @@ -0,0 +1,17 @@ +--[[ + Script Name : Spells\Traditions\Resist\StrongBlood.lua + Script Purpose : + Script Author : Zcoretri + Script Date : 2013.03.29 + Script Notes : +--]] + +function cast(Caster, Target, Modifier) + CurLevel = GetLevel(Target) + BonusAmt = CurLevel * Modifier + AddSpellBonus(Target, 203, BonusAmt) +end + +function remove(Caster, Target, Modifier) + RemoveSpellBonus(Target) +end \ No newline at end of file diff --git a/server/Spells/Traditions/Resists/TenetOfTakishHiz.lua b/server/Spells/Traditions/Resists/TenetOfTakishHiz.lua new file mode 100644 index 000000000..496cd2d67 --- /dev/null +++ b/server/Spells/Traditions/Resists/TenetOfTakishHiz.lua @@ -0,0 +1,17 @@ +--[[ + Script Name : Spells\Traditions\Resist\TenetOfTakishHiz.lua + Script Purpose : + Script Author : Zcoretri + Script Date : 2013.03.29 + Script Notes : +--]] + +function cast(Caster, Target, Modifier) + CurLevel = GetLevel(Target) + BonusAmt = CurLevel * Modifier + AddSpellBonus(Target, 203, BonusAmt) +end + +function remove(Caster, Target, Modifier) + RemoveSpellBonus(Target) +end \ No newline at end of file diff --git a/server/Spells/Traditions/Resists/ToughScales.lua b/server/Spells/Traditions/Resists/ToughScales.lua new file mode 100644 index 000000000..75276d827 --- /dev/null +++ b/server/Spells/Traditions/Resists/ToughScales.lua @@ -0,0 +1,17 @@ +--[[ + Script Name : Spells\Traditions\Resist\ToughScales.lua + Script Purpose : + Script Author : Zcoretri + Script Date : 2013.03.29 + Script Notes : +--]] + +function cast(Caster, Target, Modifier) + CurLevel = GetLevel(Target) + BonusAmt = CurLevel * Modifier + AddSpellBonus(Target, 203, BonusAmt) +end + +function remove(Caster, Target, Modifier) + RemoveSpellBonus(Target) +end \ No newline at end of file diff --git a/server/Spells/Traditions/Resists/ToxicIntimacy.lua b/server/Spells/Traditions/Resists/ToxicIntimacy.lua new file mode 100644 index 000000000..284e9b582 --- /dev/null +++ b/server/Spells/Traditions/Resists/ToxicIntimacy.lua @@ -0,0 +1,17 @@ +--[[ + Script Name : Spells\Traditions\Resist\ToxicIntimacy.lua + Script Purpose : + Script Author : Zcoretri + Script Date : 2013.02.01 + Script Notes : Increases Noxious mitigation based on level +--]] + +function cast(Caster, Target, Modifier) + CurLevel = GetLevel(Target) + BonusAmt = CurLevel * Modifier + AddSpellBonus(Target, 202, BonusAmt) +end + +function remove(Caster, Target, Modifier) + RemoveSpellBonus(Target) +end \ No newline at end of file diff --git a/server/Spells/Traditions/Resists/ToxicProtection.lua b/server/Spells/Traditions/Resists/ToxicProtection.lua new file mode 100644 index 000000000..5b223f2dc --- /dev/null +++ b/server/Spells/Traditions/Resists/ToxicProtection.lua @@ -0,0 +1,17 @@ +--[[ + Script Name : Spells\Traditions\Resist\ToxicProtection.lua + Script Purpose : + Script Author : Zcoretri + Script Date : 2013.03.29 + Script Notes : +--]] + +function cast(Caster, Target, Modifier) + CurLevel = GetLevel(Target) + BonusAmt = CurLevel * Modifier + AddSpellBonus(Target, 203, BonusAmt) +end + +function remove(Caster, Target, Modifier) + RemoveSpellBonus(Target) +end \ No newline at end of file diff --git a/server/Spells/Traditions/Resists/TundraRuggedness.lua b/server/Spells/Traditions/Resists/TundraRuggedness.lua new file mode 100644 index 000000000..e8c4437ff --- /dev/null +++ b/server/Spells/Traditions/Resists/TundraRuggedness.lua @@ -0,0 +1,17 @@ +--[[ + Script Name : Spells\Traditions\Resist\TundraRuggedness.lua + Script Purpose : + Script Author : Zcoretri + Script Date : 2013.01.29 + Script Notes : Increases physical mitigation based on level +--]] + +function cast(Caster, Target, Modifier) + CurLevel = GetLevel(Target) + BonusAmt = CurLevel * Modifier + AddSpellBonus(Target, 200, BonusAmt) +end + +function remove(Caster, Target, Modifier) + RemoveSpellBonus(Target) +end \ No newline at end of file diff --git a/server/Spells/Traditions/Resists/UndeadResilience.lua b/server/Spells/Traditions/Resists/UndeadResilience.lua new file mode 100644 index 000000000..31e8eab28 --- /dev/null +++ b/server/Spells/Traditions/Resists/UndeadResilience.lua @@ -0,0 +1,17 @@ +--[[ + Script Name : Spells\Traditions\Resist\UndeadResilience.lua + Script Purpose : + Script Author : Zcoretri + Script Date : 2013.03.29 + Script Notes : +--]] + +function cast(Caster, Target, Modifier) + CurLevel = GetLevel(Target) + BonusAmt = CurLevel * Modifier + AddSpellBonus(Target, 203, BonusAmt) +end + +function remove(Caster, Target, Modifier) + RemoveSpellBonus(Target) +end \ No newline at end of file diff --git a/server/Spells/Traditions/RockThrower.lua b/server/Spells/Traditions/RockThrower.lua new file mode 100644 index 000000000..7946d19b2 --- /dev/null +++ b/server/Spells/Traditions/RockThrower.lua @@ -0,0 +1,12 @@ +--[[ + Script Name : {generic header} + Script Purpose : + Script Author : John Adams + Script Date : 2012.09.08 + Script Notes : temp script to stop world errors +--]] + +function cast(Caster, Target) + + +end diff --git a/server/Spells/Traditions/RodentReflexes.lua b/server/Spells/Traditions/RodentReflexes.lua new file mode 100644 index 000000000..7946d19b2 --- /dev/null +++ b/server/Spells/Traditions/RodentReflexes.lua @@ -0,0 +1,12 @@ +--[[ + Script Name : {generic header} + Script Purpose : + Script Author : John Adams + Script Date : 2012.09.08 + Script Notes : temp script to stop world errors +--]] + +function cast(Caster, Target) + + +end diff --git a/server/Spells/Traditions/RushintoBattle.lua b/server/Spells/Traditions/RushintoBattle.lua new file mode 100644 index 000000000..7946d19b2 --- /dev/null +++ b/server/Spells/Traditions/RushintoBattle.lua @@ -0,0 +1,12 @@ +--[[ + Script Name : {generic header} + Script Purpose : + Script Author : John Adams + Script Date : 2012.09.08 + Script Notes : temp script to stop world errors +--]] + +function cast(Caster, Target) + + +end diff --git a/server/Spells/Traditions/ShadowLurker.lua b/server/Spells/Traditions/ShadowLurker.lua new file mode 100644 index 000000000..7946d19b2 --- /dev/null +++ b/server/Spells/Traditions/ShadowLurker.lua @@ -0,0 +1,12 @@ +--[[ + Script Name : {generic header} + Script Purpose : + Script Author : John Adams + Script Date : 2012.09.08 + Script Notes : temp script to stop world errors +--]] + +function cast(Caster, Target) + + +end diff --git a/server/Spells/Traditions/ShieldofNature.lua b/server/Spells/Traditions/ShieldofNature.lua new file mode 100644 index 000000000..7946d19b2 --- /dev/null +++ b/server/Spells/Traditions/ShieldofNature.lua @@ -0,0 +1,12 @@ +--[[ + Script Name : {generic header} + Script Purpose : + Script Author : John Adams + Script Date : 2012.09.08 + Script Notes : temp script to stop world errors +--]] + +function cast(Caster, Target) + + +end diff --git a/server/Spells/Traditions/ShoulderSlam.lua b/server/Spells/Traditions/ShoulderSlam.lua new file mode 100644 index 000000000..7946d19b2 --- /dev/null +++ b/server/Spells/Traditions/ShoulderSlam.lua @@ -0,0 +1,12 @@ +--[[ + Script Name : {generic header} + Script Purpose : + Script Author : John Adams + Script Date : 2012.09.08 + Script Notes : temp script to stop world errors +--]] + +function cast(Caster, Target) + + +end diff --git a/server/Spells/Traditions/SoulMending.lua b/server/Spells/Traditions/SoulMending.lua new file mode 100644 index 000000000..7946d19b2 --- /dev/null +++ b/server/Spells/Traditions/SoulMending.lua @@ -0,0 +1,12 @@ +--[[ + Script Name : {generic header} + Script Purpose : + Script Author : John Adams + Script Date : 2012.09.08 + Script Notes : temp script to stop world errors +--]] + +function cast(Caster, Target) + + +end diff --git a/server/Spells/Traditions/Spirituality.lua b/server/Spells/Traditions/Spirituality.lua new file mode 100644 index 000000000..7946d19b2 --- /dev/null +++ b/server/Spells/Traditions/Spirituality.lua @@ -0,0 +1,12 @@ +--[[ + Script Name : {generic header} + Script Purpose : + Script Author : John Adams + Script Date : 2012.09.08 + Script Notes : temp script to stop world errors +--]] + +function cast(Caster, Target) + + +end diff --git a/server/Spells/Traditions/SprintIntoBattle.lua b/server/Spells/Traditions/SprintIntoBattle.lua new file mode 100644 index 000000000..7946d19b2 --- /dev/null +++ b/server/Spells/Traditions/SprintIntoBattle.lua @@ -0,0 +1,12 @@ +--[[ + Script Name : {generic header} + Script Purpose : + Script Author : John Adams + Script Date : 2012.09.08 + Script Notes : temp script to stop world errors +--]] + +function cast(Caster, Target) + + +end diff --git a/server/Spells/Traditions/SteamfontsMagicalBarrier.lua b/server/Spells/Traditions/SteamfontsMagicalBarrier.lua new file mode 100644 index 000000000..7946d19b2 --- /dev/null +++ b/server/Spells/Traditions/SteamfontsMagicalBarrier.lua @@ -0,0 +1,12 @@ +--[[ + Script Name : {generic header} + Script Purpose : + Script Author : John Adams + Script Date : 2012.09.08 + Script Notes : temp script to stop world errors +--]] + +function cast(Caster, Target) + + +end diff --git a/server/Spells/Traditions/StreetThug.lua b/server/Spells/Traditions/StreetThug.lua new file mode 100644 index 000000000..7946d19b2 --- /dev/null +++ b/server/Spells/Traditions/StreetThug.lua @@ -0,0 +1,12 @@ +--[[ + Script Name : {generic header} + Script Purpose : + Script Author : John Adams + Script Date : 2012.09.08 + Script Notes : temp script to stop world errors +--]] + +function cast(Caster, Target) + + +end diff --git a/server/Spells/Traditions/Stride.lua b/server/Spells/Traditions/Stride.lua new file mode 100644 index 000000000..7946d19b2 --- /dev/null +++ b/server/Spells/Traditions/Stride.lua @@ -0,0 +1,12 @@ +--[[ + Script Name : {generic header} + Script Purpose : + Script Author : John Adams + Script Date : 2012.09.08 + Script Notes : temp script to stop world errors +--]] + +function cast(Caster, Target) + + +end diff --git a/server/Spells/Traditions/StrongHeart.lua b/server/Spells/Traditions/StrongHeart.lua new file mode 100644 index 000000000..7946d19b2 --- /dev/null +++ b/server/Spells/Traditions/StrongHeart.lua @@ -0,0 +1,12 @@ +--[[ + Script Name : {generic header} + Script Purpose : + Script Author : John Adams + Script Date : 2012.09.08 + Script Notes : temp script to stop world errors +--]] + +function cast(Caster, Target) + + +end diff --git a/server/Spells/Traditions/SummonFilthyWater.lua b/server/Spells/Traditions/SummonFilthyWater.lua new file mode 100644 index 000000000..7946d19b2 --- /dev/null +++ b/server/Spells/Traditions/SummonFilthyWater.lua @@ -0,0 +1,12 @@ +--[[ + Script Name : {generic header} + Script Purpose : + Script Author : John Adams + Script Date : 2012.09.08 + Script Notes : temp script to stop world errors +--]] + +function cast(Caster, Target) + + +end diff --git a/server/Spells/Traditions/SummonHalasianBrew.lua b/server/Spells/Traditions/SummonHalasianBrew.lua new file mode 100644 index 000000000..7946d19b2 --- /dev/null +++ b/server/Spells/Traditions/SummonHalasianBrew.lua @@ -0,0 +1,12 @@ +--[[ + Script Name : {generic header} + Script Purpose : + Script Author : John Adams + Script Date : 2012.09.08 + Script Notes : temp script to stop world errors +--]] + +function cast(Caster, Target) + + +end diff --git a/server/Spells/Traditions/SwampBreath.lua b/server/Spells/Traditions/SwampBreath.lua new file mode 100644 index 000000000..7946d19b2 --- /dev/null +++ b/server/Spells/Traditions/SwampBreath.lua @@ -0,0 +1,12 @@ +--[[ + Script Name : {generic header} + Script Purpose : + Script Author : John Adams + Script Date : 2012.09.08 + Script Notes : temp script to stop world errors +--]] + +function cast(Caster, Target) + + +end diff --git a/server/Spells/Traditions/TastyThings.lua b/server/Spells/Traditions/TastyThings.lua new file mode 100644 index 000000000..7946d19b2 --- /dev/null +++ b/server/Spells/Traditions/TastyThings.lua @@ -0,0 +1,12 @@ +--[[ + Script Name : {generic header} + Script Purpose : + Script Author : John Adams + Script Date : 2012.09.08 + Script Notes : temp script to stop world errors +--]] + +function cast(Caster, Target) + + +end diff --git a/server/Spells/Traditions/TendWounds.lua b/server/Spells/Traditions/TendWounds.lua new file mode 100644 index 000000000..7946d19b2 --- /dev/null +++ b/server/Spells/Traditions/TendWounds.lua @@ -0,0 +1,12 @@ +--[[ + Script Name : {generic header} + Script Purpose : + Script Author : John Adams + Script Date : 2012.09.08 + Script Notes : temp script to stop world errors +--]] + +function cast(Caster, Target) + + +end diff --git a/server/Spells/Traditions/TenetofTakish`Hiz.lua b/server/Spells/Traditions/TenetofTakish`Hiz.lua new file mode 100644 index 000000000..7946d19b2 --- /dev/null +++ b/server/Spells/Traditions/TenetofTakish`Hiz.lua @@ -0,0 +1,12 @@ +--[[ + Script Name : {generic header} + Script Purpose : + Script Author : John Adams + Script Date : 2012.09.08 + Script Notes : temp script to stop world errors +--]] + +function cast(Caster, Target) + + +end diff --git a/server/Spells/Traditions/TheFocisMagicalProtection.lua b/server/Spells/Traditions/TheFocisMagicalProtection.lua new file mode 100644 index 000000000..7946d19b2 --- /dev/null +++ b/server/Spells/Traditions/TheFocisMagicalProtection.lua @@ -0,0 +1,12 @@ +--[[ + Script Name : {generic header} + Script Purpose : + Script Author : John Adams + Script Date : 2012.09.08 + Script Notes : temp script to stop world errors +--]] + +function cast(Caster, Target) + + +end diff --git a/server/Spells/Traditions/ThulesGuidance.lua b/server/Spells/Traditions/ThulesGuidance.lua new file mode 100644 index 000000000..7946d19b2 --- /dev/null +++ b/server/Spells/Traditions/ThulesGuidance.lua @@ -0,0 +1,12 @@ +--[[ + Script Name : {generic header} + Script Purpose : + Script Author : John Adams + Script Date : 2012.09.08 + Script Notes : temp script to stop world errors +--]] + +function cast(Caster, Target) + + +end diff --git a/server/Spells/Traditions/ToxicProtection.lua b/server/Spells/Traditions/ToxicProtection.lua new file mode 100644 index 000000000..7946d19b2 --- /dev/null +++ b/server/Spells/Traditions/ToxicProtection.lua @@ -0,0 +1,12 @@ +--[[ + Script Name : {generic header} + Script Purpose : + Script Author : John Adams + Script Date : 2012.09.08 + Script Notes : temp script to stop world errors +--]] + +function cast(Caster, Target) + + +end diff --git a/server/Spells/Traditions/Tradeskill/AgileCreations.lua b/server/Spells/Traditions/Tradeskill/AgileCreations.lua new file mode 100644 index 000000000..2f987e05e --- /dev/null +++ b/server/Spells/Traditions/Tradeskill/AgileCreations.lua @@ -0,0 +1,15 @@ +--[[ + Script Name : Spells\Tradidtions\Tradeskill\AgileCreations.lua + Script Purpose : + Script Author : Zcoretri + Script Date : 2013.04.02 + Script Notes : +--]] + +function cast(Caster, Target, Bonus) + +end + +function remove(Caster, Target, Bonus) + +end \ No newline at end of file diff --git a/server/Spells/Traditions/Tradeskill/AlchemicIngenuity.lua b/server/Spells/Traditions/Tradeskill/AlchemicIngenuity.lua new file mode 100644 index 000000000..f5339ee8d --- /dev/null +++ b/server/Spells/Traditions/Tradeskill/AlchemicIngenuity.lua @@ -0,0 +1,15 @@ +--[[ + Script Name : Spells\Tradidtions\Tradeskill\AlchemicIngenuity.lua + Script Purpose : + Script Author : Zcoretri + Script Date : 2013.04.02 + Script Notes : +--]] + +function cast(Caster, Target, Bonus) + +end + +function remove(Caster, Target, Bonus) + +end \ No newline at end of file diff --git a/server/Spells/Traditions/Tradeskill/ArcaneUnderstanding.lua b/server/Spells/Traditions/Tradeskill/ArcaneUnderstanding.lua new file mode 100644 index 000000000..5ffc052e9 --- /dev/null +++ b/server/Spells/Traditions/Tradeskill/ArcaneUnderstanding.lua @@ -0,0 +1,15 @@ +--[[ + Script Name : Spells\Tradidtions\Tradeskill\ArcaneUnderstanding.lua + Script Purpose : + Script Author : Zcoretri + Script Date : 2013.04.02 + Script Notes : +--]] + +function cast(Caster, Target, Bonus) + +end + +function remove(Caster, Target, Bonus) + +end \ No newline at end of file diff --git a/server/Spells/Traditions/Tradeskill/AttentionToDetails.lua b/server/Spells/Traditions/Tradeskill/AttentionToDetails.lua new file mode 100644 index 000000000..7d1fec870 --- /dev/null +++ b/server/Spells/Traditions/Tradeskill/AttentionToDetails.lua @@ -0,0 +1,15 @@ +--[[ + Script Name : Spells\Tradidtions\Tradeskill\AttentionToDetails.lua + Script Purpose : + Script Author : Zcoretri + Script Date : 2013.04.02 + Script Notes : +--]] + +function cast(Caster, Target, Bonus) + +end + +function remove(Caster, Target, Bonus) + +end \ No newline at end of file diff --git a/server/Spells/Traditions/Tradeskill/AyrDalAdornment.lua b/server/Spells/Traditions/Tradeskill/AyrDalAdornment.lua new file mode 100644 index 000000000..21d28a826 --- /dev/null +++ b/server/Spells/Traditions/Tradeskill/AyrDalAdornment.lua @@ -0,0 +1,15 @@ +--[[ + Script Name : Spells\Tradidtions\Tradeskill\AyrDalAdornment.lua + Script Purpose : + Script Author : Zcoretri + Script Date : 2013.04.02 + Script Notes : +--]] + +function cast(Caster, Target, Bonus) + +end + +function remove(Caster, Target, Bonus) + +end \ No newline at end of file diff --git a/server/Spells/Traditions/Tradeskill/BreakingDownTheTrash.lua b/server/Spells/Traditions/Tradeskill/BreakingDownTheTrash.lua new file mode 100644 index 000000000..cc66fc22d --- /dev/null +++ b/server/Spells/Traditions/Tradeskill/BreakingDownTheTrash.lua @@ -0,0 +1,15 @@ +--[[ + Script Name : Spells\Tradidtions\Tradeskill\BreakingDownTheTrash.lua + Script Purpose : + Script Author : Zcoretri + Script Date : 2013.04.02 + Script Notes : +--]] + +function cast(Caster, Target, Bonus) + +end + +function remove(Caster, Target, Bonus) + +end \ No newline at end of file diff --git a/server/Spells/Traditions/Tradeskill/BrellsBlessing.lua b/server/Spells/Traditions/Tradeskill/BrellsBlessing.lua new file mode 100644 index 000000000..3fd829341 --- /dev/null +++ b/server/Spells/Traditions/Tradeskill/BrellsBlessing.lua @@ -0,0 +1,15 @@ +--[[ + Script Name : Spells\Tradidtions\Tradeskill\BrellsBlessing.lua + Script Purpose : + Script Author : Zcoretri + Script Date : 2013.04.02 + Script Notes : +--]] + +function cast(Caster, Target, Bonus) + +end + +function remove(Caster, Target, Bonus) + +end \ No newline at end of file diff --git a/server/Spells/Traditions/Tradeskill/Brewmaster.lua b/server/Spells/Traditions/Tradeskill/Brewmaster.lua new file mode 100644 index 000000000..8191052cd --- /dev/null +++ b/server/Spells/Traditions/Tradeskill/Brewmaster.lua @@ -0,0 +1,15 @@ +--[[ + Script Name : Spells\Tradidtions\Tradeskill\Brewmaster.lua + Script Purpose : + Script Author : Zcoretri + Script Date : 2013.02.01 + Script Notes : Increases Artistry by 5.0 +--]] + +function cast(Caster, Target, Bonus) + AddSkillBonus(Target, 3881305672, Bonus) +end + +function remove(Caster, Target, Bonus) + RemoveSkillBonus(Target) +end \ No newline at end of file diff --git a/server/Spells/Traditions/Tradeskill/CarpentersTouch.lua b/server/Spells/Traditions/Tradeskill/CarpentersTouch.lua new file mode 100644 index 000000000..195b360f8 --- /dev/null +++ b/server/Spells/Traditions/Tradeskill/CarpentersTouch.lua @@ -0,0 +1,15 @@ +--[[ + Script Name : Spells\Tradidtions\Tradeskill\CarpentersTouch.lua + Script Purpose : + Script Author : Zcoretri + Script Date : 2013.04.02 + Script Notes : +--]] + +function cast(Caster, Target, Bonus) + +end + +function remove(Caster, Target, Bonus) + +end \ No newline at end of file diff --git a/server/Spells/Traditions/Tradeskill/ChasingBallsOfYarn.lua b/server/Spells/Traditions/Tradeskill/ChasingBallsOfYarn.lua new file mode 100644 index 000000000..51fa5abb7 --- /dev/null +++ b/server/Spells/Traditions/Tradeskill/ChasingBallsOfYarn.lua @@ -0,0 +1,15 @@ +--[[ + Script Name : Spells\Tradidtions\Tradeskill\ChasingBallsOfYarn.lua + Script Purpose : + Script Author : Zcoretri + Script Date : 2013.04.02 + Script Notes : +--]] + +function cast(Caster, Target, Bonus) + +end + +function remove(Caster, Target, Bonus) + +end \ No newline at end of file diff --git a/server/Spells/Traditions/Tradeskill/ChemicalCalculations.lua b/server/Spells/Traditions/Tradeskill/ChemicalCalculations.lua new file mode 100644 index 000000000..c7ae96d43 --- /dev/null +++ b/server/Spells/Traditions/Tradeskill/ChemicalCalculations.lua @@ -0,0 +1,15 @@ +--[[ + Script Name : Spells\Tradidtions\Tradeskill\ChemicalCalculations.lua + Script Purpose : + Script Author : Zcoretri + Script Date : 2013.04.02 + Script Notes : +--]] + +function cast(Caster, Target, Bonus) + +end + +function remove(Caster, Target, Bonus) + +end \ No newline at end of file diff --git a/server/Spells/Traditions/Tradeskill/Chemist.lua b/server/Spells/Traditions/Tradeskill/Chemist.lua new file mode 100644 index 000000000..9c915c45d --- /dev/null +++ b/server/Spells/Traditions/Tradeskill/Chemist.lua @@ -0,0 +1,15 @@ +--[[ + Script Name : Spells\Tradidtions\Tradeskill\Chemist.lua + Script Purpose : + Script Author : Zcoretri + Script Date : 2013.04.02 + Script Notes : +--]] + +function cast(Caster, Target, Bonus) + +end + +function remove(Caster, Target, Bonus) + +end \ No newline at end of file diff --git a/server/Spells/Traditions/Tradeskill/Clothier.lua b/server/Spells/Traditions/Tradeskill/Clothier.lua new file mode 100644 index 000000000..0fd4bc207 --- /dev/null +++ b/server/Spells/Traditions/Tradeskill/Clothier.lua @@ -0,0 +1,15 @@ +--[[ + Script Name : Spells\Tradidtions\Tradeskill\Clothier.lua + Script Purpose : + Script Author : Zcoretri + Script Date : 2013.04.02 + Script Notes : +--]] + +function cast(Caster, Target, Bonus) + +end + +function remove(Caster, Target, Bonus) + +end \ No newline at end of file diff --git a/server/Spells/Traditions/Tradeskill/CraftyConcentrations.lua b/server/Spells/Traditions/Tradeskill/CraftyConcentrations.lua new file mode 100644 index 000000000..646f6ba85 --- /dev/null +++ b/server/Spells/Traditions/Tradeskill/CraftyConcentrations.lua @@ -0,0 +1,15 @@ +--[[ + Script Name : Spells\Tradidtions\Tradeskill\CraftyConcentrations.lua + Script Purpose : + Script Author : Zcoretri + Script Date : 2013.04.02 + Script Notes : +--]] + +function cast(Caster, Target, Bonus) + +end + +function remove(Caster, Target, Bonus) + +end \ No newline at end of file diff --git a/server/Spells/Traditions/Tradeskill/DarkArmament.lua b/server/Spells/Traditions/Tradeskill/DarkArmament.lua new file mode 100644 index 000000000..dbbef15e5 --- /dev/null +++ b/server/Spells/Traditions/Tradeskill/DarkArmament.lua @@ -0,0 +1,15 @@ +--[[ + Script Name : Spells\Tradidtions\Tradeskill\DarkArmament.lua + Script Purpose : + Script Author : Zcoretri + Script Date : 2013.02.01 + Script Notes : Increases Metal Shaping by 5.0 +--]] + +function cast(Caster, Target, Bonus) + AddSkillBonus(Target, 3108933728, Bonus) +end + +function remove(Caster, Target, Bonus) + RemoveSkillBonus(Target) +end \ No newline at end of file diff --git a/server/Spells/Traditions/Tradeskill/DarkMedicine.lua b/server/Spells/Traditions/Tradeskill/DarkMedicine.lua new file mode 100644 index 000000000..f0bc6c6ca --- /dev/null +++ b/server/Spells/Traditions/Tradeskill/DarkMedicine.lua @@ -0,0 +1,15 @@ +--[[ + Script Name : Spells\Tradidtions\Tradeskill\DarkMedicine.lua + Script Purpose : + Script Author : Zcoretri + Script Date : 2013.04.02 + Script Notes : +--]] + +function cast(Caster, Target, Bonus) + +end + +function remove(Caster, Target, Bonus) + +end \ No newline at end of file diff --git a/server/Spells/Traditions/Tradeskill/DarkPerfectionist.lua b/server/Spells/Traditions/Tradeskill/DarkPerfectionist.lua new file mode 100644 index 000000000..42d7844dd --- /dev/null +++ b/server/Spells/Traditions/Tradeskill/DarkPerfectionist.lua @@ -0,0 +1,15 @@ +--[[ + Script Name : Spells\Tradidtions\Tradeskill\DarkPerfectionist.lua + Script Purpose : + Script Author : Zcoretri + Script Date : 2013.04.02 + Script Notes : +--]] + +function cast(Caster, Target, Bonus) + +end + +function remove(Caster, Target, Bonus) + +end \ No newline at end of file diff --git a/server/Spells/Traditions/Tradeskill/DexterousCreations.lua b/server/Spells/Traditions/Tradeskill/DexterousCreations.lua new file mode 100644 index 000000000..32e83f36b --- /dev/null +++ b/server/Spells/Traditions/Tradeskill/DexterousCreations.lua @@ -0,0 +1,15 @@ +--[[ + Script Name : Spells\Tradidtions\Tradeskill\DextrousCreations.lua + Script Purpose : + Script Author : Zcoretri + Script Date : 2013.04.02 + Script Notes : +--]] + +function cast(Caster, Target, Bonus) + +end + +function remove(Caster, Target, Bonus) + +end \ No newline at end of file diff --git a/server/Spells/Traditions/Tradeskill/Diversity.lua b/server/Spells/Traditions/Tradeskill/Diversity.lua new file mode 100644 index 000000000..36f16a2a8 --- /dev/null +++ b/server/Spells/Traditions/Tradeskill/Diversity.lua @@ -0,0 +1,15 @@ +--[[ + Script Name : Spells\Tradidtions\Tradeskill\Diversity.lua + Script Purpose : + Script Author : Zcoretri + Script Date : 2013.04.02 + Script Notes : +--]] + +function cast(Caster, Target, Bonus) + +end + +function remove(Caster, Target, Bonus) + +end \ No newline at end of file diff --git a/server/Spells/Traditions/Tradeskill/DurableGoods.lua b/server/Spells/Traditions/Tradeskill/DurableGoods.lua new file mode 100644 index 000000000..5f440b846 --- /dev/null +++ b/server/Spells/Traditions/Tradeskill/DurableGoods.lua @@ -0,0 +1,15 @@ +--[[ + Script Name : Spells\Tradidtions\Tradeskill\DurableGoods.lua + Script Purpose : + Script Author : Zcoretri + Script Date : 2013.02.01 + Script Notes : Increases Durability per round by 2.0 +--]] + +function cast(Caster, Target, DuraMod) + +end + +function remove(Caster, Target, DuraMod) + +end \ No newline at end of file diff --git a/server/Spells/Traditions/Tradeskill/DwarvenCraftsmanship.lua b/server/Spells/Traditions/Tradeskill/DwarvenCraftsmanship.lua new file mode 100644 index 000000000..b2366d673 --- /dev/null +++ b/server/Spells/Traditions/Tradeskill/DwarvenCraftsmanship.lua @@ -0,0 +1,15 @@ +--[[ + Script Name : Spells\Tradidtions\Tradeskill\DwarvenCraftsmenship.lua + Script Purpose : + Script Author : Zcoretri + Script Date : 2013.04.02 + Script Notes : +--]] + +function cast(Caster, Target, Bonus) + +end + +function remove(Caster, Target, Bonus) + +end \ No newline at end of file diff --git a/server/Spells/Traditions/Tradeskill/DwarvenDurability.lua b/server/Spells/Traditions/Tradeskill/DwarvenDurability.lua new file mode 100644 index 000000000..85465252f --- /dev/null +++ b/server/Spells/Traditions/Tradeskill/DwarvenDurability.lua @@ -0,0 +1,15 @@ +--[[ + Script Name : Spells\Tradidtions\Tradeskill\DwarvenDurability.lua + Script Purpose : + Script Author : Zcoretri + Script Date : 2013.04.02 + Script Notes : +--]] + +function cast(Caster, Target, Bonus) + +end + +function remove(Caster, Target, Bonus) + +end \ No newline at end of file diff --git a/server/Spells/Traditions/Tradeskill/EsotericStudy.lua b/server/Spells/Traditions/Tradeskill/EsotericStudy.lua new file mode 100644 index 000000000..92f5bf400 --- /dev/null +++ b/server/Spells/Traditions/Tradeskill/EsotericStudy.lua @@ -0,0 +1,15 @@ +--[[ + Script Name : Spells\Tradidtions\Tradeskill\EsotericStudy.lua + Script Purpose : + Script Author : Zcoretri + Script Date : 2013.04.02 + Script Notes : +--]] + +function cast(Caster, Target, Bonus) + +end + +function remove(Caster, Target, Bonus) + +end \ No newline at end of file diff --git a/server/Spells/Traditions/Tradeskill/Excellence.lua b/server/Spells/Traditions/Tradeskill/Excellence.lua new file mode 100644 index 000000000..f20748b4b --- /dev/null +++ b/server/Spells/Traditions/Tradeskill/Excellence.lua @@ -0,0 +1,15 @@ +--[[ + Script Name : Spells\Tradidtions\Tradeskill\Excellence.lua + Script Purpose : + Script Author : Zcoretri + Script Date : 2013.04.02 + Script Notes : +--]] + +function cast(Caster, Target, Bonus) + +end + +function remove(Caster, Target, Bonus) + +end \ No newline at end of file diff --git a/server/Spells/Traditions/Tradeskill/ExperimentalTechnique.lua b/server/Spells/Traditions/Tradeskill/ExperimentalTechnique.lua new file mode 100644 index 000000000..122145cad --- /dev/null +++ b/server/Spells/Traditions/Tradeskill/ExperimentalTechnique.lua @@ -0,0 +1,15 @@ +--[[ + Script Name : Spells\Tradidtions\Tradeskill\ExperimentalTechnique.lua + Script Purpose : + Script Author : Zcoretri + Script Date : 2013.04.02 + Script Notes : +--]] + +function cast(Caster, Target, Bonus) + +end + +function remove(Caster, Target, Bonus) + +end \ No newline at end of file diff --git a/server/Spells/Traditions/Tradeskill/FaydwerFashions.lua b/server/Spells/Traditions/Tradeskill/FaydwerFashions.lua new file mode 100644 index 000000000..8d33260f2 --- /dev/null +++ b/server/Spells/Traditions/Tradeskill/FaydwerFashions.lua @@ -0,0 +1,15 @@ +--[[ + Script Name : Spells\Tradidtions\Tradeskill\FaydwerFashions.lua + Script Purpose : + Script Author : Zcoretri + Script Date : 2013.04.02 + Script Notes : +--]] + +function cast(Caster, Target, Bonus) + +end + +function remove(Caster, Target, Bonus) + +end \ No newline at end of file diff --git a/server/Spells/Traditions/Tradeskill/FervorOfMarr.lua b/server/Spells/Traditions/Tradeskill/FervorOfMarr.lua new file mode 100644 index 000000000..960581365 --- /dev/null +++ b/server/Spells/Traditions/Tradeskill/FervorOfMarr.lua @@ -0,0 +1,15 @@ +--[[ + Script Name : Spells\Tradidtions\Tradeskill\FervorOfMarr.lua + Script Purpose : + Script Author : Zcoretri + Script Date : 2013.04.02 + Script Notes : +--]] + +function cast(Caster, Target, Bonus) + +end + +function remove(Caster, Target, Bonus) + +end \ No newline at end of file diff --git a/server/Spells/Traditions/Tradeskill/FieldRepairs.lua b/server/Spells/Traditions/Tradeskill/FieldRepairs.lua new file mode 100644 index 000000000..c30dbf0c1 --- /dev/null +++ b/server/Spells/Traditions/Tradeskill/FieldRepairs.lua @@ -0,0 +1,15 @@ +--[[ + Script Name : Spells\Tradidtions\Tradeskill\FieldRepairs.lua + Script Purpose : + Script Author : Zcoretri + Script Date : 2013.04.02 + Script Notes : +--]] + +function cast(Caster, Target, Bonus) + +end + +function remove(Caster, Target, Bonus) + +end \ No newline at end of file diff --git a/server/Spells/Traditions/Tradeskill/FinestCreations.lua b/server/Spells/Traditions/Tradeskill/FinestCreations.lua new file mode 100644 index 000000000..2770d655a --- /dev/null +++ b/server/Spells/Traditions/Tradeskill/FinestCreations.lua @@ -0,0 +1,15 @@ +--[[ + Script Name : Spells\Tradidtions\Tradeskill\FinestCreations.lua + Script Purpose : + Script Author : Zcoretri + Script Date : 2013.04.02 + Script Notes : +--]] + +function cast(Caster, Target, Bonus) + +end + +function remove(Caster, Target, Bonus) + +end \ No newline at end of file diff --git a/server/Spells/Traditions/Tradeskill/FinestRobesAround.lua b/server/Spells/Traditions/Tradeskill/FinestRobesAround.lua new file mode 100644 index 000000000..4ac4b343f --- /dev/null +++ b/server/Spells/Traditions/Tradeskill/FinestRobesAround.lua @@ -0,0 +1,15 @@ +--[[ + Script Name : Spells\Tradidtions\Tradeskill\FinestRobesAround.lua + Script Purpose : + Script Author : Zcoretri + Script Date : 2013.04.02 + Script Notes : +--]] + +function cast(Caster, Target, Bonus) + +end + +function remove(Caster, Target, Bonus) + +end \ No newline at end of file diff --git a/server/Spells/Traditions/Tradeskill/ForestKnowledge.lua b/server/Spells/Traditions/Tradeskill/ForestKnowledge.lua new file mode 100644 index 000000000..41b3e06cf --- /dev/null +++ b/server/Spells/Traditions/Tradeskill/ForestKnowledge.lua @@ -0,0 +1,15 @@ +--[[ + Script Name : Spells\Tradidtions\Tradeskill\ForestKnowledge.lua + Script Purpose : + Script Author : Zcoretri + Script Date : 2013.04.02 + Script Notes : +--]] + +function cast(Caster, Target, Bonus) + +end + +function remove(Caster, Target, Bonus) + +end \ No newline at end of file diff --git a/server/Spells/Traditions/Tradeskill/ForgeInvention.lua b/server/Spells/Traditions/Tradeskill/ForgeInvention.lua new file mode 100644 index 000000000..b6ba4846f --- /dev/null +++ b/server/Spells/Traditions/Tradeskill/ForgeInvention.lua @@ -0,0 +1,15 @@ +--[[ + Script Name : Spells\Tradidtions\Tradeskill\ForgeInvention.lua + Script Purpose : + Script Author : Zcoretri + Script Date : 2013.04.02 + Script Notes : +--]] + +function cast(Caster, Target, Bonus) + +end + +function remove(Caster, Target, Bonus) + +end \ No newline at end of file diff --git a/server/Spells/Traditions/Tradeskill/FortuneOfTheFeerrott.lua b/server/Spells/Traditions/Tradeskill/FortuneOfTheFeerrott.lua new file mode 100644 index 000000000..40e6ab6b5 --- /dev/null +++ b/server/Spells/Traditions/Tradeskill/FortuneOfTheFeerrott.lua @@ -0,0 +1,15 @@ +--[[ + Script Name : Spells\Tradidtions\Tradeskill\FortuneOfTheFeerrott.lua + Script Purpose : + Script Author : Zcoretri + Script Date : 2013.04.02 + Script Notes : +--]] + +function cast(Caster, Target, Bonus) + +end + +function remove(Caster, Target, Bonus) + +end \ No newline at end of file diff --git a/server/Spells/Traditions/Tradeskill/GemcraftingExcellence.lua b/server/Spells/Traditions/Tradeskill/GemcraftingExcellence.lua new file mode 100644 index 000000000..3fc4c5360 --- /dev/null +++ b/server/Spells/Traditions/Tradeskill/GemcraftingExcellence.lua @@ -0,0 +1,15 @@ +--[[ + Script Name : Spells\Tradidtions\Tradeskill\GemcraftExcellence.lua + Script Purpose : + Script Author : Zcoretri + Script Date : 2013.04.02 + Script Notes : +--]] + +function cast(Caster, Target, Bonus) + +end + +function remove(Caster, Target, Bonus) + +end \ No newline at end of file diff --git a/server/Spells/Traditions/Tradeskill/GiftOfTheFaydark.lua b/server/Spells/Traditions/Tradeskill/GiftOfTheFaydark.lua new file mode 100644 index 000000000..78346f20d --- /dev/null +++ b/server/Spells/Traditions/Tradeskill/GiftOfTheFaydark.lua @@ -0,0 +1,15 @@ +--[[ + Script Name : Spells\Tradidtions\Tradeskill\GiftOfTheFaydark.lua + Script Purpose : + Script Author : Zcoretri + Script Date : 2013.04.02 + Script Notes : +--]] + +function cast(Caster, Target, Bonus) + +end + +function remove(Caster, Target, Bonus) + +end \ No newline at end of file diff --git a/server/Spells/Traditions/Tradeskill/GiftOfTheLand.lua b/server/Spells/Traditions/Tradeskill/GiftOfTheLand.lua new file mode 100644 index 000000000..77ba00127 --- /dev/null +++ b/server/Spells/Traditions/Tradeskill/GiftOfTheLand.lua @@ -0,0 +1,15 @@ +--[[ + Script Name : Spells\Tradidtions\Tradeskill\GiftOfTheLand.lua + Script Purpose : + Script Author : Zcoretri + Script Date : 2013.04.02 + Script Notes : +--]] + +function cast(Caster, Target, Bonus) + +end + +function remove(Caster, Target, Bonus) + +end \ No newline at end of file diff --git a/server/Spells/Traditions/Tradeskill/GildingOfFelwithe.lua b/server/Spells/Traditions/Tradeskill/GildingOfFelwithe.lua new file mode 100644 index 000000000..278476555 --- /dev/null +++ b/server/Spells/Traditions/Tradeskill/GildingOfFelwithe.lua @@ -0,0 +1,15 @@ +--[[ + Script Name : Spells\Tradidtions\Tradeskill\GildingOfFelwithe.lua + Script Purpose : + Script Author : Zcoretri + Script Date : 2013.04.02 + Script Notes : +--]] + +function cast(Caster, Target, Bonus) + +end + +function remove(Caster, Target, Bonus) + +end \ No newline at end of file diff --git a/server/Spells/Traditions/Tradeskill/GnomishIngenuity.lua b/server/Spells/Traditions/Tradeskill/GnomishIngenuity.lua new file mode 100644 index 000000000..432ac1718 --- /dev/null +++ b/server/Spells/Traditions/Tradeskill/GnomishIngenuity.lua @@ -0,0 +1,15 @@ +--[[ + Script Name : Spells\Tradidtions\Tradeskill\GnomishIngenuity.lua + Script Purpose : + Script Author : Zcoretri + Script Date : 2013.04.02 + Script Notes : +--]] + +function cast(Caster, Target, Bonus) + +end + +function remove(Caster, Target, Bonus) + +end \ No newline at end of file diff --git a/server/Spells/Traditions/Tradeskill/GracefulAssembly.lua b/server/Spells/Traditions/Tradeskill/GracefulAssembly.lua new file mode 100644 index 000000000..dae91beba --- /dev/null +++ b/server/Spells/Traditions/Tradeskill/GracefulAssembly.lua @@ -0,0 +1,15 @@ +--[[ + Script Name : Spells\Tradidtions\Tradeskill\GracefulAssembly.lua + Script Purpose : + Script Author : Zcoretri + Script Date : 2013.04.02 + Script Notes : +--]] + +function cast(Caster, Target, Bonus) + +end + +function remove(Caster, Target, Bonus) + +end \ No newline at end of file diff --git a/server/Spells/Traditions/Tradeskill/HalasianArtistry.lua b/server/Spells/Traditions/Tradeskill/HalasianArtistry.lua new file mode 100644 index 000000000..712ee5794 --- /dev/null +++ b/server/Spells/Traditions/Tradeskill/HalasianArtistry.lua @@ -0,0 +1,15 @@ +--[[ + Script Name : Spells\Tradidtions\Tradeskill\HalasianArtistry.lua + Script Purpose : + Script Author : Zcoretri + Script Date : 2013.02.01 + Script Notes : Reduces power cost of Carpentry skills by 9% +--]] + +function cast(Caster, Target, Modifier) + +end + +function remove(Caster, Target, Modifier) + +end \ No newline at end of file diff --git a/server/Spells/Traditions/Tradeskill/Herbology.lua b/server/Spells/Traditions/Tradeskill/Herbology.lua new file mode 100644 index 000000000..329931bee --- /dev/null +++ b/server/Spells/Traditions/Tradeskill/Herbology.lua @@ -0,0 +1,15 @@ +--[[ + Script Name : Spells\Tradidtions\Tradeskill\Herbology.lua + Script Purpose : + Script Author : Zcoretri + Script Date : 2013.02.01 + Script Notes : Increases Chemistry by 5.0 +--]] + +function cast(Caster, Target, Bonus) + AddSkillBonus(Target, 2557647574, Bonus) +end + +function remove(Caster, Target, Bonus) + RemoveSkillBonus(Target) +end \ No newline at end of file diff --git a/server/Spells/Traditions/Tradeskill/HypotheticalExperimentation.lua b/server/Spells/Traditions/Tradeskill/HypotheticalExperimentation.lua new file mode 100644 index 000000000..6619abc72 --- /dev/null +++ b/server/Spells/Traditions/Tradeskill/HypotheticalExperimentation.lua @@ -0,0 +1,15 @@ +--[[ + Script Name : Spells\Tradidtions\Tradeskill\HypotheticalExperimentation.lua + Script Purpose : + Script Author : Zcoretri + Script Date : 2013.04.02 + Script Notes : +--]] + +function cast(Caster, Target, Bonus) + +end + +function remove(Caster, Target, Bonus) + +end \ No newline at end of file diff --git a/server/Spells/Traditions/Tradeskill/IngeniousTrades.lua b/server/Spells/Traditions/Tradeskill/IngeniousTrades.lua new file mode 100644 index 000000000..2631e448e --- /dev/null +++ b/server/Spells/Traditions/Tradeskill/IngeniousTrades.lua @@ -0,0 +1,15 @@ +--[[ + Script Name : Spells\Tradidtions\Tradeskill\IngeniousTrade.lua + Script Purpose : + Script Author : Zcoretri + Script Date : 2013.04.02 + Script Notes : +--]] + +function cast(Caster, Target, Bonus) + +end + +function remove(Caster, Target, Bonus) + +end \ No newline at end of file diff --git a/server/Spells/Traditions/Tradeskill/InstrumentsOfTheUnderfoot.lua b/server/Spells/Traditions/Tradeskill/InstrumentsOfTheUnderfoot.lua new file mode 100644 index 000000000..40c6ee569 --- /dev/null +++ b/server/Spells/Traditions/Tradeskill/InstrumentsOfTheUnderfoot.lua @@ -0,0 +1,15 @@ +--[[ + Script Name : Spells\Tradidtions\Tradeskill\InstrumentsOfTheUnderfoot.lua + Script Purpose : + Script Author : Zcoretri + Script Date : 2013.04.02 + Script Notes : +--]] + +function cast(Caster, Target, Bonus) + +end + +function remove(Caster, Target, Bonus) + +end \ No newline at end of file diff --git a/server/Spells/Traditions/Tradeskill/IntricateCreations.lua b/server/Spells/Traditions/Tradeskill/IntricateCreations.lua new file mode 100644 index 000000000..1dcb7fab1 --- /dev/null +++ b/server/Spells/Traditions/Tradeskill/IntricateCreations.lua @@ -0,0 +1,15 @@ +--[[ + Script Name : Spells\Tradidtions\Tradeskill\IntricateCreations.lua + Script Purpose : + Script Author : Zcoretri + Script Date : 2013.04.02 + Script Notes : +--]] + +function cast(Caster, Target, Bonus) + +end + +function remove(Caster, Target, Bonus) + +end \ No newline at end of file diff --git a/server/Spells/Traditions/Tradeskill/IntricateDesigns.lua b/server/Spells/Traditions/Tradeskill/IntricateDesigns.lua new file mode 100644 index 000000000..0c5bec422 --- /dev/null +++ b/server/Spells/Traditions/Tradeskill/IntricateDesigns.lua @@ -0,0 +1,15 @@ +--[[ + Script Name : Spells\Tradidtions\Tradeskill\IntricateDesigns.lua + Script Purpose : + Script Author : Zcoretri + Script Date : 2013.04.02 + Script Notes : +--]] + +function cast(Caster, Target, Bonus) + +end + +function remove(Caster, Target, Bonus) + +end \ No newline at end of file diff --git a/server/Spells/Traditions/Tradeskill/KruzzsLuck.lua b/server/Spells/Traditions/Tradeskill/KruzzsLuck.lua new file mode 100644 index 000000000..dac52c49f --- /dev/null +++ b/server/Spells/Traditions/Tradeskill/KruzzsLuck.lua @@ -0,0 +1,15 @@ +--[[ + Script Name : Spells\Tradidtions\Tradeskill\KruzzsLuck.lua + Script Purpose : + Script Author : Zcoretri + Script Date : 2013.04.02 + Script Notes : +--]] + +function cast(Caster, Target, Bonus) + +end + +function remove(Caster, Target, Bonus) + +end \ No newline at end of file diff --git a/server/Spells/Traditions/Tradeskill/LegionsQuatermaster.lua b/server/Spells/Traditions/Tradeskill/LegionsQuatermaster.lua new file mode 100644 index 000000000..17a70c967 --- /dev/null +++ b/server/Spells/Traditions/Tradeskill/LegionsQuatermaster.lua @@ -0,0 +1,15 @@ +--[[ + Script Name : Spells\Tradidtions\Tradeskill\LegionsQuartermaster.lua + Script Purpose : + Script Author : Zcoretri + Script Date : 2013.04.02 + Script Notes : +--]] + +function cast(Caster, Target, Bonus) + +end + +function remove(Caster, Target, Bonus) + +end \ No newline at end of file diff --git a/server/Spells/Traditions/Tradeskill/MagicalTeachings.lua b/server/Spells/Traditions/Tradeskill/MagicalTeachings.lua new file mode 100644 index 000000000..29f34610f --- /dev/null +++ b/server/Spells/Traditions/Tradeskill/MagicalTeachings.lua @@ -0,0 +1,15 @@ +--[[ + Script Name : Spells\Tradidtions\Tradeskill\MagicalTeachings.lua + Script Purpose : + Script Author : Zcoretri + Script Date : 2013.04.02 + Script Notes : +--]] + +function cast(Caster, Target, Bonus) + +end + +function remove(Caster, Target, Bonus) + +end \ No newline at end of file diff --git a/server/Spells/Traditions/Tradeskill/ManderOfTheMire.lua b/server/Spells/Traditions/Tradeskill/ManderOfTheMire.lua new file mode 100644 index 000000000..996b7507b --- /dev/null +++ b/server/Spells/Traditions/Tradeskill/ManderOfTheMire.lua @@ -0,0 +1,15 @@ +--[[ + Script Name : Spells\Tradidtions\Tradeskill\ManderOfTheMire.lua + Script Purpose : + Script Author : Zcoretri + Script Date : 2013.04.02 + Script Notes : +--]] + +function cast(Caster, Target, Bonus) + +end + +function remove(Caster, Target, Bonus) + +end \ No newline at end of file diff --git a/server/Spells/Traditions/Tradeskill/MasterOfTheTumpyTonic.lua b/server/Spells/Traditions/Tradeskill/MasterOfTheTumpyTonic.lua new file mode 100644 index 000000000..abcbabaf5 --- /dev/null +++ b/server/Spells/Traditions/Tradeskill/MasterOfTheTumpyTonic.lua @@ -0,0 +1,15 @@ +--[[ + Script Name : Spells\Tradidtions\Tradeskill\MasterOfTheTumpyTonic.lua + Script Purpose : + Script Author : Zcoretri + Script Date : 2013.04.02 + Script Notes : +--]] + +function cast(Caster, Target, Bonus) + +end + +function remove(Caster, Target, Bonus) + +end \ No newline at end of file diff --git a/server/Spells/Traditions/Tradeskill/MeticulousCraftsmanship.lua b/server/Spells/Traditions/Tradeskill/MeticulousCraftsmanship.lua new file mode 100644 index 000000000..3d7bf6b14 --- /dev/null +++ b/server/Spells/Traditions/Tradeskill/MeticulousCraftsmanship.lua @@ -0,0 +1,15 @@ +--[[ + Script Name : Spells\Tradidtions\Tradeskill\MeticulousCraftsmanship.lua + Script Purpose : + Script Author : Zcoretri + Script Date : 2013.04.02 + Script Notes : +--]] + +function cast(Caster, Target, Bonus) + +end + +function remove(Caster, Target, Bonus) + +end \ No newline at end of file diff --git a/server/Spells/Traditions/Tradeskill/Mithril.lua b/server/Spells/Traditions/Tradeskill/Mithril.lua new file mode 100644 index 000000000..3c4594f9d --- /dev/null +++ b/server/Spells/Traditions/Tradeskill/Mithril.lua @@ -0,0 +1,15 @@ +--[[ + Script Name : Spells\Tradidtions\Tradeskill\Mithril.lua + Script Purpose : + Script Author : Zcoretri + Script Date : 2013.04.02 + Script Notes : +--]] + +function cast(Caster, Target, Bonus) + +end + +function remove(Caster, Target, Bonus) + +end \ No newline at end of file diff --git a/server/Spells/Traditions/Tradeskill/MooshgasTutelage.lua b/server/Spells/Traditions/Tradeskill/MooshgasTutelage.lua new file mode 100644 index 000000000..914884b21 --- /dev/null +++ b/server/Spells/Traditions/Tradeskill/MooshgasTutelage.lua @@ -0,0 +1,15 @@ +--[[ + Script Name : Spells\Tradidtions\Tradeskill\MooshgasTutelage.lua + Script Purpose : + Script Author : Zcoretri + Script Date : 2013.04.02 + Script Notes : +--]] + +function cast(Caster, Target, Bonus) + +end + +function remove(Caster, Target, Bonus) + +end \ No newline at end of file diff --git a/server/Spells/Traditions/Tradeskill/MoreGlue.lua b/server/Spells/Traditions/Tradeskill/MoreGlue.lua new file mode 100644 index 000000000..f2f16d1f5 --- /dev/null +++ b/server/Spells/Traditions/Tradeskill/MoreGlue.lua @@ -0,0 +1,15 @@ +--[[ + Script Name : Spells\Tradidtions\Tradeskill\MoreGlue.lua + Script Purpose : + Script Author : Zcoretri + Script Date : 2013.04.02 + Script Notes : +--]] + +function cast(Caster, Target, Bonus) + +end + +function remove(Caster, Target, Bonus) + +end \ No newline at end of file diff --git a/server/Spells/Traditions/Tradeskill/NaimisTutelage.lua b/server/Spells/Traditions/Tradeskill/NaimisTutelage.lua new file mode 100644 index 000000000..57b359b18 --- /dev/null +++ b/server/Spells/Traditions/Tradeskill/NaimisTutelage.lua @@ -0,0 +1,15 @@ +--[[ + Script Name : Spells\Tradidtions\Tradeskill\NaimisTutelage.lua + Script Purpose : + Script Author : Zcoretri + Script Date : 2013.04.02 + Script Notes : +--]] + +function cast(Caster, Target, Bonus) + +end + +function remove(Caster, Target, Bonus) + +end \ No newline at end of file diff --git a/server/Spells/Traditions/Tradeskill/NaturalPrgression.lua b/server/Spells/Traditions/Tradeskill/NaturalPrgression.lua new file mode 100644 index 000000000..8d28c18a2 --- /dev/null +++ b/server/Spells/Traditions/Tradeskill/NaturalPrgression.lua @@ -0,0 +1,15 @@ +--[[ + Script Name : Spells\Tradidtions\Tradeskill\NaturalProgression.lua + Script Purpose : + Script Author : Zcoretri + Script Date : 2013.04.02 + Script Notes : +--]] + +function cast(Caster, Target, Bonus) + +end + +function remove(Caster, Target, Bonus) + +end \ No newline at end of file diff --git a/server/Spells/Traditions/Tradeskill/NeriakPrecision.lua b/server/Spells/Traditions/Tradeskill/NeriakPrecision.lua new file mode 100644 index 000000000..62a768042 --- /dev/null +++ b/server/Spells/Traditions/Tradeskill/NeriakPrecision.lua @@ -0,0 +1,15 @@ +--[[ + Script Name : Spells\Tradidtions\Tradeskill\NeriakPrecision.lua + Script Purpose : + Script Author : Zcoretri + Script Date : 2013.04.02 + Script Notes : +--]] + +function cast(Caster, Target, Bonus) + +end + +function remove(Caster, Target, Bonus) + +end \ No newline at end of file diff --git a/server/Spells/Traditions/Tradeskill/NobleCrafting.lua b/server/Spells/Traditions/Tradeskill/NobleCrafting.lua new file mode 100644 index 000000000..8796e5e04 --- /dev/null +++ b/server/Spells/Traditions/Tradeskill/NobleCrafting.lua @@ -0,0 +1,15 @@ +--[[ + Script Name : Spells\Tradidtions\Tradeskill\NobleCrafting.lua + Script Purpose : + Script Author : Zcoretri + Script Date : 2013.04.02 + Script Notes : +--]] + +function cast(Caster, Target, Bonus) + +end + +function remove(Caster, Target, Bonus) + +end \ No newline at end of file diff --git a/server/Spells/Traditions/Tradeskill/OggokianDurability.lua b/server/Spells/Traditions/Tradeskill/OggokianDurability.lua new file mode 100644 index 000000000..dcfb4d5a2 --- /dev/null +++ b/server/Spells/Traditions/Tradeskill/OggokianDurability.lua @@ -0,0 +1,15 @@ +--[[ + Script Name : Spells\Tradidtions\Tradeskill\OggokianDurability.lua + Script Purpose : + Script Author : Zcoretri + Script Date : 2013.04.02 + Script Notes : +--]] + +function cast(Caster, Target, Bonus) + +end + +function remove(Caster, Target, Bonus) + +end \ No newline at end of file diff --git a/server/Spells/Traditions/Tradeskill/OkkokianTrade.lua b/server/Spells/Traditions/Tradeskill/OkkokianTrade.lua new file mode 100644 index 000000000..6b07b83f2 --- /dev/null +++ b/server/Spells/Traditions/Tradeskill/OkkokianTrade.lua @@ -0,0 +1,15 @@ +--[[ + Script Name : Spells\Tradidtions\Tradeskill\OkkokianTrade.lua + Script Purpose : + Script Author : Zcoretri + Script Date : 2013.04.02 + Script Notes : +--]] + +function cast(Caster, Target, Bonus) + +end + +function remove(Caster, Target, Bonus) + +end \ No newline at end of file diff --git a/server/Spells/Traditions/Tradeskill/PantsPatcher.lua b/server/Spells/Traditions/Tradeskill/PantsPatcher.lua new file mode 100644 index 000000000..81e8a04ba --- /dev/null +++ b/server/Spells/Traditions/Tradeskill/PantsPatcher.lua @@ -0,0 +1,15 @@ +--[[ + Script Name : Spells\Tradidtions\Tradeskill\PantsPatcher.lua + Script Purpose : + Script Author : Zcoretri + Script Date : 2013.04.02 + Script Notes : +--]] + +function cast(Caster, Target, Bonus) + +end + +function remove(Caster, Target, Bonus) + +end \ No newline at end of file diff --git a/server/Spells/Traditions/Tradeskill/PoisonCrafter.lua b/server/Spells/Traditions/Tradeskill/PoisonCrafter.lua new file mode 100644 index 000000000..935a70ef5 --- /dev/null +++ b/server/Spells/Traditions/Tradeskill/PoisonCrafter.lua @@ -0,0 +1,15 @@ +--[[ + Script Name : Spells\Tradidtions\Tradeskill\PoisonCrafter.lua + Script Purpose : + Script Author : Zcoretri + Script Date : 2013.02.01 + Script Notes : Increases Durability per round by 2.0 during Alchemy +--]] + +function cast(Caster, Target, DuraMod) + +end + +function remove(Caster, Target, DuraMod) + +end \ No newline at end of file diff --git a/server/Spells/Traditions/Tradeskill/PoisonPlay.lua b/server/Spells/Traditions/Tradeskill/PoisonPlay.lua new file mode 100644 index 000000000..75a5d80e4 --- /dev/null +++ b/server/Spells/Traditions/Tradeskill/PoisonPlay.lua @@ -0,0 +1,15 @@ +--[[ + Script Name : Spells\Tradidtions\Tradeskill\PoisonPlay.lua + Script Purpose : + Script Author : Zcoretri + Script Date : 2013.04.02 + Script Notes : +--]] + +function cast(Caster, Target, Bonus) + +end + +function remove(Caster, Target, Bonus) + +end \ No newline at end of file diff --git a/server/Spells/Traditions/Tradeskill/PracticedTinkering.lua b/server/Spells/Traditions/Tradeskill/PracticedTinkering.lua new file mode 100644 index 000000000..e270881dd --- /dev/null +++ b/server/Spells/Traditions/Tradeskill/PracticedTinkering.lua @@ -0,0 +1,15 @@ +--[[ + Script Name : Spells\Tradidtions\Tradeskill\PracticedTinkering.lua + Script Purpose : + Script Author : Zcoretri + Script Date : 2013.04.02 + Script Notes : +--]] + +function cast(Caster, Target, Bonus) + +end + +function remove(Caster, Target, Bonus) + +end \ No newline at end of file diff --git a/server/Spells/Traditions/Tradeskill/PrehelsileTail.lua b/server/Spells/Traditions/Tradeskill/PrehelsileTail.lua new file mode 100644 index 000000000..6fd9eed36 --- /dev/null +++ b/server/Spells/Traditions/Tradeskill/PrehelsileTail.lua @@ -0,0 +1,15 @@ +--[[ + Script Name : Spells\Tradidtions\Tradeskill\PrehelsileTail.lua + Script Purpose : + Script Author : Zcoretri + Script Date : 2013.04.02 + Script Notes : +--]] + +function cast(Caster, Target, Bonus) + +end + +function remove(Caster, Target, Bonus) + +end \ No newline at end of file diff --git a/server/Spells/Traditions/Tradeskill/PristineWork.lua b/server/Spells/Traditions/Tradeskill/PristineWork.lua new file mode 100644 index 000000000..0f709b519 --- /dev/null +++ b/server/Spells/Traditions/Tradeskill/PristineWork.lua @@ -0,0 +1,15 @@ +--[[ + Script Name : Spells\Tradidtions\Tradeskill\PristineWork.lua + Script Purpose : + Script Author : Zcoretri + Script Date : 2013.04.02 + Script Notes : +--]] + +function cast(Caster, Target, Bonus) + +end + +function remove(Caster, Target, Bonus) + +end \ No newline at end of file diff --git a/server/Spells/Traditions/Tradeskill/ProfoundFocus.lua b/server/Spells/Traditions/Tradeskill/ProfoundFocus.lua new file mode 100644 index 000000000..a30813d2c --- /dev/null +++ b/server/Spells/Traditions/Tradeskill/ProfoundFocus.lua @@ -0,0 +1,15 @@ +--[[ + Script Name : Spells\Tradidtions\Tradeskill\ProfoundFocus.lua + Script Purpose : + Script Author : Zcoretri + Script Date : 2013.04.02 + Script Notes : +--]] + +function cast(Caster, Target, Bonus) + +end + +function remove(Caster, Target, Bonus) + +end \ No newline at end of file diff --git a/server/Spells/Traditions/Tradeskill/PursuitOfTheArcane.lua b/server/Spells/Traditions/Tradeskill/PursuitOfTheArcane.lua new file mode 100644 index 000000000..114453001 --- /dev/null +++ b/server/Spells/Traditions/Tradeskill/PursuitOfTheArcane.lua @@ -0,0 +1,15 @@ +--[[ + Script Name : Spells\Tradidtions\Tradeskill\PursuitOfTheArcane.lua + Script Purpose : + Script Author : Zcoretri + Script Date : 2013.02.01 + Script Notes : Reduces power cost of Sage reaction arts by 10% +--]] + +function cast(Caster, Target, Modifier) + +end + +function remove(Caster, Target, Modifier) + +end \ No newline at end of file diff --git a/server/Spells/Traditions/Tradeskill/QuickAssembly.lua b/server/Spells/Traditions/Tradeskill/QuickAssembly.lua new file mode 100644 index 000000000..79941e768 --- /dev/null +++ b/server/Spells/Traditions/Tradeskill/QuickAssembly.lua @@ -0,0 +1,15 @@ +--[[ + Script Name : Spells\Tradidtions\Tradeskill\QuickAssembly.lua + Script Purpose : + Script Author : Zcoretri + Script Date : 2013.04.02 + Script Notes : +--]] + +function cast(Caster, Target, Bonus) + +end + +function remove(Caster, Target, Bonus) + +end \ No newline at end of file diff --git a/server/Spells/Traditions/Tradeskill/RallosianReadiness.lua b/server/Spells/Traditions/Tradeskill/RallosianReadiness.lua new file mode 100644 index 000000000..2023c1c02 --- /dev/null +++ b/server/Spells/Traditions/Tradeskill/RallosianReadiness.lua @@ -0,0 +1,15 @@ +--[[ + Script Name : Spells\Tradidtions\Tradeskill\RallosianReadiness.lua + Script Purpose : + Script Author : Zcoretri + Script Date : 2013.04.02 + Script Notes : +--]] + +function cast(Caster, Target, Bonus) + +end + +function remove(Caster, Target, Bonus) + +end \ No newline at end of file diff --git a/server/Spells/Traditions/Tradeskill/RubTheMuddOff.lua b/server/Spells/Traditions/Tradeskill/RubTheMuddOff.lua new file mode 100644 index 000000000..e178d9584 --- /dev/null +++ b/server/Spells/Traditions/Tradeskill/RubTheMuddOff.lua @@ -0,0 +1,15 @@ +--[[ + Script Name : Spells\Tradidtions\Tradeskill\RubTheMuddOff.lua + Script Purpose : + Script Author : Zcoretri + Script Date : 2013.04.02 + Script Notes : +--]] + +function cast(Caster, Target, Bonus) + +end + +function remove(Caster, Target, Bonus) + +end \ No newline at end of file diff --git a/server/Spells/Traditions/Tradeskill/SaplingKnowledge.lua b/server/Spells/Traditions/Tradeskill/SaplingKnowledge.lua new file mode 100644 index 000000000..f501938a6 --- /dev/null +++ b/server/Spells/Traditions/Tradeskill/SaplingKnowledge.lua @@ -0,0 +1,15 @@ +--[[ + Script Name : Spells\Tradidtions\Tradeskill\SaplingKnowledge.lua + Script Purpose : + Script Author : Zcoretri + Script Date : 2013.04.02 + Script Notes : +--]] + +function cast(Caster, Target, Bonus) + +end + +function remove(Caster, Target, Bonus) + +end \ No newline at end of file diff --git a/server/Spells/Traditions/Tradeskill/Scalesmith.lua b/server/Spells/Traditions/Tradeskill/Scalesmith.lua new file mode 100644 index 000000000..287ad5210 --- /dev/null +++ b/server/Spells/Traditions/Tradeskill/Scalesmith.lua @@ -0,0 +1,15 @@ +--[[ + Script Name : Spells\Tradidtions\Tradeskill\Scalesmith.lua + Script Purpose : + Script Author : Zcoretri + Script Date : 2013.04.02 + Script Notes : +--]] + +function cast(Caster, Target, Bonus) + +end + +function remove(Caster, Target, Bonus) + +end \ No newline at end of file diff --git a/server/Spells/Traditions/Tradeskill/ScholarlyPursuit.lua b/server/Spells/Traditions/Tradeskill/ScholarlyPursuit.lua new file mode 100644 index 000000000..132f2d2f4 --- /dev/null +++ b/server/Spells/Traditions/Tradeskill/ScholarlyPursuit.lua @@ -0,0 +1,15 @@ +--[[ + Script Name : Spells\Tradidtions\Tradeskill\ScholarlyPursuit.lua + Script Purpose : + Script Author : Zcoretri + Script Date : 2013.04.02 + Script Notes : +--]] + +function cast(Caster, Target, Bonus) + +end + +function remove(Caster, Target, Bonus) + +end \ No newline at end of file diff --git a/server/Spells/Traditions/Tradeskill/ScribingsOfThePious.lua b/server/Spells/Traditions/Tradeskill/ScribingsOfThePious.lua new file mode 100644 index 000000000..7dcd9eb7a --- /dev/null +++ b/server/Spells/Traditions/Tradeskill/ScribingsOfThePious.lua @@ -0,0 +1,15 @@ +--[[ + Script Name : Spells\Tradidtions\Tradeskill\ScribingsOfThePious.lua + Script Purpose : + Script Author : Zcoretri + Script Date : 2013.04.02 + Script Notes : +--]] + +function cast(Caster, Target, Bonus) + +end + +function remove(Caster, Target, Bonus) + +end \ No newline at end of file diff --git a/server/Spells/Traditions/Tradeskill/SkilledArtistry.lua b/server/Spells/Traditions/Tradeskill/SkilledArtistry.lua new file mode 100644 index 000000000..2e261a28d --- /dev/null +++ b/server/Spells/Traditions/Tradeskill/SkilledArtistry.lua @@ -0,0 +1,15 @@ +--[[ + Script Name : Spells\Tradidtions\Tradeskill\SkilledArtistry.lua + Script Purpose : + Script Author : Zcoretri + Script Date : 2013.04.02 + Script Notes : +--]] + +function cast(Caster, Target, Bonus) + +end + +function remove(Caster, Target, Bonus) + +end \ No newline at end of file diff --git a/server/Spells/Traditions/Tradeskill/SkillfulCreations.lua b/server/Spells/Traditions/Tradeskill/SkillfulCreations.lua new file mode 100644 index 000000000..f14331ba9 --- /dev/null +++ b/server/Spells/Traditions/Tradeskill/SkillfulCreations.lua @@ -0,0 +1,15 @@ +--[[ + Script Name : Spells\Tradidtions\Tradeskill\SkillfulCreations.lua + Script Purpose : + Script Author : Zcoretri + Script Date : 2013.04.02 + Script Notes : +--]] + +function cast(Caster, Target, Bonus) + +end + +function remove(Caster, Target, Bonus) + +end \ No newline at end of file diff --git a/server/Spells/Traditions/Tradeskill/SkillfulPaws.lua b/server/Spells/Traditions/Tradeskill/SkillfulPaws.lua new file mode 100644 index 000000000..3195adb95 --- /dev/null +++ b/server/Spells/Traditions/Tradeskill/SkillfulPaws.lua @@ -0,0 +1,15 @@ +--[[ + Script Name : Spells\Tradidtions\Tradeskill\SkillfulPaws.lua + Script Purpose : + Script Author : Zcoretri + Script Date : 2013.04.02 + Script Notes : +--]] + +function cast(Caster, Target, Bonus) + +end + +function remove(Caster, Target, Bonus) + +end \ No newline at end of file diff --git a/server/Spells/Traditions/Tradeskill/SkillfulTriumph.lua b/server/Spells/Traditions/Tradeskill/SkillfulTriumph.lua new file mode 100644 index 000000000..818bfec57 --- /dev/null +++ b/server/Spells/Traditions/Tradeskill/SkillfulTriumph.lua @@ -0,0 +1,15 @@ +--[[ + Script Name : Spells\Tradidtions\Tradeskill\SkillfulTriumph.lua + Script Purpose : + Script Author : Zcoretri + Script Date : 2013.02.01 + Script Notes : Increases success chance by 2.0% +--]] + +function cast(Caster, Target, SuccessMod) + +end + +function remove(Caster, Target, SuccessMod) + +end \ No newline at end of file diff --git a/server/Spells/Traditions/Tradeskill/SuccessfulCreations.lua b/server/Spells/Traditions/Tradeskill/SuccessfulCreations.lua new file mode 100644 index 000000000..f6e58d686 --- /dev/null +++ b/server/Spells/Traditions/Tradeskill/SuccessfulCreations.lua @@ -0,0 +1,15 @@ +--[[ + Script Name : Spells\Tradidtions\Tradeskill\SuccessfulCreations.lua + Script Purpose : + Script Author : Zcoretri + Script Date : 2013.02.01 + Script Notes : Increases Durability per round by 1.0 and success chance by 1% +--]] + +function cast(Caster, Target, DuraMod, SuccessMod) + +end + +function remove(Caster, Target, DuraMod, SuccessMod) + +end \ No newline at end of file diff --git a/server/Spells/Traditions/Tradeskill/SwiftScamper.lua b/server/Spells/Traditions/Tradeskill/SwiftScamper.lua new file mode 100644 index 000000000..c8ce8b146 --- /dev/null +++ b/server/Spells/Traditions/Tradeskill/SwiftScamper.lua @@ -0,0 +1,15 @@ +--[[ + Script Name : Spells\Tradidtions\Tradeskill\SwiftScamper.lua + Script Purpose : + Script Author : Zcoretri + Script Date : 2013.04.02 + Script Notes : +--]] + +function cast(Caster, Target, Bonus) + +end + +function remove(Caster, Target, Bonus) + +end \ No newline at end of file diff --git a/server/Spells/Traditions/Tradeskill/TeachingsOfBrell.lua b/server/Spells/Traditions/Tradeskill/TeachingsOfBrell.lua new file mode 100644 index 000000000..f3523b03d --- /dev/null +++ b/server/Spells/Traditions/Tradeskill/TeachingsOfBrell.lua @@ -0,0 +1,15 @@ +--[[ + Script Name : Spells\Tradidtions\Tradeskill\TeachingsOfBrell.lua + Script Purpose : + Script Author : Zcoretri + Script Date : 2013.04.02 + Script Notes : +--]] + +function cast(Caster, Target, Bonus) + +end + +function remove(Caster, Target, Bonus) + +end \ No newline at end of file diff --git a/server/Spells/Traditions/Tradeskill/TimberShaper.lua b/server/Spells/Traditions/Tradeskill/TimberShaper.lua new file mode 100644 index 000000000..6b912b81a --- /dev/null +++ b/server/Spells/Traditions/Tradeskill/TimberShaper.lua @@ -0,0 +1,15 @@ +--[[ + Script Name : Spells\Tradidtions\Tradeskill\TimberShaper.lua + Script Purpose : + Script Author : Zcoretri + Script Date : 2013.04.02 + Script Notes : +--]] + +function cast(Caster, Target, Bonus) + +end + +function remove(Caster, Target, Bonus) + +end \ No newline at end of file diff --git a/server/Spells/Traditions/Tradeskill/TinkeredFocus.lua b/server/Spells/Traditions/Tradeskill/TinkeredFocus.lua new file mode 100644 index 000000000..d7e66f163 --- /dev/null +++ b/server/Spells/Traditions/Tradeskill/TinkeredFocus.lua @@ -0,0 +1,15 @@ +--[[ + Script Name : Spells\Tradidtions\Tradeskill\TinkeredFocus.lua + Script Purpose : + Script Author : Zcoretri + Script Date : 2013.04.02 + Script Notes : +--]] + +function cast(Caster, Target, Bonus) + +end + +function remove(Caster, Target, Bonus) + +end \ No newline at end of file diff --git a/server/Spells/Traditions/Tradeskill/TrainedFocus.lua b/server/Spells/Traditions/Tradeskill/TrainedFocus.lua new file mode 100644 index 000000000..735639cc9 --- /dev/null +++ b/server/Spells/Traditions/Tradeskill/TrainedFocus.lua @@ -0,0 +1,15 @@ +--[[ + Script Name : Spells\Tradidtions\Tradeskill\TrainedFocus.lua + Script Purpose : + Script Author : Zcoretri + Script Date : 2013.04.02 + Script Notes : +--]] + +function cast(Caster, Target, Bonus) + +end + +function remove(Caster, Target, Bonus) + +end \ No newline at end of file diff --git a/server/Spells/Traditions/Tradeskill/Transmography.lua b/server/Spells/Traditions/Tradeskill/Transmography.lua new file mode 100644 index 000000000..d2bfd8613 --- /dev/null +++ b/server/Spells/Traditions/Tradeskill/Transmography.lua @@ -0,0 +1,15 @@ +--[[ + Script Name : Spells\Tradidtions\Tradeskill\Transmography.lua + Script Purpose : + Script Author : Zcoretri + Script Date : 2013.04.02 + Script Notes : +--]] + +function cast(Caster, Target, Bonus) + +end + +function remove(Caster, Target, Bonus) + +end \ No newline at end of file diff --git a/server/Spells/Traditions/Tradeskill/TrollGourmet.lua b/server/Spells/Traditions/Tradeskill/TrollGourmet.lua new file mode 100644 index 000000000..b56be872b --- /dev/null +++ b/server/Spells/Traditions/Tradeskill/TrollGourmet.lua @@ -0,0 +1,15 @@ +--[[ + Script Name : Spells\Tradidtions\Tradeskill\TrollGourmet.lua + Script Purpose : + Script Author : Zcoretri + Script Date : 2013.04.02 + Script Notes : +--]] + +function cast(Caster, Target, Bonus) + +end + +function remove(Caster, Target, Bonus) + +end \ No newline at end of file diff --git a/server/Spells/Traditions/Tradeskill/TwiddysArtistry.lua b/server/Spells/Traditions/Tradeskill/TwiddysArtistry.lua new file mode 100644 index 000000000..498001d08 --- /dev/null +++ b/server/Spells/Traditions/Tradeskill/TwiddysArtistry.lua @@ -0,0 +1,15 @@ +--[[ + Script Name : Spells\Tradidtions\Tradeskill\TwiddysArtistry.lua + Script Purpose : + Script Author : Zcoretri + Script Date : 2013.04.02 + Script Notes : +--]] + +function cast(Caster, Target, Bonus) + +end + +function remove(Caster, Target, Bonus) + +end \ No newline at end of file diff --git a/server/Spells/Traditions/Tradeskill/TwiddysInsight.lua b/server/Spells/Traditions/Tradeskill/TwiddysInsight.lua new file mode 100644 index 000000000..7db45b0c4 --- /dev/null +++ b/server/Spells/Traditions/Tradeskill/TwiddysInsight.lua @@ -0,0 +1,15 @@ +--[[ + Script Name : Spells\Tradidtions\Tradeskill\TwiddysInsight.lua + Script Purpose : + Script Author : Zcoretri + Script Date : 2013.04.02 + Script Notes : +--]] + +function cast(Caster, Target, Bonus) + +end + +function remove(Caster, Target, Bonus) + +end \ No newline at end of file diff --git a/server/Spells/Traditions/Tradeskill/UnflinchingFocus.lua b/server/Spells/Traditions/Tradeskill/UnflinchingFocus.lua new file mode 100644 index 000000000..c90401f40 --- /dev/null +++ b/server/Spells/Traditions/Tradeskill/UnflinchingFocus.lua @@ -0,0 +1,15 @@ +--[[ + Script Name : Spells\Tradidtions\Tradeskill\UnflinchingFocus.lua + Script Purpose : + Script Author : Zcoretri + Script Date : 2013.04.02 + Script Notes : +--]] + +function cast(Caster, Target, Bonus) + +end + +function remove(Caster, Target, Bonus) + +end \ No newline at end of file diff --git a/server/Spells/Traditions/Tradeskill/UnyieldingDetermination.lua b/server/Spells/Traditions/Tradeskill/UnyieldingDetermination.lua new file mode 100644 index 000000000..6f02dd8c3 --- /dev/null +++ b/server/Spells/Traditions/Tradeskill/UnyieldingDetermination.lua @@ -0,0 +1,15 @@ +--[[ + Script Name : Spells\Tradidtions\Tradeskill\UnyieldingDetermination.lua + Script Purpose : + Script Author : Zcoretri + Script Date : 2013.02.01 + Script Notes : Increases progress gain by 2.0% +--]] + +function cast(Caster, Target, ProgressMod) + +end + +function remove(Caster, Target, ProgressMod) + +end \ No newline at end of file diff --git a/server/Spells/Traditions/Tradeskill/VerifiedHypothesis.lua b/server/Spells/Traditions/Tradeskill/VerifiedHypothesis.lua new file mode 100644 index 000000000..c48544727 --- /dev/null +++ b/server/Spells/Traditions/Tradeskill/VerifiedHypothesis.lua @@ -0,0 +1,15 @@ +--[[ + Script Name : Spells\Tradidtions\Tradeskill\VerifiedHypothesis.lua + Script Purpose : + Script Author : Zcoretri + Script Date : 2013.04.02 + Script Notes : +--]] + +function cast(Caster, Target, Bonus) + +end + +function remove(Caster, Target, Bonus) + +end \ No newline at end of file diff --git a/server/Spells/Traditions/Tradeskill/WeaponForger.lua b/server/Spells/Traditions/Tradeskill/WeaponForger.lua new file mode 100644 index 000000000..921d88469 --- /dev/null +++ b/server/Spells/Traditions/Tradeskill/WeaponForger.lua @@ -0,0 +1,15 @@ +--[[ + Script Name : Spells\Tradidtions\Tradeskill\WeaponForger.lua + Script Purpose : + Script Author : Zcoretri + Script Date : 2013.04.02 + Script Notes : +--]] + +function cast(Caster, Target, Bonus) + +end + +function remove(Caster, Target, Bonus) + +end \ No newline at end of file diff --git a/server/Spells/Traditions/Tradeskill/WeaponProduction.lua b/server/Spells/Traditions/Tradeskill/WeaponProduction.lua new file mode 100644 index 000000000..b18bf1b5f --- /dev/null +++ b/server/Spells/Traditions/Tradeskill/WeaponProduction.lua @@ -0,0 +1,15 @@ +--[[ + Script Name : Spells\Tradidtions\Tradeskill\WeaponProduction.lua + Script Purpose : + Script Author : Zcoretri + Script Date : 2013.04.02 + Script Notes : +--]] + +function cast(Caster, Target, Bonus) + +end + +function remove(Caster, Target, Bonus) + +end \ No newline at end of file diff --git a/server/Spells/Traditions/Tradeskill/Whipstich.lua b/server/Spells/Traditions/Tradeskill/Whipstich.lua new file mode 100644 index 000000000..df0ec70dd --- /dev/null +++ b/server/Spells/Traditions/Tradeskill/Whipstich.lua @@ -0,0 +1,15 @@ +--[[ + Script Name : Spells\Tradidtions\Tradeskill\Whipstich.lua + Script Purpose : + Script Author : Zcoretri + Script Date : 2013.04.02 + Script Notes : +--]] + +function cast(Caster, Target, Bonus) + +end + +function remove(Caster, Target, Bonus) + +end \ No newline at end of file diff --git a/server/Spells/Traditions/Tradeskill/ZealotryOfMarr.lua b/server/Spells/Traditions/Tradeskill/ZealotryOfMarr.lua new file mode 100644 index 000000000..0924e819c --- /dev/null +++ b/server/Spells/Traditions/Tradeskill/ZealotryOfMarr.lua @@ -0,0 +1,15 @@ +--[[ + Script Name : Spells\Tradidtions\Tradeskill\ZealotryOfMarr.lua + Script Purpose : + Script Author : Zcoretri + Script Date : 2013.04.02 + Script Notes : +--]] + +function cast(Caster, Target, Bonus) + +end + +function remove(Caster, Target, Bonus) + +end \ No newline at end of file diff --git a/server/Spells/Traditions/TrainingoftheKoada`Dal.lua b/server/Spells/Traditions/TrainingoftheKoada`Dal.lua new file mode 100644 index 000000000..7946d19b2 --- /dev/null +++ b/server/Spells/Traditions/TrainingoftheKoada`Dal.lua @@ -0,0 +1,12 @@ +--[[ + Script Name : {generic header} + Script Purpose : + Script Author : John Adams + Script Date : 2012.09.08 + Script Notes : temp script to stop world errors +--]] + +function cast(Caster, Target) + + +end diff --git a/server/Spells/Traditions/Transmography.lua b/server/Spells/Traditions/Transmography.lua new file mode 100644 index 000000000..7946d19b2 --- /dev/null +++ b/server/Spells/Traditions/Transmography.lua @@ -0,0 +1,12 @@ +--[[ + Script Name : {generic header} + Script Purpose : + Script Author : John Adams + Script Date : 2012.09.08 + Script Notes : temp script to stop world errors +--]] + +function cast(Caster, Target) + + +end diff --git a/server/Spells/Traditions/TrollGourmet.lua b/server/Spells/Traditions/TrollGourmet.lua new file mode 100644 index 000000000..7946d19b2 --- /dev/null +++ b/server/Spells/Traditions/TrollGourmet.lua @@ -0,0 +1,12 @@ +--[[ + Script Name : {generic header} + Script Purpose : + Script Author : John Adams + Script Date : 2012.09.08 + Script Notes : temp script to stop world errors +--]] + +function cast(Caster, Target) + + +end diff --git a/server/Spells/Traditions/TundraEndurance.lua b/server/Spells/Traditions/TundraEndurance.lua new file mode 100644 index 000000000..2f444fd4b --- /dev/null +++ b/server/Spells/Traditions/TundraEndurance.lua @@ -0,0 +1,11 @@ +--[[ + Script Name : {generic header} + Script Purpose : + Script Author : John Adams + Script Date : 2012.09.08 + Script Notes : temp script to stop world errors +--]] + +function cast(Caster, Target) + +end diff --git a/server/Spells/Traditions/UrbanSprawl.lua b/server/Spells/Traditions/UrbanSprawl.lua new file mode 100644 index 000000000..1a6f4fb27 --- /dev/null +++ b/server/Spells/Traditions/UrbanSprawl.lua @@ -0,0 +1,20 @@ +--[[ + Script Name : Spells/Commoner/UrbanSprawl.lua + Script Author : John + Script Date : 2012.07.07 12:07:26 + Script Notes : Enter special notes here + : +--]] + +function cast(Caster, Target, SkillAmt) + AddSkillBonus(Target, 418532101, SkillAmt) -- Slashing +end + +function tick(Caster, Target, Type, Min, Max) + -- code to process each call_frequency (tick) set in spell_tiers +end + +function remove(Caster, Target, Type, Min, Max) + -- code to remove the spell +end + diff --git a/server/Spells/Traditions/Versatility.lua b/server/Spells/Traditions/Versatility.lua new file mode 100644 index 000000000..7946d19b2 --- /dev/null +++ b/server/Spells/Traditions/Versatility.lua @@ -0,0 +1,12 @@ +--[[ + Script Name : {generic header} + Script Purpose : + Script Author : John Adams + Script Date : 2012.09.08 + Script Notes : temp script to stop world errors +--]] + +function cast(Caster, Target) + + +end diff --git a/server/Spells/Traditions/VitalityoftheFier`Dal.lua b/server/Spells/Traditions/VitalityoftheFier`Dal.lua new file mode 100644 index 000000000..7946d19b2 --- /dev/null +++ b/server/Spells/Traditions/VitalityoftheFier`Dal.lua @@ -0,0 +1,12 @@ +--[[ + Script Name : {generic header} + Script Purpose : + Script Author : John Adams + Script Date : 2012.09.08 + Script Notes : temp script to stop world errors +--]] + +function cast(Caster, Target) + + +end diff --git a/server/Spells/Traditions/WarWounds.lua b/server/Spells/Traditions/WarWounds.lua new file mode 100644 index 000000000..7946d19b2 --- /dev/null +++ b/server/Spells/Traditions/WarWounds.lua @@ -0,0 +1,12 @@ +--[[ + Script Name : {generic header} + Script Purpose : + Script Author : John Adams + Script Date : 2012.09.08 + Script Notes : temp script to stop world errors +--]] + +function cast(Caster, Target) + + +end diff --git a/server/Spells/Traditions/WardofGlyphs.lua b/server/Spells/Traditions/WardofGlyphs.lua new file mode 100644 index 000000000..7946d19b2 --- /dev/null +++ b/server/Spells/Traditions/WardofGlyphs.lua @@ -0,0 +1,12 @@ +--[[ + Script Name : {generic header} + Script Purpose : + Script Author : John Adams + Script Date : 2012.09.08 + Script Notes : temp script to stop world errors +--]] + +function cast(Caster, Target) + + +end diff --git a/server/Spells/Traditions/WeaponForger.lua b/server/Spells/Traditions/WeaponForger.lua new file mode 100644 index 000000000..7946d19b2 --- /dev/null +++ b/server/Spells/Traditions/WeaponForger.lua @@ -0,0 +1,12 @@ +--[[ + Script Name : {generic header} + Script Purpose : + Script Author : John Adams + Script Date : 2012.09.08 + Script Notes : temp script to stop world errors +--]] + +function cast(Caster, Target) + + +end diff --git a/server/Spells/Traditions/WeaponProduction.lua b/server/Spells/Traditions/WeaponProduction.lua new file mode 100644 index 000000000..7946d19b2 --- /dev/null +++ b/server/Spells/Traditions/WeaponProduction.lua @@ -0,0 +1,12 @@ +--[[ + Script Name : {generic header} + Script Purpose : + Script Author : John Adams + Script Date : 2012.09.08 + Script Notes : temp script to stop world errors +--]] + +function cast(Caster, Target) + + +end diff --git a/server/Spells/Traditions/WilltoSurvive.lua b/server/Spells/Traditions/WilltoSurvive.lua new file mode 100644 index 000000000..7946d19b2 --- /dev/null +++ b/server/Spells/Traditions/WilltoSurvive.lua @@ -0,0 +1,12 @@ +--[[ + Script Name : {generic header} + Script Purpose : + Script Author : John Adams + Script Date : 2012.09.08 + Script Notes : temp script to stop world errors +--]] + +function cast(Caster, Target) + + +end diff --git a/server/Spells/Traditions/WindWalker.lua b/server/Spells/Traditions/WindWalker.lua new file mode 100644 index 000000000..7946d19b2 --- /dev/null +++ b/server/Spells/Traditions/WindWalker.lua @@ -0,0 +1,12 @@ +--[[ + Script Name : {generic header} + Script Purpose : + Script Author : John Adams + Script Date : 2012.09.08 + Script Notes : temp script to stop world errors +--]] + +function cast(Caster, Target) + + +end diff --git a/server/Spells/Traditions/WisdomoftheFaydark.lua b/server/Spells/Traditions/WisdomoftheFaydark.lua new file mode 100644 index 000000000..7946d19b2 --- /dev/null +++ b/server/Spells/Traditions/WisdomoftheFaydark.lua @@ -0,0 +1,12 @@ +--[[ + Script Name : {generic header} + Script Purpose : + Script Author : John Adams + Script Date : 2012.09.08 + Script Notes : temp script to stop world errors +--]] + +function cast(Caster, Target) + + +end diff --git a/server/Spells/Traditions/dome.bat b/server/Spells/Traditions/dome.bat new file mode 100644 index 000000000..cf09a888e --- /dev/null +++ b/server/Spells/Traditions/dome.bat @@ -0,0 +1,153 @@ +@echo off +copy SprintIntoBattle.lua BarbaricRage.lua +copy SprintIntoBattle.lua BattleReprieve.lua +copy SprintIntoBattle.lua Blizzard.lua +copy SprintIntoBattle.lua Brewmaster.lua +copy SprintIntoBattle.lua DefenderofEverfrost.lua +copy SprintIntoBattle.lua HalasianAuthority.lua +copy SprintIntoBattle.lua Herbology.lua +copy SprintIntoBattle.lua WarWounds.lua +copy SprintIntoBattle.lua SummonHalasianBrew.lua +copy SprintIntoBattle.lua FaydarksChampion.lua +copy SprintIntoBattle.lua FueledByHate.lua +copy SprintIntoBattle.lua FuryofInnoruuk.lua +copy SprintIntoBattle.lua HatefulMind.lua +copy SprintIntoBattle.lua Hover.lua +copy SprintIntoBattle.lua InnoruuksGift.lua +copy SprintIntoBattle.lua MasteroftheShadows.lua +copy SprintIntoBattle.lua PoisonCrafter.lua +copy SprintIntoBattle.lua PoisonExpertise.lua +copy SprintIntoBattle.lua PursuitoftheArcane.lua +copy SprintIntoBattle.lua TheFocisMagicalProtection.lua +copy SprintIntoBattle.lua AggressiveStrike.lua +copy SprintIntoBattle.lua BodybyButcherblock.lua +copy SprintIntoBattle.lua DefenderofKaladim.lua +copy SprintIntoBattle.lua DwarvenFortitude.lua +copy SprintIntoBattle.lua MasteroftheTumpyTonic.lua +copy SprintIntoBattle.lua MiningExpertise.lua +copy SprintIntoBattle.lua RushintoBattle.lua +copy SprintIntoBattle.lua StrongHeart.lua +copy SprintIntoBattle.lua WeaponForger.lua +copy SprintIntoBattle.lua ArcofLightning.lua +copy SprintIntoBattle.lua CastingFury.lua +copy SprintIntoBattle.lua Chemist.lua +copy SprintIntoBattle.lua ClearMind.lua +copy SprintIntoBattle.lua ErudsTeachings.lua +copy SprintIntoBattle.lua FallingGrace.lua +copy SprintIntoBattle.lua IntellectoftheSage.lua +copy SprintIntoBattle.lua IntellectualFeasting.lua +copy SprintIntoBattle.lua MagicalProtection.lua +copy SprintIntoBattle.lua WardofGlyphs.lua +copy SprintIntoBattle.lua AkanonsInnovation.lua +copy SprintIntoBattle.lua ChemicalCalculations.lua +copy SprintIntoBattle.lua ClockworkArmy.lua +copy SprintIntoBattle.lua FlashofInsight.lua +copy SprintIntoBattle.lua ForgeInvention.lua +copy SprintIntoBattle.lua HealthyAppetite.lua +copy SprintIntoBattle.lua IllusionClockwork.lua +copy SprintIntoBattle.lua LostintheCrowd.lua +copy SprintIntoBattle.lua MeldrathsTeachings.lua +copy SprintIntoBattle.lua SteamfontsMagicalBarrier.lua +copy SprintIntoBattle.lua Ayr`DalAdornment.lua +copy SprintIntoBattle.lua Camouflage.lua +copy SprintIntoBattle.lua ElvenHeritage.lua +copy SprintIntoBattle.lua ElvenReflexes.lua +copy SprintIntoBattle.lua ForestNavigation.lua +copy SprintIntoBattle.lua GiftoftheFaydark.lua +copy SprintIntoBattle.lua Hardiness.lua +copy SprintIntoBattle.lua MisfitsTrickery.lua +copy SprintIntoBattle.lua MixedKnowledge.lua +copy SprintIntoBattle.lua RebelliousSpirit.lua +copy SprintIntoBattle.lua TendWounds.lua +copy SprintIntoBattle.lua AHalflingsFeast.lua +copy SprintIntoBattle.lua ArcaneKnowledge.lua +copy SprintIntoBattle.lua ConnoisseurofFineWines.lua +copy SprintIntoBattle.lua ElvenWisdom.lua +copy SprintIntoBattle.lua EsotericStudy.lua +copy SprintIntoBattle.lua FuryofFelwithe.lua +copy SprintIntoBattle.lua GildingofFelwithe.lua +copy SprintIntoBattle.lua GracefulMovements.lua +copy SprintIntoBattle.lua HarmoniousMind.lua +copy SprintIntoBattle.lua IntricateCreations.lua +copy SprintIntoBattle.lua TenetofTakish`Hiz.lua +copy SprintIntoBattle.lua TrainingoftheKoada`Dal.lua +copy SprintIntoBattle.lua Clothier.lua +copy SprintIntoBattle.lua Diplomacy.lua +copy SprintIntoBattle.lua Diversity.lua +copy SprintIntoBattle.lua EnvironmentalAdaptability.lua +copy SprintIntoBattle.lua Multitalented.lua +copy SprintIntoBattle.lua Perserverance.lua +copy SprintIntoBattle.lua UrbanSprawl.lua +copy SprintIntoBattle.lua Versatility.lua +copy SprintIntoBattle.lua WilltoSurvive.lua +copy SprintIntoBattle.lua DefensiveColoration.lua +copy SprintIntoBattle.lua ProficientSwimmer.lua +copy SprintIntoBattle.lua ReptilianAncestry.lua +copy SprintIntoBattle.lua ArmoroftheFeerrott.lua +copy SprintIntoBattle.lua BattleRest.lua +copy SprintIntoBattle.lua BruteStrength.lua +copy SprintIntoBattle.lua ImpenetrableWill.lua +copy SprintIntoBattle.lua ManyMarches.lua +copy SprintIntoBattle.lua OggokianAggression.lua +copy SprintIntoBattle.lua OggokianTrade.lua +copy SprintIntoBattle.lua RallosZeksBlessing.lua +copy SprintIntoBattle.lua RallosianReadiness.lua +copy SprintIntoBattle.lua RockThrower.lua +copy SprintIntoBattle.lua ShoulderSlam.lua +copy SprintIntoBattle.lua Antidote.lua +copy SprintIntoBattle.lua DarkAgenda.lua +copy SprintIntoBattle.lua InstrumentsoftheUnderfoot.lua +copy SprintIntoBattle.lua PitifulPlea.lua +copy SprintIntoBattle.lua PoisonPlay.lua +copy SprintIntoBattle.lua RodentReflexes.lua +copy SprintIntoBattle.lua ShadowLurker.lua +copy SprintIntoBattle.lua SoulMending.lua +copy SprintIntoBattle.lua StreetThug.lua +copy SprintIntoBattle.lua BogBully.lua +copy SprintIntoBattle.lua CazicThulesGift.lua +copy SprintIntoBattle.lua GiftoftheInnothule.lua +copy SprintIntoBattle.lua InnothulesBlessing.lua +copy SprintIntoBattle.lua ManiacalMadness.lua +copy SprintIntoBattle.lua MenderoftheMire.lua +copy SprintIntoBattle.lua SummonFilthyWater.lua +copy SprintIntoBattle.lua SwampBreath.lua +copy SprintIntoBattle.lua TastyThings.lua +copy SprintIntoBattle.lua ThulesGuidance.lua +copy SprintIntoBattle.lua TrollGourmet.lua +copy SprintIntoBattle.lua Camo.lua +copy SprintIntoBattle.lua ElvishSpirits.lua +copy SprintIntoBattle.lua FaydwerFashions.lua +copy SprintIntoBattle.lua ForestFire.lua +copy SprintIntoBattle.lua KeeperoftheForest.lua +copy SprintIntoBattle.lua LightFooted.lua +copy SprintIntoBattle.lua NaturalRecovery.lua +copy SprintIntoBattle.lua ShieldofNature.lua +copy SprintIntoBattle.lua VitalityoftheFier`Dal.lua +copy SprintIntoBattle.lua WisdomoftheFaydark.lua +copy SprintIntoBattle.lua AerialDodging.lua +copy SprintIntoBattle.lua EscapingDive.lua +copy SprintIntoBattle.lua FaeDexterity.lua +copy SprintIntoBattle.lua FaeFlight.lua +copy SprintIntoBattle.lua Featherfall.lua +copy SprintIntoBattle.lua ForestKnowledge.lua +copy SprintIntoBattle.lua Glide.lua +copy SprintIntoBattle.lua MagicoftheFae.lua +copy SprintIntoBattle.lua MagicalTeachings.lua +copy SprintIntoBattle.lua ToxicProtection.lua +copy SprintIntoBattle.lua WindWalker.lua +copy SprintIntoBattle.lua AerialDodging.lua +copy SprintIntoBattle.lua ArasaiFlight.lua +copy SprintIntoBattle.lua ArasaiSavvy.lua +copy SprintIntoBattle.lua ArasaisEndurance.lua +copy SprintIntoBattle.lua DarkEnvy.lua +copy SprintIntoBattle.lua MagicProtection.lua +copy SprintIntoBattle.lua NeriakPrecision.lua +copy SprintIntoBattle.lua Transmography.lua +copy SprintIntoBattle.lua CarpentersTouch.lua +copy SprintIntoBattle.lua HerbalSupplementation.lua +copy SprintIntoBattle.lua HuntersFury.lua +copy SprintIntoBattle.lua Junglewalk.lua +copy SprintIntoBattle.lua ReflexiveLanding.lua +copy SprintIntoBattle.lua Spirituality.lua +copy SprintIntoBattle.lua Stride.lua +copy SprintIntoBattle.lua WeaponProduction.lua diff --git a/server/Spells/Traits/Agile.lua b/server/Spells/Traits/Agile.lua new file mode 100644 index 000000000..10d35d650 --- /dev/null +++ b/server/Spells/Traits/Agile.lua @@ -0,0 +1,14 @@ +--[[ + Script Name : Spells\Traits\Agile.lua + Script Purpose : Increases Agility by 4 + Script Author : Zcoretri + Script Date : 2012.07.30 +--]] + +function cast(Caster, Target, StatAmt) + AddSpellBonus(Target, 2, StatAmt) +end + +function remove(Caster, Target, StatAmt) + RemoveSpellBonus(Target) +end \ No newline at end of file diff --git a/server/Spells/Traits/Attentive.lua b/server/Spells/Traits/Attentive.lua new file mode 100644 index 000000000..f1b6d81f9 --- /dev/null +++ b/server/Spells/Traits/Attentive.lua @@ -0,0 +1,14 @@ +--[[ + Script Name : Spells\Traditions\Pools\Attentive.lua + Script Purpose : Increases In-Combat Power Regen by 5.0 + Script Author : Zcoretri + Script Date : 2012.09.11 +--]] + +function cast(Caster, Target, Modifier) + AddSpellBonus(Target, 601, BonusAmt) +end + +function remove(Caster, Target, StatAmt) + RemoveSpellBonus(Target) +end \ No newline at end of file diff --git a/server/Spells/Traits/Brawny.lua b/server/Spells/Traits/Brawny.lua new file mode 100644 index 000000000..b0fa256c7 --- /dev/null +++ b/server/Spells/Traits/Brawny.lua @@ -0,0 +1,14 @@ +--[[ + Script Name : Spells\Traits\Brawny.lua + Script Purpose : Increases Strength by 4 + Script Author : Zcoretri + Script Date : 2012.07.22 +--]] + +function cast(Caster, Target, StatAmt) + AddSpellBonus(Target, 0, StatAmt) +end + +function remove(Caster, Target, StatAmt) + RemoveSpellBonus(Target) +end \ No newline at end of file diff --git a/server/Spells/Traits/Brilliant.lua b/server/Spells/Traits/Brilliant.lua new file mode 100644 index 000000000..17ebafc25 --- /dev/null +++ b/server/Spells/Traits/Brilliant.lua @@ -0,0 +1,14 @@ +--[[ + Script Name : Spells\Traits\Brilliant.lua + Script Purpose : Increases Intelligence by 4 + Script Author : Zcoretri + Script Date : 2012.07.30 +--]] + +function cast(Caster, Target, StatAmt) + AddSpellBonus(Target, 4, StatAmt) +end + +function remove(Caster, Target, StatAmt) + RemoveSpellBonus(Target) +end \ No newline at end of file diff --git a/server/Spells/Traits/Cabalistic.lua b/server/Spells/Traits/Cabalistic.lua new file mode 100644 index 000000000..647474cb6 --- /dev/null +++ b/server/Spells/Traits/Cabalistic.lua @@ -0,0 +1,14 @@ +--[[ + Script Name : Spells/Traits/Cabalistic.lua + Script Purpose : Increases mitigation vs arcane damage by 270 + Script Author : Zcoretri + Script Date : 2012.07.30 +--]] + +function cast(Caster, Target, StatAmt) + AddSpellBonus(Target, 205, StatAmt) +end + +function remove(Caster, Target, StatAmt) + RemoveSpellBonus(Target) +end \ No newline at end of file diff --git a/server/Spells/Traits/Calm.lua b/server/Spells/Traits/Calm.lua new file mode 100644 index 000000000..2609c2c14 --- /dev/null +++ b/server/Spells/Traits/Calm.lua @@ -0,0 +1,14 @@ +--[[ + Script Name : Spells\Traditions\Pools\Calm.lua + Script Purpose : Increases In-Combat Power Regen by 5.0 + Script Author : Zcoretri + Script Date : 2012.09.11 +--]] + +function cast(Caster, Target, Modifier) + AddSpellBonus(Target, 601, BonusAmt) +end + +function remove(Caster, Target, StatAmt) + RemoveSpellBonus(Target) +end \ No newline at end of file diff --git a/server/Spells/Traits/Centered.lua b/server/Spells/Traits/Centered.lua new file mode 100644 index 000000000..06ee6a66f --- /dev/null +++ b/server/Spells/Traits/Centered.lua @@ -0,0 +1,16 @@ +--[[ + Script Name : Spells\Traditions\Pools\Centered.lua + Script Purpose : Increases Max Power by 2.5% + Script Author : Zcoretri + Script Date : 2012.07.22 +--]] + +function cast(Caster, Target, Modifier) + CurPower = GetMaxPower(Target) + BonusAmt = CurPower * Modifier + AddSpellBonus(Target, 501, BonusAmt) +end + +function remove(Caster, Target, StatAmt) + RemoveSpellBonus(Target) +end \ No newline at end of file diff --git a/server/Spells/Traits/Clever.lua b/server/Spells/Traits/Clever.lua new file mode 100644 index 000000000..2284d7222 --- /dev/null +++ b/server/Spells/Traits/Clever.lua @@ -0,0 +1,14 @@ +--[[ + Script Name : Spells\Traits\Clever.lua + Script Purpose : Increases Intelligence by 4 + Script Author : Zcoretri + Script Date : 2012.07.30 +--]] + +function cast(Caster, Target, StatAmt) + AddSpellBonus(Target, 4, StatAmt) +end + +function remove(Caster, Target, StatAmt) + RemoveSpellBonus(Target) +end \ No newline at end of file diff --git a/server/Spells/Traits/ColdBlooded.lua b/server/Spells/Traits/ColdBlooded.lua new file mode 100644 index 000000000..d6a0a7b46 --- /dev/null +++ b/server/Spells/Traits/ColdBlooded.lua @@ -0,0 +1,14 @@ +--[[ + Script Name : Spells/Traits/ColdBlooded.lua + Script Purpose : Increases mitigation vs elemental damage by 270 + Script Author : Zcoretri + Script Date : 2012.07.30 +--]] + +function cast(Caster, Target, StatAmt) + AddSpellBonus(Target, 203, StatAmt) +end + +function remove(Caster, Target, StatAmt) + RemoveSpellBonus(Target) +end \ No newline at end of file diff --git a/server/Spells/Traits/Concentration.lua b/server/Spells/Traits/Concentration.lua new file mode 100644 index 000000000..3018aaa75 --- /dev/null +++ b/server/Spells/Traits/Concentration.lua @@ -0,0 +1,14 @@ +--[[ + Script Name : Spells\Traditions\Pools\Concentration.lua + Script Purpose : Increases In-Combat Power Regen by 5.0 + Script Author : Zcoretri + Script Date : 2012.09.11 +--]] + +function cast(Caster, Target, Modifier) + AddSpellBonus(Target, 601, BonusAmt) +end + +function remove(Caster, Target, StatAmt) + RemoveSpellBonus(Target) +end \ No newline at end of file diff --git a/server/Spells/Traits/Cryptic.lua b/server/Spells/Traits/Cryptic.lua new file mode 100644 index 000000000..d55bc94f0 --- /dev/null +++ b/server/Spells/Traits/Cryptic.lua @@ -0,0 +1,14 @@ +--[[ + Script Name : Spells/Traits/Cryptic.lua + Script Purpose : Increases mitigation vs arcane damage by 270 + Script Author : Zcoretri + Script Date : 2012.07.30 +--]] + +function cast(Caster, Target, StatAmt) + AddSpellBonus(Target, 205, StatAmt) +end + +function remove(Caster, Target, StatAmt) + RemoveSpellBonus(Target) +end \ No newline at end of file diff --git a/server/Spells/Traits/Dauntless.lua b/server/Spells/Traits/Dauntless.lua new file mode 100644 index 000000000..d46af2a0c --- /dev/null +++ b/server/Spells/Traits/Dauntless.lua @@ -0,0 +1,16 @@ +--[[ + Script Name : Spells\Traditions\Pools\Dauntless.lua + Script Purpose : Increases Max Health by 2.5% + Script Author : Zcoretri + Script Date : 2012.09.11 +--]] + +function cast(Caster, Target, Modifier) + CurHealth = GetMaxHealth(Target) + BonusAmt = CurHealth * Modifier + AddSpellBonus(Target, 500, BonusAmt) +end + +function remove(Caster, Target, StatAmt) + RemoveSpellBonus(Target) +end \ No newline at end of file diff --git a/server/Spells/Traits/Deft.lua b/server/Spells/Traits/Deft.lua new file mode 100644 index 000000000..8713e64ac --- /dev/null +++ b/server/Spells/Traits/Deft.lua @@ -0,0 +1,14 @@ +--[[ + Script Name : Spells\Traits\Deft.lua + Script Purpose : Increases Agility by 4 + Script Author : Zcoretri + Script Date : 2012.07.30 +--]] + +function cast(Caster, Target, StatAmt) + AddSpellBonus(Target, 2, StatAmt) +end + +function remove(Caster, Target, StatAmt) + RemoveSpellBonus(Target) +end \ No newline at end of file diff --git a/server/Spells/Traits/Devout.lua b/server/Spells/Traits/Devout.lua new file mode 100644 index 000000000..ea0f85e27 --- /dev/null +++ b/server/Spells/Traits/Devout.lua @@ -0,0 +1,14 @@ +--[[ + Script Name : Spells/Traits/Devout.lua + Script Purpose : Increases mitigation vs noxious damage by 270 + Script Author : Zcoretri + Script Date : 2012.07.30 +--]] + +function cast(Caster, Target, StatAmt) + AddSpellBonus(Target, 209, StatAmt) +end + +function remove(Caster, Target, StatAmt) + RemoveSpellBonus(Target) +end \ No newline at end of file diff --git a/server/Spells/Traits/Dexterous.lua b/server/Spells/Traits/Dexterous.lua new file mode 100644 index 000000000..6a1ae22e2 --- /dev/null +++ b/server/Spells/Traits/Dexterous.lua @@ -0,0 +1,14 @@ +--[[ + Script Name : Spells\Traits\Dexterous.lua + Script Purpose : Increases Agility by 4 + Script Author : Zcoretri + Script Date : 2012.07.30 +--]] + +function cast(Caster, Target, StatAmt) + AddSpellBonus(Target, 2, StatAmt) +end + +function remove(Caster, Target, StatAmt) + RemoveSpellBonus(Target) +end \ No newline at end of file diff --git a/server/Spells/Traits/Durable.lua b/server/Spells/Traits/Durable.lua new file mode 100644 index 000000000..fb9e738e8 --- /dev/null +++ b/server/Spells/Traits/Durable.lua @@ -0,0 +1,14 @@ +--[[ + Script Name : Spells\Traits\Durable.lua + Script Purpose : Increases Stamina by 4 + Script Author : Zcoretri + Script Date : 2012.07.30 +--]] + +function cast(Caster, Target, StatAmt) + AddSpellBonus(Target, 1, StatAmt) +end + +function remove(Caster, Target, StatAmt) + RemoveSpellBonus(Target) +end \ No newline at end of file diff --git a/server/Spells/Traits/Enduring.lua b/server/Spells/Traits/Enduring.lua new file mode 100644 index 000000000..4e07545e4 --- /dev/null +++ b/server/Spells/Traits/Enduring.lua @@ -0,0 +1,14 @@ +--[[ + Script Name : Spells\Traits\Enduring.lua + Script Purpose : Increases Stamina by 4 + Script Author : Zcoretri + Script Date : 2012.07.30 +--]] + +function cast(Caster, Target, StatAmt) + AddSpellBonus(Target, 1, StatAmt) +end + +function remove(Caster, Target, StatAmt) + RemoveSpellBonus(Target) +end \ No newline at end of file diff --git a/server/Spells/Traits/Enlightened.lua b/server/Spells/Traits/Enlightened.lua new file mode 100644 index 000000000..c81aaeb6b --- /dev/null +++ b/server/Spells/Traits/Enlightened.lua @@ -0,0 +1,14 @@ +--[[ + Script Name : Spells\Traits\Enlightened.lua + Script Purpose : Increases Wisdom by 4 + Script Author : Zcoretri + Script Date : 2012.07.30 +--]] + +function cast(Caster, Target, StatAmt) + AddSpellBonus(Target, 3, StatAmt) +end + +function remove(Caster, Target, StatAmt) + RemoveSpellBonus(Target) +end \ No newline at end of file diff --git a/server/Spells/Traits/Fireborn.lua b/server/Spells/Traits/Fireborn.lua new file mode 100644 index 000000000..2810047fc --- /dev/null +++ b/server/Spells/Traits/Fireborn.lua @@ -0,0 +1,14 @@ +--[[ + Script Name : Spells/Traits/Fireborn.lua + Script Purpose : Increases mitigation vs elemental damage by 270 + Script Author : Zcoretri + Script Date : 2012.07.30 +--]] + +function cast(Caster, Target, StatAmt) + AddSpellBonus(Target, 205, StatAmt) +end + +function remove(Caster, Target, StatAmt) + RemoveSpellBonus(Target) +end \ No newline at end of file diff --git a/server/Spells/Traits/Focused.lua b/server/Spells/Traits/Focused.lua new file mode 100644 index 000000000..ac593878b --- /dev/null +++ b/server/Spells/Traits/Focused.lua @@ -0,0 +1,16 @@ +--[[ + Script Name : Spells\Traditions\Pools\Focused.lua + Script Purpose : Increases Max Power by 2.5% + Script Author : Zcoretri + Script Date : 2012.09.11 +--]] + +function cast(Caster, Target, Modifier) + CurPower = GetMaxPower(Target) + BonusAmt = CurPower * Modifier + AddSpellBonus(Target, 501, BonusAmt) +end + +function remove(Caster, Target, StatAmt) + RemoveSpellBonus(Target) +end \ No newline at end of file diff --git a/server/Spells/Traits/Force.lua b/server/Spells/Traits/Force.lua new file mode 100644 index 000000000..ba00f177a --- /dev/null +++ b/server/Spells/Traits/Force.lua @@ -0,0 +1,14 @@ +--[[ + Script Name : Spells\Traits\Force.lua + Script Purpose : Increases Strength by 4 + Script Author : Zcoretri + Script Date : 2012.07.30 +--]] + +function cast(Caster, Target, StatAmt) + AddSpellBonus(Target, 0, StatAmt) +end + +function remove(Caster, Target, StatAmt) + RemoveSpellBonus(Target) +end \ No newline at end of file diff --git a/server/Spells/Traits/Frostborn.lua b/server/Spells/Traits/Frostborn.lua new file mode 100644 index 000000000..c1c681a21 --- /dev/null +++ b/server/Spells/Traits/Frostborn.lua @@ -0,0 +1,14 @@ +--[[ + Script Name : Spells/Traits/Frostborn.lua + Script Purpose : Increases mitigation vs elemental damage by 270 + Script Author : Zcoretri + Script Date : 2012.07.30 +--]] + +function cast(Caster, Target, StatAmt) + AddSpellBonus(Target, 203, StatAmt) +end + +function remove(Caster, Target, StatAmt) + RemoveSpellBonus(Target) +end \ No newline at end of file diff --git a/server/Spells/Traits/Halcyon.lua b/server/Spells/Traits/Halcyon.lua new file mode 100644 index 000000000..d4b1c61df --- /dev/null +++ b/server/Spells/Traits/Halcyon.lua @@ -0,0 +1,16 @@ +--[[ + Script Name : Spells\Traditions\Pools\Halcyon.lua + Script Purpose : Increases Max Power by 2.5% + Script Author : Zcoretri + Script Date : 2012.09.11 +--]] + +function cast(Caster, Target, Modifier) + CurPower = GetMaxPower(Target) + BonusAmt = CurPower * Modifier + AddSpellBonus(Target, 501, BonusAmt) +end + +function remove(Caster, Target, StatAmt) + RemoveSpellBonus(Target) +end \ No newline at end of file diff --git a/server/Spells/Traits/Hardened.lua b/server/Spells/Traits/Hardened.lua new file mode 100644 index 000000000..a5eeaf8fe --- /dev/null +++ b/server/Spells/Traits/Hardened.lua @@ -0,0 +1,14 @@ +--[[ + Script Name : Spells\Traits\Hardened.lua + Script Purpose : Increases mitigation vs physical damage by 270 + Script Author : Zcoretri + Script Date : 2012.07.30 +--]] + +function cast(Caster, Target, StatAmt) + AddSpellBonus(Target, 200, StatAmt) +end + +function remove(Caster, Target, StatAmt) + RemoveSpellBonus(Target) +end \ No newline at end of file diff --git a/server/Spells/Traits/Hardy.lua b/server/Spells/Traits/Hardy.lua new file mode 100644 index 000000000..d5a1498a7 --- /dev/null +++ b/server/Spells/Traits/Hardy.lua @@ -0,0 +1,14 @@ +--[[ + Script Name : Spells\Traits\Hardy.lua + Script Purpose : Increases mitigation vs physical damage by 270 + Script Author : Zcoretri + Script Date : 2012.07.30 +--]] + +function cast(Caster, Target, StatAmt) + AddSpellBonus(Target, 200, StatAmt) +end + +function remove(Caster, Target, StatAmt) + RemoveSpellBonus(Target) +end \ No newline at end of file diff --git a/server/Spells/Traits/Healthy.lua b/server/Spells/Traits/Healthy.lua new file mode 100644 index 000000000..0e95da5fb --- /dev/null +++ b/server/Spells/Traits/Healthy.lua @@ -0,0 +1,14 @@ +--[[ + Script Name : Spells\Traditions\Pools\Healthy.lua + Script Purpose : Increases In-Combat Health Regen by 5.0 + Script Author : Zcoretri + Script Date : 2012.09.11 +--]] + +function cast(Caster, Target, Modifier) + AddSpellBonus(Target, 600, BonusAmt) +end + +function remove(Caster, Target, StatAmt) + RemoveSpellBonus(Target) +end \ No newline at end of file diff --git a/server/Spells/Traits/Hygienic.lua b/server/Spells/Traits/Hygienic.lua new file mode 100644 index 000000000..a9f274831 --- /dev/null +++ b/server/Spells/Traits/Hygienic.lua @@ -0,0 +1,14 @@ +--[[ + Script Name : Spells/Traits/Hygienic.lua + Script Purpose : Increases mitigation vs noxiuos damage by 270 + Script Author : Zcoretri + Script Date : 2012.07.30 +--]] + +function cast(Caster, Target, StatAmt) + AddSpellBonus(Target, 209, StatAmt) +end + +function remove(Caster, Target, StatAmt) + RemoveSpellBonus(Target) +end \ No newline at end of file diff --git a/server/Spells/Traits/Insightful.lua b/server/Spells/Traits/Insightful.lua new file mode 100644 index 000000000..dccb653c0 --- /dev/null +++ b/server/Spells/Traits/Insightful.lua @@ -0,0 +1,14 @@ +--[[ + Script Name : Spells\Traits\Insightful.lua + Script Purpose : Increases Wisdom by 4 + Script Author : Zcoretri + Script Date : 2012.07.22 +--]] + +function cast(Caster, Target, StatAmt) + AddSpellBonus(Target, 3, StatAmt) +end + +function remove(Caster, Target, StatAmt) + RemoveSpellBonus(Target) +end \ No newline at end of file diff --git a/server/Spells/Traits/Intelligent.lua b/server/Spells/Traits/Intelligent.lua new file mode 100644 index 000000000..edffd111d --- /dev/null +++ b/server/Spells/Traits/Intelligent.lua @@ -0,0 +1,14 @@ +--[[ + Script Name : Spells\Traits\Intelligent.lua + Script Purpose : Increases Intelligence by 4 + Script Author : Zcoretri + Script Date : 2012.07.30 +--]] + +function cast(Caster, Target, StatAmt) + AddSpellBonus(Target, 4, StatAmt) +end + +function remove(Caster, Target, StatAmt) + RemoveSpellBonus(Target) +end \ No newline at end of file diff --git a/server/Spells/Traits/Intent.lua b/server/Spells/Traits/Intent.lua new file mode 100644 index 000000000..bf5a49b9b --- /dev/null +++ b/server/Spells/Traits/Intent.lua @@ -0,0 +1,14 @@ +--[[ + Script Name : Spells/Traits/Intent.lua + Script Purpose : Increases mitigation vs arcane damage by 270 + Script Author : Zcoretri + Script Date : 2012.07.30 +--]] + +function cast(Caster, Target, StatAmt) + AddSpellBonus(Target, 205, StatAmt) +end + +function remove(Caster, Target, StatAmt) + RemoveSpellBonus(Target) +end \ No newline at end of file diff --git a/server/Spells/Traits/Intrepid.lua b/server/Spells/Traits/Intrepid.lua new file mode 100644 index 000000000..7cd55e2ce --- /dev/null +++ b/server/Spells/Traits/Intrepid.lua @@ -0,0 +1,14 @@ +--[[ + Script Name : Spells\Traditions\Pools\Intrepid.lua + Script Purpose : Increases In-Combat Health Regen by 5.0 + Script Author : Zcoretri + Script Date : 2012.09.11 +--]] + +function cast(Caster, Target, Modifier) + AddSpellBonus(Target, 600, BonusAmt) +end + +function remove(Caster, Target, StatAmt) + RemoveSpellBonus(Target) +end \ No newline at end of file diff --git a/server/Spells/Traits/Lively.lua b/server/Spells/Traits/Lively.lua new file mode 100644 index 000000000..bcc2693eb --- /dev/null +++ b/server/Spells/Traits/Lively.lua @@ -0,0 +1,14 @@ +--[[ + Script Name : Spells\Traditions\Pools\Lively.lua + Script Purpose : Increases In-Combat Health Regen by 5.0 + Script Author : Zcoretri + Script Date : 2012.09.11 +--]] + +function cast(Caster, Target, Modifier) + AddSpellBonus(Target, 600, BonusAmt) +end + +function remove(Caster, Target, StatAmt) + RemoveSpellBonus(Target) +end \ No newline at end of file diff --git a/server/Spells/Traits/Lucid.lua b/server/Spells/Traits/Lucid.lua new file mode 100644 index 000000000..cb7de9510 --- /dev/null +++ b/server/Spells/Traits/Lucid.lua @@ -0,0 +1,14 @@ +--[[ + Script Name : Spells\Traditions\Pools\Lucid.lua + Script Purpose : Increases In-Combat Power Regen by 5.0 + Script Author : Zcoretri + Script Date : 2012.09.11 +--]] + +function cast(Caster, Target, Modifier) + AddSpellBonus(Target, 601, BonusAmt) +end + +function remove(Caster, Target, StatAmt) + RemoveSpellBonus(Target) +end \ No newline at end of file diff --git a/server/Spells/Traits/Muscular.lua b/server/Spells/Traits/Muscular.lua new file mode 100644 index 000000000..9a727a916 --- /dev/null +++ b/server/Spells/Traits/Muscular.lua @@ -0,0 +1,14 @@ +--[[ + Script Name : Spells\Traits\Muscular.lua + Script Purpose : Increases Strength by 4 + Script Author : Zcoretri + Script Date : 2012.07.30 +--]] + +function cast(Caster, Target, StatAmt) + AddSpellBonus(Target, 0, StatAmt) +end + +function remove(Caster, Target, StatAmt) + RemoveSpellBonus(Target) +end \ No newline at end of file diff --git a/server/Spells/Traits/Nimble.lua b/server/Spells/Traits/Nimble.lua new file mode 100644 index 000000000..4e56f9dd4 --- /dev/null +++ b/server/Spells/Traits/Nimble.lua @@ -0,0 +1,14 @@ +--[[ + Script Name : Spells\Traits\Nimble.lua + Script Purpose : Increases Agility by 4 + Script Author : Zcoretri + Script Date : 2012.07.30 +--]] + +function cast(Caster, Target, StatAmt) + AddSpellBonus(Target, 2, StatAmt) +end + +function remove(Caster, Target, StatAmt) + RemoveSpellBonus(Target) +end \ No newline at end of file diff --git a/server/Spells/Traits/Perceptive.lua b/server/Spells/Traits/Perceptive.lua new file mode 100644 index 000000000..a9c3f9fc1 --- /dev/null +++ b/server/Spells/Traits/Perceptive.lua @@ -0,0 +1,14 @@ +--[[ + Script Name : Spells\Traits\Perceptive.lua + Script Purpose : Increases Wisdom by 4 + Script Author : Zcoretri + Script Date : 2012.07.30 +--]] + +function cast(Caster, Target, StatAmt) + AddSpellBonus(Target, 3, StatAmt) +end + +function remove(Caster, Target, StatAmt) + RemoveSpellBonus(Target) +end \ No newline at end of file diff --git a/server/Spells/Traits/Powerful.lua b/server/Spells/Traits/Powerful.lua new file mode 100644 index 000000000..a1c20cc52 --- /dev/null +++ b/server/Spells/Traits/Powerful.lua @@ -0,0 +1,14 @@ +--[[ + Script Name : Spells\Traits\Powerful.lua + Script Purpose : Increases Strength by 4 + Script Author : Zcoretri + Script Date : 2012.07.30 +--]] + +function cast(Caster, Target, StatAmt) + AddSpellBonus(Target, 0, StatAmt) +end + +function remove(Caster, Target, StatAmt) + RemoveSpellBonus(Target) +end \ No newline at end of file diff --git a/server/Spells/Traits/Pristine.lua b/server/Spells/Traits/Pristine.lua new file mode 100644 index 000000000..a0f73dade --- /dev/null +++ b/server/Spells/Traits/Pristine.lua @@ -0,0 +1,14 @@ +--[[ + Script Name : Spells/Traits/Pristine.lua + Script Purpose : Increases mitigation vs noxious damage by 270 + Script Author : Zcoretri + Script Date : 2012.07.30 +--]] + +function cast(Caster, Target, StatAmt) + AddSpellBonus(Target, 209, StatAmt) +end + +function remove(Caster, Target, StatAmt) + RemoveSpellBonus(Target) +end \ No newline at end of file diff --git a/server/Spells/Traits/Purity.lua b/server/Spells/Traits/Purity.lua new file mode 100644 index 000000000..ac23e348e --- /dev/null +++ b/server/Spells/Traits/Purity.lua @@ -0,0 +1,14 @@ +--[[ + Script Name : Spells/Traits/Purity.lua + Script Purpose : Increases mitigation vs noxious damage by 270 + Script Author : Zcoretri + Script Date : 2012.07.30 +--]] + +function cast(Caster, Target, StatAmt) + AddSpellBonus(Target, 209, StatAmt) +end + +function remove(Caster, Target, StatAmt) + RemoveSpellBonus(Target) +end \ No newline at end of file diff --git a/server/Spells/Traits/Recondite.lua b/server/Spells/Traits/Recondite.lua new file mode 100644 index 000000000..83bbaa7d0 --- /dev/null +++ b/server/Spells/Traits/Recondite.lua @@ -0,0 +1,14 @@ +--[[ + Script Name : Spells/Traits/Recondite.lua + Script Purpose : Increases mitigation vs arcane damage by 270 + Script Author : Zcoretri + Script Date : 2012.07.30 +--]] + +function cast(Caster, Target, StatAmt) + AddSpellBonus(Target, 205, StatAmt) +end + +function remove(Caster, Target, StatAmt) + RemoveSpellBonus(Target) +end \ No newline at end of file diff --git a/server/Spells/Traits/Resilient.lua b/server/Spells/Traits/Resilient.lua new file mode 100644 index 000000000..6fb68ce49 --- /dev/null +++ b/server/Spells/Traits/Resilient.lua @@ -0,0 +1,14 @@ +--[[ + Script Name : Spells/Traits/Resilient.lua + Script Purpose : Increases mitigation vs elemental damage by 270 + Script Author : Zcoretri + Script Date : 2012.07.30 +--]] + +function cast(Caster, Target, StatAmt) + AddSpellBonus(Target, 203, StatAmt) +end + +function remove(Caster, Target, StatAmt) + RemoveSpellBonus(Target) +end \ No newline at end of file diff --git a/server/Spells/Traits/Resistant.lua b/server/Spells/Traits/Resistant.lua new file mode 100644 index 000000000..e183f463a --- /dev/null +++ b/server/Spells/Traits/Resistant.lua @@ -0,0 +1,14 @@ +--[[ + Script Name : Spells\Traits\Resistant.lua + Script Purpose : Increases mitigation vs physical damage by 270 + Script Author : Zcoretri + Script Date : 2012.07.30 +--]] + +function cast(Caster, Target, StatAmt) + AddSpellBonus(Target, 200, StatAmt) +end + +function remove(Caster, Target, StatAmt) + RemoveSpellBonus(Target) +end \ No newline at end of file diff --git a/server/Spells/Traits/Resolute.lua b/server/Spells/Traits/Resolute.lua new file mode 100644 index 000000000..27cac83d4 --- /dev/null +++ b/server/Spells/Traits/Resolute.lua @@ -0,0 +1,14 @@ +--[[ + Script Name : Spells\Traits\Resolute.lua + Script Purpose : Increases Stamina by 4 + Script Author : Zcoretri + Script Date : 2012.07.30 +--]] + +function cast(Caster, Target, StatAmt) + AddSpellBonus(Target, 1, StatAmt) +end + +function remove(Caster, Target, StatAmt) + RemoveSpellBonus(Target) +end \ No newline at end of file diff --git a/server/Spells/Traits/Rigid.lua b/server/Spells/Traits/Rigid.lua new file mode 100644 index 000000000..bf76a699b --- /dev/null +++ b/server/Spells/Traits/Rigid.lua @@ -0,0 +1,14 @@ +--[[ + Script Name : Spells\Traits\Rigid.lua + Script Purpose : Increases mitigation vs physical damage by 270 + Script Author : Zcoretri + Script Date : 2012.07.30 +--]] + +function cast(Caster, Target, StatAmt) + AddSpellBonus(Target, 200, StatAmt) +end + +function remove(Caster, Target, StatAmt) + RemoveSpellBonus(Target) +end \ No newline at end of file diff --git a/server/Spells/Traits/Robust.lua b/server/Spells/Traits/Robust.lua new file mode 100644 index 000000000..13acd6488 --- /dev/null +++ b/server/Spells/Traits/Robust.lua @@ -0,0 +1,16 @@ +--[[ + Script Name : Spells\Traditions\Pools\Robust.lua + Script Purpose : Increases Max Health by 2.5% + Script Author : Zcoretri + Script Date : 2012.09.11 +--]] + +function cast(Caster, Target, Modifier) + CurHealth = GetMaxHealth(Target) + BonusAmt = CurHealth * Modifier + AddSpellBonus(Target, 500, BonusAmt) +end + +function remove(Caster, Target, StatAmt) + RemoveSpellBonus(Target) +end \ No newline at end of file diff --git a/server/Spells/Traits/Sanitary.lua b/server/Spells/Traits/Sanitary.lua new file mode 100644 index 000000000..456ae633d --- /dev/null +++ b/server/Spells/Traits/Sanitary.lua @@ -0,0 +1,14 @@ +--[[ + Script Name : Spells/Traits/Sanitary.lua + Script Purpose : Increases mitigation vs noxious damage by 270 + Script Author : Zcoretri + Script Date : 2012.07.30 +--]] + +function cast(Caster, Target, StatAmt) + AddSpellBonus(Target, 209, StatAmt) +end + +function remove(Caster, Target, StatAmt) + RemoveSpellBonus(Target) +end \ No newline at end of file diff --git a/server/Spells/Traits/Savvy.lua b/server/Spells/Traits/Savvy.lua new file mode 100644 index 000000000..e2a7316b4 --- /dev/null +++ b/server/Spells/Traits/Savvy.lua @@ -0,0 +1,14 @@ +--[[ + Script Name : Spells\Traits\Savvy.lua + Script Purpose : Increases Intelligence by 4 + Script Author : Zcoretri + Script Date : 2012.07.30 +--]] + +function cast(Caster, Target, StatAmt) + AddSpellBonus(Target, 4, StatAmt) +end + +function remove(Caster, Target, StatAmt) + RemoveSpellBonus(Target) +end \ No newline at end of file diff --git a/server/Spells/Traits/Serene.lua b/server/Spells/Traits/Serene.lua new file mode 100644 index 000000000..6957dd09c --- /dev/null +++ b/server/Spells/Traits/Serene.lua @@ -0,0 +1,16 @@ +--[[ + Script Name : Spells\Traditions\Pools\Serene.lua + Script Purpose : Increases Max Power by 2.5% + Script Author : Zcoretri + Script Date : 2012.09.11 +--]] + +function cast(Caster, Target, Modifier) + CurPower = GetMaxPower(Target) + BonusAmt = CurPower * Modifier + AddSpellBonus(Target, 501, BonusAmt) +end + +function remove(Caster, Target, StatAmt) + RemoveSpellBonus(Target) +end \ No newline at end of file diff --git a/server/Spells/Traits/Sharp.lua b/server/Spells/Traits/Sharp.lua new file mode 100644 index 000000000..8d6ad3205 --- /dev/null +++ b/server/Spells/Traits/Sharp.lua @@ -0,0 +1,14 @@ +--[[ + Script Name : Spells\Traits\Sharp.lua + Script Purpose : Increases Intelligence by 4 + Script Author : Zcoretri + Script Date : 2012.07.30 +--]] + +function cast(Caster, Target, StatAmt) + AddSpellBonus(Target, 4, StatAmt) +end + +function remove(Caster, Target, StatAmt) + RemoveSpellBonus(Target) +end \ No newline at end of file diff --git a/server/Spells/Traits/Spry.lua b/server/Spells/Traits/Spry.lua new file mode 100644 index 000000000..040bd7581 --- /dev/null +++ b/server/Spells/Traits/Spry.lua @@ -0,0 +1,14 @@ +--[[ + Script Name : Spells\Traits\Spry.lua + Script Purpose : Increases Agility by 4 + Script Author : Zcoretri + Script Date : 2012.07.30 +--]] + +function cast(Caster, Target, StatAmt) + AddSpellBonus(Target, 2, StatAmt) +end + +function remove(Caster, Target, StatAmt) + RemoveSpellBonus(Target) +end \ No newline at end of file diff --git a/server/Spells/Traits/Stalwart.lua b/server/Spells/Traits/Stalwart.lua new file mode 100644 index 000000000..e1bca9ad5 --- /dev/null +++ b/server/Spells/Traits/Stalwart.lua @@ -0,0 +1,14 @@ +--[[ + Script Name : Spells\Traditions\Pools\Stalwart.lua + Script Purpose : Increases In-Combat Health Regen by 5.0 + Script Author : Zcoretri + Script Date : 2012.09.11 +--]] + +function cast(Caster, Target, Modifier) + AddSpellBonus(Target, 600, BonusAmt) +end + +function remove(Caster, Target, StatAmt) + RemoveSpellBonus(Target) +end \ No newline at end of file diff --git a/server/Spells/Traits/Stout.lua b/server/Spells/Traits/Stout.lua new file mode 100644 index 000000000..8b715157f --- /dev/null +++ b/server/Spells/Traits/Stout.lua @@ -0,0 +1,16 @@ +--[[ + Script Name : Spells\Traditions\Pools\Stout.lua + Script Purpose : Increases Max Health by 2.5% + Script Author : Zcoretri + Script Date : 2012.09.11 +--]] + +function cast(Caster, Target, Modifier) + CurHealth = GetMaxHealth(Target) + BonusAmt = CurHealth * Modifier + AddSpellBonus(Target, 500, BonusAmt) +end + +function remove(Caster, Target, StatAmt) + RemoveSpellBonus(Target) +end \ No newline at end of file diff --git a/server/Spells/Traits/Strong.lua b/server/Spells/Traits/Strong.lua new file mode 100644 index 000000000..026c7c610 --- /dev/null +++ b/server/Spells/Traits/Strong.lua @@ -0,0 +1,14 @@ +--[[ + Script Name : Spells\Traits\Strong.lua + Script Purpose : Increases Strength by 4 + Script Author : Zcoretri + Script Date : 2012.07.30 +--]] + +function cast(Caster, Target, StatAmt) + AddSpellBonus(Target, 0, StatAmt) +end + +function remove(Caster, Target, StatAmt) + RemoveSpellBonus(Target) +end \ No newline at end of file diff --git a/server/Spells/Traits/Sturdy.lua b/server/Spells/Traits/Sturdy.lua new file mode 100644 index 000000000..1abac72a9 --- /dev/null +++ b/server/Spells/Traits/Sturdy.lua @@ -0,0 +1,16 @@ +--[[ + Script Name : Spells\Traditions\Pools\Sturdy.lua + Script Purpose : Increases Max Health by 2.5% + Script Author : Zcoretri + Script Date : 2012.09.11 +--]] + +function cast(Caster, Target, Modifier) + CurHealth = GetMaxHealth(Target) + BonusAmt = CurHealth * Modifier + AddSpellBonus(Target, 500, BonusAmt) +end + +function remove(Caster, Target, StatAmt) + RemoveSpellBonus(Target) +end \ No newline at end of file diff --git a/server/Spells/Traits/Tough.lua b/server/Spells/Traits/Tough.lua new file mode 100644 index 000000000..07c83b5ef --- /dev/null +++ b/server/Spells/Traits/Tough.lua @@ -0,0 +1,14 @@ +--[[ + Script Name : Spells\Traits\Tough.lua + Script Purpose : Increases mitigation vs physical damage by 270 + Script Author : Zcoretri + Script Date : 2012.07.30 +--]] + +function cast(Caster, Target, StatAmt) + AddSpellBonus(Target, 200, StatAmt) +end + +function remove(Caster, Target, StatAmt) + RemoveSpellBonus(Target) +end \ No newline at end of file diff --git a/server/Spells/Traits/Transcendent.lua b/server/Spells/Traits/Transcendent.lua new file mode 100644 index 000000000..600f5c4d3 --- /dev/null +++ b/server/Spells/Traits/Transcendent.lua @@ -0,0 +1,14 @@ +--[[ + Script Name : Spells/Traits/Transcendent.lua + Script Purpose : Increases mitigation vs arcane damage by 270 + Script Author : Zcoretri + Script Date : 2012.07.30 +--]] + +function cast(Caster, Target, StatAmt) + AddSpellBonus(Target, 205, StatAmt) +end + +function remove(Caster, Target, StatAmt) + RemoveSpellBonus(Target) +end \ No newline at end of file diff --git a/server/Spells/Traits/Untainted.lua b/server/Spells/Traits/Untainted.lua new file mode 100644 index 000000000..f03a521e6 --- /dev/null +++ b/server/Spells/Traits/Untainted.lua @@ -0,0 +1,14 @@ +--[[ + Script Name : Spells/Traits/Untainted.lua + Script Purpose : Increases mitigation vs noxious damage by 270 + Script Author : Zcoretri + Script Date : 2012.07.30 +--]] + +function cast(Caster, Target, StatAmt) + AddSpellBonus(Target, 209, StatAmt) +end + +function remove(Caster, Target, StatAmt) + RemoveSpellBonus(Target) +end \ No newline at end of file diff --git a/server/Spells/Traits/Unyielding.lua b/server/Spells/Traits/Unyielding.lua new file mode 100644 index 000000000..36c91b9fa --- /dev/null +++ b/server/Spells/Traits/Unyielding.lua @@ -0,0 +1,14 @@ +--[[ + Script Name : Spells\Traits\Unyielding.lua + Script Purpose : Increases mitigation vs physical damage by 270 + Script Author : Zcoretri + Script Date : 2012.07.30 +--]] + +function cast(Caster, Target, StatAmt) + AddSpellBonus(Target, 200, StatAmt) +end + +function remove(Caster, Target, StatAmt) + RemoveSpellBonus(Target) +end \ No newline at end of file diff --git a/server/Spells/Traits/Vigorous.lua b/server/Spells/Traits/Vigorous.lua new file mode 100644 index 000000000..ab842e203 --- /dev/null +++ b/server/Spells/Traits/Vigorous.lua @@ -0,0 +1,14 @@ +--[[ + Script Name : Spells\Traits\Vigorous.lua + Script Purpose : Increases Stamina by 4 + Script Author : Zcoretri + Script Date : 2012.07.30 +--]] + +function cast(Caster, Target, StatAmt) + AddSpellBonus(Target, 1, StatAmt) +end + +function remove(Caster, Target, StatAmt) + RemoveSpellBonus(Target) +end \ No newline at end of file diff --git a/server/Spells/Traits/Visionary.lua b/server/Spells/Traits/Visionary.lua new file mode 100644 index 000000000..9d2ac5108 --- /dev/null +++ b/server/Spells/Traits/Visionary.lua @@ -0,0 +1,14 @@ +--[[ + Script Name : Spells\Traits\Visionary.lua + Script Purpose : Increases Wisdom by 4 + Script Author : Zcoretri + Script Date : 2012.07.30 +--]] + +function cast(Caster, Target, StatAmt) + AddSpellBonus(Target, 3, StatAmt) +end + +function remove(Caster, Target, StatAmt) + RemoveSpellBonus(Target) +end \ No newline at end of file diff --git a/server/Spells/Traits/Vital.lua b/server/Spells/Traits/Vital.lua new file mode 100644 index 000000000..b21d47c28 --- /dev/null +++ b/server/Spells/Traits/Vital.lua @@ -0,0 +1,14 @@ +--[[ + Script Name : Spells\Traits\Vital.lua + Script Purpose : Increases Stamina by 4 + Script Author : Zcoretri + Script Date : 2012.07.30 +--]] + +function cast(Caster, Target, StatAmt) + AddSpellBonus(Target, 1, StatAmt) +end + +function remove(Caster, Target, StatAmt) + RemoveSpellBonus(Target) +end \ No newline at end of file diff --git a/server/Spells/Traits/WarmBlooded.lua b/server/Spells/Traits/WarmBlooded.lua new file mode 100644 index 000000000..b63ead47e --- /dev/null +++ b/server/Spells/Traits/WarmBlooded.lua @@ -0,0 +1,14 @@ +--[[ + Script Name : Spells/Traits/Warmblooded.lua + Script Purpose : Increases mitigation vs elemental damage by 270 + Script Author : Zcoretri + Script Date : 2012.07.30 +--]] + +function cast(Caster, Target, StatAmt) + AddSpellBonus(Target, 203, StatAmt) +end + +function remove(Caster, Target, StatAmt) + RemoveSpellBonus(Target) +end \ No newline at end of file diff --git a/server/Spells/Traits/Weathered.lua b/server/Spells/Traits/Weathered.lua new file mode 100644 index 000000000..d6e50b661 --- /dev/null +++ b/server/Spells/Traits/Weathered.lua @@ -0,0 +1,14 @@ +--[[ + Script Name : Spells/Traits/Weathered.lua + Script Purpose : Increases mitigation vs elemental damage by 270 + Script Author : Zcoretri + Script Date : 2012.07.30 +--]] + +function cast(Caster, Target, StatAmt) + AddSpellBonus(Target, 203, StatAmt) +end + +function remove(Caster, Target, StatAmt) + RemoveSpellBonus(Target) +end \ No newline at end of file diff --git a/server/Spells/Traits/Willed.lua b/server/Spells/Traits/Willed.lua new file mode 100644 index 000000000..cf8c04cd1 --- /dev/null +++ b/server/Spells/Traits/Willed.lua @@ -0,0 +1,14 @@ +--[[ + Script Name : Spells/Traits/Willed.lua + Script Purpose : Increases mitigation vs arcane damage by 270 + Script Author : Zcoretri + Script Date : 2012.07.30 +--]] + +function cast(Caster, Target, StatAmt) + AddSpellBonus(Target, 205, StatAmt) +end + +function remove(Caster, Target, StatAmt) + RemoveSpellBonus(Target) +end \ No newline at end of file diff --git a/server/Spells/Traits/Wise.lua b/server/Spells/Traits/Wise.lua new file mode 100644 index 000000000..1078f2896 --- /dev/null +++ b/server/Spells/Traits/Wise.lua @@ -0,0 +1,14 @@ +--[[ + Script Name : Spells\Traits\Wise.lua + Script Purpose : Increases Wisdom by 4 + Script Author : Zcoretri + Script Date : 2012.07.30 +--]] + +function cast(Caster, Target, StatAmt) + AddSpellBonus(Target, 3, StatAmt) +end + +function remove(Caster, Target, StatAmt) + RemoveSpellBonus(Target) +end \ No newline at end of file diff --git a/server/Spells/blank.lua b/server/Spells/blank.lua new file mode 100644 index 000000000..8aa0e67e9 --- /dev/null +++ b/server/Spells/blank.lua @@ -0,0 +1,4 @@ +-- DO NOT DELETE - needed for reference_spell_effects testing +function cast(Caster, Target) +end + diff --git a/server/Spells/commands.lua b/server/Spells/commands.lua new file mode 100644 index 000000000..45055990c --- /dev/null +++ b/server/Spells/commands.lua @@ -0,0 +1,121 @@ +--[[ + Script Name : Spells/commands.lua + Script Purpose : Process game "commands" that use a cast bar + Script Author : Everyone + Script Date : Anytime + Script Notes : Use spells_data to link to the specific command(s) +--]] + +function cast(Caster, Target, Type) + -- JA: commenting out other functions since revamp of database renders the IDs/Spawns invalid (2013/08/18) + if Type == "ThrowSnowball" then + ThrowSnowball(Caster, Target) + end +--[[ + if Type == "Examine" then + Examine(Caster, Target) + elseif Type == "Grab Soil" then + GrabSoil(Caster, Target) + elseif Type == "Plant Seeds" then + PlantSeeds(Caster, Target) + elseif Type == "Burn Tent" then + BurnTent(Caster, Target) + elseif Type == "Destroy Totem" then + DestroyTotem(Caster, Target) + elseif Type == "Smack Hive" then + SmackHive(Caster, Target) + elseif Type == "Help Down" then + HelpDown(Caster, Target) + elseif Type == "Read Gravestone" then + ReadGravestone(Caster, Target) + elseif Type == "ClimbTheBench" then + ClimbTheBench(Caster, Target) + elseif Type == "PullYourselfThroughTheFoliage" then + PullYourselfThroughTheFoliage(Caster, Target) + elseif Type == "InspectBox" then + InspectBox(Caster, Target) + elseif Type == "ThrowSnowball" then + ThrowSnowball(Caster, Target) + end +--]] +end + +function GrabSoil(Caster, Target) + if HasQuest(Caster, 60) and not QuestStepIsComplete(Caster, 60, 3) then + -- Mana-Enriched Soil + SummonItem(Caster, 6463) + end +end + +function PlantSeeds(Caster, Target) +end + +function BurnTent(Caster, Target) + BurnSpawn = GetSpawn(Target, 2780218) + SpawnSet(BurnSpawn, "visual_state", "6866") + SpawnSet(Target, "show_command_icon", "0") + + KillSpawn(Target, Caster, 0) -- kill the tent to get journal update + KillSpawn(BurnSpawn, Caster, 0) -- kill the cube to put out the "tent/'s fire" +end + +function DestroyTotem(Caster, Target) + SpawnSet(Target, "destroy_totem", "0") + SpawnSet(Target, "show_command_icon", "0") + KillSpawn(Target, Caster) +end + +function SmackHive(Caster, Target) + SpawnSet(Target, "show_command_icon", 0) + + -- 20% chance to spawn a Queen bee + -- 80% chance to spawn a soldier bee + choice = math.random(1, 100) + + if choice <= 20 then + -- spawn a Queen bee + SpawnMob(GetZone(Target), 2780092, false, GetX(Target), GetY(Target), GetZ(Target)) + else + -- spawn a soldier bee + SpawnMob(GetZone(Target), 2780088, false, GetX(Target), GetY(Target), GetZ(Target)) + end + + AddTimer(Target, 60000, "enable_command_icon_beeHive") +end + +function HelpDown(Caster, Target) + SpawnSet(Target, "show_command_icon", 0) + SpawnMob(GetZone(Caster), 2530232, false, 268.05, -5.08, -10.95, 101.63) + Despawn(Target) + newHalfling = GetSpawn(Caster, 2530232) + + --temporary. the poor halfling will climb back into the tree when the Moraks respawn + AddTimer(newHalfling, 30000, "ClimbTree") +end + +function Examine(Caster, Target) +end + +function ReadGravestone(Caster, Target) + SpawnMob(GetZone(Caster), 1960199, false, 967.581, -17.0745, -821.035, 159.344) + UlinirBush = GetSpawn(Caster, 1960199) + Ilaen = GetSpawn(Caster, 1960126) + PlayFlavor(Ilaen, "voiceover/english/tutorial_revamp/ilaen_lilac/qey_adv02_ruins_revamp/qst_woodelf_ilaen_lilac_ulinir_d84a1bb.mp3", "You are wise to know Ulinir is worth your time. Speak with me if you wish to use your wisdom for a greater good.", "", 1864539566, 4233668295, Caster) + AddTimer(UlinirBush, 30000, "DespawnBush") +end + +function ClimbTheBench(Caster, Target) + SetPosition(Caster, 761.79, -20.38, 314.48) +end + +function PullYourselfThroughTheFoliage(Caster, Target) + SetPosition(Caster, 743.47, -20.35, 306.85) +end + +function InspectBox(Caster, Target) + SetStepComplete(Caster, 142, 3) +end + +function ThrowSnowball(Caster, Target) + SpawnSet(Caster, "visual_state", "1224") +end \ No newline at end of file diff --git a/server/Spells/gm_spells.lua b/server/Spells/gm_spells.lua new file mode 100644 index 000000000..1c264d59f --- /dev/null +++ b/server/Spells/gm_spells.lua @@ -0,0 +1,17 @@ +--[[ + Script Name : Spells/gm_spells.lua + Script Purpose : Handles all GM spells + Script Author : GMS ! + Script Date : Anytime + Script Notes : Use spells_data to link to the specific command(s) +--]] + +function cast(Caster, Target, Type) + if Type == "MoonJump" then + MoonJump(Caster, Target) + end +end + +function MoonJump(Caster, Target) + SetServerControlFlag(Caster, 4, 16, 1) +end \ No newline at end of file diff --git a/server/WorldStructs.xml b/server/WorldStructs.xml new file mode 100644 index 000000000..24a36fd9c --- /dev/null +++ b/server/WorldStructs.xml @@ -0,0 +1,32160 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +- + + + + + + + + + + + + + - + + + + + - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/server/ZoneScripts/Antonica.lua b/server/ZoneScripts/Antonica.lua new file mode 100644 index 000000000..88f613571 --- /dev/null +++ b/server/ZoneScripts/Antonica.lua @@ -0,0 +1,40 @@ +--[[ + Script Name : antonica.lua + Script Purpose : Handles events in Antonica + Script Author : Jabantiz/neatz09 + Script Date : 6/16/2016/ 2/23/19 + Script Notes : +--]] + +function init_zone_script(zone) + SetLocationProximityFunction(zone, -2128.93, -28.4328, 614.081, 10, "GriffonTower", "Leave") -- Steppes from Qeynos + SetLocationProximityFunction(zone, -904.472, -7.23051, -610.321, 10, "GriffonTower", "Leave") -- Oracle from Qeynos + SetLocationProximityFunction(zone, 337.246, -17.3142, 537.882, 10, "GriffonTower", "Leave") -- Qeynos from Steppes + SetLocationProximityFunction(zone, -912.659, -7.21881, -599.911, 10, "GriffonTower", "Leave") -- Oracle from Steppes + SetLocationProximityFunction(zone, 327.727, -17.3058, 529.95, 10, "GriffonTower", "Leave") -- Qeynos from Oracle + SetLocationProximityFunction(zone, -2136.6, -28.5276, 608.087, 10, "GriffonTower", "Leave") -- Steppese from oracle +end + +function player_entry(zone, player) +end + +function enter_location(zone, spawn, grid) +end + +function leave_location(zone, spawn, grid) +end + +function dawn(zone) +end + +function dusk(zone) +end + +function GriffonTower(zone, Spawn) + if IsPlayer(Spawn) and IsOnAutoMount(Spawn) then + EndAutoMount(Spawn) + end +end + +function Leave(zone, Spawn) +end \ No newline at end of file diff --git a/server/ZoneScripts/BeggarsCourt.lua b/server/ZoneScripts/BeggarsCourt.lua new file mode 100644 index 000000000..503ef5542 --- /dev/null +++ b/server/ZoneScripts/BeggarsCourt.lua @@ -0,0 +1,58 @@ +--[[ + Script Name : ZoneScripts/BeggarsCourt.lua + Script Purpose : + Script Author : (unknown author) (Updated by Cynnar) + Script Date : + Script Notes : +--]] + +local HALFELF_MENTOR_QUEST_2 = 308 -- Dirty Work +local HALFELF_MENTOR_QUEST_4 = 317 -- Thaen Sevellos +local MUFFLED_VOICES = 1370104 +local A_ROMMULS_LOYALIST = 1370067 +local THAEN_SEVELLOS = 1370066 + +function init_zone_script(Zone) + + SetLocationProximityFunction(Zone, 82.78, -7.08, 112.83, 10, "InRange", "LeaveRange") + SetLocationProximityFunction(Zone, 70.43, 5.02, -22.17, 20, "InRangeQuest4", "LeaveRange") +end + +function InRange(Zone, Spawn) + if HasQuest(Spawn, HALFELF_MENTOR_QUEST_2) and GetQuestStep(Spawn, HALFELF_MENTOR_QUEST_2) == 2 then + MuffledVoice = GetSpawn(Spawn, MUFFLED_VOICES) + if MuffledVoice ~= nil then + conversation = CreateConversation() + PlayFlavor(MuffledVoice, "voiceover/english/tutorial_revamp/muffled_voices/fprt_hood04/quests/muffled_voice/voice000.mp3", "", "", 2566882511, 3306688521, Spawn) + AddConversationOption(conversation, "[continue listening]", "dlg_18_1") + StartConversation(conversation, MuffledVoice, Spawn, "Do you have him?") + end + end +end + +function InRangeQuest4(Zone, Spawn) + if HasQuest(Spawn, HALFELF_MENTOR_QUEST_4) and GetQuestStep(Spawn, HALFELF_MENTOR_QUEST_4) == 1 then + if GetSpawn(Spawn, A_ROMMULS_LOYALIST) == nil then + -- Two Rommuls loyalists + choice = math.random(1, 2) + if choice == 1 then + --SpawnMob(Zone, A_ROMMULS_LOYALIST, false, 82.29, 5.02, -10.46, 259) + --SpawnMob(Zone, A_ROMMULS_LOYALIST, false, 80.86, 5.02, -7.66, 276) + SpawnByLocationID(GetZone(Spawn), 403036) + SpawnByLocationID(GetZone(Spawn), 403037) + elseif choice == 2 then + --SpawnMob(Zone, A_ROMMULS_LOYALIST, false, 82.29, 5.02, -10.46, 259) + --SpawnMob(Zone, A_ROMMULS_LOYALIST, false, 80.86, 5.02, -7.66, 276) + SpawnByLocationID(GetZone(Spawn), 403036) + SpawnByLocationID(GetZone(Spawn), 403037) + end + + -- Thaen Sevellos + --SpawnMob(Zone, THAEN_SEVELLOS, false, 86.86, 5.02, -9.76, 81) + SpawnByLocationID(GetZone(Spawn), 403035) + end + end +end + +function LeaveRange(zone, Spawn) +end \ No newline at end of file diff --git a/server/ZoneScripts/Caves.lua b/server/ZoneScripts/Caves.lua new file mode 100644 index 000000000..e1e7da4ea --- /dev/null +++ b/server/ZoneScripts/Caves.lua @@ -0,0 +1,22 @@ +--[[ + Script Name : ZoneScripts/Caves.lua + Script Purpose : Caves + Script Author : Scatman + Script Date : 2009.10.18 + Script Notes : +--]] + +local QUEST2_FROM_EMMA = 227 + +function init_zone_script(Zone) + SetLocationProximityFunction(Zone, 45.4454, 37.7504, -110.193, 20, "SpawnFulkoir") +end + +function SpawnFulkoir(Zone, Spawn) + if HasQuest(Spawn, QUEST2_FROM_EMMA) and not QuestStepIsComplete(Spawn, QUEST2_FROM_EMMA, 3) and QuestStepIsComplete(Spawn, QUEST2_FROM_EMMA, 1) and QuestStepIsComplete(Spawn, QUEST2_FROM_EMMA, 2) then + local Fulkoir = GetSpawn(Spawn, 1970071) + if Fulkoir == nil then + SpawnMob(Zone, 1970071, false, 45.4454, 37.7504, -110.193, 259.984) + end + end +end \ No newline at end of file diff --git a/server/ZoneScripts/Commonlands.lua b/server/ZoneScripts/Commonlands.lua new file mode 100644 index 000000000..a963e5178 --- /dev/null +++ b/server/ZoneScripts/Commonlands.lua @@ -0,0 +1,40 @@ +--[[ + Script Name : ZoneScripts/Commonlands.lua + Script Purpose : + Script Author : Neatz09 + Script Date : 2/2/2019 + Script Notes : +--]] + +function init_zone_script(zone) + SetLocationProximityFunction(zone, 757.39, -31.98, -585.17, 10, "GriffonTower", "Leave") -- Nektulos (from Freeport) + SetLocationProximityFunction(zone, -599.41, -33.73, -771.12, 10, "GriffonTower", "Leave") -- Freeport (from Nektulos) + SetLocationProximityFunction(zone, 523.49, -33.40, 747.70, 10, "GriffonTower", "Leave") -- HiddenCanyon (from Freeport) + SetLocationProximityFunction(zone, 534.17, -33.42, 757.78, 10, "GriffonTower", "Leave") -- HiddenCanyon (from Nektulos) + SetLocationProximityFunction(zone, 771.67, -31.97, -588.20, 10, "GriffonTower", "Leave") -- Nektulos (from HiddenCanyon) + SetLocationProximityFunction(zone, -597.07, -33.75, -758.43, 10, "GriffonTower", "Leave") -- Freeport (from HiddenCanyon) +end + +function player_entry(zone, player) +end + +function enter_location(zone, spawn, grid) +end + +function leave_location(zone, spawn, grid) +end + +function dawn(zone) +end + +function dusk(zone) +end + +function GriffonTower(zone, Spawn) + if IsPlayer(Spawn) and IsOnAutoMount(Spawn) then + EndAutoMount(Spawn) + end +end + +function Leave(zone, Spawn) +end \ No newline at end of file diff --git a/server/ZoneScripts/CrustaceanCave.lua b/server/ZoneScripts/CrustaceanCave.lua new file mode 100644 index 000000000..9ce62a80e --- /dev/null +++ b/server/ZoneScripts/CrustaceanCave.lua @@ -0,0 +1,25 @@ +--[[ + Script Name : + Script Purpose : + Script Author : + Script Date : 10/12/2019 + Script Notes : +--]] + +function init_zone_script(zone) +end + +function player_entry(zone, player) +end + +function enter_location(zone, spawn, grid) +end + +function leave_location(zone, spawn, grid) +end + +function dawn(zone) +end + +function dusk(zone) +end \ No newline at end of file diff --git a/server/ZoneScripts/EnchantedLands.lua b/server/ZoneScripts/EnchantedLands.lua new file mode 100644 index 000000000..8cb8c7584 --- /dev/null +++ b/server/ZoneScripts/EnchantedLands.lua @@ -0,0 +1,26 @@ +--[[ + Script Name : EnchantedLands.lua + Script Purpose : Handle various things around Enchanted Lands + Script Author : Cynnar + Script Date : 1/25/2016 + Script Notes : +--]] + +function init_zone_script(zone) + SetLocationProximityFunction(zone, -194.83, 3.27, -292.25, 10, "StableMasters", "Leave") -- Rivervale + SetLocationProximityFunction(zone, 303.07, 1.10, -244.39, 10, "StableMasters", "Leave") -- The Great Guard + SetLocationProximityFunction(zone, 25.89, 1.17, -244.39, 10, "StableMasters", "Leave") -- Bobick Village + SetLocationProximityFunction(zone, -186.23, -3.29, -605.62, 10, "StableMasters", "Leave") -- Chompers Pond + SetLocationProximityFunction(zone, 157.14, 25.31, -777.63, 10, "StableMasters", "Leave") -- Goblin Pass + SetLocationProximityFunction(zone, -228.61, 24.40, -995.37, 10, "StableMasters", "Leave") -- Bramblefoot Hills + SetLocationProximityFunction(zone, -604.17, -0.92, -918.46, 10, "StableMasters", "Leave") -- Misty Grove +end + +function StableMasters(zone, Spawn) + if IsPlayer(Spawn) and IsOnAutoMount(Spawn) then + EndAutoMount(Spawn) + end +end + +function Leave(zone, Spawn) +end diff --git a/server/ZoneScripts/Feerrott.lua b/server/ZoneScripts/Feerrott.lua new file mode 100644 index 000000000..52ad32367 --- /dev/null +++ b/server/ZoneScripts/Feerrott.lua @@ -0,0 +1,38 @@ +--[[ + Script Name : ZoneScripts/Feerrott.lua + Script Purpose : + Script Author : Neatz09 + Script Date : 2/24/2019 + Script Notes : +--]] + +function init_zone_script(zone) + SetLocationProximityFunction(zone, -119, -16.93, 549.2, 10, "StableMasters", "Leave") -- Alliz Evol + SetLocationProximityFunction(zone, 11.47, 3.68, -27.91, 10, "StableMasters", "Leave") -- Drowning Causeway + SetLocationProximityFunction(zone, -198.16, -7.66, 818.5, 10, "StableMasters", "Leave") -- Greenblood River + SetLocationProximityFunction(zone, -561.2, -15.27, 792.09, 10, "StableMasters", "Leave") -- Tae Ew + SetLocationProximityFunction(zone, -1883.67, -21.52, 839.08, 10, "StableMasters", "Leave") -- Dread basin + SetLocationProximityFunction(zone, -1022.97, -4.75, 434.48, 10, "StableMasters", "Leave") -- Tower of Vul + SetLocationProximityFunction(zone, -1189.48, -5.49, 765.77, 10, "StableMasters", "Leave") -- Alliz Tae +end + +function StableMasters(zone, Spawn) + if IsPlayer(Spawn) and IsOnAutoMount(Spawn) then + EndAutoMount(Spawn) + end +end + +function player_entry(zone, player) +end + +function enter_location(zone, spawn, grid) +end + +function leave_location(zone, spawn, grid) +end + +function dawn(zone) +end + +function dusk(zone) +end \ No newline at end of file diff --git a/server/ZoneScripts/ForestRuins.lua b/server/ZoneScripts/ForestRuins.lua new file mode 100644 index 000000000..45d542398 --- /dev/null +++ b/server/ZoneScripts/ForestRuins.lua @@ -0,0 +1,35 @@ +--[[ + Script Name : ZoneScripts/ForestRuins.lua + Script Purpose : + Script Author : Jabantiz + Script Date : 6/25/2018 + Script Notes : +--]] + +function init_zone_script(zone) +end + +function player_entry(zone, player) +end + +function enter_location(zone, spawn, grid) +end + +function leave_location(zone, spawn, grid) +end + +function dawn(zone) + local players = GetPlayersInZone(zone) + for index, player in ipairs(players) do + SendPopUpMessage(player, "As dawn breaks, the undead retreat to the shadows as the Blackfurl forces flood the castle.", 255, 0, 0) + SendMessage(player, "As dawn breaks, the undead retreat to the shadows as the Blackfurl forces flood the castle.") + end +end + +function dusk(zone) + local players = GetPlayersInZone(zone) + for index, player in ipairs(players) do + SendPopUpMessage(player, "As dusk falls, the Blackfurl forces retreat to the beach as the undead crawl from the shadows.", 255, 0, 0) + SendMessage(player, "As dusk falls, the Blackfurl forces retreat to the beach as the undead crawl from the shadows.") + end +end \ No newline at end of file diff --git a/server/ZoneScripts/FrostfangSea.lua b/server/ZoneScripts/FrostfangSea.lua new file mode 100644 index 000000000..416a8407e --- /dev/null +++ b/server/ZoneScripts/FrostfangSea.lua @@ -0,0 +1,135 @@ +--[[ + Script Name : ZoneScripts/FrostfangSea.lua + Script Purpose : Frostfang Sea + Script Author : theFoof + Script Date : 2013.5.8 + Script Notes : +--]] + +local BoatloadWork = 4 + +local ScatteringAshes = 33 + +local CallingBack = 35 + +local AllRemains = 54 + +local RyGorrOperations = 60 + +local SometimesKnut = 84 + +function init_zone_script(Zone) + SetLocationProximityFunction(Zone, -316.244, 35.409, -714.906, 10, "BarricadeMessage") + SetLocationProximityFunction(Zone, 607, 66.2, -506.50, 20, "AshesMessage") + SetLocationProximityFunction(Zone, 600, 28, -263, 5, "SnowRunesMessage") + SetLocationProximityFunction(Zone, 581, 37, -339, 5, "SnowRunesMessage") + SetLocationProximityFunction(Zone, 507, 27, -232, 5, "SnowRunesMessage") + SetLocationProximityFunction(Zone, 584, 24, -155, 5, "SnowRunesMessage") + SetLocationProximityFunction(Zone, 581, 27, -212, 5, "SnowRunesMessage") + SetLocationProximityFunction(Zone, 751, 54, -514, 15, "SpawnHelmOrc") + SetLocationProximityFunction(Zone, 52, 28, -358, 50, "VerienAccess") + SetLocationProximityFunction(Zone, -15.27, -67.54, 155.07, 10, "BarrelMessage") + SetLocationProximityFunction(Zone, 15.45, -67.92, 202.55, 30, "GrizChat1") + SetLocationProximityFunction(Zone, 76.65, -67.91, 128.64, 10, "GrizChat3") + SetLocationProximityFunction(Zone, 152.12, -63.42, 144.76, 20, "GrizChat4") + SetLocationProximityFunction(Zone, 199.96, -54.40, 118.51, 20, "GrizChat5") + SetLocationProximityFunction(Zone, 244.79, -53.49, 54.79, 8, "GrizChat6") + SetLocationProximityFunction(Zone, -7.80, -66.88, 232.48, 15, "GrizChat8") +end + +function BarricadeMessage(Zone, Spawn) + if GetQuestStep(Spawn, BoatloadWork) == 3 then + SendPopUpMessage(Spawn, "This is the break in the barricade Yasha sent you to fix.", 255, 255, 255) + end +end + +function player_entry(Zone, Player) +end + +function AshesMessage(Zone, Spawn) + if GetQuestStep(Spawn, ScatteringAshes) == 1 then + SendPopUpMessage(Spawn, "This looks like a good location to scatter the ashes.", 255, 255, 255) + end +end + +function SnowRunesMessage(Zone, Spawn) + if HasQuest(Spawn, CallingBack) then + SendPopUpMessage(Spawn, "You see glowing blue runes in the snow.", 255, 255, 255) + end +end + +function SpawnHelmOrc(Zone, Spawn) + if GetQuestStep(Spawn, AllRemains) == 2 then + SpawnByLocationID(Zone, 33474) + end +end + +function VerienAccess(Zone, Spawn) + AddSpawnAccess(GetSpawn(Spawn, 4700034), Spawn) +end + +function BarrelMessage(Zone, Spawn) + if GetQuestStep(Spawn, RyGorrOperations) == 1 then + SendMessage(Spawn, "This seems like a good distance from the wall to place the Ry'Gorr Explosive Mining Barrel.") + end +end + +function GrizChat1(Zone, Spawn) + if GetQuestStep(Spawn, SometimesKnut) == 1 then + if HasItemEquipped(Spawn, 157116) then + conversation = CreateConversation() + AddConversationOption(conversation, "Ack! I can hear you?", "GrizChat1_1") + StartDialogConversation(conversation, 4, GetEquippedItemByID(Spawn, 157116), Spawn, "Prey's trail cold here.") + end + end +end + +function GrizChat3(Zone, Spawn) + if GetQuestStep(Spawn, SometimesKnut) == 1 then + if HasItemEquipped(Spawn, 157116) then + conversation = CreateConversation() + AddConversationOption(conversation, "Thank you, Grizz.") + StartDialogConversation(conversation, 4, GetEquippedItemByID(Spawn, 157116), Spawn, "Prey is within striking distance!") + end + end +end + +function GrizChat4(Zone, Spawn) + if GetQuestStep(Spawn, SometimesKnut) == 2 then + if HasItemEquipped(Spawn, 157116) then + conversation = CreateConversation() + AddConversationOption(conversation, "Finally!") + StartDialogConversation(conversation, 4, GetEquippedItemByID(Spawn, 157116), Spawn, "Prey's trail grows warm!") + end + end +end + +function GrizChat5(Zone, Spawn) + if GetQuestStep(Spawn, SometimesKnut) == 2 then + if HasItemEquipped(Spawn, 157116) then + conversation = CreateConversation() + AddConversationOption(conversation, "That's good to know!") + StartDialogConversation(conversation, 4, GetEquippedItemByID(Spawn, 157116), Spawn, "Prey is close.") + end + end +end + +function GrizChat6(Zone, Spawn) + if GetQuestStep(Spawn, SometimesKnut) == 2 then + if HasItemEquipped(Spawn, 157116) then + conversation = CreateConversation() + AddConversationOption(conversation, "This black shard?", "GrizChat2_1") + StartDialogConversation(conversation, 4, GetEquippedItemByID(Spawn, 157116), Spawn, "This is it! Strike our prey!") + end + end +end + +function GrizChat8(Zone, Spawn) + if GetQuestStep(Spawn, SometimesKnut) == 4 or GetQuestStep(Spawn, SometimesKnut) == 3 then + if HasItemEquipped(Spawn, 157116) then + conversation = CreateConversation() + AddConversationOption(conversation, "I bet he's missing you.") + StartDialogConversation(conversation, 4, GetEquippedItemByID(Spawn, 157116), Spawn, "Take Griz back to knut.") + end + end +end \ No newline at end of file diff --git a/server/ZoneScripts/GMHall.lua b/server/ZoneScripts/GMHall.lua new file mode 100644 index 000000000..7adfa6621 --- /dev/null +++ b/server/ZoneScripts/GMHall.lua @@ -0,0 +1,16 @@ +--[[ + Script Name : ZoneScripts/GMHall.lua + Script Purpose : Announce locations + Script Author : John Adams + Script Date : 2009.05.07 * 2019.01.15 + Script Notes : GMHall General Script +--]] + +function init_zone_script(Zone) + SetLocationProximityFunction(Zone, 670, -36, 1490, 50, "GMHall_InRange") + +end + +function GMHall_InRange(Zone, Player) + SendPopUpMessage(Player, "Welcome to the Game Masters' Hall", 244, 66, 134) +end \ No newline at end of file diff --git a/server/ZoneScripts/Graveyard.lua b/server/ZoneScripts/Graveyard.lua new file mode 100644 index 000000000..d2aa32e15 --- /dev/null +++ b/server/ZoneScripts/Graveyard.lua @@ -0,0 +1,31 @@ +--[[ + Script Name : ZoneScripts/Graveyard.lua + Script Purpose : Zone script for The Graveyard. + Script Author : Scatman + Script Date : 2009.07.12 + Script Notes : +--]] + +local ZADDAR_QUEST_4 = 234 + +function init_zone_script(Zone) + SetLocationProximityFunction(Zone, 57.9408, -2.75514, 98.808, 50, "SpawnObjectsForZaddarQuest4", "SpawnObjectsForZaddarQuest4") +end + +function SpawnObjectsForZaddarQuest4(Zone, Spawn) + if HasQuest(Spawn, ZADDAR_QUEST_4) then + if GetQuestStep(Spawn, ZADDAR_QUEST_4) == 2 then + WardParticle = GetSpawn(Caster, 1250125) + if WardParticle == nil then + WardParticle = SpawnMob(GetZone(Caster), 1250125, false, 58.588, -2.72359, 98.4903, 339.984) + Despawn(WardParticle, 30000) + end + elseif GetQuestStep(Spawn, ZADDAR_QUEST_4) == 3 then + Relic = GetSpawn(Caster, 1250107) + if Relic == nil then + Relic = SpawnMob(GetZone(Caster), 1250107, false, 57.9408, -2.75514, 98.8084, 339.984) + Despawn(Relic, 30000) + end + end + end +end \ No newline at end of file diff --git a/server/ZoneScripts/HoldOfPrexus.lua b/server/ZoneScripts/HoldOfPrexus.lua new file mode 100644 index 000000000..e69de29bb diff --git a/server/ZoneScripts/NektroposCastle.lua b/server/ZoneScripts/NektroposCastle.lua new file mode 100644 index 000000000..b4289da82 --- /dev/null +++ b/server/ZoneScripts/NektroposCastle.lua @@ -0,0 +1,146 @@ +--[[ + Script Name : ZoneScripts/NektroposCastle.lua + Script Purpose : Nektropos Castle + Script Author : smash + Script Date : 2016.1.24 + Script Notes : +--]] + +function init_zone_script(Zone) + SetLocationProximityFunction(Zone, -0.05, -0.34, 33.54, 10, "OfferVisionsOfHatred", "Leave") + SetLocationProximityFunction(Zone, -51, 14, 80, 10, "SpawnArchfiend", "Leave") + SetLocationProximityFunction(Zone, 57, 14, -84, 10, "SpawnNythDollsBed", "Leave") + SetLocationProximityFunction(Zone, -27, 13, -28, 7, "SpawnNythDollsBedroomMaltus", "Leave") + SetLocationProximityFunction(Zone, -40, -13, -45, 7, "SpawnNythDollsBasement1", "Leave") + SetLocationProximityFunction(Zone, -24, -13, -45, 7, "SpawnNythDollsBasement2", "Leave") + SetLocationProximityFunction(Zone, 48, -13.5, 10, 7, "MaltusHallwayTrap1", "Leave") + SetLocationProximityFunction(Zone, 81, -13.5, 11, 7, "MaltusHallwayTrap2", "Leave") + SetLocationProximityFunction(Zone, 130, -13.5, 11, 7, "MaltusHallwayTrap4", "Leave") + SetLocationProximityFunction(Zone, 157, -13.5, 11, 7, "MaltusHallwayTrap5", "Leave") +end + +function OfferVisionsOfHatred(Zone, Player) + if CanReceiveQuest(Player, 173) then + OfferQuest(nil,Player, 173) + SendMessage(Player, "A strange hatred grows inside you.") + end +end + +function Leave(Zone, Player) +end + +function SpawnArchfiend(Zone, Player) + --Using deirdre's door to keep track on if this mob was spawned + local door = GetSpawnByLocationID(Zone, 1439497) + if door == nil then + return + end + + if GetTempVariable(door, "ArchfiendSpawned") ~= "true" then + --Spawn Archfiend Izzoroth + SetTempVariable(door, "ArchfiendSpawned", "true") + SpawnByLocationID(Zone, 616612) + end +end + +function SpawnNythDollsBed(Zone, Player) + local bed = GetSpawnByLocationID(Zone, 439534) + + if GetTempVariable(bed, "NythDollsSpawned") ~= "true" then + SpawnGroupByID(Zone, 1043630) + SetTempVariable(bed, "NythDollsSpawned", "true") + SendMessage(Player, "As you approach the bed dolls scurry out from under the bed to attack.") + end +end + +function SpawnNythDollsBedroomMaltus(Zone, Player) + local door = GetSpawnByLocationID(Zone, 1439456) + + if GetTempVariable(door, "NythDollsSpawned") ~= "true" then + SpawnGroupByID(Zone, 43686) + SetTempVariable(door, "NythDollsSpawned", "true") + SendMessage(Player, "You hear the sound of tiny voices laughing at you.") + end +end + +function SpawnNythDollsBasement1(Zone, Player) + local door = GetSpawnByLocationID(Zone, 1439456) + + if GetTempVariable(door, "NythDollsBasementSpawned") ~= "true" then + SpawnGroupByID(Zone, 43685) + SetTempVariable(door, "NythDollsBasementSpawned", "true") + SendMessage(Player, "You hear the sound of tiny voices laughing at you.") + end +end + +function SpawnNythDollsBasement2(Zone, Player) + local door = GetSpawnByLocationID(Zone, 1439456) + + if GetTempVariable(door, "NythDollsBasementSpawned2") ~= "true" then + SpawnGroupByID(Zone, 43686) + SetTempVariable(door, "NythDollsBasementSpawned2", "true") + SendMessage(Player, "You hear the sound of tiny voices laughing at you.") + end +end + +function MaltusHallwayTrap1(Zone, Player) + local door = GetSpawnByLocationID(Zone, 619853) + + if GetTempVariable(door, "MaltusHallwayTrap1") ~= "true" then + SetTempVariable(door, "MaltusHallwayTrap1", "true") + local door2 = GetSpawnByLocationID(Zone, 619850) + UseWidget(door) + UseWidget(door2) + SendMessage(Player, "You hear the sound of grating stone as the doors slide open.") + + local fleshripper = GetSpawnByLocationID(Zone, 616395) + if fleshripper ~= nil then + Attack(fleshripper, Player) + end + end +end + +function MaltusHallwayTrap2(Zone, Player) + local door = GetSpawnByLocationID(Zone, 619866) + + if GetTempVariable(door, "MaltusHallwayTrap2") ~= "true" then + SetTempVariable(door, "MaltusHallwayTrap2", "true") + local door2 = GetSpawnByLocationID(Zone, 619867) + local door3 = GetSpawnByLocationID(Zone, 439514) + local door4 = GetSpawnByLocationID(Zone, 439515) + UseWidget(door) + UseWidget(door2) + UseWidget(door3) + UseWidget(door4) + SendMessage(Player, "You're not sure but you think the walls were making noise.") + + local fleshripper = GetSpawnByLocationID(Zone, 616646) + if fleshripper ~= nil then + Attack(fleshripper, Player) + end + end +end + +function MaltusHallwayTrap4(Zone, Player) + local door = GetSpawnByLocationID(Zone, 439516) + + if GetTempVariable(door, "MaltusHallwayTrap4") ~= "true" then + SetTempVariable(door, "MaltusHallwayTrap4", "true") + local door2 = GetSpawnByLocationID(Zone, 619871) + UseWidget(door) + UseWidget(door2) + SendMessage(Player, "You hear a grating noise as the walls begin to shift, but the doors fail to open completely.") + end +end + +function MaltusHallwayTrap5(Zone, Player) + local door = GetSpawnByLocationID(Zone, 619886) + + if GetTempVariable(door, "MaltusHallwayTrap5") ~= "true" then + SetTempVariable(door, "MaltusHallwayTrap5", "true") + local door2 = GetSpawnByLocationID(Zone, 619884) + UseWidget(door) + UseWidget(door2) + SendMessage(Player, "You're not sure but you think the walls were making noise.") + end +end \ No newline at end of file diff --git a/server/ZoneScripts/Nektulos.lua b/server/ZoneScripts/Nektulos.lua new file mode 100644 index 000000000..f9b0708f4 --- /dev/null +++ b/server/ZoneScripts/Nektulos.lua @@ -0,0 +1,39 @@ +--[[ + Script Name : ZoneScripts/Nekutlos.lua + Script Purpose : + Script Author : Neatz09 + Script Date : 2/24/2019 + Script Notes : +--]] + +function init_zone_script(zone) +SetLocationProximityFunction(zone, -791.916, 155.953, -1890.2, 10, "GriffonTower", "Leave") -- Nmar To Bone +SetLocationProximityFunction(zone, -248.063, 14.3373, 168.367, 10, "GriffonTower", "Leave") -- Nmar To CL +SetLocationProximityFunction(zone, 829.316, 13.7854, -189.276, 10, "GriffonTower", "Leave") -- Nmar To Docks +SetLocationProximityFunction(zone, 828.892, 13.7353, -188.352, 10, "GriffonTower", "Leave") -- CL To Docks +SetLocationProximityFunction(zone, -445.868, 74.7915, -1289.33, 10, "GriffonTower", "Leave") -- CL To Nmar +SetLocationProximityFunction(zone, -248.078, 14.3349, 167.812, 10, "GriffonTower", "Leave") -- Docks To CL +SetLocationProximityFunction(zone, -446.087, 74.7935, -1288.58, 10, "GriffonTower", "Leave") -- Docks To NMar +SetLocationProximityFunction(zone, -445.644, 75.9053, -1289.18, 10, "GriffonTower", "Leave") -- Bone to Nmar + +end + +function player_entry(zone, player) +end + +function enter_location(zone, spawn, grid) +end + +function leave_location(zone, spawn, grid) +end + +function dawn(zone) +end + +function dusk(zone) +end +function GriffonTower(zone, Spawn) + if IsPlayer(Spawn) and IsOnAutoMount(Spawn) then + EndAutoMount(Spawn) + end +end \ No newline at end of file diff --git a/server/ZoneScripts/Nettleville.lua b/server/ZoneScripts/Nettleville.lua new file mode 100644 index 000000000..fb1f3970d --- /dev/null +++ b/server/ZoneScripts/Nettleville.lua @@ -0,0 +1,42 @@ +--[[ + Script Name : ZoneScripts/Nettleville.lua + Script Purpose : + Script Author : Jabantiz + Script Date : 6/11/2018 + Script Notes : +--]] + +local UNFORTUNATE_MISTAKES = 303 + +function init_zone_script(zone) + SetLocationProximityFunction(zone, 582.66, -26.54, 375.95, 10, "UnfortunateMistakesTrigger", "Leave") +end + +function player_entry(zone, player) +end + +function enter_location(zone, spawn, grid) +end + +function leave_location(zone, spawn, grid) +end + +function dawn(zone) +end + +function dusk(zone) +end + +function UnfortunateMistakesTrigger(zone, Spawn) + if HasQuest(Spawn, UNFORTUNATE_MISTAKES) and GetQuestStep(Spawn, UNFORTUNATE_MISTAKES) == 1 then + local Ralkesh = GetSpawn(Spawn, 2330065) + if Ralkesh ~= nil then + if GetTempVariable(Ralkesh, "Ready") == "true" then + AddTimer(Ralkesh, 250, "StartRitual") + end + end + end +end + +function Leave(zone, Spawn) +end \ No newline at end of file diff --git a/server/ZoneScripts/Oakmyst.lua b/server/ZoneScripts/Oakmyst.lua new file mode 100644 index 000000000..37a4cdde6 --- /dev/null +++ b/server/ZoneScripts/Oakmyst.lua @@ -0,0 +1,59 @@ +--[[ + Script Name : ZoneScripts/Oakmyst.lua + Script Purpose : Zone script for Oakmyst Forest + Script Author : Scatman + Script Date : 2009.10.02 + Script Notes : +--]] + +local QUEST_FROM_CHARLIN_4 = 207 +local QUEST_FROM_ADALIN = 294 +local QUEST_FROM_EMPRESS = 213 + +function init_zone_script(Zone) + SetLocationProximityFunction(Zone, 964.13, 8.67, -292.63, 40, "InRange") + SetLocationProximityFunction(Zone, 906.62, 3.33, -209.46, 50, "InRangeAdalinTree1") + SetLocationProximityFunction(Zone, 934.61, 8.11, -195.52, 50, "InRangeAdalinTree2") + SetLocationProximityFunction(Zone, 921.71, 3.93, -357.12, 50, "InRangeAdalinTree3") + SetLocationProximityFunction(Zone, x, y, z, 20, "InRangeRotweed") +end + +function InRange(Zone, Spawn) + if HasQuest(Spawn, QUEST_FROM_CHARLIN_4) and GetQuestStep(Spawn, QUEST_FROM_CHARLIN_4) == 1 then + Fulkoir = GetSpawn(Spawn, 1950083) + if Fulkoir == nil then + Fulkoir = SpawnMob(Zone, 1950083, false, 998.26, 14.15, -239.86, 133) + Despawn(Fulkoir, 60000) + end + end +end + +function InRangeAdalinTree1(Zone, Spawn) + if HasQuest(Spawn, QUEST_FROM_ADALIN) and not QuestStepIsComplete(Spawn, QUEST_FROM_ADALIN, 1) then + SetStepComplete(Spawn, QUEST_FROM_ADALIN, 1) + end +end + +function InRangeAdalinTree2(Zone, Spawn) + if HasQuest(Spawn, QUEST_FROM_ADALIN) and not QuestStepIsComplete(Spawn, QUEST_FROM_ADALIN, 2) then + SetStepComplete(Spawn, QUEST_FROM_ADALIN, 2) + end +end + +function InRangeAdalinTree3(Zone, Spawn) + if HasQuest(Spawn, QUEST_FROM_ADALIN) and not QuestStepIsComplete(Spawn, QUEST_FROM_ADALIN, 3) then + SetStepComplete(Spawn, QUEST_FROM_ADALIN, 3) + end +end + +function InRangeRotweed(Zone, Spawn) + if HasQuest(Spawn, QUEST_FROM_EMPRESS) and GetQuestStep(Spawn, QUEST_FROM_EMPRESS) == 1 then + local rotweed_thistle = GetSpawn(Zone, 1950203) + local rotweed = GetSpawn(Zone, 1950204) + if rotweed_thistle == nil and rotweed == nil then + SpawnMob(Zone, 1950203, 0, 932.211, 11.7112, -176.419, 280.156) + SpawnMob(Zone, 1950203, 0, 932.211, 11.7721, -167.759, 280.656) + SpawnMob(Zone, 1950203, 0, 939.711, 12.075, -172.089, 280.484) + end + end +end \ No newline at end of file diff --git a/server/ZoneScripts/OutpostOverlord.lua b/server/ZoneScripts/OutpostOverlord.lua new file mode 100644 index 000000000..428c61e5e --- /dev/null +++ b/server/ZoneScripts/OutpostOverlord.lua @@ -0,0 +1,24 @@ +--[[ + Script Name : ZoneScripts/OutpostOverlord.lua + Script Purpose : Zone Scripts and Location Pop-ups + Script Author : Cynnar + Script Date : 9/16/2018 + Script Notes : +--]] + +local WelcomeToNorrath = 362 +local TheArtOfCombat = 132 + +function init_zone_script(Zone) + SetLocationProximityFunction(Zone, -13.41, -4.94, 220.74, 20, "OfferQuestLocation", "LeaveLocation") +end + +function OfferQuestLocation (Zone, Player) + if not HasQuest(Player, WelcomeToNorrath) and not HasCompletedQuest(Player, WelcomeToNorrath) + and not HasQuest(Player, TheArtOfCombat) and not HasCompletedQuest(Player, TheArtOfCombat) then + OfferQuest(nil, Player, WelcomeToNorrath) + end +end + +function LeaveLocation(Zone, Player) +end \ No newline at end of file diff --git a/server/ZoneScripts/PeatBog.lua b/server/ZoneScripts/PeatBog.lua new file mode 100644 index 000000000..a0f7cede7 --- /dev/null +++ b/server/ZoneScripts/PeatBog.lua @@ -0,0 +1,89 @@ +--[[ + Script Name : ZoneScripts/PeatBog.lua + Script Purpose : Peat Bog + Script Author : Scatman + Script Date : 2009.05.10 + Script Notes : +--]] + +local QUEST_4 = 218 +local QUEST_5 = 219 + +function init_zone_script(Zone) + SetLocationProximityFunction(Zone, 688.815, -34.2423, 600.400, 30, "InRange1") + SetLocationProximityFunction(Zone, 753.824, -32.7236, 604.844, 30, "InRange2") + SetLocationProximityFunction(Zone, 797.389, -32.9127, 580.472, 30, "InRange3") + SetLocationProximityFunction(Zone, 772.80, -33.68, 489.37, 30, "SpawnDentfang") +end + +function InRange1(Zone, Spawn) + if HasQuest(Spawn, QUEST_4) and not QuestStepIsComplete(Spawn, QUEST_4, 1) then + local Box = SpawnMob(Zone, 1980131, false, 688.815, -34.2423, 600.400) + SpawnGnolls(Zone, Spawn) + Despawn(Box, 120000) + end +end + +function InRange2(Zone, Spawn) + if HasQuest(Spawn, QUEST_4) and not QuestStepIsComplete(Spawn, QUEST_4, 2) then + local Box = SpawnMob(Zone, 1980131, false, 753.824, -32.7236, 604.844) + SpawnGnolls(Zone, Spawn) + Despawn(Box, 120000) + end +end + +function InRange3(Zone, Spawn) + if HasQuest(Spawn, QUEST_4) and not QuestStepIsComplete(Spawn, QUEST_4, 3) then + local Box = SpawnMob(Zone, 1980131, false, 797.389, -32.9127, 580.472) + SpawnGnolls(Zone, Spawn) + Despawn(Box, 120000) + end +end + +function GetRandomGnollID() + -- a gnoll guard: 1980111, 1980118 + -- a gnoll machinist: 1980112 + -- a machinist assistant: 1980113, 1980120 + choice = math.random(1, 5) + if choice == 1 then + return 1980111 + elseif choice == 2 then + return 1980118 + elseif choice == 3 then + return 1980112 + elseif choice == 4 then + return 1980113 + elseif choice == 5 then + return 1980120 + end +end + +function SpawnGnolls(Zone, Spawn) + local Gnoll1 = SpawnMob(Zone, GetRandomGnollID(), false, GetX(Spawn), GetY(Spawn), GetZ(Spawn)) + local Gnoll2 = SpawnMob(Zone, GetRandomGnollID(), false, GetX(Spawn), GetY(Spawn), GetZ(Spawn)) + local Gnoll3 = SpawnMob(Zone, GetRandomGnollID(), false, GetX(Spawn), GetY(Spawn), GetZ(Spawn)) + AddHate(Spawn, Gnoll1, 100) + AddHate(Spawn, Gnoll2, 100) + AddHate(Spawn, Gnoll3, 100) +end + +function SpawnDentfang(Zone, Spawn) + if HasQuest(Spawn, QUEST_5) and GetQuestStep(Spawn, QUEST_5) == 1 then + -- Overseer Dentfang: 1980127 + -- a gnoll conspirator: 1980126 + -- a gnoll conspirator: 1980124 + -- a gnoll conspirator: 1980125 + if GetSpawn(Spawn, 1980127) == nil then + SpawnMob(Zone, 1980127, false, 785.003, -33.8173, 486.281, 339.984) + end + if GetSpawn(Spawn, 1980126) == nil then + SpawnMob(Zone, 1980126, false, 786.260, -33.7061, 482.401, 160) + end + if GetSpawn(Spawn, 1980124) == nil then + SpawnMob(Zone, 1980124, false, 782.728, -33.6797, 483.157, 219.984) + end + if GetSpawn(Spawn, 1980125) == nil then + SpawnMob(Zone, 1980125, false, 789.354, -33.5120, 484.623, 110.016) + end + end +end \ No newline at end of file diff --git a/server/ZoneScripts/QCD.lua b/server/ZoneScripts/QCD.lua new file mode 100644 index 000000000..e69de29bb diff --git a/server/ZoneScripts/QeynosCapitalDistrict.lua b/server/ZoneScripts/QeynosCapitalDistrict.lua new file mode 100644 index 000000000..10356e5c8 --- /dev/null +++ b/server/ZoneScripts/QeynosCapitalDistrict.lua @@ -0,0 +1,25 @@ +--[[ + Script Name : + Script Purpose : + Script Author : + Script Date : 10/9/2019 + Script Notes : +--]] + +function init_zone_script(zone) +end + +function player_entry(zone, player) +end + +function enter_location(zone, spawn, grid) +end + +function leave_location(zone, spawn, grid) +end + +function dawn(zone) +end + +function dusk(zone) +end \ No newline at end of file diff --git a/server/ZoneScripts/QeynosHarbor.lua b/server/ZoneScripts/QeynosHarbor.lua new file mode 100644 index 000000000..e0dfcb5d2 --- /dev/null +++ b/server/ZoneScripts/QeynosHarbor.lua @@ -0,0 +1,25 @@ +--[[ + Script Name : + Script Purpose : + Script Author : + Script Date : 10/9/2019 + Script Notes : +--]] + +function init_zone_script(zone) +end + +function player_entry(zone, player) +end + +function enter_location(zone, spawn, grid) +end + +function leave_location(zone, spawn, grid) +end + +function dawn(zone) +end + +function dusk(zone) +end \ No newline at end of file diff --git a/server/ZoneScripts/QueensColony.lua b/server/ZoneScripts/QueensColony.lua new file mode 100644 index 000000000..7633eb51b --- /dev/null +++ b/server/ZoneScripts/QueensColony.lua @@ -0,0 +1,41 @@ +--[[ + Script Name : ZoneScripts/QueensColony.lua + Script Purpose : Location Pop-ups + Script Author : John Adams + Script Date : 2009.05.07 + Script Notes : +--]] + +local WelcomeToNorrath = 133 +local TheArtOfCombat = 132 +local TheSourceOfEvil = 164 + +function init_zone_script(Zone) + SetLocationProximityFunction(Zone, -13.41, -4.94, 220.74, 20, "OfferQuestLocation", "LeaveLocation") + SetLocationProximityFunction(Zone, 152.24, 3.69, -173.34, 15, "BladeMasterLocation", "LeaveLocation") +end + +function OfferQuestLocation (Zone, Player) + if not HasQuest(Player, WelcomeToNorrath) and not HasCompletedQuest(Player, WelcomeToNorrath) + and not HasQuest(Player, TheArtOfCombat) and not HasCompletedQuest(Player, TheArtOfCombat) then + OfferQuest(nil, Player, WelcomeToNorrath) + end +end + +function BladeMasterLocation(Zone, Player) + if HasQuest(Player, TheSourceOfEvil) and GetQuestStep(Player, TheSourceOfEvil) == 4 then + local blade = SpawnMob(Zone, 2530032, false, 154.12, 1.87, -175.74, 349.984) + if blade ~= nil then + Attack(blade, Player) + end + end +end + +function LeaveLocation(Zone, Player) +end + +function enter_location(Zone, Player, GridID) + if GridID == 771354606 then + SendPopUpMessage(Player, "Sunset Meadow", 255, 255, 0) + end +end \ No newline at end of file diff --git a/server/ZoneScripts/ScaleYard.lua b/server/ZoneScripts/ScaleYard.lua new file mode 100644 index 000000000..d9bb7db82 --- /dev/null +++ b/server/ZoneScripts/ScaleYard.lua @@ -0,0 +1,55 @@ +--[[ + Script Name : ZoneScripts/Sprawl.lua + Script Purpose : Attempt to manage changes to the zone between client version + Script Author : Jabantiz + Script Date : 6/18/2018 + Script Notes : This will hide the pink cubes in clients greater then 1096 as well as show any replacements we manage to make +--]] + +-- Spawn ID's of old widgets/signs that work in 1096 but not newer clients +local old_spawns = { 1390076, 1390073, 1390074, 1390071, 1390072, 1390069, 1390070 } + +function init_zone_script(zone) +end + +function player_entry(zone, player) + local version = GetClientVersion(player) + + if version > 1096 then + local spawn = GetSpawn(player, 1390124) + if spawn ~= nil then + AddSpawnAccess(spawn, Player) + end + else + for index, id in ipairs(old_spawns) do + local spawn2 = GetSpawn(player, id) + if spawn ~= nil then + AddSpawnAccess(spawn, Player) + end + end + end + +end + +function enter_location(zone, spawn, grid) +end + +function leave_location(zone, spawn, grid) +end + +function dawn(zone) +end + +function dusk(zone) +end + +--[[ + +Inner door of the bank for 1208+ + +970376927 + 84.02222 + -2.783144 + -34.46384 + +]] \ No newline at end of file diff --git a/server/ZoneScripts/Sprawl.lua b/server/ZoneScripts/Sprawl.lua new file mode 100644 index 000000000..98694b51e --- /dev/null +++ b/server/ZoneScripts/Sprawl.lua @@ -0,0 +1,29 @@ +--[[ + Script Name : ZoneScripts/Sprawl.lua + Script Purpose : Attempt to manage changes to the zone between client version + Script Author : Jabantiz + Script Date : 6/18/2018 + Script Notes : Screwed up and put the scaleyard script here, so nuked the contents here and leaving an empty shell + Script Notes II : Added the proxy to the pois. Not sure if this is how they will work? +--]] + +function init_zone_script(zone) + SetLocationProximityFunction(zone, -87.04, -4.24, 15.54, 15, "DervishSlums", "Leave") -- Dervish Slums + SetLocationProximityFunction(zone, 50.41, -2.67, -26.54, 15, "DreadnaughtStompingGroundsr", "Leave") -- Dreadnaught Stomping Grounds + SetLocationProximityFunction(zone, 41.45, 4.99, 84.67, 15, "BlackMagiEnclave", "Leave") -- Black Magi Enclave +end + +function player_entry(zone, player) +end + +function enter_location(zone, spawn, grid) +end + +function leave_location(zone, spawn, grid) +end + +function dawn(zone) +end + +function dusk(zone) +end \ No newline at end of file diff --git a/server/ZoneScripts/SunkenCity.lua b/server/ZoneScripts/SunkenCity.lua new file mode 100644 index 000000000..a80b3cba3 --- /dev/null +++ b/server/ZoneScripts/SunkenCity.lua @@ -0,0 +1,25 @@ +--[[ + Script Name : ZoneScripts/SunkenCity.lua + Script Purpose : Sunken City + Script Author : Japa + Script Date : 2018.12.26 + Script Notes : testing day/night cycle +--]] + +function init_zone_script(zone) +end + +function player_entry(zone, player) +end + +function enter_location(zone, spawn, grid) +end + +function leave_location(zone, spawn, grid) +end + +function dawn(zone, Spawn) +end + +function dusk(zone, Spawn) +end \ No newline at end of file diff --git a/server/ZoneScripts/ThunderingSteppes.lua b/server/ZoneScripts/ThunderingSteppes.lua new file mode 100644 index 000000000..9d7cd05f4 --- /dev/null +++ b/server/ZoneScripts/ThunderingSteppes.lua @@ -0,0 +1,74 @@ +--[[ + Script Name : ThunderingSteppes.lua + Script Purpose : Handle various things around the steppes + Script Author : Jabantiz + Script Date : 7/11/2015 + Script Notes : +--]] + +-- Location ID's for the doors +local NorthDoor = 437017 +local SouthDoor = 437013 + +local NorthDoorClosed = 352 +local SouthDoorClosed = 170 + +function init_zone_script(zone) + SetLocationProximityFunction(zone, 172.5, 18.5, -880.97, 10, "GriffonTower", "Leave") -- Ant Gate + SetLocationProximityFunction(zone, -174.68, 13.41, 509.50, 10, "GriffonTower", "Leave") -- SE Station + SetLocationProximityFunction(zone, 254.41, -8.92, 1343.37, 10, "GriffonTower", "Leave") -- ColdWind + SetLocationProximityFunction(zone, 622.95, 18.45, -234.11, 10, "GriffonTower", "Leave") -- Thundermist + SetLocationProximityFunction(zone, -394.25, -23.21, -418.25, 10, "GriffonTower", "Leave") -- Docks +end + +function player_entry(zone, player) +end + +function enter_location(zone, spawn, grid) +end + +function leave_location(zone, spawn, grid) +end + +function dawn(zone) + local door1 = GetSpawnByLocationID(zone, NorthDoor) + local door2 = GetSpawnByLocationID(zone, SouthDoor) + + if door1 ~= nil then + if GetHeading(door1) == NorthDoorClosed then + UseWidget(door1) + end + end + + if door2 ~= nil then + if GetHeading(door2) == SouthDoorClosed then + UseWidget(door2) + end + end +end + +function dusk(zone) + local door1 = GetSpawnByLocationID(zone, NorthDoor) + local door2 = GetSpawnByLocationID(zone, SouthDoor) + + if door1 ~= nil then + if GetHeading(door1) ~= NorthDoorClosed then + UseWidget(door1) + end + end + + if door2 ~= nil then + if GetHeading(door2) ~= SouthDoorClosed then + UseWidget(door2) + end + end +end + +function GriffonTower(zone, Spawn) + if IsPlayer(Spawn) and IsOnAutoMount(Spawn) then + EndAutoMount(Spawn) + end +end + +function Leave(zone, Spawn) +end \ No newline at end of file diff --git a/server/ZoneScripts/WillowWood.lua b/server/ZoneScripts/WillowWood.lua new file mode 100644 index 000000000..55500b700 --- /dev/null +++ b/server/ZoneScripts/WillowWood.lua @@ -0,0 +1,32 @@ +--[[ + Script Name : ZoneScripts/WillowWood.lua + Script Purpose : Willow Wood + Script Author : Scatman + Script Date : 2009.09.26 + Script Notes : Updated by Jabantiz (4/22/2017) +--]] + +local WOODELF_MENTOR_QUEST_3 = 215 +local A_RABID_WOLF = 2370107 + +function init_zone_script(Zone) + SetLocationProximityFunction(Zone, 798.53, -15.94, -602.98, 10, "InRange") +end + +function InRange(Zone, Spawn) + if HasQuest(Spawn, WOODELF_MENTOR_QUEST_3) and GetQuestStep(Spawn, WOODELF_MENTOR_QUEST_3) == 4 then + local wolf = GetSpawn(Spawn, A_RABID_WOLF) + if wolf == nil then + SpawnWolfForQuest(Zone, Spawn) + elseif not IsInCombat(wolf) then + Despawn(wolf) + SpawnWolfForQuest(Zone, Spawn) + end + end +end + +function SpawnWolfForQuest(Zone, Spawn) + local wolf = SpawnMob(Zone, A_RABID_WOLF, 0, 770.647, 0.814391, -611.79, 258.078) + AddHate(Spawn, wolf, 100) + SendMessage(Spawn, "You hear a growling in the hills to the east.") +end \ No newline at end of file diff --git a/server/ZoneScripts/Zek.lua b/server/ZoneScripts/Zek.lua new file mode 100644 index 000000000..ec35dbd7b --- /dev/null +++ b/server/ZoneScripts/Zek.lua @@ -0,0 +1,38 @@ +--[[ + Script Name : ZoneScripts/Zek.lua + Script Purpose : + Script Author : Neatz09 + Script Date : 2/24/2019 + Script Notes : +--]] + +function init_zone_script(zone) +SetLocationProximityFunction(zone, 519.74, -40, 212.56, 10, "StableMasters", "Leave") -- Warship +SetLocationProximityFunction(zone, -94.55, -25.47, 124.48, 10, "StableMasters", "Leave") -- Refugee +SetLocationProximityFunction(zone, 532.37, -18.8, -124.48, 10, "StableMasters", "Leave") -- Three Toes +SetLocationProximityFunction(zone, -261.72, -27.99, -441.27, 10, "StableMasters", "Leave") -- Bridge +SetLocationProximityFunction(zone, -543.87, -27.83, -192.11, 10, "StableMasters", "Leave") -- Defiled Forest + +end + +function StableMasters(zone, Spawn) + if IsPlayer(Spawn) and IsOnAutoMount(Spawn) then + EndAutoMount(Spawn) + end + +function player_entry(zone, player) +end + +function enter_location(zone, spawn, grid) +end + +function leave_location(zone, spawn, grid) +end + +function dawn(zone) +end + +function dusk(zone) +end + +end \ No newline at end of file diff --git a/server/eq2-updates.sql b/server/eq2-updates.sql new file mode 100644 index 000000000..bd6e99016 --- /dev/null +++ b/server/eq2-updates.sql @@ -0,0 +1,79137 @@ +SET unique_checks=0; +SET foreign_key_checks=0; +DROP TABLE IF EXISTS `table_versions`; +CREATE TABLE IF NOT EXISTS `table_versions` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `name` varchar(64) COLLATE latin1_general_ci NOT NULL DEFAULT '', + `version` int(10) unsigned NOT NULL DEFAULT '0', + `download_version` int(10) unsigned NOT NULL DEFAULT '0', + PRIMARY KEY (`id`), + UNIQUE KEY `UniqueName` (`name`) +) ENGINE=InnoDB AUTO_INCREMENT=172 DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci; +INSERT INTO `table_versions` (`name`,`version`,`download_version`) values ('table_versions',1,0); +DROP TABLE IF EXISTS `achievements`; +CREATE TABLE IF NOT EXISTS `achievements` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `achievement_id` int(10) unsigned NOT NULL DEFAULT '0', + `title` varchar(50) COLLATE latin1_general_ci NOT NULL, + `uncompleted_text` varchar(255) COLLATE latin1_general_ci DEFAULT NULL, + `completed_text` varchar(255) COLLATE latin1_general_ci DEFAULT NULL, + `category` varchar(50) COLLATE latin1_general_ci DEFAULT NULL, + `expansion` varchar(50) COLLATE latin1_general_ci DEFAULT NULL, + `icon` smallint(5) unsigned NOT NULL DEFAULT '0', + `point_value` int(10) unsigned NOT NULL DEFAULT '0', + `qty_req` int(10) unsigned NOT NULL DEFAULT '0', + `hide_achievement` tinyint(1) unsigned NOT NULL DEFAULT '0', + `unknown3a` int(10) unsigned NOT NULL DEFAULT '0', + `unknown3b` int(10) unsigned NOT NULL DEFAULT '0', + PRIMARY KEY (`id`), + UNIQUE KEY `AchievementTitleIDX` (`achievement_id`,`title`) +) ENGINE=InnoDB AUTO_INCREMENT=1170 DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci; +INSERT INTO `table_versions` (`name`,`version`,`download_version`) values ('achievements',1,0); +DROP TABLE IF EXISTS `achievements_requirements`; +CREATE TABLE IF NOT EXISTS `achievements_requirements` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `achievement_id` int(10) unsigned NOT NULL DEFAULT '0', + `name` varchar(250) COLLATE latin1_general_ci DEFAULT NULL, + `qty_req` int(10) unsigned NOT NULL DEFAULT '0', + PRIMARY KEY (`id`), + UNIQUE KEY `AchievementNameIDX` (`name`), + KEY `FK_achievement_requirements` (`achievement_id`), + CONSTRAINT `FK_achievement_requirements` FOREIGN KEY (`achievement_id`) REFERENCES `achievements` (`achievement_id`) ON UPDATE CASCADE +) ENGINE=InnoDB AUTO_INCREMENT=1755 DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci; +INSERT INTO `table_versions` (`name`,`version`,`download_version`) values ('achievements_requirements',1,0); +DROP TABLE IF EXISTS `achievements_rewards`; +CREATE TABLE IF NOT EXISTS `achievements_rewards` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `achievement_id` int(10) unsigned NOT NULL DEFAULT '0', + `reward` varchar(250) COLLATE latin1_general_ci DEFAULT '"', + PRIMARY KEY (`id`), + UNIQUE KEY `AchievementRewardIDX` (`achievement_id`,`reward`) +) ENGINE=InnoDB AUTO_INCREMENT=103 DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci; +INSERT INTO `table_versions` (`name`,`version`,`download_version`) values ('achievements_rewards',1,0); +DROP TABLE IF EXISTS `appearances`; +CREATE TABLE IF NOT EXISTS `appearances` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `appearance_id` int(10) unsigned NOT NULL, + `name` varchar(250) COLLATE latin1_general_ci NOT NULL, + `min_client_version` smallint(5) unsigned NOT NULL DEFAULT '0', + PRIMARY KEY (`id`), + UNIQUE KEY `AppIDX` (`appearance_id`) +) ENGINE=InnoDB AUTO_INCREMENT=27520 DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci; +INSERT INTO `appearances` (`id`, `appearance_id`, `name`, `min_client_version`) VALUES + (1, 1, 'staticobjects/encounter_chest', 0), + (2, 2, 'staticobjects/everling_portrait', 0), + (3, 3, 'staticobjects/bed_single', 0), + (4, 4, 'staticobjects/chair_1', 0), + (5, 5, 'staticobjects/chandalier_iron', 0), + (6, 6, 'staticobjects/table_1', 0), + (7, 7, 'staticobjects/mirror_1', 0), + (8, 8, 'staticobjects/crate_smallopen', 0), + (9, 9, 'staticobjects/cask_upright', 0), + (10, 10, '_exp06/characters/tool_users/coldaine/coldaine_vendor', 1096), + (11, 11, '_exp06/characters/tool_users/coldaine/coldaine_boss', 1096), + (12, 12, 'staticobjects/respawn_tent', 0), + (13, 13, 'staticobjects/fprt_sewer_entrance', 0), + (14, 14, 'staticobjects/boat_temp', 0), + (15, 15, 'staticobjects/encounter_chest_animated', 0), + (16, 16, 'staticobjects/mariners_bell', 0), + (17, 17, 'staticobjects/chessboard', 0), + (18, 18, 'staticobjects/tutorial_drake', 0), + (19, 19, 'staticobjects/signs/freeport/sign_post', 0), + (20, 20, 'staticobjects/signs/freeport/sign_post_arrow', 0), + (21, 21, 'staticobjects/signs/freeport/hood_sign_post', 0), + (22, 22, 'staticobjects/signs/freeport/hood_sign_post_arrow_beggarscourt', 0), + (23, 23, 'staticobjects/signs/freeport/hood_sign_post_arrow_bigbend', 0), + (24, 24, 'staticobjects/signs/freeport/hood_sign_post_arrow_longshadow', 0), + (25, 25, 'staticobjects/signs/freeport/hood_sign_post_arrow_templestreet', 0), + (26, 26, 'staticobjects/signs/freeport/hood_sign_wall_large', 0), + (27, 27, 'staticobjects/signs/freeport/hood_sign_wall_medium', 0), + (28, 28, 'staticobjects/signs/freeport/hood_sign_wall_small', 0), + (29, 29, 'staticobjects/signs/general/orc_stump_signpost', 0), + (30, 30, 'staticobjects/signs/qeynos/qey_roadsign_post01', 0), + (31, 31, 'staticobjects/signs/qeynos/qey_roadsign_sign01', 0), + (32, 32, 'staticobjects/qey_elddar/tree_big', 0), + (33, 33, 'staticobjects/qey_elddar/tree_small', 0), + (34, 34, 'staticobjects/qey_elddar/eye_of_ro', 0), + (35, 35, 'staticobjects/qey_village01/testvase', 0), + (36, 36, 'staticobjects/qeynos/qey_roadsign_post01', 0), + (37, 37, 'staticobjects/qeynos/qey_roadsign_sign01', 0), + (38, 38, 'staticobjects/qeynos/qey_catacomb_entrance01', 0), + (39, 39, 'staticobjects/general/orc_generic_signpost02_nektulos', 0), + (40, 40, 'staticobjects/general/orc_generic_signpost_03_freeport_nektulos', 0), + (41, 41, 'staticobjects/blacksmith/qey_blacksmith_anvil001', 0), + (42, 42, 'staticobjects/blacksmith/qey_blacksmith_bellows001', 0), + (43, 43, 'staticobjects/blacksmith/qey_blacksmith_hammer001', 0), + (44, 44, 'staticobjects/blacksmith/qey_blacksmith_oven001', 0), + (45, 45, 'staticobjects/blacksmith/qey_blacksmith_pliers001', 0), + (46, 46, 'staticobjects/blacksmith/qey_blacksmith_table001', 0), + (47, 47, 'staticobjects/poppies/qey_blacksmith_oven001', 0), + (48, 48, 'staticobjects/poppies/fprt_poppies_a', 0), + (49, 49, 'code/unknown', 0), + (50, 50, 'code/defaultapp', 0), + (51, 51, '_exp06/characters/tool_users/coldaine/coldaine_caster', 1096), + (52, 52, '_exp06/characters/tool_users/coldaine/coldaine_guard01', 1096), + (53, 53, 'ec/pc/ratonga/ratonga_male', 0), + (54, 54, 'ec/pc/ratonga/ratonga_female', 0), + (55, 55, 'ec/pc/ratonga/ratonga_female_01', 0), + (56, 56, 'ec/pc/ratonga/ratonga_female_02', 0), + (57, 57, 'ec/pc/ratonga/ratonga_female_03', 0), + (58, 58, 'ec/pc/ratonga/ratonga_female_04', 0), + (59, 59, 'ec/pc/ratonga/ratonga_female_05', 0), + (60, 60, 'ec/pc/ratonga/ratonga_male_01', 0), + (61, 61, 'ec/pc/ratonga/ratonga_male_02', 0), + (62, 62, 'ec/pc/ratonga/ratonga_male_03', 0), + (63, 63, 'ec/pc/ratonga/ratonga_male_04', 0), + (64, 64, 'ec/pc/ratonga/ratonga_male_05', 0), + (65, 65, 'ec/pc/ratonga/ratonga_male_06', 0), + (66, 66, 'ec/pc/ratonga/ratonga_male_07', 0), + (67, 67, 'ec/pc/ratonga/ratonga_male_08', 0), + (68, 68, 'ec/pc/ratonga/ratonga_male_09', 0), + (69, 69, 'ec/pc/ratonga/ratonga_male_10', 0), + (70, 70, 'ec/pc/ratonga/ratonga_male_11', 0), + (71, 71, 'ec/pc/ratonga/ratonga_male_12', 0), + (72, 72, 'ec/pc/ratonga/ratonga_male_13', 0), + (73, 73, 'ec/pc/ratonga/ratonga_male_14', 0), + (74, 74, '_exp06/characters/tool_users/coldaine/coldaine_guard02', 1096), + (75, 75, '_exp06/characters/tool_users/coldaine/coldaine_heavy', 1096), + (76, 76, 'ec/pc/froglok/froglok_female', 0), + (77, 77, 'ec/pc/froglok/froglok_male', 0), + (78, 78, 'ec/pc/halfelf/halfelf_male', 0), + (79, 79, 'ec/pc/halfelf/halfelf_female', 0), + (80, 80, '_exp06/characters/tool_users/coldaine/coldaine_female_vendor', 1096), + (81, 81, 'ec/pc/kerra/kerra_female', 0), + (82, 82, 'ec/pc/kerra/kerra_male', 0), + (83, 83, '_exp07/zones/exp07_dun_tower_of_frozen_shadow/tofs_mirror_floor1_event', 1096), + (84, 84, '_exp04/monsters/phara_dar_ghost', 1096), + (85, 85, '_exp07/zones/exp07_dun_velks_the_ascent/static_veeshans_shard_centered', 1096), + (86, 86, '_exp06/characters/tool_users/giant_frost_kurn_tower/ghost_giant_frost_medium', 1096), + (87, 87, '_exp06/characters/tool_users/giant_frost_kurn_tower/ghost_giant_frost_chubby', 1096), + (88, 88, '_exp06/characters/tool_users/giant_frost_kurn_tower/ghost_giant_frost_heavy', 1096), + (89, 89, '_exp06/characters/tool_users/giant_frost_kurn_tower/ghost_giant_frost_light', 1096), + (90, 90, '_exp07/characters/monsters/timber_wolf/timber_wolf_white_sniff', 1096), + (91, 91, 'ec/pc/kerra/kerra_female_01', 0), + (92, 92, 'ec/pc/kerra/kerra_female_02', 0), + (93, 93, 'ec/pc/kerra/kerra_female_03', 0), + (94, 94, 'ec/pc/kerra/kerra_female_04', 0), + (95, 95, 'ec/pc/kerra/kerra_female_05', 0), + (96, 96, 'ec/pc/kerra/kerra_female_06', 0), + (97, 97, 'ec/pc/kerra/kerra_male_01', 0), + (98, 98, 'ec/pc/kerra/kerra_male_02', 0), + (99, 99, 'ec/pc/kerra/kerra_male_03', 0), + (100, 100, 'ec/pc/kerra/kerra_male_05', 0), + (101, 101, 'ec/pc/kerra/kerra_male_06', 0), + (102, 102, 'ec/pc/kerra/kerra_male_04', 0), + (103, 103, 'ec/pc/iksar/iksar_male', 0), + (104, 104, 'ec/pc/iksar/iksar_female', 0), + (105, 105, 'ec/pc/troll/troll_female', 0), + (106, 106, 'ec/pc/troll/troll_male', 0), + (107, 107, 'ec/pc/halfling/halfling_female', 0), + (108, 108, 'ec/pc/halfling/halfling_male', 0), + (109, 109, 'ec/pc/dwarf/dwarf_female', 0), + (110, 110, 'ec/pc/dwarf/dwarf_male', 0), + (111, 111, 'ec/pc/barbarian/barbarian_female', 0), + (112, 112, 'ec/pc/barbarian/barbarian_male', 0), + (113, 113, 'ec/pc/woodelf/woodelf_female', 0), + (114, 114, 'ec/pc/woodelf/woodelf_male', 0), + (115, 115, 'ec/pc/darkelf/darkelf_male', 0), + (116, 116, 'ec/pc/darkelf/darkelf_female', 0), + (117, 117, '_exp06/characters/tool_users/coldaine/ghosts/coldaine_ghost_vendor', 1096), + (118, 118, '_exp06/characters/tool_users/coldaine/ghosts/coldaine_ghost_caster', 1096), + (119, 119, 'ec/pc/erudite/erudite_male', 0), + (120, 120, 'ec/pc/erudite/erudite_female', 0), + (121, 121, 'ec/pc/gnome/gnome_male', 0), + (122, 122, 'ec/pc/gnome/gnome_female', 0), + (123, 123, 'ec/pc/ogre/ogre_female', 0), + (124, 124, 'ec/pc/ogre/ogre_male', 0), + (125, 125, '_exp06/characters/tool_users/coldaine/ghosts/coldaine_ghost_guard01', 1096), + (126, 126, '_exp06/characters/tool_users/coldaine/ghosts/coldaine_ghost_guard02', 1096), + (127, 127, '_exp06/characters/tool_users/coldaine/ghosts/coldaine_ghost_heavy', 1096), + (128, 128, '_exp06/characters/tool_users/coldaine/coldaine_female_heavy', 1096), + (129, 129, '_exp06/characters/tool_users/coldaine/coldaine_female_caster', 1096), + (130, 130, 'staticobjects/_exp07/exp07_dun_kael_drakkel/kd_statue_zek_half', 1096), + (131, 131, 'accessories/wearable_items/_exp07/royal_velium_armor/royal_velium_armor_chain/chest', 1096), + (132, 132, 'ec/pc/human/human_female', 0), + (133, 133, 'accessories/wearable_items/_exp07/royal_velium_armor/royal_velium_armor_chain/feet', 1096), + (134, 134, 'ec/pc/human/human_male', 0), + (135, 135, 'ec/pc/highelf/highelf_female', 0), + (136, 136, 'ec/pc/highelf/highelf_male', 0), + (137, 137, 'ec/npc/orc', 0), + (138, 138, 'ec/npc/skeleton', 0), + (139, 139, 'ec/npc/skeletonorc', 0), + (140, 140, 'ec/npc/zombie', 0), + (141, 141, 'ec/npc/orcshaman', 0), + (142, 142, 'ec/npc/zombie_fresh_female', 0), + (143, 143, 'ec/npc/zombie_fresh_male', 0), + (144, 144, 'ec/npc/helmsman_wheel', 0), + (145, 145, 'ec/npc/goblin', 0), + (146, 146, 'ec/npc/flaming_skeleton', 0), + (147, 147, 'creatures/boss/fallengate', 0), + (148, 148, 'creatures/tu/livingstatue', 0), + (149, 149, 'creatures/tu/mysticdoll', 0), + (150, 150, 'creatures/tu/bixie', 0), + (151, 151, 'creatures/tu/troglodyte', 0), + (152, 152, 'creatures/tu/earth_elem', 0), + (153, 153, 'creatures/tu/obsidian_earth_elem', 0), + (154, 154, 'creatures/tu/riverrock_earth_elem', 0), + (155, 155, 'creatures/tu/stone_earth_elem', 0), + (156, 156, 'creatures/tu/elementalair', 0), + (157, 157, 'creatures/tu/minotaur', 0), + (158, 158, 'creatures/tu/minotaur_albino', 0), + (159, 159, 'creatures/tu/minotaur_undead', 0), + (160, 160, 'creatures/tu/golem_clay', 0), + (161, 161, 'creatures/tu/golem_flesh', 0), + (162, 162, 'creatures/tu/golem_stone', 0), + (163, 163, 'creatures/tu/bixie_small', 0), + (164, 164, 'creatures/tu/fairy', 0), + (165, 165, 'creatures/tu/mermaid', 0), + (166, 166, 'creatures/tu/ettin', 0), + (167, 167, 'creatures/tu/ettin_darker', 0), + (168, 168, 'creatures/tu/lizardman', 0), + (169, 169, 'creatures/tu/lavastatue', 0), + (170, 170, 'creatures/tu/boarfiend', 0), + (171, 171, 'creatures/tu/elementalfire', 0), + (172, 172, 'creatures/tu/elementalfire_demo', 0), + (173, 173, 'creatures/tu/nymph_dryad', 0), + (174, 174, 'creatures/tu/nymph_dryad_corrupt', 0), + (175, 175, 'creatures/tu/gelatinouscube', 0), + (176, 176, 'creatures/tu/amygdalan_dreadknight', 0), + (177, 177, 'creatures/tu/amygdalan_knight', 0), + (178, 178, 'creatures/tu/amygdalan_warrior', 0), + (179, 179, 'creatures/tu/gelatinouscube_refract', 0), + (180, 180, 'creatures/tu/siren', 0), + (181, 181, 'creatures/tu/dragonfly_faerie', 0), + (182, 182, 'creatures/tu/valkyrie', 0), + (183, 183, 'creatures/tu/tentacleterror', 0), + (184, 184, 'accessories/wearable_items/_exp07/royal_velium_armor/royal_velium_armor_chain/forearms', 1096), + (185, 185, 'accessories/wearable_items/_exp07/royal_velium_armor/royal_velium_armor_chain/hands', 1096), + (186, 186, 'accessories/wearable_items/_exp07/royal_velium_armor/royal_velium_armor_chain/head', 1096), + (187, 187, 'accessories/wearable_items/_exp07/royal_velium_armor/royal_velium_armor_chain/legs', 1096), + (188, 188, 'creatures/tu/additionalmodels/valkyrie_skirt', 0), + (189, 189, 'accessories/wearable_items/_exp07/royal_velium_armor/royal_velium_armor_chain/legs_noskirt', 1096), + (190, 190, 'creatures/monsters/monitorlizard', 0), + (191, 191, 'creatures/monsters/beam', 0), + (192, 192, 'creatures/monsters/beam2', 0), + (193, 193, 'creatures/monsters/icky_bat', 0), + (194, 194, 'creatures/monsters/barracuda', 0), + (195, 195, 'creatures/monsters/elementalwater', 0), + (196, 196, 'creatures/monsters/rat', 0), + (197, 197, 'creatures/monsters/flyingsnake', 0), + (198, 198, 'creatures/monsters/bear', 0), + (199, 199, 'creatures/monsters/monitorlizard_black', 0), + (200, 200, 'creatures/monsters/monitorlizard_blue', 0), + (201, 201, 'creatures/monsters/monitorlizard_orange', 0), + (202, 202, 'accessories/wearable_items/_exp07/royal_velium_armor/royal_velium_armor_chain/pauldron_left', 1096), + (203, 203, 'creatures/monsters/vox', 0), + (204, 204, 'creatures/monsters/pihrana', 0), + (205, 205, 'creatures/monsters/spider', 0), + (206, 206, 'creatures/monsters/dikdik', 0), + (207, 207, 'creatures/monsters/beaver', 0), + (208, 208, 'creatures/monsters/beetle', 0), + (209, 209, 'creatures/monsters/goo', 0), + (210, 210, 'creatures/monsters/octopus', 0), + (211, 211, 'creatures/monsters/crab', 0), + (212, 212, 'creatures/monsters/treeent', 0), + (213, 213, 'creatures/monsters/snake', 0), + (214, 214, 'creatures/monsters/seaturtle_gold', 0), + (215, 215, 'creatures/monsters/turtle', 0), + (216, 216, 'creatures/monsters/wolf', 0), + (217, 217, 'creatures/monsters/bee', 0), + (218, 218, 'creatures/monsters/seaturtle', 0), + (219, 219, 'creatures/monsters/mantaray', 0), + (220, 220, 'creatures/monsters/armadillo', 0), + (221, 221, 'creatures/monsters/beetlefire', 0), + (222, 222, 'creatures/monsters/beetleglow', 0), + (223, 223, 'creatures/monsters/beetlegold', 0), + (224, 224, 'creatures/monsters/frog', 0), + (225, 225, 'creatures/monsters/griffin', 0), + (226, 226, 'creatures/monsters/mimic', 0), + (227, 227, 'creatures/monsters/albinosnake', 0), + (228, 228, 'creatures/monsters/flying_dragon', 0), + (229, 229, 'creatures/monsters/ground_dragon', 0), + (230, 230, 'creatures/monsters/iron_guardian', 0), + (231, 231, 'creatures/monsters/kholrat', 0), + (232, 232, 'creatures/monsters/molerat', 0), + (233, 233, 'creatures/monsters/plague_rat', 0), + (234, 234, 'creatures/monsters/redsnake', 0), + (235, 235, 'creatures/monsters/rustmonster', 0), + (236, 236, 'creatures/monsters/thoughtbleeder', 0), + (237, 237, 'creatures/monsters/blue_frog', 0), + (238, 238, 'creatures/monsters/drake', 0), + (239, 239, 'creatures/monsters/bat', 0), + (240, 240, 'creatures/monsters/voidbeast', 0), + (241, 241, 'creatures/monsters/swordfish', 0), + (242, 242, 'creatures/monsters/shark', 0), + (243, 243, 'creatures/monsters/spider_cave', 0), + (244, 244, 'creatures/monsters/spider_fat', 0), + (245, 245, 'creatures/monsters/spider_fat_green', 0), + (246, 246, 'creatures/monsters/spider_fat_ice', 0), + (247, 247, 'creatures/monsters/evileye', 0), + (248, 248, 'creatures/monsters/bee_giant', 0), + (249, 249, 'creatures/monsters/crab_fire', 0), + (250, 250, 'creatures/monsters/scorpion_yellow', 0), + (251, 251, 'creatures/monsters/scorpion_black', 0), + (252, 252, 'creatures/monsters/slug', 0), + (253, 253, 'creatures/monsters/mantaray_dark', 0), + (254, 254, 'creatures/monsters/mantaray_darkblue', 0), + (255, 255, 'creatures/monsters/mantaray_undead', 0), + (256, 256, 'creatures/monsters/centipede', 0), + (257, 257, 'creatures/monsters/centipede_blue', 0), + (258, 258, 'creatures/monsters/centipede_bluegreen', 0), + (259, 259, 'creatures/monsters/cow', 0), + (260, 260, 'creatures/monsters/hawk', 0), + (261, 261, 'creatures/monsters/scarecrow', 0), + (262, 262, 'creatures/monsters/hoovedcarnivore', 0), + (263, 263, 'creatures/monsters/hoovedcarnivorebrown', 0), + (264, 264, 'creatures/monsters/elephant', 0), + (265, 265, 'creatures/monsters/elephantgrey', 0), + (266, 266, 'creatures/monsters/rhino', 0), + (267, 267, 'creatures/monsters/badger', 0), + (268, 268, 'creatures/monsters/unicorn', 0), + (269, 269, 'creatures/monsters/duck', 0), + (270, 270, 'creatures/monsters/owlbear', 0), + (271, 271, 'creatures/monsters/pig', 0), + (272, 272, 'creatures/monsters/pigspotted', 0), + (273, 273, 'creatures/monsters/willowisp', 0), + (274, 274, 'creatures/monsters/root_horror', 0), + (275, 275, 'creatures/monsters/nagafen', 0), + (276, 276, 'creatures/monsters/wasp', 0), + (277, 277, 'creatures/monsters/flyingsnake_cave', 0), + (278, 278, 'creatures/monsters/hyena', 0), + (279, 279, 'creatures/monsters/book_minion', 0), + (280, 280, 'creatures/monsters/book_minion_gardening', 0), + (281, 281, 'creatures/monsters/book_minion_griffin_to_molerat', 0), + (282, 282, 'creatures/monsters/book_minion_reading_for_dummies', 0), + (283, 283, 'creatures/monsters/book_minion_squirrel_to_walrusman', 0), + (284, 284, 'creatures/monsters/catoplebas', 0), + (285, 285, 'creatures/monsters/watertentacle', 0), + (286, 286, 'creatures/monsters/watertentacle_watery', 0), + (287, 287, 'creatures/monsters/crystal_dragon', 0), + (288, 288, 'creatures/monsters/octopus_boss', 0), + (289, 289, 'creatures/monsters/seaturtle_boss', 0), + (290, 290, 'creatures/monsters/skeleton_boss', 0), + (291, 291, 'creatures/monsters/cow_boss', 0), + (292, 292, 'creatures/monsters/wasp_small', 0), + (293, 293, 'creatures/monsters/manticore', 0), + (294, 294, 'creatures/monsters/goo_bubblegum', 0), + (295, 295, 'creatures/monsters/goo_fire', 0), + (296, 296, 'creatures/monsters/goo_lectric', 0), + (297, 297, 'creatures/monsters/goo_snot', 0), + (298, 298, 'creatures/monsters/goo_black', 0), + (299, 299, 'creatures/monsters/goo_mud', 0), + (300, 300, 'creatures/monsters/goo_red', 0), + (301, 301, 'creatures/monsters/goo_slug', 0), + (302, 302, 'creatures/monsters/dragon_ice', 0), + (303, 303, 'creatures/monsters/lion', 0), + (304, 304, 'creatures/monsters/cat_orange', 0), + (305, 305, 'creatures/monsters/cat_gray', 0), + (306, 306, 'creatures/monsters/cat', 0), + (307, 307, 'creatures/monsters/dervish', 0), + (308, 308, 'creatures/monsters/dervish_fire', 0), + (309, 309, 'creatures/monsters/dervish_glass', 0), + (310, 310, 'creatures/monsters/wyrm', 0), + (311, 311, 'creatures/monsters/dervish_ice', 0), + (312, 312, 'creatures/monsters/dervish_iron', 0), + (313, 313, 'accessories/wearable_items/_exp07/royal_velium_armor/royal_velium_armor_chain/pauldron_right', 1096), + (314, 314, 'accessories/wearable_items/_exp07/royal_velium_armor/royal_velium_armor_chain/shoulders', 1096), + (315, 315, 'accessories/wearable_items/_exp07/royal_velium_armor/royal_velium_armor_chain/shoulders_with_pauldrons', 1096), + (316, 316, 'accessories/wearable_items/_exp07/royal_velium_armor/royal_velium_armor_chain/skirt', 1096), + (317, 317, 'accessories/wearable_items/_exp07/royal_velium_armor/royal_velium_armor_robe/skirt', 1096), + (318, 318, 'accessories/wearable_items/cloak/exp07/cloak_heritage_coldain', 1096), + (319, 319, 'accessories/wearable_items/cloak/exp07/cloak_heritage_coldain2', 1096), + (320, 320, 'accessories/wearable_items/cloak/exp07/cloak_dragonskin2', 1096), + (321, 321, 'accessories/wearable_items/cloak/exp07/cloak_dragonskin2_diamond', 1096), + (322, 322, 'accessories/wearable_items/cloak/exp07/cloak_dragonskin', 1096), + (323, 323, 'staticobjects/_exp07/exp07_rgn_great_divide/thurgadin_incense_burner', 1096), + (324, 324, 'staticobjects/_exp07/exp07_rgn_great_divide/thurgadin_snowglobe', 1096), + (325, 325, 'staticobjects/_exp07/exp07_rgn_great_divide/coldain_metaltile', 1096), + (326, 326, 'staticobjects/_exp07/exp07_rgn_great_divide/coldain_stonetile', 1096), + (327, 327, 'staticobjects/_exp07/exp07_rgn_great_divide/thurgadin_velium_jar', 1096), + (328, 328, 'accessories/wearable_items/cloak/exp07/cloak_black_lightning', 1096), + (329, 329, '_exp07/zones/exp07_dun_kraytocs_fortress/orb01', 1096), + (330, 330, 'staticobjects/_exp07/exp07_rgn_great_divide/coldain_summoning_crystal', 1096), + (331, 331, 'accessories/wearable_items/_exp07/station_cash_armor/robe_wyrmskin/chest', 1096), + (332, 332, 'accessories/wearable_items/_exp07/station_cash_armor/robe_wyrmskin/skirt', 1096), + (333, 333, 'accessories/wearable_items/_exp07/station_cash_armor/robe_wyrmskin/feet', 1096), + (334, 334, 'accessories/wearable_items/_exp07/station_cash_armor/robe_wyrmskin/hands', 1096), + (335, 335, 'accessories/wearable_items/_exp07/station_cash_armor/robe_wyrmskin/head', 1096), + (336, 336, '_exp06/characters/monsters/erudite_lich/erudite_lich_black', 1096), + (337, 337, 'accessories/wearable_items/_exp07/station_cash_armor/robe_wyrmskin/legs', 1096), + (338, 338, 'accessories/wearable_items/_exp07/station_cash_armor/robe_wyrmskin/charcoal/skirt', 1096), + (339, 339, 'accessories/wearable_items/_exp07/station_cash_armor/robe_wyrmskin/charcoal/chest', 1096), + (340, 340, 'accessories/wearable_items/_exp07/station_cash_armor/robe_wyrmskin/charcoal/feet', 1096), + (341, 341, 'accessories/wearable_items/_exp07/station_cash_armor/robe_wyrmskin/charcoal/hands', 1096), + (342, 342, 'accessories/wearable_items/_exp07/station_cash_armor/robe_wyrmskin/charcoal/head', 1096), + (343, 343, 'accessories/wearable_items/_exp07/rallos_zek_armor/rallos_zek_armor_vanguard_tintable/shoulders', 1096), + (344, 344, 'accessories/wearable_items/_exp07/station_cash_armor/robe_wyrmskin/charcoal/legs', 1096), + (345, 345, 'accessories/wearable_items/_exp07/station_cash_armor/robe_wyrmskin/green/skirt', 1096), + (346, 346, 'accessories/wearable_items/_exp07/station_cash_armor/robe_wyrmskin/green/chest', 1096), + (347, 347, 'accessories/wearable_items/_exp07/station_cash_armor/robe_wyrmskin/green/feet', 1096), + (348, 348, 'accessories/wearable_items/_exp07/station_cash_armor/robe_wyrmskin/green/hands', 1096), + (349, 349, 'accessories/wearable_items/_exp07/station_cash_armor/robe_wyrmskin/green/head', 1096), + (350, 350, '_exp07/characters/monsters/lord_yelinak/lord_yelinak_test', 1096), + (351, 351, 'accessories/wearable_items/_exp07/station_cash_armor/robe_wyrmskin/green/legs', 1096), + (352, 352, 'accessories/wearable_items/_exp07/station_cash_armor/robe_wyrmskin/red/skirt', 1096), + (353, 353, 'accessories/wearable_items/_exp07/station_cash_armor/robe_wyrmskin/red/chest', 1096), + (354, 354, 'accessories/wearable_items/_exp07/station_cash_armor/robe_wyrmskin/red/head', 1096), + (355, 355, 'staticobjects/liveevent/tinkerfest/dpo_gnomerace_powerup_speed02', 1096), + (356, 356, 'accessories/wearable_items/_exp07/station_cash_armor/robe_wyrmskin/red/legs', 1096), + (357, 357, 'accessories/wearable_items/_exp07/asian_goth_armor/chain/skirt', 1096), + (358, 358, 'accessories/wearable_items/_exp07/asian_goth_armor/chain/chest', 1096), + (359, 359, 'accessories/wearable_items/_exp07/asian_goth_armor/chain/feet', 1096), + (360, 360, 'accessories/wearable_items/_exp07/asian_goth_armor/chain/forearms', 1096), + (361, 361, 'accessories/wearable_items/_exp07/asian_goth_armor/chain/hands', 1096), + (362, 362, 'accessories/wearable_items/_exp07/asian_goth_armor/chain/head', 1096), + (363, 363, 'accessories/wearable_items/_exp07/asian_goth_armor/chain/legs', 1096), + (364, 364, 'accessories/wearable_items/_exp07/asian_goth_armor/chain/legs_noskirt', 1096), + (365, 365, 'accessories/wearable_items/_exp07/asian_goth_armor/chain/shoulders', 1096), + (366, 366, 'accessories/wearable_items/_exp07/asian_goth_armor/chain/shoulders_no_pauldrons', 1096), + (367, 367, 'accessories/wearable_items/_exp07/asian_goth_armor/chain/shoulders_snapons', 1096), + (368, 368, 'accessories/wearable_items/_exp07/asian_goth_armor/chain/snapons/head_asian_goth_chain_helm', 1096), + (369, 369, 'accessories/wearable_items/_exp07/asian_goth_armor/chain/snapons/asian_goth_chain_pauldrons_left', 1096), + (370, 370, 'accessories/wearable_items/_exp07/asian_goth_armor/chain/snapons/asian_goth_chain_pauldrons_right', 1096), + (371, 371, 'ec/pc/vampire/bat_swarm_vampire_mount', 1096), + (372, 372, 'accessories/wieldable_items/weapons/exp07/vampire_appearance/exp07_vampire_unarmed_nofx', 1096), + (373, 373, '_exp07/characters/monsters/lich_bride/lich_bride', 1096), + (374, 374, 'accessories/wieldable_items/weapons/exp07/2h_sword/exp07_2h_specter_scythe_usable_fx', 1096), + (375, 375, 'staticobjects/_exp07/exp07_rgn_eastern_wastes/vel_coldain_weaponrack04', 1096), + (376, 376, '_exp07/characters/tool_users/drolvarg_snow_warrior/drolvarg_snow_warrior_03', 1096), + (377, 377, '_exp07/characters/tool_users/drolvarg_snow_warrior/drolvarg_snow_warrior_02', 1096), + (378, 378, 'accessories/hair/hair037', 1096), + (379, 379, 'staticobjects/_exp07/exp07_rgn_great_divide/dpo_thur_gnome_multi_gear_02', 1096), + (380, 380, 'accessories/wearable_items/cloak/exp07/cloak_dain', 1096), + (381, 381, 'accessories/wearable_items/cloak/exp07/cloak_dragon_hoard', 1096), + (382, 382, 'creatures/mounts/griffin_mount/griffin_mount_stormfeather', 1096), + (383, 383, 'creatures/mounts/griffin_mount/griffin_mount_tintable', 1096), + (384, 384, '_exp07/zones/exp07_dun_tower_of_frozen_shadow/tfs_floor04_lightsource_floortorch01', 1096), + (385, 385, 'creatures/pets/wolf_pup/wolf_pup_loyal', 1096), + (386, 386, 'staticobjects/_exp07/exp07_rgn_great_divide/gd_dpo_icesphere_bobbing', 1096), + (387, 387, '_exp07/characters/monsters/griffin_new/highland_griffin_saddle', 1096), + (388, 388, '_exp06/zones/objects/exp06_dun_the_hole_raid/platform_debris0', 1096), + (389, 389, '_exp06/zones/objects/exp06_dun_the_hole_raid/platform_debris1', 1096), + (390, 390, '_exp06/zones/objects/exp06_dun_the_hole_raid/platform_debris2', 1096), + (391, 391, '_exp07/characters/monsters/dragon_hoard/dragon_hoard', 1096), + (392, 392, '_exp07/zones/exp07_dun_crystalcavern/exp07_dun_crystalcavern_blocker01', 1096), + (393, 393, '_exp07/zones/exp07_dun_crystalcavern/exp07_dun_crystalcavern_blocker01_green', 1096), + (394, 394, '_exp07/zones/exp07_dun_crystalcavern/exp07_dun_crystalcavern_blocker01_purple', 1096), + (395, 395, '_exp07/zones/exp07_dun_crystalcavern/exp07_dun_crystalcavern_crevice01_floor01', 1096), + (396, 396, 'accessories/wearable_items/snapons/backpacks/backpack_velious_swivel/backpack_velious_swivel_rope', 1096), + (397, 397, 'accessories/wearable_items/snapons/backpacks/backpack_velious_swivel/backpack_velious_swivel', 1096), + (398, 398, 'accessories/wearable_items/snapons/backpacks/backpack_velious_swivel/backpack_velious_swivel_barrel', 1096), + (399, 399, 'accessories/wearable_items/snapons/backpacks/backpack_velious_swivel/backpack_velious_swivel_bucket', 1096), + (400, 400, 'accessories/wearable_items/snapons/backpacks/backpack_velious_swivel/backpack_velious_swivel_cage', 1096), + (401, 401, 'staticobjects/_exp07/vel_snowpile01', 1096), + (402, 402, 'staticobjects/_exp07/exp07_rgn_great_divide/vel_huge_fire_nobase_nofire', 1096), + (403, 403, 'staticobjects/_exp07/exp07_rgn_great_divide/goahmari_village_firepit01', 1096), + (404, 404, 'staticobjects/_exp07/exp07_rgn_great_divide/goahmari_village_firepit01_burning', 1096), + (405, 405, 'staticobjects/_exp07/exp07_rgn_great_divide/goahmari_village_light01', 1096), + (406, 406, 'staticobjects/_exp07/exp07_rgn_great_divide/goahmari_village_light01_nosnow01', 1096), + (407, 407, 'accessories/wearable_items/_exp07/cryomantic_armor/upperchest', 1096), + (408, 408, 'accessories/wearable_items/_exp07/cryomantic_armor/chest', 1096), + (409, 409, 'accessories/wearable_items/_exp07/cryomantic_armor/feet', 1096), + (410, 410, 'accessories/wearable_items/_exp07/cryomantic_armor/forearms', 1096), + (411, 411, 'accessories/wearable_items/_exp07/cryomantic_armor/hands', 1096), + (412, 412, 'accessories/wearable_items/_exp07/cryomantic_armor/head', 1096), + (413, 413, 'accessories/wearable_items/woven/uncommon/medium/chest', 0), + (414, 414, 'accessories/wearable_items/woven/uncommon/medium/feet', 0), + (415, 415, 'accessories/wearable_items/woven/uncommon/medium/forearms', 0), + (416, 416, 'accessories/wearable_items/woven/uncommon/medium/hands', 0), + (417, 417, 'accessories/wearable_items/woven/uncommon/medium/head', 0), + (418, 418, 'accessories/wearable_items/woven/uncommon/medium/legs', 0), + (419, 419, 'accessories/wearable_items/woven/uncommon/medium/shoulders', 0), + (420, 420, 'accessories/wearable_items/woven/uncommon/medium/skirt', 0), + (421, 421, 'accessories/wearable_items/woven/uncommon/low/chest', 0), + (422, 422, 'accessories/wearable_items/woven/uncommon/low/feet', 0), + (423, 423, 'accessories/wearable_items/woven/uncommon/low/forearms', 0), + (424, 424, 'accessories/wearable_items/woven/uncommon/low/hands', 0), + (425, 425, 'accessories/wearable_items/woven/uncommon/low/head', 0), + (426, 426, 'accessories/wearable_items/woven/uncommon/low/legs', 0), + (427, 427, 'accessories/wearable_items/woven/uncommon/low/shoulders', 0), + (428, 428, 'accessories/wearable_items/woven/uncommon/low/skirt', 0), + (429, 429, 'accessories/wearable_items/woven/uncommon/high/chest', 0), + (430, 430, 'accessories/wearable_items/woven/uncommon/high/feet', 0), + (431, 431, 'accessories/wearable_items/woven/uncommon/high/forearms', 0), + (432, 432, 'accessories/wearable_items/woven/uncommon/high/hands', 0), + (433, 433, 'accessories/wearable_items/woven/uncommon/high/head', 0), + (434, 434, 'accessories/wearable_items/woven/uncommon/high/legs', 0), + (435, 435, 'accessories/wearable_items/woven/uncommon/high/shoulders', 0), + (436, 436, 'accessories/wearable_items/woven/uncommon/high/skirt', 0), + (437, 437, 'accessories/wearable_items/_exp07/cryomantic_armor/left', 1096), + (438, 438, 'accessories/wearable_items/_exp07/cryomantic_armor/legs', 1096), + (439, 439, 'accessories/wearable_items/_exp07/cryomantic_armor/legs_noskirt', 1096), + (440, 440, 'accessories/wearable_items/_exp07/cryomantic_armor/pauldron05_vanguard_heavy_left', 1096), + (441, 441, 'accessories/wearable_items/_exp07/cryomantic_armor/pauldron05_vanguard_heavy_right', 1096), + (442, 442, 'accessories/wearable_items/_exp07/cryomantic_armor/right', 1096), + (443, 443, 'accessories/wearable_items/_exp07/cryomantic_armor/shoulders', 1096), + (444, 444, 'accessories/wearable_items/_exp07/cryomantic_armor/shoulders_epic', 1096), + (445, 445, 'accessories/wearable_items/woven/rare/low/chest', 0), + (446, 446, 'accessories/wearable_items/woven/rare/low/feet', 0), + (447, 447, 'accessories/wearable_items/woven/rare/low/forearms', 0), + (448, 448, 'accessories/wearable_items/woven/rare/low/hands', 0), + (449, 449, 'accessories/wearable_items/woven/rare/low/head', 0), + (450, 450, 'accessories/wearable_items/woven/rare/low/legs', 0), + (451, 451, 'accessories/wearable_items/woven/rare/low/shoulders', 0), + (452, 452, 'accessories/wearable_items/woven/rare/low/skirt', 0), + (453, 453, 'accessories/wearable_items/_exp07/cryomantic_armor/shoulders_nopauldrons', 1096), + (454, 454, 'accessories/wearable_items/_exp07/cryomantic_armor/shoulders_pauldron05_both', 1096), + (455, 455, 'accessories/wearable_items/_exp07/cryomantic_armor/skirt', 1096), + (456, 456, 'accessories/wearable_items/_exp07/cryomantic_armor/snapons/head_spike', 1096), + (457, 457, 'accessories/wearable_items/_exp07/cryomantic_armor/snapons/toe_spike_left', 1096), + (458, 458, 'accessories/wearable_items/_exp07/cryomantic_armor/snapons/toe_spike_right', 1096), + (459, 459, 'accessories/wieldable_items/weapons/exp07/shield/exp07_shield_cryomantic', 1096), + (460, 460, 'accessories/wieldable_items/weapons/exp07/1h_sword/exp07_1h_sword_cryomantic', 1096), + (461, 461, 'accessories/wearable_items/woven/common/medium/chest', 0), + (462, 462, 'accessories/wearable_items/woven/common/medium/feet', 0), + (463, 463, 'accessories/wearable_items/woven/common/medium/forearms', 0), + (464, 464, 'accessories/wearable_items/woven/common/medium/hands', 0), + (465, 465, 'accessories/wearable_items/woven/common/medium/head', 0), + (466, 466, 'accessories/wearable_items/woven/common/medium/legs', 0), + (467, 467, 'accessories/wearable_items/woven/common/medium/shoulders', 0), + (468, 468, 'accessories/wearable_items/woven/common/medium/skirt', 0), + (469, 469, 'accessories/wearable_items/woven/common/low/chest', 0), + (470, 470, 'accessories/wearable_items/woven/common/low/feet', 0), + (471, 471, 'accessories/wearable_items/woven/common/low/forearms', 0), + (472, 472, 'accessories/wearable_items/woven/common/low/hands', 0), + (473, 473, 'accessories/wearable_items/woven/common/low/head', 0), + (474, 474, 'accessories/wearable_items/woven/common/low/legs', 0), + (475, 475, 'accessories/wearable_items/woven/common/low/shoulders', 0), + (476, 476, 'accessories/wearable_items/woven/common/low/skirt', 0), + (477, 477, 'accessories/wearable_items/woven/common/high/chest', 0), + (478, 478, 'accessories/wearable_items/woven/common/high/feet', 0), + (479, 479, 'accessories/wearable_items/woven/common/high/forearms', 0), + (480, 480, 'accessories/wearable_items/woven/common/high/hands', 0), + (481, 481, 'accessories/wearable_items/woven/common/high/head', 0), + (482, 482, 'accessories/wearable_items/woven/common/high/legs', 0), + (483, 483, 'accessories/wearable_items/woven/common/high/shoulders', 0), + (484, 484, 'accessories/wearable_items/woven/common/high/skirt', 0), + (485, 485, 'accessories/wearable_items/snapons/backpacks/backpack_velious_swivel/backpack_velious_swivel_skillet', 1096), + (486, 486, 'staticobjects/_exp07/exp07_dun_crystalcaverns/dpo_exp07_dun_crystalcavern_blocker01', 1096), + (487, 487, 'staticobjects/_exp07/exp07_dun_crystalcaverns/dpo_exp07_dun_crystalcavern_blocker01_green', 1096), + (488, 488, 'staticobjects/_exp07/exp07_dun_crystalcaverns/dpo_exp07_dun_crystalcavern_blocker01_purple', 1096), + (489, 489, 'accessories/wearable_items/_exp07/pirate_heavycloth/skirt', 1096), + (490, 490, 'accessories/wearable_items/_exp07/pirate_heavycloth/chest', 1096), + (491, 491, 'accessories/wearable_items/_exp07/pirate_heavycloth/feet', 1096), + (492, 492, 'accessories/wearable_items/_exp07/pirate_heavycloth/hands', 1096), + (493, 493, 'accessories/wearable_items/_exp07/pirate_heavycloth/legs', 1096), + (494, 494, 'accessories/wearable_items/_exp07/pirate_heavycloth/shoulders', 1096), + (495, 495, 'accessories/wearable_items/_exp07/pirate_heavycloth/belt/skirt', 1096), + (496, 496, 'accessories/wearable_items/_exp07/pirate_heavycloth/head/head', 1096), + (497, 497, '_exp07/zones/exp07_dun_tower_of_frozen_shadow/teleport_vision_tofs_throne', 1096), + (498, 498, 'staticobjects/eig/exp03_eig_harvest_location_rare_dark', 1096), + (499, 499, 'staticobjects/eig/eig_harvest_location_dark', 1096), + (500, 500, 'accessories/wearable_items/_exp07/pirate_heavycloth_alt/shoulders', 1096), + (501, 501, 'accessories/wearable_items/_exp07/pirate_heavycloth_alt/chest', 1096), + (502, 502, 'accessories/wearable_items/_exp07/pirate_heavycloth_alt/feet', 1096), + (503, 503, 'accessories/wearable_items/_exp07/pirate_heavycloth_alt/hands', 1096), + (504, 504, 'accessories/wearable_items/_exp07/pirate_heavycloth_alt/legs', 1096), + (505, 505, '_exp07/zones/exp07_dun_tower_of_frozen_shadow/tfs_floor04_lightsource_wall01_nolight', 1096), + (506, 506, 'accessories/wieldable_items/weapons/exp07/1h_crush/1h_crush_nipiks_cane_sm_npc_only_side', 1096), + (507, 507, 'creatures/mounts/plague_cloud_housing', 1096), + (508, 508, 'creatures/mounts/storm_cloud_raf_housing', 1096), + (509, 509, 'accessories/wearable_items/vanguard/uncommon/medium/chest', 0), + (510, 510, 'accessories/wearable_items/vanguard/uncommon/medium/feet', 0), + (511, 511, 'accessories/wearable_items/vanguard/uncommon/medium/forearms', 0), + (512, 512, 'accessories/wearable_items/vanguard/uncommon/medium/hands', 0), + (513, 513, 'accessories/wearable_items/vanguard/uncommon/medium/head', 0), + (514, 514, 'accessories/wearable_items/vanguard/uncommon/medium/legs', 0), + (515, 515, 'accessories/wearable_items/vanguard/uncommon/medium/shoulders', 0), + (516, 516, 'accessories/wearable_items/vanguard/uncommon/medium/left', 0), + (517, 517, 'accessories/wearable_items/vanguard/uncommon/medium/right', 0), + (518, 518, 'accessories/wearable_items/vanguard/uncommon/low/chest', 0), + (519, 519, 'accessories/wearable_items/vanguard/uncommon/low/feet', 0), + (520, 520, 'accessories/wearable_items/vanguard/uncommon/low/forearms', 0), + (521, 521, 'accessories/wearable_items/vanguard/uncommon/low/hands', 0), + (522, 522, 'accessories/wearable_items/vanguard/uncommon/low/head', 0), + (523, 523, 'accessories/wearable_items/vanguard/uncommon/low/legs', 0), + (524, 524, 'accessories/wearable_items/vanguard/uncommon/low/shoulders', 0), + (525, 525, 'accessories/wearable_items/vanguard/uncommon/low/left', 0), + (526, 526, 'accessories/wearable_items/vanguard/uncommon/low/right', 0), + (527, 527, 'accessories/wearable_items/vanguard/uncommon/high/chest', 0), + (528, 528, 'accessories/wearable_items/vanguard/uncommon/high/feet', 0), + (529, 529, 'accessories/wearable_items/vanguard/uncommon/high/forearms', 0), + (530, 530, 'accessories/wearable_items/vanguard/uncommon/high/hands', 0), + (531, 531, 'accessories/wearable_items/vanguard/uncommon/high/head', 0), + (532, 532, 'accessories/wearable_items/vanguard/uncommon/high/legs', 0), + (533, 533, 'accessories/wearable_items/vanguard/uncommon/high/shoulders', 0), + (534, 534, 'accessories/wearable_items/vanguard/uncommon/high/left', 0), + (535, 535, 'accessories/wearable_items/vanguard/uncommon/high/right', 0), + (536, 536, 'accessories/wearable_items/vanguard/rare/medium/chest', 0), + (537, 537, 'accessories/wearable_items/vanguard/rare/medium/feet', 0), + (538, 538, 'accessories/wearable_items/vanguard/rare/medium/forearms', 0), + (539, 539, 'accessories/wearable_items/vanguard/rare/medium/hands', 0), + (540, 540, 'accessories/wearable_items/vanguard/rare/medium/head', 0), + (541, 541, 'accessories/wearable_items/vanguard/rare/medium/legs', 0), + (542, 542, 'accessories/wearable_items/vanguard/rare/medium/shoulders', 0), + (543, 543, 'accessories/wearable_items/vanguard/rare/medium/right', 0), + (544, 544, 'accessories/wearable_items/vanguard/rare/medium/left', 0), + (545, 545, 'accessories/wearable_items/vanguard/rare/low/chest', 0), + (546, 546, 'accessories/wearable_items/vanguard/rare/low/feet', 0), + (547, 547, 'accessories/wearable_items/vanguard/rare/low/forearms', 0), + (548, 548, 'accessories/wearable_items/vanguard/rare/low/hands', 0), + (549, 549, 'accessories/wearable_items/vanguard/rare/low/head', 0), + (550, 550, 'accessories/wearable_items/vanguard/rare/low/legs', 0), + (551, 551, 'accessories/wearable_items/vanguard/rare/low/shoulders', 0), + (552, 552, 'accessories/wearable_items/vanguard/rare/low/left', 0), + (553, 553, 'accessories/wearable_items/vanguard/rare/low/right', 0), + (554, 554, '_exp07/zones/exp07_dun_tower_of_frozen_shadow/tfs_floor06_mirror_emptyframe01', 1096), + (555, 555, '_exp07/zones/exp07_rgn_great_divide/dock_construction_beams', 1096), + (556, 556, '_exp07/zones/exp07_rgn_great_divide/dock_construction_boat', 1096), + (557, 557, '_exp07/zones/exp07_rgn_great_divide/dock_construction_dingy', 1096), + (558, 558, 'accessories/wearable_items/_exp07/othmir_gi/shoulders', 1096), + (559, 559, 'accessories/wearable_items/_exp07/othmir_gi/chest', 1096), + (560, 560, 'accessories/wearable_items/_exp07/othmir_gi/feet', 1096), + (561, 561, 'accessories/wearable_items/_exp07/othmir_gi/legs', 1096), + (562, 562, 'accessories/wearable_items/_exp07/station_cash_armor/robe_wyrmskin/collar', 1096), + (563, 563, 'accessories/wearable_items/vanguard/common/medium/chest', 0), + (564, 564, 'accessories/wearable_items/vanguard/common/medium/feet', 0), + (565, 565, 'accessories/wearable_items/vanguard/common/medium/forearms', 0), + (566, 566, 'accessories/wearable_items/vanguard/common/medium/hands', 0), + (567, 567, 'accessories/wearable_items/vanguard/common/medium/head', 0), + (568, 568, 'accessories/wearable_items/vanguard/common/medium/legs', 0), + (569, 569, 'accessories/wearable_items/vanguard/common/medium/shoulders', 0), + (570, 570, 'accessories/wearable_items/vanguard/common/medium/left', 0), + (571, 571, 'accessories/wearable_items/vanguard/common/medium/right', 0), + (572, 572, 'accessories/wearable_items/vanguard/common/low/chest', 0), + (573, 573, 'accessories/wearable_items/vanguard/common/low/feet', 0), + (574, 574, 'accessories/wearable_items/vanguard/common/low/forearms', 0), + (575, 575, 'accessories/wearable_items/vanguard/common/low/hands', 0), + (576, 576, 'accessories/wearable_items/vanguard/common/low/head', 0), + (577, 577, 'accessories/wearable_items/vanguard/common/low/legs', 0), + (578, 578, 'accessories/wearable_items/vanguard/common/low/shoulders', 0), + (579, 579, 'accessories/wearable_items/vanguard/common/low/right', 0), + (580, 580, 'accessories/wearable_items/vanguard/common/low/left', 0), + (581, 581, 'accessories/wearable_items/vanguard/common/high/chest', 0), + (582, 582, 'accessories/wearable_items/vanguard/common/high/feet', 0), + (583, 583, 'accessories/wearable_items/vanguard/common/high/forearms', 0), + (584, 584, 'accessories/wearable_items/vanguard/common/high/hands', 0), + (585, 585, 'accessories/wearable_items/vanguard/common/high/head', 0), + (586, 586, 'accessories/wearable_items/vanguard/common/high/legs', 0), + (587, 587, 'accessories/wearable_items/vanguard/common/high/shoulders', 0), + (588, 588, 'accessories/wearable_items/vanguard/common/high/left', 0), + (589, 589, 'accessories/wearable_items/vanguard/common/high/right', 0), + (590, 590, 'accessories/wearable_items/_exp07/station_cash_armor/robe_wyrmskin/charcoal/collar', 1096), + (591, 591, 'accessories/wearable_items/_exp07/station_cash_armor/robe_wyrmskin/green/collar', 1096), + (592, 592, 'accessories/wearable_items/_exp07/station_cash_armor/robe_wyrmskin/red/collar', 1096), + (593, 593, 'staticobjects/promo_items/exp07_portalpaintings_wakeninglands', 1096), + (594, 594, 'staticobjects/promo_items/exp07_portalpaintings_nipikshaven', 1096), + (595, 595, 'staticobjects/promo_items/exp07_portalpaintings_ringwar', 1096), + (596, 596, 'staticobjects/promo_items/exp07_portalpaintings_thurgadin', 1096), + (597, 597, '_exp07/zones/exp07_dun_tower_of_frozen_shadow/doorknob', 1096), + (598, 598, 'accessories/wieldable_items/weapons/fist/monk_1h_glow_sun', 1096), + (599, 599, 'accessories/wieldable_items/weapons/exp07/1h_sword/goth_dagger_01_fx', 1096), + (600, 600, 'accessories/wieldable_items/weapons/exp07/shield/goth_shield_01_fx', 1096), + (601, 601, 'accessories/wearable_items/snapons/armbands/shoulders_armband_wyrm_wrap_right', 1096), + (602, 602, 'accessories/wearable_items/snapons/armbands/shoulders_armband_wyrm_wrap_both', 1096), + (603, 603, 'accessories/wearable_items/snapons/armbands/shoulders_armband_wyrm_wrap_left', 1096), + (604, 604, 'staticobjects/statues/dpo_menagerie_scrying_cube', 1096), + (605, 605, 'accessories/wieldable_items/shields/exp07/dragon_shield', 1096), + (606, 606, 'staticobjects/promo_items/exp07_tserrina_tofs_houseitem', 1096), + (607, 607, 'creatures/mounts/warhog_mount/warhog', 1096), + (608, 608, 'accessories/wieldable_items/weapons/exp07/shield/exp07_shield_kite_kraytok', 1096), + (609, 609, 'accessories/wieldable_items/weapons/exp07/shield/exp07_buckler_celestial', 1096), + (610, 610, 'accessories/wieldable_items/weapons/exp07/shield/exp07_shield_round_celestial', 1096), + (611, 611, 'accessories/wieldable_items/weapons/exp07/shield/exp07_shield_kite_diabolic', 1096), + (612, 612, 'accessories/wieldable_items/weapons/exp07/shield/exp07_buckler_diabolic', 1096), + (613, 613, 'accessories/wieldable_items/weapons/exp07/shield/exp07_shield_tower_diabolic', 1096), + (614, 614, 'accessories/wieldable_items/weapons/exp07/shield/exp07_shield_tower_arcane', 1096), + (615, 615, 'accessories/wieldable_items/weapons/exp07/shield/exp07_buckler_kraytok', 1096), + (616, 616, 'accessories/wieldable_items/weapons/exp07/shield/exp07_shield_cross_kraytok', 1096), + (617, 617, 'creatures/mounts/bear_mount_undead/bear_mount_undead', 1096), + (618, 618, 'creatures/mounts/warhog_mount/warhog_mount', 1096), + (619, 619, '_exp06/characters/tool_users/snow_orc/snow_orc_ghosts/snow_orc_ghost_shaman', 1096), + (620, 620, '_exp06/characters/tool_users/snow_orc/snow_orc_ghosts/snow_orc_ghost_chief', 1096), + (621, 621, '_exp06/characters/tool_users/snow_orc/snow_orc_ghosts/snow_orc_ghost_common01', 1096), + (622, 622, '_exp06/characters/tool_users/snow_orc/snow_orc_ghosts/snow_orc_ghost_common02', 1096), + (623, 623, '_exp06/characters/tool_users/snow_orc/snow_orc_ghosts/snow_orc_ghost_common03', 1096), + (624, 624, '_exp06/characters/tool_users/snow_orc/snow_orc_ghosts/snow_orc_ghost_common04', 1096), + (625, 625, '_exp06/characters/tool_users/snow_orc/snow_orc_ghosts/snow_orc_ghost_heavy01', 1096), + (626, 626, '_exp06/characters/tool_users/snow_orc/snow_orc_ghosts/snow_orc_ghost_heavy02', 1096), + (627, 627, '_exp06/characters/tool_users/snow_orc/snow_orc_ghosts/snow_orc_ghost_heavy03', 1096), + (628, 628, '_exp06/characters/tool_users/snow_orc/snow_orc_ghosts/snow_orc_ghost_hunter01', 1096), + (629, 629, '_exp06/characters/tool_users/snow_orc/snow_orc_ghosts/snow_orc_ghost_hunter02', 1096), + (630, 630, '_exp06/characters/tool_users/snow_orc/snow_orc_ghosts/snow_orc_ghost_hunter03', 1096), + (631, 631, 'creatures/mounts/warhog_mount/warhog_drunder', 1096), + (632, 632, '_exp07/characters/monsters/warhog/warhog_drunder', 1096), + (633, 633, '_exp07/characters/monsters/warhog/warhog', 1096), + (634, 634, 'creatures/mounts/horse_heavy/horse_stallion_ice', 1096), + (635, 635, 'accessories/wearable_items/tradesman/common/medium/arms', 0), + (636, 636, 'accessories/wearable_items/tradesman/common/medium/chest', 0), + (637, 637, 'accessories/wearable_items/tradesman/common/medium/legs', 0), + (638, 638, 'accessories/wearable_items/tradesman/common/low/arms', 0), + (639, 639, 'accessories/wearable_items/tradesman/common/low/chest', 0), + (640, 640, 'accessories/wearable_items/tradesman/common/low/legs', 0), + (641, 641, 'staticobjects/flora/dpo_ew_plant_red01', 1096), + (642, 642, 'staticobjects/flora/dpo_ew_plant_red02', 1096), + (643, 643, 'staticobjects/flora/dpo_ew_plant_red03', 1096), + (644, 644, 'staticobjects/flora/dpo_ew_plant_red04', 1096), + (645, 645, 'accessories/wieldable_items/weapons/exp07/1h_sword/exp07_1h_axe_pure_rage_pc', 1096), + (646, 646, 'creatures/mounts/griffin_mount/griffin_mount_red', 1096), + (647, 647, 'staticobjects/_exp07/kael/kd_ballista', 1096), + (648, 648, 'staticobjects/_exp07/kael/kd_banner_swinging_long', 1096), + (649, 649, 'staticobjects/_exp07/kael/kd_banner_swinging_shinvet', 1096), + (650, 650, 'staticobjects/_exp07/kael/kd_banner_swinging_shpoint', 1096), + (651, 651, 'staticobjects/_exp07/kael/kd_bar', 1096), + (652, 652, 'staticobjects/_exp07/kael/kd_barrel', 1096), + (653, 653, 'accessories/wearable_items/plate/uncommon/medium/chest', 0), + (654, 654, 'accessories/wearable_items/plate/uncommon/medium/feet', 0), + (655, 655, 'accessories/wearable_items/plate/uncommon/medium/forearms', 0), + (656, 656, 'accessories/wearable_items/plate/uncommon/medium/hands', 0), + (657, 657, 'accessories/wearable_items/plate/uncommon/medium/head', 0), + (658, 658, 'accessories/wearable_items/plate/uncommon/medium/legs', 0), + (659, 659, 'accessories/wearable_items/plate/uncommon/medium/shoulders', 0), + (660, 660, 'accessories/wearable_items/plate/uncommon/low/chest', 0), + (661, 661, 'accessories/wearable_items/plate/uncommon/low/feet', 0), + (662, 662, 'accessories/wearable_items/plate/uncommon/low/forearms', 0), + (663, 663, 'accessories/wearable_items/plate/uncommon/low/hands', 0), + (664, 664, 'accessories/wearable_items/plate/uncommon/low/head', 0), + (665, 665, 'accessories/wearable_items/plate/uncommon/low/legs', 0), + (666, 666, 'accessories/wearable_items/plate/uncommon/low/shoulders', 0), + (667, 667, 'staticobjects/_exp07/kael/kd_barrel_broken', 1096), + (668, 668, 'staticobjects/_exp07/kael/kd_bed_lrg', 1096), + (669, 669, 'staticobjects/_exp07/kael/kd_bed_sml', 1096), + (670, 670, 'staticobjects/_exp07/kael/kd_boiling_pot', 1096), + (671, 671, 'staticobjects/_exp07/kael/kd_bookcase', 1096), + (672, 672, 'staticobjects/_exp07/kael/kd_chair', 1096), + (673, 673, 'staticobjects/_exp07/kael/kd_chest_lrg', 1096), + (674, 674, 'staticobjects/_exp07/kael/kd_dragonbone_ancient', 1096), + (675, 675, 'staticobjects/_exp07/kael/kd_fence_link', 1096), + (676, 676, 'staticobjects/_exp07/kael/kd_fighting_ring', 1096), + (677, 677, 'staticobjects/_exp07/kael/kd_firebowl', 1096), + (678, 678, 'staticobjects/_exp07/kael/kd_forge_orc', 1096), + (679, 679, 'staticobjects/_exp07/kael/kd_fountain_sml', 1096), + (680, 680, 'staticobjects/_exp07/kael/kd_keg', 1096), + (681, 681, 'staticobjects/_exp07/kael/kd_mapboard', 1096), + (682, 682, 'staticobjects/_exp07/kael/kd_mug', 1096), + (683, 683, 'staticobjects/_exp07/kael/kd_podium', 1096), + (684, 684, 'staticobjects/_exp07/kael/kd_powerball', 1096), + (685, 685, 'staticobjects/_exp07/kael/kd_statue_tormax_point', 1096), + (686, 686, 'staticobjects/_exp07/kael/kd_statue_tormax_pose', 1096), + (687, 687, 'staticobjects/_exp07/kael/kd_statue_zek_crch', 1096), + (688, 688, 'accessories/wieldable_items/weapons/exp07/vampire_appearance/exp07_vampire_unarmed', 1096), + (689, 689, 'staticobjects/_exp07/kael/kd_statue_zek_half', 1096), + (690, 690, 'staticobjects/_exp07/kael/kd_statue_zek_stnd', 1096), + (691, 691, 'staticobjects/_exp07/kael/kd_swinging_hanglamp', 1096), + (692, 692, 'staticobjects/_exp07/kael/kd_table_sml', 1096), + (693, 693, 'staticobjects/_exp07/kael/kd_weapons_rack', 1096), + (694, 694, 'staticobjects/_exp07/orc/vel_island03_peltdoor01_nosnow', 1096), + (695, 695, 'accessories/wearable_items/plate/common/medium/chest', 0), + (696, 696, 'accessories/wearable_items/plate/common/medium/feet', 0), + (697, 697, 'accessories/wearable_items/plate/common/medium/forearms', 0), + (698, 698, 'accessories/wearable_items/plate/common/medium/hands', 0), + (699, 699, 'accessories/wearable_items/plate/common/medium/head', 0), + (700, 700, 'accessories/wearable_items/plate/common/medium/legs', 0), + (701, 701, 'accessories/wearable_items/plate/common/medium/shoulders', 0), + (702, 702, 'accessories/wearable_items/plate/common/low/chest', 0), + (703, 703, 'accessories/wearable_items/plate/common/low/feet', 0), + (704, 704, 'accessories/wearable_items/plate/common/low/forearms', 0), + (705, 705, 'accessories/wearable_items/plate/common/low/hands', 0), + (706, 706, 'accessories/wearable_items/plate/common/low/head', 0), + (707, 707, 'accessories/wearable_items/plate/common/low/legs', 0), + (708, 708, 'accessories/wearable_items/plate/common/low/shoulders', 0), + (709, 709, 'accessories/wearable_items/plate/common/high/chest', 0), + (710, 710, 'accessories/wearable_items/plate/common/high/feet', 0), + (711, 711, 'accessories/wearable_items/plate/common/high/forearms', 0), + (712, 712, 'accessories/wearable_items/plate/common/high/hands', 0), + (713, 713, 'accessories/wearable_items/plate/common/high/head', 0), + (714, 714, 'accessories/wearable_items/plate/common/high/legs', 0), + (715, 715, 'accessories/wearable_items/plate/common/high/shoulders', 0), + (716, 716, 'staticobjects/_exp07/orc/vel_orc_bench01', 1096), + (717, 717, 'staticobjects/_exp07/orc/vel_orc_camp_bear_trap_open', 1096), + (718, 718, 'staticobjects/_exp07/orc/vel_orc_camp_brazier01', 1096), + (719, 719, 'staticobjects/_exp07/orc/vel_orc_chair01', 1096), + (720, 720, 'staticobjects/_exp07/orc/vel_orc_chest_shoddy', 1096), + (721, 721, 'staticobjects/_exp07/orc/vel_orc_throne', 1096), + (722, 722, 'staticobjects/_exp07/orc/vel_orc_wheelbarrow_orc01', 1096), + (723, 723, 'staticobjects/_exp07/orc/vel_throne_orc01', 1096), + (724, 724, 'staticobjects/_exp07/othmir/dpo_exp07_1h_club_nipiks_cane', 1096), + (725, 725, 'staticobjects/_exp07/othmir/vel_iceclad_othmir_shell01_dpo', 1096), + (726, 726, 'staticobjects/_exp07/othmir/vel_othmir_basket01_nosnow', 1096), + (727, 727, 'staticobjects/_exp07/othmir/vel_othmir_basket02', 1096), + (728, 728, 'staticobjects/_exp07/othmir/vel_othmir_basket04', 1096), + (729, 729, 'staticobjects/_exp07/othmir/vel_othmir_basket04_shells_nosnow', 1096), + (730, 730, 'staticobjects/_exp07/othmir/vel_othmir_bed01_nosnow', 1096), + (731, 731, 'staticobjects/_exp07/othmir/vel_othmir_candle_holder01_dpo', 1096), + (732, 732, 'staticobjects/_exp07/othmir/vel_othmir_chair01_red', 1096), + (733, 733, 'staticobjects/_exp07/othmir/vel_othmir_chair01_woven', 1096), + (734, 734, 'staticobjects/_exp07/othmir/vel_othmir_crab_pot_floater02', 1096), + (735, 735, 'staticobjects/_exp07/othmir/vel_othmir_fish_rack01_nosnow', 1096), + (736, 736, 'staticobjects/_exp07/othmir/vel_othmir_fish_skeleton01', 1096), + (737, 737, 'accessories/wearable_items/magus/uncommon/medium/chest', 0), + (738, 738, 'staticobjects/_exp07/othmir/vel_othmir_floor_tray01', 1096), + (739, 739, 'accessories/wearable_items/magus/uncommon/medium/skirt', 0), + (740, 740, 'staticobjects/_exp07/othmir/vel_othmir_hanging_fish01', 1096), + (741, 741, 'accessories/wearable_items/magus/uncommon/medium/pants', 0), + (742, 742, 'staticobjects/_exp07/othmir/vel_othmir_lightsource01_nosnow', 1096), + (743, 743, 'accessories/wearable_items/magus/uncommon/low/chest', 0), + (744, 744, 'staticobjects/_exp07/othmir/vel_othmir_lightsource_hanging01_nosnow', 1096), + (745, 745, 'accessories/wearable_items/magus/uncommon/low/skirt', 0), + (746, 746, 'staticobjects/_exp07/othmir/vel_othmir_net_basket01_nosnow', 1096), + (747, 747, 'staticobjects/_exp07/othmir/vel_othmir_nipiks_memorial_01', 1096), + (748, 748, 'staticobjects/_exp07/othmir/vel_othmir_prexus_shrine_01_dpo', 1096), + (749, 749, 'accessories/wearable_items/magus/uncommon/high/chest', 0), + (750, 750, 'staticobjects/_exp07/othmir/vel_othmir_throne01_nosnow', 1096), + (751, 751, 'accessories/wearable_items/magus/uncommon/high/skirt', 0), + (752, 752, 'staticobjects/_exp07/snowfang/vel_iceclad_gnoll_banner01', 1096), + (753, 753, 'staticobjects/_exp07/snowfang/vel_iceclad_gnoll_chair01_nosnow', 1096), + (754, 754, 'accessories/wearable_items/magus/uncommon/high/pants', 0), + (755, 755, 'accessories/wearable_items/magus/rare/medium/chest', 0), + (756, 756, 'staticobjects/_exp07/snowfang/vel_iceclad_gnoll_dreamcatcher01_green_dpo', 1096), + (757, 757, 'staticobjects/_exp07/snowfang/vel_iceclad_shaman_drum01', 1096), + (758, 758, 'staticobjects/_exp07/snowfang/vel_iceclad_shaman_drum02', 1096), + (759, 759, 'accessories/wearable_items/magus/rare/medium/pants', 0), + (760, 760, 'staticobjects/_exp07/thurgadin/banner_thur_01_left', 1096), + (761, 761, 'accessories/wearable_items/magus/rare/low/chest', 0), + (762, 762, 'staticobjects/_exp07/thurgadin/banner_thur_01_right', 1096), + (763, 763, 'accessories/wearable_items/magus/rare/low/skirt', 0), + (764, 764, 'staticobjects/_exp07/thurgadin/banner_thur_02_left', 1096), + (765, 765, 'accessories/wearable_items/magus/rare/low/pants', 0), + (766, 766, 'accessories/wearable_items/magus/rare/low/hood', 0), + (767, 767, 'accessories/wearable_items/magus/rare/high/chest', 0), + (768, 768, 'staticobjects/_exp07/thurgadin/banner_thur_02_right', 1096), + (769, 769, 'accessories/wearable_items/magus/rare/high/skirt', 0), + (770, 770, 'staticobjects/_exp07/thurgadin/banner_thur_03_left', 1096), + (771, 771, 'accessories/wearable_items/magus/rare/high/pants', 0), + (772, 772, 'staticobjects/_exp07/thurgadin/banner_thur_03_right', 1096), + (773, 773, 'accessories/wearable_items/magus/common/medium/chest', 0), + (774, 774, 'staticobjects/_exp07/thurgadin/thur_blue_lamp_01', 1096), + (775, 775, 'accessories/wearable_items/magus/common/medium/skirt', 0), + (776, 776, 'staticobjects/_exp07/thurgadin/thur_chair_01', 1096), + (777, 777, 'staticobjects/_exp07/thurgadin/thur_chair_02', 1096), + (778, 778, 'staticobjects/_exp07/thurgadin/thur_chair_03', 1096), + (779, 779, 'accessories/wearable_items/magus/common/medium/hood', 0), + (780, 780, 'accessories/wearable_items/magus/common/medium/pants', 0), + (781, 781, 'staticobjects/_exp07/thurgadin/thur_table_01', 1096), + (782, 782, 'accessories/wearable_items/magus/common/low/chest', 0), + (783, 783, 'accessories/wearable_items/magus/common/low/skirt', 0), + (784, 784, 'staticobjects/_exp07/thurgadin/thur_table_02', 1096), + (785, 785, 'staticobjects/_exp07/thurgadin/thur_table_03', 1096), + (786, 786, 'staticobjects/_exp07/thurgadin/thur_table_04', 1096), + (787, 787, 'staticobjects/_exp07/thurgadin/torch_single_blue_fire_01', 1096), + (788, 788, 'accessories/wearable_items/_exp07/deepwater_knight/robe/skirt', 1096), + (789, 789, 'accessories/wearable_items/_exp07/deepwater_knight/robe/chest', 1096), + (790, 790, 'accessories/wearable_items/magus/common/low/pants', 0), + (791, 791, 'accessories/wearable_items/magus/common/low/hood', 0), + (792, 792, 'accessories/wearable_items/_exp07/deepwater_knight/robe/epic_pauldron_left', 1096), + (793, 793, 'accessories/wearable_items/magus/common/high/skirt', 0), + (794, 794, 'accessories/wearable_items/_exp07/deepwater_knight/robe/epic_pauldron_right', 1096), + (795, 795, 'accessories/wearable_items/magus/common/high/chest', 0), + (796, 796, 'accessories/wearable_items/_exp07/deepwater_knight/robe/feet', 1096), + (797, 797, 'accessories/wearable_items/magus/common/high/pants', 0), + (798, 798, 'accessories/wearable_items/_exp07/deepwater_knight/robe/hands', 1096), + (799, 799, 'accessories/wearable_items/magus/artifact/medium/chest', 0), + (800, 800, 'accessories/wearable_items/_exp07/deepwater_knight/robe/head', 1096), + (801, 801, 'accessories/wearable_items/magus/artifact/medium/skirt', 0), + (802, 802, 'accessories/wearable_items/_exp07/deepwater_knight/robe/head_collar', 1096), + (803, 803, 'accessories/wearable_items/magus/artifact/low/chest', 0), + (804, 804, 'accessories/wearable_items/_exp07/deepwater_knight/robe/head_epic', 1096), + (805, 805, 'accessories/wearable_items/magus/artifact/low/skirt', 0), + (806, 806, 'accessories/wearable_items/_exp07/deepwater_knight/robe/pants', 1096), + (807, 807, 'accessories/wearable_items/magus/artifact/high/chest', 0), + (808, 808, 'accessories/wearable_items/_exp07/deepwater_knight/robe/pauldron_left', 1096), + (809, 809, 'accessories/wearable_items/magus/artifact/high/skirt', 0), + (810, 810, 'accessories/wearable_items/_exp07/deepwater_knight/robe/pauldron_right', 1096), + (811, 811, 'accessories/wearable_items/chain/uncommon/medium/chest', 0), + (812, 812, 'accessories/wearable_items/chain/uncommon/medium/feet', 0), + (813, 813, 'accessories/wearable_items/chain/uncommon/medium/forearms', 0), + (814, 814, 'accessories/wearable_items/chain/uncommon/medium/hands', 0), + (815, 815, 'accessories/wearable_items/chain/uncommon/medium/head', 0), + (816, 816, 'accessories/wearable_items/chain/uncommon/medium/legs', 0), + (817, 817, 'accessories/wearable_items/chain/uncommon/medium/shoulders', 0), + (818, 818, 'accessories/wearable_items/chain/uncommon/medium/skirt', 0), + (819, 819, 'accessories/wearable_items/chain/uncommon/low/chest', 0), + (820, 820, 'accessories/wearable_items/chain/uncommon/low/feet', 0), + (821, 821, 'accessories/wearable_items/chain/uncommon/low/forearms', 0), + (822, 822, 'accessories/wearable_items/chain/uncommon/low/hands', 0), + (823, 823, 'accessories/wearable_items/chain/uncommon/low/head', 0), + (824, 824, 'accessories/wearable_items/chain/uncommon/low/legs', 0), + (825, 825, 'accessories/wearable_items/chain/uncommon/low/shoulders', 0), + (826, 826, 'staticobjects/_exp07/kael/kd_table_lrg', 1096), + (827, 827, 'staticobjects/_exp07/velks/exp07_dun_velkslab_fortress_messhall01_tablepart01_chair01_big01_dpo', 1096), + (828, 828, 'staticobjects/_exp07/velks/exp07_dun_velks_forgotten_pools_hallway03_light01_dpo', 1096), + (829, 829, 'staticobjects/_exp07/velks/exp07_dun_velks_forgotten_pools_pod01', 1096), + (830, 830, 'staticobjects/_exp07/velks/exp07_dun_velks_forgotten_pools_shapery01_plant01_blue01', 1096), + (831, 831, 'staticobjects/_exp07/velks/exp07_dun_velks_forgotten_pools_shapery01_plant01_red01', 1096), + (832, 832, 'staticobjects/_exp07/velks/exp07_dun_velkslab_fortress_banner05_single01', 1096), + (833, 833, 'staticobjects/_exp07/velks/exp07_dun_velkslab_fortress_banner06_single01', 1096), + (834, 834, 'creatures/monsters/bat_crystal_cave_green', 1096), + (835, 835, 'creatures/monsters/bat_crystal_cave_blue', 1096), + (836, 836, '_exp07/characters/tool_users/othmir/othmir_male_speaker_osh', 1096), + (837, 837, '_exp07/characters/tool_users/othmir/othmir_female_peasent_03_spotted', 1096), + (838, 838, '_exp07/characters/tool_users/othmir/othmir_female_peasent_04_dark_blue', 1096), + (839, 839, '_exp07/characters/tool_users/othmir/othmir_male_chief', 1096), + (840, 840, 'accessories/wearable_items/snapons/backpacks/crossblades', 1096), + (841, 841, 'accessories/wieldable_items/weapons/staff/djinn_staff/djinn_staff_blue', 1096), + (842, 842, 'creatures/mounts/flying_disc/gnome_racemount01', 1096), + (843, 843, 'staticobjects/_exp07/exp07_rgn_eastern_wastes/vel_rock_cave_small01_glow01', 1096), + (844, 844, 'staticobjects/_exp07/exp07_rgn_eastern_wastes/vel_rock_cave_small01_glow02', 1096), + (845, 845, 'staticobjects/_exp07/exp07_rgn_eastern_wastes/vel_rock_cave_small02_glow01', 1096), + (846, 846, 'staticobjects/_exp07/exp07_rgn_eastern_wastes/vel_rock_cave_small02_glow02', 1096), + (847, 847, 'staticobjects/containers/slove_basket01_pom01', 1096), + (848, 848, 'staticobjects/books/cm_book01', 1096), + (849, 849, 'staticobjects/books/cm_book02', 1096), + (850, 850, 'staticobjects/chairs/cm_chair_dining01', 1096), + (851, 851, 'staticobjects/chairs/cm_chair_dining02', 1096), + (852, 852, 'staticobjects/tables/cm_table_coffee01', 1096), + (853, 853, 'staticobjects/bottles/sen_potions03', 1096), + (854, 854, 'staticobjects/liveevent/erollisi_objects/errolisi_yellowroses_fatcandle_white', 1096), + (855, 855, 'staticobjects/liveevent/erollisi_objects/errolisi_redroses_fatcandle_white', 1096), + (856, 856, 'staticobjects/liveevent/erollisi_objects/errolisi_purpleroses_fatcandle_white', 1096), + (857, 857, 'staticobjects/liveevent/erollisi_objects/errolisi_pinkroses_fatcandle_white', 1096), + (858, 858, 'staticobjects/liveevent/erollisi_objects/errolisi_wood_gazebo_pfx', 1096), + (859, 859, 'accessories/wearable_items/chain/common/medium/chest', 0), + (860, 860, 'accessories/wearable_items/chain/common/medium/feet', 0), + (861, 861, 'accessories/wearable_items/chain/common/medium/forearms', 0), + (862, 862, 'accessories/wearable_items/chain/common/medium/hands', 0), + (863, 863, 'accessories/wearable_items/chain/common/medium/head', 0), + (864, 864, 'accessories/wearable_items/chain/common/medium/legs', 0), + (865, 865, 'accessories/wearable_items/chain/common/medium/shoulders', 0), + (866, 866, 'staticobjects/liveevent/erollisi_objects/sen_divider_01_purple', 1096), + (867, 867, 'accessories/wearable_items/chain/common/low/chest', 0), + (868, 868, 'accessories/wearable_items/chain/common/low/feet', 0), + (869, 869, 'accessories/wearable_items/chain/common/low/forearms', 0), + (870, 870, 'accessories/wearable_items/chain/common/low/hands', 0), + (871, 871, 'accessories/wearable_items/chain/common/low/head', 0), + (872, 872, 'accessories/wearable_items/chain/common/low/legs', 0), + (873, 873, 'accessories/wearable_items/chain/common/low/shoulders', 0), + (874, 874, 'accessories/wearable_items/profesion_hats/firiona_vie_tiara_lon/head_firiona_vie_tiara_lon', 1096), + (875, 875, 'accessories/wearable_items/chain/common/high/chest', 0), + (876, 876, 'accessories/wearable_items/chain/common/high/feet', 0), + (877, 877, 'accessories/wearable_items/chain/common/high/forearms', 0), + (878, 878, 'accessories/wearable_items/chain/common/high/hands', 0), + (879, 879, 'accessories/wearable_items/chain/common/high/head', 0), + (880, 880, 'accessories/wearable_items/chain/common/high/legs', 0), + (881, 881, 'accessories/wearable_items/chain/common/high/shoulders', 0), + (882, 882, 'accessories/wearable_items/_exp07/robe_darkmetal/skirt', 1096), + (883, 883, 'accessories/wearable_items/_exp07/robe_darkmetal/chest', 1096), + (884, 884, 'accessories/wearable_items/_exp07/robe_darkmetal/feet', 1096), + (885, 885, 'staticobjects/_exp07/velious/ew_bush_purp', 1096), + (886, 886, 'staticobjects/_exp07/velious/ew_dead_stump_01', 1096), + (887, 887, 'staticobjects/_exp07/velious/ew_grass01', 1096), + (888, 888, 'staticobjects/_exp07/velious/ew_rotted_tree', 1096), + (889, 889, 'staticobjects/_exp07/velious/ew_shell_nautilus01_dpo', 1096), + (890, 890, 'staticobjects/_exp07/velious/goahmari_village_light01_nosnow01', 1096), + (891, 891, 'staticobjects/_exp07/velious/vel_lightsource_lantern01_swinging', 1096), + (892, 892, 'staticobjects/_exp07/velious/vel_rime_banner01_snow01', 1096), + (893, 893, 'accessories/wearable_items/_exp07/robe_darkmetal/hands', 1096), + (894, 894, 'accessories/wearable_items/_exp07/robe_darkmetal/head', 1096), + (895, 895, 'accessories/wearable_items/_exp07/robe_darkmetal/head_collar', 1096), + (896, 896, 'accessories/wearable_items/_exp07/robe_darkmetal/pants', 1096), + (897, 897, 'staticobjects/guildhall/trophies/floor_kraytoc', 1096), + (898, 898, 'staticobjects/guildhall/trophies/floor_king_tormax', 1096), + (899, 899, 'staticobjects/guildhall/trophies/floor_statue_of_rallos_zek', 1096), + (900, 900, 'staticobjects/_exp07/kael/kd_chair_grand', 1096), + (901, 901, 'staticobjects/_exp07/tizmak/vel_iceclad_gnoll_chair01_nosnow', 1096), + (902, 902, 'staticobjects/_exp07/tizmak/vel_iceclad_lantern01', 1096), + (903, 903, 'staticobjects/_exp07/tizmak/vel_lightsource_lantern01_swinging', 1096), + (904, 904, 'staticobjects/_exp07/tizmak/vel_tizmak_items01_barrel01', 1096), + (905, 905, 'staticobjects/_exp07/tizmak/vel_tizmak_items01_bed01', 1096), + (906, 906, 'staticobjects/_exp07/tizmak/vel_tizmak_items01_bench01', 1096), + (907, 907, 'accessories/wearable_items/brigandine/uncommon/medium/chest', 0), + (908, 908, 'accessories/wearable_items/brigandine/uncommon/medium/feet', 0), + (909, 909, 'accessories/wearable_items/brigandine/uncommon/medium/forearms', 0), + (910, 910, 'accessories/wearable_items/brigandine/uncommon/medium/hands', 0), + (911, 911, 'accessories/wearable_items/brigandine/uncommon/medium/head', 0), + (912, 912, 'accessories/wearable_items/brigandine/uncommon/medium/legs', 0), + (913, 913, 'accessories/wearable_items/brigandine/uncommon/medium/shoulders', 0), + (914, 914, 'accessories/wearable_items/brigandine/uncommon/low/chest', 0), + (915, 915, 'accessories/wearable_items/brigandine/uncommon/low/feet', 0), + (916, 916, 'accessories/wearable_items/brigandine/uncommon/low/forearms', 0), + (917, 917, 'accessories/wearable_items/brigandine/uncommon/low/hands', 0), + (918, 918, 'accessories/wearable_items/brigandine/uncommon/low/head', 0), + (919, 919, 'accessories/wearable_items/brigandine/uncommon/low/legs', 0), + (920, 920, 'accessories/wearable_items/brigandine/uncommon/low/shoulders', 0), + (921, 921, 'accessories/wearable_items/brigandine/uncommon/high/chest', 0), + (922, 922, 'accessories/wearable_items/brigandine/uncommon/high/feet', 0), + (923, 923, 'accessories/wearable_items/brigandine/uncommon/high/forearms', 0), + (924, 924, 'accessories/wearable_items/brigandine/uncommon/high/hands', 0), + (925, 925, 'accessories/wearable_items/brigandine/uncommon/high/head', 0), + (926, 926, 'accessories/wearable_items/brigandine/uncommon/high/legs', 0), + (927, 927, 'accessories/wearable_items/brigandine/uncommon/high/shoulders', 0), + (928, 928, 'accessories/wearable_items/brigandine/rare/medium/chest', 0), + (929, 929, 'accessories/wearable_items/brigandine/rare/medium/feet', 0), + (930, 930, 'accessories/wearable_items/brigandine/rare/medium/forearms', 0), + (931, 931, 'accessories/wearable_items/brigandine/rare/medium/hands', 0), + (932, 932, 'accessories/wearable_items/brigandine/rare/medium/head', 0), + (933, 933, 'accessories/wearable_items/brigandine/rare/medium/legs', 0), + (934, 934, 'accessories/wearable_items/brigandine/rare/medium/shoulders', 0), + (935, 935, 'accessories/wearable_items/brigandine/rare/low/chest', 0), + (936, 936, 'accessories/wearable_items/brigandine/rare/low/feet', 0), + (937, 937, 'accessories/wearable_items/brigandine/rare/low/forearms', 0), + (938, 938, 'accessories/wearable_items/brigandine/rare/low/hands', 0), + (939, 939, 'accessories/wearable_items/brigandine/rare/low/head', 0), + (940, 940, 'accessories/wearable_items/brigandine/rare/low/legs', 0), + (941, 941, 'accessories/wearable_items/brigandine/rare/low/shoulders', 0), + (942, 942, 'accessories/wearable_items/brigandine/rare/high/chest', 0), + (943, 943, 'accessories/wearable_items/brigandine/rare/high/feet', 0), + (944, 944, 'accessories/wearable_items/brigandine/rare/high/forearms', 0), + (945, 945, 'accessories/wearable_items/brigandine/rare/high/hands', 0), + (946, 946, 'accessories/wearable_items/brigandine/rare/high/head', 0), + (947, 947, 'accessories/wearable_items/brigandine/rare/high/legs', 0), + (948, 948, 'accessories/wearable_items/brigandine/rare/high/shoulders', 0), + (949, 949, 'accessories/wearable_items/brigandine/common/medium/chest', 0), + (950, 950, 'accessories/wearable_items/brigandine/common/medium/feet', 0), + (951, 951, 'accessories/wearable_items/brigandine/common/medium/forearms', 0), + (952, 952, 'accessories/wearable_items/brigandine/common/medium/hands', 0), + (953, 953, 'accessories/wearable_items/brigandine/common/medium/head', 0), + (954, 954, 'accessories/wearable_items/brigandine/common/medium/legs', 0), + (955, 955, 'accessories/wearable_items/brigandine/common/medium/shoulders', 0), + (956, 956, 'accessories/wearable_items/brigandine/common/low/chest', 0), + (957, 957, 'accessories/wearable_items/brigandine/common/low/feet', 0), + (958, 958, 'accessories/wearable_items/brigandine/common/low/forearms', 0), + (959, 959, 'accessories/wearable_items/brigandine/common/low/hands', 0), + (960, 960, 'accessories/wearable_items/brigandine/common/low/head', 0), + (961, 961, 'accessories/wearable_items/brigandine/common/low/legs', 0), + (962, 962, 'accessories/wearable_items/brigandine/common/low/shoulders', 0), + (963, 963, 'accessories/wearable_items/brigandine/common/high/chest', 0), + (964, 964, 'accessories/wearable_items/brigandine/common/high/feet', 0), + (965, 965, 'accessories/wearable_items/brigandine/common/high/forearms', 0), + (966, 966, 'accessories/wearable_items/brigandine/common/high/hands', 0), + (967, 967, 'accessories/wearable_items/brigandine/common/high/head', 0), + (968, 968, 'accessories/wearable_items/brigandine/common/high/legs', 0), + (969, 969, 'accessories/wearable_items/brigandine/common/high/shoulders', 0), + (970, 970, 'staticobjects/_exp07/tizmak/vel_tizmak_items01_brazier01', 1096), + (971, 971, 'staticobjects/_exp07/tizmak/vel_tizmak_items01_chair01', 1096), + (972, 972, 'staticobjects/_exp07/tizmak/vel_tizmak_items01_drum01', 1096), + (973, 973, 'staticobjects/_exp07/tizmak/vel_tizmak_items01_light01', 1096), + (974, 974, 'staticobjects/_exp07/tizmak/vel_tizmak_items01_marker01', 1096), + (975, 975, 'staticobjects/_exp07/tizmak/vel_tizmak_items01_marker02', 1096), + (976, 976, 'staticobjects/_exp07/tizmak/vel_tizmak_items01_partition01', 1096), + (977, 977, 'accessories/wearable_items/brigandine/artifact/low/chest', 0), + (978, 978, 'accessories/wearable_items/brigandine/artifact/low/feet', 0), + (979, 979, 'accessories/wearable_items/brigandine/artifact/low/forearms', 0), + (980, 980, 'accessories/wearable_items/brigandine/artifact/low/hands', 0), + (981, 981, 'accessories/wearable_items/brigandine/artifact/low/head', 0), + (982, 982, 'accessories/wearable_items/brigandine/artifact/low/legs', 0), + (983, 983, 'accessories/wearable_items/brigandine/artifact/low/shoulders', 0), + (984, 984, 'staticobjects/_exp07/tizmak/vel_tizmak_items01_walllight01', 1096), + (985, 985, 'creatures/mounts/griffin_mount/griffin_mount_green', 1096), + (986, 986, 'creatures/mounts/griffin_mount/griffin_mount_black_evil', 1096), + (987, 987, 'staticobjects/_exp07/orc/vel_orc_lightsource_wall_sconce02', 1096), + (988, 988, 'staticobjects/_exp07/othmir/vel_othmir_bucket01_fish', 1096), + (989, 989, 'staticobjects/_exp07/othmir/vel_othmir_basket01_shells', 1096), + (990, 990, 'creatures/mounts/griffin_mount/griffin_mount_arctic', 1096), + (991, 991, 'accessories/wearable_items/leather/uncommon/medium/chest', 0), + (992, 992, 'accessories/wearable_items/leather/uncommon/medium/feet', 0), + (993, 993, 'accessories/wearable_items/leather/uncommon/medium/forearms', 0), + (994, 994, 'accessories/wearable_items/leather/uncommon/medium/hands', 0), + (995, 995, 'accessories/wearable_items/leather/uncommon/medium/head', 0), + (996, 996, 'accessories/wearable_items/leather/uncommon/medium/legs', 0), + (997, 997, 'accessories/wearable_items/leather/uncommon/medium/shoulders', 0), + (998, 998, 'accessories/wearable_items/leather/uncommon/medium/skirt', 0), + (999, 999, 'accessories/wearable_items/leather/uncommon/low/chest', 0), + (1000, 1000, 'accessories/wearable_items/leather/uncommon/low/feet', 0), + (1001, 1001, 'accessories/wearable_items/leather/uncommon/low/forearms', 0), + (1002, 1002, 'accessories/wearable_items/leather/uncommon/low/hands', 0), + (1003, 1003, 'accessories/wearable_items/leather/uncommon/low/head', 0), + (1004, 1004, 'accessories/wearable_items/leather/uncommon/low/legs', 0), + (1005, 1005, 'accessories/wearable_items/leather/uncommon/low/shoulders', 0), + (1006, 1006, 'accessories/wearable_items/leather/uncommon/low/skirt', 0), + (1007, 1007, 'accessories/wearable_items/leather/uncommon/high/chest', 0), + (1008, 1008, 'accessories/wearable_items/leather/uncommon/high/feet', 0), + (1009, 1009, 'accessories/wearable_items/leather/uncommon/high/forearms', 0), + (1010, 1010, 'accessories/wearable_items/leather/uncommon/high/hands', 0), + (1011, 1011, 'accessories/wearable_items/leather/uncommon/high/head', 0), + (1012, 1012, 'accessories/wearable_items/leather/uncommon/high/legs', 0), + (1013, 1013, 'accessories/wearable_items/leather/uncommon/high/shoulders', 0), + (1014, 1014, 'accessories/wearable_items/leather/uncommon/high/skirt', 0), + (1015, 1015, 'accessories/wearable_items/leather/rare/medium/chest', 0), + (1016, 1016, 'accessories/wearable_items/leather/rare/medium/feet', 0), + (1017, 1017, 'accessories/wearable_items/leather/rare/medium/forearms', 0), + (1018, 1018, 'accessories/wearable_items/leather/rare/medium/hands', 0), + (1019, 1019, 'accessories/wearable_items/leather/rare/medium/head', 0), + (1020, 1020, 'accessories/wearable_items/leather/rare/medium/legs', 0), + (1021, 1021, 'accessories/wearable_items/leather/rare/medium/shoulders', 0), + (1022, 1022, 'staticobjects/_exp07/velks/exp07_dun_velkslab_fortress_banner07_single01', 1096), + (1023, 1023, 'accessories/wearable_items/leather/rare/low/chest', 0), + (1024, 1024, 'accessories/wearable_items/leather/rare/low/feet', 0), + (1025, 1025, 'accessories/wearable_items/leather/rare/low/forearms', 0), + (1026, 1026, 'accessories/wearable_items/leather/rare/low/hands', 0), + (1027, 1027, 'accessories/wearable_items/leather/rare/low/head', 0), + (1028, 1028, 'accessories/wearable_items/leather/rare/low/legs', 0), + (1029, 1029, 'accessories/wearable_items/leather/rare/low/shoulders', 0), + (1030, 1030, 'staticobjects/_exp07/othmir/vel_iceclad_othmir_shell01_dpo', 1096), + (1031, 1031, 'accessories/wearable_items/leather/rare/high/chest', 0), + (1032, 1032, 'accessories/wearable_items/leather/rare/high/feet', 0), + (1033, 1033, 'accessories/wearable_items/leather/rare/high/forearms', 0), + (1034, 1034, 'accessories/wearable_items/leather/rare/high/hands', 0), + (1035, 1035, 'accessories/wearable_items/leather/rare/high/head', 0), + (1036, 1036, 'accessories/wearable_items/leather/rare/high/legs', 0), + (1037, 1037, 'accessories/wearable_items/leather/rare/high/shoulders', 0), + (1038, 1038, 'staticobjects/_exp07/velks/exp07_dun_velkslab_fortress_chandelier01', 1096), + (1039, 1039, 'accessories/wearable_items/leather/artifact/medium/chest', 0), + (1040, 1040, 'accessories/wearable_items/leather/artifact/medium/feet', 0), + (1041, 1041, 'accessories/wearable_items/leather/artifact/medium/forearms', 0), + (1042, 1042, 'accessories/wearable_items/leather/artifact/medium/hands', 0), + (1043, 1043, 'accessories/wearable_items/leather/artifact/medium/head', 0), + (1044, 1044, 'accessories/wearable_items/leather/artifact/medium/legs', 0), + (1045, 1045, 'accessories/wearable_items/leather/artifact/medium/shoulders', 0), + (1046, 1046, 'accessories/wearable_items/leather/artifact/medium/skirt', 0), + (1047, 1047, 'accessories/wearable_items/leather/artifact/low/chest', 0), + (1048, 1048, 'accessories/wearable_items/leather/artifact/low/feet', 0), + (1049, 1049, 'accessories/wearable_items/leather/artifact/low/forearms', 0), + (1050, 1050, 'accessories/wearable_items/leather/artifact/low/hands', 0), + (1051, 1051, 'accessories/wearable_items/leather/artifact/low/head', 0), + (1052, 1052, 'accessories/wearable_items/leather/artifact/low/legs', 0), + (1053, 1053, 'accessories/wearable_items/leather/artifact/low/shoulders', 0), + (1054, 1054, 'accessories/wearable_items/leather/artifact/low/skirt', 0), + (1055, 1055, 'accessories/wearable_items/leather/artifact/high/chest', 0), + (1056, 1056, 'accessories/wearable_items/leather/artifact/high/feet', 0), + (1057, 1057, 'accessories/wearable_items/leather/artifact/high/forearms', 0), + (1058, 1058, 'accessories/wearable_items/leather/artifact/high/hands', 0), + (1059, 1059, 'accessories/wearable_items/leather/artifact/high/head', 0), + (1060, 1060, 'accessories/wearable_items/leather/artifact/high/legs', 0), + (1061, 1061, 'accessories/wearable_items/leather/artifact/high/shoulders', 0), + (1062, 1062, 'staticobjects/_exp07/velks/exp07_dun_velkslab_fortress_banner08_single01', 1096), + (1063, 1063, 'accessories/wearable_items/leather/common/high/chest', 0), + (1064, 1064, 'accessories/wearable_items/leather/common/high/feet', 0), + (1065, 1065, 'accessories/wearable_items/leather/common/high/forearms', 0), + (1066, 1066, 'accessories/wearable_items/leather/common/high/hands', 0), + (1067, 1067, 'accessories/wearable_items/leather/common/high/head', 0), + (1068, 1068, 'accessories/wearable_items/leather/common/high/legs', 0), + (1069, 1069, 'accessories/wearable_items/leather/common/high/shoulders', 0), + (1070, 1070, 'accessories/wearable_items/leather/common/high/skirt', 0), + (1071, 1071, 'accessories/wearable_items/leather/common/medium/chest', 0), + (1072, 1072, 'accessories/wearable_items/leather/common/medium/feet', 0), + (1073, 1073, 'accessories/wearable_items/leather/common/medium/forearms', 0), + (1074, 1074, 'accessories/wearable_items/leather/common/medium/hands', 0), + (1075, 1075, 'accessories/wearable_items/leather/common/medium/head', 0), + (1076, 1076, 'accessories/wearable_items/leather/common/medium/legs', 0), + (1077, 1077, 'accessories/wearable_items/leather/common/medium/shoulders', 0), + (1078, 1078, 'accessories/wearable_items/leather/common/medium/skirt', 0), + (1079, 1079, 'accessories/wearable_items/leather/common/low/chest', 0), + (1080, 1080, 'accessories/wearable_items/leather/common/low/feet', 0), + (1081, 1081, 'accessories/wearable_items/leather/common/low/forearms', 0), + (1082, 1082, 'accessories/wearable_items/leather/common/low/hands', 0), + (1083, 1083, 'accessories/wearable_items/leather/common/low/head', 0), + (1084, 1084, 'accessories/wearable_items/leather/common/low/legs', 0), + (1085, 1085, 'accessories/wearable_items/leather/common/low/shoulders', 0), + (1086, 1086, 'accessories/wearable_items/leather/common/low/skirt', 0), + (1087, 1087, 'staticobjects/_exp07/tofs/tfs_table_glass_cathedral02_with_runner_dpo', 1096), + (1088, 1088, 'staticobjects/_exp07/tofs/tfs_floor05_tserrina_statue_pedestal01', 1096), + (1089, 1089, 'staticobjects/_exp07/tofs/tofs_statue_tserrina_cathedral01', 1096), + (1090, 1090, 'staticobjects/_exp07/tofs/tfs_banner_military_01', 1096), + (1091, 1091, 'staticobjects/_exp07/tofs/tfs_banner_military_01_wide', 1096), + (1092, 1092, 'staticobjects/_exp07/tofs/tfs_banner_military_02', 1096), + (1093, 1093, 'staticobjects/_exp07/tofs/tfs_bed_bunk_01', 1096), + (1094, 1094, 'staticobjects/_exp07/tofs/tfs_bed_maid01', 1096), + (1095, 1095, 'staticobjects/_exp07/tofs/tfs_bed_officer01', 1096), + (1096, 1096, 'staticobjects/_exp07/tofs/tfs_bed_twin01', 1096), + (1097, 1097, 'staticobjects/_exp07/tofs/tfs_bench_blue01', 1096), + (1098, 1098, 'staticobjects/_exp07/tofs/tfs_bench_maroon01', 1096), + (1099, 1099, 'staticobjects/_exp07/tofs/tfs_bench_military01', 1096), + (1100, 1100, 'staticobjects/_exp07/tofs/tfs_bench_military02', 1096), + (1101, 1101, 'staticobjects/_exp07/tofs/tfs_bookcase_low01', 1096), + (1102, 1102, 'staticobjects/_exp07/tofs/tfs_bookcase_low01_empty', 1096), + (1103, 1103, 'staticobjects/_exp07/tofs/tfs_bookcase_tall01', 1096), + (1104, 1104, 'staticobjects/_exp07/tofs/tfs_bookcase_tall01_empty', 1096), + (1105, 1105, 'staticobjects/_exp07/tofs/tfs_books_single01', 1096), + (1106, 1106, 'staticobjects/_exp07/tofs/tfs_books_single_ornate01', 1096), + (1107, 1107, 'staticobjects/_exp07/tofs/tfs_chair_blue01', 1096), + (1108, 1108, 'staticobjects/_exp07/tofs/tfs_chair_red01', 1096), + (1109, 1109, 'staticobjects/_exp07/tofs/tfs_coffin01', 1096), + (1110, 1110, 'staticobjects/_exp07/tofs/tfs_couch_blue01', 1096), + (1111, 1111, 'staticobjects/_exp07/tofs/tfs_couch_red01', 1096), + (1112, 1112, 'staticobjects/_exp07/tofs/tfs_desk_military01', 1096), + (1113, 1113, 'accessories/hair/hair000', 0), + (1114, 1114, 'accessories/hair/hair019', 0), + (1115, 1115, 'accessories/hair/hair018', 0), + (1116, 1116, 'accessories/hair/hair020', 0), + (1117, 1117, 'staticobjects/_exp07/tofs/tfs_floor01_lightsource_wall01', 1096), + (1118, 1118, 'staticobjects/_exp07/tofs/tfs_floor03_lightsource_chandelier01', 1096), + (1119, 1119, 'accessories/hair/hair021', 0), + (1120, 1120, 'accessories/hair/hair022', 0), + (1121, 1121, 'accessories/hair/hair024', 0), + (1122, 1122, 'accessories/hair/hair025', 0), + (1123, 1123, 'accessories/hair/hair023', 0), + (1124, 1124, 'accessories/hair/hair013', 0), + (1125, 1125, 'accessories/hair/hair012', 0), + (1126, 1126, 'accessories/hair/hair011', 0), + (1127, 1127, 'accessories/hair/hair010', 0), + (1128, 1128, 'accessories/hair/hair009', 0), + (1129, 1129, 'accessories/hair/hair014', 0), + (1130, 1130, 'accessories/hair/hair015', 0), + (1131, 1131, 'accessories/hair/hair016', 0), + (1132, 1132, 'accessories/hair/hair017', 0), + (1133, 1133, 'accessories/hair/hair001', 0), + (1134, 1134, 'accessories/hair/hair007', 0), + (1135, 1135, 'accessories/hair/hair008', 0), + (1136, 1136, 'accessories/hair/hair002', 0), + (1137, 1137, 'accessories/hair/hair003', 0), + (1138, 1138, 'accessories/hair/hair004', 0), + (1139, 1139, 'accessories/hair/hair005', 0), + (1140, 1140, 'accessories/hair/hair006', 0), + (1141, 1141, 'staticobjects/_exp07/tofs/tfs_floor03_lightsource_wall01', 1096), + (1142, 1142, 'staticobjects/_exp07/tofs/tfs_floor04_coffin_rest01', 1096), + (1143, 1143, 'staticobjects/_exp07/tofs/tfs_floor04_lightsource_floortorch01', 1096), + (1144, 1144, 'staticobjects/_exp07/tofs/tfs_floor04_lightsource_wall01', 1096), + (1145, 1145, 'staticobjects/_exp07/tofs/tfs_floor04_podium01', 1096), + (1146, 1146, 'staticobjects/_exp07/tofs/tfs_floor05_cake_pedestal01', 1096), + (1147, 1147, 'staticobjects/_exp07/tofs/tfs_floor05_lightsource_floor01', 1096), + (1148, 1148, 'staticobjects/_exp07/tofs/tfs_floor06_mirror_floating', 1096), + (1149, 1149, 'staticobjects/_exp07/tofs/tfs_floor07_lightsource_chandelier01', 1096), + (1150, 1150, 'staticobjects/_exp07/tofs/tfs_floor07_lightsource_floor01', 1096), + (1151, 1151, 'staticobjects/_exp07/tofs/tfs_floor07_lightsource_wall01', 1096), + (1152, 1152, 'staticobjects/_exp07/tofs/tfs_kitchen_chalice_blood02', 1096), + (1153, 1153, 'staticobjects/_exp07/tofs/tfs_mirror_boss01', 1096), + (1154, 1154, 'staticobjects/_exp07/tofs/tfs_painting_mayong01', 1096), + (1155, 1155, 'staticobjects/_exp07/tofs/tfs_piano_open01', 1096), + (1156, 1156, 'staticobjects/_exp07/tofs/tfs_rug_cathedral01', 1096), + (1157, 1157, 'staticobjects/_exp07/tofs/tfs_rug_cathedral02', 1096), + (1158, 1158, 'staticobjects/_exp07/tofs/tfs_rug_military01', 1096), + (1159, 1159, 'staticobjects/_exp07/tofs/tfs_rug_military02', 1096), + (1160, 1160, 'staticobjects/_exp07/tofs/tfs_table_bedside01', 1096), + (1161, 1161, 'staticobjects/_exp07/tofs/tfs_table_dining_military01', 1096), + (1162, 1162, 'staticobjects/_exp07/tofs/tfs_table_glass_cathedral01_with_runner_dpo', 1096), + (1163, 1163, 'staticobjects/_exp07/tofs/tfs_table_glass_cathedral02', 1096), + (1164, 1164, 'accessories/hair/face/face008', 0), + (1165, 1165, 'accessories/hair/face/face009', 0), + (1166, 1166, 'accessories/hair/face/face010', 0), + (1167, 1167, 'accessories/hair/face/face011', 0), + (1168, 1168, 'accessories/hair/face/face012', 0), + (1169, 1169, 'accessories/hair/face/face013', 0), + (1170, 1170, 'accessories/hair/face/face014', 0), + (1171, 1171, 'accessories/hair/face/face015', 0), + (1172, 1172, 'accessories/hair/face/face016', 0), + (1173, 1173, 'accessories/hair/face/face017', 0), + (1174, 1174, 'accessories/hair/face/face018', 0), + (1175, 1175, 'accessories/hair/face/face019', 0), + (1176, 1176, 'accessories/hair/face/face020', 0), + (1177, 1177, 'accessories/hair/face/face021', 0), + (1178, 1178, 'accessories/hair/face/face022', 0), + (1179, 1179, 'accessories/hair/face/face023', 0), + (1180, 1180, 'accessories/hair/face/face024', 0), + (1181, 1181, 'accessories/hair/face/face025', 0), + (1182, 1182, 'accessories/hair/face/face026', 0), + (1183, 1183, 'accessories/hair/face/face027', 0), + (1184, 1184, 'accessories/hair/face/face000', 0), + (1185, 1185, 'accessories/hair/face/face001', 0), + (1186, 1186, 'accessories/hair/face/face002', 0), + (1187, 1187, 'accessories/hair/face/face003', 0), + (1188, 1188, 'accessories/hair/face/face004', 0), + (1189, 1189, 'accessories/hair/face/face005', 0), + (1190, 1190, 'accessories/hair/face/face006', 0), + (1191, 1191, 'accessories/hair/face/face007', 0), + (1192, 1192, 'staticobjects/_exp07/tofs/tfs_table_marble_blue01', 1096), + (1193, 1193, 'staticobjects/_exp07/tofs/tfs_table_marble_blue02', 1096), + (1194, 1194, 'staticobjects/_exp07/tofs/tfs_table_marble_maroon01', 1096), + (1195, 1195, 'staticobjects/_exp07/tofs/tfs_table_marble_maroon02', 1096), + (1196, 1196, 'staticobjects/_exp07/tofs/tfs_weaponrack_wall01', 1096), + (1197, 1197, 'staticobjects/_exp07/tofs/tofs_floor08_crystal_orbit01_all_houseitem', 1096), + (1198, 1198, 'staticobjects/_exp07/tofs/tofs_statue_mayong01', 1096), + (1199, 1199, 'staticobjects/_exp07/tofs/tofs_statue_tserrina01', 1096), + (1200, 1200, 'accessories/wearable_items/_exp07/leather_overland_armor/skirt', 1096), + (1201, 1201, 'accessories/wearable_items/_exp07/leather_overland_armor/chest', 1096), + (1202, 1202, 'accessories/wearable_items/_exp07/leather_overland_armor/feet', 1096), + (1203, 1203, 'accessories/wearable_items/_exp07/leather_overland_armor/forearms', 1096), + (1204, 1204, 'accessories/wearable_items/_exp07/leather_overland_armor/hands', 1096), + (1205, 1205, 'accessories/wearable_items/_exp07/leather_overland_armor/head', 1096), + (1206, 1206, 'accessories/wearable_items/_exp07/leather_overland_armor/leather_overland_collar', 1096), + (1207, 1207, 'accessories/wearable_items/_exp07/leather_overland_armor/legs', 1096), + (1208, 1208, 'accessories/wearable_items/_exp07/leather_overland_armor/legs_noskirt', 1096), + (1209, 1209, 'accessories/wearable_items/_exp07/leather_overland_armor/pauldron_left', 1096), + (1210, 1210, 'accessories/wearable_items/_exp07/leather_overland_armor/pauldron_right', 1096), + (1211, 1211, 'accessories/wearable_items/_exp07/leather_overland_armor/shoulders', 1096), + (1212, 1212, 'accessories/wearable_items/_exp07/leather_overland_armor/shoulders_nopauldrons', 1096), + (1213, 1213, 'accessories/wearable_items/cloak/exp07/cloak_leather_overland', 1096), + (1214, 1214, 'accessories/wearable_items/_exp07/rallos_zek_armor/rallos_zek_armor_chain_tintable/skirt', 1096), + (1215, 1215, 'accessories/wearable_items/_exp07/rallos_zek_armor/rallos_zek_armor_chain_tintable/chest', 1096), + (1216, 1216, 'accessories/wearable_items/_exp07/rallos_zek_armor/rallos_zek_armor_chain_tintable/feet', 1096), + (1217, 1217, 'accessories/wearable_items/_exp07/rallos_zek_armor/rallos_zek_armor_chain_tintable/forearms', 1096), + (1218, 1218, 'accessories/wearable_items/_exp07/rallos_zek_armor/rallos_zek_armor_chain_tintable/hands', 1096), + (1219, 1219, 'accessories/wearable_items/_exp07/rallos_zek_armor/rallos_zek_armor_chain_tintable/head', 1096), + (1220, 1220, 'accessories/wearable_items/_exp07/rallos_zek_armor/rallos_zek_armor_chain_tintable/legs', 1096), + (1221, 1221, 'accessories/wearable_items/_exp07/rallos_zek_armor/rallos_zek_armor_chain_tintable/legs_noskirt', 1096), + (1222, 1222, 'accessories/wearable_items/_exp07/rallos_zek_armor/rallos_zek_armor_chain_tintable/rallos_zek_chain_pauldron_left', 1096), + (1223, 1223, 'accessories/wearable_items/_exp07/rallos_zek_armor/rallos_zek_armor_chain_tintable/rallos_zek_chain_pauldron_right', 1096), + (1224, 1224, 'accessories/wearable_items/_exp07/rallos_zek_armor/rallos_zek_armor_chain_tintable/rallos_zek_chain_pauldron_small_left', 1096), + (1225, 1225, 'accessories/wearable_items/_exp07/rallos_zek_armor/rallos_zek_armor_chain_tintable/rallos_zek_chain_pauldron_small_right', 1096), + (1226, 1226, 'staticobjects/_exp07/tradeskill_coldain_prayershawl_hq_houseitem', 1096), + (1227, 1227, 'accessories/wearable_items/_exp07/rallos_zek_armor/rallos_zek_armor_chain_tintable/shoulders_nopauldrons', 1096), + (1228, 1228, 'accessories/wearable_items/_exp07/rallos_zek_armor/rallos_zek_armor_chain_tintable/shoulders_rallos_zek_epic_pauldrons', 1096), + (1229, 1229, 'accessories/wearable_items/_exp07/rallos_zek_armor/rallos_zek_armor_chain_tintable/shoulders_rallos_zek_small_pauldrons', 1096), + (1230, 1230, 'accessories/wieldable_items/shields/exp07/lodizal_shield', 1096), + (1231, 1231, 'staticobjects/guildhall/trophies/floor_statue_of_rallos_zek_fx', 1096), + (1232, 1232, 'staticobjects/guildhall/trophies/floor_king_tormax_fx', 1096), + (1233, 1233, 'staticobjects/guildhall/trophies/floor_kraytoc_fx', 1096), + (1234, 1234, 'staticobjects/_exp07/tenth_ring_hq_houseitem', 1096), + (1235, 1235, '_exp07/characters/monsters/ice_dragon/ice_dragon', 1096), + (1236, 1236, 'accessories/wieldable_items/weapons/exp07/1h_crush/1h_hammer_goth', 1096), + (1237, 1237, 'accessories/wearable_items/_exp07/rallos_zek_armor/rallos_zek_armor_leather_tintable/skirt', 1096), + (1238, 1238, 'accessories/wearable_items/_exp07/rallos_zek_armor/rallos_zek_armor_leather_tintable/chest', 1096), + (1239, 1239, 'accessories/wearable_items/_exp07/rallos_zek_armor/rallos_zek_armor_leather_tintable/feet', 1096), + (1240, 1240, 'accessories/wearable_items/_exp07/rallos_zek_armor/rallos_zek_armor_leather_tintable/forearms', 1096), + (1241, 1241, 'accessories/wearable_items/_exp07/rallos_zek_armor/rallos_zek_armor_leather_tintable/hands', 1096), + (1242, 1242, 'accessories/wearable_items/_exp07/rallos_zek_armor/rallos_zek_armor_leather_tintable/head', 1096), + (1243, 1243, 'accessories/wearable_items/_exp07/rallos_zek_armor/rallos_zek_armor_leather_tintable/legs', 1096), + (1244, 1244, 'accessories/wearable_items/_exp07/rallos_zek_armor/rallos_zek_armor_leather_tintable/legs_noskirt', 1096), + (1245, 1245, 'accessories/wearable_items/_exp07/rallos_zek_armor/rallos_zek_armor_leather_tintable/shoulders_nopauldrons', 1096), + (1246, 1246, 'accessories/wearable_items/_exp07/rallos_zek_armor/rallos_zek_armor_leather_tintable/shoulders_rallos_zek_epic_pauldrons', 1096), + (1247, 1247, 'accessories/wearable_items/_exp07/rallos_zek_armor/rallos_zek_armor_leather_tintable/shoulders_rallos_zek_small_pauldrons', 1096), + (1248, 1248, 'accessories/wieldable_items/weapons/fist/qeynos_wraps/qeynos_wraps_skulls', 1096), + (1249, 1249, '_exp07/characters/tool_users/tserrina/tserrina_darkelf', 1096), + (1250, 1250, 'accessories/npc_wearables/tserrina/forearms_dark_elf', 1096), + (1251, 1251, 'accessories/npc_wearables/tserrina/feet_dark_elf_shin', 1096), + (1252, 1252, 'accessories/wieldable_items/weapons/exp07/talisman/exp07_totem_yawningmaw_velium', 1096), + (1253, 1253, 'accessories/wieldable_items/weapons/exp07/talisman/exp07_totem_yawningmaw', 1096), + (1254, 1254, 'accessories/wieldable_items/weapons/exp07/talisman/exp07_totem_yawningmaw_stone', 1096), + (1255, 1255, 'accessories/wieldable_items/weapons/exp07/talisman/exp07_totem_yawningmaw_ruby', 1096), + (1256, 1256, 'accessories/wieldable_items/weapons/exp07/talisman/exp07_scepter_brightstar', 1096), + (1257, 1257, 'accessories/wieldable_items/weapons/exp07/talisman/exp07_scepter_brightstar_iron', 1096), + (1258, 1258, 'accessories/wieldable_items/weapons/exp07/talisman/exp07_totem_bristlebane', 1096), + (1259, 1259, 'accessories/wieldable_items/weapons/exp07/talisman/book_antique', 1096), + (1260, 1260, 'accessories/wieldable_items/weapons/exp07/talisman/book_caged', 1096), + (1261, 1261, 'accessories/wieldable_items/weapons/exp07/talisman/book_caged_monster', 1096), + (1262, 1262, 'accessories/wieldable_items/weapons/exp07/talisman/book_caged_monster_undead', 1096), + (1263, 1263, 'accessories/wieldable_items/weapons/exp07/talisman/book_antique_blueglow', 1096), + (1264, 1264, 'accessories/wieldable_items/weapons/exp07/talisman/book_antique_orangeglow', 1096), + (1265, 1265, 'accessories/wieldable_items/weapons/exp07/talisman/book_songbook', 1096), + (1266, 1266, 'accessories/wieldable_items/weapons/exp07/shield/exp07_shield_kite_wooden', 1096), + (1267, 1267, 'accessories/wieldable_items/weapons/exp07/shield/exp07_shield_kite_dragon_red', 1096), + (1268, 1268, 'accessories/wieldable_items/weapons/exp07/shield/exp07_shield_kite_dragon_green', 1096), + (1269, 1269, 'accessories/wieldable_items/weapons/exp07/shield/exp07_shield_kite_dragon_dark', 1096), + (1270, 1270, 'accessories/wieldable_items/weapons/exp07/shield/exp07_shield_kite_dragon', 1096), + (1271, 1271, 'accessories/wieldable_items/weapons/exp07/shield/exp05_shield06_bloodstone', 1096), + (1272, 1272, 'accessories/wieldable_items/weapons/exp07/shield/exp05_shield06_velium', 1096), + (1273, 1273, 'accessories/wieldable_items/weapons/exp07/shield/exp07_shield_kite_woodburl', 1096), + (1274, 1274, 'accessories/wieldable_items/weapons/exp07/shield/exp07_shield_kite_metal_iron', 1096), + (1275, 1275, 'accessories/wieldable_items/weapons/exp07/shield/exp07_shield_kite_metal_bronze', 1096), + (1276, 1276, 'staticobjects/tcg/tcg_tapestry_arbor', 1096), + (1277, 1277, 'staticobjects/tcg/tcg_painting57_impetuousrover', 1096), + (1278, 1278, 'staticobjects/tcg/tcg_painting55_bloodforgehammer', 1096), + (1279, 1279, 'staticobjects/tcg/tcg_painting54_shieldmaster', 1096), + (1280, 1280, 'staticobjects/tcg/tcg_painting53_retiredhero', 1096), + (1281, 1281, 'staticobjects/tcg/tcg_painting52_vengeance', 1096), + (1282, 1282, 'staticobjects/tcg/tcg_tapestry_dragonslayer', 1096), + (1283, 1283, 'staticobjects/tcg/tcg_tapestry_guardian', 1096), + (1284, 1284, 'staticobjects/tcg/tcg_tapestry_clearing', 1096), + (1285, 1285, 'accessories/wearable_items/_exp07/rallos_zek_armor/rallos_zek_armor_vanguard_tintable/chest', 1096), + (1286, 1286, 'accessories/wearable_items/_exp07/rallos_zek_armor/rallos_zek_armor_vanguard_tintable/feet', 1096), + (1287, 1287, 'accessories/wearable_items/_exp07/rallos_zek_armor/rallos_zek_armor_vanguard_tintable/forearms', 1096), + (1288, 1288, 'accessories/wearable_items/_exp07/rallos_zek_armor/rallos_zek_armor_vanguard_tintable/hands', 1096), + (1289, 1289, 'accessories/wearable_items/_exp07/rallos_zek_armor/rallos_zek_armor_vanguard_tintable/head', 1096), + (1290, 1290, 'accessories/wearable_items/_exp07/rallos_zek_armor/rallos_zek_armor_vanguard_tintable/legs', 1096), + (1291, 1291, 'accessories/wearable_items/_exp07/rallos_zek_armor/rallos_zek_armor_vanguard_tintable/legs_noskirt', 1096), + (1292, 1292, 'accessories/wearable_items/_exp07/rallos_zek_armor/rallos_zek_armor_vanguard_tintable/rallos_zek_vanguard_pauldron_epic_left', 1096), + (1293, 1293, 'accessories/wearable_items/_exp07/rallos_zek_armor/rallos_zek_armor_vanguard_tintable/rallos_zek_vanguard_pauldron_epic_right', 1096), + (1294, 1294, 'accessories/wearable_items/_exp07/rallos_zek_armor/rallos_zek_armor_vanguard_tintable/rallos_zek_vanguard_pauldron_small_left', 1096), + (1295, 1295, 'accessories/wearable_items/_exp07/rallos_zek_armor/rallos_zek_armor_vanguard_tintable/rallos_zek_vanguard_pauldron_small_right', 1096), + (1296, 1296, 'accessories/wearable_items/_exp07/rallos_zek_armor/rallos_zek_armor_vanguard_tintable/right', 1096), + (1297, 1297, 'accessories/wearable_items/_exp07/rallos_zek_armor/rallos_zek_armor_vanguard_tintable/shoulders_nopauldrons', 1096), + (1298, 1298, 'accessories/wearable_items/_exp07/rallos_zek_armor/rallos_zek_armor_vanguard_tintable/shoulders_rallos_zek_epic_pauldrons', 1096), + (1299, 1299, 'accessories/wearable_items/_exp07/rallos_zek_armor/rallos_zek_armor_vanguard_tintable/shoulders_rallos_zek_small_pauldrons', 1096), + (1300, 1300, 'accessories/wearable_items/_exp07/rallos_zek_armor/rallos_zek_armor_vanguard_tintable/skirt', 1096), + (1301, 1301, 'staticobjects/tapestry/gh_freeport_carpenter_tapestry_dpo', 1096), + (1302, 1302, 'staticobjects/tapestry/gh_qeynos_carpenter_tapestry_dpo', 1096), + (1303, 1303, 'staticobjects/liveevent/brew_day/vel_distillery_stage_01_01', 1096), + (1304, 1304, 'staticobjects/liveevent/brew_day/vel_distillery_stage_02_01', 1096), + (1305, 1305, 'staticobjects/liveevent/brew_day/vel_distillery_stage_03_01', 1096), + (1306, 1306, 'staticobjects/liveevent/bristlebane_day/dpo_djn_steel_painting04_tree', 1096), + (1307, 1307, 'staticobjects/liveevent/bristlebane_day/dpo_runny_anvil01', 1096), + (1308, 1308, 'staticobjects/liveevent/bristlebane_day/dpo_runny_brazier03', 1096), + (1309, 1309, 'staticobjects/liveevent/bristlebane_day/dpo_runny_bucketforge01', 1096), + (1310, 1310, 'staticobjects/liveevent/bristlebane_day/dpo_halfing_barrel01_fish', 1096), + (1311, 1311, 'staticobjects/liveevent/bristlebane_day/dpo_hafling_wheelbarrow01', 1096), + (1312, 1312, 'staticobjects/liveevent/brew_day/dpo_eu_winebottle_green01', 1096), + (1313, 1313, 'staticobjects/liveevent/brew_day/dpo_hal_cup_01', 1096), + (1314, 1314, 'staticobjects/liveevent/brew_day/dpo_hal_cup_02', 1096), + (1315, 1315, 'staticobjects/liveevent/brew_day/dpo_hal_ironpot_01', 1096), + (1316, 1316, 'staticobjects/panels/dpo_panel_bristlebane_coin', 1096), + (1317, 1317, 'staticobjects/panels/dpo_panel_groundclover', 1096), + (1318, 1318, 'staticobjects/panels/dpo_panel_stainedglass_blue', 1096), + (1319, 1319, 'staticobjects/panels/dpo_panel_stainedglass_green', 1096), + (1320, 1320, 'staticobjects/panels/dpo_panel_stainedglass_purple', 1096), + (1321, 1321, 'staticobjects/panels/dpo_panel_stainedglass_red', 1096), + (1322, 1322, 'accessories/wieldable_items/weapons/exp07/1h_crush/1h_crush_nipiks_cane_sm_npc_only', 1096), + (1323, 1323, 'accessories/wearable_items/cloak/exp07/cloak_dragonskin_fl', 1096), + (1324, 1324, 'accessories/wearable_items/cloak/exp07/cloak_compass_movingclouds', 1096), + (1325, 1325, 'accessories/wieldable_items/weapons/exp07/1h_crush/1h_flail_cinder_big', 1096), + (1326, 1326, 'creatures/mounts/horse_heavy/horse_heavy_brown_evil', 1096), + (1327, 1327, 'staticobjects/_exp07/exp07_dun_tower_of_frozen_shadow/tofs_hand_mirror_01', 1096), + (1328, 1328, 'staticobjects/_exp07/exp07_dun_tower_of_frozen_shadow/tofs_hairbrush_01', 1096), + (1329, 1329, '_exp07/objects/tofs/tofs_rock_group01', 1096), + (1330, 1330, 'creatures/monsters/gnomerace_twister_blaster', 1096), + (1331, 1331, 'staticobjects/liveevent/bristlebane_day/tradeskill_collection_golden_meat_bucket', 1096), + (1332, 1332, 'staticobjects/liveevent/bristlebane_day/bristlebane_day_totem_01', 1096), + (1333, 1333, 'accessories/wearable_items/_exp07/rallos_zek_armor/rallos_zek_armor_robe_tintable/skirt', 1096), + (1334, 1334, 'accessories/wearable_items/_exp07/rallos_zek_armor/rallos_zek_armor_robe_tintable/chest', 1096), + (1335, 1335, 'accessories/wearable_items/_exp07/rallos_zek_armor/rallos_zek_armor_robe_tintable/feet', 1096), + (1336, 1336, 'accessories/wearable_items/_exp07/rallos_zek_armor/rallos_zek_armor_robe_tintable/hands', 1096), + (1337, 1337, 'accessories/wearable_items/_exp07/rallos_zek_armor/rallos_zek_armor_robe_tintable/head', 1096), + (1338, 1338, 'accessories/wearable_items/_exp07/rallos_zek_armor/rallos_zek_armor_robe_tintable/pants', 1096), + (1339, 1339, 'accessories/wearable_items/_exp07/rallos_zek_armor/rallos_zek_armor_robe_tintable/rallos_zek_robe_belt_plate', 1096), + (1340, 1340, 'accessories/wearable_items/_exp07/vanguard_overland/skirt', 1096), + (1341, 1341, 'accessories/wearable_items/_exp07/vanguard_overland/chest', 1096), + (1342, 1342, 'accessories/wearable_items/_exp07/vanguard_overland/feet', 1096), + (1343, 1343, 'accessories/wearable_items/_exp07/vanguard_overland/hands', 1096), + (1344, 1344, 'accessories/wearable_items/_exp07/vanguard_overland/head', 1096), + (1345, 1345, 'accessories/wearable_items/_exp07/vanguard_overland/legs', 1096), + (1346, 1346, 'creatures/tu/aqua_goblin', 0), + (1347, 1347, 'staticobjects/crypt/comland_cem_mausoleum003', 0), + (1348, 1348, 'accessories/wearable_items/_exp07/vanguard_overland/legs_noskirt', 1096), + (1349, 1349, 'accessories/wearable_items/_exp07/vanguard_overland/right', 1096), + (1350, 1350, 'accessories/wearable_items/_exp07/vanguard_overland/shoulders', 1096), + (1351, 1351, 'accessories/wearable_items/_exp07/vanguard_overland/shoulders_nopauldrons', 1096), + (1352, 1352, 'staticobjects/liveevent/brew_day/dpo_drv_keg_large01', 1096), + (1353, 1353, 'staticobjects/liveevent/brew_day/dpo_drv_kegstand_double01', 1096), + (1354, 1354, 'staticobjects/liveevent/bristlebane_day/dpo_cr_beermug_orc01', 1096), + (1355, 1355, 'staticobjects/liveevent/bristlebane_day/dpo_cr_stein_orc01', 1096), + (1356, 1356, 'staticobjects/liveevent/bristlebane_day/dpo_cr_plate_orc_withgrub01', 1096), + (1357, 1357, 'staticobjects/liveevent/bristlebane_day/dpo_cr_bowl_orc_with_grub02', 1096), + (1358, 1358, 'staticobjects/liveevent/bristlebane_day/dpo_djn_steel_painting02', 1096), + (1359, 1359, 'staticobjects/liveevent/bristlebane_day/dpo_drv_pillow_seat01', 1096), + (1360, 1360, 'staticobjects/liveevent/bristlebane_day/dpo_drv_pillow_seat02', 1096), + (1361, 1361, 'staticobjects/liveevent/bristlebane_day/dpo_djn_wine_bottle_gold01', 1096), + (1362, 1362, 'staticobjects/liveevent/bristlebane_day/dpo_djn_cup_brass01', 1096), + (1363, 1363, 'staticobjects/liveevent/bristlebane_day/dpo_djn_cup_blue01', 1096), + (1364, 1364, 'staticobjects/liveevent/bristlebane_day/dpo_djn_plate_blue01', 1096), + (1365, 1365, 'staticobjects/liveevent/bristlebane_day/dpo_djn_plate_gold01', 1096), + (1366, 1366, 'staticobjects/liveevent/bristlebane_day/dpo_djn_bowl_blue01', 1096), + (1367, 1367, 'staticobjects/befallen_epic01/coffin_box_1', 0), + (1368, 1368, 'staticobjects/befallen_epic01/coffin_lid_1', 0), + (1369, 1369, 'creatures/mounts/carpet', 0), + (1370, 1370, 'creatures/monsters/gargoyle', 0), + (1371, 1371, 'creatures/monsters/gargoyle_fiendish', 0), + (1372, 1372, 'creatures/monsters/lioness', 0), + (1373, 1373, 'creatures/monsters/manticore_ebon', 0), + (1374, 1374, 'creatures/monsters/wolf_dire', 0), + (1375, 1375, 'creatures/monsters/wyrm_fire', 0), + (1376, 1376, 'creatures/monsters/wyrm_ice', 0), + (1377, 1377, 'staticobjects/liveevent/bristlebane_day/dpo_djn_bowl_gold01', 1096), + (1378, 1378, 'creatures/tu/succubus', 0), + (1379, 1379, 'staticobjects/nektulos/trailor01', 0), + (1380, 1380, 'staticobjects/nektulos/wagon01', 0), + (1381, 1381, 'staticobjects/ecology/bed_single', 0), + (1382, 1382, 'staticobjects/ecology/elfbed01', 0), + (1383, 1383, 'staticobjects/ecology/qst_unseenhand_evilchest', 0), + (1384, 1384, 'creatures/tu/gnoll', 0), + (1385, 1385, 'staticobjects/ecology/qst_unseenhand_bunkbead_1', 0), + (1386, 1386, 'staticobjects/ecology/qst_unseenhand_card_table', 0), + (1387, 1387, 'staticobjects/ecology/qst_unseenhand_operating_table', 0), + (1388, 1388, 'staticobjects/ecology/qst_unseenhand_painting_1', 0), + (1389, 1389, 'staticobjects/ecology/qst_unseenhand_barrel_1', 0), + (1390, 1390, 'staticobjects/ecology/qst_unseenhand_bookcase_1', 0), + (1391, 1391, 'staticobjects/ecology/qst_unseenhand_chair_1', 0), + (1392, 1392, 'staticobjects/ecology/qst_unseenhand_chest_1', 0), + (1393, 1393, 'staticobjects/ecology/qst_unseenhand_crate_1', 0), + (1394, 1394, 'staticobjects/ecology/qst_unseenhand_fireplace_1', 0), + (1395, 1395, 'staticobjects/ecology/qst_unseenhand_firewood_1', 0), + (1396, 1396, 'staticobjects/ecology/qst_unseenhand_firewood_2', 0), + (1397, 1397, 'staticobjects/ecology/qst_unseenhand_floorlight_1', 0), + (1398, 1398, 'staticobjects/ecology/qst_unseenhand_keg_1', 0), + (1399, 1399, 'staticobjects/ecology/qst_unseenhand_kitchen_1', 0), + (1400, 1400, 'staticobjects/ecology/qst_unseenhand_mug_1', 0), + (1401, 1401, 'staticobjects/ecology/qst_unseenhand_table_1', 0), + (1402, 1402, 'staticobjects/ecology/qst_unseenhand_table_2', 0), + (1403, 1403, 'staticobjects/ecology/qst_unseenhand_wine_1', 0), + (1404, 1404, 'staticobjects/maps/commonlandsmap01', 0), + (1405, 1405, 'staticobjects/maps/placeholder', 0), + (1406, 1406, 'staticobjects/ecology/qst_galintos_bedframe_1', 0), + (1407, 1407, 'staticobjects/ecology/qst_galintos_bedroll_1', 0), + (1408, 1408, 'staticobjects/ecology/qst_galintos_bed_1', 0), + (1409, 1409, 'staticobjects/ecology/qst_galintos_bookcase_1', 0), + (1410, 1410, 'staticobjects/ecology/qst_galintos_bookcase_2', 0), + (1411, 1411, 'staticobjects/ecology/qst_galintos_brazier_1', 0), + (1412, 1412, 'staticobjects/ecology/qst_galintos_candelabra_1', 0), + (1413, 1413, 'staticobjects/ecology/qst_galintos_chess_1', 0), + (1414, 1414, 'staticobjects/ecology/qst_galintos_dresser_1', 0), + (1415, 1415, 'staticobjects/ecology/qst_galintos_fairy_bath_1', 0), + (1416, 1416, 'staticobjects/ecology/qst_galintos_globe_1', 0), + (1417, 1417, 'staticobjects/ecology/qst_galintos_mage_1', 0), + (1418, 1418, 'staticobjects/ecology/qst_galintos_ogre_chair_1', 0), + (1419, 1419, 'staticobjects/ecology/qst_galintos_ogre_food_1', 0), + (1420, 1420, 'staticobjects/ecology/qst_galintos_ogre_mug_1', 0), + (1421, 1421, 'staticobjects/ecology/qst_galintos_ogre_soup_1', 0), + (1422, 1422, 'staticobjects/ecology/qst_galintos_ogre_table_1', 0), + (1423, 1423, 'staticobjects/ecology/qst_galintos_stove_1', 0), + (1424, 1424, 'staticobjects/ecology/qst_galintos_table_1', 0), + (1425, 1425, 'staticobjects/ecology/qst_galintos_vase_1', 0), + (1426, 1426, 'staticobjects/ecology/qst_unseenhand_picture_1', 0), + (1427, 1427, 'staticobjects/ecology/qst_unseenhand_smashed_1', 0), + (1428, 1428, 'staticobjects/ecology/qst_unseenhand_smashed_barrel_1', 0), + (1429, 1429, 'creatures/tu/ice_giant_warrior', 0), + (1430, 1430, 'ec/pc/froglok/froglok_male_blackgoo', 0), + (1431, 1431, 'ec/pc/froglok/froglok_male_leopard', 0), + (1432, 1432, 'staticobjects/fallengate/doors/boss_door_left', 0), + (1433, 1433, 'staticobjects/torches/elise_wall_scontz', 0), + (1434, 1434, 'staticobjects/jumjum_jar_01', 0), + (1435, 1435, 'staticobjects/chairs/orcish_throne', 0), + (1436, 1436, 'staticobjects/doors/huge_skull_door_left', 0), + (1437, 1437, 'staticobjects/doors/huge_skull_door_right', 0), + (1438, 1438, 'staticobjects/doors/orcish_wooden_door', 0), + (1439, 1439, 'staticobjects/doorways/heavy_stone_archway', 0), + (1440, 1440, 'ec/pc/woodelf/woodelf_female_tattoo01', 0), + (1441, 1441, 'ec/pc/woodelf/woodelf_female_tattoo02', 0), + (1442, 1442, 'ec/pc/woodelf/woodelf_female_tattoo03', 0), + (1443, 1443, 'ec/pc/woodelf/woodelf_female_tattoo04', 0), + (1444, 1444, 'ec/pc/woodelf/woodelf_female_tattoo05', 0), + (1445, 1445, 'ec/pc/woodelf/woodelf_female_tattoo06', 0), + (1446, 1446, 'ec/pc/woodelf/woodelf_female_tattoo07', 0), + (1447, 1447, 'ec/pc/woodelf/woodelf_male_tattoo01', 0), + (1448, 1448, 'ec/pc/woodelf/woodelf_male_tattoo02', 0), + (1449, 1449, 'ec/pc/woodelf/woodelf_male_tattoo03', 0), + (1450, 1450, 'ec/pc/woodelf/woodelf_male_tattoo04', 0), + (1451, 1451, 'ec/pc/woodelf/woodelf_male_tattoo05', 0), + (1452, 1452, 'ec/pc/woodelf/woodelf_male_tattoo06', 0), + (1453, 1453, 'staticobjects/books/flat_brown_goldtrim_01', 0), + (1454, 1454, 'staticobjects/doors/cazicthule/door_stone_new', 0), + (1455, 1455, 'staticobjects/doors/cazicthule/door_stone_worn', 0), + (1456, 1456, 'staticobjects/chairs/fprt_hood_chair_broken01', 0), + (1457, 1457, 'staticobjects/chairs/qst_broken_chair_warrior_cap', 0), + (1458, 1458, 'staticobjects/weapons/longsword_uncommon_nektropos', 0), + (1459, 1459, 'staticobjects/tableware/halfling_tablejunk01', 0), + (1460, 1460, 'staticobjects/tree/deadtrunk', 0), + (1461, 1461, 'staticobjects/portals/rallos_zek_portal', 1096), + (1462, 1462, 'ec/pc/barbarian/barbarian_female_tattoo01', 0), + (1463, 1463, 'ec/pc/barbarian/barbarian_female_tattoo02', 0), + (1464, 1464, 'ec/pc/barbarian/barbarian_female_tattoo03', 0), + (1465, 1465, 'ec/pc/barbarian/barbarian_female_tattoo04', 0), + (1466, 1466, 'ec/pc/barbarian/barbarian_female_tattoo05', 0), + (1467, 1467, 'ec/pc/barbarian/barbarian_male_tattoo01', 0), + (1468, 1468, 'ec/pc/barbarian/barbarian_male_tattoo02', 0), + (1469, 1469, 'ec/pc/barbarian/barbarian_male_tattoo03', 0), + (1470, 1470, 'ec/pc/barbarian/barbarian_male_tattoo04', 0), + (1471, 1471, 'ec/pc/barbarian/barbarian_male_tattoo05', 0), + (1472, 1472, 'staticobjects/beds/singlebed001', 0), + (1473, 1473, 'staticobjects/chests/chest_coll_01', 0), + (1474, 1474, 'staticobjects/sacks/qey_floursacksgroup003', 0), + (1475, 1475, 'ec/pc/dwarf/dwarf_female_tattoo01', 0), + (1476, 1476, 'ec/pc/dwarf/dwarf_female_tattoo02', 0), + (1477, 1477, 'ec/pc/dwarf/dwarf_female_tattoo03', 0), + (1478, 1478, 'ec/pc/dwarf/dwarf_female_tattoo04', 0), + (1479, 1479, 'ec/pc/dwarf/dwarf_female_tattoo05', 0), + (1480, 1480, 'ec/pc/dwarf/dwarf_male_tattoo01', 0), + (1481, 1481, 'ec/pc/dwarf/dwarf_male_tattoo02', 0), + (1482, 1482, 'ec/pc/dwarf/dwarf_male_tattoo03', 0), + (1483, 1483, 'ec/pc/dwarf/dwarf_male_tattoo04', 0), + (1484, 1484, 'ec/pc/dwarf/dwarf_male_tattoo05', 0), + (1485, 1485, 'ec/pc/dwarf/dwarf_male_tattoo06', 0), + (1486, 1486, 'ec/pc/woodelf/woodelf_female_tattoo08', 0), + (1487, 1487, 'ec/pc/woodelf/woodelf_male_tattoo07', 0), + (1488, 1488, 'ec/pc/woodelf/woodelf_male_tattoo08', 0), + (1489, 1489, 'staticobjects/sewer_grate_01', 0), + (1490, 1490, 'staticobjects/white_tombstone_01', 0), + (1491, 1491, 'staticobjects/bookcases/hum_shelf_simple_01', 0), + (1492, 1492, 'staticobjects/chairs/fprt_bench_plainlong01', 0), + (1493, 1493, 'staticobjects/chests/qey_birdcage001', 0), + (1494, 1494, 'staticobjects/chests/qey_birdcage002', 0), + (1495, 1495, 'staticobjects/chests/qey_cage001', 0), + (1496, 1496, 'staticobjects/chests/qey_cage002', 0), + (1497, 1497, 'staticobjects/containers/crate_large_long001', 0), + (1498, 1498, 'staticobjects/containers/fprt_chest_large_plain01', 0), + (1499, 1499, 'staticobjects/counters/fprt_counter_cornerornatemedium01', 0), + (1500, 1500, 'staticobjects/counters/fprt_counter_cornerplainlong01', 0), + (1501, 1501, 'staticobjects/counters/fprt_counter_straightornatelong01', 0), + (1502, 1502, 'staticobjects/counters/fprt_counter_straightornatemedium01', 0), + (1503, 1503, 'staticobjects/counters/fprt_counter_straightornatesmall01', 0), + (1504, 1504, 'staticobjects/counters/fprt_counter_straightplainlong01', 0), + (1505, 1505, 'staticobjects/counters/fprt_counter_straightplainmedium01', 0), + (1506, 1506, 'staticobjects/counters/fprt_hood_counter_wood_2mlong001', 0), + (1507, 1507, 'staticobjects/counters/fprt_hood_counter_wood_3mlong001', 0), + (1508, 1508, 'staticobjects/counters/fprt_hood_counter_wood_4mlong001', 0), + (1509, 1509, 'staticobjects/counters/fprt_hood_counter_wood_corner001', 0), + (1510, 1510, 'staticobjects/counters/qey_bar_elbow', 0), + (1511, 1511, 'staticobjects/doors/cazicthule/door_stone_ornate', 0), + (1512, 1512, 'staticobjects/qeynos/qey_bank_vault', 0), + (1513, 1513, 'staticobjects/qeynos/qey_crystal_globe', 0), + (1514, 1514, 'staticobjects/relics/cazic_bowl_green', 0), + (1515, 1515, 'staticobjects/tables/fprt_hood_table_large01', 0), + (1516, 1516, 'staticobjects/tables/fprt_hood_table_small01', 0), + (1517, 1517, 'staticobjects/tables/fprt_tables_scribedesk01', 0), + (1518, 1518, 'staticobjects/tables/qey_butcherblock', 0), + (1519, 1519, 'staticobjects/tables/qey_table_desk_plain', 0), + (1520, 1520, 'staticobjects/soe_wallet/roulette_table_dpo', 1096), + (1521, 1521, 'creatures/tu/skeleton', 0), + (1522, 1522, 'staticobjects/relics/cazic_bowl_purple', 0), + (1523, 1523, 'staticobjects/tree/nekf_mushroom_a_mature', 0), + (1524, 1524, 'staticobjects/tree/nekf_mushroom_a_young', 0), + (1525, 1525, 'staticobjects/tree/nekf_mushroom_blue', 0), + (1526, 1526, 'staticobjects/cages/goblin_broken_cage01', 0), + (1527, 1527, 'staticobjects/cages/goblin_broken_cage02', 0), + (1528, 1528, 'staticobjects/cages/goblin_cage01', 0), + (1529, 1529, 'staticobjects/chairs/goblin_chairs01', 0), + (1530, 1530, 'staticobjects/flags/goblin_flag01', 0), + (1531, 1531, 'staticobjects/flags/goblin_flag02', 0), + (1532, 1532, 'staticobjects/flags/goblin_flag03', 0), + (1533, 1533, 'staticobjects/goblin_misc/hanging_meat01', 0), + (1534, 1534, 'staticobjects/racks/weaponrack001', 0), + (1535, 1535, 'staticobjects/rubble/goblin_rubble01', 0), + (1536, 1536, 'staticobjects/rubble/goblin_rubble02', 0), + (1537, 1537, 'staticobjects/rubble/goblin_rubble03', 0), + (1538, 1538, 'staticobjects/scafolds/goblin_scafold01', 0), + (1539, 1539, 'staticobjects/scafolds/goblin_scafold02', 0), + (1540, 1540, 'staticobjects/tables/goblin_cage01', 0), + (1541, 1541, 'staticobjects/tables/goblin_table01', 0), + (1542, 1542, 'staticobjects/tables/goblin_torture_table01', 0), + (1543, 1543, 'staticobjects/targets/training_dummy001', 0), + (1544, 1544, 'staticobjects/tents/goblin_tent01', 0), + (1545, 1545, 'staticobjects/tents/goblin_tent02', 0), + (1546, 1546, 'staticobjects/fallengate_epic01_boss/fallen_wall_01', 0), + (1547, 1547, 'staticobjects/fires/goblin_brazier01', 0), + (1548, 1548, '_exp08/characters/monsters/warboar/warboar_drunder', 1096), + (1549, 1549, 'staticobjects/gravestones/gravestone01', 0), + (1550, 1550, 'staticobjects/rocks/rock01', 0), + (1551, 1551, 'staticobjects/tree/stump01', 0), + (1552, 1552, 'staticobjects/books/halfling_bookstand01', 0), + (1553, 1553, 'staticobjects/tables/cr_librariansdesk001', 0), + (1554, 1554, 'staticobjects/barricades/barricade_corner_left', 0), + (1555, 1555, 'staticobjects/barricades/barricade_corner_right', 0), + (1556, 1556, 'staticobjects/barricades/barricade_long', 0), + (1557, 1557, 'staticobjects/barricades/barricade_short', 0), + (1558, 1558, 'staticobjects/trainingdummy/training_dummy', 0), + (1559, 1559, '_exp08/characters/tool_users/chitari/chitari_base', 1096), + (1560, 1560, 'accessories/wieldable_items/shields/exp08/exp08_shield_celestial_tallonite_blue-gold', 1096), + (1561, 1561, 'accessories/wieldable_items/shields/exp08/exp08_shield_celestial_tallonite_blue-iron', 1096), + (1562, 1562, 'accessories/wieldable_items/shields/exp08/exp08_shield_celestial_tallonite_red-gold', 1096), + (1563, 1563, 'accessories/wieldable_items/shields/exp08/exp08_shield_celestial_tallonite_red-iron', 1096), + (1564, 1564, 'accessories/wieldable_items/weapons/exp08/1h_crush/club_tallonite_bloodstone', 1096), + (1565, 1565, 'accessories/wieldable_items/weapons/exp08/1h_crush/club_tallonite_blue-bluemetal', 1096), + (1566, 1566, 'accessories/wieldable_items/weapons/exp08/1h_crush/club_tallonite_blue-gold', 1096), + (1567, 1567, 'accessories/wieldable_items/weapons/exp08/1h_crush/club_tallonite_obsidian', 1096), + (1568, 1568, 'accessories/wearable_items/cloak/exp07/cloak_gothic3', 1096), + (1569, 1569, 'accessories/wieldable_items/weapons/exp08/1h_crush/club_tallonite_red-bluemetal', 1096), + (1570, 1570, 'accessories/wieldable_items/weapons/exp08/1h_crush/club_tallonite_red-gold', 1096), + (1571, 1571, 'staticobjects/chests/broken_orc_treasure_chest', 0), + (1572, 1572, 'ec/pc/iksar/iksar_female_blk', 0), + (1573, 1573, 'ec/pc/iksar/iksar_female_giraf', 0), + (1574, 1574, 'ec/pc/iksar/iksar_male2', 0), + (1575, 1575, 'ec/pc/iksar/iksar_male3', 0), + (1576, 1576, 'staticobjects/crates/interactive_crate', 0), + (1577, 1577, 'accessories/wieldable_items/weapons/exp08/1h_crush/club_tallonite_velium', 1096), + (1578, 1578, 'staticobjects/freeport/fprt_sewer01_gears01', 0), + (1579, 1579, 'staticobjects/freeport/fprt_sewer01_gears02', 0), + (1580, 1580, 'staticobjects/freeport/fprt_sewer01_gears03', 0), + (1581, 1581, 'staticobjects/pictures/castle_painting_01', 0), + (1582, 1582, 'staticobjects/trainingdummy/dummy_hanging', 0), + (1583, 1583, 'staticobjects/crates/animated_crate', 0), + (1584, 1584, 'creatures/monsters/shadowedman', 0), + (1585, 1585, 'creatures/tu/nightbloodwarrior', 0), + (1586, 1586, 'staticobjects/marinerbell/marinersbell001', 0), + (1587, 1587, 'ec/pc/erudite/erudite_female_tattooevil01', 0), + (1588, 1588, 'ec/pc/erudite/erudite_female_tattooevil02', 0), + (1589, 1589, 'ec/pc/erudite/erudite_female_tattooevil03', 0), + (1590, 1590, 'ec/pc/erudite/erudite_female_tattooevil04', 0), + (1591, 1591, 'ec/pc/erudite/erudite_female_tattooevil05', 0), + (1592, 1592, 'ec/pc/erudite/erudite_female_tattoogood01', 0), + (1593, 1593, 'ec/pc/erudite/erudite_female_tattoogood02', 0), + (1594, 1594, 'ec/pc/erudite/erudite_female_tattoogood03', 0), + (1595, 1595, 'ec/pc/erudite/erudite_female_tattoogood04', 0), + (1596, 1596, 'ec/pc/erudite/erudite_female_tattoogood05', 0), + (1597, 1597, 'ec/pc/erudite/erudite_male_tattooevil01', 0), + (1598, 1598, 'ec/pc/erudite/erudite_male_tattooevil02', 0), + (1599, 1599, 'ec/pc/erudite/erudite_male_tattooevil03', 0), + (1600, 1600, 'ec/pc/erudite/erudite_male_tattooevil04', 0), + (1601, 1601, 'ec/pc/erudite/erudite_male_tattooevil05', 0), + (1602, 1602, 'ec/pc/erudite/erudite_male_tattoogood01', 0), + (1603, 1603, 'ec/pc/erudite/erudite_male_tattoogood02', 0), + (1604, 1604, 'ec/pc/erudite/erudite_male_tattoogood03', 0), + (1605, 1605, 'ec/pc/erudite/erudite_male_tattoogood04', 0), + (1606, 1606, 'ec/pc/erudite/erudite_male_tattoogood05', 0), + (1607, 1607, 'staticobjects/books/halfling_bkstack01', 0), + (1608, 1608, 'staticobjects/lighting/halfling_candle_log01', 0), + (1609, 1609, 'staticobjects/lighting/halfling_lantern01_handledown', 0), + (1610, 1610, 'staticobjects/lighting/halfling_wall_light01_single', 0), + (1611, 1611, 'staticobjects/lighting/halfling_wall_light02_metal', 0), + (1612, 1612, 'staticobjects/lighting/halfling_wall_light02_wood', 0), + (1613, 1613, 'staticobjects/lighting/orc_candle_01', 0), + (1614, 1614, 'staticobjects/lighting/troll_candle_01', 0), + (1615, 1615, 'staticobjects/statues/edk_hand_eye', 0), + (1616, 1616, 'staticobjects/statues/hum_rallosmarker01', 0), + (1617, 1617, 'staticobjects/statues/nekf_darkelf_foci001', 0), + (1618, 1618, 'staticobjects/statues/prexus_minaret01', 0), + (1619, 1619, 'staticobjects/statues/solro_dragontorch01', 0), + (1620, 1620, 'staticobjects/statues/trl_tiki001', 0), + (1621, 1621, 'staticobjects/containers/halfling_bucket01', 0), + (1622, 1622, 'staticobjects/tree/fprt_flowers_purple', 0), + (1623, 1623, 'staticobjects/tree/nbhum_branches_leafy_d', 0), + (1624, 1624, 'staticobjects/tree/river_flowertree_01', 0), + (1625, 1625, 'accessories/wieldable_items/weapons/exp08/1h_crush/mace_tallonite_bloodstone', 1096), + (1626, 1626, 'accessories/wieldable_items/weapons/exp08/1h_crush/mace_tallonite_blue-bluemetal', 1096), + (1627, 1627, 'accessories/wieldable_items/weapons/exp08/1h_crush/mace_tallonite_blue-gold', 1096), + (1628, 1628, 'creatures/monsters/venekor', 0), + (1629, 1629, 'accessories/wieldable_items/weapons/exp08/1h_crush/mace_tallonite_obsidian', 1096), + (1630, 1630, 'accessories/wieldable_items/weapons/exp08/1h_crush/mace_tallonite_red-bluemetal', 1096), + (1631, 1631, 'accessories/wieldable_items/weapons/exp08/1h_crush/mace_tallonite_red-gold', 1096), + (1632, 1632, 'accessories/wieldable_items/weapons/exp08/1h_crush/mace_tallonite_velium', 1096), + (1633, 1633, 'accessories/wieldable_items/weapons/exp08/1h_pierce/exp08_dagger_obsidian', 1096), + (1634, 1634, 'accessories/wieldable_items/weapons/exp08/1h_pierce/exp08_dagger_tallonite_blue', 1096), + (1635, 1635, 'accessories/wieldable_items/tools/fisherman/common001', 0), + (1636, 1636, 'accessories/wieldable_items/tools/fisherman/uncommon001', 0), + (1637, 1637, 'creatures/tu/lizardman_shaman', 0), + (1638, 1638, 'creatures/tu/lizardman_warrior', 0), + (1639, 1639, 'accessories/wieldable_items/weapons/exp08/1h_pierce/exp08_dagger_tallonite_blue_bluemetal', 1096), + (1640, 1640, 'accessories/wieldable_items/weapons/exp08/1h_pierce/exp08_dagger_tallonite_red', 1096), + (1641, 1641, 'accessories/wieldable_items/weapons/exp08/1h_pierce/exp08_dagger_tallonite_red_bluemetal', 1096), + (1642, 1642, 'accessories/wieldable_items/weapons/exp08/1h_sword/exp08_sword_katana_obsidian', 1096), + (1643, 1643, 'accessories/wieldable_items/weapons/exp08/1h_sword/exp08_sword_katana_tallonite_blue', 1096), + (1644, 1644, 'accessories/wearable_items/magus/artifact/low/hood', 0), + (1645, 1645, 'accessories/wieldable_items/weapons/exp08/1h_sword/exp08_sword_katana_tallonite_blue_bluemetal', 1096), + (1646, 1646, 'accessories/wieldable_items/weapons/exp08/1h_sword/exp08_sword_katana_tallonite_red', 1096), + (1647, 1647, 'accessories/wearable_items/magus/artifact/low/pants', 0), + (1648, 1648, 'accessories/wieldable_items/weapons/exp08/1h_sword/exp08_sword_katana_tallonite_red_bluemetal', 1096), + (1649, 1649, 'accessories/wieldable_items/weapons/exp08/2h_sword/exp08_2h_sword_tallonite_blue-gold', 1096), + (1650, 1650, 'accessories/wieldable_items/weapons/exp08/2h_sword/exp08_2h_sword_tallonite_blue-iron', 1096), + (1651, 1651, 'accessories/wieldable_items/weapons/exp08/2h_sword/exp08_2h_sword_tallonite_gem_obsidian', 1096), + (1652, 1652, 'accessories/wieldable_items/weapons/exp08/2h_sword/exp08_2h_sword_tallonite_red-gold', 1096), + (1653, 1653, 'accessories/wieldable_items/weapons/exp08/2h_sword/exp08_2h_sword_tallonite_red-iron', 1096), + (1654, 1654, 'accessories/wieldable_items/weapons/exp08/staff/exp08_staff_fighting_tallonite_bloodstone', 1096), + (1655, 1655, 'accessories/wieldable_items/weapons/exp08/staff/exp08_staff_fighting_tallonite_blue-gold', 1096), + (1656, 1656, 'accessories/wieldable_items/weapons/exp08/staff/exp08_staff_fighting_tallonite_blue-iron', 1096), + (1657, 1657, 'accessories/wieldable_items/weapons/exp08/staff/exp08_staff_fighting_tallonite_obsidian', 1096), + (1658, 1658, 'accessories/wieldable_items/weapons/exp08/staff/exp08_staff_fighting_tallonite_red-gold', 1096), + (1659, 1659, 'staticobjects/chairs/fprt_chair_stool_military01', 0), + (1660, 1660, 'accessories/wieldable_items/weapons/exp08/staff/exp08_staff_fighting_tallonite_red-iron', 1096), + (1661, 1661, 'accessories/wieldable_items/weapons/exp08/staff/exp08_staff_fighting_tallonite_velium', 1096), + (1662, 1662, 'accessories/wieldable_items/weapons/exp08/staff/exp08_staff_mage_tallonite_bloodstone', 1096), + (1663, 1663, 'staticobjects/containers/fprt_bucket_plainlarge001', 0), + (1664, 1664, 'staticobjects/containers/fprt_planter_e', 0), + (1665, 1665, 'staticobjects/containers/fprt_vase_ornateface01', 0), + (1666, 1666, 'staticobjects/fish/fish_01', 0), + (1667, 1667, 'staticobjects/relics/egg_ice_01', 0), + (1668, 1668, 'staticobjects/rocks/rock02', 0), + (1669, 1669, 'staticobjects/rugs/qey_rug_blackcurveslarge001', 0), + (1670, 1670, 'staticobjects/shrub/fanplantgroup_001', 0), + (1671, 1671, 'staticobjects/shrub/nbhum_cropplant02', 0), + (1672, 1672, 'staticobjects/tables/fprt_crucible_table_01_smoke_fire_crucible_03', 0), + (1673, 1673, 'staticobjects/tree/tree_log_01', 0), + (1674, 1674, 'accessories/wieldable_items/weapons/exp08/staff/exp08_staff_mage_tallonite_blue-gold', 1096), + (1675, 1675, 'accessories/wieldable_items/weapons/exp08/staff/exp08_staff_mage_tallonite_blue-iron', 1096), + (1676, 1676, 'accessories/wieldable_items/weapons/exp08/staff/exp08_staff_mage_tallonite_obsidian', 1096), + (1677, 1677, 'accessories/wieldable_items/weapons/exp08/staff/exp08_staff_mage_tallonite_red-gold', 1096), + (1678, 1678, 'staticobjects/tree/feer_plant_pitcher', 0), + (1679, 1679, 'accessories/wieldable_items/weapons/exp08/staff/exp08_staff_mage_tallonite_red-iron', 1096), + (1680, 1680, 'creatures/monsters/dragon_test', 0), + (1681, 1681, 'accessories/wieldable_items/weapons/exp08/staff/exp08_staff_mage_tallonite_velium', 1096), + (1682, 1682, '_exp07/characters/tool_users/tallonite_female/tallonite_female_queen', 1096), + (1683, 1683, '_exp08/characters/monsters/warboar/warboar', 1096), + (1684, 1684, 'accessories/wearable_items/_exp07/storm_giant_chain_armor/storm_giant_pauldron_right', 1096), + (1685, 1685, 'accessories/wearable_items/_exp07/storm_giant_chain_armor/chest', 1096), + (1686, 1686, 'accessories/wearable_items/_exp07/storm_giant_chain_armor/feet', 1096), + (1687, 1687, 'accessories/wearable_items/_exp07/storm_giant_chain_armor/forearms', 1096), + (1688, 1688, 'accessories/wearable_items/_exp07/storm_giant_chain_armor/hands', 1096), + (1689, 1689, 'accessories/wearable_items/_exp07/storm_giant_chain_armor/head', 1096), + (1690, 1690, 'accessories/wearable_items/_exp07/storm_giant_chain_armor/legs', 1096), + (1691, 1691, 'accessories/wearable_items/_exp07/storm_giant_chain_armor/legs_noskirt', 1096), + (1692, 1692, 'accessories/wearable_items/_exp07/storm_giant_chain_armor/shoulders', 1096), + (1693, 1693, 'accessories/wearable_items/_exp07/storm_giant_chain_armor/shoulders_nopauldrons', 1096), + (1694, 1694, 'accessories/wearable_items/magus/uncommon/low/legs', 0), + (1695, 1695, 'accessories/wearable_items/_exp07/storm_giant_chain_armor/skirt', 1096), + (1696, 1696, 'ec/pc/barbarian/barbarian_male_tattoo06', 0), + (1697, 1697, 'ec/pc/barbarian/barbarian_male_tattoo07', 0), + (1698, 1698, 'ec/pc/barbarian/barbarian_male_tattoo08', 0), + (1699, 1699, 'ec/pc/barbarian/barbarian_male_tattoo09', 0), + (1700, 1700, 'ec/pc/barbarian/barbarian_male_tattoo10', 0), + (1701, 1701, 'accessories/wearable_items/_exp07/storm_giant_chain_armor/storm_giant_pauldron_left', 1096), + (1702, 1702, 'staticobjects/boats/boat', 0), + (1703, 1703, 'staticobjects/boats/boat2', 0), + (1704, 1704, 'staticobjects/statues/binding_shrine', 0), + (1705, 1705, 'staticobjects/statues/greatsword_magic', 0), + (1706, 1706, 'accessories/wearable_items/_exp07/rallos_zek_armor/rallos_zek_armor_magus_tintable/skirt', 1096), + (1707, 1707, 'accessories/wearable_items/_exp07/rallos_zek_armor/rallos_zek_armor_magus_tintable/arms', 1096), + (1708, 1708, 'accessories/wearable_items/_exp07/rallos_zek_armor/rallos_zek_armor_magus_tintable/chest', 1096), + (1709, 1709, 'staticobjects/switches/pull_switch_round', 0), + (1710, 1710, 'creatures/tu/bixie_figher', 0), + (1711, 1711, 'creatures/tu/bixie_worker', 0), + (1712, 1712, 'accessories/wearable_items/_exp07/rallos_zek_armor/rallos_zek_armor_magus_tintable/head', 1096), + (1713, 1713, 'staticobjects/signs/general/barrel_single', 0), + (1714, 1714, 'staticobjects/signs/general/road_sign_post', 0), + (1715, 1715, 'staticobjects/signs/general/sign_wall', 0), + (1716, 1716, 'staticobjects/transports/boats/elizabella_default', 0), + (1717, 1717, 'staticobjects/transports/boats/elizabella_orcish', 0), + (1718, 1718, 'staticobjects/transports/doors/cazicthule/door_stone_ornate', 0), + (1719, 1719, 'staticobjects/transports/doors/cazicthule/door_stone_worn', 0), + (1720, 1720, 'staticobjects/transports/relics/cazic_bowl_green', 0), + (1721, 1721, 'staticobjects/transports/relics/cazic_bowl_purple', 0), + (1722, 1722, 'accessories/wearable_items/_exp07/rallos_zek_armor/rallos_zek_armor_magus_tintable/legs', 1096), + (1723, 1723, 'staticobjects/respawn_tent02', 0), + (1724, 1724, 'staticobjects/rocks/qey_boulder02', 0), + (1725, 1725, 'staticobjects/rocks/qey_boulder03', 0), + (1726, 1726, 'staticobjects/shrub/cazic_roota001', 0), + (1727, 1727, 'staticobjects/shrub/cazic_rootb001', 0), + (1728, 1728, 'staticobjects/shrub/cazic_rootc001', 0), + (1729, 1729, 'staticobjects/shrub/cazic_rootd001', 0), + (1730, 1730, 'staticobjects/shrub/cazic_roote001', 0), + (1731, 1731, 'staticobjects/shrub/cazic_rootg001', 0), + (1732, 1732, 'staticobjects/shrub/cazic_rooth001', 0), + (1733, 1733, 'staticobjects/shrub/cazic_rootj001', 0), + (1734, 1734, 'staticobjects/shrub/cazic_rootk001', 0), + (1735, 1735, 'staticobjects/shrub/feer_plant_bigleaf', 0), + (1736, 1736, 'staticobjects/shrub/feer_plant_fern1', 0), + (1737, 1737, 'staticobjects/shrub/feer_plant_reid', 0), + (1738, 1738, 'staticobjects/shrub/flower', 0), + (1739, 1739, 'staticobjects/shrub/mushroom01', 0), + (1740, 1740, 'staticobjects/shrub/mushroom01_grp5', 0), + (1741, 1741, 'staticobjects/shrub/mushroom01_sk_green', 0), + (1742, 1742, 'staticobjects/shrub/mushroom01_sk_purple', 0), + (1743, 1743, 'staticobjects/shrub/mushroom02', 0), + (1744, 1744, 'staticobjects/shrub/mushroom02_sk_green', 0), + (1745, 1745, 'staticobjects/shrub/mushroom02_sk_purple', 0), + (1746, 1746, 'staticobjects/shrub/mushroom03', 0), + (1747, 1747, 'staticobjects/shrub/mushroom04', 0), + (1748, 1748, 'staticobjects/shrub/nekf_mushroom_009', 0), + (1749, 1749, 'staticobjects/statues/holysymbol01', 0), + (1750, 1750, 'staticobjects/tree/bb_stump01', 0), + (1751, 1751, 'staticobjects/tree/bb_stump02', 0), + (1752, 1752, 'staticobjects/tree/qey_adv04_log01', 0), + (1753, 1753, 'staticobjects/tree/qey_adv04_log03', 0), + (1754, 1754, 'staticobjects/tree/qey_adv04_stump01', 0), + (1755, 1755, 'staticobjects/tree/qey_adv04_stump02', 0), + (1756, 1756, 'staticobjects/tree/qey_adv04_stump03', 0), + (1757, 1757, 'staticobjects/tree/qey_adv04_stump04', 0), + (1758, 1758, 'staticobjects/tree/qey_adv04_stumpcut01', 0), + (1759, 1759, 'accessories/wieldable_items/weapons/exp08/staff/exp08_staff_mage_tallonite_red-gold_fx', 1096), + (1760, 1760, 'accessories/wieldable_items/weapons/exp08/staff/exp08_staff_fighting_tallonite_blue-gold_fx', 1096), + (1761, 1761, 'accessories/wieldable_items/weapons/exp08/staff/exp08_staff_fighting_tallonite_blue-iron_fx', 1096), + (1762, 1762, 'accessories/wieldable_items/weapons/exp08/staff/exp08_staff_fighting_tallonite_red-iron_fx', 1096), + (1763, 1763, 'projectiles/spell_mug', 1096), + (1764, 1764, 'accessories/wearable_items/snapons/backpacks/backpack_othmir_swivel/backpack_othmir_turquoise', 1096), + (1765, 1765, 'accessories/wearable_items/snapons/backpacks/backpack_othmir_swivel/backpack_othmir_blue', 1096), + (1766, 1766, 'accessories/wearable_items/snapons/backpacks/backpack_othmir_swivel/backpack_othmir_green', 1096), + (1767, 1767, 'accessories/wieldable_items/weapons/exp08/1h_crush/hammer_nature_frost', 1096), + (1768, 1768, 'accessories/wieldable_items/weapons/exp08/1h_crush/wand_nature', 1096), + (1769, 1769, 'accessories/wieldable_items/weapons/exp08/1h_crush/wand_nature_evil', 1096), + (1770, 1770, 'accessories/wieldable_items/weapons/exp08/1h_crush/wand_nature_frost', 1096), + (1771, 1771, 'accessories/wieldable_items/weapons/exp08/1h_crush/hammer_nature', 1096), + (1772, 1772, 'accessories/wieldable_items/weapons/exp08/1h_crush/hammer_nature_evil', 1096), + (1773, 1773, 'accessories/wieldable_items/weapons/exp08/1h_pierce/exp08_dagger_nature_frost', 1096), + (1774, 1774, 'accessories/wieldable_items/weapons/exp08/1h_pierce/exp08_dagger_nature', 1096), + (1775, 1775, 'accessories/wieldable_items/weapons/exp08/1h_pierce/exp08_dagger_nature_evil', 1096), + (1776, 1776, 'accessories/wieldable_items/weapons/exp08/1h_sword/exp08_sword_nature_frost', 1096), + (1777, 1777, 'accessories/wieldable_items/weapons/exp08/1h_sword/exp08_sword_nature', 1096), + (1778, 1778, 'accessories/wieldable_items/weapons/exp08/1h_sword/exp08_sword_nature_evil', 1096), + (1779, 1779, 'accessories/wieldable_items/weapons/exp08/2h_crush/exp08_2h_hammer_nature_dark_red', 1096), + (1780, 1780, 'accessories/wieldable_items/weapons/exp08/2h_crush/exp08_2h_hammer_nature', 1096), + (1781, 1781, 'accessories/wieldable_items/weapons/exp08/2h_crush/exp08_2h_hammer_nature_dark', 1096), + (1782, 1782, 'accessories/wieldable_items/weapons/exp08/staff/exp08_staff_mage_nature_frost', 1096), + (1783, 1783, 'accessories/wieldable_items/weapons/exp08/staff/exp08_spear_nature', 1096), + (1784, 1784, 'accessories/wieldable_items/weapons/exp08/staff/exp08_spear_nature_evil', 1096), + (1785, 1785, 'accessories/wieldable_items/weapons/exp08/staff/exp08_spear_nature_frost', 1096), + (1786, 1786, 'accessories/wieldable_items/weapons/exp08/staff/exp08_staff_mage_nature', 1096), + (1787, 1787, 'accessories/wieldable_items/weapons/exp08/staff/exp08_staff_mage_nature_evil', 1096), + (1788, 1788, 'accessories/wieldable_items/shields/exp08/exp08_shield_celestial_tallonite_gem_obsidian', 1096), + (1789, 1789, 'accessories/wieldable_items/shields/exp08/exp08_shield_celestial_tallonite_gem_bloodstone', 1096), + (1790, 1790, 'accessories/wieldable_items/shields/exp08/exp08_shield_celestial_tallonite_gem_frost', 1096), + (1791, 1791, 'accessories/wieldable_items/weapons/exp08/1h_crush/wand_nature_frost_fx', 1096), + (1792, 1792, 'accessories/wieldable_items/weapons/exp08/1h_crush/hammer_nature_evil_fx', 1096), + (1793, 1793, 'accessories/wieldable_items/weapons/exp08/1h_crush/hammer_nature_frost_fx', 1096), + (1794, 1794, 'accessories/wieldable_items/weapons/exp08/1h_crush/wand_nature_evil_fx', 1096), + (1795, 1795, 'accessories/wieldable_items/weapons/exp08/1h_pierce/exp08_dagger_nature_frost_fx', 1096), + (1796, 1796, 'accessories/wieldable_items/weapons/exp08/1h_pierce/exp08_dagger_nature_evil_fx', 1096), + (1797, 1797, 'accessories/wieldable_items/weapons/exp08/1h_sword/exp08_sword_nature_frost_fx', 1096), + (1798, 1798, 'accessories/wieldable_items/weapons/exp08/1h_sword/exp08_sword_nature_evil_fx', 1096), + (1799, 1799, 'accessories/wieldable_items/weapons/exp08/2h_crush/exp08_2h_hammer_nature_dark_red_fx', 1096), + (1800, 1800, 'accessories/wieldable_items/weapons/exp08/2h_crush/exp08_2h_hammer_nature_dark_fx', 1096), + (1801, 1801, 'accessories/wieldable_items/weapons/exp08/staff/exp08_staff_mage_nature_frost_fx', 1096), + (1802, 1802, 'accessories/wieldable_items/weapons/exp08/staff/exp08_spear_nature_evil_fx', 1096), + (1803, 1803, 'accessories/wieldable_items/weapons/exp08/staff/exp08_spear_nature_frost_fx', 1096), + (1804, 1804, 'accessories/wieldable_items/weapons/exp08/staff/exp08_staff_mage_nature_evil_fx', 1096), + (1805, 1805, 'creatures/mounts/flying_disc/flying_disc_tinker_deluxe_02', 1096), + (1806, 1806, 'creatures/mounts/flying_disc/flying_disc_tinker_01', 1096), + (1807, 1807, 'creatures/mounts/flying_disc/flying_disc_tinker_02', 1096), + (1808, 1808, 'creatures/mounts/flying_disc/flying_disc_tinker_deluxe_01', 1096), + (1809, 1809, 'creatures/mounts/flying_disc/flying_disc_tinker_deluxe_01green', 1096), + (1810, 1810, 'creatures/mounts/flying_disc/flying_disc_tinker_deluxe_01red', 1096), + (1811, 1811, 'creatures/mounts/flying_disc/flying_disc_tinker_deluxe_02blue', 1096), + (1812, 1812, 'creatures/mounts/flying_disc/flying_disc_tinker_deluxe_02green', 1096), + (1813, 1813, 'staticobjects/blacksmith/wall_wallchain_dwarf_forge_dpo', 1096), + (1814, 1814, 'creatures/mounts/pegasus_mount/pegasus_mount_base', 1096), + (1815, 1815, 'staticobjects/soe_wallet/wheel_of_chance_dpo', 1096), + (1816, 1816, 'staticobjects/soe_wallet/slot_machine_dpo', 1096), + (1817, 1817, 'staticobjects/tools/vastydeep01_objects01_shovel01', 1096), + (1818, 1818, 'staticobjects/tools/vastydeep01_objects01_rake01', 1096), + (1819, 1819, 'staticobjects/liveevent/tinkerfest/dpo_tinkerfest_distillery_stage03', 1096), + (1820, 1820, 'staticobjects/liveevent/tinkerfest/dpo_tinkerfest_distillery_stage02', 1096), + (1821, 1821, 'accessories/wearable_items/_exp08/robe_elemental/fire/chest', 1096), + (1822, 1822, 'accessories/wearable_items/_exp08/robe_elemental/fire/feet', 1096), + (1823, 1823, 'accessories/wearable_items/_exp08/robe_elemental/fire/hands', 1096), + (1824, 1824, 'accessories/wearable_items/_exp08/robe_elemental/fire/head', 1096), + (1825, 1825, 'accessories/wearable_items/_exp08/robe_elemental/fire/head_collar', 1096), + (1826, 1826, 'accessories/wearable_items/_exp08/robe_elemental/fire/pants', 1096), + (1827, 1827, 'accessories/wearable_items/_exp08/robe_elemental/fire/skirt', 1096), + (1828, 1828, 'accessories/wearable_items/_exp08/robe_elemental/water/chest', 1096), + (1829, 1829, 'accessories/wearable_items/_exp08/robe_elemental/water/feet', 1096), + (1830, 1830, 'accessories/wearable_items/_exp08/robe_elemental/water/hands', 1096), + (1831, 1831, 'accessories/wearable_items/_exp08/robe_elemental/water/head', 1096), + (1832, 1832, 'accessories/wearable_items/_exp08/robe_elemental/water/head_collar', 1096), + (1833, 1833, 'accessories/wearable_items/_exp08/robe_elemental/water/pants', 1096), + (1834, 1834, 'accessories/wearable_items/_exp08/robe_elemental/water/skirt', 1096), + (1835, 1835, 'staticobjects/soe_wallet/craps_table_dpo', 1096), + (1836, 1836, 'accessories/wieldable_items/weapons/exp08/1h_sword/exp08_sword_elemental_stormblade', 1096), + (1837, 1837, 'accessories/wieldable_items/weapons/exp08/2h_crush/exp08_2h_hammer_elemental_thunderhammer', 1096), + (1838, 1838, 'accessories/wieldable_items/weapons/exp08/2h_sword/exp08_2h_sword_elemental_windblade', 1096), + (1839, 1839, 'accessories/wieldable_items/weapons/exp08/2h_sword/exp08_2h_axe_elemental_earthshatter', 1096), + (1840, 1840, 'accessories/wearable_items/cloak/exp08/cloak_feathered_raven', 1096), + (1841, 1841, 'accessories/wearable_items/cloak/exp08/cloak_feathered_white', 1096), + (1842, 1842, 'accessories/wearable_items/cloak/exp08/cloak_gothic01', 1096), + (1843, 1843, 'code/test', 0), + (1844, 1844, 'accessories/wearable_items/cloak/exp08/cloak_powered01', 1096), + (1845, 1845, 'staticobjects/cauldron/cauldron', 0), + (1846, 1846, 'accessories/wearable_items/magus/uncommon/low/forearms', 0), + (1847, 1847, 'staticobjects/bones/human_skeleton_bones', 0), + (1848, 1848, 'staticobjects/hay/haybail_1', 0), + (1849, 1849, 'accessories/wearable_items/cloak/exp08/cloak_feathered_white_short', 1096), + (1850, 1850, 'accessories/wearable_items/cloak/exp08/cloak_feathered_raven_short', 1096), + (1851, 1851, 'accessories/wearable_items/cloak/exp08/cloak_tinkered01', 1096), + (1852, 1852, 'accessories/wearable_items/magus/artifact/medium/hood', 0), + (1853, 1853, 'accessories/wearable_items/magus/artifact/medium/pants', 0), + (1854, 1854, 'staticobjects/gravestones/gravestone02', 0), + (1855, 1855, 'staticobjects/urns/small_urn', 0), + (1856, 1856, 'staticobjects/coffins_and_sarcophagus/simple_wooden_coffin', 0), + (1857, 1857, 'staticobjects/doors/wooden_door01', 0), + (1858, 1858, 'staticobjects/statues/monk_statue', 0), + (1859, 1859, 'staticobjects/world_devices/trdskl_qey_forge01', 0), + (1860, 1860, 'staticobjects/weapons/dagger', 0), + (1861, 1861, 'accessories/wearable_items/cloak/exp08/cloak_tinkered01_copper', 1096), + (1862, 1862, 'accessories/wearable_items/magus/uncommon/medium/hood', 0), + (1863, 1863, 'accessories/wearable_items/cloak/exp08/cloak_tinkered01_treadmill_copper', 1096), + (1864, 1864, 'accessories/wearable_items/magus/artifact/high/arms', 0), + (1865, 1865, 'accessories/wearable_items/magus/rare/medium/shoulders', 0), + (1866, 1866, 'accessories/wearable_items/cloak/exp08/cloak_tinkered01_treadmill_tin', 1096), + (1867, 1867, 'accessories/wearable_items/cloak/exp08/cloak_tinkered02_copper', 1096), + (1868, 1868, 'accessories/wearable_items/cloak/exp08/cloak_tinkered02_tin', 1096), + (1869, 1869, 'accessories/wearable_items/clothing/common/high/arms', 0), + (1870, 1870, 'accessories/wearable_items/clothing/common/high/chest', 0), + (1871, 1871, 'accessories/wearable_items/clothing/common/high/legs', 0), + (1872, 1872, 'accessories/wearable_items/clothing/common/low/arms', 0), + (1873, 1873, 'accessories/wearable_items/clothing/common/low/chest', 0), + (1874, 1874, 'accessories/wearable_items/clothing/common/low/legs', 0), + (1875, 1875, 'accessories/wearable_items/clothing/common/medium/arms', 0), + (1876, 1876, 'accessories/wearable_items/clothing/common/medium/chest', 0), + (1877, 1877, 'accessories/wearable_items/clothing/common/medium/legs', 0), + (1878, 1878, 'accessories/wearable_items/clothing/uncommon/high/arms', 0), + (1879, 1879, 'accessories/wearable_items/clothing/uncommon/high/chest', 0), + (1880, 1880, 'accessories/wearable_items/clothing/uncommon/high/legs', 0), + (1881, 1881, 'staticobjects/doors/stormhold_door01', 0), + (1882, 1882, 'accessories/wearable_items/_exp08/robe_elemental/air/skirt', 1096), + (1883, 1883, 'staticobjects/relics/magic_globe', 0), + (1884, 1884, 'accessories/wearable_items/journeyman/journeyman_leather/chest', 0), + (1885, 1885, 'accessories/wearable_items/journeyman/journeyman_leather/feet', 0), + (1886, 1886, 'accessories/wearable_items/journeyman/journeyman_leather/forearms', 0), + (1887, 1887, 'accessories/wearable_items/journeyman/journeyman_leather/hands', 0), + (1888, 1888, 'accessories/wearable_items/journeyman/journeyman_leather/head', 0), + (1889, 1889, 'accessories/wearable_items/journeyman/journeyman_leather/legs', 0), + (1890, 1890, 'accessories/wearable_items/journeyman/journeyman_leather/shoulders', 0), + (1891, 1891, 'accessories/wearable_items/brigandine/common/low/skirt', 0), + (1892, 1892, 'accessories/wearable_items/leather/plain/stitched/chest', 0), + (1893, 1893, 'accessories/wearable_items/leather/plain/stitched/feet', 0), + (1894, 1894, 'accessories/wearable_items/leather/plain/stitched/forearms', 0), + (1895, 1895, 'accessories/wearable_items/leather/plain/stitched/hands', 0), + (1896, 1896, 'accessories/wearable_items/leather/plain/stitched/head', 0), + (1897, 1897, 'accessories/wearable_items/leather/plain/stitched/legs', 0), + (1898, 1898, 'accessories/wearable_items/leather/plain/stitched/shoulders', 0), + (1899, 1899, 'accessories/wearable_items/leather/plain/stitched/skirt', 0), + (1900, 1900, 'staticobjects/banners/gnoll_banner_spear', 0), + (1901, 1901, 'accessories/wearable_items/_exp08/robe_elemental/air/chest', 1096), + (1902, 1902, 'accessories/wearable_items/_exp08/robe_elemental/air/feet', 1096), + (1903, 1903, 'staticobjects/benches/floor_bench_human_militia', 0), + (1904, 1904, 'staticobjects/boats/canoe', 0), + (1905, 1905, 'staticobjects/brazier/floor_brazier_erudite_steam', 0), + (1906, 1906, 'staticobjects/carts/covered_cart', 0), + (1907, 1907, 'staticobjects/chairs/floor_chair_halfling_rocking', 0), + (1908, 1908, 'staticobjects/chests/gnoll_bone_chest', 0), + (1909, 1909, 'staticobjects/containers/barrel_small_light', 0), + (1910, 1910, 'staticobjects/crystals/crystals_01', 0), + (1911, 1911, 'staticobjects/crystals/crystals_02', 0), + (1912, 1912, 'staticobjects/crystals/crystals_03', 0), + (1913, 1913, 'staticobjects/dressers/floor_dresser_elf_elddar', 0), + (1914, 1914, 'staticobjects/lighting/ceiling_chandelier_darkelf_candle', 0), + (1915, 1915, 'accessories/wearable_items/_exp08/robe_elemental/air/hands', 1096), + (1916, 1916, 'staticobjects/pictures/wall_painting_orc_oil', 0), + (1917, 1917, 'staticobjects/relics/diamond_ring', 0), + (1918, 1918, 'staticobjects/trainingdummy/scarecrow', 0), + (1919, 1919, 'staticobjects/blacksmith/floor_anvil_any_blacksmith', 0), + (1920, 1920, 'staticobjects/blacksmith/floor_bellows_any_blacksmith', 0), + (1921, 1921, 'staticobjects/blacksmith/floor_oven_any_blacksmith', 0), + (1922, 1922, 'staticobjects/blacksmith/floor_table_any_blacksmith', 0), + (1923, 1923, 'staticobjects/clothspinners/floor_clothrack_any_clothspinners', 0), + (1924, 1924, 'staticobjects/barrels/floor_barrel01_any_wood', 0), + (1925, 1925, 'staticobjects/barrels/floor_barrel02_any_wood', 0), + (1926, 1926, 'staticobjects/barrels/floor_barrel03_any_wood', 0), + (1927, 1927, 'staticobjects/beds/floor_bed_halfling_wood', 0), + (1928, 1928, 'staticobjects/cages/ceiling_birdcage01_any_wood', 0), + (1929, 1929, 'staticobjects/cages/ceiling_birdcage02_any_wood', 0), + (1930, 1930, 'staticobjects/cages/ceiling_birdcage03_any_wood', 0), + (1931, 1931, 'staticobjects/cages/ceiling_birdcage04_any_wood', 0), + (1932, 1932, 'staticobjects/cages/ceiling_birdcage05_any_wood', 0), + (1933, 1933, 'staticobjects/cages/ceiling_birdcage06_any_wood', 0), + (1934, 1934, 'staticobjects/chests/floor_chest01_any_ironband', 0), + (1935, 1935, 'staticobjects/chests/floor_chest01_any_wood', 0), + (1936, 1936, 'staticobjects/chests/floor_chest02_any_ironband', 0), + (1937, 1937, 'staticobjects/chests/floor_chest02_any_wood', 0), + (1938, 1938, 'staticobjects/clothspinners/floor_loom_any_clothspinners', 0), + (1939, 1939, 'staticobjects/clothspinners/floor_sewingtable_any_clothspinners', 0), + (1940, 1940, 'staticobjects/clothspinners/floor_spinningwheel_any_clothspinners', 0), + (1941, 1941, 'staticobjects/containers/floor_bucket_any_wood', 0), + (1942, 1942, 'staticobjects/containers/floor_trough01_any_wood', 0), + (1943, 1943, 'staticobjects/containers/floor_trough02_any_wood', 0), + (1944, 1944, 'staticobjects/containers/floor_tub_any_wood', 0), + (1945, 1945, 'staticobjects/containers/floor_vase01_any_clay', 0), + (1946, 1946, 'staticobjects/containers/floor_vase02_any_clay', 0), + (1947, 1947, 'staticobjects/containers/floor_vase03_any_clay', 0), + (1948, 1948, 'staticobjects/containers/floor_vase04_any_clay', 0), + (1949, 1949, 'staticobjects/crates/floor_crate01_any_wood', 0), + (1950, 1950, 'staticobjects/crates/floor_crate02_any_wood', 0), + (1951, 1951, 'staticobjects/crates/floor_crate03_any_wood', 0), + (1952, 1952, 'staticobjects/crates/floor_crate04_any_wood', 0), + (1953, 1953, 'staticobjects/crystals/floor_globe_any_crystal', 0), + (1954, 1954, 'staticobjects/dressers/floor_dresser_halfling_wood', 0), + (1955, 1955, 'staticobjects/kegs/floor_keg01_any_wood', 0), + (1956, 1956, 'staticobjects/kegs/floor_keg02_any_wood', 0), + (1957, 1957, 'staticobjects/nautical/floor_steeringwheelstand_any_wood', 0), + (1958, 1958, 'staticobjects/pictures/wall_painting_halfling_milestoners', 0), + (1959, 1959, 'staticobjects/urns/floor_urn01_any_clay', 0), + (1960, 1960, 'staticobjects/urns/floor_urn02_any_clay', 0), + (1961, 1961, 'creatures/tu/lord_everling', 0), + (1962, 1962, 'staticobjects/beds/floor_bed01_any_farmer', 0), + (1963, 1963, 'staticobjects/beds/floor_bed02_any_farmer', 0), + (1964, 1964, 'staticobjects/beds/floor_bed_any_bunks', 0), + (1965, 1965, 'staticobjects/beds/floor_bed_any_merchant', 0), + (1966, 1966, 'staticobjects/bookcases/floor_bookcase_any_fancy', 0), + (1967, 1967, 'staticobjects/bookcases/floor_bookcase_any_wood', 0), + (1968, 1968, 'staticobjects/chairs/floor_chair_any_fancy', 0), + (1969, 1969, 'staticobjects/chairs/floor_chair_any_judicial', 0), + (1970, 1970, 'staticobjects/chairs/floor_chair_any_leather', 0), + (1971, 1971, 'staticobjects/chairs/floor_chair_any_wood', 0), + (1972, 1972, 'staticobjects/chairs/floor_stool_any_leather', 0), + (1973, 1973, 'staticobjects/chairs/floor_stool_any_wood', 0), + (1974, 1974, 'staticobjects/counters/floor_counter_any_2mlong', 0), + (1975, 1975, 'staticobjects/counters/floor_counter_any_3mlong', 0), + (1976, 1976, 'staticobjects/counters/floor_counter_any_4mlong', 0), + (1977, 1977, 'staticobjects/counters/floor_counter_any_5mlong', 0), + (1978, 1978, 'staticobjects/counters/floor_counter_any_corner', 0), + (1979, 1979, 'staticobjects/dressers/floor_dresser_any_fancy', 0), + (1980, 1980, 'staticobjects/dressers/floor_dresser_any_tall', 0), + (1981, 1981, 'staticobjects/dressers/floor_dresser_any_wood', 0), + (1982, 1982, 'staticobjects/shelfs/wall_shelf_any_2mlong', 0), + (1983, 1983, 'staticobjects/shelfs/wall_shelf_any_4mlong', 0), + (1984, 1984, 'staticobjects/shelfs/wall_shelf_any_corner', 0), + (1985, 1985, 'staticobjects/signs/general/base_sign', 0), + (1986, 1986, 'staticobjects/statues/floor_statue_human_erudin', 0), + (1987, 1987, 'staticobjects/statues/odd_creature', 0), + (1988, 1988, 'staticobjects/tables/floor_table01_any_fancy', 0), + (1989, 1989, 'staticobjects/tables/floor_table01_any_marble', 0), + (1990, 1990, 'staticobjects/tables/floor_table02_any_fancy', 0), + (1991, 1991, 'staticobjects/tables/floor_table02_any_marble', 0), + (1992, 1992, 'staticobjects/tables/floor_table03_any_marble', 0), + (1993, 1993, 'staticobjects/tables/floor_table04_any_marble', 0), + (1994, 1994, 'staticobjects/tables/floor_table_any_judicial', 0), + (1995, 1995, 'staticobjects/tables/floor_table_any_long', 0), + (1996, 1996, 'staticobjects/tables/floor_table_any_short', 0), + (1997, 1997, 'staticobjects/beds/floor_bedroll01_any_dirty', 0), + (1998, 1998, 'staticobjects/beds/floor_bedroll02_any_dirty', 0), + (1999, 1999, 'staticobjects/beds/floor_bed_human_step', 0), + (2000, 2000, 'staticobjects/beds/floor_bed_human_wood', 0), + (2001, 2001, 'staticobjects/benches/floor_bench01_human_plain', 0), + (2002, 2002, 'staticobjects/benches/floor_bench02_human_plain', 0), + (2003, 2003, 'staticobjects/benches/floor_bench03_human_plain', 0), + (2004, 2004, 'staticobjects/benches/floor_bench04_human_plain', 0), + (2005, 2005, 'staticobjects/benches/floor_bench05_human_plain', 0), + (2006, 2006, 'staticobjects/bookcases/floor_bookcase01_human_step', 0), + (2007, 2007, 'staticobjects/bookcases/floor_bookcase02_human_step', 0), + (2008, 2008, 'staticobjects/bookcases/floor_bookcase_any_slayer', 0), + (2009, 2009, 'staticobjects/chairs/floor_chair01_gnome_plain', 0), + (2010, 2010, 'staticobjects/chairs/floor_chair01_human_hood', 0), + (2011, 2011, 'staticobjects/chairs/floor_chair01_human_plain', 0), + (2012, 2012, 'staticobjects/chairs/floor_chair02_gnome_plain', 0), + (2013, 2013, 'staticobjects/chairs/floor_chair02_human_plain', 0), + (2014, 2014, 'staticobjects/chairs/floor_chair_human_weathered', 0), + (2015, 2015, 'staticobjects/chairs/floor_stool01_human_plain', 0), + (2016, 2016, 'staticobjects/chairs/floor_stool02_human_plain', 0), + (2017, 2017, 'staticobjects/containers/floor_bucket01_human_wood', 0), + (2018, 2018, 'staticobjects/containers/floor_bucket02_human_wood', 0), + (2019, 2019, 'staticobjects/fires/small_ring_fire', 0), + (2020, 2020, 'staticobjects/tents/grey_lean_to', 0), + (2021, 2021, 'staticobjects/barrels/floor_barrel_any_wood01', 0), + (2022, 2022, 'staticobjects/barrels/floor_barrel_any_wood02', 0), + (2023, 2023, 'staticobjects/barrels/floor_barrel_any_wood03', 0), + (2024, 2024, 'accessories/wearable_items/_exp08/robe_elemental/air/head', 1096), + (2025, 2025, 'staticobjects/brazier/floor_brazier_human_military', 0), + (2026, 2026, 'staticobjects/chairs/floor_chair_human_plain01', 0), + (2027, 2027, 'staticobjects/chairs/floor_stool_human_plain01', 0), + (2028, 2028, 'staticobjects/chests/floor_chest_human_step01', 0), + (2029, 2029, 'staticobjects/chests/floor_chest_human_step02', 0), + (2030, 2030, 'staticobjects/chests/floor_chest_human_wood', 0), + (2031, 2031, 'staticobjects/doors/fprt_door_plain', 0), + (2032, 2032, 'staticobjects/shelves/wall_shelf_any_2mlong', 0), + (2033, 2033, 'staticobjects/shelves/wall_shelf_any_4mlong', 0), + (2034, 2034, 'staticobjects/shelves/wall_shelf_any_corner', 0), + (2035, 2035, 'staticobjects/shelves/wall_shelf_human_2mlong', 0), + (2036, 2036, 'staticobjects/shelves/wall_shelf_human_simple01', 0), + (2037, 2037, 'staticobjects/tables/floor_table_gnome_plain01', 0), + (2038, 2038, 'staticobjects/tables/floor_table_gnome_plain02', 0), + (2039, 2039, 'staticobjects/tables/floor_table_human_generic01', 0), + (2040, 2040, 'staticobjects/tables/floor_table_human_generic02', 0), + (2041, 2041, 'staticobjects/tables/floor_table_human_hood01', 0), + (2042, 2042, 'staticobjects/tables/floor_table_human_hood02', 0), + (2043, 2043, 'staticobjects/tables/floor_table_human_hood03', 0), + (2044, 2044, 'staticobjects/tables/floor_table_human_hood04', 0), + (2045, 2045, 'staticobjects/tables/floor_table_human_hood05', 0), + (2046, 2046, 'staticobjects/tables/floor_table_human_hood06', 0), + (2047, 2047, 'staticobjects/tables/floor_table_human_plain01', 0), + (2048, 2048, 'staticobjects/tables/floor_table_human_plain02', 0), + (2049, 2049, 'staticobjects/tables/floor_table_human_plain03', 0), + (2050, 2050, 'staticobjects/tables/floor_table_human_step01', 0), + (2051, 2051, 'staticobjects/tables/floor_table_human_step02', 0), + (2052, 2052, 'staticobjects/beds/floor_bed_highelf_ornate', 0), + (2053, 2053, 'staticobjects/beds/floor_bed_woodelf_single', 0), + (2054, 2054, 'staticobjects/chairs/floor_chair_darkelf_wood', 0), + (2055, 2055, 'staticobjects/chairs/floor_chair_ogre_rock', 0), + (2056, 2056, 'staticobjects/chairs/floor_chair_troll_wood', 0), + (2057, 2057, 'staticobjects/chairs/floor_chair_woodelf_hood', 0), + (2058, 2058, 'staticobjects/chairs/floor_stool_any_wood01', 0), + (2059, 2059, 'staticobjects/chairs/floor_stool_highelf_wood', 0), + (2060, 2060, 'staticobjects/crates/floor_crate_troll_wood', 0), + (2061, 2061, 'staticobjects/lighting/floor_torch_ogre_rock', 0), + (2062, 2062, 'staticobjects/racks/floor_rack_darkelf_wine', 0), + (2063, 2063, 'staticobjects/tables/floor_table_darkelf_hood', 0), + (2064, 2064, 'staticobjects/tables/floor_table_gnome_round', 0), + (2065, 2065, 'staticobjects/tables/floor_table_highelf_tavern01', 0), + (2066, 2066, 'staticobjects/tables/floor_table_highelf_tavern02', 0), + (2067, 2067, 'staticobjects/tables/floor_table_ogre_rock', 0), + (2068, 2068, 'staticobjects/tables/floor_table_troll_small', 0), + (2069, 2069, 'staticobjects/tables/floor_table_woodelf_hood', 0), + (2070, 2070, 'staticobjects/blacksmith/wall_wallchain_dwarf_forge', 0), + (2071, 2071, 'staticobjects/key/key_oversized', 0), + (2072, 2072, 'staticobjects/lighting/floor_lantern_dwarf_oil', 0), + (2073, 2073, 'staticobjects/containers/floor_bucket_barbarian_wood', 0), + (2074, 2074, 'staticobjects/containers/floor_bucket_dwarf_wood', 0), + (2075, 2075, 'staticobjects/containers/floor_pod_barbarian_iron', 0), + (2076, 2076, 'staticobjects/containers/floor_vase_froglok_clay', 0), + (2077, 2077, 'staticobjects/containers/floor_vase_halfelf_clay01', 0), + (2078, 2078, 'staticobjects/containers/floor_vase_halfelf_clay02', 0), + (2079, 2079, 'staticobjects/containers/floor_vase_halfelf_clay03', 0), + (2080, 2080, 'staticobjects/lighting/floor_floorlamp_human_candle', 0), + (2081, 2081, 'staticobjects/light_sources_player_housing_only/ceiling_chandelier_darkelf_candle', 0), + (2082, 2082, 'staticobjects/light_sources_player_housing_only/floor_brazier_human_military', 0), + (2083, 2083, 'staticobjects/light_sources_player_housing_only/floor_floorlamp_human_candle', 0), + (2084, 2084, 'staticobjects/light_sources_player_housing_only/halfling_candle_log01', 0), + (2085, 2085, 'staticobjects/light_sources_player_housing_only/halfling_lantern01_handledown', 0), + (2086, 2086, 'staticobjects/light_sources_player_housing_only/halfling_wall_light01_single', 0), + (2087, 2087, 'staticobjects/light_sources_player_housing_only/halfling_wall_light02_metal', 0), + (2088, 2088, 'staticobjects/light_sources_player_housing_only/halfling_wall_light02_wood', 0), + (2089, 2089, 'staticobjects/light_sources_player_housing_only/orc_candle_01', 0), + (2090, 2090, 'staticobjects/light_sources_player_housing_only/qst_galintos_candelabra_1', 0), + (2091, 2091, 'staticobjects/light_sources_player_housing_only/troll_candle_01', 0), + (2092, 2092, 'staticobjects/musical/floor_drum_halfling_wood', 0), + (2093, 2093, 'accessories/wearable_items/_exp08/robe_elemental/air/head_collar', 1096), + (2094, 2094, 'staticobjects/tables/floor_table_barbarian_wood', 0), + (2095, 2095, 'staticobjects/tables/floor_table_halfling_wood', 0), + (2096, 2096, 'staticobjects/beds/floor_bed_human_ornate', 0), + (2097, 2097, 'staticobjects/beds/floor_bed_human_ornate01', 0), + (2098, 2098, 'staticobjects/chairs/floor_chair_human_ornate01', 0), + (2099, 2099, 'staticobjects/chairs/floor_chair_human_ornate02', 0), + (2100, 2100, 'staticobjects/chairs/floor_chair_kerra_wood', 0), + (2101, 2101, 'staticobjects/chests/floor_chest_iksar_skulls', 0), + (2102, 2102, 'staticobjects/chests/floor_chest_ratonga_wood', 0), + (2103, 2103, 'staticobjects/containers/floor_bucket_froglok_wood', 0), + (2104, 2104, 'staticobjects/containers/floor_vase_erudite_marble', 0), + (2105, 2105, 'staticobjects/dressers/floor_dresser_kerra_wood', 0), + (2106, 2106, 'staticobjects/dressers/floor_dresser_ratonga_wood', 0), + (2107, 2107, 'staticobjects/kegs/floor_keg_ratonga_small', 0), + (2108, 2108, 'staticobjects/kitchen/floor_stove_human_iron', 0), + (2109, 2109, 'staticobjects/lighting/floor_floorlamp_kerra_ornate', 0), + (2110, 2110, 'staticobjects/lighting/floor_lamp_erudite_plain', 0), + (2111, 2111, 'staticobjects/mounts/wall_mount_iksar_boarhead', 0), + (2112, 2112, 'staticobjects/posts/floor_post_iksar_skull', 0), + (2113, 2113, 'staticobjects/shelves/wall_shelf_froglok_ironwood', 0), + (2114, 2114, 'staticobjects/tables/floor_table_human_ornate01', 0), + (2115, 2115, 'staticobjects/tables/floor_table_human_ornate02', 0), + (2116, 2116, 'staticobjects/urns/floor_urn_erudite_brazier', 0), + (2117, 2117, 'staticobjects/beds/floor_bed_human_bunks', 0), + (2118, 2118, 'staticobjects/beds/floor_bed_human_double', 0), + (2119, 2119, 'staticobjects/beds/floor_bed_human_double01', 0), + (2120, 2120, 'staticobjects/beds/floor_bed_human_king', 0), + (2121, 2121, 'staticobjects/beds/floor_bed_human_king01', 0), + (2122, 2122, 'staticobjects/beds/floor_bed_human_single', 0), + (2123, 2123, 'staticobjects/beds/floor_bed_human_single01', 0), + (2124, 2124, 'staticobjects/benches/floor_bench_human_ornate01', 0), + (2125, 2125, 'staticobjects/benches/floor_bench_human_ornate02', 0), + (2126, 2126, 'staticobjects/bookcases/floor_bookcase_human_ornate01', 0), + (2127, 2127, 'staticobjects/bookcases/floor_bookcase_human_ornate02', 0), + (2128, 2128, 'staticobjects/bookcases/floor_bookcase_human_plain01', 0), + (2129, 2129, 'staticobjects/bookcases/floor_bookcase_human_stone', 0), + (2130, 2130, 'staticobjects/bookcases/floor_bookcase_human_stone01', 0), + (2131, 2131, 'staticobjects/chairs/floor_chair_human_fancy01', 0), + (2132, 2132, 'staticobjects/chairs/floor_chair_human_fancy02', 0), + (2133, 2133, 'staticobjects/chairs/floor_chair_human_fancy03', 0), + (2134, 2134, 'staticobjects/chairs/floor_chair_human_ornate03', 0), + (2135, 2135, 'staticobjects/chairs/floor_chair_human_ornate04', 0), + (2136, 2136, 'staticobjects/chairs/floor_chair_human_wood01', 0), + (2137, 2137, 'staticobjects/chairs/floor_chair_human_wood02', 0), + (2138, 2138, 'staticobjects/chairs/floor_chair_human_wood03', 0), + (2139, 2139, 'staticobjects/chairs/floor_chair_human_wood04', 0), + (2140, 2140, 'staticobjects/chairs/floor_stool_human_military01', 0), + (2141, 2141, 'staticobjects/chairs/floor_stool_human_ornate01', 0), + (2142, 2142, 'staticobjects/chairs/floor_stool_human_wood01', 0), + (2143, 2143, 'staticobjects/chests/floor_chest_human_wood01', 0), + (2144, 2144, 'staticobjects/containers/floor_vase_human_marble01', 0), + (2145, 2145, 'staticobjects/containers/floor_vase_human_ornate01', 0), + (2146, 2146, 'staticobjects/containers/floor_vase_human_ornate02', 0), + (2147, 2147, 'staticobjects/counters/floor_counter_human_corner01', 0), + (2148, 2148, 'staticobjects/counters/floor_counter_human_round01', 0), + (2149, 2149, 'staticobjects/dressers/floor_dresser_human_ornate01', 0), + (2150, 2150, 'staticobjects/dressers/floor_dresser_human_plain01', 0), + (2151, 2151, 'staticobjects/lighting/ceiling_ceilinglamp_any_fancy', 0), + (2152, 2152, 'staticobjects/lighting/floor_floorlamp_human_ornate01', 0), + (2153, 2153, 'staticobjects/lighting/floor_floorlamp_human_ornate02', 0), + (2154, 2154, 'staticobjects/lighting/floor_floorlamp_human_ornate03', 0), + (2155, 2155, 'staticobjects/lighting/floor_floorlamp_human_stone01', 0), + (2156, 2156, 'staticobjects/lighting/floor_tablelamp_human_ornate01', 0), + (2157, 2157, 'staticobjects/lighting/floor_tablelamp_human_plain01', 0), + (2158, 2158, 'staticobjects/lighting/floor_tablelamp_human_plain02', 0), + (2159, 2159, 'staticobjects/musical/fprt_music_bonechimes001', 0), + (2160, 2160, 'staticobjects/musical/fprt_music_bonexylophone001', 0), + (2161, 2161, 'staticobjects/musical/fprt_music_drum001', 0), + (2162, 2162, 'staticobjects/musical/fprt_music_harp001', 0), + (2163, 2163, 'staticobjects/musical/fprt_music_mandolin001', 0), + (2164, 2164, 'staticobjects/shelves/wall_shelf_human_double01', 0), + (2165, 2165, 'staticobjects/shelves/wall_shelf_human_double02', 0), + (2166, 2166, 'staticobjects/shelves/wall_shelf_human_double03', 0), + (2167, 2167, 'staticobjects/shelves/wall_shelf_human_military01', 0), + (2168, 2168, 'staticobjects/shelves/wall_shelf_human_ornate01', 0), + (2169, 2169, 'staticobjects/tables/floor_endtable_human_ornate', 0), + (2170, 2170, 'staticobjects/tables/floor_endtable_human_plain', 0), + (2171, 2171, 'staticobjects/tables/floor_table_human_bedside01', 0), + (2172, 2172, 'staticobjects/tables/floor_table_human_bedside02', 0), + (2173, 2173, 'staticobjects/tables/floor_table_human_butcherblock', 0), + (2174, 2174, 'staticobjects/tables/floor_table_human_circular01', 0), + (2175, 2175, 'staticobjects/tables/floor_table_human_circular02', 0), + (2176, 2176, 'staticobjects/tables/floor_table_human_desk01', 0), + (2177, 2177, 'staticobjects/tables/floor_table_human_desk02', 0), + (2178, 2178, 'staticobjects/tables/floor_table_human_ornate03', 0), + (2179, 2179, 'staticobjects/tables/floor_table_human_ornate04', 0), + (2180, 2180, 'staticobjects/tables/floor_table_human_oval01', 0), + (2181, 2181, 'staticobjects/tables/floor_table_human_plain04', 0), + (2182, 2182, 'staticobjects/urns/floor_urn_human_ornate01', 0), + (2183, 2183, 'staticobjects/urns/floor_urn_human_plain01', 0), + (2184, 2184, 'staticobjects/urns/floor_urn_human_plain02', 0), + (2185, 2185, 'staticobjects/archery/archery_target', 0), + (2186, 2186, 'staticobjects/chairs/floor_stool_any_simple01', 0), + (2187, 2187, 'staticobjects/chests/floor_chest_barbarian_ornate01', 0), + (2188, 2188, 'staticobjects/containers/floor_bucket_any_handle01', 0), + (2189, 2189, 'staticobjects/counters/floor_counter_any_generic01', 0), + (2190, 2190, 'staticobjects/pictures/wall_painting_human_billportrait', 0), + (2191, 2191, 'staticobjects/pictures/wall_painting_human_brickbuilding', 0), + (2192, 2192, 'staticobjects/pictures/wall_painting_human_castle', 0), + (2193, 2193, 'staticobjects/pictures/wall_painting_human_cathedral', 0), + (2194, 2194, 'staticobjects/pictures/wall_painting_human_claymore', 0), + (2195, 2195, 'staticobjects/pictures/wall_painting_human_cliffs', 0), + (2196, 2196, 'staticobjects/pictures/wall_painting_human_hillbuilding', 0), + (2197, 2197, 'staticobjects/pictures/wall_painting_human_horseknight', 0), + (2198, 2198, 'staticobjects/pictures/wall_painting_human_knight', 0), + (2199, 2199, 'staticobjects/pictures/wall_painting_human_qeynoscastle', 0), + (2200, 2200, 'staticobjects/pictures/wall_painting_human_stonebuilding01', 0), + (2201, 2201, 'staticobjects/pictures/wall_painting_human_stonebuilding02', 0), + (2202, 2202, 'staticobjects/pictures/wall_painting_human_sun', 0), + (2203, 2203, 'staticobjects/pictures/wall_painting_human_trees', 0), + (2204, 2204, 'staticobjects/relics/floor_orb_erudite_warding01', 0), + (2205, 2205, 'staticobjects/rugs/floor_rug_kerra_ornate01', 0), + (2206, 2206, 'staticobjects/rugs/floor_rug_kerra_ornate02', 0), + (2207, 2207, 'staticobjects/tables/floor_table_any_bedside01', 0), + (2208, 2208, 'staticobjects/tables/floor_table_any_coffee01', 0), + (2209, 2209, 'staticobjects/carts/damaged_wood_cart', 0), + (2210, 2210, 'staticobjects/rocks/steppes_flatrock', 0), + (2211, 2211, 'staticobjects/shelves/wall_shelf_human_hook', 0), + (2212, 2212, 'staticobjects/tools/shovel_steppes', 0), + (2213, 2213, 'accessories/wieldable_items/weapons/dagger/dagger/dagger001_ornate', 0), + (2214, 2214, 'accessories/wieldable_items/weapons/dagger/dagger/dagger001_plain', 0), + (2215, 2215, 'accessories/wieldable_items/weapons/dagger/dagger/dagger001_runic', 0), + (2216, 2216, 'accessories/wieldable_items/weapons/dagger/dirk/dirk001_plain', 0), + (2217, 2217, 'accessories/wieldable_items/weapons/dagger/stiletto/stiletto001_rusty', 0), + (2218, 2218, 'accessories/wieldable_items/weapons/dagger/stiletto/stiletto002_runic', 0), + (2219, 2219, 'accessories/wieldable_items/weapons/great_axe/bardiche/bardiche02_ornate', 0), + (2220, 2220, 'accessories/wieldable_items/weapons/great_axe/executioner_axe/executioner_axe003_runic', 0), + (2221, 2221, 'accessories/wieldable_items/weapons/great_axe/halberd/halberd003_plain', 0), + (2222, 2222, 'staticobjects/fires/qey_adv04_stumpcut01', 0), + (2223, 2223, 'staticobjects/statues/goblin_totem', 0), + (2224, 2224, 'accessories/wearable_items/chain/common/low/skirt', 0), + (2225, 2225, 'accessories/wieldable_items/weapons/dagger/dagger/dagger002_rusty', 0), + (2226, 2226, 'accessories/wieldable_items/weapons/dagger/dirk/dirk002_runic', 0), + (2227, 2227, 'accessories/wieldable_items/weapons/great_axe/assault_axe/assault_axe001_ornate', 0), + (2228, 2228, 'accessories/wieldable_items/weapons/great_axe/assault_axe/assault_axe002_plain', 0), + (2229, 2229, 'accessories/wieldable_items/weapons/great_axe/bardiche/bardiche01_runic', 0), + (2230, 2230, 'accessories/wieldable_items/weapons/great_axe/bardiche/bardiche03_rusty', 0), + (2231, 2231, 'accessories/wieldable_items/weapons/great_axe/military_pick/military_pick002_ornate', 0), + (2232, 2232, 'accessories/wearable_items/vanguard/common/low/skirt', 0), + (2233, 2233, 'accessories/wearable_items/vanguard/rare/low/skirt', 0), + (2234, 2234, 'accessories/wearable_items/_exp08/robe_elemental/air/left_shoulder_effect', 1096), + (2235, 2235, 'accessories/wearable_items/_exp08/robe_elemental/air/pants', 1096), + (2236, 2236, 'accessories/wieldable_items/weapons/great_axe/executioner_axe/executioner_axe001_plain', 0), + (2237, 2237, 'accessories/wieldable_items/weapons/great_axe/executioner_axe/executioner_axe001_rusty', 0), + (2238, 2238, 'accessories/wieldable_items/weapons/great_axe/halberd/halberd001_runic', 0), + (2239, 2239, 'accessories/wieldable_items/weapons/great_axe/halberd/halberd002_rusty', 0), + (2240, 2240, 'accessories/wieldable_items/weapons/great_axe/military_pick/military_pick001_rusty', 0), + (2241, 2241, 'staticobjects/banners/centaur_banner_steppes', 0), + (2242, 2242, 'staticobjects/carts/damaged_wood_cart_2', 0), + (2243, 2243, 'staticobjects/carts/wood_cart', 0), + (2244, 2244, 'staticobjects/eig/eig_harvest_location', 0), + (2245, 2245, 'staticobjects/freeport/fprt_citizenship_sign', 0), + (2246, 2246, 'staticobjects/qeynos/clear_appearance_plane', 0), + (2247, 2247, 'accessories/wearable_items/_exp08/robe_elemental/air/right_shoulder_effect', 1096), + (2248, 2248, 'accessories/wieldable_items/weapons/axe/hand_axe/hand_axe001_ornate', 0), + (2249, 2249, 'accessories/wieldable_items/weapons/axe/hand_axe/hand_axe001_plain', 0), + (2250, 2250, 'accessories/wieldable_items/weapons/axe/hatchet/hatchet001_ornate', 0), + (2251, 2251, 'accessories/wieldable_items/weapons/axe/hatchet/hatchet001_plain', 0), + (2252, 2252, 'accessories/wieldable_items/weapons/axe/hatchet/hatchet002_runic', 0), + (2253, 2253, 'accessories/wieldable_items/weapons/axe/hatchet/hatchet002_rusty', 0), + (2254, 2254, 'accessories/wieldable_items/weapons/great_sword/flamberge/flamberge001_runic', 0), + (2255, 2255, 'accessories/wieldable_items/weapons/great_sword/flamberge/flamberge002_ornate', 0), + (2256, 2256, 'accessories/wieldable_items/weapons/great_sword/tulwar/tulwar001_ornate', 0), + (2257, 2257, 'accessories/wieldable_items/weapons/great_sword/tulwar/tulwar001_plain', 0), + (2258, 2258, 'accessories/wieldable_items/weapons/sword/long_sword/long_sword001_runic', 0), + (2259, 2259, 'accessories/wieldable_items/weapons/sword/long_sword/long_sword002_ornate', 0), + (2260, 2260, 'accessories/wieldable_items/weapons/sword/scimitar/scimitar001_runic', 0), + (2261, 2261, 'accessories/wieldable_items/weapons/sword/scimitar/scimitar002_plain', 0), + (2262, 2262, 'accessories/wieldable_items/weapons/sword/short_sword/short_sword001_runic', 0), + (2263, 2263, 'accessories/wieldable_items/weapons/sword/short_sword/short_sword002_plain', 0), + (2264, 2264, 'accessories/wieldable_items/weapons/sword/short_sword/short_sword002_rusty', 0), + (2265, 2265, 'staticobjects/rocks/rubble_chunks', 0), + (2266, 2266, 'accessories/wieldable_items/weapons/axe/hand_axe/hand_axe001_runic', 0), + (2267, 2267, 'accessories/wieldable_items/weapons/axe/hand_axe/hand_axe002_rusty', 0), + (2268, 2268, 'accessories/wieldable_items/weapons/fist/cestus/spiked_cestus001_plain', 0), + (2269, 2269, 'accessories/wearable_items/vanguard/common/high/skirt', 0), + (2270, 2270, 'accessories/wearable_items/vanguard/common/medium/skirt', 0), + (2271, 2271, 'accessories/wearable_items/vanguard/uncommon/high/skirt', 0), + (2272, 2272, 'accessories/wearable_items/vanguard/uncommon/low/skirt', 0), + (2273, 2273, 'accessories/wearable_items/vanguard/uncommon/medium/skirt', 0), + (2274, 2274, 'accessories/wieldable_items/weapons/fist/claws/claws001_plain', 0), + (2275, 2275, 'accessories/wieldable_items/weapons/fist/katar/katar001_plain', 0), + (2276, 2276, '_exp07/zones/exp07_dun_drunder/dpo_tallon_pedestal', 1096), + (2277, 2277, '_exp07/zones/exp07_dun_drunder/dpo_tallon_pedestal_w_bow', 1096), + (2278, 2278, 'accessories/wieldable_items/weapons/great_sword/greatsword/greatsword001_ornate', 0), + (2279, 2279, 'accessories/wieldable_items/weapons/great_sword/greatsword/greatsword002_runic', 0), + (2280, 2280, 'accessories/wieldable_items/weapons/sword/spatha_sword/spatha_sword001_ornate', 0), + (2281, 2281, 'accessories/wieldable_items/weapons/sword/spatha_sword/spatha_sword002_plain', 0), + (2282, 2282, 'accessories/wieldable_items/weapons/sword/spatha_sword/spatha_sword002_rusty', 0), + (2283, 2283, 'staticobjects/mushroom/mushroom_small', 0), + (2284, 2284, 'accessories/wieldable_items/weapons/fist/cestus/spiked_cestus002_ornate', 0), + (2285, 2285, 'accessories/wieldable_items/weapons/fist/cestus/spiked_cestus002_runic', 0), + (2286, 2286, 'accessories/wieldable_items/weapons/hammer/cudgel/cudgel001_plain', 0), + (2287, 2287, 'accessories/wieldable_items/weapons/hammer/cudgel/cudgel002_rusty', 0), + (2288, 2288, 'accessories/wieldable_items/weapons/fist/katar/katar002_runic', 0), + (2289, 2289, 'accessories/wieldable_items/weapons/great_spear/trident/trident001_plain', 0), + (2290, 2290, 'accessories/wieldable_items/weapons/spear/javelin/javeling001_plain', 0), + (2291, 2291, 'accessories/wieldable_items/weapons/spear/spear/spear001_ornate', 0), + (2292, 2292, 'accessories/wieldable_items/weapons/spear/spear/spear001_plain', 0), + (2293, 2293, 'staticobjects/tents/nektulos_small_red01', 0), + (2294, 2294, 'accessories/wieldable_items/weapons/axe/waraxe/waraxe001_ornate', 0), + (2295, 2295, 'accessories/wieldable_items/weapons/axe/waraxe/waraxe001_plain', 0), + (2296, 2296, 'accessories/wieldable_items/weapons/axe/waraxe/waraxe001_rusty', 0), + (2297, 2297, 'accessories/wieldable_items/weapons/axe/waraxe/waraxe002_runic', 0), + (2298, 2298, 'accessories/wieldable_items/weapons/great_hammer/maul/maul001_plain', 0), + (2299, 2299, 'accessories/wieldable_items/weapons/great_hammer/maul/maul002_runic', 0), + (2300, 2300, 'accessories/wieldable_items/weapons/great_spear/great_spear/great_spear001_plain', 0), + (2301, 2301, 'accessories/wieldable_items/weapons/great_spear/trident/trident002_runic', 0), + (2302, 2302, 'accessories/wieldable_items/weapons/spear/leaf_blade/leaf_blade001_plain', 0), + (2303, 2303, 'accessories/wieldable_items/weapons/spear/leaf_blade/leaf_blade001_rusty', 0), + (2304, 2304, 'accessories/wieldable_items/weapons/spear/short_spear/short_spear001_plain', 0), + (2305, 2305, 'accessories/wieldable_items/weapons/sword/falchion_sword/falchion_sword001_plain', 0), + (2306, 2306, 'staticobjects/dpo_invisible_cube/dpo_invisible_cube', 0), + (2307, 2307, 'accessories/wearable_items/tradesman/clothing/plainbluelacey/shoulders', 0), + (2308, 2308, 'accessories/wearable_items/tradesman/clothing/plainbluelacey/chest', 0), + (2309, 2309, 'accessories/wearable_items/tradesman/clothing/plainbluelacey/legs', 0), + (2310, 2310, 'accessories/wieldable_items/weapons/axe/cresent_axe/cresent_axe001_plain', 0), + (2311, 2311, 'accessories/wieldable_items/weapons/axe/cresent_axe/cresent_axe001_runic', 0), + (2312, 2312, 'accessories/wieldable_items/weapons/axe/cresent_axe/cresent_axe001_rusty', 0), + (2313, 2313, 'accessories/wieldable_items/weapons/axe/cresent_axe/cresent_axe002_ornate', 0), + (2314, 2314, 'accessories/wieldable_items/weapons/axe/battleaxe/battleaxe001_good', 0), + (2315, 2315, 'accessories/wieldable_items/weapons/axe/battleaxe/battleaxe001_ornate', 0), + (2316, 2316, 'accessories/wieldable_items/weapons/axe/battleaxe/battleaxe001_plain', 0), + (2317, 2317, 'accessories/wieldable_items/weapons/axe/battleaxe/battleaxe001_runic', 0), + (2318, 2318, 'accessories/wieldable_items/weapons/axe/battleaxe/battleaxe002_evil', 0), + (2319, 2319, 'accessories/wieldable_items/weapons/axe/battleaxe/battleaxe002_rusty', 0), + (2320, 2320, 'accessories/wieldable_items/weapons/hammer/battlehammer/battlehammer001_runic', 0), + (2321, 2321, 'accessories/wieldable_items/weapons/hammer/battlehammer/battlehammer002_rusty', 0), + (2322, 2322, 'accessories/wieldable_items/weapons/hammer/mace/mace01_runic', 0), + (2323, 2323, 'accessories/wieldable_items/weapons/hammer/mace/mace02_plain', 0), + (2324, 2324, 'accessories/wieldable_items/weapons/hammer/mace/mace02_rusty', 0), + (2325, 2325, 'accessories/wieldable_items/weapons/hammer/mace/mace03_ornate', 0), + (2326, 2326, 'staticobjects/tableware/floor_mug_any_dirty', 0), + (2327, 2327, '_exp07/zones/exp07_dun_drunder/dpo_vallon_pedestal', 1096), + (2328, 2328, 'staticobjects/lab/floor_flask_iksar_lab', 0), + (2329, 2329, 'staticobjects/artisan/floor_easel_human_wooden01', 0), + (2330, 2330, 'accessories/wearable_items/tradesman/clothing/ornateshinygold/chest', 0), + (2331, 2331, 'accessories/wearable_items/tradesman/clothing/ornateshinygold/legs', 0), + (2332, 2332, 'accessories/wearable_items/tradesman/clothing/ornateshinygold/shoulders', 0), + (2333, 2333, 'accessories/wieldable_items/weapons/axe/tomahawk/tomahawk001_plain', 0), + (2334, 2334, 'accessories/wieldable_items/weapons/axe/tomahawk/tomahawk002_ornate', 0), + (2335, 2335, 'creatures/monsters/seagull', 0), + (2336, 2336, 'creatures/monsters/sheep', 0), + (2337, 2337, 'staticobjects/catapult/catapult_broken', 0), + (2338, 2338, 'staticobjects/world_devices/trdskl_fprt_chemistrytable01', 0), + (2339, 2339, 'staticobjects/world_devices/trdskl_fprt_engraveddesk01', 0), + (2340, 2340, 'staticobjects/world_devices/trdskl_fprt_stoveandkeg01', 0), + (2341, 2341, 'staticobjects/world_devices/trdskl_fprt_woodworkingtable01', 0), + (2342, 2342, 'staticobjects/world_devices/trdskl_fprt_workbench01', 0), + (2343, 2343, 'staticobjects/world_devices/trdskl_qey_chemistrytable01', 0), + (2344, 2344, 'staticobjects/world_devices/trdskl_qey_engraveddesk01', 0), + (2345, 2345, 'staticobjects/world_devices/trdskl_qey_stoveandkeg01', 0), + (2346, 2346, 'staticobjects/world_devices/trdskl_qey_woodworkingtable01', 0), + (2347, 2347, 'accessories/wieldable_items/weapons/dagger/parrying_blade/parrying_blade001_plain', 0), + (2348, 2348, 'accessories/wieldable_items/weapons/dagger/parrying_blade/parrying_blade002_runic', 0), + (2349, 2349, 'accessories/wieldable_items/weapons/dagger/sai/sai001_plain', 0), + (2350, 2350, 'accessories/wieldable_items/weapons/rapier/cutlass/cutlass001_runic', 0), + (2351, 2351, 'accessories/wieldable_items/weapons/rapier/epee/epee001_runic', 0), + (2352, 2352, 'accessories/wieldable_items/weapons/rapier/foil/foil001_ornate', 0), + (2353, 2353, 'accessories/wieldable_items/weapons/rapier/karabela/karabela001_runic', 0), + (2354, 2354, 'accessories/wieldable_items/weapons/rapier/saber/saber001_runic', 0), + (2355, 2355, 'accessories/wieldable_items/weapons/staff/scorcerers_staff/scorcerers_staff001_ornate', 0), + (2356, 2356, 'accessories/wieldable_items/weapons/staff/scorcerers_staff/scorcerers_staff002_runic', 0), + (2357, 2357, 'accessories/wieldable_items/weapons/throwing_weapons/throwing_hammer/throwing_hammer001_runic', 0), + (2358, 2358, 'creatures/monsters/hawk_redtail', 0), + (2359, 2359, 'creatures/pets/diseases_servant', 0), + (2360, 2360, 'creatures/pets/elemental_fire', 0), + (2361, 2361, 'creatures/pets/factor_earth', 0), + (2362, 2362, 'creatures/pets/factor_fire', 0), + (2363, 2363, 'creatures/pets/form_earth', 0), + (2364, 2364, 'creatures/pets/horse', 0), + (2365, 2365, 'creatures/pets/icebone_skeleton', 0), + (2366, 2366, 'staticobjects/bones/bones_weapons', 0), + (2367, 2367, 'staticobjects/bones/bones_weapons_1', 0), + (2368, 2368, 'staticobjects/bones/bone_collection_large', 0), + (2369, 2369, 'staticobjects/bones/jumbled_bones08', 0), + (2370, 2370, 'staticobjects/bones/speared_skeleton', 0), + (2371, 2371, 'staticobjects/carcase/barnyard_dead_dog', 0), + (2372, 2372, 'staticobjects/carcase/horse_carcase', 0), + (2373, 2373, 'staticobjects/catapult/orc_batteringram', 0), + (2374, 2374, 'staticobjects/catapult/orc_siegetower', 0), + (2375, 2375, 'staticobjects/catapult/orc_siegetower_damaged', 0), + (2376, 2376, 'staticobjects/dervish/dervish_outhouse_1', 0), + (2377, 2377, 'staticobjects/gravestones/spreadtombs_1', 0), + (2378, 2378, 'staticobjects/rocks/rock_formation', 0), + (2379, 2379, 'staticobjects/tents/orc_tent_large', 0), + (2380, 2380, 'staticobjects/tree/barricade_corner_left', 0), + (2381, 2381, 'staticobjects/tree/log_dead', 0), + (2382, 2382, 'staticobjects/tree/tree_savanah_dry', 0), + (2383, 2383, 'staticobjects/tree/trunk_tree_dead', 0), + (2384, 2384, 'accessories/wieldable_items/weapons/dagger/kris/kris001_runic', 0), + (2385, 2385, 'accessories/wieldable_items/weapons/great_spear/pike/pike001_plain', 0), + (2386, 2386, 'accessories/wieldable_items/weapons/great_spear/pike/pike001_runic', 0), + (2387, 2387, 'accessories/wieldable_items/weapons/great_spear/voulge/voulge001_ornate', 0), + (2388, 2388, 'accessories/wieldable_items/weapons/spear/ornate_spear/ornate_spear001_ornate', 0), + (2389, 2389, 'creatures/monsters/dragonfly', 0), + (2390, 2390, 'creatures/pets/elemental_water', 0), + (2391, 2391, 'creatures/pets/essence_water', 0), + (2392, 2392, 'creatures/pets/factor_water', 0), + (2393, 2393, 'creatures/pets/form_fire', 0), + (2394, 2394, 'creatures/pets/form_water', 0), + (2395, 2395, 'staticobjects/blacksmith/df_armorhook01', 0), + (2396, 2396, 'accessories/wieldable_items/weapons/spear/tribal_spear/tribal_spear001_plain', 0), + (2397, 2397, 'creatures/monsters/turkey', 0), + (2398, 2398, 'projectiles/spell_spiral', 0), + (2399, 2399, 'staticobjects/nest', 0), + (2400, 2400, 'staticobjects/nests/nest', 0), + (2401, 2401, 'staticobjects/rubble/ratpile', 0), + (2402, 2402, 'accessories/wearable_items/vanguard/rare/medium/skirt', 0), + (2403, 2403, 'accessories/wieldable_items/weapons/great_sword/bastard_sword/bastard_sword001_plain', 0), + (2404, 2404, 'accessories/wieldable_items/weapons/great_sword/bastard_sword/bastard_sword001_runic', 0), + (2405, 2405, 'accessories/wieldable_items/weapons/great_sword/bastard_sword/bastard_sword002_ornate', 0), + (2406, 2406, 'accessories/wieldable_items/weapons/great_sword/broad_sword/broad_sword001_ornate', 0), + (2407, 2407, 'accessories/wieldable_items/weapons/great_sword/broad_sword/broad_sword001_plain', 0), + (2408, 2408, 'accessories/wieldable_items/weapons/great_sword/broad_sword/broad_sword002_runic', 0), + (2409, 2409, 'accessories/wieldable_items/weapons/great_sword/broad_sword/broad_sword002_rusty', 0), + (2410, 2410, 'accessories/wieldable_items/weapons/rapier/rapier/rapier001_ornate', 0), + (2411, 2411, 'creatures/monsters/rumbler_coal', 0), + (2412, 2412, 'creatures/monsters/rumbler_rocky', 0), + (2413, 2413, 'creatures/monsters/rumbler_slimey', 0), + (2414, 2414, 'creatures/monsters/stagg', 0), + (2415, 2415, 'creatures/monsters/tiger', 0), + (2416, 2416, 'creatures/pets/elemental_air', 0), + (2417, 2417, 'staticobjects/gears/gears_table00', 0), + (2418, 2418, 'accessories/wearable_items/magus/robes/fancy_goldburgundy/chest', 0), + (2419, 2419, 'accessories/wearable_items/magus/robes/fancy_goldburgundy/hood', 0), + (2420, 2420, 'accessories/wearable_items/magus/robes/fancy_goldburgundy/pants', 0), + (2421, 2421, 'accessories/wearable_items/magus/robes/fancy_goldburgundy/skirt', 0), + (2422, 2422, 'accessories/wieldable_items/weapons/staff/bo_staff/bo_staff001_plain', 0), + (2423, 2423, 'accessories/wieldable_items/weapons/staff/bo_staff/bo_staff002_ornate', 0), + (2424, 2424, 'accessories/wieldable_items/weapons/staff/fighting_batons/fighting_batons001_runic', 0), + (2425, 2425, 'accessories/wieldable_items/weapons/staff/great_staff/great_staff001_runic', 0), + (2426, 2426, 'accessories/wieldable_items/weapons/staff/great_staff/great_staff002_plain', 0), + (2427, 2427, 'accessories/wieldable_items/weapons/staff/metal_rod/metal_rod001_runic', 0), + (2428, 2428, 'accessories/wieldable_items/weapons/staff/quarterstaff/quarterstaff001_runic', 0), + (2429, 2429, 'projectiles/spell_shriek', 0), + (2430, 2430, 'staticobjects/bones/bone_pile', 0), + (2431, 2431, 'staticobjects/bones/seated_skeleton', 0), + (2432, 2432, 'staticobjects/bones/skull_single', 0), + (2433, 2433, 'staticobjects/containers/mugs_and_plates', 0), + (2434, 2434, 'staticobjects/pictures/halfling_blueprint', 0), + (2435, 2435, 'staticobjects/plants/stump01', 0), + (2436, 2436, 'staticobjects/plants/weeds01', 0), + (2437, 2437, 'staticobjects/plants/weeds02', 0), + (2438, 2438, 'staticobjects/smoking_utensils/waterpipe', 0), + (2439, 2439, '_exp07/zones/exp07_dun_drunder/dpo_vallon_pedestal_w_scimitar', 1096), + (2440, 2440, 'accessories/wieldable_items/weapons/exp07/talisman/book_caged_monster_undead_fx', 1096), + (2441, 2441, 'accessories/wieldable_items/shields/buckler_shield/metal_buckler/metal_buckler001_ornate', 0), + (2442, 2442, 'accessories/wieldable_items/shields/buckler_shield/streatched_leather_buckler/streatched_leather_buckler001_plain', 0), + (2443, 2443, 'accessories/wieldable_items/shields/buckler_shield/wooden_buckler/wooden_buckler001_plain', 0), + (2444, 2444, 'accessories/wieldable_items/weapons/exp07/talisman/book_songbook_fx', 1096), + (2445, 2445, 'accessories/wieldable_items/shields/round_shield/metal_etched_round/round_shield_etched001_plain', 0), + (2446, 2446, 'accessories/wieldable_items/shields/round_shield/wooden_round/wooden_round_shield001_plain', 0), + (2447, 2447, 'accessories/wieldable_items/shields/tower_shield/tower_shield_freeport/tower_shield_freeport001', 0), + (2448, 2448, 'accessories/wieldable_items/shields/tower_shield/tower_shield_qeynos/tower_shield_qeynos001', 0), + (2449, 2449, 'accessories/wieldable_items/weapons/axe/tomahawk/tomahawk001_rusty', 0), + (2450, 2450, 'accessories/wieldable_items/weapons/axe/tomahawk/tomahawk002_runic', 0), + (2451, 2451, 'staticobjects/dpo_invisible_cube/cage_collision', 0), + (2452, 2452, 'accessories/wieldable_items/shields/buckler_shield/metal_buckler/metal_buckler001_plain', 0), + (2453, 2453, 'accessories/wieldable_items/shields/kite_shield/wooden_kite/wooden_kite_shield001_ornate', 0), + (2454, 2454, 'accessories/wieldable_items/shields/round_shield/metal_round/metal_round_shield001_plain', 0), + (2455, 2455, 'accessories/wieldable_items/shields/round_shield/wooden_round/wooden_round_shield001_runic', 0), + (2456, 2456, 'creatures/monsters/cow_bell', 0), + (2457, 2457, 'staticobjects/musical/plain_flute', 1096), + (2458, 2458, 'accessories/wieldable_items/shields/kite_shield/kite_shield_freeport/kite_shield_freeport001', 0), + (2459, 2459, 'accessories/wieldable_items/shields/kite_shield/kite_shield_qeynos/kite_shield_qeynos001', 0), + (2460, 2460, 'accessories/wieldable_items/shields/kite_shield/metal_kite/metal_kite_shield001_ornate', 0), + (2461, 2461, 'accessories/wieldable_items/shields/tower_shield/wooden_tower_shield/wooden_tower_shield001_ornate', 0), + (2462, 2462, 'creatures/pets/elemental_earth', 0), + (2463, 2463, 'creatures/pets/essence_earth', 0), + (2464, 2464, 'accessories/wieldable_items/shields/tower_shield/metal_tower_shield/metal_tower_shield001_ornate', 0), + (2465, 2465, 'accessories/wieldable_items/weapons/great_axe/military_pick/military_pick002_runic', 0), + (2466, 2466, 'accessories/wieldable_items/weapons/great_axe/military_pick/military_pick001_plain', 0), + (2467, 2467, 'staticobjects/tents/gnoll_tent', 0), + (2468, 2468, 'staticobjects/liveevent/guides/guide_drum', 1096), + (2469, 2469, 'projectiles/arrow_simple_plain', 0), + (2470, 2470, 'projectiles/spell_blue_star', 0), + (2471, 2471, 'accessories/wearable_items/chain/plain/low/chest', 0), + (2472, 2472, 'accessories/wearable_items/chain/plain/low/feet', 0), + (2473, 2473, 'accessories/wearable_items/chain/plain/low/forearms', 0), + (2474, 2474, 'accessories/wearable_items/chain/plain/low/hands', 0), + (2475, 2475, 'accessories/wearable_items/chain/plain/low/head', 0), + (2476, 2476, 'accessories/wearable_items/chain/plain/low/legs', 0), + (2477, 2477, 'accessories/wearable_items/chain/plain/low/shoulders', 0), + (2478, 2478, 'accessories/wearable_items/chain/plain/low/skirt', 0), + (2479, 2479, 'accessories/wieldable_items/tools/alchemist/beaker', 0), + (2480, 2480, 'accessories/wieldable_items/tools/alchemist/testtube', 0), + (2481, 2481, 'accessories/wieldable_items/tools/cook/pot', 0), + (2482, 2482, 'accessories/wieldable_items/tools/cook/spoon', 0), + (2483, 2483, 'accessories/wieldable_items/tools/jeweler/gem', 0), + (2484, 2484, 'accessories/wieldable_items/tools/jeweler/magnifying_glass', 0), + (2485, 2485, 'accessories/wieldable_items/tools/smith/hammer', 0), + (2486, 2486, 'accessories/wieldable_items/tools/smith/tongs_wmetal', 0), + (2487, 2487, 'accessories/wieldable_items/tools/tailor/cloth', 0), + (2488, 2488, 'accessories/wieldable_items/tools/tailor/needle', 0), + (2489, 2489, 'accessories/wieldable_items/tools/woodworker/saw', 0), + (2490, 2490, 'accessories/wieldable_items/tools/woodworker/wood', 0), + (2491, 2491, 'staticobjects/liveevent/tinkerfest/dpo_tinkerfest_distillery_pipe_single', 1096), + (2492, 2492, 'staticobjects/_exp07/othmir/othmir_firepit02', 1096), + (2493, 2493, 'staticobjects/_exp07/othmir/othmir_firepit01', 1096), + (2494, 2494, 'staticobjects/halloween/ark01_broken', 1096), + (2495, 2495, 'staticobjects/halloween/bef_asylum_lamp_swinging01', 1096), + (2496, 2496, 'staticobjects/halloween/bef_cave_torch_light01', 1096), + (2497, 2497, 'staticobjects/halloween/bef_claypot01_tall_broken01', 1096), + (2498, 2498, 'staticobjects/halloween/fprt_ext_tombstonee001', 1096), + (2499, 2499, 'staticobjects/halloween/fprt_ext_tombstoneg001', 1096), + (2500, 2500, 'staticobjects/flying_mount_platform/antonica', 0), + (2501, 2501, 'staticobjects/rubble/rubble_pile01', 0), + (2502, 2502, 'staticobjects/halloween/halfing_display_traps01', 1096), + (2503, 2503, 'staticobjects/halloween/holiday_skull_candy_dispenser_01', 1096), + (2504, 2504, 'staticobjects/halloween/lp_lightsource_somborn_double_post01', 1096), + (2505, 2505, 'staticobjects/halloween/oblost_pot01_brkn_w_organs', 1096), + (2506, 2506, 'accessories/wieldable_items/tools/tailor/tanning_cloth', 0), + (2507, 2507, 'accessories/wearable_items/tradesman/clothing/plain_brown_female/chest', 0), + (2508, 2508, 'accessories/wearable_items/tradesman/clothing/plain_brown_female/legs', 0), + (2509, 2509, 'accessories/wieldable_items/shields/round_shield/metal_round/metal_round_shield001_rusty', 0), + (2510, 2510, 'staticobjects/halloween/oth_bones_wall_04', 1096), + (2511, 2511, 'staticobjects/halloween/pf_haypile01', 1096), + (2512, 2512, 'staticobjects/doorways/qey_tradeskill_entrance01', 0), + (2513, 2513, 'accessories/wieldable_items/shields/tower_shield/metal_tower_shield/metal_tower_shield001_rusty', 0), + (2514, 2514, 'accessories/wieldable_items/weapons/great_axe/executioner_axe/executioner_axe002_evil', 0), + (2515, 2515, 'accessories/wieldable_items/weapons/great_hammer/great_mace/great_mace001_plain', 0), + (2516, 2516, 'accessories/wieldable_items/weapons/great_hammer/great_mace/great_mace002_rusty', 0), + (2517, 2517, 'accessories/wieldable_items/weapons/great_hammer/knotted_club/knotted_club001_plain', 0), + (2518, 2518, 'staticobjects/halloween/tfs_present02_big', 1096), + (2519, 2519, 'accessories/wieldable_items/weapons/great_hammer/maul/maul001_rusty', 0), + (2520, 2520, 'accessories/wieldable_items/weapons/great_hammer/maul/maul002_ornate', 0), + (2521, 2521, 'accessories/wieldable_items/weapons/great_hammer/war_hammer/war_hammer001_ornate', 0), + (2522, 2522, 'accessories/wieldable_items/weapons/great_hammer/war_hammer/war_hammer001_plain', 0), + (2523, 2523, 'accessories/wieldable_items/weapons/great_hammer/war_hammer/war_hammer001_runic', 0), + (2524, 2524, 'accessories/wieldable_items/weapons/great_hammer/war_hammer/war_hammer002_ornate', 0), + (2525, 2525, 'accessories/wieldable_items/weapons/great_hammer/war_hammer/war_hammer002_rusty', 0), + (2526, 2526, 'accessories/wieldable_items/weapons/great_hammer/war_hammer/war_hammer003_evil', 0), + (2527, 2527, 'accessories/wieldable_items/weapons/sword/scimitar/scimitar002_rusty', 0), + (2528, 2528, 'staticobjects/doors/qey_scribe_village06_door01', 0), + (2529, 2529, 'staticobjects/world_devices/trdskl_fprt_forge01', 0), + (2530, 2530, 'staticobjects/world_devices/trdskl_fprt_sewingtable_mannequin_loom01', 0), + (2531, 2531, 'staticobjects/world_devices/trdskl_qey_workbench01', 0), + (2532, 2532, 'accessories/wieldable_items/weapons/fist/knuckles/knuckles001_ornate', 0), + (2533, 2533, 'accessories/wieldable_items/weapons/fist/knuckles/knuckles001_plain', 0), + (2534, 2534, 'accessories/wieldable_items/weapons/fist/knuckles/knuckles001_rusty', 0), + (2535, 2535, 'accessories/wieldable_items/weapons/fist/knuckles/knuckles002_runic', 0), + (2536, 2536, 'accessories/wieldable_items/weapons/fist/knuckles/knuckles002_rusty', 0), + (2537, 2537, 'accessories/wieldable_items/weapons/great_axe/assault_axe/assault_axe002_rusty', 0), + (2538, 2538, 'accessories/wieldable_items/weapons/great_hammer/morning_star/morning_star001_rusty', 0), + (2539, 2539, 'accessories/wieldable_items/weapons/great_hammer/morning_star/morning_star002_plain', 0), + (2540, 2540, 'accessories/wieldable_items/weapons/great_hammer/morning_star/morning_star002_runic', 0), + (2541, 2541, 'accessories/wieldable_items/weapons/great_sword/claymore_sword/claymore_sword001_ornate', 0), + (2542, 2542, 'accessories/wieldable_items/weapons/great_sword/claymore_sword/claymore_sword001_plain', 0), + (2543, 2543, 'creatures/pets/hawk_ghost', 0), + (2544, 2544, 'staticobjects/scrolls/scroll01', 0), + (2545, 2545, 'staticobjects/world_devices/trdskl_qey_sewingtable_mannequin_loom01', 0), + (2546, 2546, 'accessories/wieldable_items/weapons/fist/katar/katar001_rusty', 0), + (2547, 2547, 'accessories/wieldable_items/weapons/fist/katar/katar002_ornate', 0), + (2548, 2548, 'accessories/wieldable_items/weapons/sword/falchion_sword/falchion_sword002_rusty', 0), + (2549, 2549, 'accessories/wieldable_items/weapons/throwing_weapons/throwing_axe/throwing_axe001_ornate', 0), + (2550, 2550, 'accessories/wieldable_items/weapons/throwing_weapons/throwing_axe/throwing_axe001_rusty', 0), + (2551, 2551, 'accessories/wieldable_items/weapons/throwing_weapons/throwing_axe/throwing_axe002_plain', 0), + (2552, 2552, 'accessories/wieldable_items/weapons/throwing_weapons/throwing_hammer/throwing_hammer001_ornate', 0), + (2553, 2553, 'creatures/tu/golem_ice', 0), + (2554, 2554, 'creatures/tu/siren_queen', 0), + (2555, 2555, 'creatures/tu/tentacleterror_crystal', 0), + (2556, 2556, 'projectiles/spell_electric_ball', 0), + (2557, 2557, 'staticobjects/boats/travel_boat', 0), + (2558, 2558, 'ec/pc/barbarian/barbarian_female_ghost', 0), + (2559, 2559, 'staticobjects/cages/ceiling_petcage_any_wood01', 0), + (2560, 2560, 'staticobjects/fx/icicles', 0), + (2561, 2561, 'staticobjects/artisan/floor_easel_human_canvas01', 0), + (2562, 2562, 'staticobjects/barrels/floor_barrel_any_cask01', 0), + (2563, 2563, 'staticobjects/barrels/floor_barrel_any_ornate01', 0), + (2564, 2564, 'staticobjects/barrels/floor_barrel_any_ornate02', 0), + (2565, 2565, 'staticobjects/barrels/floor_barrel_any_small01', 0), + (2566, 2566, 'staticobjects/barrels/floor_barrel_any_small02', 0), + (2567, 2567, 'staticobjects/barrels/floor_barrel_any_small03', 0), + (2568, 2568, 'staticobjects/barrels/floor_barrel_any_storage01', 0), + (2569, 2569, 'staticobjects/barrels/floor_barrel_any_storage02', 0), + (2570, 2570, 'staticobjects/barrels/floor_barrel_any_wine01', 0), + (2571, 2571, 'staticobjects/barrels/floor_barrel_elf_ornate01', 0), + (2572, 2572, 'staticobjects/beds/floor_bed_any_bunks01', 0), + (2573, 2573, 'staticobjects/beds/floor_bed_any_plain01', 0), + (2574, 2574, 'staticobjects/beds/floor_bed_any_torture01', 0), + (2575, 2575, 'staticobjects/beds/floor_bed_any_torture02', 0), + (2576, 2576, 'staticobjects/beds/floor_bed_darkelf_bunks01', 0), + (2577, 2577, 'staticobjects/bookcases/floor_bookcase_any_plain01', 0), + (2578, 2578, 'staticobjects/bookcases/floor_bookcase_any_stone01', 0), + (2579, 2579, 'staticobjects/bookcases/floor_bookcase_any_stone02', 0), + (2580, 2580, 'staticobjects/bookcases/floor_bookcase_any_wood01', 0), + (2581, 2581, 'staticobjects/bookcases/floor_bookcase_any_wood02', 0), + (2582, 2582, 'staticobjects/bookcases/floor_bookcase_any_wood03', 0), + (2583, 2583, 'staticobjects/bookcases/floor_bookcase_any_wood04', 0), + (2584, 2584, 'staticobjects/bookcases/floor_bookcase_any_wood05', 0), + (2585, 2585, 'staticobjects/bookcases/floor_bookcase_any_wood06', 0), + (2586, 2586, 'staticobjects/bookcases/floor_bookcase_bixie_ornate01', 0), + (2587, 2587, 'staticobjects/bookcases/floor_bookcase_darkelf_ornate01', 0), + (2588, 2588, 'staticobjects/bookcases/floor_bookcase_darkelf_ornate03', 0), + (2589, 2589, 'staticobjects/bookcases/floor_bookcase_darkelf_ornate04', 0), + (2590, 2590, 'staticobjects/bookcases/floor_bookcase_darkelf_ornate05', 0), + (2591, 2591, 'staticobjects/books/floor_books_any_mixed01', 0), + (2592, 2592, 'staticobjects/books/floor_books_any_mixed02', 0), + (2593, 2593, 'staticobjects/books/floor_books_any_mixed03', 0), + (2594, 2594, 'staticobjects/books/floor_books_any_mixed04', 0), + (2595, 2595, 'staticobjects/books/floor_books_any_mixed05', 0), + (2596, 2596, 'staticobjects/books/floor_book_any_cazic01', 0), + (2597, 2597, 'staticobjects/books/floor_book_any_cazic02', 0), + (2598, 2598, 'staticobjects/books/floor_book_any_cazic03', 0), + (2599, 2599, 'staticobjects/books/floor_book_any_cazic04', 0), + (2600, 2600, 'staticobjects/books/floor_book_any_cazic05', 0), + (2601, 2601, 'staticobjects/books/floor_book_darkelf_plain01', 0), + (2602, 2602, 'staticobjects/books/floor_book_darkelf_plain02', 0), + (2603, 2603, 'staticobjects/books/floor_book_darkelf_plain03', 0), + (2604, 2604, 'staticobjects/books/floor_book_darkelf_plain04', 0), + (2605, 2605, 'staticobjects/bottles/floor_bottle_any_fermentation01', 0), + (2606, 2606, 'staticobjects/bottles/floor_bottle_any_potion01', 0), + (2607, 2607, 'staticobjects/bottles/floor_bottle_darkelf_bar01', 0), + (2608, 2608, 'staticobjects/bottles/floor_bottle_darkelf_bar02', 0), + (2609, 2609, 'staticobjects/bottles/floor_bottle_darkelf_bar03', 0), + (2610, 2610, 'staticobjects/bottles/floor_bottle_darkelf_lab01', 0), + (2611, 2611, 'staticobjects/bottles/floor_bottle_darkelf_lab02', 0), + (2612, 2612, 'staticobjects/bottles/floor_bottle_darkelf_lab03', 0), + (2613, 2613, 'staticobjects/bottles/floor_bottle_darkelf_lab04', 0), + (2614, 2614, 'staticobjects/bottles/floor_potionbottle_any_large01', 0), + (2615, 2615, 'staticobjects/bottles/floor_potionbottle_any_large02', 0), + (2616, 2616, 'staticobjects/bottles/floor_potionbottle_any_large03', 0), + (2617, 2617, 'staticobjects/bottles/floor_potionbottle_any_large04', 0), + (2618, 2618, 'staticobjects/bottles/floor_potionbottle_any_large05', 0), + (2619, 2619, 'staticobjects/bottles/floor_potionbottle_any_medium01', 0), + (2620, 2620, 'staticobjects/bottles/floor_potionbottle_any_medium02', 0), + (2621, 2621, 'staticobjects/bottles/floor_potionbottle_any_medium03', 0), + (2622, 2622, 'staticobjects/bottles/floor_potionbottle_any_medium04', 0), + (2623, 2623, 'staticobjects/bottles/floor_potionbottle_any_small01', 0), + (2624, 2624, 'staticobjects/bottles/floor_potionbottle_any_small02', 0), + (2625, 2625, 'staticobjects/bottles/floor_potionbottle_any_small03', 0), + (2626, 2626, 'staticobjects/bottles/floor_potionbottle_any_small04', 0), + (2627, 2627, 'staticobjects/bottles/floor_potionbottle_any_small05', 0), + (2628, 2628, 'staticobjects/cages/floor_cage_any_bone01', 0), + (2629, 2629, 'staticobjects/cauldron/floor_pot_darkelf_cauldron01', 0), + (2630, 2630, 'staticobjects/chairs/floor_bench_any_simple01', 0), + (2631, 2631, 'staticobjects/chairs/floor_bench_darkelf_ornate01', 0), + (2632, 2632, 'staticobjects/chairs/floor_chair_any_bar01', 0), + (2633, 2633, 'staticobjects/chairs/floor_chair_any_bar02', 0), + (2634, 2634, 'staticobjects/chairs/floor_chair_any_dining01', 0), + (2635, 2635, 'staticobjects/chairs/floor_chair_any_dining02', 0), + (2636, 2636, 'staticobjects/chairs/floor_chair_any_dining03', 0), + (2637, 2637, 'staticobjects/chairs/floor_chair_any_office01', 0), + (2638, 2638, 'staticobjects/chairs/floor_chair_any_office02', 0), + (2639, 2639, 'staticobjects/chairs/floor_chair_any_office03', 0), + (2640, 2640, 'staticobjects/chairs/floor_chair_any_stone01', 0), + (2641, 2641, 'staticobjects/chairs/floor_chair_any_stone02', 0), + (2642, 2642, 'staticobjects/chairs/floor_chair_darkelf_ornate01', 0), + (2643, 2643, 'staticobjects/chairs/floor_chair_darkelf_ornate02', 0), + (2644, 2644, 'staticobjects/chairs/floor_chair_darkelf_weathered01', 0), + (2645, 2645, 'staticobjects/chairs/floor_chair_darkelf_wood01', 0), + (2646, 2646, 'staticobjects/chairs/floor_chair_woodelf_hood01', 0), + (2647, 2647, 'staticobjects/chairs/floor_chair_woodelf_hood02', 0), + (2648, 2648, 'staticobjects/chairs/floor_stool_darkelf_ornate01', 0), + (2649, 2649, 'staticobjects/chairs/floor_stool_darkelf_simple01', 0), + (2650, 2650, 'staticobjects/chairs/floor_stool_darkelf_thorny01', 0), + (2651, 2651, 'staticobjects/chairs/floor_stool_darkelf_thorny02', 0), + (2652, 2652, 'staticobjects/chairs/floor_stool_darkelf_wood01', 0), + (2653, 2653, 'staticobjects/chairs/floor_stool_halfling_wood01', 0), + (2654, 2654, 'staticobjects/chests/floor_chest_any_ornate01', 0), + (2655, 2655, 'staticobjects/chests/floor_chest_any_wood01', 0), + (2656, 2656, 'staticobjects/chests/floor_chest_darkelf_ornate01', 0), + (2657, 2657, 'staticobjects/chests/floor_chest_darkelf_ornate02', 0), + (2658, 2658, 'staticobjects/chests/floor_chest_elf_wood01', 0), + (2659, 2659, 'staticobjects/containers/floor_bucket_any_simple01', 0), + (2660, 2660, 'staticobjects/containers/floor_bucket_any_wood01', 0), + (2661, 2661, 'staticobjects/containers/floor_bucket_darkelf_metal01', 0), + (2662, 2662, 'staticobjects/containers/floor_pot_any_canopic01', 0), + (2663, 2663, 'staticobjects/containers/floor_pot_any_ornate01', 0), + (2664, 2664, 'staticobjects/containers/floor_pot_any_ornate02', 0), + (2665, 2665, 'staticobjects/containers/floor_pot_any_ornate03', 0), + (2666, 2666, 'staticobjects/containers/floor_pot_any_ornate04', 0), + (2667, 2667, 'staticobjects/containers/floor_pot_any_ornate05', 0), + (2668, 2668, 'staticobjects/containers/floor_trough_any_wood01', 0), + (2669, 2669, 'staticobjects/containers/floor_trough_darkelf_ornate01', 0), + (2670, 2670, 'staticobjects/containers/floor_vase01_any_capped01', 0), + (2671, 2671, 'staticobjects/containers/floor_vase01_any_capped02', 0), + (2672, 2672, 'staticobjects/containers/floor_vase01_any_capped03', 0), + (2673, 2673, 'staticobjects/containers/floor_vase01_any_capped04', 0), + (2674, 2674, 'staticobjects/counters/floor_counter_any_corner01', 0), + (2675, 2675, 'staticobjects/counters/floor_counter_any_generic02', 0), + (2676, 2676, 'staticobjects/counters/floor_counter_darkelf_bar01', 0), + (2677, 2677, 'staticobjects/crates/floor_crate_darkelf_wood01', 0), + (2678, 2678, 'staticobjects/crates/floor_crate_darkelf_wood02', 0), + (2679, 2679, 'staticobjects/crates/floor_crate_darkelf_wood03', 0), + (2680, 2680, 'staticobjects/crates/floor_crate_darkelf_wood04', 0), + (2681, 2681, 'staticobjects/crystals/floor_sphere_any_crystal', 0), + (2682, 2682, 'staticobjects/diode/floor_diode_any_enchanter', 0), + (2683, 2683, 'staticobjects/diode/floor_diode_any_sorcerer', 0), + (2684, 2684, 'staticobjects/diode/floor_diode_any_summoner', 0), + (2685, 2685, 'staticobjects/dressers/floor_dresser_any_ornate01', 0), + (2686, 2686, 'staticobjects/dressers/floor_dresser_darkelf_ornate01', 0), + (2687, 2687, 'staticobjects/dressers/floor_dresser_darkelf_ornate02', 0), + (2688, 2688, 'staticobjects/dressers/floor_dresser_darkelf_ornate03', 0), + (2689, 2689, 'staticobjects/kitchen/floor_pan_any_frying01', 0), + (2690, 2690, 'staticobjects/kitchen/floor_pan_any_frying02', 0), + (2691, 2691, 'staticobjects/kitchen/floor_pot_any_cooking01', 0), + (2692, 2692, 'staticobjects/kitchen/floor_pot_any_cooking02', 0), + (2693, 2693, 'staticobjects/kitchen/wall_breadholder_any_wood01', 0), + (2694, 2694, 'staticobjects/lighting/ceiling_chandalier_any_antler', 0), + (2695, 2695, 'staticobjects/lighting/ceiling_chandelier_any_skull01', 0), + (2696, 2696, 'staticobjects/lighting/ceiling_chandelier_darkelf_ornate01', 0), + (2697, 2697, 'staticobjects/lighting/ceiling_chandelier_darkelf_ornate02', 0), + (2698, 2698, 'staticobjects/lighting/ceiling_chandelier_darkelf_ornate03', 0), + (2699, 2699, 'staticobjects/lighting/ceiling_lamp_bixie_crystal01', 0), + (2700, 2700, 'staticobjects/lighting/ceiling_lamp_bixie_crystal02', 0), + (2701, 2701, 'staticobjects/lighting/ceiling_lamp_darkelf_skull01', 0), + (2702, 2702, 'staticobjects/lighting/floor_brazier_any_cazic01', 0), + (2703, 2703, 'staticobjects/lighting/floor_brazier_any_cazic02', 0), + (2704, 2704, 'staticobjects/lighting/floor_candelabra_any_table01', 0), + (2705, 2705, 'staticobjects/lighting/floor_candlelamp_any_skull01', 0), + (2706, 2706, 'staticobjects/lighting/floor_candlelamp_any_skull02', 0), + (2707, 2707, 'staticobjects/lighting/floor_candlelamp_any_skull03', 0), + (2708, 2708, 'staticobjects/lighting/floor_candlelamp_any_skull04', 0), + (2709, 2709, 'staticobjects/lighting/floor_candlelamp_any_skull05', 0), + (2710, 2710, 'staticobjects/lighting/floor_candles_any_group01', 0), + (2711, 2711, 'staticobjects/lighting/floor_candles_any_group02', 0), + (2712, 2712, 'staticobjects/lighting/floor_candles_any_group03', 0), + (2713, 2713, 'staticobjects/lighting/floor_lamp_any_table01', 0), + (2714, 2714, 'staticobjects/lighting/floor_lamp_any_table02', 0), + (2715, 2715, 'staticobjects/lighting/floor_lamp_bixie_crystal01', 0), + (2716, 2716, 'staticobjects/lighting/floor_lamp_darkelf_candle01', 0), + (2717, 2717, 'staticobjects/lighting/floor_lamp_darkelf_candle02', 0), + (2718, 2718, 'staticobjects/lighting/floor_lamp_darkelf_globe01', 0), + (2719, 2719, 'staticobjects/lighting/floor_lamp_darkelf_globe02', 0), + (2720, 2720, 'staticobjects/lighting/floor_lamp_darkelf_globe03', 0), + (2721, 2721, 'staticobjects/lighting/floor_lamp_darkelf_globe04', 0), + (2722, 2722, 'staticobjects/lighting/floor_lamp_darkelf_globe05', 0), + (2723, 2723, 'staticobjects/lighting/floor_lamp_darkelf_globe06', 0), + (2724, 2724, 'staticobjects/lighting/floor_lamp_darkelf_ornate01', 0), + (2725, 2725, 'staticobjects/lighting/floor_lamp_elf_candle01', 0), + (2726, 2726, 'staticobjects/lighting/wall_lamp_any_cazic01', 0), + (2727, 2727, 'staticobjects/lighting/wall_lamp_any_cazic02', 0), + (2728, 2728, 'staticobjects/lighting/wall_lamp_any_fancy01', 0), + (2729, 2729, 'staticobjects/lighting/wall_lamp_any_fancy02', 0), + (2730, 2730, 'staticobjects/lighting/wall_lamp_any_militia01', 0), + (2731, 2731, 'staticobjects/lighting/wall_lamp_any_militia02', 0), + (2732, 2732, 'staticobjects/lighting/wall_lamp_bixie_crystal01', 0), + (2733, 2733, 'staticobjects/lighting/wall_lamp_bixie_crystal02', 0), + (2734, 2734, 'staticobjects/lighting/wall_lamp_bixie_ornate01', 0), + (2735, 2735, 'staticobjects/lighting/wall_lamp_bixie_ornate02', 0), + (2736, 2736, 'staticobjects/lighting/wall_lamp_darkelf_candle01', 0), + (2737, 2737, 'staticobjects/lighting/wall_lamp_darkelf_globe01', 0), + (2738, 2738, 'staticobjects/lighting/wall_lamp_darkelf_globe02', 0), + (2739, 2739, 'staticobjects/lighting/wall_lamp_darkelf_globe03', 0), + (2740, 2740, 'staticobjects/lighting/wall_lamp_darkelf_torchbowl01', 0), + (2741, 2741, 'staticobjects/lighting/wall_lamp_elf_candle01', 0), + (2742, 2742, 'staticobjects/lighting/wall_walllamp_any_figurehead01', 0), + (2743, 2743, 'staticobjects/lighting/wall_walllamp_darkelf_ornate01', 0), + (2744, 2744, 'staticobjects/lighting/wall_walllamp_darkelf_ornate02', 0), + (2745, 2745, 'staticobjects/mounts/wall_mount_any_sharkhead', 0), + (2746, 2746, 'staticobjects/nautical/ceiling_shippulley_any_hanging01', 0), + (2747, 2747, 'staticobjects/nautical/floor_shippulley_any_wood01', 0), + (2748, 2748, 'staticobjects/nautical/wall_steeringwheel_any_wood01', 0), + (2749, 2749, 'staticobjects/pillow/floor_pillow_any_display01', 0), + (2750, 2750, 'staticobjects/pillow/floor_pillow_any_display02', 0), + (2751, 2751, 'staticobjects/pillow/floor_pillow_any_display03', 0), + (2752, 2752, 'staticobjects/pillow/floor_pillow_any_display04', 0), + (2753, 2753, 'staticobjects/pillow/floor_pillow_any_display05', 0), + (2754, 2754, 'staticobjects/racks/floor_rack_elf_firewood01', 0), + (2755, 2755, 'staticobjects/relics/floor_offeringbowl_any_cazic01', 0), + (2756, 2756, 'staticobjects/relics/floor_offeringbowl_any_cazic02', 0), + (2757, 2757, 'staticobjects/relics/floor_offeringbowl_any_cazic03', 0), + (2758, 2758, 'staticobjects/rugs/floor_mat_any_dirty01', 0), + (2759, 2759, 'staticobjects/rugs/floor_mat_any_display01', 0), + (2760, 2760, 'staticobjects/shelves/floor_shelf_any_floor01', 0), + (2761, 2761, 'staticobjects/shelves/wall_shelf_any_display01', 0), + (2762, 2762, 'staticobjects/shelves/wall_shelf_any_display02', 0), + (2763, 2763, 'staticobjects/shelves/wall_shelf_any_skull01', 0), + (2764, 2764, 'staticobjects/shelves/wall_shelf_any_skull02', 0), + (2765, 2765, 'staticobjects/shelves/wall_shelf_any_skull03', 0), + (2766, 2766, 'staticobjects/shelves/wall_shelf_any_weathered01', 0), + (2767, 2767, 'staticobjects/shelves/wall_shelf_halfling_wooden01', 0), + (2768, 2768, 'staticobjects/shelves/wall_shelf_halfling_wooden02', 0), + (2769, 2769, 'staticobjects/shelves/wall_shelf_halfling_wooden03', 0), + (2770, 2770, 'staticobjects/shelves/wall_shelf_halfling_wooden04', 0), + (2771, 2771, 'staticobjects/shop/floor_display_darkelf_wooden01', 0), + (2772, 2772, 'staticobjects/shop/floor_display_darkelf_wooden02', 0), + (2773, 2773, 'staticobjects/statues/floor_skeleton_human_display01', 0), + (2774, 2774, 'staticobjects/statues/wall_statue_any_figurehead01', 0), + (2775, 2775, 'staticobjects/tables/floor_desk_any_librarian01', 0), + (2776, 2776, 'staticobjects/tables/floor_desk_any_office01', 0), + (2777, 2777, 'staticobjects/tables/floor_desk_any_ornate01', 0), + (2778, 2778, 'staticobjects/tables/floor_desk_halfling_wood01', 0), + (2779, 2779, 'staticobjects/tables/floor_table_any_bedside02', 0), + (2780, 2780, 'staticobjects/tables/floor_table_any_dining01', 0), + (2781, 2781, 'staticobjects/tables/floor_table_any_dining02', 0), + (2782, 2782, 'staticobjects/tables/floor_table_any_generic01', 0), + (2783, 2783, 'staticobjects/tables/floor_table_any_generic02', 0), + (2784, 2784, 'staticobjects/tables/floor_table_any_generic03', 0), + (2785, 2785, 'staticobjects/tables/floor_table_any_ornate01', 0), + (2786, 2786, 'staticobjects/tables/floor_table_any_ornate02', 0), + (2787, 2787, 'staticobjects/tables/floor_table_any_plain01', 0), + (2788, 2788, 'staticobjects/tables/floor_table_any_plain02', 0), + (2789, 2789, 'staticobjects/tables/floor_table_any_torture01', 0), + (2790, 2790, 'staticobjects/tables/floor_table_any_torture02', 0), + (2791, 2791, 'staticobjects/tables/floor_table_any_torture03', 0), + (2792, 2792, 'staticobjects/tables/floor_table_any_wood01', 0), + (2793, 2793, 'staticobjects/tables/floor_table_any_wood02', 0), + (2794, 2794, 'staticobjects/tables/floor_table_bixie_ornate01', 0), + (2795, 2795, 'staticobjects/tables/floor_table_darkelf_ornate01', 0), + (2796, 2796, 'staticobjects/tables/floor_table_darkelf_ornate02', 0), + (2797, 2797, 'staticobjects/tables/floor_table_darkelf_ornate03', 0), + (2798, 2798, 'staticobjects/tables/floor_table_darkelf_wooden01', 0), + (2799, 2799, 'staticobjects/tables/floor_table_elf_ornate01', 0), + (2800, 2800, 'staticobjects/tables/floor_table_elf_wood01', 0), + (2801, 2801, 'staticobjects/tables/floor_table_halfling_wood01', 0), + (2802, 2802, 'staticobjects/tableware/floor_bowl_darkelf_dining01', 0), + (2803, 2803, 'staticobjects/tableware/floor_bowl_halfling_simple01', 0), + (2804, 2804, 'staticobjects/tableware/floor_bowl_halfling_simple02', 0), + (2805, 2805, 'staticobjects/tableware/floor_cup_any_coffee01', 0), + (2806, 2806, 'staticobjects/tableware/floor_cup_any_coffee02', 0), + (2807, 2807, 'staticobjects/tableware/floor_cup_any_wood01', 0), + (2808, 2808, 'staticobjects/tableware/floor_cup_darkelf_glass01', 0), + (2809, 2809, 'staticobjects/tableware/floor_cup_darkelf_glass02', 0), + (2810, 2810, 'staticobjects/tableware/floor_fork_darkelf_dining01', 0), + (2811, 2811, 'staticobjects/tableware/floor_glass_darkelf_cocktail01', 0), + (2812, 2812, 'staticobjects/tableware/floor_knife_darkelf_dining01', 0), + (2813, 2813, 'staticobjects/tableware/floor_plate_any_dining01', 0), + (2814, 2814, 'staticobjects/tableware/floor_plate_darkelf_dining01', 0), + (2815, 2815, 'staticobjects/tableware/floor_spoon_darkelf_dining01', 0), + (2816, 2816, 'staticobjects/tents/grey_tent_large01', 0), + (2817, 2817, 'staticobjects/tents/grey_tent_small01', 0), + (2818, 2818, 'staticobjects/tools/floor_hammer_darkelf_crafting01', 0), + (2819, 2819, 'staticobjects/tools/floor_handsaw_darkelf_crafting01', 0), + (2820, 2820, 'staticobjects/tools/floor_kiln_darkelf_crafting01', 0), + (2821, 2821, 'staticobjects/tools/floor_pick_darkelf_crafting01', 0), + (2822, 2822, 'staticobjects/tools/floor_pitchfork_darkelf_crafting01', 0), + (2823, 2823, 'staticobjects/tools/floor_potterywheel_darkelf_crafting01', 0), + (2824, 2824, 'staticobjects/tools/floor_scythe_darkelf_crafting01', 0), + (2825, 2825, 'staticobjects/world_devices/temp_alchemy', 0), + (2826, 2826, 'staticobjects/world_devices/temp_desk', 0), + (2827, 2827, 'staticobjects/world_devices/temp_keg', 0), + (2828, 2828, 'staticobjects/world_devices/temp_loom', 0), + (2829, 2829, 'staticobjects/world_devices/temp_rune', 0), + (2830, 2830, 'staticobjects/world_devices/temp_sawhorse', 0), + (2831, 2831, 'staticobjects/world_devices/temp_scribe', 0), + (2832, 2832, 'staticobjects/world_devices/temp_stove', 0), + (2833, 2833, 'creatures/monsters/bat_ghost', 0), + (2834, 2834, 'creatures/monsters/bear_ghost', 0), + (2835, 2835, 'creatures/monsters/wolf_ghost', 0), + (2836, 2836, 'ec/pc/barbarian/barbarian_male_ghost', 0), + (2837, 2837, 'ec/pc/darkelf/darkelf_female_ghost', 0), + (2838, 2838, 'ec/pc/darkelf/darkelf_male_ghost', 0), + (2839, 2839, 'ec/pc/dwarf/dwarf_female_ghost', 0), + (2840, 2840, 'ec/pc/dwarf/dwarf_male_ghost', 0), + (2841, 2841, 'ec/pc/erudite/erudite_female_ghost', 0), + (2842, 2842, 'ec/pc/erudite/erudite_male_ghost', 0), + (2843, 2843, 'ec/pc/gnome/gnome_female_ghost', 0), + (2844, 2844, 'ec/pc/gnome/gnome_male_ghost', 0), + (2845, 2845, 'ec/pc/halfelf/halfelf_female_ghost', 0), + (2846, 2846, 'ec/pc/halfelf/halfelf_male_ghost', 0), + (2847, 2847, 'ec/pc/halfling/halfling_female_ghost', 0), + (2848, 2848, 'ec/pc/halfling/halfling_male_ghost', 0), + (2849, 2849, 'ec/pc/highelf/highelf_female_ghost', 0), + (2850, 2850, 'ec/pc/highelf/highelf_male_ghost', 0), + (2851, 2851, 'ec/pc/human/human_female_ghost', 0), + (2852, 2852, 'ec/pc/human/human_male_ghost', 0), + (2853, 2853, 'ec/pc/iksar/iksar_female_ghost', 0), + (2854, 2854, 'ec/pc/iksar/iksar_male_ghost', 0), + (2855, 2855, 'ec/pc/kerra/kerra_female_ghost', 0), + (2856, 2856, 'ec/pc/kerra/kerra_male_ghost', 0), + (2857, 2857, 'ec/pc/ogre/ogre_female_ghost', 0), + (2858, 2858, 'ec/pc/ogre/ogre_male_ghost', 0), + (2859, 2859, 'ec/pc/ratonga/ratonga_female_ghost', 0), + (2860, 2860, 'ec/pc/ratonga/ratonga_male_ghost', 0), + (2861, 2861, 'ec/pc/troll/troll_female_ghost', 0), + (2862, 2862, 'ec/pc/troll/troll_male_ghost', 0), + (2863, 2863, 'ec/pc/woodelf/woodelf_female_ghost', 0), + (2864, 2864, 'ec/pc/woodelf/woodelf_male_ghost', 0), + (2865, 2865, 'staticobjects/scrolls/obelisk_scroll_case', 0), + (2866, 2866, 'accessories/wearable_items/magus/robes/plain_quilted/chest', 0), + (2867, 2867, 'accessories/wearable_items/magus/robes/plain_quilted/hood', 0), + (2868, 2868, 'accessories/wearable_items/magus/robes/plain_quilted/pants', 0), + (2869, 2869, 'accessories/wearable_items/magus/robes/plain_quilted/skirt', 0), + (2870, 2870, 'staticobjects/barrels/six_barrels', 0), + (2871, 2871, 'staticobjects/candles/evil_skull_flaming', 0), + (2872, 2872, 'staticobjects/canopicjars/large_broken', 0), + (2873, 2873, 'staticobjects/canopicjars/large_broken_laying', 0), + (2874, 2874, 'staticobjects/canopicjars/medium_whole', 0), + (2875, 2875, 'staticobjects/canopicjars/small_whole', 0), + (2876, 2876, 'staticobjects/cobwebs/cobwebs', 0), + (2877, 2877, 'staticobjects/coffins_and_sarcophagus/nektropos_coffin', 0), + (2878, 2878, 'staticobjects/coffins_and_sarcophagus/nektropos_coffin_lid', 0), + (2879, 2879, 'staticobjects/coffins_and_sarcophagus/plain_grey', 0), + (2880, 2880, 'staticobjects/coffins_and_sarcophagus/shroud', 0), + (2881, 2881, 'accessories/wearable_items/magus/robes/plain_quilted_patches/chest', 0), + (2882, 2882, 'accessories/wearable_items/magus/robes/plain_quilted_patches/hood', 0), + (2883, 2883, 'accessories/wearable_items/magus/robes/plain_quilted_patches/pants', 0), + (2884, 2884, 'accessories/wearable_items/magus/robes/plain_quilted_patches/skirt', 0), + (2885, 2885, 'accessories/wearable_items/tradesman/clothing/brawler/brawler_wrapped/chest', 0), + (2886, 2886, 'staticobjects/halloween/tfs_present02_medium', 1096), + (2887, 2887, 'accessories/wearable_items/tradesman/clothing/brawler/brawler_wrapped/pants', 0), + (2888, 2888, 'accessories/wearable_items/tradesman/clothing/brawler/brawler_wrapped/shoulders', 0), + (2889, 2889, 'staticobjects/halloween/th_skeletons_skell01', 1096), + (2890, 2890, 'accessories/wieldable_items/weapons/rapier/cutlass/cutlass001_plain', 0), + (2891, 2891, 'accessories/wieldable_items/weapons/rapier/cutlass/cutlass001_rusty', 0), + (2892, 2892, 'accessories/wieldable_items/weapons/rapier/epee/epee001_ornate', 0), + (2893, 2893, 'accessories/wieldable_items/weapons/rapier/epee/epee001_plain', 0), + (2894, 2894, 'accessories/wieldable_items/weapons/rapier/epee/epee001_rusty', 0), + (2895, 2895, 'creatures/monsters/gargoyle_graveyard', 0), + (2896, 2896, 'creatures/pets/factor_order', 0), + (2897, 2897, 'creatures/pets/form_order', 0), + (2898, 2898, 'creatures/pets/fragment_order', 0), + (2899, 2899, 'creatures/tu/golem_lava', 0), + (2900, 2900, 'ec/npc/goblin_lava', 0), + (2901, 2901, 'ec/npc/skeleton_darkbone', 0), + (2902, 2902, 'staticobjects/chests/orc_chest_locked', 0), + (2903, 2903, 'staticobjects/pillars/large_pillar', 0), + (2904, 2904, 'staticobjects/pillars/small_pillar', 0), + (2905, 2905, 'staticobjects/racks/gnoll_weapon_rack01', 0), + (2906, 2906, 'staticobjects/trapdoor/trapdoor_frame', 0), + (2907, 2907, 'staticobjects/trapdoor/trapdoor_lid', 0), + (2908, 2908, 'accessories/wieldable_items/weapons/rapier/foil/foil001_plain', 0), + (2909, 2909, 'accessories/wieldable_items/weapons/rapier/foil/foil001_rusty', 0), + (2910, 2910, 'accessories/wieldable_items/weapons/rapier/karabela/karabela001_plain', 0), + (2911, 2911, 'accessories/wieldable_items/weapons/rapier/karabela/karabela001_rusty', 0), + (2912, 2912, 'creatures/monsters/lioness_ghost', 0), + (2913, 2913, 'creatures/monsters/lion_ghost', 0), + (2914, 2914, 'creatures/monsters/mimic_ghost', 0), + (2915, 2915, 'creatures/monsters/thoughtbleeder_ghost', 0), + (2916, 2916, 'staticobjects/gravestones/gravedirt01', 0), + (2917, 2917, 'staticobjects/gravestones/gravedirt02', 0), + (2918, 2918, 'staticobjects/gravestones/gravestone03', 0), + (2919, 2919, 'staticobjects/gravestones/gravestone04', 0), + (2920, 2920, 'staticobjects/gravestones/gravestone05', 0), + (2921, 2921, 'staticobjects/gravestones/gravestone06', 0), + (2922, 2922, 'staticobjects/gravestones/gravestone07', 0), + (2923, 2923, 'staticobjects/gravestones/gravestone08', 0), + (2924, 2924, 'staticobjects/gravestones/gravestone09', 0), + (2925, 2925, 'staticobjects/gravestones/gravestone10', 0), + (2926, 2926, 'accessories/wearable_items/tradesman/clothing/brawler/brawler_wrapped/feet', 0), + (2927, 2927, 'accessories/wieldable_items/weapons/rapier/rapier/rapier001_plain', 0), + (2928, 2928, 'accessories/wieldable_items/weapons/rapier/rapier/rapier001_runic', 0), + (2929, 2929, 'accessories/wieldable_items/weapons/rapier/rapier/rapier001_rusty', 0), + (2930, 2930, 'creatures/monsters/spider_cave_ghost', 0), + (2931, 2931, 'accessories/wieldable_items/weapons/talisman/censer/censer001_ornate', 0), + (2932, 2932, 'staticobjects/halloween/vel_rock_ettin_skull01', 1096), + (2933, 2933, 'ec/npc/skeleton_ghost', 0), + (2934, 2934, 'ec/npc/skeleton_icebone', 0), + (2935, 2935, 'ec/npc/skeleton_meaty', 0), + (2936, 2936, 'ec/npc/skeleton_stone_servant', 0), + (2937, 2937, 'ec/npc/skeleton_terminator', 0), + (2938, 2938, 'staticobjects/alter/floor_alter_any_crucifixion01', 0), + (2939, 2939, 'staticobjects/barrels/floor_barrel_human_ornate01', 0), + (2940, 2940, 'staticobjects/barrels/floor_barrel_human_ornate02', 0), + (2941, 2941, 'staticobjects/barrels/floor_barrel_human_plain01', 0), + (2942, 2942, 'staticobjects/barrels/floor_barrel_human_plain02', 0), + (2943, 2943, 'staticobjects/barrels/floor_barrel_human_weathered01', 0), + (2944, 2944, 'staticobjects/barrels/floor_barrel_human_weathered02', 0), + (2945, 2945, 'staticobjects/barrels/floor_barrel_human_wood01', 0), + (2946, 2946, 'staticobjects/barrels/floor_barrel_human_wood02', 0), + (2947, 2947, 'staticobjects/barrels/floor_barrel_human_wood03', 0), + (2948, 2948, 'staticobjects/beds/floor_bedframe_elf_broken01', 0), + (2949, 2949, 'staticobjects/beds/floor_bedframe_elf_broken02', 0), + (2950, 2950, 'staticobjects/beds/floor_bedframe_human_wood01', 0), + (2951, 2951, 'staticobjects/beds/floor_bed_elf_dirty01', 0), + (2952, 2952, 'staticobjects/beds/floor_bed_human_jail01', 0), + (2953, 2953, 'staticobjects/beds/floor_bed_human_warped01', 0), + (2954, 2954, 'staticobjects/beds/floor_bed_human_warped02', 0), + (2955, 2955, 'staticobjects/beds/floor_bed_human_warped03', 0), + (2956, 2956, 'staticobjects/beds/floor_bed_human_warped04', 0), + (2957, 2957, 'staticobjects/beds/floor_bed_human_warped05', 0), + (2958, 2958, 'staticobjects/beds/floor_bed_human_warped06', 0), + (2959, 2959, 'staticobjects/beds/floor_bed_human_warped07', 0), + (2960, 2960, 'staticobjects/beds/floor_bed_human_warped08', 0), + (2961, 2961, 'staticobjects/beds/floor_bed_human_warped09', 0), + (2962, 2962, 'staticobjects/beds/floor_bed_human_warped10', 0), + (2963, 2963, 'staticobjects/beds/floor_bunkbed_human_step01', 0), + (2964, 2964, 'staticobjects/beds/floor_doublebed_human_grand01', 0), + (2965, 2965, 'staticobjects/beds/floor_doublebed_human_grand02', 0), + (2966, 2966, 'staticobjects/beds/floor_doublebed_human_ornate01', 0), + (2967, 2967, 'staticobjects/beds/floor_doublebed_human_plain01', 0), + (2968, 2968, 'staticobjects/beds/floor_singlebed_human_ornate01', 0), + (2969, 2969, 'staticobjects/beds/floor_singlebed_human_ornate02', 0), + (2970, 2970, 'staticobjects/beds/floor_singlebed_human_ornate03', 0), + (2971, 2971, 'staticobjects/beds/floor_singlebed_human_ornate04', 0), + (2972, 2972, 'staticobjects/beds/floor_singlebed_human_ornate05', 0), + (2973, 2973, 'staticobjects/beds/floor_singlebed_human_ornate06', 0), + (2974, 2974, 'staticobjects/beds/floor_singlebed_human_ornate07', 0), + (2975, 2975, 'staticobjects/beds/floor_singlebed_human_plain01', 0), + (2976, 2976, 'staticobjects/beds/wall_bed_human_jail01', 0), + (2977, 2977, 'staticobjects/bell/floor_bell_human_large01', 0), + (2978, 2978, 'staticobjects/bell/floor_bell_human_large02', 0), + (2979, 2979, 'staticobjects/benches/floor_bench_human_bench01', 0), + (2980, 2980, 'staticobjects/benches/floor_bench_human_bench02', 0), + (2981, 2981, 'staticobjects/benches/floor_bench_human_ornate03', 0), + (2982, 2982, 'staticobjects/benches/floor_bench_human_stone01', 0), + (2983, 2983, 'staticobjects/bixie/floor_den_bixie_ornate01', 0), + (2984, 2984, 'staticobjects/blacksmith/floor_anvil_any_plain01', 0), + (2985, 2985, 'staticobjects/bones/floor_bones_human_eroded01', 0), + (2986, 2986, 'staticobjects/bones/floor_bones_human_eroded02', 0), + (2987, 2987, 'staticobjects/bones/floor_bones_human_eroded03', 0), + (2988, 2988, 'staticobjects/bones/floor_bones_human_eroded04', 0), + (2989, 2989, 'staticobjects/bones/floor_bones_human_plain01', 0), + (2990, 2990, 'staticobjects/bones/floor_bones_human_plain02', 0), + (2991, 2991, 'staticobjects/bones/floor_bones_human_plain03', 0), + (2992, 2992, 'staticobjects/bones/floor_bones_human_plain04', 0), + (2993, 2993, 'staticobjects/bones/floor_bone_human_skull01', 0), + (2994, 2994, 'staticobjects/bones/floor_bone_human_skull02', 0), + (2995, 2995, 'staticobjects/bones/floor_bone_human_skull03', 0), + (2996, 2996, 'staticobjects/bones/floor_bone_iksar_skull01', 0), + (2997, 2997, 'staticobjects/bones/floor_bone_iksar_skull02', 0), + (2998, 2998, 'staticobjects/bones/floor_bone_orc_skull01', 0), + (2999, 2999, 'staticobjects/bones/floor_skull_human_bashed01', 0), + (3000, 3000, 'staticobjects/bones/floor_skull_human_bashed02', 0), + (3001, 3001, 'staticobjects/bones/floor_skull_human_row01', 0), + (3002, 3002, 'staticobjects/bookcases/floor_bookcase_any_tall01', 0), + (3003, 3003, 'staticobjects/bookcases/floor_bookcase_any_tall02', 0), + (3004, 3004, 'staticobjects/bookcases/floor_bookcase_any_tall03', 0), + (3005, 3005, 'staticobjects/bookcases/floor_bookcase_any_tall04', 0), + (3006, 3006, 'staticobjects/bookcases/floor_bookcase_darkelf_broken01', 0), + (3007, 3007, 'staticobjects/bookcases/floor_bookcase_human_ornate03', 0), + (3008, 3008, 'staticobjects/bookcases/floor_bookcase_human_ornate04', 0), + (3009, 3009, 'staticobjects/bookcases/floor_bookcase_human_ornate05', 0), + (3010, 3010, 'staticobjects/bookcases/floor_bookcase_human_ornate06', 0), + (3011, 3011, 'staticobjects/bookcases/floor_bookcase_human_ornate07', 0), + (3012, 3012, 'staticobjects/bookcases/floor_bookcase_human_ornate08', 0), + (3013, 3013, 'staticobjects/bookcases/floor_bookcase_human_plain02', 0), + (3014, 3014, 'staticobjects/bookcases/floor_bookcase_human_plain03', 0), + (3015, 3015, 'staticobjects/bookcases/floor_bookcase_human_plain04', 0), + (3016, 3016, 'staticobjects/bookcases/floor_bookcase_human_plain05', 0), + (3017, 3017, 'staticobjects/bookcases/floor_bookcase_human_preserves01', 0), + (3018, 3018, 'staticobjects/bookcases/floor_bookcase_human_preserves02', 0), + (3019, 3019, 'staticobjects/bookcases/floor_bookcase_human_refined01', 0), + (3020, 3020, 'staticobjects/bookcases/floor_bookcase_human_stone02', 0), + (3021, 3021, 'staticobjects/bookcases/floor_bookcase_human_stone03', 0), + (3022, 3022, 'staticobjects/books/floor_books_human_row01', 0), + (3023, 3023, 'staticobjects/books/floor_books_human_row02', 0), + (3024, 3024, 'staticobjects/books/floor_books_human_row03', 0), + (3025, 3025, 'staticobjects/books/floor_books_human_row04', 0), + (3026, 3026, 'staticobjects/books/floor_books_human_stack01', 0), + (3027, 3027, 'staticobjects/books/floor_books_human_stack02', 0), + (3028, 3028, 'staticobjects/books/floor_books_human_stack03', 0), + (3029, 3029, 'staticobjects/books/floor_books_human_stack04', 0), + (3030, 3030, 'staticobjects/books/floor_book_human_open01', 0), + (3031, 3031, 'staticobjects/books/floor_book_human_ornate01', 0), + (3032, 3032, 'staticobjects/books/floor_book_human_ornate02', 0), + (3033, 3033, 'staticobjects/books/floor_book_human_ornate03', 0), + (3034, 3034, 'staticobjects/books/floor_book_human_plain01', 0), + (3035, 3035, 'staticobjects/books/floor_book_human_plain02', 0), + (3036, 3036, 'staticobjects/books/floor_book_human_plain03', 0), + (3037, 3037, 'staticobjects/books/floor_book_human_plain04', 0), + (3038, 3038, 'staticobjects/cages/ceiling_cage_any_steel01', 0), + (3039, 3039, 'staticobjects/cages/floor_cage_any_stabbing01', 0), + (3040, 3040, 'staticobjects/chairs/floor_chair_darkelf_broken01', 0), + (3041, 3041, 'staticobjects/chairs/floor_chair_darkelf_broken02', 0), + (3042, 3042, 'staticobjects/chairs/floor_chair_darkelf_broken03', 0), + (3043, 3043, 'staticobjects/chairs/floor_chair_darkelf_broken04', 0), + (3044, 3044, 'staticobjects/chairs/floor_chair_darkelf_broken05', 0), + (3045, 3045, 'staticobjects/chairs/floor_chair_gnome_ornate01', 0), + (3046, 3046, 'staticobjects/chairs/floor_chair_human_elite01', 0), + (3047, 3047, 'staticobjects/chairs/floor_chair_human_elite02', 0), + (3048, 3048, 'staticobjects/chairs/floor_chair_human_elite03', 0), + (3049, 3049, 'staticobjects/chairs/floor_chair_human_elite04', 0), + (3050, 3050, 'staticobjects/chairs/floor_chair_human_hood01', 0), + (3051, 3051, 'staticobjects/chairs/floor_chair_human_mahogany01', 0), + (3052, 3052, 'staticobjects/chairs/floor_chair_human_mahogany02', 0), + (3053, 3053, 'staticobjects/chairs/floor_chair_human_mahogany03', 0), + (3054, 3054, 'staticobjects/chairs/floor_chair_human_mahogany04', 0), + (3055, 3055, 'staticobjects/chairs/floor_chair_human_mahogany05', 0), + (3056, 3056, 'staticobjects/chairs/floor_chair_human_mahogany06', 0), + (3057, 3057, 'staticobjects/chairs/floor_chair_human_militia01', 0), + (3058, 3058, 'staticobjects/chairs/floor_chair_human_militia02', 0), + (3059, 3059, 'staticobjects/chairs/floor_chair_human_missingleg01', 0), + (3060, 3060, 'staticobjects/chairs/floor_chair_human_plain03', 0), + (3061, 3061, 'staticobjects/chairs/floor_chair_human_twisted01', 0), + (3062, 3062, 'staticobjects/chairs/floor_chair_human_wooden01', 0), + (3063, 3063, 'staticobjects/chairs/floor_chair_human_wooden02', 0), + (3064, 3064, 'staticobjects/chairs/floor_chair_human_wooden03', 0), + (3065, 3065, 'staticobjects/chairs/floor_chair_woodelf_broken', 0), + (3066, 3066, 'staticobjects/chairs/floor_chair_woodelf_broken01', 0), + (3067, 3067, 'staticobjects/chairs/floor_couch_bixie_ornate01', 0), + (3068, 3068, 'staticobjects/chairs/floor_couch_bixie_ornate02', 0), + (3069, 3069, 'staticobjects/chairs/floor_stool_darkelf_broken01', 0), + (3070, 3070, 'staticobjects/chairs/floor_stool_human_elite01', 0), + (3071, 3071, 'staticobjects/chairs/floor_stool_human_leather01', 0), + (3072, 3072, 'staticobjects/chairs/floor_stool_human_mahogany01', 0), + (3073, 3073, 'staticobjects/chairs/floor_stool_human_simple01', 0), + (3074, 3074, 'staticobjects/chests/floor_chest_human_apothecary01', 0), + (3075, 3075, 'staticobjects/chests/floor_chest_human_apothecary02', 0), + (3076, 3076, 'staticobjects/chests/floor_chest_human_hood01', 0), + (3077, 3077, 'staticobjects/chests/floor_chest_human_hood02', 0), + (3078, 3078, 'staticobjects/chests/floor_chest_human_hood03', 0), + (3079, 3079, 'staticobjects/chests/floor_chest_human_hood04', 0), + (3080, 3080, 'staticobjects/chests/floor_chest_human_militia01', 0), + (3081, 3081, 'staticobjects/chests/floor_chest_human_militia02', 0), + (3082, 3082, 'staticobjects/chests/floor_chest_human_ornate01', 0), + (3083, 3083, 'staticobjects/chests/floor_chest_human_ornate02', 0), + (3084, 3084, 'staticobjects/chests/floor_chest_human_plain01', 0), + (3085, 3085, 'staticobjects/chests/floor_chest_human_plain02', 0), + (3086, 3086, 'staticobjects/chests/floor_chest_human_plain03', 0), + (3087, 3087, 'staticobjects/chests/floor_chest_human_wood02', 0), + (3088, 3088, 'staticobjects/chests/floor_chest_human_wood03', 0), + (3089, 3089, 'staticobjects/clothspinners/floor_loom_any_wooden01', 0), + (3090, 3090, 'staticobjects/clothspinners/floor_spinningwheel_any_wood01', 0), + (3091, 3091, 'staticobjects/coffins_and_sarcophagus/floor_ark_any_sacred01', 0), + (3092, 3092, 'staticobjects/coffins_and_sarcophagus/floor_casket_any_cadaver01', 0), + (3093, 3093, 'staticobjects/coffins_and_sarcophagus/floor_casket_any_ornate01', 0), + (3094, 3094, 'staticobjects/containers/floor_basin_any_ornate01', 0), + (3095, 3095, 'staticobjects/containers/floor_bottle_human_milk01', 0), + (3096, 3096, 'staticobjects/containers/floor_bottle_human_pill01', 0), + (3097, 3097, 'staticobjects/containers/floor_bottle_human_potion01', 0), + (3098, 3098, 'staticobjects/containers/floor_bottle_human_potion02', 0), + (3099, 3099, 'staticobjects/containers/floor_bottle_human_preservation01', 0), + (3100, 3100, 'staticobjects/containers/floor_bottle_human_preservation02', 0), + (3101, 3101, 'staticobjects/containers/floor_bottle_human_preservation03', 0), + (3102, 3102, 'staticobjects/containers/floor_box_any_wood01', 0), + (3103, 3103, 'staticobjects/containers/floor_bucket_any_winepress01', 0), + (3104, 3104, 'staticobjects/containers/floor_bucket_barbarian_wood01', 0), + (3105, 3105, 'staticobjects/containers/floor_bucket_human_ornate01', 0), + (3106, 3106, 'staticobjects/containers/floor_bucket_human_ornate02', 0), + (3107, 3107, 'staticobjects/containers/floor_bucket_human_plain01', 0), + (3108, 3108, 'staticobjects/containers/floor_bucket_human_plain02', 0), + (3109, 3109, 'staticobjects/containers/floor_bucket_human_plain03', 0), + (3110, 3110, 'staticobjects/containers/floor_bucket_human_wood01', 0), + (3111, 3111, 'staticobjects/containers/floor_flask_human_leather01', 0), + (3112, 3112, 'staticobjects/containers/floor_flask_human_leather02', 0), + (3113, 3113, 'staticobjects/containers/floor_jar_any_canopic01', 0), + (3114, 3114, 'staticobjects/containers/floor_jar_any_canopic02', 0), + (3115, 3115, 'staticobjects/containers/floor_jar_any_canopic03', 0), + (3116, 3116, 'staticobjects/containers/floor_jar_halfling_ornate01', 0), + (3117, 3117, 'staticobjects/containers/floor_jar_halfling_ornate02', 0), + (3118, 3118, 'staticobjects/containers/floor_jar_halfling_plain01', 0), + (3119, 3119, 'staticobjects/containers/floor_jar_halfling_plain02', 0), + (3120, 3120, 'staticobjects/containers/floor_trough_human_wood01', 0), + (3121, 3121, 'staticobjects/containers/floor_trough_human_wood02', 0), + (3122, 3122, 'staticobjects/containers/floor_trough_human_wood03', 0), + (3123, 3123, 'staticobjects/containers/floor_urn_any_cazic01', 0), + (3124, 3124, 'staticobjects/containers/floor_urn_any_cazic02', 0), + (3125, 3125, 'staticobjects/containers/wall_flask_human_leather01', 0), + (3126, 3126, 'staticobjects/counters/floor_barcounter_human_ornate01', 0), + (3127, 3127, 'staticobjects/counters/floor_cornercounter_human_plain01', 0), + (3128, 3128, 'staticobjects/counters/floor_cornercounter_human_plain02', 0), + (3129, 3129, 'staticobjects/counters/floor_cornercounter_human_stone01', 0), + (3130, 3130, 'staticobjects/counters/floor_cornercounter_human_stone02', 0), + (3131, 3131, 'staticobjects/counters/floor_counter_human_corner02', 0), + (3132, 3132, 'staticobjects/counters/floor_counter_human_ornate01', 0), + (3133, 3133, 'staticobjects/counters/floor_counter_human_ornate02', 0), + (3134, 3134, 'staticobjects/counters/floor_counter_human_ornate03', 0), + (3135, 3135, 'staticobjects/counters/floor_counter_human_plain01', 0), + (3136, 3136, 'staticobjects/counters/floor_counter_human_plain02', 0), + (3137, 3137, 'staticobjects/counters/floor_counter_human_stone01', 0), + (3138, 3138, 'staticobjects/counters/floor_counter_human_stone02', 0), + (3139, 3139, 'staticobjects/counters/floor_counter_human_wood01', 0), + (3140, 3140, 'staticobjects/counters/floor_counter_human_wood02', 0), + (3141, 3141, 'staticobjects/counters/floor_counter_human_wood03', 0), + (3142, 3142, 'staticobjects/counters/floor_counter_human_wood04', 0), + (3143, 3143, 'staticobjects/counters/floor_counter_human_wood05', 0), + (3144, 3144, 'staticobjects/counters/floor_roundcounter_human_plain01', 0), + (3145, 3145, 'staticobjects/counters/floor_roundcounter_human_stone01', 0), + (3146, 3146, 'staticobjects/crates/floor_crate_human_boarded01', 0), + (3147, 3147, 'staticobjects/crates/floor_crate_human_boarded02', 0), + (3148, 3148, 'staticobjects/crates/floor_crate_human_boarded03', 0), + (3149, 3149, 'staticobjects/crates/floor_crate_human_boarded04', 0), + (3150, 3150, 'staticobjects/crates/floor_crate_human_boarded05', 0), + (3151, 3151, 'staticobjects/crates/floor_crate_human_hood01', 0), + (3152, 3152, 'staticobjects/crates/floor_crate_human_hood02', 0), + (3153, 3153, 'staticobjects/crates/floor_crate_human_hood03', 0), + (3154, 3154, 'staticobjects/crates/floor_crate_human_hood04', 0), + (3155, 3155, 'staticobjects/crates/floor_crate_human_plain01', 0), + (3156, 3156, 'staticobjects/crates/floor_crate_human_plain02', 0), + (3157, 3157, 'staticobjects/crates/floor_crate_human_plain03', 0), + (3158, 3158, 'staticobjects/crystals/floor_crystal_any_gem01', 0), + (3159, 3159, 'staticobjects/crystals/floor_crystal_any_gem02', 0), + (3160, 3160, 'staticobjects/crystals/floor_crystal_any_gem03', 0), + (3161, 3161, 'staticobjects/crystals/floor_crystal_any_gem04', 0), + (3162, 3162, 'staticobjects/crystals/floor_crystal_any_gem05', 0), + (3163, 3163, 'staticobjects/crystals/floor_crystal_any_gem06', 0), + (3164, 3164, 'staticobjects/dressers/floor_cabinet_bixie_ornate01', 0), + (3165, 3165, 'staticobjects/dressers/floor_dresser_human_elite01', 0), + (3166, 3166, 'staticobjects/dressers/floor_dresser_human_warped01', 0), + (3167, 3167, 'staticobjects/dressers/floor_dresser_human_warped02', 0), + (3168, 3168, 'staticobjects/dressers/floor_dresser_human_warped03', 0), + (3169, 3169, 'staticobjects/dressers/floor_dresser_human_warped04', 0), + (3170, 3170, 'staticobjects/dressers/floor_dresser_human_warped05', 0), + (3171, 3171, 'staticobjects/dressers/floor_dresser_human_warped06', 0), + (3172, 3172, 'staticobjects/games/floor_gamecards_human_spread01', 0), + (3173, 3173, 'staticobjects/games/floor_gamecards_human_spread02', 0), + (3174, 3174, 'staticobjects/games/floor_gamecards_human_spread03', 0), + (3175, 3175, 'staticobjects/games/floor_gamecards_human_stack01', 0), + (3176, 3176, 'staticobjects/games/floor_gamechips_human_stack01', 0), + (3177, 3177, 'staticobjects/games/floor_gamechips_human_stack02', 0), + (3178, 3178, 'staticobjects/gears/floor_gear_any_cogwheel01', 0), + (3179, 3179, 'staticobjects/gears/gear_single', 0), + (3180, 3180, 'staticobjects/general/floor_pedestal_any_ornate01', 0), + (3181, 3181, 'staticobjects/kegs/floor_keg_halfing_factory01', 0), + (3182, 3182, 'staticobjects/kegs/floor_keg_halfling_wood01', 0), + (3183, 3183, 'staticobjects/kegs/floor_keg_human_basic01', 0), + (3184, 3184, 'staticobjects/kegs/floor_keg_human_basic02', 0), + (3185, 3185, 'staticobjects/kegs/floor_keg_human_ornate01', 0), + (3186, 3186, 'staticobjects/kegs/floor_keg_human_ornate02', 0), + (3187, 3187, 'staticobjects/kegs/floor_keg_human_plain01', 0), + (3188, 3188, 'staticobjects/kegs/floor_keg_human_plain02', 0), + (3189, 3189, 'staticobjects/kegs/floor_keg_human_wood01', 0), + (3190, 3190, 'staticobjects/kegs/floor_keg_human_wood02', 0), + (3191, 3191, 'staticobjects/kegs/floor_keg_ogre_wood01', 0), + (3192, 3192, 'staticobjects/kegs/floor_keg_ogre_wood02', 0), + (3193, 3193, 'staticobjects/lighting/ceiling_torch_any_flaming01', 0), + (3194, 3194, 'staticobjects/lighting/floor_torch_any_flaming01', 0), + (3195, 3195, 'staticobjects/lighting/floor_torch_any_flaming02', 0), + (3196, 3196, 'staticobjects/lighting/floor_torch_any_horizontal01', 0), + (3197, 3197, 'staticobjects/lighting/wall_torch_any_flaming01', 0), + (3198, 3198, 'staticobjects/lighting/wall_torch_any_palm01', 0), + (3199, 3199, 'staticobjects/maps/floor_globe_any_map01', 0), + (3200, 3200, 'staticobjects/pictures/wall_portrait_human_girl01', 0), + (3201, 3201, 'staticobjects/pictures/wall_portrait_human_girl02', 0), + (3202, 3202, 'staticobjects/pictures/wall_portrait_human_girl03', 0), + (3203, 3203, 'staticobjects/pictures/wall_portrait_human_girl04', 0), + (3204, 3204, 'staticobjects/pictures/wall_portrait_human_girl05', 0), + (3205, 3205, 'staticobjects/pictures/wall_portrait_human_girl06', 0), + (3206, 3206, 'staticobjects/pictures/wall_portrait_human_girl07', 0), + (3207, 3207, 'staticobjects/podium/floor_podium_any_chanting01', 0), + (3208, 3208, 'staticobjects/racks/floor_rack_any_firewood01', 0), + (3209, 3209, 'staticobjects/riser/floor_riser_human_wood01', 0), + (3210, 3210, 'staticobjects/riser/floor_riser_human_wood02', 0), + (3211, 3211, 'staticobjects/rugs/floor_rug_any_ornate01', 0), + (3212, 3212, 'staticobjects/sacks/floor_sack_any_flour01', 0), + (3213, 3213, 'staticobjects/scrolls/floor_scroll_any_cazic01', 0), + (3214, 3214, 'staticobjects/scrolls/floor_scroll_any_cazic02', 0), + (3215, 3215, 'staticobjects/scrolls/floor_scroll_any_cazic03', 0), + (3216, 3216, 'staticobjects/scrolls/floor_scroll_any_cazic04', 0), + (3217, 3217, 'staticobjects/scrolls/floor_scroll_any_plain01', 0), + (3218, 3218, 'staticobjects/scrolls/floor_scroll_any_plain02', 0), + (3219, 3219, 'staticobjects/scrolls/floor_scroll_any_plain03', 0), + (3220, 3220, 'staticobjects/shop/floor_window_any_teller01', 0), + (3221, 3221, 'staticobjects/statues/wall_statue_any_stoneface01', 0), + (3222, 3222, 'staticobjects/tables/floor_chesstable_human_ornate01', 0), + (3223, 3223, 'staticobjects/tables/floor_gametable_gnome_round01', 0), + (3224, 3224, 'staticobjects/tables/floor_gametable_gnome_round02', 0), + (3225, 3225, 'staticobjects/tables/floor_gametable_human_card01', 0), + (3226, 3226, 'staticobjects/tables/floor_gametable_human_missingleg01', 0), + (3227, 3227, 'staticobjects/tables/floor_gametable_human_missingleg02', 0), + (3228, 3228, 'staticobjects/tables/floor_gametable_human_ornate01', 0), + (3229, 3229, 'staticobjects/tables/floor_gametable_human_round01', 0), + (3230, 3230, 'staticobjects/tables/floor_gametable_human_round02', 0), + (3231, 3231, 'staticobjects/tools/floor_grindingwheel_any_wood01', 0), + (3232, 3232, 'staticobjects/tools/floor_scale_any_table01', 0), + (3233, 3233, 'staticobjects/tools/floor_tools_any_torture01', 0), + (3234, 3234, 'staticobjects/tools/floor_tools_any_torture02', 0), + (3235, 3235, 'staticobjects/tools/floor_tool_any_compass01', 0), + (3236, 3236, 'staticobjects/tools/floor_tool_any_rollingpin01', 0), + (3237, 3237, 'staticobjects/tools/wall_spoon_any_wooden01', 0), + (3238, 3238, 'staticobjects/torture_chamber/wall_shackes_any_plain01', 0), + (3239, 3239, 'staticobjects/weapons/floor_cannonball_any_ballistabolt01', 0), + (3240, 3240, 'accessories/wieldable_items/weapons/great_sword/flamberge/flamberge001_plain', 0), + (3241, 3241, 'accessories/wieldable_items/weapons/great_sword/flamberge/flamberge001_rusty', 0), + (3242, 3242, 'accessories/wieldable_items/weapons/great_sword/tulwar/tulwar001_rusty', 0), + (3243, 3243, 'accessories/wieldable_items/weapons/rapier/saber/saber001_plain', 0), + (3244, 3244, 'accessories/wieldable_items/weapons/rapier/saber/saber001_rusty', 0), + (3245, 3245, 'accessories/wieldable_items/weapons/sword/long_sword/long_sword001_rusty', 0), + (3246, 3246, 'accessories/wieldable_items/weapons/sword/long_sword/long_sword002_plain', 0), + (3247, 3247, 'accessories/wieldable_items/weapons/talisman/holy_symbol/holy_symbol001_plain', 0), + (3248, 3248, 'accessories/wieldable_items/weapons/talisman/holy_symbol/holy_symbol001_rusty', 0), + (3249, 3249, 'accessories/wieldable_items/weapons/talisman/tablet/tablet001_rusty', 0), + (3250, 3250, 'accessories/wieldable_items/weapons/throwing_weapons/throwing_hammer/throwing_hammer001_plain', 0), + (3251, 3251, 'accessories/wieldable_items/weapons/throwing_weapons/throwing_hammer/throwing_hammer001_rusty', 0), + (3252, 3252, 'staticobjects/gnomish_devices/globe_device', 0), + (3253, 3253, 'staticobjects/light_sources_player_housing_only/wall_sewer_torch_01', 0), + (3254, 3254, 'accessories/wieldable_items/shields/buckler_shield/metal_buckler/metal_buckler001_runic', 0), + (3255, 3255, 'accessories/wieldable_items/shields/buckler_shield/metal_buckler/metal_buckler001_rusty', 0), + (3256, 3256, 'accessories/wieldable_items/shields/buckler_shield/streatched_leather_buckler/streatched_leather_buckler001_ornate', 0), + (3257, 3257, 'accessories/wieldable_items/shields/buckler_shield/streatched_leather_buckler/streatched_leather_buckler001_rusty', 0), + (3258, 3258, 'accessories/wieldable_items/shields/buckler_shield/wooden_buckler/wooden_buckler001_ornate', 0), + (3259, 3259, 'accessories/wieldable_items/shields/buckler_shield/wooden_buckler/wooden_buckler001_rusty', 0), + (3260, 3260, 'accessories/wieldable_items/shields/kite_shield/kite_shield_freeport001', 0), + (3261, 3261, 'accessories/wieldable_items/shields/kite_shield/metal_kite/metal_kite_shield001_plain', 0), + (3262, 3262, 'accessories/wieldable_items/shields/kite_shield/metal_kite/metal_kite_shield001_runic', 0), + (3263, 3263, 'accessories/wieldable_items/shields/kite_shield/metal_kite/metal_kite_shield001_rusty', 0), + (3264, 3264, 'accessories/wieldable_items/shields/kite_shield/wooden_kite/wooden_kite_shield001_plain', 0), + (3265, 3265, 'accessories/wieldable_items/shields/kite_shield/wooden_kite/wooden_kite_shield001_runic', 0), + (3266, 3266, 'accessories/wieldable_items/shields/kite_shield/wooden_kite/wooden_kite_shield001_rusty', 0), + (3267, 3267, 'accessories/wieldable_items/shields/round_shield/metal_etched_round/round_shield_etched001_ornate', 0), + (3268, 3268, 'accessories/wieldable_items/shields/round_shield/metal_etched_round/round_shield_etched001_runic', 0), + (3269, 3269, 'accessories/wieldable_items/shields/round_shield/metal_etched_round/round_shield_etched001_rusty', 0), + (3270, 3270, 'accessories/wieldable_items/shields/round_shield/wooden_round/wooden_round_shield001_ornate', 0), + (3271, 3271, 'accessories/wieldable_items/shields/round_shield/wooden_round/wooden_round_shield001_rusty', 0), + (3272, 3272, 'accessories/wieldable_items/shields/tower_shield/metal_tower_shield/metal_tower_shield001_plain', 0), + (3273, 3273, 'accessories/wieldable_items/shields/tower_shield/wooden_tower_shield/wooden_tower_shield001_plain', 0), + (3274, 3274, 'accessories/wieldable_items/shields/tower_shield/wooden_tower_shield/wooden_tower_shield001_runic', 0), + (3275, 3275, 'accessories/wieldable_items/shields/tower_shield/wooden_tower_shield/wooden_tower_shield001_rusty', 0), + (3276, 3276, 'accessories/wieldable_items/weapons/great_sword/greatsword/greatsword001_plain', 0), + (3277, 3277, 'accessories/wieldable_items/weapons/great_sword/greatsword/greatsword001_rusty', 0), + (3278, 3278, 'accessories/wieldable_items/weapons/hammer/sceptre/sceptre001_plain', 0), + (3279, 3279, 'accessories/wieldable_items/weapons/hammer/sceptre/sceptre001_runic', 0), + (3280, 3280, 'accessories/wieldable_items/weapons/hammer/sceptre/sceptre002_ornate', 0), + (3281, 3281, 'accessories/wieldable_items/weapons/hammer/sceptre/sceptre003_rusty', 0), + (3282, 3282, 'accessories/wearable_items/tradesman/clothing/ornateshinygold/sleeves', 0), + (3283, 3283, 'accessories/wearable_items/tradesman/clothing/plainbluelacey/sleeves', 0), + (3284, 3284, 'accessories/wearable_items/tradesman/common/low/sleeves', 0), + (3285, 3285, 'accessories/wearable_items/tradesman/common/medium/sleeves', 0), + (3286, 3286, 'accessories/wieldable_items/weapons/dagger/dirk/dirk001_rusty', 0), + (3287, 3287, 'accessories/wieldable_items/weapons/dagger/kris/kris001_plain', 0), + (3288, 3288, 'accessories/wieldable_items/weapons/dagger/kris/kris001_rusty', 0), + (3289, 3289, 'accessories/wieldable_items/weapons/dagger/sai/sai001_rusty', 0), + (3290, 3290, 'accessories/wieldable_items/weapons/fist/cestus/spiked_cestus001_rusty', 0), + (3291, 3291, 'accessories/wieldable_items/weapons/great_hammer/knotted_club/knotted_club001_runic', 0), + (3292, 3292, 'accessories/wieldable_items/weapons/great_hammer/knotted_club/knotted_club002_rusty', 0), + (3293, 3293, 'accessories/wieldable_items/weapons/talisman/idol/idol001_rusty', 0), + (3294, 3294, 'ec/npc/fire_soldier', 0), + (3295, 3295, 'ec/npc/illusionary_soldier', 0), + (3296, 3296, 'accessories/wieldable_items/weapons/dagger/stiletto/stiletto001_plain', 0), + (3297, 3297, 'accessories/wieldable_items/weapons/talisman/orb/orb001_plain', 0), + (3298, 3298, 'accessories/wieldable_items/weapons/talisman/orb/orb001_rusty', 0), + (3299, 3299, 'accessories/wieldable_items/weapons/talisman/wand/wand001_plain', 0), + (3300, 3300, 'accessories/wieldable_items/weapons/talisman/wand/wand001_rusty', 0), + (3301, 3301, 'staticobjects/artisan/floor_bowl_human_jewel01', 0), + (3302, 3302, 'staticobjects/artisan/floor_crucible_human_artisan01', 0), + (3303, 3303, 'staticobjects/artisan/floor_easel_human_painting01', 0), + (3304, 3304, 'staticobjects/artisan/floor_pot_human_iron01', 0), + (3305, 3305, 'staticobjects/artisan/floor_pot_human_iron02', 0), + (3306, 3306, 'staticobjects/barrels/floor_barrel_human_broken01', 0), + (3307, 3307, 'staticobjects/barrels/floor_barrel_human_broken02', 0), + (3308, 3308, 'staticobjects/barrels/floor_barrel_human_broken03', 0), + (3309, 3309, 'staticobjects/barrels/floor_barrel_human_broken04', 0), + (3310, 3310, 'staticobjects/barrels/floor_barrel_human_broken05', 0), + (3311, 3311, 'staticobjects/barrels/floor_barrel_human_broken06', 0), + (3312, 3312, 'staticobjects/benches/floor_bench_human_broken01', 0), + (3313, 3313, 'staticobjects/benches/floor_bench_human_broken02', 0), + (3314, 3314, 'staticobjects/blacksmith/floor_anvil_human_blacksmith01', 0), + (3315, 3315, 'staticobjects/blacksmith/floor_anvil_human_blacksmith02', 0), + (3316, 3316, 'staticobjects/blacksmith/floor_anvil_human_large01', 0), + (3317, 3317, 'staticobjects/blacksmith/floor_forge_human_blacksmith01', 0), + (3318, 3318, 'staticobjects/blacksmith/floor_forge_human_blacksmith02', 0), + (3319, 3319, 'staticobjects/blacksmith/floor_forge_human_blacksmith03', 0), + (3320, 3320, 'staticobjects/blacksmith/floor_grindingwheel_any_wood02', 0), + (3321, 3321, 'staticobjects/blacksmith/floor_tongs_human_iron01', 0), + (3322, 3322, 'staticobjects/books/floor_book_human_artisan01', 0), + (3323, 3323, 'staticobjects/books/floor_book_human_open02', 0), + (3324, 3324, 'staticobjects/chairs/floor_chair_human_broken01', 0), + (3325, 3325, 'staticobjects/chairs/floor_chair_human_broken02', 0), + (3326, 3326, 'staticobjects/chairs/floor_chair_human_broken03', 0), + (3327, 3327, 'staticobjects/chairs/floor_chair_human_broken04', 0), + (3328, 3328, 'staticobjects/chairs/floor_chair_human_broken05', 0), + (3329, 3329, 'staticobjects/chairs/floor_chair_human_broken06', 0), + (3330, 3330, 'staticobjects/coffins_and_sarcophagus/floor_sacophagus_human_nektropos01', 0), + (3331, 3331, 'staticobjects/coffins_and_sarcophagus/floor_sacophagus_human_nektropos02', 0), + (3332, 3332, 'staticobjects/coffins_and_sarcophagus/floor_sacophagus_human_nektropos03', 0), + (3333, 3333, 'staticobjects/coffins_and_sarcophagus/floor_sacophagus_human_nektropos04', 0), + (3334, 3334, 'staticobjects/coffins_and_sarcophagus/floor_sacophagus_human_nektropos05', 0), + (3335, 3335, 'staticobjects/containers/floor_bucket_human_iron01', 0), + (3336, 3336, 'staticobjects/containers/floor_bucket_human_iron02', 0), + (3337, 3337, 'staticobjects/containers/floor_trough_human_stable01', 0), + (3338, 3338, 'staticobjects/containers/floor_trough_human_stable02', 0), + (3339, 3339, 'staticobjects/containers/floor_trough_human_wood04', 0), + (3340, 3340, 'staticobjects/containers/floor_vase_elf_broken01', 0), + (3341, 3341, 'staticobjects/containers/floor_vase_elf_broken02', 0), + (3342, 3342, 'staticobjects/containers/floor_vase_elf_broken03', 0), + (3343, 3343, 'staticobjects/containers/floor_vase_elf_broken04', 0), + (3344, 3344, 'staticobjects/fireplace_items/floor_firering_human_stone01', 0), + (3345, 3345, 'staticobjects/fireplace_items/floor_rack_human_wood01', 0), + (3346, 3346, 'staticobjects/fireplace_items/floor_wood_human_stack01', 0), + (3347, 3347, 'staticobjects/fireplace_items/floor_wood_human_stack02', 0), + (3348, 3348, 'staticobjects/fireplace_items/floor_wood_human_stack03', 0), + (3349, 3349, 'staticobjects/fireplace_items/floor_wood_human_stack04', 0), + (3350, 3350, 'staticobjects/fireplace_items/floor_wood_human_stack05', 0), + (3351, 3351, 'staticobjects/gravestones/floor_gravestone_human_plain01', 0), + (3352, 3352, 'staticobjects/kitchen/floor_bowl_human_iron01', 0), + (3353, 3353, 'staticobjects/kitchen/floor_bowl_human_ornate01', 0), + (3354, 3354, 'staticobjects/kitchen/floor_bowl_human_ornate02', 0), + (3355, 3355, 'staticobjects/kitchen/floor_bowl_human_square01', 0), + (3356, 3356, 'staticobjects/kitchen/floor_bowl_human_square02', 0), + (3357, 3357, 'staticobjects/kitchen/floor_bowl_human_wood01', 0), + (3358, 3358, 'staticobjects/kitchen/floor_breadholder_human_wood01', 0), + (3359, 3359, 'staticobjects/kitchen/floor_bread_human_french01', 0), + (3360, 3360, 'staticobjects/kitchen/floor_bread_human_loaf01', 0), + (3361, 3361, 'staticobjects/kitchen/floor_chalice_human_plain01', 0), + (3362, 3362, 'staticobjects/kitchen/floor_fork_human_wood01', 0), + (3363, 3363, 'staticobjects/kitchen/floor_fork_human_wood02', 0), + (3364, 3364, 'staticobjects/kitchen/floor_kitchenpan_human_bake01', 0), + (3365, 3365, 'staticobjects/kitchen/floor_kitchenpan_human_bread01', 0), + (3366, 3366, 'staticobjects/kitchen/floor_kitchenpan_human_bread02', 0), + (3367, 3367, 'staticobjects/kitchen/floor_kitchenpan_human_muffin01', 0), + (3368, 3368, 'staticobjects/kitchen/floor_knife_human_butcher01', 0), + (3369, 3369, 'staticobjects/kitchen/floor_knife_human_butcher02', 0), + (3370, 3370, 'staticobjects/kitchen/floor_knife_human_butcher03', 0), + (3371, 3371, 'staticobjects/kitchen/floor_knife_human_butcher04', 0), + (3372, 3372, 'staticobjects/kitchen/floor_knife_human_kitchen01', 0), + (3373, 3373, 'staticobjects/kitchen/floor_knife_human_kitchen02', 0), + (3374, 3374, 'staticobjects/kitchen/floor_knife_human_kitchen03', 0), + (3375, 3375, 'staticobjects/kitchen/floor_muffin_human_single01', 0), + (3376, 3376, 'staticobjects/kitchen/floor_muffin_human_stack01', 0), + (3377, 3377, 'staticobjects/kitchen/floor_mug_human_ornate01', 0), + (3378, 3378, 'staticobjects/kitchen/floor_mug_human_ornate02', 0), + (3379, 3379, 'staticobjects/kitchen/floor_mug_human_ornate03', 0), + (3380, 3380, 'staticobjects/kitchen/floor_mug_human_ornate04', 0), + (3381, 3381, 'staticobjects/kitchen/floor_mug_human_ornate05', 0), + (3382, 3382, 'staticobjects/kitchen/floor_mug_human_plain01', 0), + (3383, 3383, 'staticobjects/kitchen/floor_mug_human_plain02', 0), + (3384, 3384, 'staticobjects/kitchen/floor_pan_human_bake01', 0), + (3385, 3385, 'staticobjects/kitchen/floor_pan_human_bread01', 0), + (3386, 3386, 'staticobjects/kitchen/floor_pan_human_bread02', 0), + (3387, 3387, 'staticobjects/kitchen/floor_pan_human_muffin01', 0), + (3388, 3388, 'staticobjects/kitchen/floor_pie_human_single01', 0), + (3389, 3389, 'staticobjects/kitchen/floor_pitcher_human_ornate01', 0), + (3390, 3390, 'staticobjects/kitchen/floor_pitcher_human_ornate02', 0), + (3391, 3391, 'staticobjects/kitchen/floor_pitcher_human_plain01', 0), + (3392, 3392, 'staticobjects/kitchen/floor_pitcher_human_plain02', 0), + (3393, 3393, 'staticobjects/kitchen/floor_plate_human_muffin01', 0), + (3394, 3394, 'staticobjects/kitchen/floor_pot_human_cooking01', 0), + (3395, 3395, 'staticobjects/kitchen/floor_pot_human_cooking02', 0), + (3396, 3396, 'staticobjects/kitchen/floor_pot_human_cooking03', 0), + (3397, 3397, 'staticobjects/kitchen/floor_pot_human_cooking04', 0), + (3398, 3398, 'staticobjects/kitchen/floor_pot_human_cooking05', 0), + (3399, 3399, 'staticobjects/kitchen/floor_rollingpin_human_kitchen01', 0), + (3400, 3400, 'staticobjects/kitchen/floor_rollingpin_human_kitchen02', 0), + (3401, 3401, 'staticobjects/kitchen/floor_spatula_human_wooden01', 0), + (3402, 3402, 'staticobjects/kitchen/floor_spoon_human_kitchen01', 0), + (3403, 3403, 'staticobjects/kitchen/floor_spoon_human_kitchen02', 0), + (3404, 3404, 'staticobjects/kitchen/floor_stove_human_kitchen01', 0), + (3405, 3405, 'staticobjects/kitchen/floor_stove_human_kitchen02', 0), + (3406, 3406, 'staticobjects/lab/floor_beaker_human_lab01', 0), + (3407, 3407, 'staticobjects/lab/floor_beaker_human_lab02', 0), + (3408, 3408, 'staticobjects/lab/floor_crucible_human_lab01', 0), + (3409, 3409, 'staticobjects/lab/floor_crucible_human_lab02', 0), + (3410, 3410, 'staticobjects/lab/floor_distillery_human_crucible01', 0), + (3411, 3411, 'staticobjects/lab/floor_distillery_human_crucible02', 0), + (3412, 3412, 'staticobjects/lab/floor_distillery_human_kitchen01', 0), + (3413, 3413, 'staticobjects/lab/floor_distillery_human_lab01', 0), + (3414, 3414, 'staticobjects/lab/floor_distillery_human_lab02', 0), + (3415, 3415, 'staticobjects/lab/floor_distillery_human_lab03', 0), + (3416, 3416, 'staticobjects/lab/floor_distillery_human_lab04', 0), + (3417, 3417, 'staticobjects/lab/floor_egg_human_crystal01', 0), + (3418, 3418, 'staticobjects/lab/floor_egg_human_crystal02', 0), + (3419, 3419, 'staticobjects/lab/floor_egg_human_crystal03', 0), + (3420, 3420, 'staticobjects/lab/floor_stand_human_egg01', 0), + (3421, 3421, 'staticobjects/lab/floor_stand_human_egg02', 0), + (3422, 3422, 'staticobjects/lab/floor_stand_human_egg03', 0), + (3423, 3423, 'staticobjects/lab/floor_stand_human_egg04', 0), + (3424, 3424, 'staticobjects/lab/floor_table_human_lab01', 0), + (3425, 3425, 'staticobjects/lab/floor_table_human_lab02', 0), + (3426, 3426, 'staticobjects/lab/floor_tool_human_compass01', 0), + (3427, 3427, 'staticobjects/lighting/ceiling_chandelier_human_iron01', 0), + (3428, 3428, 'staticobjects/lighting/ceiling_chandelier_human_militia01', 0), + (3429, 3429, 'staticobjects/lighting/ceiling_chandelier_human_ornate01', 0), + (3430, 3430, 'staticobjects/lighting/ceiling_chandelier_human_ornate02', 0), + (3431, 3431, 'staticobjects/lighting/ceiling_chandelier_human_plain01', 0), + (3432, 3432, 'staticobjects/lighting/ceiling_chandelier_human_plain02', 0), + (3433, 3433, 'staticobjects/lighting/ceiling_chandelier_human_plain03', 0), + (3434, 3434, 'staticobjects/lighting/ceiling_lamp_human_ornate01', 0), + (3435, 3435, 'staticobjects/lighting/ceiling_lamp_human_ornate02', 0), + (3436, 3436, 'staticobjects/lighting/ceiling_lamp_human_plain01', 0), + (3437, 3437, 'staticobjects/lighting/ceiling_lamp_human_plain02', 0), + (3438, 3438, 'staticobjects/lighting/ceiling_lantern_human_hanging01', 0), + (3439, 3439, 'staticobjects/lighting/floor_candelabra_human_ornate01', 0), + (3440, 3440, 'staticobjects/lighting/floor_candelabra_human_plain01', 0), + (3441, 3441, 'staticobjects/lighting/floor_candleholder_human_ornate01', 0), + (3442, 3442, 'staticobjects/lighting/floor_candleholder_human_ornate02', 0), + (3443, 3443, 'staticobjects/lighting/floor_candleholder_human_ornate03', 0), + (3444, 3444, 'staticobjects/lighting/floor_candleholder_human_ornate04', 0), + (3445, 3445, 'staticobjects/lighting/floor_candleholder_human_ornate05', 0), + (3446, 3446, 'staticobjects/lighting/floor_candleholder_human_plain01', 0), + (3447, 3447, 'staticobjects/lighting/floor_candleholder_human_plain02', 0), + (3448, 3448, 'staticobjects/lighting/floor_candleholder_human_plain03', 0), + (3449, 3449, 'staticobjects/lighting/floor_candles_human_group01', 0), + (3450, 3450, 'staticobjects/lighting/floor_candle_human_single01', 0), + (3451, 3451, 'staticobjects/lighting/floor_candle_human_single02', 0), + (3452, 3452, 'staticobjects/lighting/floor_candle_human_single03', 0), + (3453, 3453, 'staticobjects/lighting/floor_floorbrazier_human_mililtia01', 0), + (3454, 3454, 'staticobjects/lighting/floor_floorbrazier_human_plain01', 0), + (3455, 3455, 'staticobjects/lighting/floor_floorbrazier_human_plain02', 0), + (3456, 3456, 'staticobjects/lighting/floor_floorbrazier_human_stone01', 0), + (3457, 3457, 'staticobjects/lighting/floor_floorlamp_human_plain01', 0), + (3458, 3458, 'staticobjects/lighting/floor_lamppost_darkelf_globe01', 0), + (3459, 3459, 'staticobjects/lighting/floor_lamppost_darkelf_globe02', 0), + (3460, 3460, 'staticobjects/lighting/floor_lamppost_darkelf_globe03', 0), + (3461, 3461, 'staticobjects/lighting/floor_lamppost_darkelf_globe04', 0), + (3462, 3462, 'staticobjects/lighting/floor_lamppost_darkelf_wingskull01', 0), + (3463, 3463, 'staticobjects/lighting/floor_lamp_human_stoop01', 0), + (3464, 3464, 'staticobjects/lighting/floor_lantern_human_standing01', 0), + (3465, 3465, 'staticobjects/lighting/floor_pot_human_fire01', 0), + (3466, 3466, 'staticobjects/lighting/floor_tablebrazier_human_broken01', 0), + (3467, 3467, 'staticobjects/lighting/floor_tablebrazier_human_coal01', 0), + (3468, 3468, 'staticobjects/lighting/wall_lamp_human_hanging01', 0), + (3469, 3469, 'staticobjects/lighting/wall_sconce_human_iron01', 0), + (3470, 3470, 'staticobjects/lighting/wall_sconce_human_militia01', 0), + (3471, 3471, 'staticobjects/lighting/wall_sconce_human_ornate01', 0), + (3472, 3472, 'staticobjects/lighting/wall_sconce_human_ornate02', 0), + (3473, 3473, 'staticobjects/lighting/wall_sconce_human_ornate03', 0), + (3474, 3474, 'staticobjects/lighting/wall_sconce_human_plain01', 0), + (3475, 3475, 'staticobjects/lighting/wall_sconce_human_plain02', 0), + (3476, 3476, 'staticobjects/lighting/wall_sconce_human_plain03', 0), + (3477, 3477, 'staticobjects/monuments/floor_fountain_human_dragonhead01', 0), + (3478, 3478, 'staticobjects/monuments/floor_fountain_human_griffin01', 0), + (3479, 3479, 'staticobjects/monuments/floor_fountain_human_griffin02', 0), + (3480, 3480, 'staticobjects/monuments/floor_fountain_human_griffin03', 0), + (3481, 3481, 'staticobjects/monuments/floor_marker_human_eaglehead01', 0), + (3482, 3482, 'staticobjects/monuments/floor_marker_human_generic01', 0), + (3483, 3483, 'staticobjects/monuments/floor_marker_human_generic02', 0), + (3484, 3484, 'staticobjects/monuments/floor_marker_human_generic03', 0), + (3485, 3485, 'staticobjects/monuments/floor_marker_human_head01', 0), + (3486, 3486, 'staticobjects/monuments/floor_marker_human_head02', 0), + (3487, 3487, 'staticobjects/monuments/floor_marker_human_head03', 0), + (3488, 3488, 'staticobjects/monuments/floor_marker_human_pail01', 0), + (3489, 3489, 'staticobjects/monuments/floor_pool_human_recreational01', 0), + (3490, 3490, 'staticobjects/musical/floor_chime_human_bone01', 0), + (3491, 3491, 'staticobjects/musical/floor_drumhammers_human_plain01', 0), + (3492, 3492, 'staticobjects/musical/floor_drumhammers_human_plain02', 0), + (3493, 3493, 'staticobjects/musical/floor_drum_human_plain01', 0), + (3494, 3494, 'staticobjects/musical/floor_mandolin_human_wood01', 0), + (3495, 3495, 'staticobjects/musical/floor_xylophone_human_bone01', 0), + (3496, 3496, 'staticobjects/papers/floor_paper_human_blank01', 0), + (3497, 3497, 'staticobjects/papers/floor_paper_human_stack01', 0), + (3498, 3498, 'staticobjects/papers/floor_paper_human_written01', 0), + (3499, 3499, 'staticobjects/papers/floor_paper_human_written02', 0), + (3500, 3500, 'staticobjects/pen_and_ink/floor_inkwell_human_ornate01', 0), + (3501, 3501, 'staticobjects/pen_and_ink/floor_inkwell_human_ornate02', 0), + (3502, 3502, 'staticobjects/pen_and_ink/floor_inkwell_human_plain01', 0), + (3503, 3503, 'staticobjects/pen_and_ink/floor_inkwell_human_plain02', 0), + (3504, 3504, 'staticobjects/pen_and_ink/floor_pen_human_bone01', 0), + (3505, 3505, 'staticobjects/pictures/wall_painting_human_girl01', 0), + (3506, 3506, 'staticobjects/pictures/wall_painting_human_girl02', 0), + (3507, 3507, 'staticobjects/pictures/wall_painting_human_girl03', 0), + (3508, 3508, 'staticobjects/pictures/wall_painting_human_girl04', 0), + (3509, 3509, 'staticobjects/pictures/wall_painting_human_girl05', 0), + (3510, 3510, 'staticobjects/pictures/wall_painting_human_girl06', 0), + (3511, 3511, 'staticobjects/pictures/wall_painting_human_girl07', 0), + (3512, 3512, 'staticobjects/rugs/floor_carpet_human_ornate01', 0), + (3513, 3513, 'staticobjects/rugs/floor_carpet_human_ornate02', 0), + (3514, 3514, 'staticobjects/rugs/floor_carpet_human_ornate03', 0), + (3515, 3515, 'staticobjects/rugs/floor_rug_human_fancy01', 0), + (3516, 3516, 'staticobjects/rugs/floor_rug_human_fancy02', 0), + (3517, 3517, 'staticobjects/rugs/floor_rug_human_fancy03', 0), + (3518, 3518, 'staticobjects/rugs/floor_rug_human_fancy04', 0), + (3519, 3519, 'staticobjects/rugs/floor_rug_human_fancy05', 0), + (3520, 3520, 'staticobjects/rugs/floor_rug_human_fancy06', 0), + (3521, 3521, 'staticobjects/rugs/floor_rug_human_fancy07', 0), + (3522, 3522, 'staticobjects/rugs/floor_rug_human_fancy08', 0), + (3523, 3523, 'staticobjects/rugs/floor_rug_human_fancy09', 0), + (3524, 3524, 'staticobjects/rugs/floor_rug_human_fancy10', 0), + (3525, 3525, 'staticobjects/rugs/floor_rug_human_fancy11', 0), + (3526, 3526, 'staticobjects/rugs/floor_rug_human_fancy12', 0), + (3527, 3527, 'staticobjects/rugs/floor_rug_human_fancy13', 0), + (3528, 3528, 'staticobjects/rugs/floor_rug_human_ornate01', 0), + (3529, 3529, 'staticobjects/rugs/floor_rug_human_ornate02', 0), + (3530, 3530, 'staticobjects/rugs/floor_rug_human_ornate03', 0), + (3531, 3531, 'staticobjects/sacks/floor_sack_human_flour01', 0), + (3532, 3532, 'staticobjects/sacks/floor_sack_human_flour02', 0), + (3533, 3533, 'staticobjects/sacks/floor_sack_human_flour03', 0), + (3534, 3534, 'staticobjects/sacks/floor_sack_human_flour04', 0), + (3535, 3535, 'staticobjects/sacks/floor_sack_human_grain01', 0), + (3536, 3536, 'staticobjects/sacks/floor_sack_human_grain02', 0), + (3537, 3537, 'staticobjects/sacks/floor_sack_human_grain03', 0), + (3538, 3538, 'staticobjects/sacks/floor_sack_human_grain04', 0), + (3539, 3539, 'staticobjects/sacks/floor_sack_human_large01', 0), + (3540, 3540, 'staticobjects/sacks/floor_sack_human_large02', 0), + (3541, 3541, 'staticobjects/sacks/floor_sack_human_large03', 0), + (3542, 3542, 'staticobjects/sacks/floor_sack_human_large04', 0), + (3543, 3543, 'staticobjects/sacks/floor_sack_human_large05', 0), + (3544, 3544, 'staticobjects/sacks/floor_sack_human_large06', 0), + (3545, 3545, 'staticobjects/sacks/floor_sack_human_small01', 0), + (3546, 3546, 'staticobjects/sacks/floor_sack_human_small02', 0), + (3547, 3547, 'staticobjects/sacks/floor_sack_human_small03', 0), + (3548, 3548, 'staticobjects/scrolls/floor_scrollpaper_human_stack01', 0), + (3549, 3549, 'staticobjects/scrolls/floor_scroll_human_ornate01', 0), + (3550, 3550, 'staticobjects/scrolls/floor_scroll_human_ornate02', 0), + (3551, 3551, 'staticobjects/scrolls/floor_scroll_human_ornate03', 0), + (3552, 3552, 'staticobjects/scrolls/floor_scroll_human_paper01', 0), + (3553, 3553, 'staticobjects/scrolls/floor_scroll_human_stack01', 0), + (3554, 3554, 'staticobjects/shelves/wall_shelf_human_double04', 0), + (3555, 3555, 'staticobjects/shelves/wall_shelf_human_double05', 0), + (3556, 3556, 'staticobjects/shelves/wall_shelf_human_hooks01', 0), + (3557, 3557, 'staticobjects/shelves/wall_shelf_human_ironwood01', 0), + (3558, 3558, 'staticobjects/shelves/wall_shelf_human_ironwood02', 0), + (3559, 3559, 'staticobjects/shelves/wall_shelf_human_militia01', 0), + (3560, 3560, 'staticobjects/shelves/wall_shelf_human_multideck01', 0), + (3561, 3561, 'staticobjects/shelves/wall_shelf_human_multideck02', 0), + (3562, 3562, 'staticobjects/shelves/wall_shelf_human_ornate02', 0), + (3563, 3563, 'staticobjects/shelves/wall_shelf_human_ornate03', 0), + (3564, 3564, 'staticobjects/shelves/wall_shelf_human_pegs01', 0), + (3565, 3565, 'staticobjects/shelves/wall_shelf_human_plain01', 0), + (3566, 3566, 'staticobjects/shelves/wall_shelf_human_plain02', 0), + (3567, 3567, 'staticobjects/shop/floor_cabinet_human_display01', 0), + (3568, 3568, 'staticobjects/shop/floor_cabinet_human_display02', 0), + (3569, 3569, 'staticobjects/stable_items/ceiling_hook_human_hanging01', 0), + (3570, 3570, 'staticobjects/stable_items/floor_cultivator_human_stable01', 0), + (3571, 3571, 'staticobjects/stable_items/floor_cultivator_human_stable02', 0), + (3572, 3572, 'staticobjects/stable_items/floor_haybail_human_stable01', 0), + (3573, 3573, 'staticobjects/stable_items/floor_haybail_human_stack01', 0), + (3574, 3574, 'staticobjects/stable_items/floor_rope_human_stable01', 0), + (3575, 3575, 'staticobjects/stable_items/wall_hook_human_iron01', 0), + (3576, 3576, 'staticobjects/stable_items/wall_horseshoe_human_stable01', 0), + (3577, 3577, 'staticobjects/stable_items/wall_rein_human_stable01', 0), + (3578, 3578, 'staticobjects/stable_items/wall_rein_human_stable02', 0), + (3579, 3579, 'staticobjects/stable_items/wall_rope_human_stable01', 0), + (3580, 3580, 'staticobjects/stable_items/wall_rope_human_stable02', 0), + (3581, 3581, 'staticobjects/statues/death', 0), + (3582, 3582, 'staticobjects/statues/valkyrie', 0), + (3583, 3583, 'staticobjects/tables/floor_brokentable_darkelf_hood01', 0), + (3584, 3584, 'staticobjects/tables/floor_brokentable_elf_hood01', 0), + (3585, 3585, 'staticobjects/tables/floor_desk_gnome_wood01', 0), + (3586, 3586, 'staticobjects/tables/floor_endtable_human_mahogany01', 0), + (3587, 3587, 'staticobjects/tables/floor_endtable_human_wood01', 0), + (3588, 3588, 'staticobjects/tables/floor_table_darkelf_broken01', 0), + (3589, 3589, 'staticobjects/tables/floor_table_darkelf_broken02', 0), + (3590, 3590, 'staticobjects/tables/floor_table_darkelf_broken03', 0), + (3591, 3591, 'staticobjects/tables/floor_table_darkelf_broken04', 0), + (3592, 3592, 'staticobjects/tables/floor_table_elf_broken01', 0), + (3593, 3593, 'staticobjects/tables/floor_table_elf_broken02', 0), + (3594, 3594, 'staticobjects/tables/floor_table_elf_broken03', 0), + (3595, 3595, 'staticobjects/tables/floor_table_elf_broken04', 0), + (3596, 3596, 'staticobjects/tables/floor_table_gnome_ornate01', 0), + (3597, 3597, 'staticobjects/tables/floor_table_human_bedside03', 0), + (3598, 3598, 'staticobjects/tables/floor_table_human_desk03', 0), + (3599, 3599, 'staticobjects/tables/floor_table_human_dining01', 0), + (3600, 3600, 'staticobjects/tables/floor_table_human_fancy01', 0), + (3601, 3601, 'staticobjects/tables/floor_table_human_fancy02', 0), + (3602, 3602, 'staticobjects/tables/floor_table_human_militia01', 0), + (3603, 3603, 'staticobjects/tables/floor_table_human_militia02', 0), + (3604, 3604, 'staticobjects/tables/floor_table_human_ornate05', 0), + (3605, 3605, 'staticobjects/tables/floor_table_human_ornate06', 0), + (3606, 3606, 'staticobjects/tables/floor_table_human_ornate07', 0), + (3607, 3607, 'staticobjects/tables/floor_table_human_plain05', 0), + (3608, 3608, 'staticobjects/tables/floor_table_human_plain06', 0), + (3609, 3609, 'staticobjects/tables/floor_table_human_plank01', 0), + (3610, 3610, 'staticobjects/tables/floor_table_human_plank02', 0), + (3611, 3611, 'staticobjects/tables/floor_table_human_riser01', 0), + (3612, 3612, 'staticobjects/tables/floor_table_human_twisted01', 0), + (3613, 3613, 'staticobjects/tables/floor_table_human_twisted02', 0), + (3614, 3614, 'staticobjects/tables/floor_table_human_wood01', 0), + (3615, 3615, 'staticobjects/tables/floor_table_human_wood02', 0), + (3616, 3616, 'staticobjects/tables/floor_table_human_wood03', 0), + (3617, 3617, 'staticobjects/tables/floor_table_human_wood04', 0), + (3618, 3618, 'staticobjects/tables/floor_table_human_wood05', 0), + (3619, 3619, 'staticobjects/tables/floor_table_human_workbench01', 0), + (3620, 3620, 'staticobjects/tableware/floor_fork_human_dining01', 0), + (3621, 3621, 'staticobjects/tableware/floor_knife_human_dining01', 0), + (3622, 3622, 'staticobjects/tableware/floor_mug_human_wood01', 0), + (3623, 3623, 'staticobjects/tableware/floor_pitcher_human_wood01', 0), + (3624, 3624, 'staticobjects/tableware/floor_spoon_human_dining01', 0), + (3625, 3625, 'staticobjects/tools/floor_hammer_human_blacksmith01', 0), + (3626, 3626, 'staticobjects/tools/floor_hammer_human_crafting01', 0), + (3627, 3627, 'staticobjects/tools/floor_handsaw_human_crafting01', 0), + (3628, 3628, 'staticobjects/tools/floor_iron_human_plain01', 0), + (3629, 3629, 'staticobjects/tools/floor_potterywheel_human_crafting01', 0), + (3630, 3630, 'staticobjects/tools/floor_scale_human_table01', 0), + (3631, 3631, 'accessories/wieldable_items/weapons/talisman/doll/doll001_plain', 0), + (3632, 3632, 'accessories/wieldable_items/weapons/talisman/doll/doll001_rusty', 0), + (3633, 3633, 'accessories/wieldable_items/weapons/talisman/book/book001_plain', 0), + (3634, 3634, 'accessories/wieldable_items/weapons/talisman/stringed_instrument/string_instrument001_plain', 0), + (3635, 3635, 'accessories/wieldable_items/weapons/talisman/stringed_instrument/string_instrument001_rusty', 0), + (3636, 3636, 'ec/npc/mistman', 0), + (3637, 3637, 'accessories/wearable_items/tradesman/clothing/plain_green_vest/chest', 0), + (3638, 3638, 'accessories/wearable_items/tradesman/clothing/plain_green_vest/legs', 0), + (3639, 3639, 'accessories/wearable_items/tradesman/clothing/plain_green_vest/arms', 0), + (3640, 3640, 'accessories/wieldable_items/weapons/dagger/wizards_dagger/wizards_dagger001_runic', 0), + (3641, 3641, 'accessories/wieldable_items/weapons/dagger/wizards_dagger/wizards_dagger002_plain', 0), + (3642, 3642, 'accessories/wieldable_items/weapons/dagger/wizards_dagger/wizards_dagger002_rusty', 0), + (3643, 3643, 'accessories/wieldable_items/weapons/talisman/drum/drum001_plain', 0), + (3644, 3644, 'accessories/wieldable_items/weapons/talisman/drum/drum001_rusty', 0), + (3645, 3645, 'creatures/tu/fire_soldier_tu', 0), + (3646, 3646, 'creatures/tu/illusionary_soldier_tu', 0), + (3647, 3647, 'creatures/tu/mistman_tu', 0), + (3648, 3648, 'staticobjects/halloween/vel_rock_feedstone_skull', 1096), + (3649, 3649, 'accessories/wieldable_items/weapons/throwing_weapons/boomerang/boomerang001_plain', 0), + (3650, 3650, 'accessories/wieldable_items/weapons/throwing_weapons/boomerang/boomerang001_rusty', 0), + (3651, 3651, 'accessories/wieldable_items/weapons/throwing_weapons/spike/spike001_plain', 0), + (3652, 3652, 'accessories/wieldable_items/weapons/throwing_weapons/spike/spike001_rusty', 0), + (3653, 3653, 'creatures/monsters/vox_ice', 0), + (3654, 3654, 'ec/npc/skeleton_greenfire', 0), + (3655, 3655, 'staticobjects/scrolls/wantedposter', 0), + (3656, 3656, 'accessories/wieldable_items/weapons/staff/bo_staff/bo_staff001_rusty', 0), + (3657, 3657, 'accessories/wieldable_items/weapons/staff/fighting_batons/fighting_batons001_plain', 0), + (3658, 3658, 'accessories/wieldable_items/weapons/staff/fighting_batons/fighting_batons001_rusty', 0), + (3659, 3659, 'accessories/wieldable_items/weapons/staff/great_staff/great_staff002_rusty', 0), + (3660, 3660, 'accessories/wieldable_items/weapons/staff/scorcerers_staff/scorcerers_staff001_plain', 0), + (3661, 3661, 'accessories/wieldable_items/weapons/staff/scorcerers_staff/scorcerers_staff002_rusty', 0), + (3662, 3662, 'accessories/wieldable_items/weapons/throwing_weapons/dart/dart001_plain', 0), + (3663, 3663, 'accessories/wieldable_items/weapons/throwing_weapons/dart/dart001_rusty', 0), + (3664, 3664, 'accessories/wearable_items/tradesman/clothing/smith/common_good/chest', 0), + (3665, 3665, 'accessories/wearable_items/tradesman/clothing/smith/common_good/feet', 0), + (3666, 3666, 'accessories/wearable_items/tradesman/clothing/smith/common_good/hands', 0), + (3667, 3667, 'accessories/wearable_items/tradesman/clothing/smith/common_good/legs', 0), + (3668, 3668, 'accessories/wearable_items/tradesman/clothing/smith/common_good/skirt', 0), + (3669, 3669, 'accessories/wieldable_items/weapons/spear/javelin/javeling001_rusty', 0), + (3670, 3670, 'accessories/wieldable_items/weapons/spear/ornate_spear/ornate_spear001_plain', 0), + (3671, 3671, 'accessories/wieldable_items/weapons/spear/ornate_spear/ornate_spear001_rusty', 0), + (3672, 3672, 'accessories/wieldable_items/weapons/spear/short_spear/short_spear001_rusty', 0), + (3673, 3673, 'accessories/wieldable_items/weapons/spear/spear/spear001_rusty', 0), + (3674, 3674, 'accessories/wieldable_items/weapons/spear/tribal_spear/tribal_spear001_rusty', 0), + (3675, 3675, 'accessories/wieldable_items/weapons/staff/quarterstaff/quarterstaff002_rusty', 0), + (3676, 3676, 'accessories/wieldable_items/weapons/sword/kukri_sword/kukri_sword001_plain', 0), + (3677, 3677, 'accessories/wieldable_items/weapons/throwing_weapons/boomerang/boomerang001_ornate', 0), + (3678, 3678, 'accessories/wieldable_items/weapons/throwing_weapons/boomerang/boomerang001_runic', 0), + (3679, 3679, 'accessories/wieldable_items/weapons/throwing_weapons/glass_vial/glass_vial001_plain', 0), + (3680, 3680, 'accessories/wieldable_items/weapons/throwing_weapons/glass_vial/glass_vial001_rusty', 0), + (3681, 3681, 'accessories/wieldable_items/weapons/throwing_weapons/glass_vial/glass_vial002_ornate', 0), + (3682, 3682, 'accessories/wieldable_items/weapons/throwing_weapons/glass_vial/glass_vial002_runic', 0), + (3683, 3683, 'creatures/monsters/armadillo_ghost', 0), + (3684, 3684, 'creatures/monsters/badger_ghost', 0), + (3685, 3685, 'creatures/monsters/barracuda_ghost', 0), + (3686, 3686, 'creatures/monsters/cow_ghost', 0), + (3687, 3687, 'creatures/monsters/dervish_chaosform', 0), + (3688, 3688, 'creatures/monsters/dervish_ghost', 0), + (3689, 3689, 'creatures/monsters/frog_ghost', 0), + (3690, 3690, 'creatures/monsters/gargoyle_ghost', 0), + (3691, 3691, 'creatures/monsters/goo_chaosform', 0), + (3692, 3692, 'creatures/monsters/goo_ghost', 0), + (3693, 3693, 'creatures/monsters/goo_slime_chaosform', 0), + (3694, 3694, 'creatures/monsters/ground_dragon_ghost', 0), + (3695, 3695, 'creatures/monsters/hawk_ghost_red', 0), + (3696, 3696, 'creatures/monsters/hyena_ghost', 0), + (3697, 3697, 'creatures/monsters/iron_guardian_ghost', 0), + (3698, 3698, 'creatures/monsters/mantaray_ghost', 0), + (3699, 3699, 'creatures/monsters/manticore_ghost', 0), + (3700, 3700, 'creatures/monsters/pihrana_ghost', 0), + (3701, 3701, 'creatures/monsters/rat_ghost', 0), + (3702, 3702, 'creatures/monsters/root_horror_ghost', 0), + (3703, 3703, 'creatures/monsters/rustmonster_ghost', 0), + (3704, 3704, 'creatures/monsters/slug_ghost', 0), + (3705, 3705, 'creatures/monsters/snake_ghost', 0), + (3706, 3706, 'creatures/monsters/tiger_white', 0), + (3707, 3707, 'creatures/monsters/treeent_ghost', 0), + (3708, 3708, 'staticobjects/halloween/wc_gravemarker04', 1096), + (3709, 3709, 'creatures/monsters/wasp_ghost', 0), + (3710, 3710, 'creatures/monsters/willowisp_cloudofsouls', 0), + (3711, 3711, 'creatures/monsters/wolf_white', 0), + (3712, 3712, 'creatures/monsters/wolf_winter', 0), + (3713, 3713, 'creatures/mounts/carpet_ghost', 0), + (3714, 3714, 'staticobjects/weapons/dpo_tablet001_ornate', 1096), + (3715, 3715, 'staticobjects/weapons/dpo_tablet001_runic', 1096), + (3716, 3716, 'creatures/pets/element_order', 0), + (3717, 3717, 'creatures/pets/essence_chaos', 0), + (3718, 3718, 'creatures/tu/bixie_figher_ghost', 0), + (3719, 3719, 'creatures/tu/bixie_ghost', 0), + (3720, 3720, 'creatures/tu/bixie_worker_ghost', 0), + (3721, 3721, 'creatures/tu/dragonfly_faerie_ghost', 0), + (3722, 3722, 'creatures/tu/earth_elem_ghost', 0), + (3723, 3723, 'creatures/tu/gnoll_ghost', 0), + (3724, 3724, 'creatures/tu/livingstatue_ghost', 0), + (3725, 3725, 'creatures/tu/lizardman_ghost', 0), + (3726, 3726, 'creatures/tu/lizardman_shaman_ghost', 0), + (3727, 3727, 'creatures/tu/lizardman_warrior_ghost', 0), + (3728, 3728, 'creatures/tu/shadow', 0), + (3729, 3729, 'creatures/tu/succubus_ghost', 0), + (3730, 3730, 'creatures/tu/tentacleterror_crystal_ghost', 0), + (3731, 3731, 'creatures/tu/tentacleterror_ghost', 0), + (3732, 3732, 'creatures/tu/troglodyte_ghost', 0), + (3733, 3733, 'ec/npc/orcshaman_ghost', 0), + (3734, 3734, 'ec/npc/orc_ghost', 0), + (3735, 3735, 'ec/npc/skeleton_diseased', 0), + (3736, 3736, 'ec/npc/zombie_diseased', 0), + (3737, 3737, 'ec/npc/zombie_ghost', 0), + (3738, 3738, 'staticobjects/doors/fprt_academy_doubledoor_01', 0), + (3739, 3739, 'accessories/wieldable_items/weapons/throwing_weapons/dart/dart002_ornate', 0), + (3740, 3740, 'accessories/wieldable_items/weapons/throwing_weapons/dart/dart002_runic', 0), + (3741, 3741, 'accessories/wieldable_items/weapons/throwing_weapons/spike/spike003_ornate', 0), + (3742, 3742, 'accessories/wearable_items/ghost/ghost_leather/chest', 0), + (3743, 3743, 'accessories/wearable_items/ghost/ghost_leather/feet', 0), + (3744, 3744, 'accessories/wearable_items/ghost/ghost_leather/forearms', 0), + (3745, 3745, 'accessories/wearable_items/ghost/ghost_leather/hands', 0), + (3746, 3746, 'accessories/wearable_items/ghost/ghost_leather/head', 0), + (3747, 3747, 'accessories/wearable_items/ghost/ghost_leather/legs', 0), + (3748, 3748, 'accessories/wearable_items/ghost/ghost_leather/shoulders', 0), + (3749, 3749, 'accessories/wearable_items/ghost/ghost_leather/skirt', 0), + (3750, 3750, 'accessories/wearable_items/ghost/ghost_vanguard/chest', 0), + (3751, 3751, 'accessories/wearable_items/ghost/ghost_vanguard/feet', 0), + (3752, 3752, 'accessories/wearable_items/ghost/ghost_vanguard/forearms', 0), + (3753, 3753, 'accessories/wearable_items/ghost/ghost_vanguard/hands', 0), + (3754, 3754, 'accessories/wearable_items/ghost/ghost_vanguard/head', 0), + (3755, 3755, 'accessories/wearable_items/ghost/ghost_vanguard/left', 0), + (3756, 3756, 'accessories/wearable_items/ghost/ghost_vanguard/legs', 0), + (3757, 3757, 'accessories/wearable_items/ghost/ghost_vanguard/right', 0), + (3758, 3758, 'accessories/wearable_items/ghost/ghost_vanguard/shoulders', 0), + (3759, 3759, 'accessories/wearable_items/ghost/ghost_vanguard/skirt', 0), + (3760, 3760, 'accessories/wearable_items/vanguard/common/high/upperchest', 0), + (3761, 3761, 'accessories/wearable_items/vanguard/common/low/upperchest', 0), + (3762, 3762, 'accessories/wearable_items/vanguard/common/medium/upperchest', 0), + (3763, 3763, 'accessories/wearable_items/vanguard/rare/low/upperchest', 0), + (3764, 3764, 'accessories/wearable_items/vanguard/rare/medium/upperchest', 0), + (3765, 3765, 'accessories/wearable_items/vanguard/uncommon/high/upperchest', 0), + (3766, 3766, 'accessories/wearable_items/vanguard/uncommon/low/upperchest', 0), + (3767, 3767, 'accessories/wearable_items/vanguard/uncommon/medium/upperchest', 0), + (3768, 3768, 'accessories/wieldable_items/shields/buckler_shield/streatched_leather_buckler/streatched_leather_buckler001_runic', 0), + (3769, 3769, 'accessories/wieldable_items/shields/buckler_shield/wooden_buckler/wooden_buckler001_runic', 0), + (3770, 3770, 'accessories/wieldable_items/shields/tower_shield/metal_tower_shield/metal_tower_shield001_runic', 0), + (3771, 3771, 'accessories/wieldable_items/weapons/great_spear/great_spear/great_spear001_rusty', 0), + (3772, 3772, 'accessories/wieldable_items/weapons/great_spear/harpoon/harpoon001_plain', 0), + (3773, 3773, 'accessories/wieldable_items/weapons/great_spear/harpoon/harpoon001_rusty', 0), + (3774, 3774, 'accessories/wieldable_items/weapons/great_spear/lance/lance001_ornate', 0), + (3775, 3775, 'accessories/wieldable_items/weapons/great_spear/lance/lance001_plain', 0), + (3776, 3776, 'accessories/wieldable_items/weapons/great_spear/lance/lance001_rusyt', 0), + (3777, 3777, 'accessories/wieldable_items/weapons/great_spear/pike/pike001_rusty', 0), + (3778, 3778, 'accessories/wieldable_items/weapons/great_spear/trident/trident001_rusty', 0), + (3779, 3779, 'accessories/wieldable_items/weapons/great_spear/voulge/voulge001_plain', 0), + (3780, 3780, 'accessories/wieldable_items/weapons/great_spear/voulge/voulge001_rusty', 0), + (3781, 3781, 'accessories/wieldable_items/weapons/spear/javelin/javeling001_runic', 0), + (3782, 3782, 'accessories/wieldable_items/weapons/talisman/orb/orb001_ornate', 0), + (3783, 3783, 'accessories/wieldable_items/weapons/talisman/orb/orb001_runic', 0), + (3784, 3784, 'accessories/wieldable_items/weapons/throwing_weapons/spike/spike004_runic', 0), + (3785, 3785, 'creatures/pets/enevenomed_servant', 0), + (3786, 3786, 'creatures/pets/essence_order', 0), + (3787, 3787, 'ec/pc/froglok/froglok_male_albino', 0), + (3788, 3788, 'ec/pc/froglok/froglok_male_black1', 0), + (3789, 3789, 'ec/pc/froglok/froglok_male_black2', 0), + (3790, 3790, 'ec/pc/froglok/froglok_male_blackglove', 0), + (3791, 3791, 'ec/pc/froglok/froglok_male_rainbow', 0), + (3792, 3792, 'ec/pc/froglok/froglok_male_toad', 0), + (3793, 3793, 'ec/pc/froglok/froglok_male_toadplain', 0), + (3794, 3794, 'staticobjects/weapons/dpo_tablet001_rusty', 1096), + (3795, 3795, 'staticobjects/panels/dpo_panel_fog_red', 1096), + (3796, 3796, 'accessories/wieldable_items/weapons/great_axe/doubleheaded_axe/double_axe001_ornate', 0), + (3797, 3797, 'accessories/wieldable_items/weapons/great_axe/doubleheaded_axe/double_axe002_runic', 0), + (3798, 3798, 'accessories/wieldable_items/weapons/staff/metal_rod/metal_rod001_plain', 0), + (3799, 3799, 'accessories/wieldable_items/weapons/staff/metal_rod/metal_rod001_rusty', 0), + (3800, 3800, 'accessories/wieldable_items/weapons/talisman/idol/idol001_ornate', 0), + (3801, 3801, 'accessories/wieldable_items/weapons/talisman/idol/idol001_runic', 0), + (3802, 3802, 'accessories/wieldable_items/weapons/talisman/tablet/tablet002_ornate', 0), + (3803, 3803, 'creatures/monsters/dikdik_undead', 0), + (3804, 3804, 'creatures/monsters/mammoth', 0), + (3805, 3805, 'creatures/tu/giant_hill', 0), + (3806, 3806, 'staticobjects/chests/gnoll_ark_ornate01', 0), + (3807, 3807, 'accessories/wieldable_items/weapons/spear/javelin/javeling001_ornate', 0), + (3808, 3808, 'accessories/wieldable_items/weapons/spear/ornate_spear/ornate_spear001_runic', 0), + (3809, 3809, 'accessories/wieldable_items/weapons/spear/spear/spear001_runic', 0), + (3810, 3810, 'accessories/wieldable_items/weapons/spear/tribal_spear/tribal_spear001_ornate', 0), + (3811, 3811, 'accessories/wieldable_items/weapons/spear/tribal_spear/tribal_spear001_runic', 0), + (3812, 3812, 'creatures/tu/giant_hill_bald', 0), + (3813, 3813, 'creatures/tu/giant_hill_captain', 0), + (3814, 3814, 'creatures/tu/gnoll_guard1', 0), + (3815, 3815, 'creatures/tu/gnoll_guard2', 0), + (3816, 3816, 'creatures/tu/gnoll_paw', 0), + (3817, 3817, 'accessories/wieldable_items/weapons/great_axe/assault_axe/assault_axe001_runic', 0), + (3818, 3818, 'accessories/wieldable_items/weapons/great_axe/executioner_axe/executioner_axe002_ornate', 0), + (3819, 3819, 'accessories/wieldable_items/weapons/great_spear/great_spear/great_spear001_ornate', 0), + (3820, 3820, 'accessories/wieldable_items/weapons/great_spear/great_spear/great_spear001_runic', 0), + (3821, 3821, 'accessories/wieldable_items/weapons/great_spear/harpoon/harpoon001_ornate', 0), + (3822, 3822, 'accessories/wieldable_items/weapons/great_spear/harpoon/harpoon001_runic', 0), + (3823, 3823, 'accessories/wieldable_items/weapons/great_spear/lance/lance001_runic', 0), + (3824, 3824, 'accessories/wieldable_items/weapons/great_spear/lance/lance001_rusty', 0), + (3825, 3825, 'accessories/wieldable_items/weapons/great_spear/pike/pike001_ornate', 0), + (3826, 3826, 'accessories/wieldable_items/weapons/great_spear/trident/trident002_ornate', 0), + (3827, 3827, 'accessories/wieldable_items/weapons/great_spear/voulge/voulge001_runic', 0), + (3828, 3828, 'accessories/wieldable_items/weapons/great_sword/bastard_sword/bastard_sword002_rusty', 0), + (3829, 3829, 'accessories/wieldable_items/weapons/sword/scimitar/scimitar001_ornate', 0), + (3830, 3830, 'accessories/wieldable_items/weapons/throwing_weapons/throwing_axe/throwing_axe002_runic', 0), + (3831, 3831, 'accessories/wieldable_items/weapons/throwing_weapons/throwing_star/throwing_star001_ornate', 0), + (3832, 3832, 'accessories/wieldable_items/weapons/throwing_weapons/throwing_star/throwing_star001_plain', 0), + (3833, 3833, 'accessories/wieldable_items/weapons/throwing_weapons/throwing_star/throwing_star001_runic', 0), + (3834, 3834, 'accessories/wieldable_items/weapons/throwing_weapons/throwing_star/throwing_star001_rusty', 0), + (3835, 3835, 'creatures/monsters/raven', 0), + (3836, 3836, 'creatures/monsters/white_bear', 0), + (3837, 3837, 'accessories/wieldable_items/weapons/great_axe/bardiche/bardiche01_plain', 0), + (3838, 3838, 'accessories/wieldable_items/weapons/great_axe/halberd/halberd003_ornate', 0), + (3839, 3839, 'accessories/wieldable_items/weapons/great_hammer/great_flail/great_flail001_plain', 0), + (3840, 3840, 'accessories/wieldable_items/weapons/great_hammer/great_flail/great_flail001_runic', 0), + (3841, 3841, 'accessories/wieldable_items/weapons/great_hammer/great_flail/great_flail002_ornate', 0), + (3842, 3842, 'accessories/wieldable_items/weapons/great_hammer/great_flail/great_flail002_rusty', 0), + (3843, 3843, 'accessories/wieldable_items/weapons/great_hammer/knotted_club/knotted_club001_rusty', 0), + (3844, 3844, 'accessories/wieldable_items/weapons/great_sword/claymore_sword/claymore_sword001_runic', 0), + (3845, 3845, 'accessories/wieldable_items/weapons/great_sword/claymore_sword/claymore_sword002_rusty', 0), + (3846, 3846, 'accessories/wieldable_items/weapons/great_sword/tulwar/tulwar001_runic', 0), + (3847, 3847, 'accessories/wieldable_items/weapons/rapier/cutlass/cutlass001_ornate', 0), + (3848, 3848, 'accessories/wieldable_items/weapons/spear/leaf_blade/leaf_blade001_ornate', 0), + (3849, 3849, 'accessories/wieldable_items/weapons/spear/leaf_blade/leaf_blade001_runic', 0), + (3850, 3850, 'accessories/wieldable_items/weapons/spear/short_spear/short_spear001_ornate', 0), + (3851, 3851, 'accessories/wieldable_items/weapons/spear/short_spear/short_spear001_runic', 0), + (3852, 3852, 'accessories/wieldable_items/weapons/sword/falchion_sword/falchion_sword001_ornate', 0), + (3853, 3853, 'accessories/wieldable_items/weapons/sword/falchion_sword/falchion_sword002_runic', 0), + (3854, 3854, 'accessories/wieldable_items/weapons/sword/kukri_sword/kukri_sword001_rusty', 0), + (3855, 3855, 'accessories/wieldable_items/weapons/sword/kukri_sword/kukri_sword002_ornate', 0), + (3856, 3856, 'accessories/wieldable_items/weapons/sword/kukri_sword/kukri_sword002_runic', 0), + (3857, 3857, 'accessories/wieldable_items/weapons/sword/short_sword/short_sword002_ornate', 0), + (3858, 3858, 'accessories/wieldable_items/weapons/sword/spatha_sword/spatha_sword002_runic', 0), + (3859, 3859, 'accessories/wieldable_items/weapons/sword/whip/whip001_ornate', 0), + (3860, 3860, 'accessories/wieldable_items/weapons/sword/whip/whip001_plain', 0), + (3861, 3861, 'accessories/wieldable_items/weapons/sword/whip/whip001_runic', 0), + (3862, 3862, 'accessories/wieldable_items/weapons/sword/whip/whip001_rusty', 0), + (3863, 3863, 'accessories/wieldable_items/weapons/talisman/book/book001_ornate', 0), + (3864, 3864, 'accessories/wieldable_items/weapons/talisman/book/book001_runic', 0), + (3865, 3865, 'accessories/wieldable_items/weapons/talisman/book/book001_rustu', 0), + (3866, 3866, 'accessories/wieldable_items/weapons/talisman/censer/censer001_plain', 0), + (3867, 3867, 'accessories/wieldable_items/weapons/talisman/censer/censer001_runic', 0), + (3868, 3868, 'accessories/wieldable_items/weapons/talisman/censer/censer001_rusty', 0), + (3869, 3869, 'accessories/wieldable_items/weapons/talisman/doll/doll001_ornate', 0), + (3870, 3870, 'accessories/wieldable_items/weapons/talisman/doll/doll001_runic', 0), + (3871, 3871, 'accessories/wieldable_items/weapons/talisman/drum/drum001_ornate', 0), + (3872, 3872, 'accessories/wieldable_items/weapons/talisman/drum/drum001_runic', 0), + (3873, 3873, 'accessories/wieldable_items/weapons/talisman/holy_symbol/holy_sybol001_rusty', 0), + (3874, 3874, 'accessories/wieldable_items/weapons/talisman/holy_symbol/holy_symbol_fear001', 0), + (3875, 3875, 'accessories/wieldable_items/weapons/talisman/holy_symbol/holy_symbol_love001', 0), + (3876, 3876, 'accessories/wieldable_items/weapons/talisman/stringed_instrument/string_instrument001_ornate', 0), + (3877, 3877, 'accessories/wieldable_items/weapons/talisman/stringed_instrument/string_instrument001_runic', 0), + (3878, 3878, 'accessories/wieldable_items/weapons/talisman/tablet/tablet002_runic', 0), + (3879, 3879, 'accessories/wieldable_items/weapons/talisman/wand/wand001_ornate', 0), + (3880, 3880, 'accessories/wieldable_items/weapons/talisman/wand/wand001_runic', 0), + (3881, 3881, 'creatures/monsters/goo_ice', 0), + (3882, 3882, 'creatures/monsters/undead_dog', 0), + (3883, 3883, 'staticobjects/panels/dpo_panel_fog_blue', 1096), + (3884, 3884, 'ec/npc/goblin_ice', 0), + (3885, 3885, 'accessories/wieldable_items/weapons/bow/long_bow/long_bow001_ornate', 0), + (3886, 3886, 'accessories/wieldable_items/weapons/bow/long_bow/long_bow001_plain', 0), + (3887, 3887, 'accessories/wieldable_items/weapons/bow/long_bow/long_bow001_runic', 0), + (3888, 3888, 'accessories/wieldable_items/weapons/bow/long_bow/long_bow001_rusty', 0), + (3889, 3889, 'accessories/wieldable_items/weapons/bow/short_bow/short_bow001_ornate', 0), + (3890, 3890, 'accessories/wieldable_items/weapons/bow/short_bow/short_bow001_plain', 0), + (3891, 3891, 'accessories/wieldable_items/weapons/bow/short_bow/short_bow001_runic', 0), + (3892, 3892, 'accessories/wieldable_items/weapons/bow/short_bow/short_bow001_rusty', 0), + (3893, 3893, 'accessories/wieldable_items/weapons/great_hammer/knotted_club/knotted_club001_ornate', 0), + (3894, 3894, 'accessories/wieldable_items/weapons/great_hammer/morning_star/morning_star001_ornate', 0), + (3895, 3895, 'accessories/wieldable_items/weapons/talisman/holy_symbol/holy_symbol_hate001', 0), + (3896, 3896, 'accessories/wieldable_items/weapons/talisman/holy_symbol/holy_symbol_tranquility001', 0), + (3897, 3897, 'accessories/wieldable_items/weapons/talisman/idol/idol001_plain', 0), + (3898, 3898, 'accessories/wieldable_items/weapons/talisman/tablet/tablet001_plain', 0), + (3899, 3899, 'accessories/wieldable_items/weapons/throwing_weapons/rock/rock001_ornate', 0), + (3900, 3900, 'accessories/wieldable_items/weapons/throwing_weapons/rock/rock001_plain', 0), + (3901, 3901, 'accessories/wieldable_items/weapons/throwing_weapons/rock/rock001_runic', 0), + (3902, 3902, 'accessories/wieldable_items/weapons/throwing_weapons/rock/rock001_rusty', 0), + (3903, 3903, 'accessories/wieldable_items/weapons/throwing_weapons/throwing_knife/throwing_knife001_ornate', 0), + (3904, 3904, 'accessories/wieldable_items/weapons/throwing_weapons/throwing_knife/throwing_knife001_plain', 0), + (3905, 3905, 'accessories/wieldable_items/weapons/throwing_weapons/throwing_knife/throwing_knife001_runic', 0), + (3906, 3906, 'accessories/wieldable_items/weapons/throwing_weapons/throwing_knife/throwing_knife001_rusty', 0), + (3907, 3907, 'ec/npc/lucan_statue', 0), + (3908, 3908, 'staticobjects/harvested/bushes/hrvst_bush_healthygreenanaconda01', 0), + (3909, 3909, 'staticobjects/harvested/bushes/hrvst_bush_healthygreenanaconda_berries01', 0), + (3910, 3910, 'staticobjects/harvested/coral/hrvst_coral_group001', 0), + (3911, 3911, 'staticobjects/harvested/coral/hrvst_coral_group002', 0), + (3912, 3912, 'staticobjects/harvested/coral/hrvst_coral_single001', 0), + (3913, 3913, 'staticobjects/harvested/coral/hrvst_coral_single002', 0), + (3914, 3914, 'staticobjects/harvested/crystals/hrvst_crystals_roundformation001', 0), + (3915, 3915, 'staticobjects/harvested/crystals/hrvst_crystals_roundformation002', 0), + (3916, 3916, 'staticobjects/harvested/crystals/hrvst_crystals_roundformation003', 0), + (3917, 3917, 'staticobjects/harvested/crystals/hrvst_stalagmite01', 0), + (3918, 3918, 'staticobjects/harvested/crystals/hrvst_stalagmite02', 0), + (3919, 3919, 'staticobjects/harvested/crystals/hrvst_stalagmite03', 0), + (3920, 3920, 'staticobjects/harvested/crystals/hrvst_stalagmite04', 0), + (3921, 3921, 'staticobjects/harvested/debris/hrvst_debris01', 0), + (3922, 3922, 'staticobjects/harvested/debris/hrvst_debris02', 0), + (3923, 3923, 'staticobjects/harvested/debris/hrvst_debris03', 0), + (3924, 3924, 'staticobjects/harvested/debris/hrvst_debris04', 0), + (3925, 3925, 'staticobjects/harvested/logs/hrvst_log_ant_blossom01', 0), + (3926, 3926, 'staticobjects/harvested/logs/hrvst_log_ant_pine01', 0), + (3927, 3927, 'staticobjects/harvested/logs/hrvst_log_ant_pine02', 0), + (3928, 3928, 'staticobjects/harvested/logs/hrvst_log_cmmn_oak01', 0), + (3929, 3929, 'staticobjects/harvested/logs/hrvst_log_cmmn_oak02', 0), + (3930, 3930, 'staticobjects/harvested/logs/hrvst_log_cmmn_savannah01', 0), + (3931, 3931, 'staticobjects/harvested/logs/hrvst_log_ench_blossom01', 0), + (3932, 3932, 'staticobjects/harvested/logs/hrvst_log_ench_jaggedpine01', 0), + (3933, 3933, 'staticobjects/harvested/logs/hrvst_log_ench_jaggedpine02', 0), + (3934, 3934, 'staticobjects/harvested/logs/hrvst_log_jaggedpine_scorched01', 0), + (3935, 3935, 'staticobjects/harvested/logs/hrvst_log_jaggedpine_scorched02', 0), + (3936, 3936, 'staticobjects/harvested/logs/hrvst_log_jaggedpine_scorched03', 0), + (3937, 3937, 'staticobjects/harvested/logs/hrvst_log_nbhum_eucalyptus01', 0), + (3938, 3938, 'staticobjects/harvested/logs/hrvst_log_nbhum_eucalyptus02', 0), + (3939, 3939, 'staticobjects/harvested/logs/hrvst_log_nbhum_pine01', 0), + (3940, 3940, 'staticobjects/harvested/logs/hrvst_log_nekf_twistedfungus01', 0), + (3941, 3941, 'staticobjects/harvested/logs/hrvst_log_nekf_twistedfungus02', 0), + (3942, 3942, 'staticobjects/harvested/logs/hrvst_log_nekf_twistedfungus03', 0), + (3943, 3943, 'staticobjects/harvested/logs/hrvst_log_ow_jaggedpine01', 0), + (3944, 3944, 'staticobjects/harvested/logs/hrvst_log_ow_torreypine01', 0), + (3945, 3945, 'staticobjects/harvested/logs/hrvst_log_ow_torreypine02', 0), + (3946, 3946, 'staticobjects/harvested/logs/hrvst_log_step_jaggedpine01', 0), + (3947, 3947, 'staticobjects/harvested/logs/hrvst_log_step_jaggedpine02', 0), + (3948, 3948, 'staticobjects/harvested/logs/hrvst_log_step_oak01', 0), + (3949, 3949, 'staticobjects/harvested/mushrooms/hrvst_mushrooms_cluster01', 0), + (3950, 3950, 'staticobjects/harvested/mushrooms/hrvst_mushrooms_cluster02', 0), + (3951, 3951, 'staticobjects/harvested/mushrooms/hrvst_mushrooms_cluster03', 0), + (3952, 3952, 'staticobjects/harvested/mushrooms/hrvst_mushrooms_fairyring01', 0), + (3953, 3953, 'staticobjects/harvested/mushrooms/hrvst_mushrooms_fairyring02', 0), + (3954, 3954, 'staticobjects/harvested/mushrooms/hrvst_mushrooms_fairyring03', 0), + (3955, 3955, 'staticobjects/harvested/rocks/hrvst_rocks_mineralveins01', 0), + (3956, 3956, 'staticobjects/harvested/rocks/hrvst_rocks_mineralveins02', 0), + (3957, 3957, 'staticobjects/harvested/rocks/hrvst_rocks_mineralveins03', 0), + (3958, 3958, 'staticobjects/harvested/shells/hrvst_shells_abalone01', 0), + (3959, 3959, 'staticobjects/harvested/shells/hrvst_shells_abalone02', 0), + (3960, 3960, 'staticobjects/harvested/shells/hrvst_shells_abaloneunderside02', 0), + (3961, 3961, 'staticobjects/harvested/shells/hrvst_shells_beach01', 0), + (3962, 3962, 'staticobjects/harvested/shells/hrvst_shells_beachunderside01', 0), + (3963, 3963, 'staticobjects/harvested/shells/hrvst_shells_conch01', 0), + (3964, 3964, 'staticobjects/harvested/shells/hrvst_shells_nautilus01', 0), + (3965, 3965, 'staticobjects/harvested/shells/hrvst_shells_oyster01', 0), + (3966, 3966, 'staticobjects/harvested/shells/hrvst_shells_oyster02', 0), + (3967, 3967, 'staticobjects/harvested/shells/hrvst_shells_oysterunderside01', 0), + (3968, 3968, 'staticobjects/harvested/shells/hrvst_shells_sanddollar01', 0), + (3969, 3969, 'staticobjects/harvested/shells/hrvst_shells_sanddollarunderside01', 0), + (3970, 3970, 'staticobjects/harvested/trapping/hrvst_trapping_ant_dirtmound01', 0), + (3971, 3971, 'staticobjects/harvested/trapping/hrvst_trapping_ant_dirtmound02', 0), + (3972, 3972, 'staticobjects/harvested/trapping/hrvst_trapping_cmmn_dirtmound01', 0), + (3973, 3973, 'staticobjects/harvested/trapping/hrvst_trapping_cmmn_dirtmound02', 0), + (3974, 3974, 'staticobjects/panels/dpo_panel_fog_cloud', 1096), + (3975, 3975, 'staticobjects/panels/dpo_bonetower_wall', 1096), + (3976, 3976, 'staticobjects/panels/dpo_antonica_bone', 1096), + (3977, 3977, 'staticobjects/harvested/trapping/hrvst_trapping_dirtmound01', 0), + (3978, 3978, 'staticobjects/harvested/trapping/hrvst_trapping_dirtmound02', 0), + (3979, 3979, 'staticobjects/harvested/trapping/hrvst_trapping_dirtmound03', 0), + (3980, 3980, 'staticobjects/harvested/trapping/hrvst_trapping_ench_dirtmound01', 0), + (3981, 3981, 'staticobjects/harvested/trapping/hrvst_trapping_ench_dirtmound02', 0), + (3982, 3982, 'staticobjects/harvested/trapping/hrvst_trapping_feer_dirtmound01', 0), + (3983, 3983, 'staticobjects/harvested/trapping/hrvst_trapping_feer_dirtmound02', 0), + (3984, 3984, 'staticobjects/harvested/trapping/hrvst_trapping_fprtadv_dirtmound01', 0), + (3985, 3985, 'staticobjects/harvested/trapping/hrvst_trapping_fprtadv_dirtmound02', 0), + (3986, 3986, 'staticobjects/harvested/trapping/hrvst_trapping_ls_dirtmound01', 0), + (3987, 3987, 'staticobjects/harvested/trapping/hrvst_trapping_ls_dirtmound02', 0), + (3988, 3988, 'staticobjects/harvested/trapping/hrvst_trapping_nbhum_dirtmound01', 0), + (3989, 3989, 'staticobjects/harvested/trapping/hrvst_trapping_nbhum_dirtmound02', 0), + (3990, 3990, 'staticobjects/harvested/trapping/hrvst_trapping_nekf_dirtmound01', 0), + (3991, 3991, 'staticobjects/harvested/trapping/hrvst_trapping_nekf_dirtmound02', 0), + (3992, 3992, 'staticobjects/harvested/trapping/hrvst_trapping_ow_dirtmound01', 0), + (3993, 3993, 'staticobjects/harvested/trapping/hrvst_trapping_ow_dirtmound02', 0), + (3994, 3994, 'staticobjects/harvested/trapping/hrvst_trapping_qey_dirtmound01', 0), + (3995, 3995, 'staticobjects/harvested/trapping/hrvst_trapping_qey_dirtmound02', 0), + (3996, 3996, 'staticobjects/harvested/trapping/hrvst_trapping_rockden001', 0), + (3997, 3997, 'staticobjects/harvested/trapping/hrvst_trapping_rockden002', 0), + (3998, 3998, 'staticobjects/harvested/trapping/hrvst_trapping_rockden003', 0), + (3999, 3999, 'staticobjects/harvested/trapping/hrvst_trapping_rockden004', 0), + (4000, 4000, 'staticobjects/harvested/trapping/hrvst_trapping_step_dirtmound01', 0), + (4001, 4001, 'staticobjects/harvested/trapping/hrvst_trapping_step_dirtmound02', 0), + (4002, 4002, 'staticobjects/harvested/trapping/hrvst_trapping_thicket001', 0), + (4003, 4003, 'staticobjects/harvested/trapping/hrvst_trapping_thicket002', 0), + (4004, 4004, 'staticobjects/harvested/trapping/hrvst_trapping_thicket003', 0), + (4005, 4005, 'accessories/wieldable_items/weapons/fist/claws/claws001_ornate', 0), + (4006, 4006, 'accessories/wieldable_items/weapons/fist/claws/claws001_runic', 0), + (4007, 4007, 'accessories/wieldable_items/weapons/fist/claws/claws001_rusty', 0), + (4008, 4008, 'accessories/wieldable_items/weapons/talisman/flute/flute001_plain', 0), + (4009, 4009, 'accessories/wieldable_items/weapons/talisman/flute/flute002_rusty', 0), + (4010, 4010, 'accessories/wieldable_items/weapons/talisman/flute/flute003_ornate', 0), + (4011, 4011, 'accessories/wieldable_items/weapons/talisman/flute/flute004_runic', 0), + (4012, 4012, 'accessories/wieldable_items/weapons/talisman/holy_symbol/holy_symbol_nature001', 0), + (4013, 4013, 'accessories/wieldable_items/weapons/talisman/holy_symbol/holy_symbol_valor001', 0), + (4014, 4014, 'creatures/tu/giant_frost_captain', 0), + (4015, 4015, 'staticobjects/chests/chest_animated_large', 0), + (4016, 4016, 'staticobjects/chests/chest_animated_medium', 0), + (4017, 4017, 'accessories/wieldable_items/misc/stein001_runic', 0), + (4018, 4018, 'accessories/wieldable_items/misc/stein002_plain', 0), + (4019, 4019, 'accessories/wieldable_items/misc/stein002_rusty', 0), + (4020, 4020, 'accessories/wieldable_items/misc/stein003_ornate', 0), + (4021, 4021, 'accessories/wearable_items/_exp08/robe_elemental/earth/skirt', 1096), + (4022, 4022, 'accessories/wearable_items/_exp08/robe_elemental/earth/chest', 1096), + (4023, 4023, 'accessories/wieldable_items/weapons/hammer/flail/flail001_ornate', 0), + (4024, 4024, 'accessories/wieldable_items/weapons/hammer/flail/flail001_rusty', 0), + (4025, 4025, 'accessories/wieldable_items/weapons/hammer/flail/flail002_plain', 0), + (4026, 4026, 'accessories/wieldable_items/weapons/hammer/flail/flail002_runic', 0), + (4027, 4027, 'accessories/wieldable_items/weapons/hammer/scourge/scourge001_runic', 0), + (4028, 4028, 'accessories/wieldable_items/weapons/hammer/scourge/scourge001_rusty', 0), + (4029, 4029, 'accessories/wieldable_items/weapons/hammer/scourge/scourge002_ornate', 0), + (4030, 4030, 'accessories/wieldable_items/weapons/hammer/scourge/scourge002_plain', 0), + (4031, 4031, 'accessories/wieldable_items/weapons/rapier/karabela/karabela001_ornate', 0), + (4032, 4032, 'accessories/wieldable_items/weapons/rapier/saber/saber001_ornate', 0), + (4033, 4033, 'creatures/tu/lesser_efreeti', 0), + (4034, 4034, 'staticobjects/chests/chest_animated_small', 0), + (4035, 4035, 'accessories/wearable_items/magus/robes/dragon_ornate/chest', 0), + (4036, 4036, 'accessories/wearable_items/magus/robes/dragon_ornate/pants', 0), + (4037, 4037, 'accessories/wearable_items/magus/robes/dragon_ornate/skirt', 0), + (4038, 4038, 'accessories/wearable_items/tradesman/clothing/brawler/med_studded/arms', 0), + (4039, 4039, 'accessories/wearable_items/tradesman/clothing/brawler/med_studded/chest', 0), + (4040, 4040, 'accessories/wearable_items/_exp08/robe_elemental/earth/feet', 1096), + (4041, 4041, 'accessories/wearable_items/tradesman/clothing/brawler/med_studded/legs', 0), + (4042, 4042, 'accessories/wieldable_items/misc/treeclub001_plain', 0), + (4043, 4043, 'accessories/wieldable_items/weapons/dagger/dirk/dirk002_ornate', 0), + (4044, 4044, 'accessories/wieldable_items/weapons/dagger/kris/kris001_ornate', 0), + (4045, 4045, 'accessories/wieldable_items/weapons/dagger/parrying_blade/parrying_blade001_ornate', 0), + (4046, 4046, 'accessories/wieldable_items/weapons/dagger/parrying_blade/parrying_blade002_rusty', 0), + (4047, 4047, 'accessories/wieldable_items/weapons/dagger/sai/sai001_ornate', 0), + (4048, 4048, 'accessories/wieldable_items/weapons/dagger/sai/sai001_runic', 0), + (4049, 4049, 'accessories/wieldable_items/weapons/dagger/stiletto/stiletto002_ornate', 0), + (4050, 4050, 'accessories/wieldable_items/weapons/dagger/wizards_dagger/wizards_dagger001_ornate', 0), + (4051, 4051, 'accessories/wieldable_items/weapons/great_hammer/great_mace/great_mace001_ornate', 0), + (4052, 4052, 'accessories/wieldable_items/weapons/great_hammer/great_mace/great_mace001_runic', 0), + (4053, 4053, 'accessories/wieldable_items/weapons/hammer/cudgel/cudgel002_ornate', 0), + (4054, 4054, 'accessories/wieldable_items/weapons/hammer/cudgel/cudgel002_runic', 0), + (4055, 4055, 'accessories/wieldable_items/weapons/staff/bo_staff/bo_staff002_runic', 0), + (4056, 4056, 'accessories/wieldable_items/weapons/staff/fighting_batons/fighting_batons001_ornate', 0), + (4057, 4057, 'accessories/wieldable_items/weapons/staff/great_staff/great_staff001_ornate', 0), + (4058, 4058, 'accessories/wieldable_items/weapons/staff/metal_rod/metal_rod001_ornate', 0), + (4059, 4059, 'accessories/wieldable_items/weapons/staff/quarterstaff/quarterstaff001_plain', 0), + (4060, 4060, 'accessories/wieldable_items/weapons/staff/quarterstaff/quarterstaff002_ornate', 0), + (4061, 4061, 'accessories/wieldable_items/weapons/staff/quarterstaff/quarterstaff002_runic', 0), + (4062, 4062, 'creatures/tu/giant_frost_helmet', 0), + (4063, 4063, 'ec/npc/antonia_statue', 0), + (4064, 4064, 'staticobjects/qeynos/qey_citizenship_plain', 0), + (4065, 4065, 'accessories/wieldable_items/weapons/great_axe/doubleheaded_axe/double_axe001_plain', 0), + (4066, 4066, 'accessories/wieldable_items/weapons/great_axe/doubleheaded_axe/double_axe002_rusty', 0), + (4067, 4067, 'staticobjects/market_object/market_object', 0), + (4068, 4068, 'accessories/wearable_items/_exp08/robe_elemental/earth/hands', 1096), + (4069, 4069, 'projectiles/spell_shriek_wave', 0), + (4070, 4070, 'projectiles/spell_fire_ball', 0), + (4071, 4071, 'projectiles/spell_fire_ball_blue', 0), + (4072, 4072, 'projectiles/spell_fire_ball_green', 0), + (4073, 4073, 'projectiles/spell_fuliginous_ball', 0), + (4074, 4074, 'projectiles/spell_skull', 0), + (4075, 4075, 'staticobjects/harvested/bushes/hrvst_bush_anaconda_brown01', 0), + (4076, 4076, 'staticobjects/harvested/bushes/hrvst_bush_healthygreenoak01', 0), + (4077, 4077, 'staticobjects/harvested/bushes/hrvst_bush_healthygreenoak_berries01', 0), + (4078, 4078, 'staticobjects/harvested/bushes/hrvst_bush_oak_brown01', 0), + (4079, 4079, 'accessories/wearable_items/_exp08/robe_elemental/earth/head', 1096), + (4080, 4080, 'accessories/wearable_items/_exp08/robe_elemental/earth/head_collar', 1096), + (4081, 4081, 'accessories/wearable_items/_exp08/robe_elemental/earth/pants', 1096), + (4082, 4082, 'accessories/wearable_items/_exp08/robe_elemental/earth/right_shoulder_effect', 1096), + (4083, 4083, 'accessories/wearable_items/_exp08/robe_elemental/earth/left_shoulder_effect', 1096), + (4084, 4084, 'accessories/wearable_items/snapons/backpacks/backpack_tinkered_tin', 1096), + (4085, 4085, 'accessories/wearable_items/snapons/backpacks/backpack_tinkered_rusty', 1096), + (4086, 4086, 'accessories/wieldable_items/shields/exp08/exp08_shield_tinkered_gear_tin', 1096), + (4087, 4087, 'accessories/wieldable_items/shields/exp08/exp08_buckler_tinkered_gear_rusty', 1096), + (4088, 4088, 'accessories/wieldable_items/shields/exp08/exp08_buckler_tinkered_gear_tin', 1096), + (4089, 4089, 'accessories/wieldable_items/shields/exp08/exp08_shield_tinkered_gear_rusty', 1096), + (4090, 4090, 'accessories/wieldable_items/weapons/exp08/1h_crush/club_tinkered_wrench_tin', 1096), + (4091, 4091, 'accessories/wieldable_items/weapons/exp08/1h_crush/club_tinkered_wrench_detailed_rusty', 1096), + (4092, 4092, 'accessories/wieldable_items/weapons/exp08/1h_crush/club_tinkered_wrench_detailed_tin', 1096), + (4093, 4093, 'accessories/wieldable_items/weapons/exp08/1h_crush/club_tinkered_wrench_rusty', 1096), + (4094, 4094, 'accessories/wieldable_items/weapons/exp08/1h_pierce/exp08_dagger_tinkered_drill_tin', 1096), + (4095, 4095, 'accessories/wieldable_items/weapons/exp08/1h_pierce/exp08_dagger_tinkered_drill_rusty', 1096), + (4096, 4096, 'creatures/pets/baby_dragon', 0), + (4097, 4097, 'accessories/wieldable_items/weapons/rapier/foil/foil001_runic', 0), + (4098, 4098, 'creatures/tu/centaur_male', 0), + (4099, 4099, 'creatures/tu/gnoll_mage', 0), + (4100, 4100, 'projectiles/spell_icy_comet', 0), + (4101, 4101, 'projectiles/spell_poison_spore', 0), + (4102, 4102, 'staticobjects/eye/cazic_eye_red_glow', 0), + (4103, 4103, 'staticobjects/ladders/ladder01', 0), + (4104, 4104, 'staticobjects/ladders/ladder_long01', 0), + (4105, 4105, 'staticobjects/ladders/ladder_short01', 0), + (4106, 4106, 'creatures/tu/centaur_female', 0), + (4107, 4107, 'projectiles/spell_mindblast', 0), + (4108, 4108, 'staticobjects/harvested/crystals/hrvst_crystals_roundformation001_dirty', 0), + (4109, 4109, 'staticobjects/harvested/crystals/hrvst_crystals_roundformation003_purple', 0), + (4110, 4110, 'creatures/tu/giant_fire', 0), + (4111, 4111, 'ec/npc/antonia', 0), + (4112, 4112, 'ec/npc/lucan', 0), + (4113, 4113, 'accessories/wearable_items/npcskirts/antonia_skirt', 0), + (4114, 4114, 'accessories/wearable_items/npcskirts/lucan_skirt', 0), + (4115, 4115, 'accessories/wieldable_items/weapons/exp08/1h_sword/exp08_sword_tinkered_tin', 1096), + (4116, 4116, 'creatures/tu/giant_fire_lord', 0), + (4117, 4117, 'creatures/tu/lesser_water_elemental', 0), + (4118, 4118, 'accessories/wieldable_items/weapons/exp08/1h_sword/exp08_axe_tinkered_buzzgear_copper', 1096), + (4119, 4119, 'accessories/wieldable_items/weapons/exp08/1h_sword/exp08_axe_tinkered_buzzgear_tin', 1096), + (4120, 4120, 'accessories/wieldable_items/weapons/exp08/1h_sword/exp08_sword_tinkered_rusty', 1096), + (4121, 4121, 'accessories/wieldable_items/weapons/exp08/staff/exp08_staff_mage_tinkered_lantern_tin', 1096), + (4122, 4122, 'accessories/wieldable_items/weapons/exp08/staff/exp08_staff_mage_tinkered_lantern_rusty', 1096), + (4123, 4123, 'accessories/wearable_items/cloak/exp08/cloak_artisan_water_blue', 1096), + (4124, 4124, 'accessories/wearable_items/cloak/exp08/cloak_artisan_water_red', 1096), + (4125, 4125, 'accessories/wieldable_items/weapons/exp08/staff/exp08_staff_mage_tallonite_blue-iron_fx', 1096), + (4126, 4126, 'ec/npc/goblin_cave', 0), + (4127, 4127, 'staticobjects/doors/qey_l04_int01_r01_door01', 0), + (4128, 4128, 'staticobjects/oop_buff_widgets/brew_barrel', 0), + (4129, 4129, 'staticobjects/oop_buff_widgets/chest_full_of_skulls', 0), + (4130, 4130, 'staticobjects/oop_buff_widgets/evil_face_cauldron', 0), + (4131, 4131, 'staticobjects/oop_buff_widgets/evil_offering_pedistal', 0), + (4132, 4132, 'staticobjects/oop_buff_widgets/evil_skull_post', 0), + (4133, 4133, 'staticobjects/oop_buff_widgets/evil_skull_with_dagger', 0), + (4134, 4134, 'staticobjects/oop_buff_widgets/evil_statue', 0), + (4135, 4135, 'staticobjects/oop_buff_widgets/gnoll_bone_ark', 0), + (4136, 4136, 'staticobjects/oop_buff_widgets/gnoll_wood_ark', 0), + (4137, 4137, 'staticobjects/oop_buff_widgets/goblin_totem', 0), + (4138, 4138, 'staticobjects/oop_buff_widgets/human_skull_pile', 0), + (4139, 4139, 'staticobjects/oop_buff_widgets/magical_sphere_podium', 0), + (4140, 4140, 'staticobjects/oop_buff_widgets/orc_skull_torch', 0), + (4141, 4141, 'staticobjects/oop_buff_widgets/pottery_bowl_purple', 0), + (4142, 4142, 'staticobjects/oop_buff_widgets/urn_large', 0), + (4143, 4143, 'staticobjects/oop_buff_widgets/urn_three_tier_elf', 0), + (4144, 4144, 'staticobjects/oop_buff_widgets/witches_cauldron', 0), + (4145, 4145, 'projectiles/arrow_ornate', 0), + (4146, 4146, 'projectiles/arrow_ornate_fire', 0), + (4147, 4147, 'projectiles/arrow_plain', 0), + (4148, 4148, 'projectiles/arrow_plain_fire', 0), + (4149, 4149, 'projectiles/arrow_runic', 0), + (4150, 4150, 'projectiles/arrow_runic_fire', 0), + (4151, 4151, 'projectiles/arrow_rusty', 0), + (4152, 4152, 'projectiles/arrow_rusty_fire', 0), + (4153, 4153, 'projectiles/arrow_simple_plain_fire', 0), + (4154, 4154, 'projectiles/spell_fire_ball_purple', 0), + (4155, 4155, 'staticobjects/harvested/fish/hrvst_fish_deep', 0), + (4156, 4156, 'staticobjects/harvested/fish/hrvst_fish_deep_koi', 0), + (4157, 4157, 'staticobjects/harvested/fish/hrvst_fish_medium', 0), + (4158, 4158, 'staticobjects/harvested/fish/hrvst_fish_medium_koi', 0), + (4159, 4159, 'staticobjects/harvested/fish/hrvst_fish_shallow', 0), + (4160, 4160, 'staticobjects/harvested/fish/hrvst_fish_shallow_koi', 0), + (4161, 4161, 'staticobjects/doorways/fprt_tradeskill_entrance01', 0), + (4162, 4162, 'staticobjects/draconic_widgets/armorcollection003', 0), + (4163, 4163, 'staticobjects/draconic_widgets/booknarrow001', 0), + (4164, 4164, 'staticobjects/draconic_widgets/booknarrow003', 0), + (4165, 4165, 'staticobjects/draconic_widgets/cazic_bookblackleather001', 0), + (4166, 4166, 'staticobjects/draconic_widgets/cazic_bookbrownleather001', 0), + (4167, 4167, 'staticobjects/draconic_widgets/cazic_bookcrackedleather001', 0), + (4168, 4168, 'staticobjects/draconic_widgets/cazic_bookredleather001', 0), + (4169, 4169, 'staticobjects/draconic_widgets/cazic_bookwface001', 0), + (4170, 4170, 'staticobjects/draconic_widgets/cazic_lizardmansckullwhole001', 0), + (4171, 4171, 'staticobjects/draconic_widgets/cazic_scroll_leather001', 0), + (4172, 4172, 'staticobjects/draconic_widgets/cazic_scroll_magic001', 0), + (4173, 4173, 'staticobjects/draconic_widgets/cazic_scroll_parchmentbone001', 0), + (4174, 4174, 'staticobjects/draconic_widgets/cazic_scroll_skinbone001', 0), + (4175, 4175, 'staticobjects/draconic_widgets/edk_book001', 0), + (4176, 4176, 'staticobjects/draconic_widgets/edk_book003', 0), + (4177, 4177, 'staticobjects/draconic_widgets/fprt_books_singlethickornate01', 0), + (4178, 4178, 'staticobjects/draconic_widgets/fprt_books_singlethickornate02', 0), + (4179, 4179, 'staticobjects/draconic_widgets/fprt_books_singlethinornate01', 0), + (4180, 4180, 'staticobjects/draconic_widgets/oblost_scroll_lrg_cld', 0), + (4181, 4181, 'staticobjects/draconic_widgets/oblost_scroll_lrg_plain', 0), + (4182, 4182, 'staticobjects/draconic_widgets/oblost_scroll_pile02', 0), + (4183, 4183, 'staticobjects/draconic_widgets/oblost_scroll_pil_l0', 0), + (4184, 4184, 'staticobjects/draconic_widgets/orc_chest_closed001', 0), + (4185, 4185, 'staticobjects/draconic_widgets/qey_3tower_scroll001', 0), + (4186, 4186, 'staticobjects/draconic_widgets/qey_backpack001', 0), + (4187, 4187, 'staticobjects/draconic_widgets/scroll002', 0), + (4188, 4188, 'staticobjects/draconic_widgets/scroll003', 0), + (4189, 4189, 'staticobjects/draconic_widgets/vrsn_book02', 0), + (4190, 4190, 'staticobjects/draconic_widgets/vrsn_book03', 0), + (4191, 4191, 'staticobjects/draconic_widgets/vrsn_scrool01', 0), + (4192, 4192, 'staticobjects/draconic_widgets/vrsn_scrool02', 0), + (4193, 4193, 'staticobjects/pictures/fprt_ph_painting_eq1_horizontal01_guardsmonument_l0', 0), + (4194, 4194, 'staticobjects/pictures/fprt_ph_painting_eq1_horizontal02_dragon_l0', 0), + (4195, 4195, 'staticobjects/pictures/fprt_ph_painting_eq1_horizontal03_hallwayguards_l0', 0), + (4196, 4196, 'staticobjects/pictures/fprt_ph_painting_eq1_horizontal04_evilhouse_l0', 0), + (4197, 4197, 'staticobjects/pictures/fprt_ph_painting_eq1_horizontal05_redbuilding_l0', 0), + (4198, 4198, 'staticobjects/pictures/fprt_ph_painting_eq1_horizontal06_reddragon_l0', 0), + (4199, 4199, 'staticobjects/pictures/fprt_ph_painting_eq1_horizontal07_blackburrow_l0', 0), + (4200, 4200, 'staticobjects/pictures/fprt_ph_painting_eq1_horizontal08_treehouse_l0', 0), + (4201, 4201, 'staticobjects/pictures/fprt_ph_painting_eq1_horizontal09_bluecastle_l0', 0), + (4202, 4202, 'staticobjects/pictures/fprt_ph_painting_eq1_horizontal10_redcourtyard_l0', 0), + (4203, 4203, 'staticobjects/pictures/fprt_ph_painting_eq1_horizontal11_redfountain_l0', 0), + (4204, 4204, 'staticobjects/pictures/fprt_ph_painting_eq1_horizontal12_temple_l0', 0), + (4205, 4205, 'staticobjects/pictures/fprt_ph_painting_eq1_square25_castleonmountain_l0', 0), + (4206, 4206, 'staticobjects/pictures/fprt_ph_painting_eq1_square26_purpleskull_l0', 0), + (4207, 4207, 'staticobjects/pictures/fprt_ph_painting_eq1_square27_rainonguards_l0', 0), + (4208, 4208, 'staticobjects/pictures/fprt_ph_painting_eq1_square28_halassign_l0', 0), + (4209, 4209, 'staticobjects/pictures/fprt_ph_painting_eq1_square29_bluedragon_l0', 0), + (4210, 4210, 'staticobjects/pictures/fprt_ph_painting_eq1_square30_bloodyfrogs_l0', 0), + (4211, 4211, 'staticobjects/pictures/fprt_ph_painting_eq1_square31_torchincave_l0', 0), + (4212, 4212, 'staticobjects/pictures/fprt_ph_painting_eq1_square32_elephanthuts_l0', 0), + (4213, 4213, 'staticobjects/pictures/fprt_ph_painting_eq1_square33_buildingwithvines_l0', 0), + (4214, 4214, 'staticobjects/pictures/fprt_ph_painting_eq1_square34_qeynosentrance_l0', 0), + (4215, 4215, 'staticobjects/pictures/fprt_ph_painting_eq1_square35_catwalk_l0', 0), + (4216, 4216, 'staticobjects/pictures/fprt_ph_painting_eq1_square36_skullentrance_l0', 0), + (4217, 4217, 'staticobjects/pictures/fprt_ph_painting_eq1_vertical13_candleswithsymbol_l0', 0), + (4218, 4218, 'staticobjects/pictures/fprt_ph_painting_eq1_vertical14_sumoguard_l0', 0), + (4219, 4219, 'staticobjects/pictures/fprt_ph_painting_eq1_vertical15_lizardwithape_l0', 0), + (4220, 4220, 'staticobjects/pictures/fprt_ph_painting_eq1_vertical16_manatdock_l0', 0), + (4221, 4221, 'staticobjects/pictures/fprt_ph_painting_eq1_vertical17_eyetemple_l0', 0), + (4222, 4222, 'staticobjects/pictures/fprt_ph_painting_eq1_vertical18_floatingbuilding_l0', 0), + (4223, 4223, 'staticobjects/pictures/fprt_ph_painting_eq1_vertical19_floatingbuildingchains_l0', 0), + (4224, 4224, 'staticobjects/pictures/fprt_ph_painting_eq1_vertical20_evildragonentrance_l0', 0), + (4225, 4225, 'staticobjects/pictures/fprt_ph_painting_eq1_vertical21_hangingcorpse_l0', 0), + (4226, 4226, 'staticobjects/pictures/fprt_ph_painting_eq1_vertical22_citadel_l0', 0), + (4227, 4227, 'accessories/wieldable_items/weapons/exp08/1h_crush/club_crystalline_purple', 1096), + (4228, 4228, 'staticobjects/pictures/fprt_ph_painting_eq1_vertical24_statuewithclaymore_l0', 0), + (4229, 4229, 'staticobjects/pictures/fprt_ph_painting_eq2_horizontal01_falls_l0', 0), + (4230, 4230, 'staticobjects/pictures/fprt_ph_painting_eq2_horizontal02_treessunset_l0', 0), + (4231, 4231, 'staticobjects/pictures/fprt_ph_painting_eq2_horizontal03_trolllizard_l0', 0), + (4232, 4232, 'staticobjects/pictures/fprt_ph_painting_eq2_horizontal04_lakefish_l0', 0), + (4233, 4233, 'staticobjects/pictures/fprt_ph_painting_eq2_horizontal05_towerssunset_l0', 0), + (4234, 4234, 'staticobjects/pictures/fprt_ph_painting_eq2_horizontal06_sunsetlaketrees_l0', 0), + (4235, 4235, 'staticobjects/pictures/fprt_ph_painting_eq2_horizontal07_sunsettrees_l0', 0), + (4236, 4236, 'staticobjects/pictures/fprt_ph_painting_eq2_horizontal08_freeportskyline_l0', 0), + (4237, 4237, 'staticobjects/pictures/fprt_ph_painting_eq2_horizontal09_fightingfountain_l0', 0), + (4238, 4238, 'staticobjects/pictures/fprt_ph_painting_eq2_horizontal10_foreststream_l0', 0), + (4239, 4239, 'staticobjects/pictures/fprt_ph_painting_eq2_horizontal11_nightsky_l0', 0), + (4240, 4240, 'staticobjects/pictures/fprt_ph_painting_eq2_horizontal12_troops_l0', 0), + (4241, 4241, 'staticobjects/pictures/fprt_ph_painting_eq2_square25_wasps_l0', 0), + (4242, 4242, 'staticobjects/pictures/fprt_ph_painting_eq2_square26_moat_l0', 0), + (4243, 4243, 'staticobjects/pictures/fprt_ph_painting_eq2_square27_ratogre_l0', 0), + (4244, 4244, 'staticobjects/pictures/fprt_ph_painting_eq2_square28_zombie_l0', 0), + (4245, 4245, 'staticobjects/pictures/fprt_ph_painting_eq2_square29_wolfrivervale_l0', 0), + (4246, 4246, 'staticobjects/pictures/fprt_ph_painting_eq2_square30_waterhouse_l0', 0), + (4247, 4247, 'staticobjects/pictures/fprt_ph_painting_eq2_square31_guardhouse_l0', 0), + (4248, 4248, 'staticobjects/pictures/fprt_ph_painting_eq2_square32_lizard_l0', 0), + (4249, 4249, 'staticobjects/pictures/fprt_ph_painting_eq2_square33_treeisland_l0', 0), + (4250, 4250, 'staticobjects/pictures/fprt_ph_painting_eq2_square34_kneelingattorch_l0', 0), + (4251, 4251, 'staticobjects/pictures/fprt_ph_painting_eq2_square35_spire_l0', 0), + (4252, 4252, 'staticobjects/pictures/fprt_ph_painting_eq2_square36_qeynoscottage_l0', 0), + (4253, 4253, 'staticobjects/pictures/fprt_ph_painting_eq2_vertical13_forest_l0', 0), + (4254, 4254, 'staticobjects/pictures/fprt_ph_painting_eq2_vertical14_kerraaquaduct_l0', 0), + (4255, 4255, 'staticobjects/pictures/fprt_ph_painting_eq2_vertical15_forestwoodelf_l0', 0), + (4256, 4256, 'staticobjects/pictures/fprt_ph_painting_eq2_vertical16_ogrewithfairy_l0', 0), + (4257, 4257, 'staticobjects/pictures/fprt_ph_painting_eq2_vertical17_statuewithcandles_l0', 0), + (4258, 4258, 'staticobjects/pictures/fprt_ph_painting_eq2_vertical18_kerranpurplerobe_l0', 0), + (4259, 4259, 'staticobjects/pictures/fprt_ph_painting_eq2_vertical19_ratonga_l0', 0), + (4260, 4260, 'staticobjects/pictures/fprt_ph_painting_eq2_vertical20_skeleton_l0', 0), + (4261, 4261, 'staticobjects/pictures/fprt_ph_painting_eq2_vertical21_troll_l0', 0), + (4262, 4262, 'staticobjects/pictures/fprt_ph_painting_eq2_vertical22_iskar_l0', 0), + (4263, 4263, 'staticobjects/pictures/fprt_ph_painting_eq2_vertical23_highelf_l0', 0), + (4264, 4264, 'staticobjects/pictures/fprt_ph_painting_eq2_vertical24_iskarbystream_l0', 0), + (4265, 4265, 'accessories/wieldable_items/weapons/exp08/1h_crush/club_crystalline_blue', 1096), + (4266, 4266, 'accessories/wieldable_items/weapons/exp08/1h_crush/club_crystalline_green', 1096), + (4267, 4267, 'accessories/wieldable_items/weapons/exp08/1h_sword/exp08_sword_crystalline_purple', 1096), + (4268, 4268, 'accessories/wieldable_items/weapons/exp08/1h_sword/exp08_sword_crystalline_blue', 1096), + (4269, 4269, 'accessories/wieldable_items/weapons/exp08/1h_sword/exp08_sword_crystalline_green', 1096), + (4270, 4270, 'accessories/wieldable_items/weapons/exp08/2h_sword/exp08_2h_sword_crystalline_purple', 1096), + (4271, 4271, 'accessories/wieldable_items/weapons/exp08/2h_sword/exp08_2h_sword_crystalline_blue', 1096), + (4272, 4272, 'accessories/wieldable_items/weapons/exp08/2h_sword/exp08_2h_sword_crystalline_green', 1096), + (4273, 4273, 'accessories/wieldable_items/weapons/exp08/staff/exp08_staff_crystalline_purple', 1096), + (4274, 4274, 'accessories/wieldable_items/weapons/exp08/staff/exp08_staff_crystalline_blue', 1096), + (4275, 4275, 'accessories/wieldable_items/weapons/exp08/staff/exp08_staff_crystalline_green', 1096), + (4276, 4276, 'staticobjects/pictures/fprt_ph_painting_prestige_horizontal01_cecilwhale_l0', 0), + (4277, 4277, 'staticobjects/pictures/fprt_ph_painting_prestige_horizontal02_scuffle_l0', 0), + (4278, 4278, 'staticobjects/pictures/fprt_ph_painting_prestige_horizontal03_triptich_l0', 0), + (4279, 4279, 'staticobjects/pictures/fprt_ph_painting_prestige_horizontal04_diagram_l0', 0), + (4280, 4280, 'staticobjects/pictures/fprt_ph_painting_prestige_horizontal05_skullbatteringram_l0', 0), + (4281, 4281, 'staticobjects/pictures/fprt_ph_painting_prestige_horizontal06_halloftruth_l0', 0), + (4282, 4282, 'staticobjects/pictures/fprt_ph_painting_prestige_square07_centmale_l0', 0), + (4283, 4283, 'staticobjects/pictures/fprt_ph_painting_prestige_square08_bixiequeen_l0', 0), + (4284, 4284, 'staticobjects/pictures/fprt_ph_painting_prestige_square09_avatarstorms_l0', 0), + (4285, 4285, 'staticobjects/pictures/fprt_ph_painting_prestige_square10_rjtree_l0', 0), + (4286, 4286, 'staticobjects/pictures/fprt_ph_painting_prestige_square11_fireydragon_l0', 0), + (4287, 4287, 'staticobjects/pictures/fprt_ph_painting_prestige_square12_succubus_l0', 0), + (4288, 4288, 'staticobjects/pictures/fprt_ph_painting_prestige_vertical13_treefort_l0', 0), + (4289, 4289, 'staticobjects/pictures/fprt_ph_painting_prestige_vertical14_angryfalls_l0', 0), + (4290, 4290, 'accessories/wieldable_items/weapons/exp07/1h_sword/exp07_1h_sword_emerald_dawn_corrupt', 1096), + (4291, 4291, 'staticobjects/pictures/fprt_ph_painting_prestige_vertical15_warrior_l0', 0), + (4292, 4292, 'staticobjects/pictures/fprt_ph_painting_prestige_vertical16_qeynosmap_l0', 0), + (4293, 4293, 'staticobjects/pictures/fprt_ph_painting_prestige_vertical17_freeportmap_l0', 0), + (4294, 4294, 'staticobjects/pictures/fprt_ph_painting_prestige_vertical18_fiestyhalfling_l0', 0), + (4295, 4295, 'accessories/wieldable_items/weapons/exp08/1h_crush/club_crystalline_purple_fx', 1096), + (4296, 4296, 'accessories/wieldable_items/weapons/exp08/1h_crush/club_crystalline_blue_fx', 1096), + (4297, 4297, 'accessories/wieldable_items/weapons/exp08/1h_crush/club_crystalline_green_fx', 1096), + (4298, 4298, 'accessories/wieldable_items/weapons/exp08/1h_sword/exp08_sword_crystalline_purple_fx', 1096), + (4299, 4299, 'accessories/wieldable_items/weapons/exp08/1h_sword/exp08_sword_crystalline_blue_fx', 1096), + (4300, 4300, 'accessories/wieldable_items/weapons/exp08/1h_sword/exp08_sword_crystalline_green_fx', 1096), + (4301, 4301, 'accessories/wieldable_items/weapons/exp08/2h_sword/exp08_2h_sword_crystalline_purple_fx', 1096), + (4302, 4302, 'accessories/wieldable_items/weapons/exp08/2h_sword/exp08_2h_sword_crystalline_blue_fx', 1096), + (4303, 4303, 'accessories/wieldable_items/weapons/exp08/2h_sword/exp08_2h_sword_crystalline_green_fx', 1096), + (4304, 4304, 'accessories/wieldable_items/weapons/exp08/staff/exp08_staff_crystalline_purple_fx', 1096), + (4305, 4305, 'accessories/wieldable_items/weapons/exp08/staff/exp08_staff_crystalline_blue_fx', 1096), + (4306, 4306, 'accessories/wieldable_items/weapons/exp08/staff/exp08_staff_crystalline_green_fx', 1096), + (4307, 4307, 'accessories/wearable_items/cloak/exp08/cloak_artisan_fire', 1096), + (4308, 4308, 'creatures/mounts/pegasus_mount/pegasus_mount_black', 1096), + (4309, 4309, '_exp04/tool_users/drachnid_queen_drunder', 1096), + (4310, 4310, '_exp04/tool_users/drachnid_female_brown_chain', 1096), + (4311, 4311, 'creatures/monsters/roper_crystal_green', 1096), + (4312, 4312, 'creatures/monsters/roper_crystal_blue', 1096), + (4313, 4313, 'creatures/monsters/roper_crystal_blue_epic', 1096), + (4314, 4314, '_exp08/characters/tool_users/aviak_armored/aviak_eagle_warrior_armored_light_04', 1096), + (4315, 4315, '_exp08/characters/tool_users/aviak_armored/aviak_eagle_king_armored_dark', 1096), + (4316, 4316, '_exp08/characters/tool_users/aviak_armored/aviak_eagle_king_armored_light', 1096), + (4317, 4317, '_exp08/characters/tool_users/aviak_armored/aviak_eagle_warrior_armored_dark_01', 1096), + (4318, 4318, '_exp08/characters/tool_users/aviak_armored/aviak_eagle_warrior_armored_dark_02', 1096), + (4319, 4319, 'staticobjects/pictures/qey_ph_painting_eq1_horizontal01_guardsmonument_l0', 0), + (4320, 4320, 'staticobjects/pictures/qey_ph_painting_eq1_horizontal02_dragon_l0', 0), + (4321, 4321, 'staticobjects/pictures/qey_ph_painting_eq1_horizontal03_hallwayguards_l0', 0), + (4322, 4322, 'staticobjects/pictures/qey_ph_painting_eq1_horizontal04_evilhouse_l0', 0), + (4323, 4323, 'staticobjects/pictures/qey_ph_painting_eq1_horizontal05_redbuilding_l0', 0), + (4324, 4324, 'staticobjects/pictures/qey_ph_painting_eq1_horizontal06_reddragon_l0', 0), + (4325, 4325, 'staticobjects/pictures/qey_ph_painting_eq1_horizontal07_blackburrow_l0', 0), + (4326, 4326, 'staticobjects/pictures/qey_ph_painting_eq1_horizontal08_treehouse_l0', 0), + (4327, 4327, 'staticobjects/pictures/qey_ph_painting_eq1_horizontal09_bluecastle_l0', 0), + (4328, 4328, 'staticobjects/pictures/qey_ph_painting_eq1_horizontal10_redcourtyard_l0', 0), + (4329, 4329, 'staticobjects/pictures/qey_ph_painting_eq1_horizontal11_redfountain_l0', 0), + (4330, 4330, 'staticobjects/pictures/qey_ph_painting_eq1_horizontal12_temple_l0', 0), + (4331, 4331, 'staticobjects/pictures/qey_ph_painting_eq1_square25_castleonmountain_l0', 0), + (4332, 4332, 'staticobjects/pictures/qey_ph_painting_eq1_square26_purpleskull_l0', 0), + (4333, 4333, 'staticobjects/pictures/qey_ph_painting_eq1_square27_rainonguards_l0', 0), + (4334, 4334, 'staticobjects/pictures/qey_ph_painting_eq1_square28_halassign_l0', 0), + (4335, 4335, 'staticobjects/pictures/qey_ph_painting_eq1_square29_bluedragon_l0', 0), + (4336, 4336, 'staticobjects/pictures/qey_ph_painting_eq1_square30_bloodyfrogs_l0', 0), + (4337, 4337, 'staticobjects/pictures/qey_ph_painting_eq1_square31_torchincave_l0', 0), + (4338, 4338, 'staticobjects/pictures/qey_ph_painting_eq1_square32_elephanthuts_l0', 0), + (4339, 4339, 'staticobjects/pictures/qey_ph_painting_eq1_square33_buildingwithvines_l0', 0), + (4340, 4340, 'staticobjects/pictures/qey_ph_painting_eq1_square34_qeynosentrance_l0', 0), + (4341, 4341, 'staticobjects/pictures/qey_ph_painting_eq1_square35_catwalk_l0', 0), + (4342, 4342, 'staticobjects/pictures/qey_ph_painting_eq1_square36_skullentrance_l0', 0), + (4343, 4343, 'staticobjects/pictures/qey_ph_painting_eq1_vertical13_candleswithsymbol_l0', 0), + (4344, 4344, 'staticobjects/pictures/qey_ph_painting_eq1_vertical14_sumoguard_l0', 0), + (4345, 4345, 'staticobjects/pictures/qey_ph_painting_eq1_vertical15_lizardwithape_l0', 0), + (4346, 4346, 'staticobjects/pictures/qey_ph_painting_eq1_vertical16_manatdock_l0', 0), + (4347, 4347, 'staticobjects/pictures/qey_ph_painting_eq1_vertical17_eyetemple_l0', 0), + (4348, 4348, 'staticobjects/pictures/qey_ph_painting_eq1_vertical18_floatingbuilding_l0', 0), + (4349, 4349, 'staticobjects/pictures/qey_ph_painting_eq1_vertical19_floatingbuildingchains_l0', 0), + (4350, 4350, 'staticobjects/pictures/qey_ph_painting_eq1_vertical20_evildragonentrance_l0', 0), + (4351, 4351, 'staticobjects/pictures/qey_ph_painting_eq1_vertical21_hangingcorpse_l0', 0), + (4352, 4352, 'staticobjects/pictures/qey_ph_painting_eq1_vertical22_citadel_l0', 0), + (4353, 4353, 'staticobjects/pictures/qey_ph_painting_eq1_vertical23_greenmonument_l0', 0), + (4354, 4354, 'staticobjects/pictures/qey_ph_painting_eq1_vertical24_statuewithclaymore_l0', 0), + (4355, 4355, 'staticobjects/pictures/qey_ph_painting_eq2_horizontal01_falls_l0', 0), + (4356, 4356, 'staticobjects/pictures/qey_ph_painting_eq2_horizontal02_treessunset_l0', 0), + (4357, 4357, 'staticobjects/pictures/qey_ph_painting_eq2_horizontal03_trolllizard_l0', 0), + (4358, 4358, 'staticobjects/pictures/qey_ph_painting_eq2_horizontal04_lakefish_l0', 0), + (4359, 4359, 'staticobjects/pictures/qey_ph_painting_eq2_horizontal05_towerssunset_l0', 0), + (4360, 4360, 'staticobjects/pictures/qey_ph_painting_eq2_horizontal06_sunsetlaketrees_l0', 0), + (4361, 4361, 'staticobjects/pictures/qey_ph_painting_eq2_horizontal07_sunsettrees_l0', 0), + (4362, 4362, 'staticobjects/pictures/qey_ph_painting_eq2_horizontal08_freeportskyline_l0', 0), + (4363, 4363, 'staticobjects/pictures/qey_ph_painting_eq2_horizontal09_fightingfountain_l0', 0), + (4364, 4364, 'staticobjects/pictures/qey_ph_painting_eq2_horizontal10_foreststream_l0', 0), + (4365, 4365, 'staticobjects/pictures/qey_ph_painting_eq2_horizontal11_nightsky_l0', 0), + (4366, 4366, 'staticobjects/pictures/qey_ph_painting_eq2_horizontal12_troops_l0', 0), + (4367, 4367, 'staticobjects/pictures/qey_ph_painting_eq2_square25_wasps_l0', 0), + (4368, 4368, 'staticobjects/pictures/qey_ph_painting_eq2_square26_moat_l0', 0), + (4369, 4369, 'staticobjects/pictures/qey_ph_painting_eq2_square27_ratogre_l0', 0), + (4370, 4370, 'staticobjects/pictures/qey_ph_painting_eq2_square28_zombie_l0', 0), + (4371, 4371, 'staticobjects/pictures/qey_ph_painting_eq2_square29_wolfrivervale_l0', 0), + (4372, 4372, 'staticobjects/pictures/qey_ph_painting_eq2_square30_waterhouse_l0', 0), + (4373, 4373, 'staticobjects/pictures/qey_ph_painting_eq2_square31_guardhouse_l0', 0), + (4374, 4374, 'staticobjects/pictures/qey_ph_painting_eq2_square32_lizard_l0', 0), + (4375, 4375, 'staticobjects/pictures/qey_ph_painting_eq2_square33_treeisland_l0', 0), + (4376, 4376, 'staticobjects/pictures/qey_ph_painting_eq2_square34_kneelingattorch_l0', 0), + (4377, 4377, 'staticobjects/pictures/qey_ph_painting_eq2_square35_spire_l0', 0), + (4378, 4378, 'staticobjects/pictures/qey_ph_painting_eq2_square36_qeynoscottage_l0', 0), + (4379, 4379, 'staticobjects/pictures/qey_ph_painting_eq2_vertical13_forest_l0', 0), + (4380, 4380, 'staticobjects/pictures/qey_ph_painting_eq2_vertical14_kerraaquaduct_l0', 0), + (4381, 4381, 'staticobjects/pictures/qey_ph_painting_eq2_vertical15_forestwoodelf_l0', 0), + (4382, 4382, 'staticobjects/pictures/qey_ph_painting_eq2_vertical16_ogrewithfairy_l0', 0), + (4383, 4383, 'staticobjects/pictures/qey_ph_painting_eq2_vertical17_statuewithcandles_l0', 0), + (4384, 4384, 'staticobjects/pictures/qey_ph_painting_eq2_vertical18_kerranpurplerobe_l0', 0), + (4385, 4385, 'staticobjects/pictures/qey_ph_painting_eq2_vertical19_ratonga_l0', 0), + (4386, 4386, 'staticobjects/pictures/qey_ph_painting_eq2_vertical20_skeleton_l0', 0), + (4387, 4387, 'staticobjects/pictures/qey_ph_painting_eq2_vertical21_troll_l0', 0), + (4388, 4388, 'staticobjects/pictures/qey_ph_painting_eq2_vertical22_iskar_l0', 0), + (4389, 4389, 'staticobjects/pictures/qey_ph_painting_eq2_vertical23_highelf_l0', 0), + (4390, 4390, 'staticobjects/pictures/qey_ph_painting_eq2_vertical24_iskarbystream_l0', 0), + (4391, 4391, '_exp08/characters/tool_users/aviak_armored/aviak_eagle_warrior_armored_dark_03', 1096), + (4392, 4392, '_exp08/characters/tool_users/aviak_armored/aviak_eagle_warrior_armored_dark_04', 1096), + (4393, 4393, '_exp08/characters/tool_users/aviak_armored/aviak_eagle_warrior_armored_light_01', 1096), + (4394, 4394, '_exp08/characters/tool_users/aviak_armored/aviak_eagle_warrior_armored_light_02', 1096), + (4395, 4395, '_exp08/characters/tool_users/aviak_armored/aviak_eagle_warrior_armored_light_03', 1096), + (4396, 4396, '_exp04/tool_users/drachnid_male_crystal', 1096), + (4397, 4397, 'accessories/wieldable_items/weapons/exp07/2h_sword/goth_scythe_2_hand_01_pc', 1096), + (4398, 4398, 'creatures/monsters/hoovedcarnivore_demonic', 1096), + (4399, 4399, '_exp07/objects/crystalcaverns/exp07_dun_crystalcavern_crystal_dpo01_blue', 1096), + (4400, 4400, '_exp07/objects/crystalcaverns/exp07_dun_crystalcavern_crystal_dpo01_green', 1096), + (4401, 4401, '_exp07/objects/crystalcaverns/exp07_dun_crystalcavern_crystal_dpo01_purple', 1096), + (4402, 4402, 'accessories/wieldable_items/weapons/exp07/1h_sword/exp07_1h_sword_silver_scimitar', 1096), + (4403, 4403, 'accessories/wieldable_items/weapons/exp08/1h_pierce/pick_snowchipper', 1096), + (4404, 4404, 'staticobjects/pictures/qey_ph_painting_prestige_horizontal01_cecilwhale_l0', 0), + (4405, 4405, 'staticobjects/pictures/qey_ph_painting_prestige_horizontal02_scuffle_l0', 0), + (4406, 4406, 'staticobjects/pictures/qey_ph_painting_prestige_horizontal03_triptich_l0', 0), + (4407, 4407, 'staticobjects/pictures/qey_ph_painting_prestige_horizontal04_diagram_l0', 0), + (4408, 4408, 'staticobjects/pictures/qey_ph_painting_prestige_horizontal05_skullbatteringram_l0', 0), + (4409, 4409, 'staticobjects/pictures/qey_ph_painting_prestige_horizontal06_halloftruth_l0', 0), + (4410, 4410, 'staticobjects/pictures/qey_ph_painting_prestige_square07_centmale_l0', 0), + (4411, 4411, 'staticobjects/pictures/qey_ph_painting_prestige_square08_bixiequeen_l0', 0), + (4412, 4412, 'staticobjects/pictures/qey_ph_painting_prestige_square09_avatarstorms_l0', 0), + (4413, 4413, 'staticobjects/pictures/qey_ph_painting_prestige_square10_rjtree_l0', 0), + (4414, 4414, 'staticobjects/containers/dpo_oblost_pot01_brkn_pice1', 1096), + (4415, 4415, 'staticobjects/pictures/qey_ph_painting_prestige_square11_fireydragon_l0', 0), + (4416, 4416, 'staticobjects/containers/dpo_oblost_pot02_brkn_piec2', 1096), + (4417, 4417, 'staticobjects/pictures/qey_ph_painting_prestige_square12_succubus_l0', 0), + (4418, 4418, 'accessories/wearable_items/cloak/exp08/cloak_tartan_greenred', 1096), + (4419, 4419, 'staticobjects/pictures/qey_ph_painting_prestige_vertical13_treefort_l0', 0), + (4420, 4420, 'staticobjects/pictures/qey_ph_painting_prestige_vertical14_angryfalls_l0', 0), + (4421, 4421, 'staticobjects/pictures/qey_ph_painting_prestige_vertical15_warrior_l0', 0), + (4422, 4422, 'staticobjects/pictures/qey_ph_painting_prestige_vertical16_qeynosmap_l0', 0), + (4423, 4423, 'staticobjects/pictures/qey_ph_painting_prestige_vertical17_freeportmap_l0', 0), + (4424, 4424, 'staticobjects/pictures/qey_ph_painting_prestige_vertical18_fiestyhalfling_l0', 0), + (4425, 4425, 'projectiles/spell_rock_ball', 0), + (4426, 4426, 'projectiles/spell_skull_dark', 0), + (4427, 4427, 'staticobjects/wizard_spires/base_circle_1', 0), + (4428, 4428, 'staticobjects/wizard_spires/chunk_glow_1', 0), + (4429, 4429, 'staticobjects/wizard_spires/chunk_glow_2', 0), + (4430, 4430, 'staticobjects/wizard_spires/chunk_glow_3', 0), + (4431, 4431, 'staticobjects/wizard_spires/chunk_pointy_1', 0), + (4432, 4432, 'staticobjects/wizard_spires/fully_destroyed', 0), + (4433, 4433, 'staticobjects/wizard_spires/single_spire_1', 0), + (4434, 4434, 'staticobjects/bottles/floor_bottle_any_distiller01', 0), + (4435, 4435, 'staticobjects/carts/floor_cart_any_display01', 0), + (4436, 4436, 'staticobjects/cauldron/floor_cauldron_any_black01', 0), + (4437, 4437, 'staticobjects/cauldron/floor_cauldron_any_face01', 0), + (4438, 4438, 'staticobjects/chairs/floor_chair_any_skeletal01', 0), + (4439, 4439, 'staticobjects/chests/floor_box_any_collection01', 0), + (4440, 4440, 'staticobjects/chests/floor_box_any_collection02', 0), + (4441, 4441, 'staticobjects/containers/floor_tray_human_incenseburner01', 0), + (4442, 4442, 'staticobjects/containers/floor_vase_any_reflective01', 0), + (4443, 4443, 'staticobjects/containers/floor_vase_any_weaponholder01', 0), + (4444, 4444, 'staticobjects/crystals/floor_orb_human_ornate01', 0), + (4445, 4445, 'staticobjects/games/floor_chessboard_any_ornate01', 0), + (4446, 4446, 'staticobjects/general/floor_pedestal_any_lionpalm01', 0), + (4447, 4447, 'staticobjects/mirrors/floor_mirror_any_desktop01', 0), + (4448, 4448, 'staticobjects/mirrors/wall_mirror_any_ornate01', 0), + (4449, 4449, 'staticobjects/mirrors/wall_mirror_any_ornate02', 0), + (4450, 4450, 'staticobjects/monuments/floor_marker_any_windstalker01', 0), + (4451, 4451, 'staticobjects/monuments/floor_pool_human_divin01', 0), + (4452, 4452, 'staticobjects/musical/floor_harpl_human_ornate01', 0), + (4453, 4453, 'staticobjects/podium/floor_podium_any_chanting02', 0), + (4454, 4454, 'staticobjects/posts/floor_post_any_skulls01', 0), + (4455, 4455, 'staticobjects/racks/floor_rack_any_weapon01', 0), + (4456, 4456, 'staticobjects/relics/floor_box_any_puzzle01', 0), + (4457, 4457, 'staticobjects/relics/floor_orb_any_holder01', 0), + (4458, 4458, 'staticobjects/relics/floor_ornament_any_daggerskull01', 0), + (4459, 4459, 'staticobjects/relics/floor_sword_any_magic01', 0), + (4460, 4460, 'staticobjects/rugs/floor_rug_any_bear01', 0), + (4461, 4461, 'staticobjects/shop/floor_displalycase_any_ornate01', 0), + (4462, 4462, 'staticobjects/statues/floor_statue_any_fiend01', 0), + (4463, 4463, 'staticobjects/statues/floor_statue_any_soldier01', 0), + (4464, 4464, 'staticobjects/statues/floor_statue_orc_kight01', 0), + (4465, 4465, 'staticobjects/statues/floor_statue_troll_tiki01', 0), + (4466, 4466, 'staticobjects/torture_chamber/floor_casket_any_ironmaiden01', 0), + (4467, 4467, 'staticobjects/trainingdummy/floor_dummy_any_training01', 0), + (4468, 4468, 'staticobjects/weapons/floor_staff_any_eagle01', 0), + (4469, 4469, 'staticobjects/weapons/wall_bow_any_ornate01', 0), + (4470, 4470, 'staticobjects/containers/floor_flask_any_glass01', 0), + (4471, 4471, 'projectiles/spell_wavey_neg', 0), + (4472, 4472, 'staticobjects/cages/solusekseye_hanging_cage_open', 0), + (4473, 4473, 'staticobjects/rubble/debris_sewer_00', 0), + (4474, 4474, 'staticobjects/rubble/debris_sewer_01', 0), + (4475, 4475, 'staticobjects/rubble/debris_sewer_02', 0), + (4476, 4476, 'staticobjects/rubble/debris_sewer_03', 0), + (4477, 4477, 'staticobjects/rubble/debris_sewer_04', 0), + (4478, 4478, 'staticobjects/transports/platform', 0), + (4479, 4479, 'staticobjects/artifact/artifact_location', 0), + (4480, 4480, 'accessories/wieldable_items/weapons/hammer/fighting_stick/fighting_stick_capped_ornate', 0), + (4481, 4481, 'accessories/wieldable_items/weapons/hammer/fighting_stick/fighting_stick_capped_plain', 0), + (4482, 4482, 'accessories/wieldable_items/weapons/hammer/fighting_stick/fighting_stick_capped_runic', 0), + (4483, 4483, 'accessories/wieldable_items/weapons/hammer/fighting_stick/fighting_stick_capped_rusty', 0), + (4484, 4484, 'accessories/wieldable_items/weapons/hammer/fighting_stick/fighting_stick_ornate', 0), + (4485, 4485, 'accessories/wieldable_items/weapons/hammer/fighting_stick/fighting_stick_plain', 0), + (4486, 4486, 'accessories/wieldable_items/weapons/hammer/fighting_stick/fighting_stick_runic', 0), + (4487, 4487, 'accessories/wieldable_items/weapons/hammer/fighting_stick/fighting_stick_rusty', 0), + (4488, 4488, 'accessories/wieldable_items/weapons/spear/one_handed_spear/assegai_ornate', 0), + (4489, 4489, 'accessories/wieldable_items/weapons/spear/one_handed_spear/assegai_plain', 0), + (4490, 4490, 'accessories/wieldable_items/weapons/spear/one_handed_spear/assegai_runic', 0), + (4491, 4491, 'accessories/wieldable_items/weapons/spear/one_handed_spear/assegai_rusty', 0), + (4492, 4492, 'accessories/wieldable_items/weapons/spear/one_handed_spear/barbed_spear_ornate', 0), + (4493, 4493, 'accessories/wieldable_items/weapons/spear/one_handed_spear/barbed_spear_plain', 0), + (4494, 4494, 'accessories/wieldable_items/weapons/spear/one_handed_spear/barbed_spear_runic', 0), + (4495, 4495, 'accessories/wieldable_items/weapons/spear/one_handed_spear/barbed_spear_rusty', 0), + (4496, 4496, 'creatures/monsters/darathar', 0), + (4497, 4497, 'staticobjects/rocks/solusekseye_cluster', 0), + (4498, 4498, 'staticobjects/solusekseye_elevator/base', 0), + (4499, 4499, 'staticobjects/solusekseye_elevator/handle', 0), + (4500, 4500, 'staticobjects/fires/plane_of_fire', 0), + (4501, 4501, 'staticobjects/fires/plane_of_fire_boat', 0), + (4502, 4502, 'accessories/wieldable_items/weapons/great_sword/claymore_sword/claymore_sword_magic_prismatic_uber', 0), + (4503, 4503, 'accessories/wieldable_items/weapons/hammer/sceptre/sceptre_magic_prismatic_uber', 0), + (4504, 4504, 'accessories/wieldable_items/weapons/staff/fighting_batons/fighting_batons_magic_prismatic_uber', 0), + (4505, 4505, 'accessories/wieldable_items/weapons/sword/long_sword/long_sword_magic_acid_uber', 0), + (4506, 4506, 'accessories/wieldable_items/weapons/sword/long_sword/long_sword_magic_electric_uber', 0), + (4507, 4507, 'accessories/wieldable_items/weapons/sword/long_sword/long_sword_magic_fire_uber', 0), + (4508, 4508, 'accessories/wieldable_items/weapons/sword/long_sword/long_sword_magic_glow_white_uber', 0), + (4509, 4509, 'accessories/wieldable_items/weapons/sword/long_sword/long_sword_magic_ice_uber', 0), + (4510, 4510, 'accessories/wieldable_items/weapons/sword/long_sword/long_sword_magic_lava_uber', 0), + (4511, 4511, 'accessories/wieldable_items/weapons/sword/long_sword/long_sword_magic_plasma_uber', 0), + (4512, 4512, 'accessories/wieldable_items/weapons/sword/long_sword/long_sword_magic_poison_green_uber', 0), + (4513, 4513, 'accessories/wieldable_items/weapons/sword/long_sword/long_sword_magic_prismatic_uber', 0), + (4514, 4514, 'accessories/wieldable_items/weapons/sword/long_sword/long_sword_magic_runes_uber', 0), + (4515, 4515, 'accessories/wieldable_items/weapons/sword/long_sword/long_sword_magic_sparks_green_uber', 0), + (4516, 4516, 'accessories/wieldable_items/weapons/sword/long_sword/long_sword_magic_sparks_red_uber', 0), + (4517, 4517, 'accessories/wearable_items/cloak/exp08/cloak_tartan_bluefur', 1096), + (4518, 4518, 'accessories/wieldable_items/weapons/sword/long_sword/long_sword_magic_stone_uber', 0), + (4519, 4519, 'accessories/wieldable_items/weapons/sword/long_sword/long_sword_magic_water_uber', 0), + (4520, 4520, 'accessories/wieldable_items/weapons/sword/short_sword/short_sword_magic_prismatic_uber', 0), + (4521, 4521, 'accessories/wieldable_items/weapons/talisman/wand/wand_magic_prismatic_uber', 0), + (4522, 4522, 'accessories/wieldable_items/weapons/axe/battleaxe/battleaxe_magic_prismatic_uber', 0), + (4523, 4523, 'accessories/wieldable_items/weapons/great_axe/doubleheaded_axe/double_axe_magic_prismatic_uber', 0), + (4524, 4524, 'accessories/wieldable_items/weapons/hammer/battlehammer/battlehammer_magic_prismatic_uber', 0), + (4525, 4525, 'accessories/wieldable_items/weapons/hammer/fighting_stick/fighting_stick_magic_prismatic_uber', 0), + (4526, 4526, 'accessories/wieldable_items/weapons/hammer/mace/mace_magic_prismatic_uber', 0), + (4527, 4527, 'creatures/monsters/hellhound', 0), + (4528, 4528, 'creatures/monsters/hellhound_lava', 0), + (4529, 4529, 'staticobjects/lab/floor_beaker_iksar_capped_redgoo01', 0), + (4530, 4530, 'staticobjects/liveevent/tinkerfest/dpo_panel_porthole', 1096), + (4531, 4531, '_exp01/characters/monsters/beetle_dune', 0), + (4532, 4532, '_exp01/characters/monsters/scorpion_dune', 0), + (4533, 4533, '_exp01/characters/monsters/scorpion_fire', 0), + (4534, 4534, '_exp01/characters/monsters/spider_dune', 0), + (4535, 4535, 'creatures/tu/skeleton_mage', 0), + (4536, 4536, 'creatures/tu/skeleton_mystic', 0), + (4537, 4537, 'creatures/tu/skeleton_paladin', 0), + (4538, 4538, 'creatures/tu/skeleton_priest', 0), + (4539, 4539, 'creatures/tu/skeleton_sergeant', 0), + (4540, 4540, 'creatures/tu/skeleton_sergeant_paladin', 0), + (4541, 4541, 'creatures/tu/skeleton_sergeant_rusty', 0), + (4542, 4542, 'creatures/tu/skeleton_warrior', 0), + (4543, 4543, 'creatures/tu/skeleton_warrior_rusty', 0), + (4544, 4544, 'staticobjects/dpo_invisible_wall/invisible_wall_thick', 0), + (4545, 4545, 'creatures/monsters/fleshgoyle', 0), + (4546, 4546, 'accessories/wieldable_items/weapons/sword/long_sword/long_sword_magic_blood_uber', 0), + (4547, 4547, 'creatures/tu/reverant', 0), + (4548, 4548, 'creatures/tu/reverant_lesser', 0), + (4549, 4549, 'staticobjects/liveevent/tinkerfest/dpo_panel_rusty_quarters', 1096), + (4550, 4550, 'staticobjects/mushroom/mushroom_spotted_green', 0), + (4551, 4551, 'staticobjects/mushroom/mushroom_spotted_purple', 0), + (4552, 4552, 'staticobjects/vines/vines_01', 0), + (4553, 4553, 'staticobjects/vines/vines_02', 0), + (4554, 4554, 'staticobjects/vines/vines_03', 0), + (4555, 4555, 'staticobjects/vines/vines_04', 0), + (4556, 4556, 'staticobjects/vines/vines_up_01', 0), + (4557, 4557, 'creatures/tu/skeleton_king_greater', 0), + (4558, 4558, 'creatures/tu/skeleton_king_lesser', 0), + (4559, 4559, 'creatures/tu/skeleton_king_paladin_greater', 0), + (4560, 4560, 'creatures/tu/skeleton_king_paladin_lesser', 0), + (4561, 4561, 'creatures/tu/skeleton_king_ranger_greater', 0), + (4562, 4562, 'creatures/tu/skeleton_king_ranger_lesser', 0), + (4563, 4563, 'accessories/wieldable_items/weapons/sword/vampire_sword/vampire_sword_plain', 0), + (4564, 4564, 'animatedobjects/vases/ton_vase_breakable', 0), + (4565, 4565, 'accessories/wearable_items/leather/artifact/low/legs_noskirt', 0), + (4566, 4566, 'accessories/wearable_items/leather/artifact/medium/legs_noskirt', 0), + (4567, 4567, 'accessories/wearable_items/leather/common/high/legs_noskirt', 0), + (4568, 4568, 'accessories/wearable_items/leather/common/low/legs_noskirt', 0), + (4569, 4569, 'accessories/wearable_items/leather/common/medium/legs_noskirt', 0), + (4570, 4570, 'accessories/wearable_items/leather/uncommon/high/legs_noskirt', 0), + (4571, 4571, 'accessories/wearable_items/leather/uncommon/low/legs_noskirt', 0), + (4572, 4572, 'accessories/wearable_items/leather/uncommon/medium/legs_noskirt', 0), + (4573, 4573, 'accessories/wearable_items/vanguard/common/high/legs_noskirt', 0), + (4574, 4574, 'accessories/wearable_items/vanguard/common/high/shoulders_nopauldrons', 0), + (4575, 4575, 'accessories/wearable_items/vanguard/common/low/legs_noskirt', 0), + (4576, 4576, 'accessories/wearable_items/vanguard/common/low/shoulders_nopauldrons', 0), + (4577, 4577, 'accessories/wearable_items/vanguard/common/medium/legs_noskirt', 0), + (4578, 4578, 'accessories/wearable_items/vanguard/common/medium/shoulders_nopauldrons', 0), + (4579, 4579, 'accessories/wearable_items/vanguard/rare/low/legs_noskirt', 0), + (4580, 4580, 'accessories/wearable_items/vanguard/rare/low/shoulders_nopauldrons', 0), + (4581, 4581, 'accessories/wearable_items/vanguard/rare/medium/legs_noskirt', 0), + (4582, 4582, 'accessories/wearable_items/vanguard/rare/medium/shoulders_nopauldrons', 0), + (4583, 4583, 'accessories/wearable_items/vanguard/uncommon/high/legs_noskirt', 0), + (4584, 4584, 'accessories/wearable_items/vanguard/uncommon/high/shoulders_nopauldrons', 0), + (4585, 4585, 'accessories/wearable_items/vanguard/uncommon/low/legs_noskirt', 0), + (4586, 4586, 'accessories/wearable_items/vanguard/uncommon/low/shoulders_nopauldrons', 0), + (4587, 4587, 'accessories/wearable_items/vanguard/uncommon/medium/legs_noskirt', 0), + (4588, 4588, 'accessories/wearable_items/vanguard/uncommon/medium/shoulders_nopauldrons', 0), + (4589, 4589, 'accessories/wearable_items/woven/common/high/legs_noskirt', 0), + (4590, 4590, 'accessories/wearable_items/woven/common/low/legs_noskirt', 0), + (4591, 4591, 'accessories/wearable_items/woven/common/medium/legs_noskirt', 0), + (4592, 4592, 'accessories/wearable_items/woven/rare/low/legs_noskirt', 0), + (4593, 4593, 'accessories/wearable_items/woven/uncommon/high/legs_noskirt', 0), + (4594, 4594, 'accessories/wearable_items/woven/uncommon/low/legs_noskirt', 0), + (4595, 4595, 'accessories/wearable_items/woven/uncommon/medium/legs_noskirt', 0), + (4596, 4596, 'accessories/wieldable_items/weapons/axe/kopesh/kopesh_axe_plain', 0), + (4597, 4597, 'accessories/wieldable_items/weapons/sword/khanda_sword/khanda_sword001_plain', 0), + (4598, 4598, 'accessories/wieldable_items/weapons/sword/khanda_sword/khanda_sword002_plain', 0), + (4599, 4599, 'accessories/wieldable_items/weapons/sword/vampire_sword/vampire_sword_ornate', 0), + (4600, 4600, 'staticobjects/liveevent/tinkerfest/dpo_panel_striped_quarters', 1096), + (4601, 4601, 'animatedobjects/sarcophagus/ton_sarcophagus_breakable_boss', 0), + (4602, 4602, 'animatedobjects/sarcophagus/ton_sarcophagus_breakable_common', 0), + (4603, 4603, 'animatedobjects/sarcophagus/ton_sarcophagus_breakable_noble', 0), + (4604, 4604, 'staticobjects/bottles/floor_bottle_any_wine01', 0), + (4605, 4605, 'staticobjects/boxes/floor_storagebox_any_wooden01', 0), + (4606, 4606, 'staticobjects/cauldron/floor_cauldron_darkelf_campfire01', 0), + (4607, 4607, 'staticobjects/chests/floor_treasurechest_any_clean01', 0), + (4608, 4608, 'staticobjects/containers/floor_bucket_orc_bloodore01', 0), + (4609, 4609, 'staticobjects/containers/floor_vase_human_clay03', 0), + (4610, 4610, 'staticobjects/lab/floor_sphereflask_iksar_redgoo01', 0), + (4611, 4611, 'staticobjects/lab/floor_testtuberack_iksar_redgoo01', 0), + (4612, 4612, 'staticobjects/racks/floor_rack_any_clothing01', 0), + (4613, 4613, 'staticobjects/racks/floor_rack_any_clothing02', 0), + (4614, 4614, 'staticobjects/racks/floor_rack_any_weapon02', 0), + (4615, 4615, 'staticobjects/shop/floor_case_any_display01', 0), + (4616, 4616, 'staticobjects/tents/floor_tent_human_closed01', 0), + (4617, 4617, 'staticobjects/tents/floor_tent_human_open01', 0), + (4618, 4618, 'accessories/wieldable_items/weapons/great_sword/scimitar_broad_sword/scimitar_broad_sword001_plain', 0), + (4619, 4619, 'accessories/wieldable_items/weapons/great_sword/scimitar_broad_sword/scimitar_broad_sword001_rusty', 0), + (4620, 4620, 'creatures/monsters/frog_illusion', 0), + (4621, 4621, '_exp01/characters/tool_users/lizardman_desert_plain', 0), + (4622, 4622, '_exp01/characters/tool_users/lizardman_desert_priest', 0), + (4623, 4623, '_exp01/characters/tool_users/lizardman_desert_warrior', 0), + (4624, 4624, 'animatedobjects/walls/breakable_wall_brick', 0), + (4625, 4625, 'staticobjects/statues/statue_of_marr', 0), + (4626, 4626, '_exp01/characters/tool_users/lizardman_desert_wizard', 0), + (4627, 4627, 'staticobjects/housing_portal_objects/vision_home_skyblade01', 1096), + (4628, 4628, 'staticobjects/housing_portal_objects/vision_home_everfrost_menagerie01', 1096), + (4629, 4629, 'accessories/wieldable_items/weapons/axe/small_dwarf/small_dwarf_axe_plain', 0), + (4630, 4630, 'accessories/wieldable_items/weapons/great_axe/large_dwarf_axe/large_dwarf_axe_plain', 0), + (4631, 4631, 'creatures/tu/vampire_darkelf_female_captain', 0), + (4632, 4632, 'creatures/tu/vampire_darkelf_female_mage', 0), + (4633, 4633, 'creatures/tu/vampire_darkelf_female_warrior', 0), + (4634, 4634, 'creatures/tu/vampire_darkelf_male_captain', 0), + (4635, 4635, 'creatures/tu/vampire_darkelf_male_lord', 0), + (4636, 4636, 'creatures/tu/vampire_darkelf_male_mage', 0), + (4637, 4637, 'creatures/tu/vampire_darkelf_male_warrior', 0), + (4638, 4638, 'staticobjects/coffins_and_sarcophagus/shroud_only', 0), + (4639, 4639, 'staticobjects/tables/pedestal_table', 0), + (4640, 4640, '_exp01/characters/tool_users/lizardman_desert_king', 0), + (4641, 4641, 'accessories/wieldable_items/weapons/hammer/eagle_sceptre/eagle_sceptre_plain', 0), + (4642, 4642, 'animatedobjects/walls/breakable_wall_plain', 0), + (4643, 4643, 'staticobjects/barrels/floor_barrel_any_water01', 0), + (4644, 4644, 'staticobjects/boats/floor_boat_human_fishing01', 0), + (4645, 4645, 'staticobjects/books/floor_books_halfling_stack01', 0), + (4646, 4646, 'staticobjects/books/floor_books_halfling_stack02', 0), + (4647, 4647, 'staticobjects/boxes/floor_collectionbox_any_wood01', 0), + (4648, 4648, 'staticobjects/carts/floor_displaycart_any_closed01', 0), + (4649, 4649, 'staticobjects/containers/floor_bucket_halfling_fish01', 0), + (4650, 4650, 'staticobjects/containers/floor_bucket_orc_ore01', 0), + (4651, 4651, 'staticobjects/racks/floor_rack_any_weapon03', 0), + (4652, 4652, 'staticobjects/rocks/fallengate_rock01', 0), + (4653, 4653, 'staticobjects/rocks/floor_stones_any_wall01', 0), + (4654, 4654, 'staticobjects/shop/floor_display_halfling_armor01', 0), + (4655, 4655, 'staticobjects/signs/general/floor_signs_elf_roadmarker01', 0), + (4656, 4656, 'staticobjects/tents/nekf_tent_large_purple001', 0), + (4657, 4657, 'staticobjects/dpo_invisible_wall/invisible_bridge', 0), + (4658, 4658, 'staticobjects/chests/floor_chest_any_fancybox01', 0), + (4659, 4659, 'staticobjects/chests/floor_chest_any_flattop01', 0), + (4660, 4660, '_exp01/characters/monsters/cobra_bone', 0), + (4661, 4661, '_exp01/characters/monsters/cobra_desert', 0), + (4662, 4662, '_exp01/characters/monsters/cobra_iron', 0), + (4663, 4663, 'staticobjects/rocks/floor_stones_any_pile01', 0), + (4664, 4664, '_exp01/characters/monsters/snake_bone', 0), + (4665, 4665, 'staticobjects/ap1_mini_entrances/door01', 0), + (4666, 4666, 'staticobjects/ap1_mini_entrances/door02', 0), + (4667, 4667, 'staticobjects/ap1_mini_entrances/door03vdl', 0), + (4668, 4668, 'staticobjects/ap1_mini_entrances/mound01', 0), + (4669, 4669, 'staticobjects/ap1_mini_entrances/mound02', 0), + (4670, 4670, 'staticobjects/ap1_mini_entrances/mound03', 0), + (4671, 4671, 'animatedobjects/walls/breakable_wall_plain_small', 0), + (4672, 4672, 'ec/npc/goblin_zombie', 0), + (4673, 4673, 'ec/npc/goblin_zombie_aqua', 0), + (4674, 4674, 'staticobjects/rocks/brown_rock_large', 0), + (4675, 4675, 'staticobjects/wood/wood_plank01', 0), + (4676, 4676, 'staticobjects/wood/wood_plank02', 0), + (4677, 4677, 'accessories/wieldable_items/shields/kite_shield/metal_kite/metal_kite_shield_magic_ether_flame_medium', 0), + (4678, 4678, 'accessories/wieldable_items/shields/kite_shield/metal_kite/metal_kite_shield_magic_ice_lesser', 0), + (4679, 4679, 'accessories/wieldable_items/shields/kite_shield/metal_kite/metal_kite_shield_magic_ice_medium', 0), + (4680, 4680, 'accessories/wieldable_items/shields/kite_shield/wooden_kite/wooden_kite_shield_magic_prismatic_lesser', 0), + (4681, 4681, 'accessories/wieldable_items/shields/kite_shield/wooden_kite/wooden_kite_shield_magic_prismatic_uber', 0), + (4682, 4682, 'accessories/wieldable_items/shields/round_shield/metal_etched_round/round_shield_etched_magic_fire_lesser', 0), + (4683, 4683, 'accessories/wieldable_items/shields/round_shield/metal_etched_round/round_shield_etched_magic_fire_medium', 0), + (4684, 4684, 'accessories/wieldable_items/shields/round_shield/metal_etched_round/round_shield_etched_magic_fire_uber', 0), + (4685, 4685, 'animatedobjects/walls/breakable_wall_plain_collision', 0), + (4686, 4686, 'animatedobjects/walls/breakable_wall_plain_small_collision', 0), + (4687, 4687, 'accessories/wieldable_items/shields/ghost_shields/metal_kite_shield001_ghost', 0), + (4688, 4688, 'accessories/wieldable_items/shields/ghost_shields/round_shield_etched001_ghost', 0), + (4689, 4689, 'accessories/wieldable_items/shields/ghost_shields/streatched_leather_buckler001_ghost', 0), + (4690, 4690, 'accessories/wieldable_items/shields/ghost_shields/wooden_tower_shield001_ghost', 0), + (4691, 4691, 'accessories/wieldable_items/weapons/ghost_weapons/battlehammer001_ghost', 0), + (4692, 4692, 'accessories/wieldable_items/weapons/ghost_weapons/claws001_ghost', 0), + (4693, 4693, 'accessories/wieldable_items/weapons/ghost_weapons/dagger001_ghost', 0), + (4694, 4694, 'accessories/wieldable_items/weapons/ghost_weapons/double_axe001_ghost', 0), + (4695, 4695, 'accessories/wieldable_items/weapons/ghost_weapons/greatsword001_ghost', 0), + (4696, 4696, 'accessories/wieldable_items/weapons/ghost_weapons/great_spear001_ghost', 0), + (4697, 4697, 'accessories/wieldable_items/weapons/ghost_weapons/hand_axe001_ghost', 0), + (4698, 4698, 'accessories/wieldable_items/weapons/ghost_weapons/long_bow001_ghost', 0), + (4699, 4699, 'accessories/wieldable_items/weapons/ghost_weapons/quarterstaff001_ghost', 0), + (4700, 4700, 'accessories/wieldable_items/weapons/ghost_weapons/rapier001_ghost', 0), + (4701, 4701, 'accessories/wieldable_items/weapons/ghost_weapons/short_spear001_ghost', 0), + (4702, 4702, 'accessories/wieldable_items/weapons/ghost_weapons/short_sword002_ghost', 0), + (4703, 4703, 'accessories/wieldable_items/weapons/ghost_weapons/throwing_hammer001_ghost', 0), + (4704, 4704, 'accessories/wieldable_items/weapons/ghost_weapons/wand001_ghost', 0), + (4705, 4705, 'accessories/wieldable_items/weapons/ghost_weapons/war_hammer001_ghost', 0), + (4706, 4706, 'accessories/wieldable_items/weapons/great_hammer/orc_hammer/orc_hammer_plain', 0), + (4707, 4707, 'staticobjects/artifact/mailboxes/mailbox_home', 0), + (4708, 4708, 'staticobjects/artifact/mailboxes/mailbox_kisok', 0), + (4709, 4709, 'staticobjects/mailboxes/mailbox_home', 0), + (4710, 4710, 'staticobjects/mailboxes/mailbox_kisok', 0), + (4711, 4711, '_exp01/characters/monsters/cobra_metallic', 0), + (4712, 4712, 'accessories/wieldable_items/weapons/hammer/club_stone/club_stone_plain', 0), + (4713, 4713, 'staticobjects/helmet/crown_tranix_chain_uncommon_medium', 0), + (4714, 4714, 'staticobjects/shield/shiny_brass_shield_round_shield_etched001_runic', 0), + (4715, 4715, 'staticobjects/stein/stein_of_moggok_stein001_runic', 0), + (4716, 4716, 'projectiles/spell_electric_ball_red', 0), + (4717, 4717, 'staticobjects/fences/ant_qeynos_fencepiece01', 0), + (4718, 4718, 'staticobjects/fences/ant_qeynos_fencepiece02', 0), + (4719, 4719, 'staticobjects/fences/ant_qeynos_fencepiece03', 0), + (4720, 4720, 'staticobjects/fences/ant_qeynos_fencepiece04', 0), + (4721, 4721, 'staticobjects/rocks/commonlands_rock', 0), + (4722, 4722, 'staticobjects/tree/fprt_datepalm_02', 0), + (4723, 4723, 'accessories/wearable_items/monk/monk_plain/chest', 0), + (4724, 4724, 'accessories/wearable_items/monk/monk_plain/feet', 0), + (4725, 4725, 'accessories/wearable_items/monk/monk_plain/forearms', 0), + (4726, 4726, 'accessories/wearable_items/monk/monk_plain/head', 0), + (4727, 4727, 'staticobjects/housing_portal_objects/vision_home_gorowyn_5room01', 1096), + (4728, 4728, 'accessories/wearable_items/monk/monk_plain/shoulders', 0), + (4729, 4729, 'staticobjects/rocks/lavastorm_black_rock_pile', 0), + (4730, 4730, 'accessories/wieldable_items/weapons/axe/axe_curved_handle/axe_curved_handle_plain', 0), + (4731, 4731, 'accessories/wearable_items/monk/monk_plain/legs', 0), + (4732, 4732, 'creatures/tu/gnoll_skeleton', 0), + (4733, 4733, 'staticobjects/relics/magic_globe_red', 0), + (4734, 4734, 'staticobjects/ap2_ss_rockslide/rockslide_01', 0), + (4735, 4735, 'staticobjects/ap2_ss_rockslide/rockslide_wall_01', 0), + (4736, 4736, 'accessories/wieldable_items/weapons/great_sword/vampire_greatsword/vampire_greatsword_ornate', 0), + (4737, 4737, 'accessories/wieldable_items/weapons/great_sword/vampire_greatsword/vampire_greatsword_plain', 0), + (4738, 4738, 'designdummy/designdummy', 0), + (4739, 4739, '_exp01/characters/tool_users/giant_sand_plain_beard', 0), + (4740, 4740, '_exp01/characters/tool_users/giant_sand_plain_goatee', 0), + (4741, 4741, '_exp01/characters/tool_users/giant_sand_plain_mustache', 0), + (4742, 4742, '_exp01/characters/tool_users/giant_sand_plain_none', 0), + (4743, 4743, 'staticobjects/majdul_temp_ph_objects/awning_small001', 0), + (4744, 4744, 'staticobjects/majdul_temp_ph_objects/tapestry001_longceiling', 0), + (4745, 4745, '_exp01/characters/monsters/crocodile', 0), + (4746, 4746, 'animatedobjects/walls/dc_breakable_wall_plain', 0), + (4747, 4747, 'animatedobjects/walls/dc_breakable_wall_plain_small', 0), + (4748, 4748, 'staticobjects/plants/feerrott_plant_bigleaf', 0), + (4749, 4749, 'staticobjects/plants/feerrott_plant_redtop', 0), + (4750, 4750, 'staticobjects/housing_portal_objects/vision_home_majdul_bottle01', 1096), + (4751, 4751, 'staticobjects/housing_portal_objects/vision_home_majdul_library01', 1096), + (4752, 4752, 'staticobjects/housing_portal_objects/vision_home_mistmoore_5room01', 1096), + (4753, 4753, 'staticobjects/housing_portal_objects/vision_home_neriak_opera01', 1096), + (4754, 4754, 'staticobjects/housing_portal_objects/vision_home_qeynos_dojo01', 1096), + (4755, 4755, 'accessories/wearable_items/_exp08/unkown_faction_armor/vanguard/skirt', 1096), + (4756, 4756, 'accessories/wearable_items/_exp08/unkown_faction_armor/vanguard/chest', 1096), + (4757, 4757, 'accessories/wearable_items/_exp08/unkown_faction_armor/vanguard/feet', 1096), + (4758, 4758, 'accessories/wearable_items/_exp08/unkown_faction_armor/vanguard/forearms', 1096), + (4759, 4759, 'accessories/wearable_items/_exp08/unkown_faction_armor/vanguard/hands', 1096), + (4760, 4760, 'accessories/wearable_items/_exp08/unkown_faction_armor/vanguard/head', 1096), + (4761, 4761, 'accessories/wearable_items/_exp08/unkown_faction_armor/vanguard/legs', 1096), + (4762, 4762, 'accessories/wearable_items/_exp08/unkown_faction_armor/vanguard/legs_noskirt', 1096), + (4763, 4763, 'accessories/wearable_items/_exp08/unkown_faction_armor/vanguard/right', 1096), + (4764, 4764, 'accessories/wearable_items/_exp08/unkown_faction_armor/vanguard/shoulders', 1096), + (4765, 4765, 'accessories/wearable_items/_exp08/unkown_faction_armor/vanguard/shoulders_nopauldrons', 1096), + (4766, 4766, 'creatures/monsters/wolf_shade_green', 1096), + (4767, 4767, 'ec/npc/goblin_burglar', 1096), + (4768, 4768, 'accessories/wieldable_items/weapons/exp08/1h_pierce/exp08_dagger_goblin1', 1096), + (4769, 4769, '_exp07/zones/exp07_dun_drunder/dpo_dru_drunder_sullon_sconce01_on', 1096), + (4770, 4770, '_exp07/zones/exp07_dun_drunder/dpo_dru_drunder_sullon_sconce01_off', 1096), + (4771, 4771, 'accessories/wearable_items/cloak/exp08/cloak_feathered_red', 1096), + (4772, 4772, 'accessories/wearable_items/cloak/exp08/cloak_feathered_parrot1', 1096), + (4773, 4773, 'accessories/wearable_items/cloak/exp08/cloak_feathered_parrot2', 1096), + (4774, 4774, 'accessories/wearable_items/profesion_hats/snow_bunny_hat/head_pink_whiteears_bunny_hat', 1096), + (4775, 4775, 'staticobjects/soe_wallet/wheel_of_chance_table_01', 1096), + (4776, 4776, 'staticobjects/soe_wallet/card_table_01', 1096), + (4777, 4777, 'staticobjects/soe_wallet/card_table_empty_01', 1096), + (4778, 4778, 'staticobjects/soe_wallet/cue_ball_black_01', 1096), + (4779, 4779, 'staticobjects/soe_wallet/cue_ball_blue_solid_01', 1096), + (4780, 4780, 'staticobjects/soe_wallet/cue_ball_blue_stripe_01', 1096), + (4781, 4781, 'staticobjects/soe_wallet/cue_ball_green_solid_01', 1096), + (4782, 4782, 'staticobjects/soe_wallet/cue_ball_green_stripe_01', 1096), + (4783, 4783, 'staticobjects/soe_wallet/cue_ball_magenta_solid_01', 1096), + (4784, 4784, 'accessories/wearable_items/_exp07/royal_velium_armor/royal_velium_armor_robe/pants', 1096), + (4785, 4785, 'staticobjects/soe_wallet/cue_ball_magenta_stripe_01', 1096), + (4786, 4786, 'staticobjects/soe_wallet/cue_ball_orange_solid_01', 1096), + (4787, 4787, 'staticobjects/soe_wallet/cue_ball_orange_stripe_01', 1096), + (4788, 4788, 'staticobjects/soe_wallet/cue_ball_purple_solid_01', 1096), + (4789, 4789, 'staticobjects/soe_wallet/cue_ball_purple_stripe_01', 1096), + (4790, 4790, 'staticobjects/soe_wallet/cue_ball_red_solid_01', 1096), + (4791, 4791, 'staticobjects/soe_wallet/cue_ball_red_stripe_01', 1096), + (4792, 4792, 'staticobjects/soe_wallet/cue_ball_white_01', 1096), + (4793, 4793, 'staticobjects/soe_wallet/cue_ball_yellow_solid_01', 1096), + (4794, 4794, 'staticobjects/soe_wallet/cue_ball_yellow_stripe_01', 1096), + (4795, 4795, 'staticobjects/soe_wallet/cue_rack_01', 1096), + (4796, 4796, 'staticobjects/soe_wallet/cue_stick_01', 1096), + (4797, 4797, 'staticobjects/soe_wallet/deck_of_cards_01', 1096), + (4798, 4798, 'staticobjects/soe_wallet/poker_chips_01', 1096), + (4799, 4799, 'staticobjects/soe_wallet/pool_table_01', 1096), + (4800, 4800, 'staticobjects/liveevent/erollisi_objects/dpo_erollosi_platecupcakes01', 1096), + (4801, 4801, 'staticobjects/liveevent/erollisi_objects/dpo_erollosi_white_chocolate_box', 1096), + (4802, 4802, 'staticobjects/liveevent/frostfell/dpo_bauble_bell_string_lights_green_ceiling', 1096), + (4803, 4803, 'staticobjects/liveevent/frostfell/dpo_bauble_glass_icicle01_blue', 1096), + (4804, 4804, 'staticobjects/liveevent/frostfell/dpo_bauble_glass_icicle01_green', 1096), + (4805, 4805, 'staticobjects/liveevent/frostfell/dpo_bauble_glass_icicle01_red', 1096), + (4806, 4806, 'staticobjects/liveevent/frostfell/dpo_bauble_oblong_bluesilver01', 1096), + (4807, 4807, 'staticobjects/liveevent/frostfell/dpo_bauble_oblong_purplegold01', 1096), + (4808, 4808, 'staticobjects/liveevent/frostfell/dpo_bauble_oblong_redgreen01', 1096), + (4809, 4809, 'staticobjects/liveevent/frostfell/dpo_snowglobe_halas01', 1096), + (4810, 4810, 'staticobjects/liveevent/frostfell/dpo_snowglobe_thurgadin01', 1096), + (4811, 4811, 'staticobjects/liveevent/halloween/dpo_banner_notd_fire', 1096), + (4812, 4812, 'staticobjects/liveevent/halloween/dpo_banner_notd_nightsky', 1096), + (4813, 4813, 'staticobjects/liveevent/halloween/dpo_banner_notd_web_spider', 1096), + (4814, 4814, 'staticobjects/liveevent/halloween/dpo_halloween_hanging_spider01_swinging', 1096), + (4815, 4815, 'staticobjects/liveevent/halloween/holiday_skull_candy_dispenser_01', 1096), + (4816, 4816, 'staticobjects/liveevent/halloween/halfing_display_traps01', 1096), + (4817, 4817, 'staticobjects/halloween/fprt_tombstonea001', 1096), + (4818, 4818, 'staticobjects/soe_wallet/slot_machine_reward_coin', 1096), + (4819, 4819, 'staticobjects/housing_portal_objects/vision_home_freeport01', 1096), + (4820, 4820, 'staticobjects/housing_portal_objects/vision_home_halas01', 1096), + (4821, 4821, 'staticobjects/housing_portal_objects/vision_home_kelethin01', 1096), + (4822, 4822, 'staticobjects/housing_portal_objects/vision_home_majdul01', 1096), + (4823, 4823, 'staticobjects/housing_portal_objects/vision_home_neriak01', 1096), + (4824, 4824, 'staticobjects/housing_portal_objects/vision_home_qeynos01', 1096), + (4825, 4825, 'staticobjects/housing_portal_objects/vision_home_veteran_mistmoore01', 1096), + (4826, 4826, '_exp08/characters/monsters/wuoshi_decay/wuoshi_decay', 1096), + (4827, 4827, '_exp08/characters/tool_users/war_generals/war_general_male', 1096), + (4828, 4828, 'staticobjects/mushroom/lf_flora_mushroom_small01', 1096), + (4829, 4829, 'staticobjects/mushroom/lf_flora_mushroom_small02', 1096), + (4830, 4830, 'staticobjects/mushroom/lf_flora_mushroom_small03', 1096), + (4831, 4831, 'staticobjects/mushroom/lf_flora_mushroom_small04', 1096), + (4832, 4832, '_exp07/zones/exp07_rgn_eastern_wastes/teleport_vision_eastern_wastes_spires', 1096), + (4833, 4833, 'staticobjects/barrels/floor_barrel_any_small02triplesize', 1096), + (4834, 4834, 'staticobjects/weapons/great_spear_ornate001_uprightx10_dpo', 1096), + (4835, 4835, 'creatures/mounts/flying_disc/tinkered_skiff_01', 1096), + (4836, 4836, '_exp07/objects/vel_dragon_ring_broken', 1096), + (4837, 4837, '_exp07/objects/vel_dragon_ring_fixed', 1096), + (4838, 4838, 'staticobjects/halloween/dpo_halloween_candy_corn', 1096), + (4839, 4839, 'staticobjects/halloween/dpo_halloween_light_candy_corn', 1096), + (4840, 4840, 'staticobjects/liveevent/frostfell/dpo_holiday_candy_bowl01', 1096), + (4841, 4841, 'staticobjects/liveevent/frostfell/dpo_candy_peppermint01', 1096), + (4842, 4842, 'staticobjects/liveevent/frostfell/dpo_candy_peppermint02', 1096), + (4843, 4843, 'staticobjects/liveevent/frostfell/dpo_candy_rectangle01', 1096), + (4844, 4844, 'staticobjects/liveevent/frostfell/dpo_candy_rectangle01_red', 1096), + (4845, 4845, 'staticobjects/liveevent/frostfell/dpo_candy_rectangle_blue', 1096), + (4846, 4846, 'staticobjects/liveevent/frostfell/dpo_candy_rectangle_green', 1096), + (4847, 4847, 'staticobjects/liveevent/frostfell/dpo_candy_rectangle_red02', 1096), + (4848, 4848, 'staticobjects/liveevent/frostfell/dpo_candy_rectangle_red03', 1096), + (4849, 4849, 'staticobjects/liveevent/frostfell/dpo_candy_rectangle_silver', 1096), + (4850, 4850, 'staticobjects/liveevent/frostfell/dpo_candy_round_blue', 1096), + (4851, 4851, 'staticobjects/liveevent/frostfell/dpo_candy_round_gold', 1096), + (4852, 4852, 'staticobjects/liveevent/frostfell/dpo_candy_round_green', 1096), + (4853, 4853, 'staticobjects/liveevent/frostfell/dpo_candy_round_red', 1096), + (4854, 4854, 'staticobjects/liveevent/frostfell/dpo_candy_round_silver', 1096), + (4855, 4855, 'accessories/wearable_items/_exp08/dragon_armor/chain_blue/skirt', 1096), + (4856, 4856, 'accessories/wearable_items/_exp08/dragon_armor/chain_blue/chest', 1096), + (4857, 4857, 'accessories/wearable_items/_exp08/dragon_armor/chain_blue/feet', 1096), + (4858, 4858, 'accessories/wearable_items/_exp08/dragon_armor/chain_blue/forearms', 1096), + (4859, 4859, 'accessories/wearable_items/_exp08/dragon_armor/chain_blue/hands', 1096), + (4860, 4860, 'accessories/wearable_items/_exp08/dragon_armor/chain_blue/head', 1096), + (4861, 4861, 'accessories/wearable_items/_exp08/dragon_armor/chain_blue/legs', 1096), + (4862, 4862, 'accessories/wearable_items/_exp08/dragon_armor/chain_blue/legs_noskirt', 1096), + (4863, 4863, 'accessories/wearable_items/_exp08/dragon_armor/chain_blue/shoulders', 1096), + (4864, 4864, 'accessories/wearable_items/_exp08/dragon_armor/chain_blue/shoulders_epic', 1096), + (4865, 4865, 'accessories/wearable_items/_exp08/dragon_armor/chain_brown/skirt', 1096), + (4866, 4866, 'accessories/wearable_items/_exp08/dragon_armor/chain_brown/chest', 1096), + (4867, 4867, 'accessories/wearable_items/_exp08/dragon_armor/chain_brown/feet', 1096), + (4868, 4868, 'accessories/wearable_items/_exp08/dragon_armor/chain_brown/forearms', 1096), + (4869, 4869, 'accessories/wearable_items/_exp08/dragon_armor/chain_brown/hands', 1096), + (4870, 4870, 'accessories/wearable_items/_exp08/dragon_armor/chain_brown/head', 1096), + (4871, 4871, 'accessories/wearable_items/_exp08/dragon_armor/chain_brown/legs', 1096), + (4872, 4872, 'accessories/wearable_items/_exp08/dragon_armor/chain_brown/legs_noskirt', 1096), + (4873, 4873, 'accessories/wearable_items/_exp08/dragon_armor/chain_brown/shoulders', 1096), + (4874, 4874, 'accessories/wearable_items/_exp08/dragon_armor/chain_brown/shoulders_epic', 1096), + (4875, 4875, 'accessories/wearable_items/_exp08/dragon_armor/chain_green/skirt', 1096), + (4876, 4876, 'accessories/wearable_items/_exp08/dragon_armor/chain_green/chest', 1096), + (4877, 4877, 'accessories/wearable_items/_exp08/dragon_armor/chain_green/feet', 1096), + (4878, 4878, 'accessories/wearable_items/_exp08/dragon_armor/chain_green/forearms', 1096), + (4879, 4879, 'accessories/wearable_items/_exp08/dragon_armor/chain_green/hands', 1096), + (4880, 4880, 'accessories/wearable_items/_exp08/dragon_armor/chain_green/head', 1096), + (4881, 4881, 'accessories/wearable_items/_exp08/dragon_armor/chain_green/legs', 1096), + (4882, 4882, 'accessories/wearable_items/_exp08/dragon_armor/chain_green/legs_noskirt', 1096), + (4883, 4883, 'accessories/wearable_items/_exp08/dragon_armor/chain_green/shoulders', 1096), + (4884, 4884, 'accessories/wearable_items/_exp08/dragon_armor/chain_green/shoulders_epic', 1096), + (4885, 4885, 'accessories/wearable_items/_exp08/dragon_armor/chain_red/skirt', 1096), + (4886, 4886, 'accessories/wearable_items/_exp08/dragon_armor/chain_red/chest', 1096), + (4887, 4887, 'accessories/wearable_items/_exp08/dragon_armor/chain_red/feet', 1096), + (4888, 4888, 'accessories/wearable_items/_exp08/dragon_armor/chain_red/forearms', 1096), + (4889, 4889, 'accessories/wearable_items/_exp08/dragon_armor/chain_red/hands', 1096), + (4890, 4890, 'accessories/wearable_items/_exp08/dragon_armor/chain_red/head', 1096), + (4891, 4891, 'accessories/wearable_items/_exp08/dragon_armor/chain_red/legs', 1096), + (4892, 4892, 'accessories/wearable_items/_exp08/dragon_armor/chain_red/legs_noskirt', 1096), + (4893, 4893, 'accessories/wearable_items/_exp08/dragon_armor/chain_red/shoulders', 1096), + (4894, 4894, '_exp01/zones/animated_objects/djn_mirror_translocation', 0), + (4895, 4895, '_exp01/zones/animated_objects/djn_mirror_translocation_base', 0), + (4896, 4896, 'accessories/wieldable_items/weapons/hammer/mace_obsidian_edged/mace_obsidian_edged_plain', 0), + (4897, 4897, '_exp01/characters/monsters/dragon_siyamak', 0), + (4898, 4898, 'staticobjects/feerrott_epic02_froglok/firefly_particles', 0), + (4899, 4899, 'staticobjects/feerrott_epic02_froglok/froglok_totem', 0), + (4900, 4900, 'staticobjects/feerrott_epic02_froglok/ogre_pillar_1', 0), + (4901, 4901, 'staticobjects/feerrott_epic02_froglok/ogre_tower', 0), + (4902, 4902, 'staticobjects/feerrott_epic02_froglok/ogre_wall_1', 0), + (4903, 4903, 'staticobjects/feerrott_epic02_froglok/ogre_wall_2', 0), + (4904, 4904, 'staticobjects/feerrott_epic02_froglok/ogre_wall_3', 0), + (4905, 4905, 'staticobjects/feerrott_epic02_froglok/ogre_wall_low_1', 0), + (4906, 4906, 'staticobjects/feerrott_epic02_froglok/ogre_wall_low_2', 0), + (4907, 4907, 'staticobjects/feerrott_epic02_froglok/ogre_wall_low_3', 0), + (4908, 4908, 'staticobjects/feerrott_epic02_froglok/ogre_wall_low_4', 0), + (4909, 4909, 'staticobjects/feerrott_epic02_froglok/ogre_wall_low_5', 0), + (4910, 4910, 'staticobjects/feerrott_epic02_froglok/tent_large', 0), + (4911, 4911, 'staticobjects/feerrott_epic02_froglok/tent_small', 0), + (4912, 4912, 'staticobjects/feerrott_epic02_froglok/tiki_torch', 0), + (4913, 4913, 'staticobjects/feerrott_epic02_froglok/wall_large_1', 0), + (4914, 4914, 'accessories/wieldable_items/weapons/great_spear/scythe/scythe_plain', 0), + (4915, 4915, 'staticobjects/relics/nekcas_eviltrinket_brokentablet001', 0), + (4916, 4916, '_exp01/characters/monsters/dragon_barakah', 0), + (4917, 4917, '_exp01/characters/tool_users/dervish_male_peasant', 0), + (4918, 4918, '_exp01/characters/tool_users/giant_sand_wizard_beard', 0), + (4919, 4919, '_exp01/characters/tool_users/giant_sand_wizard_combo', 0), + (4920, 4920, '_exp01/characters/tool_users/giant_sand_wizard_mustache', 0), + (4921, 4921, '_exp01/characters/tool_users/giant_sand_wizard_plain', 0), + (4922, 4922, '_exp01/characters/tool_users/dervish_male_peasant_beard', 0), + (4923, 4923, 'staticobjects/ap2/terraporter', 0), + (4924, 4924, 'staticobjects/tables/floor_table_troll_large', 0), + (4925, 4925, 'accessories/wieldable_items/weapons/hammer/mace_eagle_prongs/mace_eagle_prongs_plain', 0), + (4926, 4926, 'staticobjects/brazier/floor_brazier_gnoll', 0), + (4927, 4927, '_exp01/characters/tool_users/dervish_female_peasant', 0), + (4928, 4928, 'accessories/wearable_items/magus/common/high/hood', 0), + (4929, 4929, 'accessories/wearable_items/_exp08/dragon_armor/chain_red/shoulders_epic', 1096), + (4930, 4930, 'accessories/wearable_items/magus/rare/high/hood', 0), + (4931, 4931, 'staticobjects/ap2/gnoll_totem', 0), + (4932, 4932, 'staticobjects/ap2/gnoll_wall_teeth1', 0), + (4933, 4933, 'staticobjects/ap2/gnoll_wall_teeth2', 0), + (4934, 4934, 'staticobjects/ap2/gnoll_wall_teeth3', 0), + (4935, 4935, 'staticobjects/chairs/gnoll_chair', 0), + (4936, 4936, 'ec/pc/froglok/froglok_female_toadplain', 0), + (4937, 4937, 'ec/pc/froglok/froglok_female_toad', 0), + (4938, 4938, 'ec/pc/froglok/froglok_female_rainbow', 0), + (4939, 4939, 'ec/pc/froglok/froglok_female_leopard', 0), + (4940, 4940, 'ec/pc/froglok/froglok_female_blackgoo', 0), + (4941, 4941, 'ec/pc/froglok/froglok_female_blackglove', 0), + (4942, 4942, 'ec/pc/froglok/froglok_female_black2', 0), + (4943, 4943, 'ec/pc/froglok/froglok_female_black1', 0), + (4944, 4944, 'ec/pc/froglok/froglok_female_albino', 0), + (4945, 4945, '_exp01/characters/tool_users/orc_desert_worker', 0), + (4946, 4946, 'accessories/wearable_items/ghost/ghost_plate/chest', 0), + (4947, 4947, 'accessories/wearable_items/ghost/ghost_plate/legs', 0), + (4948, 4948, 'accessories/wearable_items/ghost/ghost_plate/feet', 0), + (4949, 4949, 'accessories/wearable_items/ghost/ghost_plate/forearms', 0), + (4950, 4950, 'accessories/wearable_items/ghost/ghost_plate/hands', 0), + (4951, 4951, 'accessories/wearable_items/ghost/ghost_plate/head', 0), + (4952, 4952, 'accessories/wearable_items/ghost/ghost_plate/shoulders', 0), + (4953, 4953, 'ec/pc/froglok/froglok_male_zombie', 0), + (4954, 4954, 'accessories/wearable_items/ghost/ghost_mage/arms', 0), + (4955, 4955, 'accessories/wearable_items/ghost/ghost_mage/chest', 0), + (4956, 4956, 'accessories/wearable_items/ghost/ghost_mage/skirt', 0), + (4957, 4957, 'accessories/wearable_items/ghost/ghost_robes/chest', 0), + (4958, 4958, 'accessories/wearable_items/ghost/ghost_robes/pants', 0), + (4959, 4959, 'accessories/wearable_items/ghost/ghost_robes/skirt', 0), + (4960, 4960, 'accessories/wearable_items/magus/robes/dragon_ornate/hood', 0), + (4961, 4961, 'accessories/wieldable_items/weapons/dagger/embalming_blade/embalming_blade_plain', 0), + (4962, 4962, 'accessories/wieldable_items/weapons/axe/ratskull_hatchet/ratskull_hatchet_plain', 0), + (4963, 4963, 'ec/pc/barbarian/soga_barbarian_female', 0), + (4964, 4964, 'ec/pc/barbarian/soga_barbarian_male', 0), + (4965, 4965, 'ec/pc/darkelf/soga_darkelf_female', 0), + (4966, 4966, 'ec/pc/darkelf/soga_darkelf_male', 0), + (4967, 4967, 'ec/pc/dwarf/soga_dwarf_female', 0), + (4968, 4968, 'ec/pc/dwarf/soga_dwarf_male', 0), + (4969, 4969, 'ec/pc/erudite/soga_erudite_female', 0), + (4970, 4970, 'ec/pc/erudite/soga_erudite_male', 0), + (4971, 4971, 'ec/pc/gnome/soga_gnome_female', 0), + (4972, 4972, 'ec/pc/gnome/soga_gnome_male', 0), + (4973, 4973, 'ec/pc/halfelf/soga_halfelf_female', 0), + (4974, 4974, 'ec/pc/halfelf/soga_halfelf_female_scar01', 0), + (4975, 4975, 'ec/pc/halfelf/soga_halfelf_female_scar02', 0), + (4976, 4976, 'ec/pc/halfelf/soga_halfelf_female_scar03', 0), + (4977, 4977, 'ec/pc/halfelf/soga_halfelf_female_scar04', 0), + (4978, 4978, 'ec/pc/halfelf/soga_halfelf_female_scar05', 0), + (4979, 4979, 'ec/pc/halfelf/soga_halfelf_male', 0), + (4980, 4980, 'ec/pc/halfelf/soga_halfelf_male_scar01', 0), + (4981, 4981, 'ec/pc/halfelf/soga_halfelf_male_scar02', 0), + (4982, 4982, 'ec/pc/halfelf/soga_halfelf_male_scar03', 0), + (4983, 4983, 'ec/pc/halfelf/soga_halfelf_male_scar04', 0), + (4984, 4984, 'ec/pc/halfelf/soga_halfelf_male_scar05', 0), + (4985, 4985, 'ec/pc/halfling/soga_halfling_female', 0), + (4986, 4986, 'ec/pc/halfling/soga_halfling_male', 0), + (4987, 4987, 'ec/pc/highelf/soga_highelf_female', 0), + (4988, 4988, 'ec/pc/highelf/soga_highelf_male', 0), + (4989, 4989, 'ec/pc/human/soga_human_female', 0), + (4990, 4990, 'ec/pc/human/soga_human_male', 0), + (4991, 4991, 'ec/pc/woodelf/soga_woodelf_female', 0), + (4992, 4992, 'ec/pc/woodelf/soga_woodelf_male', 0), + (4993, 4993, 'ec/pc/ogre/soga_ogre_female', 0), + (4994, 4994, 'ec/pc/ogre/soga_ogre_male', 0), + (4995, 4995, 'staticobjects/ladders/orc_tilted_ladder01', 0), + (4996, 4996, 'accessories/wearable_items/_exp08/dragon_armor/chain_shadow/skirt', 1096), + (4997, 4997, 'staticobjects/doors/evefrost_snow_large_door', 0), + (4998, 4998, 'staticobjects/doorways/evefrost_snow_large_archway', 0), + (4999, 4999, '_exp01/characters/tool_users/dervish_male_guard', 0), + (5000, 5000, '_exp01/characters/tool_users/specter_phantom', 0), + (5001, 5001, '_exp01/characters/tool_users/specter_phantom_ghost', 0), + (5002, 5002, '_exp01/characters/tool_users/specter_skeleton', 0), + (5003, 5003, '_exp01/characters/tool_users/specter_skeleton_ghost', 0), + (5004, 5004, '_exp01/characters/monsters/dragon_barakah_flying', 0), + (5005, 5005, '_exp01/characters/monsters/dragon_siyamak_flying', 0), + (5006, 5006, '_exp01/characters/monsters/monkey', 0), + (5007, 5007, 'staticobjects/land/icefloat', 0), + (5008, 5008, 'animatedobjects/barrels/barrel_plainlarge', 0), + (5009, 5009, 'accessories/wieldable_items/weapons/great_spear/scythe_dragon_tooth/scythe_dragon_tooth_plain', 0), + (5010, 5010, '_exp01/characters/tool_users/dervish_female_guard', 0), + (5011, 5011, 'animatedobjects/walls/perm_breakable_wall_plain_small', 0), + (5012, 5012, 'animatedobjects/walls/perm_breakable_wall_plain', 0), + (5013, 5013, 'staticobjects/statues/floor_statue_nagafen', 0), + (5014, 5014, 'staticobjects/rocks/perm_boulder01', 0), + (5015, 5015, 'staticobjects/dueling_banner/dueling_banner', 0), + (5016, 5016, '_exp01/characters/tool_users/cyclops', 0), + (5017, 5017, '_exp01/characters/tool_users/cyclops_horn1', 0), + (5018, 5018, '_exp01/characters/tool_users/cyclops_horn2', 0), + (5019, 5019, 'ap02/gnoll_dobermann', 0), + (5020, 5020, 'ap02/rock_crawler', 0), + (5021, 5021, '_exp01/characters/tool_users/orc_desert_worker_bald', 0), + (5022, 5022, '_exp01/characters/tool_users/orc_desert_warrior_bald', 0), + (5023, 5023, '_exp01/characters/tool_users/orc_desert_warrior_bald_round', 0), + (5024, 5024, '_exp01/characters/tool_users/orc_desert_warrior_bald_square', 0), + (5025, 5025, '_exp01/characters/tool_users/orc_desert_warrior_helm', 0), + (5026, 5026, '_exp01/characters/tool_users/orc_desert_warrior_helm_round', 0), + (5027, 5027, '_exp01/characters/tool_users/orc_desert_warrior_helm_square', 0), + (5028, 5028, 'ec/pc/barbarian/soga_barbarian_female_tattoo01', 0), + (5029, 5029, 'ec/pc/barbarian/soga_barbarian_female_tattoo02', 0), + (5030, 5030, 'ec/pc/barbarian/soga_barbarian_female_tattoo03', 0), + (5031, 5031, 'ec/pc/barbarian/soga_barbarian_female_tattoo04', 0), + (5032, 5032, 'ec/pc/barbarian/soga_barbarian_female_tattoo05', 0), + (5033, 5033, 'ec/pc/barbarian/soga_barbarian_male_tattoo01', 0), + (5034, 5034, 'ec/pc/barbarian/soga_barbarian_male_tattoo02', 0), + (5035, 5035, 'ec/pc/barbarian/soga_barbarian_male_tattoo03', 0), + (5036, 5036, 'ec/pc/barbarian/soga_barbarian_male_tattoo04', 0), + (5037, 5037, 'ec/pc/barbarian/soga_barbarian_male_tattoo05', 0), + (5038, 5038, 'ec/pc/dwarf/soga_dwarf_female_tattoo01', 0), + (5039, 5039, 'ec/pc/dwarf/soga_dwarf_female_tattoo02', 0), + (5040, 5040, 'ec/pc/dwarf/soga_dwarf_female_tattoo03', 0), + (5041, 5041, 'ec/pc/dwarf/soga_dwarf_female_tattoo04', 0), + (5042, 5042, 'ec/pc/dwarf/soga_dwarf_female_tattoo05', 0), + (5043, 5043, 'ec/pc/dwarf/soga_dwarf_male_tattoo01', 0), + (5044, 5044, 'ec/pc/dwarf/soga_dwarf_male_tattoo02', 0), + (5045, 5045, 'ec/pc/dwarf/soga_dwarf_male_tattoo03', 0), + (5046, 5046, 'ec/pc/dwarf/soga_dwarf_male_tattoo04', 0), + (5047, 5047, 'ec/pc/dwarf/soga_dwarf_male_tattoo05', 0), + (5048, 5048, 'ec/pc/dwarf/soga_dwarf_male_tattoo06', 0), + (5049, 5049, 'ec/pc/erudite/soga_erudite_female_tattooevil01', 0), + (5050, 5050, 'ec/pc/erudite/soga_erudite_female_tattooevil02', 0), + (5051, 5051, 'ec/pc/erudite/soga_erudite_female_tattooevil03', 0), + (5052, 5052, 'ec/pc/erudite/soga_erudite_female_tattooevil04', 0), + (5053, 5053, 'ec/pc/erudite/soga_erudite_female_tattooevil05', 0), + (5054, 5054, 'ec/pc/erudite/soga_erudite_female_tattoogood01', 0), + (5055, 5055, 'ec/pc/erudite/soga_erudite_female_tattoogood02', 0), + (5056, 5056, 'ec/pc/erudite/soga_erudite_female_tattoogood03', 0), + (5057, 5057, 'ec/pc/erudite/soga_erudite_female_tattoogood04', 0), + (5058, 5058, 'ec/pc/erudite/soga_erudite_female_tattoogood05', 0), + (5059, 5059, 'ec/pc/erudite/soga_erudite_male_tattooevil01', 0), + (5060, 5060, 'ec/pc/erudite/soga_erudite_male_tattooevil02', 0), + (5061, 5061, 'ec/pc/erudite/soga_erudite_male_tattooevil03', 0), + (5062, 5062, 'ec/pc/erudite/soga_erudite_male_tattooevil04', 0), + (5063, 5063, 'ec/pc/erudite/soga_erudite_male_tattooevil05', 0), + (5064, 5064, 'ec/pc/erudite/soga_erudite_male_tattoogood01', 0), + (5065, 5065, 'ec/pc/erudite/soga_erudite_male_tattoogood02', 0), + (5066, 5066, 'ec/pc/erudite/soga_erudite_male_tattoogood03', 0), + (5067, 5067, 'ec/pc/erudite/soga_erudite_male_tattoogood04', 0), + (5068, 5068, 'ec/pc/erudite/soga_erudite_male_tattoogood05', 0), + (5069, 5069, 'ec/pc/woodelf/soga_woodelf_female_tattoo01', 0), + (5070, 5070, 'ec/pc/woodelf/soga_woodelf_female_tattoo02', 0), + (5071, 5071, 'ec/pc/woodelf/soga_woodelf_female_tattoo03', 0), + (5072, 5072, 'ec/pc/woodelf/soga_woodelf_female_tattoo04', 0), + (5073, 5073, 'ec/pc/woodelf/soga_woodelf_female_tattoo05', 0), + (5074, 5074, 'ec/pc/woodelf/soga_woodelf_female_tattoo06', 0), + (5075, 5075, 'ec/pc/woodelf/soga_woodelf_female_tattoo07', 0), + (5076, 5076, 'ec/pc/woodelf/soga_woodelf_female_tattoo08', 0), + (5077, 5077, 'ec/pc/woodelf/soga_woodelf_male_tattoo01', 0), + (5078, 5078, 'ec/pc/woodelf/soga_woodelf_male_tattoo02', 0), + (5079, 5079, 'ec/pc/woodelf/soga_woodelf_male_tattoo03', 0), + (5080, 5080, 'ec/pc/woodelf/soga_woodelf_male_tattoo04', 0), + (5081, 5081, 'ec/pc/woodelf/soga_woodelf_male_tattoo05', 0), + (5082, 5082, 'ec/pc/woodelf/soga_woodelf_male_tattoo06', 0), + (5083, 5083, 'ec/pc/woodelf/soga_woodelf_male_tattoo07', 0), + (5084, 5084, 'ec/pc/woodelf/soga_woodelf_male_tattoo08', 0), + (5085, 5085, '_exp01/zones/dungeons/living_tombs/lt_rm02/lt_rm02_fountain01_symbol', 0), + (5086, 5086, 'staticobjects/wood/wood_plank03', 0), + (5087, 5087, 'staticobjects/ap2/gnoll_crystal_wheelbarrow', 0), + (5088, 5088, '_exp01/zones/regions/sinking_sands/ss_objects/ss_rocks/ss_rocks_group03', 0), + (5089, 5089, 'accessories/wearable_items/_exp08/dragon_armor/chain_shadow/chest', 1096), + (5090, 5090, '_exp01/zones/regions/pillars_of_flame/pf_objects/pf_rock/pf_rock_medium05', 0), + (5091, 5091, 'accessories/wearable_items/_exp08/dragon_armor/chain_shadow/feet', 1096), + (5092, 5092, 'accessories/wearable_items/_exp08/dragon_armor/chain_shadow/forearms', 1096), + (5093, 5093, 'accessories/wearable_items/_exp08/dragon_armor/chain_shadow/hands', 1096), + (5094, 5094, '_exp01/zones/regions/pillars_of_flame/pf_objects/pf_rock/pf_rock_medium04', 0), + (5095, 5095, 'ap02/hellboar', 0), + (5096, 5096, 'ap02/fungusman', 0), + (5097, 5097, 'accessories/wearable_items/_exp08/dragon_armor/chain_shadow/head', 1096), + (5098, 5098, 'ap02/gnoll_overlord', 0), + (5099, 5099, '_exp01/zones/animated_objects/cr_vase_breakable', 0), + (5100, 5100, '_exp01/zones/animated_objects/md_vase_breakable', 0), + (5101, 5101, '_exp01/zones/animated_objects/pf_vase_breakable', 0), + (5102, 5102, '_exp01/zones/animated_objects/sc_vase_breakable', 0), + (5103, 5103, '_exp01/zones/animated_objects/ss_vase_breakable', 0), + (5104, 5104, 'accessories/wearable_items/_exp08/dragon_armor/chain_shadow/legs', 1096), + (5105, 5105, '_exp01/zones/regions/sinking_sands/ss_objects/ss_rocks/ss_rocks_group01', 0), + (5106, 5106, '_exp01/zones/regions/sinking_sands/ss_objects/ss_rocks/ss_rocks_group02', 0), + (5107, 5107, '_exp01/characters/tool_users/orc_desert_shaman', 0), + (5108, 5108, '_exp01/characters/tool_users/orc_desert_shaman_bald', 0), + (5109, 5109, 'accessories/wearable_items/_exp08/dragon_armor/chain_shadow/legs_noskirt', 1096), + (5110, 5110, 'accessories/wearable_items/_exp08/dragon_armor/chain_shadow/shoulders', 1096), + (5111, 5111, 'accessories/wearable_items/_exp08/dragon_armor/chain_shadow/shoulders_epic', 1096), + (5112, 5112, 'accessories/wearable_items/_exp08/dragon_armor/chain-scale_blue/skirt', 1096), + (5113, 5113, 'accessories/wearable_items/_exp08/dragon_armor/chain-scale_blue/chest', 1096), + (5114, 5114, 'accessories/wearable_items/_exp08/dragon_armor/chain-scale_blue/feet', 1096), + (5115, 5115, 'accessories/wearable_items/_exp08/dragon_armor/chain-scale_blue/forearms', 1096), + (5116, 5116, 'accessories/wearable_items/_exp08/dragon_armor/chain-scale_blue/hands', 1096), + (5117, 5117, 'accessories/wearable_items/_exp08/dragon_armor/chain-scale_blue/head', 1096), + (5118, 5118, '_exp01/characters/tool_users/cyclops_berserker_heavy', 0), + (5119, 5119, '_exp01/characters/tool_users/cyclops_berserker_light', 0), + (5120, 5120, '_exp01/characters/tool_users/cyclops_berserker_medium', 0), + (5121, 5121, 'staticobjects/staff/sorcerers_staff001_ornate_upright', 0), + (5122, 5122, 'accessories/wearable_items/_exp08/dragon_armor/chain-scale_blue/legs', 1096), + (5123, 5123, 'ap02/gnoll_overlord_armored', 0), + (5124, 5124, 'ap02/gnoll_dobermann_ghost', 0), + (5125, 5125, 'ap02/gnoll_overlord_armored_ghost', 0), + (5126, 5126, 'ap02/gnoll_overlord_ghost', 0), + (5127, 5127, '_exp01/zones/objects/mirrors/djin_mirror_teleporter01', 0), + (5128, 5128, 'staticobjects/interiors/scenes/dungeons/adv02/objects/adv02_debris001', 0), + (5129, 5129, 'accessories/wieldable_items/weapons/dagger/dagger/dpo_housing/dagger001_plain_upright', 0), + (5130, 5130, '_exp01/characters/tool_users/mummy', 0), + (5131, 5131, '_exp01/characters/tool_users/mummy_pharoh1', 0), + (5132, 5132, '_exp01/characters/tool_users/mummy_pharoh2', 0), + (5133, 5133, '_exp01/characters/tool_users/mummy_priest', 0), + (5134, 5134, '_exp01/characters/tool_users/mummy_soldier', 0), + (5135, 5135, '_exp01/characters/tool_users/mummy_zombie', 0), + (5136, 5136, '_exp01/characters/tool_users/mummy_zombie_pharoh1', 0), + (5137, 5137, '_exp01/characters/tool_users/mummy_zombie_pharoh2', 0), + (5138, 5138, '_exp01/characters/tool_users/mummy_zombie_priest', 0), + (5139, 5139, '_exp01/characters/tool_users/mummy_zombie_soldier', 0), + (5140, 5140, 'staticobjects/cobwebs/dpo_spiderweb_corner01', 0), + (5141, 5141, 'staticobjects/cobwebs/dpo_spiderweb_large01', 0), + (5142, 5142, 'staticobjects/cobwebs/dpo_spiderweb_large02', 0), + (5143, 5143, 'staticobjects/cobwebs/dpo_spiderweb_small01', 0), + (5144, 5144, 'staticobjects/cobwebs/dpo_spiderweb_small02', 0), + (5145, 5145, 'accessories/wearable_items/_exp08/dragon_armor/chain-scale_blue/legs_noskirt', 1096), + (5146, 5146, '_exp01/zones/regions/pillars_of_flame/pf_objects/pf_rock/pf_rock_small01', 0), + (5147, 5147, 'accessories/wearable_items/_exp08/dragon_armor/chain-scale_blue/shoulders', 1096), + (5148, 5148, '_exp01/zones/objects/containers/drv_container_merch_basketshort01', 0), + (5149, 5149, '_exp01/zones/objects/containers/ss_crate_small01', 0), + (5150, 5150, '_exp01/zones/flora/cacti/ss_flora_cacti_med01', 0), + (5151, 5151, '_exp01/zones/flora/cacti/ss_flora_cacti_multi01', 0), + (5152, 5152, '_exp01/zones/flora/cacti/ss_flora_cacti_round01', 0), + (5153, 5153, 'accessories/wearable_items/_exp08/dragon_armor/chain-scale_blue/shoulders_epic', 1096), + (5154, 5154, 'accessories/wearable_items/_exp08/dragon_armor/chain-scale_green/skirt', 1096), + (5155, 5155, '_exp01/zones/objects/tents/drv_tent_merchant_blue', 0), + (5156, 5156, '_exp01/zones/objects/tents/drv_tent_merchant_orange', 0), + (5157, 5157, '_exp01/zones/objects/tents/drv_tent_merchant_red', 0), + (5158, 5158, '_exp01/zones/objects/tents/drv_tent_merchant_teal', 0), + (5159, 5159, '_exp01/zones/objects/tents/pf_tent_monk01', 0), + (5160, 5160, '_exp01/zones/objects/tents/sc_tent_bard01', 0), + (5161, 5161, '_exp01/zones/objects/tents/ss_tent_nomad_double01', 0), + (5162, 5162, '_exp01/zones/objects/tents/pf_tent/pf_tent_crude_nomad01', 0), + (5163, 5163, '_exp01/zones/objects/tents/pf_tent/pf_tent_crude_nomad02', 0), + (5164, 5164, '_exp01/zones/objects/tents/pf_tent/pf_tent_purple_nomad01', 0), + (5165, 5165, '_exp01/zones/objects/buckets/cr_bucket_orc_full_meat', 0), + (5166, 5166, '_exp01/zones/objects/butcher_tools/cr_meat_hanger_orc', 0), + (5167, 5167, '_exp01/zones/objects/chairs/cr_stool_orc_wood01', 0), + (5168, 5168, '_exp01/zones/objects/firepits/cr_firepit_orc01', 0), + (5169, 5169, '_exp01/zones/objects/firepits/cr_signal_fire', 0), + (5170, 5170, '_exp01/zones/objects/mats/cr_straw_mat_worn01', 0), + (5171, 5171, '_exp01/zones/objects/mats/cr_straw_mat_worn02', 0), + (5172, 5172, '_exp01/zones/objects/rubbish/cr_orc_rubbishpile01', 0), + (5173, 5173, '_exp01/zones/objects/rubbish/cr_orc_rubbishpile02', 0), + (5174, 5174, '_exp01/zones/objects/eggs/pf_scorpion_egg_group', 0), + (5175, 5175, '_exp01/zones/objects/eggs/pf_scorpion_egg_group_broken', 0), + (5176, 5176, '_exp01/characters/tool_users/cyclops_shaman1', 0), + (5177, 5177, '_exp01/characters/tool_users/cyclops_shaman1_tattoo1', 0), + (5178, 5178, '_exp01/characters/tool_users/cyclops_shaman1_tattoo2', 0), + (5179, 5179, '_exp01/characters/tool_users/cyclops_shaman1_tattoo3', 0), + (5180, 5180, '_exp01/characters/tool_users/cyclops_shaman2', 0), + (5181, 5181, '_exp01/characters/tool_users/cyclops_shaman2_tattoo1', 0), + (5182, 5182, '_exp01/characters/tool_users/cyclops_shaman2_tattoo2', 0), + (5183, 5183, '_exp01/characters/tool_users/cyclops_shaman2_tattoo3', 0), + (5184, 5184, '_exp01/characters/tool_users/cyclops_shaman3', 0), + (5185, 5185, '_exp01/characters/tool_users/cyclops_shaman3_tattoo1', 0), + (5186, 5186, '_exp01/characters/tool_users/cyclops_shaman3_tattoo2', 0), + (5187, 5187, '_exp01/characters/tool_users/cyclops_shaman3_tattoo3', 0), + (5188, 5188, '_exp01/zones/objects/musical_instruments/djn_music_mandolin01', 0), + (5189, 5189, '_exp01/zones/objects/musical_instruments/djn_music_harp01', 0), + (5190, 5190, '_exp01/characters/tool_users/sand_goblin_worker', 0), + (5191, 5191, '_exp01/characters/monsters/sphinx', 0), + (5192, 5192, '_exp01/characters/monsters/sphinx_crio', 0), + (5193, 5193, '_exp01/characters/monsters/sphinx_hieraco', 0), + (5194, 5194, '_exp01/characters/monsters/sphinx_zombie', 0), + (5195, 5195, '_exp01/characters/tool_users/gnolll_anubis', 0), + (5196, 5196, '_exp01/characters/tool_users/gnolll_anubis_mummy', 0), + (5197, 5197, '_exp01/zones/objects/doorknocker/md_doorknocker01', 0), + (5198, 5198, '_exp01/zones/objects/eggs/pf_falconeggs_broken', 0), + (5199, 5199, '_exp01/zones/objects/eggs/pf_falconeggs_mixed', 0), + (5200, 5200, '_exp01/zones/objects/eggs/pf_falconeggs_unbroken', 0), + (5201, 5201, '_exp01/zones/objects/nests/pf_nest_harpy01', 0), + (5202, 5202, '_exp01/zones/objects/climbables/md_p20_lattice_large01', 0), + (5203, 5203, '_exp01/zones/objects/climbables/md_p20_oh_med01', 0), + (5204, 5204, '_exp01/zones/objects/climbables/md_p20_oh_med02', 0), + (5205, 5205, '_exp01/zones/objects/climbables/md_p20_oh_med03', 0), + (5206, 5206, '_exp01/zones/objects/climbables/md_p20_oh_small01', 0), + (5207, 5207, '_exp01/zones/objects/climbables/md_p20_plank_large01', 0), + (5208, 5208, '_exp01/zones/objects/climbables/md_p20_plank_small01', 0), + (5209, 5209, 'staticobjects/gnomish_devices/cog_table', 0), + (5210, 5210, 'staticobjects/gnomish_devices/crank_machine', 0), + (5211, 5211, 'staticobjects/gnomish_devices/sproket_cluster', 0), + (5212, 5212, '_exp01/zones/objects/tower_banners/court_banner_blades', 0), + (5213, 5213, '_exp01/zones/objects/tower_banners/court_banner_dagger', 0), + (5214, 5214, '_exp01/zones/objects/tower_banners/court_banner_suncoin', 0), + (5215, 5215, '_exp01/zones/objects/tower_banners/court_banner_truth', 0), + (5216, 5216, '_exp01/characters/tool_users/minotaur_golden', 0), + (5217, 5217, '_exp01/characters/monsters/monkey_golden', 0), + (5218, 5218, '_exp01/characters/tool_users/sand_goblin_warrior', 0), + (5219, 5219, '_exp01/characters/monsters/harpy', 0), + (5220, 5220, '_exp01/zones/objects/pottery/drv_vase_ornate_porcelain_large02', 0), + (5221, 5221, '_exp01/zones/objects/training_items/drv_lashingboard', 0), + (5222, 5222, '_exp01/zones/objects/rugs/drv_rug_round01', 0), + (5223, 5223, '_exp01/zones/objects/rugs/drv_rug_square01', 0), + (5224, 5224, '_exp01/zones/objects/potted_plants/djn_pottedplant_palm01_small_blue', 0), + (5225, 5225, '_exp01/zones/objects/pillows/djn_pillow_floor_group01', 0), + (5226, 5226, '_exp01/zones/objects/urns/drv_urn_large02', 0), + (5227, 5227, '_exp01/zones/objects/urns/drv_urn_small01', 0), + (5228, 5228, '_exp01/zones/objects/urns/drv_urn_small02', 0), + (5229, 5229, '_exp01/characters/monsters/naga', 0), + (5230, 5230, '_exp01/characters/monsters/naga_guardian', 0), + (5231, 5231, '_exp01/characters/monsters/naga_mummy', 0), + (5232, 5232, '_exp01/characters/monsters/naga_zombie', 0), + (5233, 5233, '_exp01/characters/tool_users/genie_male', 0), + (5234, 5234, '_exp01/characters/tool_users/genie_female', 0), + (5235, 5235, '_exp01/characters/tool_users/genie_female_bluegold', 0), + (5236, 5236, '_exp01/characters/tool_users/genie_female_purplepink', 0), + (5237, 5237, '_exp01/characters/monsters/velociraptor', 0), + (5238, 5238, '_exp01/zones/objects/pillows/drv_pillow_seat_weights01', 0), + (5239, 5239, 'accessories/wearable_items/_exp08/dragon_armor/chain-scale_green/chest', 1096), + (5240, 5240, '_exp01/zones/objects/vases/djn_vase_gold02', 0), + (5241, 5241, '_exp01/zones/objects/vases/djn_vase_brass02', 0), + (5242, 5242, '_exp01/zones/objects/basins/djn_basin_water_goldbrass01', 0), + (5243, 5243, '_exp01/zones/objects/basins/djn_basin_water_steel01', 0), + (5244, 5244, '_exp01/zones/objects/urns/lt_urn01', 0), + (5245, 5245, '_exp01/zones/objects/pottery/drv_vase_ornate_large01', 0), + (5246, 5246, '_exp01/zones/objects/musical_instruments/djn_music_mandolin_broken01', 0), + (5247, 5247, '_exp01/zones/objects/roomdivider/drv_divider_ornate01', 0), + (5248, 5248, '_exp01/zones/dungeons/shimmering_citadel/objects/shim_obj_liftplatform01', 0), + (5249, 5249, '_exp01/characters/monsters/sabertooth', 0), + (5250, 5250, '_exp01/zones/objects/tables/drv_table_coffee_ornate01', 0), + (5251, 5251, '_exp01/zones/objects/tapestries/drv_tapestry_short01', 0), + (5252, 5252, '_exp01/zones/objects/tapestries/drv_tapestry_short02', 0), + (5253, 5253, '_exp01/zones/objects/tapestries/drv_tapestry_tall01', 0), + (5254, 5254, '_exp01/zones/objects/tapestries/drv_tapestry_tall02', 0), + (5255, 5255, '_exp01/zones/objects/chairs/drv_bench_brass_ornate01', 0), + (5256, 5256, '_exp01/zones/objects/chairs/drv_stool_wicker_plain01', 0), + (5257, 5257, '_exp01/zones/objects/pillows/drv_pillow_bench_pattern01', 0), + (5258, 5258, '_exp01/zones/objects/light_sources/drv_lightsource_int_lantern_ornate01', 0), + (5259, 5259, '_exp01/zones/objects/rugs/drv_rug_rect_palaceblue01', 0), + (5260, 5260, '_exp01/zones/objects/rugs/drv_rug_rect_palacered01', 0), + (5261, 5261, 'staticobjects/papers/floor_paper_human_written01_slightly_raised', 0), + (5262, 5262, '_exp01/characters/tool_users/dervish_male_noble', 0), + (5263, 5263, '_exp01/characters/tool_users/dervish_female_noble', 0), + (5264, 5264, '_exp01/zones/objects/orbs/drv_orb_gazing01', 0), + (5265, 5265, '_exp01/zones/objects/orbs/djn_orb_elevatorswitch01', 0), + (5266, 5266, '_exp01/zones/objects/arena/arena_flag_and_stand_blue01', 0), + (5267, 5267, '_exp01/zones/objects/arena/arena_flag_and_stand_red01', 0), + (5268, 5268, '_exp01/zones/objects/arena/arena_flag_captured_blue01', 0), + (5269, 5269, '_exp01/zones/objects/arena/arena_flag_captured_red01', 0), + (5270, 5270, '_exp01/zones/objects/arena/arena_flag_stand_base01', 0), + (5271, 5271, 'staticobjects/pictures/fprt_ph_painting_eq2exp01_horizontal01_poetsforestroom_l0', 0), + (5272, 5272, 'staticobjects/pictures/fprt_ph_painting_eq2exp01_horizontal02_palmcastledawn_l0', 0), + (5273, 5273, 'staticobjects/pictures/fprt_ph_painting_eq2exp01_horizontal03_palmatsunset_l0', 0), + (5274, 5274, 'staticobjects/pictures/fprt_ph_painting_eq2exp01_horizontal04_sinkingsandsfacade_l0', 0), + (5275, 5275, 'staticobjects/pictures/qey_ph_painting_eq2exp01_horizontal01_poetsforestroom_l0', 0), + (5276, 5276, 'staticobjects/pictures/qey_ph_painting_eq2exp01_horizontal02_palmcastledawn_l0', 0), + (5277, 5277, 'staticobjects/pictures/qey_ph_painting_eq2exp01_horizontal03_palmatsunset_l0', 0), + (5278, 5278, 'staticobjects/pictures/qey_ph_painting_eq2exp01_horizontal04_sinkingsandsfacade_l0', 0), + (5279, 5279, '_exp01/zones/objects/mats/pf_monk_mat02', 0), + (5280, 5280, '_exp01/zones/objects/musical_instruments/djn_music_harp_broken01', 0), + (5281, 5281, '_exp01/zones/objects/mats/pf_monk_mat01', 0), + (5282, 5282, '_exp01/zones/objects/vases/djn_vase_gold_broken01', 0), + (5283, 5283, '_exp01/zones/objects/pillows/drv_pillow_floor_square_worn01', 0), + (5284, 5284, '_exp01/zones/dungeons/poets_palace/objects/poet_hallofdoors_door01', 0), + (5285, 5285, '_exp01/zones/objects/beds/djn_bed_gold01', 0), + (5286, 5286, '_exp01/zones/objects/barrels/drv_barrel_large01', 0), + (5287, 5287, '_exp01/zones/objects/barrels/cr_barrel_orc_large01', 0), + (5288, 5288, '_exp01/zones/objects/barrels/drv_barrel_small01', 0), + (5289, 5289, '_exp01/zones/objects/barrels/drv_barrels_group01', 0), + (5290, 5290, '_exp01/zones/objects/barrels/drv_barrels_group02', 0), + (5291, 5291, '_exp01/zones/objects/barrels/drv_barrels_group03', 0), + (5292, 5292, '_exp01/zones/objects/barrels/pf_barrels_sandfang_group01', 0), + (5293, 5293, '_exp01/zones/objects/barrels/pf_barrels_sandfang_single01', 0), + (5294, 5294, '_exp01/zones/objects/barricades/pf_goblin_barricade_long01', 0), + (5295, 5295, '_exp01/zones/objects/carts/pf_cart_nomad01', 0), + (5296, 5296, '_exp01/zones/objects/chairs/cr_chair_orc_wood01', 0), + (5297, 5297, '_exp01/zones/objects/chairs/djn_chair_artiststool_brass01', 0), + (5298, 5298, '_exp01/zones/objects/chairs/djn_chair_artiststool_steel01', 0), + (5299, 5299, '_exp01/zones/objects/chairs/djn_chair_high_brass01', 0), + (5300, 5300, '_exp01/zones/objects/chairs/djn_chair_high_gold01', 0), + (5301, 5301, '_exp01/zones/objects/chairs/djn_chair_high_platinum01', 0), + (5302, 5302, '_exp01/zones/objects/chairs/drv_bench_wicker_plain01', 0), + (5303, 5303, '_exp01/zones/objects/chairs/drv_bench_wood_ornate01', 0), + (5304, 5304, '_exp01/zones/objects/chairs/drv_chair_sultan_ornate01', 0), + (5305, 5305, '_exp01/zones/objects/chairs/drv_chair_wood_octagonal01', 0), + (5306, 5306, '_exp01/zones/objects/chairs/drv_stool_brass_ornate01', 0), + (5307, 5307, '_exp01/zones/objects/chests/cr_chest_orc_closed01', 0), + (5308, 5308, '_exp01/zones/objects/chests/cr_treasurechest_orc01', 0), + (5309, 5309, '_exp01/zones/objects/chests/cr_treasurechest_orc_open01', 0), + (5310, 5310, '_exp01/zones/objects/chests/drv_chest_ornate02', 0), + (5311, 5311, '_exp01/zones/objects/chests/drv_chest_wood01', 0), + (5312, 5312, '_exp01/zones/objects/chests/drv_chest_wood02', 0), + (5313, 5313, '_exp01/zones/objects/containers/drv_container_merch_basketlong_open01', 0), + (5314, 5314, '_exp01/zones/objects/containers/drv_container_merch_basketshort_open01', 0), + (5315, 5315, '_exp01/zones/objects/containers/drv_container_merch_basketshort_open02', 0), + (5316, 5316, '_exp01/zones/objects/containers/drv_container_merch_bowl01', 0), + (5317, 5317, '_exp01/zones/objects/containers/drv_container_merch_bowl02', 0), + (5318, 5318, '_exp01/zones/objects/firepits/cr_firepit_orc_withutensils01', 0), + (5319, 5319, '_exp01/zones/objects/incense_burners/djn_genielamp_gold01', 0), + (5320, 5320, '_exp01/zones/objects/incense_burners/djn_incenseburner_brass01', 0), + (5321, 5321, '_exp01/zones/objects/incense_burners/djn_genielamp_rusty01', 0), + (5322, 5322, '_exp01/zones/objects/incense_burners/djn_incenseburner_gold01', 0), + (5323, 5323, '_exp01/zones/objects/kegs/drv_keg_large01', 0), + (5324, 5324, '_exp01/zones/objects/kegs/drv_keg_small01', 0), + (5325, 5325, '_exp01/zones/objects/kegs/drv_kegstand01', 0), + (5326, 5326, '_exp01/zones/objects/kegs/drv_kegstand_base01', 0), + (5327, 5327, '_exp01/zones/objects/kegs/drv_kegstand_double01', 0), + (5328, 5328, '_exp01/zones/objects/kegs/drv_kegstand_keg01', 0), + (5329, 5329, '_exp01/zones/objects/kegs/drv_kegstand_keg01_swinging', 0), + (5330, 5330, '_exp01/zones/objects/light_sources/cr_lightsource_orc_torch_ornate01', 0), + (5331, 5331, '_exp01/zones/objects/light_sources/drv_lightsource_candles_group01', 0), + (5332, 5332, '_exp01/zones/objects/light_sources/drv_lightsource_ext_lantern01', 0), + (5333, 5333, '_exp01/zones/objects/light_sources/drv_lightsource_ext_lantern01_swinging', 0), + (5334, 5334, '_exp01/zones/objects/mirrors/drv_mirror_ornate01', 0), + (5335, 5335, '_exp01/zones/objects/mirrors/drv_mirror_plain01', 0), + (5336, 5336, '_exp01/zones/objects/pillows/djn_pillow_floor_redsquare01', 0), + (5337, 5337, '_exp01/zones/objects/pillows/drv_pillow_bench_pattern02', 0), + (5338, 5338, '_exp01/zones/objects/pillows/drv_pillow_floor_palace_oval01', 0), + (5339, 5339, '_exp01/zones/objects/pillows/drv_pillow_floor_palace_round01', 0), + (5340, 5340, '_exp01/zones/objects/pillows/drv_pillow_floor_palace_square01', 0), + (5341, 5341, '_exp01/zones/objects/pillows/drv_pillow_floor_palace_square02', 0), + (5342, 5342, '_exp01/zones/objects/pillows/drv_pillow_floor_round_worn01', 0), + (5343, 5343, '_exp01/zones/objects/pillows/drv_pillow_floor_round_worn02', 0), + (5344, 5344, '_exp01/zones/objects/pillows/drv_pillow_floor_square_worn02', 0), + (5345, 5345, '_exp01/zones/objects/pillows/drv_pillow_seat01', 0), + (5346, 5346, '_exp01/zones/objects/pillows/drv_pillow_seat02', 0), + (5347, 5347, '_exp01/zones/objects/pillows/drv_pillow_seat_weights_worn02', 0), + (5348, 5348, '_exp01/zones/objects/pillows/drv_pillow_seat_worn01', 0), + (5349, 5349, '_exp01/zones/objects/pillows/drv_pillow_seat_worn02', 0), + (5350, 5350, '_exp01/zones/objects/pillows/drv_pillow_bench_pattern01_worn', 0), + (5351, 5351, '_exp01/zones/objects/pillows/drv_pillow_bench_dirty01', 0), + (5352, 5352, '_exp01/zones/objects/pillows/drv_pillow_bench_clean01', 0), + (5353, 5353, '_exp01/zones/objects/pillows/drv_pillow_floor_oval_worn02', 0), + (5354, 5354, '_exp01/zones/objects/pillows/drv_pillow_floor_oval_worn01', 0), + (5355, 5355, '_exp01/zones/objects/podiums/sc_podium_nosphinx_small01', 0), + (5356, 5356, '_exp01/zones/objects/potted_plants/djn_pottedplant_palm02_med_blue', 0), + (5357, 5357, '_exp01/zones/objects/pottery/djn_vase_brokenpieces_group01', 0), + (5358, 5358, '_exp01/zones/objects/pottery/djn_vase_brokenpieces_group02', 0), + (5359, 5359, '_exp01/zones/objects/pottery/djn_vase_gold_broken01', 0), + (5360, 5360, '_exp01/zones/objects/pottery/drv_vase_brass_broken02', 0), + (5361, 5361, '_exp01/zones/objects/pottery/drv_vase_broken01', 0), + (5362, 5362, '_exp01/zones/objects/pottery/drv_vase_broken02', 0), + (5363, 5363, '_exp01/zones/objects/pottery/drv_vase_brokenpieces_group01', 0), + (5364, 5364, '_exp01/zones/objects/pottery/drv_vase_brokenpieces_group02', 0), + (5365, 5365, '_exp01/zones/objects/pottery/drv_vase_brokenpieces_group03', 0), + (5366, 5366, '_exp01/zones/objects/pottery/drv_vase_brokenpieces_group04', 0), + (5367, 5367, '_exp01/zones/objects/pottery/drv_vase_brokenpieces_group05', 0), + (5368, 5368, '_exp01/zones/objects/pottery/drv_vase_ornate01', 0), + (5369, 5369, '_exp01/zones/objects/pottery/drv_vase_ornate02', 0), + (5370, 5370, '_exp01/zones/objects/pottery/drv_vase_ornate_large02', 0), + (5371, 5371, '_exp01/zones/objects/pottery/drv_vase_ornate_porcelain_large01', 0), + (5372, 5372, '_exp01/zones/objects/pottery/drv_vase_plain01', 0), + (5373, 5373, '_exp01/zones/objects/pottery/drv_vase_porcelain_ornate01', 0), + (5374, 5374, '_exp01/zones/objects/pottery/drv_vase_porcelain_ornate02', 0), + (5375, 5375, '_exp01/zones/objects/rocks/pf_rocks_gnollboulders_painted01', 0), + (5376, 5376, '_exp01/zones/objects/roomdivider/drv_divider_plain01', 0), + (5377, 5377, '_exp01/zones/objects/rugs/cr_animal_hide_rug', 0), + (5378, 5378, '_exp01/zones/objects/rugs/drv_rug_group01', 0), + (5379, 5379, '_exp01/zones/objects/rugs/drv_rug_group02', 0), + (5380, 5380, '_exp01/zones/objects/rugs/drv_rug_group03', 0), + (5381, 5381, '_exp01/zones/objects/rugs/drv_rug_rect_worn01', 0), + (5382, 5382, '_exp01/zones/objects/rugs/drv_rug_rect_worn02', 0), + (5383, 5383, '_exp01/zones/objects/rugs/drv_rug_rolled_worn01', 0), + (5384, 5384, '_exp01/zones/objects/rugs/drv_rug_rolled_worn02', 0), + (5385, 5385, '_exp01/zones/objects/rugs/drv_rug_round02', 0), + (5386, 5386, '_exp01/zones/objects/rugs/drv_rug_round_worn01', 0), + (5387, 5387, '_exp01/zones/objects/rugs/drv_rug_round_worn02', 0), + (5388, 5388, '_exp01/zones/objects/rugs/drv_rug_square02', 0), + (5389, 5389, '_exp01/zones/objects/rugs/drv_rug_square03', 0), + (5390, 5390, '_exp01/zones/objects/rugs/drv_rug_square04', 0), + (5391, 5391, '_exp01/zones/objects/rugs/drv_rug_square_worn01', 0), + (5392, 5392, '_exp01/zones/objects/rugs/drv_rug_square_worn02', 0), + (5393, 5393, '_exp01/zones/objects/rugs/drv_rug_square_worn03', 0), + (5394, 5394, '_exp01/zones/objects/rugs/drv_rugs_rolled_group01', 0), + (5395, 5395, '_exp01/zones/objects/rugs/drv_rugs_rolled_group02', 0), + (5396, 5396, '_exp01/zones/objects/rugs/drv_rugs_rolled_worn_group01', 0), + (5397, 5397, '_exp01/zones/objects/scrolls/djn_scriptorium_scrollracks_6m', 0), + (5398, 5398, '_exp01/zones/objects/tables/djn_table_bedside01', 0), + (5399, 5399, '_exp01/zones/objects/tables/djn_table_floating02', 0), + (5400, 5400, '_exp01/zones/objects/tables/drv_table_coffee_plain01', 0), + (5401, 5401, '_exp01/zones/objects/tables/drv_table_dining_ornate01', 0), + (5402, 5402, '_exp01/zones/objects/tables/drv_table_dining_ornate02', 0), + (5403, 5403, '_exp01/zones/objects/tables/drv_table_dining_roundplain01', 0), + (5404, 5404, '_exp01/zones/objects/tables/drv_table_dining_squareplain01', 0), + (5405, 5405, '_exp01/zones/objects/tables/drv_table_end_round01', 0), + (5406, 5406, '_exp01/zones/objects/tables/drv_table_merchant01', 0), + (5407, 5407, '_exp01/zones/objects/tables/drv_table_merchant_long01', 0), + (5408, 5408, '_exp01/zones/objects/tablets/lt_tablet01', 0), + (5409, 5409, '_exp01/zones/objects/tablets/pf_tablet_broken01', 0), + (5410, 5410, '_exp01/zones/objects/tablets/pf_tablet_broken02', 0), + (5411, 5411, '_exp01/zones/objects/tapestries/drv_tapestry_4m_brasstrim_beige01_swinging', 0), + (5412, 5412, '_exp01/zones/objects/tapestries/drv_tapestry_4m_woodtrim_beige01_swinging', 0), + (5413, 5413, '_exp01/zones/objects/tapestries/drv_tapestry_4m_woodtrim_purple01_swinging', 0), + (5414, 5414, '_exp01/zones/objects/tapestries/drv_tapestry_6m_brasstrim_purple01_swinging', 0), + (5415, 5415, '_exp01/zones/objects/tapestries/drv_tapestry_6m_brasstrim_red01_swinging', 0), + (5416, 5416, '_exp01/zones/objects/tapestries/drv_tapestry_6m_wood_purple01_swinging', 0), + (5417, 5417, '_exp01/zones/objects/tapestries/drv_tapestry_6m_wood_red01_swinging', 0), + (5418, 5418, '_exp01/zones/objects/tapestries/drv_tapestry_apparatus01', 0), + (5419, 5419, '_exp01/zones/objects/tapestries/drv_tapestry_brass_apparatus02', 0), + (5420, 5420, '_exp01/zones/objects/tapestries/drv_tapestry_brass_ceilingmount01', 0), + (5421, 5421, '_exp01/zones/objects/tapestries/drv_tapestry_brass_dualhooks01', 0), + (5422, 5422, '_exp01/zones/objects/tapestries/drv_tapestry_wood_apparatus02', 0), + (5423, 5423, '_exp01/zones/objects/tapestries/drv_tapestry_wood_ceilingmount01', 0), + (5424, 5424, 'accessories/wearable_items/_exp08/dragon_armor/chain-scale_green/feet', 1096), + (5425, 5425, '_exp01/zones/objects/tents/drv_tent_merchant_hanging_blue', 0), + (5426, 5426, '_exp01/zones/objects/tents/drv_tent_merchant_hanging_orange', 0), + (5427, 5427, '_exp01/zones/objects/tents/drv_tent_merchant_hanging_red', 0), + (5428, 5428, '_exp01/zones/objects/tents/drv_tent_merchant_hanging_teal', 0), + (5429, 5429, '_exp01/zones/objects/tents/pf_goblin_tent', 0), + (5430, 5430, '_exp01/zones/objects/tents/pf_tent', 0), + (5431, 5431, '_exp01/zones/objects/tents/pf_tent_sandgiant', 0), + (5432, 5432, '_exp01/zones/objects/tents/ss_tent_lizardmen', 0), + (5433, 5433, '_exp01/zones/objects/tents/ss_tent_gnoll_anubis01', 0), + (5434, 5434, '_exp01/zones/objects/tents/ss_tent_nomad_double_group01', 0), + (5435, 5435, '_exp01/zones/objects/tents/ss_tent_orc01', 0), + (5436, 5436, '_exp01/zones/objects/tools/cr_tool_orc_forge_anvil', 0), + (5437, 5437, '_exp01/zones/objects/urns/drv_urn_large01', 0), + (5438, 5438, '_exp01/zones/objects/vases/djn_vase_brass01', 0), + (5439, 5439, '_exp01/zones/objects/vases/djn_vase_brass_broken01', 0), + (5440, 5440, '_exp01/zones/objects/vases/djn_vase_gold01', 0), + (5441, 5441, '_exp01/zones/objects/wallchargers/drv_wallcharger_brass01', 0), + (5442, 5442, '_exp01/zones/objects/wallchargers/drv_wallcharger_brass02', 0), + (5443, 5443, '_exp01/zones/objects/wallchargers/drv_wallcharger_ceramic01', 0), + (5444, 5444, '_exp01/zones/objects/wallchargers/drv_wallcharger_ceramic02', 0), + (5445, 5445, '_exp01/zones/objects/wallchargers/drv_wallcharger_porcelain01', 0), + (5446, 5446, '_exp01/zones/objects/pillows/djn_pillow_floor_bluesquare01', 0), + (5447, 5447, '_exp01/zones/objects/tables/djn_table_artist_brass01', 0), + (5448, 5448, '_exp01/zones/objects/arena/powerups/arena_powerup_potion_red', 0), + (5449, 5449, '_exp01/zones/objects/arena/powerups/arena_powerup_potion_blue', 0), + (5450, 5450, '_exp01/zones/objects/arena/powerups/arena_powerup_shield_blue', 0), + (5451, 5451, '_exp01/zones/objects/arena/powerups/arena_powerup_star_orange', 0), + (5452, 5452, '_exp01/zones/objects/arena/powerups/arena_powerup_axe_red', 0), + (5453, 5453, '_exp01/zones/objects/arena/powerups/arena_powerup_bolt_yellow', 0), + (5454, 5454, '_exp01/zones/objects/doorknocker/md_doorknocker01', 0), + (5455, 5455, '_exp01/zones/objects/columns/prism_column01', 0), + (5456, 5456, 'accessories/wearable_items/starter_clothes/barbarian_female/arms', 0), + (5457, 5457, 'accessories/wearable_items/starter_clothes/barbarian_female/chest', 0), + (5458, 5458, 'accessories/wearable_items/starter_clothes/barbarian_female/legs', 0), + (5459, 5459, 'accessories/wearable_items/starter_clothes/barbarian_female/sleeves', 0), + (5460, 5460, 'accessories/wearable_items/starter_clothes/barbarian_male/arms', 0), + (5461, 5461, 'accessories/wearable_items/starter_clothes/barbarian_male/chest', 0), + (5462, 5462, 'accessories/wearable_items/starter_clothes/barbarian_male/legs', 0), + (5463, 5463, 'accessories/wearable_items/starter_clothes/barbarian_male/sleeves', 0), + (5464, 5464, 'accessories/wearable_items/starter_clothes/darkelf_female/arms', 0), + (5465, 5465, 'accessories/wearable_items/starter_clothes/darkelf_female/chest', 0), + (5466, 5466, 'accessories/wearable_items/starter_clothes/darkelf_female/legs', 0), + (5467, 5467, 'accessories/wearable_items/starter_clothes/darkelf_female/sleeves', 0), + (5468, 5468, 'accessories/wearable_items/starter_clothes/darkelf_male/arms', 0), + (5469, 5469, 'accessories/wearable_items/starter_clothes/darkelf_male/chest', 0), + (5470, 5470, 'accessories/wearable_items/starter_clothes/darkelf_male/legs', 0), + (5471, 5471, 'accessories/wearable_items/starter_clothes/darkelf_male/sleeves', 0), + (5472, 5472, 'accessories/wearable_items/starter_clothes/dwarf_female/arms', 0), + (5473, 5473, 'accessories/wearable_items/starter_clothes/dwarf_female/chest', 0), + (5474, 5474, 'accessories/wearable_items/starter_clothes/dwarf_female/legs', 0), + (5475, 5475, 'accessories/wearable_items/starter_clothes/dwarf_female/sleeves', 0), + (5476, 5476, 'accessories/wearable_items/starter_clothes/dwarf_male/arms', 0), + (5477, 5477, 'accessories/wearable_items/starter_clothes/dwarf_male/chest', 0), + (5478, 5478, 'accessories/wearable_items/starter_clothes/dwarf_male/legs', 0), + (5479, 5479, 'accessories/wearable_items/starter_clothes/dwarf_male/sleeves', 0), + (5480, 5480, 'accessories/wearable_items/starter_clothes/erudite_female/arms', 0), + (5481, 5481, 'accessories/wearable_items/starter_clothes/erudite_female/chest', 0), + (5482, 5482, 'accessories/wearable_items/starter_clothes/erudite_female/legs', 0), + (5483, 5483, 'accessories/wearable_items/starter_clothes/erudite_female/sleeves', 0), + (5484, 5484, 'accessories/wearable_items/starter_clothes/erudite_male/arms', 0), + (5485, 5485, 'accessories/wearable_items/starter_clothes/erudite_male/chest', 0), + (5486, 5486, 'accessories/wearable_items/starter_clothes/erudite_male/legs', 0), + (5487, 5487, 'accessories/wearable_items/starter_clothes/erudite_male/sleeves', 0), + (5488, 5488, 'accessories/wearable_items/starter_clothes/froglok_female/arms', 0), + (5489, 5489, 'accessories/wearable_items/starter_clothes/froglok_female/chest', 0), + (5490, 5490, 'accessories/wearable_items/starter_clothes/froglok_female/legs', 0), + (5491, 5491, 'accessories/wearable_items/starter_clothes/froglok_female/sleeves', 0), + (5492, 5492, 'accessories/wearable_items/starter_clothes/froglok_male/arms', 0), + (5493, 5493, 'accessories/wearable_items/starter_clothes/froglok_male/chest', 0), + (5494, 5494, 'accessories/wearable_items/starter_clothes/froglok_male/legs', 0), + (5495, 5495, 'accessories/wearable_items/starter_clothes/froglok_male/sleeves', 0), + (5496, 5496, 'accessories/wearable_items/starter_clothes/gnome_female/arms', 0), + (5497, 5497, 'accessories/wearable_items/starter_clothes/gnome_female/chest', 0), + (5498, 5498, 'accessories/wearable_items/starter_clothes/gnome_female/legs', 0), + (5499, 5499, 'accessories/wearable_items/starter_clothes/gnome_female/sleeves', 0), + (5500, 5500, 'accessories/wearable_items/starter_clothes/gnome_male/arms', 0), + (5501, 5501, 'accessories/wearable_items/starter_clothes/gnome_male/chest', 0), + (5502, 5502, 'accessories/wearable_items/starter_clothes/gnome_male/legs', 0), + (5503, 5503, 'accessories/wearable_items/starter_clothes/gnome_male/sleeves', 0), + (5504, 5504, 'accessories/wearable_items/starter_clothes/halfelf_female/arms', 0), + (5505, 5505, 'accessories/wearable_items/starter_clothes/halfelf_female/chest', 0), + (5506, 5506, 'accessories/wearable_items/starter_clothes/halfelf_female/legs', 0), + (5507, 5507, 'accessories/wearable_items/starter_clothes/halfelf_female/sleeves', 0), + (5508, 5508, 'accessories/wearable_items/starter_clothes/halfelf_male/arms', 0), + (5509, 5509, 'accessories/wearable_items/starter_clothes/halfelf_male/chest', 0), + (5510, 5510, 'accessories/wearable_items/starter_clothes/halfelf_male/legs', 0), + (5511, 5511, 'accessories/wearable_items/starter_clothes/halfelf_male/sleeves', 0), + (5512, 5512, 'accessories/wearable_items/starter_clothes/halfling_female/arms', 0), + (5513, 5513, 'accessories/wearable_items/starter_clothes/halfling_female/chest', 0), + (5514, 5514, 'accessories/wearable_items/starter_clothes/halfling_female/legs', 0), + (5515, 5515, 'accessories/wearable_items/starter_clothes/halfling_female/sleeves', 0), + (5516, 5516, 'accessories/wearable_items/starter_clothes/halfling_male/arms', 0), + (5517, 5517, 'accessories/wearable_items/starter_clothes/halfling_male/chest', 0), + (5518, 5518, 'accessories/wearable_items/starter_clothes/halfling_male/legs', 0), + (5519, 5519, 'accessories/wearable_items/starter_clothes/halfling_male/sleeves', 0), + (5520, 5520, 'accessories/wearable_items/starter_clothes/highelf_female/arms', 0), + (5521, 5521, 'accessories/wearable_items/starter_clothes/highelf_female/chest', 0), + (5522, 5522, 'accessories/wearable_items/starter_clothes/highelf_female/legs', 0), + (5523, 5523, 'accessories/wearable_items/starter_clothes/highelf_female/sleeves', 0), + (5524, 5524, 'accessories/wearable_items/starter_clothes/highelf_male/arms', 0), + (5525, 5525, 'accessories/wearable_items/starter_clothes/highelf_male/chest', 0), + (5526, 5526, 'accessories/wearable_items/starter_clothes/highelf_male/legs', 0), + (5527, 5527, 'accessories/wearable_items/starter_clothes/highelf_male/sleeves', 0), + (5528, 5528, 'accessories/wearable_items/starter_clothes/human_female/arms', 0), + (5529, 5529, 'accessories/wearable_items/starter_clothes/human_female/chest', 0), + (5530, 5530, 'accessories/wearable_items/starter_clothes/human_female/legs', 0), + (5531, 5531, 'accessories/wearable_items/starter_clothes/human_female/sleeves', 0), + (5532, 5532, 'accessories/wearable_items/starter_clothes/human_male/arms', 0), + (5533, 5533, 'accessories/wearable_items/starter_clothes/human_male/chest', 0), + (5534, 5534, 'accessories/wearable_items/starter_clothes/human_male/legs', 0), + (5535, 5535, 'accessories/wearable_items/starter_clothes/human_male/sleeves', 0), + (5536, 5536, 'accessories/wearable_items/starter_clothes/iksar_female/arms', 0), + (5537, 5537, 'accessories/wearable_items/starter_clothes/iksar_female/chest', 0), + (5538, 5538, 'accessories/wearable_items/starter_clothes/iksar_female/legs', 0), + (5539, 5539, 'accessories/wearable_items/starter_clothes/iksar_female/sleeves', 0), + (5540, 5540, 'accessories/wearable_items/starter_clothes/iksar_male/arms', 0), + (5541, 5541, 'accessories/wearable_items/starter_clothes/iksar_male/chest', 0), + (5542, 5542, 'accessories/wearable_items/starter_clothes/iksar_male/legs', 0), + (5543, 5543, 'accessories/wearable_items/starter_clothes/iksar_male/sleeves', 0), + (5544, 5544, 'accessories/wearable_items/starter_clothes/kerra_female/arms', 0), + (5545, 5545, 'accessories/wearable_items/starter_clothes/kerra_female/chest', 0), + (5546, 5546, 'accessories/wearable_items/starter_clothes/kerra_female/legs', 0), + (5547, 5547, 'accessories/wearable_items/starter_clothes/kerra_female/sleeves', 0), + (5548, 5548, 'accessories/wearable_items/starter_clothes/kerra_male/arms', 0), + (5549, 5549, 'accessories/wearable_items/starter_clothes/kerra_male/chest', 0), + (5550, 5550, 'accessories/wearable_items/starter_clothes/kerra_male/legs', 0), + (5551, 5551, 'accessories/wearable_items/starter_clothes/kerra_male/sleeves', 0), + (5552, 5552, 'accessories/wearable_items/starter_clothes/ogre_female/arms', 0), + (5553, 5553, 'accessories/wearable_items/starter_clothes/ogre_female/chest', 0), + (5554, 5554, 'accessories/wearable_items/starter_clothes/ogre_female/legs', 0), + (5555, 5555, 'accessories/wearable_items/starter_clothes/ogre_female/sleeves', 0), + (5556, 5556, 'accessories/wearable_items/starter_clothes/ogre_male/arms', 0), + (5557, 5557, 'accessories/wearable_items/starter_clothes/ogre_male/chest', 0), + (5558, 5558, 'accessories/wearable_items/starter_clothes/ogre_male/legs', 0), + (5559, 5559, 'accessories/wearable_items/starter_clothes/ogre_male/sleeves', 0), + (5560, 5560, 'accessories/wearable_items/starter_clothes/ratonga_female/arms', 0), + (5561, 5561, 'accessories/wearable_items/starter_clothes/ratonga_female/chest', 0), + (5562, 5562, 'accessories/wearable_items/starter_clothes/ratonga_female/legs', 0), + (5563, 5563, 'accessories/wearable_items/starter_clothes/ratonga_female/sleeves', 0), + (5564, 5564, 'accessories/wearable_items/starter_clothes/troll_female/arms', 0), + (5565, 5565, 'accessories/wearable_items/starter_clothes/troll_female/chest', 0), + (5566, 5566, 'accessories/wearable_items/starter_clothes/troll_female/legs', 0), + (5567, 5567, 'accessories/wearable_items/starter_clothes/troll_female/sleeves', 0), + (5568, 5568, 'accessories/wearable_items/starter_clothes/troll_male/arms', 0), + (5569, 5569, 'accessories/wearable_items/starter_clothes/troll_male/chest', 0), + (5570, 5570, 'accessories/wearable_items/starter_clothes/troll_male/legs', 0), + (5571, 5571, 'accessories/wearable_items/starter_clothes/troll_male/sleeves', 0), + (5572, 5572, 'accessories/wearable_items/starter_clothes/woodelf_female/arms', 0), + (5573, 5573, 'accessories/wearable_items/starter_clothes/woodelf_female/chest', 0), + (5574, 5574, 'accessories/wearable_items/starter_clothes/woodelf_female/legs', 0), + (5575, 5575, 'accessories/wearable_items/starter_clothes/woodelf_female/sleeves', 0), + (5576, 5576, 'accessories/wearable_items/starter_clothes/woodelf_male/arms', 0), + (5577, 5577, 'accessories/wearable_items/starter_clothes/woodelf_male/chest', 0), + (5578, 5578, 'accessories/wearable_items/starter_clothes/woodelf_male/legs', 0), + (5579, 5579, 'accessories/wearable_items/starter_clothes/woodelf_male/sleeves', 0), + (5580, 5580, '_exp01/zones/objects/arena/arena_poi_tower01', 0), + (5581, 5581, '_exp01/zones/objects/arena/arena_poi_wallspike01', 0), + (5582, 5582, '_exp01/zones/objects/arena/arena_poi_arch01', 0), + (5583, 5583, '_exp01/zones/objects/arena/arena_poi_bridge01', 0), + (5584, 5584, '_exp01/zones/objects/arena/arena_poi_pillar01', 0), + (5585, 5585, '_exp01/zones/objects/arena/arena_poi_platform01', 0), + (5586, 5586, '_exp01/zones/objects/arena/arena_poi_wall01', 0), + (5587, 5587, '_exp01/zones/objects/arena/arena_poi_dugout01', 0), + (5588, 5588, '_exp01/zones/objects/beds/djn_bed_brass01', 0), + (5589, 5589, 'accessories/wearable_items/_exp08/dragon_armor/chain-scale_green/forearms', 1096), + (5590, 5590, 'creatures/tu/noteman_tu', 0), + (5591, 5591, '_exp01/zones/cities/majdul/md_p11/md_p11_int_truth_door04', 0), + (5592, 5592, '_exp01/zones/dungeons/clefts_of_rujark/clefts_int2/clefts_int2_door_dead01', 0), + (5593, 5593, '_exp01/zones/dungeons/clefts_of_rujark/clefts_int2/clefts_int2_door_frsme_dead01', 0), + (5594, 5594, '_exp01/zones/objects/arena/arena_flag_team_red', 0), + (5595, 5595, '_exp01/zones/objects/arena/arena_flag_team_blue', 0), + (5596, 5596, '_exp01/characters/monsters/devil_dust', 0), + (5597, 5597, '_exp01/characters/monsters/devil_fire', 0), + (5598, 5598, '_exp01/zones/objects/mobile_barricades/drv_mobile_barricade', 0), + (5599, 5599, 'accessories/wearable_items/_exp08/dragon_armor/chain-scale_green/hands', 1096), + (5600, 5600, 'accessories/wearable_items/_exp08/dragon_armor/chain-scale_green/head', 1096), + (5601, 5601, '_exp01/zones/objects/md_doors/md_doors_03_02_l', 0), + (5602, 5602, '_exp01/characters/tool_users/orc_desert_warrior_bald_ghost', 0), + (5603, 5603, '_exp01/characters/tool_users/orc_desert_warrior_bald_square_ghost', 0), + (5604, 5604, '_exp01/characters/tool_users/orc_desert_warrior_helm_round_ghost', 0), + (5605, 5605, '_exp01/characters/tool_users/orc_desert_warrior_helm_square_ghost', 0), + (5606, 5606, '_exp01/characters/monsters/camel', 0), + (5607, 5607, '_exp01/characters/monsters/camel_pack', 0), + (5608, 5608, 'accessories/wearable_items/_exp08/dragon_armor/chain-scale_green/legs', 1096), + (5609, 5609, '_exp01/zones/objects/light_sources/drv_lightsource_candlestick_plain01', 0), + (5610, 5610, '_exp01/zones/objects/chairs/drv_bench_wood_plain01', 0), + (5611, 5611, 'accessories/wearable_items/heavy_cloth/heavy_cloth_dervish_plain/chest', 0), + (5612, 5612, 'accessories/wearable_items/heavy_cloth/heavy_cloth_dervish_plain/feet', 0), + (5613, 5613, 'accessories/wearable_items/heavy_cloth/heavy_cloth_dervish_plain/forearms', 0), + (5614, 5614, 'accessories/wearable_items/heavy_cloth/heavy_cloth_dervish_plain/hands', 0), + (5615, 5615, 'accessories/wearable_items/heavy_cloth/heavy_cloth_dervish_plain/head', 0), + (5616, 5616, 'accessories/wearable_items/heavy_cloth/heavy_cloth_dervish_plain/legs', 0), + (5617, 5617, 'accessories/wearable_items/heavy_cloth/heavy_cloth_dervish_plain/shoulders', 0), + (5618, 5618, '_exp01/characters/tool_users/mummy_godking_anuk', 0), + (5619, 5619, 'staticobjects/fx/medium_fire', 0), + (5620, 5620, 'staticobjects/fx/wind_smoke', 0), + (5621, 5621, 'staticobjects/fx/smoke_medium_thin', 0), + (5622, 5622, '_exp01/zones/objects/beds/drv_bed_doubleplain001', 0), + (5623, 5623, '_exp01/zones/objects/beds/drv_bed_kingplain001', 0), + (5624, 5624, '_exp01/zones/objects/beds/drv_bed_singleplain001', 0), + (5625, 5625, '_exp01/zones/objects/bookcases/drv_bookcase_ornate_short01', 0), + (5626, 5626, '_exp01/zones/objects/bookcases/drv_bookcase_ornate_tall01', 0), + (5627, 5627, '_exp01/characters/monsters/spider_terrorantula', 0), + (5628, 5628, 'accessories/wieldable_items/weapons/axe/cobra_hatchet/cobra_hatchet_plain', 0), + (5629, 5629, 'accessories/wieldable_items/weapons/dagger/jambiya/jambiya_plain', 0), + (5630, 5630, 'accessories/wieldable_items/weapons/staff/cobra_staff/cobra_staff_plain', 0), + (5631, 5631, 'accessories/wieldable_items/weapons/hammer/lotus_sceptre/lotus_sceptre_plain', 0), + (5632, 5632, 'accessories/wieldable_items/weapons/hammer/amber_sceptre/amber_sceptre_plain', 0), + (5633, 5633, 'accessories/wieldable_items/weapons/hammer/crab_sceptre/crab_sceptre_plain', 0), + (5634, 5634, '_exp01/characters/monsters/devil_dust_tornado', 0), + (5635, 5635, '_exp01/characters/monsters/camel_dromedary', 0), + (5636, 5636, 'accessories/wearable_items/_exp08/dragon_armor/chain-scale_green/legs_noskirt', 1096), + (5637, 5637, 'accessories/wearable_items/_exp08/dragon_armor/chain-scale_green/shoulders', 1096), + (5638, 5638, '_exp01/zones/objects/bottle/bottle_with_ship01', 0), + (5639, 5639, 'accessories/wearable_items/_exp08/dragon_armor/chain-scale_green/shoulders_epic', 1096), + (5640, 5640, 'staticobjects/bookcases/scrollcase01', 0), + (5641, 5641, 'staticobjects/bookcases/scrollcase01_brkn', 0), + (5642, 5642, '_exp01/zones/objects/doors_doorways/drv_manhole_cover', 0), + (5643, 5643, '_exp01/zones/animated_objects/djn_mirror_translocation_citadelexterior', 0), + (5644, 5644, '_exp01/zones/animated_objects/djn_mirror_translocation_firstfloor_sphinx', 0), + (5645, 5645, '_exp01/zones/animated_objects/djn_mirror_translocation_fourthfloor', 0), + (5646, 5646, '_exp01/zones/animated_objects/djn_mirror_translocation_hallofdoors', 0), + (5647, 5647, '_exp01/zones/animated_objects/djn_mirror_translocation_pillars', 0), + (5648, 5648, '_exp01/zones/animated_objects/djn_mirror_translocation_secondfloor', 0), + (5649, 5649, '_exp01/zones/objects/bench/lt_stonebench01', 0), + (5650, 5650, '_exp01/zones/objects/light_sources/sc_lightsource_flamingfeather01', 0), + (5651, 5651, '_exp01/zones/objects/light_sources/sc_lightsource_glassvessel01', 0), + (5652, 5652, '_exp01/zones/objects/urns/lt_vase01', 0), + (5653, 5653, '_exp01/zones/objects/urns/lt_vase02', 0), + (5654, 5654, '_exp01/zones/objects/urns/lt_vase03', 0), + (5655, 5655, '_exp01/zones/objects/lights/md_light_5m00', 0), + (5656, 5656, '_exp01/zones/objects/lights/md_light_5m01', 0), + (5657, 5657, '_exp01/zones/objects/lights/md_light_2m00', 0), + (5658, 5658, '_exp01/zones/objects/lights/md_light_2m01', 0), + (5659, 5659, 'accessories/wearable_items/_exp08/dragon_armor/chain-scale_red/skirt', 1096), + (5660, 5660, '_exp01/zones/objects/kitchen_tools/drv_cup_ornate_brass', 0), + (5661, 5661, '_exp01/zones/objects/kitchen_tools/drv_cup_ornate_pewter', 0), + (5662, 5662, '_exp01/zones/objects/kitchen_tools/drv_wine_bottle_ornate_brass', 0), + (5663, 5663, '_exp01/zones/objects/kitchen_tools/drv_wine_bottle_ornate_pewter', 0), + (5664, 5664, '_exp01/zones/objects/light_sources/sc_lightsource_flamingfeather01_no_lightsource', 0), + (5665, 5665, '_exp01/zones/objects/light_sources/drv_lightsource_int_lanternhanging_plain01', 0), + (5666, 5666, '_exp01/zones/dungeons/silent_city/sc_temple/sc_temple_symbol_01_pink', 0), + (5667, 5667, '_exp01/zones/dungeons/silent_city/sc_temple/sc_temple_symbol_02_yellow', 0), + (5668, 5668, '_exp01/zones/dungeons/silent_city/sc_temple/sc_temple_symbol_03_orange', 0), + (5669, 5669, '_exp01/zones/dungeons/silent_city/sc_temple/sc_temple_symbol_04_green', 0), + (5670, 5670, '_exp01/zones/dungeons/silent_city/sc_temple/sc_temple_symbol_05_blue', 0), + (5671, 5671, '_exp01/zones/dungeons/silent_city/sc_temple/sc_temple_symbol_06_purple', 0), + (5672, 5672, '_exp01/zones/dungeons/silent_city/sc_temple/sc_temple_symbol_07_red', 0), + (5673, 5673, '_exp01/zones/dungeons/silent_city/sc_temple/sc_temple_symbol_08_white', 0), + (5674, 5674, '_exp01/zones/dungeons/silent_city/sc_temple/sc_temple_symbol_09_black', 0), + (5675, 5675, '_exp01/zones/objects/banners/ss_orc_tribalbanner01_l0', 0), + (5676, 5676, '_exp01/zones/objects/beetle/ss_dunebeetle_carapace01', 0), + (5677, 5677, '_exp01/zones/objects/crates/ss_crate_boarded_long01', 0), + (5678, 5678, '_exp01/zones/objects/crates/ss_crate_large01', 0), + (5679, 5679, '_exp01/zones/objects/crates/ss_crate_small01', 0), + (5680, 5680, '_exp01/zones/objects/switches/sc_objects_puzzlebox_switch01', 0), + (5681, 5681, '_exp01/zones/objects/urns/lt_urn02', 0), + (5682, 5682, '_exp01/zones/dungeons/silent_city/sc_temple/sc_temple_ewer', 0), + (5683, 5683, '_exp01/zones/dungeons/silent_city/sc_temple/sc_temple_int_waterfall02_up', 0), + (5684, 5684, '_exp01/characters/monsters/leopard_yellow', 0), + (5685, 5685, '_exp01/characters/monsters/leopard_black', 0), + (5686, 5686, '_exp01/characters/tool_users/djinn_master', 0), + (5687, 5687, '_exp01/zones/objects/light_sources/drv_lightsource_ext_torch01', 0), + (5688, 5688, '_exp01/zones/objects/arena/powerups/arena_powerup_bolt_blue', 0), + (5689, 5689, '_exp01/zones/objects/arena/powerups/arena_powerup_bolt_green', 0), + (5690, 5690, '_exp01/zones/objects/arena/powerups/arena_powerup_bolt_orange', 0), + (5691, 5691, '_exp01/zones/objects/arena/powerups/arena_powerup_bolt_purple', 0), + (5692, 5692, '_exp01/zones/objects/arena/powerups/arena_powerup_bolt_red', 0), + (5693, 5693, '_exp01/zones/objects/arena/powerups/arena_powerup_shield_green', 0), + (5694, 5694, '_exp01/zones/objects/arena/powerups/arena_powerup_shield_orange', 0), + (5695, 5695, '_exp01/zones/objects/arena/powerups/arena_powerup_shield_purple', 0), + (5696, 5696, '_exp01/zones/objects/arena/powerups/arena_powerup_shield_red', 0), + (5697, 5697, '_exp01/zones/objects/arena/powerups/arena_powerup_star_blue', 0), + (5698, 5698, '_exp01/zones/objects/arena/powerups/arena_powerup_star_green', 0), + (5699, 5699, '_exp01/zones/objects/arena/powerups/arena_powerup_star_purple', 0), + (5700, 5700, '_exp01/zones/objects/arena/powerups/arena_powerup_star_red', 0), + (5701, 5701, '_exp01/zones/objects/arena/powerups/arena_powerup_axe_blue', 0), + (5702, 5702, '_exp01/zones/objects/arena/powerups/arena_powerup_axe_green', 0), + (5703, 5703, '_exp01/zones/objects/arena/powerups/arena_powerup_axe_purple', 0), + (5704, 5704, '_exp01/zones/objects/arena/powerups/arena_powerup_axe_yellow', 0), + (5705, 5705, 'accessories/wearable_items/white_robe/chest', 0), + (5706, 5706, 'accessories/wearable_items/white_robe/hood', 0), + (5707, 5707, 'accessories/wearable_items/white_robe/pants', 0), + (5708, 5708, 'accessories/wearable_items/white_robe/skirt', 0), + (5709, 5709, 'accessories/wearable_items/heavy_plate/plain/chest', 0), + (5710, 5710, 'accessories/wearable_items/heavy_plate/plain/feet', 0), + (5711, 5711, 'accessories/wearable_items/heavy_plate/plain/forearms', 0), + (5712, 5712, 'accessories/wearable_items/heavy_plate/plain/hands', 0), + (5713, 5713, 'accessories/wearable_items/heavy_plate/plain/head', 0), + (5714, 5714, 'accessories/wearable_items/heavy_plate/plain/left', 0), + (5715, 5715, 'accessories/wearable_items/heavy_plate/plain/legs', 0), + (5716, 5716, 'accessories/wearable_items/heavy_plate/plain/legs_noskirt', 0), + (5717, 5717, 'accessories/wearable_items/heavy_plate/plain/shoulders', 0), + (5718, 5718, 'accessories/wearable_items/heavy_plate/plain/shoulders_nopauldrons', 0), + (5719, 5719, 'accessories/wearable_items/heavy_plate/plain/skirt', 0), + (5720, 5720, 'accessories/wearable_items/heavy_plate/plain/upperchest', 0), + (5721, 5721, 'creatures/mounts/carpet_sun', 0), + (5722, 5722, '_exp01/characters/tool_users/orc_desert_warrior_helm_ghost', 0), + (5723, 5723, 'accessories/wearable_items/heavy_plate/plain/right', 0), + (5724, 5724, 'accessories/wearable_items/starter_clothes/ratonga_male/arms', 0), + (5725, 5725, 'accessories/wearable_items/starter_clothes/ratonga_male/chest', 0), + (5726, 5726, 'accessories/wearable_items/starter_clothes/ratonga_male/legs', 0), + (5727, 5727, 'accessories/wearable_items/starter_clothes/ratonga_male/sleeves', 0), + (5728, 5728, 'accessories/wearable_items/_exp08/dragon_armor/chain-scale_red/chest', 1096), + (5729, 5729, 'accessories/wearable_items/_exp08/dragon_armor/chain-scale_red/feet', 1096), + (5730, 5730, 'accessories/wearable_items/_exp08/dragon_armor/chain-scale_red/forearms', 1096), + (5731, 5731, 'accessories/wearable_items/_exp08/dragon_armor/chain-scale_red/hands', 1096), + (5732, 5732, 'accessories/wearable_items/_exp08/dragon_armor/chain-scale_red/head', 1096), + (5733, 5733, 'accessories/wearable_items/_exp08/dragon_armor/chain-scale_red/legs', 1096), + (5734, 5734, 'accessories/wearable_items/_exp08/dragon_armor/chain-scale_red/legs_noskirt', 1096), + (5735, 5735, 'accessories/wearable_items/_exp08/dragon_armor/chain-scale_red/shoulders', 1096), + (5736, 5736, 'accessories/wearable_items/_exp08/dragon_armor/chain-scale_red/shoulders_epic', 1096), + (5737, 5737, 'accessories/wearable_items/_exp08/dragon_armor/chain-scale_shadow/skirt', 1096), + (5738, 5738, '_exp01/zones/objects/arena/powerups/arena_powerup_shield_yellow', 0), + (5739, 5739, '_exp01/zones/objects/arena/powerups/arena_powerup_star_yellow', 0), + (5740, 5740, '_exp01/zones/objects/arena/powerups/arena_powerup_axe_orange', 0), + (5741, 5741, '_exp01/zones/objects/firepits/pf_campfire_spit_sandfang01', 0), + (5742, 5742, '_exp01/zones/objects/hay/pf_haypile01', 0), + (5743, 5743, '_exp01/zones/regions/pillars_of_flame/pf_objects/pf_rock/pf_rock_pillar01', 0), + (5744, 5744, 'accessories/wieldable_items/weapons/hammer/battle_spoon/battle_spoon', 0), + (5745, 5745, 'staticobjects/fish/fishing_pole_00', 0), + (5746, 5746, 'accessories/wearable_items/_exp08/dragon_armor/chain-scale_shadow/chest', 1096), + (5747, 5747, '_exp01/zones/objects/lights/md_light_10m00', 0), + (5748, 5748, '_exp01/zones/objects/lights/md_light_10m01', 0), + (5749, 5749, '_exp01/zones/objects/arena/arenaflag_ph_500win', 0), + (5750, 5750, '_exp01/zones/objects/arena/arenaflag_ph_1000win', 0), + (5751, 5751, '_exp01/zones/objects/arena/arenaflag_ph_championship_win', 0), + (5752, 5752, '_exp01/zones/objects/arena/arenaflag_ph_perfect_game', 0), + (5753, 5753, '_exp01/zones/objects/arena/arenaflag_ph_tournament_win', 0), + (5754, 5754, '_exp01/zones/objects/arena/arenaflag_ph_undefeated', 0), + (5755, 5755, 'accessories/wieldable_items/weapons/staff/cobra_staff/cobra_staff_special', 0), + (5756, 5756, '_exp01/zones/objects/tapestries/drv_tapestry_wall_jollyroger', 0), + (5757, 5757, '_exp02/characters/tool_users/insectoid_worker', 0), + (5758, 5758, 'staticobjects/banners/drv_tapestries_wall_jollyroger', 0), + (5759, 5759, 'creatures/monsters/stagg_deer_female', 0), + (5760, 5760, 'accessories/wearable_items/chain/common/low/legs_noskirt', 0), + (5761, 5761, 'accessories/wearable_items/chain/plain/low/legs_noskirt', 0), + (5762, 5762, 'accessories/wieldable_items/weapons/staff/cobra_staff/cobra_staff_ornate', 0), + (5763, 5763, 'staticobjects/chests/chest_animated_ornate_highbrass', 0), + (5764, 5764, 'accessories/wearable_items/_exp08/dragon_armor/chain-scale_shadow/feet', 1096), + (5765, 5765, 'accessories/wearable_items/_exp08/dragon_armor/chain-scale_shadow/forearms', 1096), + (5766, 5766, 'staticobjects/chests/chest_animated_ornate_woodgold', 0), + (5767, 5767, 'staticobjects/chests/chest_animated_ornate_silvergold', 0), + (5768, 5768, 'staticobjects/chests/chest_animated_ornate_woodsilver', 0), + (5769, 5769, '_exp02/characters/monsters/beholder_undead', 0), + (5770, 5770, '_exp02/characters/monsters/beholder_undead_bloody', 0), + (5771, 5771, 'creatures/tu/golem_water', 0), + (5772, 5772, '_exp01/characters/monsters/cobra_water_elemental', 0), + (5773, 5773, 'accessories/wearable_items/halloween_masks/antonia_mask/head', 0), + (5774, 5774, 'accessories/wearable_items/halloween_masks/cat_mask/head', 0), + (5775, 5775, 'accessories/wearable_items/halloween_masks/goblin_mask/head', 0), + (5776, 5776, 'accessories/wearable_items/halloween_masks/hatchet_mask/head', 0), + (5777, 5777, 'accessories/wearable_items/halloween_masks/lucan_mask/head', 0), + (5778, 5778, 'accessories/wearable_items/halloween_masks/mask_mask/head', 0), + (5779, 5779, 'accessories/wearable_items/halloween_masks/scarecrow_mask/head', 0), + (5780, 5780, 'accessories/wearable_items/halloween_masks/skeleton_mask/head', 0), + (5781, 5781, 'staticobjects/statues/holysymbol01_localpivot', 0), + (5782, 5782, 'projectiles/spell_fire_ball_long_trail', 0), + (5783, 5783, 'staticobjects/interiors/scenes/objects_race/human/halloween/le_evilpitchfork01', 0), + (5784, 5784, 'staticobjects/interiors/scenes/objects_race/human/halloween/le_hanging_bat01_swinging', 0), + (5785, 5785, 'staticobjects/interiors/scenes/objects_race/human/halloween/le_jackolantern01', 0), + (5786, 5786, 'staticobjects/interiors/scenes/objects_race/human/halloween/le_jackolantern02', 0), + (5787, 5787, 'staticobjects/interiors/scenes/objects_race/human/halloween/le_jackolantern03', 0), + (5788, 5788, 'staticobjects/rocks/ant_p5_meteor01', 0), + (5789, 5789, 'accessories/wearable_items/_exp08/dragon_armor/chain-scale_shadow/hands', 1096), + (5790, 5790, 'accessories/wearable_items/_exp08/dragon_armor/chain-scale_shadow/head', 1096), + (5791, 5791, 'staticobjects/gravestones/gravestone11', 0), + (5792, 5792, 'staticobjects/beds/sleepingrollleather02', 0), + (5793, 5793, 'accessories/wearable_items/chain/chain_tint01/chest', 0), + (5794, 5794, 'accessories/wearable_items/chain/chain_tint01/feet', 0), + (5795, 5795, 'accessories/wearable_items/chain/chain_tint01/forearms', 0), + (5796, 5796, 'accessories/wearable_items/chain/chain_tint01/hands', 0), + (5797, 5797, 'accessories/wearable_items/chain/chain_tint01/head', 0), + (5798, 5798, 'accessories/wearable_items/chain/chain_tint01/legs', 0), + (5799, 5799, 'accessories/wearable_items/chain/chain_tint01/legs_noskirt', 0), + (5800, 5800, 'accessories/wearable_items/chain/chain_tint01/shoulders', 0), + (5801, 5801, 'accessories/wearable_items/chain/chain_tint01/skirt', 0), + (5802, 5802, 'accessories/wearable_items/brigandine/brigandine_tint01/chest', 0), + (5803, 5803, 'accessories/wearable_items/brigandine/brigandine_tint01/feet', 0), + (5804, 5804, 'accessories/wearable_items/brigandine/brigandine_tint01/forearms', 0), + (5805, 5805, 'accessories/wearable_items/brigandine/brigandine_tint01/hands', 0), + (5806, 5806, 'accessories/wearable_items/brigandine/brigandine_tint01/head', 0), + (5807, 5807, 'accessories/wearable_items/brigandine/brigandine_tint01/legs', 0), + (5808, 5808, 'accessories/wearable_items/brigandine/brigandine_tint01/shoulders', 0), + (5809, 5809, 'accessories/wearable_items/plate/plate_tint02/chest', 0), + (5810, 5810, 'accessories/wearable_items/plate/plate_tint02/feet', 0), + (5811, 5811, 'accessories/wearable_items/plate/plate_tint02/forearms', 0), + (5812, 5812, 'accessories/wearable_items/plate/plate_tint02/hands', 0), + (5813, 5813, 'accessories/wearable_items/plate/plate_tint02/head', 0), + (5814, 5814, 'accessories/wearable_items/plate/plate_tint02/legs', 0), + (5815, 5815, 'accessories/wearable_items/plate/plate_tint02/shoulders', 0), + (5816, 5816, 'accessories/wearable_items/leather/leather_tint01/chest', 0), + (5817, 5817, 'accessories/wearable_items/leather/leather_tint01/feet', 0), + (5818, 5818, 'accessories/wearable_items/leather/leather_tint01/forearms', 0), + (5819, 5819, 'accessories/wearable_items/leather/leather_tint01/hands', 0), + (5820, 5820, 'accessories/wearable_items/leather/leather_tint01/head', 0), + (5821, 5821, 'accessories/wearable_items/leather/leather_tint01/legs', 0), + (5822, 5822, 'accessories/wearable_items/leather/leather_tint01/shoulders', 0), + (5823, 5823, 'accessories/wearable_items/leather/leather_tint01/skirt', 0), + (5824, 5824, 'accessories/wearable_items/leather/leather_tint01/legs_noskirt', 0), + (5825, 5825, 'accessories/wearable_items/magus/uncommon/high/hood', 0), + (5826, 5826, 'accessories/wearable_items/vanguard/vanguard_tint01/chest', 0), + (5827, 5827, 'accessories/wearable_items/vanguard/vanguard_tint01/feet', 0), + (5828, 5828, 'accessories/wearable_items/vanguard/vanguard_tint01/forearms', 0), + (5829, 5829, 'accessories/wearable_items/vanguard/vanguard_tint01/hands', 0), + (5830, 5830, 'accessories/wearable_items/vanguard/vanguard_tint01/head', 0), + (5831, 5831, 'accessories/wearable_items/vanguard/vanguard_tint01/legs', 0), + (5832, 5832, 'accessories/wearable_items/vanguard/vanguard_tint01/right', 0), + (5833, 5833, 'accessories/wearable_items/vanguard/vanguard_tint01/shoulders', 0), + (5834, 5834, 'accessories/wearable_items/vanguard/vanguard_tint01/shoulders_nopauldrons', 0), + (5835, 5835, 'staticobjects/platforms/fstc_flying_mount_station', 0), + (5836, 5836, 'staticobjects/platforms/fstc_flying_mount_station_build01', 0), + (5837, 5837, 'staticobjects/platforms/fstc_flying_mount_station_build02', 0), + (5838, 5838, 'accessories/wearable_items/heavy_chain/plain/chest', 0), + (5839, 5839, 'accessories/wearable_items/heavy_chain/plain/feet', 0), + (5840, 5840, 'accessories/wearable_items/heavy_chain/plain/forearms', 0), + (5841, 5841, 'accessories/wearable_items/heavy_chain/plain/hands', 0), + (5842, 5842, 'accessories/wearable_items/heavy_chain/plain/head', 0), + (5843, 5843, 'accessories/wearable_items/heavy_chain/plain/legs', 0), + (5844, 5844, 'accessories/wearable_items/heavy_chain/plain/legs_noskirt', 0), + (5845, 5845, 'accessories/wearable_items/heavy_chain/plain/pauldrons', 0), + (5846, 5846, 'accessories/wearable_items/heavy_chain/plain/shoulders', 0), + (5847, 5847, 'accessories/wearable_items/heavy_chain/plain/shoulders_no_pauldrons', 0), + (5848, 5848, 'accessories/wearable_items/heavy_chain/plain/skirt', 0), + (5849, 5849, 'accessories/wearable_items/plate/plate_tint01/chest', 0), + (5850, 5850, 'accessories/wearable_items/plate/plate_tint01/feet', 0), + (5851, 5851, 'accessories/wearable_items/plate/plate_tint01/forearms', 0), + (5852, 5852, 'accessories/wearable_items/plate/plate_tint01/hands', 0), + (5853, 5853, 'accessories/wearable_items/plate/plate_tint01/head', 0), + (5854, 5854, 'accessories/wearable_items/plate/plate_tint01/legs', 0), + (5855, 5855, 'accessories/wearable_items/plate/plate_tint01/shoulders', 0), + (5856, 5856, '_exp02/characters/tool_users/insectoid_worker_white', 0), + (5857, 5857, '_exp02/characters/tool_users/insectoid_warlord_noarmor_white', 0), + (5858, 5858, '_exp02/characters/tool_users/insectoid_warlord_white', 0), + (5859, 5859, '_exp02/characters/tool_users/insectoid_spellcaster', 0), + (5860, 5860, '_exp02/characters/tool_users/insectoid_warlord', 0), + (5861, 5861, '_exp02/characters/tool_users/insectoid_warlord_noarmor', 0), + (5862, 5862, '_exp02/characters/monsters/basilisk', 0), + (5863, 5863, '_exp02/characters/monsters/otyugh', 0), + (5864, 5864, 'staticobjects/chests/chest_animated_treasured', 0), + (5865, 5865, 'staticobjects/chests/chest_animated_legendary', 0), + (5866, 5866, 'staticobjects/statues/idol_rusty_upright', 0), + (5867, 5867, 'staticobjects/shelves/wall_shelf_halfling_wooden02_houseitem', 0), + (5868, 5868, 'staticobjects/shelves/wall_shelf_halfling_wooden03_houseitem', 0), + (5869, 5869, 'staticobjects/lighting/wall_sconce_human_iron02', 0), + (5870, 5870, 'accessories/wieldable_items/weapons/bow/long_bow/long_bow001_ornate_house_item', 0), + (5871, 5871, 'accessories/wieldable_items/weapons/throwing_weapons/throwing_star/throwing_star001_ornate_houseitem', 0), + (5872, 5872, 'accessories/wieldable_items/weapons/talisman/orb/orb001_rusty_houseitem', 0), + (5873, 5873, 'staticobjects/trophies/griffon_tower_trophy', 0), + (5874, 5874, 'accessories/wearable_items/heavy_cloth/heavy_cloth_dervish_plain/legs_noskirt', 0), + (5875, 5875, 'accessories/wearable_items/heavy_cloth/heavy_cloth_dervish_plain/skirt', 0), + (5876, 5876, 'accessories/wearable_items/profesion_hats/illusionist/illusionist_01/head', 0), + (5877, 5877, 'staticobjects/clock_akanon', 0), + (5878, 5878, '_exp02/zones/objects/banners/ls_banner_minion01', 0), + (5879, 5879, '_exp02/zones/objects/beds/hf_bed_guard_ornate01', 0), + (5880, 5880, '_exp02/zones/objects/books/hf_book_single01', 0), + (5881, 5881, '_exp02/zones/objects/books/ls_tome_dragon_brass01', 0), + (5882, 5882, '_exp02/zones/objects/books/ls_tome_dragon_brass02', 0), + (5883, 5883, '_exp02/zones/objects/books/ls_tome_dragon_group01', 0), + (5884, 5884, '_exp02/zones/objects/books/ls_tome_dragon_group02', 0), + (5885, 5885, '_exp02/zones/objects/books/ls_tome_dragon_purple01', 0), + (5886, 5886, '_exp02/zones/objects/books/ls_tome_dragon_purple02', 0), + (5887, 5887, '_exp02/zones/objects/chairs_benches/hf_bench_ornate01', 0), + (5888, 5888, '_exp02/zones/objects/chests/ls_chest_metal01', 0), + (5889, 5889, '_exp02/zones/objects/crude_tools/hf_tools_excavation_drill', 0), + (5890, 5890, '_exp02/zones/objects/crude_tools/hf_tools_excavation_group01', 0), + (5891, 5891, '_exp02/zones/objects/crude_tools/hf_tools_excavation_hammer', 0), + (5892, 5892, '_exp02/zones/objects/crude_tools/hf_tools_excavation_pick', 0), + (5893, 5893, 'accessories/wearable_items/_exp08/dragon_armor/chain-scale_shadow/legs', 1096), + (5894, 5894, '_exp02/zones/objects/crude_tools/hf_tools_excavation_toolbox', 0), + (5895, 5895, '_exp02/zones/objects/decorations/hf_decoration_scrimshawfang_floor01', 0), + (5896, 5896, '_exp02/zones/objects/decorations/hf_decoration_scrimshawfang_floor02', 0), + (5897, 5897, '_exp02/zones/objects/decorations/hf_decoration_scrimshawfang_wall01', 0), + (5898, 5898, '_exp02/zones/objects/desks/hf_desk_ornate01', 0), + (5899, 5899, '_exp02/zones/objects/dragon_bones/rn_bones_dragon01', 0), + (5900, 5900, '_exp02/zones/objects/dragon_bones/rn_bones_dragon02', 0), + (5901, 5901, '_exp02/zones/objects/plants/rn_stinkweed_group01', 0), + (5902, 5902, '_exp02/zones/objects/plants/rn_stinkweed_group02', 0), + (5903, 5903, '_exp02/zones/objects/plants/rn_stinkweed_group03', 0), + (5904, 5904, '_exp02/zones/objects/plants/rn_stinkweed_intertwined01', 0), + (5905, 5905, '_exp02/zones/objects/plants/rn_stinkweed_intertwined02', 0), + (5906, 5906, '_exp02/zones/objects/plants/rn_stinkweed_single01', 0), + (5907, 5907, '_exp02/characters/tool_users/aviak_eagle_warrior_dark', 0), + (5908, 5908, '_exp02/characters/tool_users/aviak_eagle_king_dark', 0), + (5909, 5909, '_exp02/characters/tool_users/aviak_eagle_king_light', 0), + (5910, 5910, '_exp02/characters/tool_users/aviak_eagle_warrior_light', 0), + (5911, 5911, '_exp02/characters/tool_users/hooluk_owl_mystic', 0), + (5912, 5912, 'accessories/wieldable_items/weapons/staff/anubis_staff/anubis_staff_plain', 0), + (5913, 5913, 'accessories/wearable_items/profesion_hats/shadowknight/shadowknight_01/head', 0), + (5914, 5914, 'creatures/pets/wyrm_fire', 0), + (5915, 5915, '_exp02/characters/monsters/dragon_evil_tint01', 0), + (5916, 5916, '_exp02/characters/monsters/dragon_good_albino', 0), + (5917, 5917, '_exp02/characters/monsters/dragon_good_tint01', 0), + (5918, 5918, '_exp02/characters/monsters/beholder', 0), + (5919, 5919, '_exp02/characters/monsters/tarranax', 0), + (5920, 5920, 'accessories/wieldable_items/weapons/great_sword/qeynos_claymore_sword/qeynos_claymore_sword', 0), + (5921, 5921, 'accessories/wearable_items/profesion_hats/wizard/wizard_01/head', 0), + (5922, 5922, 'staticobjects/interiors/scenes/objects_race/dp_objects/nests/beehive01', 0), + (5923, 5923, 'staticobjects/interiors/scenes/objects_race/dp_objects/nests/beehive02', 0), + (5924, 5924, 'staticobjects/interiors/scenes/objects_race/dp_objects/nests/beehive03', 0), + (5925, 5925, 'accessories/wearable_items/_exp08/dragon_armor/chain-scale_shadow/legs_noskirt', 1096), + (5926, 5926, 'projectiles/exp02/hof_molotov_cocktail', 0), + (5927, 5927, '_exp02/characters/tool_users/vultak_vulture_spellcaster', 0), + (5928, 5928, 'staticobjects/flora/rocks/commonlands/commonlands_central/scenes/nbhum_rock01', 0), + (5929, 5929, '_exp02/zones/objects/jail_cells/los_jail_cell_piece01', 0), + (5930, 5930, 'accessories/wieldable_items/weapons/great_spear/wyrmslayer/exp02_wyrmslayer', 0), + (5931, 5931, 'accessories/wearable_items/_exp08/dragon_armor/chain-scale_shadow/shoulders', 1096), + (5932, 5932, 'accessories/wieldable_items/weapons/staff/djinn_staff/djinn_staff_plain', 0), + (5933, 5933, 'accessories/wieldable_items/weapons/sword/katana/katana_plain', 0), + (5934, 5934, 'accessories/wieldable_items/weapons/sword/katana/katana_ornate', 0), + (5935, 5935, 'accessories/wieldable_items/weapons/great_sword/dragon_katana/dragon_katana_plain', 0), + (5936, 5936, 'accessories/wieldable_items/weapons/great_sword/dragon_katana/dragon_katana_ornate', 0), + (5937, 5937, 'accessories/wieldable_items/weapons/staff/escrima/escrima001_plain', 0), + (5938, 5938, 'accessories/wieldable_items/weapons/staff/escrima/escrima002_ornate', 0), + (5939, 5939, '_exp02/characters/tool_users/aviak_eagle_white', 0), + (5940, 5940, '_exp02/characters/tool_users/aviak_eagle_dark', 0), + (5941, 5941, '_exp02/zones/objects/dragon_statues/ls_statue_dragon_bust01', 0), + (5942, 5942, 'accessories/wearable_items/profesion_hats/swashbuckler/swashbuckler_01/head', 0), + (5943, 5943, 'accessories/wearable_items/_exp08/dragon_armor/chain-scale_shadow/shoulders_epic', 1096), + (5944, 5944, 'accessories/wearable_items/_exp08/dragon_armor/leather1/skirt', 1096), + (5945, 5945, '_exp02/characters/tool_users/vultak_vulture_king', 0), + (5946, 5946, '_exp02/characters/monsters/carnivorous_plant', 0), + (5947, 5947, '_exp02/characters/tool_users/draconian', 0), + (5948, 5948, '_exp02/zones/objects/bottles/glass_vial001_rusty', 0), + (5949, 5949, 'accessories/wearable_items/profesion_hats/inquisitor/inquisitor_01/head', 0), + (5950, 5950, 'accessories/wearable_items/_exp08/dragon_armor/leather1/chest', 1096), + (5951, 5951, 'accessories/wearable_items/christmas_hats/santa_hat/head', 0), + (5952, 5952, '_exp02/zones/objects/lift/sos_lift_platform', 0), + (5953, 5953, '_exp02/characters/tool_users/vultak_vulture_warrior', 0), + (5954, 5954, '_exp02/zones/objects/dragon_statues/ls_statue_dragon01', 0), + (5955, 5955, '_exp02/characters/monsters/harla_dar', 0), + (5956, 5956, 'staticobjects/liveevent/rainbow_bridge', 0), + (5957, 5957, 'staticobjects/liveevent/dpo_bucket_snowballs01', 0), + (5958, 5958, 'staticobjects/liveevent/dpo_holiday05_stocking_green', 0), + (5959, 5959, 'staticobjects/liveevent/dpo_holiday05_stocking_red', 0), + (5960, 5960, 'staticobjects/liveevent/dpo_holiday05_stocking_redgold', 0), + (5961, 5961, 'staticobjects/liveevent/dpo_holiday_candlegroup01_bluesilver', 0), + (5962, 5962, 'staticobjects/liveevent/dpo_holiday_candlegroup01_redgreen', 0), + (5963, 5963, 'staticobjects/liveevent/dpo_holiday_candlegroup02_bluesilver', 0), + (5964, 5964, 'staticobjects/liveevent/dpo_holiday_wallcandles01_gold', 0), + (5965, 5965, 'staticobjects/liveevent/dpo_holiday_wallcandles01_silver', 0), + (5966, 5966, 'accessories/wearable_items/_exp08/dragon_armor/leather1/feet', 1096), + (5967, 5967, 'staticobjects/liveevent/dpo_present01_medium', 0), + (5968, 5968, 'staticobjects/liveevent/dpo_present01_small', 0), + (5969, 5969, 'staticobjects/liveevent/dpo_present02_big', 0), + (5970, 5970, 'staticobjects/liveevent/dpo_present02_medium', 0), + (5971, 5971, 'staticobjects/liveevent/dpo_present_group01', 0), + (5972, 5972, 'staticobjects/liveevent/dpo_present_group02', 0), + (5973, 5973, 'staticobjects/liveevent/dpo_snowglobe_freeport01', 0), + (5974, 5974, 'staticobjects/liveevent/dpo_snowglobe_qeynos01', 0), + (5975, 5975, 'staticobjects/liveevent/dpo_snowman01', 0), + (5976, 5976, 'staticobjects/liveevent/dpo_snowwoman01', 0), + (5977, 5977, 'staticobjects/liveevent/dpo_present01_big', 0), + (5978, 5978, 'staticobjects/boxes/floor_collectionbox_any_ornate01', 0), + (5979, 5979, 'staticobjects/boxes/floor_collectionbox_any_ornate02', 0), + (5980, 5980, 'staticobjects/boxes/floor_collectionbox_any_rough01', 0), + (5981, 5981, 'staticobjects/boxes/floor_collectionbox_any_wood02', 0), + (5982, 5982, 'staticobjects/liveevent/dpo_everfrost_wonderlandwalls01', 0), + (5983, 5983, 'staticobjects/liveevent/dpo_holiday_candycane_large01', 0), + (5984, 5984, 'staticobjects/liveevent/dpo_holiday_candycane_large02', 0), + (5985, 5985, 'staticobjects/liveevent/dpo_holiday_candycane_small01', 0), + (5986, 5986, 'staticobjects/liveevent/dpo_holiday_candycane_small02', 0), + (5987, 5987, 'creatures/tu/invisible_soldier_tu', 0), + (5988, 5988, 'accessories/wearable_items/pauldrons/evil01/pauldron_evil01', 0), + (5989, 5989, 'accessories/wearable_items/pauldrons/evil01/shoulders_pauldron_evil01', 0), + (5990, 5990, 'staticobjects/liveevent/christmas_tree01', 0), + (5991, 5991, 'staticobjects/weapons/dpo_voulge001_ornate', 0), + (5992, 5992, '_exp02/characters/monsters/gold_flyingsnake', 0), + (5993, 5993, '_exp02/characters/tool_users/draconian_skeleton', 0), + (5994, 5994, 'creatures/monsters/wyrm_undead', 0), + (5995, 5995, 'creatures/monsters/drake_undead', 0), + (5996, 5996, 'staticobjects/dpo_invisible_wall/invisible_platform', 0), + (5997, 5997, 'creatures/mounts/carpet_nodraw', 0), + (5998, 5998, '_exp02/zones/objects/bookcases/ss_bookcase_ornate_ceiling01', 0), + (5999, 5999, '_exp02/zones/objects/bookcases/ss_bookcase_ornate01', 0), + (6000, 6000, '_exp02/zones/objects/chairs_benches/ls_chair_metal02', 0), + (6001, 6001, '_exp02/zones/objects/decorations/ls_decoration_wall_dragonhead01', 0), + (6002, 6002, 'accessories/wearable_items/_exp02/heavy_cloth_heroic/legs', 0), + (6003, 6003, 'creatures/monsters/flyingsnake_undead', 0), + (6004, 6004, 'creatures/monsters/drake_goowater', 0), + (6005, 6005, 'accessories/wearable_items/_exp02/heavy_cloth_heroic/shoulders', 0), + (6006, 6006, 'accessories/wearable_items/_exp08/dragon_armor/leather1/forearms', 1096), + (6007, 6007, 'accessories/wearable_items/_exp08/dragon_armor/leather1/hands', 1096), + (6008, 6008, '_exp02/characters/monsters/lord_vyemm', 0), + (6009, 6009, 'projectiles/spell_snowball', 0), + (6010, 6010, '_exp02/zones/objects/tents/dn_tent_red', 0), + (6011, 6011, '_exp02/characters/monsters/dragon_good_essence', 0), + (6012, 6012, 'accessories/wearable_items/pauldrons/evil02/pauldron_evil02', 0), + (6013, 6013, 'accessories/wearable_items/pauldrons/evil02/shoulders_pauldron_evil02', 0), + (6014, 6014, '_exp02/characters/tool_users/draconian_assassin', 0), + (6015, 6015, '_exp02/characters/tool_users/draconian_warlord', 0), + (6016, 6016, '_exp02/characters/tool_users/draconian_wizard', 0), + (6017, 6017, '_exp02/characters/tool_users/draconian_undead', 0), + (6018, 6018, 'creatures/monsters/ground_dragon_ghost_pc', 0), + (6019, 6019, '_exp02/zones/objects/lift/rd_ter_palace_floater', 0), + (6020, 6020, 'accessories/wearable_items/_exp08/dragon_armor/leather1/head', 1096), + (6021, 6021, 'accessories/wearable_items/profesion_hats/animal_hide/animal_hide_01/head', 0), + (6022, 6022, 'accessories/wearable_items/profesion_hats/ranger/ranger_01/head', 0), + (6023, 6023, 'staticobjects/monuments/fprt_lucanstatue_pedestal', 0), + (6024, 6024, '_exp02/zones/objects/plants/rn_stinkweed_bud01', 0), + (6025, 6025, 'staticobjects/spires/spire_construction_1', 0), + (6026, 6026, 'staticobjects/spires/spire_construction_2', 0), + (6027, 6027, 'staticobjects/spires/spire_construction_3', 0), + (6028, 6028, 'staticobjects/spires/spire_construction_4', 0), + (6029, 6029, 'staticobjects/spires/spire_construction_5', 0), + (6030, 6030, '_exp02/zones/objects/eggs/ls_dragoneggs_broken', 0), + (6031, 6031, '_exp02/zones/objects/eggs/ls_dragoneggs_mixed', 0), + (6032, 6032, '_exp02/zones/objects/eggs/ls_dragoneggs_unbroken', 0), + (6033, 6033, '_exp02/characters/monsters/basilisk_undead', 0), + (6034, 6034, 'accessories/wearable_items/magus/robes/robe_newbie_tint01/chest', 0), + (6035, 6035, 'accessories/wearable_items/magus/robes/robe_newbie_tint01/hood', 0), + (6036, 6036, 'accessories/wearable_items/magus/robes/robe_newbie_tint01/pants', 0), + (6037, 6037, 'accessories/wearable_items/magus/robes/robe_newbie_tint01/skirt', 0), + (6038, 6038, '_exp02/zones/objects/doors/sos_wood_door', 0), + (6039, 6039, 'accessories/wearable_items/profesion_hats/paladin/paladin_01/head', 0), + (6040, 6040, '_exp02/characters/tool_users/hooluk_owl', 0), + (6041, 6041, '_exp02/characters/tool_users/hooluk_owl_hood', 0), + (6042, 6042, '_exp02/zones/objects/doors/hf_door01', 0), + (6043, 6043, '_exp02/zones/objects/doors/hf_door02', 0), + (6044, 6044, '_exp02/zones/objects/eggs/hf_egg_single_blue_upright01', 0), + (6045, 6045, '_exp02/zones/objects/eggs/hf_egg_single_bronze_upright01', 0), + (6046, 6046, 'accessories/wieldable_items/weapons/fist/chakram/chakram_plain', 0), + (6047, 6047, 'accessories/wearable_items/_exp02/leather_heavy/chest', 0), + (6048, 6048, 'accessories/wearable_items/_exp02/leather_heavy/feet', 0), + (6049, 6049, 'accessories/wearable_items/_exp02/leather_heavy/forearms', 0), + (6050, 6050, 'accessories/wearable_items/_exp02/leather_heavy/hands', 0), + (6051, 6051, 'accessories/wearable_items/_exp02/leather_heavy/head', 0), + (6052, 6052, 'accessories/wearable_items/_exp02/leather_heavy/legs', 0), + (6053, 6053, 'accessories/wearable_items/_exp02/leather_heavy/legs_noskirt', 0), + (6054, 6054, 'accessories/wearable_items/_exp02/leather_heavy/shoulders', 0), + (6055, 6055, 'accessories/wearable_items/_exp02/leather_heavy/skirt', 0), + (6056, 6056, 'staticobjects/mirrors/dpo_djn_mirror_translocation01', 0), + (6057, 6057, 'accessories/wieldable_items/weapons/great_sword/dragon_katana/exp02_dragon_katana_ornate_fire', 0), + (6058, 6058, '_exp02/zones/objects/dragon_bones/rn_bones_dragon_skullfull01', 0), + (6059, 6059, '_exp02/zones/objects/dragon_bones/rn_bones_dragon_verte01', 0), + (6060, 6060, 'accessories/wearable_items/_exp02/vanguard_chitin/legs_noskirt', 0), + (6061, 6061, 'accessories/wearable_items/_exp02/vanguard_chitin/right', 0), + (6062, 6062, 'accessories/wearable_items/_exp02/vanguard_chitin/shoulders', 0), + (6063, 6063, 'accessories/wearable_items/_exp02/vanguard_chitin/shoulders_nopauldrons', 0), + (6064, 6064, 'accessories/wearable_items/_exp02/vanguard_chitin/skirt', 0), + (6065, 6065, 'accessories/wearable_items/_exp02/vanguard_chitin/head', 0), + (6066, 6066, 'accessories/wearable_items/_exp02/vanguard_chitin/legs', 0), + (6067, 6067, 'accessories/wearable_items/_exp02/vanguard_chitin/feet', 0), + (6068, 6068, 'accessories/wearable_items/_exp02/vanguard_chitin/forearms', 0), + (6069, 6069, 'accessories/wearable_items/_exp02/vanguard_chitin/chest', 0), + (6070, 6070, 'accessories/wearable_items/_exp02/vanguard_chitin/hands', 0), + (6071, 6071, 'accessories/wieldable_items/weapons/ghost_weapons/exp02_wand001_ghost_magic', 0), + (6072, 6072, 'accessories/wieldable_items/weapons/dagger/dirk/exp02_dirk002_magic', 0), + (6073, 6073, 'accessories/wieldable_items/weapons/staff/djinn_staff/exp02_djinn_staff_fire', 0), + (6074, 6074, 'accessories/wieldable_items/weapons/hammer/lotus_sceptre/exp02_lotus_sceptre_red_sparkles', 0), + (6075, 6075, '_exp02/zones/objects/chests/hf_chest_reliquary_bones01', 0), + (6076, 6076, '_exp02/zones/objects/chests/hf_chest_reliquary_bones02', 0), + (6077, 6077, 'accessories/wieldable_items/weapons/axe/pick_axe/pick_axe01', 0), + (6078, 6078, 'accessories/wearable_items/_exp08/dragon_armor/leather1/legs', 1096), + (6079, 6079, '_exp02/zones/objects/light_sources/dn_lightsource_orb01_purple', 0), + (6080, 6080, 'staticobjects/pictures/fprt_ph_painting_eq1_vertical23_greenmonument_l0', 0), + (6081, 6081, 'accessories/wearable_items/_exp02/plate_heroic/shoulders', 0), + (6082, 6082, 'accessories/wearable_items/_exp02/plate_heroic/chest', 0), + (6083, 6083, 'accessories/wearable_items/_exp02/plate_heroic/feet', 0), + (6084, 6084, 'accessories/wearable_items/_exp02/plate_heroic/forearms', 0), + (6085, 6085, 'accessories/wearable_items/_exp02/plate_heroic/hands', 0), + (6086, 6086, 'accessories/wearable_items/_exp02/plate_heroic/head', 0), + (6087, 6087, 'accessories/wearable_items/_exp02/plate_heroic/legs', 0), + (6088, 6088, '_exp02/zones/objects/eggs/sos_dragoneggs_broken_blue', 0), + (6089, 6089, '_exp02/zones/objects/gears/gear_single', 0), + (6090, 6090, '_exp02/characters/monsters/beholder_illusion', 0), + (6091, 6091, '_exp02/characters/monsters/carnivorous_plant_illusion', 0), + (6092, 6092, '_exp02/zones/objects/bookcases/hf_bookcase_largeornate01', 0), + (6093, 6093, '_exp02/zones/objects/bookcases/hf_bookcase_largeornate02', 0), + (6094, 6094, '_exp02/zones/objects/chairs_benches/hf_bench_ornate01_global', 0), + (6095, 6095, '_exp02/zones/objects/chairs_benches/ls_chair_metal01', 0), + (6096, 6096, '_exp02/zones/objects/chairs_benches/rd_chair_vulture_papasan01', 0), + (6097, 6097, '_exp02/zones/objects/chairs_benches/ls_chair_metal02_global', 0), + (6098, 6098, '_exp02/zones/objects/chests/ls_chest_metal01_global', 0), + (6099, 6099, '_exp02/zones/objects/desks/hf_desk_ornate01_global', 0), + (6100, 6100, '_exp02/zones/objects/fountain/sos_fountain_birdbath_floor', 0), + (6101, 6101, '_exp02/zones/objects/fountain/sos_fountain_birdbath_wall', 0), + (6102, 6102, '_exp02/zones/objects/light_sources/ls_lamp_metal_blue', 0), + (6103, 6103, '_exp02/zones/objects/light_sources/ls_lightsource_walltorch02', 0), + (6104, 6104, '_exp02/zones/objects/rugs/ls_ring_scales01', 0), + (6105, 6105, '_exp02/zones/objects/sculptures/hf_decoration_scrimshawfang_floor01', 0), + (6106, 6106, '_exp02/zones/objects/sculptures/hf_decoration_scrimshawfang_floor02', 0), + (6107, 6107, '_exp02/zones/objects/sculptures/ls_sculpture_glass02', 0), + (6108, 6108, '_exp02/zones/objects/sculptures/ls_sculpture_glass03', 0), + (6109, 6109, '_exp02/zones/objects/sculptures/ls_sculpture_glass_double01', 0), + (6110, 6110, '_exp02/zones/objects/sculptures/ls_sculpture_glass_double02', 0), + (6111, 6111, '_exp02/zones/objects/sculptures/sos_orb_gazing01', 0), + (6112, 6112, '_exp02/zones/objects/statues/ls_statue_dragon01', 0), + (6113, 6113, '_exp02/zones/objects/statues/ls_statue_dragon02', 0), + (6114, 6114, '_exp02/zones/objects/statues/ls_statue_dragon_bust01', 0), + (6115, 6115, '_exp02/zones/objects/tables/ls_table_long01', 0), + (6116, 6116, '_exp02/zones/objects/tables/ls_table_long02', 0), + (6117, 6117, '_exp02/zones/objects/tables/ls_table_short01', 0), + (6118, 6118, '_exp02/zones/objects/tables/ls_table_short02', 0), + (6119, 6119, '_exp02/zones/objects/tables/sos_aviak_table01', 0), + (6120, 6120, '_exp02/zones/objects/tapestry/ls_tapestry_awakened_cult01', 0), + (6121, 6121, '_exp02/zones/objects/tapestry/ls_tapestry_kerafyrm_apocalypse01', 0), + (6122, 6122, '_exp02/zones/objects/tapestry/ls_tapestry_kerafyrm_awakening01', 0), + (6123, 6123, 'accessories/wearable_items/_exp02/woven_monk/chest', 0), + (6124, 6124, 'accessories/wearable_items/_exp02/woven_monk/feet', 0), + (6125, 6125, 'accessories/wearable_items/_exp02/woven_monk/forearms', 0), + (6126, 6126, 'accessories/wearable_items/_exp02/woven_monk/hands', 0), + (6127, 6127, 'accessories/wearable_items/_exp02/woven_monk/head', 0), + (6128, 6128, 'accessories/wearable_items/_exp02/woven_monk/legs', 0), + (6129, 6129, 'accessories/wearable_items/_exp02/woven_monk/legs_noskirt', 0), + (6130, 6130, 'accessories/wearable_items/_exp02/woven_monk/shoulders', 0), + (6131, 6131, 'accessories/wearable_items/_exp02/woven_monk/skirt', 0), + (6132, 6132, 'accessories/wieldable_items/weapons/bow/long_bow/exp02_long_bow001_runic_soulseeker', 0), + (6133, 6133, 'accessories/wieldable_items/weapons/great_spear/scythe_dragon_tooth/exp02_scythe_dragon_tooth_spine', 0), + (6134, 6134, 'accessories/wieldable_items/weapons/hammer/crab_sceptre/exp02_crab_sceptre_destruction', 0), + (6135, 6135, 'accessories/wieldable_items/weapons/talisman/tablet/exp02_tablet002_ornate_runes', 0), + (6136, 6136, 'accessories/wieldable_items/shields/kite_shield/kite_shield_freeport/exp02_kite_shield_flesh', 0), + (6137, 6137, 'accessories/wieldable_items/weapons/bow/short_bow/exp02_short_bow001_runic_heartstinger', 0), + (6138, 6138, 'accessories/wearable_items/_exp02/brigandine_heavy/chest', 0), + (6139, 6139, 'accessories/wearable_items/_exp02/brigandine_heavy/feet', 0), + (6140, 6140, 'accessories/wearable_items/_exp02/brigandine_heavy/forearms', 0), + (6141, 6141, 'accessories/wearable_items/_exp02/brigandine_heavy/hands', 0), + (6142, 6142, 'accessories/wearable_items/_exp02/brigandine_heavy/head', 0), + (6143, 6143, 'accessories/wearable_items/_exp02/brigandine_heavy/legs', 0), + (6144, 6144, 'accessories/wearable_items/_exp02/brigandine_heavy/shoulders', 0), + (6145, 6145, 'staticobjects/spires/spire_construction_6', 0), + (6146, 6146, 'creatures/monsters/root_horror_exp02', 0), + (6147, 6147, 'staticobjects/spires/dpo_teleportspires_houseitem01', 0), + (6148, 6148, 'projectiles/bone_human_skull01', 0), + (6149, 6149, 'accessories/wieldable_items/weapons/great_axe/executioner_axe/exp02_executioner_axe002_helmsplitter', 0), + (6150, 6150, 'accessories/wieldable_items/weapons/great_axe/halberd/halberd001_runic_anuk', 0), + (6151, 6151, 'accessories/wieldable_items/weapons/staff/cobra_staff/cobra_staff_plain_anuk', 0), + (6152, 6152, 'accessories/wieldable_items/weapons/hammer/eagle_sceptre/eagle_sceptre_plain_anuk', 0), + (6153, 6153, 'accessories/wieldable_items/weapons/rapier/epee/epee001_runic_anuk', 0), + (6154, 6154, 'accessories/wieldable_items/weapons/hammer/amber_sceptre/amber_sceptre_plain_anuk', 0), + (6155, 6155, 'accessories/wearable_items/_exp02/robe_fire/chest', 0), + (6156, 6156, 'accessories/wearable_items/_exp02/robe_fire/hood', 0), + (6157, 6157, 'accessories/wearable_items/_exp02/robe_fire/pants', 0), + (6158, 6158, 'accessories/wearable_items/_exp02/robe_fire/skirt', 0), + (6159, 6159, 'staticobjects/dpo_invisible_cube/dpo_invisible_cube_cached', 0), + (6160, 6160, 'accessories/wearable_items/_exp02/heavy_cloth_heroic/chest', 0), + (6161, 6161, 'accessories/wearable_items/_exp02/heavy_cloth_heroic/feet', 0), + (6162, 6162, 'accessories/wearable_items/_exp02/heavy_cloth_heroic/forearms', 0), + (6163, 6163, 'accessories/wearable_items/_exp02/heavy_cloth_heroic/hands', 0), + (6164, 6164, 'accessories/wearable_items/_exp08/dragon_armor/leather1/legs_noskirt', 1096), + (6165, 6165, 'accessories/wieldable_items/weapons/great_spear/droag_butchering_tools/droag_butcher01', 0), + (6166, 6166, 'accessories/wieldable_items/weapons/great_spear/droag_butchering_tools/droag_butcher02', 0), + (6167, 6167, 'accessories/wieldable_items/weapons/great_spear/droag_butchering_tools/droag_butcher03', 0), + (6168, 6168, '_exp02/zones/objects/light_sources/hf_lightsource_brazier_blue01', 0), + (6169, 6169, 'accessories/wearable_items/_exp02/chain_heroic/chest', 0), + (6170, 6170, 'accessories/wearable_items/_exp02/chain_heroic/feet', 0), + (6171, 6171, 'accessories/wearable_items/_exp02/chain_heroic/forearms', 0), + (6172, 6172, 'accessories/wearable_items/_exp02/chain_heroic/hands', 0), + (6173, 6173, 'accessories/wearable_items/_exp02/chain_heroic/head', 0), + (6174, 6174, 'accessories/wearable_items/_exp02/chain_heroic/legs', 0), + (6175, 6175, 'accessories/wearable_items/_exp02/chain_heroic/legs_noskirt', 0), + (6176, 6176, 'accessories/wearable_items/_exp02/chain_heroic/shoulders', 0), + (6177, 6177, 'accessories/wearable_items/_exp02/chain_heroic/skirt', 0), + (6178, 6178, 'accessories/wieldable_items/weapons/sword/long_sword/exp02_long_sword_of_rage', 0), + (6179, 6179, 'accessories/wieldable_items/weapons/dagger/embalming_blade/exp02_embalming_blade_vyemms_fang', 0), + (6180, 6180, 'accessories/wieldable_items/weapons/great_sword/vampire_greatsword/exp02_vampire_greatsword_gaudralek', 0), + (6181, 6181, 'accessories/wieldable_items/weapons/hammer/mace_obsidian_edged/exp02_mace_dragonrib_club', 0), + (6182, 6182, 'accessories/wieldable_items/weapons/great_hammer/war_hammer/exp02_war_hammer001_sledge_of_smashing', 0), + (6183, 6183, 'accessories/wieldable_items/weapons/axe/small_dwarf/exp02_dwarf_axe_frostwrath', 0), + (6184, 6184, 'accessories/wieldable_items/weapons/bow/short_bow/exp02_short_bow001_wurm_destroyer', 0), + (6185, 6185, 'accessories/wieldable_items/weapons/staff/scorcerers_staff/exp02_staff_of_the_silent_star', 0), + (6186, 6186, '_exp02/zones/objects/crystals/dp_crystal_shard01', 0), + (6187, 6187, '_exp01/zones/objects/containers/dpo_brownweave_basket01', 0), + (6188, 6188, 'accessories/wearable_items/_exp02/vanguard_chitin/exp02_chest_parasite', 0), + (6189, 6189, 'accessories/wieldable_items/misc/stein002_ichor', 0), + (6190, 6190, 'accessories/wieldable_items/shields/buckler_shield/streatched_leather_buckler/streatched_leather_buckler001_spikes', 0), + (6191, 6191, 'accessories/wieldable_items/shields/ghost_shields/round_shield_etched001_mists', 0), + (6192, 6192, 'accessories/wieldable_items/shields/round_shield/metal_etched_round/round_shield_etched001_retina', 0), + (6193, 6193, 'accessories/wieldable_items/shields/round_shield/metal_round/metal_round_shield001_flameshield', 0), + (6194, 6194, 'accessories/wieldable_items/shields/tower_shield/wooden_tower_shield/wooden_tower_shield001_viscera', 0), + (6195, 6195, 'accessories/wieldable_items/weapons/axe/axe_curved_handle/axe_curved_handle_ascendant', 0), + (6196, 6196, 'accessories/wieldable_items/weapons/great_sword/scimitar_broad_sword/scimitar_broad_sword001_runic', 0), + (6197, 6197, 'accessories/wieldable_items/weapons/great_sword/scimitar_broad_sword/scimitar_broad_sword001_pride', 0), + (6198, 6198, 'accessories/wieldable_items/weapons/throwing_weapons/spike/exp02_spike004_spine', 0), + (6199, 6199, '_exp02/zones/objects/aviak_totems/sos_totem_aviak_dualwieldaxe01', 0), + (6200, 6200, '_exp02/zones/objects/aviak_totems/sos_totem_aviak_dualwieldswordshield01', 0), + (6201, 6201, '_exp02/zones/regions/realm_of_dawn/rd_rock_small01', 0), + (6202, 6202, '_exp02/zones/regions/realm_of_dawn/rd_rock_small04', 0), + (6203, 6203, 'accessories/wearable_items/profesion_hats/brigand_hat/head', 0), + (6204, 6204, '_exp02/zones/regions/realm_of_dawn/rd_arena_warp_cylinder01', 0), + (6205, 6205, 'accessories/wieldable_items/weapons/dagger/parrying_blade/exp02_parrying_blade001_talon', 0), + (6206, 6206, 'accessories/wieldable_items/weapons/talisman/orb/orb001_soulless', 0), + (6207, 6207, 'accessories/wieldable_items/weapons/fist/cestus/spiked_cestus002_bone', 0), + (6208, 6208, 'accessories/wieldable_items/weapons/great_spear/droag_butchering_tools/droag_butcher_render', 0), + (6209, 6209, 'accessories/wieldable_items/weapons/great_hammer/morning_star/morning_star001_dominance', 0), + (6210, 6210, 'accessories/wieldable_items/weapons/bow/short_bow/exp02_short_bow001_ichorstrand', 0), + (6211, 6211, 'accessories/wieldable_items/weapons/great_hammer/orc_hammer/exp02_orc_hammer_spinesnapper', 0), + (6212, 6212, 'accessories/wieldable_items/weapons/great_sword/broad_sword/exp02_broad_sword002_runic', 0), + (6213, 6213, 'accessories/wieldable_items/shields/buckler_shield/buckler_fae/buckler_fae_01', 0), + (6214, 6214, 'accessories/wieldable_items/weapons/dagger/embalming_blade/exp02_embalming_blade_dragonfang', 0), + (6215, 6215, 'accessories/wieldable_items/weapons/dagger/kris/exp02_kris001_absolution', 0), + (6216, 6216, 'accessories/wieldable_items/weapons/great_spear/droag_butchering_tools/droag_butcher_manslayer', 0), + (6217, 6217, 'accessories/wieldable_items/weapons/great_sword/greatsword/exp02_greatsword002_runeblade', 0), + (6218, 6218, 'accessories/wieldable_items/weapons/fist/katar/exp02_katar002_twin_calamities1', 0), + (6219, 6219, 'accessories/wieldable_items/weapons/hammer/crab_sceptre/exp02_crab_sceptre_doomsworn', 0), + (6220, 6220, 'accessories/wieldable_items/weapons/spear/one_handed_spear/exp02_barbed_spear_skewer', 0), + (6221, 6221, 'accessories/wieldable_items/weapons/rapier/rapier/exp02_rapier001_conflagrant', 0), + (6222, 6222, 'accessories/wieldable_items/weapons/sword/long_sword/exp02_long_sword_annealed_defender', 0), + (6223, 6223, 'accessories/wieldable_items/weapons/sword/katana/exp02_katana_oblivions_edge', 0), + (6224, 6224, 'accessories/wieldable_items/weapons/hammer/battlehammer/exp02_battlehammer_doomhammer', 0), + (6225, 6225, 'accessories/wieldable_items/weapons/sword/scimitar/exp02_scimitar001_accord_blade', 0), + (6226, 6226, '_exp02/zones/objects/orbs/sos_orb_gazing01', 0), + (6227, 6227, 'accessories/wieldable_items/weapons/great_spear/wyrmslayer/exp02_wyrmslayer_magic', 0), + (6228, 6228, 'accessories/wieldable_items/weapons/great_spear/wyrmslayer/exp02_wyrmslayer_rusty', 0), + (6229, 6229, '_exp03/characters/tool_users/orc_crushbone/orc_crushbone_soldier_bald', 0), + (6230, 6230, 'accessories/wearable_items/_exp08/dragon_armor/leather1/shoulders', 1096), + (6231, 6231, 'ec/pc/fae_wings/fae_wing01', 0), + (6232, 6232, 'ec/pc/fae_wings/fae_wing02', 0), + (6233, 6233, 'ec/pc/fae_wings/fae_wing03', 0), + (6234, 6234, 'accessories/wearable_items/_exp08/dragon_armor/leather1/shoulders_epic', 1096), + (6235, 6235, 'accessories/wearable_items/profesion_hats/troubadour/troubadour_01/head', 0), + (6236, 6236, '_exp02/zones/objects/weapon_racks_displays/ls_minion_weapons_armorstand01', 0), + (6237, 6237, 'accessories/wieldable_items/weapons/bow/long_bow/exp02_long_bow001_dragonhorn_recurve', 0), + (6238, 6238, 'accessories/wieldable_items/weapons/dagger/dirk/exp02_dirk002_mordiggian', 0), + (6239, 6239, 'accessories/wieldable_items/weapons/dagger/jambiya/exp02_jambiya_blade_numinos', 0), + (6240, 6240, 'accessories/wieldable_items/weapons/fist/cestus/exp02_spiked_cestus002_fist', 0), + (6241, 6241, 'accessories/wieldable_items/weapons/great_axe/bardiche/exp02_bardiche01_ashbringer', 0), + (6242, 6242, 'accessories/wieldable_items/weapons/hammer/mace_obsidian_edged/exp02_mace_obsidian_obscenity', 0), + (6243, 6243, 'accessories/wieldable_items/weapons/sword/scimitar/exp02_scimitar001_hierophant', 0), + (6244, 6244, '_exp03/characters/tool_users/orc_crushbone/orc_crushbone_warlord', 0), + (6245, 6245, 'accessories/wearable_items/profesion_hats/templar/templar_helm_01/head', 0), + (6246, 6246, 'accessories/wieldable_items/weapons/ghost_weapons/war_hammer002_ornate_ghost', 0), + (6247, 6247, 'accessories/wieldable_items/shields/tower_shield/qeynos_guard_tower_shield/exp02_qeynos_guard_tower_shield_plain', 0), + (6248, 6248, 'accessories/wieldable_items/weapons/hammer/cudgel/exp02_cudgel002_ornate', 0), + (6249, 6249, 'accessories/wieldable_items/weapons/sword/qeynos_cutlass/exp02_qeynos_cutlass', 0), + (6250, 6250, 'accessories/wearable_items/profesion_hats/berserker/berserker_helm_01/head', 0), + (6251, 6251, 'accessories/wieldable_items/shields/buckler_shield/qeynos_buckler/exp02_qeynos_buckler', 0), + (6252, 6252, 'accessories/wearable_items/profesion_hats/berserker/berserker_helm_02/head', 0), + (6253, 6253, '_exp03/characters/tool_users/orc_crushbone/orc_crushbone_scout', 0), + (6254, 6254, 'accessories/wieldable_items/weapons/fist/qeynos_wraps/exp02_qeynos_wraps', 0), + (6255, 6255, 'accessories/wieldable_items/shields/buckler_shield/qeynos_buckler/exp02_qeynos_buckler_red', 0), + (6256, 6256, 'creatures/monsters/goo_spikes', 0), + (6257, 6257, 'accessories/wearable_items/_exp08/dragon_armor/leather1_blue/skirt', 1096), + (6258, 6258, 'accessories/wearable_items/_exp08/dragon_armor/leather1_blue/chest', 1096), + (6259, 6259, '_exp03/characters/tool_users/orc_crushbone/orc_crushbone_mystic', 0), + (6260, 6260, 'accessories/wearable_items/_exp08/dragon_armor/leather1_blue/feet', 1096), + (6261, 6261, 'accessories/wearable_items/profesion_hats/dirge/dirge_01/head', 0), + (6262, 6262, 'staticobjects/racks/fprt_weaponrack_sword001', 0), + (6263, 6263, 'staticobjects/containers/fprt_crate_large_militaryboarded01', 0), + (6264, 6264, 'staticobjects/containers/fprt_crate_small_military01', 0), + (6265, 6265, 'staticobjects/weapons/fprt_weapons_arrowgroup01', 0), + (6266, 6266, 'staticobjects/weapons/fprt_weapons_tableshortbow01', 0), + (6267, 6267, 'staticobjects/weapons/fprt_weapons_tablethrowaxe01', 0), + (6268, 6268, 'accessories/wearable_items/_exp08/dragon_armor/leather1_blue/forearms', 1096), + (6269, 6269, 'accessories/wearable_items/_exp08/dragon_armor/leather1_blue/hands', 1096), + (6270, 6270, 'accessories/wearable_items/_exp08/dragon_armor/leather1_blue/head', 1096), + (6271, 6271, 'ec/pc/fae_wings/fae_wing04', 0), + (6272, 6272, 'ec/pc/fae_wings/fae_wing05', 0), + (6273, 6273, 'ec/pc/fae_wings/fae_wing06', 0), + (6274, 6274, 'ec/pc/fae_wings/fae_wing07', 0), + (6275, 6275, 'ec/pc/fae_wings/fae_wing08', 0), + (6276, 6276, 'ec/pc/fae_wings/fae_wing09', 0), + (6277, 6277, 'ec/pc/fae_wings/fae_wing10', 0), + (6278, 6278, 'ec/pc/fae_wings/fae_wing11', 0), + (6279, 6279, 'ec/pc/fae_wings/fae_wing12', 0), + (6280, 6280, '_exp03/characters/monsters/golem_crystal', 0), + (6281, 6281, '_exp03/characters/monsters/golem_magma', 0), + (6282, 6282, '_exp03/characters/monsters/golem_shambling_mound', 0), + (6283, 6283, '_exp03/characters/monsters/golem_marble', 0), + (6284, 6284, '_exp03/characters/monsters/golem_stone', 0), + (6285, 6285, '_exp03/characters/monsters/clockwork_menace', 0), + (6286, 6286, '_exp03/characters/monsters/copter_enforcer', 0), + (6287, 6287, '_exp03/characters/monsters/copter_fixer', 0), + (6288, 6288, '_exp03/characters/monsters/copter_welder', 0), + (6289, 6289, '_exp03/characters/monsters/stirge', 0), + (6290, 6290, '_exp03/characters/monsters/werewolf', 0), + (6291, 6291, '_exp03/characters/monsters/wood_elemental', 0), + (6292, 6292, 'accessories/wearable_items/starter_clothes/fae_male/arms', 0), + (6293, 6293, 'accessories/wearable_items/starter_clothes/fae_male/chest', 0), + (6294, 6294, 'accessories/wearable_items/starter_clothes/fae_male/legs', 0), + (6295, 6295, 'accessories/wearable_items/starter_clothes/fae_male/sleeves', 0), + (6296, 6296, 'accessories/wearable_items/starter_clothes/fae_female/arms', 0), + (6297, 6297, 'accessories/wearable_items/starter_clothes/fae_female/chest', 0), + (6298, 6298, 'accessories/wearable_items/starter_clothes/fae_female/legs', 0), + (6299, 6299, 'accessories/wearable_items/starter_clothes/fae_female/sleeves', 0), + (6300, 6300, 'accessories/wearable_items/_exp08/dragon_armor/leather1_blue/legs', 1096), + (6301, 6301, 'ap04/adv04_dun_end_of_endless/end_r143_int_door04', 0), + (6302, 6302, 'ap04/adv04_dun_end_of_endless/end_r149_int_backdoor01', 0), + (6303, 6303, 'accessories/wearable_items/_exp08/dragon_armor/leather1_blue/legs_noskirt', 1096), + (6304, 6304, 'staticobjects/tents/qey_tent03', 0), + (6305, 6305, 'soga_appearances/ec/npc/ghost_soga_vl_child_female01_h1', 0), + (6306, 6306, 'soga_appearances/ec/npc/ghost_soga_vl_child_male01_h2', 0), + (6307, 6307, 'soga_appearances/ec/npc/ghost_soga_vl_old_female01_h2', 0), + (6308, 6308, 'soga_appearances/ec/npc/ghost_soga_vl_old_male01_h1_b1', 0), + (6309, 6309, 'soga_appearances/ec/npc/ghost_soga_vl_young_female01_h2', 0), + (6310, 6310, 'soga_appearances/ec/npc/ghost_soga_vl_young_female02_h3', 0), + (6311, 6311, 'soga_appearances/ec/npc/ghost_soga_vl_young_male01_h1_b0', 0), + (6312, 6312, 'soga_appearances/ec/npc/ghost_soga_vl_young_male02_h2_b3', 0), + (6313, 6313, 'staticobjects/dpo_invisible_cube/dpo_invisible_cube_big', 0), + (6314, 6314, 'staticobjects/crystals/crystals_04', 0), + (6315, 6315, '_exp03/characters/monsters/bone_golem', 0), + (6316, 6316, 'accessories/wearable_items/profesion_hats/guardian/guardian_01/head', 0), + (6317, 6317, 'soga_appearances/ec/npc/tc_soga_vl_young_female01_h1', 0), + (6318, 6318, 'soga_appearances/ec/npc/tc_soga_vl_young_female01_h3', 0), + (6319, 6319, 'soga_appearances/ec/npc/tc_soga_vl_young_female03', 0), + (6320, 6320, 'soga_appearances/ec/npc/tc_soga_vl_young_male01_h0_b1', 0), + (6321, 6321, 'soga_appearances/ec/npc/tc_soga_vl_young_male01_h0_b2', 0), + (6322, 6322, 'soga_appearances/ec/npc/tc_soga_vl_young_male01_h1_b0', 0), + (6323, 6323, 'soga_appearances/ec/npc/tc_soga_vl_young_male01_h2_b0', 0), + (6324, 6324, 'staticobjects/freeport/fprt_a04_floatingplatform01', 0), + (6325, 6325, 'accessories/wieldable_items/weapons/great_hammer/morning_star/morning_star01_2h', 0), + (6326, 6326, 'accessories/wearable_items/profesion_hats/jester/jester_01/head', 0), + (6327, 6327, 'staticobjects/liveevent/diamond_ring_april', 0), + (6328, 6328, '_exp03/zones/objects/banners/sfm_kobold_banner01', 0), + (6329, 6329, '_exp03/zones/objects/beds/sfm_bed_single01', 0), + (6330, 6330, '_exp03/zones/objects/chairs/sfm_bench_ornate01', 0), + (6331, 6331, '_exp03/zones/objects/chairs/sfm_bench_ornate01_long', 0), + (6332, 6332, '_exp03/zones/objects/mechanical_parts/sfm_gear_panel01', 0), + (6333, 6333, '_exp03/zones/objects/mechanical_parts/sfm_gear_panel02', 0), + (6334, 6334, '_exp03/zones/objects/mechanical_parts/sfm_wrench01', 0), + (6335, 6335, '_exp03/zones/objects/tables/sfm_table_wood01', 0), + (6336, 6336, '_exp03/zones/objects/tables/sfm_table_woodround01', 0), + (6337, 6337, '_exp03/zones/objects/tents/sf_tent_kobold01', 0), + (6338, 6338, 'staticobjects/doors/arch_iron_grid', 0), + (6339, 6339, 'accessories/wieldable_items/soga_weapons/fighter/blade_of_fist', 0), + (6340, 6340, 'accessories/wieldable_items/soga_weapons/fighter/calamity_of_sky', 0), + (6341, 6341, 'accessories/wieldable_items/soga_weapons/fighter/destroyer', 0), + (6342, 6342, 'accessories/wieldable_items/soga_weapons/fighter/invincibility_of_eight', 0), + (6343, 6343, 'accessories/wieldable_items/soga_weapons/fighter/sword_of_nova', 0), + (6344, 6344, 'accessories/wieldable_items/soga_weapons/fighter/sword_of_serpent', 0), + (6345, 6345, 'accessories/wieldable_items/soga_weapons/mage/staff_of_blackwind', 0), + (6346, 6346, 'accessories/wieldable_items/soga_weapons/mage/staff_of_bloody', 0), + (6347, 6347, 'accessories/wieldable_items/soga_weapons/mage/staff_of_creator', 0), + (6348, 6348, 'accessories/wieldable_items/soga_weapons/mage/staff_of_elemental', 0), + (6349, 6349, 'accessories/wieldable_items/soga_weapons/mage/staff_of_octahedral', 0), + (6350, 6350, 'accessories/wieldable_items/soga_weapons/mage/staff_of_phenix', 0), + (6351, 6351, 'accessories/wieldable_items/soga_weapons/priest/deadman_call', 0), + (6352, 6352, 'accessories/wieldable_items/soga_weapons/priest/eternal_flame', 0), + (6353, 6353, 'accessories/wieldable_items/soga_weapons/priest/massive_hammer', 0), + (6354, 6354, 'accessories/wieldable_items/soga_weapons/priest/seal_of_templar', 0), + (6355, 6355, 'accessories/wieldable_items/soga_weapons/priest/the_holy_spirit', 0), + (6356, 6356, 'accessories/wieldable_items/soga_weapons/priest/thunder_blade', 0), + (6357, 6357, 'accessories/wieldable_items/soga_weapons/scout/dragon_sharp', 0), + (6358, 6358, 'accessories/wieldable_items/soga_weapons/scout/great_shark', 0), + (6359, 6359, 'accessories/wieldable_items/soga_weapons/scout/misty_silver', 0), + (6360, 6360, 'accessories/wieldable_items/soga_weapons/scout/silver_moon', 0), + (6361, 6361, 'accessories/wieldable_items/soga_weapons/scout/traceless', 0), + (6362, 6362, 'accessories/wieldable_items/soga_weapons/scout/wannish_dream', 0), + (6363, 6363, 'accessories/wieldable_items/soga_weapons/unique4/decree_executor', 0), + (6364, 6364, 'accessories/wieldable_items/soga_weapons/unique4/demon_eye_black', 0), + (6365, 6365, 'accessories/wieldable_items/soga_weapons/unique4/demon_eye_red', 0), + (6366, 6366, 'accessories/wieldable_items/soga_weapons/unique4/dragon_flame', 0), + (6367, 6367, 'accessories/wieldable_items/soga_weapons/unique4/flame_of_truth', 0), + (6368, 6368, 'accessories/wearable_items/clothing/common_tint01/chest', 0), + (6369, 6369, 'accessories/wearable_items/clothing/common_tint01/legs', 0), + (6370, 6370, 'accessories/wearable_items/clothing/common_tint01/shoulders', 0), + (6371, 6371, 'ec/npc/curt_schilling', 0), + (6372, 6372, 'ec/npc/curt_schilling_helm', 0), + (6373, 6373, 'staticobjects/adv04/end_r143_int_obj_brazier01', 0), + (6374, 6374, 'staticobjects/adv04/furniture/objects_004_bottle', 0), + (6375, 6375, 'staticobjects/adv04/furniture/objects_008_bottle', 0), + (6376, 6376, 'staticobjects/adv04/furniture/objects_009_bottle', 0), + (6377, 6377, 'staticobjects/adv04/furniture/objects_bamboo_capboard', 0), + (6378, 6378, 'staticobjects/adv04/furniture/objects_bamboo_chair', 0), + (6379, 6379, 'staticobjects/adv04/furniture/objects_bed', 0), + (6380, 6380, 'staticobjects/adv04/furniture/objects_bed_2', 0), + (6381, 6381, 'staticobjects/adv04/furniture/objects_big_square_desk', 0), + (6382, 6382, 'staticobjects/adv04/furniture/objects_circledesk', 0), + (6383, 6383, 'staticobjects/adv04/furniture/objects_circledesk_chair', 0), + (6384, 6384, 'staticobjects/adv04/furniture/objects_cupboard02', 0), + (6385, 6385, 'staticobjects/adv04/furniture/objects_desk_lamp', 0), + (6386, 6386, 'staticobjects/adv04/furniture/objects_small_square_chair', 0), + (6387, 6387, 'staticobjects/adv04/furniture/objects_small_square_desk', 0), + (6388, 6388, 'staticobjects/adv04/furniture/objects_wood_capboard', 0), + (6389, 6389, 'staticobjects/adv04/furniture/potted_bonsai_1', 0), + (6390, 6390, 'staticobjects/adv04/furniture/potted_bonsai_2', 0), + (6391, 6391, 'ap04/adv04_rgn_mystic_lake/lake_obj_humanstatue_01', 0), + (6392, 6392, 'creatures/tu/livingstatue_tc', 0), + (6393, 6393, 'accessories/wieldable_items/weapons/talisman/orb/adv04_orb001_necromantic', 0), + (6394, 6394, 'staticobjects/traps/befallen_spikes_trap', 0), + (6395, 6395, 'staticobjects/traps/cmmn_orccatpult_weight', 0), + (6396, 6396, 'accessories/wearable_items/profesion_hats/bruiser/bruiser_01/head', 0), + (6397, 6397, 'accessories/wieldable_items/misc/bottle_invisibleman', 0), + (6398, 6398, 'staticobjects/walls/nektropos_basement', 0), + (6399, 6399, 'accessories/wieldable_items/weapons/exp03/1h_crush/exp03_1hc_elven_scepter_plain', 0), + (6400, 6400, 'accessories/wieldable_items/weapons/exp03/1h_crush/exp03_1hc_human_skull_scepter_plain', 0), + (6401, 6401, 'accessories/wieldable_items/weapons/exp03/1h_crush/exp03_1hc_ivy_shrouded_glowing_orb', 0), + (6402, 6402, 'accessories/wieldable_items/weapons/exp03/1h_crush/exp03_1hc_kama_plain', 0), + (6403, 6403, 'accessories/wieldable_items/weapons/exp03/1h_crush/exp03_1hc_long_plain_wand', 0), + (6404, 6404, 'accessories/wieldable_items/weapons/exp03/1h_crush/exp03_1hc_particle_battlehammer_plain', 0), + (6405, 6405, 'accessories/wieldable_items/weapons/exp03/1h_crush/exp03_1hc_zombie_arm_club_animated', 0), + (6406, 6406, 'accessories/wieldable_items/weapons/exp03/1h_crush/exp03_1hc_zombie_arm_club_plain', 0), + (6407, 6407, 'accessories/wieldable_items/weapons/exp03/1h_pierce/exp03_1hp_unicorn_horn_dagger_plain', 0), + (6408, 6408, 'accessories/wieldable_items/weapons/exp03/1h_pierce/exp03_1hp_vampiric_sacrificial_dagger', 0), + (6409, 6409, 'accessories/wieldable_items/weapons/exp03/1h_sword/exp03_1hs_orc_machete_plain', 0), + (6410, 6410, 'accessories/wieldable_items/weapons/exp03/1h_sword/exp03_1hs_ornate_elven_rapier', 0), + (6411, 6411, 'accessories/wieldable_items/weapons/exp03/1h_sword/exp03_1hs_wakizashi_plain', 0), + (6412, 6412, 'accessories/wieldable_items/weapons/exp03/2h_sword/exp03_2hs_bugbear_rock_club', 0), + (6413, 6413, 'accessories/wieldable_items/weapons/exp03/2h_sword/exp03_2hs_bugbear_rock_sword', 0), + (6414, 6414, 'accessories/wieldable_items/weapons/exp03/bow/exp03_bow_giant_wooden_bow', 0), + (6415, 6415, 'accessories/wieldable_items/shields/exp03/exp03_diamond_shaped_round_shield_plain', 0), + (6416, 6416, 'accessories/wieldable_items/shields/exp03/exp03_high_elven_kite_shield_plain', 0), + (6417, 6417, 'staticobjects/liveevent/exp03/dpo_fear_gate', 0), + (6418, 6418, 'accessories/wieldable_items/weapons/exp03/1h_crush/exp03_1hc_wooden_vine_scepter_plain', 0), + (6419, 6419, 'staticobjects/containers/floor_vase_human_qey_lovingcup01', 0), + (6420, 6420, 'staticobjects/containers/floor_vase_human_marbleblack_med02', 0), + (6421, 6421, 'staticobjects/containers/floor_vase_human_obsidian_med01', 0), + (6422, 6422, 'staticobjects/chairs/floor_chair_solro_chair01', 0), + (6423, 6423, 'staticobjects/chairs/floor_chair_solro_chair02_wide', 0), + (6424, 6424, 'staticobjects/chests/floor_chest_orc_treasurechest01', 0), + (6425, 6425, 'staticobjects/torches/floor_torch_solro_tabletorch01', 0), + (6426, 6426, 'staticobjects/tables/floor_table_solro_square01', 0), + (6427, 6427, 'staticobjects/tables/floor_table_solro_long01', 0), + (6428, 6428, 'staticobjects/tables/floor_table_befallen_round01', 0), + (6429, 6429, 'staticobjects/chairs/floor_chair_befallen_office01', 0), + (6430, 6430, 'staticobjects/dressers/floor_closet_befallen_02', 0), + (6431, 6431, 'staticobjects/dressers/floor_armoire_befallen_01', 0), + (6432, 6432, 'staticobjects/beds/floor_bed_befallen_lord01', 0), + (6433, 6433, 'staticobjects/dressers/floor_closet_befallen_01', 0), + (6434, 6434, 'staticobjects/tables/floor_table_befallen_office01', 0), + (6435, 6435, 'staticobjects/tables/floor_table_befallen_square01', 0), + (6436, 6436, 'accessories/wieldable_items/soga_weapons/scout/dragon_sharp_magic_poison', 0), + (6437, 6437, 'accessories/wieldable_items/soga_weapons/scout/wannish_dream_smoking', 0), + (6438, 6438, 'accessories/wieldable_items/soga_weapons/fighter/invincibility_of_eight_magic_ninja', 0), + (6439, 6439, 'accessories/wieldable_items/soga_weapons/fighter/calamity_of_sky_magic', 0), + (6440, 6440, 'accessories/wieldable_items/soga_weapons/scout/silver_moon_magic_poison', 0), + (6441, 6441, 'creatures/tu/gelatinouscube_crate', 0), + (6442, 6442, 'staticobjects/liveevent/exp03/life_statue', 0), + (6443, 6443, 'staticobjects/liveevent/exp03/valor_statue', 0), + (6444, 6444, 'staticobjects/gravestones/gravestone12', 0), + (6445, 6445, 'creatures/monsters/dervish_stone', 0), + (6446, 6446, '_exp03/characters/tool_users/clockwork_protector', 0), + (6447, 6447, '_exp03/characters/tool_users/clockwork_soldier', 0), + (6448, 6448, '_exp03/characters/tool_users/kobold_caster_base', 0), + (6449, 6449, '_exp03/characters/tool_users/kobold_caster_hyena', 0), + (6450, 6450, '_exp03/characters/tool_users/kobold_caster_leopard', 0), + (6451, 6451, '_exp03/characters/tool_users/kobold_chieftan', 0), + (6452, 6452, '_exp03/characters/tool_users/kobold_soldier_base', 0), + (6453, 6453, '_exp03/characters/tool_users/kobold_soldier_hyena', 0), + (6454, 6454, '_exp03/characters/tool_users/kobold_soldier_leopard', 0), + (6455, 6455, '_exp03/characters/tool_users/kobold_woker_base', 0), + (6456, 6456, '_exp03/characters/tool_users/kobold_woker_hyena', 0), + (6457, 6457, '_exp03/characters/tool_users/kobold_woker_leopard', 0), + (6458, 6458, 'accessories/wieldable_items/weapons/exp03/1h_crush/exp03_1hc_wrench01', 0), + (6459, 6459, 'ec/pc/fae_wings/fae_wing01_t', 0), + (6460, 6460, 'ec/pc/fae_wings/fae_wing02_t', 0), + (6461, 6461, 'ec/pc/fae_wings/fae_wing03_t', 0), + (6462, 6462, 'ec/pc/fae_wings/fae_wing04_t', 0), + (6463, 6463, 'ec/pc/fae_wings/fae_wing05_t', 0), + (6464, 6464, 'ec/pc/fae_wings/fae_wing06_t', 0), + (6465, 6465, 'ec/pc/fae_wings/fae_wing07_t', 0), + (6466, 6466, 'ec/pc/fae_wings/fae_wing08_t', 0), + (6467, 6467, 'ec/pc/fae_wings/fae_wing09_t', 0), + (6468, 6468, 'ec/pc/fae_wings/fae_wing10_t', 0), + (6469, 6469, 'accessories/wearable_items/cloak/exp03/cloak_sq_01', 0), + (6470, 6470, 'staticobjects/doors/df_jaildoor01', 0), + (6471, 6471, 'staticobjects/crates/floor_crate05_any_wood', 0), + (6472, 6472, 'staticobjects/shop/floor_display_any_bags01', 0), + (6473, 6473, 'accessories/wearable_items/profesion_hats/assassin/assassin_01/head', 0), + (6474, 6474, 'staticobjects/gong/ogr_gong001', 0), + (6475, 6475, 'staticobjects/lighting/wall_walllamp_darkelf_ornate01_tradeskill', 0), + (6476, 6476, 'accessories/wearable_items/cloak/exp03/cloak_di_01', 0), + (6477, 6477, 'accessories/wearable_items/cloak/exp03/cloak_dt_01', 0), + (6478, 6478, 'staticobjects/switches/door_switchfloor1', 0), + (6479, 6479, 'staticobjects/switches/door_switchfloor01_handle', 0), + (6480, 6480, 'staticobjects/switches/door_switchwall01', 0), + (6481, 6481, 'staticobjects/switches/door_switchwall01_handle', 0), + (6482, 6482, 'accessories/wearable_items/_exp08/dragon_armor/leather1_blue/shoulders', 1096), + (6483, 6483, 'accessories/wieldable_items/weapons/exp03/1h_sword/exp03_1hs_soulfire', 0), + (6484, 6484, 'staticobjects/adv04/furniture/objects_wood_capboard_dpo', 0), + (6485, 6485, 'ec/pc/fae_silvani/fae_silvani', 0), + (6486, 6486, 'ec/pc/fae/fae_dark_female', 0), + (6487, 6487, 'ec/pc/fae/fae_dark_male', 0), + (6488, 6488, 'ec/pc/fae/fae_light_female', 0), + (6489, 6489, 'ec/pc/fae/fae_light_male', 0), + (6490, 6490, '_exp03/characters/tool_users/vampire_greater/vampire_greater_male01', 0), + (6491, 6491, '_exp03/characters/tool_users/vampire_greater/vampire_greater_male02', 0), + (6492, 6492, 'accessories/wearable_items/profesion_hats/evil_helm/evil_helm_01/head', 0), + (6493, 6493, '_exp03/zones/objects/weapon_rack/cbk_weapon_rack_floor02', 0), + (6494, 6494, '_exp03/zones/objects/weapon_rack/cbk_weapon_rack_floor02_blue', 0), + (6495, 6495, '_exp03/zones/objects/weapon_rack/cbk_weapon_rack_floor', 0), + (6496, 6496, '_exp03/zones/objects/weapon_rack/cbk_weapon_rack_floor_blue', 0), + (6497, 6497, '_exp03/zones/objects/rubbish/cbk_rubbish_muckbones01', 0), + (6498, 6498, '_exp03/zones/objects/rubbish/cbk_rubbish_muckbones02', 0), + (6499, 6499, '_exp03/zones/objects/tables/cbk_table_small01', 0), + (6500, 6500, '_exp03/zones/objects/tables/cbk_table_small01_blue', 0), + (6501, 6501, '_exp03/zones/objects/tables/cbk_table_long', 0), + (6502, 6502, '_exp03/zones/objects/tables/cbk_table_long_blue', 0), + (6503, 6503, '_exp03/zones/objects/chests/cbk_chest_metal01', 0), + (6504, 6504, '_exp03/zones/objects/chests/cbk_chest_metal02', 0), + (6505, 6505, '_exp03/zones/objects/chests/cbk_trunk_shoddy', 0), + (6506, 6506, '_exp03/zones/objects/weapon_rack/cbk_weaponsrack_wall01', 0), + (6507, 6507, '_exp03/zones/objects/weapon_rack/cbk_weaponsrack_wall01_blue', 0), + (6508, 6508, '_exp03/zones/objects/weapon_rack/cbk_weaponsrack_wall02', 0), + (6509, 6509, '_exp03/zones/objects/weapon_rack/cbk_weaponsrack_wall02_blue', 0), + (6510, 6510, '_exp03/zones/objects/bookcases/cbk_bookcase01', 0), + (6511, 6511, '_exp03/zones/objects/bookcases/cbk_bookcase02', 0), + (6512, 6512, '_exp03/zones/objects/bookcases/cbk_potionsack', 0), + (6513, 6513, '_exp03/zones/objects/chairs/cbk_chair01', 0), + (6514, 6514, '_exp03/zones/objects/chairs/cbk_chair01_blue', 0), + (6515, 6515, 'accessories/wieldable_items/misc/pillow_invisibleman', 0), + (6516, 6516, '_exp03/characters/tool_users/goblin_aqua_exp03', 0), + (6517, 6517, '_exp03/zones/exp03_dun_klakanon/recharging_station', 0), + (6518, 6518, '_exp03/zones/exp03_rgn_greater_faydark/gf_rock_medium02', 0), + (6519, 6519, 'accessories/wieldable_items/weapons/hammer/fighting_stick/fighting_stick_capped_flaming', 0), + (6520, 6520, '_exp03/characters/tool_users/vampire_greater/vampire_greater_female01', 0), + (6521, 6521, '_exp03/characters/tool_users/vampire_greater/vampire_greater_female02', 0), + (6522, 6522, '_exp03/zones/exp03_dun_klakanon/recharging_station_cm', 0), + (6523, 6523, 'accessories/wieldable_items/weapons/hammer/wine_bottle/winebottle01_blue', 0), + (6524, 6524, '_exp03/characters/monsters/clockwork_worker', 0), + (6525, 6525, '_exp03/characters/tool_users/myrdal_chieftain', 0), + (6526, 6526, '_exp03/characters/tool_users/myrdal_mystic', 0), + (6527, 6527, '_exp03/characters/tool_users/myrdal_warrior', 0), + (6528, 6528, '_exp03/characters/tool_users/myrdal_worker', 0), + (6529, 6529, '_exp03/characters/monsters/fairy_drake', 0), + (6530, 6530, '_exp03/zones/objects/switches/klakanon_large_switch_base', 0), + (6531, 6531, '_exp03/zones/objects/switches/klakanon_large_switch_lever', 0), + (6532, 6532, '_exp03/zones/objects/switches/klakanon_small_switch_base', 0), + (6533, 6533, '_exp03/zones/objects/switches/klakanon_small_switch_lever', 0), + (6534, 6534, 'projectiles/spell_electric_ball_eyepoint', 0), + (6535, 6535, '_exp03/characters/monsters/clockwork_dustpan', 0), + (6536, 6536, '_exp03/characters/monsters/fairy_drake01', 0), + (6537, 6537, '_exp03/characters/tool_users/vampire_greater/mayong_mistmoore', 0), + (6538, 6538, '_exp03/characters/tool_users/satyr', 0), + (6539, 6539, '_exp03/characters/tool_users/satyr01', 0), + (6540, 6540, '_exp03/characters/monsters/rumbler_shambler', 0), + (6541, 6541, 'accessories/wieldable_items/weapons/great_sword/dragon_katana/exp03_dragon_katana_plain_mist', 0), + (6542, 6542, 'accessories/wieldable_items/weapons/exp03/1h_sword/exp03_1h_orc_machete_maestro', 0), + (6543, 6543, 'accessories/wieldable_items/weapons/exp03/1h_sword/exp03_1hs_wakizashi_plain_cyphermist', 0), + (6544, 6544, '_exp03/zones/objects/idols/kal_idol_kobold_sitting', 0), + (6545, 6545, '_exp03/zones/objects/idols/kal_idol_kobold_standing', 0), + (6546, 6546, '_exp03/zones/objects/door/kal_obj_hatch01', 0), + (6547, 6547, 'accessories/wieldable_items/weapons/exp03/1h_crush/exp03_1hc_massive_hammer_miststrike', 0), + (6548, 6548, 'accessories/wieldable_items/weapons/exp03/1h_crush/exp03_1hc_staff_of_elemental_fiery', 0), + (6549, 6549, 'accessories/wieldable_items/weapons/exp03/talisman/exp03_book_ornate_penta', 0), + (6550, 6550, 'accessories/wearable_items/_exp03/chain_heroic_pristine/chest', 0), + (6551, 6551, 'accessories/wearable_items/_exp03/chain_heroic_pristine/feet', 0), + (6552, 6552, 'accessories/wearable_items/_exp03/chain_heroic_pristine/forearms', 0), + (6553, 6553, 'accessories/wearable_items/_exp03/chain_heroic_pristine/hands', 0), + (6554, 6554, 'accessories/wearable_items/_exp03/chain_heroic_pristine/head', 0), + (6555, 6555, 'accessories/wearable_items/_exp03/chain_heroic_pristine/legs', 0), + (6556, 6556, 'accessories/wearable_items/_exp03/chain_heroic_pristine/legs_noskirt', 0), + (6557, 6557, 'accessories/wearable_items/_exp03/chain_heroic_pristine/shoulders', 0), + (6558, 6558, 'accessories/wearable_items/_exp03/chain_heroic_pristine/skirt', 0), + (6559, 6559, '_exp03/zones/objects/altar/kal_altar_paladin', 0), + (6560, 6560, 'accessories/wieldable_items/shields/exp03/exp03_high_elven_kite_shield_defender', 0), + (6561, 6561, 'accessories/wearable_items/_exp03/faydark_leather_01/chest', 0), + (6562, 6562, 'accessories/wearable_items/_exp03/faydark_leather_01/feet', 0), + (6563, 6563, 'accessories/wearable_items/_exp03/faydark_leather_01/forearms', 0), + (6564, 6564, 'accessories/wearable_items/_exp03/faydark_leather_01/hands', 0), + (6565, 6565, 'accessories/wearable_items/_exp03/faydark_leather_01/head', 0), + (6566, 6566, 'accessories/wearable_items/_exp03/faydark_leather_01/legs', 0), + (6567, 6567, 'accessories/wearable_items/_exp03/faydark_leather_01/legs_noskirt', 0), + (6568, 6568, 'accessories/wearable_items/_exp03/faydark_leather_01/shoulders', 0), + (6569, 6569, 'accessories/wearable_items/_exp03/faydark_leather_01/skirt', 0), + (6570, 6570, '_exp03/zones/objects/greater_faydark/lightsources/gf_lightsource_lamppost03', 0), + (6571, 6571, '_exp03/zones/objects/lesser_faydark/lightsources/lf_lightsource_nybright_torch01', 0), + (6572, 6572, '_exp03/zones/objects/lesser_faydark/tents/lf_satyr_tent01', 0), + (6573, 6573, '_exp03/zones/objects/lesser_faydark/tents/lf_satyr_wall_tent01', 0), + (6574, 6574, '_exp03/zones/objects/banners/gf_crushbone_post01', 0), + (6575, 6575, '_exp03/zones/objects/firepits/gf_firepit_bugbear01', 0), + (6576, 6576, '_exp03/zones/objects/lesser_faydark/tents/lf_tent_nybright01', 0), + (6577, 6577, 'staticobjects/halloween/le_jackolantern01', 0), + (6578, 6578, 'staticobjects/halloween/le_jackolantern02', 0), + (6579, 6579, 'staticobjects/halloween/le_jackolantern03', 0), + (6580, 6580, '_exp03/zones/objects/kelethin/tents/kel_fae_tent_merchant01', 0), + (6581, 6581, '_exp03/zones/objects/kelethin/tents/kel_fae_tent_merchant02', 0), + (6582, 6582, '_exp03/zones/objects/kelethin/forge/kel_fae_forge01', 0), + (6583, 6583, '_exp03/zones/objects/kelethin/containers/kel_container_basket02', 0), + (6584, 6584, '_exp03/zones/objects/kelethin/containers/kel_container_basket03', 0), + (6585, 6585, '_exp03/zones/objects/kelethin/banners/kel_banner_standing_sylvanhunters01', 0), + (6586, 6586, '_exp03/zones/objects/kelethin/banners/kel_banner_post', 0), + (6587, 6587, '_exp03/zones/objects/kelethin/banners/kel_banner_scout01', 0), + (6588, 6588, '_exp02/zones/objects/eggs/sos_dragoneggs_broken_pink', 0), + (6589, 6589, '_exp02/zones/objects/eggs/sos_dragoneggs_broken_purple', 0), + (6590, 6590, '_exp02/zones/objects/eggs/sos_dragoneggs_unbroken_blue', 0), + (6591, 6591, '_exp02/zones/objects/eggs/sos_dragoneggs_unbroken_pink', 0), + (6592, 6592, '_exp02/zones/objects/eggs/sos_dragoneggs_mixed_purple', 0), + (6593, 6593, '_exp03/zones/regions/greater_faydark/gf_flora/gf_flora_mushroom_huge03', 0), + (6594, 6594, '_exp03/zones/objects/lesser_faydark/lightsources/lf_lightsource_monk_torch_withbase01', 0), + (6595, 6595, 'staticobjects/tree/tree_pine_jagged01', 0), + (6596, 6596, '_exp03/zones/regions/lesser_faydark/lf_flora/lf_flora_mushroom_bent02', 0), + (6597, 6597, '_exp03/zones/regions/lesser_faydark/lf_flora/lf_flora_mushroom_bent01', 0), + (6598, 6598, 'projectiles/exp03/pumpkin_flaming', 0), + (6599, 6599, 'accessories/wieldable_items/soga_weapons/mage/dpo_housing/staff_of_creator_dpo', 0), + (6600, 6600, '_exp03/zones/objects/emerald_halls/eh_flora_wuoshi_victim02', 0), + (6601, 6601, '_exp03/zones/objects/firepits/cbk_lightsource_firepot_small01', 0), + (6602, 6602, '_exp03/zones/objects/signs/lp_roadsign_post01', 0), + (6603, 6603, '_exp03/zones/objects/signs/lp_roadsign_post_double01', 0), + (6604, 6604, '_exp03/zones/objects/signs/lp_roadsign_post_doubleangle01', 0), + (6605, 6605, '_exp03/zones/objects/signs/lp_roadsign_post_triple01', 0), + (6606, 6606, '_exp03/zones/objects/signs/lp_roadsign_sign01', 0), + (6607, 6607, '_exp03/zones/objects/signs/lp_roadsign_sign02', 0), + (6608, 6608, 'accessories/wearable_items/_exp08/dragon_armor/leather1_blue/shoulders_epic', 1096), + (6609, 6609, 'accessories/wearable_items/_exp08/dragon_armor/leather1_green/skirt', 1096), + (6610, 6610, 'accessories/wieldable_items/weapons/exp03/bostaff/exp03_bws_tribal_spear_frost', 0), + (6611, 6611, '_exp03/characters/tool_users/vampire_greater/vampire_greater_armored_female01', 0), + (6612, 6612, '_exp03/characters/tool_users/vampire_greater/vampire_greater_armored_male01', 0), + (6613, 6613, '_exp03/characters/monsters/wuoshi', 0), + (6614, 6614, 'accessories/wieldable_items/weapons/exp03/pike/exp03_pke_elven_wizard_staff', 0), + (6615, 6615, 'accessories/wieldable_items/weapons/exp03/pike/exp03_pke_elven_wizard_staff_princess', 0), + (6616, 6616, 'accessories/wieldable_items/weapons/exp03/bow/exp03_bow_wannish_dreams_raincaller', 0), + (6617, 6617, '_exp03/zones/exp03_dun_klakanon_epic02_court/power_cell', 0), + (6618, 6618, '_exp03/zones/objects/mechanical_parts/clockwork_gear', 0), + (6619, 6619, 'accessories/wieldable_items/shields/exp03/exp03_gnomish_shield', 0), + (6620, 6620, 'accessories/wieldable_items/shields/exp03/exp03_mistmoore_shield', 0), + (6621, 6621, 'accessories/wieldable_items/shields/exp03/exp03_orc_round_shield', 0), + (6622, 6622, 'accessories/wieldable_items/shields/exp03/exp03_small_held_symbol', 0), + (6623, 6623, 'accessories/wieldable_items/shields/exp03/exp03_small_held_symbol_blue', 0), + (6624, 6624, 'accessories/wieldable_items/shields/exp03/exp03_small_held_symbol_gold', 0), + (6625, 6625, 'accessories/wieldable_items/shields/exp03/exp03_small_held_symbol_green', 0), + (6626, 6626, 'accessories/wieldable_items/shields/exp03/exp03_small_held_symbol_red', 0), + (6627, 6627, 'accessories/wieldable_items/shields/exp03/exp03_small_held_symbol_violet', 0), + (6628, 6628, 'accessories/wieldable_items/shields/exp03/exp03_small_held_symbol_white', 0), + (6629, 6629, 'accessories/wearable_items/_exp03/kaladim_chain_01/chest', 0), + (6630, 6630, 'accessories/wearable_items/_exp03/kaladim_chain_01/feet', 0), + (6631, 6631, 'accessories/wearable_items/_exp03/kaladim_chain_01/forearms', 0), + (6632, 6632, 'accessories/wearable_items/_exp03/kaladim_chain_01/hands', 0), + (6633, 6633, 'accessories/wearable_items/_exp03/kaladim_chain_01/head', 0), + (6634, 6634, 'accessories/wearable_items/_exp03/kaladim_chain_01/legs', 0), + (6635, 6635, 'accessories/wearable_items/_exp03/kaladim_chain_01/legs_noskirt', 0), + (6636, 6636, 'accessories/wearable_items/_exp03/kaladim_chain_01/shoulders', 0), + (6637, 6637, 'accessories/wearable_items/_exp03/kaladim_chain_01/skirt', 0), + (6638, 6638, 'accessories/wieldable_items/weapons/staff/bo_staff/bo_staff002_ornate_fiery', 0), + (6639, 6639, 'accessories/wieldable_items/shields/exp03/exp03_fae_buckler', 0), + (6640, 6640, 'accessories/wearable_items/_exp03/kaladim_vanguard_01/chest', 0), + (6641, 6641, 'accessories/wearable_items/_exp03/kaladim_vanguard_01/feet', 0), + (6642, 6642, 'accessories/wearable_items/_exp03/kaladim_vanguard_01/forearms', 0), + (6643, 6643, 'accessories/wearable_items/_exp03/kaladim_vanguard_01/hands', 0), + (6644, 6644, 'accessories/wearable_items/_exp03/kaladim_vanguard_01/head', 0), + (6645, 6645, 'accessories/wearable_items/_exp03/kaladim_vanguard_01/legs', 0), + (6646, 6646, 'accessories/wearable_items/_exp03/kaladim_vanguard_01/legs_noskirt', 0), + (6647, 6647, 'accessories/wearable_items/_exp03/kaladim_vanguard_01/right', 0), + (6648, 6648, 'accessories/wearable_items/_exp03/kaladim_vanguard_01/shoulders', 0), + (6649, 6649, 'accessories/wearable_items/_exp03/kaladim_vanguard_01/shoulders_nopauldrons', 0), + (6650, 6650, 'accessories/wearable_items/_exp03/kaladim_vanguard_01/skirt', 0), + (6651, 6651, '_exp03/zones/objects/mechanical_parts/clockwork_gear2', 0), + (6652, 6652, 'staticobjects/liveevent/exp03/dpo_houseitem_solusekro', 0), + (6653, 6653, 'staticobjects/dock_items/fprt_hood_fish01', 0), + (6654, 6654, 'staticobjects/dock_items/fprt_hood_fish_bucket01', 0), + (6655, 6655, 'accessories/wieldable_items/shields/exp03/exp03_decaying_tower_shield', 0), + (6656, 6656, '_exp03/zones/objects/kelethin/dresser/kel_dresser01', 0), + (6657, 6657, 'staticobjects/papers/hanging_clipboard', 0), + (6658, 6658, 'accessories/wieldable_items/weapons/exp03/bostaff/exp03_bws_elven_wizard_staff', 0), + (6659, 6659, 'accessories/wearable_items/_exp03/faydark_robe_01/chest', 0), + (6660, 6660, 'accessories/wearable_items/_exp03/faydark_robe_01/hood', 0), + (6661, 6661, 'accessories/wearable_items/_exp03/faydark_robe_01/pants', 0), + (6662, 6662, 'accessories/wearable_items/_exp03/faydark_robe_01/skirt', 0), + (6663, 6663, '_exp03/characters/monsters/mcp', 0), + (6664, 6664, '_exp03/zones/regions/greater_faydark/gf_door/gf_door_rock_frame01', 0), + (6665, 6665, '_exp03/zones/regions/greater_faydark/gf_door/gf_door_wood_door01', 0), + (6666, 6666, '_exp03/zones/regions/greater_faydark/gf_door/gf_door_wood_frame01', 0), + (6667, 6667, '_exp03/zones/objects/idols/holy_symbol_nature001', 0), + (6668, 6668, 'staticobjects/halloween/lavastorm_fire_bridge', 0), + (6669, 6669, '_exp03/characters/tool_users/clockwork_gnome_female', 0), + (6670, 6670, '_exp03/characters/tool_users/clockwork_gnome_male', 0), + (6671, 6671, 'accessories/wearable_items/_exp08/dragon_armor/leather1_green/chest', 1096), + (6672, 6672, 'accessories/wearable_items/halloween_masks/nightblood_mask/head', 0), + (6673, 6673, 'creatures/mounts/hover_pad', 0), + (6674, 6674, 'staticobjects/eig/exp03_eig_harvest_location_rare', 0), + (6675, 6675, 'staticobjects/doors/qey_ph_int_5r01_rm06_door01', 0), + (6676, 6676, 'accessories/wearable_items/halloween_masks/arrow_mask/head', 0), + (6677, 6677, 'accessories/wieldable_items/weapons/exp03/pike/exp03_pik_solusekro', 0), + (6678, 6678, 'accessories/wearable_items/halloween_masks/amygdalan_mask/head', 0), + (6679, 6679, '_exp03/characters/monsters/clockwork_spider', 0), + (6680, 6680, '_exp03/zones/regions/steamfont_mountains/sfm_epic01/sfm_epic01_mainroom_bridge01', 0), + (6681, 6681, '_exp03/zones/regions/steamfont_mountains/sfm_epic01/sfm_epic01_mainroom_bridge02', 0), + (6682, 6682, '_exp03/zones/regions/steamfont_mountains/sfm_epic01/sfm_epic01_mainroom_bridge03', 0), + (6683, 6683, 'accessories/wearable_items/cloak/exp03/cloak_sq_02', 0), + (6684, 6684, 'staticobjects/liveevent/halloween/cazic_bonefetisha001', 0), + (6685, 6685, 'staticobjects/liveevent/halloween/cazic_bonefetishb001', 0), + (6686, 6686, 'staticobjects/liveevent/halloween/cazic_bonefetishc001', 0), + (6687, 6687, '_exp03/zones/objects/tents/gf_tent_fprtexile_red01', 0), + (6688, 6688, '_exp03/zones/objects/tents/gf_tent_fprtexile_yellow01', 0), + (6689, 6689, '_exp03/zones/objects/kaladim/barricade/kal_barricade_dwarf01', 0), + (6690, 6690, '_exp03/zones/objects/kaladim/chairs/kal_chair_dwarf', 0), + (6691, 6691, '_exp03/zones/objects/kaladim/chairs/kal_stool_dwarf', 0), + (6692, 6692, '_exp03/zones/objects/kaladim/stein/kal_stein_dwarf01', 0), + (6693, 6693, '_exp03/zones/objects/kaladim/tables/kal_table_dwarf_large', 0), + (6694, 6694, '_exp03/zones/objects/kaladim/tables/kal_table_dwarf_sm', 0), + (6695, 6695, '_exp03/zones/objects/kaladim/throne/kal_throne_dwarf', 0), + (6696, 6696, '_exp03/zones/objects/kaladim/bookcases/bbm_bookcase_dwarf01', 0), + (6697, 6697, '_exp03/zones/objects/kaladim/chests/bbm_crate_wood01', 0), + (6698, 6698, '_exp03/zones/objects/kaladim/chests/bbm_crate_wood02', 0), + (6699, 6699, '_exp03/zones/objects/kaladim/doors/kal_obj_door_static01', 0), + (6700, 6700, '_exp03/zones/objects/kaladim/signs/kal_obj_sign01', 0), + (6701, 6701, '_exp03/zones/objects/kaladim/doors/kal_obj_stormguard_door_solid01', 0), + (6702, 6702, '_exp03/zones/objects/kaladim/doors/kal_obj_stormguard_doorframe_solid01', 0), + (6703, 6703, '_exp03/zones/objects/kaladim/pillars/kal_obj_wallbrace01', 0), + (6704, 6704, 'accessories/wieldable_items/weapons/exp03/2h_sword/exp03_2hs_mithanielmarr', 0), + (6705, 6705, 'staticobjects/halloween/halloween_greenblack_candles01', 0), + (6706, 6706, 'staticobjects/halloween/halloween_orangeblack_candles01', 0), + (6707, 6707, '_exp03/characters/monsters/bugbear_mystic', 0), + (6708, 6708, 'accessories/wieldable_items/weapons/exp03/npc_only/bugbear_mystic_staff', 0), + (6709, 6709, 'staticobjects/bucket/orc_bucket_full_meat001', 0), + (6710, 6710, '_exp03/zones/objects/food_items/mc_meat_piece', 0), + (6711, 6711, '_exp03/characters/tool_users/honor_elf/honor_elf_female', 0), + (6712, 6712, '_exp03/characters/tool_users/honor_elf/honor_elf_male', 0), + (6713, 6713, 'accessories/wearable_items/_exp03/kaladim_bruiser_gi_01/chest', 0), + (6714, 6714, 'accessories/wearable_items/_exp03/kaladim_bruiser_gi_01/pants', 0), + (6715, 6715, 'accessories/wearable_items/_exp03/kaladim_bruiser_gi_01/shoulders', 0), + (6716, 6716, 'creatures/tu/gods_brell_serilis', 0), + (6717, 6717, 'creatures/tu/gods_innoruuk', 0), + (6718, 6718, 'creatures/tu/gods_mithaniel_marr', 0), + (6719, 6719, 'creatures/tu/gods_quellious', 0), + (6720, 6720, 'creatures/tu/gods_rallos_zek', 0), + (6721, 6721, 'creatures/tu/gods_solusek_ro', 0), + (6722, 6722, 'creatures/tu/gods_tunare', 0), + (6723, 6723, '_exp03/zones/objects/greater_faydark/roadsigns/gf_roadsign_post', 0), + (6724, 6724, '_exp03/zones/objects/greater_faydark/roadsigns/gf_roadsign01', 0), + (6725, 6725, 'accessories/wieldable_items/weapons/exp03/2h_sword/exp03_2hs_ralloszek', 0), + (6726, 6726, '_exp03/characters/tool_users/skeleton_marble/exp03_marble_skeleton_bishop', 0), + (6727, 6727, '_exp03/characters/tool_users/skeleton_marble/exp03_marble_skeleton_king', 0), + (6728, 6728, '_exp03/characters/tool_users/skeleton_marble/exp03_marble_skeleton_knight', 0), + (6729, 6729, '_exp03/characters/tool_users/skeleton_marble/exp03_marble_skeleton_pawn', 0), + (6730, 6730, '_exp03/characters/tool_users/skeleton_marble/exp03_marble_skeleton_queen', 0), + (6731, 6731, '_exp03/characters/tool_users/skeleton_marble/exp03_marble_skeleton_rook', 0), + (6732, 6732, 'accessories/wearable_items/_exp03/faydark_plate_01/chest', 0), + (6733, 6733, 'accessories/wearable_items/_exp03/faydark_plate_01/feet', 0), + (6734, 6734, 'accessories/wearable_items/_exp03/faydark_plate_01/forearms', 0), + (6735, 6735, 'accessories/wearable_items/_exp03/faydark_plate_01/hands', 0), + (6736, 6736, 'accessories/wearable_items/_exp03/faydark_plate_01/head', 0), + (6737, 6737, 'accessories/wearable_items/_exp03/faydark_plate_01/legs', 0), + (6738, 6738, 'accessories/wearable_items/_exp03/faydark_plate_01/shoulders', 0), + (6739, 6739, 'accessories/wearable_items/_exp03/mistmoore_brigandine_01/chest', 0), + (6740, 6740, 'accessories/wearable_items/_exp03/mistmoore_brigandine_01/feet', 0), + (6741, 6741, 'accessories/wearable_items/_exp03/mistmoore_brigandine_01/forearms', 0), + (6742, 6742, 'accessories/wearable_items/_exp03/mistmoore_brigandine_01/hands', 0), + (6743, 6743, 'accessories/wearable_items/_exp03/mistmoore_brigandine_01/head', 0), + (6744, 6744, 'accessories/wearable_items/_exp03/mistmoore_brigandine_01/legs', 0), + (6745, 6745, 'accessories/wearable_items/_exp03/mistmoore_brigandine_01/shoulders', 0), + (6746, 6746, 'accessories/wearable_items/_exp03/mistmoore_chain_01/chest', 0), + (6747, 6747, 'accessories/wearable_items/_exp03/mistmoore_chain_01/feet', 0), + (6748, 6748, 'accessories/wearable_items/_exp03/mistmoore_chain_01/forearms', 0), + (6749, 6749, 'accessories/wearable_items/_exp03/mistmoore_chain_01/hands', 0), + (6750, 6750, 'accessories/wearable_items/_exp03/mistmoore_chain_01/head', 0), + (6751, 6751, 'accessories/wearable_items/_exp03/mistmoore_chain_01/legs', 0), + (6752, 6752, 'accessories/wearable_items/_exp03/mistmoore_chain_01/legs_noskirt', 0), + (6753, 6753, 'accessories/wearable_items/_exp03/mistmoore_chain_01/shoulders', 0), + (6754, 6754, 'accessories/wearable_items/_exp03/mistmoore_chain_01/skirt', 0), + (6755, 6755, 'accessories/wearable_items/_exp03/mistmoore_heavy_cloth_01/chest', 0), + (6756, 6756, 'accessories/wearable_items/_exp03/mistmoore_heavy_cloth_01/feet', 0), + (6757, 6757, 'accessories/wearable_items/_exp03/mistmoore_heavy_cloth_01/forearms', 0), + (6758, 6758, 'accessories/wearable_items/_exp03/mistmoore_heavy_cloth_01/hands', 0), + (6759, 6759, 'accessories/wearable_items/_exp08/dragon_armor/leather1_green/feet', 1096), + (6760, 6760, 'accessories/wearable_items/_exp03/mistmoore_heavy_cloth_01/legs', 0), + (6761, 6761, 'accessories/wearable_items/_exp03/mistmoore_heavy_cloth_01/legs_noskirt', 0), + (6762, 6762, 'accessories/wearable_items/_exp03/mistmoore_heavy_cloth_01/shoulders', 0), + (6763, 6763, 'accessories/wearable_items/_exp03/mistmoore_heavy_cloth_01/skirt', 0), + (6764, 6764, 'accessories/wearable_items/_exp03/mistmoore_leather_01/chest', 0), + (6765, 6765, 'accessories/wearable_items/_exp03/mistmoore_leather_01/feet', 0), + (6766, 6766, 'accessories/wearable_items/_exp03/mistmoore_leather_01/forearms', 0), + (6767, 6767, 'accessories/wearable_items/_exp03/mistmoore_leather_01/hands', 0), + (6768, 6768, 'accessories/wearable_items/_exp03/mistmoore_leather_01/head', 0), + (6769, 6769, 'accessories/wearable_items/_exp03/mistmoore_leather_01/legs', 0), + (6770, 6770, 'accessories/wearable_items/_exp03/mistmoore_leather_01/legs_noskirt', 0), + (6771, 6771, 'accessories/wearable_items/_exp03/mistmoore_leather_01/shoulders', 0), + (6772, 6772, 'accessories/wearable_items/_exp03/mistmoore_leather_01/skirt', 0), + (6773, 6773, 'accessories/wearable_items/_exp03/mistmoore_plate_01/chest', 0), + (6774, 6774, 'accessories/wearable_items/_exp03/mistmoore_plate_01/feet', 0), + (6775, 6775, 'accessories/wearable_items/_exp03/mistmoore_plate_01/forearms', 0), + (6776, 6776, 'accessories/wearable_items/_exp03/mistmoore_plate_01/hands', 0), + (6777, 6777, 'accessories/wearable_items/_exp03/mistmoore_plate_01/head', 0), + (6778, 6778, 'accessories/wearable_items/_exp03/mistmoore_plate_01/legs', 0), + (6779, 6779, 'accessories/wearable_items/_exp03/mistmoore_plate_01/shoulders', 0), + (6780, 6780, 'accessories/wearable_items/_exp03/mistmoore_robe_01/chest', 0), + (6781, 6781, 'accessories/wearable_items/_exp03/mistmoore_robe_01/hood', 0), + (6782, 6782, 'accessories/wearable_items/_exp03/mistmoore_robe_01/pants', 0), + (6783, 6783, 'accessories/wearable_items/_exp03/mistmoore_robe_01/skirt', 0), + (6784, 6784, 'accessories/wearable_items/_exp03/mistmoore_vanguard_01/chest', 0), + (6785, 6785, 'accessories/wearable_items/_exp03/mistmoore_vanguard_01/feet', 0), + (6786, 6786, 'accessories/wearable_items/_exp03/mistmoore_vanguard_01/forearms', 0), + (6787, 6787, 'accessories/wearable_items/_exp03/mistmoore_vanguard_01/hands', 0), + (6788, 6788, 'accessories/wearable_items/_exp03/mistmoore_vanguard_01/head', 0), + (6789, 6789, 'accessories/wearable_items/_exp03/mistmoore_vanguard_01/legs', 0), + (6790, 6790, 'accessories/wearable_items/_exp03/mistmoore_vanguard_01/legs_noskirt', 0), + (6791, 6791, 'accessories/wearable_items/_exp03/mistmoore_vanguard_01/right', 0), + (6792, 6792, 'accessories/wearable_items/_exp03/mistmoore_vanguard_01/shoulders', 0), + (6793, 6793, 'accessories/wearable_items/_exp03/mistmoore_vanguard_01/shoulders_nopauldrons', 0), + (6794, 6794, 'accessories/wearable_items/_exp03/mistmoore_vanguard_01/skirt', 0), + (6795, 6795, 'accessories/wearable_items/_exp03/mistmoore_woven_01/chest', 0), + (6796, 6796, 'accessories/wearable_items/_exp03/mistmoore_woven_01/feet', 0), + (6797, 6797, 'accessories/wearable_items/_exp03/mistmoore_woven_01/forearms', 0), + (6798, 6798, 'accessories/wearable_items/_exp03/mistmoore_woven_01/hands', 0), + (6799, 6799, 'accessories/wearable_items/_exp03/mistmoore_woven_01/head', 0), + (6800, 6800, 'accessories/wearable_items/_exp03/mistmoore_woven_01/legs', 0), + (6801, 6801, 'accessories/wearable_items/_exp03/mistmoore_woven_01/legs_noskirt', 0), + (6802, 6802, 'accessories/wearable_items/_exp03/mistmoore_woven_01/shoulders', 0), + (6803, 6803, 'accessories/wearable_items/_exp03/mistmoore_woven_01/skirt', 0), + (6804, 6804, 'accessories/wearable_items/_exp03/faydark_chain_01/chest', 0), + (6805, 6805, 'accessories/wearable_items/_exp03/faydark_chain_01/feet', 0), + (6806, 6806, 'accessories/wearable_items/_exp03/faydark_chain_01/forearms', 0), + (6807, 6807, 'accessories/wearable_items/_exp03/faydark_chain_01/hands', 0), + (6808, 6808, 'accessories/wearable_items/_exp03/faydark_chain_01/head', 0), + (6809, 6809, 'accessories/wearable_items/_exp03/faydark_chain_01/legs', 0), + (6810, 6810, 'accessories/wearable_items/_exp03/faydark_chain_01/legs_noskirt', 0), + (6811, 6811, 'accessories/wearable_items/_exp03/faydark_chain_01/shoulders', 0), + (6812, 6812, 'accessories/wearable_items/_exp03/faydark_chain_01/skirt', 0), + (6813, 6813, 'accessories/wearable_items/_exp08/dragon_armor/leather1_green/forearms', 1096), + (6814, 6814, '_exp03/zones/objects/idols/kal_totem_brell', 0), + (6815, 6815, 'accessories/wieldable_items/weapons/exp03/pike/exp03_pik_tunare', 0), + (6816, 6816, 'accessories/wieldable_items/soga_weapons/priest/exp03_deadman_call_countenance', 0), + (6817, 6817, '_exp03/zones/regions/emeraldhalls/eh_flora/eh_flora_rm05_bloom_of_growth', 0), + (6818, 6818, '_exp03/characters/tool_users/honor_elf/honor_elf_male_paladin', 0), + (6819, 6819, '_exp03/characters/tool_users/honor_elf/honor_elf_female_wizard', 0), + (6820, 6820, 'accessories/wearable_items/_exp08/dragon_armor/leather1_green/hands', 1096), + (6821, 6821, 'accessories/wieldable_items/weapons/exp03/1h_sword/exp03_1hs_brellserilis', 0), + (6822, 6822, '_exp03/zones/objects/lesser_faydark/stones/lf_obj_game_stone_dark01', 0), + (6823, 6823, '_exp03/zones/objects/lesser_faydark/stones/lf_obj_game_stone_light01', 0), + (6824, 6824, '_exp03/characters/monsters/imp', 0), + (6825, 6825, '_exp03/characters/monsters/carnivorous_ape', 0), + (6826, 6826, '_exp03/characters/tool_users/orc_crushbone/orc_crushbone_crush', 0), + (6827, 6827, '_exp03/zones/exp03_dun_klakanon_epic02_court/power_cell_collision_cylinder', 0), + (6828, 6828, 'creatures/mounts/horse_armor01/horse01_armor01_appoloosa', 0), + (6829, 6829, 'creatures/mounts/horse_armor01/horse01_armor01_misty', 0), + (6830, 6830, 'creatures/mounts/horse_armor01/horse01_armor01_morgan', 0), + (6831, 6831, 'creatures/mounts/horse_armor01/horse01_armor01_nightmare', 0), + (6832, 6832, 'creatures/mounts/horse_armor01/horse01_armor01_paint', 0), + (6833, 6833, 'creatures/mounts/horse_armor01/horse01_armor01_palomino', 0), + (6834, 6834, 'creatures/mounts/horse_armor01/horse01_armor01_pinto', 0), + (6835, 6835, 'creatures/mounts/horse_armor01/horse01_armor01_solid', 0), + (6836, 6836, 'creatures/mounts/horse_armor02/horse01_armor02_appoloosa', 0), + (6837, 6837, 'creatures/mounts/horse_armor02/horse01_armor02_morgan', 0), + (6838, 6838, 'creatures/mounts/horse_armor02/horse01_armor02_palomino', 0), + (6839, 6839, 'creatures/mounts/horse_armor02/horse01_armor02_pinto', 0), + (6840, 6840, 'creatures/mounts/horse_armor02/horse01_armor02_solid', 0), + (6841, 6841, 'creatures/mounts/horse_base/horse01_appoloosa', 0), + (6842, 6842, 'creatures/mounts/horse_base/horse01_morgan', 0), + (6843, 6843, 'creatures/mounts/horse_base/horse01_paint', 0), + (6844, 6844, 'creatures/mounts/horse_base/horse01_palomino', 0), + (6845, 6845, 'creatures/mounts/horse_base/horse01_pinto', 0), + (6846, 6846, 'creatures/mounts/horse_base/horse01_solid', 0), + (6847, 6847, 'creatures/mounts/horse_saddle01/horse01_sadle01_appoloosa', 0), + (6848, 6848, 'creatures/mounts/horse_saddle01/horse01_sadle01_morgan', 0), + (6849, 6849, 'creatures/mounts/horse_saddle01/horse01_sadle01_paint', 0), + (6850, 6850, 'creatures/mounts/horse_saddle01/horse01_sadle01_palomino', 0), + (6851, 6851, 'creatures/mounts/horse_saddle01/horse01_sadle01_pinto', 0), + (6852, 6852, 'creatures/mounts/horse_saddle01/horse01_sadle01_solid', 0), + (6853, 6853, 'creatures/mounts/horse_saddle02/horse01_sadle02_appoloosa', 0), + (6854, 6854, 'creatures/mounts/horse_saddle02/horse01_sadle02_morgan', 0), + (6855, 6855, 'creatures/mounts/horse_saddle02/horse01_sadle02_paint', 0), + (6856, 6856, 'creatures/mounts/horse_saddle02/horse01_sadle02_palomino', 0), + (6857, 6857, 'creatures/mounts/horse_saddle02/horse01_sadle02_pinto', 0), + (6858, 6858, 'creatures/mounts/horse_saddle02/horse01_sadle02_solid', 0), + (6859, 6859, '_exp03/characters/monsters/werewolf_01', 0), + (6860, 6860, 'accessories/wearable_items/character_create/chest', 0), + (6861, 6861, 'creatures/tu/gods_cazic_thule', 0), + (6862, 6862, '_exp03/zones/objects/kelethin/mailbox/kel_obj_mail_kiosk01', 0), + (6863, 6863, '_exp03/zones/objects/banners/fel_banner_fallingstar01', 0), + (6864, 6864, 'staticobjects/deity_altars/altar_brellserilis_basic', 0), + (6865, 6865, 'staticobjects/deity_altars/altar_brellserilis_crafted', 0), + (6866, 6866, 'staticobjects/deity_altars/altar_brellserilis_exceptional', 0), + (6867, 6867, 'staticobjects/deity_altars/altar_cazicthule_basic02', 0), + (6868, 6868, 'staticobjects/deity_altars/altar_cazicthule_crafted02', 0), + (6869, 6869, 'staticobjects/deity_altars/altar_cazicthule_exceptional02', 0), + (6870, 6870, 'staticobjects/deity_altars/altar_innoruuk_basic01', 0), + (6871, 6871, 'staticobjects/deity_altars/altar_innoruuk_crafted01', 0), + (6872, 6872, 'staticobjects/deity_altars/altar_innoruuk_exceptional01', 0), + (6873, 6873, 'staticobjects/deity_altars/altar_mithanielmarr_basic', 0), + (6874, 6874, 'staticobjects/deity_altars/altar_mithanielmarr_crafted', 0), + (6875, 6875, 'staticobjects/deity_altars/altar_mithanielmarr_exceptional', 0), + (6876, 6876, 'staticobjects/deity_altars/altar_quellious_basic', 0), + (6877, 6877, 'staticobjects/deity_altars/altar_quellious_crafted', 0), + (6878, 6878, 'staticobjects/deity_altars/altar_quellious_exceptional', 0), + (6879, 6879, 'staticobjects/deity_altars/altar_ralloszek_basic', 0), + (6880, 6880, 'staticobjects/deity_altars/altar_ralloszek_crafted', 0), + (6881, 6881, 'staticobjects/deity_altars/altar_ralloszek_exceptional', 0), + (6882, 6882, 'staticobjects/deity_altars/altar_solusekro_basic', 0), + (6883, 6883, 'staticobjects/deity_altars/altar_solusekro_crafted', 0), + (6884, 6884, 'staticobjects/deity_altars/altar_solusekro_exceptional', 0), + (6885, 6885, 'staticobjects/deity_altars/altar_tunare_basic', 0), + (6886, 6886, 'staticobjects/deity_altars/altar_tunare_crafted', 0), + (6887, 6887, 'staticobjects/deity_altars/altar_tunare_exceptional', 0), + (6888, 6888, 'staticobjects/statues/binding_shrine_no_fx', 0), + (6889, 6889, '_exp03/characters/tool_users/bugbear', 0), + (6890, 6890, 'accessories/wieldable_items/weapons/exp03/bostaff/exp03_bws_elven_wizard_staff_princess', 0), + (6891, 6891, '_exp03/characters/tool_users/bugbear_mystic_tu', 0), + (6892, 6892, '_exp03/characters/tool_users/bugbear_warrior_tu', 0), + (6893, 6893, 'staticobjects/harvested/gems_mining/exp03_harvesting_gems_tier01', 0), + (6894, 6894, 'staticobjects/harvested/gems_mining/exp03_harvesting_gems_tier02', 0), + (6895, 6895, 'staticobjects/harvested/gems_mining/exp03_harvesting_gems_tier03', 0), + (6896, 6896, 'staticobjects/harvested/lairs_trapping/exp03_harvesting_trapping_tier01', 0), + (6897, 6897, 'staticobjects/harvested/lairs_trapping/exp03_harvesting_trapping_tier02', 0), + (6898, 6898, 'staticobjects/harvested/lairs_trapping/exp03_harvesting_trapping_tier03', 0), + (6899, 6899, 'staticobjects/harvested/logs_foresting/exp03_harvesting_logs_tier01', 0), + (6900, 6900, 'staticobjects/harvested/logs_foresting/exp03_harvesting_logs_tier02', 0), + (6901, 6901, 'staticobjects/harvested/logs_foresting/exp03_harvesting_logs_tier03', 0), + (6902, 6902, 'staticobjects/harvested/ore_mining/exp03_harvesting_ore_tier01', 0), + (6903, 6903, 'staticobjects/harvested/ore_mining/exp03_harvesting_ore_tier02', 0), + (6904, 6904, 'staticobjects/harvested/ore_mining/exp03_harvesting_ore_tier03', 0), + (6905, 6905, 'staticobjects/harvested/roots_gathering/exp03_harvesting_roots_tier01', 0), + (6906, 6906, 'staticobjects/harvested/roots_gathering/exp03_harvesting_roots_tier02', 0), + (6907, 6907, 'staticobjects/harvested/roots_gathering/exp03_harvesting_roots_tier03', 0), + (6908, 6908, '_exp03/zones/objects/mistmoore_catacombs/pedestal/mc_pedestal_statue01', 0), + (6909, 6909, 'creatures/mounts/horse_armor01/horse01_armor01_good', 0), + (6910, 6910, 'creatures/monsters/vulwretch', 0), + (6911, 6911, 'creatures/monsters/horse01', 0), + (6912, 6912, 'staticobjects/dock_items/fprt_hood_fish02', 0), + (6913, 6913, '_exp03/zones/exp03_dun_klakanon/energy_cell_menace_factory_key', 0), + (6914, 6914, '_exp03/zones/objects/chests/cm_chest_treasure02', 0), + (6915, 6915, '_exp03/zones/objects/vases/cm_vase_large01', 0), + (6916, 6916, '_exp03/zones/objects/mechanical_parts/clockwork_gear_small', 0), + (6917, 6917, 'creatures/mounts/horse_armor01/horse01_armor01_ghost', 0), + (6918, 6918, 'creatures/mounts/horse_armor02/horse01_armor02_ghost', 0), + (6919, 6919, 'creatures/mounts/horse_base/horse01_ghost', 0), + (6920, 6920, 'creatures/mounts/horse_saddle01/horse01_sadle01_ghost', 0), + (6921, 6921, 'creatures/mounts/horse_saddle02/horse01_sadle02_ghost', 0), + (6922, 6922, 'accessories/wearable_items/_exp03/newbee_cloth_01/chest', 0), + (6923, 6923, 'accessories/wearable_items/_exp03/newbee_cloth_01/feet', 0), + (6924, 6924, 'accessories/wearable_items/_exp03/newbee_cloth_01/forearms', 0), + (6925, 6925, 'accessories/wearable_items/_exp03/newbee_cloth_01/hands', 0), + (6926, 6926, 'accessories/wearable_items/_exp03/newbee_cloth_01/head', 0), + (6927, 6927, 'accessories/wearable_items/_exp03/newbee_cloth_01/legs', 0), + (6928, 6928, 'accessories/wearable_items/_exp03/newbee_cloth_01/legs_noskirt', 0), + (6929, 6929, 'accessories/wearable_items/_exp03/newbee_cloth_01/shoulders', 0), + (6930, 6930, 'accessories/wearable_items/_exp03/newbee_cloth_01/skirt', 0), + (6931, 6931, '_exp03/characters/monsters/bugbear_warrior', 0), + (6932, 6932, 'accessories/wieldable_items/weapons/exp03/npc_only/bugbear_warrior_sword', 0), + (6933, 6933, 'accessories/wieldable_items/weapons/exp03/npc_only/crush_sword', 0), + (6934, 6934, 'accessories/wieldable_items/weapons/exp03/2h_sword/exp03_2hs_crush', 0), + (6935, 6935, '_exp03/zones/objects/crushbone_keep/tents/cbk_tent_orc01', 0), + (6936, 6936, '_exp03/zones/objects/crushbone_keep/tents/cbk_tent_orc02', 0), + (6937, 6937, '_exp03/zones/objects/crushbone_keep/chests/cbk_chest_metal01', 0), + (6938, 6938, '_exp03/zones/objects/crushbone_keep/chests/cbk_chest_metal02', 0), + (6939, 6939, '_exp03/zones/objects/crushbone_keep/chests/cbk_trunk_shoddy', 0), + (6940, 6940, '_exp03/zones/objects/crushbone_keep/banners/cbk_post_orc_crushbone', 0), + (6941, 6941, '_exp03/zones/objects/crushbone_keep/beds/cbk_bunk_orc01', 0), + (6942, 6942, 'staticobjects/pumpkin_flaming/pumpkin_flaming', 0), + (6943, 6943, '_exp03/zones/objects/kelethin/signpost_signs/kel_roadsign_post01', 0), + (6944, 6944, '_exp03/zones/objects/kelethin/signpost_signs/kel_roadsign_sign01', 0), + (6945, 6945, 'staticobjects/lighting/halfling_wall_light02_metal_dpo', 0), + (6946, 6946, '_exp03/zones/objects/oil_can/eu_oil_can01', 0), + (6947, 6947, '_exp03/zones/objects/gaming/eu_gaming_pawnpiece01', 0), + (6948, 6948, '_exp03/zones/objects/key/eu_key_single01', 0), + (6949, 6949, 'accessories/wieldable_items/weapons/exp03/1h_sword/exp03_1h_crescent_axe_hope_devourer', 0), + (6950, 6950, 'accessories/wieldable_items/weapons/exp03/1h_sword/exp03_short_sword002_eitholi', 0), + (6951, 6951, 'accessories/wearable_items/cloak/exp03/cloak_sq_01_flames', 0), + (6952, 6952, 'accessories/wearable_items/heavy_cloth/heavy_cloth_commoner_plain/chest', 0), + (6953, 6953, 'accessories/wearable_items/heavy_cloth/heavy_cloth_commoner_plain/feet', 0), + (6954, 6954, 'accessories/wearable_items/heavy_cloth/heavy_cloth_commoner_plain/forearms', 0), + (6955, 6955, 'accessories/wearable_items/heavy_cloth/heavy_cloth_commoner_plain/hands', 0), + (6956, 6956, 'accessories/wearable_items/heavy_cloth/heavy_cloth_commoner_plain/legs', 0), + (6957, 6957, 'accessories/wearable_items/heavy_cloth/heavy_cloth_commoner_plain/shoulders', 0), + (6958, 6958, 'accessories/wearable_items/_exp08/dragon_armor/leather1_green/head', 1096), + (6959, 6959, 'accessories/wearable_items/_exp03/npc_only/cloak_mayong_sq_01', 0), + (6960, 6960, 'staticobjects/interiors/scenes/objects_race/dp_objects/exp03_objects/cbk_torture_chair01', 0), + (6961, 6961, 'staticobjects/interiors/scenes/objects_race/dp_objects/exp03_objects/cm_piano_bench01', 0), + (6962, 6962, 'staticobjects/interiors/scenes/objects_race/dp_objects/exp03_objects/cm_piano_open01', 0), + (6963, 6963, 'staticobjects/interiors/scenes/objects_race/dp_objects/exp03_objects/eu_gaming_chesstable01', 0), + (6964, 6964, 'staticobjects/interiors/scenes/objects_race/dp_objects/exp03_objects/fel_bonsaitree_planter01', 0), + (6965, 6965, 'staticobjects/interiors/scenes/objects_race/dp_objects/exp03_objects/fel_trinket_fireice_twisted01', 0), + (6966, 6966, 'staticobjects/interiors/scenes/objects_race/dp_objects/exp03_objects/kal_altar_paladin', 0), + (6967, 6967, 'staticobjects/interiors/scenes/objects_race/dp_objects/exp03_objects/kel_distillery_hanging01', 0), + (6968, 6968, 'staticobjects/interiors/scenes/objects_race/dp_objects/exp03_objects/kel_globe_fallingstar01', 0), + (6969, 6969, 'staticobjects/interiors/scenes/objects_race/dp_objects/exp03_objects/kel_incense_burner01', 0), + (6970, 6970, 'accessories/wearable_items/cloak/exp03/cloak_dt_01_dark_lord', 0), + (6971, 6971, 'accessories/wieldable_items/weapons/exp03/1h_crush/exp03_1hc_battlehammer_plain', 0), + (6972, 6972, 'accessories/wieldable_items/weapons/exp03/1h_crush/exp03_1hc_ivy_shrouded_orb', 0), + (6973, 6973, 'accessories/wieldable_items/weapons/exp03/bostaff/exp03_bws_elven_staff', 0), + (6974, 6974, 'accessories/wieldable_items/weapons/exp03/pike/exp03_pke_elven_staff', 0), + (6975, 6975, '_exp03/zones/objects/firepits/eu_fireplace_andiron01', 0), + (6976, 6976, '_exp03/zones/objects/signs/sfm_roadsign_post01', 0), + (6977, 6977, '_exp03/zones/objects/signs/sfm_roadsign_sign01', 0), + (6978, 6978, '_exp03/zones/objects/signs/sfm_sign_wall01', 0), + (6979, 6979, 'accessories/wearable_items/_exp03/npc_only/cloak_innoruuk_sq_01', 0), + (6980, 6980, '_exp03/zones/exp03_dun_klakanon_epic02_court/power_cell_dead', 0), + (6981, 6981, 'accessories/wieldable_items/weapons/exp03/1h_crush/exp03_1hc_orc_cudgel01', 0), + (6982, 6982, 'accessories/wieldable_items/weapons/exp03/1h_crush/exp03_1hc_orc_hammer01', 0), + (6983, 6983, 'accessories/wieldable_items/weapons/exp03/1h_pierce/exp03_1hp_orc_stake01', 0), + (6984, 6984, 'accessories/wieldable_items/weapons/exp03/bostaff/exp03_bws_orc_spear01', 0), + (6985, 6985, 'accessories/wieldable_items/weapons/exp03/pike/exp03_pke_orc_halberd01', 0), + (6986, 6986, 'accessories/wieldable_items/weapons/exp03/pike/exp03_pke_orc_halberd02', 0), + (6987, 6987, 'accessories/wieldable_items/weapons/exp03/pike/exp03_pke_orc_halberd03', 0), + (6988, 6988, 'accessories/wieldable_items/weapons/exp03/pike/exp03_pke_orc_trident03', 0), + (6989, 6989, 'accessories/wieldable_items/shields/exp03/exp03_gnomish_shield_electrified', 0), + (6990, 6990, 'accessories/wieldable_items/shields/exp03/exp03_high_elven_kite_shield_grove', 0), + (6991, 6991, 'accessories/wieldable_items/shields/tower_shield/wooden_tower_shield/wooden_tower_shield001_electrified', 0), + (6992, 6992, 'accessories/wieldable_items/weapons/axe/small_dwarf/exp03_small_dwarf_axe_natural', 0), + (6993, 6993, 'accessories/wieldable_items/weapons/dagger/dirk/exp03_dirk002_balanced', 0), + (6994, 6994, 'accessories/wieldable_items/weapons/exp03/1h_crush/exp03_1hc_battlehammer_emerald', 0), + (6995, 6995, 'accessories/wieldable_items/weapons/exp03/1h_crush/exp03_1hc_long_plain_wand_particle', 0), + (6996, 6996, 'accessories/wieldable_items/weapons/exp03/1h_sword/exp03_1hs_ornate_elven_rapier_tunarian', 0), + (6997, 6997, 'accessories/wieldable_items/weapons/great_spear/harpoon/exp03_harpoon001_tunare', 0), + (6998, 6998, '_exp03/zones/objects/coffins/lp_coffin_stone01_closed', 0), + (6999, 6999, '_exp03/zones/objects/coffins/lp_coffin_stone01_open01', 0), + (7000, 7000, '_exp03/zones/objects/coffins/lp_coffin_stone01_open02', 0), + (7001, 7001, '_exp03/zones/objects/kelethin/crates/kel_crate_fay01', 0), + (7002, 7002, '_exp03/zones/objects/kelethin/crates/kel_crate_fay02', 0), + (7003, 7003, '_exp03/zones/objects/kelethin/crates/kel_crate_fay03', 0), + (7004, 7004, '_exp03/zones/objects/graveyard_crypts/lp_graveyard_crypt_plaque', 0), + (7005, 7005, 'accessories/wieldable_items/weapons/exp03/fist/exp03_monk_1h_glow', 0), + (7006, 7006, 'accessories/wieldable_items/soga_weapons/mage/staff_of_the_observers', 0), + (7007, 7007, 'accessories/wieldable_items/shields/exp03/exp03_small_held_symbol_prismatic', 0), + (7008, 7008, 'ui_fx/fx/systems/environment/any/instance_portal', 0), + (7009, 7009, '_exp03/zones/objects/coffins/cm_coffin_mistmoore01', 0), + (7010, 7010, '_exp03/zones/objects/coffins/cm_coffin_stone01', 0), + (7011, 7011, '_exp03/zones/objects/coffins/cm_pedestal_coffin_mistmoore01', 0), + (7012, 7012, 'staticobjects/nests/nest_harpy01', 0), + (7013, 7013, '_exp03/zones/objects/lesser_faydark/eggs/lf_drake_eggs_unbroken_blue', 0), + (7014, 7014, '_exp03/zones/objects/statues/gf_statue_fey', 0), + (7015, 7015, 'accessories/wieldable_items/weapons/sword/long_sword/exp03_long_sword001_balance', 0), + (7016, 7016, 'accessories/wieldable_items/weapons/sword/scimitar/exp03_scimitar001_grove', 0), + (7017, 7017, 'accessories/wieldable_items/shields/exp03/exp03_qeynos_buckler', 0), + (7018, 7018, 'accessories/wieldable_items/soga_weapons/scout/exp03_traceless_wounding', 0), + (7019, 7019, 'accessories/wearable_items/starter_clothes/fae_dark_male/arms', 0), + (7020, 7020, 'accessories/wearable_items/starter_clothes/fae_dark_male/chest', 0), + (7021, 7021, 'accessories/wearable_items/starter_clothes/fae_dark_male/legs', 0), + (7022, 7022, 'accessories/wearable_items/starter_clothes/fae_dark_male/sleeves', 0), + (7023, 7023, 'accessories/wearable_items/starter_clothes/fae_dark_female/arms', 0), + (7024, 7024, 'accessories/wearable_items/starter_clothes/fae_dark_female/chest', 0), + (7025, 7025, 'accessories/wearable_items/starter_clothes/fae_dark_female/legs', 0), + (7026, 7026, 'accessories/wearable_items/starter_clothes/fae_dark_female/sleeves', 0), + (7027, 7027, 'accessories/wearable_items/starter_clothes/fae_light_male/arms', 0), + (7028, 7028, 'accessories/wearable_items/starter_clothes/fae_light_male/chest', 0), + (7029, 7029, 'accessories/wearable_items/starter_clothes/fae_light_male/legs', 0), + (7030, 7030, 'accessories/wearable_items/starter_clothes/fae_light_male/sleeves', 0), + (7031, 7031, 'accessories/wearable_items/starter_clothes/fae_light_female/arms', 0), + (7032, 7032, 'accessories/wearable_items/starter_clothes/fae_light_female/chest', 0), + (7033, 7033, 'accessories/wearable_items/starter_clothes/fae_light_female/legs', 0), + (7034, 7034, 'accessories/wearable_items/starter_clothes/fae_light_female/sleeves', 0), + (7035, 7035, 'projectiles/spell_fruitcake', 0), + (7036, 7036, 'accessories/wieldable_items/weapons/sword/candy_cane_1hs/candy_cane_1hs_01', 0), + (7037, 7037, 'accessories/wearable_items/christmas_hats/santa_hat_02/head', 0), + (7038, 7038, '_exp03/characters/tool_users/satyr_snow', 0), + (7039, 7039, 'ec/npc/goblin_snow', 0), + (7040, 7040, 'creatures/monsters/snowman01', 0), + (7041, 7041, 'creatures/monsters/snowwoman01', 0), + (7042, 7042, 'projectiles/spell_snowball_big', 0), + (7043, 7043, '_exp03/characters/monsters/carnivorous_ape_boss', 0), + (7044, 7044, 'staticobjects/shelves/wall_shelf_halfling_wooden01_houseitem', 0), + (7045, 7045, 'staticobjects/lighting/wall_lamp_darkelf_torchbowl01_dpohousing', 0), + (7046, 7046, 'accessories/wieldable_items/weapons/dagger/dirk/exp02_dirk002_nightfall', 0), + (7047, 7047, 'staticobjects/liveevent/frostfell/dpo_holiday_candlegroup01_greensilver', 0), + (7048, 7048, 'staticobjects/liveevent/frostfell/dpo_holiday_candlegroup01_redsilver', 0), + (7049, 7049, 'staticobjects/liveevent/frostfell/dpo_holiday_candycane_large03_blue', 0), + (7050, 7050, 'staticobjects/liveevent/frostfell/dpo_holiday_candycane_large04_green', 0), + (7051, 7051, 'staticobjects/liveevent/frostfell/dpo_holiday_candycane_large05_redpink', 0), + (7052, 7052, 'staticobjects/liveevent/frostfell/dpo_holiday_candycane_small03_blue', 0), + (7053, 7053, 'staticobjects/liveevent/frostfell/dpo_holiday_candycane_small04_green', 0), + (7054, 7054, 'staticobjects/liveevent/frostfell/dpo_holiday_candycane_small05_redpink', 0), + (7055, 7055, 'staticobjects/liveevent/frostfell/dpo_holiday_wallcandles02_goldgreen', 0), + (7056, 7056, 'staticobjects/liveevent/frostfell/dpo_holiday_wallcandles02_silverred', 0), + (7057, 7057, 'staticobjects/liveevent/frostfell/dpo_snowglobe_cazicthule01', 0), + (7058, 7058, 'staticobjects/liveevent/frostfell/dpo_snowglobe_drafling01', 0), + (7059, 7059, 'staticobjects/liveevent/frostfell/dpo_snowglobe_frostfelltree01', 0), + (7060, 7060, 'staticobjects/liveevent/frostfell/dpo_snowglobe_kelethin01', 0), + (7061, 7061, 'staticobjects/liveevent/frostfell/dpo_snowglobe_lavastorm01', 0), + (7062, 7062, 'staticobjects/liveevent/frostfell/dpo_snowglobe_majdul01', 0), + (7063, 7063, 'staticobjects/liveevent/frostfell/dpo_snowglobe_nektropos01', 0), + (7064, 7064, 'staticobjects/liveevent/frostfell/dpo_snowglobe_pagoda01', 0), + (7065, 7065, 'staticobjects/liveevent/frostfell/dpo_snowglobe_qeyclamore01', 0), + (7066, 7066, 'staticobjects/liveevent/frostfell/dpo_snowman01_sad', 0), + (7067, 7067, 'staticobjects/liveevent/frostfell/dpo_snowwoman01_sad', 0), + (7068, 7068, 'staticobjects/liveevent/frostfell/dpo_xmas_apples', 0), + (7069, 7069, 'staticobjects/liveevent/frostfell/dpo_xmas_candy', 0), + (7070, 7070, 'staticobjects/liveevent/frostfell/dpo_xmas_eggnog', 0), + (7071, 7071, 'staticobjects/liveevent/frostfell/holiday_fruitcake', 0), + (7072, 7072, 'staticobjects/liveevent/frostfell/holiday_turkey', 0), + (7073, 7073, 'staticobjects/liveevent/frostfell/holiday_wreath01', 0), + (7074, 7074, 'staticobjects/liveevent/frostfell/dpo_bow01_gold', 0), + (7075, 7075, 'staticobjects/liveevent/frostfell/dpo_bow01_green', 0), + (7076, 7076, 'staticobjects/liveevent/frostfell/dpo_bow01_red', 0), + (7077, 7077, 'staticobjects/liveevent/frostfell/dpo_present03_big', 0), + (7078, 7078, 'staticobjects/liveevent/frostfell/dpo_present03_medium', 0), + (7079, 7079, 'staticobjects/liveevent/frostfell/dpo_bow01_gold_wall', 0), + (7080, 7080, 'staticobjects/liveevent/frostfell/dpo_bow01_green_wall', 0), + (7081, 7081, 'staticobjects/liveevent/frostfell/dpo_bow01_red_wall', 0), + (7082, 7082, 'staticobjects/liveevent/frostfell/ice_throne', 0), + (7083, 7083, 'staticobjects/liveevent/frostfell/dpo_christmas_tree_small01_houseitem', 0), + (7084, 7084, 'staticobjects/liveevent/frostfell/dpo_christmas_tree_small01_kelethin', 0), + (7085, 7085, 'staticobjects/liveevent/frostfell/lamp_post', 0), + (7086, 7086, 'accessories/wieldable_items/weapons/great_spear/voulge/voulge001_ornate_pike', 0), + (7087, 7087, 'staticobjects/fireplaces/dpo_fireplace01_houseitem', 0), + (7088, 7088, 'staticobjects/fireplaces/dpo_fireplace02_houseitem', 0), + (7089, 7089, 'staticobjects/fireplaces/dpo_fireplace03_houseitem', 0), + (7090, 7090, 'staticobjects/liveevent/frostfell/holiday_cranberrie_plate', 0), + (7091, 7091, 'accessories/wieldable_items/weapons/exp03/fist/exp03_quellious_1h_glow', 0), + (7092, 7092, 'staticobjects/stoves/floor_stove_halfling_round01', 0), + (7093, 7093, 'staticobjects/liveevent/frostfell/dpo_holiday_snowpile01', 0), + (7094, 7094, '_exp03/zones/objects/crib/eu_crib01', 0), + (7095, 7095, '_exp04/monsters/apopheli', 0), + (7096, 7096, 'ec/pc/fae_wings/fae_d_wing01', 0), + (7097, 7097, 'ec/pc/fae_wings/fae_d_wing01_t', 0), + (7098, 7098, 'ec/pc/fae_wings/fae_d_wing02', 0), + (7099, 7099, 'ec/pc/fae_wings/fae_d_wing02_t', 0), + (7100, 7100, 'ec/pc/fae_wings/fae_d_wing03', 0), + (7101, 7101, 'ec/pc/fae_wings/fae_d_wing03_t', 0), + (7102, 7102, 'ec/pc/fae_wings/fae_d_wing04', 0), + (7103, 7103, 'ec/pc/fae_wings/fae_d_wing04_t', 0), + (7104, 7104, 'ec/pc/fae_wings/fae_d_wing05', 0), + (7105, 7105, 'ec/pc/fae_wings/fae_d_wing05_t', 0), + (7106, 7106, 'ec/pc/fae_wings/fae_d_wing06', 0), + (7107, 7107, 'ec/pc/fae_wings/fae_d_wing06_t', 0), + (7108, 7108, 'ec/pc/fae_wings/fae_d_wing07', 0), + (7109, 7109, 'ec/pc/fae_wings/fae_d_wing07_t', 0), + (7110, 7110, 'ec/pc/fae_wings/fae_d_wing08', 0), + (7111, 7111, 'ec/pc/fae_wings/fae_d_wing08_t', 0), + (7112, 7112, 'ec/pc/fae_wings/fae_d_wing09', 0), + (7113, 7113, 'ec/pc/fae_wings/fae_d_wing09_t', 0), + (7114, 7114, 'ec/pc/fae_wings/fae_d_wing10', 0), + (7115, 7115, 'ec/pc/fae_wings/fae_d_wing10_t', 0), + (7116, 7116, 'ec/pc/fae_wings/fae_d_wing11', 0), + (7117, 7117, 'ec/pc/fae_wings/fae_d_wing11_t', 0), + (7118, 7118, 'ec/pc/fae_wings/fae_d_wing12', 0), + (7119, 7119, 'ec/pc/fae_wings/fae_d_wing12_t', 0), + (7120, 7120, 'staticobjects/liveevent/erollisi_objects/errolisi_box0choclates', 0), + (7121, 7121, 'staticobjects/liveevent/erollisi_objects/errolisi_goodheartvase01', 0), + (7122, 7122, 'staticobjects/liveevent/erollisi_objects/errolisi_goodheartvase02', 0), + (7123, 7123, 'staticobjects/liveevent/erollisi_objects/errolisi_heartpillow', 0), + (7124, 7124, 'staticobjects/liveevent/erollisi_objects/errolisi_heartvase01', 0), + (7125, 7125, 'staticobjects/liveevent/erollisi_objects/errolisi_heartvase02', 0), + (7126, 7126, 'staticobjects/liveevent/erollisi_objects/errolisi_multithreeroses01', 0), + (7127, 7127, 'staticobjects/liveevent/erollisi_objects/errolisi_pink_purplerose_ovalvase01', 0), + (7128, 7128, 'staticobjects/liveevent/erollisi_objects/errolisi_pink_redrosevase01', 0), + (7129, 7129, 'staticobjects/liveevent/erollisi_objects/errolisi_pinkrose01', 0), + (7130, 7130, 'staticobjects/liveevent/erollisi_objects/errolisi_pinkrose_ovalvase01', 0), + (7131, 7131, 'staticobjects/liveevent/erollisi_objects/errolisi_pinkrosevase01', 0), + (7132, 7132, 'staticobjects/liveevent/erollisi_objects/errolisi_pinkthreeroses01', 0), + (7133, 7133, 'staticobjects/liveevent/erollisi_objects/errolisi_purple_redrose_ovalvase01', 0), + (7134, 7134, 'staticobjects/liveevent/erollisi_objects/errolisi_purple_redrosevase01', 0), + (7135, 7135, 'staticobjects/liveevent/erollisi_objects/errolisi_purplerose01', 0), + (7136, 7136, 'staticobjects/liveevent/erollisi_objects/errolisi_purplerose_ovalvase01', 0), + (7137, 7137, 'staticobjects/liveevent/erollisi_objects/errolisi_purplerosevase01', 0), + (7138, 7138, 'staticobjects/liveevent/erollisi_objects/errolisi_purplethreeroses01', 0), + (7139, 7139, 'staticobjects/liveevent/erollisi_objects/errolisi_red_pinkrose_ovalvase01', 0), + (7140, 7140, 'staticobjects/liveevent/erollisi_objects/errolisi_red_whiterose_ovalvase01', 0), + (7141, 7141, 'staticobjects/liveevent/erollisi_objects/errolisi_red_whiterosevase01', 0), + (7142, 7142, 'staticobjects/liveevent/erollisi_objects/errolisi_redrose01', 0), + (7143, 7143, 'staticobjects/liveevent/erollisi_objects/errolisi_redrose_ovalvase01', 0), + (7144, 7144, 'staticobjects/liveevent/erollisi_objects/errolisi_redrosevase01', 0), + (7145, 7145, 'staticobjects/liveevent/erollisi_objects/errolisi_redthreeroses01', 0), + (7146, 7146, 'accessories/wearable_items/_exp08/dragon_armor/leather1_green/legs', 1096), + (7147, 7147, 'accessories/wearable_items/_exp08/dragon_armor/leather1_green/legs_noskirt', 1096), + (7148, 7148, 'accessories/wearable_items/_exp08/dragon_armor/leather1_green/shoulders', 1096), + (7149, 7149, 'staticobjects/liveevent/erollisi_objects/errolisi_whiterose01', 0), + (7150, 7150, 'staticobjects/liveevent/erollisi_objects/errolisi_whiterose_ovalvase01', 0), + (7151, 7151, 'staticobjects/liveevent/erollisi_objects/errolisi_whiterosevase01', 0), + (7152, 7152, 'staticobjects/liveevent/erollisi_objects/errolisi_whitethreeroses01', 0), + (7153, 7153, 'accessories/wearable_items/profesion_hats/warden/warden_01/head', 0), + (7154, 7154, 'accessories/wearable_items/profesion_hats/fury/fury_01/head', 0), + (7155, 7155, 'accessories/wearable_items/profesion_hats/necromancer/necromancer_01/head', 0), + (7156, 7156, 'accessories/wearable_items/profesion_hats/warlock/warlock_01/head', 0), + (7157, 7157, '_exp04/tool_users/sarnak', 0), + (7158, 7158, 'accessories/wieldable_items/soga_weapons/priest/exp03_thunder_blade_waning_moon', 0), + (7159, 7159, 'accessories/wieldable_items/soga_weapons/scout/exp03_great_shark_sariks_fang', 0), + (7160, 7160, 'accessories/wieldable_items/weapons/exp03/1h_crush/exp03_1hc_battlehammer_inlaid_rock', 0), + (7161, 7161, 'accessories/wieldable_items/weapons/exp03/1h_crush/exp03_1hc_ivy_shrouded_orb_sparkling', 0), + (7162, 7162, 'accessories/wieldable_items/weapons/exp03/1h_crush/exp03_1hc_wooden_vine_scepter_knotted_pine', 0), + (7163, 7163, 'accessories/wieldable_items/weapons/exp03/1h_sword/exp03_1hs_orc_machete_clearcutter', 0), + (7164, 7164, 'accessories/wieldable_items/weapons/exp03/bow/exp03_bow_giant_wooden_grove', 0), + (7165, 7165, 'accessories/wieldable_items/weapons/fist/claws/claws001_thorn_wrapped', 0), + (7166, 7166, 'accessories/wieldable_items/weapons/rapier/epee/exp03_epee001_bixie_sticker', 0), + (7167, 7167, 'accessories/wieldable_items/weapons/rapier/saber/exp03_saber001_bisected_saber', 0), + (7168, 7168, 'accessories/wieldable_items/weapons/spear/one_handed_spear/exp03_barbed_spear_bee_sting', 0), + (7169, 7169, 'staticobjects/shield/exp03_mistmoore_shield_heritage_housteitem', 0), + (7170, 7170, 'staticobjects/shelves/houseitems/wall_shelf_any_skull01', 0), + (7171, 7171, 'staticobjects/shelves/houseitems/wall_shelf_any_skull02', 0), + (7172, 7172, 'staticobjects/shelves/houseitems/wall_shelf_any_skull03', 0), + (7173, 7173, 'staticobjects/statues/wall_statue_any_figurehead01_housedpo', 0), + (7174, 7174, 'accessories/wieldable_items/weapons/exp03/1h_sword/exp03_1hs_ornate_elven_rapier_beeswarm', 0), + (7175, 7175, '_exp04/monsters/fishman', 0), + (7176, 7176, 'staticobjects/world_devices/trdskl_fprt_chemistrytable_summoned', 0), + (7177, 7177, 'staticobjects/world_devices/trdskl_fprt_engraveddesk_summoned', 0), + (7178, 7178, 'staticobjects/world_devices/trdskl_fprt_forge_summoned', 0), + (7179, 7179, 'staticobjects/world_devices/trdskl_fprt_sewingtable_mannequin_loom_summoned', 0), + (7180, 7180, 'staticobjects/world_devices/trdskl_fprt_stoveandkeg_summoned', 0), + (7181, 7181, 'staticobjects/world_devices/trdskl_fprt_woodworkingtable_summoned', 0), + (7182, 7182, 'staticobjects/world_devices/trdskl_fprt_workbench_summoned', 0), + (7183, 7183, 'creatures/mounts/horse_armor01/horse01_armor01_nightmare_blue', 0), + (7184, 7184, 'staticobjects/catapult/catapult', 0), + (7185, 7185, '_exp04/monsters/wyvern', 0), + (7186, 7186, '_exp04/tool_users/fishman_tu', 0), + (7187, 7187, 'accessories/wieldable_items/misc/stein001_runic_tumpy_tankard', 0), + (7188, 7188, 'accessories/wieldable_items/soga_weapons/fighter/invincibility_of_eight_flowing_blood', 0), + (7189, 7189, 'accessories/wieldable_items/soga_weapons/fighter/sword_of_nova_infirmity', 0), + (7190, 7190, 'accessories/wieldable_items/soga_weapons/mage/staff_of_elemental_wand_of_crystalized_plasma', 0), + (7191, 7191, 'accessories/wieldable_items/soga_weapons/scout/wannish_dream_torn_ligament', 0), + (7192, 7192, 'accessories/wearable_items/cloak/exp03/cloak_sq_01_unrest_vapor', 0), + (7193, 7193, 'accessories/wieldable_items/weapons/great_axe/large_dwarf_axe/large_dwarf_axe_plain_bloodbath', 0), + (7194, 7194, 'accessories/wieldable_items/weapons/great_hammer/war_hammer/war_hammer002_ornate_torklars', 0), + (7195, 7195, 'accessories/wieldable_items/weapons/sword/vampire_sword/vampire_sword_plain_modinthalis', 0), + (7196, 7196, 'accessories/wieldable_items/weapons/exp03/1h_pierce/exp03_1hp_vampiric_sacrificial_dagger_cold_blooded', 0), + (7197, 7197, 'accessories/wieldable_items/weapons/exp03/1h_sword/exp03_1hs_ornate_elven_rapier_bloodspiller', 0), + (7198, 7198, 'accessories/wieldable_items/weapons/exp03/1h_crush/exp03_1hc_wrench01_cogturner', 0), + (7199, 7199, '_exp03/zones/objects/castle_mistmoore/cm_statues_mayong_bust', 0), + (7200, 7200, '_exp03/zones/objects/greater_faydark/lightsources/gf_lamppost_flower01', 0), + (7201, 7201, 'accessories/wearable_items/profesion_hats/conjuror/conjuror_01/head', 0), + (7202, 7202, 'accessories/wearable_items/profesion_hats/coercer/coercer_01/head', 0), + (7203, 7203, 'staticobjects/world_devices/orc_forge', 0), + (7204, 7204, 'accessories/wearable_items/profesion_hats/coercer/coercer_02/head', 0), + (7205, 7205, 'accessories/wearable_items/_exp08/dragon_armor/leather1_green/shoulders_epic', 1096), + (7206, 7206, 'creatures/mounts/rhino_mount/rhino_armor01', 0), + (7207, 7207, 'creatures/monsters/elephant_white', 0), + (7208, 7208, 'staticobjects/plants/dw_objects_plant_tree01', 0), + (7209, 7209, 'staticobjects/plants/dw_objects_planttreebark01', 0), + (7210, 7210, '_exp03/zones/felwithe_castle/fel_rod_crystal', 0), + (7211, 7211, '_exp04/monsters/fishman_warrior', 0), + (7212, 7212, '_exp04/tool_users/fishman_warrior_tu', 0), + (7213, 7213, 'creatures/mounts/warg_mount/warg', 0), + (7214, 7214, 'creatures/mounts/warg_mount/warg_armor01', 0), + (7215, 7215, 'creatures/mounts/warg_mount/warg_armor02', 0), + (7216, 7216, 'creatures/mounts/warg_mount/warg_saddle01', 0), + (7217, 7217, '_exp04/monsters/erollisi', 0), + (7218, 7218, 'creatures/mounts/warg_mount/warg_armor01_spotted', 0), + (7219, 7219, 'creatures/mounts/warg_mount/warg_armor01_twotoned', 0), + (7220, 7220, 'creatures/mounts/warg_mount/warg_armor02_spotted', 0), + (7221, 7221, 'creatures/mounts/warg_mount/warg_armor02_twotoned', 0), + (7222, 7222, 'creatures/mounts/warg_mount/warg_spotted', 0), + (7223, 7223, 'creatures/mounts/warg_mount/warg_twotoned', 0), + (7224, 7224, 'staticobjects/brazier/floor_brazier_erudite_smoke', 0), + (7225, 7225, '_exp03/zones/felwithe_castle/fel_rod_crystal_dropped', 0), + (7226, 7226, '_exp04/tool_users/drachnid_female', 0), + (7227, 7227, '_exp04/tool_users/drachnid_queen', 0), + (7228, 7228, 'creatures/mounts/warg_mount/warg_saddle01_spotted', 0), + (7229, 7229, 'creatures/mounts/warg_mount/warg_saddle01_twotoned', 0), + (7230, 7230, 'creatures/monsters/willowisp_dark', 0), + (7231, 7231, 'accessories/wieldable_items/weapons/staff/felwithe_staff/felwithe_bws_staff', 0), + (7232, 7232, '_exp03/zones/felwithe_castle/dpo_invisible_cube_felwithe', 0), + (7233, 7233, '_exp03/zones/regions/greater_faydark/gf_flora/gf_flora_mushroom_limecap_dpo', 0), + (7234, 7234, '_exp04/monsters/xygoz', 0), + (7235, 7235, '_exp04/monsters/cockatrice', 0), + (7236, 7236, '_exp04/monsters/skorpikis', 0), + (7237, 7237, 'staticobjects/dpo_invisible_wall/invisible_wall_dw_shadow_oak_drwy', 0), + (7238, 7238, 'staticobjects/dpo_invisible_wall/invisible_wall_dw_tower_of_bone_drwy', 0), + (7239, 7239, 'staticobjects/dpo_invisible_wall/invisible_wall_nk_seagate_teleporter', 0), + (7240, 7240, 'creatures/monsters/hellhound_blue', 0), + (7241, 7241, 'creatures/monsters/willowisp_ball_lightning', 0), + (7242, 7242, 'creatures/mounts/warg_mount/warg_armor02_blue', 0), + (7243, 7243, 'creatures/mounts/warg_mount/warg_armor02_fire', 0), + (7244, 7244, 'creatures/mounts/warg_mount/warg_armor02_misty', 0), + (7245, 7245, 'projectiles/nightmare_ghost', 0), + (7246, 7246, '_exp04/monsters/clay_golem', 0), + (7247, 7247, '_exp04/monsters/clay_keeper', 0), + (7248, 7248, 'creatures/monsters/willowisp_vampire_orb', 0), + (7249, 7249, 'ec/npc/nightmare_ghost', 0), + (7250, 7250, '_exp04/monsters/cinder_wasp', 0), + (7251, 7251, '_exp04/monsters/clay_shackled', 0), + (7252, 7252, '_exp04/monsters/carrion_crawler', 0), + (7253, 7253, '_exp04/monsters/sokokar', 0), + (7254, 7254, '_exp04/tool_users/spiroc', 0), + (7255, 7255, '_exp04/monsters/succulent', 0), + (7256, 7256, 'staticobjects/rugs/qey_rug_beigeblacklarge', 0), + (7257, 7257, '_exp04/monsters/yeti', 0), + (7258, 7258, '_exp04/monsters/brute', 0), + (7259, 7259, 'staticobjects/lighting/torchsword001', 0), + (7260, 7260, 'staticobjects/chairs/vrsn_chair03_dpo', 0), + (7261, 7261, 'staticobjects/globes/globe001', 0), + (7262, 7262, 'staticobjects/lighting/bonetorch001', 0), + (7263, 7263, 'staticobjects/lighting/candleholderlarge001', 0), + (7264, 7264, 'staticobjects/musical/halfling_drum03_dpo', 0), + (7265, 7265, 'staticobjects/lighting/tablelamp002', 0), + (7266, 7266, 'staticobjects/lighting/tablelamp003', 0), + (7267, 7267, 'staticobjects/kitchen/fprt_kitchen_chaliceshort001_dpo', 0), + (7268, 7268, 'staticobjects/pillars/column001', 0), + (7269, 7269, 'staticobjects/pillars/columnsmall002', 0), + (7270, 7270, 'staticobjects/kitchen/muffin_pan_dpo', 0), + (7271, 7271, 'staticobjects/racks/winerack001_assembly001', 0), + (7272, 7272, 'staticobjects/tapestry/tapestry001_longcealing_dirty', 0), + (7273, 7273, 'accessories/wearable_items/_exp08/dragon_armor/leather1_red/skirt', 1096), + (7274, 7274, 'accessories/wieldable_items/weapons/exp03/1h_crush/exp03_1hc_soulfire_hammer', 0), + (7275, 7275, 'accessories/wieldable_items/weapons/exp03/1h_crush/exp03_1hc_soulfire_kama', 0), + (7276, 7276, 'accessories/wieldable_items/weapons/exp03/1h_sword/exp03_1hs_soulfire_bastard', 0), + (7277, 7277, 'accessories/wieldable_items/weapons/exp03/1h_sword/exp03_1hs_soulfire_gladius', 0), + (7278, 7278, 'accessories/wieldable_items/weapons/exp03/1h_sword/exp03_1hs_soulfire_sabre', 0), + (7279, 7279, 'accessories/wieldable_items/weapons/exp03/pike/exp03_pike_soulfire_staff', 0), + (7280, 7280, 'staticobjects/lighting/chandelier001_dpo', 0), + (7281, 7281, 'staticobjects/lighting/torchsword001_dpo', 0), + (7282, 7282, 'creatures/tu/gods_bristlebane', 0), + (7283, 7283, 'accessories/wieldable_items/weapons/exp04/1h_pierce/exp04_1hp_triblade_dagger', 0), + (7284, 7284, 'accessories/wieldable_items/weapons/exp04/1h_crush/exp04_1hc_truncheon', 0), + (7285, 7285, 'accessories/wieldable_items/weapons/exp04/1h_sword/exp04_1hs_lamentation', 0), + (7286, 7286, 'accessories/wieldable_items/weapons/exp04/1h_crush/exp04_1hc_truncheon_koadavie', 0), + (7287, 7287, 'accessories/wieldable_items/weapons/exp04/1h_pierce/exp04_1hp_triblade_dagger_koadavie', 0), + (7288, 7288, 'accessories/wieldable_items/weapons/exp04/1h_pierce/exp04_1hp_vampiric_sacrificial_dagger_koadavie', 0), + (7289, 7289, 'accessories/wieldable_items/weapons/exp04/1h_sword/exp04_1hs_lamentation_koadavie', 0), + (7290, 7290, 'accessories/wieldable_items/shields/buckler_shield/wooden_buckler/wooden_buckler001_runic_koadavie', 0), + (7291, 7291, 'accessories/wieldable_items/shields/round_shield/wooden_round/wooden_round_shield001_ornate_koadavie', 0), + (7292, 7292, 'accessories/wieldable_items/shields/tower_shield/wooden_tower_shield/wooden_tower_shield001_koadavie', 0), + (7293, 7293, '_exp04/monsters/devourer', 0), + (7294, 7294, 'accessories/wieldable_items/shields/buckler_shield/buckler_fae/buckler_fae_01_koadavie', 0), + (7295, 7295, 'code/spawn_ring', 0), + (7296, 7296, '_exp04/tool_users/goblin_shaman', 0), + (7297, 7297, '_exp04/monsters/wurm', 0), + (7298, 7298, 'staticobjects/armor/undead_iksar_male_breastplate', 0), + (7299, 7299, 'accessories/wieldable_items/soga_weapons/fighter/sword_of_serpent_koadavie', 0), + (7300, 7300, '_exp04/tool_users/drachnid_female_chain', 0), + (7301, 7301, '_exp04/tool_users/drachnid_male', 0), + (7302, 7302, '_exp04/tool_users/drachnid_male_plate', 0), + (7303, 7303, 'staticobjects/mirrors/mirror001_wallmnt_dpo', 0), + (7304, 7304, '_exp04/monsters/devil_dust_tornado_timorous', 0), + (7305, 7305, 'accessories/wieldable_items/weapons/exp03/1h_crush/exp03_1hc_lucanic_hammer', 0), + (7306, 7306, 'accessories/wieldable_items/weapons/exp03/1h_crush/exp03_1hc_lucanic_kama', 0), + (7307, 7307, 'accessories/wieldable_items/weapons/exp03/pike/exp03_pike_lucanic_staff', 0), + (7308, 7308, 'accessories/wieldable_items/weapons/exp03/1h_sword/exp03_1hs_lucanic_bastard', 0), + (7309, 7309, 'accessories/wieldable_items/weapons/exp03/1h_sword/exp03_1hs_lucanic_gladius', 0), + (7310, 7310, 'accessories/wieldable_items/weapons/exp03/1h_sword/exp03_1hs_lucanic_sabre', 0), + (7311, 7311, '_exp04/tool_users/goblin_warrior', 0), + (7312, 7312, 'staticobjects/musical/floor_horn_halfling', 0), + (7313, 7313, 'creatures/mounts/warg_mount/warg_armor02_albino', 0), + (7314, 7314, 'accessories/wearable_items/cloak/exp03/cloak_sq_01_water', 0), + (7315, 7315, 'ec/pc01/sarnak_male/sarnak_male_thin', 0), + (7316, 7316, 'accessories/wearable_items/cloak/exp03/cloak_sq_01_chelsith', 0), + (7317, 7317, 'accessories/wearable_items/cloak/exp03/cloak_sq_01_disguise', 0), + (7318, 7318, 'accessories/wearable_items/cloak/exp03/cloak_sq_01_lon', 0), + (7319, 7319, 'accessories/wieldable_items/weapons/sword/long_sword/long_sword_magic_uber', 0), + (7320, 7320, 'creatures/mounts/carpet_lon', 0), + (7321, 7321, '_exp04/monsters/chokidai_armoured', 0), + (7322, 7322, 'creatures/mounts/carpet_lon02', 0), + (7323, 7323, '_exp04/monsters/chokidai', 0), + (7324, 7324, '_exp04/tool_users/goblin_scout', 0), + (7325, 7325, 'code/target_aoe_ring', 0), + (7326, 7326, 'staticobjects/lighting/halfling_lantern01_handledown_dpo', 0), + (7327, 7327, 'staticobjects/lighting/halfling_lantern01_handleup_dpo', 0), + (7328, 7328, 'staticobjects/tables/halfing_desk01_dpo', 0), + (7329, 7329, 'staticobjects/benches/floor_bench_halfing_paded01_ltwd_dpo', 0), + (7330, 7330, 'staticobjects/chairs/floor_loveseat_halfing_paded01', 0), + (7331, 7331, 'staticobjects/chairs/halfling_chair_padded_dpo', 0), + (7332, 7332, 'staticobjects/beds/halfing_bed01_wdlt_dpo', 0), + (7333, 7333, 'staticobjects/lighting/halfling_candle_log01_dpo', 0), + (7334, 7334, 'staticobjects/counters/halfing_counter_merchant01_dpo', 0), + (7335, 7335, 'staticobjects/stoves/floor_stove_halfling_square01_dpo', 0), + (7336, 7336, 'staticobjects/musical/halfling_zylophone_dpo', 0), + (7337, 7337, 'staticobjects/musical/halfling_music_chimes01_dpo', 0), + (7338, 7338, 'staticobjects/plants/halfling_hangingpot01_dpo', 0), + (7339, 7339, 'staticobjects/rugs/halfing_rugcircle01_dpo', 0), + (7340, 7340, 'staticobjects/rugs/halfing_rugsquare01_dpo', 0), + (7341, 7341, 'staticobjects/fountains_and_pools/sos_fountain_birdbath_floor_small_dpo', 0), + (7342, 7342, 'staticobjects/musical/halfling_jimba01_dpo', 0), + (7343, 7343, 'staticobjects/plants/potted_shrub_dpo', 0), + (7344, 7344, 'staticobjects/plants/potted_shrub_berries_dpo', 0), + (7345, 7345, 'staticobjects/chairs/floor_chair_halfing_paded02', 0), + (7346, 7346, 'staticobjects/kitchen/qey_kitchen_breadpan_withbread001_dpo', 0), + (7347, 7347, 'staticobjects/kitchen/bowl_steam02_dpo', 0), + (7348, 7348, 'staticobjects/kitchen/bowl_steam03_dpo', 0), + (7349, 7349, 'staticobjects/stoves/qey_kitchen_stoveornate001_dpo', 0), + (7350, 7350, 'staticobjects/fountains_and_pools/sos_fountain_birdbath_floor_dpo', 0), + (7351, 7351, 'staticobjects/fountains_and_pools/sos_fountain_birdbath_wall_dpo', 0), + (7352, 7352, 'accessories/hair/hair026', 0), + (7353, 7353, 'accessories/wearable_items/cloak/exp03/cloak_sq_01_iksar', 0), + (7354, 7354, '_exp04/zones/objects/timorous_deep/sarnak_spear_phalanx', 0), + (7355, 7355, 'accessories/wieldable_items/weapons/exp03/2h_sword/exp03_2hs_lucanic', 0), + (7356, 7356, '_exp04/tool_users/sarnak_caster', 0), + (7357, 7357, 'accessories/wieldable_items/weapons/exp03/2h_sword/exp03_2hs_soulfire', 0), + (7358, 7358, 'accessories/wieldable_items/weapons/exp03/1h_crush/exp03_1hc_lucanic_staff', 0), + (7359, 7359, 'accessories/wieldable_items/weapons/exp03/1h_crush/exp03_1hc_soulfire_staff', 0), + (7360, 7360, 'accessories/wieldable_items/weapons/exp03/1h_crush/exp03_1hc_solusekro', 0), + (7361, 7361, '_exp04/monsters/leech', 0), + (7362, 7362, '_exp04/monsters/stoneent', 0), + (7363, 7363, 'staticobjects/interiors/scenes/objects_race/dp_objects/tcg_items/tcg_cardcase01', 0), + (7364, 7364, 'staticobjects/interiors/scenes/objects_race/dp_objects/tcg_items/tcg_painting01', 0), + (7365, 7365, 'staticobjects/interiors/scenes/objects_race/dp_objects/tcg_items/tcg_painting02', 0), + (7366, 7366, 'staticobjects/interiors/scenes/objects_race/dp_objects/tcg_items/tcg_painting03', 0), + (7367, 7367, 'staticobjects/interiors/scenes/objects_race/dp_objects/tcg_items/tcg_paintingarray01', 0), + (7368, 7368, '_exp04/tool_users/sarnak_warrior', 0), + (7369, 7369, 'ec/pc01/sarnak_male/sarnak_male_thin02', 0), + (7370, 7370, 'ec/pc01/sarnak_male/sarnak_male_thin03', 0), + (7371, 7371, 'ec/pc01/sarnak_male/sarnak_male_thin04', 0), + (7372, 7372, 'ec/pc01/sarnak_male/sarnak_male_thin05', 0), + (7373, 7373, 'ec/pc01/sarnak_male/sarnak_male_thin06', 0), + (7374, 7374, 'ec/pc01/sarnak_male/sarnak_male_thin07', 0), + (7375, 7375, 'ec/pc01/sarnak_male/sarnak_male_thin08', 0), + (7376, 7376, 'ec/pc01/sarnak_male/sarnak_male_thin09', 0), + (7377, 7377, 'ec/pc01/sarnak_female/sarnak_female_thin', 0), + (7378, 7378, 'staticobjects/fountains_and_pools/griffin_fountain_dpo', 0), + (7379, 7379, 'accessories/wearable_items/_exp08/dragon_armor/leather1_red/chest', 1096), + (7380, 7380, 'staticobjects/fish/swordfish_dpo', 0), + (7381, 7381, 'staticobjects/fountains_and_pools/sundial_pool_dpo', 0), + (7382, 7382, 'staticobjects/fountains_and_pools/oracle_fountain_dpo', 0), + (7383, 7383, 'staticobjects/fountains_and_pools/thunder_fountain_dpo', 0), + (7384, 7384, 'staticobjects/lighting/darklight_crystal', 0), + (7385, 7385, 'staticobjects/banners/indigo_brotherhood_banner_dpo', 0), + (7386, 7386, 'staticobjects/arches/forest_archway', 0), + (7387, 7387, 'staticobjects/fountains_and_pools/neriak_fountain_dpo', 0), + (7388, 7388, 'accessories/wieldable_items/weapons/exp04/1h_crush/exp04_1hc_sharktooth_mace', 0), + (7389, 7389, 'accessories/wieldable_items/weapons/exp04/1h_crush/exp04_1hc_spiked_mace', 0), + (7390, 7390, 'ec/pc01/sarnak_female/sarnak_female_thin04', 0), + (7391, 7391, 'ec/pc01/sarnak_female/sarnak_female_thin05', 0), + (7392, 7392, '_exp04/monsters/raptor', 0), + (7393, 7393, '_exp04/monsters/skyfiredrake', 0), + (7394, 7394, '_exp04/tool_users/burynai', 0), + (7395, 7395, '_exp04/tool_users/froglok_kunark', 0), + (7396, 7396, 'accessories/wieldable_items/weapons/exp04/1h_sword/exp04_1hs_linked', 0), + (7397, 7397, '_exp04/zones/objects/timorous_deep/tablets/deep_tablet_iksar02', 0), + (7398, 7398, 'accessories/wieldable_items/weapons/exp04/1h_sword/exp04_1hs_kunzar', 0), + (7399, 7399, 'accessories/wieldable_items/weapons/exp04/1h_sword/exp04_1hs_reaver', 0), + (7400, 7400, 'accessories/wieldable_items/weapons/exp04/1h_sword/exp04_1hs_jagged', 0), + (7401, 7401, 'accessories/wieldable_items/weapons/exp04/bow/exp04_bow_dragon_bow', 0), + (7402, 7402, 'accessories/wieldable_items/weapons/exp04/pike/exp04_pike_spiney_spear', 0), + (7403, 7403, 'accessories/wieldable_items/weapons/exp04/shield/exp04_shld_dragonhead_shield', 0), + (7404, 7404, 'accessories/wieldable_items/weapons/exp04/fist/exp04_fist_ornate_knuckledusters', 0), + (7405, 7405, 'accessories/wieldable_items/weapons/exp04/2h_crush/exp04_2hc_sarnak_skull_staff', 0), + (7406, 7406, 'accessories/wieldable_items/weapons/exp04/1h_pierce/exp04_1hp_dual_bladed_stiletto', 0), + (7407, 7407, 'accessories/wieldable_items/weapons/exp04/staff/exp04_staff_spiked_staff', 0), + (7408, 7408, 'accessories/wieldable_items/weapons/exp04/pike/exp04_pike_fisherman_trident', 0), + (7409, 7409, 'accessories/wieldable_items/weapons/exp04/bow/exp04_bow_ornate_bow', 0), + (7410, 7410, 'accessories/wieldable_items/weapons/exp04/shield/exp04_shld_spiney_shield_shield', 0), + (7411, 7411, 'accessories/wieldable_items/weapons/exp04/fist/exp04_fist_dull_ulak', 0), + (7412, 7412, 'accessories/wieldable_items/weapons/exp04/2h_crush/exp04_2hc_iksar_skull_staff', 0), + (7413, 7413, 'accessories/wieldable_items/weapons/exp04/1h_sword/exp04_1hs_dragon_axe', 0), + (7414, 7414, 'accessories/wieldable_items/weapons/exp04/1h_crush/exp04_1hc_jagged_mace', 0), + (7415, 7415, 'accessories/wieldable_items/weapons/exp04/1h_pierce/exp04_1hp_dragonhilt_dagger', 0), + (7416, 7416, 'accessories/wieldable_items/weapons/exp04/1h_sword/exp04_1hs_cleaver_sword', 0), + (7417, 7417, 'accessories/wieldable_items/weapons/exp04/2h_crush/exp04_2hc_spiked_hammer', 0), + (7418, 7418, 'accessories/wieldable_items/weapons/exp04/pike/exp04_pike_spikey_spear', 0), + (7419, 7419, 'accessories/wieldable_items/weapons/exp04/shield/exp04_shld_sebilisian_shield', 0), + (7420, 7420, 'accessories/wieldable_items/weapons/exp04/2h_sword/exp04_2hs_jagged_sword', 0), + (7421, 7421, 'accessories/wearable_items01/_exp03/kaladim_bruiser_gi_01/feet', 0), + (7422, 7422, 'accessories/wieldable_items/weapons/exp04/2h_sword/exp04_2hs_cleaver_sword', 0), + (7423, 7423, '_exp04/tool_users/drolvarg_berserker', 0), + (7424, 7424, '_exp04/tool_users/drolvarg_priest', 0), + (7425, 7425, '_exp04/tool_users/drolvarg_warrior', 0), + (7426, 7426, 'projectiles/lava_rock_burning', 0), + (7427, 7427, 'staticobjects/pictures/df_painting04_dpo', 0), + (7428, 7428, 'accessories/wieldable_items/weapons/exp04/_epic/1h_crush/exp04_1hc_cudgel_of_obviation', 0), + (7429, 7429, 'accessories/wieldable_items/weapons/exp04/_epic/1h_crush/exp04_1hc_dragons_marrow', 0), + (7430, 7430, 'accessories/wieldable_items/weapons/exp04/_epic/1h_crush/exp04_1hc_elemental_dominance', 0), + (7431, 7431, 'accessories/wieldable_items/weapons/exp04/_epic/1h_crush/exp04_1hc_eye_of_siren', 0), + (7432, 7432, 'accessories/wieldable_items/weapons/exp04/_epic/1h_crush/exp04_1hc_penitents_absolution', 0), + (7433, 7433, 'accessories/wieldable_items/weapons/exp04/_epic/1h_crush/exp04_1hc_the_impact_of_the_sacrosanct', 0), + (7434, 7434, 'accessories/wieldable_items/weapons/exp04/_epic/1h_crush/exp04_1hc_torrid_gore', 0), + (7435, 7435, 'accessories/wieldable_items/weapons/exp04/_epic/1h_pierce/exp04_1hp_charms_way', 0), + (7436, 7436, 'accessories/wieldable_items/weapons/exp04/_epic/1h_pierce/exp04_1hp_deaths_grip', 0), + (7437, 7437, 'accessories/wieldable_items/weapons/exp04/_epic/1h_pierce/exp04_1hp_fang_of_ichor', 0), + (7438, 7438, 'accessories/wieldable_items/weapons/exp04/_epic/1h_sword/exp04_1hs_ayonic_axe', 0), + (7439, 7439, 'accessories/wieldable_items/weapons/exp04/_epic/1h_sword/exp04_1hs_dragons_temper', 0), + (7440, 7440, 'accessories/wieldable_items/weapons/exp04/_epic/1h_sword/exp04_1hs_fire_of_the_stalwart', 0), + (7441, 7441, 'accessories/wieldable_items/weapons/exp04/_epic/1h_sword/exp04_1hs_lamentation_of_the_intrepid', 0), + (7442, 7442, 'accessories/wieldable_items/weapons/exp04/_epic/1h_sword/exp04_1hs_night_terror', 0), + (7443, 7443, 'accessories/wieldable_items/weapons/exp04/_epic/1h_sword/exp04_1hs_sedition', 0), + (7444, 7444, 'accessories/wieldable_items/weapons/exp04/_epic/1h_sword/exp04_1hs_the_bite_of_the_wolf', 0), + (7445, 7445, 'accessories/wieldable_items/weapons/exp04/_epic/1h_sword/exp04_1hs_the_truth_of_marr', 0), + (7446, 7446, 'accessories/wieldable_items/weapons/exp04/_epic/1h_sword/exp04_1hs_wrath_of_nature', 0), + (7447, 7447, 'accessories/wieldable_items/weapons/exp04/_epic/bow/exp04_bow_eagles_talon', 0), + (7448, 7448, 'accessories/wieldable_items/weapons/exp04/_epic/fist/exp04_fist_gorynn\'s_fist', 0), + (7449, 7449, 'accessories/wieldable_items/weapons/exp04/_epic/fist/exp04_fist_hand_of_serenity', 0), + (7450, 7450, 'accessories/wieldable_items/weapons/exp04/_epic/pike/exp04_pike_dream_scorcher', 0), + (7451, 7451, 'accessories/wieldable_items/weapons/exp04/_epic/1h_crush/exp04_1hc_mirage_star', 0), + (7452, 7452, 'accessories/wearable_items/_exp08/dragon_armor/leather1_red/feet', 1096), + (7453, 7453, 'accessories/wieldable_items/weapons/exp04/2h_sword/exp04_2hs_dragon', 0), + (7454, 7454, '_exp04/tool_users/golem_jade', 0), + (7455, 7455, 'staticobjects/pictures/df_painting01_dpo', 0), + (7456, 7456, 'staticobjects/pictures/df_painting02_dpo', 0), + (7457, 7457, 'staticobjects/pictures/df_painting03_dpo', 0), + (7458, 7458, 'staticobjects/pictures/df_painting05_dpo', 0), + (7459, 7459, 'staticobjects/pictures/df_painting06_dpo', 0), + (7460, 7460, 'staticobjects/light_sources_player_housing_only/dt_bee_walllamp01_dpo', 0), + (7461, 7461, 'staticobjects/light_sources_player_housing_only/dt_wall_lamp01_dpo', 0), + (7462, 7462, 'staticobjects/plants/dt_flowerpot01_dpo', 0), + (7463, 7463, 'staticobjects/plants/dt_flowerpot02_dpo', 0), + (7464, 7464, 'staticobjects/dpo_invisible_wall/invisible_wall_sof_well_drwy', 0), + (7465, 7465, '_exp04/tool_users/golem_iron', 0), + (7466, 7466, 'staticobjects/dpo_invisible_cube/wisp_collision', 0), + (7467, 7467, 'accessories/wearable_items/_exp04/dragon_chain/chest', 0), + (7468, 7468, 'accessories/wearable_items/_exp04/dragon_chain/feet', 0), + (7469, 7469, 'accessories/wearable_items/_exp04/dragon_chain/forearms', 0), + (7470, 7470, 'accessories/wearable_items/_exp04/dragon_chain/hands', 0), + (7471, 7471, 'accessories/wearable_items/_exp04/dragon_chain/head', 0), + (7472, 7472, 'accessories/wearable_items/_exp04/dragon_chain/legs', 0), + (7473, 7473, 'accessories/wearable_items/_exp04/dragon_chain/legs_noskirt', 0), + (7474, 7474, 'accessories/wearable_items/_exp04/dragon_chain/shoulders', 0), + (7475, 7475, 'accessories/wearable_items/_exp04/dragon_chain/skirt', 0), + (7476, 7476, 'accessories/wearable_items/_exp04/dragon_gi/chest', 0), + (7477, 7477, 'accessories/wearable_items/_exp04/dragon_gi/pants', 0), + (7478, 7478, 'accessories/wearable_items/_exp04/dragon_gi/shoulders', 0), + (7479, 7479, 'accessories/wearable_items/_exp04/dragon_leather/chest', 0), + (7480, 7480, 'accessories/wearable_items/_exp04/dragon_leather/feet', 0), + (7481, 7481, 'accessories/wearable_items/_exp04/dragon_leather/forearms', 0), + (7482, 7482, 'accessories/wearable_items/_exp04/dragon_leather/hands', 0), + (7483, 7483, 'accessories/wearable_items/_exp04/dragon_leather/head', 0), + (7484, 7484, 'accessories/wearable_items/_exp04/dragon_leather/legs', 0), + (7485, 7485, 'accessories/wearable_items/_exp04/dragon_leather/legs_noskirt', 0), + (7486, 7486, 'accessories/wearable_items/_exp04/dragon_leather/shoulders', 0), + (7487, 7487, 'accessories/wearable_items/_exp04/dragon_leather/skirt', 0), + (7488, 7488, 'accessories/wearable_items/_exp04/dragon_robe/chest', 0), + (7489, 7489, 'accessories/wearable_items/_exp04/dragon_robe/hood', 0), + (7490, 7490, 'accessories/wearable_items/_exp04/dragon_robe/pants', 0), + (7491, 7491, 'accessories/wearable_items/_exp04/dragon_robe/skirt', 0), + (7492, 7492, 'accessories/wearable_items/_exp04/dragon_vanguard/chest', 0), + (7493, 7493, 'accessories/wearable_items/_exp04/dragon_vanguard/feet', 0), + (7494, 7494, 'accessories/wearable_items/_exp04/dragon_vanguard/forearms', 0), + (7495, 7495, 'accessories/wearable_items/_exp04/dragon_vanguard/hands', 0), + (7496, 7496, 'accessories/wearable_items/_exp04/dragon_vanguard/head', 0), + (7497, 7497, 'accessories/wearable_items/_exp04/dragon_vanguard/legs', 0), + (7498, 7498, 'accessories/wearable_items/_exp04/dragon_vanguard/legs_noskirt', 0), + (7499, 7499, 'accessories/wearable_items/_exp04/dragon_vanguard/shoulders', 0), + (7500, 7500, 'accessories/wearable_items/_exp04/dragon_vanguard/shoulders_nopauldrons', 0), + (7501, 7501, 'accessories/wearable_items/_exp04/dragon_vanguard/skirt', 0), + (7502, 7502, 'accessories/wearable_items/_exp04/dragon_vanguard_priest/chest', 0), + (7503, 7503, 'accessories/wearable_items/_exp04/dragon_vanguard_priest/feet', 0), + (7504, 7504, 'accessories/wearable_items/_exp04/dragon_vanguard_priest/forearms', 0), + (7505, 7505, 'accessories/wearable_items/_exp04/dragon_vanguard_priest/hands', 0), + (7506, 7506, 'accessories/wearable_items/_exp04/dragon_vanguard_priest/head', 0), + (7507, 7507, 'accessories/wearable_items/_exp04/dragon_vanguard_priest/legs', 0), + (7508, 7508, 'accessories/wearable_items/_exp04/dragon_vanguard_priest/legs_noskirt', 0), + (7509, 7509, 'accessories/wearable_items/_exp04/dragon_vanguard_priest/shoulders', 0), + (7510, 7510, 'accessories/wearable_items/_exp04/dragon_vanguard_priest/shoulders_nopauldrons', 0), + (7511, 7511, 'accessories/wearable_items/_exp04/dragon_vanguard_priest/skirt', 0), + (7512, 7512, 'accessories/wearable_items/_exp04/iksar_chain/chest', 0), + (7513, 7513, 'accessories/wearable_items/_exp04/iksar_chain/feet', 0), + (7514, 7514, 'accessories/wearable_items/_exp04/iksar_chain/forearms', 0), + (7515, 7515, 'accessories/wearable_items/_exp04/iksar_chain/hands', 0), + (7516, 7516, 'accessories/wearable_items/_exp04/iksar_chain/head', 0), + (7517, 7517, 'accessories/wearable_items/_exp04/iksar_chain/legs', 0), + (7518, 7518, 'accessories/wearable_items/_exp04/iksar_chain/legs_noskirt', 0), + (7519, 7519, 'accessories/wearable_items/_exp04/iksar_chain/shoulders', 0), + (7520, 7520, 'accessories/wearable_items/_exp04/iksar_chain/skirt', 0), + (7521, 7521, 'accessories/wearable_items/_exp04/iksar_gi/chest', 0), + (7522, 7522, 'accessories/wearable_items/_exp04/iksar_gi/pants', 0), + (7523, 7523, 'accessories/wearable_items/_exp04/iksar_gi/shoulders', 0), + (7524, 7524, 'accessories/wearable_items/_exp04/iksar_leather/chest', 0), + (7525, 7525, 'accessories/wearable_items/_exp04/iksar_leather/feet', 0), + (7526, 7526, 'accessories/wearable_items/_exp04/iksar_leather/forearms', 0), + (7527, 7527, 'accessories/wearable_items/_exp04/iksar_leather/hands', 0), + (7528, 7528, 'accessories/wearable_items/_exp04/iksar_leather/head', 0), + (7529, 7529, 'accessories/wearable_items/_exp04/iksar_leather/legs', 0), + (7530, 7530, 'accessories/wearable_items/_exp04/iksar_leather/legs_noskirt', 0), + (7531, 7531, 'accessories/wearable_items/_exp04/iksar_leather/shoulders', 0), + (7532, 7532, 'accessories/wearable_items/_exp04/iksar_leather/skirt', 0), + (7533, 7533, 'accessories/wearable_items/_exp04/iksar_robe/chest', 0), + (7534, 7534, 'accessories/wearable_items/_exp04/iksar_robe/hood', 0), + (7535, 7535, 'accessories/wearable_items/_exp04/iksar_robe/pants', 0), + (7536, 7536, 'accessories/wearable_items/_exp04/iksar_robe/skirt', 0), + (7537, 7537, 'accessories/wearable_items/_exp04/iksar_vanguard/chest', 0), + (7538, 7538, 'accessories/wearable_items/_exp04/iksar_vanguard/feet', 0), + (7539, 7539, 'accessories/wearable_items/_exp04/iksar_vanguard/forearms', 0), + (7540, 7540, 'accessories/wearable_items/_exp04/iksar_vanguard/hands', 0), + (7541, 7541, 'accessories/wearable_items/_exp04/iksar_vanguard/head', 0), + (7542, 7542, 'accessories/wearable_items/_exp04/iksar_vanguard/legs', 0), + (7543, 7543, 'accessories/wearable_items/_exp04/iksar_vanguard/legs_noskirt', 0), + (7544, 7544, 'accessories/wearable_items/_exp08/dragon_armor/leather1_red/forearms', 1096), + (7545, 7545, 'accessories/wearable_items/_exp04/iksar_vanguard/shoulders', 0), + (7546, 7546, 'accessories/wearable_items/_exp04/iksar_vanguard/shoulders_nopauldrons', 0), + (7547, 7547, 'accessories/wearable_items/_exp04/iksar_vanguard/skirt', 0), + (7548, 7548, 'accessories/wearable_items/_exp04/sarnak_chain/chest', 0), + (7549, 7549, 'accessories/wearable_items/_exp04/sarnak_chain/feet', 0), + (7550, 7550, 'accessories/wearable_items/_exp04/sarnak_chain/forearms', 0), + (7551, 7551, 'accessories/wearable_items/_exp04/sarnak_chain/hands', 0), + (7552, 7552, 'accessories/wearable_items/_exp04/sarnak_chain/head', 0), + (7553, 7553, 'accessories/wearable_items/_exp04/sarnak_chain/legs', 0), + (7554, 7554, 'accessories/wearable_items/_exp04/sarnak_chain/legs_noskirt', 0), + (7555, 7555, 'accessories/wearable_items/_exp04/sarnak_chain/shoulders', 0), + (7556, 7556, 'accessories/wearable_items/_exp04/sarnak_chain/skirt', 0), + (7557, 7557, 'accessories/wearable_items/_exp04/sarnak_chain_caster/chest', 0), + (7558, 7558, 'accessories/wearable_items/_exp04/sarnak_chain_caster/feet', 0), + (7559, 7559, 'accessories/wearable_items/_exp04/sarnak_chain_caster/forearms', 0), + (7560, 7560, 'accessories/wearable_items/_exp04/sarnak_chain_caster/hands', 0), + (7561, 7561, 'accessories/wearable_items/_exp04/sarnak_chain_caster/head', 0), + (7562, 7562, 'accessories/wearable_items/_exp04/sarnak_chain_caster/legs', 0), + (7563, 7563, 'accessories/wearable_items/_exp04/sarnak_chain_caster/legs_noskirt', 0), + (7564, 7564, 'accessories/wearable_items/_exp04/sarnak_chain_caster/shoulders', 0), + (7565, 7565, 'accessories/wearable_items/_exp04/sarnak_chain_caster/skirt', 0), + (7566, 7566, 'accessories/wearable_items/_exp04/sarnak_leather/chest', 0), + (7567, 7567, 'accessories/wearable_items/_exp04/sarnak_leather/feet', 0), + (7568, 7568, 'accessories/wearable_items/_exp04/sarnak_leather/forearms', 0), + (7569, 7569, 'accessories/wearable_items/_exp04/sarnak_leather/hands', 0), + (7570, 7570, 'accessories/wearable_items/_exp04/sarnak_leather/head', 0), + (7571, 7571, 'accessories/wearable_items/_exp04/sarnak_leather/legs', 0), + (7572, 7572, 'accessories/wearable_items/_exp04/sarnak_leather/legs_noskirt', 0), + (7573, 7573, 'accessories/wearable_items/_exp04/sarnak_leather/shoulders', 0), + (7574, 7574, 'accessories/wearable_items/_exp04/sarnak_leather/skirt', 0), + (7575, 7575, 'accessories/wearable_items/_exp04/sarnak_robe/chest', 0), + (7576, 7576, 'accessories/wearable_items/_exp04/sarnak_robe/hood', 0), + (7577, 7577, 'accessories/wearable_items/_exp04/sarnak_robe/pants', 0), + (7578, 7578, 'accessories/wearable_items/_exp04/sarnak_robe/skirt', 0), + (7579, 7579, 'accessories/wearable_items/_exp04/sarnak_vanguard/chest', 0), + (7580, 7580, 'accessories/wearable_items/_exp04/sarnak_vanguard/feet', 0), + (7581, 7581, 'accessories/wearable_items/_exp04/sarnak_vanguard/forearms', 0), + (7582, 7582, 'accessories/wearable_items/_exp04/sarnak_vanguard/hands', 0), + (7583, 7583, 'accessories/wearable_items/_exp04/sarnak_vanguard/head', 0), + (7584, 7584, 'accessories/wearable_items/_exp04/sarnak_vanguard/legs', 0), + (7585, 7585, 'accessories/wearable_items/_exp04/sarnak_vanguard/legs_noskirt', 0), + (7586, 7586, 'accessories/wearable_items/_exp04/sarnak_vanguard/shoulders', 0), + (7587, 7587, 'accessories/wearable_items/_exp04/sarnak_vanguard/shoulders_nopauldrons', 0), + (7588, 7588, 'accessories/wearable_items/_exp04/sarnak_vanguard/skirt', 0), + (7589, 7589, 'projectiles/cow_launched', 0), + (7590, 7590, '_exp04/zones/objects/jarsath_wastes/jw_barricade01_iksar', 0), + (7591, 7591, '_exp04/monsters/trakanon', 0), + (7592, 7592, 'accessories/wearable_items/_exp08/dragon_armor/leather1_red/hands', 1096), + (7593, 7593, 'projectiles/spell_beehive', 0), + (7594, 7594, '_exp04/zones/objects/veeshans_peak/field_generator/vp_fieldgenerator_base01', 0), + (7595, 7595, '_exp04/zones/objects/veeshans_peak/weapon_rack/vp_weapon_rack01', 0), + (7596, 7596, '_exp04/zones/objects/timorous_deep/spiroc_cage', 0), + (7597, 7597, '_exp04/zones/objects/timorous_deep/spiroc_cagedoor', 0), + (7598, 7598, '_exp04/tool_users/drolvarg_pawbuster', 0), + (7599, 7599, 'accessories/wieldable_items/weapons/staff/escrima/escrima002_bristlebane', 0), + (7600, 7600, '_exp04/monsters/clay_golem_magma', 0), + (7601, 7601, 'staticobjects/deity_altars/altar_bristlebane_basic', 0), + (7602, 7602, 'staticobjects/deity_altars/altar_bristlebane_crafted', 0), + (7603, 7603, 'staticobjects/deity_altars/altar_bristlebane_exceptional', 0), + (7604, 7604, 'staticobjects/bookcases/qey_bookcase_ornate001_dpo', 0), + (7605, 7605, 'staticobjects/bookcases/qey_bookcase_plain001_dpo', 0), + (7606, 7606, 'staticobjects/games/qey_gametable_card_withcards001_dpo', 0), + (7607, 7607, 'staticobjects/light_sources_player_housing_only/vrsn_candelabra01_skel_dpo', 0), + (7608, 7608, 'staticobjects/light_sources_player_housing_only/vrsn_torch01_wall_green_dpo', 0), + (7609, 7609, 'staticobjects/light_sources_player_housing_only/vrsn_torch02_wall_green_dpo', 0), + (7610, 7610, 'staticobjects/pictures/qey_painting_billportrait001_dpo', 0), + (7611, 7611, 'staticobjects/pictures/qey_painting_claymore001_dpo', 0), + (7612, 7612, 'staticobjects/pictures/qey_painting_horseknight001_dpo', 0), + (7613, 7613, 'staticobjects/bookcases/fprt_bookcase_smallornate03_dpo', 0), + (7614, 7614, 'staticobjects/bookcases/nk_obj_bookcase_large01_dpo', 0), + (7615, 7615, 'staticobjects/counters/nk_obj_counterlarge01_dpo', 0), + (7616, 7616, 'staticobjects/counters/nk_obj_counterlarge03_dpo', 0), + (7617, 7617, 'staticobjects/counters/nk_obj_counternormal01_dpo', 0), + (7618, 7618, 'staticobjects/chairs/nk_obj_chair_ornate_metal01_dpo', 0), + (7619, 7619, 'staticobjects/tables/nk_obj_table_ornate01_dpo', 0), + (7620, 7620, 'staticobjects/beds/nk_obj_ornate_metal_bed01_dpo', 0), + (7621, 7621, 'staticobjects/beds/nk_obj_darklight_palace_bed01_dpo', 0), + (7622, 7622, 'staticobjects/chairs/nk_obj_brotherhood_dpo', 0), + (7623, 7623, 'staticobjects/light_sources_player_housing_only/dw_obj_chandelier_gothic01_red_dpo', 0), + (7624, 7624, 'staticobjects/light_sources_player_housing_only/dw_obj_chandelier_crystal01_green_dpo', 0), + (7625, 7625, '_exp04/zones/objects/misc/hitching_post', 0), + (7626, 7626, 'staticobjects/games/qey_gametable_roundcard_withcards001_dpo', 0), + (7627, 7627, '_exp04/monsters/skyfiredrake_cinder', 0), + (7628, 7628, '_exp04/zones/objects/veeshans_peak/field_generator/vp_fieldgenerator_base02', 0), + (7629, 7629, 'accessories/wearable_items/_exp08/dragon_armor/leather1_red/head', 1096), + (7630, 7630, '_exp04/zones/objects/veeshans_peak/vp_teleporter', 0), + (7631, 7631, '_exp04/monsters/dragon_skeleton', 0), + (7632, 7632, '_exp04/monsters/hoshkar', 0), + (7633, 7633, '_exp04/monsters/nexona', 0), + (7634, 7634, '_exp04/monsters/phara_dar', 0), + (7635, 7635, '_exp04/monsters/silverwing', 0), + (7636, 7636, '_exp04/tool_users/burynai_caster', 0), + (7637, 7637, '_exp04/tool_users/burynai_warrior', 0), + (7638, 7638, '_exp04/tool_users/iksar_skeleton', 0), + (7639, 7639, '_exp04/tool_users/mountain_giant', 0), + (7640, 7640, '_exp04/tool_users/xalgoz', 0), + (7641, 7641, '_exp04/monsters/behemoth_medusa', 0), + (7642, 7642, 'ec/npc/zombie_fresh_male_halfling', 0), + (7643, 7643, '_exp04/zones/objects/misc/sebilis_obj_gate02', 0), + (7644, 7644, 'staticobjects/boats/fullboat', 0), + (7645, 7645, '_exp04/monsters/fishman_scout', 0), + (7646, 7646, '_exp04/tool_users/fishman_scout_tu', 0), + (7647, 7647, 'staticobjects/dpo_invisible_cube/dpo_invisible_cube_bigger', 0), + (7648, 7648, '_exp04/tool_users/froglok_kunark_chain', 0), + (7649, 7649, '_exp04/zones/objects/chardok/char_totem', 0), + (7650, 7650, 'staticobjects/crates/floor_crate_sebilis_closed01', 0), + (7651, 7651, '_exp04/zones/objects/charasis/cha_crystal_purple01', 0), + (7652, 7652, '_exp04/zones/objects/charasis/cha_crystal_turquoise01', 0), + (7653, 7653, '_exp04/zones/objects/charasis/cha_crystal01_invisiblepurple', 0), + (7654, 7654, '_exp04/zones/objects/charasis/cha_crystal01_invisibleturquoise', 0), + (7655, 7655, '_exp04/zones/objects/sebilis/desk_torch', 0), + (7656, 7656, 'staticobjects/eig/eig_harvest_location_green', 0), + (7657, 7657, 'staticobjects/eig/eig_harvest_location_purple', 0), + (7658, 7658, 'staticobjects/eig/eig_harvest_location_red', 0), + (7659, 7659, '_exp04/zones/objects/fens_of_nathsar/riliss_pen_fence', 0), + (7660, 7660, 'staticobjects/candles/df_candelabra02_dpo', 0), + (7661, 7661, 'staticobjects/torture_chamber/df_bars01_dpo', 0), + (7662, 7662, 'staticobjects/torture_chamber/df_shackle03_dpo', 0), + (7663, 7663, 'staticobjects/torture_chamber/bef_stolentorturechair001_dpo', 0), + (7664, 7664, 'staticobjects/platforms/df_banquetplatform_dpo', 0), + (7665, 7665, 'staticobjects/torture_chamber/df_torturestockade01_dpo', 0), + (7666, 7666, 'staticobjects/torture_chamber/df_torturetable01_dpo', 0), + (7667, 7667, 'staticobjects/torture_chamber/df_torturechair01_dpo', 0), + (7668, 7668, 'staticobjects/light_sources_player_housing_only/orc_roadsign_dpo', 0), + (7669, 7669, 'staticobjects/platforms/df_dais02_dpo', 0), + (7670, 7670, 'staticobjects/pillars/df_thronepillar01_dpo', 0), + (7671, 7671, 'staticobjects/light_sources_player_housing_only/df_columnfire_dpo', 0), + (7672, 7672, 'staticobjects/light_sources_player_housing_only/orc_brazier02_dpo', 0), + (7673, 7673, 'staticobjects/beds/df_emperorbed01_dpo', 0), + (7674, 7674, 'staticobjects/tapestry/df_drapes01_dpo', 0), + (7675, 7675, 'staticobjects/light_sources_player_housing_only/df_torch02_dpo', 0), + (7676, 7676, 'staticobjects/candles/df_candle03_dpo', 0), + (7677, 7677, 'staticobjects/torture_chamber/df_skeletonbox01_dpo', 0), + (7678, 7678, 'staticobjects/torture_chamber/df_skeletonbox006_dpo', 0), + (7679, 7679, 'staticobjects/torture_chamber/df_skeletonbox03_dpo', 0), + (7680, 7680, 'staticobjects/torture_chamber/df_spearedskele02_dpo', 0), + (7681, 7681, 'accessories/wearable_items/_exp08/dragon_armor/leather1_red/legs', 1096), + (7682, 7682, '_exp04/monsters/behemoth_piercer', 0), + (7683, 7683, '_exp04/tool_users/drusella_sathir', 0), + (7684, 7684, '_exp04/zones/objects/jarsath_wastes/lava_hrvst_fish_shallow', 0), + (7685, 7685, 'accessories/wearable_items01/_exp00/magus/artifact/high/legs', 0), + (7686, 7686, 'accessories/wearable_items01/_exp00/magus/artifact/high/feet', 0), + (7687, 7687, '_exp04/monsters/clay_golem_storm', 0), + (7688, 7688, 'accessories/wearable_items/_exp08/dragon_armor/leather1_red/legs_noskirt', 1096), + (7689, 7689, 'ec/pc01/sarnak_female/sarnak_female_thin02', 0), + (7690, 7690, 'ec/pc01/sarnak_female/sarnak_female_thin03', 0), + (7691, 7691, 'staticobjects/armor/brigandine_iksar_male_chest', 0), + (7692, 7692, 'accessories/wieldable_items/weapons/exp04/1h_sword/exp04_1hs_translucent_sword', 0), + (7693, 7693, 'accessories/wieldable_items/weapons/exp04/1h_crush/exp04_1hc_flailcensor', 0), + (7694, 7694, 'accessories/wieldable_items/weapons/exp04/2h_sword/exp04_2hs_translucent_greatsword', 0), + (7695, 7695, 'accessories/wieldable_items/weapons/exp04/1h_sword/exp04_1hs_hook_dagger', 0), + (7696, 7696, 'accessories/wieldable_items/weapons/exp04/1h_sword/exp04_1hs_pronged_sword', 0), + (7697, 7697, 'accessories/wieldable_items/weapons/exp04/1h_pierce/exp04_1hp_flame_dagger', 0), + (7698, 7698, 'accessories/wieldable_items/weapons/exp04/shield/exp04_shld_dragonscale_shield', 0), + (7699, 7699, 'accessories/wieldable_items/weapons/exp04/1h_sword/exp04_1hs_hooked_sword', 0), + (7700, 7700, 'accessories/wieldable_items/weapons/exp04/shield/exp04_shld_tiki_shield', 0), + (7701, 7701, 'accessories/wieldable_items/weapons/exp04/1h_pierce/exp04_1hp_vampiric_sacrificial_dagger', 0), + (7702, 7702, 'accessories/wieldable_items/weapons/exp04/shield/exp04_shld_diamond_shield', 0), + (7703, 7703, 'staticobjects/plants/qey_objects_treeplanter01_dpo', 0), + (7704, 7704, 'staticobjects/light_sources_player_housing_only/halfling_streetlamp01_sm_dpo', 0), + (7705, 7705, 'staticobjects/light_sources_player_housing_only/halfling_streetlamp01_pot_lrg_dpo', 0), + (7706, 7706, 'staticobjects/light_sources_player_housing_only/halfling_streetlamp01_lrg_dpo', 0), + (7707, 7707, 'staticobjects/light_sources_player_housing_only/halfling_streetlamp01_pot_sm_dpo', 0), + (7708, 7708, 'staticobjects/tools/qey_3towers_hourglass001_dpo', 0), + (7709, 7709, 'staticobjects/tools/fprt_scribe_inkwellornate01_dpo', 0), + (7710, 7710, 'staticobjects/tools/fprt_bank_scalestipped01_dpo', 0), + (7711, 7711, '_exp04/zones/objects/sebilis/audiencechamber_door', 0), + (7712, 7712, '_exp04/zones/objects/veeshans_peak/vp_light_game_door_barrier', 0), + (7713, 7713, '_exp04/tool_users/venril_sathir', 0), + (7714, 7714, 'ui_fx/fx/systems/wieldables/1h_sword_invisible', 0), + (7715, 7715, 'ui_fx/fx/systems/wieldables/1h_crush_invisible', 0), + (7716, 7716, 'accessories/wieldable_items/weapons/exp04/2h_crush/exp04_2hc_mage_staff', 0), + (7717, 7717, '_exp04/zones/objects/veeshans_peak/eggs/vp_dragoneggs_broken01', 0), + (7718, 7718, '_exp04/zones/objects/veeshans_peak/eggs/vp_dragoneggs_broken02', 0), + (7719, 7719, '_exp04/zones/objects/veeshans_peak/eggs/vp_dragoneggs_unbroken01', 0), + (7720, 7720, '_exp04/zones/objects/veeshans_peak/eggs/vp_dragoneggs_unbroken02', 0), + (7721, 7721, '_exp04/zones/objects/veeshans_peak/switch_block/vp_switchblock_base', 0), + (7722, 7722, '_exp04/zones/objects/veeshans_peak/switch_block/vp_switchblock_switch', 0), + (7723, 7723, '_exp04/zones/objects/chardok/chardok_bunks01', 0), + (7724, 7724, '_exp04/zones/objects/chardok/chardok_bunks02', 0), + (7725, 7725, '_exp04/monsters/behemoth_basher', 0), + (7726, 7726, '_exp04/monsters/behemoth_eyestalk', 0), + (7727, 7727, '_exp04/monsters/behemoth_main', 0), + (7728, 7728, '_exp04/monsters/behemoth_spitter', 0), + (7729, 7729, '_exp04/zones/objects/veeshans_peak/statues/vp_ring_of_scale01', 0), + (7730, 7730, 'accessories/wieldable_items/weapons/exp04/1h_crush/exp04_1hc_crystal_wand', 0), + (7731, 7731, 'accessories/wearable_items/starter_clothes/sarnak_male/chest', 0), + (7732, 7732, 'accessories/wearable_items/starter_clothes/sarnak_male/legs', 0), + (7733, 7733, 'accessories/wearable_items/starter_clothes/sarnak_female/chest', 0), + (7734, 7734, 'accessories/wearable_items/starter_clothes/sarnak_female/legs', 0), + (7735, 7735, '_exp04/zones/objects/charasis/cha_totem_south', 0), + (7736, 7736, '_exp04/zones/objects/charasis/cha_canopic_vase02', 0), + (7737, 7737, 'accessories/wieldable_items/weapons/exp04/talisman/exp04_tribal_idol', 0), + (7738, 7738, 'accessories/wieldable_items/weapons/exp04/1h_crush/exp04_1hc_golden_wand', 0), + (7739, 7739, 'creatures/tu/gods_tribunal', 0), + (7740, 7740, 'accessories/wieldable_items/weapons/exp04/orb/exp04_orb_multicolored_glass_ball', 0), + (7741, 7741, 'creatures/monsters/crab_timorous', 0), + (7742, 7742, 'creatures/monsters/griffin_tintable', 0), + (7743, 7743, '_exp04/zones/objects/chardok/char_lever_wall_base01', 0), + (7744, 7744, '_exp04/zones/objects/chardok/char_lever_wall_switch01', 0), + (7745, 7745, 'staticobjects/interiors/scenes/objects_race/dp_objects/tcg_items/tcg_venril_painting01', 0), + (7746, 7746, 'accessories/wieldable_items/weapons/exp04/shield/exp04_shld_sarnak_shield', 0), + (7747, 7747, 'accessories/wieldable_items/weapons/exp04/shield/exp04_shld_unusual_shield', 0), + (7748, 7748, '_exp04/zones/objects/chardok/sarnak_barricade', 0), + (7749, 7749, 'accessories/wieldable_items/shields/exp04/exp04_small_held_symbol_green_praetor', 0), + (7750, 7750, 'accessories/wieldable_items/shields/exp04/exp04_small_held_symbol_blue_ice', 0), + (7751, 7751, 'accessories/wieldable_items/shields/exp04/exp04_small_held_symbol_green_poison', 0), + (7752, 7752, 'accessories/wieldable_items/shields/exp04/exp04_small_held_symbol_red_fire', 0), + (7753, 7753, 'accessories/wearable_items/_exp08/dragon_armor/leather1_red/shoulders', 1096), + (7754, 7754, 'accessories/wieldable_items/weapons/exp04/shield/exp04_shld_shipwheel_shield01', 0), + (7755, 7755, 'accessories/wieldable_items/weapons/exp04/shield/exp04_shld_shipwheel_shield02', 0), + (7756, 7756, 'accessories/wieldable_items/weapons/exp04/shield/exp04_shld_shipwheel_shield03', 0), + (7757, 7757, 'staticobjects/deity_altars/altar_bertoxxulous_basic', 0), + (7758, 7758, 'staticobjects/deity_altars/altar_bertoxxulous_crafted', 0), + (7759, 7759, 'staticobjects/deity_altars/altar_bertoxxulous_exceptional', 0), + (7760, 7760, 'staticobjects/deity_altars/altar_karana_basic', 0), + (7761, 7761, 'staticobjects/deity_altars/altar_karana_crafted', 0), + (7762, 7762, 'staticobjects/deity_altars/altar_karana_exceptional', 0), + (7763, 7763, 'staticobjects/deity_altars/altar_tribunal_basic', 0), + (7764, 7764, 'staticobjects/deity_altars/altar_tribunal_crafted', 0), + (7765, 7765, 'staticobjects/deity_altars/altar_tribunal_exceptional', 0), + (7766, 7766, 'accessories/wearable_items01/_exp04/dragon_chain/chest', 0), + (7767, 7767, 'accessories/wearable_items01/_exp04/dragon_chain/feet', 0), + (7768, 7768, 'accessories/wearable_items01/_exp04/dragon_chain/forearms', 0), + (7769, 7769, 'accessories/wearable_items01/_exp04/dragon_chain/hands', 0), + (7770, 7770, 'accessories/wearable_items01/_exp04/dragon_chain/head', 0), + (7771, 7771, 'accessories/wearable_items01/_exp04/dragon_chain/legs', 0), + (7772, 7772, 'accessories/wearable_items01/_exp04/dragon_chain/legs_noskirt', 0), + (7773, 7773, 'accessories/wearable_items01/_exp04/dragon_chain/shoulders', 0), + (7774, 7774, 'accessories/wearable_items01/_exp04/dragon_chain/skirt', 0), + (7775, 7775, 'accessories/wearable_items01/_exp04/dragon_gi/chest', 0), + (7776, 7776, 'accessories/wearable_items01/_exp04/dragon_gi/pants', 0), + (7777, 7777, 'accessories/wearable_items01/_exp04/dragon_gi/shoulders', 0), + (7778, 7778, 'accessories/wearable_items01/_exp04/dragon_leather/chest', 0), + (7779, 7779, 'accessories/wearable_items01/_exp04/dragon_leather/feet', 0), + (7780, 7780, 'accessories/wearable_items01/_exp04/dragon_leather/forearms', 0), + (7781, 7781, 'accessories/wearable_items01/_exp04/dragon_leather/hands', 0), + (7782, 7782, 'accessories/wearable_items01/_exp04/dragon_leather/head', 0), + (7783, 7783, 'accessories/wearable_items01/_exp04/dragon_leather/legs', 0), + (7784, 7784, 'accessories/wearable_items01/_exp04/dragon_leather/legs_noskirt', 0), + (7785, 7785, 'accessories/wearable_items01/_exp04/dragon_leather/shoulders', 0), + (7786, 7786, 'accessories/wearable_items01/_exp04/dragon_leather/skirt', 0), + (7787, 7787, 'accessories/wearable_items01/_exp04/dragon_robe/chest', 0), + (7788, 7788, 'accessories/wearable_items01/_exp04/dragon_robe/hood', 0), + (7789, 7789, 'accessories/wearable_items01/_exp04/dragon_robe/pants', 0), + (7790, 7790, 'accessories/wearable_items01/_exp04/dragon_robe/skirt', 0), + (7791, 7791, 'accessories/wearable_items01/_exp04/dragon_vanguard/chest', 0), + (7792, 7792, 'accessories/wearable_items01/_exp04/dragon_vanguard/feet', 0), + (7793, 7793, 'accessories/wearable_items01/_exp04/dragon_vanguard/forearms', 0), + (7794, 7794, 'accessories/wearable_items01/_exp04/dragon_vanguard/hands', 0), + (7795, 7795, 'accessories/wearable_items01/_exp04/dragon_vanguard/head', 0), + (7796, 7796, 'accessories/wearable_items01/_exp04/dragon_vanguard/legs', 0), + (7797, 7797, 'accessories/wearable_items01/_exp04/dragon_vanguard/legs_noskirt', 0), + (7798, 7798, 'accessories/wearable_items01/_exp04/dragon_vanguard/right', 0), + (7799, 7799, 'accessories/wearable_items01/_exp04/dragon_vanguard/shoulders', 0), + (7800, 7800, 'accessories/wearable_items01/_exp04/dragon_vanguard/shoulders_nopauldrons', 0), + (7801, 7801, 'accessories/wearable_items01/_exp04/dragon_vanguard/skirt', 0), + (7802, 7802, 'accessories/wearable_items01/_exp04/dragon_vanguard_priest/chest', 0), + (7803, 7803, 'accessories/wearable_items01/_exp04/dragon_vanguard_priest/feet', 0), + (7804, 7804, 'accessories/wearable_items01/_exp04/dragon_vanguard_priest/forearms', 0), + (7805, 7805, 'accessories/wearable_items01/_exp04/dragon_vanguard_priest/hands', 0), + (7806, 7806, 'accessories/wearable_items01/_exp04/dragon_vanguard_priest/head', 0), + (7807, 7807, 'accessories/wearable_items01/_exp04/dragon_vanguard_priest/legs', 0), + (7808, 7808, 'accessories/wearable_items01/_exp04/dragon_vanguard_priest/legs_noskirt', 0), + (7809, 7809, 'accessories/wearable_items01/_exp04/dragon_vanguard_priest/right', 0), + (7810, 7810, 'accessories/wearable_items01/_exp04/dragon_vanguard_priest/shoulders', 0), + (7811, 7811, 'accessories/wearable_items01/_exp04/dragon_vanguard_priest/shoulders_nopauldrons', 0), + (7812, 7812, 'accessories/wearable_items01/_exp04/dragon_vanguard_priest/skirt', 0), + (7813, 7813, 'accessories/wearable_items01/_exp04/iksar_chain/chest', 0), + (7814, 7814, 'accessories/wearable_items01/_exp04/iksar_chain/feet', 0), + (7815, 7815, 'accessories/wearable_items01/_exp04/iksar_chain/forearms', 0), + (7816, 7816, 'accessories/wearable_items01/_exp04/iksar_chain/hands', 0), + (7817, 7817, 'accessories/wearable_items01/_exp04/iksar_chain/head', 0), + (7818, 7818, 'accessories/wearable_items01/_exp04/iksar_chain/legs', 0), + (7819, 7819, 'accessories/wearable_items01/_exp04/iksar_chain/legs_noskirt', 0), + (7820, 7820, 'accessories/wearable_items01/_exp04/iksar_chain/shoulders', 0), + (7821, 7821, 'accessories/wearable_items01/_exp04/iksar_chain/skirt', 0), + (7822, 7822, 'accessories/wearable_items01/_exp04/iksar_gi/chest', 0), + (7823, 7823, 'accessories/wearable_items01/_exp04/iksar_gi/pants', 0), + (7824, 7824, 'accessories/wearable_items01/_exp04/iksar_gi/shoulders', 0), + (7825, 7825, 'accessories/wearable_items01/_exp04/iksar_leather/chest', 0), + (7826, 7826, 'accessories/wearable_items01/_exp04/iksar_leather/feet', 0), + (7827, 7827, 'accessories/wearable_items01/_exp04/iksar_leather/forearms', 0), + (7828, 7828, 'accessories/wearable_items01/_exp04/iksar_leather/hands', 0), + (7829, 7829, 'accessories/wearable_items01/_exp04/iksar_leather/head', 0), + (7830, 7830, 'accessories/wearable_items01/_exp04/iksar_leather/legs', 0), + (7831, 7831, 'accessories/wearable_items01/_exp04/iksar_leather/legs_noskirt', 0), + (7832, 7832, 'accessories/wearable_items01/_exp04/iksar_leather/shoulders', 0), + (7833, 7833, 'accessories/wearable_items01/_exp04/iksar_leather/skirt', 0), + (7834, 7834, 'accessories/wearable_items01/_exp04/iksar_robe/chest', 0), + (7835, 7835, 'accessories/wearable_items01/_exp04/iksar_robe/hood', 0), + (7836, 7836, 'accessories/wearable_items01/_exp04/iksar_robe/pants', 0), + (7837, 7837, 'accessories/wearable_items01/_exp04/iksar_robe/skirt', 0), + (7838, 7838, 'accessories/wearable_items01/_exp04/iksar_vanguard/chest', 0), + (7839, 7839, 'accessories/wearable_items01/_exp04/iksar_vanguard/feet', 0), + (7840, 7840, 'accessories/wearable_items01/_exp04/iksar_vanguard/forearms', 0), + (7841, 7841, 'accessories/wearable_items01/_exp04/iksar_vanguard/hands', 0), + (7842, 7842, 'accessories/wearable_items01/_exp04/iksar_vanguard/head', 0), + (7843, 7843, 'accessories/wearable_items01/_exp04/iksar_vanguard/legs', 0), + (7844, 7844, 'accessories/wearable_items01/_exp04/iksar_vanguard/legs_noskirt', 0), + (7845, 7845, 'accessories/wearable_items01/_exp04/iksar_vanguard/right', 0), + (7846, 7846, 'accessories/wearable_items01/_exp04/iksar_vanguard/shoulders', 0), + (7847, 7847, 'accessories/wearable_items01/_exp04/iksar_vanguard/shoulders_nopauldrons', 0), + (7848, 7848, 'accessories/wearable_items01/_exp04/iksar_vanguard/skirt', 0), + (7849, 7849, 'accessories/wearable_items01/_exp04/sarnak_chain/chest', 0), + (7850, 7850, 'accessories/wearable_items01/_exp04/sarnak_chain/feet', 0), + (7851, 7851, 'accessories/wearable_items01/_exp04/sarnak_chain/forearms', 0), + (7852, 7852, 'accessories/wearable_items01/_exp04/sarnak_chain/hands', 0), + (7853, 7853, 'accessories/wearable_items01/_exp04/sarnak_chain/head', 0), + (7854, 7854, 'accessories/wearable_items01/_exp04/sarnak_chain/legs', 0), + (7855, 7855, 'accessories/wearable_items01/_exp04/sarnak_chain/legs_noskirt', 0), + (7856, 7856, 'accessories/wearable_items01/_exp04/sarnak_chain/shoulders', 0), + (7857, 7857, 'accessories/wearable_items01/_exp04/sarnak_chain/skirt', 0), + (7858, 7858, 'accessories/wearable_items01/_exp04/sarnak_chain_caster/chest', 0), + (7859, 7859, 'accessories/wearable_items01/_exp04/sarnak_chain_caster/feet', 0), + (7860, 7860, 'accessories/wearable_items01/_exp04/sarnak_chain_caster/forearms', 0), + (7861, 7861, 'accessories/wearable_items01/_exp04/sarnak_chain_caster/hands', 0), + (7862, 7862, 'accessories/wearable_items01/_exp04/sarnak_chain_caster/head', 0), + (7863, 7863, 'accessories/wearable_items01/_exp04/sarnak_chain_caster/legs', 0), + (7864, 7864, 'accessories/wearable_items01/_exp04/sarnak_chain_caster/legs_noskirt', 0), + (7865, 7865, 'accessories/wearable_items01/_exp04/sarnak_chain_caster/shoulders', 0), + (7866, 7866, 'accessories/wearable_items01/_exp04/sarnak_chain_caster/skirt', 0), + (7867, 7867, 'accessories/wearable_items01/_exp04/sarnak_leather/chest', 0), + (7868, 7868, 'accessories/wearable_items01/_exp04/sarnak_leather/feet', 0), + (7869, 7869, 'accessories/wearable_items01/_exp04/sarnak_leather/forearms', 0), + (7870, 7870, 'accessories/wearable_items01/_exp04/sarnak_leather/hands', 0), + (7871, 7871, 'accessories/wearable_items01/_exp04/sarnak_leather/head', 0), + (7872, 7872, 'accessories/wearable_items01/_exp04/sarnak_leather/legs', 0), + (7873, 7873, 'accessories/wearable_items01/_exp04/sarnak_leather/legs_noskirt', 0), + (7874, 7874, 'accessories/wearable_items01/_exp04/sarnak_leather/shoulders', 0), + (7875, 7875, 'accessories/wearable_items01/_exp04/sarnak_leather/skirt', 0), + (7876, 7876, 'accessories/wearable_items01/_exp04/sarnak_robe/chest', 0), + (7877, 7877, 'accessories/wearable_items01/_exp04/sarnak_robe/hood', 0), + (7878, 7878, 'accessories/wearable_items01/_exp04/sarnak_robe/pants', 0), + (7879, 7879, 'accessories/wearable_items01/_exp04/sarnak_robe/skirt', 0), + (7880, 7880, 'accessories/wearable_items01/_exp04/sarnak_vanguard/chest', 0), + (7881, 7881, 'accessories/wearable_items01/_exp04/sarnak_vanguard/feet', 0), + (7882, 7882, 'accessories/wearable_items01/_exp04/sarnak_vanguard/forearms', 0), + (7883, 7883, 'accessories/wearable_items01/_exp04/sarnak_vanguard/hands', 0), + (7884, 7884, 'accessories/wearable_items01/_exp04/sarnak_vanguard/head', 0), + (7885, 7885, 'accessories/wearable_items01/_exp04/sarnak_vanguard/legs', 0), + (7886, 7886, 'accessories/wearable_items01/_exp04/sarnak_vanguard/legs_noskirt', 0), + (7887, 7887, 'accessories/wearable_items01/_exp04/sarnak_vanguard/right', 0), + (7888, 7888, 'accessories/wearable_items01/_exp04/sarnak_vanguard/shoulders', 0), + (7889, 7889, 'accessories/wearable_items01/_exp04/sarnak_vanguard/shoulders_nopauldrons', 0), + (7890, 7890, 'accessories/wearable_items01/_exp04/sarnak_vanguard/skirt', 0), + (7891, 7891, '_exp04/zones/objects/chelsith/water_barrier_1a', 0), + (7892, 7892, '_exp04/zones/objects/chelsith/water_barrier_1b', 0), + (7893, 7893, '_exp04/zones/objects/timorous_deep/mail/mail_kiosk_outdoor', 0), + (7894, 7894, '_exp04/zones/objects/timorous_deep/mail/mail_kiosk_indoor', 0), + (7895, 7895, 'staticobjects/mirrors/dpo_cha_mirror01_north', 0), + (7896, 7896, 'staticobjects/rugs/dpo_cha_rug_square03', 0), + (7897, 7897, 'staticobjects/exp04_collections/dpo_cha_rug_square04', 0), + (7898, 7898, 'staticobjects/exp04_collections/dpo_cha_stand_scroll', 0), + (7899, 7899, 'staticobjects/tables/dpo_cha_table_sm01_north', 0), + (7900, 7900, 'staticobjects/exp04_collections/dpo_cha_bowl_jewels', 0), + (7901, 7901, 'staticobjects/light_sources_player_housing_only/dpo_char_lantern_antibat', 0), + (7902, 7902, 'staticobjects/light_sources_player_housing_only/dpo_char_lightsource_brazier', 0), + (7903, 7903, 'staticobjects/exp04_collections/dpo_char_lightsource_iksarskull', 0), + (7904, 7904, 'staticobjects/dressers/dpo_kc_locker_standing_closed', 0), + (7905, 7905, 'staticobjects/rugs/dpo_kc_rug01', 0), + (7906, 7906, 'staticobjects/exp04_collections/dpo_kc_scrying_pool', 0), + (7907, 7907, 'staticobjects/light_sources_player_housing_only/dpo_kp_lightsource_iksar_temple', 0), + (7908, 7908, 'staticobjects/pillow/dpo_seb_bed_froglok_slave', 0), + (7909, 7909, 'staticobjects/tables/dpo_seb_table_bedside01', 0), + (7910, 7910, 'staticobjects/light_sources_player_housing_only/dpo_seb_lightsource_firepot', 0), + (7911, 7911, 'staticobjects/exp04_collections/dpo_seb_lightsource_floor', 0), + (7912, 7912, 'staticobjects/light_sources_player_housing_only/dpo_seb_lightsource_table01', 0), + (7913, 7913, 'staticobjects/chairs/dpo_deep_stool_sarnak01', 0), + (7914, 7914, 'staticobjects/bookcases/dpo_goro_scrollcase_empty', 0), + (7915, 7915, 'staticobjects/tables/dpo_deep_table_sarnak01', 0), + (7916, 7916, 'staticobjects/statues/dpo_vp_statue_trakanon04', 0), + (7917, 7917, 'ec/pc01/sarnak_male/sarnak_male_thin12', 0), + (7918, 7918, 'ec/pc01/sarnak_female/sarnak_female_thin15', 0), + (7919, 7919, 'ec/pc01/sarnak_female/sarnak_female_thin14', 0), + (7920, 7920, 'accessories/wearable_items/_exp08/dragon_armor/leather1_red/shoulders_epic', 1096), + (7921, 7921, 'ec/pc01/sarnak_male/sarnak_male_thin13', 0), + (7922, 7922, 'ec/pc01/sarnak_male/sarnak_male_thin10', 0), + (7923, 7923, '_exp04/zones/objects/fens_of_nathsar/fon_table_riliss01_dpo', 0), + (7924, 7924, 'ec/pc01/sarnak_female/sarnak_female_thin11', 0), + (7925, 7925, '_exp04/zones/objects/kylong_plains/mail/klp_obj_mail_kiosk01', 0), + (7926, 7926, '_exp04/zones/objects/fens_of_nathsar/fon_obj_mail_kiosk01', 0), + (7927, 7927, '_exp04/zones/objects/kunzar_jungle/mail/kj_obj_mail_kiosk01', 0), + (7928, 7928, 'staticobjects/fountains_and_pools/round_griffin_fountain_dpo', 0), + (7929, 7929, 'projectiles/spell_barracuda', 0), + (7930, 7930, 'code/lights_for_screenshots', 0), + (7931, 7931, 'code/lights_for_screenshots_bright', 0), + (7932, 7932, 'ec/pc01/sarnak_female/sarnak_female_thin07', 0), + (7933, 7933, '_exp04/monsters/jaled_dar_ghost', 0), + (7934, 7934, '_exp04/zones/objects/veeshans_peak/statues/vp_ring_of_scale01_fx', 0), + (7935, 7935, '_exp04/zones/objects/veeshans_peak/trakanons_orb', 0), + (7936, 7936, 'accessories/wearable_items/_exp04/dragon_vanguard/right', 0), + (7937, 7937, 'accessories/wearable_items/_exp04/dragon_vanguard_priest/right', 0), + (7938, 7938, 'accessories/wearable_items/_exp04/iksar_vanguard/right', 0), + (7939, 7939, 'accessories/wearable_items/_exp04/sarnak_vanguard/right', 0), + (7940, 7940, 'staticobjects/boats/travel_boat_freeport', 0), + (7941, 7941, 'staticobjects/boats/travel_boat_magic', 0), + (7942, 7942, '_exp04/zones/objects/karnors/capacitor_nub01', 0), + (7943, 7943, '_exp04/zones/objects/karnors/capacitor_nub02', 0), + (7944, 7944, '_exp04/zones/objects/karnors/capacitor_nub03', 0), + (7945, 7945, 'accessories/wieldable_items/weapons/exp04/1h_crush/exp04_1hc_crystal_wand_blueflame', 0), + (7946, 7946, '_exp04/zones/objects/fens_of_nathsar/fon_crate_small_closed02_dpo', 0), + (7947, 7947, '_exp04/zones/objects/jarsath_wastes/mail/jw_obj_mail_kiosk01', 0), + (7948, 7948, '_exp04/zones/objects/misc/dpo_chelsith_stone', 0), + (7949, 7949, 'staticobjects/liveevent/frostfell/dpo_holiday_candycane_large_greenblk01', 0), + (7950, 7950, 'staticobjects/liveevent/frostfell/dpo_holiday_candycane_large_purpleblk01', 0), + (7951, 7951, 'staticobjects/liveevent/frostfell/dpo_holiday_candycane_large_redblk01', 0), + (7952, 7952, 'accessories/wieldable_items/weapons/sword/whip/whip002_ornate', 0), + (7953, 7953, 'accessories/wieldable_items/weapons/sword/whip/whip002_plain', 0), + (7954, 7954, 'accessories/wieldable_items/weapons/sword/whip/whip002_runic', 0), + (7955, 7955, 'accessories/wieldable_items/weapons/sword/whip/whip002_rusty', 0), + (7956, 7956, 'staticobjects/general/tcg_neriak_teleporter', 0), + (7957, 7957, 'staticobjects/general/tcg_scryingcube_everfrost', 0), + (7958, 7958, 'accessories/wieldable_items/weapons/great_sword/greatsword/tunaria_greatsword', 0), + (7959, 7959, 'staticobjects/interiors/scenes/objects_race/dp_objects/tcg_items/tcg_painting04_warelf', 0), + (7960, 7960, 'staticobjects/interiors/scenes/objects_race/dp_objects/tcg_items/tcg_painting05_chosen', 0), + (7961, 7961, 'staticobjects/interiors/scenes/objects_race/dp_objects/tcg_items/tcg_painting06_basilisk', 0), + (7962, 7962, 'staticobjects/interiors/scenes/objects_race/dp_objects/tcg_items/tcg_painting07_lucan', 0), + (7963, 7963, 'staticobjects/interiors/scenes/objects_race/dp_objects/tcg_items/tcg_painting08_nagafen', 0), + (7964, 7964, 'staticobjects/books/frostfell_card01_dpo', 0), + (7965, 7965, 'staticobjects/books/frostfell_card02_dpo', 0), + (7966, 7966, 'staticobjects/books/frostfell_card03_dpo', 0), + (7967, 7967, 'staticobjects/books/frostfell_card04_dpo', 0), + (7968, 7968, 'staticobjects/liveevent/frostfell/dpo_cookie_plate01', 0), + (7969, 7969, 'staticobjects/liveevent/frostfell/dpo_cookie_plate02', 0), + (7970, 7970, 'staticobjects/liveevent/frostfell/dpo_snowglobe_gorowynn01', 0), + (7971, 7971, 'staticobjects/liveevent/frostfell/dpo_snowglobe_neriak01', 0), + (7972, 7972, 'staticobjects/liveevent/frostfell/holiday_custard_pie', 0), + (7973, 7973, 'staticobjects/liveevent/frostfell/holiday_mistletoe', 0), + (7974, 7974, 'staticobjects/liveevent/frostfell/holliday_fatcandle_green', 0), + (7975, 7975, 'staticobjects/liveevent/frostfell/holliday_fatcandle_red', 0), + (7976, 7976, 'staticobjects/liveevent/frostfell/holliday_fatcandle_white', 0), + (7977, 7977, 'staticobjects/lighting/ceiling_goro_obj_lantern01_blue', 0), + (7978, 7978, 'staticobjects/lighting/ceiling_goro_obj_lantern01_purple', 0), + (7979, 7979, 'staticobjects/lighting/ceiling_goro_obj_lantern01_yellow', 0), + (7980, 7980, 'creatures/mounts/rhino_mount/rhino_armor01_fire', 0), + (7981, 7981, 'creatures/mounts/rhino_mount/rhino_armor01_fire_purple', 0), + (7982, 7982, 'projectiles/spell_pie', 0), + (7983, 7983, 'accessories/wearable_items/cloak/exp03/cloak_sq_01_dragon', 0), + (7984, 7984, 'accessories/wearable_items/cloak/exp03/cloak_sq_01_iksar_01', 0), + (7985, 7985, 'accessories/wearable_items/cloak/exp03/cloak_sq_01_pirate', 0), + (7986, 7986, 'accessories/wearable_items/cloak/exp03/cloak_sq_01_sarnak', 0), + (7987, 7987, 'accessories/wieldable_items/weapons/exp04/1h_crush/exp04_1hc_tribunal', 0), + (7988, 7988, 'accessories/wieldable_items/weapons/exp04/2h_crush/exp04_2hc_tribunal', 0), + (7989, 7989, 'staticobjects/interiors/scenes/objects_race/dp_objects/tcg_items/tcg_innoruukarm_goblin_thrower', 0), + (7990, 7990, 'accessories/wearable_items/profesion_hats/jester/jester_02/head', 0), + (7991, 7991, 'accessories/wieldable_items/weapons/exp04/_epic/1h_crush/exp04_1hc_cudgel_of_obviation_raid', 0), + (7992, 7992, 'accessories/wearable_items/profesion_hats/pirate/pirate_01/head', 0), + (7993, 7993, 'projectiles/spell_glob', 0), + (7994, 7994, 'accessories/wearable_items/profesion_hats/ninja/ninja_01/head', 0), + (7995, 7995, 'staticobjects/liveevent/frostfell/dpo_plain_tree_small01', 0), + (7996, 7996, 'projectiles/spell_bread', 0), + (7997, 7997, 'accessories/wearable_items/_exp03/npc_only/cloak_tribunal_sq_01', 0), + (7998, 7998, 'staticobjects/bookcases/nekcas_int_library_bookcase01_dpo', 0), + (7999, 7999, 'staticobjects/bookcases/nekcas_int_library_bookcase02_dpo', 0), + (8000, 8000, 'staticobjects/bookcases/nekcas_int_library_bookcase03_dpo', 0), + (8001, 8001, 'staticobjects/scrolls/nekcas_eviltrinket_fancyscroll_dpo', 0), + (8002, 8002, 'staticobjects/weapons/drafling_tower_giant_arrow', 0), + (8003, 8003, 'creatures/tu/gods_karna', 0), + (8004, 8004, 'accessories/wearable_items/_exp03/npc_only/cloak_karana_sq_01', 0), + (8005, 8005, 'accessories/wieldable_items/weapons/exp04/1h_crush/exp04_1hc_karana', 0), + (8006, 8006, 'accessories/wieldable_items/weapons/exp04/pike/exp04_pike_karana', 0), + (8007, 8007, 'staticobjects/books/nekcas_eviltrinket_book001_vertical_dpo', 0), + (8008, 8008, 'creatures/tu/gods_bertoxxulous', 0), + (8009, 8009, 'accessories/wieldable_items/weapons/exp04/_epic/1h_crush/exp04_1hc_dragons_marrow_raid', 0), + (8010, 8010, 'accessories/wieldable_items/weapons/exp04/_epic/1h_crush/exp04_1hc_elemental_dominance_raid', 0), + (8011, 8011, 'accessories/wieldable_items/weapons/exp04/_epic/1h_crush/exp04_1hc_eye_of_siren_raid', 0), + (8012, 8012, 'accessories/wieldable_items/weapons/exp04/_epic/1h_crush/exp04_1hc_mirage_star_raid', 0), + (8013, 8013, 'accessories/wieldable_items/weapons/exp04/_epic/1h_crush/exp04_1hc_the_impact_of_the_sacrosanct_raid', 0), + (8014, 8014, 'accessories/wieldable_items/weapons/exp04/_epic/1h_crush/exp04_1hc_torrid_gore_raid', 0), + (8015, 8015, 'accessories/wieldable_items/weapons/exp04/_epic/1h_crush/exp04_1hc_penitents_absolution_raid', 0), + (8016, 8016, '_exp04/zones/objects/kunzar_jungle/kp_weaponrack_iksar01', 0), + (8017, 8017, 'accessories/wieldable_items/weapons/exp04/_epic/1h_pierce/exp04_1hp_charms_way_raid', 0), + (8018, 8018, 'accessories/wieldable_items/weapons/exp04/_epic/1h_pierce/exp04_1hp_deaths_grip_raid', 0), + (8019, 8019, 'accessories/wieldable_items/weapons/exp04/_epic/1h_pierce/exp04_1hp_fang_of_ichor_raid', 0), + (8020, 8020, 'accessories/wieldable_items/weapons/exp04/1h_pierce/exp04_1hp_bertox', 0), + (8021, 8021, 'accessories/wieldable_items/weapons/exp04/_epic/1h_sword/exp04_1hs_ayonic_axe_raid', 0), + (8022, 8022, 'accessories/wieldable_items/weapons/exp04/_epic/1h_sword/exp04_1hs_dragons_temper_raid', 0), + (8023, 8023, 'accessories/wieldable_items/weapons/exp04/_epic/1h_sword/exp04_1hs_fire_of_the_stalwart_raid', 0), + (8024, 8024, 'accessories/wieldable_items/weapons/exp04/_epic/1h_sword/exp04_1hs_lamentation_of_the_intrepid_raid', 0), + (8025, 8025, 'accessories/wieldable_items/weapons/exp04/_epic/1h_sword/exp04_1hs_night_terror_raid', 0), + (8026, 8026, 'accessories/wieldable_items/weapons/exp04/_epic/1h_sword/exp04_1hs_sedition_raid', 0), + (8027, 8027, 'accessories/wieldable_items/weapons/exp04/_epic/1h_sword/exp04_1hs_the_bite_of_the_wolf_raid', 0), + (8028, 8028, 'accessories/wieldable_items/weapons/exp04/_epic/1h_sword/exp04_1hs_the_truth_of_marr_raid', 0), + (8029, 8029, 'accessories/wieldable_items/weapons/exp04/_epic/1h_sword/exp04_1hs_wrath_of_nature_raid', 0), + (8030, 8030, 'accessories/wieldable_items/weapons/exp04/_epic/bow/exp04_bow_eagles_talon_raid', 0), + (8031, 8031, 'accessories/wieldable_items/weapons/exp04/_epic/fist/exp04_fist_gorynn\'s_fist_raid', 0), + (8032, 8032, 'accessories/wieldable_items/weapons/exp04/_epic/fist/exp04_fist_hand_of_serenity_raid', 0), + (8033, 8033, 'accessories/wieldable_items/weapons/exp04/_epic/pike/exp04_pike_dream_scorcher_raid', 0), + (8034, 8034, 'staticobjects/rugs/dpo_char_rug02', 0), + (8035, 8035, 'staticobjects/banners/dpo_jw_banner_droag01', 0), + (8036, 8036, 'staticobjects/light_sources_player_housing_only/dpo_jw_lightsource_firepot_iksar', 0), + (8037, 8037, 'staticobjects/torture_chamber/dpo_char_chain_hook_skull_swinging', 0), + (8038, 8038, 'staticobjects/light_sources_player_housing_only/dpo_kj_lightsource_iksar_lantern01', 0), + (8039, 8039, 'staticobjects/canopicjars/dpo_cha_iksar_skull_bobbing', 0), + (8040, 8040, 'staticobjects/rugs/dpo_goro_rug_round01', 0), + (8041, 8041, 'staticobjects/coffins_and_sarcophagus/dpo_cha_sarcophagi_ornate', 0), + (8042, 8042, 'staticobjects/rugs/dpo_seb_rug01', 0), + (8043, 8043, 'staticobjects/banners/dpo_char_banner_dizok02', 0), + (8044, 8044, 'staticobjects/statues/dpo_kp_statue_iksar_kneel', 0), + (8045, 8045, 'staticobjects/statues/dpo_vp_statue_sarnak01', 0), + (8046, 8046, 'staticobjects/banners/dpo_cha_banner_iksar_hanging', 0), + (8047, 8047, 'staticobjects/statues/dpo_kp_statue_iksar_standing02', 0), + (8048, 8048, 'staticobjects/chairs/dpo_cha_stool_ornate01', 0), + (8049, 8049, 'soga_appearances/ec/npc/ghost_soga_vl_young_male02_pet', 0), + (8050, 8050, 'creatures/tu/armor_dummy', 0), + (8051, 8051, 'accessories/armor_dummy/armor_dummy_idle', 0), + (8052, 8052, 'accessories/armor_dummy/armor_dummy_female_idle', 0), + (8053, 8053, 'creatures/tu/armor_dummy_female', 0), + (8054, 8054, 'staticobjects/lighting/dpo_goro_obj_lantern03_red_pfx', 0), + (8055, 8055, 'accessories/equipment_display/equipment_display_01', 0), + (8056, 8056, 'accessories/equipment_display/equipment_display_02', 0), + (8057, 8057, 'accessories/equipment_display/equipment_display_03', 0), + (8058, 8058, 'creatures/monsters/willowisp_air_elemental', 0), + (8059, 8059, 'creatures/monsters/willowisp_earth_elemental', 0), + (8060, 8060, 'creatures/monsters/willowisp_fire_elemental', 0), + (8061, 8061, 'creatures/monsters/willowisp_water_elemental', 0), + (8062, 8062, 'accessories/wearable_items/profesion_hats/turtleshell_helm/turtleshell_helm01/head', 0), + (8063, 8063, 'creatures/tu/sarnak_skeleton', 0), + (8064, 8064, 'projectiles/spell_book', 0), + (8065, 8065, 'staticobjects/mirrors/dpo_cha_mirror01_south', 0), + (8066, 8066, 'staticobjects/chairs/dpo_cm_chair_chaise01', 0), + (8067, 8067, 'staticobjects/chairs/dpo_cm_chair_chaise02', 0), + (8068, 8068, 'accessories/wearable_items/cloak/exp03/cloak_dir_01_fur', 0), + (8069, 8069, 'accessories/wearable_items/cloak/exp03/cloak_sq_01_armorer', 0), + (8070, 8070, 'accessories/wearable_items/cloak/exp03/cloak_sq_01_chain', 0), + (8071, 8071, 'accessories/wearable_items/cloak/exp03/cloak_sq_01_hanging_chain', 0), + (8072, 8072, 'accessories/wearable_items/cloak/exp03/cloak_sq_01_leather_fur', 0), + (8073, 8073, 'accessories/wearable_items/cloak/exp03/cloak_sq_01_shreaded', 0), + (8074, 8074, 'accessories/wearable_items/cloak/exp03/cloak_sq_01_weaponsmith', 0), + (8075, 8075, 'accessories/wearable_items/cloak/exp03/cloak_sq_01_woodworker', 0), + (8076, 8076, 'accessories/wearable_items/cloak/exp03/cloak_sq_01_alchemist', 0), + (8077, 8077, 'accessories/wearable_items/cloak/exp03/cloak_sq_01_provisioner', 0), + (8078, 8078, 'accessories/wearable_items/cloak/exp03/cloak_sq_01_sage', 0), + (8079, 8079, 'staticobjects/liveevent/erollisi_objects/dpo_erollosi_plate0cookies01', 0), + (8080, 8080, 'staticobjects/liveevent/erollisi_objects/dpo_erollosi_plate0marrsipan01', 0), + (8081, 8081, 'staticobjects/liveevent/erollisi_objects/errolisi_gold_threeroses01', 0), + (8082, 8082, 'staticobjects/liveevent/erollisi_objects/errolisi_heartpillow_purple_whiteribbon', 0), + (8083, 8083, 'staticobjects/liveevent/erollisi_objects/errolisi_heartpillow_white_redribbon', 0), + (8084, 8084, 'staticobjects/liveevent/erollisi_objects/errolisi_heartpillow_yellow_whiteribbon', 0), + (8085, 8085, 'staticobjects/liveevent/erollisi_objects/errolisi_silver_threeroses01', 0), + (8086, 8086, 'staticobjects/liveevent/erollisi_objects/dpo_erollosi_teddyburynai', 0), + (8087, 8087, 'staticobjects/liveevent/erollisi_objects/dpo_erollosi_purfume_closed01', 0), + (8088, 8088, 'staticobjects/liveevent/erollisi_objects/dpo_erollosi_purfume_open01', 0), + (8089, 8089, 'staticobjects/gears/gnome_mech03_gears_01_dpo', 0), + (8090, 8090, 'accessories/wearable_items/cloak/exp03/cloak_sq_01_carpenter', 0), + (8091, 8091, 'accessories/wearable_items/cloak/exp03/cloak_sq_01_jeweler', 0), + (8092, 8092, 'accessories/wearable_items/cloak/exp03/cloak_sq_01_tailer', 0), + (8093, 8093, 'accessories/armor_dummy/armor_dummy_dwarf_female_idle', 0), + (8094, 8094, 'accessories/armor_dummy/armor_dummy_dwarf_male_idle', 0), + (8095, 8095, 'creatures/tu/armor_dummy_dwarf_female', 0), + (8096, 8096, 'creatures/tu/armor_dummy_dwarf_male', 0), + (8097, 8097, 'accessories/armor_dummy/armor_dummy_froglok_female_idle', 0), + (8098, 8098, 'accessories/armor_dummy/armor_dummy_froglok_male_idle', 0), + (8099, 8099, 'creatures/tu/armor_dummy_froglok_female', 0), + (8100, 8100, 'creatures/tu/armor_dummy_froglok_male', 0), + (8101, 8101, 'accessories/wearable_items/cloak/exp03/cloak_sq_01_beerfest', 0), + (8102, 8102, 'staticobjects/counters/qey_bar_singleplain001_dpo', 0), + (8103, 8103, 'accessories/wieldable_items/weapons/misc/metalpoker', 0), + (8104, 8104, 'accessories/wieldable_items/weapons/staff/woodenhand/woodenhand', 0), + (8105, 8105, '_exp01/zones/dungeons/poets_palace/objects/drv_lightsource_candles_group01_dpo', 0), + (8106, 8106, '_exp01/zones/dungeons/poets_palace/objects/djn_pillow_floor_blue_round02_dpo', 0), + (8107, 8107, '_exp01/zones/dungeons/poets_palace/objects/djn_pillow_floor_blue_square02_dpo', 0), + (8108, 8108, '_exp01/zones/dungeons/poets_palace/objects/djn_scriptorium_scrollracks_3m_dpo', 0), + (8109, 8109, '_exp01/zones/dungeons/poets_palace/objects/djn_scrollrack_bookcase_6m_dpo', 0), + (8110, 8110, '_exp01/zones/dungeons/poets_palace/objects/djn_vase_gold01_dpo', 0), + (8111, 8111, '_exp01/zones/objects/display_stands/djn_display_stand_platinum', 0), + (8112, 8112, 'accessories/wieldable_items/shields/round_shield/wood_shield/shld_spikedwood_bathezid_shield', 0), + (8113, 8113, 'accessories/wieldable_items/shields/round_shield/wood_shield/shld_spikedwood_sarnak_shield', 0), + (8114, 8114, 'accessories/wieldable_items/shields/round_shield/wood_shield/shld_wood_shield', 0), + (8115, 8115, 'accessories/wieldable_items/shields/buckler_shield/spikedwood_buckler/spikedwood_bathezid_buckler', 0), + (8116, 8116, 'accessories/wieldable_items/shields/buckler_shield/spikedwood_buckler/spikedwood_sarnak_buckler', 0), + (8117, 8117, 'accessories/wieldable_items/shields/buckler_shield/spikedwood_buckler/wood_buckler', 0), + (8118, 8118, 'staticobjects/interiors/scenes/objects_race/dp_objects/tcg_items/tcg_cardcase02', 0), + (8119, 8119, 'staticobjects/interiors/scenes/objects_race/dp_objects/tcg_items/tcg_drinkcart', 0), + (8120, 8120, 'staticobjects/interiors/scenes/objects_race/dp_objects/tcg_items/tcg_foodcart', 0), + (8121, 8121, 'staticobjects/interiors/scenes/objects_race/dp_objects/tcg_items/tcg_painting09_cristanos', 0), + (8122, 8122, 'staticobjects/interiors/scenes/objects_race/dp_objects/tcg_items/tcg_painting10_clockwork', 0), + (8123, 8123, 'staticobjects/interiors/scenes/objects_race/dp_objects/tcg_items/tcg_painting11_mayong', 0), + (8124, 8124, 'staticobjects/interiors/scenes/objects_race/dp_objects/tcg_items/tcg_painting12_musicians', 0), + (8125, 8125, 'staticobjects/interiors/scenes/objects_race/dp_objects/tcg_items/tcg_painting14_vox', 0), + (8126, 8126, 'creatures/tu/froglok_skeleton', 0), + (8127, 8127, '_exp01/zones/objects/pillows/djn_pillow_floor_bluesquare02_small_dpo', 0), + (8128, 8128, 'creatures/mounts/warg_mount/warg_armor02_spirit', 0), + (8129, 8129, 'creatures/mounts/warg_mount/warg_armor02_fire_spirit', 0), + (8130, 8130, 'staticobjects/liveevent/bristlebane_day/dpo_gigglegibber_crateofcomfort', 0), + (8131, 8131, 'accessories/wearable_items/halloween_masks/mask_fire/head', 0), + (8132, 8132, 'staticobjects/liveevent/brew_day/dpo_brewday_tumpy_tonic', 0), + (8133, 8133, 'staticobjects/liveevent/bristlebane_day/qey_kitchen_ironpotlarge001_dpo', 0), + (8134, 8134, 'staticobjects/promo_items/dpo_vp_treasure_chest01', 0), + (8135, 8135, 'accessories/wearable_items01/_exp00/halloween_masks/mask_fire/head', 0), + (8136, 8136, 'creatures/mounts/warg_mount/warg_armor03', 0), + (8137, 8137, 'accessories/wieldable_items/weapons/talisman/orb/orb001_eyeball', 0), + (8138, 8138, 'accessories/wieldable_items/shields/kite_shield/righteous_barrier_devotion', 0), + (8139, 8139, 'accessories/wieldable_items/shields/buckler_shield/brace_corporeal_darklight', 0), + (8140, 8140, 'accessories/wieldable_items/weapons/dagger/dagger/dagger_deadly_seduction', 0), + (8141, 8141, 'creatures/mounts/warg_mount/warg_armor02_gold', 0), + (8142, 8142, 'creatures/mounts/warg_mount/warg_armor02_silver', 0), + (8143, 8143, 'creatures/tu/froglok_zombie_kunark', 0), + (8144, 8144, 'staticobjects/fires/soh_firepit_houseitem', 0), + (8145, 8145, 'accessories/wieldable_items/weapons/axe/battleaxe/battleaxe_venom', 0), + (8146, 8146, 'accessories/wieldable_items/weapons/talisman/censer/censer001_runic_darkfx', 0), + (8147, 8147, 'accessories/wieldable_items/weapons/talisman/book/book001_runic_poisonfx', 0), + (8148, 8148, 'accessories/wieldable_items/shields/exp03/exp03_mistmoore_shield_cloudfx', 0), + (8149, 8149, 'accessories/wieldable_items/weapons/exp03/1h_crush/exp03_1hc_zombie_arm_club_animated_fx', 0), + (8150, 8150, 'accessories/wieldable_items/weapons/great_hammer/knotted_club/knotted_club001_runic_bugs', 0), + (8151, 8151, 'accessories/wieldable_items/weapons/exp04/bow/exp04_bow_dragon_bow_spikes_fx', 0), + (8152, 8152, 'accessories/wieldable_items/weapons/exp04/1h_sword/exp04_1hs_hooked_sword_darkfx', 0), + (8153, 8153, 'accessories/wearable_items/_exp08/dragon_armor/leather1_shadow/skirt', 1096), + (8154, 8154, 'creatures/monsters/gargoyle_bronze', 0), + (8155, 8155, 'accessories/wieldable_items/weapons/exp04/1h_crush/exp04_1hc_flailcensor_darkfx', 0), + (8156, 8156, 'accessories/wieldable_items/weapons/exp03/1h_sword/exp03_1hs_ornate_elven_rapier_bardfx', 0), + (8157, 8157, 'staticobjects/fires/soh_firepit_houseitem_tranquil', 0), + (8158, 8158, '_exp05/zones/objects/exp05_dun_veksar/vek_mirror01', 0), + (8159, 8159, '_exp05/zones/objects/exp05_dun_veksar/golem_head', 0), + (8160, 8160, '_exp05/zones/objects/exp05_dun_veksar/golem_left_leg', 0), + (8161, 8161, '_exp05/zones/objects/exp05_dun_veksar/golem_right_leg', 0), + (8162, 8162, '_exp05/zones/objects/exp05_dun_veksar/golem_torso', 0), + (8163, 8163, 'accessories/wearable_items/_exp08/dragon_armor/leather1_shadow/chest', 1096), + (8164, 8164, 'accessories/wearable_items/_exp08/dragon_armor/leather1_shadow/feet', 1096), + (8165, 8165, 'accessories/wearable_items/_exp08/dragon_armor/leather1_shadow/forearms', 1096), + (8166, 8166, 'accessories/wearable_items/_exp08/dragon_armor/leather1_shadow/hands', 1096), + (8167, 8167, 'accessories/wearable_items/_exp08/dragon_armor/leather1_shadow/head', 1096), + (8168, 8168, 'accessories/wearable_items/_exp08/dragon_armor/leather1_shadow/legs', 1096), + (8169, 8169, 'accessories/wearable_items/_exp08/dragon_armor/leather1_shadow/legs_noskirt', 1096), + (8170, 8170, 'accessories/wearable_items/_exp08/dragon_armor/leather1_shadow/shoulders', 1096), + (8171, 8171, 'creatures/tu/fungusman_02_big', 0), + (8172, 8172, 'creatures/tu/fungusman_02_big_white', 0), + (8173, 8173, 'creatures/tu/fungusman_02_burly', 0), + (8174, 8174, 'creatures/tu/fungusman_02_burly_white', 0), + (8175, 8175, 'creatures/tu/fungusman_02_skinny', 0), + (8176, 8176, 'creatures/tu/fungusman_02_skinny_white', 0), + (8177, 8177, 'accessories/wearable_items/magus/common/low/pants_tintable', 0), + (8178, 8178, 'accessories/wearable_items/magus/common/high/chest_tintpants', 0), + (8179, 8179, 'accessories/wieldable_items/weapons/exp04/shield/exp04_shld_dragonscale_buckler', 0), + (8180, 8180, 'accessories/wieldable_items/weapons/exp04/1h_pierce/exp04_1hp_dragonhilt_dagger_blood', 0), + (8181, 8181, 'accessories/wieldable_items/soga_weapons/unique4/flame_of_truth_02', 0), + (8182, 8182, 'accessories/wearable_items/cloak/exp03/cloak_sq_01_vampire_regalia', 0), + (8183, 8183, 'accessories/wieldable_items/weapons/exp04/shield/exp04_shld_sebilisian_metal_shield', 0), + (8184, 8184, 'accessories/wearable_items/cloak/exp03/cloak_sq_01_eye_in_dark', 0), + (8185, 8185, 'ui_fx/fx/systems/environment/shard_of_hate/teleport_vision_shard_of_hate', 0), + (8186, 8186, 'accessories/wearable_items/cloak/exp03/cloak_sq_01_death', 0), + (8187, 8187, 'staticobjects/books/cazic_bookwface001_flat_dpo', 0), + (8188, 8188, 'projectiles/spell_netting', 0), + (8189, 8189, 'creatures/mounts/warg_mount/warg_armor03_albino', 0), + (8190, 8190, 'creatures/mounts/warg_mount/warg_armor03_fire_spirit', 0), + (8191, 8191, 'creatures/mounts/warg_mount/warg_armor03_spotted', 0), + (8192, 8192, 'creatures/mounts/warg_mount/warg_armor03_twotoned', 0), + (8193, 8193, 'creatures/mounts/warg_mount/warg_armor03_spirit', 0), + (8194, 8194, 'staticobjects/weapons/great_spear_ornate001_dpo', 0), + (8195, 8195, '_exp05/monsters/elemental_wave_dirt', 0), + (8196, 8196, '_exp05/monsters/elemental_wave_electro', 0), + (8197, 8197, '_exp05/monsters/elemental_wave_jello', 0), + (8198, 8198, '_exp05/monsters/elemental_wave_magma', 0), + (8199, 8199, '_exp05/monsters/elemental_wave_mercury', 0), + (8200, 8200, '_exp05/monsters/elemental_wave_oil', 0), + (8201, 8201, '_exp05/monsters/elemental_wave_snow', 0), + (8202, 8202, '_exp05/monsters/elemental_wave_vomit', 0), + (8203, 8203, '_exp05/monsters/elemental_wave_water', 0), + (8204, 8204, '_exp05/monsters/elemental_wave_sand', 0), + (8205, 8205, '_exp03/zones/exp03_dun_klakanon_craftingdemo/sfm_housing_door_smallbuilding01_dpo', 0), + (8206, 8206, '_exp03/zones/exp03_dun_klakanon_craftingdemo/sfm_gear_medium02_yellow_dpo', 0), + (8207, 8207, '_exp03/zones/exp03_dun_klakanon_craftingdemo/sfm_mine_cart_ore01_dpo', 0), + (8208, 8208, 'creatures/tu/gods_anashti_sul', 0), + (8209, 8209, 'accessories/wearable_items/cloak/exp03/cloak_sq_01_anashti_sul', 0), + (8210, 8210, 'creatures/mounts/horse_armor01/horse01_armor01_misty_purple', 0), + (8211, 8211, 'creatures/mounts/horse_armor01/horse01_armor01_nightmare_purple', 0), + (8212, 8212, '_exp03/zones/objects/kitchen_tools/eu_winebottle_red01', 0), + (8213, 8213, 'staticobjects/harvested/fish/hrvst_fish_shallow_rainbow_koi', 0), + (8214, 8214, 'projectiles/spell_brick', 0), + (8215, 8215, '_exp05/monsters/elemental_wave_ice', 0), + (8216, 8216, '_exp05/monsters/elemental_wave_light', 0), + (8217, 8217, '_exp05/monsters/elemental_wave_magma02', 0), + (8218, 8218, '_exp05/monsters/elemental_wave_magma03', 0), + (8219, 8219, '_exp05/monsters/elemental_wave_wisp', 0), + (8220, 8220, '_exp05/monsters/void_beast_01', 0), + (8221, 8221, '_exp05/monsters/void_beast_02', 0), + (8222, 8222, '_exp05/monsters/void_beast_03', 0), + (8223, 8223, '_exp05/monsters/void_beast_04', 0), + (8224, 8224, '_exp05/monsters/void_beast_05', 0), + (8225, 8225, '_exp05/monsters/void_beast_06', 0), + (8226, 8226, 'creatures/mounts/horse_armor01/horse01_armor01_firespirit', 0), + (8227, 8227, 'creatures/mounts/horse_armor01/horse01_armor01_manaspirit', 0), + (8228, 8228, '_exp05/zones/objects/exp05_dun_nuroga/dun_nuroga_skull_brazier', 0), + (8229, 8229, 'staticobjects/tcg/tcg_boomerang', 0), + (8230, 8230, '_exp03/zones/objects/crib/eu_crib_rattle', 0), + (8231, 8231, 'accessories/wearable_items/jester_hat/head', 0), + (8232, 8232, 'accessories/wearable_items/profesion_hats/clockwork/clockwork_hat_01/head', 0), + (8233, 8233, 'creatures/tu/valkyrie_greater', 0), + (8234, 8234, 'creatures/tu/valkyrie_icemaiden', 0), + (8235, 8235, 'accessories/wearable_items/_exp08/dragon_armor/leather1_shadow/shoulders_epic', 1096), + (8236, 8236, '_exp03/zones/objects/door/unrest_door', 0), + (8237, 8237, 'creatures/pets/gigglegibber_crate', 0), + (8238, 8238, '_exp05/zones/objects/exp05_dun_miragul_upper/glass_orb', 0), + (8239, 8239, 'accessories/wearable_items/_exp08/dragon_armor/leather2_green/skirt', 1096), + (8240, 8240, '_exp05/zones/objects/exp05_dun_miragul_upper/glass_orb_ped_real', 0), + (8241, 8241, 'staticobjects/clothing/wedding_veil', 0), + (8242, 8242, 'accessories/wearable_items/cloak/exp05/cloak_sq_01_bertoxxulous_01', 0), + (8243, 8243, 'accessories/wearable_items/cloak/exp05/cloak_sq_01_comfort_01', 0), + (8244, 8244, 'accessories/wearable_items/cloak/exp05/cloak_sq_01_fizzlethorpebristlebane', 0), + (8245, 8245, 'accessories/wearable_items/cloak/exp05/cloak_sq_01_generic_floral', 0), + (8246, 8246, 'creatures/tu/skeleton_king_greater_ice', 0), + (8247, 8247, 'staticobjects/kitchen/floor_muffin_plate_dpo', 0), + (8248, 8248, 'staticobjects/kitchen/floor_pie_plate_steaming_dpo', 0), + (8249, 8249, 'staticobjects/kitchen/ornate_fork_dpo', 0), + (8250, 8250, 'staticobjects/kitchen/ornate_knife_dpo', 0), + (8251, 8251, 'staticobjects/kitchen/tableware_wooden_set', 0), + (8252, 8252, 'staticobjects/clothing/wedding_veil_01', 0), + (8253, 8253, 'accessories/wearable_items/cloak/exp05/cloak_sq_01_dark_energy', 0), + (8254, 8254, 'accessories/wearable_items/cloak/exp05/cloak_sq_01_dark_water', 0), + (8255, 8255, 'accessories/wearable_items/cloak/exp05/cloak_sq_01_sludge', 0), + (8256, 8256, 'accessories/wearable_items/cloak/exp05/cloak_sq_01_traveler', 0), + (8257, 8257, 'accessories/wearable_items/cloak/exp05/cloak_sq_01_vile_putridness', 0), + (8258, 8258, 'staticobjects/kitchen/ornate_spoon_dpo', 0), + (8259, 8259, 'staticobjects/books/tcg_book_volume01', 0), + (8260, 8260, 'staticobjects/books/tcg_book_volume02', 0), + (8261, 8261, 'staticobjects/books/tcg_book_volume03', 0), + (8262, 8262, 'staticobjects/books/tcg_book_volume04', 0), + (8263, 8263, 'staticobjects/books/tcg_book_volume05', 0), + (8264, 8264, '_exp05/monsters/void_storm_tornado', 0), + (8265, 8265, 'staticobjects/interiors/scenes/objects_race/dp_objects/tcg_items/tcg_tapestry01_design_chelsith', 0), + (8266, 8266, 'staticobjects/interiors/scenes/objects_race/dp_objects/tcg_items/tcg_tapestry01_design_dragon', 0), + (8267, 8267, 'staticobjects/interiors/scenes/objects_race/dp_objects/tcg_items/tcg_tapestry01_design_flowingwater', 0), + (8268, 8268, 'staticobjects/interiors/scenes/objects_race/dp_objects/tcg_items/tcg_tapestry01_design_iksar', 0), + (8269, 8269, 'staticobjects/interiors/scenes/objects_race/dp_objects/tcg_items/tcg_tapestry01_design_sarnak', 0), + (8270, 8270, 'accessories/wearable_items/cloak/exp05/cloak_sq_01_anashti_sul_undead', 0), + (8271, 8271, 'creatures/tu/gods_anashti_sul_undead', 0), + (8272, 8272, 'accessories/npc_wearables/fungusman_02_appearances/chest_fungusman_02_armor', 0), + (8273, 8273, 'accessories/npc_wearables/fungusman_02_appearances/chest_fungusman_02_armor_white', 0), + (8274, 8274, 'accessories/npc_wearables/fungusman_02_appearances/head_fungusman_02_flat', 0), + (8275, 8275, 'accessories/npc_wearables/fungusman_02_appearances/head_fungusman_02_flat_white', 0), + (8276, 8276, 'accessories/npc_wearables/fungusman_02_appearances/head_fungusman_02_pointy', 0), + (8277, 8277, 'accessories/npc_wearables/fungusman_02_appearances/head_fungusman_02_pointy_white', 0), + (8278, 8278, 'accessories/npc_wearables/fungusman_02_appearances/head_fungusman_02_round', 0), + (8279, 8279, 'accessories/npc_wearables/fungusman_02_appearances/head_fungusman_02_round_white', 0), + (8280, 8280, 'accessories/wieldable_items/weapons/exp05/1h_void_sword01', 0), + (8281, 8281, 'accessories/wieldable_items/weapons/exp05/1hc_void_axe01', 0), + (8282, 8282, 'accessories/wieldable_items/weapons/exp05/1hc_void_hammer01', 0), + (8283, 8283, 'accessories/wieldable_items/weapons/exp05/2h_void_staff01', 0), + (8284, 8284, 'accessories/wieldable_items/weapons/exp05/void_bow01', 0), + (8285, 8285, 'accessories/wearable_items/cloak/exp05/cloak_sq_01_oathbreaker', 0), + (8286, 8286, 'accessories/wearable_items/cloak/exp05/cloak_sq_01_brellserilis', 0), + (8287, 8287, 'accessories/wearable_items/cloak/exp05/cloak_sq_01_cazicthule', 0), + (8288, 8288, 'accessories/wearable_items/cloak/exp05/cloak_sq_01_innoruuk', 0), + (8289, 8289, 'staticobjects/interiors/scenes/objects_race/dp_objects/exp03_objects/cm_piano_closed01', 0), + (8290, 8290, '_exp05/monsters/bat_swarm', 0), + (8291, 8291, 'accessories/wearable_items/halloween_masks/mask_evil_fire/head', 0), + (8292, 8292, 'accessories/wearable_items/cloak/exp05/cloak_sq_01_tunare', 0), + (8293, 8293, 'accessories/wearable_items/cloak/exp05/cloak_sq_01_ralloszek', 0), + (8294, 8294, 'accessories/wearable_items/cloak/exp05/cloak_sq_01_tribunal', 0), + (8295, 8295, 'accessories/wearable_items/cloak/exp05/cloak_sq_01_quellious', 0), + (8296, 8296, 'accessories/wearable_items/cloak/exp05/cloak_sq_01_solusekro', 0), + (8297, 8297, 'accessories/wearable_items/cloak/exp05/cloak_sq_01_mithanielmarr', 0), + (8298, 8298, 'accessories/wearable_items/cloak/exp05/cloak_sq_01_karana', 0), + (8299, 8299, 'accessories/wearable_items01/_exp00/halloween_masks/mask_evil_fire/head', 0), + (8300, 8300, 'accessories/wearable_items/cloak/exp05/cloak_sq_01_void_energy', 0), + (8301, 8301, 'creatures/tu/gods_rodcet_nife', 0), + (8302, 8302, '_exp04/monsters/clay_golem_pet', 0), + (8303, 8303, 'creatures/tu/earth_elem_pet', 0), + (8304, 8304, 'creatures/tu/riverrock_earth_elem_pet', 0), + (8305, 8305, '_exp03/characters/monsters/golem_magma_pet', 0), + (8306, 8306, '_exp04/monsters/clay_keeper_pet', 0), + (8307, 8307, '_exp04/tool_users/golem_jade_pet', 0), + (8308, 8308, 'creatures/tu/obsidian_earth_elem_pet', 0), + (8309, 8309, '_exp05/monsters/skull_wisp', 0), + (8310, 8310, '_exp04/zones/objects/sebilis/desk_torch', 0), + (8311, 8311, 'accessories/wieldable_items/weapons/talisman/censer/censer001_runic_cloudfx', 0), + (8312, 8312, 'staticobjects/books/floor_booknarrow002_dpo', 0), + (8313, 8313, 'staticobjects/books/floor_bookwide01_dpo', 0), + (8314, 8314, 'staticobjects/books/floor_bookwide02_dpo', 0), + (8315, 8315, 'staticobjects/books/floor_bookwide03_dpo', 0), + (8316, 8316, 'staticobjects/books/floor_df_book01_dpo', 0), + (8317, 8317, 'staticobjects/books/floor_df_book03_dpo', 0), + (8318, 8318, 'staticobjects/books/floor_df_book04_dpo', 0), + (8319, 8319, 'staticobjects/books/floor_vrsn_book01_dpo', 0), + (8320, 8320, 'staticobjects/books/floor_vrsn_book04_dpo', 0), + (8321, 8321, 'staticobjects/books/floor_vrsn_book05_dpo', 0), + (8322, 8322, 'staticobjects/books/floor_vrsn_book06_dpo', 0), + (8323, 8323, 'staticobjects/banners/dpo_kel_banner_royal01', 0), + (8324, 8324, 'staticobjects/benches/dpo_eu_bench_long02_wcushion', 0), + (8325, 8325, 'staticobjects/benches/dpo_eu_bench_short_wcushion01', 0), + (8326, 8326, 'staticobjects/chairs/dpo_eu_chair_dining03', 0), + (8327, 8327, 'staticobjects/chairs/dpo_eu_chair_dining06', 0), + (8328, 8328, 'staticobjects/chairs/dpo_eu_chair_head_dining01', 0), + (8329, 8329, 'staticobjects/chairs/dpo_eu_couch01', 0), + (8330, 8330, 'staticobjects/chairs/dpo_eu_couch02', 0), + (8331, 8331, 'staticobjects/chairs/dpo_eu_gaming_cardtable01_empty', 0), + (8332, 8332, 'staticobjects/chairs/dpo_eu_stool_round01', 0), + (8333, 8333, 'staticobjects/chairs/dpo_kel_chair_wood02', 0), + (8334, 8334, 'staticobjects/chairs/dpo_kel_tavern_stool01_green', 0), + (8335, 8335, 'staticobjects/counters/dpo_kel_tavern_counter01', 0), + (8336, 8336, 'staticobjects/dividers/dpo_drv_divider_ornate01', 0), + (8337, 8337, 'staticobjects/dividers/dpo_drv_divider_plain01', 0), + (8338, 8338, 'staticobjects/light_sources_player_housing_only/dpo_gf_lightsource_lampppost01', 0), + (8339, 8339, 'staticobjects/light_sources_player_housing_only/dpo_gf_lightsource_wall_flower02', 0), + (8340, 8340, 'staticobjects/light_sources_player_housing_only/dpo_kel_lightsource_chandelier_crystal01', 0), + (8341, 8341, 'staticobjects/light_sources_player_housing_only/dpo_kel_lightsource_wisplantern_wall01', 0), + (8342, 8342, 'staticobjects/musical/dpo_eu_piano_open01', 0), + (8343, 8343, 'staticobjects/plants/dpo_gf_lamppost_flower02', 0), + (8344, 8344, 'staticobjects/rugs/dpo_kel_rug_blue_round01', 0), + (8345, 8345, 'staticobjects/rugs/dpo_kel_rug_green_round02', 0), + (8346, 8346, 'staticobjects/rugs/dpo_kel_rug_leaf', 0), + (8347, 8347, 'staticobjects/shelves/dpo_kel_tavern_shelves01', 0), + (8348, 8348, 'staticobjects/tables/desk_with_book_and_candle_dpo', 0), + (8349, 8349, 'staticobjects/tables/dpo_eu_gaming_cardtable01_empty', 0), + (8350, 8350, 'staticobjects/tables/dpo_eu_gaming_cardtable02', 0), + (8351, 8351, 'staticobjects/tables/dpo_eu_table_bedside01', 0), + (8352, 8352, 'staticobjects/tables/dpo_eu_table_coffee01', 0), + (8353, 8353, 'staticobjects/tables/dpo_eu_table_long01', 0), + (8354, 8354, 'staticobjects/tableware/dpo_kel_tavern_cup02', 0), + (8355, 8355, 'staticobjects/tableware/dpo_kel_tavern_jar_honey01', 0), + (8356, 8356, 'staticobjects/tableware/dpo_kel_tavern_mug02', 0), + (8357, 8357, 'staticobjects/tableware/dpo_kel_tavern_mug03', 0), + (8358, 8358, 'staticobjects/tapestry/dpo_kel_tapestry_starchart01', 0), + (8359, 8359, 'staticobjects/walls/dpo_gf_kel_int_divider_wall01', 0), + (8360, 8360, 'projectiles/spell_barrel', 0), + (8361, 8361, '_exp05/monsters/book_dervish', 0), + (8362, 8362, 'projectiles/spell_book_trail', 0), + (8363, 8363, 'accessories/wearable_items/leather/common/low/pauldron01_leather_heavy_left', 0), + (8364, 8364, 'accessories/wearable_items/leather/common/low/pauldron01_leather_heavy_right', 0), + (8365, 8365, 'accessories/wearable_items/leather/common/low/shoulders_pauldron01_both', 0), + (8366, 8366, 'accessories/wearable_items/leather/common/low/shoulders_pauldron01_left', 0), + (8367, 8367, 'accessories/wearable_items/leather/common/low/shoulders_pauldron01_right', 0), + (8368, 8368, 'accessories/wearable_items/_exp02/woven_monk/pauldron01_leather_heavy_left', 0), + (8369, 8369, 'accessories/wearable_items/_exp02/woven_monk/pauldron01_leather_heavy_right', 0), + (8370, 8370, 'accessories/wearable_items/_exp02/woven_monk/shoulders_pauldron01_both', 0), + (8371, 8371, 'accessories/wearable_items/_exp02/woven_monk/shoulders_pauldron01_left', 0), + (8372, 8372, 'accessories/wearable_items/_exp02/woven_monk/shoulders_pauldron01_right', 0), + (8373, 8373, 'accessories/wearable_items/_exp03/chain_heroic_pristine/pauldron01_leather_heavy_left', 0), + (8374, 8374, 'accessories/wearable_items/_exp03/chain_heroic_pristine/pauldron01_leather_heavy_right', 0), + (8375, 8375, 'accessories/wearable_items/_exp03/chain_heroic_pristine/shoulders_pauldron01_both', 0), + (8376, 8376, 'accessories/wearable_items/_exp03/chain_heroic_pristine/shoulders_pauldron01_left', 0), + (8377, 8377, 'accessories/wearable_items/_exp03/chain_heroic_pristine/shoulders_pauldron01_right', 0), + (8378, 8378, 'accessories/wearable_items/chain/chain_tint01/pauldron01_leather_heavy_left', 0), + (8379, 8379, 'accessories/wearable_items/chain/chain_tint01/pauldron01_leather_heavy_right', 0), + (8380, 8380, 'accessories/wearable_items/chain/chain_tint01/shoulders_pauldron01_both', 0), + (8381, 8381, 'accessories/wearable_items/chain/chain_tint01/shoulders_pauldron01_left', 0), + (8382, 8382, 'accessories/wearable_items/chain/chain_tint01/shoulders_pauldron01_right', 0), + (8383, 8383, 'accessories/wearable_items/heavy_plate/plain02/pauldron02_vanguard_ridged_left', 0), + (8384, 8384, 'accessories/wearable_items/heavy_plate/plain02/pauldron02_vanguard_ridged_right', 0), + (8385, 8385, 'accessories/wearable_items/heavy_plate/plain02/pauldron03_vanguard_flared_left', 0), + (8386, 8386, 'accessories/wearable_items/heavy_plate/plain02/pauldron03_vanguard_flared_right', 0), + (8387, 8387, 'accessories/wearable_items/heavy_plate/plain02/pauldron04_vanguard_medium_left', 0), + (8388, 8388, 'accessories/wearable_items/heavy_plate/plain02/pauldron04_vanguard_medium_right', 0), + (8389, 8389, 'accessories/wearable_items/heavy_plate/plain02/pauldron05_vanguard_heavy_left', 0), + (8390, 8390, 'accessories/wearable_items/heavy_plate/plain02/pauldron05_vanguard_heavy_right', 0), + (8391, 8391, 'accessories/wearable_items/heavy_plate/plain02/pauldron06_vanguard_horns_left', 0), + (8392, 8392, 'accessories/wearable_items/heavy_plate/plain02/pauldron06_vanguard_horns_right', 0), + (8393, 8393, 'accessories/wearable_items/heavy_plate/plain02/pauldron07_vanguard_gothic_left', 0), + (8394, 8394, 'accessories/wearable_items/heavy_plate/plain02/pauldron07_vanguard_gothic_right', 0), + (8395, 8395, 'accessories/wearable_items/heavy_plate/plain02/pauldron08_vanguard_horns_skulls_left', 0), + (8396, 8396, 'accessories/wearable_items/heavy_plate/plain02/pauldron08_vanguard_horns_skulls_right', 0), + (8397, 8397, 'accessories/wearable_items/heavy_plate/plain02/shoulders_pauldron02_both', 0), + (8398, 8398, 'accessories/wearable_items/heavy_plate/plain02/shoulders_pauldron02_left', 0), + (8399, 8399, 'accessories/wearable_items/heavy_plate/plain02/shoulders_pauldron02_right', 0), + (8400, 8400, 'accessories/wearable_items/heavy_plate/plain02/shoulders_pauldron03_both', 0), + (8401, 8401, 'accessories/wearable_items/heavy_plate/plain02/shoulders_pauldron03_left', 0), + (8402, 8402, 'accessories/wearable_items/heavy_plate/plain02/shoulders_pauldron03_right', 0), + (8403, 8403, 'accessories/wearable_items/heavy_plate/plain02/shoulders_pauldron04_both', 0), + (8404, 8404, 'accessories/wearable_items/heavy_plate/plain02/shoulders_pauldron04_left', 0), + (8405, 8405, 'accessories/wearable_items/heavy_plate/plain02/shoulders_pauldron04_right', 0), + (8406, 8406, 'accessories/wearable_items/heavy_plate/plain02/shoulders_pauldron05_both', 0), + (8407, 8407, 'accessories/wearable_items/heavy_plate/plain02/shoulders_pauldron05_left', 0), + (8408, 8408, 'accessories/wearable_items/heavy_plate/plain02/shoulders_pauldron05_right', 0), + (8409, 8409, 'accessories/wearable_items/heavy_plate/plain02/shoulders_pauldron06_both', 0), + (8410, 8410, 'accessories/wearable_items/heavy_plate/plain02/shoulders_pauldron06_left', 0), + (8411, 8411, 'accessories/wearable_items/heavy_plate/plain02/shoulders_pauldron06_right', 0), + (8412, 8412, 'accessories/wearable_items/heavy_plate/plain02/shoulders_pauldron07_both', 0), + (8413, 8413, 'accessories/wearable_items/heavy_plate/plain02/shoulders_pauldron07_left', 0), + (8414, 8414, 'accessories/wearable_items/heavy_plate/plain02/shoulders_pauldron07_right', 0), + (8415, 8415, 'accessories/wearable_items/heavy_plate/plain02/shoulders_pauldron08_both', 0), + (8416, 8416, 'accessories/wearable_items/heavy_plate/plain02/shoulders_pauldron08_left', 0), + (8417, 8417, 'accessories/wearable_items/heavy_plate/plain02/shoulders_pauldron08_right', 0), + (8418, 8418, 'accessories/wearable_items/_exp04/sarnak_vanguard/pauldron02_vanguard_ridged_left', 0), + (8419, 8419, 'accessories/wearable_items/_exp04/sarnak_vanguard/pauldron02_vanguard_ridged_right', 0), + (8420, 8420, 'accessories/wearable_items/_exp04/sarnak_vanguard/shoulders_pauldron02_both', 0), + (8421, 8421, 'accessories/wearable_items/_exp04/sarnak_vanguard/shoulders_pauldron02_left', 0), + (8422, 8422, 'accessories/wearable_items/_exp04/sarnak_vanguard/shoulders_pauldron02_right', 0), + (8423, 8423, 'accessories/wearable_items/_exp02/vanguard_chitin/pauldron02_vanguard_ridged_left', 0), + (8424, 8424, 'accessories/wearable_items/_exp02/vanguard_chitin/pauldron02_vanguard_ridged_right', 0), + (8425, 8425, 'accessories/wearable_items/_exp02/vanguard_chitin/shoulders_pauldron02_both', 0), + (8426, 8426, 'accessories/wearable_items/_exp02/vanguard_chitin/shoulders_pauldron02_left', 0), + (8427, 8427, 'accessories/wearable_items/_exp02/vanguard_chitin/shoulders_pauldron02_right', 0), + (8428, 8428, 'accessories/wearable_items/heavy_plate/plain_white/pauldron03_vanguard_flared_left', 0), + (8429, 8429, 'accessories/wearable_items/heavy_plate/plain_white/pauldron03_vanguard_flared_right', 0), + (8430, 8430, 'accessories/wearable_items/heavy_plate/plain_white/pauldron05_vanguard_heavy_left', 0), + (8431, 8431, 'accessories/wearable_items/heavy_plate/plain_white/pauldron05_vanguard_heavy_right', 0), + (8432, 8432, 'accessories/wearable_items/heavy_plate/plain_white/shoulders_pauldron03_both', 0), + (8433, 8433, 'accessories/wearable_items/heavy_plate/plain_white/shoulders_pauldron03_left', 0), + (8434, 8434, 'accessories/wearable_items/heavy_plate/plain_white/shoulders_pauldron03_right', 0), + (8435, 8435, 'accessories/wearable_items/heavy_plate/plain_white/shoulders_pauldron05_both', 0), + (8436, 8436, 'accessories/wearable_items/heavy_plate/plain_white/shoulders_pauldron05_left', 0), + (8437, 8437, 'accessories/wearable_items/heavy_plate/plain_white/shoulders_pauldron05_right', 0), + (8438, 8438, 'accessories/wearable_items/_exp03/kaladim_vanguard_01/pauldron03_vanguard_flared_left', 0), + (8439, 8439, 'accessories/wearable_items/_exp03/kaladim_vanguard_01/pauldron03_vanguard_flared_right', 0), + (8440, 8440, 'accessories/wearable_items/_exp03/kaladim_vanguard_01/shoulders_pauldron03_both', 0), + (8441, 8441, 'accessories/wearable_items/_exp03/kaladim_vanguard_01/shoulders_pauldron03_left', 0), + (8442, 8442, 'accessories/wearable_items/_exp03/kaladim_vanguard_01/shoulders_pauldron03_right', 0), + (8443, 8443, 'accessories/wearable_items/vanguard/common/low/pauldron03_vanguard_flared_left', 0), + (8444, 8444, 'accessories/wearable_items/vanguard/common/low/pauldron03_vanguard_flared_right', 0), + (8445, 8445, 'accessories/wearable_items/vanguard/common/low/shoulders_pauldron03_both', 0), + (8446, 8446, 'accessories/wearable_items/vanguard/common/low/shoulders_pauldron03_left', 0), + (8447, 8447, 'accessories/wearable_items/vanguard/common/low/shoulders_pauldron03_right', 0), + (8448, 8448, 'accessories/wearable_items/heavy_plate/plain/pauldron03_vanguard_flared_left', 0), + (8449, 8449, 'accessories/wearable_items/heavy_plate/plain/pauldron03_vanguard_flared_right', 0), + (8450, 8450, 'accessories/wearable_items/heavy_plate/plain/shoulders_pauldron03_both', 0), + (8451, 8451, 'accessories/wearable_items/heavy_plate/plain/shoulders_pauldron03_left', 0), + (8452, 8452, 'accessories/wearable_items/heavy_plate/plain/shoulders_pauldron03_right', 0), + (8453, 8453, 'accessories/wearable_items/vanguard/vanguard_tint01/pauldron04_vanguard_medium_left', 0), + (8454, 8454, 'accessories/wearable_items/vanguard/vanguard_tint01/pauldron04_vanguard_medium_right', 0), + (8455, 8455, 'accessories/wearable_items/vanguard/vanguard_tint01/shoulders_pauldron04_both', 0), + (8456, 8456, 'accessories/wearable_items/vanguard/vanguard_tint01/shoulders_pauldron04_left', 0), + (8457, 8457, 'accessories/wearable_items/vanguard/vanguard_tint01/shoulders_pauldron04_right', 0), + (8458, 8458, 'accessories/wearable_items/vanguard/common/high/pauldron06_vanguard_horns_left', 0), + (8459, 8459, 'accessories/wearable_items/vanguard/common/high/pauldron06_vanguard_horns_right', 0), + (8460, 8460, 'accessories/wearable_items/vanguard/common/high/shoulders_pauldron06_both', 0), + (8461, 8461, 'accessories/wearable_items/vanguard/common/high/shoulders_pauldron06_left', 0), + (8462, 8462, 'accessories/wearable_items/vanguard/common/high/shoulders_pauldron06_right', 0), + (8463, 8463, 'accessories/wearable_items/vanguard/uncommon/low/pauldron06_vanguard_horns_left', 0), + (8464, 8464, 'accessories/wearable_items/vanguard/uncommon/low/pauldron06_vanguard_horns_right', 0), + (8465, 8465, 'accessories/wearable_items/vanguard/uncommon/low/shoulders_pauldron06_both', 0), + (8466, 8466, 'accessories/wearable_items/vanguard/uncommon/low/shoulders_pauldron06_left', 0), + (8467, 8467, 'accessories/wearable_items/vanguard/uncommon/low/shoulders_pauldron06_right', 0), + (8468, 8468, 'accessories/wearable_items/heavy_plate/plain02/chest', 0), + (8469, 8469, 'accessories/wearable_items/heavy_plate/plain02/feet', 0), + (8470, 8470, 'accessories/wearable_items/heavy_plate/plain02/forearms', 0), + (8471, 8471, 'accessories/wearable_items/heavy_plate/plain02/hands', 0), + (8472, 8472, 'accessories/wearable_items/heavy_plate/plain02/head', 0), + (8473, 8473, 'accessories/wearable_items/heavy_plate/plain02/left', 0), + (8474, 8474, 'accessories/wearable_items/heavy_plate/plain02/legs', 0), + (8475, 8475, 'accessories/wearable_items/heavy_plate/plain02/legs_noskirt', 0), + (8476, 8476, 'accessories/wearable_items/heavy_plate/plain02/right', 0), + (8477, 8477, 'accessories/wearable_items/heavy_plate/plain02/shoulders', 0), + (8478, 8478, 'accessories/wearable_items/heavy_plate/plain02/shoulders_nopauldrons', 0), + (8479, 8479, 'accessories/wearable_items/heavy_plate/plain02/skirt', 0), + (8480, 8480, 'accessories/wearable_items/heavy_plate/plain02/upperchest', 0), + (8481, 8481, 'accessories/wearable_items/heavy_plate/plain_white/chest', 0), + (8482, 8482, 'accessories/wearable_items/heavy_plate/plain_white/feet', 0), + (8483, 8483, 'accessories/wearable_items/heavy_plate/plain_white/forearms', 0), + (8484, 8484, 'accessories/wearable_items/heavy_plate/plain_white/hands', 0), + (8485, 8485, 'accessories/wearable_items/heavy_plate/plain_white/head', 0), + (8486, 8486, 'accessories/wearable_items/heavy_plate/plain_white/left', 0), + (8487, 8487, 'accessories/wearable_items/heavy_plate/plain_white/legs', 0), + (8488, 8488, 'accessories/wearable_items/heavy_plate/plain_white/legs_noskirt', 0), + (8489, 8489, 'accessories/wearable_items/heavy_plate/plain_white/right', 0), + (8490, 8490, 'accessories/wearable_items/heavy_plate/plain_white/shoulders', 0), + (8491, 8491, 'accessories/wearable_items/heavy_plate/plain_white/shoulders_nopauldrons', 0), + (8492, 8492, 'accessories/wearable_items/heavy_plate/plain_white/skirt', 0), + (8493, 8493, 'accessories/wearable_items/heavy_plate/plain_white/upperchest', 0), + (8494, 8494, 'accessories/wearable_items/_exp03/mistmoore_vanguard_01/shoulders_pauldron02_both', 0), + (8495, 8495, 'accessories/wearable_items/_exp03/mistmoore_vanguard_01/shoulders_pauldron02_left', 0), + (8496, 8496, 'accessories/wearable_items/_exp03/mistmoore_vanguard_01/shoulders_pauldron02_right', 0), + (8497, 8497, 'accessories/wearable_items/heavy_plate/plain_white_sun_symbol/chest', 0), + (8498, 8498, 'accessories/wearable_items/heavy_plate/plain_white_sun_symbol/feet', 0), + (8499, 8499, 'accessories/wearable_items/heavy_plate/plain_white_sun_symbol/forearms', 0), + (8500, 8500, 'accessories/wearable_items/heavy_plate/plain_white_sun_symbol/hands', 0), + (8501, 8501, 'accessories/wearable_items/heavy_plate/plain_white_sun_symbol/head', 0), + (8502, 8502, 'accessories/wearable_items/heavy_plate/plain_white_sun_symbol/left', 0), + (8503, 8503, 'accessories/wearable_items/heavy_plate/plain_white_sun_symbol/legs', 0), + (8504, 8504, 'accessories/wearable_items/heavy_plate/plain_white_sun_symbol/legs_noskirt', 0), + (8505, 8505, 'accessories/wearable_items/heavy_plate/plain_white_sun_symbol/right', 0), + (8506, 8506, 'accessories/wearable_items/heavy_plate/plain_white_sun_symbol/shoulders', 0), + (8507, 8507, 'accessories/wearable_items/heavy_plate/plain_white_sun_symbol/shoulders_nopauldrons', 0), + (8508, 8508, 'accessories/wearable_items/heavy_plate/plain_white_sun_symbol/skirt', 0), + (8509, 8509, 'accessories/wearable_items/heavy_plate/plain_white_sun_symbol/upperchest', 0), + (8510, 8510, 'accessories/wearable_items01/_exp00/heavy_plate/plain02/chest', 0), + (8511, 8511, 'accessories/wearable_items01/_exp00/heavy_plate/plain02/feet', 0), + (8512, 8512, 'accessories/wearable_items01/_exp00/heavy_plate/plain02/forearms', 0), + (8513, 8513, 'accessories/wearable_items01/_exp00/heavy_plate/plain02/hands', 0), + (8514, 8514, 'accessories/wearable_items01/_exp00/heavy_plate/plain02/left', 0), + (8515, 8515, 'accessories/wearable_items01/_exp00/heavy_plate/plain02/legs', 0), + (8516, 8516, 'accessories/wearable_items01/_exp00/heavy_plate/plain02/legs_noskirt', 0), + (8517, 8517, 'accessories/wearable_items01/_exp00/heavy_plate/plain02/right', 0), + (8518, 8518, 'accessories/wearable_items01/_exp00/heavy_plate/plain02/shoulders', 0), + (8519, 8519, 'accessories/wearable_items01/_exp00/heavy_plate/plain02/skirt', 0), + (8520, 8520, 'accessories/wearable_items01/_exp00/heavy_plate/plain02/upperchest', 0), + (8521, 8521, 'accessories/wearable_items01/_exp00/heavy_plate/plain_white/chest', 0), + (8522, 8522, 'accessories/wearable_items01/_exp00/heavy_plate/plain_white/feet', 0), + (8523, 8523, 'accessories/wearable_items01/_exp00/heavy_plate/plain_white/forearms', 0), + (8524, 8524, 'accessories/wearable_items01/_exp00/heavy_plate/plain_white/hands', 0), + (8525, 8525, 'accessories/wearable_items01/_exp00/heavy_plate/plain_white/head', 0), + (8526, 8526, 'accessories/wearable_items01/_exp00/heavy_plate/plain_white/left', 0), + (8527, 8527, 'accessories/wearable_items01/_exp00/heavy_plate/plain_white/legs', 0), + (8528, 8528, 'accessories/wearable_items01/_exp00/heavy_plate/plain_white/legs_noskirt', 0), + (8529, 8529, 'accessories/wearable_items01/_exp00/heavy_plate/plain_white/right', 0), + (8530, 8530, 'accessories/wearable_items01/_exp00/heavy_plate/plain_white/shoulders', 0), + (8531, 8531, 'accessories/wearable_items01/_exp00/heavy_plate/plain_white/skirt', 0), + (8532, 8532, 'accessories/wearable_items01/_exp00/heavy_plate/plain_white/upperchest', 0), + (8533, 8533, 'accessories/wearable_items01/_exp00/heavy_plate/plain_white_sun_symbol/chest', 0), + (8534, 8534, 'accessories/wearable_items01/_exp00/heavy_plate/plain_white_sun_symbol/feet', 0), + (8535, 8535, 'accessories/wearable_items01/_exp00/heavy_plate/plain_white_sun_symbol/forearms', 0), + (8536, 8536, 'accessories/wearable_items01/_exp00/heavy_plate/plain_white_sun_symbol/hands', 0), + (8537, 8537, 'accessories/wearable_items01/_exp00/heavy_plate/plain_white_sun_symbol/head', 0), + (8538, 8538, 'accessories/wearable_items01/_exp00/heavy_plate/plain_white_sun_symbol/left', 0), + (8539, 8539, 'accessories/wearable_items01/_exp00/heavy_plate/plain_white_sun_symbol/legs', 0), + (8540, 8540, 'accessories/wearable_items01/_exp00/heavy_plate/plain_white_sun_symbol/legs_noskirt', 0), + (8541, 8541, 'accessories/wearable_items01/_exp00/heavy_plate/plain_white_sun_symbol/right', 0), + (8542, 8542, 'accessories/wearable_items01/_exp00/heavy_plate/plain_white_sun_symbol/shoulders_nopauldrons', 0), + (8543, 8543, 'accessories/wearable_items01/_exp00/heavy_plate/plain_white_sun_symbol/shoulders_pauldron03_both', 0), + (8544, 8544, 'accessories/wearable_items01/_exp00/heavy_plate/plain_white_sun_symbol/shoulders_pauldron03_left', 0), + (8545, 8545, 'accessories/wearable_items01/_exp00/heavy_plate/plain_white_sun_symbol/shoulders_pauldron03_right', 0), + (8546, 8546, 'accessories/wearable_items01/_exp00/heavy_plate/plain_white_sun_symbol/shoulders_pauldron05_both', 0), + (8547, 8547, 'accessories/wearable_items01/_exp00/heavy_plate/plain_white_sun_symbol/shoulders_pauldron05_left', 0), + (8548, 8548, 'accessories/wearable_items01/_exp00/heavy_plate/plain_white_sun_symbol/shoulders_pauldron05_right', 0), + (8549, 8549, 'accessories/wearable_items01/_exp00/heavy_plate/plain_white_sun_symbol/skirt', 0), + (8550, 8550, 'accessories/wearable_items01/_exp00/heavy_plate/plain_white_sun_symbol/upperchest', 0), + (8551, 8551, 'accessories/wearable_items01/_exp00/chain/chain_tint01/shoulders_pauldron01_both', 0), + (8552, 8552, 'accessories/wearable_items01/_exp00/chain/chain_tint01/shoulders_pauldron01_left', 0), + (8553, 8553, 'accessories/wearable_items01/_exp00/chain/chain_tint01/shoulders_pauldron01_right', 0), + (8554, 8554, 'accessories/wearable_items01/_exp00/heavy_plate/plain/shoulders_pauldron03_both', 0), + (8555, 8555, 'accessories/wearable_items01/_exp00/heavy_plate/plain/shoulders_pauldron03_left', 0), + (8556, 8556, 'accessories/wearable_items01/_exp00/heavy_plate/plain/shoulders_pauldron03_right', 0), + (8557, 8557, 'accessories/wearable_items01/_exp00/heavy_plate/plain02/shoulders_pauldron02_both', 0), + (8558, 8558, 'accessories/wearable_items01/_exp00/heavy_plate/plain02/shoulders_pauldron02_left', 0), + (8559, 8559, 'accessories/wearable_items01/_exp00/heavy_plate/plain02/shoulders_pauldron02_right', 0), + (8560, 8560, 'accessories/wearable_items01/_exp00/heavy_plate/plain02/shoulders_pauldron03_both', 0), + (8561, 8561, 'accessories/wearable_items01/_exp00/heavy_plate/plain02/shoulders_pauldron03_left', 0), + (8562, 8562, 'accessories/wearable_items01/_exp00/heavy_plate/plain02/shoulders_pauldron03_right', 0), + (8563, 8563, 'accessories/wearable_items01/_exp00/heavy_plate/plain02/shoulders_pauldron04_both', 0), + (8564, 8564, 'accessories/wearable_items01/_exp00/heavy_plate/plain02/shoulders_pauldron04_left', 0), + (8565, 8565, 'accessories/wearable_items01/_exp00/heavy_plate/plain02/shoulders_pauldron04_right', 0), + (8566, 8566, 'accessories/wearable_items01/_exp00/heavy_plate/plain02/shoulders_pauldron05_both', 0), + (8567, 8567, 'accessories/wearable_items01/_exp00/heavy_plate/plain02/shoulders_pauldron05_left', 0), + (8568, 8568, 'accessories/wearable_items01/_exp00/heavy_plate/plain02/shoulders_pauldron05_right', 0), + (8569, 8569, 'accessories/wearable_items01/_exp00/heavy_plate/plain02/shoulders_pauldron06_both', 0), + (8570, 8570, 'accessories/wearable_items01/_exp00/heavy_plate/plain02/shoulders_pauldron06_left', 0), + (8571, 8571, 'accessories/wearable_items01/_exp00/heavy_plate/plain02/shoulders_pauldron06_right', 0), + (8572, 8572, 'accessories/wearable_items01/_exp00/heavy_plate/plain02/shoulders_pauldron07_both', 0), + (8573, 8573, 'accessories/wearable_items01/_exp00/heavy_plate/plain02/shoulders_pauldron07_left', 0), + (8574, 8574, 'accessories/wearable_items01/_exp00/heavy_plate/plain02/shoulders_pauldron07_right', 0), + (8575, 8575, 'accessories/wearable_items01/_exp00/heavy_plate/plain02/shoulders_pauldron08_both', 0), + (8576, 8576, 'accessories/wearable_items01/_exp00/heavy_plate/plain02/shoulders_pauldron08_left', 0), + (8577, 8577, 'accessories/wearable_items01/_exp00/heavy_plate/plain02/shoulders_pauldron08_right', 0), + (8578, 8578, 'accessories/wearable_items01/_exp00/heavy_plate/plain_white/shoulders_pauldron03_both', 0), + (8579, 8579, 'accessories/wearable_items01/_exp00/heavy_plate/plain_white/shoulders_pauldron03_left', 0), + (8580, 8580, 'accessories/wearable_items01/_exp00/heavy_plate/plain_white/shoulders_pauldron03_right', 0), + (8581, 8581, 'accessories/wearable_items01/_exp00/heavy_plate/plain_white/shoulders_pauldron05_both', 0), + (8582, 8582, 'accessories/wearable_items01/_exp00/heavy_plate/plain_white/shoulders_pauldron05_left', 0), + (8583, 8583, 'accessories/wearable_items01/_exp00/heavy_plate/plain_white/shoulders_pauldron05_right', 0), + (8584, 8584, 'accessories/wearable_items01/_exp00/leather/common/low/shoulders_pauldron01_both', 0), + (8585, 8585, 'accessories/wearable_items01/_exp00/leather/common/low/shoulders_pauldron01_left', 0), + (8586, 8586, 'accessories/wearable_items01/_exp00/leather/common/low/shoulders_pauldron01_right', 0), + (8587, 8587, 'accessories/wearable_items01/_exp00/vanguard/common/low/shoulders_pauldron03_both', 0), + (8588, 8588, 'accessories/wearable_items01/_exp00/vanguard/common/low/shoulders_pauldron03_left', 0), + (8589, 8589, 'accessories/wearable_items01/_exp00/vanguard/common/low/shoulders_pauldron03_right', 0), + (8590, 8590, 'accessories/wearable_items01/_exp00/vanguard/common/high/shoulders_pauldron06_both', 0), + (8591, 8591, 'accessories/wearable_items01/_exp00/vanguard/common/high/shoulders_pauldron06_left', 0), + (8592, 8592, 'accessories/wearable_items01/_exp00/vanguard/common/high/shoulders_pauldron06_right', 0), + (8593, 8593, 'accessories/wearable_items01/_exp02/vanguard_chitin/shoulders_pauldron02_both', 0), + (8594, 8594, 'accessories/wearable_items01/_exp02/vanguard_chitin/shoulders_pauldron02_left', 0), + (8595, 8595, 'accessories/wearable_items01/_exp02/vanguard_chitin/shoulders_pauldron02_right', 0), + (8596, 8596, 'accessories/wearable_items01/_exp02/woven_monk/shoulders_pauldron01_both', 0), + (8597, 8597, 'accessories/wearable_items01/_exp02/woven_monk/shoulders_pauldron01_left', 0), + (8598, 8598, 'accessories/wearable_items01/_exp02/woven_monk/shoulders_pauldron01_right', 0), + (8599, 8599, 'accessories/wearable_items01/_exp03/chain_heroic_pristine/shoulders_pauldron01_both', 0), + (8600, 8600, 'accessories/wearable_items01/_exp03/chain_heroic_pristine/shoulders_pauldron01_left', 0), + (8601, 8601, 'accessories/wearable_items01/_exp03/chain_heroic_pristine/shoulders_pauldron01_right', 0), + (8602, 8602, 'accessories/wearable_items01/_exp03/kaladim_vanguard_01/shoulders_pauldron03_both', 0), + (8603, 8603, 'accessories/wearable_items01/_exp03/kaladim_vanguard_01/shoulders_pauldron03_left', 0), + (8604, 8604, 'accessories/wearable_items01/_exp03/kaladim_vanguard_01/shoulders_pauldron03_right', 0), + (8605, 8605, 'accessories/wearable_items01/_exp03/mistmoore_vanguard_01/shoulders_pauldron02_both', 0), + (8606, 8606, 'accessories/wearable_items01/_exp03/mistmoore_vanguard_01/shoulders_pauldron02_left', 0), + (8607, 8607, 'accessories/wearable_items01/_exp03/mistmoore_vanguard_01/shoulders_pauldron02_right', 0), + (8608, 8608, 'accessories/wearable_items01/_exp04/sarnak_vanguard/shoulders_pauldron02_both', 0), + (8609, 8609, 'accessories/wearable_items01/_exp04/sarnak_vanguard/shoulders_pauldron02_left', 0), + (8610, 8610, 'accessories/wearable_items01/_exp04/sarnak_vanguard/shoulders_pauldron02_right', 0), + (8611, 8611, 'accessories/wearable_items01/_exp00/vanguard/uncommon/low/shoulders_pauldron06_both', 0), + (8612, 8612, 'accessories/wearable_items01/_exp00/vanguard/uncommon/low/shoulders_pauldron06_left', 0), + (8613, 8613, 'accessories/wearable_items01/_exp00/vanguard/uncommon/low/shoulders_pauldron06_right', 0), + (8614, 8614, '_exp03/characters/tool_users/honor_elf/honor_elf_male_paladin02', 0), + (8615, 8615, '_exp03/characters/tool_users/honor_elf/honor_elf_male_paladin03', 0), + (8616, 8616, '_exp03/characters/tool_users/honor_elf/honor_elf_male_paladin04', 0), + (8617, 8617, '_exp03/characters/tool_users/honor_elf/honor_elf_male_paladin05', 0), + (8618, 8618, '_exp03/characters/tool_users/honor_elf/honor_elf_male_paladin06', 0), + (8619, 8619, '_exp03/characters/tool_users/honor_elf/honor_elf_male_paladin07', 0), + (8620, 8620, 'accessories/wieldable_items/misc/pillow01', 0), + (8621, 8621, 'staticobjects/tapestry/dpo_tapestry_design_flames', 0), + (8622, 8622, 'staticobjects/tapestry/runny_standflag01_fire_blue_dpo', 0), + (8623, 8623, 'staticobjects/cauldron/runnyeye_meltingpot_with_eyes_dpo', 0), + (8624, 8624, 'staticobjects/torture_chamber/hanging_evileye_dpo', 0), + (8625, 8625, 'staticobjects/tapestry/dpo_tapestry_design_vampire', 0), + (8626, 8626, 'staticobjects/tapestry/dpo_tapestry_design_death', 0), + (8627, 8627, 'staticobjects/tapestry/dpo_tapestry_design_eyesdark', 0), + (8628, 8628, 'staticobjects/containers/dpo_kel_container_basket02', 0), + (8629, 8629, 'staticobjects/chairs/dpo_kel_chair_wood01', 0), + (8630, 8630, 'staticobjects/tableware/dpo_lt_cup01', 0), + (8631, 8631, 'staticobjects/tableware/dpo_lt_jug01', 0), + (8632, 8632, 'staticobjects/crystals/dpo_kel_crystal_cylinder_growing01', 0), + (8633, 8633, 'staticobjects/pillow/dpo_drv_pillow_floor_round_worn01', 0), + (8634, 8634, 'staticobjects/pillow/dpo_djn_pillow_floor_bluesquare02', 0), + (8635, 8635, 'staticobjects/carcase/dpo_ss_dunebeetle_carapace01', 0), + (8636, 8636, 'staticobjects/tables/dpo_drv_table_end_round01', 0), + (8637, 8637, 'staticobjects/tools/dpo_djn_artist_inkbottle01', 0), + (8638, 8638, 'accessories/wieldable_items/shields/exp05/tribal_shield', 0), + (8639, 8639, 'staticobjects/interiors/scenes/objects_race/dp_objects/tcg_items/tcg_painting13_sporali', 0), + (8640, 8640, 'staticobjects/interiors/scenes/objects_race/dp_objects/tcg_items/tcg_painting15_cyndras', 0), + (8641, 8641, 'staticobjects/interiors/scenes/objects_race/dp_objects/tcg_items/tcg_painting16_greaves', 0), + (8642, 8642, 'staticobjects/interiors/scenes/objects_race/dp_objects/tcg_items/tcg_painting17_bunny', 0), + (8643, 8643, 'staticobjects/tableware/dpo_lt_openbowl01', 0), + (8644, 8644, 'accessories/wearable_items/_exp08/dragon_armor/leather2_green/chest', 1096), + (8645, 8645, 'accessories/wearable_items/_exp08/dragon_armor/leather2_green/feet', 1096), + (8646, 8646, 'accessories/wearable_items/_exp08/dragon_armor/leather2_green/forearms', 1096), + (8647, 8647, 'accessories/wearable_items/_exp08/dragon_armor/leather2_green/hands', 1096), + (8648, 8648, 'creatures/tu/gods_varsoon', 0), + (8649, 8649, 'accessories/wearable_items01/_exp00/vanguard/vanguard_tint01/shoulders_pauldron04_right', 0), + (8650, 8650, 'accessories/wearable_items01/_exp00/vanguard/vanguard_tint01/shoulders_pauldron04_left', 0), + (8651, 8651, 'accessories/wearable_items01/_exp00/vanguard/vanguard_tint01/shoulders_pauldron04_both', 0), + (8652, 8652, 'accessories/wearable_items01/_exp00/profesion_hats/clockwork/clockwork_hat_01/head', 0), + (8653, 8653, 'accessories/wearable_items01/_exp00/heavy_plate/plain02/head', 0), + (8654, 8654, 'accessories/wearable_items01/_exp00/heavy_plate/plain02/shoulders_nopauldrons', 0), + (8655, 8655, 'accessories/wearable_items01/_exp00/heavy_plate/plain_white/shoulders_nopauldrons', 0), + (8656, 8656, '_exp01/characters/tool_users/genie_male_warterlord', 0), + (8657, 8657, 'ec/pc/darkelf/darkelf_male_vampire', 0), + (8658, 8658, 'ec/pc/darkelf/darkelf_female_vampire', 0), + (8659, 8659, 'accessories/wearable_items/sallet_helmet/heavy_plate_plain/head', 0), + (8660, 8660, 'accessories/wearable_items01/_exp00/sallet_helmet/heavy_plate_plain/head', 0), + (8661, 8661, '_exp05/tool_users/troll_male_pirate', 0), + (8662, 8662, 'accessories/npc_wearables/pirates/troll_male_pirate_hat', 0), + (8663, 8663, 'accessories/wearable_items/_exp03/mistmoore_vanguard_01/pauldron02_vanguard_ridged_left', 0), + (8664, 8664, 'accessories/wearable_items/_exp03/mistmoore_vanguard_01/pauldron02_vanguard_ridged_right', 0), + (8665, 8665, 'ec/pc/ogre/fire_ogre_male', 0), + (8666, 8666, '_exp05/zones/objects/exp05_dun_najena_forge/nh_spin_wheel_gold', 0), + (8667, 8667, '_exp05/zones/objects/exp05_dun_najena_forge/nh_wheel_control_panel', 0), + (8668, 8668, 'creatures/monsters/wolf_shade', 0), + (8669, 8669, '_exp01/characters/tool_users/water_djinn_master', 0), + (8670, 8670, '_exp02/characters/monsters/basilisk_ice', 0), + (8671, 8671, 'ec/pc/ogre/green_mist_ogre_female', 0), + (8672, 8672, 'ec/pc/ogre/green_mist_ogre_male', 0), + (8673, 8673, 'staticobjects/weapons/dpo_zombie_club_animated02', 0), + (8674, 8674, 'accessories/wearable_items/heavy_plate/plain02/pauldron08_vanguard_skulls_sarnak_left', 0), + (8675, 8675, 'accessories/wearable_items/heavy_plate/plain02/pauldron08_vanguard_skulls_sarnak_right', 0), + (8676, 8676, 'accessories/wearable_items/vanguard/vanguard_chitin_fresnel/chest', 0), + (8677, 8677, 'accessories/wearable_items/vanguard/vanguard_chitin_fresnel/feet', 0), + (8678, 8678, 'accessories/wearable_items/vanguard/vanguard_chitin_fresnel/forearms', 0), + (8679, 8679, 'accessories/wearable_items/vanguard/vanguard_chitin_fresnel/hands', 0), + (8680, 8680, 'accessories/wearable_items/vanguard/vanguard_chitin_fresnel/head', 0), + (8681, 8681, 'accessories/wearable_items/vanguard/vanguard_chitin_fresnel/left', 0), + (8682, 8682, 'accessories/wearable_items/vanguard/vanguard_chitin_fresnel/legs', 0), + (8683, 8683, 'accessories/wearable_items/vanguard/vanguard_chitin_fresnel/legs_noskirt', 0), + (8684, 8684, 'accessories/wearable_items/vanguard/vanguard_chitin_fresnel/pauldron07_vanguard_gothic_left', 0), + (8685, 8685, 'accessories/wearable_items/vanguard/vanguard_chitin_fresnel/pauldron07_vanguard_gothic_right', 0), + (8686, 8686, 'accessories/wearable_items/vanguard/vanguard_chitin_fresnel/right', 0), + (8687, 8687, 'accessories/wearable_items/vanguard/vanguard_chitin_fresnel/shoulders', 0), + (8688, 8688, 'accessories/wearable_items/vanguard/vanguard_chitin_fresnel/shoulders_nopauldrons', 0), + (8689, 8689, 'accessories/wearable_items/vanguard/vanguard_chitin_fresnel/shoulders_pauldron07_both', 0), + (8690, 8690, 'accessories/wearable_items/vanguard/vanguard_chitin_fresnel/shoulders_pauldron07_left', 0), + (8691, 8691, 'accessories/wearable_items/vanguard/vanguard_chitin_fresnel/shoulders_pauldron07_right', 0), + (8692, 8692, 'accessories/wearable_items/vanguard/vanguard_chitin_fresnel/skirt', 0), + (8693, 8693, 'accessories/wearable_items/vanguard/vanguard_chitin_fresnel/upperchest', 0), + (8694, 8694, 'accessories/wearable_items01/_exp00/vanguard/vanguard_chitin_fresnel/chest', 0), + (8695, 8695, 'accessories/wearable_items01/_exp00/vanguard/vanguard_chitin_fresnel/feet', 0), + (8696, 8696, 'accessories/wearable_items01/_exp00/vanguard/vanguard_chitin_fresnel/forearms', 0), + (8697, 8697, 'accessories/wearable_items01/_exp00/vanguard/vanguard_chitin_fresnel/hands', 0), + (8698, 8698, 'accessories/wearable_items01/_exp00/vanguard/vanguard_chitin_fresnel/head', 0), + (8699, 8699, 'accessories/wearable_items01/_exp00/vanguard/vanguard_chitin_fresnel/legs', 0), + (8700, 8700, 'accessories/wearable_items01/_exp00/vanguard/vanguard_chitin_fresnel/legs_noskirt', 0), + (8701, 8701, 'accessories/wearable_items01/_exp00/vanguard/vanguard_chitin_fresnel/right', 0), + (8702, 8702, 'accessories/wearable_items01/_exp00/vanguard/vanguard_chitin_fresnel/shoulders', 0), + (8703, 8703, 'accessories/wearable_items01/_exp00/vanguard/vanguard_chitin_fresnel/shoulders_nopauldrons', 0), + (8704, 8704, 'accessories/wearable_items01/_exp00/vanguard/vanguard_chitin_fresnel/shoulders_pauldron07_both', 0), + (8705, 8705, 'accessories/wearable_items01/_exp00/vanguard/vanguard_chitin_fresnel/shoulders_pauldron07_left', 0), + (8706, 8706, 'accessories/wearable_items01/_exp00/vanguard/vanguard_chitin_fresnel/shoulders_pauldron07_right', 0), + (8707, 8707, 'accessories/wearable_items01/_exp00/vanguard/vanguard_chitin_fresnel/skirt', 0), + (8708, 8708, 'accessories/wearable_items01/_exp00/vanguard/vanguard_chitin_fresnel/upperchest', 0), + (8709, 8709, 'creatures/tu/iksar_skeleton__bruiser_01_female', 0), + (8710, 8710, 'creatures/tu/iksar_skeleton__mage_01_female', 0), + (8711, 8711, 'creatures/tu/iksar_skeleton_female', 0), + (8712, 8712, 'creatures/tu/iksar_skeleton_mage_01', 0), + (8713, 8713, 'creatures/tu/iksar_skeleton_miniboss_01', 0), + (8714, 8714, 'creatures/tu/iksar_skeleton_warrior_01', 0), + (8715, 8715, 'creatures/tu/iksar_skeleton_warrior_01_female', 0), + (8716, 8716, 'creatures/tu/iksar_skeleton_warrior_02', 0), + (8717, 8717, 'creatures/tu/iksar_skeleton_warrior_02_female', 0), + (8718, 8718, 'creatures/tu/iksar_skeleton_warrior_03', 0), + (8719, 8719, 'accessories/wearable_items/sallet_helmet/vanguard_chitin_fresnel/head', 0), + (8720, 8720, 'staticobjects/liveevent/frostfell/dpo_apple_pie', 0), + (8721, 8721, 'staticobjects/liveevent/frostfell/dpo_apple_pie2', 0), + (8722, 8722, 'staticobjects/liveevent/frostfell/dpo_bauble_blue01', 0), + (8723, 8723, 'staticobjects/liveevent/frostfell/dpo_bauble_glass_blue01', 0), + (8724, 8724, 'staticobjects/liveevent/frostfell/dpo_bauble_glass_green01', 0), + (8725, 8725, 'staticobjects/liveevent/frostfell/dpo_bauble_glass_red01', 0), + (8726, 8726, 'staticobjects/liveevent/frostfell/dpo_bauble_gold01', 0), + (8727, 8727, 'staticobjects/liveevent/frostfell/dpo_bauble_green01', 0), + (8728, 8728, 'staticobjects/liveevent/frostfell/dpo_bauble_red01', 0), + (8729, 8729, 'staticobjects/liveevent/frostfell/dpo_bauble_silver01', 0), + (8730, 8730, 'staticobjects/liveevent/frostfell/dpo_candle_darkver_black01', 0), + (8731, 8731, 'staticobjects/liveevent/frostfell/dpo_candle_darkver_black02', 0), + (8732, 8732, 'staticobjects/liveevent/frostfell/dpo_candle_darkver_floating01', 0), + (8733, 8733, 'staticobjects/liveevent/frostfell/dpo_candle_darkver_purple01', 0), + (8734, 8734, 'staticobjects/liveevent/frostfell/dpo_candle_darkver_purple02', 0), + (8735, 8735, 'staticobjects/liveevent/frostfell/dpo_candlegroup_darkver_greenblack', 0), + (8736, 8736, 'staticobjects/liveevent/frostfell/dpo_candlegroup_darkver_greensilver', 0), + (8737, 8737, 'staticobjects/liveevent/frostfell/dpo_candlegroup_darkver_purpleblack', 0), + (8738, 8738, 'staticobjects/liveevent/frostfell/dpo_candlegroup_darkver_purplesilver', 0), + (8739, 8739, 'staticobjects/liveevent/frostfell/dpo_ham01', 0), + (8740, 8740, 'staticobjects/liveevent/frostfell/dpo_pastries01', 0), + (8741, 8741, 'staticobjects/liveevent/frostfell/dpo_present_darkver_black_big', 0), + (8742, 8742, 'staticobjects/liveevent/frostfell/dpo_present_darkver_black_medium', 0), + (8743, 8743, 'staticobjects/liveevent/frostfell/dpo_present_darkver_leather_cracked_large', 0), + (8744, 8744, 'staticobjects/liveevent/frostfell/dpo_present_darkver_leather_group01', 0), + (8745, 8745, 'staticobjects/liveevent/frostfell/dpo_present_darkver_leather_patched_medium', 0), + (8746, 8746, 'staticobjects/liveevent/frostfell/dpo_present_darkver_leather_small', 0), + (8747, 8747, 'staticobjects/liveevent/frostfell/dpo_present_darkver_purple_big', 0), + (8748, 8748, 'staticobjects/liveevent/frostfell/dpo_present_darkver_purple_group01', 0), + (8749, 8749, 'staticobjects/liveevent/frostfell/dpo_present_darkver_purple_small', 0), + (8750, 8750, 'staticobjects/liveevent/frostfell/dpo_sack_of_coal01', 0), + (8751, 8751, 'staticobjects/liveevent/frostfell/dpo_snowflake01', 0), + (8752, 8752, 'staticobjects/liveevent/frostfell/dpo_snowflake01_rotate', 0), + (8753, 8753, 'staticobjects/liveevent/frostfell/dpo_snowflake02', 0), + (8754, 8754, 'staticobjects/liveevent/frostfell/dpo_snowflake02_rotate', 0), + (8755, 8755, 'staticobjects/liveevent/frostfell/dpo_stocking_darkver_female_purple', 0), + (8756, 8756, 'staticobjects/liveevent/frostfell/dpo_stocking_darkver_female_warg_spotted', 0), + (8757, 8757, 'staticobjects/liveevent/frostfell/dpo_stocking_darkver_female_warg_striped', 0), + (8758, 8758, 'staticobjects/liveevent/frostfell/dpo_stocking_darkver_green_elven', 0), + (8759, 8759, 'staticobjects/liveevent/frostfell/dpo_stocking_darkver_green_elven_female', 0), + (8760, 8760, 'staticobjects/liveevent/frostfell/dpo_stocking_darkver_leathercracked', 0), + (8761, 8761, 'staticobjects/liveevent/frostfell/dpo_stocking_darkver_leatherpatch', 0), + (8762, 8762, 'staticobjects/liveevent/frostfell/dpo_stocking_darkver_purple_large', 0), + (8763, 8763, 'staticobjects/liveevent/frostfell/dpo_stocking_darkver_purple_small', 0), + (8764, 8764, 'staticobjects/liveevent/frostfell/dpo_wallcandles01_darkver_gold', 0), + (8765, 8765, 'staticobjects/liveevent/frostfell/dpo_wallcandles01_darkver_iron', 0), + (8766, 8766, 'staticobjects/liveevent/frostfell/dpo_wallcandles01_darkver_silver', 0), + (8767, 8767, 'staticobjects/liveevent/halloween/dpo_pumpkin_pie', 0), + (8768, 8768, '_exp05/tool_users/lich_knight', 0), + (8769, 8769, '_exp05/tool_users/lich_mage_01', 0), + (8770, 8770, '_exp05/tool_users/lich_mage_02', 0), + (8771, 8771, '_exp05/tool_users/lich_specter_01', 0), + (8772, 8772, '_exp05/tool_users/lich_specter_02', 0), + (8773, 8773, '_exp05/tool_users/lich_wizard', 0), + (8774, 8774, '_exp04/monsters/clay_golem_water', 0), + (8775, 8775, 'creatures/monsters/rumbler_water', 0), + (8776, 8776, 'accessories/wieldable_items/weapons/great_sword/greatsword/greatsword002_runic_ice', 0), + (8777, 8777, 'accessories/wieldable_items/weapons/sword/long_sword/long_sword001_runic_ice', 0), + (8778, 8778, 'accessories/wieldable_items/weapons/great_axe/large_dwarf_axe/large_dwarf_axe_ice', 0), + (8779, 8779, 'accessories/wieldable_items/weapons/hammer/mace/mace01_runic_ice', 0), + (8780, 8780, 'accessories/wieldable_items/weapons/great_hammer/war_hammer/war_hammer001_runic_ice', 0), + (8781, 8781, 'accessories/wieldable_items/weapons/axe/waraxe/waraxe002_runic_ice', 0), + (8782, 8782, 'creatures/tu/froglok_kunark_king', 0), + (8783, 8783, 'staticobjects/crates/floor_crate_darkelf_pile', 0), + (8784, 8784, 'creatures/tu/froglok_undead_guard', 0), + (8785, 8785, '_exp05/monsters/animatedhand_01', 0), + (8786, 8786, '_exp05/monsters/animatedhand_01_bracers', 0), + (8787, 8787, '_exp05/monsters/animatedhand_02', 0), + (8788, 8788, '_exp05/monsters/animatedhand_02_bracers', 0), + (8789, 8789, 'staticobjects/liveevent/erollisi_objects/vase_with_gold_roses', 0), + (8790, 8790, 'staticobjects/liveevent/erollisi_objects/vase_with_red_roses', 0), + (8791, 8791, 'staticobjects/urns/fprt_vase_glass01_dpo', 0), + (8792, 8792, 'accessories/wearable_items01/_exp00/sallet_helmet/vanguard_chitin_fresnel/head', 0), + (8793, 8793, 'accessories/wieldable_items/weapons/staff/anashti_sul_staff/anashti_sul_staff', 0), + (8794, 8794, 'accessories/wieldable_items/weapons/staff/anashti_sul_staff/anashti_sul_staff_undead', 0), + (8795, 8795, 'staticobjects/dressers/floor_mayong_dresser', 0), + (8796, 8796, 'staticobjects/beds/floor_mayong_bed', 0), + (8797, 8797, 'staticobjects/dressers/floor_mayong_desk', 0), + (8798, 8798, 'staticobjects/statues/female_suit_of_armor', 0), + (8799, 8799, 'staticobjects/chairs/floor_chair_mayong_desk', 0), + (8800, 8800, 'staticobjects/chairs/floor_couch_mayong_blue_double', 0), + (8801, 8801, 'staticobjects/chairs/floor_couch_mayong_blue_single', 0), + (8802, 8802, 'staticobjects/chairs/floor_couch_mayong_gold_double', 0), + (8803, 8803, 'staticobjects/chairs/floor_couch_mayong_gold_single', 0), + (8804, 8804, 'staticobjects/bookcases/floor_mayong_bookcase', 0), + (8805, 8805, 'staticobjects/beds/floor_bed_mayong_blue', 0), + (8806, 8806, 'staticobjects/beds/floor_bed_mayong_purple', 0), + (8807, 8807, 'staticobjects/brazier/floor_basin', 0), + (8808, 8808, 'staticobjects/dressers/floor_mayong_dresser02', 0), + (8809, 8809, 'staticobjects/weapons/dpo_axe_curved_handle_plain', 0), + (8810, 8810, 'staticobjects/weapons/dpo_battleaxe_uncom', 0), + (8811, 8811, 'staticobjects/weapons/dpo_battleaxe_uncom3_dwarven', 0), + (8812, 8812, 'staticobjects/weapons/dpo_cobra_hatchet_plain', 0), + (8813, 8813, 'staticobjects/weapons/dpo_crescentaxe_uncom', 0), + (8814, 8814, 'staticobjects/weapons/dpo_executioners_axe', 0), + (8815, 8815, 'staticobjects/weapons/dpo_executioners_axe_com', 0), + (8816, 8816, 'staticobjects/weapons/dpo_executioners_cleaver', 0), + (8817, 8817, 'staticobjects/weapons/dpo_pickaxe_uncommon1', 0), + (8818, 8818, '_exp05/monsters/dire_bear01_warmor01', 0), + (8819, 8819, '_exp05/monsters/dire_bear01_warmor02', 0), + (8820, 8820, '_exp05/monsters/dire_bear01_wsaddle', 0), + (8821, 8821, '_exp05/monsters/dire_bear01_wsaddle_armor01', 0), + (8822, 8822, '_exp05/monsters/dire_bear01_wsaddle_armor02', 0), + (8823, 8823, '_exp05/monsters/dire_bear02_warmor01', 0), + (8824, 8824, '_exp05/monsters/dire_bear02_warmor02', 0), + (8825, 8825, '_exp05/monsters/dire_bear02_wsaddle', 0), + (8826, 8826, '_exp05/monsters/dire_bear02_wsaddle_armor01', 0), + (8827, 8827, '_exp05/monsters/dire_bear02_wsaddle_armor02', 0), + (8828, 8828, '_exp05/monsters/dire_bear03_warmor01', 0), + (8829, 8829, '_exp05/monsters/dire_bear03_warmor02', 0), + (8830, 8830, '_exp05/monsters/dire_bear03_wsaddle', 0), + (8831, 8831, '_exp05/monsters/dire_bear03_wsaddle_armor01', 0), + (8832, 8832, '_exp05/monsters/dire_bear03_wsaddle_armor02', 0), + (8833, 8833, '_exp05/monsters/dire_bear04_warmor01', 0), + (8834, 8834, '_exp05/monsters/dire_bear04_warmor02', 0), + (8835, 8835, '_exp05/monsters/dire_bear04_wsaddle', 0), + (8836, 8836, '_exp05/monsters/dire_bear04_wsaddle_armor01', 0), + (8837, 8837, '_exp05/monsters/dire_bear04_wsaddle_armor02', 0), + (8838, 8838, '_exp05/tool_users/troll_female_pirate', 0), + (8839, 8839, 'accessories/wearable_items01/_exp00/magus/common/low/pants_tintable', 0), + (8840, 8840, 'accessories/wearable_items01/_exp00/magus/common/high/chest_tintpants', 0), + (8841, 8841, 'staticobjects/transports/carriage', 0), + (8842, 8842, 'accessories/wieldable_items/weapons/exp03/1h_pierce/exp03_1hp_unicorn_horn_dagger_ice', 0), + (8843, 8843, '_exp05/monsters/animatedhand_03', 0), + (8844, 8844, '_exp05/monsters/animatedhand_03_bracers', 0), + (8845, 8845, '_exp05/zones/objects/exp05_dun_mistmoore_repository/projector_base', 0), + (8846, 8846, '_exp05/zones/objects/exp05_dun_mistmoore_repository/projector_coin', 0), + (8847, 8847, 'creatures/monsters/drake_fire', 0), + (8848, 8848, 'staticobjects/chairs/dpo_djn_chair_artiststool_brass01', 0), + (8849, 8849, 'staticobjects/chairs/dpo_djn_chair_high_brass01', 0), + (8850, 8850, 'staticobjects/dressers/dpo_kel_dresser01', 0), + (8851, 8851, 'staticobjects/pillow/dpo_djn_pillow_floor_redround02', 0), + (8852, 8852, 'staticobjects/tables/dpo_djn_table_bedside02_brass01', 0), + (8853, 8853, 'staticobjects/tables/dpo_drv_bench_brass_ornate01', 0), + (8854, 8854, 'accessories/wearable_items/_exp08/dragon_armor/leather2_green/head', 1096), + (8855, 8855, 'accessories/wearable_items/_exp08/dragon_armor/leather2_green/legs', 1096), + (8856, 8856, 'accessories/wearable_items/_exp08/dragon_armor/leather2_green/legs_noskirt', 1096), + (8857, 8857, 'accessories/wearable_items/profesion_hats/centurion_helm/shiny/head', 0), + (8858, 8858, 'accessories/wearable_items/profesion_hats/centurion_helm/shiny/straight_crest_shiny', 0), + (8859, 8859, 'accessories/wearable_items/profesion_hats/centurion_helm/shiny/transverse_crest_shiny', 0), + (8860, 8860, 'accessories/wearable_items/_exp08/dragon_armor/leather2_green/shoulders', 1096), + (8861, 8861, 'accessories/wearable_items/_exp08/dragon_armor/leather2_green/shoulders_epic', 1096), + (8862, 8862, 'accessories/wearable_items/_exp08/dragon_armor/leather2_red/skirt', 1096), + (8863, 8863, 'accessories/wearable_items01/_exp00/profesion_hats/centurion_helm/shiny/head', 0), + (8864, 8864, 'accessories/wearable_items01/_exp00/profesion_hats/centurion_helm/shiny/straight_crest_shiny', 0), + (8865, 8865, 'accessories/wearable_items/_exp08/dragon_armor/leather2_red/chest', 1096), + (8866, 8866, 'ec/pc/cyclops/cyclops_male', 0), + (8867, 8867, 'ec/pc/cyclops/cyclops_male_fire', 0), + (8868, 8868, 'accessories/wearable_items/cloak/exp05/cloak_void_01', 0), + (8869, 8869, '_exp05/monsters/dire_bear01', 0), + (8870, 8870, '_exp05/monsters/dire_bear02', 0), + (8871, 8871, '_exp05/monsters/dire_bear03', 0), + (8872, 8872, '_exp05/monsters/dire_bear04', 0), + (8873, 8873, 'creatures/pets/pet_rock01', 0), + (8874, 8874, 'creatures/pets/pet_rock02', 0), + (8875, 8875, 'creatures/pets/pet_rock03', 0), + (8876, 8876, 'creatures/pets/pet_rock04', 0), + (8877, 8877, 'creatures/pets/pet_rock05', 0), + (8878, 8878, 'creatures/pets/pet_rock01_copperspots', 0), + (8879, 8879, 'creatures/pets/pet_rock01_purplespots', 0), + (8880, 8880, 'creatures/pets/pet_rock02_copperspots', 0), + (8881, 8881, 'creatures/pets/pet_rock02_purplespots', 0), + (8882, 8882, 'creatures/pets/pet_rock03_copperspots', 0), + (8883, 8883, 'creatures/pets/pet_rock03_purplespots', 0), + (8884, 8884, 'creatures/pets/pet_rock04_copperspots', 0), + (8885, 8885, 'creatures/pets/pet_rock04_purplespots', 0), + (8886, 8886, 'creatures/pets/pet_rock05_coppespots', 0), + (8887, 8887, 'creatures/pets/pet_rock05_purplespots', 0), + (8888, 8888, 'accessories/wearable_items/cloak/exp05/cloak_sq_01_beer_stained_01', 0), + (8889, 8889, 'creatures/monsters/mantaray_shadow', 0), + (8890, 8890, '_exp05/tool_users/lich_shadow_01', 0), + (8891, 8891, '_exp05/tool_users/lich_shadow_02', 0), + (8892, 8892, '_exp05/tool_users/lich_knight_ghost', 0), + (8893, 8893, '_exp05/tool_users/lich_shadow_03', 0), + (8894, 8894, '_exp05/tool_users/lich_shadow_04', 0), + (8895, 8895, 'accessories/npc_wearables/voidman_armor/voidman_chest_01', 0), + (8896, 8896, 'accessories/npc_wearables/voidman_armor/voidman_head_01', 0), + (8897, 8897, 'accessories/npc_wearables/voidman_armor/voidman_head_02', 0), + (8898, 8898, 'accessories/npc_wearables/voidman_armor/voidman_head_03', 0), + (8899, 8899, 'accessories/npc_wearables/voidman_armor/voidman_head_04', 0), + (8900, 8900, 'accessories/npc_wearables/voidman_armor/voidman_legs_01', 0), + (8901, 8901, 'accessories/npc_wearables/voidman_armor/voidman_legs_02', 0), + (8902, 8902, 'accessories/npc_wearables/voidman_armor/voidman_legs_03', 0), + (8903, 8903, 'accessories/npc_wearables/voidman_armor/voidman_legs_04', 0), + (8904, 8904, 'accessories/npc_wearables/voidman_armor/voidman_legs_06', 0), + (8905, 8905, 'accessories/npc_wearables/voidman_armor/voidman_shoulders_01', 0), + (8906, 8906, 'accessories/npc_wearables/voidman_armor/voidman_shoulders_02', 0), + (8907, 8907, 'accessories/npc_wearables/voidman_armor/voidman_shoulders_03', 0), + (8908, 8908, 'accessories/npc_wearables/voidman_armor/voidman_shoulders_04', 0), + (8909, 8909, 'accessories/npc_wearables/voidman_armor/runes/all_orbs', 0), + (8910, 8910, 'accessories/npc_wearables/voidman_armor/runes/all_runes', 0), + (8911, 8911, 'accessories/npc_wearables/voidman_armor/runes/orb01', 0), + (8912, 8912, 'accessories/npc_wearables/voidman_armor/runes/orb02', 0), + (8913, 8913, 'accessories/npc_wearables/voidman_armor/runes/orb03', 0), + (8914, 8914, 'accessories/npc_wearables/voidman_armor/runes/orb04', 0), + (8915, 8915, 'accessories/npc_wearables/voidman_armor/runes/orb05', 0), + (8916, 8916, 'accessories/npc_wearables/voidman_armor/runes/orb06', 0), + (8917, 8917, 'accessories/npc_wearables/voidman_armor/runes/rune01', 0), + (8918, 8918, 'accessories/npc_wearables/voidman_armor/runes/rune02', 0), + (8919, 8919, 'accessories/npc_wearables/voidman_armor/runes/rune03', 0), + (8920, 8920, 'accessories/npc_wearables/voidman_armor/runes/rune04', 0), + (8921, 8921, 'accessories/npc_wearables/voidman_armor/runes/rune05', 0), + (8922, 8922, 'accessories/npc_wearables/voidman_armor/runes/rune06', 0), + (8923, 8923, '_exp05/tool_users/voidman', 0), + (8924, 8924, '_exp05/tool_users/voidman_commoner_01', 0), + (8925, 8925, '_exp05/tool_users/voidman_commoner_02', 0), + (8926, 8926, '_exp05/tool_users/voidman_mage_01', 0), + (8927, 8927, '_exp05/tool_users/voidman_mage_02', 0), + (8928, 8928, '_exp05/tool_users/voidman_warrior_01', 0), + (8929, 8929, '_exp05/tool_users/voidman_warrior_02', 0), + (8930, 8930, 'accessories/wearable_items/profesion_hats/centurion_helm/shiny/centurion_helmet_shiny_head_no_crest', 0), + (8931, 8931, 'accessories/wearable_items/profesion_hats/centurion_helm/shiny/centurion_helmet_shiny_head_straight_crest', 0), + (8932, 8932, 'accessories/wearable_items/profesion_hats/centurion_helm/shiny/centurion_helmet_shiny_head_transverse_crest', 0), + (8933, 8933, 'accessories/wearable_items01/_exp00/profesion_hats/centurion_helm/shiny/centurion_helmet_shiny_head_no_crest', 0), + (8934, 8934, 'accessories/wearable_items01/_exp00/profesion_hats/centurion_helm/shiny/centurion_helmet_shiny_head_straight_crest', 0), + (8935, 8935, 'accessories/wearable_items/_exp08/dragon_armor/leather2_red/feet', 1096), + (8936, 8936, '_exp05/zones/objects/tradeskill_dungeons/shipyard/shipyard_dock_dpo', 0), + (8937, 8937, '_exp01/characters/tool_users/specter_shade', 0), + (8938, 8938, 'accessories/wearable_items01/_exp00/profesion_hats/centurion_helm/shiny/transverse_crest_shiny', 0), + (8939, 8939, 'accessories/wearable_items01/_exp00/profesion_hats/centurion_helm/shiny/centurion_helmet_shiny_head_transverse_crest', 0), + (8940, 8940, 'accessories/wearable_items/profesion_hats/centurion_helm/plain01/centurion_helmet_plain01_head_no_crest', 0), + (8941, 8941, 'accessories/wearable_items/profesion_hats/centurion_helm/plain01/centurion_helmet_plain01_head_straight_crest', 0), + (8942, 8942, 'accessories/wearable_items/profesion_hats/centurion_helm/plain01/centurion_helmet_plain01_head_transverse_crest', 0), + (8943, 8943, 'accessories/wearable_items/profesion_hats/centurion_helm/plain01/head', 0), + (8944, 8944, 'accessories/wearable_items/profesion_hats/centurion_helm/plain01/straight_crest_plain01', 0), + (8945, 8945, 'accessories/wearable_items/profesion_hats/centurion_helm/plain01/transverse_crest_plain01', 0), + (8946, 8946, 'accessories/wearable_items01/_exp00/profesion_hats/centurion_helm/plain_01/centurion_helmet_plain01_head_no_crest', 0), + (8947, 8947, 'accessories/wearable_items01/_exp00/profesion_hats/centurion_helm/plain_01/centurion_helmet_plain01_head_straight_crest', 0), + (8948, 8948, 'accessories/wearable_items01/_exp00/profesion_hats/centurion_helm/plain_01/centurion_helmet_plain01_head_transverse_crest', 0), + (8949, 8949, 'accessories/wearable_items01/_exp00/profesion_hats/centurion_helm/plain_01/head', 0), + (8950, 8950, 'accessories/wearable_items01/_exp00/profesion_hats/centurion_helm/plain_01/straight_crest_plain01', 0), + (8951, 8951, 'accessories/wearable_items01/_exp00/profesion_hats/centurion_helm/plain_01/transverse_crest_plain01', 0), + (8952, 8952, 'staticobjects/kitchen/spoon_wall_dpo', 0), + (8953, 8953, '_exp05/tool_users/ogre_male_pirate', 0), + (8954, 8954, '_exp05/zones/objects/tradeskill_dungeons/shipyard/shipyard_side_supports01_dpo', 0), + (8955, 8955, 'ec/pc/troll/troll_female_void', 0), + (8956, 8956, 'ec/pc/troll/troll_male_void', 0), + (8957, 8957, 'creatures/monsters/thoughtbleeder_shade', 0), + (8958, 8958, 'creatures/tu/illusionary_soldier_void', 0), + (8959, 8959, '_exp05/tool_users/grummus_01', 0), + (8960, 8960, 'accessories/wearable_items/profesion_hats/proffiddlewiz_cap/head', 0), + (8961, 8961, 'accessories/wearable_items01/_exp00/profesion_hats/miners_helm/head', 0), + (8962, 8962, 'accessories/wearable_items/profesion_hats/miners_helm/head', 0), + (8963, 8963, 'accessories/wieldable_items/weapons/exp05/shld_nurgg_shield', 0), + (8964, 8964, 'accessories/wieldable_items/weapons/exp05/exp05_1hs_kruzz_sword', 0), + (8965, 8965, 'accessories/wieldable_items/weapons/exp05/exp05_1hp_asharae_dagger', 0), + (8966, 8966, 'staticobjects/guildhall/gh_loot_cm_coffin_mistmoore01', 0), + (8967, 8967, 'staticobjects/guildhall/gh_loot_darathar_head_floor', 0), + (8968, 8968, 'accessories/wearable_items/_exp08/dragon_armor/leather2_red/forearms', 1096), + (8969, 8969, 'staticobjects/guildhall/gh_loot_gnoll_head_floor', 0), + (8970, 8970, 'accessories/wearable_items/_exp08/dragon_armor/leather2_red/hands', 1096), + (8971, 8971, 'staticobjects/guildhall/gh_loot_godking_anuk01', 0), + (8972, 8972, 'staticobjects/guildhall/gh_loot_tarinax_head_floor', 0), + (8973, 8973, 'accessories/wearable_items/_exp08/dragon_armor/leather2_red/head', 1096), + (8974, 8974, 'staticobjects/guildhall/gh_loot_venekor_head_floor', 0), + (8975, 8975, 'accessories/wearable_items/_exp08/dragon_armor/leather2_red/legs', 1096), + (8976, 8976, 'staticobjects/guildhall/gh_loot_vox_head_floor', 0), + (8977, 8977, 'accessories/wearable_items/_exp08/dragon_armor/leather2_red/legs_noskirt', 1096), + (8978, 8978, 'staticobjects/guildhall/fprt_obj_landmarkstatue01', 0), + (8979, 8979, 'staticobjects/guildhall/fprt_obj_squarestatue01', 0), + (8980, 8980, 'staticobjects/guildhall/qey_obj_landmarkstatue01', 0), + (8981, 8981, 'staticobjects/guildhall/qey_obj_squarestatue01', 0), + (8982, 8982, '_exp05/zones/objects/exp05_dun_mistmoore_repository/projector_complete', 0), + (8983, 8983, 'accessories/wieldable_items/weapons/exp05/exp05_1hc_eylee_drum', 0), + (8984, 8984, 'accessories/wieldable_items/weapons/exp05/exp05_1hs_claymore_bayle', 0), + (8985, 8985, 'accessories/wieldable_items/weapons/exp05/exp05_bow_illisia_bow', 0), + (8986, 8986, 'accessories/wieldable_items/shields/tower_shield/marrowguts_blocker/marrowguts_blocker', 0), + (8987, 8987, 'accessories/wearable_items/crown_of_tearis/head', 0), + (8988, 8988, 'accessories/wearable_items/crown_of_tearis/head_crown_unbroken', 0), + (8989, 8989, 'accessories/wearable_items01/_exp00/crown_of_tearis/head', 0), + (8990, 8990, 'accessories/wearable_items01/_exp00/crown_of_tearis/head_crown_unbroken', 0), + (8991, 8991, 'accessories/wieldable_items/weapons/exp05/exp05_1hc_katluk_censor', 0), + (8992, 8992, 'accessories/wearable_items/cloak/exp05/cloak_sq_01_roadyle_mage', 0), + (8993, 8993, '_exp05/tool_users/proto_myrdal_01', 0), + (8994, 8994, 'staticobjects/racks/winerack_assembly_dpo', 0), + (8995, 8995, 'accessories/wearable_items/profesion_hats/centurion_helm/fire_crest/centurion_helmet_shiny_head_straight_fire_crest', 0), + (8996, 8996, 'accessories/wearable_items/profesion_hats/centurion_helm/fire_crest/centurion_helmet_shiny_head_transverse_fire_crest', 0), + (8997, 8997, 'accessories/wearable_items/profesion_hats/centurion_helm/fire_crest/straight_fire_crest_shiny', 0), + (8998, 8998, 'accessories/wearable_items/profesion_hats/centurion_helm/fire_crest/transverse_fire_crest_shiny', 0), + (8999, 8999, 'accessories/wearable_items01/_exp00/profesion_hats/centurion_helm/fire_crest/centurion_helmet_shiny_head_straight_fire_crest', 0), + (9000, 9000, 'accessories/wearable_items01/_exp00/profesion_hats/centurion_helm/fire_crest/centurion_helmet_shiny_head_transverse_fire_crest', 0), + (9001, 9001, 'accessories/wearable_items01/_exp00/profesion_hats/centurion_helm/fire_crest/straight_fire_crest_shiny', 0), + (9002, 9002, 'accessories/wearable_items01/_exp00/profesion_hats/centurion_helm/fire_crest/transverse_fire_crest_shiny', 0), + (9003, 9003, 'staticobjects/dressers/dpo_kel_container_merch_acorn02', 0), + (9004, 9004, 'accessories/wieldable_items/shields/exp05/ethernaut_shield', 0), + (9005, 9005, 'creatures/tu/nightbloodwarrior_shade', 0), + (9006, 9006, '_exp05/zones/objects/exp05_dun_mistmoore_manor/man_portrait_big_goldblack', 0), + (9007, 9007, '_exp05/tool_users/lich_light_spirit', 0), + (9008, 9008, '_exp05/tool_users/lich_specter_02_negativelight', 0), + (9009, 9009, 'accessories/wearable_items/cloak/exp05/cloak_sq_01_ethernaut', 0), + (9010, 9010, 'creatures/mounts/carpet_ethernaut', 0), + (9011, 9011, '_exp05/zones/objects/exp05_dun_miragul_shard/miragul_obj_crystal', 0), + (9012, 9012, 'staticobjects/tapestry/dpo_tapestry_beer_stained_fan_faire_2008', 0), + (9013, 9013, 'accessories/npc_wearables/dire_bear_armor/direbear_armor01_chest', 0), + (9014, 9014, 'accessories/npc_wearables/dire_bear_armor/direbear_armor01_hands', 0), + (9015, 9015, 'accessories/npc_wearables/dire_bear_armor/direbear_armor01_head', 0), + (9016, 9016, 'accessories/npc_wearables/dire_bear_armor/direbear_armor01_legs', 0), + (9017, 9017, 'accessories/npc_wearables/dire_bear_armor/direbear_armor01_shoulders', 0), + (9018, 9018, 'accessories/npc_wearables/dire_bear_armor/direbear_armor02_chest', 0), + (9019, 9019, 'accessories/npc_wearables/dire_bear_armor/direbear_armor02_hands', 0), + (9020, 9020, 'accessories/npc_wearables/dire_bear_armor/direbear_armor02_head', 0), + (9021, 9021, 'accessories/npc_wearables/dire_bear_armor/direbear_armor02_legs', 0), + (9022, 9022, 'accessories/npc_wearables/dire_bear_armor/direbear_armor02_shoulders', 0), + (9023, 9023, 'accessories/npc_wearables/dire_bear_armor/direbear_saddle01_chest', 0), + (9024, 9024, 'creatures/mounts/horse_armor01/horse01_armor01_shadow', 0), + (9025, 9025, 'ec/npc/skeletonorc_shadow', 0), + (9026, 9026, 'ec/npc/skeletonorc_shadow_negativelight', 0), + (9027, 9027, 'creatures/tu/nightbloodwarrior_shade_negativelight', 0), + (9028, 9028, 'creatures/tu/skeleton_king_greater_shade_negativelight', 0), + (9029, 9029, 'creatures/tu/froglok_skeleton_redeyes', 0), + (9030, 9030, '_exp01/characters/monsters/harpy_raven', 0), + (9031, 9031, 'creatures/mounts/horse_saddle_bags_01/horse01_sadle_bags_01_appoloosa', 0), + (9032, 9032, 'creatures/mounts/horse_saddle_bags_01/horse01_sadle_bags_01_palomino', 0), + (9033, 9033, 'creatures/mounts/horse_saddle_bags_01/horse01_sadle_bags_01_solid', 0), + (9034, 9034, 'creatures/monsters/dervish_glass_tintable', 0), + (9035, 9035, 'ec/pc/human/human_female_ghost_loop', 0), + (9036, 9036, 'ec/pc/human/human_male_ghost_loop', 0), + (9037, 9037, 'creatures/monsters/gargoyle_shade', 0), + (9038, 9038, '_exp05/tool_users/gynok_moltor_shade', 0), + (9039, 9039, 'staticobjects/tcg/tcg_tempest_teacup', 0), + (9040, 9040, 'accessories/wearable_items/_exp05/guk_heavycloth/chest', 0), + (9041, 9041, 'accessories/wearable_items/_exp05/guk_heavycloth/feet', 0), + (9042, 9042, 'accessories/wearable_items/_exp05/guk_heavycloth/forearms', 0), + (9043, 9043, 'accessories/wearable_items/_exp05/guk_heavycloth/hands', 0), + (9044, 9044, 'accessories/wearable_items/_exp05/guk_heavycloth/legs', 0), + (9045, 9045, 'accessories/wearable_items/_exp05/guk_heavycloth/shoulders', 0), + (9046, 9046, 'accessories/wearable_items/_exp05/guk_leather/chest', 0), + (9047, 9047, 'accessories/wearable_items/_exp05/guk_leather/feet', 0), + (9048, 9048, 'accessories/wearable_items/_exp05/guk_leather/forearms', 0), + (9049, 9049, 'accessories/wearable_items/_exp05/guk_leather/hands', 0), + (9050, 9050, 'accessories/wearable_items/_exp05/guk_leather/legs', 0), + (9051, 9051, 'accessories/wearable_items/_exp05/guk_leather/legs_noskirt', 0), + (9052, 9052, 'accessories/wearable_items/_exp05/guk_leather/shoulders', 0), + (9053, 9053, 'accessories/wearable_items/_exp05/guk_leather/skirt', 0), + (9054, 9054, 'accessories/wearable_items/_exp05/guk_vanguard/chest', 0), + (9055, 9055, 'accessories/wearable_items/_exp05/guk_vanguard/feet', 0), + (9056, 9056, 'accessories/wearable_items/_exp05/guk_vanguard/forearms', 0), + (9057, 9057, 'accessories/wearable_items/_exp05/guk_vanguard/hands', 0), + (9058, 9058, 'accessories/wearable_items/_exp05/guk_vanguard/legs', 0), + (9059, 9059, 'accessories/wearable_items/_exp05/guk_vanguard/legs_noskirt', 0), + (9060, 9060, 'accessories/wearable_items/_exp05/guk_vanguard/right', 0), + (9061, 9061, 'accessories/wearable_items/_exp05/guk_vanguard/shoulders', 0), + (9062, 9062, 'accessories/wearable_items/_exp05/guk_vanguard/shoulders_nopauldrons', 0), + (9063, 9063, 'accessories/wearable_items/_exp05/guk_vanguard/skirt', 0), + (9064, 9064, '_exp05/tool_users/troll_female_pirate_skimpy', 0), + (9065, 9065, '_exp05/tool_users/troll_male_pirate_pegleg', 0), + (9066, 9066, 'staticobjects/guildhall/majdul_derv_orrey01', 0), + (9067, 9067, '_exp05/zones/objects/exp05_dun_befallen_forsaken/befallen_stone_bench_01', 0), + (9068, 9068, '_exp05/zones/objects/exp05_dun_befallen_forsaken/befallen_stone_bench_02', 0), + (9069, 9069, '_exp05/zones/objects/exp05_dun_befallen_forsaken/befallen_stone_table_01', 0), + (9070, 9070, '_exp05/zones/objects/exp05_dun_befallen_forsaken/befallen_stone_table_long_01', 0), + (9071, 9071, '_exp05/zones/objects/exp05_dun_befallen_forsaken/befallen_canopic_jar_01', 0), + (9072, 9072, '_exp05/zones/objects/exp05_dun_befallen_forsaken/fprt_hood_bar_counter_broken_01', 0), + (9073, 9073, '_exp05/zones/objects/exp05_dun_befallen_forsaken/fprt_hood_bar_counter_broken_02', 0), + (9074, 9074, '_exp05/zones/objects/exp05_dun_befallen_forsaken/fprt_hood_bench_broken_01', 0), + (9075, 9075, '_exp05/zones/objects/exp05_dun_befallen_forsaken/fprt_hood_chair_broken_01', 0), + (9076, 9076, '_exp05/zones/objects/exp05_dun_befallen_forsaken/fprt_hood_chair_broken_02', 0), + (9077, 9077, '_exp05/zones/objects/exp05_dun_befallen_forsaken/fprt_hood_chair_broken_03', 0), + (9078, 9078, '_exp05/zones/objects/exp05_dun_befallen_forsaken/fprt_hood_table_large_broken_01', 0), + (9079, 9079, '_exp05/zones/objects/exp05_dun_befallen_forsaken/fprt_hood_table_large_broken_02', 0), + (9080, 9080, '_exp05/zones/objects/exp05_dun_befallen_forsaken/fprt_hood_table_small_broken_01', 0), + (9081, 9081, '_exp05/zones/objects/exp05_dun_befallen_forsaken/fprt_hood_table_small_broken_02', 0), + (9082, 9082, '_exp05/zones/objects/exp05_dun_befallen_forsaken/befallen_stone_chair_01', 0), + (9083, 9083, '_exp05/zones/objects/exp05_dun_befallen_forsaken/befallen_clay_pot_tall_01', 0), + (9084, 9084, '_exp05/zones/objects/exp05_dun_befallen_forsaken/fallengate_swordrack_01', 0), + (9085, 9085, '_exp05/zones/objects/exp05_dun_befallen_forsaken/fallengate_swordrack_busted_01', 0), + (9086, 9086, 'accessories/wearable_items/cloak/exp05/cloak_sq_01_ethernaut_asharae', 0), + (9087, 9087, 'accessories/wearable_items/cloak/exp05/cloak_sq_01_ethernaut_illisia', 0), + (9088, 9088, 'accessories/wearable_items/_exp05/guk_magus/chest', 0), + (9089, 9089, 'accessories/wearable_items/_exp08/dragon_armor/leather2_red/shoulders', 1096), + (9090, 9090, 'accessories/wearable_items/_exp08/dragon_armor/leather2_red/shoulders_epic', 1096), + (9091, 9091, 'accessories/wearable_items/_exp05/guk_robe/chest', 0), + (9092, 9092, 'accessories/wearable_items/_exp05/guk_robe/pants', 0), + (9093, 9093, 'accessories/wearable_items/_exp05/guk_robe/skirt', 0), + (9094, 9094, 'staticobjects/guildhall/fprt_obj_landmarkstatue01_nobirds', 0), + (9095, 9095, 'staticobjects/guildhall/qey_obj_landmarkstatue01_nobirds', 0), + (9096, 9096, '_exp05/tool_users/gynok_moltor', 0), + (9097, 9097, '_exp05/tool_users/mummy_variant_mage_01', 0), + (9098, 9098, '_exp05/zones/objects/exp05_dun_guk_lower/banners/guk_lower_banner01_wall01', 0), + (9099, 9099, '_exp05/zones/objects/exp05_dun_guk_lower/banners/guk_lower_banner01_wall02', 0), + (9100, 9100, 'accessories/wieldable_items/weapons/hammer/rolling_pin/rolling_pin_01', 0), + (9101, 9101, 'accessories/wieldable_items/weapons/hammer/rolling_pin/rolling_pin_metal', 0), + (9102, 9102, '_exp05/tool_users/proto_drachnid_01', 0), + (9103, 9103, 'accessories/wearable_items/cloak/exp05/cloak_sq_01_ethernaut_bayle', 0), + (9104, 9104, 'staticobjects/tcg/tcg_ice_cream_cart_01', 0), + (9105, 9105, 'accessories/wieldable_items/misc/npc_torch_01', 0), + (9106, 9106, '_exp01/characters/monsters/naga_shade', 0), + (9107, 9107, '_exp05/zones/objects/exp05_dun_befallen_forsaken/befallen_statue_mounted_knight', 0), + (9108, 9108, '_exp05/zones/objects/exp05_dun_befallen_forsaken/befallen_statue_mounted_knight_headless', 0), + (9109, 9109, '_exp05/zones/objects/exp05_dun_befallen_forsaken/befallen_statue_knight', 0), + (9110, 9110, 'staticobjects/liveevent/dpo_temple_of_life', 0), + (9111, 9111, 'accessories/wieldable_items/weapons/exp05/2h_void_staff01_bubbles', 0), + (9112, 9112, 'creatures/mounts/unicorn/unicorn_saddle01', 0), + (9113, 9113, 'creatures/mounts/unicorn/unicorn_saddle02', 0), + (9114, 9114, 'creatures/mounts/unicorn/unicorn_saddle_bags_01', 0), + (9115, 9115, '_exp05/tool_users/boarfiend_armor_light', 0), + (9116, 9116, '_exp05/tool_users/boarfiend_armor_medium', 0), + (9117, 9117, '_exp05/tool_users/boarfiend_armor_heavy', 0), + (9118, 9118, '_exp05/zones/objects/exp05_dun_befallen_forsaken/befallen_hourglass', 0), + (9119, 9119, 'accessories/wearable_items/_exp05/guk_heavycloth/guk_pauldron01_left', 0), + (9120, 9120, 'accessories/wearable_items/_exp05/guk_heavycloth/guk_pauldron01_right', 0), + (9121, 9121, 'accessories/wearable_items/_exp05/guk_heavycloth/guk_pauldron02_left', 0), + (9122, 9122, 'accessories/wearable_items/_exp05/guk_heavycloth/guk_pauldron02_right', 0), + (9123, 9123, 'accessories/wearable_items/_exp05/guk_heavycloth/guk_wrist01_left', 0), + (9124, 9124, 'accessories/wearable_items/_exp05/guk_heavycloth/guk_wrist01_right', 0), + (9125, 9125, 'accessories/wearable_items/_exp05/guk_heavycloth/guk_wrist02_left', 0), + (9126, 9126, 'accessories/wearable_items/_exp05/guk_heavycloth/guk_wrist02_right', 0), + (9127, 9127, 'accessories/wearable_items/_exp05/guk_heavycloth/hands_wrist01_both', 0), + (9128, 9128, 'accessories/wearable_items/_exp05/guk_heavycloth/hands_wrist02_both', 0), + (9129, 9129, 'accessories/wearable_items/_exp05/guk_heavycloth/shoulders_pauldron01_both', 0), + (9130, 9130, 'accessories/wearable_items/_exp05/guk_heavycloth/shoulders_pauldron02_both', 0), + (9131, 9131, 'accessories/wearable_items/_exp05/guk_helms/guk_hat01', 0), + (9132, 9132, 'accessories/wearable_items/_exp05/guk_helms/guk_hat02', 0), + (9133, 9133, 'accessories/wearable_items/_exp05/guk_leather/hands_wrist01_both', 0), + (9134, 9134, 'accessories/wearable_items/_exp05/guk_leather/hands_wrist02_both', 0), + (9135, 9135, 'accessories/wearable_items/_exp05/guk_leather/shoulders_pauldron01_both', 0), + (9136, 9136, 'accessories/wearable_items/_exp05/guk_leather/shoulders_pauldron02_both', 0), + (9137, 9137, 'accessories/wearable_items/_exp05/guk_magus/chest_pauldrons01_both', 0), + (9138, 9138, 'accessories/wearable_items/_exp05/guk_magus/chest_pauldrons02_both', 0), + (9139, 9139, 'accessories/wearable_items/_exp05/guk_robe/chest_pauldrons01_both', 0), + (9140, 9140, 'accessories/wearable_items/_exp05/guk_robe/chest_pauldrons02_both', 0), + (9141, 9141, 'accessories/wearable_items/_exp05/guk_vanguard/hands_wrist01_both', 0), + (9142, 9142, 'accessories/wearable_items/_exp05/guk_vanguard/hands_wrist02_both', 0), + (9143, 9143, 'accessories/wearable_items/_exp05/guk_vanguard/shoulders_pauldrons01_both', 0), + (9144, 9144, 'accessories/wearable_items/_exp05/guk_vanguard/shoulders_pauldrons02_both', 0), + (9145, 9145, 'creatures/tu/lavastatue_boss', 0), + (9146, 9146, 'accessories/wieldable_items/shields/tower_shield/turtle_shield/turtle_shield01', 0), + (9147, 9147, 'accessories/wearable_items/_exp05/void_heavycloth/chest', 0), + (9148, 9148, 'accessories/wearable_items/_exp05/void_heavycloth/feet', 0), + (9149, 9149, 'accessories/wearable_items/_exp05/void_heavycloth/forearms', 0), + (9150, 9150, 'accessories/wearable_items/_exp05/void_heavycloth/hands', 0), + (9151, 9151, 'accessories/wearable_items/_exp05/void_heavycloth/head', 0), + (9152, 9152, 'accessories/wearable_items/_exp05/void_heavycloth/legs', 0), + (9153, 9153, 'accessories/wearable_items/_exp05/void_heavycloth/shoulders', 0), + (9154, 9154, 'accessories/wearable_items/_exp05/void_leather/chest', 0), + (9155, 9155, 'accessories/wearable_items/_exp05/void_leather/feet', 0), + (9156, 9156, 'accessories/wearable_items/_exp05/void_leather/forearms', 0), + (9157, 9157, 'accessories/wearable_items/_exp05/void_leather/hands', 0), + (9158, 9158, 'accessories/wearable_items/_exp05/void_leather/head', 0), + (9159, 9159, 'accessories/wearable_items/_exp05/void_leather/legs', 0), + (9160, 9160, 'accessories/wearable_items/_exp05/void_leather/legs_noskirt', 0), + (9161, 9161, 'accessories/wearable_items/_exp05/void_leather/shoulders', 0), + (9162, 9162, 'accessories/wearable_items/_exp05/void_leather/skirt', 0), + (9163, 9163, 'accessories/wearable_items/_exp05/void_magus/chest', 0), + (9164, 9164, 'accessories/wearable_items/_exp08/dragon_armor/leather2_shadow/skirt', 1096), + (9165, 9165, 'accessories/wearable_items/_exp08/dragon_armor/leather2_shadow/chest', 1096), + (9166, 9166, 'accessories/wearable_items/_exp05/void_robe/chest', 0), + (9167, 9167, 'accessories/wearable_items/_exp05/void_robe/hood', 0), + (9168, 9168, 'accessories/wearable_items/_exp05/void_robe/pants', 0), + (9169, 9169, 'accessories/wearable_items/_exp05/void_robe/skirt', 0), + (9170, 9170, 'accessories/wearable_items/_exp05/void_vanguard/chest', 0), + (9171, 9171, 'accessories/wearable_items/_exp05/void_vanguard/feet', 0), + (9172, 9172, 'accessories/wearable_items/_exp05/void_vanguard/forearms', 0), + (9173, 9173, 'accessories/wearable_items/_exp05/void_vanguard/hands', 0), + (9174, 9174, 'accessories/wearable_items/_exp05/void_vanguard/head', 0), + (9175, 9175, 'accessories/wearable_items/_exp05/void_vanguard/legs', 0), + (9176, 9176, 'accessories/wearable_items/_exp05/void_vanguard/legs_noskirt', 0), + (9177, 9177, 'accessories/wearable_items/_exp05/void_vanguard/right', 0), + (9178, 9178, 'accessories/wearable_items/_exp05/void_vanguard/shoulders', 0), + (9179, 9179, 'accessories/wearable_items/_exp05/void_vanguard/shoulders_nopauldrons', 0), + (9180, 9180, 'accessories/wearable_items/_exp05/void_vanguard/skirt', 0), + (9181, 9181, 'accessories/wieldable_items/weapons/staff/staff_of_theer/staff_of_theer', 0), + (9182, 9182, '_exp05/zones/objects/exp05_dun_mistmoore_manor/female_suit_of_armor', 0), + (9183, 9183, '_exp05/zones/objects/exp05_dun_void_anchor/void_lamp01', 0), + (9184, 9184, '_exp05/tool_users/mummy_variant_warrior_01', 0), + (9185, 9185, 'accessories/npc_wearables/voidman_armor/voidman_legs_05', 0), + (9186, 9186, 'accessories/wearable_items/cloak/exp05/cloak_sq_01_antonia', 0), + (9187, 9187, 'accessories/wearable_items/cloak/exp05/cloak_sq_01_lucan', 0), + (9188, 9188, '_exp05/zones/objects/exp05_dun_befallen_forsaken/bef_shield_statue01', 0), + (9189, 9189, '_exp05/zones/objects/exp05_dun_befallen_forsaken/bef_statue_warrior_shield01', 0), + (9190, 9190, '_exp05/zones/objects/exp05_dun_befallen_forsaken/bef_statue_warrior01', 0), + (9191, 9191, '_exp05/tool_users/boarfiend_chieftan', 0), + (9192, 9192, '_exp05/tool_users/trollzombie_male', 0), + (9193, 9193, 'accessories/wearable_items/cloak/nights_of_the_dead/notd_fire_cloak', 0), + (9194, 9194, 'accessories/wearable_items/cloak/nights_of_the_dead/notd_night_sky_cloak', 0), + (9195, 9195, 'accessories/wearable_items/cloak/nights_of_the_dead/notd_web_spider_cloak', 0), + (9196, 9196, '_exp05/tool_users/mummy_variant_toturer_01', 0), + (9197, 9197, '_exp05/tool_users/mummy_variant_toturer_full_armor', 0), + (9198, 9198, '_exp05/tool_users/mummy_variant_toturer_no_armor', 0), + (9199, 9199, 'accessories/wearable_items/_exp08/dragon_armor/leather2_shadow/feet', 1096), + (9200, 9200, 'accessories/wearable_items/_exp08/dragon_armor/leather2_shadow/forearms', 1096), + (9201, 9201, 'accessories/wearable_items/_exp05/guk_heavycloth/shoulders_turtle_both', 0), + (9202, 9202, 'accessories/wearable_items/_exp05/guk_magus/arms', 0), + (9203, 9203, 'accessories/wearable_items/_exp05/guk_magus/skirt', 0), + (9204, 9204, 'accessories/wearable_items/_exp05/guk_robe/hood', 0), + (9205, 9205, 'accessories/wearable_items/_exp05/void_magus/arms', 0), + (9206, 9206, 'accessories/wearable_items/_exp05/void_magus/skirt', 0), + (9207, 9207, 'creatures/tu/livingstatue_blackmarble', 0), + (9208, 9208, 'creatures/tu/livingstatue_whitemarble', 0), + (9209, 9209, 'staticobjects/boats/shipwreck', 0), + (9210, 9210, 'accessories/wearable_items/cloak/frostfell/frostfell_cloak_gigglegibber', 0), + (9211, 9211, 'staticobjects/liveevent/halloween/halloween_alchemist_flasks', 0), + (9212, 9212, 'staticobjects/liveevent/halloween/halloween_butcher_block', 0), + (9213, 9213, 'staticobjects/liveevent/halloween/halloween_candelabra_skel', 0), + (9214, 9214, 'staticobjects/liveevent/halloween/halloween_cauldron', 0), + (9215, 9215, 'staticobjects/liveevent/halloween/halloween_iron_maiden', 0), + (9216, 9216, 'staticobjects/liveevent/halloween/halloween_orangegreen_pillows', 0), + (9217, 9217, 'staticobjects/liveevent/halloween/halloween_orb_chandelier', 0), + (9218, 9218, 'staticobjects/liveevent/halloween/halloween_shackled_skeleton01', 0), + (9219, 9219, 'staticobjects/liveevent/halloween/halloween_shackled_skeleton02', 0), + (9220, 9220, 'staticobjects/liveevent/halloween/halloween_shackles', 0), + (9221, 9221, 'staticobjects/liveevent/halloween/halloween_skeleton_cage', 0), + (9222, 9222, 'staticobjects/liveevent/halloween/halloween_skull_chandelier', 0), + (9223, 9223, 'staticobjects/liveevent/halloween/halloween_skull_drapery', 0), + (9224, 9224, 'staticobjects/liveevent/halloween/halloween_wall_candle', 0), + (9225, 9225, 'accessories/wearable_items/cloak/frostfell/frostfell_cloak_giftwrap_01', 0), + (9226, 9226, 'accessories/wieldable_items/weapons/exp05/claymore_sword001_ornate_epic', 0), + (9227, 9227, '_exp05/tool_users/mummy_variant_priest_01', 0), + (9228, 9228, 'accessories/wearable_items/cloak/frostfell/frostfell_cloak_giftwrap_02', 0), + (9229, 9229, 'staticobjects/liveevent/halloween/halloween_spider_eggs', 0), + (9230, 9230, '_exp05/tool_users/trollzombie_female', 0), + (9231, 9231, '_exp05/tool_users/mummy_variant_captain', 0), + (9232, 9232, '_exp05/tool_users/mummy_variant_brawler', 0), + (9233, 9233, 'accessories/wearable_items/cloak/frostfell/frostfell_cloak_snowflakes', 0), + (9234, 9234, 'staticobjects/kitchen/floor_plate_of_rats', 0), + (9235, 9235, 'staticobjects/rubble/boarfiend_garbage', 0), + (9236, 9236, 'accessories/wearable_items/cloak/frostfell/frostfell_cloak_candy_canes', 0), + (9237, 9237, 'staticobjects/guildhall/druidring_drystone', 0), + (9238, 9238, 'accessories/wieldable_items/weapons/exp05/exp05_1hc_thex_mallet', 0), + (9239, 9239, 'staticobjects/liveevent/frostfell/dpo_christmas_snowtree_small01_houseitem', 0), + (9240, 9240, 'accessories/wieldable_items/weapons/exp05/exp05_2hc_thex_mallet', 0), + (9241, 9241, 'accessories/wearable_items/cloak/exp05/cloak_sq_01_akella_01', 0), + (9242, 9242, 'accessories/wieldable_items/weapons/exp05/exp05_1hs_greenmist_katana', 0), + (9243, 9243, 'staticobjects/liveevent/frostfell/dpo_christmas_evil_tree_small01_houseitem', 0), + (9244, 9244, 'accessories/wieldable_items/weapons/exp05/1hc_battlehammer_shadow', 0), + (9245, 9245, 'accessories/wieldable_items/weapons/exp05/1hc_human_skull_scepter_shadow', 0), + (9246, 9246, 'accessories/wieldable_items/weapons/exp05/1hp_dual_bladed_stiletto_shadow', 0), + (9247, 9247, 'accessories/wieldable_items/weapons/exp05/1hs_lamentation_shadow', 0), + (9248, 9248, 'accessories/wieldable_items/weapons/exp05/1hs_ornate_elven_rapier_shadow', 0), + (9249, 9249, 'accessories/wieldable_items/weapons/exp05/battleaxe001_shadow', 0), + (9250, 9250, 'accessories/wieldable_items/weapons/exp05/blade_of_fist_shadow', 0), + (9251, 9251, 'accessories/wieldable_items/weapons/exp05/bow_giant_wooden_bow_shadow', 0), + (9252, 9252, 'accessories/wieldable_items/weapons/exp05/claymore_sword001_shadow', 0), + (9253, 9253, 'accessories/wieldable_items/weapons/exp05/cobra_staff_shadow', 0), + (9254, 9254, 'accessories/wieldable_items/weapons/exp05/crab_sceptre_shadow', 0), + (9255, 9255, 'accessories/wieldable_items/weapons/exp05/deadman_call_shadow', 0), + (9256, 9256, 'accessories/wieldable_items/weapons/exp05/dragon_flame_shadow', 0), + (9257, 9257, 'accessories/wieldable_items/weapons/exp05/dragon_katana_shadow', 0), + (9258, 9258, 'accessories/wieldable_items/weapons/exp05/holy_symbol001_shadow', 0), + (9259, 9259, 'accessories/wieldable_items/weapons/exp05/orb001_shadow', 0), + (9260, 9260, 'accessories/wieldable_items/weapons/exp05/silver_moon_shadow', 0), + (9261, 9261, 'accessories/wieldable_items/weapons/exp05/staff_of_bloody_shadow', 0), + (9262, 9262, 'accessories/wieldable_items/weapons/exp05/sword_of_nova_shadow', 0), + (9263, 9263, 'accessories/wieldable_items/weapons/exp05/wannish_dream_shadow', 0), + (9264, 9264, 'accessories/wieldable_items/weapons/exp05/waraxe002_shadow', 0), + (9265, 9265, 'accessories/wieldable_items/weapons/exp05/wizards_dagger001_shadow', 0), + (9266, 9266, '_exp05/tool_users/humanzombie_male', 0), + (9267, 9267, '_exp05/zones/objects/exp05_rgn_innothule/fungusman_husk_01', 0), + (9268, 9268, '_exp05/zones/objects/exp05_rgn_innothule/fungusman_husk_02', 0), + (9269, 9269, '_exp05/zones/objects/exp05_rgn_innothule/fungusman_husk_03', 0), + (9270, 9270, '_exp05/zones/objects/exp05_rgn_innothule/fungusman_husk_04', 0), + (9271, 9271, '_exp05/zones/objects/exp05_rgn_innothule/fungusman_husk_05', 0), + (9272, 9272, 'accessories/wearable_items/leather/plain/plain/chest', 0), + (9273, 9273, 'accessories/wearable_items/leather/plain/plain/feet', 0), + (9274, 9274, 'accessories/wearable_items/leather/plain/plain/forearms', 0), + (9275, 9275, 'accessories/wearable_items/leather/plain/plain/hands', 0), + (9276, 9276, 'accessories/wearable_items/leather/plain/plain/head', 0), + (9277, 9277, 'accessories/wearable_items/leather/plain/plain/legs', 0), + (9278, 9278, 'accessories/wearable_items/leather/plain/plain/legs_noskirt', 0), + (9279, 9279, 'accessories/wearable_items/leather/plain/plain/shoulders', 0), + (9280, 9280, 'accessories/wearable_items/leather/plain/plain/skirt', 0), + (9281, 9281, 'accessories/wearable_items/leather/plain/plain_studded/chest', 0), + (9282, 9282, 'accessories/wearable_items/leather/plain/plain_studded/feet', 0), + (9283, 9283, 'accessories/wearable_items/leather/plain/plain_studded/forearms', 0), + (9284, 9284, 'accessories/wearable_items/leather/plain/plain_studded/hands', 0), + (9285, 9285, 'accessories/wearable_items/leather/plain/plain_studded/head', 0), + (9286, 9286, 'accessories/wearable_items/leather/plain/plain_studded/legs', 0), + (9287, 9287, 'accessories/wearable_items/leather/plain/plain_studded/pauldron01_leather_heavy_right', 0), + (9288, 9288, 'accessories/wearable_items/leather/plain/plain_studded/pauldron01_leather_heavy_left', 0), + (9289, 9289, 'accessories/wearable_items/leather/plain/plain_studded/legs_noskirt', 0), + (9290, 9290, 'accessories/wearable_items/leather/plain/plain_studded/shoulders', 0), + (9291, 9291, 'accessories/wearable_items/leather/plain/plain_studded/shoulders_pauldron01_both', 0), + (9292, 9292, 'accessories/wearable_items/leather/plain/plain_studded/skirt', 0), + (9293, 9293, 'accessories/wearable_items/leather/plain/unseen_hand/chest', 0), + (9294, 9294, 'accessories/wearable_items/leather/plain/unseen_hand/feet', 0), + (9295, 9295, 'accessories/wearable_items/leather/plain/unseen_hand/forearms', 0), + (9296, 9296, 'accessories/wearable_items/leather/plain/unseen_hand/head', 0), + (9297, 9297, 'accessories/wearable_items/leather/plain/unseen_hand/hands', 0), + (9298, 9298, 'accessories/wearable_items/leather/plain/unseen_hand/legs', 0), + (9299, 9299, 'accessories/wearable_items/leather/plain/unseen_hand/legs_noskirt', 0), + (9300, 9300, 'accessories/wearable_items/leather/plain/unseen_hand/shoulders', 0), + (9301, 9301, 'accessories/wearable_items/leather/plain/unseen_hand/skirt', 0), + (9302, 9302, 'accessories/wieldable_items/misc/ice_cream_cone01', 0), + (9303, 9303, 'accessories/wearable_items/profesion_hats/ice_cream_hat/ice_cream_hat01', 0), + (9304, 9304, 'accessories/wearable_items/christmas_hats/santa_hat_03/head', 0), + (9305, 9305, 'accessories/wearable_items01/_exp00/christmas_hats/santa_hat_03/head', 0), + (9306, 9306, 'accessories/wearable_items/_exp05/flowing_black_robe/chest', 0), + (9307, 9307, 'accessories/wearable_items/_exp05/flowing_black_robe/hood', 0), + (9308, 9308, 'accessories/wearable_items/_exp05/flowing_black_robe/pants', 0), + (9309, 9309, 'accessories/wearable_items/_exp05/flowing_black_robe/skirt', 0), + (9310, 9310, 'accessories/wearable_items/cloak/exp05/cloak_sq_01_flowing_black_cloak', 0), + (9311, 9311, 'creatures/monsters/flyingsnake_ghost', 0), + (9312, 9312, '_exp03/characters/monsters/bone_golem_spirit', 0), + (9313, 9313, '_exp04/monsters/xygoz_spirit', 0), + (9314, 9314, 'staticobjects/plants/dpo_gf_lamppost_flower01', 0), + (9315, 9315, 'staticobjects/plants/dpo_kel_fae_arbor', 0), + (9316, 9316, 'staticobjects/light_sources_player_housing_only/dpo_wallflower_pink', 0), + (9317, 9317, 'staticobjects/light_sources_player_housing_only/dpo_wallflower_yellow', 0), + (9318, 9318, 'accessories/wieldable_items/weapons/exp05/1h_void_sword02', 0), + (9319, 9319, 'accessories/wieldable_items/weapons/exp05/1hc_void_axe02', 0), + (9320, 9320, 'accessories/wieldable_items/weapons/exp05/1hc_void_hammer02', 0), + (9321, 9321, 'accessories/wieldable_items/weapons/exp05/2h_void_staff02', 0), + (9322, 9322, 'accessories/wieldable_items/weapons/exp05/void_bow02', 0), + (9323, 9323, '_exp05/tool_users/trollzombie_female_ec', 0), + (9324, 9324, 'accessories/wieldable_items/shields/peppermint_shield/peppermint_shield', 0), + (9325, 9325, '_exp01/zones/regions/sinking_sands/ss_objects/ss_landing_dock/dpo_ss_landing_dock_phase1', 0), + (9326, 9326, 'staticobjects/mirrors/vampire_mirror', 0), + (9327, 9327, '_exp05/tool_users/trollzombie_male_ec', 0), + (9328, 9328, 'staticobjects/liveevent/community/dpo_assembly_campfire', 0), + (9329, 9329, 'staticobjects/liveevent/community/dpo_assembly_curved_stone_bar_01', 0), + (9330, 9330, 'staticobjects/liveevent/community/dpo_assembly_curved_wooden_bar_01', 0), + (9331, 9331, 'staticobjects/liveevent/community/dpo_assembly_evil_lamppost_with_pillows', 0), + (9332, 9332, 'staticobjects/liveevent/community/dpo_assembly_evil_military_bench_and_wine', 0), + (9333, 9333, 'staticobjects/liveevent/community/dpo_assembly_evil_purple_tent_01', 0), + (9334, 9334, 'staticobjects/liveevent/community/dpo_assembly_evil_red_tent_01', 0), + (9335, 9335, 'staticobjects/liveevent/community/dpo_assembly_evil_stone_bench_and_lamps', 0), + (9336, 9336, 'staticobjects/liveevent/community/dpo_assembly_good_blue_tent_01', 0), + (9337, 9337, 'staticobjects/liveevent/community/dpo_assembly_good_maroon_tent_01', 0), + (9338, 9338, 'staticobjects/liveevent/community/dpo_assembly_good_wooden_bench_and_lamps', 0), + (9339, 9339, '_exp05/tool_users/humanzombie_male_ec', 0), + (9340, 9340, '_exp05/tool_users/humanzombie_female', 0), + (9341, 9341, '_exp05/tool_users/humanzombie_female_ec', 0), + (9342, 9342, 'accessories/wearable_items/_exp05/shinny_metallic_robe/chest', 0), + (9343, 9343, 'accessories/wearable_items/_exp05/shinny_metallic_robe/hood', 0), + (9344, 9344, 'accessories/wearable_items/_exp05/shinny_metallic_robe/pants', 0), + (9345, 9345, 'accessories/wearable_items/_exp05/shinny_metallic_robe/skirt', 0), + (9346, 9346, 'accessories/wearable_items/cloak/exp05/cloak_sq_01_shinny_metallic_cloak', 0), + (9347, 9347, 'staticobjects/brazier/dpo_tablebrazier001_lit', 0), + (9348, 9348, 'staticobjects/brazier/dpo_tablebrazier001_unlit', 0), + (9349, 9349, 'staticobjects/interiors/scenes/objects_race/dp_objects/tcg_items/tcg_painting18_nurgg', 0), + (9350, 9350, 'staticobjects/interiors/scenes/objects_race/dp_objects/tcg_items/tcg_painting19_illisia', 0), + (9351, 9351, 'staticobjects/interiors/scenes/objects_race/dp_objects/tcg_items/tcg_painting20_bayle', 0), + (9352, 9352, 'staticobjects/interiors/scenes/objects_race/dp_objects/tcg_items/tcg_painting21_asharae', 0), + (9353, 9353, 'staticobjects/interiors/scenes/objects_race/dp_objects/tcg_items/tcg_painting22_detonation', 0), + (9354, 9354, 'staticobjects/interiors/scenes/objects_race/dp_objects/tcg_items/tcg_painting23_flight', 0), + (9355, 9355, 'staticobjects/interiors/scenes/objects_race/dp_objects/tcg_items/tcg_painting24_stamina', 0), + (9356, 9356, 'staticobjects/interiors/scenes/objects_race/dp_objects/tcg_items/tcg_painting25_mermaid', 0), + (9357, 9357, 'staticobjects/interiors/scenes/objects_race/dp_objects/tcg_items/tcg_painting26_kaltuk', 0), + (9358, 9358, 'staticobjects/interiors/scenes/objects_race/dp_objects/tcg_items/tcg_painting27_chestplate', 0), + (9359, 9359, 'staticobjects/interiors/scenes/objects_race/dp_objects/tcg_items/tcg_painting28_fetid', 0), + (9360, 9360, 'staticobjects/interiors/scenes/objects_race/dp_objects/tcg_items/tcg_painting29_lightning', 0), + (9361, 9361, 'staticobjects/interiors/scenes/objects_race/dp_objects/tcg_items/tcg_tapestry01_design_asharae', 0), + (9362, 9362, 'staticobjects/interiors/scenes/objects_race/dp_objects/tcg_items/tcg_tapestry01_design_bayle', 0), + (9363, 9363, 'staticobjects/interiors/scenes/objects_race/dp_objects/tcg_items/tcg_tapestry01_design_illisia', 0), + (9364, 9364, 'accessories/wearable_items/cloak/exp05/cloak_sq_01_harvester', 0), + (9365, 9365, 'accessories/wieldable_items/weapons/exp05/exp04_orb_of_tishan', 0), + (9366, 9366, 'accessories/wearable_items/cloak/exp05/cloak_sq_01_white_dragonscale_cloak', 0), + (9367, 9367, 'accessories/wieldable_items/weapons/exp05/whip001_rusty_shadow', 0), + (9368, 9368, '_exp05/zones/objects/exp05_dun_guk_stronghold/dun_guk_stronghold_statues_statue01', 0), + (9369, 9369, '_exp05/zones/objects/tradeskill_dungeons/shipyard/shipyard_boat_stage1_dpo', 0), + (9370, 9370, '_exp05/zones/objects/tradeskill_dungeons/shipyard/shipyard_boat_stage2_dpo', 0), + (9371, 9371, '_exp05/zones/objects/tradeskill_dungeons/shipyard/shipyard_boat_stage3_dpo', 0), + (9372, 9372, '_exp05/zones/objects/tradeskill_dungeons/shipyard/shipyard_boat_complete_dpo', 0), + (9373, 9373, '_exp01/zones/regions/sinking_sands/ss_objects/ss_landing_dock/ss_landing_dock_complete', 0), + (9374, 9374, 'accessories/wearable_items/_exp03/mistmoore_vanguard_01_golden/chest', 0), + (9375, 9375, 'accessories/wearable_items/_exp03/mistmoore_vanguard_01_golden/feet', 0), + (9376, 9376, 'accessories/wearable_items/_exp03/mistmoore_vanguard_01_golden/forearms', 0), + (9377, 9377, 'accessories/wearable_items/_exp03/mistmoore_vanguard_01_golden/hands', 0), + (9378, 9378, 'accessories/wearable_items/_exp03/mistmoore_vanguard_01_golden/head', 0), + (9379, 9379, 'accessories/wearable_items/_exp03/mistmoore_vanguard_01_golden/legs', 0), + (9380, 9380, 'accessories/wearable_items/_exp03/mistmoore_vanguard_01_golden/legs_noskirt', 0), + (9381, 9381, 'accessories/wearable_items/_exp03/mistmoore_vanguard_01_golden/pauldron02_vanguard_ridged_left', 0), + (9382, 9382, 'accessories/wearable_items/_exp03/mistmoore_vanguard_01_golden/pauldron02_vanguard_ridged_right', 0), + (9383, 9383, 'accessories/wearable_items/_exp03/mistmoore_vanguard_01_golden/pauldron04_vanguard_medium_left', 0), + (9384, 9384, 'accessories/wearable_items/_exp03/mistmoore_vanguard_01_golden/pauldron04_vanguard_medium_right', 0), + (9385, 9385, 'accessories/wearable_items/_exp03/mistmoore_vanguard_01_golden/right', 0), + (9386, 9386, 'accessories/wearable_items/_exp03/mistmoore_vanguard_01_golden/shoulders', 0), + (9387, 9387, 'accessories/wearable_items/_exp03/mistmoore_vanguard_01_golden/shoulders_nopauldrons', 0), + (9388, 9388, 'accessories/wearable_items/_exp03/mistmoore_vanguard_01_golden/shoulders_pauldron02_both', 0), + (9389, 9389, 'accessories/wearable_items/_exp03/mistmoore_vanguard_01_golden/shoulders_pauldron02_left', 0), + (9390, 9390, 'accessories/wearable_items/_exp03/mistmoore_vanguard_01_golden/shoulders_pauldron02_right', 0), + (9391, 9391, 'accessories/wearable_items/_exp03/mistmoore_vanguard_01_golden/shoulders_pauldron04_both', 0), + (9392, 9392, 'accessories/wearable_items/_exp03/mistmoore_vanguard_01_golden/skirt', 0), + (9393, 9393, 'accessories/wearable_items/cloak/exp05/cloak_sq_01_twiddy_cloudskipper_cloak', 0), + (9394, 9394, 'ec/pc/troll/troll_male_golden', 0), + (9395, 9395, 'creatures/monsters/gargoyle_guk', 0), + (9396, 9396, 'staticobjects/halloween/dpo_halloween_hanging_bat_ghost_swinging', 0), + (9397, 9397, 'ec/npc/gigglegibber_goblin', 0), + (9398, 9398, 'staticobjects/liveevent/dpo_anashti_sul_staff_houseitem', 0), + (9399, 9399, 'staticobjects/liveevent/dpo_anashti_sul_staff_undead_houseitem', 0), + (9400, 9400, 'staticobjects/tapestry/dpo_tapestry_design_ethernaut', 0), + (9401, 9401, '_exp05/tool_users/troll_strategist', 0), + (9402, 9402, '_exp05/tool_users/troll_guard_captain', 0), + (9403, 9403, 'creatures/tu/froglok_skeleton_armor', 0), + (9404, 9404, 'creatures/tu/froglok_skeleton_chain', 0), + (9405, 9405, 'creatures/tu/froglok_skeleton_guard', 0), + (9406, 9406, 'creatures/tu/froglok_zombie_chain', 0), + (9407, 9407, 'staticobjects/liveevent/guides/dpo_guide_lizard_cage', 0), + (9408, 9408, 'staticobjects/liveevent/guides/dpo_guide_lizard_cage_reward', 0), + (9409, 9409, 'staticobjects/deity_altars/altar_anashtisul_basic', 0), + (9410, 9410, 'staticobjects/deity_altars/altar_anashtisul_crafted', 0), + (9411, 9411, 'staticobjects/deity_altars/altar_anashtisul_exceptional', 0), + (9412, 9412, 'staticobjects/deity_altars/altar_rodcetnife_basic', 0), + (9413, 9413, 'staticobjects/deity_altars/altar_rodcetnife_crafted', 0), + (9414, 9414, 'staticobjects/deity_altars/altar_rodcetnife_exceptional', 0), + (9415, 9415, 'accessories/wearable_items/cloak/exp05/cloak_sq_01_magmatic_bronze_splinted', 0), + (9416, 9416, 'accessories/wieldable_items/weapons/exp05/exp05_2hs_bone_blade_claymore', 0), + (9417, 9417, 'accessories/wieldable_items/weapons/exp05/exp05_2hs_bone_blade_claymore_epic', 0), + (9418, 9418, 'staticobjects/books/floor_book_any_thex01', 0), + (9419, 9419, 'staticobjects/doors/dpo_comland_gate', 0), + (9420, 9420, 'staticobjects/doors/dpo_comland_wallsection', 0), + (9421, 9421, '_exp05/monsters/iksar_greenmist_boss', 0), + (9422, 9422, '_exp05/tool_users/troll_guard_ykesha', 0), + (9423, 9423, 'accessories/wieldable_items/weapons/exp05/exp05_2hc_zombie_shovel', 0), + (9424, 9424, 'creatures/tu/froglok_undead_executioner', 0), + (9425, 9425, 'creatures/pets/baby_dragon_ice', 0), + (9426, 9426, 'accessories/wieldable_items/weapons/exp05/exp05_1hs_froglok_executioner', 0), + (9427, 9427, 'accessories/wearable_items/cloak/exp05/cloak_pirate_01', 0), + (9428, 9428, 'accessories/wearable_items/cloak/exp05/cloak_icecream_01', 0), + (9429, 9429, 'accessories/wieldable_items/weapons/exp05/shld_guk_tower_shield', 0), + (9430, 9430, 'staticobjects/pictures/dpo_man_portrait_big_goldred', 0), + (9431, 9431, 'accessories/wieldable_items/weapons/exp05/shld_shield_01', 0), + (9432, 9432, 'accessories/wieldable_items/weapons/exp05/shld_shield_02', 0), + (9433, 9433, 'accessories/wieldable_items/weapons/exp05/shld_shield_03', 0), + (9434, 9434, 'accessories/wieldable_items/weapons/exp05/shld_shield_04', 0), + (9435, 9435, 'accessories/wieldable_items/weapons/exp05/shld_shield_05', 0), + (9436, 9436, 'accessories/wieldable_items/weapons/exp05/shld_shield_06', 0), + (9437, 9437, 'accessories/wieldable_items/weapons/exp05/shld_shield_07', 0), + (9438, 9438, 'accessories/wieldable_items/weapons/exp05/shld_shield_08', 0), + (9439, 9439, 'accessories/wieldable_items/weapons/exp05/shld_shield_09', 0), + (9440, 9440, 'accessories/wieldable_items/weapons/exp05/shld_shield_10', 0), + (9441, 9441, 'staticobjects/pictures/dpo_man_portrait_big_goldblack', 0), + (9442, 9442, 'staticobjects/liveevent/frostfell/holiday_custard_pie_flambe', 0), + (9443, 9443, 'accessories/wieldable_items/weapons/exp05/exp05_1hp_guk_dagger', 0), + (9444, 9444, 'accessories/wieldable_items/weapons/exp05/shld_guk_buckler', 0), + (9445, 9445, 'accessories/wieldable_items/weapons/exp05/exp05_bow_guk_bow', 0), + (9446, 9446, 'staticobjects/boats/skyblade_full', 0), + (9447, 9447, 'accessories/wieldable_items/weapons/exp05/exp05_1hs_guk_axe', 0), + (9448, 9448, 'accessories/wieldable_items/weapons/exp05/exp05_guk_totem', 0), + (9449, 9449, 'accessories/wieldable_items/weapons/exp05/exp05_guk_orb', 0), + (9450, 9450, 'accessories/wearable_items/leather/plain/unseen_hand/pauldron01_leather_heavy_left', 0), + (9451, 9451, 'accessories/wearable_items/leather/plain/unseen_hand/pauldron01_leather_heavy_right', 0), + (9452, 9452, 'accessories/wearable_items/leather/plain/unseen_hand/shoulders_leather_heavy_both', 0), + (9453, 9453, 'accessories/wieldable_items/misc/exp05_stein_guk', 0), + (9454, 9454, 'staticobjects/liveevent/frostfell/dpo_peppermint_shield', 0), + (9455, 9455, 'creatures/mounts/zeppelin_01', 0), + (9456, 9456, 'staticobjects/tapestry/torn_hangingcloth', 0), + (9457, 9457, 'staticobjects/scrolls/wantedposter02', 0), + (9458, 9458, 'accessories/wearable_items/_exp08/dragon_armor/leather2_shadow/hands', 1096), + (9459, 9459, '_exp05/zones/objects/exp05_rgn_innothule/dpo_inna_high_container_tall01_stone', 0), + (9460, 9460, '_exp05/zones/objects/tradeskill_dungeons/adv04_rgn_village/dpo_innb_obj_barnacle01', 0), + (9461, 9461, 'staticobjects/pirate/dpo_inna_pirate_floater_globes01', 0), + (9462, 9462, 'accessories/wieldable_items/weapons/exp05/exp05_korsha_staff2h', 0), + (9463, 9463, 'accessories/wieldable_items/weapons/exp05/exp05_korsha_longbow', 0), + (9464, 9464, 'accessories/wieldable_items/weapons/exp05/exp05_korsha_claymore2h', 0), + (9465, 9465, 'accessories/wieldable_items/weapons/exp05/exp05_korsha_axe1h', 0), + (9466, 9466, 'accessories/wieldable_items/weapons/exp05/exp05_korsha_hammer1h', 0), + (9467, 9467, 'accessories/wieldable_items/shields/exp05/exp05_korsha_kiteshield', 0), + (9468, 9468, 'accessories/wieldable_items/shields/exp05/exp05_korsha_roundshield', 0), + (9469, 9469, 'accessories/wearable_items/heavy_chain/plain02/chest', 0), + (9470, 9470, 'accessories/wearable_items/heavy_chain/plain02/feet', 0), + (9471, 9471, 'accessories/wearable_items/heavy_chain/plain02/forearms', 0), + (9472, 9472, 'accessories/wearable_items/heavy_chain/plain02/hands', 0), + (9473, 9473, 'accessories/wearable_items/heavy_chain/plain02/head', 0), + (9474, 9474, 'accessories/wearable_items/heavy_chain/plain02/legs', 0), + (9475, 9475, 'accessories/wearable_items/heavy_chain/plain02/legs_noskirt', 0), + (9476, 9476, 'accessories/wearable_items/heavy_chain/plain02/pauldron_leahter_light_left', 0), + (9477, 9477, 'accessories/wearable_items/heavy_chain/plain02/pauldron_leahter_light_right', 0), + (9478, 9478, 'accessories/wearable_items/heavy_chain/plain02/shoulders', 0), + (9479, 9479, 'accessories/wearable_items/heavy_chain/plain02/shoulders_no_pauldrons', 0), + (9480, 9480, 'accessories/wearable_items/heavy_chain/plain02/skirt', 0), + (9481, 9481, 'accessories/wearable_items/cloak/exp05/cloak_water_01', 0), + (9482, 9482, '_exp04/tool_users/golem_jade_ice', 0), + (9483, 9483, '_exp05/tool_users/mummy_variant_toturer_full_armor_ice', 0), + (9484, 9484, '_exp05/monsters/dragon_vampire', 0), + (9485, 9485, 'projectiles/spear_ornate', 0), + (9486, 9486, 'accessories/wearable_items/_exp08/dragon_armor/leather2_shadow/head', 1096), + (9487, 9487, 'staticobjects/pirate/plate_of_dead_rats', 0), + (9488, 9488, 'staticobjects/flora/fungusmen_flowerpot', 0), + (9489, 9489, '_exp05/zones/objects/exp05_rgn_innothule/dpo_seb_mushroom_cave_wall01', 0), + (9490, 9490, '_exp05/zones/objects/exp05_dun_guk_upper/guk_upper_table01_sacrifice01_dpo', 0), + (9491, 9491, '_exp05/zones/objects/exp05_dun_guk_lower/keyhole/dun_guk_lower_keyhole01_dpo', 0), + (9492, 9492, '_exp05/zones/objects/exp05_dun_guk_lower/switch/guk_lower_switch01_base_dpo', 0), + (9493, 9493, '_exp05/zones/objects/exp05_dun_guk_lower/switch/guk_lower_switch01_shaft_dpo', 0), + (9494, 9494, '_exp05/zones/objects/exp05_rgn_innothule/boat_platform_innothule', 0), + (9495, 9495, 'accessories/wearable_items/cloak/exp05/cloak_sq_01_kor\'sha_atrebe', 0), + (9496, 9496, 'accessories/wearable_items/cloak/exp05/cloak_sq_01_kor\'sha_fighter', 0), + (9497, 9497, 'accessories/wearable_items/cloak/exp05/cloak_sq_01_kor\'sha_mage', 0), + (9498, 9498, 'accessories/wearable_items/cloak/exp05/cloak_sq_01_kor\'sha_priest', 0), + (9499, 9499, 'accessories/wearable_items/cloak/exp05/cloak_sq_01_kor\'sha_scout', 0), + (9500, 9500, '_exp05/zones/objects/exp05_dun_nuroga/drogan_crystal', 0), + (9501, 9501, 'accessories/wearable_items/sallet_helmet/galvanized/head', 0), + (9502, 9502, 'accessories/wearable_items/vanguard/uncommon/high/pauldron02_vanguard_ridged_left', 0), + (9503, 9503, 'accessories/wearable_items/vanguard/uncommon/high/pauldron02_vanguard_ridged_right', 0), + (9504, 9504, 'accessories/wearable_items/vanguard/uncommon/high/pauldron05_vanguard_heavy_left', 0), + (9505, 9505, 'accessories/wearable_items/vanguard/uncommon/high/pauldron05_vanguard_heavy_right', 0), + (9506, 9506, 'accessories/wearable_items/vanguard/uncommon/high/pauldron07_vanguard_gothic_left', 0), + (9507, 9507, 'accessories/wearable_items/vanguard/uncommon/high/pauldron07_vanguard_gothic_right', 0), + (9508, 9508, 'accessories/wearable_items/vanguard/uncommon/high/shoulders_pauldron02_both', 0), + (9509, 9509, 'accessories/wearable_items/vanguard/uncommon/high/shoulders_pauldron05_both', 0), + (9510, 9510, 'accessories/wearable_items/vanguard/uncommon/high/shoulders_pauldron07_both', 0), + (9511, 9511, 'accessories/wearable_items/_exp05/token_reward_01_robe/chest', 0), + (9512, 9512, 'accessories/wearable_items/_exp05/token_reward_01_robe/hood', 0), + (9513, 9513, 'accessories/wearable_items/_exp05/token_reward_01_robe/pants', 0), + (9514, 9514, 'accessories/wearable_items/_exp05/token_reward_01_robe/skirt', 0), + (9515, 9515, 'accessories/wearable_items/_exp05/token_reward_02_robe/chest', 0), + (9516, 9516, 'accessories/wearable_items/_exp05/token_reward_02_robe/hood', 0), + (9517, 9517, 'accessories/wearable_items/_exp05/token_reward_02_robe/pants', 0), + (9518, 9518, 'accessories/wearable_items/_exp05/token_reward_02_robe/skirt', 0), + (9519, 9519, 'accessories/wearable_items/_exp05/token_reward_03_robe/chest', 0), + (9520, 9520, 'accessories/wearable_items/_exp05/token_reward_03_robe/hood', 0), + (9521, 9521, 'accessories/wearable_items/_exp05/token_reward_03_robe/pants', 0), + (9522, 9522, 'accessories/wearable_items/_exp05/token_reward_03_robe/skirt', 0), + (9523, 9523, 'accessories/wearable_items/_exp05/token_reward_04_robe/chest', 0), + (9524, 9524, 'accessories/wearable_items/_exp05/token_reward_04_robe/hood', 0), + (9525, 9525, 'accessories/wearable_items/_exp05/token_reward_04_robe/pants', 0), + (9526, 9526, 'accessories/wearable_items/_exp05/token_reward_04_robe/skirt', 0), + (9527, 9527, 'staticobjects/creatures/slug_dpo', 0), + (9528, 9528, '_exp05/monsters/void_beast_case', 0), + (9529, 9529, 'accessories/wearable_items01/_exp00/profesion_hats/priest_helm/heavy_plate_plain/head', 0), + (9530, 9530, 'accessories/wearable_items/profesion_hats/priest_helm/heavy_plate_plain/head', 0), + (9531, 9531, 'creatures/mounts/horse_pack/horse_pack', 0), + (9532, 9532, '_exp05/monsters/golem_shambling_mound_swamp', 0), + (9533, 9533, 'accessories/wearable_items/cloak/exp05/cloak_sq_01_unseen_hand', 0), + (9534, 9534, '_exp05/zones/objects/exp05_rgn_innothule/boat_platform_innothule_02', 0), + (9535, 9535, 'accessories/wearable_items/cloak/exp05/cloak_sq_01_far_seas_trader', 0), + (9536, 9536, 'accessories/wearable_items01/_exp00/sallet_helmet/galvanized/head', 0), + (9537, 9537, 'accessories/wearable_items01/_exp00/vanguard/uncommon/high/shoulders_pauldron02_both', 0), + (9538, 9538, 'accessories/wearable_items01/_exp00/vanguard/uncommon/high/shoulders_pauldron05_both', 0), + (9539, 9539, 'accessories/wearable_items01/_exp00/vanguard/uncommon/high/shoulders_pauldron07_both', 0), + (9540, 9540, 'accessories/wearable_items/_exp05/guk_leather/shoulders_turtle_pauldron_both', 0), + (9541, 9541, 'accessories/wearable_items/_exp05/guk_magus/chest_turtle_pauldrons_both', 0), + (9542, 9542, 'accessories/wearable_items/_exp05/guk_robe/chest_turtle_pauldrons_both', 0), + (9543, 9543, 'accessories/wearable_items/_exp05/guk_vanguard/shoulders_turtle_pauldrons_both', 0), + (9544, 9544, 'accessories/wieldable_items/weapons/exp05/shld_congealed_gore_buckler', 0), + (9545, 9545, 'accessories/wieldable_items/weapons/exp05/exp05_talisman_undead_idol', 0), + (9546, 9546, 'staticobjects/light_sources_player_housing_only/dpo_bef_asylum_wall_lamp_small', 0), + (9547, 9547, 'staticobjects/tapestry/dpo_bef_banner_asylum02', 0), + (9548, 9548, 'staticobjects/tapestry/dpo_bef_banner_forsaken01', 0), + (9549, 9549, 'staticobjects/tapestry/dpo_bef_banner_forsaken02', 0), + (9550, 9550, 'staticobjects/light_sources_player_housing_only/dpo_bef_lightsource_candelabra_hanging01', 0), + (9551, 9551, 'staticobjects/light_sources_player_housing_only/dpo_bef_lightsource_floor01', 0), + (9552, 9552, 'staticobjects/light_sources_player_housing_only/dpo_bef_lightsource_wall_asylum', 0), + (9553, 9553, 'staticobjects/light_sources_player_housing_only/dpo_bef_lightsource_wallsconce01', 0), + (9554, 9554, 'staticobjects/light_sources_player_housing_only/dpo_inna_high_lightsource_wall01_grobb', 0), + (9555, 9555, 'staticobjects/statues/dpo_bef_lion_statue01', 0), + (9556, 9556, 'staticobjects/rugs/dpo_bef_rug_blue01', 0), + (9557, 9557, 'staticobjects/tableware/dpo_sfm_gnome_cup01', 0), + (9558, 9558, 'staticobjects/rugs/dpo_bef_rug_yellow01', 0), + (9559, 9559, 'staticobjects/banners/dpo_dn_banners001_wallbrace07', 0), + (9560, 9560, 'staticobjects/statues/dpo_dun_guk_stronghold_statues_statue01', 0), + (9561, 9561, 'staticobjects/banners/dpo_guk_lower_banner01_wall01', 0), + (9562, 9562, 'staticobjects/banners/dpo_guk_lower_banner01_wall02', 0), + (9563, 9563, 'staticobjects/flora/dpo_guk_lower_foliage_bush01', 0), + (9564, 9564, 'staticobjects/flora/dpo_guk_stronghold_foliage_bush01', 0), + (9565, 9565, 'staticobjects/flora/dpo_guk_upper_foliage_bush02', 0), + (9566, 9566, 'staticobjects/dressers/dpo_inna_bank_vault01', 0), + (9567, 9567, 'staticobjects/benches/dpo_inna_high_bench01_grobb', 0), + (9568, 9568, 'staticobjects/chairs/dpo_inna_high_chair01_grobb', 0), + (9569, 9569, 'staticobjects/chairs/dpo_inna_high_chair_troll01', 0), + (9570, 9570, 'staticobjects/chairs/dpo_inna_high_chair_troll02', 0), + (9571, 9571, 'staticobjects/containers/dpo_inna_high_container_tall01_stone', 0), + (9572, 9572, 'staticobjects/tables/dpo_inna_high_table02_grobb', 0), + (9573, 9573, 'staticobjects/tables/dpo_inna_high_table_troll01', 0), + (9574, 9574, 'staticobjects/light_sources_player_housing_only/dpo_inna_lightsource_pirate_lantern', 0), + (9575, 9575, 'staticobjects/pirate/dpo_inna_pirate_net_floaters01_swinging', 0), + (9576, 9576, 'staticobjects/light_sources_player_housing_only/dpo_inna_lightsource_tupta_hangingvine01', 0), + (9577, 9577, 'staticobjects/light_sources_player_housing_only/dpo_inna_lightsource_tupta_lamppost01', 0), + (9578, 9578, 'staticobjects/light_sources_player_housing_only/dpo_inna_lightsource_tupta_wall01', 0), + (9579, 9579, 'staticobjects/light_sources_player_housing_only/dpo_miragul_obj_coldflamebrazier', 0), + (9580, 9580, 'staticobjects/tableware/dpo_inna_low_bowl01_fungusmen', 0), + (9581, 9581, 'staticobjects/tableware/dpo_inna_low_shells01', 0), + (9582, 9582, 'staticobjects/tableware/dpo_inna_pirate_cup_gold01', 0), + (9583, 9583, 'staticobjects/urns/dpo_inna_vase_clay04', 0), + (9584, 9584, 'staticobjects/tableware/dpo_inna_pirate_jug_gold01', 0), + (9585, 9585, 'staticobjects/tableware/dpo_inna_pirate_stein_blue02', 0), + (9586, 9586, 'staticobjects/tableware/dpo_inna_pirate_stein_gold01', 0), + (9587, 9587, 'staticobjects/fountains_and_pools/dpo_inna_tupta_tadpole_bowl01', 0), + (9588, 9588, 'staticobjects/banners/dpo_inna_tupta_wall_banner01', 0), + (9589, 9589, 'staticobjects/urns/dpo_inna_vase_clay02', 0), + (9590, 9590, 'staticobjects/urns/dpo_inna_vase_clay_tall01', 0), + (9591, 9591, 'staticobjects/pictures/dpo_man_portrait2_big_purple', 0), + (9592, 9592, 'staticobjects/pictures/dpo_man_portrait3_big_purple', 0), + (9593, 9593, 'staticobjects/pictures/dpo_man_portrait4_big_purple', 0), + (9594, 9594, 'staticobjects/pictures/dpo_man_portrait5_big_purple', 0), + (9595, 9595, 'staticobjects/chairs/dpo_miragul_chair01', 0), + (9596, 9596, 'staticobjects/light_sources_player_housing_only/dpo_miragul_obj_chandellier', 0), + (9597, 9597, 'staticobjects/light_sources_player_housing_only/dpo_miragul_obj_chandellier_large', 0), + (9598, 9598, 'staticobjects/statues/dpo_miragul_obj_statue01', 0), + (9599, 9599, 'staticobjects/statues/dpo_miragul_obj_statue02', 0), + (9600, 9600, 'staticobjects/tapestry/dpo_na_banner01', 0), + (9601, 9601, 'staticobjects/banners/dpo_na_banner02', 0), + (9602, 9602, 'staticobjects/tapestry/dpo_ols_hangingcloth_airship01', 0), + (9603, 9603, 'staticobjects/tapestry/dpo_ols_hangingcloth_bow01', 0), + (9604, 9604, 'staticobjects/tapestry/dpo_seb_banner_iksar01', 0), + (9605, 9605, 'staticobjects/artifact/dpo_vek_headpiece01', 0), + (9606, 9606, 'staticobjects/artifact/dpo_vek_headpiece02', 0), + (9607, 9607, 'staticobjects/light_sources_player_housing_only/dpo_vek_lightsource_jar_fireflies01_fx', 0), + (9608, 9608, 'staticobjects/light_sources_player_housing_only/dpo_vek_lightsource_jar_standalone', 0), + (9609, 9609, 'accessories/wieldable_items/weapons/exp05/exp05_befallen_book', 0), + (9610, 9610, 'accessories/wieldable_items/weapons/exp05/exp05_bow_befallen_bow', 0), + (9611, 9611, 'accessories/wieldable_items/weapons/exp05/shld_shield_10_ice', 0), + (9612, 9612, 'staticobjects/tapestry/dpo_tapestry_design_white_dragonscale_hq', 0), + (9613, 9613, 'accessories/wieldable_items/weapons/exp05/exp05_1hs_befallen_sabre', 0), + (9614, 9614, 'creatures/pets/dice/eight_sided_dice_black_marble', 0), + (9615, 9615, 'creatures/pets/dice/four_sided_dice_black_marble', 0), + (9616, 9616, 'creatures/pets/dice/four_sided_dice_cyanblack_marble', 0), + (9617, 9617, 'creatures/pets/dice/four_sided_dice_golden_marble', 0), + (9618, 9618, 'creatures/pets/dice/four_sided_dice_green_marble', 0), + (9619, 9619, 'creatures/pets/dice/four_sided_dice_grey_marble', 0), + (9620, 9620, 'creatures/pets/dice/four_sided_dice_orange_marble', 0), + (9621, 9621, 'creatures/pets/dice/four_sided_dice_plastic_tint', 0), + (9622, 9622, 'creatures/pets/dice/four_sided_dice_white_marble', 0), + (9623, 9623, 'creatures/pets/dice/twelve_sided_dice_black_marble', 0), + (9624, 9624, 'creatures/pets/dice/twelve_sided_dice_cyanblack_marble', 0), + (9625, 9625, 'creatures/pets/dice/twelve_sided_dice_golden_marble', 0), + (9626, 9626, 'creatures/pets/dice/twelve_sided_dice_green_marble', 0), + (9627, 9627, 'creatures/pets/dice/twelve_sided_dice_grey_marble', 0), + (9628, 9628, 'creatures/pets/dice/twelve_sided_dice_orange_marble', 0), + (9629, 9629, 'creatures/pets/dice/twelve_sided_dice_plastic_tint', 0), + (9630, 9630, 'creatures/pets/dice/twelve_sided_dice_red_marble', 0), + (9631, 9631, 'creatures/pets/dice/twelve_sided_dice_white_marble', 0), + (9632, 9632, 'creatures/pets/dice/twenty_sided_dice_black_marble', 0), + (9633, 9633, 'creatures/pets/dice/twenty_sided_dice_cyanblack_marble', 0), + (9634, 9634, 'creatures/pets/dice/twenty_sided_dice_golden_marble', 0), + (9635, 9635, 'creatures/pets/dice/twenty_sided_dice_green_marble', 0), + (9636, 9636, 'creatures/pets/dice/twenty_sided_dice_grey_marble', 0), + (9637, 9637, 'creatures/pets/dice/twenty_sided_dice_orange_marble', 0), + (9638, 9638, 'creatures/pets/dice/twenty_sided_dice_plastic_tint', 0), + (9639, 9639, 'creatures/pets/dice/twenty_sided_dice_red_marble', 0), + (9640, 9640, 'creatures/pets/dice/twenty_sided_dice_white_marble', 0), + (9641, 9641, 'creatures/monsters/wall_slug', 0), + (9642, 9642, 'accessories/wieldable_items/weapons/exp05/exp05_1hs_befallen_rapier', 0), + (9643, 9643, 'accessories/wieldable_items/weapons/exp05/exp05_orb_of_earth', 0), + (9644, 9644, 'accessories/wieldable_items/weapons/exp05/exp05_orb_of_fire', 0), + (9645, 9645, 'accessories/wieldable_items/weapons/exp05/exp05_orb_of_fire_sun', 0), + (9646, 9646, 'accessories/wieldable_items/weapons/exp05/exp05_orb_of_ice', 0), + (9647, 9647, 'accessories/wieldable_items/shields/buckler_shield/metal_buckler/metal_buckler001_ice', 0), + (9648, 9648, 'accessories/wieldable_items/shields/tower_shield/metal_tower_shield/planar_tower_shield', 0), + (9649, 9649, 'accessories/wieldable_items/weapons/bow/long_bow/dreadnaughts_longbow', 0), + (9650, 9650, '_exp05/zones/objects/exp05_rgn_innothule/rubbish_pile', 0), + (9651, 9651, 'staticobjects/gnomish_devices/zeppelin_mobile', 0), + (9652, 9652, 'accessories/wieldable_items/weapons/exp05/exp05_befallen_censor', 0), + (9653, 9653, 'accessories/wieldable_items/weapons/exp05/exp05_lance_of_dreams', 0), + (9654, 9654, 'staticobjects/gnomish_devices/zeppelin_mobile_03', 0), + (9655, 9655, 'creatures/pets/dice/four_sided_dice_red_marble', 0), + (9656, 9656, '_exp01/characters/tool_users/djinn_master_fire', 0), + (9657, 9657, '_exp01/characters/tool_users/genie_male_efreeti', 0), + (9658, 9658, '_exp01/characters/tool_users/genie_male_evil', 0), + (9659, 9659, '_exp01/characters/tool_users/genie_male_evil_hair', 0), + (9660, 9660, '_exp01/characters/tool_users/genie_male_lesser', 0), + (9661, 9661, '_exp01/characters/tool_users/genie_male_lesser_hair', 0), + (9662, 9662, 'accessories/wearable_items/_exp05/far_seas_trader_leather/chest', 0), + (9663, 9663, 'accessories/wearable_items/_exp05/far_seas_trader_leather/feet', 0), + (9664, 9664, 'accessories/wearable_items/_exp05/far_seas_trader_leather/hands', 0), + (9665, 9665, 'accessories/wearable_items/_exp05/far_seas_trader_leather/forearms', 0), + (9666, 9666, 'accessories/wearable_items/_exp05/far_seas_trader_leather/head', 0), + (9667, 9667, 'accessories/wearable_items/_exp05/far_seas_trader_leather/legs', 0), + (9668, 9668, 'accessories/wearable_items/_exp05/far_seas_trader_leather/legs_noskirt', 0), + (9669, 9669, 'accessories/wearable_items/_exp05/far_seas_trader_leather/shoulders', 0), + (9670, 9670, 'accessories/wearable_items/_exp05/far_seas_trader_leather/skirt', 0), + (9671, 9671, 'staticobjects/urns/dpo_inna_vase_clay_tall02', 0), + (9672, 9672, 'staticobjects/statues/unicorn_statue', 0), + (9673, 9673, 'accessories/wearable_items/cloak/exp05/cloak_sq_01_bechoi', 0), + (9674, 9674, 'accessories/wearable_items/cloak/exp05/cloak_sq_01_lubesh', 0), + (9675, 9675, 'accessories/wearable_items/cloak/exp05/cloak_sq_01_rajadevi', 0), + (9676, 9676, 'accessories/wearable_items/cloak/exp05/cloak_sq_01_yciid', 0), + (9677, 9677, 'accessories/wearable_items/cloak/exp05/cloak_sq_01_vashota', 0), + (9678, 9678, 'staticobjects/liveevent/frostfell/goblinpop01', 0), + (9679, 9679, 'staticobjects/liveevent/frostfell/goblinpop02', 0), + (9680, 9680, 'staticobjects/liveevent/frostfell/goblinpop03', 0), + (9681, 9681, 'accessories/wearable_items/profesion_hats/priest_helm/heavy_plate_white/head', 0), + (9682, 9682, 'accessories/wearable_items01/_exp00/profesion_hats/priest_helm/heavy_plate_white/head', 0), + (9683, 9683, 'staticobjects/tapestry/dpo_tapestry_design_unseen', 0), + (9684, 9684, 'staticobjects/weapons/dpo_battle_spoon', 0), + (9685, 9685, 'staticobjects/weapons/dpo_rolling_pin', 0), + (9686, 9686, 'staticobjects/light_sources_player_housing_only/dpo_gf_lightsource_lampppost01', 0), + (9687, 9687, 'staticobjects/carts/damaged_wood_cart_no_collide', 0), + (9688, 9688, 'staticobjects/liveevent/frostfell/dpo_greeting_card_frostfell01', 0), + (9689, 9689, 'staticobjects/liveevent/frostfell/dpo_greeting_card_frostfell02', 0), + (9690, 9690, 'staticobjects/liveevent/frostfell/dpo_greeting_card_frostfell03', 0), + (9691, 9691, 'staticobjects/liveevent/frostfell/dpo_greeting_card_frostfell04', 0), + (9692, 9692, '_exp05/zones/objects/exp05_dun_void_palace/fx_void_teleporter', 0), + (9693, 9693, '_exp05/zones/objects/exp05_dun_void_palace/void_case', 0), + (9694, 9694, 'staticobjects/signs/neriak/dpo_sign_small_business01', 0), + (9695, 9695, 'accessories/wearable_items/_exp05/tradeskill_magus_low/chest', 0), + (9696, 9696, 'accessories/wearable_items/_exp05/tradeskill_magus_low/arms', 0), + (9697, 9697, 'accessories/wearable_items/_exp05/tradeskill_magus_low/skirt', 0), + (9698, 9698, '_exp05/zones/objects/exp05_dun_veksar/vek_container_egg_bobbing', 0), + (9699, 9699, 'staticobjects/tapestry/dpo_tapestry_design_water', 0), + (9700, 9700, '_exp05/zones/objects/exp05_dun_void_palace/fx_glowing_blue_sphere', 0), + (9701, 9701, 'accessories/wearable_items/cloak/exp05/cloak_sq_01_guide', 0), + (9702, 9702, '_exp01/zones/dungeons/silent_city/sc_temple/sc_ewer_exp5_quest', 0), + (9703, 9703, '_exp05/zones/objects/exp05_dun_miragul_shard/miragul_amygdalan_scaled', 0), + (9704, 9704, '_exp05/zones/objects/exp05_dun_miragul_shard/miragul_tree_scaled', 0), + (9705, 9705, '_exp05/zones/objects/exp05_dun_befallen_forsaken/spider_web01', 0), + (9706, 9706, '_exp05/zones/objects/exp05_dun_befallen_forsaken/spider_web02', 0), + (9707, 9707, '_exp05/zones/objects/exp05_dun_befallen_forsaken/spider_web03', 0), + (9708, 9708, '_exp05/zones/objects/exp05_dun_befallen_forsaken/spider_web04', 0), + (9709, 9709, '_exp05/zones/objects/exp05_dun_befallen_forsaken/spider_web05', 0), + (9710, 9710, '_exp05/zones/objects/exp05_dun_befallen_forsaken/spider_web06', 0), + (9711, 9711, '_exp05/zones/objects/exp05_dun_befallen_forsaken/spider_web07', 0), + (9712, 9712, 'staticobjects/lighting/floor_lamp_ice', 0), + (9713, 9713, 'creatures/tu/froglok_skeleton_ghost', 0), + (9714, 9714, '_exp05/zones/objects/exp05_dun_guk_upper/dn_guk_upper_shinlordtower01_poison01', 0), + (9715, 9715, '_exp05/monsters/dire_bear01_wsaddle_armor03', 0), + (9716, 9716, '_exp05/monsters/dire_bear01_wsaddle_armor04', 0), + (9717, 9717, '_exp05/monsters/dire_bear01_wsaddle_armor05', 0), + (9718, 9718, '_exp05/zones/objects/tradeskill_dungeons/void/dpo_airship_stage1', 0), + (9719, 9719, '_exp05/zones/objects/tradeskill_dungeons/void/dpo_airship_stage2', 0), + (9720, 9720, '_exp05/zones/objects/tradeskill_dungeons/void/dpo_airship_stage3', 0), + (9721, 9721, '_exp05/zones/objects/tradeskill_dungeons/void/dpo_airship_stage4', 0), + (9722, 9722, '_exp05/zones/objects/tradeskill_dungeons/void/tinkered_workstation_dpo', 0), + (9723, 9723, 'staticobjects/beds/dpo_cm_bed_twin01', 0), + (9724, 9724, 'staticobjects/beds/dpo_cm_bed_twin02', 0), + (9725, 9725, 'staticobjects/beds/dpo_kel_bed_inn01', 0), + (9726, 9726, 'staticobjects/cages/dpo_drv_cage_gilded01_swinging', 0), + (9727, 9727, 'staticobjects/scrolls/dpo_goro_scrolls_stack01', 0), + (9728, 9728, 'staticobjects/scrolls/dpo_goro_scrolls_stack02', 0), + (9729, 9729, 'staticobjects/tables/dpo_djn_table_brass02', 0), + (9730, 9730, 'accessories/wearable_items/halloween_masks/skull_circlet/skull_circlet_head', 0), + (9731, 9731, 'accessories/wearable_items/christmas_hats/ice_crown/ice_crown_head', 0), + (9732, 9732, 'creatures/mounts/dire_bear/dire_bear01', 0), + (9733, 9733, 'creatures/mounts/dire_bear/dire_bear01_wsaddle', 0), + (9734, 9734, 'creatures/mounts/dire_bear/dire_bear01_wsaddle_armor01', 0), + (9735, 9735, 'creatures/mounts/dire_bear/dire_bear01_wsaddle_armor02', 0), + (9736, 9736, 'creatures/mounts/dire_bear/dire_bear01_wsaddle_armor03', 0), + (9737, 9737, 'creatures/mounts/dire_bear/dire_bear01_wsaddle_armor04', 0), + (9738, 9738, 'creatures/mounts/dire_bear/dire_bear01_wsaddle_armor05', 0), + (9739, 9739, 'creatures/mounts/dire_bear/dire_bear02_wsaddle', 0), + (9740, 9740, 'creatures/mounts/dire_bear/dire_bear02_wsaddle_armor01', 0), + (9741, 9741, 'creatures/mounts/dire_bear/dire_bear02_wsaddle_armor02', 0), + (9742, 9742, 'creatures/mounts/dire_bear/dire_bear03_wsaddle', 0), + (9743, 9743, 'creatures/mounts/dire_bear/dire_bear03_wsaddle_armor01', 0), + (9744, 9744, 'creatures/mounts/dire_bear/dire_bear03_wsaddle_armor02', 0), + (9745, 9745, 'creatures/mounts/dire_bear/dire_bear04_wsaddle', 0), + (9746, 9746, 'creatures/mounts/dire_bear/dire_bear04_wsaddle_armor01', 0), + (9747, 9747, 'creatures/mounts/dire_bear/dire_bear04_wsaddle_armor02', 0), + (9748, 9748, 'accessories/wearable_items/_exp06/elf_armor_vanguard/chest', 0), + (9749, 9749, 'accessories/wearable_items/_exp06/elf_armor_vanguard/elf_armor_pauldron_left', 0), + (9750, 9750, 'accessories/wearable_items/_exp06/elf_armor_vanguard/elf_armor_pauldron_right', 0), + (9751, 9751, 'accessories/wearable_items/_exp06/elf_armor_vanguard/feet', 0), + (9752, 9752, 'accessories/wearable_items/_exp06/elf_armor_vanguard/forearms', 0), + (9753, 9753, 'accessories/wearable_items/_exp06/elf_armor_vanguard/hands', 0), + (9754, 9754, 'accessories/wearable_items/_exp06/elf_armor_vanguard/head', 0), + (9755, 9755, 'accessories/wearable_items/_exp06/elf_armor_vanguard/head_elf_armor', 0), + (9756, 9756, 'accessories/wearable_items/_exp06/elf_armor_vanguard/legs', 0), + (9757, 9757, 'accessories/wearable_items/_exp06/elf_armor_vanguard/legs_noskirt', 0), + (9758, 9758, 'accessories/wearable_items/_exp06/elf_armor_vanguard/right', 0), + (9759, 9759, 'accessories/wearable_items/_exp06/elf_armor_vanguard/shoulders', 0), + (9760, 9760, 'accessories/wearable_items/_exp06/elf_armor_vanguard/shoulders_elf_amor', 0), + (9761, 9761, 'accessories/wearable_items/_exp06/elf_armor_vanguard/shoulders_nopauldrons', 0), + (9762, 9762, 'accessories/wearable_items/_exp06/elf_armor_vanguard/skirt', 0), + (9763, 9763, 'staticobjects/liveevent/guides/dpo_guide_halfling_table', 0), + (9764, 9764, 'staticobjects/liveevent/guides/dpo_guide_hanging_light', 0), + (9765, 9765, 'staticobjects/liveevent/guides/dpo_guide_rolling_pin_metal', 0), + (9766, 9766, 'accessories/wearable_items/_exp06/elf_armor_chain/chest', 0), + (9767, 9767, 'accessories/wearable_items/_exp06/elf_armor_chain/elf_armor_pauldron_left', 0), + (9768, 9768, 'accessories/wearable_items/_exp06/elf_armor_chain/elf_armor_pauldron_right', 0), + (9769, 9769, 'accessories/wearable_items/_exp06/elf_armor_chain/feet', 0), + (9770, 9770, 'accessories/wearable_items/_exp06/elf_armor_chain/forearms', 0), + (9771, 9771, 'accessories/wearable_items/_exp06/elf_armor_chain/hands', 0), + (9772, 9772, 'accessories/wearable_items/_exp06/elf_armor_chain/head', 0), + (9773, 9773, 'accessories/wearable_items/_exp06/elf_armor_chain/head_elf_armor', 0), + (9774, 9774, 'accessories/wearable_items/_exp06/elf_armor_chain/legs', 0), + (9775, 9775, 'accessories/wearable_items/_exp06/elf_armor_chain/legs_noskirt', 0), + (9776, 9776, 'accessories/wearable_items/_exp06/elf_armor_chain/shoulders', 0), + (9777, 9777, 'accessories/wearable_items/_exp06/elf_armor_chain/shoulders_nopauldrons', 0), + (9778, 9778, 'accessories/wearable_items/_exp06/elf_armor_chain/skirt', 0), + (9779, 9779, '_exp04/monsters/xygoz_fire', 0), + (9780, 9780, '_exp04/monsters/xygoz_shade', 0), + (9781, 9781, '_exp05/monsters/ice_dervish', 0), + (9782, 9782, 'creatures/tu/elementalfire_greater', 0), + (9783, 9783, 'creatures/tu/void_stalker', 0), + (9784, 9784, 'creatures/mounts/dire_bear/dire_bear01_wsaddle_armor01_firespirit', 0), + (9785, 9785, 'creatures/mounts/dire_bear/dire_bear01_wsaddle_armor01_void', 0), + (9786, 9786, 'creatures/mounts/dire_bear/dire_bear01_wsaddle_armor01_icepirit', 0), + (9787, 9787, 'accessories/wearable_items/_exp08/dragon_armor/leather2_shadow/legs', 1096), + (9788, 9788, 'accessories/wearable_items/elemental_crowns/elemental_crown_fire', 0), + (9789, 9789, 'accessories/wearable_items/elemental_crowns/elemental_crown_ice', 0), + (9790, 9790, 'accessories/wearable_items/elemental_crowns/sparkle_crown', 0), + (9791, 9791, 'accessories/wearable_items/elemental_crowns/star_crown', 0), + (9792, 9792, 'creatures/tu/gelatinouscube_comfort_spring', 0), + (9793, 9793, 'creatures/tu/gelatinouscube_spring', 0), + (9794, 9794, 'accessories/wearable_items/_exp06/elf_armor_leather/chest', 0), + (9795, 9795, 'accessories/wearable_items/_exp06/elf_armor_leather/elf_armor_pauldron_right', 0), + (9796, 9796, 'accessories/wearable_items/_exp06/elf_armor_leather/feet', 0), + (9797, 9797, 'accessories/wearable_items/_exp06/elf_armor_leather/forearms', 0), + (9798, 9798, 'accessories/wearable_items/_exp06/elf_armor_leather/hands', 0), + (9799, 9799, 'accessories/wearable_items/_exp06/elf_armor_leather/head', 0), + (9800, 9800, 'accessories/wearable_items/_exp06/elf_armor_leather/head_elf_armor', 0), + (9801, 9801, 'accessories/wearable_items/_exp06/elf_armor_leather/legs', 0), + (9802, 9802, 'accessories/wearable_items/_exp06/elf_armor_leather/legs_noskirt', 0), + (9803, 9803, 'accessories/wearable_items/_exp06/elf_armor_leather/shoulders', 0), + (9804, 9804, 'accessories/wearable_items/_exp06/elf_armor_leather/shoulders_nopauldrons', 0), + (9805, 9805, 'accessories/wearable_items/_exp06/elf_armor_leather/skirt', 0), + (9806, 9806, 'creatures/tu/nightbloodwarrior_golden', 0), + (9807, 9807, 'accessories/wearable_items/robe_02/chest', 0), + (9808, 9808, 'accessories/wearable_items/robe_02/head', 0), + (9809, 9809, 'accessories/wearable_items/robe_02/hood', 0), + (9810, 9810, 'accessories/wearable_items/_exp08/dragon_armor/leather2_shadow/legs_noskirt', 1096), + (9811, 9811, 'accessories/wearable_items/robe_02/skirt', 0), + (9812, 9812, 'accessories/wearable_items/cloak/exp06/cloak_kaltuk', 0), + (9813, 9813, 'accessories/wearable_items/_exp06/dwarf_armor_chain/breastplate_disc', 0), + (9814, 9814, 'accessories/wearable_items/_exp06/dwarf_armor_chain/chest', 0), + (9815, 9815, 'accessories/wearable_items/_exp06/dwarf_armor_chain/chest_disc_chain_dwarf', 0), + (9816, 9816, 'accessories/wearable_items/_exp06/dwarf_armor_chain/crest_boar_01', 0), + (9817, 9817, 'accessories/wearable_items/_exp06/dwarf_armor_chain/feet', 0), + (9818, 9818, 'accessories/wearable_items/_exp06/dwarf_armor_chain/forearms', 0), + (9819, 9819, 'accessories/wearable_items/_exp06/dwarf_armor_chain/hands', 0), + (9820, 9820, 'accessories/wearable_items/_exp06/dwarf_armor_chain/head', 0), + (9821, 9821, 'accessories/wearable_items/_exp08/dragon_armor/leather2_shadow/shoulders', 1096), + (9822, 9822, 'accessories/wearable_items/_exp08/dragon_armor/leather2_shadow/shoulders_epic', 1096), + (9823, 9823, 'accessories/wearable_items/_exp08/dragon_armor/leather2_slate/skirt', 1096), + (9824, 9824, 'accessories/wearable_items/_exp06/dwarf_armor_chain/horn_01_left', 0), + (9825, 9825, 'accessories/wearable_items/_exp06/dwarf_armor_chain/horn_01_right', 0), + (9826, 9826, 'accessories/wearable_items/_exp06/dwarf_armor_chain/legs', 0), + (9827, 9827, 'accessories/wearable_items/_exp06/dwarf_armor_chain/legs_noskirt', 0), + (9828, 9828, 'accessories/wearable_items/_exp06/dwarf_armor_chain/pauldron_leather_flat_boar_left', 0), + (9829, 9829, 'accessories/wearable_items/_exp06/dwarf_armor_chain/pauldron_leather_flat_boar_right', 0), + (9830, 9830, 'accessories/wearable_items/_exp06/dwarf_armor_chain/pauldron_leather_flat_left', 0), + (9831, 9831, 'accessories/wearable_items/_exp06/dwarf_armor_chain/pauldron_leather_flat_right', 0), + (9832, 9832, 'accessories/wearable_items/_exp06/dwarf_armor_chain/pauldron_leather_light_left', 0), + (9833, 9833, 'accessories/wearable_items/_exp06/dwarf_armor_chain/pauldron_leather_light_right', 0), + (9834, 9834, 'accessories/wearable_items/_exp06/dwarf_armor_chain/shoulders', 0), + (9835, 9835, 'accessories/wearable_items/_exp06/dwarf_armor_chain/shoulders_leather_flat_boar_pauldrons_both', 0), + (9836, 9836, 'accessories/wearable_items/_exp06/dwarf_armor_chain/shoulders_leather_flat_pauldrons_both', 0), + (9837, 9837, 'accessories/wearable_items/_exp06/dwarf_armor_chain/shoulders_no_pauldrons', 0), + (9838, 9838, 'accessories/wearable_items/_exp06/dwarf_armor_chain/skirt', 0), + (9839, 9839, 'accessories/wearable_items/cloak/exp06/cloak_nurgg', 0), + (9840, 9840, 'accessories/wearable_items/cloak/exp06/cloak_journeyman', 0), + (9841, 9841, 'accessories/wearable_items/cloak/exp06/cloak_journeyman_blue', 0), + (9842, 9842, 'accessories/wearable_items/cloak/exp06/cloak_journeyman_green', 0), + (9843, 9843, 'accessories/wearable_items/cloak/exp06/cloak_journeyman_red', 0), + (9844, 9844, 'creatures/tu/water_elemental_soldier', 0), + (9845, 9845, 'creatures/tu/fire_elemental_soldier', 0), + (9846, 9846, 'creatures/tu/poison_elemental_soldier_', 0), + (9847, 9847, 'creatures/tu/snow_flake_soldier', 0), + (9848, 9848, 'creatures/tu/storm_elemental_soldier', 0), + (9849, 9849, 'accessories/wearable_items/_exp06/mayan_robe/chest', 0), + (9850, 9850, 'accessories/wearable_items/_exp06/mayan_robe/head', 0), + (9851, 9851, 'accessories/wearable_items/_exp06/mayan_robe/pants', 0), + (9852, 9852, 'accessories/wearable_items/_exp06/mayan_robe/skirt', 0), + (9853, 9853, 'staticobjects/bank/dpo_inna_chest_treasure_open01', 0), + (9854, 9854, 'staticobjects/bank/dpo_inna_coin_pile_large01', 0), + (9855, 9855, 'staticobjects/bank/dpo_inna_crate_closed01_single', 0), + (9856, 9856, 'staticobjects/bank/dpo_inna_crate_treasure_open01', 0), + (9857, 9857, 'staticobjects/bank/dpo_inna_gold_coin_pile01', 0), + (9858, 9858, 'staticobjects/bank/dpo_inna_gold_coin_pile02', 0), + (9859, 9859, 'accessories/wearable_items/_exp06/dwarf_armor_chain/crest_horns_01', 0), + (9860, 9860, 'accessories/wearable_items/_exp06/dwarf_armor_chain/head_boarcrest', 0), + (9861, 9861, 'accessories/wearable_items/_exp06/dwarf_armor_chain/head_boarcrest_horns_01', 0), + (9862, 9862, 'accessories/wearable_items/_exp06/dwarf_armor_chain/head_boarcrest_horns_02', 0), + (9863, 9863, 'accessories/wearable_items/_exp06/dwarf_armor_chain/head_boarcrest_horns_03', 0), + (9864, 9864, 'accessories/wearable_items/_exp06/dwarf_armor_chain/head_boarcrest_horns_04', 0), + (9865, 9865, 'accessories/wearable_items/_exp06/dwarf_armor_chain/head_hornedcrest_horns_03', 0), + (9866, 9866, 'accessories/wearable_items/_exp06/dwarf_armor_chain/horn_02_left', 0), + (9867, 9867, 'accessories/wearable_items/_exp06/dwarf_armor_chain/horn_02_right', 0), + (9868, 9868, 'accessories/wearable_items/_exp06/dwarf_armor_chain/horn_03_left', 0), + (9869, 9869, 'accessories/wearable_items/_exp06/dwarf_armor_chain/horn_03_right', 0), + (9870, 9870, 'accessories/wearable_items/_exp06/dwarf_armor_chain/horn_04_left', 0), + (9871, 9871, 'accessories/wearable_items/_exp06/dwarf_armor_chain/horn_04_right', 0), + (9872, 9872, 'accessories/wearable_items/_exp06/elf_armor_robe/chest', 0), + (9873, 9873, 'accessories/wearable_items/_exp06/elf_armor_robe/elf_armor_pauldron_left', 0), + (9874, 9874, 'accessories/wearable_items/_exp06/elf_armor_robe/elf_armor_pauldron_right', 0), + (9875, 9875, 'accessories/wearable_items/_exp06/elf_armor_robe/head', 0), + (9876, 9876, 'accessories/wearable_items/_exp06/elf_armor_robe/hood', 0), + (9877, 9877, 'accessories/wearable_items/_exp06/elf_armor_robe/pants', 0), + (9878, 9878, 'accessories/wearable_items/_exp06/elf_armor_robe/skirt', 0), + (9879, 9879, '_exp05/zones/objects/exp05_dun_najena_atheneum/gold_bar', 0), + (9880, 9880, 'accessories/wearable_items/_exp06/plain_01_robe/chest', 0), + (9881, 9881, 'accessories/wearable_items/_exp06/plain_01_robe/head', 0), + (9882, 9882, 'accessories/wearable_items/_exp06/plain_01_robe/pants', 0), + (9883, 9883, 'accessories/wearable_items/_exp06/plain_01_robe/skirt', 0), + (9884, 9884, 'accessories/wearable_items01/_exp00/heavy_plate/plain_white_sun_symbol/shoulders', 0), + (9885, 9885, '_exp05/zones/objects/exp05_dun_najena_atheneum/lava_boulder_01', 0), + (9886, 9886, '_exp05/zones/objects/exp05_dun_najena_atheneum/lava_boulder_02', 0), + (9887, 9887, '_exp05/zones/objects/exp05_dun_najena_atheneum/lava_boulder_03', 0), + (9888, 9888, '_exp05/zones/objects/exp05_dun_najena_atheneum/lava_boulder_04', 0), + (9889, 9889, 'staticobjects/doors/qey_obj_door_type05_1', 0), + (9890, 9890, 'staticobjects/doors/qey_obj_door_type05_2', 0), + (9891, 9891, 'accessories/wearable_items/cloak/exp06/cloak_erollisi_sister', 0), + (9892, 9892, 'accessories/wearable_items/cloak/exp06/erollisi_head', 0), + (9893, 9893, 'accessories/wearable_items/profesion_hats/wizard_hat_merlin/wizard_hat_merlin', 0), + (9894, 9894, 'accessories/wearable_items/cloak/exp06/fae_d_wing01_void', 0), + (9895, 9895, 'accessories/wearable_items/heavy_plate/lava/chest', 0), + (9896, 9896, 'accessories/wearable_items/heavy_plate/lava/feet', 0), + (9897, 9897, 'accessories/wearable_items/heavy_plate/lava/forearms', 0), + (9898, 9898, 'accessories/wearable_items/heavy_plate/lava/hands', 0), + (9899, 9899, 'accessories/wearable_items/heavy_plate/lava/head', 0), + (9900, 9900, 'accessories/wearable_items/heavy_plate/lava/left', 0), + (9901, 9901, 'accessories/wearable_items/heavy_plate/lava/legs', 0), + (9902, 9902, 'accessories/wearable_items/heavy_plate/lava/legs_noskirt', 0), + (9903, 9903, 'accessories/wearable_items/heavy_plate/lava/pauldron03_vanguard_flared_left', 0), + (9904, 9904, 'accessories/wearable_items/heavy_plate/lava/pauldron03_vanguard_flared_right', 0), + (9905, 9905, 'accessories/wearable_items/heavy_plate/lava/pauldron_plain_left', 0), + (9906, 9906, 'accessories/wearable_items/heavy_plate/lava/pauldron_plain_right', 0), + (9907, 9907, 'accessories/wearable_items/heavy_plate/lava/right', 0), + (9908, 9908, 'accessories/wearable_items/heavy_plate/lava/shoulders', 0), + (9909, 9909, 'accessories/wearable_items/heavy_plate/lava/shoulders_flared_both', 0), + (9910, 9910, 'accessories/wearable_items/heavy_plate/lava/shoulders_nopauldrons', 0), + (9911, 9911, 'accessories/wearable_items/heavy_plate/lava/skirt', 0), + (9912, 9912, 'accessories/wearable_items/heavy_plate/lava/upperchest', 0), + (9913, 9913, 'ec/pc/darkelf/darkelf_female_voidtainted', 0), + (9914, 9914, 'ec/pc/ogre/fire_ogre_male_voidtainted', 0), + (9915, 9915, '_exp04/tool_users/burynai_warrior_voidtainted', 0), + (9916, 9916, '_exp01/characters/tool_users/water_djinn_master_voidtainted', 0), + (9917, 9917, 'accessories/wearable_items/profesion_hats/vampire_hunter/vampire_hunter', 0), + (9918, 9918, 'accessories/wearable_items/_exp06/elf_armor_robe/chest_with_pauldrons', 0), + (9919, 9919, 'accessories/wearable_items/profesion_hats/executioner_helm/head', 0), + (9920, 9920, 'accessories/wearable_items/_exp06/varsoon_robe/chest_with_skull_pauldrons', 0), + (9921, 9921, 'accessories/wearable_items/_exp06/varsoon_robe/chest', 0), + (9922, 9922, 'accessories/wearable_items/_exp06/varsoon_robe/head', 0), + (9923, 9923, 'accessories/wearable_items/_exp06/varsoon_robe/pants', 0), + (9924, 9924, 'accessories/wearable_items/_exp06/varsoon_robe/pauldron_varsoon_left', 0), + (9925, 9925, 'accessories/wearable_items/_exp06/varsoon_robe/pauldron_varsoon_right', 0), + (9926, 9926, 'accessories/wearable_items/_exp06/varsoon_robe/skirt', 0), + (9927, 9927, 'accessories/wearable_items/profesion_hats/priest_helm/priest_templar_helm/head', 0), + (9928, 9928, 'accessories/wearable_items/profesion_hats/warrior_helm/warrior_helm', 0), + (9929, 9929, 'staticobjects/liveevent/erollisi_objects/errolisi_grass_patch_butterflies_01', 0), + (9930, 9930, 'staticobjects/liveevent/erollisi_objects/errolisi_grass_patch_fireflies_01', 0), + (9931, 9931, 'accessories/wearable_items/_exp06/elf_armor_robe_red/chest', 0), + (9932, 9932, 'accessories/wearable_items/_exp06/elf_armor_robe_red/chest_with_pauldrons', 0), + (9933, 9933, 'accessories/wearable_items/_exp06/elf_armor_robe_red/elf_armor_pauldron_left', 0), + (9934, 9934, 'accessories/wearable_items/_exp06/elf_armor_robe_red/elf_armor_pauldron_right', 0), + (9935, 9935, 'accessories/wearable_items/_exp06/elf_armor_robe_red/head', 0), + (9936, 9936, 'accessories/wearable_items/_exp06/elf_armor_robe_red/hood', 0), + (9937, 9937, 'accessories/wearable_items/_exp06/elf_armor_robe_red/pants', 0), + (9938, 9938, 'accessories/wearable_items/_exp06/elf_armor_robe_red/skirt', 0), + (9939, 9939, 'accessories/wearable_items/_exp06/dwarf_armor_chain/head_horns_01', 0), + (9940, 9940, 'accessories/wearable_items/_exp06/dwarf_armor_chain/head_horns_02', 0), + (9941, 9941, 'accessories/wearable_items/_exp06/dwarf_armor_chain/head_horns_03', 0), + (9942, 9942, 'accessories/wearable_items/_exp06/dwarf_armor_chain/head_horns_04', 0), + (9943, 9943, 'accessories/wieldable_items/weapons/exp06/1h_sword/exp06_1h_axe_bone_spike', 0), + (9944, 9944, 'accessories/wieldable_items/weapons/exp06/1h_sword/exp06_1h_axe_double_fang', 0), + (9945, 9945, 'accessories/wieldable_items/weapons/exp06/1h_sword/exp06_1h_axe_dragon_eater', 0), + (9946, 9946, 'accessories/wieldable_items/weapons/exp06/1h_sword/exp06_1h_axe_emerald_ripper', 0), + (9947, 9947, 'accessories/wieldable_items/weapons/exp06/1h_sword/exp06_1h_axe_golden_eagle_talon', 0), + (9948, 9948, 'accessories/wieldable_items/weapons/exp06/1h_sword/exp06_1h_axe_golden_sun', 0), + (9949, 9949, 'accessories/wieldable_items/weapons/exp06/1h_sword/exp06_1h_axe_holey_defiler', 0), + (9950, 9950, 'accessories/wieldable_items/weapons/exp06/1h_sword/exp06_1h_axe_jagged_diamond', 0), + (9951, 9951, 'accessories/wieldable_items/weapons/exp06/1h_sword/exp06_1h_axe_mayan_smasher', 0), + (9952, 9952, 'accessories/wieldable_items/weapons/exp06/1h_sword/exp06_1h_axe_quad_impaler', 0), + (9953, 9953, 'accessories/wieldable_items/weapons/exp06/1h_sword/exp06_1h_sword_arasai_slicer', 0), + (9954, 9954, 'accessories/wieldable_items/weapons/exp06/1h_sword/exp06_1h_sword_crystal_blade_of_chaos', 0), + (9955, 9955, 'accessories/wieldable_items/weapons/exp06/1h_sword/exp06_1h_sword_necrobone', 0), + (9956, 9956, 'accessories/wieldable_items/weapons/exp06/1h_sword/exp06_1h_sword_serpent_tongue', 0), + (9957, 9957, 'accessories/wieldable_items/weapons/exp06/1h_sword/exp06_1h_sword_silver_tip', 0), + (9958, 9958, 'accessories/wieldable_items/weapons/exp06/1h_sword/exp06_1h_sword_skewed_escargo', 0), + (9959, 9959, 'accessories/wieldable_items/weapons/exp06/1h_sword/exp06_1h_sword_soulleach', 0), + (9960, 9960, 'accessories/wieldable_items/weapons/exp06/1h_sword/exp06_1h_sword_spirit_of_the_forest', 0), + (9961, 9961, 'accessories/wieldable_items/weapons/exp06/1h_sword/exp06_1h_sword_tangler', 0), + (9962, 9962, 'accessories/wieldable_items/weapons/exp06/1h_sword/exp06_1h_sword_toothed_cleaver', 0), + (9963, 9963, 'creatures/mounts/horse_armor02/horse01_armor02_lava', 0), + (9964, 9964, 'creatures/mounts/horse_armor02/horse01_armor02_ice', 0), + (9965, 9965, 'accessories/wearable_items/elemental_crowns/elemental_crown_fire_purple', 0), + (9966, 9966, 'accessories/wearable_items/elemental_crowns/elemental_crown_ice_green', 0), + (9967, 9967, 'accessories/wearable_items/elemental_crowns/elemental_crown_ice_purple', 0), + (9968, 9968, 'accessories/wearable_items/elemental_crowns/sparkle_crown_purple', 0), + (9969, 9969, 'accessories/wearable_items/elemental_crowns/star_crown_purple', 0), + (9970, 9970, 'creatures/mounts/horse_armor_warhorse/horse01_armor_warhorse_pinto', 0), + (9971, 9971, 'creatures/mounts/horse_armor_cataphract/horse_armor_cataphract_black', 0), + (9972, 9972, 'creatures/mounts/horse_armor_cataphract/horse_armor_cataphract_blue', 0), + (9973, 9973, 'creatures/mounts/horse_armor_cataphract/horse_armor_cataphract_bronze', 0), + (9974, 9974, 'creatures/mounts/horse_armor_cataphract/horse_armor_cataphract_gold', 0), + (9975, 9975, 'creatures/mounts/horse_armor_cataphract/horse_armor_cataphract_purple', 0), + (9976, 9976, 'creatures/mounts/horse_armor_cataphract/horse_armor_cataphract_red', 0), + (9977, 9977, 'creatures/mounts/horse_armor_cataphract/horse_armor_cataphract_silver', 0), + (9978, 9978, 'creatures/mounts/horse_demon/horse_demon', 0), + (9979, 9979, '_exp05/zones/objects/tradeskill_dungeons/void/dpo_transport_stage1', 0), + (9980, 9980, '_exp05/zones/objects/tradeskill_dungeons/void/dpo_transport_stage2', 0), + (9981, 9981, '_exp05/zones/objects/tradeskill_dungeons/void/dpo_transport_stage3', 0), + (9982, 9982, '_exp05/zones/objects/tradeskill_dungeons/void/dpo_transport_stage4', 0), + (9983, 9983, 'accessories/wearable_items/profesion_hats/centurion_helm/ice_crest/head_centurion_ice_crest', 0), + (9984, 9984, 'accessories/wearable_items/profesion_hats/centurion_helm/ice_crest/ice_crest', 0), + (9985, 9985, 'accessories/wearable_items/profesion_hats/centurion_helm/lightning_crest/head_centurion_lightning_crest', 0), + (9986, 9986, 'accessories/wearable_items/profesion_hats/centurion_helm/lightning_crest/lightning_crest', 0), + (9987, 9987, 'accessories/wearable_items/profesion_hats/centurion_helm/poison_crest/head_centurion_poison_crest', 0), + (9988, 9988, 'accessories/wearable_items/profesion_hats/centurion_helm/poison_crest/poison_crest', 0), + (9989, 9989, 'creatures/mounts/unicorn/unicorn_saddle01_love', 0), + (9990, 9990, 'accessories/wearable_items/profesion_hats/tin_foil_helm/tin_foil_helm_dome', 0), + (9991, 9991, 'accessories/wearable_items/profesion_hats/tin_foil_helm/tin_foil_helm_pointy', 0), + (9992, 9992, 'accessories/wearable_items/cloak/exp06/cloak_community_team', 0), + (9993, 9993, 'staticobjects/liveevent/brew_day/dpo_kal_jug_dwarf01', 0), + (9994, 9994, 'staticobjects/liveevent/bristlebane_day/dpo_cm_arcane_bottle_glass02', 0), + (9995, 9995, 'staticobjects/liveevent/bristlebane_day/dpo_fprt_kitchen_winebottleplain001', 0), + (9996, 9996, 'staticobjects/liveevent/bristlebane_day/dpo_vp_jar0202', 0), + (9997, 9997, 'creatures/monsters/shadowedman_void', 0), + (9998, 9998, 'accessories/wearable_items/cloak/exp06/cloak_burning_dead', 0), + (9999, 9999, 'staticobjects/adv04/vessel_ice', 0), + (10000, 10000, 'staticobjects/bookcases/floor_bookcase_any_fancy_ice', 0), + (10001, 10001, 'staticobjects/brazier/floor_brazier_erudite_steam_ice', 0), + (10002, 10002, 'staticobjects/dressers/floor_dresser_any_fancy_ice', 0), + (10003, 10003, 'staticobjects/pillars/columnsmall002_ice', 0), + (10004, 10004, 'staticobjects/statues/binding_shrine_ice', 0), + (10005, 10005, 'staticobjects/walls/dpo_gf_kel_int_divider_wall01_ice', 0), + (10006, 10006, 'staticobjects/portals/lavastorm_teleporter_ring', 0), + (10007, 10007, 'staticobjects/torches/solro_dragontorch', 0), + (10008, 10008, 'staticobjects/bookcases/solro_bookcase01_dpo', 0), + (10009, 10009, 'staticobjects/bookcases/solro_bookcase02_dpo', 0), + (10010, 10010, 'staticobjects/bookcases/solro_bookcase03_dpo', 0), + (10011, 10011, 'staticobjects/books/solro_book01_dpo', 0), + (10012, 10012, 'staticobjects/books/solro_book01_flat_dpo', 0), + (10013, 10013, 'staticobjects/papers/solro_page01_dpo', 0), + (10014, 10014, 'staticobjects/papers/solro_page02_dpo', 0), + (10015, 10015, 'staticobjects/papers/solro_page03_dpo', 0), + (10016, 10016, 'staticobjects/tables/solro_desk_dpo', 0), + (10017, 10017, 'accessories/wieldable_items/weapons/exp05/1hp_dual_bladed_stiletto_blue', 0), + (10018, 10018, 'staticobjects/cages/sol_cage_closed01', 0), + (10019, 10019, 'staticobjects/crystals/dpo_lavastorm_crystals_group', 0), + (10020, 10020, '_exp06/characters/tool_users/erudite_classic_female/erudite_classic_female', 0), + (10021, 10021, '_exp06/characters/tool_users/erudite_classic_male/erudite_classic_male', 0), + (10022, 10022, 'accessories/wearable_items/_exp06/elf_armor_chain_black_red/chest', 0), + (10023, 10023, 'accessories/wearable_items/_exp06/elf_armor_chain_black_red/elf_armor_pauldron_left', 0), + (10024, 10024, 'accessories/wearable_items/_exp06/elf_armor_chain_black_red/elf_armor_pauldron_right', 0), + (10025, 10025, 'accessories/wearable_items/_exp06/elf_armor_chain_black_red/feet', 0), + (10026, 10026, 'accessories/wearable_items/_exp06/elf_armor_chain_black_red/forearms', 0), + (10027, 10027, 'accessories/wearable_items/_exp06/elf_armor_chain_black_red/hands', 0), + (10028, 10028, 'accessories/wearable_items/_exp06/elf_armor_chain_black_red/head', 0), + (10029, 10029, 'accessories/wearable_items/_exp06/elf_armor_chain_black_red/head_elf_armor', 0), + (10030, 10030, 'accessories/wearable_items/_exp06/elf_armor_chain_black_red/legs', 0), + (10031, 10031, 'accessories/wearable_items/_exp06/elf_armor_chain_black_red/legs_noskirt', 0), + (10032, 10032, 'accessories/wearable_items/_exp06/elf_armor_chain_black_red/shoulders', 0), + (10033, 10033, 'accessories/wearable_items/_exp06/elf_armor_chain_black_red/shoulders_nopauldrons', 0), + (10034, 10034, 'accessories/wearable_items/_exp06/elf_armor_chain_black_red/skirt', 0), + (10035, 10035, 'accessories/wearable_items/_exp06/elf_armor_vanguard_purple_gold/chest', 0), + (10036, 10036, 'accessories/wearable_items/_exp06/elf_armor_vanguard_purple_gold/elf_armor_pauldron_left', 0), + (10037, 10037, 'accessories/wearable_items/_exp06/elf_armor_vanguard_purple_gold/elf_armor_pauldron_right', 0), + (10038, 10038, 'accessories/wearable_items/_exp06/elf_armor_vanguard_purple_gold/feet', 0), + (10039, 10039, 'accessories/wearable_items/_exp06/elf_armor_vanguard_purple_gold/forearms', 0), + (10040, 10040, 'accessories/wearable_items/_exp06/elf_armor_vanguard_purple_gold/hands', 0), + (10041, 10041, 'accessories/wearable_items/_exp06/elf_armor_vanguard_purple_gold/head', 0), + (10042, 10042, 'accessories/wearable_items/_exp06/elf_armor_vanguard_purple_gold/head_elf_armor', 0), + (10043, 10043, 'accessories/wearable_items/_exp06/elf_armor_vanguard_purple_gold/legs', 0), + (10044, 10044, 'accessories/wearable_items/_exp06/elf_armor_vanguard_purple_gold/legs_noskirt', 0), + (10045, 10045, 'accessories/wearable_items/_exp06/elf_armor_vanguard_purple_gold/right', 0), + (10046, 10046, 'accessories/wearable_items/_exp06/elf_armor_vanguard_purple_gold/shoulders', 0), + (10047, 10047, 'accessories/wearable_items/_exp06/elf_armor_vanguard_purple_gold/shoulders_elf_amor', 0), + (10048, 10048, 'accessories/wearable_items/_exp06/elf_armor_vanguard_purple_gold/shoulders_nopauldrons', 0), + (10049, 10049, 'accessories/wearable_items/_exp06/elf_armor_vanguard_purple_gold/skirt', 0), + (10050, 10050, 'staticobjects/tables/dpo_dn_table_books', 0), + (10051, 10051, 'staticobjects/tables/dpo_dn_table_empty', 0), + (10052, 10052, 'staticobjects/torches/floor_torch_solro_tabletorch01', 0), + (10053, 10053, 'accessories/wearable_items/_exp06/predator_chain/chest', 0), + (10054, 10054, 'accessories/wearable_items/_exp06/predator_chain/feet', 0), + (10055, 10055, 'accessories/wearable_items/_exp06/predator_chain/forearms', 0), + (10056, 10056, 'accessories/wearable_items/_exp06/predator_chain/hands', 0), + (10057, 10057, 'accessories/wearable_items/_exp06/predator_chain/head', 0), + (10058, 10058, 'accessories/wearable_items/_exp06/predator_chain/head_predator', 0), + (10059, 10059, 'accessories/wearable_items/_exp06/predator_chain/legs', 0), + (10060, 10060, 'accessories/wearable_items/_exp06/predator_chain/legs_noskirt', 0), + (10061, 10061, 'accessories/wearable_items/_exp06/predator_chain/predator_pauldron_left', 0), + (10062, 10062, 'accessories/wearable_items/_exp06/predator_chain/predator_pauldron_right', 0), + (10063, 10063, 'accessories/wearable_items/_exp06/predator_chain/shoulders', 0), + (10064, 10064, 'accessories/wearable_items/_exp06/predator_chain/shoulders_nopauldrons', 0), + (10065, 10065, 'accessories/wearable_items/_exp06/predator_chain/shoulders_pauldrons_only', 0), + (10066, 10066, 'accessories/wearable_items/_exp06/predator_chain/skirt', 0), + (10067, 10067, 'accessories/wearable_items/_exp06/raven_armor_vanguard/chest', 0), + (10068, 10068, 'accessories/wearable_items/_exp06/raven_armor_vanguard/feet', 0), + (10069, 10069, 'accessories/wearable_items/_exp06/raven_armor_vanguard/forearms', 0), + (10070, 10070, 'accessories/wearable_items/_exp06/raven_armor_vanguard/hands', 0), + (10071, 10071, 'accessories/wearable_items/_exp06/raven_armor_vanguard/head', 0), + (10072, 10072, 'accessories/wearable_items/_exp06/raven_armor_vanguard/head_raven_armor', 0), + (10073, 10073, 'accessories/wearable_items/_exp06/raven_armor_vanguard/legs', 0), + (10074, 10074, 'accessories/wearable_items/_exp06/raven_armor_vanguard/legs_noskirt', 0), + (10075, 10075, 'accessories/wearable_items/_exp06/raven_armor_vanguard/raven_shoulder_left', 0), + (10076, 10076, 'accessories/wearable_items/_exp06/raven_armor_vanguard/raven_shoulder_right', 0), + (10077, 10077, 'accessories/wearable_items/_exp06/raven_armor_vanguard/right', 0), + (10078, 10078, 'accessories/wearable_items/_exp06/raven_armor_vanguard/shoulders', 0), + (10079, 10079, 'accessories/wearable_items/_exp06/raven_armor_vanguard/shoulders_nopauldrons', 0), + (10080, 10080, 'accessories/wearable_items/_exp06/raven_armor_vanguard/shoulders_raven_both', 0), + (10081, 10081, 'accessories/wearable_items/_exp06/raven_armor_vanguard/skirt', 0), + (10082, 10082, 'staticobjects/armor/armor_collection03_dpo', 0), + (10083, 10083, 'staticobjects/goblin_misc/goblin_smokestack03_dpo', 0), + (10084, 10084, 'staticobjects/goblin_misc/goblin_wallsmokestack01_dpo', 0), + (10085, 10085, 'staticobjects/goblin_misc/runnyeye_anvil02_dpo', 0), + (10086, 10086, 'staticobjects/goblin_misc/runnyeye_boxforge01_dpo', 0), + (10087, 10087, 'staticobjects/goblin_misc/runnyeye_coalbin01_dpo', 0), + (10088, 10088, 'staticobjects/goblin_misc/runnyeye_coalbin01_spill_dpo', 0), + (10089, 10089, 'staticobjects/goblin_misc/runnyeye_wallforge02_dpo', 0), + (10090, 10090, 'staticobjects/tools/nbhum_forge01_dpo', 0), + (10091, 10091, 'staticobjects/goblin_misc/goblin_smokestack02_dpo', 0), + (10092, 10092, 'staticobjects/carts/dpo_na_lava_cart01', 0), + (10093, 10093, 'staticobjects/carts/dpo_solro_mincart_rocks', 0), + (10094, 10094, 'staticobjects/flora/dpo_jw_sporepod01', 0), + (10095, 10095, 'staticobjects/rocks/dpo_nh_rock_large01', 0), + (10096, 10096, 'staticobjects/rocks/dpo_nh_rock_large02', 0), + (10097, 10097, 'staticobjects/statues/dpo_nh_statue01', 0), + (10098, 10098, 'staticobjects/torture_chamber/dpo_nh_bone_wall', 0), + (10099, 10099, 'staticobjects/fish/barracuda_dpo', 0), + (10100, 10100, '_exp05/zones/objects/exp05_dun_miragul_upper/glass_orb_ped_collision', 0), + (10101, 10101, 'staticobjects/blacksmith/orc_forge_houseitem', 0), + (10102, 10102, 'staticobjects/guildhall/trophies/floor_aiden', 0), + (10103, 10103, 'staticobjects/guildhall/trophies/floor_behemoth', 0), + (10104, 10104, 'staticobjects/guildhall/trophies/floor_cheldrak', 0), + (10105, 10105, 'staticobjects/guildhall/trophies/floor_clockwork', 0), + (10106, 10106, 'staticobjects/guildhall/trophies/floor_darathar_head', 0), + (10107, 10107, 'staticobjects/guildhall/trophies/floor_djinn_master', 0), + (10108, 10108, 'staticobjects/guildhall/trophies/floor_godking_anuk_head', 0), + (10109, 10109, 'staticobjects/guildhall/trophies/floor_gynok', 0), + (10110, 10110, 'staticobjects/guildhall/trophies/floor_mayong_coffin', 0), + (10111, 10111, 'staticobjects/guildhall/trophies/floor_munzok', 0), + (10112, 10112, 'staticobjects/guildhall/trophies/floor_tarinax_head', 0), + (10113, 10113, 'staticobjects/guildhall/trophies/floor_venekor_head', 0), + (10114, 10114, 'staticobjects/guildhall/trophies/floor_trakanon_head', 0), + (10115, 10115, 'staticobjects/guildhall/trophies/floor_venril', 0), + (10116, 10116, 'staticobjects/guildhall/trophies/floor_vox_head_full', 0), + (10117, 10117, 'staticobjects/guildhall/trophies/floor_vyemm_head', 0), + (10118, 10118, 'staticobjects/guildhall/trophies/floor_wuoshi_head', 0), + (10119, 10119, 'staticobjects/guildhall/trophies/floor_ykesha', 0), + (10120, 10120, 'staticobjects/guildhall/trophies/floor_zarakon_head', 0), + (10121, 10121, 'staticobjects/alter/le_lavastorm_altar01_dpo', 0), + (10122, 10122, 'staticobjects/cages/sol_cage_closed01', 0), + (10123, 10123, 'staticobjects/carts/na_lava_cart01_dpo', 0), + (10124, 10124, 'staticobjects/statues/le_lavastorm_forge01_dpo', 0), + (10125, 10125, 'staticobjects/statues/le_lavastorm_pedestal01_dpo', 0), + (10126, 10126, 'staticobjects/statues/na_statue_01_dpo', 0), + (10127, 10127, 'staticobjects/statues/nh_bone_wall_dpo', 0), + (10128, 10128, 'staticobjects/statues/nh_statue_01_dpo', 0), + (10129, 10129, 'accessories/wieldable_items/misc/weaponsmith_forged_sword', 0), + (10130, 10130, 'accessories/wieldable_items/misc/alchemist_flask', 0), + (10131, 10131, 'accessories/wieldable_items/misc/armorer_tongs', 0), + (10132, 10132, 'accessories/wieldable_items/misc/carpenter_hammer', 0), + (10133, 10133, 'accessories/wieldable_items/misc/jewelers_tongs', 0), + (10134, 10134, 'accessories/wieldable_items/misc/provisioner_skillet', 0), + (10135, 10135, 'accessories/wieldable_items/misc/sage_scroll', 0), + (10136, 10136, 'accessories/wieldable_items/misc/tailor_long_needle', 0), + (10137, 10137, 'accessories/wieldable_items/misc/woodworker_saw', 0), + (10138, 10138, 'accessories/wearable_items/_exp06/shadowknight_skull_vanguard/chest', 0), + (10139, 10139, 'accessories/wearable_items/_exp06/shadowknight_skull_vanguard/feet', 0), + (10140, 10140, 'accessories/wearable_items/_exp06/shadowknight_skull_vanguard/forearms', 0), + (10141, 10141, 'accessories/wearable_items/_exp06/shadowknight_skull_vanguard/hands', 0), + (10142, 10142, 'accessories/wearable_items/_exp06/shadowknight_skull_vanguard/head', 0), + (10143, 10143, 'accessories/wearable_items/_exp06/shadowknight_skull_vanguard/head_shadowknight_skull_vanguard', 0), + (10144, 10144, 'accessories/wearable_items/_exp06/shadowknight_skull_vanguard/legs', 0), + (10145, 10145, 'accessories/wearable_items/_exp06/shadowknight_skull_vanguard/legs_noskirt', 0), + (10146, 10146, 'accessories/wearable_items/_exp06/shadowknight_skull_vanguard/right', 0), + (10147, 10147, 'accessories/wearable_items/_exp06/shadowknight_skull_vanguard/shadowknight_skull_pauldrons_left', 0), + (10148, 10148, 'accessories/wearable_items/_exp06/shadowknight_skull_vanguard/shadowknight_skull_pauldrons_right', 0), + (10149, 10149, 'accessories/wearable_items/_exp06/shadowknight_skull_vanguard/shoulders', 0), + (10150, 10150, 'accessories/wearable_items/_exp06/shadowknight_skull_vanguard/shoulders_nopauldrons', 0), + (10151, 10151, 'accessories/wearable_items/_exp06/shadowknight_skull_vanguard/shoulders_shadowknight_skull_vanguard', 0), + (10152, 10152, 'accessories/wearable_items/_exp06/shadowknight_skull_vanguard/skirt', 0), + (10153, 10153, 'accessories/wearable_items/_exp06/white_paladin_vanguard/chest', 0), + (10154, 10154, 'accessories/wearable_items/_exp06/white_paladin_vanguard/feet', 0), + (10155, 10155, 'accessories/wearable_items/_exp06/white_paladin_vanguard/forearms', 0), + (10156, 10156, 'accessories/wearable_items/_exp06/white_paladin_vanguard/hands', 0), + (10157, 10157, 'accessories/wearable_items/_exp06/white_paladin_vanguard/head', 0), + (10158, 10158, 'accessories/wearable_items/_exp06/white_paladin_vanguard/head_white_paladin_vanguard', 0), + (10159, 10159, 'accessories/wearable_items/_exp06/white_paladin_vanguard/legs', 0), + (10160, 10160, 'accessories/wearable_items/_exp06/white_paladin_vanguard/legs_noskirt', 0), + (10161, 10161, 'accessories/wearable_items/_exp06/white_paladin_vanguard/right', 0), + (10162, 10162, 'accessories/wearable_items/_exp06/white_paladin_vanguard/shoulders', 0), + (10163, 10163, 'accessories/wearable_items/_exp06/white_paladin_vanguard/shoulders_nopauldrons', 0), + (10164, 10164, 'accessories/wearable_items/_exp06/white_paladin_vanguard/shoulders_white_paladin_vanguard', 0), + (10165, 10165, 'accessories/wearable_items/_exp06/white_paladin_vanguard/skirt', 0), + (10166, 10166, 'accessories/wearable_items/_exp06/white_paladin_vanguard/white_paladin_vanguard_pauldron_left', 0), + (10167, 10167, 'accessories/wearable_items/_exp06/white_paladin_vanguard/white_paladin_vanguard_pauldron_right', 0), + (10168, 10168, 'staticobjects/flora/dpo_jw_sporepod01', 0), + (10169, 10169, 'creatures/mounts/warg_mount/warg_armor03_ice', 0), + (10170, 10170, 'creatures/mounts/warg_mount/warg_armor03_lava', 0), + (10171, 10171, 'creatures/mounts/warg_mount/warg_armor03_void', 0), + (10172, 10172, 'creatures/mounts/carpet_lava', 0), + (10173, 10173, 'creatures/mounts/carpet_void', 0), + (10174, 10174, 'creatures/mounts/rhino_mount/rhino_armor01_void', 0), + (10175, 10175, 'creatures/mounts/rhino_mount/rhino_armor01_lava', 0), + (10176, 10176, 'creatures/mounts/rhino_mount/rhino_armor01_ice', 0), + (10177, 10177, 'creatures/mounts/rhino_mount/rhino_armor01_golden', 0), + (10178, 10178, 'creatures/mounts/rhino_mount/rhino_armor01_chrome', 0), + (10179, 10179, 'staticobjects/weapons/dpo_felwithe_bws_staff', 0), + (10180, 10180, 'staticobjects/pictures/eq2book_painting_venekor_dpo', 0), + (10181, 10181, 'accessories/wearable_items/_exp06/shadowknight_skull_vanguard/head_shadowknight_elf_armor', 0), + (10182, 10182, 'accessories/wearable_items/_exp06/shadowknight_skull_vanguard/shadowknight_elf_pauldrons_left', 0), + (10183, 10183, 'accessories/wearable_items/_exp06/shadowknight_skull_vanguard/shadowknight_elf_pauldrons_right', 0), + (10184, 10184, 'accessories/wearable_items/_exp06/shadowknight_skull_vanguard/shoulders_shadowknight_elf_armor', 0), + (10185, 10185, 'accessories/wearable_items/_exp06/elf_armor_leather/shoulders_elf_pauldrons', 0), + (10186, 10186, 'accessories/wearable_items/profesion_hats/warden/plain_metal_circlet/head', 0), + (10187, 10187, 'accessories/wearable_items/_exp06/elf_armor_robe_black_red/chest', 0), + (10188, 10188, 'accessories/wearable_items/_exp06/elf_armor_robe_black_red/chest_with_pauldrons', 0), + (10189, 10189, 'accessories/wearable_items/_exp06/elf_armor_robe_black_red/elf_armor_pauldron_left', 0), + (10190, 10190, 'accessories/wearable_items/_exp06/elf_armor_robe_black_red/elf_armor_pauldron_right', 0), + (10191, 10191, 'accessories/wearable_items/_exp06/elf_armor_robe_black_red/head', 0), + (10192, 10192, 'accessories/wearable_items/_exp06/elf_armor_robe_black_red/hood', 0), + (10193, 10193, 'accessories/wearable_items/_exp06/elf_armor_robe_black_red/pants', 0), + (10194, 10194, 'accessories/wearable_items/_exp06/elf_armor_robe_black_red/skirt', 0), + (10195, 10195, 'accessories/wearable_items/_exp06/elf_armor_robe_blue/chest', 0), + (10196, 10196, 'accessories/wearable_items/_exp06/elf_armor_robe_blue/chest_with_pauldrons', 0), + (10197, 10197, 'accessories/wearable_items/_exp06/elf_armor_robe_blue/elf_armor_pauldron_left', 0), + (10198, 10198, 'accessories/wearable_items/_exp06/elf_armor_robe_blue/elf_armor_pauldron_right', 0), + (10199, 10199, 'accessories/wearable_items/_exp06/elf_armor_robe_blue/head', 0), + (10200, 10200, 'accessories/wearable_items/_exp06/elf_armor_robe_blue/hood', 0), + (10201, 10201, 'accessories/wearable_items/_exp06/elf_armor_robe_blue/pants', 0), + (10202, 10202, 'accessories/wearable_items/_exp06/elf_armor_robe_blue/skirt', 0), + (10203, 10203, 'staticobjects/promo_items/equipment_display_01_nagaefen_dpo', 0), + (10204, 10204, 'accessories/wearable_items/_exp06/elf_armor_chain_gold/chest', 0), + (10205, 10205, 'accessories/wearable_items/_exp06/elf_armor_chain_gold/elf_armor_pauldron_left', 0), + (10206, 10206, 'accessories/wearable_items/_exp06/elf_armor_chain_gold/elf_armor_pauldron_right', 0), + (10207, 10207, 'accessories/wearable_items/_exp06/elf_armor_chain_gold/feet', 0), + (10208, 10208, 'accessories/wearable_items/_exp06/elf_armor_chain_gold/forearms', 0), + (10209, 10209, 'accessories/wearable_items/_exp06/elf_armor_chain_gold/hands', 0), + (10210, 10210, 'accessories/wearable_items/_exp06/elf_armor_chain_gold/head', 0), + (10211, 10211, 'accessories/wearable_items/_exp06/elf_armor_chain_gold/head_elf_armor', 0), + (10212, 10212, 'accessories/wearable_items/_exp06/elf_armor_chain_gold/legs', 0), + (10213, 10213, 'accessories/wearable_items/_exp06/elf_armor_chain_gold/legs_noskirt', 0), + (10214, 10214, 'accessories/wearable_items/_exp06/elf_armor_chain_gold/shoulders', 0), + (10215, 10215, 'accessories/wearable_items/_exp06/elf_armor_chain_gold/shoulders_nopauldrons', 0), + (10216, 10216, 'accessories/wearable_items/_exp06/elf_armor_chain_gold/skirt', 0), + (10217, 10217, 'staticobjects/promo_items/equipment_display_01_nagaefen_dpo', 0), + (10218, 10218, 'staticobjects/soe_wallet/cherry_armoire_dpo', 0), + (10219, 10219, 'staticobjects/soe_wallet/cherry_bench_dpo', 0), + (10220, 10220, 'staticobjects/soe_wallet/cherry_cabinet_dpo', 0), + (10221, 10221, 'staticobjects/soe_wallet/cherry_chair_dpo', 0), + (10222, 10222, 'staticobjects/soe_wallet/cherry_dresser_dpo', 0), + (10223, 10223, 'staticobjects/soe_wallet/cherry_nightstand_dpo', 0), + (10224, 10224, 'staticobjects/soe_wallet/cherry_sleigh_bed_dpo', 0), + (10225, 10225, 'staticobjects/soe_wallet/cherry_table_dpo', 0), + (10226, 10226, 'accessories/wieldable_items/weapons/fist/fist_of_lava', 0), + (10227, 10227, 'accessories/wieldable_items/shields/buckler_shield/brace_wall_of_air', 0), + (10228, 10228, 'accessories/wearable_items/_exp06/elf_armor_chain_black_blue/chest', 0), + (10229, 10229, 'accessories/wearable_items/_exp06/elf_armor_chain_black_blue/elf_armor_pauldron_left', 0), + (10230, 10230, 'accessories/wearable_items/_exp06/elf_armor_chain_black_blue/elf_armor_pauldron_right', 0), + (10231, 10231, 'accessories/wearable_items/_exp06/elf_armor_chain_black_blue/feet', 0), + (10232, 10232, 'accessories/wearable_items/_exp06/elf_armor_chain_black_blue/forearms', 0), + (10233, 10233, 'accessories/wearable_items/_exp06/elf_armor_chain_black_blue/hands', 0), + (10234, 10234, 'accessories/wearable_items/_exp06/elf_armor_chain_black_blue/head', 0), + (10235, 10235, 'accessories/wearable_items/_exp06/elf_armor_chain_black_blue/head_elf_armor', 0), + (10236, 10236, 'accessories/wearable_items/_exp06/elf_armor_chain_black_blue/legs', 0), + (10237, 10237, 'accessories/wearable_items/_exp06/elf_armor_chain_black_blue/legs_noskirt', 0), + (10238, 10238, 'accessories/wearable_items/_exp06/elf_armor_chain_black_blue/shoulders', 0), + (10239, 10239, 'accessories/wearable_items/_exp06/elf_armor_chain_black_blue/shoulders_nopauldrons', 0), + (10240, 10240, 'accessories/wearable_items/_exp06/elf_armor_chain_black_blue/skirt', 0), + (10241, 10241, 'accessories/wieldable_items/shields/buckler_shield/void_portal_buckler', 0), + (10242, 10242, 'accessories/wieldable_items/shields/buckler_shield/brace_void_portal_buckler', 0), + (10243, 10243, 'accessories/wearable_items/_exp06/erudite_classic_armor/erudite_classic_armor_robe_white/chest', 0), + (10244, 10244, 'accessories/wearable_items/_exp06/erudite_classic_armor/erudite_classic_armor_robe_white/head', 0), + (10245, 10245, 'accessories/wearable_items/_exp06/erudite_classic_armor/erudite_classic_armor_robe_white/head_for_classic_erudite', 0), + (10246, 10246, 'accessories/wearable_items/_exp06/erudite_classic_armor/erudite_classic_armor_robe_white/hood', 0), + (10247, 10247, 'accessories/wearable_items/_exp06/erudite_classic_armor/erudite_classic_armor_robe_white/pants', 0), + (10248, 10248, 'accessories/wearable_items/_exp06/erudite_classic_armor/erudite_classic_armor_robe_white/skirt', 0), + (10249, 10249, 'accessories/wearable_items/_exp06/predator_chain/head_predator_no_mask', 0), + (10250, 10250, 'accessories/wearable_items/_exp06/ornate_leather01/chest', 0), + (10251, 10251, 'accessories/wearable_items/_exp06/ornate_leather01/feet', 0), + (10252, 10252, 'accessories/wearable_items/_exp06/ornate_leather01/forearms', 0), + (10253, 10253, 'accessories/wearable_items/_exp06/ornate_leather01/hands', 0), + (10254, 10254, 'accessories/wearable_items/_exp06/ornate_leather01/head', 0), + (10255, 10255, 'accessories/wearable_items/_exp06/ornate_leather01/legs', 0), + (10256, 10256, 'accessories/wearable_items/_exp06/ornate_leather01/legs_noskirt', 0), + (10257, 10257, 'accessories/wearable_items/_exp06/ornate_leather01/shoulders', 0), + (10258, 10258, 'accessories/wearable_items/_exp06/ornate_leather01/skirt', 0), + (10259, 10259, 'accessories/wearable_items/_exp06/ornate_chain01/chest', 0), + (10260, 10260, 'accessories/wearable_items/_exp06/ornate_chain01/feet', 0), + (10261, 10261, 'accessories/wearable_items/_exp06/ornate_chain01/forearms', 0), + (10262, 10262, 'accessories/wearable_items/_exp06/ornate_chain01/head', 0), + (10263, 10263, 'accessories/wearable_items/_exp06/ornate_chain01/legs', 0), + (10264, 10264, 'accessories/wearable_items/_exp06/ornate_chain01/legs_noskirt', 0), + (10265, 10265, 'accessories/wearable_items/_exp06/ornate_chain01/shoulders', 0), + (10266, 10266, 'accessories/wearable_items/_exp06/ornate_chain01/skirt', 0), + (10267, 10267, 'accessories/wearable_items/_exp06/ornate_vanguard01/chest', 0), + (10268, 10268, 'accessories/wearable_items/_exp06/ornate_vanguard01/feet', 0), + (10269, 10269, 'accessories/wearable_items/_exp06/ornate_vanguard01/forearms', 0), + (10270, 10270, 'accessories/wearable_items/_exp06/ornate_vanguard01/hands', 0), + (10271, 10271, 'accessories/wearable_items/_exp06/ornate_vanguard01/head', 0), + (10272, 10272, 'accessories/wearable_items/_exp06/ornate_vanguard01/legs', 0), + (10273, 10273, 'accessories/wearable_items/_exp06/ornate_vanguard01/legs_noskirt', 0), + (10274, 10274, 'accessories/wearable_items/_exp06/ornate_vanguard01/right', 0), + (10275, 10275, 'accessories/wearable_items/_exp06/ornate_vanguard01/shoulders', 0), + (10276, 10276, 'accessories/wearable_items/_exp06/ornate_vanguard01/shoulders_nopauldrons', 0), + (10277, 10277, 'accessories/wearable_items/_exp06/ornate_vanguard01/skirt', 0), + (10278, 10278, 'accessories/wearable_items/_exp06/elf_armor_leather/head_elf_armor_no_mask', 0), + (10279, 10279, 'accessories/wearable_items/leather/plain/unseen_hand_specfx/chest', 0), + (10280, 10280, 'accessories/wearable_items/leather/plain/unseen_hand_specfx/feet', 0), + (10281, 10281, 'accessories/wearable_items/leather/plain/unseen_hand_specfx/forearms', 0), + (10282, 10282, 'accessories/wearable_items/leather/plain/unseen_hand_specfx/hands', 0), + (10283, 10283, 'accessories/wearable_items/leather/plain/unseen_hand_specfx/head', 0), + (10284, 10284, 'accessories/wearable_items/leather/plain/unseen_hand_specfx/legs', 0), + (10285, 10285, 'accessories/wearable_items/leather/plain/unseen_hand_specfx/legs_noskirt', 0), + (10286, 10286, 'accessories/wearable_items/leather/plain/unseen_hand_specfx/pauldron01_leather_heavy_left', 0), + (10287, 10287, 'accessories/wearable_items/leather/plain/unseen_hand_specfx/pauldron01_leather_heavy_right', 0), + (10288, 10288, 'accessories/wearable_items/leather/plain/unseen_hand_specfx/shoulders', 0), + (10289, 10289, 'accessories/wearable_items/leather/plain/unseen_hand_specfx/shoulders_leather_heavy_both', 0), + (10290, 10290, 'accessories/wearable_items/leather/plain/unseen_hand_specfx/skirt', 0), + (10291, 10291, 'accessories/wearable_items/_exp06/ornate_magus01/arms', 0), + (10292, 10292, 'accessories/wearable_items/_exp06/ornate_magus01/chest', 0), + (10293, 10293, 'accessories/wearable_items/_exp06/ornate_magus01/skirt', 0), + (10294, 10294, 'accessories/wearable_items/_exp06/vanguard_iceknight/chest', 0), + (10295, 10295, 'accessories/wearable_items/_exp06/vanguard_iceknight/feet', 0), + (10296, 10296, 'accessories/wearable_items/_exp06/vanguard_iceknight/forearms', 0), + (10297, 10297, 'accessories/wearable_items/_exp06/vanguard_iceknight/hands', 0), + (10298, 10298, 'accessories/wearable_items/_exp06/vanguard_iceknight/head', 0), + (10299, 10299, 'accessories/wearable_items/_exp06/vanguard_iceknight/head_vanguard_iceknight_skull_vanguard', 0), + (10300, 10300, 'accessories/wearable_items/_exp06/vanguard_iceknight/legs', 0), + (10301, 10301, 'accessories/wearable_items/_exp06/vanguard_iceknight/legs_noskirt', 0), + (10302, 10302, 'accessories/wearable_items/_exp06/vanguard_iceknight/right', 0), + (10303, 10303, 'accessories/wearable_items/_exp06/vanguard_iceknight/shoulders', 0), + (10304, 10304, 'accessories/wearable_items/_exp06/vanguard_iceknight/shoulders_nopauldrons', 0), + (10305, 10305, 'accessories/wearable_items/_exp06/vanguard_iceknight/shoulders_vanguard_ice_skull_pauldrons', 0), + (10306, 10306, 'accessories/wearable_items/_exp06/vanguard_iceknight/skirt', 0), + (10307, 10307, 'accessories/wearable_items/_exp06/vanguard_iceknight/vanguard_iceknight_skull_pauldrons_left', 0), + (10308, 10308, 'accessories/wearable_items/_exp06/vanguard_iceknight/vanguard_iceknight_skull_pauldrons_right', 0), + (10309, 10309, 'accessories/wearable_items/profesion_hats/flower_circlet/daisy_circlet_head', 0), + (10310, 10310, 'accessories/wearable_items/profesion_hats/flower_circlet/daisy_red_circlet_head', 0), + (10311, 10311, 'accessories/wearable_items/profesion_hats/flower_circlet/flower_circlet_full_head', 0), + (10312, 10312, 'accessories/wearable_items/profesion_hats/flower_circlet/flower_circlet_full_head1', 0), + (10313, 10313, 'accessories/wearable_items/profesion_hats/flower_circlet/mum_circlet_head', 0), + (10314, 10314, 'accessories/wearable_items/profesion_hats/flower_circlet/mum_green_circlet_head', 0), + (10315, 10315, 'staticobjects/statues/firiona_vie_fanfaire_dpo', 0), + (10316, 10316, 'accessories/wearable_items/profesion_hats/flower_circlet/mum_orange_circlet_head', 0), + (10317, 10317, 'accessories/wearable_items/profesion_hats/flower_circlet/flower_circlet_black', 0), + (10318, 10318, 'accessories/wearable_items/profesion_hats/flower_circlet/mum_red_circlet_head', 0), + (10319, 10319, 'accessories/wearable_items/profesion_hats/flower_circlet/mum_pink_yellow_circlet_head', 0), + (10320, 10320, 'accessories/wearable_items/profesion_hats/flower_circlet/mum_pink_white_circlet_head', 0), + (10321, 10321, 'accessories/wearable_items/profesion_hats/flower_circlet/daisy_yellow_circlet_head', 0), + (10322, 10322, 'accessories/wearable_items/profesion_hats/flower_circlet/daisy_blue_circlet_head', 0), + (10323, 10323, 'accessories/wearable_items/profesion_hats/flower_circlet/daisy_pink_circlet_head', 0), + (10324, 10324, 'staticobjects/crystals/dpo_crystals_02', 0), + (10325, 10325, 'staticobjects/flora/dpo_jw_firecactus', 0), + (10326, 10326, 'staticobjects/tree/dpo_jw_tree_oak_green', 0), + (10327, 10327, 'staticobjects/tree/dpo_ant_ext_oaktree', 0), + (10328, 10328, 'staticobjects/mushroom/mushroom_spotted_lavender', 0), + (10329, 10329, 'staticobjects/portals/dpo_mushroom_ring', 0), + (10330, 10330, 'accessories/wearable_items/_exp06/magic_rune_leather01/chest', 0), + (10331, 10331, 'accessories/wearable_items/_exp06/magic_rune_leather01/feet', 0), + (10332, 10332, 'accessories/wearable_items/_exp06/magic_rune_leather01/forearms', 0), + (10333, 10333, 'accessories/wearable_items/_exp06/magic_rune_leather01/hands', 0), + (10334, 10334, 'accessories/wearable_items/_exp06/magic_rune_leather01/head', 0), + (10335, 10335, 'accessories/wearable_items/_exp06/magic_rune_leather01/legs', 0), + (10336, 10336, 'accessories/wearable_items/_exp06/magic_rune_leather01/legs_noskirt', 0), + (10337, 10337, 'accessories/wearable_items/_exp06/magic_rune_leather01/shoulders', 0), + (10338, 10338, 'accessories/wearable_items/_exp06/magic_rune_leather01/skirt', 0), + (10339, 10339, 'accessories/wearable_items/_exp06/frostrune_armor_vanguard/chest', 0), + (10340, 10340, 'accessories/wearable_items/_exp06/frostrune_armor_vanguard/feet', 0), + (10341, 10341, 'accessories/wearable_items/_exp06/frostrune_armor_vanguard/forearms', 0), + (10342, 10342, 'accessories/wearable_items/_exp06/frostrune_armor_vanguard/frostrune_pauldron_left', 0), + (10343, 10343, 'accessories/wearable_items/_exp06/frostrune_armor_vanguard/frostrune_pauldron_right', 0), + (10344, 10344, 'accessories/wearable_items/_exp06/frostrune_armor_vanguard/hands', 0), + (10345, 10345, 'accessories/wearable_items/_exp06/frostrune_armor_vanguard/head', 0), + (10346, 10346, 'accessories/wearable_items/_exp06/frostrune_armor_vanguard/head_frostrune_epic', 0), + (10347, 10347, 'accessories/wearable_items/_exp06/frostrune_armor_vanguard/legs', 0), + (10348, 10348, 'accessories/wearable_items/_exp06/frostrune_armor_vanguard/legs_noskirt', 0), + (10349, 10349, 'accessories/wearable_items/_exp06/frostrune_armor_vanguard/right', 0), + (10350, 10350, 'accessories/wearable_items/_exp06/frostrune_armor_vanguard/shoulders', 0), + (10351, 10351, 'accessories/wearable_items/_exp06/frostrune_armor_vanguard/shoulders_frostrune_epic', 0), + (10352, 10352, 'accessories/wearable_items/_exp06/frostrune_armor_vanguard/shoulders_nopauldrons', 0), + (10353, 10353, 'accessories/wearable_items/_exp06/frostrune_armor_vanguard/skirt', 0), + (10354, 10354, '_exp05/monsters/skull_wisp_blue', 0), + (10355, 10355, '_exp05/monsters/skull_wisp_green', 0), + (10356, 10356, '_exp05/monsters/skull_wisp_purple', 0), + (10357, 10357, 'staticobjects/portals/gorowyn_teleporter', 0), + (10358, 10358, 'accessories/wearable_items/profesion_hats/dwarf_vanguard_helm/head_dwarf_armor_vanguard', 0), + (10359, 10359, 'accessories/wearable_items/profesion_hats/snow_bunny_hat/head_black_bunny_hat', 0), + (10360, 10360, 'accessories/wearable_items/profesion_hats/snow_bunny_hat/head_green_bunny_hat', 0), + (10361, 10361, 'accessories/wearable_items/profesion_hats/snow_bunny_hat/head_grey_bunny_hat', 0), + (10362, 10362, 'accessories/wearable_items/profesion_hats/snow_bunny_hat/head_pink_bunny_hat', 0), + (10363, 10363, 'accessories/wearable_items/profesion_hats/snow_bunny_hat/head_red_bunny_hat', 0), + (10364, 10364, 'accessories/wearable_items/profesion_hats/snow_bunny_hat/head_snow_bunny_hat', 0), + (10365, 10365, 'accessories/wearable_items/profesion_hats/snow_bunny_hat/head_tan_bunny_hat', 0), + (10366, 10366, 'accessories/wearable_items/_exp06/ornate_chain01/hands', 0), + (10367, 10367, 'accessories/wearable_items/_exp06/magic_rune_chain01/chest', 0), + (10368, 10368, 'accessories/wearable_items/_exp06/magic_rune_chain01/feet', 0), + (10369, 10369, 'accessories/wearable_items/_exp06/magic_rune_chain01/forearms', 0), + (10370, 10370, 'accessories/wearable_items/_exp06/magic_rune_chain01/hands', 0), + (10371, 10371, 'accessories/wearable_items/_exp06/magic_rune_chain01/head', 0), + (10372, 10372, 'accessories/wearable_items/_exp06/magic_rune_chain01/legs', 0), + (10373, 10373, 'accessories/wearable_items/_exp06/magic_rune_chain01/legs_noskirt', 0), + (10374, 10374, 'accessories/wearable_items/_exp06/magic_rune_chain01/shoulders', 0), + (10375, 10375, 'accessories/wearable_items/_exp06/magic_rune_chain01/skirt', 0), + (10376, 10376, 'staticobjects/liveevent/cityfestivals/dpo_dw_obj_chandelier_gothic01', 0), + (10377, 10377, 'staticobjects/liveevent/cityfestivals/dpo_floating_lantern_blue', 0), + (10378, 10378, 'staticobjects/liveevent/cityfestivals/dpo_floating_lantern_green', 0), + (10379, 10379, 'staticobjects/liveevent/cityfestivals/dpo_floating_lantern_purple', 0), + (10380, 10380, 'staticobjects/liveevent/cityfestivals/dpo_floating_lantern_red', 0), + (10381, 10381, 'staticobjects/liveevent/cityfestivals/dpo_floating_lantern_yellow', 0), + (10382, 10382, 'staticobjects/liveevent/cityfestivals/dpo_nk_obj_banner_cloth', 0), + (10383, 10383, 'accessories/wearable_items/_exp08/dragon_armor/leather2_slate/chest', 1096), + (10384, 10384, 'staticobjects/liveevent/cityfestivals/gf_elf_bed01', 0), + (10385, 10385, 'staticobjects/liveevent/cityfestivals/gf_elf_chair02', 0), + (10386, 10386, 'staticobjects/liveevent/cityfestivals/gf_elf_chair02_yellow', 0), + (10387, 10387, 'staticobjects/liveevent/cityfestivals/gf_elf_table_bedside01', 0), + (10388, 10388, 'accessories/wearable_items/_exp08/dragon_armor/leather2_slate/feet', 1096), + (10389, 10389, 'staticobjects/liveevent/cityfestivals/kel_banner_guild_protectors01', 0), + (10390, 10390, 'accessories/wearable_items/_exp08/dragon_armor/leather2_slate/forearms', 1096), + (10391, 10391, 'staticobjects/liveevent/cityfestivals/kel_banner_standing_protectors01', 0), + (10392, 10392, 'staticobjects/liveevent/cityfestivals/nk_obj_chair_bar_stool01', 0), + (10393, 10393, 'staticobjects/liveevent/cityfestivals/nk_obj_chair_simple01', 0), + (10394, 10394, 'accessories/wearable_items/_exp08/dragon_armor/leather2_slate/hands', 1096), + (10395, 10395, 'accessories/wearable_items/_exp06/frostrune_armor_leather/chest', 0), + (10396, 10396, 'accessories/wearable_items/_exp06/frostrune_armor_leather/feet', 0), + (10397, 10397, 'accessories/wearable_items/_exp06/frostrune_armor_leather/forearms', 0), + (10398, 10398, 'accessories/wearable_items/_exp06/frostrune_armor_leather/frostrune_leather_epic_pauldron_left', 0), + (10399, 10399, 'accessories/wearable_items/_exp06/frostrune_armor_leather/frostrune_leather_epic_pauldron_right', 0), + (10400, 10400, 'accessories/wearable_items/_exp06/frostrune_armor_leather/hands', 0), + (10401, 10401, 'accessories/wearable_items/_exp06/frostrune_armor_leather/head', 0), + (10402, 10402, 'accessories/wearable_items/_exp06/frostrune_armor_leather/head_frostrune_leather_epic', 0), + (10403, 10403, 'accessories/wearable_items/_exp06/frostrune_armor_leather/legs', 0), + (10404, 10404, 'accessories/wearable_items/_exp06/frostrune_armor_leather/legs_noskirt', 0), + (10405, 10405, 'accessories/wearable_items/_exp06/frostrune_armor_leather/shoulders', 0), + (10406, 10406, 'accessories/wearable_items/_exp06/frostrune_armor_leather/shoulders_nopauldrons', 0), + (10407, 10407, 'accessories/wearable_items/_exp06/frostrune_armor_leather/skirt', 0), + (10408, 10408, 'accessories/wearable_items/_exp06/frostrune_armor_chain/chest', 0), + (10409, 10409, 'accessories/wearable_items/_exp06/frostrune_armor_chain/feet', 0), + (10410, 10410, 'accessories/wearable_items/_exp06/frostrune_armor_chain/forearms', 0), + (10411, 10411, 'accessories/wearable_items/_exp06/frostrune_armor_chain/frostrune_chain_epic_pauldron_left', 0), + (10412, 10412, 'accessories/wearable_items/_exp06/frostrune_armor_chain/frostrune_chain_epic_pauldron_right', 0), + (10413, 10413, 'accessories/wearable_items/_exp06/frostrune_armor_chain/hands', 0), + (10414, 10414, 'accessories/wearable_items/_exp06/frostrune_armor_chain/head', 0), + (10415, 10415, 'accessories/wearable_items/_exp06/frostrune_armor_chain/head_frostrune_chain_epic', 0), + (10416, 10416, 'accessories/wearable_items/_exp06/frostrune_armor_chain/legs', 0), + (10417, 10417, 'accessories/wearable_items/_exp06/frostrune_armor_chain/legs_noskirt', 0), + (10418, 10418, 'accessories/wearable_items/_exp06/frostrune_armor_chain/shoulders', 0), + (10419, 10419, 'accessories/wearable_items/_exp06/frostrune_armor_chain/shoulders_nopauldrons', 0), + (10420, 10420, 'accessories/wearable_items/_exp06/frostrune_armor_chain/skirt', 0), + (10421, 10421, 'accessories/wearable_items/_exp06/frostrune_armor_robe/chest', 0), + (10422, 10422, 'accessories/wearable_items/_exp06/frostrune_armor_robe/chest_with_pauldrons', 0), + (10423, 10423, 'accessories/wearable_items/_exp06/frostrune_armor_robe/frostrune_armor_pauldron_left', 0), + (10424, 10424, 'accessories/wearable_items/_exp06/frostrune_armor_robe/frostrune_armor_pauldron_right', 0), + (10425, 10425, 'accessories/wearable_items/_exp06/frostrune_armor_robe/head', 0), + (10426, 10426, 'accessories/wearable_items/_exp06/frostrune_armor_robe/hood', 0), + (10427, 10427, 'accessories/wearable_items/_exp06/frostrune_armor_robe/pants', 0), + (10428, 10428, 'accessories/wearable_items/_exp06/frostrune_armor_robe/skirt', 0), + (10429, 10429, 'accessories/wearable_items/robe_02/pants', 0), + (10430, 10430, 'creatures/monsters/lion_snow', 0), + (10431, 10431, 'creatures/monsters/lioness_snow', 0), + (10432, 10432, 'staticobjects/rocks/dpo_eh_rock_medium05', 0), + (10433, 10433, 'accessories/wieldable_items/weapons/staff/firiona_vie_style_wand/firiona_vie_style_wand', 0), + (10434, 10434, 'accessories/wearable_items/_exp06/magic_rune_robe01/chest', 0), + (10435, 10435, 'accessories/wearable_items/_exp06/magic_rune_robe01/head', 0), + (10436, 10436, 'accessories/wearable_items/_exp06/magic_rune_robe01/hood', 0), + (10437, 10437, 'accessories/wearable_items/_exp06/magic_rune_robe01/pants', 0), + (10438, 10438, 'accessories/wearable_items/_exp06/magic_rune_robe01/skirt', 0), + (10439, 10439, 'accessories/wearable_items/profesion_hats/firiona_vie_tiara/head_firiona_vie_tiara', 0), + (10440, 10440, 'creatures/mounts/carpet_shamrock', 0), + (10441, 10441, 'creatures/mounts/carpet_leaf', 0), + (10442, 10442, 'creatures/mounts/unicorn/unicorn_saddle01_autumnstrider', 0), + (10443, 10443, 'creatures/mounts/unicorn/unicorn_saddle01_springstrider', 0), + (10444, 10444, 'staticobjects/liveevent/cityfestivals/dw_hehome_streetlamp01', 0), + (10445, 10445, 'staticobjects/liveevent/cityfestivals/dpo_tapestry_design_void_energy', 0), + (10446, 10446, 'staticobjects/liveevent/cityfestivals/goro_obj_lantern_green_pfx_col', 0), + (10447, 10447, 'staticobjects/liveevent/cityfestivals/goro_obj_lantern_pink_pfx_col', 0), + (10448, 10448, 'staticobjects/tcg/tcg_ice_cream_tapestry', 0), + (10449, 10449, 'staticobjects/tcg/tcg_tapestry_kaltuk', 0), + (10450, 10450, 'staticobjects/tcg/tcg_tapestry_nurgg', 0), + (10451, 10451, 'staticobjects/crystals/dpo_crystals_03', 0), + (10452, 10452, 'staticobjects/flora/dpo_ceiling_harvesting_roots_tier03', 0), + (10453, 10453, 'staticobjects/flora/dpo_gf_flora_mushroom_huge02', 0), + (10454, 10454, 'staticobjects/flora/dpo_gf_flora_mushroom_small01', 0), + (10455, 10455, 'staticobjects/flora/dpo_ow_stumpwell01', 0), + (10456, 10456, 'staticobjects/flora/dpo_wall_gf_flora_r02_vine01', 0), + (10457, 10457, 'staticobjects/flora/dpo_ceiling_lf_flora_rm04_vine01', 0), + (10458, 10458, 'staticobjects/flora/dpo_lf_flora_rm04_vine01', 0), + (10459, 10459, 'staticobjects/flora/dpo_gf_flora_r02_vine02_flowers03', 0), + (10460, 10460, 'staticobjects/flora/dpo_lf_flora_rm01_vine01', 0), + (10461, 10461, 'staticobjects/flora/dpo_lf_flora_rm08_vine02_flower', 0), + (10462, 10462, 'accessories/wearable_items/_exp06/magic_rune_magus01/arms', 0), + (10463, 10463, 'accessories/wearable_items/_exp06/magic_rune_magus01/chest', 0), + (10464, 10464, 'accessories/wearable_items/_exp06/magic_rune_magus01/legs', 0), + (10465, 10465, 'accessories/wearable_items/_exp06/magic_rune_magus01/skirt', 0), + (10466, 10466, '_exp04/zones/objects/kurns_tower/kt_elevator_switch_01', 0), + (10467, 10467, 'creatures/mounts/horse_frost_unicorn/horse_frost_unicorn', 0), + (10468, 10468, 'creatures/pets/baby_dragon_evil_black', 0), + (10469, 10469, 'creatures/pets/baby_dragon_evil_dark', 0), + (10470, 10470, 'creatures/pets/baby_dragon_evil_red', 0), + (10471, 10471, 'creatures/pets/baby_dragon_good_blue', 0), + (10472, 10472, 'creatures/pets/baby_dragon_good_green', 0), + (10473, 10473, 'creatures/pets/baby_dragon_good_pink', 0), + (10474, 10474, 'accessories/wearable_items/_exp06/ornate_magus01/legs', 0), + (10475, 10475, 'accessories/wearable_items/cloak/exp06/cloak_kaladim_brew', 0), + (10476, 10476, 'accessories/wearable_items/cloak/exp06/cloak_shard_of_love', 0), + (10477, 10477, 'accessories/wearable_items/cloak/exp06/cloak_arachnid', 0), + (10478, 10478, 'accessories/wearable_items/cloak/exp06/cloak_cityfest_reward', 0), + (10479, 10479, 'accessories/wearable_items/_exp06/magic_rune_vanguard01/chest', 0), + (10480, 10480, 'accessories/wearable_items/_exp06/magic_rune_vanguard01/feet', 0), + (10481, 10481, 'accessories/wearable_items/_exp06/magic_rune_vanguard01/forearms', 0), + (10482, 10482, 'accessories/wearable_items/_exp06/magic_rune_vanguard01/hands', 0), + (10483, 10483, 'accessories/wearable_items/_exp06/magic_rune_vanguard01/head', 0), + (10484, 10484, 'accessories/wearable_items/_exp06/magic_rune_vanguard01/legs', 0), + (10485, 10485, 'accessories/wearable_items/_exp06/magic_rune_vanguard01/legs_noskirt', 0), + (10486, 10486, 'accessories/wearable_items/_exp06/magic_rune_vanguard01/right', 0), + (10487, 10487, 'accessories/wearable_items/_exp06/magic_rune_vanguard01/shoulders', 0), + (10488, 10488, 'accessories/wearable_items/_exp06/magic_rune_vanguard01/shoulders_nopauldrons', 0), + (10489, 10489, 'accessories/wearable_items/_exp06/magic_rune_vanguard01/skirt', 0), + (10490, 10490, 'accessories/wearable_items/cloak/exp06/cloak_dark_rider', 0), + (10491, 10491, 'accessories/wearable_items/cloak/exp06/cloak_boots_and_wings', 0), + (10492, 10492, 'accessories/wearable_items/_exp06/magic_rune_vanguard_plain/chest', 0), + (10493, 10493, 'accessories/wearable_items/_exp06/magic_rune_vanguard_plain/feet', 0), + (10494, 10494, 'accessories/wearable_items/_exp06/magic_rune_vanguard_plain/forearms', 0), + (10495, 10495, 'accessories/wearable_items/_exp06/magic_rune_vanguard_plain/hands', 0), + (10496, 10496, 'accessories/wearable_items/_exp06/magic_rune_vanguard_plain/head', 0), + (10497, 10497, 'accessories/wearable_items/_exp06/magic_rune_vanguard_plain/legs', 0), + (10498, 10498, 'accessories/wearable_items/_exp06/magic_rune_vanguard_plain/legs_noskirt', 0), + (10499, 10499, 'accessories/wearable_items/_exp06/magic_rune_vanguard_plain/right', 0), + (10500, 10500, 'accessories/wearable_items/_exp06/magic_rune_vanguard_plain/shoulders', 0), + (10501, 10501, 'accessories/wearable_items/_exp06/magic_rune_vanguard_plain/shoulders_nopauldrons', 0), + (10502, 10502, 'accessories/wearable_items/_exp06/magic_rune_vanguard_plain/skirt', 0), + (10503, 10503, 'creatures/tu/dragonfly_faerie_white', 0), + (10504, 10504, 'accessories/wearable_items/cloak/void_cloaks/void_cloak_fighter', 0), + (10505, 10505, 'accessories/wearable_items/cloak/void_cloaks/void_cloak_mage', 0), + (10506, 10506, 'accessories/wearable_items/cloak/void_cloaks/void_cloak_priest', 0), + (10507, 10507, 'accessories/wearable_items/cloak/void_cloaks/void_cloak_range_scout', 0), + (10508, 10508, 'accessories/wearable_items/cloak/void_cloaks/void_cloak_scout', 0), + (10509, 10509, 'accessories/wearable_items/cloak/void_cloaks/void_cloak_summoner', 0), + (10510, 10510, 'creatures/monsters/willowisp_arasi_spirit_bud', 0), + (10511, 10511, 'creatures/monsters/willowisp_fae_spirit_bud', 0), + (10512, 10512, 'creatures/monsters/willowisp_sparkle_purple', 0), + (10513, 10513, 'creatures/monsters/willowisp_sparkle_red', 0), + (10514, 10514, 'creatures/monsters/willowisp_clockwork', 0), + (10515, 10515, 'creatures/monsters/willowisp_faydark_autumn', 0), + (10516, 10516, 'creatures/monsters/willowisp_faydark_spring', 0), + (10517, 10517, 'creatures/monsters/willowisp_rose_petal_red', 0), + (10518, 10518, 'creatures/monsters/willowisp_rose_petal_yellow', 0), + (10519, 10519, 'accessories/wearable_items/_exp06/magic_rune_robe_plain/chest', 0), + (10520, 10520, 'accessories/wearable_items/_exp06/magic_rune_robe_plain/head', 0), + (10521, 10521, 'accessories/wearable_items/_exp06/magic_rune_robe_plain/hood', 0), + (10522, 10522, 'accessories/wearable_items/_exp06/magic_rune_robe_plain/pants', 0), + (10523, 10523, 'accessories/wearable_items/_exp06/magic_rune_robe_plain/skirt', 0), + (10524, 10524, 'accessories/wearable_items/_exp06/magic_rune_magus_plain/arms', 0), + (10525, 10525, 'accessories/wearable_items/_exp06/magic_rune_magus_plain/chest', 0), + (10526, 10526, 'accessories/wearable_items/_exp06/magic_rune_magus_plain/legs', 0), + (10527, 10527, 'accessories/wearable_items/_exp06/magic_rune_magus_plain/skirt', 0), + (10528, 10528, 'creatures/monsters/clockwork_gazer', 0), + (10529, 10529, 'creatures/monsters/clockwork_rustysteel_gazer', 0), + (10530, 10530, 'creatures/monsters/clockwork_steel_gazer', 0), + (10531, 10531, 'creatures/monsters/mummified_gazer', 0), + (10532, 10532, 'creatures/monsters/gazer', 0), + (10533, 10533, 'accessories/wieldable_items/weapons/great_sword/dragon_katana/dragon_katana_ornate_blue_fx', 0), + (10534, 10534, 'accessories/wieldable_items/weapons/great_sword/dragon_katana/dragon_katana_ornate_green_fx', 0), + (10535, 10535, 'accessories/wieldable_items/weapons/great_sword/dragon_katana/dragon_katana_ornate_purple_fx', 0), + (10536, 10536, 'accessories/wieldable_items/weapons/great_sword/dragon_katana/dragon_katana_ornate_yellow_fx', 0), + (10537, 10537, 'accessories/wearable_items/_exp06/magic_rune_leather_plain/chest', 0), + (10538, 10538, 'accessories/wearable_items/_exp06/magic_rune_leather_plain/feet', 0), + (10539, 10539, 'accessories/wearable_items/_exp06/magic_rune_leather_plain/forearms', 0), + (10540, 10540, 'accessories/wearable_items/_exp06/magic_rune_leather_plain/hands', 0), + (10541, 10541, 'accessories/wearable_items/_exp06/magic_rune_leather_plain/head', 0), + (10542, 10542, 'accessories/wearable_items/_exp06/magic_rune_leather_plain/legs', 0), + (10543, 10543, 'accessories/wearable_items/_exp06/magic_rune_leather_plain/legs_noskirt', 0), + (10544, 10544, 'accessories/wearable_items/_exp06/magic_rune_leather_plain/shoulders', 0), + (10545, 10545, 'accessories/wearable_items/_exp06/magic_rune_leather_plain/skirt', 0), + (10546, 10546, 'staticobjects/liveevent/tinkerfest/dpo_sfm_bed_single01', 0), + (10547, 10547, 'staticobjects/liveevent/tinkerfest/dpo_sfm_bench_ornate01', 0), + (10548, 10548, 'staticobjects/liveevent/tinkerfest/dpo_sfm_bench_ornate01_long', 0), + (10549, 10549, 'staticobjects/liveevent/tinkerfest/dpo_sfm_bookcase_wood01', 0), + (10550, 10550, 'staticobjects/liveevent/tinkerfest/dpo_sfm_chair_ornate01', 0), + (10551, 10551, 'staticobjects/liveevent/tinkerfest/dpo_sfm_chair_ornate02', 0), + (10552, 10552, 'staticobjects/liveevent/tinkerfest/dpo_sfm_chest_ornate01', 0), + (10553, 10553, 'staticobjects/liveevent/tinkerfest/dpo_sfm_chest_ornate02', 0), + (10554, 10554, 'staticobjects/flora/dpo_gf_plant_cattail02', 0), + (10555, 10555, 'staticobjects/liveevent/tinkerfest/dpo_inna_landing_governor01', 0), + (10556, 10556, 'staticobjects/liveevent/tinkerfest/dpo_orcishwastes_smokestack01', 0), + (10557, 10557, 'staticobjects/liveevent/tinkerfest/dpo_sfm_gear_large01_grey', 0), + (10558, 10558, 'staticobjects/liveevent/tinkerfest/dpo_sfm_gear_large01_red', 0), + (10559, 10559, 'staticobjects/liveevent/tinkerfest/dpo_sfm_gear_large01_red_rotating', 0), + (10560, 10560, 'staticobjects/liveevent/tinkerfest/dpo_sfm_gear_large02_ronium_upright', 0), + (10561, 10561, 'staticobjects/liveevent/tinkerfest/dpo_sfm_gear_large02_yellow_upright', 0), + (10562, 10562, 'accessories/wearable_items/_exp08/dragon_armor/leather2_slate/head', 1096), + (10563, 10563, 'accessories/wearable_items/_exp08/dragon_armor/leather2_slate/legs', 1096), + (10564, 10564, 'staticobjects/liveevent/tinkerfest/dpo_sfm_gear_medium01_red', 0), + (10565, 10565, 'staticobjects/liveevent/tinkerfest/dpo_sfm_gear_medium02_grey', 0), + (10566, 10566, 'staticobjects/liveevent/tinkerfest/dpo_sfm_gear_medium02_red', 0), + (10567, 10567, 'staticobjects/liveevent/tinkerfest/dpo_sfm_gear_medium02_red_rotating', 0), + (10568, 10568, 'staticobjects/liveevent/tinkerfest/dpo_sfm_gear_medium02_yellow', 0), + (10569, 10569, 'staticobjects/liveevent/tinkerfest/dpo_sfm_gear_medium02_yellow_rotating', 0), + (10570, 10570, 'staticobjects/liveevent/tinkerfest/dpo_sfm_gear_small01_red', 0), + (10571, 10571, 'staticobjects/liveevent/tinkerfest/dpo_sfm_gear_small01_red_rotating', 0), + (10572, 10572, 'staticobjects/liveevent/tinkerfest/dpo_sfm_gear_small01_yellow', 0), + (10573, 10573, 'staticobjects/liveevent/tinkerfest/dpo_sfm_gear_small01_yellow_rotating', 0), + (10574, 10574, 'staticobjects/liveevent/tinkerfest/dpo_sfm_gearpiece01_yellow', 0), + (10575, 10575, 'staticobjects/liveevent/tinkerfest/dpo_sfm_lights_gnome_lamp01', 0), + (10576, 10576, 'staticobjects/liveevent/tinkerfest/dpo_sfm_lights_gnome_lantern01', 0), + (10577, 10577, 'staticobjects/liveevent/tinkerfest/dpo_sfm_lightsource_freestanding01', 0), + (10578, 10578, 'staticobjects/liveevent/tinkerfest/dpo_sfm_lightsource_freestanding02', 0), + (10579, 10579, 'staticobjects/liveevent/tinkerfest/dpo_sfm_lightsource_freestanding03', 0), + (10580, 10580, 'staticobjects/liveevent/tinkerfest/dpo_sfm_lightsource_freestanding04', 0), + (10581, 10581, 'staticobjects/liveevent/tinkerfest/dpo_sfm_lightsource_lantern01', 0), + (10582, 10582, 'staticobjects/liveevent/tinkerfest/dpo_sfm_lightsource_lantern02', 0), + (10583, 10583, 'staticobjects/liveevent/tinkerfest/dpo_sfm_spring_upright01_red', 0), + (10584, 10584, 'staticobjects/liveevent/tinkerfest/dpo_sfm_lightsource_mine01', 0), + (10585, 10585, 'staticobjects/liveevent/tinkerfest/dpo_sfm_lightsource_mine02', 0), + (10586, 10586, 'staticobjects/liveevent/tinkerfest/dpo_soleye_gnome_rockpick02', 0), + (10587, 10587, 'staticobjects/liveevent/tinkerfest/dpo_soleye_lightpost01', 0), + (10588, 10588, 'staticobjects/liveevent/tinkerfest/dpo_soleye_standlamp01', 0), + (10589, 10589, 'staticobjects/liveevent/tinkerfest/dpo_soleye_walllamp01', 0), + (10590, 10590, 'staticobjects/scrolls/dpo_gf_scroll_single01', 0), + (10591, 10591, 'staticobjects/scrolls/dpo_gf_scrolls_parchmentcombo01', 0), + (10592, 10592, 'staticobjects/liveevent/tinkerfest/dpo_sfm_table_wood01', 0), + (10593, 10593, 'staticobjects/liveevent/tinkerfest/dpo_sfm_table_woodround01', 0), + (10594, 10594, 'staticobjects/liveevent/tinkerfest/dpo_sfm_gnome_mug01', 0), + (10595, 10595, 'accessories/wieldable_items/weapons/exp06/2h_sword/exp06_2h_axe_jagged_frostrune', 0), + (10596, 10596, 'accessories/wieldable_items/soga_weapons/unique4/demon_eye_red_purple', 0), + (10597, 10597, 'accessories/wearable_items/cloak/exp06/cloak_magic_rune', 0), + (10598, 10598, 'accessories/wearable_items/cloak/exp06/cloak_frostrune', 0), + (10599, 10599, 'accessories/wearable_items/_exp06/dwarf_armor_vanguard/chest', 0), + (10600, 10600, 'accessories/wearable_items/_exp06/dwarf_armor_vanguard/chest_dwarf_vanguard_plate', 0), + (10601, 10601, 'accessories/wearable_items/_exp06/dwarf_armor_vanguard/dwarf_armor_vanguard_pauldron_left', 0), + (10602, 10602, 'accessories/wearable_items/_exp06/dwarf_armor_vanguard/dwarf_armor_vanguard_pauldron_right', 0), + (10603, 10603, 'accessories/wearable_items/_exp06/dwarf_armor_vanguard/dwarf_vanguard_chest_plate', 0), + (10604, 10604, 'accessories/wearable_items/_exp06/dwarf_armor_vanguard/feet', 0), + (10605, 10605, 'accessories/wearable_items/_exp06/dwarf_armor_vanguard/forearms', 0), + (10606, 10606, 'accessories/wearable_items/_exp06/dwarf_armor_vanguard/hands', 0), + (10607, 10607, 'accessories/wearable_items/_exp06/dwarf_armor_vanguard/head', 0), + (10608, 10608, 'accessories/wearable_items/_exp06/dwarf_armor_vanguard/legs', 0), + (10609, 10609, 'accessories/wearable_items/_exp06/dwarf_armor_vanguard/legs_noskirt', 0), + (10610, 10610, 'accessories/wearable_items/_exp06/dwarf_armor_vanguard/right', 0), + (10611, 10611, 'accessories/wearable_items/_exp06/dwarf_armor_vanguard/shoulders', 0), + (10612, 10612, 'accessories/wearable_items/_exp06/dwarf_armor_vanguard/shoulders_dwarf_armor_vanguard', 0), + (10613, 10613, 'accessories/wearable_items/_exp06/dwarf_armor_vanguard/shoulders_nopauldrons', 0), + (10614, 10614, 'accessories/wearable_items/_exp06/dwarf_armor_vanguard/skirt', 0), + (10615, 10615, 'accessories/wearable_items/_exp08/dragon_armor/leather2_slate/legs_noskirt', 1096), + (10616, 10616, 'accessories/wearable_items/_exp08/dragon_armor/leather2_slate/shoulders', 1096), + (10617, 10617, 'staticobjects/liveevent/cityfestivals/dpo_fprt_door_expensive01', 0), + (10618, 10618, 'staticobjects/liveevent/cityfestivals/dpo_fprt_door_fancy01', 0), + (10619, 10619, 'accessories/wearable_items/_exp08/dragon_armor/leather2_slate/shoulders_epic', 1096), + (10620, 10620, 'accessories/wearable_items/_exp08/dragon_armor/robe_blue/skirt', 1096), + (10621, 10621, 'accessories/wearable_items/_exp08/dragon_armor/robe_blue/chest', 1096), + (10622, 10622, 'staticobjects/liveevent/tinkerfest/dpo_gnome_mech03_gears_01', 0), + (10623, 10623, 'staticobjects/liveevent/tinkerfest/dpo_hum_genericmarker003', 0), + (10624, 10624, 'staticobjects/liveevent/tinkerfest/dpo_hum_genericmarker003_wall', 0), + (10625, 10625, 'staticobjects/liveevent/tinkerfest/dpo_qey_cog_flat', 0), + (10626, 10626, 'staticobjects/liveevent/tinkerfest/dpo_sfm_gear_medium01_red_rotating', 0), + (10627, 10627, 'staticobjects/liveevent/tinkerfest/dpo_sfm_gear_medium01_red_rotating', 0), + (10628, 10628, 'staticobjects/liveevent/tinkerfest/dpo_sfm_gear_medium02_grey_rotating', 0), + (10629, 10629, 'staticobjects/liveevent/tinkerfest/dpo_sfm_table_wood01', 0), + (10630, 10630, 'staticobjects/liveevent/tinkerfest/dpo_soleye_rotating_sprocket01', 0), + (10631, 10631, 'staticobjects/liveevent/tinkerfest/dpo_soleye_rotating_sprocket02', 0), + (10632, 10632, 'staticobjects/liveevent/tinkerfest/dpo_soleye_sprocket01', 0), + (10633, 10633, 'staticobjects/liveevent/tinkerfest/dpo_soleye_sprocket02', 0), + (10634, 10634, 'staticobjects/liveevent/tinkerfest/eig_tinkerfest_sparkly', 0), + (10635, 10635, 'staticobjects/plants/houseitem_feerrott_plant_fern1', 0), + (10636, 10636, 'staticobjects/liveevent/tinkerfest/gnome_cog_cup', 0), + (10637, 10637, 'accessories/wearable_items/_exp06/raven_armor_chain/chest', 0), + (10638, 10638, 'accessories/wearable_items/_exp06/raven_armor_chain/feet', 0), + (10639, 10639, 'accessories/wearable_items/_exp06/raven_armor_chain/forearms', 0), + (10640, 10640, 'accessories/wearable_items/_exp06/raven_armor_chain/hands', 0), + (10641, 10641, 'accessories/wearable_items/_exp06/raven_armor_chain/head', 0), + (10642, 10642, 'accessories/wearable_items/_exp06/raven_armor_chain/head_raven_armor_chain', 0), + (10643, 10643, 'accessories/wearable_items/_exp06/raven_armor_chain/legs', 0), + (10644, 10644, 'accessories/wearable_items/_exp06/raven_armor_chain/legs_noskirt', 0), + (10645, 10645, 'accessories/wearable_items/_exp06/raven_armor_chain/raven_shoulder_left', 0), + (10646, 10646, 'accessories/wearable_items/_exp06/raven_armor_chain/raven_shoulder_right', 0), + (10647, 10647, 'accessories/wearable_items/_exp06/raven_armor_chain/shoulders', 0), + (10648, 10648, 'accessories/wearable_items/_exp06/raven_armor_chain/shoulders_raven_chain', 0), + (10649, 10649, 'accessories/wearable_items/_exp06/raven_armor_chain/skirt', 0), + (10650, 10650, 'accessories/wearable_items/_exp06/raven_armor_leather/chest', 0), + (10651, 10651, 'accessories/wearable_items/_exp06/raven_armor_leather/feet', 0), + (10652, 10652, 'accessories/wearable_items/_exp06/raven_armor_leather/forearms', 0), + (10653, 10653, 'accessories/wearable_items/_exp06/raven_armor_leather/hands', 0), + (10654, 10654, 'accessories/wearable_items/_exp06/raven_armor_leather/head', 0), + (10655, 10655, 'accessories/wearable_items/_exp06/raven_armor_leather/head_raven_armor_leather', 0), + (10656, 10656, 'accessories/wearable_items/_exp06/raven_armor_leather/legs', 0), + (10657, 10657, 'accessories/wearable_items/_exp06/raven_armor_leather/legs_noskirt', 0), + (10658, 10658, 'accessories/wearable_items/_exp06/raven_armor_leather/raven_shoulder_left', 0), + (10659, 10659, 'accessories/wearable_items/_exp06/raven_armor_leather/raven_shoulder_right', 0), + (10660, 10660, 'accessories/wearable_items/_exp06/raven_armor_leather/shoulders', 0), + (10661, 10661, 'accessories/wearable_items/_exp06/raven_armor_leather/shoulders_raven_leather', 0), + (10662, 10662, 'accessories/wearable_items/_exp06/raven_armor_leather/skirt', 0), + (10663, 10663, 'accessories/wearable_items/_exp06/raven_robe/chest', 0), + (10664, 10664, 'accessories/wearable_items/_exp06/raven_robe/head', 0), + (10665, 10665, 'accessories/wearable_items/_exp06/raven_robe/pants', 0), + (10666, 10666, 'accessories/wearable_items/_exp06/raven_robe/skirt', 0), + (10667, 10667, 'accessories/wearable_items/cloak/exp06/cloak_kruzz_fur', 0), + (10668, 10668, 'creatures/monsters/mantaray_frost', 0), + (10669, 10669, 'accessories/wearable_items/_exp08/dragon_armor/robe_blue/chest_epic', 1096), + (10670, 10670, 'staticobjects/liveevent/cityfestivals/dpo_gf_kel_int_divider_wall01_blackmarble', 0), + (10671, 10671, 'staticobjects/liveevent/cityfestivals/dpo_gf_kel_int_divider_wall01_bluemarble', 0), + (10672, 10672, 'accessories/wearable_items/_exp08/dragon_armor/robe_blue/feet', 1096), + (10673, 10673, 'staticobjects/liveevent/cityfestivals/dpo_gf_kel_int_divider_wall01_redmarble', 0), + (10674, 10674, 'staticobjects/liveevent/cityfestivals/dpo_gf_kel_int_divider_wall01_whitemarble', 0), + (10675, 10675, 'staticobjects/liveevent/tinkerfest/dpo_gf_kel_int_divider_wall01_goldpatternedmetal', 0), + (10676, 10676, 'staticobjects/liveevent/tinkerfest/dpo_gf_kel_int_divider_wall01_patternedmetal', 0), + (10677, 10677, 'staticobjects/dividers/dpo_gf_kel_int_divider_wall01_altarwood', 0), + (10678, 10678, 'staticobjects/dividers/dpo_gf_kel_int_divider_wall01_ashwood', 0), + (10679, 10679, 'staticobjects/dividers/dpo_gf_kel_int_divider_wall01_blondwood', 0), + (10680, 10680, 'staticobjects/dividers/dpo_gf_kel_int_divider_wall01_brownwood', 0), + (10681, 10681, 'staticobjects/dividers/dpo_gf_kel_int_divider_wall01_fairy_woodbrownmoss', 0), + (10682, 10682, 'staticobjects/dividers/dpo_gf_kel_int_divider_wall01_marrplanks', 0), + (10683, 10683, 'staticobjects/dividers/dpo_gf_kel_int_divider_wall01_wavywood', 0), + (10684, 10684, 'staticobjects/dividers/dpo_gf_kel_int_divider_wall01_weatheredplanks', 0), + (10685, 10685, 'creatures/monsters/lion_ghost_red', 0), + (10686, 10686, 'staticobjects/dividers/dpo_gf_kel_int_divider_wall01_metalwood', 0), + (10687, 10687, 'staticobjects/dividers/dpo_gf_kel_int_divider_wall01_redwood', 0), + (10688, 10688, 'staticobjects/dividers/dpo_gf_kel_int_divider_wall01_rosewood', 0), + (10689, 10689, 'staticobjects/dividers/dpo_gf_kel_int_divider_wall01_sandalwood', 0), + (10690, 10690, 'staticobjects/dividers/dpo_gf_kel_int_divider_wall01_tablenoplanks', 0), + (10691, 10691, 'staticobjects/dividers/dpo_gf_kel_int_divider_wall01_tableplanks', 0), + (10692, 10692, 'staticobjects/plants/houseitem_feerrott_plant_bigleaf', 0), + (10693, 10693, 'accessories/wearable_items/cloak/exp06/cloak_roadyle_terethe_yol', 0), + (10694, 10694, 'ec/pc/human/human_male_headless', 0), + (10695, 10695, 'creatures/monsters/willowisp_seaweed', 0), + (10696, 10696, '_exp03/characters/monsters/golem_shambling_mound_pet', 0), + (10697, 10697, 'ec/pc/human/human_male_air_elemental', 0), + (10698, 10698, 'staticobjects/books_user/userbook_common_blackred', 0), + (10699, 10699, 'staticobjects/books_user/userbook_common_blacksilverblue', 0), + (10700, 10700, 'staticobjects/books_user/userbook_common_browngold', 0), + (10701, 10701, 'staticobjects/books_user/userbook_common_goldblue', 0), + (10702, 10702, 'staticobjects/books_user/userbook_common_goldwhitepurple', 0), + (10703, 10703, 'staticobjects/books_user/userbook_common_greenteal', 0), + (10704, 10704, 'staticobjects/books_user/userbook_common_purpleblack', 0), + (10705, 10705, 'staticobjects/books_user/userbook_common_purplegreen', 0), + (10706, 10706, 'staticobjects/books_user/userbook_common_redgold', 0), + (10707, 10707, 'staticobjects/books_user/userbook_common_whitesilverblue', 0), + (10708, 10708, 'staticobjects/books_user/userbook_fancy_blackgold01', 0), + (10709, 10709, 'staticobjects/books_user/userbook_fancy_blackgreen01', 0), + (10710, 10710, 'staticobjects/books_user/userbook_fancy_blackred01', 0), + (10711, 10711, 'staticobjects/books_user/userbook_fancy_bluered01', 0), + (10712, 10712, 'staticobjects/books_user/userbook_fancy_goldbrown01', 0), + (10713, 10713, 'staticobjects/books_user/userbook_fancy_green01', 0), + (10714, 10714, 'staticobjects/books_user/userbook_fancy_purple01', 0), + (10715, 10715, 'staticobjects/books_user/userbook_fancy_red01', 0), + (10716, 10716, 'staticobjects/books_user/userbook_fancy_silverblue01', 0), + (10717, 10717, 'staticobjects/books_user/userbook_fancy_silverred01', 0), + (10718, 10718, 'staticobjects/books_user/userbook_fancy_whiteblue01', 0), + (10719, 10719, 'staticobjects/books_user/userbook_fancy_whitegold01', 0), + (10720, 10720, 'accessories/wearable_items/heavy_cloth/new_halas/chest', 0), + (10721, 10721, 'accessories/wearable_items/heavy_cloth/new_halas/feet', 0), + (10722, 10722, 'accessories/wearable_items/heavy_cloth/new_halas/forearms', 0), + (10723, 10723, 'accessories/wearable_items/heavy_cloth/new_halas/hands', 0), + (10724, 10724, 'accessories/wearable_items/heavy_cloth/new_halas/legs', 0), + (10725, 10725, 'accessories/wearable_items/heavy_cloth/new_halas/shoulders', 0), + (10726, 10726, 'staticobjects/benches/dpo_blue_bench_long02_wcushion', 0), + (10727, 10727, 'staticobjects/benches/dpo_blue_bench_short_wcushion01', 0), + (10728, 10728, 'staticobjects/chairs/dpo_blue_chair_dining01', 0), + (10729, 10729, 'staticobjects/chairs/dpo_blue_chair_dining02', 0), + (10730, 10730, 'staticobjects/chairs/dpo_blue_chair_head_dining01', 0), + (10731, 10731, 'staticobjects/chairs/dpo_blue_couch01', 0), + (10732, 10732, 'staticobjects/chairs/dpo_blue_couch02', 0), + (10733, 10733, 'staticobjects/chairs/dpo_blue_stool_round01', 0), + (10734, 10734, 'staticobjects/pillars/dpo_column001_blackmarble', 0), + (10735, 10735, 'staticobjects/pillars/dpo_column001_bluemarble', 0), + (10736, 10736, 'staticobjects/pillars/dpo_column001_redmarble', 0), + (10737, 10737, 'staticobjects/pillars/dpo_column001_whitemarble', 0), + (10738, 10738, 'staticobjects/tables/dpo_blue_gaming_cardtable01_empty', 0), + (10739, 10739, 'staticobjects/tables/dpo_blue_gaming_cardtable02', 0), + (10740, 10740, 'staticobjects/tables/dpo_blue_table_bedside01', 0), + (10741, 10741, 'staticobjects/tables/dpo_blue_table_coffee01', 0), + (10742, 10742, 'staticobjects/tables/dpo_blue_table_long01', 0), + (10743, 10743, 'staticobjects/tcg/tcg_painting_servant', 0), + (10744, 10744, 'staticobjects/tcg/tcg_painting_fangshield', 0), + (10745, 10745, 'staticobjects/tcg/tcg_painting_favor', 0), + (10746, 10746, 'staticobjects/tcg/tcg_painting_paradox', 0), + (10747, 10747, 'staticobjects/tcg/tcg_painting_sporali', 0), + (10748, 10748, 'staticobjects/tcg/tcg_painting_faith', 0), + (10749, 10749, 'staticobjects/tcg/tcg_painting_malevolence', 0), + (10750, 10750, 'staticobjects/tcg/tcg_painting_engineer', 0), + (10751, 10751, 'staticobjects/tcg/tcg_painting_defiler', 0), + (10752, 10752, 'staticobjects/liveevent/guides/guide_diamondring', 0), + (10753, 10753, '_exp06/characters/tool_users/giant_frost_kurn_tower/giant_frost_chubby', 0), + (10754, 10754, '_exp06/characters/tool_users/giant_frost_kurn_tower/giant_frost_muscular', 0), + (10755, 10755, 'accessories/npc_wearables/giant_frost_kurn_tower/beards/beard_01', 0), + (10756, 10756, 'accessories/npc_wearables/giant_frost_kurn_tower/beards/beard_02', 0), + (10757, 10757, 'accessories/npc_wearables/giant_frost_kurn_tower/beards/beard_03_mustache', 0), + (10758, 10758, 'accessories/npc_wearables/giant_frost_kurn_tower/beards/beard_04_lamb_chops', 0), + (10759, 10759, 'accessories/npc_wearables/giant_frost_kurn_tower/glowing_armor_pieces/chest_armor_heavy', 0), + (10760, 10760, 'accessories/npc_wearables/giant_frost_kurn_tower/glowing_armor_pieces/chest_armor_heavy_nopauldrons', 0), + (10761, 10761, 'accessories/npc_wearables/giant_frost_kurn_tower/glowing_armor_pieces/chest_armor_medium', 0), + (10762, 10762, 'accessories/npc_wearables/giant_frost_kurn_tower/glowing_armor_pieces/chest_armor_medium_nopauldrons', 0), + (10763, 10763, 'accessories/npc_wearables/giant_frost_kurn_tower/glowing_armor_pieces/chest_armor_medium_pauldronsonly', 0), + (10764, 10764, 'accessories/npc_wearables/giant_frost_kurn_tower/glowing_armor_pieces/feet_armor_heavy', 0), + (10765, 10765, 'accessories/npc_wearables/giant_frost_kurn_tower/glowing_armor_pieces/feet_armor_medium', 0), + (10766, 10766, 'accessories/npc_wearables/giant_frost_kurn_tower/glowing_armor_pieces/hands_armor_heavy', 0), + (10767, 10767, 'accessories/npc_wearables/giant_frost_kurn_tower/glowing_armor_pieces/hands_armor_light', 0), + (10768, 10768, 'accessories/npc_wearables/giant_frost_kurn_tower/glowing_armor_pieces/hands_armor_medium', 0), + (10769, 10769, 'accessories/npc_wearables/giant_frost_kurn_tower/glowing_armor_pieces/head_armor_heavy', 0), + (10770, 10770, 'accessories/npc_wearables/giant_frost_kurn_tower/glowing_armor_pieces/head_armor_horn_crown', 0), + (10771, 10771, 'accessories/npc_wearables/giant_frost_kurn_tower/glowing_armor_pieces/head_armor_medium', 0), + (10772, 10772, 'accessories/npc_wearables/giant_frost_kurn_tower/glowing_armor_pieces/legs_armor_heavy', 0), + (10773, 10773, 'accessories/npc_wearables/giant_frost_kurn_tower/glowing_armor_pieces/legs_armor_medium', 0), + (10774, 10774, 'accessories/npc_wearables/giant_frost_kurn_tower/glowing_armor_pieces/shoulders_armor_heavy', 0), + (10775, 10775, 'accessories/npc_wearables/giant_frost_kurn_tower/glowing_armor_pieces/shoulders_armor_medium', 0), + (10776, 10776, 'accessories/npc_wearables/giant_frost_kurn_tower/hair/hair_01_einstien', 0), + (10777, 10777, 'accessories/npc_wearables/giant_frost_kurn_tower/hair/hair_02_full', 0), + (10778, 10778, 'accessories/npc_wearables/giant_frost_kurn_tower/hair/hair_03_pony_tail', 0), + (10779, 10779, 'accessories/npc_wearables/giant_frost_kurn_tower/velious_armor_peices/chest_armor_light', 0), + (10780, 10780, 'accessories/npc_wearables/giant_frost_kurn_tower/velious_armor_peices/feet_armor_light', 0), + (10781, 10781, 'accessories/npc_wearables/giant_frost_kurn_tower/velious_armor_peices/hands_armor_light', 0), + (10782, 10782, 'accessories/npc_wearables/giant_frost_kurn_tower/velious_armor_peices/head_armor_light', 0), + (10783, 10783, 'accessories/npc_wearables/giant_frost_kurn_tower/velious_armor_peices/legs_armor_light', 0), + (10784, 10784, 'creatures/monsters/roper_moss', 0), + (10785, 10785, 'accessories/wearable_items/_exp06/demonic_chain/chest', 0), + (10786, 10786, 'accessories/wearable_items/_exp06/demonic_chain/feet', 0), + (10787, 10787, 'accessories/wearable_items/_exp06/demonic_chain/forearms', 0), + (10788, 10788, 'accessories/wearable_items/_exp06/demonic_chain/hands', 0), + (10789, 10789, 'accessories/wearable_items/_exp06/demonic_chain/head', 0), + (10790, 10790, 'accessories/wearable_items/_exp06/demonic_chain/legs', 0), + (10791, 10791, 'accessories/wearable_items/_exp06/demonic_chain/shoulders', 0), + (10792, 10792, 'accessories/wearable_items/_exp06/demonic_chain/skirt', 0), + (10793, 10793, 'accessories/wieldable_items/shields/tinkerfest_shield/tinkerfest_shield', 0), + (10794, 10794, 'accessories/wieldable_items/weapons/fist/fist_of_lightining', 0), + (10795, 10795, 'accessories/wieldable_items/weapons/fist/fist_of_the_void', 0), + (10796, 10796, 'accessories/wieldable_items/weapons/fist/monk_1h_glow_cold', 0), + (10797, 10797, 'accessories/wieldable_items/weapons/fist/monk_1h_glow_divine', 0), + (10798, 10798, 'accessories/wieldable_items/weapons/fist/monk_1h_glow_poison', 0), + (10799, 10799, 'accessories/wieldable_items/weapons/fist/monk_1h_glow_prismatic', 0), + (10800, 10800, 'accessories/wieldable_items/weapons/fist/qeynos_wraps/qeynos_wraps_heat', 0), + (10801, 10801, 'accessories/wieldable_items/weapons/fist/qeynos_wraps/qeynos_wraps_magic', 0), + (10802, 10802, 'accessories/wieldable_items/weapons/fist/qeynos_wraps/qeynos_wraps_poison', 0), + (10803, 10803, 'accessories/wieldable_items/weapons/fist/qeynos_wraps/qeynos_wraps_prismatic', 0), + (10804, 10804, 'accessories/wieldable_items/weapons/exp04/1h_pierce/exp04_1hp_dragonhilt_dagger_ice', 0), + (10805, 10805, 'accessories/wieldable_items/weapons/exp04/1h_crush/exp04_1hc_crystal_wand_ice', 0), + (10806, 10806, '_exp06/zones/dun_eru_research/dpo_eru_cable_plugs', 0), + (10807, 10807, 'accessories/wieldable_items/weapons/exp04/fist/exp04_fist_ornate_knuckledusters_ice', 0), + (10808, 10808, 'accessories/wieldable_items/weapons/hammer/tinkerfest_wrench/tinkerfest_wrench', 0), + (10809, 10809, 'creatures/monsters/shambling_mound', 0), + (10810, 10810, 'creatures/monsters/scarecrow_new', 0), + (10811, 10811, 'creatures/monsters/wickerman', 0), + (10812, 10812, 'creatures/monsters/roper', 0), + (10813, 10813, 'creatures/monsters/animated_bonepile', 0), + (10814, 10814, 'creatures/monsters/bull_stone', 0), + (10815, 10815, 'creatures/monsters/bull_standard', 0), + (10816, 10816, 'creatures/monsters/bull_skeleton', 0), + (10817, 10817, 'creatures/monsters/catoplebas_new', 0), + (10818, 10818, 'creatures/monsters/catoplebas_skeletal', 0), + (10819, 10819, 'creatures/monsters/chimera', 0), + (10820, 10820, 'creatures/monsters/chimera_skeletal', 0), + (10821, 10821, 'accessories/wearable_items/_exp06/magic_rune_chain_plain/chest', 0), + (10822, 10822, 'accessories/wearable_items/_exp06/magic_rune_chain_plain/feet', 0), + (10823, 10823, 'accessories/wearable_items/_exp06/magic_rune_chain_plain/forearms', 0), + (10824, 10824, 'accessories/wearable_items/_exp06/magic_rune_chain_plain/hands', 0), + (10825, 10825, 'accessories/wearable_items/_exp06/magic_rune_chain_plain/head', 0), + (10826, 10826, 'accessories/wearable_items/_exp06/magic_rune_chain_plain/legs', 0), + (10827, 10827, 'accessories/wearable_items/_exp06/magic_rune_chain_plain/legs_noskirt', 0), + (10828, 10828, 'accessories/wearable_items/_exp06/magic_rune_chain_plain/shoulders', 0), + (10829, 10829, 'accessories/wearable_items/_exp06/magic_rune_chain_plain/skirt', 0), + (10830, 10830, '_exp06/characters/tool_users/giant_frost_kurn_tower/giant_frost_kraytok', 0), + (10831, 10831, 'creatures/monsters/centipede_water', 0), + (10832, 10832, 'creatures/monsters/roper_beige_marble', 0), + (10833, 10833, 'creatures/monsters/roper_vine', 0), + (10834, 10834, 'accessories/wieldable_items/weapons/great_sword/dragon_katana/evileye_katana', 0), + (10835, 10835, 'projectiles/spell_fruit', 0), + (10836, 10836, 'accessories/wearable_items/profesion_hats/priest_helm/heavy_plate_plain02/head', 0), + (10837, 10837, 'creatures/monsters/willowisp_bubble_leaf', 0), + (10838, 10838, 'accessories/wearable_items/_exp06/plain_robe01_evil/skirt', 0), + (10839, 10839, 'accessories/wearable_items/_exp06/plain_robe01_evil/chest', 0), + (10840, 10840, 'accessories/wearable_items/_exp06/plain_robe01_evil/head', 0), + (10841, 10841, 'accessories/wearable_items/_exp06/plain_robe01_evil/hood', 0), + (10842, 10842, 'accessories/wearable_items/_exp06/plain_robe01_evil/pants', 0), + (10843, 10843, 'accessories/wearable_items/_exp06/frostrune_armor_robe/chest_left_pauldron_only', 0), + (10844, 10844, 'accessories/wearable_items/_exp06/black_rivet_vanguard/skirt', 0), + (10845, 10845, 'accessories/wearable_items/_exp06/black_rivet_vanguard/chest', 0), + (10846, 10846, 'accessories/wearable_items/_exp06/black_rivet_vanguard/feet', 0), + (10847, 10847, 'accessories/wearable_items/_exp06/black_rivet_vanguard/forearms', 0), + (10848, 10848, 'accessories/wearable_items/_exp06/black_rivet_vanguard/hands', 0), + (10849, 10849, 'accessories/wearable_items/_exp06/black_rivet_vanguard/head', 0), + (10850, 10850, 'accessories/wearable_items/_exp06/black_rivet_vanguard/legs', 0), + (10851, 10851, 'accessories/wearable_items/_exp06/black_rivet_vanguard/legs_noskirt', 0), + (10852, 10852, 'accessories/wearable_items/_exp06/black_rivet_vanguard/right', 0), + (10853, 10853, 'accessories/wearable_items/_exp06/black_rivet_vanguard/shoulders', 0), + (10854, 10854, 'accessories/wearable_items/_exp06/black_rivet_vanguard/shoulders_nopauldrons', 0), + (10855, 10855, 'accessories/wearable_items/_exp06/plain_robe01/skirt', 0), + (10856, 10856, 'accessories/wearable_items/_exp06/plain_robe01/chest', 0), + (10857, 10857, 'accessories/wearable_items/_exp06/plain_robe01/head', 0), + (10858, 10858, 'accessories/wearable_items/_exp06/plain_robe01/hood', 0), + (10859, 10859, 'accessories/wearable_items/_exp06/plain_robe01/pants', 0), + (10860, 10860, 'accessories/wearable_items/heavy_cloth/new_halas/new_halas_helm', 0), + (10861, 10861, 'accessories/wearable_items/heavy_cloth/new_halas/new_halas_pauldron_left', 0), + (10862, 10862, 'accessories/wearable_items/heavy_cloth/new_halas/new_halas_pauldron_right', 0), + (10863, 10863, 'accessories/wearable_items/heavy_cloth/new_halas/new_halas_pauldrons', 0), + (10864, 10864, 'accessories/wearable_items/heavy_cloth/new_halas/shoulders_no_pauldrons', 0), + (10865, 10865, 'staticobjects/globes/quest_iksar_snowglobe', 0), + (10866, 10866, 'accessories/wearable_items/cloak/exp06/cloak_ward_of_the_elements_spirit', 0), + (10867, 10867, 'accessories/wearable_items/cloak/exp06/cloak_ward_of_the_elements_daggers', 0), + (10868, 10868, 'accessories/wearable_items/cloak/exp06/cloak_ward_of_the_elements_magma', 0), + (10869, 10869, 'accessories/wearable_items/cloak/exp06/cloak_ward_of_the_elements_nature', 0), + (10870, 10870, 'accessories/wieldable_items/weapons/sword/tinkerfest_sprocketspinner/tinkerfest_sprocketspinner', 0), + (10871, 10871, '_exp06/characters/tool_users/roekillik_female/roekillik_female', 0), + (10872, 10872, 'staticobjects/bookcases/dpo_eu_bookend02', 0), + (10873, 10873, 'staticobjects/nursery/dpo_crib_rattle', 0), + (10874, 10874, '_exp06/characters/tool_users/roekillik_male/roekillik_male', 0), + (10875, 10875, 'accessories/wearable_items/_exp06/vanguard_iceknight_black/skirt', 0), + (10876, 10876, 'accessories/wearable_items/_exp06/vanguard_iceknight_black/chest', 0), + (10877, 10877, 'accessories/wearable_items/_exp06/vanguard_iceknight_black/feet', 0), + (10878, 10878, 'accessories/wearable_items/_exp06/vanguard_iceknight_black/forearms', 0), + (10879, 10879, 'accessories/wearable_items/_exp06/vanguard_iceknight_black/hands', 0), + (10880, 10880, 'accessories/wearable_items/_exp06/vanguard_iceknight_black/head', 0), + (10881, 10881, 'accessories/wearable_items/_exp06/vanguard_iceknight_black/legs', 0), + (10882, 10882, 'accessories/wearable_items/_exp06/vanguard_iceknight_black/legs_noskirt', 0), + (10883, 10883, 'accessories/wearable_items/_exp06/vanguard_iceknight_black/right', 0), + (10884, 10884, 'accessories/wearable_items/_exp06/vanguard_iceknight_black/shoulders', 0), + (10885, 10885, 'accessories/wearable_items/_exp06/vanguard_iceknight_black/shoulders_nopauldrons', 0), + (10886, 10886, 'accessories/wearable_items/_exp06/nature_leather/skirt', 0), + (10887, 10887, 'accessories/wearable_items/_exp06/nature_leather/chest', 0), + (10888, 10888, 'accessories/wearable_items/_exp06/nature_leather/feet', 0), + (10889, 10889, 'accessories/wearable_items/_exp06/nature_leather/forearms', 0), + (10890, 10890, 'accessories/wearable_items/_exp06/nature_leather/hands', 0), + (10891, 10891, 'accessories/wearable_items/_exp06/nature_leather/head', 0), + (10892, 10892, 'accessories/wearable_items/_exp06/nature_leather/legs', 0), + (10893, 10893, 'accessories/wearable_items/_exp06/nature_leather/legs_noskirt', 0), + (10894, 10894, 'accessories/wearable_items/_exp06/nature_leather/shoulders', 0), + (10895, 10895, 'accessories/wearable_items/_exp06/frostrune_armor_robe/chest_left_pauldron_only', 0), + (10896, 10896, 'staticobjects/soe_wallet/cheery_coffee_table_dpo', 0), + (10897, 10897, 'staticobjects/soe_wallet/cheery_couch_pillows_dpo', 0), + (10898, 10898, 'staticobjects/soe_wallet/cheery_end_table_dpo', 0), + (10899, 10899, 'staticobjects/soe_wallet/cheery_loveseat_pillows_dpo', 0), + (10900, 10900, 'staticobjects/soe_wallet/cheery_office_bookshelf_small_dpo', 0), + (10901, 10901, 'staticobjects/soe_wallet/cheery_office_bookshelf_tall_dpo', 0), + (10902, 10902, 'staticobjects/soe_wallet/cheery_office_chair_dpo', 0), + (10903, 10903, 'staticobjects/soe_wallet/cheery_office_chest_lid_dpo', 0), + (10904, 10904, 'staticobjects/soe_wallet/cheery_office_desk_dpo', 0), + (10905, 10905, 'staticobjects/soe_wallet/cheery_vanity_drawers_dpo', 0), + (10906, 10906, 'staticobjects/soe_wallet/cheery_vanity_mirror_dpo', 0), + (10907, 10907, 'staticobjects/soe_wallet/cheery_vanity_stool_dpo', 0), + (10908, 10908, 'staticobjects/soe_wallet/cheery_vanity_table_mirror_dpo', 0), + (10909, 10909, 'staticobjects/soe_wallet/cheery_vanity_washing_table_dpo', 0), + (10910, 10910, 'accessories/wearable_items/_exp06/demonic_vanguard/skirt', 0), + (10911, 10911, 'accessories/wearable_items/_exp06/demonic_vanguard/chest', 0), + (10912, 10912, 'accessories/wearable_items/_exp06/demonic_vanguard/feet', 0), + (10913, 10913, 'accessories/wearable_items/_exp06/demonic_vanguard/forearms', 0), + (10914, 10914, 'accessories/wearable_items/_exp06/demonic_vanguard/hands', 0), + (10915, 10915, 'accessories/wearable_items/_exp06/demonic_vanguard/head', 0), + (10916, 10916, 'accessories/wearable_items/_exp06/demonic_vanguard/legs', 0), + (10917, 10917, 'accessories/wearable_items/_exp06/demonic_vanguard/legs_noskirt', 0), + (10918, 10918, 'accessories/wearable_items/_exp06/demonic_vanguard/right', 0), + (10919, 10919, 'accessories/wearable_items/_exp06/demonic_vanguard/shoulders', 0), + (10920, 10920, 'accessories/wearable_items/_exp06/demonic_vanguard/shoulders_nopauldrons', 0), + (10921, 10921, 'accessories/wearable_items/_exp06/priest_armor/chest', 0), + (10922, 10922, 'accessories/wearable_items/_exp06/priest_armor/feet', 0), + (10923, 10923, 'accessories/wearable_items/_exp06/priest_armor/forearms', 0), + (10924, 10924, 'accessories/wearable_items/_exp06/priest_armor/hands', 0), + (10925, 10925, 'accessories/wearable_items/_exp06/priest_armor/head', 0), + (10926, 10926, 'accessories/wearable_items/_exp06/priest_armor/legs', 0), + (10927, 10927, 'accessories/wearable_items/_exp06/priest_armor/legs_noskirt', 0), + (10928, 10928, 'accessories/wearable_items/_exp06/priest_armor/priest_flared_left', 0), + (10929, 10929, 'accessories/wearable_items/_exp06/priest_armor/priest_flared_right', 0), + (10930, 10930, 'accessories/wearable_items/_exp06/priest_armor/right', 0), + (10931, 10931, 'accessories/wearable_items/_exp06/priest_armor/shoulders', 0), + (10932, 10932, 'accessories/wearable_items/_exp06/priest_armor/shoulders_epic', 0), + (10933, 10933, 'accessories/wearable_items/_exp06/priest_armor/shoulders_nopauldrons', 0), + (10934, 10934, 'accessories/wearable_items/_exp06/priest_armor/skirt', 0), + (10935, 10935, 'accessories/wearable_items/leather/plain/plain_banded/skirt', 0), + (10936, 10936, 'accessories/wearable_items/leather/plain/plain_banded/chest', 0), + (10937, 10937, 'accessories/wearable_items/leather/plain/plain_banded/feet', 0), + (10938, 10938, 'accessories/wearable_items/leather/plain/plain_banded/forearms', 0), + (10939, 10939, 'accessories/wearable_items/leather/plain/plain_banded/hands', 0), + (10940, 10940, 'accessories/wearable_items/leather/plain/plain_banded/head', 0), + (10941, 10941, 'accessories/wearable_items/leather/plain/plain_banded/legs', 0), + (10942, 10942, 'accessories/wearable_items/leather/plain/plain_banded/legs_noskirt', 0), + (10943, 10943, 'accessories/wearable_items/leather/plain/plain_banded/pauldron_plain_banded_left', 0), + (10944, 10944, 'accessories/wearable_items/leather/plain/plain_banded/pauldron_plain_banded_right', 0), + (10945, 10945, 'accessories/wearable_items/leather/plain/plain_banded/shoulders', 0), + (10946, 10946, 'accessories/wearable_items/leather/plain/plain_banded/shoulders_pauldrons_plain', 0), + (10947, 10947, '_exp04/monsters/cockatrice_golden', 0), + (10948, 10948, 'accessories/wearable_items/_exp06/assassin_leather/skirt', 0), + (10949, 10949, 'accessories/wearable_items/_exp06/assassin_leather/chest', 0), + (10950, 10950, 'accessories/wearable_items/_exp06/assassin_leather/feet', 0), + (10951, 10951, 'accessories/wearable_items/_exp06/assassin_leather/forearms', 0), + (10952, 10952, 'accessories/wearable_items/_exp06/assassin_leather/hands', 0), + (10953, 10953, 'accessories/wearable_items/_exp06/assassin_leather/head', 0), + (10954, 10954, 'accessories/wearable_items/_exp06/assassin_leather/legs', 0), + (10955, 10955, 'accessories/wearable_items/_exp06/assassin_leather/legs_noskirt', 0), + (10956, 10956, 'accessories/wearable_items/_exp06/assassin_leather/shoulders', 0), + (10957, 10957, 'accessories/wearable_items/_exp06/conjurer_robe/skirt', 0), + (10958, 10958, 'accessories/wearable_items/_exp06/conjurer_robe/chest', 0), + (10959, 10959, 'accessories/wearable_items/_exp06/conjurer_robe/head', 0), + (10960, 10960, 'accessories/wearable_items/_exp06/conjurer_robe/pants', 0), + (10961, 10961, 'creatures/monsters/stagg_ice', 0), + (10962, 10962, 'creatures/monsters/turtle_ice', 0), + (10963, 10963, 'creatures/monsters/badger_ice', 0), + (10964, 10964, 'creatures/monsters/boar_ice', 0), + (10965, 10965, 'creatures/monsters/crab_ice', 0), + (10966, 10966, 'accessories/wearable_items/_exp06/demonic_chain/demonic_pauldron_left', 0), + (10967, 10967, 'accessories/wearable_items/_exp06/demonic_chain/demonic_pauldron_right', 0), + (10968, 10968, 'accessories/wearable_items/_exp06/demonic_chain/head_mask', 0), + (10969, 10969, 'accessories/wearable_items/_exp06/demonic_chain/legs_noskirt', 0), + (10970, 10970, 'accessories/wearable_items/_exp06/demonic_chain/shoulders_pauldrons', 0), + (10971, 10971, 'staticobjects/containers/dpo_fon_ruins_phylactery01', 0), + (10972, 10972, 'staticobjects/plants/dpo_fon_plant_cattail02', 0), + (10973, 10973, 'staticobjects/crystals/dpo_fon_crystals_formation03', 0), + (10974, 10974, 'staticobjects/crystals/dpo_fon_crystals_formation01', 0), + (10975, 10975, 'staticobjects/crystals/dpo_fon_crystals_formation02', 0), + (10976, 10976, 'soga_appearances/ec/npc/soga_dragon_turtle_northern', 0), + (10977, 10977, 'accessories/wearable_items/cloak/exp06/cloak_repair', 0), + (10978, 10978, 'creatures/mounts/flying_disc/flying_disc_evil_01', 0), + (10979, 10979, 'staticobjects/racks/dpo_seb_weaponrack_floor02', 0), + (10980, 10980, 'staticobjects/barrels/dpo_fon_gu53_barrel01', 0), + (10981, 10981, 'staticobjects/crates/dpo_fen_gu53_crate01', 0), + (10982, 10982, 'staticobjects/crates/dpo_fen_gu53_crate01_short', 0), + (10983, 10983, 'creatures/mounts/flying_disc/flying_disc_good_02', 0), + (10984, 10984, 'creatures/mounts/flying_disc/flying_disc_evil_02', 0), + (10985, 10985, 'creatures/mounts/flying_disc/flying_disc_good_01', 0), + (10986, 10986, 'staticobjects/tcg/tcg_golden_egg', 0), + (10987, 10987, 'staticobjects/beds/dpo_blue_eu_bed_queen', 0), + (10988, 10988, 'staticobjects/dressers/dpo_eu_dresser_single', 0), + (10989, 10989, 'staticobjects/nursery/dpo_blue_eu_crib', 0), + (10990, 10990, 'staticobjects/pillow/dpo_blue_eu_bed_pillow', 0), + (10991, 10991, 'staticobjects/brazier/dpo_fon_gu53_firepit01', 0), + (10992, 10992, 'staticobjects/fires/dpo_fen_gu53_forge', 0), + (10993, 10993, 'staticobjects/barrels/dpo_jw_gu53_barrel01', 0), + (10994, 10994, 'staticobjects/crates/dpo_jw_gu53_crate01', 0), + (10995, 10995, 'staticobjects/crates/dpo_jw_gu53_crate01_short', 0), + (10996, 10996, 'staticobjects/tents/dpo_fon_gu53_tent01', 0), + (10997, 10997, 'staticobjects/tents/dpo_jw_gu53_tent02', 0), + (10998, 10998, 'staticobjects/tents/dpo_jw_gu53_tent', 0), + (10999, 10999, 'staticobjects/banners/dpo_fon_gu53_tapestry01', 0), + (11000, 11000, 'staticobjects/banners/dpo_fon_gu53_tapestry01_frosted', 0), + (11001, 11001, '_exp04/zones/objects/fens_of_nathsar/fon_shinies_aqua_burnyai01', 0), + (11002, 11002, '_exp04/zones/objects/fens_of_nathsar/fon_shinies_green_burnyai01', 0), + (11003, 11003, '_exp04/zones/objects/fens_of_nathsar/fon_shinies_purple_burnyai01', 0), + (11004, 11004, '_exp04/zones/objects/fens_of_nathsar/fon_shinies_red_burnyai01', 0), + (11005, 11005, '_exp04/zones/objects/kunzar_jungle/dpo_kj_egg', 0), + (11006, 11006, '_exp04/zones/objects/kunzar_jungle/dpo_kj_eggs02', 0), + (11007, 11007, '_exp04/zones/objects/kunzar_jungle/dpo_kj_eggs04', 0), + (11008, 11008, 'accessories/wearable_items/_exp06/roekillik_vanguard/skirt', 0), + (11009, 11009, 'accessories/wearable_items/_exp06/roekillik_vanguard/chest', 0), + (11010, 11010, 'accessories/wearable_items/_exp06/roekillik_vanguard/feet', 0), + (11011, 11011, 'accessories/wearable_items/_exp06/roekillik_vanguard/forearms', 0), + (11012, 11012, 'accessories/wearable_items/_exp06/roekillik_vanguard/hands', 0), + (11013, 11013, 'accessories/wearable_items/_exp06/roekillik_vanguard/head', 0), + (11014, 11014, 'accessories/wearable_items/_exp06/roekillik_vanguard/legs', 0), + (11015, 11015, 'accessories/wearable_items/_exp06/roekillik_vanguard/legs_noskirt', 0), + (11016, 11016, 'accessories/wearable_items/_exp06/roekillik_vanguard/right', 0), + (11017, 11017, 'accessories/wearable_items/_exp06/roekillik_vanguard/shoulders', 0), + (11018, 11018, 'accessories/wearable_items/_exp06/roekillik_vanguard/shoulders_nopauldrons', 0), + (11019, 11019, 'accessories/wearable_items/_exp06/roekillik_vanguard02/skirt', 0), + (11020, 11020, 'accessories/wearable_items/_exp06/roekillik_vanguard02/chest', 0), + (11021, 11021, 'accessories/wearable_items/_exp06/roekillik_vanguard02/feet', 0), + (11022, 11022, 'accessories/wearable_items/_exp06/roekillik_vanguard02/forearms', 0), + (11023, 11023, 'accessories/wearable_items/_exp06/roekillik_vanguard02/hands', 0), + (11024, 11024, 'accessories/wearable_items/_exp06/roekillik_vanguard02/head', 0), + (11025, 11025, 'accessories/wearable_items/_exp06/roekillik_vanguard02/legs', 0), + (11026, 11026, 'accessories/wearable_items/_exp06/roekillik_vanguard02/legs_noskirt', 0), + (11027, 11027, 'accessories/wearable_items/_exp06/roekillik_vanguard02/right', 0), + (11028, 11028, 'accessories/wearable_items/_exp06/roekillik_vanguard02/roekillik_pauldron_left', 0), + (11029, 11029, 'accessories/wearable_items/_exp06/roekillik_vanguard02/roekillik_pauldron_right', 0), + (11030, 11030, 'accessories/wearable_items/_exp06/roekillik_vanguard02/shoulders', 0), + (11031, 11031, 'accessories/wearable_items/_exp06/roekillik_vanguard02/shoulders_epicpauldrons', 0), + (11032, 11032, 'accessories/wearable_items/_exp06/roekillik_vanguard02/shoulders_nopauldrons', 0), + (11033, 11033, 'staticobjects/bookcases/dpo_fon_riliss_bookcase01', 0), + (11034, 11034, 'staticobjects/chairs/dpo_cha_bench_square', 0), + (11035, 11035, 'staticobjects/chairs/dpo_kp_throne_iksar', 0), + (11036, 11036, 'staticobjects/coffins_and_sarcophagus/dpo_fon_ruins_tomb01', 0), + (11037, 11037, 'staticobjects/crates/dpo_fon_crate_ruins_openlid02', 0), + (11038, 11038, 'staticobjects/kitchen/floor_plate_of_fish', 0), + (11039, 11039, 'staticobjects/nautical/dpo_fon_restaurant_crossedoars01', 0), + (11040, 11040, 'staticobjects/pillars/dpo_cha_column_large01', 0), + (11041, 11041, 'staticobjects/pillars/dpo_cha_column_small01', 0), + (11042, 11042, 'staticobjects/platforms/dpo_charasiswest_r04_platform', 0), + (11043, 11043, 'staticobjects/platforms/dpo_charasiswest_r04_platform_fx', 0), + (11044, 11044, 'staticobjects/rugs/dpo_cha_rugs_rolled_group02', 0), + (11045, 11045, 'staticobjects/torches/dpo_fon_shinies_aqua_burynai01', 0), + (11046, 11046, 'staticobjects/torches/dpo_fon_shinies_green_burynai01', 0), + (11047, 11047, 'staticobjects/torches/dpo_fon_shinies_purple_burynai01', 0), + (11048, 11048, 'accessories/wearable_items/_exp08/dragon_armor/robe_blue/hands', 1096), + (11049, 11049, 'staticobjects/urns/dpo_cha_canopic_vase02_south', 0), + (11050, 11050, 'creatures/monsters/cerberus_skeletal', 0), + (11051, 11051, 'creatures/monsters/cerberus', 0), + (11052, 11052, 'creatures/monsters/cerberus_ice', 0), + (11053, 11053, 'staticobjects/rocks/dpo_fon_rock_small_field02', 0), + (11054, 11054, 'staticobjects/panels/dpo_grass_panel', 0), + (11055, 11055, 'accessories/wearable_items/_exp06/conjurer_robe/feet', 0), + (11056, 11056, 'accessories/wearable_items/_exp06/conjurer_robe/hands', 0), + (11057, 11057, 'staticobjects/torches/dpo_fon_shinies_red_burynai01a', 0), + (11058, 11058, 'staticobjects/containers/dpo_cockatrice_egg_basket', 0), + (11059, 11059, 'creatures/mounts/flying_disc/flying_disc_good_03', 0), + (11060, 11060, 'accessories/wearable_items/_exp06/varsoon_robe/chest_with_skull_pauldrons_head_piece', 0), + (11061, 11061, '_exp06/characters/monsters/vasty_guardian/vasty_guardian', 0), + (11062, 11062, '_exp06/characters/monsters/vasty_guardian_rusty/vasty_guardian_rusty', 0), + (11063, 11063, 'staticobjects/feathers/dpo_flamingfeather01', 0), + (11064, 11064, 'creatures/monsters/pegasus', 0), + (11065, 11065, '_exp06/characters/monsters/bookminion_erudin01/bookminion_erudin01', 0), + (11066, 11066, '_exp06/characters/monsters/bookminion_erudin02/bookminion_erudin02', 0), + (11067, 11067, '_exp06/characters/monsters/bookminion_erudin03/bookminion_erudin03', 0), + (11068, 11068, 'staticobjects/globes/quest_iksar_snowglobe02', 0), + (11069, 11069, 'accessories/wearable_items/_exp06/demonic_leather/skirt', 0), + (11070, 11070, 'accessories/wearable_items/_exp06/demonic_leather/chest', 0), + (11071, 11071, 'accessories/wearable_items/_exp06/demonic_leather/feet', 0), + (11072, 11072, 'accessories/wearable_items/_exp06/demonic_leather/forearms', 0), + (11073, 11073, 'accessories/wearable_items/_exp06/demonic_leather/hands', 0), + (11074, 11074, 'accessories/wearable_items/_exp06/demonic_leather/head', 0), + (11075, 11075, 'accessories/wearable_items/_exp06/demonic_leather/legs', 0), + (11076, 11076, 'accessories/wearable_items/_exp06/demonic_leather/legs_noskirt', 0), + (11077, 11077, 'accessories/wearable_items/_exp06/demonic_leather/shoulders', 0), + (11078, 11078, 'accessories/wearable_items/_exp08/dragon_armor/robe_blue/head', 1096), + (11079, 11079, 'accessories/wearable_items/_exp06/erudite_classic_armor/erudite_classic_armor_robe_violet/skirt', 0), + (11080, 11080, 'accessories/wearable_items/_exp06/erudite_classic_armor/erudite_classic_armor_robe_violet/chest', 0), + (11081, 11081, 'accessories/wearable_items/_exp06/erudite_classic_armor/erudite_classic_armor_robe_violet/head', 0), + (11082, 11082, 'accessories/wearable_items/_exp06/erudite_classic_armor/erudite_classic_armor_robe_violet/head_for_classic_erudite', 0), + (11083, 11083, 'accessories/wearable_items/_exp06/erudite_classic_armor/erudite_classic_armor_robe_violet/hood', 0), + (11084, 11084, 'accessories/wearable_items/_exp06/erudite_classic_armor/erudite_classic_armor_robe_violet/pants', 0), + (11085, 11085, 'accessories/wearable_items/_exp06/erudite_classic_armor/erudite_classic_armor_robe_red/skirt', 0), + (11086, 11086, 'accessories/wearable_items/_exp06/erudite_classic_armor/erudite_classic_armor_robe_red/chest', 0), + (11087, 11087, 'accessories/wearable_items/_exp06/erudite_classic_armor/erudite_classic_armor_robe_red/head', 0), + (11088, 11088, 'accessories/wearable_items/_exp06/erudite_classic_armor/erudite_classic_armor_robe_red/head_for_classic_erudite', 0), + (11089, 11089, 'accessories/wearable_items/_exp06/erudite_classic_armor/erudite_classic_armor_robe_red/hood', 0), + (11090, 11090, 'accessories/wearable_items/_exp06/erudite_classic_armor/erudite_classic_armor_robe_red/pants', 0), + (11091, 11091, 'accessories/wearable_items/_exp06/erudite_classic_armor/erudite_classic_armor_robe_orange/skirt', 0), + (11092, 11092, 'accessories/wearable_items/_exp06/erudite_classic_armor/erudite_classic_armor_robe_orange/chest', 0), + (11093, 11093, 'accessories/wearable_items/_exp06/erudite_classic_armor/erudite_classic_armor_robe_orange/head', 0), + (11094, 11094, 'accessories/wearable_items/_exp06/erudite_classic_armor/erudite_classic_armor_robe_orange/head_for_classic_erudite', 0), + (11095, 11095, 'accessories/wearable_items/_exp06/erudite_classic_armor/erudite_classic_armor_robe_orange/hood', 0), + (11096, 11096, 'accessories/wearable_items/_exp06/erudite_classic_armor/erudite_classic_armor_robe_orange/pants', 0), + (11097, 11097, 'accessories/wearable_items/_exp06/erudite_classic_armor/erudite_classic_armor_robe_blue/skirt', 0), + (11098, 11098, 'accessories/wearable_items/_exp06/erudite_classic_armor/erudite_classic_armor_robe_blue/chest', 0), + (11099, 11099, 'accessories/wearable_items/_exp06/erudite_classic_armor/erudite_classic_armor_robe_blue/head', 0), + (11100, 11100, 'accessories/wearable_items/_exp06/erudite_classic_armor/erudite_classic_armor_robe_blue/head_for_classic_erudite', 0), + (11101, 11101, 'accessories/wearable_items/_exp06/erudite_classic_armor/erudite_classic_armor_robe_blue/hood', 0), + (11102, 11102, 'accessories/wearable_items/_exp06/erudite_classic_armor/erudite_classic_armor_robe_blue/pants', 0), + (11103, 11103, 'staticobjects/helmet/head_armor_heavy', 0), + (11104, 11104, 'staticobjects/tcg/tcg_tapestry_repair', 0), + (11105, 11105, 'staticobjects/tcg/tcg_tapestry_loab', 0), + (11106, 11106, 'staticobjects/tcg/tcg_tapestry_arachnid', 0), + (11107, 11107, 'staticobjects/tcg/tcg_tapestry_roadyle', 0), + (11108, 11108, 'staticobjects/tcg/tcg_tapestry_kruzz', 0), + (11109, 11109, 'accessories/wearable_items/_exp06/demonic_vanguard/head_demonic', 0), + (11110, 11110, 'staticobjects/halloween/dpo_gf_kel_int_divider_wall01_bones', 0), + (11111, 11111, 'accessories/wearable_items/_exp06/defender_of_light_vanguard/skirt', 0), + (11112, 11112, 'accessories/wearable_items/_exp06/defender_of_light_vanguard/chest', 0), + (11113, 11113, 'accessories/wearable_items/_exp06/defender_of_light_vanguard/feet', 0), + (11114, 11114, 'accessories/wearable_items/_exp06/defender_of_light_vanguard/forearms', 0), + (11115, 11115, 'accessories/wearable_items/_exp06/defender_of_light_vanguard/hands', 0), + (11116, 11116, 'accessories/wearable_items/_exp06/defender_of_light_vanguard/head', 0), + (11117, 11117, 'accessories/wearable_items/_exp06/defender_of_light_vanguard/legs', 0), + (11118, 11118, 'accessories/wearable_items/_exp06/defender_of_light_vanguard/legs_noskirt', 0), + (11119, 11119, 'accessories/wearable_items/_exp06/defender_of_light_vanguard/right', 0), + (11120, 11120, 'accessories/wearable_items/_exp06/defender_of_light_vanguard/shoulders', 0), + (11121, 11121, 'accessories/wearable_items/_exp06/defender_of_light_vanguard/shoulders_nopauldrons', 0), + (11122, 11122, '_exp05/zones/objects/exp05_dun_miragul_shard/miragul_firebolt_zapper', 0), + (11123, 11123, '_exp05/zones/objects/exp05_dun_miragul_shard/miragul_ghost_trapper', 0), + (11124, 11124, 'accessories/wearable_items/_exp06/demonic_robe/skirt', 0), + (11125, 11125, 'accessories/wearable_items/_exp06/demonic_robe/chest', 0), + (11126, 11126, 'accessories/wearable_items/_exp06/demonic_robe/head', 0), + (11127, 11127, 'accessories/wearable_items/_exp06/demonic_robe/hood', 0), + (11128, 11128, 'accessories/wearable_items/_exp06/demonic_robe/pants', 0), + (11129, 11129, 'staticobjects/liveevent/halloween/halloween_hedge', 0), + (11130, 11130, '_exp06/characters/monsters/moss_grathok/moss_grathok', 0), + (11131, 11131, 'staticobjects/liveevent/halloween/halloween_tapestry_fire', 0), + (11132, 11132, 'staticobjects/liveevent/halloween/halloween_tapestry_sky', 0), + (11133, 11133, 'staticobjects/liveevent/halloween/halloween_tapestry_spider', 0), + (11134, 11134, 'accessories/wieldable_items/shields/ice_shield/non_ice_shield_metal', 0), + (11135, 11135, 'accessories/wieldable_items/shields/ice_shield/crusted_ice_shield', 0), + (11136, 11136, 'accessories/wieldable_items/shields/ice_shield/crusted_ice_shield_metal', 0), + (11137, 11137, 'accessories/wieldable_items/shields/ice_shield/ice_shield', 0), + (11138, 11138, 'accessories/wieldable_items/shields/ice_shield/ice_shield_greater', 0), + (11139, 11139, 'accessories/wieldable_items/shields/ice_shield/non_ice_shield', 0), + (11140, 11140, 'accessories/wieldable_items/shields/exp06/metal_round_shield', 0), + (11141, 11141, 'accessories/wieldable_items/shields/exp06/golden_round_shield', 0), + (11142, 11142, 'accessories/wieldable_items/shields/exp06/metal_tower_shield', 0), + (11143, 11143, 'accessories/wieldable_items/shields/exp06/golden_tower_shield', 0), + (11144, 11144, 'accessories/wearable_items/_exp08/dragon_armor/robe_blue/head_collar', 1096), + (11145, 11145, 'accessories/wearable_items/_exp06/demonic_gi/chest', 0), + (11146, 11146, 'accessories/wearable_items/_exp06/demonic_gi/feet', 0), + (11147, 11147, 'accessories/wearable_items/_exp06/demonic_gi/hands', 0), + (11148, 11148, 'accessories/wearable_items/_exp08/dragon_armor/robe_blue/pants', 1096), + (11149, 11149, 'accessories/wearable_items/_exp06/demonic_gi/pants', 0), + (11150, 11150, 'accessories/wieldable_items/weapons/exp06/2h_sword/exp06_2h_rhoen_theer_good', 0), + (11151, 11151, 'accessories/wieldable_items/weapons/exp06/2h_sword/exp06_2h_rhoen_theer_evil', 0), + (11152, 11152, 'accessories/wearable_items/_exp06/magic_rune_vanguard01/magic_rune_vanguard_pauldron_left', 0), + (11153, 11153, 'accessories/wearable_items/_exp06/magic_rune_vanguard01/magic_rune_vanguard_pauldron_right', 0), + (11154, 11154, 'accessories/wearable_items/_exp06/magic_rune_vanguard01/shoulders_fancy_pauldrons', 0), + (11155, 11155, 'accessories/wearable_items/_exp06/defender_of_light_vanguard/shoulders_defender_of_light_pauldrons', 0), + (11156, 11156, 'accessories/wearable_items/_exp06/defender_of_light_vanguard/defender_of_light_pauldron_left', 0), + (11157, 11157, 'accessories/wearable_items/_exp06/defender_of_light_vanguard/defender_of_light_pauldron_right', 0), + (11158, 11158, 'accessories/wearable_items/profesion_hats/defender_of_light_helm/defender_of_light_head', 0), + (11159, 11159, 'accessories/wearable_items/_exp06/defender_of_light_vanguard/defender_of_light_belt', 0), + (11160, 11160, 'accessories/wearable_items/_exp06/defender_of_light_vanguard/legs_belt', 0), + (11161, 11161, 'accessories/wearable_items/_exp06/defender_of_light_vanguard/legs_noskirt_belt', 0), + (11162, 11162, 'accessories/wearable_items/profesion_hats/defender_of_light_helm/defender_of_light_crest', 0), + (11163, 11163, 'accessories/wearable_items/profesion_hats/defender_of_light_helm/defender_of_light_head_crest', 0), + (11164, 11164, '_exp06/characters/monsters/sea_dragon/sea_dragon', 0), + (11165, 11165, 'accessories/wieldable_items/shields/exp06/void_claw_shield', 0), + (11166, 11166, 'accessories/wieldable_items/shields/exp06/crystal_star_shield', 0), + (11167, 11167, 'accessories/wieldable_items/shields/exp06/frost_scale_shield', 0), + (11168, 11168, 'accessories/wieldable_items/shields/exp06/hades_mouth_shield', 0), + (11169, 11169, 'accessories/wieldable_items/shields/exp06/kraag_the_undying_shield', 0), + (11170, 11170, 'accessories/wieldable_items/shields/exp06/rhino_skull_shield', 0), + (11171, 11171, 'accessories/wieldable_items/shields/exp06/viny_bulb_shield', 0), + (11172, 11172, 'accessories/wieldable_items/shields/exp06/violet_spike_shield', 0), + (11173, 11173, 'accessories/wearable_items/_exp06/demonic_leather/head_demonic_leather_no_mask', 0), + (11174, 11174, 'accessories/wearable_items/_exp06/demonic_leather/shoulders_pauldrons', 0), + (11175, 11175, 'accessories/wearable_items/_exp06/demonic_leather/demonic_pauldron_left', 0), + (11176, 11176, 'accessories/wearable_items/_exp06/demonic_leather/demonic_pauldron_right', 0), + (11177, 11177, 'accessories/wearable_items/_exp06/demonic_robe/chest_pauldrons', 0), + (11178, 11178, 'accessories/wearable_items/_exp06/demonic_robe/demonic_pauldron_left', 0), + (11179, 11179, 'accessories/wearable_items/_exp06/demonic_robe/demonic_pauldron_right', 0), + (11180, 11180, 'accessories/wearable_items/_exp06/demonic_robe/feet', 0), + (11181, 11181, 'accessories/wearable_items/_exp06/demonic_robe/hands', 0), + (11182, 11182, 'accessories/wearable_items/_exp06/demonic_vanguard/demonic_vanguard_pauldron_left', 0), + (11183, 11183, 'accessories/wearable_items/_exp06/demonic_vanguard/demonic_vanguard_pauldron_right', 0), + (11184, 11184, 'accessories/wearable_items/_exp06/demonic_vanguard/shoulders_demonic_pauldrons', 0), + (11185, 11185, 'accessories/wearable_items/profesion_hats/proffiddlewiz_cap_black/head', 0), + (11186, 11186, 'accessories/wearable_items/profesion_hats/werewolf_mask/head', 0), + (11187, 11187, 'accessories/wearable_items/cloak/exp06/cloak_miragul_icicle', 0), + (11188, 11188, 'accessories/wearable_items/cloak/exp06/cloak_miragul_glacial', 0), + (11189, 11189, 'accessories/wearable_items/cloak/exp06/cloak_miragul_glittering_cloak', 0), + (11190, 11190, 'accessories/wearable_items/cloak/exp06/cloak_miragul_ice_comet', 0), + (11191, 11191, 'ui_fx/fx/systems/environment/shard_of_love/teleport_vision_shard_of_love', 0), + (11192, 11192, 'staticobjects/benches/slove_flame_bench01', 0), + (11193, 11193, 'staticobjects/candles/slove_p04_incense_chalice01_swinging', 0), + (11194, 11194, 'staticobjects/containers/slove_basket01_pom02', 0), + (11195, 11195, 'staticobjects/containers/slove_basket01_pom02_rotten', 0), + (11196, 11196, 'staticobjects/kitchen/slove_pomegranate_piece_rotted01', 0), + (11197, 11197, 'staticobjects/kitchen/slove_pomegranate_whole_dark01', 0), + (11198, 11198, 'staticobjects/pillow/slove_drapery01_destroyed01', 0), + (11199, 11199, 'staticobjects/rubble/slove_rubblepiece_purple01', 0), + (11200, 11200, 'staticobjects/rubble/slove_rubblepiece_trim01', 0), + (11201, 11201, 'staticobjects/statues/slove_statue_arrow01', 0), + (11202, 11202, 'staticobjects/statues/slove_statue_bow_arrow01_covered', 0), + (11203, 11203, 'staticobjects/statues/slove_statue_bow_arrow02_covered', 0), + (11204, 11204, 'staticobjects/statues/slove_statue_bow_arrow03_covered', 0), + (11205, 11205, 'staticobjects/tapestry/dpo_tapestry_design_erollisi_sister', 0), + (11206, 11206, 'accessories/wearable_items/snapons/backpacks/backpack', 0), + (11207, 11207, 'accessories/wearable_items/snapons/backpacks/backpack_pandamen', 0), + (11208, 11208, 'accessories/wearable_items/snapons/backpacks/backpack_adventurer', 0), + (11209, 11209, 'staticobjects/cannon/tinkered_cannon_dpo', 0), + (11210, 11210, 'accessories/wearable_items/_exp08/dragon_armor/robe_brown/skirt', 1096), + (11211, 11211, 'creatures/monsters/displacer_beast', 0), + (11212, 11212, 'creatures/monsters/displacer_beast_skeletal', 0), + (11213, 11213, 'creatures/monsters/drake_flight_path_dawn', 0), + (11214, 11214, 'creatures/monsters/gorgon', 0), + (11215, 11215, 'creatures/monsters/gorgon_golden', 0), + (11216, 11216, 'creatures/monsters/gorgon_rusty', 0), + (11217, 11217, 'creatures/monsters/pegasus_transport', 0), + (11218, 11218, '_exp06/characters/tool_users/erudite_classic_female/erudite_classic_female_ghost_loop', 0), + (11219, 11219, '_exp06/characters/tool_users/erudite_classic_male/erudite_classic_male_ghost_loop', 0), + (11220, 11220, '_exp06/characters/monsters/sea_nayad_good/sea_nayad_good', 0), + (11221, 11221, 'accessories/wearable_items/vanguard/vanguard_chitin_black_golden/upperchest', 0), + (11222, 11222, 'accessories/wearable_items/vanguard/vanguard_chitin_black_golden/chest', 0), + (11223, 11223, 'accessories/wearable_items/vanguard/vanguard_chitin_black_golden/feet', 0), + (11224, 11224, 'accessories/wearable_items/vanguard/vanguard_chitin_black_golden/forearms', 0), + (11225, 11225, 'accessories/wearable_items/vanguard/vanguard_chitin_black_golden/hands', 0), + (11226, 11226, 'accessories/wearable_items/vanguard/vanguard_chitin_black_golden/head', 0), + (11227, 11227, 'accessories/wearable_items/vanguard/vanguard_chitin_black_golden/left', 0), + (11228, 11228, 'accessories/wearable_items/vanguard/vanguard_chitin_black_golden/legs', 0), + (11229, 11229, 'accessories/wearable_items/vanguard/vanguard_chitin_black_golden/legs_noskirt', 0), + (11230, 11230, 'accessories/wearable_items/vanguard/vanguard_chitin_black_golden/pauldron02_vanguard_ridged_left', 0), + (11231, 11231, 'accessories/wearable_items/vanguard/vanguard_chitin_black_golden/pauldron02_vanguard_ridged_right', 0), + (11232, 11232, 'accessories/wearable_items/vanguard/vanguard_chitin_black_golden/pauldron03_vanguard_flared_left', 0), + (11233, 11233, 'accessories/wearable_items/vanguard/vanguard_chitin_black_golden/pauldron03_vanguard_flared_right', 0), + (11234, 11234, 'accessories/wearable_items/vanguard/vanguard_chitin_black_golden/right', 0), + (11235, 11235, 'accessories/wearable_items/vanguard/vanguard_chitin_black_golden/shoulders', 0), + (11236, 11236, 'accessories/wearable_items/vanguard/vanguard_chitin_black_golden/shoulders_nopauldrons', 0), + (11237, 11237, 'accessories/wearable_items/vanguard/vanguard_chitin_black_golden/shoulders_pauldrons_flared', 0), + (11238, 11238, 'accessories/wearable_items/vanguard/vanguard_chitin_black_golden/shoulders_pauldrons_ridged', 0), + (11239, 11239, 'accessories/wearable_items/vanguard/vanguard_chitin_black_golden/skirt', 0), + (11240, 11240, 'accessories/wearable_items/_exp08/dragon_armor/robe_brown/chest', 1096), + (11241, 11241, 'accessories/wearable_items/_exp08/dragon_armor/robe_brown/chest_epic', 1096), + (11242, 11242, 'creatures/tu/pandaman_warrior', 0), + (11243, 11243, 'creatures/tu/pandaman', 0), + (11244, 11244, 'creatures/tu/pandaman_monk', 0), + (11245, 11245, 'creatures/tu/pandaman_traveler', 0), + (11246, 11246, 'creatures/tu/pandaman_warlord', 0), + (11247, 11247, 'creatures/tu/pandaman_warrior_ghost_loop', 0), + (11248, 11248, '_exp06/characters/monsters/sea_nayad_evil/sea_nayad_evil', 0), + (11249, 11249, 'accessories/wearable_items/snapons/backpacks/backpack_provisioner', 0), + (11250, 11250, 'staticobjects/eig/eig_harvest_location_love', 0), + (11251, 11251, 'creatures/monsters/stagg_glass', 0), + (11252, 11252, 'creatures/tu/pandaman_warlord_ghost_loop', 0), + (11253, 11253, 'staticobjects/halloween/bef_banner_burned02', 0), + (11254, 11254, 'staticobjects/halloween/bef_bone_pile01', 0), + (11255, 11255, 'staticobjects/halloween/bef_bone_totem01', 0), + (11256, 11256, 'staticobjects/halloween/bef_bone_totem02', 0), + (11257, 11257, 'staticobjects/halloween/bef_statue_warrior_brokenarm01', 0), + (11258, 11258, 'staticobjects/halloween/cbk_plate_withbone', 0), + (11259, 11259, 'staticobjects/halloween/cbk_plate_withrats', 0), + (11260, 11260, 'staticobjects/halloween/cbk_torch001_skull', 0), + (11261, 11261, 'staticobjects/halloween/cbk_torture_stockade01', 0), + (11262, 11262, 'staticobjects/halloween/cm_manacles_double_wall01', 0), + (11263, 11263, 'staticobjects/halloween/kp_cocoon_ground02_w_coll', 0), + (11264, 11264, 'staticobjects/halloween/lp_coffin_stone01_open01', 0), + (11265, 11265, 'staticobjects/halloween/vek_bottle01', 0), + (11266, 11266, 'staticobjects/halloween/vek_sarcophagi_broken01', 0), + (11267, 11267, 'staticobjects/halloween/vek_sarcophagi_lid', 0), + (11268, 11268, 'staticobjects/halloween/vek_sarcophagi_lower_half', 0), + (11269, 11269, 'accessories/wearable_items/_exp06/defender_of_light_vanguard_gold/shoulders_nopauldrons', 0), + (11270, 11270, 'accessories/wearable_items/_exp06/defender_of_light_vanguard_gold/skirt', 0), + (11271, 11271, 'accessories/wearable_items/_exp06/defender_of_light_vanguard_gold/chest', 0), + (11272, 11272, 'accessories/wearable_items/_exp06/defender_of_light_vanguard_gold/defender_of_light_belt', 0), + (11273, 11273, 'accessories/wearable_items/_exp06/defender_of_light_vanguard_gold/defender_of_light_pauldron_left', 0), + (11274, 11274, 'accessories/wearable_items/_exp06/defender_of_light_vanguard_gold/defender_of_light_pauldron_right', 0), + (11275, 11275, 'accessories/wearable_items/_exp06/defender_of_light_vanguard_gold/feet', 0), + (11276, 11276, 'accessories/wearable_items/_exp06/defender_of_light_vanguard_gold/forearms', 0), + (11277, 11277, 'accessories/wearable_items/_exp06/defender_of_light_vanguard_gold/hands', 0), + (11278, 11278, 'accessories/wearable_items/_exp06/defender_of_light_vanguard_gold/head', 0), + (11279, 11279, 'accessories/wearable_items/_exp06/defender_of_light_vanguard_gold/legs', 0), + (11280, 11280, 'accessories/wearable_items/_exp06/defender_of_light_vanguard_gold/legs_belt', 0), + (11281, 11281, 'accessories/wearable_items/_exp06/defender_of_light_vanguard_gold/legs_noskirt', 0), + (11282, 11282, 'accessories/wearable_items/_exp06/defender_of_light_vanguard_gold/legs_noskirt_belt', 0), + (11283, 11283, 'accessories/wearable_items/_exp06/defender_of_light_vanguard_gold/right', 0), + (11284, 11284, 'accessories/wearable_items/_exp06/defender_of_light_vanguard_gold/shoulders', 0), + (11285, 11285, 'accessories/wearable_items/_exp06/defender_of_light_vanguard_gold/shoulders_defender_of_light_pauldrons', 0), + (11286, 11286, 'ec/npc/orc_ghost_loop', 0), + (11287, 11287, 'accessories/wieldable_items/weapons/exp06/talisman/book/ice_tome_frost', 0), + (11288, 11288, 'accessories/armor_dummy/armor_dummy_female_idle_hologram', 0), + (11289, 11289, 'accessories/armor_dummy/armor_dummy_idle_hologram', 0), + (11290, 11290, 'accessories/wearable_items/snapons/backpacks/backpack_brewmeister', 0), + (11291, 11291, 'staticobjects/portals/void_portal', 0), + (11292, 11292, 'accessories/wearable_items/cloak/exp06/cloak_quellthulian_symbol', 0), + (11293, 11293, 'accessories/wearable_items/_exp06/quellthulian_symbol_vanguard/skirt', 0), + (11294, 11294, 'accessories/wearable_items/_exp06/quellthulian_symbol_vanguard/chest', 0), + (11295, 11295, 'accessories/wearable_items/_exp06/quellthulian_symbol_vanguard/feet', 0), + (11296, 11296, 'accessories/wearable_items/_exp06/quellthulian_symbol_vanguard/forearms', 0), + (11297, 11297, 'accessories/wearable_items/_exp06/quellthulian_symbol_vanguard/hands', 0), + (11298, 11298, 'accessories/wearable_items/_exp06/quellthulian_symbol_vanguard/head', 0), + (11299, 11299, 'accessories/wearable_items/_exp06/quellthulian_symbol_vanguard/head_quellthulian', 0), + (11300, 11300, 'accessories/wearable_items/_exp06/quellthulian_symbol_vanguard/legs', 0), + (11301, 11301, 'accessories/wearable_items/_exp06/quellthulian_symbol_vanguard/legs_noskirt', 0), + (11302, 11302, 'accessories/wearable_items/_exp06/quellthulian_symbol_vanguard/quellthulian_pauldrons_left', 0), + (11303, 11303, 'accessories/wearable_items/_exp06/quellthulian_symbol_vanguard/quellthulian_pauldrons_right', 0), + (11304, 11304, 'accessories/wearable_items/_exp06/quellthulian_symbol_vanguard/quellthulian_shoulders', 0), + (11305, 11305, 'accessories/wearable_items/_exp06/quellthulian_symbol_vanguard/right', 0), + (11306, 11306, 'accessories/wearable_items/_exp06/quellthulian_symbol_vanguard/shoulders', 0), + (11307, 11307, 'accessories/wearable_items/_exp06/quellthulian_symbol_vanguard/shoulders_nopauldrons', 0), + (11308, 11308, '_exp06/characters/tool_users/yael_eyes/yael_eyes', 0), + (11309, 11309, 'accessories/wearable_items/cloak/exp06/cloak_achievement_moon', 0), + (11310, 11310, 'staticobjects/guildhall/trophies/floor_headless', 0), + (11311, 11311, 'accessories/wearable_items/profesion_hats/defender_of_light_helm/defender_of_light_head_gold', 0), + (11312, 11312, 'accessories/wearable_items/profesion_hats/defender_of_light_helm/defender_of_light_head_gold_crest', 0), + (11313, 11313, 'accessories/wearable_items/cloak/exp06/fae_d_wing02_love', 0), + (11314, 11314, 'staticobjects/kitchen/slove_pomegranate_piece_fresh01', 0), + (11315, 11315, 'staticobjects/kitchen/slove_pomegranate_whole01', 0), + (11316, 11316, 'accessories/wearable_items/_exp06/order_of_nature_leather/skirt', 0), + (11317, 11317, 'accessories/wearable_items/_exp06/order_of_nature_leather/chest', 0), + (11318, 11318, 'accessories/wearable_items/_exp06/order_of_nature_leather/demonic_pauldron_left', 0), + (11319, 11319, 'accessories/wearable_items/_exp06/order_of_nature_leather/demonic_pauldron_right', 0), + (11320, 11320, 'accessories/wearable_items/_exp06/order_of_nature_leather/feet', 0), + (11321, 11321, 'accessories/wearable_items/_exp06/order_of_nature_leather/forearms', 0), + (11322, 11322, 'accessories/wearable_items/_exp06/order_of_nature_leather/hands', 0), + (11323, 11323, 'accessories/wearable_items/_exp06/order_of_nature_leather/head', 0), + (11324, 11324, 'accessories/wearable_items/_exp06/order_of_nature_leather/head_demonic_leather_no_mask', 0), + (11325, 11325, 'accessories/wearable_items/_exp06/order_of_nature_leather/legs', 0), + (11326, 11326, 'accessories/wearable_items/_exp06/order_of_nature_leather/legs_noskirt', 0), + (11327, 11327, 'accessories/wearable_items/_exp06/order_of_nature_leather/shoulders', 0), + (11328, 11328, 'accessories/wearable_items/_exp06/order_of_nature_leather/shoulders_nopauldrons', 0), + (11329, 11329, 'accessories/wearable_items/_exp06/order_of_nature_leather/shoulders_pauldrons', 0), + (11330, 11330, 'accessories/wieldable_items/weapons/exp06/2h_sword/exp06_2h_korsha_claymore_ice', 0), + (11331, 11331, '_exp05/monsters/book_dervish_plain', 0), + (11332, 11332, 'accessories/wearable_items/elemental_crowns/shard_of_love_crown_fire', 0), + (11333, 11333, 'accessories/wearable_items/elemental_crowns/shard_of_love_crown_petals', 0), + (11334, 11334, 'staticobjects/chests/tinkered_harvest_depot', 0), + (11335, 11335, 'staticobjects/globes/shard_of_love_flower_snowglobe', 0), + (11336, 11336, '_exp04/monsters/erollisi_dead_open', 0), + (11337, 11337, 'staticobjects/flora/exp06_toxxulia_flower', 0), + (11338, 11338, 'staticobjects/flora/exp06_bamboo_plant', 0), + (11339, 11339, 'staticobjects/flora/exp06_toxxulia_plant', 0), + (11340, 11340, 'staticobjects/_exp06/paineel_chair_01', 0), + (11341, 11341, 'staticobjects/_exp06/paineel_chair_02', 0), + (11342, 11342, 'staticobjects/_exp06/paineel_divider_small', 0), + (11343, 11343, 'staticobjects/_exp06/paineel_divider_triple', 0), + (11344, 11344, 'staticobjects/_exp06/paineel_vase', 0), + (11345, 11345, 'staticobjects/_exp06/paineel_table', 0), + (11346, 11346, 'ui_fx/fx/systems/environment/shard_of_love/teleport_vision_everfrost', 0), + (11347, 11347, 'creatures/mounts/flying_disc/hotwired_gnomish_hoverpad', 0), + (11348, 11348, 'creatures/tu/gods_mithaniel_marr_sword', 0), + (11349, 11349, 'accessories/wieldable_items/weapons/dagger/sai/sai001_ornate_sol', 0), + (11350, 11350, 'accessories/wieldable_items/weapons/great_hammer/great_mace/great_mace001_ornate_sol', 0), + (11351, 11351, 'accessories/wieldable_items/weapons/sword/whip/whip002_runic_sol', 0), + (11352, 11352, 'accessories/wieldable_items/weapons/sword/spatha_sword/spatha_sword001_ornate_sol', 0), + (11353, 11353, 'accessories/wieldable_items/weapons/staff/djinn_staff/djinn_staff_plain_sol', 0), + (11354, 11354, 'accessories/wieldable_items/weapons/dagger/sai/sai001_ornate_love', 0), + (11355, 11355, 'accessories/wieldable_items/weapons/great_hammer/great_mace/great_mace001_ornate_love', 0), + (11356, 11356, 'accessories/wieldable_items/weapons/staff/djinn_staff/djinn_staff_plain_love', 0), + (11357, 11357, 'accessories/wieldable_items/weapons/sword/spatha_sword/spatha_sword001_ornate_love', 0), + (11358, 11358, 'accessories/wieldable_items/weapons/sword/whip/whip002_runic_love', 0), + (11359, 11359, 'staticobjects/bookcases/bixie_bookcase01_full_dpo', 0), + (11360, 11360, 'staticobjects/books/nekcas_eviltrinket_book001_dpo', 0), + (11361, 11361, 'accessories/wieldable_items/weapons/exp03/bow/exp03_bow_giant_wooden_grove_love', 0), + (11362, 11362, 'accessories/wieldable_items/weapons/exp03/bow/exp03_bow_giant_wooden_grove_sol', 0), + (11363, 11363, '_exp06/characters/tool_users/crystaline_folk/crystaline_folk', 0), + (11364, 11364, 'staticobjects/liveevent/frostfell/dpo_klp_icycles_group01', 0), + (11365, 11365, 'staticobjects/liveevent/frostfell/dpo_klp_icycles_group02', 0), + (11366, 11366, 'staticobjects/liveevent/frostfell/dpo_klp_icycles_group03', 0), + (11367, 11367, 'accessories/wearable_items/_exp06/order_of_nature_chain/skirt', 0), + (11368, 11368, 'accessories/wearable_items/_exp06/order_of_nature_chain/chest', 0), + (11369, 11369, 'accessories/wearable_items/_exp06/order_of_nature_chain/feet', 0), + (11370, 11370, 'accessories/wearable_items/_exp06/order_of_nature_chain/forearms', 0), + (11371, 11371, 'accessories/wearable_items/_exp06/order_of_nature_chain/hands', 0), + (11372, 11372, 'accessories/wearable_items/_exp06/order_of_nature_chain/head', 0), + (11373, 11373, 'accessories/wearable_items/_exp06/order_of_nature_chain/legs', 0), + (11374, 11374, 'accessories/wearable_items/_exp06/order_of_nature_chain/legs_noskirt', 0), + (11375, 11375, 'accessories/wearable_items/_exp06/order_of_nature_chain/shoulders', 0), + (11376, 11376, 'staticobjects/tables/librariansdesk_dark', 0), + (11377, 11377, 'staticobjects/racks/towelrack_dark', 0), + (11378, 11378, 'staticobjects/pillow/qey_gemdisplaypillow_dark', 0), + (11379, 11379, 'staticobjects/beds/df_emperorbed02_dark', 0), + (11380, 11380, 'staticobjects/beds/qey_bed_ornateking001_dark', 0), + (11381, 11381, 'staticobjects/bookcases/bixie_bookcase01_dark', 0), + (11382, 11382, 'staticobjects/chairs/bd_judicialchair_dark', 0), + (11383, 11383, 'staticobjects/chairs/cm_chair_chaise01_dark', 0), + (11384, 11384, 'staticobjects/chairs/cm_couch01_dark', 0), + (11385, 11385, 'staticobjects/benches/edk_bench001_fancy_dark', 0), + (11386, 11386, 'accessories/wearable_items/_exp08/dragon_armor/robe_brown/feet', 1096), + (11387, 11387, 'staticobjects/chairs/halfling_stool_square_padded_dark', 0), + (11388, 11388, 'staticobjects/cupboards/bixie_cabinet_dark', 0), + (11389, 11389, 'staticobjects/cupboards/dresser001_dark', 0), + (11390, 11390, 'staticobjects/pillow/slove_rose_couch', 0), + (11391, 11391, 'staticobjects/tables/bixie_table01_dark', 0), + (11392, 11392, 'staticobjects/tapestry/slove_tapestry_red', 0), + (11393, 11393, 'staticobjects/weapons/slove_arrow_houseitem', 0), + (11394, 11394, 'staticobjects/beds/dpo_miragul_bed_ice01', 0), + (11395, 11395, 'staticobjects/bookcases/dpo_miragul_scrollrack_single01', 0), + (11396, 11396, 'staticobjects/tables/dpo_miragul_table_round01', 0), + (11397, 11397, 'staticobjects/brazier/floor_brazier_erudite', 0), + (11398, 11398, 'staticobjects/hitching_posts/fprt_hitchingpostsingle01', 0), + (11399, 11399, 'staticobjects/hitching_posts/qey_hitchingpost_fancy01', 0), + (11400, 11400, 'staticobjects/hitching_posts/qey_hitchingpost_plain01', 0), + (11401, 11401, 'staticobjects/fences/qey_fence_wroughtiron_main01', 0), + (11402, 11402, 'staticobjects/tapestry/dpo_tapestry_design_holiday_canes', 0), + (11403, 11403, 'staticobjects/tapestry/dpo_tapestry_design_holiday_gigglegibber', 0), + (11404, 11404, 'staticobjects/tapestry/dpo_tapestry_design_holiday_snowflakes', 0), + (11405, 11405, 'accessories/wieldable_items/shields/exp06/shard_of_love_gold_shield', 0), + (11406, 11406, 'accessories/wieldable_items/shields/exp06/shard_of_love_white_shield', 0), + (11407, 11407, 'accessories/wieldable_items/weapons/exp04/shield/exp04_shld_dragonhead_ice_composite_shield', 0), + (11408, 11408, '_exp06/zones/objects/exp06_dun_the_sentinel/sen_final_globe_prop_dpo', 0), + (11409, 11409, 'staticobjects/sacks/step_sack_small_open01', 0), + (11410, 11410, 'staticobjects/tables/hum_largetablefancy001_dark', 0), + (11411, 11411, 'accessories/wearable_items/_exp08/dragon_armor/robe_brown/hands', 1096), + (11412, 11412, 'accessories/wearable_items/cloak/exp06/cloak_sol', 0), + (11413, 11413, 'accessories/wieldable_items/tools/fisherman/common001_right_for_panda', 0), + (11414, 11414, 'accessories/wieldable_items/shields/exp06/broken_heart_shield', 0), + (11415, 11415, 'accessories/wieldable_items/shields/exp06/shard_of_love_tower_shield', 0), + (11416, 11416, 'accessories/wearable_items/cloak/exp06/cloak_sunset', 0), + (11417, 11417, 'staticobjects/liveevent/frostfell/dpo_holiday_bones_cazic', 0), + (11418, 11418, 'staticobjects/liveevent/frostfell/dpo_xmas_bowl_skull_apple', 0), + (11419, 11419, 'staticobjects/liveevent/frostfell/dpo_snowman01_dagger', 0), + (11420, 11420, 'staticobjects/liveevent/frostfell/dpo_holiday_skullrow_candycane', 0), + (11421, 11421, '_exp06/zones/objects/exp06_prelude_events/dpo_teleportspires_ghosted_ulteran', 0), + (11422, 11422, 'staticobjects/dressers/washbasin_dresser_dpo', 0), + (11423, 11423, 'staticobjects/liveevent/contest_painting_aug09/contest_painting_valeric', 0), + (11424, 11424, 'staticobjects/liveevent/contest_painting_aug09/contest_painting_bramdar', 0), + (11425, 11425, 'staticobjects/liveevent/contest_painting_aug09/contest_painting_citadelli_1stplace', 0), + (11426, 11426, 'staticobjects/liveevent/contest_painting_aug09/contest_painting_crabbok', 0), + (11427, 11427, 'staticobjects/liveevent/contest_painting_aug09/contest_painting_elquinjena', 0), + (11428, 11428, 'staticobjects/liveevent/contest_painting_aug09/contest_painting_enna', 0), + (11429, 11429, 'staticobjects/liveevent/contest_painting_aug09/contest_painting_nahdia', 0), + (11430, 11430, 'staticobjects/liveevent/contest_painting_aug09/contest_painting_ryusaru', 0), + (11431, 11431, 'staticobjects/liveevent/contest_painting_aug09/contest_painting_saisha', 0), + (11432, 11432, 'staticobjects/liveevent/contest_painting_aug09/contest_painting_sucuri', 0), + (11433, 11433, 'staticobjects/panels/dpo_blueglass_panel', 0), + (11434, 11434, 'staticobjects/panels/dpo_darkplank_panel', 0), + (11435, 11435, 'staticobjects/panels/dpo_purpleflower_panel', 0), + (11436, 11436, 'staticobjects/panels/dpo_sand_panel', 0), + (11437, 11437, 'staticobjects/panels/dpo_wavysand_panel', 0), + (11438, 11438, 'staticobjects/chairs/dpo_queenscouch_dark', 0), + (11439, 11439, 'staticobjects/chests/dpo_treasurechest_clean003_dark', 0), + (11440, 11440, 'staticobjects/dividers/dpo_gf_kel_int_divider_wall01_sumac', 0), + (11441, 11441, 'staticobjects/dividers/dpo_drv_divider_plain01_dark2', 0), + (11442, 11442, 'staticobjects/dividers/dpo_drv_divider_plain01_dark', 0), + (11443, 11443, 'staticobjects/liveevent/cityfestivals/dpo_wallmailbox_freeport', 0), + (11444, 11444, 'staticobjects/liveevent/cityfestivals/dpo_wallmailbox_gorowyn', 0), + (11445, 11445, 'staticobjects/liveevent/cityfestivals/dpo_wallmailbox_kelethin', 0), + (11446, 11446, 'staticobjects/liveevent/cityfestivals/dpo_wallmailbox_neriak', 0), + (11447, 11447, 'staticobjects/liveevent/cityfestivals/dpo_wallmailbox_qeynos', 0), + (11448, 11448, 'creatures/monsters/goo_glass_green', 0), + (11449, 11449, '_exp06/monsters/skull_green', 0), + (11450, 11450, 'staticobjects/liveevent/frostfell/dpo_holiday_orcskull_candycane', 0), + (11451, 11451, 'staticobjects/chairs/miragul_obj_dias01', 0), + (11452, 11452, 'staticobjects/benches/miragul_obj_dias02', 0), + (11453, 11453, 'accessories/wieldable_items/weapons/exp06/1h_crush/exp06_1h_crush_erolissi_censer', 0), + (11454, 11454, 'staticobjects/tcg/tcg_tapestry_boots_wings', 0), + (11455, 11455, 'accessories/wearable_items/cloak/exp06/cloak_solid_black_rune', 0), + (11456, 11456, 'accessories/wearable_items/cloak/exp06/cloak_master_assassin', 0), + (11457, 11457, 'creatures/monsters/willowisp_branches', 0), + (11458, 11458, 'accessories/wearable_items/_exp06/defender_of_light_armor_leather/skirt', 0), + (11459, 11459, 'accessories/wearable_items/_exp06/defender_of_light_armor_leather/chest', 0), + (11460, 11460, 'accessories/wearable_items/_exp06/defender_of_light_armor_leather/feet', 0), + (11461, 11461, 'accessories/wearable_items/_exp06/defender_of_light_armor_leather/forearms', 0), + (11462, 11462, 'accessories/wearable_items/_exp06/defender_of_light_armor_leather/hands', 0), + (11463, 11463, 'accessories/wearable_items/_exp06/defender_of_light_armor_leather/head', 0), + (11464, 11464, 'accessories/wearable_items/_exp06/defender_of_light_armor_leather/legs', 0), + (11465, 11465, 'accessories/wearable_items/_exp06/defender_of_light_armor_leather/legs_noskirt', 0), + (11466, 11466, 'accessories/wearable_items/_exp06/defender_of_light_armor_leather/pauldron_defender_of_light_left', 0), + (11467, 11467, 'accessories/wearable_items/_exp06/defender_of_light_armor_leather/pauldron_defender_of_light_right', 0), + (11468, 11468, 'accessories/wearable_items/_exp06/defender_of_light_armor_leather/shoulders', 0), + (11469, 11469, 'accessories/wearable_items/_exp06/defender_of_light_armor_leather/shoulders_nopauldrons', 0), + (11470, 11470, 'accessories/wearable_items/_exp06/achievement_fire_chain/skirt', 0), + (11471, 11471, 'accessories/wearable_items/_exp06/achievement_fire_chain/chest', 0), + (11472, 11472, 'accessories/wearable_items/_exp06/achievement_fire_chain/feet', 0), + (11473, 11473, 'accessories/wearable_items/_exp06/achievement_fire_chain/forearms', 0), + (11474, 11474, 'accessories/wearable_items/_exp06/achievement_fire_chain/hands', 0), + (11475, 11475, 'accessories/wearable_items/_exp06/achievement_fire_chain/head', 0), + (11476, 11476, 'accessories/wearable_items/_exp06/achievement_fire_chain/legs', 0), + (11477, 11477, 'accessories/wearable_items/_exp06/achievement_fire_chain/legs_noskirt', 0), + (11478, 11478, 'accessories/wearable_items/_exp06/achievement_fire_chain/shoulders', 0), + (11479, 11479, 'accessories/wearable_items/_exp06/achievement_forest_chain/skirt', 0), + (11480, 11480, 'accessories/wearable_items/_exp06/achievement_forest_chain/chest', 0), + (11481, 11481, 'accessories/wearable_items/_exp06/achievement_forest_chain/feet', 0), + (11482, 11482, 'accessories/wearable_items/_exp06/achievement_forest_chain/forearms', 0), + (11483, 11483, 'accessories/wearable_items/_exp06/achievement_forest_chain/hands', 0), + (11484, 11484, 'accessories/wearable_items/_exp06/achievement_forest_chain/head', 0), + (11485, 11485, 'accessories/wearable_items/_exp06/achievement_forest_chain/legs', 0), + (11486, 11486, 'accessories/wearable_items/_exp06/achievement_forest_chain/legs_noskirt', 0), + (11487, 11487, 'accessories/wearable_items/_exp06/achievement_forest_chain/shoulders', 0), + (11488, 11488, 'accessories/wearable_items/_exp06/achievement_sky_leather/skirt', 0), + (11489, 11489, 'accessories/wearable_items/_exp06/achievement_sky_leather/chest', 0), + (11490, 11490, 'accessories/wearable_items/_exp06/achievement_sky_leather/feet', 0), + (11491, 11491, 'accessories/wearable_items/_exp06/achievement_sky_leather/forearms', 0), + (11492, 11492, 'accessories/wearable_items/_exp06/achievement_sky_leather/hands', 0), + (11493, 11493, 'accessories/wearable_items/_exp06/achievement_sky_leather/head', 0), + (11494, 11494, 'accessories/wearable_items/_exp06/achievement_sky_leather/legs', 0), + (11495, 11495, 'accessories/wearable_items/_exp06/achievement_sky_leather/legs_noskirt', 0), + (11496, 11496, 'accessories/wearable_items/_exp06/achievement_sky_leather/shoulders', 0), + (11497, 11497, 'accessories/wearable_items/_exp06/achievement_sky_vanguard/skirt', 0), + (11498, 11498, 'accessories/wearable_items/_exp06/achievement_sky_vanguard/chest', 0), + (11499, 11499, 'accessories/wearable_items/_exp06/achievement_sky_vanguard/feet', 0), + (11500, 11500, 'accessories/wearable_items/_exp06/achievement_sky_vanguard/forearms', 0), + (11501, 11501, 'accessories/wearable_items/_exp06/achievement_sky_vanguard/hands', 0), + (11502, 11502, 'accessories/wearable_items/_exp06/achievement_sky_vanguard/head', 0), + (11503, 11503, 'accessories/wearable_items/_exp06/achievement_sky_vanguard/legs', 0), + (11504, 11504, 'accessories/wearable_items/_exp06/achievement_sky_vanguard/legs_noskirt', 0), + (11505, 11505, 'accessories/wearable_items/_exp06/achievement_sky_vanguard/right', 0), + (11506, 11506, 'accessories/wearable_items/_exp06/achievement_sky_vanguard/shoulders', 0), + (11507, 11507, 'accessories/wearable_items/_exp06/achievement_sky_vanguard/shoulders_nopauldrons', 0), + (11508, 11508, 'accessories/wearable_items/_exp06/achievement_swamp_vanguard/skirt', 0), + (11509, 11509, 'accessories/wearable_items/_exp06/achievement_swamp_vanguard/chest', 0), + (11510, 11510, 'accessories/wearable_items/_exp06/achievement_swamp_vanguard/feet', 0), + (11511, 11511, 'accessories/wearable_items/_exp06/achievement_swamp_vanguard/forearms', 0), + (11512, 11512, 'accessories/wearable_items/_exp06/achievement_swamp_vanguard/hands', 0), + (11513, 11513, 'accessories/wearable_items/_exp06/achievement_swamp_vanguard/head', 0), + (11514, 11514, 'accessories/wearable_items/_exp06/achievement_swamp_vanguard/legs', 0), + (11515, 11515, 'accessories/wearable_items/_exp06/achievement_swamp_vanguard/legs_noskirt', 0), + (11516, 11516, 'accessories/wearable_items/_exp06/achievement_swamp_vanguard/right', 0), + (11517, 11517, 'accessories/wearable_items/_exp06/achievement_swamp_vanguard/shoulders', 0), + (11518, 11518, 'accessories/wearable_items/_exp06/achievement_swamp_vanguard/shoulders_nopauldrons', 0), + (11519, 11519, 'creatures/tu/gods_mithaniel_marr_beard_helm', 0), + (11520, 11520, 'creatures/tu/gods_mithaniel_marr_helm_beard_sword', 0), + (11521, 11521, 'staticobjects/mirrors/vampire_mirror_nocol', 0), + (11522, 11522, 'accessories/wearable_items/_exp06/achievement_fire_robe/skirt', 0), + (11523, 11523, 'accessories/wearable_items/_exp06/achievement_fire_robe/chest', 0), + (11524, 11524, 'accessories/wearable_items/_exp06/achievement_fire_robe/head', 0), + (11525, 11525, 'accessories/wearable_items/_exp06/achievement_fire_robe/hood', 0), + (11526, 11526, 'accessories/wearable_items/_exp06/achievement_fire_robe/pants', 0), + (11527, 11527, 'accessories/wearable_items/_exp06/achievement_forest_robe/skirt', 0), + (11528, 11528, 'accessories/wearable_items/_exp06/achievement_forest_robe/chest', 0), + (11529, 11529, 'accessories/wearable_items/_exp06/achievement_forest_robe/head', 0), + (11530, 11530, 'accessories/wearable_items/_exp06/achievement_forest_robe/hood', 0), + (11531, 11531, 'accessories/wearable_items/_exp06/achievement_forest_robe/pants', 0), + (11532, 11532, 'accessories/wearable_items/_exp06/achievement_swamp_robe/skirt', 0), + (11533, 11533, 'accessories/wearable_items/_exp06/achievement_swamp_robe/chest', 0), + (11534, 11534, 'accessories/wearable_items/_exp06/achievement_swamp_robe/head', 0), + (11535, 11535, 'accessories/wearable_items/_exp06/achievement_swamp_robe/hood', 0), + (11536, 11536, 'accessories/wearable_items/_exp06/achievement_swamp_robe/pants', 0), + (11537, 11537, 'accessories/wieldable_items/shields/exp06/mithaniel_round_shield', 0), + (11538, 11538, 'accessories/wearable_items/cloak/exp06/cloak_crystal_shard', 0), + (11539, 11539, 'accessories/wieldable_items/weapons/exp04/1h_crush/exp04_1hc_spiked_mace_love', 0), + (11540, 11540, 'accessories/wieldable_items/weapons/exp04/1h_crush/exp04_1hc_spiked_mace_sol', 0), + (11541, 11541, 'accessories/wearable_items/_exp06/order_of_nature_vanguard/skirt', 0), + (11542, 11542, 'accessories/wearable_items/_exp06/order_of_nature_vanguard/chest', 0), + (11543, 11543, 'accessories/wearable_items/_exp06/order_of_nature_vanguard/feet', 0), + (11544, 11544, 'accessories/wearable_items/_exp06/order_of_nature_vanguard/forearms', 0), + (11545, 11545, 'accessories/wearable_items/_exp06/order_of_nature_vanguard/hands', 0), + (11546, 11546, 'accessories/wearable_items/_exp06/order_of_nature_vanguard/head', 0), + (11547, 11547, 'accessories/wearable_items/_exp06/order_of_nature_vanguard/legs', 0), + (11548, 11548, 'accessories/wearable_items/_exp06/order_of_nature_vanguard/legs_noskirt', 0), + (11549, 11549, 'accessories/wearable_items/_exp06/order_of_nature_vanguard/right', 0), + (11550, 11550, 'accessories/wearable_items/_exp06/order_of_nature_vanguard/shoulders', 0), + (11551, 11551, 'accessories/wearable_items/_exp06/order_of_nature_vanguard/shoulders_nopauldrons', 0), + (11552, 11552, '_exp06/zones/objects/exp06_prelude_events/dpo_teleportspires01_phase01_everfrost', 0), + (11553, 11553, '_exp06/zones/objects/exp06_prelude_events/dpo_teleportspires01_phase02_everfrost', 0), + (11554, 11554, '_exp06/zones/objects/exp06_prelude_events/dpo_teleportspires01_phase03_everfrost', 0), + (11555, 11555, '_exp06/zones/objects/exp06_prelude_events/dpo_teleportspires01_phase04_everfrost', 0), + (11556, 11556, '_exp06/zones/objects/exp06_prelude_events/dpo_teleportspires01_phase05_everfrost', 0), + (11557, 11557, '_exp06/zones/objects/exp06_prelude_events/dpo_teleportspires01_phase06_everfrost_final', 0), + (11558, 11558, 'staticobjects/liveevent/frostfell/floortile_ice', 0), + (11559, 11559, 'staticobjects/liveevent/frostfell/pedestal_table_ice', 0), + (11560, 11560, 'staticobjects/liveevent/frostfell/mirror_ice', 0), + (11561, 11561, 'staticobjects/liveevent/cityfestivals/freeport_floortile_black', 0), + (11562, 11562, 'staticobjects/liveevent/cityfestivals/qeynos_roundcounter', 0), + (11563, 11563, 'staticobjects/liveevent/cityfestivals/travelling_cart_twowheel', 0), + (11564, 11564, 'staticobjects/liveevent/cityfestivals/travelling_cart_fourwheel', 0), + (11565, 11565, 'staticobjects/liveevent/cityfestivals/freeport_candeholder', 0), + (11566, 11566, 'staticobjects/liveevent/cityfestivals/freeport_candelabra', 0), + (11567, 11567, 'staticobjects/liveevent/cityfestivals/neriak_streetlamp_plain_red', 0), + (11568, 11568, 'staticobjects/liveevent/cityfestivals/neriak_streetlamp_plain_purple', 0), + (11569, 11569, 'staticobjects/liveevent/cityfestivals/neriak_streetlamp_plain_green', 0), + (11570, 11570, 'staticobjects/liveevent/cityfestivals/neriak_streetlamp_plain_blue', 0), + (11571, 11571, 'staticobjects/liveevent/cityfestivals/neriak_streetlamp_purple', 0), + (11572, 11572, 'staticobjects/liveevent/cityfestivals/neriak_streetlamp_blue', 0), + (11573, 11573, 'staticobjects/liveevent/cityfestivals/neriak_streetlamp', 0), + (11574, 11574, 'staticobjects/liveevent/cityfestivals/neriak_table_large', 0), + (11575, 11575, 'staticobjects/liveevent/cityfestivals/kelethin_chair_royal', 0), + (11576, 11576, 'staticobjects/liveevent/cityfestivals/kelethin_table_round_fancy', 0), + (11577, 11577, 'staticobjects/liveevent/cityfestivals/kelethin_table_round_inlaid', 0), + (11578, 11578, 'staticobjects/liveevent/cityfestivals/kelethin_table_curvy', 0), + (11579, 11579, 'staticobjects/liveevent/cityfestivals/kelethin_table_long', 0), + (11580, 11580, 'staticobjects/liveevent/cityfestivals/kelethin_table_bedside', 0), + (11581, 11581, 'staticobjects/liveevent/cityfestivals/kelethin_desk', 0), + (11582, 11582, 'staticobjects/liveevent/cityfestivals/kelethin_chair_leaf', 0), + (11583, 11583, 'staticobjects/liveevent/cityfestivals/kelethin_banner_royal', 0), + (11584, 11584, 'staticobjects/liveevent/cityfestivals/kelethin_basket_gourd_mixedberry', 0), + (11585, 11585, 'staticobjects/liveevent/cityfestivals/kelethin_basket_gourd_raspberry', 0), + (11586, 11586, 'staticobjects/liveevent/cityfestivals/kelethin_basket_gourd_cranberry', 0), + (11587, 11587, 'staticobjects/liveevent/cityfestivals/kelethin_basket_gourd_blueberry', 0), + (11588, 11588, 'staticobjects/liveevent/cityfestivals/kelethin_basket_cranberry', 0), + (11589, 11589, 'staticobjects/liveevent/cityfestivals/kelethin_basket_blueberry_short', 0), + (11590, 11590, 'staticobjects/liveevent/cityfestivals/kelethin_basket_raspberry', 0), + (11591, 11591, 'staticobjects/liveevent/cityfestivals/kelethin_basket_blueberry', 0), + (11592, 11592, 'staticobjects/liveevent/cityfestivals/kelethin_shelf_shroom_blue', 0), + (11593, 11593, 'staticobjects/liveevent/cityfestivals/kelethin_shelf_shroom', 0), + (11594, 11594, 'staticobjects/liveevent/cityfestivals/gorowyn_bankvault', 0), + (11595, 11595, 'staticobjects/liveevent/cityfestivals/gorowyn_cauldron', 0), + (11596, 11596, 'staticobjects/liveevent/cityfestivals/gorowyn_weaponrack', 0), + (11597, 11597, 'staticobjects/liveevent/cityfestivals/gorowyn_scrollcase_dual', 0), + (11598, 11598, 'staticobjects/liveevent/cityfestivals/gorowyn_counter', 0), + (11599, 11599, 'staticobjects/liveevent/cityfestivals/gorowyn_weathervane', 0), + (11600, 11600, 'staticobjects/liveevent/cityfestivals/qeynos_sconce', 0), + (11601, 11601, 'staticobjects/liveevent/cityfestivals/freeport_candle', 0), + (11602, 11602, 'staticobjects/liveevent/cityfestivals/qeynos_table_pedestal', 0), + (11603, 11603, 'staticobjects/liveevent/cityfestivals/gorowyn_table_pedestal', 0), + (11604, 11604, 'staticobjects/liveevent/cityfestivals/kelethin_table_pedestal', 0), + (11605, 11605, 'staticobjects/liveevent/cityfestivals/neriak_table_pedestal', 0), + (11606, 11606, 'staticobjects/liveevent/cityfestivals/freeport_table_pedestal', 0), + (11607, 11607, 'staticobjects/liveevent/cityfestivals/qeynos_post', 0), + (11608, 11608, 'staticobjects/liveevent/cityfestivals/neriak_post', 0), + (11609, 11609, 'staticobjects/liveevent/cityfestivals/kelethin_post', 0), + (11610, 11610, 'staticobjects/liveevent/cityfestivals/gorowyn_post', 0), + (11611, 11611, 'staticobjects/liveevent/cityfestivals/freeport_post', 0), + (11612, 11612, 'staticobjects/liveevent/cityfestivals/qeynos_wallsconce_fancy', 0), + (11613, 11613, 'staticobjects/liveevent/cityfestivals/gorowyn_floorlamp_plain', 0), + (11614, 11614, 'staticobjects/liveevent/cityfestivals/kelethin_floorlamp_plain', 0), + (11615, 11615, 'staticobjects/liveevent/cityfestivals/qeynos_candlestick', 0), + (11616, 11616, 'staticobjects/liveevent/cityfestivals/qeynos_quad_lamppost', 0), + (11617, 11617, 'staticobjects/liveevent/cityfestivals/qeynos_dual_lamppost', 0), + (11618, 11618, 'staticobjects/liveevent/cityfestivals/qeynos_short_lamp', 0), + (11619, 11619, 'staticobjects/liveevent/cityfestivals/qeynos_wallhanging_lamp', 0), + (11620, 11620, 'staticobjects/liveevent/cityfestivals/gorowyn_brazier', 0), + (11621, 11621, 'staticobjects/liveevent/cityfestivals/qeynos_mirror', 0), + (11622, 11622, 'staticobjects/liveevent/cityfestivals/neriak_mirror', 0), + (11623, 11623, 'staticobjects/liveevent/cityfestivals/kelethin_mirror', 0), + (11624, 11624, 'staticobjects/liveevent/cityfestivals/gorowyn_mirror', 0), + (11625, 11625, 'staticobjects/liveevent/cityfestivals/freeport_mirror', 0), + (11626, 11626, 'staticobjects/liveevent/cityfestivals/freeport_lantern_post_short', 0), + (11627, 11627, 'staticobjects/liveevent/cityfestivals/freeport_lantern_post', 0), + (11628, 11628, 'staticobjects/liveevent/cityfestivals/freeport_lamppost', 0), + (11629, 11629, 'staticobjects/liveevent/cityfestivals/neriak_roundcounter', 0), + (11630, 11630, 'staticobjects/liveevent/cityfestivals/kelethin_roundcounter', 0), + (11631, 11631, 'staticobjects/liveevent/cityfestivals/gorowyn_roundcounter', 0), + (11632, 11632, 'staticobjects/liveevent/cityfestivals/freeport_roundcounter', 0), + (11633, 11633, 'staticobjects/liveevent/cityfestivals/freeport_banner', 0), + (11634, 11634, 'staticobjects/liveevent/cityfestivals/neriak_candelabra', 0), + (11635, 11635, 'staticobjects/liveevent/cityfestivals/neriak_sign', 0), + (11636, 11636, 'staticobjects/liveevent/cityfestivals/qeynos_sign', 0), + (11637, 11637, 'staticobjects/liveevent/cityfestivals/freeport_sign', 0), + (11638, 11638, 'staticobjects/liveevent/cityfestivals/gorowyn_sign', 0), + (11639, 11639, 'staticobjects/liveevent/cityfestivals/kelethin_sign', 0), + (11640, 11640, 'staticobjects/liveevent/cityfestivals/neriak_wallsign', 0), + (11641, 11641, 'staticobjects/liveevent/cityfestivals/qeynos_largecolumn', 0), + (11642, 11642, 'staticobjects/liveevent/cityfestivals/gorowyn_largecolumn', 0), + (11643, 11643, 'staticobjects/liveevent/cityfestivals/kelethin_largecolumn', 0), + (11644, 11644, 'staticobjects/liveevent/cityfestivals/neriak_largecolumn', 0), + (11645, 11645, 'staticobjects/liveevent/cityfestivals/freeport_largecolumn', 0), + (11646, 11646, 'staticobjects/liveevent/cityfestivals/qeynos_displaycounter', 0), + (11647, 11647, 'staticobjects/liveevent/cityfestivals/neriak_displaycounter', 0), + (11648, 11648, 'staticobjects/liveevent/cityfestivals/kelethin_displaycounter', 0), + (11649, 11649, 'staticobjects/liveevent/cityfestivals/gorowyn_displaycounter', 0), + (11650, 11650, 'staticobjects/liveevent/cityfestivals/freeport_displaycounter', 0), + (11651, 11651, 'staticobjects/liveevent/cityfestivals/qeynos_floortile_white', 0), + (11652, 11652, 'staticobjects/liveevent/cityfestivals/gorowyn_floortile_red', 0), + (11653, 11653, 'staticobjects/liveevent/cityfestivals/kelethin_floortile_wood', 0), + (11654, 11654, 'staticobjects/liveevent/cityfestivals/neriak_floortile_blue', 0), + (11655, 11655, 'accessories/wearable_items/_exp08/dragon_armor/robe_brown/head', 1096), + (11656, 11656, 'staticobjects/liveevent/cityfestivals/qeynos_banner', 0), + (11657, 11657, 'staticobjects/tapestry/dpo_tapestry_design_shardoflove1', 0), + (11658, 11658, 'staticobjects/tapestry/dpo_tapestry_design_shardoflove2', 0), + (11659, 11659, 'staticobjects/globes/sol_globe01', 0), + (11660, 11660, 'staticobjects/liveevent/eq2anniversary_moon_tapestry01', 0), + (11661, 11661, 'staticobjects/liveevent/eq2anniversary_claymore01', 0), + (11662, 11662, 'accessories/wearable_items/snapons/backpacks/backpack_frostfell_01', 0), + (11663, 11663, 'staticobjects/_exp06/bamboo_stalk_small', 0), + (11664, 11664, 'staticobjects/tradeskill_objects/vrsn_fabricbolt01_blue', 0), + (11665, 11665, 'staticobjects/tradeskill_objects/vrsn_fabricbolt01_green', 0), + (11666, 11666, 'staticobjects/tradeskill_objects/vrsn_fabricbolt01_print01', 0), + (11667, 11667, 'staticobjects/tradeskill_objects/vrsn_fabricbolt01_print02', 0), + (11668, 11668, 'staticobjects/tradeskill_objects/vrsn_fabricbolt01_print03', 0), + (11669, 11669, 'staticobjects/tradeskill_objects/vrsn_fabricbolt01_print04', 0), + (11670, 11670, 'staticobjects/tradeskill_objects/vrsn_fabricbolt01_red', 0), + (11671, 11671, 'staticobjects/tradeskill_objects/vrsn_fabricbolt01_yellow', 0), + (11672, 11672, 'staticobjects/tradeskill_objects/vrsn_loom01', 0), + (11673, 11673, 'staticobjects/tradeskill_objects/vrsn_spinningwheel01', 0), + (11674, 11674, 'staticobjects/tradeskill_objects/vrsn_table06_sewing', 0), + (11675, 11675, 'creatures/tu/rhoen_theer', 0), + (11676, 11676, 'creatures/tu/rhoen_theer_evil', 0), + (11677, 11677, 'staticobjects/_exp06/dpo_panda_skull', 0), + (11678, 11678, '_exp06/characters/tool_users/crystaline_folk_blue/crystaline_folk_blue', 0), + (11679, 11679, '_exp06/characters/tool_users/crystaline_folk_red/crystaline_folk_red', 0), + (11680, 11680, 'accessories/npc_wearables/crystaline_folk/shoulders_right_large', 0), + (11681, 11681, 'accessories/npc_wearables/crystaline_folk/chest_huge_back', 0), + (11682, 11682, 'accessories/npc_wearables/crystaline_folk/head_crystal_crown', 0), + (11683, 11683, 'accessories/npc_wearables/crystaline_folk/legs_both_lower', 0), + (11684, 11684, 'accessories/npc_wearables/crystaline_folk/legs_left_lower', 0), + (11685, 11685, 'accessories/npc_wearables/crystaline_folk/legs_right_lower', 0), + (11686, 11686, 'accessories/npc_wearables/crystaline_folk/shoulders_both_claw', 0), + (11687, 11687, 'accessories/npc_wearables/crystaline_folk/shoulders_both_hook', 0), + (11688, 11688, 'accessories/npc_wearables/crystaline_folk/shoulders_both_hook_claw', 0), + (11689, 11689, 'accessories/npc_wearables/crystaline_folk/shoulders_both_hook_large', 0), + (11690, 11690, 'accessories/npc_wearables/crystaline_folk/shoulders_both_large', 0), + (11691, 11691, 'accessories/npc_wearables/crystaline_folk/shoulders_left_claw', 0), + (11692, 11692, 'accessories/npc_wearables/crystaline_folk/shoulders_left_hook', 0), + (11693, 11693, 'accessories/npc_wearables/crystaline_folk/shoulders_left_large', 0), + (11694, 11694, 'accessories/npc_wearables/crystaline_folk/shoulders_right_claw', 0), + (11695, 11695, 'accessories/npc_wearables/crystaline_folk/shoulders_right_hook', 0), + (11696, 11696, 'accessories/npc_wearables/crystaline_folk_blue/shoulders_right_large_blue', 0), + (11697, 11697, 'accessories/npc_wearables/crystaline_folk_blue/chest_huge_back_blue', 0), + (11698, 11698, 'accessories/npc_wearables/crystaline_folk_blue/legs_both_lower_blue', 0), + (11699, 11699, 'accessories/npc_wearables/crystaline_folk_blue/legs_left_lower_blue', 0), + (11700, 11700, 'accessories/npc_wearables/crystaline_folk_blue/legs_right_lower_blue', 0), + (11701, 11701, 'accessories/npc_wearables/crystaline_folk_blue/shoulders_both_claw_blue', 0), + (11702, 11702, 'accessories/npc_wearables/crystaline_folk_blue/shoulders_both_hook_blue', 0), + (11703, 11703, 'accessories/npc_wearables/crystaline_folk_blue/shoulders_both_hook_claw_blue', 0), + (11704, 11704, 'accessories/npc_wearables/crystaline_folk_blue/shoulders_both_hook_large_blue', 0), + (11705, 11705, 'accessories/npc_wearables/crystaline_folk_blue/shoulders_both_large_blue', 0), + (11706, 11706, 'accessories/npc_wearables/crystaline_folk_blue/shoulders_left_claw_blue', 0), + (11707, 11707, 'accessories/npc_wearables/crystaline_folk_blue/shoulders_left_hook_blue', 0), + (11708, 11708, 'accessories/npc_wearables/crystaline_folk_blue/shoulders_left_large_blue', 0), + (11709, 11709, 'accessories/npc_wearables/crystaline_folk_blue/shoulders_right_claw_blue', 0), + (11710, 11710, 'accessories/npc_wearables/crystaline_folk_blue/shoulders_right_hook_blue', 0), + (11711, 11711, 'accessories/npc_wearables/crystaline_folk_red/shoulders_right_large_red', 0), + (11712, 11712, 'accessories/npc_wearables/crystaline_folk_red/chest_huge_back_red', 0), + (11713, 11713, 'accessories/npc_wearables/crystaline_folk_red/legs_both_lower_red', 0), + (11714, 11714, 'accessories/npc_wearables/crystaline_folk_red/legs_left_lower_red', 0), + (11715, 11715, 'accessories/npc_wearables/crystaline_folk_red/legs_right_lower_red', 0), + (11716, 11716, 'accessories/npc_wearables/crystaline_folk_red/shoulders_both_claw_red', 0), + (11717, 11717, 'accessories/npc_wearables/crystaline_folk_red/shoulders_both_hook_claw_red', 0), + (11718, 11718, 'accessories/npc_wearables/crystaline_folk_red/shoulders_both_hook_large_red', 0), + (11719, 11719, 'accessories/npc_wearables/crystaline_folk_red/shoulders_both_hook_red', 0), + (11720, 11720, 'accessories/npc_wearables/crystaline_folk_red/shoulders_both_large_red', 0), + (11721, 11721, 'accessories/npc_wearables/crystaline_folk_red/shoulders_left_claw_red', 0), + (11722, 11722, 'accessories/npc_wearables/crystaline_folk_red/shoulders_left_hook_red', 0), + (11723, 11723, 'accessories/npc_wearables/crystaline_folk_red/shoulders_left_large_red', 0), + (11724, 11724, 'accessories/npc_wearables/crystaline_folk_red/shoulders_right_claw_red', 0), + (11725, 11725, 'accessories/npc_wearables/crystaline_folk_red/shoulders_right_hook_red', 0), + (11726, 11726, 'creatures/monsters/skeletal_pegasus', 0), + (11727, 11727, 'accessories/wearable_items/_exp06/defender_of_light_armor_chain/skirt', 0), + (11728, 11728, 'accessories/wearable_items/_exp06/defender_of_light_armor_chain/chest', 0), + (11729, 11729, 'accessories/wearable_items/_exp06/defender_of_light_armor_chain/feet', 0), + (11730, 11730, 'accessories/wearable_items/_exp06/defender_of_light_armor_chain/forearms', 0), + (11731, 11731, 'accessories/wearable_items/_exp06/defender_of_light_armor_chain/hands', 0), + (11732, 11732, 'accessories/wearable_items/_exp06/defender_of_light_armor_chain/head', 0), + (11733, 11733, 'accessories/wearable_items/_exp06/defender_of_light_armor_chain/legs', 0), + (11734, 11734, 'accessories/wearable_items/_exp06/defender_of_light_armor_chain/legs_noskirt', 0), + (11735, 11735, 'accessories/wearable_items/_exp06/defender_of_light_armor_chain/pauldron_defender_of_light_left', 0), + (11736, 11736, 'accessories/wearable_items/_exp06/defender_of_light_armor_chain/pauldron_defender_of_light_right', 0), + (11737, 11737, 'accessories/wearable_items/_exp06/defender_of_light_armor_chain/shoulders', 0), + (11738, 11738, 'accessories/wearable_items/_exp06/defender_of_light_armor_chain/shoulders_nopauldrons', 0), + (11739, 11739, 'accessories/wearable_items/_exp06/order_of_nature_robe/skirt', 0), + (11740, 11740, 'accessories/wearable_items/_exp06/order_of_nature_robe/chest', 0), + (11741, 11741, 'accessories/wearable_items/_exp06/order_of_nature_robe/feet', 0), + (11742, 11742, 'accessories/wearable_items/_exp06/order_of_nature_robe/hands', 0), + (11743, 11743, 'accessories/wearable_items/_exp06/order_of_nature_robe/head', 0), + (11744, 11744, 'accessories/wearable_items/_exp06/order_of_nature_robe/pants', 0), + (11745, 11745, 'creatures/tu/goatman', 0), + (11746, 11746, 'creatures/tu/goatman_priest', 0), + (11747, 11747, 'creatures/tu/goatman_warlord', 0), + (11748, 11748, 'creatures/tu/goatman_warrior', 0), + (11749, 11749, 'creatures/tu/goatman_wizard', 0), + (11750, 11750, '_exp06/characters/tool_users/talonite/talonite_male/talonite_male_base_tattoo_thorn_left', 0), + (11751, 11751, '_exp06/characters/tool_users/talonite/talonite_male/talonite_male_base', 0), + (11752, 11752, '_exp06/characters/tool_users/talonite/talonite_male/talonite_male_base_tatto_swirl_left', 0), + (11753, 11753, '_exp06/characters/tool_users/talonite/talonite_male/talonite_male_base_tattoo_swirl_both', 0), + (11754, 11754, '_exp06/characters/tool_users/talonite/talonite_male/talonite_male_base_tattoo_thorn_both', 0), + (11755, 11755, 'accessories/npc_wearables/talonite_wearables/talonite_male/armor/added_armor_pieces/shoulders_armor_plate_left', 0), + (11756, 11756, 'accessories/npc_wearables/talonite_wearables/talonite_male/armor/added_armor_pieces/shoulders_armor_cloth_left', 0), + (11757, 11757, 'accessories/npc_wearables/talonite_wearables/talonite_male/armor/shoulders_armor_plate_right_cloth_left', 0), + (11758, 11758, 'accessories/npc_wearables/talonite_wearables/talonite_male/armor/chest_collar_cloth', 0), + (11759, 11759, 'accessories/npc_wearables/talonite_wearables/talonite_male/armor/chest_shoulders_cloth', 0), + (11760, 11760, 'accessories/npc_wearables/talonite_wearables/talonite_male/armor/feet_armor_plate', 0), + (11761, 11761, 'accessories/npc_wearables/talonite_wearables/talonite_male/armor/head_mask_cloth', 0), + (11762, 11762, 'accessories/npc_wearables/talonite_wearables/talonite_male/armor/legs_armor_cloth', 0), + (11763, 11763, 'accessories/npc_wearables/talonite_wearables/talonite_male/armor/legs_armor_sash', 0), + (11764, 11764, 'accessories/npc_wearables/talonite_wearables/talonite_male/armor/shoulders_armor_cloth_both', 0), + (11765, 11765, 'accessories/npc_wearables/talonite_wearables/talonite_male/armor/shoulders_armor_plate_both', 0), + (11766, 11766, 'accessories/npc_wearables/talonite_wearables/talonite_male/hair/hair_topknot', 0), + (11767, 11767, 'accessories/npc_wearables/talonite_wearables/talonite_male/hair/hair_braid', 0), + (11768, 11768, 'accessories/npc_wearables/talonite_wearables/talonite_male/hair/hair_long', 0), + (11769, 11769, 'accessories/npc_wearables/talonite_wearables/talonite_male/hair/hair_ponytail', 0), + (11770, 11770, '_exp06/monsters/toxxulia', 0), + (11771, 11771, 'creatures/monsters/rustmonster_new', 0), + (11772, 11772, '_exp06/characters/monsters/sea_eel/sea_eel', 0), + (11773, 11773, 'accessories/wearable_items/snapons/backpacks/backpack_frostfell_02_evil', 0), + (11774, 11774, 'accessories/wearable_items/snapons/backpacks/backpack_frostfell_swivel/backpack_frostfell_swivel_urn', 0), + (11775, 11775, 'accessories/wearable_items/snapons/backpacks/backpack_frostfell_swivel/backpack_frostfell_swivel_wreath_evil', 0), + (11776, 11776, 'accessories/wearable_items/snapons/backpacks/backpack_frostfell_swivel/backpack_frostfell_swivel_skull', 0), + (11777, 11777, 'accessories/wearable_items/snapons/backpacks/backpack_frostfell_swivel/backpack_frostfell_swivel_snowbucket_evil', 0), + (11778, 11778, 'accessories/wearable_items/snapons/backpacks/backpack_frostfell_swivel/backpack_frostfell_swivel_stocking_evil', 0), + (11779, 11779, '_exp06/zones/objects/exp06_dun_the_sentinel/sentinel_divider_tunnel', 0), + (11780, 11780, '_exp06/zones/objects/exp06_dun_the_sentinel/sentinel_divider', 0), + (11781, 11781, '_exp06/zones/objects/exp06_dun_the_sentinel/sentinel_divider_short', 0), + (11782, 11782, '_exp06/zones/objects/exp06_dun_the_sentinel/sentinel_divider_flat', 0), + (11783, 11783, '_exp06/zones/objects/exp06_dun_the_sentinel/sentinel_divider_frzr', 0), + (11784, 11784, 'staticobjects/lighting/dpo_floating_candles_for_cshome', 0), + (11785, 11785, 'staticobjects/bottles/vek_bottle02', 0), + (11786, 11786, 'staticobjects/bottles/vek_bottle03', 0), + (11787, 11787, 'staticobjects/bottles/vek_bottle04_square', 0), + (11788, 11788, 'staticobjects/pillow/mistmoore_manor_man_pillow01', 0), + (11789, 11789, 'staticobjects/pillow/mistmoore_manor_man_pillow02', 0), + (11790, 11790, 'staticobjects/pillow/mistmoore_manor_man_pillow_round01', 0), + (11791, 11791, 'staticobjects/rugs/mistmoore_manor_man_rug02', 0), + (11792, 11792, 'staticobjects/rugs/mistmoore_manor_man_rug03', 0), + (11793, 11793, 'staticobjects/rugs/mistmoore_manor_man_runner01', 0), + (11794, 11794, '_exp05/tool_users/lich_hologram_01', 0), + (11795, 11795, '_exp03/characters/monsters/bone_golem_soot', 0), + (11796, 11796, '_exp05/tool_users/grummus_01_soot', 0), + (11797, 11797, '_exp06/monsters/skull_yellow', 0), + (11798, 11798, 'accessories/npc_wearables/talonite_wearables/talonite_male/armor/chest_plate', 0), + (11799, 11799, 'accessories/npc_wearables/talonite_wearables/talonite_male/armor/head_plate', 0), + (11800, 11800, 'accessories/npc_wearables/talonite_wearables/talonite_male/armor/added_armor_pieces/shoulders_armor_glove_left', 0), + (11801, 11801, 'accessories/npc_wearables/talonite_wearables/talonite_male/armor/shoulders_armor_gloves', 0), + (11802, 11802, 'accessories/npc_wearables/talonite_wearables/talonite_male/armor/shoulders_armor_plate_glove_left_tatonly', 0), + (11803, 11803, 'accessories/npc_wearables/talonite_wearables/talonite_male/armor/shoulders_armor_cloth_globe_left_tatonly', 0), + (11804, 11804, 'accessories/wearable_items/halloween_masks/mask_mask/head_white_tintable', 0), + (11805, 11805, '_exp06/characters/monsters/sea_nayad_boss/sea_nayad_boss', 0), + (11806, 11806, 'accessories/npc_wearables/sea_nayad_boss/head_eel_hair', 0), + (11807, 11807, 'accessories/npc_wearables/sea_nayad_boss/chest_choker', 0), + (11808, 11808, 'accessories/wearable_items/_exp06/sea_nayad_boss/sea_nayad_boss_head', 0), + (11809, 11809, '_exp06/zones/objects/exp06_dun_the_sentinel/sen_cage_02_dpo', 0), + (11810, 11810, '_exp06/zones/objects/exp06_dun_the_sentinel/sen_cage_door_02_dpo', 0), + (11811, 11811, 'staticobjects/tents/qey_tent01', 0), + (11812, 11812, 'staticobjects/liveevent/cityfestivals/dpo_container_beans', 0), + (11813, 11813, 'staticobjects/liveevent/cityfestivals/dpo_container_chili', 0), + (11814, 11814, 'staticobjects/liveevent/cityfestivals/dpo_container_chili_open', 0), + (11815, 11815, 'staticobjects/liveevent/cityfestivals/dpo_container_grain', 0), + (11816, 11816, 'staticobjects/liveevent/cityfestivals/dpo_container_orange', 0), + (11817, 11817, 'staticobjects/liveevent/cityfestivals/dpo_container_tall_wicker', 0), + (11818, 11818, 'staticobjects/boats/farseas_boat_dpo', 0), + (11819, 11819, 'accessories/wearable_items/profesion_hats/defender_of_light_helmet_chain/head', 0), + (11820, 11820, 'accessories/wearable_items/profesion_hats/defender_of_light_helmet_chain/crest_01', 0), + (11821, 11821, 'accessories/wearable_items/profesion_hats/defender_of_light_helmet_chain/crest_03', 0), + (11822, 11822, 'accessories/wearable_items/profesion_hats/defender_of_light_helmet_chain/crest_05', 0), + (11823, 11823, '_exp06/characters/monsters/frostfell_cube/frostfell_cube', 0), + (11824, 11824, 'accessories/npc_wearables/frostfell_cube/frostfell_cube_goblin', 0), + (11825, 11825, 'accessories/npc_wearables/frostfell_cube/frostfell_cube_candycane', 0), + (11826, 11826, 'accessories/npc_wearables/frostfell_cube/frostfell_cube_cap', 0), + (11827, 11827, 'accessories/npc_wearables/frostfell_cube/frostfell_cube_darkelf', 0), + (11828, 11828, '_exp06/zones/objects/incense_burner_fx', 0), + (11829, 11829, 'accessories/wearable_items/profesion_hats/defender_of_light_helmet_leather/head', 0), + (11830, 11830, 'creatures/monsters/tyrannosaurus', 0), + (11831, 11831, 'creatures/monsters/stegosaurus', 0), + (11832, 11832, 'accessories/wearable_items/_exp06/dragon_leather/skirt', 0), + (11833, 11833, 'accessories/wearable_items/_exp06/dragon_leather/chest', 0), + (11834, 11834, 'accessories/wearable_items/_exp06/dragon_leather/feet', 0), + (11835, 11835, 'accessories/wearable_items/_exp06/dragon_leather/forearms', 0), + (11836, 11836, 'accessories/wearable_items/_exp06/dragon_leather/hands', 0), + (11837, 11837, 'accessories/wearable_items/_exp06/dragon_leather/head', 0), + (11838, 11838, 'accessories/wearable_items/_exp06/dragon_leather/legs', 0), + (11839, 11839, 'accessories/wearable_items/_exp06/dragon_leather/legs_noskirt', 0), + (11840, 11840, 'accessories/wearable_items/_exp06/dragon_leather/shoulders', 0), + (11841, 11841, '_exp06/zones/objects/exp06_dun_the_sentinel/sentinel_container_side', 0), + (11842, 11842, '_exp06/zones/objects/exp06_dun_the_sentinel/sentinel_forcefield', 0), + (11843, 11843, '_exp06/zones/objects/exp06_dun_the_sentinel/sen_switch_base_02', 0), + (11844, 11844, '_exp06/zones/objects/exp06_dun_the_sentinel/swith_sphere_bobbing_01', 0), + (11845, 11845, '_exp06/zones/objects/exp06_dun_the_sentinel/sen_switch_base_01', 0), + (11846, 11846, '_exp06/zones/objects/exp06_dun_the_sentinel/sen_symbol_card_01', 0), + (11847, 11847, '_exp06/zones/objects/exp06_dun_vastydeep02/vasrtydeep02_objects_teleportpad01', 0), + (11848, 11848, 'accessories/wearable_items/_exp06/dragon_chain/skirt', 0), + (11849, 11849, 'accessories/wearable_items/_exp06/dragon_chain/chest', 0), + (11850, 11850, 'accessories/wearable_items/_exp06/dragon_chain/feet', 0), + (11851, 11851, 'accessories/wearable_items/_exp06/dragon_chain/forearms', 0), + (11852, 11852, 'accessories/wearable_items/_exp06/dragon_chain/hands', 0), + (11853, 11853, 'accessories/wearable_items/_exp06/dragon_chain/head', 0), + (11854, 11854, 'accessories/wearable_items/_exp06/dragon_chain/head_mask', 0), + (11855, 11855, 'accessories/wearable_items/_exp06/dragon_chain/legs', 0), + (11856, 11856, 'accessories/wearable_items/_exp06/dragon_chain/legs_noskirt', 0), + (11857, 11857, 'accessories/wearable_items/_exp06/dragon_chain/shoulders', 0), + (11858, 11858, 'accessories/wearable_items/_exp06/dragon_chain/shoulders_pauldrons', 0), + (11859, 11859, 'accessories/wearable_items/_exp06/defender_of_light_armor_magus/skirt', 0), + (11860, 11860, 'accessories/wearable_items/_exp06/defender_of_light_armor_magus/arms', 0), + (11861, 11861, 'accessories/wearable_items/_exp06/defender_of_light_armor_magus/chest', 0); +INSERT INTO `appearances` (`id`, `appearance_id`, `name`, `min_client_version`) VALUES + (11862, 11862, 'accessories/wearable_items/_exp06/defender_of_light_armor_magus/legs', 0), + (11863, 11863, 'creatures/tu/livingstatue_tooluser', 0), + (11864, 11864, '_exp01/characters/tool_users/water_djinn_avatar', 0), + (11865, 11865, 'ec/pc/erudite/erudite_zombie_male', 0), + (11866, 11866, '_exp06/zones/objects/exp06_dun_vastydeep01/generic01_barrier01_combo01', 0), + (11867, 11867, 'staticobjects/_exp06/bamboo_woodpiles', 0), + (11868, 11868, '_exp06/characters/tool_users/coldaine/coldaine_male', 0), + (11869, 11869, 'accessories/npc_wearables/coldaine/legs_basic_pants', 0), + (11870, 11870, 'accessories/npc_wearables/coldaine/beard_basic_01', 0), + (11871, 11871, 'accessories/npc_wearables/coldaine/chest_utility_both', 0), + (11872, 11872, 'accessories/npc_wearables/coldaine/chest_utility_both_fur', 0), + (11873, 11873, 'accessories/npc_wearables/coldaine/chest_utility_left01', 0), + (11874, 11874, 'accessories/npc_wearables/coldaine/chest_utility_left_fur', 0), + (11875, 11875, 'accessories/npc_wearables/coldaine/chest_utility_right01', 0), + (11876, 11876, 'accessories/npc_wearables/coldaine/chest_utility_right_fur', 0), + (11877, 11877, 'accessories/npc_wearables/coldaine/feet_basic_boots', 0), + (11878, 11878, 'accessories/npc_wearables/coldaine/forearms_both_armstraps', 0), + (11879, 11879, 'accessories/npc_wearables/coldaine/forearms_both_fur', 0), + (11880, 11880, 'accessories/npc_wearables/coldaine/forearms_both_fur_armstraps', 0), + (11881, 11881, 'accessories/npc_wearables/coldaine/forearms_left_armstrap', 0), + (11882, 11882, 'accessories/npc_wearables/coldaine/forearms_left_fur', 0), + (11883, 11883, 'accessories/npc_wearables/coldaine/forearms_left_fur_armstrap', 0), + (11884, 11884, 'accessories/npc_wearables/coldaine/forearms_right_armstrap', 0), + (11885, 11885, 'accessories/npc_wearables/coldaine/forearms_right_fur', 0), + (11886, 11886, 'accessories/npc_wearables/coldaine/forearms_right_fur_armstrap', 0), + (11887, 11887, 'accessories/npc_wearables/coldaine/hair_basic_01', 0), + (11888, 11888, 'accessories/npc_wearables/coldaine/hair_basic_02', 0), + (11889, 11889, 'accessories/npc_wearables/coldaine/hair_basic_03', 0), + (11890, 11890, 'accessories/wearable_items/_exp06/defender_of_light_armor_robe/skirt', 0), + (11891, 11891, 'accessories/wearable_items/_exp06/defender_of_light_armor_robe/chest', 0), + (11892, 11892, 'accessories/wearable_items/_exp06/defender_of_light_armor_robe/feet', 0), + (11893, 11893, 'accessories/wearable_items/_exp06/defender_of_light_armor_robe/hands', 0), + (11894, 11894, 'accessories/wearable_items/_exp06/defender_of_light_armor_robe/head', 0), + (11895, 11895, 'accessories/wearable_items/_exp06/defender_of_light_armor_robe/pants', 0), + (11896, 11896, '_exp06/zones/objects/exp06_dun_the_sentinel/sen_apple_plate_dpo', 0), + (11897, 11897, '_exp06/zones/objects/exp06_dun_the_sentinel/sen_cantelope_plate_dpo', 0), + (11898, 11898, '_exp06/zones/objects/exp06_dun_the_sentinel/sen_eaten_plate_05_dpo', 0), + (11899, 11899, '_exp06/zones/objects/exp06_dun_the_sentinel/sen_main_mix_plate_dpo', 0), + (11900, 11900, '_exp06/zones/objects/exp06_dun_the_sentinel/sen_mix_fruit_plate_dpo', 0), + (11901, 11901, '_exp06/zones/objects/exp06_dun_the_sentinel/sen_plate_fish_dpo', 0), + (11902, 11902, '_exp06/zones/objects/exp06_dun_the_sentinel/sen_plate_orange_dpo', 0), + (11903, 11903, '_exp06/zones/objects/exp06_dun_the_sentinel/sen_small_apple_plate_dpo', 0), + (11904, 11904, '_exp06/zones/objects/exp06_dun_the_sentinel/sentinal_obj_appleholder_dpo', 0), + (11905, 11905, '_exp06/zones/objects/exp06_dun_the_sentinel/sentinal_obj_desertholder_dpo', 0), + (11906, 11906, '_exp06/zones/objects/exp06_dun_the_sentinel/sentinal_obj_jello_dpo', 0), + (11907, 11907, '_exp06/zones/objects/exp06_dun_the_sentinel/sentinal_obj_orangeholder_dpo', 0), + (11908, 11908, '_exp06/zones/objects/exp06_dun_the_sentinel/sentinal_obj_piegroup_dpo', 0), + (11909, 11909, '_exp06/zones/objects/exp06_dun_the_sentinel/sentinal_obj_pot_dpo', 0), + (11910, 11910, '_exp06/zones/objects/exp06_dun_the_sentinel/sentinal_obj_punchbowl_dpo', 0), + (11911, 11911, '_exp06/zones/objects/exp06_dun_the_sentinel/sentinal_obj_turkeyplatter_dpo', 0), + (11912, 11912, 'accessories/npc_wearables/coldaine/shoulders_basic_right', 0), + (11913, 11913, 'accessories/npc_wearables/coldaine/shoulders_basic_both', 0), + (11914, 11914, 'accessories/npc_wearables/coldaine/shoulders_basic_left', 0), + (11915, 11915, 'staticobjects/shield/broken_heart_shield_dpo', 0), + (11916, 11916, 'staticobjects/shield/shard_of_love_tower_shield_dpo', 0), + (11917, 11917, 'accessories/wearable_items/_exp06/elf_armor_vanguard_kaborite_black/skirt', 0), + (11918, 11918, 'accessories/wearable_items/_exp06/elf_armor_vanguard_kaborite_black/chest', 0), + (11919, 11919, 'accessories/wearable_items/_exp06/elf_armor_vanguard_kaborite_black/feet', 0), + (11920, 11920, 'accessories/wearable_items/_exp06/elf_armor_vanguard_kaborite_black/forearms', 0), + (11921, 11921, 'accessories/wearable_items/_exp06/elf_armor_vanguard_kaborite_black/hands', 0), + (11922, 11922, 'accessories/wearable_items/_exp06/elf_armor_vanguard_kaborite_black/head', 0), + (11923, 11923, 'accessories/wearable_items/_exp06/elf_armor_vanguard_kaborite_black/legs', 0), + (11924, 11924, 'accessories/wearable_items/_exp06/elf_armor_vanguard_kaborite_black/legs_noskirt', 0), + (11925, 11925, 'accessories/wearable_items/_exp06/elf_armor_vanguard_kaborite_black/right', 0), + (11926, 11926, 'accessories/wearable_items/_exp06/elf_armor_vanguard_kaborite_black/shoulders', 0), + (11927, 11927, 'accessories/wearable_items/_exp06/elf_armor_vanguard_kaborite_black/shoulders_nopauldrons', 0), + (11928, 11928, 'accessories/wearable_items/_exp06/elf_armor_vanguard_kaborite_gold/skirt', 0), + (11929, 11929, 'accessories/wearable_items/_exp06/elf_armor_vanguard_kaborite_gold/chest', 0), + (11930, 11930, 'accessories/wearable_items/_exp06/elf_armor_vanguard_kaborite_gold/feet', 0), + (11931, 11931, 'accessories/wearable_items/_exp06/elf_armor_vanguard_kaborite_gold/forearms', 0), + (11932, 11932, 'accessories/wearable_items/_exp06/elf_armor_vanguard_kaborite_gold/hands', 0), + (11933, 11933, 'accessories/wearable_items/_exp06/elf_armor_vanguard_kaborite_gold/head', 0), + (11934, 11934, 'accessories/wearable_items/_exp06/elf_armor_vanguard_kaborite_gold/legs', 0), + (11935, 11935, 'accessories/wearable_items/_exp06/elf_armor_vanguard_kaborite_gold/legs_noskirt', 0), + (11936, 11936, 'accessories/wearable_items/_exp06/elf_armor_vanguard_kaborite_gold/right', 0), + (11937, 11937, 'accessories/wearable_items/_exp06/elf_armor_vanguard_kaborite_gold/shoulders', 0), + (11938, 11938, 'accessories/wearable_items/_exp06/elf_armor_vanguard_kaborite_gold/shoulders_nopauldrons', 0), + (11939, 11939, 'accessories/wearable_items/_exp06/elf_armor_vanguard_kaborite_red/skirt', 0), + (11940, 11940, 'accessories/wearable_items/_exp06/elf_armor_vanguard_kaborite_red/chest', 0), + (11941, 11941, 'accessories/wearable_items/_exp06/elf_armor_vanguard_kaborite_red/feet', 0), + (11942, 11942, 'accessories/wearable_items/_exp06/elf_armor_vanguard_kaborite_red/forearms', 0), + (11943, 11943, 'accessories/wearable_items/_exp06/elf_armor_vanguard_kaborite_red/hands', 0), + (11944, 11944, 'accessories/wearable_items/_exp06/elf_armor_vanguard_kaborite_red/head', 0), + (11945, 11945, 'accessories/wearable_items/_exp06/elf_armor_vanguard_kaborite_red/legs', 0), + (11946, 11946, 'accessories/wearable_items/_exp06/elf_armor_vanguard_kaborite_red/legs_noskirt', 0), + (11947, 11947, 'accessories/wearable_items/_exp06/elf_armor_vanguard_kaborite_red/right', 0), + (11948, 11948, 'accessories/wearable_items/_exp06/elf_armor_vanguard_kaborite_red/shoulders', 0), + (11949, 11949, 'accessories/wearable_items/_exp06/elf_armor_vanguard_kaborite_red/shoulders_nopauldrons', 0), + (11950, 11950, 'accessories/wearable_items/_exp06/elf_armor_vanguard_kaborite_silver/skirt', 0), + (11951, 11951, 'accessories/wearable_items/_exp06/elf_armor_vanguard_kaborite_silver/chest', 0), + (11952, 11952, 'accessories/wearable_items/_exp06/elf_armor_vanguard_kaborite_silver/feet', 0), + (11953, 11953, 'accessories/wearable_items/_exp06/elf_armor_vanguard_kaborite_silver/forearms', 0), + (11954, 11954, 'accessories/wearable_items/_exp06/elf_armor_vanguard_kaborite_silver/hands', 0), + (11955, 11955, 'accessories/wearable_items/_exp06/elf_armor_vanguard_kaborite_silver/head', 0), + (11956, 11956, 'accessories/wearable_items/_exp06/elf_armor_vanguard_kaborite_silver/legs', 0), + (11957, 11957, 'accessories/wearable_items/_exp06/elf_armor_vanguard_kaborite_silver/legs_noskirt', 0), + (11958, 11958, 'accessories/wearable_items/_exp06/elf_armor_vanguard_kaborite_silver/right', 0), + (11959, 11959, 'accessories/wearable_items/_exp06/elf_armor_vanguard_kaborite_silver/shoulders', 0), + (11960, 11960, 'accessories/wearable_items/_exp06/elf_armor_vanguard_kaborite_silver/shoulders_nopauldrons', 0), + (11961, 11961, 'accessories/wearable_items/_exp06/plain_robe_cloth_tradeskill/pants', 0), + (11962, 11962, 'accessories/wearable_items/_exp06/plain_robe_cloth_tradeskill/chest', 0), + (11963, 11963, '_exp06/characters/tool_users/erudite_classic_male/erudite_classic_male_ghost', 0), + (11964, 11964, 'accessories/wearable_items/_exp06/token_reward_tradeskill_robe/skirt', 0), + (11965, 11965, 'accessories/wearable_items/_exp06/token_reward_tradeskill_robe/chest', 0), + (11966, 11966, 'accessories/wearable_items/_exp06/token_reward_tradeskill_robe/hood', 0), + (11967, 11967, 'accessories/wearable_items/_exp06/token_reward_tradeskill_robe/pants', 0), + (11968, 11968, '_exp06/characters/tool_users/coldaine/coldaine_female', 0), + (11969, 11969, 'accessories/npc_wearables/coldaine/coldaine_female/legs_basic_pants', 0), + (11970, 11970, 'accessories/npc_wearables/coldaine/coldaine_female/chest_basic_strap', 0), + (11971, 11971, 'accessories/npc_wearables/coldaine/coldaine_female/chest_basic_strap_fur', 0), + (11972, 11972, 'accessories/npc_wearables/coldaine/coldaine_female/feet_basic_boots', 0), + (11973, 11973, 'accessories/npc_wearables/coldaine/coldaine_female/feet_basic_fur_cuff', 0), + (11974, 11974, 'accessories/npc_wearables/coldaine/coldaine_female/forearms_both_fur_wrap', 0), + (11975, 11975, 'accessories/npc_wearables/coldaine/coldaine_female/forearms_both_leather', 0), + (11976, 11976, 'accessories/npc_wearables/coldaine/coldaine_female/forearms_both_upper_leather', 0), + (11977, 11977, 'accessories/npc_wearables/coldaine/coldaine_female/forearms_left_fur_wrap', 0), + (11978, 11978, 'accessories/npc_wearables/coldaine/coldaine_female/forearms_left_leather', 0), + (11979, 11979, 'accessories/npc_wearables/coldaine/coldaine_female/forearms_left_upper_leather', 0), + (11980, 11980, 'accessories/npc_wearables/coldaine/coldaine_female/forearms_right_fur_wrap', 0), + (11981, 11981, 'accessories/npc_wearables/coldaine/coldaine_female/forearms_right_leather', 0), + (11982, 11982, 'accessories/npc_wearables/coldaine/coldaine_female/forearms_right_upper_leather', 0), + (11983, 11983, 'accessories/npc_wearables/coldaine/coldaine_female/hair_basic_01', 0), + (11984, 11984, 'accessories/npc_wearables/coldaine/coldaine_female/head_basic_hood', 0), + (11985, 11985, 'accessories/wearable_items/_exp06/dragon_robe/skirt', 0), + (11986, 11986, 'accessories/wearable_items/_exp06/dragon_robe/chest', 0), + (11987, 11987, 'accessories/wearable_items/_exp06/dragon_robe/feet', 0), + (11988, 11988, 'accessories/wearable_items/_exp06/dragon_robe/head', 0), + (11989, 11989, 'accessories/wearable_items/_exp06/dragon_robe/hood', 0), + (11990, 11990, 'accessories/wearable_items/_exp06/dragon_robe/legs', 0), + (11991, 11991, 'accessories/wearable_items/_exp06/dragon_robe/pants', 0), + (11992, 11992, 'staticobjects/world_devices/trdskl_achievement_workbench', 0), + (11993, 11993, 'staticobjects/world_devices/trdskl_achievement_chemistrytable', 0), + (11994, 11994, 'staticobjects/world_devices/trdskl_achievement_engraveddesk', 0), + (11995, 11995, 'staticobjects/world_devices/trdskl_achievement_forge', 0), + (11996, 11996, 'staticobjects/world_devices/trdskl_achievement_sewingtable_mannequin_loom', 0), + (11997, 11997, 'staticobjects/world_devices/trdskl_achievement_stoveandkeg', 0), + (11998, 11998, 'staticobjects/world_devices/trdskl_achievement_woodworkingtable', 0), + (11999, 11999, 'accessories/npc_wearables/coldaine/hands_basic_ice', 0), + (12000, 12000, 'accessories/npc_wearables/coldaine/hands_spiked_ice', 0), + (12001, 12001, 'accessories/npc_wearables/coldaine/chest_keg_basic', 0), + (12002, 12002, 'staticobjects/_exp06/kerra_spirit_totem_dpo', 0), + (12003, 12003, '_exp06/characters/tool_users/coldaine/coldaine_male_with_keg_walk', 0), + (12004, 12004, 'accessories/wieldable_items/shields/exp06/coldaine_ice_shield', 0), + (12005, 12005, 'accessories/wieldable_items/weapons/exp06/1h_sword/exp06_1h_axe_coldaine_ice', 0), + (12006, 12006, '_exp06/zones/objects/exp06_dun_the_sentinel/sen_symbol_card_02', 0), + (12007, 12007, 'accessories/wearable_items/_exp06/chaos_armor/vanguard_armor/skirt', 0), + (12008, 12008, 'accessories/wearable_items/_exp06/chaos_armor/vanguard_armor/chest', 0), + (12009, 12009, 'accessories/wearable_items/_exp06/chaos_armor/vanguard_armor/feet', 0), + (12010, 12010, 'accessories/wearable_items/_exp06/chaos_armor/vanguard_armor/forearms', 0), + (12011, 12011, 'accessories/wearable_items/_exp06/chaos_armor/vanguard_armor/hands', 0), + (12012, 12012, 'accessories/wearable_items/_exp06/chaos_armor/vanguard_armor/hands_chaos_gauntlets', 0), + (12013, 12013, 'accessories/wearable_items/_exp06/chaos_armor/vanguard_armor/head', 0), + (12014, 12014, 'accessories/wearable_items/_exp06/chaos_armor/vanguard_armor/head_chaos_helm', 0), + (12015, 12015, 'accessories/wearable_items/_exp06/chaos_armor/vanguard_armor/legs', 0), + (12016, 12016, 'accessories/wearable_items/_exp06/chaos_armor/vanguard_armor/legs_chaos_shins', 0), + (12017, 12017, 'accessories/wearable_items/_exp06/chaos_armor/vanguard_armor/legs_noskirt', 0), + (12018, 12018, 'accessories/wearable_items/_exp06/chaos_armor/vanguard_armor/right', 0), + (12019, 12019, 'accessories/wearable_items/_exp06/chaos_armor/vanguard_armor/shoulders', 0), + (12020, 12020, 'accessories/wearable_items/_exp06/chaos_armor/vanguard_armor/shoulders_chaos_armor_all', 0), + (12021, 12021, 'accessories/wearable_items/_exp06/chaos_armor/vanguard_armor/shoulders_nopauldrons', 0), + (12022, 12022, 'accessories/wearable_items/_exp06/chaos_armor/vanguard_armor/snap_ons/chaos_shin_right', 0), + (12023, 12023, 'accessories/wearable_items/_exp06/chaos_armor/vanguard_armor/snap_ons/chaos_forearm_left', 0), + (12024, 12024, 'accessories/wearable_items/_exp06/chaos_armor/vanguard_armor/snap_ons/chaos_forearm_right', 0), + (12025, 12025, 'accessories/wearable_items/_exp06/chaos_armor/vanguard_armor/snap_ons/chaos_pauldrons_lower_left', 0), + (12026, 12026, 'accessories/wearable_items/_exp06/chaos_armor/vanguard_armor/snap_ons/chaos_pauldrons_lower_right', 0), + (12027, 12027, 'accessories/wearable_items/_exp06/chaos_armor/vanguard_armor/snap_ons/chaos_pauldrons_upper_left', 0), + (12028, 12028, 'accessories/wearable_items/_exp06/chaos_armor/vanguard_armor/snap_ons/chaos_pauldrons_upper_right', 0), + (12029, 12029, 'accessories/wearable_items/_exp06/chaos_armor/vanguard_armor/snap_ons/chaos_shin_left', 0), + (12030, 12030, 'staticobjects/_exp06/erudin_palace_symbol', 0), + (12031, 12031, 'staticobjects/_exp06/kerra_vagabond_feather', 0), + (12032, 12032, 'accessories/wearable_items/_exp06/dragon_robe/hands', 0), + (12033, 12033, 'staticobjects/beds/drv_bed_double_dpo', 0), + (12034, 12034, 'staticobjects/bones/bones_cobra_dead', 0), + (12035, 12035, 'staticobjects/display_stands/djn_display_stand_steel_large_dpo', 0), + (12036, 12036, 'staticobjects/tables/drv_table_dining_ornate02_blue_dpo', 0), + (12037, 12037, 'staticobjects/tables/cr_table_map_red_and_black_dpo', 0), + (12038, 12038, 'staticobjects/tableware/djn_plate_brass_blue_dpo', 0), + (12039, 12039, 'staticobjects/urns/djn_vase_gold02_dpo', 0), + (12040, 12040, 'staticobjects/urns/djn_incense_platinum_dpo', 0), + (12041, 12041, 'staticobjects/chests/drv_chest_glass', 0), + (12042, 12042, 'accessories/wearable_items/_exp06/journeyman_leather_tradeskill/shoulders', 0), + (12043, 12043, 'accessories/wearable_items/_exp06/journeyman_leather_tradeskill/chest', 0), + (12044, 12044, 'accessories/wearable_items/_exp06/journeyman_leather_tradeskill/feet', 0), + (12045, 12045, 'accessories/wearable_items/_exp06/journeyman_leather_tradeskill/forearms', 0), + (12046, 12046, 'accessories/wearable_items/_exp06/journeyman_leather_tradeskill/hands', 0), + (12047, 12047, 'accessories/wearable_items/_exp06/journeyman_leather_tradeskill/head', 0), + (12048, 12048, 'accessories/wearable_items/_exp06/journeyman_leather_tradeskill/legs', 0), + (12049, 12049, 'accessories/wearable_items/_exp06/tradeskill_armor_chain_kaborite_black/skirt', 0), + (12050, 12050, 'accessories/wearable_items/_exp06/tradeskill_armor_chain_kaborite_black/chest', 0), + (12051, 12051, 'accessories/wearable_items/_exp06/tradeskill_armor_chain_kaborite_black/feet', 0), + (12052, 12052, 'accessories/wearable_items/_exp06/tradeskill_armor_chain_kaborite_black/forearms', 0), + (12053, 12053, 'accessories/wearable_items/_exp06/tradeskill_armor_chain_kaborite_black/hands', 0), + (12054, 12054, 'accessories/wearable_items/_exp06/tradeskill_armor_chain_kaborite_black/head', 0), + (12055, 12055, 'accessories/wearable_items/_exp06/tradeskill_armor_chain_kaborite_black/legs', 0), + (12056, 12056, 'accessories/wearable_items/_exp06/tradeskill_armor_chain_kaborite_black/legs_noskirt', 0), + (12057, 12057, 'accessories/wearable_items/_exp06/tradeskill_armor_chain_kaborite_black/shoulders', 0), + (12058, 12058, 'accessories/wearable_items/_exp06/tradeskill_armor_chain_kaborite_blue/skirt', 0), + (12059, 12059, 'accessories/wearable_items/_exp06/tradeskill_armor_chain_kaborite_blue/chest', 0), + (12060, 12060, 'accessories/wearable_items/_exp06/tradeskill_armor_chain_kaborite_blue/feet', 0), + (12061, 12061, 'accessories/wearable_items/_exp06/tradeskill_armor_chain_kaborite_blue/forearms', 0), + (12062, 12062, 'accessories/wearable_items/_exp06/tradeskill_armor_chain_kaborite_blue/hands', 0), + (12063, 12063, 'accessories/wearable_items/_exp06/tradeskill_armor_chain_kaborite_blue/head', 0), + (12064, 12064, 'accessories/wearable_items/_exp06/tradeskill_armor_chain_kaborite_blue/legs', 0), + (12065, 12065, 'accessories/wearable_items/_exp06/tradeskill_armor_chain_kaborite_blue/legs_noskirt', 0), + (12066, 12066, 'accessories/wearable_items/_exp06/tradeskill_armor_chain_kaborite_blue/shoulders', 0), + (12067, 12067, 'accessories/wearable_items/_exp06/tradeskill_armor_chain_kaborite_gold/skirt', 0), + (12068, 12068, 'accessories/wearable_items/_exp06/tradeskill_armor_chain_kaborite_gold/chest', 0), + (12069, 12069, 'accessories/wearable_items/_exp06/tradeskill_armor_chain_kaborite_gold/feet', 0), + (12070, 12070, 'accessories/wearable_items/_exp06/tradeskill_armor_chain_kaborite_gold/forearms', 0), + (12071, 12071, 'accessories/wearable_items/_exp06/tradeskill_armor_chain_kaborite_gold/hands', 0), + (12072, 12072, 'accessories/wearable_items/_exp06/tradeskill_armor_chain_kaborite_gold/head', 0), + (12073, 12073, 'accessories/wearable_items/_exp06/tradeskill_armor_chain_kaborite_gold/legs', 0), + (12074, 12074, 'accessories/wearable_items/_exp06/tradeskill_armor_chain_kaborite_gold/legs_noskirt', 0), + (12075, 12075, 'accessories/wearable_items/_exp06/tradeskill_armor_chain_kaborite_gold/shoulders', 0), + (12076, 12076, 'accessories/wearable_items/_exp06/tradeskill_armor_chain_kaborite_green/skirt', 0), + (12077, 12077, 'accessories/wearable_items/_exp06/tradeskill_armor_chain_kaborite_green/chest', 0), + (12078, 12078, 'accessories/wearable_items/_exp06/tradeskill_armor_chain_kaborite_green/feet', 0), + (12079, 12079, 'accessories/wearable_items/_exp06/tradeskill_armor_chain_kaborite_green/forearms', 0), + (12080, 12080, 'accessories/wearable_items/_exp06/tradeskill_armor_chain_kaborite_green/hands', 0), + (12081, 12081, 'accessories/wearable_items/_exp06/tradeskill_armor_chain_kaborite_green/head', 0), + (12082, 12082, 'accessories/wearable_items/_exp06/tradeskill_armor_chain_kaborite_green/legs', 0), + (12083, 12083, 'accessories/wearable_items/_exp06/tradeskill_armor_chain_kaborite_green/legs_noskirt', 0), + (12084, 12084, 'accessories/wearable_items/_exp06/tradeskill_armor_chain_kaborite_green/shoulders', 0), + (12085, 12085, 'accessories/wearable_items/_exp06/tradeskill_armor_chain_kaborite_metallic/skirt', 0), + (12086, 12086, 'accessories/wearable_items/_exp06/tradeskill_armor_chain_kaborite_metallic/chest', 0), + (12087, 12087, 'accessories/wearable_items/_exp06/tradeskill_armor_chain_kaborite_metallic/feet', 0), + (12088, 12088, 'accessories/wearable_items/_exp06/tradeskill_armor_chain_kaborite_metallic/forearms', 0), + (12089, 12089, 'accessories/wearable_items/_exp06/tradeskill_armor_chain_kaborite_metallic/hands', 0), + (12090, 12090, 'accessories/wearable_items/_exp06/tradeskill_armor_chain_kaborite_metallic/head', 0), + (12091, 12091, 'accessories/wearable_items/_exp06/tradeskill_armor_chain_kaborite_metallic/legs', 0), + (12092, 12092, 'accessories/wearable_items/_exp06/tradeskill_armor_chain_kaborite_metallic/legs_noskirt', 0), + (12093, 12093, 'accessories/wearable_items/_exp06/tradeskill_armor_chain_kaborite_metallic/shoulders', 0), + (12094, 12094, 'staticobjects/_exp06/cooked_fish', 0), + (12095, 12095, 'staticobjects/_exp06/panda_skull', 0), + (12096, 12096, 'staticobjects/benches/cm_bench_long', 0), + (12097, 12097, 'staticobjects/benches/cm_bench_short', 0), + (12098, 12098, 'staticobjects/stainedglass/dpo_shimplatform_karnors_stainedglass', 0), + (12099, 12099, 'staticobjects/stainedglass/dpo_shimplatform_befallen_stainedglass', 0), + (12100, 12100, 'staticobjects/stainedglass/dpo_shimplatform_qeystainglass03', 0), + (12101, 12101, 'staticobjects/stainedglass/dpo_shimplatform_chardok_stainedglass', 0), + (12102, 12102, 'staticobjects/stainedglass/dpo_shimplatform_mmc_stainedglass02', 0), + (12103, 12103, 'accessories/wearable_items/_exp08/dragon_armor/robe_brown/head_collar', 1096), + (12104, 12104, 'accessories/wearable_items/_exp08/dragon_armor/robe_brown/pants', 1096), + (12105, 12105, 'staticobjects/chairs/mc_couch_purple_dpo', 0), + (12106, 12106, 'staticobjects/chairs/mc_couch_yellow_dpo', 0), + (12107, 12107, 'staticobjects/chairs/mc_couch_green_dpo', 0), + (12108, 12108, 'staticobjects/chairs/mc_couch_red_dpo', 0), + (12109, 12109, 'accessories/wearable_items/_exp08/dragon_armor/robe_green/skirt', 1096), + (12110, 12110, 'accessories/wearable_items/_exp08/dragon_armor/robe_green/chest', 1096), + (12111, 12111, 'accessories/wearable_items/_exp08/dragon_armor/robe_green/chest_epic', 1096), + (12112, 12112, 'staticobjects/bookcases/vastydeep_library01_stacks', 0), + (12113, 12113, 'accessories/wearable_items/_exp08/dragon_armor/robe_green/feet', 1096), + (12114, 12114, 'staticobjects/dividers/paineel_screen_triple', 0), + (12115, 12115, 'staticobjects/dividers/sentinel_divider_02', 0), + (12116, 12116, 'staticobjects/dividers/erudin_screen_triple', 0), + (12117, 12117, 'staticobjects/dressers/washbasin_dresser_wood_gold_dpo', 0), + (12118, 12118, 'staticobjects/dressers/cm_dresser_single01', 0), + (12119, 12119, 'staticobjects/dressers/cm_dresser_servant01', 0), + (12120, 12120, 'staticobjects/beds/sentinel_bed_small_01', 0), + (12121, 12121, 'staticobjects/beds/sentinel_bed_main_02', 0), + (12122, 12122, 'staticobjects/banners/erudin_banner01_long_red', 0), + (12123, 12123, 'staticobjects/banners/erudin_banner03_long_green', 0), + (12124, 12124, 'staticobjects/banners/erudin_banner02_long_blue', 0), + (12125, 12125, 'staticobjects/fires/fel_firepit_dpo', 0), + (12126, 12126, 'staticobjects/mirrors/dpo_mosaic_mirror', 0), + (12127, 12127, 'staticobjects/mirrors/erudin_reflecting_mirror', 0), + (12128, 12128, 'staticobjects/urns/sentinel_vase_water_dpo', 0), + (12129, 12129, 'staticobjects/urns/erudin_vase01_w_plant01', 0), + (12130, 12130, 'staticobjects/urns/fel_vase_large02', 0), + (12131, 12131, 'staticobjects/platforms/shim_liftplatform_water', 0), + (12132, 12132, 'staticobjects/platforms/shim_liftplatform_jello', 0), + (12133, 12133, 'staticobjects/platforms/shim_liftplatform_lava', 0), + (12134, 12134, 'staticobjects/platforms/shim_liftplatform_mirror', 0), + (12135, 12135, 'staticobjects/maps/sentinel_main_map_02', 0), + (12136, 12136, 'staticobjects/maps/sentinel_globe_assembly', 0), + (12137, 12137, 'staticobjects/maps/sentinel_main_map_01', 0), + (12138, 12138, 'staticobjects/tables/erudin_table01', 0), + (12139, 12139, 'staticobjects/tables/fel_winetable_dpo', 0), + (12140, 12140, 'staticobjects/tables/cm_table_magical', 0), + (12141, 12141, 'staticobjects/tables/cm_table_long_dpo', 0), + (12142, 12142, 'staticobjects/tables/cm_table_hallway01', 0), + (12143, 12143, 'staticobjects/tables/cm_table_bedside01', 0), + (12144, 12144, 'staticobjects/tables/drv_table_dining_ornate02_sumac_dpo', 0), + (12145, 12145, 'staticobjects/rugs/erudin_rug_biground', 0), + (12146, 12146, 'staticobjects/rugs/erudin_rug03_bigred', 0), + (12147, 12147, 'staticobjects/rugs/erudin_rug02_purple', 0), + (12148, 12148, 'staticobjects/rugs/erudin_rug01_blue', 0), + (12149, 12149, 'staticobjects/lighting/erudin_floor_lamp01_light', 0), + (12150, 12150, 'staticobjects/lighting/erudin_wall_lamp04_light', 0), + (12151, 12151, 'staticobjects/lighting/erudin_wall_lamp03_light', 0), + (12152, 12152, 'staticobjects/lighting/erudin_ceiling_lamp01_light', 0), + (12153, 12153, 'staticobjects/lighting/erudin_ceiling_lamp02_light', 0), + (12154, 12154, 'staticobjects/lighting/cm_candlestick02', 0), + (12155, 12155, 'staticobjects/lighting/cm_table_candelabra01', 0), + (12156, 12156, 'staticobjects/lighting/cm_chandelier02_swinging', 0), + (12157, 12157, 'staticobjects/lighting/cm_chandelier01_swinging', 0), + (12158, 12158, 'staticobjects/soe_wallet/discoball_purple', 0), + (12159, 12159, 'staticobjects/soe_wallet/discoball_gold', 0), + (12160, 12160, 'staticobjects/tableware/fel_jug_water01', 0), + (12161, 12161, 'accessories/wieldable_items/weapons/exp05/exp05_2hc_zombie_shovel_dpo', 0), + (12162, 12162, 'accessories/wearable_items/_exp06/erudite_classic_armor/erudite_classic_armor_robe_black/skirt', 0), + (12163, 12163, 'accessories/wearable_items/_exp06/erudite_classic_armor/erudite_classic_armor_robe_black/chest', 0), + (12164, 12164, 'accessories/wearable_items/_exp06/erudite_classic_armor/erudite_classic_armor_robe_black/head', 0), + (12165, 12165, 'accessories/wearable_items/_exp06/erudite_classic_armor/erudite_classic_armor_robe_black/head_for_classic_erudite', 0), + (12166, 12166, 'accessories/wearable_items/_exp06/erudite_classic_armor/erudite_classic_armor_robe_black/hood', 0), + (12167, 12167, 'accessories/wearable_items/_exp06/erudite_classic_armor/erudite_classic_armor_robe_black/pants', 0), + (12168, 12168, 'staticobjects/tables/man_desk_ornate01_dpo', 0), + (12169, 12169, 'staticobjects/chairs/cm_diningchair_yellow_dpo', 0), + (12170, 12170, 'staticobjects/chairs/cm_diningchair_blue_dpo', 0), + (12171, 12171, 'staticobjects/chairs/cm_diningchair_green_dpo', 0), + (12172, 12172, 'staticobjects/chairs/cm_diningchair_purple_dpo', 0), + (12173, 12173, 'staticobjects/chairs/cm_diningchair_red_dpo', 0), + (12174, 12174, 'accessories/wearable_items/_exp08/dragon_armor/robe_green/hands', 1096), + (12175, 12175, 'staticobjects/chairs/mc_couch_blue_dpo', 0), + (12176, 12176, 'staticobjects/chairs/man_chair_large01_blue_dpo', 0), + (12177, 12177, 'staticobjects/chairs/man_chair_large01_green_dpo', 0), + (12178, 12178, 'staticobjects/chairs/man_chair_large01_purple_dpo', 0), + (12179, 12179, 'staticobjects/chairs/man_chair_large01_red_dpo', 0), + (12180, 12180, 'staticobjects/chairs/man_chair_large01_yellow_dpo', 0), + (12181, 12181, 'staticobjects/chairs/man_couch_double01_blue_dpo', 0), + (12182, 12182, 'staticobjects/chairs/man_couch_double01_green_dpo', 0), + (12183, 12183, 'staticobjects/chairs/man_couch_double01_purple_dpo', 0), + (12184, 12184, 'staticobjects/chairs/man_couch_double01_red_dpo', 0), + (12185, 12185, 'staticobjects/chairs/man_couch_double01_yellow_dpo', 0), + (12186, 12186, 'staticobjects/beds/man_bed_master01_yellow_dpo', 0), + (12187, 12187, 'staticobjects/beds/man_bed_master01_blue_dpo', 0), + (12188, 12188, 'staticobjects/beds/man_bed_master01_green_dpo', 0), + (12189, 12189, 'staticobjects/beds/man_bed_master01_purple_dpo', 0), + (12190, 12190, 'staticobjects/beds/man_bed_master01_red_dpo', 0), + (12191, 12191, 'staticobjects/beds/man_bed_master01_redtapestry_dpo', 0), + (12192, 12192, 'staticobjects/tables/man_desk_ornate01_sumac_dpo', 0), + (12193, 12193, 'staticobjects/tents/qey_tent01_farseas', 0), + (12194, 12194, 'creatures/monsters/bear_panda', 0), + (12195, 12195, 'staticobjects/nektulos/nekcas_eviltrinket_severedhand001', 0), + (12196, 12196, 'creatures/pets/pet_kitten/odus_kitten', 0), + (12197, 12197, '_exp04/monsters/clay_golem_storm_pet_nfs', 0), + (12198, 12198, '_exp04/monsters/clay_golem_storm_pet_nfs_epic', 0), + (12199, 12199, '_exp06/characters/monsters/sea_nayad_fire/sea_nayad_fire', 0), + (12200, 12200, '_exp06/characters/monsters/sea_nayad_fire/sea_nayad_fire_epic', 0), + (12201, 12201, 'creatures/monsters/roper_crystal', 0), + (12202, 12202, 'creatures/monsters/roper_crystal_epic', 0), + (12203, 12203, 'staticobjects/crystals/dpo_kaborite_crucible', 0), + (12204, 12204, 'staticobjects/_exp06/dpo_kaborite_crystalshard01', 0), + (12205, 12205, 'staticobjects/tools/humantools_mineshovel01_dpo', 0), + (12206, 12206, 'staticobjects/tools/humantoolsfarmpitchfork01_dpo', 0), + (12207, 12207, 'accessories/wearable_items/_exp06/mermaid_scale_armor/shoulders', 0), + (12208, 12208, 'accessories/wearable_items/_exp06/mermaid_scale_armor/chest', 0), + (12209, 12209, 'accessories/wearable_items/_exp06/mermaid_scale_armor/feet', 0), + (12210, 12210, 'accessories/wearable_items/_exp06/mermaid_scale_armor/forearms', 0), + (12211, 12211, 'accessories/wearable_items/_exp06/mermaid_scale_armor/hands', 0), + (12212, 12212, 'accessories/wearable_items/_exp06/mermaid_scale_armor/head', 0), + (12213, 12213, 'accessories/wearable_items/_exp06/mermaid_scale_armor/legs', 0), + (12214, 12214, 'ec/npc/skeletonorc_armor_greater', 0), + (12215, 12215, 'ec/npc/skeletonorc_armor_lesser', 0), + (12216, 12216, '_exp05/monsters/animatedhand_01_water', 0), + (12217, 12217, 'staticobjects/stainedglass/dpo_shimplatform_manor_stainedglass', 0), + (12218, 12218, 'staticobjects/stainedglass/dpo_shimplatform_qeystainglass01', 0), + (12219, 12219, 'staticobjects/chairs/edk_chair002_fancy_dark', 0), + (12220, 12220, 'accessories/wearable_items/cloak/exp06/cloak_mermaid_scale', 0), + (12221, 12221, 'staticobjects/chairs/cm_chaise_yellow_dpo', 0), + (12222, 12222, 'staticobjects/chairs/cm_chaise_blue_dpo', 0), + (12223, 12223, 'staticobjects/chairs/cm_chaise_green_dpo', 0), + (12224, 12224, 'staticobjects/chairs/cm_chaise_purple_dpo', 0), + (12225, 12225, 'staticobjects/chairs/cm_chaise_red_dpo', 0), + (12226, 12226, 'staticobjects/panels/dpo_vrsn_ceilingstars_panel', 0), + (12227, 12227, 'staticobjects/panels/dpo_clouds_panel', 0), + (12228, 12228, 'staticobjects/panels/dpo_cobblestone_panel', 0), + (12229, 12229, 'staticobjects/panels/dpo_sewer_ceilingglow_panel', 0), + (12230, 12230, 'staticobjects/panels/dpo_mmc_tile03_panel', 0), + (12231, 12231, 'staticobjects/panels/dpo_mmc_tile01_panel', 0), + (12232, 12232, 'staticobjects/panels/dpo_bluemosaic_panel', 0), + (12233, 12233, 'accessories/npc_wearables/talonite_wearables/talonite_male/armor/chest_no_appearance', 0), + (12234, 12234, 'accessories/wearable_items/_exp06/demonic_chain/shoulders_demonic_skull_pauldrons', 0), + (12235, 12235, 'accessories/wearable_items/_exp06/demonic_leather/demonic_skull_pauldron_left', 0), + (12236, 12236, 'accessories/wearable_items/_exp06/demonic_leather/shoulders_demonic_skull_pauldrons', 0), + (12237, 12237, 'accessories/wearable_items/_exp06/demonic_leather/demonic_skull_pauldron_right', 0), + (12238, 12238, 'accessories/wearable_items/_exp06/demonic_robe/chest_demonic_skull_pauldrons', 0), + (12239, 12239, 'accessories/wearable_items/_exp06/demonic_robe/demonic_skull_pauldron_left', 0), + (12240, 12240, 'accessories/wearable_items/_exp06/demonic_robe/demonic_skull_pauldron_right', 0), + (12241, 12241, 'staticobjects/easels/easel_square_tree_circle', 0), + (12242, 12242, 'staticobjects/soe_wallet/man_dresser_mayong01', 0), + (12243, 12243, 'staticobjects/soe_wallet/man_coffin_bed_black_white', 0), + (12244, 12244, 'staticobjects/soe_wallet/man_coffin_bed_black_blue', 0), + (12245, 12245, 'staticobjects/soe_wallet/man_coffin_bed_black_red', 0), + (12246, 12246, 'accessories/wieldable_items/weapons/soe_wallet/hearts_wand', 0), + (12247, 12247, 'accessories/wieldable_items/weapons/soe_wallet/bubble_wand', 0), + (12248, 12248, 'accessories/wieldable_items/weapons/soe_wallet/evilstars_wand', 0), + (12249, 12249, 'staticobjects/_exp06/observatory_concentrator_fixed', 0), + (12250, 12250, 'staticobjects/_exp06/observatory_concentrator_cracked', 0), + (12251, 12251, 'staticobjects/_exp06/kerra_coconut', 0), + (12252, 12252, 'accessories/wearable_items/_exp06/six_vet_reward/head', 0), + (12253, 12253, 'accessories/wearable_items/cloak/exp06/cloak_six_vet_cloak', 0), + (12254, 12254, 'staticobjects/soe_wallet/ebony_bdrm_armoire_dpo', 0), + (12255, 12255, 'staticobjects/soe_wallet/ebony_bdrm_dresser_dpo', 0), + (12256, 12256, 'staticobjects/soe_wallet/ebony_vanity_washing_table_closed_dpo', 0), + (12257, 12257, 'staticobjects/soe_wallet/ebony_vanity_stool_dpo', 0), + (12258, 12258, 'staticobjects/soe_wallet/plushie_envenomed_servant', 0), + (12259, 12259, 'staticobjects/soe_wallet/ebony_vanity_washing_table_dpo', 0), + (12260, 12260, 'staticobjects/soe_wallet/ebony_vanity_table_mirror_dpo', 0), + (12261, 12261, 'staticobjects/soe_wallet/ebony_vanity_mirror_dpo', 0), + (12262, 12262, 'staticobjects/soe_wallet/ebony_vanity_drawers_dpo', 0), + (12263, 12263, 'staticobjects/soe_wallet/ebony_office_desk_dpo', 0), + (12264, 12264, 'staticobjects/soe_wallet/ebony_office_chest_w_goldcoins_dpo', 0), + (12265, 12265, 'staticobjects/soe_wallet/ebony_office_chair_dpo', 0), + (12266, 12266, 'staticobjects/soe_wallet/ebony_office_bookshelf_tall_dpo', 0), + (12267, 12267, 'staticobjects/soe_wallet/ebony_office_bookshelf_small_dpo', 0), + (12268, 12268, 'staticobjects/soe_wallet/ebony_living_table_end_dpo', 0), + (12269, 12269, 'staticobjects/soe_wallet/ebony_living_table_coffee_dpo', 0), + (12270, 12270, 'staticobjects/soe_wallet/ebony_living_loveseat_pillows_dpo', 0), + (12271, 12271, 'staticobjects/soe_wallet/ebony_living_couch_pillows_dpo', 0), + (12272, 12272, 'staticobjects/soe_wallet/ebony_dining_table_dpo', 0), + (12273, 12273, 'staticobjects/soe_wallet/ebony_dining_chair_dpo', 0), + (12274, 12274, 'staticobjects/soe_wallet/ebony_dining_cabinet_dpo', 0), + (12275, 12275, 'staticobjects/soe_wallet/ebony_dining_bench_dpo', 0), + (12276, 12276, 'staticobjects/soe_wallet/ebony_bdrm_nightstand_dpo', 0), + (12277, 12277, 'staticobjects/soe_wallet/ebony_vanity_dresser_dpo', 0), + (12278, 12278, 'staticobjects/soe_wallet/ebony_bdrm_bed_sleigh_dpo', 0), + (12279, 12279, 'staticobjects/easels/easel_square_abstract_bluedrip', 0), + (12280, 12280, 'staticobjects/easels/easel_square_abstract_green', 0), + (12281, 12281, 'staticobjects/easels/easel_square_abstract_orange', 0), + (12282, 12282, 'staticobjects/easels/easel_square_abstract_purple', 0), + (12283, 12283, 'staticobjects/easels/easel_square_abstract_red', 0), + (12284, 12284, 'staticobjects/easels/easel_square_armored', 0), + (12285, 12285, 'staticobjects/easels/easel_square_camels_circle', 0), + (12286, 12286, 'staticobjects/easels/easel_square_castle', 0), + (12287, 12287, 'staticobjects/easels/easel_square_everlingdaughter02', 0), + (12288, 12288, 'staticobjects/easels/easel_square_garinok', 0), + (12289, 12289, 'staticobjects/easels/easel_square_inn', 0), + (12290, 12290, 'staticobjects/easels/easel_square_knight', 0), + (12291, 12291, 'staticobjects/easels/easel_square_lion', 0), + (12292, 12292, 'staticobjects/easels/easel_square_map', 0), + (12293, 12293, 'staticobjects/easels/easel_square_oldman', 0), + (12294, 12294, 'staticobjects/easels/easel_square_pie', 0), + (12295, 12295, 'staticobjects/easels/easel_square_potions', 0), + (12296, 12296, 'staticobjects/easels/easel_square_rivervaleboats', 0), + (12297, 12297, 'staticobjects/easels/easel_square_rivervalechart', 0), + (12298, 12298, 'staticobjects/liveevent/frostfell/dpo_holiday_snowpile_fog', 0), + (12299, 12299, 'staticobjects/liveevent/frostfell/dpo_holiday_dirtpile_fog', 0), + (12300, 12300, 'accessories/wearable_items/cloak/exp06/cloak_six_vet_cloak_red', 0), + (12301, 12301, 'accessories/wearable_items/_exp06/six_vet_reward_red/head', 0), + (12302, 12302, '_exp05/tool_users/mummy_variant_mage_greater', 0), + (12303, 12303, 'accessories/wieldable_items/weapons/exp06/1h_crush/1h_crush_fish_club', 0), + (12304, 12304, '_exp06/zones/objects/exp06_dun_the_sentinel/sentinel_rm06_stairs', 0), + (12305, 12305, 'accessories/wieldable_items/weapons/exp06/great_spear/broom', 0), + (12306, 12306, 'staticobjects/_exp06/odso_toxx_vinebud01', 0), + (12307, 12307, 'staticobjects/liveevent/erollisi_objects/errolisi_cookie_plate01', 0), + (12308, 12308, 'staticobjects/liveevent/erollisi_objects/errolisi_candles_pinkwhite01', 0), + (12309, 12309, 'staticobjects/liveevent/erollisi_objects/errolisi_candles_purplewhite01', 0), + (12310, 12310, 'staticobjects/liveevent/erollisi_objects/errolisi_candles_redwhite01', 0), + (12311, 12311, 'staticobjects/_exp06/kerra_drum', 0), + (12312, 12312, 'accessories/wearable_items/profesion_hats/fungus_man_cap/fungus_man_cap_flat/head', 0), + (12313, 12313, 'accessories/wearable_items/profesion_hats/fungus_man_cap/fungus_man_cap_pointy/head', 0), + (12314, 12314, '_exp06/zones/objects/exp06_rgn_odus_north/quest_object_egg', 0), + (12315, 12315, 'staticobjects/_exp06/open_rat_trap', 0), + (12316, 12316, 'staticobjects/_exp06/panda_statue_completed', 0), + (12317, 12317, 'staticobjects/_exp06/closed_rat_trap', 0), + (12318, 12318, 'accessories/wearable_items/snapons/backpacks/backpack_frostfell_swivel/backpack_frostfell_swivel_jug', 0), + (12319, 12319, 'accessories/wearable_items/snapons/backpacks/backpack_frostfell_swivel/backpack_frostfell_swivel_snowbucket', 0), + (12320, 12320, 'accessories/wearable_items/snapons/backpacks/backpack_frostfell_swivel/backpack_frostfell_swivel_stocking', 0), + (12321, 12321, 'accessories/wearable_items/snapons/backpacks/backpack_frostfell_swivel/backpack_frostfell_swivel_wreath', 0), + (12322, 12322, 'accessories/wieldable_items/shields/exp06/demonic_round_shield', 0), + (12323, 12323, 'accessories/wieldable_items/weapons/exp06/1h_sword/exp06_1h_sword_demonic', 0), + (12324, 12324, 'staticobjects/_exp06/hua_scroll_01', 0), + (12325, 12325, 'staticobjects/_exp06/hua_scroll_02', 0), + (12326, 12326, 'staticobjects/_exp06/so_rock_01', 0), + (12327, 12327, 'staticobjects/_exp06/so_rock_02', 0), + (12328, 12328, 'staticobjects/_exp06/hua_table_small', 0), + (12329, 12329, 'staticobjects/_exp06/hua_tea_kettle', 0), + (12330, 12330, 'staticobjects/_exp06/hua_weaponrack', 0), + (12331, 12331, 'staticobjects/_exp06/ishaq_podium', 0), + (12332, 12332, 'staticobjects/_exp06/barrel_fish', 0), + (12333, 12333, 'staticobjects/_exp06/square_crate', 0), + (12334, 12334, 'staticobjects/_exp06/dpo_dirtmound', 0), + (12335, 12335, 'staticobjects/_exp06/dpo_totem_tentpole', 0), + (12336, 12336, 'staticobjects/_exp06/dpo_open_book', 0), + (12337, 12337, 'staticobjects/_exp06/book_pile_01', 0), + (12338, 12338, 'accessories/npc_wearables/talonite_wearables/tallonite_weapons/dragon_katana', 0), + (12339, 12339, 'accessories/npc_wearables/talonite_wearables/tallonite_weapons/korsha_staff2h', 0), + (12340, 12340, 'accessories/npc_wearables/talonite_wearables/tallonite_weapons/scimitar_tallonite', 0), + (12341, 12341, 'accessories/npc_wearables/talonite_wearables/tallonite_weapons/tallonite_longbow_2hb', 0), + (12342, 12342, '_exp06/zones/objects/exp06_dun_erudin_palace/erudin03_symbol_r04', 0), + (12343, 12343, 'creatures/mounts/lynx_mount/lynx_mount_heavy_armor', 0), + (12344, 12344, 'staticobjects/_exp06/steam_bowl_01', 0), + (12345, 12345, 'staticobjects/_exp06/harvest/exp06_gem_node', 0), + (12346, 12346, 'staticobjects/_exp06/harvest/exp06_wood_node', 0), + (12347, 12347, 'staticobjects/_exp06/harvest/exp06_ore_node', 0), + (12348, 12348, 'staticobjects/_exp06/harvest/exp06_root_node', 0), + (12349, 12349, 'staticobjects/_exp06/harvest/exp06_den_node', 0), + (12350, 12350, 'staticobjects/_exp06/harvest/exp06_bush_node', 0), + (12351, 12351, 'staticobjects/_exp06/roekillik_weaponrack', 0), + (12352, 12352, 'staticobjects/_exp06/human_cart', 0), + (12353, 12353, 'staticobjects/_exp06/stable_trough_long', 0), + (12354, 12354, 'staticobjects/_exp06/hua_basket_tall', 0), + (12355, 12355, 'staticobjects/_exp06/storage_box_01', 0), + (12356, 12356, 'staticobjects/_exp06/collectionbox_01', 0), + (12357, 12357, 'staticobjects/_exp06/square_crate_02', 0), + (12358, 12358, 'staticobjects/_exp06/dead_rat', 0), + (12359, 12359, 'staticobjects/_exp06/weeds_brown', 0), + (12360, 12360, 'staticobjects/_exp06/tablet_scribbles_01', 0), + (12361, 12361, 'staticobjects/_exp06/tablet_scribbles_02', 0), + (12362, 12362, 'staticobjects/_exp06/tablet_scribbles_03', 0), + (12363, 12363, 'staticobjects/_exp06/kaborite_gem', 0), + (12364, 12364, 'staticobjects/_exp06/toxfly_egg', 0), + (12365, 12365, 'staticobjects/_exp06/hua_cup_01', 0), + (12366, 12366, 'staticobjects/_exp06/odso_small_tox_tree_01', 0), + (12367, 12367, 'staticobjects/_exp06/odso_dagger001_plain', 0), + (12368, 12368, 'staticobjects/_exp06/odso_dagger001_ornate', 0), + (12369, 12369, 'staticobjects/_exp06/odso_dirtmound01', 0), + (12370, 12370, 'staticobjects/_exp06/exp06_plant_harvesting', 0), + (12371, 12371, 'staticobjects/_exp06/exp06_bush_harvesting', 0), + (12372, 12372, 'staticobjects/_exp06/odso_panda_totem_tradeskill', 0), + (12373, 12373, 'staticobjects/_exp06/odso_mushroom01', 0), + (12374, 12374, 'staticobjects/_exp06/odso_small_tox_tree_02', 0), + (12375, 12375, 'accessories/wearable_items/_exp06/dragon_leather/head_dragon_helm', 0), + (12376, 12376, 'staticobjects/carts/klakanon_mine_cart', 0), + (12377, 12377, 'staticobjects/gears/square_gear_inactive', 0), + (12378, 12378, 'accessories/wearable_items/snapons/armbands/shoulders_armband_strap_right', 0), + (12379, 12379, 'accessories/wearable_items/snapons/armbands/shoulders_armband_gems_both', 0), + (12380, 12380, 'accessories/wearable_items/snapons/armbands/shoulders_armband_gems_left', 0), + (12381, 12381, 'accessories/wearable_items/snapons/armbands/shoulders_armband_gems_right', 0), + (12382, 12382, 'accessories/wearable_items/snapons/armbands/shoulders_armband_golden_both', 0), + (12383, 12383, 'accessories/wearable_items/snapons/armbands/shoulders_armband_golden_left', 0), + (12384, 12384, 'accessories/wearable_items/snapons/armbands/shoulders_armband_golden_right', 0), + (12385, 12385, 'accessories/wearable_items/snapons/armbands/shoulders_armband_strap_both', 0), + (12386, 12386, 'accessories/wearable_items/snapons/armbands/shoulders_armband_strap_left', 0), + (12387, 12387, 'accessories/wearable_items/snapons/armbands/shoulders_armband_gems_silver_both', 0), + (12388, 12388, 'accessories/wearable_items/snapons/armbands/shoulders_armband_gems_silver_left', 0), + (12389, 12389, 'accessories/wearable_items/snapons/armbands/shoulders_armband_gems_silver_right', 0), + (12390, 12390, 'accessories/wearable_items/snapons/armbands/shoulders_armband_silver_both', 0), + (12391, 12391, 'accessories/wearable_items/snapons/armbands/shoulders_armband_silver_left', 0), + (12392, 12392, 'accessories/wearable_items/snapons/armbands/shoulders_armband_silver_right', 0), + (12393, 12393, 'accessories/wearable_items/_exp06/erudite_classic_armor/erudite_classic_armor_robe_white/erudite_robe_pauldron_right', 0), + (12394, 12394, 'accessories/wearable_items/_exp06/erudite_classic_armor/erudite_classic_armor_robe_white/chest_epic_pauldrons', 0), + (12395, 12395, 'accessories/wearable_items/_exp06/erudite_classic_armor/erudite_classic_armor_robe_white/erudite_robe_pauldron_left', 0), + (12396, 12396, 'accessories/wearable_items/cloak/exp06/cloak_rune_10', 0), + (12397, 12397, 'accessories/wearable_items/cloak/exp06/cloak_rune_13', 0), + (12398, 12398, 'creatures/tu/ettin_new', 0), + (12399, 12399, '_exp06/characters/monsters/sea_dragon_undead/sea_dragon_undead', 0), + (12400, 12400, 'accessories/wearable_items/cloak/exp06/cloak_rune_13_leafy', 0), + (12401, 12401, 'staticobjects/_exp06/odno_erudin_macguffin01', 0), + (12402, 12402, 'staticobjects/_exp06/tox_flowerbud_small', 0), + (12403, 12403, 'staticobjects/_exp06/dpo_kaborite_crucible', 0), + (12404, 12404, 'staticobjects/_exp06/dpo_odso_chest02_w_lid', 0), + (12405, 12405, 'staticobjects/_exp02/ss_vase_porcelain_small02', 0), + (12406, 12406, 'staticobjects/_exp02/dn_lightsource_clawlamp_withorbs01_blue', 0), + (12407, 12407, 'staticobjects/_exp02/dn_lightsource_clawlamp_withorbs_orangegreen', 0), + (12408, 12408, 'staticobjects/_exp02/dn_lightsource_lantern01', 0), + (12409, 12409, 'staticobjects/_exp02/dn_lightsource_lavaskullwell01', 0), + (12410, 12410, 'staticobjects/_exp02/dn_lightsource_shadowlamp01_orange', 0), + (12411, 12411, 'staticobjects/_exp02/dn_tapestry_hide01', 0), + (12412, 12412, 'staticobjects/_exp02/dn_tapestry_wing_dead01', 0), + (12413, 12413, 'staticobjects/_exp02/hf_egg_holder_large01', 0), + (12414, 12414, 'staticobjects/_exp02/hf_lightsource_chandalier_bones_center01', 0), + (12415, 12415, 'staticobjects/_exp02/hf_weapons_wall_shield01', 0), + (12416, 12416, 'staticobjects/_exp02/los_jail_cell_piece01', 0), + (12417, 12417, 'staticobjects/_exp02/ls_decoration_wall_dragonhead01', 0), + (12418, 12418, 'staticobjects/_exp02/ls_dragoneggs_mixed', 0), + (12419, 12419, 'staticobjects/_exp02/ls_vase_curved01', 0), + (12420, 12420, 'staticobjects/_exp02/ls_vase_curved02', 0), + (12421, 12421, 'staticobjects/_exp02/rd_nest_blue_draconian_wall01', 0), + (12422, 12422, 'staticobjects/_exp02/rn_bones_skull01', 0), + (12423, 12423, 'staticobjects/_exp02/rn_lightsource_torch01', 0), + (12424, 12424, 'staticobjects/_exp02/sos_aviak_bench01', 0), + (12425, 12425, 'staticobjects/_exp02/sos_aviak_stool01', 0), + (12426, 12426, 'staticobjects/_exp02/sos_aviak_weaponstand01', 0), + (12427, 12427, 'staticobjects/_exp02/sos_banner_awakened_dpo', 0), + (12428, 12428, 'staticobjects/_exp02/sos_banner_erudite_dpo', 0), + (12429, 12429, 'staticobjects/_exp02/sos_dragoneggs_unbroken_blue', 0), + (12430, 12430, 'staticobjects/_exp02/sos_dragoneggs_unbroken_pink', 0), + (12431, 12431, 'staticobjects/_exp02/sos_dragoneggs_unbroken_purple', 0), + (12432, 12432, 'staticobjects/_exp02/sos_lightsource_chandelier_orange_swinging', 0), + (12433, 12433, 'staticobjects/_exp02/sos_lightsource_hanginglamp_swinging', 0), + (12434, 12434, 'staticobjects/_exp02/sos_pillows_red_group01', 0), + (12435, 12435, 'staticobjects/_exp02/sos_trophy_dragon', 0), + (12436, 12436, 'staticobjects/_exp02/sos_trophy_insect', 0), + (12437, 12437, 'staticobjects/_exp02/ss_bookcase_ornate01', 0), + (12438, 12438, 'staticobjects/_exp02/ss_bookcase_ornate_ceiling01', 0), + (12439, 12439, 'staticobjects/_exp02/ss_vase_curved01', 0), + (12440, 12440, 'staticobjects/_exp02/ss_vase_curved02', 0), + (12441, 12441, 'staticobjects/_exp02/ss_vase_porcelain_large01', 0), + (12442, 12442, 'staticobjects/_exp02/ss_vase_porcelain_large02', 0), + (12443, 12443, 'accessories/npc_wearables/talonite_wearables/tallonite_weapons/tallonite_longbow', 0), + (12444, 12444, 'staticobjects/papers/floor_paper_human_written01_raised_noflutter', 0), + (12445, 12445, 'accessories/npc_wearables/talonite_wearables/tallonite_weapons/katana_1h_tallonite', 0), + (12446, 12446, 'accessories/npc_wearables/talonite_wearables/tallonite_weapons/silvertip_sword_1h_tallonite', 0), + (12447, 12447, 'staticobjects/shop/floor_displaycase_any_ornate01_small', 0), + (12448, 12448, 'staticobjects/mirrors/dpo_charasis_mirror_ice', 0), + (12449, 12449, 'creatures/mounts/flying_disc/flying_disc_good_fx', 0), + (12450, 12450, '_exp06/monsters/goo_energy_globs', 0), + (12451, 12451, 'accessories/wieldable_items/weapons/exp05/exp05_2hc_zombie_shovel_dpo2', 0), + (12452, 12452, 'staticobjects/promo_items/promo_alkaborrest_statue01', 0), + (12453, 12453, 'accessories/wearable_items/_exp08/dragon_armor/robe_green/head', 1096), + (12454, 12454, 'accessories/wearable_items/_exp08/dragon_armor/robe_green/head_collar', 1096), + (12455, 12455, 'accessories/wearable_items/_exp08/dragon_armor/robe_green/pants', 1096), + (12456, 12456, 'accessories/wearable_items/_exp08/dragon_armor/robe_ivory/skirt', 1096), + (12457, 12457, 'accessories/wearable_items/_exp08/dragon_armor/robe_ivory/chest', 1096), + (12458, 12458, 'accessories/wearable_items/_exp08/dragon_armor/robe_ivory/chest_epic', 1096), + (12459, 12459, 'accessories/wearable_items/_exp08/dragon_armor/robe_ivory/feet', 1096), + (12460, 12460, 'accessories/wearable_items/_exp08/dragon_armor/robe_ivory/hands', 1096), + (12461, 12461, 'accessories/wearable_items/_exp08/dragon_armor/robe_ivory/head', 1096), + (12462, 12462, 'accessories/wearable_items/_exp08/dragon_armor/robe_ivory/head_collar', 1096), + (12463, 12463, 'accessories/wearable_items/_exp06/ornate_robe01/head', 0), + (12464, 12464, 'accessories/wearable_items/_exp06/ornate_robe01/skirt', 0), + (12465, 12465, 'accessories/wearable_items/_exp06/ornate_robe01/chest', 0), + (12466, 12466, 'accessories/wearable_items/_exp06/ornate_robe01/hood', 0), + (12467, 12467, 'accessories/wearable_items/_exp06/ornate_robe01/pants', 0), + (12468, 12468, 'staticobjects/_exp06/kerra_plate_of_cheese', 0), + (12469, 12469, 'creatures/monsters/roper_petrified', 0), + (12470, 12470, '_exp06/characters/tool_users/construct_necro/construct_necro_dark', 0), + (12471, 12471, '_exp06/characters/tool_users/construct_necro/construct_necro', 0), + (12472, 12472, '_exp06/characters/tool_users/construct_necro/construct_necro_boss', 0), + (12473, 12473, 'accessories/npc_wearables/construct_necro/chest_construct_necro_tank_dark', 0), + (12474, 12474, 'accessories/npc_wearables/construct_necro/chest_construct_necro_boss', 0), + (12475, 12475, 'accessories/npc_wearables/construct_necro/chest_construct_necro_dps', 0), + (12476, 12476, 'accessories/npc_wearables/construct_necro/chest_construct_necro_dps_dark', 0), + (12477, 12477, 'accessories/npc_wearables/construct_necro/chest_construct_necro_tank', 0), + (12478, 12478, 'creatures/monsters/dervish_petrified', 0), + (12479, 12479, 'staticobjects/_exp06/odso_observatory_table', 0), + (12480, 12480, 'staticobjects/_exp06/kerra_table_square01', 0), + (12481, 12481, 'staticobjects/_exp06/kerra_table_round01', 0), + (12482, 12482, 'staticobjects/_exp06/kerra_scratchingpost02', 0), + (12483, 12483, 'staticobjects/_exp06/kerra_scratchingpost01', 0), + (12484, 12484, 'staticobjects/_exp06/kerra_torch01', 0), + (12485, 12485, 'staticobjects/_exp06/kerra_chair_tall01', 0), + (12486, 12486, 'staticobjects/_exp06/kerra_chair_short01', 0), + (12487, 12487, 'staticobjects/_exp06/kerra_basket_tall_grain02', 0), + (12488, 12488, 'staticobjects/_exp06/kerra_basket_tall_covered01', 0), + (12489, 12489, 'staticobjects/_exp06/kerra_banner_stand', 0), + (12490, 12490, 'staticobjects/_exp06/kerra_stairs01', 0), + (12491, 12491, 'staticobjects/_exp06/kerra_kejek_totem01', 0), + (12492, 12492, 'staticobjects/_exp06/hua_totem01', 0), + (12493, 12493, 'staticobjects/_exp06/hua_statue_traveler03', 0), + (12494, 12494, 'staticobjects/_exp06/hua_statue_traveler02', 0), + (12495, 12495, 'staticobjects/_exp06/hua_statue_traveler01', 0), + (12496, 12496, 'staticobjects/_exp06/hua_light_short', 0), + (12497, 12497, 'staticobjects/_exp06/hua_light_tall', 0), + (12498, 12498, 'staticobjects/_exp06/hua_table_short', 0), + (12499, 12499, 'staticobjects/_exp06/hua_table_low', 0), + (12500, 12500, 'staticobjects/_exp06/hua_food_container', 0), + (12501, 12501, 'staticobjects/_exp06/hua_chair_tall', 0), + (12502, 12502, 'staticobjects/_exp06/hua_chair_low', 0), + (12503, 12503, 'staticobjects/_exp06/hua_mat_round', 0), + (12504, 12504, 'staticobjects/_exp06/hua_mat_bed', 0), + (12505, 12505, 'staticobjects/_exp06/hua_basket_fish', 0), + (12506, 12506, 'staticobjects/_exp06/hua_basket_empty01', 0), + (12507, 12507, 'staticobjects/_exp06/hua_basket_oranges', 0), + (12508, 12508, 'staticobjects/_exp06/hua_banner02', 0), + (12509, 12509, 'staticobjects/_exp06/hua_banner01', 0), + (12510, 12510, 'staticobjects/_exp06/hua_umbrella_01', 0), + (12511, 12511, 'staticobjects/_exp06/hua_potion_sack_01', 0), + (12512, 12512, 'staticobjects/_exp06/hua_inkwell_01', 0), + (12513, 12513, 'staticobjects/_exp06/hua_bedroll01', 0), + (12514, 12514, 'staticobjects/_exp06/odno_bench_wide01', 0), + (12515, 12515, 'staticobjects/_exp06/odno_bench_small01', 0), + (12516, 12516, 'staticobjects/_exp06/odno_bench_platform01', 0), + (12517, 12517, 'staticobjects/_exp06/odso_bottle_glass03', 0), + (12518, 12518, 'staticobjects/_exp06/odso_bottle_glass02', 0), + (12519, 12519, 'staticobjects/_exp06/odso_bottle_glass01', 0), + (12520, 12520, 'staticobjects/_exp06/paineel_wall_weaponrack', 0), + (12521, 12521, 'staticobjects/_exp06/odso_barrel_fish', 0), + (12522, 12522, 'staticobjects/_exp06/odso_rattrap_closed', 0), + (12523, 12523, 'staticobjects/_exp06/odso_rattrap_open', 0), + (12524, 12524, 'staticobjects/_exp06/odso_gem_emeraldcut', 0), + (12525, 12525, 'staticobjects/_exp06/paineel_table_shelves01', 0), + (12526, 12526, 'staticobjects/_exp06/paineel_table_round01', 0), + (12527, 12527, 'staticobjects/_exp06/paineel_table_necromy01', 0), + (12528, 12528, 'staticobjects/_exp06/paineel_necro_desk01', 0), + (12529, 12529, 'staticobjects/_exp06/paineel_table_merchant01', 0), + (12530, 12530, 'staticobjects/_exp06/paineel_table_hutch_wings', 0), + (12531, 12531, 'staticobjects/_exp06/paineel_pedestal01', 0), + (12532, 12532, 'staticobjects/_exp06/paineel_podium01', 0), + (12533, 12533, 'staticobjects/_exp06/paineel_wall_lamp01', 0), + (12534, 12534, 'staticobjects/_exp06/paineel_street_lamp01', 0), + (12535, 12535, 'staticobjects/_exp06/paineel_sculpture01', 0), + (12536, 12536, 'staticobjects/_exp06/paineel_floor_lamp01', 0), + (12537, 12537, 'staticobjects/_exp06/paineel_bookcase_tall01', 0), + (12538, 12538, 'staticobjects/_exp06/paineel_bench_01', 0), + (12539, 12539, 'staticobjects/_exp06/paineel_chair_03', 0), + (12540, 12540, 'staticobjects/lighting/erudin_wall_lamp01_light', 0), + (12541, 12541, 'staticobjects/liveevent/cityfestivals/dpo_halas_table_lantern', 0), + (12542, 12542, 'creatures/tu/earth_elemental_petrified', 0), + (12543, 12543, 'staticobjects/bookcases/hum_bookcase001_rural_dark', 0), + (12544, 12544, 'creatures/monsters/tiger_white_black_stripe', 0), + (12545, 12545, 'creatures/monsters/dispacer_beast_fire_epic', 0), + (12546, 12546, 'creatures/monsters/dispacer_beast_fire', 0), + (12547, 12547, 'accessories/wearable_items/_exp06/guardian_reasoned_robe/skirt', 0), + (12548, 12548, 'accessories/wearable_items/_exp06/guardian_reasoned_robe/chest', 0), + (12549, 12549, 'accessories/wearable_items/_exp06/guardian_reasoned_robe/feet', 0), + (12550, 12550, 'accessories/wearable_items/_exp06/guardian_reasoned_robe/hands', 0), + (12551, 12551, 'accessories/wearable_items/_exp06/guardian_reasoned_robe/head_collar', 0), + (12552, 12552, 'accessories/wearable_items/_exp06/guardian_reasoned_robe/pants', 0), + (12553, 12553, 'accessories/wearable_items/_exp06/guardian_reasoned_robe/pauldron_left', 0), + (12554, 12554, 'accessories/wearable_items/_exp06/guardian_reasoned_robe/pauldron_right', 0), + (12555, 12555, '_exp04/monsters/stoneent_petrified', 0), + (12556, 12556, 'accessories/wearable_items/snapons/rings/hand_ring_copper_gems_jade_right/hands', 0), + (12557, 12557, 'accessories/wearable_items/snapons/rings/hand_ring_copper_right/hands', 0), + (12558, 12558, 'accessories/wearable_items/snapons/rings/hand_ring_gold_gems_amber_right/hands', 0), + (12559, 12559, 'accessories/wearable_items/snapons/rings/hand_ring_gold_gems_ruby_right/hands', 0), + (12560, 12560, 'accessories/wearable_items/snapons/rings/hand_ring_gold_right/hands', 0), + (12561, 12561, 'accessories/wearable_items/snapons/rings/hand_ring_silver_gems_amethyst_right/hands', 0), + (12562, 12562, 'accessories/wearable_items/snapons/rings/hand_ring_silver_gems_azure_right/hands', 0), + (12563, 12563, 'accessories/wearable_items/snapons/rings/hand_ring_silver_right/hands', 0), + (12564, 12564, 'accessories/wearable_items/snapons/rings/hand_ring_triple_gems_azure_right/hands', 0), + (12565, 12565, 'accessories/wearable_items/snapons/rings/hand_ring_triple_gems_jade_right/hands', 0), + (12566, 12566, 'accessories/wearable_items/_exp06/guardian_learned_robe/skirt', 0), + (12567, 12567, 'accessories/wearable_items/_exp06/guardian_learned_robe/chest', 0), + (12568, 12568, 'accessories/wearable_items/_exp06/guardian_learned_robe/feet', 0), + (12569, 12569, 'accessories/wearable_items/_exp06/guardian_learned_robe/hands', 0), + (12570, 12570, 'accessories/wearable_items/_exp06/guardian_learned_robe/head_collar', 0), + (12571, 12571, 'accessories/wearable_items/_exp06/guardian_learned_robe/pants', 0), + (12572, 12572, 'accessories/wearable_items/_exp06/guardian_learned_robe/pauldron_left', 0), + (12573, 12573, 'accessories/wearable_items/_exp06/guardian_learned_robe/pauldron_right', 0), + (12574, 12574, 'accessories/wearable_items/_exp06/dartain_robe/skirt', 0), + (12575, 12575, 'accessories/wearable_items/_exp06/dartain_robe/chest', 0), + (12576, 12576, 'accessories/wearable_items/_exp06/dartain_robe/chest_pauldrons', 0), + (12577, 12577, 'accessories/wearable_items/_exp06/dartain_robe/dartain_pauldron_left', 0), + (12578, 12578, 'accessories/wearable_items/_exp06/dartain_robe/dartain_pauldron_right', 0), + (12579, 12579, 'accessories/wearable_items/_exp06/dartain_robe/feet', 0), + (12580, 12580, 'accessories/wearable_items/_exp06/dartain_robe/hands', 0), + (12581, 12581, 'accessories/wearable_items/_exp06/dartain_robe/head', 0), + (12582, 12582, 'accessories/wearable_items/_exp06/dartain_robe/head_collar', 0), + (12583, 12583, 'accessories/wearable_items/_exp06/dartain_robe/pants', 0), + (12584, 12584, '_exp06/zones/objects/exp06_dun_erudin_palace/erudin03_secret_wall', 0), + (12585, 12585, 'accessories/wieldable_items/weapons/staff/globe_of_everburning_flame/globe_of_everburning_flame', 0), + (12586, 12586, 'staticobjects/liveevent/brew_day/dpo_drv_cup_ornate_brass', 0), + (12587, 12587, 'staticobjects/liveevent/brew_day/dpo_drv_cup_ornate_pewter', 0), + (12588, 12588, 'staticobjects/liveevent/brew_day/dpo_drv_kegstand_keg01_swinging', 0), + (12589, 12589, 'staticobjects/liveevent/brew_day/dpo_drv_wine_bottle_ornate_brass', 0), + (12590, 12590, 'staticobjects/liveevent/brew_day/dpo_drv_wine_bottle_ornate_pewter', 0), + (12591, 12591, 'staticobjects/liveevent/brew_day/dpo_tapestry_design_beerfest', 0), + (12592, 12592, 'staticobjects/_exp06/odso_paineel_mailbox', 0), + (12593, 12593, 'accessories/wearable_items/_exp08/dragon_armor/robe_ivory/pants', 1096), + (12594, 12594, 'accessories/wearable_items/_exp08/dragon_armor/robe_red/skirt', 1096), + (12595, 12595, 'accessories/wearable_items/_exp08/dragon_armor/robe_red/chest', 1096), + (12596, 12596, 'accessories/wearable_items/_exp08/dragon_armor/robe_red/chest_epic', 1096), + (12597, 12597, 'accessories/wearable_items/_exp08/dragon_armor/robe_red/feet', 1096), + (12598, 12598, 'accessories/wearable_items/_exp08/dragon_armor/robe_red/hands', 1096), + (12599, 12599, 'accessories/wearable_items/_exp08/dragon_armor/robe_red/head', 1096), + (12600, 12600, 'accessories/wearable_items/_exp08/dragon_armor/robe_red/hood', 1096), + (12601, 12601, 'accessories/wearable_items/_exp08/dragon_armor/robe_red/pants', 1096), + (12602, 12602, 'accessories/wearable_items/_exp08/dragon_armor/robe_shadow/skirt', 1096), + (12603, 12603, 'accessories/wearable_items/_exp08/dragon_armor/robe_shadow/chest', 1096), + (12604, 12604, 'accessories/wearable_items/_exp08/dragon_armor/robe_shadow/chest_epic', 1096), + (12605, 12605, 'creatures/tu/rhoen_theer_spirit', 0), + (12606, 12606, 'creatures/mounts/lynx_mount/lynx_mount_bare', 0), + (12607, 12607, 'staticobjects/liveevent/brew_day/dpo_drv_kegstand01', 0), + (12608, 12608, 'accessories/wieldable_items/weapons/fist/mystical_claws_of_jojo/mystical_claws_of_jojo', 0), + (12609, 12609, '_exp06/zones/objects/plunderable_loot/vastydeep01_objects01_banner01', 0), + (12610, 12610, '_exp06/zones/objects/plunderable_loot/vastydeep02_objects01_banner01', 0), + (12611, 12611, '_exp06/zones/objects/plunderable_loot/vastydeep03_objects01_vase06', 0), + (12612, 12612, '_exp06/zones/objects/plunderable_loot/vase_small_full_01', 0), + (12613, 12613, '_exp06/zones/objects/plunderable_loot/sent_rug_01', 0), + (12614, 12614, '_exp06/zones/objects/plunderable_loot/sent_big_chair_01', 0), + (12615, 12615, '_exp06/zones/objects/plunderable_loot/th_banners_b01', 0), + (12616, 12616, '_exp06/zones/objects/plunderable_loot/th_lrge_lamp_stand_fx', 0), + (12617, 12617, '_exp06/zones/objects/plunderable_loot/th_crystals_crystal01', 0), + (12618, 12618, '_exp06/zones/objects/plunderable_loot/erudin_rug_round_lrg01', 0), + (12619, 12619, '_exp06/zones/objects/plunderable_loot/erudin_banner02_long', 0), + (12620, 12620, '_exp06/zones/objects/plunderable_loot/erudin_bench02', 0), + (12621, 12621, '_exp06/characters/monsters/erudite_lich/erudite_lich', 0), + (12622, 12622, 'staticobjects/liveevent/brew_day/dpo_sentinal_obj_cake01', 0), + (12623, 12623, 'staticobjects/liveevent/brew_day/dpo_halfing_churner01_keg', 0), + (12624, 12624, 'staticobjects/liveevent/bristlebane_day/dpo_halfing_candle_log01', 0), + (12625, 12625, 'staticobjects/liveevent/bristlebane_day/dpo_halfing_churner01', 0), + (12626, 12626, 'staticobjects/liveevent/bristlebane_day/dpo_halfing_display_gordflask01', 0), + (12627, 12627, 'staticobjects/liveevent/bristlebane_day/dpo_halfing_tablekeg01_lg', 0), + (12628, 12628, 'staticobjects/liveevent/bristlebane_day/dpo_sen_apple_bitten', 0), + (12629, 12629, 'staticobjects/liveevent/bristlebane_day/dpo_sen_food_lettuce', 0), + (12630, 12630, 'staticobjects/liveevent/bristlebane_day/dpo_sentinal_obj_hummus', 0), + (12631, 12631, 'staticobjects/liveevent/bristlebane_day/dpo_sentinal_obj_pie02', 0), + (12632, 12632, '_exp06/zones/objects/exp06_rgn_odus_north/respawn_graves', 0), + (12633, 12633, '_exp06/zones/objects/exp06_dun_erudin_library/weapon_wrench', 0), + (12634, 12634, '_exp06/zones/objects/exp06_dun_erudin_library/corpse_01_chest', 0), + (12635, 12635, '_exp06/zones/objects/exp06_dun_erudin_library/corpse_02_chest', 0), + (12636, 12636, '_exp06/zones/objects/exp06_dun_erudin_library/corpse_bench', 0), + (12637, 12637, '_exp06/zones/objects/exp06_dun_erudin_library/corpse_rug', 0), + (12638, 12638, '_exp06/zones/objects/exp06_dun_erudin_library/corpse_screen', 0), + (12639, 12639, '_exp06/zones/objects/exp06_dun_erudin_library/corpse_table', 0), + (12640, 12640, '_exp06/zones/objects/exp06_dun_erudin_library/corpse_vase', 0), + (12641, 12641, '_exp06/zones/objects/exp06_dun_erudin_library/weapon_candlestick', 0), + (12642, 12642, '_exp06/zones/objects/exp06_dun_erudin_library/weapon_chain_of_office', 0), + (12643, 12643, '_exp06/zones/objects/exp06_dun_erudin_library/weapon_dagger', 0), + (12644, 12644, '_exp06/zones/objects/exp06_dun_erudin_library/weapon_staff', 0), + (12645, 12645, '_exp06/zones/objects/exp06_dun_erudin_library/weapon_wand', 0), + (12646, 12646, '_exp06/zones/objects/dragoneggs_hatching', 0), + (12647, 12647, '_exp06/zones/objects/exp06_dun_vastydeep01/vastydeep01_objects01_shellrecepticle01', 1045), + (12648, 12648, 'accessories/wieldable_items/weapons/exp06/bow/exp06_bow_of_the_underfoot', 1045), + (12649, 12649, '_exp06/zones/objects/collection_rewards/erudin_chest02_w_lid01', 1045), + (12650, 12650, '_exp06/zones/objects/collection_rewards/eru_research_stool01', 1045), + (12651, 12651, '_exp06/zones/objects/collection_rewards/sentinel_small_crate_01', 1045), + (12652, 12652, '_exp06/zones/objects/collection_rewards/sentinel_stool_01', 1045), + (12653, 12653, '_exp06/zones/objects/collection_rewards/sentinel_scroll_single_cap_01', 1045), + (12654, 12654, '_exp06/zones/objects/collection_rewards/sen_potions05', 1045), + (12655, 12655, '_exp06/zones/objects/collection_rewards/sen_potions04', 1045), + (12656, 12656, '_exp06/zones/objects/collection_rewards/sen_potions01', 1045), + (12657, 12657, '_exp06/zones/objects/collection_rewards/sen_potions02', 1045), + (12658, 12658, '_exp06/zones/objects/collection_rewards/vastydeep01_objects01_wheelbarrow01', 1045), + (12659, 12659, '_exp06/zones/objects/collection_rewards/vastydeep03_objects01_vase07', 1045), + (12660, 12660, '_exp06/zones/objects/collection_rewards/vastydeep03_objects01_vase01', 1045), + (12661, 12661, '_exp06/zones/objects/collection_rewards/vastydeep03_objects01_vase05', 1045), + (12662, 12662, '_exp06/zones/objects/exp06_dun_erudin_research/reflecting_mirror', 1045), + (12663, 12663, 'accessories/wearable_items/_exp06/chaos_armor/robe_armor/skirt', 1045), + (12664, 12664, 'accessories/wearable_items/_exp06/chaos_armor/robe_armor/chest', 1045), + (12665, 12665, 'accessories/wearable_items/_exp06/chaos_armor/robe_armor/chest_chaos_pauldrons', 1045), + (12666, 12666, 'accessories/wearable_items/_exp06/chaos_armor/robe_armor/head', 1045), + (12667, 12667, 'accessories/wearable_items/_exp06/chaos_armor/robe_armor/head_chaos_helm', 1045), + (12668, 12668, 'accessories/wearable_items/_exp06/chaos_armor/robe_armor/head_collar', 1045), + (12669, 12669, 'accessories/wearable_items/_exp06/chaos_armor/robe_armor/pants', 1045), + (12670, 12670, 'accessories/wearable_items/_exp06/chaos_armor/robe_armor/snap_ons/chaos_pauldrons_upper_right', 1045), + (12671, 12671, 'accessories/wearable_items/_exp06/chaos_armor/robe_armor/snap_ons/chaos_pauldrons_lower_left', 1045), + (12672, 12672, 'accessories/wearable_items/_exp06/chaos_armor/robe_armor/snap_ons/chaos_pauldrons_lower_right', 1045), + (12673, 12673, 'accessories/wearable_items/_exp06/chaos_armor/robe_armor/snap_ons/chaos_pauldrons_upper_left', 1045), + (12674, 12674, 'creatures/monsters/snake_black_red', 1045), + (12675, 12675, 'creatures/monsters/snake_black', 1045), + (12676, 12676, '_exp06/characters/monsters/erudite_lich/classic_erudite_lich', 1045), + (12677, 12677, '_exp06/characters/tool_users/roekillik_female/roekillik_female_ghost', 1045), + (12678, 12678, '_exp06/characters/tool_users/roekillik_male/roekillik_male_ghost', 1045), + (12679, 12679, 'accessories/wearable_items/_exp05/guk_turtle_vanguard/shoulders_turtle_pauldrons_both', 1045), + (12680, 12680, 'accessories/wearable_items/_exp05/guk_turtle_vanguard/chest', 1045), + (12681, 12681, 'accessories/wearable_items/_exp05/guk_turtle_vanguard/feet', 1045), + (12682, 12682, 'accessories/wearable_items/_exp05/guk_turtle_vanguard/forearms', 1045), + (12683, 12683, 'accessories/wearable_items/_exp05/guk_turtle_vanguard/guk_turtle_knee_plate_left', 1045), + (12684, 12684, 'accessories/wearable_items/_exp05/guk_turtle_vanguard/guk_turtle_knee_plate_right', 1045), + (12685, 12685, 'accessories/wearable_items/_exp05/guk_turtle_vanguard/hands', 1045), + (12686, 12686, 'accessories/wearable_items/_exp05/guk_turtle_vanguard/legs_noskirt', 1045), + (12687, 12687, 'accessories/wearable_items/_exp05/guk_turtle_vanguard/legs_turtle_kneepads', 1045), + (12688, 12688, 'accessories/wearable_items/_exp05/guk_turtle_vanguard/right', 1045), + (12689, 12689, 'accessories/wearable_items/_exp05/guk_turtle_vanguard/shoulders', 1045), + (12690, 12690, 'accessories/wearable_items/_exp05/guk_turtle_vanguard/shoulders_nopauldrons', 1045), + (12691, 12691, 'ec/pc/kerra/kerra_female_ghost_loop', 1045), + (12692, 12692, 'ec/pc/kerra/kerra_male_ghost_loop', 1045), + (12693, 12693, 'accessories/wearable_items/_exp06/shiny_robe_of_the_underfoot/chest', 1045), + (12694, 12694, 'accessories/wearable_items/_exp06/shiny_robe_of_the_underfoot/feet', 1045), + (12695, 12695, 'accessories/wearable_items/_exp06/shiny_robe_of_the_underfoot/hands', 1045), + (12696, 12696, 'accessories/wearable_items/_exp06/shiny_robe_of_the_underfoot/head', 1045), + (12697, 12697, 'accessories/wearable_items/_exp06/shiny_robe_of_the_underfoot/pants', 1045), + (12698, 12698, 'accessories/wearable_items/_exp06/shiny_robe_of_the_underfoot/skirt', 1045), + (12699, 12699, 'creatures/monsters/winged_nightmare_transport', 1045), + (12700, 12700, 'accessories/wearable_items/_exp06/shiny_robe_of_the_underfoot/chest_disc', 1045), + (12701, 12701, 'accessories/wearable_items/_exp06/shiny_robe_of_the_underfoot/chest_disc_pauldrons', 1045), + (12702, 12702, 'accessories/wearable_items/_exp06/shiny_robe_of_the_underfoot/chest_pauldrons', 1045), + (12703, 12703, 'accessories/wearable_items/_exp06/shiny_robe_of_the_underfoot/crystal_disc', 1045), + (12704, 12704, 'accessories/wearable_items/_exp06/shiny_robe_of_the_underfoot/shiny_robe_of_the_underfoot_pauldron_left', 1045), + (12705, 12705, 'accessories/wearable_items/_exp06/shiny_robe_of_the_underfoot/shiny_robe_of_the_underfoot_pauldron_right', 1045), + (12706, 12706, 'accessories/wieldable_items/shields/exp06/chaos_shield', 1045), + (12707, 12707, 'accessories/wearable_items/_exp06/tradeskill_armor_cloth_shamrocks/feet', 1045), + (12708, 12708, 'accessories/wearable_items/snapons/fx/feet_trail_shamrocks', 1045), + (12709, 12709, 'staticobjects/liveevent/brew_day/dpo_brewday_frothy_mug01', 1045), + (12710, 12710, 'staticobjects/liveevent/brew_day/dpo_brewday_frothy_mug02', 1045), + (12711, 12711, 'staticobjects/liveevent/brew_day/dpo_brewday_frothy_mug03', 1045), + (12712, 12712, 'accessories/wieldable_items/misc/stein002_plain_frothy', 1045), + (12713, 12713, 'accessories/wieldable_items/weapons/staff/cobra_staff/cobra_staff_plain_shissar', 1045), + (12714, 12714, 'staticobjects/_exp06/erudin_bench02_globe', 1045), + (12715, 12715, 'staticobjects/_exp06/erudin_library_orb', 1045), + (12716, 12716, 'staticobjects/_exp06/erudin_library_r01_transporter', 1045), + (12717, 12717, 'staticobjects/_exp06/erudin_library_bookcase_sliding01', 1045), + (12718, 12718, 'staticobjects/_exp06/erudin_table01_marble', 1045), + (12719, 12719, 'staticobjects/_exp06/erudin_table01_hutch_marble', 1045), + (12720, 12720, 'staticobjects/_exp06/erudin_rug_rolled_group01', 1045), + (12721, 12721, 'staticobjects/_exp06/erudin_research_stool', 1045), + (12722, 12722, 'staticobjects/_exp06/erudin_research_table', 1045), + (12723, 12723, 'staticobjects/_exp06/erudin_bottle_purplegoo', 1045), + (12724, 12724, 'staticobjects/_exp06/erudin_book04', 1045), + (12725, 12725, 'staticobjects/_exp06/erudin_book03', 1045), + (12726, 12726, 'staticobjects/_exp06/erudin_book02', 1045), + (12727, 12727, 'staticobjects/_exp06/erudin_book01', 1045), + (12728, 12728, 'staticobjects/_exp06/erudin_chair02_globe', 1045), + (12729, 12729, 'staticobjects/_exp06/erudin_chair01_globe', 1045), + (12730, 12730, 'staticobjects/promo_items/promo_battlegrounds_statue', 1045), + (12731, 12731, 'staticobjects/liveevent/brew_day/dpo_vrsn_winebottle01_red', 1045), + (12732, 12732, 'staticobjects/_exp06/hua_cup_01_filled', 1045), + (12733, 12733, 'staticobjects/kitchen/floor_pot_human_cooking02_water_dpo', 1045), + (12734, 12734, 'staticobjects/portals/tallonite_portal', 1045), + (12735, 12735, 'staticobjects/_exp06/odus_north_mailbox', 1045), + (12736, 12736, 'creatures/monsters/ankylosaurus', 1045), + (12737, 12737, 'accessories/wearable_items/_exp05/guk_heavycloth/guk_turrtle_pauldron01_right', 1045), + (12738, 12738, 'accessories/wearable_items/_exp05/guk_heavycloth/guk_turrtle_pauldron01_left', 1045), + (12739, 12739, 'creatures/mounts/horse_demon/horse_demon_velium', 1045), + (12740, 12740, 'accessories/wearable_items/_exp06/erudite_classic_armor/erudite_classic_armor_leather_white/skirt', 1045), + (12741, 12741, 'accessories/wearable_items/_exp06/erudite_classic_armor/erudite_classic_armor_leather_white/chest', 1045), + (12742, 12742, 'accessories/wearable_items/_exp06/erudite_classic_armor/erudite_classic_armor_leather_white/feet', 1045), + (12743, 12743, 'accessories/wearable_items/_exp06/erudite_classic_armor/erudite_classic_armor_leather_white/forearms', 1045), + (12744, 12744, 'accessories/wearable_items/_exp06/erudite_classic_armor/erudite_classic_armor_leather_white/hands', 1045), + (12745, 12745, 'accessories/wearable_items/_exp06/erudite_classic_armor/erudite_classic_armor_leather_white/head', 1045), + (12746, 12746, 'accessories/wearable_items/_exp06/erudite_classic_armor/erudite_classic_armor_leather_white/head_for_classic_erudite', 1045), + (12747, 12747, 'accessories/wearable_items/_exp06/erudite_classic_armor/erudite_classic_armor_leather_white/legs', 1045), + (12748, 12748, 'accessories/wearable_items/_exp06/erudite_classic_armor/erudite_classic_armor_leather_white/legs_noskirt', 1045), + (12749, 12749, 'accessories/wearable_items/_exp06/erudite_classic_armor/erudite_classic_armor_leather_white/shoulders', 1045), + (12750, 12750, 'accessories/wearable_items/_exp08/dragon_armor/robe_shadow/feet', 1096), + (12751, 12751, 'accessories/wieldable_items/weapons/exp06/1h_sword/exp06_1h_sword_grimblade', 1045), + (12752, 12752, 'accessories/wearable_items/_exp06/erudite_classic_armor/erudite_classic_armor_leather_black/skirt', 1045), + (12753, 12753, 'accessories/wearable_items/_exp06/erudite_classic_armor/erudite_classic_armor_leather_black/chest', 1045), + (12754, 12754, 'accessories/wearable_items/_exp06/erudite_classic_armor/erudite_classic_armor_leather_black/feet', 1045), + (12755, 12755, 'accessories/wearable_items/_exp06/erudite_classic_armor/erudite_classic_armor_leather_black/forearms', 1045), + (12756, 12756, 'accessories/wearable_items/_exp06/erudite_classic_armor/erudite_classic_armor_leather_black/hands', 1045), + (12757, 12757, 'accessories/wearable_items/_exp06/erudite_classic_armor/erudite_classic_armor_leather_black/head', 1045), + (12758, 12758, 'accessories/wearable_items/_exp06/erudite_classic_armor/erudite_classic_armor_leather_black/head_for_classic_erudite', 1045), + (12759, 12759, 'accessories/wearable_items/_exp06/erudite_classic_armor/erudite_classic_armor_leather_black/legs', 1045), + (12760, 12760, 'accessories/wearable_items/_exp06/erudite_classic_armor/erudite_classic_armor_leather_black/legs_noskirt', 1045), + (12761, 12761, 'accessories/wearable_items/_exp06/erudite_classic_armor/erudite_classic_armor_leather_black/shoulders', 1045), + (12762, 12762, 'accessories/wearable_items/_exp06/erudite_classic_armor/erudite_classic_armor_leather_blue/skirt', 1045), + (12763, 12763, 'accessories/wearable_items/_exp06/erudite_classic_armor/erudite_classic_armor_leather_blue/chest', 1045), + (12764, 12764, 'accessories/wearable_items/_exp06/erudite_classic_armor/erudite_classic_armor_leather_blue/feet', 1045), + (12765, 12765, 'accessories/wearable_items/_exp06/erudite_classic_armor/erudite_classic_armor_leather_blue/forearms', 1045), + (12766, 12766, 'accessories/wearable_items/_exp06/erudite_classic_armor/erudite_classic_armor_leather_blue/hands', 1045), + (12767, 12767, 'accessories/wearable_items/_exp06/erudite_classic_armor/erudite_classic_armor_leather_blue/head', 1045), + (12768, 12768, 'accessories/wearable_items/_exp06/erudite_classic_armor/erudite_classic_armor_leather_blue/head_for_classic_erudite', 1045), + (12769, 12769, 'accessories/wearable_items/_exp06/erudite_classic_armor/erudite_classic_armor_leather_blue/legs', 1045), + (12770, 12770, 'accessories/wearable_items/_exp06/erudite_classic_armor/erudite_classic_armor_leather_blue/legs_noskirt', 1045), + (12771, 12771, 'accessories/wearable_items/_exp06/erudite_classic_armor/erudite_classic_armor_leather_blue/shoulders', 1045), + (12772, 12772, 'accessories/wearable_items/_exp06/erudite_classic_armor/erudite_classic_armor_leather_orange/skirt', 1045), + (12773, 12773, 'accessories/wearable_items/_exp06/erudite_classic_armor/erudite_classic_armor_leather_orange/chest', 1045), + (12774, 12774, 'accessories/wearable_items/_exp06/erudite_classic_armor/erudite_classic_armor_leather_orange/feet', 1045), + (12775, 12775, 'accessories/wearable_items/_exp06/erudite_classic_armor/erudite_classic_armor_leather_orange/forearms', 1045), + (12776, 12776, 'accessories/wearable_items/_exp06/erudite_classic_armor/erudite_classic_armor_leather_orange/hands', 1045), + (12777, 12777, 'accessories/wearable_items/_exp06/erudite_classic_armor/erudite_classic_armor_leather_orange/head', 1045), + (12778, 12778, 'accessories/wearable_items/_exp06/erudite_classic_armor/erudite_classic_armor_leather_orange/head_for_classic_erudite', 1045), + (12779, 12779, 'accessories/wearable_items/_exp06/erudite_classic_armor/erudite_classic_armor_leather_orange/legs', 1045), + (12780, 12780, 'accessories/wearable_items/_exp06/erudite_classic_armor/erudite_classic_armor_leather_orange/legs_noskirt', 1045), + (12781, 12781, 'accessories/wearable_items/_exp06/erudite_classic_armor/erudite_classic_armor_leather_orange/shoulders', 1045), + (12782, 12782, 'accessories/wearable_items/_exp06/erudite_classic_armor/erudite_classic_armor_leather_red/skirt', 1045), + (12783, 12783, 'accessories/wearable_items/_exp06/erudite_classic_armor/erudite_classic_armor_leather_red/chest', 1045), + (12784, 12784, 'accessories/wearable_items/_exp06/erudite_classic_armor/erudite_classic_armor_leather_red/feet', 1045), + (12785, 12785, 'accessories/wearable_items/_exp06/erudite_classic_armor/erudite_classic_armor_leather_red/forearms', 1045), + (12786, 12786, 'accessories/wearable_items/_exp06/erudite_classic_armor/erudite_classic_armor_leather_red/hands', 1045), + (12787, 12787, 'accessories/wearable_items/_exp06/erudite_classic_armor/erudite_classic_armor_leather_red/head', 1045), + (12788, 12788, 'accessories/wearable_items/_exp06/erudite_classic_armor/erudite_classic_armor_leather_red/head_for_classic_erudite', 1045), + (12789, 12789, 'accessories/wearable_items/_exp06/erudite_classic_armor/erudite_classic_armor_leather_red/legs', 1045), + (12790, 12790, 'accessories/wearable_items/_exp06/erudite_classic_armor/erudite_classic_armor_leather_red/legs_noskirt', 1045), + (12791, 12791, 'accessories/wearable_items/_exp06/erudite_classic_armor/erudite_classic_armor_leather_red/shoulders', 1045), + (12792, 12792, 'accessories/wearable_items/_exp06/erudite_classic_armor/erudite_classic_armor_leather_violet/skirt', 1045), + (12793, 12793, 'accessories/wearable_items/_exp06/erudite_classic_armor/erudite_classic_armor_leather_violet/chest', 1045), + (12794, 12794, 'accessories/wearable_items/_exp06/erudite_classic_armor/erudite_classic_armor_leather_violet/feet', 1045), + (12795, 12795, 'accessories/wearable_items/_exp06/erudite_classic_armor/erudite_classic_armor_leather_violet/forearms', 1045), + (12796, 12796, 'accessories/wearable_items/_exp06/erudite_classic_armor/erudite_classic_armor_leather_violet/hands', 1045), + (12797, 12797, 'accessories/wearable_items/_exp06/erudite_classic_armor/erudite_classic_armor_leather_violet/head', 1045), + (12798, 12798, 'accessories/wearable_items/_exp06/erudite_classic_armor/erudite_classic_armor_leather_violet/head_for_classic_erudite', 1045), + (12799, 12799, 'accessories/wearable_items/_exp06/erudite_classic_armor/erudite_classic_armor_leather_violet/legs', 1045), + (12800, 12800, 'accessories/wearable_items/_exp06/erudite_classic_armor/erudite_classic_armor_leather_violet/legs_noskirt', 1045), + (12801, 12801, 'accessories/wearable_items/_exp06/erudite_classic_armor/erudite_classic_armor_leather_violet/shoulders', 1045), + (12802, 12802, '_exp06/zones/objects/exp06_dun_the_sentinel/sen_small_crate_01_dpo', 1045), + (12803, 12803, '_exp06/zones/objects/exp06_dun_vastydeep01/vastydeep01_topiary_dpo', 1045), + (12804, 12804, '_exp06/zones/objects/exp06_dun_vastydeep02/vastydeep02_tube_dpo', 1045), + (12805, 12805, '_exp06/zones/objects/exp06_dun_vastydeep03/vastydeep03_shrine01_dpo', 1045), + (12806, 12806, 'staticobjects/weapons/dpo_small_dwarf_axe', 1045), + (12807, 12807, 'staticobjects/statues/citymerchant_90_statue_base', 1045), + (12808, 12808, 'staticobjects/statues/citymerchant_90_statue_dragon', 1045), + (12809, 12809, 'staticobjects/_exp03/dpo_dwarf_winebottle01', 1045), + (12810, 12810, 'staticobjects/_exp03/dpo_dwarf_bed01', 1045), + (12811, 12811, 'staticobjects/_exp03/dpo_dwarf_bed02', 1045), + (12812, 12812, 'staticobjects/_exp03/dpo_dwarf_bookcase01', 1045), + (12813, 12813, 'staticobjects/_exp03/dpo_dwarf_chair01', 1045), + (12814, 12814, 'staticobjects/_exp03/dpo_dwarf_crate01', 1045), + (12815, 12815, 'staticobjects/_exp03/dpo_dwarf_cup01', 1045), + (12816, 12816, 'staticobjects/_exp03/dpo_dwarf_lantern01', 1045), + (12817, 12817, 'staticobjects/_exp03/dpo_dwarf_nightstand01', 1045), + (12818, 12818, 'staticobjects/_exp03/dpo_dwarf_stool01', 1045), + (12819, 12819, 'staticobjects/_exp03/dpo_dwarf_table01', 1045), + (12820, 12820, 'staticobjects/_exp03/dpo_dwarf_table02', 1045), + (12821, 12821, 'staticobjects/_exp03/dpo_dwarf_throne01', 1045), + (12822, 12822, 'staticobjects/_exp03/dpo_dwarf_weaponrack01', 1045), + (12823, 12823, 'staticobjects/easels/dpo_djn_paintbuckets_group01', 1045), + (12824, 12824, 'staticobjects/easels/djn_paintbucket01', 1045), + (12825, 12825, 'accessories/wieldable_items/soga_weapons/mage/staff_of_phoenix_flame_fx', 1045), + (12826, 12826, 'accessories/wieldable_items/soga_weapons/scout/traceless_wounding_dark_fx', 1045), + (12827, 12827, 'staticobjects/battlegrounds/battleground_flag_blue', 1045), + (12828, 12828, 'staticobjects/battlegrounds/battleground_flag_red', 1045), + (12829, 12829, 'staticobjects/battlegrounds/battleground_flag_white', 1045), + (12830, 12830, 'accessories/wearable_items/_exp06/chaos_armor/leather_armor/skirt', 1045), + (12831, 12831, 'accessories/wearable_items/_exp06/chaos_armor/leather_armor/chest', 1045), + (12832, 12832, 'accessories/wearable_items/_exp06/chaos_armor/leather_armor/feet', 1045), + (12833, 12833, 'accessories/wearable_items/_exp06/chaos_armor/leather_armor/forearms', 1045), + (12834, 12834, 'accessories/wearable_items/_exp06/chaos_armor/leather_armor/hands', 1045), + (12835, 12835, 'accessories/wearable_items/_exp06/chaos_armor/leather_armor/head', 1045), + (12836, 12836, 'accessories/wearable_items/_exp06/chaos_armor/leather_armor/head_chaos_epic', 1045), + (12837, 12837, 'accessories/wearable_items/_exp06/chaos_armor/leather_armor/legs', 1045), + (12838, 12838, 'accessories/wearable_items/_exp06/chaos_armor/leather_armor/legs_noskirt', 1045), + (12839, 12839, 'accessories/wearable_items/_exp06/chaos_armor/leather_armor/shoulders_epic_pauldrons', 1045), + (12840, 12840, 'accessories/wearable_items/_exp06/chaos_armor/leather_armor/shoulders_no_pauldrons', 1045), + (12841, 12841, 'accessories/wearable_items/_exp06/chaos_armor/leather_armor/snap_ons/head_chaos_helm', 1045), + (12842, 12842, 'accessories/wearable_items/_exp06/chaos_armor/leather_armor/snap_ons/chaos_pauldrons_left', 1045), + (12843, 12843, 'accessories/wearable_items/_exp06/chaos_armor/leather_armor/snap_ons/chaos_pauldrons_right', 1045), + (12844, 12844, 'accessories/wearable_items/_exp06/chaos_armor/robe_armor/feet', 1045), + (12845, 12845, 'accessories/wearable_items/_exp06/chaos_armor/robe_armor/hands', 1045), + (12846, 12846, 'accessories/wearable_items/_exp08/dragon_armor/robe_shadow/hands', 1096), + (12847, 12847, '_exp06/characters/tool_users/erudite_classic_el_arad/erudite_classic_el_arad', 1045), + (12848, 12848, 'accessories/wieldable_items/weapons/exp06/staff/exp06_2h_staff_el_arad', 1045), + (12849, 12849, 'accessories/wearable_items/cloak/exp06/cloak_battleground_symbol', 1045), + (12850, 12850, 'staticobjects/tcg/tcg_tapestry_crystalshards', 1045), + (12851, 12851, 'staticobjects/tcg/tcg_tapestry_master_assassin', 1045), + (12852, 12852, 'staticobjects/tcg/tcg_tapestry_runes', 1045), + (12853, 12853, 'staticobjects/tcg/tcg_painting43_krulkiel', 1045), + (12854, 12854, 'staticobjects/tcg/tcg_painting39_lordknight', 1045), + (12855, 12855, 'staticobjects/tcg/tcg_painting40_goddess', 1045), + (12856, 12856, 'staticobjects/tcg/tcg_painting41_beast', 1045), + (12857, 12857, 'staticobjects/tcg/tcg_painting42_lesson', 1045), + (12858, 12858, 'accessories/wearable_items/_exp06/chaos_armor/chain_armor/skirt', 1045), + (12859, 12859, 'accessories/wearable_items/_exp06/chaos_armor/chain_armor/chest', 1045), + (12860, 12860, 'accessories/wearable_items/_exp06/chaos_armor/chain_armor/feet', 1045), + (12861, 12861, 'accessories/wearable_items/_exp06/chaos_armor/chain_armor/forearms', 1045), + (12862, 12862, 'accessories/wearable_items/_exp06/chaos_armor/chain_armor/hands', 1045), + (12863, 12863, 'accessories/wearable_items/_exp06/chaos_armor/chain_armor/head', 1045), + (12864, 12864, 'accessories/wearable_items/_exp06/chaos_armor/chain_armor/head_chain_epic', 1045), + (12865, 12865, 'accessories/wearable_items/_exp06/chaos_armor/chain_armor/legs', 1045), + (12866, 12866, 'accessories/wearable_items/_exp06/chaos_armor/chain_armor/legs_noskirt', 1045), + (12867, 12867, 'accessories/wearable_items/_exp06/chaos_armor/chain_armor/shoulders_epic_pauldrons', 1045), + (12868, 12868, 'accessories/wearable_items/_exp06/chaos_armor/chain_armor/shoulders_no_pauldrons', 1045), + (12869, 12869, 'accessories/wearable_items/_exp06/chaos_armor/chain_armor/snap_ons/chaos_pauldrons_right', 1045), + (12870, 12870, 'accessories/wearable_items/_exp06/chaos_armor/chain_armor/snap_ons/chaos_pauldrons_left', 1045), + (12871, 12871, 'staticobjects/tcg/tcg_painting_lon9', 1045), + (12872, 12872, '_exp06/zones/objects/exp06_rgn_odus_north/barricade_long', 1045), + (12873, 12873, 'accessories/wearable_items/cloak/exp06/cloak_battleground_symbol_02', 1045), + (12874, 12874, 'staticobjects/battlegrounds/battleground_relic', 1045), + (12875, 12875, '_exp06/characters/tool_users/erudite_classic_male/erudite_classic_male_hover', 1045), + (12876, 12876, '_exp06/zones/objects/exp06_dun_vastydeep02/dragon_test_tube_intact_dpo', 1045), + (12877, 12877, '_exp06/zones/objects/exp06_dun_vastydeep02/dragon_test_tube_broken_dpo', 1045), + (12878, 12878, 'staticobjects/easels/djn_paintbucket01_orange', 1045), + (12879, 12879, 'staticobjects/easels/djn_paintbucket01_blue', 1045), + (12880, 12880, '_exp06/zones/objects/exp06_dun_vastydeep02/dragon_room_clear_tube', 1045), + (12881, 12881, '_exp06/zones/objects/plunderable_loot/eru_rug01_rolled', 1045), + (12882, 12882, 'staticobjects/guildhall/standard_flag_blue', 1045), + (12883, 12883, 'staticobjects/guildhall/standard_flag_green', 1045), + (12884, 12884, 'staticobjects/guildhall/standard_flag_orange', 1045), + (12885, 12885, 'staticobjects/guildhall/standard_flag_purple', 1045), + (12886, 12886, 'staticobjects/guildhall/standard_flag_red', 1045), + (12887, 12887, 'staticobjects/guildhall/standard_flag_white', 1045), + (12888, 12888, 'staticobjects/guildhall/standard_flag_yellow', 1045), + (12889, 12889, 'accessories/wearable_items/_exp06/holy_robe_of_the_underfoot/skirt', 1045), + (12890, 12890, 'accessories/wearable_items/_exp06/holy_robe_of_the_underfoot/chest', 1045), + (12891, 12891, 'accessories/wearable_items/_exp06/holy_robe_of_the_underfoot/feet', 1045), + (12892, 12892, 'accessories/wearable_items/_exp06/holy_robe_of_the_underfoot/hands', 1045), + (12893, 12893, 'accessories/wearable_items/_exp06/holy_robe_of_the_underfoot/head', 1045), + (12894, 12894, 'accessories/wearable_items/_exp08/dragon_armor/robe_shadow/head', 1096), + (12895, 12895, 'accessories/wearable_items/_exp06/holy_robe_of_the_underfoot/pants', 1045), + (12896, 12896, 'accessories/wearable_items/_exp08/dragon_armor/robe_shadow/head_collar', 1096), + (12897, 12897, 'accessories/wearable_items/_exp08/dragon_armor/robe_shadow/pants', 1096), + (12898, 12898, 'accessories/wearable_items/_exp08/dragon_armor/snapons/dragon_armor_shin_shadow_right', 1096), + (12899, 12899, 'accessories/wearable_items/_exp08/dragon_armor/snapons/dragon_armor_forearm_blue_left', 1096), + (12900, 12900, 'accessories/wearable_items/_exp08/dragon_armor/snapons/dragon_armor_forearm_blue_right', 1096), + (12901, 12901, 'accessories/wearable_items/_exp08/dragon_armor/snapons/dragon_armor_forearm_green_left', 1096), + (12902, 12902, 'accessories/wearable_items/_exp08/dragon_armor/snapons/dragon_armor_forearm_green_right', 1096), + (12903, 12903, 'accessories/wearable_items/_exp08/dragon_armor/snapons/dragon_armor_forearm_left', 1096), + (12904, 12904, 'accessories/wearable_items/_exp08/dragon_armor/snapons/dragon_armor_forearm_right', 1096), + (12905, 12905, 'accessories/wearable_items/_exp08/dragon_armor/snapons/dragon_armor_forearm_shadow_left', 1096), + (12906, 12906, 'accessories/wearable_items/_exp08/dragon_armor/snapons/dragon_armor_forearm_shadow_right', 1096), + (12907, 12907, 'accessories/wearable_items/_exp08/dragon_armor/snapons/dragon_armor_leather-chain_pauldron_bronzegreen_left', 1096), + (12908, 12908, 'accessories/wearable_items/_exp08/dragon_armor/snapons/dragon_armor_leather-chain_pauldron_bronzegreen_right', 1096), + (12909, 12909, 'accessories/wearable_items/_exp08/dragon_armor/snapons/dragon_armor_leather-chain_pauldron_bronzered_left', 1096), + (12910, 12910, 'accessories/wearable_items/_exp08/dragon_armor/snapons/dragon_armor_leather-chain_pauldron_bronzered_right', 1096), + (12911, 12911, 'accessories/wearable_items/_exp08/dragon_armor/snapons/dragon_armor_leather-chain_pauldron_effects_left', 1096), + (12912, 12912, 'accessories/wearable_items/_exp08/dragon_armor/snapons/dragon_armor_leather-chain_pauldron_effects_right', 1096), + (12913, 12913, 'accessories/wearable_items/_exp08/dragon_armor/snapons/dragon_armor_leather-chain_pauldron_goldivory_left', 1096), + (12914, 12914, 'accessories/wearable_items/_exp08/dragon_armor/snapons/dragon_armor_leather-chain_pauldron_goldivory_right', 1096), + (12915, 12915, 'accessories/wearable_items/_exp08/dragon_armor/snapons/dragon_armor_leather-chain_pauldron_ironblue_left', 1096), + (12916, 12916, 'accessories/wearable_items/_exp08/dragon_armor/snapons/dragon_armor_leather-chain_pauldron_ironblue_right', 1096), + (12917, 12917, 'accessories/wearable_items/_exp08/dragon_armor/snapons/dragon_armor_leather-chain_pauldron_ironshadow_left', 1096), + (12918, 12918, 'accessories/wearable_items/_exp08/dragon_armor/snapons/dragon_armor_leather-chain_pauldron_ironshadow_right', 1096), + (12919, 12919, 'accessories/wearable_items/_exp08/dragon_armor/snapons/dragon_armor_pauldron_upper_left_blue', 1096), + (12920, 12920, 'accessories/wearable_items/_exp08/dragon_armor/snapons/dragon_armor_pauldron_upper_left_green', 1096), + (12921, 12921, 'accessories/wearable_items/_exp08/dragon_armor/snapons/dragon_armor_pauldron_upper_left_red', 1096), + (12922, 12922, 'accessories/wearable_items/_exp08/dragon_armor/snapons/dragon_armor_pauldron_upper_left_shadow', 1096), + (12923, 12923, 'accessories/wearable_items/_exp08/dragon_armor/snapons/dragon_armor_pauldron_upper_right_blue', 1096), + (12924, 12924, 'accessories/wearable_items/_exp08/dragon_armor/snapons/dragon_armor_pauldron_upper_right_green', 1096), + (12925, 12925, 'accessories/wearable_items/_exp08/dragon_armor/snapons/dragon_armor_pauldron_upper_right_red', 1096), + (12926, 12926, 'accessories/wearable_items/_exp08/dragon_armor/snapons/dragon_armor_pauldron_upper_right_shadow', 1096), + (12927, 12927, 'accessories/wearable_items/_exp08/dragon_armor/snapons/dragon_armor_pauldrons_lower_blue_left', 1096), + (12928, 12928, 'accessories/wearable_items/_exp08/dragon_armor/snapons/dragon_armor_pauldrons_lower_blue_right', 1096), + (12929, 12929, 'accessories/wearable_items/_exp08/dragon_armor/snapons/dragon_armor_pauldrons_lower_green_left', 1096), + (12930, 12930, 'accessories/wearable_items/_exp08/dragon_armor/snapons/dragon_armor_pauldrons_lower_green_right', 1096), + (12931, 12931, 'accessories/wearable_items/_exp08/dragon_armor/snapons/dragon_armor_pauldrons_lower_left', 1096), + (12932, 12932, 'accessories/wearable_items/_exp08/dragon_armor/snapons/dragon_armor_pauldrons_lower_right', 1096), + (12933, 12933, 'accessories/wearable_items/_exp08/dragon_armor/snapons/dragon_armor_pauldrons_lower_shadow_left', 1096), + (12934, 12934, 'accessories/wearable_items/_exp08/dragon_armor/snapons/dragon_armor_pauldrons_lower_shadow_right', 1096), + (12935, 12935, 'accessories/wearable_items/_exp08/dragon_armor/snapons/dragon_armor_shin_blue_left', 1096), + (12936, 12936, 'accessories/wearable_items/_exp08/dragon_armor/snapons/dragon_armor_shin_blue_right', 1096), + (12937, 12937, 'accessories/wearable_items/_exp08/dragon_armor/snapons/dragon_armor_shin_green_left', 1096), + (12938, 12938, 'accessories/wearable_items/_exp08/dragon_armor/snapons/dragon_armor_shin_green_right', 1096), + (12939, 12939, 'accessories/wearable_items/_exp08/dragon_armor/snapons/dragon_armor_shin_left', 1096), + (12940, 12940, 'accessories/wearable_items/_exp08/dragon_armor/snapons/dragon_armor_shin_right', 1096), + (12941, 12941, 'accessories/wearable_items/_exp08/dragon_armor/snapons/dragon_armor_shin_shadow_left', 1096), + (12942, 12942, 'accessories/wearable_items/_exp08/dragon_armor/vanguard_blue/skirt', 1096), + (12943, 12943, 'accessories/wearable_items/_exp08/dragon_armor/vanguard_blue/chest', 1096), + (12944, 12944, 'accessories/wearable_items/_exp08/dragon_armor/vanguard_blue/feet', 1096), + (12945, 12945, 'accessories/wearable_items/_exp08/dragon_armor/vanguard_blue/forearms', 1096), + (12946, 12946, 'accessories/wearable_items/_exp08/dragon_armor/vanguard_blue/hands', 1096), + (12947, 12947, 'accessories/wearable_items/_exp08/dragon_armor/vanguard_blue/hands_epic', 1096), + (12948, 12948, 'accessories/wearable_items/_exp08/dragon_armor/vanguard_blue/head', 1096), + (12949, 12949, 'accessories/wearable_items/_exp08/dragon_armor/vanguard_blue/head_epic', 1096), + (12950, 12950, 'accessories/wearable_items/_exp08/dragon_armor/vanguard_blue/left', 1096), + (12951, 12951, 'accessories/wearable_items/_exp08/dragon_armor/vanguard_blue/legs', 1096), + (12952, 12952, 'accessories/wearable_items/_exp08/dragon_armor/vanguard_blue/legs_epic', 1096), + (12953, 12953, 'accessories/wearable_items/_exp08/dragon_armor/vanguard_blue/legs_noskirt', 1096), + (12954, 12954, 'accessories/wearable_items/_exp08/dragon_armor/vanguard_blue/right', 1096), + (12955, 12955, 'accessories/wearable_items/_exp08/dragon_armor/vanguard_blue/shoulders', 1096), + (12956, 12956, 'accessories/wearable_items/_exp08/dragon_armor/vanguard_blue/shoulders_epic', 1096), + (12957, 12957, 'accessories/wearable_items/_exp08/dragon_armor/vanguard_blue/shoulders_nopauldrons', 1096), + (12958, 12958, 'accessories/wearable_items/_exp08/dragon_armor/vanguard_green/skirt', 1096), + (12959, 12959, 'accessories/wearable_items/_exp08/dragon_armor/vanguard_green/chest', 1096), + (12960, 12960, 'accessories/wearable_items/_exp08/dragon_armor/vanguard_green/feet', 1096), + (12961, 12961, 'accessories/wearable_items/_exp08/dragon_armor/vanguard_green/forearms', 1096), + (12962, 12962, 'accessories/wearable_items/_exp08/dragon_armor/vanguard_green/hands', 1096), + (12963, 12963, 'accessories/wearable_items/_exp08/dragon_armor/vanguard_green/hands_epic', 1096), + (12964, 12964, 'accessories/wearable_items/_exp08/dragon_armor/vanguard_green/head', 1096), + (12965, 12965, 'accessories/wearable_items/_exp08/dragon_armor/vanguard_green/head_epic', 1096), + (12966, 12966, 'accessories/wearable_items/_exp08/dragon_armor/vanguard_green/left', 1096), + (12967, 12967, 'accessories/wearable_items/_exp08/dragon_armor/vanguard_green/legs', 1096), + (12968, 12968, 'accessories/wearable_items/_exp08/dragon_armor/vanguard_green/legs_epic', 1096), + (12969, 12969, 'accessories/wearable_items/_exp08/dragon_armor/vanguard_green/legs_noskirt', 1096), + (12970, 12970, 'accessories/wearable_items/_exp08/dragon_armor/vanguard_green/right', 1096), + (12971, 12971, 'accessories/wearable_items/_exp08/dragon_armor/vanguard_green/shoulders', 1096), + (12972, 12972, 'accessories/wearable_items/_exp08/dragon_armor/vanguard_green/shoulders_epic', 1096), + (12973, 12973, 'accessories/wearable_items/_exp08/dragon_armor/vanguard_green/shoulders_nopauldrons', 1096), + (12974, 12974, 'accessories/wearable_items/_exp08/dragon_armor/vanguard_red/skirt', 1096), + (12975, 12975, 'accessories/wearable_items/_exp08/dragon_armor/vanguard_red/chest', 1096), + (12976, 12976, 'accessories/wearable_items/_exp08/dragon_armor/vanguard_red/feet', 1096), + (12977, 12977, 'accessories/wearable_items/_exp08/dragon_armor/vanguard_red/forearms', 1096), + (12978, 12978, 'accessories/wearable_items/_exp08/dragon_armor/vanguard_red/hands', 1096), + (12979, 12979, 'accessories/wearable_items/_exp08/dragon_armor/vanguard_red/hands_epic', 1096), + (12980, 12980, 'accessories/wearable_items/_exp08/dragon_armor/vanguard_red/head', 1096), + (12981, 12981, 'accessories/wearable_items/_exp08/dragon_armor/vanguard_red/head_epic', 1096), + (12982, 12982, 'accessories/wearable_items/_exp08/dragon_armor/vanguard_red/left', 1096), + (12983, 12983, 'accessories/wearable_items/_exp08/dragon_armor/vanguard_red/legs', 1096), + (12984, 12984, 'accessories/wearable_items/_exp08/dragon_armor/vanguard_red/legs_epic', 1096), + (12985, 12985, 'accessories/wearable_items/_exp08/dragon_armor/vanguard_red/legs_noskirt', 1096), + (12986, 12986, 'staticobjects/battlegrounds/battleground_relic_force_bars', 1045), + (12987, 12987, 'creatures/mounts/warg_mount/warg_armor04', 1045), + (12988, 12988, 'creatures/mounts/warg_mount/warg_armor04_twotoned', 1045), + (12989, 12989, 'creatures/mounts/warg_mount/warg_armor04_albino', 1045), + (12990, 12990, 'creatures/mounts/warg_mount/warg_armor04_spotted', 1045), + (12991, 12991, 'creatures/mounts/flying_disc/flying_disc_battleground_red', 1045), + (12992, 12992, 'creatures/mounts/flying_disc/flying_disc_battleground_blue', 1045), + (12993, 12993, 'creatures/monsters/clockwork_steel_gazer_with_light', 1045), + (12994, 12994, 'accessories/wearable_items/_exp06/holy_robe_of_the_underfoot/head_collar', 1045), + (12995, 12995, 'staticobjects/cages/dpo_qey_birdcage002_parrot', 1045), + (12996, 12996, 'staticobjects/battlegrounds/battleground_ctf_base01_force_bars', 1045), + (12997, 12997, 'staticobjects/battlegrounds/battleground_ctf_base02_force_bars', 1045), + (12998, 12998, 'staticobjects/bookcases/vastydeep_library01_flatstacks01_shortwide', 1045), + (12999, 12999, 'staticobjects/bookcases/vastydeep_library01_flatstacks01_tall', 1045), + (13000, 13000, 'accessories/wieldable_items/weapons/exp06/staff/exp06_2h_staff_tallonite_glow', 1045), + (13001, 13001, 'accessories/wieldable_items/weapons/exp06/staff/exp06_2h_staff_tallonite', 1045), + (13002, 13002, 'staticobjects/bookcases/vastydeep_library01_flatstacks01_2rows', 1045), + (13003, 13003, 'staticobjects/bookcases/vastydeep_library01_flatstacks01_2rowswide', 1045), + (13004, 13004, 'staticobjects/battlegrounds/battleground_smuggler_den_base01_force_bars', 1045), + (13005, 13005, 'staticobjects/battlegrounds/battleground_smuggler_den_base02_force_bars', 1045), + (13006, 13006, 'staticobjects/pictures/exp06_citymerchant_venekor', 1045), + (13007, 13007, 'staticobjects/pictures/exp06_carpenter_jarsath', 1045), + (13008, 13008, 'staticobjects/pictures/exp06_carpenter_rivervalebar', 1045), + (13009, 13009, 'staticobjects/pictures/exp06_carpenter_tinkerfest', 1045), + (13010, 13010, 'staticobjects/pictures/exp06_citymerchant_barrensky', 1045), + (13011, 13011, 'staticobjects/pictures/exp06_citymerchant_kurns', 1045), + (13012, 13012, 'staticobjects/pictures/exp06_citymerchant_rime', 1045), + (13013, 13013, 'accessories/wieldable_items/weapons/exp06/staff/erudite_rune_staff', 1045), + (13014, 13014, 'accessories/wieldable_items/weapons/exp06/1h_sword/exp06_1h_sword_tallonite_katana_slice', 1045), + (13015, 13015, 'accessories/wieldable_items/weapons/exp06/1h_sword/exp06_1h_sword_tallonite_katana_parry', 1045), + (13016, 13016, 'accessories/wearable_items/_exp06/chaos_armor_black/chain_armor/snap_ons/chaos_pauldrons_right', 1045), + (13017, 13017, 'accessories/wearable_items/_exp06/chaos_armor_black/chain_armor/snap_ons/chaos_pauldrons_left', 1045), + (13018, 13018, 'accessories/wearable_items/_exp06/chaos_armor_black/chain_armor/skirt', 1045), + (13019, 13019, 'accessories/wearable_items/_exp06/chaos_armor_black/chain_armor/chest', 1045), + (13020, 13020, 'accessories/wearable_items/_exp06/chaos_armor_black/chain_armor/feet', 1045), + (13021, 13021, 'accessories/wearable_items/_exp06/chaos_armor_black/chain_armor/forearms', 1045), + (13022, 13022, 'accessories/wearable_items/_exp06/chaos_armor_black/chain_armor/hands', 1045), + (13023, 13023, 'accessories/wearable_items/_exp06/chaos_armor_black/chain_armor/head', 1045), + (13024, 13024, 'accessories/wearable_items/_exp06/chaos_armor_black/chain_armor/head_chain_epic', 1045), + (13025, 13025, 'accessories/wearable_items/_exp06/chaos_armor_black/chain_armor/legs', 1045), + (13026, 13026, 'accessories/wearable_items/_exp06/chaos_armor_black/chain_armor/legs_noskirt', 1045), + (13027, 13027, 'accessories/wearable_items/_exp06/chaos_armor_black/chain_armor/shoulders', 1045), + (13028, 13028, 'accessories/wearable_items/_exp06/chaos_armor_black/chain_armor/shoulders_chaos_epic', 1045), + (13029, 13029, 'accessories/wearable_items/_exp06/chaos_armor_black/leather_armor/chest', 1045), + (13030, 13030, 'accessories/wearable_items/_exp06/chaos_armor_black/leather_armor/snap_ons/head_chaos_helm', 1045), + (13031, 13031, 'accessories/wearable_items/_exp06/chaos_armor_black/leather_armor/snap_ons/chaos_pauldrons_left', 1045), + (13032, 13032, 'accessories/wearable_items/_exp06/chaos_armor_black/leather_armor/snap_ons/chaos_pauldrons_right', 1045), + (13033, 13033, 'accessories/wearable_items/_exp06/chaos_armor_black/leather_armor/skirt', 1045), + (13034, 13034, 'accessories/wearable_items/_exp06/chaos_armor_black/leather_armor/feet', 1045), + (13035, 13035, 'accessories/wearable_items/_exp06/chaos_armor_black/leather_armor/forearms', 1045), + (13036, 13036, 'accessories/wearable_items/_exp06/chaos_armor_black/leather_armor/hands', 1045), + (13037, 13037, 'accessories/wearable_items/_exp06/chaos_armor_black/leather_armor/head', 1045), + (13038, 13038, 'accessories/wearable_items/_exp06/chaos_armor_black/leather_armor/head_chaos_epic', 1045), + (13039, 13039, 'accessories/wearable_items/_exp06/chaos_armor_black/leather_armor/legs', 1045), + (13040, 13040, 'accessories/wearable_items/_exp06/chaos_armor_black/leather_armor/legs_noskirt', 1045), + (13041, 13041, 'accessories/wearable_items/_exp06/chaos_armor_black/leather_armor/shoulders_epic_pauldrons', 1045), + (13042, 13042, 'accessories/wearable_items/_exp06/chaos_armor_black/leather_armor/shoulders_no_pauldrons', 1045), + (13043, 13043, 'accessories/wearable_items/_exp06/chaos_armor_black/robe_armor/snap_ons/chaos_pauldrons_upper_right', 1045), + (13044, 13044, 'accessories/wearable_items/_exp06/chaos_armor_black/robe_armor/snap_ons/chaos_pauldrons_lower_left', 1045), + (13045, 13045, 'accessories/wearable_items/_exp06/chaos_armor_black/robe_armor/snap_ons/chaos_pauldrons_lower_right', 1045), + (13046, 13046, 'accessories/wearable_items/_exp06/chaos_armor_black/robe_armor/snap_ons/chaos_pauldrons_upper_left', 1045), + (13047, 13047, 'accessories/wearable_items/_exp06/chaos_armor_black/robe_armor/skirt', 1045), + (13048, 13048, 'accessories/wearable_items/_exp06/chaos_armor_black/robe_armor/chest', 1045), + (13049, 13049, 'accessories/wearable_items/_exp06/chaos_armor_black/robe_armor/chest_chaos_pauldrons', 1045), + (13050, 13050, 'accessories/wearable_items/_exp06/chaos_armor_black/robe_armor/feet', 1045), + (13051, 13051, 'accessories/wearable_items/_exp06/chaos_armor_black/robe_armor/hands', 1045), + (13052, 13052, 'accessories/wearable_items/_exp06/chaos_armor_black/robe_armor/head', 1045), + (13053, 13053, 'accessories/wearable_items/_exp06/chaos_armor_black/robe_armor/head_chaos_helm', 1045), + (13054, 13054, 'accessories/wearable_items/_exp06/chaos_armor_black/robe_armor/head_collar', 1045), + (13055, 13055, 'accessories/wearable_items/_exp06/chaos_armor_black/robe_armor/pants', 1045), + (13056, 13056, 'accessories/wearable_items/_exp06/chaos_armor_black/vanguard_armor/snap_ons/chaos_shin_right', 1045), + (13057, 13057, 'accessories/wearable_items/_exp06/chaos_armor_black/vanguard_armor/snap_ons/chaos_forearm_left', 1045), + (13058, 13058, 'accessories/wearable_items/_exp06/chaos_armor_black/vanguard_armor/snap_ons/chaos_forearm_right', 1045), + (13059, 13059, 'accessories/wearable_items/_exp06/chaos_armor_black/vanguard_armor/snap_ons/chaos_pauldrons_lower_left', 1045), + (13060, 13060, 'accessories/wearable_items/_exp06/chaos_armor_black/vanguard_armor/snap_ons/chaos_pauldrons_lower_right', 1045), + (13061, 13061, 'accessories/wearable_items/_exp06/chaos_armor_black/vanguard_armor/snap_ons/chaos_pauldrons_upper_left', 1045), + (13062, 13062, 'accessories/wearable_items/_exp06/chaos_armor_black/vanguard_armor/snap_ons/chaos_pauldrons_upper_right', 1045), + (13063, 13063, 'accessories/wearable_items/_exp06/chaos_armor_black/vanguard_armor/snap_ons/chaos_shin_left', 1045), + (13064, 13064, 'accessories/wearable_items/_exp06/chaos_armor_black/vanguard_armor/skirt', 1045), + (13065, 13065, 'accessories/wearable_items/_exp06/chaos_armor_black/vanguard_armor/chest', 1045), + (13066, 13066, 'accessories/wearable_items/_exp06/chaos_armor_black/vanguard_armor/feet', 1045), + (13067, 13067, 'accessories/wearable_items/_exp06/chaos_armor_black/vanguard_armor/forearms', 1045), + (13068, 13068, 'accessories/wearable_items/_exp06/chaos_armor_black/vanguard_armor/hands', 1045), + (13069, 13069, 'accessories/wearable_items/_exp06/chaos_armor_black/vanguard_armor/hands_chaos_gauntlets', 1045), + (13070, 13070, 'accessories/wearable_items/_exp06/chaos_armor_black/vanguard_armor/head', 1045), + (13071, 13071, 'accessories/wearable_items/_exp06/chaos_armor_black/vanguard_armor/head_chaos_helm', 1045), + (13072, 13072, 'accessories/wearable_items/_exp06/chaos_armor_black/vanguard_armor/legs', 1045), + (13073, 13073, 'accessories/wearable_items/_exp06/chaos_armor_black/vanguard_armor/legs_chaos_shins', 1045), + (13074, 13074, 'accessories/wearable_items/_exp06/chaos_armor_black/vanguard_armor/legs_noskirt', 1045), + (13075, 13075, 'accessories/wearable_items/_exp06/chaos_armor_black/vanguard_armor/right', 1045), + (13076, 13076, 'accessories/wearable_items/_exp06/chaos_armor_black/vanguard_armor/shoulders', 1045), + (13077, 13077, 'accessories/wearable_items/_exp06/chaos_armor_black/vanguard_armor/shoulders_chaos_armor_all', 1045), + (13078, 13078, 'accessories/wearable_items/_exp06/chaos_armor_black/vanguard_armor/shoulders_nopauldrons', 1045), + (13079, 13079, 'staticobjects/_exp06/thehole_platcol_01', 1045), + (13080, 13080, 'accessories/wieldable_items/weapons/exp06/2h_crush/exp06_2h_korshahammer', 1045), + (13081, 13081, '_exp06/zones/objects/exp06_dun_vastydeep02/exp06_dun_vastydeep02_secretroom01_panel01', 1045), + (13082, 13082, 'accessories/wearable_items/_exp06/raven_robe/raven_shoulder_right', 1045), + (13083, 13083, 'accessories/wearable_items/_exp06/raven_robe/chest_epic_pauldrons', 1045), + (13084, 13084, 'accessories/wearable_items/_exp06/raven_robe/feet', 1045), + (13085, 13085, 'accessories/wearable_items/_exp06/raven_robe/hands', 1045), + (13086, 13086, 'accessories/wearable_items/_exp06/raven_robe/head_epic_hood', 1045), + (13087, 13087, 'accessories/wearable_items/_exp06/raven_robe/raven_shoulder_left', 1045), + (13088, 13088, 'accessories/wearable_items/_exp06/raven_robe/snap_ons/head_raven_helm', 1045), + (13089, 13089, 'accessories/wieldable_items/weapons/exp06/1h_sword/exp06_1h_sword_akinakes', 1045), + (13090, 13090, 'accessories/wieldable_items/weapons/exp06/1h_pierce/exp06_1hp_serpent_tongue', 1045), + (13091, 13091, 'staticobjects/battlegrounds/dpo_bg_ctf_statue_sword_houseitem01', 1045), + (13092, 13092, 'staticobjects/battlegrounds/dpo_battleground_flag01_blue', 1045), + (13093, 13093, 'staticobjects/battlegrounds/dpo_battleground_flag01_brown', 1045), + (13094, 13094, 'staticobjects/battlegrounds/dpo_battleground_flag01_green', 1045), + (13095, 13095, 'staticobjects/battlegrounds/dpo_battleground_flag01_orange', 1045), + (13096, 13096, 'staticobjects/battlegrounds/dpo_battleground_flag01_pink', 1045), + (13097, 13097, 'staticobjects/battlegrounds/dpo_battleground_flag01_purple', 1045), + (13098, 13098, 'staticobjects/battlegrounds/dpo_battleground_flag01_red', 1045), + (13099, 13099, 'staticobjects/battlegrounds/dpo_battleground_flag01_white', 1045), + (13100, 13100, 'staticobjects/battlegrounds/dpo_battleground_flag01_yellow', 1045), + (13101, 13101, 'staticobjects/soe_wallet/battlegrounds_relic01_murderballpedestal01_dpo', 1045), + (13102, 13102, 'staticobjects/soe_wallet/battlegrounds_relic01_console01_dpo', 1045), + (13103, 13103, 'staticobjects/battlegrounds/battlegrounds_relic01_console02_dpo', 1045), + (13104, 13104, 'staticobjects/soe_wallet/battlegrounds_relic01_crane01_dpo', 1045), + (13105, 13105, 'staticobjects/battlegrounds/battlegrounds_relic01_crane02_dpo', 1045), + (13106, 13106, 'staticobjects/brazier/erudite_totem01', 1045), + (13107, 13107, '_exp06/characters/monsters/golem_odus/golem_odus', 1045), + (13108, 13108, 'accessories/wearable_items/cloak/exp06/cloak_bg_chaos_red', 1045), + (13109, 13109, 'accessories/wearable_items/cloak/exp06/cloak_bg_chaos', 1045), + (13110, 13110, 'accessories/wearable_items/cloak/exp06/cloak_bg_chaos_gold', 1045), + (13111, 13111, 'staticobjects/soe_wallet/battleground_ctf_wallbrazier01_blue', 1045), + (13112, 13112, 'staticobjects/soe_wallet/battleground_ctf_wallbrazier01_red', 1045), + (13113, 13113, 'staticobjects/soe_wallet/battleground_nodes_coffinornament01_blue', 1045), + (13114, 13114, 'staticobjects/soe_wallet/battleground_nodes_coffinornament01_red', 1045), + (13115, 13115, 'staticobjects/guildhall/trophies/floor_vuulan_head', 1045), + (13116, 13116, 'staticobjects/guildhall/trophies/floor_perah_head', 1045), + (13117, 13117, 'staticobjects/guildhall/trophies/floor_seadragon_head', 1045), + (13118, 13118, 'staticobjects/guildhall/trophies/floor_theer_sword_evil', 1045), + (13119, 13119, 'staticobjects/guildhall/trophies/floor_theer_sword_good', 1045), + (13120, 13120, 'staticobjects/guildhall/trophies/floor_toxx_head', 1045), + (13121, 13121, 'staticobjects/weapons/dpo_weaponsmith_tool', 1045), + (13122, 13122, 'staticobjects/weapons/dpo_alchemist_tool', 1045), + (13123, 13123, 'staticobjects/weapons/dpo_armorer_tool', 1045), + (13124, 13124, 'staticobjects/weapons/dpo_carpenter_tool', 1045), + (13125, 13125, 'staticobjects/weapons/dpo_jeweler_tool', 1045), + (13126, 13126, 'staticobjects/weapons/dpo_provisioner_tool', 1045), + (13127, 13127, 'staticobjects/weapons/dpo_sage_tool', 1045), + (13128, 13128, 'staticobjects/weapons/dpo_tailor_tool', 1045), + (13129, 13129, 'staticobjects/_exp06/paineel_graves', 1045), + (13130, 13130, 'accessories/wieldable_items/weapons/exp06/staff/exp06_2h_silver_staff', 1045), + (13131, 13131, 'accessories/wearable_items/_exp06/order_of_nature_robe/chest_epic_pauldrons', 1045), + (13132, 13132, 'accessories/wearable_items/_exp06/order_of_nature_robe/order_of_nature_pauldron_left', 1045), + (13133, 13133, 'accessories/wearable_items/_exp06/order_of_nature_robe/order_of_nature_pauldron_right', 1045), + (13134, 13134, 'creatures/monsters/floating_book', 1045), + (13135, 13135, 'accessories/wieldable_items/shields/exp06/crystal_star_shield_fx', 1045), + (13136, 13136, 'accessories/wieldable_items/soga_weapons/priest/the_holy_spirit_fx', 1045), + (13137, 13137, 'accessories/wieldable_items/soga_weapons/priest/massive_hammer_fx', 1045), + (13138, 13138, 'accessories/wieldable_items/weapons/dagger/embalming_blade/embalming_blade_plain_fx', 1045), + (13139, 13139, 'accessories/wieldable_items/weapons/dagger/jambiya/jambiya_plain_fx', 1045), + (13140, 13140, 'accessories/wieldable_items/weapons/exp04/1h_pierce/exp04_1hp_flame_dagger_fx', 1045), + (13141, 13141, 'accessories/wieldable_items/weapons/exp04/1h_pierce/exp04_1hp_flame_dagger_rune_fx', 1045), + (13142, 13142, 'accessories/wieldable_items/weapons/exp04/1h_pierce/exp04_1hp_dragonhilt_dagger_fire', 1045), + (13143, 13143, 'accessories/wieldable_items/weapons/exp04/1h_pierce/exp04_1hp_dual_bladed_stiletto_fx', 1045), + (13144, 13144, 'accessories/wieldable_items/weapons/exp05/exp05_bow_guk_bow_fx', 1045), + (13145, 13145, 'accessories/wieldable_items/weapons/exp05/exp05_korsha_longbow_fx', 1045), + (13146, 13146, 'accessories/wieldable_items/weapons/exp06/1h_sword/exp06_1h_sword_tangler_fx', 1045), + (13147, 13147, 'accessories/wieldable_items/weapons/exp06/1h_sword/exp06_1h_axe_emerald_ripper_fx', 1045), + (13148, 13148, 'accessories/wieldable_items/weapons/exp06/1h_sword/exp06_1h_sword_crystal_blade_of_chaos_fx', 1045), + (13149, 13149, 'accessories/wieldable_items/weapons/exp06/1h_sword/exp06_1h_sword_soulleach_fx', 1045), + (13150, 13150, 'accessories/wieldable_items/weapons/exp06/1h_sword/exp06_1h_sword_spirit_of_the_forest_fx', 1045), + (13151, 13151, 'accessories/wieldable_items/weapons/exp04/fist/exp04_fist_dull_ulak_fx', 1045), + (13152, 13152, 'accessories/wieldable_items/weapons/rapier/epee/epee001_runic_fx', 1045), + (13153, 13153, 'accessories/wieldable_items/weapons/talisman/censer/censer001_runic_lightfx', 1045), + (13154, 13154, 'accessories/wieldable_items/weapons/staff/escrima/escrima002_ornate_fx', 1045), + (13155, 13155, '_exp06/zones/objects/exp06_dun_erudin_palace/good_theer_sword_placed', 1045), + (13156, 13156, '_exp06/zones/objects/exp06_dun_erudin_palace/evil_theer_sword_placed', 1045), + (13157, 13157, 'staticobjects/_exp06/thehole_breakable_wall', 1045), + (13158, 13158, 'accessories/wieldable_items/weapons/exp06/1h_crush/exp06_1h_crush_candlestick', 1045), + (13159, 13159, 'accessories/wieldable_items/weapons/exp06/1h_pierce/exp06_1hp_erudin_dagger', 1045), + (13160, 13160, 'accessories/wieldable_items/weapons/exp06/staff/exp06_2h_staff_erudin', 1045), + (13161, 13161, 'accessories/wearable_items/_exp06/dragon_vanguard/skirt', 1045), + (13162, 13162, 'accessories/wearable_items/_exp06/dragon_vanguard/chest', 1045), + (13163, 13163, 'accessories/wearable_items/_exp06/dragon_vanguard/dragon_pauldrons_left', 1045), + (13164, 13164, 'accessories/wearable_items/_exp06/dragon_vanguard/dragon_pauldrons_right', 1045), + (13165, 13165, 'accessories/wearable_items/_exp06/dragon_vanguard/feet', 1045), + (13166, 13166, 'accessories/wearable_items/_exp06/dragon_vanguard/forearms', 1045), + (13167, 13167, 'accessories/wearable_items/_exp06/dragon_vanguard/hands', 1045), + (13168, 13168, 'accessories/wearable_items/_exp06/dragon_vanguard/head', 1045), + (13169, 13169, 'accessories/wearable_items/_exp06/dragon_vanguard/head_dragon_helm', 1045), + (13170, 13170, 'accessories/wearable_items/_exp06/dragon_vanguard/legs', 1045), + (13171, 13171, 'accessories/wearable_items/_exp06/dragon_vanguard/legs_dragon_snapons', 1045), + (13172, 13172, 'accessories/wearable_items/_exp06/dragon_vanguard/legs_noskirt', 1045), + (13173, 13173, 'accessories/wearable_items/_exp06/dragon_vanguard/right', 1045), + (13174, 13174, 'accessories/wearable_items/_exp06/dragon_vanguard/shoulders', 1045), + (13175, 13175, 'accessories/wearable_items/_exp06/dragon_vanguard/shoulders_dragon_pauldron', 1045), + (13176, 13176, 'accessories/wearable_items/_exp06/dragon_vanguard/shoulders_nopauldrons', 1045), + (13177, 13177, 'accessories/wearable_items/_exp06/dragon_chain/dragon_pauldron_left', 1045), + (13178, 13178, 'accessories/wearable_items/_exp06/dragon_chain/dragon_pauldron_right', 1045), + (13179, 13179, 'accessories/wearable_items/_exp06/dragon_chain/head_dragon_helm', 1045), + (13180, 13180, 'accessories/wearable_items/_exp06/dragon_leather/shoulders_pauldrons', 1045), + (13181, 13181, 'accessories/wearable_items/_exp06/dragon_robe/chest_pauldrons', 1045), + (13182, 13182, 'accessories/wearable_items/_exp06/dragon_robe/head_dragon_hood', 1045), + (13183, 13183, 'staticobjects/_exp02/bonemire_houseitem_dpo', 1045), + (13184, 13184, 'accessories/wieldable_items/weapons/exp06/1h_crush/exp06_1h_crush_erudin_library_wrench', 1045), + (13185, 13185, 'accessories/wieldable_items/weapons/exp06/1h_crush/exp06_1h_crush_erudin_library_wand', 1045), + (13186, 13186, 'accessories/wearable_items/_exp06/dragon_vanguard/snap_ons/dragon_shin_right', 1045), + (13187, 13187, 'accessories/wearable_items/_exp06/dragon_vanguard/snap_ons/dragon_forearm_left', 1045), + (13188, 13188, 'accessories/wearable_items/_exp06/dragon_vanguard/snap_ons/dragon_forearm_right', 1045), + (13189, 13189, 'accessories/wearable_items/_exp06/dragon_vanguard/snap_ons/dragon_pauldrons_lower_left', 1045), + (13190, 13190, 'accessories/wearable_items/_exp06/dragon_vanguard/snap_ons/dragon_pauldrons_lower_right', 1045), + (13191, 13191, 'accessories/wearable_items/_exp06/dragon_vanguard/snap_ons/dragon_shin_left', 1045), + (13192, 13192, 'accessories/wieldable_items/weapons/exp06/bow/exp06_2h_tallonite_longbow', 1045), + (13193, 13193, 'accessories/wieldable_items/weapons/exp06/bow/exp06_tallonite_longbow', 1045), + (13194, 13194, 'accessories/wearable_items/snapons/backpacks/backpack_brewmeister_swivel/backpack_brewmeister_swivel_mug', 1045), + (13195, 13195, 'accessories/wearable_items/snapons/backpacks/backpack_brewmeister_swivel/backpack_brewmeister_swivel', 1045), + (13196, 13196, 'accessories/wearable_items/snapons/backpacks/backpack_brewmeister_swivel/backpack_brewmeister_swivel_barrel', 1045), + (13197, 13197, 'accessories/wearable_items/snapons/backpacks/backpack_brewmeister_swivel/backpack_brewmeister_swivel_chalice', 1045), + (13198, 13198, 'accessories/wearable_items/snapons/backpacks/backpack_brewmeister_swivel/backpack_brewmeister_swivel_cup', 1045), + (13199, 13199, 'accessories/wearable_items/_exp07/ice_armor/chain/skirt', 1045), + (13200, 13200, 'accessories/wearable_items/_exp07/ice_armor/chain/chest', 1045), + (13201, 13201, 'accessories/wearable_items/_exp07/ice_armor/chain/feet', 1045), + (13202, 13202, 'accessories/wearable_items/_exp07/ice_armor/chain/forearms', 1045), + (13203, 13203, 'accessories/wearable_items/_exp07/ice_armor/chain/hands', 1045), + (13204, 13204, 'accessories/wearable_items/_exp07/ice_armor/chain/head', 1045), + (13205, 13205, 'accessories/wearable_items/_exp07/ice_armor/chain/legs', 1045), + (13206, 13206, 'accessories/wearable_items/_exp07/ice_armor/chain/legs_noskirt', 1045), + (13207, 13207, 'accessories/wearable_items/_exp07/ice_armor/chain/shoulders', 1045), + (13208, 13208, 'accessories/wearable_items/_exp07/ice_armor/chain/shoulders_pauldrons', 1045), + (13209, 13209, '_exp06/characters/tool_users/snow_orc/snow_orc_base', 1045), + (13210, 13210, 'accessories/npc_wearables/snow_orc/shoulders_common_armor', 1045), + (13211, 13211, 'accessories/npc_wearables/snow_orc/chest_common_armor', 1045), + (13212, 13212, 'accessories/npc_wearables/snow_orc/chest_heavy_armor', 1045), + (13213, 13213, 'accessories/npc_wearables/snow_orc/chest_hunter_armor', 1045), + (13214, 13214, 'accessories/npc_wearables/snow_orc/chest_hunter_armor_no_shoulders', 1045), + (13215, 13215, 'accessories/npc_wearables/snow_orc/feet_common_armor', 1045), + (13216, 13216, 'accessories/npc_wearables/snow_orc/feet_heavy_armor', 1045), + (13217, 13217, 'accessories/npc_wearables/snow_orc/feet_hunter_armor', 1045), + (13218, 13218, 'accessories/npc_wearables/snow_orc/forearms_heavy_armor_both', 1045), + (13219, 13219, 'accessories/npc_wearables/snow_orc/forearms_hunter_armor_both', 1045), + (13220, 13220, 'accessories/npc_wearables/snow_orc/hands_common_armor', 1045), + (13221, 13221, 'accessories/npc_wearables/snow_orc/head_common_armor', 1045), + (13222, 13222, 'accessories/npc_wearables/snow_orc/head_heavy_armor', 1045), + (13223, 13223, 'accessories/npc_wearables/snow_orc/head_hunter_armor', 1045), + (13224, 13224, 'accessories/npc_wearables/snow_orc/legs_common_armor', 1045), + (13225, 13225, 'accessories/npc_wearables/snow_orc/legs_heavy_armor', 1045), + (13226, 13226, 'staticobjects/liveevent/cityfestivals/halas_cup_03', 1045), + (13227, 13227, 'staticobjects/tableware/hal_cup_04', 1045), + (13228, 13228, 'staticobjects/liveevent/cityfestivals/halas_coldain_bench_02', 1045), + (13229, 13229, 'staticobjects/liveevent/cityfestivals/halas_barbarian_anvil', 1045), + (13230, 13230, 'staticobjects/liveevent/cityfestivals/halas_barbarian_bar_01', 1045), + (13231, 13231, 'staticobjects/liveevent/cityfestivals/halas_barbarian_bar_02', 1045), + (13232, 13232, 'staticobjects/crates/halas_crate_04', 1045), + (13233, 13233, 'staticobjects/counters/halas_barbarian_counter_02', 1045), + (13234, 13234, 'staticobjects/liveevent/cityfestivals/halas_barbarian_stool_01', 1045), + (13235, 13235, 'staticobjects/liveevent/cityfestivals/halas_barbarian_table_01', 1045), + (13236, 13236, 'staticobjects/soe_wallet/halas_barbarian_bar_table_02', 1045), + (13237, 13237, 'staticobjects/liveevent/cityfestivals/halas_forge_02', 1045), + (13238, 13238, 'staticobjects/liveevent/cityfestivals/halas_forge_01', 1045), + (13239, 13239, 'staticobjects/liveevent/cityfestivals/halas_anvil_01', 1045), + (13240, 13240, 'staticobjects/liveevent/cityfestivals/halas_floortile_ice', 1045), + (13241, 13241, 'staticobjects/liveevent/cityfestivals/dpo_wallmailbox_halas', 1045), + (13242, 13242, 'staticobjects/liveevent/cityfestivals/dpo_gf_kel_int_divider_wall01_halas', 1045), + (13243, 13243, 'staticobjects/liveevent/cityfestivals/halas_mirror', 1045), + (13244, 13244, 'staticobjects/liveevent/cityfestivals/halas_largecolumn', 1045), + (13245, 13245, 'staticobjects/liveevent/cityfestivals/halas_displaycounter', 1045), + (13246, 13246, 'staticobjects/liveevent/cityfestivals/halas_table_pedestal', 1045), + (13247, 13247, 'staticobjects/liveevent/cityfestivals/halas_table_03', 1045), + (13248, 13248, 'staticobjects/liveevent/cityfestivals/halas_coldain_torch_01', 1045), + (13249, 13249, 'staticobjects/liveevent/cityfestivals/halas_chair_05', 1045), + (13250, 13250, 'staticobjects/liveevent/cityfestivals/halas_chair_04', 1045), + (13251, 13251, 'accessories/wearable_items/_exp07/ice_armor/leather/skirt', 1045), + (13252, 13252, 'accessories/wearable_items/_exp07/ice_armor/leather/chest', 1045), + (13253, 13253, 'accessories/wearable_items/_exp07/ice_armor/leather/feet', 1045), + (13254, 13254, 'accessories/wearable_items/_exp07/ice_armor/leather/forearms', 1045), + (13255, 13255, 'accessories/wearable_items/_exp07/ice_armor/leather/hands', 1045), + (13256, 13256, 'accessories/wearable_items/_exp07/ice_armor/leather/head', 1045), + (13257, 13257, 'accessories/wearable_items/_exp07/ice_armor/leather/legs', 1045), + (13258, 13258, 'accessories/wearable_items/_exp07/ice_armor/leather/legs_noskirt', 1045), + (13259, 13259, 'accessories/wearable_items/_exp07/ice_armor/leather/shoulders', 1045), + (13260, 13260, 'accessories/wearable_items/_exp07/ice_armor/leather/shoulders_pauldrons', 1045), + (13261, 13261, 'accessories/wearable_items/snapons/backpacks/backpack_adventurer_swivel/backpack_adventurer_swivel_spikes', 1045), + (13262, 13262, 'accessories/wearable_items/snapons/backpacks/backpack_adventurer_swivel/backpack_adventurer_swivel', 1045), + (13263, 13263, 'accessories/wearable_items/snapons/backpacks/backpack_adventurer_swivel/backpack_adventurer_swivel_jug', 1045), + (13264, 13264, 'accessories/wearable_items/snapons/backpacks/backpack_adventurer_swivel/backpack_adventurer_swivel_lock', 1045), + (13265, 13265, 'accessories/wearable_items/snapons/backpacks/backpack_adventurer_swivel/backpack_adventurer_swivel_mallet', 1045), + (13266, 13266, 'accessories/wearable_items/snapons/backpacks/backpack_adventurer_swivel/backpack_adventurer_swivel_rope', 1045), + (13267, 13267, 'accessories/wearable_items/snapons/backpacks/backpack_provisioner_swivel/backpack_provisioner_swivel_sauce_pan', 1045), + (13268, 13268, 'accessories/wearable_items/snapons/backpacks/backpack_provisioner_swivel/backpack_provisioner_swivel', 1045), + (13269, 13269, 'accessories/wearable_items/snapons/backpacks/backpack_provisioner_swivel/backpack_provisioner_swivel_bread_loaf', 1045), + (13270, 13270, 'accessories/wearable_items/snapons/backpacks/backpack_provisioner_swivel/backpack_provisioner_swivel_coffee_pot', 1045), + (13271, 13271, 'accessories/wearable_items/snapons/backpacks/backpack_provisioner_swivel/backpack_provisioner_swivel_cooking_pot', 1045), + (13272, 13272, 'accessories/wearable_items/snapons/backpacks/backpack_provisioner_swivel/backpack_provisioner_swivel_rolling_pin', 1045), + (13273, 13273, 'accessories/wearable_items/snapons/backpacks/backpack_provisioner_swivel/backpack_provisioner_swivel_salami_base', 1045), + (13274, 13274, 'accessories/wearable_items/snapons/backpacks/backpack_provisioner_swivel/backpack_provisioner_swivel_salami_end_01', 1045), + (13275, 13275, 'accessories/wearable_items/snapons/backpacks/backpack_provisioner_swivel/backpack_provisioner_swivel_salami_end_02', 1045), + (13276, 13276, 'accessories/wearable_items/snapons/backpacks/backpack_provisioner_swivel/backpack_provisioner_swivel_salami_three_links', 1045), + (13277, 13277, 'accessories/wearable_items/snapons/backpacks/backpack_provisioner_swivel/backpack_provisioner_swivel_salami_two_links', 1045), + (13278, 13278, 'creatures/monsters/drake_ice', 1045), + (13279, 13279, 'staticobjects/rocks/hal_obj_cave_rock02', 1045), + (13280, 13280, 'staticobjects/chests/chest_halas_01', 1045), + (13281, 13281, 'staticobjects/chests/chest_halas_02', 1045), + (13282, 13282, 'staticobjects/chests/chest_halas_03', 1045), + (13283, 13283, 'staticobjects/chairs/halas_barbarian_stool_02', 1045), + (13284, 13284, 'staticobjects/chairs/halas_chair_02', 1045), + (13285, 13285, 'staticobjects/soe_wallet/halas_chair_03', 1045), + (13286, 13286, 'staticobjects/racks/hal_barbarian_weaponrack_01', 1045), + (13287, 13287, 'staticobjects/racks/hal_barbarian_weaponrack_02', 1045), + (13288, 13288, 'staticobjects/racks/hal_coldain_weaponrack_01', 1045), + (13289, 13289, 'staticobjects/barricades/hal_barricade_coldane_01', 1045), + (13290, 13290, 'staticobjects/benches/halas_coldain_bench_01', 1045), + (13291, 13291, 'staticobjects/counters/halas_barbarian_counter_01', 1045), + (13292, 13292, 'staticobjects/books/halas_coldain_books_03', 1045), + (13293, 13293, 'staticobjects/books/halas_coldain_books_05', 1045), + (13294, 13294, 'staticobjects/liveevent/cityfestivals/halas_coldain_bookshelf_01', 1045), + (13295, 13295, 'staticobjects/soe_wallet/halas_coldain_bookshelf_02', 1045), + (13296, 13296, 'staticobjects/liveevent/cityfestivals/halas_coldain_bookshelf_03', 1045), + (13297, 13297, 'staticobjects/lighting/halas_coldain_lantern_01', 1045), + (13298, 13298, 'staticobjects/lighting/halas_oil_lamp_01', 1045), + (13299, 13299, 'staticobjects/lighting/halas_oil_lamp_03', 1045), + (13300, 13300, 'staticobjects/lighting/halas_shipwreck_torch_01', 1045), + (13301, 13301, 'staticobjects/crates/halas_crate_01', 1045), + (13302, 13302, 'staticobjects/crates/halas_crate_02', 1045), + (13303, 13303, 'staticobjects/crates/halas_crate_03', 1045), + (13304, 13304, 'staticobjects/stable_items/halas_hitchingpost_01', 1045), + (13305, 13305, 'staticobjects/tables/halas_barbarian_table_01', 1045), + (13306, 13306, 'staticobjects/tables/halas_barbarian_table_02', 1045), + (13307, 13307, 'staticobjects/tables/halas_shipwreck_table_01', 1045), + (13308, 13308, 'staticobjects/weapons/halas_hammer_01', 1045), + (13309, 13309, 'staticobjects/blacksmith/halas_tongs_01', 1045), + (13310, 13310, 'staticobjects/fires/halas_ph_firepit_blue_01', 1045), + (13311, 13311, 'staticobjects/fires/halas_ph_firepit_red_01', 1045), + (13312, 13312, 'staticobjects/fires/halas_ph_firepit_unlit_01', 1045), + (13313, 13313, 'staticobjects/barricades/hal_barricade_coldane_02', 1045), + (13314, 13314, 'staticobjects/barricades/hal_barricade_coldane_03', 1045), + (13315, 13315, 'creatures/tu/ettin_shaman', 1045), + (13316, 13316, 'creatures/tu/ettin_skeletal', 1045), + (13317, 13317, 'creatures/tu/ettin_warlord', 1045), + (13318, 13318, 'creatures/tu/ettin_warrior', 1045), + (13319, 13319, 'staticobjects/mailboxes/halas_mail_kiosk_01', 1045), + (13320, 13320, 'creatures/mounts/rhino_mount/rhino_snow', 1045), + (13321, 13321, 'creatures/mounts/flying_disc/flying_disc_elven_01', 1045), + (13322, 13322, 'staticobjects/soe_wallet/halas_barbarian_bed_01', 1045), + (13323, 13323, 'staticobjects/liveevent/cityfestivals/halas_barbarian_bed_02', 1045), + (13324, 13324, 'staticobjects/liveevent/cityfestivals/halas_barbarian_bed_03', 1045), + (13325, 13325, 'staticobjects/fish/kp_fish_hanging01', 1045), + (13326, 13326, 'staticobjects/signs/halas/hal_barbarian_great_hall_sign_01', 1045), + (13327, 13327, 'staticobjects/signs/halas/hal_coldain_hanging_sign_01', 1045), + (13328, 13328, 'staticobjects/signs/halas/hal_coldain_hanging_sign_02', 1045), + (13329, 13329, 'staticobjects/signs/halas/hal_coldain_house_sign_01', 1045), + (13330, 13330, 'staticobjects/signs/halas/hal_coldain_house_sign_02', 1045), + (13331, 13331, 'staticobjects/liveevent/cityfestivals/halas_coldain_house_sign_03', 1045), + (13332, 13332, 'staticobjects/signs/halas/hal_coldain_house_sign_04', 1045), + (13333, 13333, 'staticobjects/signs/halas/hal_coldain_house_sign_05', 1045), + (13334, 13334, 'staticobjects/barrels/halas_four_barrels_01', 1045), + (13335, 13335, 'staticobjects/barrels/halas_three_barrels_01', 1045), + (13336, 13336, 'staticobjects/barrels/halas_three_barrels_snow_01', 1045), + (13337, 13337, 'staticobjects/barrels/halas_three_barrels_snow_02', 1045), + (13338, 13338, 'staticobjects/debris/halas_coldain_debris_01', 1045), + (13339, 13339, 'staticobjects/debris/halas_coldain_debris_02', 1045), + (13340, 13340, 'staticobjects/kegs/halas_keg_large_01', 1045), + (13341, 13341, 'staticobjects/tents/halas_lean_tent_01', 1045), + (13342, 13342, 'staticobjects/tents/halas_lean_tent_02', 1045), + (13343, 13343, 'staticobjects/weapons/halas_miningtool_pick01', 1045), + (13344, 13344, 'creatures/monsters/slug_trail_fx', 1045), + (13345, 13345, 'accessories/wearable_items/_exp07/new_halas_armor/leather_fur/skirt', 1045), + (13346, 13346, 'accessories/wearable_items/_exp07/new_halas_armor/leather_fur/chest', 1045), + (13347, 13347, 'accessories/wearable_items/_exp07/new_halas_armor/leather_fur/feet', 1045), + (13348, 13348, 'accessories/wearable_items/_exp07/new_halas_armor/leather_fur/forearms', 1045), + (13349, 13349, 'accessories/wearable_items/_exp07/new_halas_armor/leather_fur/hands', 1045), + (13350, 13350, 'accessories/wearable_items/_exp07/new_halas_armor/leather_fur/head', 1045), + (13351, 13351, 'accessories/wearable_items/_exp07/new_halas_armor/leather_fur/legs', 1045), + (13352, 13352, 'accessories/wearable_items/_exp07/new_halas_armor/leather_fur/legs_noskirt', 1045), + (13353, 13353, 'accessories/wearable_items/_exp07/new_halas_armor/leather_fur/pauldron_left', 1045), + (13354, 13354, 'accessories/wearable_items/_exp07/new_halas_armor/leather_fur/pauldron_right', 1045), + (13355, 13355, 'accessories/wearable_items/_exp07/new_halas_armor/leather_fur/shoulders', 1045), + (13356, 13356, 'accessories/wearable_items/_exp07/new_halas_armor/leather_fur/shoulders_nopauldrons', 1045), + (13357, 13357, 'staticobjects/soe_wallet/halas_polarbear_rug_01', 1045), + (13358, 13358, 'staticobjects/rugs/halas_rug_01', 1045), + (13359, 13359, 'staticobjects/rugs/halas_rug_02', 1045), + (13360, 13360, 'staticobjects/rugs/halas_rug_03', 1045), + (13361, 13361, 'staticobjects/rugs/halas_rug_04', 1045), + (13362, 13362, 'staticobjects/rugs/halas_rug_05', 1045), + (13363, 13363, 'staticobjects/rugs/halas_rug_06', 1045), + (13364, 13364, 'staticobjects/rugs/halas_rug_07', 1045), + (13365, 13365, '_exp07/characters/monsters/vrewwx_dragon/vrewwx', 1045), + (13366, 13366, 'accessories/wearable_items/cloak/exp07/cloak_fur_silk', 1045), + (13367, 13367, 'accessories/wearable_items/cloak/exp07/cloak_stained_glass', 1045), + (13368, 13368, '_exp07/characters/monsters/vrewwx_dragon/vrewwx_baby', 1045), + (13369, 13369, 'staticobjects/liveevent/cityfestivals/dpo_mailbox_halas', 1045), + (13370, 13370, 'accessories/wearable_items/_exp07/ice_armor/vanguard/skirt', 1045), + (13371, 13371, 'accessories/wearable_items/_exp07/ice_armor/vanguard/chest', 1045), + (13372, 13372, 'accessories/wearable_items/_exp07/ice_armor/vanguard/feet', 1045), + (13373, 13373, 'accessories/wearable_items/_exp07/ice_armor/vanguard/forearms', 1045), + (13374, 13374, 'accessories/wearable_items/_exp07/ice_armor/vanguard/hands', 1045), + (13375, 13375, 'accessories/wearable_items/_exp07/ice_armor/vanguard/head', 1045), + (13376, 13376, 'accessories/wearable_items/_exp07/ice_armor/vanguard/ice_pauldron_left', 1045), + (13377, 13377, 'accessories/wearable_items/_exp07/ice_armor/vanguard/ice_pauldron_right', 1045), + (13378, 13378, 'accessories/wearable_items/_exp07/ice_armor/vanguard/legs', 1045), + (13379, 13379, 'accessories/wearable_items/_exp07/ice_armor/vanguard/legs_noskirt', 1045), + (13380, 13380, 'accessories/wearable_items/_exp07/ice_armor/vanguard/right', 1045), + (13381, 13381, 'accessories/wearable_items/_exp07/ice_armor/vanguard/shoulders', 1045), + (13382, 13382, 'accessories/wearable_items/_exp07/ice_armor/vanguard/shoulders_ice_pauldrons', 1045), + (13383, 13383, 'accessories/wearable_items/_exp07/ice_armor/vanguard/shoulders_nopauldrons', 1045), + (13384, 13384, 'staticobjects/shop/halas_displaycase_small', 1045), + (13385, 13385, 'staticobjects/shop/floor_displaycase_any_ornate01_small', 1045), + (13386, 13386, 'staticobjects/trophies/halas_polar_bear_head_01', 1045), + (13387, 13387, 'staticobjects/rugs/halas_lion_pelt_01', 1045), + (13388, 13388, 'staticobjects/tapestry/halas_orc_camp_pelt_01', 1045), + (13389, 13389, 'staticobjects/wood/halas_orc_camp_firewood_01', 1045), + (13390, 13390, 'staticobjects/liveevent/tinkerfest/dpo_inna_wreckage_doublefloorcog', 1045), + (13391, 13391, 'staticobjects/liveevent/tinkerfest/dpo_inna_wreckage_doublewallcog', 1045), + (13392, 13392, 'staticobjects/liveevent/tinkerfest/dpo_inna_wreckage_floorcog', 1045), + (13393, 13393, 'staticobjects/liveevent/tinkerfest/dpo_inna_wreckage_wallcogrounded', 1045), + (13394, 13394, 'staticobjects/liveevent/tinkerfest/dpo_inna_landing_counter01', 1045), + (13395, 13395, 'staticobjects/liveevent/tinkerfest/dpo_klak_light01', 1045), + (13396, 13396, 'staticobjects/liveevent/tinkerfest/dpo_klak_rm03_int_gate', 1045), + (13397, 13397, 'staticobjects/liveevent/tinkerfest/dpo_klak_rm03_int_gear01_greyplates', 1045), + (13398, 13398, 'staticobjects/liveevent/tinkerfest/dpo_klak_rm03_int_gear08_grey', 1045), + (13399, 13399, 'staticobjects/liveevent/tinkerfest/dpo_klak_rm04_int_bowlfan', 1045), + (13400, 13400, 'staticobjects/liveevent/tinkerfest/dpo_klak_rm04_int_fan01', 1045), + (13401, 13401, 'staticobjects/liveevent/tinkerfest/dpo_klak_rm04_int_roller01_rot', 1045), + (13402, 13402, 'staticobjects/liveevent/tinkerfest/dpo_klak_rm06_int_rechargingpod', 1045), + (13403, 13403, 'staticobjects/liveevent/tinkerfest/dpo_klak_rm06_int_rechargingstation', 1045), + (13404, 13404, 'staticobjects/liveevent/tinkerfest/dpo_powerorb_assembly', 1045), + (13405, 13405, 'staticobjects/liveevent/tinkerfest/dpo_klak_rm08_int_medicallight', 1045), + (13406, 13406, 'staticobjects/liveevent/tinkerfest/dpo_klak_rm05_int_squaregear02_rot', 1045), + (13407, 13407, 'staticobjects/liveevent/tinkerfest/dpo_klak_rm14_int_powercell01', 1045), + (13408, 13408, 'staticobjects/liveevent/tinkerfest/dpo_inna_wreckage_bigfloorcog', 1045), + (13409, 13409, 'staticobjects/liveevent/tinkerfest/dpo_klak_rm03_int_gear01_shinysilver', 1045), + (13410, 13410, 'staticobjects/liveevent/tinkerfest/dpo_klak_rm03_int_gear01_red', 1045), + (13411, 13411, 'staticobjects/liveevent/tinkerfest/dpo_panel_red_plates', 1045), + (13412, 13412, 'staticobjects/liveevent/tinkerfest/dpo_panel_hammered_metal', 1045), + (13413, 13413, 'staticobjects/liveevent/tinkerfest/dpo_panel_grey_plates', 1045), + (13414, 13414, 'staticobjects/liveevent/tinkerfest/dpo_panel_rusty_plates', 1045), + (13415, 13415, 'staticobjects/liveevent/tinkerfest/dpo_panel_grey_patterned', 1045), + (13416, 13416, 'staticobjects/liveevent/tinkerfest/dpo_inna_wreckage_propeller', 1045), + (13417, 13417, 'staticobjects/liveevent/tinkerfest/dpo_klak_rm03_int_gear01_yellow', 1045), + (13418, 13418, 'staticobjects/liveevent/tinkerfest/dpo_klak_rm16_int_door', 1045), + (13419, 13419, 'staticobjects/liveevent/tinkerfest/dpo_klak_rm09_int_menacekey', 1045), + (13420, 13420, 'staticobjects/_exp06/ornate_torch01', 1045), + (13421, 13421, 'staticobjects/_exp06/ornate_torch01_lit', 1045), + (13422, 13422, 'staticobjects/catapult/snow_goblin_catapult', 1045), + (13423, 13423, 'staticobjects/liveevent/tinkerfest/tinkerfest_book01', 1045), + (13424, 13424, 'accessories/wieldable_items/weapons/exp07/1h_sword/exp07_sword_swept', 1045), + (13425, 13425, 'accessories/wearable_items/_exp07/new_halas_armor/robe_fur/skirt', 1045), + (13426, 13426, 'accessories/wearable_items/_exp07/new_halas_armor/robe_fur/chest', 1045), + (13427, 13427, 'accessories/wearable_items/_exp07/new_halas_armor/robe_fur/feet', 1045), + (13428, 13428, 'accessories/wearable_items/_exp07/new_halas_armor/robe_fur/hands', 1045), + (13429, 13429, 'accessories/wearable_items/_exp07/new_halas_armor/robe_fur/head', 1045), + (13430, 13430, 'accessories/wearable_items/_exp07/new_halas_armor/robe_fur/head_collar', 1045), + (13431, 13431, 'accessories/wearable_items/_exp07/new_halas_armor/robe_fur/pants', 1045), + (13432, 13432, 'accessories/wearable_items/_exp07/new_halas_armor/robe_fur/pauldron_left', 1045), + (13433, 13433, 'accessories/wearable_items/_exp07/new_halas_armor/robe_fur/pauldron_right', 1045), + (13434, 13434, 'creatures/tu/elf_princess', 1045), + (13435, 13435, 'creatures/tu/firiona_vie', 1045), + (13436, 13436, 'staticobjects/pvp/dpo_bone_tower_warfields', 1045), + (13437, 13437, 'staticobjects/pvp/dpo_stone_steppes_tower_warfields', 1045), + (13438, 13438, 'staticobjects/weapons/dpo_arrow_green_sparkles', 1045), + (13439, 13439, 'staticobjects/soe_wallet/halas_barbarian_weaponrack_01_weapons_02', 1045), + (13440, 13440, 'staticobjects/soe_wallet/halas_candle_blue_table_base', 1045), + (13441, 13441, 'accessories/wearable_items/_exp08/dragon_armor/vanguard_red/right', 1096), + (13442, 13442, 'accessories/wearable_items/_exp08/dragon_armor/vanguard_red/shoulders', 1096), + (13443, 13443, 'accessories/wearable_items/_exp08/dragon_armor/vanguard_red/shoulders_epic', 1096), + (13444, 13444, 'accessories/wearable_items/_exp07/ice_armor/vanguard/head_ice_helm', 1045), + (13445, 13445, 'creatures/tu/ettin_warlord_helm_ice', 1045), + (13446, 13446, 'creatures/tu/ettin_warlord_helm', 1045), + (13447, 13447, 'creatures/tu/valkyrie_ghost_loop', 1045), + (13448, 13448, 'accessories/wearable_items/cloak/exp07/cloak_tinker_fest', 1045), + (13449, 13449, 'creatures/tu/skeleton_sergeant_paladin_ice', 1045), + (13450, 13450, 'creatures/tu/skeleton_mage_ice', 1045), + (13451, 13451, 'creatures/tu/succubus_ice', 1045), + (13452, 13452, 'ec/npc/goblin_ice_transparent', 1045), + (13453, 13453, 'creatures/monsters/dervish_ice_dark', 1045), + (13454, 13454, 'creatures/tu/skeleton_sergeant_paladin_ice_dark', 1045), + (13455, 13455, 'creatures/tu/skeleton_king_greater_ice_dark', 1045), + (13456, 13456, 'creatures/tu/skeleton_mage_ice_dark', 1045), + (13457, 13457, 'creatures/tu/succubus_ice_dark', 1045), + (13458, 13458, 'ec/npc/goblin_new_ice_dark', 1045), + (13459, 13459, 'ec/npc/goblin_new_ice', 1045), + (13460, 13460, 'staticobjects/tcg/tcg_tinkered_box_red_button', 1045), + (13461, 13461, '_exp07/characters/tool_users/othmir_male_base', 1045), + (13462, 13462, 'accessories/wieldable_items/weapons/exp05/exp05_korsha_hammer1h_fx', 1045), + (13463, 13463, 'accessories/wieldable_items/weapons/exp06/1h_sword/exp06_1h_sword_toothed_cleaver_fx', 1045), + (13464, 13464, 'accessories/wieldable_items/weapons/exp06/1h_sword/exp06_1h_sword_tallonite_katana_slice_fx', 1045), + (13465, 13465, 'accessories/wieldable_items/weapons/fist/fist_aether_striker', 1045), + (13466, 13466, 'accessories/wieldable_items/weapons/exp05/exp05_bow_guk_bow_eyefx', 1045), + (13467, 13467, 'accessories/wieldable_items/weapons/exp06/1h_crush/exp06_1h_crush_erudin_library_wand_fx', 1045), + (13468, 13468, 'accessories/wieldable_items/weapons/exp06/staff/erudite_rune_staff_fx', 1045), + (13469, 13469, 'accessories/wearable_items/_exp06/chaos_armor_gold/chain_armor/skirt', 1045), + (13470, 13470, 'accessories/wearable_items/_exp06/chaos_armor_gold/chain_armor/chest', 1045), + (13471, 13471, 'accessories/wearable_items/_exp06/chaos_armor_gold/chain_armor/feet', 1045), + (13472, 13472, 'accessories/wearable_items/_exp06/chaos_armor_gold/chain_armor/forearms', 1045), + (13473, 13473, 'accessories/wearable_items/_exp06/chaos_armor_gold/chain_armor/hands', 1045), + (13474, 13474, 'accessories/wearable_items/_exp06/chaos_armor_gold/chain_armor/head', 1045), + (13475, 13475, 'accessories/wearable_items/_exp06/chaos_armor_gold/chain_armor/head_chain_epic', 1045), + (13476, 13476, 'accessories/wearable_items/_exp06/chaos_armor_gold/chain_armor/legs', 1045), + (13477, 13477, 'accessories/wearable_items/_exp06/chaos_armor_gold/chain_armor/legs_noskirt', 1045), + (13478, 13478, 'accessories/wearable_items/_exp06/chaos_armor_gold/chain_armor/shoulders', 1045), + (13479, 13479, 'accessories/wearable_items/_exp06/chaos_armor_gold/chain_armor/shoulders_chaos_epic', 1045), + (13480, 13480, 'accessories/wearable_items/_exp06/chaos_armor_gold/chain_armor/snap_ons/chaos_pauldrons_right', 1045), + (13481, 13481, 'accessories/wearable_items/_exp06/chaos_armor_gold/chain_armor/snap_ons/chaos_pauldrons_left', 1045), + (13482, 13482, 'accessories/wearable_items/_exp06/chaos_armor_gold/leather_armor/snap_ons/head_chaos_helm', 1045), + (13483, 13483, 'accessories/wearable_items/_exp06/chaos_armor_gold/leather_armor/snap_ons/chaos_pauldrons_left', 1045), + (13484, 13484, 'accessories/wearable_items/_exp06/chaos_armor_gold/leather_armor/snap_ons/chaos_pauldrons_right', 1045), + (13485, 13485, 'accessories/wearable_items/_exp06/chaos_armor_gold/leather_armor/skirt', 1045), + (13486, 13486, 'accessories/wearable_items/_exp06/chaos_armor_gold/leather_armor/chest', 1045), + (13487, 13487, 'accessories/wearable_items/_exp06/chaos_armor_gold/leather_armor/feet', 1045), + (13488, 13488, 'accessories/wearable_items/_exp06/chaos_armor_gold/leather_armor/forearms', 1045), + (13489, 13489, 'accessories/wearable_items/_exp06/chaos_armor_gold/leather_armor/hands', 1045), + (13490, 13490, 'accessories/wearable_items/_exp06/chaos_armor_gold/leather_armor/head', 1045), + (13491, 13491, 'accessories/wearable_items/_exp06/chaos_armor_gold/leather_armor/head_chaos_epic', 1045), + (13492, 13492, 'accessories/wearable_items/_exp06/chaos_armor_gold/leather_armor/legs', 1045), + (13493, 13493, 'accessories/wearable_items/_exp06/chaos_armor_gold/leather_armor/legs_noskirt', 1045), + (13494, 13494, 'accessories/wearable_items/_exp06/chaos_armor_gold/leather_armor/shoulders_epic_pauldrons', 1045), + (13495, 13495, 'accessories/wearable_items/_exp06/chaos_armor_gold/leather_armor/shoulders_no_pauldrons', 1045), + (13496, 13496, 'accessories/wearable_items/_exp06/chaos_armor_gold/robe_armor/snap_ons/chaos_pauldrons_upper_right', 1045), + (13497, 13497, 'accessories/wearable_items/_exp06/chaos_armor_gold/robe_armor/snap_ons/chaos_pauldrons_lower_left', 1045), + (13498, 13498, 'accessories/wearable_items/_exp06/chaos_armor_gold/robe_armor/snap_ons/chaos_pauldrons_lower_right', 1045), + (13499, 13499, 'accessories/wearable_items/_exp06/chaos_armor_gold/robe_armor/snap_ons/chaos_pauldrons_upper_left', 1045), + (13500, 13500, 'accessories/wearable_items/_exp06/chaos_armor_gold/robe_armor/skirt', 1045), + (13501, 13501, 'accessories/wearable_items/_exp06/chaos_armor_gold/robe_armor/chest', 1045), + (13502, 13502, 'accessories/wearable_items/_exp06/chaos_armor_gold/robe_armor/chest_chaos_pauldrons', 1045), + (13503, 13503, 'accessories/wearable_items/_exp06/chaos_armor_gold/robe_armor/feet', 1045), + (13504, 13504, 'accessories/wearable_items/_exp06/chaos_armor_gold/robe_armor/hands', 1045), + (13505, 13505, 'accessories/wearable_items/_exp06/chaos_armor_gold/robe_armor/head', 1045), + (13506, 13506, 'accessories/wearable_items/_exp06/chaos_armor_gold/robe_armor/head_chaos_helm', 1045), + (13507, 13507, 'accessories/wearable_items/_exp06/chaos_armor_gold/robe_armor/head_collar', 1045), + (13508, 13508, 'accessories/wearable_items/_exp06/chaos_armor_gold/robe_armor/pants', 1045), + (13509, 13509, 'accessories/wearable_items/_exp06/chaos_armor_gold/vanguard_armor/snap_ons/chaos_shin_right', 1045), + (13510, 13510, 'accessories/wearable_items/_exp06/chaos_armor_gold/vanguard_armor/snap_ons/chaos_forearm_left', 1045), + (13511, 13511, 'accessories/wearable_items/_exp06/chaos_armor_gold/vanguard_armor/snap_ons/chaos_forearm_right', 1045), + (13512, 13512, 'accessories/wearable_items/_exp06/chaos_armor_gold/vanguard_armor/snap_ons/chaos_pauldrons_lower_left', 1045), + (13513, 13513, 'accessories/wearable_items/_exp06/chaos_armor_gold/vanguard_armor/snap_ons/chaos_pauldrons_lower_right', 1045), + (13514, 13514, 'accessories/wearable_items/_exp06/chaos_armor_gold/vanguard_armor/snap_ons/chaos_pauldrons_upper_left', 1045), + (13515, 13515, 'accessories/wearable_items/_exp06/chaos_armor_gold/vanguard_armor/snap_ons/chaos_pauldrons_upper_right', 1045), + (13516, 13516, 'accessories/wearable_items/_exp06/chaos_armor_gold/vanguard_armor/snap_ons/chaos_shin_left', 1045), + (13517, 13517, 'accessories/wearable_items/_exp06/chaos_armor_gold/vanguard_armor/skirt', 1045), + (13518, 13518, 'accessories/wearable_items/_exp06/chaos_armor_gold/vanguard_armor/chest', 1045), + (13519, 13519, 'accessories/wearable_items/_exp06/chaos_armor_gold/vanguard_armor/feet', 1045), + (13520, 13520, 'accessories/wearable_items/_exp06/chaos_armor_gold/vanguard_armor/forearms', 1045), + (13521, 13521, 'accessories/wearable_items/_exp06/chaos_armor_gold/vanguard_armor/hands', 1045), + (13522, 13522, 'accessories/wearable_items/_exp06/chaos_armor_gold/vanguard_armor/hands_chaos_gauntlets', 1045), + (13523, 13523, 'accessories/wearable_items/_exp06/chaos_armor_gold/vanguard_armor/head', 1045), + (13524, 13524, 'accessories/wearable_items/_exp06/chaos_armor_gold/vanguard_armor/head_chaos_helm', 1045), + (13525, 13525, 'accessories/wearable_items/_exp06/chaos_armor_gold/vanguard_armor/legs', 1045), + (13526, 13526, 'accessories/wearable_items/_exp06/chaos_armor_gold/vanguard_armor/legs_chaos_shins', 1045), + (13527, 13527, 'accessories/wearable_items/_exp06/chaos_armor_gold/vanguard_armor/legs_noskirt', 1045), + (13528, 13528, 'accessories/wearable_items/_exp06/chaos_armor_gold/vanguard_armor/right', 1045), + (13529, 13529, 'accessories/wearable_items/_exp06/chaos_armor_gold/vanguard_armor/shoulders', 1045), + (13530, 13530, 'accessories/wearable_items/_exp06/chaos_armor_gold/vanguard_armor/shoulders_chaos_armor_all', 1045), + (13531, 13531, 'accessories/wearable_items/_exp06/chaos_armor_gold/vanguard_armor/shoulders_nopauldrons', 1045), + (13532, 13532, 'accessories/wearable_items/_exp07/station_cash_armor/leather_fur_black/skirt', 1045), + (13533, 13533, 'accessories/wearable_items/_exp07/station_cash_armor/leather_fur_black/chest', 1045), + (13534, 13534, 'accessories/wearable_items/_exp07/station_cash_armor/leather_fur_black/feet', 1045), + (13535, 13535, 'accessories/wearable_items/_exp07/station_cash_armor/leather_fur_black/forearms', 1045), + (13536, 13536, 'accessories/wearable_items/_exp07/station_cash_armor/leather_fur_black/hands', 1045), + (13537, 13537, 'accessories/wearable_items/_exp07/station_cash_armor/leather_fur_black/head', 1045), + (13538, 13538, 'accessories/wearable_items/_exp07/station_cash_armor/leather_fur_black/legs', 1045), + (13539, 13539, 'accessories/wearable_items/_exp07/station_cash_armor/leather_fur_black/legs_noskirt', 1045), + (13540, 13540, 'accessories/wearable_items/_exp07/station_cash_armor/leather_fur_black/pauldron_left', 1045), + (13541, 13541, 'accessories/wearable_items/_exp07/station_cash_armor/leather_fur_black/pauldron_right', 1045), + (13542, 13542, 'accessories/wearable_items/_exp07/station_cash_armor/leather_fur_black/shoulders', 1045), + (13543, 13543, 'accessories/wearable_items/_exp07/station_cash_armor/leather_fur_black/shoulders_nopauldrons', 1045), + (13544, 13544, 'accessories/wearable_items/_exp07/station_cash_armor/robe_fur_black/skirt', 1045), + (13545, 13545, 'accessories/wearable_items/_exp07/station_cash_armor/robe_fur_black/chest', 1045), + (13546, 13546, 'accessories/wearable_items/_exp07/station_cash_armor/robe_fur_black/feet', 1045), + (13547, 13547, 'accessories/wearable_items/_exp07/station_cash_armor/robe_fur_black/hands', 1045), + (13548, 13548, 'accessories/wearable_items/_exp07/station_cash_armor/robe_fur_black/head', 1045), + (13549, 13549, 'accessories/wearable_items/_exp07/station_cash_armor/robe_fur_black/head_collar', 1045), + (13550, 13550, 'accessories/wearable_items/_exp07/station_cash_armor/robe_fur_black/pants', 1045), + (13551, 13551, 'accessories/wearable_items/_exp07/station_cash_armor/robe_fur_black/pauldron_left', 1045), + (13552, 13552, 'accessories/wearable_items/_exp07/station_cash_armor/robe_fur_black/pauldron_right', 1045), + (13553, 13553, 'accessories/armor_dummy/armor_dummy_male_topiary', 1045), + (13554, 13554, 'accessories/armor_dummy/armor_dummy_female_topiary', 1045), + (13555, 13555, 'accessories/wearable_items/_exp06/chaos_armor_gold/chain_armor/snap_ons/chaos_pauldrons_right_fx', 1045), + (13556, 13556, 'accessories/wearable_items/_exp06/chaos_armor_gold/chain_armor/snap_ons/chaos_pauldrons_left_fx', 1045), + (13557, 13557, 'accessories/wearable_items/_exp06/chaos_armor_gold/chain_armor/shoulders_chaos_epic_fx', 1045), + (13558, 13558, 'accessories/wearable_items/_exp06/chaos_armor_gold/leather_armor/snap_ons/chaos_pauldrons_right_fx', 1045), + (13559, 13559, 'accessories/wearable_items/_exp06/chaos_armor_gold/leather_armor/snap_ons/chaos_pauldrons_left_fx', 1045), + (13560, 13560, 'accessories/wearable_items/_exp06/chaos_armor_gold/leather_armor/shoulders_epic_pauldrons_fx', 1045), + (13561, 13561, 'accessories/wearable_items/_exp06/chaos_armor_gold/robe_armor/chest_chaos_pauldrons_fx', 1045), + (13562, 13562, 'accessories/wearable_items/_exp06/chaos_armor_gold/robe_armor/snap_ons/chaos_pauldrons_upper_right_fx', 1045), + (13563, 13563, 'accessories/wearable_items/_exp06/chaos_armor_gold/robe_armor/snap_ons/chaos_pauldrons_upper_left_fx', 1045), + (13564, 13564, 'accessories/wearable_items/_exp06/chaos_armor_gold/vanguard_armor/shoulders_chaos_armor_all_fx', 1045), + (13565, 13565, 'accessories/wearable_items/_exp06/chaos_armor_gold/vanguard_armor/snap_ons/chaos_pauldrons_upper_right_fx', 1045), + (13566, 13566, 'accessories/wearable_items/_exp06/chaos_armor_gold/vanguard_armor/snap_ons/chaos_pauldrons_upper_left_fx', 1045), + (13567, 13567, 'staticobjects/_exp06/odno_firepit_rocks_orange', 1045), + (13568, 13568, 'staticobjects/_exp06/odno_firepit_rocks_orange_unlit', 1045), + (13569, 13569, 'creatures/mounts/horse_white_elf/horse_white_elf', 1045), + (13570, 13570, 'staticobjects/_exp06/odno_kejak_barrel01', 1045), + (13571, 13571, 'staticobjects/_exp06/odno_kejak_barrel02', 1045), + (13572, 13572, 'accessories/wieldable_items/soga_weapons/fighter/1h_destroyer', 1045), + (13573, 13573, 'staticobjects/liveevent/frostfell/permafrost_frostfell_chessboard_full', 1045), + (13574, 13574, 'staticobjects/liveevent/cityfestivals/halas_barbarian_bar_02', 1045), + (13575, 13575, 'staticobjects/plants/slove_pomegranate_whole01', 1045), + (13576, 13576, 'accessories/wearable_items/cloak/exp07/cloak_water2', 1045), + (13577, 13577, 'accessories/wearable_items/cloak/exp07/cloak_earth1', 1045), + (13578, 13578, 'accessories/wearable_items/cloak/exp07/cloak_earth2', 1045), + (13579, 13579, 'accessories/wearable_items/cloak/exp07/cloak_water1', 1045), + (13580, 13580, '_exp06/characters/tool_users/crystaline_folk_halas/crystaline_folk_ice', 1045), + (13581, 13581, '_exp06/characters/tool_users/crystaline_folk_halas/crystaline_folk_halas', 1045), + (13582, 13582, 'accessories/npc_wearables/crystaline_folk_halas/shoulders_right_large_ice', 1045), + (13583, 13583, 'accessories/npc_wearables/crystaline_folk_halas/chest_huge_back_halas', 1045), + (13584, 13584, 'accessories/npc_wearables/crystaline_folk_halas/chest_huge_back_ice', 1045), + (13585, 13585, 'accessories/npc_wearables/crystaline_folk_halas/head_crystal_crown_halas', 1045), + (13586, 13586, 'accessories/npc_wearables/crystaline_folk_halas/head_crystal_crown_ice', 1045), + (13587, 13587, 'accessories/npc_wearables/crystaline_folk_halas/legs_both_lower_halas', 1045), + (13588, 13588, 'accessories/npc_wearables/crystaline_folk_halas/legs_both_lower_ice', 1045), + (13589, 13589, 'accessories/npc_wearables/crystaline_folk_halas/legs_left_lower_halas', 1045), + (13590, 13590, 'accessories/npc_wearables/crystaline_folk_halas/legs_left_lower_ice', 1045), + (13591, 13591, 'accessories/npc_wearables/crystaline_folk_halas/legs_right_lower_halas', 1045), + (13592, 13592, 'accessories/npc_wearables/crystaline_folk_halas/legs_right_lower_ice', 1045), + (13593, 13593, 'accessories/npc_wearables/crystaline_folk_halas/shoulders_both_claw_halas', 1045), + (13594, 13594, 'accessories/npc_wearables/crystaline_folk_halas/shoulders_both_claw_ice', 1045), + (13595, 13595, 'accessories/npc_wearables/crystaline_folk_halas/shoulders_both_hook_claw_halas', 1045), + (13596, 13596, 'accessories/npc_wearables/crystaline_folk_halas/shoulders_both_hook_claw_ice', 1045), + (13597, 13597, 'accessories/npc_wearables/crystaline_folk_halas/shoulders_both_hook_halas', 1045), + (13598, 13598, 'accessories/npc_wearables/crystaline_folk_halas/shoulders_both_hook_ice', 1045), + (13599, 13599, 'accessories/npc_wearables/crystaline_folk_halas/shoulders_both_hook_large_halas', 1045), + (13600, 13600, 'accessories/npc_wearables/crystaline_folk_halas/shoulders_both_hook_large_ice', 1045), + (13601, 13601, 'accessories/npc_wearables/crystaline_folk_halas/shoulders_both_large_halas', 1045), + (13602, 13602, 'accessories/npc_wearables/crystaline_folk_halas/shoulders_both_large_ice', 1045), + (13603, 13603, 'accessories/npc_wearables/crystaline_folk_halas/shoulders_left_claw_halas', 1045), + (13604, 13604, 'accessories/npc_wearables/crystaline_folk_halas/shoulders_left_claw_ice', 1045), + (13605, 13605, 'accessories/npc_wearables/crystaline_folk_halas/shoulders_left_hook_halas', 1045), + (13606, 13606, 'accessories/npc_wearables/crystaline_folk_halas/shoulders_left_hook_ice', 1045), + (13607, 13607, 'accessories/npc_wearables/crystaline_folk_halas/shoulders_left_large_halas', 1045), + (13608, 13608, 'accessories/npc_wearables/crystaline_folk_halas/shoulders_left_large_ice', 1045), + (13609, 13609, 'accessories/npc_wearables/crystaline_folk_halas/shoulders_right_claw_halas', 1045), + (13610, 13610, 'accessories/npc_wearables/crystaline_folk_halas/shoulders_right_claw_ice', 1045), + (13611, 13611, 'accessories/npc_wearables/crystaline_folk_halas/shoulders_right_hook_halas', 1045), + (13612, 13612, 'accessories/npc_wearables/crystaline_folk_halas/shoulders_right_hook_ice', 1045), + (13613, 13613, 'accessories/npc_wearables/crystaline_folk_halas/shoulders_right_large_halas', 1045), + (13614, 13614, 'accessories/wearable_items/_exp08/dragon_armor/vanguard_shadow/skirt', 1096), + (13615, 13615, 'accessories/wearable_items/_exp08/dragon_armor/vanguard_shadow/chest', 1096), + (13616, 13616, 'accessories/wearable_items/_exp08/dragon_armor/vanguard_shadow/feet', 1096), + (13617, 13617, 'staticobjects/catapult/orc_harpoon_launcher', 1045), + (13618, 13618, 'staticobjects/liveevent/frostfell/permafrost_frostfell_chessboard_door_chains', 1045), + (13619, 13619, 'staticobjects/candles/halas_candle_blue', 1045), + (13620, 13620, 'staticobjects/weapons/halas_miningtool_pick02', 1045), + (13621, 13621, 'staticobjects/weapons/halas_orc_harpoon_01', 1045), + (13622, 13622, 'staticobjects/weapons/halas_orc_harpoon_base_01', 1045), + (13623, 13623, 'staticobjects/bottles/halas_wine_bottle_01', 1045), + (13624, 13624, 'staticobjects/plants/feerrott_plant_bigleaf_frozen', 1045), + (13625, 13625, 'staticobjects/fires/halas_signalfire_01', 1045), + (13626, 13626, 'accessories/wieldable_items/weapons/exp07/2h_sword/exp07_2h_sword_swept', 1045), + (13627, 13627, 'staticobjects/liveevent/frostfell/permafrost_frostfell_yeti_statue', 1045), + (13628, 13628, 'staticobjects/tree/halas_ash_tree_01', 1045), + (13629, 13629, 'staticobjects/harvested/crystals/halas_gems_harvesting_01', 1045), + (13630, 13630, 'staticobjects/harvested/bushes/halas_harvest_bush_01', 1045), + (13631, 13631, 'staticobjects/harvested/trapping/halas_harvest_dens_01', 1045), + (13632, 13632, 'staticobjects/harvested/ore_mining/halas_harvest_ore_01', 1045), + (13633, 13633, 'staticobjects/harvested/logs/halas_tree_log_01', 1045), + (13634, 13634, 'staticobjects/harvested/roots_gathering/halas_vines_01', 1045), + (13635, 13635, 'staticobjects/soe_wallet/tudor_vanity_washstand', 1045), + (13636, 13636, 'staticobjects/soe_wallet/tudor_bdrm_armoire', 1045), + (13637, 13637, 'staticobjects/soe_wallet/tudor_bdrm_bed', 1045), + (13638, 13638, 'staticobjects/soe_wallet/tudor_bdrm_dresser', 1045), + (13639, 13639, 'staticobjects/soe_wallet/tudor_bdrm_nightstand', 1045), + (13640, 13640, 'staticobjects/soe_wallet/tudor_dining_cabinet', 1045), + (13641, 13641, 'staticobjects/soe_wallet/tudor_dining_chair', 1045), + (13642, 13642, 'staticobjects/soe_wallet/tudor_dining_cupboard', 1045), + (13643, 13643, 'staticobjects/soe_wallet/tudor_dining_table', 1045), + (13644, 13644, 'staticobjects/soe_wallet/tudor_living_coffeetable', 1045), + (13645, 13645, 'staticobjects/soe_wallet/tudor_living_endtable', 1045), + (13646, 13646, 'staticobjects/soe_wallet/tudor_living_settee', 1045), + (13647, 13647, 'staticobjects/soe_wallet/tudor_living_sofa', 1045), + (13648, 13648, 'staticobjects/soe_wallet/tudor_office_chair', 1045), + (13649, 13649, 'staticobjects/soe_wallet/tudor_office_chest', 1045), + (13650, 13650, 'staticobjects/soe_wallet/tudor_office_desk', 1045), + (13651, 13651, 'staticobjects/soe_wallet/tudor_office_shelves', 1045), + (13652, 13652, 'staticobjects/soe_wallet/tudor_vanity_stool', 1045), + (13653, 13653, 'staticobjects/soe_wallet/tudor_vanity_table', 1045), + (13654, 13654, 'staticobjects/liveevent/frostfell/permafrost_frostfell_valkarie_statue', 1045), + (13655, 13655, 'creatures/pets/pet_kitten/halas_kitten', 1045), + (13656, 13656, '_exp07/characters/tool_users/othmir_female_base', 1045), + (13657, 13657, 'creatures/pets/pet_kitten/halas_kitten_collar', 1045), + (13658, 13658, 'staticobjects/soe_wallet/tudor_vanity_bathtub', 1045), + (13659, 13659, 'staticobjects/liveevent/cityfestivals/halas_candle_blue_wall_base', 1045), + (13660, 13660, 'staticobjects/bell/dpo_mariner_bell_01', 1045), + (13661, 13661, 'accessories/wearable_items/cloak/exp07/cloak_halas', 1045), + (13662, 13662, 'accessories/wearable_items/_exp07/ice_armor/robe/skirt', 1045), + (13663, 13663, 'accessories/wearable_items/_exp07/ice_armor/robe/chest', 1045), + (13664, 13664, 'accessories/wearable_items/_exp07/ice_armor/robe/feet', 1045), + (13665, 13665, 'accessories/wearable_items/_exp07/ice_armor/robe/hands', 1045), + (13666, 13666, 'accessories/wearable_items/_exp07/ice_armor/robe/head', 1045), + (13667, 13667, 'accessories/wearable_items/_exp07/ice_armor/robe/hood', 1045), + (13668, 13668, 'accessories/wearable_items/_exp07/ice_armor/robe/pants', 1045), + (13669, 13669, 'staticobjects/tcg/tcg_painting47_karana', 1045), + (13670, 13670, 'staticobjects/tcg/tcg_painting48_tunare', 1045), + (13671, 13671, 'staticobjects/tcg/tcg_painting44_bristlebane', 1045), + (13672, 13672, 'staticobjects/tcg/tcg_painting45_innoruuk', 1045), + (13673, 13673, 'staticobjects/tcg/tcg_painting46_solusek', 1045), + (13674, 13674, 'staticobjects/tcg/tcg_tapestry_silver_guardian', 1045), + (13675, 13675, 'staticobjects/tcg/tcg_tapestry_emblematic_power', 1045), + (13676, 13676, 'staticobjects/weapons/halas_orc_catapult_busted_01', 1045), + (13677, 13677, 'staticobjects/vanity/bathtub_w_water', 1045), + (13678, 13678, 'staticobjects/vanity/bathtub', 1045), + (13679, 13679, 'accessories/wearable_items/snapons/backpacks/backpack_treasure_hunter_swivel/backpack_treasure_hunter_swivel_pouch03', 1045), + (13680, 13680, 'accessories/wearable_items/snapons/backpacks/backpack_treasure_hunter_swivel/backpack_treasure_hunter_swivel', 1045), + (13681, 13681, 'accessories/wearable_items/snapons/backpacks/backpack_treasure_hunter_swivel/backpack_treasure_hunter_swivel_chest', 1045), + (13682, 13682, 'accessories/wearable_items/snapons/backpacks/backpack_treasure_hunter_swivel/backpack_treasure_hunter_swivel_chest_lid', 1045), + (13683, 13683, 'accessories/wearable_items/snapons/backpacks/backpack_treasure_hunter_swivel/backpack_treasure_hunter_swivel_keys', 1045), + (13684, 13684, 'accessories/wearable_items/snapons/backpacks/backpack_treasure_hunter_swivel/backpack_treasure_hunter_swivel_lantern', 1045), + (13685, 13685, 'accessories/wearable_items/snapons/backpacks/backpack_treasure_hunter_swivel/backpack_treasure_hunter_swivel_pouch01', 1045), + (13686, 13686, 'accessories/wearable_items/snapons/backpacks/backpack_treasure_hunter_swivel/backpack_treasure_hunter_swivel_pouch02', 1045), + (13687, 13687, 'staticobjects/liveevent/frostfell/ho_chess_tile_dark', 1045), + (13688, 13688, 'staticobjects/liveevent/frostfell/ho_chess_tile_light', 1045), + (13689, 13689, 'staticobjects/liveevent/frostfell/object_ice_statue_01', 1045), + (13690, 13690, 'staticobjects/liveevent/frostfell/object_ice_statue_02', 1045), + (13691, 13691, 'staticobjects/liveevent/frostfell/object_ice_statue_03', 1045), + (13692, 13692, 'staticobjects/liveevent/frostfell/object_ice_weapon_rack', 1045), + (13693, 13693, 'staticobjects/liveevent/frostfell/object_wall_ice_sword', 1045), + (13694, 13694, 'staticobjects/liveevent/frostfell/object_wall_ice_hammer', 1045), + (13695, 13695, 'staticobjects/liveevent/frostfell/object_ice_chest', 1045), + (13696, 13696, 'staticobjects/liveevent/frostfell/object_ice_ceiling_lamp', 1045), + (13697, 13697, 'staticobjects/liveevent/frostfell/object_ice_wardrobe', 1045), + (13698, 13698, '_exp06/zones/objects/exp06_dun_the_hole_raid/roekillik_barricade', 1045), + (13699, 13699, '_exp06/zones/objects/exp06_dun_the_hole_raid/hole_crystal', 1045), + (13700, 13700, 'staticobjects/globes/gh_sentinel_globe_dpo', 1045), + (13701, 13701, 'staticobjects/_exp07_prelude/druid_ring_phase1', 1045), + (13702, 13702, 'staticobjects/_exp07_prelude/druid_ring_phase1_loping', 1045), + (13703, 13703, 'staticobjects/_exp07_prelude/druid_ring_phase1_nek', 1045), + (13704, 13704, 'staticobjects/_exp07_prelude/druid_ring_phase1_zek', 1045), + (13705, 13705, 'staticobjects/_exp07_prelude/druid_ring_phase2', 1045), + (13706, 13706, 'staticobjects/_exp07_prelude/druid_ring_phase2_loping', 1045), + (13707, 13707, 'staticobjects/_exp07_prelude/druid_ring_phase2_nek', 1045), + (13708, 13708, 'staticobjects/_exp07_prelude/druid_ring_phase2_zek', 1045), + (13709, 13709, 'staticobjects/_exp07_prelude/druid_ring_phase3', 1045), + (13710, 13710, 'staticobjects/_exp07_prelude/druid_ring_phase3_ferrott_off', 1045), + (13711, 13711, 'staticobjects/_exp07_prelude/druid_ring_phase3_ferrott_on', 1045), + (13712, 13712, 'staticobjects/_exp07_prelude/druid_ring_phase3_loping_on', 1045), + (13713, 13713, 'staticobjects/_exp07_prelude/druid_ring_phase3_nek', 1045), + (13714, 13714, 'staticobjects/_exp07_prelude/druid_ring_phase3_stonebrunt_off', 1045), + (13715, 13715, 'staticobjects/_exp07_prelude/druid_ring_phase3_stonebrunt_on', 1045), + (13716, 13716, 'staticobjects/_exp07_prelude/druid_ring_phase3_zek', 1045), + (13717, 13717, 'staticobjects/_exp07_prelude/druid_ring_phase3_zek_off', 1045), + (13718, 13718, 'staticobjects/_exp07_prelude/druid_ring_phase3_zek_on', 1045), + (13719, 13719, 'accessories/wieldable_items/weapons/exp07/1h_crush/1h_crush_mace_crowned', 1045), + (13720, 13720, 'accessories/wieldable_items/weapons/exp07/1h_crush/1h_crush_club_crowned', 1045), + (13721, 13721, 'accessories/wieldable_items/weapons/exp07/1h_pierce/exp07_1hp_dagger_swept', 1045), + (13722, 13722, 'accessories/wieldable_items/weapons/exp07/1h_sword/exp07_1h_axe_swept', 1045), + (13723, 13723, 'accessories/wieldable_items/weapons/exp07/1h_sword/exp07_fist_axe_sweptknuckle', 1045), + (13724, 13724, 'accessories/wieldable_items/weapons/exp07/1h_sword/exp07_shortsword_swept', 1045), + (13725, 13725, 'accessories/wieldable_items/weapons/exp07/2h_crush/exp07_2hc_hammer_crown', 1045), + (13726, 13726, 'accessories/wieldable_items/weapons/exp07/staff/exp07_halberd', 1045), + (13727, 13727, 'accessories/wieldable_items/weapons/exp07/staff/exp07_scythe', 1045), + (13728, 13728, 'accessories/wieldable_items/weapons/exp07/staff/exp07_spear', 1045), + (13729, 13729, 'accessories/wieldable_items/weapons/exp07/staff/exp07_staff_fighting', 1045), + (13730, 13730, 'accessories/wieldable_items/weapons/exp07/staff/exp07_staff_magi', 1045), + (13731, 13731, '_exp07/characters/tool_users/tserrina/tserrina', 1045), + (13732, 13732, 'staticobjects/tcg/tcg_painting_lon10', 1045), + (13733, 13733, '_exp05/monsters/dire_bear03_warmor_lon_01', 1045), + (13734, 13734, '_exp05/monsters/dire_bear03_wsaddle_armor_lon_01', 1045), + (13735, 13735, '_exp05/monsters/dire_bear03_wsaddle_lon_01', 1045), + (13736, 13736, '_exp07/zones/exp07_dun_velks_the_ascent/the_ascent_vineroom_walls_test', 1045), + (13737, 13737, '_exp07/zones/exp07_dun_velks_the_ascent/the_ascent_bridgeroom_bridge_01', 1045), + (13738, 13738, '_exp07/zones/exp07_dun_velks_the_ascent/the_ascent_bridgeroom_walls_01', 1045), + (13739, 13739, '_exp07/zones/exp07_dun_velks_the_ascent/the_ascent_entrance_hallway_01', 1045), + (13740, 13740, '_exp07/zones/exp07_dun_velks_the_ascent/the_ascent_fort_hallway_01', 1045), + (13741, 13741, '_exp07/zones/exp07_dun_velks_the_ascent/the_ascent_fort_hallway_02', 1045), + (13742, 13742, '_exp07/zones/exp07_dun_velks_the_ascent/the_ascent_guardroom_hallway_01', 1045), + (13743, 13743, '_exp07/zones/exp07_dun_velks_the_ascent/the_ascent_guardroom_hallway_02', 1045), + (13744, 13744, '_exp07/zones/exp07_dun_velks_the_ascent/the_ascent_guardroom_hallway_03', 1045), + (13745, 13745, '_exp07/zones/exp07_dun_velks_the_ascent/the_ascent_guardroom_hallway_04', 1045), + (13746, 13746, '_exp07/zones/exp07_dun_velks_the_ascent/the_ascent_guardroom_hallway_05', 1045), + (13747, 13747, '_exp07/zones/exp07_dun_velks_the_ascent/the_ascent_shard_altar_01', 1045), + (13748, 13748, '_exp07/zones/exp07_dun_velks_the_ascent/the_ascent_shard_room_01', 1045), + (13749, 13749, '_exp07/zones/exp07_dun_velks_the_ascent/the_ascent_vineroom_platforms_01', 1045), + (13750, 13750, '_exp07/zones/exp07_dun_velks_the_ascent/the_ascent_vineroom_walls_01', 1045), + (13751, 13751, 'accessories/wearable_items/profesion_hats/bruiser/station_cash_martial_skullcap/head', 1045), + (13752, 13752, '_exp07/zones/exp07_dun_velks_the_ascent/the_ascent_vineroom_walls_01_alive', 1045), + (13753, 13753, '_exp07/zones/exp07_dun_velks_the_ascent/the_ascent_bridgeroom_bridge_01_alive', 1045), + (13754, 13754, '_exp07/zones/exp07_dun_velks_the_ascent/the_ascent_bridgeroom_walls_01_alive', 1045), + (13755, 13755, '_exp07/zones/exp07_dun_velks_the_ascent/the_ascent_entrance_hallway_01_alive', 1045), + (13756, 13756, '_exp07/zones/exp07_dun_velks_the_ascent/the_ascent_fort_hallway_01_alive', 1045), + (13757, 13757, '_exp07/zones/exp07_dun_velks_the_ascent/the_ascent_fort_hallway_02_alive', 1045), + (13758, 13758, '_exp07/zones/exp07_dun_velks_the_ascent/the_ascent_guardroom_hallway_01_alive', 1045), + (13759, 13759, '_exp07/zones/exp07_dun_velks_the_ascent/the_ascent_guardroom_hallway_02_alive', 1045), + (13760, 13760, '_exp07/zones/exp07_dun_velks_the_ascent/the_ascent_guardroom_hallway_03_alive', 1045), + (13761, 13761, '_exp07/zones/exp07_dun_velks_the_ascent/the_ascent_guardroom_hallway_04_alive', 1045), + (13762, 13762, '_exp07/zones/exp07_dun_velks_the_ascent/the_ascent_guardroom_hallway_05_alive', 1045), + (13763, 13763, '_exp07/zones/exp07_dun_velks_the_ascent/the_ascent_shard_altar_01_alive', 1045), + (13764, 13764, '_exp07/zones/exp07_dun_velks_the_ascent/the_ascent_shard_room_01_alive', 1045), + (13765, 13765, '_exp07/zones/exp07_dun_velks_the_ascent/the_ascent_vineroom_platforms_01_alive', 1045), + (13766, 13766, 'ec/pc/human/human_male_ghost_loop_flipped', 1045), + (13767, 13767, '_exp07/zones/exp07_dun_velks_the_ascent/the_ascent_bridgeroom_plantbridge', 1045), + (13768, 13768, 'staticobjects/fireplace_items/dpo_fire_andiron_fire', 1045), + (13769, 13769, 'accessories/wearable_items/_exp06/dragon_chain_white/skirt', 1045), + (13770, 13770, 'accessories/wearable_items/_exp06/dragon_chain_white/chest', 1045), + (13771, 13771, 'accessories/wearable_items/_exp06/dragon_chain_white/dragon_pauldron_left', 1045), + (13772, 13772, 'accessories/wearable_items/_exp06/dragon_chain_white/dragon_pauldron_right', 1045), + (13773, 13773, 'accessories/wearable_items/_exp06/dragon_chain_white/feet', 1045), + (13774, 13774, 'accessories/wearable_items/_exp06/dragon_chain_white/forearms', 1045), + (13775, 13775, 'accessories/wearable_items/_exp06/dragon_chain_white/hands', 1045), + (13776, 13776, 'accessories/wearable_items/_exp06/dragon_chain_white/head', 1045), + (13777, 13777, 'accessories/wearable_items/_exp06/dragon_chain_white/head_dragon_helm', 1045), + (13778, 13778, 'accessories/wearable_items/_exp06/dragon_chain_white/legs', 1045), + (13779, 13779, 'accessories/wearable_items/_exp06/dragon_chain_white/legs_noskirt', 1045), + (13780, 13780, 'accessories/wearable_items/_exp06/dragon_chain_white/shoulders', 1045), + (13781, 13781, 'accessories/wearable_items/_exp06/dragon_chain_white/shoulders_pauldrons', 1045), + (13782, 13782, 'accessories/wearable_items/_exp06/dragon_leather_white/chest', 1045), + (13783, 13783, 'accessories/wearable_items/_exp06/dragon_leather_white/feet', 1045), + (13784, 13784, 'accessories/wearable_items/_exp06/dragon_leather_white/forearms', 1045), + (13785, 13785, 'accessories/wearable_items/_exp06/dragon_leather_white/hands', 1045), + (13786, 13786, 'accessories/wearable_items/_exp06/dragon_leather_white/head', 1045), + (13787, 13787, 'accessories/wearable_items/_exp06/dragon_leather_white/head_dragon_helm', 1045), + (13788, 13788, 'accessories/wearable_items/_exp06/dragon_leather_white/legs', 1045), + (13789, 13789, 'accessories/wearable_items/_exp06/dragon_leather_white/legs_noskirt', 1045), + (13790, 13790, 'accessories/wearable_items/_exp06/dragon_leather_white/shoulders', 1045), + (13791, 13791, 'accessories/wearable_items/_exp06/dragon_leather_white/shoulders_pauldrons', 1045), + (13792, 13792, 'accessories/wearable_items/_exp06/dragon_leather_white/skirt', 1045), + (13793, 13793, 'accessories/wearable_items/_exp06/dragon_robe_white/chest', 1045), + (13794, 13794, 'accessories/wearable_items/_exp06/dragon_robe_white/chest_pauldrons', 1045), + (13795, 13795, 'accessories/wearable_items/_exp06/dragon_robe_white/feet', 1045), + (13796, 13796, 'accessories/wearable_items/_exp06/dragon_robe_white/hands', 1045), + (13797, 13797, 'accessories/wearable_items/_exp06/dragon_robe_white/head', 1045), + (13798, 13798, 'accessories/wearable_items/_exp06/dragon_robe_white/head_dragon_hood', 1045), + (13799, 13799, 'accessories/wearable_items/_exp06/dragon_robe_white/hood', 1045), + (13800, 13800, 'accessories/wearable_items/_exp06/dragon_robe_white/pants', 1045), + (13801, 13801, 'accessories/wearable_items/_exp06/dragon_robe_white/skirt', 1045), + (13802, 13802, 'accessories/wearable_items/_exp06/dragon_vanguard_white/chest', 1045), + (13803, 13803, 'accessories/wearable_items/_exp06/dragon_vanguard_white/dragon_pauldrons_left', 1045), + (13804, 13804, 'accessories/wearable_items/_exp06/dragon_vanguard_white/dragon_pauldrons_right', 1045), + (13805, 13805, 'accessories/wearable_items/_exp06/dragon_vanguard_white/feet', 1045), + (13806, 13806, 'accessories/wearable_items/_exp06/dragon_vanguard_white/forearms', 1045), + (13807, 13807, 'accessories/wearable_items/_exp06/dragon_vanguard_white/hands', 1045), + (13808, 13808, 'accessories/wearable_items/_exp06/dragon_vanguard_white/head', 1045), + (13809, 13809, 'accessories/wearable_items/_exp06/dragon_vanguard_white/head_dragon_helm', 1045), + (13810, 13810, 'accessories/wearable_items/_exp06/dragon_vanguard_white/legs', 1045), + (13811, 13811, 'accessories/wearable_items/_exp06/dragon_vanguard_white/legs_dragon_snapons', 1045), + (13812, 13812, 'accessories/wearable_items/_exp06/dragon_vanguard_white/legs_noskirt', 1045), + (13813, 13813, 'accessories/wearable_items/_exp06/dragon_vanguard_white/right', 1045), + (13814, 13814, 'accessories/wearable_items/_exp06/dragon_vanguard_white/shoulders', 1045), + (13815, 13815, 'accessories/wearable_items/_exp06/dragon_vanguard_white/shoulders_dragon_pauldron', 1045), + (13816, 13816, 'accessories/wearable_items/_exp06/dragon_vanguard_white/shoulders_nopauldrons', 1045), + (13817, 13817, 'accessories/wearable_items/_exp06/dragon_vanguard_white/skirt', 1045), + (13818, 13818, 'accessories/wearable_items/_exp06/dragon_vanguard_white/snap_ons/dragon_forearm_left', 1045), + (13819, 13819, 'accessories/wearable_items/_exp06/dragon_vanguard_white/snap_ons/dragon_forearm_right', 1045), + (13820, 13820, 'accessories/wearable_items/_exp06/dragon_vanguard_white/snap_ons/dragon_pauldrons_lower_left', 1045), + (13821, 13821, 'accessories/wearable_items/_exp06/dragon_vanguard_white/snap_ons/dragon_pauldrons_lower_right', 1045), + (13822, 13822, 'accessories/wearable_items/_exp06/dragon_vanguard_white/snap_ons/dragon_shin_left', 1045), + (13823, 13823, 'accessories/wearable_items/_exp06/dragon_vanguard_white/snap_ons/dragon_shin_right', 1045), + (13824, 13824, 'staticobjects/_exp07_prelude/druid_ring_phase3_nek_on', 1045), + (13825, 13825, 'staticobjects/_exp07_prelude/druid_ring_phase3_loping', 1045), + (13826, 13826, 'accessories/wieldable_items/weapons/exp07/2h_sword/goth_scythe_2_hand_01', 1045), + (13827, 13827, 'accessories/wieldable_items/weapons/exp07/2h_sword/goth_axe_2_hand_01', 1045), + (13828, 13828, 'accessories/wieldable_items/weapons/exp07/1h_pierce/exp07_1hp_dagger_koshigatana', 1045), + (13829, 13829, 'accessories/wieldable_items/weapons/exp07/2h_crush/exp07_2hc_hammer_blight', 1045), + (13830, 13830, 'accessories/wieldable_items/weapons/exp07/shield/exp07_buckler_bladestopper', 1045), + (13831, 13831, 'accessories/wieldable_items/weapons/exp07/shield/exp07_shield_bladestopper', 1045), + (13832, 13832, 'accessories/wearable_items/cloak/exp07/cloak_of_flame', 1045), + (13833, 13833, 'accessories/wieldable_items/weapons/exp07/shield/goth_shield_01', 1045), + (13834, 13834, 'accessories/wieldable_items/weapons/exp07/2h_crush/goth_hammer_2_hand_01', 1045), + (13835, 13835, 'accessories/npc_wearables/ice_shade/goth_scythe_pike', 1045), + (13836, 13836, 'creatures/mounts/lizard_mount/lizard_mount_base', 1045), + (13837, 13837, 'accessories/wieldable_items/weapons/exp07/1h_sword/goth_dagger_01', 1045), + (13838, 13838, 'accessories/wearable_items/_exp07/station_cash_armor/evil_conjurer_helmet/head', 1045), + (13839, 13839, 'accessories/wearable_items/_exp07/station_cash_armor/robe_evil_dark/skirt', 1045), + (13840, 13840, 'accessories/wearable_items/_exp07/station_cash_armor/robe_evil_dark/chest', 1045), + (13841, 13841, 'accessories/wearable_items/_exp07/station_cash_armor/robe_evil_dark/feet', 1045), + (13842, 13842, 'accessories/wearable_items/_exp07/station_cash_armor/robe_evil_dark/hands', 1045), + (13843, 13843, 'accessories/wearable_items/_exp07/station_cash_armor/robe_evil_dark/head_collar', 1045), + (13844, 13844, 'accessories/wearable_items/_exp07/station_cash_armor/robe_evil_dark/pants', 1045), + (13845, 13845, 'creatures/mounts/odus_prowler/odus_prowler', 1045), + (13846, 13846, 'creatures/mounts/odus_prowler/odus_prowler_black_poison', 1045), + (13847, 13847, '_exp07/characters/monsters/sea_monster/sea_monster', 1045), + (13848, 13848, 'accessories/wieldable_items/tools/cook/spoon_gnoll', 1045), + (13849, 13849, '_exp07/characters/monsters/sea_monster/sea_monster_shell', 1045), + (13850, 13850, 'accessories/wieldable_items/weapons/exp06/staff/claw_staff', 1045), + (13851, 13851, 'creatures/mounts/odus_prowler/odus_prowler_black_death', 1045), + (13852, 13852, 'accessories/wieldable_items/weapons/exp07/1h_crush/1h_hammer_velium', 1045), + (13853, 13853, 'accessories/wieldable_items/weapons/exp07/1h_crush/1h_hammer_firecore', 1045), + (13854, 13854, 'accessories/wieldable_items/weapons/exp07/1h_crush/1h_hammer_icecore', 1045), + (13855, 13855, 'accessories/wieldable_items/weapons/exp07/1h_crush/1h_hammer_piston', 1045), + (13856, 13856, 'accessories/wieldable_items/weapons/exp07/1h_sword/exp07_1h_cleaver_battle_velium', 1045), + (13857, 13857, 'accessories/wieldable_items/weapons/exp07/1h_sword/exp07_1h_cleaver', 1045), + (13858, 13858, 'accessories/wieldable_items/weapons/exp07/1h_sword/exp07_1h_cleaver_aged', 1045), + (13859, 13859, 'accessories/wieldable_items/weapons/exp07/1h_sword/exp07_1h_cleaver_battle', 1045), + (13860, 13860, 'accessories/wieldable_items/weapons/exp07/2h_crush/exp07_2h_hammer_velium', 1045), + (13861, 13861, 'accessories/wieldable_items/weapons/exp07/2h_crush/exp07_2h_hammer_piston', 1045), + (13862, 13862, 'projectiles/arrow_simple_plain_notes', 1045), + (13863, 13863, 'staticobjects/liveevent/frostfell/permafrost_frostfell_frozen_barrier', 1096), + (13864, 13864, 'accessories/wieldable_items/weapons/exp07/1h_sword/exp07_1h_sword_serrated', 1096), + (13865, 13865, 'accessories/wieldable_items/weapons/exp07/1h_sword/exp07_1h_sword_serrated_velium', 1096), + (13866, 13866, 'accessories/wieldable_items/weapons/exp07/1h_pierce/exp07_1hp_dagger_metal', 1096), + (13867, 13867, 'accessories/wieldable_items/weapons/exp07/1h_pierce/exp07_1hp_dagger2_metal', 1096), + (13868, 13868, 'accessories/wieldable_items/weapons/exp07/1h_pierce/exp07_1hp_dagger2_ornate_velium', 1096), + (13869, 13869, 'accessories/wieldable_items/weapons/exp07/1h_pierce/exp07_1hp_dagger2_velium', 1096), + (13870, 13870, 'accessories/wieldable_items/weapons/exp07/1h_pierce/exp07_1hp_dagger_infectedstone', 1096), + (13871, 13871, 'staticobjects/halloween/bef_asylum_skeleton_swinging01', 1096), + (13872, 13872, 'staticobjects/halloween/bef_asylum_skeleton_swinging02', 1096), + (13873, 13873, 'staticobjects/halloween/bef_hanging_bones_swinging', 1096), + (13874, 13874, 'staticobjects/halloween/dpo_bucket_of_apples', 1096), + (13875, 13875, 'staticobjects/halloween/dpo_candied_apple_plate', 1096), + (13876, 13876, 'staticobjects/halloween/dpo_canopic_jar_bats', 1096), + (13877, 13877, 'staticobjects/halloween/dpo_canopic_jar_spiders', 1096), + (13878, 13878, 'staticobjects/halloween/dpo_chaise_black_01', 1096), + (13879, 13879, 'staticobjects/halloween/dpo_chaise_orange_01', 1096), + (13880, 13880, 'staticobjects/halloween/dpo_chaise_red_01', 1096), + (13881, 13881, 'staticobjects/halloween/dpo_cookie_plate_halloween', 1096), + (13882, 13882, 'staticobjects/halloween/dpo_tapestry_design_notd_fire', 1096), + (13883, 13883, 'staticobjects/halloween/dpo_tapestry_design_notd_sky', 1096), + (13884, 13884, 'staticobjects/halloween/dpo_tapestry_design_notd_spider', 1096), + (13885, 13885, 'staticobjects/halloween/eu_chair_shrouded01', 1096), + (13886, 13886, 'staticobjects/halloween/eu_chair_shrouded_wfoot01', 1096), + (13887, 13887, 'staticobjects/halloween/eu_fireplace_toolset01', 1096), + (13888, 13888, 'staticobjects/halloween/eu_kitchen_hangingrack01', 1096), + (13889, 13889, 'staticobjects/halloween/eu_lightsource_floor_green_candelabra01', 1096), + (13890, 13890, 'staticobjects/halloween/eu_lightsource_floor_red_candelabra01', 1096), + (13891, 13891, 'staticobjects/halloween/kc_lightsource_green_iksarskull01', 1096), + (13892, 13892, 'staticobjects/halloween/kc_rug01', 1096), + (13893, 13893, 'staticobjects/halloween/kc_rug_long01', 1096), + (13894, 13894, 'staticobjects/halloween/kc_skull_dizok01', 1096), + (13895, 13895, 'staticobjects/halloween/lp_coffin_stone02', 1096), + (13896, 13896, 'staticobjects/halloween/mc_banner_vampire_hanging01', 1096), + (13897, 13897, 'staticobjects/halloween/mc_coffin_wood01', 1096), + (13898, 13898, 'staticobjects/tableware/hal_plate_stack_dpo', 1096), + (13899, 13899, 'staticobjects/tradeskill_objects/hal_spinningwheel01', 1096), + (13900, 13900, 'staticobjects/chests/chest002openbroken', 1096), + (13901, 13901, 'staticobjects/bucket/halas_bucket_snow03', 1096), + (13902, 13902, 'staticobjects/tradeskill_objects/hal_fabricroll_01', 1096), + (13903, 13903, 'staticobjects/tradeskill_objects/hal_fabricroll_02', 1096), + (13904, 13904, 'staticobjects/tradeskill_objects/hal_fabricroll_03', 1096), + (13905, 13905, 'creatures/mounts/storm_cloud_raf', 1096), + (13906, 13906, 'accessories/wearable_items/_exp07/asian_goth_armor/vanguard/skirt', 1096), + (13907, 13907, 'accessories/wearable_items/_exp07/asian_goth_armor/vanguard/chest', 1096), + (13908, 13908, 'accessories/wearable_items/_exp07/asian_goth_armor/vanguard/feet', 1096), + (13909, 13909, 'accessories/wearable_items/_exp07/asian_goth_armor/vanguard/forearms', 1096), + (13910, 13910, 'accessories/wearable_items/_exp07/asian_goth_armor/vanguard/hands', 1096), + (13911, 13911, 'accessories/wearable_items/_exp07/asian_goth_armor/vanguard/head', 1096), + (13912, 13912, 'accessories/wearable_items/_exp07/asian_goth_armor/vanguard/legs', 1096), + (13913, 13913, 'accessories/wearable_items/_exp07/asian_goth_armor/vanguard/legs_noskirt', 1096), + (13914, 13914, 'accessories/wearable_items/_exp07/asian_goth_armor/vanguard/right', 1096), + (13915, 13915, 'accessories/wearable_items/_exp07/asian_goth_armor/vanguard/shoulders', 1096), + (13916, 13916, 'accessories/wearable_items/_exp07/asian_goth_armor/vanguard/shoulders_asian_goth_pauldron', 1096), + (13917, 13917, 'accessories/wearable_items/_exp07/asian_goth_armor/vanguard/shoulders_nopauldrons', 1096), + (13918, 13918, 'accessories/wearable_items/_exp07/asian_goth_armor/vanguard/snapons/head_asian_goth_vanguard', 1096), + (13919, 13919, 'accessories/wearable_items/_exp07/asian_goth_armor/vanguard/snapons/asian_goth_pauldrons_lower_left', 1096), + (13920, 13920, 'accessories/wearable_items/_exp07/asian_goth_armor/vanguard/snapons/asian_goth_pauldrons_lower_right', 1096), + (13921, 13921, 'accessories/wearable_items/_exp07/asian_goth_armor/vanguard/snapons/asian_goth_pauldrons_upper_left', 1096), + (13922, 13922, 'accessories/wearable_items/_exp07/asian_goth_armor/vanguard/snapons/asian_goth_pauldrons_upper_right', 1096), + (13923, 13923, 'creatures/tu/goatman_wizard_white', 1096), + (13924, 13924, 'creatures/tu/goatman_priest_white', 1096), + (13925, 13925, 'creatures/tu/goatman_warlord_white', 1096), + (13926, 13926, 'creatures/tu/goatman_warrior_white', 1096), + (13927, 13927, 'creatures/tu/goatman_white', 1096), + (13928, 13928, 'accessories/wearable_items/_exp06/dragon_vanguard/dragon_pauldrons_right_nowings', 1096), + (13929, 13929, 'accessories/wearable_items/_exp06/dragon_vanguard/shoulders_dragon_pauldron_nowings', 1096), + (13930, 13930, 'accessories/wearable_items/_exp06/dragon_vanguard/dragon_pauldrons_left_nowings', 1096), + (13931, 13931, 'accessories/wearable_items/_exp07/rallos_zek_armor/rallos_zek_armor_leather/skirt', 1096), + (13932, 13932, 'accessories/wearable_items/_exp07/rallos_zek_armor/rallos_zek_armor_leather/chest', 1096), + (13933, 13933, 'accessories/wearable_items/_exp07/rallos_zek_armor/rallos_zek_armor_leather/feet', 1096), + (13934, 13934, 'accessories/wearable_items/_exp07/rallos_zek_armor/rallos_zek_armor_leather/forearms', 1096), + (13935, 13935, 'accessories/wearable_items/_exp07/rallos_zek_armor/rallos_zek_armor_leather/hands', 1096), + (13936, 13936, 'accessories/wearable_items/_exp07/rallos_zek_armor/rallos_zek_armor_leather/head', 1096), + (13937, 13937, 'accessories/wearable_items/_exp07/rallos_zek_armor/rallos_zek_armor_leather/head_rallos_zek_leather_helmet', 1096), + (13938, 13938, 'accessories/wearable_items/_exp07/rallos_zek_armor/rallos_zek_armor_leather/legs', 1096), + (13939, 13939, 'accessories/wearable_items/_exp07/rallos_zek_armor/rallos_zek_armor_leather/legs_noskirt', 1096), + (13940, 13940, 'accessories/wearable_items/_exp07/rallos_zek_armor/rallos_zek_armor_leather/shoulders_nopauldrons', 1096), + (13941, 13941, 'accessories/wearable_items/raf_helm/head', 1096), + (13942, 13942, 'staticobjects/liveevent/halloween/halloween_tile_bones_dpo', 1096), + (13943, 13943, 'staticobjects/halloween/vastydeep02_objects_sidetable03_dpo', 1096), + (13944, 13944, 'creatures/mounts/griffin_mount/griffin_mount_base', 1096), + (13945, 13945, 'ec/pc/barbarian/barbarian_female_albino_lipstat', 1096), + (13946, 13946, 'ec/pc/barbarian/barbarian_female_albino', 1096), + (13947, 13947, 'ec/pc/barbarian/barbarian_female_albino_headtat', 1096), + (13948, 13948, 'ec/pc/barbarian/barbarian_male_albino_maskedtat', 1096), + (13949, 13949, 'ec/pc/barbarian/barbarian_male_albino_skulltat', 1096), + (13950, 13950, 'ec/pc/barbarian/barbarian_male_albino', 1096), + (13951, 13951, 'accessories/wearable_items/_exp07/asian_goth_armor/leather/skirt', 1096), + (13952, 13952, 'accessories/wearable_items/_exp07/asian_goth_armor/leather/chest', 1096), + (13953, 13953, 'accessories/wearable_items/_exp07/asian_goth_armor/leather/feet', 1096), + (13954, 13954, 'accessories/wearable_items/_exp07/asian_goth_armor/leather/feet_dagger', 1096), + (13955, 13955, 'accessories/wearable_items/_exp07/asian_goth_armor/leather/forearms', 1096), + (13956, 13956, 'accessories/wearable_items/_exp07/asian_goth_armor/leather/hands', 1096), + (13957, 13957, 'accessories/wearable_items/_exp07/asian_goth_armor/leather/head', 1096), + (13958, 13958, 'accessories/wearable_items/_exp07/asian_goth_armor/leather/legs', 1096), + (13959, 13959, 'accessories/wearable_items/_exp07/asian_goth_armor/leather/legs_noskirt', 1096), + (13960, 13960, 'accessories/wearable_items/_exp07/asian_goth_armor/leather/shoulders', 1096), + (13961, 13961, 'accessories/wearable_items/_exp07/asian_goth_armor/leather/shoulders_no_pauldrons', 1096), + (13962, 13962, 'accessories/wearable_items/_exp07/asian_goth_armor/leather/shoulders_pauldrons_snapons', 1096), + (13963, 13963, 'accessories/wearable_items/_exp07/asian_goth_armor/leather/snapons/head_asian_goth_leather', 1096), + (13964, 13964, 'accessories/wearable_items/_exp07/asian_goth_armor/leather/snapons/asian_goth_leather_dagger', 1096), + (13965, 13965, 'accessories/wearable_items/_exp07/asian_goth_armor/leather/snapons/asian_goth_leather_pauldrons_left', 1096), + (13966, 13966, 'accessories/wearable_items/_exp07/asian_goth_armor/leather/snapons/asian_goth_leather_pauldrons_right', 1096), + (13967, 13967, 'accessories/wearable_items/_exp07/rallos_zek_armor/rallos_zek_armor_leather/shoulders_rallos_zek_epic_pauldrons', 1096), + (13968, 13968, 'accessories/wearable_items/_exp07/rallos_zek_armor/rallos_zek_armor_leather/hands_rallos_zek_leather_gauntlets', 1096), + (13969, 13969, 'accessories/wearable_items/_exp07/rallos_zek_armor/rallos_zek_armor_leather/legs_rallos_zek_shins', 1096), + (13970, 13970, 'accessories/wearable_items/_exp07/rallos_zek_armor/rallos_zek_armor_leather/rallos_zek_leather_gauntlets_forearm_left', 1096), + (13971, 13971, 'accessories/wearable_items/_exp07/rallos_zek_armor/rallos_zek_armor_leather/rallos_zek_leather_gauntlets_forearm_right', 1096), + (13972, 13972, 'accessories/wearable_items/_exp07/rallos_zek_armor/rallos_zek_armor_leather/rallos_zek_leather_pauldron_left', 1096), + (13973, 13973, 'accessories/wearable_items/_exp07/rallos_zek_armor/rallos_zek_armor_leather/rallos_zek_leather_pauldron_right', 1096), + (13974, 13974, 'accessories/wearable_items/_exp07/rallos_zek_armor/rallos_zek_armor_leather/rallos_zek_leather_shin_left', 1096), + (13975, 13975, 'accessories/wearable_items/_exp07/rallos_zek_armor/rallos_zek_armor_leather/rallos_zek_leather_shin_right', 1096), + (13976, 13976, 'accessories/wearable_items/cloak/exp07/cloak_rune_leather', 1096), + (13977, 13977, 'staticobjects/doors/halas_door03', 1096), + (13978, 13978, 'accessories/wieldable_items/weapons/exp07/1h_crush/1h_mace_rallosian_dull', 1096), + (13979, 13979, 'accessories/wieldable_items/weapons/exp07/1h_crush/1h_mace_rallosian', 1096), + (13980, 13980, 'accessories/wieldable_items/weapons/exp07/1h_pierce/exp07_1hp_dagger_rallosian', 1096), + (13981, 13981, 'accessories/wieldable_items/weapons/exp07/1h_pierce/exp07_1hp_dagger_rallosian_dull', 1096), + (13982, 13982, 'accessories/wieldable_items/weapons/exp07/1h_sword/exp07_1hs_sword_rallosian', 1096), + (13983, 13983, 'accessories/wieldable_items/weapons/exp07/1h_sword/exp07_1hs_sword_rallosian_dull', 1096), + (13984, 13984, 'accessories/wieldable_items/weapons/exp07/1h_sword/exp07_1hs_axe_rallosian', 1096), + (13985, 13985, 'accessories/wieldable_items/weapons/exp07/1h_sword/exp07_1hs_axe_rallosian_dull', 1096), + (13986, 13986, 'accessories/wieldable_items/weapons/exp07/2h_sword/exp07_2hs_axe_rallosian', 1096), + (13987, 13987, 'accessories/wieldable_items/weapons/exp07/2h_sword/exp07_2hs_axe_rallosian_dull', 1096), + (13988, 13988, 'accessories/wieldable_items/weapons/exp07/shield/exp07_shield_rallosian1', 1096), + (13989, 13989, 'accessories/wieldable_items/weapons/exp07/shield/exp07_shield_rallosian1_damaged', 1096), + (13990, 13990, 'accessories/wieldable_items/weapons/exp07/shield/exp07_shield_rallosian1_glow', 1096), + (13991, 13991, 'accessories/wieldable_items/weapons/exp07/shield/exp07_shield_rallosian2', 1096), + (13992, 13992, 'accessories/wieldable_items/weapons/exp07/shield/exp07_shield_rallosian2_damaged', 1096), + (13993, 13993, 'accessories/wieldable_items/weapons/exp07/shield/exp07_shield_rallosian2_damaged_glow', 1096), + (13994, 13994, 'accessories/wieldable_items/weapons/exp07/staff/exp07_2hp_spear_forked_dull', 1096), + (13995, 13995, 'accessories/wieldable_items/weapons/exp07/staff/exp07_2hp_spear_forked', 1096), + (13996, 13996, '_exp07/characters/tool_users/storm_giants/storm_giant_mage_02', 1096), + (13997, 13997, '_exp07/characters/tool_users/storm_giants/storm_giant_barbarian_01', 1096), + (13998, 13998, '_exp07/characters/tool_users/storm_giants/storm_giant_barbarian_02', 1096), + (13999, 13999, '_exp07/characters/tool_users/storm_giants/storm_giant_heavy_01', 1096), + (14000, 14000, '_exp07/characters/tool_users/storm_giants/storm_giant_heavy_02', 1096), + (14001, 14001, '_exp07/characters/tool_users/storm_giants/storm_giant_king', 1096), + (14002, 14002, '_exp07/characters/tool_users/storm_giants/storm_giant_mage_01', 1096), + (14003, 14003, 'creatures/tu/lava_earth_elem', 1096), + (14004, 14004, 'creatures/boss/fallengate_disease', 1096), + (14005, 14005, 'accessories/wearable_items/cloak/exp07/cloak_gothic_glass', 1096), + (14006, 14006, 'staticobjects/blacksmith/fprt_forge', 1096), + (14007, 14007, 'creatures/boss/fallengate_blue_black', 1096), + (14008, 14008, 'staticobjects/trainingdummy/kc_training_dummy', 1096), + (14009, 14009, 'staticobjects/trainingdummy/dpo_hanging_dummy_new', 1096), + (14010, 14010, 'staticobjects/trainingdummy/dpo_hanging_dummy_stained', 1096), + (14011, 14011, 'staticobjects/arches/kj_arch', 1096), + (14012, 14012, '_exp07/characters/tool_users/tserrina/tserrina_fly', 1096), + (14013, 14013, 'staticobjects/chests/dpo_gnomish_chest_lid', 1096), + (14014, 14014, 'staticobjects/chests/dpo_gnomish_chest_open', 1096), + (14015, 14015, '_exp06/zones/objects/exp06_dun_erudin_library/eru_exit_pillar', 1096), + (14016, 14016, '_exp07/characters/tool_users/storm_giants/storm_giant_heavy_03', 1096), + (14017, 14017, 'staticobjects/crystals/dpo_salt_crystal', 1096), + (14018, 14018, '_exp07/zones/exp07_dun_kraytocs_fortress/kraytocs_telescoping_pillar_barriers', 1096), + (14019, 14019, 'accessories/wearable_items/_exp07/rallos_zek_armor/rallos_zek_armor_chain/skirt', 1096), + (14020, 14020, 'accessories/wearable_items/_exp07/rallos_zek_armor/rallos_zek_armor_chain/chest', 1096), + (14021, 14021, 'accessories/wearable_items/_exp07/rallos_zek_armor/rallos_zek_armor_chain/feet', 1096), + (14022, 14022, 'accessories/wearable_items/_exp07/rallos_zek_armor/rallos_zek_armor_chain/forearms', 1096), + (14023, 14023, 'accessories/wearable_items/_exp07/rallos_zek_armor/rallos_zek_armor_chain/hands', 1096), + (14024, 14024, 'accessories/wearable_items/_exp07/rallos_zek_armor/rallos_zek_armor_chain/hands_rallos_zek_chain_gauntlets', 1096), + (14025, 14025, 'accessories/wearable_items/_exp07/rallos_zek_armor/rallos_zek_armor_chain/head', 1096), + (14026, 14026, 'accessories/wearable_items/_exp07/rallos_zek_armor/rallos_zek_armor_chain/head_rallos_zek_chain_helmet', 1096), + (14027, 14027, 'accessories/wearable_items/_exp07/rallos_zek_armor/rallos_zek_armor_chain/legs', 1096), + (14028, 14028, 'accessories/wearable_items/_exp07/rallos_zek_armor/rallos_zek_armor_chain/legs_noskirt', 1096), + (14029, 14029, 'accessories/wearable_items/_exp07/rallos_zek_armor/rallos_zek_armor_chain/legs_rallos_zek_shins', 1096), + (14030, 14030, 'accessories/wearable_items/_exp07/rallos_zek_armor/rallos_zek_armor_chain/rallos_zek_chain_gauntlets_forearm_left', 1096), + (14031, 14031, 'accessories/wearable_items/_exp07/rallos_zek_armor/rallos_zek_armor_chain/rallos_zek_chain_gauntlets_forearm_right', 1096), + (14032, 14032, 'accessories/wearable_items/_exp07/rallos_zek_armor/rallos_zek_armor_chain/rallos_zek_chain_pauldron_left', 1096), + (14033, 14033, 'accessories/wearable_items/_exp07/rallos_zek_armor/rallos_zek_armor_chain/rallos_zek_chain_pauldron_right', 1096), + (14034, 14034, 'accessories/wearable_items/_exp07/rallos_zek_armor/rallos_zek_armor_chain/rallos_zek_chain_shin_left', 1096), + (14035, 14035, 'accessories/wearable_items/_exp07/rallos_zek_armor/rallos_zek_armor_chain/rallos_zek_chain_shin_right', 1096), + (14036, 14036, 'accessories/wearable_items/_exp07/rallos_zek_armor/rallos_zek_armor_chain/shoulders', 1096), + (14037, 14037, 'accessories/wearable_items/_exp07/rallos_zek_armor/rallos_zek_armor_chain/shoulders_nopauldrons', 1096), + (14038, 14038, 'accessories/wearable_items/_exp07/rallos_zek_armor/rallos_zek_armor_chain/shoulders_rallos_zek_epic_pauldrons', 1096), + (14039, 14039, '_exp07/zones/exp07_dun_kraytocs_fortress/kraytocs_telescoping_pillars', 1096), + (14040, 14040, 'accessories/wearable_items/cloak/exp07/cloak_sky_clouds', 1096), + (14041, 14041, 'accessories/wearable_items/cloak/exp07/cloak_sky_storm', 1096), + (14042, 14042, 'accessories/wearable_items/_exp08/dragon_armor/vanguard_shadow/hands', 1096), + (14043, 14043, 'ec/pc/darkelf/darkelf_male_zombie', 1096), + (14044, 14044, 'ec/pc/darkelf/darkelf_female_zombie', 1096), + (14045, 14045, 'staticobjects/rocks/rock03', 1096), + (14046, 14046, 'creatures/pets/spirit_totem', 1096), + (14047, 14047, '_exp07/zones/exp07_dun_kraytocs_fortress/dragon_room_hot', 1096), + (14048, 14048, '_exp07/zones/exp07_dun_kraytocs_fortress/dragon_room_cold', 1096), + (14049, 14049, '_exp03/zones/objects/greater_faydark/crates/gf_crate_long_elf01', 1096), + (14050, 14050, '_exp03/zones/objects/greater_faydark/crates/gf_crate_small_elf01', 1096), + (14051, 14051, 'staticobjects/barricades/hal_barricade_shipwreck_01', 1096), + (14052, 14052, 'staticobjects/barricades/hal_barricade_shipwreck_02', 1096), + (14053, 14053, 'staticobjects/barricades/hal_barricade_shipwreck_03', 1096), + (14054, 14054, 'creatures/mounts/horse_sun/horse_sun', 1096), + (14055, 14055, 'creatures/mounts/warg_mount/warg_armor04_lava', 1096), + (14056, 14056, 'staticobjects/rubble/steaming_ash_pile', 1096), + (14057, 14057, 'accessories/wearable_items/cloak/exp07/cloak_tree', 1096), + (14058, 14058, 'accessories/wearable_items/cloak/exp07/cloak_aurora', 1096), + (14059, 14059, 'accessories/wearable_items/cloak/exp07/cloak_rune_parchment', 1096), + (14060, 14060, 'staticobjects/barricades/dpo_barricade_steamfont', 1096), + (14061, 14061, 'staticobjects/catapult/dpo_harpoon_launcher_steamfont', 1096), + (14062, 14062, 'accessories/wearable_items/_exp07/antonican_crusader_vanguard/skirt', 1096), + (14063, 14063, 'accessories/wearable_items/_exp07/antonican_crusader_vanguard/chest', 1096), + (14064, 14064, 'accessories/wearable_items/_exp07/antonican_crusader_vanguard/feet', 1096), + (14065, 14065, 'accessories/wearable_items/_exp07/antonican_crusader_vanguard/forearms', 1096), + (14066, 14066, 'accessories/wearable_items/_exp07/antonican_crusader_vanguard/hands', 1096), + (14067, 14067, 'accessories/wearable_items/_exp07/antonican_crusader_vanguard/head', 1096), + (14068, 14068, 'accessories/wearable_items/_exp07/antonican_crusader_vanguard/head_epic', 1096), + (14069, 14069, 'accessories/wearable_items/_exp07/antonican_crusader_vanguard/legs', 1096), + (14070, 14070, 'accessories/wearable_items/_exp07/antonican_crusader_vanguard/legs_noskirt', 1096), + (14071, 14071, 'accessories/wearable_items/_exp07/antonican_crusader_vanguard/pauldron_left', 1096), + (14072, 14072, 'accessories/wearable_items/_exp07/antonican_crusader_vanguard/pauldron_right', 1096), + (14073, 14073, 'accessories/wearable_items/_exp07/antonican_crusader_vanguard/right', 1096), + (14074, 14074, 'accessories/wearable_items/_exp07/antonican_crusader_vanguard/shoulders', 1096), + (14075, 14075, 'accessories/wearable_items/_exp07/antonican_crusader_vanguard/shoulders_epic', 1096), + (14076, 14076, 'accessories/wearable_items/_exp07/antonican_crusader_vanguard/shoulders_nopauldrons', 1096), + (14077, 14077, 'accessories/wieldable_items/weapons/exp07/1h_crush/1h_wand_deathbringer_glow', 1096), + (14078, 14078, 'accessories/wieldable_items/weapons/exp07/1h_crush/1h_hammer_deathbringer', 1096), + (14079, 14079, 'accessories/wieldable_items/weapons/exp07/1h_crush/1h_hammer_deathbringer_glow', 1096), + (14080, 14080, 'accessories/wieldable_items/weapons/exp07/1h_crush/1h_mace_deathbringer', 1096), + (14081, 14081, 'accessories/wieldable_items/weapons/exp07/1h_crush/1h_mace_deathbringer_glow', 1096), + (14082, 14082, 'accessories/wieldable_items/weapons/exp07/1h_crush/1h_wand_deathbringer', 1096), + (14083, 14083, 'accessories/wieldable_items/weapons/exp07/1h_pierce/exp07_1hp_dagger_deathbringer_glow', 1096), + (14084, 14084, 'accessories/wieldable_items/weapons/exp07/1h_pierce/exp07_1hp_dagger_deathbringer', 1096), + (14085, 14085, 'accessories/wieldable_items/weapons/exp07/1h_sword/exp07_1hs_sword_deathbringer_glow', 1096), + (14086, 14086, 'accessories/wieldable_items/weapons/exp07/1h_sword/exp07_1hs_sword_deathbringer', 1096), + (14087, 14087, 'accessories/wieldable_items/weapons/exp07/2h_sword/exp07_2hs_sword_deathbringer_glow', 1096), + (14088, 14088, 'accessories/wieldable_items/weapons/exp07/2h_sword/exp07_2hs_sword_deathbringer', 1096), + (14089, 14089, 'accessories/wieldable_items/weapons/exp07/1h_crush/1h_wand_deathbringer_glowfx', 1096), + (14090, 14090, 'accessories/wieldable_items/weapons/exp07/1h_crush/1h_hammer_deathbringer_glowfx', 1096), + (14091, 14091, 'accessories/wieldable_items/weapons/exp07/1h_crush/1h_mace_deathbringer_glowfx', 1096), + (14092, 14092, 'accessories/wieldable_items/weapons/exp07/1h_pierce/exp07_1hp_dagger_deathbringer_glowfx', 1096), + (14093, 14093, 'accessories/wieldable_items/weapons/exp07/1h_sword/exp07_1hs_sword_deathbringer_glowfx', 1096), + (14094, 14094, 'accessories/wieldable_items/weapons/exp07/2h_sword/exp07_2hs_sword_deathbringer_glowfx', 1096), + (14095, 14095, 'staticobjects/draconic_widgets/solro_dragonpost', 1096), + (14096, 14096, 'staticobjects/bones/dpo_lost_soul', 1096), + (14097, 14097, 'staticobjects/chests/dpo_nek_skull_chest', 1096), + (14098, 14098, 'staticobjects/signs/neriak/darklight_wall_sign', 1096), + (14099, 14099, 'staticobjects/coffins_and_sarcophagus/dpo_thexian_sarcophagus_lid', 1096), + (14100, 14100, 'staticobjects/signs/neriak/darklight_wall_sign_batwings', 1096), + (14101, 14101, 'staticobjects/signs/neriak/darklight_wall_sign_spider', 1096), + (14102, 14102, 'staticobjects/portals/guk_spire_portal', 1096), + (14103, 14103, 'accessories/wearable_items/_exp07/station_cash_armor/casual_clothing/casual_clothing_plain/legs', 1096), + (14104, 14104, 'accessories/wearable_items/_exp07/station_cash_armor/casual_clothing/casual_clothing_plain/belt', 1096), + (14105, 14105, 'accessories/wearable_items/_exp07/station_cash_armor/casual_clothing/casual_clothing_plain/chest', 1096), + (14106, 14106, 'accessories/wearable_items/_exp07/station_cash_armor/casual_clothing/casual_clothing_plain/feet', 1096), + (14107, 14107, 'accessories/wieldable_items/weapons/exp07/1h_pierce/exp07_1hp_guk', 1096), + (14108, 14108, 'accessories/wieldable_items/weapons/exp07/bow/exp07_guk_bow', 1096), + (14109, 14109, 'accessories/wieldable_items/weapons/exp07/shield/exp07_guk_shield', 1096), + (14110, 14110, 'accessories/wieldable_items/weapons/exp07/talisman/exp07_orb_gukvdl', 1096), + (14111, 14111, 'accessories/wieldable_items/weapons/exp07/talisman/exp07_talisman_guk', 1096), + (14112, 14112, 'creatures/mounts/odus_prowler/odus_prowler_black_void', 1096), + (14113, 14113, 'staticobjects/crates/animated_crate_tinkered', 1096), + (14114, 14114, 'accessories/wearable_items/_exp07/bloodsaber_deathknight/skirt', 1096), + (14115, 14115, 'accessories/wearable_items/_exp07/bloodsaber_deathknight/chest', 1096), + (14116, 14116, 'accessories/wearable_items/_exp07/bloodsaber_deathknight/feet', 1096), + (14117, 14117, 'accessories/wearable_items/_exp07/bloodsaber_deathknight/forearms', 1096), + (14118, 14118, 'accessories/wearable_items/_exp07/bloodsaber_deathknight/hands', 1096), + (14119, 14119, 'accessories/wearable_items/_exp07/bloodsaber_deathknight/head', 1096), + (14120, 14120, 'accessories/wearable_items/_exp07/bloodsaber_deathknight/head_epic', 1096), + (14121, 14121, 'accessories/wearable_items/_exp07/bloodsaber_deathknight/legs', 1096), + (14122, 14122, 'accessories/wearable_items/_exp07/bloodsaber_deathknight/legs_noskirt', 1096), + (14123, 14123, 'accessories/wearable_items/_exp07/bloodsaber_deathknight/pauldrons_left', 1096), + (14124, 14124, 'accessories/wearable_items/_exp07/bloodsaber_deathknight/pauldrons_right', 1096), + (14125, 14125, 'accessories/wearable_items/_exp07/bloodsaber_deathknight/right', 1096), + (14126, 14126, 'accessories/wearable_items/_exp07/bloodsaber_deathknight/shoulders', 1096), + (14127, 14127, 'accessories/wearable_items/_exp07/bloodsaber_deathknight/shoulders_epic', 1096), + (14128, 14128, 'accessories/wearable_items/_exp07/bloodsaber_deathknight/shoulders_nopauldrons', 1096), + (14129, 14129, 'accessories/wearable_items/cloak/exp07/cloak_shroud_faithful', 1096), + (14130, 14130, 'accessories/wearable_items/_exp07/nizaran_assassin_armor/skirt', 1096), + (14131, 14131, 'accessories/wearable_items/_exp07/nizaran_assassin_armor/chest', 1096), + (14132, 14132, 'accessories/wearable_items/_exp07/nizaran_assassin_armor/feet', 1096), + (14133, 14133, 'accessories/wearable_items/_exp07/nizaran_assassin_armor/forearms', 1096), + (14134, 14134, 'accessories/wearable_items/_exp07/nizaran_assassin_armor/hands', 1096), + (14135, 14135, 'accessories/wearable_items/_exp07/nizaran_assassin_armor/head', 1096), + (14136, 14136, 'accessories/wearable_items/_exp07/nizaran_assassin_armor/legs', 1096), + (14137, 14137, 'accessories/wearable_items/_exp07/nizaran_assassin_armor/legs_noskirt', 1096), + (14138, 14138, 'accessories/wearable_items/_exp07/nizaran_assassin_armor/shoulders', 1096), + (14139, 14139, 'accessories/wieldable_items/weapons/exp07/2h_crush/exp07_2h_hammer_deathbringer_glow', 1096), + (14140, 14140, 'accessories/wieldable_items/weapons/exp07/2h_crush/exp07_2h_hammer_deathbringer', 1096), + (14141, 14141, 'accessories/wieldable_items/weapons/exp07/staff/exp07_staff_deathbringer_glow', 1096), + (14142, 14142, 'accessories/wieldable_items/weapons/exp07/staff/exp07_staff_deathbringer', 1096), + (14143, 14143, 'accessories/wearable_items/cloak/exp07/cloak_dark_elf_chain', 1096), + (14144, 14144, 'accessories/wearable_items/_exp07/station_cash_armor/dark_elf_armor_chain/skirt', 1096), + (14145, 14145, 'accessories/wearable_items/_exp07/station_cash_armor/dark_elf_armor_chain/chest', 1096), + (14146, 14146, 'accessories/wearable_items/_exp07/station_cash_armor/dark_elf_armor_chain/dark_elf_chain_collar', 1096), + (14147, 14147, 'accessories/wearable_items/_exp07/station_cash_armor/dark_elf_armor_chain/dark_elf_chain_forearm_left', 1096), + (14148, 14148, 'accessories/wearable_items/_exp07/station_cash_armor/dark_elf_armor_chain/dark_elf_chain_forearm_right', 1096), + (14149, 14149, 'accessories/wearable_items/_exp07/station_cash_armor/dark_elf_armor_chain/dark_elf_chain_pauldron_left', 1096), + (14150, 14150, 'accessories/wearable_items/_exp07/station_cash_armor/dark_elf_armor_chain/dark_elf_chain_pauldron_right', 1096), + (14151, 14151, 'accessories/wearable_items/_exp07/station_cash_armor/dark_elf_armor_chain/dark_elf_chain_shin_left', 1096), + (14152, 14152, 'accessories/wearable_items/_exp07/station_cash_armor/dark_elf_armor_chain/dark_elf_chain_shin_right', 1096), + (14153, 14153, 'accessories/wearable_items/_exp07/station_cash_armor/dark_elf_armor_chain/dark_elf_chain_upperarm_left', 1096), + (14154, 14154, 'accessories/wearable_items/_exp07/station_cash_armor/dark_elf_armor_chain/dark_elf_chain_upperarm_right', 1096), + (14155, 14155, 'accessories/wearable_items/_exp07/station_cash_armor/dark_elf_armor_chain/feet', 1096), + (14156, 14156, 'accessories/wearable_items/_exp07/station_cash_armor/dark_elf_armor_chain/feet_dark_elf_shin', 1096), + (14157, 14157, 'accessories/wearable_items/_exp07/station_cash_armor/dark_elf_armor_chain/forearms', 1096), + (14158, 14158, 'accessories/wearable_items/_exp07/station_cash_armor/dark_elf_armor_chain/forearms_dark_elf', 1096), + (14159, 14159, 'accessories/wearable_items/_exp07/station_cash_armor/dark_elf_armor_chain/hands', 1096), + (14160, 14160, 'accessories/wearable_items/_exp07/station_cash_armor/dark_elf_armor_chain/head', 1096), + (14161, 14161, 'accessories/wearable_items/_exp07/station_cash_armor/dark_elf_armor_chain/head_dark_elf_chain_helmet', 1096), + (14162, 14162, 'accessories/wearable_items/_exp07/station_cash_armor/dark_elf_armor_chain/legs', 1096), + (14163, 14163, 'accessories/wearable_items/_exp07/station_cash_armor/dark_elf_armor_chain/legs_noskirt', 1096), + (14164, 14164, 'accessories/wearable_items/_exp07/station_cash_armor/dark_elf_armor_chain/shoulders', 1096), + (14165, 14165, 'accessories/wearable_items/_exp07/station_cash_armor/dark_elf_armor_chain/shoulders_dark_elf_lower', 1096), + (14166, 14166, 'accessories/wearable_items/_exp07/station_cash_armor/dark_elf_armor_chain/shoulders_dark_elf_pauldrons', 1096), + (14167, 14167, 'accessories/wearable_items/_exp07/rallos_zek_armor/rallos_zek_armor_chain/shoulders_rallos_zek_small_pauldrons', 1096), + (14168, 14168, 'accessories/wearable_items/_exp07/rallos_zek_armor/rallos_zek_armor_chain/rallos_zek_chain_pauldron_small_left', 1096), + (14169, 14169, 'accessories/wearable_items/_exp07/rallos_zek_armor/rallos_zek_armor_chain/rallos_zek_chain_pauldron_small_right', 1096), + (14170, 14170, 'accessories/wieldable_items/shields/exp07/sea_turtle_shield', 1096), + (14171, 14171, 'accessories/wieldable_items/weapons/exp07/2h_crush/exp07_2h_hammer_deathbringer_glow_fx', 1096), + (14172, 14172, 'accessories/wieldable_items/weapons/exp07/staff/exp07_staff_deathbringer_glow_fx', 1096), + (14173, 14173, 'creatures/tu/gods_rallos_zek_new', 1096), + (14174, 14174, '_exp02/zones/objects/rock_pile/rn_rocks_obsidianclump04', 1096), + (14175, 14175, '_exp02/zones/objects/rock_pile/rn_rocks_lavarock02clump06', 1096), + (14176, 14176, '_exp02/zones/objects/rock_pile/rn_rocks_lavarockclump01', 1096), + (14177, 14177, '_exp02/zones/objects/rock_pile/rn_rocks_lavarockclump03', 1096), + (14178, 14178, '_exp02/zones/objects/rock_pile/rn_rocks_lavarockclump04', 1096), + (14179, 14179, '_exp02/zones/objects/rock_pile/rn_rocks_lavarockclump05', 1096), + (14180, 14180, '_exp02/zones/objects/rock_pile/rn_rocks_lavarockclump06', 1096), + (14181, 14181, '_exp02/zones/objects/rock_pile/rn_rocks_obsidianclump01', 1096), + (14182, 14182, '_exp02/zones/objects/rock_pile/rn_rocks_obsidianclump02', 1096), + (14183, 14183, '_exp02/zones/objects/rock_pile/rn_rocks_obsidianclump03', 1096), + (14184, 14184, '_exp02/zones/objects/dragon_bones/rn_bones_dragon_largerib01', 1096), + (14185, 14185, '_exp02/zones/objects/dragon_bones/rn_bones_dragon_skullhalf01', 1096), + (14186, 14186, 'staticobjects/liveevent/contest_painting_july10/contest_painting_adiene', 1096), + (14187, 14187, 'staticobjects/liveevent/contest_painting_july10/contest_painting_ainaree', 1096), + (14188, 14188, 'staticobjects/liveevent/contest_painting_july10/contest_painting_corisu', 1096), + (14189, 14189, 'staticobjects/liveevent/contest_painting_july10/contest_painting_diamante', 1096), + (14190, 14190, 'staticobjects/liveevent/contest_painting_july10/contest_painting_enna', 1096), + (14191, 14191, 'staticobjects/liveevent/contest_painting_july10/contest_painting_erithe', 1096), + (14192, 14192, 'staticobjects/liveevent/contest_painting_july10/contest_painting_hortensia', 1096), + (14193, 14193, 'staticobjects/liveevent/contest_painting_july10/contest_painting_inni', 1096), + (14194, 14194, 'staticobjects/liveevent/contest_painting_july10/contest_painting_lillyaana', 1096), + (14195, 14195, 'staticobjects/liveevent/contest_painting_july10/contest_painting_shanyssa', 1096), + (14196, 14196, 'accessories/wearable_items/_exp07/station_cash_armor/casual_clothing/casual_clothing_tartan/shoulders', 1096), + (14197, 14197, 'accessories/wearable_items/_exp07/station_cash_armor/casual_clothing/casual_clothing_tartan/belt', 1096), + (14198, 14198, 'accessories/wearable_items/_exp07/station_cash_armor/casual_clothing/casual_clothing_tartan/chest', 1096), + (14199, 14199, 'accessories/wearable_items/_exp07/station_cash_armor/casual_clothing/casual_clothing_tartan/feet', 1096), + (14200, 14200, 'accessories/wearable_items/_exp07/station_cash_armor/casual_clothing/casual_clothing_tartan/legs', 1096), + (14201, 14201, 'staticobjects/tradeskill_objects/hal_spinningwheel01_broken', 1096), + (14202, 14202, 'staticobjects/tradeskill_objects/hal_crate_broken_plates', 1096), + (14203, 14203, 'accessories/wearable_items/_exp06/dragon_chain/shoulders_pauldrons_epic', 1096), + (14204, 14204, 'accessories/wearable_items/_exp06/dragon_chain/dragon_pauldron_left_epic', 1096), + (14205, 14205, 'accessories/wearable_items/_exp06/dragon_chain/dragon_pauldron_right_epic', 1096), + (14206, 14206, 'accessories/wearable_items/_exp06/dragon_leather/shoulders_pauldrons_epic', 1096), + (14207, 14207, 'accessories/wearable_items/_exp06/dragon_robe/chest_pauldrons_epic', 1096), + (14208, 14208, 'accessories/wearable_items/_exp06/dragon_vanguard/shoulders_dragon_pauldron_epic', 1096), + (14209, 14209, 'accessories/wearable_items/_exp06/dragon_vanguard/dragon_pauldrons_left_epic', 1096), + (14210, 14210, 'accessories/wearable_items/_exp06/dragon_vanguard/dragon_pauldrons_right_epic', 1096), + (14211, 14211, 'staticobjects/tradeskill_objects/hal_fabricroll_damaged', 1096), + (14212, 14212, 'staticobjects/liveevent/frostfell/dpo_bauble_bell_blue01', 1096), + (14213, 14213, 'staticobjects/liveevent/frostfell/dpo_bauble_bell_gold01', 1096), + (14214, 14214, 'staticobjects/liveevent/frostfell/dpo_bauble_bell_green01', 1096), + (14215, 14215, 'staticobjects/liveevent/frostfell/dpo_bauble_bell_red01', 1096), + (14216, 14216, 'staticobjects/liveevent/frostfell/dpo_bauble_bell_silver01', 1096), + (14217, 14217, 'staticobjects/liveevent/frostfell/dpo_bauble_glass_icicle01', 1096), + (14218, 14218, 'staticobjects/liveevent/frostfell/dpo_bauble_oblong_redgold01', 1096), + (14219, 14219, 'staticobjects/liveevent/frostfell/dpo_bauble_oblong_silvergrn01', 1096), + (14220, 14220, 'staticobjects/liveevent/frostfell/dpo_holiday_bow_wall_blugrn', 1096), + (14221, 14221, 'staticobjects/liveevent/frostfell/dpo_holiday_bow_wall_pinkpat', 1096), + (14222, 14222, 'staticobjects/liveevent/frostfell/dpo_holiday_bow_wall_pursnow', 1096), + (14223, 14223, 'staticobjects/liveevent/frostfell/dpo_holiday_bow_wall_purstripe', 1096), + (14224, 14224, 'staticobjects/liveevent/frostfell/dpo_holiday_bow_wall_redstar', 1096), + (14225, 14225, 'staticobjects/liveevent/frostfell/dpo_holiday_bow_wall_yellowgrn', 1096), + (14226, 14226, 'staticobjects/liveevent/frostfell/dpo_room_divider_basic_purple_snowflakes', 1096), + (14227, 14227, 'staticobjects/liveevent/frostfell/dpo_room_divider_basic_red', 1096), + (14228, 14228, 'staticobjects/liveevent/frostfell/dpo_room_divider_basic_red_stars', 1096), + (14229, 14229, 'staticobjects/liveevent/frostfell/dpo_room_divider_gingerbread', 1096), + (14230, 14230, 'staticobjects/liveevent/frostfell/dpo_tree_rug_blue', 1096), + (14231, 14231, 'staticobjects/liveevent/frostfell/dpo_tree_rug_gold', 1096), + (14232, 14232, 'staticobjects/liveevent/frostfell/dpo_tree_rug_grn', 1096), + (14233, 14233, 'staticobjects/liveevent/frostfell/dpo_tree_rug_red', 1096), + (14234, 14234, 'staticobjects/liveevent/frostfell/holiday_figgypudding', 1096), + (14235, 14235, 'accessories/wieldable_items/weapons/exp07/shield/exp07_shield_tower_deathbringer_glow', 1096), + (14236, 14236, 'accessories/wieldable_items/weapons/exp07/shield/exp07_shield_round_deathbringer', 1096), + (14237, 14237, 'accessories/wieldable_items/weapons/exp07/shield/exp07_shield_round_deathbringer_glow', 1096), + (14238, 14238, 'accessories/wieldable_items/weapons/exp07/shield/exp07_shield_tower_deathbringer', 1096), + (14239, 14239, 'accessories/wieldable_items/weapons/exp07/bow/exp07_bow_deathbringer_glow', 1096), + (14240, 14240, 'accessories/wieldable_items/weapons/exp07/bow/exp07_bow_deathbringer', 1096), + (14241, 14241, 'staticobjects/bookcases/dpo_miragul_bookcase01', 1096), + (14242, 14242, 'staticobjects/books/dpo_miragul_bookstack_ice_short01', 1096), + (14243, 14243, 'staticobjects/lighting/dpo_miragul_lightsource_brazier_short01', 1096), + (14244, 14244, 'staticobjects/kitchen/sen_plate_small_orange_dpo', 1096), + (14245, 14245, 'staticobjects/tables/dpo_sen_small_table_01', 1096), + (14246, 14246, 'staticobjects/_exp07/exp07_dun_tower_of_frozen_shadow/tofs_mirror_01', 1096), + (14247, 14247, 'staticobjects/_exp07/exp07_dun_tower_of_frozen_shadow/tofs_mirror_fragment_01', 1096), + (14248, 14248, 'staticobjects/_exp07/exp07_dun_tower_of_frozen_shadow/tofs_mirror_fragment_02', 1096), + (14249, 14249, 'staticobjects/_exp07/exp07_dun_tower_of_frozen_shadow/tofs_mirror_fragment_03', 1096), + (14250, 14250, 'staticobjects/_exp07/exp07_dun_tower_of_frozen_shadow/tofs_mirror_fragment_04', 1096), + (14251, 14251, 'staticobjects/_exp07/exp07_dun_tower_of_frozen_shadow/tofs_mirror_fragment_05', 1096), + (14252, 14252, 'staticobjects/_exp07/exp07_dun_tower_of_frozen_shadow/tofs_mirror_fragment_06', 1096), + (14253, 14253, '_exp01/zones/objects/light_sources/pf_lightsource_nomad_torch01', 1096), + (14254, 14254, 'accessories/wieldable_items/weapons/exp07/1h_sword/goth_axe_1_hand_01', 1096), + (14255, 14255, '_exp07/characters/tool_users/othmir/othmir_male_warrior_03_black', 1096), + (14256, 14256, '_exp07/characters/tool_users/othmir/othmir_female_base', 1096), + (14257, 14257, '_exp07/characters/tool_users/othmir/othmir_female_peasent_01', 1096), + (14258, 14258, '_exp07/characters/tool_users/othmir/othmir_female_peasent_01_spotted', 1096), + (14259, 14259, '_exp07/characters/tool_users/othmir/othmir_female_peasent_02', 1096), + (14260, 14260, '_exp07/characters/tool_users/othmir/othmir_female_peasent_02_dark', 1096), + (14261, 14261, '_exp07/characters/tool_users/othmir/othmir_female_shaman', 1096), + (14262, 14262, '_exp07/characters/tool_users/othmir/othmir_female_shaman_pattern', 1096), + (14263, 14263, '_exp07/characters/tool_users/othmir/othmir_male_base', 1096), + (14264, 14264, '_exp07/characters/tool_users/othmir/othmir_male_king', 1096), + (14265, 14265, '_exp07/characters/tool_users/othmir/othmir_male_shaman', 1096), + (14266, 14266, '_exp07/characters/tool_users/othmir/othmir_male_warrior_01', 1096), + (14267, 14267, '_exp07/characters/tool_users/othmir/othmir_male_warrior_01_black', 1096), + (14268, 14268, '_exp07/characters/tool_users/othmir/othmir_male_warrior_01_spotted', 1096), + (14269, 14269, '_exp07/characters/tool_users/othmir/othmir_male_warrior_02', 1096), + (14270, 14270, '_exp07/characters/tool_users/othmir/othmir_male_warrior_02_black', 1096), + (14271, 14271, '_exp07/characters/tool_users/othmir/othmir_male_warrior_02_spotted', 1096), + (14272, 14272, '_exp07/characters/tool_users/othmir/othmir_male_warrior_02_white', 1096), + (14273, 14273, '_exp07/characters/tool_users/othmir/othmir_male_warrior_03', 1096), + (14274, 14274, '_exp07/characters/tool_users/tallonite_female/tallonite_female_plate', 1096), + (14275, 14275, '_exp07/characters/tool_users/tallonite_female/tallonite_female_fighter', 1096), + (14276, 14276, '_exp07/characters/tool_users/tallonite_female/tallonite_female_mage', 1096), + (14277, 14277, '_exp07/characters/tool_users/othmir/othmir_male_peasant_02', 1096), + (14278, 14278, 'accessories/wearable_items/_exp07/rallos_zek_armor/rallos_zek_armor_vanguard/skirt', 1096), + (14279, 14279, 'accessories/wearable_items/_exp07/rallos_zek_armor/rallos_zek_armor_vanguard/chest', 1096), + (14280, 14280, 'accessories/wearable_items/_exp07/rallos_zek_armor/rallos_zek_armor_vanguard/feet', 1096), + (14281, 14281, 'accessories/wearable_items/_exp07/rallos_zek_armor/rallos_zek_armor_vanguard/feet_rallos_zek_vanguard_shin_braces', 1096), + (14282, 14282, 'accessories/wearable_items/_exp07/rallos_zek_armor/rallos_zek_armor_vanguard/forearms', 1096), + (14283, 14283, 'accessories/wearable_items/_exp07/rallos_zek_armor/rallos_zek_armor_vanguard/hands', 1096), + (14284, 14284, 'accessories/wearable_items/_exp07/rallos_zek_armor/rallos_zek_armor_vanguard/hands_rallos_zek_vanguard_gauntlets', 1096), + (14285, 14285, 'accessories/wearable_items/_exp07/rallos_zek_armor/rallos_zek_armor_vanguard/head', 1096), + (14286, 14286, 'accessories/wearable_items/_exp07/rallos_zek_armor/rallos_zek_armor_vanguard/head_rallos_zek_vanguard_helmet', 1096), + (14287, 14287, 'accessories/wearable_items/_exp07/rallos_zek_armor/rallos_zek_armor_vanguard/legs', 1096), + (14288, 14288, 'accessories/wearable_items/_exp07/rallos_zek_armor/rallos_zek_armor_vanguard/legs_noskirt', 1096), + (14289, 14289, 'accessories/wearable_items/_exp07/rallos_zek_armor/rallos_zek_armor_vanguard/legs_noskirt_rallos_zek_vanguard_shin_braces', 1096), + (14290, 14290, 'accessories/wearable_items/_exp07/rallos_zek_armor/rallos_zek_armor_vanguard/legs_rallos_zek_vanguard_shin_braces', 1096), + (14291, 14291, 'accessories/wearable_items/_exp07/rallos_zek_armor/rallos_zek_armor_vanguard/rallos_zek_vanguard_forearm_left', 1096), + (14292, 14292, 'accessories/wearable_items/_exp07/rallos_zek_armor/rallos_zek_armor_vanguard/rallos_zek_vanguard_forearm_right', 1096), + (14293, 14293, 'accessories/wearable_items/_exp07/rallos_zek_armor/rallos_zek_armor_vanguard/rallos_zek_vanguard_pauldron_epic_left', 1096), + (14294, 14294, 'accessories/wearable_items/_exp07/rallos_zek_armor/rallos_zek_armor_vanguard/rallos_zek_vanguard_pauldron_epic_right', 1096), + (14295, 14295, 'accessories/wearable_items/_exp07/rallos_zek_armor/rallos_zek_armor_vanguard/rallos_zek_vanguard_pauldron_small_left', 1096), + (14296, 14296, 'accessories/wearable_items/_exp07/rallos_zek_armor/rallos_zek_armor_vanguard/rallos_zek_vanguard_pauldron_small_right', 1096), + (14297, 14297, 'accessories/wearable_items/_exp07/rallos_zek_armor/rallos_zek_armor_vanguard/rallos_zek_vanguard_shin_left', 1096), + (14298, 14298, 'accessories/wearable_items/_exp07/rallos_zek_armor/rallos_zek_armor_vanguard/rallos_zek_vanguard_shin_right', 1096), + (14299, 14299, 'accessories/wearable_items/_exp07/rallos_zek_armor/rallos_zek_armor_vanguard/right', 1096), + (14300, 14300, 'accessories/wearable_items/_exp07/rallos_zek_armor/rallos_zek_armor_vanguard/shoulders', 1096), + (14301, 14301, 'accessories/wearable_items/_exp07/rallos_zek_armor/rallos_zek_armor_vanguard/shoulders_nopauldrons', 1096), + (14302, 14302, 'accessories/wearable_items/_exp07/rallos_zek_armor/rallos_zek_armor_vanguard/shoulders_rallos_zek_epic_pauldrons', 1096), + (14303, 14303, 'accessories/wearable_items/_exp07/rallos_zek_armor/rallos_zek_armor_vanguard/shoulders_rallos_zek_small_pauldrons', 1096), + (14304, 14304, 'accessories/wearable_items/cloak/exp07/fae_d_wing01_female_demon', 1096), + (14305, 14305, 'accessories/wearable_items/cloak/exp07/fae_d_wing01_demon', 1096), + (14306, 14306, 'staticobjects/doors/dpo_qeynos_door', 1096), + (14307, 14307, 'staticobjects/doors/dpo_freeport_door', 1096), + (14308, 14308, 'staticobjects/doors/dpo_gorowyn_door', 1096), + (14309, 14309, 'staticobjects/doors/dpo_kelethin_door', 1096), + (14310, 14310, 'staticobjects/doors/dpo_neriak_door', 1096), + (14311, 14311, 'accessories/wearable_items/cloak/exp07/cloak_dragon', 1096), + (14312, 14312, 'accessories/wearable_items/cloak/exp07/cloak_dragon_slayer', 1096), + (14313, 14313, 'accessories/wieldable_items/weapons/exp07/bow/exp07_bow_deathbringer_glowfx', 1096), + (14314, 14314, 'creatures/mounts/flying_disc/flying_disc_elven_dark', 1096), + (14315, 14315, 'staticobjects/liveevent/community/dpo_reward_coin_bowl', 1096), + (14316, 14316, 'accessories/wearable_items/cloak/exp07/fae_d_wing02_good', 1096), + (14317, 14317, 'staticobjects/panels/dpo_snow_panel', 1096), + (14318, 14318, 'staticobjects/panels/dpo_erollisi_grass_panel', 1096), + (14319, 14319, 'staticobjects/panels/dpo_hay_panel', 1096), + (14320, 14320, 'accessories/wearable_items/_exp07/rallos_zek_armor/rallos_zek_armor_vanguard/rallos_zek_vanguard_belt_plate', 1096), + (14321, 14321, 'staticobjects/beds/dpo_fprt_bedroll01', 1096), + (14322, 14322, 'accessories/wearable_items/cloak/exp07/fae_d_wing02_evil', 1096), + (14323, 14323, 'accessories/wearable_items/halloween_masks/flaming_pumpkin/head', 1096), + (14324, 14324, 'accessories/wearable_items/halloween_masks/mask_fire_new/head', 1096), + (14325, 14325, '_exp07/characters/tool_users/tallonite_female/vallonite_female_mage', 1096), + (14326, 14326, '_exp07/characters/tool_users/tallonite_female/vallonite_female_fighter', 1096), + (14327, 14327, '_exp07/characters/monsters/ice_wurm/ice_wurm_violet', 1096), + (14328, 14328, '_exp07/characters/monsters/ice_wurm/ice_wurm_blue', 1096), + (14329, 14329, '_exp07/characters/monsters/ice_wurm/ice_wurm_cobalt', 1096), + (14330, 14330, '_exp07/characters/monsters/ice_wurm/ice_wurm_green', 1096), + (14331, 14331, '_exp07/characters/monsters/ice_wurm/ice_wurm_sea_foam', 1096), + (14332, 14332, 'creatures/mounts/wolf_mount/wolf_mount_base', 1096), + (14333, 14333, 'accessories/wieldable_items/weapons/exp07/staff/exp07_spear_of_takha', 1096), + (14334, 14334, 'creatures/mounts/horse_heavy/horse_heavy_white_orange', 1096), + (14335, 14335, 'creatures/mounts/horse_heavy/horse_heavy_black_blue', 1096), + (14336, 14336, 'creatures/mounts/horse_heavy/horse_heavy_black_orange', 1096), + (14337, 14337, 'creatures/mounts/horse_heavy/horse_heavy_brown_blue', 1096), + (14338, 14338, 'creatures/mounts/horse_heavy/horse_heavy_brown_orange', 1096), + (14339, 14339, 'creatures/mounts/horse_heavy/horse_heavy_white_blue', 1096), + (14340, 14340, 'accessories/wieldable_items/weapons/exp07/shield/exp07_shield_tower_deathbringer_glowfx', 1096), + (14341, 14341, 'accessories/wieldable_items/weapons/exp07/shield/exp07_shield_round_deathbringer_glowfx', 1096), + (14342, 14342, 'staticobjects/books/dpo_cazicbook_black', 1096), + (14343, 14343, 'staticobjects/books/dpo_cazicbook_green', 1096), + (14344, 14344, 'staticobjects/books/dpo_cazicbook_red', 1096), + (14345, 14345, 'accessories/wearable_items/cloak/exp07/cloak_sc_valentine01', 1096), + (14346, 14346, 'creatures/tu/clockwork_bixie_figher', 1096), + (14347, 14347, 'accessories/wearable_items/cloak/exp07/cloak_sc_falling_snowflakes_01', 1096), + (14348, 14348, 'staticobjects/liveevent/guides/dpo_guide_fortuneteller_table', 1096), + (14349, 14349, 'staticobjects/liveevent/guides/dpo_guide_filghty_fae_candlestick', 1096), + (14350, 14350, 'staticobjects/liveevent/guides/dpo_guide_filghty_fae_picnic', 1096), + (14351, 14351, 'accessories/wearable_items/_exp08/dragon_armor/vanguard_shadow/hands_epic', 1096), + (14352, 14352, 'accessories/wearable_items/_exp08/dragon_armor/vanguard_shadow/head', 1096), + (14353, 14353, 'accessories/wearable_items/_exp08/dragon_armor/vanguard_shadow/head_epic', 1096), + (14354, 14354, 'accessories/wearable_items/_exp08/dragon_armor/vanguard_shadow/left', 1096), + (14355, 14355, 'staticobjects/tableware/dpo_eu_wineglass_red01', 1096), + (14356, 14356, 'staticobjects/tableware/dpo_eu_wineglass_yellow01', 1096), + (14357, 14357, 'staticobjects/liveevent/halloween/pumpkin_candy_dispenser_01', 1096), + (14358, 14358, 'accessories/wieldable_items/weapons/exp03/1h_crush/exp03_1hc_wooden_vine_scepter_torch', 1096), + (14359, 14359, '_exp07/zones/exp07_dun_velks_forgotten_pools/blocker_01', 1096), + (14360, 14360, '_exp07/zones/exp07_dun_velks_forgotten_pools/breakable_door_01', 1096), + (14361, 14361, '_exp07/zones/exp07_dun_velks_forgotten_pools/breakable_door_01_open', 1096), + (14362, 14362, '_exp07/zones/exp07_dun_velks_forgotten_pools/breakable_door_01_blue', 1096), + (14363, 14363, '_exp07/zones/exp07_dun_velks_forgotten_pools/breakable_door_01_open_blue', 1096), + (14364, 14364, '_exp07/zones/exp07_dun_velks_forgotten_pools/doorshield_01', 1096), + (14365, 14365, '_exp07/zones/exp07_dun_velks_forgotten_pools/doorshield_switch_01', 1096), + (14366, 14366, '_exp07/zones/exp07_dun_velks_forgotten_pools/invis_wall_breakable_door_col_01', 1096), + (14367, 14367, '_exp07/zones/exp07_dun_velks_forgotten_pools/door_boss_01', 1096), + (14368, 14368, 'staticobjects/guildhall/gh_qeynos_tapestry_dpo', 1096), + (14369, 14369, 'staticobjects/guildhall/gh_freeport_tapestry_dpo', 1096), + (14370, 14370, 'staticobjects/liveevent/cityfestivals/kelethin_table_bedside_mossy', 1096), + (14371, 14371, '_exp07/characters/monsters/timber_wolf/timber_wolf', 1096), + (14372, 14372, '_exp03/zones/objects/beds/kel_bed_royalty01', 1096), + (14373, 14373, '_exp03/zones/objects/bookcases/kel_bookcase01', 1096), + (14374, 14374, '_exp03/zones/objects/kelethin/crystals/kel_crystal_cylinder_growing03', 1096), + (14375, 14375, '_exp03/zones/objects/kelethin/oven/kel_oven02', 1096), + (14376, 14376, '_exp03/zones/objects/kelethin/rugs/kel_rug_yellow_square02', 1096), + (14377, 14377, '_exp03/zones/objects/kelethin/tavern_items/kel_tavern_chair01_yellow', 1096), + (14378, 14378, '_exp03/zones/objects/kelethin/tavern_items/kel_tavern_stool01_yellow', 1096), + (14379, 14379, '_exp03/zones/objects/tables/gf_elf_table02', 1096), + (14380, 14380, '_exp03/zones/objects/greater_faydark/lightsources/gf_bugbear_torch01', 1096), + (14381, 14381, 'staticobjects/liveevent/frostfell/xmas_item_santa_sleigh_01', 1096), + (14382, 14382, 'accessories/wieldable_items/weapons/exp07/1h_crush/1h_mace_chillborn', 1096), + (14383, 14383, 'accessories/wieldable_items/weapons/exp07/1h_sword/exp07_1hs_sword_chillborn', 1096), + (14384, 14384, 'accessories/wieldable_items/weapons/exp07/bow/exp05_bow_chillborn', 1096), + (14385, 14385, 'accessories/wieldable_items/weapons/exp07/staff/exp07_2hp_spear_chillborn', 1096), + (14386, 14386, 'creatures/mounts/wolf_mount/wolf_mount_white', 1096), + (14387, 14387, 'creatures/mounts/wolf_mount/wolf_mount_black', 1096), + (14388, 14388, 'creatures/mounts/wolf_mount/wolf_mount_black_demon', 1096), + (14389, 14389, 'accessories/wearable_items/_exp07/station_cash_armor/ogre_vanguard_armor/skirt', 1096), + (14390, 14390, 'accessories/wearable_items/_exp07/station_cash_armor/ogre_vanguard_armor/chest', 1096), + (14391, 14391, 'accessories/wearable_items/_exp07/station_cash_armor/ogre_vanguard_armor/chest_ogre_armor', 1096), + (14392, 14392, 'accessories/wearable_items/_exp07/station_cash_armor/ogre_vanguard_armor/feet', 1096), + (14393, 14393, 'accessories/wearable_items/_exp07/station_cash_armor/ogre_vanguard_armor/forearms', 1096), + (14394, 14394, 'accessories/wearable_items/_exp07/station_cash_armor/ogre_vanguard_armor/hands', 1096), + (14395, 14395, 'accessories/wearable_items/_exp07/station_cash_armor/ogre_vanguard_armor/hands_ogre_armor', 1096), + (14396, 14396, 'accessories/wearable_items/_exp07/station_cash_armor/ogre_vanguard_armor/head', 1096), + (14397, 14397, 'accessories/wearable_items/_exp07/station_cash_armor/ogre_vanguard_armor/head_ogre_armor_helmet', 1096), + (14398, 14398, 'accessories/wearable_items/_exp07/station_cash_armor/ogre_vanguard_armor/legs', 1096), + (14399, 14399, 'accessories/wearable_items/_exp07/station_cash_armor/ogre_vanguard_armor/legs_noskirt', 1096), + (14400, 14400, 'accessories/wearable_items/_exp07/station_cash_armor/ogre_vanguard_armor/legs_ogre_armor', 1096), + (14401, 14401, 'accessories/wearable_items/_exp07/station_cash_armor/ogre_vanguard_armor/ogre_armor_vanguard_belt', 1096), + (14402, 14402, 'accessories/wearable_items/_exp07/station_cash_armor/ogre_vanguard_armor/ogre_armor_vanguard_collar', 1096), + (14403, 14403, 'accessories/wearable_items/_exp07/station_cash_armor/ogre_vanguard_armor/ogre_armor_vanguard_foot_left', 1096), + (14404, 14404, 'accessories/wearable_items/_exp07/station_cash_armor/ogre_vanguard_armor/ogre_armor_vanguard_foot_right', 1096), + (14405, 14405, 'accessories/wearable_items/_exp07/station_cash_armor/ogre_vanguard_armor/ogre_armor_vanguard_forearm_right', 1096), + (14406, 14406, 'accessories/wearable_items/_exp07/station_cash_armor/ogre_vanguard_armor/ogre_armor_vanguard_hand_right', 1096), + (14407, 14407, 'accessories/wearable_items/_exp07/station_cash_armor/ogre_vanguard_armor/ogre_armor_vanguard_pauldron_left', 1096), + (14408, 14408, 'accessories/wearable_items/_exp07/station_cash_armor/ogre_vanguard_armor/ogre_armor_vanguard_pauldron_right', 1096), + (14409, 14409, 'accessories/wearable_items/_exp07/station_cash_armor/ogre_vanguard_armor/ogre_armor_vanguard_shin_left', 1096), + (14410, 14410, 'accessories/wearable_items/_exp07/station_cash_armor/ogre_vanguard_armor/ogre_armor_vanguard_shin_right', 1096), + (14411, 14411, 'accessories/wearable_items/_exp07/station_cash_armor/ogre_vanguard_armor/ogre_armor_vanguard_thigh_left', 1096), + (14412, 14412, 'accessories/wearable_items/_exp07/station_cash_armor/ogre_vanguard_armor/ogre_armor_vanguard_upperarm_right', 1096), + (14413, 14413, 'accessories/wearable_items/_exp07/station_cash_armor/ogre_vanguard_armor/right', 1096), + (14414, 14414, 'accessories/wearable_items/_exp07/station_cash_armor/ogre_vanguard_armor/shoulders', 1096), + (14415, 14415, 'accessories/wearable_items/_exp07/station_cash_armor/ogre_vanguard_armor/shoulders_nopauldrons', 1096), + (14416, 14416, 'accessories/wearable_items/_exp07/station_cash_armor/ogre_vanguard_armor/shoulders_ogre_armor', 1096), + (14417, 14417, '_exp02/zones/objects/eggs/hf_egg_single_purple_upright01', 1096), + (14418, 14418, 'accessories/wearable_items/cloak/exp07/cloak_ogre_vanguard', 1096), + (14419, 14419, 'creatures/mounts/odus_prowler/odus_prowler_skeleton_poison', 1096), + (14420, 14420, 'creatures/mounts/odus_prowler/odus_prowler_skeleton', 1096), + (14421, 14421, 'creatures/mounts/odus_prowler/odus_prowler_skeleton_armor', 1096), + (14422, 14422, 'creatures/mounts/odus_prowler/odus_prowler_skeleton_death', 1096), + (14423, 14423, 'accessories/wearable_items/_exp08/dragon_armor/vanguard_shadow/legs', 1096), + (14424, 14424, 'accessories/wearable_items/_exp08/dragon_armor/vanguard_shadow/legs_epic', 1096), + (14425, 14425, 'accessories/wearable_items/_exp08/dragon_armor/vanguard_shadow/legs_noskirt', 1096), + (14426, 14426, 'accessories/wearable_items/_exp08/dragon_armor/vanguard_shadow/right', 1096), + (14427, 14427, '_exp06/characters/tool_users/talonite/talonite_male_full_suits/talonite_male_zonn', 1096), + (14428, 14428, '_exp06/characters/tool_users/talonite/talonite_male_full_suits/talonite_male_archer', 1096), + (14429, 14429, '_exp06/characters/tool_users/talonite/talonite_male_full_suits/talonite_male_boss', 1096), + (14430, 14430, '_exp06/characters/tool_users/talonite/talonite_male_full_suits/talonite_male_mage', 1096), + (14431, 14431, 'accessories/wieldable_items/weapons/exp07/1h_crush/1h_mace_chillborn_fx', 1096), + (14432, 14432, 'accessories/wieldable_items/weapons/exp07/1h_sword/exp07_1hs_sword_chillborn_fx', 1096), + (14433, 14433, 'accessories/wieldable_items/weapons/exp07/bow/exp05_bow_chillborn_fx', 1096), + (14434, 14434, 'accessories/wieldable_items/weapons/exp07/staff/exp07_2hp_spear_chillborn_fx', 1096), + (14435, 14435, '_exp06/characters/tool_users/talonite/talonite_male_full_suits/talonite_male_zonn_blue', 1096), + (14436, 14436, '_exp06/characters/tool_users/talonite/talonite_male_full_suits/talonite_male_archer_blue', 1096), + (14437, 14437, '_exp06/characters/tool_users/talonite/talonite_male_full_suits/talonite_male_boss_blue', 1096), + (14438, 14438, '_exp06/characters/tool_users/talonite/talonite_male_full_suits/talonite_male_mage_blue', 1096), + (14439, 14439, 'accessories/wearable_items/_exp07/station_cash_armor/human_heritage_armor_chain/pauldron_right', 1096), + (14440, 14440, 'accessories/wearable_items/_exp07/station_cash_armor/human_heritage_armor_chain/shoulders', 1096), + (14441, 14441, 'accessories/wearable_items/_exp07/station_cash_armor/human_heritage_armor_chain/skirt', 1096), + (14442, 14442, 'accessories/wearable_items/_exp07/station_cash_armor/human_heritage_armor_chain/chest', 1096), + (14443, 14443, 'accessories/wearable_items/_exp07/station_cash_armor/human_heritage_armor_chain/feet', 1096), + (14444, 14444, 'accessories/wearable_items/_exp07/station_cash_armor/human_heritage_armor_chain/forearms', 1096), + (14445, 14445, 'accessories/wearable_items/_exp07/station_cash_armor/human_heritage_armor_chain/hands', 1096), + (14446, 14446, 'accessories/wearable_items/_exp07/station_cash_armor/human_heritage_armor_chain/head', 1096), + (14447, 14447, 'accessories/wearable_items/_exp07/station_cash_armor/human_heritage_armor_chain/head_human_heritage_chain_helmet', 1096), + (14448, 14448, 'accessories/wearable_items/_exp07/station_cash_armor/human_heritage_armor_chain/human_heritage_chain_arm_left', 1096), + (14449, 14449, 'accessories/wearable_items/_exp07/station_cash_armor/human_heritage_armor_chain/human_heritage_chain_arm_right', 1096), + (14450, 14450, 'accessories/wearable_items/_exp07/station_cash_armor/human_heritage_armor_chain/human_heritage_chain_belt', 1096), + (14451, 14451, 'accessories/wearable_items/_exp07/station_cash_armor/human_heritage_armor_chain/human_heritage_chain_pauldron_guard_left', 1096), + (14452, 14452, 'accessories/wearable_items/_exp07/station_cash_armor/human_heritage_armor_chain/human_heritage_chain_shin_left', 1096), + (14453, 14453, 'accessories/wearable_items/_exp07/station_cash_armor/human_heritage_armor_chain/human_heritage_chain_shin_right', 1096), + (14454, 14454, 'accessories/wearable_items/_exp07/station_cash_armor/human_heritage_armor_chain/legs', 1096), + (14455, 14455, 'accessories/wearable_items/_exp07/station_cash_armor/human_heritage_armor_chain/legs_noskirt', 1096), + (14456, 14456, 'accessories/wearable_items/_exp07/station_cash_armor/human_heritage_armor_chain/pauldron_left', 1096), + (14457, 14457, 'staticobjects/bucket/dpo_kel_bucket_water', 1096), + (14458, 14458, 'staticobjects/bucket/dpo_orc_bucket_sludge', 1096), + (14459, 14459, 'accessories/wearable_items/_exp08/dragon_armor/vanguard_shadow/shoulders', 1096), + (14460, 14460, 'accessories/wearable_items/cloak/exp07/cloak_human_heritage_armor_red', 1096), + (14461, 14461, 'accessories/wearable_items/cloak/exp07/cloak_human_heritage_armor_blue', 1096), + (14462, 14462, 'accessories/wearable_items/cloak/exp07/cloak_human_heritage_armor_gold', 1096), + (14463, 14463, 'accessories/wearable_items/cloak/exp07/cloak_human_heritage_armor_pewter', 1096), + (14464, 14464, 'creatures/mounts/odus_prowler/odus_prowler_skeleton_armor_cold', 1096), + (14465, 14465, 'accessories/wieldable_items/weapons/exp07/1h_pierce/exp07_1hp_guk_cold', 1096), + (14466, 14466, 'accessories/wieldable_items/weapons/exp07/talisman/exp07_orb_guk_cold', 1096), + (14467, 14467, 'accessories/wieldable_items/weapons/exp07/bow/exp07_guk_bow_cold', 1096), + (14468, 14468, 'accessories/wearable_items/_exp07/guk_skull/snap_ons/shin_right', 1096), + (14469, 14469, 'accessories/wearable_items/_exp07/guk_skull/snap_ons/forearm_left', 1096), + (14470, 14470, 'accessories/wearable_items/_exp07/guk_skull/snap_ons/forearm_right', 1096), + (14471, 14471, 'accessories/wearable_items/_exp07/guk_skull/snap_ons/pauldrons_left', 1096), + (14472, 14472, 'accessories/wearable_items/_exp07/guk_skull/snap_ons/pauldrons_lower_left', 1096), + (14473, 14473, 'accessories/wearable_items/_exp07/guk_skull/snap_ons/pauldrons_lower_right', 1096), + (14474, 14474, 'accessories/wearable_items/_exp07/guk_skull/snap_ons/pauldrons_right', 1096), + (14475, 14475, 'accessories/wearable_items/_exp07/guk_skull/snap_ons/shin_left', 1096), + (14476, 14476, 'accessories/wearable_items/_exp07/guk_skull/skirt', 1096), + (14477, 14477, 'accessories/wearable_items/_exp07/guk_skull/chest', 1096), + (14478, 14478, 'accessories/wearable_items/_exp07/guk_skull/feet', 1096), + (14479, 14479, 'accessories/wearable_items/_exp07/guk_skull/forearms', 1096), + (14480, 14480, 'accessories/wearable_items/_exp07/guk_skull/hands', 1096), + (14481, 14481, 'accessories/wearable_items/_exp07/guk_skull/hands_epic', 1096), + (14482, 14482, 'accessories/wearable_items/_exp07/guk_skull/head', 1096), + (14483, 14483, 'accessories/wearable_items/_exp07/guk_skull/head_epic', 1096), + (14484, 14484, 'accessories/wearable_items/_exp07/guk_skull/legs', 1096), + (14485, 14485, 'accessories/wearable_items/_exp07/guk_skull/legs_epic', 1096), + (14486, 14486, 'accessories/wearable_items/_exp07/guk_skull/legs_noskirt', 1096), + (14487, 14487, 'accessories/wearable_items/_exp07/guk_skull/right', 1096), + (14488, 14488, 'accessories/wearable_items/_exp07/guk_skull/shoulders', 1096), + (14489, 14489, 'accessories/wearable_items/_exp07/guk_skull/shoulders_epic', 1096), + (14490, 14490, 'accessories/wearable_items/_exp07/guk_skull/shoulders_nopauldrons', 1096), + (14491, 14491, 'creatures/monsters/odus_prowler_skeletal', 1096), + (14492, 14492, '_exp07/zones/exp07_dun_velks_forgotten_pools/pod_01', 1096), + (14493, 14493, 'staticobjects/_exp07/trapped_crab', 1096), + (14494, 14494, '_exp07/zones/exp07_dun_kraytocs_fortress/messhall_tables_giant_broken_dpo', 1096), + (14495, 14495, '_exp07/zones/exp07_dun_kraytocs_fortress/messhall_tables_giant_dpo', 1096), + (14496, 14496, '_exp07/zones/exp07_dun_kraytocs_fortress/messhall_tables_human_broken_dpo', 1096), + (14497, 14497, '_exp07/zones/exp07_dun_kraytocs_fortress/messhall_tables_human_dpo', 1096), + (14498, 14498, 'creatures/mounts/horse_heavy/horse_stallion_black', 1096), + (14499, 14499, '_exp07/zones/exp07_dun_tower_of_frozen_shadow/floating_mirror', 1096), + (14500, 14500, '_exp07/characters/tool_users/tallon_zek/tallon_zek', 1096), + (14501, 14501, 'accessories/wearable_items/_exp07/kraytok/chain/skirt', 1096), + (14502, 14502, 'accessories/wearable_items/_exp07/kraytok/chain/chest', 1096), + (14503, 14503, 'accessories/wearable_items/_exp07/kraytok/chain/feet', 1096), + (14504, 14504, 'accessories/wearable_items/_exp07/kraytok/chain/forearms', 1096), + (14505, 14505, 'accessories/wearable_items/_exp07/kraytok/chain/hands', 1096), + (14506, 14506, 'accessories/wearable_items/_exp07/kraytok/chain/head', 1096), + (14507, 14507, 'accessories/wearable_items/_exp07/kraytok/chain/legs', 1096), + (14508, 14508, 'accessories/wearable_items/_exp07/kraytok/chain/legs_noskirt', 1096), + (14509, 14509, 'accessories/wearable_items/_exp07/kraytok/chain/pauldron_left', 1096), + (14510, 14510, 'accessories/wearable_items/_exp07/kraytok/chain/pauldron_right', 1096), + (14511, 14511, 'accessories/wearable_items/_exp07/kraytok/chain/shoulders', 1096), + (14512, 14512, 'accessories/wearable_items/_exp07/kraytok/chain/shoulders_nopauldrons', 1096), + (14513, 14513, 'accessories/wearable_items/_exp07/kraytok/leather/skirt', 1096), + (14514, 14514, 'accessories/wearable_items/_exp07/kraytok/leather/chest', 1096), + (14515, 14515, 'accessories/wearable_items/_exp07/kraytok/leather/feet', 1096), + (14516, 14516, 'accessories/wearable_items/_exp07/kraytok/leather/forearms', 1096), + (14517, 14517, 'accessories/wearable_items/_exp07/kraytok/leather/hands', 1096), + (14518, 14518, 'accessories/wearable_items/_exp07/kraytok/leather/head', 1096), + (14519, 14519, 'accessories/wearable_items/_exp07/kraytok/leather/legs', 1096), + (14520, 14520, 'accessories/wearable_items/_exp07/kraytok/leather/legs_noskirt', 1096), + (14521, 14521, 'accessories/wearable_items/_exp07/kraytok/leather/pauldron_left', 1096), + (14522, 14522, 'accessories/wearable_items/_exp07/kraytok/leather/pauldron_right', 1096), + (14523, 14523, 'accessories/wearable_items/_exp07/kraytok/leather/shoulders', 1096), + (14524, 14524, 'accessories/wearable_items/_exp07/kraytok/leather/shoulders_nopauldrons', 1096), + (14525, 14525, 'accessories/wearable_items/_exp07/kraytok/robe/skirt', 1096), + (14526, 14526, 'accessories/wearable_items/_exp07/kraytok/robe/chest', 1096), + (14527, 14527, 'accessories/wearable_items/_exp07/kraytok/robe/chest_paldrons', 1096), + (14528, 14528, 'accessories/wearable_items/_exp07/kraytok/robe/feet', 1096), + (14529, 14529, 'accessories/wearable_items/_exp07/kraytok/robe/hands', 1096), + (14530, 14530, 'accessories/wearable_items/_exp07/kraytok/robe/head', 1096), + (14531, 14531, 'accessories/wearable_items/_exp07/kraytok/robe/head_collar', 1096), + (14532, 14532, 'accessories/wearable_items/_exp07/kraytok/robe/pants', 1096), + (14533, 14533, 'accessories/wearable_items/_exp07/kraytok/robe/pauldron_left', 1096), + (14534, 14534, 'accessories/wearable_items/_exp07/kraytok/robe/pauldron_right', 1096), + (14535, 14535, 'staticobjects/tcg/tcg_painting49_erollisimarr', 1096), + (14536, 14536, 'staticobjects/tcg/tcg_fishtank01', 1096), + (14537, 14537, 'staticobjects/tcg/tcg_tapestry_stained_glass_dragon', 1096), + (14538, 14538, 'staticobjects/tcg/tcg_tapestry_silken_glory', 1096), + (14539, 14539, 'staticobjects/tcg/tcg_painting51_izathoth', 1096), + (14540, 14540, 'staticobjects/tcg/tcg_painting50_grandmaster', 1096), + (14541, 14541, 'accessories/wearable_items/profesion_hats/dragon_helm/head_dragon_helm', 1096), + (14542, 14542, 'accessories/wearable_items/profesion_hats/dragon_helm/head_dragon_gold_helm', 1096), + (14543, 14543, 'accessories/wearable_items/_exp07/guk_raven/chain/skirt', 1096), + (14544, 14544, 'accessories/wearable_items/_exp07/guk_raven/chain/chest', 1096), + (14545, 14545, 'accessories/wearable_items/_exp07/guk_raven/chain/feet', 1096), + (14546, 14546, 'accessories/wearable_items/_exp07/guk_raven/chain/forearms', 1096), + (14547, 14547, 'accessories/wearable_items/_exp07/guk_raven/chain/hands', 1096), + (14548, 14548, 'accessories/wearable_items/_exp07/guk_raven/chain/head', 1096), + (14549, 14549, 'accessories/wearable_items/_exp07/guk_raven/chain/head_epic', 1096), + (14550, 14550, 'accessories/wearable_items/_exp07/guk_raven/chain/legs', 1096), + (14551, 14551, 'accessories/wearable_items/_exp07/guk_raven/chain/legs_noskirt', 1096), + (14552, 14552, 'accessories/wearable_items/_exp07/guk_raven/chain/raven_shoulder_left', 1096), + (14553, 14553, 'accessories/wearable_items/_exp07/guk_raven/chain/raven_shoulder_right', 1096), + (14554, 14554, 'accessories/wearable_items/_exp07/guk_raven/chain/shoulders', 1096), + (14555, 14555, 'accessories/wearable_items/_exp07/guk_raven/chain/shoulders_epic_pauldrons', 1096), + (14556, 14556, 'accessories/wearable_items/_exp07/guk_raven/leather/skirt', 1096), + (14557, 14557, 'accessories/wearable_items/_exp07/guk_raven/leather/chest', 1096), + (14558, 14558, 'accessories/wearable_items/_exp07/guk_raven/leather/feet', 1096), + (14559, 14559, 'accessories/wearable_items/_exp07/guk_raven/leather/forearms', 1096), + (14560, 14560, 'accessories/wearable_items/_exp07/guk_raven/leather/hands', 1096), + (14561, 14561, 'accessories/wearable_items/_exp07/guk_raven/leather/head', 1096), + (14562, 14562, 'accessories/wearable_items/_exp07/guk_raven/leather/head_epic', 1096), + (14563, 14563, 'accessories/wearable_items/_exp07/guk_raven/leather/legs', 1096), + (14564, 14564, 'accessories/wearable_items/_exp07/guk_raven/leather/legs_noskirt', 1096), + (14565, 14565, 'accessories/wearable_items/_exp07/guk_raven/leather/raven_shoulder_left', 1096), + (14566, 14566, 'accessories/wearable_items/_exp07/guk_raven/leather/raven_shoulder_right', 1096), + (14567, 14567, 'accessories/wearable_items/_exp07/guk_raven/leather/shoulders', 1096), + (14568, 14568, 'accessories/wearable_items/_exp07/guk_raven/leather/shoulders_epic_pauldrons', 1096), + (14569, 14569, 'accessories/wearable_items/_exp07/guk_raven/robe/snap_ons/head_raven_helm', 1096), + (14570, 14570, 'accessories/wearable_items/_exp07/guk_raven/robe/skirt', 1096), + (14571, 14571, 'accessories/wearable_items/_exp07/guk_raven/robe/chest', 1096), + (14572, 14572, 'accessories/wearable_items/_exp07/guk_raven/robe/chest_epic_pauldrons', 1096), + (14573, 14573, 'accessories/wearable_items/_exp07/guk_raven/robe/feet', 1096), + (14574, 14574, 'accessories/wearable_items/_exp07/guk_raven/robe/hands', 1096), + (14575, 14575, 'accessories/wearable_items/_exp07/guk_raven/robe/head', 1096), + (14576, 14576, 'accessories/wearable_items/_exp07/guk_raven/robe/head_epic', 1096), + (14577, 14577, 'accessories/wearable_items/_exp07/guk_raven/robe/pants', 1096), + (14578, 14578, 'accessories/wearable_items/_exp07/guk_raven/vanguard/skirt', 1096), + (14579, 14579, 'accessories/wearable_items/_exp07/guk_raven/vanguard/chest', 1096), + (14580, 14580, 'accessories/wearable_items/_exp07/guk_raven/vanguard/feet', 1096), + (14581, 14581, 'accessories/wearable_items/_exp07/guk_raven/vanguard/forearms', 1096), + (14582, 14582, 'accessories/wearable_items/_exp07/guk_raven/vanguard/hands', 1096), + (14583, 14583, 'accessories/wearable_items/_exp07/guk_raven/vanguard/head', 1096), + (14584, 14584, 'accessories/wearable_items/_exp07/guk_raven/vanguard/head_epic', 1096), + (14585, 14585, 'accessories/wearable_items/_exp07/guk_raven/vanguard/legs', 1096), + (14586, 14586, 'accessories/wearable_items/_exp07/guk_raven/vanguard/legs_noskirt', 1096), + (14587, 14587, 'accessories/wearable_items/_exp07/guk_raven/vanguard/raven_shoulder_left', 1096), + (14588, 14588, 'accessories/wearable_items/_exp07/guk_raven/vanguard/raven_shoulder_right', 1096), + (14589, 14589, 'accessories/wearable_items/_exp07/guk_raven/vanguard/right', 1096), + (14590, 14590, 'accessories/wearable_items/_exp07/guk_raven/vanguard/shoulders', 1096), + (14591, 14591, 'accessories/wearable_items/_exp07/guk_raven/vanguard/shoulders_epic', 1096), + (14592, 14592, 'accessories/wearable_items/_exp07/guk_raven/vanguard/shoulders_nopauldrons', 1096), + (14593, 14593, 'accessories/wearable_items/_exp07/station_cash_armor/gnome_chain/skirt', 1096), + (14594, 14594, 'accessories/wearable_items/_exp07/station_cash_armor/gnome_chain/chest', 1096), + (14595, 14595, 'accessories/wearable_items/_exp07/station_cash_armor/gnome_chain/chest_snapons', 1096), + (14596, 14596, 'accessories/wearable_items/_exp07/station_cash_armor/gnome_chain/feet', 1096), + (14597, 14597, 'accessories/wearable_items/_exp07/station_cash_armor/gnome_chain/feet_snapons', 1096), + (14598, 14598, 'accessories/wearable_items/_exp07/station_cash_armor/gnome_chain/forearms', 1096), + (14599, 14599, 'accessories/wearable_items/_exp07/station_cash_armor/gnome_chain/forearms_control_panel', 1096), + (14600, 14600, 'accessories/wearable_items/_exp07/station_cash_armor/gnome_chain/hands', 1096), + (14601, 14601, 'accessories/wearable_items/_exp07/station_cash_armor/gnome_chain/hands_snapons', 1096), + (14602, 14602, 'accessories/wearable_items/_exp07/station_cash_armor/gnome_chain/head', 1096), + (14603, 14603, 'accessories/wearable_items/_exp07/station_cash_armor/gnome_chain/legs', 1096), + (14604, 14604, 'accessories/wearable_items/_exp07/station_cash_armor/gnome_chain/legs_noskirt', 1096), + (14605, 14605, 'accessories/wearable_items/_exp07/station_cash_armor/gnome_chain/shoulders', 1096), + (14606, 14606, 'accessories/wearable_items/_exp07/station_cash_armor/gnome_chain/shoulders_snapons', 1096), + (14607, 14607, 'accessories/wearable_items/_exp07/station_cash_armor/gnome_chain/snapons/gnome_leg_right', 1096), + (14608, 14608, 'accessories/wearable_items/_exp07/station_cash_armor/gnome_chain/snapons/gnome_arm_controls_left', 1096), + (14609, 14609, 'accessories/wearable_items/_exp07/station_cash_armor/gnome_chain/snapons/gnome_arm_lower_right', 1096), + (14610, 14610, 'accessories/wearable_items/_exp07/station_cash_armor/gnome_chain/snapons/gnome_arm_upper_right', 1096), + (14611, 14611, 'accessories/wearable_items/_exp07/station_cash_armor/gnome_chain/snapons/gnome_chain_pad_lock', 1096), + (14612, 14612, 'accessories/wearable_items/_exp07/station_cash_armor/gnome_chain/snapons/gnome_chain_pauldron_left', 1096), + (14613, 14613, 'accessories/wearable_items/_exp07/station_cash_armor/gnome_chain/snapons/gnome_chain_pauldron_right', 1096), + (14614, 14614, 'accessories/wearable_items/_exp07/station_cash_armor/gnome_chain/snapons/gnome_chain_smoke_stack', 1096), + (14615, 14615, 'accessories/wearable_items/_exp08/dragon_armor/vanguard_shadow/shoulders_epic', 1096), + (14616, 14616, 'accessories/wearable_items/_exp07/station_cash_armor/gnome_chain/snapons/gnome_leg_left', 1096), + (14617, 14617, 'staticobjects/tcg/tcg_cup_of_fulfillment', 1096), + (14618, 14618, 'accessories/wearable_items/_exp07/tinted_armor/dragon_vanguard_blighted/chest', 1096), + (14619, 14619, 'accessories/wearable_items/_exp07/tinted_armor/dragon_vanguard_blighted/feet', 1096), + (14620, 14620, 'accessories/wearable_items/_exp07/tinted_armor/dragon_vanguard_blighted/forearms', 1096), + (14621, 14621, 'accessories/wearable_items/_exp07/tinted_armor/dragon_vanguard_blighted/hands', 1096), + (14622, 14622, 'accessories/wearable_items/_exp07/tinted_armor/dragon_vanguard_blighted/head', 1096), + (14623, 14623, 'accessories/wearable_items/_exp07/tinted_armor/dragon_vanguard_blighted/legs', 1096), + (14624, 14624, 'accessories/wearable_items/_exp07/tinted_armor/dragon_vanguard_blighted/legs_noskirt', 1096), + (14625, 14625, 'accessories/wearable_items/_exp07/tinted_armor/dragon_vanguard_blighted/right', 1096), + (14626, 14626, 'accessories/wearable_items/_exp07/tinted_armor/dragon_vanguard_blighted/shoulders', 1096), + (14627, 14627, 'accessories/wearable_items/_exp07/tinted_armor/dragon_vanguard_blighted/shoulders_nopauldrons', 1096), + (14628, 14628, 'accessories/wearable_items/_exp07/tinted_armor/dragon_vanguard_blighted/skirt', 1096), + (14629, 14629, 'accessories/wearable_items/_exp07/station_cash_armor/casual_clothing/casual_clothing_nobleman/shoulders', 1096), + (14630, 14630, 'accessories/wearable_items/_exp07/station_cash_armor/casual_clothing/casual_clothing_nobleman/belt', 1096), + (14631, 14631, 'accessories/wearable_items/_exp07/station_cash_armor/casual_clothing/casual_clothing_nobleman/chest', 1096), + (14632, 14632, 'accessories/wearable_items/_exp07/station_cash_armor/casual_clothing/casual_clothing_nobleman/feet', 1096), + (14633, 14633, 'accessories/wearable_items/_exp07/station_cash_armor/casual_clothing/casual_clothing_nobleman/legs', 1096), + (14634, 14634, '_exp04/zones/objects/timorous_deep/goro_obj_door_dpo', 1096), + (14635, 14635, 'accessories/wearable_items/_exp07/station_cash_armor/robe_good_white/skirt', 1096), + (14636, 14636, 'accessories/wearable_items/_exp07/station_cash_armor/robe_good_white/arm_left', 1096), + (14637, 14637, 'accessories/wearable_items/_exp07/station_cash_armor/robe_good_white/arm_right', 1096), + (14638, 14638, 'accessories/wearable_items/_exp07/station_cash_armor/robe_good_white/chest', 1096), + (14639, 14639, 'accessories/wearable_items/_exp07/station_cash_armor/robe_good_white/feet', 1096), + (14640, 14640, 'accessories/wearable_items/_exp07/station_cash_armor/robe_good_white/hands', 1096), + (14641, 14641, 'accessories/wearable_items/_exp07/station_cash_armor/robe_good_white/head', 1096), + (14642, 14642, 'accessories/wearable_items/_exp07/station_cash_armor/robe_good_white/pants', 1096), + (14643, 14643, '_exp07/characters/monsters/griffin_new/server_griffin', 1096), + (14644, 14644, 'accessories/wearable_items/cloak/exp07/fae_d_wing_skeleton_medium', 1096), + (14645, 14645, 'accessories/wearable_items/cloak/exp07/fae_d_wing_skeleton', 1096), + (14646, 14646, 'accessories/wearable_items/cloak/exp07/fae_d_wing_skeleton_large', 1096), + (14647, 14647, 'accessories/wearable_items/cloak/exp07/cloak_gnome', 1096), + (14648, 14648, 'staticobjects/trophies/legion_force_trophy', 1096), + (14649, 14649, 'staticobjects/tcg/tcg_painting_lon11', 1096), + (14650, 14650, 'staticobjects/liveevent/contest_painting_oct10/contest3_painting_bwibip01', 1096), + (14651, 14651, 'staticobjects/liveevent/contest_painting_oct10/contest3_painting_byblis01', 1096), + (14652, 14652, 'staticobjects/liveevent/contest_painting_oct10/contest3_painting_corvo01', 1096), + (14653, 14653, 'staticobjects/liveevent/contest_painting_oct10/contest3_painting_crymsyn01', 1096), + (14654, 14654, 'staticobjects/liveevent/contest_painting_oct10/contest3_painting_ladyaerfen01', 1096), + (14655, 14655, 'staticobjects/liveevent/contest_painting_oct10/contest3_painting_linger01', 1096), + (14656, 14656, '_exp07/characters/monsters/griffin_new/highland_griffin', 1096), + (14657, 14657, 'staticobjects/_exp07_prelude/sea_monster_plushy', 1096), + (14658, 14658, '_exp07/characters/tool_users/carac_omnica/carac_omnica_mask_hand', 1096), + (14659, 14659, '_exp07/characters/tool_users/carac_omnica/carac_omnica', 1096), + (14660, 14660, '_exp07/characters/tool_users/carac_omnica/carac_omnica_mask', 1096), + (14661, 14661, 'accessories/npc_wearables/carac_omica/carac_omica_mask_hand', 1096), + (14662, 14662, 'accessories/npc_wearables/carac_omica/carac_omica_mask', 1096), + (14663, 14663, 'accessories/wearable_items/_exp07/station_cash_armor/gnome_chain/head_epic', 1096), + (14664, 14664, '_exp03/characters/tool_users/vampire_greater/vampire_greater_male01_upsidedown', 1096), + (14665, 14665, '_exp03/characters/tool_users/vampire_greater/vampire_greater_armored_female01_upsidedown', 1096), + (14666, 14666, '_exp03/characters/tool_users/vampire_greater/vampire_greater_armored_male01_upsidedown', 1096), + (14667, 14667, '_exp04/tool_users/drachnid_female_chain_upsidedown', 1096), + (14668, 14668, '_exp04/tool_users/drachnid_female_upsidedown', 1096), + (14669, 14669, '_exp04/tool_users/drachnid_queen_upsidedown', 1096), + (14670, 14670, 'creatures/tu/skeleton_upsidedown', 1096), + (14671, 14671, 'accessories/wieldable_items/weapons/exp07/1h_sword/exp07_1h_axe_rallos_npc', 1096), + (14672, 14672, 'accessories/wieldable_items/weapons/exp07/shield/exp07_shield_rallos_npc', 1096), + (14673, 14673, 'creatures/monsters/bat_upsidedown', 1096), + (14674, 14674, 'accessories/wearable_items/_exp07/rallos_zek_armor/rallos_zek_armor_robe/skirt', 1096), + (14675, 14675, 'accessories/wearable_items/_exp07/rallos_zek_armor/rallos_zek_armor_robe/chest', 1096), + (14676, 14676, 'accessories/wearable_items/_exp07/rallos_zek_armor/rallos_zek_armor_robe/chest_rallos_zek_robe_pauldrons', 1096), + (14677, 14677, 'accessories/wearable_items/_exp07/rallos_zek_armor/rallos_zek_armor_robe/feet', 1096), + (14678, 14678, 'accessories/wearable_items/_exp07/rallos_zek_armor/rallos_zek_armor_robe/hands', 1096), + (14679, 14679, 'accessories/wearable_items/_exp07/rallos_zek_armor/rallos_zek_armor_robe/hands_rallos_zek_robe_gauntlets', 1096), + (14680, 14680, 'accessories/wearable_items/_exp07/rallos_zek_armor/rallos_zek_armor_robe/head', 1096), + (14681, 14681, 'accessories/wearable_items/_exp07/rallos_zek_armor/rallos_zek_armor_robe/head_rallos_zek_horns', 1096), + (14682, 14682, 'accessories/wearable_items/_exp07/rallos_zek_armor/rallos_zek_armor_robe/pants', 1096), + (14683, 14683, 'accessories/wearable_items/_exp07/rallos_zek_armor/rallos_zek_armor_robe/pauldron_left', 1096), + (14684, 14684, 'accessories/wearable_items/_exp07/rallos_zek_armor/rallos_zek_armor_robe/pauldron_right', 1096), + (14685, 14685, 'accessories/wearable_items/_exp07/rallos_zek_armor/rallos_zek_armor_robe/rallos_zek_robe_belt_plate', 1096), + (14686, 14686, 'accessories/wearable_items/_exp07/rallos_zek_armor/rallos_zek_armor_robe/rallos_zek_robe_gauntlets_forearm_left', 1096), + (14687, 14687, 'accessories/wearable_items/_exp07/rallos_zek_armor/rallos_zek_armor_robe/rallos_zek_robe_gauntlets_forearm_right', 1096), + (14688, 14688, 'accessories/wearable_items/_exp07/rallos_zek_armor/rallos_zek_armor_robe/rallos_zek_robe_hood_horns', 1096), + (14689, 14689, 'accessories/wearable_items/_exp07/rallos_zek_armor/rallos_zek_armor_robe/rallos_zek_robe_pauldron_left', 1096), + (14690, 14690, 'accessories/wearable_items/_exp07/rallos_zek_armor/rallos_zek_armor_robe/rallos_zek_robe_pauldron_right', 1096), + (14691, 14691, '_exp07/characters/monsters/timber_wolf/timber_wolf_white_boss', 1096), + (14692, 14692, '_exp07/characters/monsters/timber_wolf/timber_wolf_black', 1096), + (14693, 14693, '_exp07/characters/monsters/timber_wolf/timber_wolf_white', 1096), + (14694, 14694, 'accessories/wearable_items/cloak/exp07/cloak_adventuring', 1096), + (14695, 14695, 'accessories/wearable_items/_exp07/gindan_armor/skirt', 1096), + (14696, 14696, 'accessories/wearable_items/_exp07/gindan_armor/chest', 1096), + (14697, 14697, 'accessories/wearable_items/_exp07/gindan_armor/feet', 1096), + (14698, 14698, 'accessories/wearable_items/_exp07/gindan_armor/forearms', 1096), + (14699, 14699, 'accessories/wearable_items/_exp07/gindan_armor/hands', 1096), + (14700, 14700, 'accessories/wearable_items/_exp07/gindan_armor/head', 1096), + (14701, 14701, 'accessories/wearable_items/_exp07/gindan_armor/head_dragon_helm', 1096), + (14702, 14702, 'accessories/wearable_items/_exp07/gindan_armor/legs', 1096), + (14703, 14703, 'accessories/wearable_items/_exp07/gindan_armor/legs_noskirt', 1096), + (14704, 14704, 'accessories/wearable_items/_exp07/gindan_armor/right', 1096), + (14705, 14705, 'accessories/wearable_items/_exp07/gindan_armor/shoulders', 1096), + (14706, 14706, 'accessories/wearable_items/_exp07/gindan_armor/shoulders_nopauldrons', 1096), + (14707, 14707, 'accessories/wearable_items/_exp07/gindan_armor/shoulders_snapons', 1096), + (14708, 14708, 'accessories/wearable_items/_exp07/gindan_armor/snapons/gindan_pauldron_right', 1096), + (14709, 14709, 'accessories/wearable_items/_exp07/gindan_armor/snapons/gindan_pauldron_left', 1096), + (14710, 14710, '_exp07/zones/exp07_dun_tower_of_frozen_shadow/tofs_bunk_bed_01', 1096), + (14711, 14711, 'accessories/wearable_items/_exp08/dragon_armor/vanguard_shadow/shoulders_nopauldrons', 1096), + (14712, 14712, 'accessories/wearable_items/_exp08/dragon_armor/snapons/dragon_armor_leather-chain_pauldron_effects_right_shadow', 1096), + (14713, 14713, 'accessories/wearable_items/_exp08/dragon_armor/snapons/dragon_armor_leather-chain_pauldron_effects_left_green', 1096), + (14714, 14714, '_exp07/zones/exp07_dun_tower_of_frozen_shadow/tofs_bedside_table_small', 1096), + (14715, 14715, 'accessories/wearable_items/_exp08/dragon_armor/snapons/dragon_armor_leather-chain_pauldron_effects_left_ivory', 1096), + (14716, 14716, 'accessories/wearable_items/_exp08/dragon_armor/snapons/dragon_armor_leather-chain_pauldron_effects_left_red', 1096), + (14717, 14717, 'accessories/wearable_items/_exp08/dragon_armor/snapons/dragon_armor_leather-chain_pauldron_effects_left_shadow', 1096), + (14718, 14718, 'accessories/wearable_items/_exp08/dragon_armor/snapons/dragon_armor_leather-chain_pauldron_effects_right_green', 1096), + (14719, 14719, 'accessories/wearable_items/_exp08/dragon_armor/snapons/dragon_armor_leather-chain_pauldron_effects_right_ivory', 1096), + (14720, 14720, '_exp07/zones/exp07_dun_tower_of_frozen_shadow/tofs_plain_chest', 1096), + (14721, 14721, '_exp07/zones/exp07_dun_tower_of_frozen_shadow/tofs_cake_decayed', 1096), + (14722, 14722, 'accessories/wearable_items/_exp08/dragon_armor/snapons/dragon_armor_leather-chain_pauldron_effects_right_red', 1096), + (14723, 14723, '_exp07/zones/exp07_dun_tower_of_frozen_shadow/tofs_fear_orb', 1096), + (14724, 14724, 'accessories/wieldable_items/weapons/exp08/staff/exp08_staff_sullon_zek_dual', 1096), + (14725, 14725, '_exp07/zones/exp07_dun_tower_of_frozen_shadow/tofs_pedestal', 1096), + (14726, 14726, 'accessories/wieldable_items/weapons/exp08/staff/exp08_staff_sullon_zek', 1096), + (14727, 14727, '_exp07/zones/exp07_dun_tower_of_frozen_shadow/tofs_large_floorrug', 1096), + (14728, 14728, 'staticobjects/liveevent/frostfell/dpo_bauble_string_lights_purple_ceiling', 1096), + (14729, 14729, 'staticobjects/liveevent/frostfell/dpo_bauble_bell_string_lights_blue_ceiling', 1096), + (14730, 14730, '_exp07/zones/exp07_dun_tower_of_frozen_shadow/tofs_table', 1096), + (14731, 14731, 'staticobjects/liveevent/frostfell/dpo_bauble_bell_string_lights_gold_ceiling', 1096), + (14732, 14732, 'staticobjects/liveevent/frostfell/dpo_bauble_bell_string_lights_red_ceiling', 1096), + (14733, 14733, 'accessories/wearable_items/_exp07/chain_vindicator/skirt', 1096), + (14734, 14734, 'accessories/wearable_items/_exp07/chain_vindicator/chest', 1096), + (14735, 14735, 'accessories/wearable_items/_exp07/chain_vindicator/epic_pauldron_left', 1096), + (14736, 14736, 'accessories/wearable_items/_exp07/chain_vindicator/epic_pauldron_right', 1096), + (14737, 14737, 'accessories/wearable_items/_exp07/chain_vindicator/feet', 1096), + (14738, 14738, 'accessories/wearable_items/_exp07/chain_vindicator/forearms', 1096), + (14739, 14739, 'accessories/wearable_items/_exp07/chain_vindicator/hands', 1096), + (14740, 14740, 'accessories/wearable_items/_exp07/chain_vindicator/head', 1096), + (14741, 14741, 'accessories/wearable_items/_exp07/chain_vindicator/legs', 1096), + (14742, 14742, 'accessories/wearable_items/_exp07/chain_vindicator/legs_noskirt', 1096), + (14743, 14743, 'accessories/wearable_items/_exp07/chain_vindicator/pauldron_left', 1096), + (14744, 14744, 'accessories/wearable_items/_exp07/chain_vindicator/pauldron_right', 1096), + (14745, 14745, 'accessories/wearable_items/_exp07/chain_vindicator/shoulders', 1096), + (14746, 14746, 'accessories/wearable_items/_exp07/chain_vindicator/shoulders_nopauldrons', 1096), + (14747, 14747, 'accessories/wearable_items/_exp07/plate_vindicator/shoulders', 1096), + (14748, 14748, 'accessories/wearable_items/_exp07/plate_vindicator/chest', 1096), + (14749, 14749, 'accessories/wearable_items/_exp07/plate_vindicator/epic_pauldron_left', 1096), + (14750, 14750, 'accessories/wearable_items/_exp07/plate_vindicator/epic_pauldron_right', 1096), + (14751, 14751, 'accessories/wearable_items/_exp07/plate_vindicator/feet', 1096), + (14752, 14752, 'accessories/wearable_items/_exp07/plate_vindicator/forearms', 1096), + (14753, 14753, 'accessories/wearable_items/_exp07/plate_vindicator/hands', 1096), + (14754, 14754, 'accessories/wearable_items/_exp07/plate_vindicator/head', 1096), + (14755, 14755, 'accessories/wearable_items/_exp07/plate_vindicator/legs', 1096), + (14756, 14756, '_exp07/characters/tool_users/rallos_statue/rallos_statue', 1096), + (14757, 14757, '_exp07/characters/tool_users/storm_giants/storm_giant_heavy_05', 1096), + (14758, 14758, '_exp07/characters/tool_users/storm_giants/storm_giant_heavy_04', 1096), + (14759, 14759, 'creatures/mounts/godly_cloud', 1096), + (14760, 14760, 'creatures/mounts/plague_cloud', 1096), + (14761, 14761, 'staticobjects/liveevent/community/dpo_reward_chalice', 1096), + (14762, 14762, '_exp07/characters/monsters/snow_rhino/snow_rhino', 1096), + (14763, 14763, '_exp07/characters/monsters/wurm/wurm_white', 1096), + (14764, 14764, '_exp07/characters/monsters/wurm/wurm_green', 1096), + (14765, 14765, '_exp07/characters/monsters/wurm/wurm_orange', 1096), + (14766, 14766, '_exp07/characters/monsters/wurm/wurm_rock', 1096), + (14767, 14767, 'creatures/mounts/griffin_mount/griffin_mount_evil', 1096), + (14768, 14768, 'creatures/mounts/griffin_mount/griffin_mount_crow', 1096), + (14769, 14769, '_exp07/zones/exp07_dun_tower_of_frozen_shadow/tofs_floating_book_animated', 1096), + (14770, 14770, '_exp07/zones/exp07_dun_velks_forgotten_pools/egg_01', 1096), + (14771, 14771, 'staticobjects/_exp07/exp07_dun_velks_forgotten_pools/egg_01', 1096), + (14772, 14772, '_exp07/zones/exp07_dun_velks_forgotten_pools/nest_01', 1096), + (14773, 14773, 'staticobjects/_exp07/exp07_dun_velks_forgotten_pools/nest_01', 1096), + (14774, 14774, '_exp07/zones/exp07_dun_kraytocs_fortress/barrel_01', 1096), + (14775, 14775, '_exp07/zones/exp07_dun_kraytocs_fortress/crate_02', 1096), + (14776, 14776, 'accessories/wieldable_items/weapons/exp07/bow/exp07_obsidian_warbow', 1096), + (14777, 14777, '_exp07/characters/tool_users/vallon_zek/vallon_zek', 1096), + (14778, 14778, 'accessories/wearable_items/cloak/exp07/cloak_vallon_zek', 1096), + (14779, 14779, 'accessories/wieldable_items/weapons/exp07/1h_sword/exp07_1h_sword_obsidian_war_scimitar', 1096), + (14780, 14780, 'staticobjects/crates/floor_crate_sebilis_closed02', 1096), + (14781, 14781, 'staticobjects/_exp07/exp07_rgn_great_divide/simple_sewing_loom', 1096), + (14782, 14782, '_exp07/characters/tool_users/golem_blue/golem_blue', 1096), + (14783, 14783, 'accessories/wieldable_items/weapons/exp07/1h_crush/1h_flail_flame', 1096), + (14784, 14784, 'accessories/wieldable_items/weapons/exp07/1h_crush/1h_flail_cinder', 1096), + (14785, 14785, 'accessories/wieldable_items/weapons/exp07/1h_pierce/exp07_1hp_dagger_cinder', 1096), + (14786, 14786, 'accessories/wieldable_items/weapons/exp07/1h_pierce/exp07_1hp_dagger_flame', 1096), + (14787, 14787, 'accessories/wieldable_items/weapons/exp07/1h_sword/exp07_1hs_sword_flame', 1096), + (14788, 14788, 'accessories/wieldable_items/weapons/exp07/1h_sword/exp07_1h_axe_cinder', 1096), + (14789, 14789, 'accessories/wieldable_items/weapons/exp07/1h_sword/exp07_1h_axe_flame', 1096), + (14790, 14790, 'accessories/wieldable_items/weapons/exp07/1h_sword/exp07_1hs_sword_cinder', 1096), + (14791, 14791, 'staticobjects/_exp07/exp07_rgn_great_divide/othmir_fish_trap', 1096), + (14792, 14792, 'staticobjects/_exp07/exp07_rgn_great_divide/trapped_crab', 1096), + (14793, 14793, 'ec/pc/vampire/vampire_female', 1096), + (14794, 14794, 'accessories/wearable_items/cloak/exp07/cloak_phoenix', 1096), + (14795, 14795, 'accessories/wearable_items/cloak/exp07/cloak_redmoon_water', 1096), + (14796, 14796, 'accessories/wearable_items/cloak/exp07/cloak_stained_glass_tree', 1096), + (14797, 14797, 'accessories/wearable_items/cloak/exp07/cloak_stained_glass_tree_autumn', 1096), + (14798, 14798, 'accessories/wearable_items/cloak/exp07/cloak_wolf_moon', 1096), + (14799, 14799, 'accessories/wearable_items/cloak/exp07/cloak_compass_dark', 1096), + (14800, 14800, 'accessories/wearable_items/cloak/exp07/cloak_compass_light', 1096), + (14801, 14801, 'accessories/wearable_items/cloak/exp07/cloak_moon_water', 1096), + (14802, 14802, 'accessories/wearable_items/_exp07/rallos_zek_armor/rallos_zek_armor_magus/skirt', 1096), + (14803, 14803, 'accessories/wearable_items/_exp07/rallos_zek_armor/rallos_zek_armor_magus/arms', 1096), + (14804, 14804, 'accessories/wearable_items/_exp07/rallos_zek_armor/rallos_zek_armor_magus/chest', 1096), + (14805, 14805, 'accessories/wearable_items/_exp07/rallos_zek_armor/rallos_zek_armor_magus/head', 1096), + (14806, 14806, 'accessories/wearable_items/_exp07/rallos_zek_armor/rallos_zek_armor_magus/legs', 1096), + (14807, 14807, 'staticobjects/liveevent/frostfell/dpo_bauble_bow_string_lights_gold_wall', 1096), + (14808, 14808, 'staticobjects/liveevent/frostfell/dpo_bauble_bow_string_lights_red_wall', 1096), + (14809, 14809, 'staticobjects/liveevent/frostfell/dpo_bauble_string_lights_blue_ceiling', 1096), + (14810, 14810, 'accessories/wearable_items/_exp07/rallos_zek_armor/rallos_zek_armor_magus/rallos_zek_magus_pauldron_left', 1096), + (14811, 14811, 'accessories/wearable_items/_exp07/rallos_zek_armor/rallos_zek_armor_magus/rallos_zek_magus_pauldron_right', 1096), + (14812, 14812, '_exp07/characters/tool_users/sullon_zek/sullon_zek', 1096), + (14813, 14813, 'accessories/wearable_items/_exp07/mara_cloth/legs', 1096), + (14814, 14814, 'accessories/wearable_items/_exp07/mara_cloth/chest', 1096), + (14815, 14815, 'accessories/wearable_items/_exp07/mara_cloth2/legs', 1096), + (14816, 14816, 'accessories/wearable_items/_exp07/mara_cloth2/chest', 1096), + (14817, 14817, '_exp07/zones/exp07_dun_velks_the_ascent/static_veeshans_shard', 1096), + (14818, 14818, '_exp07/zones/exp07_dun_velks_the_ascent/the_ascent_bridgeroom_icebridge', 1096), + (14819, 14819, '_exp07/zones/exp07_dun_velks_the_ascent/the_ascent_switch', 1096), + (14820, 14820, '_exp07/zones/exp07_dun_velks_the_ascent/the_ascent_switchbase', 1096), + (14821, 14821, '_exp07/characters/tool_users/dain_frostweaver/dain_frostweaver', 1096), + (14822, 14822, 'staticobjects/_exp07/exp07_rgn_great_divide/othmir_fishing_boat', 1096), + (14823, 14823, 'staticobjects/_exp07/exp07_rgn_great_divide/othmir_basket03', 1096), + (14824, 14824, 'staticobjects/_exp07/exp07_rgn_great_divide/othmir_drum', 1096), + (14825, 14825, 'staticobjects/_exp07/exp07_rgn_great_divide/othmir_shell01', 1096), + (14826, 14826, 'staticobjects/_exp07/exp07_rgn_great_divide/othmir_shell02', 1096), + (14827, 14827, 'staticobjects/_exp07/exp07_rgn_great_divide/othmir_shell03', 1096), + (14828, 14828, 'staticobjects/_exp07/exp07_rgn_great_divide/othmir_shell04', 1096), + (14829, 14829, '_exp07/characters/tool_users/efreeti_blue/efreeti_blue_ice', 1096), + (14830, 14830, 'staticobjects/liveevent/frostfell/dpo_bauble_string_lights_gold_ceiling', 1096), + (14831, 14831, '_exp07/characters/tool_users/djinn_ice/djinn_male_ice', 1096), + (14832, 14832, 'accessories/wieldable_items/weapons/exp07/1h_sword/exp07_1h_axe_pure_rage', 1096), + (14833, 14833, 'accessories/wieldable_items/weapons/exp07/1h_pierce/exp07_1hp_embalmers_knife', 1096), + (14834, 14834, 'staticobjects/_exp07/exp07_rgn_great_divide/othmir_table01', 1096), + (14835, 14835, 'staticobjects/_exp07/exp07_rgn_great_divide/othmir_basket04_shells', 1096), + (14836, 14836, 'staticobjects/_exp07/exp07_rgn_great_divide/ew_flowers01', 1096), + (14837, 14837, '_exp07/characters/tool_users/dain_frostweaver_jr/dain_jr', 1096), + (14838, 14838, '_exp06/characters/tool_users/snow_orc/snow_orc_optimized_hunter_03', 1096), + (14839, 14839, '_exp06/characters/tool_users/snow_orc/snow_orc_optimized_common_01', 1096), + (14840, 14840, '_exp06/characters/tool_users/snow_orc/snow_orc_optimized_common_02', 1096), + (14841, 14841, '_exp06/characters/tool_users/snow_orc/snow_orc_optimized_common_03', 1096), + (14842, 14842, '_exp06/characters/tool_users/snow_orc/snow_orc_optimized_common_04', 1096), + (14843, 14843, '_exp06/characters/tool_users/snow_orc/snow_orc_optimized_heavy_01', 1096), + (14844, 14844, '_exp06/characters/tool_users/snow_orc/snow_orc_optimized_heavy_02', 1096), + (14845, 14845, '_exp06/characters/tool_users/snow_orc/snow_orc_optimized_heavy_03', 1096), + (14846, 14846, '_exp06/characters/tool_users/snow_orc/snow_orc_optimized_hunter_01', 1096), + (14847, 14847, '_exp06/characters/tool_users/snow_orc/snow_orc_optimized_hunter_02', 1096), + (14848, 14848, '_exp07/zones/exp07_dun_velks_the_ascent/static_veeshans_shard_nofx', 1096), + (14849, 14849, 'accessories/wieldable_items/weapons/exp07/1h_sword/exp07_1h_sword_emerald_dawn', 1096), + (14850, 14850, '_exp07/characters/monsters/sea_monster/sea_monster_plushie', 1096), + (14851, 14851, 'staticobjects/liveevent/frostfell/dpo_bauble_string_lights_green_ceiling', 1096), + (14852, 14852, '_exp06/characters/tool_users/snow_orc/snow_orc_shaman', 1096), + (14853, 14853, 'creatures/pets/wolf_pup/wolf_pup', 1096), + (14854, 14854, '_exp06/characters/tool_users/snow_orc/snow_orc_chief', 1096), + (14855, 14855, 'creatures/pets/wolf_pup/wolf_pup_white_boss', 1096), + (14856, 14856, 'creatures/pets/wolf_pup/wolf_pup_black', 1096), + (14857, 14857, 'creatures/pets/wolf_pup/wolf_pup_white', 1096), + (14858, 14858, 'staticobjects/_exp07/dru_ice_totem', 1096), + (14859, 14859, 'staticobjects/_exp07/dru_earth_totem', 1096), + (14860, 14860, 'staticobjects/_exp07/dru_fire_totem', 1096), + (14861, 14861, 'accessories/wieldable_items/weapons/exp07/1h_crush/1h_hammer_inflamed', 1096), + (14862, 14862, 'accessories/wieldable_items/weapons/exp07/1h_pierce/exp07_1hp_dagger_inflamed', 1096), + (14863, 14863, 'accessories/wieldable_items/weapons/exp07/1h_sword/exp07_1h_sword_inflamed', 1096), + (14864, 14864, 'accessories/wieldable_items/weapons/exp07/1h_sword/exp07_1h_axe_inflamed', 1096), + (14865, 14865, 'accessories/wieldable_items/weapons/exp07/bow/exp07_bow_inflamed', 1096), + (14866, 14866, 'accessories/wieldable_items/weapons/exp07/shield/exp07_shield_inflamed', 1096), + (14867, 14867, 'accessories/wieldable_items/weapons/exp07/shield/exp07_buckler_inflamed', 1096), + (14868, 14868, 'accessories/wieldable_items/weapons/exp07/staff/exp07_staff_inflamed', 1096), + (14869, 14869, 'accessories/npc_wearables/efreeti_blue_turban/efreeti_blue_turban', 1096), + (14870, 14870, '_exp07/characters/tool_users/othmir/othmir_male_nipik', 1096), + (14871, 14871, '_exp07/zones/exp07_dun_tower_of_frozen_shadow/tofs_upsidedown_book_02', 1096), + (14872, 14872, 'staticobjects/_exp07/exp07_rgn_great_divide/othmir_basket01_shells', 1096), + (14873, 14873, 'staticobjects/_exp07/exp07_rgn_great_divide/othmir_bucket01_fish', 1096), + (14874, 14874, 'staticobjects/_exp07/dru_drunder_sullon_elemental_earth', 1096), + (14875, 14875, 'staticobjects/_exp07/dru_drunder_sullon_elemental_fire', 1096), + (14876, 14876, 'staticobjects/_exp07/dru_drunder_sullon_elemental_ice', 1096), + (14877, 14877, 'staticobjects/_exp07/dru_drunder_sullon_idol', 1096), + (14878, 14878, 'staticobjects/_exp07/dru_drunder_tallon_idol', 1096), + (14879, 14879, 'staticobjects/_exp07/dru_drunder_vallon_idol', 1096), + (14880, 14880, 'creatures/monsters/octopus_blue', 1096), + (14881, 14881, 'accessories/wearable_items/cloak/exp07/cloak_chained', 1096), + (14882, 14882, 'accessories/wieldable_items/weapons/exp07/1h_crush/1h_mace_winters_bite', 1096), + (14883, 14883, 'accessories/wieldable_items/weapons/exp07/1h_crush/1h_wand_winters_bite', 1096), + (14884, 14884, 'accessories/wieldable_items/weapons/exp07/1h_crush/1h_hammer_winters_bite', 1096), + (14885, 14885, 'accessories/wieldable_items/weapons/exp07/1h_pierce/exp07_1hp_dagger_winters_bite', 1096), + (14886, 14886, 'accessories/wieldable_items/weapons/exp07/1h_sword/exp07_1hs_sword_winters_bite', 1096), + (14887, 14887, 'accessories/wieldable_items/weapons/exp07/2h_crush/exp07_2h_hammer_winters_bite', 1096), + (14888, 14888, 'accessories/wieldable_items/weapons/exp07/2h_sword/exp07_2hs_sword_winters_bite', 1096), + (14889, 14889, 'accessories/wieldable_items/weapons/exp07/bow/exp07_bow_winters_bite', 1096), + (14890, 14890, 'accessories/wieldable_items/weapons/exp07/staff/exp07_staff_winters_bite', 1096), + (14891, 14891, 'accessories/wieldable_items/weapons/exp07/shield/exp07_shield_round_winters_bite', 1096), + (14892, 14892, 'accessories/wieldable_items/weapons/exp07/shield/exp07_shield_tower_winters_bite', 1096), + (14893, 14893, 'staticobjects/_exp07/exp07_rgn_eastern_wastes/vel_orc_barrel_orc01', 1096), + (14894, 14894, 'staticobjects/_exp07/exp07_rgn_eastern_wastes/vel_orc_bench01', 1096), + (14895, 14895, 'staticobjects/_exp07/exp07_rgn_eastern_wastes/vel_orc_camp_barrels_01', 1096), + (14896, 14896, 'staticobjects/_exp07/exp07_rgn_eastern_wastes/vel_orc_camp_barrels_02', 1096), + (14897, 14897, 'staticobjects/_exp07/exp07_rgn_eastern_wastes/vel_orc_camp_cooking_fish_01', 1096), + (14898, 14898, 'staticobjects/_exp07/exp07_rgn_eastern_wastes/vel_orc_camp_firewood_01', 1096), + (14899, 14899, 'staticobjects/_exp07/exp07_rgn_eastern_wastes/vel_orc_camp_fish_stand_01', 1096), + (14900, 14900, 'staticobjects/_exp07/exp07_rgn_eastern_wastes/vel_orc_camp_pelt_01', 1096), + (14901, 14901, 'staticobjects/_exp07/exp07_rgn_eastern_wastes/vel_orc_camp_seat_01', 1096), + (14902, 14902, 'staticobjects/_exp07/exp07_rgn_eastern_wastes/vel_orc_camp_seat_02', 1096), + (14903, 14903, 'staticobjects/_exp07/exp07_rgn_eastern_wastes/vel_orc_camp_sign_01', 1096), + (14904, 14904, 'staticobjects/_exp07/exp07_rgn_eastern_wastes/vel_orc_camp_spears_01', 1096), + (14905, 14905, 'staticobjects/_exp07/exp07_rgn_eastern_wastes/vel_orc_catapult_busted_01', 1096), + (14906, 14906, 'staticobjects/_exp07/exp07_rgn_eastern_wastes/vel_orc_chair01', 1096), + (14907, 14907, 'staticobjects/_exp07/exp07_rgn_eastern_wastes/vel_orc_chest_metal01', 1096), + (14908, 14908, 'staticobjects/_exp07/exp07_rgn_eastern_wastes/vel_orc_chest_metal02', 1096), + (14909, 14909, 'staticobjects/_exp07/exp07_rgn_eastern_wastes/vel_orc_chest_shoddy', 1096), + (14910, 14910, 'staticobjects/_exp07/exp07_rgn_eastern_wastes/vel_orc_crate_wood', 1096), + (14911, 14911, 'staticobjects/_exp07/exp07_rgn_eastern_wastes/vel_orc_crate_wood_long01', 1096), + (14912, 14912, 'staticobjects/_exp07/exp07_rgn_eastern_wastes/vel_orc_forge', 1096), + (14913, 14913, 'staticobjects/_exp07/exp07_rgn_eastern_wastes/vel_orc_forgetool_poker01', 1096), + (14914, 14914, 'staticobjects/_exp07/exp07_rgn_eastern_wastes/vel_orc_harpoon_01', 1096), + (14915, 14915, 'staticobjects/_exp07/exp07_rgn_eastern_wastes/vel_orc_harpoon_02', 1096), + (14916, 14916, 'staticobjects/_exp07/exp07_rgn_eastern_wastes/vel_orc_harpoon_base_01', 1096), + (14917, 14917, 'staticobjects/_exp07/exp07_rgn_eastern_wastes/vel_orc_lantern', 1096), + (14918, 14918, 'staticobjects/_exp07/exp07_rgn_eastern_wastes/vel_orc_lantern_post', 1096), + (14919, 14919, 'staticobjects/_exp07/exp07_rgn_eastern_wastes/vel_orc_lightsource_firepot01', 1096), + (14920, 14920, 'staticobjects/_exp07/exp07_rgn_eastern_wastes/vel_orc_lightsource_firepot_small01', 1096), + (14921, 14921, 'staticobjects/_exp07/exp07_rgn_eastern_wastes/vel_orc_lightsource_torch01', 1096), + (14922, 14922, 'staticobjects/_exp07/exp07_rgn_eastern_wastes/vel_orc_lightsource_wall_sconce02', 1096), + (14923, 14923, 'staticobjects/_exp07/exp07_rgn_eastern_wastes/vel_orc_miningtool_pick01', 1096), + (14924, 14924, 'staticobjects/_exp07/exp07_rgn_eastern_wastes/vel_orc_miningtool_shovel01', 1096), + (14925, 14925, 'staticobjects/_exp07/exp07_rgn_eastern_wastes/vel_orc_rubblegravelcrystalpile01', 1096), + (14926, 14926, 'staticobjects/_exp07/exp07_rgn_eastern_wastes/vel_orc_rubblegravelcrystalpile02', 1096), + (14927, 14927, 'staticobjects/_exp07/exp07_rgn_eastern_wastes/vel_orc_rubblegravelpile01', 1096), + (14928, 14928, 'staticobjects/_exp07/exp07_rgn_eastern_wastes/vel_orc_rubblegravelpile02', 1096), + (14929, 14929, 'staticobjects/_exp07/exp07_rgn_eastern_wastes/vel_orc_rubblegravelpile03', 1096), + (14930, 14930, 'staticobjects/_exp07/exp07_rgn_eastern_wastes/vel_orc_stool_orc_wood01', 1096), + (14931, 14931, 'staticobjects/_exp07/exp07_rgn_eastern_wastes/vel_orc_throne', 1096), + (14932, 14932, 'staticobjects/_exp07/exp07_rgn_eastern_wastes/vel_orc_weapon_rack_floor02', 1096), + (14933, 14933, 'staticobjects/_exp07/exp07_rgn_eastern_wastes/vel_orc_weaponsrack_wall02', 1096), + (14934, 14934, 'staticobjects/_exp07/exp07_rgn_eastern_wastes/vel_orc_wheelbarrow_orc01', 1096), + (14935, 14935, 'accessories/wieldable_items/weapons/exp07/1h_crush/1h_wand_winters_bite_fx', 1096), + (14936, 14936, 'accessories/wieldable_items/weapons/exp07/1h_crush/1h_hammer_winters_bite_fx', 1096), + (14937, 14937, 'accessories/wieldable_items/weapons/exp07/1h_crush/1h_mace_winters_bite_fx', 1096), + (14938, 14938, 'accessories/wieldable_items/weapons/exp07/1h_pierce/exp07_1hp_dagger_winters_bite_fx', 1096), + (14939, 14939, 'accessories/wieldable_items/weapons/exp07/1h_sword/exp07_1hs_sword_winters_bite_fx', 1096), + (14940, 14940, 'accessories/wieldable_items/weapons/exp07/2h_crush/exp07_2h_hammer_winters_bite_fx', 1096), + (14941, 14941, 'accessories/wieldable_items/weapons/exp07/2h_sword/exp07_2hs_sword_winters_bite_fx', 1096), + (14942, 14942, 'accessories/wieldable_items/weapons/exp07/bow/exp07_bow_winters_bite_fx', 1096), + (14943, 14943, 'accessories/wieldable_items/weapons/exp07/shield/exp07_shield_tower_winters_bite_fx', 1096), + (14944, 14944, 'accessories/wieldable_items/weapons/exp07/shield/exp07_shield_round_winters_bite_fx', 1096), + (14945, 14945, 'accessories/wieldable_items/weapons/exp07/staff/exp07_staff_winters_bite_fx', 1096), + (14946, 14946, 'creatures/mounts/griffin_mount/griffin_mount_server', 1096), + (14947, 14947, 'accessories/wearable_items/_exp07/asian_goth_armor/robe/skirt', 1096), + (14948, 14948, 'accessories/wearable_items/_exp07/asian_goth_armor/robe/chest', 1096), + (14949, 14949, 'accessories/wearable_items/_exp07/asian_goth_armor/robe/feet', 1096), + (14950, 14950, 'accessories/wearable_items/_exp07/asian_goth_armor/robe/hands', 1096), + (14951, 14951, 'accessories/wearable_items/_exp07/asian_goth_armor/robe/head', 1096), + (14952, 14952, 'accessories/wearable_items/_exp07/asian_goth_armor/robe/head_collar', 1096), + (14953, 14953, 'accessories/wearable_items/_exp07/asian_goth_armor/robe/pants', 1096), + (14954, 14954, 'staticobjects/_exp07/exp07_rgn_great_divide/gnomish_pirates_spirits', 1096), + (14955, 14955, 'staticobjects/cages/square_birdcage_dpo', 1096), + (14956, 14956, 'staticobjects/cages/round_birdcage_dpo', 1096), + (14957, 14957, 'staticobjects/_exp07/exp07_dun_drunder_vallon_tower/dru_drunder03_hourglass_01', 1096), + (14958, 14958, '_exp07/characters/tool_users/diaku_ogres/diaku_ogre_female', 1096), + (14959, 14959, '_exp07/characters/tool_users/diaku_ogres/diaku_ogre_male', 1096), + (14960, 14960, 'accessories/wieldable_items/weapons/exp07/1h_crush/1h_crush_nipiks_cane', 1096), + (14961, 14961, '_exp06/characters/tool_users/coldaine/coldaine_houseman', 1096), + (14962, 14962, 'accessories/wearable_items/_exp07/rallos_zek_armor/rallos_zek_armor_chain_blue/skirt', 1096), + (14963, 14963, 'accessories/wearable_items/_exp07/rallos_zek_armor/rallos_zek_armor_chain_blue/chest', 1096), + (14964, 14964, 'accessories/wearable_items/_exp07/rallos_zek_armor/rallos_zek_armor_chain_blue/feet', 1096), + (14965, 14965, 'accessories/wearable_items/_exp07/rallos_zek_armor/rallos_zek_armor_chain_blue/forearms', 1096), + (14966, 14966, 'accessories/wearable_items/_exp07/rallos_zek_armor/rallos_zek_armor_chain_blue/hands', 1096), + (14967, 14967, 'accessories/wearable_items/_exp07/rallos_zek_armor/rallos_zek_armor_chain_blue/head', 1096), + (14968, 14968, 'accessories/wearable_items/_exp07/rallos_zek_armor/rallos_zek_armor_chain_blue/legs', 1096), + (14969, 14969, 'accessories/wearable_items/_exp07/rallos_zek_armor/rallos_zek_armor_chain_blue/legs_noskirt', 1096), + (14970, 14970, 'accessories/wearable_items/_exp07/rallos_zek_armor/rallos_zek_armor_chain_blue/rallos_zek_chain_pauldron_left', 1096), + (14971, 14971, 'accessories/wearable_items/_exp07/rallos_zek_armor/rallos_zek_armor_chain_blue/rallos_zek_chain_pauldron_right', 1096), + (14972, 14972, 'accessories/wearable_items/_exp07/rallos_zek_armor/rallos_zek_armor_chain_blue/rallos_zek_chain_pauldron_small_left', 1096), + (14973, 14973, 'accessories/wearable_items/_exp07/rallos_zek_armor/rallos_zek_armor_chain_blue/rallos_zek_chain_pauldron_small_right', 1096), + (14974, 14974, 'accessories/wearable_items/_exp07/rallos_zek_armor/rallos_zek_armor_chain_blue/shoulders_nopauldrons', 1096), + (14975, 14975, 'accessories/wearable_items/_exp07/rallos_zek_armor/rallos_zek_armor_chain_blue/shoulders_rallos_zek_epic_pauldrons', 1096), + (14976, 14976, 'accessories/wearable_items/_exp07/rallos_zek_armor/rallos_zek_armor_chain_blue/shoulders_rallos_zek_small_pauldrons', 1096), + (14977, 14977, 'accessories/wearable_items/profesion_hats/centurion_helm/roman_helm_black/transverse_crest_blue', 1096), + (14978, 14978, 'accessories/wearable_items/profesion_hats/centurion_helm/roman_helm_black/head_no_crest', 1096), + (14979, 14979, 'accessories/wearable_items/profesion_hats/centurion_helm/roman_helm_black/head_straight_crest', 1096), + (14980, 14980, 'accessories/wearable_items/profesion_hats/centurion_helm/roman_helm_black/head_transverse_crest', 1096), + (14981, 14981, 'accessories/wearable_items/profesion_hats/centurion_helm/roman_helm_black/straight_crest_blue', 1096), + (14982, 14982, '_exp07/zones/exp07_dun_tower_of_frozen_shadow/tofs_shadow_crystal', 1096), + (14983, 14983, 'accessories/wieldable_items/weapons/exp07/1h_crush/1h_scepter_human_skull', 1096), + (14984, 14984, 'accessories/wieldable_items/weapons/exp07/1h_sword/exp07_1hs_sword_goth', 1096), + (14985, 14985, 'accessories/wieldable_items/weapons/exp07/2h_sword/exp07_2hs_sword_goth', 1096), + (14986, 14986, 'staticobjects/_exp07/exp07_rgn_great_divide/opaque_ice_block', 1096), + (14987, 14987, '_exp07/zones/exp07_dun_tower_of_frozen_shadow/tofs_cocoon', 1096), + (14988, 14988, '_exp07/zones/exp07_dun_tower_of_frozen_shadow/tofs_floor7_transport_room_w_door', 1096), + (14989, 14989, '_exp07/zones/exp07_dun_tower_of_frozen_shadow/tofs_floor7_transport_room_wo_door', 1096), + (14990, 14990, 'creatures/monsters/hawk_arctic', 1096), + (14991, 14991, 'accessories/wearable_items/_exp07/rallos_zek_armor/rallos_zek_armor_leather_blue/skirt', 1096), + (14992, 14992, 'accessories/wearable_items/_exp07/rallos_zek_armor/rallos_zek_armor_leather_blue/chest', 1096), + (14993, 14993, 'accessories/wearable_items/_exp07/rallos_zek_armor/rallos_zek_armor_leather_blue/feet', 1096), + (14994, 14994, 'accessories/wearable_items/_exp07/rallos_zek_armor/rallos_zek_armor_leather_blue/forearms', 1096), + (14995, 14995, 'accessories/wearable_items/_exp07/rallos_zek_armor/rallos_zek_armor_leather_blue/hands', 1096), + (14996, 14996, 'accessories/wearable_items/_exp07/rallos_zek_armor/rallos_zek_armor_leather_blue/head', 1096), + (14997, 14997, 'accessories/wearable_items/_exp07/rallos_zek_armor/rallos_zek_armor_leather_blue/legs', 1096), + (14998, 14998, 'accessories/wearable_items/_exp07/rallos_zek_armor/rallos_zek_armor_leather_blue/legs_noskirt', 1096), + (14999, 14999, 'accessories/wearable_items/_exp07/rallos_zek_armor/rallos_zek_armor_leather_blue/shoulders_nopauldrons', 1096), + (15000, 15000, 'accessories/wearable_items/_exp07/rallos_zek_armor/rallos_zek_armor_leather_blue/shoulders_rallos_zek_epic_pauldrons', 1096), + (15001, 15001, 'accessories/wearable_items/_exp07/rallos_zek_armor/rallos_zek_armor_leather_blue/shoulders_rallos_zek_small_pauldrons', 1096), + (15002, 15002, 'staticobjects/_exp07/exp07_rgn_eastern_wastes/gd_nest01', 1096), + (15003, 15003, 'staticobjects/_exp07/exp07_rgn_eastern_wastes/gd_nest01_full01', 1096), + (15004, 15004, 'staticobjects/_exp07/exp07_rgn_eastern_wastes/gd_nest01_full02', 1096), + (15005, 15005, 'staticobjects/_exp07/exp07_rgn_eastern_wastes/vel_barricade_mobile01', 1096), + (15006, 15006, 'staticobjects/_exp07/exp07_rgn_eastern_wastes/vel_cannon_thurgadin01', 1096), + (15007, 15007, 'staticobjects/_exp07/exp07_rgn_eastern_wastes/vel_cart_nomad01', 1096), + (15008, 15008, 'staticobjects/_exp07/exp07_rgn_eastern_wastes/vel_coldain_barricade01_big', 1096), + (15009, 15009, 'staticobjects/_exp07/exp07_rgn_eastern_wastes/vel_coldain_barricade02_small', 1096), + (15010, 15010, 'staticobjects/_exp07/exp07_rgn_eastern_wastes/vel_coldain_bench01', 1096), + (15011, 15011, 'staticobjects/_exp07/exp07_rgn_eastern_wastes/vel_coldain_bench02', 1096), + (15012, 15012, 'staticobjects/_exp07/exp07_rgn_eastern_wastes/vel_coldain_tent01', 1096), + (15013, 15013, 'staticobjects/_exp07/exp07_rgn_eastern_wastes/vel_coldain_weaponrack01', 1096), + (15014, 15014, 'staticobjects/_exp07/exp07_rgn_eastern_wastes/vel_coldain_weaponrack02', 1096), + (15015, 15015, 'staticobjects/_exp07/exp07_rgn_eastern_wastes/vel_ice_blocks_ring_war_coldain01_handout01', 1096), + (15016, 15016, 'staticobjects/_exp07/exp07_rgn_eastern_wastes/vel_ice_blocks_ring_war_coldain02', 1096), + (15017, 15017, 'staticobjects/_exp07/exp07_rgn_eastern_wastes/vel_ice_blocks_ring_war_coldain03', 1096), + (15018, 15018, 'staticobjects/_exp07/exp07_rgn_eastern_wastes/vel_ice_blocks_ring_war_coldain04', 1096), + (15019, 15019, 'staticobjects/_exp07/exp07_rgn_eastern_wastes/vel_ice_blocks_ring_war_combo01', 1096), + (15020, 15020, 'staticobjects/_exp07/exp07_rgn_eastern_wastes/vel_ice_blocks_ring_war_combo02_big01', 1096), + (15021, 15021, 'staticobjects/_exp07/exp07_rgn_eastern_wastes/vel_ice_blocks_ring_war_empty01', 1096), + (15022, 15022, 'staticobjects/_exp07/exp07_rgn_eastern_wastes/vel_ice_blocks_ring_war_giant01', 1096), + (15023, 15023, 'staticobjects/_exp07/exp07_rgn_eastern_wastes/vel_rime_crate01_frost', 1096), + (15024, 15024, 'staticobjects/_exp07/exp07_rgn_eastern_wastes/vel_rime_crate01_short_frost', 1096), + (15025, 15025, 'staticobjects/_exp07/exp07_rgn_eastern_wastes/vel_rime_tapestry01', 1096), + (15026, 15026, 'staticobjects/_exp07/exp07_rgn_eastern_wastes/vel_rime_temts_large01', 1096), + (15027, 15027, 'staticobjects/_exp07/exp07_rgn_eastern_wastes/vel_rime_temts_leanto01', 1096), + (15028, 15028, 'staticobjects/_exp07/exp07_rgn_eastern_wastes/vel_tent_crude01', 1096), + (15029, 15029, 'staticobjects/_exp07/exp07_rgn_eastern_wastes/vel_tizmak_items01_barrel01', 1096), + (15030, 15030, 'staticobjects/_exp07/exp07_rgn_eastern_wastes/vel_tizmak_items01_bed01', 1096), + (15031, 15031, 'staticobjects/_exp07/exp07_rgn_eastern_wastes/vel_tizmak_items01_bench01', 1096), + (15032, 15032, 'staticobjects/_exp07/exp07_rgn_eastern_wastes/vel_tizmak_items01_brazier01', 1096), + (15033, 15033, 'staticobjects/_exp07/exp07_rgn_eastern_wastes/vel_tizmak_items01_chair01', 1096), + (15034, 15034, 'staticobjects/_exp07/exp07_rgn_eastern_wastes/vel_tizmak_items01_drum01', 1096), + (15035, 15035, 'staticobjects/_exp07/exp07_rgn_eastern_wastes/vel_tizmak_items01_light01', 1096), + (15036, 15036, 'staticobjects/_exp07/exp07_rgn_eastern_wastes/vel_tizmak_items01_marker01', 1096), + (15037, 15037, 'staticobjects/_exp07/exp07_rgn_eastern_wastes/vel_tizmak_items01_marker02', 1096), + (15038, 15038, 'staticobjects/_exp07/exp07_rgn_eastern_wastes/vel_tizmak_items01_partition01', 1096), + (15039, 15039, 'staticobjects/_exp07/exp07_rgn_eastern_wastes/vel_tizmak_items01_table01', 1096), + (15040, 15040, 'staticobjects/_exp07/exp07_rgn_eastern_wastes/vel_tizmak_items01_walllight01', 1096), + (15041, 15041, 'staticobjects/_exp07/exp07_rgn_eastern_wastes/vel_tool_forge_anvil', 1096), + (15042, 15042, 'staticobjects/_exp07/exp07_rgn_eastern_wastes/vel_tool_forge_pliers', 1096), + (15043, 15043, 'creatures/tu/tentacleterror_diseased', 1096), + (15044, 15044, 'accessories/wearable_items/_exp07/kraytok/masked_hood/head', 1096), + (15045, 15045, 'accessories/wearable_items/_exp07/rallos_zek_armor/rallos_zek_armor_vanguard_blue/skirt', 1096), + (15046, 15046, 'accessories/wearable_items/_exp07/rallos_zek_armor/rallos_zek_armor_vanguard_blue/chest', 1096), + (15047, 15047, 'accessories/wearable_items/_exp07/rallos_zek_armor/rallos_zek_armor_vanguard_blue/feet', 1096), + (15048, 15048, 'accessories/wearable_items/_exp07/rallos_zek_armor/rallos_zek_armor_vanguard_blue/forearms', 1096), + (15049, 15049, 'accessories/wearable_items/_exp07/rallos_zek_armor/rallos_zek_armor_vanguard_blue/hands', 1096), + (15050, 15050, 'accessories/wearable_items/_exp07/rallos_zek_armor/rallos_zek_armor_vanguard_blue/head', 1096), + (15051, 15051, 'accessories/wearable_items/_exp07/rallos_zek_armor/rallos_zek_armor_vanguard_blue/legs', 1096), + (15052, 15052, 'accessories/wearable_items/_exp07/rallos_zek_armor/rallos_zek_armor_vanguard_blue/legs_noskirt', 1096), + (15053, 15053, 'accessories/wearable_items/_exp07/rallos_zek_armor/rallos_zek_armor_vanguard_blue/rallos_zek_vanguard_belt_plate', 1096), + (15054, 15054, 'accessories/wearable_items/_exp07/rallos_zek_armor/rallos_zek_armor_vanguard_blue/rallos_zek_vanguard_pauldron_epic_left', 1096), + (15055, 15055, 'accessories/wearable_items/_exp07/rallos_zek_armor/rallos_zek_armor_vanguard_blue/rallos_zek_vanguard_pauldron_epic_right', 1096), + (15056, 15056, 'accessories/wearable_items/_exp07/rallos_zek_armor/rallos_zek_armor_vanguard_blue/rallos_zek_vanguard_pauldron_small_left', 1096), + (15057, 15057, 'accessories/wearable_items/_exp07/rallos_zek_armor/rallos_zek_armor_vanguard_blue/rallos_zek_vanguard_pauldron_small_right', 1096), + (15058, 15058, 'accessories/wearable_items/_exp07/rallos_zek_armor/rallos_zek_armor_vanguard_blue/right', 1096), + (15059, 15059, 'accessories/wearable_items/_exp07/rallos_zek_armor/rallos_zek_armor_vanguard_blue/shoulders', 1096), + (15060, 15060, 'accessories/wearable_items/_exp07/rallos_zek_armor/rallos_zek_armor_vanguard_blue/shoulders_nopauldrons', 1096), + (15061, 15061, 'accessories/wearable_items/_exp07/rallos_zek_armor/rallos_zek_armor_vanguard_blue/shoulders_rallos_zek_epic_pauldrons', 1096), + (15062, 15062, 'accessories/wearable_items/_exp07/rallos_zek_armor/rallos_zek_armor_vanguard_blue/shoulders_rallos_zek_small_pauldrons', 1096), + (15063, 15063, '_exp07/zones/exp07_dun_tower_of_frozen_shadow/tofs_tserrina_brooch', 1096), + (15064, 15064, 'staticobjects/_exp07/exp07_rgn_great_divide/thurgadin_crate_group_01', 1096), + (15065, 15065, 'staticobjects/_exp07/exp07_rgn_great_divide/thurgadin_crate_group_02', 1096), + (15066, 15066, 'staticobjects/_exp07/exp07_rgn_great_divide/othmir_bones_wall_01', 1096), + (15067, 15067, '_exp07/zones/exp07_rgn_great_divide/daggerflow_snow_pen', 1096), + (15068, 15068, 'staticobjects/_exp07/exp07_rgn_great_divide/othmir_barricade01_net', 1096), + (15069, 15069, 'accessories/wearable_items/cloak/exp07/cloak_waterfall', 1096), + (15070, 15070, 'accessories/wearable_items/cloak/exp07/cloak_belts', 1096), + (15071, 15071, 'accessories/wearable_items/cloak/exp07/cloak_belts_diamond', 1096), + (15072, 15072, 'accessories/wearable_items/cloak/exp07/cloak_metal_plate', 1096), + (15073, 15073, 'accessories/wearable_items/cloak/exp07/cloak_metal_plate_pristine', 1096), + (15074, 15074, 'accessories/wearable_items/cloak/exp07/cloak_metal_plate_pristine_inset', 1096), + (15075, 15075, 'accessories/wearable_items/cloak/exp07/cloak_metal_scale', 1096), + (15076, 15076, 'accessories/wearable_items/cloak/exp07/cloak_metal_scale_diamond', 1096), + (15077, 15077, 'accessories/wearable_items/cloak/exp07/cloak_quilted', 1096), + (15078, 15078, 'accessories/wearable_items/cloak/exp07/cloak_quilted_blue', 1096), + (15079, 15079, 'accessories/wearable_items/cloak/exp07/cloak_quilted_red', 1096), + (15080, 15080, 'staticobjects/_exp07/exp07_rgn_great_divide/othmir_barricade02_net', 1096), + (15081, 15081, 'staticobjects/_exp07/exp07_rgn_great_divide/othmir_figh01', 1096), + (15082, 15082, 'accessories/wearable_items/_exp07/rallos_zek_armor/rallos_zek_armor_robe_blue/skirt', 1096), + (15083, 15083, 'accessories/wearable_items/_exp07/rallos_zek_armor/rallos_zek_armor_robe_blue/chest', 1096), + (15084, 15084, 'accessories/wearable_items/_exp07/rallos_zek_armor/rallos_zek_armor_robe_blue/feet', 1096), + (15085, 15085, 'accessories/wearable_items/_exp07/rallos_zek_armor/rallos_zek_armor_robe_blue/hands', 1096), + (15086, 15086, 'accessories/wearable_items/_exp07/rallos_zek_armor/rallos_zek_armor_robe_blue/head', 1096), + (15087, 15087, 'accessories/wearable_items/_exp07/rallos_zek_armor/rallos_zek_armor_robe_blue/pants', 1096), + (15088, 15088, 'accessories/wearable_items/_exp07/rallos_zek_armor/rallos_zek_armor_robe_blue/rallos_zek_robe_belt_plate', 1096), + (15089, 15089, 'staticobjects/_exp07/exp07_rgn_great_divide/othmir_barricade01', 1096), + (15090, 15090, 'staticobjects/_exp07/exp07_rgn_great_divide/othmir_barricade02', 1096), + (15091, 15091, 'staticobjects/promo_items/winter_2010_velious_painting', 1096), + (15092, 15092, 'creatures/monsters/badger_cream', 1096), + (15093, 15093, 'creatures/monsters/hawk_arctic_white', 1096), + (15094, 15094, 'accessories/wearable_items/_exp07/rallos_zek_armor/rallos_zek_armor_magus_blue/skirt', 1096), + (15095, 15095, 'accessories/wearable_items/_exp07/rallos_zek_armor/rallos_zek_armor_magus_blue/arms', 1096), + (15096, 15096, 'accessories/wearable_items/_exp07/rallos_zek_armor/rallos_zek_armor_magus_blue/chest', 1096), + (15097, 15097, 'accessories/wearable_items/_exp07/rallos_zek_armor/rallos_zek_armor_magus_blue/chest_no_pauldrons', 1096), + (15098, 15098, 'accessories/wearable_items/_exp07/rallos_zek_armor/rallos_zek_armor_magus_blue/head', 1096), + (15099, 15099, 'accessories/wearable_items/_exp07/rallos_zek_armor/rallos_zek_armor_magus_blue/legs', 1096), + (15100, 15100, 'accessories/wearable_items/_exp07/rallos_zek_armor/rallos_zek_armor_magus_blue/rallos_zek_magus_pauldron_left', 1096), + (15101, 15101, 'accessories/wearable_items/_exp07/rallos_zek_armor/rallos_zek_armor_magus_blue/rallos_zek_magus_pauldron_right', 1096), + (15102, 15102, '_exp07/characters/monsters/lord_yelinak/lord_yelinak', 1096), + (15103, 15103, 'staticobjects/_exp07/exp07_rgn_great_divide/dpo_crusted_ice_shield', 1096), + (15104, 15104, 'staticobjects/_exp07/exp07_rgn_great_divide/dpo_exp07_cleaver_aged', 1096), + (15105, 15105, 'staticobjects/_exp07/exp07_rgn_great_divide/dpo_exp07_cleaver_battle', 1096), + (15106, 15106, 'staticobjects/_exp07/exp07_rgn_great_divide/upside_down_hrvst_coral_group001', 1096), + (15107, 15107, 'staticobjects/_exp07/exp07_rgn_great_divide/upside_down_hrvst_coral_group002', 1096), + (15108, 15108, 'staticobjects/_exp07/exp07_rgn_great_divide/upside_down_jw_sporepod01', 1096), + (15109, 15109, '_exp07/zones/exp07_dun_tower_of_frozen_shadow/tofs_ice_large_col_01', 1096), + (15110, 15110, '_exp07/zones/exp07_dun_tower_of_frozen_shadow/tofs_ice_large_col_02', 1096), + (15111, 15111, 'staticobjects/_exp07/exp07_rgn_great_divide/gnomish_pirate_distillery', 1096), + (15112, 15112, 'staticobjects/_exp07/exp07_rgn_great_divide/coldain_icy_chalice', 1096), + (15113, 15113, 'staticobjects/_exp07/exp07_rgn_great_divide/coldain_kitchen_utensilholder', 1096), + (15114, 15114, 'staticobjects/_exp07/exp07_rgn_great_divide/coldain_saucepan', 1096), + (15115, 15115, 'accessories/hair/hair031', 1096), + (15116, 15116, 'accessories/hair/hair027', 1096), + (15117, 15117, 'accessories/hair/hair028', 1096), + (15118, 15118, 'accessories/hair/hair029', 1096), + (15119, 15119, 'accessories/hair/hair030', 1096), + (15120, 15120, 'staticobjects/_exp07/exp07_rgn_great_divide/dpo_tizmak_gems', 1096), + (15121, 15121, 'staticobjects/_exp07/exp07_rgn_thurgadin/crate_group_01', 1096), + (15122, 15122, 'staticobjects/_exp07/exp07_rgn_thurgadin/crate_group_02', 1096), + (15123, 15123, 'staticobjects/_exp07/exp07_rgn_thurgadin/crate_single_01', 1096), + (15124, 15124, 'staticobjects/_exp07/exp07_rgn_thurgadin/thur_blue_lamp_01', 1096), + (15125, 15125, 'staticobjects/_exp07/exp07_rgn_thurgadin/thur_chair_01', 1096), + (15126, 15126, 'staticobjects/_exp07/exp07_rgn_thurgadin/thur_chair_02', 1096), + (15127, 15127, 'staticobjects/_exp07/exp07_rgn_thurgadin/thur_chair_03', 1096), + (15128, 15128, 'staticobjects/_exp07/exp07_rgn_thurgadin/thur_table_01', 1096), + (15129, 15129, 'staticobjects/_exp07/exp07_rgn_thurgadin/thur_table_02', 1096), + (15130, 15130, 'staticobjects/_exp07/exp07_rgn_thurgadin/thur_table_03', 1096), + (15131, 15131, 'staticobjects/_exp07/exp07_rgn_thurgadin/thur_table_04', 1096), + (15132, 15132, 'staticobjects/_exp07/exp07_rgn_thurgadin/torch_single_01', 1096), + (15133, 15133, 'staticobjects/_exp07/exp07_rgn_thurgadin/torch_single_blue_fire_01', 1096), + (15134, 15134, 'ec/pc/vampire/vampire_male', 1096), + (15135, 15135, 'accessories/hair/hair036', 1096), + (15136, 15136, 'staticobjects/_exp07/exp07_rgn_eastern_wastes/turned_ettin_assault_axe001_ornate', 1096), + (15137, 15137, 'staticobjects/_exp07/exp07_rgn_eastern_wastes/vel_kael_crate', 1096), + (15138, 15138, 'staticobjects/_exp07/exp07_rgn_eastern_wastes/vel_kael_crate_broken', 1096), + (15139, 15139, 'staticobjects/_exp07/exp07_rgn_eastern_wastes/vel_kael_barrel', 1096), + (15140, 15140, 'staticobjects/_exp07/exp07_rgn_eastern_wastes/vel_kael_barrel_broken', 1096), + (15141, 15141, 'staticobjects/_exp07/exp07_rgn_great_divide/gnomish_pirates_spirits', 1096), + (15142, 15142, 'staticobjects/_exp07/exp07_rgn_great_divide/gnoll_dreamcatcher', 1096), + (15143, 15143, 'accessories/wearable_items/_exp07/station_cash_armor/erudite_gi/cloak_heritage_erudite', 1096), + (15144, 15144, 'ec/pc/vampire/vampire_female_evil_illusion', 1096), + (15145, 15145, 'staticobjects/_exp07/exp07_rgn_great_divide/goahmari_pillow', 1096), + (15146, 15146, '_exp07/characters/tool_users/tserrina/tserrina_test', 1096), + (15147, 15147, 'ec/pc/vampire/vampire_male_evil_illusion', 1096), + (15148, 15148, 'accessories/wearable_items/_exp07/station_cash_armor/erudite_gi/legs', 1096), + (15149, 15149, 'accessories/wearable_items/cloak/exp07/cloak_shadows', 1096), + (15150, 15150, 'accessories/wearable_items/_exp07/station_cash_armor/erudite_gi/snapon/erudite_forearm_left', 1096), + (15151, 15151, 'accessories/wearable_items/cloak/exp07/cloak_cara', 1096), + (15152, 15152, '_exp07/characters/monsters/vyskudra/vyskudra', 1096), + (15153, 15153, 'accessories/wearable_items/_exp07/station_cash_armor/erudite_gi/snapon/foot_right', 1096), + (15154, 15154, 'accessories/wearable_items/cloak/exp07/cloak_gothic2_scalloped', 1096), + (15155, 15155, 'accessories/wearable_items/cloak/exp07/cloak_gothic3_inset', 1096), + (15156, 15156, 'accessories/wearable_items/cloak/exp07/cloak_cara_scalloped', 1096), + (15157, 15157, 'accessories/wearable_items/_exp07/station_cash_armor/erudite_gi/snapon/foot_left', 1096), + (15158, 15158, 'accessories/wearable_items/_exp07/station_cash_armor/erudite_gi/head', 1096), + (15159, 15159, 'accessories/wearable_items/_exp07/station_cash_armor/erudite_gi/chest', 1096), + (15160, 15160, 'accessories/wearable_items/cloak/exp07/cloak_gothic1_diamond', 1096), + (15161, 15161, 'accessories/wearable_items/cloak/exp07/cloak_tserrina_diamond', 1096), + (15162, 15162, 'accessories/wearable_items/cloak/exp07/cloak_tserrina', 1096), + (15163, 15163, '_exp07/characters/tool_users/othmir/othmir_female_papoose_01', 1096), + (15164, 15164, 'accessories/wearable_items/_exp07/station_cash_armor/erudite_gi/snapon/erudite_forearm_right', 1096), + (15165, 15165, 'accessories/wearable_items/_exp07/station_cash_armor/erudite_gi/shoulders', 1096), + (15166, 15166, 'accessories/wearable_items/cloak/exp07/cloak_gothic1', 1096), + (15167, 15167, 'staticobjects/books/halas_coldain_books_04', 1096), + (15168, 15168, 'accessories/wearable_items/_exp07/station_cash_armor/erudite_gi/snapon/erudite_cloak_attachment', 1096), + (15169, 15169, 'accessories/wearable_items/cloak/exp07/cloak_shadows_scalloped', 1096), + (15170, 15170, 'accessories/wearable_items/_exp07/station_cash_armor/erudite_gi/feet', 1096), + (15171, 15171, '_exp05/monsters/ice_dervish_no_shake', 1096), + (15172, 15172, 'staticobjects/_exp07/exp07_rgn_great_divide/dpo_coldain_prayer_shawl_tradeskill', 1096), + (15173, 15173, 'staticobjects/chests/chest_animated_ornate_silvergold_flipped', 1096), + (15174, 15174, '_exp06/characters/monsters/frostfell_cube/frostfell_cube_bones', 1096), + (15175, 15175, '_exp07/zones/exp07_dun_kael_drakkel/kd_alter', 1096), + (15176, 15176, '_exp07/zones/exp07_dun_kael_drakkel/kd_chair', 1096), + (15177, 15177, '_exp07/zones/exp07_dun_kael_drakkel/kd_chair_grand', 1096), + (15178, 15178, '_exp07/zones/exp07_dun_kael_drakkel/kd_chest', 1096), + (15179, 15179, '_exp07/zones/exp07_dun_kael_drakkel/kd_crate', 1096), + (15180, 15180, '_exp07/zones/exp07_dun_kael_drakkel/kd_crate_broken', 1096), + (15181, 15181, '_exp07/zones/exp07_dun_kael_drakkel/kd_dragonbone', 1096), + (15182, 15182, '_exp07/zones/exp07_dun_kael_drakkel/kd_dragonbone_ancient', 1096), + (15183, 15183, '_exp07/zones/exp07_dun_kael_drakkel/kd_forge_orc', 1096), + (15184, 15184, '_exp07/zones/exp07_dun_kael_drakkel/kd_mug', 1096), + (15185, 15185, '_exp07/zones/exp07_dun_kael_drakkel/kd_podium', 1096), + (15186, 15186, '_exp07/zones/exp07_dun_kael_drakkel/kd_statue_platform', 1096), + (15187, 15187, '_exp07/zones/exp07_dun_kael_drakkel/kd_statue_zek_crch', 1096), + (15188, 15188, '_exp07/zones/exp07_dun_kael_drakkel/kd_statue_zek_half', 1096), + (15189, 15189, '_exp07/zones/exp07_dun_kael_drakkel/kd_statue_zek_stand', 1096), + (15190, 15190, '_exp07/zones/exp07_dun_kael_drakkel/kd_table_lrg', 1096), + (15191, 15191, '_exp07/zones/exp07_dun_kael_drakkel/kd_table_sml', 1096), + (15192, 15192, '_exp07/zones/exp07_dun_kael_drakkel/kd_teleporter', 1096), + (15193, 15193, '_exp07/zones/exp07_dun_kael_drakkel/kd_throne', 1096), + (15194, 15194, '_exp07/zones/exp07_dun_kael_drakkel/kd_weapons_rack', 1096), + (15195, 15195, '_exp07/zones/exp07_dun_kael_drakkel/kd_bookcase', 1096), + (15196, 15196, '_exp07/zones/exp07_dun_kael_drakkel/kd_armor_plate', 1096), + (15197, 15197, '_exp07/zones/exp07_dun_kael_drakkel/kd_ballista', 1096), + (15198, 15198, '_exp07/zones/exp07_dun_kael_drakkel/kd_barrel', 1096), + (15199, 15199, '_exp07/zones/exp07_dun_kael_drakkel/kd_bucket', 1096), + (15200, 15200, '_exp07/zones/exp07_dun_kael_drakkel/kd_sword', 1096), + (15201, 15201, '_exp07/zones/exp07_dun_kael_drakkel/kd_sword2', 1096), + (15202, 15202, '_exp07/zones/exp07_dun_kael_drakkel/kd_polearm', 1096), + (15203, 15203, '_exp07/zones/exp07_dun_kael_drakkel/kd_forge_giant', 1096), + (15204, 15204, '_exp07/zones/exp07_dun_kael_drakkel/kd_statue_tormax_pose', 1096), + (15205, 15205, '_exp07/zones/exp07_dun_kael_drakkel/kd_mapboard', 1096), + (15206, 15206, '_exp07/zones/exp07_dun_kael_drakkel/kd_keg', 1096), + (15207, 15207, '_exp07/zones/exp07_dun_kael_drakkel/kd_fountain_sml', 1096), + (15208, 15208, '_exp07/zones/exp07_dun_kael_drakkel/kd_fountain_lrg', 1096), + (15209, 15209, '_exp07/zones/exp07_dun_kael_drakkel/kd_bed_lrg', 1096), + (15210, 15210, '_exp07/zones/exp07_dun_kael_drakkel/kd_bed_sml', 1096), + (15211, 15211, '_exp07/zones/exp07_dun_kael_drakkel/kd_bar_table', 1096), + (15212, 15212, '_exp07/zones/exp07_dun_kael_drakkel/kd_statue_tormax_point', 1096), + (15213, 15213, 'staticobjects/_exp07/exp07_rgn_eastern_wastes/oth_spear_grave_marker', 1096), + (15214, 15214, 'accessories/wearable_items/_exp07/kraytok/gi/legs', 1096), + (15215, 15215, 'accessories/wieldable_items/weapons/exp07/1h_sword/exp07_1h_shortsword_hoarfrost_frosty', 1096), + (15216, 15216, 'accessories/wieldable_items/weapons/exp07/2h_sword/exp07_2hs_sword_hoarfrost', 1096), + (15217, 15217, 'accessories/wearable_items/_exp07/royal_velium_armor/royal_velium_armor_robe/feet', 1096), + (15218, 15218, 'accessories/wearable_items/_exp07/asian_goth_armor/gi/shoulders', 1096), + (15219, 15219, 'accessories/wieldable_items/weapons/exp07/1h_crush/1h_club_hoarfrost', 1096), + (15220, 15220, 'accessories/hair/hair033', 1096), + (15221, 15221, 'accessories/wearable_items/_exp07/asian_goth_armor/gi/chest', 1096), + (15222, 15222, '_exp07/characters/tool_users/gnoll_snow/gnoll_snow', 1096), + (15223, 15223, 'accessories/wearable_items/_exp07/kraytok/gi/feet', 1096), + (15224, 15224, '_exp07/characters/monsters/kd_barrel/kd_barrel', 1096), + (15225, 15225, 'staticobjects/_exp07/exp07_rgn_great_divide/coldain_scroll_paper', 1096), + (15226, 15226, 'accessories/wearable_items/_exp07/kraytok/gi/chest', 1096), + (15227, 15227, 'accessories/wearable_items/_exp07/royal_velium_armor/royal_velium_armor_robe/head', 1096), + (15228, 15228, 'accessories/wearable_items/_exp07/royal_velium_armor/royal_velium_armor_robe/chest', 1096), + (15229, 15229, 'accessories/hair/hair032', 1096), + (15230, 15230, 'accessories/wieldable_items/weapons/exp07/1h_sword/exp07_1h_sword_hoarfrost', 1096), + (15231, 15231, 'accessories/wieldable_items/weapons/exp07/2h_sword/exp07_2hs_sword_hoarfrost_frosty', 1096), + (15232, 15232, 'accessories/wieldable_items/weapons/exp07/1h_crush/1h_club_hoarfrost_frosty', 1096), + (15233, 15233, 'accessories/wieldable_items/weapons/exp07/1h_sword/exp07_1h_shortsword_hoarfrost', 1096), + (15234, 15234, 'accessories/wearable_items/_exp07/asian_goth_armor/gi/legs', 1096), + (15235, 15235, 'accessories/wieldable_items/weapons/exp07/1h_sword/exp07_1h_fist_hoarfrost_frosty', 1096), + (15236, 15236, 'accessories/wieldable_items/weapons/exp07/1h_sword/exp07_1h_sword_hoarfrost_frosty', 1096), + (15237, 15237, 'accessories/wieldable_items/weapons/exp07/staff/exp07_staff_hoarfrost', 1096), + (15238, 15238, '_exp07/characters/tool_users/drolvarg_snow_warrior/drolvarg_snow_warrior', 1096), + (15239, 15239, 'accessories/wearable_items/_exp07/kraytok/gi/shoulders', 1096), + (15240, 15240, 'accessories/wearable_items/_exp07/royal_velium_armor/royal_velium_armor_robe/hands', 1096), + (15241, 15241, 'accessories/wearable_items/_exp07/asian_goth_armor/gi/feet', 1096), + (15242, 15242, 'accessories/hair/hair035', 1096), + (15243, 15243, 'accessories/wieldable_items/weapons/exp07/1h_sword/exp07_1h_fist_hoarfrost', 1096), + (15244, 15244, 'accessories/wieldable_items/weapons/exp07/staff/exp07_staff_hoarfrost_frosty', 1096), + (15245, 15245, 'accessories/hair/hair034', 1096), + (15246, 15246, '_exp07/zones/exp07_rgn_eastern_wastes/teleport_vision_eastern_wastes', 1096), + (15247, 15247, '_exp07/zones/exp07_rgn_great_divide/teleport_vision_great_divide', 1096), + (15248, 15248, '_exp07/zones/exp07_rgn_great_divide/thurgadin_harbor_wall_elevator', 1096), + (15249, 15249, 'staticobjects/_exp07/upside_down_invis_cube', 1096), + (15250, 15250, 'staticobjects/_exp07/exp07_rgn_great_divide/othmir_jar_standalone', 1096), + (15251, 15251, 'staticobjects/_exp07/exp07_rgn_great_divide/othmir_fish_skeleton', 1096), + (15252, 15252, 'staticobjects/_exp07/exp07_rgn_great_divide/gnoll_wood_planks01', 1096), + (15253, 15253, 'staticobjects/_exp07/exp07_rgn_great_divide/gnoll_wood_planks02', 1096), + (15254, 15254, 'staticobjects/_exp07/exp07_rgn_great_divide/thurgadin_crate_single_01', 1096), + (15255, 15255, 'staticobjects/_exp07/exp07_rgn_great_divide/othmir_hanging_fish01', 1096), + (15256, 15256, 'staticobjects/_exp07/exp07_rgn_great_divide/othmir_hanging_jar02_pfx', 1096), + (15257, 15257, 'staticobjects/_exp07/exp07_rgn_great_divide/othmir_lightsource_hanging01_nosnow_pfx', 1096), + (15258, 15258, 'staticobjects/_exp07/exp07_rgn_great_divide/othmir_standing_net01_nosnow', 1096), + (15259, 15259, 'staticobjects/liveevent/tinkerfest/dpo_gnomerace_objects_scoreboard01', 1096), + (15260, 15260, 'staticobjects/liveevent/tinkerfest/dpo_gnomerace_objects_stands_01', 1096), + (15261, 15261, 'staticobjects/liveevent/tinkerfest/dpo_gnomerace_powerup_speed01', 1096), + (15262, 15262, 'staticobjects/liveevent/tinkerfest/dpo_gnomerace_powerup_time03_pfx', 1096), + (15263, 15263, 'staticobjects/liveevent/tinkerfest/dpo_gnomerace_powerup_twister01', 1096), + (15264, 15264, 'staticobjects/liveevent/tinkerfest/dpo_gnomerace_powerup_twister_blaster', 1096), + (15265, 15265, 'staticobjects/liveevent/tinkerfest/dpo_gnomerace_ring_greensfx', 1096), + (15266, 15266, 'staticobjects/liveevent/tinkerfest/dpo_gnomerace_ring_nosfx', 1096), + (15267, 15267, 'staticobjects/liveevent/tinkerfest/dpo_gnomerace_ring_yellowsfx', 1096), + (15268, 15268, '_exp07/objects/kael/kael_lever_switch', 1096), + (15269, 15269, '_exp07/objects/kael/kael_lever_switch_base', 1096), + (15270, 15270, 'staticobjects/liveevent/tinkerfest/dpo_gnomerace_ring_finishline', 1096), + (15271, 15271, 'staticobjects/liveevent/tinkerfest/dpo_gnomerace_ring_finishline_greengatesfx', 1096), + (15272, 15272, 'staticobjects/liveevent/tinkerfest/dpo_gnomerace_ring_finishline_red', 1096), + (15273, 15273, 'staticobjects/liveevent/tinkerfest/dpo_gnomerace_ring_greengatesfx', 1096), + (15274, 15274, 'staticobjects/liveevent/tinkerfest/dpo_gnomerace_powerup_timer', 1096), + (15275, 15275, 'staticobjects/liveevent/tinkerfest/dpo_gnomerace_powerup_timer2', 1096), + (15276, 15276, 'staticobjects/liveevent/frostfell/dpo_bauble_streamers_purple_ceiling', 1096), + (15277, 15277, 'staticobjects/liveevent/frostfell/dpo_bauble_bell_garland_blue_ceiling', 1096), + (15278, 15278, 'staticobjects/liveevent/frostfell/dpo_bauble_bell_garland_gold_ceiling', 1096), + (15279, 15279, 'staticobjects/liveevent/frostfell/dpo_bauble_bell_garland_green_ceiling', 1096), + (15280, 15280, 'staticobjects/liveevent/frostfell/dpo_bauble_bell_garland_red_ceiling', 1096), + (15281, 15281, 'staticobjects/liveevent/frostfell/dpo_bauble_streamers_blue_ceiling', 1096), + (15282, 15282, 'staticobjects/liveevent/frostfell/dpo_bauble_streamers_gold_ceiling', 1096), + (15283, 15283, 'staticobjects/liveevent/frostfell/dpo_bauble_streamers_green_ceiling', 1096), + (15284, 15284, 'accessories/wearable_items/_exp08/dragon_armor/snapons/dragon_armor_pauldrons_skull-shadowiron_lower_right', 1096), + (15285, 15285, 'accessories/wearable_items/_exp08/dragon_armor/snapons/dragon_armor_pauldrons_skull-blueiron_lower_left', 1096), + (15286, 15286, 'accessories/wearable_items/_exp08/dragon_armor/snapons/dragon_armor_pauldrons_skull-blueiron_lower_right', 1096), + (15287, 15287, 'accessories/wearable_items/_exp08/dragon_armor/snapons/dragon_armor_pauldrons_skull-goldivory_lower_left', 1096), + (15288, 15288, 'accessories/wearable_items/_exp08/dragon_armor/snapons/dragon_armor_pauldrons_skull-goldivory_lower_right', 1096), + (15289, 15289, 'accessories/wearable_items/_exp08/dragon_armor/snapons/dragon_armor_pauldrons_skull-greenbronze_lower_left', 1096), + (15290, 15290, 'accessories/wearable_items/_exp08/dragon_armor/snapons/dragon_armor_pauldrons_skull-greenbronze_lower_right', 1096), + (15291, 15291, 'accessories/wearable_items/_exp08/dragon_armor/snapons/dragon_armor_pauldrons_skull-redbronze_lower_left', 1096), + (15292, 15292, 'accessories/wearable_items/_exp08/dragon_armor/snapons/dragon_armor_pauldrons_skull-redbronze_lower_right', 1096), + (15293, 15293, 'accessories/wearable_items/_exp08/dragon_armor/snapons/dragon_armor_pauldrons_skull-shadowiron_lower_left', 1096), + (15294, 15294, 'accessories/wieldable_items/weapons/exp08/1h_crush/club_tallonite_red-gold_fx', 1096), + (15295, 15295, 'accessories/wieldable_items/weapons/exp08/1h_crush/club_tallonite_bloodstone_fx', 1096), + (15296, 15296, 'accessories/wieldable_items/weapons/exp08/1h_crush/club_tallonite_blue-bluemetal_fx', 1096), + (15297, 15297, 'accessories/wieldable_items/weapons/exp08/1h_crush/club_tallonite_blue-gold_fx', 1096), + (15298, 15298, 'accessories/wieldable_items/weapons/exp08/1h_crush/club_tallonite_obsidian_fx', 1096), + (15299, 15299, 'accessories/wieldable_items/weapons/exp08/1h_crush/club_tallonite_red-bluemetal_fx', 1096), + (15300, 15300, 'accessories/wieldable_items/weapons/exp08/1h_pierce/exp08_dagger_tallonite_red_fx', 1096), + (15301, 15301, 'accessories/wieldable_items/weapons/exp08/1h_pierce/exp08_dagger_obsidian_fx', 1096), + (15302, 15302, 'accessories/wieldable_items/weapons/exp08/1h_pierce/exp08_dagger_tallonite_blue_bluemetal_fx', 1096), + (15303, 15303, 'accessories/wieldable_items/weapons/exp08/1h_pierce/exp08_dagger_tallonite_blue_fx', 1096), + (15304, 15304, 'accessories/wieldable_items/weapons/exp08/1h_pierce/exp08_dagger_tallonite_red_bluemetal_fx', 1096), + (15305, 15305, 'accessories/wieldable_items/weapons/exp08/1h_sword/exp08_sword_katana_tallonite_red_fx', 1096), + (15306, 15306, 'accessories/wieldable_items/weapons/exp08/1h_sword/exp08_sword_katana_obsidian_fx', 1096), + (15307, 15307, 'accessories/wieldable_items/weapons/exp08/1h_sword/exp08_sword_katana_tallonite_blue_bluemetal_fx', 1096), + (15308, 15308, 'accessories/wieldable_items/weapons/exp08/1h_sword/exp08_sword_katana_tallonite_blue_fx', 1096), + (15309, 15309, 'accessories/wieldable_items/weapons/exp08/1h_sword/exp08_sword_katana_tallonite_red_bluemetal_fx', 1096), + (15310, 15310, 'accessories/wieldable_items/weapons/exp08/2h_sword/exp08_2h_sword_tallonite_red-iron_fx', 1096), + (15311, 15311, 'accessories/wieldable_items/weapons/exp08/2h_sword/exp08_2h_sword_tallonite_blue-gold_fx', 1096), + (15312, 15312, 'accessories/wieldable_items/weapons/exp08/2h_sword/exp08_2h_sword_tallonite_blue-iron_fx', 1096), + (15313, 15313, 'accessories/wieldable_items/weapons/exp08/2h_sword/exp08_2h_sword_tallonite_gem_obsidian_fx', 1096), + (15314, 15314, 'accessories/wieldable_items/weapons/exp08/2h_sword/exp08_2h_sword_tallonite_red-gold_fx', 1096), + (15315, 15315, 'creatures/monsters/gnomerace_twister_blaster_snow', 1096), + (15316, 15316, 'creatures/monsters/gnomerace_twister_blaster_bixie', 1096), + (15317, 15317, 'creatures/monsters/gnomerace_twister_blaster_insects', 1096), + (15318, 15318, 'creatures/monsters/gnomerace_twister_blaster_skulls', 1096), + (15319, 15319, 'staticobjects/_exp07/drunder/dru_weapon_rack01', 1096), + (15320, 15320, 'staticobjects/_exp07/drunder/dpo_rygorr_painting01', 1096), + (15321, 15321, 'staticobjects/_exp07/drunder/dpo_rygorr_painting02', 1096), + (15322, 15322, 'staticobjects/_exp07/drunder/dpo_rygorr_painting03', 1096), + (15323, 15323, 'staticobjects/_exp07/drunder/dpo_wicker_demijohn', 1096), + (15324, 15324, 'staticobjects/_exp07/drunder/dru_banner_rallos01_dpo', 1096), + (15325, 15325, 'staticobjects/_exp07/drunder/dru_banner_sullon01_dpo', 1096), + (15326, 15326, 'staticobjects/_exp07/drunder/dru_banner_tallon01_dpo', 1096), + (15327, 15327, 'staticobjects/_exp07/drunder/dru_banner_vallon01_dpo', 1096), + (15328, 15328, 'staticobjects/_exp07/drunder/dru_divider', 1096), + (15329, 15329, 'staticobjects/_exp07/drunder/dru_divider_tall', 1096), + (15330, 15330, 'staticobjects/_exp07/drunder/dru_drunder_sullon_elemental_earth_01', 1096), + (15331, 15331, 'staticobjects/_exp07/drunder/dru_drunder_sullon_elemental_fire_01', 1096), + (15332, 15332, 'staticobjects/_exp07/drunder/dru_drunder_sullon_elemental_ice_01', 1096), + (15333, 15333, 'staticobjects/_exp07/drunder/dru_drunder_sullon_sconce01_on', 1096), + (15334, 15334, 'staticobjects/_exp07/drunder/dru_tallon_statue', 1096), + (15335, 15335, 'staticobjects/_exp07/drunder/dru_vallon_statue', 1096), + (15336, 15336, 'staticobjects/panels/dpo_panel_odus_hole_tile', 1096), + (15337, 15337, 'staticobjects/panels/dpo_panel_tilled_soil', 1096), + (15338, 15338, 'staticobjects/panels/dpo_panel_spaced_cobbles_antonica', 1096), + (15339, 15339, 'staticobjects/panels/dpo_panel_odus_shingles', 1096), + (15340, 15340, 'staticobjects/panels/dpo_panel_odus_bluemarble', 1096), + (15341, 15341, 'staticobjects/panels/dpo_panel_large_cobbles_antonica', 1096), + (15342, 15342, 'staticobjects/panels/dpo_panel_lakebed_mud', 1096), + (15343, 15343, 'staticobjects/panels/dpo_panel_deadleaf', 1096), + (15344, 15344, 'staticobjects/_exp07/drunder/dru_drunder_sullon_axefloat', 1096), + (15345, 15345, 'staticobjects/_exp07/drunder/dpo_obsidian_war_scimitar', 1096), + (15346, 15346, 'staticobjects/_exp07/drunder/dpo_obsidian_warbow', 1096), + (15347, 15347, 'staticobjects/_exp07/drunder/dpo_panel_drunder_vallon', 1096), + (15348, 15348, 'staticobjects/_exp07/drunder/dpo_panel_drunder_bluetile', 1096), + (15349, 15349, 'staticobjects/_exp07/drunder/dpo_panel_drunder_dark_paving', 1096), + (15350, 15350, 'staticobjects/_exp07/drunder/dpo_panel_drunder_goldtile', 1096), + (15351, 15351, 'staticobjects/_exp07/drunder/dpo_panel_drunder_grey_paving', 1096), + (15352, 15352, 'staticobjects/_exp07/drunder/dpo_panel_drunder_platinumtile', 1096), + (15353, 15353, 'staticobjects/_exp07/drunder/dpo_panel_drunder_purple_paving', 1096), + (15354, 15354, 'staticobjects/_exp07/drunder/dpo_panel_drunder_purpletile', 1096), + (15355, 15355, 'staticobjects/_exp07/drunder/dpo_panel_drunder_sullon', 1096), + (15356, 15356, 'staticobjects/_exp07/drunder/dpo_panel_drunder_tallon', 1096), + (15357, 15357, 'staticobjects/_exp07/drunder/dpo_sullon_pedestal_axe', 1096), + (15358, 15358, 'staticobjects/_exp07/drunder/dpo_tallon_pedestal_w_bow', 1096), + (15359, 15359, 'staticobjects/_exp07/drunder/dpo_vallon_pedestal_w_scimitar', 1096), + (15360, 15360, 'staticobjects/weapons/dpo_1h_crush_fish_club', 1096), + (15361, 15361, 'staticobjects/weapons/dpo_broom', 1096), + (15362, 15362, 'staticobjects/weapons/dpo_exp05_2hc_zombie_shovel', 1096), + (15363, 15363, 'staticobjects/weapons/dpo_military_pick001_rusty_rotated', 1096), + (15364, 15364, 'creatures/mounts/griffin_mount/griffin_fire_epic', 1144), + (15365, 15365, 'accessories/wearable_items/_exp08/ratonga_heritage_armor/skirt', 1144), + (15366, 15366, 'accessories/wearable_items/_exp08/ratonga_heritage_armor/chest', 1144), + (15367, 15367, 'accessories/wearable_items/_exp08/ratonga_heritage_armor/feet', 1144), + (15368, 15368, 'accessories/wearable_items/_exp08/ratonga_heritage_armor/hands', 1144), + (15369, 15369, 'accessories/wearable_items/_exp08/ratonga_heritage_armor/head_ratonga_heritage', 1144), + (15370, 15370, 'accessories/wearable_items/_exp08/ratonga_heritage_armor/legs', 1144), + (15371, 15371, 'accessories/wearable_items/_exp08/ratonga_heritage_armor/ratonga_boot_cuff_left', 1144), + (15372, 15372, 'accessories/wearable_items/_exp08/ratonga_heritage_armor/ratonga_boot_cuff_right', 1144), + (15373, 15373, 'accessories/wearable_items/_exp08/ratonga_heritage_armor/ratonga_boot_strap_left', 1144), + (15374, 15374, 'accessories/wearable_items/_exp08/ratonga_heritage_armor/ratonga_boot_strap_right', 1144), + (15375, 15375, 'accessories/wearable_items/_exp08/ratonga_heritage_armor/ratonga_shoulder_pad_left', 1144), + (15376, 15376, 'accessories/wearable_items/_exp08/ratonga_heritage_armor/ratonga_shoulder_pad_right', 1144), + (15377, 15377, 'accessories/wearable_items/_exp08/ratonga_heritage_armor/shoulders', 1144), + (15378, 15378, 'accessories/wearable_items/cloak/exp08/cloak_ratonga_heritage', 1144), + (15379, 15379, 'creatures/mounts/warhog_mount/warhog_drunder_mount', 1144), + (15380, 15380, 'staticobjects/portals/gnome_race_teleporter', 1144), + (15381, 15381, 'creatures/mounts/terrorbird_mount/terrorbird_mount_base', 1144), + (15382, 15382, 'creatures/tu/mysticdoll_alternate_zombie', 1144), + (15383, 15383, 'creatures/tu/mysticdoll_alternate', 1144), + (15384, 15384, 'staticobjects/housing_portal_objects/vision_home_kael01', 1144), + (15385, 15385, 'staticobjects/housing_portal_objects/vision_home_thurgadin01', 1144), + (15386, 15386, 'staticobjects/housing_portal_objects/vision_home_felwithe01', 1144), + (15387, 15387, '_exp07/objects/dpo_vel_dragon_ring', 1144), + (15388, 15388, '_exp07/objects/dpo_vel_wizard_spire', 1144), + (15389, 15389, 'creatures/tu/mysticdoll_alternate_voodoo', 1144), + (15390, 15390, '_exp07/objects/kael/signal_horn', 1144), + (15391, 15391, '_exp07/objects/kael/kael_weapon_rack', 1144), + (15392, 15392, 'accessories/wieldable_items/shields/exp08/exp08_shield_kite_stormshield', 1144), + (15393, 15393, 'accessories/wieldable_items/shields/exp08/exp08_shield_round_lifebound', 1144), + (15394, 15394, 'accessories/wieldable_items/shields/exp08/exp08_shield_tower_soulscorned', 1144), + (15395, 15395, 'creatures/pets/building_block_kerra', 1144), + (15396, 15396, 'creatures/mounts/raptor_mount/raptor_mount_base', 1144), + (15397, 15397, 'creatures/mounts/backpack_mount/gnomish_jetpack', 1144), + (15398, 15398, 'accessories/npc_wearables/sifaye_accessories/sifaye_wing', 1144), + (15399, 15399, 'accessories/npc_wearables/sifaye_accessories/head_antennae1', 1144), + (15400, 15400, 'accessories/npc_wearables/sifaye_accessories/head_antennae2', 1144), + (15401, 15401, 'accessories/npc_wearables/sifaye_accessories/head_sifaye_crown_antennae', 1144), + (15402, 15402, 'accessories/wearable_items/snapons/armbands/shoulders_armband_wyrm_wrap_silver_right', 1144), + (15403, 15403, 'accessories/wearable_items/snapons/armbands/shoulders_armband_wyrm_wrap_silver_both', 1144), + (15404, 15404, 'accessories/wearable_items/snapons/armbands/shoulders_armband_wyrm_wrap_silver_left', 1144), + (15405, 15405, 'staticobjects/soe_wallet/ratonga_plate_cheese01', 1144), + (15406, 15406, 'accessories/wearable_items/_exp08/tallonite_armor/chain/skirt', 1144), + (15407, 15407, 'accessories/wearable_items/_exp08/tallonite_armor/chain/chest', 1144), + (15408, 15408, 'accessories/wearable_items/_exp08/tallonite_armor/chain/feet', 1144), + (15409, 15409, 'accessories/wearable_items/_exp08/tallonite_armor/chain/forearms', 1144), + (15410, 15410, 'accessories/wearable_items/_exp08/tallonite_armor/chain/hands', 1144), + (15411, 15411, 'accessories/wearable_items/_exp08/tallonite_armor/chain/head', 1144), + (15412, 15412, 'accessories/wearable_items/_exp08/tallonite_armor/chain/legs', 1144), + (15413, 15413, 'accessories/wearable_items/_exp08/tallonite_armor/chain/legs_noskirt', 1144), + (15414, 15414, 'accessories/wearable_items/_exp08/tallonite_armor/chain/shoulders', 1144), + (15415, 15415, 'accessories/wearable_items/_exp08/tallonite_armor/chain/shoulders_talonite_pauldron', 1144), + (15416, 15416, 'accessories/wearable_items/_exp08/tallonite_armor/gi/skirt', 1144), + (15417, 15417, 'accessories/wearable_items/_exp08/tallonite_armor/gi/arms', 1144), + (15418, 15418, 'accessories/wearable_items/_exp08/tallonite_armor/gi/chest', 1144), + (15419, 15419, 'accessories/wearable_items/_exp08/tallonite_armor/gi/legs', 1144), + (15420, 15420, 'accessories/wearable_items/_exp08/tallonite_armor/leather/skirt', 1144), + (15421, 15421, 'accessories/wearable_items/_exp08/tallonite_armor/leather/chest', 1144), + (15422, 15422, 'accessories/wearable_items/_exp08/tallonite_armor/leather/feet', 1144), + (15423, 15423, 'accessories/wearable_items/_exp08/tallonite_armor/leather/forearms', 1144), + (15424, 15424, 'accessories/wearable_items/_exp08/tallonite_armor/leather/hands', 1144), + (15425, 15425, 'accessories/wearable_items/_exp08/tallonite_armor/leather/head', 1144), + (15426, 15426, 'accessories/wearable_items/_exp08/tallonite_armor/leather/legs', 1144), + (15427, 15427, 'accessories/wearable_items/_exp08/tallonite_armor/leather/legs_noskirt', 1144), + (15428, 15428, 'accessories/wearable_items/_exp08/tallonite_armor/leather/shoulders', 1144), + (15429, 15429, 'accessories/wearable_items/_exp08/tallonite_armor/robe/skirt', 1144), + (15430, 15430, 'accessories/wearable_items/_exp08/tallonite_armor/robe/chest', 1144), + (15431, 15431, 'accessories/wearable_items/_exp08/tallonite_armor/robe/feet', 1144), + (15432, 15432, 'accessories/wearable_items/_exp08/tallonite_armor/robe/hands', 1144), + (15433, 15433, 'accessories/wearable_items/_exp08/tallonite_armor/robe/head', 1144), + (15434, 15434, 'accessories/wearable_items/_exp08/tallonite_armor/robe/pants', 1144), + (15435, 15435, 'accessories/wearable_items/_exp08/tallonite_armor/snapons/vanguard_pauldrons_upper_right', 1144), + (15436, 15436, 'accessories/wearable_items/_exp08/tallonite_armor/snapons/chain_pauldrons_upper_left', 1144), + (15437, 15437, 'accessories/wearable_items/_exp08/tallonite_armor/snapons/chain_pauldrons_upper_right', 1144), + (15438, 15438, 'accessories/wearable_items/_exp08/tallonite_armor/snapons/gi_pauldrons_upper_left', 1144), + (15439, 15439, 'accessories/wearable_items/_exp08/tallonite_armor/snapons/gi_pauldrons_upper_right', 1144), + (15440, 15440, 'accessories/wearable_items/_exp08/tallonite_armor/snapons/head_talonite_snapon', 1144), + (15441, 15441, 'accessories/wearable_items/_exp08/tallonite_armor/snapons/vanguard_pauldrons_upper_left', 1144), + (15442, 15442, 'accessories/wearable_items/_exp08/tallonite_armor/vanguard/skirt', 1144), + (15443, 15443, 'accessories/wearable_items/_exp08/tallonite_armor/vanguard/chest', 1144), + (15444, 15444, 'accessories/wearable_items/_exp08/tallonite_armor/vanguard/feet', 1144), + (15445, 15445, 'accessories/wearable_items/_exp08/tallonite_armor/vanguard/forearms', 1144), + (15446, 15446, 'accessories/wearable_items/_exp08/tallonite_armor/vanguard/hands', 1144), + (15447, 15447, 'accessories/wearable_items/_exp08/tallonite_armor/vanguard/head', 1144), + (15448, 15448, 'accessories/wearable_items/_exp08/tallonite_armor/vanguard/legs', 1144), + (15449, 15449, 'accessories/wearable_items/_exp08/tallonite_armor/vanguard/legs_noskirt', 1144), + (15450, 15450, 'accessories/wearable_items/_exp08/tallonite_armor/vanguard/right', 1144), + (15451, 15451, 'accessories/wearable_items/_exp08/tallonite_armor/vanguard/shoulders', 1144), + (15452, 15452, 'accessories/wearable_items/_exp08/tallonite_armor/vanguard/shoulders_nopauldrons', 1144), + (15453, 15453, 'accessories/wearable_items/_exp08/tallonite_armor/vanguard/shoulders_talonite_pauldron', 1144), + (15454, 15454, 'staticobjects/liveevent/frostfell/dpo_gumdrop_green01', 1144), + (15455, 15455, 'staticobjects/liveevent/frostfell/dpo_gumdrop_red01', 1144), + (15456, 15456, 'staticobjects/liveevent/frostfell/dpo_gumdrop_stack01', 1144), + (15457, 15457, 'staticobjects/liveevent/frostfell/dpo_gumdrop_white01', 1144), + (15458, 15458, 'staticobjects/liveevent/frostfell/dpo_vel_snowpile01', 1144), + (15459, 15459, 'staticobjects/liveevent/frostfell/dpo_holiday_gravy_boat01', 1144), + (15460, 15460, 'staticobjects/liveevent/frostfell/dpo_holiday_cup01', 1144), + (15461, 15461, 'staticobjects/liveevent/frostfell/dpo_holiday_cup02', 1144), + (15462, 15462, 'staticobjects/liveevent/frostfell/dpo_holiday_cake01', 1144), + (15463, 15463, 'staticobjects/liveevent/frostfell/dpo_holiday_soup_tureen01', 1144), + (15464, 15464, 'staticobjects/liveevent/frostfell/dpo_holiday_bowl_beans01', 1144), + (15465, 15465, 'staticobjects/liveevent/frostfell/dpo_holiday_bowl_chilis01', 1144), + (15466, 15466, 'staticobjects/liveevent/frostfell/dpo_gnome_sleigh_01', 1144), + (15467, 15467, 'accessories/wearable_items/_exp08/sifaye_armor/robe/skirt', 1144), + (15468, 15468, 'accessories/wearable_items/_exp08/sifaye_armor/robe/chest_fullrobe', 1144), + (15469, 15469, 'accessories/wearable_items/_exp08/sifaye_armor/robe/chest_noskirt', 1144), + (15470, 15470, 'accessories/wearable_items/_exp08/sifaye_armor/robe/feet', 1144), + (15471, 15471, 'accessories/wearable_items/_exp08/sifaye_armor/robe/hands', 1144), + (15472, 15472, 'accessories/wearable_items/_exp08/sifaye_armor/robe/head_collar', 1144), + (15473, 15473, 'accessories/wearable_items/_exp08/sifaye_armor/robe/head_hood', 1144), + (15474, 15474, 'accessories/wearable_items/_exp08/sifaye_armor/robe/pants', 1144), + (15475, 15475, 'accessories/wearable_items/profesion_hats/proffiddlewiz_cap_gearworked/head_dark', 1144), + (15476, 15476, 'accessories/wearable_items/profesion_hats/proffiddlewiz_cap_gearworked/head', 1144), + (15477, 15477, 'staticobjects/battlegrounds/dpo_bg_lobby_zoner', 1144), + (15478, 15478, 'staticobjects/battlegrounds/dpo_bg_lobby_armor_stand01', 1144), + (15479, 15479, 'staticobjects/battlegrounds/dpo_bg_lobby_counter01', 1144), + (15480, 15480, 'staticobjects/battlegrounds/dpo_bg_lobby_crate01_closed', 1144), + (15481, 15481, 'staticobjects/battlegrounds/dpo_bg_lobby_crate02_closed', 1144), + (15482, 15482, 'staticobjects/battlegrounds/dpo_bg_lobby_rug01', 1144), + (15483, 15483, 'staticobjects/battlegrounds/dpo_bg_lobby_scales_empty01', 1144), + (15484, 15484, 'staticobjects/battlegrounds/dpo_bg_lobby_scales_tipped01', 1144), + (15485, 15485, 'staticobjects/battlegrounds/dpo_bg_lobby_weaponrack01', 1144), + (15486, 15486, 'staticobjects/battlegrounds/dpo_bg_lobby_weaponrack_weapons01', 1144), + (15487, 15487, 'creatures/mounts/frostfell_snow_cloud', 1144), + (15488, 15488, 'staticobjects/soe_wallet/djn_lightsource_balloon_ornate01', 1144), + (15489, 15489, 'staticobjects/soe_wallet/djn_lightsource_balloon_ornate01_swinging', 1144), + (15490, 15490, 'staticobjects/soe_wallet/djn_lightsource_balloon_ornate01_yellow', 1144), + (15491, 15491, 'staticobjects/soe_wallet/djn_lightsource_balloon_ornate01_yellow_swinging', 1144), + (15492, 15492, 'staticobjects/soe_wallet/djn_lightsource_balloon_ornate02', 1144), + (15493, 15493, 'staticobjects/soe_wallet/djn_lightsource_balloon_ornate02_swinging', 1144), + (15494, 15494, 'staticobjects/archery/dpo_archery_target', 1144), + (15495, 15495, '_exp08/characters/tool_users/war_generals/war_general_male_light', 1144), + (15496, 15496, '_exp08/characters/tool_users/war_generals/war_general_female', 1144), + (15497, 15497, '_exp08/characters/tool_users/war_generals/war_general_male_black', 1144), + (15498, 15498, '_exp08/characters/tool_users/war_generals/war_general_male_boss', 1144), + (15499, 15499, '_exp08/characters/tool_users/war_generals/war_general_male_heavy01', 1144), + (15500, 15500, 'accessories/wearable_items/cloak/exp08/cloak_3straps_red', 1144), + (15501, 15501, 'accessories/wearable_items/cloak/exp08/cloak_3straps', 1144), + (15502, 15502, 'accessories/wearable_items/_exp08/unkown_faction_armor/chain/skirt', 1144), + (15503, 15503, 'accessories/wearable_items/_exp08/unkown_faction_armor/chain/chest', 1144), + (15504, 15504, 'accessories/wearable_items/_exp08/unkown_faction_armor/chain/feet', 1144), + (15505, 15505, 'accessories/wearable_items/_exp08/unkown_faction_armor/chain/forearms', 1144), + (15506, 15506, 'accessories/wearable_items/_exp08/unkown_faction_armor/chain/hands', 1144), + (15507, 15507, 'accessories/wearable_items/_exp08/unkown_faction_armor/chain/head', 1144), + (15508, 15508, 'accessories/wearable_items/_exp08/unkown_faction_armor/chain/legs', 1144), + (15509, 15509, 'accessories/wearable_items/_exp08/unkown_faction_armor/chain/legs_noskirt', 1144), + (15510, 15510, 'accessories/wearable_items/_exp08/unkown_faction_armor/chain/shoulders', 1144), + (15511, 15511, 'accessories/wearable_items/_exp08/tallonite_armor/snapons/leather_pauldrons_upper_left', 1144), + (15512, 15512, 'accessories/wearable_items/_exp08/tallonite_armor/snapons/leather_pauldrons_upper_right', 1144), + (15513, 15513, 'accessories/wearable_items/_exp08/unkown_faction_armor/leather/skirt', 1144), + (15514, 15514, 'accessories/wearable_items/_exp08/unkown_faction_armor/leather/chest', 1144), + (15515, 15515, 'accessories/wearable_items/_exp08/unkown_faction_armor/leather/feet', 1144), + (15516, 15516, 'accessories/wearable_items/_exp08/unkown_faction_armor/leather/forearms', 1144), + (15517, 15517, 'accessories/wearable_items/_exp08/unkown_faction_armor/leather/hands', 1144), + (15518, 15518, 'accessories/wearable_items/_exp08/unkown_faction_armor/leather/head', 1144), + (15519, 15519, 'accessories/wearable_items/_exp08/unkown_faction_armor/leather/legs', 1144), + (15520, 15520, 'accessories/wearable_items/_exp08/unkown_faction_armor/leather/legs_noskirt', 1144), + (15521, 15521, 'accessories/wearable_items/_exp08/unkown_faction_armor/leather/shoulders', 1144), + (15522, 15522, 'accessories/wearable_items/_exp08/unkown_faction_armor/robe/chest', 1144), + (15523, 15523, 'accessories/wearable_items/_exp08/unkown_faction_armor/robe/feet', 1144), + (15524, 15524, 'accessories/wearable_items/_exp08/unkown_faction_armor/robe/hands', 1144), + (15525, 15525, 'accessories/wearable_items/_exp08/unkown_faction_armor/robe/head', 1144), + (15526, 15526, 'accessories/wearable_items/_exp08/unkown_faction_armor/robe/pants', 1144), + (15527, 15527, 'accessories/wearable_items/_exp08/unkown_faction_armor/robe/skirt', 1144), + (15528, 15528, 'staticobjects/guildhall/trophies/floor_vallon_zek_fx', 1144), + (15529, 15529, 'staticobjects/guildhall/trophies/floor_sullon_zek', 1144), + (15530, 15530, 'staticobjects/guildhall/trophies/floor_sullon_zek_fx', 1144), + (15531, 15531, 'staticobjects/guildhall/trophies/floor_tallon_zek', 1144), + (15532, 15532, 'staticobjects/guildhall/trophies/floor_tallon_zek_fx', 1144), + (15533, 15533, 'staticobjects/guildhall/trophies/floor_vallon_zek', 1144), + (15534, 15534, '_exp07/objects/vel_coldain_frozen_in_ice', 1144), + (15535, 15535, 'creatures/mounts/flying_disc/flying_disc_clockwork_purple', 1144), + (15536, 15536, 'creatures/mounts/flying_disc/flying_disc_clockwork_gold', 1144), + (15537, 15537, 'creatures/mounts/flying_disc/flying_disc_clockwork_green', 1144), + (15538, 15538, 'creatures/mounts/class_hover_pads/hover_pad_assassin', 1144), + (15539, 15539, 'creatures/mounts/class_hover_pads/hover_pad_berserker', 1144), + (15540, 15540, 'creatures/mounts/class_hover_pads/hover_pad_brigand', 1144), + (15541, 15541, 'creatures/mounts/class_hover_pads/hover_pad_bruiser', 1144), + (15542, 15542, 'creatures/mounts/class_hover_pads/hover_pad_coercer', 1144), + (15543, 15543, 'creatures/mounts/class_hover_pads/hover_pad_conjuror', 1144), + (15544, 15544, 'creatures/mounts/class_hover_pads/hover_pad_defiler', 1144), + (15545, 15545, 'creatures/mounts/class_hover_pads/hover_pad_dirge', 1144), + (15546, 15546, 'creatures/mounts/class_hover_pads/hover_pad_fury', 1144), + (15547, 15547, 'creatures/mounts/class_hover_pads/hover_pad_guardian', 1144), + (15548, 15548, 'creatures/mounts/class_hover_pads/hover_pad_illusionist', 1144), + (15549, 15549, 'creatures/mounts/class_hover_pads/hover_pad_inquisitor', 1144), + (15550, 15550, 'creatures/mounts/class_hover_pads/hover_pad_monk', 1144), + (15551, 15551, 'creatures/mounts/class_hover_pads/hover_pad_mystic', 1144), + (15552, 15552, 'creatures/mounts/class_hover_pads/hover_pad_necromancer', 1144), + (15553, 15553, 'creatures/mounts/class_hover_pads/hover_pad_paladin', 1144), + (15554, 15554, 'creatures/mounts/class_hover_pads/hover_pad_ranger', 1144), + (15555, 15555, 'creatures/mounts/class_hover_pads/hover_pad_shadowknight', 1144), + (15556, 15556, 'creatures/mounts/class_hover_pads/hover_pad_swashbuckler', 1144), + (15557, 15557, 'creatures/mounts/class_hover_pads/hover_pad_templar', 1144), + (15558, 15558, 'creatures/mounts/class_hover_pads/hover_pad_troubador', 1144), + (15559, 15559, 'creatures/mounts/class_hover_pads/hover_pad_warden', 1144), + (15560, 15560, 'creatures/mounts/class_hover_pads/hover_pad_warlock', 1144), + (15561, 15561, 'creatures/mounts/raptor_mount/evil_raptor_mount', 1144), + (15562, 15562, 'accessories/wieldable_items/weapons/misc/sparkler_stick', 1144), + (15563, 15563, 'creatures/mounts/komodo_mount/komodo_mount_base', 1144), + (15564, 15564, 'creatures/mounts/komodo_mount/komodo_mount_black', 1144), + (15565, 15565, 'creatures/mounts/komodo_mount/komodo_mount_brown', 1144), + (15566, 15566, 'creatures/mounts/komodo_mount/komodo_mount_iceblue', 1144), + (15567, 15567, 'staticobjects/liveevent/dpo_fireworks_vase06', 1144), + (15568, 15568, 'staticobjects/liveevent/dpo_fireworks_vase01', 1144), + (15569, 15569, 'staticobjects/liveevent/dpo_fireworks_vase02', 1144), + (15570, 15570, 'staticobjects/liveevent/dpo_fireworks_vase03', 1144), + (15571, 15571, 'staticobjects/liveevent/dpo_fireworks_vase04', 1144), + (15572, 15572, 'staticobjects/liveevent/dpo_fireworks_vase05', 1144), + (15573, 15573, 'accessories/wearable_items/snapons/armbands/shoulders_armband_fur_right', 1144), + (15574, 15574, 'accessories/wearable_items/snapons/armbands/shoulders_armband_fur_left', 1144), + (15575, 15575, 'accessories/wearable_items/_exp08/short_skirts/basic/snap_ons/short_skirt', 1144), + (15576, 15576, 'accessories/wearable_items/_exp08/short_skirts/basic/snap_ons/belt', 1144), + (15577, 15577, 'accessories/wearable_items/_exp08/short_skirts/basic/shoulders_armband_fur', 1144), + (15578, 15578, 'accessories/wearable_items/_exp08/short_skirts/basic/chest', 1144), + (15579, 15579, 'accessories/wearable_items/_exp08/short_skirts/basic/feet', 1144), + (15580, 15580, 'accessories/wearable_items/_exp08/short_skirts/basic/hands', 1144), + (15581, 15581, 'accessories/wearable_items/_exp08/short_skirts/basic/head', 1144), + (15582, 15582, 'accessories/wearable_items/_exp08/short_skirts/basic/legs_short_skirt_base', 1144), + (15583, 15583, 'accessories/wearable_items/_exp08/short_skirts/basic/shoulders', 1144), + (15584, 15584, 'creatures/mounts/wolf_mount/wolf_mount_storm', 1144), + (15585, 15585, 'accessories/wearable_items/_exp08/short_skirts/short_skirt_02/snap_ons/short_skirt', 1144), + (15586, 15586, 'accessories/wearable_items/_exp08/short_skirts/short_skirt_02/snap_ons/belt', 1144), + (15587, 15587, 'accessories/wearable_items/_exp08/short_skirts/short_skirt_02/shoulders_armband_fur', 1144), + (15588, 15588, 'accessories/wearable_items/_exp08/short_skirts/short_skirt_02/chest', 1144), + (15589, 15589, 'accessories/wearable_items/_exp08/short_skirts/short_skirt_02/feet', 1144), + (15590, 15590, 'accessories/wearable_items/_exp08/short_skirts/short_skirt_02/hands', 1144), + (15591, 15591, 'accessories/wearable_items/_exp08/short_skirts/short_skirt_02/head', 1144), + (15592, 15592, 'accessories/wearable_items/_exp08/short_skirts/short_skirt_02/legs_short_skirt_base', 1144), + (15593, 15593, 'accessories/wearable_items/_exp08/short_skirts/short_skirt_02/shoulders', 1144), + (15594, 15594, 'creatures/mounts/raptor_mount/tradeskill_raptor_mount', 1144), + (15595, 15595, 'creatures/mounts/flying_disc/elemental_flying_disc_water', 1144), + (15596, 15596, 'creatures/mounts/flying_disc/elemental_flying_disc_air', 1144), + (15597, 15597, 'creatures/mounts/flying_disc/elemental_flying_disc_earth', 1144), + (15598, 15598, 'creatures/mounts/flying_disc/elemental_flying_disc_fire', 1144), + (15599, 15599, 'accessories/wearable_items/_exp08/combine_armor/snapons-helms/combine_shin_right', 1144), + (15600, 15600, 'accessories/wearable_items/_exp08/combine_armor/snapons-helms/combine_forearm_left', 1144), + (15601, 15601, 'accessories/wearable_items/_exp08/combine_armor/snapons-helms/combine_forearm_right', 1144), + (15602, 15602, 'accessories/wearable_items/_exp08/combine_armor/snapons-helms/combine_pauldron_left', 1144), + (15603, 15603, 'accessories/wearable_items/_exp08/combine_armor/snapons-helms/combine_pauldron_right', 1144), + (15604, 15604, 'accessories/wearable_items/_exp08/combine_armor/snapons-helms/combine_pauldrons_lower_left', 1144), + (15605, 15605, 'accessories/wearable_items/_exp08/combine_armor/snapons-helms/combine_pauldrons_lower_right', 1144), + (15606, 15606, 'accessories/wearable_items/_exp08/combine_armor/snapons-helms/combine_shin_left', 1144), + (15607, 15607, 'accessories/wearable_items/_exp08/combine_armor/vanguard/skirt_robe', 1144), + (15608, 15608, 'accessories/wearable_items/_exp08/combine_armor/vanguard/chest', 1144), + (15609, 15609, 'accessories/wearable_items/_exp08/combine_armor/vanguard/feet', 1144), + (15610, 15610, 'accessories/wearable_items/_exp08/combine_armor/vanguard/forearms', 1144), + (15611, 15611, 'accessories/wearable_items/_exp08/combine_armor/vanguard/hands', 1144), + (15612, 15612, 'accessories/wearable_items/_exp08/combine_armor/vanguard/head_combine_helm', 1144), + (15613, 15613, 'accessories/wearable_items/_exp08/combine_armor/vanguard/legs', 1144), + (15614, 15614, 'accessories/wearable_items/_exp08/combine_armor/vanguard/legs_epic', 1144), + (15615, 15615, 'accessories/wearable_items/_exp08/combine_armor/vanguard/legs_noskirt', 1144), + (15616, 15616, 'accessories/wearable_items/_exp08/combine_armor/vanguard/shoulders', 1144), + (15617, 15617, 'accessories/wearable_items/_exp08/combine_armor/vanguard/shoulders_epic', 1144), + (15618, 15618, 'accessories/wearable_items/_exp08/combine_armor/vanguard/skirt_chain', 1144), + (15619, 15619, 'accessories/wieldable_items/weapons/exp07/1h_crush/1h_wand_deathbringer_yellow', 1144), + (15620, 15620, 'accessories/wieldable_items/weapons/exp07/1h_crush/1h_hammer_deathbringer_green', 1144), + (15621, 15621, 'accessories/wieldable_items/weapons/exp07/1h_crush/1h_hammer_deathbringer_purple', 1144), + (15622, 15622, 'accessories/wieldable_items/weapons/exp07/1h_crush/1h_hammer_deathbringer_yellow', 1144), + (15623, 15623, 'accessories/wieldable_items/weapons/exp07/1h_crush/1h_wand_deathbringer_green', 1144), + (15624, 15624, 'accessories/wieldable_items/weapons/exp07/1h_crush/1h_wand_deathbringer_purple', 1144), + (15625, 15625, 'accessories/wieldable_items/weapons/exp07/1h_sword/exp07_1hs_sword_deathbringer_yellow', 1144), + (15626, 15626, 'accessories/wieldable_items/weapons/exp07/1h_sword/exp07_1hs_sword_deathbringer_green', 1144), + (15627, 15627, 'accessories/wieldable_items/weapons/exp07/1h_sword/exp07_1hs_sword_deathbringer_purple', 1144), + (15628, 15628, 'accessories/wieldable_items/weapons/exp07/2h_sword/exp07_2hs_sword_deathbringer_yellow', 1144), + (15629, 15629, 'accessories/wieldable_items/weapons/exp07/2h_sword/exp07_2hs_sword_deathbringer_green', 1144), + (15630, 15630, 'accessories/wieldable_items/weapons/exp07/2h_sword/exp07_2hs_sword_deathbringer_purple', 1144), + (15631, 15631, 'accessories/wieldable_items/weapons/exp07/staff/exp07_staff_deathbringer_yellow', 1144), + (15632, 15632, 'accessories/wieldable_items/weapons/exp07/staff/exp07_staff_deathbringer_green', 1144), + (15633, 15633, 'accessories/wieldable_items/weapons/exp07/staff/exp07_staff_deathbringer_purple', 1144), + (15634, 15634, 'creatures/mounts/komodo_mount/komodo_mount_packtrade', 1144), + (15635, 15635, '_exp08/characters/tool_users/ulthork/ulthork_male_light01', 1144), + (15636, 15636, '_exp08/characters/tool_users/hunter_female/hunter_female', 1144), + (15637, 15637, 'accessories/wearable_items/cloak/exp08/cloak_poppies_scalloped', 1144), + (15638, 15638, '_exp08/characters/monsters/komodo/komodo', 1144), + (15639, 15639, 'creatures/mounts/raptor_mount/raptor_wild_base', 1144), + (15640, 15640, 'creatures/mounts/terrorbird_mount/terrorbird_wild', 1144), + (15641, 15641, 'creatures/mounts/raptor_mount/raptor_wild_evil', 1144), + (15642, 15642, 'staticobjects/housing_portal_objects/vision_home_floatingisland01', 1144), + (15643, 15643, 'creatures/mounts/raptor_mount/tropical_raptor_mount_base', 1144), + (15644, 15644, 'staticobjects/liveevent/tinkerfest/dpo_tinkered_hologram_projector', 1144), + (15645, 15645, '_exp08/characters/monsters/komodo/komodo_blackred', 1144), + (15646, 15646, 'staticobjects/soe_wallet/station_furniture_kaladim_table01', 1144), + (15647, 15647, 'staticobjects/soe_wallet/station_furniture_kaladim_bed01', 1144), + (15648, 15648, 'staticobjects/soe_wallet/station_furniture_kaladim_bench01', 1144), + (15649, 15649, 'staticobjects/soe_wallet/station_furniture_kaladim_largetable01', 1144), + (15650, 15650, 'staticobjects/soe_wallet/station_furniture_kaladim_nightstand01', 1144), + (15651, 15651, 'staticobjects/soe_wallet/station_furniture_kaladim_singlekeg01', 1144), + (15652, 15652, 'staticobjects/soe_wallet/station_furniture_kaladim_stool01', 1144), + (15653, 15653, 'accessories/wearable_items/cloak/exp08/cloak_3straps_komodo', 1144), + (15654, 15654, 'creatures/mounts/horse_saddle_bags_01/horse01_sadle_bags_01_appoloosa_alt', 1144), + (15655, 15655, '_exp04/zones/objects/fens_of_nathsar/fon_poi_ruin_cabilis_wall03', 1144), + (15656, 15656, 'accessories/wearable_items/_exp08/ullkorruuk_armor/chest', 1144), + (15657, 15657, 'accessories/wearable_items/_exp08/ullkorruuk_armor/feet', 1144), + (15658, 15658, 'accessories/wearable_items/_exp08/ullkorruuk_armor/forearms', 1144), + (15659, 15659, 'accessories/wearable_items/_exp08/ullkorruuk_armor/hands', 1144), + (15660, 15660, 'accessories/wearable_items/_exp08/ullkorruuk_armor/head', 1144), + (15661, 15661, 'accessories/wearable_items/_exp08/ullkorruuk_armor/head_vanguard', 1144), + (15662, 15662, 'accessories/wearable_items/_exp08/ullkorruuk_armor/legs', 1144), + (15663, 15663, 'accessories/wearable_items/_exp08/ullkorruuk_armor/legs_noskirt', 1144), + (15664, 15664, 'accessories/wearable_items/_exp08/ullkorruuk_armor/right', 1144), + (15665, 15665, 'accessories/wearable_items/_exp08/ullkorruuk_armor/shoulders', 1144), + (15666, 15666, 'accessories/wearable_items/_exp08/ullkorruuk_armor/shoulders_nopauldrons', 1144), + (15667, 15667, 'accessories/wearable_items/_exp08/ullkorruuk_armor/shoulders_ullkorruuk', 1144), + (15668, 15668, 'accessories/wearable_items/_exp08/ullkorruuk_armor/skirt', 1144), + (15669, 15669, 'accessories/wearable_items/_exp08/ullkorruuk_armor/ullkorruuk_armor_pauldron_left', 1144), + (15670, 15670, 'accessories/wearable_items/_exp08/ullkorruuk_armor/ullkorruuk_armor_pauldron_right', 1144), + (15671, 15671, 'accessories/wearable_items/_exp08/ullkorruuk_armor/ullkorruuk_armor_waist', 1144), + (15672, 15672, '_exp08/characters/monsters/falcon_god/falcon_god', 1144), + (15673, 15673, 'accessories/wieldable_items/weapons/exp08/2h_crush/exp08_2h_crush_pillarofjustice', 1144), + (15674, 15674, 'accessories/wieldable_items/weapons/exp08/2h_sword/exp07_2hs_sword_knightslayer', 1144), + (15675, 15675, 'creatures/mounts/griffin_mount/griffin_mount_peacock', 1144), + (15676, 15676, 'accessories/wearable_items/cloak/exp08/cloak_peacock', 1144), + (15677, 15677, 'staticobjects/_exp07/pw_ballista_launcher', 1144), + (15678, 15678, 'staticobjects/rubble/slove_rubblepiece_purple01_horizontal', 1144), + (15679, 15679, 'staticobjects/rubble/slove_rubblepiece_trim01_horizontal', 1144), + (15680, 15680, 'accessories/wearable_items/valkyrie/chest', 1144), + (15681, 15681, 'accessories/wearable_items/valkyrie/hands', 1144), + (15682, 15682, 'accessories/wearable_items/valkyrie/legs', 1144), + (15683, 15683, 'accessories/wearable_items/snapons/backpacks/backpack_assassin', 1144), + (15684, 15684, 'accessories/wieldable_items/shields/exp08/exp08_shield_round_crystalline', 1144), + (15685, 15685, 'accessories/wieldable_items/weapons/exp08/1h_crush/wand_crystalline', 1144), + (15686, 15686, 'accessories/wieldable_items/weapons/exp08/1h_crush/mace_crystalline', 1144), + (15687, 15687, 'accessories/wieldable_items/weapons/exp08/1h_sword/exp08_sword_crystalline', 1144), + (15688, 15688, 'accessories/wieldable_items/weapons/exp08/2h_sword/exp07_2hs_sword_crystalline', 1144), + (15689, 15689, 'staticobjects/signs/freeport/dpo_freeport_wall_sign', 1144), + (15690, 15690, 'staticobjects/signs/freeport/dpo_freeport_post_sign', 1144), + (15691, 15691, 'staticobjects/signs/general/dpo_rivervale_post_sign', 1144), + (15692, 15692, 'staticobjects/signs/gorowyn/dpo_gorowyn_wall_sign', 1144), + (15693, 15693, 'staticobjects/signs/kelethin/dpo_kelethin_post_sign', 1144), + (15694, 15694, 'staticobjects/signs/neriak/dpo_neriak_square_sign', 1144), + (15695, 15695, 'staticobjects/signs/qeynos/dpo_qeynos_wall_sign', 1144), + (15696, 15696, 'staticobjects/signs/qeynos/dpo_qeynos_hanging_sign', 1144), + (15697, 15697, 'staticobjects/shield/lodizal_shield_houseitem', 1144), + (15698, 15698, 'creatures/monsters/tyrannosaurus_mount', 1144), + (15699, 15699, 'accessories/wearable_items/_exp08/robe_evil_dark_red/chest', 1144), + (15700, 15700, 'accessories/wearable_items/_exp08/robe_evil_dark_red/feet', 1144), + (15701, 15701, 'accessories/wearable_items/_exp08/robe_evil_dark_red/hands', 1144), + (15702, 15702, 'accessories/wearable_items/_exp08/robe_evil_dark_red/head_collar', 1144), + (15703, 15703, 'accessories/wearable_items/_exp08/robe_evil_dark_red/head_evil_conjurer', 1144), + (15704, 15704, 'accessories/wearable_items/_exp08/robe_evil_dark_red/pants', 1144), + (15705, 15705, 'accessories/wearable_items/_exp08/robe_evil_dark_red/skirt', 1144), + (15706, 15706, 'accessories/wieldable_items/shields/exp08/exp08_shield_ice', 1144), + (15707, 15707, 'accessories/wieldable_items/shields/exp08/exp08_shield_nature', 1144), + (15708, 15708, 'accessories/wieldable_items/weapons/exp08/bow/exp08_bow_nature', 1144), + (15709, 15709, 'accessories/wieldable_items/weapons/exp08/fist/exp08_fist_icespike', 1144), + (15710, 15710, 'accessories/wearable_items/vanguard/vanguard_chitin_black_silver/chest', 1144), + (15711, 15711, 'accessories/wearable_items/vanguard/vanguard_chitin_black_silver/feet', 1144), + (15712, 15712, 'accessories/wearable_items/vanguard/vanguard_chitin_black_silver/forearms', 1144), + (15713, 15713, 'accessories/wearable_items/vanguard/vanguard_chitin_black_silver/hands', 1144), + (15714, 15714, 'accessories/wearable_items/vanguard/vanguard_chitin_black_silver/head', 1144), + (15715, 15715, 'accessories/wearable_items/vanguard/vanguard_chitin_black_silver/left', 1144), + (15716, 15716, 'accessories/wearable_items/vanguard/vanguard_chitin_black_silver/legs', 1144), + (15717, 15717, 'accessories/wearable_items/vanguard/vanguard_chitin_black_silver/legs_noskirt', 1144), + (15718, 15718, 'accessories/wearable_items/vanguard/vanguard_chitin_black_silver/pauldron02_vanguard_ridged_left', 1144), + (15719, 15719, 'accessories/wearable_items/vanguard/vanguard_chitin_black_silver/pauldron02_vanguard_ridged_right', 1144), + (15720, 15720, 'accessories/wearable_items/vanguard/vanguard_chitin_black_silver/pauldron03_vanguard_flared_left', 1144), + (15721, 15721, 'accessories/wearable_items/vanguard/vanguard_chitin_black_silver/pauldron03_vanguard_flared_right', 1144), + (15722, 15722, 'accessories/wearable_items/vanguard/vanguard_chitin_black_silver/right', 1144), + (15723, 15723, 'accessories/wearable_items/vanguard/vanguard_chitin_black_silver/shoulders', 1144), + (15724, 15724, 'accessories/wearable_items/vanguard/vanguard_chitin_black_silver/shoulders_flared', 1144), + (15725, 15725, 'accessories/wearable_items/vanguard/vanguard_chitin_black_silver/shoulders_nopauldrons', 1144), + (15726, 15726, 'accessories/wearable_items/vanguard/vanguard_chitin_black_silver/shoulders_ridged', 1144), + (15727, 15727, 'accessories/wearable_items/vanguard/vanguard_chitin_black_silver/skirt', 1144), + (15728, 15728, 'accessories/wearable_items/vanguard/vanguard_chitin_black_silver/upperchest', 1144), + (15729, 15729, 'creatures/mounts/fae_mount/fae_mount', 1144), + (15730, 15730, 'creatures/mounts/komodo_mount/komodo_mount_iceblue_epic', 1144), + (15731, 15731, 'accessories/wearable_items/snapons/armbands/shoulders_armband_fire_green_both', 1144), + (15732, 15732, 'accessories/wearable_items/snapons/armbands/shoulders_armband_fire_green_left', 1144), + (15733, 15733, 'accessories/wearable_items/snapons/armbands/shoulders_armband_fire_green_right', 1144), + (15734, 15734, 'accessories/wearable_items/snapons/armbands/shoulders_armband_fire_red_both', 1144), + (15735, 15735, 'accessories/wearable_items/snapons/armbands/shoulders_armband_fire_red_left', 1144), + (15736, 15736, 'accessories/wearable_items/snapons/armbands/shoulders_armband_fire_red_right', 1144), + (15737, 15737, 'accessories/wearable_items/snapons/backpacks/backpack_samurai', 1144), + (15738, 15738, 'creatures/mounts/raptor_mount/raptor_mount_armor_blue', 1144), + (15739, 15739, 'creatures/mounts/pegasus_mount/pegasus_mount_nightmare', 1144), + (15740, 15740, 'creatures/mounts/pegasus_mount/pegasus_mount_nightmare_green', 1144), + (15741, 15741, 'creatures/mounts/pegasus_mount/pegasus_mount_nightmare_violet', 1144), + (15742, 15742, 'staticobjects/dividers/dpo_gf_kel_int_divider_wall01_qey_stone14', 1144), + (15743, 15743, 'staticobjects/dividers/dpo_gf_kel_int_divider_wall01_qey_stone01', 1144), + (15744, 15744, 'staticobjects/dividers/dpo_gf_kel_int_divider_wall01_qey_stone02', 1144), + (15745, 15745, 'staticobjects/dividers/dpo_gf_kel_int_divider_wall01_qey_stone12', 1144), + (15746, 15746, 'staticobjects/panels/dpo_tile_weathereddark', 1144), + (15747, 15747, 'staticobjects/panels/dpo_cloudsk_panel', 1144), + (15748, 15748, 'staticobjects/panels/dpo_tile_altarwood', 1144), + (15749, 15749, 'staticobjects/panels/dpo_tile_ashenwood', 1144), + (15750, 15750, 'staticobjects/panels/dpo_tile_blondwood', 1144), + (15751, 15751, 'staticobjects/panels/dpo_tile_brownwood', 1144), + (15752, 15752, 'staticobjects/panels/dpo_tile_fairy_mossywood', 1144), + (15753, 15753, 'staticobjects/panels/dpo_tile_halaswood', 1144), + (15754, 15754, 'staticobjects/panels/dpo_tile_halaswoodtrim', 1144), + (15755, 15755, 'staticobjects/panels/dpo_tile_marrwood', 1144), + (15756, 15756, 'staticobjects/panels/dpo_tile_metalwood', 1144), + (15757, 15757, 'staticobjects/panels/dpo_tile_qey_stone01', 1144), + (15758, 15758, 'staticobjects/panels/dpo_tile_qey_stone02', 1144), + (15759, 15759, 'staticobjects/panels/dpo_tile_qey_stone12', 1144), + (15760, 15760, 'staticobjects/panels/dpo_tile_qey_stone14', 1144), + (15761, 15761, 'staticobjects/panels/dpo_tile_redwood', 1144), + (15762, 15762, 'staticobjects/panels/dpo_tile_rosewood', 1144), + (15763, 15763, 'staticobjects/panels/dpo_tile_sandalwood', 1144), + (15764, 15764, 'staticobjects/panels/dpo_tile_sumacwood', 1144), + (15765, 15765, 'staticobjects/panels/dpo_tile_tablenoplanks', 1144), + (15766, 15766, 'staticobjects/panels/dpo_tile_wavywood', 1144), + (15767, 15767, 'staticobjects/dividers/dpo_gf_kel_int_divider_wall01_halaswood', 1144), + (15768, 15768, 'creatures/pets/pet_kitten/odus_prowler_kitten', 1144), + (15769, 15769, 'creatures/pets/pet_kitten/odus_prowler_kitten_death', 1144), + (15770, 15770, 'creatures/pets/pet_kitten/odus_prowler_kitten_poison', 1144), + (15771, 15771, 'creatures/pets/pet_kitten/odus_prowler_kitten_skeletal', 1144), + (15772, 15772, 'creatures/pets/pet_kitten/odus_prowler_kitten_void', 1144), + (15773, 15773, 'accessories/wieldable_items/shields/exp08/exp08_shield_flame', 1144), + (15774, 15774, 'accessories/wieldable_items/shields/exp08/exp08_shield_soulripper', 1144), + (15775, 15775, 'accessories/wieldable_items/weapons/exp08/bow/exp08_bow_flame', 1144), + (15776, 15776, 'accessories/wieldable_items/weapons/exp08/bow/exp08_bow_soulripper', 1144), + (15777, 15777, 'accessories/wieldable_items/weapons/exp08/staff/exp08_staff_bugbearmystic', 1144), + (15778, 15778, 'accessories/wearable_items/cloak/exp08/cloak_squirrel', 1144), + (15779, 15779, 'accessories/wearable_items/cloak/exp08/cloak_squirrel_skunk', 1144), + (15780, 15780, 'staticobjects/pictures/conceptpainting_oduswasteland', 1144), + (15781, 15781, 'staticobjects/pictures/conceptpainting_guk', 1144), + (15782, 15782, 'staticobjects/soe_wallet/painting_skyfire', 1144), + (15783, 15783, 'staticobjects/soe_wallet/painting_burningwoods', 1144), + (15784, 15784, 'staticobjects/soe_wallet/painting_chelsith', 1144), + (15785, 15785, 'staticobjects/soe_wallet/painting_craterjungle', 1144), + (15786, 15786, 'staticobjects/soe_wallet/painting_frontier', 1144), + (15787, 15787, 'creatures/tu/gods_rallos_zek_new_gold', 1144), + (15788, 15788, 'creatures/tu/gods_rallos_zek_new_stone', 1144), + (15789, 15789, 'accessories/wieldable_items/weapons/exp08/1h_crush/club_zombiebane', 1144), + (15790, 15790, 'accessories/wieldable_items/weapons/exp08/staff/exp08_staff_pitchfork', 1144), + (15791, 15791, 'accessories/wearable_items/profesion_hats/firiona_vie_tiara_lon/head_firiona_vie_tiara_lon_evil', 1144), + (15792, 15792, 'accessories/wearable_items/cloak/exp08/cloak_3straps_black', 1144), + (15793, 15793, 'accessories/wearable_items/cloak/exp08/cloak_3straps_white', 1144), + (15794, 15794, 'accessories/wearable_items/profesion_hats/firiona_vie_tiara_lon/head_firiona_vie_tiara_lon_evil_fx', 1144), + (15795, 15795, 'accessories/wearable_items/snapons/backpacks/crossblades_empowered', 1144), + (15796, 15796, 'staticobjects/weapons/dpo_sc_exp08_fist_icespike', 1144), + (15797, 15797, 'staticobjects/shield/dpo_sc_exp08_shield_crystalline', 1144), + (15798, 15798, 'staticobjects/shield/dpo_sc_exp08_shield_icespike', 1144), + (15799, 15799, 'staticobjects/soe_wallet/holiday_objects/pumpkin_bowl_eyes_purple', 1144), + (15800, 15800, 'staticobjects/soe_wallet/holiday_objects/pumpkin_bowl_candy', 1144), + (15801, 15801, 'staticobjects/soe_wallet/holiday_objects/pumpkin_bowl_candy_green', 1144), + (15802, 15802, 'staticobjects/soe_wallet/holiday_objects/pumpkin_bowl_candy_purple', 1144), + (15803, 15803, 'staticobjects/soe_wallet/holiday_objects/pumpkin_bowl_eyes', 1144), + (15804, 15804, 'staticobjects/soe_wallet/holiday_objects/pumpkin_bowl_eyes_green', 1144), + (15805, 15805, 'staticobjects/soe_wallet/furniture_grecian_wash', 1144), + (15806, 15806, 'staticobjects/soe_wallet/furniture_grecian_alt1_column', 1144), + (15807, 15807, 'staticobjects/soe_wallet/furniture_grecian_alt1_fountain', 1144), + (15808, 15808, 'staticobjects/soe_wallet/furniture_grecian_alt1_kingbed', 1144), + (15809, 15809, 'staticobjects/soe_wallet/furniture_grecian_alt1_sofa', 1144), + (15810, 15810, 'staticobjects/soe_wallet/furniture_grecian_alt1_table', 1144), + (15811, 15811, 'staticobjects/soe_wallet/furniture_grecian_alt1_wash', 1144), + (15812, 15812, 'staticobjects/soe_wallet/furniture_grecian_column', 1144), + (15813, 15813, 'staticobjects/soe_wallet/furniture_grecian_fountain', 1144), + (15814, 15814, 'staticobjects/soe_wallet/furniture_grecian_kingbed', 1144), + (15815, 15815, 'staticobjects/soe_wallet/furniture_grecian_sofa', 1144), + (15816, 15816, 'staticobjects/soe_wallet/furniture_grecian_table', 1144), + (15817, 15817, '_exp08/characters/monsters/pw_ballista/pw_ballista', 1144), + (15818, 15818, 'accessories/wearable_items/_exp08/red_dark_elf_armor/skirt', 1144), + (15819, 15819, 'accessories/wearable_items/_exp08/red_dark_elf_armor/chest', 1144), + (15820, 15820, 'accessories/wearable_items/_exp08/red_dark_elf_armor/feet', 1144), + (15821, 15821, 'accessories/wearable_items/_exp08/red_dark_elf_armor/forearms', 1144), + (15822, 15822, 'accessories/wearable_items/_exp08/red_dark_elf_armor/hands', 1144), + (15823, 15823, 'accessories/wearable_items/_exp08/red_dark_elf_armor/head', 1144), + (15824, 15824, 'accessories/wearable_items/_exp08/red_dark_elf_armor/legs', 1144), + (15825, 15825, 'accessories/wearable_items/_exp08/red_dark_elf_armor/legs_noskirt', 1144), + (15826, 15826, 'accessories/wearable_items/_exp08/red_dark_elf_armor/shoulders', 1144), + (15827, 15827, 'accessories/wearable_items/_exp08/short_skirts/tintable_01/snap_ons/belt', 1144), + (15828, 15828, 'accessories/wearable_items/_exp08/short_skirts/tintable_01/snap_ons/short_skirt', 1144), + (15829, 15829, 'accessories/wearable_items/_exp08/short_skirts/tintable_01/chest', 1144), + (15830, 15830, 'accessories/wearable_items/_exp08/short_skirts/tintable_01/feet', 1144), + (15831, 15831, 'accessories/wearable_items/_exp08/short_skirts/tintable_01/hands', 1144), + (15832, 15832, 'accessories/wearable_items/_exp08/short_skirts/tintable_01/head', 1144), + (15833, 15833, 'accessories/wearable_items/_exp08/short_skirts/tintable_01/legs_short_skirt_base', 1144), + (15834, 15834, 'accessories/wearable_items/_exp08/short_skirts/tintable_01/shoulders', 1144), + (15835, 15835, 'creatures/mounts/pegasus_mount/pegasus_mount_epic', 1144), + (15836, 15836, 'accessories/wieldable_items/weapons/exp08/bow/exp08_bow_huntress', 1144), + (15837, 15837, 'staticobjects/_exp07/exp07_dun_plane_of_war_raid/pow_stone_pillar', 1144), + (15838, 15838, 'accessories/wieldable_items/weapons/exp08/1h_crush/club_treebranch', 1144), + (15839, 15839, 'accessories/wearable_items/snapons/backpacks/backpack_assassin_swivel/backpack_assassin_swivel', 1144), + (15840, 15840, 'accessories/wearable_items/snapons/backpacks/backpack_assassin_swivel/backpack_assassin_swivel_jug', 1144), + (15841, 15841, 'accessories/wieldable_items/weapons/exp08/bow/exp08_bow_lightning', 1144), + (15842, 15842, 'creatures/mounts/horse_heavy/horse_nightmare_fire', 1144), + (15843, 15843, 'creatures/mounts/horse_heavy/horse_epic_good', 1144), + (15844, 15844, 'creatures/mounts/terrorbird_mount/terrorbird_mount_vulrich', 1144), + (15845, 15845, 'staticobjects/soe_wallet/dpo_moon_telescope', 1144), + (15846, 15846, 'staticobjects/soe_wallet/holiday_objects/holiday_brazier', 1144), + (15847, 15847, 'staticobjects/shield/dpo_sc_exp08_shield_flame', 1144), + (15848, 15848, 'staticobjects/housing_portal_objects/vision_home_pedestal01', 1144), + (15849, 15849, 'staticobjects/housing_portal_objects/vision_home_majdul_blades01', 1144), + (15850, 15850, 'staticobjects/housing_portal_objects/vision_home_majdul_moon01', 1144), + (15851, 15851, 'staticobjects/housing_portal_objects/vision_home_unrest', 1144), + (15852, 15852, 'accessories/wieldable_items/weapons/exp08/1h_wand/wand_magic_prismatic_uber', 1144), + (15853, 15853, 'accessories/wieldable_items/weapons/exp08/1h_wand/wand001_ornate', 1144), + (15854, 15854, 'accessories/wieldable_items/weapons/exp08/1h_wand/wand001_plain', 1144), + (15855, 15855, 'accessories/wieldable_items/weapons/exp08/1h_wand/wand001_runic', 1144), + (15856, 15856, 'accessories/wieldable_items/weapons/exp08/1h_wand/wand001_rusty', 1144), + (15857, 15857, 'creatures/mounts/squirrel_mount/squirrel_mount_base', 1144), + (15858, 15858, '_exp07/characters/tool_users/sullon_zek/sullon_zek_glowing', 1144), + (15859, 15859, '_exp07/characters/tool_users/tallon_zek/tallon_zek_glow', 1144), + (15860, 15860, '_exp07/characters/tool_users/vallon_zek/vallon_zek_glow', 1144), + (15861, 15861, 'creatures/mounts/anglerserpent_mount/anglerserpent_mount_base', 1144), + (15862, 15862, 'creatures/mounts/anglerserpent_mount/anglerserpent_mount_iceblue', 1144), + (15863, 15863, 'creatures/mounts/anglerserpent_mount/anglerserpent_mount_lizardgreen', 1144), + (15864, 15864, 'creatures/mounts/anglerserpent_mount/anglerserpent_mount_redhot', 1144), + (15865, 15865, 'accessories/wieldable_items/shields/exp08/exp08_shield_vjornir', 1144), + (15866, 15866, 'staticobjects/tcg/tcg_painting61_shadowmagic', 1144), + (15867, 15867, 'staticobjects/tcg/tcg_painting58_cherryblossom', 1144), + (15868, 15868, 'staticobjects/tcg/tcg_painting59_sacredgrove', 1144), + (15869, 15869, 'staticobjects/tcg/tcg_painting60_grimbelly', 1144), + (15870, 15870, 'staticobjects/_exp07/exp07_dun_plane_of_war_raid/pow_throne_orb', 1144), + (15871, 15871, 'accessories/wieldable_items/shields/exp08/exp08_shield_round_crystalline_skull', 1144), + (15872, 15872, '_exp08/characters/tool_users/ulthork/ulthork_male_base', 1144), + (15873, 15873, 'staticobjects/soe_wallet/treasure_pile_gold_gems', 1144), + (15874, 15874, 'staticobjects/soe_wallet/treasure_pile_gold', 1144), + (15875, 15875, '_exp08/characters/tool_users/ulthork/ulthork_male_grey', 1144), + (15876, 15876, '_exp08/characters/tool_users/ulthork/ulthork_male_heavy01', 1144), + (15877, 15877, '_exp08/characters/tool_users/ulthork/ulthork_male_tattoo', 1144), + (15878, 15878, '_exp01/zones/objects/scrolls/drv_stand_scroll_lamp', 1144), + (15879, 15879, 'accessories/wearable_items/_exp08/barbarian_heritage_armor/snap_ons/barbarian_armband_large_left', 1144), + (15880, 15880, 'accessories/wearable_items/_exp08/barbarian_heritage_armor/snap_ons/barbarian_armband_large_right', 1144), + (15881, 15881, 'accessories/wearable_items/_exp08/barbarian_heritage_armor/snap_ons/barbarian_armband_left', 1144), + (15882, 15882, 'accessories/wearable_items/_exp08/barbarian_heritage_armor/snap_ons/barbarian_armband_right', 1144), + (15883, 15883, 'accessories/wearable_items/_exp08/barbarian_heritage_armor/snap_ons/barbarian_boot_cuff_left', 1144), + (15884, 15884, 'accessories/wearable_items/_exp08/barbarian_heritage_armor/snap_ons/barbarian_boot_cuff_right', 1144), + (15885, 15885, 'accessories/wearable_items/_exp08/barbarian_heritage_armor/snap_ons/barbarian_pauldron_left', 1144), + (15886, 15886, 'accessories/wearable_items/_exp08/barbarian_heritage_armor/snap_ons/barbarian_pauldron_right', 1144), + (15887, 15887, 'accessories/wearable_items/_exp08/barbarian_heritage_armor/snap_ons/belt', 1144), + (15888, 15888, 'accessories/wearable_items/_exp08/barbarian_heritage_armor/snap_ons/short_skirt', 1144), + (15889, 15889, 'accessories/wearable_items/_exp08/barbarian_heritage_armor/snap_ons/swivel_feather_01', 1144), + (15890, 15890, 'accessories/wearable_items/_exp08/barbarian_heritage_armor/snap_ons/swivel_fur_01', 1144), + (15891, 15891, 'accessories/wearable_items/_exp08/barbarian_heritage_armor/snap_ons/swivel_fur_02', 1144), + (15892, 15892, 'accessories/wearable_items/_exp08/barbarian_heritage_armor/chest', 1144), + (15893, 15893, 'accessories/wieldable_items/shields/exp08/exp08_shield_pvp', 1144), + (15894, 15894, 'accessories/wieldable_items/weapons/exp08/1h_crush/exp07_1h_crush_pvp', 1144), + (15895, 15895, 'accessories/wearable_items/_exp08/barbarian_heritage_armor/feet_barbarian_heritage', 1144), + (15896, 15896, 'accessories/wearable_items/_exp08/barbarian_heritage_armor/hands', 1144), + (15897, 15897, 'accessories/wearable_items/_exp08/barbarian_heritage_armor/head_barbarian_heritage', 1144), + (15898, 15898, 'accessories/wearable_items/_exp08/barbarian_heritage_armor/legs_short_skirt_base', 1144), + (15899, 15899, 'accessories/wearable_items/_exp08/barbarian_heritage_armor/shoulders_armbands_only', 1144), + (15900, 15900, 'accessories/wearable_items/_exp08/barbarian_heritage_armor/shoulders_barbarian_heritage_pauldrons', 1144), + (15901, 15901, 'staticobjects/housing_rewards/housing_trophy_gold', 1144), + (15902, 15902, 'accessories/wieldable_items/weapons/exp08/1h_crush/exp08_pvp_swivel_hook', 1144), + (15903, 15903, 'accessories/wieldable_items/weapons/exp08/1h_pierce/exp08_1h_dagger_pvp', 1144), + (15904, 15904, 'accessories/wieldable_items/weapons/exp08/1h_sword/exp07_1hs_sword_pvp', 1144), + (15905, 15905, 'accessories/wearable_items/_exp08/barbarian_heritage_armor/snap_ons/shoulders', 1144), + (15906, 15906, 'creatures/monsters/stagg_glass_giant', 1144), + (15907, 15907, '_exp08/characters/tool_users/ulthork/ulthork_male_shaman01', 1144), + (15908, 15908, '_exp08/characters/tool_users/ulthork/ulthork_swivel_skull', 1144), + (15909, 15909, 'ec/pc/human/human_male_normal_test', 1144), + (15910, 15910, 'accessories/wearable_items/_exp08/barbarian_heritage_armor/snap_ons/barbarian_heritage_fur_collar', 1144), + (15911, 15911, 'accessories/wearable_items/cloak/exp08/cloak_barbarian_heritage', 1144), + (15912, 15912, '_exp08/characters/tool_users/chitari/chitari_male_base', 1144), + (15913, 15913, 'accessories/wearable_items/_exp08/pvp_armor/chain/chest', 1144), + (15914, 15914, 'accessories/wearable_items/_exp08/pvp_armor/chain/feet', 1144), + (15915, 15915, 'accessories/wearable_items/_exp08/pvp_armor/chain/forearms', 1144), + (15916, 15916, 'accessories/wearable_items/_exp08/pvp_armor/chain/forearms_epic', 1144), + (15917, 15917, 'accessories/wearable_items/_exp08/pvp_armor/chain/hands', 1144), + (15918, 15918, 'accessories/wearable_items/_exp08/pvp_armor/chain/head', 1144), + (15919, 15919, 'accessories/wearable_items/_exp08/pvp_armor/chain/head_epic', 1144), + (15920, 15920, 'accessories/wearable_items/_exp08/pvp_armor/chain/legs', 1144), + (15921, 15921, 'accessories/wearable_items/_exp08/pvp_armor/chain/legs_epic', 1144), + (15922, 15922, 'accessories/wearable_items/_exp08/pvp_armor/chain/legs_noskirt', 1144), + (15923, 15923, 'accessories/wearable_items/_exp08/pvp_armor/chain/shoulders', 1144), + (15924, 15924, 'accessories/wearable_items/_exp08/pvp_armor/chain/shoulders_epic', 1144), + (15925, 15925, 'accessories/wearable_items/_exp08/pvp_armor/chain/skirt', 1144), + (15926, 15926, 'accessories/wearable_items/_exp08/pvp_armor/gi/chest', 1144), + (15927, 15927, 'accessories/wearable_items/_exp08/pvp_armor/gi/feet', 1144), + (15928, 15928, 'accessories/wearable_items/_exp08/pvp_armor/gi/legs', 1144), + (15929, 15929, 'accessories/wearable_items/_exp08/pvp_armor/gi/shoulders', 1144), + (15930, 15930, 'accessories/wearable_items/_exp08/pvp_armor/gi/shoulders_epic', 1144), + (15931, 15931, 'accessories/wearable_items/_exp08/pvp_armor/gi/skirt', 1144), + (15932, 15932, 'accessories/wearable_items/_exp08/pvp_armor/gi/female/chest', 1144), + (15933, 15933, 'accessories/wearable_items/_exp08/pvp_armor/gi/female/feet', 1144), + (15934, 15934, 'accessories/wearable_items/_exp08/pvp_armor/gi/female/legs', 1144), + (15935, 15935, 'accessories/wearable_items/_exp08/pvp_armor/gi/female/shoulders', 1144), + (15936, 15936, 'accessories/wearable_items/_exp08/pvp_armor/gi/female/skirt', 1144), + (15937, 15937, 'accessories/wearable_items/_exp08/pvp_armor/gi/male/chest', 1144), + (15938, 15938, 'accessories/wearable_items/_exp08/pvp_armor/gi/male/feet', 1144), + (15939, 15939, 'accessories/wearable_items/_exp08/pvp_armor/gi/male/legs', 1144), + (15940, 15940, 'accessories/wearable_items/_exp08/pvp_armor/gi/male/shoulders', 1144), + (15941, 15941, 'accessories/wearable_items/_exp08/pvp_armor/gi/male/skirt', 1144), + (15942, 15942, 'accessories/wearable_items/_exp08/pvp_armor/heavy/chest', 1144), + (15943, 15943, 'accessories/wearable_items/_exp08/pvp_armor/heavy/feet', 1144), + (15944, 15944, 'accessories/wearable_items/_exp08/pvp_armor/heavy/forearms', 1144), + (15945, 15945, 'accessories/wearable_items/_exp08/pvp_armor/heavy/hands', 1144), + (15946, 15946, 'accessories/wearable_items/_exp08/pvp_armor/heavy/head', 1144), + (15947, 15947, 'accessories/wearable_items/_exp08/pvp_armor/heavy/head_epic', 1144), + (15948, 15948, 'accessories/wearable_items/_exp08/pvp_armor/heavy/left', 1144), + (15949, 15949, 'accessories/wearable_items/_exp08/pvp_armor/heavy/legs', 1144), + (15950, 15950, 'accessories/wearable_items/_exp08/pvp_armor/heavy/legs_epic', 1144), + (15951, 15951, 'accessories/wearable_items/_exp08/pvp_armor/heavy/legs_noskirt', 1144), + (15952, 15952, 'accessories/wearable_items/_exp08/pvp_armor/heavy/right', 1144), + (15953, 15953, 'accessories/wearable_items/_exp08/pvp_armor/heavy/shoulders', 1144), + (15954, 15954, 'accessories/wearable_items/_exp08/pvp_armor/heavy/shoulders_epic', 1144), + (15955, 15955, 'accessories/wearable_items/_exp08/pvp_armor/heavy/shoulders-nopauldrons', 1144), + (15956, 15956, 'accessories/wearable_items/_exp08/pvp_armor/heavy/skirt', 1144), + (15957, 15957, 'accessories/wearable_items/_exp08/pvp_armor/leather/chest', 1144), + (15958, 15958, 'accessories/wearable_items/_exp08/pvp_armor/leather/feet', 1144), + (15959, 15959, 'accessories/wearable_items/_exp08/pvp_armor/leather/forearms', 1144), + (15960, 15960, 'accessories/wearable_items/_exp08/pvp_armor/leather/hands', 1144), + (15961, 15961, 'accessories/wearable_items/_exp08/pvp_armor/leather/head', 1144), + (15962, 15962, 'accessories/wearable_items/_exp08/pvp_armor/leather/head_epic', 1144), + (15963, 15963, 'accessories/wearable_items/_exp08/pvp_armor/leather/legs', 1144), + (15964, 15964, 'accessories/wearable_items/_exp08/pvp_armor/leather/legs_noskirt', 1144), + (15965, 15965, 'accessories/wearable_items/_exp08/pvp_armor/leather/shoulders', 1144), + (15966, 15966, 'accessories/wearable_items/_exp08/pvp_armor/leather/shoulders_epic', 1144), + (15967, 15967, 'accessories/wearable_items/_exp08/pvp_armor/leather/skirt', 1144), + (15968, 15968, 'accessories/wearable_items/_exp08/pvp_armor/robe/chest', 1144), + (15969, 15969, 'accessories/wearable_items/_exp08/pvp_armor/robe/chest_epic', 1144), + (15970, 15970, 'accessories/wearable_items/_exp08/pvp_armor/robe/feet', 1144), + (15971, 15971, 'accessories/wearable_items/_exp08/pvp_armor/robe/hands', 1144), + (15972, 15972, 'accessories/wearable_items/_exp08/pvp_armor/robe/head_collar', 1144), + (15973, 15973, 'accessories/wearable_items/_exp08/pvp_armor/robe/head_hood', 1144), + (15974, 15974, 'accessories/wearable_items/_exp08/pvp_armor/robe/pants', 1144), + (15975, 15975, 'accessories/wearable_items/_exp08/pvp_armor/robe/skirt', 1144), + (15976, 15976, 'accessories/wearable_items/_exp08/pvp_armor/snapons/bicep_gi_left', 1144), + (15977, 15977, 'accessories/wearable_items/_exp08/pvp_armor/snapons/bicep_gi_right', 1144), + (15978, 15978, 'accessories/wearable_items/_exp08/pvp_armor/snapons/bicep_robe_left', 1144), + (15979, 15979, 'accessories/wearable_items/_exp08/pvp_armor/snapons/bicep_robe_right', 1144), + (15980, 15980, 'accessories/wearable_items/_exp08/pvp_armor/snapons/forearm_chain_left', 1144), + (15981, 15981, 'accessories/wearable_items/_exp08/pvp_armor/snapons/forearm_chain_right', 1144), + (15982, 15982, 'accessories/wearable_items/_exp08/pvp_armor/snapons/forearm_gi_left', 1144), + (15983, 15983, 'accessories/wearable_items/_exp08/pvp_armor/snapons/forearm_gi_right', 1144), + (15984, 15984, 'accessories/wearable_items/_exp08/pvp_armor/snapons/forearm_left', 1144), + (15985, 15985, 'accessories/wearable_items/_exp08/pvp_armor/snapons/forearm_right', 1144), + (15986, 15986, 'accessories/wearable_items/_exp08/pvp_armor/snapons/pauldron_chain_left', 1144), + (15987, 15987, 'accessories/wearable_items/_exp08/pvp_armor/snapons/pauldron_chain_right', 1144), + (15988, 15988, 'accessories/wearable_items/_exp08/pvp_armor/snapons/pauldron_leather_left', 1144), + (15989, 15989, 'accessories/wearable_items/_exp08/pvp_armor/snapons/pauldron_leather_right', 1144), + (15990, 15990, 'accessories/wearable_items/_exp08/pvp_armor/snapons/pauldron_left', 1144), + (15991, 15991, 'accessories/wearable_items/_exp08/pvp_armor/snapons/pauldron_right', 1144), + (15992, 15992, 'accessories/wearable_items/_exp08/pvp_armor/snapons/pauldron_robe_left', 1144), + (15993, 15993, 'accessories/wearable_items/_exp08/pvp_armor/snapons/pauldron_robe_right', 1144), + (15994, 15994, 'accessories/wearable_items/_exp08/pvp_armor/snapons/pauldrons_lower_left', 1144), + (15995, 15995, 'accessories/wearable_items/_exp08/pvp_armor/snapons/pauldrons_lower_right', 1144), + (15996, 15996, 'accessories/wearable_items/_exp08/pvp_armor/snapons/pvp_armor_head', 1144), + (15997, 15997, 'accessories/wearable_items/_exp08/pvp_armor/snapons/pvp_armor_head_epic', 1144), + (15998, 15998, 'accessories/wearable_items/_exp08/pvp_armor/snapons/pvp_chain_head_epic', 1144), + (15999, 15999, 'accessories/wearable_items/_exp08/pvp_armor/snapons/pvp_leather_head_epic', 1144), + (16000, 16000, 'accessories/wearable_items/_exp08/pvp_armor/snapons/ramhorn_left', 1144), + (16001, 16001, 'accessories/wearable_items/_exp08/pvp_armor/snapons/ramhorn_right', 1144), + (16002, 16002, 'accessories/wearable_items/_exp08/pvp_armor/snapons/shin_chain_left', 1144), + (16003, 16003, 'accessories/wearable_items/_exp08/pvp_armor/snapons/shin_chain_right', 1144), + (16004, 16004, 'accessories/wearable_items/_exp08/pvp_armor/snapons/shin_left', 1144), + (16005, 16005, 'accessories/wearable_items/_exp08/pvp_armor/snapons/shin_right', 1144), + (16006, 16006, 'staticobjects/_exp07/exp07_dun_plane_of_war_raid/pow_rallos_chest', 1144), + (16007, 16007, 'accessories/wearable_items/_exp08/pvp_armor/gi/head/head', 1144), + (16008, 16008, 'accessories/wearable_items/_exp08/pvp_armor/gi/head', 1144), + (16009, 16009, '_exp08/characters/tool_users/chitari/chitari_male_dark', 1144), + (16010, 16010, '_exp08/characters/tool_users/chitari/chitari_male_heavy01', 1144), + (16011, 16011, 'ec/pc/human/human_male_2011/human_male_base', 1144), + (16012, 16012, 'accessories/wearable_items/_exp08/short_skirts/tintable_01/head_gothic_helmet', 1144), + (16013, 16013, 'accessories/wearable_items/_exp08/short_skirts/tintable_01/shoulders_pauldrons', 1144), + (16014, 16014, 'accessories/wearable_items/_exp08/short_skirts/tintable_01/snap_ons/belt_buckle_gothic', 1144), + (16015, 16015, '_exp03/characters/tool_users/clockwork_necro_soldier', 1144), + (16016, 16016, '_exp03/characters/tool_users/clockwork_necro_gnome_female', 1144), + (16017, 16017, 'accessories/wearable_items/_exp08/short_skirts/tintable_01/snap_ons/pauldron_gothic_left', 1144), + (16018, 16018, 'accessories/wearable_items/_exp08/short_skirts/tintable_01/snap_ons/pauldron_gothic_right', 1144), + (16019, 16019, '_exp03/characters/tool_users/clockwork_necro_gnome_male', 1144), + (16020, 16020, '_exp03/characters/tool_users/clockwork_necro_protector', 1144), + (16021, 16021, 'ec/pc/human/human_male_2011/human_male_white_test', 1144), + (16022, 16022, 'ec/pc/human/human_male_2011/human_male_normal_black_test', 1144), + (16023, 16023, 'accessories/wieldable_items/weapons/exp08/2h_sword/exp07_2hs_sword_pvp', 1144), + (16024, 16024, 'accessories/wieldable_items/weapons/exp08/2h_sword/exp08_pvp_swivel', 1144), + (16025, 16025, 'accessories/wieldable_items/weapons/exp08/fist/exp07_fist_pvp', 1144), + (16026, 16026, 'accessories/wieldable_items/weapons/exp08/staff/exp08_2h_staff_fighter_pvp', 1144), + (16027, 16027, 'accessories/wieldable_items/weapons/exp08/staff/exp08_2h_staff_mage_pvp', 1144), + (16028, 16028, 'accessories/wearable_items/_exp08/ralloszek_armor/accessories/chain_head_epic', 1144), + (16029, 16029, 'accessories/wearable_items/_exp08/ralloszek_armor/accessories/forearm_left', 1144), + (16030, 16030, 'accessories/wearable_items/_exp08/ralloszek_armor/accessories/forearm_right', 1144), + (16031, 16031, 'accessories/wearable_items/_exp08/ralloszek_armor/accessories/leather_head_epic', 1144), + (16032, 16032, 'accessories/wearable_items/_exp08/ralloszek_armor/accessories/pauldron_alt_left', 1144), + (16033, 16033, 'accessories/wearable_items/_exp08/ralloszek_armor/accessories/pauldron_alt_right', 1144), + (16034, 16034, 'accessories/wearable_items/_exp08/ralloszek_armor/accessories/pauldron_left', 1144), + (16035, 16035, 'accessories/wearable_items/_exp08/ralloszek_armor/accessories/pauldron_right', 1144), + (16036, 16036, 'accessories/wearable_items/_exp08/ralloszek_armor/accessories/ramhorn_left', 1144), + (16037, 16037, 'accessories/wearable_items/_exp08/ralloszek_armor/accessories/ramhorn_right', 1144), + (16038, 16038, 'accessories/wearable_items/_exp08/ralloszek_armor/accessories/shin_left', 1144), + (16039, 16039, 'accessories/wearable_items/_exp08/ralloszek_armor/accessories/shin_right', 1144), + (16040, 16040, 'accessories/wearable_items/_exp08/ralloszek_armor/accessories/vanguard_head_epic', 1144), + (16041, 16041, 'accessories/wearable_items/_exp08/ralloszek_armor/chain/chest', 1144), + (16042, 16042, 'accessories/wearable_items/_exp08/ralloszek_armor/chain/feet', 1144), + (16043, 16043, 'accessories/wearable_items/_exp08/ralloszek_armor/chain/forearms', 1144), + (16044, 16044, 'accessories/wearable_items/_exp08/ralloszek_armor/chain/hands', 1144), + (16045, 16045, 'accessories/wearable_items/_exp08/ralloszek_armor/chain/head', 1144), + (16046, 16046, 'accessories/wearable_items/_exp08/ralloszek_armor/chain/head_epic', 1144), + (16047, 16047, 'accessories/wearable_items/_exp08/ralloszek_armor/chain/legs', 1144), + (16048, 16048, 'accessories/wearable_items/_exp08/ralloszek_armor/chain/legs_epic', 1144), + (16049, 16049, 'accessories/wearable_items/_exp08/ralloszek_armor/chain/legs_noskirt', 1144), + (16050, 16050, 'accessories/wearable_items/_exp08/ralloszek_armor/chain/pauldron_alt_left', 1144), + (16051, 16051, 'accessories/wearable_items/_exp08/ralloszek_armor/chain/pauldron_alt_right', 1144), + (16052, 16052, 'accessories/wearable_items/_exp08/ralloszek_armor/chain/shoulders', 1144), + (16053, 16053, 'accessories/wearable_items/_exp08/ralloszek_armor/chain/shoulders_epic', 1144), + (16054, 16054, 'accessories/wearable_items/_exp08/ralloszek_armor/chain/skirt', 1144), + (16055, 16055, 'accessories/wearable_items/_exp08/ralloszek_armor/leather/chest', 1144), + (16056, 16056, 'accessories/wearable_items/_exp08/ralloszek_armor/leather/feet', 1144), + (16057, 16057, 'accessories/wearable_items/_exp08/ralloszek_armor/leather/forearms', 1144), + (16058, 16058, 'accessories/wearable_items/_exp08/ralloszek_armor/leather/hands', 1144), + (16059, 16059, 'accessories/wearable_items/_exp08/ralloszek_armor/leather/head', 1144), + (16060, 16060, 'accessories/wearable_items/_exp08/ralloszek_armor/leather/head_epic', 1144), + (16061, 16061, 'accessories/wearable_items/_exp08/ralloszek_armor/leather/legs', 1144), + (16062, 16062, 'accessories/wearable_items/_exp08/ralloszek_armor/leather/legs_noskirt', 1144), + (16063, 16063, 'accessories/wearable_items/_exp08/ralloszek_armor/leather/pauldron_alt_left', 1144), + (16064, 16064, 'accessories/wearable_items/_exp08/ralloszek_armor/leather/pauldron_alt_right', 1144), + (16065, 16065, 'accessories/wearable_items/_exp08/ralloszek_armor/leather/shoulders', 1144), + (16066, 16066, 'accessories/wearable_items/_exp08/ralloszek_armor/leather/shoulders_epic', 1144), + (16067, 16067, 'accessories/wearable_items/_exp08/ralloszek_armor/leather/skirt', 1144), + (16068, 16068, 'accessories/wearable_items/_exp08/ralloszek_armor/robe/chest', 1144), + (16069, 16069, 'accessories/wearable_items/_exp08/ralloszek_armor/robe/chest_epic', 1144), + (16070, 16070, 'accessories/wearable_items/_exp08/ralloszek_armor/robe/feet', 1144), + (16071, 16071, 'accessories/wearable_items/_exp08/ralloszek_armor/robe/hands', 1144), + (16072, 16072, 'accessories/wearable_items/_exp08/ralloszek_armor/robe/head_collar', 1144), + (16073, 16073, 'accessories/wearable_items/_exp08/ralloszek_armor/robe/head_hood', 1144), + (16074, 16074, 'accessories/wearable_items/_exp08/ralloszek_armor/robe/pants', 1144), + (16075, 16075, 'accessories/wearable_items/_exp08/ralloszek_armor/robe/pauldron_alt_left', 1144), + (16076, 16076, 'accessories/wearable_items/_exp08/ralloszek_armor/robe/pauldron_alt_right', 1144), + (16077, 16077, 'accessories/wearable_items/_exp08/ralloszek_armor/robe/skirt', 1144), + (16078, 16078, 'accessories/wearable_items/_exp08/ralloszek_armor/vanguard/chest', 1144), + (16079, 16079, 'accessories/wearable_items/_exp08/ralloszek_armor/vanguard/feet', 1144), + (16080, 16080, 'accessories/wearable_items/_exp08/ralloszek_armor/vanguard/forearms', 1144), + (16081, 16081, 'accessories/wearable_items/_exp08/ralloszek_armor/vanguard/hands', 1144), + (16082, 16082, 'accessories/wearable_items/_exp08/ralloszek_armor/vanguard/head', 1144), + (16083, 16083, 'accessories/wearable_items/_exp08/ralloszek_armor/vanguard/head_epic', 1144), + (16084, 16084, 'accessories/wearable_items/_exp08/ralloszek_armor/vanguard/left', 1144), + (16085, 16085, 'accessories/wearable_items/_exp08/ralloszek_armor/vanguard/legs', 1144), + (16086, 16086, 'accessories/wearable_items/_exp08/ralloszek_armor/vanguard/legs_epic', 1144), + (16087, 16087, 'accessories/wearable_items/_exp08/ralloszek_armor/vanguard/legs_noskirt', 1144), + (16088, 16088, 'accessories/wearable_items/_exp08/ralloszek_armor/vanguard/right', 1144), + (16089, 16089, 'accessories/wearable_items/_exp08/ralloszek_armor/vanguard/shoulders', 1144), + (16090, 16090, 'accessories/wearable_items/_exp08/ralloszek_armor/vanguard/shoulders_epic', 1144), + (16091, 16091, 'accessories/wearable_items/_exp08/ralloszek_armor/vanguard/shoulders_nopauldrons', 1144), + (16092, 16092, 'accessories/wearable_items/_exp08/ralloszek_armor/vanguard/skirt', 1144), + (16093, 16093, 'accessories/wearable_items/_exp08/ralloszek_armor/vanguard/upperchest', 1144), + (16094, 16094, 'accessories/wieldable_items/weapons/exp08/1h_crush/1h_hammer_rallos_zek', 1144), + (16095, 16095, 'accessories/wieldable_items/weapons/exp08/1h_crush/club_rallos_zek', 1144), + (16096, 16096, 'accessories/wieldable_items/weapons/exp08/1h_crush/mace_rallos_zek', 1144), + (16097, 16097, 'accessories/wieldable_items/weapons/exp08/1h_pierce/exp08_dagger_rallos_zek', 1144), + (16098, 16098, 'accessories/wearable_items/cloak/exp08/zek_class_cloaks/ralloszek_cloak1', 1144), + (16099, 16099, 'accessories/wieldable_items/weapons/exp08/1h_sword/exp08_sword_katana_rallos_zek', 1144), + (16100, 16100, 'accessories/wieldable_items/weapons/exp08/2h_crush/exp08_2hc_hammer_rallos_zek', 1144), + (16101, 16101, 'accessories/wieldable_items/weapons/exp08/2h_sword/exp08_2h_sword_rallos_zek', 1144), + (16102, 16102, 'accessories/wieldable_items/weapons/exp08/bow/exp08_bow_rallos_zek', 1144), + (16103, 16103, 'accessories/wieldable_items/weapons/exp08/staff/exp08_staff_rallos_zek', 1144), + (16104, 16104, 'accessories/wieldable_items/weapons/exp08/talisman/book_rallos_zek', 1144), + (16105, 16105, 'accessories/wearable_items/cloak/exp08/zek_class_cloaks/ralloszek_cloak2', 1144), + (16106, 16106, 'accessories/wearable_items/cloak/exp08/zek_class_cloaks/ralloszek_cloak3', 1144), + (16107, 16107, 'accessories/wearable_items/cloak/exp08/zek_class_cloaks/ralloszek_cloak4', 1144), + (16108, 16108, 'accessories/wearable_items/cloak/exp08/zek_class_cloaks/ralloszek_cloak5', 1144), + (16109, 16109, 'accessories/wearable_items/cloak/exp08/zek_class_cloaks/ralloszek_cloak6', 1144), + (16110, 16110, 'accessories/wearable_items/cloak/exp08/zek_class_cloaks/sullonzek_cloak1', 1144), + (16111, 16111, 'accessories/wearable_items/cloak/exp08/zek_class_cloaks/sullonzek_cloak2', 1144), + (16112, 16112, 'accessories/wearable_items/cloak/exp08/zek_class_cloaks/sullonzek_cloak3', 1144), + (16113, 16113, 'accessories/wearable_items/cloak/exp08/zek_class_cloaks/sullonzek_cloak4', 1144), + (16114, 16114, 'accessories/wearable_items/cloak/exp08/zek_class_cloaks/sullonzek_cloak5', 1144), + (16115, 16115, 'accessories/wearable_items/cloak/exp08/zek_class_cloaks/sullonzek_cloak6', 1144), + (16116, 16116, 'accessories/wearable_items/cloak/exp08/zek_class_cloaks/tallonzek_cloak1', 1144), + (16117, 16117, 'accessories/wearable_items/cloak/exp08/zek_class_cloaks/tallonzek_cloak2', 1144), + (16118, 16118, 'accessories/wearable_items/cloak/exp08/zek_class_cloaks/tallonzek_cloak3', 1144), + (16119, 16119, 'accessories/wearable_items/cloak/exp08/zek_class_cloaks/tallonzek_cloak4', 1144), + (16120, 16120, 'accessories/wearable_items/cloak/exp08/zek_class_cloaks/tallonzek_cloak5', 1144), + (16121, 16121, 'accessories/wearable_items/cloak/exp08/zek_class_cloaks/tallonzek_cloak6', 1144), + (16122, 16122, 'accessories/wearable_items/cloak/exp08/zek_class_cloaks/vallonzek_cloak1', 1144), + (16123, 16123, 'accessories/wearable_items/cloak/exp08/zek_class_cloaks/vallonzek_cloak2', 1144), + (16124, 16124, 'accessories/wearable_items/cloak/exp08/zek_class_cloaks/vallonzek_cloak3', 1144), + (16125, 16125, 'accessories/wearable_items/cloak/exp08/zek_class_cloaks/vallonzek_cloak4', 1144), + (16126, 16126, 'accessories/wearable_items/cloak/exp08/zek_class_cloaks/vallonzek_cloak5', 1144), + (16127, 16127, 'accessories/wearable_items/cloak/exp08/zek_class_cloaks/vallonzek_cloak6', 1144), + (16128, 16128, 'accessories/wieldable_items/shields/exp08/exp08_shield_celestial_rallos_zek', 1144), + (16129, 16129, 'accessories/wieldable_items/shields/exp08/exp08_shield_celestial_rallos_zek_gem', 1144), + (16130, 16130, 'creatures/mounts/lynx_mount/white_cat_mount', 1144), + (16131, 16131, 'accessories/wearable_items/profesion_hats/firiona_vie_tiara_lon/head_opal_darkbriar_tiara', 1144), + (16132, 16132, 'accessories/wearable_items/_exp08/opal_darkbriar/robe/chest', 1144), + (16133, 16133, 'accessories/wearable_items/_exp08/opal_darkbriar/robe/feet', 1144), + (16134, 16134, 'accessories/wearable_items/_exp08/opal_darkbriar/robe/hands', 1144), + (16135, 16135, 'accessories/wearable_items/_exp08/opal_darkbriar/robe/head_collar', 1144), + (16136, 16136, 'accessories/wearable_items/_exp08/opal_darkbriar/robe/head_hood', 1144), + (16137, 16137, 'accessories/wearable_items/_exp08/opal_darkbriar/robe/pants', 1144), + (16138, 16138, 'accessories/wearable_items/_exp08/opal_darkbriar/robe/skirt', 1144), + (16139, 16139, 'accessories/wieldable_items/weapons/exp08/1h_crush/wand_opal_darkbriar', 1144), + (16140, 16140, 'accessories/wieldable_items/weapons/exp08/2h_sword/exp07_2h_sword_opal_darkbriar', 1144), + (16141, 16141, 'accessories/wieldable_items/weapons/exp08/staff/exp08_staff_opal_darkbriar', 1144), + (16142, 16142, 'accessories/wearable_items/_exp08/opal_darkbriar/robe_alt/chest', 1144), + (16143, 16143, 'accessories/wearable_items/_exp08/opal_darkbriar/robe_alt/feet', 1144), + (16144, 16144, 'accessories/wearable_items/_exp08/opal_darkbriar/robe_alt/hands', 1144), + (16145, 16145, 'accessories/wearable_items/_exp08/opal_darkbriar/robe_alt/head_collar', 1144), + (16146, 16146, 'accessories/wearable_items/_exp08/opal_darkbriar/robe_alt/head_hood', 1144), + (16147, 16147, 'accessories/wearable_items/_exp08/opal_darkbriar/robe_alt/pants', 1144), + (16148, 16148, 'accessories/wearable_items/_exp08/opal_darkbriar/robe_alt/skirt', 1144), + (16149, 16149, 'accessories/wearable_items/profesion_hats/beastlord/head_beastlord_helmet_lion', 1144), + (16150, 16150, 'accessories/wearable_items/profesion_hats/beastlord/head_beastlord_helmet_panther', 1144), + (16151, 16151, 'accessories/wearable_items/profesion_hats/beastlord/head_beastlord_helmet_white_tiger', 1144), + (16152, 16152, '_exp08/characters/monsters/exp04raptor/raptor', 1144), + (16153, 16153, '_exp08/characters/tool_users/freeport_knight/freeport_knight_base', 1144), + (16154, 16154, 'accessories/wieldable_items/weapons/exp08/1h_crush/exp08_club_peppermint', 1144), + (16155, 16155, 'accessories/wieldable_items/weapons/exp08/1h_pierce/exp08_dagger_peppermint_shiv', 1144), + (16156, 16156, 'accessories/wieldable_items/weapons/exp08/1h_sword/exp08_sword_peppermint_blade', 1144), + (16157, 16157, 'accessories/wieldable_items/weapons/exp08/bow/exp08_shortbow_peppermint', 1144), + (16158, 16158, 'accessories/wieldable_items/weapons/exp08/staff/exp08_staff_peppermint', 1144), + (16159, 16159, 'creatures/tu/holgresh_male_base', 1144), + (16160, 16160, 'accessories/wieldable_items/weapons/exp08/1h_crush/exp08_club_peppermint_spearmint', 1144), + (16161, 16161, 'accessories/wieldable_items/weapons/exp08/1h_crush/exp08_club_peppermint_evilgreen', 1144), + (16162, 16162, 'accessories/wieldable_items/weapons/exp08/1h_crush/exp08_club_peppermint_evilpurple', 1144), + (16163, 16163, 'accessories/wieldable_items/weapons/exp08/1h_pierce/exp08_dagger_peppermint_shiv_evilgreen', 1144), + (16164, 16164, 'accessories/wieldable_items/weapons/exp08/1h_pierce/exp08_dagger_peppermint_shiv_evilpurple', 1144), + (16165, 16165, 'accessories/wieldable_items/weapons/exp08/1h_pierce/exp08_dagger_peppermint_shiv_spearmint', 1144), + (16166, 16166, 'accessories/wieldable_items/weapons/exp08/1h_sword/exp08_sword_peppermint_blade_evilpurple', 1144), + (16167, 16167, 'accessories/wieldable_items/weapons/exp08/1h_sword/exp08_sword_peppermint_blade_evilgreen', 1144), + (16168, 16168, 'accessories/wieldable_items/weapons/exp08/1h_sword/exp08_sword_peppermint_blade_spearmint', 1144), + (16169, 16169, 'accessories/wieldable_items/weapons/exp08/bow/exp08_shortbow_peppermint_evilpurple', 1144), + (16170, 16170, 'accessories/wieldable_items/weapons/exp08/bow/exp08_shortbow_peppermint_evilgreen', 1144), + (16171, 16171, 'accessories/wieldable_items/weapons/exp08/bow/exp08_shortbow_peppermint_spearmint', 1144), + (16172, 16172, 'accessories/wieldable_items/weapons/exp08/staff/exp08_staff_peppermint_evilpurple', 1144), + (16173, 16173, 'accessories/wieldable_items/weapons/exp08/staff/exp08_staff_peppermint_evilgreen', 1144), + (16174, 16174, 'accessories/wieldable_items/weapons/exp08/staff/exp08_staff_peppermint_spearmint', 1144), + (16175, 16175, 'accessories/wieldable_items/weapons/exp08/fist/exp08_fist_beastlord_blades', 1144), + (16176, 16176, '_exp08/characters/monsters/kerafyrm/kerafyrm', 1144), + (16177, 16177, 'accessories/wieldable_items/weapons/exp08/2h_crush/exp08_2h_crush_steinhammer', 1144), + (16178, 16178, 'accessories/wieldable_items/weapons/exp08/2h_crush/exp08_2h_crush_steinhammer_lid', 1144), + (16179, 16179, 'staticobjects/panels/dpo_panel_stainedglass_orange', 1144), + (16180, 16180, 'staticobjects/panels/dpo_panel_stainedglass_yellow', 1144), + (16181, 16181, 'creatures/mounts/horse_demon/horse_demon_silver', 1144), + (16182, 16182, 'creatures/mounts/horse_demon/swivels/horse_demon_swivel_chain', 1144), + (16183, 16183, 'creatures/mounts/horse_demon/swivels/horse_demon_swivel_skull', 1144), + (16184, 16184, 'accessories/wearable_items/profesion_hats/pirate/pirate_captain/head_pirate_admiral', 1144), + (16185, 16185, 'accessories/wearable_items/profesion_hats/pirate/pirate_captain/head_pirate_blue', 1144), + (16186, 16186, 'accessories/wearable_items/profesion_hats/pirate/pirate_captain/head_pirate_captain', 1144), + (16187, 16187, 'accessories/wearable_items/profesion_hats/pirate/pirate_captain/head_pirate_green', 1144), + (16188, 16188, 'accessories/wearable_items/profesion_hats/pirate/pirate_captain/head_pirate_tintable', 1144), + (16189, 16189, 'accessories/wearable_items/profesion_hats/pirate/pirate_captain/snap_ons/coin_swivel', 1144), + (16190, 16190, 'accessories/wearable_items/profesion_hats/pirate/pirate_captain/snap_ons/ring_swivel', 1144), + (16191, 16191, 'accessories/wearable_items/profesion_hats/pirate/pirate_captain/snap_ons/skull_swivel', 1144), + (16192, 16192, '_exp08/characters/tool_users/chitari/chitari_male_light01', 1144), + (16193, 16193, '_exp08/characters/tool_users/chitari/chitari_male_medium01', 1144), + (16194, 16194, '_exp08/characters/tool_users/chitari/chitari_male_medium02', 1144), + (16195, 16195, 'creatures/mounts/player_wing/player_wing_mount', 1144), + (16196, 16196, '_exp08/characters/monsters/drake/drake_black', 1144), + (16197, 16197, '_exp08/characters/monsters/drake/drake_blue', 1144), + (16198, 16198, '_exp08/characters/monsters/drake/drake_green', 1144), + (16199, 16199, '_exp08/characters/monsters/drake/drake_red', 1144), + (16200, 16200, '_exp08/characters/monsters/drake/drake1', 1144), + (16201, 16201, '_exp08/characters/tool_users/zombie_orc/zombie_orc', 1144), + (16202, 16202, 'accessories/wearable_items/cloak/exp08/cloak_squirrel_skunk_evil', 1144), + (16203, 16203, 'accessories/wearable_items/cloak/exp08/cloak_squirrel_skunk_evil_inset', 1144), + (16204, 16204, 'creatures/mounts/player_wing/player_wing_angel', 1144), + (16205, 16205, 'accessories/wearable_items/_exp08/assassin_soul_armor/chest', 1144), + (16206, 16206, 'accessories/wearable_items/_exp08/assassin_soul_armor/feet', 1144), + (16207, 16207, 'accessories/wearable_items/_exp08/assassin_soul_armor/forearms', 1144), + (16208, 16208, 'accessories/wearable_items/_exp08/assassin_soul_armor/hands', 1144), + (16209, 16209, 'accessories/wearable_items/_exp08/assassin_soul_armor/head', 1144), + (16210, 16210, 'accessories/wearable_items/_exp08/assassin_soul_armor/legs', 1144), + (16211, 16211, 'accessories/wearable_items/_exp08/assassin_soul_armor/legs_noskirt', 1144), + (16212, 16212, 'accessories/wearable_items/_exp08/assassin_soul_armor/shoulders', 1144), + (16213, 16213, 'accessories/wearable_items/_exp08/assassin_soul_armor/skirt', 1144), + (16214, 16214, 'accessories/wearable_items/snapons/armbands/shoulders_armband_fur_02_left', 1144), + (16215, 16215, 'accessories/wearable_items/snapons/armbands/shoulders_armband_fur_02_right', 1144), + (16216, 16216, 'ec/pc/fae_wings/fae_angel', 1144), + (16217, 23280, '_exp07/characters/tool_users/drolvarg_boss/drolvarg_boss', 1096), + (16218, 50001, 'soga_appearances/ec/npc/soga_bird_man', 0), + (16219, 50002, 'soga_appearances/ec/npc/soga_dragon_turtle', 0), + (16220, 50003, 'soga_appearances/ec/npc/soga_snake_woman_boss', 0), + (16221, 50004, 'soga_appearances/ec/npc/soga_snake_woman_captain', 0), + (16222, 50005, 'soga_appearances/ec/npc/soga_snake_woman_mira', 0), + (16223, 50006, 'soga_appearances/ec/npc/soga_snake_woman_soldier', 0), + (16224, 50007, 'soga_appearances/ec/npc/soga_vl_child_female01', 0), + (16225, 50008, 'soga_appearances/ec/npc/soga_vl_child_male01', 0), + (16226, 50009, 'soga_appearances/ec/npc/soga_vl_old_female01', 0), + (16227, 50010, 'soga_appearances/ec/npc/soga_vl_old_male01', 0), + (16228, 50011, 'soga_appearances/ec/npc/soga_vl_young_female01', 0), + (16229, 50012, 'soga_appearances/ec/npc/soga_vl_young_female02', 0), + (16230, 50013, 'soga_appearances/ec/npc/soga_vl_young_female03', 0), + (16231, 50014, 'soga_appearances/ec/npc/soga_vl_young_male01', 0), + (16232, 50015, 'soga_appearances/ec/npc/soga_vl_young_male02', 0), + (16233, 50016, 'soga_appearances/ec/npc/soga_vl_young_male03', 0), + (16234, 50017, 'soga_appearances/accessories/facial_hair/soga_vl_old_male_facialhair01', 0), + (16235, 50018, 'soga_appearances/accessories/facial_hair/soga_vl_old_male_facialhair02', 0), + (16236, 50019, 'soga_appearances/accessories/facial_hair/soga_vl_young_male_facialhair01', 0), + (16237, 50020, 'soga_appearances/accessories/facial_hair/soga_vl_young_male_facialhair02', 0), + (16238, 50021, 'soga_appearances/accessories/hair/soga_jj_hair', 0), + (16239, 50022, 'soga_appearances/accessories/hair/soga_vl_child_female_hair01', 0), + (16240, 50023, 'soga_appearances/accessories/hair/soga_vl_child_female_hair02', 0), + (16241, 50024, 'soga_appearances/accessories/hair/soga_vl_child_male_hair01', 0), + (16242, 50025, 'soga_appearances/accessories/hair/soga_vl_child_male_hair02', 0), + (16243, 50026, 'soga_appearances/accessories/hair/soga_vl_old_female_hair01', 0), + (16244, 50027, 'soga_appearances/accessories/hair/soga_vl_old_female_hair02', 0), + (16245, 50028, 'soga_appearances/accessories/hair/soga_vl_old_male_hair01', 0), + (16246, 50029, 'soga_appearances/accessories/hair/soga_vl_old_male_hair02', 0), + (16247, 50030, 'soga_appearances/accessories/hair/soga_vl_young_female_hair01', 0), + (16248, 50031, 'soga_appearances/accessories/hair/soga_vl_young_female_hair02', 0), + (16249, 50032, 'soga_appearances/accessories/hair/soga_vl_young_female_hair03', 0), + (16250, 50033, 'soga_appearances/accessories/hair/soga_vl_young_male_hair01', 0), + (16251, 50034, 'soga_appearances/accessories/hair/soga_vl_young_male_hair02', 0), + (16252, 50064, 'soga_appearances/ec/npc/soga_vl_child_female01_h1', 0), + (16253, 50065, 'soga_appearances/ec/npc/soga_vl_child_female01_h2', 0), + (16254, 50066, 'soga_appearances/ec/npc/soga_vl_child_male01_h1', 0), + (16255, 50067, 'soga_appearances/ec/npc/soga_vl_child_male01_h2', 0), + (16256, 50068, 'soga_appearances/ec/npc/soga_vl_old_female01_h1', 0), + (16257, 50069, 'soga_appearances/ec/npc/soga_vl_old_female01_h2', 0), + (16258, 50070, 'soga_appearances/ec/npc/soga_vl_old_male01_h0_b1', 0), + (16259, 50071, 'soga_appearances/ec/npc/soga_vl_old_male01_h0_b2', 0), + (16260, 50072, 'soga_appearances/ec/npc/soga_vl_old_male01_h1_b0', 0), + (16261, 50073, 'soga_appearances/ec/npc/soga_vl_old_male01_h1_b1', 0), + (16262, 50074, 'soga_appearances/ec/npc/soga_vl_old_male01_h1_b2', 0), + (16263, 50075, 'soga_appearances/ec/npc/soga_vl_old_male01_h2_b0', 0), + (16264, 50076, 'soga_appearances/ec/npc/soga_vl_old_male01_h2_b1', 0), + (16265, 50077, 'soga_appearances/ec/npc/soga_vl_old_male01_h2_b2', 0), + (16266, 50078, 'soga_appearances/ec/npc/soga_vl_young_female01_h1', 0), + (16267, 50079, 'soga_appearances/ec/npc/soga_vl_young_female01_h2', 0), + (16268, 50080, 'soga_appearances/ec/npc/soga_vl_young_female01_h3', 0), + (16269, 50081, 'soga_appearances/ec/npc/soga_vl_young_female02_h1', 0), + (16270, 50082, 'soga_appearances/ec/npc/soga_vl_young_female02_h2', 0), + (16271, 50083, 'soga_appearances/ec/npc/soga_vl_young_female02_h3', 0), + (16272, 50084, 'soga_appearances/ec/npc/soga_vl_young_male01_h0_b1', 0), + (16273, 50085, 'soga_appearances/ec/npc/soga_vl_young_male01_h0_b2', 0), + (16274, 50086, 'soga_appearances/ec/npc/soga_vl_young_male01_h0_b3', 0), + (16275, 50087, 'soga_appearances/ec/npc/soga_vl_young_male01_h1_b0', 0), + (16276, 50088, 'soga_appearances/ec/npc/soga_vl_young_male01_h1_b1', 0), + (16277, 50089, 'soga_appearances/ec/npc/soga_vl_young_male01_h1_b2', 0), + (16278, 50090, 'soga_appearances/ec/npc/soga_vl_young_male01_h1_b3', 0), + (16279, 50091, 'soga_appearances/ec/npc/soga_vl_young_male01_h2_b0', 0), + (16280, 50092, 'soga_appearances/ec/npc/soga_vl_young_male01_h2_b1', 0), + (16281, 50093, 'soga_appearances/ec/npc/soga_vl_young_male01_h2_b2', 0), + (16282, 50094, 'soga_appearances/ec/npc/soga_vl_young_male01_h2_b3', 0), + (16283, 50095, 'soga_appearances/ec/npc/soga_vl_young_male02_h0_b1', 0), + (16284, 50096, 'soga_appearances/ec/npc/soga_vl_young_male02_h0_b2', 0), + (16285, 50097, 'soga_appearances/ec/npc/soga_vl_young_male02_h0_b3', 0), + (16286, 50098, 'soga_appearances/ec/npc/soga_vl_young_male02_h1_b0', 0), + (16287, 50099, 'soga_appearances/ec/npc/soga_vl_young_male02_h1_b1', 0), + (16288, 50100, 'soga_appearances/ec/npc/soga_vl_young_male02_h1_b2', 0), + (16289, 50101, 'soga_appearances/ec/npc/soga_vl_young_male02_h1_b3', 0), + (16290, 50102, 'soga_appearances/ec/npc/soga_vl_young_male02_h2_b0', 0), + (16291, 50103, 'soga_appearances/ec/npc/soga_vl_young_male02_h2_b1', 0), + (16292, 50104, 'soga_appearances/ec/npc/soga_vl_young_male02_h2_b2', 0), + (16293, 50105, 'soga_appearances/ec/npc/soga_vl_young_male02_h2_b3', 0), + (16294, 50106, 'staticobjects/adv04/end_r143_int_door', 0), + (16295, 50107, 'staticobjects/adv04/statue_dragon', 0), + (16296, 50108, 'staticobjects/adv04/statue_lion', 0), + (16297, 50109, 'staticobjects/adv04/vessel', 0), + (16298, 50110, 'staticobjects/adv04/door_2', 0), + (16299, 50111, 'staticobjects/adv04/small_bag', 0), + (16300, 50544, 'accessories/wearable_items/cloak/exp07/cloak_gothic2_diamond', 1096), + (16301, 51001, 'accessories/wearable_items01/_exp00/brigandine/artifact/low/chest', 0), + (16302, 51002, 'accessories/wearable_items01/_exp00/brigandine/artifact/low/feet', 0), + (16303, 51003, 'accessories/wearable_items01/_exp00/brigandine/artifact/low/forearms', 0), + (16304, 51004, 'accessories/wearable_items01/_exp00/brigandine/artifact/low/hands', 0), + (16305, 51005, 'accessories/wearable_items01/_exp00/brigandine/artifact/low/head', 0), + (16306, 51006, 'accessories/wearable_items01/_exp00/brigandine/artifact/low/legs', 0), + (16307, 51007, 'accessories/wearable_items01/_exp00/brigandine/artifact/low/shoulders', 0), + (16308, 51008, 'accessories/wearable_items01/_exp00/brigandine/brigandine_tint01/chest', 0), + (16309, 51009, 'accessories/wearable_items01/_exp00/brigandine/brigandine_tint01/feet', 0), + (16310, 51010, 'accessories/wearable_items01/_exp00/brigandine/brigandine_tint01/forearms', 0), + (16311, 51011, 'accessories/wearable_items01/_exp00/brigandine/brigandine_tint01/hands', 0), + (16312, 51012, 'accessories/wearable_items01/_exp00/brigandine/brigandine_tint01/head', 0), + (16313, 51013, 'accessories/wearable_items01/_exp00/brigandine/brigandine_tint01/legs', 0), + (16314, 51014, 'accessories/wearable_items01/_exp00/brigandine/brigandine_tint01/shoulders', 0), + (16315, 51015, 'accessories/wearable_items01/_exp00/brigandine/common/high/chest', 0), + (16316, 51016, 'accessories/wearable_items01/_exp00/brigandine/common/high/feet', 0), + (16317, 51017, 'accessories/wearable_items01/_exp00/brigandine/common/high/forearms', 0), + (16318, 51018, 'accessories/wearable_items01/_exp00/brigandine/common/high/hands', 0), + (16319, 51019, 'accessories/wearable_items01/_exp00/brigandine/common/high/head', 0), + (16320, 51020, 'accessories/wearable_items01/_exp00/brigandine/common/high/legs', 0), + (16321, 51021, 'accessories/wearable_items01/_exp00/brigandine/common/high/shoulders', 0), + (16322, 51022, 'accessories/wearable_items01/_exp00/brigandine/common/low/chest', 0), + (16323, 51023, 'accessories/wearable_items01/_exp00/brigandine/common/low/feet', 0), + (16324, 51024, 'accessories/wearable_items01/_exp00/brigandine/common/low/forearms', 0), + (16325, 51025, 'accessories/wearable_items01/_exp00/brigandine/common/low/hands', 0), + (16326, 51026, 'accessories/wearable_items01/_exp00/brigandine/common/low/head', 0), + (16327, 51027, 'accessories/wearable_items01/_exp00/brigandine/common/low/legs', 0), + (16328, 51028, 'accessories/wearable_items01/_exp00/brigandine/common/low/shoulders', 0), + (16329, 51029, 'accessories/wearable_items01/_exp00/brigandine/common/low/skirt', 0), + (16330, 51030, 'accessories/wearable_items01/_exp00/brigandine/common/medium/chest', 0), + (16331, 51031, 'accessories/wearable_items01/_exp00/brigandine/common/medium/feet', 0), + (16332, 51032, 'accessories/wearable_items01/_exp00/brigandine/common/medium/forearms', 0), + (16333, 51033, 'accessories/wearable_items01/_exp00/brigandine/common/medium/hands', 0), + (16334, 51034, 'accessories/wearable_items01/_exp00/brigandine/common/medium/head', 0), + (16335, 51035, 'accessories/wearable_items01/_exp00/brigandine/common/medium/legs', 0), + (16336, 51036, 'accessories/wearable_items01/_exp00/brigandine/common/medium/shoulders', 0), + (16337, 51037, 'accessories/wearable_items01/_exp00/brigandine/rare/high/chest', 0), + (16338, 51038, 'accessories/wearable_items01/_exp00/brigandine/rare/high/feet', 0), + (16339, 51039, 'accessories/wearable_items01/_exp00/brigandine/rare/high/forearms', 0), + (16340, 51040, 'accessories/wearable_items01/_exp00/brigandine/rare/high/hands', 0), + (16341, 51041, 'accessories/wearable_items01/_exp00/brigandine/rare/high/head', 0), + (16342, 51042, 'accessories/wearable_items01/_exp00/brigandine/rare/high/legs', 0), + (16343, 51043, 'accessories/wearable_items01/_exp00/brigandine/rare/high/shoulders', 0), + (16344, 51044, 'accessories/wearable_items01/_exp00/brigandine/rare/low/chest', 0), + (16345, 51045, 'accessories/wearable_items01/_exp00/brigandine/rare/low/feet', 0), + (16346, 51046, 'accessories/wearable_items01/_exp00/brigandine/rare/low/forearms', 0), + (16347, 51047, 'accessories/wearable_items01/_exp00/brigandine/rare/low/hands', 0), + (16348, 51048, 'accessories/wearable_items01/_exp00/brigandine/rare/low/head', 0), + (16349, 51049, 'accessories/wearable_items01/_exp00/brigandine/rare/low/legs', 0), + (16350, 51050, 'accessories/wearable_items01/_exp00/brigandine/rare/low/shoulders', 0), + (16351, 51051, 'accessories/wearable_items01/_exp00/brigandine/rare/medium/chest', 0), + (16352, 51052, 'accessories/wearable_items01/_exp00/brigandine/rare/medium/feet', 0), + (16353, 51053, 'accessories/wearable_items01/_exp00/brigandine/rare/medium/forearms', 0), + (16354, 51054, 'accessories/wearable_items01/_exp00/brigandine/rare/medium/hands', 0), + (16355, 51055, 'accessories/wearable_items01/_exp00/brigandine/rare/medium/head', 0), + (16356, 51056, 'accessories/wearable_items01/_exp00/brigandine/rare/medium/legs', 0), + (16357, 51057, 'accessories/wearable_items01/_exp00/brigandine/rare/medium/shoulders', 0), + (16358, 51058, 'accessories/wearable_items01/_exp00/brigandine/uncommon/high/chest', 0), + (16359, 51059, 'accessories/wearable_items01/_exp00/brigandine/uncommon/high/feet', 0), + (16360, 51060, 'accessories/wearable_items01/_exp00/brigandine/uncommon/high/forearms', 0), + (16361, 51061, 'accessories/wearable_items01/_exp00/brigandine/uncommon/high/hands', 0), + (16362, 51062, 'accessories/wearable_items01/_exp00/brigandine/uncommon/high/head', 0), + (16363, 51063, 'accessories/wearable_items01/_exp00/brigandine/uncommon/high/legs', 0), + (16364, 51064, 'accessories/wearable_items01/_exp00/brigandine/uncommon/high/shoulders', 0), + (16365, 51065, 'accessories/wearable_items01/_exp00/brigandine/uncommon/low/chest', 0), + (16366, 51066, 'accessories/wearable_items01/_exp00/brigandine/uncommon/low/feet', 0), + (16367, 51067, 'accessories/wearable_items01/_exp00/brigandine/uncommon/low/forearms', 0), + (16368, 51068, 'accessories/wearable_items01/_exp00/brigandine/uncommon/low/hands', 0), + (16369, 51069, 'accessories/wearable_items01/_exp00/brigandine/uncommon/low/head', 0), + (16370, 51070, 'accessories/wearable_items01/_exp00/brigandine/uncommon/low/legs', 0), + (16371, 51071, 'accessories/wearable_items01/_exp00/brigandine/uncommon/low/shoulders', 0), + (16372, 51072, 'accessories/wearable_items01/_exp00/brigandine/uncommon/medium/chest', 0), + (16373, 51073, 'accessories/wearable_items01/_exp00/brigandine/uncommon/medium/feet', 0), + (16374, 51074, 'accessories/wearable_items01/_exp00/brigandine/uncommon/medium/forearms', 0), + (16375, 51075, 'accessories/wearable_items01/_exp00/brigandine/uncommon/medium/hands', 0), + (16376, 51076, 'accessories/wearable_items01/_exp00/brigandine/uncommon/medium/head', 0), + (16377, 51077, 'accessories/wearable_items01/_exp00/brigandine/uncommon/medium/legs', 0), + (16378, 51078, 'accessories/wearable_items01/_exp00/brigandine/uncommon/medium/shoulders', 0), + (16379, 51079, 'accessories/wearable_items01/_exp00/chain/chain_tint01/chest', 0), + (16380, 51080, 'accessories/wearable_items01/_exp00/chain/chain_tint01/feet', 0), + (16381, 51081, 'accessories/wearable_items01/_exp00/chain/chain_tint01/forearms', 0), + (16382, 51082, 'accessories/wearable_items01/_exp00/chain/chain_tint01/hands', 0), + (16383, 51083, 'accessories/wearable_items01/_exp00/chain/chain_tint01/head', 0), + (16384, 51084, 'accessories/wearable_items01/_exp00/chain/chain_tint01/legs', 0), + (16385, 51085, 'accessories/wearable_items01/_exp00/chain/chain_tint01/legs_noskirt', 0), + (16386, 51086, 'accessories/wearable_items01/_exp00/chain/chain_tint01/shoulders', 0), + (16387, 51087, 'accessories/wearable_items01/_exp00/chain/chain_tint01/skirt', 0), + (16388, 51088, 'accessories/wearable_items01/_exp00/chain/common/high/chest', 0), + (16389, 51089, 'accessories/wearable_items01/_exp00/chain/common/high/feet', 0), + (16390, 51090, 'accessories/wearable_items01/_exp00/chain/common/high/forearms', 0), + (16391, 51091, 'accessories/wearable_items01/_exp00/chain/common/high/hands', 0), + (16392, 51092, 'accessories/wearable_items01/_exp00/chain/common/high/head', 0), + (16393, 51093, 'accessories/wearable_items01/_exp00/chain/common/high/legs', 0), + (16394, 51094, 'accessories/wearable_items01/_exp00/chain/common/high/shoulders', 0), + (16395, 51095, 'accessories/wearable_items01/_exp00/chain/common/low/chest', 0), + (16396, 51096, 'accessories/wearable_items01/_exp00/chain/common/low/feet', 0), + (16397, 51097, 'accessories/wearable_items01/_exp00/chain/common/low/forearms', 0), + (16398, 51098, 'accessories/wearable_items01/_exp00/chain/common/low/hands', 0), + (16399, 51099, 'accessories/wearable_items01/_exp00/chain/common/low/head', 0), + (16400, 51100, 'accessories/wearable_items01/_exp00/chain/common/low/legs', 0), + (16401, 51101, 'accessories/wearable_items01/_exp00/chain/common/low/legs_noskirt', 0), + (16402, 51102, 'accessories/wearable_items01/_exp00/chain/common/low/shoulders', 0), + (16403, 51103, 'accessories/wearable_items01/_exp00/chain/common/low/skirt', 0), + (16404, 51104, 'accessories/wearable_items01/_exp00/chain/common/medium/chest', 0), + (16405, 51105, 'accessories/wearable_items01/_exp00/chain/common/medium/feet', 0), + (16406, 51106, 'accessories/wearable_items01/_exp00/chain/common/medium/forearms', 0), + (16407, 51107, 'accessories/wearable_items01/_exp00/chain/common/medium/hands', 0), + (16408, 51108, 'accessories/wearable_items01/_exp00/chain/common/medium/head', 0), + (16409, 51109, 'accessories/wearable_items01/_exp00/chain/common/medium/legs', 0), + (16410, 51110, 'accessories/wearable_items01/_exp00/chain/common/medium/shoulders', 0), + (16411, 51111, 'accessories/wearable_items01/_exp00/chain/plain/low/chest', 0), + (16412, 51112, 'accessories/wearable_items01/_exp00/chain/plain/low/feet', 0), + (16413, 51113, 'accessories/wearable_items01/_exp00/chain/plain/low/forearms', 0), + (16414, 51114, 'accessories/wearable_items01/_exp00/chain/plain/low/hands', 0), + (16415, 51115, 'accessories/wearable_items01/_exp00/chain/plain/low/head', 0), + (16416, 51116, 'accessories/wearable_items01/_exp00/chain/plain/low/legs', 0), + (16417, 51117, 'accessories/wearable_items01/_exp00/chain/plain/low/legs_noskirt', 0), + (16418, 51118, 'accessories/wearable_items01/_exp00/chain/plain/low/shoulders', 0), + (16419, 51119, 'accessories/wearable_items01/_exp00/chain/plain/low/skirt', 0), + (16420, 51120, 'accessories/wearable_items01/_exp00/chain/uncommon/low/chest', 0), + (16421, 51121, 'accessories/wearable_items01/_exp00/chain/uncommon/low/feet', 0), + (16422, 51122, 'accessories/wearable_items01/_exp00/chain/uncommon/low/forearms', 0), + (16423, 51123, 'accessories/wearable_items01/_exp00/chain/uncommon/low/hands', 0), + (16424, 51124, 'accessories/wearable_items01/_exp00/chain/uncommon/low/head', 0), + (16425, 51125, 'accessories/wearable_items01/_exp00/chain/uncommon/low/legs', 0), + (16426, 51126, 'accessories/wearable_items01/_exp00/chain/uncommon/low/shoulders', 0), + (16427, 51127, 'accessories/wearable_items01/_exp00/chain/uncommon/medium/chest', 0), + (16428, 51128, 'accessories/wearable_items01/_exp00/chain/uncommon/medium/feet', 0), + (16429, 51129, 'accessories/wearable_items01/_exp00/chain/uncommon/medium/forearms', 0), + (16430, 51130, 'accessories/wearable_items01/_exp00/chain/uncommon/medium/hands', 0), + (16431, 51131, 'accessories/wearable_items01/_exp00/chain/uncommon/medium/head', 0), + (16432, 51132, 'accessories/wearable_items01/_exp00/chain/uncommon/medium/legs', 0), + (16433, 51133, 'accessories/wearable_items01/_exp00/chain/uncommon/medium/shoulders', 0), + (16434, 51134, 'accessories/wearable_items01/_exp00/chain/uncommon/medium/skirt', 0), + (16435, 51135, 'accessories/wearable_items01/_exp00/character_create/chest', 0), + (16436, 51136, 'accessories/wearable_items01/_exp00/christmas_hats/santa_hat/head', 0), + (16437, 51137, 'accessories/wearable_items01/_exp00/christmas_hats/santa_hat_02/head', 0), + (16438, 51148, 'accessories/wearable_items01/_exp00/cloak/exp03/cloak_di_01', 0), + (16439, 51149, 'accessories/wearable_items01/_exp00/cloak/exp03/cloak_dt_01', 0), + (16440, 51150, 'accessories/wearable_items01/_exp00/cloak/exp03/cloak_dt_01_dark_lord', 0), + (16441, 51151, 'accessories/wearable_items01/_exp00/cloak/exp03/cloak_sq_01', 0), + (16442, 51152, 'accessories/wearable_items01/_exp00/cloak/exp03/cloak_sq_01_flames', 0), + (16443, 51153, 'accessories/wearable_items01/_exp00/cloak/exp03/cloak_sq_01_unrest_vapor', 0), + (16444, 51154, 'accessories/wearable_items01/_exp00/cloak/exp03/cloak_sq_02', 0), + (16445, 51155, 'accessories/wearable_items01/_exp00/clothing/common/high/arms', 0), + (16446, 51156, 'accessories/wearable_items01/_exp00/clothing/common/high/chest', 0), + (16447, 51157, 'accessories/wearable_items01/_exp00/clothing/common/high/legs', 0), + (16448, 51158, 'accessories/wearable_items01/_exp00/clothing/common/low/arms', 0), + (16449, 51159, 'accessories/wearable_items01/_exp00/clothing/common/low/chest', 0), + (16450, 51160, 'accessories/wearable_items01/_exp00/clothing/common/low/legs', 0), + (16451, 51161, 'accessories/wearable_items01/_exp00/clothing/common/medium/arms', 0), + (16452, 51162, 'accessories/wearable_items01/_exp00/clothing/common/medium/chest', 0), + (16453, 51163, 'accessories/wearable_items01/_exp00/clothing/common/medium/legs', 0), + (16454, 51164, 'accessories/wearable_items01/_exp00/clothing/common_tint01/chest', 0), + (16455, 51165, 'accessories/wearable_items01/_exp00/clothing/common_tint01/legs', 0), + (16456, 51166, 'accessories/wearable_items01/_exp00/clothing/common_tint01/shoulders', 0), + (16457, 51167, 'accessories/wearable_items01/_exp00/clothing/uncommon/high/arms', 0), + (16458, 51168, 'accessories/wearable_items01/_exp00/clothing/uncommon/high/chest', 0), + (16459, 51169, 'accessories/wearable_items01/_exp00/clothing/uncommon/high/legs', 0), + (16460, 51170, 'accessories/wearable_items01/_exp00/ghost/ghost_leather/chest', 0), + (16461, 51171, 'accessories/wearable_items01/_exp00/ghost/ghost_leather/feet', 0), + (16462, 51172, 'accessories/wearable_items01/_exp00/ghost/ghost_leather/forearms', 0), + (16463, 51173, 'accessories/wearable_items01/_exp00/ghost/ghost_leather/hands', 0), + (16464, 51174, 'accessories/wearable_items01/_exp00/ghost/ghost_leather/head', 0), + (16465, 51175, 'accessories/wearable_items01/_exp00/ghost/ghost_leather/legs', 0), + (16466, 51176, 'accessories/wearable_items01/_exp00/ghost/ghost_leather/shoulders', 0), + (16467, 51177, 'accessories/wearable_items01/_exp00/ghost/ghost_leather/skirt', 0), + (16468, 51178, 'accessories/wearable_items01/_exp00/ghost/ghost_mage/arms', 0), + (16469, 51179, 'accessories/wearable_items01/_exp00/ghost/ghost_mage/chest', 0), + (16470, 51180, 'accessories/wearable_items01/_exp00/ghost/ghost_mage/skirt', 0), + (16471, 51181, 'accessories/wearable_items01/_exp00/ghost/ghost_plate/chest', 0), + (16472, 51182, 'accessories/wearable_items01/_exp00/ghost/ghost_plate/feet', 0), + (16473, 51183, 'accessories/wearable_items01/_exp00/ghost/ghost_plate/forearms', 0), + (16474, 51184, 'accessories/wearable_items01/_exp00/ghost/ghost_plate/hands', 0), + (16475, 51185, 'accessories/wearable_items01/_exp00/ghost/ghost_plate/head', 0), + (16476, 51186, 'accessories/wearable_items01/_exp00/ghost/ghost_plate/legs', 0), + (16477, 51187, 'accessories/wearable_items01/_exp00/ghost/ghost_plate/shoulders', 0), + (16478, 51188, 'accessories/wearable_items01/_exp00/ghost/ghost_robes/chest', 0), + (16479, 51189, 'accessories/wearable_items01/_exp00/ghost/ghost_robes/hood', 0), + (16480, 51190, 'accessories/wearable_items01/_exp00/ghost/ghost_robes/pants', 0), + (16481, 51191, 'accessories/wearable_items01/_exp00/ghost/ghost_robes/skirt', 0), + (16482, 51192, 'accessories/wearable_items01/_exp00/ghost/ghost_vanguard/chest', 0), + (16483, 51193, 'accessories/wearable_items01/_exp00/ghost/ghost_vanguard/feet', 0), + (16484, 51194, 'accessories/wearable_items01/_exp00/ghost/ghost_vanguard/forearms', 0), + (16485, 51195, 'accessories/wearable_items01/_exp00/ghost/ghost_vanguard/hands', 0), + (16486, 51196, 'accessories/wearable_items01/_exp00/ghost/ghost_vanguard/head', 0), + (16487, 51197, 'accessories/wearable_items01/_exp00/ghost/ghost_vanguard/left', 0), + (16488, 51198, 'accessories/wearable_items01/_exp00/ghost/ghost_vanguard/legs', 0), + (16489, 51199, 'accessories/wearable_items01/_exp00/ghost/ghost_vanguard/right', 0), + (16490, 51200, 'accessories/wearable_items01/_exp00/ghost/ghost_vanguard/shoulders', 0), + (16491, 51201, 'accessories/wearable_items01/_exp00/ghost/ghost_vanguard/skirt', 0), + (16492, 51202, 'accessories/wearable_items01/_exp00/halloween_masks/amygdalan_mask/head', 0), + (16493, 51203, 'accessories/wearable_items01/_exp00/halloween_masks/antonia_mask/head', 0), + (16494, 51204, 'accessories/wearable_items01/_exp00/halloween_masks/arrow_mask/head', 0), + (16495, 51205, 'accessories/wearable_items01/_exp00/halloween_masks/cat_mask/head', 0), + (16496, 51206, 'accessories/wearable_items01/_exp00/halloween_masks/goblin_mask/head', 0), + (16497, 51207, 'accessories/wearable_items01/_exp00/halloween_masks/hatchet_mask/head', 0), + (16498, 51208, 'accessories/wearable_items01/_exp00/halloween_masks/lucan_mask/head', 0), + (16499, 51209, 'accessories/wearable_items01/_exp00/halloween_masks/mask_mask/head', 0), + (16500, 51210, 'accessories/wearable_items01/_exp00/halloween_masks/nightblood_mask/head', 0), + (16501, 51211, 'accessories/wearable_items01/_exp00/halloween_masks/scarecrow_mask/head', 0), + (16502, 51212, 'accessories/wearable_items01/_exp00/halloween_masks/skeleton_mask/head', 0), + (16503, 51213, 'accessories/wearable_items01/_exp00/heavy_chain/plain/chest', 0), + (16504, 51214, 'accessories/wearable_items01/_exp00/heavy_chain/plain/feet', 0), + (16505, 51215, 'accessories/wearable_items01/_exp00/heavy_chain/plain/forearms', 0), + (16506, 51216, 'accessories/wearable_items01/_exp00/heavy_chain/plain/hands', 0), + (16507, 51217, 'accessories/wearable_items01/_exp00/heavy_chain/plain/head', 0), + (16508, 51218, 'accessories/wearable_items01/_exp00/heavy_chain/plain/legs', 0), + (16509, 51219, 'accessories/wearable_items01/_exp00/heavy_chain/plain/legs_noskirt', 0), + (16510, 51220, 'accessories/wearable_items01/_exp00/heavy_chain/plain/pauldrons', 0), + (16511, 51221, 'accessories/wearable_items01/_exp00/heavy_chain/plain/shoulders', 0), + (16512, 51222, 'accessories/wearable_items01/_exp00/heavy_chain/plain/shoulders_no_pauldrons', 0), + (16513, 51223, 'accessories/wearable_items01/_exp00/heavy_chain/plain/skirt', 0), + (16514, 51224, 'accessories/wearable_items01/_exp00/heavy_cloth/heavy_cloth_commoner_plain/chest', 0), + (16515, 51225, 'accessories/wearable_items01/_exp00/heavy_cloth/heavy_cloth_commoner_plain/feet', 0), + (16516, 51226, 'accessories/wearable_items01/_exp00/heavy_cloth/heavy_cloth_commoner_plain/forearms', 0), + (16517, 51227, 'accessories/wearable_items01/_exp00/heavy_cloth/heavy_cloth_commoner_plain/hands', 0), + (16518, 51228, 'accessories/wearable_items01/_exp00/heavy_cloth/heavy_cloth_commoner_plain/legs', 0), + (16519, 51229, 'accessories/wearable_items01/_exp00/heavy_cloth/heavy_cloth_commoner_plain/shoulders', 0), + (16520, 51230, 'accessories/wearable_items01/_exp00/heavy_cloth/heavy_cloth_dervish_plain/chest', 0), + (16521, 51231, 'accessories/wearable_items01/_exp00/heavy_cloth/heavy_cloth_dervish_plain/feet', 0), + (16522, 51232, 'accessories/wearable_items01/_exp00/heavy_cloth/heavy_cloth_dervish_plain/forearms', 0), + (16523, 51233, 'accessories/wearable_items01/_exp00/heavy_cloth/heavy_cloth_dervish_plain/hands', 0), + (16524, 51234, 'accessories/wearable_items01/_exp00/heavy_cloth/heavy_cloth_dervish_plain/head', 0), + (16525, 51235, 'accessories/wearable_items01/_exp00/heavy_cloth/heavy_cloth_dervish_plain/legs', 0), + (16526, 51236, 'accessories/wearable_items01/_exp00/heavy_cloth/heavy_cloth_dervish_plain/legs_noskirt', 0), + (16527, 51237, 'accessories/wearable_items01/_exp00/heavy_cloth/heavy_cloth_dervish_plain/shoulders', 0), + (16528, 51238, 'accessories/wearable_items01/_exp00/heavy_cloth/heavy_cloth_dervish_plain/skirt', 0), + (16529, 51239, 'accessories/wearable_items01/_exp00/heavy_plate/plain/chest', 0), + (16530, 51240, 'accessories/wearable_items01/_exp00/heavy_plate/plain/feet', 0), + (16531, 51241, 'accessories/wearable_items01/_exp00/heavy_plate/plain/forearms', 0), + (16532, 51242, 'accessories/wearable_items01/_exp00/heavy_plate/plain/hands', 0), + (16533, 51243, 'accessories/wearable_items01/_exp00/heavy_plate/plain/head', 0), + (16534, 51244, 'accessories/wearable_items01/_exp00/heavy_plate/plain/left', 0), + (16535, 51245, 'accessories/wearable_items01/_exp00/heavy_plate/plain/legs', 0), + (16536, 51246, 'accessories/wearable_items01/_exp00/heavy_plate/plain/legs_noskirt', 0), + (16537, 51247, 'accessories/wearable_items01/_exp00/heavy_plate/plain/right', 0), + (16538, 51248, 'accessories/wearable_items01/_exp00/heavy_plate/plain/shoulders', 0), + (16539, 51249, 'accessories/wearable_items01/_exp00/heavy_plate/plain/shoulders_nopauldrons', 0), + (16540, 51250, 'accessories/wearable_items01/_exp00/heavy_plate/plain/skirt', 0), + (16541, 51251, 'accessories/wearable_items01/_exp00/heavy_plate/plain/upperchest', 0), + (16542, 51252, 'accessories/wearable_items01/_exp00/journeyman/journeyman_leather/chest', 0), + (16543, 51253, 'accessories/wearable_items01/_exp00/journeyman/journeyman_leather/feet', 0), + (16544, 51254, 'accessories/wearable_items01/_exp00/journeyman/journeyman_leather/forearms', 0), + (16545, 51255, 'accessories/wearable_items01/_exp00/journeyman/journeyman_leather/hands', 0), + (16546, 51256, 'accessories/wearable_items01/_exp00/journeyman/journeyman_leather/head', 0), + (16547, 51257, 'accessories/wearable_items01/_exp00/journeyman/journeyman_leather/legs', 0), + (16548, 51258, 'accessories/wearable_items01/_exp00/journeyman/journeyman_leather/shoulders', 0), + (16549, 51259, 'accessories/wearable_items01/_exp00/leather/artifact/high/chest', 0), + (16550, 51260, 'accessories/wearable_items01/_exp00/leather/artifact/high/feet', 0), + (16551, 51261, 'accessories/wearable_items01/_exp00/leather/artifact/high/forearms', 0), + (16552, 51262, 'accessories/wearable_items01/_exp00/leather/artifact/high/hands', 0), + (16553, 51263, 'accessories/wearable_items01/_exp00/leather/artifact/high/head', 0), + (16554, 51264, 'accessories/wearable_items01/_exp00/leather/artifact/high/legs', 0), + (16555, 51265, 'accessories/wearable_items01/_exp00/leather/artifact/high/shoulders', 0), + (16556, 51266, 'accessories/wearable_items01/_exp00/leather/artifact/low/chest', 0), + (16557, 51267, 'accessories/wearable_items01/_exp00/leather/artifact/low/feet', 0), + (16558, 51268, 'accessories/wearable_items01/_exp00/leather/artifact/low/forearms', 0), + (16559, 51269, 'accessories/wearable_items01/_exp00/leather/artifact/low/hands', 0), + (16560, 51270, 'accessories/wearable_items01/_exp00/leather/artifact/low/head', 0), + (16561, 51271, 'accessories/wearable_items01/_exp00/leather/artifact/low/legs', 0), + (16562, 51272, 'accessories/wearable_items01/_exp00/leather/artifact/low/legs_noskirt', 0), + (16563, 51273, 'accessories/wearable_items01/_exp00/leather/artifact/low/shoulders', 0), + (16564, 51274, 'accessories/wearable_items01/_exp00/leather/artifact/low/skirt', 0), + (16565, 51275, 'accessories/wearable_items01/_exp00/leather/artifact/medium/chest', 0), + (16566, 51276, 'accessories/wearable_items01/_exp00/leather/artifact/medium/feet', 0), + (16567, 51277, 'accessories/wearable_items01/_exp00/leather/artifact/medium/forearms', 0), + (16568, 51278, 'accessories/wearable_items01/_exp00/leather/artifact/medium/hands', 0), + (16569, 51279, 'accessories/wearable_items01/_exp00/leather/artifact/medium/head', 0), + (16570, 51280, 'accessories/wearable_items01/_exp00/leather/artifact/medium/legs', 0), + (16571, 51281, 'accessories/wearable_items01/_exp00/leather/artifact/medium/legs_noskirt', 0), + (16572, 51282, 'accessories/wearable_items01/_exp00/leather/artifact/medium/shoulders', 0), + (16573, 51283, 'accessories/wearable_items01/_exp00/leather/artifact/medium/skirt', 0), + (16574, 51284, 'accessories/wearable_items01/_exp00/leather/common/high/chest', 0), + (16575, 51285, 'accessories/wearable_items01/_exp00/leather/common/high/feet', 0), + (16576, 51286, 'accessories/wearable_items01/_exp00/leather/common/high/forearms', 0), + (16577, 51287, 'accessories/wearable_items01/_exp00/leather/common/high/hands', 0), + (16578, 51288, 'accessories/wearable_items01/_exp00/leather/common/high/head', 0), + (16579, 51289, 'accessories/wearable_items01/_exp00/leather/common/high/legs', 0), + (16580, 51290, 'accessories/wearable_items01/_exp00/leather/common/high/legs_noskirt', 0), + (16581, 51291, 'accessories/wearable_items01/_exp00/leather/common/high/shoulders', 0), + (16582, 51292, 'accessories/wearable_items01/_exp00/leather/common/high/skirt', 0), + (16583, 51293, 'accessories/wearable_items01/_exp00/leather/common/low/chest', 0), + (16584, 51294, 'accessories/wearable_items01/_exp00/leather/common/low/feet', 0), + (16585, 51295, 'accessories/wearable_items01/_exp00/leather/common/low/forearms', 0), + (16586, 51296, 'accessories/wearable_items01/_exp00/leather/common/low/hands', 0), + (16587, 51297, 'accessories/wearable_items01/_exp00/leather/common/low/head', 0), + (16588, 51298, 'accessories/wearable_items01/_exp00/leather/common/low/legs', 0), + (16589, 51299, 'accessories/wearable_items01/_exp00/leather/common/low/legs_noskirt', 0), + (16590, 51300, 'accessories/wearable_items01/_exp00/leather/common/low/shoulders', 0), + (16591, 51301, 'accessories/wearable_items01/_exp00/leather/common/low/skirt', 0), + (16592, 51302, 'accessories/wearable_items01/_exp00/leather/common/medium/chest', 0), + (16593, 51303, 'accessories/wearable_items01/_exp00/leather/common/medium/feet', 0), + (16594, 51304, 'accessories/wearable_items01/_exp00/leather/common/medium/forearms', 0), + (16595, 51305, 'accessories/wearable_items01/_exp00/leather/common/medium/hands', 0), + (16596, 51306, 'accessories/wearable_items01/_exp00/leather/common/medium/head', 0), + (16597, 51307, 'accessories/wearable_items01/_exp00/leather/common/medium/legs', 0), + (16598, 51308, 'accessories/wearable_items01/_exp00/leather/common/medium/legs_noskirt', 0), + (16599, 51309, 'accessories/wearable_items01/_exp00/leather/common/medium/shoulders', 0), + (16600, 51310, 'accessories/wearable_items01/_exp00/leather/common/medium/skirt', 0), + (16601, 51311, 'accessories/wearable_items01/_exp00/leather/leather_tint01/chest', 0), + (16602, 51312, 'accessories/wearable_items01/_exp00/leather/leather_tint01/feet', 0), + (16603, 51313, 'accessories/wearable_items01/_exp00/leather/leather_tint01/forearms', 0), + (16604, 51314, 'accessories/wearable_items01/_exp00/leather/leather_tint01/hands', 0), + (16605, 51315, 'accessories/wearable_items01/_exp00/leather/leather_tint01/head', 0), + (16606, 51316, 'accessories/wearable_items01/_exp00/leather/leather_tint01/legs', 0), + (16607, 51317, 'accessories/wearable_items01/_exp00/leather/leather_tint01/legs_noskirt', 0), + (16608, 51318, 'accessories/wearable_items01/_exp00/leather/leather_tint01/shoulders', 0), + (16609, 51319, 'accessories/wearable_items01/_exp00/leather/leather_tint01/skirt', 0), + (16610, 51320, 'accessories/wearable_items01/_exp00/leather/plain/stitched/chest', 0), + (16611, 51321, 'accessories/wearable_items01/_exp00/leather/plain/stitched/feet', 0), + (16612, 51322, 'accessories/wearable_items01/_exp00/leather/plain/stitched/forearms', 0), + (16613, 51323, 'accessories/wearable_items01/_exp00/leather/plain/stitched/hands', 0), + (16614, 51324, 'accessories/wearable_items01/_exp00/leather/plain/stitched/head', 0), + (16615, 51325, 'accessories/wearable_items01/_exp00/leather/plain/stitched/legs', 0), + (16616, 51326, 'accessories/wearable_items01/_exp00/leather/plain/stitched/shoulders', 0), + (16617, 51327, 'accessories/wearable_items01/_exp00/leather/plain/stitched/skirt', 0), + (16618, 51328, 'accessories/wearable_items01/_exp00/leather/rare/high/chest', 0), + (16619, 51329, 'accessories/wearable_items01/_exp00/leather/rare/high/feet', 0), + (16620, 51330, 'accessories/wearable_items01/_exp00/leather/rare/high/forearms', 0), + (16621, 51331, 'accessories/wearable_items01/_exp00/leather/rare/high/hands', 0), + (16622, 51332, 'accessories/wearable_items01/_exp00/leather/rare/high/head', 0), + (16623, 51333, 'accessories/wearable_items01/_exp00/leather/rare/high/legs', 0), + (16624, 51334, 'accessories/wearable_items01/_exp00/leather/rare/high/shoulders', 0), + (16625, 51335, 'accessories/wearable_items01/_exp00/leather/rare/low/chest', 0), + (16626, 51336, 'accessories/wearable_items01/_exp00/leather/rare/low/feet', 0), + (16627, 51337, 'accessories/wearable_items01/_exp00/leather/rare/low/forearms', 0), + (16628, 51338, 'accessories/wearable_items01/_exp00/leather/rare/low/hands', 0), + (16629, 51339, 'accessories/wearable_items01/_exp00/leather/rare/low/head', 0), + (16630, 51340, 'accessories/wearable_items01/_exp00/leather/rare/low/legs', 0), + (16631, 51341, 'accessories/wearable_items01/_exp00/leather/rare/low/shoulders', 0), + (16632, 51342, 'accessories/wearable_items01/_exp00/leather/rare/medium/chest', 0), + (16633, 51343, 'accessories/wearable_items01/_exp00/leather/rare/medium/feet', 0), + (16634, 51344, 'accessories/wearable_items01/_exp00/leather/rare/medium/forearms', 0), + (16635, 51345, 'accessories/wearable_items01/_exp00/leather/rare/medium/hands', 0), + (16636, 51346, 'accessories/wearable_items01/_exp00/leather/rare/medium/head', 0), + (16637, 51347, 'accessories/wearable_items01/_exp00/leather/rare/medium/legs', 0), + (16638, 51348, 'accessories/wearable_items01/_exp00/leather/rare/medium/shoulders', 0), + (16639, 51349, 'accessories/wearable_items01/_exp00/leather/uncommon/high/chest', 0), + (16640, 51350, 'accessories/wearable_items01/_exp00/leather/uncommon/high/feet', 0), + (16641, 51351, 'accessories/wearable_items01/_exp00/leather/uncommon/high/forearms', 0), + (16642, 51352, 'accessories/wearable_items01/_exp00/leather/uncommon/high/hands', 0), + (16643, 51353, 'accessories/wearable_items01/_exp00/leather/uncommon/high/head', 0), + (16644, 51354, 'accessories/wearable_items01/_exp00/leather/uncommon/high/legs', 0), + (16645, 51355, 'accessories/wearable_items01/_exp00/leather/uncommon/high/legs_noskirt', 0), + (16646, 51356, 'accessories/wearable_items01/_exp00/leather/uncommon/high/shoulders', 0), + (16647, 51357, 'accessories/wearable_items01/_exp00/leather/uncommon/high/skirt', 0), + (16648, 51358, 'accessories/wearable_items01/_exp00/leather/uncommon/low/chest', 0), + (16649, 51359, 'accessories/wearable_items01/_exp00/leather/uncommon/low/feet', 0), + (16650, 51360, 'accessories/wearable_items01/_exp00/leather/uncommon/low/forearms', 0), + (16651, 51361, 'accessories/wearable_items01/_exp00/leather/uncommon/low/hands', 0), + (16652, 51362, 'accessories/wearable_items01/_exp00/leather/uncommon/low/head', 0), + (16653, 51363, 'accessories/wearable_items01/_exp00/leather/uncommon/low/legs', 0), + (16654, 51364, 'accessories/wearable_items01/_exp00/leather/uncommon/low/legs_noskirt', 0), + (16655, 51365, 'accessories/wearable_items01/_exp00/leather/uncommon/low/shoulders', 0), + (16656, 51366, 'accessories/wearable_items01/_exp00/leather/uncommon/low/skirt', 0), + (16657, 51367, 'accessories/wearable_items01/_exp00/leather/uncommon/medium/chest', 0), + (16658, 51368, 'accessories/wearable_items01/_exp00/leather/uncommon/medium/feet', 0), + (16659, 51369, 'accessories/wearable_items01/_exp00/leather/uncommon/medium/forearms', 0), + (16660, 51370, 'accessories/wearable_items01/_exp00/leather/uncommon/medium/hands', 0), + (16661, 51371, 'accessories/wearable_items01/_exp00/leather/uncommon/medium/head', 0), + (16662, 51372, 'accessories/wearable_items01/_exp00/leather/uncommon/medium/legs', 0), + (16663, 51373, 'accessories/wearable_items01/_exp00/leather/uncommon/medium/legs_noskirt', 0), + (16664, 51374, 'accessories/wearable_items01/_exp00/leather/uncommon/medium/shoulders', 0), + (16665, 51375, 'accessories/wearable_items01/_exp00/leather/uncommon/medium/skirt', 0), + (16666, 51376, 'accessories/wearable_items01/_exp00/magus/artifact/high/arms', 0), + (16667, 51377, 'accessories/wearable_items01/_exp00/magus/artifact/high/chest', 0), + (16668, 51378, 'accessories/wearable_items01/_exp00/magus/artifact/high/skirt', 0), + (16669, 51379, 'accessories/wearable_items01/_exp00/magus/artifact/low/chest', 0), + (16670, 51380, 'accessories/wearable_items01/_exp00/magus/artifact/low/hood', 0), + (16671, 51381, 'accessories/wearable_items01/_exp00/magus/artifact/low/pants', 0), + (16672, 51382, 'accessories/wearable_items01/_exp00/magus/artifact/low/skirt', 0), + (16673, 51383, 'accessories/wearable_items01/_exp00/magus/artifact/medium/chest', 0), + (16674, 51384, 'accessories/wearable_items01/_exp00/magus/artifact/medium/hood', 0), + (16675, 51385, 'accessories/wearable_items01/_exp00/magus/artifact/medium/pants', 0), + (16676, 51386, 'accessories/wearable_items01/_exp00/magus/artifact/medium/skirt', 0), + (16677, 51387, 'accessories/wearable_items01/_exp00/magus/common/high/chest', 0), + (16678, 51388, 'accessories/wearable_items01/_exp00/magus/common/high/hood', 0), + (16679, 51389, 'accessories/wearable_items01/_exp00/magus/common/high/pants', 0), + (16680, 51390, 'accessories/wearable_items01/_exp00/magus/common/high/skirt', 0), + (16681, 51391, 'accessories/wearable_items01/_exp00/magus/common/low/chest', 0), + (16682, 51392, 'accessories/wearable_items01/_exp00/magus/common/low/hood', 0), + (16683, 51393, 'accessories/wearable_items01/_exp00/magus/common/low/pants', 0), + (16684, 51394, 'accessories/wearable_items01/_exp00/magus/common/low/skirt', 0), + (16685, 51395, 'accessories/wearable_items01/_exp00/magus/common/medium/chest', 0), + (16686, 51396, 'accessories/wearable_items01/_exp00/magus/common/medium/hood', 0), + (16687, 51397, 'accessories/wearable_items01/_exp00/magus/common/medium/pants', 0), + (16688, 51398, 'accessories/wearable_items01/_exp00/magus/common/medium/skirt', 0), + (16689, 51399, 'accessories/wearable_items01/_exp00/magus/rare/high/chest', 0), + (16690, 51400, 'accessories/wearable_items01/_exp00/magus/rare/high/hood', 0), + (16691, 51401, 'accessories/wearable_items01/_exp00/magus/rare/high/pants', 0), + (16692, 51402, 'accessories/wearable_items01/_exp00/magus/rare/high/skirt', 0), + (16693, 51403, 'accessories/wearable_items01/_exp00/magus/rare/low/chest', 0), + (16694, 51404, 'accessories/wearable_items01/_exp00/magus/rare/low/hood', 0), + (16695, 51405, 'accessories/wearable_items01/_exp00/magus/rare/low/pants', 0), + (16696, 51406, 'accessories/wearable_items01/_exp00/magus/rare/low/skirt', 0), + (16697, 51407, 'accessories/wearable_items01/_exp00/magus/rare/medium/chest', 0), + (16698, 51408, 'accessories/wearable_items01/_exp00/magus/rare/medium/pants', 0), + (16699, 51409, 'accessories/wearable_items01/_exp00/magus/rare/medium/shoulders', 0), + (16700, 51410, 'accessories/wearable_items01/_exp00/magus/robes/dragon_ornate/chest', 0), + (16701, 51411, 'accessories/wearable_items01/_exp00/magus/robes/dragon_ornate/hood', 0), + (16702, 51412, 'accessories/wearable_items01/_exp00/magus/robes/dragon_ornate/pants', 0), + (16703, 51413, 'accessories/wearable_items01/_exp00/magus/robes/dragon_ornate/skirt', 0), + (16704, 51414, 'accessories/wearable_items01/_exp00/magus/robes/fancy_goldburgundy/chest', 0), + (16705, 51415, 'accessories/wearable_items01/_exp00/magus/robes/fancy_goldburgundy/hood', 0), + (16706, 51416, 'accessories/wearable_items01/_exp00/magus/robes/fancy_goldburgundy/pants', 0), + (16707, 51417, 'accessories/wearable_items01/_exp00/magus/robes/fancy_goldburgundy/skirt', 0), + (16708, 51418, 'accessories/wearable_items01/_exp00/magus/robes/plain_quilted/chest', 0), + (16709, 51419, 'accessories/wearable_items01/_exp00/magus/robes/plain_quilted/hood', 0), + (16710, 51420, 'accessories/wearable_items01/_exp00/magus/robes/plain_quilted/pants', 0), + (16711, 51421, 'accessories/wearable_items01/_exp00/magus/robes/plain_quilted/skirt', 0), + (16712, 51422, 'accessories/wearable_items01/_exp00/magus/robes/plain_quilted_patches/chest', 0), + (16713, 51423, 'accessories/wearable_items01/_exp00/magus/robes/plain_quilted_patches/hood', 0), + (16714, 51424, 'accessories/wearable_items01/_exp00/magus/robes/plain_quilted_patches/pants', 0), + (16715, 51425, 'accessories/wearable_items01/_exp00/magus/robes/plain_quilted_patches/skirt', 0), + (16716, 51426, 'accessories/wearable_items01/_exp00/magus/robes/robe_newbie_tint01/chest', 0), + (16717, 51427, 'accessories/wearable_items01/_exp00/magus/robes/robe_newbie_tint01/hood', 0), + (16718, 51428, 'accessories/wearable_items01/_exp00/magus/robes/robe_newbie_tint01/pants', 0), + (16719, 51429, 'accessories/wearable_items01/_exp00/magus/robes/robe_newbie_tint01/skirt', 0), + (16720, 51430, 'accessories/wearable_items01/_exp00/magus/uncommon/high/chest', 0), + (16721, 51431, 'accessories/wearable_items01/_exp00/magus/uncommon/high/hood', 0), + (16722, 51432, 'accessories/wearable_items01/_exp00/magus/uncommon/high/pants', 0), + (16723, 51433, 'accessories/wearable_items01/_exp00/magus/uncommon/high/skirt', 0), + (16724, 51434, 'accessories/wearable_items01/_exp00/magus/uncommon/low/chest', 0), + (16725, 51435, 'accessories/wearable_items01/_exp00/magus/uncommon/low/forearms', 0), + (16726, 51436, 'accessories/wearable_items01/_exp00/magus/uncommon/low/legs', 0), + (16727, 51437, 'accessories/wearable_items01/_exp00/magus/uncommon/low/skirt', 0), + (16728, 51438, 'accessories/wearable_items01/_exp00/magus/uncommon/medium/chest', 0), + (16729, 51439, 'accessories/wearable_items01/_exp00/magus/uncommon/medium/hood', 0), + (16730, 51440, 'accessories/wearable_items01/_exp00/magus/uncommon/medium/pants', 0), + (16731, 51441, 'accessories/wearable_items01/_exp00/magus/uncommon/medium/skirt', 0), + (16732, 51442, 'accessories/wearable_items01/_exp00/monk/monk_plain/chest', 0), + (16733, 51443, 'accessories/wearable_items01/_exp00/monk/monk_plain/feet', 0), + (16734, 51444, 'accessories/wearable_items01/_exp00/monk/monk_plain/forearms', 0), + (16735, 51445, 'accessories/wearable_items01/_exp00/monk/monk_plain/head', 0), + (16736, 51446, 'accessories/wearable_items01/_exp00/monk/monk_plain/legs', 0), + (16737, 51447, 'accessories/wearable_items01/_exp00/monk/monk_plain/shoulders', 0), + (16738, 51448, 'accessories/wearable_items01/_exp00/npcskirts/antonia_skirt', 0), + (16739, 51449, 'accessories/wearable_items01/_exp00/npcskirts/lucan_skirt', 0), + (16740, 51450, 'accessories/wearable_items01/_exp00/pauldrons/evil01/pauldron_evil01', 0), + (16741, 51451, 'accessories/wearable_items01/_exp00/pauldrons/evil01/shoulders_pauldron_evil01', 0), + (16742, 51452, 'accessories/wearable_items01/_exp00/pauldrons/evil02/pauldron_evil02', 0), + (16743, 51453, 'accessories/wearable_items01/_exp00/pauldrons/evil02/shoulders_pauldron_evil02', 0), + (16744, 51454, 'accessories/wearable_items01/_exp00/plate/common/high/chest', 0), + (16745, 51455, 'accessories/wearable_items01/_exp00/plate/common/high/feet', 0), + (16746, 51456, 'accessories/wearable_items01/_exp00/plate/common/high/forearms', 0), + (16747, 51457, 'accessories/wearable_items01/_exp00/plate/common/high/hands', 0), + (16748, 51458, 'accessories/wearable_items01/_exp00/plate/common/high/head', 0), + (16749, 51459, 'accessories/wearable_items01/_exp00/plate/common/high/legs', 0), + (16750, 51460, 'accessories/wearable_items01/_exp00/plate/common/high/shoulders', 0), + (16751, 51461, 'accessories/wearable_items01/_exp00/plate/common/low/chest', 0), + (16752, 51462, 'accessories/wearable_items01/_exp00/plate/common/low/feet', 0), + (16753, 51463, 'accessories/wearable_items01/_exp00/plate/common/low/forearms', 0), + (16754, 51464, 'accessories/wearable_items01/_exp00/plate/common/low/hands', 0), + (16755, 51465, 'accessories/wearable_items01/_exp00/plate/common/low/head', 0), + (16756, 51466, 'accessories/wearable_items01/_exp00/plate/common/low/legs', 0), + (16757, 51467, 'accessories/wearable_items01/_exp00/plate/common/low/shoulders', 0), + (16758, 51468, 'accessories/wearable_items01/_exp00/plate/common/medium/chest', 0), + (16759, 51469, 'accessories/wearable_items01/_exp00/plate/common/medium/feet', 0), + (16760, 51470, 'accessories/wearable_items01/_exp00/plate/common/medium/forearms', 0), + (16761, 51471, 'accessories/wearable_items01/_exp00/plate/common/medium/hands', 0), + (16762, 51472, 'accessories/wearable_items01/_exp00/plate/common/medium/head', 0), + (16763, 51473, 'accessories/wearable_items01/_exp00/plate/common/medium/legs', 0), + (16764, 51474, 'accessories/wearable_items01/_exp00/plate/common/medium/shoulders', 0), + (16765, 51475, 'accessories/wearable_items01/_exp00/plate/plate_tint01/chest', 0), + (16766, 51476, 'accessories/wearable_items01/_exp00/plate/plate_tint01/feet', 0), + (16767, 51477, 'accessories/wearable_items01/_exp00/plate/plate_tint01/forearms', 0), + (16768, 51478, 'accessories/wearable_items01/_exp00/plate/plate_tint01/hands', 0), + (16769, 51479, 'accessories/wearable_items01/_exp00/plate/plate_tint01/head', 0), + (16770, 51480, 'accessories/wearable_items01/_exp00/plate/plate_tint01/legs', 0), + (16771, 51481, 'accessories/wearable_items01/_exp00/plate/plate_tint01/shoulders', 0), + (16772, 51482, 'accessories/wearable_items01/_exp00/plate/plate_tint02/chest', 0), + (16773, 51483, 'accessories/wearable_items01/_exp00/plate/plate_tint02/feet', 0), + (16774, 51484, 'accessories/wearable_items01/_exp00/plate/plate_tint02/forearms', 0), + (16775, 51485, 'accessories/wearable_items01/_exp00/plate/plate_tint02/hands', 0), + (16776, 51486, 'accessories/wearable_items01/_exp00/plate/plate_tint02/head', 0), + (16777, 51487, 'accessories/wearable_items01/_exp00/plate/plate_tint02/legs', 0), + (16778, 51488, 'accessories/wearable_items01/_exp00/plate/plate_tint02/shoulders', 0), + (16779, 51489, 'accessories/wearable_items01/_exp00/plate/uncommon/low/chest', 0), + (16780, 51490, 'accessories/wearable_items01/_exp00/plate/uncommon/low/feet', 0), + (16781, 51491, 'accessories/wearable_items01/_exp00/plate/uncommon/low/forearms', 0), + (16782, 51492, 'accessories/wearable_items01/_exp00/plate/uncommon/low/hands', 0), + (16783, 51493, 'accessories/wearable_items01/_exp00/plate/uncommon/low/head', 0), + (16784, 51494, 'accessories/wearable_items01/_exp00/plate/uncommon/low/legs', 0), + (16785, 51495, 'accessories/wearable_items01/_exp00/plate/uncommon/low/shoulders', 0), + (16786, 51496, 'accessories/wearable_items01/_exp00/plate/uncommon/medium/chest', 0), + (16787, 51497, 'accessories/wearable_items01/_exp00/plate/uncommon/medium/feet', 0), + (16788, 51498, 'accessories/wearable_items01/_exp00/plate/uncommon/medium/forearms', 0), + (16789, 51499, 'accessories/wearable_items01/_exp00/plate/uncommon/medium/hands', 0), + (16790, 51500, 'accessories/wearable_items01/_exp00/plate/uncommon/medium/head', 0), + (16791, 51501, 'accessories/wearable_items01/_exp00/plate/uncommon/medium/legs', 0), + (16792, 51502, 'accessories/wearable_items01/_exp00/plate/uncommon/medium/shoulders', 0), + (16793, 51503, 'accessories/wearable_items01/_exp00/profesion_hats/animal_hide/animal_hide_01/head', 0), + (16794, 51504, 'accessories/wearable_items01/_exp00/profesion_hats/assassin/assassin_01/head', 0), + (16795, 51505, 'accessories/wearable_items01/_exp00/profesion_hats/berserker/berserker_helm_01/head', 0), + (16796, 51506, 'accessories/wearable_items01/_exp00/profesion_hats/berserker/berserker_helm_02/head', 0), + (16797, 51507, 'accessories/wearable_items01/_exp00/profesion_hats/brigand_hat/head', 0), + (16798, 51508, 'accessories/wearable_items01/_exp00/profesion_hats/bruiser/bruiser_01/head', 0), + (16799, 51509, 'accessories/wearable_items01/_exp00/profesion_hats/coercer/coercer_01/head', 0), + (16800, 51510, 'accessories/wearable_items01/_exp00/profesion_hats/coercer/coercer_02/head', 0), + (16801, 51511, 'accessories/wearable_items01/_exp00/profesion_hats/conjuror/conjuror_01/head', 0), + (16802, 51512, 'accessories/wearable_items01/_exp00/profesion_hats/dirge/dirge_01/head', 0), + (16803, 51513, 'accessories/wearable_items01/_exp00/profesion_hats/evil_helm/evil_helm_01/head', 0), + (16804, 51514, 'accessories/wearable_items01/_exp00/profesion_hats/fury/fury_01/head', 0), + (16805, 51515, 'accessories/wearable_items01/_exp00/profesion_hats/guardian/guardian_01/head', 0), + (16806, 51516, 'accessories/wearable_items01/_exp00/profesion_hats/illusionist/illusionist_01/head', 0), + (16807, 51517, 'accessories/wearable_items01/_exp00/profesion_hats/inquisitor/inquisitor_01/head', 0), + (16808, 51518, 'accessories/wearable_items01/_exp00/profesion_hats/jester/jester_01/head', 0), + (16809, 51519, 'accessories/wearable_items01/_exp00/profesion_hats/necromancer/necromancer_01/head', 0), + (16810, 51520, 'accessories/wearable_items01/_exp00/profesion_hats/paladin/paladin_01/head', 0), + (16811, 51521, 'accessories/wearable_items01/_exp00/profesion_hats/ranger/ranger_01/head', 0), + (16812, 51522, 'accessories/wearable_items01/_exp00/profesion_hats/shadowknight/shadowknight_01/head', 0), + (16813, 51523, 'accessories/wearable_items01/_exp00/profesion_hats/swashbuckler/swashbuckler_01/head', 0), + (16814, 51524, 'accessories/wearable_items01/_exp00/profesion_hats/templar/templar_helm_01/head', 0), + (16815, 51525, 'accessories/wearable_items01/_exp00/profesion_hats/troubadour/troubadour_01/head', 0), + (16816, 51526, 'accessories/wearable_items01/_exp00/profesion_hats/warden/warden_01/head', 0), + (16817, 51527, 'accessories/wearable_items01/_exp00/profesion_hats/warlock/warlock_01/head', 0), + (16818, 51528, 'accessories/wearable_items01/_exp00/profesion_hats/wizard/wizard_01/head', 0), + (16819, 51529, 'accessories/wearable_items01/_exp00/starter_clothes/barbarian_female/arms', 0), + (16820, 51530, 'accessories/wearable_items01/_exp00/starter_clothes/barbarian_female/chest', 0), + (16821, 51531, 'accessories/wearable_items01/_exp00/starter_clothes/barbarian_female/legs', 0), + (16822, 51532, 'accessories/wearable_items01/_exp00/starter_clothes/barbarian_female/sleeves', 0), + (16823, 51533, 'accessories/wearable_items01/_exp00/starter_clothes/barbarian_male/arms', 0), + (16824, 51534, 'accessories/wearable_items01/_exp00/starter_clothes/barbarian_male/chest', 0), + (16825, 51535, 'accessories/wearable_items01/_exp00/starter_clothes/barbarian_male/legs', 0), + (16826, 51536, 'accessories/wearable_items01/_exp00/starter_clothes/barbarian_male/sleeves', 0), + (16827, 51537, 'accessories/wearable_items01/_exp00/starter_clothes/darkelf_female/arms', 0), + (16828, 51538, 'accessories/wearable_items01/_exp00/starter_clothes/darkelf_female/chest', 0), + (16829, 51539, 'accessories/wearable_items01/_exp00/starter_clothes/darkelf_female/legs', 0), + (16830, 51540, 'accessories/wearable_items01/_exp00/starter_clothes/darkelf_female/sleeves', 0), + (16831, 51541, 'accessories/wearable_items01/_exp00/starter_clothes/darkelf_male/arms', 0), + (16832, 51542, 'accessories/wearable_items01/_exp00/starter_clothes/darkelf_male/chest', 0), + (16833, 51543, 'accessories/wearable_items01/_exp00/starter_clothes/darkelf_male/legs', 0), + (16834, 51544, 'accessories/wearable_items01/_exp00/starter_clothes/darkelf_male/sleeves', 0), + (16835, 51545, 'accessories/wearable_items01/_exp00/starter_clothes/dwarf_female/arms', 0), + (16836, 51546, 'accessories/wearable_items01/_exp00/starter_clothes/dwarf_female/chest', 0), + (16837, 51547, 'accessories/wearable_items01/_exp00/starter_clothes/dwarf_female/legs', 0), + (16838, 51548, 'accessories/wearable_items01/_exp00/starter_clothes/dwarf_female/sleeves', 0), + (16839, 51549, 'accessories/wearable_items01/_exp00/starter_clothes/dwarf_male/arms', 0), + (16840, 51550, 'accessories/wearable_items01/_exp00/starter_clothes/dwarf_male/chest', 0), + (16841, 51551, 'accessories/wearable_items01/_exp00/starter_clothes/dwarf_male/legs', 0), + (16842, 51552, 'accessories/wearable_items01/_exp00/starter_clothes/dwarf_male/sleeves', 0), + (16843, 51553, 'accessories/wearable_items01/_exp00/starter_clothes/erudite_female/arms', 0), + (16844, 51554, 'accessories/wearable_items01/_exp00/starter_clothes/erudite_female/chest', 0), + (16845, 51555, 'accessories/wearable_items01/_exp00/starter_clothes/erudite_female/legs', 0), + (16846, 51556, 'accessories/wearable_items01/_exp00/starter_clothes/erudite_female/sleeves', 0), + (16847, 51557, 'accessories/wearable_items01/_exp00/starter_clothes/erudite_male/arms', 0), + (16848, 51558, 'accessories/wearable_items01/_exp00/starter_clothes/erudite_male/chest', 0), + (16849, 51559, 'accessories/wearable_items01/_exp00/starter_clothes/erudite_male/legs', 0), + (16850, 51560, 'accessories/wearable_items01/_exp00/starter_clothes/erudite_male/sleeves', 0), + (16851, 51561, 'accessories/wearable_items01/_exp00/starter_clothes/fae_dark_female/arms', 0), + (16852, 51562, 'accessories/wearable_items01/_exp00/starter_clothes/fae_dark_female/chest', 0), + (16853, 51563, 'accessories/wearable_items01/_exp00/starter_clothes/fae_dark_female/legs', 0), + (16854, 51564, 'accessories/wearable_items01/_exp00/starter_clothes/fae_dark_female/sleeves', 0), + (16855, 51565, 'accessories/wearable_items01/_exp00/starter_clothes/fae_dark_male/arms', 0), + (16856, 51566, 'accessories/wearable_items01/_exp00/starter_clothes/fae_dark_male/chest', 0), + (16857, 51567, 'accessories/wearable_items01/_exp00/starter_clothes/fae_dark_male/legs', 0), + (16858, 51568, 'accessories/wearable_items01/_exp00/starter_clothes/fae_dark_male/sleeves', 0), + (16859, 51569, 'accessories/wearable_items01/_exp00/starter_clothes/fae_female/arms', 0), + (16860, 51570, 'accessories/wearable_items01/_exp00/starter_clothes/fae_female/chest', 0), + (16861, 51571, 'accessories/wearable_items01/_exp00/starter_clothes/fae_female/legs', 0), + (16862, 51572, 'accessories/wearable_items01/_exp00/starter_clothes/fae_female/sleeves', 0), + (16863, 51573, 'accessories/wearable_items01/_exp00/starter_clothes/fae_light_female/arms', 0), + (16864, 51574, 'accessories/wearable_items01/_exp00/starter_clothes/fae_light_female/chest', 0), + (16865, 51575, 'accessories/wearable_items01/_exp00/starter_clothes/fae_light_female/legs', 0), + (16866, 51576, 'accessories/wearable_items01/_exp00/starter_clothes/fae_light_female/sleeves', 0), + (16867, 51577, 'accessories/wearable_items01/_exp00/starter_clothes/fae_light_male/arms', 0), + (16868, 51578, 'accessories/wearable_items01/_exp00/starter_clothes/fae_light_male/chest', 0), + (16869, 51579, 'accessories/wearable_items01/_exp00/starter_clothes/fae_light_male/legs', 0), + (16870, 51580, 'accessories/wearable_items01/_exp00/starter_clothes/fae_light_male/sleeves', 0), + (16871, 51581, 'accessories/wearable_items01/_exp00/starter_clothes/fae_male/arms', 0), + (16872, 51582, 'accessories/wearable_items01/_exp00/starter_clothes/fae_male/chest', 0), + (16873, 51583, 'accessories/wearable_items01/_exp00/starter_clothes/fae_male/legs', 0), + (16874, 51584, 'accessories/wearable_items01/_exp00/starter_clothes/fae_male/sleeves', 0), + (16875, 51585, 'accessories/wearable_items01/_exp00/starter_clothes/froglok_female/arms', 0), + (16876, 51586, 'accessories/wearable_items01/_exp00/starter_clothes/froglok_female/chest', 0), + (16877, 51587, 'accessories/wearable_items01/_exp00/starter_clothes/froglok_female/legs', 0), + (16878, 51588, 'accessories/wearable_items01/_exp00/starter_clothes/froglok_female/sleeves', 0), + (16879, 51589, 'accessories/wearable_items01/_exp00/starter_clothes/froglok_male/arms', 0), + (16880, 51590, 'accessories/wearable_items01/_exp00/starter_clothes/froglok_male/chest', 0), + (16881, 51591, 'accessories/wearable_items01/_exp00/starter_clothes/froglok_male/legs', 0), + (16882, 51592, 'accessories/wearable_items01/_exp00/starter_clothes/froglok_male/sleeves', 0), + (16883, 51593, 'accessories/wearable_items01/_exp00/starter_clothes/gnome_female/arms', 0), + (16884, 51594, 'accessories/wearable_items01/_exp00/starter_clothes/gnome_female/chest', 0), + (16885, 51595, 'accessories/wearable_items01/_exp00/starter_clothes/gnome_female/legs', 0), + (16886, 51596, 'accessories/wearable_items01/_exp00/starter_clothes/gnome_female/sleeves', 0), + (16887, 51597, 'accessories/wearable_items01/_exp00/starter_clothes/gnome_male/arms', 0), + (16888, 51598, 'accessories/wearable_items01/_exp00/starter_clothes/gnome_male/chest', 0), + (16889, 51599, 'accessories/wearable_items01/_exp00/starter_clothes/gnome_male/legs', 0), + (16890, 51600, 'accessories/wearable_items01/_exp00/starter_clothes/gnome_male/sleeves', 0), + (16891, 51601, 'accessories/wearable_items01/_exp00/starter_clothes/halfelf_female/arms', 0), + (16892, 51602, 'accessories/wearable_items01/_exp00/starter_clothes/halfelf_female/chest', 0), + (16893, 51603, 'accessories/wearable_items01/_exp00/starter_clothes/halfelf_female/legs', 0), + (16894, 51604, 'accessories/wearable_items01/_exp00/starter_clothes/halfelf_female/sleeves', 0), + (16895, 51605, 'accessories/wearable_items01/_exp00/starter_clothes/halfelf_male/arms', 0), + (16896, 51606, 'accessories/wearable_items01/_exp00/starter_clothes/halfelf_male/chest', 0), + (16897, 51607, 'accessories/wearable_items01/_exp00/starter_clothes/halfelf_male/legs', 0), + (16898, 51608, 'accessories/wearable_items01/_exp00/starter_clothes/halfelf_male/sleeves', 0), + (16899, 51609, 'accessories/wearable_items01/_exp00/starter_clothes/halfling_female/arms', 0), + (16900, 51610, 'accessories/wearable_items01/_exp00/starter_clothes/halfling_female/chest', 0), + (16901, 51611, 'accessories/wearable_items01/_exp00/starter_clothes/halfling_female/legs', 0), + (16902, 51612, 'accessories/wearable_items01/_exp00/starter_clothes/halfling_female/sleeves', 0), + (16903, 51613, 'accessories/wearable_items01/_exp00/starter_clothes/halfling_male/arms', 0), + (16904, 51614, 'accessories/wearable_items01/_exp00/starter_clothes/halfling_male/chest', 0), + (16905, 51615, 'accessories/wearable_items01/_exp00/starter_clothes/halfling_male/legs', 0), + (16906, 51616, 'accessories/wearable_items01/_exp00/starter_clothes/halfling_male/sleeves', 0), + (16907, 51617, 'accessories/wearable_items01/_exp00/starter_clothes/highelf_female/arms', 0), + (16908, 51618, 'accessories/wearable_items01/_exp00/starter_clothes/highelf_female/chest', 0), + (16909, 51619, 'accessories/wearable_items01/_exp00/starter_clothes/highelf_female/legs', 0), + (16910, 51620, 'accessories/wearable_items01/_exp00/starter_clothes/highelf_female/sleeves', 0), + (16911, 51621, 'accessories/wearable_items01/_exp00/starter_clothes/highelf_male/arms', 0), + (16912, 51622, 'accessories/wearable_items01/_exp00/starter_clothes/highelf_male/chest', 0), + (16913, 51623, 'accessories/wearable_items01/_exp00/starter_clothes/highelf_male/legs', 0), + (16914, 51624, 'accessories/wearable_items01/_exp00/starter_clothes/highelf_male/sleeves', 0), + (16915, 51625, 'accessories/wearable_items01/_exp00/starter_clothes/human_female/arms', 0), + (16916, 51626, 'accessories/wearable_items01/_exp00/starter_clothes/human_female/chest', 0), + (16917, 51627, 'accessories/wearable_items01/_exp00/starter_clothes/human_female/legs', 0), + (16918, 51628, 'accessories/wearable_items01/_exp00/starter_clothes/human_female/sleeves', 0), + (16919, 51629, 'accessories/wearable_items01/_exp00/starter_clothes/human_male/arms', 0), + (16920, 51630, 'accessories/wearable_items01/_exp00/starter_clothes/human_male/chest', 0), + (16921, 51631, 'accessories/wearable_items01/_exp00/starter_clothes/human_male/legs', 0), + (16922, 51632, 'accessories/wearable_items01/_exp00/starter_clothes/human_male/sleeves', 0), + (16923, 51633, 'accessories/wearable_items01/_exp00/starter_clothes/iksar_female/arms', 0), + (16924, 51634, 'accessories/wearable_items01/_exp00/starter_clothes/iksar_female/chest', 0), + (16925, 51635, 'accessories/wearable_items01/_exp00/starter_clothes/iksar_female/legs', 0), + (16926, 51636, 'accessories/wearable_items01/_exp00/starter_clothes/iksar_female/sleeves', 0), + (16927, 51637, 'accessories/wearable_items01/_exp00/starter_clothes/iksar_male/arms', 0), + (16928, 51638, 'accessories/wearable_items01/_exp00/starter_clothes/iksar_male/chest', 0), + (16929, 51639, 'accessories/wearable_items01/_exp00/starter_clothes/iksar_male/legs', 0), + (16930, 51640, 'accessories/wearable_items01/_exp00/starter_clothes/iksar_male/sleeves', 0), + (16931, 51641, 'accessories/wearable_items01/_exp00/starter_clothes/kerra_female/arms', 0), + (16932, 51642, 'accessories/wearable_items01/_exp00/starter_clothes/kerra_female/chest', 0), + (16933, 51643, 'accessories/wearable_items01/_exp00/starter_clothes/kerra_female/legs', 0), + (16934, 51644, 'accessories/wearable_items01/_exp00/starter_clothes/kerra_female/sleeves', 0), + (16935, 51645, 'accessories/wearable_items01/_exp00/starter_clothes/kerra_male/arms', 0), + (16936, 51646, 'accessories/wearable_items01/_exp00/starter_clothes/kerra_male/chest', 0), + (16937, 51647, 'accessories/wearable_items01/_exp00/starter_clothes/kerra_male/legs', 0), + (16938, 51648, 'accessories/wearable_items01/_exp00/starter_clothes/kerra_male/sleeves', 0), + (16939, 51649, 'accessories/wearable_items01/_exp00/starter_clothes/ogre_female/arms', 0), + (16940, 51650, 'accessories/wearable_items01/_exp00/starter_clothes/ogre_female/chest', 0), + (16941, 51651, 'accessories/wearable_items01/_exp00/starter_clothes/ogre_female/legs', 0), + (16942, 51652, 'accessories/wearable_items01/_exp00/starter_clothes/ogre_female/sleeves', 0), + (16943, 51653, 'accessories/wearable_items01/_exp00/starter_clothes/ogre_male/arms', 0), + (16944, 51654, 'accessories/wearable_items01/_exp00/starter_clothes/ogre_male/chest', 0), + (16945, 51655, 'accessories/wearable_items01/_exp00/starter_clothes/ogre_male/legs', 0), + (16946, 51656, 'accessories/wearable_items01/_exp00/starter_clothes/ogre_male/sleeves', 0), + (16947, 51657, 'accessories/wearable_items01/_exp00/starter_clothes/ratonga_female/arms', 0), + (16948, 51658, 'accessories/wearable_items01/_exp00/starter_clothes/ratonga_female/chest', 0), + (16949, 51659, 'accessories/wearable_items01/_exp00/starter_clothes/ratonga_female/legs', 0), + (16950, 51660, 'accessories/wearable_items01/_exp00/starter_clothes/ratonga_female/sleeves', 0), + (16951, 51661, 'accessories/wearable_items01/_exp00/starter_clothes/ratonga_male/arms', 0), + (16952, 51662, 'accessories/wearable_items01/_exp00/starter_clothes/ratonga_male/chest', 0), + (16953, 51663, 'accessories/wearable_items01/_exp00/starter_clothes/ratonga_male/legs', 0), + (16954, 51664, 'accessories/wearable_items01/_exp00/starter_clothes/ratonga_male/sleeves', 0), + (16955, 51665, 'accessories/wearable_items01/_exp00/starter_clothes/troll_female/arms', 0), + (16956, 51666, 'accessories/wearable_items01/_exp00/starter_clothes/troll_female/chest', 0), + (16957, 51667, 'accessories/wearable_items01/_exp00/starter_clothes/troll_female/legs', 0), + (16958, 51668, 'accessories/wearable_items01/_exp00/starter_clothes/troll_female/sleeves', 0), + (16959, 51669, 'accessories/wearable_items01/_exp00/starter_clothes/troll_male/arms', 0), + (16960, 51670, 'accessories/wearable_items01/_exp00/starter_clothes/troll_male/chest', 0), + (16961, 51671, 'accessories/wearable_items01/_exp00/starter_clothes/troll_male/legs', 0), + (16962, 51672, 'accessories/wearable_items01/_exp00/starter_clothes/troll_male/sleeves', 0), + (16963, 51673, 'accessories/wearable_items01/_exp00/starter_clothes/woodelf_female/arms', 0), + (16964, 51674, 'accessories/wearable_items01/_exp00/starter_clothes/woodelf_female/chest', 0), + (16965, 51675, 'accessories/wearable_items01/_exp00/starter_clothes/woodelf_female/legs', 0), + (16966, 51676, 'accessories/wearable_items01/_exp00/starter_clothes/woodelf_female/sleeves', 0), + (16967, 51677, 'accessories/wearable_items01/_exp00/starter_clothes/woodelf_male/arms', 0), + (16968, 51678, 'accessories/wearable_items01/_exp00/starter_clothes/woodelf_male/chest', 0), + (16969, 51679, 'accessories/wearable_items01/_exp00/starter_clothes/woodelf_male/legs', 0), + (16970, 51680, 'accessories/wearable_items01/_exp00/starter_clothes/woodelf_male/sleeves', 0), + (16971, 51681, 'accessories/wearable_items01/_exp00/tradesman/clothing/brawler/brawler_wrapped/chest', 0), + (16972, 51682, 'accessories/wearable_items01/_exp00/tradesman/clothing/brawler/brawler_wrapped/feet', 0), + (16973, 51683, 'accessories/wearable_items01/_exp00/tradesman/clothing/brawler/brawler_wrapped/pants', 0), + (16974, 51684, 'accessories/wearable_items01/_exp00/tradesman/clothing/brawler/brawler_wrapped/shoulders', 0), + (16975, 51685, 'accessories/wearable_items01/_exp00/tradesman/clothing/brawler/med_studded/arms', 0), + (16976, 51686, 'accessories/wearable_items01/_exp00/tradesman/clothing/brawler/med_studded/chest', 0), + (16977, 51687, 'accessories/wearable_items01/_exp00/tradesman/clothing/brawler/med_studded/legs', 0), + (16978, 51688, 'accessories/wearable_items01/_exp00/tradesman/clothing/ornateshinygold/chest', 0), + (16979, 51689, 'accessories/wearable_items01/_exp00/tradesman/clothing/ornateshinygold/legs', 0), + (16980, 51690, 'accessories/wearable_items01/_exp00/tradesman/clothing/ornateshinygold/shoulders', 0), + (16981, 51691, 'accessories/wearable_items01/_exp00/tradesman/clothing/ornateshinygold/sleeves', 0), + (16982, 51692, 'accessories/wearable_items01/_exp00/tradesman/clothing/plain_brown_female/chest', 0), + (16983, 51693, 'accessories/wearable_items01/_exp00/tradesman/clothing/plain_brown_female/legs', 0), + (16984, 51694, 'accessories/wearable_items01/_exp00/tradesman/clothing/plain_green_vest/arms', 0), + (16985, 51695, 'accessories/wearable_items01/_exp00/tradesman/clothing/plain_green_vest/chest', 0), + (16986, 51696, 'accessories/wearable_items01/_exp00/tradesman/clothing/plain_green_vest/legs', 0), + (16987, 51697, 'accessories/wearable_items01/_exp00/tradesman/clothing/plain_green_vest/sleeves', 0), + (16988, 51698, 'accessories/wearable_items01/_exp00/tradesman/clothing/plainbluelacey/chest', 0), + (16989, 51699, 'accessories/wearable_items01/_exp00/tradesman/clothing/plainbluelacey/legs', 0), + (16990, 51700, 'accessories/wearable_items01/_exp00/tradesman/clothing/plainbluelacey/shoulders', 0), + (16991, 51701, 'accessories/wearable_items01/_exp00/tradesman/clothing/plainbluelacey/sleeves', 0), + (16992, 51702, 'accessories/wearable_items01/_exp00/tradesman/clothing/smith/common_good/chest', 0), + (16993, 51703, 'accessories/wearable_items01/_exp00/tradesman/clothing/smith/common_good/feet', 0), + (16994, 51704, 'accessories/wearable_items01/_exp00/tradesman/clothing/smith/common_good/hands', 0), + (16995, 51705, 'accessories/wearable_items01/_exp00/tradesman/clothing/smith/common_good/legs', 0), + (16996, 51706, 'accessories/wearable_items01/_exp00/tradesman/clothing/smith/common_good/skirt', 0), + (16997, 51707, 'accessories/wearable_items01/_exp00/tradesman/common/low/arms', 0), + (16998, 51708, 'accessories/wearable_items01/_exp00/tradesman/common/low/chest', 0), + (16999, 51709, 'accessories/wearable_items01/_exp00/tradesman/common/low/legs', 0), + (17000, 51710, 'accessories/wearable_items01/_exp00/tradesman/common/low/sleeves', 0), + (17001, 51711, 'accessories/wearable_items01/_exp00/tradesman/common/medium/arms', 0), + (17002, 51712, 'accessories/wearable_items01/_exp00/tradesman/common/medium/chest', 0), + (17003, 51713, 'accessories/wearable_items01/_exp00/tradesman/common/medium/legs', 0), + (17004, 51714, 'accessories/wearable_items01/_exp00/tradesman/common/medium/sleeves', 0), + (17005, 51715, 'accessories/wearable_items01/_exp00/vanguard/common/high/chest', 0), + (17006, 51716, 'accessories/wearable_items01/_exp00/vanguard/common/high/feet', 0), + (17007, 51717, 'accessories/wearable_items01/_exp00/vanguard/common/high/forearms', 0), + (17008, 51718, 'accessories/wearable_items01/_exp00/vanguard/common/high/hands', 0), + (17009, 51719, 'accessories/wearable_items01/_exp00/vanguard/common/high/head', 0), + (17010, 51720, 'accessories/wearable_items01/_exp00/vanguard/common/high/left', 0), + (17011, 51721, 'accessories/wearable_items01/_exp00/vanguard/common/high/legs', 0), + (17012, 51722, 'accessories/wearable_items01/_exp00/vanguard/common/high/legs_noskirt', 0), + (17013, 51723, 'accessories/wearable_items01/_exp00/vanguard/common/high/right', 0), + (17014, 51724, 'accessories/wearable_items01/_exp00/vanguard/common/high/shoulders', 0), + (17015, 51725, 'accessories/wearable_items01/_exp00/vanguard/common/high/shoulders_nopauldrons', 0), + (17016, 51726, 'accessories/wearable_items01/_exp00/vanguard/common/high/skirt', 0), + (17017, 51727, 'accessories/wearable_items01/_exp00/vanguard/common/high/upperchest', 0), + (17018, 51728, 'accessories/wearable_items01/_exp00/vanguard/common/low/chest', 0), + (17019, 51729, 'accessories/wearable_items01/_exp00/vanguard/common/low/feet', 0), + (17020, 51730, 'accessories/wearable_items01/_exp00/vanguard/common/low/forearms', 0), + (17021, 51731, 'accessories/wearable_items01/_exp00/vanguard/common/low/hands', 0), + (17022, 51732, 'accessories/wearable_items01/_exp00/vanguard/common/low/head', 0), + (17023, 51733, 'accessories/wearable_items01/_exp00/vanguard/common/low/left', 0), + (17024, 51734, 'accessories/wearable_items01/_exp00/vanguard/common/low/legs', 0), + (17025, 51735, 'accessories/wearable_items01/_exp00/vanguard/common/low/legs_noskirt', 0), + (17026, 51736, 'accessories/wearable_items01/_exp00/vanguard/common/low/right', 0), + (17027, 51737, 'accessories/wearable_items01/_exp00/vanguard/common/low/shoulders', 0), + (17028, 51738, 'accessories/wearable_items01/_exp00/vanguard/common/low/shoulders_nopauldrons', 0), + (17029, 51739, 'accessories/wearable_items01/_exp00/vanguard/common/low/skirt', 0), + (17030, 51740, 'accessories/wearable_items01/_exp00/vanguard/common/low/upperchest', 0), + (17031, 51741, 'accessories/wearable_items01/_exp00/vanguard/common/medium/chest', 0), + (17032, 51742, 'accessories/wearable_items01/_exp00/vanguard/common/medium/feet', 0), + (17033, 51743, 'accessories/wearable_items01/_exp00/vanguard/common/medium/forearms', 0), + (17034, 51744, 'accessories/wearable_items01/_exp00/vanguard/common/medium/hands', 0), + (17035, 51745, 'accessories/wearable_items01/_exp00/vanguard/common/medium/head', 0), + (17036, 51746, 'accessories/wearable_items01/_exp00/vanguard/common/medium/left', 0), + (17037, 51747, 'accessories/wearable_items01/_exp00/vanguard/common/medium/legs', 0), + (17038, 51748, 'accessories/wearable_items01/_exp00/vanguard/common/medium/legs_noskirt', 0), + (17039, 51749, 'accessories/wearable_items01/_exp00/vanguard/common/medium/right', 0), + (17040, 51750, 'accessories/wearable_items01/_exp00/vanguard/common/medium/shoulders', 0), + (17041, 51751, 'accessories/wearable_items01/_exp00/vanguard/common/medium/shoulders_nopauldrons', 0), + (17042, 51752, 'accessories/wearable_items01/_exp00/vanguard/common/medium/skirt', 0), + (17043, 51753, 'accessories/wearable_items01/_exp00/vanguard/common/medium/upperchest', 0), + (17044, 51754, 'accessories/wearable_items01/_exp00/vanguard/rare/low/chest', 0), + (17045, 51755, 'accessories/wearable_items01/_exp00/vanguard/rare/low/feet', 0), + (17046, 51756, 'accessories/wearable_items01/_exp00/vanguard/rare/low/forearms', 0), + (17047, 51757, 'accessories/wearable_items01/_exp00/vanguard/rare/low/hands', 0), + (17048, 51758, 'accessories/wearable_items01/_exp00/vanguard/rare/low/head', 0), + (17049, 51759, 'accessories/wearable_items01/_exp00/vanguard/rare/low/left', 0), + (17050, 51760, 'accessories/wearable_items01/_exp00/vanguard/rare/low/legs', 0), + (17051, 51761, 'accessories/wearable_items01/_exp00/vanguard/rare/low/legs_noskirt', 0), + (17052, 51762, 'accessories/wearable_items01/_exp00/vanguard/rare/low/right', 0), + (17053, 51763, 'accessories/wearable_items01/_exp00/vanguard/rare/low/shoulders', 0), + (17054, 51764, 'accessories/wearable_items01/_exp00/vanguard/rare/low/shoulders_nopauldrons', 0), + (17055, 51765, 'accessories/wearable_items01/_exp00/vanguard/rare/low/skirt', 0), + (17056, 51766, 'accessories/wearable_items01/_exp00/vanguard/rare/low/upperchest', 0), + (17057, 51767, 'accessories/wearable_items01/_exp00/vanguard/rare/medium/chest', 0), + (17058, 51768, 'accessories/wearable_items01/_exp00/vanguard/rare/medium/feet', 0), + (17059, 51769, 'accessories/wearable_items01/_exp00/vanguard/rare/medium/forearms', 0), + (17060, 51770, 'accessories/wearable_items01/_exp00/vanguard/rare/medium/hands', 0), + (17061, 51771, 'accessories/wearable_items01/_exp00/vanguard/rare/medium/head', 0), + (17062, 51772, 'accessories/wearable_items01/_exp00/vanguard/rare/medium/left', 0), + (17063, 51773, 'accessories/wearable_items01/_exp00/vanguard/rare/medium/legs', 0), + (17064, 51774, 'accessories/wearable_items01/_exp00/vanguard/rare/medium/legs_noskirt', 0), + (17065, 51775, 'accessories/wearable_items01/_exp00/vanguard/rare/medium/right', 0), + (17066, 51776, 'accessories/wearable_items01/_exp00/vanguard/rare/medium/shoulders', 0), + (17067, 51777, 'accessories/wearable_items01/_exp00/vanguard/rare/medium/shoulders_nopauldrons', 0), + (17068, 51778, 'accessories/wearable_items01/_exp00/vanguard/rare/medium/skirt', 0), + (17069, 51779, 'accessories/wearable_items01/_exp00/vanguard/rare/medium/upperchest', 0), + (17070, 51780, 'accessories/wearable_items01/_exp00/vanguard/uncommon/high/chest', 0), + (17071, 51781, 'accessories/wearable_items01/_exp00/vanguard/uncommon/high/feet', 0), + (17072, 51782, 'accessories/wearable_items01/_exp00/vanguard/uncommon/high/forearms', 0), + (17073, 51783, 'accessories/wearable_items01/_exp00/vanguard/uncommon/high/hands', 0), + (17074, 51784, 'accessories/wearable_items01/_exp00/vanguard/uncommon/high/head', 0), + (17075, 51785, 'accessories/wearable_items01/_exp00/vanguard/uncommon/high/left', 0), + (17076, 51786, 'accessories/wearable_items01/_exp00/vanguard/uncommon/high/legs', 0), + (17077, 51787, 'accessories/wearable_items01/_exp00/vanguard/uncommon/high/legs_noskirt', 0), + (17078, 51788, 'accessories/wearable_items01/_exp00/vanguard/uncommon/high/right', 0), + (17079, 51789, 'accessories/wearable_items01/_exp00/vanguard/uncommon/high/shoulders', 0), + (17080, 51790, 'accessories/wearable_items01/_exp00/vanguard/uncommon/high/shoulders_nopauldrons', 0), + (17081, 51791, 'accessories/wearable_items01/_exp00/vanguard/uncommon/high/skirt', 0), + (17082, 51792, 'accessories/wearable_items01/_exp00/vanguard/uncommon/high/upperchest', 0), + (17083, 51793, 'accessories/wearable_items01/_exp00/vanguard/uncommon/low/chest', 0), + (17084, 51794, 'accessories/wearable_items01/_exp00/vanguard/uncommon/low/feet', 0), + (17085, 51795, 'accessories/wearable_items01/_exp00/vanguard/uncommon/low/forearms', 0), + (17086, 51796, 'accessories/wearable_items01/_exp00/vanguard/uncommon/low/hands', 0), + (17087, 51797, 'accessories/wearable_items01/_exp00/vanguard/uncommon/low/head', 0), + (17088, 51798, 'accessories/wearable_items01/_exp00/vanguard/uncommon/low/left', 0), + (17089, 51799, 'accessories/wearable_items01/_exp00/vanguard/uncommon/low/legs', 0), + (17090, 51800, 'accessories/wearable_items01/_exp00/vanguard/uncommon/low/legs_noskirt', 0), + (17091, 51801, 'accessories/wearable_items01/_exp00/vanguard/uncommon/low/right', 0), + (17092, 51802, 'accessories/wearable_items01/_exp00/vanguard/uncommon/low/shoulders', 0), + (17093, 51803, 'accessories/wearable_items01/_exp00/vanguard/uncommon/low/shoulders_nopauldrons', 0), + (17094, 51804, 'accessories/wearable_items01/_exp00/vanguard/uncommon/low/skirt', 0), + (17095, 51805, 'accessories/wearable_items01/_exp00/vanguard/uncommon/low/upperchest', 0), + (17096, 51806, 'accessories/wearable_items01/_exp00/vanguard/uncommon/medium/chest', 0), + (17097, 51807, 'accessories/wearable_items01/_exp00/vanguard/uncommon/medium/feet', 0), + (17098, 51808, 'accessories/wearable_items01/_exp00/vanguard/uncommon/medium/forearms', 0), + (17099, 51809, 'accessories/wearable_items01/_exp00/vanguard/uncommon/medium/hands', 0), + (17100, 51810, 'accessories/wearable_items01/_exp00/vanguard/uncommon/medium/head', 0), + (17101, 51811, 'accessories/wearable_items01/_exp00/vanguard/uncommon/medium/left', 0), + (17102, 51812, 'accessories/wearable_items01/_exp00/vanguard/uncommon/medium/legs', 0), + (17103, 51813, 'accessories/wearable_items01/_exp00/vanguard/uncommon/medium/legs_noskirt', 0), + (17104, 51814, 'accessories/wearable_items01/_exp00/vanguard/uncommon/medium/right', 0), + (17105, 51815, 'accessories/wearable_items01/_exp00/vanguard/uncommon/medium/shoulders', 0), + (17106, 51816, 'accessories/wearable_items01/_exp00/vanguard/uncommon/medium/shoulders_nopauldrons', 0), + (17107, 51817, 'accessories/wearable_items01/_exp00/vanguard/uncommon/medium/skirt', 0), + (17108, 51818, 'accessories/wearable_items01/_exp00/vanguard/uncommon/medium/upperchest', 0), + (17109, 51819, 'accessories/wearable_items01/_exp00/vanguard/vanguard_tint01/chest', 0), + (17110, 51820, 'accessories/wearable_items01/_exp00/vanguard/vanguard_tint01/feet', 0), + (17111, 51821, 'accessories/wearable_items01/_exp00/vanguard/vanguard_tint01/forearms', 0), + (17112, 51822, 'accessories/wearable_items01/_exp00/vanguard/vanguard_tint01/hands', 0), + (17113, 51823, 'accessories/wearable_items01/_exp00/vanguard/vanguard_tint01/head', 0), + (17114, 51824, 'accessories/wearable_items01/_exp00/vanguard/vanguard_tint01/legs', 0), + (17115, 51825, 'accessories/wearable_items01/_exp00/vanguard/vanguard_tint01/right', 0), + (17116, 51826, 'accessories/wearable_items01/_exp00/vanguard/vanguard_tint01/shoulders', 0), + (17117, 51827, 'accessories/wearable_items01/_exp00/vanguard/vanguard_tint01/shoulders_nopauldrons', 0), + (17118, 51828, 'accessories/wearable_items01/_exp00/vanguard/vanguard_tint01/upperchest', 0), + (17119, 51829, 'accessories/wearable_items01/_exp00/white_robe/chest', 0), + (17120, 51830, 'accessories/wearable_items01/_exp00/white_robe/hood', 0), + (17121, 51831, 'accessories/wearable_items01/_exp00/white_robe/pants', 0), + (17122, 51832, 'accessories/wearable_items01/_exp00/white_robe/skirt', 0), + (17123, 51833, 'accessories/wearable_items01/_exp00/woven/common/high/chest', 0), + (17124, 51834, 'accessories/wearable_items01/_exp00/woven/common/high/feet', 0), + (17125, 51835, 'accessories/wearable_items01/_exp00/woven/common/high/forearms', 0), + (17126, 51836, 'accessories/wearable_items01/_exp00/woven/common/high/hands', 0), + (17127, 51837, 'accessories/wearable_items01/_exp00/woven/common/high/head', 0), + (17128, 51838, 'accessories/wearable_items01/_exp00/woven/common/high/legs', 0), + (17129, 51839, 'accessories/wearable_items01/_exp00/woven/common/high/legs_noskirt', 0), + (17130, 51840, 'accessories/wearable_items01/_exp00/woven/common/high/shoulders', 0), + (17131, 51841, 'accessories/wearable_items01/_exp00/woven/common/high/skirt', 0), + (17132, 51842, 'accessories/wearable_items01/_exp00/woven/common/low/chest', 0), + (17133, 51843, 'accessories/wearable_items01/_exp00/woven/common/low/feet', 0), + (17134, 51844, 'accessories/wearable_items01/_exp00/woven/common/low/forearms', 0), + (17135, 51845, 'accessories/wearable_items01/_exp00/woven/common/low/hands', 0), + (17136, 51846, 'accessories/wearable_items01/_exp00/woven/common/low/head', 0), + (17137, 51847, 'accessories/wearable_items01/_exp00/woven/common/low/legs', 0), + (17138, 51848, 'accessories/wearable_items01/_exp00/woven/common/low/legs_noskirt', 0), + (17139, 51849, 'accessories/wearable_items01/_exp00/woven/common/low/shoulders', 0), + (17140, 51850, 'accessories/wearable_items01/_exp00/woven/common/low/skirt', 0), + (17141, 51851, 'accessories/wearable_items01/_exp00/woven/common/medium/chest', 0), + (17142, 51852, 'accessories/wearable_items01/_exp00/woven/common/medium/feet', 0), + (17143, 51853, 'accessories/wearable_items01/_exp00/woven/common/medium/forearms', 0), + (17144, 51854, 'accessories/wearable_items01/_exp00/woven/common/medium/hands', 0), + (17145, 51855, 'accessories/wearable_items01/_exp00/woven/common/medium/head', 0), + (17146, 51856, 'accessories/wearable_items01/_exp00/woven/common/medium/legs', 0), + (17147, 51857, 'accessories/wearable_items01/_exp00/woven/common/medium/legs_noskirt', 0), + (17148, 51858, 'accessories/wearable_items01/_exp00/woven/common/medium/shoulders', 0), + (17149, 51859, 'accessories/wearable_items01/_exp00/woven/common/medium/skirt', 0), + (17150, 51860, 'accessories/wearable_items01/_exp00/woven/rare/low/chest', 0), + (17151, 51861, 'accessories/wearable_items01/_exp00/woven/rare/low/feet', 0), + (17152, 51862, 'accessories/wearable_items01/_exp00/woven/rare/low/forearms', 0), + (17153, 51863, 'accessories/wearable_items01/_exp00/woven/rare/low/hands', 0), + (17154, 51864, 'accessories/wearable_items01/_exp00/woven/rare/low/head', 0), + (17155, 51865, 'accessories/wearable_items01/_exp00/woven/rare/low/legs', 0), + (17156, 51866, 'accessories/wearable_items01/_exp00/woven/rare/low/legs_noskirt', 0), + (17157, 51867, 'accessories/wearable_items01/_exp00/woven/rare/low/shoulders', 0), + (17158, 51868, 'accessories/wearable_items01/_exp00/woven/rare/low/skirt', 0), + (17159, 51869, 'accessories/wearable_items01/_exp00/woven/uncommon/high/chest', 0), + (17160, 51870, 'accessories/wearable_items01/_exp00/woven/uncommon/high/feet', 0), + (17161, 51871, 'accessories/wearable_items01/_exp00/woven/uncommon/high/forearms', 0), + (17162, 51872, 'accessories/wearable_items01/_exp00/woven/uncommon/high/hands', 0), + (17163, 51873, 'accessories/wearable_items01/_exp00/woven/uncommon/high/head', 0), + (17164, 51874, 'accessories/wearable_items01/_exp00/woven/uncommon/high/legs', 0), + (17165, 51875, 'accessories/wearable_items01/_exp00/woven/uncommon/high/legs_noskirt', 0), + (17166, 51876, 'accessories/wearable_items01/_exp00/woven/uncommon/high/shoulders', 0), + (17167, 51877, 'accessories/wearable_items01/_exp00/woven/uncommon/high/skirt', 0), + (17168, 51878, 'accessories/wearable_items01/_exp00/woven/uncommon/low/chest', 0), + (17169, 51879, 'accessories/wearable_items01/_exp00/woven/uncommon/low/feet', 0), + (17170, 51880, 'accessories/wearable_items01/_exp00/woven/uncommon/low/forearms', 0), + (17171, 51881, 'accessories/wearable_items01/_exp00/woven/uncommon/low/hands', 0), + (17172, 51882, 'accessories/wearable_items01/_exp00/woven/uncommon/low/head', 0), + (17173, 51883, 'accessories/wearable_items01/_exp00/woven/uncommon/low/legs', 0), + (17174, 51884, 'accessories/wearable_items01/_exp00/woven/uncommon/low/legs_noskirt', 0), + (17175, 51885, 'accessories/wearable_items01/_exp00/woven/uncommon/low/shoulders', 0), + (17176, 51886, 'accessories/wearable_items01/_exp00/woven/uncommon/low/skirt', 0), + (17177, 51887, 'accessories/wearable_items01/_exp00/woven/uncommon/medium/chest', 0), + (17178, 51888, 'accessories/wearable_items01/_exp00/woven/uncommon/medium/feet', 0), + (17179, 51889, 'accessories/wearable_items01/_exp00/woven/uncommon/medium/forearms', 0), + (17180, 51890, 'accessories/wearable_items01/_exp00/woven/uncommon/medium/hands', 0), + (17181, 51891, 'accessories/wearable_items01/_exp00/woven/uncommon/medium/head', 0), + (17182, 51892, 'accessories/wearable_items01/_exp00/woven/uncommon/medium/legs', 0), + (17183, 51893, 'accessories/wearable_items01/_exp00/woven/uncommon/medium/legs_noskirt', 0), + (17184, 51894, 'accessories/wearable_items01/_exp00/woven/uncommon/medium/shoulders', 0), + (17185, 51895, 'accessories/wearable_items01/_exp00/woven/uncommon/medium/skirt', 0), + (17186, 51896, 'accessories/wearable_items01/_exp02/brigandine_heavy/chest', 0), + (17187, 51897, 'accessories/wearable_items01/_exp02/brigandine_heavy/feet', 0), + (17188, 51898, 'accessories/wearable_items01/_exp02/brigandine_heavy/forearms', 0), + (17189, 51899, 'accessories/wearable_items01/_exp02/brigandine_heavy/hands', 0), + (17190, 51900, 'accessories/wearable_items01/_exp02/brigandine_heavy/head', 0), + (17191, 51901, 'accessories/wearable_items01/_exp02/brigandine_heavy/legs', 0), + (17192, 51902, 'accessories/wearable_items01/_exp02/brigandine_heavy/shoulders', 0), + (17193, 51903, 'accessories/wearable_items01/_exp02/chain_heroic/chest', 0), + (17194, 51904, 'accessories/wearable_items01/_exp02/chain_heroic/feet', 0), + (17195, 51905, 'accessories/wearable_items01/_exp02/chain_heroic/forearms', 0), + (17196, 51906, 'accessories/wearable_items01/_exp02/chain_heroic/hands', 0), + (17197, 51907, 'accessories/wearable_items01/_exp02/chain_heroic/head', 0), + (17198, 51908, 'accessories/wearable_items01/_exp02/chain_heroic/legs', 0), + (17199, 51909, 'accessories/wearable_items01/_exp02/chain_heroic/legs_noskirt', 0), + (17200, 51910, 'accessories/wearable_items01/_exp02/chain_heroic/shoulders', 0), + (17201, 51911, 'accessories/wearable_items01/_exp02/chain_heroic/skirt', 0), + (17202, 51912, 'accessories/wearable_items01/_exp02/heavy_cloth_heroic/chest', 0), + (17203, 51913, 'accessories/wearable_items01/_exp02/heavy_cloth_heroic/feet', 0), + (17204, 51914, 'accessories/wearable_items01/_exp02/heavy_cloth_heroic/forearms', 0), + (17205, 51915, 'accessories/wearable_items01/_exp02/heavy_cloth_heroic/hands', 0), + (17206, 51916, 'accessories/wearable_items01/_exp02/heavy_cloth_heroic/legs', 0), + (17207, 51917, 'accessories/wearable_items01/_exp02/heavy_cloth_heroic/shoulders', 0), + (17208, 51918, 'accessories/wearable_items01/_exp02/leather_heavy/chest', 0), + (17209, 51919, 'accessories/wearable_items01/_exp02/leather_heavy/feet', 0), + (17210, 51920, 'accessories/wearable_items01/_exp02/leather_heavy/forearms', 0), + (17211, 51921, 'accessories/wearable_items01/_exp02/leather_heavy/hands', 0), + (17212, 51922, 'accessories/wearable_items01/_exp02/leather_heavy/head', 0), + (17213, 51923, 'accessories/wearable_items01/_exp02/leather_heavy/legs', 0), + (17214, 51924, 'accessories/wearable_items01/_exp02/leather_heavy/legs_noskirt', 0), + (17215, 51925, 'accessories/wearable_items01/_exp02/leather_heavy/shoulders', 0), + (17216, 51926, 'accessories/wearable_items01/_exp02/leather_heavy/skirt', 0), + (17217, 51927, 'accessories/wearable_items01/_exp02/plate_heroic/chest', 0), + (17218, 51928, 'accessories/wearable_items01/_exp02/plate_heroic/feet', 0), + (17219, 51929, 'accessories/wearable_items01/_exp02/plate_heroic/forearms', 0), + (17220, 51930, 'accessories/wearable_items01/_exp02/plate_heroic/hands', 0), + (17221, 51931, 'accessories/wearable_items01/_exp02/plate_heroic/head', 0), + (17222, 51932, 'accessories/wearable_items01/_exp02/plate_heroic/legs', 0), + (17223, 51933, 'accessories/wearable_items01/_exp02/plate_heroic/shoulders', 0), + (17224, 51934, 'accessories/wearable_items01/_exp02/robe_fire/chest', 0), + (17225, 51935, 'accessories/wearable_items01/_exp02/robe_fire/hood', 0), + (17226, 51936, 'accessories/wearable_items01/_exp02/robe_fire/pants', 0), + (17227, 51937, 'accessories/wearable_items01/_exp02/robe_fire/skirt', 0), + (17228, 51938, 'accessories/wearable_items01/_exp02/vanguard_chitin/chest', 0), + (17229, 51939, 'accessories/wearable_items01/_exp02/vanguard_chitin/exp02_chest_parasite', 0), + (17230, 51940, 'accessories/wearable_items01/_exp02/vanguard_chitin/feet', 0), + (17231, 51941, 'accessories/wearable_items01/_exp02/vanguard_chitin/forearms', 0), + (17232, 51942, 'accessories/wearable_items01/_exp02/vanguard_chitin/hands', 0), + (17233, 51943, 'accessories/wearable_items01/_exp02/vanguard_chitin/head', 0), + (17234, 51944, 'accessories/wearable_items01/_exp02/vanguard_chitin/legs', 0), + (17235, 51945, 'accessories/wearable_items01/_exp02/vanguard_chitin/legs_noskirt', 0), + (17236, 51946, 'accessories/wearable_items01/_exp02/vanguard_chitin/right', 0), + (17237, 51947, 'accessories/wearable_items01/_exp02/vanguard_chitin/shoulders', 0), + (17238, 51948, 'accessories/wearable_items01/_exp02/vanguard_chitin/shoulders_nopauldrons', 0), + (17239, 51949, 'accessories/wearable_items01/_exp02/vanguard_chitin/skirt', 0), + (17240, 51950, 'accessories/wearable_items01/_exp02/woven_monk/chest', 0), + (17241, 51951, 'accessories/wearable_items01/_exp02/woven_monk/feet', 0), + (17242, 51952, 'accessories/wearable_items01/_exp02/woven_monk/forearms', 0), + (17243, 51953, 'accessories/wearable_items01/_exp02/woven_monk/hands', 0), + (17244, 51954, 'accessories/wearable_items01/_exp02/woven_monk/head', 0), + (17245, 51955, 'accessories/wearable_items01/_exp02/woven_monk/legs', 0), + (17246, 51956, 'accessories/wearable_items01/_exp02/woven_monk/legs_noskirt', 0), + (17247, 51957, 'accessories/wearable_items01/_exp02/woven_monk/shoulders', 0), + (17248, 51958, 'accessories/wearable_items01/_exp02/woven_monk/skirt', 0), + (17249, 51959, 'accessories/wearable_items01/_exp03/chain_heroic_pristine/chest', 0), + (17250, 51960, 'accessories/wearable_items01/_exp03/chain_heroic_pristine/feet', 0), + (17251, 51961, 'accessories/wearable_items01/_exp03/chain_heroic_pristine/forearms', 0), + (17252, 51962, 'accessories/wearable_items01/_exp03/chain_heroic_pristine/hands', 0), + (17253, 51963, 'accessories/wearable_items01/_exp03/chain_heroic_pristine/head', 0), + (17254, 51964, 'accessories/wearable_items01/_exp03/chain_heroic_pristine/legs', 0), + (17255, 51965, 'accessories/wearable_items01/_exp03/chain_heroic_pristine/legs_noskirt', 0), + (17256, 51966, 'accessories/wearable_items01/_exp03/chain_heroic_pristine/shoulders', 0), + (17257, 51967, 'accessories/wearable_items01/_exp03/chain_heroic_pristine/skirt', 0), + (17258, 51968, 'accessories/wearable_items01/_exp03/faydark_chain_01/chest', 0), + (17259, 51969, 'accessories/wearable_items01/_exp03/faydark_chain_01/feet', 0), + (17260, 51970, 'accessories/wearable_items01/_exp03/faydark_chain_01/forearms', 0), + (17261, 51971, 'accessories/wearable_items01/_exp03/faydark_chain_01/hands', 0), + (17262, 51972, 'accessories/wearable_items01/_exp03/faydark_chain_01/head', 0), + (17263, 51973, 'accessories/wearable_items01/_exp03/faydark_chain_01/legs', 0), + (17264, 51974, 'accessories/wearable_items01/_exp03/faydark_chain_01/legs_noskirt', 0), + (17265, 51975, 'accessories/wearable_items01/_exp03/faydark_chain_01/shoulders', 0), + (17266, 51976, 'accessories/wearable_items01/_exp03/faydark_chain_01/skirt', 0), + (17267, 51977, 'accessories/wearable_items01/_exp03/faydark_leather_01/chest', 0), + (17268, 51978, 'accessories/wearable_items01/_exp03/faydark_leather_01/feet', 0), + (17269, 51979, 'accessories/wearable_items01/_exp03/faydark_leather_01/forearms', 0), + (17270, 51980, 'accessories/wearable_items01/_exp03/faydark_leather_01/hands', 0), + (17271, 51981, 'accessories/wearable_items01/_exp03/faydark_leather_01/head', 0), + (17272, 51982, 'accessories/wearable_items01/_exp03/faydark_leather_01/legs', 0), + (17273, 51983, 'accessories/wearable_items01/_exp03/faydark_leather_01/legs_noskirt', 0), + (17274, 51984, 'accessories/wearable_items01/_exp03/faydark_leather_01/shoulders', 0), + (17275, 51985, 'accessories/wearable_items01/_exp03/faydark_leather_01/skirt', 0), + (17276, 51986, 'accessories/wearable_items01/_exp03/faydark_plate_01/chest', 0), + (17277, 51987, 'accessories/wearable_items01/_exp03/faydark_plate_01/feet', 0), + (17278, 51988, 'accessories/wearable_items01/_exp03/faydark_plate_01/forearms', 0), + (17279, 51989, 'accessories/wearable_items01/_exp03/faydark_plate_01/hands', 0), + (17280, 51990, 'accessories/wearable_items01/_exp03/faydark_plate_01/head', 0), + (17281, 51991, 'accessories/wearable_items01/_exp03/faydark_plate_01/legs', 0), + (17282, 51992, 'accessories/wearable_items01/_exp03/faydark_plate_01/shoulders', 0), + (17283, 51993, 'accessories/wearable_items01/_exp03/faydark_robe_01/chest', 0), + (17284, 51994, 'accessories/wearable_items01/_exp03/faydark_robe_01/hood', 0), + (17285, 51995, 'accessories/wearable_items01/_exp03/faydark_robe_01/pants', 0), + (17286, 51996, 'accessories/wearable_items01/_exp03/faydark_robe_01/skirt', 0), + (17287, 51997, 'accessories/wearable_items01/_exp03/kaladim_bruiser_gi_01/chest', 0), + (17288, 51998, 'accessories/wearable_items01/_exp03/kaladim_bruiser_gi_01/pants', 0), + (17289, 51999, 'accessories/wearable_items01/_exp03/kaladim_bruiser_gi_01/shoulders', 0), + (17290, 52000, 'accessories/wearable_items01/_exp03/kaladim_chain_01/chest', 0), + (17291, 52001, 'accessories/wearable_items01/_exp03/kaladim_chain_01/feet', 0), + (17292, 52002, 'accessories/wearable_items01/_exp03/kaladim_chain_01/forearms', 0), + (17293, 52003, 'accessories/wearable_items01/_exp03/kaladim_chain_01/hands', 0), + (17294, 52004, 'accessories/wearable_items01/_exp03/kaladim_chain_01/head', 0), + (17295, 52005, 'accessories/wearable_items01/_exp03/kaladim_chain_01/legs', 0), + (17296, 52006, 'accessories/wearable_items01/_exp03/kaladim_chain_01/legs_noskirt', 0), + (17297, 52007, 'accessories/wearable_items01/_exp03/kaladim_chain_01/shoulders', 0), + (17298, 52008, 'accessories/wearable_items01/_exp03/kaladim_chain_01/skirt', 0), + (17299, 52009, 'accessories/wearable_items01/_exp03/kaladim_vanguard_01/chest', 0), + (17300, 52010, 'accessories/wearable_items01/_exp03/kaladim_vanguard_01/feet', 0), + (17301, 52011, 'accessories/wearable_items01/_exp03/kaladim_vanguard_01/forearms', 0), + (17302, 52012, 'accessories/wearable_items01/_exp03/kaladim_vanguard_01/hands', 0), + (17303, 52013, 'accessories/wearable_items01/_exp03/kaladim_vanguard_01/head', 0), + (17304, 52014, 'accessories/wearable_items01/_exp03/kaladim_vanguard_01/legs', 0), + (17305, 52015, 'accessories/wearable_items01/_exp03/kaladim_vanguard_01/legs_noskirt', 0), + (17306, 52016, 'accessories/wearable_items01/_exp03/kaladim_vanguard_01/right', 0), + (17307, 52017, 'accessories/wearable_items01/_exp03/kaladim_vanguard_01/shoulders', 0), + (17308, 52018, 'accessories/wearable_items01/_exp03/kaladim_vanguard_01/shoulders_nopauldrons', 0), + (17309, 52019, 'accessories/wearable_items01/_exp03/kaladim_vanguard_01/skirt', 0), + (17310, 52020, 'accessories/wearable_items01/_exp03/mistmoore_brigandine_01/chest', 0), + (17311, 52021, 'accessories/wearable_items01/_exp03/mistmoore_brigandine_01/feet', 0), + (17312, 52022, 'accessories/wearable_items01/_exp03/mistmoore_brigandine_01/forearms', 0), + (17313, 52023, 'accessories/wearable_items01/_exp03/mistmoore_brigandine_01/hands', 0), + (17314, 52024, 'accessories/wearable_items01/_exp03/mistmoore_brigandine_01/head', 0), + (17315, 52025, 'accessories/wearable_items01/_exp03/mistmoore_brigandine_01/legs', 0), + (17316, 52026, 'accessories/wearable_items01/_exp03/mistmoore_brigandine_01/shoulders', 0), + (17317, 52027, 'accessories/wearable_items01/_exp03/mistmoore_chain_01/chest', 0), + (17318, 52028, 'accessories/wearable_items01/_exp03/mistmoore_chain_01/feet', 0), + (17319, 52029, 'accessories/wearable_items01/_exp03/mistmoore_chain_01/forearms', 0), + (17320, 52030, 'accessories/wearable_items01/_exp03/mistmoore_chain_01/hands', 0), + (17321, 52031, 'accessories/wearable_items01/_exp03/mistmoore_chain_01/head', 0), + (17322, 52032, 'accessories/wearable_items01/_exp03/mistmoore_chain_01/legs', 0), + (17323, 52033, 'accessories/wearable_items01/_exp03/mistmoore_chain_01/legs_noskirt', 0), + (17324, 52034, 'accessories/wearable_items01/_exp03/mistmoore_chain_01/shoulders', 0), + (17325, 52035, 'accessories/wearable_items01/_exp03/mistmoore_chain_01/skirt', 0), + (17326, 52036, 'accessories/wearable_items01/_exp03/mistmoore_heavy_cloth_01/chest', 0), + (17327, 52037, 'accessories/wearable_items01/_exp03/mistmoore_heavy_cloth_01/feet', 0), + (17328, 52038, 'accessories/wearable_items01/_exp03/mistmoore_heavy_cloth_01/forearms', 0), + (17329, 52039, 'accessories/wearable_items01/_exp03/mistmoore_heavy_cloth_01/hands', 0), + (17330, 52040, 'accessories/wearable_items01/_exp03/mistmoore_heavy_cloth_01/legs', 0), + (17331, 52041, 'accessories/wearable_items01/_exp03/mistmoore_heavy_cloth_01/legs_noskirt', 0), + (17332, 52042, 'accessories/wearable_items01/_exp03/mistmoore_heavy_cloth_01/shoulders', 0), + (17333, 52043, 'accessories/wearable_items01/_exp03/mistmoore_heavy_cloth_01/skirt', 0), + (17334, 52044, 'accessories/wearable_items01/_exp03/mistmoore_leather_01/chest', 0), + (17335, 52045, 'accessories/wearable_items01/_exp03/mistmoore_leather_01/feet', 0), + (17336, 52046, 'accessories/wearable_items01/_exp03/mistmoore_leather_01/forearms', 0), + (17337, 52047, 'accessories/wearable_items01/_exp03/mistmoore_leather_01/hands', 0), + (17338, 52048, 'accessories/wearable_items01/_exp03/mistmoore_leather_01/head', 0), + (17339, 52049, 'accessories/wearable_items01/_exp03/mistmoore_leather_01/legs', 0), + (17340, 52050, 'accessories/wearable_items01/_exp03/mistmoore_leather_01/legs_noskirt', 0), + (17341, 52051, 'accessories/wearable_items01/_exp03/mistmoore_leather_01/shoulders', 0), + (17342, 52052, 'accessories/wearable_items01/_exp03/mistmoore_leather_01/skirt', 0), + (17343, 52053, 'accessories/wearable_items01/_exp03/mistmoore_plate_01/chest', 0), + (17344, 52054, 'accessories/wearable_items01/_exp03/mistmoore_plate_01/feet', 0), + (17345, 52055, 'accessories/wearable_items01/_exp03/mistmoore_plate_01/forearms', 0), + (17346, 52056, 'accessories/wearable_items01/_exp03/mistmoore_plate_01/hands', 0), + (17347, 52057, 'accessories/wearable_items01/_exp03/mistmoore_plate_01/head', 0), + (17348, 52058, 'accessories/wearable_items01/_exp03/mistmoore_plate_01/legs', 0), + (17349, 52059, 'accessories/wearable_items01/_exp03/mistmoore_plate_01/shoulders', 0), + (17350, 52060, 'accessories/wearable_items01/_exp03/mistmoore_robe_01/chest', 0), + (17351, 52061, 'accessories/wearable_items01/_exp03/mistmoore_robe_01/hood', 0), + (17352, 52062, 'accessories/wearable_items01/_exp03/mistmoore_robe_01/pants', 0), + (17353, 52063, 'accessories/wearable_items01/_exp03/mistmoore_robe_01/skirt', 0), + (17354, 52064, 'accessories/wearable_items01/_exp03/mistmoore_vanguard_01/chest', 0), + (17355, 52065, 'accessories/wearable_items01/_exp03/mistmoore_vanguard_01/feet', 0), + (17356, 52066, 'accessories/wearable_items01/_exp03/mistmoore_vanguard_01/forearms', 0), + (17357, 52067, 'accessories/wearable_items01/_exp03/mistmoore_vanguard_01/hands', 0), + (17358, 52068, 'accessories/wearable_items01/_exp03/mistmoore_vanguard_01/head', 0), + (17359, 52069, 'accessories/wearable_items01/_exp03/mistmoore_vanguard_01/legs', 0), + (17360, 52070, 'accessories/wearable_items01/_exp03/mistmoore_vanguard_01/legs_noskirt', 0), + (17361, 52071, 'accessories/wearable_items01/_exp03/mistmoore_vanguard_01/right', 0), + (17362, 52072, 'accessories/wearable_items01/_exp03/mistmoore_vanguard_01/shoulders', 0), + (17363, 52073, 'accessories/wearable_items01/_exp03/mistmoore_vanguard_01/shoulders_nopauldrons', 0), + (17364, 52074, 'accessories/wearable_items01/_exp03/mistmoore_vanguard_01/skirt', 0), + (17365, 52075, 'accessories/wearable_items01/_exp03/mistmoore_woven_01/chest', 0), + (17366, 52076, 'accessories/wearable_items01/_exp03/mistmoore_woven_01/feet', 0), + (17367, 52077, 'accessories/wearable_items01/_exp03/mistmoore_woven_01/forearms', 0), + (17368, 52078, 'accessories/wearable_items01/_exp03/mistmoore_woven_01/hands', 0), + (17369, 52079, 'accessories/wearable_items01/_exp03/mistmoore_woven_01/head', 0), + (17370, 52080, 'accessories/wearable_items01/_exp03/mistmoore_woven_01/legs', 0), + (17371, 52081, 'accessories/wearable_items01/_exp03/mistmoore_woven_01/legs_noskirt', 0), + (17372, 52082, 'accessories/wearable_items01/_exp03/mistmoore_woven_01/shoulders', 0), + (17373, 52083, 'accessories/wearable_items01/_exp03/mistmoore_woven_01/skirt', 0), + (17374, 52084, 'accessories/wearable_items01/_exp03/newbee_cloth_01/chest', 0), + (17375, 52085, 'accessories/wearable_items01/_exp03/newbee_cloth_01/feet', 0), + (17376, 52086, 'accessories/wearable_items01/_exp03/newbee_cloth_01/forearms', 0), + (17377, 52087, 'accessories/wearable_items01/_exp03/newbee_cloth_01/hands', 0), + (17378, 52088, 'accessories/wearable_items01/_exp03/newbee_cloth_01/head', 0), + (17379, 52089, 'accessories/wearable_items01/_exp03/newbee_cloth_01/legs', 0), + (17380, 52090, 'accessories/wearable_items01/_exp03/newbee_cloth_01/legs_noskirt', 0), + (17381, 52091, 'accessories/wearable_items01/_exp03/newbee_cloth_01/shoulders', 0), + (17382, 52092, 'accessories/wearable_items01/_exp03/newbee_cloth_01/skirt', 0), + (17383, 52093, 'accessories/wearable_items01/_exp03/npc_only/cloak_innoruuk_sq_01', 0), + (17384, 52094, 'accessories/wearable_items01/_exp03/npc_only/cloak_mayong_sq_01', 0), + (17385, 52095, 'staticobjects/signs/general/dpo_sfm_sign_floor', 0), + (17386, 52096, 'staticobjects/liveevent/exp06/dpo_tapestry_design_quellios', 0), + (17387, 52097, '_exp06/zones/objects/exp06_prelude_events/dpo_teleportspires_ghosted_ulteran', 0), + (17388, 52098, '_exp06/zones/objects/exp06_prelude_events/dpo_teleportspires01_phase01_everfrost', 0), + (17389, 52099, '_exp06/zones/objects/exp06_prelude_events/dpo_teleportspires01_phase02_everfrost', 0), + (17390, 52100, '_exp06/zones/objects/exp06_prelude_events/dpo_teleportspires01_phase03_everfrost', 0), + (17391, 52101, '_exp06/zones/objects/exp06_prelude_events/dpo_teleportspires01_phase04_everfrost', 0), + (17392, 52102, '_exp06/zones/objects/exp06_prelude_events/dpo_teleportspires01_phase05_everfrost', 0), + (17393, 52103, '_exp06/zones/objects/exp06_prelude_events/dpo_teleportspires01_phase06_everfrost_final', 0), + (17394, 52104, '_exp06/zones/objects/exp06_prelude_events/dpo_fprt_vase_smallgold01_floor', 0), + (17395, 52105, '_exp06/zones/objects/exp06_prelude_events/dpo_gold_vase01_floor', 0), + (17396, 52106, '_exp06/zones/objects/exp06_prelude_events/dpo_sos_aviak_papasan01_floor', 0), + (17397, 52107, '_exp06/zones/objects/exp06_prelude_events/dpo_ss_vase_porcelain_small01_floor', 0), + (17398, 52108, '_exp06/zones/objects/exp06_rgn_odus_south/qst_scalp', 1045), + (17399, 52109, 'staticobjects/_exp07/exp07_rgn_eastern_wastes/vel_orc_camp_bear_trap_closed', 1096), + (17400, 52110, 'staticobjects/_exp07/exp07_rgn_eastern_wastes/vel_orc_camp_bear_trap_open', 1096), + (17401, 52111, 'staticobjects/_exp07/exp07_rgn_eastern_wastes/vel_tizmak_items01_broken_drum01', 1096), + (17402, 52112, 'staticobjects/_exp07/exp07_rgn_great_divide/vel_othmir_cooking_hang_pot_no_fire_01', 1096), + (17403, 52113, 'staticobjects/_exp07/exp07_rgn_great_divide/vel_othmir_nipiks_memorial_01', 1096), + (17404, 52114, 'staticobjects/_exp07/exp07_rgn_great_divide/vel_othmir_prexus_shrine_01', 1096), + (17405, 52115, 'staticobjects/_exp07/exp07_rgn_great_divide/vel_rock_ice_medium01', 1096), + (17406, 52116, 'staticobjects/_exp07/exp07_rgn_eastern_wastes/vel_rock_wakin_medium01', 1096), + (17407, 52117, 'staticobjects/_exp07/exp07_rgn_eastern_wastes/vel_rock_wakin_small01', 1096), + (17408, 52118, 'staticobjects/_exp07/exp07_rgn_eastern_wastes/vel_rock_wakin_small02', 1096), + (17409, 52119, 'staticobjects/battlegrounds/kd_base_gate01', 1096), + (17410, 52120, 'staticobjects/battlegrounds/thur_entrance_gate01', 1096), + (17411, 52121, 'staticobjects/battlegrounds/kd_base_gate01_coll', 1096), + (17412, 52122, 'staticobjects/battlegrounds/thur_entrance_gate01_coll', 1096), + (17413, 52123, 'staticobjects/battlegrounds/bg_def_kael_idol01_mainbase', 1144), + (17414, 52124, 'staticobjects/battlegrounds/bg_def_kael_idol01_tower01', 1144), + (17415, 52125, 'staticobjects/battlegrounds/bg_def_kael_idol01_tower02', 1144), + (17416, 52126, 'staticobjects/battlegrounds/bg_def_thur_idol01_mainbase', 1144), + (17417, 52127, 'staticobjects/battlegrounds/bg_def_thur_idol01_tower01', 1144), + (17418, 52128, 'staticobjects/battlegrounds/bg_def_thur_idol01_tower02', 1144), + (17419, 16217, 'creatures/monsters/hawk_optimized', 1190), + (17420, 16218, 'accessories/wearable_items/cloak/exp08/cloak_beastlord', 1190), + (17421, 16219, 'accessories/wearable_items/_exp08/truespirit/chest', 1190), + (17422, 16220, 'accessories/wearable_items/_exp08/truespirit/feet', 1190), + (17423, 16221, 'accessories/wearable_items/_exp08/truespirit/hands', 1190), + (17424, 16222, 'accessories/wearable_items/_exp08/truespirit/head_collar', 1190), + (17425, 16223, 'accessories/wearable_items/_exp08/truespirit/head_hood', 1190), + (17426, 16224, 'accessories/wearable_items/_exp08/truespirit/pants', 1190), + (17427, 16225, 'accessories/wearable_items/_exp08/truespirit/skirt', 1190), + (17428, 16226, 'accessories/wearable_items/_exp08/truespirit2/chest', 1190), + (17429, 16227, 'accessories/wearable_items/_exp08/truespirit2/feet', 1190), + (17430, 16228, 'accessories/wearable_items/_exp08/truespirit2/hands', 1190), + (17431, 16229, 'accessories/wearable_items/_exp08/truespirit2/head_collar', 1190), + (17432, 16230, 'accessories/wearable_items/_exp08/truespirit2/head_hood', 1190), + (17433, 16231, 'accessories/wearable_items/_exp08/truespirit2/pants', 1190), + (17434, 16232, 'accessories/wearable_items/_exp08/truespirit2/skirt', 1190), + (17435, 16233, 'accessories/wearable_items/profesion_hats/firiona_vie_tiara_lon/head_tiara_evil', 1190), + (17436, 16234, 'accessories/wearable_items/_exp08/lon_card_outfit/chest', 1190), + (17437, 16235, 'accessories/wearable_items/_exp08/lon_card_outfit/hands', 1190), + (17438, 16236, 'accessories/wearable_items/_exp08/lon_card_outfit/legs', 1190), + (17439, 16237, 'creatures/mounts/lynx_mount/lynx_mount_white_tintable_saddle', 1190), + (17440, 16238, 'accessories/wearable_items/_exp08/freeport_guard/chain/skirt', 1190), + (17441, 16239, 'accessories/wearable_items/_exp08/freeport_guard/chain/chest', 1190), + (17442, 16240, 'accessories/wearable_items/_exp08/freeport_guard/chain/cowl', 1190), + (17443, 16241, 'accessories/wearable_items/_exp08/freeport_guard/chain/feet', 1190), + (17444, 16242, 'accessories/wearable_items/_exp08/freeport_guard/chain/forearms', 1190), + (17445, 16243, 'accessories/wearable_items/_exp08/freeport_guard/chain/freeport_head_snapon', 1190), + (17446, 16244, 'accessories/wearable_items/_exp08/freeport_guard/chain/hands', 1190), + (17447, 16245, 'accessories/wearable_items/_exp08/freeport_guard/chain/head', 1190), + (17448, 16246, 'accessories/wearable_items/_exp08/freeport_guard/chain/legs', 1190), + (17449, 16247, 'accessories/wearable_items/_exp08/freeport_guard/chain/legs_noskirt', 1190), + (17450, 16248, 'accessories/wearable_items/_exp08/freeport_guard/chain/shoulders', 1190), + (17451, 16249, 'accessories/wearable_items/_exp08/freeport_guard/chain/shoulders_snapon_epic', 1190), + (17452, 16250, 'accessories/wearable_items/_exp08/freeport_guard/leather/skirt', 1190), + (17453, 16251, 'accessories/wearable_items/_exp08/freeport_guard/leather/chest', 1190), + (17454, 16252, 'accessories/wearable_items/_exp08/freeport_guard/leather/cowl', 1190), + (17455, 16253, 'accessories/wearable_items/_exp08/freeport_guard/leather/feet', 1190), + (17456, 16254, 'accessories/wearable_items/_exp08/freeport_guard/leather/forearms', 1190), + (17457, 16255, 'accessories/wearable_items/_exp08/freeport_guard/leather/freeport_head_snapon', 1190), + (17458, 16256, 'accessories/wearable_items/_exp08/freeport_guard/leather/hands', 1190), + (17459, 16257, 'accessories/wearable_items/_exp08/freeport_guard/leather/head', 1190), + (17460, 16258, 'accessories/wearable_items/_exp08/freeport_guard/leather/legs', 1190), + (17461, 16259, 'accessories/wearable_items/_exp08/freeport_guard/leather/legs_noskirt', 1190), + (17462, 16260, 'accessories/wearable_items/_exp08/freeport_guard/leather/shoulders', 1190), + (17463, 16261, 'accessories/wearable_items/_exp08/freeport_guard/leather/shoulders_snapon_epic', 1190), + (17464, 16262, 'accessories/wearable_items/_exp08/freeport_guard/robe/chest', 1190), + (17465, 16263, 'accessories/wearable_items/_exp08/freeport_guard/robe/cowl', 1190), + (17466, 16264, 'accessories/wearable_items/_exp08/freeport_guard/robe/feet', 1190), + (17467, 16265, 'accessories/wearable_items/_exp08/freeport_guard/robe/hands', 1190), + (17468, 16266, 'accessories/wearable_items/_exp08/freeport_guard/robe/head', 1190), + (17469, 16267, 'accessories/wearable_items/_exp08/freeport_guard/robe/pants', 1190), + (17470, 16268, 'accessories/wearable_items/_exp08/freeport_guard/robe/skirt', 1190), + (17471, 16269, 'accessories/wearable_items/_exp08/freeport_guard/snapons/chain_pauldrons_upper_left', 1190), + (17472, 16270, 'accessories/wearable_items/_exp08/freeport_guard/snapons/chain_pauldrons_upper_right', 1190), + (17473, 16271, 'accessories/wearable_items/_exp08/freeport_guard/snapons/leather_pauldrons_upper_left', 1190), + (17474, 16272, 'accessories/wearable_items/_exp08/freeport_guard/snapons/leather_pauldrons_upper_right', 1190), + (17475, 16273, 'accessories/wearable_items/_exp08/freeport_guard/snapons/vanguard_pauldrons_upper_left', 1190), + (17476, 16274, 'accessories/wearable_items/_exp08/freeport_guard/snapons/vanguard_pauldrons_upper_right', 1190), + (17477, 16275, 'accessories/wearable_items/_exp08/freeport_guard/vanguard/chest', 1190), + (17478, 16276, 'accessories/wearable_items/_exp08/freeport_guard/vanguard/cowl', 1190), + (17479, 16277, 'accessories/wearable_items/_exp08/freeport_guard/vanguard/feet', 1190), + (17480, 16278, 'accessories/wearable_items/_exp08/freeport_guard/vanguard/forearms', 1190), + (17481, 16279, 'accessories/wearable_items/_exp08/freeport_guard/vanguard/freeport_head_snapon', 1190), + (17482, 16280, 'accessories/wearable_items/_exp08/freeport_guard/vanguard/hands', 1190), + (17483, 16281, 'accessories/wearable_items/_exp08/freeport_guard/vanguard/head', 1190), + (17484, 16282, 'accessories/wearable_items/_exp08/freeport_guard/vanguard/legs', 1190), + (17485, 16283, 'accessories/wearable_items/_exp08/freeport_guard/vanguard/legs_noskirt', 1190), + (17486, 16284, 'accessories/wearable_items/_exp08/freeport_guard/vanguard/right', 1190), + (17487, 16285, 'accessories/wearable_items/_exp08/freeport_guard/vanguard/shoulders', 1190), + (17488, 16286, 'accessories/wearable_items/_exp08/freeport_guard/vanguard/shoulders_nopauldrons', 1190), + (17489, 16287, 'accessories/wearable_items/_exp08/freeport_guard/vanguard/shoulders_pauldron_epic', 1190), + (17490, 16288, 'accessories/wearable_items/_exp08/freeport_guard/vanguard/skirt', 1190), + (17491, 16289, 'accessories/wieldable_items/weapons/exp08/talisman/book_bookmarked_glow', 1190), + (17492, 16290, 'accessories/wieldable_items/weapons/exp08/talisman/book_bookmarked_glow2', 1190), + (17493, 16291, 'accessories/wieldable_items/weapons/exp08/talisman/exp08_symbol_crystalline', 1190), + (17494, 16292, 'accessories/wieldable_items/weapons/exp08/talisman/exp08_symbol_sphere', 1190), + (17495, 16293, 'accessories/wieldable_items/weapons/exp08/talisman/exp08_symbol_spiked', 1190), + (17496, 16294, 'creatures/mounts/player_wing/player_wing_nightmare', 1190), + (17497, 16295, 'ec/pc/fae_wings/fae_nightmare', 1190), + (17498, 16296, '_exp04/monsters/chokidai_old', 1190), + (17499, 16297, '_exp04/monsters/chokidai_red', 1190), + (17500, 16298, 'accessories/wearable_items/_exp08/chainmail_gi/chest', 1190), + (17501, 16299, 'accessories/wearable_items/_exp08/chainmail_gi/feet', 1190), + (17502, 16300, 'accessories/wearable_items/_exp08/chainmail_gi/head', 1190), + (17503, 16301, 'accessories/wearable_items/_exp08/chainmail_gi/legs', 1190), + (17504, 16302, 'accessories/wearable_items/_exp08/chainmail_gi/shoulders', 1190), + (17505, 16303, 'accessories/wearable_items/_exp08/chainmail_gi/snap_ons/belt', 1190), + (17506, 16304, 'accessories/wearable_items/_exp08/chainmail_gi/snap_ons/chain_link_01', 1190), + (17507, 16305, 'accessories/wearable_items/_exp08/chainmail_gi/snap_ons/chain_link_02', 1190), + (17508, 16306, 'accessories/wieldable_items/weapons/exp08/1h_sword/exp08_sword_freeportknight', 1190), + (17509, 16307, 'creatures/mounts/squirrel_mount/squirrel_mount_skunk', 1190), + (17510, 16308, 'accessories/wearable_items/cloak/exp08/cloak_fur', 1190), + (17511, 16309, 'accessories/wearable_items/cloak/exp08/snap_ons/cloak_fur_attachment', 1190), + (17512, 16310, 'accessories/wieldable_items/weapons/exp08/1h_crush/hammer_soulscorned', 1190), + (17513, 16311, 'accessories/wieldable_items/weapons/exp08/1h_sword/exp08_axe_soulscorned', 1190), + (17514, 16312, 'accessories/wieldable_items/weapons/exp08/1h_sword/exp08_sword_soulscorned', 1190), + (17515, 16313, 'accessories/wieldable_items/weapons/exp08/2h_sword/exp07_2hs_sword_soulscorned', 1190), + (17516, 16314, 'accessories/wieldable_items/weapons/exp08/fist/exp08_fist_soulscorned', 1190), + (17517, 16315, 'accessories/wieldable_items/weapons/exp08/staff/exp08_staff_soulscorned', 1190), + (17518, 16316, 'accessories/wearable_items/cloak/exp08/cloak_bookshelf', 1190), + (17519, 16317, 'creatures/mounts/unicorn/unicorn_armored', 1190), + (17520, 16318, 'creatures/mounts/unicorn/unicorn_armored_mist', 1190), + (17521, 16319, 'accessories/wearable_items/cloak/exp08/cloak_freeport_vanguard', 1190), + (17522, 16320, 'accessories/wearable_items/cloak/exp08/cloak_freeport_chain', 1190), + (17523, 16321, 'accessories/wearable_items/cloak/exp08/cloak_freeport_chain_cowl_snapon', 1190), + (17524, 16322, 'accessories/wearable_items/cloak/exp08/cloak_freeport_guard_cowl_snapon', 1190), + (17525, 16323, 'accessories/wearable_items/cloak/exp08/cloak_freeport_leather', 1190), + (17526, 16324, 'accessories/wearable_items/cloak/exp08/cloak_freeport_leather_cowl_snapon', 1190), + (17527, 16325, 'accessories/wearable_items/cloak/exp08/cloak_freeport_robe', 1190), + (17528, 16326, 'accessories/wearable_items/cloak/exp08/cloak_freeport_robe_cowl_snapon', 1190), + (17529, 16327, 'accessories/wieldable_items/weapons/exp08/1h_crush/flail_lucanic_dark', 1190), + (17530, 16328, 'accessories/wieldable_items/weapons/exp08/1h_crush/mace_lucanic_dark', 1190), + (17531, 16329, 'accessories/wieldable_items/weapons/exp08/1h_pierce/exp08_dagger_lucanic_split', 1190), + (17532, 16330, 'accessories/wieldable_items/weapons/exp08/1h_sword/exp08_axe_lucanic_dark', 1190), + (17533, 16331, 'accessories/wieldable_items/weapons/exp08/1h_sword/exp08_kama_lucanic_batwing', 1190), + (17534, 16332, 'accessories/wieldable_items/weapons/exp08/1h_sword/exp08_sword_lucanic_long', 1190), + (17535, 16333, 'accessories/wieldable_items/weapons/exp08/1h_sword/exp08_sword_lucanic_scimitar', 1190), + (17536, 16334, 'accessories/wieldable_items/weapons/exp08/1h_sword/exp08_sword_lucanic_short', 1190), + (17537, 16335, 'accessories/wieldable_items/weapons/exp08/2h_sword/exp08_2h_sword_lucanic_dark', 1190), + (17538, 16336, 'accessories/wieldable_items/weapons/exp08/staff/exp08_poleaxe_lucanic_hollow', 1190), + (17539, 16337, '_exp08/characters/tool_users/freeport_knight/freeport_knight_mounted', 1190), + (17540, 16338, 'creatures/mounts/horse_heavy/horse_nightmare_fire_freeport', 1190), + (17541, 16339, 'creatures/mounts/pegasus_mount/pegasus_mount_nightmare_freeport', 1190), + (17542, 16340, 'accessories/wieldable_items/shields/exp08/exp08_shield_freeportknight', 1190), + (17543, 16341, 'accessories/wieldable_items/shields/exp08/exp08_shield_freeportknight_npc', 1190), + (17544, 16342, 'accessories/wearable_items/_exp08/flame_gi/chest', 1190), + (17545, 16343, 'accessories/wearable_items/_exp08/flame_gi/hands', 1190), + (17546, 16344, 'accessories/wearable_items/_exp08/flame_gi/legs', 1190), + (17547, 16345, 'accessories/wearable_items/_exp08/flame_gi/shoulders', 1190), + (17548, 16346, 'accessories/wearable_items/_exp08/flame_gi/snap_ons/armband_flame_gi_left', 1190), + (17549, 16347, 'accessories/wearable_items/_exp08/flame_gi/snap_ons/armband_flame_gi_right', 1190), + (17550, 16348, 'accessories/wearable_items/_exp08/flame_gi/snap_ons/gem_disc', 1190), + (17551, 16349, 'accessories/wearable_items/profesion_hats/beastlord2/head_beastlord', 1190), + (17552, 16350, 'accessories/wearable_items/profesion_hats/beastlord2/swivel_feather1', 1190), + (17553, 16351, 'accessories/wearable_items/profesion_hats/beastlord2/swivel_feather2', 1190), + (17554, 16352, 'creatures/mounts/pegasus_mount/pegasus_mount_winter', 1190), + (17555, 16353, 'accessories/wieldable_items/weapons/exp08/1h_wand/wand_lucanic_serpent', 1190), + (17556, 16354, 'accessories/wieldable_items/weapons/exp08/1h_pierce/exp08_dagger_burningblack', 1190), + (17557, 16355, 'accessories/wieldable_items/weapons/exp08/fist/katar_burningsilver', 1190), + (17558, 16356, 'accessories/wieldable_items/weapons/exp08/staff/exp08_staff_lightningrod', 1190), + (17559, 16357, '_exp02/characters/tool_users/draconian_elite', 1190), + (17560, 16358, 'accessories/wieldable_items/weapons/exp08/1h_crush/flail_lucanic_dark_fx', 1190), + (17561, 16359, 'accessories/wieldable_items/weapons/exp08/1h_crush/mace_lucanic_dark_fx', 1190), + (17562, 16360, 'accessories/wieldable_items/weapons/exp08/1h_pierce/exp08_dagger_lucanic_split_fx', 1190), + (17563, 16361, 'accessories/wieldable_items/weapons/exp08/1h_sword/exp08_sword_lucanic_short_fx', 1190), + (17564, 16362, 'accessories/wieldable_items/weapons/exp08/1h_sword/exp08_axe_lucanic_dark_fx', 1190), + (17565, 16363, 'accessories/wieldable_items/weapons/exp08/1h_sword/exp08_kama_lucanic_batwing_fx', 1190), + (17566, 16364, 'accessories/wieldable_items/weapons/exp08/1h_sword/exp08_sword_lucanic_long_fx', 1190), + (17567, 16365, 'accessories/wieldable_items/weapons/exp08/1h_sword/exp08_sword_lucanic_scimitar_fx', 1190), + (17568, 16366, 'accessories/wieldable_items/weapons/exp08/1h_wand/wand_lucanic_serpent_fx', 1190), + (17569, 16367, 'accessories/wieldable_items/weapons/exp08/2h_sword/exp08_2h_sword_lucanic_dark_fx', 1190), + (17570, 16368, 'accessories/wieldable_items/weapons/exp08/staff/exp08_poleaxe_lucanic_hollow_fx', 1190), + (17571, 16369, 'accessories/wearable_items/_exp08/redglow_sets/leather/chest', 1190), + (17572, 16370, 'accessories/wearable_items/_exp08/redglow_sets/leather/feet', 1190), + (17573, 16371, 'accessories/wearable_items/_exp08/redglow_sets/leather/forearms', 1190), + (17574, 16372, 'accessories/wearable_items/_exp08/redglow_sets/leather/hands', 1190), + (17575, 16373, 'accessories/wearable_items/_exp08/redglow_sets/leather/head', 1190), + (17576, 16374, 'accessories/wearable_items/_exp08/redglow_sets/leather/legs', 1190), + (17577, 16375, 'accessories/wearable_items/_exp08/redglow_sets/leather/legs_noskirt', 1190), + (17578, 16376, 'accessories/wearable_items/_exp08/redglow_sets/leather/shoulders', 1190), + (17579, 16377, 'accessories/wearable_items/_exp08/redglow_sets/leather/skirt', 1190), + (17580, 16378, 'accessories/wearable_items/_exp08/redglow_sets/robe/chest', 1190), + (17581, 16379, 'accessories/wearable_items/_exp08/redglow_sets/robe/feet', 1190), + (17582, 16380, 'accessories/wearable_items/_exp08/redglow_sets/robe/hands', 1190), + (17583, 16381, 'accessories/wearable_items/_exp08/redglow_sets/robe/head', 1190), + (17584, 16382, 'accessories/wearable_items/_exp08/redglow_sets/robe/head_collar', 1190), + (17585, 16383, 'accessories/wearable_items/_exp08/redglow_sets/robe/pants', 1190), + (17586, 16384, 'accessories/wearable_items/_exp08/redglow_sets/robe/skirt', 1190), + (17587, 16385, '_exp08/characters/monsters/warboar/warboar_beastlord', 1190), + (17588, 16386, 'creatures/mounts/warhog_mount/warhog_beastlord_mount', 1190), + (17589, 16387, 'accessories/wearable_items/_exp08/redglow_sets/leather/pauldron_left', 1190), + (17590, 16388, 'accessories/wearable_items/_exp08/redglow_sets/leather/pauldron_right', 1190), + (17591, 16389, 'accessories/wearable_items/_exp08/redglow_sets/leather/shoulders_pauldrons', 1190), + (17592, 16390, 'accessories/wearable_items/_exp08/redglow_sets/robe/chest_pauldrons', 1190), + (17593, 16391, 'staticobjects/_exp08/dyod/crushbone/dyod_cbk_banner_emperorcrush', 1190), + (17594, 16392, '_exp08/characters/tool_users/freeport_knight/freeport_knight_joust', 1190), + (17595, 16393, 'creatures/mounts/horse_heavy/horse_heavy_joust', 1190), + (17596, 16394, 'accessories/wieldable_items/weapons/great_spear/great_spear/great_spear_joust', 1190), + (17597, 16395, 'staticobjects/freeport_combined/fpalt_vase_ornateface01_dpo', 1190), + (17598, 16396, 'staticobjects/freeport_combined/fpalt_bank_coinpile001_dpo', 1190), + (17599, 16397, 'staticobjects/freeport_combined/fpalt_bank_coinpile002_dpo', 1190), + (17600, 16398, 'staticobjects/freeport_combined/fpalt_bank_scales01_dpo', 1190), + (17601, 16399, 'staticobjects/freeport_combined/fpalt_bankvaultplain001_dpo', 1190), + (17602, 16400, 'staticobjects/freeport_combined/fpalt_banner_gorowyn_stand01_dpo', 1190), + (17603, 16401, 'staticobjects/freeport_combined/fpalt_banner_lucan_hoods01_dpo', 1190), + (17604, 16402, 'staticobjects/freeport_combined/fpalt_banner_military_stable01_dpo', 1190), + (17605, 16403, 'staticobjects/freeport_combined/fpalt_banner_neriak_stand01_dpo', 1190), + (17606, 16404, 'staticobjects/freeport_combined/fpalt_barrel_ornatelarge001_dpo', 1190), + (17607, 16405, 'staticobjects/freeport_combined/fpalt_barrel_ornatesmall001_dpo', 1190), + (17608, 16406, 'staticobjects/freeport_combined/fpalt_bed_doubleornate01_dpo', 1190), + (17609, 16407, 'staticobjects/freeport_combined/fpalt_bed_singleornate01_dpo', 1190), + (17610, 16408, 'staticobjects/freeport_combined/fpalt_bench_militaryshort01_dpo', 1190), + (17611, 16409, 'staticobjects/freeport_combined/fpalt_bench_ornateshort01_dpo', 1190), + (17612, 16410, 'staticobjects/freeport_combined/fpalt_bookcase_smallornate01_dpo', 1190), + (17613, 16411, 'staticobjects/freeport_combined/fpalt_bookcase_smallornate02_dpo', 1190), + (17614, 16412, 'staticobjects/freeport_combined/fpalt_bookcase_smallornate03_dpo', 1190), + (17615, 16413, 'staticobjects/freeport_combined/fpalt_bucket_ornatelarge01_dpo', 1190), + (17616, 16414, 'staticobjects/freeport_combined/fpalt_chair_military01_dpo', 1190), + (17617, 16415, 'staticobjects/freeport_combined/fpalt_chair_ornate01_dpo', 1190), + (17618, 16416, 'staticobjects/freeport_combined/fpalt_chair_stool_military01_dpo', 1190), + (17619, 16417, 'staticobjects/freeport_combined/fpalt_chair_stool_ornate01_dpo', 1190), + (17620, 16418, 'staticobjects/freeport_combined/fpalt_chest_large_ornate01_dpo', 1190), + (17621, 16419, 'staticobjects/freeport_combined/fpalt_chest_small_ornate01_dpo', 1190), + (17622, 16420, 'staticobjects/freeport_combined/fpalt_counter_roundornatelong01_dpo', 1190), + (17623, 16421, 'staticobjects/freeport_combined/fpalt_lighting_floorbraziermilitary01_dpo', 1190), + (17624, 16422, 'staticobjects/freeport_combined/fpalt_lighting_tablecandleplain01_dpo', 1190), + (17625, 16423, 'staticobjects/freeport_combined/fpalt_rugs01_dpo', 1190), + (17626, 16424, 'staticobjects/freeport_combined/fpalt_rugs02_dpo', 1190), + (17627, 16425, 'staticobjects/freeport_combined/fpalt_rugs03_dpo', 1190), + (17628, 16426, 'staticobjects/freeport_combined/fpalt_stable_troughlong01_dpo', 1190), + (17629, 16427, 'staticobjects/freeport_combined/fpalt_stables_haybail01_dpo', 1190), + (17630, 16428, 'staticobjects/freeport_combined/fpalt_table_militarysmall01_dpo', 1190), + (17631, 16429, 'staticobjects/freeport_combined/fpalt_table_ornatesmall01_dpo', 1190), + (17632, 16430, 'staticobjects/freeport_combined/fpalt_training_dummy01_dpo', 1190), + (17633, 16431, 'staticobjects/freeport_combined/fpalt_urn_plain_large01_dpo', 1190), + (17634, 16432, 'accessories/wieldable_items/weapons/exp08/1h_sword/exp08_sword_gem_bronze_short', 1190), + (17635, 16433, 'accessories/wearable_items/_exp08/redglow_sets/vanguard/chest', 1190), + (17636, 16434, 'accessories/wearable_items/_exp08/redglow_sets/vanguard/feet', 1190), + (17637, 16435, 'accessories/wearable_items/_exp08/redglow_sets/vanguard/forearms', 1190), + (17638, 16436, 'accessories/wearable_items/_exp08/redglow_sets/vanguard/hands', 1190), + (17639, 16437, 'accessories/wearable_items/_exp08/redglow_sets/vanguard/head', 1190), + (17640, 16438, 'accessories/wearable_items/_exp08/redglow_sets/vanguard/legs', 1190), + (17641, 16439, 'accessories/wearable_items/_exp08/redglow_sets/vanguard/legs_noskirt', 1190), + (17642, 16440, 'accessories/wearable_items/_exp08/redglow_sets/vanguard/redglow_pauldron_left', 1190), + (17643, 16441, 'accessories/wearable_items/_exp08/redglow_sets/vanguard/redglow_pauldron_right', 1190), + (17644, 16442, 'accessories/wearable_items/_exp08/redglow_sets/vanguard/right', 1190), + (17645, 16443, 'accessories/wearable_items/_exp08/redglow_sets/vanguard/shoulders', 1190), + (17646, 16444, 'accessories/wearable_items/_exp08/redglow_sets/vanguard/shoulders_epic_pauldrons', 1190), + (17647, 16445, 'accessories/wearable_items/_exp08/redglow_sets/vanguard/shoulders_nopauldrons', 1190), + (17648, 16446, 'accessories/wearable_items/_exp08/redglow_sets/vanguard/skirt', 1190), + (17649, 16447, 'accessories/wearable_items/cloak/exp08/cloak_beastlord_epic', 1190), + (17650, 16448, 'staticobjects/_exp06/odno_kejak_ladder', 1190), + (17651, 16449, '_exp08/characters/monsters/dragon_lumpy/dragon_lumpy_purple', 1190), + (17652, 16450, '_exp08/characters/monsters/dragon_lumpy/dragon_lumpy_purple_glowing', 1190), + (17653, 16451, '_exp08/characters/monsters/dragon_lumpy/dragon_lumpy_red', 1190), + (17654, 16452, '_exp08/characters/monsters/dragon_lumpy/dragon_lumpy_red_glowing', 1190), + (17655, 16453, 'accessories/wearable_items/_exp08/redglow_sets/chain/chest', 1190), + (17656, 16454, 'accessories/wearable_items/_exp08/redglow_sets/chain/feet', 1190), + (17657, 16455, 'accessories/wearable_items/_exp08/redglow_sets/chain/forearms', 1190), + (17658, 16456, 'accessories/wearable_items/_exp08/redglow_sets/chain/hands', 1190), + (17659, 16457, 'accessories/wearable_items/_exp08/redglow_sets/chain/head', 1190), + (17660, 16458, 'accessories/wearable_items/_exp08/redglow_sets/chain/legs', 1190), + (17661, 16459, 'accessories/wearable_items/_exp08/redglow_sets/chain/legs_noskirt', 1190), + (17662, 16460, 'accessories/wearable_items/_exp08/redglow_sets/chain/pauldron_left', 1190), + (17663, 16461, 'accessories/wearable_items/_exp08/redglow_sets/chain/pauldron_right', 1190), + (17664, 16462, 'accessories/wearable_items/_exp08/redglow_sets/chain/shoulders', 1190), + (17665, 16463, 'accessories/wearable_items/_exp08/redglow_sets/chain/shoulders_pauldrons', 1190), + (17666, 16464, 'accessories/wearable_items/_exp08/redglow_sets/chain/skirt', 1190), + (17667, 16465, 'staticobjects/_exp06/odno_rock01_purple', 1190), + (17668, 16466, 'accessories/wearable_items/_exp08/grozmok_robe/antler_left', 1190), + (17669, 16467, 'accessories/wearable_items/_exp08/grozmok_robe/antler_right', 1190), + (17670, 16468, 'accessories/wearable_items/_exp08/grozmok_robe/chest', 1190), + (17671, 16469, 'accessories/wearable_items/_exp08/grozmok_robe/chest_pauldrons', 1190), + (17672, 16470, 'accessories/wearable_items/_exp08/grozmok_robe/feet', 1190), + (17673, 16471, 'accessories/wearable_items/_exp08/grozmok_robe/grozmok_pauldron_left', 1190), + (17674, 16472, 'accessories/wearable_items/_exp08/grozmok_robe/grozmok_pauldron_right', 1190), + (17675, 16473, 'accessories/wearable_items/_exp08/grozmok_robe/hands', 1190), + (17676, 16474, 'accessories/wearable_items/_exp08/grozmok_robe/head', 1190), + (17677, 16475, 'accessories/wearable_items/_exp08/grozmok_robe/head_collar', 1190), + (17678, 16476, 'accessories/wearable_items/_exp08/grozmok_robe/head_epic', 1190), + (17679, 16477, 'accessories/wearable_items/_exp08/grozmok_robe/pants', 1190), + (17680, 16478, 'accessories/wearable_items/_exp08/grozmok_robe/skirt', 1190), + (17681, 16479, 'accessories/wieldable_items/weapons/exp08/1h_sword/exp08_sword_gem_rapier', 1190), + (17682, 16480, 'staticobjects/_exp06/bl_kerra_stone', 1190), + (17683, 16481, 'staticobjects/_exp06/bl_kerra_stone_broken', 1190), + (17684, 16482, '_exp08/characters/tool_users/lucan_2011/lucan_2011', 1190), + (17685, 16483, 'accessories/wearable_items/_exp08/redglow_sets/gi/chest', 1190), + (17686, 16484, 'accessories/wearable_items/_exp08/redglow_sets/gi/feet', 1190), + (17687, 16485, 'accessories/wearable_items/_exp08/redglow_sets/gi/head', 1190), + (17688, 16486, 'accessories/wearable_items/_exp08/redglow_sets/gi/legs', 1190), + (17689, 16487, 'accessories/wearable_items/_exp08/redglow_sets/gi/shoulders', 1190), + (17690, 16488, 'accessories/wearable_items/_exp08/redglow_sets/gi/skirt', 1190), + (17691, 16489, 'accessories/wearable_items/_exp08/redglow_sets/gi/female/arms', 1190), + (17692, 16490, 'accessories/wearable_items/_exp08/redglow_sets/gi/male/shoulders', 1190), + (17693, 16491, 'accessories/wearable_items/_exp08/redglow_sets/gi/monk_hat/head', 1190), + (17694, 16492, 'accessories/wieldable_items/weapons/exp08/1h_sword/exp08_sword_gem_epee', 1190), + (17695, 16493, 'staticobjects/housing_portal_objects/vision_home_lavastorm', 1190), + (17696, 16494, '_exp08/characters/monsters/timber_wolf_harbinger', 1190), + (17697, 16495, '_exp08/characters/monsters/bear_harbinger', 1190), + (17698, 16496, '_exp08/characters/monsters/chokidai_harbinger', 1190), + (17699, 16497, '_exp08/characters/monsters/crocodile_harbinger', 1190), + (17700, 16498, '_exp08/characters/monsters/tiger_harbinger', 1190), + (17701, 16499, 'ec/npc/wheel', 1190), + (17702, 16500, 'staticobjects/crates/freeport_crate_01', 1190), + (17703, 16501, 'staticobjects/crates/freeport_crate_large_militaryboarded', 1190), + (17704, 16502, 'staticobjects/promo_items/anniversary_antonia_statue', 1190), + (17705, 16503, 'staticobjects/promo_items/anniversary_lucan_statue', 1190), + (17706, 16504, 'accessories/wieldable_items/weapons/exp08/1h_sword/exp08_sword_gem_cutlass', 1190), + (17707, 16505, 'accessories/wearable_items/profesion_hats/beastlord2/head_beastlord_tintable', 1190), + (17708, 16506, 'accessories/wieldable_items/weapons/exp08/1h_crush/exp08_1h_crush_beastlord_epic', 1190), + (17709, 16507, 'accessories/wieldable_items/weapons/exp08/2h_sword/exp08_2h_sword_lion', 1190), + (17710, 16508, 'accessories/wieldable_items/weapons/exp08/fist/exp08_fist_beastlord_blades_silver', 1190), + (17711, 16509, 'staticobjects/freeport_combined/fpalt_bank_scalestipped01', 1190), + (17712, 16510, 'staticobjects/freeport_combined/fpalt_banner_lucan_hoods_wall01', 1190), + (17713, 16511, 'staticobjects/freeport_combined/fpalt_banner_lucan_hoods_wall02', 1190), + (17714, 16512, 'staticobjects/freeport_combined/fpalt_banner_lucan_stand01', 1190), + (17715, 16513, 'staticobjects/freeport_combined/fpalt_banner_military_stand01', 1190), + (17716, 16514, 'staticobjects/freeport_combined/fpalt_banner_militiahouse01', 1190), + (17717, 16515, 'staticobjects/freeport_combined/fpalt_bed_kingornate01', 1190), + (17718, 16516, 'staticobjects/freeport_combined/fpalt_bed_monk_mat01', 1190), + (17719, 16517, 'staticobjects/freeport_combined/fpalt_bench_militarylong01', 1190), + (17720, 16518, 'staticobjects/freeport_combined/fpalt_bench_ornatelong01', 1190), + (17721, 16519, 'staticobjects/freeport_combined/fpalt_benchstone01', 1190), + (17722, 16520, 'staticobjects/freeport_combined/fpalt_boat_fishing01', 1190), + (17723, 16521, 'staticobjects/freeport_combined/fpalt_bookcase_largeornate01', 1190), + (17724, 16522, 'staticobjects/freeport_combined/fpalt_bookcase_largeornate02', 1190), + (17725, 16523, 'staticobjects/freeport_combined/fpalt_bookcase_largeornate03', 1190), + (17726, 16524, 'staticobjects/freeport_combined/fpalt_bucket_ornatesmall01', 1190), + (17727, 16525, 'staticobjects/freeport_combined/fpalt_chair_military02', 1190), + (17728, 16526, 'staticobjects/freeport_combined/fpalt_chair_ornate02', 1190), + (17729, 16527, 'staticobjects/freeport_combined/fpalt_chair_ornate03', 1190), + (17730, 16528, 'staticobjects/freeport_combined/fpalt_chest_large_plainsymbol01', 1190), + (17731, 16529, 'staticobjects/freeport_combined/fpalt_counter_cornerornatemedium01', 1190), + (17732, 16530, 'staticobjects/freeport_combined/fpalt_counter_cornerornatemedium02', 1190), + (17733, 16531, 'staticobjects/freeport_combined/fpalt_counter_straightornatelong01', 1190), + (17734, 16532, 'staticobjects/freeport_combined/fpalt_counter_straightornatemedium01', 1190), + (17735, 16533, 'staticobjects/freeport_combined/fpalt_counter_straightornatesmall01', 1190), + (17736, 16534, 'staticobjects/freeport_combined/fpalt_crate_large_militaryboarded01', 1190), + (17737, 16535, 'staticobjects/freeport_combined/fpalt_crate_large_plainboardedsymbol01', 1190), + (17738, 16536, 'staticobjects/freeport_combined/fpalt_crate_portwine01', 1190), + (17739, 16537, 'staticobjects/freeport_combined/fpalt_crate_small_military01', 1190), + (17740, 16538, 'staticobjects/freeport_combined/fpalt_crate_small_plain01', 1190), + (17741, 16539, 'staticobjects/freeport_combined/fpalt_dartboard01', 1190), + (17742, 16540, 'staticobjects/freeport_combined/fpalt_displays_cabinetornate01', 1190), + (17743, 16541, 'staticobjects/freeport_combined/fpalt_fireplace_military01', 1190), + (17744, 16542, 'staticobjects/freeport_combined/fpalt_fireplace_ornatestone01', 1190), + (17745, 16543, 'staticobjects/freeport_combined/fpalt_forge_anvil01', 1190), + (17746, 16544, 'staticobjects/freeport_combined/fpalt_forge_grindingwheel01', 1190), + (17747, 16545, 'staticobjects/freeport_combined/fpalt_forge_hammer01', 1190), + (17748, 16546, 'staticobjects/freeport_combined/fpalt_forge_pliers01', 1190), + (17749, 16547, 'staticobjects/freeport_combined/fpalt_hitchingpostmultiple01', 1190), + (17750, 16548, 'staticobjects/freeport_combined/fpalt_hitchingpostsingle01', 1190), + (17751, 16549, 'staticobjects/freeport_combined/fpalt_hoods_roadsign01', 1190), + (17752, 16550, 'staticobjects/freeport_combined/fpalt_keg_ornatelarge001', 1190), + (17753, 16551, 'staticobjects/freeport_combined/fpalt_keg_ornatesmall001', 1190), + (17754, 16552, 'staticobjects/freeport_combined/fpalt_lantern_freestanding01_timed', 1190), + (17755, 16553, 'staticobjects/freeport_combined/fpalt_lighting_chandaliermilitary01', 1190), + (17756, 16554, 'staticobjects/freeport_combined/fpalt_lighting_chandalierornate01', 1190), + (17757, 16555, 'staticobjects/freeport_combined/fpalt_lighting_floorbrazierornate01', 1190), + (17758, 16556, 'staticobjects/freeport_combined/fpalt_lighting_floorbrazierplain02', 1190), + (17759, 16557, 'staticobjects/freeport_combined/fpalt_lighting_tablebrazier_coals001', 1190), + (17760, 16558, 'staticobjects/freeport_combined/fpalt_lighting_tablecandlemagical01', 1190), + (17761, 16559, 'staticobjects/freeport_combined/fpalt_lighting_tablecandleornate01', 1190), + (17762, 16560, 'staticobjects/freeport_combined/fpalt_lighting_tablecandleplain02', 1190), + (17763, 16561, 'staticobjects/freeport_combined/fpalt_lighting_wallsconcemilitary01', 1190), + (17764, 16562, 'staticobjects/freeport_combined/fpalt_lighting_wallsconceornate01', 1190), + (17765, 16563, 'staticobjects/freeport_combined/fpalt_mailbox_kiosk01', 1190), + (17766, 16564, 'staticobjects/freeport_combined/fpalt_mariners_bell01_all', 1190), + (17767, 16565, 'staticobjects/freeport_combined/fpalt_nautical_steeringwheelstand01', 1190), + (17768, 16566, 'staticobjects/freeport_combined/fpalt_roadsign_arrow01_beggarsct', 1190), + (17769, 16567, 'staticobjects/freeport_combined/fpalt_roadsign_arrow01_bigbend', 1190), + (17770, 16568, 'staticobjects/freeport_combined/fpalt_roadsign_arrow01_longshadow', 1190), + (17771, 16569, 'staticobjects/freeport_combined/fpalt_roadsign_arrow01_temple', 1190), + (17772, 16570, 'staticobjects/freeport_combined/fpalt_rug_rolled_group01', 1190), + (17773, 16571, 'staticobjects/freeport_combined/fpalt_scribe_scroll01', 1190), + (17774, 16572, 'staticobjects/freeport_combined/fpalt_scribe_scroll02', 1190), + (17775, 16573, 'staticobjects/freeport_combined/fpalt_scribe_scroll03', 1190), + (17776, 16574, 'staticobjects/freeport_combined/fpalt_shelves_ornatelong001', 1190), + (17777, 16575, 'staticobjects/freeport_combined/fpalt_shelves_ornatelongdouble001', 1190), + (17778, 16576, 'staticobjects/freeport_combined/fpalt_shelves_ornateshortdouble001', 1190), + (17779, 16577, 'staticobjects/freeport_combined/fpalt_table_endtableornate01', 1190), + (17780, 16578, 'staticobjects/freeport_combined/fpalt_table_militarylarge01', 1190), + (17781, 16579, 'staticobjects/freeport_combined/fpalt_table_militarystone01', 1190), + (17782, 16580, 'staticobjects/freeport_combined/fpalt_table_militia_round01', 1190), + (17783, 16581, 'staticobjects/freeport_combined/fpalt_table_ornatelarge01', 1190), + (17784, 16582, 'staticobjects/freeport_combined/fpalt_table_workbenchplain01', 1190), + (17785, 16583, 'staticobjects/freeport_combined/fpalt_tools_hammer001', 1190), + (17786, 16584, 'staticobjects/freeport_combined/fpalt_tools_handsaw001', 1190), + (17787, 16585, 'staticobjects/freeport_combined/fpalt_trough_round01', 1190), + (17788, 16586, 'staticobjects/freeport_combined/fpalt_urn_ornate_large01', 1190), + (17789, 16587, 'staticobjects/freeport_combined/fpalt_urn_plain_large02', 1190), + (17790, 16588, 'staticobjects/freeport_combined/fpalt_vase_magicalsphere01', 1190), + (17791, 16589, 'staticobjects/freeport_combined/fpalt_vase_ornate_maskhandles01', 1190), + (17792, 16590, 'staticobjects/freeport_combined/fpalt_vase_smallgold01', 1190), + (17793, 16591, 'staticobjects/freeport_combined/fpalt_weaponrack_full01', 1190), + (17794, 16592, 'staticobjects/freeport_combined/fpalt_weaponrack_temple01', 1190), + (17795, 16593, 'staticobjects/freeport_combined/fpalt_weaponrack_temple02', 1190), + (17796, 16594, 'staticobjects/freeport_combined/fpalt_weaponrack_temple03', 1190), + (17797, 16595, 'staticobjects/freeport_combined/fpalt_weaponrack_triple01', 1190), + (17798, 16596, 'staticobjects/freeport_combined/fpalt_weaponrack_triple02', 1190), + (17799, 16597, 'staticobjects/freeport_combined/fpalt_sewer_entrance01', 1190), + (17800, 16598, 'staticobjects/freeport_combined/fpalt_roadsign_arrow01_fprtcity', 1190), + (17801, 16599, 'staticobjects/freeport_combined/fpalt_cellar_door01', 1190), + (17802, 16600, 'accessories/wearable_items/_exp08/combine_armor/chain/chest', 1190), + (17803, 16601, 'accessories/wearable_items/_exp08/combine_armor/chain/feet', 1190), + (17804, 16602, 'accessories/wearable_items/_exp08/combine_armor/chain/forearms', 1190), + (17805, 16603, 'accessories/wearable_items/_exp08/combine_armor/chain/hands', 1190), + (17806, 16604, 'accessories/wearable_items/_exp08/combine_armor/chain/head', 1190), + (17807, 16605, 'accessories/wearable_items/_exp08/combine_armor/chain/legs', 1190), + (17808, 16606, 'accessories/wearable_items/_exp08/combine_armor/chain/legs_noskirt', 1190), + (17809, 16607, 'accessories/wearable_items/_exp08/combine_armor/chain/shoulders', 1190), + (17810, 16608, 'accessories/wearable_items/_exp08/combine_armor/chain/shoulders_epic', 1190), + (17811, 16609, 'accessories/wearable_items/_exp08/combine_armor/chain/skirt', 1190), + (17812, 16610, 'accessories/wearable_items/_exp08/combine_armor/gi_cloth/chest', 1190), + (17813, 16611, 'accessories/wearable_items/_exp08/combine_armor/gi_cloth/cloak', 1190), + (17814, 16612, 'accessories/wearable_items/_exp08/combine_armor/gi_cloth/hands', 1190), + (17815, 16613, 'accessories/wearable_items/_exp08/combine_armor/gi_cloth/head', 1190), + (17816, 16614, 'accessories/wearable_items/_exp08/combine_armor/gi_cloth/legs', 1190), + (17817, 16615, 'accessories/wearable_items/_exp08/combine_armor/leather/chest', 1190), + (17818, 16616, 'accessories/wearable_items/_exp08/combine_armor/leather/feet', 1190), + (17819, 16617, 'accessories/wearable_items/_exp08/combine_armor/leather/forearms', 1190), + (17820, 16618, 'accessories/wearable_items/_exp08/combine_armor/leather/hands', 1190), + (17821, 16619, 'accessories/wearable_items/_exp08/combine_armor/leather/head', 1190), + (17822, 16620, 'accessories/wearable_items/_exp08/combine_armor/leather/legs', 1190), + (17823, 16621, 'accessories/wearable_items/_exp08/combine_armor/leather/legs_noskirt', 1190), + (17824, 16622, 'accessories/wearable_items/_exp08/combine_armor/leather/shoulders', 1190), + (17825, 16623, 'accessories/wearable_items/_exp08/combine_armor/leather/shoulders_epic', 1190), + (17826, 16624, 'accessories/wearable_items/_exp08/combine_armor/leather/skirt', 1190), + (17827, 16625, 'accessories/wearable_items/_exp08/combine_armor/snapons-helms/combine_pauldrons_chain_left', 1190), + (17828, 16626, 'accessories/wearable_items/_exp08/combine_armor/snapons-helms/combine_pauldrons_chain_right', 1190), + (17829, 16627, 'accessories/wearable_items/_exp08/combine_armor/snapons-helms/combine_pauldrons_leather_left', 1190), + (17830, 16628, 'accessories/wearable_items/_exp08/combine_armor/snapons-helms/combine_pauldrons_leather_right', 1190), + (17831, 16629, 'staticobjects/coffins_and_sarcophagus/shroud_no_shroud', 1190), + (17832, 16630, 'accessories/wieldable_items/weapons/exp08/2h_sword/exp08_2h_sword_gem_engraved', 1190), + (17833, 16631, 'accessories/wieldable_items/weapons/exp08/1h_sword/exp08_sword_gem_dragon_blade', 1190), + (17834, 16632, 'staticobjects/housing_portal_objects/vision_home_sullon_spire', 1190), + (17835, 16633, 'staticobjects/housing_portal_objects/vision_home_stormy_isle', 1190), + (17836, 16634, 'staticobjects/soe_wallet/station_fancy_candleholder', 1190), + (17837, 16635, 'staticobjects/soe_wallet/station_fancy_candleholder_gold', 1190), + (17838, 16636, 'staticobjects/soe_wallet/station_fancy_shelf_gold', 1190), + (17839, 16637, 'staticobjects/soe_wallet/station_fancy_mirror', 1190), + (17840, 16638, 'staticobjects/soe_wallet/station_fancy_mirror_gold', 1190), + (17841, 16639, 'staticobjects/soe_wallet/station_fancy_shelf', 1190), + (17842, 16640, 'accessories/wieldable_items/weapons/exp08/fist/exp08_fist_beastlord_blades_silver_red', 1190), + (17843, 16641, 'accessories/wieldable_items/weapons/exp08/fist/exp08_fist_beastlord_blades_blue', 1190), + (17844, 16642, '_exp08/characters/monsters/nayad_merc/nayad_merc', 1190), + (17845, 16643, '_exp08/characters/monsters/nayad_merc/nayad_merc_tintable', 1190), + (17846, 16644, 'creatures/tu/mysticdoll_alternate_pin_warrior', 1190), + (17847, 16645, 'staticobjects/_exp08/dyod/crushbone/dyod_cbk_barrel_orc01', 1190), + (17848, 16646, 'staticobjects/_exp08/dyod/crushbone/dyod_cbk_bed_shoddy', 1190), + (17849, 16647, 'staticobjects/_exp08/dyod/crushbone/dyod_cbk_bench01', 1190), + (17850, 16648, 'staticobjects/_exp08/dyod/crushbone/dyod_cbk_bench01_blue', 1190), + (17851, 16649, 'staticobjects/_exp08/dyod/crushbone/dyod_cbk_book_blue', 1190), + (17852, 16650, 'staticobjects/_exp08/dyod/crushbone/dyod_cbk_book_copper', 1190), + (17853, 16651, 'staticobjects/_exp08/dyod/crushbone/dyod_cbk_book_group01', 1190), + (17854, 16652, 'staticobjects/_exp08/dyod/crushbone/dyod_cbk_book_group02', 1190), + (17855, 16653, 'staticobjects/_exp08/dyod/crushbone/dyod_cbk_chest_metal01', 1190), + (17856, 16654, 'staticobjects/_exp08/dyod/crushbone/dyod_cbk_bookcase02', 1190), + (17857, 16655, 'staticobjects/_exp08/dyod/crushbone/dyod_cbk_bottle', 1190), + (17858, 16656, 'staticobjects/_exp08/dyod/crushbone/dyod_cbk_bowl_orc', 1190), + (17859, 16657, 'staticobjects/_exp08/dyod/crushbone/dyod_cbk_bunk_orc01', 1190), + (17860, 16658, 'staticobjects/_exp08/dyod/crushbone/dyod_cbk_butcher_cleaver', 1190), + (17861, 16659, 'staticobjects/_exp08/dyod/crushbone/dyod_cbk_butcher_knife01', 1190), + (17862, 16660, 'staticobjects/_exp08/dyod/crushbone/dyod_cbk_candle_blue', 1190), + (17863, 16661, 'staticobjects/_exp08/dyod/crushbone/dyod_cbk_candle_orange', 1190), + (17864, 16662, 'staticobjects/_exp08/dyod/crushbone/dyod_cbk_candle_wine', 1190), + (17865, 16663, 'staticobjects/_exp08/dyod/crushbone/dyod_cbk_cart_jailer01', 1190), + (17866, 16664, 'staticobjects/_exp08/dyod/crushbone/dyod_cbk_chair01', 1190), + (17867, 16665, 'staticobjects/_exp08/dyod/crushbone/dyod_cbk_chair01_blue', 1190), + (17868, 16666, 'staticobjects/_exp08/dyod/crushbone/dyod_cbk_jail_cup', 1190), + (17869, 16667, 'staticobjects/_exp08/dyod/crushbone/dyod_cbk_chest_metal02', 1190), + (17870, 16668, 'staticobjects/_exp08/dyod/crushbone/dyod_cbk_climbing_spike01', 1190), + (17871, 16669, 'staticobjects/_exp08/dyod/crushbone/dyod_cbk_climbing_spike02', 1190), + (17872, 16670, 'staticobjects/_exp08/dyod/crushbone/dyod_cbk_club', 1190), + (17873, 16671, 'staticobjects/_exp08/dyod/crushbone/dyod_cbk_counter_carving', 1190), + (17874, 16672, 'staticobjects/_exp08/dyod/crushbone/dyod_cbk_crate_wood', 1190), + (17875, 16673, 'staticobjects/_exp08/dyod/crushbone/dyod_cbk_crate_wood_long01', 1190), + (17876, 16674, 'staticobjects/_exp08/dyod/crushbone/dyod_cbk_cup_orc', 1190), + (17877, 16675, 'staticobjects/_exp08/dyod/crushbone/dyod_cbk_darkelfthrone', 1190), + (17878, 16676, 'staticobjects/_exp08/dyod/crushbone/dyod_cbk_firepit_orc01', 1190), + (17879, 16677, 'staticobjects/_exp08/dyod/crushbone/dyod_cbk_firepit_orc_withutensils01', 1190), + (17880, 16678, 'staticobjects/_exp08/dyod/crushbone/dyod_cbk_floursack_single001', 1190), + (17881, 16679, 'staticobjects/_exp08/dyod/crushbone/dyod_cbk_floursack_single002', 1190), + (17882, 16680, 'staticobjects/_exp08/dyod/crushbone/dyod_cbk_floursacksgroup001', 1190), + (17883, 16681, 'staticobjects/_exp08/dyod/crushbone/dyod_cbk_floursacksgroup002', 1190), + (17884, 16682, 'staticobjects/_exp08/dyod/crushbone/dyod_cbk_floursacksgroup003', 1190), + (17885, 16683, 'staticobjects/_exp08/dyod/crushbone/dyod_cbk_forge', 1190), + (17886, 16684, 'staticobjects/_exp08/dyod/crushbone/dyod_cbk_forgetool_poker01', 1190), + (17887, 16685, 'staticobjects/_exp08/dyod/crushbone/dyod_cbk_fryingpan_orc_large01', 1190), + (17888, 16686, 'staticobjects/_exp08/dyod/crushbone/dyod_cbk_gravelcrystalpile01', 1190), + (17889, 16687, 'staticobjects/_exp08/dyod/crushbone/dyod_cbk_gravelcrystalpile02', 1190), + (17890, 16688, 'staticobjects/_exp08/dyod/crushbone/dyod_cbk_gravelpile01', 1190), + (17891, 16689, 'staticobjects/_exp08/dyod/crushbone/dyod_cbk_gravelpile02', 1190), + (17892, 16690, 'staticobjects/_exp08/dyod/crushbone/dyod_cbk_gravelpile03', 1190), + (17893, 16691, 'staticobjects/_exp08/dyod/crushbone/dyod_cbk_hammer01', 1190), + (17894, 16692, 'staticobjects/_exp08/dyod/crushbone/dyod_cbk_oven', 1190), + (17895, 16693, 'staticobjects/_exp08/dyod/crushbone/dyod_cbk_jailer_keys', 1190), + (17896, 16694, 'staticobjects/_exp08/dyod/crushbone/dyod_cbk_jailer_keys_hanging', 1190), + (17897, 16695, 'staticobjects/_exp08/dyod/crushbone/dyod_cbk_keg_orc_large', 1190), + (17898, 16696, 'staticobjects/_exp08/dyod/crushbone/dyod_cbk_knife_orc01', 1190), + (17899, 16697, 'staticobjects/_exp08/dyod/crushbone/dyod_cbk_ladder_orc01', 1190), + (17900, 16698, 'staticobjects/_exp08/dyod/crushbone/dyod_cbk_large_animalcage', 1190), + (17901, 16699, 'staticobjects/_exp08/dyod/crushbone/dyod_cbk_large_animalcage_gold', 1190), + (17902, 16700, 'staticobjects/_exp08/dyod/crushbone/dyod_cbk_lightsource_cavewall_torch', 1190), + (17903, 16701, 'staticobjects/_exp08/dyod/crushbone/dyod_cbk_lightsource_chandelier01', 1190), + (17904, 16702, 'staticobjects/_exp08/dyod/crushbone/dyod_cbk_lightsource_chandelier01_swinging', 1190), + (17905, 16703, 'staticobjects/_exp08/dyod/crushbone/dyod_cbk_lightsource_chandelier01_swinging_lit', 1190), + (17906, 16704, 'staticobjects/_exp08/dyod/crushbone/dyod_cbk_lightsource_chandelier_mount', 1190), + (17907, 16705, 'staticobjects/_exp08/dyod/crushbone/dyod_cbk_lightsource_firepot01', 1190), + (17908, 16706, 'staticobjects/_exp08/dyod/crushbone/dyod_cbk_lightsource_firepot_small01', 1190), + (17909, 16707, 'staticobjects/_exp08/dyod/crushbone/dyod_cbk_lightsource_torch01', 1190), + (17910, 16708, 'staticobjects/_exp08/dyod/crushbone/dyod_cbk_lightsource_wall_sconce01', 1190), + (17911, 16709, 'staticobjects/_exp08/dyod/crushbone/dyod_cbk_lightsource_wall_sconce01_lit', 1190), + (17912, 16710, 'staticobjects/_exp08/dyod/crushbone/dyod_cbk_lightsource_wall_sconce02', 1190), + (17913, 16711, 'staticobjects/_exp08/dyod/crushbone/dyod_cbk_lightsource_wall_sconce02_lit', 1190), + (17914, 16712, 'staticobjects/_exp08/dyod/crushbone/dyod_cbk_meat_rack_orc', 1190), + (17915, 16713, 'staticobjects/_exp08/dyod/crushbone/dyod_cbk_miningtool_pick01', 1190), + (17916, 16714, 'staticobjects/_exp08/dyod/crushbone/dyod_cbk_miningtool_shovel01', 1190), + (17917, 16715, 'staticobjects/_exp08/dyod/crushbone/dyod_cbk_orc_banner_crushbone', 1190), + (17918, 16716, 'staticobjects/_exp08/dyod/crushbone/dyod_cbk_orc_banner_emperorcrush', 1190), + (17919, 16717, 'staticobjects/_exp08/dyod/crushbone/dyod_cbk_orc_bonepile01', 1190), + (17920, 16718, 'staticobjects/_exp08/dyod/crushbone/dyod_cbk_wheelbarrow_orc01', 1190), + (17921, 16719, 'staticobjects/_exp08/dyod/crushbone/dyod_cbk_wall_shield01', 1190), + (17922, 16720, 'staticobjects/_exp08/dyod/crushbone/dyod_cbk_weapon_rack_floor02', 1190), + (17923, 16721, 'staticobjects/_exp08/dyod/crushbone/dyod_cbk_weapon_rack_floor02_blue', 1190), + (17924, 16722, 'staticobjects/_exp08/dyod/crushbone/dyod_cbk_weapon_rack_floor', 1190), + (17925, 16723, 'staticobjects/_exp08/dyod/crushbone/dyod_cbk_weapon_rack_floor_blue', 1190), + (17926, 16724, 'staticobjects/_exp08/dyod/crushbone/dyod_cbk_weapon_rack_floor_empty', 1190), + (17927, 16725, 'staticobjects/_exp08/dyod/crushbone/dyod_cbk_weapon_rack_floor_empty_blue', 1190), + (17928, 16726, 'staticobjects/_exp08/dyod/crushbone/dyod_cbk_weapon_rack_floor_spear', 1190), + (17929, 16727, 'staticobjects/_exp08/dyod/crushbone/dyod_cbk_weapon_rack_floor_spear_blue', 1190), + (17930, 16728, 'staticobjects/_exp08/dyod/crushbone/dyod_cbk_weapons_wall_crossed01', 1190), + (17931, 16729, 'staticobjects/_exp08/dyod/crushbone/dyod_cbk_weaponsrack_wall01', 1190), + (17932, 16730, 'staticobjects/_exp08/dyod/crushbone/dyod_cbk_weaponsrack_wall01_blue', 1190), + (17933, 16731, 'staticobjects/_exp08/dyod/crushbone/dyod_cbk_weaponsrack_wall02', 1190), + (17934, 16732, 'staticobjects/_exp08/dyod/crushbone/dyod_cbk_weaponsrack_wall02_blue', 1190), + (17935, 16733, 'staticobjects/_exp08/dyod/crushbone/dyod_cbk_weaponsrack_wall_empty', 1190), + (17936, 16734, 'staticobjects/_exp08/dyod/crushbone/dyod_cbk_weaponsrack_wall_empty_blue', 1190), + (17937, 16735, 'staticobjects/_exp08/dyod/crushbone/dyod_cbk_torch001_skull', 1190), + (17938, 16736, 'staticobjects/_exp08/dyod/crushbone/dyod_cbk_planks01', 1190), + (17939, 16737, 'staticobjects/_exp08/dyod/crushbone/dyod_cbk_planks02', 1190), + (17940, 16738, 'staticobjects/_exp08/dyod/crushbone/dyod_cbk_plate_jail', 1190), + (17941, 16739, 'staticobjects/_exp08/dyod/crushbone/dyod_cbk_plate_withbone', 1190), + (17942, 16740, 'staticobjects/_exp08/dyod/crushbone/dyod_cbk_plate_withrats', 1190), + (17943, 16741, 'staticobjects/_exp08/dyod/crushbone/dyod_cbk_polearm', 1190), + (17944, 16742, 'staticobjects/_exp08/dyod/crushbone/dyod_cbk_poleaxe', 1190), + (17945, 16743, 'staticobjects/_exp08/dyod/crushbone/dyod_cbk_post_orc_crushbone', 1190), + (17946, 16744, 'staticobjects/_exp08/dyod/crushbone/dyod_cbk_post_orc_emperorcrush', 1190), + (17947, 16745, 'staticobjects/_exp08/dyod/crushbone/dyod_cbk_potionsack', 1190), + (17948, 16746, 'staticobjects/_exp08/dyod/crushbone/dyod_cbk_pots_orc_large01', 1190), + (17949, 16747, 'staticobjects/_exp08/dyod/crushbone/dyod_cbk_pots_orc_small01', 1190), + (17950, 16748, 'staticobjects/_exp08/dyod/crushbone/dyod_cbk_rubbish_muckbones01', 1190), + (17951, 16749, 'staticobjects/_exp08/dyod/crushbone/dyod_cbk_rubbish_muckbones02', 1190), + (17952, 16750, 'staticobjects/_exp08/dyod/crushbone/dyod_cbk_skull_human01', 1190), + (17953, 16751, 'staticobjects/_exp08/dyod/crushbone/dyod_cbk_spear01', 1190), + (17954, 16752, 'staticobjects/_exp08/dyod/crushbone/dyod_cbk_spoon_orc_wood', 1190), + (17955, 16753, 'staticobjects/_exp08/dyod/crushbone/dyod_cbk_statue_orc_knight01', 1190), + (17956, 16754, 'staticobjects/_exp08/dyod/crushbone/dyod_cbk_stool_orc_wood01', 1190), + (17957, 16755, 'staticobjects/_exp08/dyod/crushbone/dyod_cbk_table_darkelfthrone', 1190), + (17958, 16756, 'staticobjects/_exp08/dyod/crushbone/dyod_cbk_table_long', 1190), + (17959, 16757, 'staticobjects/_exp08/dyod/crushbone/dyod_cbk_table_long_blue', 1190), + (17960, 16758, 'staticobjects/_exp08/dyod/crushbone/dyod_cbk_table_long_withfood', 1190), + (17961, 16759, 'staticobjects/_exp08/dyod/crushbone/dyod_cbk_table_small01', 1190), + (17962, 16760, 'staticobjects/_exp08/dyod/crushbone/dyod_cbk_table_small01_blue', 1190), + (17963, 16761, 'staticobjects/_exp08/dyod/crushbone/dyod_cbk_torture_chair01', 1190), + (17964, 16762, 'staticobjects/_exp08/dyod/crushbone/dyod_cbk_torture_hangingcage_long01', 1190), + (17965, 16763, 'staticobjects/_exp08/dyod/crushbone/dyod_cbk_torture_hangingcage_short01', 1190), + (17966, 16764, 'staticobjects/_exp08/dyod/crushbone/dyod_cbk_torture_hangingcage_short01_nofx', 1190), + (17967, 16765, 'staticobjects/_exp08/dyod/crushbone/dyod_cbk_torture_manacles_ceiling_swinging', 1190), + (17968, 16766, 'staticobjects/_exp08/dyod/crushbone/dyod_cbk_torture_manacles_wall01', 1190), + (17969, 16767, 'staticobjects/_exp08/dyod/crushbone/dyod_cbk_torture_manacles_wall02', 1190), + (17970, 16768, 'staticobjects/_exp08/dyod/crushbone/dyod_cbk_torture_pear_closed01', 1190), + (17971, 16769, 'staticobjects/_exp08/dyod/crushbone/dyod_cbk_torture_pear_open01', 1190), + (17972, 16770, 'staticobjects/_exp08/dyod/crushbone/dyod_cbk_torture_stockade01', 1190), + (17973, 16771, 'staticobjects/_exp08/dyod/crushbone/dyod_cbk_torture_table01', 1190), + (17974, 16772, 'staticobjects/_exp08/dyod/crushbone/dyod_cbk_torture_tool01', 1190), + (17975, 16773, 'staticobjects/_exp08/dyod/crushbone/dyod_cbk_trunk_shoddy', 1190), + (17976, 16774, 'staticobjects/_exp08/dyod/lair_of_scale/dyod_ls_sculpture_glass_rotate01', 1190), + (17977, 16775, 'staticobjects/_exp08/dyod/lair_of_scale/dyod_los_jail_cell_piece01', 1190), + (17978, 16776, 'staticobjects/_exp08/dyod/lair_of_scale/dyod_ls_banner_minion01', 1190), + (17979, 16777, 'staticobjects/_exp08/dyod/lair_of_scale/dyod_ls_banner_minion_flag', 1190), + (17980, 16778, 'staticobjects/_exp08/dyod/lair_of_scale/dyod_ls_banner_minion_post01', 1190), + (17981, 16779, 'staticobjects/_exp08/dyod/lair_of_scale/dyod_ls_bowl_jewels01', 1190), + (17982, 16780, 'staticobjects/_exp08/dyod/lair_of_scale/dyod_ls_bowl_steam01', 1190), + (17983, 16781, 'staticobjects/_exp08/dyod/lair_of_scale/dyod_ls_bowl_steam02', 1190), + (17984, 16782, 'staticobjects/_exp08/dyod/lair_of_scale/dyod_ls_bowl_steam03', 1190), + (17985, 16783, 'staticobjects/_exp08/dyod/lair_of_scale/dyod_ls_chair_metal01', 1190), + (17986, 16784, 'staticobjects/_exp08/dyod/lair_of_scale/dyod_ls_chair_metal02', 1190), + (17987, 16785, 'staticobjects/_exp08/dyod/lair_of_scale/dyod_ls_chest_metal01', 1190), + (17988, 16786, 'staticobjects/_exp08/dyod/lair_of_scale/dyod_ls_decoration_wall_dragonhead01', 1190), + (17989, 16787, 'staticobjects/_exp08/dyod/lair_of_scale/dyod_ls_dragoneggs_broken', 1190), + (17990, 16788, 'staticobjects/_exp08/dyod/lair_of_scale/dyod_ls_dragoneggs_mixed', 1190), + (17991, 16789, 'staticobjects/_exp08/dyod/lair_of_scale/dyod_ls_dragoneggs_unbroken', 1190), + (17992, 16790, 'staticobjects/_exp08/dyod/lair_of_scale/dyod_ls_lamp_metal_blue', 1190), + (17993, 16791, 'staticobjects/_exp08/dyod/lair_of_scale/dyod_ls_lava_lamp01', 1190), + (17994, 16792, 'staticobjects/_exp08/dyod/lair_of_scale/dyod_ls_lightsource_doorwaytorch01', 1190), + (17995, 16793, 'staticobjects/_exp08/dyod/lair_of_scale/dyod_ls_lightsource_orb_blue', 1190), + (17996, 16794, 'staticobjects/_exp08/dyod/lair_of_scale/dyod_ls_lightsource_walltorch01', 1190), + (17997, 16795, 'staticobjects/_exp08/dyod/lair_of_scale/dyod_ls_lightsource_walltorch02', 1190), + (17998, 16796, 'staticobjects/_exp08/dyod/lair_of_scale/dyod_ls_lightsource_walltorch02_lit', 1190), + (17999, 16797, 'staticobjects/_exp08/dyod/lair_of_scale/dyod_ls_lightsource_walltorch_red01', 1190), + (18000, 16798, 'staticobjects/_exp08/dyod/lair_of_scale/dyod_ls_minion_empty_armorstand01', 1190), + (18001, 16799, 'staticobjects/_exp08/dyod/lair_of_scale/dyod_ls_minion_weapons_armorstand01', 1190), + (18002, 16800, 'staticobjects/_exp08/dyod/lair_of_scale/dyod_ls_plants_blueflame_group01', 1190), + (18003, 16801, 'staticobjects/_exp08/dyod/lair_of_scale/dyod_ls_plants_blueflame_group02', 1190), + (18004, 16802, 'staticobjects/_exp08/dyod/lair_of_scale/dyod_ls_plants_blueflame_large01', 1190), + (18005, 16803, 'staticobjects/_exp08/dyod/lair_of_scale/dyod_ls_plants_blueflame_single01', 1190), + (18006, 16804, 'staticobjects/_exp08/dyod/lair_of_scale/dyod_ls_plants_blueflame_single02', 1190), + (18007, 16805, 'staticobjects/_exp08/dyod/lair_of_scale/dyod_ls_plants_blueflame_small', 1190), + (18008, 16806, 'staticobjects/_exp08/dyod/lair_of_scale/dyod_ls_plants_blueflame_smallsingle03', 1190), + (18009, 16807, 'staticobjects/_exp08/dyod/lair_of_scale/dyod_ls_ring_scales01', 1190), + (18010, 16808, 'staticobjects/_exp08/dyod/lair_of_scale/dyod_ls_sculpture_glass01', 1190), + (18011, 16809, 'staticobjects/_exp08/dyod/lair_of_scale/dyod_ls_sculpture_glass02', 1190), + (18012, 16810, 'staticobjects/_exp08/dyod/lair_of_scale/dyod_ls_sculpture_glass03', 1190), + (18013, 16811, 'staticobjects/_exp08/dyod/lair_of_scale/dyod_ls_sculpture_glass_double01', 1190), + (18014, 16812, 'staticobjects/_exp08/dyod/lair_of_scale/dyod_ls_sculpture_glass_double02', 1190), + (18015, 16813, 'staticobjects/_exp08/dyod/lair_of_scale/dyod_ls_vase_curved02', 1190), + (18016, 16814, 'staticobjects/_exp08/dyod/lair_of_scale/dyod_ls_sculpture_glass_rotate02', 1190), + (18017, 16815, 'staticobjects/_exp08/dyod/lair_of_scale/dyod_ls_sculpture_glass_rotate03', 1190), + (18018, 16816, 'staticobjects/_exp08/dyod/lair_of_scale/dyod_ls_sculpture_rotating02', 1190), + (18019, 16817, 'staticobjects/_exp08/dyod/lair_of_scale/dyod_ls_sculpture_rotating03', 1190), + (18020, 16818, 'staticobjects/_exp08/dyod/lair_of_scale/dyod_ls_sculpture_rotating', 1190), + (18021, 16819, 'staticobjects/_exp08/dyod/lair_of_scale/dyod_ls_statue_dragon01', 1190), + (18022, 16820, 'staticobjects/_exp08/dyod/lair_of_scale/dyod_ls_statue_dragon02', 1190), + (18023, 16821, 'staticobjects/_exp08/dyod/lair_of_scale/dyod_ls_statue_dragon_bust01', 1190), + (18024, 16822, 'staticobjects/_exp08/dyod/lair_of_scale/dyod_ls_table_long01', 1190), + (18025, 16823, 'staticobjects/_exp08/dyod/lair_of_scale/dyod_ls_table_long02', 1190), + (18026, 16824, 'staticobjects/_exp08/dyod/lair_of_scale/dyod_ls_table_long_chemistry01', 1190), + (18027, 16825, 'staticobjects/_exp08/dyod/lair_of_scale/dyod_ls_table_short01', 1190), + (18028, 16826, 'staticobjects/_exp08/dyod/lair_of_scale/dyod_ls_table_short02', 1190), + (18029, 16827, 'staticobjects/_exp08/dyod/lair_of_scale/dyod_ls_tapestry_awakened_cult01', 1190), + (18030, 16828, 'staticobjects/_exp08/dyod/lair_of_scale/dyod_ls_tapestry_kerafyrm_apocalypse01', 1190), + (18031, 16829, 'staticobjects/_exp08/dyod/lair_of_scale/dyod_ls_tapestry_kerafyrm_awakening01', 1190), + (18032, 16830, 'staticobjects/_exp08/dyod/lair_of_scale/dyod_ls_tent_minion', 1190), + (18033, 16831, 'staticobjects/_exp08/dyod/lair_of_scale/dyod_ls_tome_dragon_brass01', 1190), + (18034, 16832, 'staticobjects/_exp08/dyod/lair_of_scale/dyod_ls_tome_dragon_brass02', 1190), + (18035, 16833, 'staticobjects/_exp08/dyod/lair_of_scale/dyod_ls_tome_dragon_group01', 1190), + (18036, 16834, 'staticobjects/_exp08/dyod/lair_of_scale/dyod_ls_tome_dragon_group02', 1190), + (18037, 16835, 'staticobjects/_exp08/dyod/lair_of_scale/dyod_ls_tome_dragon_purple01', 1190), + (18038, 16836, 'staticobjects/_exp08/dyod/lair_of_scale/dyod_ls_tome_dragon_purple02', 1190), + (18039, 16837, 'staticobjects/_exp08/dyod/lair_of_scale/dyod_ls_vase_curved01', 1190), + (18040, 16838, 'staticobjects/_exp08/dyod/mistmoore/dyod_cm_dresser_single01', 1190), + (18041, 16839, 'staticobjects/_exp08/dyod/mistmoore/dyod_cm_arcane_bookcase01', 1190), + (18042, 16840, 'staticobjects/_exp08/dyod/mistmoore/dyod_cm_arcane_bottle_glass01', 1190), + (18043, 16841, 'staticobjects/_exp08/dyod/mistmoore/dyod_cm_arcane_bottle_glass02', 1190), + (18044, 16842, 'staticobjects/_exp08/dyod/mistmoore/dyod_cm_arcane_candlestack01', 1190), + (18045, 16843, 'staticobjects/_exp08/dyod/mistmoore/dyod_cm_arcane_potionsack01', 1190), + (18046, 16844, 'staticobjects/_exp08/dyod/mistmoore/dyod_cm_basin01_water', 1190), + (18047, 16845, 'staticobjects/_exp08/dyod/mistmoore/dyod_cm_basin02_water', 1190), + (18048, 16846, 'staticobjects/_exp08/dyod/mistmoore/dyod_cm_bed_master01', 1190), + (18049, 16847, 'staticobjects/_exp08/dyod/mistmoore/dyod_cm_bed_master02', 1190), + (18050, 16848, 'staticobjects/_exp08/dyod/mistmoore/dyod_cm_bed_twin01', 1190), + (18051, 16849, 'staticobjects/_exp08/dyod/mistmoore/dyod_cm_bed_twin02', 1190), + (18052, 16850, 'staticobjects/_exp08/dyod/mistmoore/dyod_cm_bench_marble01', 1190), + (18053, 16851, 'staticobjects/_exp08/dyod/mistmoore/dyod_cm_bench_marble_short01', 1190), + (18054, 16852, 'staticobjects/_exp08/dyod/mistmoore/dyod_cm_bench_metal01', 1190), + (18055, 16853, 'staticobjects/_exp08/dyod/mistmoore/dyod_cm_bench_metal_short01', 1190), + (18056, 16854, 'staticobjects/_exp08/dyod/mistmoore/dyod_cm_bench_wood01', 1190), + (18057, 16855, 'staticobjects/_exp08/dyod/mistmoore/dyod_cm_bench_wood_short01', 1190), + (18058, 16856, 'staticobjects/_exp08/dyod/mistmoore/dyod_cm_book01', 1190), + (18059, 16857, 'staticobjects/_exp08/dyod/mistmoore/dyod_cm_book02', 1190), + (18060, 16858, 'staticobjects/_exp08/dyod/mistmoore/dyod_cm_book_group01', 1190), + (18061, 16859, 'staticobjects/_exp08/dyod/mistmoore/dyod_cm_book_group02', 1190), + (18062, 16860, 'staticobjects/_exp08/dyod/mistmoore/dyod_cm_book_openbook01', 1190), + (18063, 16861, 'staticobjects/_exp08/dyod/mistmoore/dyod_cm_bookcase01', 1190), + (18064, 16862, 'staticobjects/_exp08/dyod/mistmoore/dyod_cm_bookcase02', 1190), + (18065, 16863, 'staticobjects/_exp08/dyod/mistmoore/dyod_cm_bookcase_empty01', 1190), + (18066, 16864, 'staticobjects/_exp08/dyod/mistmoore/dyod_cm_candle_white01', 1190), + (18067, 16865, 'staticobjects/_exp08/dyod/mistmoore/dyod_cm_chair_chaise01', 1190), + (18068, 16866, 'staticobjects/_exp08/dyod/mistmoore/dyod_cm_chair_chaise02', 1190), + (18069, 16867, 'staticobjects/_exp08/dyod/mistmoore/dyod_cm_chair_dining01', 1190), + (18070, 16868, 'staticobjects/_exp08/dyod/mistmoore/dyod_cm_chair_dining02', 1190), + (18071, 16869, 'staticobjects/_exp08/dyod/mistmoore/dyod_cm_chair_dining03', 1190), + (18072, 16870, 'staticobjects/_exp08/dyod/mistmoore/dyod_cm_chair_dining04', 1190), + (18073, 16871, 'staticobjects/_exp08/dyod/mistmoore/dyod_cm_chest_treasure01', 1190), + (18074, 16872, 'staticobjects/_exp08/dyod/mistmoore/dyod_cm_chest_treasure02', 1190), + (18075, 16873, 'staticobjects/_exp08/dyod/mistmoore/dyod_cm_coffin_stone01', 1190), + (18076, 16874, 'staticobjects/_exp08/dyod/mistmoore/dyod_cm_couch01', 1190), + (18077, 16875, 'staticobjects/_exp08/dyod/mistmoore/dyod_cm_couch02', 1190), + (18078, 16876, 'staticobjects/_exp08/dyod/mistmoore/dyod_cm_dresser_servant01', 1190), + (18079, 16877, 'staticobjects/_exp08/dyod/mistmoore/dyod_cm_vase_large01', 1190), + (18080, 16878, 'staticobjects/_exp08/dyod/mistmoore/dyod_cm_fabricbolt01', 1190), + (18081, 16879, 'staticobjects/_exp08/dyod/mistmoore/dyod_cm_fabricbolt02', 1190), + (18082, 16880, 'staticobjects/_exp08/dyod/mistmoore/dyod_cm_lightsource_candlestick01', 1190), + (18083, 16881, 'staticobjects/_exp08/dyod/mistmoore/dyod_cm_lightsource_candlestick02', 1190), + (18084, 16882, 'staticobjects/_exp08/dyod/mistmoore/dyod_cm_lightsource_chandalier01', 1190), + (18085, 16883, 'staticobjects/_exp08/dyod/mistmoore/dyod_cm_lightsource_chandalier01_swinging', 1190), + (18086, 16884, 'staticobjects/_exp08/dyod/mistmoore/dyod_cm_lightsource_chandalier02', 1190), + (18087, 16885, 'staticobjects/_exp08/dyod/mistmoore/dyod_cm_lightsource_chandalier02_swinging', 1190), + (18088, 16886, 'staticobjects/_exp08/dyod/mistmoore/dyod_cm_lightsource_floor_candelabra01', 1190), + (18089, 16887, 'staticobjects/_exp08/dyod/mistmoore/dyod_cm_lightsource_floor_candelabra02', 1190), + (18090, 16888, 'staticobjects/_exp08/dyod/mistmoore/dyod_cm_lightsource_table_candelabra01', 1190), + (18091, 16889, 'staticobjects/_exp08/dyod/mistmoore/dyod_cm_manacles_double_wall01', 1190), + (18092, 16890, 'staticobjects/_exp08/dyod/mistmoore/dyod_cm_manacles_double_wall02', 1190), + (18093, 16891, 'staticobjects/_exp08/dyod/mistmoore/dyod_cm_manacles_single_wall01', 1190), + (18094, 16892, 'staticobjects/_exp08/dyod/mistmoore/dyod_cm_manacles_single_wall02', 1190), + (18095, 16893, 'staticobjects/_exp08/dyod/mistmoore/dyod_cm_piano_bench01', 1190), + (18096, 16894, 'staticobjects/_exp08/dyod/mistmoore/dyod_cm_piano_closed01', 1190), + (18097, 16895, 'staticobjects/_exp08/dyod/mistmoore/dyod_cm_piano_open01', 1190), + (18098, 16896, 'staticobjects/_exp08/dyod/mistmoore/dyod_cm_scrolls_stack01', 1190), + (18099, 16897, 'staticobjects/_exp08/dyod/mistmoore/dyod_cm_scrolls_stack02', 1190), + (18100, 16898, 'staticobjects/_exp08/dyod/mistmoore/dyod_cm_table_bedside01', 1190), + (18101, 16899, 'staticobjects/_exp08/dyod/mistmoore/dyod_cm_table_coffee01', 1190), + (18102, 16900, 'staticobjects/_exp08/dyod/mistmoore/dyod_cm_table_endtable01_small', 1190), + (18103, 16901, 'staticobjects/_exp08/dyod/mistmoore/dyod_cm_table_hallway01', 1190), + (18104, 16902, 'staticobjects/_exp08/dyod/mistmoore/dyod_cm_table_long01', 1190), + (18105, 16903, 'staticobjects/_exp08/dyod/mistmoore/dyod_cm_table_magical01', 1190), + (18106, 16904, 'staticobjects/_exp08/dyod/mistmoore/dyod_cm_table_short01', 1190), + (18107, 16905, 'staticobjects/_exp08/dyod/dungeon_builder_enter_box', 1190), + (18108, 16906, 'staticobjects/shield/shard_of_love_shield_gold_dpo', 1190), + (18109, 16907, 'creatures/monsters/monitorlizard_orange_no_idle_sound', 1190), + (18110, 16908, 'staticobjects/freeport_combined/grozmok_pauldron_dpo', 1190), + (18111, 16909, 'staticobjects/pictures/freeport_painting01', 1190), + (18112, 16910, 'staticobjects/pictures/freeport_painting02', 1190), + (18113, 16911, 'staticobjects/pictures/freeport_painting03', 1190), + (18114, 16912, 'staticobjects/pictures/freeport_painting04', 1190), + (18115, 16913, 'staticobjects/pictures/freeport_painting05', 1190), + (18116, 16914, 'staticobjects/pictures/freeport_painting06', 1190), + (18117, 16915, 'staticobjects/pictures/freeport_painting07', 1190), + (18118, 16916, 'staticobjects/_exp08/dyod/chardok/dyod_char_banner_dizok01', 1190), + (18119, 16917, 'staticobjects/_exp08/dyod/chardok/dyod_char_banner_dizok02', 1190), + (18120, 16918, 'staticobjects/_exp08/dyod/chardok/dyod_char_bed_sarnak_bunk01', 1190), + (18121, 16919, 'staticobjects/_exp08/dyod/chardok/dyod_char_bed_sarnak_bunk02', 1190), + (18122, 16920, 'staticobjects/_exp08/dyod/chardok/dyod_char_book01_dizok', 1190), + (18123, 16921, 'staticobjects/_exp08/dyod/chardok/dyod_char_book02_korsha', 1190), + (18124, 16922, 'staticobjects/_exp08/dyod/chardok/dyod_char_book_single01', 1190), + (18125, 16923, 'staticobjects/_exp08/dyod/chardok/dyod_char_book_single02', 1190), + (18126, 16924, 'staticobjects/_exp08/dyod/chardok/dyod_char_bookcase01', 1190), + (18127, 16925, 'staticobjects/_exp08/dyod/chardok/dyod_char_bookcase01_empty01', 1190), + (18128, 16926, 'staticobjects/_exp08/dyod/chardok/dyod_char_bookcase02', 1190), + (18129, 16927, 'staticobjects/_exp08/dyod/chardok/dyod_char_bookcase02_empty01', 1190), + (18130, 16928, 'staticobjects/_exp08/dyod/chardok/dyod_char_chain_hook_empty_swinging', 1190), + (18131, 16929, 'staticobjects/_exp08/dyod/chardok/dyod_char_chain_hook_skull_swinging', 1190), + (18132, 16930, 'staticobjects/_exp08/dyod/chardok/dyod_char_chest_military01', 1190), + (18133, 16931, 'staticobjects/_exp08/dyod/chardok/dyod_char_chest_sarnak_treasure01', 1190), + (18134, 16932, 'staticobjects/_exp08/dyod/chardok/dyod_char_haypile01', 1190), + (18135, 16933, 'staticobjects/_exp08/dyod/chardok/dyod_char_hitchingpost_sokokar01', 1190), + (18136, 16934, 'staticobjects/_exp08/dyod/chardok/dyod_char_lantern_antibat01', 1190), + (18137, 16935, 'staticobjects/_exp08/dyod/chardok/dyod_char_lightsource_brazier01', 1190), + (18138, 16936, 'staticobjects/_exp08/dyod/chardok/dyod_char_lightsource_chandalier01', 1190), + (18139, 16937, 'staticobjects/_exp08/dyod/chardok/dyod_char_lightsource_iksarskull01', 1190), + (18140, 16938, 'staticobjects/_exp08/dyod/chardok/dyod_char_rug01', 1190), + (18141, 16939, 'staticobjects/_exp08/dyod/chardok/dyod_char_rug02', 1190), + (18142, 16940, 'staticobjects/_exp08/dyod/chardok/dyod_char_skull_dizok01', 1190), + (18143, 16941, 'staticobjects/_exp08/dyod/chardok/dyod_char_statue_sarnak01', 1190), + (18144, 16942, 'staticobjects/_exp08/dyod/chardok/dyod_char_statue_sarnak02', 1190), + (18145, 16943, 'staticobjects/_exp08/dyod/chardok/dyod_char_throne_korsha01', 1190), + (18146, 16944, 'staticobjects/_exp08/dyod/chardok/dyod_char_throne_table_tall01', 1190), + (18147, 16945, 'staticobjects/_exp08/dyod/chardok/dyod_char_totem01', 1190), + (18148, 16946, 'staticobjects/_exp08/dyod/chardok/dyod_char_totem02', 1190), + (18149, 16947, 'staticobjects/_exp08/dyod/chardok/dyod_char_totem_base01', 1190), + (18150, 16948, 'staticobjects/_exp08/dyod/chardok/dyod_char_totem_crystal01', 1190), + (18151, 16949, 'staticobjects/_exp08/dyod/chardok/dyod_char_totem_crystal01_colored', 1190), + (18152, 16950, 'staticobjects/_exp08/dyod/chardok/dyod_char_totem_crystal02_runes', 1190), + (18153, 16951, 'staticobjects/_exp08/dyod/chardok/dyod_char_totem_stone01', 1190), + (18154, 16952, 'staticobjects/_exp08/dyod/chardok/dyod_char_totem_stone02_norunes', 1190), + (18155, 16953, 'staticobjects/_exp08/dyod/chardok/dyod_char_totem_stonecrystal01', 1190), + (18156, 16954, 'staticobjects/_exp08/dyod/chardok/dyod_char_weaponrack_empty01', 1190), + (18157, 16955, 'staticobjects/_exp08/dyod/chardok/dyod_char_weaponrack_floor01', 1190), + (18158, 16956, 'staticobjects/_exp08/dyod/chardok/dyod_char_weaponrack_floor02', 1190), + (18159, 16957, 'accessories/wearable_items/snapons/backpacks/backpack_assassin_swivel/backpack_assassin_swivel_kinves', 1190), + (18160, 16958, '_exp08/characters/monsters/dragon_made_golem/dragon_made_golem_arcane', 1190), + (18161, 16959, '_exp08/characters/monsters/dragon_made_golem/dragon_made_golem_base', 1190), + (18162, 16960, '_exp08/characters/monsters/dragon_made_golem/dragon_made_golem_diplomatic', 1190), + (18163, 16961, '_exp09/characters/tool_users/musk_creeper_giants/musk_creeper_giant1', 1190), + (18164, 16962, '_exp09/characters/tool_users/musk_creeper_giants/musk_creeper_giant2', 1190), + (18165, 16963, '_exp09/characters/tool_users/musk_creeper_giants/musk_creeper_giant3', 1190), + (18166, 16964, 'creatures/mounts/frostfell_snow_cloud_housing', 1190), + (18167, 16965, '_exp08/characters/monsters/dragon_bone_golem/dragon_bone_golem_blue', 1190), + (18168, 16966, '_exp08/characters/monsters/dragon_bone_golem/dragon_bone_golem_red', 1190), + (18169, 16967, '_exp09/characters/monsters/queen_bug/queen_bug_blue', 1190), + (18170, 16968, '_exp09/characters/monsters/queen_bug/queen_bug_red', 1190), + (18171, 16969, 'accessories/wearable_items/_exp09/freeport_militia/vanguard/chest', 1190), + (18172, 16970, 'accessories/wearable_items/_exp09/freeport_militia/vanguard/epic_pauldron_left', 1190), + (18173, 16971, 'accessories/wearable_items/_exp09/freeport_militia/vanguard/epic_pauldron_right', 1190), + (18174, 16972, 'accessories/wearable_items/_exp09/freeport_militia/vanguard/feet', 1190), + (18175, 16973, 'accessories/wearable_items/_exp09/freeport_militia/vanguard/forearms', 1190), + (18176, 16974, 'accessories/wearable_items/_exp09/freeport_militia/vanguard/hands', 1190), + (18177, 16975, 'accessories/wearable_items/_exp09/freeport_militia/vanguard/head', 1190), + (18178, 16976, 'accessories/wearable_items/_exp09/freeport_militia/vanguard/head_epic', 1190), + (18179, 16977, 'accessories/wearable_items/_exp09/freeport_militia/vanguard/legs', 1190), + (18180, 16978, 'accessories/wearable_items/_exp09/freeport_militia/vanguard/legs_noskirt', 1190), + (18181, 16979, 'accessories/wearable_items/_exp09/freeport_militia/vanguard/right', 1190), + (18182, 16980, 'accessories/wearable_items/_exp09/freeport_militia/vanguard/shoulders', 1190), + (18183, 16981, 'accessories/wearable_items/_exp09/freeport_militia/vanguard/shoulders_epic', 1190), + (18184, 16982, 'accessories/wearable_items/_exp09/freeport_militia/vanguard/shoulders_nopauldrons', 1190), + (18185, 16983, 'accessories/wearable_items/_exp09/freeport_militia/vanguard/skirt', 1190), + (18186, 16984, 'accessories/wearable_items/cloak/exp09/cloak_freeport_militia', 1190), + (18187, 16985, 'accessories/wearable_items/_exp08/freeport_lucanknight/chest', 1190), + (18188, 16986, 'accessories/wearable_items/_exp08/freeport_lucanknight/cowl', 1190), + (18189, 16987, 'accessories/wearable_items/_exp08/freeport_lucanknight/feet', 1190), + (18190, 16988, 'accessories/wearable_items/_exp08/freeport_lucanknight/forearm_left', 1190), + (18191, 16989, 'accessories/wearable_items/_exp08/freeport_lucanknight/forearm_right', 1190), + (18192, 16990, 'accessories/wearable_items/_exp08/freeport_lucanknight/forearms', 1190), + (18193, 16991, 'accessories/wearable_items/_exp08/freeport_lucanknight/hands', 1190), + (18194, 16992, 'accessories/wearable_items/_exp08/freeport_lucanknight/hands_epic', 1190), + (18195, 16993, 'accessories/wearable_items/_exp08/freeport_lucanknight/head', 1190), + (18196, 16994, 'accessories/wearable_items/_exp08/freeport_lucanknight/head_epic', 1190), + (18197, 16995, 'accessories/wearable_items/_exp08/freeport_lucanknight/legs', 1190), + (18198, 16996, 'accessories/wearable_items/_exp08/freeport_lucanknight/legs_noskirt', 1190), + (18199, 16997, 'accessories/wearable_items/_exp08/freeport_lucanknight/pauldron_left', 1190), + (18200, 16998, 'accessories/wearable_items/_exp08/freeport_lucanknight/pauldron_right', 1190), + (18201, 16999, 'accessories/wearable_items/_exp08/freeport_lucanknight/right', 1190), + (18202, 17000, 'accessories/wearable_items/_exp08/freeport_lucanknight/shoulders', 1190), + (18203, 17001, 'accessories/wearable_items/_exp08/freeport_lucanknight/shoulders_epic', 1190), + (18204, 17002, 'accessories/wearable_items/_exp08/freeport_lucanknight/shoulders_nopauldrons', 1190), + (18205, 17003, 'accessories/wearable_items/_exp08/freeport_lucanknight/skirt', 1190), + (18206, 17004, 'accessories/wearable_items/cloak/exp09/cloak_arcane_science_incut', 1190), + (18207, 17005, 'accessories/wearable_items/cloak/exp09/cloak_arcane_science_scallop', 1190), + (18208, 17006, 'accessories/wearable_items/cloak/exp09/cloak_arcane_science_sq', 1190), + (18209, 17007, 'accessories/wearable_items/_exp09/robe_arcane_science/chest', 1190), + (18210, 17008, 'accessories/wearable_items/_exp09/robe_arcane_science/chest_epic', 1190), + (18211, 17009, 'accessories/wearable_items/_exp09/robe_arcane_science/feet', 1190), + (18212, 17010, 'accessories/wearable_items/_exp09/robe_arcane_science/hands', 1190), + (18213, 17011, 'accessories/wearable_items/_exp09/robe_arcane_science/head', 1190), + (18214, 17012, 'accessories/wearable_items/_exp09/robe_arcane_science/head_collar_flared', 1190), + (18215, 17013, 'accessories/wearable_items/_exp09/robe_arcane_science/pants', 1190), + (18216, 17014, 'accessories/wearable_items/_exp09/robe_arcane_science/pauldron_left', 1190), + (18217, 17015, 'accessories/wearable_items/_exp09/robe_arcane_science/pauldron_right', 1190), + (18218, 17016, 'accessories/wearable_items/_exp09/robe_arcane_science/skirt', 1190), + (18219, 17017, 'accessories/wearable_items/cloak/exp08/cloak_freeportknight_epic', 1190), + (18220, 17018, 'accessories/wearable_items/cloak/exp08/cloak_freeportknight', 1190), + (18221, 17019, 'accessories/wearable_items/cloak/exp08/cloak_freeportknight_npc', 1190), + (18222, 17020, 'accessories/wearable_items/_exp09/chain_dismal_rage/chest', 1190), + (18223, 17021, 'accessories/wearable_items/_exp09/chain_dismal_rage/feet', 1190), + (18224, 17022, 'accessories/wearable_items/_exp09/chain_dismal_rage/forearms', 1190), + (18225, 17023, 'accessories/wearable_items/_exp09/chain_dismal_rage/hands', 1190), + (18226, 17024, 'accessories/wearable_items/_exp09/chain_dismal_rage/head', 1190), + (18227, 17025, 'accessories/wearable_items/_exp09/chain_dismal_rage/head_hood', 1190), + (18228, 17026, 'accessories/wearable_items/_exp09/chain_dismal_rage/legs', 1190), + (18229, 17027, 'accessories/wearable_items/_exp09/chain_dismal_rage/legs_noskirt', 1190), + (18230, 17028, 'accessories/wearable_items/_exp09/chain_dismal_rage/pauldron_left_dismal_rage', 1190), + (18231, 17029, 'accessories/wearable_items/_exp09/chain_dismal_rage/pauldron_right_dismal_rage', 1190), + (18232, 17030, 'accessories/wearable_items/_exp09/chain_dismal_rage/shoulders', 1190), + (18233, 17031, 'accessories/wearable_items/_exp09/chain_dismal_rage/shoulders_epic', 1190), + (18234, 17032, 'accessories/wearable_items/_exp09/chain_dismal_rage/skirt', 1190), + (18235, 17033, 'accessories/wearable_items/cloak/exp09/cloak_dismal_rage', 1190), + (18236, 17034, 'accessories/wearable_items/cloak/exp09/cloak_dismal_rage_incut', 1190), + (18237, 17035, 'accessories/wearable_items/_exp09/seafury_buccaneer/heavycloth/chest', 1190), + (18238, 17036, 'accessories/wearable_items/_exp09/seafury_buccaneer/heavycloth/feet', 1190), + (18239, 17037, 'accessories/wearable_items/_exp09/seafury_buccaneer/heavycloth/feet_peg_left', 1190), + (18240, 17038, 'accessories/wearable_items/_exp09/seafury_buccaneer/heavycloth/feet_peg_right', 1190), + (18241, 17039, 'accessories/wearable_items/_exp09/seafury_buccaneer/heavycloth/forearms', 1190), + (18242, 17040, 'accessories/wearable_items/_exp09/seafury_buccaneer/heavycloth/hands', 1190), + (18243, 17041, 'accessories/wearable_items/_exp09/seafury_buccaneer/heavycloth/head', 1190), + (18244, 17042, 'accessories/wearable_items/_exp09/seafury_buccaneer/heavycloth/head_captain', 1190), + (18245, 17043, 'accessories/wearable_items/_exp09/seafury_buccaneer/heavycloth/head_swashbuckler', 1190), + (18246, 17044, 'accessories/wearable_items/_exp09/seafury_buccaneer/heavycloth/legs', 1190), + (18247, 17045, 'accessories/wearable_items/_exp09/seafury_buccaneer/heavycloth/shoulders', 1190), + (18248, 17046, 'accessories/wearable_items/_exp09/seafury_buccaneer/heavycloth/skirt', 1190), + (18249, 17047, 'accessories/wearable_items/cloak/exp09/cloak_seafury_buccaneer', 1190), + (18250, 17048, '_exp09/characters/monsters/wyvern_updated/wyvern_updated_greenyellow', 1190), + (18251, 17049, '_exp09/characters/monsters/wyvern_updated/wyvern_updated_ice', 1190), + (18252, 17050, '_exp09/characters/monsters/wyvern_updated/wyvern_updated_natural', 1190), + (18253, 17051, '_exp09/characters/monsters/wyvern_updated/wyvern_updated_redgray', 1190), + (18254, 17052, '_exp09/characters/monsters/wyvern_updated/wyvern_updated_sand', 1190), + (18255, 17053, '_exp09/characters/monsters/wyvern_updated/wyvern_updated_shadow', 1190), + (18256, 17054, '_exp04/monsters/xygoz01', 1190), + (18257, 17055, '_exp04/monsters/dragon_skeleton01', 1190), + (18258, 17056, '_exp04/monsters/hoshkar01', 1190), + (18259, 17057, '_exp04/monsters/nexona01', 1190), + (18260, 17058, '_exp04/monsters/xygoz_fire01', 1190), + (18261, 17059, '_exp04/monsters/xygoz_shade01', 1190), + (18262, 17060, '_exp04/monsters/xygoz_spirit01', 1190), + (18263, 17061, '_exp08/characters/monsters/dragon_bone_golem/dragon_bone_golem', 1190), + (18264, 17062, '_exp08/characters/monsters/dragon_made_golem/dragon_made_golem_boss', 1190), + (18265, 17063, 'staticobjects/pillow/drv_pillow_seat_weights01', 1190), + (18266, 17064, 'staticobjects/pillow/drv_pillow_seat_weights02', 1190), + (18267, 17065, 'staticobjects/pillow/slove02_drapery_houseitem01', 1190), + (18268, 17066, 'staticobjects/benches/slove02_flame_bench01', 1190), + (18269, 17067, '_exp09/characters/monsters/cobalt_scar_bear/timber_bear_black', 1190), + (18270, 17068, '_exp09/characters/monsters/cobalt_scar_bear/timber_bear_brown', 1190), + (18271, 17069, '_exp09/characters/monsters/cobalt_scar_bear/timber_bear_grey', 1190), + (18272, 17070, '_exp08/characters/tool_users/chitari/chitari_male_heavy02', 1190), + (18273, 17071, '_exp08/characters/tool_users/chitari/chitari_male_light02', 1190), + (18274, 17072, '_exp08/characters/tool_users/chitari/chitari_swivel_skull', 1190), + (18275, 17073, 'staticobjects/liveevent/erollisi_objects/dpo_bauble_bow_string_daisy_purple', 1190), + (18276, 17074, 'staticobjects/liveevent/erollisi_objects/dpo_bauble_bow_string_mums_red', 1190), + (18277, 17075, 'staticobjects/liveevent/erollisi_objects/dpo_bauble_rose_purple', 1190), + (18278, 17076, 'staticobjects/liveevent/erollisi_objects/dpo_bauble_rose_red', 1190), + (18279, 17077, 'staticobjects/liveevent/erollisi_objects/dpo_bauble_string_lights_hearts', 1190), + (18280, 17078, 'staticobjects/liveevent/erollisi_objects/dpo_bauble_string_lights_roses', 1190), + (18281, 17079, 'staticobjects/urns/dpo_slove02_vase01', 1190), + (18282, 17080, 'staticobjects/urns/dpo_slove02_vase02', 1190), + (18283, 17081, 'staticobjects/urns/dpo_slove02_vase03', 1190), + (18284, 17082, 'creatures/mounts/drakota_mount/drakota_mount_black', 1190), + (18285, 17083, 'creatures/mounts/drakota_mount/drakota_mount_blue', 1190), + (18286, 17084, 'creatures/mounts/drakota_mount/drakota_mount_green', 1190), + (18287, 17085, 'creatures/mounts/drakota_mount/drakota_mount_red', 1190), + (18288, 17086, 'staticobjects/liveevent/erollisi_objects/othmir_heartpillow_brown', 1190), + (18289, 17087, 'staticobjects/liveevent/erollisi_objects/othmir_heartpillow_white', 1190), + (18290, 17088, 'staticobjects/soe_wallet/building_blocks/ice/houseblock_1x1_column_ice', 1190), + (18291, 17089, 'staticobjects/soe_wallet/building_blocks/ice/houseblock_1x2_column_ice', 1190), + (18292, 17090, 'staticobjects/soe_wallet/building_blocks/ice/houseblock_1x2_divider_ice', 1190), + (18293, 17091, 'staticobjects/soe_wallet/building_blocks/ice/houseblock_1xhalf_ice', 1190), + (18294, 17092, 'staticobjects/soe_wallet/building_blocks/ice/houseblock_2x2_divider_ice', 1190), + (18295, 17093, 'staticobjects/soe_wallet/building_blocks/ice/houseblock_rail_ice', 1190), + (18296, 17094, 'staticobjects/soe_wallet/building_blocks/ice/houseblock_roundtile_ice', 1190), + (18297, 17095, 'staticobjects/soe_wallet/building_blocks/ice/houseblock_stair_ice', 1190), + (18298, 17096, 'staticobjects/soe_wallet/building_blocks/ice/housecube_1x1_block_ice', 1190), + (18299, 17097, 'staticobjects/soe_wallet/building_blocks/los_metal/houseblock_1x1_column_los_metal', 1190), + (18300, 17098, 'staticobjects/soe_wallet/building_blocks/los_metal/houseblock_1x2_column_los_metal', 1190), + (18301, 17099, 'staticobjects/soe_wallet/building_blocks/los_metal/houseblock_1x2_divider_los_metal', 1190), + (18302, 17100, 'staticobjects/soe_wallet/building_blocks/los_metal/houseblock_1xhalf_los_metal', 1190), + (18303, 17101, 'staticobjects/soe_wallet/building_blocks/los_metal/houseblock_2x2_divider_los_metal', 1190), + (18304, 17102, 'staticobjects/soe_wallet/building_blocks/los_metal/houseblock_rail_los_metal', 1190), + (18305, 17103, 'staticobjects/soe_wallet/building_blocks/los_metal/houseblock_roundtile_los_metal', 1190), + (18306, 17104, 'staticobjects/soe_wallet/building_blocks/los_metal/houseblock_stair_los_metal', 1190), + (18307, 17105, 'staticobjects/soe_wallet/building_blocks/los_metal/housecube_1x1_block_los_metal', 1190), + (18308, 17106, 'staticobjects/soe_wallet/building_blocks/qey_stone2/houseblock_1x1_column_stone2', 1190), + (18309, 17107, 'staticobjects/soe_wallet/building_blocks/qey_stone2/houseblock_1x2_column_stone2', 1190), + (18310, 17108, 'staticobjects/soe_wallet/building_blocks/qey_stone2/houseblock_1x2_dividerblock_stone2', 1190), + (18311, 17109, 'staticobjects/soe_wallet/building_blocks/qey_stone2/houseblock_1xhalf_block_stone2', 1190), + (18312, 17110, 'staticobjects/soe_wallet/building_blocks/qey_stone2/houseblock_2x2_divider_stone2', 1190), + (18313, 17111, 'staticobjects/soe_wallet/building_blocks/qey_stone2/houseblock_rail_stone2', 1190), + (18314, 17112, 'staticobjects/soe_wallet/building_blocks/qey_stone2/houseblock_roundtile_stone2', 1190), + (18315, 17113, 'staticobjects/soe_wallet/building_blocks/qey_stone2/houseblock_stair_stone2', 1190), + (18316, 17114, 'staticobjects/soe_wallet/building_blocks/qey_stone2/housecube_1x1_block_stone2', 1190), + (18317, 17115, 'staticobjects/soe_wallet/building_blocks/red_marble/houseblock_1x1_column_redmarble', 1190), + (18318, 17116, 'staticobjects/soe_wallet/building_blocks/red_marble/houseblock_1x2_column_redmarble', 1190), + (18319, 17117, 'staticobjects/soe_wallet/building_blocks/red_marble/houseblock_1x2_divider_redmarble', 1190), + (18320, 17118, 'staticobjects/soe_wallet/building_blocks/red_marble/houseblock_1xhalf_block_redmarble', 1190), + (18321, 17119, 'staticobjects/soe_wallet/building_blocks/red_marble/houseblock_2x2_divider_redmarble', 1190), + (18322, 17120, 'staticobjects/soe_wallet/building_blocks/red_marble/houseblock_rail_redmarble', 1190), + (18323, 17121, 'staticobjects/soe_wallet/building_blocks/red_marble/houseblock_roundtile_redmarble', 1190), + (18324, 17122, 'staticobjects/soe_wallet/building_blocks/red_marble/houseblock_stair_redmarble', 1190), + (18325, 17123, 'staticobjects/soe_wallet/building_blocks/red_marble/housecube_1x1_block_redmarble', 1190), + (18326, 17124, 'staticobjects/panels/dpo_neriak_roof', 1190), + (18327, 17125, 'staticobjects/soe_wallet/grandfather_clock', 1190), + (18328, 17126, '_exp09/characters/monsters/cobalt_scar_bear/timber_bear_red', 1190), + (18329, 17127, '_exp09/characters/monsters/cobalt_scar_bear/timber_bear_white', 1190), + (18330, 17128, 'staticobjects/soe_wallet/building_blocks/los_metal/panel_los_metal', 1190), + (18331, 17129, 'staticobjects/soe_wallet/building_blocks/qey_stone2/panel_stone2', 1190), + (18332, 17130, 'staticobjects/soe_wallet/building_blocks/ice/panel_ice', 1190), + (18333, 17131, 'creatures/mounts/class_hover_pads/hover_pad_beastlord', 1190), + (18334, 17132, 'creatures/mounts/drakota_mount/drakota_mount_base', 1190), + (18335, 17133, '_exp09/characters/tool_users/dracurion_palladin/dracurion_palladin', 1190), + (18336, 17134, '_exp09/characters/tool_users/dracurion_shadowknight/dracurion_shadowknight', 1190), + (18337, 17135, 'staticobjects/shield/dpo_sc_exp08_shield_nature', 1190), + (18338, 17136, 'staticobjects/shield/dpo_sc_exp08_shield_vjornir', 1190), + (18339, 17137, 'accessories/wearable_items/_exp08/highelf_heritage_armor/lon/chest', 1190), + (18340, 17138, 'accessories/wearable_items/_exp08/highelf_heritage_armor/lon/forearms_wristbands', 1190), + (18341, 17139, 'accessories/wearable_items/_exp08/highelf_heritage_armor/lon/hands', 1190), + (18342, 17140, 'accessories/wearable_items/_exp08/highelf_heritage_armor/lon/legs', 1190), + (18343, 17141, 'accessories/wearable_items/_exp08/highelf_heritage_armor/lon/legs_robe_skirt', 1190), + (18344, 17142, 'accessories/wearable_items/_exp08/highelf_heritage_armor/lon/shoulder_armband_male', 1190), + (18345, 17143, 'accessories/wearable_items/_exp08/highelf_heritage_armor/lon/sash_version/legs', 1190), + (18346, 17144, 'accessories/wearable_items/_exp08/highelf_heritage_armor/lon/sash_version/chest', 1190), + (18347, 17145, 'accessories/wearable_items/_exp08/highelf_heritage_armor/lon/sash_version/chest_pendant', 1190), + (18348, 17146, 'accessories/wearable_items/_exp08/highelf_heritage_armor/lon/sash_version/hands', 1190), + (18349, 17147, 'accessories/wearable_items/_exp08/highelf_heritage_armor/robe/skirt', 1190), + (18350, 17148, 'accessories/wearable_items/_exp08/highelf_heritage_armor/robe/chest', 1190), + (18351, 17149, 'accessories/wearable_items/_exp08/highelf_heritage_armor/robe/chest_pauldrons', 1190), + (18352, 17150, 'accessories/wearable_items/_exp08/highelf_heritage_armor/robe/feet', 1190), + (18353, 17151, 'accessories/wearable_items/_exp08/highelf_heritage_armor/robe/hands', 1190), + (18354, 17152, 'accessories/wearable_items/_exp08/highelf_heritage_armor/robe/head', 1190), + (18355, 17153, 'accessories/wearable_items/_exp08/highelf_heritage_armor/robe/pants', 1190), + (18356, 17154, 'accessories/wearable_items/_exp08/highelf_heritage_armor/snapons/shoulder_armband_male_right', 1190), + (18357, 17155, 'accessories/wearable_items/_exp08/highelf_heritage_armor/snapons/forearm_wristband_male_left', 1190), + (18358, 17156, 'accessories/wearable_items/_exp08/highelf_heritage_armor/snapons/forearm_wristband_male_right', 1190), + (18359, 17157, 'accessories/wearable_items/_exp08/highelf_heritage_armor/station_cash_full_set/chest', 1190), + (18360, 17158, 'accessories/wearable_items/_exp08/highelf_heritage_armor/snapons/head_highelf_heritage_tiara', 1190), + (18361, 17159, 'accessories/wearable_items/_exp08/highelf_heritage_armor/snapons/highelf_heritage_pauldrons_left', 1190), + (18362, 17160, 'accessories/wearable_items/_exp08/highelf_heritage_armor/snapons/highelf_heritage_pauldrons_right', 1190), + (18363, 17161, 'accessories/wearable_items/_exp08/highelf_heritage_armor/snapons/highelf_heritage_pendant', 1190), + (18364, 17162, 'accessories/wearable_items/_exp08/highelf_heritage_armor/snapons/shoulder_armband_female_right', 1190), + (18365, 17163, 'accessories/wearable_items/_exp08/highelf_heritage_armor/snapons/shoulder_armband_male_left', 1190), + (18366, 17164, 'accessories/wieldable_items/weapons/exp08/1h_crush/mace_satyr_witheringlands', 1190), + (18367, 17165, 'accessories/wieldable_items/weapons/exp08/1h_sword/exp08_sword_satyr_witheringlands', 1190), + (18368, 17166, 'accessories/wieldable_items/weapons/exp08/staff/exp08_staff_satyr_witheringlands', 1190), + (18369, 17167, 'accessories/wieldable_items/weapons/exp08/staff/exp08_staff_satyr_witheringlands_swivel', 1190), + (18370, 17168, 'accessories/wieldable_items/weapons/exp08/staff/exp08_staff_satyr_witheringlands_ornament_swival_02', 1190), + (18371, 17169, 'accessories/wieldable_items/weapons/exp08/staff/exp08_staff_satyr_witheringlands_ornament_swival_01', 1190), + (18372, 17170, '_exp08/characters/tool_users/satyr_witheringlands/satyr_boss', 1190), + (18373, 17171, '_exp08/characters/tool_users/satyr_witheringlands/satyr_01', 1190), + (18374, 17172, '_exp08/characters/tool_users/satyr_witheringlands/satyr_02', 1190), + (18375, 17173, '_exp08/characters/tool_users/satyr_witheringlands/satyr_03', 1190), + (18376, 17174, '_exp08/characters/tool_users/satyr_witheringlands/satyr_boss02', 1190), + (18377, 17175, 'accessories/wearable_items/_exp08/highelf_heritage_armor/station_cash_full_set/feet', 1190), + (18378, 17176, 'accessories/wearable_items/_exp08/highelf_heritage_armor/station_cash_full_set/forearms', 1190), + (18379, 17177, 'accessories/wearable_items/_exp08/highelf_heritage_armor/station_cash_full_set/head', 1190), + (18380, 17178, 'accessories/wearable_items/_exp08/highelf_heritage_armor/station_cash_full_set/legs', 1190), + (18381, 17179, 'accessories/wearable_items/_exp08/highelf_heritage_armor/station_cash_full_set/shoulders', 1190), + (18382, 17180, 'accessories/wearable_items/_exp08/highelf_heritage_armor/chain/chest', 1190), + (18383, 17181, 'accessories/wearable_items/_exp08/highelf_heritage_armor/chain/feet', 1190), + (18384, 17182, 'accessories/wearable_items/_exp08/highelf_heritage_armor/chain/forearms', 1190), + (18385, 17183, 'accessories/wearable_items/_exp08/highelf_heritage_armor/chain/hands', 1190), + (18386, 17184, 'accessories/wearable_items/_exp08/highelf_heritage_armor/chain/head', 1190), + (18387, 17185, 'accessories/wearable_items/_exp08/highelf_heritage_armor/chain/legs', 1190), + (18388, 17186, 'accessories/wearable_items/_exp08/highelf_heritage_armor/chain/legs_noskirt', 1190), + (18389, 17187, 'accessories/wearable_items/_exp08/highelf_heritage_armor/chain/shoulders', 1190), + (18390, 17188, 'accessories/wearable_items/_exp08/highelf_heritage_armor/chain/skirt', 1190), + (18391, 17189, 'staticobjects/beds/drunder_sullon_bed_blue', 1190), + (18392, 17190, 'staticobjects/beds/drunder_sullon_bed_gold', 1190), + (18393, 17191, 'staticobjects/beds/drunder_sullon_bed_pink', 1190), + (18394, 17192, 'staticobjects/beds/drunder_sullon_bed_red', 1190), + (18395, 17193, 'staticobjects/beds/drunder_sullon_bed_teal', 1190), + (18396, 17194, 'staticobjects/soe_wallet/drunder_sullon_bed_white', 1190), + (18397, 17195, 'staticobjects/soe_wallet/drunder_sullon_bed_black', 1190), + (18398, 17196, 'staticobjects/soe_wallet/drunder_sullon_bed', 1190), + (18399, 17197, 'accessories/wearable_items/_exp09/dracurion_player_usable/snapons/dracurion_paladin_foot_left', 1190), + (18400, 17198, 'accessories/wearable_items/_exp09/dracurion_player_usable/snapons/dracurion_paladin_foot_right', 1190), + (18401, 17199, 'accessories/wearable_items/_exp09/dracurion_player_usable/snapons/dracurion_paladin_forearm_left', 1190), + (18402, 17200, 'accessories/wearable_items/_exp09/dracurion_player_usable/snapons/dracurion_paladin_forearm_right', 1190), + (18403, 17201, 'accessories/wearable_items/_exp09/dracurion_player_usable/snapons/dracurion_paladin_pauldron_left', 1190), + (18404, 17202, 'accessories/wearable_items/_exp09/dracurion_player_usable/snapons/dracurion_paladin_pauldron_right', 1190), + (18405, 17203, 'accessories/wearable_items/_exp09/dracurion_player_usable/snapons/dracurion_paladin_pauldron2_left', 1190), + (18406, 17204, 'accessories/wearable_items/_exp09/dracurion_player_usable/snapons/dracurion_paladin_pauldron2_right', 1190), + (18407, 17205, 'accessories/wearable_items/_exp09/dracurion_player_usable/snapons/dracurion_paladin_shin_left', 1190), + (18408, 17206, 'accessories/wearable_items/_exp09/dracurion_player_usable/snapons/dracurion_paladin_shin_right', 1190), + (18409, 17207, 'accessories/wearable_items/_exp09/dracurion_player_usable/snapons/dracurion_shadowknight_forearm_left', 1190), + (18410, 17208, 'accessories/wearable_items/_exp09/dracurion_player_usable/snapons/dracurion_shadowknight_forearm_right', 1190), + (18411, 17209, 'accessories/wearable_items/_exp09/dracurion_player_usable/snapons/dracurion_shadowknight_pauldron_left', 1190), + (18412, 17210, 'accessories/wearable_items/_exp09/dracurion_player_usable/snapons/dracurion_shadowknight_pauldron_right', 1190), + (18413, 17211, 'accessories/wearable_items/_exp09/dracurion_player_usable/snapons/dracurion_shadowknight_pauldron2_left', 1190), + (18414, 17212, 'accessories/wearable_items/_exp09/dracurion_player_usable/snapons/dracurion_shadowknight_pauldron2_right', 1190), + (18415, 17213, 'accessories/wearable_items/_exp09/dracurion_player_usable/snapons/dracurion_shadowknight_shin_left', 1190), + (18416, 17214, 'accessories/wearable_items/_exp09/dracurion_player_usable/snapons/dracurion_shadowknight_shin_right', 1190), + (18417, 17215, 'accessories/wearable_items/_exp09/dracurion_player_usable/vanguard/chest', 1190), + (18418, 17216, 'accessories/wearable_items/_exp09/dracurion_player_usable/vanguard/feet', 1190), + (18419, 17217, 'accessories/wearable_items/_exp09/dracurion_player_usable/vanguard/feet_epic', 1190), + (18420, 17218, 'accessories/wearable_items/_exp09/dracurion_player_usable/vanguard/forearms', 1190), + (18421, 17219, 'accessories/wearable_items/_exp09/dracurion_player_usable/vanguard/hands', 1190), + (18422, 17220, 'accessories/wearable_items/_exp09/dracurion_player_usable/vanguard/hands_epic', 1190), + (18423, 17221, 'accessories/wearable_items/_exp09/dracurion_player_usable/vanguard/head', 1190), + (18424, 17222, 'accessories/wearable_items/_exp09/dracurion_player_usable/vanguard/left', 1190), + (18425, 17223, 'accessories/wearable_items/_exp09/dracurion_player_usable/vanguard/legs', 1190), + (18426, 17224, 'accessories/wearable_items/_exp09/dracurion_player_usable/vanguard/legs_epic', 1190), + (18427, 17225, 'accessories/wearable_items/_exp09/dracurion_player_usable/vanguard/legs_noskirt', 1190), + (18428, 17226, 'accessories/wearable_items/_exp09/dracurion_player_usable/vanguard/right', 1190), + (18429, 17227, 'accessories/wearable_items/_exp09/dracurion_player_usable/vanguard/shoulders', 1190), + (18430, 17228, 'accessories/wearable_items/_exp09/dracurion_player_usable/vanguard/shoulders_epic', 1190), + (18431, 17229, 'accessories/wearable_items/_exp09/dracurion_player_usable/vanguard/shoulders_nopauldrons', 1190), + (18432, 17230, 'accessories/wearable_items/_exp09/dracurion_player_usable/vanguard/skirt', 1190), + (18433, 17231, 'accessories/wearable_items/_exp09/dracurion_player_usable/vanguard2/chest', 1190), + (18434, 17232, 'accessories/wearable_items/_exp09/dracurion_player_usable/vanguard2/feet', 1190), + (18435, 17233, 'accessories/wearable_items/_exp09/dracurion_player_usable/vanguard2/forearms', 1190), + (18436, 17234, 'accessories/wearable_items/_exp09/dracurion_player_usable/vanguard2/hands', 1190), + (18437, 17235, 'accessories/wearable_items/_exp09/dracurion_player_usable/vanguard2/hands_epic', 1190), + (18438, 17236, 'accessories/wearable_items/_exp09/dracurion_player_usable/vanguard2/head', 1190), + (18439, 17237, 'accessories/wearable_items/_exp09/dracurion_player_usable/vanguard2/left', 1190), + (18440, 17238, 'accessories/wearable_items/_exp09/dracurion_player_usable/vanguard2/legs', 1190), + (18441, 17239, 'accessories/wearable_items/_exp09/dracurion_player_usable/vanguard2/legs_epic', 1190), + (18442, 17240, 'accessories/wearable_items/_exp09/dracurion_player_usable/vanguard2/legs_noskirt', 1190), + (18443, 17241, 'accessories/wearable_items/_exp09/dracurion_player_usable/vanguard2/right', 1190), + (18444, 17242, 'accessories/wearable_items/_exp09/dracurion_player_usable/vanguard2/shoulders', 1190), + (18445, 17243, 'accessories/wearable_items/_exp09/dracurion_player_usable/vanguard2/shoulders_epic', 1190), + (18446, 17244, 'accessories/wearable_items/_exp09/dracurion_player_usable/vanguard2/shoulders_nopauldrons', 1190), + (18447, 17245, 'accessories/wearable_items/_exp09/dracurion_player_usable/vanguard2/skirt', 1190), + (18448, 17246, 'staticobjects/building_blocks/adamantine/houseblock_1x1_column_qey_stone12', 1190), + (18449, 17247, 'staticobjects/building_blocks/adamantine/houseblock_1x2_column_qey_stone12', 1190), + (18450, 17248, 'staticobjects/building_blocks/adamantine/houseblock_1x2_dividerblock_qey_stone12', 1190), + (18451, 17249, 'staticobjects/building_blocks/adamantine/houseblock_1xhalf_block_qey_stone12', 1190), + (18452, 17250, 'staticobjects/building_blocks/adamantine/houseblock_2x2_dividerblock_qey_stone12', 1190), + (18453, 17251, 'staticobjects/building_blocks/adamantine/houseblock_rail_qey_stone12', 1190), + (18454, 17252, 'staticobjects/building_blocks/adamantine/houseblock_roundtile_qey_stone12', 1190), + (18455, 17253, 'staticobjects/building_blocks/adamantine/houseblock_stair_qey_stone12', 1190), + (18456, 17254, 'staticobjects/building_blocks/adamantine/housecube_1x1_block_qey_stone12', 1190), + (18457, 17255, 'staticobjects/building_blocks/ash/houseblock_1x1_column_blondwood', 1190), + (18458, 17256, 'staticobjects/building_blocks/ash/houseblock_1x2_column_blondwood', 1190), + (18459, 17257, 'staticobjects/building_blocks/ash/houseblock_1x2_dividerblock_blondwood', 1190), + (18460, 17258, 'staticobjects/building_blocks/ash/houseblock_1xhalf_block_blondwood', 1190), + (18461, 17259, 'staticobjects/building_blocks/ash/houseblock_2x2_dividerblock_blondwood', 1190), + (18462, 17260, 'staticobjects/building_blocks/ash/houseblock_rail_blondwood', 1190), + (18463, 17261, 'staticobjects/building_blocks/ash/houseblock_roundtile_blondwood', 1190), + (18464, 17262, 'staticobjects/building_blocks/ash/houseblock_stair_blondwood', 1190), + (18465, 17263, 'staticobjects/building_blocks/ash/housecube_1x1_block_blondwood', 1190), + (18466, 17264, 'staticobjects/building_blocks/briarwood/houseblock_1x1_column_marrwood', 1190), + (18467, 17265, 'staticobjects/building_blocks/briarwood/houseblock_1x2_column_marrwood', 1190), + (18468, 17266, 'staticobjects/building_blocks/briarwood/houseblock_1x2_dividerblock_marrwood', 1190), + (18469, 17267, 'staticobjects/building_blocks/briarwood/houseblock_1xhalf_block_marrwood', 1190), + (18470, 17268, 'staticobjects/building_blocks/briarwood/houseblock_2x2_dividerblock_marrwood', 1190), + (18471, 17269, 'staticobjects/building_blocks/briarwood/houseblock_rail_marrwood', 1190), + (18472, 17270, 'staticobjects/building_blocks/briarwood/houseblock_roundtile_marrwood', 1190), + (18473, 17271, 'staticobjects/building_blocks/briarwood/houseblock_stair_marrwood', 1190), + (18474, 17272, 'staticobjects/building_blocks/briarwood/housecube_1x1_block_marrwood', 1190), + (18475, 17273, 'staticobjects/building_blocks/elm/houseblock_1x1_column_weathereddark', 1190), + (18476, 17274, 'staticobjects/building_blocks/elm/houseblock_1x2_column_weathereddark', 1190), + (18477, 17275, 'staticobjects/building_blocks/elm/houseblock_1x2_dividerblock_weathereddark', 1190), + (18478, 17276, 'staticobjects/building_blocks/elm/houseblock_1xhalf_block_weathereddark', 1190), + (18479, 17277, 'staticobjects/building_blocks/elm/houseblock_2x2_dividerblock_weathereddark', 1190), + (18480, 17278, 'staticobjects/building_blocks/elm/houseblock_rail_weathereddark', 1190), + (18481, 17279, 'staticobjects/building_blocks/elm/houseblock_roundtile_weathereddark', 1190), + (18482, 17280, 'staticobjects/building_blocks/elm/houseblock_stair_weathereddark', 1190), + (18483, 17281, 'staticobjects/building_blocks/elm/housecube_1x1_block_weathereddark', 1190), + (18484, 17282, 'staticobjects/building_blocks/fulginate/houseblock_1x1_column_qey_stone14', 1190), + (18485, 17283, 'staticobjects/building_blocks/fulginate/houseblock_1x2_column_qey_stone14', 1190), + (18486, 17284, 'staticobjects/building_blocks/fulginate/houseblock_1x2_dividerblock_qey_stone14', 1190), + (18487, 17285, 'staticobjects/building_blocks/fulginate/houseblock_1xhalf_block_qey_stone14', 1190), + (18488, 17286, 'staticobjects/building_blocks/fulginate/houseblock_2x2_dividerblock_qey_stone14', 1190), + (18489, 17287, 'staticobjects/building_blocks/fulginate/houseblock_rail_qey_stone14', 1190), + (18490, 17288, 'staticobjects/building_blocks/fulginate/houseblock_roundtile_qey_stone14', 1190), + (18491, 17289, 'staticobjects/building_blocks/fulginate/houseblock_stair_qey_stone14', 1190), + (18492, 17290, 'staticobjects/building_blocks/fulginate/housecube_1x1_block_qey_stone14', 1190), + (18493, 17291, 'staticobjects/building_blocks/maple/houseblock_1x1_column_brownwood', 1190), + (18494, 17292, 'staticobjects/building_blocks/maple/houseblock_1x2_column_brownwood', 1190), + (18495, 17293, 'staticobjects/building_blocks/maple/houseblock_1x2_dividerblock_brownwood', 1190), + (18496, 17294, 'staticobjects/building_blocks/maple/houseblock_1xhalf_block_brownwood', 1190), + (18497, 17295, 'staticobjects/building_blocks/maple/houseblock_2x2_dividerblock_brownwood', 1190), + (18498, 17296, 'staticobjects/building_blocks/maple/houseblock_rail_brownwood', 1190), + (18499, 17297, 'staticobjects/building_blocks/maple/houseblock_roundtile_brownwood', 1190), + (18500, 17298, 'staticobjects/building_blocks/maple/houseblock_stair_brownwood', 1190), + (18501, 17299, 'staticobjects/building_blocks/maple/housecube_1x1_block_brownwood', 1190), + (18502, 17300, 'staticobjects/building_blocks/mossybriarwood/houseblock_1x1_column_mossywood', 1190), + (18503, 17301, 'staticobjects/building_blocks/mossybriarwood/houseblock_1x2_column_mossywood', 1190), + (18504, 17302, 'staticobjects/building_blocks/mossybriarwood/houseblock_1x2_dividerblock_mossywood', 1190), + (18505, 17303, 'staticobjects/building_blocks/mossybriarwood/houseblock_1xhalf_block_mossywood', 1190), + (18506, 17304, 'staticobjects/building_blocks/mossybriarwood/houseblock_2x2_dividerblock_mossywood', 1190), + (18507, 17305, 'staticobjects/building_blocks/mossybriarwood/houseblock_rail_mossywood', 1190), + (18508, 17306, 'staticobjects/building_blocks/mossybriarwood/houseblock_roundtile_mossywood', 1190), + (18509, 17307, 'staticobjects/building_blocks/mossybriarwood/houseblock_stair_mossywood', 1190), + (18510, 17308, 'staticobjects/building_blocks/mossybriarwood/housecube_1x1_block_mossywood', 1190), + (18511, 17309, 'staticobjects/building_blocks/redwood/houseblock_1x1_column_tablenoplanks', 1190), + (18512, 17310, 'staticobjects/building_blocks/redwood/houseblock_1x2_column_tablenoplanks', 1190), + (18513, 17311, 'staticobjects/building_blocks/redwood/houseblock_1x2_dividerblock_tablenoplanks', 1190), + (18514, 17312, 'staticobjects/building_blocks/redwood/houseblock_1xhalf_block_tablenoplanks', 1190), + (18515, 17313, 'staticobjects/building_blocks/redwood/houseblock_2x2_dividerblock_tablenoplanks', 1190), + (18516, 17314, 'staticobjects/building_blocks/redwood/houseblock_rail_tablenoplanks', 1190), + (18517, 17315, 'staticobjects/building_blocks/redwood/houseblock_roundtile_tablenoplanks', 1190), + (18518, 17316, 'staticobjects/building_blocks/redwood/houseblock_stair_tablenoplanks', 1190), + (18519, 17317, 'staticobjects/building_blocks/redwood/housecube_1x1_block_tablenoplanks', 1190), + (18520, 17318, 'staticobjects/building_blocks/sandalwood/houseblock_1x1_column_metalwood01', 1190), + (18521, 17319, 'staticobjects/building_blocks/sandalwood/houseblock_1x2_column_metalwood01', 1190), + (18522, 17320, 'staticobjects/building_blocks/sandalwood/houseblock_1x2_dividerblock_metalwood01', 1190), + (18523, 17321, 'staticobjects/building_blocks/sandalwood/houseblock_1xhalf_block_metalwood01', 1190), + (18524, 17322, 'staticobjects/building_blocks/sandalwood/houseblock_2x2_dividerblock_metalwood01', 1190), + (18525, 17323, 'staticobjects/building_blocks/sandalwood/houseblock_rail_metalwood01', 1190), + (18526, 17324, 'staticobjects/building_blocks/sandalwood/houseblock_roundtile_metalwood01', 1190), + (18527, 17325, 'staticobjects/building_blocks/sandalwood/houseblock_stair_metalwood01', 1190), + (18528, 17326, 'staticobjects/building_blocks/sandalwood/housecube_1x1_block_metalwood01', 1190), + (18529, 17327, 'staticobjects/building_blocks/sumac/houseblock_1x1_column_sumacwood', 1190), + (18530, 17328, 'staticobjects/building_blocks/sumac/houseblock_1x2_column_sumacwood', 1190), + (18531, 17329, 'staticobjects/building_blocks/sumac/houseblock_1x2_dividerblock_sumacwood', 1190), + (18532, 17330, 'staticobjects/building_blocks/sumac/houseblock_1xhalf_block_sumacwood', 1190), + (18533, 17331, 'staticobjects/building_blocks/sumac/houseblock_2x2_dividerblock_sumacwood', 1190), + (18534, 17332, 'staticobjects/building_blocks/sumac/houseblock_rail_sumacwood', 1190), + (18535, 17333, 'staticobjects/building_blocks/sumac/houseblock_roundtile_sumacwood', 1190), + (18536, 17334, 'staticobjects/building_blocks/sumac/houseblock_stair_sumacwood', 1190), + (18537, 17335, 'staticobjects/building_blocks/sumac/housecube_1x1_block_sumacwood', 1190), + (18538, 17336, 'staticobjects/building_blocks/teak/houseblock_1x1_column_wavywood', 1190), + (18539, 17337, 'staticobjects/building_blocks/teak/houseblock_1x2_column_wavywood', 1190), + (18540, 17338, 'staticobjects/building_blocks/teak/houseblock_1x2_dividerblock_wavywood', 1190), + (18541, 17339, 'staticobjects/building_blocks/teak/houseblock_1xhalf_block_wavywood', 1190), + (18542, 17340, 'staticobjects/building_blocks/teak/houseblock_2x2_dividerblock_wavywood', 1190), + (18543, 17341, 'staticobjects/building_blocks/teak/houseblock_rail_wavywood', 1190), + (18544, 17342, 'staticobjects/building_blocks/teak/houseblock_roundtile_wavywood', 1190), + (18545, 17343, 'staticobjects/building_blocks/teak/houseblock_stair_wavywood', 1190), + (18546, 17344, 'staticobjects/building_blocks/teak/housecube_1x1_block_wavywood', 1190), + (18547, 17345, '_exp09/characters/tool_users/dracurion_shadowknight/dracurion_shadowknight1', 1190), + (18548, 17346, '_exp09/characters/tool_users/dracurion_shadowknight/dracurion_shadowknight2', 1190), + (18549, 17347, '_exp09/characters/tool_users/dracurion_shadowknight/dracurion_shadowknight3', 1190), + (18550, 17348, '_exp09/characters/tool_users/dracurion_shadowknight/dracurion_shadowknight4', 1190), + (18551, 17349, '_exp09/characters/tool_users/dracurion_palladin/dracurion_palladin1', 1190), + (18552, 17350, '_exp09/characters/tool_users/dracurion_palladin/dracurion_palladin2', 1190), + (18553, 17351, '_exp09/characters/tool_users/dracurion_palladin/dracurion_palladin3', 1190), + (18554, 17352, '_exp09/characters/tool_users/dracurion_palladin/dracurion_palladin4', 1190), + (18555, 17353, '_exp09/characters/monsters/skyshrine_drake/skyshrine_drake_black', 1190), + (18556, 17354, '_exp09/characters/monsters/skyshrine_drake/skyshrine_drake_blue', 1190), + (18557, 17355, '_exp09/characters/monsters/skyshrine_drake/skyshrine_drake_gold', 1190), + (18558, 17356, '_exp09/characters/monsters/skyshrine_drake/skyshrine_drake_green', 1190), + (18559, 17357, '_exp09/characters/monsters/skyshrine_drake/skyshrine_drake_red', 1190), + (18560, 17358, 'accessories/wearable_items/cloak/exp08/cloak_high_elf_heritage', 1190), + (18561, 17359, 'staticobjects/liveevent/brew_day/dpo_fpalt_kitchen_muffinplate01', 1190), + (18562, 17360, 'staticobjects/liveevent/brew_day/dpo_fpalt_kitchen_mugplain01', 1190), + (18563, 17361, 'staticobjects/liveevent/brew_day/dpo_fpalt_kitchen_steinornate01', 1190), + (18564, 17362, 'staticobjects/liveevent/brew_day/dpo_fpalt_kitchen_winebottleplain02', 1190), + (18565, 17363, 'staticobjects/liveevent/brew_day/dpo_halfing_bar_rack_cups01', 1190), + (18566, 17364, 'staticobjects/liveevent/brew_day/dpo_halfing_distilery_sm01', 1190), + (18567, 17365, 'staticobjects/liveevent/brew_day/dpo_halfing_fermenting_tank01', 1190), + (18568, 17366, 'staticobjects/liveevent/bristlebane_day/dpo_fpalt_kitchen_winebottleornate01', 1190), + (18569, 17367, 'staticobjects/liveevent/bristlebane_day/dpo_fpalt_kitchen_winebottleplain01', 1190), + (18570, 17368, 'staticobjects/liveevent/bristlebane_day/dpo_runny_table_sm_meat01', 1190), + (18571, 17369, 'staticobjects/soe_wallet/building_blocks/blackmarble/houseblock_1x1_column_blackmarble', 1190), + (18572, 17370, 'staticobjects/soe_wallet/building_blocks/blackmarble/houseblock_1x2_column_blackmarble', 1190), + (18573, 17371, 'staticobjects/soe_wallet/building_blocks/blackmarble/houseblock_1x2_dividerblock_blackmarble', 1190), + (18574, 17372, 'staticobjects/soe_wallet/building_blocks/blackmarble/houseblock_1xhalf_block_blackmarble', 1190), + (18575, 17373, 'staticobjects/soe_wallet/building_blocks/blackmarble/houseblock_2x2_dividerblock_blackmarble', 1190), + (18576, 17374, 'staticobjects/soe_wallet/building_blocks/blackmarble/houseblock_rail_blackmarble', 1190), + (18577, 17375, 'staticobjects/soe_wallet/building_blocks/blackmarble/houseblock_roundtile_blackmarble', 1190), + (18578, 17376, 'staticobjects/soe_wallet/building_blocks/blackmarble/houseblock_stair_blackmarble', 1190), + (18579, 17377, 'staticobjects/soe_wallet/building_blocks/blackmarble/housecube_1x1_block_blackmarble', 1190), + (18580, 17378, 'staticobjects/soe_wallet/building_blocks/bluemarble/houseblock_1x1_column_bluemarble', 1190), + (18581, 17379, 'staticobjects/soe_wallet/building_blocks/bluemarble/houseblock_1x2_column_bluemarble', 1190), + (18582, 17380, 'staticobjects/soe_wallet/building_blocks/bluemarble/houseblock_1x2_dividerblock_bluemarble', 1190), + (18583, 17381, 'staticobjects/soe_wallet/building_blocks/bluemarble/houseblock_1xhalf_block_bluemarble', 1190), + (18584, 17382, 'staticobjects/soe_wallet/building_blocks/bluemarble/houseblock_2x2_dividerblock_bluemarble', 1190), + (18585, 17383, 'staticobjects/soe_wallet/building_blocks/bluemarble/houseblock_rail_bluemarble', 1190), + (18586, 17384, 'staticobjects/soe_wallet/building_blocks/bluemarble/houseblock_roundtile_bluemarble', 1190), + (18587, 17385, 'staticobjects/soe_wallet/building_blocks/bluemarble/houseblock_stair_bluemarble', 1190), + (18588, 17386, 'staticobjects/soe_wallet/building_blocks/bluemarble/housecube_1x1_block_bluemarble', 1190), + (18589, 17387, 'staticobjects/soe_wallet/building_blocks/kelethinwood/houseblock_1x1_column_kelethinwood', 1190), + (18590, 17388, 'staticobjects/soe_wallet/building_blocks/kelethinwood/houseblock_1x2_column_kelethinwood', 1190), + (18591, 17389, 'staticobjects/soe_wallet/building_blocks/kelethinwood/houseblock_1x2_dividerblock_kelethinwood', 1190), + (18592, 17390, 'staticobjects/soe_wallet/building_blocks/kelethinwood/houseblock_1xhalf_block_kelethinwood', 1190), + (18593, 17391, 'staticobjects/soe_wallet/building_blocks/kelethinwood/houseblock_2x2_dividerblock_kelethinwood', 1190), + (18594, 17392, 'staticobjects/soe_wallet/building_blocks/kelethinwood/houseblock_rail_kelethinwood', 1190), + (18595, 17393, 'staticobjects/soe_wallet/building_blocks/kelethinwood/houseblock_roundtile_kelethinwood', 1190), + (18596, 17394, 'staticobjects/soe_wallet/building_blocks/kelethinwood/houseblock_stair_kelethinwood', 1190), + (18597, 17395, 'staticobjects/soe_wallet/building_blocks/kelethinwood/housecube_1x1_block_kelethinwood', 1190), + (18598, 17396, 'staticobjects/soe_wallet/building_blocks/whitemarble/houseblock_1x1_column_whitemarble', 1190), + (18599, 17397, 'staticobjects/soe_wallet/building_blocks/whitemarble/houseblock_1x2_column_whitemarble', 1190), + (18600, 17398, 'staticobjects/soe_wallet/building_blocks/whitemarble/houseblock_1x2_dividerblock_whitemarble', 1190), + (18601, 17399, 'staticobjects/soe_wallet/building_blocks/whitemarble/houseblock_1xhalf_block_whitemarble', 1190), + (18602, 17400, 'staticobjects/soe_wallet/building_blocks/whitemarble/houseblock_2x2_dividerblock_whitemarble', 1190), + (18603, 17401, 'staticobjects/soe_wallet/building_blocks/whitemarble/houseblock_rai_whitemarble', 1190), + (18604, 17402, 'staticobjects/soe_wallet/building_blocks/whitemarble/houseblock_roundtile_whitemarble', 1190), + (18605, 17403, 'staticobjects/soe_wallet/building_blocks/whitemarble/houseblock_stair_whitemarble', 1190), + (18606, 17404, 'staticobjects/soe_wallet/building_blocks/whitemarble/housecube_1x1_block_whitemarble', 1190), + (18607, 17405, 'ec/pc/fae_wings/fae_dracurion', 1190), + (18608, 17406, 'accessories/wearable_items/profesion_hats/warden/plain_metal_circlet/head_burnished_metal', 1190), + (18609, 17407, 'accessories/wearable_items/profesion_hats/warden/plain_metal_circlet/head_candle_back', 1190), + (18610, 17408, 'accessories/wearable_items/profesion_hats/warden/plain_metal_circlet/head_candle_front', 1190), + (18611, 17409, 'accessories/wearable_items/profesion_hats/warden/plain_metal_circlet/head_candle_left', 1190), + (18612, 17410, 'accessories/wearable_items/profesion_hats/warden/plain_metal_circlet/head_candle_right', 1190), + (18613, 17411, '_exp08/characters/monsters/exp04raptor/raptor_tintable', 1190), + (18614, 17412, 'accessories/wearable_items/profesion_hats/flower_circlet/rose_red_circlet_head', 1190), + (18615, 17413, '_exp09/characters/monsters/tigeraptor/tigeraptor_base', 1190), + (18616, 17414, 'creatures/monsters/willowisp_golem_parts', 1190), + (18617, 17415, 'creatures/mounts/player_wing/player_wing_angel_ice', 1190), + (18618, 17416, 'creatures/monsters/willowisp_golem_parts03', 1190), + (18619, 17417, 'creatures/monsters/willowisp_golem_parts02', 1190), + (18620, 17418, '_exp09/characters/monsters/mud_elemental/mud_elemental', 1190), + (18621, 17419, 'staticobjects/liveevent/brew_day/dpo_brew_beer_keg_building', 1190), + (18622, 17420, 'staticobjects/liveevent/brew_day/dpo_brew_keg_building_door', 1190), + (18623, 17421, 'staticobjects/liveevent/brew_day/dpo_brew_explode_barrel', 1190), + (18624, 17422, 'staticobjects/liveevent/brew_day/dpo_brew_plate_cornbeef', 1190), + (18625, 17423, 'staticobjects/liveevent/brew_day/dpo_brew_plate_mashers', 1190), + (18626, 17424, 'staticobjects/liveevent/brew_day/dpo_brew_plate_pancake', 1190), + (18627, 17425, 'staticobjects/liveevent/brew_day/dpo_brew_plate_stew', 1190), + (18628, 17426, '_exp09/characters/monsters/tigeraptor/tigeraptor_boss', 1190), + (18629, 17427, '_exp09/characters/monsters/tigeraptor/tigeraptor_swivel_skull', 1190), + (18630, 17428, '_exp09/characters/monsters/tigeraptor/tigeraptor_tribal', 1190), + (18631, 17429, 'creatures/monsters/willowisp_withered_branches', 1190), + (18632, 17430, '_exp09/characters/monsters/mist_panther/mist_panther', 1190), + (18633, 17431, 'accessories/wieldable_items/weapons/exp08/staff/exp08_staff_satyr_witheringlands_swivel01', 1190), + (18634, 17432, 'accessories/wieldable_items/weapons/exp08/staff/exp08_staff_satyr_witheringlands01', 1190), + (18635, 17433, 'accessories/wearable_items/_exp09/dracurion_player_usable/chain/chest', 1190), + (18636, 17434, 'accessories/wearable_items/_exp09/dracurion_player_usable/chain/feet', 1190), + (18637, 17435, 'accessories/wearable_items/_exp09/dracurion_player_usable/chain/forearms', 1190), + (18638, 17436, 'accessories/wearable_items/_exp09/dracurion_player_usable/chain/hands', 1190), + (18639, 17437, 'accessories/wearable_items/_exp09/dracurion_player_usable/chain/head', 1190), + (18640, 17438, 'accessories/wearable_items/_exp09/dracurion_player_usable/chain/legs', 1190), + (18641, 17439, 'accessories/wearable_items/_exp09/dracurion_player_usable/chain/legs_noskirt', 1190), + (18642, 17440, 'accessories/wearable_items/_exp09/dracurion_player_usable/chain/shoulders', 1190), + (18643, 17441, 'accessories/wearable_items/_exp09/dracurion_player_usable/chain/shoulders_epic', 1190), + (18644, 17442, 'accessories/wearable_items/_exp09/dracurion_player_usable/chain/skirt', 1190), + (18645, 17443, 'accessories/wearable_items/_exp09/dracurion_player_usable/chain2/chest', 1190), + (18646, 17444, 'accessories/wearable_items/_exp09/dracurion_player_usable/chain2/feet', 1190), + (18647, 17445, 'accessories/wearable_items/_exp09/dracurion_player_usable/chain2/forearms', 1190), + (18648, 17446, 'accessories/wearable_items/_exp09/dracurion_player_usable/chain2/hands', 1190), + (18649, 17447, 'accessories/wearable_items/_exp09/dracurion_player_usable/chain2/head', 1190), + (18650, 17448, 'accessories/wearable_items/_exp09/dracurion_player_usable/chain2/legs', 1190), + (18651, 17449, 'accessories/wearable_items/_exp09/dracurion_player_usable/chain2/legs_noskirt', 1190), + (18652, 17450, 'accessories/wearable_items/_exp09/dracurion_player_usable/chain2/shoulders', 1190), + (18653, 17451, 'accessories/wearable_items/_exp09/dracurion_player_usable/chain2/shoulders_epic', 1190), + (18654, 17452, 'accessories/wearable_items/_exp09/dracurion_player_usable/chain2/skirt', 1190), + (18655, 17453, 'accessories/wearable_items/_exp09/dracurion_player_usable/cloth/arms', 1190), + (18656, 17454, 'accessories/wearable_items/_exp09/dracurion_player_usable/cloth/chest', 1190), + (18657, 17455, 'accessories/wearable_items/_exp09/dracurion_player_usable/cloth/chest_epic', 1190), + (18658, 17456, 'accessories/wearable_items/_exp09/dracurion_player_usable/cloth/legs', 1190), + (18659, 17457, 'accessories/wearable_items/_exp09/dracurion_player_usable/cloth/skirt', 1190), + (18660, 17458, 'accessories/wearable_items/_exp09/dracurion_player_usable/cloth2/arms', 1190), + (18661, 17459, 'accessories/wearable_items/_exp09/dracurion_player_usable/cloth2/chest', 1190), + (18662, 17460, 'accessories/wearable_items/_exp09/dracurion_player_usable/cloth2/chest_epic', 1190), + (18663, 17461, 'accessories/wearable_items/_exp09/dracurion_player_usable/cloth2/legs', 1190), + (18664, 17462, 'accessories/wearable_items/_exp09/dracurion_player_usable/cloth2/skirt', 1190), + (18665, 17463, 'accessories/wearable_items/_exp09/dracurion_player_usable/leather/chest', 1190), + (18666, 17464, 'accessories/wearable_items/_exp09/dracurion_player_usable/leather/feet', 1190), + (18667, 17465, 'accessories/wearable_items/_exp09/dracurion_player_usable/leather/forearms', 1190), + (18668, 17466, 'accessories/wearable_items/_exp09/dracurion_player_usable/leather/hands', 1190), + (18669, 17467, 'accessories/wearable_items/_exp09/dracurion_player_usable/leather/head', 1190), + (18670, 17468, 'accessories/wearable_items/_exp09/dracurion_player_usable/leather/legs', 1190), + (18671, 17469, 'accessories/wearable_items/_exp09/dracurion_player_usable/leather/legs_noskirt', 1190), + (18672, 17470, 'accessories/wearable_items/_exp09/dracurion_player_usable/leather/shoulders', 1190), + (18673, 17471, 'accessories/wearable_items/_exp09/dracurion_player_usable/leather/shoulders_epic', 1190), + (18674, 17472, 'accessories/wearable_items/_exp09/dracurion_player_usable/leather/skirt', 1190), + (18675, 17473, 'accessories/wearable_items/_exp09/dracurion_player_usable/leather2/chest', 1190), + (18676, 17474, 'accessories/wearable_items/_exp09/dracurion_player_usable/leather2/feet', 1190), + (18677, 17475, 'accessories/wearable_items/_exp09/dracurion_player_usable/leather2/forearms', 1190), + (18678, 17476, 'accessories/wearable_items/_exp09/dracurion_player_usable/leather2/hands', 1190), + (18679, 17477, 'accessories/wearable_items/_exp09/dracurion_player_usable/leather2/head', 1190), + (18680, 17478, 'accessories/wearable_items/_exp09/dracurion_player_usable/leather2/legs', 1190), + (18681, 17479, 'accessories/wearable_items/_exp09/dracurion_player_usable/leather2/legs_noskirt', 1190), + (18682, 17480, 'accessories/wearable_items/_exp09/dracurion_player_usable/leather2/shoulders', 1190), + (18683, 17481, 'accessories/wearable_items/_exp09/dracurion_player_usable/leather2/shoulders_epic', 1190), + (18684, 17482, 'accessories/wearable_items/_exp09/dracurion_player_usable/leather2/skirt', 1190), + (18685, 17483, 'accessories/wearable_items/_exp09/dracurion_player_usable/snapons/dracurion_paladin_forearm_cloth_left', 1190), + (18686, 17484, 'accessories/wearable_items/_exp09/dracurion_player_usable/snapons/dracurion_paladin_forearm_cloth_right', 1190), + (18687, 17485, 'accessories/wearable_items/_exp09/dracurion_player_usable/snapons/dracurion_paladin_pauldron_chain_left', 1190), + (18688, 17486, 'accessories/wearable_items/_exp09/dracurion_player_usable/snapons/dracurion_paladin_pauldron_chain_right', 1190), + (18689, 17487, 'accessories/wearable_items/_exp09/dracurion_player_usable/snapons/dracurion_paladin_pauldron_cloth_left', 1190), + (18690, 17488, 'accessories/wearable_items/_exp09/dracurion_player_usable/snapons/dracurion_paladin_pauldron_cloth_right', 1190), + (18691, 17489, 'accessories/wearable_items/_exp09/dracurion_player_usable/snapons/dracurion_paladin_pauldron_leather_left', 1190), + (18692, 17490, 'accessories/wearable_items/_exp09/dracurion_player_usable/snapons/dracurion_paladin_pauldron_leather_right', 1190), + (18693, 17491, 'accessories/wearable_items/_exp09/dracurion_player_usable/snapons/dracurion_shadowknight_forearm_cloth_left', 1190), + (18694, 17492, 'accessories/wearable_items/_exp09/dracurion_player_usable/snapons/dracurion_shadowknight_forearm_cloth_right', 1190), + (18695, 17493, 'accessories/wearable_items/_exp09/dracurion_player_usable/snapons/dracurion_shadowknight_pauldron_chain_left', 1190), + (18696, 17494, 'accessories/wearable_items/_exp09/dracurion_player_usable/snapons/dracurion_shadowknight_pauldron_chain_right', 1190), + (18697, 17495, 'accessories/wearable_items/_exp09/dracurion_player_usable/snapons/dracurion_shadowknight_pauldron_cloth_left', 1190), + (18698, 17496, 'accessories/wearable_items/_exp09/dracurion_player_usable/snapons/dracurion_shadowknight_pauldron_cloth_right', 1190), + (18699, 17497, 'accessories/wearable_items/_exp09/dracurion_player_usable/snapons/dracurion_shadowknight_pauldron_leather_left', 1190), + (18700, 17498, 'accessories/wearable_items/_exp09/dracurion_player_usable/snapons/dracurion_shadowknight_pauldron_leather_right', 1190), + (18701, 17499, '_exp09/characters/monsters/mist_panther/mist_panther_corrupted', 1190), + (18702, 17500, 'accessories/wearable_items/cloak/exp09/cloak_lava2', 1190), + (18703, 17501, 'accessories/wearable_items/cloak/exp09/cloak_lava2_scallop', 1190), + (18704, 17502, 'accessories/wearable_items/cloak/exp09/cloak_lava', 1190), + (18705, 17503, 'accessories/wearable_items/cloak/exp09/cloak_lava_blue2', 1190), + (18706, 17504, 'accessories/wearable_items/cloak/exp09/cloak_lava_blue', 1190), + (18707, 17505, 'accessories/wearable_items/cloak/exp09/cloak_lava_green2', 1190), + (18708, 17506, 'accessories/wearable_items/cloak/exp09/cloak_lava_green', 1190), + (18709, 17507, 'accessories/wearable_items/cloak/exp09/cloak_lava_purple2', 1190), + (18710, 17508, 'accessories/wearable_items/cloak/exp09/cloak_lava_purple', 1190), + (18711, 17509, 'creatures/mounts/drakota_mount/drakota_mount_green_druid', 1190), + (18712, 17510, 'accessories/wearable_items/_exp09/nightborne_sc_vanguard/chest', 1190), + (18713, 17511, 'accessories/wearable_items/_exp09/nightborne_sc_vanguard/feet', 1190), + (18714, 17512, 'accessories/wearable_items/_exp09/nightborne_sc_vanguard/forearms', 1190), + (18715, 17513, 'accessories/wearable_items/_exp09/nightborne_sc_vanguard/hands', 1190), + (18716, 17514, 'accessories/wearable_items/_exp09/nightborne_sc_vanguard/hands_epic', 1190), + (18717, 17515, 'accessories/wearable_items/_exp09/nightborne_sc_vanguard/head', 1190), + (18718, 17516, 'accessories/wearable_items/_exp09/nightborne_sc_vanguard/head_epic', 1190), + (18719, 17517, 'accessories/wearable_items/_exp09/nightborne_sc_vanguard/legs', 1190), + (18720, 17518, 'accessories/wearable_items/_exp09/nightborne_sc_vanguard/legs_epic', 1190), + (18721, 17519, 'accessories/wearable_items/_exp09/nightborne_sc_vanguard/legs_noskirt', 1190), + (18722, 17520, 'accessories/wearable_items/_exp09/nightborne_sc_vanguard/right', 1190), + (18723, 17521, 'accessories/wearable_items/_exp09/nightborne_sc_vanguard/shoulders', 1190), + (18724, 17522, 'accessories/wearable_items/_exp09/nightborne_sc_vanguard/shoulders_epic', 1190), + (18725, 17523, 'accessories/wearable_items/_exp09/nightborne_sc_vanguard/shoulders_nopauldrons', 1190), + (18726, 17524, 'accessories/wearable_items/_exp09/nightborne_sc_vanguard/skirt', 1190), + (18727, 17525, 'accessories/wearable_items/_exp09/nightborne_sc_vanguard/snap_ons/forearm_left', 1190), + (18728, 17526, 'accessories/wearable_items/_exp09/nightborne_sc_vanguard/snap_ons/forearm_right', 1190), + (18729, 17527, 'accessories/wearable_items/_exp09/nightborne_sc_vanguard/snap_ons/pauldrons_lower_left', 1190), + (18730, 17528, 'accessories/wearable_items/_exp09/nightborne_sc_vanguard/snap_ons/pauldrons_lower_right', 1190), + (18731, 17529, 'accessories/wearable_items/_exp09/nightborne_sc_vanguard/snap_ons/pauldrons_upper_left', 1190), + (18732, 17530, 'accessories/wearable_items/_exp09/nightborne_sc_vanguard/snap_ons/pauldrons_upper_right', 1190), + (18733, 17531, 'accessories/wearable_items/_exp09/nightborne_sc_vanguard/snap_ons/shin_left', 1190), + (18734, 17532, 'accessories/wearable_items/_exp09/nightborne_sc_vanguard/snap_ons/shin_right', 1190), + (18735, 17533, 'accessories/wieldable_items/shields/exp09/nightborne_shield', 1190), + (18736, 17534, 'staticobjects/soe_wallet/holiday_objects/erollisi_card_01', 1190), + (18737, 17535, 'staticobjects/soe_wallet/holiday_objects/erollisi_card_02', 1190), + (18738, 17536, 'staticobjects/soe_wallet/holiday_objects/erollisi_card_03', 1190), + (18739, 17537, 'creatures/monsters/dikdik_corrupted', 1190), + (18740, 17538, 'accessories/wieldable_items/weapons/throwing_weapons/throwing_star/throwing_star002_ro', 1190), + (18741, 17539, 'staticobjects/rocks/mining_gravel', 1190), + (18742, 17540, '_exp09/characters/tool_users/dracurion_palladin/dracurion_palladin_chain', 1190), + (18743, 17541, '_exp09/characters/tool_users/dracurion_palladin/dracurion_palladin_chain_var1', 1190), + (18744, 17542, '_exp09/characters/tool_users/dracurion_palladin/dracurion_palladin_horns', 1190), + (18745, 17543, '_exp09/characters/tool_users/dracurion_palladin/dracurion_palladin_horns_var1', 1190), + (18746, 17544, '_exp09/characters/tool_users/dracurion_palladin/dracurion_palladin_medallion', 1190), + (18747, 17545, '_exp09/characters/tool_users/dracurion_palladin/dracurion_palladin_medallion_var1', 1190), + (18748, 17546, '_exp09/characters/tool_users/dracurion_shadowknight/dracurion_shadowknight_a', 1190), + (18749, 17547, '_exp09/characters/tool_users/dracurion_shadowknight/dracurion_shadowknight_b', 1190), + (18750, 17548, '_exp04/monsters/erollisi_corrupted', 1190), + (18751, 17549, '_exp04/monsters/erollisi_corrupted_boss', 1190), + (18752, 17550, 'staticobjects/eig/eig_harvest_location_wl_sky', 1190), + (18753, 17551, '_exp09/characters/monsters/carnivorous_plant_2012/carnivorous_plant_2012', 1190), + (18754, 17552, 'staticobjects/_exp08/player_housing/skyshrine_arcane_lamp_dpo', 1190), + (18755, 17553, 'staticobjects/_exp08/player_housing/skyshrine_bench_01_dpo', 1190), + (18756, 17554, 'staticobjects/_exp08/player_housing/skyshrine_bench_02_dpo', 1190), + (18757, 17555, 'staticobjects/_exp08/player_housing/skyshrine_bonealtar_dpo', 1190), + (18758, 17556, 'staticobjects/_exp08/player_housing/skyshrine_brazier_hanging_dpo', 1190), + (18759, 17557, 'staticobjects/_exp08/player_housing/skyshrine_brazier_pillar_dpo', 1190), + (18760, 17558, 'staticobjects/_exp08/player_housing/skyshrine_brazier_smoke_dpo', 1190), + (18761, 17559, 'staticobjects/_exp08/player_housing/skyshrine_dragon_head_metal_base_dpo', 1190), + (18762, 17560, 'staticobjects/_exp08/player_housing/skyshrine_dragon_statue_big_dpo', 1190), + (18763, 17561, 'staticobjects/_exp08/player_housing/skyshrine_drake_statue_01', 1190), + (18764, 17562, 'staticobjects/_exp08/player_housing/skyshrine_flag_green_dpo', 1190), + (18765, 17563, 'staticobjects/_exp08/player_housing/skyshrine_flag_hanging_dpo', 1190), + (18766, 17564, 'staticobjects/_exp08/player_housing/skyshrine_flag_red_dpo', 1190), + (18767, 17565, 'staticobjects/_exp08/player_housing/skyshrine_flag_yellow_dpo', 1190), + (18768, 17566, 'accessories/wearable_items/_exp09/antonican_faction_armor/feet_hands/feet', 1190), + (18769, 17567, 'staticobjects/_exp08/player_housing/skyshrine_pillar_epic_dpo', 1190), + (18770, 17568, 'staticobjects/_exp08/player_housing/skyshrine_rug_01_dpo', 1190), + (18771, 17569, 'staticobjects/_exp08/player_housing/skyshrine_rug_02_dpo', 1190), + (18772, 17570, 'staticobjects/_exp08/player_housing/skyshrine_rug_03_dpo', 1190), + (18773, 17571, 'staticobjects/_exp08/player_housing/skyshrine_rug_04_dpo', 1190), + (18774, 17572, 'staticobjects/_exp08/player_housing/skyshrine_rug_05_dpo', 1190), + (18775, 17573, 'staticobjects/_exp08/player_housing/skyshrine_rug_06_big_dpo', 1190), + (18776, 17574, 'staticobjects/_exp08/player_housing/skyshrine_stage_dpo', 1190), + (18777, 17575, 'staticobjects/_exp08/player_housing/skyshrine_statue_epic_dpo', 1190), + (18778, 17576, 'staticobjects/_exp08/player_housing/skyshrine_table_2_dpo', 1190), + (18779, 17577, 'staticobjects/_exp08/player_housing/skyshrine_table_dpo', 1190), + (18780, 17578, 'staticobjects/_exp08/player_housing/wl_bench_dpo', 1190), + (18781, 17579, 'staticobjects/_exp08/player_housing/wl_brazier_dpo', 1190), + (18782, 17580, 'accessories/wearable_items/_exp09/antonican_faction_armor/feet_hands/hands', 1190), + (18783, 17581, 'accessories/wearable_items/_exp09/antonican_faction_armor/robe/chest', 1190), + (18784, 17582, 'accessories/wearable_items/_exp09/antonican_faction_armor/robe/chest_epic', 1190), + (18785, 17583, 'accessories/wearable_items/_exp09/antonican_faction_armor/robe/head', 1190), + (18786, 17584, 'staticobjects/_exp08/player_housing/wl_dragon_skull_dpo', 1190), + (18787, 17585, 'staticobjects/_exp08/player_housing/wl_evil_flower', 1190), + (18788, 17586, 'accessories/wearable_items/_exp09/antonican_faction_armor/robe/head_collar_flared', 1190), + (18789, 17587, 'staticobjects/_exp08/player_housing/wl_spire_dpo', 1190), + (18790, 17588, 'staticobjects/_exp08/player_housing/wl_stage_dpo', 1190), + (18791, 17589, 'staticobjects/_exp08/player_housing/wl_swamp_lilly_dpo', 1190), + (18792, 17590, 'staticobjects/_exp08/player_housing/wl_swamp_plant_dpo', 1190), + (18793, 17591, 'staticobjects/_exp08/player_housing/wl_vine_dpo', 1190), + (18794, 17592, 'staticobjects/_exp08/player_housing/wl_vine_squash_dpo', 1190), + (18795, 17593, 'staticobjects/_exp08/player_housing/wl_wheelbarrow_dpo', 1190), + (18796, 17594, 'creatures/mounts/player_wing/player_wing_angel_black', 1190), + (18797, 17595, '_exp09/characters/monsters/withering_tree_ent/withering_tree_ent', 1190), + (18798, 17596, 'accessories/wearable_items/_exp09/withering_lands/chain/skirt', 1190), + (18799, 17597, 'accessories/wearable_items/_exp09/withering_lands/chain/chest', 1190), + (18800, 17598, 'accessories/wearable_items/_exp09/withering_lands/chain/feet', 1190), + (18801, 17599, 'accessories/wearable_items/_exp09/withering_lands/chain/forearms', 1190), + (18802, 17600, 'accessories/wearable_items/_exp09/withering_lands/chain/hands', 1190), + (18803, 17601, 'accessories/wearable_items/_exp09/withering_lands/chain/head', 1190), + (18804, 17602, 'accessories/wearable_items/_exp09/withering_lands/chain/legs', 1190), + (18805, 17603, 'accessories/wearable_items/_exp09/withering_lands/chain/legs_noskirt', 1190), + (18806, 17604, 'accessories/wearable_items/_exp09/withering_lands/chain/shoulders', 1190), + (18807, 17605, 'accessories/wearable_items/_exp09/withering_lands/chain/shoulders_snapons', 1190), + (18808, 17606, 'accessories/wearable_items/_exp09/withering_lands/leather/skirt', 1190), + (18809, 17607, 'accessories/wearable_items/_exp09/withering_lands/leather/chest', 1190), + (18810, 17608, 'accessories/wearable_items/_exp09/withering_lands/leather/feet', 1190), + (18811, 17609, 'accessories/wearable_items/_exp09/withering_lands/leather/forearms', 1190), + (18812, 17610, 'accessories/wearable_items/_exp09/withering_lands/leather/hands', 1190), + (18813, 17611, 'accessories/wearable_items/_exp09/withering_lands/leather/head', 1190), + (18814, 17612, 'accessories/wearable_items/_exp09/withering_lands/leather/legs', 1190), + (18815, 17613, 'accessories/wearable_items/_exp09/withering_lands/leather/legs_noskirt', 1190), + (18816, 17614, 'accessories/wearable_items/_exp09/withering_lands/leather/shoulders', 1190), + (18817, 17615, 'accessories/wearable_items/_exp09/withering_lands/leather/shoulders_snapons', 1190), + (18818, 17616, 'accessories/wearable_items/_exp09/withering_lands/snapons/robe_shoulder_bag_right', 1190), + (18819, 17617, 'accessories/wearable_items/_exp09/withering_lands/snapons/chain_shoulder_left', 1190), + (18820, 17618, 'accessories/wearable_items/_exp09/withering_lands/snapons/chain_shoulder_right', 1190), + (18821, 17619, 'accessories/wearable_items/_exp09/withering_lands/snapons/leather_shoulder_left', 1190), + (18822, 17620, 'accessories/wearable_items/_exp09/withering_lands/snapons/leather_shoulder_right', 1190), + (18823, 17621, 'accessories/wearable_items/_exp09/withering_lands/robe/skirt', 1190), + (18824, 17622, 'accessories/wearable_items/_exp09/withering_lands/robe/chest', 1190), + (18825, 17623, 'accessories/wearable_items/_exp09/withering_lands/robe/feet', 1190), + (18826, 17624, 'accessories/wearable_items/_exp09/withering_lands/robe/hands', 1190), + (18827, 17625, 'accessories/wearable_items/_exp09/withering_lands/robe/head', 1190), + (18828, 17626, 'accessories/wearable_items/_exp09/withering_lands/robe/pants', 1190), + (18829, 17627, '_exp09/characters/monsters/timber_wolf_corrupted/timber_wolf_corrupted', 1190), + (18830, 17628, 'creatures/pets/wolf_pup/wolf_pup_corrupted', 1190), + (18831, 17629, 'accessories/wearable_items/cloak/exp09/cloak_bookshelf2', 1190), + (18832, 17630, 'accessories/wearable_items/cloak/exp09/cloak_bookshelf2_blue', 1190), + (18833, 17631, 'accessories/wearable_items/cloak/exp09/cloak_lace', 1190), + (18834, 17632, 'accessories/wearable_items/cloak/exp09/cloak_lace2', 1190), + (18835, 17633, 'accessories/wearable_items/cloak/exp09/cloak_nightflies2', 1190), + (18836, 17634, 'accessories/wearable_items/cloak/exp09/cloak_nightflies', 1190), + (18837, 17635, 'accessories/wearable_items/cloak/exp09/cloak_lava3', 1190), + (18838, 17636, 'accessories/wearable_items/profesion_hats/flower_circlet/rose_dark_circlet_head', 1190), + (18839, 17637, 'accessories/wearable_items/profesion_hats/flower_circlet/rose_gold_circlet_head', 1190), + (18840, 17638, 'accessories/wearable_items/_exp09/withering_lands/robe/chest_snapon', 1190), + (18841, 17639, 'accessories/wearable_items/_exp09/withering_lands/vanguard/skirt', 1190), + (18842, 17640, 'accessories/wearable_items/_exp09/withering_lands/vanguard/chest', 1190), + (18843, 17641, 'accessories/wearable_items/_exp09/withering_lands/vanguard/feet', 1190), + (18844, 17642, 'accessories/wearable_items/_exp09/withering_lands/vanguard/forearms', 1190), + (18845, 17643, 'accessories/wearable_items/_exp09/withering_lands/vanguard/hands', 1190), + (18846, 17644, 'accessories/wearable_items/_exp09/withering_lands/vanguard/head', 1190), + (18847, 17645, 'accessories/wearable_items/_exp09/withering_lands/vanguard/legs', 1190), + (18848, 17646, 'accessories/wearable_items/_exp09/withering_lands/vanguard/legs_noskirt', 1190), + (18849, 17647, 'accessories/wearable_items/_exp09/withering_lands/vanguard/right', 1190), + (18850, 17648, 'accessories/wearable_items/_exp09/withering_lands/vanguard/shoulders', 1190), + (18851, 17649, 'accessories/wearable_items/_exp09/withering_lands/vanguard/shoulders_nopauldrons', 1190), + (18852, 17650, 'accessories/wearable_items/_exp09/withering_lands/vanguard/shoulders_snapons', 1190), + (18853, 17651, 'accessories/wearable_items/_exp09/withering_lands/snapons/vanguard_shoulder_right', 1190), + (18854, 17652, 'accessories/wearable_items/_exp09/withering_lands/snapons/vanguard_shoulder_left', 1190), + (18855, 17653, 'accessories/wearable_items/_exp09/withering_lands/snapons/robe_bag', 1190), + (18856, 17654, 'accessories/wieldable_items/weapons/exp09/1h_crush/1h_hammer_skyshrine_evil', 1190), + (18857, 17655, 'accessories/wieldable_items/weapons/exp09/1h_crush/1h_hammer_skyshrine_good', 1190), + (18858, 17656, 'accessories/wieldable_items/weapons/exp09/1h_pierce/dagger_skyshrine_evil', 1190), + (18859, 17657, 'accessories/wieldable_items/weapons/exp09/1h_pierce/dagger_skyshrine_good', 1190), + (18860, 17658, 'accessories/wieldable_items/weapons/exp09/1h_sword/1h_axe_skyshrine_evil', 1190), + (18861, 17659, 'accessories/wieldable_items/weapons/exp09/1h_sword/1h_axe_skyshrine_good', 1190), + (18862, 17660, 'accessories/wieldable_items/weapons/exp09/1h_sword/1h_sword_skyshrine_evil', 1190), + (18863, 17661, 'accessories/wieldable_items/weapons/exp09/1h_sword/1h_sword_skyshrine_good', 1190), + (18864, 17662, 'accessories/wieldable_items/weapons/exp09/2h_sword/2h_sword_skyshrine_evil', 1190), + (18865, 17663, 'accessories/wieldable_items/weapons/exp09/2h_sword/2h_sword_skyshrine_good', 1190), + (18866, 17664, 'accessories/wieldable_items/weapons/exp09/bow/longbow_skyshrine_evil', 1190), + (18867, 17665, 'accessories/wieldable_items/weapons/exp09/bow/longbow_skyshrine_good', 1190), + (18868, 17666, 'accessories/wieldable_items/weapons/exp09/fist/katar_spiked_skyshrine_evil', 1190), + (18869, 17667, 'accessories/wieldable_items/weapons/exp09/fist/katar_spiked_skyshrine_good', 1190), + (18870, 17668, 'accessories/wieldable_items/weapons/exp09/staff/halberd_skyshrine_evil', 1190), + (18871, 17669, 'accessories/wieldable_items/weapons/exp09/staff/halberd_skyshrine_good', 1190), + (18872, 17670, 'accessories/wieldable_items/weapons/exp09/staff/spear_open_skyshrine_evil', 1190), + (18873, 17671, 'accessories/wieldable_items/weapons/exp09/staff/spear_open_skyshrine_good', 1190), + (18874, 17672, 'accessories/wieldable_items/weapons/exp09/staff/spear_skyshrine_evil', 1190), + (18875, 17673, 'accessories/wieldable_items/weapons/exp09/staff/spear_skyshrine_good', 1190), + (18876, 17674, 'accessories/wieldable_items/weapons/exp09/staff/staff_skyshrine_evil', 1190), + (18877, 17675, 'accessories/wieldable_items/weapons/exp09/staff/staff_skyshrine_good', 1190), + (18878, 17676, 'accessories/wieldable_items/shields/exp09/buckler_skyshrine_evil', 1190), + (18879, 17677, 'accessories/wieldable_items/shields/exp09/buckler_skyshrine_good', 1190), + (18880, 17678, 'accessories/wieldable_items/shields/exp09/kite_skyshrine_evil', 1190), + (18881, 17679, 'accessories/wieldable_items/shields/exp09/kite_skyshrine_good', 1190), + (18882, 17680, 'accessories/npc_wearables/dracurion/2h_sword_skyshrine_evil', 1190), + (18883, 17681, 'accessories/npc_wearables/dracurion/2h_sword_skyshrine_good', 1190), + (18884, 17682, 'accessories/npc_wearables/dracurion/halberd_skyshrine_evil', 1190), + (18885, 17683, 'accessories/npc_wearables/dracurion/halberd_skyshrine_good', 1190), + (18886, 17684, 'accessories/npc_wearables/dracurion/spear_skyshrine_evil', 1190), + (18887, 17685, 'accessories/npc_wearables/dracurion/spear_skyshrine_good', 1190), + (18888, 17686, 'accessories/npc_wearables/dracurion/spear2_skyshrine_evil', 1190), + (18889, 17687, 'accessories/npc_wearables/dracurion/spear2_skyshrine_good', 1190), + (18890, 17688, 'accessories/npc_wearables/dracurion/staff_skyshrine_evil', 1190), + (18891, 17689, 'accessories/npc_wearables/dracurion/staff_skyshrine_good', 1190), + (18892, 17690, 'accessories/wearable_items/_exp09/dracurion_player_usable/chain/head_epic', 1190), + (18893, 17691, 'accessories/wearable_items/_exp09/dracurion_player_usable/chain2/head_epic', 1190), + (18894, 17692, 'accessories/wearable_items/_exp09/dracurion_player_usable/leather/head_epic', 1190), + (18895, 17693, 'accessories/wearable_items/_exp09/dracurion_player_usable/leather2/head_epic', 1190), + (18896, 17694, '_exp09/characters/monsters/mud_monster/mud_monster', 1190), + (18897, 17695, 'creatures/mounts/horse_heavy/horse_new_combine', 1190), + (18898, 17696, 'creatures/mounts/horse_heavy/new_combine_flags/horse_new_combine_flag_freeport', 1190), + (18899, 17697, 'creatures/mounts/horse_heavy/new_combine_flags/horse_new_combine_flag_gorowyn', 1190), + (18900, 17698, 'creatures/mounts/horse_heavy/new_combine_flags/horse_new_combine_flag_halas', 1190), + (18901, 17699, 'creatures/mounts/horse_heavy/new_combine_flags/horse_new_combine_flag_kelethin', 1190), + (18902, 17700, 'creatures/mounts/horse_heavy/new_combine_flags/horse_new_combine_flag_neriak', 1190), + (18903, 17701, 'creatures/mounts/horse_heavy/new_combine_flags/horse_new_combine_flag_qeynos', 1190), + (18904, 17702, 'creatures/mounts/warhog_mount/swivels/warhog_beastlord_swivel', 1190), + (18905, 17703, 'staticobjects/_exp08/harvestables/exp08_bush_harvesting', 1190), + (18906, 17704, 'staticobjects/_exp08/harvestables/exp08_gems_harvesting', 1190), + (18907, 17705, 'staticobjects/_exp08/harvestables/exp08_log_harvesting', 1190), + (18908, 17706, 'staticobjects/_exp08/harvestables/exp08_ore_harvesting', 1190), + (18909, 17707, 'staticobjects/_exp08/harvestables/exp08_roots_harvesting', 1190), + (18910, 17708, 'staticobjects/_exp08/harvestables/exp08_trapping_harvesting', 1190), + (18911, 17709, '_exp09/characters/monsters/skyshrine_drake/skyshrine_drake_storm', 1190), + (18912, 17710, '_exp09/characters/monsters/skyshrine_drake/skyshrine_drake_storm_violet', 1190), + (18913, 17711, 'accessories/wearable_items/snapons/backpacks/backpack_othmir_swivel/backpack_othmir_animated', 1190), + (18914, 17712, '_exp09/characters/monsters/beetle/beetle_grappler', 1190), + (18915, 17713, '_exp09/characters/monsters/beetle/beetle_grappler_clockwork', 1190), + (18916, 17714, '_exp09/characters/monsters/beetle/beetle_grappler_sanguine', 1190), + (18917, 17715, '_exp09/characters/monsters/beetle/beetle_grappler_shadow', 1190), + (18918, 17716, '_exp09/characters/monsters/beetle/beetle_hercules', 1190), + (18919, 17717, '_exp09/characters/monsters/beetle/beetle_hercules_clockwork', 1190), + (18920, 17718, '_exp09/characters/monsters/beetle/beetle_hercules_sanguine', 1190), + (18921, 17719, '_exp09/characters/monsters/beetle/beetle_hercules_shadow', 1190), + (18922, 17720, '_exp09/characters/monsters/beetle/beetle_lobber', 1190), + (18923, 17721, '_exp09/characters/monsters/beetle/beetle_lobber_clockwork', 1190), + (18924, 17722, '_exp09/characters/monsters/beetle/beetle_lobber_sanguine', 1190), + (18925, 17723, '_exp09/characters/monsters/beetle/beetle_lobber_shadow', 1190), + (18926, 17724, '_exp09/characters/monsters/beetle/beetle_lobber2', 1190), + (18927, 17725, '_exp09/characters/monsters/beetle/beetle_original', 1190), + (18928, 17726, '_exp09/characters/monsters/beetle/beetle_original_clockwork', 1190), + (18929, 17727, '_exp09/characters/monsters/beetle/beetle_original_ladybug', 1190), + (18930, 17728, '_exp09/characters/monsters/beetle/beetle_original_sanguine', 1190), + (18931, 17729, '_exp09/characters/monsters/beetle/beetle_original_shadow', 1190), + (18932, 17730, '_exp09/characters/monsters/beetle_groundattack/beetle', 1190), + (18933, 17731, '_exp09/characters/monsters/beetle_groundattack/beetle_grappler', 1190), + (18934, 17732, '_exp09/characters/monsters/beetle_groundattack/beetle_grappler_clockwork', 1190), + (18935, 17733, '_exp09/characters/monsters/beetle_groundattack/beetle_grappler_sanguine', 1190), + (18936, 17734, '_exp09/characters/monsters/beetle_groundattack/beetle_grappler_shadow', 1190), + (18937, 17735, '_exp09/characters/monsters/beetle_groundattack/beetle_hercules', 1190), + (18938, 17736, '_exp09/characters/monsters/beetle_groundattack/beetle_hercules_clockwork', 1190), + (18939, 17737, '_exp09/characters/monsters/beetle_groundattack/beetle_hercules_sanguine', 1190), + (18940, 17738, '_exp09/characters/monsters/beetle_groundattack/beetle_hercules_shadow', 1190), + (18941, 17739, '_exp09/characters/monsters/beetle_groundattack/beetle_lobber', 1190), + (18942, 17740, '_exp09/characters/monsters/beetle_groundattack/beetle_lobber_clockwork', 1190), + (18943, 17741, '_exp09/characters/monsters/beetle_groundattack/beetle_lobber_sanguine', 1190), + (18944, 17742, '_exp09/characters/monsters/beetle_groundattack/beetle_lobber_shadow', 1190), + (18945, 17743, '_exp09/characters/monsters/beetle_groundattack/beetle_lobber2', 1190), + (18946, 17744, '_exp09/characters/monsters/beetle_groundattack/beetle_original', 1190), + (18947, 17745, '_exp09/characters/monsters/beetle_groundattack/beetle_original_clockwork', 1190), + (18948, 17746, '_exp09/characters/monsters/beetle_groundattack/beetle_original_ladybug', 1190), + (18949, 17747, '_exp09/characters/monsters/beetle_groundattack/beetle_original_sanguine', 1190), + (18950, 17748, '_exp09/characters/monsters/beetle_groundattack/beetle_original_shadow', 1190), + (18951, 17749, '_exp08/characters/tool_users/vampire_female_merc/vampire_female_merc', 1190), + (18952, 17750, 'accessories/wearable_items/cloak/exp08/cloak_vampire_merc', 1190), + (18953, 17751, 'accessories/wieldable_items/weapons/exp08/1h_pierce/exp08_dagger_vampire_merc', 1190), + (18954, 17752, '_exp08/characters/tool_users/vampire_female_merc/vampire_female_merc_evil', 1190), + (18955, 17753, 'accessories/wieldable_items/shields/exp08/exp08_shield_dragonanimated_gold', 1190), + (18956, 17754, 'accessories/wieldable_items/shields/exp09/spike_shield', 1190), + (18957, 17755, 'accessories/wieldable_items/shields/exp09/spike_shield_hot', 1190), + (18958, 17756, '_exp08/characters/monsters/dozekar/dozekar_base', 1190), + (18959, 17757, 'staticobjects/_exp08/player_housing/new/exp08_skyshrine_objects01_crate01_dpo', 1190), + (18960, 17758, 'staticobjects/_exp08/player_housing/new/exp08_skyshrine_lower_objects01_torch01_fx_dpo', 1190), + (18961, 17759, 'staticobjects/_exp08/player_housing/new/exp08_skyshrine_lower_objects01_torch02_fx_dpo', 1190), + (18962, 17760, 'staticobjects/_exp08/player_housing/new/exp08_skyshrine_objects01_barricade01_dpo', 1190), + (18963, 17761, 'staticobjects/_exp08/player_housing/new/exp08_skyshrine_objects01_bench01_dpo', 1190), + (18964, 17762, 'staticobjects/_exp08/player_housing/new/exp08_skyshrine_objects01_bench01b_dpo', 1190), + (18965, 17763, 'staticobjects/_exp08/player_housing/new/exp08_skyshrine_objects01_flag_noflag01_dpo', 1190), + (18966, 17764, 'staticobjects/_exp08/player_housing/new/exp08_skyshrine_objects01_flagblue01_dpo', 1190), + (18967, 17765, 'staticobjects/_exp08/player_housing/new/exp08_skyshrine_objects01_flaggreen01_dpo', 1190), + (18968, 17766, 'staticobjects/_exp08/player_housing/new/exp08_skyshrine_objects01_flagred01_dpo', 1190), + (18969, 17767, 'staticobjects/_exp08/player_housing/new/exp08_skyshrine_objects01_flagyellow01_dpo', 1190), + (18970, 17768, 'staticobjects/_exp08/player_housing/new/exp08_skyshrine_objects01_grouptable01_dpo', 1190), + (18971, 17769, 'staticobjects/_exp08/player_housing/new/exp08_skyshrine_objects01_grouptable01_shade_dpo', 1190), + (18972, 17770, 'staticobjects/_exp08/player_housing/new/exp08_skyshrine_objects01_grouptable02_dpo', 1190), + (18973, 17771, 'staticobjects/_exp08/player_housing/new/exp08_skyshrine_objects01_grouptable02_shade_dpo', 1190), + (18974, 17772, 'staticobjects/_exp08/player_housing/new/exp08_skyshrine_objects01_grouptable03_dpo', 1190), + (18975, 17773, 'staticobjects/_exp08/player_housing/new/exp08_skyshrine_objects01_grouptable03_shade_dpo', 1190), + (18976, 17774, 'staticobjects/_exp08/player_housing/new/exp08_skyshrine_objects01_grouptable04_dpo', 1190), + (18977, 17775, 'staticobjects/_exp08/player_housing/new/exp08_skyshrine_objects01_grouptable04_shade_dpo', 1190), + (18978, 17776, 'staticobjects/_exp08/player_housing/new/exp08_skyshrine_objects01_grouptable05_dpo', 1190), + (18979, 17777, 'staticobjects/_exp08/player_housing/new/exp08_skyshrine_objects01_grouptable05_shade_dpo', 1190), + (18980, 17778, 'staticobjects/_exp08/player_housing/new/exp08_skyshrine_objects01_grouptable06_dpo', 1190), + (18981, 17779, 'staticobjects/_exp08/player_housing/new/exp08_skyshrine_objects01_groupvase01_dpo', 1190), + (18982, 17780, 'staticobjects/_exp08/player_housing/new/exp08_skyshrine_objects01_groupvase02_dpo', 1190), + (18983, 17781, 'staticobjects/_exp08/player_housing/new/exp08_skyshrine_objects01_groupvase03_dpo', 1190), + (18984, 17782, 'staticobjects/_exp08/player_housing/new/exp08_skyshrine_objects01_groupvase04_dpo', 1190), + (18985, 17783, 'staticobjects/_exp08/player_housing/new/exp08_skyshrine_objects01_groupvase05_dpo', 1190), + (18986, 17784, 'staticobjects/_exp08/player_housing/new/exp08_skyshrine_objects01_groupvase06_dpo', 1190), + (18987, 17785, 'staticobjects/_exp08/player_housing/new/exp08_skyshrine_objects01_groupvase07_dpo', 1190), + (18988, 17786, 'staticobjects/_exp08/player_housing/new/exp08_skyshrine_objects01_groupvase08_dpo', 1190), + (18989, 17787, 'staticobjects/_exp08/player_housing/new/exp08_skyshrine_objects01_pedastalarcane01_dpo', 1190), + (18990, 17788, 'staticobjects/_exp08/player_housing/new/exp08_skyshrine_objects01_pedastalgov01_dpo', 1190), + (18991, 17789, 'accessories/wearable_items/_exp09/antonican_faction_armor/robe/head_mask', 1190), + (18992, 17790, 'staticobjects/_exp08/player_housing/new/exp08_skyshrine_objects01_rug01_dpo', 1190), + (18993, 17791, 'staticobjects/_exp08/player_housing/new/exp08_skyshrine_objects01_rug02_dpo', 1190), + (18994, 17792, 'staticobjects/_exp08/player_housing/new/exp08_skyshrine_objects01_rug03_dpo', 1190), + (18995, 17793, 'staticobjects/_exp08/player_housing/new/exp08_skyshrine_objects01_rug04_dpo', 1190), + (18996, 17794, 'staticobjects/_exp08/player_housing/new/exp08_skyshrine_objects01_rug05_dpo', 1190), + (18997, 17795, 'staticobjects/_exp08/player_housing/new/exp08_skyshrine_objects01_rug06_big_dpo', 1190), + (18998, 17796, 'staticobjects/_exp08/player_housing/new/exp08_skyshrine_objects01_statue01_gold_dpo', 1190), + (18999, 17797, 'staticobjects/_exp08/player_housing/new/exp08_skyshrine_objects01_statue01_marble_dpo', 1190), + (19000, 17798, 'staticobjects/_exp08/player_housing/new/exp08_skyshrine_objects01_statue01_metal_dpo', 1190), + (19001, 17799, 'staticobjects/_exp08/player_housing/new/exp08_skyshrine_objects01_statue02_gold_dpo', 1190), + (19002, 17800, 'staticobjects/_exp08/player_housing/new/exp08_skyshrine_objects01_statue02_marble_dpo', 1190), + (19003, 17801, 'staticobjects/_exp08/player_housing/new/exp08_skyshrine_objects01_statue02_metal_dpo', 1190), + (19004, 17802, 'staticobjects/_exp08/player_housing/new/exp08_skyshrine_objects01_statue03_gov01_gold_dpo', 1190), + (19005, 17803, 'accessories/wearable_items/_exp09/antonican_faction_armor/robe/head_mask_hood', 1190), + (19006, 17804, 'staticobjects/_exp08/player_housing/new/exp08_skyshrine_objects01_statue03_gov01_metal_dpo', 1190), + (19007, 17805, 'staticobjects/_exp08/player_housing/new/exp08_skyshrine_objects01_statue04_arcane01_gold_dpo', 1190), + (19008, 17806, 'staticobjects/_exp08/player_housing/new/exp08_skyshrine_objects01_statue04_arcane01_marble_dpo', 1190), + (19009, 17807, 'staticobjects/_exp08/player_housing/new/exp08_skyshrine_objects01_statue04_arcane01_metal_dpo', 1190), + (19010, 17808, 'staticobjects/_exp08/player_housing/new/exp08_skyshrine_objects01_statue05_gold_dpo', 1190), + (19011, 17809, 'staticobjects/_exp08/player_housing/new/exp08_skyshrine_objects01_statue05_marble_dpo', 1190), + (19012, 17810, 'staticobjects/_exp08/player_housing/new/exp08_skyshrine_objects01_statue05_metal_dpo', 1190), + (19013, 17811, 'staticobjects/_exp08/player_housing/new/exp08_skyshrine_objects01_table01_dpo', 1190), + (19014, 17812, 'staticobjects/_exp08/player_housing/new/exp08_skyshrine_objects01_table01b_dpo', 1190), + (19015, 17813, 'staticobjects/_exp08/player_housing/new/exp08_skyshrine_objects01_torch01_dpo', 1190), + (19016, 17814, 'staticobjects/_exp08/player_housing/new/exp08_skyshrine_objects01_torch02_dpo', 1190), + (19017, 17815, 'staticobjects/_exp08/player_housing/new/exp08_skyshrine_objects01_torcharcane01_dpo', 1190), + (19018, 17816, 'staticobjects/_exp08/player_housing/new/exp08_skyshrine_objects01_torchgov01_dpo', 1190), + (19019, 17817, 'staticobjects/_exp08/player_housing/new/exp08_skyshrine_objects01_torchmerchant01_dpo', 1190), + (19020, 17818, 'staticobjects/_exp08/player_housing/new/exp08_skyshrine_objects01_vase01_dpo', 1190), + (19021, 17819, 'staticobjects/_exp08/player_housing/new/exp08_skyshrine_objects01_vase01b_dpo', 1190), + (19022, 17820, 'staticobjects/_exp08/player_housing/new/exp08_skyshrine_objects01_vase02_dpo', 1190), + (19023, 17821, 'staticobjects/_exp08/player_housing/new/exp08_skyshrine_objects01_vase02b_dpo', 1190), + (19024, 17822, 'staticobjects/_exp08/player_housing/new/exp08_skyshrine_objects01_vase03_dpo', 1190), + (19025, 17823, 'staticobjects/_exp08/player_housing/new/exp08_skyshrine_objects01_vase03b_dpo', 1190), + (19026, 17824, 'staticobjects/_exp08/player_housing/new/exp08_skyshrine_objects01_vase04_dpo', 1190), + (19027, 17825, 'staticobjects/_exp08/player_housing/new/exp08_skyshrine_objects01_vase04b_dpo', 1190), + (19028, 17826, 'staticobjects/_exp08/player_housing/new/exp08_skyshrine_objects01_vase05_dpo', 1190), + (19029, 17827, 'staticobjects/_exp08/player_housing/new/exp08_skyshrine_objects01_vase05b_dpo', 1190), + (19030, 17828, 'staticobjects/_exp08/player_housing/new/exp08_skyshrine_objects01_wagonarcane01_dpo', 1190), + (19031, 17829, 'staticobjects/_exp08/player_housing/new/exp08_skyshrine_objects01_wagonarcane02_dpo', 1190), + (19032, 17830, 'staticobjects/_exp08/player_housing/new/exp08_skyshrine_objects01_wagongov01_dpo', 1190), + (19033, 17831, 'staticobjects/_exp08/player_housing/new/exp08_skyshrine_objects01_wagongov02_dpo', 1190), + (19034, 17832, 'staticobjects/_exp08/player_housing/new/exp08_skyshrine_objects01_wagonmerchant01_dpo', 1190), + (19035, 17833, 'staticobjects/_exp08/player_housing/new/exp08_skyshrine_objects01_wagonmerchant02_dpo', 1190), + (19036, 17834, 'creatures/mounts/anglerserpent_mount/anglerserpent_mount_ice_transparent', 1190), + (19037, 17835, 'accessories/wieldable_items/weapons/exp09/1h_crush/1h_hammer_skyshrine_evil_fx', 1190), + (19038, 17836, 'accessories/wieldable_items/weapons/exp09/1h_crush/1h_hammer_skyshrine_good_fx', 1190), + (19039, 17837, 'accessories/wieldable_items/weapons/exp09/1h_pierce/dagger_skyshrine_evil_fx', 1190), + (19040, 17838, 'accessories/wieldable_items/weapons/exp09/1h_pierce/dagger_skyshrine_good_fx', 1190), + (19041, 17839, 'accessories/wieldable_items/weapons/exp09/1h_sword/1h_axe_skyshrine_evil_fx', 1190), + (19042, 17840, 'accessories/wieldable_items/weapons/exp09/1h_sword/1h_axe_skyshrine_good_fx', 1190), + (19043, 17841, 'accessories/wieldable_items/weapons/exp09/1h_sword/1h_sword_skyshrine_evil_fx', 1190), + (19044, 17842, 'accessories/wieldable_items/weapons/exp09/1h_sword/1h_sword_skyshrine_good_fx', 1190), + (19045, 17843, 'accessories/wieldable_items/weapons/exp09/2h_sword/2h_sword_skyshrine_evil_fx', 1190), + (19046, 17844, 'accessories/wieldable_items/weapons/exp09/2h_sword/2h_sword_skyshrine_good_fx', 1190), + (19047, 17845, 'accessories/wieldable_items/weapons/exp09/bow/longbow_skyshrine_evil_fx', 1190), + (19048, 17846, 'accessories/wieldable_items/weapons/exp09/bow/longbow_skyshrine_good_fx', 1190), + (19049, 17847, 'accessories/wieldable_items/weapons/exp09/fist/katar_spiked_skyshrine_evil_fx', 1190), + (19050, 17848, 'accessories/wieldable_items/weapons/exp09/fist/katar_spiked_skyshrine_good_fx', 1190), + (19051, 17849, 'accessories/wieldable_items/weapons/exp09/staff/halberd_skyshrine_evil_fx', 1190), + (19052, 17850, 'accessories/wieldable_items/weapons/exp09/staff/halberd_skyshrine_good_fx', 1190), + (19053, 17851, 'accessories/wieldable_items/weapons/exp09/staff/spear_open_skyshrine_evil_fx', 1190), + (19054, 17852, 'accessories/wieldable_items/weapons/exp09/staff/spear_open_skyshrine_good_fx', 1190), + (19055, 17853, 'accessories/wieldable_items/weapons/exp09/staff/spear_skyshrine_evil_fx', 1190), + (19056, 17854, 'accessories/wieldable_items/weapons/exp09/staff/spear_skyshrine_good_fx', 1190), + (19057, 17855, 'accessories/wieldable_items/weapons/exp09/staff/staff_skyshrine_evil_fx', 1190), + (19058, 17856, 'accessories/wieldable_items/weapons/exp09/staff/staff_skyshrine_good_fx', 1190), + (19059, 17857, 'staticobjects/_exp08/player_housing/new/exp08_skyshrine_objects01_pedastalmerchant01_dpo', 1190), + (19060, 17858, 'accessories/wearable_items/_exp09/antonican_faction_armor/robe/pants', 1190), + (19061, 17859, 'creatures/mounts/player_wing/player_wing_clockwork_clear', 1190), + (19062, 17860, 'creatures/mounts/player_wing/player_wing_clockwork_clear_red', 1190), + (19063, 17861, 'creatures/mounts/player_wing/player_wing_clockwork_evil', 1190), + (19064, 17862, 'creatures/mounts/player_wing/player_wing_clockwork_evil2', 1190), + (19065, 17863, 'creatures/mounts/player_wing/player_wing_clockwork_goldblue', 1190), + (19066, 17864, 'creatures/mounts/player_wing/player_wing_clockwork_goldpink', 1190), + (19067, 17865, 'creatures/mounts/player_wing/player_wing_clockwork1', 1190), + (19068, 17866, 'creatures/mounts/player_wing/player_wing_clockwork1_blue', 1190), + (19069, 17867, 'creatures/mounts/player_wing/player_wing_clockwork1_dark', 1190), + (19070, 17868, 'creatures/mounts/player_wing/player_wing_clockwork1_darkgreen', 1190), + (19071, 17869, 'creatures/mounts/player_wing/player_wing_clockwork1_green', 1190), + (19072, 17870, 'creatures/mounts/player_wing/player_wing_clockwork1_red', 1190), + (19073, 17871, 'accessories/wearable_items/cloak/exp09/cloak_mistshire', 1190), + (19074, 17872, 'accessories/wearable_items/_exp08/tradeskill_vanguard/dark/chest', 1190), + (19075, 17873, 'accessories/wearable_items/_exp08/tradeskill_vanguard/dark/feet', 1190), + (19076, 17874, 'accessories/wearable_items/_exp08/tradeskill_vanguard/dark/forearms', 1190), + (19077, 17875, 'accessories/wearable_items/_exp08/tradeskill_vanguard/dark/hands', 1190), + (19078, 17876, 'accessories/wearable_items/_exp08/tradeskill_vanguard/dark/head', 1190), + (19079, 17877, 'accessories/wearable_items/_exp08/tradeskill_vanguard/dark/left', 1190), + (19080, 17878, 'accessories/wearable_items/_exp08/tradeskill_vanguard/dark/legs', 1190), + (19081, 17879, 'accessories/wearable_items/_exp08/tradeskill_vanguard/dark/legs_noskirt', 1190), + (19082, 17880, 'accessories/wearable_items/_exp08/tradeskill_vanguard/dark/pauldron02_vanguard_ridged_left', 1190), + (19083, 17881, 'accessories/wearable_items/_exp08/tradeskill_vanguard/dark/pauldron02_vanguard_ridged_right', 1190), + (19084, 17882, 'accessories/wearable_items/_exp08/tradeskill_vanguard/dark/right', 1190), + (19085, 17883, 'accessories/wearable_items/_exp08/tradeskill_vanguard/dark/shoulders', 1190), + (19086, 17884, 'accessories/wearable_items/_exp08/tradeskill_vanguard/dark/shoulders_epic', 1190), + (19087, 17885, 'accessories/wearable_items/_exp08/tradeskill_vanguard/dark/shoulders_nopauldrons', 1190), + (19088, 17886, 'accessories/wearable_items/_exp08/tradeskill_vanguard/dark/skirt', 1190), + (19089, 17887, 'accessories/wearable_items/_exp08/tradeskill_vanguard/gold/chest', 1190), + (19090, 17888, 'accessories/wearable_items/_exp08/tradeskill_vanguard/gold/feet', 1190), + (19091, 17889, 'accessories/wearable_items/_exp08/tradeskill_vanguard/gold/forearms', 1190), + (19092, 17890, 'accessories/wearable_items/_exp08/tradeskill_vanguard/gold/hands', 1190), + (19093, 17891, 'accessories/wearable_items/_exp08/tradeskill_vanguard/gold/head', 1190), + (19094, 17892, 'accessories/wearable_items/_exp08/tradeskill_vanguard/gold/left', 1190), + (19095, 17893, 'accessories/wearable_items/_exp08/tradeskill_vanguard/gold/legs', 1190), + (19096, 17894, 'accessories/wearable_items/_exp08/tradeskill_vanguard/gold/legs_noskirt', 1190), + (19097, 17895, 'accessories/wearable_items/_exp08/tradeskill_vanguard/gold/pauldron02_vanguard_ridged_left', 1190), + (19098, 17896, 'accessories/wearable_items/_exp08/tradeskill_vanguard/gold/pauldron02_vanguard_ridged_right', 1190), + (19099, 17897, 'accessories/wearable_items/_exp08/tradeskill_vanguard/gold/right', 1190), + (19100, 17898, 'accessories/wearable_items/_exp08/tradeskill_vanguard/gold/shoulders', 1190), + (19101, 17899, 'accessories/wearable_items/_exp08/tradeskill_vanguard/gold/shoulders_epic', 1190), + (19102, 17900, 'accessories/wearable_items/_exp08/tradeskill_vanguard/gold/shoulders_nopauldrons', 1190), + (19103, 17901, 'accessories/wearable_items/_exp08/tradeskill_vanguard/gold/skirt', 1190), + (19104, 17902, 'accessories/wearable_items/_exp08/tradeskill_vanguard/green/chest', 1190), + (19105, 17903, 'accessories/wearable_items/_exp08/tradeskill_vanguard/green/feet', 1190), + (19106, 17904, 'accessories/wearable_items/_exp08/tradeskill_vanguard/green/forearms', 1190), + (19107, 17905, 'accessories/wearable_items/_exp08/tradeskill_vanguard/green/hands', 1190), + (19108, 17906, 'accessories/wearable_items/_exp08/tradeskill_vanguard/green/head', 1190), + (19109, 17907, 'accessories/wearable_items/_exp08/tradeskill_vanguard/green/left', 1190), + (19110, 17908, 'accessories/wearable_items/_exp08/tradeskill_vanguard/green/legs', 1190), + (19111, 17909, 'accessories/wearable_items/_exp08/tradeskill_vanguard/green/legs_noskirt', 1190), + (19112, 17910, 'accessories/wearable_items/_exp08/tradeskill_vanguard/green/pauldron02_vanguard_ridged_left', 1190), + (19113, 17911, 'accessories/wearable_items/_exp08/tradeskill_vanguard/green/pauldron02_vanguard_ridged_right', 1190), + (19114, 17912, 'accessories/wearable_items/_exp08/tradeskill_vanguard/green/right', 1190), + (19115, 17913, 'accessories/wearable_items/_exp08/tradeskill_vanguard/green/shoulders', 1190), + (19116, 17914, 'accessories/wearable_items/_exp08/tradeskill_vanguard/green/shoulders_epic', 1190), + (19117, 17915, 'accessories/wearable_items/_exp08/tradeskill_vanguard/green/shoulders_nopauldrons', 1190), + (19118, 17916, 'accessories/wearable_items/_exp08/tradeskill_vanguard/green/skirt', 1190), + (19119, 17917, 'accessories/wearable_items/_exp08/tradeskill_vanguard/iron/chest', 1190), + (19120, 17918, 'accessories/wearable_items/_exp08/tradeskill_vanguard/iron/feet', 1190), + (19121, 17919, 'accessories/wearable_items/_exp08/tradeskill_vanguard/iron/forearms', 1190), + (19122, 17920, 'accessories/wearable_items/_exp08/tradeskill_vanguard/iron/hands', 1190), + (19123, 17921, 'accessories/wearable_items/_exp08/tradeskill_vanguard/iron/head', 1190), + (19124, 17922, 'accessories/wearable_items/_exp08/tradeskill_vanguard/iron/left', 1190), + (19125, 17923, 'accessories/wearable_items/_exp08/tradeskill_vanguard/iron/legs', 1190), + (19126, 17924, 'accessories/wearable_items/_exp08/tradeskill_vanguard/iron/legs_noskirt', 1190), + (19127, 17925, 'accessories/wearable_items/_exp08/tradeskill_vanguard/iron/pauldron02_vanguard_ridged_left', 1190), + (19128, 17926, 'accessories/wearable_items/_exp08/tradeskill_vanguard/iron/pauldron02_vanguard_ridged_right', 1190), + (19129, 17927, 'accessories/wearable_items/_exp08/tradeskill_vanguard/iron/right', 1190), + (19130, 17928, 'accessories/wearable_items/_exp08/tradeskill_vanguard/iron/shoulders', 1190), + (19131, 17929, 'accessories/wearable_items/_exp08/tradeskill_vanguard/iron/shoulders_epic', 1190), + (19132, 17930, 'accessories/wearable_items/_exp08/tradeskill_vanguard/iron/shoulders_nopauldrons', 1190), + (19133, 17931, 'accessories/wearable_items/_exp08/tradeskill_vanguard/iron/skirt', 1190), + (19134, 17932, 'accessories/wearable_items/_exp08/tradeskill_vanguard/red/chest', 1190), + (19135, 17933, 'accessories/wearable_items/_exp08/tradeskill_vanguard/red/feet', 1190), + (19136, 17934, 'accessories/wearable_items/_exp08/tradeskill_vanguard/red/forearms', 1190), + (19137, 17935, 'accessories/wearable_items/_exp08/tradeskill_vanguard/red/hands', 1190), + (19138, 17936, 'accessories/wearable_items/_exp08/tradeskill_vanguard/red/head', 1190), + (19139, 17937, 'accessories/wearable_items/_exp08/tradeskill_vanguard/red/left', 1190), + (19140, 17938, 'accessories/wearable_items/_exp08/tradeskill_vanguard/red/legs', 1190), + (19141, 17939, 'accessories/wearable_items/_exp08/tradeskill_vanguard/red/legs_noskirt', 1190), + (19142, 17940, 'accessories/wearable_items/_exp08/tradeskill_vanguard/red/pauldron02_vanguard_ridged_left', 1190), + (19143, 17941, 'accessories/wearable_items/_exp08/tradeskill_vanguard/red/pauldron02_vanguard_ridged_right', 1190), + (19144, 17942, 'accessories/wearable_items/_exp08/tradeskill_vanguard/red/right', 1190), + (19145, 17943, 'accessories/wearable_items/_exp08/tradeskill_vanguard/red/shoulders', 1190), + (19146, 17944, 'accessories/wearable_items/_exp08/tradeskill_vanguard/red/shoulders_epic', 1190), + (19147, 17945, 'accessories/wearable_items/_exp08/tradeskill_vanguard/red/shoulders_nopauldrons', 1190), + (19148, 17946, 'accessories/wearable_items/_exp08/tradeskill_vanguard/red/skirt', 1190), + (19149, 17947, 'accessories/wearable_items/_exp08/tradeskill_vanguard/chest', 1190), + (19150, 17948, 'accessories/wearable_items/_exp08/tradeskill_vanguard/feet', 1190), + (19151, 17949, 'accessories/wearable_items/_exp08/tradeskill_vanguard/forearms', 1190), + (19152, 17950, 'accessories/wearable_items/_exp08/tradeskill_vanguard/hands', 1190), + (19153, 17951, 'accessories/wearable_items/_exp08/tradeskill_vanguard/head', 1190), + (19154, 17952, 'accessories/wearable_items/_exp08/tradeskill_vanguard/left', 1190), + (19155, 17953, 'accessories/wearable_items/_exp08/tradeskill_vanguard/legs', 1190), + (19156, 17954, 'accessories/wearable_items/_exp08/tradeskill_vanguard/legs_noskirt', 1190), + (19157, 17955, 'accessories/wearable_items/_exp08/tradeskill_vanguard/pauldron02_vanguard_ridged_left', 1190), + (19158, 17956, 'accessories/wearable_items/_exp08/tradeskill_vanguard/pauldron02_vanguard_ridged_right', 1190), + (19159, 17957, 'accessories/wearable_items/_exp08/tradeskill_vanguard/right', 1190), + (19160, 17958, 'accessories/wearable_items/_exp08/tradeskill_vanguard/shoulders', 1190), + (19161, 17959, 'accessories/wearable_items/_exp08/tradeskill_vanguard/shoulders_epic', 1190), + (19162, 17960, 'accessories/wearable_items/_exp08/tradeskill_vanguard/shoulders_nopauldrons', 1190), + (19163, 17961, 'accessories/wearable_items/_exp08/tradeskill_vanguard/skirt', 1190), + (19164, 17962, 'accessories/wieldable_items/shields/exp08/exp08_shield_celticanimated_bluegold', 1190), + (19165, 17963, 'accessories/wieldable_items/weapons/exp08/1h_crush/mace_satyr_withering_lands', 1190), + (19166, 17964, 'accessories/wieldable_items/weapons/exp08/1h_crush/wand_satyr_withering_lands', 1190), + (19167, 17965, 'accessories/wieldable_items/weapons/exp08/1h_pierce/exp08_dagger_satyr_withering_lands', 1190), + (19168, 17966, 'accessories/wieldable_items/weapons/exp08/1h_sword/exp08_sword_satyr_withering_lands', 1190), + (19169, 17967, 'accessories/wieldable_items/weapons/exp08/2h_crush/exp08_2h_hammer_satyr_withering_lands', 1190), + (19170, 17968, 'accessories/wieldable_items/weapons/exp08/2h_sword/exp08_2hs_sword_satyr_withering_lands', 1190), + (19171, 17969, 'accessories/wieldable_items/weapons/exp08/bow/exp08_bow_satyr_withering_lands', 1190), + (19172, 17970, 'accessories/wieldable_items/weapons/exp08/staff/exp08_staff_satyr_withering_lands', 1190), + (19173, 17971, '_exp08/characters/monsters/dragon_grendish/dragon_grendish', 1190), + (19174, 17972, 'accessories/wearable_items/cloak/exp09/cloak_sarnak', 1190), + (19175, 17973, 'staticobjects/_exp08/exp08_dun_skyshrine_contested/exp08_skyshrine_objects01_portalfx01_arcane01_pfx', 1190), + (19176, 17974, 'staticobjects/_exp08/exp08_dun_skyshrine_contested/exp08_skyshrine_objects01_portalfx01_gov01_pfx', 1190), + (19177, 17975, 'staticobjects/_exp08/exp08_dun_skyshrine_contested/exp08_skyshrine_objects01_portalfx01_merchant01_pfx', 1190), + (19178, 17976, '_exp08/characters/monsters/fish_bowl/fish_bowl_base', 1190), + (19179, 17977, '_exp08/characters/monsters/dragon_lendiniara/dragon_lendiniara', 1190), + (19180, 17978, 'accessories/wieldable_items/weapons/exp09/1h_crush/1h_hammer_tradeskill_bronze', 1190), + (19181, 17979, 'accessories/wieldable_items/weapons/exp09/1h_crush/1h_hammer_tradeskill_darkmetal', 1190), + (19182, 17980, 'accessories/wieldable_items/weapons/exp09/1h_crush/1h_hammer_tradeskill_gold', 1190), + (19183, 17981, 'accessories/wieldable_items/weapons/exp09/1h_crush/1h_hammer_tradeskill_iron', 1190), + (19184, 17982, 'accessories/wieldable_items/weapons/exp09/1h_pierce/dagger_tradeskill_bronze', 1190), + (19185, 17983, 'accessories/wieldable_items/weapons/exp09/1h_pierce/dagger_tradeskill_darkmetal', 1190), + (19186, 17984, 'accessories/wieldable_items/weapons/exp09/1h_pierce/dagger_tradeskill_gold', 1190), + (19187, 17985, 'accessories/wieldable_items/weapons/exp09/1h_pierce/dagger_tradeskill_iron', 1190), + (19188, 17986, 'accessories/wieldable_items/weapons/exp09/1h_sword/1h_axe_tradeskill_bronze', 1190), + (19189, 17987, 'accessories/wieldable_items/weapons/exp09/1h_sword/1h_axe_tradeskill_darkmetal', 1190), + (19190, 17988, 'accessories/wieldable_items/weapons/exp09/1h_sword/1h_axe_tradeskill_gold', 1190), + (19191, 17989, 'accessories/wieldable_items/weapons/exp09/1h_sword/1h_axe_tradeskill_iron', 1190), + (19192, 17990, 'accessories/wieldable_items/weapons/exp09/1h_sword/1h_sword_tradeskill_bronze', 1190), + (19193, 17991, 'accessories/wieldable_items/weapons/exp09/1h_sword/1h_sword_tradeskill_darkmetal', 1190), + (19194, 17992, 'accessories/wieldable_items/weapons/exp09/1h_sword/1h_sword_tradeskill_gold', 1190), + (19195, 17993, 'accessories/wieldable_items/weapons/exp09/1h_sword/1h_sword_tradeskill_iron', 1190), + (19196, 17994, 'accessories/wieldable_items/weapons/exp09/bow/longbow_tradeskill_bronze', 1190), + (19197, 17995, 'accessories/wieldable_items/weapons/exp09/bow/longbow_tradeskill_darkmetal', 1190), + (19198, 17996, 'accessories/wieldable_items/weapons/exp09/bow/longbow_tradeskill_gold', 1190), + (19199, 17997, 'accessories/wieldable_items/weapons/exp09/bow/longbow_tradeskill_iron', 1190), + (19200, 17998, 'accessories/wieldable_items/weapons/exp09/staff/halberd_tradeskill_bronze', 1190), + (19201, 17999, 'accessories/wieldable_items/weapons/exp09/staff/halberd_tradeskill_darkmetal', 1190), + (19202, 18000, 'accessories/wieldable_items/weapons/exp09/staff/halberd_tradeskill_gold', 1190), + (19203, 18001, 'accessories/wieldable_items/weapons/exp09/staff/halberd_tradeskill_iron', 1190), + (19204, 18002, 'accessories/wieldable_items/weapons/exp09/staff/staff_tradeskill_bronze', 1190), + (19205, 18003, 'accessories/wieldable_items/weapons/exp09/staff/staff_tradeskill_darkmetal', 1190), + (19206, 18004, 'accessories/wieldable_items/weapons/exp09/staff/staff_tradeskill_gold', 1190), + (19207, 18005, 'accessories/wieldable_items/weapons/exp09/staff/staff_tradeskill_iron', 1190), + (19208, 18006, 'staticobjects/fish_tank/fishtank_01_dpo', 1190), + (19209, 18007, 'staticobjects/soe_wallet/painting_withered02', 1190), + (19210, 18008, 'staticobjects/soe_wallet/fishtank_02_dpo', 1190), + (19211, 18009, 'staticobjects/soe_wallet/painting_skyshrine', 1190), + (19212, 18010, 'staticobjects/soe_wallet/painting_withered01', 1190), + (19213, 18011, 'creatures/mounts/horse_heavy/horse_epic_lava', 1190), + (19214, 18012, 'accessories/wieldable_items/weapons/exp08/1h_crush/hammer_combine_qeynos', 1190), + (19215, 18013, 'accessories/wieldable_items/weapons/exp08/1h_crush/hammer_combine_freeport', 1190), + (19216, 18014, 'accessories/wieldable_items/weapons/exp08/1h_crush/hammer_combine_neriak', 1190), + (19217, 18015, 'accessories/wieldable_items/weapons/exp08/1h_crush/hammer_combine_gorowyn', 1190), + (19218, 18016, 'accessories/wieldable_items/weapons/exp08/1h_crush/hammer_combine_halas', 1190), + (19219, 18017, 'accessories/wieldable_items/weapons/exp08/1h_crush/hammer_combine_kelethin', 1190), + (19220, 18018, 'accessories/wieldable_items/weapons/exp08/1h_pierce/exp08_dagger_combine_freeport', 1190), + (19221, 18019, 'accessories/wieldable_items/weapons/exp08/1h_pierce/exp08_dagger_combine_qeynos', 1190), + (19222, 18020, 'accessories/wieldable_items/weapons/exp08/1h_pierce/exp08_dagger_combine_neriak', 1190), + (19223, 18021, 'accessories/wieldable_items/weapons/exp08/1h_pierce/exp08_dagger_combine_gorowyn', 1190), + (19224, 18022, 'accessories/wieldable_items/weapons/exp08/1h_pierce/exp08_dagger_combine_halas', 1190), + (19225, 18023, 'accessories/wieldable_items/weapons/exp08/1h_pierce/exp08_dagger_combine_kelethin', 1190), + (19226, 18024, 'accessories/wieldable_items/weapons/exp08/1h_sword/exp08_sword_combine_gorowyn', 1190), + (19227, 18025, 'accessories/wieldable_items/weapons/exp08/1h_sword/exp08_sword_combine_qeynos', 1190), + (19228, 18026, 'accessories/wieldable_items/weapons/exp08/1h_sword/exp08_sword_combine_neriak', 1190), + (19229, 18027, 'accessories/wieldable_items/weapons/exp08/1h_sword/exp08_sword_combine_freeport', 1190), + (19230, 18028, 'accessories/wieldable_items/weapons/exp08/1h_sword/exp08_sword_combine_kelethin', 1190), + (19231, 18029, 'accessories/wieldable_items/weapons/exp08/1h_sword/exp08_sword_combine_halas', 1190), + (19232, 18030, 'accessories/wieldable_items/weapons/exp08/1h_sword/exp08_sword_combine_base', 1190), + (19233, 18031, 'accessories/wieldable_items/weapons/exp08/2h_sword/exp08_2hs_sword_combine_freeport', 1190), + (19234, 18032, 'accessories/wieldable_items/weapons/exp08/2h_sword/exp08_2hs_sword_combine_qeynos', 1190), + (19235, 18033, 'accessories/wieldable_items/weapons/exp08/2h_sword/exp08_2hs_sword_combine_neriak', 1190), + (19236, 18034, 'accessories/wieldable_items/weapons/exp08/2h_sword/exp08_2hs_sword_combine_gorowyn', 1190), + (19237, 18035, 'accessories/wieldable_items/weapons/exp08/2h_sword/exp08_2hs_sword_combine_halas', 1190), + (19238, 18036, 'accessories/wieldable_items/weapons/exp08/2h_sword/exp08_2hs_sword_combine_kelethin', 1190), + (19239, 18037, 'accessories/wearable_items/cloak/exp08/cloak_brawlin_riggins', 1190), + (19240, 18038, 'accessories/wearable_items/_exp08/brawlin_riggins_armor/snap_ons/brawlin_riggins_boot_cuff_left', 1190), + (19241, 18039, 'accessories/wearable_items/_exp08/brawlin_riggins_armor/snap_ons/brawlin_riggins_boot_cuff_right', 1190), + (19242, 18040, 'accessories/wearable_items/_exp08/brawlin_riggins_armor/snap_ons/brawlin_riggins_elbow_left', 1190), + (19243, 18041, 'accessories/wearable_items/_exp08/brawlin_riggins_armor/snap_ons/brawlin_riggins_pauldron_left', 1190), + (19244, 18042, 'accessories/wearable_items/_exp08/brawlin_riggins_armor/snap_ons/brawlin_riggins_wrist_left', 1190), + (19245, 18043, 'accessories/wearable_items/_exp08/brawlin_riggins_armor/snap_ons/brawlin_riggins_wrist_right', 1190), + (19246, 18044, 'accessories/wearable_items/_exp08/brawlin_riggins_armor/snap_ons/head_collar_brawlin_riggins', 1190), + (19247, 18045, 'accessories/wearable_items/_exp08/brawlin_riggins_armor/chest', 1190), + (19248, 18046, 'accessories/wearable_items/_exp08/brawlin_riggins_armor/feet', 1190), + (19249, 18047, 'accessories/wearable_items/_exp08/brawlin_riggins_armor/feet_peg_left', 1190), + (19250, 18048, 'accessories/wearable_items/_exp08/brawlin_riggins_armor/feet_peg_right', 1190), + (19251, 18049, 'accessories/wearable_items/_exp08/brawlin_riggins_armor/forearms', 1190), + (19252, 18050, 'accessories/wearable_items/_exp08/brawlin_riggins_armor/hands', 1190), + (19253, 18051, 'accessories/wearable_items/_exp08/brawlin_riggins_armor/head', 1190), + (19254, 18052, 'accessories/wearable_items/_exp08/brawlin_riggins_armor/legs', 1190), + (19255, 18053, 'accessories/wearable_items/_exp08/brawlin_riggins_armor/shoulders', 1190), + (19256, 18054, 'accessories/wearable_items/_exp08/brawlin_riggins_armor/skirt', 1190), + (19257, 18055, 'accessories/wieldable_items/shields/exp08/exp08_shield_tower_combine_kelethin', 1190), + (19258, 18056, 'accessories/wieldable_items/shields/exp08/exp08_shield_tower_combine_halas', 1190), + (19259, 18057, 'accessories/wieldable_items/shields/exp08/exp08_shield_tower_combine_gorowyn', 1190), + (19260, 18058, 'accessories/wieldable_items/shields/exp08/exp08_shield_tower_combine_neriak', 1190), + (19261, 18059, 'accessories/wieldable_items/shields/exp08/exp08_shield_tower_combine_freeport', 1190), + (19262, 18060, 'accessories/wieldable_items/shields/exp08/exp08_shield_tower_combine_qeynos', 1190), + (19263, 18061, '_exp01/characters/monsters/crocodile_thin_nose', 1190), + (19264, 18062, 'accessories/wearable_items/_exp08/tradeskill_robe/chest', 1190), + (19265, 18063, 'accessories/wearable_items/_exp08/tradeskill_robe/feet', 1190), + (19266, 18064, 'accessories/wearable_items/_exp08/tradeskill_robe/hands', 1190), + (19267, 18065, 'accessories/wearable_items/_exp08/tradeskill_robe/head_collar', 1190), + (19268, 18066, 'accessories/wearable_items/_exp08/tradeskill_robe/head_robe', 1190), + (19269, 18067, 'accessories/wearable_items/_exp08/tradeskill_robe/pants', 1190), + (19270, 18068, 'accessories/wearable_items/_exp08/tradeskill_robe/skirt', 1190), + (19271, 18069, 'accessories/wearable_items/_exp08/tradeskill_robe/dark/chest', 1190), + (19272, 18070, 'accessories/wearable_items/_exp08/tradeskill_robe/dark/feet', 1190), + (19273, 18071, 'accessories/wearable_items/_exp08/tradeskill_robe/dark/hands', 1190), + (19274, 18072, 'accessories/wearable_items/_exp08/tradeskill_robe/dark/head_collar', 1190), + (19275, 18073, 'accessories/wearable_items/_exp08/tradeskill_robe/dark/head_hood', 1190), + (19276, 18074, 'accessories/wearable_items/_exp08/tradeskill_robe/dark/pants', 1190), + (19277, 18075, 'accessories/wearable_items/_exp08/tradeskill_robe/dark/skirt', 1190), + (19278, 18076, 'accessories/wearable_items/_exp08/tradeskill_robe/gold/chest', 1190), + (19279, 18077, 'accessories/wearable_items/_exp08/tradeskill_robe/gold/feet', 1190), + (19280, 18078, 'accessories/wearable_items/_exp08/tradeskill_robe/gold/hands', 1190), + (19281, 18079, 'accessories/wearable_items/_exp08/tradeskill_robe/gold/head_collar', 1190), + (19282, 18080, 'accessories/wearable_items/_exp08/tradeskill_robe/gold/head_hood', 1190), + (19283, 18081, 'accessories/wearable_items/_exp08/tradeskill_robe/gold/pants', 1190), + (19284, 18082, 'accessories/wearable_items/_exp08/tradeskill_robe/gold/skirt', 1190), + (19285, 18083, 'accessories/wearable_items/_exp08/tradeskill_robe/green/chest', 1190), + (19286, 18084, 'accessories/wearable_items/_exp08/tradeskill_robe/green/feet', 1190), + (19287, 18085, 'accessories/wearable_items/_exp08/tradeskill_robe/green/hands', 1190), + (19288, 18086, 'accessories/wearable_items/_exp08/tradeskill_robe/green/head_collar', 1190), + (19289, 18087, 'accessories/wearable_items/_exp08/tradeskill_robe/green/head_hood', 1190), + (19290, 18088, 'accessories/wearable_items/_exp08/tradeskill_robe/green/pants', 1190), + (19291, 18089, 'accessories/wearable_items/_exp08/tradeskill_robe/green/skirt', 1190), + (19292, 18090, 'accessories/wearable_items/_exp08/tradeskill_robe/iron/chest', 1190), + (19293, 18091, 'accessories/wearable_items/_exp08/tradeskill_robe/iron/feet', 1190), + (19294, 18092, 'accessories/wearable_items/_exp08/tradeskill_robe/iron/hands', 1190), + (19295, 18093, 'accessories/wearable_items/_exp08/tradeskill_robe/iron/head_collar', 1190), + (19296, 18094, 'accessories/wearable_items/_exp08/tradeskill_robe/iron/head_hood', 1190), + (19297, 18095, 'accessories/wearable_items/_exp08/tradeskill_robe/iron/pants', 1190), + (19298, 18096, 'accessories/wearable_items/_exp08/tradeskill_robe/iron/skirt', 1190), + (19299, 18097, 'accessories/wearable_items/_exp08/tradeskill_robe/red/chest', 1190), + (19300, 18098, 'accessories/wearable_items/_exp08/tradeskill_robe/red/feet', 1190), + (19301, 18099, 'accessories/wearable_items/_exp08/tradeskill_robe/red/hands', 1190), + (19302, 18100, 'accessories/wearable_items/_exp08/tradeskill_robe/red/head_collar', 1190), + (19303, 18101, 'accessories/wearable_items/_exp08/tradeskill_robe/red/head_hood', 1190), + (19304, 18102, 'accessories/wearable_items/_exp08/tradeskill_robe/red/pants', 1190), + (19305, 18103, 'accessories/wearable_items/_exp08/tradeskill_robe/red/skirt', 1190), + (19306, 18104, 'staticobjects/housing_portal_objects/vision_home_void01', 1190), + (19307, 18105, 'staticobjects/housing_portal_objects/vision_home_vasty_library01', 1190), + (19308, 18106, 'staticobjects/_exp08/exp08_dun_skyshrine_contested/teleport_portalfx01', 1190), + (19309, 18107, '_exp08/characters/monsters/dragon_susarrak/susarrak', 1190), + (19310, 18108, 'accessories/wieldable_items/shields/exp08/exp08_shield_buckler_tradeskill', 1190), + (19311, 18109, 'accessories/wieldable_items/shields/exp08/exp08_shield_buckler_tradeskill_dark', 1190), + (19312, 18110, 'accessories/wieldable_items/shields/exp08/exp08_shield_buckler_tradeskill_gold', 1190), + (19313, 18111, 'accessories/wieldable_items/shields/exp08/exp08_shield_buckler_tradeskill_iron', 1190), + (19314, 18112, 'accessories/wieldable_items/shields/exp08/exp08_shield_kite_tradeskill', 1190), + (19315, 18113, 'accessories/wieldable_items/shields/exp08/exp08_shield_kite_tradeskill_dark', 1190), + (19316, 18114, 'accessories/wieldable_items/shields/exp08/exp08_shield_kite_tradeskill_gold', 1190), + (19317, 18115, 'accessories/wieldable_items/shields/exp08/exp08_shield_kite_tradeskill_iron', 1190), + (19318, 18116, 'accessories/wieldable_items/shields/exp08/exp08_shield_round_tradeskill', 1190), + (19319, 18117, 'accessories/wieldable_items/shields/exp08/exp08_shield_round_tradeskill_dark', 1190), + (19320, 18118, 'accessories/wieldable_items/shields/exp08/exp08_shield_round_tradeskill_gold', 1190), + (19321, 18119, 'accessories/wieldable_items/shields/exp08/exp08_shield_round_tradeskill_iron', 1190), + (19322, 18120, '_exp09/characters/monsters/mud_monster/mud_monster_skyshrine', 1190), + (19323, 18121, 'accessories/wearable_items/cloak/exp08/jester/cloak_jester_blackred', 1190), + (19324, 18122, 'accessories/wearable_items/cloak/exp08/jester/cloak_jester_blackwhite', 1190), + (19325, 18123, 'accessories/wearable_items/cloak/exp08/jester/cloak_jester_blueyellow', 1190), + (19326, 18124, 'accessories/wearable_items/cloak/exp08/jester/cloak_jester_greengold', 1190), + (19327, 18125, 'accessories/wearable_items/cloak/exp08/jester/cloak_jester_purplepink', 1190), + (19328, 18126, 'accessories/wearable_items/cloak/exp08/jester/cloak_jester_redgold', 1190), + (19329, 18127, 'accessories/wearable_items/_exp08/jester_heavycloth/blackred/belt/skirt 2', 1190), + (19330, 18128, 'accessories/wearable_items/_exp08/jester_heavycloth/blackred/belt/skirt', 1190), + (19331, 18129, 'accessories/wearable_items/_exp08/jester_heavycloth/blackred/head/head', 1190), + (19332, 18130, 'accessories/wearable_items/_exp08/jester_heavycloth/blackred/chest', 1190), + (19333, 18131, 'accessories/wearable_items/_exp08/jester_heavycloth/blackred/feet', 1190), + (19334, 18132, 'accessories/wearable_items/_exp08/jester_heavycloth/blackred/hands', 1190), + (19335, 18133, 'accessories/wearable_items/_exp08/jester_heavycloth/blackred/head_jester', 1190), + (19336, 18134, 'accessories/wearable_items/_exp08/jester_heavycloth/blackred/legs', 1190), + (19337, 18135, 'accessories/wearable_items/_exp08/jester_heavycloth/blackred/shoulders', 1190), + (19338, 18136, 'accessories/wearable_items/_exp08/jester_heavycloth/blackred/skirt', 1190), + (19339, 18137, 'accessories/wearable_items/_exp08/jester_heavycloth/blackwhite/belt/skirt', 1190), + (19340, 18138, 'accessories/wearable_items/_exp08/jester_heavycloth/blackwhite/belt/skirt_nofroglok', 1190), + (19341, 18139, 'accessories/wearable_items/_exp08/jester_heavycloth/blackwhite/chest', 1190), + (19342, 18140, 'accessories/wearable_items/_exp08/jester_heavycloth/blackwhite/feet', 1190), + (19343, 18141, 'accessories/wearable_items/_exp08/jester_heavycloth/blackwhite/hands', 1190), + (19344, 18142, 'accessories/wearable_items/_exp08/jester_heavycloth/blackwhite/head_jester', 1190), + (19345, 18143, 'accessories/wearable_items/_exp08/jester_heavycloth/blackwhite/legs', 1190), + (19346, 18144, 'accessories/wearable_items/_exp08/jester_heavycloth/blackwhite/shoulders', 1190), + (19347, 18145, 'accessories/wearable_items/_exp08/jester_heavycloth/blackwhite/skirt', 1190), + (19348, 18146, 'accessories/wearable_items/_exp08/jester_heavycloth/blueyellow/belt/skirt', 1190), + (19349, 18147, 'accessories/wearable_items/_exp08/jester_heavycloth/blueyellow/belt/skirt_nofroglok', 1190), + (19350, 18148, 'accessories/wearable_items/_exp08/jester_heavycloth/blueyellow/chest', 1190), + (19351, 18149, 'accessories/wearable_items/_exp08/jester_heavycloth/blueyellow/feet', 1190), + (19352, 18150, 'accessories/wearable_items/_exp08/jester_heavycloth/blueyellow/hands', 1190), + (19353, 18151, 'accessories/wearable_items/_exp08/jester_heavycloth/blueyellow/head_jester', 1190), + (19354, 18152, 'accessories/wearable_items/_exp08/jester_heavycloth/blueyellow/legs', 1190), + (19355, 18153, 'accessories/wearable_items/_exp08/jester_heavycloth/blueyellow/shoulders', 1190), + (19356, 18154, 'accessories/wearable_items/_exp08/jester_heavycloth/blueyellow/skirt', 1190), + (19357, 18155, 'accessories/wearable_items/_exp08/jester_heavycloth/greenyellow/chest', 1190), + (19358, 18156, 'accessories/wearable_items/_exp08/jester_heavycloth/greenyellow/feet', 1190), + (19359, 18157, 'accessories/wearable_items/_exp08/jester_heavycloth/greenyellow/hands', 1190), + (19360, 18158, 'accessories/wearable_items/_exp08/jester_heavycloth/greenyellow/head_jester', 1190), + (19361, 18159, 'accessories/wearable_items/_exp08/jester_heavycloth/greenyellow/legs', 1190), + (19362, 18160, 'accessories/wearable_items/_exp08/jester_heavycloth/greenyellow/shoulders', 1190), + (19363, 18161, 'accessories/wearable_items/_exp08/jester_heavycloth/greenyellow/skirt', 1190), + (19364, 18162, 'accessories/wearable_items/_exp08/jester_heavycloth/greenyellow/belt/skirt', 1190), + (19365, 18163, 'accessories/wearable_items/_exp08/jester_heavycloth/greenyellow/belt/skirt_nofroglok', 1190), + (19366, 18164, 'accessories/wearable_items/_exp08/jester_heavycloth/purplepink/chest', 1190), + (19367, 18165, 'accessories/wearable_items/_exp08/jester_heavycloth/purplepink/feet', 1190), + (19368, 18166, 'accessories/wearable_items/_exp08/jester_heavycloth/purplepink/hands', 1190), + (19369, 18167, 'accessories/wearable_items/_exp08/jester_heavycloth/purplepink/head_jester', 1190), + (19370, 18168, 'accessories/wearable_items/_exp08/jester_heavycloth/purplepink/legs', 1190), + (19371, 18169, 'accessories/wearable_items/_exp08/jester_heavycloth/purplepink/shoulders', 1190), + (19372, 18170, 'accessories/wearable_items/_exp08/jester_heavycloth/purplepink/skirt', 1190), + (19373, 18171, 'accessories/wearable_items/_exp08/jester_heavycloth/purplepink/belt/skirt', 1190), + (19374, 18172, 'accessories/wearable_items/_exp08/jester_heavycloth/purplepink/belt/skirt_nofroglok', 1190), + (19375, 18173, 'accessories/wearable_items/_exp08/jester_heavycloth/set1/belt/skirt', 1190), + (19376, 18174, 'accessories/wearable_items/_exp08/jester_heavycloth/set1/belt/skirt2', 1190), + (19377, 18175, 'accessories/wearable_items/_exp08/jester_heavycloth/set1/chest', 1190), + (19378, 18176, 'accessories/wearable_items/_exp08/jester_heavycloth/set1/feet', 1190), + (19379, 18177, 'accessories/wearable_items/_exp08/jester_heavycloth/set1/hands', 1190), + (19380, 18178, 'accessories/wearable_items/_exp08/jester_heavycloth/set1/head_jester', 1190), + (19381, 18179, 'accessories/wearable_items/_exp08/jester_heavycloth/set1/legs', 1190), + (19382, 18180, 'accessories/wearable_items/_exp08/jester_heavycloth/set1/shoulders', 1190), + (19383, 18181, 'accessories/wearable_items/_exp08/jester_heavycloth/set1/skirt', 1190), + (19384, 18182, 'creatures/mounts/horse_frost_unicorn/horse_darkspirit_unicorn', 1190), + (19385, 18183, 'creatures/mounts/horse_frost_unicorn/horse_darkspirit_unicorn_blue', 1190), + (19386, 18184, 'creatures/mounts/horse_frost_unicorn/horse_darkspirit_unicorn_greenblue', 1190), + (19387, 18185, 'creatures/mounts/horse_frost_unicorn/horse_darkspirit_unicorn_orange', 1190), + (19388, 18186, 'creatures/mounts/horse_frost_unicorn/horse_darkspirit_unicorn_purple', 1190), + (19389, 18187, 'creatures/mounts/horse_frost_unicorn/horse_darkspirit_unicorn_purpleblue', 1190), + (19390, 18188, 'creatures/mounts/horse_frost_unicorn/horse_darkspirit_unicorn_red', 1190), + (19391, 18189, 'creatures/mounts/drakota_mount/drakota_mount_blue_rainstorm', 1190), + (19392, 18190, 'creatures/mounts/drakota_mount/drakota_mount_red_firestorm', 1190), + (19393, 18191, 'accessories/wieldable_items/weapons/exp09/fist/trueheart_claw', 1190), + (19394, 18192, 'accessories/wieldable_items/weapons/exp09/fist/trueheart_claw_gold', 1190), + (19395, 18193, 'accessories/wieldable_items/weapons/exp08/1h_crush/exp08_1h_crush_tradeskill', 1190), + (19396, 18194, 'accessories/wieldable_items/weapons/exp08/1h_crush/exp08_1h_crush_tradeskill_dark', 1190), + (19397, 18195, 'accessories/wieldable_items/weapons/exp08/1h_crush/exp08_1h_crush_tradeskill_gold', 1190), + (19398, 18196, 'accessories/wieldable_items/weapons/exp08/1h_crush/exp08_1h_crush_tradeskill_iron', 1190), + (19399, 18197, 'accessories/wieldable_items/weapons/exp08/1h_pierce/exp08_1h_dagger_tradeskill', 1190), + (19400, 18198, 'accessories/wieldable_items/weapons/exp08/1h_pierce/exp08_1h_dagger_tradeskill_dark', 1190), + (19401, 18199, 'accessories/wieldable_items/weapons/exp08/1h_pierce/exp08_1h_dagger_tradeskill_gold', 1190), + (19402, 18200, 'accessories/wieldable_items/weapons/exp08/1h_pierce/exp08_1h_dagger_tradeskill_iron', 1190), + (19403, 18201, 'accessories/wieldable_items/weapons/exp08/1h_sword/exp08_axe_tradeskill', 1190), + (19404, 18202, 'accessories/wieldable_items/weapons/exp08/1h_sword/exp08_axe_tradeskill_dark', 1190), + (19405, 18203, 'accessories/wieldable_items/weapons/exp08/1h_sword/exp08_axe_tradeskill_gold', 1190), + (19406, 18204, 'accessories/wieldable_items/weapons/exp08/1h_sword/exp08_axe_tradeskill_iron', 1190), + (19407, 18205, 'accessories/wieldable_items/weapons/exp08/1h_sword/exp08_sword_tradeskill_hooked', 1190), + (19408, 18206, 'accessories/wieldable_items/weapons/exp08/1h_sword/exp08_sword_tradeskill_hooked_dark', 1190), + (19409, 18207, 'accessories/wieldable_items/weapons/exp08/1h_sword/exp08_sword_tradeskill_hooked_gold', 1190), + (19410, 18208, 'accessories/wieldable_items/weapons/exp08/1h_sword/exp08_sword_tradeskill_hooked_iron', 1190), + (19411, 18209, 'accessories/wieldable_items/weapons/exp08/2h_sword/exp08_2h_axe_tradeskill', 1190), + (19412, 18210, 'accessories/wieldable_items/weapons/exp08/2h_sword/exp08_2h_axe_tradeskill_dark', 1190), + (19413, 18211, 'accessories/wieldable_items/weapons/exp08/2h_sword/exp08_2h_axe_tradeskill_gold', 1190), + (19414, 18212, 'accessories/wieldable_items/weapons/exp08/2h_sword/exp08_2h_axe_tradeskill_iron', 1190), + (19415, 18213, 'creatures/tu/holgresh_male_tainted01', 1190), + (19416, 18214, 'ec/pc/human/human_male_bandaged', 1190), + (19417, 18215, 'accessories/wearable_items/_exp08/combine_armor/vanguard_dirty/chest', 1190), + (19418, 18216, 'accessories/wearable_items/_exp08/combine_armor/vanguard_dirty/feet', 1190), + (19419, 18217, 'accessories/wearable_items/_exp08/combine_armor/vanguard_dirty/forearms', 1190), + (19420, 18218, 'accessories/wearable_items/_exp08/combine_armor/vanguard_dirty/hands', 1190), + (19421, 18219, 'accessories/wearable_items/_exp08/combine_armor/vanguard_dirty/head_combine_helm', 1190), + (19422, 18220, 'accessories/wearable_items/_exp08/combine_armor/vanguard_dirty/legs_noskirt', 1190), + (19423, 18221, 'accessories/wearable_items/_exp08/combine_armor/vanguard_dirty/legs_robeskirt', 1190), + (19424, 18222, 'accessories/wearable_items/_exp08/combine_armor/vanguard_dirty/legs_robeskirt_epic', 1190), + (19425, 18223, 'accessories/wearable_items/_exp08/combine_armor/vanguard_dirty/shoulders', 1190), + (19426, 18224, 'accessories/wearable_items/_exp08/combine_armor/vanguard_dirty/shoulders_epic', 1190), + (19427, 18225, 'accessories/wearable_items/_exp08/combine_armor/vanguard_dirty/skirt_robe', 1190), + (19428, 18226, 'accessories/wearable_items/_exp08/combine_armor/snapons-helms/dirty_combine_forearm_left', 1190), + (19429, 18227, 'accessories/wearable_items/_exp08/combine_armor/snapons-helms/dirty_combine_forearm_right', 1190), + (19430, 18228, 'accessories/wearable_items/_exp08/combine_armor/snapons-helms/dirty_combine_pauldron_left', 1190), + (19431, 18229, 'accessories/wearable_items/_exp08/combine_armor/snapons-helms/dirty_combine_pauldron_right', 1190), + (19432, 18230, 'accessories/wearable_items/_exp08/combine_armor/snapons-helms/dirty_combine_pauldrons_lower_left', 1190), + (19433, 18231, 'accessories/wearable_items/_exp08/combine_armor/snapons-helms/dirty_combine_pauldrons_lower_right', 1190), + (19434, 18232, 'accessories/wearable_items/_exp08/combine_armor/snapons-helms/dirty_combine_shin_left', 1190), + (19435, 18233, 'accessories/wearable_items/_exp08/combine_armor/snapons-helms/dirty_combine_shin_right', 1190), + (19436, 18234, 'accessories/wearable_items/_exp08/jester_heavycloth/whitered/chest', 1190), + (19437, 18235, 'accessories/wearable_items/_exp08/jester_heavycloth/whitered/feet', 1190), + (19438, 18236, 'accessories/wearable_items/_exp08/jester_heavycloth/whitered/hands', 1190), + (19439, 18237, 'accessories/wearable_items/_exp08/jester_heavycloth/whitered/head_jester', 1190), + (19440, 18238, 'accessories/wearable_items/_exp08/jester_heavycloth/whitered/legs', 1190), + (19441, 18239, 'accessories/wearable_items/_exp08/jester_heavycloth/whitered/shoulders', 1190), + (19442, 18240, 'accessories/wearable_items/_exp08/jester_heavycloth/whitered/skirt', 1190), + (19443, 18241, 'accessories/wearable_items/_exp08/jester_heavycloth/whitered/belt/skirt', 1190), + (19444, 18242, 'accessories/wearable_items/_exp08/jester_heavycloth/whitered/belt/skirt_nofroglok', 1190), + (19445, 18243, 'creatures/mounts/carpet_fly', 1190), + (19446, 18244, 'accessories/wearable_items/cloak/exp08/jester/cloak_jester_whitered', 1190), + (19447, 18245, 'staticobjects/_exp08/dyod/poets/dyod_djn_artist_inkbottle01', 1190), + (19448, 18246, 'staticobjects/_exp08/dyod/poets/dyod_djn_displaystand_steel01', 1190), + (19449, 18247, 'staticobjects/_exp08/dyod/poets/dyod_djn_basin_water_goldbrass01', 1190), + (19450, 18248, 'staticobjects/_exp08/dyod/poets/dyod_djn_basin_water_steel01', 1190), + (19451, 18249, 'staticobjects/_exp08/dyod/poets/dyod_djn_bed_brass01', 1190), + (19452, 18250, 'staticobjects/_exp08/dyod/poets/dyod_djn_bed_gold01', 1190), + (19453, 18251, 'staticobjects/_exp08/dyod/poets/dyod_djn_books_stack_small01', 1190), + (19454, 18252, 'staticobjects/_exp08/dyod/poets/dyod_djn_books_stack_small02', 1190), + (19455, 18253, 'staticobjects/_exp08/dyod/poets/dyod_djn_books_stack_tall01', 1190), + (19456, 18254, 'staticobjects/_exp08/dyod/poets/dyod_djn_books_stack_tall02', 1190), + (19457, 18255, 'staticobjects/_exp08/dyod/poets/dyod_djn_bowl_blue01', 1190), + (19458, 18256, 'staticobjects/_exp08/dyod/poets/dyod_djn_bowl_gold01', 1190), + (19459, 18257, 'staticobjects/_exp08/dyod/poets/dyod_djn_chair_artiststool_brass01', 1190), + (19460, 18258, 'staticobjects/_exp08/dyod/poets/dyod_djn_chair_artiststool_steel01', 1190), + (19461, 18259, 'staticobjects/_exp08/dyod/poets/dyod_djn_chair_high_brass01', 1190), + (19462, 18260, 'staticobjects/_exp08/dyod/poets/dyod_djn_chair_high_gold01', 1190), + (19463, 18261, 'staticobjects/_exp08/dyod/poets/dyod_djn_chair_high_platinum01', 1190), + (19464, 18262, 'staticobjects/_exp08/dyod/poets/dyod_djn_cup_blue01', 1190), + (19465, 18263, 'staticobjects/_exp08/dyod/poets/dyod_djn_cup_brass01', 1190), + (19466, 18264, 'staticobjects/_exp08/dyod/poets/dyod_djn_desk_brass01', 1190), + (19467, 18265, 'staticobjects/_exp08/dyod/poets/dyod_djn_displaystand01', 1190), + (19468, 18266, 'staticobjects/_exp08/dyod/poets/dyod_djn_displaystand_brass03', 1190), + (19469, 18267, 'staticobjects/_exp08/dyod/poets/dyod_djn_displaystand_brass_large02', 1190), + (19470, 18268, 'staticobjects/_exp08/dyod/poets/dyod_djn_displaystand_broken01', 1190), + (19471, 18269, 'staticobjects/_exp08/dyod/poets/dyod_djn_displaystand_large01', 1190), + (19472, 18270, 'staticobjects/_exp08/dyod/poets/dyod_djn_displaystand_platinum02', 1190), + (19473, 18271, 'staticobjects/_exp08/dyod/poets/dyod_djn_pillow_floor_blueround01', 1190), + (19474, 18272, 'staticobjects/_exp08/dyod/poets/dyod_djn_displaystand_steel_large01', 1190), + (19475, 18273, 'staticobjects/_exp08/dyod/poets/dyod_djn_genielamp_gold01', 1190), + (19476, 18274, 'staticobjects/_exp08/dyod/poets/dyod_djn_genielamp_rusty01', 1190), + (19477, 18275, 'staticobjects/_exp08/dyod/poets/dyod_djn_incenseburner_brass01', 1190), + (19478, 18276, 'staticobjects/_exp08/dyod/poets/dyod_djn_incenseburner_gold01', 1190), + (19479, 18277, 'staticobjects/_exp08/dyod/poets/dyod_djn_lightsource_balloon_ornate01', 1190), + (19480, 18278, 'staticobjects/_exp08/dyod/poets/dyod_djn_lightsource_balloon_ornate01_yellow', 1190), + (19481, 18279, 'staticobjects/_exp08/dyod/poets/dyod_djn_lightsource_balloon_ornate02', 1190), + (19482, 18280, 'staticobjects/_exp08/dyod/poets/dyod_djn_lightsource_balloon_ornate03', 1190), + (19483, 18281, 'staticobjects/_exp08/dyod/poets/dyod_djn_lightsource_balloon_plain01', 1190), + (19484, 18282, 'staticobjects/_exp08/dyod/poets/dyod_djn_lightsource_table_balloon_blue', 1190), + (19485, 18283, 'staticobjects/_exp08/dyod/poets/dyod_djn_lightsource_table_balloon_orange', 1190), + (19486, 18284, 'staticobjects/_exp08/dyod/poets/dyod_djn_lightsource_table_balloon_yellow', 1190), + (19487, 18285, 'staticobjects/_exp08/dyod/poets/dyod_djn_lightsource_torch01', 1190), + (19488, 18286, 'staticobjects/_exp08/dyod/poets/dyod_djn_lightsource_torch01_blue', 1190), + (19489, 18287, 'staticobjects/_exp08/dyod/poets/dyod_djn_lightsource_walltorch01', 1190), + (19490, 18288, 'staticobjects/_exp08/dyod/poets/dyod_djn_mirror_teleporter01', 1190), + (19491, 18289, 'staticobjects/_exp08/dyod/poets/dyod_djn_mirror_translocation01', 1190), + (19492, 18290, 'staticobjects/_exp08/dyod/poets/dyod_djn_mirror_translocation_base01', 1190), + (19493, 18291, 'staticobjects/_exp08/dyod/poets/dyod_djn_mirror_wall01', 1190), + (19494, 18292, 'staticobjects/_exp08/dyod/poets/dyod_djn_music_harp01', 1190), + (19495, 18293, 'staticobjects/_exp08/dyod/poets/dyod_djn_music_harp_broken01', 1190), + (19496, 18294, 'staticobjects/_exp08/dyod/poets/dyod_djn_music_mandolin01', 1190), + (19497, 18295, 'staticobjects/_exp08/dyod/poets/dyod_djn_music_mandolin_broken01', 1190), + (19498, 18296, 'staticobjects/_exp08/dyod/poets/dyod_djn_orb_elevatorswitch01', 1190), + (19499, 18297, 'staticobjects/_exp08/dyod/poets/dyod_djn_wine_bottle_gold', 1190), + (19500, 18298, 'staticobjects/_exp08/dyod/poets/dyod_djn_pillow_floor_blueround02', 1190), + (19501, 18299, 'staticobjects/_exp08/dyod/poets/dyod_djn_pillow_floor_bluesquare01', 1190), + (19502, 18300, 'staticobjects/_exp08/dyod/poets/dyod_djn_pillow_floor_bluesquare02', 1190), + (19503, 18301, 'staticobjects/_exp08/dyod/poets/dyod_djn_pillow_floor_bluesquare03', 1190), + (19504, 18302, 'staticobjects/_exp08/dyod/poets/dyod_djn_pillow_floor_group01', 1190), + (19505, 18303, 'staticobjects/_exp08/dyod/poets/dyod_djn_pillow_floor_group01_dirty', 1190), + (19506, 18304, 'staticobjects/_exp08/dyod/poets/dyod_djn_pillow_floor_group02', 1190), + (19507, 18305, 'staticobjects/_exp08/dyod/poets/dyod_djn_pillow_floor_group02_dirty', 1190), + (19508, 18306, 'staticobjects/_exp08/dyod/poets/dyod_djn_pillow_floor_redround01', 1190), + (19509, 18307, 'staticobjects/_exp08/dyod/poets/dyod_djn_pillow_floor_redround01_dirty', 1190), + (19510, 18308, 'staticobjects/_exp08/dyod/poets/dyod_djn_pillow_floor_redround02', 1190), + (19511, 18309, 'staticobjects/_exp08/dyod/poets/dyod_djn_pillow_floor_redround02_dirty', 1190), + (19512, 18310, 'staticobjects/_exp08/dyod/poets/dyod_djn_pillow_floor_redsquare01', 1190), + (19513, 18311, 'staticobjects/_exp08/dyod/poets/dyod_djn_pillow_floor_redsquare01_dirty', 1190), + (19514, 18312, 'staticobjects/_exp08/dyod/poets/dyod_djn_pillow_floor_redsquare02', 1190), + (19515, 18313, 'staticobjects/_exp08/dyod/poets/dyod_djn_pillow_floor_redsquare02_dirty', 1190), + (19516, 18314, 'staticobjects/_exp08/dyod/poets/dyod_djn_plate_blue01', 1190), + (19517, 18315, 'staticobjects/_exp08/dyod/poets/dyod_djn_plate_gold01', 1190), + (19518, 18316, 'staticobjects/_exp08/dyod/poets/dyod_djn_pottedplant_palm01_small_blue', 1190), + (19519, 18317, 'staticobjects/_exp08/dyod/poets/dyod_djn_scriptorium_scrollracks_3m', 1190), + (19520, 18318, 'staticobjects/_exp08/dyod/poets/dyod_djn_scriptorium_scrollracks_6m', 1190), + (19521, 18319, 'staticobjects/_exp08/dyod/poets/dyod_djn_scriptorium_scrollracks_8m', 1190), + (19522, 18320, 'staticobjects/_exp08/dyod/poets/dyod_djn_scriptorium_scrollracks_candlevasebrass02', 1190), + (19523, 18321, 'staticobjects/_exp08/dyod/poets/dyod_djn_scriptorium_scrollracks_candlevasegold01', 1190), + (19524, 18322, 'staticobjects/_exp08/dyod/poets/dyod_djn_scroll_single_open01', 1190), + (19525, 18323, 'staticobjects/_exp08/dyod/poets/dyod_djn_scrolls_group03', 1190), + (19526, 18324, 'staticobjects/_exp08/dyod/poets/dyod_djn_table_artist_brass01', 1190), + (19527, 18325, 'staticobjects/_exp08/dyod/poets/dyod_djn_table_artist_steel01', 1190), + (19528, 18326, 'staticobjects/_exp08/dyod/poets/dyod_djn_table_bedside01', 1190), + (19529, 18327, 'staticobjects/_exp08/dyod/poets/dyod_djn_table_bedside02_brass01', 1190), + (19530, 18328, 'staticobjects/_exp08/dyod/poets/dyod_djn_table_brass02', 1190), + (19531, 18329, 'staticobjects/_exp08/dyod/poets/dyod_djn_table_gold01', 1190), + (19532, 18330, 'staticobjects/_exp08/dyod/poets/dyod_djn_table_platinum01', 1190), + (19533, 18331, 'staticobjects/_exp08/dyod/poets/dyod_djn_vase_brass01', 1190), + (19534, 18332, 'staticobjects/_exp08/dyod/poets/dyod_djn_vase_brass02', 1190), + (19535, 18333, 'staticobjects/_exp08/dyod/poets/dyod_djn_vase_gold01', 1190), + (19536, 18334, 'staticobjects/_exp08/dyod/poets/dyod_djn_vase_gold02', 1190), + (19537, 18335, 'staticobjects/_exp08/player_housing/new/exp08_withered_lands_satyr_totem_1', 1190), + (19538, 18336, 'staticobjects/_exp08/player_housing/new/exp08_withered_lands_satyr_totem_2', 1190), + (19539, 18337, 'staticobjects/_exp08/player_housing/new/exp08_withered_lands_satyr_totem_3', 1190), + (19540, 18338, 'staticobjects/_exp08/player_housing/new/exp08_withered_lands_satyr_totem_4', 1190), + (19541, 18339, 'accessories/wearable_items/_exp06/dwarf_armor_chain/head_hornedcrest', 1190), + (19542, 18340, 'accessories/wearable_items/cloak/exp08/cloak_royal', 1190), + (19543, 18341, 'accessories/wearable_items/_exp08/robe_royal/redgold/chest', 1190), + (19544, 18342, 'accessories/wearable_items/_exp08/robe_royal/redgold/feet', 1190), + (19545, 18343, 'accessories/wearable_items/_exp08/robe_royal/redgold/hands', 1190), + (19546, 18344, 'accessories/wearable_items/_exp08/robe_royal/redgold/head', 1190), + (19547, 18345, 'accessories/wearable_items/_exp08/robe_royal/redgold/head_collar', 1190), + (19548, 18346, 'accessories/wearable_items/_exp08/robe_royal/redgold/pants', 1190), + (19549, 18347, 'accessories/wearable_items/_exp08/robe_royal/redgold/skirt', 1190), + (19550, 18348, '_exp08/objects/satyr_camp_stone_unbroken', 1190), + (19551, 18349, '_exp08/objects/satyr_camp_stone_broken', 1190), + (19552, 18350, '_exp08/objects/stele_broken', 1190), + (19553, 18351, '_exp08/objects/stele_fixed', 1190), + (19554, 18352, '_exp08/objects/stele_fragment_01', 1190), + (19555, 18353, '_exp08/objects/stele_fragment_02', 1190), + (19556, 18354, '_exp08/objects/stele_fragment_03', 1190), + (19557, 18355, '_exp08/objects/combine_barrel_01', 1190), + (19558, 18356, '_exp08/objects/dirt_fertile', 1190), + (19559, 18357, '_exp08/objects/dirt_not_fertile', 1190), + (19560, 18358, 'creatures/mounts/drakota_mount/drakota_mount_black_stormy', 1190), + (19561, 18359, 'staticobjects/_exp08/player_housing/new/exp08_withered_lands_satyr_totem_base', 1190), + (19562, 18360, 'accessories/wearable_items/_exp08/kilt_jewelled/base/belt', 1190), + (19563, 18361, 'accessories/wearable_items/_exp08/kilt_jewelled/base/chest', 1190), + (19564, 18362, 'accessories/wearable_items/_exp08/kilt_jewelled/base/feet', 1190), + (19565, 18363, 'accessories/wearable_items/_exp08/kilt_jewelled/base/hands', 1190), + (19566, 18364, 'accessories/wearable_items/_exp08/kilt_jewelled/base/legs_short_skirt_base', 1190), + (19567, 18365, 'accessories/wearable_items/_exp08/kilt_jewelled/base/shoulders', 1190), + (19568, 18366, 'accessories/wearable_items/_exp08/kilt_jewelled/base/snap_ons/belt', 1190), + (19569, 18367, 'accessories/wearable_items/_exp08/kilt_jewelled/base/snap_ons/short_skirt', 1190), + (19570, 18368, 'accessories/wearable_items/_exp08/kilt_jewelled/troubadour_hat_jewelled/head', 1190), + (19571, 18369, 'accessories/wearable_items/_exp08/kilt_jewelled/base/head', 1190), + (19572, 18370, 'creatures/mounts/drakota_mount/drakota_mount_base_server', 1190), + (19573, 18371, 'creatures/mounts/drakota_mount/drakota_mount_black_server', 1190), + (19574, 18372, 'creatures/mounts/drakota_mount/drakota_mount_blue_server', 1190), + (19575, 18373, 'creatures/mounts/drakota_mount/drakota_mount_green_server', 1190), + (19576, 18374, 'creatures/mounts/drakota_mount/drakota_mount_red_server', 1190), + (19577, 18375, '_exp08/objects/stele_brush', 1190), + (19578, 18376, 'accessories/wearable_items/cloak/exp08/cloak_jewel', 1190), + (19579, 18377, 'accessories/wearable_items/cloak/exp08/cloak_jewel_scallop', 1190), + (19580, 18378, '_exp08/objects/baracades/wl_baracade03_dpo', 1190), + (19581, 18379, '_exp08/objects/baracades/wl_baracade01_dpo', 1190), + (19582, 18380, '_exp08/objects/baracades/wl_baracade02_dpo', 1190), + (19583, 18381, '_exp08/objects/bones/wl_bones_satyr_dpo', 1190), + (19584, 18382, '_exp08/objects/bones/wl_bones_raptor_dpo', 1190), + (19585, 18383, '_exp08/objects/bug_eggs/wl_bug_egg_dpo', 1190), + (19586, 18384, '_exp08/objects/giant_zombie_objects/wl_weapons_rack_dpo', 1190), + (19587, 18385, '_exp08/objects/giant_zombie_objects/wl_chair_dpo', 1190), + (19588, 18386, '_exp08/objects/giant_zombie_objects/wl_chest_lrg_dpo', 1190), + (19589, 18387, '_exp08/objects/holgresh/wl_hol_vertebrae_table_dpo', 1190), + (19590, 18388, '_exp08/objects/holgresh/wl_barricade1_dpo', 1190), + (19591, 18389, '_exp08/objects/holgresh/wl_barricade1_graveyard_dpo', 1190), + (19592, 18390, '_exp08/objects/holgresh/wl_barricade2_dpo', 1190), + (19593, 18391, '_exp08/objects/holgresh/wl_barricade2_graveyard_dpo', 1190), + (19594, 18392, '_exp08/objects/holgresh/wl_barricade3_dpo', 1190), + (19595, 18393, '_exp08/objects/holgresh/wl_barricade3_graveyard_dpo', 1190), + (19596, 18394, '_exp08/objects/holgresh/wl_hol_bed1_dpo', 1190), + (19597, 18395, '_exp08/objects/holgresh/wl_hol_bed2_dpo', 1190), + (19598, 18396, '_exp08/objects/holgresh/wl_hol_bonepile1_dpo', 1190), + (19599, 18397, '_exp08/objects/holgresh/wl_hol_bonepile2_dpo', 1190), + (19600, 18398, '_exp08/objects/holgresh/wl_hol_bonepile3_dpo', 1190), + (19601, 18399, '_exp08/objects/holgresh/wl_hol_bonepile4_dpo', 1190), + (19602, 18400, '_exp08/objects/holgresh/wl_hol_bowl1_dpo', 1190), + (19603, 18401, '_exp08/objects/holgresh/wl_hol_bowl2_dpo', 1190), + (19604, 18402, '_exp08/objects/holgresh/wl_hol_dragon_shoulder_dpo', 1190), + (19605, 18403, '_exp08/objects/holgresh/wl_hol_dragonskullfire_dpo', 1190), + (19606, 18404, '_exp08/objects/holgresh/wl_hol_dragontooth_dpo', 1190), + (19607, 18405, '_exp08/objects/holgresh/wl_hol_fetish_long1_dpo', 1190), + (19608, 18406, '_exp08/objects/holgresh/wl_hol_fetish_long2_dpo', 1190), + (19609, 18407, '_exp08/objects/holgresh/wl_hol_fetish_med1_dpo', 1190), + (19610, 18408, '_exp08/objects/holgresh/wl_hol_fetish_med2_dpo', 1190), + (19611, 18409, '_exp08/objects/holgresh/wl_hol_fetish_med3_dpo', 1190), + (19612, 18410, '_exp08/objects/holgresh/wl_hol_fetish_short_dpo', 1190), + (19613, 18411, '_exp08/objects/holgresh/wl_hol_skull_table_dpo', 1190), + (19614, 18412, '_exp08/objects/holgresh/wl_hol_skullfire1_dpo', 1190), + (19615, 18413, '_exp08/objects/holgresh/wl_hol_skullfire2_dpo', 1190), + (19616, 18414, '_exp08/objects/satyr_camp/wl_satyr_mat01_dpo', 1190), + (19617, 18415, '_exp08/objects/satyr_camp/wl_container_basketlong_open01_dpo', 1190), + (19618, 18416, '_exp08/objects/satyr_camp/wl_container_basketshort01_dpo', 1190), + (19619, 18417, '_exp08/objects/satyr_camp/wl_container_baskettall02_dpo', 1190), + (19620, 18418, '_exp08/objects/satyr_camp/wl_container_bowl01_dpo', 1190), + (19621, 18419, '_exp08/objects/satyr_camp/wl_goodsatyr_candle_dpo', 1190), + (19622, 18420, '_exp08/objects/withering_lands/wl_veggie_vine02_dpo', 1190), + (19623, 18421, '_exp08/objects/withering_lands/wl_evil_flower01_dpo', 1190), + (19624, 18422, '_exp08/objects/withering_lands/wl_evil_orchid_01_dpo', 1190), + (19625, 18423, '_exp08/objects/withering_lands/wl_happy_bush01_dpo', 1190), + (19626, 18424, '_exp08/objects/withering_lands/wl_swamp_pads01_dpo', 1190), + (19627, 18425, '_exp08/objects/withering_lands/wl_swamp_pads02_dpo', 1190), + (19628, 18426, '_exp08/objects/withering_lands/wl_swamp_pads03_dpo', 1190), + (19629, 18427, '_exp08/objects/withering_lands/wl_swamp_plant_dpo', 1190), + (19630, 18428, '_exp08/objects/withering_lands/wl_twisted_tree_sapling_01_dpo', 1190), + (19631, 18429, '_exp08/objects/withering_lands/wl_veggie_vine01_dpo', 1190), + (19632, 18430, '_exp08/characters/monsters/dozekar/dozekar_02', 1190), + (19633, 18431, '_exp08/characters/monsters/insect_queen/insect_queen_blue', 1190), + (19634, 18432, '_exp08/characters/monsters/lady_nevederia/lady_nevederia', 1190), + (19635, 18433, '_exp08/characters/tool_users/satyr_witheringlands_good/satyr_03', 1190), + (19636, 18434, '_exp08/objects/ritual_stone', 1190), + (19637, 18435, '_exp01/characters/monsters/crocodile_thin_nose_white', 1190), + (19638, 18436, '_exp01/characters/monsters/crocodile_white', 1190), + (19639, 18437, '_exp01/characters/monsters/crocodile_white_spots', 1190), + (19640, 18438, '_exp08/objects/raptor_nest', 1190), + (19641, 18439, 'accessories/wieldable_items/weapons/exp08/2h_sword/exp08_2hs_sword_nightmare', 1190), + (19642, 18440, 'accessories/wieldable_items/weapons/exp08/1h_pierce/exp08_dagger_serpentstrike_silver', 1190), + (19643, 18441, 'accessories/wieldable_items/weapons/exp08/1h_pierce/exp08_dagger_serpentstrike_gold', 1190), + (19644, 18442, 'accessories/wearable_items/_exp08/arasai_heritage_armor/snap_ons/arasai_heritage_boot_cuff_female_left', 1190), + (19645, 18443, 'accessories/wearable_items/_exp08/arasai_heritage_armor/snap_ons/arasai_heritage_boot_cuff_female_right', 1190), + (19646, 18444, 'accessories/wearable_items/_exp08/arasai_heritage_armor/snap_ons/arasai_heritage_boot_cuff_left', 1190), + (19647, 18445, 'accessories/wearable_items/_exp08/arasai_heritage_armor/snap_ons/arasai_heritage_boot_cuff_right', 1190), + (19648, 18446, 'accessories/wearable_items/_exp08/arasai_heritage_armor/snap_ons/arasai_heritage_chest', 1190), + (19649, 18447, 'accessories/wearable_items/_exp08/arasai_heritage_armor/snap_ons/arasai_heritage_collar', 1190), + (19650, 18448, 'accessories/wearable_items/_exp08/arasai_heritage_armor/snap_ons/arasai_heritage_foot_left', 1190), + (19651, 18449, 'accessories/wearable_items/_exp08/arasai_heritage_armor/snap_ons/arasai_heritage_foot_right', 1190), + (19652, 18450, 'accessories/wearable_items/_exp08/arasai_heritage_armor/snap_ons/arasai_heritage_forearm_left', 1190), + (19653, 18451, 'accessories/wearable_items/_exp08/arasai_heritage_armor/snap_ons/arasai_heritage_forearm_right', 1190), + (19654, 18452, 'accessories/wearable_items/_exp08/arasai_heritage_armor/snap_ons/arasai_heritage_pauldron_left', 1190), + (19655, 18453, 'accessories/wearable_items/_exp08/arasai_heritage_armor/snap_ons/arasai_heritage_pauldron_right', 1190), + (19656, 18454, 'accessories/wearable_items/_exp08/arasai_heritage_armor/snap_ons/arasai_heritage_shin_left', 1190), + (19657, 18455, 'accessories/wearable_items/_exp08/arasai_heritage_armor/snap_ons/arasai_heritage_shin_right', 1190), + (19658, 18456, 'accessories/wearable_items/_exp08/arasai_heritage_armor/snap_ons/arasai_heritage_upperarm_left', 1190), + (19659, 18457, 'accessories/wearable_items/_exp08/arasai_heritage_armor/snap_ons/arasai_heritage_upperarm_right', 1190), + (19660, 18458, 'accessories/wearable_items/_exp08/arasai_heritage_armor/snap_ons/arasai_heritage_upperthigh_left', 1190), + (19661, 18459, 'accessories/wearable_items/_exp08/arasai_heritage_armor/snap_ons/arasai_heritage_upperthigh_right', 1190), + (19662, 18460, 'accessories/wearable_items/_exp08/arasai_heritage_armor/chest', 1190), + (19663, 18461, 'accessories/wearable_items/_exp08/arasai_heritage_armor/hands', 1190), + (19664, 18462, 'accessories/wearable_items/_exp08/arasai_heritage_armor/head_arasai_heritage', 1190), + (19665, 18463, 'accessories/wearable_items/_exp08/arasai_heritage_armor/legs', 1190), + (19666, 18464, 'accessories/wearable_items/cloak/exp08/cloak_arasai_heritage', 1190), + (19667, 18465, 'accessories/wieldable_items/shields/exp08/exp08_shield_gemstone_marbleflame', 1190), + (19668, 18466, 'accessories/wieldable_items/shields/exp08/exp08_shield_gemstone_purple', 1190), + (19669, 18467, 'accessories/wieldable_items/shields/exp08/exp08_shield_gemstone_marblemist', 1190), + (19670, 18468, 'accessories/wieldable_items/shields/exp08/exp08_shield_gemstone_blue', 1190), + (19671, 18469, 'accessories/wieldable_items/weapons/exp08/bow/exp08_bow_emberwood', 1190), + (19672, 18470, 'accessories/wieldable_items/weapons/exp08/bow/exp08_bow_emberwood_dark', 1190), + (19673, 18471, 'creatures/mounts/wyvern_mount/wyvern_mount_base', 1190), + (19674, 18472, 'accessories/wieldable_items/shields/exp08/exp08_shield_dragonanimated_royalvelium', 1190), + (19675, 18473, 'accessories/wieldable_items/shields/exp08/exp08_shield_dragonanimated_silver', 1190), + (19676, 18474, 'accessories/wieldable_items/shields/exp08/exp08_shield_dragonanimated_velium', 1190), + (19677, 18475, 'creatures/mounts/carpet_fly_battlemage_pestillence', 1190), + (19678, 18476, 'creatures/mounts/carpet_fly_battlemage_purple', 1190), + (19679, 18477, 'creatures/mounts/carpet_fly_battlemage_red', 1190), + (19680, 18478, 'creatures/mounts/carpet_fly_glass_swirl_blue', 1190), + (19681, 18479, 'creatures/mounts/carpet_fly_glass_swirl_red', 1190), + (19682, 18480, 'creatures/mounts/horse_heavy/horse_new_combine_freeport', 1190), + (19683, 18481, 'creatures/mounts/horse_heavy/horse_new_combine_halas', 1190), + (19684, 18482, '_exp08/characters/tool_users/satyr_witheringlands_good/satyr_01', 1190), + (19685, 18483, 'creatures/mounts/horse_heavy/horse_new_combine_kelethin', 1190), + (19686, 18484, 'creatures/mounts/horse_heavy/horse_new_combine_neriak', 1190), + (19687, 18485, 'creatures/mounts/horse_heavy/horse_new_combine_qeynos', 1190), + (19688, 18486, 'creatures/mounts/horse_heavy/horse_new_combine_gorowyn', 1190), + (19689, 18487, 'accessories/wearable_items/cloak/exp09/cloak_withering_lands', 1190), + (19690, 18488, '_exp08/characters/tool_users/combine_woodelf/combine_woodelf_optimized', 1190), + (19691, 18489, 'creatures/pets/lumpy_pet/pet_dragon_lumpy_blue', 1190), + (19692, 18490, 'creatures/pets/lumpy_pet/pet_dragon_lumpy_gold', 1190), + (19693, 18491, 'creatures/pets/lumpy_pet/pet_dragon_lumpy_green', 1190), + (19694, 18492, 'creatures/pets/lumpy_pet/pet_dragon_lumpy_purple', 1190), + (19695, 18493, 'creatures/pets/lumpy_pet/pet_dragon_lumpy_red', 1190), + (19696, 18494, 'creatures/pets/lumpy_pet/pet_dragon_lumpy_shadow', 1190), + (19697, 18495, '_exp08/characters/tool_users/satyr_witheringlands_good/satyr_02', 1190), + (19698, 18496, '_exp08/characters/tool_users/satyr_witheringlands_good/satyr_04', 1190), + (19699, 18497, '_exp08/characters/tool_users/satyr_witheringlands_good/satyr_05', 1190), + (19700, 18498, 'staticobjects/tcg/tcg_painting68_burnish', 1190), + (19701, 18499, 'staticobjects/tcg/tcg_painting62_transcendinghelm', 1190), + (19702, 18500, 'staticobjects/tcg/tcg_painting63_library', 1190), + (19703, 18501, 'staticobjects/tcg/tcg_painting64_daughter', 1190), + (19704, 18502, 'staticobjects/tcg/tcg_painting65_sandguard', 1190), + (19705, 18503, 'staticobjects/tcg/tcg_painting66_fitbattle', 1190), + (19706, 18504, 'staticobjects/tcg/tcg_painting67_buccaneer', 1190), + (19707, 18505, 'accessories/wieldable_items/weapons/exp08/1h_crush/exp08_1h_club_holgresh', 1190), + (19708, 18506, 'accessories/wieldable_items/weapons/exp08/1h_pierce/exp08_1h_dagger_holgresh', 1190), + (19709, 18507, 'accessories/wieldable_items/weapons/exp08/1h_sword/exp08_1hs_axe_holgresh', 1190), + (19710, 18508, 'accessories/wieldable_items/weapons/exp08/1h_sword/exp08_1hs_sword_holgresh', 1190), + (19711, 18509, 'accessories/wieldable_items/weapons/exp08/1h_sword/exp08_1hs_axe_holgresh_pc', 1190), + (19712, 18510, 'staticobjects/_exp08/player_housing/new/exp08_withered_lands_combine_mailbox', 1190), + (19713, 18511, '_exp09/characters/monsters/mud_monster/mud_monster_illusion', 1190), + (19714, 18512, 'creatures/monsters/goo_withering_lands', 1190), + (19715, 18513, 'accessories/wearable_items/profesion_hats/snow_bunny_hat/lumpy_dragon_variants/head_snow_bunny_hat_blue', 1190), + (19716, 18514, 'accessories/wearable_items/profesion_hats/snow_bunny_hat/lumpy_dragon_variants/head_snow_bunny_hat_gold', 1190), + (19717, 18515, 'accessories/wearable_items/profesion_hats/snow_bunny_hat/lumpy_dragon_variants/head_snow_bunny_hat_green', 1190), + (19718, 18516, 'accessories/wearable_items/profesion_hats/snow_bunny_hat/lumpy_dragon_variants/head_snow_bunny_hat_purple', 1190), + (19719, 18517, 'accessories/wearable_items/profesion_hats/snow_bunny_hat/lumpy_dragon_variants/head_snow_bunny_hat_red', 1190), + (19720, 18518, 'accessories/wearable_items/profesion_hats/snow_bunny_hat/lumpy_dragon_variants/head_snow_bunny_hat_shadow', 1190), + (19721, 18519, '_exp08/characters/monsters/wyvern_new/wyvern_new_base', 1190), + (19722, 18520, 'accessories/wearable_items/_exp08/highelf_heritage_armor/valkyrie_new/chest', 1190), + (19723, 18521, 'creatures/pets/terrorbird_chick/terrorbird_chick', 1190), + (19724, 18522, 'accessories/wearable_items/_exp08/highelf_heritage_armor/valkyrie_new/forearms', 1190), + (19725, 18523, 'accessories/wearable_items/cloak/exp08/cloak_antonican_guard_chain', 1190), + (19726, 18524, 'accessories/wearable_items/_exp08/highelf_heritage_armor/valkyrie_new/legs', 1190), + (19727, 18525, 'creatures/tu/holgresh_male_caster01', 1190), + (19728, 18526, 'creatures/tu/holgresh_male_caster02', 1190), + (19729, 18527, 'creatures/tu/holgresh_male_caster03', 1190), + (19730, 18528, 'creatures/tu/holgresh_male_warrior01', 1190), + (19731, 18529, 'creatures/tu/holgresh_male_warrior02', 1190), + (19732, 18530, 'staticobjects/_exp08/player_housing/new/exp08_withered_lands_combine_trough', 1190), + (19733, 18531, 'staticobjects/_exp08/player_housing/new/exp08_withered_lands_combine_wheelbarrow', 1190), + (19734, 18532, 'staticobjects/_exp08/player_housing/new/exp08_withered_lands_combine_ark', 1190), + (19735, 18533, 'staticobjects/_exp08/player_housing/new/exp08_withered_lands_combine_barrel', 1190), + (19736, 18534, 'staticobjects/_exp08/player_housing/new/exp08_withered_lands_combine_bellows', 1190), + (19737, 18535, 'staticobjects/_exp08/player_housing/new/exp08_withered_lands_combine_bench', 1190), + (19738, 18536, 'staticobjects/_exp08/player_housing/new/exp08_withered_lands_combine_book_01', 1190), + (19739, 18537, 'staticobjects/_exp08/player_housing/new/exp08_withered_lands_combine_book_02', 1190), + (19740, 18538, 'staticobjects/_exp08/player_housing/new/exp08_withered_lands_combine_book_03', 1190), + (19741, 18539, 'staticobjects/_exp08/player_housing/new/exp08_withered_lands_combine_book_04', 1190), + (19742, 18540, 'staticobjects/_exp08/player_housing/new/exp08_withered_lands_combine_brazier_01', 1190), + (19743, 18541, 'staticobjects/_exp08/player_housing/new/exp08_withered_lands_combine_brazier_02', 1190), + (19744, 18542, 'staticobjects/_exp08/player_housing/new/exp08_withered_lands_combine_brazier_03', 1190), + (19745, 18543, 'staticobjects/_exp08/player_housing/new/exp08_withered_lands_combine_crate_01', 1190), + (19746, 18544, 'staticobjects/_exp08/player_housing/new/exp08_withered_lands_combine_cupboard_01', 1190), + (19747, 18545, 'staticobjects/_exp08/player_housing/new/exp08_withered_lands_combine_cupboard_02', 1190), + (19748, 18546, 'staticobjects/_exp08/player_housing/new/exp08_withered_lands_combine_cupboard_03', 1190), + (19749, 18547, 'staticobjects/_exp08/player_housing/new/exp08_withered_lands_combine_flag_freeport', 1190), + (19750, 18548, 'staticobjects/_exp08/player_housing/new/exp08_withered_lands_combine_flag_freeport_hanging', 1190), + (19751, 18549, 'staticobjects/_exp08/player_housing/new/exp08_withered_lands_combine_flag_gorowyn', 1190), + (19752, 18550, 'staticobjects/_exp08/player_housing/new/exp08_withered_lands_combine_flag_gorowyn_hanging', 1190), + (19753, 18551, 'staticobjects/_exp08/player_housing/new/exp08_withered_lands_combine_flag_halas', 1190), + (19754, 18552, 'staticobjects/_exp08/player_housing/new/exp08_withered_lands_combine_flag_halas_hanging', 1190), + (19755, 18553, 'staticobjects/_exp08/player_housing/new/exp08_withered_lands_combine_flag_kelethin', 1190), + (19756, 18554, 'staticobjects/_exp08/player_housing/new/exp08_withered_lands_combine_flag_kelethin_hanging', 1190), + (19757, 18555, 'staticobjects/_exp08/player_housing/new/exp08_withered_lands_combine_flag_neriak', 1190), + (19758, 18556, 'staticobjects/_exp08/player_housing/new/exp08_withered_lands_combine_flag_neriak_hanging', 1190), + (19759, 18557, 'staticobjects/_exp08/player_housing/new/exp08_withered_lands_combine_flag_qeynos', 1190), + (19760, 18558, 'staticobjects/_exp08/player_housing/new/exp08_withered_lands_combine_flag_qeynos_hanging', 1190), + (19761, 18559, 'staticobjects/_exp08/player_housing/new/exp08_withered_lands_combine_grave', 1190), + (19762, 18560, 'staticobjects/_exp08/player_housing/new/exp08_withered_lands_combine_gravestone_01', 1190), + (19763, 18561, 'staticobjects/_exp08/player_housing/new/exp08_withered_lands_combine_gravestone_02', 1190), + (19764, 18562, 'staticobjects/_exp08/player_housing/new/exp08_withered_lands_combine_gravestone_03', 1190), + (19765, 18563, 'staticobjects/_exp08/player_housing/new/exp08_withered_lands_combine_gravestone_04', 1190), + (19766, 18564, 'staticobjects/_exp08/player_housing/new/exp08_withered_lands_combine_gravestone_05', 1190), + (19767, 18565, 'staticobjects/_exp08/player_housing/new/exp08_withered_lands_combine_gravestone_06', 1190), + (19768, 18566, 'staticobjects/_exp08/player_housing/new/exp08_withered_lands_combine_jewelry_box', 1190), + (19769, 18567, 'staticobjects/_exp08/player_housing/new/exp08_withered_lands_combine_map', 1190), + (19770, 18568, 'staticobjects/_exp08/player_housing/new/exp08_withered_lands_combine_nightstand', 1190), + (19771, 18569, 'staticobjects/_exp08/player_housing/new/exp08_withered_lands_combine_rug_01', 1190), + (19772, 18570, 'staticobjects/_exp08/player_housing/new/exp08_withered_lands_combine_rug_02', 1190), + (19773, 18571, 'staticobjects/_exp08/player_housing/new/exp08_withered_lands_combine_rug_03', 1190), + (19774, 18572, 'staticobjects/_exp08/player_housing/new/exp08_withered_lands_combine_rug_04', 1190), + (19775, 18573, 'staticobjects/_exp08/player_housing/new/exp08_withered_lands_combine_rug_05', 1190), + (19776, 18574, 'staticobjects/_exp08/player_housing/new/exp08_withered_lands_combine_rug_06', 1190), + (19777, 18575, 'staticobjects/_exp08/player_housing/new/exp08_withered_lands_combine_stage', 1190), + (19778, 18576, 'staticobjects/_exp08/player_housing/new/exp08_withered_lands_combine_stairs', 1190), + (19779, 18577, 'staticobjects/_exp08/player_housing/new/exp08_withered_lands_combine_stool', 1190), + (19780, 18578, 'staticobjects/_exp08/player_housing/new/exp08_withered_lands_combine_table', 1190), + (19781, 18579, 'accessories/wearable_items/cloak/exp09/cloak_springtime_blue', 1190), + (19782, 18580, 'accessories/wearable_items/cloak/exp09/cloak_springwrap_gold', 1190), + (19783, 18581, 'accessories/wearable_items/cloak/exp09/cloak_springwrap_green', 1190), + (19784, 18582, 'accessories/wearable_items/cloak/exp09/cloak_springwrap_purp', 1190), + (19785, 18583, 'accessories/wearable_items/cloak/exp09/cloak_springwrap_red', 1190), + (19786, 18584, 'accessories/wearable_items/cloak/exp09/cloak_springwrap_shadow', 1190), + (19787, 18585, 'staticobjects/_exp08/player_housing/wl_draconic_spire_platform_dpo', 1190), + (19788, 18586, 'ec/pc/human/human_male_voicetest', 1190), + (19789, 18587, '_exp08/objects/holgresh_head_on_pike', 1190), + (19790, 18588, 'staticobjects/tcg/tcg_tinkered_box_blue_button', 1190), + (19791, 18589, 'staticobjects/tcg/tcg_tinkered_box_red_button2', 1190), + (19792, 18590, '_exp08/objects/combine_wagon_01', 1190), + (19793, 18591, '_exp08/objects/combine_wagon_nowheel_01', 1190), + (19794, 18592, '_exp08/objects/combine_wagon_wheel_01', 1190), + (19795, 18593, 'staticobjects/guildhall/trophies/floor_dozekar_the_ancient', 1190), + (19796, 18594, 'staticobjects/guildhall/trophies/floor_sevalak_of_storms', 1190), + (19797, 18595, 'staticobjects/guildhall/trophies/floor_vyskudra_the_ancient', 1190), + (19798, 18596, '_exp08/objects/wl_hol_evil_totem', 1190), + (19799, 18597, '_exp08/characters/monsters/dragon_made_golem/dragon_made_golem_crystaline', 1190), + (19800, 18598, 'staticobjects/guildhall/trophies/floor_dozekar_the_ancient_fx', 1190), + (19801, 18599, '_exp09/objects/sleepers_tomb/sleepers_tomb_oblisque02', 1190), + (19802, 18600, 'accessories/wearable_items/_exp08/antonican_guard/chain/chest', 1190), + (19803, 18601, 'accessories/wearable_items/_exp08/antonican_guard/chain/feet', 1190), + (19804, 18602, 'staticobjects/housing_portal_objects/vision_home_enchanted01', 1190), + (19805, 18603, 'staticobjects/housing_portal_objects/vision_home_citadel01', 1190), + (19806, 18604, 'accessories/wearable_items/_exp08/highelf_heritage_armor/snapons/shoulder_armband_female_right_and_left', 1190), + (19807, 18605, 'accessories/wearable_items/_exp08/highelf_heritage_armor/snapons/shoulder_armband_female_left', 1190), + (19808, 18606, 'staticobjects/_exp08/player_housing/new/exp08_skyshrine_objects01_statue03_gov01_mable_dpo', 1190), + (19809, 18607, 'accessories/wearable_items/_exp09/antonican_faction_armor/robe/pauldron_left', 1190), + (19810, 18608, 'accessories/wearable_items/_exp09/antonican_faction_armor/robe/pauldron_right', 1190), + (19811, 18609, 'accessories/wearable_items/_exp09/antonican_faction_armor/robe/skirt', 1190), + (19812, 18610, 'accessories/wearable_items/_exp09/celestial_watch/chest', 1190), + (19813, 18611, 'accessories/wearable_items/_exp09/celestial_watch/feet', 1190), + (19814, 18612, 'accessories/wearable_items/_exp09/celestial_watch/forearms', 1190), + (19815, 18613, 'accessories/wearable_items/_exp09/celestial_watch/hands', 1190), + (19816, 18614, 'accessories/wearable_items/_exp09/celestial_watch/head', 1190), + (19817, 18615, 'accessories/wearable_items/_exp09/celestial_watch/legs', 1190), + (19818, 18616, 'accessories/wearable_items/_exp09/celestial_watch/legs_noskirt', 1190), + (19819, 18617, 'accessories/wearable_items/_exp09/celestial_watch/pauldron_left_celestial_watch', 1190), + (19820, 18618, 'accessories/wearable_items/_exp09/celestial_watch/pauldron_right_celestial_watch', 1190), + (19821, 18619, 'accessories/wearable_items/_exp09/celestial_watch/shoulders', 1190), + (19822, 18620, 'accessories/wearable_items/_exp09/celestial_watch/shoulders_epic', 1190), + (19823, 18621, 'accessories/wearable_items/_exp09/celestial_watch/skirt', 1190), + (19824, 18622, 'accessories/wearable_items/_exp09/celestial_watch/robe_head/head_hood', 1190), + (19825, 18623, 'accessories/wearable_items/cloak/exp09/cloak_celestial_watch', 1190), + (19826, 18624, 'accessories/wieldable_items/shields/exp09/shield_celestial_watch', 1190), + (19827, 18625, 'accessories/wearable_items/_exp08/rogue_whisperweave/chest_1', 1190), + (19828, 18626, 'accessories/wearable_items/_exp08/rogue_whisperweave/hands_1', 1190), + (19829, 18627, 'accessories/wearable_items/_exp08/rogue_whisperweave/legs_1', 1190), + (19830, 18628, 'accessories/wearable_items/_exp08/antonican_guard/chain/forearms', 1190), + (19831, 18629, 'accessories/wearable_items/_exp08/antonican_guard/chain/hands', 1190), + (19832, 18630, 'accessories/wearable_items/_exp08/antonican_guard/chain/head', 1190), + (19833, 18631, 'accessories/wearable_items/_exp08/antonican_guard/chain/legs', 1190), + (19834, 18632, 'accessories/wearable_items/_exp08/antonican_guard/chain/legs_noskirt', 1190), + (19835, 18633, 'accessories/wearable_items/_exp08/antonican_guard/chain/shoulders', 1190), + (19836, 18634, 'accessories/wearable_items/_exp08/antonican_guard/chain/shoulders_nopauldrons', 1190), + (19837, 18635, 'accessories/wearable_items/_exp08/antonican_guard/chain/skirt', 1190), + (19838, 18636, 'accessories/wearable_items/_exp08/antonican_guard/leather_heavycloth/belt/skirt 2', 1190), + (19839, 18637, 'accessories/wearable_items/_exp08/antonican_guard/leather_heavycloth/belt/skirt', 1190), + (19840, 18638, 'accessories/wearable_items/_exp08/antonican_guard/leather_heavycloth/chest', 1190), + (19841, 18639, 'accessories/wearable_items/_exp08/antonican_guard/leather_heavycloth/feet', 1190), + (19842, 18640, 'accessories/wearable_items/_exp08/antonican_guard/leather_heavycloth/hands', 1190), + (19843, 18641, 'accessories/wearable_items/_exp08/antonican_guard/leather_heavycloth/head_hood', 1190), + (19844, 18642, 'accessories/wearable_items/_exp08/antonican_guard/leather_heavycloth/legs', 1190), + (19845, 18643, 'accessories/wearable_items/_exp08/antonican_guard/leather_heavycloth/shoulders', 1190), + (19846, 18644, 'accessories/wearable_items/_exp08/antonican_guard/leather_heavycloth/shoulders_nopauldrons', 1190), + (19847, 18645, 'accessories/wearable_items/_exp08/antonican_guard/leather_heavycloth/skirt', 1190), + (19848, 18646, 'accessories/wearable_items/_exp08/antonican_guard/robe/chest', 1190), + (19849, 18647, 'accessories/wearable_items/_exp08/antonican_guard/robe/chest_pauldrons', 1190), + (19850, 18648, 'accessories/wearable_items/_exp08/antonican_guard/robe/feet', 1190), + (19851, 18649, 'accessories/wearable_items/_exp08/antonican_guard/robe/hands', 1190), + (19852, 18650, 'accessories/wearable_items/_exp08/antonican_guard/robe/head_collar', 1190), + (19853, 18651, 'accessories/wearable_items/_exp08/antonican_guard/robe/head_collar_flared', 1190), + (19854, 18652, 'accessories/wearable_items/_exp08/antonican_guard/robe/head_hood', 1190), + (19855, 18653, 'accessories/wearable_items/_exp08/antonican_guard/robe/pants', 1190), + (19856, 18654, 'accessories/wearable_items/_exp08/antonican_guard/robe/skirt', 1190), + (19857, 18655, 'accessories/wearable_items/_exp08/antonican_guard/snapons_extras/head_crest', 1190), + (19858, 18656, 'accessories/wearable_items/_exp08/antonican_guard/snapons_extras/head_topknot', 1190), + (19859, 18657, 'accessories/wearable_items/_exp08/antonican_guard/snapons_extras/qeynos_pauldron_light_left', 1190), + (19860, 18658, 'accessories/wearable_items/_exp08/antonican_guard/snapons_extras/qeynos_pauldron_light_right', 1190), + (19861, 18659, 'accessories/wearable_items/_exp08/antonican_guard/snapons_extras/qeynos_vanguard_pauldron_chain_left', 1190), + (19862, 18660, 'accessories/wearable_items/_exp08/antonican_guard/snapons_extras/qeynos_vanguard_pauldron_chain_right', 1190), + (19863, 18661, 'accessories/wearable_items/_exp08/antonican_guard/snapons_extras/qeynos_pauldron_robe_right', 1190), + (19864, 18662, 'accessories/wearable_items/_exp08/antonican_guard/snapons_extras/qeynos_pauldron_robe_left', 1190), + (19865, 18663, 'accessories/wearable_items/_exp08/antonican_guard/snapons_extras/qeynos_vanguard_pauldron_sm_left', 1190), + (19866, 18664, 'accessories/wearable_items/_exp08/antonican_guard/snapons_extras/qeynos_vanguard_pauldron_sm_right', 1190), + (19867, 18665, 'accessories/wearable_items/_exp08/antonican_guard/snapons_extras/qeynos_vanguard_shinguard_left', 1190), + (19868, 18666, 'accessories/wearable_items/_exp08/antonican_guard/snapons_extras/qeynos_vanguard_shinguard_right', 1190), + (19869, 18667, 'accessories/wearable_items/_exp08/antonican_guard/snapons_extras/qeynos_vanguard_bracer_left', 1190), + (19870, 18668, 'accessories/wearable_items/_exp08/antonican_guard/snapons_extras/qeynos_vanguard_bracer_right', 1190), + (19871, 18669, 'accessories/wearable_items/_exp08/antonican_guard/snapons_extras/qeynos_vanguard_pauldron2_left', 1190), + (19872, 18670, 'accessories/wearable_items/_exp08/antonican_guard/snapons_extras/qeynos_vanguard_pauldron2_right', 1190), + (19873, 18671, 'accessories/wearable_items/_exp08/antonican_guard/snapons_extras/qeynos_vanguard_pauldron_left', 1190), + (19874, 18672, 'accessories/wearable_items/_exp08/antonican_guard/snapons_extras/qeynos_vanguard_pauldron_right', 1190), + (19875, 18673, 'accessories/wearable_items/_exp08/antonican_guard/vanguard/chest', 1190), + (19876, 18674, 'accessories/wearable_items/_exp08/antonican_guard/vanguard/feet', 1190), + (19877, 18675, 'accessories/wearable_items/_exp08/antonican_guard/vanguard/forearms', 1190), + (19878, 18676, 'accessories/wearable_items/_exp08/antonican_guard/vanguard/hands', 1190), + (19879, 18677, 'accessories/wearable_items/_exp08/antonican_guard/vanguard/head', 1190), + (19880, 18678, 'accessories/wearable_items/_exp08/antonican_guard/vanguard/head_epic', 1190), + (19881, 18679, 'accessories/wearable_items/_exp08/antonican_guard/vanguard/head_epic_crest', 1190), + (19882, 18680, 'accessories/wearable_items/_exp08/antonican_guard/vanguard/head_epic_topknot', 1190), + (19883, 18681, 'accessories/wearable_items/_exp08/antonican_guard/vanguard/left', 1190), + (19884, 18682, 'accessories/wearable_items/_exp08/antonican_guard/vanguard/legs', 1190), + (19885, 18683, 'accessories/wearable_items/_exp08/antonican_guard/vanguard/legs_epic', 1190), + (19886, 18684, 'accessories/wearable_items/_exp08/antonican_guard/vanguard/legs_noskirt', 1190), + (19887, 18685, 'accessories/wearable_items/_exp08/antonican_guard/vanguard/right', 1190), + (19888, 18686, 'accessories/wearable_items/_exp08/antonican_guard/vanguard/shoulders', 1190), + (19889, 18687, 'accessories/wearable_items/_exp08/antonican_guard/vanguard/shoulders_epic', 1190), + (19890, 18688, 'accessories/wearable_items/_exp08/antonican_guard/vanguard/shoulders_nopauldron', 1190), + (19891, 18689, 'accessories/wearable_items/_exp08/antonican_guard/vanguard/skirt', 1190), + (19892, 18690, 'accessories/wearable_items/cloak/exp08/cloak_antonican_guard_leather', 1190), + (19893, 18691, 'ec/npc/antonia_2012_paladin', 1190), + (19894, 18692, 'ec/npc/antonia_2012_regal', 1190), + (19895, 18693, 'creatures/mounts/griffin_classic/griffin_classic', 1190), + (19896, 18694, 'accessories/wearable_items/cloak/exp08/cloak_antonia_2012', 1190), + (19897, 18695, 'accessories/wieldable_items/shields/exp08/exp08_shield_antonia_paladin', 1190), + (19898, 18696, 'accessories/wieldable_items/weapons/exp08/1h_sword/exp08_1hs_sword_antonia_paladin', 1190), + (19899, 18697, 'accessories/wearable_items/_exp09/qeynos_faction/vanguard/chest', 1190), + (19900, 18698, 'accessories/wearable_items/_exp09/qeynos_faction/vanguard/epic_pauldron_left', 1190), + (19901, 18699, 'accessories/wearable_items/_exp09/qeynos_faction/vanguard/epic_pauldron_right', 1190), + (19902, 18700, 'accessories/wearable_items/_exp09/qeynos_faction/vanguard/feet', 1190), + (19903, 18701, 'accessories/wearable_items/_exp09/qeynos_faction/vanguard/forearms', 1190), + (19904, 18702, 'accessories/wearable_items/_exp09/qeynos_faction/vanguard/hands', 1190), + (19905, 18703, 'accessories/wearable_items/_exp09/qeynos_faction/vanguard/head', 1190), + (19906, 18704, 'accessories/wearable_items/_exp09/qeynos_faction/vanguard/head_epic', 1190), + (19907, 18705, 'accessories/wearable_items/_exp09/qeynos_faction/vanguard/legs', 1190), + (19908, 18706, 'accessories/wearable_items/_exp09/qeynos_faction/vanguard/legs_noskirt', 1190), + (19909, 18707, 'accessories/wearable_items/_exp09/qeynos_faction/vanguard/right', 1190), + (19910, 18708, 'accessories/wearable_items/_exp09/qeynos_faction/vanguard/shoulders', 1190), + (19911, 18709, 'accessories/wearable_items/_exp09/qeynos_faction/vanguard/shoulders_epic', 1190), + (19912, 18710, 'accessories/wearable_items/_exp09/qeynos_faction/vanguard/shoulders_nopauldrons', 1190), + (19913, 18711, 'accessories/wearable_items/_exp09/qeynos_faction/vanguard/skirt', 1190), + (19914, 18712, 'accessories/wearable_items/cloak/exp09/cloak_qeynos_faction', 1190), + (19915, 18713, 'accessories/wieldable_items/weapons/exp08/1h_crush/mace_antonican_guard', 1190), + (19916, 18714, 'accessories/wieldable_items/weapons/exp08/1h_crush/exp08_wand_antonican_guard', 1190), + (19917, 18715, 'accessories/wieldable_items/weapons/exp08/1h_crush/hammer_antonican_guard', 1190), + (19918, 18716, 'accessories/wieldable_items/weapons/exp08/1h_pierce/exp08_dagger_hunter_antonican_guard', 1190), + (19919, 18717, 'accessories/wieldable_items/weapons/exp08/1h_pierce/exp08_dagger_wizard_antonican_guard', 1190), + (19920, 18718, 'accessories/wieldable_items/weapons/exp08/1h_sword/exp08_1hsword_antonican_guard', 1190), + (19921, 18719, 'accessories/wieldable_items/weapons/exp08/1h_sword/exp08_1hsword_short_antonican_guard', 1190), + (19922, 18720, 'accessories/wieldable_items/weapons/exp08/2h_sword/exp08_2hsword_antonican_guard', 1190), + (19923, 18721, 'accessories/wieldable_items/weapons/exp08/bow/longbow_antonican_guard', 1190), + (19924, 18722, 'accessories/wieldable_items/weapons/exp08/staff/halberd_antonican_guard', 1190), + (19925, 18723, 'accessories/wieldable_items/shields/exp08/exp08_shield_kite_antonican_guard', 1190), + (19926, 18724, 'creatures/mounts/lion_winged/lion_winged_base', 1190), + (19927, 18725, '_exp09/characters/tool_users/dracurion_palladin/dracurion_palladin_chain_pc_illusion', 1190), + (19928, 18726, '_exp09/characters/tool_users/dracurion_palladin/dracurion_palladin_chain_var1_pc_illusion', 1190), + (19929, 18727, '_exp09/characters/tool_users/dracurion_palladin/dracurion_palladin_horns_pc_illusion', 1190), + (19930, 18728, '_exp09/characters/tool_users/dracurion_palladin/dracurion_palladin_horns_var1_pc_illusion', 1190), + (19931, 18729, '_exp09/characters/tool_users/dracurion_palladin/dracurion_palladin_medallion_pc_illusion', 1190), + (19932, 18730, '_exp09/characters/tool_users/dracurion_palladin/dracurion_palladin_medallion_var1_pc_illusion', 1190), + (19933, 18731, '_exp09/characters/tool_users/dracurion_palladin/dracurion_palladin_pc_illusion', 1190), + (19934, 18732, '_exp09/characters/tool_users/dracurion_palladin/dracurion_palladin1_pc_illusion', 1190), + (19935, 18733, '_exp09/characters/tool_users/dracurion_palladin/dracurion_palladin2_pc_illusion', 1190), + (19936, 18734, '_exp09/characters/tool_users/dracurion_palladin/dracurion_palladin3_pc_illusion', 1190), + (19937, 18735, '_exp09/characters/tool_users/dracurion_palladin/dracurion_palladin4_pc_illusion', 1190), + (19938, 18736, '_exp09/characters/tool_users/dracurion_shadowknight/dracurion_shadowknight_a_pc_illusion', 1190), + (19939, 18737, '_exp09/characters/tool_users/dracurion_shadowknight/dracurion_shadowknight_b_pc_illusion', 1190), + (19940, 18738, '_exp09/characters/tool_users/dracurion_shadowknight/dracurion_shadowknight_pc_illusion', 1190), + (19941, 18739, '_exp09/characters/tool_users/dracurion_shadowknight/dracurion_shadowknight1_pc_illusion', 1190), + (19942, 18740, '_exp09/characters/tool_users/dracurion_shadowknight/dracurion_shadowknight2_pc_illusion', 1190), + (19943, 18741, '_exp09/characters/tool_users/dracurion_shadowknight/dracurion_shadowknight3_pc_illusion', 1190), + (19944, 18742, '_exp09/characters/tool_users/dracurion_shadowknight/dracurion_shadowknight4_pc_illusion', 1190), + (19945, 18743, 'creatures/mounts/bird_mount/evil/bird_evil_base', 1190), + (19946, 18744, 'accessories/wieldable_items/shields/exp08/exp08_shield_round_circleoften', 1190), + (19947, 18745, 'accessories/wearable_items/cloak/exp08/cloak_circleoften_square', 1190), + (19948, 18746, 'accessories/wearable_items/cloak/exp08/cloak_circleoften_scallop', 1190), + (19949, 18747, 'staticobjects/flora/dpo_gf_flora_fae_flower_bud01', 1190), + (19950, 18748, '_exp09/characters/monsters/timber_wolf_corrupted/timber_wolf_shadowed', 1190), + (19951, 18749, 'staticobjects/debris/gnoll_burrowpile01', 1190), + (19952, 18750, '_exp08/characters/monsters/dragon_made_golem/dragon_made_golem_crystaline_02', 1190), + (19953, 18751, '_exp08/characters/monsters/dragon_made_golem/dragon_made_golem_crystaline_03', 1190), + (19954, 18752, '_exp09/characters/tool_users/armored_gnoll/armored_gnoll', 1190), + (19955, 18753, '_exp09/characters/tool_users/armored_gnoll/armored_gnoll_gold', 1190), + (19956, 18754, '_exp09/characters/monsters/skyshrine_drake/skyshrine_drake_spirit_blue', 1190), + (19957, 18755, '_exp09/characters/tool_users/baelon/baelon', 1190), + (19958, 18756, '_exp08/characters/tool_users/qeynos_guard/qeynos_guard_female', 1190), + (19959, 18757, '_exp08/characters/tool_users/qeynos_guard/qeynos_guard_male', 1190), + (19960, 18758, '_exp09/characters/monsters/wyvern_sleepers_tomb/wyvern_sleepers_tomb', 1190), + (19961, 18759, 'creatures/mounts/pegasus_mount/pegasus_mount_epic_qeynos', 1190), + (19962, 18760, '_exp08/characters/monsters/gargoyle_sleeper/gargoyle_sleeper', 1190), + (19963, 18761, 'projectiles/spell_vial', 1190), + (19964, 18762, '_exp08/characters/tool_users/child_human/child_human_male', 1190), + (19965, 18763, '_exp08/characters/tool_users/lich_spectre/lich_spectre', 1190), + (19966, 18764, '_exp08/characters/monsters/dragon_made_golem/dragon_made_golem_crystaline_red', 1190), + (19967, 18765, 'creatures/mounts/wyvern_mount/wyvern_mount_golden', 1190), + (19968, 18766, 'creatures/mounts/wyvern_mount/wyvern_mount_green', 1190), + (19969, 18767, 'creatures/mounts/wyvern_mount/wyvern_mount_red', 1190), + (19970, 18768, 'creatures/mounts/wyvern_mount/wyvern_mount_shadow', 1190), + (19971, 18769, 'accessories/wearable_items/_exp09/tunarian_alliance/leather/chest', 1190), + (19972, 18770, 'accessories/wearable_items/_exp09/tunarian_alliance/leather/feet', 1190), + (19973, 18771, 'accessories/wearable_items/_exp09/tunarian_alliance/leather/forearms', 1190), + (19974, 18772, 'accessories/wearable_items/_exp09/tunarian_alliance/leather/hands', 1190), + (19975, 18773, 'accessories/wearable_items/_exp09/tunarian_alliance/leather/head', 1190), + (19976, 18774, 'accessories/wearable_items/_exp09/tunarian_alliance/leather/legs', 1190), + (19977, 18775, 'accessories/wearable_items/_exp09/tunarian_alliance/leather/shoulders', 1190), + (19978, 18776, 'accessories/wearable_items/_exp09/tunarian_alliance/leather/skirt', 1190), + (19979, 18777, 'accessories/wearable_items/cloak/exp09/cloak_tunarian_alliance_leather', 1190), + (19980, 18778, '_exp09/characters/monsters/beetle/beetle_grappler_clockwork_corroded', 1190), + (19981, 18779, '_exp09/characters/monsters/beetle/beetle_hercules_clockwork_corroded', 1190), + (19982, 18780, '_exp09/characters/monsters/beetle/beetle_lobber_clockwork_corroded', 1190), + (19983, 18781, '_exp09/characters/monsters/beetle/beetle_original_clockwork_corroded', 1190), + (19984, 18782, '_exp09/characters/monsters/beetle_groundattack/beetle_grappler_clockwork_corroded', 1190), + (19985, 18783, '_exp09/characters/monsters/beetle_groundattack/beetle_hercules_clockwork_corroded', 1190), + (19986, 18784, '_exp09/characters/monsters/beetle_groundattack/beetle_lobber_clockwork_corroded', 1190), + (19987, 18785, '_exp09/characters/monsters/beetle_groundattack/beetle_original_clockwork_corroded', 1190), + (19988, 18786, '_exp08/characters/tool_users/lich_undead/lich_undead', 1190), + (19989, 18787, '_exp09/characters/tool_users/halfelf_child_female/halfelf_child_female', 1190), + (19990, 18788, '_exp09/characters/tool_users/halfelf_child_male/halfelf_child_male', 1190), + (19991, 18789, 'accessories/npc_wearables/halfelf_children/halfelf_child_hair_01', 1190), + (19992, 18790, 'accessories/npc_wearables/halfelf_children/halfelf_child_hair_02', 1190), + (19993, 18791, 'accessories/npc_wearables/halfelf_children/halfelf_child_hair_03', 1190), + (19994, 18792, 'accessories/npc_wearables/halfelf_children/halfelf_child_hair_male_01', 1190), + (19995, 18793, 'accessories/npc_wearables/halfelf_children/halfelf_child_hair_male_02', 1190), + (19996, 18794, 'accessories/npc_wearables/halfelf_children/halfelf_child_hair_male_03', 1190), + (19997, 18795, '_exp09/characters/monsters/drake_sleepers_tomb/drake_sleepers_tomb', 1190), + (19998, 18796, 'creatures/monsters/mouth_eye_blob', 1190), + (19999, 18797, 'ec/npc/antonia_2012_beggar', 1190), + (20000, 18798, 'staticobjects/flora/dpo_slove02_lilypad_small01', 1190), + (20001, 18799, '_exp08/characters/tool_users/banshee_sleeper/banshee_sleeper', 1190), + (20002, 18800, 'accessories/wearable_items/_exp08/arasai_heritage_armor/shoulders', 1190), + (20003, 18801, 'accessories/wearable_items/_exp08/antonican_guard/vanguard/hands_epic', 1190), + (20004, 18802, 'staticobjects/qeynos/armor_dummy_antonia_2012', 1190), + (20005, 18803, 'accessories/wearable_items/_exp08/darklight_armor/plate/chest', 1190), + (20006, 18804, 'accessories/wearable_items/_exp08/darklight_armor/plate/feet', 1190), + (20007, 18805, 'accessories/wearable_items/_exp08/darklight_armor/plate/forearms', 1190), + (20008, 18806, 'accessories/wearable_items/_exp08/darklight_armor/plate/hands', 1190), + (20009, 18807, 'accessories/wearable_items/_exp08/darklight_armor/plate/head', 1190), + (20010, 18808, 'accessories/wearable_items/_exp08/darklight_armor/plate/head_epic', 1190), + (20011, 18809, 'accessories/wearable_items/_exp08/darklight_armor/plate/legs', 1190), + (20012, 18810, 'accessories/wearable_items/_exp08/darklight_armor/plate/shoulders', 1190), + (20013, 18811, 'accessories/wearable_items/_exp08/darklight_armor/plate/shoulders_epic', 1190), + (20014, 18812, 'accessories/wearable_items/_exp08/darklight_armor/plate/snap_ons/pauldrons_left', 1190), + (20015, 18813, 'accessories/wearable_items/_exp08/darklight_armor/plate/snap_ons/pauldrons_right', 1190), + (20016, 18814, 'staticobjects/soe_wallet/elddar_treehouse_treehouse_dpo', 1190), + (20017, 18815, 'accessories/wearable_items/_exp09/celestial_watch/chest_blue_gold/chest', 1190), + (20018, 18816, 'accessories/wearable_items/_exp09/celestial_watch/chest_blue_gold/feet', 1190), + (20019, 18817, 'accessories/wearable_items/_exp09/celestial_watch/chest_blue_gold/forearms', 1190), + (20020, 18818, 'accessories/wearable_items/_exp09/celestial_watch/chest_blue_gold/hands', 1190), + (20021, 18819, 'accessories/wearable_items/_exp09/celestial_watch/chest_blue_gold/head', 1190), + (20022, 18820, 'accessories/wearable_items/_exp09/celestial_watch/chest_blue_gold/legs', 1190), + (20023, 18821, 'accessories/wearable_items/_exp09/celestial_watch/chest_blue_gold/legs_noskirt', 1190), + (20024, 18822, 'accessories/wearable_items/_exp09/celestial_watch/chest_blue_gold/pauldron_left_celestial_watch', 1190), + (20025, 18823, 'accessories/wearable_items/_exp09/celestial_watch/chest_blue_gold/pauldron_right_celestial_watch', 1190), + (20026, 18824, 'accessories/wearable_items/_exp09/celestial_watch/chest_blue_gold/shoulders', 1190), + (20027, 18825, 'accessories/wearable_items/_exp09/celestial_watch/chest_blue_gold/shoulders_epic', 1190), + (20028, 18826, 'accessories/wearable_items/_exp09/celestial_watch/chest_blue_gold/skirt', 1190), + (20029, 18827, 'accessories/wearable_items/_exp09/celestial_watch/robe_head_blue_gold/head', 1190), + (20030, 18828, 'accessories/wieldable_items/weapons/exp08/1h_sword/exp08_1h_scythe_lich_spectre', 1190), + (20031, 18829, 'accessories/wearable_items/_exp08/darklight_armor/heavycloth_leather/chest', 1190), + (20032, 18830, 'accessories/wearable_items/_exp08/darklight_armor/heavycloth_leather/feet', 1190), + (20033, 18831, 'accessories/wearable_items/_exp08/darklight_armor/heavycloth_leather/hands', 1190), + (20034, 18832, 'accessories/wearable_items/_exp08/darklight_armor/heavycloth_leather/head', 1190), + (20035, 18833, 'accessories/wearable_items/_exp08/darklight_armor/heavycloth_leather/legs', 1190), + (20036, 18834, 'accessories/wearable_items/_exp08/darklight_armor/heavycloth_leather/shoulders', 1190), + (20037, 18835, 'accessories/wearable_items/_exp08/darklight_armor/heavycloth_leather/skirt', 1190), + (20038, 18836, 'accessories/wearable_items/_exp08/darklight_armor/heavycloth_leather/belt/skirt 2', 1190), + (20039, 18837, 'accessories/wearable_items/_exp08/darklight_armor/heavycloth_leather/belt/skirt', 1190), + (20040, 18838, 'accessories/wearable_items/_exp08/darklight_armor/heavycloth_leather/head/head', 1190), + (20041, 18839, 'accessories/wearable_items/_exp08/darklight_armor/vanguard/chest', 1190), + (20042, 18840, 'accessories/wearable_items/_exp08/darklight_armor/vanguard/feet', 1190), + (20043, 18841, 'accessories/wearable_items/_exp08/darklight_armor/vanguard/forearms', 1190), + (20044, 18842, 'accessories/wearable_items/_exp08/darklight_armor/vanguard/hands', 1190), + (20045, 18843, 'accessories/wearable_items/_exp08/darklight_armor/vanguard/head', 1190), + (20046, 18844, 'accessories/wearable_items/_exp08/darklight_armor/vanguard/head_epic', 1190), + (20047, 18845, 'accessories/wearable_items/_exp08/darklight_armor/vanguard/left', 1190), + (20048, 18846, 'accessories/wearable_items/_exp08/darklight_armor/vanguard/legs', 1190), + (20049, 18847, 'accessories/wearable_items/_exp08/darklight_armor/vanguard/legs_noskirt', 1190), + (20050, 18848, 'accessories/wearable_items/_exp08/darklight_armor/vanguard/right', 1190), + (20051, 18849, 'accessories/wearable_items/_exp08/darklight_armor/vanguard/shoulders', 1190), + (20052, 18850, 'accessories/wearable_items/_exp08/darklight_armor/vanguard/shoulders_epic', 1190), + (20053, 18851, 'accessories/wearable_items/_exp08/darklight_armor/vanguard/shoulders_nopauldrons', 1190), + (20054, 18852, 'accessories/wearable_items/_exp08/darklight_armor/vanguard/skirt', 1190), + (20055, 18853, 'accessories/wearable_items/_exp08/darklight_armor/vanguard/pauldrons/pauldron_left', 1190), + (20056, 18854, 'accessories/wearable_items/_exp08/darklight_armor/vanguard/pauldrons/pauldron_right', 1190), + (20057, 18855, 'accessories/wearable_items/_exp08/darklight_armor/vanguard/shadowknight_helm/head', 1190), + (20058, 18856, 'accessories/wearable_items/_exp08/darklight_armor/vanguard/shadowknight_helm/head_epic', 1190), + (20059, 18857, 'accessories/wearable_items/cloak/exp09/cloak_antonica_faction', 1190), + (20060, 18858, 'accessories/wearable_items/cloak/exp09/cloak_antonica_faction_incut', 1190), + (20061, 18859, 'accessories/wearable_items/cloak/exp09/cloak_antonica_faction_scallop', 1190), + (20062, 18860, 'accessories/wearable_items/cloak/exp09/cloak_antonica_faction_whole', 1190), + (20063, 18861, 'ec/npc/goblin_tophat', 1190), + (20064, 18862, '_exp08/characters/tool_users/lich_undead/lich_undead_green', 1190), + (20065, 18863, '_exp08/characters/tool_users/lich_undead/lich_undead_green_nofx', 1190), + (20066, 18864, 'ec/pc/human/human_male_2011/human_male_base', 1190), + (20067, 18865, '_exp09/characters/tool_users/ethenere_npcs/darkelf_female_ethenere', 1190), + (20068, 18866, '_exp09/characters/tool_users/ethenere_npcs/darkelf_male_ethenere', 1190), + (20069, 18867, '_exp08/characters/tool_users/banshee_sleeper/banshee_sleeper_queen', 1190), + (20070, 18868, '_exp08/characters/tool_users/bog_wraith/bog_wraith', 1190), + (20071, 18869, '_exp08/characters/tool_users/bog_wraith/bog_wraith_chain', 1190), + (20072, 18870, '_exp08/characters/tool_users/bog_wraith/bog_wraith_spectre', 1190), + (20073, 18871, 'accessories/wearable_items/_exp08/primal_velium/chain/chest', 1190), + (20074, 18872, 'accessories/wearable_items/_exp08/primal_velium/chain/feet', 1190), + (20075, 18873, 'accessories/wearable_items/_exp08/primal_velium/chain/forearms', 1190), + (20076, 18874, 'accessories/wearable_items/_exp08/primal_velium/chain/hands', 1190), + (20077, 18875, 'accessories/wearable_items/_exp08/primal_velium/chain/head', 1190), + (20078, 18876, 'accessories/wearable_items/_exp08/primal_velium/chain/legs', 1190), + (20079, 18877, 'accessories/wearable_items/_exp08/primal_velium/chain/legs_noskirt', 1190), + (20080, 18878, 'accessories/wearable_items/_exp08/primal_velium/chain/shoulders', 1190), + (20081, 18879, 'accessories/wearable_items/_exp08/primal_velium/chain/shoulders_epic', 1190), + (20082, 18880, 'accessories/wearable_items/_exp08/primal_velium/chain/skirt', 1190), + (20083, 18881, 'accessories/wearable_items/_exp08/primal_velium/heavycloth/chest', 1190), + (20084, 18882, 'accessories/wearable_items/_exp08/primal_velium/heavycloth/feet', 1190), + (20085, 18883, 'accessories/wearable_items/_exp08/primal_velium/heavycloth/hands', 1190), + (20086, 18884, 'accessories/wearable_items/_exp08/primal_velium/heavycloth/head', 1190), + (20087, 18885, 'accessories/wearable_items/_exp08/primal_velium/heavycloth/legs', 1190), + (20088, 18886, 'accessories/wearable_items/_exp08/primal_velium/heavycloth/shoulders', 1190), + (20089, 18887, 'accessories/wearable_items/_exp08/primal_velium/heavycloth/shoulders_epic', 1190), + (20090, 18888, 'accessories/wearable_items/_exp08/primal_velium/heavycloth/skirt', 1190), + (20091, 18889, 'accessories/wearable_items/_exp08/primal_velium/heavycloth/belt/skirt 2', 1190), + (20092, 18890, 'accessories/wearable_items/_exp08/primal_velium/heavycloth/belt/skirt', 1190), + (20093, 18891, 'accessories/wearable_items/_exp08/primal_velium/leather/chest', 1190), + (20094, 18892, 'accessories/wearable_items/_exp08/primal_velium/leather/feet', 1190), + (20095, 18893, 'accessories/wearable_items/_exp08/primal_velium/leather/forearms', 1190), + (20096, 18894, 'accessories/wearable_items/_exp08/primal_velium/leather/hands', 1190), + (20097, 18895, 'accessories/wearable_items/_exp08/primal_velium/leather/head', 1190), + (20098, 18896, 'accessories/wearable_items/_exp08/primal_velium/leather/legs', 1190), + (20099, 18897, 'accessories/wearable_items/_exp08/primal_velium/leather/legs_noskirt', 1190), + (20100, 18898, 'accessories/wearable_items/_exp08/primal_velium/leather/shoulders', 1190), + (20101, 18899, 'accessories/wearable_items/_exp08/primal_velium/leather/shoulders_epic', 1190), + (20102, 18900, 'accessories/wearable_items/_exp08/primal_velium/leather/skirt', 1190), + (20103, 18901, 'accessories/wearable_items/_exp08/primal_velium/robe/chest', 1190), + (20104, 18902, 'accessories/wearable_items/_exp08/primal_velium/robe/chest_epic', 1190), + (20105, 18903, 'accessories/wearable_items/_exp08/primal_velium/robe/feet', 1190), + (20106, 18904, 'accessories/wearable_items/_exp08/primal_velium/robe/hands', 1190), + (20107, 18905, 'accessories/wearable_items/_exp08/primal_velium/robe/head', 1190), + (20108, 18906, 'accessories/wearable_items/_exp08/primal_velium/robe/pants', 1190), + (20109, 18907, 'accessories/wearable_items/_exp08/primal_velium/robe/skirt', 1190), + (20110, 18908, 'accessories/wearable_items/_exp08/primal_velium/vanguard/chest', 1190), + (20111, 18909, 'accessories/wearable_items/_exp08/primal_velium/vanguard/feet', 1190), + (20112, 18910, 'accessories/wearable_items/_exp08/primal_velium/vanguard/forearms', 1190), + (20113, 18911, 'accessories/wearable_items/_exp08/primal_velium/vanguard/hands', 1190), + (20114, 18912, 'accessories/wearable_items/_exp08/primal_velium/vanguard/hands_epic', 1190), + (20115, 18913, 'accessories/wearable_items/_exp08/primal_velium/vanguard/head', 1190), + (20116, 18914, 'accessories/wearable_items/_exp08/primal_velium/vanguard/head_epic', 1190), + (20117, 18915, 'accessories/wearable_items/_exp08/primal_velium/vanguard/left', 1190), + (20118, 18916, 'accessories/wearable_items/_exp08/primal_velium/vanguard/legs', 1190), + (20119, 18917, 'accessories/wearable_items/_exp08/primal_velium/vanguard/legs_epic', 1190), + (20120, 18918, 'accessories/wearable_items/_exp08/primal_velium/vanguard/legs_noskirt', 1190), + (20121, 18919, 'accessories/wearable_items/_exp08/primal_velium/vanguard/pauldron2_left', 1190), + (20122, 18920, 'accessories/wearable_items/_exp08/primal_velium/vanguard/right', 1190), + (20123, 18921, 'accessories/wearable_items/_exp08/primal_velium/vanguard/shoulders', 1190), + (20124, 18922, 'accessories/wearable_items/_exp08/primal_velium/vanguard/shoulders_epic', 1190), + (20125, 18923, 'accessories/wearable_items/_exp08/primal_velium/vanguard/shoulders_nopauldrons', 1190), + (20126, 18924, 'accessories/wearable_items/_exp08/primal_velium/vanguard/skirt', 1190), + (20127, 18925, 'accessories/wearable_items/_exp08/primal_velium/vanguard/snapons/bracer_left', 1190), + (20128, 18926, 'accessories/wearable_items/_exp08/primal_velium/vanguard/snapons/bracer_right', 1190), + (20129, 18927, 'accessories/wearable_items/_exp08/primal_velium/vanguard/snapons/pauldron_leather_left', 1190), + (20130, 18928, 'accessories/wearable_items/_exp08/primal_velium/vanguard/snapons/pauldron_leather_right', 1190), + (20131, 18929, 'accessories/wearable_items/_exp08/primal_velium/vanguard/snapons/pauldron_left', 1190), + (20132, 18930, 'accessories/wearable_items/_exp08/primal_velium/vanguard/snapons/pauldron_light_left', 1190), + (20133, 18931, 'accessories/wearable_items/_exp08/primal_velium/vanguard/snapons/pauldron_light_right', 1190), + (20134, 18932, 'accessories/wearable_items/_exp08/primal_velium/vanguard/snapons/pauldron_right', 1190), + (20135, 18933, 'accessories/wearable_items/_exp08/primal_velium/vanguard/snapons/pauldron_right2', 1190), + (20136, 18934, 'accessories/wearable_items/_exp08/primal_velium/vanguard/snapons/pauldron2_left', 1190), + (20137, 18935, 'accessories/wearable_items/_exp08/primal_velium/vanguard/snapons/pauldron2_right', 1190), + (20138, 18936, 'accessories/wearable_items/_exp08/primal_velium/vanguard/snapons/shinguard_left', 1190), + (20139, 18937, 'accessories/wearable_items/_exp08/primal_velium/vanguard/snapons/shinguard_right', 1190), + (20140, 18938, 'ec/pc/darkelf/darkelf_male_2011', 1190), + (20141, 18939, '_exp08/characters/pets/jackolantern/jackolantern', 1190), + (20142, 18940, 'accessories/wearable_items/cloak/exp08/cloak_primal_velium2_diamond', 1190), + (20143, 18941, 'accessories/wearable_items/cloak/exp08/cloak_primal_velium1_diamond', 1190), + (20144, 18942, 'accessories/wearable_items/cloak/exp08/cloak_primal_velium2', 1190), + (20145, 18943, 'accessories/wearable_items/cloak/exp08/cloak_primal_velium1', 1190), + (20146, 18944, 'projectiles/spell_lightning_ball', 1190), + (20147, 18945, '_exp08/characters/monsters/kerafyrm/kerafyrm_trapped', 1190), + (20148, 18946, 'staticobjects/pictures/qeynos_painting_harbor01_dpo', 1190), + (20149, 18947, 'staticobjects/pictures/qeynos_painting01_dpo', 1190), + (20150, 18948, 'staticobjects/pictures/qeynos_painting02_dpo', 1190), + (20151, 18949, 'staticobjects/pictures/qeynos_painting03_dpo', 1190), + (20152, 18950, 'staticobjects/pictures/qeynos_painting04_dpo', 1190), + (20153, 18951, 'staticobjects/pictures/qeynos_painting05_dpo', 1190), + (20154, 18952, 'staticobjects/pictures/qeynos_painting06_dpo', 1190), + (20155, 18953, 'staticobjects/pictures/qeynos_painting07_dpo', 1190), + (20156, 18954, 'ec/pc/halfelf/halfelf_male_2011', 1190), + (20157, 18955, 'staticobjects/mailboxes/qnos_rev_mailbox01_dpo', 1190), + (20158, 18956, 'staticobjects/marinerbell/qnos_rev_mariners_bell01_all_dpo', 1190), + (20159, 18957, 'staticobjects/qeynos/qey_thunderfountain_dpo', 1190), + (20160, 18958, 'staticobjects/qeynos/qey_baylestatue_dpo', 1190), + (20161, 18959, 'staticobjects/qeynos/qey_castle_statue_dpo', 1190), + (20162, 18960, 'staticobjects/qeynos/qey_floating_torch_blue_dpo', 1190), + (20163, 18961, 'staticobjects/qeynos/qey_floating_torch_yellow_dpo', 1190), + (20164, 18962, 'staticobjects/qeynos/qey_lions_circle_counter_dpo', 1190), + (20165, 18963, 'staticobjects/qeynos/qey_lions_elbow_counter_dpo', 1190), + (20166, 18964, 'staticobjects/qeynos/qey_lions_straight_counter_dpo', 1190), + (20167, 18965, 'staticobjects/qeynos/qey_lionsmane_crest_dpo', 1190), + (20168, 18966, 'staticobjects/qeynos/qey_pennants01_dpo', 1190), + (20169, 18967, 'staticobjects/qeynos/qey_pennants02_dpo', 1190), + (20170, 18968, 'staticobjects/qeynos/qey_pennants03_dpo', 1190), + (20171, 18969, 'staticobjects/qeynos/qey_stadium_banner01_dpo', 1190), + (20172, 18970, 'staticobjects/qeynos/qey_stadium_banner02_dpo', 1190), + (20173, 18971, 'staticobjects/qeynos/qey_stadium_banner03_dpo', 1190), + (20174, 18972, 'ec/pc/darkelf/darkelf_female_2011', 1190), + (20175, 18973, 'ec/pc/highelf/highelf_male_2011', 1190), + (20176, 18974, 'ec/pc/halfelf/halfelf_female_2011', 1190), + (20177, 18975, 'staticobjects/_exp07/dru_drunder_sullon_idol02', 1190), + (20178, 18976, 'ec/pc/kerra/kerra_male_2011', 1190), + (20179, 18977, 'ec/pc/kerra/kerra_female_2011', 1190), + (20180, 18978, 'ec/pc/human/human_female_2011', 1190), + (20181, 18979, 'ec/pc/human/human_male_2011', 1190), + (20182, 18980, 'staticobjects/qeynos/qey_terrain_village03_kaladimstone', 1190), + (20183, 18981, 'accessories/wearable_items/cloak/exp09/cloak_celestial_watch_blue_gold', 1190), + (20184, 18982, '_exp09/characters/monsters/skyshrine_drake/skyshrine_drake_spirit_black', 1190), + (20185, 18983, '_exp09/characters/monsters/skyshrine_drake/skyshrine_drake_spirit_gold', 1190), + (20186, 18984, '_exp09/characters/monsters/skyshrine_drake/skyshrine_drake_spirit_red', 1190), + (20187, 18985, '_exp09/characters/tool_users/were/were_black_base', 1190), + (20188, 18986, 'staticobjects/banners/kelethin_banner_arcane_standing', 1190), + (20189, 18987, 'ec/pc/highelf/highelf_female_2011', 1190), + (20190, 18988, 'staticobjects/qeynos/halfelf_compass', 1190), + (20191, 18989, 'creatures/mounts/odus_prowler/prowler_stone_jade', 1190), + (20192, 18990, 'creatures/mounts/odus_prowler/prowler_stone_marble', 1190), + (20193, 18991, 'creatures/mounts/odus_prowler/prowler_stone_onyx', 1190), + (20194, 18992, '_exp08/characters/tool_users/banshee_sleeper/banshee_sleeper_spirit', 1190), + (20195, 18993, 'staticobjects/housing_portal_objects/vision_home_magetower01', 1190), + (20196, 18994, 'staticobjects/soe_wallet/qeynos/qey_window_double_wood_square01', 1190), + (20197, 18995, 'staticobjects/soe_wallet/qeynos/qey_window_castle_round01', 1190), + (20198, 18996, 'staticobjects/soe_wallet/qeynos/qey_window_dome_stone_fancy01', 1190), + (20199, 18997, 'staticobjects/soe_wallet/qeynos/qey_window_dome_stone_rect02', 1190), + (20200, 18998, 'staticobjects/soe_wallet/qeynos/qey_window_dome_wood_fancy01', 1190), + (20201, 18999, 'staticobjects/soe_wallet/qeynos/qey_window_dome_wood_rect01', 1190), + (20202, 19000, 'staticobjects/soe_wallet/qeynos/qey_window_dome_wood_rect02', 1190), + (20203, 19001, 'staticobjects/soe_wallet/qeynos/qey_window_dome_wood_stone01', 1190), + (20204, 19002, 'staticobjects/soe_wallet/station_tinkered/gnome_stool', 1190), + (20205, 19003, 'staticobjects/soe_wallet/station_tinkered/gnome_bed', 1190), + (20206, 19004, 'staticobjects/soe_wallet/station_tinkered/gnome_ceilingfan_base', 1190), + (20207, 19005, 'staticobjects/soe_wallet/station_tinkered/gnome_chest', 1190), + (20208, 19006, 'staticobjects/soe_wallet/station_tinkered/gnome_clock', 1190), + (20209, 19007, 'staticobjects/soe_wallet/station_tinkered/gnome_dresser', 1190), + (20210, 19008, 'staticobjects/soe_wallet/station_tinkered/gnome_gear_large_pfx', 1190), + (20211, 19009, 'staticobjects/soe_wallet/station_tinkered/gnome_gear_small_pfx', 1190), + (20212, 19010, 'staticobjects/soe_wallet/station_tinkered/gnome_mirror', 1190), + (20213, 19011, 'staticobjects/soe_wallet/station_tinkered/gnome_nightstand', 1190), + (20214, 19012, 'staticobjects/soe_wallet/station_tinkered/gnome_shelf', 1190), + (20215, 19013, '_exp09/characters/tool_users/baelon/baelon_unarmed', 1190), + (20216, 19014, '_exp09/characters/monsters/winged_lion/winged_lion_base', 1190), + (20217, 19015, 'staticobjects/tree/river_flowertree_01_shrunk_dpo', 1190), + (20218, 19016, 'ec/pc/woodelf/woodelf_male_2011', 1190), + (20219, 19017, 'ec/pc/woodelf/woodelf_female_2011', 1190), + (20220, 19018, 'accessories/wieldable_items/weapons/exp09/staff/staff_drinal', 1190), + (20221, 19019, 'projectiles/spell_fire_ball_no_trail', 1190), + (20222, 19020, 'staticobjects/liveevent/tinkerfest/building_blocks/houseblock_1x1_column_bluemetal', 1190), + (20223, 19021, 'staticobjects/liveevent/tinkerfest/building_blocks/houseblock_1x1_column_redplates', 1190), + (20224, 19022, 'staticobjects/liveevent/tinkerfest/building_blocks/houseblock_1x2_column_bluemetal', 1190), + (20225, 19023, 'staticobjects/liveevent/tinkerfest/building_blocks/houseblock_1x2_column_redplates', 1190), + (20226, 19024, 'staticobjects/liveevent/tinkerfest/building_blocks/houseblock_1x2_dividerblock_bluemetal', 1190), + (20227, 19025, 'staticobjects/liveevent/tinkerfest/building_blocks/houseblock_1x2_dividerblock_redplates', 1190), + (20228, 19026, 'staticobjects/liveevent/tinkerfest/building_blocks/housecube_1x1_block_redplates', 1190), + (20229, 19027, 'staticobjects/liveevent/tinkerfest/building_blocks/houseblock_1xhalf_block_bluemetal', 1190), + (20230, 19028, 'staticobjects/liveevent/tinkerfest/building_blocks/houseblock_1xhalf_block_redplates', 1190), + (20231, 19029, 'staticobjects/liveevent/tinkerfest/building_blocks/houseblock_2x2_dividerblock_bluemetal', 1190), + (20232, 19030, 'staticobjects/liveevent/tinkerfest/building_blocks/houseblock_2x2_dividerblock_redplates', 1190), + (20233, 19031, 'staticobjects/liveevent/tinkerfest/building_blocks/houseblock_rail_bluemetal', 1190), + (20234, 19032, 'staticobjects/liveevent/tinkerfest/building_blocks/houseblock_rail_redplates', 1190), + (20235, 19033, 'staticobjects/liveevent/tinkerfest/building_blocks/houseblock_roundtile_bluemetal', 1190), + (20236, 19034, 'staticobjects/liveevent/tinkerfest/building_blocks/houseblock_roundtile_redplates', 1190), + (20237, 19035, 'staticobjects/liveevent/tinkerfest/building_blocks/houseblock_stair_bluemetal', 1190), + (20238, 19036, 'staticobjects/liveevent/tinkerfest/building_blocks/houseblock_stair_redplates', 1190), + (20239, 19037, 'staticobjects/liveevent/tinkerfest/building_blocks/housecube_1x1_block_bluemetal', 1190), + (20240, 19038, 'staticobjects/liveevent/tinkerfest/dpo_fprt_hood03_temple_tank01', 1190), + (20241, 19039, 'staticobjects/liveevent/tinkerfest/dpo_battleground_relic01_background_gear01', 1190), + (20242, 19040, 'staticobjects/liveevent/tinkerfest/dpo_battleground_relic01_murderball01', 1190), + (20243, 19041, 'staticobjects/liveevent/tinkerfest/dpo_battleground_relic01_murderball01_combo01', 1190), + (20244, 19042, 'staticobjects/liveevent/tinkerfest/dpo_battleground_relic01_murderball01_pedestal01', 1190), + (20245, 19043, 'staticobjects/liveevent/tinkerfest/dpo_qnos_tinker_vertgear_001', 1190), + (20246, 19044, 'staticobjects/liveevent/tinkerfest/dpo_qnos_tinker_ani_drill_001', 1190), + (20247, 19045, 'staticobjects/liveevent/tinkerfest/dpo_qnos_tinker_ani_gear_001', 1190), + (20248, 19046, 'staticobjects/liveevent/tinkerfest/dpo_qnos_tinker_ani_vertgear_001', 1190), + (20249, 19047, 'staticobjects/liveevent/tinkerfest/dpo_qnos_tinker_box_001', 1190), + (20250, 19048, 'staticobjects/liveevent/tinkerfest/dpo_qnos_tinker_broiler_001', 1190), + (20251, 19049, 'staticobjects/liveevent/tinkerfest/dpo_qnos_tinker_broiler_002', 1190), + (20252, 19050, 'staticobjects/liveevent/tinkerfest/dpo_qnos_tinker_drill_001', 1190), + (20253, 19051, 'staticobjects/liveevent/tinkerfest/dpo_qnos_tinker_gear_001', 1190), + (20254, 19052, 'creatures/mounts/pegasus_mount/pegasus_mount_epic_qeynos_gold', 1190), + (20255, 19053, 'accessories/wearable_items/_exp08/antonican_guard/vanguard_crusader/chest', 1190), + (20256, 19054, 'accessories/wearable_items/_exp08/antonican_guard/vanguard_crusader/feet', 1190), + (20257, 19055, 'accessories/wearable_items/_exp08/antonican_guard/vanguard_crusader/forearms', 1190), + (20258, 19056, 'accessories/wearable_items/_exp08/antonican_guard/vanguard_crusader/hands', 1190), + (20259, 19057, 'accessories/wearable_items/_exp08/antonican_guard/vanguard_crusader/head', 1190), + (20260, 19058, 'accessories/wearable_items/_exp08/antonican_guard/vanguard_crusader/head_epic', 1190), + (20261, 19059, 'accessories/wearable_items/_exp08/antonican_guard/vanguard_crusader/head_epic_crest', 1190), + (20262, 19060, 'accessories/wearable_items/_exp08/antonican_guard/vanguard_crusader/head_epic_topknot', 1190), + (20263, 19061, 'accessories/wearable_items/_exp08/antonican_guard/vanguard_crusader/left', 1190), + (20264, 19062, 'accessories/wearable_items/_exp08/antonican_guard/vanguard_crusader/legs', 1190), + (20265, 19063, 'accessories/wearable_items/_exp08/antonican_guard/vanguard_crusader/legs_noskirt', 1190), + (20266, 19064, 'accessories/wearable_items/_exp08/antonican_guard/vanguard_crusader/right', 1190), + (20267, 19065, 'accessories/wearable_items/_exp08/antonican_guard/vanguard_crusader/shoulders', 1190), + (20268, 19066, 'accessories/wearable_items/_exp08/antonican_guard/vanguard_crusader/shoulders_nopauldron', 1190), + (20269, 19067, 'accessories/wearable_items/_exp08/antonican_guard/vanguard_crusader/skirt', 1190), + (20270, 19068, 'accessories/wearable_items/_exp08/antonican_guard/vanguard_crusader/hands_epic', 1190), + (20271, 19069, 'accessories/wearable_items/_exp08/antonican_guard/vanguard_crusader/legs_epic', 1190), + (20272, 19070, 'accessories/wearable_items/_exp08/antonican_guard/vanguard_crusader/shoulders_epic', 1190), + (20273, 19071, 'accessories/wearable_items/_exp08/antonican_guard/snapons_extras/shinguard_crusader_left', 1190), + (20274, 19072, 'accessories/wearable_items/_exp08/antonican_guard/snapons_extras/shinguard_crusader_right', 1190), + (20275, 19073, 'accessories/wearable_items/_exp08/antonican_guard/snapons_extras/pauldron2_crusader_left', 1190), + (20276, 19074, 'accessories/wearable_items/_exp08/antonican_guard/snapons_extras/pauldron2_crusader_right', 1190), + (20277, 19075, 'accessories/wearable_items/_exp08/antonican_guard/snapons_extras/pauldron_crusader_right', 1190), + (20278, 19076, 'accessories/wearable_items/_exp08/antonican_guard/snapons_extras/pauldron_crusader_left', 1190), + (20279, 19077, 'accessories/wearable_items/_exp08/antonican_guard/snapons_extras/bracer_crusader_right', 1190), + (20280, 19078, 'accessories/wearable_items/_exp08/antonican_guard/snapons_extras/bracer_crusader_left', 1190), + (20281, 19079, 'accessories/wearable_items/_exp08/antonican_guard/snapons_extras/head_topknot_crusader', 1190), + (20282, 19080, 'accessories/wearable_items/_exp08/antonican_guard/snapons_extras/head_crest_crusader', 1190), + (20283, 19081, 'creatures/mounts/pegasus_mount/pegasus_mount_freeport', 1190), + (20284, 19082, 'creatures/mounts/pegasus_mount/swivels/pegasus_freeport_swivel_skull', 1190), + (20285, 19083, 'creatures/tu/succubus_flying', 1190), + (20286, 19084, 'accessories/wearable_items/cloak/exp08/cloak_antonican_guard_crusader', 1190), + (20287, 19085, '_exp09/characters/tool_users/baelon/baelon_summon', 1190), + (20288, 19086, 'staticobjects/soe_wallet/qeynos_akanon_clock_dpo', 1190), + (20289, 19087, '_exp09/characters/monsters/skirth/skirth', 1190), + (20290, 19088, 'accessories/wieldable_items/weapons/exp09/2h_sword/2h_ethernere_sword', 1190), + (20291, 19089, 'accessories/wieldable_items/weapons/exp09/1h_crush/ethernere_mace', 1190), + (20292, 19090, '_exp09/characters/tool_users/drinal/drinal', 1190), + (20293, 19091, 'accessories/wearable_items/_exp09/ethernere_armors/chain/chest', 1190), + (20294, 19092, 'accessories/wearable_items/_exp09/ethernere_armors/chain/feet', 1190), + (20295, 19093, 'accessories/wearable_items/_exp09/ethernere_armors/chain/forearms', 1190), + (20296, 19094, 'accessories/wearable_items/_exp09/ethernere_armors/chain/hands', 1190), + (20297, 19095, 'accessories/wearable_items/_exp09/ethernere_armors/chain/head', 1190), + (20298, 19096, 'accessories/wearable_items/_exp09/ethernere_armors/chain/legs', 1190), + (20299, 19097, 'accessories/wearable_items/_exp09/ethernere_armors/chain/shoulders', 1190), + (20300, 19098, 'accessories/wearable_items/_exp09/ethernere_armors/chain/shoulders_epic', 1190), + (20301, 19099, 'accessories/wearable_items/_exp09/ethernere_armors/leather/chest', 1190), + (20302, 19100, 'accessories/wearable_items/_exp09/ethernere_armors/leather/feet', 1190), + (20303, 19101, 'accessories/wearable_items/_exp09/ethernere_armors/leather/forearms', 1190), + (20304, 19102, 'accessories/wearable_items/_exp09/ethernere_armors/leather/hands', 1190), + (20305, 19103, 'accessories/wearable_items/_exp09/ethernere_armors/leather/head', 1190), + (20306, 19104, 'accessories/wearable_items/_exp09/ethernere_armors/leather/legs', 1190), + (20307, 19105, 'accessories/wearable_items/_exp09/ethernere_armors/leather/legs_noskirt', 1190), + (20308, 19106, 'accessories/wearable_items/_exp09/ethernere_armors/leather/shoulders', 1190), + (20309, 19107, 'accessories/wearable_items/_exp09/ethernere_armors/leather/shoulders_epic', 1190), + (20310, 19108, 'accessories/wearable_items/_exp09/ethernere_armors/leather/skirt', 1190), + (20311, 19109, 'accessories/wearable_items/_exp09/ethernere_armors/robe/chest', 1190), + (20312, 19110, 'accessories/wearable_items/_exp09/ethernere_armors/robe/chest_epic', 1190), + (20313, 19111, 'accessories/wearable_items/_exp09/ethernere_armors/robe/feet', 1190), + (20314, 19112, 'accessories/wearable_items/_exp09/ethernere_armors/robe/hands', 1190), + (20315, 19113, 'accessories/wearable_items/_exp09/ethernere_armors/robe/head', 1190), + (20316, 19114, 'accessories/wearable_items/_exp09/ethernere_armors/robe/head_hood', 1190), + (20317, 19115, 'accessories/wearable_items/_exp09/ethernere_armors/robe/pants', 1190), + (20318, 19116, 'accessories/wearable_items/_exp09/ethernere_armors/robe/skirt', 1190), + (20319, 19117, 'accessories/wearable_items/_exp09/ethernere_armors/snapons_pauldrons/ethernere_bracer_left', 1190), + (20320, 19118, 'accessories/wearable_items/_exp09/ethernere_armors/snapons_pauldrons/ethernere_bracer_right', 1190), + (20321, 19119, 'accessories/wearable_items/_exp09/ethernere_armors/snapons_pauldrons/ethernere_heavy_pauldron_chain_left', 1190), + (20322, 19120, 'accessories/wearable_items/_exp09/ethernere_armors/snapons_pauldrons/ethernere_heavy_pauldron_chain_right', 1190), + (20323, 19121, 'accessories/wearable_items/_exp09/ethernere_armors/snapons_pauldrons/ethernere_heavy_pauldron_left', 1190), + (20324, 19122, 'accessories/wearable_items/_exp09/ethernere_armors/snapons_pauldrons/ethernere_heavy_pauldron_right', 1190), + (20325, 19123, 'accessories/wearable_items/_exp09/ethernere_armors/snapons_pauldrons/ethernere_heavy_pauldron2_left', 1190), + (20326, 19124, 'accessories/wearable_items/_exp09/ethernere_armors/snapons_pauldrons/ethernere_heavy_pauldron2_right', 1190), + (20327, 19125, 'accessories/wearable_items/_exp09/ethernere_armors/snapons_pauldrons/ethernere_light_pauldron_left', 1190), + (20328, 19126, 'accessories/wearable_items/_exp09/ethernere_armors/snapons_pauldrons/ethernere_light_pauldron_right', 1190), + (20329, 19127, 'accessories/wearable_items/_exp09/ethernere_armors/snapons_pauldrons/ethernere_light_pauldron_robe_left', 1190), + (20330, 19128, 'accessories/wearable_items/_exp09/ethernere_armors/snapons_pauldrons/ethernere_light_pauldron_robe_right', 1190), + (20331, 19129, 'accessories/wearable_items/_exp09/ethernere_armors/snapons_pauldrons/ethernere_shinguard_left', 1190), + (20332, 19130, 'accessories/wearable_items/_exp09/ethernere_armors/snapons_pauldrons/ethernere_shinguard_right', 1190), + (20333, 19131, 'accessories/wearable_items/_exp09/ethernere_armors/vanguard/chest', 1190), + (20334, 19132, 'accessories/wearable_items/_exp09/ethernere_armors/vanguard/feet', 1190), + (20335, 19133, 'accessories/wearable_items/_exp09/ethernere_armors/vanguard/forearms', 1190), + (20336, 19134, 'accessories/wearable_items/_exp09/ethernere_armors/vanguard/hands', 1190), + (20337, 19135, 'accessories/wearable_items/_exp09/ethernere_armors/vanguard/hands_epic', 1190), + (20338, 19136, 'accessories/wearable_items/_exp09/ethernere_armors/vanguard/head', 1190), + (20339, 19137, 'accessories/wearable_items/_exp09/ethernere_armors/vanguard/left', 1190), + (20340, 19138, 'accessories/wearable_items/_exp09/ethernere_armors/vanguard/legs', 1190), + (20341, 19139, 'accessories/wearable_items/_exp09/ethernere_armors/vanguard/legs_noskirt', 1190), + (20342, 19140, 'accessories/wearable_items/_exp09/ethernere_armors/vanguard/right', 1190), + (20343, 19141, 'accessories/wearable_items/_exp09/ethernere_armors/vanguard/shoulders', 1190), + (20344, 19142, 'accessories/wearable_items/_exp09/ethernere_armors/vanguard/shoulders_epic', 1190), + (20345, 19143, 'accessories/wearable_items/_exp09/ethernere_armors/vanguard/shoulders_nopauldrons', 1190), + (20346, 19144, 'accessories/wearable_items/_exp09/ethernere_armors/vanguard/skirt', 1190), + (20347, 19145, '_exp09/characters/monsters/mud_monster/mud_monster_cazic_thule', 1190), + (20348, 19146, 'accessories/wearable_items/cloak/exp09/cloak_ethernere_short', 1190), + (20349, 19147, 'accessories/wearable_items/cloak/exp09/cloak_ethernere_long', 1190), + (20350, 19148, 'creatures/monsters/mouth_eye_blob_ethenere', 1190), + (20351, 19149, '_exp08/characters/tool_users/bog_wraith/bog_wraith_spectre_chain', 1190), + (20352, 19150, 'accessories/wieldable_items/weapons/exp09/1h_crush/ethernere_hammer', 1190), + (20353, 19151, '_exp09/characters/monsters/dragon_shadowdrach/dragon_shadowdrach', 1190), + (20354, 19152, '_exp09/characters/tool_users/ethenere_npcs/human_male_ethenere', 1190), + (20355, 19153, '_exp09/characters/tool_users/illithid/illithid', 1190), + (20356, 19154, 'accessories/wieldable_items/weapons/exp09/staff/spear_ethernere', 1190), + (20357, 19155, 'accessories/wieldable_items/weapons/exp09/fist/ethernere_claws', 1190), + (20358, 19156, '_exp09/characters/tool_users/ethenere_npcs/dwarf_female_ethenere', 1190), + (20359, 19157, '_exp09/characters/tool_users/ethenere_npcs/dwarf_male_ethenere', 1190), + (20360, 19158, '_exp09/characters/tool_users/ethenere_npcs/human_female_ethenere', 1190), + (20361, 19159, '_exp09/characters/tool_users/ethenere_npcs/ogre_male_ethenere', 1190), + (20362, 19160, 'staticobjects/halloween/le_jackolantern01_green', 1190), + (20363, 19161, 'staticobjects/halloween/le_jackolantern01_purple', 1190), + (20364, 19162, 'staticobjects/halloween/le_jackolantern02_green', 1190), + (20365, 19163, 'staticobjects/halloween/le_jackolantern02_purple', 1190), + (20366, 19164, 'staticobjects/halloween/le_jackolantern03_green', 1190), + (20367, 19165, 'staticobjects/halloween/le_jackolantern03_purple', 1190), + (20368, 19166, 'staticobjects/halloween/dpo_bat_skull_garland', 1190), + (20369, 19167, 'staticobjects/halloween/dpo_pitchfork_skull_garland', 1190), + (20370, 19168, '_exp09/characters/tool_users/drinal/drinal_evil', 1190), + (20371, 19169, '_exp08/characters/monsters/dragon_made_golem/dragon_made_golem_ice', 1190), + (20372, 19170, '_exp09/characters/monsters/tirun_enforcer/tirun_enforcer', 1190), + (20373, 19171, 'accessories/wieldable_items/weapons/exp09/1h_pierce/dagger_ethernere', 1190), + (20374, 19172, 'accessories/wieldable_items/weapons/exp09/1h_sword/1h_sword_cazic', 1190), + (20375, 19173, 'accessories/wieldable_items/weapons/exp09/2h_sword/2h_sword_cazic', 1190), + (20376, 19174, 'staticobjects/halloween/fprt_ext_tombstonec001', 1190), + (20377, 19175, 'staticobjects/halloween/container_spec01_organ', 1190), + (20378, 19176, 'staticobjects/halloween/oblost_pot02_worgans', 1190), + (20379, 19177, 'staticobjects/halloween/bef_weaponrack02', 1190), + (20380, 19178, 'staticobjects/halloween/tfs_present01_medium', 1190), + (20381, 19179, 'staticobjects/halloween/seb_lightsource_firepot_iksar_large01_w_light', 1190), + (20382, 19180, 'staticobjects/halloween/wl_satyr_skull_candles', 1190), + (20383, 19181, 'staticobjects/halloween/bef_armor_display01', 1190), + (20384, 19182, '_exp09/characters/monsters/carnivorous_ape_boss/carnivorous_ape_boss', 1190), + (20385, 19183, 'ec/pc/human/human_male_2011/human_male_normal_black_test', 1190), + (20386, 19184, 'ec/pc/human/human_male_2011/human_male_white_test', 1190), + (20387, 19185, 'accessories/wieldable_items/weapons/exp09/bow/bow_ethernere', 1190), + (20388, 19186, 'accessories/wieldable_items/weapons/exp09/bow/longbow_ethernere', 1190), + (20389, 19187, '_exp09/characters/monsters/ethereal_construct/ethereal_construct', 1190), + (20390, 19188, 'accessories/wieldable_items/weapons/exp09/staff/wand_ethernere', 1190), + (20391, 19189, 'creatures/mounts/pegasus_demon/pegasus_demon', 1190), + (20392, 19190, 'accessories/wieldable_items/weapons/exp09/staff/staff_ethernere', 1190), + (20393, 19191, '_exp09/objects/sleepers_tomb/sleepers_tomb_column', 1190), + (20394, 19192, '_exp09/objects/sleepers_tomb/sleepers_tomb_column_02', 1190), + (20395, 19193, 'accessories/wearable_items/_exp09/thullian_armor/accessories/armband_base_left', 1190), + (20396, 19194, 'accessories/wearable_items/_exp09/thullian_armor/accessories/armband_base_right', 1190), + (20397, 19195, 'accessories/wearable_items/_exp09/thullian_armor/accessories/pauldron_light_left', 1190), + (20398, 19196, 'accessories/wearable_items/_exp09/thullian_armor/accessories/pauldron_light_right', 1190), + (20399, 19197, 'accessories/wearable_items/_exp09/thullian_armor/accessories/pauldron_robe_left', 1190), + (20400, 19198, 'accessories/wearable_items/_exp09/thullian_armor/accessories/pauldron_robe_right', 1190), + (20401, 19199, 'accessories/wearable_items/_exp09/thullian_armor/accessories/pauldrons_chain_left', 1190), + (20402, 19200, 'accessories/wearable_items/_exp09/thullian_armor/accessories/pauldrons_chain_right', 1190), + (20403, 19201, 'accessories/wearable_items/_exp09/thullian_armor/accessories/pauldrons_left', 1190), + (20404, 19202, 'accessories/wearable_items/_exp09/thullian_armor/accessories/pauldrons_right', 1190), + (20405, 19203, 'accessories/wearable_items/_exp09/thullian_armor/chain/chest', 1190), + (20406, 19204, 'accessories/wearable_items/_exp09/thullian_armor/chain/feet', 1190), + (20407, 19205, 'accessories/wearable_items/_exp09/thullian_armor/chain/forearms', 1190), + (20408, 19206, 'accessories/wearable_items/_exp09/thullian_armor/chain/hands', 1190), + (20409, 19207, 'accessories/wearable_items/_exp09/thullian_armor/chain/head', 1190), + (20410, 19208, 'accessories/wearable_items/_exp09/thullian_armor/chain/legs', 1190), + (20411, 19209, 'accessories/wearable_items/_exp09/thullian_armor/chain/shoulders', 1190), + (20412, 19210, 'accessories/wearable_items/_exp09/thullian_armor/chain/shoulders_epic', 1190), + (20413, 19211, 'accessories/wearable_items/_exp09/thullian_armor/gi_valkeryie/chest', 1190), + (20414, 19212, 'accessories/wearable_items/_exp09/thullian_armor/gi_valkeryie/hands', 1190), + (20415, 19213, 'accessories/wearable_items/_exp09/thullian_armor/gi_valkeryie/legs', 1190), + (20416, 19214, 'accessories/wearable_items/_exp09/thullian_armor/gi_valkeryie/shoulders', 1190), + (20417, 19215, 'accessories/wearable_items/_exp09/thullian_armor/leather/chest', 1190), + (20418, 19216, 'accessories/wearable_items/_exp09/thullian_armor/leather/feet', 1190), + (20419, 19217, 'accessories/wearable_items/_exp09/thullian_armor/leather/forearms', 1190), + (20420, 19218, 'accessories/wearable_items/_exp09/thullian_armor/leather/hands', 1190), + (20421, 19219, 'accessories/wearable_items/_exp09/thullian_armor/leather/head', 1190), + (20422, 19220, 'accessories/wearable_items/_exp09/thullian_armor/leather/legs', 1190), + (20423, 19221, 'accessories/wearable_items/_exp09/thullian_armor/leather/legs_noskirt', 1190), + (20424, 19222, 'accessories/wearable_items/_exp09/thullian_armor/leather/shoulders', 1190), + (20425, 19223, 'accessories/wearable_items/_exp09/thullian_armor/leather/shoulders_epic', 1190), + (20426, 19224, 'accessories/wearable_items/_exp09/thullian_armor/leather/skirt', 1190), + (20427, 19225, 'accessories/wearable_items/_exp09/thullian_armor/robe/chest', 1190), + (20428, 19226, 'accessories/wearable_items/_exp09/thullian_armor/robe/chest_epic', 1190), + (20429, 19227, 'accessories/wearable_items/_exp09/thullian_armor/robe/feet', 1190), + (20430, 19228, 'accessories/wearable_items/_exp09/thullian_armor/robe/hands', 1190), + (20431, 19229, 'accessories/wearable_items/_exp09/thullian_armor/robe/head', 1190), + (20432, 19230, 'accessories/wearable_items/_exp09/thullian_armor/robe/head_collar', 1190), + (20433, 19231, 'accessories/wearable_items/_exp09/thullian_armor/robe/pants', 1190), + (20434, 19232, 'accessories/wearable_items/_exp09/thullian_armor/robe/skirt', 1190), + (20435, 19233, 'accessories/wearable_items/_exp09/thullian_armor/vanguard/chest', 1190), + (20436, 19234, 'accessories/wearable_items/_exp09/thullian_armor/vanguard/feet', 1190), + (20437, 19235, 'accessories/wearable_items/_exp09/thullian_armor/vanguard/forearms', 1190), + (20438, 19236, 'accessories/wearable_items/_exp09/thullian_armor/vanguard/hands', 1190), + (20439, 19237, 'accessories/wearable_items/_exp09/thullian_armor/vanguard/head', 1190), + (20440, 19238, 'accessories/wearable_items/_exp09/thullian_armor/vanguard/left', 1190), + (20441, 19239, 'accessories/wearable_items/_exp09/thullian_armor/vanguard/legs', 1190), + (20442, 19240, 'accessories/wearable_items/_exp09/thullian_armor/vanguard/legs_noskirt', 1190), + (20443, 19241, 'accessories/wearable_items/_exp09/thullian_armor/vanguard/right', 1190), + (20444, 19242, 'accessories/wearable_items/_exp09/thullian_armor/vanguard/shoulders', 1190), + (20445, 19243, 'accessories/wearable_items/_exp09/thullian_armor/vanguard/shoulders_epic', 1190), + (20446, 19244, 'accessories/wearable_items/_exp09/thullian_armor/vanguard/shoulders_nopauldrons', 1190), + (20447, 19245, 'accessories/wearable_items/_exp09/thullian_armor/vanguard/skirt', 1190), + (20448, 19246, '_exp09/objects/drinals/object_wisp_crystal', 1190), + (20449, 19247, '_exp08/characters/tool_users/chitari/chitari_male_statue', 1190), + (20450, 19248, 'accessories/wieldable_items/weapons/exp08/1h_crush/exp08_1h_crush_chitari', 1190), + (20451, 19249, 'accessories/wieldable_items/weapons/exp08/1h_sword/exp08_1hs_axe_chitari', 1190), + (20452, 19250, 'accessories/wieldable_items/weapons/exp09/staff/bostaff_ethernere', 1190), + (20453, 19251, 'staticobjects/_exp08/sleepers_tomb/sleepers_tomb_urngroup03', 1190), + (20454, 19252, 'staticobjects/_exp08/sleepers_tomb/exp08_dun_sleepers_tomb_brazier_large02', 1190), + (20455, 19253, 'staticobjects/_exp08/sleepers_tomb/exp08_dun_sleepers_tomb_brazier_med01', 1190), + (20456, 19254, 'staticobjects/_exp08/sleepers_tomb/exp08_dun_sleepers_tomb_rug01', 1190), + (20457, 19255, 'staticobjects/_exp08/sleepers_tomb/exp08_dun_sleepers_tomb_rug02', 1190), + (20458, 19256, 'staticobjects/_exp08/sleepers_tomb/exp08_dun_sleepers_tomb_rug03', 1190), + (20459, 19257, 'staticobjects/_exp08/sleepers_tomb/exp08_dun_sleepers_tomb_urn01', 1190), + (20460, 19258, 'staticobjects/_exp08/sleepers_tomb/exp08_dun_sleepers_tomb_urn02', 1190), + (20461, 19259, 'staticobjects/_exp08/sleepers_tomb/exp08_dun_sleepers_tomb_urn03', 1190), + (20462, 19260, 'staticobjects/_exp08/sleepers_tomb/exp08_dun_sleepers_tomb_urn04', 1190), + (20463, 19261, 'staticobjects/_exp08/sleepers_tomb/exp08_dun_sleepers_tomb_urn05', 1190), + (20464, 19262, 'staticobjects/_exp08/sleepers_tomb/exp08_dun_sleepers_tomb_urn06', 1190), + (20465, 19263, 'staticobjects/_exp08/sleepers_tomb/sleepers_tomb_bookgroup01', 1190), + (20466, 19264, 'staticobjects/_exp08/sleepers_tomb/sleepers_tomb_bookgroup02', 1190), + (20467, 19265, 'staticobjects/_exp08/sleepers_tomb/sleepers_tomb_bookgroup03', 1190), + (20468, 19266, 'staticobjects/_exp08/sleepers_tomb/sleepers_tomb_brazier01_large', 1190), + (20469, 19267, 'staticobjects/_exp08/sleepers_tomb/sleepers_tomb_chest_large01', 1190), + (20470, 19268, 'staticobjects/_exp08/sleepers_tomb/sleepers_tomb_chest_large01_open', 1190), + (20471, 19269, 'staticobjects/_exp08/sleepers_tomb/sleepers_tomb_chest_large02', 1190), + (20472, 19270, 'staticobjects/_exp08/sleepers_tomb/sleepers_tomb_cornersconce_01', 1190), + (20473, 19271, 'staticobjects/_exp08/sleepers_tomb/sleepers_tomb_cornersconce_02', 1190), + (20474, 19272, 'staticobjects/_exp08/sleepers_tomb/sleepers_tomb_crate_large01', 1190), + (20475, 19273, 'staticobjects/_exp08/sleepers_tomb/sleepers_tomb_crate_large02', 1190), + (20476, 19274, 'staticobjects/_exp08/sleepers_tomb/sleepers_tomb_crate_large03', 1190), + (20477, 19275, 'staticobjects/_exp08/sleepers_tomb/sleepers_tomb_hangingsconce_01', 1190), + (20478, 19276, 'staticobjects/_exp08/sleepers_tomb/sleepers_tomb_urnfancy01', 1190), + (20479, 19277, 'accessories/wearable_items/_exp09/mummy_wraps/chest', 1190), + (20480, 19278, 'accessories/wearable_items/_exp09/mummy_wraps/hands', 1190), + (20481, 19279, 'accessories/wearable_items/_exp09/mummy_wraps/legs', 1190), + (20482, 19280, 'accessories/wearable_items/_exp09/mummy_wraps/shoulders', 1190), + (20483, 19281, 'accessories/wearable_items/_exp09/mummy_wraps/accessories/armband_base_left', 1190), + (20484, 19282, 'accessories/wearable_items/_exp09/mummy_wraps/accessories/armband_base_right', 1190), + (20485, 19283, 'accessories/wearable_items/_exp09/mummy_wraps_royal/chest', 1190), + (20486, 19284, 'accessories/wearable_items/_exp09/mummy_wraps_royal/hands', 1190), + (20487, 19285, 'accessories/wearable_items/_exp09/mummy_wraps_royal/legs', 1190), + (20488, 19286, 'accessories/wearable_items/_exp09/mummy_wraps_royal/shoulders', 1190), + (20489, 19287, 'ec/pc/darkelf/darkelf_female_ethernere', 1190), + (20490, 19288, 'ec/pc/darkelf/darkelf_male_ethernere', 1190), + (20491, 19289, 'creatures/monsters/spider_ethernerearmor3', 1190), + (20492, 19290, 'creatures/monsters/spider_ethernerearmor2', 1190), + (20493, 19291, 'creatures/monsters/spider_ethernerearmor1', 1190), + (20494, 19292, 'creatures/monsters/spider_yellowrecluse', 1190), + (20495, 19293, 'creatures/monsters/spider_treespringer', 1190), + (20496, 19294, 'creatures/monsters/spider_shadowspawn', 1190), + (20497, 19295, 'creatures/monsters/spider_sanguinated', 1190), + (20498, 19296, 'creatures/monsters/spider_redyellow', 1190), + (20499, 19297, 'creatures/monsters/spider_bonecollector', 1190), + (20500, 19298, 'accessories/wieldable_items/weapons/exp09/1h_crush/axe_ethernere', 1190), + (20501, 19299, 'accessories/wieldable_items/weapons/exp09/1h_sword/1h_sword_ethernere', 1190), + (20502, 19300, 'creatures/monsters/dervish_spinning_obolplain_stonestack', 1190), + (20503, 19301, 'creatures/monsters/dervish_spinning_obolplain_sand', 1190), + (20504, 19302, 'creatures/monsters/dervish_spinning_obolplain_rock', 1190), + (20505, 19303, 'creatures/monsters/dervish_spinning_obolplain_gravel', 1190), + (20506, 19304, 'creatures/monsters/dervish_obolplain_stonestack', 1190), + (20507, 19305, 'creatures/monsters/dervish_obolplain_sand', 1190), + (20508, 19306, 'creatures/monsters/dervish_obolplain_rock', 1190), + (20509, 19307, 'creatures/monsters/dervish_obolplain_gravel', 1190), + (20510, 19308, '_exp09/characters/monsters/elemental_wave/elementalwave_obolplain_flowergrass', 1190), + (20511, 19309, '_exp09/characters/monsters/elemental_wave/elementalwave_obolplain_grass', 1190), + (20512, 19310, '_exp09/characters/monsters/elemental_wave/elementalwave_obolplain_purpleleaves', 1190), + (20513, 19311, '_exp09/characters/monsters/elemental_wave/elementalwave_obolplain_sand', 1190), + (20514, 19312, '_exp09/characters/monsters/elemental_wave/elementalwave_obolplain_sandwet', 1190), + (20515, 19313, 'accessories/wearable_items/_exp09/nightborne_sc_chain/snap_ons/chaos_pauldrons_left', 1190), + (20516, 19314, 'accessories/wearable_items/_exp09/nightborne_sc_chain/snap_ons/chaos_pauldrons_right', 1190), + (20517, 19315, 'accessories/wearable_items/_exp09/nightborne_sc_chain/chest', 1190), + (20518, 19316, 'accessories/wearable_items/_exp09/nightborne_sc_chain/feet', 1190), + (20519, 19317, 'accessories/wearable_items/_exp09/nightborne_sc_chain/forearms', 1190), + (20520, 19318, 'accessories/wearable_items/_exp09/nightborne_sc_chain/hands', 1190), + (20521, 19319, 'accessories/wearable_items/_exp09/nightborne_sc_chain/head', 1190), + (20522, 19320, 'accessories/wearable_items/_exp09/nightborne_sc_chain/head_epic', 1190), + (20523, 19321, 'accessories/wearable_items/_exp09/nightborne_sc_chain/legs', 1190), + (20524, 19322, 'accessories/wearable_items/_exp09/nightborne_sc_chain/legs_noskirt', 1190), + (20525, 19323, 'accessories/wearable_items/_exp09/nightborne_sc_chain/shoulders', 1190), + (20526, 19324, 'accessories/wearable_items/_exp09/nightborne_sc_chain/shoulders_epic', 1190), + (20527, 19325, 'accessories/wearable_items/_exp09/nightborne_sc_chain/skirt', 1190), + (20528, 19326, 'accessories/wearable_items/_exp09/nightborne_sc_leather/snap_ons/head_skull', 1190), + (20529, 19327, 'accessories/wearable_items/_exp09/nightborne_sc_leather/snap_ons/pauldrons_left', 1190), + (20530, 19328, 'accessories/wearable_items/_exp09/nightborne_sc_leather/snap_ons/pauldrons_right', 1190), + (20531, 19329, 'accessories/wearable_items/_exp09/nightborne_sc_leather/chest', 1190), + (20532, 19330, 'accessories/wearable_items/_exp09/nightborne_sc_leather/feet', 1190), + (20533, 19331, 'accessories/wearable_items/_exp09/nightborne_sc_leather/forearms', 1190), + (20534, 19332, 'accessories/wearable_items/_exp09/nightborne_sc_leather/hands', 1190), + (20535, 19333, 'accessories/wearable_items/_exp09/nightborne_sc_leather/head', 1190), + (20536, 19334, 'accessories/wearable_items/_exp09/nightborne_sc_leather/head_epic', 1190), + (20537, 19335, 'accessories/wearable_items/_exp09/nightborne_sc_leather/legs', 1190), + (20538, 19336, 'accessories/wearable_items/_exp09/nightborne_sc_leather/legs_noskirt', 1190), + (20539, 19337, 'accessories/wearable_items/_exp09/nightborne_sc_leather/shoulders_epic', 1190), + (20540, 19338, 'accessories/wearable_items/_exp09/nightborne_sc_leather/shoulders_no_pauldrons', 1190), + (20541, 19339, 'accessories/wearable_items/_exp09/nightborne_sc_leather/skirt', 1190), + (20542, 19340, 'accessories/wearable_items/_exp09/nightborne_sc_robe/snap_ons/pants', 1190), + (20543, 19341, 'accessories/wearable_items/_exp09/nightborne_sc_robe/snap_ons/pauldrons_lower_left', 1190), + (20544, 19342, 'accessories/wearable_items/_exp09/nightborne_sc_robe/snap_ons/pauldrons_lower_right', 1190), + (20545, 19343, 'accessories/wearable_items/_exp09/nightborne_sc_robe/snap_ons/pauldrons_upper_left', 1190), + (20546, 19344, 'accessories/wearable_items/_exp09/nightborne_sc_robe/snap_ons/pauldrons_upper_right', 1190), + (20547, 19345, 'accessories/wearable_items/_exp09/nightborne_sc_robe/snap_ons/skirt', 1190), + (20548, 19346, 'accessories/wearable_items/_exp09/nightborne_sc_robe/chest', 1190), + (20549, 19347, 'accessories/wearable_items/_exp09/nightborne_sc_robe/chest_epic', 1190), + (20550, 19348, 'accessories/wearable_items/_exp09/nightborne_sc_robe/feet', 1190), + (20551, 19349, 'accessories/wearable_items/_exp09/nightborne_sc_robe/hands', 1190), + (20552, 19350, 'accessories/wearable_items/_exp09/nightborne_sc_robe/head', 1190), + (20553, 19351, 'accessories/wearable_items/_exp09/nightborne_sc_robe/head_collar', 1190), + (20554, 19352, 'accessories/wearable_items/_exp09/nightborne_sc_robe/head_epic', 1190), + (20555, 19353, 'creatures/monsters/willowisp_ethernere01', 1190), + (20556, 19354, '_exp08/characters/monsters/gargoyle_sleeper/gargoyle_obsidian_black', 1190), + (20557, 19355, 'creatures/monsters/willowisp_ethernere02', 1190), + (20558, 19356, 'creatures/monsters/willowisp_ethernere02_dark', 1190), + (20559, 19357, 'creatures/monsters/willowisp_ethernere03', 1190), + (20560, 19358, 'creatures/tu/ethernere_elemental_soldier', 1190), + (20561, 19359, '_exp08/characters/monsters/komodo/komodo_blue', 1190), + (20562, 19360, '_exp08/characters/monsters/komodo/komodo_green', 1190), + (20563, 19361, '_exp08/characters/monsters/komodo/komodo_red', 1190), + (20564, 19362, 'creatures/mounts/komodo_mount/komodo_mount_obolplains_redpack', 1190), + (20565, 19363, 'creatures/mounts/komodo_mount/komodo_mount_obolplains_greenpack', 1190), + (20566, 19364, 'creatures/mounts/komodo_mount/komodo_mount_obolplains_bluepack', 1190), + (20567, 19365, 'creatures/mounts/komodo_mount/komodo_mount_obolplains_green', 1190), + (20568, 19366, 'creatures/mounts/komodo_mount/komodo_mount_obolplains_red', 1190), + (20569, 19367, 'creatures/mounts/komodo_mount/komodo_mount_obolplains_blue', 1190), + (20570, 19368, 'creatures/monsters/willowisp_sparkle_purple_dead_fx', 1190), + (20571, 19369, '_exp09/characters/monsters/withering_tree_ent/fear_tree_ent', 1190), + (20572, 19370, '_exp09/characters/monsters/withering_tree_ent/glowing_tree_ent', 1190), + (20573, 19371, '_exp09/characters/monsters/scorpion_updated/scorpion_updated_bonepicker', 1190), + (20574, 19372, '_exp09/characters/monsters/scorpion_updated/scorpion_updated_brown', 1190), + (20575, 19373, '_exp09/characters/monsters/scorpion_updated/scorpion_updated_hematic', 1190), + (20576, 19374, '_exp09/characters/monsters/scorpion_updated/scorpion_updated_jungle', 1190), + (20577, 19375, '_exp09/characters/monsters/scorpion_updated/scorpion_updated_shadecasted', 1190), + (20578, 19376, '_exp09/characters/tool_users/illithid/illithid_staff', 1190), + (20579, 19377, '_exp09/characters/monsters/elementalair_ethernere/elementalair_ethernere_blue', 1190), + (20580, 19378, '_exp09/characters/monsters/elementalair_ethernere/elementalair_ethernere_bluechaos', 1190), + (20581, 19379, '_exp09/characters/monsters/elementalair_ethernere/elementalair_ethernere_fire', 1190), + (20582, 19380, '_exp09/characters/monsters/elementalair_ethernere/elementalair_ethernere_firechaos', 1190), + (20583, 19381, '_exp09/characters/monsters/elementalair_ethernere/elementalair_ethernere_soulfire', 1190), + (20584, 19382, '_exp08/characters/tool_users/banshee_sleeper/banshee_sleeper_spectre_blue', 1190), + (20585, 19383, '_exp08/characters/tool_users/banshee_sleeper/banshee_sleeper_spectre_green', 1190), + (20586, 19384, '_exp08/characters/tool_users/banshee_sleeper/banshee_sleeper_spectre_violet', 1190), + (20587, 19385, '_exp08/characters/tool_users/banshee_sleeper/banshee_sleeper_spectre_queen_blue', 1190), + (20588, 19386, '_exp08/characters/tool_users/banshee_sleeper/banshee_sleeper_spectre_queen_green', 1190), + (20589, 19387, '_exp08/characters/tool_users/banshee_sleeper/banshee_sleeper_spectre_queen_violet', 1190), + (20590, 19388, 'accessories/wearable_items/cloak/exp09/dragon_cloak', 1190), + (20591, 19389, 'accessories/wearable_items/cloak/exp09/dragon_cloak_blue', 1190), + (20592, 19390, 'accessories/wearable_items/cloak/exp09/dragon_cloak_green', 1190), + (20593, 19391, '_exp09/characters/tool_users/ethenere_npcs/erudite_female_ethenere', 1190), + (20594, 19392, '_exp09/characters/tool_users/ethenere_npcs/erudite_male_ethenere', 1190), + (20595, 19393, '_exp09/characters/tool_users/ethenere_npcs/gnome_female_ethenere', 1190), + (20596, 19394, '_exp09/characters/tool_users/ethenere_npcs/gnome_male_ethenere', 1190), + (20597, 19395, '_exp09/characters/tool_users/ethenere_npcs/highelf_female_ethenere', 1190), + (20598, 19396, '_exp09/characters/tool_users/ethenere_npcs/highelf_male_ethenere', 1190), + (20599, 19397, 'creatures/tu/firiona_vie_ethenere', 1190), + (20600, 19398, '_exp09/characters/monsters/timber_wolf_ethernere/timber_wolf_ethernere', 1190), + (20601, 19399, '_exp08/characters/monsters/dragon_made_golem/dragon_made_golem_sleepers_blue', 1190), + (20602, 19400, '_exp08/characters/monsters/dragon_made_golem/dragon_made_golem_sleepers_green', 1190), + (20603, 19401, '_exp08/characters/monsters/dragon_made_golem/dragon_made_golem_sleepers_violet', 1190), + (20604, 19402, '_exp09/characters/tool_users/ethenere_npcs/ogre_female_ethenere', 1190), + (20605, 19403, 'accessories/wieldable_items/weapons/exp09/1h_crush/axe_1h_primal_velium', 1190), + (20606, 19404, 'accessories/wieldable_items/weapons/exp09/1h_crush/hammer_1h_primal_velium', 1190), + (20607, 19405, 'accessories/wieldable_items/weapons/exp09/1h_sword/1h_sword_primal_velium', 1190), + (20608, 19406, 'accessories/wieldable_items/weapons/exp09/2h_crush/2h_axe_primal_velium', 1190), + (20609, 19407, 'accessories/wieldable_items/weapons/exp09/2h_crush/2h_hammer_primal_velium', 1190), + (20610, 19408, 'accessories/wieldable_items/weapons/exp09/2h_sword/2h_sword_primal_velium', 1190), + (20611, 19409, 'accessories/wieldable_items/weapons/exp09/bow/longbow_primal_velium', 1190), + (20612, 19410, 'accessories/wieldable_items/weapons/exp09/fist/fist_primal_velium', 1190), + (20613, 19411, 'accessories/wieldable_items/weapons/exp09/staff/staff_primal_velium', 1190), + (20614, 19412, 'accessories/wieldable_items/weapons/exp09/staff/bowstaff_primal_velium', 1190), + (20615, 19413, 'accessories/wieldable_items/weapons/exp09/staff/cazic_pike', 1190), + (20616, 19414, '_exp09/characters/tool_users/illithid/illithid_cowl', 1190), + (20617, 19415, '_exp09/characters/tool_users/illithid/illithid_cowl_staff', 1190), + (20618, 19416, 'accessories/wieldable_items/weapons/exp09/1h_crush/cazic_wand', 1190), + (20619, 19417, 'accessories/wieldable_items/weapons/exp09/1h_crush/1h_hammer_cazic', 1190), + (20620, 19418, 'accessories/wieldable_items/weapons/exp09/2h_crush/exp09_2h_hammer_cazic', 1190), + (20621, 19419, 'accessories/wieldable_items/weapons/exp09/fist/fist_cazic', 1190), + (20622, 19420, 'accessories/wearable_items/snapons/backpacks/quivers/quiver_basic1_cherry', 1190), + (20623, 19421, 'accessories/wearable_items/snapons/backpacks/quivers/quiver_basic1_driftwood', 1190), + (20624, 19422, 'accessories/wearable_items/snapons/backpacks/quivers/quiver_basic1_enameled', 1190), + (20625, 19423, 'accessories/wearable_items/snapons/backpacks/quivers/quiver_basic1_walnut', 1190), + (20626, 19424, 'accessories/wearable_items/snapons/backpacks/quivers/quiver_basic2_black', 1190), + (20627, 19425, 'accessories/wearable_items/snapons/backpacks/quivers/quiver_basic2_blue', 1190), + (20628, 19426, 'accessories/wearable_items/snapons/backpacks/quivers/quiver_basic2_brown', 1190), + (20629, 19427, 'accessories/wearable_items/snapons/backpacks/quivers/quiver_basic2_green', 1190), + (20630, 19428, 'accessories/wearable_items/snapons/backpacks/quivers/quiver_basic2_red', 1190), + (20631, 19429, 'accessories/wearable_items/snapons/backpacks/quivers/quiver_belted_blue', 1190), + (20632, 19430, 'accessories/wearable_items/snapons/backpacks/quivers/quiver_belted_brown', 1190), + (20633, 19431, 'accessories/wearable_items/snapons/backpacks/quivers/quiver_belted_green', 1190), + (20634, 19432, 'accessories/wearable_items/snapons/backpacks/quivers/quiver_belted_purple', 1190), + (20635, 19433, 'accessories/wearable_items/snapons/backpacks/quivers/quiver_belted_red', 1190), + (20636, 19434, '_exp08/characters/monsters/dragon_bone_golem/dragon_bone_golem_dirty', 1190), + (20637, 19435, '_exp09/characters/monsters/skeleton_dervish/skeleton_dervish', 1190), + (20638, 19436, 'staticobjects/soe_wallet/curtains_plain', 1190), + (20639, 19437, '_exp09/characters/tool_users/gehein/gehein', 1190), + (20640, 19438, 'accessories/wearable_items/profesion_hats/tophat/head_basic', 1190), + (20641, 19439, 'accessories/wearable_items/profesion_hats/tophat/head_goblin', 1190), + (20642, 19440, 'accessories/wearable_items/profesion_hats/tophat/head_leather', 1190), + (20643, 19441, 'accessories/wearable_items/profesion_hats/tophat/head_leather_blue', 1190), + (20644, 19442, 'accessories/wearable_items/profesion_hats/tophat/head_leather_dark', 1190), + (20645, 19443, 'accessories/wearable_items/profesion_hats/tophat/head_leather_green', 1190), + (20646, 19444, 'accessories/wearable_items/profesion_hats/tophat/head_leather_purple', 1190), + (20647, 19445, 'accessories/wearable_items/profesion_hats/tophat/head_leather_red', 1190), + (20648, 19446, '_exp09/objects/sleepers_tomb/gargoyle_sleeper_pedestal', 1190), + (20649, 19447, 'creatures/mounts/player_wing/player_wyvern_tintable', 1190), + (20650, 19448, '_exp09/characters/monsters/ethereal_construct/ethereal_construct_base', 1190), + (20651, 19449, '_exp09/characters/monsters/ethereal_construct/ethereal_construct_weapon', 1190), + (20652, 19450, 'accessories/wearable_items/profesion_hats/tiara_mummy/head_bronze', 1190), + (20653, 19451, 'accessories/wearable_items/profesion_hats/tiara_mummy/head_darkiron', 1190), + (20654, 19452, 'accessories/wearable_items/profesion_hats/tiara_mummy/head_gem_emerald', 1190), + (20655, 19453, 'accessories/wearable_items/profesion_hats/tiara_mummy/head_gem_onyx', 1190), + (20656, 19454, 'accessories/wearable_items/profesion_hats/tiara_mummy/head_gem_ruby', 1190), + (20657, 19455, 'accessories/wearable_items/profesion_hats/tiara_mummy/head_glacial', 1190), + (20658, 19456, 'accessories/wearable_items/profesion_hats/tiara_mummy/head_golden', 1190), + (20659, 19457, 'accessories/wearable_items/profesion_hats/tiara_mummy/head_sandstone', 1190), + (20660, 19458, 'accessories/wearable_items/profesion_hats/tiara_mummy/head_stone', 1190), + (20661, 19459, 'accessories/wieldable_items/weapons/exp09/bow/longbow_cazic', 1190), + (20662, 19460, 'accessories/wearable_items/_exp09/heritage_woodelf/leather/chest', 1190), + (20663, 19461, 'accessories/wearable_items/_exp09/heritage_woodelf/leather/feet', 1190), + (20664, 19462, 'accessories/wearable_items/_exp09/heritage_woodelf/leather/forearms', 1190), + (20665, 19463, 'accessories/wearable_items/_exp09/heritage_woodelf/leather/hands', 1190), + (20666, 19464, 'accessories/wearable_items/_exp09/heritage_woodelf/leather/head', 1190), + (20667, 19465, 'accessories/wearable_items/_exp09/heritage_woodelf/leather/head_hood', 1190), + (20668, 19466, 'accessories/wearable_items/_exp09/heritage_woodelf/leather/legs', 1190), + (20669, 19467, 'accessories/wearable_items/_exp09/heritage_woodelf/leather/legs_noskirt', 1190), + (20670, 19468, 'accessories/wearable_items/_exp09/heritage_woodelf/leather/shoulders', 1190), + (20671, 19469, 'accessories/wearable_items/_exp09/heritage_woodelf/leather/shoulders_epic', 1190), + (20672, 19470, 'accessories/wearable_items/_exp09/heritage_woodelf/leather/skirt', 1190), + (20673, 19471, 'accessories/wearable_items/_exp09/heritage_woodelf/leather/pauldron/shoulder_pauldron_left', 1190), + (20674, 19472, 'accessories/wearable_items/_exp09/heritage_woodelf/leather/pauldron/shoulder_pauldron_right', 1190), + (20675, 19473, 'accessories/wearable_items/_exp09/heritage_woodelf/leather/hood/head', 1190), + (20676, 19474, 'accessories/wearable_items/cloak/exp09/cloak_heritage_woodelf', 1190), + (20677, 19475, 'accessories/wearable_items/cloak/exp09/cloak_heritage_woodelf_effect', 1190), + (20678, 19476, '_exp09/characters/monsters/shambling_mound/shambling_mound', 1190), + (20679, 19477, '_exp09/characters/monsters/shambling_mound/shambling_mound_02', 1190), + (20680, 19478, '_exp09/characters/monsters/shambling_mound/shambling_mound_03', 1190), + (20681, 19479, 'accessories/wearable_items/_exp09/armband_stationcash/armband_left', 1190), + (20682, 19480, 'accessories/wearable_items/_exp09/armband_stationcash/armband_right', 1190), + (20683, 19481, '_exp09/characters/monsters/rust_monster/rustmonster', 1190), + (20684, 19482, 'creatures/monsters/bat_ethernere', 1190), + (20685, 19483, 'projectiles/arrow_emberwood', 1190), + (20686, 19484, 'projectiles/arrow_somberwood', 1190), + (20687, 19485, 'projectiles/throwing_star_of_ro', 1190), + (20688, 19486, '_exp09/characters/monsters/rust_monster/rustmonster_02', 1190), + (20689, 19487, 'accessories/wearable_items/snapons/armbands/shoulders_effect_leaf_left', 1190), + (20690, 19488, 'accessories/wearable_items/snapons/armbands/shoulders_effect_leaf_right', 1190), + (20691, 19489, 'accessories/wearable_items/snapons/armbands/shoulders_effect_leaf_both', 1190), + (20692, 19490, '_exp09/objects/prelude_portal', 1190), + (20693, 19491, '_exp09/characters/tool_users/gehein/gehein_staff', 1190), + (20694, 19492, '_exp09/characters/tool_users/gehein/gehein_sword', 1190), + (20695, 19493, '_exp09/objects/exp09_rgn_plains_of_obol/po_long_leaf_plant01_dpo', 1190), + (20696, 19494, 'creatures/monsters/wyvern_base', 1190), + (20697, 19495, 'creatures/monsters/wyvern_brown', 1190), + (20698, 19496, 'creatures/monsters/wyvern_green', 1190), + (20699, 19497, 'creatures/monsters/wyvern_red', 1190), + (20700, 19498, 'creatures/monsters/wyvern_shadow', 1190), + (20701, 19499, 'accessories/wieldable_items/weapons/exp09/1h_pierce/dagger_cazic', 1190), + (20702, 19500, 'accessories/wieldable_items/weapons/exp09/1h_crush/mace_fantasy_bluebronze', 1190), + (20703, 19501, 'accessories/wieldable_items/weapons/exp09/1h_crush/mace_fantasy_greengold', 1190), + (20704, 19502, 'accessories/wieldable_items/weapons/exp09/1h_crush/mace_fantasy_rediron', 1190), + (20705, 19503, 'accessories/wieldable_items/weapons/exp09/1h_crush/mace_fantasy_fire', 1190), + (20706, 19504, 'accessories/wieldable_items/weapons/exp09/1h_crush/mace_fantasy_spectral', 1190), + (20707, 19505, 'accessories/wieldable_items/weapons/exp09/1h_crush/mace_fantasy_stone', 1190), + (20708, 19506, 'accessories/wieldable_items/weapons/exp09/1h_crush/mace_fantasy_rusty', 1190), + (20709, 19507, 'accessories/wieldable_items/weapons/exp09/1h_crush/mace_fantasy_glacial', 1190), + (20710, 19508, 'accessories/wieldable_items/weapons/exp09/1h_crush/mace_fantasy_obsidian', 1190), + (20711, 19509, 'accessories/wieldable_items/weapons/exp09/1h_crush/wand_fantasy_spectral', 1190), + (20712, 19510, 'accessories/wieldable_items/weapons/exp09/1h_crush/wand_fantasy_rusty_greenorb', 1190), + (20713, 19511, 'accessories/wieldable_items/weapons/exp09/1h_crush/wand_fantasy_rusty_fireorb', 1190), + (20714, 19512, 'accessories/wieldable_items/weapons/exp09/1h_crush/wand_fantasy_rediron', 1190), + (20715, 19513, 'accessories/wieldable_items/weapons/exp09/1h_crush/wand_fantasy_blueice', 1190), + (20716, 19514, 'accessories/wieldable_items/weapons/exp09/1h_crush/wand_fantasy_bluebronze', 1190), + (20717, 19515, 'accessories/wieldable_items/weapons/exp09/1h_crush/hammer_fantasy_bluebronze', 1190), + (20718, 19516, 'accessories/wieldable_items/weapons/exp09/1h_crush/hammer_fantasy_greengold', 1190), + (20719, 19517, 'accessories/wieldable_items/weapons/exp09/1h_crush/hammer_fantasy_rediron', 1190), + (20720, 19518, 'accessories/wieldable_items/weapons/exp09/1h_sword/sword_fantasy_stone', 1190), + (20721, 19519, 'accessories/wieldable_items/weapons/exp09/1h_sword/sword_fantasy_spectral', 1190), + (20722, 19520, 'accessories/wieldable_items/weapons/exp09/1h_sword/sword_fantasy_rusty', 1190), + (20723, 19521, 'accessories/wieldable_items/weapons/exp09/1h_sword/sword_fantasy_obsidian', 1190), + (20724, 19522, 'accessories/wieldable_items/weapons/exp09/1h_sword/sword_fantasy_glacial', 1190), + (20725, 19523, 'accessories/wieldable_items/weapons/exp09/1h_sword/sword_fantasy_flame', 1190), + (20726, 19524, 'accessories/wieldable_items/weapons/exp09/1h_sword/sword_fantasy_rediron', 1190), + (20727, 19525, 'accessories/wieldable_items/weapons/exp09/1h_sword/sword_fantasy_greengold', 1190), + (20728, 19526, 'accessories/wieldable_items/weapons/exp09/1h_sword/sword_fantasy_bluebronze', 1190), + (20729, 19527, 'accessories/wieldable_items/weapons/exp09/1h_sword/shortsword_fantasy_stone', 1190), + (20730, 19528, 'accessories/wieldable_items/weapons/exp09/1h_sword/shortsword_fantasy_spectral', 1190), + (20731, 19529, 'accessories/wieldable_items/weapons/exp09/1h_sword/shortsword_fantasy_rusty', 1190), + (20732, 19530, 'accessories/wieldable_items/weapons/exp09/1h_sword/shortsword_fantasy_glacial', 1190), + (20733, 19531, 'accessories/wieldable_items/weapons/exp09/1h_sword/shortsword_fantasy_flame', 1190), + (20734, 19532, 'accessories/wieldable_items/weapons/exp09/1h_sword/shortsword_fantasy_rediron', 1190), + (20735, 19533, 'accessories/wieldable_items/weapons/exp09/1h_sword/shortsword_fantasy_greengold', 1190), + (20736, 19534, 'accessories/wieldable_items/weapons/exp09/1h_sword/shortsword_fantasy_bluebronze', 1190), + (20737, 19535, 'accessories/wieldable_items/weapons/exp09/2h_sword/2hsword_fantasy_rusty', 1190), + (20738, 19536, 'accessories/wieldable_items/weapons/exp09/2h_sword/2hsword_fantasy_rediron', 1190), + (20739, 19537, 'accessories/wieldable_items/weapons/exp09/2h_sword/2hsword_fantasy_obsidian', 1190), + (20740, 19538, 'accessories/wieldable_items/weapons/exp09/2h_sword/2hsword_fantasy_greengold', 1190), + (20741, 19539, 'accessories/wieldable_items/weapons/exp09/2h_sword/2hsword_fantasy_glacial', 1190), + (20742, 19540, 'accessories/wieldable_items/weapons/exp09/2h_sword/2hsword_fantasy_flame', 1190), + (20743, 19541, 'accessories/wieldable_items/weapons/exp09/2h_sword/2hsword_fantasy_spectral', 1190), + (20744, 19542, 'accessories/wieldable_items/weapons/exp09/2h_sword/2hsword_fantasy_bluebronze', 1190), + (20745, 19543, 'accessories/wieldable_items/weapons/exp09/bow/longbow_fantasy_stone', 1190), + (20746, 19544, 'accessories/wieldable_items/weapons/exp09/bow/longbow_fantasy_spectral', 1190), + (20747, 19545, 'accessories/wieldable_items/weapons/exp09/bow/longbow_fantasy_obsidian', 1190), + (20748, 19546, 'accessories/wieldable_items/weapons/exp09/bow/longbow_fantasy_glacial', 1190), + (20749, 19547, 'accessories/wieldable_items/weapons/exp09/bow/longbow_fantasy_fire', 1190), + (20750, 19548, 'accessories/wieldable_items/weapons/exp09/bow/longbow_fantasy_rediron', 1190), + (20751, 19549, 'accessories/wieldable_items/weapons/exp09/bow/longbow_fantasy_greengold', 1190), + (20752, 19550, 'accessories/wieldable_items/weapons/exp09/bow/longbow_fantasy_bluebronze', 1190), + (20753, 19551, 'accessories/wieldable_items/weapons/exp09/1h_pierce/dagger_hunter_fantasy_stone', 1190), + (20754, 19552, 'accessories/wieldable_items/weapons/exp09/1h_pierce/dagger_hunter_fantasy_spectral', 1190), + (20755, 19553, 'accessories/wieldable_items/weapons/exp09/1h_pierce/dagger_hunter_fantasy_rediron', 1190), + (20756, 19554, 'accessories/wieldable_items/weapons/exp09/1h_pierce/dagger_hunter_fantasy_obsidian', 1190), + (20757, 19555, 'accessories/wieldable_items/weapons/exp09/1h_pierce/dagger_hunter_fantasy_greengold', 1190), + (20758, 19556, 'accessories/wieldable_items/weapons/exp09/1h_pierce/dagger_hunter_fantasy_fire', 1190), + (20759, 19557, 'accessories/wieldable_items/weapons/exp09/1h_pierce/dagger_hunter_fantasy_bluebronze', 1190), + (20760, 19558, '_exp09/characters/monsters/displacer_beast/displacer_beast', 1190), + (20761, 19559, '_exp08/characters/tool_users/chitari/chitari_male_heavy03', 1190), + (20762, 19560, '_exp08/characters/tool_users/chitari/chitari_male_light03', 1190), + (20763, 19561, '_exp08/characters/tool_users/chitari/chitari_male_medium01_base', 1190), + (20764, 19562, '_exp08/characters/tool_users/chitari/chitari_male_medium01_dark', 1190), + (20765, 19563, '_exp08/characters/tool_users/chitari/chitari_male_medium02_albino', 1190), + (20766, 19564, '_exp08/characters/tool_users/chitari/chitari_male_medium02_dark', 1190), + (20767, 19565, 'accessories/wieldable_items/weapons/exp09/1h_crush/wand_fantasy_greengold', 1190), + (20768, 19566, 'accessories/wieldable_items/weapons/exp09/1h_crush/hammer_fantasy_spectral', 1190), + (20769, 19567, 'accessories/wieldable_items/weapons/exp09/1h_crush/hammer_fantasy_stone', 1190), + (20770, 19568, 'accessories/wieldable_items/weapons/exp09/1h_crush/hammer_fantasy_glacial', 1190), + (20771, 19569, 'accessories/wieldable_items/weapons/exp09/1h_crush/hammer_fantasy_flame', 1190), + (20772, 19570, 'accessories/wieldable_items/weapons/exp09/1h_crush/hammer_fantasy_obsidian', 1190), + (20773, 19571, '_exp09/characters/tool_users/ethenere_npcs/woodelf_female_ethenere', 1190), + (20774, 19572, '_exp09/characters/tool_users/ethenere_npcs/woodelf_male_ethenere', 1190), + (20775, 19573, '_exp09/objects/exp09_rgn_plains_of_obol/po_long_leaf_plant01_dpo_02', 1190), + (20776, 19574, '_exp09/characters/tool_users/were/were_black_feral', 1190), + (20777, 19575, '_exp09/characters/tool_users/were/were_black_scout', 1190), + (20778, 19576, '_exp09/characters/tool_users/were/were_fox_base', 1190), + (20779, 19577, '_exp09/characters/tool_users/were/were_fox_heavy', 1190), + (20780, 19578, '_exp09/characters/tool_users/were/were_fox_scout', 1190), + (20781, 19579, '_exp09/characters/tool_users/were/were_white_base', 1190), + (20782, 19580, '_exp09/characters/tool_users/were/were_white_heavy', 1190), + (20783, 19581, '_exp09/characters/tool_users/were/were_white_mage', 1190), + (20784, 19582, '_exp09/characters/tool_users/were/were_wild_feral', 1190), + (20785, 19583, '_exp09/characters/tool_users/were/were_wild_heavy', 1190), + (20786, 19584, '_exp09/characters/tool_users/were/were_wild_mage', 1190), + (20787, 19585, '_exp09/characters/monsters/elementalair_ethernere/elementalair_ethernere_red', 1190), + (20788, 19586, 'accessories/wearable_items/_exp09/armband_stationcash/armband_both', 1190), + (20789, 19587, 'staticobjects/soe_wallet/boats/boat01_farseas', 1190), + (20790, 19588, 'staticobjects/soe_wallet/boats/boat01_freeport', 1190), + (20791, 19589, 'staticobjects/soe_wallet/boats/boat01_magic', 1190), + (20792, 19590, 'staticobjects/soe_wallet/boats/boat01_nature', 1190), + (20793, 19591, 'staticobjects/soe_wallet/boats/boat01_nektulos', 1190), + (20794, 19592, 'staticobjects/soe_wallet/boats/boat01_orcish', 1190), + (20795, 19593, 'staticobjects/soe_wallet/boats/boat01_qeynos', 1190), + (20796, 19594, 'creatures/monsters/gazer_redeye', 1190), + (20797, 19595, 'creatures/monsters/evileye_red', 1190), + (20798, 19596, 'accessories/wearable_items/_exp09/formal_wear/chest', 1190), + (20799, 19597, 'accessories/wearable_items/_exp09/formal_wear/chest_combined', 1190), + (20800, 19598, 'accessories/wearable_items/_exp09/formal_wear/feet', 1190), + (20801, 19599, 'accessories/wearable_items/_exp09/formal_wear/hands', 1190), + (20802, 19600, 'accessories/wearable_items/_exp09/formal_wear/legs', 1190), + (20803, 19601, 'accessories/wearable_items/_exp09/formal_wear/shoulders', 1190), + (20804, 19602, 'accessories/wearable_items/_exp09/formal_wear/skirt', 1190), + (20805, 19603, 'accessories/wearable_items/_exp09/formal_wear_blue/chest', 1190), + (20806, 19604, 'accessories/wearable_items/_exp09/formal_wear_blue/chest_combined', 1190), + (20807, 19605, 'accessories/wearable_items/_exp09/formal_wear_blue/feet', 1190), + (20808, 19606, 'accessories/wearable_items/_exp09/formal_wear_blue/hands', 1190), + (20809, 19607, 'accessories/wearable_items/_exp09/formal_wear_blue/legs', 1190), + (20810, 19608, 'accessories/wearable_items/_exp09/formal_wear_blue/shoulders', 1190), + (20811, 19609, 'accessories/wearable_items/_exp09/formal_wear_blue/skirt', 1190), + (20812, 19610, 'accessories/wearable_items/_exp09/formal_wear_dark/chest', 1190), + (20813, 19611, 'accessories/wearable_items/_exp09/formal_wear_dark/chest_combined', 1190), + (20814, 19612, 'accessories/wearable_items/_exp09/formal_wear_dark/feet', 1190), + (20815, 19613, 'accessories/wearable_items/_exp09/formal_wear_dark/hands', 1190), + (20816, 19614, 'accessories/wearable_items/_exp09/formal_wear_dark/legs', 1190), + (20817, 19615, 'accessories/wearable_items/_exp09/formal_wear_dark/shoulders', 1190), + (20818, 19616, 'accessories/wearable_items/_exp09/formal_wear_dark/skirt', 1190), + (20819, 19617, 'accessories/wearable_items/_exp09/formal_wear_green/chest _combined', 1190), + (20820, 19618, 'accessories/wearable_items/_exp09/formal_wear_green/chest', 1190), + (20821, 19619, 'accessories/wearable_items/_exp09/formal_wear_green/feet', 1190), + (20822, 19620, 'accessories/wearable_items/_exp09/formal_wear_green/hands', 1190), + (20823, 19621, 'accessories/wearable_items/_exp09/formal_wear_green/legs', 1190), + (20824, 19622, 'accessories/wearable_items/_exp09/formal_wear_green/shoulders', 1190), + (20825, 19623, 'accessories/wearable_items/_exp09/formal_wear_green/skirt', 1190), + (20826, 19624, 'accessories/wearable_items/_exp09/formal_wear_red/chest', 1190), + (20827, 19625, 'accessories/wearable_items/_exp09/formal_wear_red/chest_combined', 1190), + (20828, 19626, 'accessories/wearable_items/_exp09/formal_wear_red/feet', 1190), + (20829, 19627, 'accessories/wearable_items/_exp09/formal_wear_red/hands', 1190), + (20830, 19628, 'accessories/wearable_items/_exp09/formal_wear_red/legs', 1190), + (20831, 19629, 'accessories/wearable_items/_exp09/formal_wear_red/shoulders', 1190), + (20832, 19630, 'accessories/wearable_items/_exp09/formal_wear_red/skirt', 1190), + (20833, 19631, '_exp08/characters/tool_users/chitari/chitari_bonelord', 1190), + (20834, 19632, '_exp09/objects/exp09_dun_temple_of_faceless/cazic_door_blocker', 1190), + (20835, 19633, '_exp09/characters/tool_users/lizardmen_2012/lizardman_ethenere', 1190), + (20836, 19634, '_exp09/characters/tool_users/lizardmen_2012/lizardman_fear', 1190), + (20837, 19635, 'staticobjects/liveevent/halloween/dpo_halloween_poison_bottle', 1190), + (20838, 19636, 'accessories/wearable_items/_exp09/heritage_woodelf/leather/snapons/armband_left', 1190), + (20839, 19637, 'accessories/wearable_items/_exp09/heritage_woodelf/leather/snapons/armband_right', 1190), + (20840, 19638, 'accessories/wearable_items/_exp09/heritage_woodelf/leather/snapons/headband', 1190), + (20841, 19639, 'accessories/wearable_items/_exp09/heritage_woodelf/leather/snapons/shinguard_left', 1190), + (20842, 19640, 'accessories/wearable_items/_exp09/heritage_woodelf/leather/snapons/shinguard_right', 1190), + (20843, 19641, 'accessories/wearable_items/_exp09/heritage_woodelf/leather/legs_epic', 1190), + (20844, 19642, 'accessories/wearable_items/_exp09/heritage_woodelf/leather/shoulders_armbands', 1190), + (20845, 19643, 'accessories/wieldable_items/weapons/exp07/wand/wand_flame', 1190), + (20846, 19644, 'accessories/wearable_items/_exp09/formal_wear_blackwhite/chest', 1190), + (20847, 19645, 'accessories/wearable_items/_exp09/formal_wear_blackwhite/chest_combined', 1190), + (20848, 19646, 'accessories/wearable_items/_exp09/formal_wear_blackwhite/feet', 1190), + (20849, 19647, 'accessories/wearable_items/_exp09/formal_wear_blackwhite/hands', 1190), + (20850, 19648, 'accessories/wearable_items/_exp09/formal_wear_blackwhite/legs', 1190), + (20851, 19649, 'accessories/wearable_items/_exp09/formal_wear_blackwhite/shoulders', 1190), + (20852, 19650, 'accessories/wearable_items/_exp09/formal_wear_blackwhite/skirt', 1190), + (20853, 19651, 'creatures/test/goblin_firiona_antonia', 1190), + (20854, 19652, '_exp09/characters/monsters/ape_fear_touched/_ape_fear_touched', 1190), + (20855, 19653, '_exp09/characters/monsters/ape_fear_touched/_ape_fear_touched_b', 1190), + (20856, 19654, 'accessories/wearable_items/profesion_hats/tiara_jeweled/tiara_crystal', 1190), + (20857, 19655, 'accessories/wearable_items/profesion_hats/tiara_jeweled/tiara_dragonkin', 1190), + (20858, 19656, 'accessories/wearable_items/profesion_hats/tiara_jeweled/tiara_flame', 1190), + (20859, 19657, 'accessories/wearable_items/profesion_hats/tiara_jeweled/tiara_flamedrop', 1190), + (20860, 19658, 'accessories/wearable_items/profesion_hats/tiara_jeweled/tiara_greenember', 1190), + (20861, 19659, 'accessories/wearable_items/profesion_hats/tiara_jeweled/tiara_jewelled', 1190), + (20862, 19660, 'accessories/wearable_items/profesion_hats/tiara_jeweled/tiara_lavender', 1190), + (20863, 19661, 'accessories/wearable_items/profesion_hats/tiara_jeweled/tiara_spectral', 1190), + (20864, 19662, 'accessories/wearable_items/profesion_hats/tiara_jeweled/tiara_steam', 1190), + (20865, 19663, 'accessories/wearable_items/profesion_hats/tiara_jeweled/tiara_stone', 1190), + (20866, 19664, '_exp09/characters/tool_users/lizardmen_2012/lizardman_scout', 1190), + (20867, 19665, '_exp09/characters/tool_users/lizardmen_2012/lizardman_shaman', 1190), + (20868, 19666, '_exp09/objects/exp09_rgn_plains_of_obol/spirit_totem_dpo_01', 1190), + (20869, 19667, 'accessories/wearable_items/profesion_hats/tiara_veiled/tiara_veiled', 1190), + (20870, 19668, 'accessories/wieldable_items/weapons/talisman/doll/lizardman_frog', 1190), + (20871, 19669, 'accessories/wieldable_items/weapons/talisman/doll/lizardman_frog_swivel', 1190), + (20872, 19670, '_exp09/characters/tool_users/lizardmen_2012/lizardman_fear_scout', 1190), + (20873, 19671, '_exp09/characters/tool_users/lizardmen_2012/lizardman_fear_shaman', 1190), + (20874, 19672, 'accessories/wieldable_items/weapons/talisman/doll/lizardman_frog_fear', 1190), + (20875, 19673, 'accessories/wieldable_items/weapons/talisman/doll/lizardman_frog_fear_swivel', 1190), + (20876, 19674, '_exp08/characters/tool_users/bog_wraith/banshee_sleeper_drinal_castle', 1190), + (20877, 19675, 'accessories/wieldable_items/weapons/exp09/staff/bostaff_cazic', 1190), + (20878, 19676, 'accessories/wieldable_items/weapons/exp09/staff/staff_cazic', 1190), + (20879, 19677, '_exp09/objects/exp09_rgn_plains_of_obol/water_plane_quest_dpo', 1190), + (20880, 19678, 'staticobjects/halloween/dpo_pitchfork_candy_cordon', 1190), + (20881, 19679, 'staticobjects/halloween/dpo_poker_candy_cordon', 1190), + (20882, 19680, 'creatures/mounts/ethernere_cloud', 1190), + (20883, 19681, 'accessories/wearable_items/profesion_hats/skull_hood/head', 1190), + (20884, 19682, '_exp09/objects/exp09_rgn_plains_of_obol/dragon_bone_jaw01_dpo', 1190), + (20885, 19683, 'creatures/mounts/wyvern_mount/wyvern_armored_black', 1190), + (20886, 19684, 'accessories/wieldable_items/shields/exp09/exp09_shield_round_evilmetal', 1190), + (20887, 19685, '_exp09/characters/tool_users/ogre_ogguk/ogre_male_ogguk_fur', 1190), + (20888, 19686, '_exp09/characters/tool_users/ogre_ogguk/ogre_male_ogguk_pants', 1190), + (20889, 19687, '_exp09/characters/tool_users/ogre_ogguk/ogre_male_ogguk_scout', 1190), + (20890, 19688, 'creatures/tu/lizardkin_base', 1190), + (20891, 19689, 'staticobjects/rocks/gf_rock_dirt_cave_small02', 1190), + (20892, 19690, 'staticobjects/weapons/dpo_tinkered_wrench_tin', 1190), + (20893, 19691, 'accessories/wieldable_items/shields/exp09/kite_shield_sc', 1190), + (20894, 19692, 'accessories/wearable_items/_exp09/elder_age/chain/chest', 1190), + (20895, 19693, 'accessories/wearable_items/_exp09/elder_age/chain/feet', 1190), + (20896, 19694, 'accessories/wearable_items/_exp09/elder_age/chain/forearms', 1190), + (20897, 19695, 'accessories/wearable_items/_exp09/elder_age/chain/hands', 1190), + (20898, 19696, 'accessories/wearable_items/_exp09/elder_age/chain/head', 1190), + (20899, 19697, 'accessories/wearable_items/_exp09/elder_age/chain/legs', 1190), + (20900, 19698, 'accessories/wearable_items/_exp09/elder_age/chain/shoulders', 1190), + (20901, 19699, 'accessories/wearable_items/_exp09/elder_age/chain/shoulders_epic', 1190), + (20902, 19700, 'accessories/wearable_items/_exp09/elder_age/leather/chest', 1190), + (20903, 19701, 'accessories/wearable_items/_exp09/elder_age/leather/feet', 1190), + (20904, 19702, 'accessories/wearable_items/_exp09/elder_age/leather/forearms', 1190), + (20905, 19703, 'accessories/wearable_items/_exp09/elder_age/leather/hands', 1190), + (20906, 19704, 'accessories/wearable_items/_exp09/elder_age/leather/head', 1190), + (20907, 19705, 'accessories/wearable_items/_exp09/elder_age/leather/legs', 1190), + (20908, 19706, 'accessories/wearable_items/_exp09/elder_age/leather/legs_noskirt', 1190), + (20909, 19707, 'accessories/wearable_items/_exp09/elder_age/leather/shoulders', 1190), + (20910, 19708, 'accessories/wearable_items/_exp09/elder_age/leather/shoulders_epic', 1190), + (20911, 19709, 'accessories/wearable_items/_exp09/elder_age/leather/skirt', 1190), + (20912, 19710, 'accessories/wearable_items/_exp09/elder_age/robe/chest', 1190), + (20913, 19711, 'accessories/wearable_items/_exp09/elder_age/robe/feet', 1190), + (20914, 19712, 'accessories/wearable_items/_exp09/elder_age/robe/hands', 1190), + (20915, 19713, 'accessories/wearable_items/_exp09/elder_age/robe/head_collar', 1190), + (20916, 19714, 'accessories/wearable_items/_exp09/elder_age/robe/head_evil_conjurer', 1190), + (20917, 19715, 'accessories/wearable_items/_exp09/elder_age/robe/pants', 1190), + (20918, 19716, 'accessories/wearable_items/_exp09/elder_age/robe/skirt', 1190), + (20919, 19717, 'accessories/wearable_items/_exp09/elder_age/snapons/bracer_left', 1190), + (20920, 19718, 'accessories/wearable_items/_exp09/elder_age/snapons/bracer_right', 1190), + (20921, 19719, 'accessories/wearable_items/_exp09/elder_age/snapons/pauldron_chain_left', 1190), + (20922, 19720, 'accessories/wearable_items/_exp09/elder_age/snapons/pauldron_chain_right', 1190), + (20923, 19721, 'accessories/wearable_items/_exp09/elder_age/snapons/pauldron_heavy_left', 1190), + (20924, 19722, 'accessories/wearable_items/_exp09/elder_age/snapons/pauldron_heavy_right', 1190), + (20925, 19723, 'accessories/wearable_items/_exp09/elder_age/snapons/pauldron_light_left', 1190), + (20926, 19724, 'accessories/wearable_items/_exp09/elder_age/snapons/pauldron_light_right', 1190), + (20927, 19725, 'accessories/wearable_items/_exp09/elder_age/snapons/shinguard_chain_left', 1190), + (20928, 19726, 'accessories/wearable_items/_exp09/elder_age/snapons/shinguard_chain_right', 1190), + (20929, 19727, 'accessories/wearable_items/_exp09/elder_age/snapons/shinguard_left', 1190), + (20930, 19728, 'accessories/wearable_items/_exp09/elder_age/snapons/shinguard_right', 1190), + (20931, 19729, 'accessories/wearable_items/_exp09/elder_age/valkeryie_gi/chest', 1190), + (20932, 19730, 'accessories/wearable_items/_exp09/elder_age/valkeryie_gi/hands', 1190), + (20933, 19731, 'accessories/wearable_items/_exp09/elder_age/valkeryie_gi/legs', 1190), + (20934, 19732, 'accessories/wearable_items/_exp09/elder_age/vanguard/chest', 1190), + (20935, 19733, 'accessories/wearable_items/_exp09/elder_age/vanguard/feet', 1190), + (20936, 19734, 'accessories/wearable_items/_exp09/elder_age/vanguard/forearms', 1190), + (20937, 19735, 'accessories/wearable_items/_exp09/elder_age/vanguard/hands', 1190), + (20938, 19736, 'accessories/wearable_items/_exp09/elder_age/vanguard/hands_epic', 1190), + (20939, 19737, 'accessories/wearable_items/_exp09/elder_age/vanguard/head', 1190), + (20940, 19738, 'accessories/wearable_items/_exp09/elder_age/vanguard/left', 1190), + (20941, 19739, 'accessories/wearable_items/_exp09/elder_age/vanguard/legs', 1190), + (20942, 19740, 'accessories/wearable_items/_exp09/elder_age/vanguard/legs_epic', 1190), + (20943, 19741, 'accessories/wearable_items/_exp09/elder_age/vanguard/legs_noskirt', 1190), + (20944, 19742, 'accessories/wearable_items/_exp09/elder_age/vanguard/right', 1190), + (20945, 19743, 'accessories/wearable_items/_exp09/elder_age/vanguard/shoulders', 1190), + (20946, 19744, 'accessories/wearable_items/_exp09/elder_age/vanguard/shoulders_epic', 1190), + (20947, 19745, 'accessories/wearable_items/_exp09/elder_age/vanguard/shoulders_nopauldrons', 1190), + (20948, 19746, 'accessories/wearable_items/_exp09/elder_age/vanguard/skirt', 1190), + (20949, 19747, 'accessories/wearable_items/_exp09/ethernere_armors/chain_green/chest', 1190), + (20950, 19748, 'accessories/wearable_items/_exp09/ethernere_armors/chain_green/feet', 1190), + (20951, 19749, 'accessories/wearable_items/_exp09/ethernere_armors/chain_green/forearms', 1190), + (20952, 19750, 'accessories/wearable_items/_exp09/ethernere_armors/chain_green/hands', 1190), + (20953, 19751, 'accessories/wearable_items/_exp09/ethernere_armors/chain_green/head', 1190), + (20954, 19752, 'accessories/wearable_items/_exp09/ethernere_armors/chain_green/legs', 1190), + (20955, 19753, 'accessories/wearable_items/_exp09/ethernere_armors/chain_green/shoulders', 1190), + (20956, 19754, 'accessories/wearable_items/_exp09/ethernere_armors/chain_green/shoulders_epic', 1190), + (20957, 19755, 'accessories/wearable_items/_exp09/ethernere_armors/chain_red/chest', 1190), + (20958, 19756, 'accessories/wearable_items/_exp09/ethernere_armors/chain_red/feet', 1190), + (20959, 19757, 'accessories/wearable_items/_exp09/ethernere_armors/chain_red/forearms', 1190), + (20960, 19758, 'accessories/wearable_items/_exp09/ethernere_armors/chain_red/hands', 1190), + (20961, 19759, 'accessories/wearable_items/_exp09/ethernere_armors/chain_red/head', 1190), + (20962, 19760, 'accessories/wearable_items/_exp09/ethernere_armors/chain_red/legs', 1190), + (20963, 19761, 'accessories/wearable_items/_exp09/ethernere_armors/chain_red/shoulders', 1190), + (20964, 19762, 'accessories/wearable_items/_exp09/ethernere_armors/chain_red/shoulders_epic', 1190), + (20965, 19763, 'accessories/wearable_items/_exp09/ethernere_armors/leather_green/chest', 1190), + (20966, 19764, 'accessories/wearable_items/_exp09/ethernere_armors/leather_green/feet', 1190), + (20967, 19765, 'accessories/wearable_items/_exp09/ethernere_armors/leather_green/forearms', 1190), + (20968, 19766, 'accessories/wearable_items/_exp09/ethernere_armors/leather_green/hands', 1190), + (20969, 19767, 'accessories/wearable_items/_exp09/ethernere_armors/leather_green/head', 1190), + (20970, 19768, 'accessories/wearable_items/_exp09/ethernere_armors/leather_green/legs', 1190), + (20971, 19769, 'accessories/wearable_items/_exp09/ethernere_armors/leather_green/legs_noskirt', 1190), + (20972, 19770, 'accessories/wearable_items/_exp09/ethernere_armors/leather_green/shoulders', 1190), + (20973, 19771, 'accessories/wearable_items/_exp09/ethernere_armors/leather_green/shoulders_epic', 1190), + (20974, 19772, 'accessories/wearable_items/_exp09/ethernere_armors/leather_green/skirt', 1190), + (20975, 19773, 'accessories/wearable_items/_exp09/ethernere_armors/leather_red/chest', 1190), + (20976, 19774, 'accessories/wearable_items/_exp09/ethernere_armors/leather_red/feet', 1190), + (20977, 19775, 'accessories/wearable_items/_exp09/ethernere_armors/leather_red/forearms', 1190), + (20978, 19776, 'accessories/wearable_items/_exp09/ethernere_armors/leather_red/hands', 1190), + (20979, 19777, 'accessories/wearable_items/_exp09/ethernere_armors/leather_red/head', 1190), + (20980, 19778, 'accessories/wearable_items/_exp09/ethernere_armors/leather_red/legs', 1190), + (20981, 19779, 'accessories/wearable_items/_exp09/ethernere_armors/leather_red/legs_noskirt', 1190), + (20982, 19780, 'accessories/wearable_items/_exp09/ethernere_armors/leather_red/shoulders', 1190), + (20983, 19781, 'accessories/wearable_items/_exp09/ethernere_armors/leather_red/shoulders_epic', 1190), + (20984, 19782, 'accessories/wearable_items/_exp09/ethernere_armors/leather_red/skirt', 1190), + (20985, 19783, 'accessories/wearable_items/_exp09/ethernere_armors/robe_green/chest', 1190), + (20986, 19784, 'accessories/wearable_items/_exp09/ethernere_armors/robe_green/chest_epic', 1190), + (20987, 19785, 'accessories/wearable_items/_exp09/ethernere_armors/robe_green/feet', 1190), + (20988, 19786, 'accessories/wearable_items/_exp09/ethernere_armors/robe_green/hands', 1190), + (20989, 19787, 'accessories/wearable_items/_exp09/ethernere_armors/robe_green/head', 1190), + (20990, 19788, 'accessories/wearable_items/_exp09/ethernere_armors/robe_green/head_collar', 1190), + (20991, 19789, 'accessories/wearable_items/_exp09/ethernere_armors/robe_green/pants', 1190), + (20992, 19790, 'accessories/wearable_items/_exp09/ethernere_armors/robe_green/skirt', 1190), + (20993, 19791, 'accessories/wearable_items/_exp09/ethernere_armors/robe_red/chest', 1190), + (20994, 19792, 'accessories/wearable_items/_exp09/ethernere_armors/robe_red/chest_epic', 1190), + (20995, 19793, 'accessories/wearable_items/_exp09/ethernere_armors/robe_red/feet', 1190), + (20996, 19794, 'accessories/wearable_items/_exp09/ethernere_armors/robe_red/hands', 1190), + (20997, 19795, 'accessories/wearable_items/_exp09/ethernere_armors/robe_red/head', 1190), + (20998, 19796, 'accessories/wearable_items/_exp09/ethernere_armors/robe_red/head_collar', 1190), + (20999, 19797, 'accessories/wearable_items/_exp09/ethernere_armors/robe_red/pants', 1190), + (21000, 19798, 'accessories/wearable_items/_exp09/ethernere_armors/robe_red/skirt', 1190), + (21001, 19799, 'accessories/wearable_items/_exp09/ethernere_armors/snapons_pauldrons/ethernere_heavy_pauldron2_red_right', 1190), + (21002, 19800, 'accessories/wearable_items/_exp09/ethernere_armors/snapons_pauldrons/ethernere_heavy_pauldron2_red_left', 1190), + (21003, 19801, 'accessories/wearable_items/_exp09/ethernere_armors/snapons_pauldrons/ethernere_heavy_pauldron2_green_right', 1190), + (21004, 19802, 'accessories/wearable_items/_exp09/ethernere_armors/snapons_pauldrons/ethernere_heavy_pauldron2_green_left', 1190), + (21005, 19803, 'accessories/wearable_items/_exp09/ethernere_armors/snapons_pauldrons/ethernere_shinguard_red_right', 1190), + (21006, 19804, 'accessories/wearable_items/_exp09/ethernere_armors/snapons_pauldrons/ethernere_shinguard_green_right', 1190), + (21007, 19805, 'accessories/wearable_items/_exp09/ethernere_armors/snapons_pauldrons/ethernere_shinguard_red_left', 1190), + (21008, 19806, 'accessories/wearable_items/_exp09/ethernere_armors/snapons_pauldrons/ethernere_shinguard_green_left', 1190), + (21009, 19807, 'accessories/wearable_items/_exp09/ethernere_armors/snapons_pauldrons/ethernere_light_pauldron_red_right', 1190), + (21010, 19808, 'accessories/wearable_items/_exp09/ethernere_armors/snapons_pauldrons/ethernere_light_pauldron_green_right', 1190), + (21011, 19809, 'accessories/wearable_items/_exp09/ethernere_armors/snapons_pauldrons/ethernere_light_pauldron_red_left', 1190), + (21012, 19810, 'accessories/wearable_items/_exp09/ethernere_armors/snapons_pauldrons/ethernere_light_pauldron_green_left', 1190), + (21013, 19811, 'accessories/wearable_items/_exp09/ethernere_armors/snapons_pauldrons/ethernere_heavy_pauldron_red_right', 1190), + (21014, 19812, 'accessories/wearable_items/_exp09/ethernere_armors/snapons_pauldrons/ethernere_heavy_pauldron_green_right', 1190), + (21015, 19813, 'accessories/wearable_items/_exp09/ethernere_armors/snapons_pauldrons/ethernere_heavy_pauldron_red_left', 1190), + (21016, 19814, 'accessories/wearable_items/_exp09/ethernere_armors/snapons_pauldrons/ethernere_heavy_pauldron_green_left', 1190), + (21017, 19815, 'accessories/wearable_items/_exp09/ethernere_armors/snapons_pauldrons/ethernere_heavy_pauldron_chain_red_right', 1190), + (21018, 19816, 'accessories/wearable_items/_exp09/ethernere_armors/snapons_pauldrons/ethernere_heavy_pauldron_chain_green_right', 1190), + (21019, 19817, 'accessories/wearable_items/_exp09/ethernere_armors/snapons_pauldrons/ethernere_heavy_pauldron_chain_red_left', 1190), + (21020, 19818, 'accessories/wearable_items/_exp09/ethernere_armors/snapons_pauldrons/ethernere_heavy_pauldron_chain_green_left', 1190), + (21021, 19819, 'accessories/wearable_items/_exp09/ethernere_armors/snapons_pauldrons/ethernere_light_pauldron_robe_red_right', 1190), + (21022, 19820, 'accessories/wearable_items/_exp09/ethernere_armors/snapons_pauldrons/ethernere_light_pauldron_robe_green_right', 1190), + (21023, 19821, 'accessories/wearable_items/_exp09/ethernere_armors/snapons_pauldrons/ethernere_light_pauldron_robe_red_left', 1190), + (21024, 19822, 'accessories/wearable_items/_exp09/ethernere_armors/snapons_pauldrons/ethernere_light_pauldron_robe_green_left', 1190), + (21025, 19823, 'accessories/wearable_items/_exp09/ethernere_armors/snapons_pauldrons/ethernere_bracer_red_right', 1190), + (21026, 19824, 'accessories/wearable_items/_exp09/ethernere_armors/snapons_pauldrons/ethernere_bracer_green_right', 1190), + (21027, 19825, 'accessories/wearable_items/_exp09/ethernere_armors/snapons_pauldrons/ethernere_bracer_red_left', 1190), + (21028, 19826, 'accessories/wearable_items/_exp09/ethernere_armors/snapons_pauldrons/ethernere_bracer_green_left', 1190), + (21029, 19827, 'accessories/wearable_items/_exp09/ethernere_armors/vanguard_green/chest', 1190), + (21030, 19828, 'accessories/wearable_items/_exp09/ethernere_armors/vanguard_green/feet', 1190), + (21031, 19829, 'accessories/wearable_items/_exp09/ethernere_armors/vanguard_green/forearms', 1190), + (21032, 19830, 'accessories/wearable_items/_exp09/ethernere_armors/vanguard_green/hands', 1190), + (21033, 19831, 'accessories/wearable_items/_exp09/ethernere_armors/vanguard_green/hands_epic', 1190), + (21034, 19832, 'accessories/wearable_items/_exp09/ethernere_armors/vanguard_green/head', 1190), + (21035, 19833, 'accessories/wearable_items/_exp09/ethernere_armors/vanguard_green/left', 1190), + (21036, 19834, 'accessories/wearable_items/_exp09/ethernere_armors/vanguard_green/legs', 1190), + (21037, 19835, 'accessories/wearable_items/_exp09/ethernere_armors/vanguard_green/legs_noskirt', 1190), + (21038, 19836, 'accessories/wearable_items/_exp09/ethernere_armors/vanguard_green/right', 1190), + (21039, 19837, 'accessories/wearable_items/_exp09/ethernere_armors/vanguard_green/shoulders', 1190), + (21040, 19838, 'accessories/wearable_items/_exp09/ethernere_armors/vanguard_green/shoulders_epic', 1190), + (21041, 19839, 'accessories/wearable_items/_exp09/ethernere_armors/vanguard_green/shoulders_nopauldrons', 1190), + (21042, 19840, 'accessories/wearable_items/_exp09/ethernere_armors/vanguard_green/skirt', 1190), + (21043, 19841, 'accessories/wearable_items/_exp09/ethernere_armors/vanguard_red/chest', 1190), + (21044, 19842, 'accessories/wearable_items/_exp09/ethernere_armors/vanguard_red/feet', 1190), + (21045, 19843, 'accessories/wearable_items/_exp09/ethernere_armors/vanguard_red/forearms', 1190), + (21046, 19844, 'accessories/wearable_items/_exp09/ethernere_armors/vanguard_red/hands', 1190), + (21047, 19845, 'accessories/wearable_items/_exp09/ethernere_armors/vanguard_red/hands_epic', 1190), + (21048, 19846, 'accessories/wearable_items/_exp09/ethernere_armors/vanguard_red/head', 1190), + (21049, 19847, 'accessories/wearable_items/_exp09/ethernere_armors/vanguard_red/left', 1190), + (21050, 19848, 'accessories/wearable_items/_exp09/ethernere_armors/vanguard_red/legs', 1190), + (21051, 19849, 'accessories/wearable_items/_exp09/ethernere_armors/vanguard_red/legs_noskirt', 1190), + (21052, 19850, 'accessories/wearable_items/_exp09/ethernere_armors/vanguard_red/right', 1190), + (21053, 19851, 'accessories/wearable_items/_exp09/ethernere_armors/vanguard_red/shoulders', 1190), + (21054, 19852, 'accessories/wearable_items/_exp09/ethernere_armors/vanguard_red/shoulders_epic', 1190), + (21055, 19853, 'accessories/wearable_items/_exp09/ethernere_armors/vanguard_red/shoulders_nopauldrons', 1190), + (21056, 19854, 'accessories/wearable_items/_exp09/ethernere_armors/vanguard_red/skirt', 1190), + (21057, 19855, 'accessories/wearable_items/cloak/exp09/cloak_ethernere_short_red', 1190), + (21058, 19856, 'accessories/wearable_items/cloak/exp09/cloak_ethernere_long_red', 1190), + (21059, 19857, 'accessories/wearable_items/cloak/exp09/cloak_ethernere_short_green', 1190), + (21060, 19858, 'accessories/wearable_items/cloak/exp09/cloak_ethernere_long_green', 1190), + (21061, 19859, 'staticobjects/chests/dpo_mship_chest01', 1190), + (21062, 19860, 'staticobjects/chests/dpo_mship_chest02', 1190), + (21063, 19861, 'staticobjects/crates/dpo_mship_crate01', 1190), + (21064, 19862, 'staticobjects/crates/dpo_mship_crate02', 1190), + (21065, 19863, '_exp09/objects/exp09_rgn_plains_of_obol/po_bush01_dpo', 1190), + (21066, 19864, '_exp09/objects/exp09_rgn_plains_of_obol/po_plant02_dpo', 1190), + (21067, 19865, 'accessories/wearable_items/profesion_hats/crown_antons/crown_antons', 1190), + (21068, 19866, 'accessories/wearable_items/_exp09/elder_age/magus_gi/chest', 1190), + (21069, 19867, 'accessories/wearable_items/_exp09/elder_age/magus_gi/feet', 1190), + (21070, 19868, 'accessories/wearable_items/_exp09/elder_age/magus_gi/legs', 1190), + (21071, 19869, 'accessories/wearable_items/_exp09/elder_age/magus_gi/shoulders', 1190), + (21072, 19870, 'accessories/wearable_items/cloak/exp09/cloak_ethernere_short_firiona', 1190), + (21073, 19871, 'accessories/wearable_items/cloak/exp09/cloak_ethernere_long_firiona', 1190), + (21074, 19872, 'staticobjects/soe_wallet/blossom_bdrm_bed_sleigh_set01', 1190), + (21075, 19873, 'staticobjects/soe_wallet/blossom_living_sofa_large_set02', 1190), + (21076, 19874, 'staticobjects/soe_wallet/blossom_living_sofa_large_w_pillows_set02', 1190), + (21077, 19875, 'staticobjects/soe_wallet/blossom_living_sofa_small_set02', 1190), + (21078, 19876, 'staticobjects/soe_wallet/blossom_dining_chair02_set02', 1190), + (21079, 19877, 'staticobjects/soe_wallet/blossom_living_sofa_small_w_pillows_set02', 1190), + (21080, 19878, 'staticobjects/soe_wallet/blossom_office_chair01_set02', 1190), + (21081, 19879, 'staticobjects/soe_wallet/blossom_vanity_stool01_set02', 1190), + (21082, 19880, 'staticobjects/soe_wallet/blossom_dining_bench_set01', 1190), + (21083, 19881, 'staticobjects/soe_wallet/blossom_dining_chair_set01', 1190), + (21084, 19882, 'staticobjects/soe_wallet/red_bdrm_bed_sleigh_set01', 1190), + (21085, 19883, 'staticobjects/soe_wallet/red_dining_bench_set01', 1190), + (21086, 19884, 'staticobjects/soe_wallet/red_dining_chair_set01', 1190), + (21087, 19885, 'staticobjects/soe_wallet/red_living_sofa_small_set02', 1190), + (21088, 19886, 'staticobjects/soe_wallet/red_living_sofa_large_w_pillows_set02', 1190), + (21089, 19887, 'staticobjects/soe_wallet/red_living_sofa_small_w_pillows_set02', 1190), + (21090, 19888, 'staticobjects/soe_wallet/red_dining_chair02_set02', 1190), + (21091, 19889, 'staticobjects/soe_wallet/red_living_sofa_large_set02', 1190), + (21092, 19890, 'staticobjects/soe_wallet/red_vanity_stool01_set02', 1190), + (21093, 19891, 'staticobjects/soe_wallet/red_office_chair01_set02', 1190), + (21094, 19892, '_exp09/objects/drinals/drinals_tower_collision', 1190), + (21095, 19893, '_exp09/characters/tool_users/ogre_ogguk/ogre_female_ogguk_fur', 1190), + (21096, 19894, '_exp09/characters/tool_users/ogre_ogguk/ogre_female_ogguk_scout', 1190), + (21097, 19895, 'staticobjects/soe_wallet/curtains_plain_dark', 1190), + (21098, 19896, '_exp09/objects/dpo/housing/elven_dresser', 1190), + (21099, 19897, '_exp09/objects/dpo/housing/elven_stool', 1190), + (21100, 19898, '_exp09/objects/dpo/housing/elven_table', 1190), + (21101, 19899, '_exp09/objects/dpo/housing/elven_tavern_table', 1190), + (21102, 19900, '_exp09/objects/dpo/housing/miners_lucky_crystal_pile', 1190), + (21103, 19901, '_exp09/objects/dpo/housing/miners_lucky_geode_pile', 1190), + (21104, 19902, '_exp09/objects/dpo/housing/alchemists_burner', 1190), + (21105, 19903, '_exp09/objects/dpo/housing/alchemists_burner_filtration', 1190), + (21106, 19904, '_exp09/objects/dpo/housing/alchemists_hourglass', 1190), + (21107, 19905, '_exp09/objects/dpo/housing/alchemists_vial_stand', 1190), + (21108, 19906, '_exp09/objects/dpo/housing/ancient_bar_shelf', 1190), + (21109, 19907, '_exp09/objects/dpo/housing/ancient_bar_table', 1190), + (21110, 19908, '_exp09/objects/dpo/housing/antique_stone_stove', 1190), + (21111, 19909, '_exp09/objects/dpo/housing/apple_bowl', 1190), + (21112, 19910, '_exp09/objects/dpo/housing/coffin_pillow', 1190), + (21113, 19911, '_exp09/objects/dpo/housing/decorative_cursed_chalice', 1190), + (21114, 19912, '_exp09/objects/dpo/housing/dwarven_chandalier', 1190), + (21115, 19913, '_exp09/objects/dpo/housing/dwarven_firepot', 1190), + (21116, 19914, '_exp09/objects/dpo/housing/dwarven_throne', 1190), + (21117, 19915, '_exp09/objects/dpo/housing/dwarven_totem', 1190), + (21118, 19916, '_exp09/objects/dpo/housing/dwarven_work_stool', 1190), + (21119, 19917, '_exp09/objects/dpo/housing/dwarven_work_table', 1190), + (21120, 19918, '_exp09/objects/dpo/housing/elven_bed', 1190), + (21121, 19919, '_exp09/objects/dpo/housing/elven_bedside_table', 1190), + (21122, 19920, '_exp09/objects/dpo/housing/elven_bookcase', 1190), + (21123, 19921, '_exp09/objects/dpo/housing/elven_cabinet', 1190), + (21124, 19922, '_exp08/characters/monsters/komodo/komodo_evil_idle', 1190), + (21125, 19923, '_exp08/characters/monsters/komodo/komodo_evil_idle_blackred', 1190), + (21126, 19924, '_exp08/characters/monsters/komodo/komodo_evil_idle_blue', 1190), + (21127, 19925, '_exp08/characters/monsters/komodo/komodo_evil_idle_green', 1190), + (21128, 19926, '_exp08/characters/monsters/komodo/komodo_evil_idle_red', 1190), + (21129, 19927, 'accessories/wieldable_items/shields/exp09/exp09_kite_ethernere', 1190), + (21130, 19928, '_exp09/characters/monsters/skirth/skirth_boss', 1190), + (21131, 19929, '_exp09/characters/monsters/tirun_enforcer/tirun_enforcer_boss', 1190), + (21132, 19930, '_exp09/objects/drinals/drinal_ethernere_bell_static', 1190), + (21133, 19931, '_exp09/objects/drinals/drinal_ethernere_bell_tolling', 1190), + (21134, 19932, '_exp09/characters/tool_users/lizardmen_2012/lizardman_boss_scout', 1190), + (21135, 19933, '_exp09/characters/tool_users/lizardmen_2012/lizardman_boss_shaman', 1190), + (21136, 19934, 'creatures/mounts/prestige_cloud_pad', 1190), + (21137, 19935, 'creatures/mounts/fear_cloud_pad', 1190), + (21138, 19936, 'accessories/wieldable_items/weapons/exp09/2h_sword/exp09_axe_2h_ethernere_sc', 1190), + (21139, 19937, 'staticobjects/tcg/soelive2012_painting', 1190), + (21140, 19938, 'accessories/wieldable_items/weapons/exp09/1h_crush/1h_hammer_were', 1190), + (21141, 19939, 'accessories/wieldable_items/weapons/exp09/1h_sword/1h_axe_were', 1190), + (21142, 19940, 'accessories/wieldable_items/weapons/exp07/1h_sword/goth_axe_1_hand_01_redgold', 1190), + (21143, 19941, 'accessories/wieldable_items/weapons/exp07/shield/goth_shield_01_redgold', 1190), + (21144, 19942, 'creatures/monsters/evileye_red_flyer', 1190), + (21145, 19943, 'accessories/wearable_items/_exp09/mummy_wraps_ancient/chest', 1190), + (21146, 19944, 'accessories/wearable_items/_exp09/mummy_wraps_ancient/hands', 1190), + (21147, 19945, 'accessories/wearable_items/_exp09/mummy_wraps_ancient/head', 1190), + (21148, 19946, 'accessories/wearable_items/_exp09/mummy_wraps_ancient/legs', 1190), + (21149, 19947, 'accessories/wearable_items/_exp09/mummy_wraps_ancient/shoulders', 1190), + (21150, 19948, 'accessories/wearable_items/_exp09/mummy_wraps_ancient/snap_ons_dont_use/chest_waist', 1190), + (21151, 19949, 'accessories/wearable_items/_exp09/mummy_wraps_ancient/snap_ons_dont_use/head_sarnak', 1190), + (21152, 19950, 'creatures/mounts/bird_mount/evil/bird_evil_green', 1190), + (21153, 19951, 'creatures/mounts/bird_mount/evil/bird_evil_red', 1190), + (21154, 19952, 'creatures/mounts/bird_mount/evil/bird_evil_yellow', 1190), + (21155, 19953, '_exp09/characters/monsters/lion_new/lion_new_base', 1190), + (21156, 19954, '_exp09/characters/tool_users/gehein_houseplushie/gehein_houseplushie', 1190), + (21157, 19955, '_exp09/characters/tool_users/elemental_solusek/elemental_solusek', 1190), + (21158, 19956, '_exp09/characters/monsters/elemental_storm/elemental_storm', 1190), + (21159, 19957, '_exp09/characters/monsters/elemental_storm/elemental_storm_upgrade', 1190), + (21160, 19958, '_exp09/characters/tool_users/elemental_solusek/elemental_solusek_daughter', 1190), + (21161, 19959, '_exp09/characters/tool_users/elemental_solusek/elemental_solusek_upgraded', 1190), + (21162, 19960, 'staticobjects/tcg/tcg_cheesecart', 1190), + (21163, 19961, 'staticobjects/tcg/tcg_tapestry01_design_lavawalker', 1190), + (21164, 19962, 'staticobjects/tcg/tcg_tapestry01_design_dragonhunter', 1190), + (21165, 19963, '_exp09/characters/monsters/water_spout/water_spout', 1190), + (21166, 19964, 'creatures/mounts/bird_mount/evil/bird_evil_america', 1190), + (21167, 19965, '_exp09/characters/monsters/dervish_necromantic/dervish_necromantic_pestillencevortex', 1190), + (21168, 19966, '_exp09/characters/monsters/dervish_necromantic/dervish_necromantic_pestillencevortex_upgrade', 1190), + (21169, 19967, '_exp09/characters/monsters/dervish_necromantic/dervish_necromantic_redswarmingdeath', 1190), + (21170, 19968, '_exp09/characters/monsters/dervish_necromantic/dervish_necromantic_redswarmingdeath_upgrade', 1190), + (21171, 19969, '_exp09/objects/exp09_rgn_eidolon_jungle/po_soul_spire_lrg_active', 1190), + (21172, 19970, '_exp09/objects/exp09_rgn_eidolon_jungle/po_soul_spire_lrg_inactive', 1190), + (21173, 19971, '_exp09/objects/exp09_rgn_eidolon_jungle/po_soul_spire_sml_active', 1190), + (21174, 19972, '_exp09/objects/exp09_rgn_eidolon_jungle/po_soul_spire_sml_inactive', 1190), + (21175, 19973, '_exp09/objects/exp09_rgn_eidolon_jungle/turbillion_vestibule_active', 1190), + (21176, 19974, '_exp09/objects/exp09_rgn_eidolon_jungle/turbillion_vestibule_active_no_rotation', 1190), + (21177, 19975, '_exp09/objects/exp09_rgn_eidolon_jungle/turbillion_vestibule_inactive', 1190), + (21178, 19976, 'accessories/wieldable_items/weapons/exp09/1h_sword/1h_axe_ethernere', 1190), + (21179, 19977, 'accessories/npc_wearables/ogre_ogguk/head_ogre_ogguk', 1190), + (21180, 19978, 'accessories/npc_wearables/ogre_ogguk/ogre_ogguk_pauldron_left', 1190), + (21181, 19979, 'accessories/npc_wearables/ogre_ogguk/ogre_ogguk_pauldron_right', 1190), + (21182, 19980, 'accessories/wieldable_items/shields/exp09/exp09_shield_buckler_ethernere', 1190), + (21183, 19981, 'accessories/wieldable_items/weapons/exp09/2h_sword/exp09_2h_axe_ethernere', 1190), + (21184, 19982, '_exp09/objects/exp09_rgn_eidolon_jungle/dun_temple_of_faceless_feergate', 1190), + (21185, 19983, '_exp09/objects/exp09_rgn_eidolon_jungle/dun_temple_of_faceless_feergate_fx', 1190), + (21186, 19984, 'staticobjects/_exp09/dpo_exp09_staff_drinal', 1190), + (21187, 19985, '_exp09/objects/exp09_rgn_eidolon_jungle/wooden_barricade_long', 1190), + (21188, 19986, '_exp09/objects/exp09_rgn_eidolon_jungle/wooden_barricade_short', 1190), + (21189, 19987, 'accessories/wieldable_items/weapons/exp09/1h_crush/hammer_fantasy_bluebronze_epic', 1190), + (21190, 19988, 'accessories/wieldable_items/weapons/exp09/1h_crush/hammer_fantasy_greengold_epic', 1190), + (21191, 19989, 'accessories/wieldable_items/weapons/exp09/1h_crush/hammer_fantasy_rediron_epic', 1190), + (21192, 19990, 'accessories/wieldable_items/weapons/exp09/1h_crush/mace_fantasy_bluebronze_epic', 1190), + (21193, 19991, 'accessories/wieldable_items/weapons/exp09/1h_crush/mace_fantasy_greengold_epic', 1190), + (21194, 19992, 'accessories/wieldable_items/weapons/exp09/1h_crush/mace_fantasy_rediron_epic', 1190), + (21195, 19993, 'accessories/wieldable_items/weapons/exp09/1h_crush/wand_fantasy_bluebronze_epic', 1190), + (21196, 19994, 'accessories/wieldable_items/weapons/exp09/1h_crush/wand_fantasy_greengold_epic', 1190), + (21197, 19995, 'accessories/wieldable_items/weapons/exp09/1h_crush/wand_fantasy_rediron_epic', 1190), + (21198, 19996, 'accessories/wieldable_items/weapons/exp09/1h_pierce/dagger_hunter_fantasy_bluebronze_epic', 1190), + (21199, 19997, 'accessories/wieldable_items/weapons/exp09/1h_pierce/dagger_hunter_fantasy_greengold_epic', 1190), + (21200, 19998, 'accessories/wieldable_items/weapons/exp09/1h_pierce/dagger_hunter_fantasy_rediron_epic', 1190), + (21201, 19999, 'accessories/wieldable_items/weapons/exp09/1h_sword/shortsword_fantasy_bluebronze_epic', 1190), + (21202, 20000, 'accessories/wieldable_items/weapons/exp09/1h_sword/shortsword_fantasy_greengold_epic', 1190), + (21203, 20001, 'accessories/wieldable_items/weapons/exp09/1h_sword/shortsword_fantasy_rediron_epic', 1190), + (21204, 20002, 'accessories/wieldable_items/weapons/exp09/1h_sword/sword_fantasy_bluebronze_epic', 1190), + (21205, 20003, 'accessories/wieldable_items/weapons/exp09/1h_sword/sword_fantasy_greengold_epic', 1190), + (21206, 20004, 'accessories/wieldable_items/weapons/exp09/1h_sword/sword_fantasy_rediron_epic', 1190), + (21207, 20005, 'accessories/wieldable_items/weapons/exp09/2h_sword/2hsword_fantasy_bluebronze_epic', 1190), + (21208, 20006, 'accessories/wieldable_items/weapons/exp09/2h_sword/2hsword_fantasy_greengold_epic', 1190), + (21209, 20007, 'accessories/wieldable_items/weapons/exp09/2h_sword/2hsword_fantasy_rediron_epic', 1190), + (21210, 20008, 'accessories/wieldable_items/weapons/exp09/bow/longbow_fantasy_bluebronze_epic', 1190), + (21211, 20009, 'accessories/wieldable_items/weapons/exp09/bow/longbow_fantasy_greengold_epic', 1190), + (21212, 20010, 'accessories/wieldable_items/weapons/exp09/bow/longbow_fantasy_rediron_epic', 1190), + (21213, 20011, '_exp09/characters/monsters/elemental_storm/elemental_storm_epic', 1190), + (21214, 20012, '_exp09/characters/monsters/elemental_storm/elemental_storm_upgrade_epic', 1190), + (21215, 20013, '_exp09/objects/exp09_dun_temple_of_faceless/brazier_01_red', 1190), + (21216, 20014, '_exp09/objects/exp09_dun_temple_of_faceless/brazier_01_white', 1190), + (21217, 20015, '_exp09/objects/exp09_dun_temple_of_faceless/sconce_01_red', 1190), + (21218, 20016, '_exp09/objects/exp09_dun_temple_of_faceless/sconce_01_white', 1190), + (21219, 20017, '_exp09/objects/exp09_dun_temple_of_faceless/sconce_02_red', 1190), + (21220, 20018, '_exp09/objects/exp09_dun_temple_of_faceless/sconce_02_white', 1190), + (21221, 20019, '_exp09/objects/exp09_dun_temple_of_faceless/morrel_statue', 1190), + (21222, 20020, '_exp09/objects/exp09_dun_temple_of_faceless/terris_statue', 1190), + (21223, 20021, 'creatures/mounts/wyvern_mount/wyvern_mount_ethernere', 1190), + (21224, 20022, '_exp09/characters/monsters/carnivorous_ape_boss/carnivorous_ape_boss_perched', 1190), + (21225, 20023, 'staticobjects/weapons/dpo_beastlord_silver', 1190), + (21226, 20024, 'staticobjects/weapons/dpo_beastlord_mythical', 1190), + (21227, 20025, '_exp09/characters/monsters/lion_winged/lion_winged_male', 1190), + (21228, 20026, 'staticobjects/_exp09/po_soul_spire_sml_dpo', 1190), + (21229, 20027, 'staticobjects/_exp09/drinal_monolith_dpo', 1190), + (21230, 20028, 'staticobjects/_exp09/dun_temple_of_faceless_brazier01_dpo', 1190), + (21231, 20029, 'staticobjects/_exp09/ej_temple_staff01_dpo', 1190), + (21232, 20030, 'staticobjects/_exp09/exp09_rgn_ej_oggok01_brazier01_dpo', 1190), + (21233, 20031, 'staticobjects/_exp09/po_lightsource_brazier_were01_dpo', 1190), + (21234, 20032, 'staticobjects/_exp09/po_rug_outdoor_orange01_dpo', 1190), + (21235, 20033, '_exp09/objects/exp09_rgn_eidolon_jungle/ej_temple_cyluuh_totem01', 1190), + (21236, 20034, '_exp09/objects/exp09_rgn_eidolon_jungle/ej_temple_cyluuh_totem01_ghost', 1190), + (21237, 20035, '_exp09/objects/exp09_rgn_eidolon_jungle/ej_temple_staff01', 1190), + (21238, 20036, '_exp09/objects/exp09_rgn_eidolon_jungle/ej_temple_yulsluu_key_post01', 1190), + (21239, 20037, '_exp09/objects/exp09_rgn_eidolon_jungle/ej_temple_yulsluu_key_post02', 1190), + (21240, 20038, 'accessories/wearable_items/cloak/exp09/cloak_drinals_castle', 1190), + (21241, 20039, '_exp09/objects/exp09_rgn_eidolon_jungle/ej_hand_totem', 1190), + (21242, 20040, '_exp09/objects/exp09_rgn_eidolon_jungle/oggok_pole_with_flag', 1190), + (21243, 20041, '_exp09/objects/exp09_rgn_eidolon_jungle/oggok_weapon_cache_table', 1190), + (21244, 20042, '_exp09/objects/exp09_rgn_eidolon_jungle/oggok_weapon_cot', 1190), + (21245, 20043, '_exp09/objects/drinals/drinals_soulwell_blue_01', 1190), + (21246, 20044, '_exp09/objects/drinals/drinals_soulwell_gold_01', 1190), + (21247, 20045, '_exp09/objects/drinals/drinals_soulwell_green_01', 1190), + (21248, 20046, '_exp09/objects/drinals/drinals_soulwell_red_01', 1190), + (21249, 20047, '_exp09/objects/drinals/drinals_soulwell_blue_holder_01', 1190), + (21250, 20048, '_exp09/objects/drinals/drinals_soulwell_gold_holder_01', 1190), + (21251, 20049, '_exp09/objects/drinals/drinals_soulwell_green_holder_01', 1190), + (21252, 20050, '_exp09/objects/drinals/drinals_soulwell_red_holder_01', 1190), + (21253, 20051, '_exp09/objects/drinals/drinals_soulwell_blue_orb_01', 1190), + (21254, 20052, '_exp09/objects/drinals/drinals_soulwell_gold_orb_01', 1190), + (21255, 20053, '_exp09/objects/drinals/drinals_soulwell_green_orb_01', 1190), + (21256, 20054, '_exp09/objects/drinals/drinals_soulwell_red_orb_01', 1190), + (21257, 20055, '_exp09/objects/harvested/bush', 1190), + (21258, 20056, '_exp09/objects/harvested/den', 1190), + (21259, 20057, '_exp09/objects/harvested/gems', 1190), + (21260, 20058, '_exp09/objects/harvested/log', 1190), + (21261, 20059, '_exp09/objects/harvested/ore', 1190), + (21262, 20060, '_exp09/objects/harvested/roots', 1190), + (21263, 20061, 'accessories/wieldable_items/weapons/exp09/2h_sword/exp09_2h_sword_ethernere', 1190), + (21264, 20062, '_exp09/objects/exp09_rgn_eidolon_jungle/ej_anchor_base', 1190), + (21265, 20063, 'accessories/wieldable_items/weapons/exp09/1h_sword/exp09_1h_sword_ethernere', 1190), + (21266, 20064, '_exp09/objects/exp09_rgn_plains_of_obol/po_chest_large_ornate01', 1190), + (21267, 20065, '_exp09/objects/exp09_rgn_plains_of_obol/po_chest_small_ornate01', 1190), + (21268, 20066, '_exp09/objects/exp09_rgn_plains_of_obol/po_crate_open01', 1190), + (21269, 20067, '_exp09/objects/exp09_rgn_plains_of_obol/po_horde_burrowpile01', 1190), + (21270, 20068, '_exp09/objects/exp09_rgn_plains_of_obol/po_scroll_single01', 1190), + (21271, 20069, '_exp09/objects/exp09_rgn_plains_of_obol/po_scrolls_group01', 1190), + (21272, 20070, '_exp09/objects/exp09_rgn_plains_of_obol/po_scrolls_group02', 1190), + (21273, 20071, '_exp09/objects/exp09_rgn_plains_of_obol/po_scrolls_group03', 1190), + (21274, 20072, '_exp09/objects/exp09_rgn_plains_of_obol/turbillion_vestibule01', 1190), + (21275, 20073, '_exp09/objects/exp09_rgn_plains_of_obol/turbillion_vestibule01_noglow', 1190), + (21276, 20074, '_exp09/objects/drinals/dc_books_single01', 1190), + (21277, 20075, '_exp09/objects/drinals/dc_books_single02', 1190), + (21278, 20076, '_exp09/objects/drinals/dc_books_single03', 1190), + (21279, 20077, '_exp09/objects/drinals/dc_scroll_single02', 1190), + (21280, 20078, '_exp09/objects/drinals/dc_scrolls_group03', 1190), + (21281, 20079, '_exp09/objects/drinals/dc_scrolls_group04', 1190), + (21282, 20080, '_exp09/objects/exp09_rgn_eidolon_jungle/exp09_rgn_ej_oggok01_banner01', 1190), + (21283, 20081, '_exp09/objects/exp09_rgn_eidolon_jungle/exp09_rgn_ej_oggok01_forge01', 1190), + (21284, 20082, '_exp09/objects/exp09_rgn_eidolon_jungle/exp09_rgn_ej_oggok01_forge02', 1190), + (21285, 20083, '_exp09/objects/exp09_rgn_eidolon_jungle/dun_temple_of_faceless_brazier01', 1190), + (21286, 20084, '_exp09/objects/exp09_rgn_eidolon_jungle/dun_temple_of_faceless_brazier01_white', 1190), + (21287, 20085, '_exp09/objects/exp09_rgn_eidolon_jungle/dun_temple_of_faceless_oblsq01', 1190), + (21288, 20086, '_exp09/objects/exp09_rgn_eidolon_jungle/dun_temple_of_faceless_sconce01', 1190), + (21289, 20087, '_exp09/objects/exp09_rgn_eidolon_jungle/dun_temple_of_faceless_sconce01_white', 1190), + (21290, 20088, '_exp09/objects/exp09_rgn_eidolon_jungle/dun_temple_of_faceless_sconce02', 1190), + (21291, 20089, '_exp09/objects/exp09_rgn_eidolon_jungle/dun_temple_of_faceless_sconce02_white', 1190), + (21292, 20090, '_exp09/objects/exp09_rgn_eidolon_jungle/dun_temple_of_faceless_urn01', 1190), + (21293, 20091, '_exp09/objects/exp09_rgn_eidolon_jungle/dun_temple_of_faceless_urn02', 1190), + (21294, 20092, '_exp09/objects/exp09_rgn_eidolon_jungle/dun_temple_of_faceless_urn03', 1190), + (21295, 20093, '_exp09/objects/exp09_rgn_eidolon_jungle/dun_temple_of_faceless_urn04', 1190), + (21296, 20094, '_exp09/objects/exp09_rgn_eidolon_jungle/dun_temple_of_faceless_urn05', 1190), + (21297, 20095, '_exp09/objects/exp09_rgn_eidolon_jungle/ej_anchor_base01', 1190), + (21298, 20096, 'accessories/wearable_items/cloak/exp09/cloak_gemstone_armor_red_split', 1190), + (21299, 20097, 'accessories/wearable_items/cloak/exp09/cloak_gemstone_armor_red_inset', 1190), + (21300, 20098, 'accessories/wearable_items/cloak/exp09/cloak_gemstone_armor_red_3strap', 1190), + (21301, 20099, 'accessories/wearable_items/cloak/exp09/cloak_gemstone_armor_red_square', 1190), + (21302, 20100, 'accessories/wearable_items/_exp09/gemstone_armor/red/chain/chest', 1190), + (21303, 20101, 'accessories/wearable_items/_exp09/gemstone_armor/red/chain/feet', 1190), + (21304, 20102, 'accessories/wearable_items/_exp09/gemstone_armor/red/chain/forearms', 1190), + (21305, 20103, 'accessories/wearable_items/_exp09/gemstone_armor/red/chain/hands', 1190), + (21306, 20104, 'accessories/wearable_items/_exp09/gemstone_armor/red/chain/head', 1190), + (21307, 20105, 'accessories/wearable_items/_exp09/gemstone_armor/red/chain/legs', 1190), + (21308, 20106, 'accessories/wearable_items/_exp09/gemstone_armor/red/chain/shoulders', 1190), + (21309, 20107, 'accessories/wearable_items/_exp09/gemstone_armor/red/chain/shoulders_epic', 1190), + (21310, 20108, 'accessories/wearable_items/_exp09/gemstone_armor/red/gi_heavycloth/chest', 1190), + (21311, 20109, 'accessories/wearable_items/_exp09/gemstone_armor/red/gi_heavycloth/feet', 1190), + (21312, 20110, 'accessories/wearable_items/_exp09/gemstone_armor/red/gi_heavycloth/hands', 1190), + (21313, 20111, 'accessories/wearable_items/_exp09/gemstone_armor/red/gi_heavycloth/head', 1190), + (21314, 20112, 'accessories/wearable_items/_exp09/gemstone_armor/red/gi_heavycloth/legs', 1190), + (21315, 20113, 'accessories/wearable_items/_exp09/gemstone_armor/red/gi_heavycloth/shoulders', 1190), + (21316, 20114, 'accessories/wearable_items/_exp09/gemstone_armor/red/gi_heavycloth/shoulders_epic', 1190), + (21317, 20115, 'accessories/wearable_items/_exp09/gemstone_armor/red/gi_heavycloth/skirt', 1190), + (21318, 20116, 'accessories/wearable_items/_exp09/gemstone_armor/red/gi_heavycloth/belt/skirt 2', 1190), + (21319, 20117, 'accessories/wearable_items/_exp09/gemstone_armor/red/gi_heavycloth/belt/skirt', 1190), + (21320, 20118, 'accessories/wearable_items/_exp09/gemstone_armor/red/leather/chest', 1190), + (21321, 20119, 'accessories/wearable_items/_exp09/gemstone_armor/red/leather/feet', 1190), + (21322, 20120, 'accessories/wearable_items/_exp09/gemstone_armor/red/leather/forearms', 1190), + (21323, 20121, 'accessories/wearable_items/_exp09/gemstone_armor/red/leather/hands', 1190), + (21324, 20122, 'accessories/wearable_items/_exp09/gemstone_armor/red/leather/head', 1190), + (21325, 20123, 'accessories/wearable_items/_exp09/gemstone_armor/red/leather/head_hood', 1190), + (21326, 20124, 'accessories/wearable_items/_exp09/gemstone_armor/red/leather/legs', 1190), + (21327, 20125, 'accessories/wearable_items/_exp09/gemstone_armor/red/leather/legs_noskirt', 1190), + (21328, 20126, 'accessories/wearable_items/_exp09/gemstone_armor/red/leather/shoulders', 1190), + (21329, 20127, 'accessories/wearable_items/_exp09/gemstone_armor/red/leather/shoulders_epic', 1190), + (21330, 20128, 'accessories/wearable_items/_exp09/gemstone_armor/red/leather/skirt', 1190), + (21331, 20129, 'accessories/wearable_items/_exp09/gemstone_armor/red/robe/chest', 1190), + (21332, 20130, 'accessories/wearable_items/_exp09/gemstone_armor/red/robe/chest_epic', 1190), + (21333, 20131, 'accessories/wearable_items/_exp09/gemstone_armor/red/robe/feet', 1190), + (21334, 20132, 'accessories/wearable_items/_exp09/gemstone_armor/red/robe/hands', 1190), + (21335, 20133, 'accessories/wearable_items/_exp09/gemstone_armor/red/robe/head', 1190), + (21336, 20134, 'accessories/wearable_items/_exp09/gemstone_armor/red/robe/head_collar', 1190), + (21337, 20135, 'accessories/wearable_items/_exp09/gemstone_armor/red/robe/head_crystalcirclet', 1190), + (21338, 20136, 'accessories/wearable_items/_exp09/gemstone_armor/red/robe/pants', 1190), + (21339, 20137, 'accessories/wearable_items/_exp09/gemstone_armor/red/robe/skirt', 1190), + (21340, 20138, 'accessories/wearable_items/_exp09/gemstone_armor/red/snapons/bracer_left', 1190), + (21341, 20139, 'accessories/wearable_items/_exp09/gemstone_armor/red/snapons/bracer_right', 1190), + (21342, 20140, 'accessories/wearable_items/_exp09/gemstone_armor/red/snapons/head_chain_epic', 1190), + (21343, 20141, 'accessories/wearable_items/_exp09/gemstone_armor/red/snapons/head_vanguard_epic', 1190), + (21344, 20142, 'accessories/wearable_items/_exp09/gemstone_armor/red/snapons/pauldron_chain_left', 1190), + (21345, 20143, 'accessories/wearable_items/_exp09/gemstone_armor/red/snapons/pauldron_chain_right', 1190), + (21346, 20144, 'accessories/wearable_items/_exp09/gemstone_armor/red/snapons/pauldron_gi_left', 1190), + (21347, 20145, 'accessories/wearable_items/_exp09/gemstone_armor/red/snapons/pauldron_gi_right', 1190), + (21348, 20146, 'accessories/wearable_items/_exp09/gemstone_armor/red/snapons/pauldron_heavy_left', 1190), + (21349, 20147, 'accessories/wearable_items/_exp09/gemstone_armor/red/snapons/pauldron_heavy_right', 1190), + (21350, 20148, 'accessories/wearable_items/_exp09/gemstone_armor/red/snapons/pauldron_leather_left', 1190), + (21351, 20149, 'accessories/wearable_items/_exp09/gemstone_armor/red/snapons/pauldron_leather_right', 1190), + (21352, 20150, 'accessories/wearable_items/_exp09/gemstone_armor/red/snapons/pauldron_robe_left', 1190), + (21353, 20151, 'accessories/wearable_items/_exp09/gemstone_armor/red/snapons/pauldron_robe_right', 1190), + (21354, 20152, 'accessories/wearable_items/_exp09/gemstone_armor/red/snapons/shinguard_left', 1190), + (21355, 20153, 'accessories/wearable_items/_exp09/gemstone_armor/red/snapons/shinguard_right', 1190), + (21356, 20154, 'accessories/wearable_items/_exp09/gemstone_armor/red/vanguard/chest', 1190), + (21357, 20155, 'accessories/wearable_items/_exp09/gemstone_armor/red/vanguard/feet', 1190), + (21358, 20156, 'accessories/wearable_items/_exp09/gemstone_armor/red/vanguard/forearms', 1190), + (21359, 20157, 'accessories/wearable_items/_exp09/gemstone_armor/red/vanguard/hands', 1190), + (21360, 20158, 'accessories/wearable_items/_exp09/gemstone_armor/red/vanguard/head', 1190), + (21361, 20159, 'accessories/wearable_items/_exp09/gemstone_armor/red/vanguard/head_epic', 1190), + (21362, 20160, 'accessories/wearable_items/_exp09/gemstone_armor/red/vanguard/left', 1190), + (21363, 20161, 'accessories/wearable_items/_exp09/gemstone_armor/red/vanguard/legs', 1190), + (21364, 20162, 'accessories/wearable_items/_exp09/gemstone_armor/red/vanguard/legs_epic', 1190), + (21365, 20163, 'accessories/wearable_items/_exp09/gemstone_armor/red/vanguard/legs_noskirt', 1190), + (21366, 20164, 'accessories/wearable_items/_exp09/gemstone_armor/red/vanguard/right', 1190), + (21367, 20165, 'accessories/wearable_items/_exp09/gemstone_armor/red/vanguard/shoulders', 1190), + (21368, 20166, 'accessories/wearable_items/_exp09/gemstone_armor/red/vanguard/shoulders_epic', 1190), + (21369, 20167, 'accessories/wearable_items/_exp09/gemstone_armor/red/vanguard/shoulders_nopauldrons', 1190), + (21370, 20168, 'accessories/wearable_items/_exp09/gemstone_armor/red/vanguard/skirt', 1190), + (21371, 20169, '_exp09/objects/ethernere_portal_fx', 1190), + (21372, 20170, 'staticobjects/_exp09/firiona_tapestry01', 1190), + (21373, 20171, '_exp09/objects/exp09_rgn_eidolon_jungle/ej_fear_tree_root', 1190), + (21374, 20172, 'creatures/pets/frostfell_gumdrop/frostfell_gumdrop_blue', 1190), + (21375, 20173, 'creatures/pets/frostfell_gumdrop/frostfell_gumdrop_green', 1190), + (21376, 20174, 'creatures/pets/frostfell_gumdrop/frostfell_gumdrop_orange', 1190), + (21377, 20175, 'creatures/pets/frostfell_gumdrop/frostfell_gumdrop_pink', 1190), + (21378, 20176, 'creatures/pets/frostfell_gumdrop/frostfell_gumdrop_red', 1190), + (21379, 20177, 'creatures/pets/frostfell_gumdrop/frostfell_gumdrop_yellow', 1190), + (21380, 20178, '_exp09/objects/exp09_rgn_eidolon_jungle/oggok_weapon_cache', 1190), + (21381, 20179, 'creatures/pets/frostfell_gumdrop/frostfell_gumdrop_black', 1190), + (21382, 20180, 'creatures/pets/frostfell_gumdrop/frostfell_gumdrop_violet', 1190), + (21383, 20181, 'creatures/pets/frostfell_gumdrop/frostfell_gumdrop_void', 1190), + (21384, 20182, 'staticobjects/tcg/tcg_painting73_belligerence', 1190), + (21385, 20183, 'staticobjects/tcg/tcg_painting71_preservation', 1190), + (21386, 20184, 'staticobjects/tcg/tcg_painting70_revitalize', 1190), + (21387, 20185, 'staticobjects/tcg/tcg_painting74_telluricfury', 1190), + (21388, 20186, 'staticobjects/tcg/tcg_painting72_rapidstab', 1190), + (21389, 20187, 'staticobjects/tcg/tcg_painting_lonset15', 1190), + (21390, 20188, '_exp09/objects/exp09_rgn_eidolon_jungle/oggok_rallos_helm_statue', 1190), + (21391, 20189, '_exp09/objects/exp09_rgn_eidolon_jungle/exp09_rgn_ej_oggok01_banner02', 1190), + (21392, 20190, '_exp09/objects/exp09_rgn_plains_of_obol/po_rug_purple01', 1190), + (21393, 20191, '_exp09/objects/exp09_rgn_plains_of_obol/po_rug_blue01', 1190), + (21394, 20192, '_exp09/objects/exp09_rgn_plains_of_obol/po_table_scientific01', 1190), + (21395, 20193, '_exp09/objects/exp09_rgn_plains_of_obol/clothspinners_clothrack01', 1190), + (21396, 20194, '_exp09/objects/exp09_rgn_plains_of_obol/weaponrack_sword001', 1190), + (21397, 20195, '_exp09/objects/exp09_rgn_plains_of_obol/df_objects_rug02', 1190), + (21398, 20196, '_exp09/objects/exp09_dun_deepchelsith/exp09_dun_dpch_p05_crypt_long01', 1190), + (21399, 20197, '_exp09/objects/exp09_dun_deepchelsith/exp09_dun_dpch_p05_crypt_short01', 1190), + (21400, 20198, '_exp09/objects/exp09_dun_deepchelsith/exp09_dun_dpch_p05_crypt_vase01', 1190), + (21401, 20199, '_exp09/objects/exp09_dun_deepchelsith/exp09_dun_dpch_p05_crypt_vase01_broken01', 1190), + (21402, 20200, 'creatures/mounts/wyvern_mount/wyvern_armored_drinal', 1190), + (21403, 20201, '_exp09/objects/exp09_dun_wurmbones_end/exp09_dun_we01_crystal01fx', 1190), + (21404, 20202, '_exp09/objects/exp09_dun_deepchelsith/exp09_dun_dpch_p05_crypt_vase02', 1190), + (21405, 20203, 'accessories/wearable_items/snapons/backpacks/backpack_bard/backpack_drum_swivel', 1190), + (21406, 20204, 'staticobjects/_exp09/dun_deepchelsith_crystal', 1190), + (21407, 20205, '_exp09/objects/soulspire_comm_device01', 1190), + (21408, 20206, 'accessories/wieldable_items/weapons/exp09/1h_crush/1h_hammer_were_epic', 1190), + (21409, 20207, 'accessories/wieldable_items/weapons/exp09/1h_sword/1h_axe_were_epic', 1190), + (21410, 20208, '_exp09/objects/drinals/drinals_collumn_blue', 1190), + (21411, 20209, '_exp09/objects/drinals/drinals_collumn_red', 1190), + (21412, 20210, '_exp09/objects/firiona_vie_rest_dpo', 1190), + (21413, 20211, 'accessories/wearable_items/snapons/backpacks/backpack_bard/backpack_bard', 1190), + (21414, 20212, '_exp09/objects/dpo/housing/guildhall_trophy_tukaarak', 1190), + (21415, 20213, '_exp09/objects/dpo/housing/guildhall_trophy_hraashna', 1190), + (21416, 20214, '_exp09/objects/dpo/housing/guildhall_trophy_ventani', 1190), + (21417, 20215, '_exp09/objects/dpo/housing/guildhall_trophy_nanzata', 1190), + (21418, 20216, '_exp09/objects/dpo/housing/guildhall_trophy_drinal', 1190), + (21419, 20217, '_exp09/objects/dpo/housing/guildhall_trophy_fear_ape', 1190), + (21420, 20218, '_exp09/objects/dpo/housing/guildhall_trophy_baelon', 1190), + (21421, 20219, '_exp09/objects/dpo/housing/guildhall_trophy_amalgamon', 1190), + (21422, 20220, 'accessories/wearable_items/_exp08/robe_elemental/water/left_shoulder_effect', 1190), + (21423, 20221, 'accessories/wearable_items/_exp08/robe_elemental/water/right_shoulder_effect', 1190), + (21424, 20222, 'accessories/wearable_items/_exp09/galvanic_armor/galvanic_set_combined/chest', 1190), + (21425, 20223, 'accessories/wearable_items/_exp09/galvanic_armor/galvanic_set_combined/chest_combined', 1190), + (21426, 20224, 'accessories/wearable_items/_exp09/galvanic_armor/galvanic_set_combined/chest_combined_epic1', 1190), + (21427, 20225, 'accessories/wearable_items/_exp09/galvanic_armor/galvanic_set_combined/chest_combined_epic2', 1190), + (21428, 20226, 'accessories/wearable_items/_exp09/galvanic_armor/galvanic_set_combined/feet', 1190), + (21429, 20227, 'accessories/wearable_items/_exp09/galvanic_armor/galvanic_set_combined/hands', 1190), + (21430, 20228, 'accessories/wearable_items/_exp09/galvanic_armor/galvanic_set_combined/head_goggles', 1190), + (21431, 20229, 'accessories/wearable_items/_exp09/galvanic_armor/galvanic_set_combined/legs', 1190), + (21432, 20230, 'accessories/wearable_items/_exp09/galvanic_armor/galvanic_set_combined/shoulders', 1190), + (21433, 20231, 'accessories/wearable_items/_exp09/galvanic_armor/galvanic_set_combined/skirt', 1190), + (21434, 20232, 'accessories/wearable_items/_exp09/galvanic_armor/galvanic_set_combined_brown/chest', 1190), + (21435, 20233, 'accessories/wearable_items/_exp09/galvanic_armor/galvanic_set_combined_brown/chest_combined', 1190), + (21436, 20234, 'accessories/wearable_items/_exp09/galvanic_armor/galvanic_set_combined_brown/chest_combined_epic1', 1190), + (21437, 20235, 'accessories/wearable_items/_exp09/galvanic_armor/galvanic_set_combined_brown/chest_combined_epic2', 1190), + (21438, 20236, 'accessories/wearable_items/_exp09/galvanic_armor/galvanic_set_combined_brown/chest_combined_epic3', 1190), + (21439, 20237, 'accessories/wearable_items/_exp09/galvanic_armor/galvanic_set_combined_brown/feet', 1190), + (21440, 20238, 'accessories/wearable_items/_exp09/galvanic_armor/galvanic_set_combined_brown/hands', 1190), + (21441, 20239, 'accessories/wearable_items/_exp09/galvanic_armor/galvanic_set_combined_brown/head_goggles', 1190), + (21442, 20240, 'accessories/wearable_items/_exp09/galvanic_armor/galvanic_set_combined_brown/legs', 1190), + (21443, 20241, 'accessories/wearable_items/_exp09/galvanic_armor/galvanic_set_combined_brown/shoulders', 1190), + (21444, 20242, 'accessories/wearable_items/_exp09/galvanic_armor/galvanic_set_combined_brown/skirt', 1190), + (21445, 20243, 'accessories/wearable_items/_exp09/galvanic_armor/galvanic_set_combined_mauve/chest', 1190), + (21446, 20244, 'accessories/wearable_items/_exp09/galvanic_armor/galvanic_set_combined_mauve/chest_combined', 1190), + (21447, 20245, 'accessories/wearable_items/_exp09/galvanic_armor/galvanic_set_combined_mauve/chest_combined_epic1', 1190), + (21448, 20246, 'accessories/wearable_items/_exp09/galvanic_armor/galvanic_set_combined_mauve/chest_combined_epic2', 1190), + (21449, 20247, 'accessories/wearable_items/_exp09/galvanic_armor/galvanic_set_combined_mauve/feet', 1190), + (21450, 20248, 'accessories/wearable_items/_exp09/galvanic_armor/galvanic_set_combined_mauve/hands', 1190), + (21451, 20249, 'accessories/wearable_items/_exp09/galvanic_armor/galvanic_set_combined_mauve/head_goggles_dark', 1190), + (21452, 20250, 'accessories/wearable_items/_exp09/galvanic_armor/galvanic_set_combined_mauve/legs', 1190), + (21453, 20251, 'accessories/wearable_items/_exp09/galvanic_armor/galvanic_set_combined_mauve/shoulders', 1190), + (21454, 20252, 'accessories/wearable_items/_exp09/galvanic_armor/galvanic_set_combined_mauve/skirt', 1190), + (21455, 20253, 'accessories/wearable_items/_exp09/galvanic_armor/snapons/galvanic_bracer_dark_right', 1190), + (21456, 20254, 'accessories/wearable_items/_exp09/galvanic_armor/snapons/galvanic_bracer_right', 1190), + (21457, 20255, 'accessories/wearable_items/_exp09/galvanic_armor/snapons/galvanic_pauldron_heavy1_left', 1190), + (21458, 20256, 'accessories/wearable_items/_exp09/galvanic_armor/snapons/galvanic_pauldron_heavy1_right', 1190), + (21459, 20257, 'accessories/wearable_items/_exp09/galvanic_armor/snapons/galvanic_pauldron_heavy2_left', 1190), + (21460, 20258, 'accessories/wearable_items/_exp09/galvanic_armor/snapons/galvanic_pauldron_heavy2_left_dark', 1190), + (21461, 20259, 'accessories/wearable_items/_exp09/galvanic_armor/snapons/galvanic_pauldron_heavy2_right', 1190), + (21462, 20260, 'accessories/wearable_items/_exp09/galvanic_armor/snapons/galvanic_pauldron_heavy2_right_dark', 1190), + (21463, 20261, 'accessories/wearable_items/_exp09/galvanic_armor/snapons/galvanic_pauldron_heavy3_left', 1190), + (21464, 20262, 'accessories/wearable_items/_exp09/galvanic_armor/snapons/galvanic_pauldron_heavy3_left_dark', 1190), + (21465, 20263, 'accessories/wearable_items/_exp09/galvanic_armor/snapons/galvanic_pauldron_heavy3_right', 1190), + (21466, 20264, 'accessories/wearable_items/_exp09/galvanic_armor/snapons/galvanic_pauldron_heavy3_right_dark', 1190), + (21467, 20265, 'accessories/wearable_items/_exp09/galvanic_armor/snapons/galvanic_pauldron_light1_left', 1190), + (21468, 20266, 'accessories/wearable_items/_exp09/galvanic_armor/snapons/galvanic_pauldron_light1_left_dark', 1190), + (21469, 20267, 'accessories/wearable_items/_exp09/galvanic_armor/snapons/galvanic_pauldron_light1_right', 1190), + (21470, 20268, 'accessories/wearable_items/_exp09/galvanic_armor/snapons/galvanic_pauldron_light1_right_dark', 1190), + (21471, 20269, 'accessories/wearable_items/_exp09/galvanic_armor/snapons/galvanic_pauldron_light2_left', 1190), + (21472, 20270, 'accessories/wearable_items/_exp09/galvanic_armor/snapons/galvanic_pauldron_light2_left_dark', 1190), + (21473, 20271, 'accessories/wearable_items/_exp09/galvanic_armor/snapons/galvanic_pauldron_light2_right', 1190), + (21474, 20272, 'accessories/wearable_items/_exp09/galvanic_armor/snapons/galvanic_pauldron_light2_right_dark', 1190), + (21475, 20273, 'accessories/wearable_items/_exp09/galvanic_armor/snapons/galvanic_pauldron_under1_left', 1190), + (21476, 20274, 'accessories/wearable_items/_exp09/galvanic_armor/snapons/galvanic_pauldron_under1_left_dark', 1190), + (21477, 20275, 'accessories/wearable_items/_exp09/galvanic_armor/snapons/galvanic_pauldron_under1_right', 1190), + (21478, 20276, 'accessories/wearable_items/_exp09/galvanic_armor/snapons/galvanic_pauldron_under1_right_dark', 1190), + (21479, 20277, 'accessories/wearable_items/_exp09/galvanic_armor/snapons/galvanic_pauldron_under2_left', 1190), + (21480, 20278, 'accessories/wearable_items/_exp09/galvanic_armor/snapons/galvanic_pauldron_under2_left_dark', 1190), + (21481, 20279, 'accessories/wearable_items/_exp09/galvanic_armor/snapons/galvanic_pauldron_under2_right', 1190), + (21482, 20280, 'accessories/wearable_items/_exp09/galvanic_armor/snapons/galvanic_pauldron_under2_right_dark', 1190), + (21483, 20281, 'accessories/wearable_items/_exp09/galvanic_armor/snapons/galvanic_thigh_left', 1190), + (21484, 20282, 'accessories/wearable_items/_exp09/galvanic_armor/snapons/galvanic_thigh_left_dark', 1190), + (21485, 20283, 'accessories/wearable_items/_exp09/galvanic_armor/snapons/galvanic_thigh_right', 1190), + (21486, 20284, 'accessories/wearable_items/_exp09/galvanic_armor/snapons/galvanic_thigh_right_dark', 1190), + (21487, 20285, 'accessories/wearable_items/_exp09/galvanic_armor/snapons/head_goggles', 1190), + (21488, 20286, 'accessories/wearable_items/_exp09/galvanic_armor/snapons/head_goggles_dark', 1190), + (21489, 20287, '_exp09/objects/exp09_rgn_eidolon_jungle/camp_ej_anvil01', 1190), + (21490, 20288, '_exp09/objects/exp09_rgn_eidolon_jungle/camp_ej_chest_wood_long_closed002', 1190), + (21491, 20289, '_exp09/objects/exp09_rgn_eidolon_jungle/camp_ej_chest_wood_small_closed002', 1190), + (21492, 20290, '_exp09/objects/exp09_rgn_eidolon_jungle/camp_ej_crate_small_long001', 1190), + (21493, 20291, '_exp09/objects/exp09_rgn_eidolon_jungle/camp_ej_crate_small001', 1190), + (21494, 20292, '_exp09/objects/exp09_rgn_eidolon_jungle/camp_ej_flask_leather001', 1190), + (21495, 20293, '_exp09/objects/exp09_rgn_eidolon_jungle/camp_ej_forge01', 1190), + (21496, 20294, '_exp09/objects/exp09_rgn_eidolon_jungle/camp_ej_hum_forge01', 1190), + (21497, 20295, '_exp09/objects/exp09_rgn_eidolon_jungle/camp_ej_labbeaker_large_capped_redgoo001', 1190), + (21498, 20296, '_exp09/objects/exp09_rgn_eidolon_jungle/camp_ej_lantern_handledwn', 1190), + (21499, 20297, '_exp09/objects/exp09_rgn_eidolon_jungle/camp_ej_weaponrack001', 1190), + (21500, 20298, 'accessories/wearable_items/cloak/exp09/cloak_galvanic_mauve', 1190), + (21501, 20299, 'accessories/wearable_items/cloak/exp09/cloak_galvanic_red', 1190), + (21502, 20300, 'staticobjects/mailboxes/ethernere_mailbox01', 1190), + (21503, 20301, 'accessories/wieldable_items/weapons/talisman/doll/lizardman_frog_fear_secondary', 1190), + (21504, 20302, 'accessories/wieldable_items/weapons/talisman/doll/lizardman_frog_secondary', 1190), + (21505, 20303, 'creatures/mounts/skyshrine_drake_mount/skyshrine_drake_mount_base', 1190), + (21506, 20304, '_exp09/characters/monsters/cookie_man/gingerbread_man1', 1190), + (21507, 20305, '_exp09/characters/monsters/cookie_man/gingerbread_man1_chocolate', 1190), + (21508, 20306, '_exp09/characters/monsters/cookie_man/gingerbread_man1_dark', 1190), + (21509, 20307, '_exp09/characters/monsters/cookie_man/gingerbread_man1_sugar', 1190), + (21510, 20308, '_exp09/characters/monsters/cookie_man/gingerbread_man2', 1190), + (21511, 20309, '_exp09/characters/monsters/cookie_man/gingerbread_man2_chocolate', 1190), + (21512, 20310, '_exp09/characters/monsters/cookie_man/gingerbread_man2_dark', 1190), + (21513, 20311, '_exp09/characters/monsters/cookie_man/gingerbread_man2_sugar', 1190), + (21514, 20312, '_exp09/characters/monsters/cookie_man/gingerbread_man3', 1190), + (21515, 20313, '_exp09/characters/monsters/cookie_man/gingerbread_man3_chocolate', 1190), + (21516, 20314, '_exp09/characters/monsters/cookie_man/gingerbread_man3_dark', 1190), + (21517, 20315, '_exp09/characters/monsters/cookie_man/gingerbread_man3_sugar', 1190), + (21518, 20316, 'staticobjects/soe_wallet/sc_painting_wurmbone03', 1190), + (21519, 20317, 'staticobjects/soe_wallet/sc_painting_wurmbone02', 1190), + (21520, 20318, 'staticobjects/_exp09/sc_painting_skyshrine02', 1190), + (21521, 20319, 'staticobjects/_exp09/sc_painting_wurmbone04', 1190), + (21522, 20320, 'staticobjects/_exp09/sc_painting_wurmbone01', 1190), + (21523, 20321, 'staticobjects/_exp09/sc_painting_eidolon01', 1190), + (21524, 20322, 'staticobjects/tcg/tcg_painting77_loyalist', 1190), + (21525, 20323, 'staticobjects/tcg/tcg_painting76_antonia', 1190), + (21526, 20324, 'accessories/wearable_items/cloak/exp09/scarf/cloak_scarf_blue_snowflakes', 1190), + (21527, 20325, 'accessories/wearable_items/cloak/exp09/scarf/cloak_scarf_striped_blue', 1190), + (21528, 20326, 'accessories/wearable_items/cloak/exp09/scarf/cloak_scarf_striped_green', 1190), + (21529, 20327, 'accessories/wearable_items/cloak/exp09/scarf/cloak_scarf_striped_purple', 1190), + (21530, 20328, 'accessories/wearable_items/cloak/exp09/scarf/cloak_scarf_striped_red', 1190), + (21531, 20329, 'accessories/wearable_items/cloak/exp09/scarf/cloak_scarf_striped_white', 1190), + (21532, 20330, 'accessories/wearable_items/cloak/exp09/scarf/cloak_scarf_striped1', 1190), + (21533, 20331, 'accessories/wearable_items/cloak/exp09/scarf/neckrings/cloak_scarf_neckring_solidblue', 1190), + (21534, 20332, 'accessories/wearable_items/cloak/exp09/scarf/neckrings/cloak_scarf_neckring_striped', 1190), + (21535, 20333, 'accessories/wearable_items/cloak/exp09/scarf/neckrings/cloak_scarf_neckring_stripedblue', 1190), + (21536, 20334, 'accessories/wearable_items/cloak/exp09/scarf/neckrings/cloak_scarf_neckring_stripedgreen', 1190), + (21537, 20335, 'accessories/wearable_items/cloak/exp09/scarf/neckrings/cloak_scarf_neckring_stripedpurple', 1190), + (21538, 20336, 'accessories/wearable_items/cloak/exp09/scarf/neckrings/cloak_scarf_neckring_stripedred', 1190), + (21539, 20337, 'accessories/wearable_items/cloak/exp09/scarf/neckrings/cloak_scarf_neckring_stripedwhite', 1190), + (21540, 20338, 'accessories/wearable_items/cloak/exp09/cloak_thorns', 1190), + (21541, 20339, 'accessories/wearable_items/cloak/exp09/cloak_thorns_blue', 1190), + (21542, 20340, 'accessories/wearable_items/cloak/exp09/cloak_thorns_collar', 1190), + (21543, 20341, 'accessories/wearable_items/cloak/exp09/cloak_thorns_collar_blue', 1190), + (21544, 20342, 'accessories/wearable_items/cloak/exp09/cloak_thorns_collar_green', 1190), + (21545, 20343, 'accessories/wearable_items/cloak/exp09/cloak_thorns_green', 1190), + (21546, 20344, 'creatures/mounts/player_wing/player_wing_frostfell', 1190), + (21547, 20345, 'accessories/wearable_items/snapons/backpacks/backpack_pirate/backpack_pirate_base', 57000), + (21548, 20346, 'accessories/wearable_items/snapons/backpacks/backpack_pirate_swivel/backpack_pirate_swivel_bag01', 57000), + (21549, 20347, 'accessories/wearable_items/snapons/backpacks/backpack_pirate_swivel/backpack_pirate_swivel_bag02', 57000), + (21550, 20348, 'accessories/wearable_items/snapons/backpacks/backpack_pirate_swivel/backpack_pirate_swivel_bag03', 57000), + (21551, 20349, 'accessories/wearable_items/snapons/backpacks/backpack_pirate_swivel/backpack_pirate_swivel_ring_left', 57000), + (21552, 20350, 'accessories/wearable_items/snapons/backpacks/backpack_pirate_swivel/backpack_pirate_swivel_ring_right', 57000), + (21553, 20351, 'accessories/wearable_items/snapons/backpacks/backpack_pirate_swivel/backpack_pirate_swivel_bag01_canary', 57000), + (21554, 20352, 'accessories/wearable_items/snapons/backpacks/backpack_pirate_swivel/backpack_pirate_swivel_bag01_macaw', 57000), + (21555, 20353, 'accessories/wearable_items/snapons/backpacks/backpack_pirate_swivel/backpack_pirate_swivel_bag02_canary', 57000), + (21556, 20354, 'accessories/wearable_items/snapons/backpacks/backpack_pirate_swivel/backpack_pirate_swivel_bag02_macaw', 57000), + (21557, 20355, 'accessories/wearable_items/snapons/backpacks/backpack_pirate_swivel/backpack_pirate_swivel_bag03_canary', 57000), + (21558, 20356, 'accessories/wearable_items/snapons/backpacks/backpack_pirate_swivel/backpack_pirate_swivel_bag03_macaw', 57000), + (21559, 20357, 'accessories/wearable_items/snapons/backpacks/backpack_pirate_swivel/backpack_pirate_swivel_ring_left_canary', 57000), + (21560, 20358, 'accessories/wearable_items/snapons/backpacks/backpack_pirate_swivel/backpack_pirate_swivel_ring_left_macaw', 57000), + (21561, 20359, 'accessories/wearable_items/snapons/backpacks/backpack_pirate_swivel/backpack_pirate_swivel_ring_right_canary', 57000), + (21562, 20360, 'accessories/wearable_items/snapons/backpacks/backpack_pirate_swivel/backpack_pirate_swivel_ring_right_macaw', 57000), + (21563, 20361, 'accessories/wearable_items/snapons/backpacks/backpack_pirate/backpack_pirate_canary', 57000), + (21564, 20362, 'accessories/wearable_items/snapons/backpacks/backpack_pirate/backpack_pirate_macaw', 57000), + (21565, 20363, 'accessories/wearable_items/profesion_hats/frostfell_reindeer_helm/antler_left', 57000), + (21566, 20364, 'accessories/wearable_items/profesion_hats/frostfell_reindeer_helm/antler_normal_left', 57000), + (21567, 20365, 'accessories/wearable_items/profesion_hats/frostfell_reindeer_helm/antler_normal_right', 57000), + (21568, 20366, 'accessories/wearable_items/profesion_hats/frostfell_reindeer_helm/antler_right', 57000), + (21569, 20367, 'accessories/wearable_items/profesion_hats/frostfell_reindeer_helm/frostfell_reindeer_helm', 57000), + (21570, 20368, 'accessories/wearable_items/profesion_hats/frostfell_reindeer_helm/frostfell_reindeer_helm_trinkets', 57000), + (21571, 20369, 'accessories/wearable_items/profesion_hats/frostfell_reindeer_helm/frostfell_trinket_01', 57000), + (21572, 20370, 'accessories/wearable_items/profesion_hats/frostfell_reindeer_helm/frostfell_trinket_02', 57000), + (21573, 20371, 'accessories/wearable_items/profesion_hats/frostfell_reindeer_helm/frostfell_trinket_03', 57000), + (21574, 20372, 'accessories/wearable_items/profesion_hats/frostfell_reindeer_helm/frostfell_reindeer_helm_trinkets_blue', 57000), + (21575, 20373, 'accessories/wearable_items/profesion_hats/frostfell_reindeer_helm/frostfell_reindeer_helm_trinkets_green', 57000), + (21576, 20374, 'accessories/wearable_items/profesion_hats/frostfell_reindeer_helm/frostfell_reindeer_helm_trinkets_red', 57000), + (21577, 20375, 'accessories/wearable_items/elemental_crowns/peppermint_candy_crown', 57000), + (21578, 20376, 'staticobjects/housing_portal_objects/vision_home_ferry01', 57000), + (21579, 20377, 'staticobjects/liveevent/frostfell/dpo_bauble_holly_berries_ceiling', 57000), + (21580, 20378, 'staticobjects/liveevent/frostfell/dpo_bauble_holly_berries_wall', 57000), + (21581, 20379, 'staticobjects/liveevent/frostfell/dpo_candycane_gumdrop_cordon01', 57000), + (21582, 20380, 'staticobjects/liveevent/frostfell/dpo_candycane_gumdrop_cordon02', 57000), + (21583, 20381, 'staticobjects/liveevent/frostfell/dpo_candycane_gumdrop_cordon03', 57000), + (21584, 20382, 'accessories/wearable_items/_exp09/starter_armor/paladin/chest', 57000), + (21585, 20383, 'accessories/wearable_items/_exp09/starter_armor/paladin/feet', 57000), + (21586, 20384, 'accessories/wearable_items/_exp09/starter_armor/paladin/forearms', 57000), + (21587, 20385, 'accessories/wearable_items/_exp09/starter_armor/paladin/hands', 57000), + (21588, 20386, 'accessories/wearable_items/_exp09/starter_armor/paladin/head', 57000), + (21589, 20387, 'accessories/wearable_items/_exp09/starter_armor/paladin/left', 57000), + (21590, 20388, 'accessories/wearable_items/_exp09/starter_armor/paladin/legs', 57000), + (21591, 20389, 'accessories/wearable_items/_exp09/starter_armor/paladin/legs_noskirt', 57000), + (21592, 20390, 'accessories/wearable_items/_exp09/starter_armor/paladin/right', 57000), + (21593, 20391, 'accessories/wearable_items/_exp09/starter_armor/paladin/shoulders', 57000), + (21594, 20392, 'accessories/wearable_items/_exp09/starter_armor/paladin/shoulders_nopauldrons', 57000), + (21595, 20393, 'accessories/wearable_items/_exp09/starter_armor/paladin/skirt', 57000), + (21596, 20394, 'accessories/wearable_items/_exp09/starter_armor/shadowknight/chest', 57000), + (21597, 20395, 'accessories/wearable_items/_exp09/starter_armor/shadowknight/feet', 57000), + (21598, 20396, 'accessories/wearable_items/_exp09/starter_armor/shadowknight/forearms', 57000), + (21599, 20397, 'accessories/wearable_items/_exp09/starter_armor/shadowknight/hands', 57000), + (21600, 20398, 'accessories/wearable_items/_exp09/starter_armor/shadowknight/head', 57000), + (21601, 20399, 'accessories/wearable_items/_exp09/starter_armor/shadowknight/left', 57000), + (21602, 20400, 'accessories/wearable_items/_exp09/starter_armor/shadowknight/legs', 57000), + (21603, 20401, 'accessories/wearable_items/_exp09/starter_armor/shadowknight/legs_noskirt', 57000), + (21604, 20402, 'accessories/wearable_items/_exp09/starter_armor/shadowknight/right', 57000), + (21605, 20403, 'accessories/wearable_items/_exp09/starter_armor/shadowknight/shoulders', 57000), + (21606, 20404, 'accessories/wearable_items/_exp09/starter_armor/shadowknight/shoulders_nopauldrons', 57000), + (21607, 20405, 'accessories/wearable_items/_exp09/starter_armor/shadowknight/skirt', 57000), + (21608, 20406, 'projectiles/throwing_mantis_star', 57000), + (21609, 20407, 'staticobjects/tcg/tcg_painting75_icefury', 57000), + (21610, 20408, 'accessories/wearable_items/_exp09/starter_armor/coercer/chest', 57000), + (21611, 20409, 'accessories/wearable_items/_exp09/starter_armor/coercer/feet', 57000), + (21612, 20410, 'accessories/wearable_items/_exp09/starter_armor/coercer/hands', 57000), + (21613, 20411, 'accessories/wearable_items/_exp09/starter_armor/coercer/head', 57000), + (21614, 20412, 'accessories/wearable_items/_exp09/starter_armor/coercer/hood', 57000), + (21615, 20413, 'accessories/wearable_items/_exp09/starter_armor/coercer/pants', 57000), + (21616, 20414, 'accessories/wearable_items/_exp09/starter_armor/coercer/skirt', 57000), + (21617, 20415, 'accessories/wearable_items/_exp09/starter_armor/conjuror/chest', 57000), + (21618, 20416, 'accessories/wearable_items/_exp09/starter_armor/conjuror/feet', 57000), + (21619, 20417, 'accessories/wearable_items/_exp09/starter_armor/conjuror/hands', 57000), + (21620, 20418, 'accessories/wearable_items/_exp09/starter_armor/conjuror/head', 57000), + (21621, 20419, 'accessories/wearable_items/_exp09/starter_armor/conjuror/hood', 57000), + (21622, 20420, 'accessories/wearable_items/_exp09/starter_armor/conjuror/pants', 57000), + (21623, 20421, 'accessories/wearable_items/_exp09/starter_armor/conjuror/skirt', 57000), + (21624, 20422, 'accessories/wearable_items/_exp09/starter_armor/handsfeet_dark/feet', 57000), + (21625, 20423, 'accessories/wearable_items/_exp09/starter_armor/handsfeet_dark/hands', 57000), + (21626, 20424, 'accessories/wearable_items/_exp09/starter_armor/handsfeet_light/feet', 57000), + (21627, 20425, 'accessories/wearable_items/_exp09/starter_armor/handsfeet_light/hands', 57000), + (21628, 20426, 'accessories/wearable_items/_exp09/starter_armor/illusionist/chest', 57000), + (21629, 20427, 'accessories/wearable_items/_exp09/starter_armor/illusionist/feet', 57000), + (21630, 20428, 'accessories/wearable_items/_exp09/starter_armor/illusionist/hands', 57000), + (21631, 20429, 'accessories/wearable_items/_exp09/starter_armor/illusionist/head', 57000), + (21632, 20430, 'accessories/wearable_items/_exp09/starter_armor/illusionist/hood', 57000), + (21633, 20431, 'accessories/wearable_items/_exp09/starter_armor/illusionist/pants', 57000), + (21634, 20432, 'accessories/wearable_items/_exp09/starter_armor/illusionist/skirt', 57000), + (21635, 20433, 'accessories/wearable_items/_exp09/starter_armor/necromancer/chest', 57000), + (21636, 20434, 'accessories/wearable_items/_exp09/starter_armor/necromancer/feet', 57000), + (21637, 20435, 'accessories/wearable_items/_exp09/starter_armor/necromancer/hands', 57000), + (21638, 20436, 'accessories/wearable_items/_exp09/starter_armor/necromancer/head', 57000), + (21639, 20437, 'accessories/wearable_items/_exp09/starter_armor/necromancer/hood', 57000), + (21640, 20438, 'accessories/wearable_items/_exp09/starter_armor/necromancer/pants', 57000), + (21641, 20439, 'accessories/wearable_items/_exp09/starter_armor/necromancer/skirt', 57000), + (21642, 20440, 'accessories/wearable_items/_exp09/starter_armor/warlock/chest', 57000), + (21643, 20441, 'accessories/wearable_items/_exp09/starter_armor/warlock/feet', 57000), + (21644, 20442, 'accessories/wearable_items/_exp09/starter_armor/warlock/hands', 57000), + (21645, 20443, 'accessories/wearable_items/_exp09/starter_armor/warlock/head', 57000), + (21646, 20444, 'accessories/wearable_items/_exp09/starter_armor/warlock/hood', 57000), + (21647, 20445, 'accessories/wearable_items/_exp09/starter_armor/warlock/pants', 57000), + (21648, 20446, 'accessories/wearable_items/_exp09/starter_armor/warlock/skirt', 57000), + (21649, 20447, 'accessories/wearable_items/_exp09/starter_armor/wizard/chest', 57000), + (21650, 20448, 'accessories/wearable_items/_exp09/starter_armor/wizard/feet', 57000), + (21651, 20449, 'accessories/wearable_items/_exp09/starter_armor/wizard/hands', 57000), + (21652, 20450, 'accessories/wearable_items/_exp09/starter_armor/wizard/head', 57000), + (21653, 20451, 'accessories/wearable_items/_exp09/starter_armor/wizard/hood', 57000), + (21654, 20452, 'accessories/wearable_items/_exp09/starter_armor/wizard/pants', 57000), + (21655, 20453, 'accessories/wearable_items/_exp09/starter_armor/wizard/skirt', 57000), + (21656, 20454, 'creatures/mounts/player_wing/player_wing_frostfell_pine', 57000), + (21657, 20455, 'creatures/mounts/player_wing/player_wing_frostfell_branch', 57000), + (21658, 20456, 'accessories/wearable_items/_exp09/starter_armor/assassin/chest', 57000), + (21659, 20457, 'accessories/wearable_items/_exp09/starter_armor/assassin/feet', 57000), + (21660, 20458, 'accessories/wearable_items/_exp09/starter_armor/assassin/forearms', 57000), + (21661, 20459, 'accessories/wearable_items/_exp09/starter_armor/assassin/hands', 57000), + (21662, 20460, 'accessories/wearable_items/_exp09/starter_armor/assassin/head', 57000), + (21663, 20461, 'accessories/wearable_items/_exp09/starter_armor/assassin/legs', 57000), + (21664, 20462, 'accessories/wearable_items/_exp09/starter_armor/assassin/legs_noskirt', 57000), + (21665, 20463, 'accessories/wearable_items/_exp09/starter_armor/assassin/shoulders', 57000), + (21666, 20464, 'accessories/wearable_items/_exp09/starter_armor/assassin/skirt', 57000), + (21667, 20465, 'accessories/wearable_items/_exp09/starter_armor/beastlord/chest', 57000), + (21668, 20466, 'accessories/wearable_items/_exp09/starter_armor/beastlord/feet', 57000), + (21669, 20467, 'accessories/wearable_items/_exp09/starter_armor/beastlord/forearms', 57000), + (21670, 20468, 'accessories/wearable_items/_exp09/starter_armor/beastlord/hands', 57000), + (21671, 20469, 'accessories/wearable_items/_exp09/starter_armor/beastlord/head', 57000), + (21672, 20470, 'accessories/wearable_items/_exp09/starter_armor/beastlord/legs', 57000), + (21673, 20471, 'accessories/wearable_items/_exp09/starter_armor/beastlord/legs_noskirt', 57000), + (21674, 20472, 'accessories/wearable_items/_exp09/starter_armor/beastlord/shoulders', 57000), + (21675, 20473, 'accessories/wearable_items/_exp09/starter_armor/beastlord/skirt', 57000), + (21676, 20474, 'accessories/wearable_items/_exp09/starter_armor/brigand/chest', 57000), + (21677, 20475, 'accessories/wearable_items/_exp09/starter_armor/brigand/feet', 57000), + (21678, 20476, 'accessories/wearable_items/_exp09/starter_armor/brigand/hands', 57000), + (21679, 20477, 'accessories/wearable_items/_exp09/starter_armor/brigand/legs', 57000), + (21680, 20478, 'accessories/wearable_items/_exp09/starter_armor/brigand/shoulders', 57000), + (21681, 20479, 'accessories/wearable_items/_exp09/starter_armor/brigand/skirt', 57000), + (21682, 20480, 'accessories/wearable_items/_exp09/starter_armor/brigand/belt/skirt 2', 57000), + (21683, 20481, 'accessories/wearable_items/_exp09/starter_armor/brigand/belt/skirt', 57000), + (21684, 20482, 'accessories/wearable_items/_exp09/starter_armor/dirge/chest', 57000), + (21685, 20483, 'accessories/wearable_items/_exp09/starter_armor/dirge/feet', 57000), + (21686, 20484, 'accessories/wearable_items/_exp09/starter_armor/dirge/forearms', 57000), + (21687, 20485, 'accessories/wearable_items/_exp09/starter_armor/dirge/hands', 57000), + (21688, 20486, 'accessories/wearable_items/_exp09/starter_armor/dirge/head', 57000), + (21689, 20487, 'accessories/wearable_items/_exp09/starter_armor/dirge/legs', 57000), + (21690, 20488, 'accessories/wearable_items/_exp09/starter_armor/dirge/shoulders', 57000), + (21691, 20489, 'accessories/wearable_items/_exp09/starter_armor/ranger/chest', 57000), + (21692, 20490, 'accessories/wearable_items/_exp09/starter_armor/ranger/feet', 57000), + (21693, 20491, 'accessories/wearable_items/_exp09/starter_armor/ranger/forearms', 57000), + (21694, 20492, 'accessories/wearable_items/_exp09/starter_armor/ranger/hands', 57000), + (21695, 20493, 'accessories/wearable_items/_exp09/starter_armor/ranger/head', 57000), + (21696, 20494, 'accessories/wearable_items/_exp09/starter_armor/ranger/legs', 57000), + (21697, 20495, 'accessories/wearable_items/_exp09/starter_armor/ranger/legs_noskirt', 57000), + (21698, 20496, 'accessories/wearable_items/_exp09/starter_armor/ranger/shoulders', 57000), + (21699, 20497, 'accessories/wearable_items/_exp09/starter_armor/ranger/skirt', 57000), + (21700, 20498, 'accessories/wearable_items/_exp09/starter_armor/swashbuckler/belt/skirt 2', 57000), + (21701, 20499, 'accessories/wearable_items/_exp09/starter_armor/swashbuckler/belt/skirt', 57000), + (21702, 20500, 'accessories/wearable_items/_exp09/starter_armor/swashbuckler/chest', 57000), + (21703, 20501, 'accessories/wearable_items/_exp09/starter_armor/swashbuckler/feet', 57000), + (21704, 20502, 'accessories/wearable_items/_exp09/starter_armor/swashbuckler/hands', 57000), + (21705, 20503, 'accessories/wearable_items/_exp09/starter_armor/swashbuckler/legs', 57000), + (21706, 20504, 'accessories/wearable_items/_exp09/starter_armor/swashbuckler/shoulders', 57000), + (21707, 20505, 'accessories/wearable_items/_exp09/starter_armor/swashbuckler/skirt', 57000), + (21708, 20506, 'accessories/wearable_items/_exp09/starter_armor/troubadour/chest', 57000), + (21709, 20507, 'accessories/wearable_items/_exp09/starter_armor/troubadour/feet', 57000), + (21710, 20508, 'accessories/wearable_items/_exp09/starter_armor/troubadour/forearms', 57000), + (21711, 20509, 'accessories/wearable_items/_exp09/starter_armor/troubadour/hands', 57000), + (21712, 20510, 'accessories/wearable_items/_exp09/starter_armor/troubadour/head', 57000), + (21713, 20511, 'accessories/wearable_items/_exp09/starter_armor/troubadour/legs', 57000), + (21714, 20512, 'accessories/wearable_items/_exp09/starter_armor/troubadour/shoulders', 57000), + (21715, 20513, 'creatures/mounts/player_wing/player_wing_frostfell_candy', 57000), + (21716, 20514, 'accessories/wearable_items/_exp09/starter_armor/warden/chest', 57000), + (21717, 20515, 'accessories/wearable_items/_exp09/starter_armor/warden/feet', 57000), + (21718, 20516, 'accessories/wearable_items/_exp09/starter_armor/warden/forearms', 57000), + (21719, 20517, 'accessories/wearable_items/_exp09/starter_armor/warden/hands', 57000), + (21720, 20518, 'accessories/wearable_items/_exp09/starter_armor/warden/head', 57000), + (21721, 20519, 'accessories/wearable_items/_exp09/starter_armor/warden/legs', 57000), + (21722, 20520, 'accessories/wearable_items/_exp09/starter_armor/warden/legs_noskirt', 57000), + (21723, 20521, 'accessories/wearable_items/_exp09/starter_armor/warden/shoulders', 57000), + (21724, 20522, 'accessories/wearable_items/_exp09/starter_armor/warden/skirt', 57000), + (21725, 20523, 'accessories/wearable_items/_exp09/starter_armor/fury/chest', 57000), + (21726, 20524, 'accessories/wearable_items/_exp09/starter_armor/fury/feet', 57000), + (21727, 20525, 'accessories/wearable_items/_exp09/starter_armor/fury/forearms', 57000), + (21728, 20526, 'accessories/wearable_items/_exp09/starter_armor/fury/hands', 57000), + (21729, 20527, 'accessories/wearable_items/_exp09/starter_armor/fury/head', 57000), + (21730, 20528, 'accessories/wearable_items/_exp09/starter_armor/fury/legs', 57000), + (21731, 20529, 'accessories/wearable_items/_exp09/starter_armor/fury/legs_noskirt', 57000), + (21732, 20530, 'accessories/wearable_items/_exp09/starter_armor/fury/shoulders', 57000), + (21733, 20531, 'accessories/wearable_items/_exp09/starter_armor/fury/skirt', 57000), + (21734, 20532, 'accessories/wearable_items/_exp09/starter_armor/defiler/chest', 57000), + (21735, 20533, 'accessories/wearable_items/_exp09/starter_armor/defiler/feet', 57000), + (21736, 20534, 'accessories/wearable_items/_exp09/starter_armor/defiler/forearms', 57000), + (21737, 20535, 'accessories/wearable_items/_exp09/starter_armor/defiler/hands', 57000), + (21738, 20536, 'accessories/wearable_items/_exp09/starter_armor/defiler/head', 57000), + (21739, 20537, 'accessories/wearable_items/_exp09/starter_armor/defiler/legs', 57000), + (21740, 20538, 'accessories/wearable_items/_exp09/starter_armor/defiler/shoulders', 57000), + (21741, 20539, 'accessories/wearable_items/_exp09/starter_armor/mystic/chest', 57000), + (21742, 20540, 'accessories/wearable_items/_exp09/starter_armor/mystic/feet', 57000), + (21743, 20541, 'accessories/wearable_items/_exp09/starter_armor/mystic/forearms', 57000), + (21744, 20542, 'accessories/wearable_items/_exp09/starter_armor/mystic/hands', 57000), + (21745, 20543, 'accessories/wearable_items/_exp09/starter_armor/mystic/head', 57000), + (21746, 20544, 'accessories/wearable_items/_exp09/starter_armor/mystic/legs', 57000), + (21747, 20545, 'accessories/wearable_items/_exp09/starter_armor/mystic/shoulders', 57000), + (21748, 20546, '_exp09/characters/tool_users/illithid/illithid_boss', 57000), + (21749, 20547, '_exp09/characters/tool_users/illithid/illithid_boss_staff', 57000), + (21750, 20548, 'accessories/wearable_items/profesion_hats/frostfell_reindeer_helm/antler_left_blue', 57000), + (21751, 20549, 'accessories/wearable_items/profesion_hats/frostfell_reindeer_helm/antler_left_green', 57000), + (21752, 20550, 'accessories/wearable_items/profesion_hats/frostfell_reindeer_helm/antler_left_red', 57000), + (21753, 20551, 'accessories/wearable_items/profesion_hats/frostfell_reindeer_helm/antler_right_blue', 57000), + (21754, 20552, 'accessories/wearable_items/profesion_hats/frostfell_reindeer_helm/antler_right_green', 57000), + (21755, 20553, 'accessories/wearable_items/profesion_hats/frostfell_reindeer_helm/antler_right_red', 57000), + (21756, 20554, 'staticobjects/soe_wallet/xmas_item_santa_sleigh_02_dpo', 57000), + (21757, 20555, 'staticobjects/soe_wallet/frostfell_snowmankit_branch01_dpo', 57000), + (21758, 20556, 'staticobjects/soe_wallet/frostfell_snowmankit_carrot01_dpo', 57000), + (21759, 20557, 'staticobjects/soe_wallet/frostfell_snowmankit_coal01_dpo', 57000), + (21760, 20558, 'staticobjects/soe_wallet/frostfell_snowmankit_snowball01_dpo', 57000), + (21761, 20559, 'staticobjects/soe_wallet/icethrone01_dpo', 57000), + (21762, 20560, 'staticobjects/liveevent/frostfell/dpo_panel_gingerbread', 57000), + (21763, 20561, 'staticobjects/liveevent/frostfell/houseblock_1x1_column_gingerbread', 57000), + (21764, 20562, 'staticobjects/liveevent/frostfell/houseblock_1x2_column_gingerbread', 57000), + (21765, 20563, 'staticobjects/liveevent/frostfell/houseblock_1x2_dividerblock_gingerbread', 57000), + (21766, 20564, 'staticobjects/liveevent/frostfell/houseblock_1xhalf_block_gingerbread', 57000), + (21767, 20565, 'staticobjects/liveevent/frostfell/houseblock_2x2_dividerblock_gingerbread', 57000), + (21768, 20566, 'staticobjects/liveevent/frostfell/houseblock_rail_gingerbread', 57000), + (21769, 20567, 'staticobjects/liveevent/frostfell/houseblock_roundtile_gingerbread', 57000), + (21770, 20568, 'staticobjects/liveevent/frostfell/houseblock_stair_gingerbread', 57000), + (21771, 20569, 'staticobjects/liveevent/frostfell/housecube_1x1_block_gingerbread', 57000), + (21772, 20570, '_exp08/characters/monsters/insect_queen/insect_queen_ghost', 57000), + (21773, 20571, '_exp08/characters/monsters/insect_queen/insect_queen_ghost_red', 57000), + (21774, 20572, '_exp07/characters/tool_users/othmir/othmir_zombie_base', 57000), + (21775, 20573, 'staticobjects/liveevent/frostfell/dpo_snowglobe_cardinward01', 57000), + (21776, 20574, 'accessories/wearable_items/_exp09/wyvern_armors/chain_green/chest', 57000), + (21777, 20575, 'accessories/wearable_items/_exp09/wyvern_armors/chain_green/feet', 57000), + (21778, 20576, 'accessories/wearable_items/_exp09/wyvern_armors/chain_green/forearms', 57000), + (21779, 20577, 'accessories/wearable_items/_exp09/wyvern_armors/chain_green/hands', 57000), + (21780, 20578, 'accessories/wearable_items/_exp09/wyvern_armors/chain_green/head', 57000), + (21781, 20579, 'accessories/wearable_items/_exp09/wyvern_armors/chain_green/legs', 57000), + (21782, 20580, 'accessories/wearable_items/_exp09/wyvern_armors/chain_green/shoulders', 57000), + (21783, 20581, 'accessories/wearable_items/_exp09/wyvern_armors/chain_green/shoulders_epic', 57000), + (21784, 20582, 'accessories/wearable_items/_exp09/wyvern_armors/chain_red/chest', 57000), + (21785, 20583, 'accessories/wearable_items/_exp09/wyvern_armors/chain_red/feet', 57000), + (21786, 20584, 'accessories/wearable_items/_exp09/wyvern_armors/chain_red/forearms', 57000), + (21787, 20585, 'accessories/wearable_items/_exp09/wyvern_armors/chain_red/hands', 57000), + (21788, 20586, 'accessories/wearable_items/_exp09/wyvern_armors/chain_red/head', 57000), + (21789, 20587, 'accessories/wearable_items/_exp09/wyvern_armors/chain_red/legs', 57000), + (21790, 20588, 'accessories/wearable_items/_exp09/wyvern_armors/chain_red/shoulders', 57000), + (21791, 20589, 'accessories/wearable_items/_exp09/wyvern_armors/chain_red/shoulders_epic', 57000), + (21792, 20590, 'accessories/wearable_items/_exp09/wyvern_armors/gi_green/chest', 57000), + (21793, 20591, 'accessories/wearable_items/_exp09/wyvern_armors/gi_green/feet', 57000), + (21794, 20592, 'accessories/wearable_items/_exp09/wyvern_armors/gi_green/hands', 57000), + (21795, 20593, 'accessories/wearable_items/_exp09/wyvern_armors/gi_green/head', 57000), + (21796, 20594, 'accessories/wearable_items/_exp09/wyvern_armors/gi_green/legs', 57000), + (21797, 20595, 'accessories/wearable_items/_exp09/wyvern_armors/gi_green/shoulders', 57000), + (21798, 20596, 'accessories/wearable_items/_exp09/wyvern_armors/gi_green/skirt', 57000), + (21799, 20597, 'accessories/wearable_items/_exp09/wyvern_armors/gi_green/head/head', 57000), + (21800, 20598, 'accessories/wearable_items/_exp09/wyvern_armors/gi_green/belt/skirt 2', 57000), + (21801, 20599, 'accessories/wearable_items/_exp09/wyvern_armors/gi_green/belt/skirt', 57000), + (21802, 20600, 'accessories/wearable_items/_exp09/wyvern_armors/gi_red/chest', 57000), + (21803, 20601, 'accessories/wearable_items/_exp09/wyvern_armors/gi_red/feet', 57000), + (21804, 20602, 'accessories/wearable_items/_exp09/wyvern_armors/gi_red/hands', 57000), + (21805, 20603, 'accessories/wearable_items/_exp09/wyvern_armors/gi_red/head', 57000), + (21806, 20604, 'accessories/wearable_items/_exp09/wyvern_armors/gi_red/legs', 57000), + (21807, 20605, 'accessories/wearable_items/_exp09/wyvern_armors/gi_red/shoulders', 57000), + (21808, 20606, 'accessories/wearable_items/_exp09/wyvern_armors/gi_red/skirt', 57000), + (21809, 20607, 'accessories/wearable_items/_exp09/wyvern_armors/gi_red/belt/skirt 2', 57000), + (21810, 20608, 'accessories/wearable_items/_exp09/wyvern_armors/gi_red/belt/skirt', 57000), + (21811, 20609, 'accessories/wearable_items/_exp09/wyvern_armors/gi_red/head/head', 57000), + (21812, 20610, 'accessories/wearable_items/_exp09/wyvern_armors/leather_green/chest', 57000), + (21813, 20611, 'accessories/wearable_items/_exp09/wyvern_armors/leather_green/feet', 57000), + (21814, 20612, 'accessories/wearable_items/_exp09/wyvern_armors/leather_green/forearms', 57000), + (21815, 20613, 'accessories/wearable_items/_exp09/wyvern_armors/leather_green/hands', 57000), + (21816, 20614, 'accessories/wearable_items/_exp09/wyvern_armors/leather_green/head', 57000), + (21817, 20615, 'accessories/wearable_items/_exp09/wyvern_armors/leather_green/legs', 57000), + (21818, 20616, 'accessories/wearable_items/_exp09/wyvern_armors/leather_green/legs_noskirt', 57000), + (21819, 20617, 'accessories/wearable_items/_exp09/wyvern_armors/leather_green/shoulders', 57000), + (21820, 20618, 'accessories/wearable_items/_exp09/wyvern_armors/leather_green/shoulders_epic', 57000), + (21821, 20619, 'accessories/wearable_items/_exp09/wyvern_armors/leather_green/skirt', 57000), + (21822, 20620, 'accessories/wearable_items/_exp09/wyvern_armors/leather_red/chest', 57000), + (21823, 20621, 'accessories/wearable_items/_exp09/wyvern_armors/leather_red/feet', 57000), + (21824, 20622, 'accessories/wearable_items/_exp09/wyvern_armors/leather_red/forearms', 57000), + (21825, 20623, 'accessories/wearable_items/_exp09/wyvern_armors/leather_red/hands', 57000), + (21826, 20624, 'accessories/wearable_items/_exp09/wyvern_armors/leather_red/head', 57000), + (21827, 20625, 'accessories/wearable_items/_exp09/wyvern_armors/leather_red/legs', 57000), + (21828, 20626, 'accessories/wearable_items/_exp09/wyvern_armors/leather_red/legs_noskirt', 57000), + (21829, 20627, 'accessories/wearable_items/_exp09/wyvern_armors/leather_red/shoulders', 57000), + (21830, 20628, 'accessories/wearable_items/_exp09/wyvern_armors/leather_red/shoulders_epic', 57000), + (21831, 20629, 'accessories/wearable_items/_exp09/wyvern_armors/leather_red/skirt', 57000), + (21832, 20630, 'accessories/wearable_items/_exp09/wyvern_armors/robe_green/chest', 57000), + (21833, 20631, 'accessories/wearable_items/_exp09/wyvern_armors/robe_green/feet', 57000), + (21834, 20632, 'accessories/wearable_items/_exp09/wyvern_armors/robe_green/hands', 57000), + (21835, 20633, 'accessories/wearable_items/_exp09/wyvern_armors/robe_green/head_collar', 57000), + (21836, 20634, 'accessories/wearable_items/_exp09/wyvern_armors/robe_green/head_evil_conjurer', 57000), + (21837, 20635, 'accessories/wearable_items/_exp09/wyvern_armors/robe_green/pants', 57000), + (21838, 20636, 'accessories/wearable_items/_exp09/wyvern_armors/robe_green/skirt', 57000), + (21839, 20637, 'accessories/wearable_items/_exp09/wyvern_armors/robe_red/chest', 57000), + (21840, 20638, 'accessories/wearable_items/_exp09/wyvern_armors/robe_red/feet', 57000), + (21841, 20639, 'accessories/wearable_items/_exp09/wyvern_armors/robe_red/hands', 57000), + (21842, 20640, 'accessories/wearable_items/_exp09/wyvern_armors/robe_red/head_collar', 57000), + (21843, 20641, 'accessories/wearable_items/_exp09/wyvern_armors/robe_red/head_evil_conjurer', 57000), + (21844, 20642, 'accessories/wearable_items/_exp09/wyvern_armors/robe_red/pants', 57000), + (21845, 20643, 'accessories/wearable_items/_exp09/wyvern_armors/robe_red/skirt', 57000), + (21846, 20644, 'accessories/wearable_items/_exp09/wyvern_armors/snapons/shoulders_pauldron_large_green_left', 57000), + (21847, 20645, 'accessories/wearable_items/_exp09/wyvern_armors/snapons/shoulders_pauldron_large_green_right', 57000), + (21848, 20646, 'accessories/wearable_items/_exp09/wyvern_armors/snapons/shoulders_pauldron_large_red_left', 57000), + (21849, 20647, 'accessories/wearable_items/_exp09/wyvern_armors/snapons/shoulders_pauldron_large_red_right', 57000), + (21850, 20648, 'accessories/wearable_items/_exp09/wyvern_armors/snapons/shoulders_pauldron_small_green_left', 57000), + (21851, 20649, 'accessories/wearable_items/_exp09/wyvern_armors/snapons/shoulders_pauldron_small_green_right', 57000), + (21852, 20650, 'accessories/wearable_items/_exp09/wyvern_armors/snapons/shoulders_pauldron_small_red_left', 57000), + (21853, 20651, 'accessories/wearable_items/_exp09/wyvern_armors/snapons/shoulders_pauldron_small_red_right', 57000), + (21854, 20652, 'accessories/wearable_items/_exp09/wyvern_armors/vangaurd_green/chest', 57000), + (21855, 20653, 'accessories/wearable_items/_exp09/wyvern_armors/vangaurd_green/feet', 57000), + (21856, 20654, 'accessories/wearable_items/_exp09/wyvern_armors/vangaurd_green/forearms', 57000), + (21857, 20655, 'accessories/wearable_items/_exp09/wyvern_armors/vangaurd_green/hands', 57000), + (21858, 20656, 'accessories/wearable_items/_exp09/wyvern_armors/vangaurd_green/head', 57000), + (21859, 20657, 'accessories/wearable_items/_exp09/wyvern_armors/vangaurd_green/left', 57000), + (21860, 20658, 'accessories/wearable_items/_exp09/wyvern_armors/vangaurd_green/legs', 57000), + (21861, 20659, 'accessories/wearable_items/_exp09/wyvern_armors/vangaurd_green/legs_noskirt', 57000), + (21862, 20660, 'accessories/wearable_items/_exp09/wyvern_armors/vangaurd_green/right', 57000), + (21863, 20661, 'accessories/wearable_items/_exp09/wyvern_armors/vangaurd_green/shoulders', 57000), + (21864, 20662, 'accessories/wearable_items/_exp09/wyvern_armors/vangaurd_green/shoulders_epic', 57000), + (21865, 20663, 'accessories/wearable_items/_exp09/wyvern_armors/vangaurd_green/shoulders_nopauldrons', 57000), + (21866, 20664, 'accessories/wearable_items/_exp09/wyvern_armors/vangaurd_green/skirt', 57000), + (21867, 20665, 'accessories/wearable_items/_exp09/wyvern_armors/vangaurd_red/chest', 57000), + (21868, 20666, 'accessories/wearable_items/_exp09/wyvern_armors/vangaurd_red/feet', 57000), + (21869, 20667, 'accessories/wearable_items/_exp09/wyvern_armors/vangaurd_red/forearms', 57000), + (21870, 20668, 'accessories/wearable_items/_exp09/wyvern_armors/vangaurd_red/hands', 57000), + (21871, 20669, 'accessories/wearable_items/_exp09/wyvern_armors/vangaurd_red/head', 57000), + (21872, 20670, 'accessories/wearable_items/_exp09/wyvern_armors/vangaurd_red/left', 57000), + (21873, 20671, 'accessories/wearable_items/_exp09/wyvern_armors/vangaurd_red/legs', 57000), + (21874, 20672, 'accessories/wearable_items/_exp09/wyvern_armors/vangaurd_red/legs_noskirt', 57000), + (21875, 20673, 'accessories/wearable_items/_exp09/wyvern_armors/vangaurd_red/right', 57000), + (21876, 20674, 'accessories/wearable_items/_exp09/wyvern_armors/vangaurd_red/shoulders', 57000), + (21877, 20675, 'accessories/wearable_items/_exp09/wyvern_armors/vangaurd_red/shoulders_epic', 57000), + (21878, 20676, 'accessories/wearable_items/_exp09/wyvern_armors/vangaurd_red/shoulders_nopauldrons', 57000), + (21879, 20677, 'accessories/wearable_items/_exp09/wyvern_armors/vangaurd_red/skirt', 57000), + (21880, 20678, 'creatures/monsters/stagg_frostfell', 57000), + (21881, 20679, 'playerstudio/characters/cloaks/northstar_cloak/northstar_cloak', 57000), + (21882, 20680, 'playerstudio/houseitems/heroicsalesmanscrate', 57000), + (21883, 20681, 'playerstudio/houseitems/easternwalldecor', 57000), + (21884, 20682, 'playerstudio/houseitems/gothicdesk', 57000), + (21885, 20683, 'playerstudio/houseitems/victorianchair', 57000), + (21886, 20684, '_exp09/characters/monsters/catoplebas/catoplebas', 57000), + (21887, 20685, 'accessories/wieldable_items/weapons/exp09/talisman/lizardmen_frog/lizardman_frog_pc', 57000), + (21888, 20686, 'accessories/wieldable_items/weapons/exp09/talisman/lizardmen_frog/lizardman_frog_pc_fear', 57000), + (21889, 20687, 'accessories/wieldable_items/weapons/exp09/talisman/lizardmen_frog/lizardman_frog_pc_fear_secondary', 57000), + (21890, 20688, 'accessories/wieldable_items/weapons/exp09/talisman/lizardmen_frog/lizardman_frog_pc_fear_swivel', 57000), + (21891, 20689, 'accessories/wieldable_items/weapons/exp09/talisman/lizardmen_frog/lizardman_frog_pc_secondary', 57000), + (21892, 20690, 'accessories/wieldable_items/weapons/exp09/talisman/lizardmen_frog/lizardman_frog_pc_swivel', 57000), + (21893, 20691, 'accessories/wearable_items/cloak/exp09/sc_magus_cloak/sc_magus_cloak_blue', 57000), + (21894, 20692, 'accessories/wearable_items/cloak/exp09/sc_magus_cloak/sc_magus_cloak_brown', 57000), + (21895, 20693, 'accessories/wearable_items/cloak/exp09/sc_magus_cloak/sc_magus_cloak_red', 57000), + (21896, 20694, 'accessories/wearable_items/cloak/exp09/sc_magus_cloak/sc_magus_cloak_scalloped_blue', 57000), + (21897, 20695, 'accessories/wearable_items/cloak/exp09/sc_magus_cloak/sc_magus_cloak_scalloped_brown', 57000), + (21898, 20696, 'accessories/wearable_items/cloak/exp09/sc_magus_cloak/sc_magus_cloak_scalloped_red', 57000), + (21899, 20697, 'accessories/wearable_items/cloak/exp09/sc_magus_cloak/sc_magus_cloak_scalloped_white', 57000), + (21900, 20698, 'accessories/wearable_items/cloak/exp09/sc_magus_cloak/sc_magus_cloak_white', 57000), + (21901, 20699, 'accessories/wearable_items/_exp09/sc_magus_robe/blue/chest', 57000), + (21902, 20700, 'accessories/wearable_items/_exp09/sc_magus_robe/blue/feet', 57000), + (21903, 20701, 'accessories/wearable_items/_exp09/sc_magus_robe/blue/hands', 57000), + (21904, 20702, 'accessories/wearable_items/_exp09/sc_magus_robe/blue/head', 57000), + (21905, 20703, 'accessories/wearable_items/_exp09/sc_magus_robe/blue/head_collar', 57000), + (21906, 20704, 'accessories/wearable_items/_exp09/sc_magus_robe/blue/head_floppyhat', 57000), + (21907, 20705, 'accessories/wearable_items/_exp09/sc_magus_robe/blue/pants', 57000), + (21908, 20706, 'accessories/wearable_items/_exp09/sc_magus_robe/blue/skirt', 57000), + (21909, 20707, 'accessories/wearable_items/_exp09/sc_magus_robe/brown/chest', 57000), + (21910, 20708, 'accessories/wearable_items/_exp09/sc_magus_robe/brown/feet', 57000), + (21911, 20709, 'accessories/wearable_items/_exp09/sc_magus_robe/brown/hands', 57000), + (21912, 20710, 'accessories/wearable_items/_exp09/sc_magus_robe/brown/head', 57000), + (21913, 20711, 'accessories/wearable_items/_exp09/sc_magus_robe/brown/head_collar', 57000), + (21914, 20712, 'accessories/wearable_items/_exp09/sc_magus_robe/brown/head_floppyhat', 57000), + (21915, 20713, 'accessories/wearable_items/_exp09/sc_magus_robe/brown/pants', 57000), + (21916, 20714, 'accessories/wearable_items/_exp09/sc_magus_robe/brown/skirt', 57000), + (21917, 20715, 'accessories/wearable_items/_exp09/sc_magus_robe/red/chest', 57000), + (21918, 20716, 'accessories/wearable_items/_exp09/sc_magus_robe/red/feet', 57000), + (21919, 20717, 'accessories/wearable_items/_exp09/sc_magus_robe/red/hands', 57000), + (21920, 20718, 'accessories/wearable_items/_exp09/sc_magus_robe/red/head', 57000), + (21921, 20719, 'accessories/wearable_items/_exp09/sc_magus_robe/red/head_collar', 57000), + (21922, 20720, 'accessories/wearable_items/_exp09/sc_magus_robe/red/head_floppyhat', 57000), + (21923, 20721, 'accessories/wearable_items/_exp09/sc_magus_robe/red/pants', 57000), + (21924, 20722, 'accessories/wearable_items/_exp09/sc_magus_robe/red/skirt', 57000), + (21925, 20723, 'accessories/wearable_items/_exp09/sc_magus_robe/white/chest', 57000), + (21926, 20724, 'accessories/wearable_items/_exp09/sc_magus_robe/white/feet', 57000), + (21927, 20725, 'accessories/wearable_items/_exp09/sc_magus_robe/white/hands', 57000), + (21928, 20726, 'accessories/wearable_items/_exp09/sc_magus_robe/white/head', 57000), + (21929, 20727, 'accessories/wearable_items/_exp09/sc_magus_robe/white/head_collar', 57000), + (21930, 20728, 'accessories/wearable_items/_exp09/sc_magus_robe/white/head_floppyhat', 57000), + (21931, 20729, 'accessories/wearable_items/_exp09/sc_magus_robe/white/pants', 57000), + (21932, 20730, 'accessories/wearable_items/_exp09/sc_magus_robe/white/skirt', 57000), + (21933, 20731, '_exp09/characters/monsters/hydra/hydra_base', 57000), + (21934, 20732, 'accessories/wearable_items/profesion_hats/chef_hat/head_chef_red', 57000), + (21935, 20733, 'accessories/wearable_items/profesion_hats/chef_hat/head_chef_white', 57000), + (21936, 20734, 'accessories/wearable_items/_exp09/sc_casual_heavycloth/blue/chest', 57000), + (21937, 20735, 'accessories/wearable_items/_exp09/sc_casual_heavycloth/blue/feet', 57000), + (21938, 20736, 'accessories/wearable_items/_exp09/sc_casual_heavycloth/blue/hands', 57000), + (21939, 20737, 'accessories/wearable_items/_exp09/sc_casual_heavycloth/blue/legs', 57000), + (21940, 20738, 'accessories/wearable_items/_exp09/sc_casual_heavycloth/blue/shoulders', 57000), + (21941, 20739, 'accessories/wearable_items/_exp09/sc_casual_heavycloth/blue/skirt', 57000), + (21942, 20740, 'accessories/wearable_items/_exp09/sc_casual_heavycloth/browns/chest', 57000), + (21943, 20741, 'accessories/wearable_items/_exp09/sc_casual_heavycloth/browns/feet', 57000), + (21944, 20742, 'accessories/wearable_items/_exp09/sc_casual_heavycloth/browns/hands', 57000), + (21945, 20743, 'accessories/wearable_items/_exp09/sc_casual_heavycloth/browns/legs', 57000), + (21946, 20744, 'accessories/wearable_items/_exp09/sc_casual_heavycloth/browns/shoulders', 57000), + (21947, 20745, 'accessories/wearable_items/_exp09/sc_casual_heavycloth/browns/skirt', 57000), + (21948, 20746, 'accessories/wearable_items/_exp09/sc_casual_heavycloth/green/chest', 57000), + (21949, 20747, 'accessories/wearable_items/_exp09/sc_casual_heavycloth/green/feet', 57000), + (21950, 20748, 'accessories/wearable_items/_exp09/sc_casual_heavycloth/green/hands', 57000), + (21951, 20749, 'accessories/wearable_items/_exp09/sc_casual_heavycloth/green/legs', 57000), + (21952, 20750, 'accessories/wearable_items/_exp09/sc_casual_heavycloth/green/shoulders', 57000), + (21953, 20751, 'accessories/wearable_items/_exp09/sc_casual_heavycloth/green/skirt', 57000), + (21954, 20752, 'accessories/wearable_items/_exp09/sc_casual_heavycloth/red/chest', 57000), + (21955, 20753, 'accessories/wearable_items/_exp09/sc_casual_heavycloth/red/feet', 57000), + (21956, 20754, 'accessories/wearable_items/_exp09/sc_casual_heavycloth/red/hands', 57000), + (21957, 20755, 'accessories/wearable_items/_exp09/sc_casual_heavycloth/red/legs', 57000), + (21958, 20756, 'accessories/wearable_items/_exp09/sc_casual_heavycloth/red/shoulders', 57000), + (21959, 20757, 'accessories/wearable_items/_exp09/sc_casual_heavycloth/red/skirt', 57000), + (21960, 20758, 'accessories/wearable_items/cloak/exp09/cloak_casual_travelling_green', 57000), + (21961, 20759, 'accessories/wearable_items/cloak/exp09/cloak_casual_travelling_blue', 57000), + (21962, 20760, 'accessories/wearable_items/cloak/exp09/cloak_casual_travelling_brown', 57000), + (21963, 20761, 'accessories/wearable_items/cloak/exp09/cloak_casual_travelling_red', 57000), + (21964, 20762, 'accessories/wearable_items/cloak/exp09/scarf/neckrings/cloak_neckring_travelling_blue', 57000), + (21965, 20763, 'accessories/wearable_items/cloak/exp09/scarf/neckrings/cloak_neckring_travelling_brown', 57000), + (21966, 20764, 'accessories/wearable_items/cloak/exp09/scarf/neckrings/cloak_neckring_travelling_green', 57000), + (21967, 20765, 'accessories/wearable_items/cloak/exp09/scarf/neckrings/cloak_neckring_travelling_red', 57000), + (21968, 20766, 'staticobjects/liveevent/erollisi_objects/dpo_bauble_bow_string_roses_gold', 57000), + (21969, 20767, 'staticobjects/liveevent/erollisi_objects/dpo_bauble_bow_string_roses_red', 57000), + (21970, 20768, 'staticobjects/liveevent/erollisi_objects/dpo_bauble_cordon_hearts_pruple', 57000), + (21971, 20769, 'staticobjects/liveevent/erollisi_objects/dpo_bauble_cordon_hearts_red', 57000), + (21972, 20770, 'staticobjects/liveevent/erollisi_objects/dpo_bauble_cordon_roses_dark', 57000), + (21973, 20771, 'staticobjects/liveevent/erollisi_objects/dpo_bauble_cordon_roses_red_gold', 57000), + (21974, 20772, 'staticobjects/liveevent/erollisi_objects/dpo_bauble_cordon_roses_red_silver', 57000), + (21975, 20773, 'staticobjects/liveevent/erollisi_objects/dpo_bauble_heart_string_roses_dark', 57000), + (21976, 20774, 'staticobjects/liveevent/erollisi_objects/dpo_bauble_heart_string_roses_red', 57000), + (21977, 20775, 'staticobjects/liveevent/erollisi_objects/dpo_bauble_string_lights_rose_buds', 57000), + (21978, 20776, 'staticobjects/liveevent/erollisi_objects/dpo_bauble_string_lights_roses_dark', 57000), + (21979, 20777, 'staticobjects/liveevent/erollisi_objects/dpo_bauble_string_lights_roses_silver', 57000), + (21980, 20778, 'staticobjects/liveevent/erollisi_objects/dpo_bauble_string_lights_roses01', 57000), + (21981, 20779, 'staticobjects/liveevent/erollisi_objects/dpo_bauble_string_lights_tassle_hearts', 57000), + (21982, 20780, 'staticobjects/liveevent/erollisi_objects/dpo_bauble_rose_dark', 57000), + (21983, 20781, 'staticobjects/liveevent/erollisi_objects/dpo_bauble_rose_gold', 57000), + (21984, 20782, 'staticobjects/liveevent/erollisi_objects/dpo_bauble_tassle_heart', 57000), + (21985, 20783, 'creatures/mounts/player_wing/player_wing_clockwork_goldpink_hearts', 57000), + (21986, 20784, 'staticobjects/housing_portal_objects/vision_home_respite01', 57000), + (21987, 20785, 'accessories/wearable_items/snapons/rings/hand_ring_wedding_basic_left/froglok/hands', 57000), + (21988, 20786, 'accessories/wearable_items/snapons/rings/hand_ring_wedding_basic_left/hands', 57000), + (21989, 20787, 'accessories/wearable_items/snapons/rings/hand_ring_wedding_goldcrystal_left/froglok/hands', 57000), + (21990, 20788, 'accessories/wearable_items/snapons/rings/hand_ring_wedding_goldcrystal_left/hands', 57000), + (21991, 20789, 'accessories/wearable_items/snapons/rings/hand_ring_wedding_golddiamond_left/froglok/hands', 57000), + (21992, 20790, 'accessories/wearable_items/snapons/rings/hand_ring_wedding_golddiamond_left/hands', 57000), + (21993, 20791, 'accessories/wearable_items/snapons/rings/hand_ring_wedding_goldemerald_left/froglok/hands', 57000), + (21994, 20792, 'accessories/wearable_items/snapons/rings/hand_ring_wedding_goldemerald_left/hands', 57000), + (21995, 20793, 'accessories/wearable_items/snapons/rings/hand_ring_wedding_goldruby_left/froglok/hands', 57000), + (21996, 20794, 'accessories/wearable_items/snapons/rings/hand_ring_wedding_goldruby_left/hands', 57000), + (21997, 20795, 'staticobjects/liveevent/erollisi_objects/erollisi_rosehedge_pink', 57000), + (21998, 20796, 'staticobjects/liveevent/erollisi_objects/erollisi_rosehedge_white', 57000), + (21999, 20797, 'staticobjects/liveevent/erollisi_objects/erollisi_rosehedge_yellow', 57000), + (22000, 20798, 'staticobjects/liveevent/erollisi_objects/erollisi_rosehedge_red', 57000), + (22001, 20799, 'staticobjects/panels/dpo_panel_stainedglass_pink', 57000), + (22002, 20800, 'staticobjects/bottles/fpalt_kitchen_winebottleornate02', 57000), + (22003, 20801, 'staticobjects/chests/vastydeep01_objects01_chest01', 57000), + (22004, 20802, 'staticobjects/bottles/eru_bottle_glass02', 57000), + (22005, 20803, 'staticobjects/bottles/eru_bottle_glass03', 57000), + (22006, 20804, 'staticobjects/plants/po_flower_clump01_dpo', 57000), + (22007, 20805, 'staticobjects/liveevent/erollisi_objects/building_blocks/dpo_panel_bluestucco', 57000), + (22008, 20806, 'staticobjects/liveevent/erollisi_objects/building_blocks/houseblock_1x1_column_bluestucco', 57000), + (22009, 20807, 'staticobjects/liveevent/erollisi_objects/building_blocks/houseblock_1x2_column_bluestucco', 57000), + (22010, 20808, 'staticobjects/liveevent/erollisi_objects/building_blocks/houseblock_1x2_dividerblock_bluestucco', 57000), + (22011, 20809, 'staticobjects/liveevent/erollisi_objects/building_blocks/houseblock_1xhalf_block_bluestucco', 57000), + (22012, 20810, 'staticobjects/liveevent/erollisi_objects/building_blocks/houseblock_2x2_dividerblock_bluestucco', 57000), + (22013, 20811, 'staticobjects/liveevent/erollisi_objects/building_blocks/houseblock_rail_bluestucco', 57000), + (22014, 20812, 'staticobjects/liveevent/erollisi_objects/building_blocks/houseblock_roundtile_bluestucco', 57000), + (22015, 20813, 'staticobjects/liveevent/erollisi_objects/building_blocks/houseblock_stair_bluestucco', 57000), + (22016, 20814, 'staticobjects/liveevent/erollisi_objects/building_blocks/housecube_1x1_block_bluestucco', 57000), + (22017, 20815, '_exp09/characters/tool_users/ashlock_skeleton/ashlock_skeleton_base', 57000), + (22018, 20816, 'creatures/pets/odus_prowler', 57000), + (22019, 20817, 'staticobjects/tcg/tcg_painting78_queenbunny', 57000), + (22020, 20818, '_exp09/characters/tool_users/ashlock_skeleton/ashlock_skeleton_heavy', 57000), + (22021, 20819, '_exp09/characters/tool_users/ashlock_skeleton/ashlock_skeleton_light', 57000), + (22022, 20820, '_exp09/characters/tool_users/ashlock_skeleton/ashlock_skeleton_medium', 57000), + (22023, 20821, '_exp09/characters/monsters/hydra/hydra_head_base', 57000), + (22024, 20822, 'accessories/npc_wearables/hydra/hydra_2_head', 57000), + (22025, 20823, 'accessories/npc_wearables/hydra/hydra_3_head', 57000), + (22026, 20824, 'accessories/npc_wearables/hydra/hydra_4_head', 57000), + (22027, 20825, 'accessories/npc_wearables/hydra/hydra_5_head', 57000), + (22028, 20826, 'creatures/monsters/barracuda_black_stripe', 57000), + (22029, 20827, 'creatures/monsters/barracuda_green_stripe', 57000), + (22030, 20828, 'creatures/monsters/shark_tiger', 57000), + (22031, 20829, 'accessories/wieldable_items/weapons/exp09/1h_crush/1h_crush_stienhammer', 57000), + (22032, 20830, 'staticobjects/liveevent/brew_day/bbm_wine_bottle_plain', 57000), + (22033, 20831, 'staticobjects/liveevent/brew_day/bbm_plate', 57000), + (22034, 20832, 'staticobjects/liveevent/brew_day/kal_bench01', 57000), + (22035, 20833, 'staticobjects/liveevent/brew_day/kal_shaman_jar02', 57000), + (22036, 20834, 'staticobjects/liveevent/brew_day/kal_lightsource_torch_blue', 57000), + (22037, 20835, 'staticobjects/liveevent/brew_day/odno_totem_brell', 57000), + (22038, 20836, 'staticobjects/liveevent/bristlebane_day/dpo_goblin_smokestack03', 57000), + (22039, 20837, 'staticobjects/liveevent/bristlebane_day/dpo_runny_spearbucket01', 57000), + (22040, 20838, 'staticobjects/liveevent/bristlebane_day/dpo_runny_table_sm_bowls01', 57000), + (22041, 20839, 'staticobjects/liveevent/bristlebane_day/dpo_halfing_waterpump01', 57000), + (22042, 20840, 'staticobjects/liveevent/bristlebane_day/dpo_hafling_cart_flat01', 57000), + (22043, 20841, 'staticobjects/liveevent/bristlebane_day/dpo_th_urns_urnlrg', 57000), + (22044, 20842, 'staticobjects/liveevent/bristlebane_day/dpo_th_urns_urnsml', 57000), + (22045, 20843, 'accessories/wieldable_items/weapons/exp06/1h_crush/1h_crush_fish_club_green_yellow', 57000), + (22046, 20844, 'accessories/wieldable_items/weapons/exp06/1h_crush/1h_crush_fish_club_trout', 57000), + (22047, 20845, 'staticobjects/fish/barracude_black_stripe_school', 57000), + (22048, 20846, 'staticobjects/fish/barracude_green_stripe_school', 57000), + (22049, 20847, 'accessories/wearable_items/snapons/backpacks/backpack_huamein_animated/backpack_huamein_animated', 57000), + (22050, 20848, 'accessories/wearable_items/snapons/backpacks/backpack_huamein_animated/backpack_huamein_animated_brownbear', 57000), + (22051, 20849, 'accessories/wearable_items/snapons/backpacks/backpack_huamein_animated/backpack_huamein_animated_polarbear', 57000), + (22052, 20850, 'accessories/wearable_items/snapons/backpacks/backpack_huamein_animated/backpack_huamein_animated_red', 57000), + (22053, 20851, 'accessories/wearable_items/_exp09/sc_huamein_clothing/monk_texture/chest', 57000), + (22054, 20852, 'accessories/wearable_items/_exp09/sc_huamein_clothing/monk_texture/feet', 57000), + (22055, 20853, 'accessories/wearable_items/_exp09/sc_huamein_clothing/monk_texture/hands', 57000), + (22056, 20854, 'accessories/wearable_items/_exp09/sc_huamein_clothing/monk_texture/legs', 57000), + (22057, 20855, 'accessories/wearable_items/_exp09/sc_huamein_clothing/warrior_texture/chest', 57000), + (22058, 20856, 'accessories/wearable_items/_exp09/sc_huamein_clothing/warrior_texture/legs', 57000), + (22059, 20857, 'creatures/pets/flying_squirrel/flying_squirrel', 57000), + (22060, 20858, 'creatures/pets/flying_squirrel/flying_squirrel_skunk', 57000), + (22061, 20859, 'staticobjects/soe_wallet/boats/boat01_brew', 57000), + (22062, 20860, 'creatures/monsters/triceratops', 57000), + (22063, 20861, 'staticobjects/liveevent/brew_day/dpo_brewday_bauble_shamrocks_streamer', 57000), + (22064, 20862, 'staticobjects/liveevent/brew_day/dpo_brewday_keg_bubble_cordon', 57000); +INSERT INTO `appearances` (`id`, `appearance_id`, `name`, `min_client_version`) VALUES + (22065, 20863, 'staticobjects/liveevent/brew_day/dpo_brewday_keg_bubbles_streamer', 57000), + (22066, 20864, 'staticobjects/liveevent/brew_day/dpo_brewday_mug_shamrock_cordon', 57000), + (22067, 20865, 'staticobjects/debris/gnoll_burrowpile02', 57000), + (22068, 20866, 'playerstudio/characters/cloaks/butterfly_dreams/cloak_butterfly_dreams', 57000), + (22069, 20867, 'playerstudio/characters/cloaks/cosmicdream/cloak_cosmicdream', 57000), + (22070, 20868, 'playerstudio/characters/cloaks/keytomyheart/cloak_keytomyheart', 57000), + (22071, 20869, 'playerstudio/characters/cloaks/skullsandroses/cloak_skullsandroses', 57000), + (22072, 20870, '_exp08/objects/sirens_grotto/shell_closed', 57000), + (22073, 20871, 'creatures/mounts/lion_mount/lion_mount_base', 57000), + (22074, 20872, 'staticobjects/soe_wallet/holiday_objects/errolisi_strewn_rosesyellow01', 57000), + (22075, 20873, 'staticobjects/soe_wallet/holiday_objects/erollisi_pillow_rect01', 57000), + (22076, 20874, 'staticobjects/soe_wallet/holiday_objects/erollisi_pillow_round01', 57000), + (22077, 20875, 'staticobjects/soe_wallet/holiday_objects/erollisi_pillow_square01', 57000), + (22078, 20876, 'staticobjects/soe_wallet/holiday_objects/erollisi_pillows_group01', 57000), + (22079, 20877, 'staticobjects/soe_wallet/holiday_objects/erollisi_rosehedge_gray', 57000), + (22080, 20878, 'staticobjects/soe_wallet/holiday_objects/erollisi_rug_shardlove02', 57000), + (22081, 20879, 'staticobjects/soe_wallet/holiday_objects/erollisi_stainedglass_shardlove02', 57000), + (22082, 20880, 'staticobjects/soe_wallet/holiday_objects/errolisi_bigbouquet01', 57000), + (22083, 20881, 'staticobjects/soe_wallet/holiday_objects/errolisi_bigbouquet01_purple', 57000), + (22084, 20882, 'staticobjects/soe_wallet/holiday_objects/errolisi_blackrose01', 57000), + (22085, 20883, 'staticobjects/soe_wallet/holiday_objects/errolisi_strewn_rosespink01', 57000), + (22086, 20884, 'staticobjects/soe_wallet/holiday_objects/errolisi_strewn_rosespurple01', 57000), + (22087, 20885, 'staticobjects/soe_wallet/holiday_objects/errolisi_strewn_rosesred01', 57000), + (22088, 20886, 'staticobjects/soe_wallet/holiday_objects/erollisi_stained_glass_shardlove01', 57000), + (22089, 20887, 'staticobjects/statues/kal_totem_plain', 57000), + (22090, 20888, '_exp08/characters/tool_users/ulthork/ulthork_undead_base', 57000), + (22091, 20889, '_exp08/characters/tool_users/ulthork/ulthork_undead_face', 57000), + (22092, 20890, '_exp08/characters/tool_users/ulthork/ulthork_undead_leftleg', 57000), + (22093, 20891, '_exp08/characters/tool_users/ulthork/ulthork_undead_othmir_attachment', 57000), + (22094, 20892, '_exp08/characters/tool_users/ulthork/ulthork_undead_rightleg', 57000), + (22095, 20893, '_exp09/characters/monsters/hydra/hydra_head_dead', 57000), + (22096, 20894, 'creatures/mounts/meatbeast_mount/meatbeast_mount_base', 57000), + (22097, 20895, 'accessories/wearable_items/cloak/exp09/cloak_codex', 57000), + (22098, 20896, 'accessories/wearable_items/_exp09/codex_hood/head', 57000), + (22099, 20897, 'playerstudio/characters/cloaks/clovers/cloak_clovers', 57000), + (22100, 20898, 'playerstudio/characters/cloaks/goldensun/cloak_goldensun', 57000), + (22101, 20899, 'playerstudio/characters/cloaks/halasianwolfskin/halasianwolfskin', 57000), + (22102, 20900, 'playerstudio/characters/cloaks/loyalty_to_halas/loyalty_to_halas', 57000), + (22103, 20901, '_exp09/characters/monsters/kelorek_dar/kelorek_dar', 57000), + (22104, 20902, '_exp09/characters/monsters/wasp_swarm/wasp_swarm', 57000), + (22105, 20903, 'staticobjects/soe_wallet/odso_panda_training_dummy01', 57000), + (22106, 20904, 'staticobjects/soe_wallet/odno_woodpile_bamboo01', 57000), + (22107, 20905, 'staticobjects/soe_wallet/odso_bamboo_stalk01_small', 57000), + (22108, 20906, 'staticobjects/soe_wallet/odso_panda_backpack_all01', 57000), + (22109, 20907, 'staticobjects/soe_wallet/odso_panda_basket_empty02', 57000), + (22110, 20908, 'staticobjects/soe_wallet/odso_panda_basket_fishnet01', 57000), + (22111, 20909, 'staticobjects/soe_wallet/odso_panda_fishing_trap01', 57000), + (22112, 20910, 'accessories/wieldable_items/weapons/exp09/staff/exp08_staff_aquatic_shellblue', 57000), + (22113, 20911, 'staticobjects/soe_wallet/odso_panda_totem02', 57000), + (22114, 20912, 'staticobjects/soe_wallet/odno_panda_incense', 57000), + (22115, 20913, 'staticobjects/soe_wallet/odso_panda_food_container01_oranges', 57000), + (22116, 20914, 'accessories/wieldable_items/weapons/exp09/staff/exp08_staff_aquatic_shellrusty', 57000), + (22117, 20915, 'accessories/wieldable_items/weapons/exp09/staff/exp08_staff_aquatic_shellmagic', 57000), + (22118, 20916, 'accessories/wieldable_items/weapons/exp09/staff/exp08_staff_aquatic_shellonyx', 57000), + (22119, 20917, 'accessories/wieldable_items/weapons/exp09/staff/exp08_staff_aquatic_shell1', 57000), + (22120, 20918, 'accessories/wieldable_items/weapons/exp09/fist/fist_horsesshoe_crab1', 57000), + (22121, 20919, 'accessories/wieldable_items/weapons/exp09/fist/fist_horsesshoe_crab2', 57000), + (22122, 20920, 'accessories/wieldable_items/weapons/exp09/fist/fist_horsesshoe_crab3', 57000), + (22123, 20921, 'accessories/wieldable_items/weapons/exp09/bow/longbow_aquatic_metal1', 57000), + (22124, 20922, 'accessories/wieldable_items/weapons/exp09/bow/longbow_aquatic_metal2', 57000), + (22125, 20923, 'accessories/wieldable_items/weapons/exp09/bow/longbow_aquatic2', 57000), + (22126, 20924, 'accessories/wieldable_items/weapons/exp09/bow/longbow_aquatic1', 57000), + (22127, 20925, 'accessories/wieldable_items/weapons/exp09/bow/shortbow_aquatic_metal1', 57000), + (22128, 20926, 'accessories/wieldable_items/weapons/exp09/bow/shortbow_aquatic_metal2', 57000), + (22129, 20927, 'accessories/wieldable_items/weapons/exp09/bow/shortbow_aquatic2', 57000), + (22130, 20928, 'accessories/wieldable_items/weapons/exp09/bow/shortbow_aquatic1', 57000), + (22131, 20929, 'accessories/wieldable_items/weapons/exp09/2h_crush/2h_crush_aquatic_metallic2', 57000), + (22132, 20930, 'accessories/wieldable_items/weapons/exp09/2h_crush/2h_crush_aquatic_metallic1', 57000), + (22133, 20931, 'accessories/wieldable_items/weapons/exp09/2h_crush/2h_crush_aquatic1', 57000), + (22134, 20932, 'accessories/wieldable_items/weapons/exp09/2h_crush/2h_crush_aquatic2', 57000), + (22135, 20933, 'accessories/wieldable_items/weapons/exp09/1h_sword/1h_sword_aquatic_greenshell', 57000), + (22136, 20934, 'accessories/wieldable_items/weapons/exp09/1h_sword/1h_sword_aquatic_pinkcoral', 57000), + (22137, 20935, 'accessories/wieldable_items/weapons/exp09/1h_sword/1h_axe_ship_anchor1', 57000), + (22138, 20936, 'accessories/wieldable_items/weapons/exp09/1h_sword/1h_axe_ship_anchor2', 57000), + (22139, 20937, 'accessories/wieldable_items/weapons/exp09/1h_sword/1h_axe_ship_anchor5', 57000), + (22140, 20938, 'accessories/wieldable_items/weapons/exp09/1h_sword/1h_axe_ship_anchor4', 57000), + (22141, 20939, 'accessories/wieldable_items/weapons/exp09/1h_sword/1h_axe_ship_anchor3', 57000), + (22142, 20940, 'accessories/wieldable_items/weapons/exp09/1h_sword/1h_sword_aquatic', 57000), + (22143, 20941, 'accessories/wieldable_items/weapons/exp09/1h_pierce/exp09_dagger_sharktooth3', 57000), + (22144, 20942, 'accessories/wieldable_items/weapons/exp09/1h_pierce/exp09_dagger_sharktooth1', 57000), + (22145, 20943, 'accessories/wieldable_items/weapons/exp09/1h_pierce/exp09_dagger_sharktooth2', 57000), + (22146, 20944, 'accessories/wieldable_items/weapons/exp09/1h_crush/1h_hammer_aquatic_metallic2', 57000), + (22147, 20945, 'accessories/wieldable_items/weapons/exp09/1h_crush/1h_hammer_aquatic_metallic1', 57000), + (22148, 20946, 'accessories/wieldable_items/weapons/exp09/1h_crush/1h_hammer_aquatic2', 57000), + (22149, 20947, 'accessories/wieldable_items/weapons/exp09/1h_crush/1h_hammer_aquatic1', 57000), + (22150, 20948, 'creatures/mounts/player_wing/player_wing_clockwork_wedding_black', 57000), + (22151, 20949, 'creatures/mounts/player_wing/player_wing_clockwork_wedding_white', 57000), + (22152, 20950, 'creatures/mounts/player_wing/player_wing_clockwork_wedding', 57000), + (22153, 20951, 'staticobjects/liveevent/bristlebane_day/dpo_bauble_ceiling_beads_cards', 57000), + (22154, 20952, 'staticobjects/liveevent/bristlebane_day/dpo_bauble_streamers_coins', 57000), + (22155, 20953, 'staticobjects/liveevent/bristlebane_day/dpo_bauble_streamers_totem_confetti', 57000), + (22156, 20954, 'staticobjects/liveevent/bristlebane_day/dpo_bristlebane_streamer_cordon', 57000), + (22157, 20955, 'staticobjects/liveevent/bristlebane_day/dpo_bristlebane_streamer_jester_cordon', 57000), + (22158, 20956, 'staticobjects/liveevent/bristlebane_day/dpo_bristlebane_streamer_totem_cordon', 57000), + (22159, 20957, '_exp09/characters/tool_users/ashlock_skeleton/ashlock_skeleton_boss', 57000), + (22160, 20958, '_exp09/characters/tool_users/siren/siren_base', 57000), + (22161, 20959, '_exp09/characters/tool_users/siren/siren_evil', 57000), + (22162, 20960, '_exp09/characters/tool_users/siren/siren_queen', 57000), + (22163, 20961, '_exp09/characters/tool_users/siren/siren_shells', 57000), + (22164, 20962, '_exp09/characters/tool_users/siren/siren_sister_good', 57000), + (22165, 20963, 'playerstudio/characters/cloaks/beastlord/cloak_beastlord', 57000), + (22166, 20964, 'playerstudio/characters/cloaks/cloakofdarkpossession/cloak_cloakofdarkpossession', 57000), + (22167, 20965, 'playerstudio/characters/cloaks/dragonslayer/cloak_dragonslayer', 57000), + (22168, 20966, 'playerstudio/characters/cloaks/erollisi_s_maiden/cloak_erollisi_s_maiden', 57000), + (22169, 20967, 'playerstudio/characters/cloaks/kaladim/cloak_kaladim', 57000), + (22170, 20968, 'playerstudio/characters/cloaks/leaftapastry/cloak_leaftapastry', 57000), + (22171, 20969, 'playerstudio/characters/cloaks/nagafenseye/cloak_nagafenseye', 57000), + (22172, 20970, '_exp09/characters/monsters/crabmonster/crabmonster_red', 57000), + (22173, 20971, 'accessories/wieldable_items/weapons/exp09/2h_sword/2h_nightborne_axe', 57000), + (22174, 20972, '_exp09/characters/monsters/shambling_mound/shambling_mound_coral', 57000), + (22175, 20973, 'playerstudio/houseitems/auto_wagon_cart', 57000), + (22176, 20974, 'accessories/wearable_items/_exp09/aquatic_armor/chain/chest', 57000), + (22177, 20975, 'accessories/wearable_items/_exp09/aquatic_armor/chain/feet', 57000), + (22178, 20976, 'accessories/wearable_items/_exp09/aquatic_armor/chain/forearms', 57000), + (22179, 20977, 'accessories/wearable_items/_exp09/aquatic_armor/chain/hands', 57000), + (22180, 20978, 'accessories/wearable_items/_exp09/aquatic_armor/chain/head', 57000), + (22181, 20979, 'accessories/wearable_items/_exp09/aquatic_armor/chain/legs', 57000), + (22182, 20980, 'accessories/wearable_items/_exp09/aquatic_armor/chain/shoulders', 57000), + (22183, 20981, 'accessories/wearable_items/_exp09/aquatic_armor/chain2/chest', 57000), + (22184, 20982, 'accessories/wearable_items/_exp09/aquatic_armor/chain2/feet', 57000), + (22185, 20983, 'accessories/wearable_items/_exp09/aquatic_armor/chain2/forearms', 57000), + (22186, 20984, 'accessories/wearable_items/_exp09/aquatic_armor/chain2/hands', 57000), + (22187, 20985, 'accessories/wearable_items/_exp09/aquatic_armor/chain2/head', 57000), + (22188, 20986, 'accessories/wearable_items/_exp09/aquatic_armor/chain2/legs', 57000), + (22189, 20987, 'accessories/wearable_items/_exp09/aquatic_armor/chain2/shoulders', 57000), + (22190, 20988, 'accessories/wearable_items/_exp09/aquatic_armor/gi/arms', 57000), + (22191, 20989, 'accessories/wearable_items/_exp09/aquatic_armor/gi/chest', 57000), + (22192, 20990, 'accessories/wearable_items/_exp09/aquatic_armor/gi/legs', 57000), + (22193, 20991, 'accessories/wearable_items/_exp09/aquatic_armor/gi/female/chest', 57000), + (22194, 20992, 'accessories/wearable_items/_exp09/aquatic_armor/gi/female/hands', 57000), + (22195, 20993, 'accessories/wearable_items/_exp09/aquatic_armor/gi/female/legs', 57000), + (22196, 20994, 'accessories/wearable_items/_exp09/aquatic_armor/gi/male/arms', 57000), + (22197, 20995, 'accessories/wearable_items/_exp09/aquatic_armor/gi/male/chest', 57000), + (22198, 20996, 'accessories/wearable_items/_exp09/aquatic_armor/gi/male/skirt', 57000), + (22199, 20997, 'accessories/wearable_items/_exp09/aquatic_armor/gi2/female/chest', 57000), + (22200, 20998, 'accessories/wearable_items/_exp09/aquatic_armor/gi2/female/hands', 57000), + (22201, 20999, 'accessories/wearable_items/_exp09/aquatic_armor/gi2/female/legs', 57000), + (22202, 21000, 'accessories/wearable_items/_exp09/aquatic_armor/gi2/male/arms', 57000), + (22203, 21001, 'accessories/wearable_items/_exp09/aquatic_armor/gi2/male/chest', 57000), + (22204, 21002, 'accessories/wearable_items/_exp09/aquatic_armor/gi2/male/skirt', 57000), + (22205, 21003, 'accessories/wearable_items/_exp09/aquatic_armor/gi2/arms', 57000), + (22206, 21004, 'accessories/wearable_items/_exp09/aquatic_armor/gi2/chest', 57000), + (22207, 21005, 'accessories/wearable_items/_exp09/aquatic_armor/gi2/legs', 57000), + (22208, 21006, 'accessories/wearable_items/_exp09/aquatic_armor/leather/chest', 57000), + (22209, 21007, 'accessories/wearable_items/_exp09/aquatic_armor/leather/feet', 57000), + (22210, 21008, 'accessories/wearable_items/_exp09/aquatic_armor/leather/forearms', 57000), + (22211, 21009, 'accessories/wearable_items/_exp09/aquatic_armor/leather/hands', 57000), + (22212, 21010, 'accessories/wearable_items/_exp09/aquatic_armor/leather/head', 57000), + (22213, 21011, 'accessories/wearable_items/_exp09/aquatic_armor/leather/legs', 57000), + (22214, 21012, 'accessories/wearable_items/_exp09/aquatic_armor/leather/legs_noskirt', 57000), + (22215, 21013, 'accessories/wearable_items/_exp09/aquatic_armor/leather/shoulders', 57000), + (22216, 21014, 'accessories/wearable_items/_exp09/aquatic_armor/leather/skirt', 57000), + (22217, 21015, 'accessories/wearable_items/_exp09/aquatic_armor/leather2/chest', 57000), + (22218, 21016, 'accessories/wearable_items/_exp09/aquatic_armor/leather2/feet', 57000), + (22219, 21017, 'accessories/wearable_items/_exp09/aquatic_armor/leather2/forearms', 57000), + (22220, 21018, 'accessories/wearable_items/_exp09/aquatic_armor/leather2/hands', 57000), + (22221, 21019, 'accessories/wearable_items/_exp09/aquatic_armor/leather2/head', 57000), + (22222, 21020, 'accessories/wearable_items/_exp09/aquatic_armor/leather2/legs', 57000), + (22223, 21021, 'accessories/wearable_items/_exp09/aquatic_armor/leather2/legs_noskirt', 57000), + (22224, 21022, 'accessories/wearable_items/_exp09/aquatic_armor/leather2/shoulders', 57000), + (22225, 21023, 'accessories/wearable_items/_exp09/aquatic_armor/leather2/skirt', 57000), + (22226, 21024, 'accessories/wearable_items/_exp09/aquatic_armor/robe/chest', 57000), + (22227, 21025, 'accessories/wearable_items/_exp09/aquatic_armor/robe/feet', 57000), + (22228, 21026, 'accessories/wearable_items/_exp09/aquatic_armor/robe/hands', 57000), + (22229, 21027, 'accessories/wearable_items/_exp09/aquatic_armor/robe/head', 57000), + (22230, 21028, 'accessories/wearable_items/_exp09/aquatic_armor/robe/head_collar', 57000), + (22231, 21029, 'accessories/wearable_items/_exp09/aquatic_armor/robe/pants', 57000), + (22232, 21030, 'accessories/wearable_items/_exp09/aquatic_armor/robe/skirt', 57000), + (22233, 21031, 'accessories/wearable_items/_exp09/aquatic_armor/robe2/chest', 57000), + (22234, 21032, 'accessories/wearable_items/_exp09/aquatic_armor/robe2/feet', 57000), + (22235, 21033, 'accessories/wearable_items/_exp09/aquatic_armor/robe2/hands', 57000), + (22236, 21034, 'accessories/wearable_items/_exp09/aquatic_armor/robe2/head', 57000), + (22237, 21035, 'accessories/wearable_items/_exp09/aquatic_armor/robe2/head_collar', 57000), + (22238, 21036, 'accessories/wearable_items/_exp09/aquatic_armor/robe2/pants', 57000), + (22239, 21037, 'accessories/wearable_items/_exp09/aquatic_armor/robe2/skirt', 57000), + (22240, 21038, 'accessories/wearable_items/_exp09/aquatic_armor/vanguard/chest', 57000), + (22241, 21039, 'accessories/wearable_items/_exp09/aquatic_armor/vanguard/feet', 57000), + (22242, 21040, 'accessories/wearable_items/_exp09/aquatic_armor/vanguard/forearms', 57000), + (22243, 21041, 'accessories/wearable_items/_exp09/aquatic_armor/vanguard/hands', 57000), + (22244, 21042, 'accessories/wearable_items/_exp09/aquatic_armor/vanguard/head', 57000), + (22245, 21043, 'accessories/wearable_items/_exp09/aquatic_armor/vanguard/left', 57000), + (22246, 21044, 'accessories/wearable_items/_exp09/aquatic_armor/vanguard/legs', 57000), + (22247, 21045, 'accessories/wearable_items/_exp09/aquatic_armor/vanguard/legs_noskirt', 57000), + (22248, 21046, 'accessories/wearable_items/_exp09/aquatic_armor/vanguard/right', 57000), + (22249, 21047, 'accessories/wearable_items/_exp09/aquatic_armor/vanguard/shoulders', 57000), + (22250, 21048, 'accessories/wearable_items/_exp09/aquatic_armor/vanguard/shoulders_nopauldrons', 57000), + (22251, 21049, 'accessories/wearable_items/_exp09/aquatic_armor/vanguard/skirt', 57000), + (22252, 21050, 'accessories/wearable_items/_exp09/aquatic_armor/vanguard2/chest', 57000), + (22253, 21051, 'accessories/wearable_items/_exp09/aquatic_armor/vanguard2/feet', 57000), + (22254, 21052, 'accessories/wearable_items/_exp09/aquatic_armor/vanguard2/forearms', 57000), + (22255, 21053, 'accessories/wearable_items/_exp09/aquatic_armor/vanguard2/hands', 57000), + (22256, 21054, 'accessories/wearable_items/_exp09/aquatic_armor/vanguard2/head', 57000), + (22257, 21055, 'accessories/wearable_items/_exp09/aquatic_armor/vanguard2/left', 57000), + (22258, 21056, 'accessories/wearable_items/_exp09/aquatic_armor/vanguard2/legs', 57000), + (22259, 21057, 'accessories/wearable_items/_exp09/aquatic_armor/vanguard2/legs_noskirt', 57000), + (22260, 21058, 'accessories/wearable_items/_exp09/aquatic_armor/vanguard2/right', 57000), + (22261, 21059, 'accessories/wearable_items/_exp09/aquatic_armor/vanguard2/shoulders', 57000), + (22262, 21060, 'accessories/wearable_items/_exp09/aquatic_armor/vanguard2/shoulders_nopauldrons', 57000), + (22263, 21061, 'accessories/wearable_items/_exp09/aquatic_armor/vanguard2/skirt', 57000), + (22264, 21062, 'creatures/tu/tentacleterror_sirens', 57000), + (22265, 21063, 'accessories/wieldable_items/shields/exp09/aquatic2_shield_buckler', 57000), + (22266, 21064, 'accessories/wieldable_items/shields/exp09/aquatic_shield_buckler', 57000), + (22267, 21065, 'accessories/wieldable_items/shields/exp09/aquatic2_shield_kite', 57000), + (22268, 21066, 'accessories/wieldable_items/shields/exp09/aquatic_shield_kite', 57000), + (22269, 21067, 'accessories/wieldable_items/shields/exp09/aquatic_shield_tower', 57000), + (22270, 21068, 'accessories/wieldable_items/shields/exp09/aquatic2_shield_tower', 57000), + (22271, 21069, 'creatures/tu/tentacleterror_sirens_coral', 57000), + (22272, 21070, 'playerstudio/characters/cloaks/decadent_royalty/cloak_decadent_royalty', 57000), + (22273, 21071, 'staticobjects/soe_wallet/holiday_objects/erollisi_grapevine01', 57000), + (22274, 21072, 'staticobjects/soe_wallet/holiday_objects/erollisi_grapevine02', 57000), + (22275, 21073, 'staticobjects/soe_wallet/holiday_objects/erollisi_hopsvine01', 57000), + (22276, 21074, '_exp07/characters/tool_users/othmir/othmir_undead_boss', 57000), + (22277, 21075, '_exp07/characters/tool_users/othmir/othmir_undead_head', 57000), + (22278, 21076, '_exp07/characters/tool_users/othmir/othmir_undead_rotten', 57000), + (22279, 21077, '_exp07/characters/tool_users/othmir/othmir_undead_base', 57000), + (22280, 21078, 'playerstudio/characters/cloaks/cloak_of_good_fortune/cloak_of_good_fortune', 57000), + (22281, 21079, 'playerstudio/houseitems/gnome_icebox', 57000), + (22282, 21080, 'staticobjects/chairs/chair_cathedra_ofthe_dead_dpo', 57000), + (22283, 21081, 'creatures/mounts/hawk_mount/hawk_mount_base', 57000), + (22284, 21082, '_exp07/characters/tool_users/othmir/othmir_undead_spotted', 57000), + (22285, 21083, '_exp09/characters/monsters/turtle_dragon/turtle_dragon01', 57000), + (22286, 21084, '_exp09/characters/monsters/turtle_dragon/turtle_dragon01_red_runes', 57000), + (22287, 21085, 'staticobjects/plants/ej_grass_plant02_dpo', 57000), + (22288, 21086, 'staticobjects/plants/ej_vine_fern01_bluish_dpo', 57000), + (22289, 21087, 'staticobjects/plants/ej_plant01_dpo', 57000), + (22290, 21088, 'staticobjects/plants/ej_sparse_bosh02_dpo', 57000), + (22291, 21089, 'staticobjects/plants/po_long_leaf_plant02-dpo', 57000), + (22292, 21090, 'staticobjects/plants/po_hanging_vine01_dpo', 57000), + (22293, 21091, 'staticobjects/plants/po_long_leaf_plant02_dpo', 57000), + (22294, 21092, 'playerstudio/houseitems/auto_wagon_cart_preview', 57000), + (22295, 21093, 'accessories/wearable_items/profesion_hats/masked_helm/masked_helm_base', 57000), + (22296, 21094, 'accessories/wearable_items/profesion_hats/masked_helm/metallic/head', 57000), + (22297, 21095, 'accessories/wearable_items/_exp08/jester_heavycloth/jester/blackred/head', 57000), + (22298, 21096, 'accessories/wearable_items/_exp08/jester_heavycloth/jester/blackwhite/head', 57000), + (22299, 21097, 'accessories/wearable_items/_exp08/jester_heavycloth/jester/blueyellow/head', 57000), + (22300, 21098, 'accessories/wearable_items/_exp08/jester_heavycloth/jester/greengold/head', 57000), + (22301, 21099, 'accessories/wearable_items/_exp08/jester_heavycloth/jester/purplepink/head', 57000), + (22302, 21100, 'accessories/wearable_items/_exp08/jester_heavycloth/jester/redwhite/head', 57000), + (22303, 21101, 'playerstudio/characters/cloaks/enchanted_fairy_dust/cloak_enchanted_fairy_dust', 57000), + (22304, 21102, 'creatures/mounts/meatbeast_mount/meatbeast_mount_male', 57000), + (22305, 21103, 'creatures/monsters/goo_spikes_blue', 57000), + (22306, 21104, 'creatures/monsters/goo_spikes_creme', 57000), + (22307, 21105, 'creatures/monsters/goo_spikes_green', 57000), + (22308, 21106, 'creatures/monsters/goo_spikes_red', 57000), + (22309, 21107, 'creatures/mounts/meatbeast_mount/meatbeast_mount_female', 57000), + (22310, 21108, 'creatures/mounts/sokokar_mount/sokokar_mount_base', 57000), + (22311, 21109, 'staticobjects/_exp08/cobalt_scar/cs_ballista_launcher', 57000), + (22312, 21110, 'creatures/monsters/frog_sirensgrotto_bluepurple', 57000), + (22313, 21111, 'creatures/monsters/frog_sirensgrotto_greenblue', 57000), + (22314, 21112, 'creatures/monsters/frog_sirensgrotto_redorange', 57000), + (22315, 21113, 'playerstudio/houseitems/arcane_table_dpo', 57000), + (22316, 21114, 'creatures/pets/meatbeast_calf/meatbeast_calf_base', 57000), + (22317, 21115, 'creatures/tu/tentacleterror_sirens_brain', 57000), + (22318, 21116, 'creatures/mounts/meatbeast_mount/meatbeast_mount_bell_swivel', 57000), + (22319, 21117, 'creatures/mounts/meatbeast_mount/meatbeast_mount_bell_swivel_gold', 57000), + (22320, 21118, 'creatures/mounts/meatbeast_mount/meatbeast_mount_fools', 57000), + (22321, 21119, 'playerstudio/houseitems/gazebo_dpo', 57000), + (22322, 21120, 'playerstudio/houseitems/gazebo_fountain_dpo', 57000), + (22323, 21121, 'playerstudio/houseitems/gazebo_torch_dpo', 57000), + (22324, 21122, 'accessories/wearable_items/cloak/exp08/cloak_combine', 57000), + (22325, 21123, 'accessories/wearable_items/_exp08/jester_heavycloth/jester/redgold/head', 57000), + (22326, 21124, 'staticobjects/plants/ej_vinefern01_bluish_small_dpo', 57000), + (22327, 21125, 'creatures/pets/meatbeast_calf/meatbeast_calf_angus', 57000), + (22328, 21126, 'creatures/pets/meatbeast_calf/meatbeast_calf_jersey', 57000), + (22329, 21127, 'creatures/pets/meatbeast_calf/meatbeast_calf_spotted_brown', 57000), + (22330, 21128, 'accessories/wearable_items/profesion_hats/masked_helm/head', 57000), + (22331, 21129, 'creatures/monsters/frog_sirensgrotto_bluepurple_boss', 57000), + (22332, 21130, 'playerstudio/characters/cloaks/radiantrosewrap/cloak_radiantrosewrap', 57000), + (22333, 21131, 'playerstudio/characters/cloaks/travelersjoy/cloak_travelersjoy', 57000), + (22334, 21132, 'staticobjects/barrels/bbm_wheelbarrow_dwarf01_dpo', 57000), + (22335, 21133, 'staticobjects/barrels/vastydeep01_objects01_barrel01_dpo', 57000), + (22336, 21134, 'staticobjects/plants/ej_upper_spikeyflower_bush01_dpo', 57000), + (22337, 21135, 'staticobjects/plants/po_long_leaf_plant04_dpo', 57000), + (22338, 21136, 'staticobjects/plants/po_meadow_bush01_dpo', 57000), + (22339, 21137, 'staticobjects/plants/erollosi_grass_patch01_dpo', 57000), + (22340, 21138, 'staticobjects/plants/slove02_lilypad_large01_dpo', 57000), + (22341, 21139, 'staticobjects/plants/slove02_happy_tree02_dpo', 57000), + (22342, 21140, 'staticobjects/plants/po_pond_plant02_dpo', 57000), + (22343, 21141, 'staticobjects/plants/po_plant01_dpo', 57000), + (22344, 21142, 'staticobjects/plants/ej_sparse_bush_area01_10_dpo', 57000), + (22345, 21143, 'staticobjects/plants/ej_sparse_bush_area02_10_dpo', 57000), + (22346, 21144, 'staticobjects/plants/po_hanging_vine02_dpo', 57000), + (22347, 21145, 'staticobjects/plants/po_dead_bush01_dpo', 57000), + (22348, 21146, 'staticobjects/pictures/tcg_painting_meatbeast', 57000), + (22349, 21147, '_exp10/characters/monsters/armapine/armapine_basic', 57000), + (22350, 21148, '_exp10/characters/monsters/armapine/armapine_elementalfire', 57000), + (22351, 21149, '_exp10/characters/monsters/armapine/armapine_redbone', 57000), + (22352, 21150, 'accessories/wearable_items/_exp09/wyvern_armors/gi_green/head_sarnak/head', 57000), + (22353, 21151, 'accessories/wearable_items/_exp09/wyvern_armors/gi_red/head_sarnak/head', 57000), + (22354, 21152, 'accessories/wieldable_items/shields/exp09/roundshield_shipwheel_barnacled', 57000), + (22355, 21153, 'accessories/wieldable_items/shields/exp09/roundshield_shipwheel_pristine', 57000), + (22356, 21154, '_exp09/characters/monsters/fish_angler/fish_angler_base', 57000), + (22357, 21155, 'accessories/npc_wearables/ulthork_undead/ulthork_undead_othmir_attachment', 57000), + (22358, 21156, 'staticobjects/_exp08/cobalt_scar/cs_driftwood_01_dpo', 57000), + (22359, 21157, 'playerstudio/characters/weapons/2h_sword/eq2_katana/eq2_katana', 57000), + (22360, 21158, '_exp08/objects/cobalt_scar/othmir_empty_bucket', 57000), + (22361, 21159, 'accessories/wieldable_items/weapons/exp09/1h_pierce/dagger_nightborne', 57000), + (22362, 21160, 'accessories/wieldable_items/weapons/exp09/1h_pierce/dagger_nightborne_spd', 57000), + (22363, 21161, 'creatures/mounts/meatbeast_mount/meatbeast_angus', 57000), + (22364, 21162, 'creatures/mounts/meatbeast_mount/meatbeast_base', 57000), + (22365, 21163, 'creatures/mounts/meatbeast_mount/meatbeast_brown_spotted', 57000), + (22366, 21164, 'creatures/mounts/meatbeast_mount/meatbeast_jersey', 57000), + (22367, 21165, '_exp08/objects/cobalt_scar/othmir_guts', 57000), + (22368, 21166, 'playerstudio/houseitems/wooden_tub_dpo', 57000), + (22369, 21167, 'staticobjects/plants/dw_tree_crookedtree01_dpo', 57000), + (22370, 21168, 'staticobjects/rocks/kejak_rock01_dpo', 57000), + (22371, 21169, 'staticobjects/flora/nekf_mushroom_b_mature_dpo', 57000), + (22372, 21170, 'creatures/monsters/ankylosaurus_variant_2013', 57000), + (22373, 21171, '_exp10/characters/tool_users/cursed_nyad_base', 57000), + (22374, 21172, 'staticobjects/rocks/nekf_rock_small_e_dpo', 57000), + (22375, 21173, 'staticobjects/rocks/rock02_dpo', 57000), + (22376, 21174, 'staticobjects/plants/wl_orchid_flower01_dpo', 57000), + (22377, 21175, 'staticobjects/plants/wl_happy_flower02_dpo', 57000), + (22378, 21176, 'staticobjects/tree/ew_roots_tree01_dead_dpo', 57000), + (22379, 21177, 'staticobjects/tree/ss_tree_palm01_dpo', 57000), + (22380, 21178, 'staticobjects/tree/ss_tree_palm02_dpo', 57000), + (22381, 21179, 'staticobjects/plants/dw_objects_plantleaf02_dpo', 57000), + (22382, 21180, 'staticobjects/plants/odso_agave02_dpo', 57000), + (22383, 21181, '_exp10/characters/tool_users/lizardkin/lizardkin_boss', 57000), + (22384, 21182, '_exp10/characters/tool_users/lizardkin/lizardkin_common', 57000), + (22385, 21183, '_exp10/characters/tool_users/lizardkin/lizardkin_healer', 57000), + (22386, 21184, '_exp10/characters/tool_users/lizardkin/lizardkin_scout', 57000), + (22387, 21185, '_exp08/objects/cobalt_scar/cs_othmir_fully_corrupt_bone_ground_dpo', 57000), + (22388, 21186, 'accessories/wieldable_items/weapons/exp08/2h_sword/exp08_2hs_sword_combine2_qeynos', 57000), + (22389, 21187, 'accessories/wieldable_items/weapons/exp09/staff/exp09_spear_ulthork_skull', 57000), + (22390, 21188, 'accessories/wieldable_items/weapons/exp09/staff/exp09_spear_ulthork_tusk', 57000), + (22391, 21189, '_exp08/characters/tool_users/ulthork/ulthork_male_spear', 57000), + (22392, 21190, 'playerstudio/characters/hair/darkelf/covic_test', 57000), + (22393, 21191, 'creatures/pets/meatbeast_calf/meatbeast_calf_fools', 57000), + (22394, 21192, 'accessories/wieldable_items/weapons/exp09/1h_sword/1h_sword_nightborne', 57000), + (22395, 21193, '_exp08/objects/ballista_animated', 57000), + (22396, 21194, 'accessories/wearable_items/_exp09/aquatic_armor/hydra_helm/head_hydrahelm', 57000), + (22397, 21195, 'accessories/wearable_items/_exp09/aquatic_armor/hydra_helm/head_hydrahelm_noeye', 57000), + (22398, 21196, 'accessories/wearable_items/_exp09/aquatic_armor/hydra_helm/head_hydrahelm_oneeye', 57000), + (22399, 21197, '_exp08/objects/cobalt_scar/cs_corrupt_bone_portal_dpo', 57000), + (22400, 21198, '_exp03/characters/monsters/wood_elemental_headglow1', 57000), + (22401, 21199, '_exp03/characters/monsters/wood_elemental_headglow2', 57000), + (22402, 21200, 'playerstudio/characters/shields/tower_round_shields/shield_of_runes/shield_of_runes', 57000), + (22403, 21201, 'playerstudio/characters/shields/tower_round_shields/khanigit/khanigit', 57000), + (22404, 21202, '_exp08/objects/cobalt_scar/cs_nc_gravestone1', 57000), + (22405, 21203, '_exp08/objects/cobalt_scar/cs_nc_gravestone1_wings', 57000), + (22406, 21204, '_exp08/objects/cobalt_scar/cs_nc_gravestone2', 57000), + (22407, 21205, '_exp08/objects/cobalt_scar/cs_nc_gravestone2_wings', 57000), + (22408, 21206, '_exp08/objects/cobalt_scar/cs_nc_gravestone3', 57000), + (22409, 21207, '_exp08/objects/cobalt_scar/cs_nc_gravestone3_wings', 57000), + (22410, 21208, '_exp08/objects/sirens_grotto/cage_01', 57000), + (22411, 21209, '_exp08/objects/sirens_grotto/cage_02', 57000), + (22412, 21210, '_exp08/objects/sirens_grotto/cage_03', 57000), + (22413, 21211, '_exp08/objects/cobalt_scar/cs_othmir_raft_femalepeasant', 57000), + (22414, 21212, '_exp08/objects/cobalt_scar/cs_othmir_raft_malewarrior01', 57000), + (22415, 21213, '_exp08/objects/cobalt_scar/cs_othmir_raft_shaman01', 57000), + (22416, 21214, '_exp08/objects/cobalt_scar/cs_othmir_totem01', 57000), + (22417, 21215, 'playerstudio/characters/hair_helm/hair/human_female/human_female_giftbuns/human_female_giftbuns', 57000), + (22418, 21216, 'creatures/mounts/meatbeast_mount/meatbeast_fools', 57000), + (22419, 21217, 'accessories/wieldable_items/weapons/exp10/1h_wand/wand_feartouched', 57000), + (22420, 21218, 'staticobjects/housing_portal_objects/vision_home_panda01', 57000), + (22421, 21219, '_exp08/objects/bones/cs_othmir_partly_corrupt_bone_dpo', 57000), + (22422, 21220, 'ec/npc/skeleton_no_summon', 57000), + (22423, 21221, '_exp09/objects/exp09_rgn_plains_of_obol/water_plane_quest_dpo_no_fx', 57000), + (22424, 21222, 'projectiles/throwing_star_of_fear', 57000), + (22425, 21223, 'staticobjects/_exp08/cobalt_scar/cs_othmir_tear_veeshan01', 57000), + (22426, 21224, 'staticobjects/_exp08/cobalt_scar/cs_othmir_tear_veeshan02', 57000), + (22427, 21225, 'staticobjects/panels/dpo_panel_invisible', 57000), + (22428, 21226, '_exp07/characters/tool_users/othmir/othmir_male_base_undead01', 57000), + (22429, 21227, '_exp07/characters/tool_users/othmir/othmir_undead_chief_black', 57000), + (22430, 21228, '_exp07/characters/tool_users/othmir/othmir_undead_female_black_02', 57000), + (22431, 21229, '_exp07/characters/tool_users/othmir/othmir_undead_female_stripes', 57000), + (22432, 21230, '_exp07/characters/tool_users/othmir/othmir_undead_peasent_black', 57000), + (22433, 21231, '_exp07/characters/tool_users/othmir/othmir_undead_peasent_brown', 57000), + (22434, 21232, '_exp07/characters/tool_users/othmir/othmir_undead_peasent_stripes', 57000), + (22435, 21233, '_exp07/characters/tool_users/othmir/othmir_undead_shaman_brown', 57000), + (22436, 21234, '_exp07/characters/tool_users/othmir/othmir_undead_warrior_brown', 57000), + (22437, 21235, 'playerstudio/houseitems/cs_nc_arrowpile', 57000), + (22438, 21236, 'playerstudio/houseitems/easternwalldecor', 57000), + (22439, 21237, 'playerstudio/houseitems/nc_ballistatop', 57000), + (22440, 21238, 'playerstudio/houseitems/sc_painting_cobalt_01', 57000), + (22441, 21239, 'playerstudio/houseitems/sc_painting_sirens02', 57000), + (22442, 21240, 'playerstudio/houseitems/sc_painting_sirens04', 57000), + (22443, 21241, 'playerstudio/houseitems/sg_clambed1_01', 57000), + (22444, 21242, 'playerstudio/houseitems/sgsc__kelp_hang01_blue', 57000), + (22445, 21243, 'playerstudio/houseitems/sgsc__kelp_hang01_red', 57000), + (22446, 21244, 'playerstudio/houseitems/sgsc__kelp_hang02_blue', 57000), + (22447, 21245, 'playerstudio/houseitems/sgsc__kelp_hang02_red', 57000), + (22448, 21246, 'playerstudio/houseitems/sgsc_column_big', 57000), + (22449, 21247, 'playerstudio/houseitems/sgsc_column_mermaid', 57000), + (22450, 21248, '_exp10/characters/monsters/nayad_cursed/nayad_cursed_caster_v1', 57000), + (22451, 21249, 'playerstudio/houseitems/sgsc_column_simple', 57000), + (22452, 21250, 'playerstudio/houseitems/sgsc_column_tall', 57000), + (22453, 21251, 'playerstudio/houseitems/sgsc_dias', 57000), + (22454, 21252, 'playerstudio/houseitems/sgsc_fence', 57000), + (22455, 21253, 'playerstudio/houseitems/sgsc_flayer_stat', 57000), + (22456, 21254, 'playerstudio/houseitems/sgsc_floor_lamp', 57000), + (22457, 21255, '_exp08/objects/cobalt_scar/tradeskilled/cs_nc_forge', 57000), + (22458, 21256, '_exp08/objects/cobalt_scar/tradeskilled/cs_nc_forgebellow', 57000), + (22459, 21257, '_exp08/objects/cobalt_scar/tradeskilled/cs_nc_largefancycrate', 57000), + (22460, 21258, '_exp08/objects/cobalt_scar/tradeskilled/cs_nc_roundrug_small', 57000), + (22461, 21259, '_exp08/objects/cobalt_scar/tradeskilled/cs_nc_table_half_round', 57000), + (22462, 21260, '_exp08/objects/cobalt_scar/tradeskilled/cs_nc_worktable', 57000), + (22463, 21261, '_exp08/objects/cobalt_scar/tradeskilled/cs_othmir_standing_banner', 57000), + (22464, 21262, '_exp08/objects/cobalt_scar/tradeskilled/cs_othmir_table', 57000), + (22465, 21263, '_exp08/objects/cobalt_scar/tradeskilled/cs_othmir_totem01', 57000), + (22466, 21264, '_exp08/objects/cobalt_scar/tradeskilled/cs_ter_sirens_circle_01', 57000), + (22467, 21265, '_exp08/objects/cobalt_scar/rewards/cs_nc_brazier_wall', 57000), + (22468, 21266, '_exp08/objects/cobalt_scar/rewards/cs_nc_lantern1', 57000), + (22469, 21267, '_exp08/objects/cobalt_scar/rewards/cs_nc_rug1', 57000), + (22470, 21268, '_exp08/objects/cobalt_scar/rewards/cs_nc_table_square', 57000), + (22471, 21269, '_exp08/objects/cobalt_scar/rewards/cs_nc_warboard_paper', 57000), + (22472, 21270, '_exp08/objects/cobalt_scar/rewards/cs_othmir_dragon_brazier', 57000), + (22473, 21271, '_exp08/objects/cobalt_scar/rewards/cs_othmir_dragon_shade', 57000), + (22474, 21272, '_exp08/objects/cobalt_scar/rewards/cs_othmir_stanfing_net', 57000), + (22475, 21273, '_exp08/objects/cobalt_scar/rewards/sc_painting_cobalt02', 57000), + (22476, 21274, '_exp08/objects/cobalt_scar/rewards/sc_painting_sirens01', 57000), + (22477, 21275, '_exp08/objects/cobalt_scar/rewards/sc_painting_sirens03', 57000), + (22478, 21276, '_exp08/objects/cobalt_scar/merchant/cs_coral_sponge01', 57000), + (22479, 21277, '_exp08/objects/cobalt_scar/merchant/cs_coral_sponge03', 57000), + (22480, 21278, '_exp08/objects/cobalt_scar/merchant/cs_ns_siege_shield2', 57000), + (22481, 21279, '_exp08/objects/cobalt_scar/merchant/sg_coral_tube_turqpink01', 57000), + (22482, 21280, '_exp08/objects/cobalt_scar/merchant/wl_nc_map', 57000), + (22483, 21281, '_exp04/monsters/leech_desert', 57000), + (22484, 21282, '_exp08/objects/cobalt_scar/rewards/cs_nc_candelabra_dpo', 57000), + (22485, 21283, '_exp08/objects/cobalt_scar/merchant/cs_nc_table_withered_map', 57000), + (22486, 21284, 'playerstudio/houseitems/engineers_bouquet', 57000), + (22487, 21285, '_exp08/objects/sirens_grotto/siren_queen_throne_dpo2', 57000), + (22488, 21286, '_exp10/characters/monsters/nagafen_2013/nagafen_2013', 57000), + (22489, 21287, '_exp10/characters/monsters/nayad_cursed/nayad_cursed_caster_v1_altaccessories', 57000), + (22490, 21288, '_exp10/characters/monsters/nayad_cursed/nayad_cursed_caster_v1_green', 57000), + (22491, 21289, '_exp10/characters/monsters/nayad_cursed/nayad_cursed_caster_v1_green_altaccessories', 57000), + (22492, 21290, '_exp10/characters/monsters/nayad_cursed/nayad_cursed_caster_v2', 57000), + (22493, 21291, '_exp10/characters/monsters/nayad_cursed/nayad_cursed_caster_v2_altaccessories', 57000), + (22494, 21292, '_exp10/characters/monsters/nayad_cursed/nayad_cursed_caster_v2_green', 57000), + (22495, 21293, '_exp10/characters/monsters/nayad_cursed/nayad_cursed_caster_v2_green_altaccessories', 57000), + (22496, 21294, '_exp10/characters/monsters/nayad_cursed/nayad_cursed_fighter_v1', 57000), + (22497, 21295, '_exp10/characters/monsters/nayad_cursed/nayad_cursed_fighter_v1_altaccessories', 57000), + (22498, 21296, '_exp10/characters/monsters/nayad_cursed/nayad_cursed_fighter_v1_green', 57000), + (22499, 21297, '_exp10/characters/monsters/nayad_cursed/nayad_cursed_fighter_v1_green_altaccessories', 57000), + (22500, 21298, '_exp10/characters/monsters/nayad_cursed/nayad_cursed_fighter_v2', 57000), + (22501, 21299, '_exp10/characters/monsters/nayad_cursed/nayad_cursed_fighter_v2_altaccessories', 57000), + (22502, 21300, '_exp10/characters/monsters/nayad_cursed/nayad_cursed_fighter_v2_green', 57000), + (22503, 21301, '_exp10/characters/monsters/nayad_cursed/nayad_cursed_fighter_v2_green_altaccessories', 57000), + (22504, 21302, 'playerstudio/characters/cloaks/tatteredcloak/cloak_tatteredcloak', 57000), + (22505, 21303, '_exp09/characters/tool_users/illithid/illithid_merc', 57000), + (22506, 21304, 'staticobjects/guildhall/trophies/floor_overlord_talan', 57000), + (22507, 21305, 'staticobjects/guildhall/trophies/floor_overlord_talan_challenge', 57000), + (22508, 21306, 'staticobjects/guildhall/trophies/floor_psyllonris', 57000), + (22509, 21307, '_exp10/characters/monsters/nayad_cursed/nayad_uncursed_caster1', 57000), + (22510, 21308, '_exp10/characters/monsters/nayad_cursed/nayad_uncursed_caster2', 57000), + (22511, 21309, '_exp10/characters/monsters/nayad_cursed/nayad_uncursed_fighter1', 57000), + (22512, 21310, '_exp10/characters/monsters/nayad_cursed/nayad_uncursed_fighter2', 57000), + (22513, 21311, 'creatures/pets/pet_kitten/odus_prowler_kitten_jade', 57000), + (22514, 21312, 'creatures/pets/pet_kitten/odus_prowler_kitten_marble', 57000), + (22515, 21313, 'creatures/pets/pet_kitten/odus_prowler_kitten_onyx', 57000), + (22516, 21314, '_exp08/characters/tool_users/ulthork/ulthork_male_spear_grey', 57000), + (22517, 21315, '_exp08/characters/tool_users/ulthork/ulthork_male_spear_heavy01', 57000), + (22518, 21316, '_exp08/characters/tool_users/ulthork/ulthork_male_spear_light01', 57000), + (22519, 21317, '_exp08/characters/tool_users/ulthork/ulthork_male_spear_shaman01', 57000), + (22520, 21318, '_exp08/characters/tool_users/ulthork/ulthork_male_spear_tattoo', 57000), + (22521, 21319, 'creatures/mounts/tinkered_barrel_mount/tinkered_barrel_mount', 57000), + (22522, 21320, '_exp08/objects/cobalt_scar/dead_combine_body_dpo', 57000), + (22523, 21321, 'playerstudio/characters/hair_helm/hair/halfelf_female/halfelf_female_giftbuns/halfelf_female_giftbuns', 57000), + (22524, 21322, 'playerstudio/characters/hair_helm/hair/darkelf_female/darkelf_female_giftbuns/darkelf_female_giftbuns', 57000), + (22525, 21323, 'playerstudio/characters/hair_helm/hair/highelf_female/highelf_female_giftbuns/highelf_female_giftbuns', 57000), + (22526, 21324, 'playerstudio/characters/hair_helm/hair/woodelf_female/woodelf_female_giftbuns/woodelf_female_giftbuns', 57000), + (22527, 21325, 'playerstudio/houseitems/acorn_chest_dpo', 57000), + (22528, 21326, 'playerstudio/houseitems/wooden_laundry_basket_dpo', 57000), + (22529, 21327, 'playerstudio/houseitems/wooden_laundry_tub_dpo', 57000), + (22530, 21328, 'playerstudio/houseitems/wooden_wash_basin_dpo', 57000), + (22531, 21329, 'accessories/wearable_items/_exp10/crimson_rivet_vanguard/chest', 57000), + (22532, 21330, 'accessories/wearable_items/_exp10/crimson_rivet_vanguard/feet', 57000), + (22533, 21331, 'accessories/wearable_items/_exp10/crimson_rivet_vanguard/forearms', 57000), + (22534, 21332, 'accessories/wearable_items/_exp10/crimson_rivet_vanguard/hands', 57000), + (22535, 21333, 'accessories/wearable_items/_exp10/crimson_rivet_vanguard/head', 57000), + (22536, 21334, 'accessories/wearable_items/_exp10/crimson_rivet_vanguard/head_skull', 57000), + (22537, 21335, 'accessories/wearable_items/_exp10/crimson_rivet_vanguard/legs', 57000), + (22538, 21336, 'accessories/wearable_items/_exp10/crimson_rivet_vanguard/legs_noskirt', 57000), + (22539, 21337, 'accessories/wearable_items/_exp10/crimson_rivet_vanguard/right', 57000), + (22540, 21338, 'accessories/wearable_items/_exp10/crimson_rivet_vanguard/shoulders', 57000), + (22541, 21339, 'accessories/wearable_items/_exp10/crimson_rivet_vanguard/shoulders_nopauldrons', 57000), + (22542, 21340, 'accessories/wearable_items/_exp10/crimson_rivet_vanguard/skirt', 57000), + (22543, 21341, '_exp08/objects/cobalt_scar/cs_othmir_beach_vert_bone_02_clean_dpo', 57000), + (22544, 21342, '_exp08/objects/cobalt_scar/cs_othmir_light_standing_dpo', 57000), + (22545, 21343, '_exp08/objects/cobalt_scar/cs_othmir_barricade_clean02_dpo', 57000), + (22546, 21344, '_exp08/characters/tool_users/combine_dwarf/combine_dwarf_optimized', 57000), + (22547, 21345, 'playerstudio/characters/shields/tower_round_shields/turtle/turtle', 57000), + (22548, 21346, 'playerstudio/characters/cloaks/cloak_of_endless_adventure/cloak_of_endless_adventure', 57000), + (22549, 21347, 'playerstudio/characters/cloaks/cloak_of_nature/cloak_of_nature', 57000), + (22550, 21348, 'playerstudio/characters/cloaks/glittersilkcloak/cloak_glittersillk', 57000), + (22551, 21349, 'playerstudio/characters/shields/tower_round_shields/shieldstructured/shieldstructured', 57000), + (22552, 21350, '_exp10/characters/monsters/elementalwater_sirens/elementalwater_sirens', 57000), + (22553, 21351, 'creatures/monsters/tyrannosaurus_variant', 57000), + (22554, 21352, 'accessories/wearable_items/_exp10/heroic_armors/robe/chest', 57000), + (22555, 21353, 'accessories/wearable_items/_exp10/heroic_armors/robe/chest_epic', 57000), + (22556, 21354, 'accessories/wearable_items/_exp10/heroic_armors/robe/feet', 57000), + (22557, 21355, 'accessories/wearable_items/_exp10/heroic_armors/robe/hands', 57000), + (22558, 21356, 'accessories/wearable_items/_exp10/heroic_armors/robe/head', 57000), + (22559, 21357, 'accessories/wearable_items/_exp10/heroic_armors/robe/head_collar', 57000), + (22560, 21358, 'accessories/wearable_items/_exp10/heroic_armors/robe/head_epic', 57000), + (22561, 21359, 'accessories/wearable_items/_exp10/heroic_armors/robe/pants', 57000), + (22562, 21360, 'accessories/wearable_items/_exp10/heroic_armors/robe/skirt', 57000), + (22563, 21361, 'accessories/wearable_items/_exp10/heroic_armors/robe/snapons/bracer_left', 57000), + (22564, 21362, 'accessories/wearable_items/_exp10/heroic_armors/robe/snapons/bracer_right', 57000), + (22565, 21363, 'accessories/wearable_items/_exp10/heroic_armors/robe/snapons/pauldron_left', 57000), + (22566, 21364, 'accessories/wearable_items/_exp10/heroic_armors/robe/snapons/pauldron_right', 57000), + (22567, 21365, 'accessories/wieldable_items/weapons/exp10/staff/octopus_pike_blue', 57000), + (22568, 21366, 'accessories/wieldable_items/weapons/exp10/staff/octopus_pike_red', 57000), + (22569, 21367, 'accessories/wieldable_items/weapons/exp10/2h_sword/octopus_sword/2h_octopus_sword_blue', 57000), + (22570, 21368, 'accessories/wieldable_items/weapons/exp10/2h_sword/octopus_sword/2h_octopus_sword_red', 57000), + (22571, 21369, 'accessories/wieldable_items/weapons/exp10/staff/exp10_2h_staff_illithid_merc', 57000), + (22572, 21370, 'creatures/tu/gods_solusek_ro_2013', 57000), + (22573, 21371, 'playerstudio/characters/weapons/staff/nightborne_stave/nightborne_stave', 57000), + (22574, 21372, 'playerstudio/characters/weapons/1h_crush/brutal_skullcrusher/brutal_skullcrusher', 57000), + (22575, 21373, 'staticobjects/liveevent/dpo_soe_live_2013_pillagers_booty', 57000), + (22576, 21374, 'playerstudio/characters/shields/tower_round_shields/reskunked/reskunked', 57000), + (22577, 21375, 'accessories/wearable_items/snapons/armbands/octopus_armband/octopus_armband', 57000), + (22578, 21376, 'accessories/wearable_items/snapons/armbands/octopus_armband/octopus_armband_left', 57000), + (22579, 21377, 'accessories/wearable_items/snapons/armbands/octopus_armband/octopus_armband_left_red', 57000), + (22580, 21378, 'accessories/wearable_items/_exp10/heroic_armors/robe_coercer/snapons/bracer_left', 57000), + (22581, 21379, 'accessories/wearable_items/_exp10/heroic_armors/robe_coercer/snapons/bracer_right', 57000), + (22582, 21380, 'accessories/wearable_items/_exp10/heroic_armors/robe_coercer/snapons/pauldron_left', 57000), + (22583, 21381, 'accessories/wearable_items/_exp10/heroic_armors/robe_coercer/snapons/pauldron_right', 57000), + (22584, 21382, 'accessories/wearable_items/_exp10/heroic_armors/robe_coercer/chest', 57000), + (22585, 21383, 'accessories/wearable_items/_exp10/heroic_armors/robe_coercer/chest_epic', 57000), + (22586, 21384, 'accessories/wearable_items/_exp10/heroic_armors/robe_coercer/feet', 57000), + (22587, 21385, 'accessories/wearable_items/_exp10/heroic_armors/robe_coercer/hands', 57000), + (22588, 21386, 'accessories/wearable_items/_exp10/heroic_armors/robe_coercer/head', 57000), + (22589, 21387, 'accessories/wearable_items/_exp10/heroic_armors/robe_coercer/head_epic', 57000), + (22590, 21388, 'accessories/wearable_items/_exp10/heroic_armors/robe_coercer/hood', 57000), + (22591, 21389, 'accessories/wearable_items/_exp10/heroic_armors/robe_coercer/pants', 57000), + (22592, 21390, 'accessories/wearable_items/_exp10/heroic_armors/robe_coercer/skirt', 57000), + (22593, 21391, 'accessories/wearable_items/_exp10/heroic_armors/robe_illusionist/chest', 57000), + (22594, 21392, 'accessories/wearable_items/_exp10/heroic_armors/robe_illusionist/chest_epic', 57000), + (22595, 21393, 'accessories/wearable_items/_exp10/heroic_armors/robe_illusionist/feet', 57000), + (22596, 21394, 'accessories/wearable_items/_exp10/heroic_armors/robe_illusionist/hands', 57000), + (22597, 21395, 'accessories/wearable_items/_exp10/heroic_armors/robe_illusionist/head', 57000), + (22598, 21396, 'accessories/wearable_items/_exp10/heroic_armors/robe_illusionist/head_epic', 57000), + (22599, 21397, 'accessories/wearable_items/_exp10/heroic_armors/robe_illusionist/hood', 57000), + (22600, 21398, 'accessories/wearable_items/_exp10/heroic_armors/robe_illusionist/pants', 57000), + (22601, 21399, 'accessories/wearable_items/_exp10/heroic_armors/robe_illusionist/skirt', 57000), + (22602, 21400, 'accessories/wearable_items/_exp10/heroic_armors/robe_illusionist/snapons/bracer_left', 57000), + (22603, 21401, 'accessories/wearable_items/_exp10/heroic_armors/robe_illusionist/snapons/bracer_right', 57000), + (22604, 21402, 'accessories/wearable_items/_exp10/heroic_armors/robe_illusionist/snapons/pauldron_left', 57000), + (22605, 21403, 'accessories/wearable_items/_exp10/heroic_armors/robe_illusionist/snapons/pauldron_right', 57000), + (22606, 21404, 'accessories/wearable_items/_exp10/heroic_armors/robe_necromancer/chest', 57000), + (22607, 21405, 'accessories/wearable_items/_exp10/heroic_armors/robe_necromancer/chest_epic', 57000), + (22608, 21406, 'accessories/wearable_items/_exp10/heroic_armors/robe_necromancer/feet', 57000), + (22609, 21407, 'accessories/wearable_items/_exp10/heroic_armors/robe_necromancer/hands', 57000), + (22610, 21408, 'accessories/wearable_items/_exp10/heroic_armors/robe_necromancer/head', 57000), + (22611, 21409, 'accessories/wearable_items/_exp10/heroic_armors/robe_necromancer/head_epic', 57000), + (22612, 21410, 'accessories/wearable_items/_exp10/heroic_armors/robe_necromancer/hood', 57000), + (22613, 21411, 'accessories/wearable_items/_exp10/heroic_armors/robe_necromancer/pants', 57000), + (22614, 21412, 'accessories/wearable_items/_exp10/heroic_armors/robe_necromancer/skirt', 57000), + (22615, 21413, 'accessories/wearable_items/_exp10/heroic_armors/robe_necromancer/snapons/bracer_left', 57000), + (22616, 21414, 'accessories/wearable_items/_exp10/heroic_armors/robe_necromancer/snapons/bracer_right', 57000), + (22617, 21415, 'accessories/wearable_items/_exp10/heroic_armors/robe_necromancer/snapons/pauldron_left', 57000), + (22618, 21416, 'accessories/wearable_items/_exp10/heroic_armors/robe_necromancer/snapons/pauldron_right', 57000), + (22619, 21417, 'accessories/wearable_items/_exp10/heroic_armors/robe_warlock/chest', 57000), + (22620, 21418, 'accessories/wearable_items/_exp10/heroic_armors/robe_warlock/chest_epic', 57000), + (22621, 21419, 'accessories/wearable_items/_exp10/heroic_armors/robe_warlock/feet', 57000), + (22622, 21420, 'accessories/wearable_items/_exp10/heroic_armors/robe_warlock/hands', 57000), + (22623, 21421, 'accessories/wearable_items/_exp10/heroic_armors/robe_warlock/head', 57000), + (22624, 21422, 'accessories/wearable_items/_exp10/heroic_armors/robe_warlock/head_epic', 57000), + (22625, 21423, 'accessories/wearable_items/_exp10/heroic_armors/robe_warlock/hood', 57000), + (22626, 21424, 'accessories/wearable_items/_exp10/heroic_armors/robe_warlock/pants', 57000), + (22627, 21425, 'accessories/wearable_items/_exp10/heroic_armors/robe_warlock/skirt', 57000), + (22628, 21426, 'accessories/wearable_items/_exp10/heroic_armors/robe_warlock/snapons/bracer_left', 57000), + (22629, 21427, 'accessories/wearable_items/_exp10/heroic_armors/robe_warlock/snapons/bracer_right', 57000), + (22630, 21428, 'accessories/wearable_items/_exp10/heroic_armors/robe_warlock/snapons/pauldron_left', 57000), + (22631, 21429, 'accessories/wearable_items/_exp10/heroic_armors/robe_warlock/snapons/pauldron_right', 57000), + (22632, 21430, 'accessories/wearable_items/_exp10/heroic_armors/robe_wizard/chest', 57000), + (22633, 21431, 'accessories/wearable_items/_exp10/heroic_armors/robe_wizard/chest_epic', 57000), + (22634, 21432, 'accessories/wearable_items/_exp10/heroic_armors/robe_wizard/feet', 57000), + (22635, 21433, 'accessories/wearable_items/_exp10/heroic_armors/robe_wizard/hands', 57000), + (22636, 21434, 'accessories/wearable_items/_exp10/heroic_armors/robe_wizard/head', 57000), + (22637, 21435, 'accessories/wearable_items/_exp10/heroic_armors/robe_wizard/head_epic', 57000), + (22638, 21436, 'accessories/wearable_items/_exp10/heroic_armors/robe_wizard/hood', 57000), + (22639, 21437, 'accessories/wearable_items/_exp10/heroic_armors/robe_wizard/pants', 57000), + (22640, 21438, 'accessories/wearable_items/_exp10/heroic_armors/robe_wizard/skirt', 57000), + (22641, 21439, 'accessories/wearable_items/_exp10/heroic_armors/robe_wizard/snapons/bracer_left', 57000), + (22642, 21440, 'accessories/wearable_items/_exp10/heroic_armors/robe_wizard/snapons/bracer_right', 57000), + (22643, 21441, 'accessories/wearable_items/_exp10/heroic_armors/robe_wizard/snapons/pauldron_left', 57000), + (22644, 21442, 'accessories/wearable_items/_exp10/heroic_armors/robe_wizard/snapons/pauldron_right', 57000), + (22645, 21443, 'accessories/wearable_items/snapons/armbands/octopus_armband/octopus_armband_both', 57000), + (22646, 21444, 'accessories/wearable_items/snapons/armbands/octopus_armband/octopus_armband_both_red', 57000), + (22647, 21445, 'accessories/wearable_items/snapons/armbands/octopus_armband/octopus_armband_right', 57000), + (22648, 21446, 'accessories/wearable_items/snapons/armbands/octopus_armband/octopus_armband_right_red', 57000), + (22649, 21447, 'accessories/wearable_items/_exp09/starter_armor/bruiser/arms', 57000), + (22650, 21448, 'accessories/wearable_items/_exp09/starter_armor/bruiser/chest', 57000), + (22651, 21449, 'accessories/wearable_items/_exp09/starter_armor/bruiser/legs', 57000), + (22652, 21450, 'accessories/wearable_items/_exp09/starter_armor/bruiser/female/chest', 57000), + (22653, 21451, 'accessories/wearable_items/_exp09/starter_armor/bruiser/female/legs', 57000), + (22654, 21452, 'accessories/wearable_items/_exp09/starter_armor/bruiser/female/shoulders', 57000), + (22655, 21453, 'accessories/wearable_items/_exp09/starter_armor/bruiser/male/chest', 57000), + (22656, 21454, 'accessories/wearable_items/_exp09/starter_armor/bruiser/male/shoulders', 57000), + (22657, 21455, 'accessories/wearable_items/_exp09/starter_armor/bruiser/male/skirt', 57000), + (22658, 21456, '_exp08/objects/sirens_grotto/siren_queen_throne_dpo3', 57000), + (22659, 21457, '_exp08/objects/sirens_grotto/siren_queen_throne_dpo4', 57000), + (22660, 21458, 'staticobjects/liveevent/tinkerfest/building_blocks/houseblock_1x1_column_stripedquarter', 57000), + (22661, 21459, 'staticobjects/liveevent/tinkerfest/building_blocks/houseblock_1x2_column_stripedquarter', 57000), + (22662, 21460, 'staticobjects/liveevent/tinkerfest/building_blocks/houseblock_1x2_dividerblock_stripedquarter', 57000), + (22663, 21461, 'staticobjects/liveevent/tinkerfest/building_blocks/houseblock_1xhalf_block_stripedquarter', 57000), + (22664, 21462, 'staticobjects/liveevent/tinkerfest/building_blocks/houseblock_2x2_dividerblock_stripedquarter', 57000), + (22665, 21463, 'staticobjects/liveevent/tinkerfest/building_blocks/houseblock_rail_stripedquarter', 57000), + (22666, 21464, 'staticobjects/liveevent/tinkerfest/building_blocks/houseblock_roundtile_stripedquarter', 57000), + (22667, 21465, 'staticobjects/liveevent/tinkerfest/building_blocks/houseblock_stair_stripedquarter', 57000), + (22668, 21466, 'staticobjects/liveevent/tinkerfest/building_blocks/housecube_1x1_block_stripedquarter', 57000), + (22669, 21467, 'staticobjects/liveevent/tinkerfest/dpo_eru_bench_research_short', 57000), + (22670, 21468, 'staticobjects/liveevent/tinkerfest/dpo_eru_bench_research_long', 57000), + (22671, 21469, 'staticobjects/liveevent/tinkerfest/dpo_erudin_weapon_wrench', 57000), + (22672, 21470, 'staticobjects/liveevent/tinkerfest/dpo_sfm_mining_railcart01', 57000), + (22673, 21471, 'staticobjects/liveevent/tinkerfest/dpo_sfm_mining_railcart_gravel01', 57000), + (22674, 21472, 'staticobjects/liveevent/tinkerfest/dpo_sfm_mechanical_arm01', 57000), + (22675, 21473, 'staticobjects/liveevent/tinkerfest/dpo_sfm_housing_door_smallbuilding01', 57000), + (22676, 21474, 'staticobjects/liveevent/tinkerfest/dpo_nh_wheel_spinable_silver', 57000), + (22677, 21475, 'staticobjects/liveevent/tinkerfest/dpo_nh_wheel_spinable', 57000), + (22678, 21476, 'staticobjects/liveevent/tinkerfest/dpo_nex_lever_metal', 57000), + (22679, 21477, 'staticobjects/liveevent/tinkerfest/dpo_df_objects_rug01', 57000), + (22680, 21478, 'staticobjects/liveevent/tinkerfest/dpo_dc_map_layout01', 57000), + (22681, 21479, 'staticobjects/liveevent/tinkerfest/dpo_klak_rm04_int_light', 57000), + (22682, 21480, 'accessories/wearable_items/_exp10/heroic_armors/gi/chest', 57000), + (22683, 21481, 'accessories/wearable_items/_exp10/heroic_armors/gi/feet', 57000), + (22684, 21482, 'accessories/wearable_items/_exp10/heroic_armors/gi/hands', 57000), + (22685, 21483, 'accessories/wearable_items/_exp10/heroic_armors/gi/head_sigil', 57000), + (22686, 21484, 'accessories/wearable_items/_exp10/heroic_armors/gi/legs', 57000), + (22687, 21485, 'accessories/wearable_items/_exp10/heroic_armors/gi/shoulders', 57000), + (22688, 21486, 'accessories/wearable_items/_exp10/heroic_armors/gi/skirt', 57000), + (22689, 21487, 'accessories/wearable_items/_exp10/heroic_armors/gi/snapons/armband_left', 57000), + (22690, 21488, 'accessories/wearable_items/_exp10/heroic_armors/gi/snapons/bracer_right', 57000), + (22691, 21489, 'accessories/wearable_items/_exp10/heroic_armors/gi/snapons/buckle', 57000), + (22692, 21490, 'accessories/wearable_items/_exp10/heroic_armors/gi/snapons/spaulder_right', 57000), + (22693, 21491, 'accessories/wearable_items/_exp10/heroic_armors/gi/belt/skirt 2', 57000), + (22694, 21492, 'accessories/wearable_items/_exp10/heroic_armors/gi/belt/skirt', 57000), + (22695, 21493, 'accessories/wearable_items/_exp10/heroic_armors/gi_monk/belt/skirt 2', 57000), + (22696, 21494, 'accessories/wearable_items/_exp10/heroic_armors/gi_monk/belt/skirt', 57000), + (22697, 21495, 'accessories/wearable_items/_exp10/heroic_armors/gi_monk/snapons/armband_left', 57000), + (22698, 21496, 'accessories/wearable_items/_exp10/heroic_armors/gi_monk/snapons/bracer_right', 57000), + (22699, 21497, 'accessories/wearable_items/_exp10/heroic_armors/gi_monk/snapons/spaulder_right', 57000), + (22700, 21498, 'accessories/wearable_items/_exp10/heroic_armors/gi_monk/chest', 57000), + (22701, 21499, 'accessories/wearable_items/_exp10/heroic_armors/gi_monk/feet', 57000), + (22702, 21500, 'accessories/wearable_items/_exp10/heroic_armors/gi_monk/hands', 57000), + (22703, 21501, 'accessories/wearable_items/_exp10/heroic_armors/gi_monk/head_sigil', 57000), + (22704, 21502, 'accessories/wearable_items/_exp10/heroic_armors/gi_monk/legs', 57000), + (22705, 21503, 'accessories/wearable_items/_exp10/heroic_armors/gi_monk/shoulders', 57000), + (22706, 21504, 'accessories/wearable_items/_exp10/heroic_armors/gi_monk/skirt', 57000), + (22707, 21505, 'staticobjects/liveevent/tinkerfest/dpo_klak_smokeflap', 57000), + (22708, 21506, 'staticobjects/liveevent/tinkerfest/dpo_nh_wheel_spinable_gold', 57000), + (22709, 21507, 'playerstudio/houseitems/goldbanquest_tureen', 57000), + (22710, 21508, 'playerstudio/houseitems/goldbanquet_butterdish', 57000), + (22711, 21509, 'playerstudio/houseitems/goldbanquet_candestick', 57000), + (22712, 21510, 'playerstudio/houseitems/goldbanquet_roast', 57000), + (22713, 21511, 'playerstudio/houseitems/goldbanquet_setting', 57000), + (22714, 21512, 'playerstudio/houseitems/goldenbanquest_sundae', 57000), + (22715, 21513, 'playerstudio/characters/weapons/staff/spear_of_the_grotto/spear_of_the_grotto', 57000), + (22716, 21514, 'playerstudio/characters/cloaks/twilightinspirations/cloak_twilightinspirations', 57000), + (22717, 21515, '_exp10/characters/monsters/yelniak_2013/yelinak_2013', 57000), + (22718, 21516, 'creatures/tu/firiona_vie_no_staff', 57000), + (22719, 21517, 'accessories/wearable_items/_exp09/starter_armor/beserker/chest', 57000), + (22720, 21518, 'accessories/wearable_items/_exp09/starter_armor/beserker/feet', 57000), + (22721, 21519, 'accessories/wearable_items/_exp09/starter_armor/beserker/forearms', 57000), + (22722, 21520, 'accessories/wearable_items/_exp09/starter_armor/beserker/hands', 57000), + (22723, 21521, 'accessories/wearable_items/_exp09/starter_armor/beserker/head', 57000), + (22724, 21522, 'accessories/wearable_items/_exp09/starter_armor/beserker/left', 57000), + (22725, 21523, 'accessories/wearable_items/_exp09/starter_armor/beserker/legs', 57000), + (22726, 21524, 'accessories/wearable_items/_exp09/starter_armor/beserker/legs_noskirt', 57000), + (22727, 21525, 'accessories/wearable_items/_exp09/starter_armor/beserker/right', 57000), + (22728, 21526, 'accessories/wearable_items/_exp09/starter_armor/beserker/shoulders', 57000), + (22729, 21527, 'accessories/wearable_items/_exp09/starter_armor/beserker/shoulders_nopauldrons', 57000), + (22730, 21528, 'accessories/wearable_items/_exp09/starter_armor/beserker/skirt', 57000), + (22731, 21529, 'accessories/wearable_items/_exp09/starter_armor/bruiser2/chest', 57000), + (22732, 21530, 'accessories/wearable_items/_exp09/starter_armor/bruiser2/feet', 57000), + (22733, 21531, 'accessories/wearable_items/_exp09/starter_armor/bruiser2/forearms', 57000), + (22734, 21532, 'accessories/wearable_items/_exp09/starter_armor/bruiser2/hands', 57000), + (22735, 21533, 'accessories/wearable_items/_exp09/starter_armor/bruiser2/head', 57000), + (22736, 21534, 'accessories/wearable_items/_exp09/starter_armor/bruiser2/legs', 57000), + (22737, 21535, 'accessories/wearable_items/_exp09/starter_armor/bruiser2/legs_noskirt', 57000), + (22738, 21536, 'accessories/wearable_items/_exp09/starter_armor/bruiser2/shoulders', 57000), + (22739, 21537, 'accessories/wearable_items/_exp09/starter_armor/bruiser2/skirt', 57000), + (22740, 21538, 'accessories/wearable_items/_exp09/starter_armor/guardian/chest', 57000), + (22741, 21539, 'accessories/wearable_items/_exp09/starter_armor/guardian/feet', 57000), + (22742, 21540, 'accessories/wearable_items/_exp09/starter_armor/guardian/forearms', 57000), + (22743, 21541, 'accessories/wearable_items/_exp09/starter_armor/guardian/hands', 57000), + (22744, 21542, 'accessories/wearable_items/_exp09/starter_armor/guardian/head', 57000), + (22745, 21543, 'accessories/wearable_items/_exp09/starter_armor/guardian/left', 57000), + (22746, 21544, 'accessories/wearable_items/_exp09/starter_armor/guardian/legs', 57000), + (22747, 21545, 'accessories/wearable_items/_exp09/starter_armor/guardian/legs_noskirt', 57000), + (22748, 21546, 'accessories/wearable_items/_exp09/starter_armor/guardian/right', 57000), + (22749, 21547, 'accessories/wearable_items/_exp09/starter_armor/guardian/shoulders', 57000), + (22750, 21548, 'accessories/wearable_items/_exp09/starter_armor/guardian/shoulders_nopauldrons', 57000), + (22751, 21549, 'accessories/wearable_items/_exp09/starter_armor/guardian/skirt', 57000), + (22752, 21550, 'accessories/wearable_items/_exp09/starter_armor/inquisitor/chest', 57000), + (22753, 21551, 'accessories/wearable_items/_exp09/starter_armor/inquisitor/feet', 57000), + (22754, 21552, 'accessories/wearable_items/_exp09/starter_armor/inquisitor/forearms', 57000), + (22755, 21553, 'accessories/wearable_items/_exp09/starter_armor/inquisitor/hands', 57000), + (22756, 21554, 'accessories/wearable_items/_exp09/starter_armor/inquisitor/head', 57000), + (22757, 21555, 'accessories/wearable_items/_exp09/starter_armor/inquisitor/legs', 57000), + (22758, 21556, 'accessories/wearable_items/_exp09/starter_armor/inquisitor/shoulders', 57000), + (22759, 21557, 'accessories/wearable_items/_exp09/starter_armor/monk/chest', 57000), + (22760, 21558, 'accessories/wearable_items/_exp09/starter_armor/monk/feet', 57000), + (22761, 21559, 'accessories/wearable_items/_exp09/starter_armor/monk/forearms', 57000), + (22762, 21560, 'accessories/wearable_items/_exp09/starter_armor/monk/hands', 57000), + (22763, 21561, 'accessories/wearable_items/_exp09/starter_armor/monk/head', 57000), + (22764, 21562, 'accessories/wearable_items/_exp09/starter_armor/monk/legs', 57000), + (22765, 21563, 'accessories/wearable_items/_exp09/starter_armor/monk/legs_noskirt', 57000), + (22766, 21564, 'accessories/wearable_items/_exp09/starter_armor/monk/shoulders', 57000), + (22767, 21565, 'accessories/wearable_items/_exp09/starter_armor/monk/skirt', 57000), + (22768, 21566, 'accessories/wearable_items/_exp09/starter_armor/templar/chest', 57000), + (22769, 21567, 'accessories/wearable_items/_exp09/starter_armor/templar/feet', 57000), + (22770, 21568, 'accessories/wearable_items/_exp09/starter_armor/templar/forearms', 57000), + (22771, 21569, 'accessories/wearable_items/_exp09/starter_armor/templar/hands', 57000), + (22772, 21570, 'accessories/wearable_items/_exp09/starter_armor/templar/head', 57000), + (22773, 21571, 'accessories/wearable_items/_exp09/starter_armor/templar/legs', 57000), + (22774, 21572, 'accessories/wearable_items/_exp09/starter_armor/templar/shoulders', 57000), + (22775, 21573, 'staticobjects/liveevent/tinkerfest/dpo_houseitem_drill_lightning_ceiling', 57000), + (22776, 21574, 'staticobjects/liveevent/tinkerfest/dpo_houseitem_drill_lightning_floor', 57000), + (22777, 21575, 'staticobjects/liveevent/tinkerfest/dpo_houseitem_gear_fixture_lightning_ceiling', 57000), + (22778, 21576, 'staticobjects/liveevent/tinkerfest/dpo_houseitem_ring_portals_ceiling', 57000), + (22779, 21577, 'staticobjects/liveevent/tinkerfest/dpo_houseitem_ring_portals_floor', 57000), + (22780, 21578, 'staticobjects/liveevent/tinkerfest/dpo_houseitem_wrench_gears_ceiling', 57000), + (22781, 21579, 'staticobjects/liveevent/tinkerfest/dpo_houseitem_wrench_gears_floor', 57000), + (22782, 21580, '_exp09/characters/tool_users/illithid/illithid_prexus', 57000), + (22783, 21581, 'accessories/wieldable_items/weapons/exp10/staff/exp10_2h_staff_illithid_prexus', 57000), + (22784, 21582, 'playerstudio/characters/weapons/1h_sword/nightborne_short_axe/nightborne_short_axe', 57000), + (22785, 21583, '_exp02/characters/monsters/tarranax_pet', 57000), + (22786, 21584, 'staticobjects/liveevent/tinkerfest/dpo_tinkerfest_smokeflap', 57000), + (22787, 21585, 'creatures/mounts/lion_winged/lion_winged_black', 57000), + (22788, 21586, 'creatures/mounts/lion_winged/lion_winged_white', 57000), + (22789, 21587, 'staticobjects/liveevent/tinkerfest/dpo_tinker_diggerengine', 57000), + (22790, 21588, 'staticobjects/liveevent/tinkerfest/dpo_tinker_medicalbench01', 57000), + (22791, 21589, 'staticobjects/liveevent/tinkerfest/dpo_menacekeydevice', 57000), + (22792, 21590, 'staticobjects/liveevent/tinkerfest/dpo_tinker_fanmotor01', 57000), + (22793, 21591, 'staticobjects/liveevent/tinkerfest/dpo_tinker_magneticstrip', 57000), + (22794, 21592, 'staticobjects/liveevent/tinkerfest/dpo_tinker_wall_gear_spinning', 57000), + (22795, 21593, 'staticobjects/liveevent/tinkerfest/dpo_tinker_small_engine_01', 57000), + (22796, 21594, 'staticobjects/liveevent/tinkerfest/dpo_tinker_piston_01', 57000), + (22797, 21595, 'staticobjects/liveevent/tinkerfest/dpo_tinker_gear_01', 57000), + (22798, 21596, 'staticobjects/liveevent/tinkerfest/dpo_tinker_gear_02', 57000), + (22799, 21597, 'staticobjects/liveevent/tinkerfest/dpo_tinker_raft_engine_01', 57000), + (22800, 21598, 'staticobjects/liveevent/tinkerfest/dpo_tinker_paddle01', 57000), + (22801, 21599, 'accessories/wieldable_items/weapons/exp09/1h_pierce/dagger_dracurion', 57000), + (22802, 21600, 'accessories/wieldable_items/weapons/exp09/1h_pierce/dagger_dracurion_blue', 57000), + (22803, 21601, 'accessories/wieldable_items/weapons/exp09/1h_pierce/dagger_dracurion_purple', 57000), + (22804, 21602, 'accessories/wieldable_items/weapons/exp09/1h_sword/1h_sword_dracurion', 57000), + (22805, 21603, 'accessories/wieldable_items/weapons/exp09/1h_sword/1h_sword_dracurion_blue', 57000), + (22806, 21604, 'accessories/wieldable_items/weapons/exp09/1h_sword/1h_sword_dracurion_purple', 57000), + (22807, 21605, 'accessories/wieldable_items/weapons/exp09/2h_sword/2h_sword_dracurion', 57000), + (22808, 21606, 'accessories/wieldable_items/weapons/exp09/2h_sword/2h_sword_dracurion_black', 57000), + (22809, 21607, 'accessories/wieldable_items/weapons/exp09/2h_sword/2h_sword_dracurion_blue', 57000), + (22810, 21608, 'accessories/wieldable_items/weapons/exp09/2h_sword/2h_sword_dracurion_obsidian', 57000), + (22811, 21609, 'accessories/wieldable_items/weapons/exp09/2h_sword/2h_sword_dracurion_purple', 57000), + (22812, 21610, 'staticobjects/liveevent/tinkerfest/dpo_tinker_barrel01', 57000), + (22813, 21611, 'staticobjects/liveevent/tinkerfest/dpo_tinker_hourhand', 57000), + (22814, 21612, 'staticobjects/liveevent/tinkerfest/dpo_tinker_lamp_01', 57000), + (22815, 21613, 'staticobjects/liveevent/tinkerfest/dpo_tinker_zoograte', 57000), + (22816, 21614, 'staticobjects/liveevent/tinkerfest/dpo_tinker_barrel02', 57000), + (22817, 21615, 'staticobjects/liveevent/tinkerfest/dpo_tinker_gnome_gear01', 57000), + (22818, 21616, 'staticobjects/liveevent/tinkerfest/dpo_tinker_gaslamps01', 57000), + (22819, 21617, 'staticobjects/liveevent/tinkerfest/dpo_tinker_gaslamps02', 57000), + (22820, 21618, 'staticobjects/liveevent/tinkerfest/dpo_tinker_landing_pipes01', 57000), + (22821, 21619, 'staticobjects/liveevent/tinkerfest/dpo_tinker_sfmgear01', 57000), + (22822, 21620, 'staticobjects/liveevent/tinkerfest/dpo_tinker_sfmgear02', 57000), + (22823, 21621, 'staticobjects/liveevent/tinkerfest/dpo_tinker_large_tank01_vibrating', 57000), + (22824, 21622, 'staticobjects/liveevent/tinkerfest/dpo_tinkerfest_main_console', 57000), + (22825, 21623, 'staticobjects/liveevent/tinkerfest/dpo_tinkerfest_slave_console', 57000), + (22826, 21624, 'accessories/wearable_items/magus/rare/low/head', 57000), + (22827, 21625, 'playerstudio/characters/cloaks/serpents_fang/serpents_fang', 57000), + (22828, 21626, 'playerstudio/characters/cloaks/sirens_breath/sirens_breath', 57000), + (22829, 21627, 'playerstudio/characters/hair_helm/hair/darkelf_female/disheveled_maiden/darkelf_female_disheveled_maiden', 57000), + (22830, 21628, 'staticobjects/raf/raf_trophy_rank1', 57000), + (22831, 21629, 'staticobjects/raf/raf_trophy_rank2', 57000), + (22832, 21630, 'staticobjects/raf/raf_trophy_rank3', 57000), + (22833, 21631, 'staticobjects/raf/raf_trophy_rank4', 57000), + (22834, 21632, 'staticobjects/raf/raf_trophy_rank5', 57000), + (22835, 21633, 'staticobjects/raf/raf_trophy_rank6', 57000), + (22836, 21634, 'accessories/wearable_items/cloak/water_cloak/water_cloak', 57000), + (22837, 21635, 'accessories/wieldable_items/weapons/exp10/1h_sword/heart_of_fear_1hs_sword/heart_of_fear_1hs_sword', 57000), + (22838, 21636, 'playerstudio/characters/shields/buckler/foam_buckler/foam_buckler', 57000), + (22839, 21637, '_exp09/characters/monsters/ethereal_construct/ethereal_construct_gold', 57000), + (22840, 21638, '_exp09/characters/monsters/ethereal_construct/ethereal_construct_gold_blue', 57000), + (22841, 21639, '_exp09/characters/monsters/ethereal_construct/ethereal_construct_gold_green', 57000), + (22842, 21640, '_exp09/characters/monsters/ethereal_construct/ethereal_construct_gold_purple', 57000), + (22843, 21641, 'creatures/mounts/carpet_fly_sun', 57000), + (22844, 21642, 'creatures/mounts/meatbeast_mount/meatbeast_mount_male_tiger', 57000), + (22845, 21643, 'creatures/mounts/skyshrine_drake_mount/skyshrine_drake_mount_black', 57000), + (22846, 21644, 'creatures/mounts/skyshrine_drake_mount/skyshrine_drake_mount_blue', 57000), + (22847, 21645, 'creatures/mounts/skyshrine_drake_mount/skyshrine_drake_mount_gold', 57000), + (22848, 21646, 'creatures/mounts/skyshrine_drake_mount/skyshrine_drake_mount_sleepers', 57000), + (22849, 21647, 'creatures/mounts/skyshrine_drake_mount/skyshrine_drake_mount_red', 57000), + (22850, 21648, 'playerstudio/characters/weapons/1h_sword/noble_scouting_axe/noble_scouting_axe', 57000), + (22851, 21649, 'playerstudio/houseitems/gold_banquet_bamboo', 57000), + (22852, 21650, 'playerstudio/houseitems/gold_banquet_bread', 57000), + (22853, 21651, 'playerstudio/houseitems/gold_banquet_porterhouse', 57000), + (22854, 21652, 'playerstudio/houseitems/starfall_seahorse', 57000), + (22855, 21653, 'playerstudio/houseitems/electricblue_seahorse', 57000), + (22856, 21654, 'playerstudio/houseitems/sunburst_seahorse', 57000), + (22857, 21655, 'playerstudio/houseitems/gnome_stove', 57000), + (22858, 21656, 'playerstudio/houseitems/everyman_paperstand', 57000), + (22859, 21657, 'playerstudio/houseitems/oakmyst_pianobench', 57000), + (22860, 21658, 'playerstudio/houseitems/oakmyst_piano', 57000), + (22861, 21659, 'playerstudio/houseitems/stone_everyman_throne', 57000), + (22862, 21660, 'playerstudio/houseitems/halfling_door', 57000), + (22863, 21661, 'staticobjects/liveevent/tinkerfest/dpo_tinker_wall_gears_no_spin', 57000), + (22864, 21662, '_exp03/characters/tool_users/clockwork_necro_protector_blue', 57000), + (22865, 21663, '_exp03/characters/tool_users/clockwork_necro_protector_red', 57000), + (22866, 21664, '_exp03/characters/tool_users/clockwork_necro_soldier_blue', 57000), + (22867, 21665, '_exp03/characters/tool_users/clockwork_necro_soldier_red', 57000), + (22868, 21666, 'accessories/wieldable_items/weapons/exp10/1h_crush/scepter_fear2', 57000), + (22869, 21667, 'accessories/wieldable_items/weapons/exp10/1h_pierce/dagger_fear', 57000), + (22870, 21668, 'accessories/wieldable_items/weapons/exp10/1h_pierce/dagger_fear2', 57000), + (22871, 21669, 'accessories/wieldable_items/weapons/exp10/1h_sword/sword_fear_bard', 57000), + (22872, 21670, 'accessories/wieldable_items/weapons/exp10/1h_sword/sword_fear_druid', 57000), + (22873, 21671, 'accessories/wieldable_items/weapons/exp10/1h_sword/sword_fear_sk', 57000), + (22874, 21672, 'accessories/wieldable_items/weapons/exp10/1h_sword/sword_fear_warrior', 57000), + (22875, 21673, 'accessories/wieldable_items/weapons/exp10/1h_sword/sword_fear2_bard', 57000), + (22876, 21674, 'accessories/wieldable_items/weapons/exp10/1h_sword/sword_fear2_druid', 57000), + (22877, 21675, 'accessories/wieldable_items/weapons/exp10/1h_sword/sword_fear2_shadowknight', 57000), + (22878, 21676, 'accessories/wieldable_items/weapons/exp10/bow/longbow_fear', 57000), + (22879, 21677, 'accessories/wieldable_items/weapons/exp10/shield/heart_of_fear_healer_shield', 57000), + (22880, 21678, 'accessories/wieldable_items/weapons/exp10/shield/heart_of_fear_mage_shield', 57000), + (22881, 21679, 'playerstudio/characters/shields/tower_round_shields/gnomish_utility_shield/gnomish_utility_shield', 57000), + (22882, 21680, 'accessories/wearable_items/profesion_hats/6k_epic_helm/head_6k_epic_helm', 57000), + (22883, 21681, 'accessories/wieldable_items/weapons/exp10/1h_pierce/dagger_fear2_necromancer', 57000), + (22884, 21682, 'playerstudio/characters/hair_helm/hair/woodelf_male/dreadlocks/woodelf_male_dreadlocks', 57000), + (22885, 21683, 'playerstudio/characters/weapons/1h_sword/fiddle/fiddle', 57000), + (22886, 21684, 'playerstudio/characters/weapons/1h_sword/bone_bow/bone_bow', 57000), + (22887, 21685, 'accessories/channeler_golem/channeler_golem_feet', 57000), + (22888, 21686, 'staticobjects/_exp08/dyod/mistmoore/dyod_cm_candle_white01_unlit', 57000), + (22889, 21687, 'accessories/wieldable_items/weapons/exp10/shield/heart_of_fear_healer_shield_no_socket', 57000), + (22890, 21688, 'accessories/wieldable_items/weapons/exp10/shield/heart_of_fear_mage_shield_no_socket', 57000), + (22891, 21689, '_exp10/characters/monsters/evil_butterfly/evil_butterfly', 57000), + (22892, 21690, 'accessories/wearable_items/cloak/exp09/cloak_bristlebane', 57000), + (22893, 21691, 'accessories/wearable_items/snapons/backpacks/backpack_tinkered_elaborate/backpack_tinkered_elaborate_bronze', 57000), + (22894, 21692, 'accessories/wearable_items/snapons/backpacks/backpack_tinkered_elaborate/backpack_tinkered_elaborate_iron', 57000), + (22895, 21693, 'accessories/wearable_items/snapons/backpacks/backpack_tinkered_elaborate/backpack_tinkered_elaborate_mahogany', 57000), + (22896, 21694, 'accessories/channeler_golem/channeler_golem_chest00', 57000), + (22897, 21695, '_exp10/characters/monsters/shissar_custodian/shissar_custodian', 57000), + (22898, 21696, 'accessories/wearable_items/_exp10/heroic_armors/leather-chain_shadowknight/chest', 57000), + (22899, 21697, 'accessories/wearable_items/_exp10/heroic_armors/leather-chain_shadowknight/feet_epic', 57000), + (22900, 21698, 'accessories/wearable_items/_exp10/heroic_armors/leather-chain_shadowknight/forearms', 57000), + (22901, 21699, 'accessories/wearable_items/_exp10/heroic_armors/leather-chain_shadowknight/hands_epic', 57000), + (22902, 21700, 'accessories/wearable_items/_exp10/heroic_armors/leather-chain_shadowknight/head_epic', 57000), + (22903, 21701, 'accessories/wearable_items/_exp10/heroic_armors/leather-chain_shadowknight/legs', 57000), + (22904, 21702, 'accessories/wearable_items/_exp10/heroic_armors/leather-chain_shadowknight/shoulders', 57000), + (22905, 21703, 'accessories/wearable_items/_exp10/heroic_armors/leather-chain_shadowknight/shoulders_epic', 57000), + (22906, 21704, 'accessories/wearable_items/_exp10/heroic_armors/leather-chain_shadowknight/skirt', 57000), + (22907, 21705, 'creatures/pets/channeler_golem/channeler_golem_base', 57000), + (22908, 21706, 'accessories/channeler_golem/channeler_golem_arms', 57000), + (22909, 21707, 'accessories/channeler_golem/channeler_golem_arms01', 57000), + (22910, 21708, 'accessories/channeler_golem/channeler_golem_arms02', 57000), + (22911, 21709, 'accessories/channeler_golem/channeler_golem_arms03', 57000), + (22912, 21710, 'accessories/channeler_golem/channeler_golem_arms04', 57000), + (22913, 21711, 'accessories/channeler_golem/channeler_golem_chest01', 57000), + (22914, 21712, 'accessories/channeler_golem/channeler_golem_chest02', 57000), + (22915, 21713, 'accessories/channeler_golem/channeler_golem_chest03', 57000), + (22916, 21714, 'accessories/channeler_golem/channeler_golem_feet01', 57000), + (22917, 21715, 'accessories/channeler_golem/channeler_golem_feet02', 57000), + (22918, 21716, 'accessories/channeler_golem/channeler_golem_feet03', 57000), + (22919, 21717, 'accessories/channeler_golem/channeler_golem_feet04', 57000), + (22920, 21718, 'accessories/channeler_golem/channeler_golem_head', 57000), + (22921, 21719, 'accessories/channeler_golem/channeler_golem_head01', 57000), + (22922, 21720, 'accessories/channeler_golem/channeler_golem_head02', 57000), + (22923, 21721, 'accessories/channeler_golem/channeler_golem_head03', 57000), + (22924, 21722, 'accessories/channeler_golem/channeler_golem_head04', 57000), + (22925, 21723, 'accessories/channeler_golem/channeler_golem_shoulder', 57000), + (22926, 21724, 'accessories/channeler_golem/channeler_golem_shoulder01', 57000), + (22927, 21725, 'accessories/channeler_golem/channeler_golem_shoulder02', 57000), + (22928, 21726, 'accessories/channeler_golem/channeler_golem_shoulder03', 57000), + (22929, 21727, 'accessories/channeler_golem/channeler_golem_shoulder04', 57000), + (22930, 21728, 'accessories/channeler_golem/channeler_golem_thighs01', 57000), + (22931, 21729, 'accessories/channeler_golem/channeler_golem_thighs02', 57000), + (22932, 21730, '_exp09/objects/dpo/housing/guildhall_trophy_arena_of_the_gods_ornate', 57000), + (22933, 21731, 'accessories/wearable_items/_exp10/heroic_armors/leather-chain_shadowknight/snapons/belt', 57000), + (22934, 21732, 'accessories/wearable_items/_exp10/heroic_armors/leather-chain_shadowknight/snapons/forearm_left', 57000), + (22935, 21733, 'accessories/wearable_items/_exp10/heroic_armors/leather-chain_shadowknight/snapons/forearm_right', 57000), + (22936, 21734, 'accessories/wearable_items/_exp10/heroic_armors/leather-chain_shadowknight/snapons/head_epic', 57000), + (22937, 21735, 'accessories/wearable_items/_exp10/heroic_armors/leather-chain_shadowknight/snapons/pauldron_guard_left', 57000), + (22938, 21736, 'accessories/wearable_items/_exp10/heroic_armors/leather-chain_shadowknight/snapons/pauldron_left', 57000), + (22939, 21737, 'accessories/wearable_items/_exp10/heroic_armors/leather-chain_shadowknight/snapons/pauldron_right', 57000), + (22940, 21738, 'accessories/wearable_items/_exp10/heroic_armors/leather-chain_shadowknight/snapons/shin_left', 57000), + (22941, 21739, 'accessories/wearable_items/_exp10/heroic_armors/leather-chain_shadowknight/snapons/shin_right', 57000), + (22942, 21740, 'accessories/wearable_items/_exp10/heroic_armors/leather-chain_paladin/chest', 57000), + (22943, 21741, 'accessories/wearable_items/_exp10/heroic_armors/leather-chain_paladin/feet_epic', 57000), + (22944, 21742, 'accessories/wearable_items/_exp10/heroic_armors/leather-chain_paladin/forearms', 57000), + (22945, 21743, 'accessories/wearable_items/_exp10/heroic_armors/leather-chain_paladin/hands_epic', 57000), + (22946, 21744, 'accessories/wearable_items/_exp10/heroic_armors/leather-chain_paladin/head_epic', 57000), + (22947, 21745, 'accessories/wearable_items/_exp10/heroic_armors/leather-chain_paladin/legs', 57000), + (22948, 21746, 'accessories/wearable_items/_exp10/heroic_armors/leather-chain_paladin/shoulders', 57000), + (22949, 21747, 'accessories/wearable_items/_exp10/heroic_armors/leather-chain_paladin/shoulders_epic', 57000), + (22950, 21748, 'accessories/wearable_items/_exp10/heroic_armors/leather-chain_paladin/skirt', 57000), + (22951, 21749, 'accessories/wearable_items/_exp10/heroic_armors/leather-chain_paladin/snapons/belt', 57000), + (22952, 21750, 'accessories/wearable_items/_exp10/heroic_armors/leather-chain_paladin/snapons/forearm_left', 57000), + (22953, 21751, 'accessories/wearable_items/_exp10/heroic_armors/leather-chain_paladin/snapons/forearm_right', 57000), + (22954, 21752, 'accessories/wearable_items/_exp10/heroic_armors/leather-chain_paladin/snapons/head_epic', 57000), + (22955, 21753, 'accessories/wearable_items/_exp10/heroic_armors/leather-chain_paladin/snapons/pauldron_guard_left', 57000), + (22956, 21754, 'accessories/wearable_items/_exp10/heroic_armors/leather-chain_paladin/snapons/pauldron_left', 57000), + (22957, 21755, 'accessories/wearable_items/_exp10/heroic_armors/leather-chain_paladin/snapons/pauldron_right', 57000), + (22958, 21756, 'accessories/wearable_items/_exp10/heroic_armors/leather-chain_paladin/snapons/shin_left', 57000), + (22959, 21757, 'accessories/wearable_items/_exp10/heroic_armors/leather-chain_paladin/snapons/shin_right', 57000), + (22960, 21758, 'accessories/wearable_items/_exp10/heroic_armors/leather-chain_guardian/chest', 57000), + (22961, 21759, 'accessories/wearable_items/_exp10/heroic_armors/leather-chain_guardian/feet_epic', 57000), + (22962, 21760, 'accessories/wearable_items/_exp10/heroic_armors/leather-chain_guardian/forearms', 57000), + (22963, 21761, 'accessories/wearable_items/_exp10/heroic_armors/leather-chain_guardian/hands_epic', 57000), + (22964, 21762, 'accessories/wearable_items/_exp10/heroic_armors/leather-chain_guardian/head_epic', 57000), + (22965, 21763, 'accessories/wearable_items/_exp10/heroic_armors/leather-chain_guardian/legs', 57000), + (22966, 21764, 'accessories/wearable_items/_exp10/heroic_armors/leather-chain_guardian/shoulders', 57000), + (22967, 21765, 'accessories/wearable_items/_exp10/heroic_armors/leather-chain_guardian/shoulders_epic', 57000), + (22968, 21766, 'accessories/wearable_items/_exp10/heroic_armors/leather-chain_guardian/skirt', 57000), + (22969, 21767, 'accessories/wearable_items/_exp10/heroic_armors/leather-chain_guardian/snapons/belt', 57000), + (22970, 21768, 'accessories/wearable_items/_exp10/heroic_armors/leather-chain_guardian/snapons/forearm_left', 57000), + (22971, 21769, 'accessories/wearable_items/_exp10/heroic_armors/leather-chain_guardian/snapons/forearm_right', 57000), + (22972, 21770, 'accessories/wearable_items/_exp10/heroic_armors/leather-chain_guardian/snapons/head_epic', 57000), + (22973, 21771, 'accessories/wearable_items/_exp10/heroic_armors/leather-chain_guardian/snapons/pauldron_guard_left', 57000), + (22974, 21772, 'accessories/wearable_items/_exp10/heroic_armors/leather-chain_guardian/snapons/pauldron_left', 57000), + (22975, 21773, 'accessories/wearable_items/_exp10/heroic_armors/leather-chain_guardian/snapons/pauldron_right', 57000), + (22976, 21774, 'accessories/wearable_items/_exp10/heroic_armors/leather-chain_guardian/snapons/shin_left', 57000), + (22977, 21775, 'accessories/wearable_items/_exp10/heroic_armors/leather-chain_guardian/snapons/shin_right', 57000), + (22978, 21776, 'accessories/wearable_items/_exp10/heroic_armors/leather-chain_beserker/chest', 57000), + (22979, 21777, 'accessories/wearable_items/_exp10/heroic_armors/leather-chain_beserker/feet_epic', 57000), + (22980, 21778, 'accessories/wearable_items/_exp10/heroic_armors/leather-chain_beserker/forearms', 57000), + (22981, 21779, 'accessories/wearable_items/_exp10/heroic_armors/leather-chain_beserker/hands_epic', 57000), + (22982, 21780, 'accessories/wearable_items/_exp10/heroic_armors/leather-chain_beserker/head_epic', 57000), + (22983, 21781, 'accessories/wearable_items/_exp10/heroic_armors/leather-chain_beserker/legs', 57000), + (22984, 21782, 'accessories/wearable_items/_exp10/heroic_armors/leather-chain_beserker/shoulders', 57000), + (22985, 21783, 'accessories/wearable_items/_exp10/heroic_armors/leather-chain_beserker/shoulders_epic', 57000), + (22986, 21784, 'accessories/wearable_items/_exp10/heroic_armors/leather-chain_beserker/skirt', 57000), + (22987, 21785, 'accessories/wearable_items/_exp10/heroic_armors/leather-chain_beserker/snapons/belt', 57000), + (22988, 21786, 'accessories/wearable_items/_exp10/heroic_armors/leather-chain_beserker/snapons/forearm_left', 57000), + (22989, 21787, 'accessories/wearable_items/_exp10/heroic_armors/leather-chain_beserker/snapons/forearm_right', 57000), + (22990, 21788, 'accessories/wearable_items/_exp10/heroic_armors/leather-chain_beserker/snapons/head_epic', 57000), + (22991, 21789, 'accessories/wearable_items/_exp10/heroic_armors/leather-chain_beserker/snapons/pauldron_guard_left', 57000), + (22992, 21790, 'accessories/wearable_items/_exp10/heroic_armors/leather-chain_beserker/snapons/pauldron_left', 57000), + (22993, 21791, 'accessories/wearable_items/_exp10/heroic_armors/leather-chain_beserker/snapons/pauldron_right', 57000), + (22994, 21792, 'accessories/wearable_items/_exp10/heroic_armors/leather-chain_beserker/snapons/shin_left', 57000), + (22995, 21793, 'accessories/wearable_items/_exp10/heroic_armors/leather-chain_beserker/snapons/shin_right', 57000), + (22996, 21794, 'playerstudio/characters/weapons/1h_sword/leatherback_sword/leatherback_sword', 57000), + (22997, 21795, 'animatedobjects/bristlebane_flag/flag_bristlebane', 57000), + (22998, 21796, 'playerstudio/characters/cloaks/eclipsecape/cloak_eclipsecape', 57000), + (22999, 21797, 'playerstudio/characters/cloaks/halaswinter/cloak_halaswinter', 57000), + (23000, 21798, 'playerstudio/characters/cloaks/nektulosnights/cloak_nektulosnights', 57000), + (23001, 21799, 'playerstudio/characters/cloaks/odetoautumn/cloak_odetoautumn', 57000), + (23002, 21800, 'playerstudio/houseitems/quaint_bridge', 57000), + (23003, 21801, 'playerstudio/houseitems/gnome_babybed', 57000), + (23004, 21802, 'playerstudio/houseitems/gnome_stepstool', 57000), + (23005, 21803, 'playerstudio/houseitems/gnome_rockingchair', 57000), + (23006, 21804, '_exp10/objects/hk_crate_small01_dpo', 57000), + (23007, 21805, 'playerstudio/characters/shields/tower_round_shields/leatherback/leatherback_shield', 57000), + (23008, 21806, '_exp10/characters/monsters/dragon_zlandicar/zlandicar', 57000), + (23009, 21807, '_exp10/characters/tool_users/aerakyn/aerakyn_male_boss', 57000), + (23010, 21808, '_exp10/characters/tool_users/aerakyn/aerakyn_male_heavy', 57000), + (23011, 21809, '_exp10/characters/tool_users/aerakyn/aerakyn_male_mage', 57000), + (23012, 21810, '_exp10/characters/tool_users/aerakyn/aerakyn_male_priest', 57000), + (23013, 21811, 'creatures/pets/fish_angler/fish_angler_bowl', 57000), + (23014, 21812, 'playerstudio/characters/weapons/2h_sword/elvenaxe/2handed_sword_elvenaxe', 57000), + (23015, 21813, 'staticobjects/tcg/tcg_painting85_combattrial', 57000), + (23016, 21814, 'staticobjects/tcg/tcg_painting84_delectable', 57000), + (23017, 21815, 'staticobjects/tcg/tcg_painting83_rainoffear', 57000), + (23018, 21816, 'staticobjects/tcg/tcg_painting82_visage', 57000), + (23019, 21817, 'staticobjects/tcg/tcg_painting81_deathdealer', 57000), + (23020, 21818, 'staticobjects/tcg/tcg_painting80_militia', 57000), + (23021, 21819, 'staticobjects/tcg/tcg_painting79_voyage', 57000), + (23022, 21820, 'accessories/channeler_golem/channeler_golem_arms_b', 57000), + (23023, 21821, 'accessories/channeler_golem/channeler_golem_arms_g', 57000), + (23024, 21822, 'accessories/channeler_golem/channeler_golem_arms_o', 57000), + (23025, 21823, 'accessories/channeler_golem/channeler_golem_arms_v', 57000), + (23026, 21824, 'accessories/channeler_golem/channeler_golem_arms_y', 57000), + (23027, 21825, 'accessories/channeler_golem/channeler_golem_arms01_b', 57000), + (23028, 21826, 'accessories/channeler_golem/channeler_golem_arms01_g', 57000), + (23029, 21827, 'accessories/channeler_golem/channeler_golem_arms01_o', 57000), + (23030, 21828, 'accessories/channeler_golem/channeler_golem_arms01_v', 57000), + (23031, 21829, 'accessories/channeler_golem/channeler_golem_arms01_y', 57000), + (23032, 21830, 'accessories/channeler_golem/channeler_golem_arms02_b', 57000), + (23033, 21831, 'accessories/channeler_golem/channeler_golem_arms02_g', 57000), + (23034, 21832, 'accessories/channeler_golem/channeler_golem_arms02_o', 57000), + (23035, 21833, 'accessories/channeler_golem/channeler_golem_arms02_v', 57000), + (23036, 21834, 'accessories/channeler_golem/channeler_golem_arms02_y', 57000), + (23037, 21835, 'accessories/channeler_golem/channeler_golem_arms03_b', 57000), + (23038, 21836, 'accessories/channeler_golem/channeler_golem_arms03_g', 57000), + (23039, 21837, 'accessories/channeler_golem/channeler_golem_arms03_o', 57000), + (23040, 21838, 'accessories/channeler_golem/channeler_golem_arms03_v', 57000), + (23041, 21839, 'accessories/channeler_golem/channeler_golem_arms03_y', 57000), + (23042, 21840, 'accessories/channeler_golem/channeler_golem_arms04_b', 57000), + (23043, 21841, 'accessories/channeler_golem/channeler_golem_arms04_g', 57000), + (23044, 21842, 'accessories/channeler_golem/channeler_golem_arms04_o', 57000), + (23045, 21843, 'accessories/channeler_golem/channeler_golem_arms04_v', 57000), + (23046, 21844, 'accessories/channeler_golem/channeler_golem_arms04_y', 57000), + (23047, 21845, 'accessories/channeler_golem/channeler_golem_chest00_b', 57000), + (23048, 21846, 'accessories/channeler_golem/channeler_golem_chest00_g', 57000), + (23049, 21847, 'accessories/channeler_golem/channeler_golem_chest00_o', 57000), + (23050, 21848, 'accessories/channeler_golem/channeler_golem_chest00_v', 57000), + (23051, 21849, 'accessories/channeler_golem/channeler_golem_chest00_y', 57000), + (23052, 21850, 'accessories/channeler_golem/channeler_golem_chest01_b', 57000), + (23053, 21851, 'accessories/channeler_golem/channeler_golem_chest01_g', 57000), + (23054, 21852, 'accessories/channeler_golem/channeler_golem_chest01_o', 57000), + (23055, 21853, 'accessories/channeler_golem/channeler_golem_chest01_v', 57000), + (23056, 21854, 'accessories/channeler_golem/channeler_golem_chest01_y', 57000), + (23057, 21855, 'accessories/channeler_golem/channeler_golem_chest02_b', 57000), + (23058, 21856, 'accessories/channeler_golem/channeler_golem_chest02_g', 57000), + (23059, 21857, 'accessories/channeler_golem/channeler_golem_chest02_o', 57000), + (23060, 21858, 'accessories/channeler_golem/channeler_golem_chest02_v', 57000), + (23061, 21859, 'accessories/channeler_golem/channeler_golem_chest02_y', 57000), + (23062, 21860, 'accessories/channeler_golem/channeler_golem_chest03_b', 57000), + (23063, 21861, 'accessories/channeler_golem/channeler_golem_chest03_g', 57000), + (23064, 21862, 'accessories/channeler_golem/channeler_golem_chest03_o', 57000), + (23065, 21863, 'accessories/channeler_golem/channeler_golem_chest03_v', 57000), + (23066, 21864, 'accessories/channeler_golem/channeler_golem_chest03_y', 57000), + (23067, 21865, 'accessories/channeler_golem/channeler_golem_feet_b', 57000), + (23068, 21866, 'accessories/channeler_golem/channeler_golem_feet_g', 57000), + (23069, 21867, 'accessories/channeler_golem/channeler_golem_feet_o', 57000), + (23070, 21868, 'accessories/channeler_golem/channeler_golem_feet_v', 57000), + (23071, 21869, 'accessories/channeler_golem/channeler_golem_feet_y', 57000), + (23072, 21870, 'accessories/channeler_golem/channeler_golem_feet01_b', 57000), + (23073, 21871, 'accessories/channeler_golem/channeler_golem_feet01_g', 57000), + (23074, 21872, 'accessories/channeler_golem/channeler_golem_feet01_o', 57000), + (23075, 21873, 'accessories/channeler_golem/channeler_golem_feet01_v', 57000), + (23076, 21874, 'accessories/channeler_golem/channeler_golem_feet01_y', 57000), + (23077, 21875, 'accessories/channeler_golem/channeler_golem_feet02_b', 57000), + (23078, 21876, 'accessories/channeler_golem/channeler_golem_feet02_g', 57000), + (23079, 21877, 'accessories/channeler_golem/channeler_golem_feet02_o', 57000), + (23080, 21878, 'accessories/channeler_golem/channeler_golem_feet02_v', 57000), + (23081, 21879, 'accessories/channeler_golem/channeler_golem_feet02_y', 57000), + (23082, 21880, 'accessories/channeler_golem/channeler_golem_feet03_b', 57000), + (23083, 21881, 'accessories/channeler_golem/channeler_golem_feet03_g', 57000), + (23084, 21882, 'accessories/channeler_golem/channeler_golem_feet03_o', 57000), + (23085, 21883, 'accessories/channeler_golem/channeler_golem_feet03_v', 57000), + (23086, 21884, 'accessories/channeler_golem/channeler_golem_feet03_y', 57000), + (23087, 21885, 'accessories/channeler_golem/channeler_golem_feet04_b', 57000), + (23088, 21886, 'accessories/channeler_golem/channeler_golem_feet04_g', 57000), + (23089, 21887, 'accessories/channeler_golem/channeler_golem_feet04_o', 57000), + (23090, 21888, 'accessories/channeler_golem/channeler_golem_feet04_v', 57000), + (23091, 21889, 'accessories/channeler_golem/channeler_golem_feet04_y', 57000), + (23092, 21890, 'accessories/channeler_golem/channeler_golem_head_b', 57000), + (23093, 21891, 'accessories/channeler_golem/channeler_golem_head_g', 57000), + (23094, 21892, 'accessories/channeler_golem/channeler_golem_head_o', 57000), + (23095, 21893, 'accessories/channeler_golem/channeler_golem_head_v', 57000), + (23096, 21894, 'accessories/channeler_golem/channeler_golem_head_y', 57000), + (23097, 21895, 'accessories/channeler_golem/channeler_golem_head01_b', 57000), + (23098, 21896, 'accessories/channeler_golem/channeler_golem_head01_g', 57000), + (23099, 21897, 'accessories/channeler_golem/channeler_golem_head01_o', 57000), + (23100, 21898, 'accessories/channeler_golem/channeler_golem_head01_v', 57000), + (23101, 21899, 'accessories/channeler_golem/channeler_golem_head01_y', 57000), + (23102, 21900, 'accessories/channeler_golem/channeler_golem_head02_b', 57000), + (23103, 21901, 'accessories/channeler_golem/channeler_golem_head02_g', 57000), + (23104, 21902, 'accessories/channeler_golem/channeler_golem_head02_o', 57000), + (23105, 21903, 'accessories/channeler_golem/channeler_golem_head02_v', 57000), + (23106, 21904, 'accessories/channeler_golem/channeler_golem_head02_y', 57000), + (23107, 21905, 'accessories/channeler_golem/channeler_golem_head03_b', 57000), + (23108, 21906, 'accessories/channeler_golem/channeler_golem_head03_g', 57000), + (23109, 21907, 'accessories/channeler_golem/channeler_golem_head03_o', 57000), + (23110, 21908, 'accessories/channeler_golem/channeler_golem_head03_v', 57000), + (23111, 21909, 'accessories/channeler_golem/channeler_golem_head03_y', 57000), + (23112, 21910, 'accessories/channeler_golem/channeler_golem_head04_b', 57000), + (23113, 21911, 'accessories/channeler_golem/channeler_golem_head04_g', 57000), + (23114, 21912, 'accessories/channeler_golem/channeler_golem_head04_o', 57000), + (23115, 21913, 'accessories/channeler_golem/channeler_golem_head04_v', 57000), + (23116, 21914, 'accessories/channeler_golem/channeler_golem_head04_y', 57000), + (23117, 21915, 'accessories/channeler_golem/channeler_golem_shoulder01_b', 57000), + (23118, 21916, 'accessories/channeler_golem/channeler_golem_shoulder01_g', 57000), + (23119, 21917, 'accessories/channeler_golem/channeler_golem_shoulder01_o', 57000), + (23120, 21918, 'accessories/channeler_golem/channeler_golem_shoulder01_v', 57000), + (23121, 21919, 'accessories/channeler_golem/channeler_golem_shoulder01_y', 57000), + (23122, 21920, 'accessories/channeler_golem/channeler_golem_shoulder02_b', 57000), + (23123, 21921, 'accessories/channeler_golem/channeler_golem_shoulder02_g', 57000), + (23124, 21922, 'accessories/channeler_golem/channeler_golem_shoulder02_o', 57000), + (23125, 21923, 'accessories/channeler_golem/channeler_golem_shoulder02_v', 57000), + (23126, 21924, 'accessories/channeler_golem/channeler_golem_shoulder02_y', 57000), + (23127, 21925, 'accessories/channeler_golem/channeler_golem_shoulder03_b', 57000), + (23128, 21926, 'accessories/channeler_golem/channeler_golem_shoulder03_g', 57000), + (23129, 21927, 'accessories/channeler_golem/channeler_golem_shoulder03_o', 57000), + (23130, 21928, 'accessories/channeler_golem/channeler_golem_shoulder03_v', 57000), + (23131, 21929, 'accessories/channeler_golem/channeler_golem_shoulder03_y', 57000), + (23132, 21930, 'accessories/channeler_golem/channeler_golem_shoulder04_b', 57000), + (23133, 21931, 'accessories/channeler_golem/channeler_golem_shoulder04_g', 57000), + (23134, 21932, 'accessories/channeler_golem/channeler_golem_shoulder04_o', 57000), + (23135, 21933, 'accessories/channeler_golem/channeler_golem_shoulder04_v', 57000), + (23136, 21934, 'accessories/channeler_golem/channeler_golem_shoulder04_y', 57000), + (23137, 21935, 'accessories/channeler_golem/channeler_golem_thighs01_b', 57000), + (23138, 21936, 'accessories/channeler_golem/channeler_golem_thighs01_g', 57000), + (23139, 21937, 'accessories/channeler_golem/channeler_golem_thighs01_o', 57000), + (23140, 21938, 'accessories/channeler_golem/channeler_golem_thighs01_v', 57000), + (23141, 21939, 'accessories/channeler_golem/channeler_golem_thighs01_y', 57000), + (23142, 21940, 'accessories/channeler_golem/channeler_golem_thighs02_b', 57000), + (23143, 21941, 'accessories/channeler_golem/channeler_golem_thighs02_g', 57000), + (23144, 21942, 'accessories/channeler_golem/channeler_golem_thighs02_o', 57000), + (23145, 21943, 'accessories/channeler_golem/channeler_golem_thighs02_v', 57000), + (23146, 21944, 'accessories/channeler_golem/channeler_golem_thighs02_y', 57000), + (23147, 21945, '_exp09/characters/monsters/skyshrine_drake/skyshrine_drake_storm_red', 57000), + (23148, 21946, 'staticobjects/housing_portal_objects/vision_home_fearshard01', 57000), + (23149, 21947, 'staticobjects/housing_portal_objects/vision_home_sirens01', 57000), + (23150, 21948, 'creatures/mounts/spider_mount/spider_mount_base', 57000), + (23151, 21949, '_exp10/characters/monsters/shissar_golem/shissar_golem', 57000), + (23152, 21950, 'playerstudio/houseitems/shin_village_painting', 57000), + (23153, 21951, 'playerstudio/houseitems/elegant_bed', 57000), + (23154, 21952, 'playerstudio/houseitems/elegant_dresser', 57000), + (23155, 21953, 'playerstudio/houseitems/elegant_nightstand', 57000), + (23156, 21954, 'playerstudio/houseitems/elegant_chestofdrawers', 57000), + (23157, 21955, '_exp08/characters/monsters/wyvern_new/wyvern_new_brown', 57000), + (23158, 21956, '_exp08/characters/monsters/wyvern_new/wyvern_new_green', 57000), + (23159, 21957, '_exp08/characters/monsters/wyvern_new/wyvern_new_red', 57000), + (23160, 21958, '_exp08/characters/monsters/wyvern_new/wyvern_new_shadow', 57000), + (23161, 21959, 'accessories/wearable_items/cloak/exp09/cloak_freeport_loyalty', 57000), + (23162, 21960, 'accessories/wearable_items/cloak/exp09/cloak_qeynos_loyalty', 57000), + (23163, 21961, '_exp10/characters/monsters/dragon_klandicar/klandicar', 57000), + (23164, 21962, '_exp10/objects/hk_books_topple', 57000), + (23165, 21963, '_exp10/characters/monsters/dragon_vulakk/dragon_vulakk', 57000), + (23166, 21964, '_exp10/characters/tool_users/goblin_highkeep/goblin_highkeep_base', 57000), + (23167, 21965, '_exp10/characters/tool_users/goblin_highkeep/goblin_highkeep_ghost', 57000), + (23168, 21966, '_exp10/characters/tool_users/goblin_highkeep/goblin_highkeep_messy', 57000), + (23169, 21967, 'creatures/pets/pet_rock01_ethernere_spark', 57000), + (23170, 52129, '_exp08/characters/monsters/dragon_lendiniara/dragon_lendiniara_ethereal', 57000), + (23171, 52130, 'creatures/tu/invisible_soldier_paper_tu', 57000), + (23172, 52131, 'projectiles/arrow_simple_truespirit', 57000), + (23173, 62132, 'creatures/boss/fallengate_gehein', 57000), + (23174, 62133, 'creatures/pets/pet_rock01_ethernere', 57000), + (23175, 62134, 'accessories/wieldable_items/weapons/throwing_weapons/throwing_star/throwing_star002_fear', 57000), + (23176, 23424, 'accessories/wearable_items/_exp10/frost_armor/heavycloth/belt/skirt', 60006), + (23177, 23425, 'accessories/wearable_items/_exp10/frost_armor/leather/chest', 60006), + (23178, 23426, 'accessories/wearable_items/_exp10/frost_armor/leather/feet', 60006), + (23179, 23427, 'accessories/wearable_items/_exp10/frost_armor/leather/forearms', 60006), + (23180, 23428, 'accessories/wearable_items/_exp10/frost_armor/leather/hands', 60006), + (23181, 23429, 'accessories/wearable_items/_exp10/frost_armor/leather/head', 60006), + (23182, 23430, 'accessories/wearable_items/_exp10/frost_armor/leather/legs', 60006), + (23183, 23431, 'accessories/wearable_items/_exp10/frost_armor/leather/legs_noskirt', 60006), + (23184, 23432, 'accessories/wearable_items/_exp10/frost_armor/leather/shoulders', 60006), + (23185, 23433, 'accessories/wearable_items/_exp10/frost_armor/leather/shoulders_nopauldrons', 60006), + (23186, 23434, 'accessories/wearable_items/_exp10/frost_armor/leather/skirt', 60006), + (23187, 23435, 'accessories/wearable_items/_exp10/frost_armor/robe/chest', 60006), + (23188, 23436, 'accessories/wearable_items/_exp10/frost_armor/robe/feet', 60006), + (23189, 23437, 'accessories/wearable_items/_exp10/frost_armor/robe/hands', 60006), + (23190, 23438, 'accessories/wearable_items/_exp10/frost_armor/robe/head', 60006), + (23191, 23439, 'accessories/wearable_items/_exp10/frost_armor/robe/head_conjuror', 60006), + (23192, 23440, 'accessories/wearable_items/_exp10/frost_armor/robe/hood', 60006), + (23193, 23441, 'accessories/wearable_items/_exp10/frost_armor/robe/pants', 60006), + (23194, 23442, 'accessories/wearable_items/_exp10/frost_armor/robe/skirt', 60006), + (23195, 23443, 'accessories/wearable_items/_exp10/frost_armor/vanguard/chest', 60006), + (23196, 23444, 'accessories/wearable_items/_exp10/frost_armor/vanguard/feet', 60006), + (23197, 23445, 'accessories/wearable_items/_exp10/frost_armor/vanguard/forearms', 60006), + (23198, 23446, 'accessories/wearable_items/_exp10/frost_armor/vanguard/hands', 60006), + (23199, 23447, 'accessories/wearable_items/_exp10/frost_armor/vanguard/head', 60006), + (23200, 23448, 'accessories/wearable_items/_exp10/frost_armor/vanguard/left', 60006), + (23201, 23449, 'accessories/wearable_items/_exp10/frost_armor/vanguard/legs', 60006), + (23202, 23450, 'accessories/wearable_items/_exp10/frost_armor/vanguard/legs_noskirt', 60006), + (23203, 23451, 'accessories/wearable_items/_exp10/frost_armor/vanguard/right', 60006), + (23204, 23452, 'accessories/wearable_items/_exp10/frost_armor/vanguard/shoulders', 60006), + (23205, 23453, 'accessories/wearable_items/_exp10/frost_armor/vanguard/shoulders_nopauldrons', 60006), + (23206, 23454, 'accessories/wearable_items/_exp10/frost_armor/vanguard/skirt', 60006), + (23207, 23455, 'accessories/wieldable_items/weapons/exp10/1h_sword/darkelf_rapier', 60006), + (23208, 23456, 'accessories/wieldable_items/weapons/exp10/1h_pierce/dagger_darkelf', 60006), + (23209, 23457, 'accessories/wearable_items/_exp10/vesspyr_isles/cloth_blue/chest_epic', 60006), + (23210, 23458, 'accessories/wearable_items/_exp10/vesspyr_isles/cloth_green/chest_epic', 60006), + (23211, 23459, 'accessories/wearable_items/_exp10/vesspyr_isles/cloth_red/chest_epic', 60006), + (23212, 23460, 'accessories/wearable_items/_exp10/vesspyr_isles/chain_red/shoulders_epic', 60006), + (23213, 23461, 'accessories/wearable_items/_exp10/vesspyr_isles/chain_green/shoulders_epic', 60006), + (23214, 23462, 'accessories/wearable_items/_exp10/vesspyr_isles/chain_blue/shoulders_epic', 60006), + (23215, 23463, 'accessories/wearable_items/_exp10/vesspyr_isles/chain_light/shoulders_epic', 60006), + (23216, 23464, 'accessories/wieldable_items/weapons/exp10/staff/spear_darkelf', 60006), + (23217, 23465, '_exp10/characters/tool_users/goblin_highkeep/goblin_highkeep_mage', 60006), + (23218, 23466, '_exp10/characters/tool_users/goblin_highkeep/goblin_highkeep_mage_crazy_run_walk', 60006), + (23219, 23467, '_exp10/objects/goblin_band', 60006), + (23220, 23468, 'staticobjects/_exp10/white_cake01', 60006), + (23221, 23469, 'creatures/mounts/reindeer_mount/reindeer_mount_tan', 60006), + (23222, 23470, 'creatures/mounts/reindeer_mount/reindeer_mount_white', 60006), + (23223, 23471, '_exp10/objects/exp10_temple_of_veeshan_raid/tov_rm66_bonepile01_bones_001_dpo', 60006), + (23224, 23472, '_exp10/objects/exp10_temple_of_veeshan_raid/tov_rm66_bonepile01_bones_002_dpo', 60006), + (23225, 23473, '_exp10/objects/exp10_temple_of_veeshan_raid/tov_rm66_bonepile02_bones_001_dpo', 60006), + (23226, 23474, '_exp10/objects/exp10_temple_of_veeshan_raid/tov_rm66_bonepile02_bones_002_dpo', 60006), + (23227, 23475, '_exp10/objects/exp10_temple_of_veeshan_raid/tov_rm66_bonepile03_bones_001_dpo', 60006), + (23228, 23476, 'creatures/mounts/spider_mount/spider_mount_frostfell', 60006), + (23229, 23477, '_exp10/characters/monsters/spiderbear/spiderbear_base', 60006), + (23230, 23478, 'creatures/mounts/player_wing/player_wing_frostfell_snowflake', 60006), + (23231, 23479, 'accessories/wieldable_items/shields/exp09/nightborne_round_shield', 60006), + (23232, 23480, 'creatures/pets/present_pet/present_pet_bluestripe', 60006), + (23233, 23481, 'creatures/pets/present_pet/present_pet_greenvine', 60006), + (23234, 23482, 'creatures/pets/present_pet/present_pet_redstripe', 60006), + (23235, 23483, 'creatures/pets/present_pet/present_pet_redvine', 60006), + (23236, 23484, 'creatures/pets/present_pet/present_pet_snowflake', 60006), + (23237, 23485, 'creatures/pets/present_pet/present_pet2_bluestripe', 60006), + (23238, 23486, 'creatures/pets/present_pet/present_pet2_greenvine', 60006), + (23239, 23487, 'creatures/pets/present_pet/present_pet2_redstripe', 60006), + (23240, 23488, 'creatures/pets/present_pet/present_pet2_redvine', 60006), + (23241, 23489, 'creatures/pets/present_pet/present_pet2_snowflake', 60006), + (23242, 23490, '_exp10/characters/monsters/shissar_custodian/shissar_custodian_boss_blue_glow', 60006), + (23243, 23491, 'accessories/wieldable_items/weapons/eqnext_founders_flag/explorer', 60006), + (23244, 23492, 'accessories/wieldable_items/weapons/eqnext_founders_flag/settler', 60006), + (23245, 23493, 'accessories/wieldable_items/weapons/eqnext_founders_flag/trailblazer', 60006), + (23246, 23494, 'staticobjects/promo_items/eqnext_trailblazer_flag', 60006), + (23247, 23495, 'staticobjects/promo_items/eqnext_explorer_flag', 60006), + (23248, 23496, 'staticobjects/promo_items/eqnext_settler_flag', 60006), + (23249, 23497, 'creatures/pets/fae_drake_frost/fairy_drake_frost1', 60006), + (23250, 23498, 'accessories/wieldable_items/weapons/exp10/1h_sword/sword_shissar02', 60006), + (23251, 23499, 'staticobjects/liveevent/frostfell/dpo_holiday_incense_burner01', 60006), + (23252, 23500, 'staticobjects/liveevent/frostfell/dpo_holiday_incense_burner02', 60006), + (23253, 23501, 'staticobjects/liveevent/frostfell/dpo_bauble_bow_string_twinkle_lights_wall', 60006), + (23254, 23502, 'staticobjects/liveevent/frostfell/dpo_bauble_bow_string_lights_green_wall', 60006), + (23255, 23503, 'staticobjects/liveevent/frostfell/dpo_bauble_streamers_green_snow_ceiling', 60006), + (23256, 23504, 'staticobjects/liveevent/frostfell/dpo_bauble_streamers_red_green_snow_ceiling', 60006), + (23257, 23505, 'staticobjects/liveevent/frostfell/dpo_bauble_streamers_red_snow_ceiling', 60006), + (23258, 23506, 'creatures/pets/baby_dragon_frostfell', 60006), + (23259, 23507, 'creatures/pets/pet_kitten/halas_kitten_frostfell_evil', 60006), + (23260, 23508, 'creatures/pets/pet_kitten/halas_kitten_frostfell_frost', 60006), + (23261, 23509, 'creatures/pets/pet_kitten/halas_kitten_frostfell_pine', 60006), + (23262, 23510, 'creatures/pets/pet_kitten/halas_kitten_frostfell2_basic', 60006), + (23263, 23511, 'creatures/pets/pet_kitten/halas_kitten_frostfell2_evil', 60006), + (23264, 23512, 'creatures/pets/pet_kitten/halas_kitten_frostfell2_frost', 60006), + (23265, 23513, 'creatures/pets/wolf_pup/wolf_pup_frostfell_evil', 60006), + (23266, 23514, 'creatures/pets/wolf_pup/wolf_pup_frostfell_frost', 60006), + (23267, 23515, 'creatures/pets/wolf_pup/wolf_pup_frostfell_pine', 60006), + (23268, 23516, 'creatures/pets/wolf_pup/wolf_pup_frostfell2_evil', 60006), + (23269, 23517, 'creatures/pets/wolf_pup/wolf_pup_frostfell2_frost', 60006), + (23270, 23518, 'creatures/pets/wolf_pup/wolf_pup_frostfell2_pine', 60006), + (23271, 23519, 'staticobjects/liveevent/frostfell/dpo_bauble_bow_garland_frozen_pine', 60006), + (23272, 23520, 'staticobjects/liveevent/frostfell/dpo_bauble_bow_garland_pine', 60006), + (23273, 23521, 'staticobjects/housing_portal_objects/vision_home_snowdwelling01', 60006), + (23274, 23522, 'staticobjects/liveevent/frostfell/dpo_holiday_stocking_striped01', 60006), + (23275, 23523, 'staticobjects/liveevent/frostfell/dpo_holiday_stocking_striped02', 60006), + (23276, 23524, 'staticobjects/liveevent/frostfell/dpo_holiday_stocking_striped03', 60006), + (23277, 23525, 'staticobjects/liveevent/frostfell/dpo_holiday_stocking_striped04', 60006), + (23278, 23526, 'staticobjects/liveevent/frostfell/iceblock_candice', 60006), + (23279, 23527, 'staticobjects/liveevent/frostfell/iceblock_gardy', 60006), + (23280, 23528, 'staticobjects/liveevent/frostfell/iceblock_mcscroogle', 60006), + (23281, 23529, 'staticobjects/liveevent/frostfell/iceblock_queen_bunny', 60006), + (23282, 23530, 'staticobjects/liveevent/frostfell/iceblock_snarf', 60006), + (23283, 23531, 'staticobjects/liveevent/frostfell/dpo_efrst_frostfell_new01_statue_bear01', 60006), + (23284, 23532, 'staticobjects/liveevent/frostfell/dpo_efrst_frostfell_new01_statue_beaver01', 60006), + (23285, 23533, 'staticobjects/liveevent/frostfell/dpo_efrst_frostfell_new01_statue_deer01', 60006), + (23286, 23534, 'staticobjects/liveevent/frostfell/dpo_efrst_frostfell_new01_statue_lion01', 60006), + (23287, 23535, 'staticobjects/liveevent/frostfell/dpo_efrst_frostfell_new01_statue_owlbear01', 60006), + (23288, 23536, 'staticobjects/liveevent/frostfell/dpo_efrst_frostfell_new01_statue_squirrel01', 60006), + (23289, 23537, 'staticobjects/liveevent/frostfell/dpo_snowglobe_cobaltscar01', 60006), + (23290, 23538, 'staticobjects/liveevent/frostfell/dpo_snowglobe_falinpol01', 60006), + (23291, 23539, 'staticobjects/liveevent/frostfell/wreath_evil', 60006), + (23292, 23540, 'staticobjects/liveevent/frostfell/wreath_frozen', 60006), + (23293, 23541, 'staticobjects/liveevent/frostfell/wreath_pine', 60006), + (23294, 23542, 'staticobjects/liveevent/frostfell/dpo_holiday_pointsettia01', 60006), + (23295, 23543, 'staticobjects/liveevent/frostfell/dpo_bauble_bow_garland_vertical_frozen_pine', 60006), + (23296, 23544, 'staticobjects/liveevent/frostfell/dpo_bauble_bow_garland_vertical_pine', 60006), + (23297, 23545, 'accessories/wearable_items/profesion_hats/antlers/caribou_antlers_combined', 60006), + (23298, 23546, 'accessories/wearable_items/profesion_hats/antlers/caribou_antlers_combined_fire', 60006), + (23299, 23547, 'accessories/wearable_items/profesion_hats/antlers/caribou_antlers_combined_ice', 60006), + (23300, 23548, 'accessories/wearable_items/profesion_hats/antlers/caribou_antlers_fire_left', 60006), + (23301, 23549, 'accessories/wearable_items/profesion_hats/antlers/caribou_antlers_fire_right', 60006), + (23302, 23550, 'accessories/wearable_items/profesion_hats/antlers/caribou_antlers_ice_left', 60006), + (23303, 23551, 'accessories/wearable_items/profesion_hats/antlers/caribou_antlers_ice_right', 60006), + (23304, 23552, 'accessories/wearable_items/profesion_hats/antlers/caribou_antlers_left', 60006), + (23305, 23553, 'accessories/wearable_items/profesion_hats/antlers/caribou_antlers_right', 60006), + (23306, 23554, 'playerstudio/characters/weapons/2h_sword/frozenicespiregreataxe/frozenicespiregreataxe', 60006), + (23307, 23555, 'playerstudio/characters/shields/tower_round_shields/luck_and_destiny/l_d', 60006), + (23308, 23556, 'playerstudio/houseitems/chocolate_fence', 60006), + (23309, 23557, 'playerstudio/houseitems/chocolate_fencepost', 60006), + (23310, 23558, 'playerstudio/houseitems/chocolate_fencesection', 60006), + (23311, 23559, 'playerstudio/houseitems/peppermint_fencefull', 60006), + (23312, 23560, 'playerstudio/houseitems/peppermint_fencepost', 60006), + (23313, 23561, 'playerstudio/houseitems/peppermint_fencesection', 60006), + (23314, 23562, 'playerstudio/houseitems/rocking_horse', 60006), + (23315, 23563, 'staticobjects/soe_wallet/igloo_dwarven01', 60006), + (23316, 23564, 'staticobjects/soe_wallet/igloo_traditional01', 60006), + (23317, 23565, 'staticobjects/liveevent/frostfell/dpo_rainbow_bridge_2006', 60006), + (23318, 23566, 'staticobjects/liveevent/frostfell/dpo_pineneedles01', 60006), + (23319, 23567, 'staticobjects/liveevent/frostfell/dpo_pineneedles01_snow01', 60006), + (23320, 23568, 'playerstudio/characters/weapons/1h_crush/frozenicespiremace/frozenicespiremace', 60006), + (23321, 23569, 'playerstudio/characters/weapons/2h_crush/frozenicespiregreathammer/frozenicespiregreathammer', 60006), + (23322, 23570, 'staticobjects/liveevent/frostfell/houseblock_1x1_column_icechunk', 60006), + (23323, 23571, 'staticobjects/liveevent/frostfell/houseblock_1x2_column_icechunk', 60006), + (23324, 23572, 'staticobjects/liveevent/frostfell/houseblock_1x2_dividerblock_icechunk', 60006), + (23325, 23573, 'staticobjects/liveevent/frostfell/houseblock_1xhalf_block_icechunk', 60006), + (23326, 23574, 'staticobjects/liveevent/frostfell/houseblock_2x2_dividerblock_icechunk', 60006), + (23327, 23575, 'staticobjects/liveevent/frostfell/houseblock_rail_icechunk', 60006), + (23328, 23576, 'staticobjects/liveevent/frostfell/houseblock_roundtile_icechunk', 60006), + (23329, 23577, 'staticobjects/liveevent/frostfell/houseblock_stair_icechunk', 60006), + (23330, 23578, 'staticobjects/liveevent/frostfell/housecube_1x1_block_icechunk', 60006), + (23331, 23579, 'staticobjects/liveevent/frostfell/floortile_panel_icechunk', 60006), + (23332, 23580, 'playerstudio/houseitems/gingerbread_house', 60006), + (23333, 23581, 'playerstudio/houseitems/we_cab', 60006), + (23334, 23582, 'playerstudio/houseitems/we_caboose', 60006), + (23335, 23583, 'playerstudio/houseitems/we_coalcart', 60006), + (23336, 23584, 'playerstudio/houseitems/we_curvetrack', 60006), + (23337, 23585, 'playerstudio/houseitems/we_flatbed', 60006), + (23338, 23586, 'playerstudio/houseitems/we_locomotive', 60006), + (23339, 23587, 'playerstudio/houseitems/we_straighttrack', 60006), + (23340, 23588, 'playerstudio/houseitems/frostfell_sled', 60006), + (23341, 23589, 'playerstudio/houseitems/coldain_rumset', 60006), + (23342, 23590, 'playerstudio/houseitems/blue_formal_setting', 60006), + (23343, 23591, 'playerstudio/houseitems/frostfell_bluerug', 60006), + (23344, 23592, 'playerstudio/houseitems/gingerbread_setting', 60006), + (23345, 23593, 'playerstudio/houseitems/santa_glugmug', 60006), + (23346, 23594, 'ec/pc/aerakyn/aerakyn_male', 60006), + (23347, 23595, 'ec/pc/aerakyn/aerakyn_male_wings', 60006), + (23348, 23596, '_exp11/characters/tool_users/shissar/shissar_male_base', 60006), + (23349, 23597, 'playerstudio/characters/weapons/staff/frozenicespirehalberd/frozenicespirehalberd', 60006), + (23350, 23598, 'creatures/mounts/ethernere_cloud_housing', 60006), + (23351, 23599, 'playerstudio/houseitems/templestreet_fm', 60006), + (23352, 23600, 'playerstudio/houseitems/woodelf_cupboard', 60006), + (23353, 23601, 'playerstudio/houseitems/wooden_shingled_roof01', 60006), + (23354, 23602, 'playerstudio/houseitems/livingroom_sofa_table01', 60006), + (23355, 23603, 'playerstudio/houseitems/livingroom_coffee_table01', 60006), + (23356, 23604, 'playerstudio/houseitems/dragonscale_roof01', 60006), + (23357, 23605, 'playerstudio/houseitems/clownfish_pfx_dpo', 60006), + (23358, 23606, 'playerstudio/houseitems/brasse_brandyset', 60006), + (23359, 23607, 'playerstudio/houseitems/bakersdelight_table01', 60006), + (23360, 23608, 'playerstudio/houseitems/darkscryingtable_pfx', 60006), + (23361, 23609, 'playerstudio/houseitems/urn_hydria', 60006), + (23362, 23610, 'playerstudio/houseitems/urn_pelike', 60006), + (23363, 23611, 'playerstudio/houseitems/urn_psykter', 60006), + (23364, 23612, 'playerstudio/houseitems/rustic_bakingrack', 60006), + (23365, 23613, 'playerstudio/houseitems/rustic_largecounter', 60006), + (23366, 23614, 'playerstudio/houseitems/rustic_smallcabinet', 60006), + (23367, 23615, 'playerstudio/houseitems/rustic_pantry', 60006), + (23368, 23616, 'playerstudio/houseitems/livingroom_end_table01', 60006), + (23369, 23617, 'playerstudio/houseitems/clownfish', 60006), + (23370, 23618, 'playerstudio/houseitems/koi_midnight_single', 60006), + (23371, 23619, 'playerstudio/houseitems/koi_orange_single', 60006), + (23372, 23620, 'playerstudio/houseitems/koi_rising_single', 60006), + (23373, 23621, '_exp11/characters/tool_users/shissar/shissar_male_coral', 60006), + (23374, 23622, '_exp11/characters/tool_users/shissar/shissar_male_heavy', 60006), + (23375, 23623, '_exp11/characters/tool_users/shissar/shissar_male_mamba', 60006), + (23376, 23624, 'creatures/mounts/class_hover_pads/hover_pad_channeler', 60006), + (23377, 23625, 'staticobjects/liveevent/erollisi_objects/dpo_purple_curtain_blue_flower_left', 60006), + (23378, 23626, 'staticobjects/liveevent/erollisi_objects/dpo_purple_curtain_blue_flower_right', 60006), + (23379, 23627, 'staticobjects/liveevent/erollisi_objects/dpo_purple_curtain_left', 60006), + (23380, 23628, 'staticobjects/liveevent/erollisi_objects/dpo_purple_curtain_right', 60006), + (23381, 23629, 'staticobjects/liveevent/erollisi_objects/dpo_red_curtain_left', 60006), + (23382, 23630, 'staticobjects/liveevent/erollisi_objects/dpo_red_curtain_right', 60006), + (23383, 23631, 'staticobjects/liveevent/erollisi_objects/dpo_urn_of_compassion', 60006), + (23384, 23632, 'staticobjects/liveevent/erollisi_objects/dpo_urn_of_honor', 60006), + (23385, 23633, 'staticobjects/liveevent/erollisi_objects/dpo_white_curtain_flower_left', 60006), + (23386, 23634, 'staticobjects/liveevent/erollisi_objects/dpo_white_curtain_flower_right', 60006), + (23387, 23635, 'staticobjects/liveevent/erollisi_objects/dpo_white_curtain_left', 60006), + (23388, 23636, 'staticobjects/liveevent/erollisi_objects/dpo_white_curtain_right', 60006), + (23389, 23637, 'accessories/wieldable_items/weapons/exp11/1h_crush/hammer_bonecollection', 60006), + (23390, 23638, 'accessories/wieldable_items/weapons/exp11/1h_pierce/dagger_bonecollection', 60006), + (23391, 23639, 'accessories/wieldable_items/weapons/exp11/1h_sword/axe_1h_bonecollection', 60006), + (23392, 23640, 'accessories/wieldable_items/weapons/exp11/1h_sword/sword_bonecollection', 60006), + (23393, 23641, 'accessories/wieldable_items/weapons/exp11/2h_sword/axe_2h_bonecollection', 60006), + (23394, 23642, 'accessories/wieldable_items/weapons/exp11/staff/scythe_bonecollection', 60006), + (23395, 23643, 'accessories/wieldable_items/weapons/exp11/staff/spear_bonecollection', 60006), + (23396, 23644, 'staticobjects/liveevent/erollisi_objects/dpo_erollisi_cake', 60006), + (23397, 23645, 'staticobjects/liveevent/erollisi_objects/dpo_fancy_cake', 60006), + (23398, 23646, 'accessories/wieldable_items/weapons/exp11/1h_wand/wand_bonecollection', 60006), + (23399, 23647, 'accessories/wieldable_items/weapons/exp11/staff/bostaff_bonecollection', 60006), + (23400, 23648, 'accessories/wieldable_items/weapons/exp11/staff/greatstaff_bonecollection', 60006), + (23401, 23649, 'creatures/mounts/meatbeast_mount/meatbeast_flying_mount_female', 60006), + (23402, 23650, '_exp10/objects/hk_lightsource_firefx_dpo', 60006), + (23403, 23651, 'playerstudio/characters/weapons/1h_crush/hammer_handoflove/hammer_handoflove', 60006), + (23404, 23652, 'accessories/wearable_items/elemental_crowns/elemental_crown_rock', 60006), + (23405, 23653, 'accessories/wearable_items/elemental_crowns/elemental_crown_water', 60006), + (23406, 23654, 'accessories/wearable_items/elemental_crowns/elemental_crown_wind', 60006), + (23407, 23655, 'creatures/mounts/meatbeast_mount/meatbeast_flying_mount_male', 60006), + (23408, 23656, 'accessories/wieldable_items/weapons/exp11/1h_crush/club_bonecollection', 60006), + (23409, 23657, 'accessories/wieldable_items/weapons/exp11/1h_crush/mace_bonecollection', 60006), + (23410, 23658, 'accessories/wieldable_items/weapons/exp11/1h_pierce/assassinblade_bonecollection', 60006), + (23411, 23659, 'accessories/wieldable_items/weapons/exp11/1h_sword/broadsword_bonecollection', 60006), + (23412, 23660, 'accessories/wieldable_items/weapons/exp11/1h_sword/cutlass_bonecollection', 60006), + (23413, 23661, 'accessories/wieldable_items/weapons/exp11/1h_sword/rapier_bonecollection', 60006), + (23414, 23662, 'creatures/pets/meatbeast_calf/meatbeast_calf_flyer_base', 60006), + (23415, 23663, 'playerstudio/houseitems/erollisirideaswan', 60006), + (23416, 23664, 'playerstudio/houseitems/winepress', 60006), + (23417, 23665, 'playerstudio/houseitems/stooloflove', 60006), + (23418, 23666, 'playerstudio/houseitems/vanityoflove', 60006), + (23419, 23667, 'playerstudio/houseitems/chairoflove', 60006), + (23420, 23668, 'playerstudio/houseitems/latticediamond', 60006), + (23421, 23669, 'playerstudio/houseitems/latticeminibar', 60006), + (23422, 23670, 'playerstudio/houseitems/latticesquare', 60006), + (23423, 23671, 'playerstudio/houseitems/latticewinecart', 60006), + (23424, 23672, 'playerstudio/houseitems/berrydessertsetting', 60006), + (23425, 23673, 'creatures/pets/meatbeast_calf/meatbeast_calf_flyer_angus', 60006), + (23426, 23674, 'creatures/pets/meatbeast_calf/meatbeast_calf_flyer_fools', 60006), + (23427, 23675, 'creatures/pets/meatbeast_calf/meatbeast_calf_flyer_jersey', 60006), + (23428, 23676, 'creatures/pets/meatbeast_calf/meatbeast_calf_flyer_spotted_brown', 60006), + (23429, 23677, '_exp10/objects/hk_book_openbook01_dpo', 60006), + (23430, 23678, '_exp10/objects/hk_books_single_ornate01_dpo', 60006), + (23431, 23679, '_exp10/objects/hk_books_tristack02_dpo', 60006), + (23432, 23680, 'accessories/wieldable_items/weapons/exp11/2h_sword/hammer_2h_bonecollection', 60006), + (23433, 23681, 'accessories/wieldable_items/weapons/exp11/bow/longbow_bonecollection', 60006), + (23434, 23682, 'accessories/wieldable_items/weapons/exp11/fist/fist_bonecollection', 60006), + (23435, 23683, 'creatures/mounts/rabbit_mount/rabbit_mount_base', 60006), + (23436, 23684, 'accessories/wieldable_items/shields/exp11/shield_bonecollection_buckler', 60006), + (23437, 23685, 'accessories/wieldable_items/shields/exp11/shield_bonecollection_kite', 60006), + (23438, 23686, '_exp10/objects/hk_books_single_ornate01_centered_dpo', 60006), + (23439, 23687, 'playerstudio/houseitems/lovingheartsarchway', 60006), + (23440, 23688, 'playerstudio/houseitems/lovingheartsfencesegment', 60006), + (23441, 23689, 'playerstudio/houseitems/bloodrosepainting', 60006), + (23442, 23690, 'accessories/wieldable_items/shields/exp10/kite_embellished_shadow_fx', 60006), + (23443, 23691, 'accessories/wieldable_items/shields/exp10/tower_ornate_evil_fx', 60006), + (23444, 23692, 'accessories/wieldable_items/weapons/exp10/1h_crush/hammer_bellringer_shadowmarch_fx', 60006), + (23445, 23693, 'accessories/wieldable_items/weapons/exp10/1h_crush/mace_opulent_posessed_fx', 60006), + (23446, 23694, 'accessories/wieldable_items/weapons/exp10/1h_crush/scepter_wand_diseased_fx', 60006), + (23447, 23695, 'accessories/wieldable_items/weapons/exp10/1h_pierce/dagger_mage_shadow_fx', 60006), + (23448, 23696, 'accessories/wieldable_items/weapons/exp10/1h_pierce/dagger_scout_evil_fx', 60006), + (23449, 23697, 'accessories/wieldable_items/weapons/exp10/1h_sword/axe_doublethreat_shadowblight_fx', 60006), + (23450, 23698, 'accessories/wieldable_items/weapons/exp10/1h_sword/longsword_necrotic_fx', 60006), + (23451, 23699, 'accessories/wieldable_items/weapons/exp10/2h_crush/hammer_tunnelforger_dreamwrought_fx', 60006), + (23452, 23700, 'accessories/wieldable_items/weapons/exp10/bow/longbow_scout_nightmare_fx', 60006), + (23453, 23701, 'accessories/wieldable_items/weapons/exp10/fist/fist_bolted_coldsteel_fx', 60006), + (23454, 23702, 'accessories/wieldable_items/weapons/exp10/staff/staff_halberd_evil_fx', 60006), + (23455, 23703, 'accessories/wieldable_items/weapons/exp10/staff/staff_mage_pestillence_fx', 60006), + (23456, 23704, 'accessories/wearable_items/snapons/backpacks/backpack_guide', 60006), + (23457, 23705, '_exp10/characters/tool_users/bolgin/bolgin_ghost', 60006), + (23458, 23706, 'projectiles/flaming_chrome_skull_trail', 60006), + (23459, 23707, 'creatures/pets/bunny/bunny', 60006), + (23460, 23708, 'creatures/pets/bunny/bunny_black', 60006), + (23461, 23709, 'creatures/pets/bunny/bunny_grey', 60006), + (23462, 23710, 'creatures/pets/bunny/bunny_white', 60006), + (23463, 23711, 'creatures/mounts/rabbit_mount/rabbit_mount_black', 60006), + (23464, 23712, 'creatures/mounts/rabbit_mount/rabbit_mount_grey', 60006), + (23465, 23713, 'creatures/mounts/rabbit_mount/rabbit_mount_white', 60006), + (23466, 23714, 'creatures/mounts/rabbit_mount/rabbit_mount_lop_base', 60006), + (23467, 23715, 'accessories/wieldable_items/shields/exp11/shield_kite_zlandicar', 60006), + (23468, 23716, 'accessories/wieldable_items/weapons/exp11/1h_sword/sword_zlandicar', 60006), + (23469, 23717, 'accessories/wieldable_items/weapons/exp11/fist/fist_zlandicar', 60006), + (23470, 23718, 'accessories/wieldable_items/weapons/exp11/talisman/talisman_zlandicar', 60006), + (23471, 23719, 'playerstudio/characters/weapons/2h_sword/vulcan/vulcan', 60006), + (23472, 23720, 'accessories/wearable_items/_exp11/hero_bracers/hands_combined', 60006), + (23473, 23721, 'ec/npc/skeletonorc_base_2014', 60006), + (23474, 23722, 'ec/npc/skeletonorc_oneleg_2014', 60006), + (23475, 23723, 'staticobjects/liveevent/brew_day/bbm_bowl', 60006), + (23476, 23724, 'staticobjects/liveevent/brew_day/bbm_cup_ornate', 60006), + (23477, 23725, 'staticobjects/liveevent/brew_day/dpo_brown_curtain_left', 60006), + (23478, 23726, 'staticobjects/liveevent/brew_day/dpo_brown_curtain_right', 60006), + (23479, 23727, 'staticobjects/liveevent/brew_day/dpo_erollisi_hopsvine02', 60006), + (23480, 23728, 'staticobjects/liveevent/brew_day/dpo_green_curtain_yellow_flower_left', 60006), + (23481, 23729, 'staticobjects/liveevent/brew_day/dpo_green_curtain_yellow_flower_right', 60006), + (23482, 23730, 'staticobjects/liveevent/brew_day/kal_counter_bar', 60006), + (23483, 23731, 'staticobjects/liveevent/brew_day/kal_lightsource_hanging_blue01', 60006), + (23484, 23732, 'staticobjects/liveevent/brew_day/kal_shaman_jar01', 60006), + (23485, 23733, 'staticobjects/liveevent/bristlebane_day/dpo_goblin_smokestack02', 60006), + (23486, 23734, 'staticobjects/liveevent/bristlebane_day/dpo_hk_kitchen_winebottle01', 60006), + (23487, 23735, 'staticobjects/liveevent/bristlebane_day/dpo_na_bars_gold01', 60006), + (23488, 23736, 'staticobjects/liveevent/bristlebane_day/dpo_pik_goldpile01', 60006), + (23489, 23737, 'staticobjects/liveevent/bristlebane_day/dpo_river_halflingdoor', 60006), + (23490, 23738, 'staticobjects/liveevent/bristlebane_day/dpo_teal_curtain_green_flower_left', 60006), + (23491, 23739, 'staticobjects/liveevent/bristlebane_day/dpo_teal_curtain_green_flower_right', 60006), + (23492, 23740, 'staticobjects/liveevent/bristlebane_day/dpo_teal_curtain_left', 60006), + (23493, 23741, 'staticobjects/liveevent/bristlebane_day/dpo_teal_curtain_right', 60006), + (23494, 23742, 'staticobjects/liveevent/bristlebane_day/dpo_th_urns_urnmed', 60006), + (23495, 23743, 'staticobjects/liveevent/bristlebane_day/dpo_yellow_curtain_left', 60006), + (23496, 23744, 'creatures/mounts/rabbit_mount/rabbit_mount_evil_base', 60006), + (23497, 23745, 'creatures/mounts/rabbit_mount/rabbit_mount_evil_ring', 60006), + (23498, 23746, 'creatures/mounts/rabbit_mount/rabbit_mount_evil_white', 60006), + (23499, 23747, 'creatures/mounts/rabbit_mount/rabbit_mount_lop_black', 60006), + (23500, 23748, 'creatures/mounts/rabbit_mount/rabbit_mount_lop_evil', 60006), + (23501, 23749, 'creatures/mounts/rabbit_mount/rabbit_mount_lop_evil_white', 60006), + (23502, 23750, 'creatures/mounts/rabbit_mount/rabbit_mount_lop_grey', 60006), + (23503, 23751, 'creatures/mounts/rabbit_mount/rabbit_mount_lop_white', 60006), + (23504, 23752, 'accessories/wearable_items/_exp10/dragon_armor/chain_black/chest', 60006), + (23505, 23753, 'accessories/wearable_items/_exp10/dragon_armor/chain_black/feet', 60006), + (23506, 23754, 'accessories/wearable_items/_exp10/dragon_armor/chain_black/forearms', 60006), + (23507, 23755, 'accessories/wearable_items/_exp10/dragon_armor/chain_black/hands', 60006), + (23508, 23756, 'accessories/wearable_items/_exp10/dragon_armor/chain_black/head', 60006), + (23509, 23757, 'accessories/wearable_items/_exp10/dragon_armor/chain_black/legs', 60006), + (23510, 23758, 'accessories/wearable_items/_exp10/dragon_armor/chain_black/legs_noskirt', 60006), + (23511, 23759, 'accessories/wearable_items/_exp10/dragon_armor/chain_black/shoulders', 60006), + (23512, 23760, 'accessories/wearable_items/_exp10/dragon_armor/chain_black/shoulders_epic', 60006), + (23513, 23761, 'accessories/wearable_items/_exp10/dragon_armor/chain_black/skirt', 60006), + (23514, 23762, 'accessories/wearable_items/_exp10/dragon_armor/gi_black/chest', 60006), + (23515, 23763, 'accessories/wearable_items/_exp10/dragon_armor/gi_black/feet', 60006), + (23516, 23764, 'accessories/wearable_items/_exp10/dragon_armor/gi_black/hands', 60006), + (23517, 23765, 'accessories/wearable_items/_exp10/dragon_armor/gi_black/pants', 60006), + (23518, 23766, 'accessories/wearable_items/_exp10/dragon_armor/leather_black/chest', 60006), + (23519, 23767, 'accessories/wearable_items/_exp10/dragon_armor/leather_black/feet', 60006), + (23520, 23768, 'accessories/wearable_items/_exp10/dragon_armor/leather_black/forearms', 60006), + (23521, 23769, 'accessories/wearable_items/_exp10/dragon_armor/leather_black/hands', 60006), + (23522, 23770, 'accessories/wearable_items/_exp10/dragon_armor/leather_black/head', 60006), + (23523, 23771, 'accessories/wearable_items/_exp10/dragon_armor/leather_black/legs', 60006), + (23524, 23772, 'accessories/wearable_items/_exp10/dragon_armor/leather_black/legs_epic', 60006), + (23525, 23773, 'accessories/wearable_items/_exp10/dragon_armor/leather_black/legs_noskirt', 60006), + (23526, 23774, 'accessories/wearable_items/_exp10/dragon_armor/leather_black/shoulders', 60006), + (23527, 23775, 'accessories/wearable_items/_exp10/dragon_armor/leather_black/shoulders_epic', 60006), + (23528, 23776, 'accessories/wearable_items/_exp10/dragon_armor/leather_black/skirt', 60006), + (23529, 23777, 'accessories/wearable_items/_exp10/dragon_armor/robe_black/chest', 60006), + (23530, 23778, 'accessories/wearable_items/_exp10/dragon_armor/robe_black/feet', 60006), + (23531, 23779, 'accessories/wearable_items/_exp10/dragon_armor/robe_black/hands', 60006), + (23532, 23780, 'accessories/wearable_items/_exp10/dragon_armor/robe_black/head', 60006), + (23533, 23781, 'accessories/wearable_items/_exp10/dragon_armor/robe_black/hood', 60006), + (23534, 23782, 'accessories/wearable_items/_exp10/dragon_armor/robe_black/pants', 60006), + (23535, 23783, 'accessories/wearable_items/_exp10/dragon_armor/robe_black/skirt', 60006), + (23536, 23784, 'accessories/wearable_items/_exp10/dragon_armor/vanguard_black/chest', 60006), + (23537, 23785, 'accessories/wearable_items/_exp10/dragon_armor/vanguard_black/feet', 60006), + (23538, 23786, 'accessories/wearable_items/_exp10/dragon_armor/vanguard_black/forearms', 60006), + (23539, 23787, 'accessories/wearable_items/_exp10/dragon_armor/vanguard_black/hands', 60006), + (23540, 23788, 'accessories/wearable_items/_exp10/dragon_armor/vanguard_black/head', 60006), + (23541, 23789, 'accessories/wearable_items/_exp10/dragon_armor/vanguard_black/head_epic', 60006), + (23542, 23790, 'accessories/wearable_items/_exp10/dragon_armor/vanguard_black/legs', 60006), + (23543, 23791, 'accessories/wearable_items/_exp10/dragon_armor/vanguard_black/legs_epic', 60006), + (23544, 23792, 'accessories/wearable_items/_exp10/dragon_armor/vanguard_black/legs_noskirt', 60006), + (23545, 23793, 'accessories/wearable_items/_exp10/dragon_armor/vanguard_black/right', 60006), + (23546, 23794, 'accessories/wearable_items/_exp10/dragon_armor/vanguard_black/shoulders', 60006), + (23547, 23795, 'accessories/wearable_items/_exp10/dragon_armor/vanguard_black/shoulders_epic', 60006), + (23548, 23796, 'accessories/wearable_items/_exp10/dragon_armor/vanguard_black/shoulders_nopauldrons', 60006), + (23549, 23797, 'accessories/wearable_items/_exp10/dragon_armor/vanguard_black/skirt', 60006), + (23550, 23798, '_exp11/characters/monsters/plushy_animal_bear1', 60006), + (23551, 23799, '_exp11/characters/monsters/plushy_animal_bear2', 60006), + (23552, 23800, 'ec/npc/skeletonorc_torso_2014', 60006), + (23553, 23801, 'accessories/wearable_items/cloak/exp08/snap_ons/cloak_fur_attachment_white', 60006), + (23554, 23802, 'accessories/wearable_items/cloak/exp08/cloak_fur_white', 60006), + (23555, 23803, 'staticobjects/pictures/eq1_artworkpainting', 60006), + (23556, 23804, 'staticobjects/liveevent/brew_day/kal_lightsource_torch_red', 60006), + (23557, 23805, 'staticobjects/liveevent/brew_day/dpo_brew_keg_building_door_opens', 60006), + (23558, 23806, 'playerstudio/characters/weapons/1h_pierce/frozenicespiredagger/frozenicespiredagger', 60006), + (23559, 23807, 'accessories/wearable_items/_exp10/dragon_armor/vanguard/snapons/pauldron_left_black', 60006), + (23560, 23808, 'accessories/wearable_items/_exp10/dragon_armor/vanguard/snapons/pauldron_right_black', 60006), + (23561, 23809, 'accessories/wearable_items/_exp10/dragon_armor/vanguard/snapons/shin_left_black', 60006), + (23562, 23810, 'accessories/wearable_items/_exp10/dragon_armor/vanguard/snapons/shin_right_black', 60006), + (23563, 23811, 'accessories/wearable_items/_exp10/dragon_armor/vanguard/snapons/vanguard_belt_black', 60006), + (23564, 23812, '_exp11/characters/monsters/nexona_skeleton/nexona_skeleton', 60006), + (23565, 23813, 'accessories/wearable_items/_exp10/dragon_armor/leather/snapons/leather_belt_black', 60006), + (23566, 23814, 'accessories/wearable_items/_exp10/dragon_armor/leather/snapons/pauldron_left_black', 60006), + (23567, 23815, 'accessories/wearable_items/_exp10/dragon_armor/leather/snapons/pauldron_right_black', 60006), + (23568, 23816, '_exp11/characters/tool_users/amygdalen_2014/amygdalen_2014_base', 60006), + (23569, 23817, '_exp11/characters/monsters/plushy_animal_badger1', 60006), + (23570, 23818, '_exp11/characters/monsters/plushy_animal_badger2', 60006), + (23571, 23819, '_exp11/characters/monsters/plushy_animal_crab1', 60006), + (23572, 23820, '_exp11/characters/monsters/plushy_animal_crab2', 60006), + (23573, 23821, '_exp11/characters/monsters/plushy_animal_wolf1', 60006), + (23574, 23822, '_exp11/characters/monsters/plushy_animal_wolf2', 60006), + (23575, 23823, 'accessories/wearable_items/profesion_hats/warden/plain_metal_circlet/ghost/head_candle_back', 60006), + (23576, 23824, 'accessories/wearable_items/profesion_hats/warden/plain_metal_circlet/ghost/head_candle_front', 60006), + (23577, 23825, 'accessories/wearable_items/profesion_hats/warden/plain_metal_circlet/ghost/head_candle_left', 60006), + (23578, 23826, 'accessories/wearable_items/profesion_hats/warden/plain_metal_circlet/ghost/head_candle_right', 60006), + (23579, 23827, 'accessories/wearable_items/profesion_hats/warden/plain_metal_circlet/ghost/head_circlet_ghost_candles', 60006), + (23580, 23828, '_exp11/characters/tool_users/amygdalen_2014/amygdalen_2014_dreadknight', 60006), + (23581, 23829, '_exp11/characters/tool_users/amygdalen_2014/amygdalen_2014_lightarmor', 60006), + (23582, 23830, '_exp11/characters/tool_users/amygdalen_2014/amygdalen_2014_priest', 60006), + (23583, 23831, '_exp11/characters/tool_users/amygdalen_2014/amygdalen_2014_warlord', 60006), + (23584, 23832, '_exp11/characters/tool_users/shissar/shissar_male_heavy_coral', 60006), + (23585, 23833, '_exp11/characters/tool_users/shissar/shissar_male_light', 60006), + (23586, 23834, '_exp11/characters/tool_users/shissar/shissar_male_light_base', 60006), + (23587, 23835, '_exp11/characters/tool_users/shissar/shissar_male_light_coral', 60006), + (23999, 25485, 'accessories/wearable_items/_exp05/guk_turtle_vanguard/head', 60066), + (24001, 25486, '_exp11/characters/monsters/golems/rock_golem', 60066), + (24002, 25487, '_exp09/characters/tool_users/illithid/illithid_levitate_base', 60066), + (24003, 25488, '_exp11/houseitems/ss_rope_vines02_dpo2', 60066), + (24004, 25489, '_exp12/characters/monsters/fear_golem/fear_golem_mud', 60066), + (24005, 25490, 'staticobjects/liveevent/erollisi_objects/dpo_lf_vase_ornate01', 60066), + (24006, 25491, 'staticobjects/liveevent/erollisi_objects/dpo_lf_vase_monk01', 60066), + (24007, 25492, 'staticobjects/liveevent/brew_day/fpalt_kitchen_winebottleplain01', 60066), + (24008, 25493, 'staticobjects/liveevent/brew_day/bbm_cup_plain', 60066), + (24009, 25494, 'staticobjects/liveevent/brew_day/bbm_stein_dwarf01', 60066), + (24010, 25495, 'staticobjects/liveevent/brew_day/hk_barrel_large01', 60066), + (24011, 25496, 'staticobjects/liveevent/brew_day/hk_barrel_small01', 60066), + (24012, 25497, 'staticobjects/liveevent/brew_day/hk_keg_large01', 60066), + (24013, 25498, 'staticobjects/liveevent/brew_day/kal_crate_bugbear01', 60066), + (24014, 25499, 'staticobjects/liveevent/brew_day/kal_crate_bugbear02', 60066), + (24015, 25500, 'staticobjects/liveevent/brew_day/kal_lightsource_firepot02', 60066), + (24016, 25501, 'staticobjects/liveevent/brew_day/headmount_newpig', 60066), + (24017, 25502, 'staticobjects/liveevent/brew_day/halfing_wallkeg01_door_dpo', 60066), + (24018, 25503, 'staticobjects/liveevent/bristlebane_day/dpo_halfing_balnketrack01', 60066), + (24019, 25504, 'staticobjects/liveevent/bristlebane_day/dpo_halfing_basket_strawsm01', 60066), + (24020, 25505, 'staticobjects/liveevent/bristlebane_day/dpo_halfing_basket_strawtall01', 60066), + (24021, 25506, 'staticobjects/liveevent/bristlebane_day/dpo_halfing_baucket_grain01', 60066), + (24022, 25507, 'staticobjects/liveevent/bristlebane_day/dpo_halfing_drum02', 60066), + (24023, 25508, 'staticobjects/liveevent/bristlebane_day/dpo_halfing_forge_walltools01', 60066), + (24024, 25509, 'staticobjects/liveevent/bristlebane_day/dpo_halfing_jar_clsd02', 60066), + (24025, 25510, 'staticobjects/liveevent/bristlebane_day/dpo_halfing_spotlight01', 60066), + (24026, 25511, 'staticobjects/liveevent/bristlebane_day/dpo_halfling_forge_workbench0', 60066), + (24027, 25512, 'staticobjects/liveevent/bristlebane_day/dpo_halfling_rivermap01', 60066), + (24028, 25513, 'staticobjects/liveevent/bristlebane_day/dpo_headmount_piranha', 60066), + (24029, 25514, 'staticobjects/liveevent/bristlebane_day/dpo_river_halflingdoor04', 60066), + (24030, 25515, 'staticobjects/liveevent/bristlebane_day/dpo_mc_wine_bottle_ornate', 60066), + (24031, 25516, 'staticobjects/liveevent/bristlebane_day/dpo_mc_wine_bottle_plain', 60066), + (24032, 25517, 'staticobjects/liveevent/bristlebane_day/dpo_mc_wine_glass', 60066), + (24033, 25518, '_exp12/characters/tool_users/halfling_female_2015/halfling_female_2015', 60066), + (24034, 25519, '_exp12/characters/tool_users/halfling_female_2015/halfling_female_zombie01', 60066), + (24035, 25520, '_exp12/characters/tool_users/halfling_female_2015/halfling_female_zombie02', 60066), + (24036, 25521, '_exp11/objects/exp11_dun_rum_cellar/zepplin_transport_pirate_deflated_dpo', 60066), + (24037, 25522, 'projectiles/spell_confetti_ball', 60066), + (24038, 25523, '_exp11/objects/exp11_dun_rum_cellar/zepplin_transport_pirate_dpo', 60066), + (24039, 25524, 'staticobjects/liveevent/erollisi_objects/errolisi_heartpillow_denim01', 60066), + (24040, 25525, 'staticobjects/liveevent/erollisi_objects/errolisi_heartpillow_leather_patch', 60066), + (24041, 25526, 'staticobjects/liveevent/erollisi_objects/erollisi_rug_heart01', 60066), + (24042, 25527, 'staticobjects/liveevent/erollisi_objects/erollisi_rug_heart02', 60066), + (24043, 25528, 'staticobjects/liveevent/erollisi_objects/erollisi_rug_heart03', 60066), + (24044, 25529, 'staticobjects/liveevent/erollisi_objects/dpo_erollosi_plate0cookies01_evil', 60066), + (24045, 25530, 'staticobjects/liveevent/erollisi_objects/dpo_erollosi_platecupcakes_evil_01', 60066), + (24046, 25531, 'staticobjects/liveevent/erollisi_objects/vel_othmir_lovers_shrine_01', 60066), + (24047, 25532, '_exp12/characters/monsters/fear_golem/fear_golem_obsidian', 60066), + (24048, 25533, '_exp11/objects/exp11_dun_rum_cellar/zepplin_transport_pirate_cannon_deck_dpo', 60066), + (24049, 25534, '_exp11/objects/exp11_dun_rum_cellar/zepplin_transport_pirate_cannon_player_dpo', 60066), + (24050, 25535, '_exp11/objects/exp11_dun_rum_cellar/zepplin_transport_pirate_deflated_no_cannon_dpo', 60066), + (24051, 25536, '_exp11/objects/exp11_dun_rum_cellar/ss_barrel01_dpo', 60066), + (24052, 25537, '_exp10/objects/hk_crate_small_long01_dpo', 60066), + (24053, 25538, '_exp10/objects/kd_crate_broken_dpo', 60066), + (24054, 25539, 'accessories/wearable_items/_exp12/chain_theifoflove/chest', 60066), + (24055, 25540, 'accessories/wearable_items/_exp12/chain_theifoflove/feet', 60066), + (24056, 25541, 'accessories/wearable_items/_exp12/chain_theifoflove/forearms', 60066), + (24057, 25542, 'accessories/wearable_items/_exp12/chain_theifoflove/hands', 60066), + (24058, 25543, 'accessories/wearable_items/_exp12/chain_theifoflove/head', 60066), + (24059, 25544, 'accessories/wearable_items/_exp12/chain_theifoflove/head_hood', 60066), + (24060, 25545, 'accessories/wearable_items/_exp12/chain_theifoflove/legs', 60066), + (24061, 25546, 'accessories/wearable_items/_exp12/chain_theifoflove/legs_noskirt', 60066), + (24062, 25547, 'accessories/wearable_items/_exp12/chain_theifoflove/shoulders', 60066), + (24063, 25548, 'accessories/wearable_items/_exp12/chain_theifoflove/skirt', 60066), + (24064, 25549, '_exp11/objects/exp11_dun_rum_cellar/rc_r001_pipejam_001_dpo', 60066), + (24065, 25550, '_exp11/objects/exp11_dun_rum_cellar/rc_r001_rot_pump_gear_001_dpo', 60066), + (24066, 25551, '_exp11/objects/exp11_dun_rum_cellar/rc_r001_rot_pump_gear_002_dpo', 60066), + (24067, 25552, '_exp11/objects/exp11_dun_rum_cellar/rot_pumpgear_01_dpo', 60066), + (24068, 25553, '_exp11/objects/exp11_dun_rum_cellar/rot_pumpgear_02_dpo', 60066), + (24069, 25554, 'accessories/wearable_items/cloak/exp12/cloak_feathered_lovely', 60066), + (24070, 25555, 'accessories/wearable_items/profesion_hats/tophat/head_brewday', 60066), + (24071, 25556, 'accessories/wearable_items/cloak/exp09/scarf/cloak_scarf_brewday', 60066), + (24072, 25557, 'accessories/wearable_items/cloak/exp09/scarf/neckrings/cloak_scarf_neckring_brewday', 60066), + (24073, 25558, 'accessories/wieldable_items/weapons/eqnext_founders_flag/trailblazer_promo', 60066), + (24074, 25559, 'accessories/wearable_items/profesion_hats/bucket/head_bucket', 60066), + (24075, 25560, 'accessories/wearable_items/profesion_hats/bucket/head_bucket_dark', 60066), + (24076, 25561, 'accessories/wieldable_items/weapons/exp12/1h_crush/1h_crush_halflingfemale_arm', 60066), + (24077, 25562, 'accessories/wearable_items/_exp12/pirate_heavycloth/head_pirate_admiral', 60066), + (24078, 25563, 'accessories/wearable_items/_exp12/pirate_heavycloth/head_pirate_admiral_epic', 60066), + (24079, 25564, 'accessories/wearable_items/_exp12/pirate_heavycloth/head_pirate_captain', 60066), + (24080, 25565, 'accessories/wearable_items/_exp12/pirate_heavycloth/head_pirate_captain_epic', 60066), + (24081, 25566, 'accessories/wearable_items/_exp12/pirate_heavycloth/pirate_heavycloth_anchor/chest', 60066), + (24082, 25567, 'accessories/wearable_items/_exp12/pirate_heavycloth/pirate_heavycloth_anchor/feet', 60066), + (24083, 25568, 'accessories/wearable_items/_exp12/pirate_heavycloth/pirate_heavycloth_anchor/forearms', 60066), + (24084, 25569, 'accessories/wearable_items/_exp12/pirate_heavycloth/pirate_heavycloth_anchor/hands', 60066), + (24085, 25570, 'accessories/wearable_items/_exp12/pirate_heavycloth/pirate_heavycloth_anchor/legs', 60066), + (24086, 25571, 'accessories/wearable_items/_exp12/pirate_heavycloth/pirate_heavycloth_anchor/legs_noskirt', 60066), + (24087, 25572, 'accessories/wearable_items/_exp12/pirate_heavycloth/pirate_heavycloth_anchor/shoulders', 60066), + (24088, 25573, 'accessories/wearable_items/_exp12/pirate_heavycloth/pirate_heavycloth_anchor/skirt', 60066), + (24089, 25574, 'accessories/wearable_items/_exp12/pirate_heavycloth/pirate_heavycloth_base/chest', 60066), + (24090, 25575, 'accessories/wearable_items/_exp12/pirate_heavycloth/pirate_heavycloth_base/feet', 60066), + (24091, 25576, 'accessories/wearable_items/_exp12/pirate_heavycloth/pirate_heavycloth_base/forearms', 60066), + (24092, 25577, 'accessories/wearable_items/_exp12/pirate_heavycloth/pirate_heavycloth_base/hands', 60066), + (24093, 25578, 'accessories/wearable_items/_exp12/pirate_heavycloth/pirate_heavycloth_base/head', 60066), + (24094, 25579, 'accessories/wearable_items/_exp12/pirate_heavycloth/pirate_heavycloth_base/legs', 60066), + (24095, 25580, 'accessories/wearable_items/_exp12/pirate_heavycloth/pirate_heavycloth_base/legs_noskirt', 60066), + (24096, 25581, 'accessories/wearable_items/_exp12/pirate_heavycloth/pirate_heavycloth_base/shoulders', 60066), + (24097, 25582, 'accessories/wearable_items/_exp12/pirate_heavycloth/pirate_heavycloth_base/skirt', 60066), + (24098, 25583, 'accessories/wearable_items/_exp12/pirate_heavycloth/pirate_heavycloth_compass/chest', 60066), + (24099, 25584, 'accessories/wearable_items/_exp12/pirate_heavycloth/pirate_heavycloth_compass/feet', 60066), + (24100, 25585, 'accessories/wearable_items/_exp12/pirate_heavycloth/pirate_heavycloth_compass/forearms', 60066), + (24101, 25586, 'accessories/wearable_items/_exp12/pirate_heavycloth/pirate_heavycloth_compass/hands', 60066), + (24102, 25587, 'accessories/wearable_items/_exp12/pirate_heavycloth/pirate_heavycloth_compass/legs', 60066), + (24103, 25588, 'accessories/wearable_items/_exp12/pirate_heavycloth/pirate_heavycloth_compass/legs_noskirt', 60066), + (24104, 25589, 'accessories/wearable_items/_exp12/pirate_heavycloth/pirate_heavycloth_compass/shoulders', 60066), + (24105, 25590, 'accessories/wearable_items/_exp12/pirate_heavycloth/pirate_heavycloth_compass/skirt', 60066), + (24106, 25591, 'accessories/wearable_items/_exp12/pirate_heavycloth_base/base/chest', 60066), + (24107, 25592, 'accessories/wearable_items/_exp12/pirate_heavycloth_base/base/feet', 60066), + (24108, 25593, 'accessories/wearable_items/_exp12/pirate_heavycloth_base/base/hands', 60066), + (24109, 25594, 'accessories/wearable_items/_exp12/pirate_heavycloth_base/base/head', 60066), + (24110, 25595, 'accessories/wearable_items/_exp12/pirate_heavycloth_base/base/legs', 60066), + (24111, 25596, 'accessories/wearable_items/_exp12/pirate_heavycloth_base/base/shoulders', 60066), + (24112, 25597, 'accessories/wearable_items/_exp12/pirate_heavycloth_base/base/skirt', 60066), + (24113, 25598, 'accessories/wearable_items/_exp12/pirate_heavycloth_base/bluestripe/chest', 60066), + (24114, 25599, 'accessories/wearable_items/_exp12/pirate_heavycloth_base/bluestripe/feet', 60066), + (24115, 25600, 'accessories/wearable_items/_exp12/pirate_heavycloth_base/bluestripe/hands', 60066), + (24116, 25601, 'accessories/wearable_items/_exp12/pirate_heavycloth_base/bluestripe/legs', 60066), + (24117, 25602, 'accessories/wearable_items/_exp12/pirate_heavycloth_base/bluestripe/shoulders', 60066), + (24118, 25603, 'accessories/wearable_items/_exp12/pirate_heavycloth_base/bluestripe/skirt', 60066), + (24119, 25604, 'accessories/wearable_items/_exp12/pirate_heavycloth_base/redstripe/chest', 60066), + (24120, 25605, 'accessories/wearable_items/_exp12/pirate_heavycloth_base/redstripe/feet', 60066), + (24121, 25606, 'accessories/wearable_items/_exp12/pirate_heavycloth_base/redstripe/hands', 60066), + (24122, 25607, 'accessories/wearable_items/_exp12/pirate_heavycloth_base/redstripe/legs', 60066), + (24123, 25608, 'accessories/wearable_items/_exp12/pirate_heavycloth_base/redstripe/shoulders', 60066), + (24124, 25609, 'accessories/wearable_items/_exp12/pirate_heavycloth_base/redstripe/skirt', 60066), + (24125, 25610, 'accessories/wearable_items/_exp12/pirate_robe-heavycloth/base/chest', 60066), + (24126, 25611, 'accessories/wearable_items/_exp12/pirate_robe-heavycloth/base/feet', 60066), + (24127, 25612, 'accessories/wearable_items/_exp12/pirate_robe-heavycloth/base/forearms', 60066), + (24128, 25613, 'accessories/wearable_items/_exp12/pirate_robe-heavycloth/base/hands', 60066), + (24129, 25614, 'accessories/wearable_items/_exp12/pirate_robe-heavycloth/base/head_cloth', 60066), + (24130, 25615, 'accessories/wearable_items/_exp12/pirate_robe-heavycloth/base/legs', 60066), + (24131, 25616, 'accessories/wearable_items/_exp12/pirate_robe-heavycloth/base/shoulders', 60066), + (24132, 25617, 'accessories/wearable_items/_exp12/pirate_robe-heavycloth/base/skirt', 60066), + (24133, 25618, 'accessories/wearable_items/cloak/exp12/cloak_pirate_flag_black', 60066), + (24134, 25619, 'accessories/wearable_items/cloak/exp12/cloak_pirate_flag_red', 60066), + (24135, 25620, 'accessories/wearable_items/cloak/exp12/cloak_pirate_plain_black', 60066), + (24136, 25621, 'accessories/wearable_items/cloak/exp12/cloak_pirate_plain_brown', 60066), + (24137, 25622, 'accessories/wearable_items/cloak/exp12/cloak_pirate_plain_red', 60066), + (24138, 25623, '_exp12/characters/tool_users/troll_shaman_pirate/troll_shaman_pirate', 60066), + (24139, 25624, '_exp12/characters/monsters/rock_moss_golem/rock_lava_golem', 60066), + (24140, 25625, '_exp12/characters/monsters/rock_moss_golem/rock_moss_golem', 60066), + (24141, 25626, 'playerstudio/characters/weapons/bow/serpent_bow/serpent_bow', 60066), + (24142, 25627, 'playerstudio/characters/weapons/2h_crush/triple_hammer/triple_hammer', 60066), + (24143, 25628, 'playerstudio/characters/cloaks/tiger_cloak/tiger_cloak', 60066), + (24144, 25629, 'playerstudio/houseitems/castle_archway', 60066), + (24145, 25630, 'playerstudio/houseitems/castle_corner', 60066), + (24146, 25631, 'playerstudio/houseitems/castle_wall', 60066), + (24147, 25632, 'playerstudio/houseitems/castle_drawbridge', 60066), + (24148, 25633, 'playerstudio/houseitems/cherryrose_bookshelf', 60066), + (24149, 25634, 'playerstudio/houseitems/cherryrose_chair', 60066), + (24150, 25635, 'playerstudio/houseitems/cherryrose_diningtable', 60066), + (24151, 25636, 'playerstudio/houseitems/dragon_sconce', 60066), + (24152, 25637, 'playerstudio/houseitems/dragon_sconcelantern', 60066), + (24153, 25638, 'playerstudio/houseitems/freezy_cask', 60066), + (24154, 25639, 'playerstudio/houseitems/icy_gazebo', 60066), + (24155, 25640, 'playerstudio/houseitems/jinisk_dome', 60066), + (24156, 25641, 'playerstudio/houseitems/lamp_dragon', 60066), + (24157, 25642, 'playerstudio/houseitems/lamp_forest', 60066), + (24158, 25643, 'playerstudio/houseitems/leviathan_whale', 60066), + (24159, 25644, 'playerstudio/houseitems/mushroom_house', 60066), + (24160, 25645, 'playerstudio/houseitems/orca_whale', 60066), + (24161, 25646, 'playerstudio/houseitems/painting_dragonrest', 60066), + (24162, 25647, 'playerstudio/houseitems/painting_forestdawn', 60066), + (24163, 25648, 'playerstudio/houseitems/painting_hobbithole', 60066), + (24164, 25649, 'playerstudio/houseitems/painting_rockylighthouse', 60066), + (24165, 25650, 'playerstudio/houseitems/painting_snowmountains', 60066), + (24166, 25651, 'playerstudio/houseitems/painting_theforest', 60066), + (24167, 25652, 'playerstudio/houseitems/painting_winelife', 60066), + (24168, 25653, 'playerstudio/houseitems/polished_armoire', 60066), + (24169, 25654, 'playerstudio/houseitems/polished_cupboard', 60066), + (24170, 25655, 'playerstudio/houseitems/polished_diningchair', 60066), + (24171, 25656, 'playerstudio/houseitems/polished_podium', 60066), + (24172, 25657, 'playerstudio/houseitems/polished_settee', 60066), + (24173, 25658, 'playerstudio/houseitems/polished_table', 60066), + (24174, 25659, 'playerstudio/houseitems/qeynos_guilddoor', 60066), + (24175, 25660, 'playerstudio/houseitems/ratongan_wheel01', 60066), + (24176, 25661, 'playerstudio/houseitems/relax_otron', 60066), + (24177, 25662, 'playerstudio/houseitems/stone_bridge', 60066), + (24178, 25663, 'playerstudio/houseitems/sun_bgone', 60066), + (24179, 25664, 'playerstudio/houseitems/wooden_cornerwall', 60066), + (24180, 25665, 'playerstudio/houseitems/wooden_interiorwall', 60066), + (24181, 25666, 'playerstudio/houseitems/wooden_openarchway', 60066), + (24182, 25667, 'playerstudio/houseitems/stone_bridge_endcap', 60066), + (24183, 25668, '_exp12/characters/monsters/parrot_2015/parrot_2015_base', 60066), + (24184, 25669, 'playerstudio/houseitems/luclin_gondola', 60066), + (24185, 25670, 'playerstudio/houseitems/guardian_coffeetable', 60066), + (24186, 25671, 'playerstudio/houseitems/guardian_podium', 60066), + (24187, 25672, 'playerstudio/houseitems/villa_roof', 60066), + (24188, 25673, 'playerstudio/houseitems/villa_door', 60066), + (24189, 25674, 'playerstudio/houseitems/villa_daisy_balcony', 60066), + (24190, 25675, 'playerstudio/houseitems/villa_long_balcony', 60066), + (24191, 25676, 'playerstudio/houseitems/villa_moonflower_balcony', 60066), + (24192, 25677, 'playerstudio/houseitems/villa_rose_balcony', 60066), + (24193, 25678, 'playerstudio/houseitems/villa_rose_home', 60066), + (24194, 25679, 'playerstudio/houseitems/villa_daisy_home', 60066), + (24195, 25680, 'playerstudio/houseitems/villa_moonflower_home', 60066), + (24196, 25681, 'playerstudio/houseitems/villa_daisy_openwindow', 60066), + (24197, 25682, 'playerstudio/houseitems/villa_daisy_widewindow', 60066), + (24198, 25683, 'playerstudio/houseitems/villa_moonflower_openwindow', 60066), + (24199, 25684, 'playerstudio/houseitems/villa_moonflower_widewindow', 60066), + (24200, 25685, 'playerstudio/houseitems/villa_rose_openwindow', 60066), + (24201, 25686, 'playerstudio/houseitems/villa_rose_widewindow', 60066), + (24202, 25687, 'playerstudio/houseitems/guardian_wallcabinet', 60066), + (24203, 25688, 'playerstudio/houseitems/travel_wagon', 60066), + (24204, 25689, 'playerstudio/houseitems/guardian_shelf', 60066), + (24205, 25690, 'playerstudio/houseitems/guardian_cabinet', 60066), + (24206, 25691, 'playerstudio/houseitems/corner_fireplace', 60066), + (24207, 25692, 'playerstudio/houseitems/stairs_knightly', 60066), + (24208, 25693, 'playerstudio/houseitems/guardian_mirror', 60066), + (24209, 25694, '_exp12/characters/monsters/parrot_2015/parrot_undead', 60066), + (24210, 25695, '_exp11/objects/exp11_dun_rum_cellar/kd_barrel_smaller_dpo', 60066), + (24211, 25696, 'accessories/wearable_items/_exp12/pirate_heavycloth/head_bandanna_eyepatch', 60066), + (24212, 25697, 'accessories/wearable_items/_exp12/pirate_heavycloth/head_bandanna_eyepatchhooked', 60066), + (24213, 25698, 'accessories/wearable_items/_exp12/pirate_heavycloth/head_bandanna_eyepatchhookedred', 60066), + (24214, 25699, 'accessories/wearable_items/_exp12/pirate_heavycloth/head_bandanna_eyepatchred', 60066), + (24215, 25700, 'accessories/wearable_items/_exp12/pirate_heavycloth/head_pirate_admiral_eyepatch', 60066), + (24216, 25701, 'accessories/wearable_items/_exp12/pirate_heavycloth/head_pirate_admiral_eyepatchhooked', 60066), + (24217, 25702, 'accessories/wearable_items/_exp12/pirate_heavycloth/head_pirate_captain_eyepatch', 60066), + (24218, 25703, 'accessories/wearable_items/_exp12/pirate_heavycloth/head_pirate_captain_eyepatchhooked', 60066), + (24219, 25704, 'accessories/wearable_items/_exp12/eyepatch/hooked/head_eyepatch_hooked_left', 60066), + (24220, 25705, 'accessories/wearable_items/_exp12/eyepatch/hooked/head_eyepatch_hooked_red_left', 60066), + (24221, 25706, 'accessories/wearable_items/_exp12/eyepatch/hooked/head_eyepatch_hooked_red_right', 60066), + (24222, 25707, 'accessories/wearable_items/_exp12/eyepatch/hooked/head_eyepatch_hooked_right', 60066), + (24223, 25708, 'accessories/wearable_items/_exp12/eyepatch/plain/head_eyepatch_blue_left', 60066), + (24224, 25709, 'accessories/wearable_items/_exp12/eyepatch/plain/head_eyepatch_left', 60066), + (24225, 25710, 'accessories/wearable_items/_exp12/eyepatch/plain/head_eyepatch_red_left', 60066), + (24226, 25711, 'accessories/wearable_items/_exp12/eyepatch/plain/head_eyepatch_right', 60066), + (24227, 25712, 'accessories/wearable_items/_exp12/bandanna_tintable/head', 60066), + (24228, 25713, '_exp11/objects/exp11_dun_rum_cellar/rc_r001_tank_005_fallen_dpo', 60066), + (24229, 25714, '_exp12/characters/tool_users/spiroc_2015/spiroc_pirate', 60066), + (24230, 25715, '_exp12/characters/monsters/iksar_golem_updated/iksar_golem_mud_red', 60066), + (24231, 25716, '_exp12/characters/monsters/iksar_golem_updated/iksar_golem_planetouched', 60066), + (24232, 25717, '_exp12/characters/monsters/iksar_golem_updated/iksar_golem_stone', 60066), + (24233, 25718, '_exp12/characters/monsters/iksar_golem_updated/iksar_golem_stone_dark', 60066), + (24234, 25719, '_exp12/characters/monsters/iksar_golem_updated/iksar_golem_stone_redstone', 60066), + (24235, 25720, '_exp12/characters/monsters/frog_cave/frog_cave_albino', 60066), + (24236, 25721, '_exp12/characters/monsters/frog_cave/frog_cave_greenblue', 60066), + (24237, 25722, '_exp12/characters/monsters/frog_cave/frog_cave_greengreen', 60066), + (24238, 25723, '_exp12/characters/monsters/frog_cave/frog_cave_redblue', 60066), + (24239, 25724, '_exp12/characters/monsters/frog_cave/frog_cave_redgreen', 60066), + (24240, 25725, '_exp11/objects/exp11_dun_rum_cellar/rc_obj_zipline01_dpo', 60066), + (24241, 25726, '_exp12/characters/monsters/basilisk_cave/basilisk_cave_albino_blue', 60066), + (24242, 25727, '_exp12/characters/monsters/basilisk_cave/basilisk_cave_albino_purple', 60066), + (24243, 25728, '_exp12/characters/monsters/basilisk_cave/basilisk_cave_bloodstone_red', 60066), + (24244, 25729, '_exp12/characters/monsters/basilisk_cave/basilisk_cave_shadowstone_blue', 60066), + (24245, 25730, '_exp12/characters/monsters/basilisk_cave/basilisk_cave_shadowstone_purple', 60066), + (24246, 25731, '_exp12/characters/monsters/basilisk_cave/basilisk_cave_shadowstone_red', 60066), + (24247, 25732, '_exp12/characters/monsters/basilisk_cave/basilisk_cave_stone_blue', 60066), + (24248, 25733, '_exp12/characters/monsters/basilisk_cave/basilisk_cave_stone_red', 60066), + (24249, 25734, 'creatures/mounts/griffin_classic/griffin_classic_variant_black_02', 60066), + (24250, 25735, 'accessories/wearable_items/_exp12/bandanna_tintable/head_eyepatch', 60066), + (24251, 25736, 'accessories/wearable_items/_exp12/bandanna_tintable/head_eyepatch2', 60066), + (24252, 25737, 'accessories/wearable_items/_exp12/bandanna_tintable/head_eyepatchhooked', 60066), + (24253, 25738, '_exp11/objects/exp11_dun_rum_cellar/rc_r001_zipline01_dpo', 60066), + (24254, 25739, '_exp12/characters/monsters/rust_monster_updated/rust_monster_albino', 60066), + (24255, 25740, '_exp12/characters/monsters/rust_monster_updated/rust_monster_albino_blue', 60066), + (24256, 25741, '_exp12/characters/monsters/rust_monster_updated/rust_monster_albino_red', 60066), + (24257, 25742, '_exp12/characters/monsters/rust_monster_updated/rust_monster_bloodstone', 60066), + (24258, 25743, '_exp12/characters/monsters/rust_monster_updated/rust_monster_magmaweevil', 60066), + (24259, 25744, '_exp12/characters/monsters/rust_monster_updated/rust_monster_nightcreep_blue', 60066), + (24260, 25745, '_exp12/characters/monsters/rust_monster_updated/rust_monster_nightcreep_purple', 60066), + (24261, 25746, '_exp12/characters/monsters/rust_monster_updated/rust_monster_nightcreep_red', 60066), + (24262, 25747, '_exp12/characters/monsters/rust_monster_updated/rust_monster_sapphire_blue', 60066), + (24263, 25748, '_exp12/characters/monsters/rust_monster_updated/rust_monster_sapphire_purple', 60066), + (24264, 25749, '_exp12/characters/monsters/rust_monster_updated/rust_monster_stonebug', 60066), + (24265, 25750, '_exp12/characters/monsters/rust_monster_updated/rust_monster_stonebug_blue', 60066), + (24266, 25751, '_exp12/characters/monsters/rust_monster_updated/rust_monster_stonebug_red', 60066), + (24267, 25752, '_exp12/characters/monsters/aboleth/aboleth_base', 60066), + (24268, 25753, '_exp12/characters/monsters/darkmantle/darkmantle_base', 60066), + (24269, 25754, 'playerstudio/houseitems/villa_door_rose', 60066), + (24270, 25755, 'playerstudio/houseitems/villa_door_moonflower', 60066), + (24271, 25756, '_exp12/characters/monsters/bone_golem/bone_golem_weapon', 60066), + (24272, 25757, '_exp11/objects/exp11_dun_rum_cellar/dwarf_male_dead_01_dpo', 60066), + (24273, 25758, '_exp11/objects/exp11_dun_rum_cellar/dwarf_male_dead_02_dpo', 60066), + (24274, 25759, '_exp11/objects/exp11_dun_rum_cellar/human_female_dead_01_dpo', 60066), + (24275, 25760, '_exp11/objects/exp11_dun_rum_cellar/human_female_dead_02_dpo', 60066), + (24276, 25761, '_exp11/objects/exp11_dun_rum_cellar/human_male_dead_01_dpo', 60066), + (24277, 25762, '_exp11/objects/exp11_dun_rum_cellar/human_male_dead_02_dpo', 60066), + (24278, 25763, '_exp11/objects/exp11_dun_rum_cellar/human_male_dead_03_dpo', 60066), + (24279, 25764, '_exp11/objects/exp11_dun_rum_cellar/human_male_dead_04_dpo', 60066), + (24280, 25765, '_exp11/objects/exp11_dun_rum_cellar/human_male_dead_vanguard_01_dpo', 60066), + (24281, 25766, '_exp11/objects/exp11_dun_rum_cellar/human_male_dead_vanguard_02_dpo', 60066), + (24282, 25767, '_exp11/objects/exp11_dun_rum_cellar/ss_chest_dpo', 60066), + (24283, 25768, '_exp12/characters/monsters/bone_golem/bone_golem_weapon_uber', 60066), + (24284, 25769, '_exp11/objects/exp11_dun_rum_cellar/broken_pipe_dpo', 60066), + (24285, 25770, 'creatures/mounts/pirate_zepplin/pirate_zepplin_red', 60066), + (24286, 25771, '_exp11/objects/exp11_dun_rum_cellar/rc_r001_tank_005_fallen_fx_dpo', 60066), + (24287, 25772, 'staticobjects/building_blocks/fulginate_plain/houseblock_1x1_column_qeystone01', 60066), + (24288, 25773, 'staticobjects/building_blocks/fulginate_plain/houseblock_1x2_column_qeystone01', 60066), + (24289, 25774, 'staticobjects/building_blocks/fulginate_plain/houseblock_1x2_dividerblock_qeystone01', 60066), + (24290, 25775, 'staticobjects/building_blocks/fulginate_plain/houseblock_1xhalf_block_qeystone01', 60066), + (24291, 25776, 'staticobjects/building_blocks/fulginate_plain/houseblock_2x2_dividerblock_qeystone01', 60066), + (24292, 25777, 'staticobjects/building_blocks/fulginate_plain/houseblock_rail_qeystone01', 60066), + (24293, 25778, 'staticobjects/building_blocks/fulginate_plain/houseblock_roundtile_qeystone01', 60066), + (24294, 25779, 'staticobjects/building_blocks/fulginate_plain/houseblock_stair_qeystone01', 60066), + (24295, 25780, 'staticobjects/building_blocks/fulginate_plain/housecube_1x1_block_qeystone01', 60066), + (24296, 25781, 'staticobjects/building_blocks/halasian/houseblock_1x1_column_halaswood', 60066), + (24297, 25782, 'staticobjects/building_blocks/halasian/houseblock_1x2_column_halaswood', 60066), + (24298, 25783, 'staticobjects/building_blocks/halasian/houseblock_1x2_dividerblock_halaswood', 60066), + (24299, 25784, 'staticobjects/building_blocks/halasian/houseblock_1xhalf_block_halaswood', 60066), + (24300, 25785, 'staticobjects/building_blocks/halasian/houseblock_2x2_dividerblock_halaswood', 60066), + (24301, 25786, 'staticobjects/building_blocks/halasian/houseblock_rail_halaswood', 60066), + (24302, 25787, 'staticobjects/building_blocks/halasian/houseblock_roundtile_halaswood', 60066), + (24303, 25788, 'staticobjects/building_blocks/halasian/houseblock_stair_halaswood', 60066), + (24304, 25789, 'staticobjects/building_blocks/halasian/housecube_1x1_block_halaswood', 60066), + (24305, 25790, 'staticobjects/building_blocks/sandalwood_plain/houseblock_1x1_column_sandalwood', 60066), + (24306, 25791, 'staticobjects/building_blocks/sandalwood_plain/houseblock_1x2_column_sandalwood', 60066), + (24307, 25792, 'staticobjects/building_blocks/sandalwood_plain/houseblock_1x2_dividerblock_sandalwood', 60066), + (24308, 25793, 'staticobjects/building_blocks/sandalwood_plain/houseblock_1xhalf_block_sandalwood', 60066), + (24309, 25794, 'staticobjects/building_blocks/sandalwood_plain/houseblock_2x2_dividerblock_sandalwood', 60066), + (24310, 25795, 'staticobjects/building_blocks/sandalwood_plain/houseblock_rail_sandalwood', 60066), + (24311, 25796, 'staticobjects/building_blocks/sandalwood_plain/houseblock_roundtile_sandalwood', 60066), + (24312, 25797, 'staticobjects/building_blocks/sandalwood_plain/houseblock_stair_sandalwood', 60066), + (24313, 25798, 'staticobjects/building_blocks/sandalwood_plain/housecube_1x1_block_sandalwood', 60066), + (24314, 25799, 'staticobjects/building_blocks/indium/houseblock_1x1_column_qeystone02', 60066), + (24315, 25800, 'staticobjects/building_blocks/indium/houseblock_1x2_column_qeystone02', 60066), + (24316, 25801, 'staticobjects/building_blocks/indium/houseblock_1x2_dividerblock_qeystone02', 60066), + (24317, 25802, 'staticobjects/building_blocks/indium/houseblock_1xhalf_block_qeystone02', 60066), + (24318, 25803, 'staticobjects/building_blocks/indium/houseblock_2x2_dividerblock_qeystone02', 60066), + (24319, 25804, 'staticobjects/building_blocks/indium/houseblock_rail_qeystone02', 60066), + (24320, 25805, 'staticobjects/building_blocks/indium/houseblock_roundtile_qeystone02', 60066), + (24321, 25806, 'staticobjects/building_blocks/indium/houseblock_stair_qeystone02', 60066), + (24322, 25807, 'staticobjects/building_blocks/indium/housecube_1x1_block_qeystone02', 60066), + (24323, 25808, 'staticobjects/deity_altars/altar_anashtisul_mythical', 60066), + (24324, 25809, 'staticobjects/deity_altars/altar_brellserilis_mythical', 60066), + (24325, 25810, 'staticobjects/deity_altars/altar_bristlebane_mythical', 60066), + (24326, 25811, 'staticobjects/deity_altars/altar_cazicthule_mythical', 60066), + (24327, 25812, 'staticobjects/deity_altars/altar_erollisi_basic', 60066), + (24328, 25813, 'staticobjects/deity_altars/altar_erollisi_crafted', 60066), + (24329, 25814, 'staticobjects/deity_altars/altar_erollisi_exceptional', 60066), + (24330, 25815, 'staticobjects/deity_altars/altar_erollisi_mythical', 60066), + (24331, 25816, 'staticobjects/deity_altars/altar_innoruuk_mythical', 60066), + (24332, 25817, 'staticobjects/deity_altars/altar_karana_mythical', 60066), + (24333, 25818, 'staticobjects/deity_altars/altar_mithanielmarr_mythical', 60066), + (24334, 25819, 'staticobjects/deity_altars/altar_quellious_mythical', 60066), + (24335, 25820, 'staticobjects/deity_altars/altar_ralloszek_mythical', 60066), + (24336, 25821, 'staticobjects/deity_altars/altar_rodcetnife_mythical', 60066), + (24337, 25822, 'staticobjects/deity_altars/altar_solusekro_mythical', 60066), + (24338, 25823, 'staticobjects/deity_altars/altar_tribunal_mythical', 60066), + (24339, 25824, 'staticobjects/deity_altars/altar_tunare_mythical', 60066), + (24340, 25825, 'staticobjects/deity_altars/altar_bertoxxulous_mythical', 60066), + (24341, 25826, '_exp11/objects/exp11_dun_rum_cellar/emit_rum_cellar_engine_dpo', 60066), + (24342, 25827, 'playerstudio/characters/cloaks/jonips/jonips', 60066), + (24343, 25828, '_exp11/objects/exp11_dun_rum_cellar/far_seas_wine_bottle_dpo', 60066), + (24344, 25829, '_exp11/objects/exp11_dun_rum_cellar/highhold_door_dpo', 60066), + (24345, 25830, '_exp11/objects/exp11_dun_rum_cellar/lever_base_wall_dpo', 60066), + (24346, 25831, '_exp11/objects/exp11_dun_rum_cellar/lever_wall_dpo', 60066), + (24347, 25832, '_exp12/characters/monsters/poxfiend/poxfiend_base', 60066), + (24348, 25833, 'creatures/mounts/duck_mount/duck_mount_base', 60066), + (24349, 25834, 'accessories/wearable_items/cloak/exp12/cloak_erolisi_armor', 60066), + (24350, 25835, 'accessories/wearable_items/cloak/exp12/cloak_erolisi_diety', 60066), + (24351, 25836, 'creatures/mounts/pirate_zepplin/pirate_zepplin_scaled', 60066), + (24352, 25837, 'creatures/mounts/hawk_mount/hawk_mount_base', 60066), + (24353, 25838, 'playerstudio/houseitems/brewbarrelpub', 60066), + (24354, 25839, 'playerstudio/houseitems/brewbarrelpubchair', 60066), + (24355, 25840, 'playerstudio/houseitems/brewbarrelpubdoor', 60066), + (24356, 25841, 'playerstudio/houseitems/brewbarrelpubsign', 60066), + (24357, 25842, 'playerstudio/houseitems/brewbarrelpubtable', 60066), + (24358, 25843, 'playerstudio/houseitems/brewersplaque', 60066), + (24359, 25844, 'playerstudio/houseitems/greenlongtent', 60066), + (24360, 25845, 'playerstudio/houseitems/greenmediumtent', 60066), + (24361, 25846, 'playerstudio/houseitems/greenshorttent', 60066), + (24362, 25847, 'playerstudio/characters/weapons/bow/lightning_bow/lightning_bow', 60066), + (24363, 25848, '_exp11/objects/exp11_dun_rum_cellar/crate_fs_upright_dpo', 60066), + (24364, 25849, 'creatures/mounts/pirate_zepplin/pirate_zepplin_test', 60066), + (24365, 25850, '_exp11/objects/exp11_dun_highhold/crate_full_fs_1_5_scale_dpo', 60066), + (24366, 25851, 'creatures/mounts/duck_mount/duck_mount_white', 60066), + (24367, 25852, 'creatures/mounts/duck_mount/duck_mount_dark', 60066), + (24368, 25853, 'creatures/mounts/duck_mount/duck_mount_yellow', 60066), + (24369, 25854, 'staticobjects/housing_portal_objects/vision_highhold_guildhall01', 60066), + (24370, 25855, 'staticobjects/housing_portal_objects/vision_home_sentinal01', 60066), + (24371, 25856, '_exp12/characters/monsters/parrot_2015/parrot_undead_flying', 60066), + (24372, 25857, 'playerstudio/houseitems/ballroom_mask', 60066), + (24373, 25858, 'playerstudio/houseitems/carnival_mask', 60066), + (24374, 25859, 'playerstudio/houseitems/mask_of_beauty', 60066), + (24375, 25860, '_exp12/characters/tool_users/death_knight_merc/death_knight_merc', 60066), + (24376, 25861, 'accessories/wieldable_items/weapons/exp12/1h_sword/death_knight_merc', 60066), + (24377, 25862, 'accessories/wieldable_items/shields/exp12/death_knight_merc', 60066), + (24378, 25863, 'creatures/mounts/pirate_zepplin/pirate_zepplin_scaled_red', 60066), + (24379, 25864, 'creatures/mounts/meatbeast_mount/meatbeast_flying_mount_female_pink', 60066), + (24380, 25865, 'creatures/mounts/meatbeast_mount/meatbeast_flying_base_npc', 60066), + (24381, 25866, 'playerstudio/houseitems/mask_of_rage', 60066), + (24382, 25867, 'staticobjects/soe_wallet/rumcellar_copperpot', 60066), + (24383, 25868, 'staticobjects/soe_wallet/rumcellar_coppervessel', 60066), + (24384, 25869, 'staticobjects/soe_wallet/rumcellar_pipe01', 60066), + (24385, 25870, 'staticobjects/soe_wallet/rumcellar_pipe02', 60066), + (24386, 25871, 'staticobjects/soe_wallet/rumcellar_pipe03', 60066), + (24387, 25872, 'staticobjects/soe_wallet/rumcellar_pump01_full', 60066), + (24388, 25873, 'staticobjects/soe_wallet/rumcellar_raft01', 60066), + (24389, 25874, 'staticobjects/soe_wallet/rumcellar_scaffold', 60066), + (24390, 25875, 'staticobjects/soe_wallet/rumcellar_tank01', 60066), + (24391, 25876, 'staticobjects/soe_wallet/rumcellar_vat01_full', 60066), + (24392, 25877, '_exp12/characters/tool_users/glouras/glouras', 60066), + (24393, 25878, 'creatures/mounts/meatbeast_mount/meatbeast_flying_base_npc_femal_pink', 60066), + (24394, 25879, 'creatures/mounts/meatbeast_mount/meatbeast_flying_base_npc_femal_purple', 60066), + (24395, 25880, 'creatures/mounts/meatbeast_mount/meatbeast_flying_base_npc_female', 60066), + (24396, 25881, '_exp12/characters/tool_users/glouras/glouras_queen', 60066), + (24397, 25882, 'playerstudio/houseitems/clothesline_unmentionables01', 60066), + (24398, 25883, 'playerstudio/houseitems/clothesline_unmentionables02', 60066), + (24399, 25884, '_exp12/characters/tool_users/dwarf_grey/dwarf_male_grey', 60066), + (24400, 25885, '_exp11/objects/exp11_dun_rum_cellar/emit_rum_cellar_explo_vat_dpo', 60066), + (24401, 25886, '_exp11/objects/exp11_dun_rum_cellar/emit_rum_cellar_fuse_10sec_dpo', 60066), + (24402, 25887, '_exp12/characters/tool_users/coldaine_2015/coldaine_male', 60066), + (24403, 25888, 'staticobjects/statues/nekcas_r121_int_chapeloftreason_statue_dpo', 60066), + (24404, 25889, '_exp12/characters/tool_users/death_knight_merc/merc_wing_angel_black', 60066), + (24405, 25890, 'staticobjects/liveevent/halloween/dpo_bedtwin_black_01', 60066), + (24406, 25891, 'staticobjects/liveevent/halloween/dpo_candles_02', 60066), + (24407, 25892, 'staticobjects/liveevent/halloween/dpo_chair_black_01', 60066), + (24408, 25893, 'staticobjects/liveevent/halloween/dpo_couch_black_01', 60066), + (24409, 25894, 'staticobjects/liveevent/halloween/dpo_nekhollow_stump', 60066), + (24410, 25895, 'staticobjects/liveevent/halloween/dpo_oggok_bones_03', 60066), + (24411, 25896, 'staticobjects/liveevent/halloween/dpo_pillow_01', 60066), + (24412, 25897, 'staticobjects/liveevent/halloween/dpo_pillow_round_black', 60066), + (24413, 25898, 'staticobjects/liveevent/halloween/fprt_tombstone_001', 60066), + (24414, 25899, 'staticobjects/liveevent/halloween/fprt_tombstone_002', 60066), + (24415, 25900, 'accessories/npc_wearables/death_knight_merc/death_knight_merc_wings', 60066), + (24416, 21968, 'playerstudio/characters/hair_helm/hair/darkelf_female/ponytailcombo/ponytailcombo', 60006), + (24417, 21969, 'playerstudio/characters/hair_helm/hair/halfelf_female/ponytailcombo/ponytailcombo', 60006), + (24418, 21970, 'playerstudio/characters/hair_helm/hair/highelf_female/ponytailcombo/ponytailcombo', 60006), + (24419, 21971, 'playerstudio/characters/hair_helm/hair/human_female/ponytailcombo/ponytailcombo', 60006), + (24420, 21972, 'playerstudio/characters/hair_helm/hair/woodelf_female/ponytailcombo/ponytailcombo', 60006), + (24421, 21973, '_exp10/characters/tool_users/goblin_highkeep/goblin_highkeep_boss', 60006), + (24422, 21974, '_exp10/characters/tool_users/goblin_highkeep/goblin_highkeep_fighter', 60006), + (24423, 21975, '_exp10/characters/tool_users/goblin_highkeep/goblin_highkeep_heavy', 60006), + (24424, 21976, '_exp10/characters/tool_users/goblin_highkeep/goblin_highkeep_lackey', 60006), + (24425, 21977, 'accessories/wearable_items/_exp10/heroic_armors/leather_beigeblue/chest', 60006), + (24426, 21978, 'accessories/wearable_items/_exp10/heroic_armors/leather_beigeblue/feet', 60006), + (24427, 21979, 'accessories/wearable_items/_exp10/heroic_armors/leather_beigeblue/forearms', 60006), + (24428, 21980, 'accessories/wearable_items/_exp10/heroic_armors/leather_beigeblue/hands', 60006), + (24429, 21981, 'accessories/wearable_items/_exp10/heroic_armors/leather_beigeblue/head', 60006), + (24430, 21982, 'accessories/wearable_items/_exp10/heroic_armors/leather_beigeblue/legs_noskirt', 60006), + (24431, 21983, 'accessories/wearable_items/_exp10/heroic_armors/leather_beigeblue/shoulders', 60006), + (24432, 21984, 'accessories/wearable_items/_exp10/heroic_armors/leather_beigeblue/snapons/belt', 60006), + (24433, 21985, 'accessories/wearable_items/_exp10/heroic_armors/leather_beigeblue/snapons/pauldron_left', 60006), + (24434, 21986, 'accessories/wearable_items/_exp10/heroic_armors/leather_beigeblue/snapons/pauldron_right', 60006), + (24435, 21987, 'accessories/wearable_items/_exp10/heroic_armors/leather_beigepurple/chest', 60006), + (24436, 21988, 'accessories/wearable_items/_exp10/heroic_armors/leather_beigepurple/feet', 60006), + (24437, 21989, 'accessories/wearable_items/_exp10/heroic_armors/leather_beigepurple/forearms', 60006), + (24438, 21990, 'accessories/wearable_items/_exp10/heroic_armors/leather_beigepurple/hands', 60006), + (24439, 21991, 'accessories/wearable_items/_exp10/heroic_armors/leather_beigepurple/head', 60006), + (24440, 21992, 'accessories/wearable_items/_exp10/heroic_armors/leather_beigepurple/legs_noskirt', 60006), + (24441, 21993, 'accessories/wearable_items/_exp10/heroic_armors/leather_beigepurple/shoulders', 60006), + (24442, 21994, 'accessories/wearable_items/_exp10/heroic_armors/leather_beigepurple/snapons/belt', 60006), + (24443, 21995, 'accessories/wearable_items/_exp10/heroic_armors/leather_beigepurple/snapons/pauldron_left', 60006), + (24444, 21996, 'accessories/wearable_items/_exp10/heroic_armors/leather_beigepurple/snapons/pauldron_right', 60006), + (24445, 21997, 'accessories/wearable_items/_exp10/heroic_armors/leather_blue/chest', 60006), + (24446, 21998, 'accessories/wearable_items/_exp10/heroic_armors/leather_blue/feet', 60006), + (24447, 21999, 'accessories/wearable_items/_exp10/heroic_armors/leather_blue/forearms', 60006), + (24448, 22000, 'accessories/wearable_items/_exp10/heroic_armors/leather_blue/hands', 60006), + (24449, 22001, 'accessories/wearable_items/_exp10/heroic_armors/leather_blue/head', 60006), + (24450, 22002, 'accessories/wearable_items/_exp10/heroic_armors/leather_blue/legs_noskirt', 60006), + (24451, 22003, 'accessories/wearable_items/_exp10/heroic_armors/leather_blue/shoulders', 60006), + (24452, 22004, 'accessories/wearable_items/_exp10/heroic_armors/leather_blue/snapons/belt', 60006), + (24453, 22005, 'accessories/wearable_items/_exp10/heroic_armors/leather_blue/snapons/pauldron_left', 60006), + (24454, 22006, 'accessories/wearable_items/_exp10/heroic_armors/leather_blue/snapons/pauldron_right', 60006), + (24455, 22007, 'accessories/wearable_items/_exp10/heroic_armors/leather_greenyellow/chest', 60006), + (24456, 22008, 'accessories/wearable_items/_exp10/heroic_armors/leather_greenyellow/feet', 60006), + (24457, 22009, 'accessories/wearable_items/_exp10/heroic_armors/leather_greenyellow/forearms', 60006), + (24458, 22010, 'accessories/wearable_items/_exp10/heroic_armors/leather_greenyellow/hands', 60006), + (24459, 22011, 'accessories/wearable_items/_exp10/heroic_armors/leather_greenyellow/head', 60006), + (24460, 22012, 'accessories/wearable_items/_exp10/heroic_armors/leather_greenyellow/legs_noskirt', 60006), + (24461, 22013, 'accessories/wearable_items/_exp10/heroic_armors/leather_greenyellow/shoulders', 60006), + (24462, 22014, 'accessories/wearable_items/_exp10/heroic_armors/leather_greenyellow/snapons/belt', 60006), + (24463, 22015, 'accessories/wearable_items/_exp10/heroic_armors/leather_greenyellow/snapons/pauldron_left', 60006), + (24464, 22016, 'accessories/wearable_items/_exp10/heroic_armors/leather_greenyellow/snapons/pauldron_right', 60006), + (24465, 22017, 'accessories/wearable_items/_exp10/heroic_armors/leather_redblue/chest', 60006), + (24466, 22018, 'accessories/wearable_items/_exp10/heroic_armors/leather_redblue/feet', 60006), + (24467, 22019, 'accessories/wearable_items/_exp10/heroic_armors/leather_redblue/forearms', 60006), + (24468, 22020, 'accessories/wearable_items/_exp10/heroic_armors/leather_redblue/hands', 60006), + (24469, 22021, 'accessories/wearable_items/_exp10/heroic_armors/leather_redblue/head', 60006), + (24470, 22022, 'accessories/wearable_items/_exp10/heroic_armors/leather_redblue/legs_noskirt', 60006), + (24471, 22023, 'accessories/wearable_items/_exp10/heroic_armors/leather_redblue/shoulders', 60006), + (24472, 22024, 'accessories/wearable_items/_exp10/heroic_armors/leather_redblue/snapons/belt', 60006), + (24473, 22025, 'accessories/wearable_items/_exp10/heroic_armors/leather_redblue/snapons/pauldron_left', 60006), + (24474, 22026, 'accessories/wearable_items/_exp10/heroic_armors/leather_redblue/snapons/pauldron_right', 60006), + (24475, 22027, 'accessories/wearable_items/_exp10/heroic_armors/leather_shadowred/chest', 60006), + (24476, 22028, 'accessories/wearable_items/_exp10/heroic_armors/leather_shadowred/feet', 60006), + (24477, 22029, 'accessories/wearable_items/_exp10/heroic_armors/leather_shadowred/forearms', 60006), + (24478, 22030, 'accessories/wearable_items/_exp10/heroic_armors/leather_shadowred/hands', 60006), + (24479, 22031, 'accessories/wearable_items/_exp10/heroic_armors/leather_shadowred/head', 60006), + (24480, 22032, 'accessories/wearable_items/_exp10/heroic_armors/leather_shadowred/legs_noskirt', 60006), + (24481, 22033, 'accessories/wearable_items/_exp10/heroic_armors/leather_shadowred/shoulders', 60006), + (24482, 22034, 'accessories/wearable_items/_exp10/heroic_armors/leather_shadowred/snapons/belt', 60006), + (24483, 22035, 'accessories/wearable_items/_exp10/heroic_armors/leather_shadowred/snapons/pauldron_left', 60006), + (24484, 22036, 'accessories/wearable_items/_exp10/heroic_armors/leather_shadowred/snapons/pauldron_right', 60006), + (24485, 22037, '_exp10/characters/monsters/dragon_ethernere/charayan_ethernere', 60006), + (24486, 22038, '_exp10/characters/monsters/dragon_ethernere/darathar_ethernere', 60006), + (24487, 22039, '_exp10/characters/monsters/dragon_ethernere/fraka_dar_ethernere', 60006), + (24488, 22040, '_exp10/characters/monsters/dragon_ethernere/harla_dar_ethernere', 60006), + (24489, 22041, '_exp10/characters/monsters/dragon_ethernere/jortreva_ethernere', 60006), + (24490, 22042, '_exp10/characters/monsters/dragon_ethernere/lord_vyemm_ethernere', 60006), + (24491, 22043, '_exp10/characters/monsters/dragon_ethernere/lord_yelinak_ethernere', 60006), + (24492, 22044, '_exp10/characters/monsters/dragon_ethernere/wuoshi_ethernere', 60006), + (24493, 22045, 'playerstudio/characters/weapons/1h_pierce/darkelf_dagger/darkelf_dagger', 60006), + (24494, 22046, '_exp10/characters/tool_users/bixie/bixie_female_base', 60006), + (24495, 22047, '_exp10/characters/tool_users/bixie/bixie_female_boss', 60006), + (24496, 22048, '_exp10/characters/tool_users/bixie/bixie_female_heavy', 60006), + (24497, 22049, '_exp10/characters/tool_users/bixie/bixie_female_mage', 60006), + (24498, 22050, '_exp10/characters/tool_users/bixie/bixie_female_priest', 60006), + (24499, 22051, '_exp10/characters/tool_users/bixie/bixie_male_base', 60006), + (24500, 22052, '_exp10/characters/tool_users/bixie/bixie_male_boss', 60006), + (24501, 22053, '_exp10/characters/tool_users/bixie/bixie_male_heavy', 60006), + (24502, 22054, '_exp10/characters/tool_users/bixie/bixie_male_mage', 60006), + (24503, 22055, '_exp10/characters/tool_users/bixie/bixie_male_priest', 60006), + (24504, 22056, '_exp10/objects/shissartemple_runeringfx_dpo', 60006), + (24505, 22057, '_exp10/objects/shissartemple_runestream01fx_dpo', 60006), + (24506, 22058, '_exp10/characters/monsters/drake_ethernere/drakota_black_ethernere', 60006), + (24507, 22059, '_exp10/characters/monsters/drake_ethernere/drakota_blue_ethernere', 60006), + (24508, 22060, '_exp10/characters/monsters/drake_ethernere/drakota_ethernere', 60006), + (24509, 22061, '_exp09/characters/monsters/ethereal_construct/ethereal_construct_gold_yellow', 60006), + (24510, 22062, '_exp10/characters/monsters/dragon_red/dragon_red', 60006), + (24511, 22063, '_exp10/characters/monsters/dragon_telkorenar/telkorenar', 60006), + (24512, 22064, 'creatures/pets/truespirit_healing_rift', 60006), + (24513, 22065, '_exp10/characters/monsters/dragon_horde/dragon_horde', 60006), + (24514, 22066, 'accessories/wearable_items/_exp10/heroic_armors/chain-scale_bluebrown/chest', 60006), + (24515, 22067, 'accessories/wearable_items/_exp10/heroic_armors/chain-scale_bluebrown/feet', 60006), + (24516, 22068, 'accessories/wearable_items/_exp10/heroic_armors/chain-scale_bluebrown/forearms', 60006), + (24517, 22069, 'accessories/wearable_items/_exp10/heroic_armors/chain-scale_bluebrown/hands', 60006), + (24518, 22070, 'accessories/wearable_items/_exp10/heroic_armors/chain-scale_bluebrown/head', 60006), + (24519, 22071, 'accessories/wearable_items/_exp10/heroic_armors/chain-scale_bluebrown/head_epic', 60006), + (24520, 22072, 'accessories/wearable_items/_exp10/heroic_armors/chain-scale_bluebrown/legs', 60006), + (24521, 22073, 'accessories/wearable_items/_exp10/heroic_armors/chain-scale_bluebrown/legs_noskirt', 60006), + (24522, 22074, 'accessories/wearable_items/_exp10/heroic_armors/chain-scale_bluebrown/shoulders', 60006), + (24523, 22075, 'accessories/wearable_items/_exp10/heroic_armors/chain-scale_bluebrown/shoulders_pauldron_left', 60006), + (24524, 22076, 'accessories/wearable_items/_exp10/heroic_armors/chain-scale_bluebrown/shoulders_pauldron_right', 60006), + (24525, 22077, 'accessories/wearable_items/_exp10/heroic_armors/chain-scale_bluebrown/skirt', 60006), + (24526, 22078, 'accessories/wearable_items/_exp10/heroic_armors/chain-scale_bluegold/chest', 60006), + (24527, 22079, 'accessories/wearable_items/_exp10/heroic_armors/chain-scale_bluegold/feet', 60006), + (24528, 22080, 'accessories/wearable_items/_exp10/heroic_armors/chain-scale_bluegold/forearms', 60006), + (24529, 22081, 'accessories/wearable_items/_exp10/heroic_armors/chain-scale_bluegold/hands', 60006), + (24530, 22082, 'accessories/wearable_items/_exp10/heroic_armors/chain-scale_bluegold/head', 60006), + (24531, 22083, 'accessories/wearable_items/_exp10/heroic_armors/chain-scale_bluegold/head_epic', 60006), + (24532, 22084, 'accessories/wearable_items/_exp10/heroic_armors/chain-scale_bluegold/legs', 60006), + (24533, 22085, 'accessories/wearable_items/_exp10/heroic_armors/chain-scale_bluegold/legs_noskirt', 60006), + (24534, 22086, 'accessories/wearable_items/_exp10/heroic_armors/chain-scale_bluegold/shoulders', 60006), + (24535, 22087, 'accessories/wearable_items/_exp10/heroic_armors/chain-scale_bluegold/shoulders_pauldron_left', 60006), + (24536, 22088, 'accessories/wearable_items/_exp10/heroic_armors/chain-scale_bluegold/shoulders_pauldron_right', 60006), + (24537, 22089, 'accessories/wearable_items/_exp10/heroic_armors/chain-scale_bluegold/skirt', 60006), + (24538, 22090, 'accessories/wearable_items/_exp10/heroic_armors/chain-scale_grenbrown/chest', 60006), + (24539, 22091, 'accessories/wearable_items/_exp10/heroic_armors/chain-scale_grenbrown/feet', 60006), + (24540, 22092, 'accessories/wearable_items/_exp10/heroic_armors/chain-scale_grenbrown/forearms', 60006), + (24541, 22093, 'accessories/wearable_items/_exp10/heroic_armors/chain-scale_grenbrown/hands', 60006), + (24542, 22094, 'accessories/wearable_items/_exp10/heroic_armors/chain-scale_grenbrown/head', 60006), + (24543, 22095, 'accessories/wearable_items/_exp10/heroic_armors/chain-scale_grenbrown/head_epic', 60006), + (24544, 22096, 'accessories/wearable_items/_exp10/heroic_armors/chain-scale_grenbrown/legs', 60006), + (24545, 22097, 'accessories/wearable_items/_exp10/heroic_armors/chain-scale_grenbrown/legs_noskirt', 60006), + (24546, 22098, 'accessories/wearable_items/_exp10/heroic_armors/chain-scale_grenbrown/shoulders', 60006), + (24547, 22099, 'accessories/wearable_items/_exp10/heroic_armors/chain-scale_grenbrown/shoulders_pauldron_left', 60006), + (24548, 22100, 'accessories/wearable_items/_exp10/heroic_armors/chain-scale_grenbrown/shoulders_pauldron_right', 60006), + (24549, 22101, 'accessories/wearable_items/_exp10/heroic_armors/chain-scale_grenbrown/skirt', 60006), + (24550, 22102, 'accessories/wearable_items/_exp10/heroic_armors/chain-scale_orangebrown/chest', 60006), + (24551, 22103, 'accessories/wearable_items/_exp10/heroic_armors/chain-scale_orangebrown/feet', 60006), + (24552, 22104, 'accessories/wearable_items/_exp10/heroic_armors/chain-scale_orangebrown/forearms', 60006), + (24553, 22105, 'accessories/wearable_items/_exp10/heroic_armors/chain-scale_orangebrown/hands', 60006), + (24554, 22106, 'accessories/wearable_items/_exp10/heroic_armors/chain-scale_orangebrown/head', 60006), + (24555, 22107, 'accessories/wearable_items/_exp10/heroic_armors/chain-scale_orangebrown/head_epic', 60006), + (24556, 22108, 'accessories/wearable_items/_exp10/heroic_armors/chain-scale_orangebrown/legs', 60006), + (24557, 22109, 'accessories/wearable_items/_exp10/heroic_armors/chain-scale_orangebrown/legs_noskirt', 60006), + (24558, 22110, 'accessories/wearable_items/_exp10/heroic_armors/chain-scale_orangebrown/shoulders', 60006), + (24559, 22111, 'accessories/wearable_items/_exp10/heroic_armors/chain-scale_orangebrown/shoulders_pauldron_left', 60006), + (24560, 22112, 'accessories/wearable_items/_exp10/heroic_armors/chain-scale_orangebrown/shoulders_pauldron_right', 60006), + (24561, 22113, 'accessories/wearable_items/_exp10/heroic_armors/chain-scale_orangebrown/skirt', 60006), + (24562, 22114, 'accessories/wearable_items/_exp10/heroic_armors/chain-scale_redgold/chest', 60006), + (24563, 22115, 'accessories/wearable_items/_exp10/heroic_armors/chain-scale_redgold/feet', 60006), + (24564, 22116, 'accessories/wearable_items/_exp10/heroic_armors/chain-scale_redgold/forearms', 60006), + (24565, 22117, 'accessories/wearable_items/_exp10/heroic_armors/chain-scale_redgold/hands', 60006), + (24566, 22118, 'accessories/wearable_items/_exp10/heroic_armors/chain-scale_redgold/head', 60006), + (24567, 22119, 'accessories/wearable_items/_exp10/heroic_armors/chain-scale_redgold/head_epic', 60006), + (24568, 22120, 'accessories/wearable_items/_exp10/heroic_armors/chain-scale_redgold/legs', 60006), + (24569, 22121, 'accessories/wearable_items/_exp10/heroic_armors/chain-scale_redgold/legs_noskirt', 60006), + (24570, 22122, 'accessories/wearable_items/_exp10/heroic_armors/chain-scale_redgold/shoulders', 60006), + (24571, 22123, 'accessories/wearable_items/_exp10/heroic_armors/chain-scale_redgold/shoulders_pauldron_left', 60006), + (24572, 22124, 'accessories/wearable_items/_exp10/heroic_armors/chain-scale_redgold/shoulders_pauldron_right', 60006), + (24573, 22125, 'accessories/wearable_items/_exp10/heroic_armors/chain-scale_redgold/skirt', 60006), + (24574, 22126, 'accessories/wearable_items/_exp10/heroic_armors/chain-scale_redgray/chest', 60006), + (24575, 22127, 'accessories/wearable_items/_exp10/heroic_armors/chain-scale_redgray/feet', 60006), + (24576, 22128, 'accessories/wearable_items/_exp10/heroic_armors/chain-scale_redgray/forearms', 60006), + (24577, 22129, 'accessories/wearable_items/_exp10/heroic_armors/chain-scale_redgray/hands', 60006), + (24578, 22130, 'accessories/wearable_items/_exp10/heroic_armors/chain-scale_redgray/head', 60006), + (24579, 22131, 'accessories/wearable_items/_exp10/heroic_armors/chain-scale_redgray/head_epic', 60006), + (24580, 22132, 'accessories/wearable_items/_exp10/heroic_armors/chain-scale_redgray/legs', 60006), + (24581, 22133, 'accessories/wearable_items/_exp10/heroic_armors/chain-scale_redgray/legs_noskirt', 60006), + (24582, 22134, 'accessories/wearable_items/_exp10/heroic_armors/chain-scale_redgray/shoulders', 60006), + (24583, 22135, 'accessories/wearable_items/_exp10/heroic_armors/chain-scale_redgray/shoulders_pauldron_left', 60006), + (24584, 22136, 'accessories/wearable_items/_exp10/heroic_armors/chain-scale_redgray/shoulders_pauldron_right', 60006), + (24585, 22137, 'accessories/wearable_items/_exp10/heroic_armors/chain-scale_redgray/skirt', 60006), + (24586, 22138, 'accessories/wearable_items/halloween_masks/flaming_pumpkin/head_blue', 60006), + (24587, 22139, 'accessories/wearable_items/halloween_masks/flaming_pumpkin/head_dark', 60006), + (24588, 22140, 'accessories/wearable_items/halloween_masks/flaming_pumpkin/head_green', 60006), + (24589, 22141, 'accessories/wearable_items/halloween_masks/scarecrow_mask/head_glow', 60006), + (24590, 22142, 'accessories/wearable_items/halloween_masks/scarecrow_mask/head_glow_blue', 60006), + (24591, 22143, 'accessories/wearable_items/halloween_masks/scarecrow_mask/head_glow_green', 60006), + (24592, 22144, 'accessories/wearable_items/_exp10/heroic_armors/gi/head', 60006), + (24593, 22145, 'accessories/wearable_items/_exp10/heroic_armors/gi_monk/head', 60006), + (24594, 22146, 'accessories/wearable_items/_exp10/heroic_armors/chain-scale_greengray/chest', 60006), + (24595, 22147, 'accessories/wearable_items/_exp10/heroic_armors/chain-scale_greengray/feet', 60006), + (24596, 22148, 'accessories/wearable_items/_exp10/heroic_armors/chain-scale_greengray/forearms', 60006), + (24597, 22149, 'accessories/wearable_items/_exp10/heroic_armors/chain-scale_greengray/hands', 60006), + (24598, 22150, 'accessories/wearable_items/_exp10/heroic_armors/chain-scale_greengray/head', 60006), + (24599, 22151, 'accessories/wearable_items/_exp10/heroic_armors/chain-scale_greengray/head_epic', 60006), + (24600, 22152, 'accessories/wearable_items/_exp10/heroic_armors/chain-scale_greengray/legs', 60006), + (24601, 22153, 'accessories/wearable_items/_exp10/heroic_armors/chain-scale_greengray/legs_noskirt', 60006), + (24602, 22154, 'accessories/wearable_items/_exp10/heroic_armors/chain-scale_greengray/shoulders', 60006), + (24603, 22155, 'accessories/wearable_items/_exp10/heroic_armors/chain-scale_greengray/shoulders_pauldron_left', 60006), + (24604, 22156, 'accessories/wearable_items/_exp10/heroic_armors/chain-scale_greengray/shoulders_pauldron_right', 60006), + (24605, 22157, 'accessories/wearable_items/_exp10/heroic_armors/chain-scale_greengray/skirt', 60006), + (24606, 22158, 'accessories/wearable_items/_exp10/heroic_armors/chain-scale_purplebrown/chest', 60006), + (24607, 22159, 'accessories/wearable_items/_exp10/heroic_armors/chain-scale_purplebrown/feet', 60006), + (24608, 22160, 'accessories/wearable_items/_exp10/heroic_armors/chain-scale_purplebrown/forearms', 60006), + (24609, 22161, 'accessories/wearable_items/_exp10/heroic_armors/chain-scale_purplebrown/hands', 60006), + (24610, 22162, 'accessories/wearable_items/_exp10/heroic_armors/chain-scale_purplebrown/head', 60006), + (24611, 22163, 'accessories/wearable_items/_exp10/heroic_armors/chain-scale_purplebrown/head_epic', 60006), + (24612, 22164, 'accessories/wearable_items/_exp10/heroic_armors/chain-scale_purplebrown/legs', 60006), + (24613, 22165, 'accessories/wearable_items/_exp10/heroic_armors/chain-scale_purplebrown/legs_noskirt', 60006), + (24614, 22166, 'accessories/wearable_items/_exp10/heroic_armors/chain-scale_purplebrown/shoulders', 60006), + (24615, 22167, 'accessories/wearable_items/_exp10/heroic_armors/chain-scale_purplebrown/shoulders_pauldron_left', 60006), + (24616, 22168, 'accessories/wearable_items/_exp10/heroic_armors/chain-scale_purplebrown/shoulders_pauldron_right', 60006), + (24617, 22169, 'accessories/wearable_items/_exp10/heroic_armors/chain-scale_purplebrown/skirt', 60006), + (24618, 22170, '_exp10/characters/monsters/dragon_sontalak/sontalak', 60006), + (24619, 22171, '_exp10/characters/monsters/shissar_cobra/shissar_cobra', 60006), + (24620, 22172, 'creatures/mounts/sokokar_mount/sokokar_mount_02', 60006), + (24621, 22173, 'creatures/mounts/sokokar_mount/sokokar_mount_03', 60006), + (24622, 22174, 'creatures/mounts/sokokar_mount/sokokar_mount_04', 60006), + (24623, 22175, 'staticobjects/halloween/dpo_ground_portal_rift', 60006), + (24624, 22176, 'staticobjects/halloween/dpo_notd_bones01_flies', 60006), + (24625, 22177, 'staticobjects/halloween/dpo_notd_bones02_flies', 60006), + (24626, 22178, 'staticobjects/halloween/dpo_pitchfork_leaves_cordon', 60006), + (24627, 22179, 'staticobjects/halloween/dpo_skull_leaves_garland', 60006), + (24628, 22180, 'staticobjects/crystals/crystal_pillar', 60006), + (24629, 22181, '_exp10/objects/shissar_temple_book_01_dpo', 60006), + (24630, 22182, '_exp10/objects/shissar_temple_book_02_dpo', 60006), + (24631, 22183, '_exp10/objects/shissar_temple_book_03_dpo', 60006), + (24632, 22184, '_exp10/objects/shissar_temple_book_04_dpo', 60006), + (24633, 22185, '_exp10/characters/monsters/dragon_lord_feshlak/lord_feshlak', 60006), + (24634, 22186, '_exp09/characters/monsters/ethereal_construct/ethereal_construct_gold_white', 60006), + (24635, 22187, '_exp06/characters/monsters/vasty_guardian/vasty_guardian_nexus', 60006), + (24636, 22188, '_exp06/characters/monsters/vasty_guardian/vasty_guardian_nexus_gold', 60006), + (24637, 22189, 'staticobjects/_exp08/cobalt_scar/cs_othmir_tear_veeshan03', 60006), + (24638, 22190, '_exp10/objects/eru_nex_center_gem_dpo', 60006), + (24639, 22191, '_exp10/objects/eru_nex_room03_switch01_dpo', 60006), + (24640, 22192, '_exp10/characters/tool_users/shissar_statue/shissar_statue_base', 60006), + (24641, 22193, '_exp10/objects/nex_pipe_room01_energy_tube_dpo', 60006), + (24642, 22194, '_exp10/objects/nex_pipe_room02_energy_tube_dpo', 60006), + (24643, 22195, '_exp10/objects/nex_pipe_room03_energy_tube_dpo', 60006), + (24644, 22196, 'accessories/wearable_items/_exp10/heroic_armors/leather-chain_inquisitor/snapons/belt', 60006), + (24645, 22197, 'accessories/wearable_items/_exp10/heroic_armors/leather-chain_inquisitor/snapons/forearm_left', 60006), + (24646, 22198, 'accessories/wearable_items/_exp10/heroic_armors/leather-chain_inquisitor/snapons/forearm_right', 60006), + (24647, 22199, 'accessories/wearable_items/_exp10/heroic_armors/leather-chain_inquisitor/snapons/head_epic', 60006), + (24648, 22200, 'accessories/wearable_items/_exp10/heroic_armors/leather-chain_inquisitor/snapons/pauldron_guard_left', 60006), + (24649, 22201, 'accessories/wearable_items/_exp10/heroic_armors/leather-chain_inquisitor/snapons/pauldron_left', 60006), + (24650, 22202, 'accessories/wearable_items/_exp10/heroic_armors/leather-chain_inquisitor/snapons/pauldron_right', 60006), + (24651, 22203, 'accessories/wearable_items/_exp10/heroic_armors/leather-chain_inquisitor/snapons/shin_left', 60006), + (24652, 22204, 'accessories/wearable_items/_exp10/heroic_armors/leather-chain_inquisitor/snapons/shin_right', 60006), + (24653, 22205, 'accessories/wearable_items/_exp10/heroic_armors/leather-chain_inquisitor/chest', 60006), + (24654, 22206, 'accessories/wearable_items/_exp10/heroic_armors/leather-chain_inquisitor/feet_epic', 60006), + (24655, 22207, 'accessories/wearable_items/_exp10/heroic_armors/leather-chain_inquisitor/forearms', 60006), + (24656, 22208, 'accessories/wearable_items/_exp10/heroic_armors/leather-chain_inquisitor/hands_epic', 60006), + (24657, 22209, 'accessories/wearable_items/_exp10/heroic_armors/leather-chain_inquisitor/head', 60006), + (24658, 22210, 'accessories/wearable_items/_exp10/heroic_armors/leather-chain_inquisitor/head_epic', 60006), + (24659, 22211, 'accessories/wearable_items/_exp10/heroic_armors/leather-chain_inquisitor/legs', 60006), + (24660, 22212, 'accessories/wearable_items/_exp10/heroic_armors/leather-chain_inquisitor/shoulders_epic', 60006), + (24661, 22213, 'accessories/wearable_items/_exp10/heroic_armors/leather-chain_inquisitor/skirt', 60006), + (24662, 22214, 'accessories/wearable_items/_exp10/heroic_armors/leather-chain_templar/snapons/belt', 60006), + (24663, 22215, 'accessories/wearable_items/_exp10/heroic_armors/leather-chain_templar/snapons/forearm_left', 60006), + (24664, 22216, 'accessories/wearable_items/_exp10/heroic_armors/leather-chain_templar/snapons/forearm_right', 60006), + (24665, 22217, 'accessories/wearable_items/_exp10/heroic_armors/leather-chain_templar/snapons/head_epic', 60006), + (24666, 22218, 'accessories/wearable_items/_exp10/heroic_armors/leather-chain_templar/snapons/pauldron_guard_left', 60006), + (24667, 22219, 'accessories/wearable_items/_exp10/heroic_armors/leather-chain_templar/snapons/pauldron_left', 60006), + (24668, 22220, 'accessories/wearable_items/_exp10/heroic_armors/leather-chain_templar/snapons/pauldron_right', 60006), + (24669, 22221, 'accessories/wearable_items/_exp10/heroic_armors/leather-chain_templar/snapons/shin_left', 60006), + (24670, 22222, 'accessories/wearable_items/_exp10/heroic_armors/leather-chain_templar/snapons/shin_right', 60006), + (24671, 22223, 'accessories/wearable_items/_exp10/heroic_armors/leather-chain_templar/chest', 60006), + (24672, 22224, 'accessories/wearable_items/_exp10/heroic_armors/leather-chain_templar/feet_epic', 60006), + (24673, 22225, 'accessories/wearable_items/_exp10/heroic_armors/leather-chain_templar/forearms', 60006), + (24674, 22226, 'accessories/wearable_items/_exp10/heroic_armors/leather-chain_templar/hands_epic', 60006), + (24675, 22227, 'accessories/wearable_items/_exp10/heroic_armors/leather-chain_templar/head', 60006), + (24676, 22228, 'accessories/wearable_items/_exp10/heroic_armors/leather-chain_templar/head_epic', 60006), + (24677, 22229, 'accessories/wearable_items/_exp10/heroic_armors/leather-chain_templar/legs', 60006), + (24678, 22230, 'accessories/wearable_items/_exp10/heroic_armors/leather-chain_templar/shoulders_epic', 60006), + (24679, 22231, 'accessories/wearable_items/_exp10/heroic_armors/leather-chain_templar/skirt', 60006), + (24680, 22232, '_exp10/objects/tov_teleporter', 60006), + (24681, 22233, '_exp10/objects/eru_nex_switch01_fx_rotating_dpo', 60006), + (24682, 22234, '_exp10/objects/eru_nex_tear_veeshan01_rotating_dpo', 60006), + (24683, 22235, '_exp10/objects/eru_nex_tear_veeshan02_rotating_dpo', 60006), + (24684, 22236, '_exp10/objects/eru_nex_tear_veeshan03_rotating_dpo', 60006), + (24685, 22237, '_exp10/characters/monsters/drake_boss/drake_boss', 60006), + (24686, 22238, 'creatures/mounts/pegasus_mount/pegasus_mount_heroic_ice', 60006), + (24687, 22239, 'accessories/wieldable_items/weapons/exp10/1h_crush/club_tenderizer_bluebronze', 60006), + (24688, 22240, 'accessories/wieldable_items/weapons/exp10/1h_crush/club_tenderizer_cinderslam', 60006), + (24689, 22241, 'accessories/wieldable_items/weapons/exp10/1h_crush/club_tenderizer_forestrage', 60006), + (24690, 22242, 'accessories/wieldable_items/weapons/exp10/1h_crush/club_tenderizer_nightcrusher', 60006), + (24691, 22243, 'accessories/wieldable_items/weapons/exp10/1h_crush/hammer_bellringer_flamepounder', 60006), + (24692, 22244, 'accessories/wieldable_items/weapons/exp10/1h_crush/hammer_bellringer_greensteel', 60006), + (24693, 22245, 'accessories/wieldable_items/weapons/exp10/1h_crush/hammer_bellringer_redgold', 60006), + (24694, 22246, 'accessories/wieldable_items/weapons/exp10/1h_crush/hammer_bellringer_shadowmarch', 60006), + (24695, 22247, 'accessories/wieldable_items/weapons/exp10/1h_crush/mace_opulent_bluesteel', 60006), + (24696, 22248, 'accessories/wieldable_items/weapons/exp10/1h_crush/mace_opulent_natureswrath', 60006), + (24697, 22249, 'accessories/wieldable_items/weapons/exp10/1h_crush/mace_opulent_posessed', 60006), + (24698, 22250, 'accessories/wieldable_items/weapons/exp10/1h_crush/mace_opulent_redgold', 60006), + (24699, 22251, 'accessories/wieldable_items/weapons/exp10/1h_crush/mace_opulent_redsteel', 60006), + (24700, 22252, 'accessories/wieldable_items/weapons/exp10/1h_sword/axe_doublethreat_bluesteel', 60006), + (24701, 22253, 'accessories/wieldable_items/weapons/exp10/1h_sword/axe_doublethreat_branchbane', 60006), + (24702, 22254, 'accessories/wieldable_items/weapons/exp10/1h_sword/axe_doublethreat_flametongue', 60006), + (24703, 22255, 'accessories/wieldable_items/weapons/exp10/1h_sword/axe_doublethreat_redgold', 60006), + (24704, 22256, 'accessories/wieldable_items/weapons/exp10/1h_sword/axe_doublethreat_shadowblight', 60006), + (24705, 22257, 'accessories/wieldable_items/weapons/exp10/2h_crush/hammer_tunnelforger_basic', 60006), + (24706, 22258, 'accessories/wieldable_items/weapons/exp10/2h_crush/hammer_tunnelforger_coldsteel', 60006), + (24707, 22259, 'accessories/wieldable_items/weapons/exp10/2h_crush/hammer_tunnelforger_dreamwrought', 60006), + (24708, 22260, 'accessories/wieldable_items/weapons/exp10/2h_crush/hammer_tunnelforger_pyresmasher', 60006), + (24709, 22261, 'accessories/wieldable_items/weapons/exp10/bow/longbow_fighter', 60006), + (24710, 22262, 'accessories/wieldable_items/weapons/exp10/bow/longbow_fighter_opulent', 60006), + (24711, 22263, 'accessories/wieldable_items/weapons/exp10/bow/longbow_fighter_sanguine', 60006), + (24712, 22264, 'accessories/wieldable_items/weapons/exp10/bow/longbow_scout_blue', 60006), + (24713, 22265, 'accessories/wieldable_items/weapons/exp10/bow/longbow_scout_green', 60006), + (24714, 22266, 'accessories/wieldable_items/weapons/exp10/bow/longbow_scout_nightmare', 60006), + (24715, 22267, 'accessories/wieldable_items/weapons/exp10/bow/longbow_scout_red', 60006), + (24716, 22268, 'accessories/wieldable_items/weapons/exp10/fist/fist_bolted_bluesilver', 60006), + (24717, 22269, 'accessories/wieldable_items/weapons/exp10/fist/fist_bolted_coldsteel', 60006), + (24718, 22270, 'accessories/wieldable_items/weapons/exp10/fist/fist_bolted_golden', 60006), + (24719, 22271, 'accessories/wieldable_items/weapons/exp10/fist/fist_bolted_redgold', 60006), + (24720, 22272, 'accessories/wieldable_items/weapons/exp10/fist/fist_punchblade_cloudslicer', 60006), + (24721, 22273, 'accessories/wieldable_items/weapons/exp10/fist/fist_punchblade_natureblade', 60006), + (24722, 22274, 'accessories/wieldable_items/weapons/exp10/fist/fist_punchblade_redgold', 60006), + (24723, 22275, 'accessories/wieldable_items/weapons/exp10/fist/fist_punchblade_voidshard', 60006), + (24724, 22276, 'accessories/wieldable_items/weapons/exp10/staff/staff_monk_bladed_deathly', 60006), + (24725, 22277, 'accessories/wieldable_items/weapons/exp10/staff/staff_monk_bladed_energetic', 60006), + (24726, 22278, 'accessories/wieldable_items/weapons/exp10/staff/staff_monk_bladed_golden', 60006), + (24727, 22279, 'accessories/wieldable_items/weapons/exp10/staff/staff_monk_bladed_redgold', 60006), + (24728, 22280, 'accessories/wieldable_items/weapons/exp08/1h_sword/exp08_sword_nature_gem_green', 60006), + (24729, 22281, 'accessories/wieldable_items/weapons/exp08/1h_sword/exp08_sword_nature_gem_purple', 60006), + (24730, 22282, 'accessories/wieldable_items/weapons/exp08/1h_sword/exp08_sword_nature_gem_purple_teal', 60006), + (24731, 22283, '_exp05/monsters/elemental_wave_bixie_wax', 60006), + (24732, 22284, '_exp09/characters/monsters/mud_monster/mud_monster_bixie_wax', 60006), + (24733, 22285, '_exp10/objects/shissartemple_collision01_blocker_01_dpo', 60006), + (24734, 22286, 'staticobjects/eig/eig_harvest_location_dark_crack_sky', 60006), + (24735, 22287, 'staticobjects/_exp10/dragon_realm_speed_boost_cloud', 60006), + (24736, 22288, 'accessories/wearable_items/_exp10/dragon_armor/vanguard/chest', 60006), + (24737, 22289, 'accessories/wearable_items/_exp10/dragon_armor/vanguard/feet', 60006), + (24738, 22290, 'accessories/wearable_items/_exp10/dragon_armor/vanguard/forearms', 60006), + (24739, 22291, 'accessories/wearable_items/_exp10/dragon_armor/vanguard/hands', 60006), + (24740, 22292, 'accessories/wearable_items/_exp10/dragon_armor/vanguard/head', 60006), + (24741, 22293, 'accessories/wearable_items/_exp10/dragon_armor/vanguard/head_epic', 60006), + (24742, 22294, 'accessories/wearable_items/_exp10/dragon_armor/vanguard/legs', 60006), + (24743, 22295, 'accessories/wearable_items/_exp10/dragon_armor/vanguard/legs_epic', 60006), + (24744, 22296, 'accessories/wearable_items/_exp10/dragon_armor/vanguard/legs_noskirt', 60006), + (24745, 22297, 'accessories/wearable_items/_exp10/dragon_armor/vanguard/right', 60006), + (24746, 22298, 'accessories/wearable_items/_exp10/dragon_armor/vanguard/shoulders', 60006), + (24747, 22299, 'accessories/wearable_items/_exp10/dragon_armor/vanguard/shoulders_epic', 60006), + (24748, 22300, 'accessories/wearable_items/_exp10/dragon_armor/vanguard/shoulders_nopauldrons', 60006), + (24749, 22301, 'accessories/wearable_items/_exp10/dragon_armor/vanguard/skirt', 60006), + (24750, 22302, 'accessories/wearable_items/_exp10/dragon_armor/vanguard/snapons/pauldron_left', 60006), + (24751, 22303, 'accessories/wearable_items/_exp10/dragon_armor/vanguard/snapons/pauldron_right', 60006), + (24752, 22304, 'accessories/wearable_items/_exp10/dragon_armor/vanguard/snapons/shin_left', 60006), + (24753, 22305, 'accessories/wearable_items/_exp10/dragon_armor/vanguard/snapons/shin_right', 60006), + (24754, 22306, 'accessories/wearable_items/_exp10/dragon_armor/vanguard/snapons/vanguard_belt', 60006), + (24755, 22307, 'creatures/mounts/griffin_mount/griffin_mount_ethernere', 60006), + (24756, 22308, 'accessories/wieldable_items/weapons/exp10/1h_crush/scepter_wand_bluesilver', 60006), + (24757, 22309, 'accessories/wieldable_items/weapons/exp10/1h_crush/scepter_wand_diseased', 60006), + (24758, 22310, 'accessories/wieldable_items/weapons/exp10/1h_crush/scepter_wand_regal', 60006), + (24759, 22311, 'accessories/wieldable_items/weapons/exp10/1h_crush/scepter_wand_shadowed', 60006), + (24760, 22312, 'accessories/wieldable_items/weapons/exp10/1h_pierce/dagger_mage_basic', 60006), + (24761, 22313, 'accessories/wieldable_items/weapons/exp10/1h_pierce/dagger_mage_flame', 60006), + (24762, 22314, 'accessories/wieldable_items/weapons/exp10/1h_pierce/dagger_mage_forest', 60006), + (24763, 22315, 'accessories/wieldable_items/weapons/exp10/1h_pierce/dagger_mage_shadow', 60006), + (24764, 22316, 'accessories/wieldable_items/weapons/exp10/1h_pierce/dagger_scout_basic', 60006), + (24765, 22317, 'accessories/wieldable_items/weapons/exp10/1h_pierce/dagger_scout_evil', 60006), + (24766, 22318, 'accessories/wieldable_items/weapons/exp10/1h_pierce/dagger_scout_fire', 60006), + (24767, 22319, 'accessories/wieldable_items/weapons/exp10/1h_pierce/dagger_scout_ice', 60006), + (24768, 22320, 'accessories/wieldable_items/weapons/exp10/1h_pierce/dagger_scout_nature', 60006), + (24769, 22321, 'accessories/wieldable_items/weapons/exp10/1h_sword/longsword_basic', 60006), + (24770, 22322, 'accessories/wieldable_items/weapons/exp10/1h_sword/longsword_bluesilver', 60006), + (24771, 22323, 'accessories/wieldable_items/weapons/exp10/1h_sword/longsword_golden', 60006), + (24772, 22324, 'accessories/wieldable_items/weapons/exp10/1h_sword/longsword_necrotic', 60006), + (24773, 22325, 'accessories/wieldable_items/weapons/exp10/1h_sword/longsword_red', 60006), + (24774, 22326, 'accessories/wieldable_items/weapons/exp10/1h_sword/rapier_basic', 60006), + (24775, 22327, 'accessories/wieldable_items/weapons/exp10/1h_sword/rapier_bluesilver', 60006), + (24776, 22328, 'accessories/wieldable_items/weapons/exp10/1h_sword/rapier_haunted', 60006), + (24777, 22329, 'accessories/wieldable_items/weapons/exp10/1h_sword/rapier_redgold', 60006), + (24778, 22330, 'accessories/wieldable_items/weapons/exp10/1h_sword/shortsword_basic', 60006), + (24779, 22331, 'accessories/wieldable_items/weapons/exp10/1h_sword/shortsword_bluesteel', 60006), + (24780, 22332, 'accessories/wieldable_items/weapons/exp10/1h_sword/shortsword_pestillant', 60006), + (24781, 22333, 'accessories/wieldable_items/weapons/exp10/1h_sword/shortsword_redgold', 60006), + (24782, 22334, 'accessories/wieldable_items/weapons/exp10/staff/staff_halberd_basic', 60006), + (24783, 22335, 'accessories/wieldable_items/weapons/exp10/staff/staff_halberd_blue', 60006), + (24784, 22336, 'accessories/wieldable_items/weapons/exp10/staff/staff_halberd_evil', 60006), + (24785, 22337, 'accessories/wieldable_items/weapons/exp10/staff/staff_halberd_golden', 60006), + (24786, 22338, 'accessories/wieldable_items/weapons/exp10/staff/staff_halberd_red', 60006), + (24787, 22339, 'accessories/wieldable_items/weapons/exp10/staff/staff_lance_flame', 60006), + (24788, 22340, 'accessories/wieldable_items/weapons/exp10/staff/staff_lance_ice', 60006), + (24789, 22341, 'accessories/wieldable_items/weapons/exp10/staff/staff_lance_nightmare', 60006), + (24790, 22342, 'accessories/wieldable_items/weapons/exp10/staff/staff_mage_flame', 60006), + (24791, 22343, 'accessories/wieldable_items/weapons/exp10/staff/staff_mage_pestillence', 60006), + (24792, 22344, 'accessories/wieldable_items/weapons/exp10/staff/staff_mage_purplegreen', 60006), + (24793, 22345, 'accessories/wieldable_items/weapons/exp10/staff/staff_mage_velium', 60006), + (24794, 22346, 'playerstudio/characters/shields/tower_round_shields/shield_of_zarkruum/shield_of_zarkruum', 60006), + (24795, 22347, '_exp10/characters/tool_users/aerakyn/aerakyn_male_merc', 60006), + (24796, 22348, 'accessories/wearable_items/_exp10/dragon_armor/gi/chest', 60006), + (24797, 22349, 'accessories/wearable_items/_exp10/dragon_armor/gi/feet', 60006), + (24798, 22350, 'accessories/wearable_items/_exp10/dragon_armor/gi/hands', 60006), + (24799, 22351, 'accessories/wearable_items/_exp10/dragon_armor/gi/pants', 60006), + (24800, 22352, 'accessories/wearable_items/_exp10/dragon_armor/robe/chest', 60006), + (24801, 22353, 'accessories/wearable_items/_exp10/dragon_armor/robe/feet', 60006), + (24802, 22354, 'accessories/wearable_items/_exp10/dragon_armor/robe/hands', 60006), + (24803, 22355, 'accessories/wearable_items/_exp10/dragon_armor/robe/head', 60006), + (24804, 22356, 'accessories/wearable_items/_exp10/dragon_armor/robe/hood', 60006), + (24805, 22357, 'accessories/wearable_items/_exp10/dragon_armor/robe/pants', 60006), + (24806, 22358, 'accessories/wearable_items/_exp10/dragon_armor/robe/skirt', 60006), + (24807, 22359, 'accessories/wieldable_items/shields/exp10/tower_ornate_basic', 60006), + (24808, 22360, 'accessories/wieldable_items/shields/exp10/tower_ornate_evil', 60006), + (24809, 22361, 'accessories/wieldable_items/shields/exp10/tower_ornate_nature', 60006), + (24810, 22362, 'accessories/wieldable_items/shields/exp10/tower_ornate_redgold', 60006), + (24811, 22363, 'accessories/wearable_items/_exp10/dragon_armor/leather/snapons/leather_belt', 60006), + (24812, 22364, 'accessories/wearable_items/_exp10/dragon_armor/leather/snapons/pauldron_left', 60006), + (24813, 22365, 'accessories/wearable_items/_exp10/dragon_armor/leather/chest', 60006), + (24814, 22366, 'accessories/wearable_items/_exp10/dragon_armor/leather/feet', 60006), + (24815, 22367, 'accessories/wearable_items/_exp10/dragon_armor/leather/forearms', 60006), + (24816, 22368, 'accessories/wearable_items/_exp10/dragon_armor/leather/hands', 60006), + (24817, 22369, 'accessories/wearable_items/_exp10/dragon_armor/leather/head', 60006), + (24818, 22370, 'accessories/wearable_items/_exp10/dragon_armor/leather/legs', 60006), + (24819, 22371, 'accessories/wearable_items/_exp10/dragon_armor/leather/legs_epic', 60006), + (24820, 22372, 'accessories/wearable_items/_exp10/dragon_armor/leather/legs_noskirt', 60006), + (24821, 22373, 'accessories/wearable_items/_exp10/dragon_armor/leather/shoulders', 60006), + (24822, 22374, 'accessories/wearable_items/_exp10/dragon_armor/leather/shoulders_epic', 60006), + (24823, 22375, 'accessories/wearable_items/_exp10/dragon_armor/leather/skirt', 60006), + (24824, 22376, 'accessories/channeler_golem/channeler_golem_arms_white', 60006), + (24825, 22377, 'accessories/channeler_golem/channeler_golem_arms01_white', 60006), + (24826, 22378, 'accessories/channeler_golem/channeler_golem_arms02_white', 60006), + (24827, 22379, 'accessories/channeler_golem/channeler_golem_arms03_white', 60006), + (24828, 22380, 'accessories/channeler_golem/channeler_golem_arms04_white', 60006), + (24829, 22381, 'accessories/channeler_golem/channeler_golem_chest00_white', 60006), + (24830, 22382, 'accessories/channeler_golem/channeler_golem_chest01_white', 60006), + (24831, 22383, 'accessories/channeler_golem/channeler_golem_chest02_white', 60006), + (24832, 22384, 'accessories/channeler_golem/channeler_golem_chest03_white', 60006), + (24833, 22385, 'accessories/channeler_golem/channeler_golem_feet_white', 60006), + (24834, 22386, 'accessories/channeler_golem/channeler_golem_feet01_white', 60006), + (24835, 22387, 'accessories/channeler_golem/channeler_golem_feet03_white', 60006), + (24836, 22388, 'accessories/channeler_golem/channeler_golem_feet04_white', 60006), + (24837, 22389, 'accessories/channeler_golem/channeler_golem_head_white', 60006), + (24838, 22390, 'accessories/channeler_golem/channeler_golem_head01_white', 60006), + (24839, 22391, 'accessories/channeler_golem/channeler_golem_head02_white', 60006), + (24840, 22392, 'accessories/channeler_golem/channeler_golem_head03_white', 60006), + (24841, 22393, 'accessories/channeler_golem/channeler_golem_head04_white', 60006), + (24842, 22394, 'accessories/channeler_golem/channeler_golem_shoulder_white', 60006), + (24843, 22395, 'accessories/channeler_golem/channeler_golem_shoulder01_white', 60006), + (24844, 22396, 'accessories/channeler_golem/channeler_golem_shoulder02_white', 60006), + (24845, 22397, 'accessories/channeler_golem/channeler_golem_shoulder03_white', 60006), + (24846, 22398, 'accessories/channeler_golem/channeler_golem_shoulder04_white', 60006), + (24847, 22399, 'accessories/channeler_golem/channeler_golem_thighs01_white', 60006), + (24848, 22400, 'accessories/channeler_golem/channeler_golem_thighs02_white', 60006), + (24849, 22401, 'accessories/channeler_golem/channeler_golem_feet02_white', 60006), + (24850, 22402, 'accessories/wearable_items/_exp10/dragon_armor/chain/chest', 60006), + (24851, 22403, 'accessories/wearable_items/_exp10/dragon_armor/chain/feet', 60006), + (24852, 22404, 'accessories/wearable_items/_exp10/dragon_armor/chain/forearms', 60006), + (24853, 22405, 'accessories/wearable_items/_exp10/dragon_armor/chain/hands', 60006), + (24854, 22406, 'accessories/wearable_items/_exp10/dragon_armor/chain/head', 60006), + (24855, 22407, 'accessories/wearable_items/_exp10/dragon_armor/chain/legs', 60006), + (24856, 22408, 'accessories/wearable_items/_exp10/dragon_armor/chain/legs_noskirt', 60006), + (24857, 22409, 'accessories/wearable_items/_exp10/dragon_armor/chain/shoulders', 60006), + (24858, 22410, 'accessories/wearable_items/_exp10/dragon_armor/chain/shoulders_epic', 60006), + (24859, 22411, 'accessories/wearable_items/_exp10/dragon_armor/chain/skirt', 60006), + (24860, 22412, '_exp10/characters/monsters/armapine/armapine_elemental_broodland', 60006), + (24861, 22413, 'accessories/wieldable_items/shields/exp10/buckler_lionhead_bronze', 60006), + (24862, 22414, 'accessories/wieldable_items/shields/exp10/buckler_lionhead_golden', 60006), + (24863, 22415, 'accessories/wieldable_items/shields/exp10/buckler_lionhead_iron', 60006), + (24864, 22416, 'accessories/wieldable_items/shields/exp10/buckler_lionhead_rock', 60006), + (24865, 22417, 'accessories/wieldable_items/shields/exp10/buckler_lionhead_shadow', 60006), + (24866, 22418, 'accessories/wieldable_items/shields/exp10/kite_embellished_blue', 60006), + (24867, 22419, 'accessories/wieldable_items/shields/exp10/kite_embellished_brown', 60006), + (24868, 22420, 'accessories/wieldable_items/shields/exp10/kite_embellished_nature', 60006), + (24869, 22421, 'accessories/wieldable_items/shields/exp10/kite_embellished_redgold', 60006), + (24870, 22422, 'accessories/wieldable_items/shields/exp10/kite_embellished_shadow', 60006), + (24871, 22423, '_exp10/characters/monsters/dragon_frakadar/dragon_frakadar', 60006), + (24872, 22424, '_exp10/characters/monsters/sokokar_2013/sokokar_2013', 60006), + (24873, 22425, 'creatures/mounts/bear_mount_undead/bear_mount_undead_black', 60006), + (24874, 22426, '_exp10/objects/exp10_dun_bixie_hive/bixie_hive_wax_round_01_dpo', 60006), + (24875, 22427, '_exp10/characters/monsters/drake_ethernere/drakota_green_ethernere', 60006), + (24876, 22428, '_exp10/characters/monsters/drake_ethernere/drakota_red_ethernere', 60006), + (24877, 22429, 'staticobjects/tcg/tcg_marble_egg', 60006), + (24878, 22430, '_exp08/characters/monsters/dragon_lendiniara/dragon_lendiniara_ethereal_solid', 60006), + (24879, 22431, 'staticobjects/housing_portal_objects/vision_home_oakmyst', 60006), + (24880, 22432, '_exp10/characters/monsters/sokokar_2013/sokokar_2013_blue', 60006), + (24881, 22433, '_exp10/characters/monsters/sokokar_2013/sokokar_2013_orange', 60006), + (24882, 22434, '_exp10/characters/monsters/sokokar_2013/sokokar_2013_violet', 60006), + (24883, 22435, 'creatures/mounts/foo_dog_mount/foo_dog_base', 60006), + (24884, 22436, '_exp08/characters/monsters/dragon_made_golem/dragon_made_golem_vyemm', 60006), + (24885, 22437, '_exp09/characters/tool_users/ethenere_npcs/erudite_classic_male_ethenere', 60006), + (24886, 22438, '_exp10/characters/monsters/wyvern_ethernere/wyvern_red_ethernere', 60006), + (24887, 22439, 'ec/npc/zombie_fresh_female_highelf', 60006), + (24888, 22440, 'ec/npc/zombie_fresh_male_highelf', 60006), + (24889, 22441, 'accessories/wearable_items/_exp10/vesspyr_isles/chain_blue/chest', 60006), + (24890, 22442, 'accessories/wearable_items/_exp10/vesspyr_isles/chain_blue/feet', 60006), + (24891, 22443, 'accessories/wearable_items/_exp10/vesspyr_isles/chain_blue/forearms', 60006), + (24892, 22444, 'accessories/wearable_items/_exp10/vesspyr_isles/chain_blue/hands', 60006), + (24893, 22445, 'accessories/wearable_items/_exp10/vesspyr_isles/chain_blue/head', 60006), + (24894, 22446, 'accessories/wearable_items/_exp10/vesspyr_isles/chain_blue/legs', 60006), + (24895, 22447, 'accessories/wearable_items/_exp10/vesspyr_isles/chain_blue/shoulders', 60006), + (24896, 22448, 'accessories/wearable_items/_exp10/vesspyr_isles/chain_green/chest', 60006), + (24897, 22449, 'accessories/wearable_items/_exp10/vesspyr_isles/chain_green/feet', 60006), + (24898, 22450, 'accessories/wearable_items/_exp10/vesspyr_isles/chain_green/forearms', 60006), + (24899, 22451, 'accessories/wearable_items/_exp10/vesspyr_isles/chain_green/hands', 60006), + (24900, 22452, 'accessories/wearable_items/_exp10/vesspyr_isles/chain_green/head', 60006), + (24901, 22453, 'accessories/wearable_items/_exp10/vesspyr_isles/chain_green/legs', 60006), + (24902, 22454, 'accessories/wearable_items/_exp10/vesspyr_isles/chain_green/shoulders', 60006), + (24903, 22455, 'accessories/wearable_items/_exp10/vesspyr_isles/chain_light/chest', 60006), + (24904, 22456, 'accessories/wearable_items/_exp10/vesspyr_isles/chain_light/feet', 60006), + (24905, 22457, 'accessories/wearable_items/_exp10/vesspyr_isles/chain_light/forearms', 60006), + (24906, 22458, 'accessories/wearable_items/_exp10/vesspyr_isles/chain_light/hands', 60006), + (24907, 22459, 'accessories/wearable_items/_exp10/vesspyr_isles/chain_light/head', 60006), + (24908, 22460, 'accessories/wearable_items/_exp10/vesspyr_isles/chain_light/legs', 60006), + (24909, 22461, 'accessories/wearable_items/_exp10/vesspyr_isles/chain_light/shoulders', 60006), + (24910, 22462, 'accessories/wearable_items/_exp10/vesspyr_isles/chain_red/chest', 60006), + (24911, 22463, 'accessories/wearable_items/_exp10/vesspyr_isles/chain_red/feet', 60006), + (24912, 22464, 'accessories/wearable_items/_exp10/vesspyr_isles/chain_red/forearms', 60006), + (24913, 22465, 'accessories/wearable_items/_exp10/vesspyr_isles/chain_red/hands', 60006), + (24914, 22466, 'accessories/wearable_items/_exp10/vesspyr_isles/chain_red/head', 60006), + (24915, 22467, 'accessories/wearable_items/_exp10/vesspyr_isles/chain_red/legs', 60006), + (24916, 22468, 'accessories/wearable_items/_exp10/vesspyr_isles/chain_red/shoulders', 60006), + (24917, 22469, 'accessories/wearable_items/_exp10/vesspyr_isles/chain_shadow/chest', 60006), + (24918, 22470, 'accessories/wearable_items/_exp10/vesspyr_isles/chain_shadow/feet', 60006), + (24919, 22471, 'accessories/wearable_items/_exp10/vesspyr_isles/chain_shadow/forearms', 60006), + (24920, 22472, 'accessories/wearable_items/_exp10/vesspyr_isles/chain_shadow/hands', 60006), + (24921, 22473, 'accessories/wearable_items/_exp10/vesspyr_isles/chain_shadow/head', 60006), + (24922, 22474, 'accessories/wearable_items/_exp10/vesspyr_isles/chain_shadow/legs', 60006), + (24923, 22475, 'accessories/wearable_items/_exp10/vesspyr_isles/chain_shadow/shoulders', 60006), + (24924, 22476, 'accessories/wearable_items/_exp10/vesspyr_isles/cloth_blue/chest', 60006), + (24925, 22477, 'accessories/wearable_items/_exp10/vesspyr_isles/cloth_blue/feet', 60006), + (24926, 22478, 'accessories/wearable_items/_exp10/vesspyr_isles/cloth_blue/hands', 60006), + (24927, 22479, 'accessories/wearable_items/_exp10/vesspyr_isles/cloth_blue/head', 60006), + (24928, 22480, 'accessories/wearable_items/_exp10/vesspyr_isles/cloth_blue/pants', 60006), + (24929, 22481, 'accessories/wearable_items/_exp10/vesspyr_isles/cloth_green/chest', 60006), + (24930, 22482, 'accessories/wearable_items/_exp10/vesspyr_isles/cloth_green/feet', 60006), + (24931, 22483, 'accessories/wearable_items/_exp10/vesspyr_isles/cloth_green/hands', 60006), + (24932, 22484, 'accessories/wearable_items/_exp10/vesspyr_isles/cloth_green/head', 60006), + (24933, 22485, 'accessories/wearable_items/_exp10/vesspyr_isles/cloth_green/pants', 60006), + (24934, 22486, 'accessories/wearable_items/_exp10/vesspyr_isles/cloth_red/chest', 60006), + (24935, 22487, 'accessories/wearable_items/_exp10/vesspyr_isles/cloth_red/feet', 60006), + (24936, 22488, 'accessories/wearable_items/_exp10/vesspyr_isles/cloth_red/hands', 60006), + (24937, 22489, 'accessories/wearable_items/_exp10/vesspyr_isles/cloth_red/head', 60006), + (24938, 22490, 'accessories/wearable_items/_exp10/vesspyr_isles/cloth_red/pants', 60006), + (24939, 22491, 'accessories/wearable_items/_exp10/vesspyr_isles/cloth_shadow/chest', 60006), + (24940, 22492, 'accessories/wearable_items/_exp10/vesspyr_isles/cloth_shadow/feet', 60006), + (24941, 22493, 'accessories/wearable_items/_exp10/vesspyr_isles/cloth_shadow/hands', 60006), + (24942, 22494, 'accessories/wearable_items/_exp10/vesspyr_isles/cloth_shadow/head', 60006), + (24943, 22495, 'accessories/wearable_items/_exp10/vesspyr_isles/cloth_shadow/pants', 60006), + (24944, 22496, 'accessories/wearable_items/_exp10/vesspyr_isles/leather_blue/chest', 60006), + (24945, 22497, 'accessories/wearable_items/_exp10/vesspyr_isles/leather_blue/feet', 60006), + (24946, 22498, 'accessories/wearable_items/_exp10/vesspyr_isles/leather_blue/forearms', 60006), + (24947, 22499, 'accessories/wearable_items/_exp10/vesspyr_isles/leather_blue/hands', 60006), + (24948, 22500, 'accessories/wearable_items/_exp10/vesspyr_isles/leather_blue/head', 60006), + (24949, 22501, 'accessories/wearable_items/_exp10/vesspyr_isles/leather_blue/legs', 60006), + (24950, 22502, 'accessories/wearable_items/_exp10/vesspyr_isles/leather_blue/legs_noskirt', 60006), + (24951, 22503, 'accessories/wearable_items/_exp10/vesspyr_isles/leather_blue/pauldron_left', 60006), + (24952, 22504, 'accessories/wearable_items/_exp10/vesspyr_isles/leather_blue/pauldron_right', 60006), + (24953, 22505, 'accessories/wearable_items/_exp10/vesspyr_isles/leather_blue/shoulders', 60006), + (24954, 22506, 'accessories/wearable_items/_exp10/vesspyr_isles/leather_blue/shoulders_nopauldrons', 60006), + (24955, 22507, 'accessories/wearable_items/_exp10/vesspyr_isles/leather_blue/skirt', 60006), + (24956, 22508, 'accessories/wearable_items/_exp10/vesspyr_isles/leather_dark/chest', 60006), + (24957, 22509, 'accessories/wearable_items/_exp10/vesspyr_isles/leather_dark/feet', 60006), + (24958, 22510, 'accessories/wearable_items/_exp10/vesspyr_isles/leather_dark/forearms', 60006), + (24959, 22511, 'accessories/wearable_items/_exp10/vesspyr_isles/leather_dark/hands', 60006), + (24960, 22512, 'accessories/wearable_items/_exp10/vesspyr_isles/leather_dark/head', 60006), + (24961, 22513, 'accessories/wearable_items/_exp10/vesspyr_isles/leather_dark/legs', 60006), + (24962, 22514, 'accessories/wearable_items/_exp10/vesspyr_isles/leather_dark/legs_noskirt', 60006), + (24963, 22515, 'accessories/wearable_items/_exp10/vesspyr_isles/leather_dark/pauldron_left', 60006), + (24964, 22516, 'accessories/wearable_items/_exp10/vesspyr_isles/leather_dark/pauldron_right', 60006), + (24965, 22517, 'accessories/wearable_items/_exp10/vesspyr_isles/leather_dark/shoulders', 60006), + (24966, 22518, 'accessories/wearable_items/_exp10/vesspyr_isles/leather_dark/shoulders_nopauldrons', 60006), + (24967, 22519, 'accessories/wearable_items/_exp10/vesspyr_isles/leather_dark/skirt', 60006), + (24968, 22520, 'accessories/wearable_items/_exp10/vesspyr_isles/leather_green/chest', 60006), + (24969, 22521, 'accessories/wearable_items/_exp10/vesspyr_isles/leather_green/feet', 60006), + (24970, 22522, 'accessories/wearable_items/_exp10/vesspyr_isles/leather_green/forearms', 60006), + (24971, 22523, 'accessories/wearable_items/_exp10/vesspyr_isles/leather_green/hands', 60006), + (24972, 22524, 'accessories/wearable_items/_exp10/vesspyr_isles/leather_green/head', 60006), + (24973, 22525, 'accessories/wearable_items/_exp10/vesspyr_isles/leather_green/legs', 60006), + (24974, 22526, 'accessories/wearable_items/_exp10/vesspyr_isles/leather_green/legs_noskirt', 60006), + (24975, 22527, 'accessories/wearable_items/_exp10/vesspyr_isles/leather_green/pauldron_left', 60006), + (24976, 22528, 'accessories/wearable_items/_exp10/vesspyr_isles/leather_green/pauldron_right', 60006), + (24977, 22529, 'accessories/wearable_items/_exp10/vesspyr_isles/leather_green/shoulders', 60006), + (24978, 22530, 'accessories/wearable_items/_exp10/vesspyr_isles/leather_green/shoulders_nopauldrons', 60006), + (24979, 22531, 'accessories/wearable_items/_exp10/vesspyr_isles/leather_green/skirt', 60006), + (24980, 22532, 'accessories/wearable_items/_exp10/vesspyr_isles/leather_red/chest', 60006), + (24981, 22533, 'accessories/wearable_items/_exp10/vesspyr_isles/leather_red/feet', 60006), + (24982, 22534, 'accessories/wearable_items/_exp10/vesspyr_isles/leather_red/forearms', 60006), + (24983, 22535, 'accessories/wearable_items/_exp10/vesspyr_isles/leather_red/hands', 60006), + (24984, 22536, 'accessories/wearable_items/_exp10/vesspyr_isles/leather_red/head', 60006), + (24985, 22537, 'accessories/wearable_items/_exp10/vesspyr_isles/leather_red/legs', 60006), + (24986, 22538, 'accessories/wearable_items/_exp10/vesspyr_isles/leather_red/legs_noskirt', 60006), + (24987, 22539, 'accessories/wearable_items/_exp10/vesspyr_isles/leather_red/pauldron_left', 60006), + (24988, 22540, 'accessories/wearable_items/_exp10/vesspyr_isles/leather_red/pauldron_right', 60006), + (24989, 22541, 'accessories/wearable_items/_exp10/vesspyr_isles/leather_red/shoulders', 60006), + (24990, 22542, 'accessories/wearable_items/_exp10/vesspyr_isles/leather_red/shoulders_nopauldrons', 60006), + (24991, 22543, 'accessories/wearable_items/_exp10/vesspyr_isles/leather_red/skirt', 60006), + (24992, 22544, 'accessories/wearable_items/_exp10/vesspyr_isles/robe_blue/chest', 60006), + (24993, 22545, 'accessories/wearable_items/_exp10/vesspyr_isles/robe_blue/feet', 60006), + (24994, 22546, 'accessories/wearable_items/_exp10/vesspyr_isles/robe_blue/hands', 60006), + (24995, 22547, 'accessories/wearable_items/_exp10/vesspyr_isles/robe_blue/head', 60006), + (24996, 22548, 'accessories/wearable_items/_exp10/vesspyr_isles/robe_blue/pants', 60006), + (24997, 22549, 'accessories/wearable_items/_exp10/vesspyr_isles/robe_blue/skirt', 60006), + (24998, 22550, 'accessories/wearable_items/_exp10/vesspyr_isles/robe_green/chest', 60006), + (24999, 22551, 'accessories/wearable_items/_exp10/vesspyr_isles/robe_green/feet', 60006), + (25000, 22552, 'accessories/wearable_items/_exp10/vesspyr_isles/robe_green/hands', 60006), + (25001, 22553, 'accessories/wearable_items/_exp10/vesspyr_isles/robe_green/head', 60006), + (25002, 22554, 'accessories/wearable_items/_exp10/vesspyr_isles/robe_green/pants', 60006), + (25003, 22555, 'accessories/wearable_items/_exp10/vesspyr_isles/robe_green/skirt', 60006), + (25004, 22556, 'accessories/wearable_items/_exp10/vesspyr_isles/robe_red/chest', 60006), + (25005, 22557, 'accessories/wearable_items/_exp10/vesspyr_isles/robe_red/feet', 60006), + (25006, 22558, 'accessories/wearable_items/_exp10/vesspyr_isles/robe_red/hands', 60006), + (25007, 22559, 'accessories/wearable_items/_exp10/vesspyr_isles/robe_red/head', 60006), + (25008, 22560, 'accessories/wearable_items/_exp10/vesspyr_isles/robe_red/pants', 60006), + (25009, 22561, 'accessories/wearable_items/_exp10/vesspyr_isles/robe_red/skirt', 60006), + (25010, 22562, 'accessories/wearable_items/_exp10/vesspyr_isles/robe_shadow/chest', 60006), + (25011, 22563, 'accessories/wearable_items/_exp10/vesspyr_isles/robe_shadow/feet', 60006), + (25012, 22564, 'accessories/wearable_items/_exp10/vesspyr_isles/robe_shadow/hands', 60006), + (25013, 22565, 'accessories/wearable_items/_exp10/vesspyr_isles/robe_shadow/head', 60006), + (25014, 22566, 'accessories/wearable_items/_exp10/vesspyr_isles/robe_shadow/pants', 60006), + (25015, 22567, 'accessories/wearable_items/_exp10/vesspyr_isles/robe_shadow/skirt', 60006), + (25016, 22568, 'accessories/wearable_items/_exp10/vesspyr_isles/vanguard_bronze/chest', 60006), + (25017, 22569, 'accessories/wearable_items/_exp10/vesspyr_isles/vanguard_bronze/feet', 60006), + (25018, 22570, 'accessories/wearable_items/_exp10/vesspyr_isles/vanguard_bronze/forearms', 60006), + (25019, 22571, 'accessories/wearable_items/_exp10/vesspyr_isles/vanguard_bronze/hands', 60006), + (25020, 22572, 'accessories/wearable_items/_exp10/vesspyr_isles/vanguard_bronze/head', 60006), + (25021, 22573, 'accessories/wearable_items/_exp10/vesspyr_isles/vanguard_bronze/head_epic', 60006), + (25022, 22574, 'accessories/wearable_items/_exp10/vesspyr_isles/vanguard_bronze/left', 60006), + (25023, 22575, 'accessories/wearable_items/_exp10/vesspyr_isles/vanguard_bronze/legs', 60006), + (25024, 22576, 'accessories/wearable_items/_exp10/vesspyr_isles/vanguard_bronze/legs_noskirt', 60006), + (25025, 22577, 'accessories/wearable_items/_exp10/vesspyr_isles/vanguard_bronze/pauldron_left', 60006), + (25026, 22578, 'accessories/wearable_items/_exp10/vesspyr_isles/vanguard_bronze/pauldron_right', 60006), + (25027, 22579, 'accessories/wearable_items/_exp10/vesspyr_isles/vanguard_bronze/right', 60006), + (25028, 22580, 'accessories/wearable_items/_exp10/vesspyr_isles/vanguard_bronze/shoulders', 60006), + (25029, 22581, 'accessories/wearable_items/_exp10/vesspyr_isles/vanguard_bronze/shoulders_epic', 60006), + (25030, 22582, 'accessories/wearable_items/_exp10/vesspyr_isles/vanguard_bronze/shoulders_nopauldrons', 60006), + (25031, 22583, 'accessories/wearable_items/_exp10/vesspyr_isles/vanguard_bronze/skirt', 60006), + (25032, 22584, 'accessories/wearable_items/_exp10/vesspyr_isles/vanguard_iron/chest', 60006), + (25033, 22585, 'accessories/wearable_items/_exp10/vesspyr_isles/vanguard_iron/feet', 60006), + (25034, 22586, 'accessories/wearable_items/_exp10/vesspyr_isles/vanguard_iron/forearms', 60006), + (25035, 22587, 'accessories/wearable_items/_exp10/vesspyr_isles/vanguard_iron/hands', 60006), + (25036, 22588, 'accessories/wearable_items/_exp10/vesspyr_isles/vanguard_iron/head', 60006), + (25037, 22589, 'accessories/wearable_items/_exp10/vesspyr_isles/vanguard_iron/head_epic', 60006), + (25038, 22590, 'accessories/wearable_items/_exp10/vesspyr_isles/vanguard_iron/left', 60006), + (25039, 22591, 'accessories/wearable_items/_exp10/vesspyr_isles/vanguard_iron/legs', 60006), + (25040, 22592, 'accessories/wearable_items/_exp10/vesspyr_isles/vanguard_iron/legs_noskirt', 60006), + (25041, 22593, 'accessories/wearable_items/_exp10/vesspyr_isles/vanguard_iron/pauldron_left', 60006), + (25042, 22594, 'accessories/wearable_items/_exp10/vesspyr_isles/vanguard_iron/pauldron_right', 60006), + (25043, 22595, 'accessories/wearable_items/_exp10/vesspyr_isles/vanguard_iron/right', 60006), + (25044, 22596, 'accessories/wearable_items/_exp10/vesspyr_isles/vanguard_iron/shoulders', 60006), + (25045, 22597, 'accessories/wearable_items/_exp10/vesspyr_isles/vanguard_iron/shoulders_epic', 60006), + (25046, 22598, 'accessories/wearable_items/_exp10/vesspyr_isles/vanguard_iron/shoulders_nopauldrons', 60006), + (25047, 22599, 'accessories/wearable_items/_exp10/vesspyr_isles/vanguard_iron/skirt', 60006), + (25048, 22600, 'accessories/wearable_items/_exp10/vesspyr_isles/vanguard_light/chest', 60006), + (25049, 22601, 'accessories/wearable_items/_exp10/vesspyr_isles/vanguard_light/feet', 60006), + (25050, 22602, 'accessories/wearable_items/_exp10/vesspyr_isles/vanguard_light/forearms', 60006), + (25051, 22603, 'accessories/wearable_items/_exp10/vesspyr_isles/vanguard_light/hands', 60006), + (25052, 22604, 'accessories/wearable_items/_exp10/vesspyr_isles/vanguard_light/head', 60006), + (25053, 22605, 'accessories/wearable_items/_exp10/vesspyr_isles/vanguard_light/head_epic', 60006), + (25054, 22606, 'accessories/wearable_items/_exp10/vesspyr_isles/vanguard_light/left', 60006), + (25055, 22607, 'accessories/wearable_items/_exp10/vesspyr_isles/vanguard_light/legs', 60006), + (25056, 22608, 'accessories/wearable_items/_exp10/vesspyr_isles/vanguard_light/legs_noskirt', 60006), + (25057, 22609, 'accessories/wearable_items/_exp10/vesspyr_isles/vanguard_light/pauldron_left', 60006), + (25058, 22610, 'accessories/wearable_items/_exp10/vesspyr_isles/vanguard_light/pauldron_right', 60006), + (25059, 22611, 'accessories/wearable_items/_exp10/vesspyr_isles/vanguard_light/right', 60006), + (25060, 22612, 'accessories/wearable_items/_exp10/vesspyr_isles/vanguard_light/shoulders', 60006), + (25061, 22613, 'accessories/wearable_items/_exp10/vesspyr_isles/vanguard_light/shoulders_epic', 60006), + (25062, 22614, 'accessories/wearable_items/_exp10/vesspyr_isles/vanguard_light/shoulders_nopauldrons', 60006), + (25063, 22615, 'accessories/wearable_items/_exp10/vesspyr_isles/vanguard_light/skirt', 60006), + (25064, 22616, 'accessories/wearable_items/_exp10/vesspyr_isles/vanguard_redgold/chest', 60006), + (25065, 22617, 'accessories/wearable_items/_exp10/vesspyr_isles/vanguard_redgold/feet', 60006), + (25066, 22618, 'accessories/wearable_items/_exp10/vesspyr_isles/vanguard_redgold/forearms', 60006), + (25067, 22619, 'accessories/wearable_items/_exp10/vesspyr_isles/vanguard_redgold/hands', 60006), + (25068, 22620, 'accessories/wearable_items/_exp10/vesspyr_isles/vanguard_redgold/head', 60006), + (25069, 22621, 'accessories/wearable_items/_exp10/vesspyr_isles/vanguard_redgold/head_epic', 60006), + (25070, 22622, 'accessories/wearable_items/_exp10/vesspyr_isles/vanguard_redgold/left', 60006), + (25071, 22623, 'accessories/wearable_items/_exp10/vesspyr_isles/vanguard_redgold/legs', 60006), + (25072, 22624, 'accessories/wearable_items/_exp10/vesspyr_isles/vanguard_redgold/legs_noskirt', 60006), + (25073, 22625, 'accessories/wearable_items/_exp10/vesspyr_isles/vanguard_redgold/pauldron_left', 60006), + (25074, 22626, 'accessories/wearable_items/_exp10/vesspyr_isles/vanguard_redgold/pauldron_right', 60006), + (25075, 22627, 'accessories/wearable_items/_exp10/vesspyr_isles/vanguard_redgold/right', 60006), + (25076, 22628, 'accessories/wearable_items/_exp10/vesspyr_isles/vanguard_redgold/shoulders', 60006), + (25077, 22629, 'accessories/wearable_items/_exp10/vesspyr_isles/vanguard_redgold/shoulders_epic', 60006), + (25078, 22630, 'accessories/wearable_items/_exp10/vesspyr_isles/vanguard_redgold/shoulders_nopauldrons', 60006), + (25079, 22631, 'accessories/wearable_items/_exp10/vesspyr_isles/vanguard_redgold/skirt', 60006), + (25080, 22632, 'accessories/wearable_items/_exp10/vesspyr_isles/vanguard_shadow/chest', 60006), + (25081, 22633, 'accessories/wearable_items/_exp10/vesspyr_isles/vanguard_shadow/feet', 60006), + (25082, 22634, 'accessories/wearable_items/_exp10/vesspyr_isles/vanguard_shadow/forearms', 60006), + (25083, 22635, 'accessories/wearable_items/_exp10/vesspyr_isles/vanguard_shadow/hands', 60006), + (25084, 22636, 'accessories/wearable_items/_exp10/vesspyr_isles/vanguard_shadow/head', 60006), + (25085, 22637, 'accessories/wearable_items/_exp10/vesspyr_isles/vanguard_shadow/head_epic', 60006), + (25086, 22638, 'accessories/wearable_items/_exp10/vesspyr_isles/vanguard_shadow/left', 60006), + (25087, 22639, 'accessories/wearable_items/_exp10/vesspyr_isles/vanguard_shadow/legs', 60006), + (25088, 22640, 'accessories/wearable_items/_exp10/vesspyr_isles/vanguard_shadow/legs_noskirt', 60006), + (25089, 22641, 'accessories/wearable_items/_exp10/vesspyr_isles/vanguard_shadow/pauldron_left', 60006), + (25090, 22642, 'accessories/wearable_items/_exp10/vesspyr_isles/vanguard_shadow/pauldron_right', 60006), + (25091, 22643, 'accessories/wearable_items/_exp10/vesspyr_isles/vanguard_shadow/right', 60006), + (25092, 22644, 'accessories/wearable_items/_exp10/vesspyr_isles/vanguard_shadow/shoulders', 60006), + (25093, 22645, 'accessories/wearable_items/_exp10/vesspyr_isles/vanguard_shadow/shoulders_epic', 60006), + (25094, 22646, 'accessories/wearable_items/_exp10/vesspyr_isles/vanguard_shadow/shoulders_nopauldrons', 60006), + (25095, 22647, 'accessories/wearable_items/_exp10/vesspyr_isles/vanguard_shadow/skirt', 60006), + (25096, 22648, 'staticobjects/housing_portal_objects/vision_home_wuoshi01', 60006), + (25097, 22649, '_exp10/characters/tool_users/dracurion_ethernere/dracurion_etherenere_base', 60006), + (25098, 22650, '_exp10/characters/tool_users/dracurion_ethernere/dracurion_etherenere_cloth', 60006), + (25099, 22651, '_exp10/characters/tool_users/dracurion_ethernere/dracurion_etherenere_warrior', 60006), + (25100, 22652, 'playerstudio/characters/cloaks/darkdaycloak/darkdaycloak', 60006), + (25101, 22653, 'accessories/wearable_items/cloak/exp10/cloak_veshan_dark', 60006), + (25102, 22654, '_exp10/characters/tool_users/dracurion_ethernere/dracurion_etherenere_assassin', 60006), + (25103, 22655, '_exp10/characters/tool_users/dracurion_ethernere/dracurion_etherenere_medallion_var01', 60006), + (25104, 22656, '_exp10/characters/tool_users/dracurion_ethernere/dracurion_etherenere_palladin1', 60006), + (25105, 22657, '_exp10/characters/tool_users/dracurion_ethernere/dracurion_etherenere_palladin4', 60006), + (25106, 22658, '_exp10/characters/tool_users/dracurion_ethernere/dracurion_etherenere_warlord', 60006), + (25107, 22659, '_exp10/characters/tool_users/dracurion_ethernere/dracurion_etherenere_wizard', 60006), + (25108, 22660, 'staticobjects/_exp10/veeshan_tapestry01', 60006), + (25109, 22661, 'ec/pc/vampire/bat_swarm_vampire_mount_no_pc', 60006), + (25110, 22662, '_exp10/characters/tool_users/shissar_statue/shissar_statue_architect', 60006), + (25111, 22663, '_exp10/characters/tool_users/shissar_statue/shissar_statue_emperor', 60006), + (25112, 22664, '_exp10/characters/tool_users/shissar_statue/shissar_statue_mage', 60006), + (25113, 22665, '_exp10/characters/tool_users/shissar_statue/shissar_statue_warrior', 60006), + (25114, 22666, '_exp10/characters/monsters/shissar_custodian/shissar_custodian_green', 60006), + (25115, 22667, '_exp10/characters/monsters/shissar_custodian/shissar_custodian_purple', 60006), + (25116, 22668, '_exp10/characters/monsters/shissar_custodian/shissar_custodian_yellow', 60006), + (25117, 22669, 'staticobjects/_exp09/df_objects_hanginglamp01_pfx', 60006), + (25118, 22670, '_exp10/objects/pickclaw_jail_boards_dpo', 60006), + (25119, 22671, '_exp10/objects/pik_chest_closed_dpo', 60006), + (25120, 22672, 'playerstudio/characters/shields/tower_round_shields/swinging_death/swinging_death', 60006), + (25121, 22673, 'staticobjects/halloween/bef_altar01', 60006), + (25122, 22674, 'staticobjects/halloween/cs_othmir_fully_corrupt_bone', 60006), + (25123, 22675, 'staticobjects/halloween/cs_othmir_fully_corrupt_bone_wraps', 60006), + (25124, 22676, 'staticobjects/halloween/exp09_dun_we01_cliff01_torch_single01', 60006), + (25125, 22677, 'staticobjects/halloween/exp09_rgn_ej_oggok01_bones01', 60006), + (25126, 22678, 'staticobjects/halloween/fprt_ext_tombstoneb001', 60006), + (25127, 22679, 'staticobjects/halloween/lp_lightsource_somborn_single_post01', 60006), + (25128, 22680, 'staticobjects/halloween/nc_torch', 60006), + (25129, 22681, 'staticobjects/halloween/odno_cauldron01', 60006), + (25130, 22682, 'staticobjects/halloween/tfs_present01_big', 60006), + (25131, 22683, 'staticobjects/halloween/vel_rock_ettin_brazier01', 60006), + (25132, 22684, 'staticobjects/_exp10/hk_keg_small01', 60006), + (25133, 22685, 'staticobjects/_exp10/hk_bdrm_armoire01', 60006), + (25134, 22686, 'staticobjects/_exp10/hk_bdrm_dresser01', 60006), + (25135, 22687, 'staticobjects/_exp10/hk_bdrm_nightstand01', 60006), + (25136, 22688, 'staticobjects/_exp10/hk_blanket_single_double02', 60006), + (25137, 22689, 'staticobjects/_exp10/hk_bdrm_bed_guest02', 60006), + (25138, 22690, 'staticobjects/_exp10/hk_bdrm_bed02', 60006), + (25139, 22691, 'staticobjects/_exp10/dr_bookcase01', 60006), + (25140, 22692, 'staticobjects/_exp10/hk_bookcase_low01', 60006), + (25141, 22693, 'staticobjects/_exp10/hk_bookcase01', 60006), + (25142, 22694, 'staticobjects/_exp10/hk_books_single_upright01', 60006), + (25143, 22695, 'staticobjects/_exp10/hk_books_single_ornate02', 60006), + (25144, 22696, 'staticobjects/_exp10/hk_books_single_plain01', 60006), + (25145, 22697, '_exp10/characters/tool_users/bolgin/bolgin', 60006), + (25146, 22698, 'staticobjects/_exp10/hk_books_single_upright02', 60006), + (25147, 22699, 'staticobjects/_exp10/hk_books_single_upright03', 60006), + (25148, 22700, 'staticobjects/_exp10/hk_books_single_upright04', 60006), + (25149, 22701, 'staticobjects/_exp10/hk_chest01', 60006), + (25150, 22702, 'staticobjects/_exp10/hk_chest01_ornate01', 60006), + (25151, 22703, 'staticobjects/_exp10/hk_crate_large01', 60006), + (25152, 22704, 'staticobjects/_exp10/hk_desk01', 60006), + (25153, 22705, 'staticobjects/_exp10/hk_bar_stool', 60006), + (25154, 22706, 'staticobjects/_exp10/hk_dining_bench02', 60006), + (25155, 22707, 'staticobjects/_exp10/hk_dining_cabinet01_triple', 60006), + (25156, 22708, 'staticobjects/_exp10/hk_dining_chair02', 60006), + (25157, 22709, 'staticobjects/_exp10/hk_dining_table01', 60006), + (25158, 22710, 'staticobjects/_exp10/hk_dining_table01_medium01', 60006), + (25159, 22711, 'staticobjects/_exp10/hk_dining_table01_long01', 60006), + (25160, 22712, 'staticobjects/_exp10/dr_toy_block01', 60006), + (25161, 22713, 'staticobjects/_exp10/dr_toy_block02', 60006), + (25162, 22714, 'staticobjects/_exp10/dr_toy02', 60006), + (25163, 22715, 'staticobjects/_exp10/dr_toy01', 60006), + (25164, 22716, 'staticobjects/_exp10/dr_ball01', 60006), + (25165, 22717, 'staticobjects/_exp10/hk_kitchen_pot_large02', 60006), + (25166, 22718, 'staticobjects/_exp10/hk_kitchen_pot02', 60006), + (25167, 22719, 'staticobjects/_exp10/hk_lightsource_brazier_low01_pfx', 60006), + (25168, 22720, 'staticobjects/_exp10/hk_lightsource_brazier_tall01_pfx', 60006), + (25169, 22721, 'staticobjects/_exp10/hk_lightsource_brazier_tall02_pfx', 60006), + (25170, 22722, 'staticobjects/_exp10/hk_lightsource_chandalier_short01_swinging', 60006), + (25171, 22723, '_exp10/characters/tool_users/bolgin/bolgin_helm', 60006), + (25172, 22724, 'staticobjects/_exp10/hk_lightsource_wall01_pfx', 60006), + (25173, 22725, 'staticobjects/_exp10/pc_chest_treasure01_coins', 60006), + (25174, 22726, 'staticobjects/_exp10/pc_chest01_long', 60006), + (25175, 22727, 'staticobjects/_exp10/pc_chest01_small', 60006), + (25176, 22728, 'staticobjects/_exp10/pc_goblin_bedroll01', 60006), + (25177, 22729, 'staticobjects/_exp10/pc_goblin_bowl01', 60006), + (25178, 22730, 'staticobjects/_exp10/pc_goblin_bowl02', 60006), + (25179, 22731, 'accessories/wearable_items/cloak/exp10/cloak_heroic', 60006), + (25180, 22732, 'staticobjects/_exp10/pc_goblin_bowl03', 60006), + (25181, 22733, 'staticobjects/_exp10/pc_goblin_jar01', 60006), + (25182, 22734, 'staticobjects/_exp10/pc_goblin_jar02', 60006), + (25183, 22735, 'staticobjects/_exp10/pc_goblin_miningstool01', 60006), + (25184, 22736, 'staticobjects/_exp10/pc_goblin_miningtable01', 60006), + (25185, 22737, 'staticobjects/_exp10/pc_goblin_miningtable02', 60006), + (25186, 22738, '_exp10/objects/pickclaw_rock_crusher_wall_dpo', 60006), + (25187, 22739, 'staticobjects/_exp10/pc_goblin_waterjug01', 60006), + (25188, 22740, 'staticobjects/_exp10/pc_goblin_waterjug02', 60006), + (25189, 22741, 'staticobjects/_exp10/pc_goblin_wood_bucket01', 60006), + (25190, 22742, 'staticobjects/_exp10/pc_goblin_wood_pallet01', 60006), + (25191, 22743, 'staticobjects/_exp10/pr_gobline_cauldron01', 60006), + (25192, 22744, 'staticobjects/_exp10/big_leaf_plant01', 60006), + (25193, 22745, 'staticobjects/_exp10/bixie_bush01', 60006), + (25194, 22746, 'staticobjects/_exp10/bixie_bush02', 60006), + (25195, 22747, 'staticobjects/_exp10/bixie_plant_flower01', 60006), + (25196, 22748, 'staticobjects/_exp10/bixie_plant_flower02', 60006), + (25197, 22749, 'staticobjects/_exp10/bixie_plant_flower03', 60006), + (25198, 22750, 'staticobjects/_exp10/long_leaf_plant01', 60006), + (25199, 22751, 'staticobjects/_exp10/long_leaf_plant02', 60006), + (25200, 22752, 'staticobjects/_exp10/dr_bush02_leaves_isle03', 60006), + (25201, 22753, 'staticobjects/_exp10/dr_bush02_leaves_isle05', 60006), + (25202, 22754, 'staticobjects/_exp10/dr_bush02_leaves_isle06', 60006), + (25203, 22755, 'staticobjects/_exp10/dr_bush02_leaves', 60006), + (25204, 22756, 'staticobjects/_exp10/dr_dead_bush01', 60006), + (25205, 22757, 'staticobjects/_exp10/dr_glow_plant01', 60006), + (25206, 22758, 'staticobjects/_exp10/dr_glow_plant01_isle05', 60006), + (25207, 22759, 'staticobjects/_exp10/dr_glow_plant03', 60006), + (25208, 22760, 'staticobjects/_exp10/dr_glow_plant03_isle05', 60006), + (25209, 22761, 'staticobjects/_exp10/dr_grass_plant01', 60006), + (25210, 22762, 'staticobjects/_exp10/dr_grass_plant02', 60006), + (25211, 22763, 'staticobjects/_exp10/dr_hanging_flowervine01', 60006), + (25212, 22764, 'staticobjects/_exp10/dr_hanging_flowervine01_isle05', 60006), + (25213, 22765, 'staticobjects/_exp10/dr_hanging_flowervine01_isle06', 60006), + (25214, 22766, 'staticobjects/_exp10/dr_hanging_flowervine01_isle07', 60006), + (25215, 22767, 'staticobjects/_exp10/dr_hanging_flowervine02', 60006), + (25216, 22768, 'staticobjects/_exp10/dr_hanging_flowervine02_isle05', 60006), + (25217, 22769, 'staticobjects/_exp10/dr_hanging_flowervine02_isle06', 60006), + (25218, 22770, 'staticobjects/_exp10/dr_hanging_flowervine02_isle07', 60006), + (25219, 22771, 'staticobjects/_exp10/dr_wuoshi_bush01', 60006), + (25220, 22772, 'staticobjects/_exp10/hk_rug_bedroom_trapdoor01', 60006), + (25221, 22773, 'staticobjects/_exp10/hk_rug_diningtable01', 60006), + (25222, 22774, 'staticobjects/_exp10/hk_rug_diningtable02', 60006), + (25223, 22775, 'staticobjects/_exp10/hk_rug_rectangle01', 60006), + (25224, 22776, 'staticobjects/_exp10/hk_rug_rectangle02', 60006), + (25225, 22777, 'staticobjects/_exp10/hk_rug_rectangle03', 60006), + (25226, 22778, 'staticobjects/_exp10/hk_rug_rectangle04', 60006), + (25227, 22779, 'staticobjects/_exp10/hk_rug_round01', 60006), + (25228, 22780, 'staticobjects/_exp10/hk_rug_round01_large01', 60006), + (25229, 22781, 'staticobjects/_exp10/hk_rug_round02', 60006), + (25230, 22782, 'staticobjects/_exp10/hk_rug_round02_large01', 60006), + (25231, 22783, 'staticobjects/_exp10/hk_rug_round03_large01', 60006), + (25232, 22784, 'staticobjects/_exp10/hk_rug_runner01', 60006), + (25233, 22785, 'staticobjects/_exp10/hk_rug_runner02', 60006), + (25234, 22786, 'staticobjects/_exp10/hk_rug_runner02_long01', 60006), + (25235, 22787, 'staticobjects/_exp10/pik_rug_diningtable01', 60006), + (25236, 22788, 'staticobjects/_exp10/pik_rug_diningtable02', 60006), + (25237, 22789, 'staticobjects/_exp10/pik_rug_rectangle_supply', 60006), + (25238, 22790, 'staticobjects/_exp10/pik_rug_rectangle01', 60006), + (25239, 22791, 'staticobjects/_exp10/pik_rug_rectangle02', 60006), + (25240, 22792, 'staticobjects/_exp10/pik_rug_rectangle03', 60006), + (25241, 22793, 'staticobjects/_exp10/pik_rug_rectangle04', 60006), + (25242, 22794, 'staticobjects/_exp10/pik_rug_round01', 60006), + (25243, 22795, 'staticobjects/_exp10/pik_rug_round01_large01', 60006), + (25244, 22796, 'staticobjects/_exp10/pik_rug_round02', 60006), + (25245, 22797, 'staticobjects/_exp10/pik_rug_round02_large01', 60006), + (25246, 22798, 'staticobjects/_exp10/pik_rug_round03_large01', 60006), + (25247, 22799, 'staticobjects/_exp10/pik_rug_runner01', 60006), + (25248, 22800, 'staticobjects/_exp10/pik_rug_runner01_kitchen', 60006), + (25249, 22801, 'staticobjects/_exp10/pik_rug_runner02_long01', 60006), + (25250, 22802, 'staticobjects/_exp10/hk_chair_ornate02', 60006), + (25251, 22803, 'staticobjects/_exp10/hk_settle_sofa02', 60006), + (25252, 22804, 'staticobjects/_exp10/hk_settle02', 60006), + (25253, 22805, 'staticobjects/_exp10/hk_sofa_pillow02', 60006), + (25254, 22806, 'staticobjects/_exp10/hk_gaming_cardtable01', 60006), + (25255, 22807, 'staticobjects/_exp10/hk_gaming_cardtable01_empty01', 60006), + (25256, 22808, 'staticobjects/_exp10/hk_gaming_chesstable01', 60006), + (25257, 22809, 'staticobjects/_exp10/hk_gaming_pawnpiece01', 60006), + (25258, 22810, 'staticobjects/_exp10/hk_table_coffee01', 60006), + (25259, 22811, 'staticobjects/_exp10/hk_table_coffee01_short01', 60006), + (25260, 22812, 'staticobjects/_exp10/hk_table_end01', 60006), + (25261, 22813, 'staticobjects/_exp10/ns_pine_tree_01', 60006), + (25262, 22814, 'staticobjects/_exp10/ns_pine_tree_02', 60006), + (25263, 22815, 'staticobjects/_exp10/ns_pine_tree_03', 60006), + (25264, 22816, 'staticobjects/_exp10/ns_pine_tree_evil_01', 60006), + (25265, 22817, 'staticobjects/_exp10/ns_pine_tree_evil_02', 60006), + (25266, 22818, 'staticobjects/_exp10/ns_pine_tree_evil_03', 60006), + (25267, 22819, 'staticobjects/_exp10/ns_pine_tree_evil_sapling_01', 60006), + (25268, 22820, 'staticobjects/_exp10/ns_pine_tree_evil_sapling_02', 60006), + (25269, 22821, 'staticobjects/_exp10/palm_tree_slant_a', 60006), + (25270, 22822, 'staticobjects/_exp10/palm_tree_slant_b', 60006), + (25271, 22823, 'staticobjects/_exp10/palm_tree_slant_c', 60006), + (25272, 22824, 'staticobjects/_exp10/dr_dead_tree01', 60006), + (25273, 22825, 'staticobjects/_exp10/dr_dead_tree02', 60006), + (25274, 22826, 'staticobjects/_exp10/dr_small_tree_blue_01', 60006), + (25275, 22827, 'staticobjects/_exp10/dr_small_tree_blue_01_isle01', 60006), + (25276, 22828, 'staticobjects/_exp10/dr_small_tree_blue_01_isle03', 60006), + (25277, 22829, 'staticobjects/_exp10/dr_small_tree_blue_01_isle05', 60006), + (25278, 22830, 'staticobjects/_exp10/dr_small_tree_blue_01_isle07', 60006), + (25279, 22831, 'staticobjects/_exp10/dr_small_tree_blue_03', 60006), + (25280, 22832, 'staticobjects/_exp10/dr_small_tree_blue_03_isle01', 60006), + (25281, 22833, 'staticobjects/_exp10/dr_small_tree_blue_03_isle03', 60006), + (25282, 22834, 'staticobjects/_exp10/dr_small_tree_blue_03_isle05', 60006), + (25283, 22835, 'staticobjects/_exp10/dr_small_tree_blue_03_isle07', 60006), + (25284, 22836, 'staticobjects/_exp10/dr_small_tree_purple_02', 60006), + (25285, 22837, 'staticobjects/_exp10/dr_small_tree_purple_02_isle01', 60006), + (25286, 22838, 'staticobjects/_exp10/dr_small_tree_purple_02_isle03', 60006), + (25287, 22839, 'staticobjects/_exp10/dr_small_tree_purple_02_isle05', 60006), + (25288, 22840, 'staticobjects/_exp10/dr_small_tree_purple_02_isle07', 60006), + (25289, 22841, 'staticobjects/_exp10/dr_small_tree_yellow_01', 60006), + (25290, 22842, 'staticobjects/_exp10/dr_small_tree_yellow_01_isle01', 60006), + (25291, 22843, 'staticobjects/_exp10/dr_small_tree_yellow_01_isle03', 60006), + (25292, 22844, 'staticobjects/_exp10/dr_small_tree_yellow_03', 60006), + (25293, 22845, 'staticobjects/_exp10/dr_small_tree_yellow_03_isle01', 60006), + (25294, 22846, 'staticobjects/_exp10/dr_small_tree_yellow_03_isle03', 60006), + (25295, 22847, 'staticobjects/_exp10/dr_small_tree_yellow_03_isle05', 60006), + (25296, 22848, 'staticobjects/_exp10/dr_tree01_isle01', 60006), + (25297, 22849, 'staticobjects/_exp10/dr_tree01_isle02', 60006), + (25298, 22850, 'staticobjects/_exp10/dr_tree01_isle03', 60006), + (25299, 22851, 'staticobjects/_exp10/dr_tree01_isle05', 60006), + (25300, 22852, 'staticobjects/_exp10/dr_tree01_isle06', 60006), + (25301, 22853, 'staticobjects/_exp10/dr_tree01_isle07', 60006), + (25302, 22854, 'staticobjects/_exp10/dr_tree01_isle08', 60006), + (25303, 22855, 'staticobjects/_exp10/dr_tree02_isle01', 60006), + (25304, 22856, 'staticobjects/_exp10/dr_tree02_isle02', 60006), + (25305, 22857, 'staticobjects/_exp10/dr_tree02_isle03', 60006), + (25306, 22858, 'staticobjects/_exp10/dr_tree02_isle05', 60006), + (25307, 22859, 'staticobjects/_exp10/dr_tree02_isle06', 60006), + (25308, 22860, 'staticobjects/_exp10/dr_tree02_isle07', 60006), + (25309, 22861, 'staticobjects/_exp10/dr_tree02_isle08', 60006), + (25310, 22862, 'staticobjects/_exp10/hk_vanity_stool02', 60006), + (25311, 22863, 'staticobjects/_exp10/hk_vanity_table01', 60006), + (25312, 22864, 'staticobjects/_exp10/hk_vanity_wash_basin01', 60006), + (25313, 22865, 'staticobjects/_exp10/dr_bookcase01_withbooks_dpo', 60006), + (25314, 22866, 'staticobjects/_exp10/dr_bush01_blue_dpo', 60006), + (25315, 22867, 'staticobjects/_exp10/dr_bush01_orange_dpo', 60006), + (25316, 22868, 'staticobjects/_exp10/dr_bush01_purple_dpo', 60006), + (25317, 22869, 'staticobjects/_exp10/hk_banner01_dpo', 60006), + (25318, 22870, 'staticobjects/_exp10/hk_banner02_dpo', 60006), + (25319, 22871, 'staticobjects/_exp10/hk_book_openbook_upsidedown_blue_dpo', 60006), + (25320, 22872, 'staticobjects/_exp10/hk_book_openbook_upsidedown_red_dpo', 60006), + (25321, 22873, 'staticobjects/_exp10/hk_gaming_pawnpiece01_black', 60006), + (25322, 22874, 'staticobjects/_exp10/odso_hole_ext_planter_plants_dpo', 60006), + (25323, 22875, 'staticobjects/_exp10/pc_goblin_bowl02_withcandle_dpo', 60006), + (25324, 22876, 'staticobjects/_exp10/pick_jail_door_dpo', 60006), + (25325, 22877, 'staticobjects/_exp10/pick_maindoor_dpo', 60006), + (25326, 22878, 'staticobjects/_exp10/pick_vault_door_dpo', 60006), + (25327, 22879, 'staticobjects/_exp10/pik_safe01_dpo', 60006), + (25328, 22880, 'accessories/npc_wearables/shissar/shissar_hammer', 60006), + (25329, 22881, 'creatures/mounts/dragonfly_mount/dragonfly_mount_base', 60006), + (25330, 22882, 'staticobjects/_exp10/houseblock_1x1_column_ethernere', 60006), + (25331, 22883, 'staticobjects/_exp10/houseblock_1x2_column_ethernere', 60006), + (25332, 22884, 'staticobjects/_exp10/houseblock_1x2_divider_ethernere', 60006), + (25333, 22885, 'staticobjects/_exp10/houseblock_1xhalf_ethernere', 60006), + (25334, 22886, 'staticobjects/_exp10/houseblock_2x2_divider_ethernere', 60006), + (25335, 22887, 'staticobjects/_exp10/houseblock_rail_ethernere', 60006), + (25336, 22888, 'staticobjects/_exp10/houseblock_roundtile_ethernere', 60006), + (25337, 22889, 'staticobjects/_exp10/houseblock_stair_ethernere', 60006), + (25338, 22890, 'staticobjects/_exp10/housecube_1x1_block_ethernere', 60006), + (25339, 22891, 'staticobjects/_exp10/panel_ethernere', 60006), + (25340, 22892, 'staticobjects/_exp10/houseblock_1x1_column_faceless', 60006), + (25341, 22893, 'staticobjects/_exp10/houseblock_1x2_column_faceless', 60006), + (25342, 22894, 'staticobjects/_exp10/houseblock_1x2_divider_faceless', 60006), + (25343, 22895, 'staticobjects/_exp10/houseblock_1xhalf_faceless', 60006), + (25344, 22896, 'staticobjects/_exp10/houseblock_2x2_divider_faceless', 60006), + (25345, 22897, 'staticobjects/_exp10/houseblock_rail_faceless', 60006), + (25346, 22898, 'staticobjects/_exp10/houseblock_roundtile_faceless', 60006), + (25347, 22899, 'staticobjects/_exp10/houseblock_stair_faceless', 60006), + (25348, 22900, 'staticobjects/_exp10/housecube_1x1_block_faceless', 60006), + (25349, 22901, 'staticobjects/_exp10/panel_faceless', 60006), + (25350, 22902, 'staticobjects/_exp10/houseblock_1x1_column_nexus', 60006), + (25351, 22903, 'staticobjects/_exp10/houseblock_1x2_column_nexus', 60006), + (25352, 22904, 'staticobjects/_exp10/houseblock_1x2_divider_nexus', 60006), + (25353, 22905, 'staticobjects/_exp10/houseblock_1xhalf_nexus', 60006), + (25354, 22906, 'staticobjects/_exp10/houseblock_2x2_divider_nexus', 60006), + (25355, 22907, 'staticobjects/_exp10/houseblock_rail_nexus', 60006), + (25356, 22908, 'staticobjects/_exp10/houseblock_roundtile_nexus', 60006), + (25357, 22909, 'staticobjects/_exp10/houseblock_stair_nexus', 60006), + (25358, 22910, 'staticobjects/_exp10/housecube_1x1_block_nexus', 60006), + (25359, 22911, 'staticobjects/_exp10/panel_nexus', 60006), + (25360, 22912, 'staticobjects/_exp10/tov_obj_hangbase_w_swing_001_l0', 60006), + (25361, 22913, 'staticobjects/_exp10/tov_obj_torch_standing_fire_l0', 60006), + (25362, 22914, 'staticobjects/_exp10/dpo_shissar_brazier01', 60006), + (25363, 22915, 'staticobjects/_exp10/dpo_shissar_book01', 60006), + (25364, 22916, 'staticobjects/_exp10/dpo_shissar_book02', 60006), + (25365, 22917, 'staticobjects/_exp10/dpo_shissar_book03', 60006), + (25366, 22918, 'staticobjects/_exp10/dpo_shissar_book04', 60006), + (25367, 22919, 'staticobjects/_exp10/dpo_shissar_chest01_big', 60006), + (25368, 22920, 'staticobjects/_exp10/dpo_shissar_chest01_bigclosed', 60006), + (25369, 22921, 'staticobjects/_exp10/dpo_shissar_chest02', 60006), + (25370, 22922, 'staticobjects/_exp10/dpo_shissar_chest02_closed', 60006), + (25371, 22923, 'staticobjects/_exp10/dpo_shissar_chest03', 60006), + (25372, 22924, 'staticobjects/_exp10/dpo_shissar_chest03_closed', 60006), + (25373, 22925, 'staticobjects/_exp10/dpo_shissar_pillar01', 60006), + (25374, 22926, 'staticobjects/_exp10/hk_lightsource_chandalier_long01_swinging', 60006), + (25375, 22927, 'staticobjects/_exp10/dpo_shissar_statue01_brazier', 60006), + (25376, 22928, 'staticobjects/_exp10/dpo_shissar_statue02_brazier', 60006), + (25377, 22929, 'staticobjects/_exp10/dpo_shissar_vase01', 60006), + (25378, 22930, 'staticobjects/_exp09/df_objects_hanginglamp01_pfx', 60006), + (25379, 22931, 'staticobjects/_exp10/tov_obj_toy_castle_01', 60006), + (25380, 22932, 'accessories/npc_wearables/shissar/staff_shissar_mage', 60006), + (25381, 22933, 'accessories/npc_wearables/shissar/sword_shissar', 60006), + (25382, 22934, '_exp08/characters/monsters/dragon_made_golem/dragon_made_golem_ethernere_green', 60006), + (25383, 22935, '_exp08/characters/monsters/dragon_made_golem/dragon_made_golem_ethernere_violet', 60006), + (25384, 22936, 'accessories/wearable_items/profesion_hats/channeler/head', 60006), + (25385, 22937, 'staticobjects/_exp10/dpo_shissar_sconce01_dpo', 60006), + (25386, 22938, 'staticobjects/_exp10/dr_bush02_leaves_isle06', 60006), + (25387, 22939, 'staticobjects/_exp10/houseblock_stair_nexus', 60006), + (25388, 22940, 'staticobjects/_exp10/dr_dead_tree02', 60006), + (25389, 22941, 'staticobjects/_exp10/dr_small_tree_blue_01_isle01', 60006), + (25390, 22942, 'staticobjects/_exp10/dr_small_tree_blue_03_isle07', 60006), + (25391, 22943, 'staticobjects/_exp10/dr_small_tree_yellow_01', 60006), + (25392, 22944, 'staticobjects/_exp10/dr_small_tree_yellow_03_isle03', 60006), + (25393, 22945, 'staticobjects/_exp10/dr_small_tree_yellow_03_isle05', 60006), + (25394, 22946, 'staticobjects/_exp10/dr_tree01_isle06', 60006), + (25395, 22947, 'staticobjects/_exp10/dr_tree_isle06_tall01', 60006), + (25396, 22948, 'staticobjects/_exp10/ns_pine_tree_03', 60006), + (25397, 22949, 'staticobjects/_exp10/ns_pine_tree_evil_01', 60006), + (25398, 22950, 'staticobjects/_exp10/ns_pine_tree_evil_02', 60006), + (25399, 22951, 'staticobjects/_exp10/ns_pine_tree_evil_03', 60006), + (25400, 22952, 'staticobjects/_exp10/ns_pine_tree_evil_sapling_02', 60006), + (25401, 22953, 'staticobjects/_exp10/pc_goblin_jar02', 60006), + (25402, 22954, 'accessories/wearable_items/profesion_hats/channeler/head_mask', 60006), + (25403, 22955, 'staticobjects/_exp10/pc_goblin_miningtorch01_firefx_dpo', 60006), + (25404, 22956, 'staticobjects/_exp10/dr_castle_dragon_shrine_altar_dpo', 60006), + (25405, 22957, 'staticobjects/_exp10/dr_small_tree_yellow_03_isle03', 60006), + (25406, 22958, 'creatures/monsters/willowisp_ethernere01_green', 60006), + (25407, 22959, 'staticobjects/_exp10/dr_toy_block02', 60006), + (25408, 22960, 'staticobjects/_exp10/hk_bar_stool_red', 60006), + (25409, 22961, 'staticobjects/_exp10/dr_bush01_dpo', 60006), + (25410, 22962, 'accessories/wearable_items/_exp10/vesspyr_isles/attachments/forearm_left_green', 60006), + (25411, 22963, 'accessories/wearable_items/_exp10/vesspyr_isles/attachments/forearm_left_light', 60006), + (25412, 22964, 'accessories/wearable_items/_exp10/vesspyr_isles/attachments/forearm_left_redgold', 60006), + (25413, 22965, 'accessories/wearable_items/_exp10/vesspyr_isles/attachments/forearm_left_shadow', 60006), + (25414, 22966, 'accessories/wearable_items/_exp10/vesspyr_isles/attachments/forearm_right_blue', 60006), + (25415, 22967, 'accessories/wearable_items/_exp10/vesspyr_isles/attachments/forearm_right_bronze', 60006), + (25416, 22968, 'accessories/wearable_items/_exp10/vesspyr_isles/attachments/forearm_right_green', 60006), + (25417, 22969, 'accessories/wearable_items/_exp10/vesspyr_isles/attachments/forearm_right_light', 60006), + (25418, 22970, 'accessories/wearable_items/_exp10/vesspyr_isles/attachments/forearm_right_redgold', 60006), + (25419, 22971, 'accessories/wearable_items/_exp10/vesspyr_isles/attachments/forearm_right_shadow', 60006), + (25420, 22972, 'accessories/wearable_items/_exp10/vesspyr_isles/attachments/pauldron_robe_left_blue', 60006), + (25421, 22973, 'accessories/wearable_items/_exp10/vesspyr_isles/attachments/pauldron_robe_left_bronze', 60006), + (25422, 22974, 'accessories/wearable_items/_exp10/vesspyr_isles/attachments/pauldron_robe_left_green', 60006), + (25423, 22975, 'accessories/wearable_items/_exp10/vesspyr_isles/attachments/pauldron_robe_left_light', 60006), + (25424, 22976, 'accessories/wearable_items/_exp10/vesspyr_isles/attachments/pauldron_robe_left_redgold', 60006), + (25425, 22977, 'accessories/wearable_items/_exp10/vesspyr_isles/attachments/pauldron_robe_left_shadow', 60006), + (25426, 22978, 'accessories/wearable_items/_exp10/vesspyr_isles/attachments/pauldron_robe_right_blue', 60006), + (25427, 22979, 'accessories/wearable_items/_exp10/vesspyr_isles/attachments/pauldron_robe_right_bronze', 60006), + (25428, 22980, 'accessories/wearable_items/_exp10/vesspyr_isles/attachments/pauldron_robe_right_green', 60006), + (25429, 22981, 'accessories/wearable_items/_exp10/vesspyr_isles/attachments/pauldron_robe_right_light', 60006), + (25430, 22982, 'accessories/wearable_items/_exp10/vesspyr_isles/attachments/pauldron_robe_right_redgold', 60006), + (25431, 22983, 'accessories/wearable_items/_exp10/vesspyr_isles/attachments/pauldron_robe_right_shadow', 60006), + (25432, 22984, 'accessories/wearable_items/_exp10/vesspyr_isles/attachments/shin_left_blue', 60006), + (25433, 22985, 'accessories/wearable_items/_exp10/vesspyr_isles/attachments/shin_left_bronze', 60006), + (25434, 22986, 'accessories/wearable_items/_exp10/vesspyr_isles/attachments/shin_left_green', 60006), + (25435, 22987, 'accessories/wearable_items/_exp10/vesspyr_isles/attachments/shin_left_light', 60006), + (25436, 22988, 'accessories/wearable_items/_exp10/vesspyr_isles/attachments/shin_left_redgold', 60006), + (25437, 22989, 'accessories/wearable_items/_exp10/vesspyr_isles/attachments/shin_left_shadow', 60006), + (25438, 22990, 'accessories/wearable_items/_exp10/vesspyr_isles/attachments/shin_right_blue', 60006), + (25439, 22991, 'accessories/wearable_items/_exp10/vesspyr_isles/attachments/shin_right_bronze', 60006), + (25440, 22992, 'accessories/wearable_items/_exp10/vesspyr_isles/attachments/shin_right_green', 60006), + (25441, 22993, 'accessories/wearable_items/_exp10/vesspyr_isles/attachments/shin_right_light', 60006), + (25442, 22994, 'accessories/wearable_items/_exp10/vesspyr_isles/attachments/shin_right_redgold', 60006), + (25443, 22995, 'accessories/wearable_items/_exp10/vesspyr_isles/attachments/shin_right_shadow', 60006), + (25444, 22996, 'accessories/wearable_items/_exp10/vesspyr_isles/attachments/shoulders_pauldron_heavy_left_blue', 60006), + (25445, 22997, 'accessories/wearable_items/_exp10/vesspyr_isles/attachments/shoulders_pauldron_heavy_left_bronze', 60006), + (25446, 22998, 'accessories/wearable_items/_exp10/vesspyr_isles/attachments/shoulders_pauldron_heavy_left_green', 60006), + (25447, 22999, 'accessories/wearable_items/_exp10/vesspyr_isles/attachments/shoulders_pauldron_heavy_left_light', 60006), + (25448, 23000, 'accessories/wearable_items/_exp10/vesspyr_isles/attachments/shoulders_pauldron_heavy_left_redgold', 60006), + (25449, 23001, 'accessories/wearable_items/_exp10/vesspyr_isles/attachments/shoulders_pauldron_heavy_left_shadow', 60006), + (25450, 23002, 'accessories/wearable_items/_exp10/vesspyr_isles/attachments/shoulders_pauldron_heavy_right_blue', 60006), + (25451, 23003, 'accessories/wearable_items/_exp10/vesspyr_isles/attachments/shoulders_pauldron_heavy_right_bronze', 60006), + (25452, 23004, 'accessories/wearable_items/_exp10/vesspyr_isles/attachments/shoulders_pauldron_heavy_right_green', 60006), + (25453, 23005, 'accessories/wearable_items/_exp10/vesspyr_isles/attachments/shoulders_pauldron_heavy_right_light', 60006), + (25454, 23006, 'accessories/wearable_items/_exp10/vesspyr_isles/attachments/shoulders_pauldron_heavy_right_redgold', 60006), + (25455, 23007, 'accessories/wearable_items/_exp10/vesspyr_isles/attachments/shoulders_pauldron_heavy_right_shadow', 60006), + (25456, 23008, 'accessories/wearable_items/_exp10/vesspyr_isles/attachments/shoulders_pauldron_heavy2_left_blue', 60006), + (25457, 23009, 'accessories/wearable_items/_exp10/vesspyr_isles/attachments/shoulders_pauldron_heavy2_left_bronze', 60006), + (25458, 23010, 'accessories/wearable_items/_exp10/vesspyr_isles/attachments/shoulders_pauldron_heavy2_left_green', 60006), + (25459, 23011, 'accessories/wearable_items/_exp10/vesspyr_isles/attachments/shoulders_pauldron_heavy2_left_light', 60006), + (25460, 23012, 'accessories/wearable_items/_exp10/vesspyr_isles/attachments/shoulders_pauldron_heavy2_left_redgold', 60006), + (25461, 23013, 'accessories/wearable_items/_exp10/vesspyr_isles/attachments/shoulders_pauldron_heavy2_left_shadow', 60006), + (25462, 23014, 'accessories/wearable_items/_exp10/vesspyr_isles/attachments/shoulders_pauldron_heavy2_right_blue', 60006), + (25463, 23015, 'accessories/wearable_items/_exp10/vesspyr_isles/attachments/shoulders_pauldron_heavy2_right_bronze', 60006), + (25464, 23016, 'accessories/wearable_items/_exp10/vesspyr_isles/attachments/shoulders_pauldron_heavy2_right_green', 60006), + (25465, 23017, 'accessories/wearable_items/_exp10/vesspyr_isles/attachments/shoulders_pauldron_heavy2_right_light', 60006), + (25466, 23018, 'accessories/wearable_items/_exp10/vesspyr_isles/attachments/shoulders_pauldron_heavy2_right_redgold', 60006), + (25467, 23019, 'accessories/wearable_items/_exp10/vesspyr_isles/attachments/shoulders_pauldron_heavy2_right_shadow', 60006), + (25468, 23020, 'accessories/wearable_items/_exp10/vesspyr_isles/attachments/shoulders_pauldron_light_left_blue', 60006), + (25469, 23021, 'accessories/wearable_items/_exp10/vesspyr_isles/attachments/shoulders_pauldron_light_left_bronze', 60006), + (25470, 23022, 'accessories/wearable_items/_exp10/vesspyr_isles/attachments/shoulders_pauldron_light_left_green', 60006), + (25471, 23023, 'accessories/wearable_items/_exp10/vesspyr_isles/attachments/shoulders_pauldron_light_left_light', 60006), + (25472, 23024, 'accessories/wearable_items/_exp10/vesspyr_isles/attachments/shoulders_pauldron_light_left_redgold', 60006), + (25473, 23025, 'accessories/wearable_items/_exp10/vesspyr_isles/attachments/shoulders_pauldron_light_left_shadow', 60006), + (25474, 23026, 'accessories/wearable_items/_exp10/vesspyr_isles/attachments/shoulders_pauldron_light_right_blue', 60006), + (25475, 23027, 'accessories/wearable_items/_exp10/vesspyr_isles/attachments/shoulders_pauldron_light_right_bronze', 60006), + (25476, 23028, 'accessories/wearable_items/_exp10/vesspyr_isles/attachments/shoulders_pauldron_light_right_green', 60006), + (25477, 23029, 'accessories/wearable_items/_exp10/vesspyr_isles/attachments/shoulders_pauldron_light_right_light', 60006), + (25478, 23030, 'accessories/wearable_items/_exp10/vesspyr_isles/attachments/shoulders_pauldron_light_right_redgold', 60006), + (25479, 23031, 'accessories/wearable_items/_exp10/vesspyr_isles/attachments/shoulders_pauldron_light_right_shadow', 60006), + (25480, 23032, 'accessories/wearable_items/_exp10/vesspyr_isles/attachments/shoulders_pauldron_light2_left_blue', 60006), + (25481, 23033, 'accessories/wearable_items/_exp10/vesspyr_isles/attachments/shoulders_pauldron_light2_left_bronze', 60006), + (25482, 23034, 'accessories/wearable_items/_exp10/vesspyr_isles/attachments/shoulders_pauldron_light2_left_green', 60006), + (25483, 23035, 'accessories/wearable_items/_exp10/vesspyr_isles/attachments/shoulders_pauldron_light2_left_light', 60006), + (25484, 23036, 'accessories/wearable_items/_exp10/vesspyr_isles/attachments/shoulders_pauldron_light2_left_redgold', 60006), + (25485, 23037, 'accessories/wearable_items/_exp10/vesspyr_isles/attachments/shoulders_pauldron_light2_left_shadow', 60006), + (25486, 23038, 'accessories/wearable_items/_exp10/vesspyr_isles/attachments/shoulders_pauldron_light2_right_blue', 60006), + (25487, 23039, 'accessories/wearable_items/_exp10/vesspyr_isles/attachments/shoulders_pauldron_light2_right_bronze', 60006), + (25488, 23040, 'accessories/wearable_items/_exp10/vesspyr_isles/attachments/shoulders_pauldron_light2_right_green', 60006), + (25489, 23041, 'accessories/wearable_items/_exp10/vesspyr_isles/attachments/shoulders_pauldron_light2_right_light', 60006), + (25490, 23042, 'accessories/wearable_items/_exp10/vesspyr_isles/attachments/shoulders_pauldron_light2_right_redgold', 60006), + (25491, 23043, 'accessories/wearable_items/_exp10/vesspyr_isles/attachments/shoulders_pauldron_light2_right_shadow', 60006), + (25492, 23044, 'accessories/wearable_items/_exp10/vesspyr_isles/cloth_shadow/chest_epic', 60006), + (25493, 23045, 'accessories/wearable_items/_exp10/vesspyr_isles/leather_blue/shoulders_epic', 60006), + (25494, 23046, 'accessories/wearable_items/_exp10/vesspyr_isles/leather_dark/shoulders_epic', 60006), + (25495, 23047, 'accessories/wearable_items/_exp10/vesspyr_isles/leather_green/shoulders_epic', 60006), + (25496, 23048, 'accessories/wearable_items/_exp10/vesspyr_isles/leather_red/shoulders_epic', 60006), + (25497, 23049, 'accessories/wearable_items/_exp10/vesspyr_isles/robe_blue/chest_epic', 60006), + (25498, 23050, 'accessories/wearable_items/_exp10/vesspyr_isles/robe_green/chest_epic', 60006), + (25499, 23051, 'accessories/wearable_items/_exp10/vesspyr_isles/robe_red/chest_epic', 60006), + (25500, 23052, 'accessories/wearable_items/_exp10/vesspyr_isles/robe_shadow/chest_epic', 60006), + (25501, 23053, 'accessories/wearable_items/_exp10/vesspyr_isles/vanguard_bronze/hands_epic', 60006), + (25502, 23054, 'accessories/wearable_items/_exp10/vesspyr_isles/vanguard_bronze/shoulders_epic2', 60006), + (25503, 23055, 'accessories/wearable_items/_exp10/vesspyr_isles/vanguard_bronze/legs_epic', 60006), + (25504, 23056, 'accessories/wearable_items/_exp10/vesspyr_isles/vanguard_iron/hands_epic', 60006), + (25505, 23057, 'accessories/wearable_items/_exp10/vesspyr_isles/vanguard_iron/legs_epic', 60006), + (25506, 23058, 'accessories/wearable_items/_exp10/vesspyr_isles/vanguard_iron/shoulders_epic2', 60006), + (25507, 23059, 'accessories/wearable_items/_exp10/vesspyr_isles/vanguard_light/hands_epic', 60006), + (25508, 23060, 'accessories/wearable_items/_exp10/vesspyr_isles/vanguard_light/legs_epic', 60006), + (25509, 23061, 'accessories/wearable_items/_exp10/vesspyr_isles/vanguard_light/shoulders_epic2', 60006), + (25510, 23062, 'accessories/wearable_items/_exp10/vesspyr_isles/vanguard_redgold/hands_epic', 60006), + (25511, 23063, 'accessories/wearable_items/_exp10/vesspyr_isles/vanguard_redgold/legs_epic', 60006), + (25512, 23064, 'accessories/wearable_items/_exp10/vesspyr_isles/vanguard_redgold/shoulders_epic2', 60006), + (25513, 23065, 'accessories/wearable_items/_exp10/vesspyr_isles/vanguard_shadow/hands_epic', 60006), + (25514, 23066, 'accessories/wearable_items/_exp10/vesspyr_isles/vanguard_shadow/legs_epic', 60006), + (25515, 23067, 'accessories/wearable_items/_exp10/vesspyr_isles/vanguard_shadow/shoulders_epic2', 60006), + (25516, 23068, 'accessories/wieldable_items/weapons/exp10/1h_pierce/bixie_dagger', 60006), + (25517, 23069, 'accessories/wieldable_items/weapons/exp10/1h_sword/bixie_sword', 60006), + (25518, 23070, 'accessories/wieldable_items/shields/exp10/bixie_round_shield', 60006), + (25519, 23071, 'projectiles/spell_billiard_ball', 60006), + (25520, 23072, '_exp10/objects/exp10_dun_shissar_temple_01/architect_boss_objects/cage_collision_dpo', 60006), + (25521, 23073, '_exp10/objects/exp10_dun_shissar_temple_01/architect_boss_objects/cage_dpo', 60006), + (25522, 23074, '_exp10/objects/exp10_dun_shissar_temple_01/architect_boss_objects/cage_warning_dpo', 60006), + (25523, 23075, '_exp10/objects/exp10_dun_shissar_temple_01/architect_boss_objects/monument_dpo', 60006), + (25524, 23076, '_exp10/objects/exp10_dun_shissar_temple_01/architect_boss_objects/pyramid_dpo', 60006), + (25525, 23077, '_exp10/objects/exp10_dun_shissar_temple_01/mage_boss_objects/center_lightning_blue_quadrant_01_dpo', 60006), + (25526, 23078, '_exp10/objects/exp10_dun_shissar_temple_01/mage_boss_objects/center_lightning_blue_quadrant_02_dpo', 60006), + (25527, 23079, '_exp10/objects/exp10_dun_shissar_temple_01/mage_boss_objects/center_lightning_blue_quadrant_03_dpo', 60006), + (25528, 23080, '_exp10/objects/exp10_dun_shissar_temple_01/mage_boss_objects/center_lightning_blue_quadrant_04_dpo', 60006), + (25529, 23081, '_exp10/objects/exp10_dun_shissar_temple_01/mage_boss_objects/center_lightning_green_quadrant_01_dpo', 60006), + (25530, 23082, '_exp10/objects/exp10_dun_shissar_temple_01/mage_boss_objects/center_lightning_green_quadrant_02_dpo', 60006), + (25531, 23083, '_exp10/objects/exp10_dun_shissar_temple_01/mage_boss_objects/center_lightning_green_quadrant_03_dpo', 60006), + (25532, 23084, '_exp10/objects/exp10_dun_shissar_temple_01/mage_boss_objects/center_lightning_green_quadrant_04_dpo', 60006), + (25533, 23085, '_exp10/objects/exp10_dun_shissar_temple_01/mage_boss_objects/center_lightning_red_quadrant_01_dpo', 60006), + (25534, 23086, '_exp10/objects/exp10_dun_shissar_temple_01/mage_boss_objects/center_lightning_red_quadrant_02_dpo', 60006), + (25535, 23087, '_exp10/objects/exp10_dun_shissar_temple_01/mage_boss_objects/center_lightning_red_quadrant_03_dpo', 60006), + (25536, 23088, '_exp10/objects/exp10_dun_shissar_temple_01/mage_boss_objects/center_lightning_red_quadrant_04_dpo', 60006), + (25537, 23089, '_exp10/objects/exp10_dun_shissar_temple_01/mage_boss_objects/center_lightning_yellow_quadrant_01_dpo', 60006), + (25538, 23090, '_exp10/objects/exp10_dun_shissar_temple_01/mage_boss_objects/center_lightning_yellow_quadrant_02_dpo', 60006), + (25539, 23091, '_exp10/objects/exp10_dun_shissar_temple_01/mage_boss_objects/center_lightning_yellow_quadrant_03_dpo', 60006), + (25540, 23092, '_exp10/objects/exp10_dun_shissar_temple_01/mage_boss_objects/center_lightning_yellow_quadrant_04_dpo', 60006), + (25541, 23093, '_exp10/objects/exp10_dun_shissar_temple_01/mage_boss_objects/lightning_blue_quadrant_01_dpo', 60006), + (25542, 23094, '_exp10/objects/exp10_dun_shissar_temple_01/mage_boss_objects/lightning_blue_quadrant_02_dpo', 60006), + (25543, 23095, '_exp10/objects/exp10_dun_shissar_temple_01/mage_boss_objects/lightning_blue_quadrant_03_dpo', 60006), + (25544, 23096, '_exp10/objects/exp10_dun_shissar_temple_01/mage_boss_objects/lightning_blue_quadrant_04_dpo', 60006), + (25545, 23097, '_exp10/objects/exp10_dun_shissar_temple_01/mage_boss_objects/lightning_green_quadrant_01_dpo', 60006), + (25546, 23098, '_exp10/objects/exp10_dun_shissar_temple_01/mage_boss_objects/lightning_green_quadrant_02_dpo', 60006), + (25547, 23099, '_exp10/objects/exp10_dun_shissar_temple_01/mage_boss_objects/lightning_green_quadrant_03_dpo', 60006), + (25548, 23100, '_exp10/objects/exp10_dun_shissar_temple_01/mage_boss_objects/lightning_green_quadrant_04_dpo', 60006), + (25549, 23101, '_exp10/objects/exp10_dun_shissar_temple_01/mage_boss_objects/lightning_red_quadrant_01_dpo', 60006), + (25550, 23102, '_exp10/objects/exp10_dun_shissar_temple_01/mage_boss_objects/lightning_red_quadrant_02_dpo', 60006), + (25551, 23103, '_exp10/objects/exp10_dun_shissar_temple_01/mage_boss_objects/lightning_red_quadrant_03_dpo', 60006), + (25552, 23104, '_exp10/objects/exp10_dun_shissar_temple_01/mage_boss_objects/lightning_red_quadrant_04_dpo', 60006), + (25553, 23105, '_exp10/objects/exp10_dun_shissar_temple_01/mage_boss_objects/lightning_yellow_quadrant_01_dpo', 60006), + (25554, 23106, '_exp10/objects/exp10_dun_shissar_temple_01/mage_boss_objects/lightning_yellow_quadrant_02_dpo', 60006), + (25555, 23107, '_exp10/objects/exp10_dun_shissar_temple_01/mage_boss_objects/lightning_yellow_quadrant_03_dpo', 60006), + (25556, 23108, '_exp10/objects/exp10_dun_shissar_temple_01/mage_boss_objects/lightning_yellow_quadrant_04_dpo', 60006), + (25557, 23109, '_exp10/objects/exp10_dun_shissar_temple_01/mage_boss_objects/warning_blue_quadrant_01_dpo', 60006), + (25558, 23110, '_exp10/objects/exp10_dun_shissar_temple_01/mage_boss_objects/warning_blue_quadrant_02_dpo', 60006), + (25559, 23111, '_exp10/objects/exp10_dun_shissar_temple_01/mage_boss_objects/warning_blue_quadrant_03_dpo', 60006), + (25560, 23112, '_exp10/objects/exp10_dun_shissar_temple_01/mage_boss_objects/warning_blue_quadrant_04_dpo', 60006), + (25561, 23113, '_exp10/objects/exp10_dun_shissar_temple_01/mage_boss_objects/warning_green_quadrant_01_dpo', 60006), + (25562, 23114, '_exp10/objects/exp10_dun_shissar_temple_01/mage_boss_objects/warning_green_quadrant_02_dpo', 60006), + (25563, 23115, '_exp10/objects/exp10_dun_shissar_temple_01/mage_boss_objects/warning_green_quadrant_03_dpo', 60006), + (25564, 23116, '_exp10/objects/exp10_dun_shissar_temple_01/mage_boss_objects/warning_green_quadrant_04_dpo', 60006), + (25565, 23117, '_exp10/objects/exp10_dun_shissar_temple_01/mage_boss_objects/warning_red_quadrant_01_dpo', 60006), + (25566, 23118, '_exp10/objects/exp10_dun_shissar_temple_01/mage_boss_objects/warning_red_quadrant_02_dpo', 60006), + (25567, 23119, '_exp10/objects/exp10_dun_shissar_temple_01/mage_boss_objects/warning_red_quadrant_03_dpo', 60006), + (25568, 23120, '_exp10/objects/exp10_dun_shissar_temple_01/mage_boss_objects/warning_red_quadrant_04_dpo', 60006), + (25569, 23121, '_exp10/objects/exp10_dun_shissar_temple_01/mage_boss_objects/warning_yellow_quadrant_01_dpo', 60006), + (25570, 23122, '_exp10/objects/exp10_dun_shissar_temple_01/mage_boss_objects/warning_yellow_quadrant_02_dpo', 60006), + (25571, 23123, '_exp10/objects/exp10_dun_shissar_temple_01/mage_boss_objects/warning_yellow_quadrant_03_dpo', 60006), + (25572, 23124, '_exp10/objects/exp10_dun_shissar_temple_01/mage_boss_objects/warning_yellow_quadrant_04_dpo', 60006), + (25573, 23125, '_exp10/objects/dr_weapon_rack_empty', 60006), + (25574, 23126, '_exp10/objects/dr_weapon_rack_full', 60006), + (25575, 23127, 'accessories/wieldable_items/weapons/axe/pick_axe/pick_axe_2013', 60006), + (25576, 23128, 'accessories/wieldable_items/weapons/axe/pick_axe/pick_axe_2013_burnt', 60006), + (25577, 23129, 'accessories/wieldable_items/weapons/exp08/2h_sword/exp08_2hsword_fire', 60006), + (25578, 23130, '_exp10/characters/monsters/blood_nayad/blood_nayad', 60006), + (25579, 23131, '_exp10/objects/pickclaw_mining_cart_dpo', 60006), + (25580, 23132, '_exp10/objects/pickclaw_barrel_dpo', 60006), + (25581, 23133, 'playerstudio/characters/weapons/1h_sword/blue_dust_blade/blue_dust_blade', 60006), + (25582, 23134, '_exp09/characters/tool_users/ethenere_npcs/halfelf_female_ethenere', 60006), + (25583, 23135, '_exp10/objects/exp10_dun_shissar_temple_01/stratum_progression_objects/exp10_dun_shissarstratum01_glowinghammer01_dpo', 60006), + (25584, 23136, '_exp10/objects/exp10_dun_shissar_temple_01/stratum_progression_objects/exp10_dun_shissarstratum01_glowingsword01_dpo', 60006), + (25585, 23137, '_exp10/objects/exp10_dun_shissar_temple_01/stratum_progression_objects/exp10_dun_shissarstratum01_mainstatue_mainstatue01_glowart_dpo', 60006), + (25586, 23138, '_exp10/objects/exp10_dun_shissar_temple_01/stratum_progression_objects/exp10_dun_shissarstratum01_mainstatue_mainstatue01_glowemp_dpo', 60006), + (25587, 23139, '_exp10/objects/exp10_dun_shissar_temple_01/stratum_progression_objects/exp10_dun_shissarstratum01_mainstatue_mainstatue01_glowmage_dpo', 60006), + (25588, 23140, '_exp10/objects/exp10_dun_shissar_temple_01/stratum_progression_objects/exp10_dun_shissarstratum01_mainstatue_mainstatue01_glowwar_dpo', 60006), + (25589, 23141, '_exp10/objects/exp10_dun_shissar_temple_01/stratum_progression_objects/glowing_crystal01_norings_dpo', 60006), + (25590, 23142, '_exp10/objects/exp10_dun_shissar_temple_01/stratum_progression_objects/glowingsymbol01_mainstatue01_dpo', 60006), + (25591, 23143, 'projectiles/spell_bitten_apple', 60006), + (25592, 23144, 'projectiles/spell_fish_eaten', 60006), + (25593, 23145, 'projectiles/spell_lime_half', 60006), + (25594, 23146, 'projectiles/spell_metal_bowl', 60006), + (25595, 23147, 'projectiles/spell_orange_half', 60006), + (25596, 23148, 'projectiles/spell_wine_goblet', 60006), + (25597, 23149, 'projectiles/spell_winebottle', 60006), + (25598, 23150, 'accessories/wieldable_items/weapons/exp10/bow/longbow_channeler_epic', 60006), + (25599, 23151, '_exp10/objects/exp10_dun_shissar_temple_01/stratum_progression_objects/glowingsymbol01_dpo', 60006), + (25600, 23152, 'accessories/npc_wearables/bolgin/bolgin_helm', 60006), + (25601, 23153, 'accessories/wearable_items/_exp09/starter_armor/channeler/chest', 60006), + (25602, 23154, 'accessories/wearable_items/_exp09/starter_armor/channeler/feet', 60006), + (25603, 23155, 'accessories/wearable_items/_exp09/starter_armor/channeler/forearms', 60006), + (25604, 23156, 'accessories/wearable_items/_exp09/starter_armor/channeler/hands', 60006), + (25605, 23157, 'accessories/wearable_items/_exp09/starter_armor/channeler/head', 60006), + (25606, 23158, 'accessories/wearable_items/_exp09/starter_armor/channeler/legs', 60006), + (25607, 23159, 'accessories/wearable_items/_exp09/starter_armor/channeler/legs_noskirt', 60006), + (25608, 23160, 'accessories/wearable_items/_exp09/starter_armor/channeler/shoulders', 60006), + (25609, 23161, 'accessories/wearable_items/_exp09/starter_armor/channeler/skirt', 60006), + (25610, 23162, 'accessories/wieldable_items/weapons/exp10/bow/longbow_channeler_epic_raid', 60006), + (25611, 23163, '_exp10/objects/exp10_dun_shissar_temple_01/stratum_progression_objects/exp10_dun_shissarstratum01_mainstatue_mainstatue01_eyeglow01_dpo', 60006), + (25612, 23164, '_exp10/objects/exp10_dun_shissar_temple_01/stratum_progression_objects/waterfall01_dpo', 60006), + (25613, 23165, 'accessories/wieldable_items/weapons/exp10/1h_crush/1h_crush_shissar_hammer', 60006), + (25614, 23166, 'accessories/wieldable_items/weapons/exp10/1h_sword/sword_shissar', 60006), + (25615, 23167, 'accessories/wieldable_items/weapons/exp10/staff/exp10_2h_staff_shissar_mage', 60006), + (25616, 23168, 'accessories/wearable_items/_exp10/highpass_hold/robe_chain/chest', 60006), + (25617, 23169, 'accessories/wearable_items/_exp10/highpass_hold/robe_chain/feet', 60006), + (25618, 23170, 'accessories/wearable_items/_exp10/highpass_hold/robe_chain/hands', 60006), + (25619, 23171, 'accessories/wearable_items/_exp10/highpass_hold/robe_chain/pants', 60006), + (25620, 23172, 'accessories/wearable_items/_exp10/highpass_hold/vanguard_basic/chest', 60006), + (25621, 23173, 'accessories/wearable_items/_exp10/highpass_hold/vanguard_basic/feet', 60006), + (25622, 23174, 'accessories/wearable_items/_exp10/highpass_hold/vanguard_basic/forearms', 60006), + (25623, 23175, 'accessories/wearable_items/_exp10/highpass_hold/vanguard_basic/hands', 60006), + (25624, 23176, 'accessories/wearable_items/_exp10/highpass_hold/vanguard_basic/head', 60006), + (25625, 23177, 'accessories/wearable_items/_exp10/highpass_hold/vanguard_basic/left', 60006), + (25626, 23178, 'accessories/wearable_items/_exp10/highpass_hold/vanguard_basic/legs_noskirt', 60006), + (25627, 23179, 'accessories/wearable_items/_exp10/highpass_hold/vanguard_basic/right', 60006), + (25628, 23180, 'accessories/wearable_items/_exp10/highpass_hold/vanguard_basic/shoulders', 60006), + (25629, 23181, 'accessories/wearable_items/_exp10/highpass_hold/vanguard_basic/shoulders_nopauldrons', 60006), + (25630, 23182, 'accessories/wearable_items/_exp10/highpass_hold/vanguard_basic/skirt', 60006), + (25631, 23183, 'accessories/wearable_items/_exp10/highpass_hold/robe_chain/head_centurionhelm', 60006), + (25632, 23184, '_exp10/characters/tool_users/aerakyn/aerakyn_geradin', 60006), + (25633, 23185, 'staticobjects/_exp09/dc_room037_alchemy_spear02_dpo', 60006), + (25634, 23186, 'staticobjects/_exp09/dc_room037_alchemy_spear01_dpo', 60006), + (25635, 23187, 'staticobjects/_exp09/dc_room037_table001', 60006), + (25636, 23188, 'staticobjects/_exp09/dc_room037_alchemy_spear02', 60006), + (25637, 23189, 'staticobjects/_exp09/dc_room037_alchemy_orb01', 60006), + (25638, 23190, 'staticobjects/_exp09/dc_room037_alchemy_flask01', 60006), + (25639, 23191, 'staticobjects/guildhall/trophies/floor_zlandicar_head', 60006), + (25640, 23192, 'staticobjects/guildhall/trophies/floor_klandicar_head', 60006), + (25641, 23193, 'staticobjects/guildhall/trophies/floor_grendish_head', 60006), + (25642, 23194, 'staticobjects/guildhall/trophies/floor_shissar_statue_emperor', 60006), + (25643, 23195, 'staticobjects/beds/dpo_clean_bedroll', 60006), + (25644, 23196, '_exp10/characters/tool_users/alkabor/alkabor_base', 60006), + (25645, 23197, '_exp10/objects/exp10_dun_shissar_temple_01/architect_boss_objects/cage_02_dpo', 60006), + (25646, 23198, '_exp10/objects/exp10_dun_shissar_temple_01/architect_boss_objects/cage_collision_02_dpo', 60006), + (25647, 23199, 'projectiles/spell_coal', 60006), + (25648, 23200, '_exp10/characters/monsters/wyvern_aerakyn/wyvern_aerakyn_base', 60006), + (25649, 23201, 'accessories/wearable_items/_exp10/spider_armor/chest', 60006), + (25650, 23202, 'accessories/wearable_items/_exp10/spider_armor/feet', 60006), + (25651, 23203, 'accessories/wearable_items/_exp10/spider_armor/forearms', 60006), + (25652, 23204, 'accessories/wearable_items/_exp10/spider_armor/hands', 60006), + (25653, 23205, 'accessories/wearable_items/_exp10/spider_armor/head', 60006), + (25654, 23206, 'accessories/wearable_items/_exp10/spider_armor/legs', 60006), + (25655, 23207, 'accessories/wearable_items/_exp10/spider_armor/legs_noskirt', 60006), + (25656, 23208, 'accessories/wearable_items/_exp10/spider_armor/right', 60006), + (25657, 23209, 'accessories/wearable_items/_exp10/spider_armor/shoulders', 60006), + (25658, 23210, 'accessories/wearable_items/_exp10/spider_armor/shoulders_nopauldrons', 60006), + (25659, 23211, 'accessories/wearable_items/_exp10/spider_armor/skirt', 60006), + (25660, 23212, 'accessories/wearable_items/_exp10/spider_armor/snap_ons/pauldron_left', 60006), + (25661, 23213, 'accessories/wearable_items/_exp10/spider_armor/snap_ons/pauldron_right', 60006), + (25662, 23214, 'staticobjects/_exp09/jungle_tree_03', 60006), + (25663, 23215, 'playerstudio/houseitems/mistmoore_sconce', 60006), + (25664, 23216, 'playerstudio/houseitems/mistmoore_chandelier', 60006), + (25665, 23217, 'playerstudio/houseitems/mistmoore_candelabra', 60006), + (25666, 23218, 'playerstudio/houseitems/altar_immolation', 60006), + (25667, 23219, 'playerstudio/houseitems/cemmetarygate_arch', 60006), + (25668, 23220, 'playerstudio/houseitems/cemmetarygate_fence', 60006), + (25669, 23221, 'playerstudio/houseitems/darkelf_coach', 60006), + (25670, 23222, 'playerstudio/houseitems/darkelf_organ', 60006), + (25671, 23223, 'playerstudio/houseitems/eerie_punchbowl', 60006), + (25672, 23224, 'playerstudio/houseitems/neriak_door', 60006), + (25673, 23225, 'playerstudio/houseitems/painting_creaturenight', 60006), + (25674, 23226, 'playerstudio/houseitems/painting_nightride', 60006), + (25675, 23227, 'playerstudio/houseitems/tierdal_tome', 60006), + (25676, 23228, 'playerstudio/houseitems/witch_broom', 60006), + (25677, 23229, 'projectiles/spell_barrel_rum', 60006), + (25678, 23230, 'staticobjects/portals/druid_ring_portal_static', 60006), + (25679, 23231, 'staticobjects/liveevent/halloween/dpo_le_skulltome01', 60006), + (25680, 23232, 'staticobjects/liveevent/halloween/dpo_le_skulltome02', 60006), + (25681, 23233, 'staticobjects/liveevent/halloween/dpo_le_skulltome03', 60006), + (25682, 23234, 'accessories/wieldable_items/shields/exp10/shield_aerakyn_glow', 60006), + (25683, 23235, 'accessories/wieldable_items/shields/exp10/shield_aerakyn', 60006), + (25684, 23236, 'accessories/wieldable_items/weapons/exp10/1h_crush/hammer_aerakyn', 60006), + (25685, 23237, 'accessories/wieldable_items/weapons/exp10/1h_crush/hammer_aerakyn_glow', 60006), + (25686, 23238, 'accessories/wieldable_items/weapons/exp10/1h_pierce/dagger_aerakyn', 60006), + (25687, 23239, 'accessories/wieldable_items/weapons/exp10/1h_pierce/dagger_aerakyn_glow', 60006), + (25688, 23240, 'accessories/wieldable_items/weapons/exp10/1h_sword/sword_aerakyn_glow', 60006), + (25689, 23241, 'accessories/wieldable_items/weapons/exp10/1h_sword/sword_aerakyn', 60006), + (25690, 23242, 'accessories/wieldable_items/weapons/exp10/staff/staff_aerakyn', 60006), + (25691, 23243, 'accessories/wieldable_items/weapons/exp10/staff/staff_aerakyn_glow', 60006), + (25692, 23244, 'staticobjects/liveevent/halloween/notd_meatbowl01', 60006), + (25693, 23245, 'staticobjects/liveevent/halloween/notd_meatbowl02', 60006), + (25694, 23246, 'staticobjects/liveevent/halloween/notd_meatbowl03', 60006), + (25695, 23247, '_exp09/characters/monsters/skyshrine_drake/skyshrine_drake_black_fly', 60006), + (25696, 23248, '_exp09/characters/monsters/skyshrine_drake/skyshrine_drake_blue_fly', 60006), + (25697, 23249, '_exp09/characters/monsters/skyshrine_drake/skyshrine_drake_gold_fly', 60006), + (25698, 23250, '_exp09/characters/monsters/skyshrine_drake/skyshrine_drake_green_fly', 60006), + (25699, 23251, '_exp09/characters/monsters/skyshrine_drake/skyshrine_drake_red_fly', 60006), + (25700, 23252, '_exp10/characters/tool_users/goblin_highkeep/goblin_highkeep_crazy_run_walk', 60006), + (25701, 23253, '_exp10/characters/tool_users/goblin_highkeep/goblin_highkeep_fighter_crazy_run_walk', 60006), + (25702, 23254, '_exp10/characters/tool_users/goblin_highkeep/goblin_highkeep_heavy_crazy_run_walk', 60006), + (25703, 23255, '_exp10/characters/tool_users/goblin_highkeep/goblin_highkeep_lackey_crazy_run_walk', 60006), + (25704, 23256, '_exp10/characters/tool_users/goblin_highkeep/goblin_highkeep_messy_crazy_run_walk', 60006), + (25705, 23257, 'accessories/wieldable_items/weapons/exp10/1h_crush/hammer_ethernere', 60006), + (25706, 23258, 'accessories/wieldable_items/weapons/exp10/1h_crush/ethernere_scepter', 60006), + (25707, 23259, 'accessories/wieldable_items/weapons/exp10/1h_crush/ethernere_wand', 60006), + (25708, 23260, 'accessories/wieldable_items/weapons/exp10/1h_pierce/dagger2_ethernere', 60006), + (25709, 23261, 'accessories/wieldable_items/weapons/exp10/1h_pierce/dagger_ethernere', 60006), + (25710, 23262, 'accessories/wieldable_items/weapons/exp10/1h_sword/ethernere_warrior', 60006), + (25711, 23263, 'accessories/wieldable_items/weapons/exp10/1h_sword/ethernere_shadowknight', 60006), + (25712, 23264, 'accessories/wieldable_items/weapons/exp10/1h_sword/ethernere_axe', 60006), + (25713, 23265, 'accessories/wieldable_items/weapons/exp10/1h_sword/ethernere_scimitar', 60006), + (25714, 23266, 'accessories/wieldable_items/weapons/exp10/1h_sword/ethernere_rapier', 60006), + (25715, 23267, 'accessories/wieldable_items/weapons/exp10/2h_sword/scythe_ethernere', 60006), + (25716, 23268, 'accessories/wieldable_items/weapons/exp10/bow/longbow_ranger_ethernere', 60006), + (25717, 23269, 'accessories/wieldable_items/weapons/exp10/bow/longbow_ethernere', 60006), + (25718, 23270, 'accessories/wieldable_items/weapons/exp10/fist/ethernere_katar', 60006), + (25719, 23271, 'accessories/wieldable_items/weapons/exp10/shield/ethernere_healer_shield', 60006), + (25720, 23272, 'accessories/wieldable_items/weapons/exp10/shield/ethernere_tower_shield', 60006), + (25721, 23273, '_exp10/characters/tool_users/goblin_highkeep/goblin_highkeep_crushed', 60006), + (25722, 23274, 'playerstudio/houseitems/halloween_batcake', 60006), + (25723, 23275, 'playerstudio/houseitems/halloween_cupcakeplatter', 60006), + (25724, 23276, 'playerstudio/houseitems/halloween_ghostcake', 60006), + (25725, 23277, 'creatures/mounts/sokokar_mount/sokokar_mount_zlandicar', 60006), + (25726, 23278, 'creatures/mounts/sokokar_mount/sokokar_mount_black', 60006), + (25727, 23279, '_exp10/objects/holotable_dpo', 60006), + (25728, 23281, 'accessories/npc_wearables/dracurion/executioner_axe', 60006), + (25729, 23282, 'staticobjects/dpo_invisible_cube/dpo_invisible_sphere', 60006), + (25730, 23283, '_exp09/characters/monsters/ethereal_construct/ethereal_construct_black_ghost', 60006), + (25731, 23284, 'creatures/mounts/sokokar_mount/sokokar_mount_vulakk', 60006), + (25732, 23285, '_exp08/characters/monsters/dragon_made_golem/dragon_made_golem_vyemm_ice', 60006), + (25733, 23286, '_exp08/characters/monsters/dragon_made_golem/dragon_made_golem_vyemm_fire', 60006), + (25734, 23287, '_exp09/characters/monsters/mud_monster/mud_monster_red_goo', 60006), + (25735, 23288, '_exp10/characters/tool_users/aerakyn/aerakyn_test', 60006), + (25736, 23289, 'staticobjects/_exp10/dragon_realm_slowing_cloud', 60006), + (25737, 23290, '_exp10/characters/monsters/shissar_golem/shissar_golem_large_walk', 60006), + (25738, 23291, 'playerstudio/houseitems/lovers_tree', 60006), + (25739, 23292, 'accessories/wieldable_items/weapons/exp10/staff/spear_blue', 60006), + (25740, 23293, 'accessories/wieldable_items/weapons/exp10/staff/spear_green', 60006), + (25741, 23294, 'accessories/wieldable_items/weapons/exp10/staff/spear_shadow', 60006), + (25742, 23295, 'accessories/wieldable_items/weapons/exp10/staff/spear_red', 60006), + (25743, 23296, '_exp03/characters/monsters/bone_golem_green', 60006), + (25744, 23297, 'creatures/mounts/sokokar_mount/sokokar_mount_ethernere_black', 60006), + (25745, 23298, 'creatures/mounts/sokokar_mount/sokokar_mount_ethernere_orange', 60006), + (25746, 23299, '_exp10/characters/monsters/shissar_custodian/shissar_custodian_boss', 60006), + (25747, 23300, 'accessories/wearable_items/profesion_hats/firiona_vie_tiara_lon/head_firiona_vie_tiara_redeye', 60006), + (25748, 23301, '_exp10/objects/plunderables/bixie_lamp', 60006), + (25749, 23302, '_exp10/objects/plunderables/tov_lamp_swing', 60006), + (25750, 23303, '_exp10/objects/plunderables/highkeep_miningcart', 60006), + (25751, 23304, '_exp10/objects/plunderables/tov_torch', 60006), + (25752, 23305, 'staticobjects/bookcases/fprt_academy_newbookcase', 60006), + (25753, 23306, 'staticobjects/_exp10/hk_kitchen_drinkcart01', 60006), + (25754, 23307, '_exp10/characters/monsters/dragon_red/dragon_red_ghost', 60006), + (25755, 23308, 'playerstudio/characters/shields/tower_round_shields/sclif/sclif', 60006), + (25756, 23309, '_exp10/objects/tov_broken_seal', 60006), + (25757, 23310, '_exp10/objects/tov_unbroken_seal', 60006), + (25758, 23311, 'playerstudio/characters/weapons/1h_sword/sirens_spiked_fury/sirens_spiked_fury', 60006), + (25759, 23312, 'staticobjects/housing_portal_objects/vision_home_haunted01', 60006), + (25760, 23313, 'playerstudio/characters/weapons/2h_sword/maestroslute/maestroslute', 60006), + (25761, 23314, 'staticobjects/soe_wallet/cypress_dead_lamp_01', 60006), + (25762, 23315, 'staticobjects/soe_wallet/cypress_dead_01', 60006), + (25763, 23316, 'staticobjects/soe_wallet/cypress_dead_02', 60006), + (25764, 23317, 'staticobjects/soe_wallet/pumpkin_reg_01', 60006), + (25765, 23318, 'staticobjects/soe_wallet/pumpkin_short_01', 60006), + (25766, 23319, 'staticobjects/soe_wallet/pumpkin_tall_01', 60006), + (25767, 23320, 'staticobjects/soe_wallet/tomb_crypt', 60006), + (25768, 23321, 'staticobjects/soe_wallet/tombstone_02', 60006), + (25769, 23322, 'staticobjects/soe_wallet/tombstone_03', 60006), + (25770, 23323, 'staticobjects/soe_wallet/tombstone_04', 60006), + (25771, 23324, 'staticobjects/soe_wallet/tombstone_05', 60006), + (25772, 23325, 'staticobjects/soe_wallet/tombstone_06', 60006), + (25773, 23326, 'staticobjects/soe_wallet/cypress_dead_lamp_02', 60006), + (25774, 23327, 'staticobjects/soe_wallet/pumpkin_home', 60006), + (25775, 23328, 'staticobjects/soe_wallet/pumpkin_home_door', 60006), + (25776, 23329, '_exp10/objects/plunderables/tov_necrovat', 60006), + (25777, 23330, 'accessories/wieldable_items/shields/exp10/shield_tower_effect_red', 60006), + (25778, 23331, 'accessories/wieldable_items/shields/exp10/shield_tower_effect_blue', 60006), + (25779, 23332, 'accessories/wieldable_items/shields/exp10/shield_effect_blue', 60006), + (25780, 23333, 'accessories/wieldable_items/shields/exp10/shield_effect_red', 60006), + (25781, 23334, 'creatures/mounts/reindeer_mount/reindeer_mount_base', 60006), + (25782, 23335, 'accessories/wieldable_items/weapons/exp10/talisman/rod_fear_eyeball', 60006), + (25783, 23336, 'accessories/wieldable_items/weapons/exp10/talisman/rod_fear_eyeball_blue', 60006), + (25784, 23337, 'accessories/wearable_items/cloak/exp10/cloak_tradeskill_heraldry', 60006), + (25785, 23338, 'accessories/wearable_items/_exp10/vesspyr_isles/chain_shadow/shoulders_epic', 60006), + (25786, 23339, 'accessories/wearable_items/cloak/exp10/cloak_aerakyn', 60006), + (25787, 23340, 'accessories/wearable_items/cloak/exp10/cloak_horde', 60006), + (25788, 23341, 'accessories/wearable_items/cloak/exp10/cloak_vesspyr_isle', 60006), + (25789, 23342, 'accessories/wearable_items/cloak/exp10/cloak_ethernere', 60006), + (25790, 23343, 'staticobjects/_exp06/exp06_dun_vastydeep02_library01_door_dpo', 60006), + (25791, 23344, '_exp10/characters/monsters/shissar_custodian/shissar_custodian_plushy', 60006), + (25792, 23345, 'playerstudio/houseitems/garden_swing_full', 60006), + (25793, 23346, 'playerstudio/houseitems/cask_mead', 60006), + (25794, 23347, 'playerstudio/houseitems/dragon_carpet', 60006), + (25795, 23348, 'playerstudio/houseitems/gnome_waterpump', 60006), + (25796, 23349, 'playerstudio/houseitems/mistythicket_picnic', 60006), + (25797, 23350, 'playerstudio/houseitems/grapevine_floorcabinet', 60006), + (25798, 23351, 'playerstudio/houseitems/grapevine_wallcabinet', 60006), + (25799, 23352, 'playerstudio/houseitems/painting_highborne', 60006), + (25800, 23353, 'playerstudio/houseitems/painting_mage', 60006), + (25801, 23354, 'playerstudio/houseitems/painting_swordsman', 60006), + (25802, 23355, 'creatures/pets/lumpy_pet/pet_dragon_lumpy_prosieben', 60006), + (25803, 23356, 'playerstudio/houseitems/koi_midnight', 60006), + (25804, 23357, 'playerstudio/houseitems/koi_orange', 60006), + (25805, 23358, 'playerstudio/houseitems/koi_rising', 60006), + (25806, 23359, 'playerstudio/houseitems/brewbarrel_babybed', 60006), + (25807, 23360, 'playerstudio/houseitems/coach_serving_cart', 60006), + (25808, 23361, 'playerstudio/houseitems/platinum_placesetting', 60006), + (25809, 23362, 'staticobjects/_exp10/dpo_shissar_statue_architect01', 60006), + (25810, 23363, 'staticobjects/_exp10/dpo_shissar_statue_emperor01', 60006), + (25811, 23364, 'staticobjects/_exp10/dpo_shissar_statue_mage01', 60006), + (25812, 23365, 'staticobjects/_exp10/dpo_shissar_statue_warrior01', 60006), + (25813, 23366, '_exp08/objects/exp08_dun_sleepers_tomb_urn05_ghost', 60006), + (25814, 23367, '_exp10/characters/tool_users/frost_fae/frost_fae', 60006), + (25815, 23368, 'ec/pc/fae_wings/fae_wing_frost_snowflake', 60006), + (25816, 23369, 'staticobjects/liveevent/anniversary_event/dpo_na_banner_lucan', 60006), + (25817, 23370, 'staticobjects/liveevent/anniversary_event/dpo_na_banner_antonia', 60006), + (25818, 23371, 'staticobjects/liveevent/anniversary_event/dpo_na_poster01_antonia', 60006), + (25819, 23372, 'staticobjects/liveevent/anniversary_event/dpo_na_poster02_overlord', 60006), + (25820, 23373, 'staticobjects/promo_items/eqnext_painting_kerran', 60006), + (25821, 23374, 'staticobjects/promo_items/eqnext_painting_firiona', 60006), + (25822, 23375, 'staticobjects/promo_items/eqnext_painting_human01', 60006), + (25823, 23376, 'staticobjects/promo_items/eqnext_painting_human02', 60006), + (25824, 23377, '_exp10/objects/nexus_to_portal_zone_fx_dpo', 60006), + (25825, 23378, 'accessories/wieldable_items/weapons/exp10/1h_crush/hammer_darkelf', 60006), + (25826, 23379, 'accessories/wieldable_items/weapons/exp10/1h_sword/darkelf_sword', 60006), + (25827, 23380, 'accessories/wieldable_items/weapons/exp10/1h_sword/darkelf_axe', 60006), + (25828, 23381, 'creatures/mounts/pegasus_mount/pegasus_mount_tradeskill', 60006), + (25829, 23382, 'staticobjects/housing_portal_objects/vision_home_darklightpalace01', 60006), + (25830, 23383, 'playerstudio/characters/weapons/1h_sword/aodk/aodk', 60006), + (25831, 23384, 'creatures/tu/void_elemental_soldier', 60006), + (25832, 23385, 'accessories/wearable_items/cloak/exp10/cloak_snowfall', 60006), + (25833, 23386, 'accessories/wearable_items/cloak/exp10/cloak_snowfall_short', 60006), + (25834, 23387, 'accessories/wieldable_items/shields/exp10/shield_frost', 60006), + (25835, 23388, 'accessories/wieldable_items/weapons/exp10/1h_crush/scepter_frost', 60006), + (25836, 23389, 'accessories/wieldable_items/weapons/exp10/1h_sword/sword_frost', 60006), + (25837, 23390, 'accessories/wieldable_items/weapons/exp10/1h_sword/axe_frost', 60006), + (25838, 23391, 'accessories/wieldable_items/weapons/exp10/fist/fist_frost', 60006), + (25839, 23392, 'accessories/wieldable_items/weapons/exp10/staff/staff_frost', 60006), + (25840, 23393, '_exp10/characters/tool_users/aerakyn/aerakyn_male_base_green', 60006), + (25841, 23394, '_exp10/characters/tool_users/aerakyn/aerakyn_male_boss_green', 60006), + (25842, 23395, '_exp10/characters/tool_users/aerakyn/aerakyn_male_heavy_green', 60006), + (25843, 23396, '_exp10/characters/tool_users/aerakyn/aerakyn_male_mage_green', 60006), + (25844, 23397, '_exp10/characters/tool_users/aerakyn/aerakyn_male_priest_green', 60006), + (25845, 23398, '_exp10/characters/monsters/pig_new01/pig_new01', 60006), + (25846, 23399, 'accessories/wearable_items/_exp10/vesspyr_isles/attachments/belt_blue', 60006), + (25847, 23400, 'accessories/wearable_items/_exp10/vesspyr_isles/attachments/belt_bronze', 60006), + (25848, 23401, 'accessories/wearable_items/_exp10/vesspyr_isles/attachments/belt_green', 60006), + (25849, 23402, 'accessories/wearable_items/_exp10/vesspyr_isles/attachments/belt_light', 60006), + (25850, 23403, 'accessories/wearable_items/_exp10/vesspyr_isles/attachments/belt_redgold', 60006), + (25851, 23404, 'accessories/wearable_items/_exp10/vesspyr_isles/attachments/belt_shadow', 60006), + (25852, 23405, 'accessories/wearable_items/_exp10/vesspyr_isles/attachments/forearm_left_blue', 60006), + (25853, 23406, 'accessories/wearable_items/_exp10/vesspyr_isles/attachments/forearm_left_bronze', 60006), + (25854, 23407, '_exp10/objects/exp10_dun_shissar_temple_01/stratum_progression_objects/dpo_shissar_vase01_dpo', 60006), + (25855, 23408, '_exp10/objects/exp10_dun_shissar_temple_01/stratum_progression_objects/glowingsymbol02_dpo', 60006), + (25856, 23409, 'accessories/wearable_items/_exp10/frost_armor/chain/chest', 60006), + (25857, 23410, 'accessories/wearable_items/_exp10/frost_armor/chain/feet', 60006), + (25858, 23411, 'accessories/wearable_items/_exp10/frost_armor/chain/forearms', 60006), + (25859, 23412, 'accessories/wearable_items/_exp10/frost_armor/chain/hands', 60006), + (25860, 23413, 'accessories/wearable_items/_exp10/frost_armor/chain/head', 60006), + (25861, 23414, 'accessories/wearable_items/_exp10/frost_armor/chain/legs', 60006), + (25862, 23415, 'accessories/wearable_items/_exp10/frost_armor/chain/shoulders', 60006), + (25863, 23416, 'accessories/wearable_items/_exp10/frost_armor/heavycloth/chest', 60006), + (25864, 23417, 'accessories/wearable_items/_exp10/frost_armor/heavycloth/feet', 60006), + (25865, 23418, 'accessories/wearable_items/_exp10/frost_armor/heavycloth/hands', 60006), + (25866, 23419, 'accessories/wearable_items/_exp10/frost_armor/heavycloth/head', 60006), + (25867, 23420, 'accessories/wearable_items/_exp10/frost_armor/heavycloth/legs', 60006), + (25868, 23421, 'accessories/wearable_items/_exp10/frost_armor/heavycloth/shoulders', 60006), + (25869, 23422, 'accessories/wearable_items/_exp10/frost_armor/heavycloth/skirt', 60006), + (25870, 23423, 'accessories/wearable_items/_exp10/frost_armor/heavycloth/belt/skirt 2', 60006), + (25871, 23836, 'staticobjects/dpo_invisible_cube/dpo_invisible_cube_inverted', 60006), + (25872, 23837, 'playerstudio/houseitems/heart_vanity', 60006), + (25873, 23838, 'playerstudio/houseitems/lucanic_chariot', 60006), + (25874, 23839, 'playerstudio/houseitems/pub_cabinet', 60006), + (25875, 23840, 'playerstudio/houseitems/pub_chair', 60006), + (25876, 23841, 'playerstudio/houseitems/pub_counter', 60006), + (25877, 23842, 'playerstudio/houseitems/pub_tap', 60006), + (25878, 23843, 'playerstudio/houseitems/rock_garden', 60006), + (25879, 23844, 'playerstudio/houseitems/stone_lantern', 60006), + (25880, 23845, 'playerstudio/houseitems/tranq_archway', 60006), + (25881, 23846, 'playerstudio/houseitems/castle_fence', 60006), + (25882, 23847, 'playerstudio/houseitems/castle_fence_piece', 60006), + (25883, 23848, 'playerstudio/houseitems/castle_fence_post', 60006), + (25884, 23849, 'playerstudio/houseitems/cherryrose_harp', 60006), + (25885, 23850, 'playerstudio/houseitems/cherryrose_harpstool', 60006), + (25886, 23851, 'playerstudio/houseitems/cherryrose_piano', 60006), + (25887, 23852, 'playerstudio/houseitems/cherryrose_piano_bench', 60006), + (25888, 23853, 'playerstudio/houseitems/china_cabinet', 60006), + (25889, 23854, 'playerstudio/houseitems/fisherman_netroll', 60006), + (25890, 23855, 'playerstudio/houseitems/fisherman_oar', 60006), + (25891, 23856, 'playerstudio/houseitems/fisherman_tacklebox', 60006), + (25892, 23857, 'playerstudio/houseitems/fisherman_wormbucket', 60006), + (25893, 23858, 'playerstudio/houseitems/fishinboat_mariners', 60006), + (25894, 23859, 'playerstudio/houseitems/fishinboat_moonlit', 60006), + (25895, 23860, 'playerstudio/houseitems/fishinboat_windblossom', 60006), + (25896, 23861, 'playerstudio/houseitems/heart_screen', 60006), + (25897, 23862, 'playerstudio/houseitems/heart_stool', 60006), + (25898, 23863, 'playerstudio/houseitems/heart_stoollong', 60006), + (25899, 23864, 'playerstudio/houseitems/heart_vase', 60006), + (25900, 23865, 'playerstudio/houseitems/kelethinacorn_door', 60006), + (25901, 23866, 'playerstudio/houseitems/rustic_chair', 60006), + (25902, 23867, 'playerstudio/houseitems/rustic_dining_bench', 60006), + (25903, 23868, 'playerstudio/houseitems/rustic_dining_hutch', 60006), + (25904, 23869, 'playerstudio/houseitems/rustic_dining_table', 60006), + (25905, 23870, 'accessories/wearable_items/_exp11/hero_bracers/forearms_combined', 60006), + (25906, 23871, '_exp10/objects/exp10_temple_of_veeshan_raid/bristlebane_chess_bishop', 60006), + (25907, 23872, '_exp10/objects/exp10_temple_of_veeshan_raid/bristlebane_chess_knight', 60006), + (25908, 23873, '_exp10/objects/exp10_temple_of_veeshan_raid/bristlebane_chess_pawn', 60006), + (25909, 23874, '_exp10/objects/exp10_temple_of_veeshan_raid/bristlebane_chess_rook', 60006), + (25910, 23875, 'playerstudio/characters/weapons/1h_sword/woodelfsword/woodelfsword', 60006), + (25911, 23876, 'playerstudio/characters/weapons/1h_sword/frozenicespireshortaxe/frozenicespireshortaxe', 60006), + (25912, 23877, 'ec/npc/skeletonorc_fullbody_2014', 60006), + (25913, 23878, 'playerstudio/characters/shields/tower_round_shields/frozenicespireshield/frozenicespireshield', 60006), + (25914, 23879, 'playerstudio/characters/weapons/1h_crush/tinkeredhand/tinkeredhand', 60006), + (25915, 23880, 'accessories/wieldable_items/weapons/exp10/1h_crush/hammer_bellringer_flamepounder_raid', 60006), + (25916, 23881, 'accessories/wieldable_items/weapons/exp10/1h_crush/scepter_wand_regal_raid', 60006), + (25917, 23882, 'accessories/wieldable_items/weapons/exp10/1h_pierce/dagger_mage_flame_raid', 60006), + (25918, 23883, 'accessories/wieldable_items/weapons/exp10/1h_pierce/dagger_scout_fire_raid', 60006), + (25919, 23884, 'accessories/wieldable_items/weapons/exp10/1h_sword/sword_aerakyn_glow_raid', 60006), + (25920, 23885, 'accessories/wieldable_items/weapons/exp10/bow/longbow_scout_red_raid', 60006), + (25921, 23886, 'accessories/wieldable_items/weapons/exp10/staff/staff_aerakyn_raid', 60006), + (25922, 23887, 'accessories/wieldable_items/weapons/exp10/staff/staff_halberd_red_raid', 60006), + (25923, 23888, 'accessories/wieldable_items/weapons/exp10/staff/staff_monk_bladed_redgold_raid', 60006), + (25924, 23889, 'creatures/monsters/rumbler_summon_attack', 60006), + (25925, 23890, '_exp10/characters/tool_users/bolgin/bolgin_ghost_helm', 60006), + (25926, 23891, 'playerstudio/characters/cloaks/tinkeredtoolcloak/cloak_tinkeredtoolcloak', 60006), + (25927, 23892, 'playerstudio/characters/shields/tower_round_shields/woodelfshield/woodelfshield', 60006), + (25928, 23893, 'accessories/wieldable_items/weapons/exp11/1h_pierce/dagger_mage_flame', 60006), + (25929, 23894, 'accessories/wieldable_items/weapons/exp11/1h_pierce/dagger_rogue_flame', 60006), + (25930, 23895, 'accessories/wieldable_items/weapons/exp11/1h_sword/sword_saber_flame', 60006), + (25931, 23896, 'accessories/wieldable_items/weapons/exp11/1h_sword/sword_longsword_flame', 60006), + (25932, 23897, 'accessories/wieldable_items/weapons/exp11/1h_sword/sword_broadsword_flame', 60006), + (25933, 23898, 'accessories/wieldable_items/weapons/exp11/1h_sword/sword_rapier_flame', 60006), + (25934, 23899, 'accessories/wieldable_items/weapons/exp11/2h_sword/sword_2h_flame', 60006), + (25935, 23900, '_exp05/tool_users/lich_shadow_04_negativelight', 60006), + (25936, 23901, '_exp08/characters/tool_users/lich_undead/lich_undead_negativelight', 60006), + (25937, 23902, 'ec/npc/skeletonorc_negativelight_2014', 60006), + (25938, 23903, 'accessories/wearable_items/_exp11/hero_bracers/bracer_left', 60006), + (25939, 23904, 'accessories/wearable_items/_exp11/hero_bracers/bracer_right', 60006), + (25940, 23905, 'accessories/wearable_items/_exp11/hero_bracers/handcover_left', 60006), + (25941, 23906, 'accessories/wearable_items/_exp11/hero_bracers/handcover_right', 60006), + (25942, 23907, 'accessories/wearable_items/_exp11/hero_bracers/hands', 60006), + (25943, 23908, 'ec/pc/human/human_male_drunk_animations', 60006), + (25944, 23909, '_exp11/characters/tool_users/shissar/shissar_male_medium_mamba', 60006), + (25945, 23910, 'accessories/npc_wearables/bolgin/bolgin_ghost_helm', 60006), + (25946, 23911, '_exp08/characters/monsters/kerafyrm/kerafyrm_skyshrine', 60006), + (25947, 23912, 'playerstudio/characters/weapons/staff/stormstaff/stormstaff', 60006), + (25948, 23913, 'ec/npc/skeletonorc_armored_torso_2014', 60006), + (25949, 23914, 'ec/npc/skeletonorc_armored_oneleg_2014', 60006), + (25950, 23915, 'staticobjects/lighting/elemental_lantern_fire', 60006), + (25951, 23916, 'staticobjects/lighting/elemental_lantern_rock', 60006), + (25952, 23917, 'staticobjects/lighting/elemental_lantern_water', 60006), + (25953, 23918, 'staticobjects/lighting/elemental_lantern_wind', 60006), + (25954, 23919, 'ec/npc/skeletonorc_armored_light_2014', 60006), + (25955, 23920, 'ec/npc/skeletonorc_armored_light_oneleg_2014', 60006), + (25956, 23921, 'ec/npc/skeletonorc_armored_light_torso_2014', 60006), + (25957, 23922, 'staticobjects/runes/voidman_armor_rune05', 60006), + (25958, 23923, 'creatures/pets/kerafyrm_young/kerafyrm_young', 60006), + (25959, 23924, 'accessories/wieldable_items/weapons/exp11/1h_crush/wand_flame', 60006), + (25960, 23925, 'accessories/wieldable_items/weapons/exp11/1h_crush/club_flame', 60006), + (25961, 23926, 'accessories/wieldable_items/weapons/exp11/1h_crush/mace_flame', 60006), + (25962, 23927, 'accessories/wieldable_items/weapons/exp11/1h_crush/hammer_flame', 60006), + (25963, 23928, 'accessories/wieldable_items/weapons/exp11/1h_pierce/shortspear_flame', 60006), + (25964, 23929, 'accessories/wieldable_items/weapons/exp11/1h_sword/axe_flame', 60006), + (25965, 23930, 'accessories/wieldable_items/weapons/exp11/2h_sword/axe_2h_flame', 60006), + (25966, 23931, 'accessories/wieldable_items/weapons/exp11/bow/longbow_flame', 60006), + (25967, 23932, 'accessories/wieldable_items/weapons/exp11/bow/shortbow_flame', 60006), + (25968, 23933, 'accessories/wieldable_items/weapons/exp11/fist/fist_flame', 60006), + (25969, 23934, 'accessories/wieldable_items/weapons/exp11/staff/spear_flame', 60006), + (25970, 23935, 'accessories/wieldable_items/weapons/exp11/staff/staff_flame', 60006), + (25971, 23936, 'accessories/wieldable_items/weapons/exp11/staff/staff_mage_flame', 60006), + (25972, 23937, 'accessories/wieldable_items/shields/exp11/shield_buckler_flame', 60006), + (25973, 23938, 'accessories/wieldable_items/shields/exp11/shield_round_flame', 60006), + (25974, 23939, 'staticobjects/liveevent/bristlebane_day/dpo_yellow_curtain_right', 60006), + (25975, 23940, 'accessories/wieldable_items/shields/exp11/shield_tower_flame', 60006), + (25976, 23941, 'staticobjects/games/floor_dominos_dragon_script', 60006), + (25977, 23942, 'playerstudio/characters/cloaks/barbarian_fur/cloak_barbarian_fur', 60006), + (25978, 23943, 'creatures/tu/rhoen_theer_skyshrine', 60006), + (25979, 23944, '_exp10/characters/monsters/dragon_vulakk/dragon_vulakk_summon', 60006), + (25980, 23945, 'staticobjects/games/floor_dominos_dragon_script02', 60006), + (25981, 23946, 'playerstudio/houseitems/bath_time_box', 60006), + (25982, 23947, 'playerstudio/houseitems/bath_time_duck_blue', 60006), + (25983, 23948, 'playerstudio/houseitems/bath_time_duck_red', 60006), + (25984, 23949, 'playerstudio/houseitems/bath_time_duck_yellow', 60006), + (25985, 23950, 'playerstudio/houseitems/eagle_staircase', 60006), + (25986, 23951, 'playerstudio/houseitems/odd_avian_ornament_01', 60006), + (25987, 23952, 'playerstudio/houseitems/odd_avian_ornament_02', 60006), + (25988, 23953, 'playerstudio/houseitems/pulltoy_duck', 60006), + (25989, 23954, 'playerstudio/houseitems/pulltoy_elephant', 60006), + (25990, 23955, 'playerstudio/houseitems/pulltoy_lion', 60006), + (25991, 23956, 'playerstudio/houseitems/pulltoy_rhino', 60006), + (25992, 23957, 'accessories/wieldable_items/weapons/exp11/1h_crush/hammer_bloodyshank', 60006), + (25993, 23958, 'accessories/wieldable_items/weapons/exp11/1h_pierce/dagger_bloodyshank_caster', 60006), + (25994, 23959, 'accessories/wieldable_items/weapons/exp11/1h_pierce/dagger_bloodyshank', 60006), + (25995, 23960, 'accessories/wieldable_items/weapons/exp11/1h_sword/sword_bloodyshank', 60006), + (25996, 23961, 'accessories/wieldable_items/weapons/exp11/fist/fist_bloodyshank', 60006), + (25997, 23962, 'accessories/wieldable_items/weapons/exp11/1h_pierce/exp11_1h_pierce_dagger_shissar', 60006), + (25998, 23963, 'accessories/wieldable_items/weapons/exp11/1h_sword/exp11_1h_sword_shissar', 60006), + (25999, 23964, 'accessories/wieldable_items/shields/exp11/exp11_shield_shissar', 60006), + (26000, 23965, 'accessories/wieldable_items/weapons/exp11/1h_crush/hammer_bloodyshank_heritage', 60006), + (26001, 23966, 'accessories/wieldable_items/weapons/exp11/1h_pierce/dagger_bloodyshank_caster_heritage', 60006), + (26002, 23967, 'accessories/wieldable_items/weapons/exp11/1h_pierce/dagger_bloodyshank_heritage', 60006), + (26003, 23968, 'accessories/wieldable_items/weapons/exp11/1h_sword/sword_bloodyshank_heritage', 60006), + (26004, 23969, 'accessories/wieldable_items/weapons/exp11/fist/fist_bloodyshank_heritage', 60006), + (26005, 23970, '_exp11/characters/monsters/spider_skitterer/spider_skitterer', 60006), + (26006, 23971, '_exp11/characters/monsters/spider_skitterer/spider_skitterer_dark', 60006), + (26007, 23972, '_exp11/characters/monsters/spider_skitterer/spider_skitterer_diseased', 60006), + (26008, 23973, 'accessories/wieldable_items/weapons/exp11/staff/exp11_bostaff_shissar', 60006), + (26009, 23974, '_exp11/characters/tool_users/skeletal_obscenity/skeletal_obscenity', 60006), + (26010, 23975, '_exp11/characters/tool_users/skeletal_obscenity/skeletal_obscenity_dark', 60006), + (26011, 23976, '_exp11/houseitems/leafy_clump_01_dpo', 60006), + (26012, 23977, 'creatures/mounts/dragonfly_mount/dragonfly_mount_emerald', 60006), + (26013, 23978, '_exp11/characters/tool_users/cruor_vitae/cruor_vitae_basic', 60006), + (26014, 23979, '_exp11/characters/tool_users/cruor_vitae/cruor_vitae_bronze_basic', 60006), + (26015, 23980, '_exp08/objects/skyshrine_dragonhead_statue01', 60006), + (26016, 23981, '_exp08/objects/skyshrine_pillar01', 60006), + (26017, 23982, '_exp10/characters/monsters/spiderbear/spiderbear_feral', 60006), + (26018, 23983, '_exp10/characters/monsters/spiderbear/spiderbear_feral_green', 60006), + (26019, 23984, '_exp10/characters/monsters/spiderbear/spiderbear_green', 60006), + (26020, 23985, '_exp10/characters/monsters/spiderbear/spiderbear_female', 60006), + (26021, 23986, '_exp10/characters/monsters/spiderbear/spiderbear_evil', 60006), + (26022, 23987, '_exp10/characters/monsters/spiderbear/spiderbear_female_evil', 60006), + (26023, 23988, '_exp10/characters/monsters/spiderbear/spiderbear_female_green', 60006), + (26024, 23989, '_exp10/characters/monsters/spiderbear/spiderbear_feral_evil', 60006), + (26025, 23990, 'staticobjects/liveevent/tinkerfest/dpo_halfling_stoveflute01', 60006), + (26026, 23991, 'staticobjects/liveevent/tinkerfest/building_blocks/houseblock_1x1_column02_rustyplate', 60006), + (26027, 23992, 'staticobjects/liveevent/tinkerfest/building_blocks/houseblock_1x2_column02_rustyplate', 60006), + (26028, 23993, 'staticobjects/liveevent/tinkerfest/building_blocks/houseblock_1x2_dividerblock02_rustyplate', 60006), + (26029, 23994, 'staticobjects/liveevent/tinkerfest/building_blocks/houseblock_1xhalf_block02_rustyplate', 60006), + (26030, 23995, 'staticobjects/liveevent/tinkerfest/building_blocks/houseblock_2x2_dividerblock02_rustyplate', 60006), + (26031, 23996, 'staticobjects/liveevent/tinkerfest/building_blocks/houseblock_rail02_rustyplate', 60006), + (26032, 23997, 'staticobjects/liveevent/tinkerfest/building_blocks/houseblock_roundtile02_rustyplate', 60006), + (26033, 23998, 'staticobjects/liveevent/tinkerfest/building_blocks/houseblock_stair02_rustyplate', 60006), + (26034, 23999, 'staticobjects/liveevent/tinkerfest/building_blocks/housecube_1x1_block02_rustyplate', 60006), + (26035, 24000, '_exp11/characters/tool_users/cruor_vitae/cruor_vitae_boss', 60006), + (26036, 24001, 'staticobjects/boats/holiday_boats/brewday_leaf_boat', 60006), + (26037, 24002, 'staticobjects/boats/holiday_boats/brewday_leaf_boat_preview', 60006), + (26038, 24003, 'staticobjects/boats/holiday_boats/bristlebane_leaf_boat', 60006), + (26039, 24004, 'staticobjects/boats/holiday_boats/bristlebane_leaf_boat_preview', 60006), + (26040, 24005, 'staticobjects/boats/holiday_boats/erollisi_leaf_boat', 60006), + (26041, 24006, 'staticobjects/boats/holiday_boats/erollisi_leaf_boat_preview', 60006), + (26042, 24007, 'staticobjects/boats/holiday_boats/frostfell_leaf_boat', 60006), + (26043, 24008, 'staticobjects/boats/holiday_boats/frostfell_leaf_boat_preview', 60006), + (26044, 24009, 'staticobjects/boats/holiday_boats/moonlight_leaf_boat', 60006), + (26045, 24010, 'staticobjects/boats/holiday_boats/moonlight_leaf_boat_preview', 60006), + (26046, 24011, 'staticobjects/boats/holiday_boats/notd_leaf_boat', 60006), + (26047, 24012, 'staticobjects/boats/holiday_boats/notd_leaf_boat_preview', 60006), + (26048, 24013, 'staticobjects/boats/holiday_boats/tinkerfest_leaf_boat', 60006), + (26049, 24014, 'staticobjects/boats/holiday_boats/tinkerfest_leaf_boat_preview', 60006), + (26050, 24015, '_exp11/characters/monsters/flesh_construct/flesh_construct', 60006), + (26051, 24016, 'staticobjects/liveevent/tinkerfest/dpo_houseitem_drill_lightning01', 60006), + (26052, 24017, 'staticobjects/liveevent/tinkerfest/dpo_houseitem_drill_lightning02', 60006), + (26053, 24018, 'staticobjects/liveevent/tinkerfest/dpo_houseitem_drill_lightning03', 60006), + (26054, 24019, '_exp11/characters/monsters/blood_worm/blood_worm', 60006), + (26055, 24020, 'staticobjects/liveevent/tinkerfest/dpo_houseitem_halfling_stoveflute_fx01', 60006), + (26056, 24021, 'staticobjects/liveevent/tinkerfest/dpo_tinker_lamp_lit_01', 60006), + (26057, 24022, 'staticobjects/liveevent/tinkerfest/dpo_tinker_lamp_lit_rotate_01', 60006), + (26058, 24023, 'ec/npc/zombie_orc_armored_2014', 60006), + (26059, 24024, 'ec/npc/zombie_orc_armored_tu_2014', 60006), + (26060, 24025, 'accessories/wieldable_items/weapons/exp11/2h_sword/hammer_2h_bloodyshank', 60006), + (26061, 24026, 'staticobjects/_exp08/sleepers_tomb/sleepers_tomb_crystals_red_pfx_dpo', 60006), + (26062, 24027, 'playerstudio/characters/shields/tower_round_shields/ancientguardianofthule/ancientguardianofthule', 60006), + (26063, 24028, 'accessories/wieldable_items/weapons/exp11/1h_crush/exp11_1h_crush_hammer_orc', 60006), + (26064, 24029, 'accessories/wieldable_items/weapons/exp11/1h_sword/exp11_1h_sword_orc', 60006), + (26065, 24030, '_exp06/characters/monsters/vasty_guardian/vasty_guardian_darkmetallic', 60006), + (26066, 24031, '_exp09/characters/monsters/ethereal_construct/ethereal_construct_darkmetal_red', 60006), + (26067, 24032, '_exp09/characters/monsters/ethereal_construct/ethereal_construct_darkmetal_yellow', 60006), + (26068, 24033, '_exp09/characters/monsters/ethereal_construct/ethereal_construct_darkmetal_purple', 60006), + (26069, 24034, '_exp09/characters/monsters/ethereal_construct/ethereal_construct_darkmetal_green', 60006), + (26070, 24035, '_exp09/characters/monsters/ethereal_construct/ethereal_construct_darkmetal_blue', 60006), + (26071, 24036, 'accessories/wieldable_items/shields/exp11/exp11_shield_orc', 60006), + (26072, 24037, 'ec/npc/orc_ghost_blue', 60006), + (26073, 24038, '_exp10/characters/monsters/dragon_sontalak/sontalak_no_summon', 60006), + (26074, 24039, 'accessories/wieldable_items/shields/exp11/exp11_shield_buckler_orc', 60006), + (26075, 24040, '_exp11/characters/tool_users/lava_pygmy/lava_pygmy_male_base', 60006), + (26076, 24041, 'playerstudio/characters/shields/tower_round_shields/chess_shield/chess_shield', 60006), + (26077, 24042, 'playerstudio/characters/weapons/1h_sword/chess_sword/chess_sword', 60006), + (26078, 24043, 'accessories/npc_wearables/shissar/exp11_shield_shissar', 60006), + (26079, 24044, '_exp08/characters/tool_users/freeport_knight/freeport_knight_mounted_skyshrine', 60006), + (26080, 24045, 'playerstudio/houseitems/carved_hearth', 60006), + (26081, 24046, 'playerstudio/houseitems/cleanup_set', 60006), + (26082, 24047, 'playerstudio/houseitems/cookie_sheet', 60006), + (26083, 24048, 'playerstudio/houseitems/garden_tools', 60006), + (26084, 24049, 'playerstudio/houseitems/grinnuch_roast_dinner', 60006), + (26085, 24050, 'playerstudio/houseitems/kitchen_sink', 60006), + (26086, 24051, 'playerstudio/houseitems/making_cookies', 60006), + (26087, 24052, 'playerstudio/houseitems/weapon_power', 60006), + (26088, 24053, 'creatures/mounts/broom/broom_mount_base', 60006), + (26089, 24054, '_exp10/characters/tool_users/aerakyn/aerakyn_male_merc2', 60006), + (26090, 24055, 'accessories/wieldable_items/weapons/exp11/1h_crush/exp11_1h_crush_hammer_skeletalorc', 60006), + (26091, 24056, '_exp11/characters/tool_users/lava_pygmy/lava_pygmy_king', 60006), + (26092, 24057, '_exp11/characters/tool_users/lava_pygmy/lava_pygmy_male_shaman', 60006), + (26093, 24058, '_exp11/characters/tool_users/lava_pygmy/lava_pygmy_male_warrior', 60006), + (26094, 24059, 'creatures/mounts/dino_flyer/dino_flyer_base', 60006), + (26095, 24060, 'playerstudio/characters/weapons/1h_sword/cane_blade/cane_blade', 60006), + (26096, 24061, 'playerstudio/characters/weapons/1h_sword/cane_sheath/cane_sheath', 60006), + (26097, 24062, 'accessories/wieldable_items/weapons/exp11/1h_crush/hammer_shipwright', 60006), + (26098, 24063, 'accessories/wieldable_items/weapons/exp11/1h_crush/club_belayingpin', 60006), + (26099, 24064, 'accessories/wieldable_items/weapons/exp11/1h_crush/club_hooked', 60006), + (26100, 24065, 'accessories/wieldable_items/weapons/exp11/1h_pierce/shortspear_swashbuckler', 60006), + (26101, 24066, 'accessories/wieldable_items/weapons/exp11/1h_pierce/dagger_sweptmage', 60006), + (26102, 24067, 'accessories/wieldable_items/weapons/exp11/1h_pierce/dagger_parryblade', 60006), + (26103, 24068, 'accessories/wieldable_items/weapons/exp11/1h_sword/axe_swashbuckler', 60006), + (26104, 24069, 'accessories/wieldable_items/weapons/exp11/1h_sword/sword_rapier_swashbuckler', 60006), + (26105, 24070, 'accessories/wieldable_items/weapons/exp11/1h_sword/sword_cutlass_swashbuckler', 60006), + (26106, 24071, 'accessories/wieldable_items/weapons/exp11/1h_sword/sword_saber_swashbuckler', 60006), + (26107, 24072, 'accessories/wieldable_items/weapons/exp11/1h_sword/sword_scimitar_swashbuckler', 60006), + (26108, 24073, 'accessories/wieldable_items/weapons/exp11/1h_wand/wand_finesse', 60006), + (26109, 24074, 'accessories/wieldable_items/weapons/exp11/2h_sword/club_2h_oar', 60006), + (26110, 24075, 'accessories/wieldable_items/weapons/exp11/2h_sword/sword_2h_scimitar', 60006), + (26111, 24076, 'accessories/wieldable_items/weapons/exp11/bow/longbow_nautical', 60006), + (26112, 24077, 'accessories/wieldable_items/weapons/exp11/bow/shortbow_compound', 60006), + (26113, 24078, 'accessories/wieldable_items/weapons/exp11/fist/fist_hooked', 60006), + (26114, 24079, 'accessories/wieldable_items/weapons/exp11/staff/staff_sextant', 60006), + (26115, 24080, 'accessories/wieldable_items/weapons/exp11/staff/spear_trident', 60006), + (26116, 24081, 'accessories/wieldable_items/weapons/exp11/staff/spear_harpoon', 60006), + (26117, 24082, 'creatures/mounts/griffin_classic/griffin_classic_variant', 60006), + (26118, 24083, 'creatures/mounts/griffin_classic/griffin_classic_variant_black', 60006), + (26119, 24084, 'creatures/mounts/griffin_classic/griffin_classic_variant_white', 60006), + (26120, 24085, 'staticobjects/housing_portal_objects/vision_home_gnomehome01', 60006), + (26121, 24086, 'playerstudio/characters/weapons/bow/feather_bow/feather_bow', 60006), + (26122, 24087, 'creatures/tu/rhoen_theer_kerafyrm_mouth', 60006), + (26123, 24088, '_exp11/characters/tool_users/akheva/akheva_male_base', 60006), + (26124, 24089, 'playerstudio/houseitems/summerhammock', 60006), + (26125, 24090, 'playerstudio/houseitems/luckycat', 60006), + (26126, 24091, 'playerstudio/houseitems/paintingstretchwait', 60006), + (26127, 24092, 'playerstudio/houseitems/birdtimorous', 60006), + (26128, 24093, 'playerstudio/houseitems/mahoganyaviary', 60006), + (26129, 24094, 'playerstudio/houseitems/gnomechess', 60006), + (26130, 24095, 'playerstudio/houseitems/leatherottoman', 60006), + (26131, 24096, 'playerstudio/houseitems/leatherbarstool', 60006), + (26132, 24097, 'playerstudio/houseitems/leatherchair', 60006), + (26133, 24098, 'playerstudio/houseitems/leatherloveseat', 60006), + (26134, 24099, 'playerstudio/houseitems/leathersofa', 60006), + (26135, 24100, 'playerstudio/houseitems/travelingwagon', 60006), + (26136, 24101, 'playerstudio/houseitems/archedflagstonepost', 60006), + (26137, 24102, 'playerstudio/houseitems/archedflagstonefence', 60006), + (26138, 24103, 'playerstudio/houseitems/woodsplittin', 60006), + (26139, 24104, 'playerstudio/houseitems/gorowynestatesdoor', 60006), + (26140, 24105, 'ec/pc/aerakyn/aerakyn_male_head', 60006), + (26141, 24106, 'ec/pc/aerakyn/aerakyn_male_head02', 60006), + (26142, 24107, 'ec/pc/aerakyn/aerakyn_male_head03', 60006), + (26143, 24108, 'staticobjects/liveevent/halloween/dpo_ironmaiden_01', 60006), + (26144, 24109, 'staticobjects/liveevent/halloween/dpo_high_bucket_meat', 60006), + (26145, 24110, 'staticobjects/liveevent/halloween/dpo_bef_claypot03', 60006), + (26146, 24111, 'staticobjects/liveevent/halloween/dpo_oggok01_bones02', 60006), + (26147, 24112, 'staticobjects/liveevent/halloween/dpo_curtains_right_14', 60006), + (26148, 24113, 'staticobjects/liveevent/halloween/dpo_curtains_14', 60006), + (26149, 24114, 'staticobjects/liveevent/halloween/dpo_curtains_right_12', 60006), + (26150, 24115, 'staticobjects/liveevent/halloween/dpo_curtains_12', 60006), + (26151, 24116, 'staticobjects/liveevent/halloween/dpo_curtains_right_07', 60006), + (26152, 24117, 'staticobjects/liveevent/halloween/dpo_curtains_07', 60006), + (26153, 24118, 'staticobjects/liveevent/halloween/dpo_curtains_right_04', 60006), + (26154, 24119, 'staticobjects/liveevent/halloween/dpo_curtains_04', 60006), + (26155, 24120, 'staticobjects/liveevent/halloween/dpo_tombstonei001', 60006), + (26156, 24121, 'staticobjects/liveevent/halloween/dpo_tombstonef001', 60006), + (26157, 24122, 'accessories/wieldable_items/weapons/exp11/1h_crush/hammer_chillburn', 60006), + (26158, 24123, 'accessories/wieldable_items/weapons/exp11/1h_crush/hammer_pyrebringer', 60006), + (26159, 24124, 'accessories/wieldable_items/weapons/exp11/1h_crush/club_chillburn', 60006), + (26160, 24125, 'accessories/wieldable_items/weapons/exp11/1h_crush/club_pyrebringer', 60006), + (26161, 24126, 'accessories/wieldable_items/weapons/exp11/1h_crush/club_voidwrought', 60006), + (26162, 24127, 'accessories/wieldable_items/weapons/exp11/1h_crush/hammer_voidwrought', 60006), + (26163, 24128, 'accessories/wieldable_items/weapons/exp11/1h_pierce/shortspear_pyrebringer', 60006), + (26164, 24129, 'accessories/wieldable_items/weapons/exp11/1h_pierce/shortspear_chillburn', 60006), + (26165, 24130, 'accessories/wieldable_items/weapons/exp11/1h_pierce/dagger_pyrebringer', 60006), + (26166, 24131, 'accessories/wieldable_items/weapons/exp11/1h_pierce/dagger_chillburn', 60006), + (26167, 24132, 'accessories/wieldable_items/weapons/exp11/1h_pierce/dagger_voidwrought', 60006), + (26168, 24133, 'accessories/wieldable_items/weapons/exp11/1h_pierce/shortspear_voidwrought', 60006), + (26169, 24134, 'accessories/wieldable_items/weapons/exp11/1h_sword/axe_pyrebringer', 60006), + (26170, 24135, 'accessories/wieldable_items/weapons/exp11/1h_sword/axe_chillburn', 60006), + (26171, 24136, 'accessories/wieldable_items/weapons/exp11/1h_sword/sword_scimitar_chillburn', 60006), + (26172, 24137, 'accessories/wieldable_items/weapons/exp11/1h_sword/sword_scimitar_pyrebringer', 60006), + (26173, 24138, 'accessories/wieldable_items/weapons/exp11/1h_sword/sword_scimitar_voidwrought', 60006), + (26174, 24139, 'accessories/wieldable_items/weapons/exp11/1h_sword/axe_voidwrought', 60006), + (26175, 24140, 'accessories/wieldable_items/weapons/exp11/1h_wand/wand_chillburn', 60006), + (26176, 24141, 'accessories/wieldable_items/weapons/exp11/1h_wand/wand_pyrebringer', 60006), + (26177, 24142, 'accessories/wieldable_items/weapons/exp11/1h_wand/wand_voidwrought', 60006), + (26178, 24143, 'accessories/wieldable_items/weapons/exp11/bow/longbow_pyrebringer', 60006), + (26179, 24144, 'accessories/wieldable_items/weapons/exp11/bow/longbow_chillburn', 60006), + (26180, 24145, 'accessories/wieldable_items/weapons/exp11/bow/longbow_voidwrought', 60006), + (26181, 24146, 'accessories/wieldable_items/weapons/exp11/fist/fist_hooked_chillburn', 60006), + (26182, 24147, 'accessories/wieldable_items/weapons/exp11/fist/fist_hooked_pyrebringer', 60006), + (26183, 24148, 'accessories/wieldable_items/weapons/exp11/fist/fist_hooked_voidwrought', 60006), + (26184, 24149, 'accessories/wieldable_items/weapons/exp11/staff/staff_mage_pyrebringer', 60006), + (26185, 24150, 'accessories/wieldable_items/weapons/exp11/staff/staff_mage_chillburn', 60006), + (26186, 24151, 'accessories/wieldable_items/weapons/exp11/staff/staff_mage_voidwrought', 60006), + (26187, 24152, 'accessories/wieldable_items/weapons/exp11/staff/warstaff_pyrebringer', 60006), + (26188, 24153, 'accessories/wieldable_items/weapons/exp11/staff/warstaff_chillburn', 60006), + (26189, 24154, 'accessories/wieldable_items/weapons/exp11/staff/warstaff_voidwrought', 60006), + (26190, 24155, 'accessories/wearable_items/_exp11/hero_bracers/red_bracer/bracer_left', 60006), + (26191, 24156, 'accessories/wearable_items/_exp11/hero_bracers/red_bracer/bracer_right', 60006), + (26192, 24157, 'accessories/wearable_items/_exp11/hero_bracers/red_bracer/handcover_left', 60006), + (26193, 24158, 'accessories/wearable_items/_exp11/hero_bracers/red_bracer/handcover_right', 60006), + (26194, 24159, 'accessories/wearable_items/_exp11/hero_bracers/red_bracer/hands_combined', 60006), + (26195, 24160, 'ec/pc/aerakyn/aerakyn_male_wings02', 60006), + (26196, 24161, 'playerstudio/characters/weapons/1h_wand/crumbling_wand', 60006), + (26197, 24162, 'playerstudio/characters/weapons/1h_sword/crumbling_sword/crumbling_sword', 60006), + (26198, 24163, 'playerstudio/characters/weapons/1h_sword/gnome_scimitar/gnome_scimitar', 60006), + (26199, 24164, 'playerstudio/characters/shields/tower_round_shields/gnome_shield/gnome_shield', 60006), + (26200, 24165, 'playerstudio/characters/shields/tower_round_shields/draconic_damage/draconic_damage', 60006), + (26201, 24166, 'ec/pc/aerakyn/aerakyn_male_head01_longhair', 60006), + (26202, 24167, 'ec/pc/aerakyn/aerakyn_male_head01_mediumhair', 60006), + (26203, 24168, 'ec/pc/aerakyn/aerakyn_male_head01_shorthair', 60006), + (26204, 24169, 'ec/pc/aerakyn/aerakyn_male_wings03', 60006), + (26205, 24170, 'staticobjects/_exp10/chelsith_stone_reformed_fx', 60006), + (26206, 24171, 'staticobjects/_exp10/chelsith_stone_reformed_noalpha_fx', 60006), + (26207, 24172, 'accessories/wearable_items/_exp11/hero_bracers/red_bracer/forearms_combined', 60006), + (26208, 24173, '_exp11/characters/tool_users/lava_pygmy/lava_pygmy_female_base', 60006), + (26209, 24174, 'playerstudio/characters/weapons/staff/heart_staff/heart_staff', 60006), + (26210, 24175, '_exp11/characters/tool_users/lava_pygmy/lava_pygmy_female_warrior', 60006), + (26211, 24176, '_exp11/characters/tool_users/lava_pygmy/lava_pygmy_queen', 60006), + (26212, 24177, '_exp08/characters/monsters/kerafyrm/kerafyrm_skyshrine_rooms', 60006), + (26213, 24178, 'projectiles/bone_spike_trail', 60006), + (26214, 24179, 'accessories/wearable_items/snapons/backpacks/backpack_clawsofveeshan/backpack_clawsofveeshan', 60006), + (26215, 24180, 'accessories/wearable_items/snapons/backpacks/backpack_clawsofveeshan/swivel_stein', 60006), + (26216, 24181, 'accessories/wearable_items/snapons/backpacks/backpack_clawsofveeshan/swivel_flask', 60006), + (26217, 24182, 'staticobjects/statues/nekf_darkelf_foci001_quest', 60006), + (26218, 24183, 'ec/pc/aerakyn/aerakyn_male_head01_mediumhair02', 60006), + (26219, 24184, 'ec/pc/aerakyn/aerakyn_male_head01_mohawk', 60006), + (26220, 24185, 'ec/pc/aerakyn/aerakyn_male_head01_ponytail', 60006), + (26221, 24186, 'ec/pc/aerakyn/aerakyn_male_head02_longhair', 60006), + (26222, 24187, 'ec/pc/aerakyn/aerakyn_male_head02_mediumhair', 60006), + (26223, 24188, 'ec/pc/aerakyn/aerakyn_male_head02_mediumhair02', 60006), + (26224, 24189, 'ec/pc/aerakyn/aerakyn_male_head02_mohawk', 60006), + (26225, 24190, 'ec/pc/aerakyn/aerakyn_male_head02_ponytail', 60006), + (26226, 24191, 'ec/pc/aerakyn/aerakyn_male_head02_shorthair', 60006), + (26227, 24192, 'ec/pc/aerakyn/aerakyn_male_head03_longhair', 60006), + (26228, 24193, 'ec/pc/aerakyn/aerakyn_male_head03_mediumhair', 60006), + (26229, 24194, 'ec/pc/aerakyn/aerakyn_male_head03_mediumhair02', 60006), + (26230, 24195, 'ec/pc/aerakyn/aerakyn_male_head03_mohawk', 60006), + (26231, 24196, 'ec/pc/aerakyn/aerakyn_male_head03_ponytail', 60006), + (26232, 24197, 'ec/pc/aerakyn/aerakyn_male_head03_shorthair', 60006), + (26233, 24198, 'ec/pc/aerakyn/aerakyn_male_head04', 60006), + (26234, 24199, 'ec/pc/aerakyn/aerakyn_male_head04_longhair', 60006), + (26235, 24200, 'ec/pc/aerakyn/aerakyn_male_head04_mediumhair', 60006), + (26236, 24201, 'ec/pc/aerakyn/aerakyn_male_head04_mediumhair02', 60006), + (26237, 24202, 'ec/pc/aerakyn/aerakyn_male_head04_mohawk', 60006), + (26238, 24203, 'ec/pc/aerakyn/aerakyn_male_head04_ponytail', 60006), + (26239, 24204, 'ec/pc/aerakyn/aerakyn_male_head04_shorthair', 60006), + (26240, 24205, 'ec/pc/aerakyn/aerakyn_male_head05', 60006), + (26241, 24206, 'ec/pc/aerakyn/aerakyn_male_head05_longhair', 60006), + (26242, 24207, 'ec/pc/aerakyn/aerakyn_male_head05_mediumhair', 60006), + (26243, 24208, 'ec/pc/aerakyn/aerakyn_male_head05_mediumhair02', 60006), + (26244, 24209, 'ec/pc/aerakyn/aerakyn_male_head05_mohawk', 60006), + (26245, 24210, 'ec/pc/aerakyn/aerakyn_male_head05_ponytail', 60006), + (26246, 24211, 'ec/pc/aerakyn/aerakyn_male_head05_shorthair', 60006), + (26247, 24212, 'ec/pc/aerakyn/aerakyn_male_head06', 60006), + (26248, 24213, 'ec/pc/aerakyn/aerakyn_male_head06_mediumhair', 60006), + (26249, 24214, 'ec/pc/aerakyn/aerakyn_male_head06_mediumhair02', 60006), + (26250, 24215, 'ec/pc/aerakyn/aerakyn_male_head06_mohawk', 60006), + (26251, 24216, 'ec/pc/aerakyn/aerakyn_male_head06_ponytail', 60006), + (26252, 24217, 'ec/pc/aerakyn/aerakyn_male_head06_shorthair', 60006), + (26253, 24218, 'playerstudio/characters/shields/tower_round_shields/bunnyshield/bunnyshield', 60006), + (26254, 24219, 'staticobjects/liveevent/anniversary_event/dpo_lf_cart_nybright02', 60006), + (26255, 24220, 'staticobjects/weapons/dpo_soulfire', 60006), + (26256, 24221, 'staticobjects/weapons/dpo_qeynos_claymore', 60006), + (26257, 24222, 'creatures/mounts/insect_leaper/insect_leaper_base', 60006), + (26258, 24223, 'creatures/monsters/stegosaurus_variant', 60006), + (26259, 24224, 'playerstudio/houseitems/rose_wallsconce', 60006), + (26260, 24225, 'playerstudio/houseitems/rose_chandelier', 60006), + (26261, 24226, 'playerstudio/houseitems/elfin_endtable', 60006), + (26262, 24227, 'playerstudio/houseitems/elfin_diningtable', 60006), + (26263, 24228, 'playerstudio/houseitems/elfin_coffeetable', 60006), + (26264, 24229, 'playerstudio/houseitems/elfin_chair', 60006), + (26265, 24230, 'playerstudio/houseitems/elfin_bookcase', 60006), + (26266, 24231, 'playerstudio/houseitems/fan_moonlitblossom', 60006), + (26267, 24232, 'playerstudio/houseitems/fan_pondprincess', 60006), + (26268, 24233, 'playerstudio/houseitems/fan_sunsetcrane', 60006), + (26269, 24234, 'playerstudio/houseitems/halasian_lovejays', 60006), + (26270, 24235, 'playerstudio/houseitems/ancient_foodog', 60006), + (26271, 24236, 'playerstudio/houseitems/starfish_titanic', 60006), + (26272, 24237, 'playerstudio/houseitems/starfish_starburst', 60006), + (26273, 24238, 'playerstudio/houseitems/starfish_luclin', 60006), + (26274, 24239, 'playerstudio/houseitems/starfish_common', 60006), + (26275, 24240, 'ec/pc/aerakyn/aerakyn_male_head06_longhair', 60006), + (26276, 24241, 'ec/pc/aerakyn/aerakyn_male_wings04', 60006), + (26277, 24242, 'ec/pc/aerakyn/aerakyn_male_wings05', 60006), + (26278, 24243, 'playerstudio/characters/cloaks/chess_cloak/chess_cloak', 60006), + (26279, 24244, '_exp05/monsters/elemental_wave_red_goo', 60006), + (26280, 24245, 'accessories/wieldable_items/shields/exp11/shield_kite_nautical', 60006), + (26281, 24246, 'accessories/wieldable_items/shields/exp11/shield_kite_pirate', 60006), + (26282, 24247, 'accessories/wearable_items/_exp11/overland_regal/accessories/pauldron_chain_blue_left', 60006), + (26283, 24248, 'accessories/wearable_items/_exp11/overland_regal/accessories/pauldron_chain_blue_right', 60006), + (26284, 24249, 'accessories/wearable_items/_exp11/overland_regal/accessories/pauldron_chain_red_left', 60006), + (26285, 24250, 'accessories/wearable_items/_exp11/overland_regal/accessories/pauldron_chain_red_right', 60006), + (26286, 24251, 'accessories/wearable_items/_exp11/overland_regal/accessories/pauldron_leather_blue_left', 60006), + (26287, 24252, 'accessories/wearable_items/_exp11/overland_regal/accessories/pauldron_leather_blue_right', 60006), + (26288, 24253, 'accessories/wearable_items/_exp11/overland_regal/accessories/pauldron_leather_red_left', 60006), + (26289, 24254, 'accessories/wearable_items/_exp11/overland_regal/accessories/pauldron_leather_red_right', 60006), + (26290, 24255, 'accessories/wearable_items/_exp11/overland_regal/accessories/pauldron_robe_blue_left', 60006), + (26291, 24256, 'accessories/wearable_items/_exp11/overland_regal/accessories/pauldron_robe_blue_right', 60006), + (26292, 24257, 'accessories/wearable_items/_exp11/overland_regal/accessories/pauldron_robe_red_left', 60006), + (26293, 24258, 'accessories/wearable_items/_exp11/overland_regal/accessories/pauldron_robe_red_right', 60006), + (26294, 24259, 'accessories/wearable_items/_exp11/overland_regal/accessories/pauldron_vanguard_blue_left', 60006), + (26295, 24260, 'accessories/wearable_items/_exp11/overland_regal/accessories/pauldron_vanguard_blue_right', 60006), + (26296, 24261, 'accessories/wearable_items/_exp11/overland_regal/accessories/pauldron_vanguard_red_left', 60006), + (26297, 24262, 'accessories/wearable_items/_exp11/overland_regal/accessories/pauldron_vanguard_red_right', 60006), + (26298, 24263, 'accessories/wearable_items/_exp11/overland_regal/chain_blue/chest', 60006), + (26299, 24264, 'accessories/wearable_items/_exp11/overland_regal/chain_blue/feet', 60006), + (26300, 24265, 'accessories/wearable_items/_exp11/overland_regal/chain_blue/forearms', 60006), + (26301, 24266, 'accessories/wearable_items/_exp11/overland_regal/chain_blue/hands', 60006), + (26302, 24267, 'accessories/wearable_items/_exp11/overland_regal/chain_blue/head', 60006), + (26303, 24268, 'accessories/wearable_items/_exp11/overland_regal/chain_blue/legs', 60006), + (26304, 24269, 'accessories/wearable_items/_exp11/overland_regal/chain_blue/legs_noskirt', 60006), + (26305, 24270, 'accessories/wearable_items/_exp11/overland_regal/chain_blue/shoulders', 60006), + (26306, 24271, 'accessories/wearable_items/_exp11/overland_regal/chain_blue/shoulders_epic', 60006), + (26307, 24272, 'accessories/wearable_items/_exp11/overland_regal/chain_blue/shoulders_nopauldrons', 60006), + (26308, 24273, 'accessories/wearable_items/_exp11/overland_regal/chain_blue/skirt', 60006), + (26309, 24274, 'accessories/wearable_items/_exp11/overland_regal/chain_red/chest', 60006), + (26310, 24275, 'accessories/wearable_items/_exp11/overland_regal/chain_red/feet', 60006), + (26311, 24276, 'accessories/wearable_items/_exp11/overland_regal/chain_red/forearms', 60006), + (26312, 24277, 'accessories/wearable_items/_exp11/overland_regal/chain_red/hands', 60006), + (26313, 24278, 'accessories/wearable_items/_exp11/overland_regal/chain_red/head', 60006), + (26314, 24279, 'accessories/wearable_items/_exp11/overland_regal/chain_red/legs', 60006), + (26315, 24280, 'accessories/wearable_items/_exp11/overland_regal/chain_red/legs_noskirt', 60006), + (26316, 24281, 'accessories/wearable_items/_exp11/overland_regal/chain_red/shoulders', 60006), + (26317, 24282, 'accessories/wearable_items/_exp11/overland_regal/chain_red/shoulders_epic', 60006), + (26318, 24283, 'accessories/wearable_items/_exp11/overland_regal/chain_red/shoulders_nopauldrons', 60006), + (26319, 24284, 'accessories/wearable_items/_exp11/overland_regal/chain_red/skirt', 60006), + (26320, 24285, 'accessories/wearable_items/_exp11/overland_regal/heavycloth/chest', 60006), + (26321, 24286, 'accessories/wearable_items/_exp11/overland_regal/heavycloth/feet', 60006), + (26322, 24287, 'accessories/wearable_items/_exp11/overland_regal/heavycloth/hands', 60006), + (26323, 24288, 'accessories/wearable_items/_exp11/overland_regal/heavycloth/head', 60006), + (26324, 24289, 'accessories/wearable_items/_exp11/overland_regal/heavycloth/legs', 60006), + (26325, 24290, 'accessories/wearable_items/_exp11/overland_regal/heavycloth/shoulders', 60006), + (26326, 24291, 'accessories/wearable_items/_exp11/overland_regal/heavycloth/skirt', 60006), + (26327, 24292, 'accessories/wearable_items/_exp11/overland_regal/heavycloth/belt/skirt 2', 60006), + (26328, 24293, 'accessories/wearable_items/_exp11/overland_regal/heavycloth/belt/skirt', 60006), + (26329, 24294, 'accessories/wearable_items/_exp11/overland_regal/heavycloth_red/chest', 60006), + (26330, 24295, 'accessories/wearable_items/_exp11/overland_regal/heavycloth_red/feet', 60006), + (26331, 24296, 'accessories/wearable_items/_exp11/overland_regal/heavycloth_red/hands', 60006), + (26332, 24297, 'accessories/wearable_items/_exp11/overland_regal/heavycloth_red/head', 60006), + (26333, 24298, 'accessories/wearable_items/_exp11/overland_regal/heavycloth_red/legs', 60006), + (26334, 24299, 'accessories/wearable_items/_exp11/overland_regal/heavycloth_red/shoulders', 60006), + (26335, 24300, 'accessories/wearable_items/_exp11/overland_regal/heavycloth_red/skirt', 60006), + (26336, 24301, 'accessories/wearable_items/_exp11/overland_regal/heavycloth_red/belt/skirt 2', 60006), + (26337, 24302, 'accessories/wearable_items/_exp11/overland_regal/heavycloth_red/belt/skirt', 60006), + (26338, 24303, 'accessories/wearable_items/_exp11/overland_regal/leather_blue/chest', 60006), + (26339, 24304, 'accessories/wearable_items/_exp11/overland_regal/leather_blue/feet', 60006), + (26340, 24305, 'accessories/wearable_items/_exp11/overland_regal/leather_blue/forearms', 60006), + (26341, 24306, 'accessories/wearable_items/_exp11/overland_regal/leather_blue/hands', 60006), + (26342, 24307, 'accessories/wearable_items/_exp11/overland_regal/leather_blue/head', 60006), + (26343, 24308, 'accessories/wearable_items/_exp11/overland_regal/leather_blue/legs', 60006), + (26344, 24309, 'accessories/wearable_items/_exp11/overland_regal/leather_blue/legs_noskirt', 60006), + (26345, 24310, 'accessories/wearable_items/_exp11/overland_regal/leather_blue/shoulders', 60006), + (26346, 24311, 'accessories/wearable_items/_exp11/overland_regal/leather_blue/shoulders_epic', 60006), + (26347, 24312, 'accessories/wearable_items/_exp11/overland_regal/leather_blue/shoulders_nopauldrons', 60006), + (26348, 24313, 'accessories/wearable_items/_exp11/overland_regal/leather_blue/skirt', 60006), + (26349, 24314, 'accessories/wearable_items/_exp11/overland_regal/leather_red/chest', 60006), + (26350, 24315, 'accessories/wearable_items/_exp11/overland_regal/leather_red/feet', 60006), + (26351, 24316, 'accessories/wearable_items/_exp11/overland_regal/leather_red/forearms', 60006), + (26352, 24317, 'accessories/wearable_items/_exp11/overland_regal/leather_red/hands', 60006), + (26353, 24318, 'accessories/wearable_items/_exp11/overland_regal/leather_red/head', 60006), + (26354, 24319, 'accessories/wearable_items/_exp11/overland_regal/leather_red/legs', 60006), + (26355, 24320, 'accessories/wearable_items/_exp11/overland_regal/leather_red/legs_noskirt', 60006), + (26356, 24321, 'accessories/wearable_items/_exp11/overland_regal/leather_red/shoulders', 60006), + (26357, 24322, 'accessories/wearable_items/_exp11/overland_regal/leather_red/shoulders_epic', 60006), + (26358, 24323, 'accessories/wearable_items/_exp11/overland_regal/leather_red/shoulders_nopauldrons', 60006), + (26359, 24324, 'accessories/wearable_items/_exp11/overland_regal/leather_red/skirt', 60006), + (26360, 24325, 'accessories/wearable_items/_exp11/overland_regal/robe_blue/chest', 60006), + (26361, 24326, 'accessories/wearable_items/_exp11/overland_regal/robe_blue/chest_epic', 60006), + (26362, 24327, 'accessories/wearable_items/_exp11/overland_regal/robe_blue/feet', 60006), + (26363, 24328, 'accessories/wearable_items/_exp11/overland_regal/robe_blue/hands', 60006), + (26364, 24329, 'accessories/wearable_items/_exp11/overland_regal/robe_blue/head', 60006), + (26365, 24330, 'accessories/wearable_items/_exp11/overland_regal/robe_blue/pants', 60006), + (26366, 24331, 'accessories/wearable_items/_exp11/overland_regal/robe_blue/skirt', 60006), + (26367, 24332, 'accessories/wearable_items/_exp11/overland_regal/robe_red/chest', 60006), + (26368, 24333, 'accessories/wearable_items/_exp11/overland_regal/robe_red/chest_epic', 60006), + (26369, 24334, 'accessories/wearable_items/_exp11/overland_regal/robe_red/feet', 60006), + (26370, 24335, 'accessories/wearable_items/_exp11/overland_regal/robe_red/hands', 60006), + (26371, 24336, 'accessories/wearable_items/_exp11/overland_regal/robe_red/head', 60006), + (26372, 24337, 'accessories/wearable_items/_exp11/overland_regal/robe_red/pants', 60006), + (26373, 24338, 'accessories/wearable_items/_exp11/overland_regal/robe_red/skirt', 60006), + (26374, 24339, 'accessories/wearable_items/_exp11/overland_regal/vanguard_blue/chest', 60006), + (26375, 24340, 'accessories/wearable_items/_exp11/overland_regal/vanguard_blue/feet', 60006), + (26376, 24341, 'accessories/wearable_items/_exp11/overland_regal/vanguard_blue/forearms', 60006), + (26377, 24342, 'accessories/wearable_items/_exp11/overland_regal/vanguard_blue/hands', 60006), + (26378, 24343, 'accessories/wearable_items/_exp11/overland_regal/vanguard_blue/head', 60006), + (26379, 24344, 'accessories/wearable_items/_exp11/overland_regal/vanguard_blue/left', 60006), + (26380, 24345, 'accessories/wearable_items/_exp11/overland_regal/vanguard_blue/legs', 60006), + (26381, 24346, 'accessories/wearable_items/_exp11/overland_regal/vanguard_blue/legs_noskirt', 60006), + (26382, 24347, 'accessories/wearable_items/_exp11/overland_regal/vanguard_blue/right', 60006), + (26383, 24348, 'accessories/wearable_items/_exp11/overland_regal/vanguard_blue/shoulders', 60006), + (26384, 24349, 'accessories/wearable_items/_exp11/overland_regal/vanguard_blue/shoulders_epic', 60006), + (26385, 24350, 'accessories/wearable_items/_exp11/overland_regal/vanguard_blue/shoulders_nopauldrons', 60006), + (26386, 24351, 'accessories/wearable_items/_exp11/overland_regal/vanguard_blue/skirt', 60006), + (26387, 24352, 'accessories/wearable_items/_exp11/overland_regal/vanguard_red/chest', 60006), + (26388, 24353, 'accessories/wearable_items/_exp11/overland_regal/vanguard_red/feet', 60006), + (26389, 24354, 'accessories/wearable_items/_exp11/overland_regal/vanguard_red/forearms', 60006), + (26390, 24355, 'accessories/wearable_items/_exp11/overland_regal/vanguard_red/hands', 60006), + (26391, 24356, 'accessories/wearable_items/_exp11/overland_regal/vanguard_red/head', 60006), + (26392, 24357, 'accessories/wearable_items/_exp11/overland_regal/vanguard_red/left', 60006), + (26393, 24358, 'accessories/wearable_items/_exp11/overland_regal/vanguard_red/legs', 60006), + (26394, 24359, 'accessories/wearable_items/_exp11/overland_regal/vanguard_red/legs_noskirt', 60006), + (26395, 24360, 'accessories/wearable_items/_exp11/overland_regal/vanguard_red/right', 60006), + (26396, 24361, 'accessories/wearable_items/_exp11/overland_regal/vanguard_red/shoulders', 60006), + (26397, 24362, 'accessories/wearable_items/_exp11/overland_regal/vanguard_red/shoulders_epic', 60006), + (26398, 24363, 'accessories/wearable_items/_exp11/overland_regal/vanguard_red/shoulders_nopauldrons', 60006), + (26399, 24364, 'accessories/wearable_items/_exp11/overland_regal/vanguard_red/skirt', 60006), + (26400, 24365, '_exp11/objects/exp11_dun_highhold/triangular_platform_dpo', 60006), + (26401, 24366, 'playerstudio/characters/weapons/staff/staff_of_the_inferno/staff_of_the_inferno', 60006), + (26402, 24367, 'projectiles/spell_magic_mine', 60006), + (26403, 24368, 'accessories/wieldable_items/weapons/exp11/1h_crush/hammer_elementalfire', 60006), + (26404, 24369, 'accessories/wieldable_items/weapons/exp11/1h_sword/sword_elementalfire', 60006), + (26405, 24370, 'accessories/wieldable_items/weapons/exp11/1h_wand/wand_elementalfire', 60006), + (26406, 24371, 'accessories/wieldable_items/weapons/exp11/bow/longbow_elementalfire', 60006), + (26407, 24372, 'accessories/wieldable_items/weapons/exp11/staff/scythe_elementalfire', 60006), + (26408, 24373, 'ec/pc/aerakyn/aerakyn_female', 60006), + (26409, 24374, 'ec/pc/aerakyn/aerakyn_female_head', 60006), + (26410, 24375, 'ec/pc/aerakyn/aerakyn_female_head01_mohawk', 60006), + (26411, 24376, 'creatures/monsters/triceratops_variant', 60006), + (26412, 24377, '_exp11/objects/exp11_dun_highhold/weaponrack_empty_dpo', 60006), + (26413, 24378, '_exp11/objects/exp11_dun_highhold/weaponrack_full_dpo', 60006), + (26414, 24379, 'ec/pc/ogre/golem_flesh', 60006), + (26415, 24380, 'creatures/mounts/hellhound_mount/hellhound_mount', 60006), + (26416, 24381, 'accessories/wieldable_items/weapons/exp11/1h_crush/hammer_elementalfire_lesser', 60006), + (26417, 24382, 'accessories/wieldable_items/weapons/exp11/1h_sword/sword_elementalfire_lesser', 60006), + (26418, 24383, 'accessories/wieldable_items/weapons/exp11/1h_wand/wand_elementalfire_lesser', 60006), + (26419, 24384, 'accessories/wieldable_items/weapons/exp11/bow/longbow_elementalfire_lesser', 60006), + (26420, 24385, 'accessories/wieldable_items/weapons/exp11/staff/scythe_elementalfire_lesser', 60006), + (26421, 24386, 'ec/pc/aerakyn/aerakyn_female_head01_bun', 60006), + (26422, 24387, 'playerstudio/houseitems/eaglebench', 60006), + (26423, 24388, 'playerstudio/houseitems/eagleshelf', 60006), + (26424, 24389, 'playerstudio/houseitems/ironwoodbed', 60006), + (26425, 24390, 'playerstudio/houseitems/ironwooddiningchair', 60006), + (26426, 24391, 'playerstudio/houseitems/ironwooddiningtable', 60006), + (26427, 24392, 'playerstudio/houseitems/ironwoodendtable', 60006), + (26428, 24393, 'playerstudio/houseitems/spiralstaircasegnomeworks', 60006), + (26429, 24394, 'playerstudio/houseitems/spiralstaircasepolishedwood', 60006), + (26430, 24395, 'playerstudio/houseitems/spiralstaircaseregalmarble', 60006), + (26431, 24396, 'playerstudio/houseitems/stepstaircasegnome', 60006), + (26432, 24397, 'playerstudio/houseitems/stepstaircasepolishedwood', 60006), + (26433, 24398, 'playerstudio/houseitems/stepstaircaseregalmarble', 60006), + (26434, 24399, 'playerstudio/houseitems/waterwell', 60006), + (26435, 24400, 'playerstudio/characters/shields/tower_round_shields/disease/disease', 60006), + (26436, 24401, 'playerstudio/characters/cloaks/norrath_war/cloak_norrath_war', 60006), + (26437, 24402, 'ec/pc/aerakyn/aerakyn_female_head01_side', 60006), + (26438, 24403, 'ec/pc/aerakyn/aerakyn_female_head01_long', 60006), + (26439, 24404, 'ec/pc/aerakyn/aerakyn_female_head01_pigtails', 60006), + (26440, 24405, 'ec/pc/aerakyn/aerakyn_female_head01_pullback', 60006), + (26441, 24406, 'ec/pc/aerakyn/aerakyn_female_head02', 60006), + (26442, 24407, 'ec/pc/aerakyn/aerakyn_female_head02_bun', 60006), + (26443, 24408, 'ec/pc/aerakyn/aerakyn_female_head02_long', 60006), + (26444, 24409, 'ec/pc/aerakyn/aerakyn_female_head02_mohawk', 60006), + (26445, 24410, 'ec/pc/aerakyn/aerakyn_female_head02_pigtails', 60006), + (26446, 24411, 'ec/pc/aerakyn/aerakyn_female_head02_pullback', 60006), + (26447, 24412, 'ec/pc/aerakyn/aerakyn_female_head02_side', 60006), + (26448, 24413, 'ec/pc/aerakyn/aerakyn_female_head03', 60006), + (26449, 24414, 'ec/pc/aerakyn/aerakyn_female_head03_bun', 60006), + (26450, 24415, 'ec/pc/aerakyn/aerakyn_female_head03_long', 60006), + (26451, 24416, 'ec/pc/aerakyn/aerakyn_female_head03_mohawk', 60006), + (26452, 24417, 'ec/pc/aerakyn/aerakyn_female_head03_pigtails', 60006), + (26453, 24418, 'ec/pc/aerakyn/aerakyn_female_head03_pullback', 60006), + (26454, 24419, 'ec/pc/aerakyn/aerakyn_female_head03_side', 60006), + (26455, 24420, 'ec/pc/aerakyn/aerakyn_female_head04', 60006), + (26456, 24421, 'ec/pc/aerakyn/aerakyn_female_head04_bun', 60006), + (26457, 24422, 'ec/pc/aerakyn/aerakyn_female_head04_long', 60006), + (26458, 24423, 'ec/pc/aerakyn/aerakyn_female_head04_mohawk', 60006), + (26459, 24424, 'ec/pc/aerakyn/aerakyn_female_head04_pigtails', 60006), + (26460, 24425, 'ec/pc/aerakyn/aerakyn_female_head04_pullback', 60006), + (26461, 24426, 'ec/pc/aerakyn/aerakyn_female_head04_side', 60006), + (26462, 24427, 'ec/pc/aerakyn/aerakyn_female_head05', 60006), + (26463, 24428, 'ec/pc/aerakyn/aerakyn_female_head05_bun', 60006), + (26464, 24429, 'ec/pc/aerakyn/aerakyn_female_head05_long', 60006), + (26465, 24430, 'ec/pc/aerakyn/aerakyn_female_head05_mohawk', 60006), + (26466, 24431, 'ec/pc/aerakyn/aerakyn_female_head05_pigtails', 60006), + (26467, 24432, 'ec/pc/aerakyn/aerakyn_female_head05_pullback', 60006), + (26468, 24433, 'ec/pc/aerakyn/aerakyn_female_head05_side', 60006), + (26469, 24434, 'ec/pc/aerakyn/aerakyn_female_head06', 60006), + (26470, 24435, 'ec/pc/aerakyn/aerakyn_female_head06_bun', 60006), + (26471, 24436, 'ec/pc/aerakyn/aerakyn_female_head06_long', 60006), + (26472, 24437, 'ec/pc/aerakyn/aerakyn_female_head06_mohawk', 60006), + (26473, 24438, 'ec/pc/aerakyn/aerakyn_female_head06_pigtails', 60006), + (26474, 24439, 'ec/pc/aerakyn/aerakyn_female_head06_pullback', 60006), + (26475, 24440, 'ec/pc/aerakyn/aerakyn_female_head06_side', 60006), + (26476, 24441, 'playerstudio/houseitems/castle_tower_turret', 60006), + (26477, 24442, 'playerstudio/houseitems/coffee_carousel', 60006), + (26478, 24443, 'playerstudio/houseitems/coffee_cart', 60006), + (26479, 24444, 'playerstudio/houseitems/coffee_chair', 60006), + (26480, 24445, 'playerstudio/houseitems/coffee_counter', 60006), + (26481, 24446, 'playerstudio/houseitems/coffee_ex_table', 60006), + (26482, 24447, 'playerstudio/houseitems/coffee_expresso_bot', 60006), + (26483, 24448, 'playerstudio/houseitems/coffee_expresso_table', 60006), + (26484, 24449, 'playerstudio/houseitems/coffee_ice_maker', 60006), + (26485, 24450, 'playerstudio/houseitems/coffee_icee_display', 60006), + (26486, 24451, 'playerstudio/houseitems/coffee_oven', 60006), + (26487, 24452, 'playerstudio/houseitems/coffee_table', 60006), + (26488, 24453, 'playerstudio/houseitems/coffee_tray', 60006), + (26489, 24454, 'playerstudio/houseitems/cutting_board', 60006), + (26490, 24455, 'playerstudio/houseitems/hookah_coldain', 60006), + (26491, 24456, 'playerstudio/houseitems/hookah_majdul', 60006), + (26492, 24457, 'playerstudio/houseitems/plate_sushi', 60006), + (26493, 24458, 'playerstudio/houseitems/plate_taco', 60006), + (26494, 24459, 'playerstudio/houseitems/summer_stone_gazebo', 60006), + (26495, 24460, 'playerstudio/houseitems/summer_wooden_gazebo', 60006), + (26496, 24461, '_exp11/objects/exp11_dun_highhold/crate_empty_dpo', 60006), + (26497, 24462, '_exp11/objects/exp11_dun_highhold/crate_empty_fs_dpo', 60006), + (26498, 24463, '_exp11/objects/exp11_dun_highhold/crate_full_dpo', 60006), + (26499, 24464, '_exp11/objects/exp11_dun_highhold/crate_full_fs_dpo', 60006), + (26500, 24465, '_exp11/objects/exp11_dun_highhold/shipping_crate_dpo', 60006), + (26501, 24466, '_exp11/objects/exp11_dun_highhold/shipping_crate_fs_dpo', 60006), + (26502, 24467, 'creatures/mounts/zipline_mount', 60006), + (26503, 24468, 'creatures/tu/rhoen_theer_evil_skyshrine', 60006), + (26504, 24469, '_exp11/characters/tool_users/akheva/akheva_female_formal', 60006), + (26505, 24470, 'creatures/mounts/dino_flyer/pteranodon_base', 60006), + (26506, 24471, 'playerstudio/characters/shields/tower_round_shields/planked/planked', 60006), + (26507, 24472, 'playerstudio/characters/shields/tower_round_shields/ra/ra', 60006), + (26508, 24473, '_exp11/characters/tool_users/cazik_thule/cazik_thule', 60006), + (26509, 24474, '_exp11/characters/tool_users/akheva/akheva_female_mage', 60006), + (26510, 24475, 'creatures/monsters/ankylosaurus_variant_2013_02', 60006), + (26511, 24476, 'creatures/monsters/ankylosaurus_variant_2013_03', 60006), + (26512, 24477, 'creatures/monsters/ankylosaurus_variant_2013_04', 60006), + (26513, 24478, 'creatures/monsters/apatosaurus_02', 60006), + (26514, 24479, 'creatures/monsters/apatosaurus_03', 60006), + (26515, 24480, 'creatures/monsters/apatosaurus_04', 60006), + (26516, 24481, 'creatures/monsters/stegosaurus_variant_02', 60006), + (26517, 24482, 'creatures/monsters/stegosaurus_variant_03', 60006), + (26518, 24483, 'creatures/monsters/stegosaurus_variant_04', 60006), + (26519, 24484, '_exp11/objects/exp11_dun_highhold/spiderbear_evil_webwrap01_upright_dpo', 60006), + (26520, 24485, 'playerstudio/characters/shields/tower_round_shields/rubicte_forged/rubicite_forged', 60006), + (26521, 24486, '_exp08/objects/exp08_dun_skyshrine_kerafyrm/emit_skyshrine_top_shield_dpo', 60006), + (26522, 24487, 'creatures/tu/lizardkin_mounted', 60006), + (26523, 24488, '_exp11/characters/tool_users/akheva/akheva_female_queen', 60006), + (26524, 24489, 'accessories/wearable_items/_exp11/shissar/chain_bronze/chest', 60006), + (26525, 24490, 'accessories/wearable_items/_exp11/shissar/chain_bronze/feet', 60006), + (26526, 24491, 'accessories/wearable_items/_exp11/shissar/chain_bronze/forearms', 60006), + (26527, 24492, 'accessories/wearable_items/_exp11/shissar/chain_bronze/hands', 60006), + (26528, 24493, 'accessories/wearable_items/_exp11/shissar/chain_bronze/head', 60006), + (26529, 24494, 'accessories/wearable_items/_exp11/shissar/chain_bronze/head_templar', 60006), + (26530, 24495, 'accessories/wearable_items/_exp11/shissar/chain_bronze/legs', 60006), + (26531, 24496, 'accessories/wearable_items/_exp11/shissar/chain_bronze/legs_noskirt', 60006), + (26532, 24497, 'accessories/wearable_items/_exp11/shissar/chain_bronze/shoulders', 60006), + (26533, 24498, 'accessories/wearable_items/_exp11/shissar/chain_bronze/shoulders_epic', 60006), + (26534, 24499, 'accessories/wearable_items/_exp11/shissar/chain_bronze/skirt', 60006), + (26535, 24500, 'accessories/wearable_items/_exp11/shissar/chain_dark/chest', 60006), + (26536, 24501, 'accessories/wearable_items/_exp11/shissar/chain_dark/feet', 60006), + (26537, 24502, 'accessories/wearable_items/_exp11/shissar/chain_dark/forearms', 60006), + (26538, 24503, 'accessories/wearable_items/_exp11/shissar/chain_dark/hands', 60006), + (26539, 24504, 'accessories/wearable_items/_exp11/shissar/chain_dark/head', 60006), + (26540, 24505, 'accessories/wearable_items/_exp11/shissar/chain_dark/head_templar', 60006), + (26541, 24506, 'accessories/wearable_items/_exp11/shissar/chain_dark/legs', 60006), + (26542, 24507, 'accessories/wearable_items/_exp11/shissar/chain_dark/legs_noskirt', 60006), + (26543, 24508, 'accessories/wearable_items/_exp11/shissar/chain_dark/shoulders', 60006), + (26544, 24509, 'accessories/wearable_items/_exp11/shissar/chain_dark/shoulders_epic', 60006), + (26545, 24510, 'accessories/wearable_items/_exp11/shissar/chain_dark/skirt', 60006), + (26546, 24511, 'accessories/wearable_items/_exp11/shissar/heavycloth_bronze/chest', 60006), + (26547, 24512, 'accessories/wearable_items/_exp11/shissar/heavycloth_bronze/feet', 60006), + (26548, 24513, 'accessories/wearable_items/_exp11/shissar/heavycloth_bronze/hands', 60006), + (26549, 24514, 'accessories/wearable_items/_exp11/shissar/heavycloth_bronze/head', 60006), + (26550, 24515, 'accessories/wearable_items/_exp11/shissar/heavycloth_bronze/legs', 60006), + (26551, 24516, 'accessories/wearable_items/_exp11/shissar/heavycloth_bronze/shoulders', 60006), + (26552, 24517, 'accessories/wearable_items/_exp11/shissar/heavycloth_bronze/shoulders_epic', 60006), + (26553, 24518, 'accessories/wearable_items/_exp11/shissar/heavycloth_bronze/skirt', 60006), + (26554, 24519, 'accessories/wearable_items/_exp11/shissar/heavycloth_bronze/belt/skirt 2', 60006), + (26555, 24520, 'accessories/wearable_items/_exp11/shissar/heavycloth_bronze/belt/skirt', 60006), + (26556, 24521, 'accessories/wearable_items/_exp11/shissar/heavycloth_dark/chest', 60006), + (26557, 24522, 'accessories/wearable_items/_exp11/shissar/heavycloth_dark/feet', 60006), + (26558, 24523, 'accessories/wearable_items/_exp11/shissar/heavycloth_dark/hands', 60006), + (26559, 24524, 'accessories/wearable_items/_exp11/shissar/heavycloth_dark/head', 60006), + (26560, 24525, 'accessories/wearable_items/_exp11/shissar/heavycloth_dark/legs', 60006), + (26561, 24526, 'accessories/wearable_items/_exp11/shissar/heavycloth_dark/shoulders', 60006), + (26562, 24527, 'accessories/wearable_items/_exp11/shissar/heavycloth_dark/shoulders_epic', 60006), + (26563, 24528, 'accessories/wearable_items/_exp11/shissar/heavycloth_dark/skirt', 60006), + (26564, 24529, 'accessories/wearable_items/_exp11/shissar/heavycloth_dark/belt/skirt 2', 60006), + (26565, 24530, 'accessories/wearable_items/_exp11/shissar/heavycloth_dark/belt/skirt', 60006), + (26566, 24531, 'accessories/wearable_items/_exp11/shissar/leather_bronze/chest', 60006), + (26567, 24532, 'accessories/wearable_items/_exp11/shissar/leather_bronze/feet', 60006), + (26568, 24533, 'accessories/wearable_items/_exp11/shissar/leather_bronze/forearms', 60006), + (26569, 24534, 'accessories/wearable_items/_exp11/shissar/leather_bronze/hands', 60006), + (26570, 24535, 'accessories/wearable_items/_exp11/shissar/leather_bronze/head', 60006), + (26571, 24536, 'accessories/wearable_items/_exp11/shissar/leather_bronze/head_templar', 60006), + (26572, 24537, 'accessories/wearable_items/_exp11/shissar/leather_bronze/legs', 60006), + (26573, 24538, 'accessories/wearable_items/_exp11/shissar/leather_bronze/legs_noskirt', 60006), + (26574, 24539, 'accessories/wearable_items/_exp11/shissar/leather_bronze/shoulders', 60006), + (26575, 24540, 'accessories/wearable_items/_exp11/shissar/leather_bronze/shoulders_epic', 60006), + (26576, 24541, 'accessories/wearable_items/_exp11/shissar/leather_bronze/skirt', 60006), + (26577, 24542, 'accessories/wearable_items/_exp11/shissar/leather_dark/chest', 60006), + (26578, 24543, 'accessories/wearable_items/_exp11/shissar/leather_dark/feet', 60006), + (26579, 24544, 'accessories/wearable_items/_exp11/shissar/leather_dark/forearms', 60006), + (26580, 24545, 'accessories/wearable_items/_exp11/shissar/leather_dark/hands', 60006), + (26581, 24546, 'accessories/wearable_items/_exp11/shissar/leather_dark/head', 60006), + (26582, 24547, 'accessories/wearable_items/_exp11/shissar/leather_dark/head_templar', 60006), + (26583, 24548, 'accessories/wearable_items/_exp11/shissar/leather_dark/legs', 60006), + (26584, 24549, 'accessories/wearable_items/_exp11/shissar/leather_dark/legs_noskirt', 60006), + (26585, 24550, 'accessories/wearable_items/_exp11/shissar/leather_dark/shoulders', 60006), + (26586, 24551, 'accessories/wearable_items/_exp11/shissar/leather_dark/shoulders_epic', 60006), + (26587, 24552, 'accessories/wearable_items/_exp11/shissar/leather_dark/skirt', 60006), + (26588, 24553, 'accessories/wearable_items/_exp11/shissar/robe_bronze/chest', 60006), + (26589, 24554, 'accessories/wearable_items/_exp11/shissar/robe_bronze/chest_epic', 60006), + (26590, 24555, 'accessories/wearable_items/_exp11/shissar/robe_bronze/feet', 60006), + (26591, 24556, 'accessories/wearable_items/_exp11/shissar/robe_bronze/hands', 60006), + (26592, 24557, 'accessories/wearable_items/_exp11/shissar/robe_bronze/head', 60006), + (26593, 24558, 'accessories/wearable_items/_exp11/shissar/robe_bronze/head_collar', 60006), + (26594, 24559, 'accessories/wearable_items/_exp11/shissar/robe_bronze/hood', 60006), + (26595, 24560, 'accessories/wearable_items/_exp11/shissar/robe_bronze/pants', 60006), + (26596, 24561, 'accessories/wearable_items/_exp11/shissar/robe_bronze/skirt', 60006), + (26597, 24562, 'accessories/wearable_items/_exp11/shissar/robe_dark/chest', 60006), + (26598, 24563, 'accessories/wearable_items/_exp11/shissar/robe_dark/chest_epic', 60006), + (26599, 24564, 'accessories/wearable_items/_exp11/shissar/robe_dark/feet', 60006), + (26600, 24565, 'accessories/wearable_items/_exp11/shissar/robe_dark/hands', 60006), + (26601, 24566, 'accessories/wearable_items/_exp11/shissar/robe_dark/head', 60006), + (26602, 24567, 'accessories/wearable_items/_exp11/shissar/robe_dark/hood', 60006), + (26603, 24568, 'accessories/wearable_items/_exp11/shissar/robe_dark/pants', 60006), + (26604, 24569, 'accessories/wearable_items/_exp11/shissar/robe_dark/skirt', 60006), + (26605, 24570, 'accessories/wearable_items/_exp11/shissar/snapons/head_collar_shissar_bronze', 60006), + (26606, 24571, 'accessories/wearable_items/_exp11/shissar/snapons/pauldron_shissar_bronze_left', 60006), + (26607, 24572, 'accessories/wearable_items/_exp11/shissar/snapons/pauldron_shissar_bronze_right', 60006), + (26608, 24573, 'accessories/wearable_items/_exp11/shissar/snapons/pauldron_shissar_chain_bronze_left', 60006), + (26609, 24574, 'accessories/wearable_items/_exp11/shissar/snapons/pauldron_shissar_chain_bronze_right', 60006), + (26610, 24575, 'accessories/wearable_items/_exp11/shissar/snapons/pauldron_shissar_dark_left', 60006), + (26611, 24576, 'accessories/wearable_items/_exp11/shissar/snapons/pauldron_shissar_dark_right', 60006), + (26612, 24577, 'accessories/wearable_items/_exp11/shissar/snapons/pauldron_shissar_heavy_bronze_left', 60006), + (26613, 24578, 'accessories/wearable_items/_exp11/shissar/snapons/pauldron_shissar_heavy_bronze_right', 60006), + (26614, 24579, 'accessories/wearable_items/_exp11/shissar/snapons/pauldron_shissar_heavy_dark_left', 60006), + (26615, 24580, 'accessories/wearable_items/_exp11/shissar/snapons/pauldron_shissar_heavy_dark_right', 60006), + (26616, 24581, 'accessories/wearable_items/_exp11/shissar/snapons/pauldron_shissar_leather_bronze_left', 60006), + (26617, 24582, 'accessories/wearable_items/_exp11/shissar/snapons/pauldron_shissar_leather_bronze_right', 60006), + (26618, 24583, 'accessories/wearable_items/_exp11/shissar/snapons/pauldron_shissar_light_bronze_left', 60006), + (26619, 24584, 'accessories/wearable_items/_exp11/shissar/snapons/pauldron_shissar_light_bronze_right', 60006), + (26620, 24585, 'accessories/wearable_items/_exp11/shissar/snapons/pauldron_shissar_light_dark_left', 60006), + (26621, 24586, 'accessories/wearable_items/_exp11/shissar/snapons/pauldron_shissar_light_dark_right', 60006), + (26622, 24587, 'accessories/wearable_items/_exp11/shissar/snapons/upperarm_shissar_bronze_left', 60006), + (26623, 24588, 'accessories/wearable_items/_exp11/shissar/snapons/upperarm_shissar_bronze_right', 60006), + (26624, 24589, 'accessories/wearable_items/_exp11/shissar/snapons/upperarm_shissar_dark_left', 60006), + (26625, 24590, 'accessories/wearable_items/_exp11/shissar/snapons/upperarm_shissar_dark_right', 60006), + (26626, 24591, 'accessories/wearable_items/_exp11/shissar/vanguard_bronze/chest', 60006), + (26627, 24592, 'accessories/wearable_items/_exp11/shissar/vanguard_bronze/feet', 60006), + (26628, 24593, 'accessories/wearable_items/_exp11/shissar/vanguard_bronze/forearms', 60006), + (26629, 24594, 'accessories/wearable_items/_exp11/shissar/vanguard_bronze/hands', 60006), + (26630, 24595, 'accessories/wearable_items/_exp11/shissar/vanguard_bronze/head', 60006), + (26631, 24596, 'accessories/wearable_items/_exp11/shissar/vanguard_bronze/head_berserker_bronze', 60006), + (26632, 24597, 'accessories/wearable_items/_exp11/shissar/vanguard_bronze/left', 60006), + (26633, 24598, 'accessories/wearable_items/_exp11/shissar/vanguard_bronze/legs', 60006), + (26634, 24599, 'accessories/wearable_items/_exp11/shissar/vanguard_bronze/legs_noskirt', 60006), + (26635, 24600, 'accessories/wearable_items/_exp11/shissar/vanguard_bronze/right', 60006), + (26636, 24601, 'accessories/wearable_items/_exp11/shissar/vanguard_bronze/shoulders', 60006), + (26637, 24602, 'accessories/wearable_items/_exp11/shissar/vanguard_bronze/shoulders_epic', 60006), + (26638, 24603, 'accessories/wearable_items/_exp11/shissar/vanguard_bronze/shoulders_nopauldrons', 60006), + (26639, 24604, 'accessories/wearable_items/_exp11/shissar/vanguard_bronze/skirt', 60006), + (26640, 24605, 'accessories/wearable_items/_exp11/shissar/vanguard_dark/chest', 60006), + (26641, 24606, 'accessories/wearable_items/_exp11/shissar/vanguard_dark/feet', 60006), + (26642, 24607, 'accessories/wearable_items/_exp11/shissar/vanguard_dark/forearms', 60006), + (26643, 24608, 'accessories/wearable_items/_exp11/shissar/vanguard_dark/hands', 60006), + (26644, 24609, 'accessories/wearable_items/_exp11/shissar/vanguard_dark/head', 60006), + (26645, 24610, 'accessories/wearable_items/_exp11/shissar/vanguard_dark/head_berserker_dark', 60006), + (26646, 24611, 'accessories/wearable_items/_exp11/shissar/vanguard_dark/left', 60006), + (26647, 24612, 'accessories/wearable_items/_exp11/shissar/vanguard_dark/legs', 60006), + (26648, 24613, 'accessories/wearable_items/_exp11/shissar/vanguard_dark/legs_noskirt', 60006), + (26649, 24614, 'accessories/wearable_items/_exp11/shissar/vanguard_dark/right', 60006), + (26650, 24615, 'accessories/wearable_items/_exp11/shissar/vanguard_dark/shoulders', 60006), + (26651, 24616, 'accessories/wearable_items/_exp11/shissar/vanguard_dark/shoulders_epic', 60006), + (26652, 24617, 'accessories/wearable_items/_exp11/shissar/vanguard_dark/shoulders_nopauldrons', 60006), + (26653, 24618, 'accessories/wearable_items/_exp11/shissar/vanguard_dark/skirt', 60006), + (26654, 24619, 'accessories/wearable_items/_exp11/shissar/robe_bronze/head_collar_shissar_bronze', 60006), + (26655, 24620, 'accessories/wearable_items/_exp11/shissar/robe_dark/head_collar_shissar_dark', 60006), + (26656, 24621, 'creatures/monsters/triceratops_variant_02', 60006), + (26657, 24622, 'creatures/monsters/triceratops_variant_03', 60006), + (26658, 24623, 'creatures/monsters/triceratops_variant_04', 60006), + (26659, 24624, 'creatures/monsters/tyrannosaurus_variant_02', 60006), + (26660, 24625, 'creatures/monsters/tyrannosaurus_variant_03', 60006), + (26661, 24626, 'creatures/monsters/tyrannosaurus_variant_04', 60006), + (26662, 24627, '_exp11/objects/exp11_dun_highhold/triangular_platform_upright_dpo', 60006), + (26663, 24628, 'creatures/tu/gnoll_ghost_blue', 60006), + (26664, 24629, 'projectiles/spell_flaming_sword', 60006), + (26665, 24630, 'creatures/mounts/dragonfly_mount/dragonfly_base', 60006), + (26666, 24631, 'accessories/wearable_items/_exp11/ossuary/chain1/chest', 60006), + (26667, 24632, 'accessories/wearable_items/_exp11/ossuary/chain1/feet', 60006), + (26668, 24633, 'accessories/wearable_items/_exp11/ossuary/chain1/forearms', 60006), + (26669, 24634, 'accessories/wearable_items/_exp11/ossuary/chain1/hands', 60006), + (26670, 24635, 'accessories/wearable_items/_exp11/ossuary/chain1/head', 60006), + (26671, 24636, 'accessories/wearable_items/_exp11/ossuary/chain1/legs', 60006), + (26672, 24637, 'accessories/wearable_items/_exp11/ossuary/chain1/legs_noskirt', 60006), + (26673, 24638, 'accessories/wearable_items/_exp11/ossuary/chain1/shoulders', 60006), + (26674, 24639, 'accessories/wearable_items/_exp11/ossuary/chain1/skirt', 60006), + (26675, 24640, 'accessories/wearable_items/_exp11/ossuary/chain2/chest', 60006), + (26676, 24641, 'accessories/wearable_items/_exp11/ossuary/chain2/feet', 60006), + (26677, 24642, 'accessories/wearable_items/_exp11/ossuary/chain2/forearms', 60006), + (26678, 24643, 'accessories/wearable_items/_exp11/ossuary/chain2/hands', 60006), + (26679, 24644, 'accessories/wearable_items/_exp11/ossuary/chain2/head', 60006), + (26680, 24645, 'accessories/wearable_items/_exp11/ossuary/chain2/legs', 60006), + (26681, 24646, 'accessories/wearable_items/_exp11/ossuary/chain2/legs_noskirt', 60006), + (26682, 24647, 'accessories/wearable_items/_exp11/ossuary/chain2/shoulders', 60006), + (26683, 24648, 'accessories/wearable_items/_exp11/ossuary/chain2/skirt', 60006), + (26684, 24649, 'accessories/wearable_items/_exp11/ossuary/heavycloth1/chest', 60006), + (26685, 24650, 'accessories/wearable_items/_exp11/ossuary/heavycloth1/feet', 60006), + (26686, 24651, 'accessories/wearable_items/_exp11/ossuary/heavycloth1/hands', 60006), + (26687, 24652, 'accessories/wearable_items/_exp11/ossuary/heavycloth1/head', 60006), + (26688, 24653, 'accessories/wearable_items/_exp11/ossuary/heavycloth1/legs', 60006), + (26689, 24654, 'accessories/wearable_items/_exp11/ossuary/heavycloth1/shoulders', 60006), + (26690, 24655, 'accessories/wearable_items/_exp11/ossuary/heavycloth1/skirt', 60006), + (26691, 24656, 'accessories/wearable_items/_exp11/ossuary/heavycloth1/belt/skirt 2', 60006), + (26692, 24657, 'accessories/wearable_items/_exp11/ossuary/heavycloth1/belt/skirt', 60006), + (26693, 24658, 'accessories/wearable_items/_exp11/ossuary/heavycloth2/chest', 60006), + (26694, 24659, 'accessories/wearable_items/_exp11/ossuary/heavycloth2/feet', 60006), + (26695, 24660, 'accessories/wearable_items/_exp11/ossuary/heavycloth2/hands', 60006), + (26696, 24661, 'accessories/wearable_items/_exp11/ossuary/heavycloth2/head', 60006), + (26697, 24662, 'accessories/wearable_items/_exp11/ossuary/heavycloth2/legs', 60006), + (26698, 24663, 'accessories/wearable_items/_exp11/ossuary/heavycloth2/shoulders', 60006), + (26699, 24664, 'accessories/wearable_items/_exp11/ossuary/heavycloth2/skirt', 60006), + (26700, 24665, 'accessories/wearable_items/_exp11/ossuary/heavycloth2/belt/skirt 2', 60006), + (26701, 24666, 'accessories/wearable_items/_exp11/ossuary/heavycloth2/belt/skirt', 60006), + (26702, 24667, 'accessories/wearable_items/_exp11/ossuary/leather1/chest', 60006), + (26703, 24668, 'accessories/wearable_items/_exp11/ossuary/leather1/feet', 60006), + (26704, 24669, 'accessories/wearable_items/_exp11/ossuary/leather1/forearms', 60006), + (26705, 24670, 'accessories/wearable_items/_exp11/ossuary/leather1/hands', 60006), + (26706, 24671, 'accessories/wearable_items/_exp11/ossuary/leather1/head', 60006), + (26707, 24672, 'accessories/wearable_items/_exp11/ossuary/leather1/legs', 60006), + (26708, 24673, 'accessories/wearable_items/_exp11/ossuary/leather1/legs_noskirt', 60006), + (26709, 24674, 'accessories/wearable_items/_exp11/ossuary/leather1/shoulders', 60006), + (26710, 24675, 'accessories/wearable_items/_exp11/ossuary/leather1/skirt', 60006), + (26711, 24676, 'accessories/wearable_items/_exp11/ossuary/leather2/chest', 60006), + (26712, 24677, 'accessories/wearable_items/_exp11/ossuary/leather2/feet', 60006), + (26713, 24678, 'accessories/wearable_items/_exp11/ossuary/leather2/forearms', 60006), + (26714, 24679, 'accessories/wearable_items/_exp11/ossuary/leather2/hands', 60006), + (26715, 24680, 'accessories/wearable_items/_exp11/ossuary/leather2/head', 60006), + (26716, 24681, 'accessories/wearable_items/_exp11/ossuary/leather2/legs', 60006), + (26717, 24682, 'accessories/wearable_items/_exp11/ossuary/leather2/legs_noskirt', 60006), + (26718, 24683, 'accessories/wearable_items/_exp11/ossuary/leather2/shoulders', 60006), + (26719, 24684, 'accessories/wearable_items/_exp11/ossuary/leather2/skirt', 60006), + (26720, 24685, 'accessories/wearable_items/_exp11/ossuary/robe1/chest', 60006), + (26721, 24686, 'accessories/wearable_items/_exp11/ossuary/robe1/feet', 60006), + (26722, 24687, 'accessories/wearable_items/_exp11/ossuary/robe1/hands', 60006), + (26723, 24688, 'accessories/wearable_items/_exp11/ossuary/robe1/head', 60006), + (26724, 24689, 'accessories/wearable_items/_exp11/ossuary/robe1/head_collar', 60006), + (26725, 24690, 'accessories/wearable_items/_exp11/ossuary/robe1/hood', 60006), + (26726, 24691, 'accessories/wearable_items/_exp11/ossuary/robe1/pants', 60006), + (26727, 24692, 'accessories/wearable_items/_exp11/ossuary/robe1/skirt', 60006), + (26728, 24693, 'accessories/wearable_items/_exp11/ossuary/robe2/chest', 60006), + (26729, 24694, 'accessories/wearable_items/_exp11/ossuary/robe2/feet', 60006), + (26730, 24695, 'accessories/wearable_items/_exp11/ossuary/robe2/hands', 60006), + (26731, 24696, 'accessories/wearable_items/_exp11/ossuary/robe2/head', 60006), + (26732, 24697, 'accessories/wearable_items/_exp11/ossuary/robe2/head_collar', 60006), + (26733, 24698, 'accessories/wearable_items/_exp11/ossuary/robe2/hood', 60006), + (26734, 24699, 'accessories/wearable_items/_exp11/ossuary/robe2/pants', 60006), + (26735, 24700, 'accessories/wearable_items/_exp11/ossuary/robe2/skirt', 60006), + (26736, 24701, 'accessories/wearable_items/_exp11/ossuary/vanguard1/chest', 60006), + (26737, 24702, 'accessories/wearable_items/_exp11/ossuary/vanguard1/feet', 60006), + (26738, 24703, 'accessories/wearable_items/_exp11/ossuary/vanguard1/forearms', 60006), + (26739, 24704, 'accessories/wearable_items/_exp11/ossuary/vanguard1/hands', 60006), + (26740, 24705, 'accessories/wearable_items/_exp11/ossuary/vanguard1/head', 60006), + (26741, 24706, 'accessories/wearable_items/_exp11/ossuary/vanguard1/left', 60006), + (26742, 24707, 'accessories/wearable_items/_exp11/ossuary/vanguard1/legs', 60006), + (26743, 24708, 'accessories/wearable_items/_exp11/ossuary/vanguard1/legs_noskirt', 60006), + (26744, 24709, 'accessories/wearable_items/_exp11/ossuary/vanguard1/right', 60006), + (26745, 24710, 'accessories/wearable_items/_exp11/ossuary/vanguard1/shoulders', 60006), + (26746, 24711, 'accessories/wearable_items/_exp11/ossuary/vanguard1/shoulders_nopauldrons', 60006), + (26747, 24712, 'accessories/wearable_items/_exp11/ossuary/vanguard1/skirt', 60006), + (26748, 24713, 'accessories/wearable_items/_exp11/ossuary/vanguard2/chest', 60006), + (26749, 24714, 'accessories/wearable_items/_exp11/ossuary/vanguard2/feet', 60006), + (26750, 24715, 'accessories/wearable_items/_exp11/ossuary/vanguard2/forearms', 60006), + (26751, 24716, 'accessories/wearable_items/_exp11/ossuary/vanguard2/hands', 60006), + (26752, 24717, 'accessories/wearable_items/_exp11/ossuary/vanguard2/head', 60006), + (26753, 24718, 'accessories/wearable_items/_exp11/ossuary/vanguard2/left', 60006), + (26754, 24719, 'accessories/wearable_items/_exp11/ossuary/vanguard2/legs', 60006), + (26755, 24720, 'accessories/wearable_items/_exp11/ossuary/vanguard2/legs_noskirt', 60006), + (26756, 24721, 'accessories/wearable_items/_exp11/ossuary/vanguard2/right', 60006), + (26757, 24722, 'accessories/wearable_items/_exp11/ossuary/vanguard2/shoulders', 60006), + (26758, 24723, 'accessories/wearable_items/_exp11/ossuary/vanguard2/shoulders_nopaudrons', 60006), + (26759, 24724, 'accessories/wearable_items/_exp11/ossuary/vanguard2/skirt', 60006), + (26760, 24725, 'creatures/mounts/dragonfly_mount/dragonfly_flyer_base', 60006), + (26761, 24726, 'creatures/mounts/dragonfly_mount/dragonfly_ground_base', 60006), + (26762, 24727, 'playerstudio/characters/shields/tower_round_shields/titallord/titallord', 60006), + (26763, 24728, '_exp11/characters/tool_users/akheva/akheva_male_boss', 60006), + (26764, 24729, '_exp11/objects/exp11_dun_highhold/hh_office_tapestry_dpo', 60006), + (26765, 24730, 'staticobjects/housing_portal_objects/vision_home_tutorial01', 60006), + (26766, 24731, '_exp11/characters/tool_users/fennin_ro/fennin_ro', 60006), + (26767, 24732, 'accessories/wearable_items/_exp11/ossuary/accessories/pauldron_ossuary_heavy_left', 60006), + (26768, 24733, 'accessories/wearable_items/_exp11/ossuary/accessories/pauldron_ossuary_heavy_right', 60006), + (26769, 24734, 'accessories/wearable_items/_exp11/ossuary/accessories/pauldron_ossuary_heavy2_left', 60006), + (26770, 24735, 'accessories/wearable_items/_exp11/ossuary/accessories/pauldron_ossuary_heavy2_right', 60006), + (26771, 24736, 'accessories/wearable_items/_exp11/ossuary/accessories/pauldron_ossuary_light_c2_left', 60006), + (26772, 24737, 'accessories/wearable_items/_exp11/ossuary/accessories/pauldron_ossuary_light_c2_right', 60006), + (26773, 24738, 'accessories/wearable_items/_exp11/ossuary/accessories/pauldron_ossuary_light_left', 60006), + (26774, 24739, 'accessories/wearable_items/_exp11/ossuary/accessories/pauldron_ossuary_light_right', 60006), + (26775, 24740, 'accessories/wearable_items/_exp11/ossuary/accessories/pauldron_ossuary_light2_c2_left', 60006), + (26776, 24741, 'accessories/wearable_items/_exp11/ossuary/accessories/pauldron_ossuary_light2_c2_right', 60006), + (26777, 24742, 'accessories/wearable_items/_exp11/ossuary/accessories/pauldron_ossuary_light2_left', 60006), + (26778, 24743, 'accessories/wearable_items/_exp11/ossuary/accessories/pauldron_ossuary_light2_right', 60006), + (26779, 24744, 'accessories/wearable_items/_exp11/ossuary/accessories/pauldron_ossuary_robe1_left', 60006), + (26780, 24745, 'accessories/wearable_items/_exp11/ossuary/accessories/pauldron_ossuary_robe1_right', 60006), + (26781, 24746, 'accessories/wearable_items/_exp11/ossuary/accessories/pauldron_ossuary_robe2_left', 60006), + (26782, 24747, 'accessories/wearable_items/_exp11/ossuary/accessories/pauldron_ossuary_robe2_right', 60006), + (26783, 24748, 'accessories/wearable_items/_exp11/ossuary/accessories/pauldron_ossuary_under_left', 60006), + (26784, 24749, 'accessories/wearable_items/_exp11/ossuary/accessories/pauldron_ossuary_under_right', 60006), + (26785, 24750, 'accessories/wearable_items/_exp11/ossuary/accessories/pauldron_ossuary_under2_left', 60006), + (26786, 24751, 'accessories/wearable_items/_exp11/ossuary/accessories/pauldron_ossuary_under2_right', 60006), + (26787, 24752, 'accessories/wearable_items/cloak/exp11/cloak_ossuary1', 60006), + (26788, 24753, 'accessories/wearable_items/cloak/exp11/cloak_ossuary1_inset', 60006), + (26789, 24754, 'accessories/wearable_items/cloak/exp11/cloak_ossuary2', 60006), + (26790, 24755, 'accessories/wearable_items/cloak/exp11/cloak_ossuary2_inset', 60006), + (26791, 24756, 'accessories/wearable_items/cloak/exp11/cloak_shissar_bronze', 60006), + (26792, 24757, 'accessories/wearable_items/cloak/exp11/cloak_shissar_bronze_diamond', 60006), + (26793, 24758, 'accessories/wearable_items/cloak/exp11/cloak_shissar_dark', 60006), + (26794, 24759, 'accessories/wearable_items/cloak/exp11/cloak_shissar_dark_diamond', 60006), + (26795, 24760, 'playerstudio/houseitems/gnome_workshop', 60006), + (26796, 24761, '_exp03/characters/monsters/copter_necro_enforcer', 60006), + (26797, 24762, 'creatures/monsters/clockwork_necro_gazer', 60006), + (26798, 24763, 'creatures/monsters/clockwork_necroglow_gazer', 60006), + (26799, 24764, 'staticobjects/_exp10/chelsith_stone_reformed_dpo', 60006), + (26800, 24765, '_exp03/characters/monsters/copter_enforcer_necroglow', 60006), + (26801, 24766, '_exp03/characters/tool_users/clockwork_necro_soldier_necroglow', 60006), + (26802, 24767, '_exp03/characters/tool_users/clockwork_protector_necroglow', 60006), + (26803, 24768, '_exp11/objects/exp11_dun_highhold/hh_office_chandelier_dpo', 60006), + (26804, 24769, 'accessories/wearable_items/_exp11/planeofwar_blue/accessories/chain_head_epic', 60006), + (26805, 24770, 'accessories/wearable_items/_exp11/planeofwar_blue/accessories/forearm_left', 60006), + (26806, 24771, 'accessories/wearable_items/_exp11/planeofwar_blue/accessories/forearm_right', 60006), + (26807, 24772, 'accessories/wearable_items/_exp11/planeofwar_blue/accessories/leather_head_epic', 60006), + (26808, 24773, 'accessories/wearable_items/_exp11/planeofwar_blue/accessories/pauldron_alt_left', 60006), + (26809, 24774, 'accessories/wearable_items/_exp11/planeofwar_blue/accessories/pauldron_alt_right', 60006), + (26810, 24775, 'accessories/wearable_items/_exp11/planeofwar_blue/accessories/pauldron_left', 60006), + (26811, 24776, 'accessories/wearable_items/_exp11/planeofwar_blue/accessories/pauldron_right', 60006), + (26812, 24777, 'accessories/wearable_items/_exp11/planeofwar_blue/accessories/ramhorn_left', 60006), + (26813, 24778, 'accessories/wearable_items/_exp11/planeofwar_blue/accessories/ramhorn_right', 60006), + (26814, 24779, 'accessories/wearable_items/_exp11/planeofwar_blue/accessories/shin_left', 60006), + (26815, 24780, 'accessories/wearable_items/_exp11/planeofwar_blue/accessories/shin_right', 60006), + (26816, 24781, 'accessories/wearable_items/_exp11/planeofwar_blue/accessories/vanguard_head_epic', 60006), + (26817, 24782, 'accessories/wearable_items/_exp11/planeofwar_blue/chain_glow/chest', 60006), + (26818, 24783, 'accessories/wearable_items/_exp11/planeofwar_blue/chain_glow/feet', 60006), + (26819, 24784, 'accessories/wearable_items/_exp11/planeofwar_blue/chain_glow/forearms', 60006), + (26820, 24785, 'accessories/wearable_items/_exp11/planeofwar_blue/chain_glow/hands', 60006), + (26821, 24786, 'accessories/wearable_items/_exp11/planeofwar_blue/chain_glow/head', 60006), + (26822, 24787, 'accessories/wearable_items/_exp11/planeofwar_blue/chain_glow/head_epic', 60006), + (26823, 24788, 'accessories/wearable_items/_exp11/planeofwar_blue/chain_glow/legs', 60006), + (26824, 24789, 'accessories/wearable_items/_exp11/planeofwar_blue/chain_glow/legs_noskirt', 60006), + (26825, 24790, 'accessories/wearable_items/_exp11/planeofwar_blue/chain_glow/pauldron_alt_left', 60006), + (26826, 24791, 'accessories/wearable_items/_exp11/planeofwar_blue/chain_glow/pauldron_alt_right', 60006), + (26827, 24792, 'accessories/wearable_items/_exp11/planeofwar_blue/chain_glow/shoulders', 60006), + (26828, 24793, 'accessories/wearable_items/_exp11/planeofwar_blue/chain_glow/shoulders_epic', 60006), + (26829, 24794, 'accessories/wearable_items/_exp11/planeofwar_blue/chain_glow/skirt', 60006), + (26830, 24795, 'accessories/wearable_items/_exp11/planeofwar_blue/leather_glow/chest', 60006), + (26831, 24796, 'accessories/wearable_items/_exp11/planeofwar_blue/leather_glow/feet', 60006), + (26832, 24797, 'accessories/wearable_items/_exp11/planeofwar_blue/leather_glow/forearms', 60006), + (26833, 24798, 'accessories/wearable_items/_exp11/planeofwar_blue/leather_glow/hands', 60006), + (26834, 24799, 'accessories/wearable_items/_exp11/planeofwar_blue/leather_glow/head', 60006), + (26835, 24800, 'accessories/wearable_items/_exp11/planeofwar_blue/leather_glow/head_epic', 60006), + (26836, 24801, 'accessories/wearable_items/_exp11/planeofwar_blue/leather_glow/legs', 60006), + (26837, 24802, 'accessories/wearable_items/_exp11/planeofwar_blue/leather_glow/legs_noskirt', 60006), + (26838, 24803, 'accessories/wearable_items/_exp11/planeofwar_blue/leather_glow/shoulders', 60006), + (26839, 24804, 'accessories/wearable_items/_exp11/planeofwar_blue/leather_glow/shoulders_epic', 60006), + (26840, 24805, 'accessories/wearable_items/_exp11/planeofwar_blue/leather_glow/skirt', 60006), + (26841, 24806, 'accessories/wearable_items/_exp11/planeofwar_blue/robe_glow/chest', 60006), + (26842, 24807, 'accessories/wearable_items/_exp11/planeofwar_blue/robe_glow/chest_epic', 60006), + (26843, 24808, 'accessories/wearable_items/_exp11/planeofwar_blue/robe_glow/head', 60006), + (26844, 24809, 'accessories/wearable_items/_exp11/planeofwar_blue/robe_glow/hood', 60006), + (26845, 24810, 'accessories/wearable_items/_exp11/planeofwar_blue/robe_glow/pants', 60006), + (26846, 24811, 'accessories/wearable_items/_exp11/planeofwar_blue/robe_glow/pauldron_alt_left', 60006), + (26847, 24812, 'accessories/wearable_items/_exp11/planeofwar_blue/robe_glow/pauldron_alt_right', 60006), + (26848, 24813, 'accessories/wearable_items/_exp11/planeofwar_blue/robe_glow/skirt', 60006), + (26849, 24814, 'accessories/wearable_items/_exp11/planeofwar_blue/vanguard_glow/chest', 60006), + (26850, 24815, 'accessories/wearable_items/_exp11/planeofwar_blue/vanguard_glow/feet', 60006), + (26851, 24816, 'accessories/wearable_items/_exp11/planeofwar_blue/vanguard_glow/forearms', 60006), + (26852, 24817, 'accessories/wearable_items/_exp11/planeofwar_blue/vanguard_glow/hands', 60006), + (26853, 24818, 'accessories/wearable_items/_exp11/planeofwar_blue/vanguard_glow/head', 60006), + (26854, 24819, 'accessories/wearable_items/_exp11/planeofwar_blue/vanguard_glow/head_epic', 60006), + (26855, 24820, 'accessories/wearable_items/_exp11/planeofwar_blue/vanguard_glow/left', 60006), + (26856, 24821, 'accessories/wearable_items/_exp11/planeofwar_blue/vanguard_glow/legs', 60006), + (26857, 24822, 'accessories/wearable_items/_exp11/planeofwar_blue/vanguard_glow/legs_epic', 60006), + (26858, 24823, 'accessories/wearable_items/_exp11/planeofwar_blue/vanguard_glow/legs_noskirt', 60006), + (26859, 24824, 'accessories/wearable_items/_exp11/planeofwar_blue/vanguard_glow/right', 60006), + (26860, 24825, 'accessories/wearable_items/_exp11/planeofwar_blue/vanguard_glow/shoulders', 60006), + (26861, 24826, 'accessories/wearable_items/_exp11/planeofwar_blue/vanguard_glow/shoulders_epic', 60006), + (26862, 24827, 'accessories/wearable_items/_exp11/planeofwar_blue/vanguard_glow/shoulders_nopauldrons', 60006), + (26863, 24828, 'accessories/wearable_items/_exp11/planeofwar_blue/vanguard_glow/skirt', 60006), + (26864, 24829, '_exp09/characters/monsters/fish_angler/fish_angler_npc_lower', 60006), + (26865, 24830, 'accessories/wearable_items/cloak/exp11/cloak_overland_royal_blue', 60006), + (26866, 24831, 'accessories/wearable_items/cloak/exp11/cloak_overland_royal_diamond_blue', 60006), + (26867, 24832, 'accessories/wearable_items/cloak/exp11/cloak_overland_royal_diamond_red', 60006), + (26868, 24833, 'accessories/wearable_items/cloak/exp11/cloak_overland_royal_red', 60006), + (26869, 24834, '_exp11/characters/tool_users/grimling/grimling_male_base', 60006), + (26870, 24835, '_exp11/characters/tool_users/grimling/grimling_male_variant_01', 60006), + (26871, 24836, '_exp11/characters/tool_users/grimling/grimling_male_variant_02', 60006), + (26872, 24837, '_exp10/characters/tool_users/shissar_statue/shissar_statue_unmoving', 60006), + (26873, 24838, '_exp11/characters/tool_users/tserrina_2014/tserrina_priestess', 60006), + (26874, 24839, 'accessories/wieldable_items/weapons/exp11/1h_sword/exp11_1h_axe_heroes', 60006), + (26875, 24840, '_exp11/characters/tool_users/tserrina_2014/tserrina_priestess_fly', 60006), + (26876, 24841, 'creatures/mounts/raptor_mount/evil_raptor_npc', 60006), + (26877, 24842, 'creatures/mounts/raptor_mount/raptor_armor_blue_npc', 60006), + (26878, 24843, 'creatures/mounts/raptor_mount/raptor_mount_base_npc', 60006), + (26879, 24844, 'creatures/mounts/raptor_mount/tradeskill_raptor_npc', 60006), + (26880, 24845, 'creatures/mounts/raptor_mount/tropical_raptor_npc', 60006), + (26881, 24846, '_exp11/characters/monsters/construct_of_malice/construct_of_malice', 60006), + (26882, 24847, 'creatures/tu/earth_elem_ssraeshza', 60006), + (26883, 24848, 'creatures/pets/pet_rock06_ssraeshza', 60006), + (26884, 24849, '_exp10/characters/monsters/shissar_cobra/ssraeshza_cobra', 60006), + (26885, 24850, '_exp11/objects/exp11_dun_zavithloa/zav_rock02_dpo', 60006), + (26886, 24851, '_exp11/objects/exp11_dun_zavithloa/zav_small_rock01_dpo', 60006), + (26887, 24852, '_exp11/characters/tool_users/akheva/akheva_male_swords', 60006), + (26888, 24853, '_exp11/characters/tool_users/cultist/cultist_male_base', 60006), + (26889, 24854, '_exp11/characters/tool_users/cultist/cultist_male_priest', 60006), + (26890, 24855, '_exp11/characters/tool_users/cultist/cultist_male_warrior', 60006), + (26891, 24856, 'creatures/mounts/dino_flyer/dino_flyer_tiger', 60006), + (26892, 24857, '_exp11/houseitems/barrel_branding_fs_dpo', 60006), + (26893, 24858, '_exp11/houseitems/barrel_chilis_dpo', 60006), + (26894, 24859, '_exp11/houseitems/barrel_full01_dpo', 60006), + (26895, 24860, '_exp11/houseitems/barrel_grains_dpo', 60006), + (26896, 24861, '_exp11/houseitems/barrel_greenbeans_dpo', 60006), + (26897, 24862, '_exp11/houseitems/barrel_oranges_dpo', 60006), + (26898, 24863, '_exp11/houseitems/boat_on_horses_01_dpo', 60006), + (26899, 24864, '_exp11/houseitems/bright_tropical_plant01_dpo', 60006), + (26900, 24865, '_exp11/houseitems/bright_tropical_plant01purp_dpo', 60006), + (26901, 24866, '_exp11/houseitems/bright_tropical_plant02_dpo', 60006), + (26902, 24867, '_exp11/houseitems/bright_tropical_plant02purp_dpo', 60006), + (26903, 24868, '_exp11/houseitems/bush_small_leaves01_medium_lush_dpo', 60006), + (26904, 24869, '_exp11/houseitems/bush01_lush_dpo', 60006), + (26905, 24870, 'accessories/wieldable_items/weapons/exp11/staff/staff_heroes', 60006), + (26906, 24871, 'accessories/wearable_items/_exp11/ossuary/leather1/shoulders_epic', 60006), + (26907, 24872, 'accessories/wearable_items/_exp11/ossuary/leather2/shoulders_epic', 60006), + (26908, 24873, 'accessories/wearable_items/_exp11/ossuary/chain1/shoulders_epic', 60006), + (26909, 24874, 'accessories/wearable_items/_exp11/ossuary/chain2/shoulders_epic', 60006), + (26910, 24875, 'accessories/wearable_items/_exp11/ossuary/heavycloth1/shoulders_epic', 60006), + (26911, 24876, 'accessories/wearable_items/_exp11/ossuary/heavycloth2/shoulders_epic', 60006), + (26912, 24877, 'accessories/wearable_items/_exp11/ossuary/robe1/chest_epic', 60006), + (26913, 24878, '_exp11/houseitems/crate_full_fs_dpo', 60006), + (26914, 24879, '_exp11/houseitems/darkelf_barrel_3set_dpo', 60006), + (26915, 24880, '_exp11/houseitems/darkelf_barrel_fish_dpo', 60006), + (26916, 24881, '_exp11/houseitems/darkelf_barrel_fishbones_dpo', 60006), + (26917, 24882, '_exp11/houseitems/darkelf_barrel_full_dpo', 60006), + (26918, 24883, '_exp11/houseitems/darkelf_fishing_netpile02_dpo', 60006), + (26919, 24884, 'accessories/wearable_items/_exp11/ossuary/robe1/head_epic_1', 60006), + (26920, 24885, 'accessories/wearable_items/_exp11/ossuary/robe2/chest_epic', 60006), + (26921, 24886, '_exp11/houseitems/darkelf_widecrate_dpo', 60006), + (26922, 24887, 'accessories/wearable_items/_exp11/ossuary/robe2/head_epic_2', 60006), + (26923, 24888, 'accessories/wearable_items/_exp11/ossuary/vanguard1/head_epic_1', 60006), + (26924, 24889, '_exp11/houseitems/dn_elephant_leaf_plant01_dpo', 60006), + (26925, 24890, '_exp11/houseitems/dn_hanging_flowers_02_dpo', 60006), + (26926, 24891, '_exp11/houseitems/dn_kangaroo_paw01_dpo', 60006), + (26927, 24892, '_exp11/houseitems/dn_long_leaf_plant03_dpo', 60006), + (26928, 24893, '_exp11/houseitems/dn_rope_vines01_dpo', 60006), + (26929, 24894, '_exp11/houseitems/dn_tropical_rounded_leaf01_flowers_dpo', 60006), + (26930, 24895, '_exp11/houseitems/dpo_farseas_snowglobe', 60006), + (26931, 24896, 'accessories/wearable_items/_exp11/ossuary/vanguard1/shoulders_epic', 60006), + (26932, 24897, 'accessories/wearable_items/_exp11/ossuary/vanguard2/head_epic_2', 60006), + (26933, 24898, '_exp11/houseitems/fern_plant01_dpo', 60006), + (26934, 24899, '_exp11/houseitems/fishingboat_withoar_01_dpo', 60006), + (26935, 24900, '_exp11/houseitems/haybale_dpo', 60006), + (26936, 24901, '_exp11/houseitems/haycrate_large_fs_dpo', 60006), + (26937, 24902, '_exp11/houseitems/hh_bellow_dpo', 60006), + (26938, 24903, '_exp11/houseitems/hh_bookcase_books01_dpo', 60006), + (26939, 24904, '_exp11/houseitems/hh_bookcase_empty_dpo', 60006), + (26940, 24905, '_exp11/houseitems/hh_desk_table_dpo', 60006), + (26941, 24906, '_exp11/houseitems/hh_dousing_trough_dpo', 60006), + (26942, 24907, '_exp11/houseitems/hh_forge_dpo', 60006), + (26943, 24908, '_exp11/houseitems/hh_guestchair_dpo', 60006), + (26944, 24909, '_exp11/houseitems/hh_nightstand_dpo', 60006), + (26945, 24910, '_exp11/houseitems/hh_office_bookcase_books02_dpo', 60006), + (26946, 24911, '_exp11/houseitems/hh_office_bookcase_dpo', 60006), + (26947, 24912, '_exp11/houseitems/hh_office_chair_dpo', 60006), + (26948, 24913, '_exp11/houseitems/hh_office_desk_dpo', 60006), + (26949, 24914, '_exp11/houseitems/hh_office_guestchair_dpo', 60006), + (26950, 24915, '_exp11/houseitems/hh_office_halfrug_dpo', 60006), + (26951, 24916, '_exp11/houseitems/hh_office_scale_dpo', 60006), + (26952, 24917, '_exp11/houseitems/hh_potted_hedge01_dpo', 60006), + (26953, 24918, '_exp11/houseitems/hh_potted_hedge02_dpo', 60006), + (26954, 24919, '_exp11/houseitems/hh_rug_circle_dpo', 60006), + (26955, 24920, '_exp11/houseitems/hh_rug_rectangle_dpo', 60006), + (26956, 24921, '_exp11/houseitems/hh_rug_runner_dpo', 60006), + (26957, 24922, '_exp11/houseitems/hh_sconce_wall_pfx_dpo', 60006), + (26958, 24923, '_exp11/houseitems/hh_seahorse_fountain_dpo', 60006), + (26959, 24924, '_exp11/houseitems/hh_sofa01_dpo', 60006), + (26960, 24925, '_exp11/houseitems/hh_sofa03_dpo', 60006), + (26961, 24926, '_exp11/houseitems/hh_table_long_dpo', 60006), + (26962, 24927, '_exp11/houseitems/hh_table_short_dpo', 60006), + (26963, 24928, '_exp11/houseitems/little_boat_oar_dpo', 60006), + (26964, 24929, '_exp11/houseitems/little_boat01_dpo', 60006), + (26965, 24930, 'accessories/wearable_items/_exp11/ossuary/vanguard2/shoulders_epic', 60006), + (26966, 24931, '_exp11/houseitems/long_leaf_plant03_blue_dpo', 60006), + (26967, 24932, '_exp11/houseitems/long_leaf_plant03_yellow_dpo', 60006), + (26968, 24933, '_exp11/houseitems/ns_glow_bulb_plant01_dpo', 60006), + (26969, 24934, '_exp11/houseitems/ns_glow_bulb_plant02_dpo', 60006), + (26970, 24935, '_exp11/houseitems/ns_growing_vines_cap01_dpo', 60006), + (26971, 24936, 'creatures/mounts/hellhound_mount/hellhound_mount_black', 60006), + (26972, 24937, '_exp11/houseitems/ns_growing_vines_wall02_dpo', 60006), + (26973, 24938, 'creatures/mounts/hellhound_mount/hellhound_mount_pale', 60006), + (26974, 24939, '_exp08/characters/tool_users/bog_wraith/bog_wraith_blood', 60006), + (26975, 24940, 'creatures/mounts/aerakyn/aerakyn_leaper_base', 60006), + (26976, 24941, '_exp11/houseitems/ns_tube_plants02_dpo', 60006), + (26977, 24942, '_exp11/houseitems/pygmy_banner01_dpo', 60006), + (26978, 24943, '_exp11/houseitems/pygmy_banner02_dpo', 60006), + (26979, 24944, '_exp11/houseitems/pygmy_bedding_dpo', 60006), + (26980, 24945, '_exp11/houseitems/pygmy_bench_dpo', 60006), + (26981, 24946, '_exp11/houseitems/pygmy_bucket_dpo', 60006), + (26982, 24947, '_exp11/objects/exp11_southseas/large_rock02_dpo', 60006), + (26983, 24948, '_exp11/houseitems/pygmy_gravemarker_dpo', 60006), + (26984, 24949, '_exp11/houseitems/pygmy_meatbasket_dpo', 60006), + (26985, 24950, '_exp11/houseitems/pygmy_roadmarker_dpo', 60006), + (26986, 24951, '_exp11/houseitems/pygmy_stool_dpo', 60006), + (26987, 24952, '_exp11/houseitems/pygmy_table_dpo', 60006), + (26988, 24953, '_exp11/houseitems/saddlerack_wharness_dpo', 60006), + (26989, 24954, '_exp11/houseitems/shipping_crate_fs_dpo', 60006), + (26990, 24955, '_exp11/houseitems/shipwheel_dpo', 60006), + (26991, 24956, '_exp11/houseitems/spiderbear_bedding_dpo', 60006), + (26992, 24957, '_exp11/houseitems/spiderbear_egg_dpo', 60006), + (26993, 24958, '_exp11/houseitems/spiderbear_evil_webwrap01_upright_dpo', 60006), + (26994, 24959, '_exp11/houseitems/spiderbears_lightsac_dpo', 60006), + (26995, 24960, '_exp11/objects/exp11_southseas/ss_rock02_dpo', 60006), + (26996, 24961, '_exp10/characters/monsters/spiderbear/spiderbear_baby', 60006), + (26997, 24962, '_exp10/characters/monsters/spiderbear/spiderbear_noclimb_base', 60006), + (26998, 24963, '_exp11/objects/exp11_dun_highhold/spiderbear_evil_victimsac_empty_dpo', 60006), + (26999, 24964, '_exp11/houseitems/ss_dino_palm01_dpo', 60006), + (27000, 24965, '_exp11/houseitems/ss_dino_palm02_dpo', 60006), + (27001, 24966, '_exp11/houseitems/ss_dino_palm03_dpo', 60006), + (27002, 24967, '_exp11/houseitems/ss_fatgbeanbasket_dpo', 60006), + (27003, 24968, 'creatures/mounts/aerakyn/aerakyn_glider_base', 60006), + (27004, 24969, '_exp11/houseitems/ss_glowplant_spiderbear01_dpo', 60006), + (27005, 24970, '_exp11/houseitems/ss_goldbasket_dpo', 60006), + (27006, 24971, '_exp11/houseitems/ss_grainbasket_dpo', 60006), + (27007, 24972, '_exp11/houseitems/ss_pygmy_meatbasket_dpo', 60006), + (27008, 24973, '_exp11/houseitems/ss_reed_basket_dpo', 60006), + (27009, 24974, '_exp11/houseitems/ss_rope_vines02_dpo', 60006), + (27010, 24975, 'creatures/mounts/pegasus_skeleton/pegasus_skeleton', 60006), + (27011, 24976, 'creatures/mounts/freeblood/freeblood_glider_base', 60006), + (27012, 24977, '_exp11/houseitems/ssrae_brazier01_dpo', 60006), + (27013, 24978, '_exp11/houseitems/ssrae_brazier02_dpo', 60006), + (27014, 24979, '_exp11/houseitems/trough_whay_dpo', 60006), + (27015, 24980, '_exp11/houseitems/trough_wwater_dpo', 60006), + (27016, 24981, '_exp11/houseitems/weapcrate_small_dpo', 60006), + (27017, 24982, '_exp11/houseitems/weaponrack_full_dpo', 60006), + (27018, 24983, '_exp11/houseitems/zav_glowplant_long02_dpo', 60006), + (27019, 24984, '_exp11/houseitems/zav_glowplant_long03_dpo', 60006), + (27020, 24985, '_exp11/houseitems/zav_hanging_vine01_dpo', 60006), + (27021, 24986, '_exp11/houseitems/zav_lichen_cone01_dpo', 60006), + (27022, 24987, 'creatures/mounts/freeblood/freeblood_leaper_base', 60006), + (27023, 24988, '_exp11/characters/tool_users/akheva/akheva_male_base_negative_light', 60006), + (27024, 24989, '_exp11/houseitems/zav_shroom02b_dpo', 60006), + (27025, 24990, '_exp11/houseitems/zav_shroom02byellow_dpo', 60006), + (27026, 24991, '_exp11/houseitems/zav_shroom03a_dpo', 60006), + (27027, 24992, 'playerstudio/characters/shields/tower_round_shields/time_shield/time_shield', 60006), + (27028, 24993, '_exp11/houseitems/zav_shroom04a_dpo', 60006), + (27029, 24994, '_exp11/houseitems/zav_shroom04aorange_dpo', 60006), + (27030, 24995, '_exp11/characters/tool_users/krassnok/krassnok_decay01', 60006), + (27031, 24996, '_exp11/characters/tool_users/krassnok/krassnok_decay02', 60006), + (27032, 24997, '_exp11/characters/tool_users/krassnok/krassnok_ghost', 60006), + (27033, 24998, '_exp11/houseitems/zav_shroom05_green_group02_dpo', 60006), + (27034, 24999, '_exp11/characters/tool_users/krassnok/krassnok_living', 60006), + (27035, 25000, '_exp11/houseitems/zav_shroom05_group02_dpo', 60006), + (27036, 25001, 'creatures/mounts/pegasus_skeleton/pegasus_skeleton_flames', 60006), + (27037, 25002, '_exp11/houseitems/zav_shroom05_purple_group02_dpo', 60006), + (27038, 25003, '_exp11/houseitems/zav_weird_shroom01_egg_dpo', 60006), + (27039, 25004, '_exp11/houseitems/zav_weird_shroom01_egg_shell02_dpo', 60006), + (27040, 25005, '_exp11/houseitems/zav_weird_shroom01_egg01_dpo', 60006), + (27041, 25006, '_exp11/houseitems/zav_weird_shroom01_egg04_dpo', 60006), + (27042, 25007, '_exp11/houseitems/zav_weird_shroom01_egg05_dpo', 60006), + (27043, 25008, 'accessories/wearable_items/_exp11/heroes_festival/accessories/head_accessory_chain_dark_left', 60006), + (27044, 25009, 'accessories/wearable_items/_exp11/heroes_festival/accessories/head_accessory_chain_dark_right', 60006), + (27045, 25010, 'accessories/wearable_items/_exp11/heroes_festival/accessories/head_accessory_chain_left', 60006), + (27046, 25011, 'accessories/wearable_items/_exp11/heroes_festival/accessories/head_accessory_chain_right', 60006), + (27047, 25012, 'accessories/wearable_items/_exp11/heroes_festival/accessories/head_accessory_dark_left', 60006), + (27048, 25013, 'accessories/wearable_items/_exp11/heroes_festival/accessories/head_accessory_dark_right', 60006), + (27049, 25014, 'accessories/wearable_items/_exp11/heroes_festival/accessories/head_accessory_left', 60006), + (27050, 25015, 'accessories/wearable_items/_exp11/heroes_festival/accessories/head_accessory_right', 60006), + (27051, 25016, 'accessories/wearable_items/_exp11/heroes_festival/accessories/pauldron_chain_heroesfestival_dark_left', 60006), + (27052, 25017, 'accessories/wearable_items/_exp11/heroes_festival/accessories/pauldron_chain_heroesfestival_dark_right', 60006), + (27053, 25018, 'accessories/wearable_items/_exp11/heroes_festival/accessories/pauldron_chain_heroesfestival_left', 60006), + (27054, 25019, 'accessories/wearable_items/_exp11/heroes_festival/accessories/pauldron_chain_heroesfestival_right', 60006), + (27055, 25020, 'accessories/wearable_items/_exp11/heroes_festival/accessories/pauldron_heavy_heroesfestival_dark_left', 60006), + (27056, 25021, 'accessories/wearable_items/_exp11/heroes_festival/accessories/pauldron_heavy_heroesfestival_dark_right', 60006), + (27057, 25022, 'accessories/wearable_items/_exp11/heroes_festival/accessories/pauldron_heavy_heroesfestival_left', 60006), + (27058, 25023, 'accessories/wearable_items/_exp11/heroes_festival/accessories/pauldron_heavy_heroesfestival_right', 60006), + (27059, 25024, 'accessories/wearable_items/_exp11/heroes_festival/accessories/pauldron_leather_heroesfestival_dark_left', 60006), + (27060, 25025, 'accessories/wearable_items/_exp11/heroes_festival/accessories/pauldron_leather_heroesfestival_dark_right', 60006), + (27061, 25026, 'accessories/wearable_items/_exp11/heroes_festival/accessories/pauldron_leather_heroesfestival_left', 60006), + (27062, 25027, 'accessories/wearable_items/_exp11/heroes_festival/accessories/pauldron_leather_heroesfestival_right', 60006), + (27063, 25028, 'accessories/wearable_items/_exp11/heroes_festival/accessories/pauldron_leather2_heroesfestival_dark_left', 60006), + (27064, 25029, 'accessories/wearable_items/_exp11/heroes_festival/accessories/pauldron_leather2_heroesfestival_dark_right', 60006), + (27065, 25030, 'accessories/wearable_items/_exp11/heroes_festival/accessories/pauldron_leather2_heroesfestival_left', 60006), + (27066, 25031, 'accessories/wearable_items/_exp11/heroes_festival/accessories/pauldron_leather2_heroesfestival_right', 60006), + (27067, 25032, 'accessories/wearable_items/_exp11/heroes_festival/accessories/pauldron_robe_heroesfestival_dark_left', 60006), + (27068, 25033, 'accessories/wearable_items/_exp11/heroes_festival/accessories/pauldron_robe_heroesfestival_dark_right', 60006), + (27069, 25034, 'accessories/wearable_items/_exp11/heroes_festival/accessories/pauldron_robe_heroesfestival_left', 60006), + (27070, 25035, 'accessories/wearable_items/_exp11/heroes_festival/accessories/pauldron_robe_heroesfestival_right', 60006), + (27071, 25036, 'accessories/wearable_items/_exp11/heroes_festival/chain/chest', 60006), + (27072, 25037, 'accessories/wearable_items/_exp11/heroes_festival/chain/feet', 60006), + (27073, 25038, 'accessories/wearable_items/_exp11/heroes_festival/chain/forearms', 60006), + (27074, 25039, 'accessories/wearable_items/_exp11/heroes_festival/chain/hands', 60006), + (27075, 25040, 'accessories/wearable_items/_exp11/heroes_festival/chain/head', 60006), + (27076, 25041, 'accessories/wearable_items/_exp11/heroes_festival/chain/head_epic', 60006), + (27077, 25042, 'accessories/wearable_items/_exp11/heroes_festival/chain/legs', 60006), + (27078, 25043, 'accessories/wearable_items/_exp11/heroes_festival/chain/legs_noskirt', 60006), + (27079, 25044, 'accessories/wearable_items/_exp11/heroes_festival/chain/shoulders', 60006), + (27080, 25045, 'accessories/wearable_items/_exp11/heroes_festival/chain/shoulders_epic', 60006), + (27081, 25046, 'accessories/wearable_items/_exp11/heroes_festival/chain/skirt', 60006), + (27082, 25047, 'accessories/wearable_items/_exp11/heroes_festival/chain_dark/chest', 60006), + (27083, 25048, 'accessories/wearable_items/_exp11/heroes_festival/chain_dark/feet', 60006), + (27084, 25049, 'accessories/wearable_items/_exp11/heroes_festival/chain_dark/forearms', 60006), + (27085, 25050, 'accessories/wearable_items/_exp11/heroes_festival/chain_dark/hands', 60006), + (27086, 25051, 'accessories/wearable_items/_exp11/heroes_festival/chain_dark/head', 60006), + (27087, 25052, 'accessories/wearable_items/_exp11/heroes_festival/chain_dark/head_epic', 60006), + (27088, 25053, 'accessories/wearable_items/_exp11/heroes_festival/chain_dark/legs', 60006), + (27089, 25054, 'accessories/wearable_items/_exp11/heroes_festival/chain_dark/legs_noskirt', 60006), + (27090, 25055, 'accessories/wearable_items/_exp11/heroes_festival/chain_dark/shoulders', 60006), + (27091, 25056, 'accessories/wearable_items/_exp11/heroes_festival/chain_dark/shoulders_epic', 60006), + (27092, 25057, 'accessories/wearable_items/_exp11/heroes_festival/chain_dark/skirt', 60006), + (27093, 25058, 'accessories/wearable_items/_exp11/heroes_festival/leather/chest', 60006), + (27094, 25059, 'accessories/wearable_items/_exp11/heroes_festival/leather/feet', 60006), + (27095, 25060, 'accessories/wearable_items/_exp11/heroes_festival/leather/forearms', 60006), + (27096, 25061, 'accessories/wearable_items/_exp11/heroes_festival/leather/hands', 60006), + (27097, 25062, 'accessories/wearable_items/_exp11/heroes_festival/leather/head', 60006), + (27098, 25063, 'accessories/wearable_items/_exp11/heroes_festival/leather/legs', 60006), + (27099, 25064, 'accessories/wearable_items/_exp11/heroes_festival/leather/legs_noskirt', 60006), + (27100, 25065, 'accessories/wearable_items/_exp11/heroes_festival/leather/shoulders', 60006), + (27101, 25066, 'accessories/wearable_items/_exp11/heroes_festival/leather/shoulders_epic', 60006), + (27102, 25067, 'accessories/wearable_items/_exp11/heroes_festival/leather/skirt', 60006), + (27103, 25068, 'accessories/wearable_items/_exp11/heroes_festival/leather_dark/chest', 60006), + (27104, 25069, 'accessories/wearable_items/_exp11/heroes_festival/leather_dark/feet', 60006), + (27105, 25070, 'accessories/wearable_items/_exp11/heroes_festival/leather_dark/forearms', 60006), + (27106, 25071, 'accessories/wearable_items/_exp11/heroes_festival/leather_dark/hands', 60006), + (27107, 25072, 'accessories/wearable_items/_exp11/heroes_festival/leather_dark/head', 60006), + (27108, 25073, 'accessories/wearable_items/_exp11/heroes_festival/leather_dark/legs', 60006), + (27109, 25074, 'accessories/wearable_items/_exp11/heroes_festival/leather_dark/legs_noskirt', 60006), + (27110, 25075, 'accessories/wearable_items/_exp11/heroes_festival/leather_dark/shoulders', 60006), + (27111, 25076, 'accessories/wearable_items/_exp11/heroes_festival/leather_dark/shoulders_epic', 60006), + (27112, 25077, 'accessories/wearable_items/_exp11/heroes_festival/leather_dark/skirt', 60006), + (27113, 25078, 'accessories/wearable_items/_exp11/heroes_festival/robe/chest', 60006), + (27114, 25079, 'accessories/wearable_items/_exp11/heroes_festival/robe/chest_epic', 60006), + (27115, 25080, 'accessories/wearable_items/_exp11/heroes_festival/robe/feet', 60006), + (27116, 25081, 'accessories/wearable_items/_exp11/heroes_festival/robe/hands', 60006), + (27117, 25082, 'accessories/wearable_items/_exp11/heroes_festival/robe/head', 60006), + (27118, 25083, 'accessories/wearable_items/_exp11/heroes_festival/robe/pants', 60006), + (27119, 25084, 'accessories/wearable_items/_exp11/heroes_festival/robe/skirt', 60006), + (27120, 25085, 'accessories/wearable_items/_exp11/heroes_festival/robe_dark/chest', 60006), + (27121, 25086, 'accessories/wearable_items/_exp11/heroes_festival/robe_dark/chest_epic', 60006), + (27122, 25087, 'accessories/wearable_items/_exp11/heroes_festival/robe_dark/feet', 60006), + (27123, 25088, 'accessories/wearable_items/_exp11/heroes_festival/robe_dark/hands', 60006), + (27124, 25089, 'accessories/wearable_items/_exp11/heroes_festival/robe_dark/head', 60006), + (27125, 25090, 'accessories/wearable_items/_exp11/heroes_festival/robe_dark/pants', 60006), + (27126, 25091, 'accessories/wearable_items/_exp11/heroes_festival/robe_dark/skirt', 60006), + (27127, 25092, 'accessories/wearable_items/_exp11/heroes_festival/vanguard/chest', 60006), + (27128, 25093, 'accessories/wearable_items/_exp11/heroes_festival/vanguard/feet', 60006), + (27129, 25094, 'accessories/wearable_items/_exp11/heroes_festival/vanguard/forearms', 60006), + (27130, 25095, 'accessories/wearable_items/_exp11/heroes_festival/vanguard/hands', 60006), + (27131, 25096, 'accessories/wearable_items/_exp11/heroes_festival/vanguard/head', 60006), + (27132, 25097, 'accessories/wearable_items/_exp11/heroes_festival/vanguard/head_epic', 60006), + (27133, 25098, 'accessories/wearable_items/_exp11/heroes_festival/vanguard/left', 60006), + (27134, 25099, 'accessories/wearable_items/_exp11/heroes_festival/vanguard/legs', 60006), + (27135, 25100, 'accessories/wearable_items/_exp11/heroes_festival/vanguard/legs_noskirt', 60006), + (27136, 25101, 'accessories/wearable_items/_exp11/heroes_festival/vanguard/right', 60006), + (27137, 25102, 'accessories/wearable_items/_exp11/heroes_festival/vanguard/shoulders', 60006), + (27138, 25103, 'accessories/wearable_items/_exp11/heroes_festival/vanguard/shoulders_epic', 60006), + (27139, 25104, 'accessories/wearable_items/_exp11/heroes_festival/vanguard/shoulders_nopauldrons', 60006), + (27140, 25105, 'accessories/wearable_items/_exp11/heroes_festival/vanguard/skirt', 60006), + (27141, 25106, 'accessories/wearable_items/_exp11/heroes_festival/vanguard_dark/chest', 60006), + (27142, 25107, 'accessories/wearable_items/_exp11/heroes_festival/vanguard_dark/feet', 60006), + (27143, 25108, 'accessories/wearable_items/_exp11/heroes_festival/vanguard_dark/forearms', 60006), + (27144, 25109, 'accessories/wearable_items/_exp11/heroes_festival/vanguard_dark/hands', 60006), + (27145, 25110, 'accessories/wearable_items/_exp11/heroes_festival/vanguard_dark/head', 60006), + (27146, 25111, 'accessories/wearable_items/_exp11/heroes_festival/vanguard_dark/head_epic', 60006), + (27147, 25112, 'accessories/wearable_items/_exp11/heroes_festival/vanguard_dark/left', 60006), + (27148, 25113, 'accessories/wearable_items/_exp11/heroes_festival/vanguard_dark/legs', 60006), + (27149, 25114, 'accessories/wearable_items/_exp11/heroes_festival/vanguard_dark/legs_noskirt', 60006), + (27150, 25115, 'accessories/wearable_items/_exp11/heroes_festival/vanguard_dark/right', 60006), + (27151, 25116, 'accessories/wearable_items/_exp11/heroes_festival/vanguard_dark/shoulders', 60006), + (27152, 25117, 'accessories/wearable_items/_exp11/heroes_festival/vanguard_dark/shoulders_epic', 60006), + (27153, 25118, 'accessories/wearable_items/_exp11/heroes_festival/vanguard_dark/shoulders_nopauldrons', 60006), + (27154, 25119, 'accessories/wearable_items/_exp11/heroes_festival/vanguard_dark/skirt', 60006), + (27155, 25120, '_exp11/houseitems/ss_gbeanbasket_dpo', 60006), + (27156, 25121, '_exp11/houseitems/ss_firepit_fire_dpo', 60006), + (27157, 25122, '_exp11/houseitems/ss_fatgoldbasket_dpo', 60006), + (27158, 25123, 'playerstudio/houseitems/cornucopia', 60006), + (27159, 25124, 'playerstudio/houseitems/dark_elf_statue', 60006), + (27160, 25125, 'playerstudio/houseitems/dark_wizard_sentry', 60006), + (27161, 25126, 'playerstudio/houseitems/franky_brain', 60006), + (27162, 25127, 'playerstudio/houseitems/franky_electro', 60006), + (27163, 25128, 'playerstudio/houseitems/franky_table', 60006), + (27164, 25129, 'playerstudio/houseitems/freeblood_tomb', 60006), + (27165, 25130, 'playerstudio/houseitems/freeport_gallows', 60006), + (27166, 25131, 'playerstudio/houseitems/halfling_cabinet', 60006), + (27167, 25132, 'playerstudio/houseitems/halfling_closet', 60006), + (27168, 25133, 'playerstudio/houseitems/harvest_wagon', 60006), + (27169, 25134, 'playerstudio/houseitems/grannys_house', 60006), + (27170, 25135, 'playerstudio/houseitems/headmaster_ritual', 60006), + (27171, 25136, 'playerstudio/houseitems/long_rope_bridge', 60006), + (27172, 25137, 'playerstudio/houseitems/nouveau_armoire', 60006), + (27173, 25138, 'playerstudio/houseitems/outhouse_tool_shed', 60006), + (27174, 25139, 'playerstudio/houseitems/outhouse_tool_shed_door', 60006), + (27175, 25140, 'playerstudio/houseitems/polished_suma_cupboard', 60006), + (27176, 25141, 'playerstudio/houseitems/short_rope_bridge', 60006), + (27177, 25142, 'playerstudio/houseitems/summer_breeze_chair', 60006), + (27178, 25143, 'playerstudio/houseitems/summer_breeze_recliner', 60006), + (27179, 25144, 'playerstudio/houseitems/summer_breeze_table', 60006), + (27180, 25145, 'playerstudio/houseitems/summer_breeze_umbrella', 60006), + (27181, 25146, 'playerstudio/houseitems/wood_shingled_corner_roof', 60006), + (27182, 25147, '_exp11/objects/exp11_dun_highhold/hh_gatekey_dpo', 60006), + (27183, 25148, 'creatures/mounts/pegasus_skeleton/pegasus_skeleton_flames_blue', 60006), + (27184, 25149, 'creatures/mounts/pegasus_skeleton/pegasus_skeleton_flames_green', 60006), + (27185, 25150, 'creatures/mounts/player_wing/player_wing_skeleton', 60006), + (27186, 25151, '_exp11/houseitems/pygmy_rdmrkrfeathers_dpo', 60006), + (27187, 25152, 'accessories/wieldable_items/shields/exp11/shield_heroesfestival', 60006), + (27188, 25153, 'accessories/wieldable_items/weapons/exp11/1h_pierce/dagger_heroesfestival', 60006), + (27189, 25154, 'accessories/wieldable_items/weapons/exp11/1h_sword/sword_heroesfestival', 60006), + (27190, 25155, 'accessories/wieldable_items/weapons/exp11/1h_wand/wand_heroesfestival', 60006), + (27191, 25156, 'accessories/wieldable_items/weapons/exp11/2h_sword/sword_2h_heroesfestival', 60006), + (27192, 25157, 'accessories/wieldable_items/weapons/exp11/2h_sword/hammer_2h_heroesfestival', 60006), + (27193, 25158, 'accessories/wieldable_items/weapons/exp11/bow/longbow_heroesfestival', 60006), + (27194, 25159, 'accessories/wieldable_items/weapons/exp11/fist/fist_heroesfestival', 60006), + (27195, 25160, 'accessories/wieldable_items/weapons/exp11/staff/staff_heroesfestival', 60006), + (27196, 25161, 'accessories/wieldable_items/weapons/exp11/staff/spear_heroesfestival', 60006), + (27197, 25162, 'creatures/mounts/aerakyn/aerakyn_flyer_base', 60006), + (27198, 25163, 'creatures/mounts/pegasus_skeleton/pegasus_skeleton_flames_void', 60006), + (27199, 25164, 'creatures/monsters/tyrannosaurus_mount_variant', 60006), + (27200, 25165, 'ec/pc/aerakyn/aerakyn_female_head01_long02', 60006), + (27201, 25166, 'ec/pc/aerakyn/aerakyn_female_head02_long02', 60006), + (27202, 25167, 'ec/pc/aerakyn/aerakyn_female_head03_long02', 60006), + (27203, 25168, 'ec/pc/aerakyn/aerakyn_female_head04_long02', 60006), + (27204, 25169, 'ec/pc/aerakyn/aerakyn_female_head05_long02', 60006), + (27205, 25170, 'ec/pc/aerakyn/aerakyn_female_head06_long02', 60006), + (27206, 25171, 'creatures/mounts/dragonfly_mount/dragonfly_mount_ruby', 60006), + (27207, 25172, 'creatures/mounts/dragonfly_mount/dragonfly_mount_topaz', 60006), + (27208, 25173, 'creatures/mounts/dragonfly_mount/dragonfly_base_emerald', 60006), + (27209, 25174, 'creatures/mounts/dragonfly_mount/dragonfly_base_ruby', 60006), + (27210, 25175, 'creatures/mounts/dragonfly_mount/dragonfly_base_topaz', 60006), + (27211, 25176, '_exp11/houseitems/ns_village_brazier_tall01_dpo', 60006), + (27212, 25177, '_exp11/houseitems/ns_village_chest01_dpo', 60006), + (27213, 25178, '_exp11/houseitems/ns_village_table_round01_dpo', 60006), + (27214, 25179, '_exp11/houseitems/ns_village_table_shelf01_dpo', 60006), + (27215, 25180, '_exp11/houseitems/ns_village_bed01_dpo', 60006), + (27216, 25181, '_exp11/houseitems/ns_village_bookcase01_dpo', 60006), + (27217, 25182, '_exp11/houseitems/ns_village_chair01_dpo', 60006), + (27218, 25183, 'ec/pc/aerakyn/aerakyn_male_wings06', 60006), + (27219, 25184, 'projectiles/exp02/hof_molotov_cocktail_green', 60006), + (27220, 25185, '_exp11/objects/exp11_southseas/pygmy_barricade_02_dpo', 60006), + (27221, 25186, '_exp11/objects/exp11_southseas/pygmy_barricade_03_dpo', 60006), + (27222, 25187, '_exp11/houseitems/shipwheel_fs_dpo', 60006), + (27223, 25188, '_exp11/houseitems/weaponrack_empty_fs_dpo', 60006), + (27224, 25189, '_exp11/houseitems/weaponrack_full_fs_dpo', 60006), + (27225, 25190, 'playerstudio/characters/weapons/1h_sword/restless_axe/restless_axe', 60006), + (27226, 25191, 'playerstudio/houseitems/mummy_fortunas_ball', 60006), + (27227, 25192, 'playerstudio/houseitems/mummy_fortunas_card_case', 60006), + (27228, 25193, 'playerstudio/houseitems/passage_ferry', 60006), + (27229, 25194, 'playerstudio/houseitems/passage_ferryman', 60006), + (27230, 25195, 'playerstudio/houseitems/passage_lantern', 60006), + (27231, 25196, 'playerstudio/houseitems/passage_raven', 60006), + (27232, 25197, 'playerstudio/houseitems/finger_food', 60006), + (27233, 25198, 'playerstudio/houseitems/thexian_wagon', 60006), + (27234, 25199, '_exp11/houseitems/rot_crusher_01_dpo', 60006), + (27235, 25200, '_exp11/houseitems/rot_pumpgear_01_dpo', 60006), + (27236, 25201, '_exp11/houseitems/ns_keep_brazier01_dpo', 60006), + (27237, 25202, '_exp11/houseitems/ns_keep_weapon_shelf01_dpo', 60006), + (27238, 25203, '_exp11/houseitems/ns_keep_chest01_dpo', 60006), + (27239, 25204, '_exp11/houseitems/ns_village_brazier_tall02_dpo', 60006), + (27240, 25205, '_exp11/houseitems/ns_village_bookcase01_worn_dpo', 60006), + (27241, 25206, '_exp11/houseitems/pygmy_bonedecor01_dpo', 60006), + (27242, 25207, '_exp11/houseitems/pygmy_meatspit_dpo', 60006), + (27243, 25208, '_exp11/houseitems/pygmy_firepitwood_dpo', 60006), + (27244, 25209, '_exp11/houseitems/pygmy_gazebo_dpo', 60006), + (27245, 25210, '_exp11/houseitems/ssrae_statue01_brazier_dpo', 60006), + (27246, 25211, '_exp11/houseitems/ssrae_statue02_brazier_dpo', 60006), + (27247, 25212, '_exp11/houseitems/ssrae_wheelbarrowtools_dpo', 60006), + (27248, 25213, '_exp11/houseitems/ssrae_tooltable02_dpo', 60006), + (27249, 25214, '_exp11/houseitems/ssrae_urn02_dpo', 60006), + (27250, 25215, '_exp11/houseitems/ssrae_urn03a_dpo', 60006), + (27251, 25216, '_exp11/houseitems/hh_office_tapestry_dpo', 60006), + (27252, 25217, '_exp11/houseitems/hh_tapestry_long_dpo', 60006), + (27253, 25218, '_exp11/houseitems/alchemy_beaker01_dpo', 60006), + (27254, 25219, '_exp11/houseitems/alchemy_beakerwithtube01_dpo', 60006), + (27255, 25220, '_exp11/houseitems/alchemy_bowl_specimen_candle01_dpo', 60006), + (27256, 25221, '_exp11/houseitems/alchemy_stand_liquid01_dpo', 60006), + (27257, 25222, '_exp11/houseitems/dpo_darkelf_goo_jar', 60006), + (27258, 25223, '_exp11/houseitems/dpo_highhold_jar', 60006), + (27259, 25224, '_exp11/houseitems/dpo_highhold_gems_dpo', 60006), + (27260, 25225, '_exp11/houseitems/ss_mural04_dpo', 60006), + (27261, 25226, '_exp11/houseitems/ss_mural03_dpo', 60006), + (27262, 25227, '_exp11/houseitems/ss_mural02_dpo', 60006), + (27263, 25228, '_exp11/houseitems/ss_mural01_dpo', 60006), + (27264, 25229, '_exp11/characters/tool_users/shissar/shissar_male_transform_statue', 60006), + (27265, 25230, '_exp11/houseitems/pygmy_jar_dpo', 60006), + (27266, 25231, '_exp11/objects/exp11_dun_highhold/triangular_platform_upright_dpo_02', 60006), + (27267, 25232, 'accessories/wieldable_items/weapons/exp11/staff/exp11_staff_wooden_skull', 60006), + (27268, 25233, '_exp11/houseitems/weapcrate_small_fs_dpo', 60006), + (27269, 25234, '_exp11/houseitems/weapcrate_large', 60006), + (27270, 25235, 'creatures/mounts/dino_flyer/dino_flyer_collectors_tiger', 60006), + (27271, 25236, 'staticobjects/liveevent/community/halloween_contest_reward', 60006), + (27272, 25237, 'staticobjects/_exp11/ss_rings_teleporter', 60006), + (27273, 25238, 'accessories/wieldable_items/weapons/exp11/1h_pierce/exp11_1h_pierce_dagger_cultist', 60006), + (27274, 25239, '_exp11/objects/exp11_dun_ssraeshza/ss_rings_spinning_dpo', 60006), + (27275, 25240, 'accessories/wieldable_items/weapons/exp11/staff/club_2h_oar_pike', 60006), + (27276, 25241, '_exp11/characters/tool_users/grimling/grimling_female_base', 60006), + (27277, 25242, '_exp11/characters/tool_users/grimling/grimling_female_variant_01', 60006), + (27278, 25243, '_exp11/characters/tool_users/grimling/grimling_female_variant_02', 60006), + (27279, 25244, '_exp11/characters/tool_users/cazik_thule/cazik_thule_lava_activated', 60006), + (27280, 25245, '_exp11/characters/tool_users/cazik_thule/cazik_thule_lava_statue', 60006), + (27281, 25246, 'creatures/mounts/dragonfly_mount/dragonfly_flyer_emerald', 60006), + (27282, 25247, 'creatures/mounts/dragonfly_mount/dragonfly_flyer_ruby', 60006), + (27283, 25248, 'creatures/mounts/dragonfly_mount/dragonfly_flyer_topaz', 60006), + (27284, 25249, 'staticobjects/_exp11/qst_sen_potions03_purple', 60006), + (27285, 25250, 'staticobjects/_exp11/qst_sen_potions03_water', 60006), + (27286, 25251, 'staticobjects/_exp11/qst_sen_potions03_yellow', 60006), + (27287, 25252, 'staticobjects/_exp03/dpo_mc_epic01coffin_door03', 60006), + (27288, 25253, 'staticobjects/_exp03/dpo_mc_epic01coffin_door04entrance', 60006), + (27289, 25254, 'staticobjects/_exp03/dpo_mc_epic01coffin_secretdoor01', 60006), + (27290, 25255, 'staticobjects/statues/cm_statue_vampire_female', 60006), + (27291, 25256, 'staticobjects/statues/cm_statue_vampire_male', 60006), + (27292, 25257, 'staticobjects/_exp11/aom_keyart_painting', 60006), + (27293, 25258, '_exp01/characters/monsters/devil_fire_blue', 60006), + (27294, 25259, '_exp11/characters/tool_users/shissar/shissar_male_undead', 60006), + (27295, 25260, 'creatures/mounts/duck_mount/duck_mount_base', 60006), + (27296, 25261, '_exp11/characters/tool_users/akheva/akheva_male_variant03', 60006), + (27297, 25262, 'staticobjects/structures/dc_boathouse_framing02', 60006), + (27298, 25263, 'staticobjects/structures/dc_outhouse01', 60006), + (27299, 25264, 'creatures/monsters/tyrannosaurus_mount_test', 60006), + (27300, 25265, 'creatures/tu/test', 60006), + (27301, 25266, '_exp11/characters/tool_users/akheva/akheva_male_black', 60006), + (27302, 25267, '_exp11/characters/tool_users/akheva/akheva_male_blue', 60006), + (27303, 25268, '_exp11/characters/tool_users/akheva/akheva_male_green', 60006), + (27304, 25269, '_exp11/characters/tool_users/akheva/akheva_male_variant03_black', 60006), + (27305, 25270, '_exp11/characters/tool_users/akheva/akheva_male_variant03_blue', 60006), + (27306, 25271, '_exp11/characters/tool_users/akheva/akheva_male_variant03_green', 60006), + (27307, 25272, 'creatures/tu/lizardkin_mounted_trex', 60006), + (27308, 25273, 'staticobjects/_exp11/wizardstonetower_small', 60006), + (27309, 25274, 'staticobjects/_exp11/broken_wizardtower_small', 60006), + (27310, 25275, '_exp11/characters/tool_users/lanys_tyvl/lanys_tyvl', 60006), + (27311, 25276, '_exp11/characters/tool_users/akheva/akheva_female_formal_black', 60006), + (27312, 25277, '_exp11/characters/tool_users/akheva/akheva_female_formal_green', 60006), + (27313, 25278, '_exp11/characters/tool_users/akheva/akheva_female_formal_red', 60006), + (27314, 25279, '_exp11/characters/tool_users/akheva/akheva_female_mage_black', 60006), + (27315, 25280, '_exp11/characters/tool_users/akheva/akheva_female_mage_green', 60006), + (27316, 25281, '_exp11/characters/tool_users/akheva/akheva_female_mage_red', 60006), + (27317, 25282, '_exp11/characters/tool_users/akheva/akheva_female_queen_black', 60006), + (27318, 25283, '_exp11/characters/tool_users/akheva/akheva_female_queen_green', 60006), + (27319, 25284, '_exp11/characters/tool_users/akheva/akheva_female_queen_red', 60006), + (27320, 25285, 'creatures/monsters/willowisp_portal_sphere_blue', 60006), + (27321, 25286, 'creatures/monsters/willowisp_portal_sphere_dark', 60006), + (27322, 25287, 'accessories/wearable_items/snapons/backpacks/backpack_grimling', 60006), + (27323, 25288, '_exp11/characters/tool_users/akheva/akheva_male_boss_black', 60006), + (27324, 25289, '_exp11/characters/tool_users/akheva/akheva_male_boss_blue', 60006), + (27325, 25290, '_exp11/characters/tool_users/akheva/akheva_male_boss_green', 60006), + (27326, 25291, 'staticobjects/_exp11/arena_avatar_spawner', 60006), + (27327, 25292, 'staticobjects/bottles/scroll_in_bottle_dpo', 60006), + (27328, 25293, 'accessories/wieldable_items/weapons/exp11/1h_sword/exp11_1h_sword_cultist', 60006), + (27329, 25294, '_exp11/characters/monsters/plushy_baelon_unarmed', 60006), + (27330, 25295, '_exp11/characters/monsters/plushy_baelon_armed', 60006), + (27331, 25296, '_exp11/characters/monsters/plushy_rhoentheer', 60006), + (27332, 25297, '_exp11/characters/monsters/plushy_animal_trakanon', 60006), + (27333, 25298, '_exp11/characters/monsters/plushy_djinnmaster', 60006), + (27334, 25299, 'accessories/wieldable_items/weapons/exp11/1h_sword/sword_plushie_rhoentheer_evil', 60006), + (27335, 25300, 'accessories/wieldable_items/weapons/exp11/1h_sword/sword_plushie_rhoentheer_good', 60006), + (27336, 25301, 'accessories/wieldable_items/weapons/exp11/2h_sword/sword_2h_rhoentheer_plushie_evil', 60006), + (27337, 25302, 'accessories/wieldable_items/weapons/exp11/2h_sword/sword_2h_rhoentheer_plushie_good', 60006), + (27338, 25303, 'accessories/wieldable_items/weapons/exp11/staff/exp11_staff_cultist', 60006), + (27339, 25304, '_exp11/characters/monsters/plushy_rhoentheer_small', 60006), + (27340, 25305, '_exp11/characters/monsters/plushy_baelon_armed_small', 60006), + (27341, 25306, '_exp11/characters/monsters/plushy_animal_trakanon_small', 60006), + (27342, 25307, '_exp11/characters/monsters/plushy_animal_darathar_small', 60006), + (27343, 25308, '_exp11/characters/tool_users/villandre/villandre', 60006), + (27344, 25309, '_exp11/characters/tool_users/ghost_models/ghost_gnomefemale_backpack', 60006), + (27345, 25310, '_exp11/characters/tool_users/lanys_tyvl/lanys_tyvl_no_crown', 60006), + (27346, 25311, 'staticobjects/_exp11/pirate_cannon', 60006), + (27347, 25312, 'staticobjects/_exp11/pirate_cannonball_pile', 60006), + (27348, 25313, '_exp11/characters/tool_users/ghost_models/ghost_ogre_male_pirate', 60006), + (27349, 25314, '_exp11/characters/tool_users/ghost_models/ghost_troll_female_pirate', 60006), + (27350, 25315, '_exp11/characters/tool_users/ghost_models/ghost_troll_female_skimpy_pirate', 60006), + (27351, 25316, '_exp11/characters/tool_users/ghost_models/ghost_troll_male_pegleg_pirate', 60006), + (27352, 25317, '_exp11/characters/tool_users/ghost_models/ghost_troll_male_pirate', 60006), + (27353, 25318, 'accessories/wieldable_items/weapons/exp11/1h_crush/club_oar', 60006), + (27354, 25319, '_exp11/houseitems/ssrae_ancient_vase_dpo', 60006), + (27355, 25320, 'staticobjects/harvested/crystals/hrvst_crystals_luclinite', 60006), + (27356, 25321, 'accessories/wieldable_items/weapons/exp11/1h_sword/lanys_sword', 60006), + (27357, 25322, 'staticobjects/guildhall/trophies/gh_loot_tribunal_base', 60006), + (27358, 25323, 'staticobjects/guildhall/trophies/gh_loot_lanys_sword_base', 60006), + (27359, 25324, 'staticobjects/guildhall/trophies/gh_loot_spiderbear_spiderbear', 60006), + (27360, 25325, 'staticobjects/guildhall/trophies/gh_loot_shissar_male_undead', 60006), + (27361, 25326, 'staticobjects/guildhall/trophies/gh_loot_krassnok_krassnok_ghost', 60006), + (27362, 25327, 'staticobjects/guildhall/trophies/gh_loot_fennin_ro', 60006), + (27363, 25328, 'staticobjects/guildhall/trophies/gh_loot_construct_of_malice', 60006), + (27364, 25329, 'staticobjects/guildhall/trophies/gh_loot_cazik_thule_lava', 60006), + (27365, 25330, 'staticobjects/guildhall/trophies/gh_loot_cazic_cazik_thule', 60006), + (27366, 25331, 'accessories/wearable_items/profesion_hats/crown_lanys/crown_lanys', 60006), + (27367, 25332, '_exp11/characters/monsters/plushy_animal_darathar', 60006), + (27368, 25333, 'creatures/mounts/aerakyn/aerakyn_ground_base', 60006), + (27369, 25334, 'accessories/wieldable_items/shields/exp11/shield_mage_mermaid', 60006), + (27370, 25335, 'accessories/wieldable_items/shields/exp11/shield_round_mermaid', 60006), + (27371, 25336, 'accessories/wieldable_items/shields/exp11/shield_tower_mermaid', 60006), + (27372, 25337, 'accessories/wieldable_items/weapons/exp11/1h_crush/hammer_mermaid_square', 60006), + (27373, 25338, 'accessories/wieldable_items/weapons/exp11/1h_crush/scepter_mermaid', 60006), + (27374, 25339, 'accessories/wieldable_items/weapons/exp11/1h_crush/mace_mermaid', 60006), + (27375, 25340, 'accessories/wieldable_items/weapons/exp11/1h_crush/hammer_mermaid_round', 60006), + (27376, 25341, 'accessories/wieldable_items/weapons/exp11/1h_pierce/shortspear_mermaid', 60006), + (27377, 25342, 'accessories/wieldable_items/weapons/exp11/1h_pierce/dagger_mermaid', 60006), + (27378, 25343, 'accessories/wieldable_items/weapons/exp11/1h_pierce/dagger_mermaid_mage', 60006), + (27379, 25344, 'accessories/wieldable_items/weapons/exp11/1h_sword/sword_mermaid', 60006), + (27380, 25345, 'accessories/wieldable_items/weapons/exp11/1h_sword/sword_mermaid_rapier', 60006), + (27381, 25346, 'accessories/wieldable_items/weapons/exp11/1h_sword/axe_mermaid_battleaxe', 60006), + (27382, 25347, 'accessories/wieldable_items/weapons/exp11/1h_sword/axe_mermaid_hatchet', 60006), + (27383, 25348, 'accessories/wieldable_items/weapons/exp11/1h_wand/wand_mermaid', 60006), + (27384, 25349, 'accessories/wieldable_items/weapons/exp11/2h_sword/hammer_2h_mermaid', 60006), + (27385, 25350, 'accessories/wieldable_items/weapons/exp11/2h_sword/axe_2h_mermaid', 60006), + (27386, 25351, 'accessories/wieldable_items/weapons/exp11/bow/shortbow_mermaid', 60006), + (27387, 25352, 'accessories/wieldable_items/weapons/exp11/bow/longbow_mermaid', 60006), + (27388, 25353, 'accessories/wieldable_items/weapons/exp11/fist/fist_mermaid_punchblade', 60006), + (27389, 25354, 'accessories/wieldable_items/weapons/exp11/fist/fist_mermaid_blade', 60006), + (27390, 25355, 'accessories/wieldable_items/weapons/exp11/staff/staff_mermaid_mage', 60006), + (27391, 25356, 'accessories/wieldable_items/weapons/exp11/staff/staff_mermaid', 60006), + (27392, 25357, 'accessories/wieldable_items/weapons/exp11/staff/staff_mermaid_battlestaff', 60006), + (27393, 25358, 'accessories/wieldable_items/weapons/exp11/staff/spear_mermaid', 60006), + (27394, 25359, '_exp11/houseitems/hh_globe_base_dpo', 60006), + (27395, 25360, 'accessories/npc_wearables/cultist/exp11_1h_pierce_dagger_cultist', 60006), + (27396, 25361, 'accessories/npc_wearables/cultist/exp11_1h_sword_cultist', 60006), + (27397, 25362, 'accessories/npc_wearables/cultist/exp11_staff_cultist', 60006), + (27398, 25363, 'accessories/npc_wearables/grimling/exp11_1h_axe_grimling', 60006), + (27399, 25364, 'accessories/npc_wearables/grimling/exp11_1h_sword_grimling', 60006), + (27400, 25365, 'accessories/wieldable_items/weapons/exp11/1h_sword/exp11_1h_axe_grimling', 60006), + (27401, 25366, 'accessories/wieldable_items/weapons/exp11/1h_sword/exp11_1h_sword_grimling', 60006), + (27402, 25367, 'accessories/npc_wearables/lava_pygmy/exp11_1h_crush_hammer_lavapygmy', 60006), + (27403, 25368, 'accessories/npc_wearables/lava_pygmy/exp11_shortbow_lavapygmy', 60006), + (27404, 25369, 'accessories/wieldable_items/weapons/exp11/1h_crush/exp11_1h_crush_hammer_lavapygmy', 60006), + (27405, 25370, 'accessories/wieldable_items/weapons/exp11/bow/exp11_shortbow_lavapygmy', 60006), + (27406, 25371, 'creatures/tu/gnoll_skeleton_2014', 60006), + (27407, 25372, 'accessories/wieldable_items/shields/exp11/lanys_shield', 60006), + (27408, 25373, 'staticobjects/guildhall/standard_flag_white_nofx', 60006), + (27409, 25374, '_exp11/characters/monsters/lava_butterfly/lava_butterfly_base', 60006), + (27410, 25375, 'staticobjects/guildhall/trophies/gh_loot_dragon_vulakk', 60006), + (27411, 25376, 'staticobjects/guildhall/trophies/gh_loot_karana', 60006), + (27412, 25377, 'accessories/npc_wearables/ahkeva/exp11_1h_mace_ahkeva', 60006), + (27413, 25378, 'accessories/wieldable_items/weapons/exp11/1h_crush/exp11_1h_crush_mace_ahkeva', 60006), + (27414, 25379, 'accessories/wieldable_items/weapons/exp11/1h_sword/exp11_1h_scythe_ahkeva', 60006), + (27415, 25380, 'staticobjects/_exp11/pirate_coiled_rope', 60006), + (27416, 25381, 'staticobjects/_exp11/pirate_long_rope', 60006), + (27417, 25382, 'playerstudio/characters/shields/tower_round_shields/bristlebane_bulwark/bristlebane_bulwark', 60006), + (27418, 25383, 'playerstudio/characters/cloaks/drape_of_aniji/drape_of_aniji', 60006), + (27419, 25384, 'playerstudio/characters/weapons/bow/vine_bow/vine_bow', 60006), + (27420, 25385, 'playerstudio/characters/weapons/fist/spiked_gauntlet/spiked_gauntlet', 60006), + (27421, 25386, 'staticobjects/tents/dpo_wl_tent_combine05_blue', 60006), + (27422, 25387, 'staticobjects/tents/dpo_wl_tent_combine04_blue', 60006), + (27423, 25388, 'staticobjects/tents/ant_leanto_smallblue001', 60006), + (27424, 25389, 'staticobjects/tents/farseas_respawn_tent01', 60006), + (27425, 25390, 'staticobjects/tents/dpo_po_tent_leanto01', 60006), + (27426, 25391, 'creatures/mounts/dino_flyer/dino_flyer_server', 60006), + (27427, 25392, '_exp11/objects/exo11_pirate_cove/pc_cannon01', 60006), + (27428, 25393, '_exp11/objects/exp11_dun_zavithloa/zav_egg_dpo', 60006), + (27429, 25394, '_exp11/objects/exp11_dun_zavithloa/zav_mushroom', 60006), + (27430, 25395, '_exp11/objects/exp11_southseas/lizardkin_floorbrazier_wfire_dpo', 60006), + (27431, 25396, '_exp11/objects/exp11_southseas/ss_legbone_dpo', 60006), + (27432, 25397, '_exp11/objects/exp11_southseas/ss_ribbone01_dpo', 60006), + (27433, 25398, '_exp11/objects/exp11_southseas/ss_spinebone_dpo', 60006), + (27434, 25399, '_exp11/houseitems/hh_office_chest', 60006), + (27435, 25400, '_exp11/houseitems/spiderbear_victimsac_dpo', 60006), + (27436, 25401, '_exp11/objects/exp11_dun_cathedral_of_bone/cob_chandelier_dop', 60006), + (27437, 25402, '_exp11/objects/exp11_dun_cathedral_of_bone/cob_table_dop', 60006), + (27438, 25403, '_exp11/houseitems/shissar_statue_sword_dpo', 60006), + (27439, 25404, 'staticobjects/tents/qey_village_tent02', 60006), + (27440, 25405, 'ec/pc/aerakyn/aerakyn_female_head01_long_braided', 60006), + (27441, 25406, 'ec/pc/aerakyn/aerakyn_female_head01_long_ponytail', 60006), + (27442, 25407, 'ec/pc/aerakyn/aerakyn_female_head01_long1', 60006), + (27443, 25408, 'ec/pc/aerakyn/aerakyn_female_head02_long_braided', 60006), + (27444, 25409, 'ec/pc/aerakyn/aerakyn_female_head02_long_ponytail', 60006), + (27445, 25410, 'ec/pc/aerakyn/aerakyn_female_head02_long1', 60006), + (27446, 25411, 'ec/pc/aerakyn/aerakyn_female_head03_long_braided', 60006), + (27447, 25412, 'ec/pc/aerakyn/aerakyn_female_head03_long_ponytail', 60006), + (27448, 25413, 'ec/pc/aerakyn/aerakyn_female_head03_long1', 60006), + (27449, 25414, 'ec/pc/aerakyn/aerakyn_female_head04_long_braided', 60006), + (27450, 25415, 'ec/pc/aerakyn/aerakyn_female_head04_long_ponytail', 60006), + (27451, 25416, 'ec/pc/aerakyn/aerakyn_female_head04_long1', 60006), + (27452, 25417, 'ec/pc/aerakyn/aerakyn_female_head05_long_braided', 60006), + (27453, 25418, 'ec/pc/aerakyn/aerakyn_female_head05_long_ponytail', 60006), + (27454, 25419, 'ec/pc/aerakyn/aerakyn_female_head05_long1', 60006), + (27455, 25420, 'ec/pc/aerakyn/aerakyn_female_head06_long_braided', 60006), + (27456, 25421, 'ec/pc/aerakyn/aerakyn_female_head06_long_ponytail', 60006), + (27457, 25422, 'ec/pc/aerakyn/aerakyn_female_head06_long1', 60006), + (27458, 25423, 'creatures/mounts/pirate_zepplin/pirate_zepplin', 60006), + (27459, 25424, '_exp11/houseitems/gnome_detector_dpo', 60006), + (27460, 25425, 'creatures/monsters/spider_clockwork_brass', 60006), + (27461, 25426, 'creatures/monsters/spider_clockwork_iron', 60006), + (27462, 25427, 'accessories/wieldable_items/shields/exp11/shield_buckler_chillburn', 60006), + (27463, 25428, 'accessories/wieldable_items/shields/exp11/shield_buckler_pyrebringer', 60006), + (27464, 25429, 'accessories/wieldable_items/shields/exp11/shield_buckler_voidwrought', 60006), + (27465, 25430, 'accessories/wieldable_items/shields/exp11/shield_chillburn', 60006), + (27466, 25431, 'accessories/wieldable_items/shields/exp11/shield_pyrebringer', 60006), + (27467, 25432, 'accessories/wieldable_items/shields/exp11/shield_voidwrought', 60006), + (27468, 25433, 'accessories/wearable_items/snapons/backpacks/backpack_tinkered_elaborate/backpack_tinkered_elaborate_darkiron_redglow', 60006), + (27469, 25434, 'accessories/wieldable_items/weapons/exp11/1h_pierce/1h_pierce_lanys_dagger', 60006), + (27470, 25435, 'staticobjects/liveevent/frostfell/dpo_bauble_crystal_blue', 60006), + (27471, 25436, 'staticobjects/liveevent/frostfell/dpo_bauble_crystal_green', 60006), + (27472, 25437, 'staticobjects/liveevent/frostfell/dpo_bauble_crystal_purple', 60006), + (27473, 25438, 'staticobjects/liveevent/frostfell/dpo_bauble_crystal_yellow', 60006), + (27474, 25439, '_exp09/characters/monsters/mud_monster/mud_monster_snow', 60006), + (27475, 25440, 'staticobjects/liveevent/frostfell/panel_iceblock', 60006), + (27476, 25441, 'staticobjects/liveevent/frostfell/iceblock_1x1_column_iceblock', 60006), + (27477, 25442, 'staticobjects/liveevent/frostfell/housecube_1x1_block_iceblock', 60006), + (27478, 25443, 'staticobjects/liveevent/frostfell/houseblock_1x2_column_iceblock', 60006), + (27479, 25444, 'staticobjects/liveevent/frostfell/houseblock_1x2_dividerblock_iceblock', 60006), + (27480, 25445, 'staticobjects/liveevent/frostfell/houseblock_1xhalf_block_iceblock', 60006), + (27481, 25446, 'staticobjects/liveevent/frostfell/houseblock_2x2_dividerblock_iceblock', 60006), + (27482, 25447, 'staticobjects/liveevent/frostfell/houseblock_rail_iceblock', 60006), + (27483, 25448, 'staticobjects/liveevent/frostfell/houseblock_roundtile_iceblock', 60006), + (27484, 25449, 'staticobjects/liveevent/frostfell/houseblock_stair_iceblock', 60006), + (27485, 25450, 'staticobjects/liveevent/frostfell/holiday_pointsettia02', 60006), + (27486, 25451, 'staticobjects/liveevent/frostfell/dpo_snowglobe_maltower', 60006), + (27487, 25452, 'staticobjects/liveevent/frostfell/dpo_snowglobe_shissar01', 60006), + (27488, 25453, 'staticobjects/liveevent/frostfell/holiday_pointsettia05', 60006), + (27489, 25454, 'creatures/mounts/reindeer_mount/reindeer_mount_ghost', 60006), + (27490, 25455, 'creatures/monsters/reindeer_base', 60006), + (27491, 25456, 'creatures/monsters/reindeer_tan', 60006), + (27492, 25457, 'creatures/monsters/reindeer_white', 60006), + (27493, 25458, 'staticobjects/liveevent/frostfell/dpo_candy_gold_sparkle_fx', 60006), + (27494, 25459, 'staticobjects/liveevent/frostfell/dpo_candy_peppermint_sparkle_fx', 60006), + (27495, 25460, 'staticobjects/liveevent/frostfell/dpo_candycane_redblk_sparkle_fx', 60006), + (27496, 25461, 'staticobjects/liveevent/frostfell/dpo_candycane_redwht_sparkle_fx', 60006), + (27497, 25462, 'creatures/mounts/pegasus_mount/pegasus_mount_ethernere', 60006), + (27498, 25463, 'playerstudio/houseitems/icedragon_carpet', 60006), + (27499, 25464, 'playerstudio/houseitems/ratonga_nutcracker', 60006), + (27500, 25465, 'playerstudio/houseitems/royal_sleigh', 60006), + (27501, 25466, 'playerstudio/houseitems/storybook_portal', 60006), + (27502, 25467, 'playerstudio/houseitems/winterberry_set', 60006), + (27503, 25468, 'playerstudio/houseitems/wc_bridge', 60006), + (27504, 25469, 'playerstudio/houseitems/wc_columnwall', 60006), + (27505, 25470, 'playerstudio/houseitems/wc_manor', 60006), + (27506, 25471, 'playerstudio/houseitems/wc_manor2', 60006), + (27507, 25472, 'playerstudio/houseitems/wc_manor3', 60006), + (27508, 25473, 'playerstudio/houseitems/wc_pillarcolumn', 60006), + (27509, 25474, 'playerstudio/houseitems/wc_roof', 60006), + (27510, 25475, 'playerstudio/houseitems/wc_stairs', 60006), + (27511, 25476, 'playerstudio/houseitems/wc_towerroof', 60006), + (27512, 25477, 'playerstudio/houseitems/wc_tower1', 60006), + (27513, 25478, 'playerstudio/houseitems/wc_tower2', 60006), + (27514, 25479, 'playerstudio/houseitems/wc_tallroof', 60006), + (27515, 25480, 'playerstudio/houseitems/wc_wall1', 60006), + (27516, 25481, 'playerstudio/houseitems/wc_wall2', 60006), + (27517, 25482, '_exp11/houseitems/graveyard_window_large', 60006), + (27518, 25483, '_exp11/houseitems/graveyard_window_medium', 60006), + (27519, 25484, '_exp11/houseitems/graveyard_window_small', 60006); +INSERT INTO `table_versions` (`name`,`version`,`download_version`) values ('appearances',1,0); +UPDATE `table_versions` SET `download_version`=1 WHERE `name`='appearances'; +DROP TABLE IF EXISTS `bot_appearance`; +CREATE TABLE `bot_appearance` ( +`id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT, +`bot_id` INT(10) UNSIGNED NOT NULL, +`signed_value` TINYINT(4) NOT NULL DEFAULT '0', +`type` VARCHAR(32) NOT NULL COLLATE 'latin1_general_ci', +`red` SMALLINT(6) NOT NULL DEFAULT '0', +`green` SMALLINT(6) NOT NULL DEFAULT '0', +`blue` SMALLINT(6) NOT NULL DEFAULT '0', +PRIMARY KEY (`id`), +UNIQUE INDEX `bot_id_type` (`bot_id`, `type`), +CONSTRAINT `FK_bot_id` FOREIGN KEY (`bot_id`) REFERENCES `bots` (`id`) ON UPDATE CASCADE ON DELETE CASCADE +) +COLLATE='latin1_general_ci' +ENGINE=InnoDB; + +INSERT INTO `table_versions` (`name`,`version`,`download_version`) values ('bot_appearance',73024,0); +DROP TABLE IF EXISTS `bot_equipment`; +CREATE TABLE `bot_equipment` ( +`id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT, +`bot_id` INT(10) UNSIGNED NOT NULL, +`slot` TINYINT(3) UNSIGNED NOT NULL, +`item_id` INT(11) UNSIGNED NOT NULL, +PRIMARY KEY (`id`), +UNIQUE INDEX `bot_id_slot` (`bot_id`, `slot`), +CONSTRAINT `FK__bots` FOREIGN KEY (`bot_id`) REFERENCES `bots` (`id`) ON UPDATE CASCADE ON DELETE CASCADE +) +COLLATE='latin1_general_ci' +ENGINE=InnoDB; +INSERT INTO `table_versions` (`name`,`version`,`download_version`) values ('bot_equipment',73025,0); +DROP TABLE IF EXISTS `bots`; +CREATE TABLE `bots` ( +`id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT, +`char_id` INT(10) UNSIGNED NOT NULL, +`bot_id` INT(10) UNSIGNED NOT NULL, +`name` VARCHAR(64) NOT NULL COLLATE 'latin1_general_ci', +`race` TINYINT(3) UNSIGNED NOT NULL DEFAULT '0', +`class` TINYINT(3) UNSIGNED NOT NULL DEFAULT '0', +`gender` TINYINT(3) UNSIGNED NOT NULL DEFAULT '0', +`model_type` SMALLINT(5) UNSIGNED NOT NULL DEFAULT '0', +`hair_type` SMALLINT(5) UNSIGNED NOT NULL DEFAULT '0', +`face_type` SMALLINT(5) UNSIGNED NOT NULL DEFAULT '0', +`wing_type` SMALLINT(5) UNSIGNED NOT NULL DEFAULT '0', +`chest_type` SMALLINT(5) UNSIGNED NOT NULL DEFAULT '0', +`legs_type` SMALLINT(5) UNSIGNED NOT NULL DEFAULT '0', +`soga_model_type` SMALLINT(5) UNSIGNED NOT NULL DEFAULT '0', +`soga_hair_type` SMALLINT(5) UNSIGNED NOT NULL DEFAULT '0', +`soga_face_type` SMALLINT(5) UNSIGNED NOT NULL DEFAULT '0', +PRIMARY KEY (`id`), +UNIQUE INDEX `char_id_bot_id` (`char_id`, `bot_id`), +CONSTRAINT `FK_char_id` FOREIGN KEY (`char_id`) REFERENCES `characters` (`id`) ON UPDATE CASCADE ON DELETE CASCADE +) +COLLATE='latin1_general_ci' +ENGINE=InnoDB; +INSERT INTO `table_versions` (`name`,`version`,`download_version`) values ('bots',73023,0); +DROP TABLE IF EXISTS `bugs`; +CREATE TABLE IF NOT EXISTS `bugs` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `account_id` int(10) unsigned NOT NULL DEFAULT '0', + `player` varchar(64) NOT NULL DEFAULT ' ', + `category` varchar(64) NOT NULL DEFAULT ' ', + `subcategory` varchar(64) NOT NULL DEFAULT ' ', + `causes_crash` varchar(64) NOT NULL DEFAULT ' ', + `reproducible` varchar(64) NOT NULL DEFAULT ' ', + `summary` varchar(128) NOT NULL DEFAULT ' ', + `description` text NOT NULL, + `version` varchar(32) NOT NULL DEFAULT ' ', + `spawn_name` varchar(64) NOT NULL DEFAULT 'N/A', + `spawn_id` int(10) unsigned NOT NULL DEFAULT '0', + `bug_datetime` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, + `zone_id` int(10) unsigned NOT NULL DEFAULT '0', + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +INSERT INTO `table_versions` (`name`,`version`,`download_version`) values ('bugs',1,0); +DROP TABLE IF EXISTS `channels`; +CREATE TABLE IF NOT EXISTS `channels` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `name` varchar(128) COLLATE latin1_general_ci NOT NULL, + `password` varchar(128) COLLATE latin1_general_ci DEFAULT NULL, + `level_restriction` mediumint(8) unsigned NOT NULL DEFAULT '0', + `classes` bigint(20) unsigned NOT NULL DEFAULT '0', + `races` bigint(20) unsigned NOT NULL DEFAULT '0', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_channels_name` (`name`) +) ENGINE=InnoDB AUTO_INCREMENT=66 DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci; +INSERT INTO `channels` (`id`, `name`, `password`, `level_restriction`, `classes`, `races`) VALUES + (1, 'EQ2Emu', '', 0, 0, 0), + (2, 'Newbie', '', 0, 0, 0), + (3, 'General', '', 1, 0, 0), + (11, 'High_Level', '', 50, 0, 0), + (12, 'Barbarian', '', 0, 0, 1), + (13, 'Dark Elf', '', 0, 0, 2), + (14, 'Dwarf', '', 0, 0, 4), + (15, 'Erudite', '', 0, 0, 8), + (16, 'Froglok', '', 0, 0, 16), + (17, 'Gnome', '', 0, 0, 32), + (18, 'Half Elf', '', 0, 0, 64), + (19, 'Halfling', '', 0, 0, 128), + (20, 'High Elf', '', 0, 0, 256), + (21, 'Human', '', 0, 0, 512), + (22, 'Iksar', '', 0, 0, 1024), + (23, 'Kerra', '', 0, 0, 2048), + (24, 'Ogre', '', 0, 0, 4096), + (25, 'Ratonga', '', 0, 0, 8192), + (26, 'Troll', '', 0, 0, 16384), + (27, 'Wood Elf', '', 0, 0, 32768), + (28, 'Fae', '', 0, 0, 65536), + (29, 'Arasai', '', 0, 0, 131072), + (30, 'Sarnak', '', 0, 0, 262144), + (31, 'Vampire', '', 0, 0, 524288), + (32, 'Guardian', '', 0, 8, 0), + (33, 'Berserker', '', 0, 16, 0), + (34, 'Monk', '', 0, 64, 0), + (35, 'Bruiser', '', 0, 128, 0), + (36, 'Shadowknight', '', 0, 512, 0), + (37, 'Paladin', '', 0, 1024, 0), + (38, 'Templar', '', 0, 8192, 0), + (39, 'Inquisitor', '', 0, 16384, 0), + (40, 'Warden', '', 0, 65536, 0), + (41, 'Fury', '', 0, 131072, 0), + (42, 'Mystic', '', 0, 524288, 0), + (43, 'Defiler', '', 0, 1048576, 0), + (44, 'Wizard', '', 0, 8388608, 0), + (45, 'Warlock', '', 0, 16777216, 0), + (46, 'Illusionist', '', 0, 67108864, 0), + (47, 'Coercer', '', 0, 134217728, 0), + (48, 'Conjuror', '', 0, 536870912, 0), + (49, 'Necromancer', '', 0, 1073741824, 0), + (50, 'Swashbuckler', '', 0, 8589934592, 0), + (51, 'Brigand', '', 0, 17179869184, 0), + (52, 'Troubador', '', 0, 68719476736, 0), + (53, 'Dirge', '', 0, 137438953472, 0), + (54, 'Ranger', '', 0, 549755813888, 0), + (55, 'Assasin', '', 0, 1099511627776, 0), + (56, 'Beastlord', '', 0, 4398046511104, 0), + (57, 'Channeler', '', 0, 17592186044416, 0), + (58, 'Auction', '', 0, 0, 0), + (59, 'Crafting', '', 0, 0, 0), + (60, 'Help', '', 0, 0, 0), + (61, 'Traders', '', 0, 0, 0), + (62, 'LFG', '', 0, 0, 0), + (63, 'Good', '', 0, 0, 0), + (64, 'Evil', '', 0, 0, 0), + (65, 'Neutral', '', 0, 0, 0); +INSERT INTO `table_versions` (`name`,`version`,`download_version`) values ('channels',1,0); +UPDATE `table_versions` SET `download_version`=1 WHERE `name`='channels'; +DROP TABLE IF EXISTS `char_colors`; +CREATE TABLE IF NOT EXISTS `char_colors` ( + `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT, + `char_id` int(10) unsigned NOT NULL, + `signed_value` tinyint(4) NOT NULL DEFAULT '0', + `type` varchar(32) NOT NULL, + `red` smallint(6) NOT NULL DEFAULT '0', + `green` smallint(6) NOT NULL DEFAULT '0', + `blue` smallint(6) NOT NULL DEFAULT '0', + PRIMARY KEY (`id`), + KEY `FK_char_colors` (`char_id`), + CONSTRAINT `FK_char_colors` FOREIGN KEY (`char_id`) REFERENCES `characters` (`id`) ON DELETE CASCADE ON UPDATE CASCADE +) ENGINE=InnoDB AUTO_INCREMENT=4466 DEFAULT CHARSET=utf8; +INSERT INTO `table_versions` (`name`,`version`,`download_version`) values ('char_colors',1,0); +DROP TABLE IF EXISTS `character_aa`; +CREATE TABLE `character_aa` ( + `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT, + `char_id` int(10) unsigned NOT NULL, + `template_id` smallint(5) unsigned NOT NULL, + `tab_id` tinyint(3) unsigned NOT NULL, + `aa_id` int(10) unsigned NOT NULL, + `order` smallint(5) unsigned NOT NULL, + `treeid` tinyint(3) unsigned NOT NULL, + PRIMARY KEY (`id`), + KEY `FX_char` (`char_id`), + CONSTRAINT `FX_char` FOREIGN KEY (`char_id`) REFERENCES `characters` (`id`) ON DELETE CASCADE ON UPDATE CASCADE +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +INSERT INTO `table_versions` (`name`,`version`,`download_version`) values ('character_aa',73039,0); +DROP TABLE IF EXISTS `character_aa_defaults`; +CREATE TABLE `character_aa_defaults` ( + `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT, + `class` int(10) unsigned NOT NULL, + `template_id` smallint(5) unsigned NOT NULL, + `tab_id` tinyint(3) unsigned NOT NULL, + `aa_id` int(10) unsigned NOT NULL, + `order` smallint(5) unsigned NOT NULL, + `treeid` tinyint(3) unsigned NOT NULL, + PRIMARY KEY (`id`) +) ENGINE=InnoDB AUTO_INCREMENT=115 DEFAULT CHARSET=utf8; +insert into `character_aa_defaults`(`id`,`class`,`template_id`,`tab_id`,`aa_id`,`order`,`treeid`) values +(1,23,4,0,1002739,1,10), +(2,23,4,0,2000674,2,10), +(3,23,4,0,2000674,3,10), +(4,23,4,0,2000674,4,10), +(5,23,4,0,2000674,5,10), +(6,23,4,0,2000674,6,10), +(7,23,4,0,2000674,7,10), +(8,23,4,0,2000674,8,10), +(9,23,4,0,2000674,9,10), +(10,23,4,0,2000731,10,10), +(11,23,4,0,2000731,11,10), +(12,23,4,0,2000731,12,10), +(13,23,4,0,2000731,13,10), +(14,23,4,0,1000193,14,10), +(15,23,4,0,1000193,15,10), +(16,23,4,0,1000193,16,10), +(17,23,4,0,1000193,17,10), +(18,23,4,0,1000193,18,10), +(19,23,4,0,1000193,19,10), +(20,23,4,0,1000193,20,10), +(21,23,4,0,1000193,21,10), +(22,23,4,0,1000193,22,10), +(23,23,4,0,1000193,23,10), +(24,23,4,0,1001056,24,10), +(25,23,4,0,2000674,25,10), +(26,23,4,0,2000674,26,10), +(27,23,4,0,2000674,27,10), +(28,23,4,0,2000674,28,10), +(29,23,4,0,1002509,29,10), +(30,23,4,0,1002509,30,10), +(31,23,4,0,1002509,31,10), +(32,23,4,0,1002509,32,10), +(33,23,4,0,1002509,33,10), +(34,23,4,0,1002509,34,10), +(35,23,4,0,1002509,35,10), +(36,23,4,0,1002509,36,10), +(37,23,4,0,1002605,37,10), +(38,23,4,0,1002605,38,10), +(39,23,4,0,1002605,39,10), +(40,23,4,0,1002605,40,10), +(41,23,4,0,1002605,41,10), +(42,23,4,0,1002605,42,10), +(43,23,4,0,1002605,43,10), +(44,23,4,0,1002605,44,10), +(45,23,4,0,1002605,45,10), +(46,23,4,0,1002605,46,10), +(47,23,4,0,1002607,47,10), +(48,23,4,0,2000674,48,10), +(49,23,4,0,2000674,49,10), +(50,23,4,0,2000731,50,10), +(51,23,4,0,2000731,51,10), +(52,23,4,0,2000731,52,10), +(53,23,4,0,2000731,53,10), +(54,23,4,0,1000938,54,31), +(55,23,4,0,1000938,55,31), +(56,23,4,0,1000938,56,31), +(57,23,4,0,1000938,57,31), +(58,23,4,0,1000938,58,31), +(59,23,4,0,1000938,59,31), +(60,23,4,0,1000938,60,31), +(61,23,4,0,1000938,61,31), +(62,23,4,0,1000938,62,31), +(63,23,4,0,1000938,63,31), +(64,23,4,0,1000902,64,31), +(65,23,4,0,1000902,65,31), +(66,23,4,0,1000902,66,31), +(67,23,4,0,1000902,67,31), +(68,23,4,0,1000902,68,31), +(69,23,4,0,1000895,69,31), +(70,23,4,0,1000895,70,31), +(71,23,4,0,1000895,71,31), +(72,23,4,0,1000895,72,31), +(73,23,4,0,1000895,73,31), +(74,23,4,0,1000895,74,31), +(75,23,4,0,1000856,75,31), +(76,23,4,0,1000856,76,31), +(77,23,4,0,1000856,77,31), +(78,23,4,0,1000856,78,31), +(79,23,4,0,1000856,79,31), +(80,23,4,0,2000731,80,31), +(81,23,4,0,2000731,81,31), +(82,23,4,0,2000731,82,31), +(83,23,4,0,2000731,83,31), +(84,23,4,0,2000731,84,31), +(85,23,4,0,2000731,85,31), +(86,23,4,0,2000731,86,31), +(87,23,4,0,2000731,87,31), +(88,23,4,0,2000731,88,31), +(89,23,4,0,2000731,89,31), +(90,23,4,0,2000731,90,31), +(91,23,4,0,2000731,91,31), +(92,23,4,0,2000731,92,31), +(93,23,4,0,2000731,93,31), +(94,23,4,0,2000731,94,31), +(95,23,4,0,2000731,95,31), +(96,23,4,0,2000731,96,31), +(97,23,4,0,2000731,97,31), +(98,23,4,0,2000731,98,31), +(99,23,4,0,2000731,99,31), +(100,23,4,0,2000731,100,31), +(101,23,4,0,2000731,101,31), +(102,23,4,0,2000731,102,31), +(103,23,4,0,2000731,103,31), +(104,23,4,0,2000731,104,31), +(105,23,4,0,2000731,105,31), +(106,23,4,0,2000731,106,31), +(107,23,4,0,2000731,107,31), +(108,23,4,0,2000731,108,31), +(109,23,4,0,2000731,109,31), +(110,23,4,0,2000731,110,31), +(111,23,4,0,2000731,111,31), +(112,23,4,0,2000731,112,31), +(113,23,4,0,2000731,113,31), +(114,0,4,0,2000731,114,31); +INSERT INTO `table_versions` (`name`,`version`,`download_version`) values ('character_aa_defaults',73040,0); +UPDATE `table_versions` SET `download_version`=1 WHERE `name`='character_aa_defaults'; +DROP TABLE IF EXISTS `character_achievements`; +CREATE TABLE IF NOT EXISTS `character_achievements` ( + `id` int(10) NOT NULL AUTO_INCREMENT, + `char_id` int(10) unsigned NOT NULL DEFAULT '0', + `achievement_id` int(10) unsigned NOT NULL DEFAULT '0', + `completed_date` int(10) unsigned NOT NULL DEFAULT '0', + PRIMARY KEY (`id`), + KEY `FK_character_achievements` (`char_id`), + CONSTRAINT `FK_character_achievements` FOREIGN KEY (`char_id`) REFERENCES `characters` (`id`) ON UPDATE CASCADE +) ENGINE=InnoDB DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci; +INSERT INTO `table_versions` (`name`,`version`,`download_version`) values ('character_achievements',1,0); +DROP TABLE IF EXISTS `character_achievements_items`; +CREATE TABLE IF NOT EXISTS `character_achievements_items` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `char_id` int(10) unsigned NOT NULL DEFAULT '0', + `achievement_id` int(10) unsigned NOT NULL DEFAULT '0', + `items` int(10) unsigned NOT NULL DEFAULT '0', + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci; +INSERT INTO `table_versions` (`name`,`version`,`download_version`) values ('character_achievements_items',1,0); +DROP TABLE IF EXISTS `character_buyback`; +CREATE TABLE IF NOT EXISTS `character_buyback` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `char_id` int(10) unsigned NOT NULL DEFAULT '0', + `item_id` int(10) unsigned NOT NULL DEFAULT '0', + `quantity` smallint(5) unsigned NOT NULL DEFAULT '1', + `price` int(10) unsigned NOT NULL DEFAULT '0', + PRIMARY KEY (`id`), + KEY `FK_character_buyback` (`char_id`), + CONSTRAINT `FK_character_buyback` FOREIGN KEY (`char_id`) REFERENCES `characters` (`id`) ON DELETE CASCADE ON UPDATE CASCADE +) ENGINE=InnoDB AUTO_INCREMENT=38 DEFAULT CHARSET=utf8; +INSERT INTO `table_versions` (`name`,`version`,`download_version`) values ('character_buyback',1,0); +DROP TABLE IF EXISTS `character_collection_items`; +CREATE TABLE IF NOT EXISTS `character_collection_items` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `char_id` int(10) unsigned NOT NULL, + `collection_id` int(10) unsigned NOT NULL, + `collection_item_id` int(10) unsigned NOT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `uk_charactercollectionitems` (`char_id`,`collection_id`,`collection_item_id`), + KEY `fk_charactercollectionitems_collectionid` (`collection_id`), + KEY `fk_charactercollectionitems_collectionitemid` (`collection_item_id`), + CONSTRAINT `FK_char_col_items` FOREIGN KEY (`char_id`) REFERENCES `characters` (`id`) ON DELETE CASCADE ON UPDATE CASCADE, + CONSTRAINT `fk_charactercollectionitems_charid` FOREIGN KEY (`char_id`) REFERENCES `characters` (`id`) ON DELETE CASCADE ON UPDATE CASCADE, + CONSTRAINT `fk_charactercollectionitems_collectionid` FOREIGN KEY (`collection_id`) REFERENCES `collections` (`id`) ON DELETE CASCADE ON UPDATE CASCADE, + CONSTRAINT `fk_charactercollectionitems_collectionitemid` FOREIGN KEY (`collection_item_id`) REFERENCES `items` (`id`) ON DELETE CASCADE ON UPDATE CASCADE +) ENGINE=InnoDB AUTO_INCREMENT=28 DEFAULT CHARSET=utf8; +INSERT INTO `table_versions` (`name`,`version`,`download_version`) values ('character_collection_items',1,0); +DROP TABLE IF EXISTS `character_collections`; +CREATE TABLE IF NOT EXISTS `character_collections` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `char_id` int(10) unsigned NOT NULL, + `collection_id` int(10) unsigned NOT NULL, + `completed` tinyint(1) unsigned NOT NULL DEFAULT '0', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_charactercollections` (`char_id`,`collection_id`), + KEY `fk_charactercollections_collectionid` (`collection_id`), + CONSTRAINT `FK_character_collections` FOREIGN KEY (`char_id`) REFERENCES `characters` (`id`) ON DELETE CASCADE ON UPDATE CASCADE, + CONSTRAINT `fk_charactercollections_charid` FOREIGN KEY (`char_id`) REFERENCES `characters` (`id`) ON DELETE CASCADE ON UPDATE CASCADE, + CONSTRAINT `fk_charactercollections_collectionid` FOREIGN KEY (`collection_id`) REFERENCES `collections` (`id`) ON DELETE CASCADE ON UPDATE CASCADE +) ENGINE=InnoDB AUTO_INCREMENT=15 DEFAULT CHARSET=utf8; +INSERT INTO `table_versions` (`name`,`version`,`download_version`) values ('character_collections',1,0); +DROP TABLE IF EXISTS `character_details`; +CREATE TABLE IF NOT EXISTS `character_details` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `char_id` int(10) unsigned NOT NULL DEFAULT '0', + `hp` int(10) unsigned NOT NULL DEFAULT '0', + `power` int(10) unsigned NOT NULL DEFAULT '0', + `savagery` int(10) unsigned NOT NULL DEFAULT '0', + `dissonance` int(10) unsigned NOT NULL DEFAULT '0', + `max_concentration` tinyint(3) unsigned NOT NULL DEFAULT '0', + `attack` int(10) unsigned NOT NULL DEFAULT '0', + `mitigation` smallint(5) unsigned NOT NULL DEFAULT '0', + `avoidance` smallint(5) unsigned NOT NULL DEFAULT '0', + `parry` smallint(5) unsigned NOT NULL DEFAULT '0', + `deflection` smallint(5) unsigned NOT NULL DEFAULT '0', + `block` smallint(5) unsigned NOT NULL DEFAULT '0', + `str` smallint(5) unsigned NOT NULL DEFAULT '0', + `sta` smallint(5) unsigned NOT NULL DEFAULT '0', + `agi` smallint(5) unsigned NOT NULL DEFAULT '0', + `wis` smallint(5) unsigned NOT NULL DEFAULT '0', + `intel` smallint(5) unsigned NOT NULL DEFAULT '0', + `heat` smallint(5) unsigned NOT NULL DEFAULT '0', + `cold` smallint(5) unsigned NOT NULL DEFAULT '0', + `magic` smallint(5) unsigned NOT NULL DEFAULT '0', + `mental` smallint(5) unsigned NOT NULL DEFAULT '0', + `divine` smallint(5) unsigned NOT NULL DEFAULT '0', + `disease` smallint(5) unsigned NOT NULL DEFAULT '0', + `poison` smallint(5) unsigned NOT NULL DEFAULT '0', + `elemental` smallint(5) unsigned NOT NULL DEFAULT '0', + `arcane` smallint(5) unsigned NOT NULL DEFAULT '0', + `noxious` smallint(5) unsigned NOT NULL DEFAULT '0', + `coin_copper` int(10) unsigned NOT NULL DEFAULT '0', + `coin_silver` int(10) unsigned NOT NULL DEFAULT '0', + `coin_gold` int(10) unsigned NOT NULL DEFAULT '0', + `coin_plat` int(10) unsigned NOT NULL DEFAULT '0', + `pet_name` varchar(32) NOT NULL DEFAULT 'No Pet', + `status_points` int(10) unsigned NOT NULL DEFAULT '0', + `max_power` int(10) unsigned NOT NULL DEFAULT '0', + `max_hp` int(10) unsigned NOT NULL DEFAULT '0', + `max_savagery` int(10) unsigned NOT NULL DEFAULT '0', + `max_dissonance` int(10) unsigned NOT NULL DEFAULT '0', + `xp` int(10) unsigned NOT NULL DEFAULT '0', + `xp_needed` int(10) unsigned NOT NULL DEFAULT '0', + `xp_debt` int(10) unsigned NOT NULL DEFAULT '0', + `xp_vitality` float unsigned NOT NULL DEFAULT '0', + `tradeskill_xp` int(10) unsigned NOT NULL DEFAULT '0', + `tradeskill_xp_needed` int(10) unsigned NOT NULL DEFAULT '0', + `tradeskill_xp_debt` int(10) unsigned NOT NULL DEFAULT '0', + `tradeskill_xp_vitality` float unsigned NOT NULL DEFAULT '0', + `bank_copper` int(10) unsigned NOT NULL DEFAULT '0', + `bank_silver` int(10) unsigned NOT NULL DEFAULT '0', + `bank_gold` int(10) unsigned NOT NULL DEFAULT '0', + `bank_plat` int(10) unsigned NOT NULL DEFAULT '0', + `bind_zone_id` int(10) unsigned NOT NULL DEFAULT '0', + `bind_x` float NOT NULL DEFAULT '0', + `bind_y` float NOT NULL DEFAULT '0', + `bind_z` float NOT NULL DEFAULT '0', + `bind_heading` float unsigned NOT NULL DEFAULT '0', + `house_zone_id` int(10) unsigned NOT NULL DEFAULT '0', + `combat_voice` smallint(5) unsigned NOT NULL DEFAULT '52', + `emote_voice` smallint(5) unsigned NOT NULL DEFAULT '1060', + `biography` varchar(512) NOT NULL DEFAULT '', + `flags` int(10) unsigned NOT NULL DEFAULT '301465665', + `flags2` int(10) unsigned NOT NULL DEFAULT '40', + `prefix_title` smallint(5) NOT NULL DEFAULT '-1', + `suffix_title` smallint(5) NOT NULL DEFAULT '-1', + `current_language` smallint(5) NOT NULL DEFAULT '0', + `last_name` varchar(64) NOT NULL DEFAULT '', + `assigned_aa` smallint(5) NOT NULL DEFAULT '0', + `unassigned_aa` smallint(5) NOT NULL DEFAULT '0', + `tradeskill_aa` smallint(5) NOT NULL DEFAULT '0', + `unassigned_tradeskill_aa` smallint(5) NOT NULL DEFAULT '0', + `prestige_aa` smallint(5) NOT NULL DEFAULT '0', + `unassigned_prestige_aa` smallint(5) NOT NULL DEFAULT '0', + `tradeskill_prestige_aa` smallint(5) NOT NULL DEFAULT '0', + `unassigned_tradeskill_prestige_aa` smallint(5) NOT NULL DEFAULT '0', + PRIMARY KEY (`id`), + UNIQUE KEY `CharIDX` (`char_id`), + CONSTRAINT `FK_character_details` FOREIGN KEY (`char_id`) REFERENCES `characters` (`id`) ON DELETE CASCADE ON UPDATE CASCADE +) ENGINE=InnoDB AUTO_INCREMENT=106 DEFAULT CHARSET=utf8; +INSERT INTO `table_versions` (`name`,`version`,`download_version`) values ('character_details',1,0); +DROP TABLE IF EXISTS `character_factions`; +CREATE TABLE IF NOT EXISTS `character_factions` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `char_id` int(10) unsigned NOT NULL DEFAULT '0', + `faction_id` int(10) unsigned NOT NULL DEFAULT '0', + `faction_level` mediumint(9) NOT NULL DEFAULT '0', + PRIMARY KEY (`id`), + UNIQUE KEY `NewIndex` (`char_id`,`faction_id`), + KEY `FK_factions` (`faction_id`), + CONSTRAINT `FK_character_factions` FOREIGN KEY (`char_id`) REFERENCES `characters` (`id`) ON DELETE CASCADE ON UPDATE CASCADE, + CONSTRAINT `FK_factions` FOREIGN KEY (`faction_id`) REFERENCES `factions` (`id`) ON DELETE CASCADE ON UPDATE CASCADE +) ENGINE=InnoDB AUTO_INCREMENT=52391 DEFAULT CHARSET=utf8; +INSERT INTO `table_versions` (`name`,`version`,`download_version`) values ('character_factions',1,0); +DROP TABLE IF EXISTS `character_history`; +CREATE TABLE IF NOT EXISTS `character_history` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `char_id` int(10) unsigned NOT NULL DEFAULT '0', + `type` enum('None','Death','Discovery','XP') COLLATE latin1_general_ci NOT NULL DEFAULT 'None', + `subtype` enum('None','Adventure','Tradeskill','Quest','AA','Item','Location') COLLATE latin1_general_ci NOT NULL DEFAULT 'None', + `value` int(10) unsigned NOT NULL DEFAULT '0', + `value2` int(10) unsigned NOT NULL DEFAULT '0', + `location` varchar(200) COLLATE latin1_general_ci DEFAULT '', + `event_id` int(10) unsigned NOT NULL DEFAULT '0', + `event_date` int(10) unsigned NOT NULL DEFAULT '0', + PRIMARY KEY (`id`), + UNIQUE KEY `char_id` (`char_id`,`type`,`subtype`,`value`), + KEY `CharHistoryIDX` (`char_id`,`type`,`subtype`), + CONSTRAINT `FK_character_history` FOREIGN KEY (`char_id`) REFERENCES `characters` (`id`) ON DELETE CASCADE ON UPDATE CASCADE +) ENGINE=InnoDB AUTO_INCREMENT=91924 DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci; +INSERT INTO `table_versions` (`name`,`version`,`download_version`) values ('character_history',1,0); +DROP TABLE IF EXISTS `character_houses`; +CREATE TABLE IF NOT EXISTS `character_houses` ( + `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT, + `char_id` int(10) unsigned NOT NULL DEFAULT '0', + `house_id` int(10) unsigned NOT NULL DEFAULT '0', + `instance_id` int(10) unsigned NOT NULL DEFAULT '0', + `upkeep_due` int(10) unsigned NOT NULL DEFAULT '0', + `escrow_coins` bigint(20) unsigned NOT NULL DEFAULT '0', + `escrow_status` int(10) unsigned NOT NULL DEFAULT '0', + PRIMARY KEY (`id`), + KEY `FK_char` (`char_id`), + CONSTRAINT `FK_char` FOREIGN KEY (`char_id`) REFERENCES `characters` (`id`) ON DELETE CASCADE ON UPDATE CASCADE +) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci; +INSERT INTO `table_versions` (`name`,`version`,`download_version`) values ('character_houses',1,0); +DROP TABLE IF EXISTS `character_instances`; +CREATE TABLE IF NOT EXISTS `character_instances` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `char_id` int(10) unsigned NOT NULL DEFAULT '0', + `instance_id` int(10) unsigned NOT NULL DEFAULT '0', + `instance_zone_name` varchar(64) COLLATE latin1_general_ci NOT NULL, + `instance_type` tinyint(3) unsigned NOT NULL DEFAULT '0', + `last_success_timestamp` int(10) unsigned NOT NULL DEFAULT '0', + `last_failure_timestamp` int(10) unsigned NOT NULL DEFAULT '0', + `success_lockout_time` int(10) unsigned NOT NULL DEFAULT '0', + `failure_lockout_time` int(10) unsigned NOT NULL DEFAULT '0', + PRIMARY KEY (`id`), + KEY `CharacterIDX` (`char_id`), + KEY `InstanceIDX` (`instance_zone_name`) +) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci; +INSERT INTO `table_versions` (`name`,`version`,`download_version`) values ('character_instances',1,0); +DROP TABLE IF EXISTS `character_items`; +CREATE TABLE IF NOT EXISTS `character_items` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `type` enum('EQUIPPED','NOT-EQUIPPED') NOT NULL DEFAULT 'NOT-EQUIPPED', + `account_id` int(10) unsigned NOT NULL DEFAULT '0', + `char_id` int(10) unsigned NOT NULL DEFAULT '0', + `bag_id` int(11) NOT NULL DEFAULT '0', + `slot` tinyint(3) unsigned NOT NULL DEFAULT '0', + `item_id` int(10) unsigned NOT NULL DEFAULT '0', + `creator` varchar(64) NOT NULL DEFAULT '', + `condition_` tinyint(3) unsigned NOT NULL DEFAULT '100', + `attuned` tinyint(3) unsigned NOT NULL DEFAULT '0', + `count` smallint(5) unsigned NOT NULL DEFAULT '1', + `max_sell_value` int(10) unsigned NOT NULL DEFAULT '0', + `login_checksum` int(10) unsigned NOT NULL DEFAULT '0', + PRIMARY KEY (`id`), + KEY `FK_items` (`item_id`), + KEY `NewIndex` (`char_id`,`type`,`bag_id`,`slot`), + CONSTRAINT `FK_character_items` FOREIGN KEY (`char_id`) REFERENCES `characters` (`id`) ON DELETE CASCADE ON UPDATE CASCADE, + CONSTRAINT `FK_items` FOREIGN KEY (`item_id`) REFERENCES `items` (`id`) ON DELETE CASCADE ON UPDATE CASCADE +) ENGINE=InnoDB AUTO_INCREMENT=39757 DEFAULT CHARSET=utf8; +ALTER TABLE character_items + CHANGE COLUMN type type ENUM('EQUIPPED','NOT-EQUIPPED','APPEARANCE','DELETED') NOT NULL DEFAULT 'NOT-EQUIPPED', + CHANGE COLUMN creator creator VARCHAR(64) NOT NULL DEFAULT '', + ADD COLUMN adorn0 INT(10) UNSIGNED NOT NULL DEFAULT 0 AFTER login_checksum, + ADD COLUMN adorn1 INT(10) UNSIGNED NOT NULL DEFAULT 0 AFTER adorn0, + ADD COLUMN adorn2 INT(10) UNSIGNED NOT NULL DEFAULT 0 AFTER adorn1, + ADD COLUMN adorn1_time INT(10) UNSIGNED NOT NULL DEFAULT 0 AFTER adorn2, + ADD COLUMN adorn3 INT(10) UNSIGNED NOT NULL DEFAULT 0 AFTER adorn1_time, + ADD COLUMN adorn4 INT(10) UNSIGNED NOT NULL DEFAULT 0 AFTER adorn3, + ADD COLUMN adorn5 INT(10) UNSIGNED NOT NULL DEFAULT 0 AFTER adorn4, + ADD COLUMN adorn6 INT(10) UNSIGNED NOT NULL DEFAULT 0 AFTER adorn5, + ADD COLUMN adorn7 INT(10) UNSIGNED NOT NULL DEFAULT 0 AFTER adorn6, + ADD COLUMN adorn8 INT(10) UNSIGNED NOT NULL DEFAULT 0 AFTER adorn7, + ADD COLUMN adorn9 INT(10) UNSIGNED NOT NULL DEFAULT 0 AFTER adorn8, + ADD COLUMN adorn10 INT(10) UNSIGNED NOT NULL DEFAULT 0 AFTER adorn9, + CHARACTER SET latin1, + COLLATE latin1_swedish_ci; + +ALTER TABLE character_items + DROP INDEX NewIndex, + ADD UNIQUE INDEX NewIndex (char_id, type, bag_id, slot); +INSERT INTO `table_versions` (`name`,`version`,`download_version`) values ('character_items',73022,0); +DROP TABLE IF EXISTS `character_languages`; +CREATE TABLE IF NOT EXISTS `character_languages` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `char_id` int(10) unsigned NOT NULL DEFAULT '0', + `language_id` int(10) unsigned NOT NULL DEFAULT '0', + PRIMARY KEY (`id`), + KEY `FK_character_languages` (`char_id`), + CONSTRAINT `character_languages_ibfk_1` FOREIGN KEY (`char_id`) REFERENCES `characters` (`id`) ON UPDATE CASCADE +) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci; +INSERT INTO `table_versions` (`name`,`version`,`download_version`) values ('character_languages',1,0); +DROP TABLE IF EXISTS `character_lua_history`; +CREATE TABLE IF NOT EXISTS `character_lua_history` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `char_id` int(10) unsigned NOT NULL DEFAULT '0', + `event_id` int(10) unsigned NOT NULL DEFAULT '0', + `value` int(10) unsigned NOT NULL DEFAULT '0', + `value2` int(10) unsigned NOT NULL DEFAULT '0', + PRIMARY KEY (`id`), + UNIQUE KEY `Characte Event` (`char_id`,`event_id`) +) ENGINE=InnoDB DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci; +INSERT INTO `table_versions` (`name`,`version`,`download_version`) values ('character_lua_history',1,0); +DROP TABLE IF EXISTS `character_macros`; +CREATE TABLE IF NOT EXISTS `character_macros` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `char_id` int(10) unsigned NOT NULL DEFAULT '0', + `macro_number` tinyint(3) unsigned NOT NULL DEFAULT '0', + `macro_icon` smallint(5) unsigned NOT NULL DEFAULT '0', + `macro_name` varchar(64) DEFAULT NULL, + `macro_text` text, + PRIMARY KEY (`id`), + KEY `FK_character_macros` (`char_id`), + CONSTRAINT `FK_character_macros` FOREIGN KEY (`char_id`) REFERENCES `characters` (`id`) ON DELETE CASCADE ON UPDATE CASCADE +) ENGINE=InnoDB AUTO_INCREMENT=185 DEFAULT CHARSET=utf8; +INSERT INTO `table_versions` (`name`,`version`,`download_version`) values ('character_macros',1,0); +DROP TABLE IF EXISTS `character_mail`; +CREATE TABLE IF NOT EXISTS `character_mail` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `player_to_id` int(10) unsigned NOT NULL DEFAULT '0', + `player_from` varchar(64) CHARACTER SET latin1 COLLATE latin1_general_ci NOT NULL DEFAULT '', + `subject` varchar(255) CHARACTER SET latin1 COLLATE latin1_general_ci NOT NULL DEFAULT '', + `mail_body` text CHARACTER SET latin1 COLLATE latin1_general_ci, + `already_read` tinyint(1) unsigned NOT NULL DEFAULT '0', + `mail_type` tinyint(3) unsigned NOT NULL DEFAULT '0', + `coin_copper` int(10) unsigned NOT NULL DEFAULT '0', + `coin_silver` int(10) unsigned NOT NULL DEFAULT '0', + `coin_gold` int(10) unsigned NOT NULL DEFAULT '0', + `coin_plat` int(10) unsigned NOT NULL DEFAULT '0', + `stack` smallint(5) unsigned NOT NULL DEFAULT '0', + `postage_cost` int(10) unsigned NOT NULL DEFAULT '0', + `attachment_cost` int(10) unsigned NOT NULL DEFAULT '0', + `char_item_id` int(10) unsigned NOT NULL DEFAULT '0', + `time_sent` int(10) unsigned NOT NULL DEFAULT '0', + `expire_time` int(10) unsigned NOT NULL DEFAULT '0', + PRIMARY KEY (`id`), + KEY `FK_character_mail` (`player_to_id`), + CONSTRAINT `FK_character_mail` FOREIGN KEY (`player_to_id`) REFERENCES `characters` (`id`) ON DELETE CASCADE ON UPDATE CASCADE +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +INSERT INTO `table_versions` (`name`,`version`,`download_version`) values ('character_mail',1,0); +DROP TABLE IF EXISTS `character_pictures`; +CREATE TABLE IF NOT EXISTS `character_pictures` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `char_id` int(10) unsigned NOT NULL DEFAULT '0', + `pic_type` tinyint(3) unsigned NOT NULL DEFAULT '0', + `picture` mediumtext COLLATE latin1_general_ci NOT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `character_pic_id` (`char_id`,`pic_type`) +) ENGINE=InnoDB AUTO_INCREMENT=76 DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci; +INSERT INTO `table_versions` (`name`,`version`,`download_version`) values ('character_pictures',1,0); +DROP TABLE IF EXISTS `character_quest_progress`; +CREATE TABLE IF NOT EXISTS `character_quest_progress` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `char_id` int(10) unsigned NOT NULL DEFAULT '0', + `quest_id` int(10) unsigned NOT NULL DEFAULT '0', + `step_id` int(10) unsigned NOT NULL DEFAULT '0', + `progress` int(10) unsigned NOT NULL DEFAULT '0', + PRIMARY KEY (`id`), + UNIQUE KEY `CharQuestStepIDX` (`char_id`,`quest_id`,`step_id`), + KEY `FK_quest_id` (`quest_id`), + CONSTRAINT `FK_character_quest_progress` FOREIGN KEY (`char_id`) REFERENCES `characters` (`id`) ON DELETE CASCADE ON UPDATE CASCADE, + CONSTRAINT `FK_quest_id` FOREIGN KEY (`quest_id`) REFERENCES `quests` (`quest_id`) ON DELETE CASCADE ON UPDATE CASCADE +) ENGINE=InnoDB AUTO_INCREMENT=233 DEFAULT CHARSET=utf8; +INSERT INTO `table_versions` (`name`,`version`,`download_version`) values ('character_quest_progress',1,0); +DROP TABLE IF EXISTS `character_quests`; +CREATE TABLE IF NOT EXISTS `character_quests` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `char_id` int(10) unsigned NOT NULL DEFAULT '0', + `quest_id` int(10) unsigned NOT NULL DEFAULT '0', + `quest_giver` int(10) unsigned NOT NULL DEFAULT '0', + `given_date` datetime NOT NULL, + `completed_date` datetime DEFAULT NULL, + `current_quest` tinyint(3) unsigned NOT NULL DEFAULT '0', + `tracked` tinyint(3) unsigned NOT NULL DEFAULT '0', + `quest_flags` int(10) unsigned NOT NULL DEFAULT '0', + `hidden` tinyint(3) unsigned NOT NULL DEFAULT '0', + `complete_count` smallint(5) unsigned NOT NULL DEFAULT '0', + PRIMARY KEY (`id`), + UNIQUE KEY `CharQuestIDX` (`char_id`,`quest_id`), + KEY `FK_quest_quests` (`quest_id`), + CONSTRAINT `FK_character_quests` FOREIGN KEY (`char_id`) REFERENCES `characters` (`id`) ON DELETE CASCADE ON UPDATE CASCADE, + CONSTRAINT `FK_quest_quests` FOREIGN KEY (`quest_id`) REFERENCES `quests` (`quest_id`) ON DELETE CASCADE ON UPDATE CASCADE +) ENGINE=InnoDB AUTO_INCREMENT=209 DEFAULT CHARSET=utf8; +INSERT INTO `table_versions` (`name`,`version`,`download_version`) values ('character_quests',1,0); +DROP TABLE IF EXISTS `character_recipe_books`; +CREATE TABLE IF NOT EXISTS `character_recipe_books` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `char_id` int(10) unsigned NOT NULL DEFAULT '0', + `recipebook_id` int(10) unsigned NOT NULL DEFAULT '0', + PRIMARY KEY (`id`), + KEY `fk_characterrecipebook_charid` (`char_id`), + KEY `fk_characterrecipebook_recipebookid` (`recipebook_id`) +) ENGINE=InnoDB AUTO_INCREMENT=25 DEFAULT CHARSET=latin1; +INSERT INTO `table_versions` (`name`,`version`,`download_version`) values ('character_recipe_books',1,0); +DROP TABLE IF EXISTS `character_recipes`; +CREATE TABLE IF NOT EXISTS `character_recipes` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `char_id` int(10) unsigned NOT NULL DEFAULT '0', + `recipe_id` int(10) unsigned NOT NULL DEFAULT '0', + `highest_stage` tinyint(3) unsigned NOT NULL DEFAULT '0', + PRIMARY KEY (`id`), + KEY `fk_characterrecipes_charid` (`char_id`), + KEY `fk_characterrecipes_recipeid` (`recipe_id`), + CONSTRAINT `fk_characterrecipes_charid` FOREIGN KEY (`char_id`) REFERENCES `characters` (`id`) ON DELETE CASCADE ON UPDATE CASCADE, + CONSTRAINT `fk_characterrecipes_recipeid` FOREIGN KEY (`recipe_id`) REFERENCES `recipes` (`recipe_id`) ON DELETE CASCADE ON UPDATE CASCADE +) ENGINE=InnoDB AUTO_INCREMENT=1033 DEFAULT CHARSET=latin1; +INSERT INTO `table_versions` (`name`,`version`,`download_version`) values ('character_recipes',1,0); +DROP TABLE IF EXISTS `character_skillbar`; +CREATE TABLE IF NOT EXISTS `character_skillbar` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `char_id` int(10) unsigned NOT NULL DEFAULT '0', + `type` tinyint(3) unsigned NOT NULL DEFAULT '1', + `hotbar` int(10) unsigned NOT NULL DEFAULT '0', + `spell_id` int(10) unsigned NOT NULL DEFAULT '0', + `tier` tinyint(3) unsigned NOT NULL DEFAULT '1', + `slot` int(10) unsigned NOT NULL DEFAULT '0', + `text_val` varchar(255) NOT NULL DEFAULT 'Unused', + PRIMARY KEY (`id`), + UNIQUE KEY `NewIndex` (`hotbar`,`char_id`,`slot`), + KEY `FK_character_skillbar` (`char_id`), + CONSTRAINT `FK_character_skillbar` FOREIGN KEY (`char_id`) REFERENCES `characters` (`id`) ON DELETE CASCADE ON UPDATE CASCADE +) ENGINE=InnoDB AUTO_INCREMENT=810 DEFAULT CHARSET=utf8; +INSERT INTO `table_versions` (`name`,`version`,`download_version`) values ('character_skillbar',1,0); +DROP TABLE IF EXISTS `character_skills`; +CREATE TABLE IF NOT EXISTS `character_skills` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `char_id` int(10) unsigned NOT NULL DEFAULT '0', + `skill_id` int(10) unsigned NOT NULL DEFAULT '0', + `current_val` smallint(5) unsigned NOT NULL DEFAULT '1', + `max_val` smallint(5) unsigned NOT NULL DEFAULT '1', + `progress` int(10) unsigned NOT NULL DEFAULT '0', + PRIMARY KEY (`id`), + UNIQUE KEY `CharSkillIDX` (`char_id`,`skill_id`), + KEY `FK_skills_character` (`skill_id`), + CONSTRAINT `FK_character_skills` FOREIGN KEY (`char_id`) REFERENCES `characters` (`id`) ON DELETE CASCADE ON UPDATE CASCADE, + CONSTRAINT `FK_skills_character` FOREIGN KEY (`skill_id`) REFERENCES `skills` (`id`) ON DELETE CASCADE ON UPDATE CASCADE +) ENGINE=InnoDB AUTO_INCREMENT=17564 DEFAULT CHARSET=utf8; +INSERT INTO `table_versions` (`name`,`version`,`download_version`) values ('character_skills',1,0); +DROP TABLE IF EXISTS `character_social`; +CREATE TABLE IF NOT EXISTS `character_social` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `char_id` int(10) unsigned NOT NULL DEFAULT '0', + `name` varchar(64) NOT NULL DEFAULT '', + `type` enum('FRIEND','IGNORE') NOT NULL DEFAULT 'FRIEND', + PRIMARY KEY (`id`), + UNIQUE KEY `CharNameIdx` (`char_id`,`name`,`type`), + CONSTRAINT `FK_character_social` FOREIGN KEY (`char_id`) REFERENCES `characters` (`id`) ON DELETE CASCADE ON UPDATE CASCADE +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +INSERT INTO `table_versions` (`name`,`version`,`download_version`) values ('character_social',1,0); +DROP TABLE IF EXISTS `character_spells`; +CREATE TABLE IF NOT EXISTS `character_spells` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `char_id` int(10) unsigned NOT NULL DEFAULT '0', + `spell_id` int(10) unsigned NOT NULL DEFAULT '0', + `tier` tinyint(3) unsigned NOT NULL DEFAULT '1', + `knowledge_slot` mediumint(9) NOT NULL DEFAULT '-1', + PRIMARY KEY (`id`), + UNIQUE KEY `NewIndex` (`char_id`,`spell_id`,`tier`), + KEY `FK_char_spells` (`spell_id`), + CONSTRAINT `FK_char_spells` FOREIGN KEY (`spell_id`) REFERENCES `spells` (`id`) ON DELETE CASCADE ON UPDATE CASCADE, + CONSTRAINT `FK_character_spells` FOREIGN KEY (`char_id`) REFERENCES `characters` (`id`) ON DELETE CASCADE ON UPDATE CASCADE +) ENGINE=InnoDB AUTO_INCREMENT=57554 DEFAULT CHARSET=utf8; +INSERT INTO `table_versions` (`name`,`version`,`download_version`) values ('character_spells',1,0); +DROP TABLE IF EXISTS `character_titles`; +CREATE TABLE IF NOT EXISTS `character_titles` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `char_id` int(10) unsigned NOT NULL DEFAULT '0', + `title_id` int(10) unsigned NOT NULL DEFAULT '0', + PRIMARY KEY (`id`), + KEY `FK_character_titles` (`char_id`), + CONSTRAINT `FK_character_titles` FOREIGN KEY (`char_id`) REFERENCES `characters` (`id`) ON DELETE CASCADE ON UPDATE CASCADE +) ENGINE=InnoDB AUTO_INCREMENT=81 DEFAULT CHARSET=utf8; +INSERT INTO `table_versions` (`name`,`version`,`download_version`) values ('character_titles',1,0); +DROP TABLE IF EXISTS `characters`; +CREATE TABLE IF NOT EXISTS `characters` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `account_id` int(10) unsigned NOT NULL DEFAULT '0', + `server_id` int(10) unsigned NOT NULL DEFAULT '0', + `name` varchar(64) NOT NULL DEFAULT '', + `race` tinyint(3) unsigned NOT NULL DEFAULT '0', + `class` tinyint(3) unsigned NOT NULL DEFAULT '0', + `gender` tinyint(3) unsigned NOT NULL DEFAULT '0', + `deity` tinyint(3) unsigned NOT NULL DEFAULT '0', + `body_size` float NOT NULL DEFAULT '0', + `body_age` float NOT NULL DEFAULT '0', + `current_zone_id` int(11) unsigned NOT NULL DEFAULT '253', + `level` int(10) unsigned NOT NULL DEFAULT '1', + `tradeskill_class` tinyint(3) unsigned NOT NULL DEFAULT '0', + `tradeskill_level` int(10) unsigned NOT NULL DEFAULT '1', + `soga_wing_type` mediumint(8) unsigned NOT NULL, + `soga_chest_type` mediumint(8) unsigned NOT NULL, + `soga_legs_type` mediumint(8) unsigned NOT NULL, + `soga_hair_type` mediumint(8) unsigned NOT NULL, + `soga_facial_hair_type` mediumint(8) unsigned NOT NULL DEFAULT '0', + `soga_model_type` mediumint(8) unsigned NOT NULL, + `legs_type` mediumint(8) unsigned NOT NULL, + `chest_type` mediumint(8) unsigned NOT NULL, + `wing_type` mediumint(8) unsigned NOT NULL, + `hair_type` mediumint(8) unsigned NOT NULL, + `facial_hair_type` mediumint(8) unsigned NOT NULL DEFAULT '0', + `model_type` mediumint(8) unsigned NOT NULL, + `x` float NOT NULL DEFAULT '0', + `y` float NOT NULL DEFAULT '0', + `z` float NOT NULL DEFAULT '0', + `heading` float NOT NULL DEFAULT '0', + `instance_id` int(10) unsigned NOT NULL DEFAULT '0', + `starting_city` tinyint(3) unsigned NOT NULL DEFAULT '1', + `deleted` tinyint(3) unsigned NOT NULL DEFAULT '0', + `unix_timestamp` int(10) NOT NULL DEFAULT '0', + `created_date` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00', + `last_played` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, + `last_saved` int(10) unsigned NOT NULL DEFAULT '0', + `admin_status` int(10) NOT NULL DEFAULT '0', + `is_online` tinyint(1) unsigned NOT NULL DEFAULT '0', + PRIMARY KEY (`id`), + KEY `CharIDX` (`name`), + KEY `CharZoneIDX` (`current_zone_id`), + KEY `CharAcctIDX` (`account_id`), + CONSTRAINT `FK_characters` FOREIGN KEY (`current_zone_id`) REFERENCES `zones` (`id`) ON DELETE CASCADE ON UPDATE CASCADE +) ENGINE=InnoDB AUTO_INCREMENT=107 DEFAULT CHARSET=utf8; +INSERT INTO `table_versions` (`name`,`version`,`download_version`) values ('characters',1,0); +DROP TABLE IF EXISTS `collection_details`; +CREATE TABLE IF NOT EXISTS `collection_details` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `collection_id` int(10) unsigned NOT NULL DEFAULT '0', + `item_id` int(11) NOT NULL DEFAULT '0', + `item_index` tinyint(3) unsigned NOT NULL DEFAULT '0', + PRIMARY KEY (`id`), + KEY `FK_collection_details` (`collection_id`), + CONSTRAINT `FK_collection_details` FOREIGN KEY (`collection_id`) REFERENCES `collections` (`id`) ON DELETE CASCADE ON UPDATE CASCADE +) ENGINE=InnoDB AUTO_INCREMENT=2668 DEFAULT CHARSET=latin1; +INSERT INTO `table_versions` (`name`,`version`,`download_version`) values ('collection_details',1,0); +DROP TABLE IF EXISTS `collection_rewards`; +CREATE TABLE IF NOT EXISTS `collection_rewards` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `collection_id` int(10) unsigned NOT NULL DEFAULT '0', + `reward_type` enum('None','Item','Selectable','Coin','XP') COLLATE latin1_general_ci NOT NULL DEFAULT 'None', + `reward_value` bigint(20) unsigned NOT NULL DEFAULT '0', + `reward_quantity` tinyint(3) unsigned NOT NULL DEFAULT '0', + PRIMARY KEY (`id`), + KEY `FK_collection_rewards` (`collection_id`), + CONSTRAINT `FK_collection_rewards` FOREIGN KEY (`collection_id`) REFERENCES `collections` (`id`) ON DELETE CASCADE ON UPDATE CASCADE +) ENGINE=InnoDB AUTO_INCREMENT=607 DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci; +INSERT INTO `table_versions` (`name`,`version`,`download_version`) values ('collection_rewards',1,0); +DROP TABLE IF EXISTS `collections`; +CREATE TABLE IF NOT EXISTS `collections` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `collection_name` varchar(512) CHARACTER SET latin1 COLLATE latin1_general_ci NOT NULL DEFAULT 'Unknown', + `collection_category` varchar(512) CHARACTER SET latin1 COLLATE latin1_general_ci NOT NULL DEFAULT 'Unknown', + `level` tinyint(3) unsigned NOT NULL DEFAULT '0', + PRIMARY KEY (`id`) +) ENGINE=InnoDB AUTO_INCREMENT=554 DEFAULT CHARSET=latin1; +INSERT INTO `table_versions` (`name`,`version`,`download_version`) values ('collections',1,0); +DROP TABLE IF EXISTS `commands`; +CREATE TABLE IF NOT EXISTS `commands` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `type` tinyint(3) unsigned DEFAULT '1', + `command` varchar(64) COLLATE latin1_general_ci DEFAULT NULL, + `subcommand` varchar(64) COLLATE latin1_general_ci DEFAULT NULL, + `handler` int(10) unsigned NOT NULL DEFAULT '0', + `required_status` smallint(5) NOT NULL DEFAULT '0', + PRIMARY KEY (`id`), + UNIQUE KEY `CommandIDX` (`command`,`subcommand`) +) ENGINE=InnoDB AUTO_INCREMENT=505 DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci; + +INSERT INTO `commands` (`id`, `type`, `command`, `subcommand`, `handler`, `required_status`) VALUES + (1, 0, 'who', '', 41, 0), + (2, 0, 'played', '', 999, 0), + (3, 0, 'ignores', '', 113, 0), + (4, 0, 'ignore_add', '', 111, 0), + (5, 0, 'ignore_remove', '', 112, 0), + (6, 0, 'afk', '', 147, 0), + (7, 0, 'duel', '', 200, 0), + (8, 0, 'duel_accept', '', 202, 0), + (9, 0, 'duel_decline', '', 203, 0), + (10, 0, 'duel_surrender', '', 204, 0), + (11, 0, 'friends', '', 110, 0), + (12, 0, 'friend_add', '', 108, 0), + (13, 0, 'friend_remove', '', 109, 0), + (14, 0, 'emote', '', 13, 0), + (15, 0, 'say', '', 7, 0), + (16, 0, 'ventsay', '', 999, 0), + (17, 0, 'tell', '', 8, 0), + (18, 0, 'msg', '', 999, 0), + (19, 0, 'yell', '', 9, 0), + (20, 0, 'joinchannel', '', 294, 0), + (21, 0, 'chatleave', '', 297, 0), + (22, 0, 'tellchannel', '', 296, 0), + (23, 0, 'tc', '', 999, 0), + (24, 0, 'chatwho', '', 298, 0), + (25, 0, 'csay', '', 999, 0), + (26, 0, 'follow', '', 26, 0), + (27, 0, 'stopfollow', '', 27, 0), + (28, 0, 'shout', '', 10, 0), + (29, 0, 'auction', '', 11, 0), + (30, 0, 'ooc', '', 12, 0), + (31, 1, 'cannedemote', '', 144, 0), + (32, 0, 'mood', '', 999, 0), + (33, 0, 'gsay', '', 14, 0), + (34, 0, 'raidsay', '', 999, 0), + (35, 0, 'invite', '', 15, 0), + (36, 0, 'raidinvite', '', 999, 0), + (37, 0, 'leavegroup', '', 105, 0), + (38, 0, 'disband', '', 16, 0), + (39, 0, 'leaveraid', '', 999, 0), + (40, 0, 'kickfromgroup', '', 107, 0), + (41, 0, 'kickfromraid', '', 999, 0), + (42, 0, 'acceptinvite', '', 96, 0), + (43, 0, 'declineinvite', '', 97, 0), + (44, 0, 'makeleader', '', 106, 0), + (45, 0, 'groupoptions', '', 17, 0), + (46, 0, 'sit', '', 48, 0), + (47, 0, 'stand', '', 49, 0), + (48, 0, 'title', '', 281, 0), + (49, 0, 'random', '', 999, 0), + (50, 0, 'restore_lost_shared', '', 999, 0), + (51, 0, 'assist', '', 999, 0), + (52, 0, 'use', '', 61, 0), + (53, 0, 'lfg', '', 150, 0), + (54, 0, 'lfw', '', 149, 0), + (55, 0, 'anon', '', 148, 0), + (56, 0, 'role', '', 170, 0), + (57, 0, 'autoattack', '', 37, 0), + (58, 0, 'info', '', 33, 0), + (59, 0, 'equip', '', 999, 0), + (60, 0, 'unequip', '', 999, 0), + (61, 0, 'attune_inv', '', 306, 0), + (62, 0, 'attune_equip', '', 999, 0), + (63, 0, 'swap_inventory', '', 999, 0), + (64, 0, 'inventory', '', 24, 0), + (65, 0, 'lootcorpse', '', 999, 0), + (66, 0, 'hail', '', 19, 0), + (67, 0, 'deletequest', '', 78, 0), + (68, 0, 'collection_additem', '', 30, 0), + (69, 0, 'collection_filter_matchitem', '', 31, 0), + (70, 0, 'q_quest_quota', '', 999, 0), + (71, 0, 'q_accept_pending_quest', '', 76, 0), + (72, 0, 'q_deny_pending_quest', '', 77, 0), + (73, 0, 'q_list_pending_quests', '', 999, 0), + (74, 0, 'track', '', 135, 0), + (75, 0, 'pet', '', 137, 0), + (76, 0, 'setsocial', '', 999, 0), + (77, 0, 'inspectpc', '', 999, 0), + (78, 0, 'showdeathdialog', '', 999, 0), + (79, 0, 'start_trade', '', 172, 0), + (80, 0, 'add_trade_item', '', 185, 0), + (81, 0, 'add_trade_copper', '', 177, 0), + (82, 0, 'add_trade_silver', '', 178, 0), + (83, 0, 'add_trade_gold', '', 179, 0), + (84, 0, 'add_trade_plat', '', 180, 0), + (85, 0, 'remove_trade_copper', '', 181, 0), + (86, 0, 'remove_trade_silver', '', 182, 0), + (87, 0, 'remove_trade_gold', '', 183, 0), + (88, 0, 'remove_trade_plat', '', 184, 0), + (89, 0, 'remove_trade_item', '', 186, 0), + (90, 0, 'accept_trade', '', 173, 0), + (91, 0, 'reject_trade', '', 174, 0), + (92, 0, 'cancel_trade', '', 175, 0), + (93, 0, 'get_coins', '', 999, 0), + (94, 0, 'accept_reward', '', 85, 0), + (95, 0, 'start_merchant', '', 90, 0), + (96, 0, 'search_stores', '', 92, 0), + (97, 0, 'sort_search_stores', '', 999, 0), + (98, 0, 'get_search_stores_page', '', 94, 0), + (99, 0, 'buy_from_merchant', '', 87, 0), + (100, 0, 'sell_to_merchant', '', 88, 0), + (101, 0, 'buy_from_broker', '', 95, 0), + (102, 0, 'cancel_merchant', '', 89, 0), + (103, 0, 'cancel_broker', '', 999, 0), + (104, 0, 'store_list_item', '', 999, 0), + (105, 0, 'store_set_price', '', 999, 0), + (106, 0, 'store_start_selling', '', 999, 0), + (107, 0, 'store_stop_selling', '', 999, 0), + (108, 0, 'store_unlist_item', '', 999, 0), + (109, 0, 'cancel_store', '', 999, 0), + (110, 0, 'close_store_keep_selling', '', 999, 0), + (111, 0, 'start_bank', '', 999, 0), + (112, 0, 'cancel_bank', '', 73, 0), + (113, 0, 'bank_deposit', '', 71, 0), + (114, 0, 'bank_withdraw', '', 72, 0), + (115, 0, 'mender_repair', '', 114, 0), + (116, 0, 'mender_repair_all', '', 115, 0), + (117, 0, 'label_bag', '', 999, 0), + (118, 0, 'name_pet', '', 139, 0), + (119, 0, 'report_bug', '', 75, 0), + (120, 0, 'report_typo', '', 999, 0), + (121, 0, 'report_feedback', '', 999, 0), + (122, 0, 'report_abuse', '', 999, 0), + (123, 0, 'questionnaire', '', 999, 0), + (124, 0, 'apply_verb', '', 999, 0), + (125, 0, 'guild', '', 252, 0), + (126, 0, 'guildsay', '', 250, 0), + (127, 0, 'gu', '', 250, 0), + (128, 0, 'officersay', '', 251, 0), + (129, 0, 'os', '', 999, 0), + (130, 0, 'set_guild_member_note', '', 253, 0), + (131, 0, 'set_guild_officer_note', '', 254, 0), + (132, 0, 'ss', '', 999, 0), + (133, 0, 'house_kick', '', 999, 0), + (134, 0, 'house_own_all', '', 999, 0), + (135, 0, 'house_deposit', '', 999, 0), + (136, 0, 'place_house_item', '', 999, 0), + (137, 0, 'delete_house_item', '', 999, 0), + (138, 0, 'start_house_customization', '', 999, 0), + (139, 0, 'scribe_scroll_item', '', 266, 0), + (140, 0, 'use_equipped_item', '', 275, 0), + (141, 0, 'respec', '', 999, 0), + (142, 0, 'showconcentration', '', 999, 0), + (143, 0, 'useability', '', 34, 0), + (144, 0, 'clearallqueuedabilities', '', 265, 0), + (145, 0, 'enablequeuedabilities', '', 35, 0), + (146, 0, 'select_junction', '', 53, 0), + (147, 0, 'motd', '', 999, 0), + (148, 0, 'createfromrecipe', '', 299, 0), + (149, 0, 'stopcreation', '', 999, 0), + (150, 0, 'spiritshards', '', 999, 0), + (151, 0, 'cancel_effect', '', 999, 0), + (152, 0, 'cancel_maintained', '', 276, 0), + (153, 0, 'consume_food', '', 304, 0), + (154, 0, 'set_consume_food', '', 999, 0), + (155, 0, 'destroy_coin', '', 999, 0), + (156, 0, 'set_language', '', 291, 0), + (157, 0, 'languages', '', 290, 0), + (158, 0, 'read', '', 999, 0), + (159, 0, 'resurrect_self', '', 999, 0), + (160, 0, 'lastname', '', 28, 0), + (161, 0, 'confirmedlastname', '', 29, 0), + (162, 0, 'house', '', 999, 0), + (163, 0, 'disable_combat_exp', '', 187, 0), + (164, 0, 'waypoint', '', 999, 0), + (165, 0, 'target', '', 999, 0), + (166, 0, 'showhood', '', 159, 0), + (167, 0, 'hide_illusions', '', 158, 0), + (168, 0, 'zonetofriend', '', 999, 0), + (169, 0, 'inspect_player', '', 136, 0), + (170, 0, 'current_food', '', 999, 0), + (171, 0, 'current_drink', '', 999, 0), + (172, 0, 'claim', '', 18, 0), + (173, 0, 'findnpc', '', 999, 0), + (174, 0, 'stopeating', '', 156, 0), + (175, 0, 'stopdrinking', '', 157, 0), + (176, 0, 'movelog', '', 999, 0), + (177, 0, 'getmailheaders', '', 999, 0), + (178, 0, 'getmailmessage', '', 120, 0), + (179, 0, 'deletemailmessage', '', 134, 0), + (180, 0, 'start_mail', '', 119, 0), + (181, 0, 'set_mail_item', '', 128, 0), + (182, 0, 'add_mail_copper', '', 127, 0), + (183, 0, 'add_mail_silver', '', 126, 0), + (184, 0, 'add_mail_gold', '', 125, 0), + (185, 0, 'add_mail_plat', '', 124, 0), + (186, 0, 'remove_mail_copper', '', 133, 0), + (187, 0, 'remove_mail_silver', '', 132, 0), + (188, 0, 'remove_mail_gold', '', 131, 0), + (189, 0, 'remove_mail_plat', '', 130, 0), + (190, 0, 'takemailattachments', '', 121, 0), + (191, 0, 'cancel_send_mail', '', 129, 0), + (192, 0, 'cancel_mail', '', 123, 0), + (193, 0, 'auction_item', '', 999, 0), + (194, 0, 'auction_coin', '', 999, 0), + (195, 0, 'auction_cancel', '', 999, 0), + (196, 0, 'set_auction_item', '', 999, 0), + (197, 0, 'toggle_bonus_exp', '', 166, 0), + (198, 0, 'arena', '', 999, 0), + (199, 1, 'spawn', '', 1, 0), + (200, 1, 'race', '', 2, 10), + (201, 1, 'level', '', 3, 0), + (202, 1, 'class', '', 4, 10), + (203, 1, 'gender', '', 5, 0), + (204, 1, 'name', '', 6, 0), + (205, 1, 'zone', '', 20, 0), + (206, 1, 'move', '', 32, 100), + (207, 1, 'flag', '', 21, 10), + (208, 1, 'kick', '', 22, 100), + (209, 1, 'ban', '', 23, 10), + (210, 1, 'summonitem', '', 25, 0), + (211, 1, 'animtest', '', 211, 0), + (212, 1, 'reload', 'items', 36, 100), + (213, 1, 'itemsearch', '', 212, 0), + (214, 1, 'speed', '', 39, 10), + (215, 1, 'version', '', 42, 0), + (216, 1, 'kill', '', 54, 10), + (217, 1, 'spawn', 'add', 43, 100), + (218, 1, 'spawn', 'create', 44, 100), + (219, 1, 'spawn', 'set', 45, 100), + (220, 1, 'spawn', 'remove', 46, 100), + (221, 1, 'spawn', 'list', 47, 0), + (222, 1, 'spawn', 'target', 50, 100), + (223, 1, 'spawn', 'equipment', 51, 100), + (224, 1, 'spawn', 'details', 52, 0), + (225, 1, 'summon', '', 55, 10), + (226, 1, 'goto', '', 56, 10), + (227, 1, 'spawn', 'move', 40, 100), + (228, 1, 'flymode', '', 57, 0), + (229, 1, 'settime', '', 58, 10), + (230, 1, 'reload', 'spells', 59, 100), + (231, 1, 'loot', '', 60, 0), + (232, 1, 'reload', 'spawnscripts', 62, 100), + (233, 1, 'reload', 'luasystem', 63, 100), + (234, 1, 'reload', 'structs', 64, 100), + (235, 1, 'reload', '', 65, 100), + (236, 1, 'loot', 'list', 66, 0), + (237, 1, 'loot', 'setcoin', 67, 100), + (238, 1, 'loot', 'additem', 68, 100), + (239, 1, 'loot', 'removeitem', 69, 100), + (240, 1, 'bank', '', 70, 0), + (241, 1, 'attack', '', 74, 0), + (242, 1, 'reload', 'quests', 79, 100), + (243, 1, 'spawn', 'combine', 80, 100), + (244, 1, 'depop', '', 81, 100), + (245, 1, 'repop', '', 82, 10), + (246, 1, 'luadebug', '', 83, 10), + (247, 1, 'test', '', 84, 10), + (248, 1, 'frommerchant', '', 86, 0), + (249, 0, 'soloautolock', '', 999, 0), + (250, 0, 'joinchannelfromload', '', 295, 0), + (251, 0, 'asay', '', 999, 0), + (252, 0, 'moveraidmember', '', 999, 0), + (253, 0, 'kickgroupfromraid', '', 999, 0), + (254, 0, 'duelbet', '', 201, 0), + (255, 0, 'surrender', '', 999, 0), + (256, 0, 'duel_toggle', '', 205, 0), + (257, 0, 'decline_duels', '', 160, 0), + (258, 0, 'decline_trades', '', 161, 0), + (259, 0, 'decline_guilds', '', 162, 0), + (260, 0, 'decline_groups', '', 163, 0), + (261, 0, 'decline_raids', '', 164, 0), + (262, 0, 'decline_lon', '', 165, 0), + (263, 0, 'try_on', '', 280, 0), + (264, 0, 'unequip_appearance', '', 999, 0), + (265, 0, 'loot_confirmation', '', 999, 0), + (266, 0, 'petoptions', '', 142, 0), + (267, 0, 'deity_offer', '', 999, 0), + (268, 0, 'deity_offer_confirm', '', 999, 0), + (269, 0, 'deity_sac_info', '', 999, 0), + (270, 0, 'deity_buy_reward', '', 999, 0), + (271, 0, 'deity_buy_reward_confirm', '', 999, 0), + (272, 0, 'deity_change_confirm', '', 999, 0), + (273, 0, 'deity_item_off_altar', '', 999, 0), + (274, 0, 'select', '', 302, 0), + (275, 0, 'getinput', '', 999, 0), + (276, 0, 'set_trade_coin', '', 176, 0), + (277, 0, 'cancel_work', '', 999, 0), + (278, 0, 'add_work_component', '', 999, 0), + (279, 0, 'add_work_payment', '', 999, 0), + (280, 0, 'add_payment_coin', '', 999, 0), + (281, 0, 'set_payment_coin', '', 999, 0), + (282, 0, 'accept_work', '', 999, 0), + (283, 0, 'toggle_work_side_product', '', 999, 0), + (284, 0, 'raid_looter', '', 999, 0), + (285, 0, 'accept_advancement', '', 293, 0), + (286, 0, 'show_available_achievement_trees', '', 999, 0), + (287, 0, 'achievement_respec', '', 999, 0), + (288, 0, 'achievement_freerespec', '', 999, 0), + (289, 0, 'achievement_add', '', 310, 0), + (290, 0, 'achievement_profile_save', '', 999, 0), + (291, 0, 'achievement_profile_swap', '', 999, 0), + (292, 0, 'buy_from_vendor', '', 999, 0), + (293, 0, 'buyback_from_merchant', '', 91, 0), + (294, 0, 'cancel_browse_market', '', 999, 0), + (295, 0, 'install_vendor', '', 999, 0), + (296, 0, 'uninstall_vendor', '', 999, 0), + (297, 0, 'dismiss_vendor', '', 999, 0), + (298, 0, 'contest', '', 999, 0), + (299, 0, 'vendor_add_inventory', '', 999, 0), + (300, 0, 'vendor_remove_inventory', '', 999, 0), + (301, 0, 'vendor_set_price', '', 999, 0), + (302, 0, 'vendor_list_inventory', '', 999, 0), + (303, 0, 'vendor_unlist_inventory', '', 999, 0), + (304, 0, 'vendor_take_coin', '', 999, 0), + (305, 0, 'shared_deposit', '', 999, 0), + (306, 0, 'shared_withdraw', '', 999, 0), + (307, 0, 'end_altar', '', 999, 0), + (308, 0, 'spell_lottery', '', 999, 0), + (309, 0, 'spell_lottery_all', '', 999, 0), + (310, 0, 'display_case', '', 999, 0), + (311, 0, 'house_display', '', 999, 0), + (312, 0, 'house_amenity', '', 999, 0), + (313, 0, 'hirelingoptions', '', 999, 0), + (314, 0, 'place_vendor', '', 999, 0), + (315, 0, 'pickup_vendor', '', 999, 0), + (316, 0, 'drink_alcohol', '', 999, 0), + (317, 0, 'use_item', '', 117, 0), + (318, 0, 'knowledgewindow_sort', '', 999, 0), + (319, 0, 'knowledgewindow_swap', '', 999, 0), + (320, 0, 'knowledgewindow_insertblanks', '', 999, 0), + (321, 0, 'useabilityonplayer', '', 999, 0), + (322, 0, 'reset_zone_timer', '', 999, 0), + (323, 0, 'set_auto_consume', '', 152, 0), + (324, 0, 'use_available_spell', '', 999, 0), + (325, 0, 'petname', '', 138, 0), + (326, 0, 'rename', '', 140, 0), + (327, 0, 'confirmedrename', '', 141, 0), + (328, 0, 'showhelm', '', 153, 0), + (329, 0, 'showhoodorhelm', '', 154, 0), + (330, 0, 'showcloak', '', 155, 0), + (331, 0, 'showranged', '', 151, 0), + (332, 0, 'zone_to_group_member_zone', '', 999, 0), + (333, 0, 'redeem', '', 999, 0), + (334, 0, 'testcopy', '', 999, 0), + (335, 0, 'beta', '', 999, 0), + (336, 0, 'guildbetaapply', '', 999, 0), + (337, 0, 'reportspam', '', 122, 0), + (338, 0, 'despam', '', 999, 0), + (339, 0, 'champion_respawn', '', 999, 0), + (340, 0, 'set_emote_voice', '', 103, 0), + (341, 0, 'set_combat_voice', '', 102, 0), + (342, 1, 'lock', '', 100, 10), + (343, 0, 'pickup', '', 999, 0), + (344, 0, 'weaponstats', '', 118, 0), + (345, 0, 'targetitem', '', 999, 0), + (346, 0, 'refreshuidata', '', 999, 0), + (347, 0, 'confirm_zone', '', 999, 0), + (348, 0, 'answer_tradeskill', '', 999, 0), + (349, 0, 'share_quest', '', 999, 0), + (350, 0, 'buy_house', '', 999, 0), + (351, 0, 'move_item', '', 999, 0), + (352, 0, 'packhouse', '', 999, 0), + (353, 0, 'cast_guild_leader_vote', '', 999, 0), + (354, 1, 'gather', '', 92, 0), + (355, 1, 'invulnerable', '', 93, 10), + (360, 1, 'reload', 'groundspawn_items', 98, 100), + (361, 1, 'reload', 'spawns', 99, 100), + (362, 1, 'giveitem', '', 101, 10), + (363, 1, 'reload', 'zonescripts', 104, 100), + (364, 0, 'broadcast', '', 145, 10), + (365, 0, 'announce', '', 146, 10), + (366, 0, 'gm_hide', '', 167, 10), + (367, 0, 'gm_vanish', '', 168, 10), + (368, 1, 'spawn', 'group', 169, 100), + (369, 0, 'decline_vcinvite', '', 171, 0), + (370, 1, 'skill', '', 236, 0), + (371, 1, 'skill', 'list', 235, 0), + (372, 1, 'skill', 'add', 233, 0), + (373, 1, 'skill', 'remove', 234, 0), + (374, 1, 'zone', 'set', 237, 100), + (375, 1, 'zone', 'details', 238, 0), + (376, 1, 'randomize', '', 239, 100), + (377, 1, 'reload', 'entity_commands', 240, 100), + (378, 1, 'repair', '', 116, 0), + (379, 1, 'entity_command', '', 241, 0), + (380, 1, 'entity_command', 'list', 242, 0), + (381, 1, 'reload', 'factions', 243, 100), + (382, 1, 'merchant', '', 244, 0), + (383, 1, 'merchant', 'list', 245, 0), + (384, 1, 'appearance', '', 246, 0), + (385, 1, 'appearance', 'list', 247, 0), + (386, 1, 'reload', 'mail', 248, 100), + (387, 1, 'distance', '', 249, 0), + (388, 1, 'reload', 'guilds', 255, 100), + (389, 0, 'create', '', 256, 0), + (390, 0, 'create', 'guild', 257, 0), + (391, 1, 'guilds', '', 258, 0), + (392, 1, 'guilds', 'create', 259, 10), + (393, 1, 'guilds', 'delete', 260, 10), + (394, 1, 'guilds', 'add', 261, 10), + (395, 1, 'guilds', 'remove', 262, 10), + (396, 1, 'guilds', 'list', 263, 0), + (397, 0, 'lotto', '', 264, 0), + (398, 1, 'reload', 'locations', 267, 100), + (399, 1, 'location', '', 268, 0), + (400, 1, 'location', 'create', 269, 100), + (401, 1, 'location', 'add', 270, 100), + (402, 1, 'grid', '', 271, 0), + (403, 1, 'location', 'remove', 272, 100), + (404, 1, 'location', 'delete', 273, 100), + (405, 1, 'location', 'list', 274, 0), + (406, 1, 'title', 'list', 286, 0), + (407, 1, 'title', 'setprefix', 287, 0), + (408, 1, 'title', 'setsuffix', 288, 0), + (409, 1, 'title', 'fix', 289, 0), + (410, 1, 'irc', '', 292, 0), + (411, 1, 'spawn', 'template', 143, 100), + (414, 0, 'disable_quest_exp', '', 188, 0), + (415, 0, 'disable_char_bonus_exp', '', 189, 0), + (416, 0, 'accept_pending_summon', '', 999, 0), + (417, 0, 'achievement_conversion', '', 999, 0), + (418, 0, 'battleground', '', 999, 0), + (419, 0, 'book', '', 999, 0), + (420, 0, 'clear_mailbox', '', 999, 0), + (421, 0, 'container', '', 999, 0), + (422, 0, 'cureplayer', '', 999, 0), + (423, 0, 'currency', '', 999, 0), + (424, 0, 'dmnotready', '', 999, 0), + (425, 0, 'dmready', '', 999, 0), + (426, 0, 'dmselectavatar', '', 999, 0), + (427, 0, 'facebook', '', 999, 0), + (428, 0, 'finditem', '', 999, 0), + (429, 0, 'guild_confirmedrename', '', 999, 0), + (430, 0, 'guild_rename', '', 999, 0), + (431, 0, 'guild_rename_cancel', '', 999, 0), + (432, 0, 'hide_achievements', '', 999, 0), + (433, 0, 'house_edit', '', 999, 0), + (434, 0, 'house_portal_obj', '', 999, 0), + (435, 0, 'house_ui', '', 999, 0), + (436, 0, 'house_zone', '', 999, 0), + (437, 0, 'leavelonshowroom', '', 999, 0), + (438, 0, 'loadbeastlordability', '', 999, 0), + (439, 0, 'lonshowroom', '', 999, 0), + (440, 0, 'mentor', '', 999, 0), + (441, 0, 'mercenary', '', 999, 0), + (442, 0, 'mercname', '', 999, 0), + (443, 0, 'move_house_items', '', 999, 0), + (444, 0, 'porttofriend', '', 999, 0), + (445, 0, 'publish_house', '', 999, 0), + (446, 0, 'rate_house', '', 999, 0), + (447, 0, 'readycheck', '', 999, 0), + (448, 0, 'reforge_item', '', 999, 0), + (449, 0, 'reforge_restore', '', 999, 0), + (450, 0, 'rename_cancel', '', 999, 0), + (451, 0, 'research', '', 999, 0), + (452, 0, 'return_house_item', '', 999, 0), + (453, 0, 'setautolootmode', '', 999, 0), + (454, 0, 'setclientpetkey', '', 999, 0), + (455, 0, 'setplayerrace', '', 999, 0), + (456, 0, 'share', '', 999, 0), + (457, 0, 'showbackapp', '', 999, 0), + (458, 0, 'smp', '', 999, 0), + (459, 0, 'socialmedia', '', 999, 0), + (460, 0, 'split', '', 999, 0), + (461, 0, 'summon_mount', '', 999, 0), + (462, 0, 'tagtarget', '', 999, 0), + (463, 0, 'targetaddon', '', 999, 0), + (464, 0, 'transfer_character', '', 999, 0), + (465, 0, 'transfer_character_free', '', 999, 0), + (466, 0, 'ts_research', '', 999, 0), + (467, 0, 'tweet', '', 999, 0), + (468, 0, 'twitter', '', 999, 0), + (469, 0, 'unattune_all', '', 999, 0), + (470, 0, 'unmentor', '', 999, 0), + (471, 0, 'use_unlocker', '', 999, 0), + (472, 0, 'vote_kick', '', 999, 0), + (473, 0, 'vote_options', '', 999, 0), + (474, 0, 'waypoint_from_entity_id', '', 999, 0), + (475, 0, 'welcome_info', '', 999, 0), + (476, 0, 'write_sign', '', 999, 0), + (477, 1, 'modify', '', 1000, 0), + (478, 1, 'zone', 'shutdown', 190, 100), + (479, 1, 'zone', 'safe', 191, 100), + (480, 1, 'zone', 'revive', 192, 100), + (481, 1, 'reload', 'zones', 193, 100), + (482, 0, 'rain', '', 300, 0), + (483, 0, 'guildbank', '', 282, 0), + (484, 1, 'tomerchant', '', 301, 0), + (485, 0, 'setautoattackmode', '', 999, 0), + (486, 0, 'gethotzones', '', 999, 0), + (487, 0, 'summon_chest', '', 999, 0), + (488, 0, 'add_trade_krono', '', 999, 0), + (489, 0, 'vendor_add_krono', '', 999, 0), + (490, 0, 'republish_house', '', 999, 0), + (491, 0, 'dmgstatus', '', 999, 0), + (492, 0, 'facial_anim_receiver', '', 999, 0), + (493, 1, 'weather', '', 38, 10), + (494, 1, 'aquaman', '', 305, 0), + (495, 1, 'player', '', 307, 10), + (496, 1, 'player', 'coins', 308, 10), + (497, 1, 'editor', '', 311, 100), + (498, 1, 'accept_resurrection', '', 312, 0), + (499, 1, 'decline_resurrection', '', 313, 0), + (500, 1, 'modify', 'spawn', 1007, 100), + (501, 0, 'wind', '', 314, 0), + (502, 1, 'modify', 'character', 1001, 100), + (503, 1, 'modify', 'skill', 1006, 100), + (504, 0, 'modify', 'quest', 1005, 100); +INSERT INTO `commands` (`type`, `command`, `subcommand`, `handler`, `required_status`) VALUES (1, 'bot', '', 500, 0); +INSERT INTO `commands` (`type`, `command`, `subcommand`, `handler`, `required_status`) VALUES (1, 'bot', 'create', 501, 0); +INSERT INTO `commands` (`type`, `command`, `subcommand`, `handler`, `required_status`) VALUES (1, 'bot', 'customize', 502, 0); +INSERT INTO `commands` (`type`, `command`, `subcommand`, `handler`, `required_status`) VALUES (1, 'bot', 'spawn', 503, 0); +INSERT INTO `commands` (`type`, `command`, `subcommand`, `handler`, `required_status`) VALUES (1, 'bot', 'list', 504, 0); +INSERT INTO `commands` (`type`, `command`, `subcommand`, `handler`, `required_status`) VALUES (1, 'bot', 'inv', 505, 0); +INSERT INTO `commands` (`type`, `command`, `subcommand`, `handler`, `required_status`) VALUES (1, 'bot', 'settings', 506, 0); +INSERT INTO `commands` (`type`, `command`, `subcommand`, `handler`, `required_status`) VALUES (1, 'bot', 'help', 507, 0); +update commands set handler = 279 where command = 'random'; +UPDATE commands SET `handler` = 463 WHERE command = 'book'; +INSERT INTO `commands`(`id`,`type`,`command`,`subcommand`,`handler`,`required_status`) VALUES ( NULL,'1','get_aa_xml','','750','0'); +INSERT INTO `commands`(`id`,`type`,`command`,`subcommand`,`handler`,`required_status`) VALUES ( NULL,'1','add_aa','','751','0'); +INSERT INTO `commands`(`id`,`type`,`command`,`subcommand`,`handler`,`required_status`) VALUES ( NULL,'1','commit_aa_profile','','752','0'); +INSERT INTO `commands`(`id`,`type`,`command`,`subcommand`,`handler`,`required_status`) VALUES ( NULL,'1','begin_aa_profile','','753','0'); +INSERT INTO `commands`(`id`,`type`,`command`,`subcommand`,`handler`,`required_status`) VALUES ( NULL,'1','back_aa','','754','0'); +INSERT INTO `commands`(`id`,`type`,`command`,`subcommand`,`handler`,`required_status`) VALUES ( NULL,'1','remove_aa','','755','0'); +INSERT INTO `commands`(`id`,`type`,`command`,`subcommand`,`handler`,`required_status`) VALUES ( NULL,'1','switch_aa_profile','','756','0'); +INSERT INTO `commands`(`id`,`type`,`command`,`subcommand`,`handler`,`required_status`) VALUES ( NULL,'1','cancel_aa_profile','','757','0'); +INSERT INTO `commands`(`id`,`type`,`command`,`subcommand`,`handler`,`required_status`) VALUES ( NULL,'1','save_aa_profile','','758','0'); +INSERT INTO `table_versions` (`name`,`version`,`download_version`) values ('commands',1,0); +UPDATE `table_versions` SET `download_version`=38 WHERE `name`='commands'; +DROP TABLE IF EXISTS `emotes`; +CREATE TABLE IF NOT EXISTS `emotes` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `name` varchar(128) COLLATE latin1_general_ci DEFAULT NULL, + `visual_state_id` int(10) unsigned NOT NULL DEFAULT '0', + `message` varchar(255) COLLATE latin1_general_ci DEFAULT NULL, + `targeted_message` varchar(255) COLLATE latin1_general_ci DEFAULT NULL, + `self_message` varchar(255) COLLATE latin1_general_ci DEFAULT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `EmoteIDX` (`name`) +) ENGINE=InnoDB AUTO_INCREMENT=184 DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci; +INSERT INTO `emotes` (`id`, `name`, `visual_state_id`, `message`, `targeted_message`, `self_message`) VALUES + (58, 'agree', 10745, 'agrees.', 'agrees with %t.', ''), + (59, 'assistme', 13232, 'calls for assistance!', 'calls to %t for assistance!', ''), + (60, 'apologize', 13299, 'apologizes.', '', ''), + (61, 'applaud', 10760, 'applauds!', 'applauds %t.', ''), + (62, 'attention', 10815, 'snaps to attention!', '', ''), + (63, 'battlecry', 13233, 'shouts a fearsome battlecry.', 'shouts a fearsome battlecry at %t.', ''), + (64, 'beckon', 10843, 'beckons.', 'beckons %t to follow %g2.', ''), + (65, 'beg', 10844, 'begs.', 'begs %t for a favor.', ''), + (66, 'blowkiss', 11762, 'blows a kiss.', 'blows a kiss at %t.', ''), + (67, 'boggle', 10856, 'boggles.', 'boggles at the opportunities presented by %t.', ''), + (68, 'bow', 121, 'bows.', 'bows to %t.', ''), + (69, 'brandish', 10912, 'shows %g1 weapon.', 'brandishes %g1 weapon at %t.', ''), + (70, 'bye', 10926, 'waves goodbye.', 'waves goodbye to %t.', ''), + (71, 'cackle', 125, 'cackles.', 'cackles gleefully at %t.', ''), + (72, 'cheer', 11150, 'cheers!', 'cheers for %t.', ''), + (73, 'chuckle', 11152, 'chuckles.', 'chuckles at %t.', ''), + (74, 'confused', 11214, 'appears confused.', 'stumbles around, obviously confused by %t.', ''), + (75, 'crazy', 11255, 'rambles insanely!', 'rambles insanely at %t.', ''), + (76, 'cringe', 11256, 'cringes.', 'cringes away from %t.', ''), + (77, 'cry', 11275, 'cries.', 'cries over %t.', ''), + (78, 'curse', 11285, 'curses the gods!', 'curses %t.', ''), + (79, 'curtsey', 11286, 'curtsies.', 'curtseys to %t.', ''), + (80, 'cutthroat', 11287, 'runs %g1 thumb across %g1 throat, threatening everyone!', 'runs their thumb around their throat, threatening %t.', ''), + (81, 'dance', 11298, 'dances!', 'dances with %t.', ''), + (82, 'doh', 11410, 'smacks %g1 forehead.', 'smacks %g1 forehead at %t.', ''), + (83, 'doubletake', 11415, 'doubletakes.', 'does a doubletake on %t.', ''), + (84, 'duck', 11463, 'ducks!', '', ''), + (85, 'flee', 13253, 'tells everyone to run!', 'tells %t to run!', ''), + (86, 'flex', 11554, 'flexes.', 'flexes at %t.', ''), + (87, 'flirt', 11557, 'starts flirting!', 'starts flirting with %t.', ''), + (88, 'flourish', 298, 'performs a flourished bow.', 'flourishes their weapon at %t.', ''), + (89, 'flustered', 11558, 'appears flustered.', 'appears flustered with %t.', ''), + (90, 'followme', 13239, 'asks everyone to follow %g2.', 'asks %t to follow %g2.', ''), + (91, 'frustrated', 11628, 'appears frustrated.', 'appears frustrated with %t.', ''), + (92, 'fullcurtsey', 11633, 'formally curtsies.', 'formally curtsies at %t.', ''), + (93, 'gag', 308, 'gags.', 'gags at %t.', ''), + (94, 'giggle', 11648, 'giggles.', 'giggles at %t.', ''), + (95, 'glare', 11649, 'glares.', 'glares menacingly at %t.', ''), + (96, 'growl', 13243, 'growls.', 'growls at %t.', ''), + (97, 'grumble', 11663, 'grumbles under %g1 breath.', 'grumbles about %t.', ''), + (98, 'gutcramp', 11664, 'doubles over in pain!', '', ''), + (99, 'happy', 11668, 'appears happy.', 'happily bounces around %t.', ''), + (100, 'healme', 13244, 'calls for healing.', 'calls to %t for healing.', ''), + (101, 'hearnoevil', 11675, 'covers %g1 ears.', 'covers their ears and pays no heed to %t.', ''), + (102, 'heartattack', 11676, 'clutches %g1 chest!', '', ''), + (103, 'heelclick', 11681, 'clicks %g1 heels.', '', ''), + (104, 'heckno', 11680, 'declines.', 'declines %t. HECK NO!', ''), + (105, 'hello', 11682, 'waves hello.', 'waves hello to %t.', ''), + (106, 'helpme', 13245, 'cries for help.', 'cries at %t for help.', ''), + (107, 'heroic', 13254, 'is engaging a heroic opportunity.', '', ''), + (108, 'heythere', 13270, 'yells for attention.', 'yells at %t for attention.', ''), + (109, 'howl', 11718, 'howls.', 'howls at %t.', ''), + (110, 'hug', 0, 'looks for someone to hug.', 'hugs %t.', ''), + (111, 'hungry', 11664, 'appears hungry.', '', ''), + (112, 'itch', 11756, 'scratches an itch.', '', ''), + (113, 'incoming', 13248, 'warns of approaching enemies.', 'warns %t of approaching enemies.', ''), + (114, 'laugh', 11152, 'laughs.', 'laughs at %t.', ''), + (115, 'listen', 11793, 'listens intently.', 'listens intently to %t.', ''), + (116, 'lookaway', 11796, 'looks away.', 'looks away from %t.', ''), + (117, 'lookhere', 13250, 'desperately yells for someone to look at %g2.', 'yells at %t to look at %g2.', ''), + (118, 'lookout', 13268, 'says to watch out!', '', ''), + (119, 'mine', 13241, 'lets everyone know that %g3 has everything under control.', 'lets %t know that %g3 has everything under control.', ''), + (120, 'moon', 11858, 'shows everyone how %g3 feels about it!', 'shows %t what %g3 feel about it.', ''), + (121, 'needgroup', 13251, 'asks if there is a group in need of %g1 skills.', 'asks %t if their group needs %g1 skills.', ''), + (122, 'neener', 0, 'childishly taunts everyone.', 'childishly taunts %t.', ''), + (123, 'no', 11881, 'gives an emphatic NO!', 'gives an emphatic no to %t.', ''), + (124, 'nod', 11882, 'nods.', 'nods in agreement with %t.', ''), + (125, 'notworthy', 396, 'appears not worthy.', 'genuflects to %t.', ''), + (126, 'oop', 13252, 'is out of power.', 'tells %t %g3 is out of power.', ''), + (127, 'peer', 11976, 'peers curiously.', 'peers curiously at %t.', ''), + (128, 'point', 12028, 'points.', 'points at %t.', ''), + (129, 'ponder', 12030, 'ponders.', 'ponders %t.', ''), + (130, 'pout', 12031, 'pouts.', 'pouts dramatically at %t.', ''), + (131, 'raisehand', 12081, 'begins frantically raising %g1 hand.', '', ''), + (132, 'rofl', 12149, 'rolls on the floor laughing!', 'rolls on the floor laughing at %t.', ''), + (133, 'royalwave', 12150, 'regally waves.', 'regally waves at %t.', ''), + (134, 'rude', 12153, 'makes a rude gesture.', 'gestures rudely at %t.', ''), + (135, 'sad', 12166, 'looks sad.', 'makes a sad face at %t.', ''), + (136, 'salute', 12167, 'salutes.', 'crisply salutes %t.', ''), + (137, 'sarcasm', 12172, 'sarcastically applauds.', 'sarcastically applauds %t.', ''), + (138, 'scheme', 12182, 'rubs %g1 hands together.', '', ''), + (139, 'scold', 12187, 'sternly scolds everyone!', 'sternly scolds %t.', ''), + (140, 'scratch', 12191, 'scratches %g2self.', '', ''), + (141, 'scream', 12192, 'screams!', 'screams in frustration at %t.', ''), + (142, 'seenoevil', 12204, 'covers %g1 eyes.', 'covers %g1 eyes to avoid seeing what %t is doing.', ''), + (143, 'shakefist', 12214, 'shakes %g1 fist in the air.', 'shakes %g1 fist at %t.', ''), + (144, 'shame', 12216, 'appears ashamed.', '', ''), + (145, 'shimmy', 12235, 'shimmies!', '', ''), + (146, 'shiver', 12236, 'shivers.', 'shivers at %t.', ''), + (147, 'shrug', 12240, 'shrugs.', 'shrugs at %t.', ''), + (148, 'sigh', 12246, 'sighs.', 'sighs disappointedly at %t.', ''), + (149, 'smile', 12285, 'smiles.', 'smiles at %t.', ''), + (150, 'smirk', 12286, 'smirks.', 'smirks at %t.', ''), + (151, 'sneer', 12325, 'sneers.', 'sneers at %t.', ''), + (152, 'squeal', 12979, 'squeals!', 'squeals in delight at %t.', ''), + (153, 'square', 12978, 'shapes a box in the air!', 'shapes a box in the air for %t.', ''), + (154, 'speaknoevil', 12966, 'covers %g1 mouth.', 'covers %g1 mouth to prevent saying anything to %t.', ''), + (155, 'sniff', 12329, 'sniffs.', 'sniffs at %t. What smells?!', ''), + (156, 'snicker', 12328, 'snickers.', 'snickers quietly and pouts at %t.', ''), + (157, 'stare', 12983, 'stares fixedly off in the distance.', 'stares fixedly at %t.', ''), + (158, 'stay', 13255, 'tells everyone to stay here.', 'tells %t to stay here.', ''), + (159, 'stinky', 0, 'makes a stinky face.', 'makes a stinky face at %t.', ''), + (160, 'stretch', 13008, 'stretches lazily.', '', ''), + (161, 'sulk', 13015, 'sulks.', '', ''), + (162, 'swear', 13019, 'swears loudly!', 'swears loudly at %t.', ''), + (163, 'tantrum', 0, 'throws a temper tantrum!', 'throws a temper tantrum at %t.', ''), + (164, 'tapfoot', 13056, 'taps %g1 foot impatiently.', 'taps %g1 foot impatiently at %t.', ''), + (165, 'taunt', 13057, 'mercilessly taunts all nearby!', 'mercilessly taunts %t.', ''), + (166, 'thanks', 13061, 'appears thankful.', 'thanks %t.', ''), + (167, 'thirsty', 13258, 'is thirsty.', '', ''), + (168, 'threaten', 12214, 'threatens all nearby!', 'threatens %t.', ''), + (169, 'thumbsup', 13064, 'gives the thumbs-up!', 'gives the thumbs up to %t.', ''), + (170, 'train', 13260, 'warns everyone of an approaching army.', 'warns %t of an approaching army.', ''), + (171, 'violin', 13167, 'plays an imaginary violin in mock sympathy.', 'plays on an imaginary violin in mock sympathy for %t.', ''), + (172, 'wave', 11682, 'waves.', 'waves at %t.', ''), + (173, 'whistle', 0, 'whistles.', 'whistles appreciatively at %t.', ''), + (174, 'whome', 13295, 'gestures at everyone, Who me?!', 'gestures at %t, who me?!', ''), + (175, 'wince', 13299, 'winces.', 'winces at %t.', ''), + (176, 'wink', 13304, 'winks.', 'winks at %t.', ''), + (177, 'woowoo', 13310, 'draws an image for the crowd!', 'draws an image for %t.', ''), + (178, 'yawn', 891, 'yawns.', 'yawns rudely in %t\'s face', ''), + (179, 'yeah', 13317, 'agrees.', 'fervently agrees with %t.', ''), + (180, 'clap', 10760, 'claps.', 'claps for %t.', ''), + (181, 'eye', 0, 'raises an eyebrow.', 'raises an eyebrow at %t.', ''), + (182, 'comfort', 0, 'needs to be comforted.', 'comforts %t.', ''), + (183, 'helping', 0, 'is here to help.', 'lets %t know %g3 is coming to help.', ''); +INSERT INTO `table_versions` (`name`,`version`,`download_version`) values ('emotes',1,0); +UPDATE `table_versions` SET `download_version`=1 WHERE `name`='emotes'; +DROP TABLE IF EXISTS `entity_commands`; +CREATE TABLE IF NOT EXISTS `entity_commands` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `command_list_id` int(10) unsigned NOT NULL DEFAULT '1', + `command_text` varchar(64) COLLATE latin1_general_ci NOT NULL DEFAULT 'Hail', + `distance` float unsigned NOT NULL DEFAULT '0', + `command` varchar(64) COLLATE latin1_general_ci NOT NULL DEFAULT 'hail', + `error_text` varchar(64) COLLATE latin1_general_ci NOT NULL, + `cast_time` smallint(5) unsigned NOT NULL DEFAULT '0', + `spell_visual` int(10) unsigned NOT NULL DEFAULT '0', + PRIMARY KEY (`id`), + UNIQUE KEY `EntityCmdIDX` (`command_list_id`,`command_text`) +) ENGINE=InnoDB AUTO_INCREMENT=1320 DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci; +INSERT INTO `table_versions` (`name`,`version`,`download_version`) values ('entity_commands',1,0); +DROP TABLE IF EXISTS `eq2classes`; +CREATE TABLE IF NOT EXISTS `eq2classes` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `class_id` int(10) unsigned NOT NULL DEFAULT '0', + `class_name` varchar(64) COLLATE latin1_general_ci DEFAULT NULL, + `class_alignment` enum('Good','Evil') COLLATE latin1_general_ci DEFAULT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `ClassIDX` (`class_id`) +) ENGINE=InnoDB AUTO_INCREMENT=43 DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci CHECKSUM=1 DELAY_KEY_WRITE=1 ROW_FORMAT=DYNAMIC; +INSERT INTO `table_versions` (`name`,`version`,`download_version`) values ('eq2classes',1,0); +DROP TABLE IF EXISTS `eq2expansions`; +CREATE TABLE IF NOT EXISTS `eq2expansions` ( + `id` int(11) unsigned NOT NULL AUTO_INCREMENT, + `expansion_tag` varchar(16) COLLATE latin1_general_ci DEFAULT NULL, + `expansion` varchar(64) COLLATE latin1_general_ci DEFAULT NULL, + `expansion_type` enum('Expansion','Adventure Pack','Game Update') CHARACTER SET latin1 DEFAULT NULL, + `release_date` varchar(20) COLLATE latin1_general_ci DEFAULT NULL, + PRIMARY KEY (`id`) +) ENGINE=InnoDB AUTO_INCREMENT=82 DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci CHECKSUM=1 DELAY_KEY_WRITE=1 ROW_FORMAT=DYNAMIC; +INSERT INTO `table_versions` (`name`,`version`,`download_version`) values ('eq2expansions',1,0); +DROP TABLE IF EXISTS `eq2gm`; +CREATE TABLE IF NOT EXISTS `eq2gm` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `gm_title` varchar(64) COLLATE latin1_general_ci DEFAULT NULL, + `gm_description` varchar(255) COLLATE latin1_general_ci DEFAULT NULL, + `gm_status` int(10) NOT NULL DEFAULT '0', + PRIMARY KEY (`id`) +) ENGINE=InnoDB AUTO_INCREMENT=9 DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci; +INSERT INTO `table_versions` (`name`,`version`,`download_version`) values ('eq2gm',1,0); +DROP TABLE IF EXISTS `eq2races`; +CREATE TABLE IF NOT EXISTS `eq2races` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `race` int(10) unsigned NOT NULL DEFAULT '0', + `race_type` int(10) unsigned NOT NULL DEFAULT '0', + `name` varchar(64) COLLATE latin1_general_ci DEFAULT NULL, + `is_player_race` tinyint(3) NOT NULL DEFAULT '0', + PRIMARY KEY (`id`) +) ENGINE=InnoDB AUTO_INCREMENT=1092 DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci CHECKSUM=1 DELAY_KEY_WRITE=1 ROW_FORMAT=DYNAMIC; +INSERT INTO `table_versions` (`name`,`version`,`download_version`) values ('eq2races',1,0); +DROP TABLE IF EXISTS `faction_alliances`; +CREATE TABLE IF NOT EXISTS `faction_alliances` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `faction_id` int(10) unsigned NOT NULL DEFAULT '0', + `friend_faction` int(10) unsigned NOT NULL DEFAULT '0', + `hostile_faction` int(10) unsigned NOT NULL DEFAULT '0', + PRIMARY KEY (`id`), + UNIQUE KEY `FactionIDX` (`faction_id`,`friend_faction`,`hostile_faction`), + CONSTRAINT `FK_faction_alliances` FOREIGN KEY (`faction_id`) REFERENCES `factions` (`id`) ON UPDATE CASCADE +) ENGINE=InnoDB AUTO_INCREMENT=27 DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci; +INSERT INTO `faction_alliances` (`id`, `faction_id`, `friend_faction`, `hostile_faction`) VALUES + (1, 11, 0, 12), + (2, 12, 0, 11), + (3, 21, 0, 22), + (21, 34, 0, 1), + (26, 34, 0, 35), + (23, 34, 0, 36), + (25, 34, 0, 354), + (15, 102, 0, 116), + (18, 102, 0, 120), + (16, 116, 0, 102), + (14, 116, 0, 117), + (17, 120, 0, 102), + (19, 214, 0, 33), + (12, 250, 0, 144), + (13, 250, 143, 0), + (9, 288, 0, 289), + (24, 354, 0, 34); +INSERT INTO `table_versions` (`name`,`version`,`download_version`) values ('faction_alliances',1,0); +UPDATE `table_versions` SET `download_version`=1 WHERE `name`='faction_alliances'; +DROP TABLE IF EXISTS `factions`; +CREATE TABLE IF NOT EXISTS `factions` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `name` varchar(64) COLLATE latin1_general_ci NOT NULL DEFAULT '', + `type` varchar(32) COLLATE latin1_general_ci NOT NULL DEFAULT '', + `description` text COLLATE latin1_general_ci NOT NULL, + `default_level` mediumint(9) NOT NULL DEFAULT '0', + `negative_change` smallint(5) unsigned NOT NULL DEFAULT '100', + `positive_change` smallint(5) unsigned NOT NULL DEFAULT '75', + PRIMARY KEY (`id`) +) ENGINE=InnoDB AUTO_INCREMENT=356 DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci; +INSERT INTO `factions` (`id`, `name`, `type`, `description`, `default_level`, `negative_change`, `positive_change`) VALUES + (1, 'Scowls (KOS)', 'Generic', 'This is a generic faction level for the emu. Assigning an npc to that faction level allows them to show up with whatever con you wish without creating a new faction for each one.', 0, 0, 0), + (2, 'Threatening', 'Generic', 'This is a generic faction level for the emu. Assigning an npc to that faction level allows them to show up with whatever con you wish without creating a new faction for each one.', 0, 0, 0), + (3, 'Dubious', 'Generic', 'This is a generic faction level for the emu. Assigning an npc to that faction level allows them to show up with whatever con you wish without creating a new faction for each one.', 0, 0, 0), + (4, 'Apprehensive ', 'Generic', 'This is a generic faction level for the emu. Assigning an npc to that faction level allows them to show up with whatever con you wish without creating a new faction for each one.', 0, 0, 0), + (5, 'Indifferent', 'Generic', 'This is a generic faction level for the emu. Assigning an npc to that faction level allows them to show up with whatever con you wish without creating a new faction for each one.', 0, 0, 0), + (6, 'Amiably', 'Generic', 'This is a generic faction level for the emu. Assigning an npc to that faction level allows them to show up with whatever con you wish without creating a new faction for each one.', 0, 0, 0), + (7, 'Kindly', 'Generic', 'This is a generic faction level for the emu. Assigning an npc to that faction level allows them to show up with whatever con you wish without creating a new faction for each one.', 0, 0, 0), + (8, 'Warmly', 'Generic', 'This is a generic faction level for the emu. Assigning an npc to that faction level allows them to show up with whatever con you wish without creating a new faction for each one.', 0, 0, 0), + (9, 'Ally', 'Generic', 'This is a generic faction level for the emu. Assigning an npc to that faction level allows them to show up with whatever con you wish without creating a new faction for each one.', 0, 0, 0), + (10, 'The GM\'s of EQ2Emulator', 'Misc', 'Faction that makes GMs everyone\'s friend!', 0, 0, 0), + (11, 'The City of Qeynos', 'City Factions', 'The City of Qeynos', 0, 0, 0), + (12, 'The City of Freeport', 'City Factions', 'The City of Freeport', 0, 0, 0), + (13, 'The City of Neriak', 'City Factions', 'The City of Neriak', 0, 0, 0), + (14, 'The City of Kelethin', 'City Factions', 'The City of Kelethin', 0, 0, 0), + (15, 'Exile', 'City Factions', 'Exile', 0, 0, 0), + (16, 'The City of New Halas', 'City Factions', 'The City of New Halas', 0, 0, 0), + (17, 'The City of Gorowyn ', 'City Factions', 'The City of Gorowyn', 0, 0, 0), + (21, 'TutorialFaction1', 'Generic', 'This is a generic faction to assign to tutorial island inhabitants to oppose TutorialFaction2.', 0, 0, 0), + (22, 'TutorialFaction2', 'Generic', 'This is a generic faction to assign to tutorial island inhabitants to oppose TutorialFaction1.', 0, 0, 0), + (31, 'Alpha Testers', 'Misc', '', 0, 0, 0), + (32, 'Beta Testers', 'Misc', '', 0, 0, 0), + (33, 'City Rats', 'Never Seen', 'City rats. No players should have this faction.', 0, 0, 0), + (34, 'Neutral Guard Faction', 'Generic', 'Generic faction for neutral guards', 0, 0, 0), + (35, 'Indifferent - Player', 'Generic', 'Generic faction for non-aggressive mobs, so guards will attack.', 0, 0, 0), + (36, 'Scowls - Player', 'Generic', 'This faction is conned -50000 to players', -50000, 0, 0), + (37, 'Threatening - Player', 'Generic', 'This faction is conned -30000 to players', -30000, 0, 0), + (38, 'Dubious - Player', 'Generic', 'This faction will con -20000 to players.', -20000, 0, 0), + (39, 'Apprehensive - Player', 'Generic', 'This faction will con -10000 to players.', -10000, 0, 0), + (40, 'Amiably - Player', 'Generic', 'This faction will con +10000 to players', 10000, 0, 0), + (41, 'Kindly - Player', 'Generic', 'This faction will con +20000 to players', 20000, 0, 0), + (42, 'Warmly - Player', 'Generic', 'This faction will con +30000 to players', 30000, 0, 0), + (43, 'Ally - Player', 'Generic', 'This faction will con +50000 to players', 50000, 0, 0), + (44, 'Good Guard', 'Generic', 'This is a generic faction for Good guards.', 0, 0, 0), + (45, 'Evil Guard', 'Generic', 'This is a generic faction for Evil guards.', 0, 0, 0), + (101, 'The Coalition of Tradesfolke', 'Shattered Lands', 'The Coalition of Tradesfolke is the ruling trade organization of Freeport. They oversee all trade operations of Freeport and do away with any competition with extreme prejudice.', 0, 0, 0), + (102, 'The Freeport Militia', 'Shattered Lands', 'The Freeport Militia is the defensive force of Freeport. This merciless fighting force defends the walls of Freeport as well as the borderlands of the great city.', 0, 0, 0), + (103, 'The Seafury Buccaneers', 'Shattered Lands', 'This was once a lawless pirate organization that terrorized the Shattered Lands. These pirates now fly the flag of Freeport and act as the Overlord\'s savage armada. ', 0, 0, 0), + (104, 'The Academy of Arcane Science', 'Shattered Lands', 'The Academy of Arcane Science is one of the oldest and most esteemed schools of knowledge on Norrath. They make their home in Freeport where they are free to delve into arts that are forbidden in most societies.', 0, 0, 0), + (105, 'The Dismal Rage', 'Shattered Lands', 'The Dismal Rage is the religious foundation of Freeport. This organization pays homage to the darker powers of Norrath, the principles of Fear, Hate, and War.', 0, 0, 0), + (106, 'The Kromise', 'Shattered Lands', 'Thundering across the frigid tundra of Everfrost is the Kromise, giants formed of frost and ice. These titanic brutes have long claimed the chilly northlands and will not tolerate the presence of outlanders. ', 0, 0, 0), + (107, 'The Order of the Blade', 'Shattered Lands', 'These fierce maidens of the cold blade are rumored to be the children of the Ice Goddess, E\'ci. They believe that only through intense combat and challenge can true honor be obtained.', 0, 0, 0), + (108, 'The Guardians of Thyr', 'Shattered Lands', 'Deep within the fiery abyss of the volcanic lands dwell the Guardians of Thyr, cruel fire giants. From an underworld they call Thyr they act as the frontline defense of their master, the red dragon, Lord Nagafen.', 0, 0, 0), + (109, 'The Court of the Master Djinn', 'Desert of Ro', '', 0, 0, 0), + (110, 'The Steppes Settlers', 'Shattered Lands', 'The residents of the Thundering Steppes once lived solitary lives, but the ravages of war and the wrath of nature have brought the settlers together to form this well-organized, yet loose-knit, society. ', 0, 0, 0), + (111, 'The Great Herd', 'Shattered Lands', 'Roaming across the plains of the Thundering Steppes is the centaur society known only as the Great Herd. These centaurs have learned to live off the land and trust no one if they wish to survive the perils of the Age of Destiny.', 0, 0, 0), + (112, 'The Seamist Faeries', 'Shattered Lands', 'These fairyfolke have long existed in the magical woodlands of the Enchanted Lands. Though these fairies generally maintain a docile nature, a few of their ilk have been driven to rage in an attempt to survive in a homeland ravaged by evil forces.', 0, 0, 0), + (113, 'The Enchanted Reapers', 'Shattered Lands', 'The Enchanted Reapers are the evil horde of beasts that invaded the Enchanted Lands. Their origin is a mystery. Their malevolent actions have brought sorrow upon a land once filled with happiness.', 0, 0, 0), + (114, 'The Guardians of the Vale', 'Shattered Lands', 'The once large halfling nation has been reduced to a few staunch stouts that strive to exist within the Enchanted Lands. These are the Guardians of the Vale, a peaceful people forced to raise arms in order to defend against the evil that has overtaken their homeland.', 0, 0, 0), + (115, 'The Runnyeye Goblins', 'Shattered Lands', 'The Runnyeye Goblins have long been subjugated by their evil eye taskmasters, forced to toil and do battle at the whim of their powerful overlords. They can often be found salvaging what others would call refuse and bringing it back to their underground forges to be reshaped into tools of war.', 0, 0, 0), + (116, 'The Dervish Cutthroats', 'Shattered Lands', 'The Dervish Cutthroats are said to be the largest bandit organization that ever existed. They have long since terrorized settlers and travelers of the overland. These bandits can be found throughout the Shattered Lands, but they are most prevalent in the Commonlands.', -40000, 100, 50), + (117, 'The Far Seas Trading Company', 'Shattered Lands', 'The Far Seas Trading Company rose to great heights during the Age of Cataclysms, created from the union of surviving seafarers. Their flotillas now act as a lifeline between societies great and small, often rescuing survivors while gathering resources within the Shattered Lands.', 0, 100, 50), + (118, 'The Greenhoods', 'Shattered Lands', 'The Greenbloods are an elite band of resistance fighters located on the Orcish Wastes. Before the Shattering, this force was a highly mobile regiment of the Qeynos Guard. They have since broken off to form their own organization while still aiding Qeynos however possible.', 0, 0, 0), + (119, 'The Deathfist Orcs', 'Shattered Lands', 'The Deathfist Empire is one of the greatest threats to the civilized societies of the Shattered Lands. This orc empire maintains a vast war machine that has claimed Zek, a former resource-rich forest island, as their new base of operations.', 0, 0, 0), + (120, 'The Bloodskull Orcs', 'Shattered Lands', 'The Bloodskull Orcs are a relatively new clan of orcs that has begun to operate near the city of Freeport. Unlike the larger orc empires, the Bloodskulls do not seem to have a fortified capital nor do they seem to be interested in conquest.', -40000, 100, 50), + (121, 'The Ree Orcs', 'Shattered Lands', 'The Ree Raiders are a small clandestine band of orcs that operate somewhere on the continent of D\'Lere. They are plunderers that will seize goods to use as trade with any organization that will do business with them.', 0, 0, 0), + (122, 'The Sabertooth Gnolls', 'Shattered Lands', 'The Sabertooth Clan is the largest known clan of gnolls inhabiting the Shattered Lands. These gnolls are comprised of many smaller packs that have banded together to bring about the end of the great cities of men, whom they have viewed as an eternal foe.', 0, 0, 0), + (123, 'The Evol Ew Lizardmen', 'Shattered Lands', 'The Alliz Evol Ew are a savage tribe of lizardmen that inhabit the jungles of the Feerrott. They worship the influence of Fear which directs them to defend the island and its monuments from any invader. They are cousins to the cannibalistic Alliz Tae Ew.', 0, 0, 0), + (124, 'The Tae Ew Lizardmen', 'Shattered Lands', 'The Alliz Tae Ew are a cannibalistic race of lizardmen that live within the jungle of the Feerrott. These lizards are members of a cult of Fear called Thulians. They are cousins to the Alliz Evol Ew, whom they often feed upon as their dark lords instruct them to.', 0, 0, 0), + (125, 'The Thexians', 'Shattered Lands', 'The Thexians are dark elves that promote the return of traditional ways of the Teir\'Dal, something that has vanished since their refuge within the walls of Freeport, a city of men. The Thexians operate in secrecy and seek only the alliance of Teir\'Dal.', 0, 0, 0), + (126, 'The Asilian Fairies', 'Shattered Lands', 'These faeries are a once demure community of fairies that now fight to survive in Nektulos Forest since being driven from the cataclysms of the Underfoot. They now find themselves in a war for resources with a fellow fairy community of Sullian Fairies. ', 0, 0, 0), + (127, 'The Sullian Fairies', 'Shattered Lands', 'The Sullians are a community of fairies that have been driven from their subterranean homelands and now fight for survival within Nektulos Forest. They now find themselves in a war for resources with a fellow fairy community of Asilian Fairies.', 0, 0, 0), + (128, 'The Aravu Naga', 'Desert of Ro', 'The Aravu Naga are a small group of exiles from the Shimmering Citadel. After being banished by the Djinn, they now only seek to right that single wrong.', 0, 0, 0), + (129, 'The Kaentrik Bards', 'Desert of Ro', 'The Kaentrik Bards are a group of famous master bards from the old age. They have gathered together to fight against the Djinn after learning the horrid secrets of what happens within the Shimmering Citadel.', 0, 0, 0), + (130, 'The Court of the Blades', 'Desert of Ro', 'The Court of the Blades is ruled by the Caliph of the Blades, Dukarem. Their primary responsibility is the protection of the city from the hostile creatures of the desert, chief of which are the orcs of Rujark.', 0, 0, 0), + (131, 'The Court of Truth', 'Desert of Ro', 'The Court of Truth is led by the Caliph of Truth, Ishara. Their primary responsibility is to gather and maintain the knowledge of the Dervish people. They also are heavily involved in the law making associated with the Arena Games.', 0, 0, 0), + (132, 'The Court of the Coin', 'Desert of Ro', 'The Court of the Coin is led by the Caliph of the Coin, Neriph. They control the flow of money in the city, including merchant transactions, banking, and wagering. The Golden Scepter is the center of the Dervin economy.', 0, 0, 0), + (133, 'Maj\'Dul Citizens', 'Desert of Ro', 'The citizens of Maj\'Dul can very easily trace their ancestry back to the Dervish cutthroats that roamed the Desert of Ro centuries ago.', 0, 0, 0), + (134, 'The Rujarkian Orcs', 'Desert of Ro', 'The Rujarkian Empire is one of the largest and mightiest orc empires on Norrath. They have sway over all other orc empires great and small. The Rujarkians maintain a vast fortress homeland built into what is left of the great Rujarkian Hills.', 0, 0, 0), + (135, 'The Ironforge Exchange', 'Shattered Lands', 'Overseeing all trade operation of Qeynos is the Ironforge Exchange. This is an ancient trade organization ruled by one of the most affluent trade families of the Kingdom of Qeynos. ', 0, 0, 0), + (136, 'The Concordium', 'Shattered Lands', 'The Concordium consider themselves the keepers of the arcane arts. They wield their magic in defense of Qeynos and continue their research in arcane arts that may be used to better all Norrathians.', 0, 0, 0), + (138, 'Academy of Logistics ', 'Misc', '', 0, 0, 0), + (139, 'Agents of Neriak ', 'Misc', '', 0, 0, 0), + (140, 'The Alliz Raef Ew ', 'Desert of Ro', 'The Alliz Raef Ew are an unusual tribe of lizardmen that has come to dwell within the Desert of Ro. They have adapted to this arid environment, using the unfortunate victims of the inhospitable desert as a means of survival. Their reason for being centers around their god, a mythical giant reptile.', 0, 0, 0), + (141, 'The Anaz Mal Gnolls ', 'Desert of Ro', 'The Anaz Mal is a relatively obscure and hostile gnoll clan that dwells in the Desert of Ro. These gnolls have adapted to the hot environments of the desert. They have an unusual affinity towards all things undead.', 0, 0, 0), + (142, 'The Arcanists of Tunaria ', 'Misc', '', 0, 0, 0), + (143, 'The Ashen Disciples ', 'Desert of Ro', 'The Ashen Disciples are the result of a philosophical split within the Ashen Order. Abandoning the virtues of tranquility and wisdom in favor of strength and discipline, these monks deny the existence of the old gods and seek to gain greater temporal power through strength of arms.', 0, 0, 0), + (144, 'The Ashen Order ', 'Desert of Ro', 'The Ashen Order is one the oldest monk clans on Norrath, credited with establishing many of the founding principles of the monk. They removed themselves from society decades ago to seek a more humble life within their desert fortress of T\'Narev.', 0, 0, 0), + (145, 'The Awakened ', 'Kingdom of Sky', 'Located within the floating islands of the Overrealm known as Dragon Isles, this alliance of powerful dragonkind threatens to take over all of Norrath.', 0, 0, 0), + (146, 'Bathezid\'s Watch ', 'Kunark', 'Named for a former Overking of Chardok, Bathezid\'s Watch has managed to stand against the Sathirian Empire against all odds.', 0, 0, 0), + (147, 'Bazzt Bzzt Bixie Brood ', 'Shattered Lands', 'Descended from the great bixie queen, Bazzt Bzzt of the Plane of Sky, this bixie brood has recently found themselves in the Overrealm of Norrath.', 0, 0, 0), + (148, 'The Bellywhumpers ', 'Kunark', 'A small tribe of burynai who have been pushed out of their home in the Field of Bone by their rivals, the Bonediggers.', 0, 0, 0), + (149, 'Bertoxxulous ', 'Deity', 'The favor of Bertoxxulous, the Plaguebringer.', 0, 0, 0), + (150, 'The Blackshield Smugglers ', 'Shattered Lands', 'This band of smugglers based out of the Commonlands are gaining in both wealth and power. The source of their sudden increase in capital is unknown.', 0, 0, 0), + (151, 'The Blacktalon ', 'Kingdom of Sky', 'Located within the desert islands of the Barren Sky, this clan of Aviaks is made up of loyal servants to the empire of the Awakened.', 0, 0, 0), + (152, 'Brell Serilis ', 'Misc', '', 0, 0, 0), + (153, 'Bristlebane ', 'Deity', 'The favor of Bristlebane, the King of Thieves.', 0, 0, 0), + (154, 'Cazic-Thule ', 'Deity', 'The favor of Cazic-Thule, the god of Fear.', 0, 0, 0), + (155, 'The Celestial Watch ', 'Shattered Lands', 'Acting as a beacon of benevolence, the Celestial Watch is the religious backbone of the Kingdom of Qeynos. This order praises the gods of Love, Valor, and Honor.', 0, 0, 0), + (156, 'The Char\'Gin ', 'Desert of Ro', 'The Char\'Gin is a tribe of desert nomads that roams the desert lands of Ro. They are one of the affluent tribes of the desert and much of their wealth has come from their gift of mining. ', 0, 0, 0), + (157, 'The Circle of the Unseen ', 'Misc', '', 0, 0, 0), + (159, 'The City of Jinisk ', 'Kunark', '', 0, 0, 0), + (160, 'Clan Brokenskull ', 'Moors of Ykesha', 'In a constant battle with the other factions of the Moors of Ykesha, Clan Brokenskull aims to take the island once and for all.', 0, 0, 0), + (161, 'Clan Crushbone ', 'Faydwer', 'The savage and cunning orcs of Clan Crushbone have long posed a threat to the inhabitants of Faydwer, maintaining one of the oldest and most feared orc empires on all of Norrath.', 0, 0, 0), + (162, 'Clan Grobb ', 'Moors of Ykesha', 'Despite battling many enemies, the trolls of Grobb have managed to hold on to their city and keep their culture alive.', 0, 0, 0), + (163, 'Clan Skleross ', 'Kunark', 'Clan Skleross is a separatist clan of the scorpikis that have found that they came from something more. They have decided to no longer do the bidding of Venril Sathir.', 0, 0, 0), + (164, 'Clan Smokehorn ', 'Faydwer', 'An honorable but deadly clan of minotaur that reside in the Steamfont Mountains. Victims of past slave raids, they are extremely cautious of strangers, however, their trust can be earned.', 0, 0, 0), + (165, 'Clan Stormshield ', 'Kunark', 'The Stormshield brothers are avid hunters and warriors. Training with them could prove beneficial down the line!', 0, 0, 0), + (166, 'Clan Ykesha ', 'Misc', '', 0, 0, 0), + (167, 'The Court of Al\'Afaz ', 'Desert of Ro', 'The denizens of the Court of Al\'Afaz are as mysterious as they are powerful.', 0, 0, 0), + (168, 'The D\'Vinnian Court ', 'Faydwer', 'Emperor D\'Vinn rules over the orcs of Clan Crushbone and leads the remnants of the Thexian army that once threatened to conquer all of Faydwer.', 0, 0, 0), + (169, 'Dalnir\'s Wheel Taskmasters ', 'Kunark', '', 0, 0, 0), + (170, 'The Dark Bargainers ', 'Shattered Lands', 'The Dark Bargainers are the trade society of the Dark Elves. They are a very religious society and offer a portion of their profits to the temple of Innoruuk.', 0, 0, 0), + (171, 'Disciples of Wu ', 'Faydwer', 'Said to be the first and greatest of all human monks, Wu the Enlightened first came to the Lesser Faydark centuries ago and established a small camp. He spent years studying the ways of Nature, enjoying the solitude of the region. He became known as a true friend of the Fay folk, honoring their ways and keeping the roads clear of the orcs who posed a threat in those years.', 0, 0, 0), + (172, 'The Dreadnaught ', 'Misc', '', 0, 0, 0), + (173, 'Drednever Expedition ', 'Kingdom of Sky', 'Before the Shattering, the Observers of Ak\'Anon tasked the famous explorers Dabner Drednever and Ognit Eznertob with forming an expedition to explore new and uncharted lands.', 0, 0, 0), + (174, 'Exiles of Droga ', 'Kunark', 'A small tribe of goblins expelled from their home for the continued use of magic.', 0, 0, 0), + (175, 'Fae of Kelethin ', 'Faydwer', 'A semi-formal alliance of the residents of Kelethin, whether Fae or not.', 0, 0, 0), + (176, 'Far Seas Supply Division ', 'Misc', '', 0, 0, 0), + (177, 'Far Seas Trading Company ', 'Misc', '', 0, 0, 0), + (178, 'The Forsaken City ', 'Island of Mara', '', 0, 0, 0), + (179, 'The Fugutr Tribe ', 'Faydwer', 'The devout Satyr followers of Tunare found within the Lesser Faydark. This tribe of creatures originally from the Plane of Growth are found still protecting the various shrines and relics of Tunare.', 0, 0, 0), + (180, 'Gazers of the Overrealm ', 'Kingdom of Sky', 'The origin of these magical entities is a mystery. The answer may lie among the ruins of the Rending.', 0, 0, 0), + (181, 'Gloompall Fairies ', 'Kingdom of Sky', 'These sinister fairies have made a home in the Tenebrous Tangle. Their alliance with the Gazers may not be as solid as it appears.', 0, 0, 0), + (182, 'Goblins of Fire Peak ', 'Shattered Lands', 'This tribe of fire goblins have made their home in the burning caverns of Solusek\'s Eye.', 0, 0, 0), + (183, 'The Green Hoods ', 'Shattered Lands', 'The Green Hoods are an elite band of resistance fighters located on the Orcish Wastes. Before the Shattering, this force was a highly mobile regiment of the Qeynos Guard. They have since broken off to form their own organization while still aiding Qeynos whenever possible.', 0, 0, 0), + (184, 'Guktan Guard ', 'Moors of Ykesha', 'Though ousted from Guk, the Frogloks still consider it their homeland. Until it is reclaimed, they base themselves in the tree city of Tupta.', 0, 0, 0), + (185, 'The Gwalnax Brigade ', 'Misc', '', 0, 0, 0), + (186, 'Hidden Plunderers\' Camp ', 'Kunark', '', 0, 0, 0), + (187, 'House of Falling Stars ', 'Faydwer', 'Fae clerics believe in ultimately in Tunare but also the power of the Stars. The alignment of constellations can help to divine how things will change.', 0, 0, 0), + (188, 'Innoruuk ', 'Misc', '', 0, 0, 0), + (189, 'The Irontoe Brigade ', 'Faydwer', 'Tumpy\'s pals.', 0, 0, 0), + (190, 'Karana ', 'Misc', '', 0, 0, 0), + (191, 'Kunzar Jungle Villagers ', 'Kunark', '', 0, 0, 0), + (192, 'The League of Freethinkers ', 'Faydwer', 'The League of Freethinkers is a mysterious and loose-knit organization of hunters. Membership into this secret society is rare and only by invitation. They can be encountered throughout Norrath. What they hunt is unknown.', 0, 0, 0), + (193, 'Legion of Danak ', 'Kunark', 'The mighty Legion of Danak is under direct order of Dominus Ganak. They completely control the Danak Shipyard and its harbor. They are at constant war with the Ring of Scale.', 0, 0, 0), + (194, 'The Lost Children of Marr ', 'Kingdom of Sky', 'Taken by the young dragon Venekor to the Overrealm as prizes and servants, these frogloks have begun to slip from his grasp.', 0, 0, 0), + (195, 'The Lucanic Knights ', 'Shattered Lands', 'The Lucanic Knights are an order of elite knights who live to serve the Overlord of Freeport. These knights are rarely seen beyond the walls of the Twilight Citadel, Lucan\'s seat of power.', 0, 0, 0), + (196, 'The Lyrech ', 'Faydwer', 'The Lyrech are a splinter group of werewolves that refuse to serve Mistmoore and instead seek to control their own destiny.', 0, 0, 0), + (197, 'The Marked ', 'Shattered Lands', 'A secretive and silent group, the membership of the Marked seems to be entirely ratonga. While it is unknown what goals this group pursues, they will without a doubt bring trouble to the other races of Norrath.', 0, 100, 50), + (198, 'Mistmoore ', 'Faydwer', 'The minions, agents and associates of Mayong Mistmoore, Dark Lord of the Loping Plains.', 0, 0, 0), + (199, 'Mithaniel Marr ', 'Deity', 'The favor of Mithaniel Marr, god of Valor.', 0, 0, 0), + (200, 'Mountain Throms of Mok Island', 'Kunark', 'Reclusive and untrustworthy, the Mountain Throms of Mok Island are largely avoided by others.', 0, 0, 0), + (201, 'Muckflick Goblins ', 'Misc', '', 0, 0, 0), + (202, 'The Myntr Tribe ', 'Faydwer', 'A tribe of Satyrs that live in the mountains above New Tunaria.', 0, 0, 0), + (203, 'Myre\'Dal ', 'Faydwer', 'The Myre\'Dal outcasts that have come to realize what they are and are actively working to stop the process from happening to any others.', 0, 0, 0), + (204, 'The Mystic Guardians ', 'Island of Mara', 'The druidic creatures of the Mystic Guardians are devoted to protecting their surroundings from any sort of corruption that threatens the island of Mara.', 0, 0, 0), + (205, 'New Tunarian Citizens ', 'Faydwer', 'Citizens of New Tunaria.', 0, 0, 0), + (206, 'The Nizari ', 'Island of Mara', '', 0, 0, 0), + (207, 'Nybright Family ', 'Faydwer', 'The Nybright sisters who established this camp in the Age of Turmoil have raised a new generation of thieves. From this base of operations, they make excursions into the Greater Faydark to steal supplies from Kelethin and from the camps of rival bandit clans. Since the rise of the Fay influence in this region discourages outsiders from entering the forest, the Nybrights have little fear of reprisal from outside forces.', 0, 0, 0), + (208, 'Order of Arcane ', 'Faydwer', 'Science and magic combine in the Order\'s chambers, allowing its members to focus their energies on ancient studies to improve Growth and vitality.', 0, 0, 0), + (209, 'The Order of Marr ', 'Shattered Lands', 'Not much is known of this ancient order that sprang from the early followers of the gods of Love and Valor, Mithaniel and Erollisi Marr.', 0, 0, 0), + (210, 'The Ortallians ', 'Desert of Ro', 'The Ortallians are a desert dwelling caste of fanatical followers of the Solusek Ro, a deity of flames. This small caste sprang ages ago from a crusade started by a valorous orc named Ortallius.', 0, 0, 0), + (211, 'Outer Sebilis Residents ', 'Kunark', '', 0, 0, 0), + (212, 'Pirates of Gunthak ', 'Island of Mara', 'These merciless brutes sail the seas of Norrath seeking weaker targets whose resources they can plunder. They have been known to go to great lengths to obtain rare and valuable treasure.', 0, 0, 0), + (213, 'Protectors of Growth ', 'Faydwer', 'Named directly after the guardians of the Plane of Growth, these Protectors maintain their skills to protect and defend Kelethin and the Fae.', 0, 0, 0), + (214, 'The Qeynos Guard ', 'Shattered Lands', 'The Qeynos Guard is the valorous defensive force of the Kingdom of Qeynos. They defend the city and residents of not only Qeynos, but also any ally of Qeynos on the continent of Karana. ', 0, 0, 0), + (215, 'Quellious ', 'Deity', 'The favor of Quellious, the goddess of Tranquility.', 0, 0, 0), + (216, 'Rallos Zek ', 'Misc', '', 0, 0, 0), + (217, 'Residents of Teren\'s Grasp ', 'Kunark', 'The remnants of the Overthere and Firiona Vie that have banded together after the shattering by the will of Teren, their highelf Paladin leader.', 0, 0, 0), + (218, 'Riliss ', 'Kunark', 'The city of Riliss, home to General Rile and bastion of the Sathirian Empire within the Fens of Nathsar.', 0, 0, 0), + (219, 'Ring of Ratillik ', 'Misc', '', 0, 0, 0), + (220, 'The Ring of Scale ', 'Misc', '', 0, 0, 0), + (221, 'Rodcet Nife ', 'Misc', '', 0, 0, 0), + (222, 'The Royal Antonican Guard ', 'Shattered Lands', 'The Royal Antonican Guard is the elite order that protects the ruler of Qeynos, Queen Antonia Bayle. These knights are rarely seen beyond the walls of Qeynos Castle. ', 0, 0, 0), + (223, 'Ry\'zilk\'s Renegades ', 'Kunark', '', 0, 0, 0), + (224, 'Sanctum of Scale ', 'Misc', '', 0, 0, 0), + (225, 'The Sandscrawlers ', 'Desert of Ro', 'The Sandscrawlers are a clan of goblins located in the Pillars of Flame. They are terrible diplomats and tend to eat anything that they happen to kill.', 0, 0, 0), + (226, 'Sathirian ', 'Kunark', 'The residents and followers of Venril Sathir that reside within the newly rebuilt city of Sebilis.', 0, 0, 0), + (227, 'The Sel\'Nok Brigade ', 'Kunark', 'This is a Division of the Di’Zok Legion that has hidden away in the Jarsath Wastes, looking for information. What information they search for is unknown at this point.', 0, 0, 0), + (228, 'Solusek Ro ', 'Misc', '', 0, 0, 0), + (229, 'Sootfoot Goblins ', 'Misc', '', 0, 0, 0), + (230, 'Splitpaw Gnolls ', 'Misc', '', 0, 0, 0), + (231, 'The Strifewing ', 'Kingdom of Sky', 'Located within the desert islands of the Barren Sky, this clan of Vultaks is in constant conflict with the local Aviak clan known as the Blacktalon.', 0, 0, 0), + (232, 'Survival Accord ', 'Moors of Ykesha', 'The Trolls of Grobb and the Frogloks formerly of Guk formed this alliance to defeat their common enemies.', 0, 0, 0), + (233, 'The Swiftrider Mercenaries ', 'Desert of Ro', 'The Swiftrider Mercenaries are the life line between the warring factions of nomads found in the Desert of Ro. Their only goal is to make a gold.', 0, 0, 0), + (234, 'Sylvan Hunters ', 'Faydwer', 'The scout guild is in place to survey the land for threats and report them to the leadership of the Fae.', 0, 0, 0), + (235, 'Synod Reet ', 'Kunark', 'The remnants of the frogloks once enslaved by Trakanon have once again come under tyrannical rule by Venril Sathir. These frogloks have turned to Bertoxxulous for power with the hopes that disease will poison their masters and allow them freedom once more.', 0, 0, 0), + (236, 'Tabernacle of Pain ', 'Kunark', '', 0, 0, 0), + (237, 'The Temple of Scale ', 'Kingdom of Sky', 'The Temple of Scale is made up of the zealous religious followers of the Awakened. The leader of the Temple is Harla Dar, high priestess of this mysterious dragon clan dwelling in the clouds.', 0, 0, 0), + (238, 'The Thalz\'Iz\'Zaz Lizardmen ', 'Misc', '', 0, 0, 0), + (239, 'Thulian Knights ', 'Shattered Lands', 'Crusaders of Fear, the amygdalans continue their directive to spread terror among all things.', 0, 0, 0), + (240, 'The Tribunal ', 'Misc', '', 0, 0, 0), + (241, 'Tunare ', 'Deity', 'The favor of Tunare, the goddess of Growth.', 0, 0, 0), + (242, 'Tunare\'s Pages ', 'Faydwer', 'Nimble of mind and hand, the Fae\'s crafters bond together to work in harmony with one another and with nature.', 0, 0, 0), + (243, 'The Tunarian Alliance ', 'Shattered Lands', 'Taking their name from the goddess of nature, the Tunarian Alliance act as the elite scouts of Qeynos and defenders of the laws of nature. They are comprised of rangers and druids from throughout the Shattered Lands. ', 0, 0, 0), + (244, 'Underpaw Gnolls ', 'Misc', '', 0, 0, 0), + (245, 'The Watchers of Timorous ', 'Misc', '', 0, 0, 0), + (246, 'The Whistling Fists Clan ', 'Island of Mara', 'Founded centuries ago by the legendary Zan Fi, the Whistling Fists Clan was the original order of monks on Norrath. They refused to become an arm of the Combine Empire and sought solitude on the isolated island of Mara.', 0, 0, 0), + (247, 'The Windgazer ', 'Kingdom of Sky', 'The Windgazers are a small clan of Hooluks that live in seclusion within the isles of the Barren Sky. They hide themselves to avoid being constantly hunted by more aggressive and powerful aviak clans such as the Blacktalon and Strifewing.', 0, 0, 0), + (248, 'The Windsisters ', 'Desert of Ro', 'The Windsisters are a group of harpies dwelling in the Pillars of Flame. Be careful, as harpies are known to kill you just so they can eat your heart.', 0, 0, 0), + (249, 'Frogloks of Krupp', 'Kunark', 'The frogloks of Krupp have been enslaved by the Sathirian Empire, and are now traded as workers throughout Kunark.', 0, 0, 0), + (250, 'The Dreadnaughts', 'Shattered Lands', 'The Dreadnaughts are a brutal mob of bruisers who have dominated all other gangs within Freeport. Founded upon the principles of strength and intimidation, the Dreadnaughts act as the Overlord\'s enforcers to control the streets and alleyways of the city.', 0, 0, 0), + (251, 'The Minions of Fear', 'Shattered Lands', 'The Minions of Fear are creatures that are brought forth from the Gate of Fear.', 0, 0, 0), + (252, 'Doomwing Legion', 'Kingdom of Sky', 'Located in the desolate wasteland of the Bonemire, the Doomwing Legion is led by the powerful dragon Lord Vyemm.', 0, 0, 0), + (253, 'The Spirits of Marr', 'Shattered Lands', 'The Spirits of Marr were once a noble order known as the Knights of Truth. Slain by Sir Lucan D\'Lere and the Freeport Militia, their spirits have been bound eternally to the Freeport Graveyard.', 0, 100, 0), + (254, 'Arcanists of Tunaria', 'Faydwer', 'A sect of powerful mages and sorcerers that operate within New Tunaria.', 0, 0, 0), + (255, 'Nuknok Clan', 'Shattered Lands', 'The Nuknok Clan of boarfiends in the Moors of Ykesha have an alliance with Clan Brokenskull.', 0, 0, 0), + (256, 'Anashti Sul', 'Misc', '', 0, 0, 0), + (257, 'Anaz Mal Gnolls', 'Misc', '', 0, 0, 0), + (258, 'Aravu Naga', 'Misc', '', 0, 0, 0), + (259, 'Brethren of Night', 'Misc', '', 0, 0, 0), + (260, 'Citizens of New Tunaria', 'Misc', '', 0, 0, 0), + (261, 'Darkpaw Gnolls', 'Misc', '', 0, 0, 0), + (262, 'Deep Sporali', 'Misc', '', 0, 0, 0), + (264, 'Hand of Marr', 'Misc', '', 0, 0, 0), + (265, 'Kromise', 'Misc', '', 0, 0, 0), + (266, 'Lost Children of Marr', 'Misc', '', 0, 0, 0), + (267, 'Ortallians', 'Misc', '', 0, 0, 0), + (269, 'Sandscrawlers', 'Misc', '', 0, 0, 0), + (270, 'Scholars of the Lost', 'Misc', '', 0, 0, 0), + (271, 'Sporali Collective', 'Misc', '', 0, 0, 0), + (272, 'Strifewing', 'Misc', '', 0, 0, 0), + (273, 'Swiftrider Mercenaries', 'Misc', '', 0, 0, 0), + (274, 'Temple of Scale', 'Misc', '', 0, 0, 0), + (276, 'The Bloodsabers', 'Misc', '', 0, 0, 0), + (277, 'The Bonediggers', 'Misc', '', 0, 0, 0), + (278, 'The Claws of Veeshan', 'Misc', '', 0, 0, 0), + (279, 'The Cult of the Arisen', 'Misc', '', 0, 0, 0), + (280, 'The House of Falling Stars', 'Misc', '', 0, 0, 0), + (281, 'The Indigo Brotherhood', 'Misc', '', 0, 0, 0), + (282, 'The Order of Arcane', 'Misc', '', 0, 0, 0), + (283, 'The Protectors of Growth', 'Misc', '', 0, 0, 0), + (284, 'The Seamist Fairies', 'Misc', '', 0, 0, 0), + (285, 'The Sylvan Hunters', 'Misc', '', 0, 0, 0), + (286, 'Thullosian Warlord Clan', 'Misc', '', 0, 0, 0), + (287, 'The Deathfist Death Squadron', 'Faydwer', 'The Deathfist Death Squadron is an elite force of Deathfist orcs.', 0, 0, 0), + (288, 'Timorous Deep Raptors', 'Misc', '', 0, 0, 0), + (289, 'Timorous Deep SkyHunters', 'Misc', '', 0, 0, 0), + (341, 'Othmir of Velious', 'Destiny of Velious', 'Othmir of Velious', 0, 100, 75), + (343, 'The City of Thurgadin', 'Destiny of Velious', 'The City of Thurgadin', 0, 100, 75), + (345, 'Snowfang Gnolls', 'Destiny of Velious', 'A typically peaceful tribe. The Snowfang gnolls have carved out their existence fishing in the frigid waters of the Icy Fingers. Their tranquil lifestyle has recently been shattered, however, by increasing attacks from undead pouring from the nearby Tower of Frozen Shadow.', 0, 100, 75), + (353, 'Clan Thrael\'Gorr', 'Destiny of Velious', 'Enslaved for several generations, these former Ry\'Gorr orcs have all but forgotten the freedom and respect their Kromzek owners once gave them.', 0, 100, 75), + (354, 'Ry\'Gorr Orcs', 'Misc', 'Makes orcs attack the guards on Pilgrims\' Landing', -50000, 0, 0), + (355, 'Ravens of the North', 'Shattered Lands', 'The association of artisans dedicated to establishing New Halas beside the shrine of Erollisi Marr. Each new building erected in New Halas and each new item crafted to build the city is a mark of pride to the Ravens of the North.', 0, 0, 0); +INSERT INTO `table_versions` (`name`,`version`,`download_version`) values ('factions',1,0); +UPDATE `table_versions` SET `download_version`=1 WHERE `name`='factions'; +DROP TABLE IF EXISTS `flight_paths`; +CREATE TABLE IF NOT EXISTS `flight_paths` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `zone_id` int(10) unsigned NOT NULL, + `name` char(255) COLLATE latin1_general_ci NOT NULL, + `speed` float NOT NULL DEFAULT '0', + `flying` tinyint(3) unsigned NOT NULL DEFAULT '1', + `early_dismount` tinyint(3) unsigned NOT NULL DEFAULT '1', + PRIMARY KEY (`id`) +) ENGINE=InnoDB AUTO_INCREMENT=165 DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci; +INSERT INTO `table_versions` (`name`,`version`,`download_version`) values ('flight_paths',1,0); +DROP TABLE IF EXISTS `flight_paths_locations`; +CREATE TABLE IF NOT EXISTS `flight_paths_locations` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `flight_path` int(10) unsigned NOT NULL DEFAULT '0', + `x` float NOT NULL DEFAULT '0', + `y` float NOT NULL DEFAULT '0', + `z` float NOT NULL DEFAULT '0', + PRIMARY KEY (`id`) +) ENGINE=InnoDB AUTO_INCREMENT=12501 DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci; +INSERT INTO `table_versions` (`name`,`version`,`download_version`) values ('flight_paths_locations',1,0); +DROP TABLE IF EXISTS `groundspawn_items`; +CREATE TABLE IF NOT EXISTS `groundspawn_items` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `groundspawn_id` int(10) unsigned NOT NULL DEFAULT '1', + `item_id` int(10) unsigned NOT NULL DEFAULT '0', + `is_rare` tinyint(3) unsigned NOT NULL DEFAULT '0', + `grid_id` int(10) unsigned NOT NULL DEFAULT '0', + PRIMARY KEY (`id`), + KEY `FK_item_groundspawns` (`item_id`) +) ENGINE=InnoDB AUTO_INCREMENT=259 DEFAULT CHARSET=latin1 CHECKSUM=1 DELAY_KEY_WRITE=1 ROW_FORMAT=DYNAMIC; +ALTER TABLE `groundspawn_items` + ADD COLUMN `plus_rare_id` INT(10) UNSIGNED DEFAULT 0 NOT NULL AFTER `item_id`, + ADD COLUMN `percent` FLOAT UNSIGNED DEFAULT 0 NOT NULL AFTER `grid_id`; +INSERT INTO `table_versions` (`name`,`version`,`download_version`) values ('groundspawn_items',73030,0); +DROP TABLE IF EXISTS `groundspawns`; +CREATE TABLE IF NOT EXISTS `groundspawns` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `groundspawn_id` int(10) unsigned NOT NULL DEFAULT '0', + `min_skill_level` smallint(5) unsigned NOT NULL DEFAULT '1', + `min_adventure_level` smallint(5) unsigned NOT NULL DEFAULT '0', + `bonus_table` tinyint(1) unsigned NOT NULL DEFAULT '0', + `harvest1` float NOT NULL DEFAULT '70', + `harvest3` float NOT NULL DEFAULT '20', + `harvest5` float NOT NULL DEFAULT '8', + `harvest_imbue` float NOT NULL DEFAULT '1', + `harvest_rare` float NOT NULL DEFAULT '0.7', + `harvest10` float NOT NULL DEFAULT '0.3', + `harvest_coin` int(10) unsigned NOT NULL DEFAULT '0', + `enabled` tinyint(1) unsigned NOT NULL DEFAULT '1', + `tablename` varchar(64) COLLATE latin1_general_ci DEFAULT NULL, + PRIMARY KEY (`id`) +) ENGINE=InnoDB AUTO_INCREMENT=34 DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci; +INSERT INTO `table_versions` (`name`,`version`,`download_version`) values ('groundspawns',1,0); +DROP TABLE IF EXISTS `guild_colors`; +CREATE TABLE IF NOT EXISTS `guild_colors` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `guild_id` int(10) unsigned NOT NULL DEFAULT '0', + `color_type` enum('Emblem','Edge','Pattern') CHARACTER SET latin1 COLLATE latin1_general_ci DEFAULT NULL, + `red` float NOT NULL DEFAULT '0', + `green` float NOT NULL DEFAULT '0', + `blue` float NOT NULL DEFAULT '0', + PRIMARY KEY (`id`), + UNIQUE KEY `GuildColorIDX` (`guild_id`,`color_type`), + CONSTRAINT `FK_guild_colors` FOREIGN KEY (`guild_id`) REFERENCES `guilds` (`id`) ON DELETE CASCADE ON UPDATE CASCADE +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +INSERT INTO `table_versions` (`name`,`version`,`download_version`) values ('guild_colors',1,0); +DROP TABLE IF EXISTS `guild_event_defaults`; +CREATE TABLE IF NOT EXISTS `guild_event_defaults` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `event_id` tinyint(3) unsigned NOT NULL, + `event_name` varchar(100) COLLATE latin1_general_ci NOT NULL DEFAULT '', + `retain` tinyint(1) unsigned NOT NULL DEFAULT '1', + `broadcast` tinyint(1) unsigned NOT NULL DEFAULT '1', + PRIMARY KEY (`id`), + UNIQUE KEY `EventNameIDX` (`event_id`,`event_name`) +) ENGINE=InnoDB AUTO_INCREMENT=91 DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci; +INSERT INTO `guild_event_defaults` (`id`, `event_id`, `event_name`, `retain`, `broadcast`) VALUES + (1, 0, 'GUILD_EVENT_GUILD_LEVEL_UP', 1, 1), + (2, 1, 'GUILD_EVENT_GUILD_LEVEL_DOWN', 1, 1), + (3, 2, 'GUILD_EVENT_DISCOVERS_ITEM', 1, 1), + (4, 3, 'GUILD_EVENT_GAINS_ADV_LEVEL_1_10', 1, 1), + (5, 4, 'GUILD_EVENT_GAINS_ADV_LEVEL_11_20', 1, 1), + (6, 5, 'GUILD_EVENT_GAINS_ADV_LEVEL_21_30', 1, 1), + (7, 6, 'GUILD_EVENT_GAINS_ADV_LEVEL_31_40', 1, 1), + (8, 7, 'GUILD_EVENT_GAINS_ADV_LEVEL_41_50', 1, 1), + (9, 8, 'GUILD_EVENT_GAINS_TS_LEVEL_1_10', 1, 1), + (10, 9, 'GUILD_EVENT_GAINS_TS_LEVEL_11_20', 1, 1), + (11, 10, 'GUILD_EVENT_GAINS_TS_LEVEL_21_30', 1, 1), + (12, 11, 'GUILD_EVENT_GAINS_TS_LEVEL_31_40', 1, 1), + (13, 12, 'GUILD_EVENT_GAINS_TS_LEVEL_41_50', 1, 1), + (14, 13, 'GUILD_EVENT_MEMBER_JOINS', 1, 1), + (15, 14, 'GUILD_EVENT_MEMBER_LEAVES', 1, 1), + (16, 15, 'GUILD_EVENT_MEMBER_PROMOTED', 1, 1), + (17, 16, 'GUILD_EVENT_MEMBER_DEMOTED', 1, 1), + (18, 19, 'GUILD_EVENT_COMPLETES_HERITAGE_QUEST', 1, 1), + (19, 20, 'GUILD_EVENT_KILLS_EPIC_MONSTER', 1, 1), + (20, 21, 'GUILD_EVENT_LOOTS_ARTIFACT', 1, 1), + (21, 22, 'GUILD_EVENT_LOOTS_FABELED_ITEM', 1, 1), + (22, 23, 'GUILD_EVENT_LOOTS_LEGENDARY_ITEM', 1, 1), + (23, 24, 'GUILD_EVENT_COMPLETES_WRIT', 1, 1), + (24, 25, 'GUILD_EVENT_LOOTS_MYTHICAL_ITEM', 1, 1), + (25, 26, 'GUILD_EVENT_GAINS_ADV_LEVEL_10', 1, 1), + (26, 27, 'GUILD_EVENT_GAINS_ADV_LEVEL_20', 1, 1), + (27, 28, 'GUILD_EVENT_GAINS_ADV_LEVEL_30', 1, 1), + (28, 29, 'GUILD_EVENT_GAINS_ADV_LEVEL_40', 1, 1), + (29, 30, 'GUILD_EVENT_GAINS_ADV_LEVEL_50', 1, 1), + (30, 31, 'GUILD_EVENT_GAINS_TS_LEVEL_10', 1, 1), + (31, 32, 'GUILD_EVENT_GAINS_TS_LEVEL_20', 1, 1), + (32, 33, 'GUILD_EVENT_GAINS_TS_LEVEL_30', 1, 1), + (33, 34, 'GUILD_EVENT_GAINS_TS_LEVEL_40', 1, 1), + (34, 35, 'GUILD_EVENT_GAINS_TS_LEVEL_50', 1, 1), + (35, 37, 'GUILD_EVENT_GAINS_ADV_LEVEL_51_60', 1, 1), + (36, 38, 'GUILD_EVENT_GAINS_TS_LEVEL_51_60', 1, 1), + (37, 39, 'GUILD_EVENT_GAINS_ADV_LEVEL_60', 1, 1), + (38, 40, 'GUILD_EVENT_GAINS_TS_LEVEL_60', 1, 1), + (39, 41, 'GUILD_EVENT_GAINS_ADV_LEVEL_61_70', 1, 1), + (40, 42, 'GUILD_EVENT_GAINS_TS_LEVEL_61_70', 1, 1), + (41, 43, 'GUILD_EVENT_GAINS_ADV_LEVEL_70', 1, 1), + (42, 44, 'GUILD_EVENT_GAINS_TS_LEVEL_70', 1, 1), + (43, 45, 'GUILD_EVENT_GAINS_AA_10', 1, 1), + (44, 46, 'GUILD_EVENT_GAINS_AA_20', 1, 1), + (45, 47, 'GUILD_EVENT_GAINS_AA_30', 1, 1), + (46, 48, 'GUILD_EVENT_GAINS_AA_40', 1, 1), + (47, 49, 'GUILD_EVENT_GAINS_AA_50', 1, 1), + (48, 50, 'GUILD_EVENT_GAINS_AA_1_10', 1, 1), + (49, 51, 'GUILD_EVENT_GAINS_AA_11_20', 1, 1), + (50, 52, 'GUILD_EVENT_GAINS_AA_21_30', 1, 1), + (51, 53, 'GUILD_EVENT_GAINS_AA_31_40', 1, 1), + (52, 54, 'GUILD_EVENT_GAINS_AA_41_50', 1, 1), + (53, 55, 'GUILD_EVENT_BECOMES_RECRUITER', 1, 1), + (54, 56, 'GUILD_EVENT_NO_LONGER_RECRUITER', 1, 1), + (55, 57, 'GUILD_EVENT_HERALDY_CHANGE', 1, 1), + (56, 58, 'GUILD_EVENT_GAINS_AA_60', 1, 1), + (57, 59, 'GUILD_EVENT_GAINS_AA_70', 1, 1), + (58, 60, 'GUILD_EVENT_GAINS_AA_80', 1, 1), + (59, 61, 'GUILD_EVENT_GAINS_AA_90', 1, 1), + (60, 62, 'GUILD_EVENT_GAINS_AA_100', 1, 1), + (61, 63, 'GUILD_EVENT_GAINS_AA_51_60', 1, 1), + (62, 64, 'GUILD_EVENT_GAINS_AA_61_70', 1, 1), + (63, 65, 'GUILD_EVENT_GAINS_AA_71_80', 1, 1), + (64, 66, 'GUILD_EVENT_GAINS_AA_81_90', 1, 1), + (65, 67, 'GUILD_EVENT_GAINS_AA_91_100', 1, 1), + (66, 68, 'GUILD_EVENT_GAINS_ADV_LEVEL_80', 1, 1), + (67, 69, 'GUILD_EVENT_GAINS_TS_LEVEL_80', 1, 1), + (68, 70, 'GUILD_EVENT_GAINS_ADV_LEVEL_71_80', 1, 1), + (69, 71, 'GUILD_EVENT_GAINS_TS_LEVEL_71_80', 1, 1), + (70, 72, 'GUILD_EVENT_GAINS_AA_110', 1, 1), + (71, 73, 'GUILD_EVENT_GAINS_AA_120', 1, 1), + (72, 74, 'GUILD_EVENT_GAINS_AA_130', 1, 1), + (73, 75, 'GUILD_EVENT_GAINS_AA_140', 1, 1), + (74, 76, 'GUILD_EVENT_GAINS_AA_101_110', 1, 1), + (75, 77, 'GUILD_EVENT_GAINS_AA_111_120', 1, 1), + (76, 78, 'GUILD_EVENT_GAINS_AA_121_130', 1, 1), + (77, 79, 'GUILD_EVENT_GAINS_AA_131_140', 1, 1), + (78, 80, 'GUILD_EVENT_GAINS_AA_150', 1, 1), + (79, 81, 'GUILD_EVENT_GAINS_AA_141_150', 1, 1), + (80, 82, 'GUILD_EVENT_GAINS_AA_160', 1, 1), + (81, 83, 'GUILD_EVENT_GAINS_AA_170', 1, 1), + (82, 84, 'GUILD_EVENT_GAINS_AA_180', 1, 1), + (83, 85, 'GUILD_EVENT_GAINS_AA_190', 1, 1), + (84, 86, 'GUILD_EVENT_GAINS_AA_200', 1, 1), + (85, 87, 'GUILD_EVENT_GAINS_AA_151_160', 1, 1), + (86, 88, 'GUILD_EVENT_GAINS_AA_161_170', 1, 1), + (87, 89, 'GUILD_EVENT_GAINS_AA_171_180', 1, 1), + (88, 90, 'GUILD_EVENT_GAINS_AA_181_190', 1, 1), + (89, 91, 'GUILD_EVENT_GAINS_AA_191_200', 1, 1), + (90, 92, 'GUILD_EVENT_EARNS_ACHIEVEMENT', 1, 1); +INSERT INTO `table_versions` (`name`,`version`,`download_version`) values ('guild_event_defaults',1,0); +UPDATE `table_versions` SET `download_version`=1 WHERE `name`='guild_event_defaults'; +DROP TABLE IF EXISTS `guild_event_filters`; +CREATE TABLE IF NOT EXISTS `guild_event_filters` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `guild_id` int(10) unsigned NOT NULL DEFAULT '0', + `event_id` int(10) unsigned NOT NULL DEFAULT '0', + `retain` tinyint(1) unsigned NOT NULL DEFAULT '1', + `broadcast` tinyint(1) unsigned NOT NULL DEFAULT '1', + PRIMARY KEY (`id`), + UNIQUE KEY `FilterEventIDX` (`guild_id`,`event_id`), + CONSTRAINT `FK_guild_event_filters` FOREIGN KEY (`guild_id`) REFERENCES `guilds` (`id`) ON DELETE CASCADE ON UPDATE CASCADE +) ENGINE=InnoDB AUTO_INCREMENT=559 DEFAULT CHARSET=utf8; +INSERT INTO `table_versions` (`name`,`version`,`download_version`) values ('guild_event_filters',1,0); +DROP TABLE IF EXISTS `guild_events`; +CREATE TABLE IF NOT EXISTS `guild_events` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `guild_id` int(10) unsigned NOT NULL DEFAULT '0', + `event_id` bigint(20) unsigned NOT NULL DEFAULT '0', + `event_date` int(10) unsigned NOT NULL DEFAULT '0', + `event_type` smallint(5) unsigned NOT NULL DEFAULT '0', + `description` text CHARACTER SET latin1 COLLATE latin1_general_ci NOT NULL, + `display` tinyint(1) unsigned NOT NULL DEFAULT '0', + `locked` tinyint(1) unsigned NOT NULL DEFAULT '0', + `archived` tinyint(1) unsigned NOT NULL DEFAULT '0', + PRIMARY KEY (`id`), + UNIQUE KEY `GuildIDX` (`guild_id`,`event_id`), + KEY `EventDateIDX` (`event_date`), + CONSTRAINT `FK_guild_events` FOREIGN KEY (`guild_id`) REFERENCES `guilds` (`id`) ON DELETE CASCADE ON UPDATE CASCADE +) ENGINE=InnoDB AUTO_INCREMENT=200 DEFAULT CHARSET=utf8; +INSERT INTO `table_versions` (`name`,`version`,`download_version`) values ('guild_events',1,0); +DROP TABLE IF EXISTS `guild_members`; +CREATE TABLE IF NOT EXISTS `guild_members` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `guild_id` int(10) unsigned NOT NULL DEFAULT '0', + `char_id` int(10) unsigned NOT NULL DEFAULT '0', + `recruiter_id` int(10) unsigned NOT NULL DEFAULT '0', + `guild_status` int(10) unsigned NOT NULL DEFAULT '0', + `points` float NOT NULL DEFAULT '0', + `rank_id` tinyint(3) unsigned NOT NULL DEFAULT '7', + `member_flags` tinyint(3) unsigned NOT NULL DEFAULT '0', + `join_date` int(10) unsigned NOT NULL DEFAULT '0', + `note` varchar(250) CHARACTER SET latin1 COLLATE latin1_general_ci DEFAULT NULL, + `officer_note` varchar(250) CHARACTER SET latin1 COLLATE latin1_general_ci DEFAULT NULL, + `recruiting_message` varchar(512) CHARACTER SET latin1 COLLATE latin1_general_ci DEFAULT NULL, + `recruiter_picture_data` blob, + PRIMARY KEY (`id`), + UNIQUE KEY `GuildCharIDX` (`guild_id`,`char_id`), + KEY `FK_guild_members2` (`char_id`), + CONSTRAINT `FK_guild_members1` FOREIGN KEY (`guild_id`) REFERENCES `guilds` (`id`) ON DELETE CASCADE ON UPDATE CASCADE, + CONSTRAINT `FK_guild_members2` FOREIGN KEY (`char_id`) REFERENCES `characters` (`id`) ON DELETE CASCADE ON UPDATE CASCADE +) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8; +INSERT INTO `table_versions` (`name`,`version`,`download_version`) values ('guild_members',1,0); +DROP TABLE IF EXISTS `guild_points_history`; +CREATE TABLE IF NOT EXISTS `guild_points_history` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `guild_id` int(10) unsigned NOT NULL DEFAULT '0', + `char_id` int(10) unsigned NOT NULL DEFAULT '0', + `points_date` int(10) unsigned NOT NULL DEFAULT '0', + `modified_by` varchar(64) CHARACTER SET latin1 COLLATE latin1_general_ci NOT NULL DEFAULT '', + `comment` text CHARACTER SET latin1 COLLATE latin1_general_ci, + `points` float NOT NULL DEFAULT '0', + PRIMARY KEY (`id`), + KEY `GuildCharIDX` (`guild_id`,`char_id`), + KEY `FK_char_points_history` (`char_id`), + CONSTRAINT `FK_char_points_history` FOREIGN KEY (`char_id`) REFERENCES `characters` (`id`) ON DELETE CASCADE ON UPDATE CASCADE, + CONSTRAINT `FK_guild_points_history` FOREIGN KEY (`guild_id`) REFERENCES `guilds` (`id`) ON DELETE CASCADE ON UPDATE CASCADE +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +INSERT INTO `table_versions` (`name`,`version`,`download_version`) values ('guild_points_history',1,0); +DROP TABLE IF EXISTS `guild_ranks`; +CREATE TABLE IF NOT EXISTS `guild_ranks` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `guild_id` int(10) unsigned NOT NULL DEFAULT '0', + `rank_id` tinyint(3) unsigned NOT NULL DEFAULT '0', + `rank_name` varchar(64) NOT NULL, + `permission1` int(10) unsigned NOT NULL DEFAULT '0', + `permission2` int(10) unsigned NOT NULL DEFAULT '0', + PRIMARY KEY (`id`), + UNIQUE KEY `GuildRankIDX` (`guild_id`,`rank_id`), + CONSTRAINT `FK_guild_ranks` FOREIGN KEY (`guild_id`) REFERENCES `guilds` (`id`) ON DELETE CASCADE ON UPDATE CASCADE +) ENGINE=InnoDB AUTO_INCREMENT=49 DEFAULT CHARSET=utf8; +INSERT INTO `table_versions` (`name`,`version`,`download_version`) values ('guild_ranks',1,0); +DROP TABLE IF EXISTS `guild_ranks_defaults`; +CREATE TABLE IF NOT EXISTS `guild_ranks_defaults` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `rank_id` int(10) unsigned NOT NULL DEFAULT '0', + `rank_name` varchar(250) COLLATE latin1_general_ci NOT NULL, + `permission1` int(10) unsigned NOT NULL DEFAULT '0', + `permission2` int(10) unsigned NOT NULL DEFAULT '0', + PRIMARY KEY (`id`), + UNIQUE KEY `RankNameIDX` (`rank_name`) +) ENGINE=InnoDB AUTO_INCREMENT=9 DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci; +INSERT INTO `guild_ranks_defaults` (`id`, `rank_id`, `rank_name`, `permission1`, `permission2`) VALUES + (1, 0, 'Leader', 4294967295, 4294967295), + (2, 1, 'Senior Officer', 4294967295, 4294967295), + (3, 2, 'Officer', 6320242, 0), + (4, 3, 'Senior Member', 24576, 0), + (5, 4, 'Member', 24576, 0), + (6, 5, 'Junior Member', 24576, 0), + (7, 6, 'Initiate', 24576, 0), + (8, 7, 'Recruit', 24576, 0); +INSERT INTO `table_versions` (`name`,`version`,`download_version`) values ('guild_ranks_defaults',1,0); +UPDATE `table_versions` SET `download_version`=1 WHERE `name`='guild_ranks_defaults'; +DROP TABLE IF EXISTS `guild_recruiting`; +CREATE TABLE IF NOT EXISTS `guild_recruiting` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `guild_id` int(10) unsigned NOT NULL DEFAULT '0', + `short_desc` varchar(250) CHARACTER SET latin1 COLLATE latin1_general_ci NOT NULL DEFAULT '', + `full_desc` text CHARACTER SET latin1 COLLATE latin1_general_ci, + `min_level` tinyint(3) unsigned NOT NULL DEFAULT '0', + `play_style` tinyint(3) unsigned NOT NULL DEFAULT '0', + `looking_for` tinyint(3) unsigned NOT NULL DEFAULT '0', + `descriptive_tag1` tinyint(3) unsigned NOT NULL DEFAULT '0', + `descriptive_tag2` tinyint(3) unsigned NOT NULL DEFAULT '0', + `descriptive_tag3` tinyint(3) unsigned NOT NULL DEFAULT '0', + `descriptive_tag4` tinyint(3) unsigned NOT NULL DEFAULT '0', + PRIMARY KEY (`id`), + UNIQUE KEY `GuildIDX` (`guild_id`), + CONSTRAINT `FK_guild_recruiting` FOREIGN KEY (`guild_id`) REFERENCES `guilds` (`id`) ON DELETE CASCADE ON UPDATE CASCADE +) ENGINE=InnoDB AUTO_INCREMENT=7 DEFAULT CHARSET=utf8; +INSERT INTO `table_versions` (`name`,`version`,`download_version`) values ('guild_recruiting',1,0); +DROP TABLE IF EXISTS `guilds`; +CREATE TABLE IF NOT EXISTS `guilds` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `name` varchar(64) CHARACTER SET latin1 COLLATE latin1_general_ci NOT NULL DEFAULT '', + `motd` text CHARACTER SET latin1 COLLATE latin1_general_ci, + `level` tinyint(3) unsigned NOT NULL DEFAULT '1', + `xp` bigint(20) unsigned NOT NULL DEFAULT '0', + `xp_needed` bigint(20) unsigned NOT NULL DEFAULT '0', + `formed_on` int(10) unsigned NOT NULL DEFAULT '0', + PRIMARY KEY (`id`), + UNIQUE KEY `GuildNameIDX` (`name`) +) ENGINE=InnoDB AUTO_INCREMENT=7 DEFAULT CHARSET=utf8; +INSERT INTO `table_versions` (`name`,`version`,`download_version`) values ('guilds',1,0); +DROP TABLE IF EXISTS `heroic_ops`; +CREATE TABLE IF NOT EXISTS `heroic_ops` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `ho_type` enum('Starter','Wheel') COLLATE latin1_general_ci NOT NULL DEFAULT 'Starter', + `starter_link_id` int(10) unsigned NOT NULL DEFAULT '0', + `starter_class` tinyint(3) unsigned NOT NULL DEFAULT '0', + `starter_icon` smallint(5) unsigned NOT NULL DEFAULT '65535', + `chain_order` tinyint(3) unsigned NOT NULL DEFAULT '0', + `shift_icon` smallint(5) unsigned NOT NULL DEFAULT '41', + `spell_id` int(10) unsigned NOT NULL DEFAULT '0', + `chance` float unsigned NOT NULL DEFAULT '0', + `ability1` smallint(5) unsigned NOT NULL DEFAULT '65535', + `ability2` smallint(5) unsigned NOT NULL DEFAULT '65535', + `ability3` smallint(5) unsigned NOT NULL DEFAULT '65535', + `ability4` smallint(5) unsigned NOT NULL DEFAULT '65535', + `ability5` smallint(5) unsigned NOT NULL DEFAULT '65535', + `ability6` smallint(5) unsigned NOT NULL DEFAULT '65535', + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci; +INSERT INTO `table_versions` (`name`,`version`,`download_version`) values ('heroic_ops',1,0); +DROP TABLE IF EXISTS `ho_starter_chains`; +CREATE TABLE IF NOT EXISTS `ho_starter_chains` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `starter_class` tinyint(3) unsigned NOT NULL DEFAULT '0', + `first_ability` smallint(5) unsigned NOT NULL DEFAULT '65535', + `second_ability` smallint(5) unsigned NOT NULL DEFAULT '65535', + `third_ability` smallint(5) unsigned NOT NULL DEFAULT '65535', + `fourth_ability` smallint(5) unsigned NOT NULL DEFAULT '65535', + `fifth_ability` smallint(5) unsigned NOT NULL DEFAULT '65535', + `sixth_ability` smallint(5) unsigned NOT NULL DEFAULT '65535', + PRIMARY KEY (`id`) +) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci; +INSERT INTO `table_versions` (`name`,`version`,`download_version`) values ('ho_starter_chains',1,0); +DROP TABLE IF EXISTS `ho_wheel`; +CREATE TABLE IF NOT EXISTS `ho_wheel` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `starter_id` int(10) unsigned NOT NULL DEFAULT '0', + `order` tinyint(3) unsigned NOT NULL DEFAULT '0', + `spell_id` int(10) unsigned NOT NULL DEFAULT '0', + `first_ability` smallint(5) unsigned NOT NULL DEFAULT '65535', + `second_ability` smallint(5) unsigned NOT NULL DEFAULT '65535', + `third_ability` smallint(5) unsigned NOT NULL DEFAULT '65535', + `fourth_ability` smallint(5) unsigned NOT NULL DEFAULT '65535', + `fifth_ability` smallint(5) unsigned NOT NULL DEFAULT '65535', + `sixth_ability` smallint(5) unsigned NOT NULL DEFAULT '65535', + PRIMARY KEY (`id`), + KEY `FK_Starter` (`starter_id`), + KEY `FK_Spell` (`spell_id`), + CONSTRAINT `FK_Spell` FOREIGN KEY (`spell_id`) REFERENCES `spells` (`id`), + CONSTRAINT `FK_Starter` FOREIGN KEY (`starter_id`) REFERENCES `ho_starter_chains` (`id`) ON DELETE CASCADE ON UPDATE CASCADE +) ENGINE=InnoDB AUTO_INCREMENT=10 DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci; +INSERT INTO `table_versions` (`name`,`version`,`download_version`) values ('ho_wheel',1,0); +DROP TABLE IF EXISTS `houses`; +CREATE TABLE IF NOT EXISTS `houses` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `name` char(64) COLLATE latin1_general_ci NOT NULL DEFAULT '0', + `cost_coins` bigint(20) unsigned NOT NULL DEFAULT '0', + `cost_status` int(10) unsigned NOT NULL DEFAULT '0', + `upkeep_coins` bigint(20) unsigned NOT NULL DEFAULT '0', + `upkeep_status` int(10) unsigned NOT NULL DEFAULT '0', + `vault_slots` tinyint(3) unsigned NOT NULL DEFAULT '0', + `alignment` tinyint(3) unsigned NOT NULL DEFAULT '0', + `guild_level` tinyint(3) unsigned NOT NULL DEFAULT '0', + `zone_id` int(10) unsigned NOT NULL DEFAULT '0', + `exit_zone_id` int(10) NOT NULL DEFAULT '0', + `exit_x` float NOT NULL DEFAULT '0', + `exit_y` float NOT NULL DEFAULT '0', + `exit_z` float NOT NULL DEFAULT '0', + `exit_heading` float NOT NULL DEFAULT '0', + PRIMARY KEY (`id`) +) ENGINE=InnoDB AUTO_INCREMENT=9 DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci; +INSERT INTO `table_versions` (`name`,`version`,`download_version`) values ('houses',1,0); +DROP TABLE IF EXISTS `instance_spawns_removed`; +CREATE TABLE IF NOT EXISTS `instance_spawns_removed` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `instance_id` int(10) unsigned NOT NULL DEFAULT '0', + `spawn_type` smallint(5) unsigned NOT NULL DEFAULT '0', + `spawn_location_entry_id` int(10) unsigned NOT NULL DEFAULT '0', + `respawn_time` int(10) unsigned NOT NULL DEFAULT '0', + PRIMARY KEY (`id`), + KEY `InstanceIDX` (`instance_id`), + KEY `SpawnIDX` (`spawn_location_entry_id`), + CONSTRAINT `FK_instance_spawns` FOREIGN KEY (`spawn_location_entry_id`) REFERENCES `spawn_location_entry` (`id`) ON DELETE CASCADE ON UPDATE CASCADE, + CONSTRAINT `FK_instance_zones` FOREIGN KEY (`instance_id`) REFERENCES `instances` (`id`) ON DELETE CASCADE ON UPDATE CASCADE +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +INSERT INTO `table_versions` (`name`,`version`,`download_version`) values ('instance_spawns_removed',1,0); +DROP TABLE IF EXISTS `instances`; +CREATE TABLE IF NOT EXISTS `instances` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `zone_id` int(10) unsigned NOT NULL DEFAULT '0', + PRIMARY KEY (`id`), + KEY `ZoneIDX` (`zone_id`), + CONSTRAINT `FK_instances` FOREIGN KEY (`zone_id`) REFERENCES `zones` (`id`) ON DELETE CASCADE ON UPDATE CASCADE +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +INSERT INTO `table_versions` (`name`,`version`,`download_version`) values ('instances',1,0); +DROP TABLE IF EXISTS `item_appearances`; +CREATE TABLE IF NOT EXISTS `item_appearances` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `item_id` int(10) unsigned NOT NULL DEFAULT '0', + `equip_type` int(10) unsigned NOT NULL DEFAULT '0', + `red` tinyint(3) unsigned NOT NULL DEFAULT '0', + `green` tinyint(3) unsigned NOT NULL DEFAULT '0', + `blue` tinyint(3) unsigned NOT NULL DEFAULT '0', + `highlight_red` tinyint(3) unsigned NOT NULL DEFAULT '0', + `highlight_green` tinyint(3) unsigned NOT NULL DEFAULT '0', + `highlight_blue` tinyint(3) unsigned NOT NULL DEFAULT '0', + PRIMARY KEY (`id`), + UNIQUE KEY `NewIndex` (`item_id`), + CONSTRAINT `FK_item_appearances` FOREIGN KEY (`item_id`) REFERENCES `items` (`id`) ON DELETE CASCADE ON UPDATE CASCADE +) ENGINE=InnoDB AUTO_INCREMENT=73860 DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci; +INSERT INTO `table_versions` (`name`,`version`,`download_version`) values ('item_appearances',1,0); +DROP TABLE IF EXISTS `item_details_adornments`; +CREATE TABLE item_details_adornments ( + id INT(10) UNSIGNED NOT NULL AUTO_INCREMENT, + item_id INT(10) UNSIGNED NOT NULL DEFAULT 0, + duration FLOAT UNSIGNED NOT NULL DEFAULT 0, + item_types BIGINT(20) UNSIGNED NOT NULL DEFAULT 0, + slot_type SMALLINT(5) UNSIGNED NOT NULL DEFAULT 0, + PRIMARY KEY (id), + INDEX item_id (item_id), + CONSTRAINT item_details_adornments_ibfk_1 FOREIGN KEY (item_id) + REFERENCES items(id) ON DELETE CASCADE ON UPDATE CASCADE +) +ENGINE = INNODB +CHARACTER SET utf8 +COLLATE utf8_general_ci +ROW_FORMAT = DYNAMIC; +INSERT INTO `table_versions` (`name`,`version`,`download_version`) values ('item_details_adornments',73021,0); +DROP TABLE IF EXISTS `item_details_armor`; +CREATE TABLE IF NOT EXISTS `item_details_armor` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `item_id` int(10) unsigned NOT NULL DEFAULT '0', + `mitigation_low` smallint(5) unsigned NOT NULL DEFAULT '0', + `mitigation_high` smallint(5) unsigned NOT NULL DEFAULT '0', + PRIMARY KEY (`id`), + UNIQUE KEY `NewIndex` (`item_id`), + CONSTRAINT `FK_item_details_armor` FOREIGN KEY (`item_id`) REFERENCES `items` (`id`) ON DELETE CASCADE ON UPDATE CASCADE +) ENGINE=InnoDB AUTO_INCREMENT=62189 DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci; +INSERT INTO `table_versions` (`name`,`version`,`download_version`) values ('item_details_armor',1,0); +DROP TABLE IF EXISTS `item_details_armorset`; +CREATE TABLE IF NOT EXISTS `item_details_armorset` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `item_id` int(10) unsigned NOT NULL DEFAULT '0', + `soe_id` int(11) NOT NULL DEFAULT '0', + `armorset_item_id` int(10) NOT NULL DEFAULT '0', + `item_crc` int(10) NOT NULL DEFAULT '0', + `item_name` varchar(255) COLLATE latin1_general_ci NOT NULL DEFAULT 'N/A', + `item_icon` smallint(5) unsigned NOT NULL DEFAULT '0', + `unknown_piece` int(10) unsigned NOT NULL DEFAULT '0', + `language_type` tinyint(3) unsigned NOT NULL DEFAULT '1', + PRIMARY KEY (`id`), + UNIQUE KEY `ArmorSetIDX` (`item_id`,`soe_id`), + CONSTRAINT `FK_item_details_armorset` FOREIGN KEY (`item_id`) REFERENCES `items` (`id`) ON DELETE CASCADE ON UPDATE CASCADE +) ENGINE=InnoDB DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci; +INSERT INTO `table_versions` (`name`,`version`,`download_version`) values ('item_details_armorset',1,0); +DROP TABLE IF EXISTS `item_details_bag`; +CREATE TABLE IF NOT EXISTS `item_details_bag` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `item_id` int(10) unsigned NOT NULL DEFAULT '0', + `num_slots` tinyint(3) unsigned NOT NULL DEFAULT '0', + `weight_reduction` tinyint(3) unsigned NOT NULL DEFAULT '0', + `unknown12` tinyint(3) unsigned NOT NULL DEFAULT '0', + PRIMARY KEY (`id`), + UNIQUE KEY `ItemIndex` (`item_id`), + CONSTRAINT `FK_item_details_bag` FOREIGN KEY (`item_id`) REFERENCES `items` (`id`) ON DELETE CASCADE ON UPDATE CASCADE +) ENGINE=InnoDB AUTO_INCREMENT=351 DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci; +INSERT INTO `table_versions` (`name`,`version`,`download_version`) values ('item_details_bag',1,0); +DROP TABLE IF EXISTS `item_details_bauble`; +CREATE TABLE IF NOT EXISTS `item_details_bauble` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `item_id` int(10) unsigned NOT NULL DEFAULT '0', + `cast` smallint(5) unsigned NOT NULL DEFAULT '100', + `recovery` smallint(5) unsigned NOT NULL DEFAULT '0', + `duration` int(10) unsigned NOT NULL DEFAULT '0', + `recast` float unsigned NOT NULL DEFAULT '1', + `display_slot_optional` tinyint(3) unsigned NOT NULL DEFAULT '0', + `display_cast_time` tinyint(3) unsigned NOT NULL DEFAULT '0', + `display_bauble_type` tinyint(3) unsigned NOT NULL DEFAULT '0', + `effect_radius` float NOT NULL DEFAULT '0', + `max_aoe_targets` int(10) unsigned NOT NULL DEFAULT '0', + `display_until_cancelled` tinyint(3) unsigned NOT NULL DEFAULT '0', + PRIMARY KEY (`id`), + UNIQUE KEY `ItemBaubleIDX` (`item_id`), + CONSTRAINT `FK_item_details_bauble` FOREIGN KEY (`item_id`) REFERENCES `items` (`id`) ON DELETE CASCADE ON UPDATE CASCADE +) ENGINE=InnoDB AUTO_INCREMENT=4206 DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci; +INSERT INTO `table_versions` (`name`,`version`,`download_version`) values ('item_details_bauble',1,0); +DROP TABLE IF EXISTS `item_details_book`; +CREATE TABLE IF NOT EXISTS `item_details_book` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `item_id` int(10) unsigned NOT NULL DEFAULT '0', + `language` tinyint(3) unsigned NOT NULL DEFAULT '0', + `author` varchar(255) COLLATE latin1_general_ci NOT NULL DEFAULT '', + `title` varchar(255) COLLATE latin1_general_ci NOT NULL DEFAULT '', + PRIMARY KEY (`id`), + KEY `ItemBookIDX` (`item_id`), + CONSTRAINT `FK_item_details_book` FOREIGN KEY (`item_id`) REFERENCES `items` (`id`) ON DELETE CASCADE ON UPDATE CASCADE +) ENGINE=InnoDB AUTO_INCREMENT=538 DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci; +INSERT INTO `table_versions` (`name`,`version`,`download_version`) values ('item_details_book',1,0); +DROP TABLE IF EXISTS `item_details_book_pages`; +CREATE TABLE `item_details_book_pages` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `item_id` int(10) unsigned NOT NULL DEFAULT '0', + `page` tinyint(3) unsigned NOT NULL DEFAULT '0', + `page_text` text COLLATE latin1_general_ci NOT NULL, + `page_text_valign` tinyint(3) NOT NULL DEFAULT '0', + `page_text_halign` tinyint(3) unsigned NOT NULL DEFAULT '0', + PRIMARY KEY (`id`), + KEY `ItemBookIDX` (`item_id`) +) ENGINE=InnoDB DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci; +INSERT INTO `table_versions` (`name`,`version`,`download_version`) values ('item_details_book_pages',73031,0); +DROP TABLE IF EXISTS `item_details_decorations`; +CREATE TABLE IF NOT EXISTS `item_details_decorations` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `item_id` int(10) unsigned NOT NULL DEFAULT '0', + `decoration_name` varchar(64) COLLATE latin1_general_ci NOT NULL DEFAULT '', + PRIMARY KEY (`id`), + UNIQUE KEY `DecorationIDX` (`item_id`), + CONSTRAINT `FK_item_details_decorations` FOREIGN KEY (`item_id`) REFERENCES `items` (`id`) ON UPDATE CASCADE +) ENGINE=InnoDB DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci; +INSERT INTO `table_versions` (`name`,`version`,`download_version`) values ('item_details_decorations',1,0); +DROP TABLE IF EXISTS `item_details_food`; +CREATE TABLE IF NOT EXISTS `item_details_food` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `item_id` int(10) unsigned NOT NULL DEFAULT '0', + `type` tinyint(3) unsigned NOT NULL DEFAULT '0', + `level` tinyint(3) unsigned NOT NULL DEFAULT '0', + `duration` float NOT NULL DEFAULT '0', + `satiation` tinyint(3) unsigned NOT NULL DEFAULT '2', + PRIMARY KEY (`id`), + UNIQUE KEY `ItemIndex` (`item_id`), + CONSTRAINT `FK_item_details_food` FOREIGN KEY (`item_id`) REFERENCES `items` (`id`) ON DELETE CASCADE ON UPDATE CASCADE +) ENGINE=InnoDB AUTO_INCREMENT=2628 DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci; +INSERT INTO `table_versions` (`name`,`version`,`download_version`) values ('item_details_food',1,0); +DROP TABLE IF EXISTS `item_details_house`; +CREATE TABLE IF NOT EXISTS `item_details_house` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `item_id` int(10) unsigned NOT NULL DEFAULT '0', + `rent_reduction` int(10) unsigned NOT NULL DEFAULT '0', + `status_rent_reduction` int(10) unsigned NOT NULL DEFAULT '0', + `coin_rent_reduction` float NOT NULL DEFAULT '0', + `house_only` tinyint(3) unsigned NOT NULL DEFAULT '0', + PRIMARY KEY (`id`), + UNIQUE KEY `NewIndex` (`item_id`), + CONSTRAINT `FK_item_details_house` FOREIGN KEY (`item_id`) REFERENCES `items` (`id`) ON DELETE CASCADE ON UPDATE CASCADE +) ENGINE=InnoDB AUTO_INCREMENT=6678 DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci; +INSERT INTO `table_versions` (`name`,`version`,`download_version`) values ('item_details_house',1,0); +DROP TABLE IF EXISTS `item_details_house_container`; +CREATE TABLE IF NOT EXISTS `item_details_house_container` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `item_id` int(10) unsigned NOT NULL DEFAULT '0', + `num_slots` tinyint(3) unsigned NOT NULL DEFAULT '0', + `allowed_types` int(10) unsigned NOT NULL DEFAULT '0', + `unknown12` int(10) unsigned NOT NULL DEFAULT '0', + `unknown13` tinyint(3) unsigned NOT NULL DEFAULT '0', + `broker_commission` smallint(5) unsigned NOT NULL DEFAULT '0', + `fence_commission` smallint(5) unsigned NOT NULL DEFAULT '0', + PRIMARY KEY (`id`), + UNIQUE KEY `HouseContainerIDX` (`item_id`), + CONSTRAINT `FK_item_details_house_container` FOREIGN KEY (`item_id`) REFERENCES `items` (`id`) ON DELETE CASCADE ON UPDATE CASCADE +) ENGINE=InnoDB AUTO_INCREMENT=66 DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci; +INSERT INTO `table_versions` (`name`,`version`,`download_version`) values ('item_details_house_container',1,0); +DROP TABLE IF EXISTS `item_details_itemset`; +CREATE TABLE IF NOT EXISTS `item_details_itemset` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `itemset_item_id` int(10) unsigned NOT NULL DEFAULT '0', + `item_id` int(10) unsigned NOT NULL DEFAULT '0', + `item_icon` smallint(5) unsigned NOT NULL DEFAULT '0', + `item_unknown1` smallint(5) unsigned NOT NULL DEFAULT '0', + `item_unknown2` int(10) NOT NULL DEFAULT '0', + `language_type` tinyint(3) NOT NULL DEFAULT '0', + PRIMARY KEY (`id`), + UNIQUE KEY `ItemsetIDX` (`itemset_item_id`,`item_id`,`language_type`), + CONSTRAINT `FK_item_details_itemset` FOREIGN KEY (`itemset_item_id`) REFERENCES `items` (`id`) ON DELETE CASCADE ON UPDATE CASCADE +) ENGINE=InnoDB AUTO_INCREMENT=2154 DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci; +ALTER TABLE item_details_itemset + CHANGE COLUMN item_unknown1 item_stack_size SMALLINT(5) UNSIGNED NOT NULL DEFAULT 0, + CHANGE COLUMN item_unknown2 item_list_color INT(10) NOT NULL DEFAULT 0; +INSERT INTO `table_versions` (`name`,`version`,`download_version`) values ('item_details_itemset',73020,0); +DROP TABLE IF EXISTS `item_details_marketplace`; +CREATE TABLE IF NOT EXISTS `item_details_marketplace` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `marketplace_item_id` int(10) unsigned NOT NULL DEFAULT '0', + `item_id` int(10) NOT NULL DEFAULT '0', + `item_icon` smallint(5) unsigned NOT NULL DEFAULT '0', + PRIMARY KEY (`id`), + UNIQUE KEY `MarketplaceIDX` (`marketplace_item_id`,`item_id`), + CONSTRAINT `FK_item_details_marketplace` FOREIGN KEY (`marketplace_item_id`) REFERENCES `items` (`id`) ON UPDATE CASCADE +) ENGINE=InnoDB AUTO_INCREMENT=32 DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci; +INSERT INTO `table_versions` (`name`,`version`,`download_version`) values ('item_details_marketplace',1,0); +DROP TABLE IF EXISTS `item_details_pattern`; +CREATE TABLE IF NOT EXISTS `item_details_pattern` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `item_id` int(10) unsigned NOT NULL DEFAULT '0', + `pattern_item_id` int(10) unsigned NOT NULL DEFAULT '0', + `item_icon` smallint(5) unsigned NOT NULL DEFAULT '0', + `item_name` varchar(250) COLLATE latin1_general_ci DEFAULT '', + PRIMARY KEY (`id`), + UNIQUE KEY `PatternIDX` (`pattern_item_id`), + KEY `FK_item_details_pattern` (`item_id`), + CONSTRAINT `FK_item_details_pattern` FOREIGN KEY (`item_id`) REFERENCES `items` (`id`) ON UPDATE CASCADE +) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci; +INSERT INTO `table_versions` (`name`,`version`,`download_version`) values ('item_details_pattern',1,0); +DROP TABLE IF EXISTS `item_details_range`; +CREATE TABLE IF NOT EXISTS `item_details_range` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `item_id` int(10) unsigned NOT NULL DEFAULT '0', + `damage_low1` smallint(5) unsigned NOT NULL DEFAULT '0', + `damage_high1` smallint(5) unsigned NOT NULL DEFAULT '0', + `damage_low2` smallint(5) unsigned NOT NULL DEFAULT '0', + `damage_high2` smallint(5) unsigned NOT NULL DEFAULT '0', + `damage_low3` smallint(5) unsigned NOT NULL DEFAULT '0', + `damage_high3` smallint(5) unsigned NOT NULL DEFAULT '0', + `delay` smallint(5) unsigned NOT NULL DEFAULT '0', + `range_low` tinyint(3) unsigned NOT NULL DEFAULT '0', + `range_high` tinyint(3) unsigned NOT NULL DEFAULT '0', + `damage_rating` float unsigned NOT NULL DEFAULT '0', + `damage_type` tinyint(3) unsigned NOT NULL DEFAULT '0', + PRIMARY KEY (`id`), + UNIQUE KEY `NewIndex` (`item_id`), + CONSTRAINT `FK_item_details_range` FOREIGN KEY (`item_id`) REFERENCES `items` (`id`) ON DELETE CASCADE ON UPDATE CASCADE +) ENGINE=InnoDB AUTO_INCREMENT=3549 DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci; +INSERT INTO `table_versions` (`name`,`version`,`download_version`) values ('item_details_range',1,0); +DROP TABLE IF EXISTS `item_details_recipe`; +CREATE TABLE IF NOT EXISTS `item_details_recipe` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `item_id` int(10) unsigned NOT NULL DEFAULT '0', + `max_uses` smallint(5) unsigned NOT NULL DEFAULT '0', + `unknown13` smallint(5) unsigned NOT NULL DEFAULT '0', + `unknown14` smallint(5) unsigned NOT NULL DEFAULT '0', + PRIMARY KEY (`id`), + UNIQUE KEY `ItemIDX` (`item_id`), + CONSTRAINT `FK_item_details_recipe` FOREIGN KEY (`item_id`) REFERENCES `items` (`id`) ON DELETE CASCADE ON UPDATE CASCADE +) ENGINE=InnoDB AUTO_INCREMENT=2620 DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci; +INSERT INTO `table_versions` (`name`,`version`,`download_version`) values ('item_details_recipe',1,0); +DROP TABLE IF EXISTS `item_details_recipe_items`; +CREATE TABLE IF NOT EXISTS `item_details_recipe_items` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `item_id` int(10) unsigned NOT NULL DEFAULT '0', + `name` varchar(250) COLLATE latin1_general_ci NOT NULL DEFAULT '', + PRIMARY KEY (`id`), + UNIQUE KEY `NewIndex` (`item_id`,`name`), + CONSTRAINT `FK_item_details_recipe_items` FOREIGN KEY (`item_id`) REFERENCES `items` (`id`) ON DELETE CASCADE ON UPDATE CASCADE +) ENGINE=InnoDB AUTO_INCREMENT=35959 DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci; +INSERT INTO `table_versions` (`name`,`version`,`download_version`) values ('item_details_recipe_items',1,0); +DROP TABLE IF EXISTS `item_details_shield`; +CREATE TABLE IF NOT EXISTS `item_details_shield` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `item_id` int(10) unsigned NOT NULL DEFAULT '0', + `mitigation_low` smallint(5) unsigned NOT NULL DEFAULT '0', + `mitigation_high` smallint(5) unsigned NOT NULL DEFAULT '0', + PRIMARY KEY (`id`), + UNIQUE KEY `NewIndex` (`item_id`), + CONSTRAINT `FK_item_details_shield` FOREIGN KEY (`item_id`) REFERENCES `items` (`id`) ON DELETE CASCADE ON UPDATE CASCADE +) ENGINE=InnoDB AUTO_INCREMENT=5662 DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci; +INSERT INTO `table_versions` (`name`,`version`,`download_version`) values ('item_details_shield',1,0); +DROP TABLE IF EXISTS `item_details_skill`; +CREATE TABLE IF NOT EXISTS `item_details_skill` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `item_id` int(10) unsigned NOT NULL DEFAULT '0', + `spell_id` int(10) unsigned NOT NULL DEFAULT '0', + `spell_tier` tinyint(3) unsigned NOT NULL DEFAULT '1', + PRIMARY KEY (`id`), + KEY `FK_item_details_skill` (`item_id`), + CONSTRAINT `FK_item_details_skill` FOREIGN KEY (`item_id`) REFERENCES `items` (`id`) ON DELETE CASCADE ON UPDATE CASCADE +) ENGINE=InnoDB AUTO_INCREMENT=24844 DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci; +INSERT INTO `table_versions` (`name`,`version`,`download_version`) values ('item_details_skill',1,0); +DROP TABLE IF EXISTS `item_details_skills`; +CREATE TABLE IF NOT EXISTS `item_details_skills` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `item_id` int(10) unsigned NOT NULL DEFAULT '0', + `unknown12` int(10) unsigned NOT NULL DEFAULT '0', + `unknown13` smallint(5) unsigned NOT NULL DEFAULT '0', + `unknown14` smallint(5) unsigned NOT NULL DEFAULT '0', + `unknown15` smallint(5) unsigned NOT NULL DEFAULT '0', + `unknown16` smallint(5) unsigned NOT NULL DEFAULT '0', + `unknown17` smallint(5) unsigned NOT NULL DEFAULT '0', + `duration` smallint(5) unsigned NOT NULL DEFAULT '0', + `unknown18` int(10) unsigned NOT NULL DEFAULT '0', + `unknown19` int(10) unsigned NOT NULL DEFAULT '0', + `unknown20` int(10) unsigned NOT NULL DEFAULT '0', + `unknown21` int(10) unsigned NOT NULL DEFAULT '0', + `unknown22` tinyint(3) unsigned NOT NULL DEFAULT '0', + `unknown23` smallint(5) unsigned NOT NULL DEFAULT '0', + `unknown24` smallint(5) unsigned NOT NULL DEFAULT '0', + `power_req` smallint(5) unsigned NOT NULL DEFAULT '0', + `power_upkeep_req` smallint(5) unsigned NOT NULL DEFAULT '0', + `hp_req` smallint(5) unsigned NOT NULL DEFAULT '0', + `hp_upkeep_req` smallint(5) unsigned NOT NULL DEFAULT '0', + `cast` smallint(5) unsigned NOT NULL DEFAULT '0', + `recovery` smallint(5) unsigned NOT NULL DEFAULT '0', + `recast` float unsigned NOT NULL DEFAULT '0', + `unknown25` float unsigned NOT NULL DEFAULT '0', + `unknown26` int(10) unsigned NOT NULL DEFAULT '0', + PRIMARY KEY (`id`), + UNIQUE KEY `ItemSkillsIDX` (`item_id`), + CONSTRAINT `FK_item_details_skills` FOREIGN KEY (`item_id`) REFERENCES `items` (`id`) ON DELETE CASCADE ON UPDATE CASCADE +) ENGINE=InnoDB DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci; +INSERT INTO `table_versions` (`name`,`version`,`download_version`) values ('item_details_skills',1,0); +DROP TABLE IF EXISTS `item_details_thrown`; +CREATE TABLE IF NOT EXISTS `item_details_thrown` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `item_id` int(10) unsigned NOT NULL DEFAULT '0', + `range_bonus` int(11) NOT NULL DEFAULT '0', + `damage_bonus` smallint(5) unsigned NOT NULL DEFAULT '0', + `unknown14` smallint(5) unsigned NOT NULL DEFAULT '0', + `hit_bonus` float unsigned NOT NULL DEFAULT '0', + `damage_type` int(10) unsigned NOT NULL DEFAULT '0', + PRIMARY KEY (`id`), + UNIQUE KEY `NewIndex` (`item_id`), + CONSTRAINT `FK_item_details_thrown` FOREIGN KEY (`item_id`) REFERENCES `items` (`id`) ON DELETE CASCADE ON UPDATE CASCADE +) ENGINE=InnoDB AUTO_INCREMENT=158 DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci; +INSERT INTO `table_versions` (`name`,`version`,`download_version`) values ('item_details_thrown',1,0); +DROP TABLE IF EXISTS `item_details_weapon`; +CREATE TABLE IF NOT EXISTS `item_details_weapon` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `item_id` int(10) unsigned NOT NULL DEFAULT '0', + `wield_style` tinyint(3) unsigned NOT NULL DEFAULT '0', + `damage_type` tinyint(5) unsigned NOT NULL DEFAULT '0', + `damage_low1` smallint(5) unsigned NOT NULL DEFAULT '0', + `damage_high1` smallint(5) unsigned NOT NULL DEFAULT '0', + `damage_low2` smallint(5) unsigned NOT NULL DEFAULT '0', + `damage_high2` smallint(5) unsigned NOT NULL DEFAULT '0', + `damage_low3` smallint(5) unsigned NOT NULL DEFAULT '0', + `damage_high3` smallint(5) unsigned NOT NULL DEFAULT '0', + `delay` smallint(5) unsigned NOT NULL DEFAULT '0', + `damage_rating` float NOT NULL DEFAULT '0', + PRIMARY KEY (`id`), + UNIQUE KEY `ItemIndex` (`item_id`), + CONSTRAINT `FK_item_details_weapon` FOREIGN KEY (`item_id`) REFERENCES `items` (`id`) ON DELETE CASCADE ON UPDATE CASCADE +) ENGINE=InnoDB AUTO_INCREMENT=20460 DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci; +INSERT INTO `table_versions` (`name`,`version`,`download_version`) values ('item_details_weapon',1,0); +DROP TABLE IF EXISTS `item_effects`; +CREATE TABLE IF NOT EXISTS `item_effects` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `item_id` int(10) unsigned NOT NULL DEFAULT '0', + `effect` varchar(512) COLLATE latin1_general_ci NOT NULL DEFAULT 'Unknown', + `percentage` tinyint(3) unsigned NOT NULL DEFAULT '100', + `bullet` tinyint(3) unsigned NOT NULL DEFAULT '0', + PRIMARY KEY (`id`), + KEY `FK_item_effects` (`item_id`), + CONSTRAINT `FK_item_effects` FOREIGN KEY (`item_id`) REFERENCES `items` (`id`) ON DELETE CASCADE ON UPDATE CASCADE +) ENGINE=InnoDB AUTO_INCREMENT=241808 DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci; +INSERT INTO `table_versions` (`name`,`version`,`download_version`) values ('item_effects',1,0); +DROP TABLE IF EXISTS `item_itemset_bonus_effects`; +CREATE TABLE IF NOT EXISTS `item_itemset_bonus_effects` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `set_id` int(10) unsigned NOT NULL DEFAULT '0', + `master_item_id` int(10) unsigned NOT NULL DEFAULT '0', + `items_needed` tinyint(3) unsigned NOT NULL DEFAULT '0', + `subbulletflag` tinyint(3) unsigned NOT NULL DEFAULT '0', + `description` varchar(512) COLLATE latin1_general_ci DEFAULT '', + `percentage` tinyint(3) unsigned NOT NULL DEFAULT '100', + `effect_order` tinyint(3) unsigned NOT NULL DEFAULT '0', + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci; +INSERT INTO `table_versions` (`name`,`version`,`download_version`) values ('item_itemset_bonus_effects',1,0); +DROP TABLE IF EXISTS `item_itemset_bonus_stats`; +CREATE TABLE IF NOT EXISTS `item_itemset_bonus_stats` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `set_id` int(10) unsigned NOT NULL DEFAULT '0', + `master_item_id` int(10) unsigned NOT NULL DEFAULT '0', + `items_needed` tinyint(3) unsigned NOT NULL DEFAULT '0', + `type` tinyint(3) unsigned NOT NULL DEFAULT '0', + `subtype` tinyint(3) unsigned NOT NULL DEFAULT '0', + `value` smallint(5) NOT NULL DEFAULT '0', + `value2` float DEFAULT '0', + `name` varchar(512) COLLATE latin1_general_ci DEFAULT '', + `unknown` tinyint(3) unsigned NOT NULL DEFAULT '0', + `stats_order` tinyint(3) unsigned NOT NULL DEFAULT '0', + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci; +INSERT INTO `table_versions` (`name`,`version`,`download_version`) values ('item_itemset_bonus_stats',1,0); +DROP TABLE IF EXISTS `item_itemset_items`; +CREATE TABLE IF NOT EXISTS `item_itemset_items` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `set_id` int(10) unsigned NOT NULL DEFAULT '0', + `item_id` int(10) unsigned NOT NULL DEFAULT '0', + `master_item_id` int(10) unsigned NOT NULL DEFAULT '0', + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci; +INSERT INTO `table_versions` (`name`,`version`,`download_version`) values ('item_itemset_items',1,0); +DROP TABLE IF EXISTS `item_itemsets`; +CREATE TABLE IF NOT EXISTS `item_itemsets` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `set_name` varchar(250) COLLATE latin1_general_ci NOT NULL DEFAULT 'Unknown', + PRIMARY KEY (`id`), + UNIQUE KEY `SetNameIDX` (`set_name`) +) ENGINE=InnoDB DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci; +INSERT INTO `table_versions` (`name`,`version`,`download_version`) values ('item_itemsets',1,0); +DROP TABLE IF EXISTS `item_levels_override`; +CREATE TABLE IF NOT EXISTS `item_levels_override` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `item_id` int(10) unsigned NOT NULL DEFAULT '0', + `adventure_class_id` tinyint(3) unsigned NOT NULL DEFAULT '0', + `tradeskill_class_id` tinyint(3) unsigned NOT NULL DEFAULT '0', + `level` smallint(5) unsigned NOT NULL DEFAULT '1', + PRIMARY KEY (`id`), + UNIQUE KEY `ItemClassIDX` (`item_id`,`adventure_class_id`,`tradeskill_class_id`), + CONSTRAINT `FK_item_levels_override` FOREIGN KEY (`item_id`) REFERENCES `items` (`id`) ON DELETE CASCADE ON UPDATE CASCADE +) ENGINE=InnoDB DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci; +INSERT INTO `table_versions` (`name`,`version`,`download_version`) values ('item_levels_override',1,0); +DROP TABLE IF EXISTS `item_stats`; +CREATE TABLE IF NOT EXISTS `item_stats` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `item_id` int(10) unsigned NOT NULL DEFAULT '0', + `type` tinyint(3) unsigned NOT NULL DEFAULT '0', + `subtype` tinyint(3) unsigned NOT NULL DEFAULT '0', + `value` float NOT NULL DEFAULT '0', + `text` varchar(250) COLLATE latin1_general_ci DEFAULT NULL, + `description` text COLLATE latin1_general_ci, + PRIMARY KEY (`id`), + KEY `FK_item_stats` (`item_id`), + CONSTRAINT `FK_item_stats` FOREIGN KEY (`item_id`) REFERENCES `items` (`id`) ON DELETE CASCADE ON UPDATE CASCADE +) ENGINE=InnoDB AUTO_INCREMENT=639932 DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci; +INSERT INTO `table_versions` (`name`,`version`,`download_version`) values ('item_stats',1,0); +DROP TABLE IF EXISTS `items`; +CREATE TABLE IF NOT EXISTS `items` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `name` varchar(100) COLLATE latin1_general_ci NOT NULL DEFAULT '', + `item_type` enum('Normal','Weapon','Ranged','Armor','Shield','Bag','Scroll','Recipe','Food','Bauble','House','Thrown','House Container','Adornment','Profile','Pattern Set','Item Set','Book','Decoration','Dungeon Maker','Marketplace') COLLATE latin1_general_ci NOT NULL DEFAULT 'Normal', + `icon` smallint(5) unsigned NOT NULL DEFAULT '0', + `count` smallint(5) unsigned NOT NULL DEFAULT '0', + `tier` tinyint(3) unsigned NOT NULL DEFAULT '1', + `skill_id_req` int(10) unsigned NOT NULL DEFAULT '0', + `skill_id_req2` int(10) unsigned NOT NULL DEFAULT '0', + `skill_min` smallint(5) unsigned NOT NULL DEFAULT '0', + `weight` int(10) unsigned NOT NULL DEFAULT '0', + `description` text COLLATE latin1_general_ci, + `show_name` tinyint(3) unsigned NOT NULL DEFAULT '1', + `attuneable` tinyint(1) unsigned NOT NULL DEFAULT '0', + `artifact` tinyint(1) unsigned NOT NULL DEFAULT '0', + `lore` tinyint(1) unsigned NOT NULL DEFAULT '0', + `temporary` tinyint(1) unsigned NOT NULL DEFAULT '0', + `notrade` tinyint(1) unsigned NOT NULL DEFAULT '0', + `novalue` tinyint(1) unsigned NOT NULL DEFAULT '0', + `nozone` tinyint(1) unsigned NOT NULL DEFAULT '0', + `nodestroy` tinyint(1) unsigned NOT NULL DEFAULT '0', + `crafted` tinyint(1) unsigned NOT NULL DEFAULT '0', + `good_only` tinyint(1) unsigned NOT NULL DEFAULT '0', + `evil_only` tinyint(1) unsigned NOT NULL DEFAULT '0', + `stacklore` tinyint(3) unsigned NOT NULL DEFAULT '0', + `lore_equip` tinyint(1) unsigned NOT NULL DEFAULT '0', + `flags_16384` tinyint(3) unsigned NOT NULL DEFAULT '0', + `flags_32768` tinyint(3) unsigned NOT NULL DEFAULT '0', + `ornate` tinyint(1) unsigned NOT NULL DEFAULT '0', + `heirloom` tinyint(1) unsigned NOT NULL DEFAULT '0', + `appearance_only` tinyint(1) unsigned NOT NULL DEFAULT '0', + `unlocked` tinyint(3) unsigned NOT NULL DEFAULT '0', + `norepair` tinyint(3) unsigned NOT NULL DEFAULT '0', + `flags2_64` tinyint(3) unsigned NOT NULL DEFAULT '0', + `flags2_256` tinyint(3) unsigned NOT NULL DEFAULT '0', + `usable` tinyint(1) unsigned NOT NULL DEFAULT '0', + `slots` int(10) unsigned NOT NULL DEFAULT '0', + `set_name` varchar(250) COLLATE latin1_general_ci DEFAULT NULL, + `sell_price` int(10) unsigned NOT NULL DEFAULT '0', + `stack_count` tinyint(3) unsigned NOT NULL DEFAULT '1', + `collectable` tinyint(3) unsigned NOT NULL DEFAULT '0', + `adornment_slot1` tinyint(3) unsigned NOT NULL DEFAULT '255', + `adornment_slot2` tinyint(3) unsigned NOT NULL DEFAULT '255', + `adornment_slot3` tinyint(3) unsigned NOT NULL DEFAULT '255', + `adornment_slot4` tinyint(3) unsigned NOT NULL DEFAULT '255', + `adornment_slot5` tinyint(3) unsigned NOT NULL DEFAULT '255', + `adornment_slot6` tinyint(3) unsigned NOT NULL DEFAULT '255', + `adornment_description` varchar(250) COLLATE latin1_general_ci DEFAULT NULL, + `offers_quest_id` int(10) unsigned NOT NULL DEFAULT '0', + `part_of_quest_id` int(10) unsigned NOT NULL DEFAULT '0', + `quest_unknown` tinyint(3) unsigned NOT NULL DEFAULT '0', + `max_charges` smallint(5) unsigned NOT NULL DEFAULT '0', + `display_charges` tinyint(1) unsigned NOT NULL DEFAULT '0', + `recommended_level` smallint(5) unsigned NOT NULL DEFAULT '0', + `adventure_default_level` smallint(5) unsigned NOT NULL DEFAULT '1', + `tradeskill_default_level` smallint(5) unsigned NOT NULL DEFAULT '1', + `adventure_classes` bigint(20) unsigned NOT NULL DEFAULT '0', + `tradeskill_classes` bigint(20) unsigned NOT NULL DEFAULT '0', + `soe_item_id` int(10) NOT NULL DEFAULT '0', + `soe_item_crc` int(10) NOT NULL DEFAULT '0', + `lua_script` varchar(255) COLLATE latin1_general_ci DEFAULT NULL, + `harvest` tinyint(3) unsigned DEFAULT '0', + PRIMARY KEY (`id`), + UNIQUE KEY `ItemIDX` (`soe_item_id`), + KEY `ItemTypeIDX` (`item_type`), + KEY `ItemNameIDX` (`name`) +) ENGINE=InnoDB AUTO_INCREMENT=192188 DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci; +ALTER TABLE items + CHANGE COLUMN flags2_64 reforged TINYINT(3) UNSIGNED NOT NULL DEFAULT 0 AFTER unlocked, + CHANGE COLUMN norepair norepair TINYINT(3) UNSIGNED NOT NULL DEFAULT 0 AFTER reforged, + ADD COLUMN etheral TINYINT(3) UNSIGNED NOT NULL DEFAULT 0 AFTER norepair, + ADD COLUMN refined TINYINT(3) UNSIGNED NOT NULL DEFAULT 0 AFTER etheral, + ADD COLUMN sell_status_amount INT(10) UNSIGNED NOT NULL DEFAULT 0 AFTER sell_price, + CHANGE COLUMN stack_count stack_count SMALLINT(5) UNSIGNED NOT NULL DEFAULT 1 AFTER sell_status_amount, + ADD COLUMN soe_autoquest_id INT(11) DEFAULT NULL AFTER offers_quest_id; +INSERT INTO `table_versions` (`name`,`version`,`download_version`) values ('items',73019,0); +DROP TABLE IF EXISTS `itemstats`; +CREATE TABLE IF NOT EXISTS `itemstats` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `version_range1` smallint(5) unsigned NOT NULL DEFAULT '0', + `version_range2` smallint(5) unsigned NOT NULL DEFAULT '0', + `emu_stat` smallint(5) unsigned NOT NULL DEFAULT '0', + `name` varchar(255) COLLATE latin1_general_ci NOT NULL DEFAULT '', + `stat` smallint(5) unsigned NOT NULL DEFAULT '0', + `table_data_version` smallint(5) unsigned NOT NULL DEFAULT '1', + PRIMARY KEY (`id`), + UNIQUE KEY `newindex` (`version_range1`,`name`,`version_range2`) +) ENGINE=InnoDB AUTO_INCREMENT=635 DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci; +INSERT INTO `table_versions` (`name`,`version`,`download_version`) values ('itemstats',1,0); +DROP TABLE IF EXISTS `languages`; +CREATE TABLE IF NOT EXISTS `languages` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `language` varchar(25) CHARACTER SET latin1 COLLATE latin1_general_ci DEFAULT 'Unknown', + PRIMARY KEY (`id`), + UNIQUE KEY `language` (`language`) +) ENGINE=InnoDB AUTO_INCREMENT=45 DEFAULT CHARSET=latin1; +INSERT INTO `table_versions` (`name`,`version`,`download_version`) values ('languages',1,0); +DROP TABLE IF EXISTS `location_details`; +CREATE TABLE IF NOT EXISTS `location_details` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `location_id` int(10) unsigned NOT NULL DEFAULT '0', + `x` float NOT NULL DEFAULT '0', + `y` float NOT NULL DEFAULT '0', + `z` float NOT NULL DEFAULT '0', + PRIMARY KEY (`id`), + KEY `LocationIDX` (`location_id`), + CONSTRAINT `FK_location_details` FOREIGN KEY (`location_id`) REFERENCES `locations` (`id`) ON DELETE CASCADE ON UPDATE CASCADE +) ENGINE=InnoDB DEFAULT CHARSET=latin1; +INSERT INTO `table_versions` (`name`,`version`,`download_version`) values ('location_details',1,0); +DROP TABLE IF EXISTS `locations`; +CREATE TABLE IF NOT EXISTS `locations` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `zone_id` int(10) unsigned NOT NULL DEFAULT '0', + `grid_id` int(10) unsigned NOT NULL DEFAULT '0', + `name` varchar(64) COLLATE latin1_general_ci DEFAULT NULL, + `include_y` tinyint(3) unsigned NOT NULL DEFAULT '0', + `discovery` tinyint(1) unsigned NOT NULL DEFAULT '0', + PRIMARY KEY (`id`), + KEY `ZoneIDX` (`zone_id`), + KEY `GridIDX` (`grid_id`), + CONSTRAINT `FK_locations` FOREIGN KEY (`zone_id`) REFERENCES `zones` (`id`) ON DELETE CASCADE ON UPDATE CASCADE +) ENGINE=InnoDB AUTO_INCREMENT=9 DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci; +INSERT INTO `table_versions` (`name`,`version`,`download_version`) values ('locations',1,0); +DROP TABLE IF EXISTS `loot_global`; +CREATE TABLE IF NOT EXISTS `loot_global` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `type` enum('Level','Racial','Zone') COLLATE latin1_general_ci NOT NULL DEFAULT 'Zone', + `loot_table` int(10) unsigned NOT NULL, + `value1` int(10) unsigned NOT NULL DEFAULT '0', + `value2` int(10) unsigned NOT NULL DEFAULT '0', + `value3` int(10) unsigned NOT NULL DEFAULT '0', + `value4` int(10) unsigned NOT NULL DEFAULT '0', + PRIMARY KEY (`id`), + KEY `FKLootTable` (`loot_table`), + CONSTRAINT `FKLootTable` FOREIGN KEY (`loot_table`) REFERENCES `loottable` (`id`) ON DELETE CASCADE ON UPDATE CASCADE +) ENGINE=InnoDB DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci; +INSERT INTO `table_versions` (`name`,`version`,`download_version`) values ('loot_global',1,0); +DROP TABLE IF EXISTS `lootdrop`; +CREATE TABLE IF NOT EXISTS `lootdrop` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `loot_table_id` int(10) unsigned NOT NULL DEFAULT '0', + `item_id` int(10) unsigned NOT NULL DEFAULT '0', + `item_charges` smallint(5) unsigned NOT NULL DEFAULT '1', + `equip_item` tinyint(3) unsigned NOT NULL DEFAULT '0', + `probability` float unsigned NOT NULL DEFAULT '25', + PRIMARY KEY (`id`), + KEY `NewIndex` (`loot_table_id`), + KEY `FK_lootdrop` (`item_id`), + CONSTRAINT `FK_lootdrop` FOREIGN KEY (`item_id`) REFERENCES `items` (`id`) ON DELETE CASCADE ON UPDATE CASCADE, + CONSTRAINT `FK_loottable` FOREIGN KEY (`loot_table_id`) REFERENCES `loottable` (`id`) ON DELETE CASCADE ON UPDATE CASCADE +) ENGINE=InnoDB DEFAULT CHARSET=latin1; +INSERT INTO `table_versions` (`name`,`version`,`download_version`) values ('lootdrop',1,0); +DROP TABLE IF EXISTS `loottable`; +CREATE TABLE IF NOT EXISTS `loottable` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `name` varchar(128) COLLATE latin1_general_ci DEFAULT NULL, + `mincoin` int(10) unsigned NOT NULL DEFAULT '0', + `maxcoin` int(10) unsigned NOT NULL DEFAULT '0', + `maxlootitems` smallint(5) unsigned NOT NULL DEFAULT '0', + `lootdrop_probability` float unsigned NOT NULL DEFAULT '100', + `coin_probability` float unsigned NOT NULL DEFAULT '100', + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci; +INSERT INTO `table_versions` (`name`,`version`,`download_version`) values ('loottable',1,0); +DROP TABLE IF EXISTS `map_data`; +CREATE TABLE IF NOT EXISTS `map_data` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `map_id` int(10) unsigned NOT NULL DEFAULT '0', + `zone_name` varchar(128) COLLATE latin1_general_ci DEFAULT NULL, + `highest` float NOT NULL DEFAULT '0', + `lowest` float NOT NULL DEFAULT '0', + `explored_map_name` varchar(255) COLLATE latin1_general_ci DEFAULT NULL, + `unexplored_map_name` varchar(255) COLLATE latin1_general_ci DEFAULT NULL, + `bounds1_x` float NOT NULL DEFAULT '0', + `bounds1_z` float NOT NULL DEFAULT '0', + `bounds2_x` float NOT NULL DEFAULT '0', + `bounds2_z` float NOT NULL DEFAULT '0', + `bounds3_x` float NOT NULL DEFAULT '0', + `bounds3_z` float NOT NULL DEFAULT '0', + `bounds4_x` float NOT NULL DEFAULT '0', + `bounds4_z` float NOT NULL DEFAULT '0', + `explored_key` bigint(20) unsigned NOT NULL DEFAULT '0', + `unexplored_key` bigint(20) unsigned NOT NULL DEFAULT '0', + PRIMARY KEY (`id`), + UNIQUE KEY `MapIDX` (`map_id`,`zone_name`,`unexplored_map_name`,`explored_map_name`) +) ENGINE=InnoDB AUTO_INCREMENT=196 DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci; +INSERT INTO `map_data` (`id`, `map_id`, `zone_name`, `highest`, `lowest`, `explored_map_name`, `unexplored_map_name`, `bounds1_x`, `bounds1_z`, `bounds2_x`, `bounds2_z`, `bounds3_x`, `bounds3_z`, `bounds4_x`, `bounds4_z`, `explored_key`, `unexplored_key`) VALUES + (1, 689884944, 'fprt_hood04', 35, 0.5, 'NRVOBM/nms/freeportbeggarscourt_explored.dds', 'NRVOBM/nms/freeportbeggarscourt_unexplored.dds', -225.8, -137.49, 181.39, 158.88, -225.8, -137.49, 181.39, 158.88, 4800855641399099720, 901758263814064518), + (2, 624167834, 'fprt_hood01', 35, 0.5, 'NRVOBM/nms/freeportbigbend_explored.dds', 'NRVOBM/nms/freeportbigbend_unexplored.dds', -268.73, -156.94, 241.76, 233.74, -268.73, -156.94, 241.76, 233.74, 13893361007639750321, 13906198626671770666), + (3, 3015956135, 'darklight_wood', 50, 0.5, 'NRVOBM/nms/dlere_darklight_explored.dds', 'NRVOBM/nms/dlere_darklight_unexplored.dds', -821.22, -602.32, 755.95, 579.64, -821.22, -602.32, 755.95, 579.64, 5213882723512802523, 15208764082748909030), + (4, 1511096826, 'fprt_east', 35, 0.5, 'NRVOBM/nms/freeporteast_explored.dds', 'NRVOBM/nms/freeporteast_unexplored.dds', -12.08, -230.06, 526.27, 181.38, -12.08, -230.06, 526.27, 181.38, 13725871580277591208, 13678307124192906993), + (5, 481320594, 'fprt_hood05', 35, 0.5, 'NRVOBM/nms/freeportlongshadowalley_explored.dds', 'NRVOBM/nms/freeportlongshadowalley_unexplored.dds', -185.63, -147.51, 165.21, 126.03, -185.63, -147.51, 165.21, 126.03, 17184580992826923618, 13923871875585603012), + (6, 1589367136, 'nektulos', 100, 1, 'NRVOBM/nms/nektulos_explored.dds', 'NRVOBM/nms/nektulos_unexplored.dds', -1377.6, -2504.07, 2619.59, 525.19, -1377.6, -2504.07, 2619.59, 525.19, 14951901861444459530, 13425018927123251987), + (7, 3638863494, 'neriak', 35, 0.5, 'NRVOBM/nms/neriak_explored.dds', 'NRVOBM/nms/neriak_unexplored.dds', -337.68, -443.76, 933.08, 509.84, -337.68, -443.76, 933.08, 509.84, 4025380289632629244, 6066130757198157026), + (8, 3699419829, 'fprt_north', 35, 0.5, 'NRVOBM/nms/freeportnorth_explored.dds', 'NRVOBM/nms/freeportnorth_unexplored.dds', -179.19, -422.78, 367.82, -11.37, -179.19, -422.78, 367.82, -11.37, 13615952927484414305, 5455723309099852648), + (9, 2855219261, 'fprt_hood06', 35, 0.5, 'NRVOBM/nms/freeportscaleyard_explored.dds', 'NRVOBM/nms/freeportscaleyard_unexplored.dds', -269.5, -123.97, 214.44, 240.8, -269.5, -123.97, 214.44, 240.8, 9136914063004984589, 13210495355421380022), + (10, 1863868178, 'fprt_south', 35, 0.5, 'NRVOBM/nms/freeportsouth_explored.dds', 'NRVOBM/nms/freeportsouth_unexplored.dds', -188.17, 40.52, 360.64, 449.48, -188.17, 40.52, 360.64, 449.48, 6287736685678233586, 12424845592658234555), + (11, 1692523675, 'fprt_hood02', 35, 0.5, 'NRVOBM/nms/freeportstonestairbyway_explored.dds', 'NRVOBM/nms/freeportstonestairbyway_unexplored.dds', -167.84, -157.1, 164.91, 89.21, -167.84, -157.1, 164.91, 89.21, 9102244713137005177, 17181146217504603163), + (12, 2145507742, 'fprt_adv01_sunken', 35, 0.5, 'NRVOBM/nms/freeportsunkencity_explored.dds', 'NRVOBM/nms/freeportsunkencity_unexplored.dds', -268.89, -177.17, 250.19, 202.49, -268.89, -177.17, 250.19, 202.49, 11201985807363065839, 131908586403301389), + (13, 736913751, 'fprt_hood03', 35, 0.5, 'NRVOBM/nms/freeporttemplestreet_explored.dds', 'NRVOBM/nms/freeporttemplestreet_unexplored.dds', -318.06, -122.85, 233.45, 290.97, -318.06, -122.85, 233.45, 290.97, 9437209823055117782, 16161684958939241492), + (14, 2996805099, 'commonlands', 100, 1, 'NRVOBM/nms/commonlands_explored.dds', 'NRVOBM/nms/commonlands_unexplored.dds', -1751.35, -1300.12, 1671.39, 1289.76, -1751.35, -1300.12, 1671.39, 1289.76, 16327872918514164936, 17372200879931327209), + (15, 1216993332, 'fprt_adv02_graveyard', 35, 0.5, 'NRVOBM/nms/freeportgraveyard_explored.dds', 'NRVOBM/nms/freeportgraveyard_unexplored.dds', -207.48, -161.07, 242.19, 165.89, -207.48, -161.07, 242.19, 165.89, 10552204627275247213, 15742044646771191048), + (16, 4220558408, 'fprt_adv04_ruins', 35, 0.5, 'NRVOBM/nms/freeporttheruins_explored.dds', 'NRVOBM/nms/freeporttheruins_unexplored.dds', -130.56, -62.18, 267.03, 236.56, -130.56, -62.18, 267.03, 236.56, 15556021436831344316, 3128139745008385205), + (17, 2515694938, 'fprt_adv03_sprawl', 35, 0.5, 'NRVOBM/nms/freeportthesprawl_explored.dds', 'NRVOBM/nms/freeportthesprawl_unexplored.dds', -185.04, -119.14, 213.28, 181.75, -185.04, -119.14, 213.28, 181.75, 3289502242023864482, 3819518046652854616), + (18, 520317988, 'fprt_west', 35, 0.5, 'NRVOBM/nms/freeportwest_explored.dds', 'NRVOBM/nms/freeportwest_unexplored.dds', -508.91, -170.01, 40.31, 241.36, -508.91, -170.01, 40.31, 241.36, 1963794546232365483, 10588895289567876865), + (19, 3334402394, 'exp01_cty_majdul', 35, 0.5, 'NRVOBM/nms/majdul_explored.dds', 'NRVOBM/nms/majdul_unexplored.dds', -348.09, -285.92, 433.31, 301.91, -348.09, -285.92, 433.31, 301.91, 627041298884356077, 5859392435652377563), + (20, 3147601995, 'exp01_rgn_sinking_sands_0', 100, 1, 'NRVOBM/nms/sinkingsandsnorth_explored.dds', 'NRVOBM/nms/sinkingsandsnorth_unexplored.dds', -769.25, -1765.56, 2316.81, 550.98, -769.25, -1765.56, 2316.81, 270, 5808151331377710742, 5451386280516143234), + (21, 3147601995, 'exp01_rgn_sinking_sands_1', 100, 1, 'NRVOBM/nms/sinkingsandssouth_explored.dds', 'NRVOBM/nms/sinkingsandssouth_unexplored.dds', -769.9, -923.51, 2323.59, 1395.9, -769.9, 270, 2323.59, 1395.9, 4388730675160386350, 1820563360386611543), + (22, 1472490641, 'exp01_rgn_pillars_of_flame', 100, 1, 'NRVOBM/nms/pillarsofflame_explored.dds', 'NRVOBM/nms/pillarsofflame_unexplored.dds', -2263.39, -1833.15, 842.59, 499.74, -2263.39, -1833.15, 842.59, 499.74, 8133749639445806182, 12597781589928503505), + (23, 3638505046, 'everfrost', 100, 1, 'NRVOBM/nms/everfrost_explored.dds', 'NRVOBM/nms/everfrost_unexplored.dds', -1480.2, -2006.18, 1667.63, 340.46, -1480.2, -2006.18, 1667.63, 340.46, 10806247368961295184, 5316855380603212918), + (24, 80848352, 'exp03_rgn_butcherblock', 200, 1, 'NRVOBM/nms/butcherblock_explored.dds', 'NRVOBM/nms/butcherblock_unexplored.dds', -1822.26, -765.3, 1242.99, 1647.32, -1822.26, -765.3, 1242.99, 1647.32, 16986724152149385011, 6790066804192744707), + (25, 2774110503, 'exp03_rgn_greater_faydark_0', 150, 0.5, 'NRVOBM/nms/greaterfaydark_explored.dds', 'NRVOBM/nms/greaterfaydark_unexplored.dds', -908.35, -920.2, 1552.5, 926.59, -908.35, -920.2, 1552.5, 926.59, 16444705060225863816, 13634656485568206622), + (26, 2774110503, 'exp03_rgn_greater_faydark_1', 150, 0.5, 'NRVOBM/nms/kelethin_explored.dds', 'NRVOBM/nms/kelethin_unexplored.dds', -712.88, -14.75, 50.05, 556.06, -712.88, -14.75, 50.05, 556.06, 7796644633907824278, 3634599199700320310), + (27, 2774110503, 'exp03_rgn_greater_faydark_2', 150, 0.5, 'NRVOBM/nms/kelethin_explored.dds', 'NRVOBM/nms/kelethin_unexplored.dds', -712.88, -14.75, 50.05, 556.06, -615, 224, -479, 335, 7796644633907824278, 3634599199700320310), + (28, 2774110503, 'exp03_rgn_greater_faydark_3', 150, 0.5, 'NRVOBM/nms/kelethin_explored.dds', 'NRVOBM/nms/kelethin_unexplored.dds', -712.88, -14.75, 50.05, 556.06, -450, 300, -179, 510, 7796644633907824278, 3634599199700320310), + (29, 2949530798, 'exp03_rgn_lesser_faydark', 150, 1, 'NRVOBM/nms/lesserfaydark_explored.dds', 'NRVOBM/nms/lesserfaydark_unexplored.dds', -1212.94, -780.12, 981.6, 872.1, -1212.94, -780.12, 981.6, 872.1, 6416689908854533881, 17799713797570155618), + (30, 2466122887, 'exp03_rgn_loping_plains', 150, 1, 'NRVOBM/nms/lopingplains_explored.dds', 'NRVOBM/nms/lopingplains_unexplored.dds', -965.07, -728.71, 925.52, 685.62, -965.07, -728.71, 925.52, 685.62, 6114161135949193740, 15282590855742392967), + (31, 1672476788, 'exp03_rgn_steamfont', 100, 1, 'NRVOBM/nms/steamfont_explored.dds', 'NRVOBM/nms/steamfont_unexplored.dds', -470.72, 259.11, 1707.27, 1889.73, -470.72, 259.11, 1707.27, 1889.73, 6585041603798635248, 12765847214945532686), + (32, 2620122292, 'feerrott', 100, 1, 'NRVOBM/nms/feerrott_explored.dds', 'NRVOBM/nms/feerrott_unexplored.dds', -479.32, -477.66, 2271.27, 1606.99, -479.32, -477.66, 2271.27, 1606.99, 9934530746509178878, 15376862988231080656), + (33, 3216867334, 'adv04_rgn_mystic_lake', 100, 1, 'NRVOBM/nms/mystic_lake_explored.dds', 'NRVOBM/nms/mystic_lake_unexplored.dds', -477.83, -290.5, 652.73, 560.4, -477.83, -290.5, 652.73, 560.4, 17065587528787906079, 7440120844361720746), + (34, 3789723549, 'adv04_rgn_village', 100, 1, 'NRVOBM/nms/mystic_lake_village_explored.dds', 'NRVOBM/nms/mystic_lake_village_unexplored.dds', -547.84, -493.94, 612.05, 380.2, -547.84, -493.94, 612.05, 380.2, 2324712397108041533, 4339790570666083225), + (35, 606080845, 'antonica', 100, 1, 'NRVOBM/nms/antonica_explored.dds', 'NRVOBM/nms/antonica_unexplored.dds', -652.63, -1178.98, 2910.01, 1526.14, -652.63, -1178.98, 2910.01, 1526.14, 9696150041059803081, 6339337691777724671), + (36, 1796499030, 'qey_village04', 35, 0.5, 'NRVOBM/nms/qeynoscastleviewhamlet_explored.dds', 'NRVOBM/nms/qeynoscastleviewhamlet_unexplored.dds', -1012.9, -312.79, -553.08, 41.48, -1012.9, -312.79, -553.08, 41.48, 15462632759483396449, 867966370954510497), + (37, 1977002648, 'qey_village03', 35, 0.5, 'NRVOBM/nms/qeynosgreystoneyard_explored.dds', 'NRVOBM/nms/qeynosgreystoneyard_unexplored.dds', -1104.84, -289.78, -649.27, 54.27, -1104.84, -289.78, -649.27, 54.27, 14219950055086169880, 2803156202057389600), + (38, 2051421555, 'qey_village01', 35, 0.5, 'NRVOBM/nms/qeynosnettlevillehovel_explored.dds', 'NRVOBM/nms/qeynosnettlevillehovel_unexplored.dds', -884.86, 153.19, -403.2, 513.58, -884.86, 153.19, -403.2, 513.58, 15435981793457631353, 15965042855920104932), + (39, 1321576746, 'qey_north_0', 35, 0.5, 'NRVOBM/nms/qeynosnorth1_explored.dds', 'NRVOBM/nms/qeynosnorth1_unexplored.dds', -634.49, -134.62, -165.38, 212.35, -634.49, -111.5, -165.38, 212.35, 1593568053289547433, 10364039492447242135), + (40, 1321576746, 'qey_north_1', 35, 0.5, 'NRVOBM/nms/qeynosnorth2_explored.dds', 'NRVOBM/nms/qeynosnorth2_unexplored.dds', -632.23, -406.43, -163.52, -54.73, -632.23, -406.43, -163.52, -111.5, 8662284756197645628, 16890549110374680397), + (41, 798652325, 'qey_adv01_oakmyst', 35, 0.5, 'NRVOBM/nms/qeynosoakmystforest_explored.dds', 'NRVOBM/nms/qeynosoakmystforest_unexplored.dds', -1177.5, -462.25, -605.39, -33.11, -1177.5, -462.25, -605.39, -33.11, 17204718708737063489, 16748353685447147271), + (42, 2292693789, 'qey_harbor', 35, 0.5, 'NRVOBM/nms/qeynosharbor_explored.dds', 'NRVOBM/nms/qeynosharbor_unexplored.dds', -1044.11, -155.04, -586.95, 188.59, -1044.11, -155.04, -586.95, 188.59, 4420958767950396073, 6537548439458091712), + (43, 590283973, 'qey_south', 35, 0.5, 'NRVOBM/nms/qeynossouth_explored.dds', 'NRVOBM/nms/qeynossouth_unexplored.dds', -794.7, 9.99, -336.22, 354.07, -794.7, 9.99, -336.22, 354.07, 3203350283198674362, 5435883873871528381), + (44, 2423293410, 'qey_village02', 35, 0.5, 'NRVOBM/nms/qeynosstarcrestcommune_explored.dds', 'NRVOBM/nms/qeynosstarcrestcommune_unexplored.dds', -994.1, 133.09, -534.37, 477.61, -994.1, 133.09, -534.37, 477.61, 17000969402592380513, 2684731269491297199), + (45, 1658537518, 'qey_village06', 35, 0.5, 'NRVOBM/nms/qeynosbaubbleshire_explored.dds', 'NRVOBM/nms/qeynosbaubbleshire_unexplored.dds', -1202.29, -731.03, -545.37, -218.19, -1202.29, -731.03, -545.37, -218.19, 176299128319668806, 2049429213224763607), + (46, 598564841, 'qey_elddar', 35, 0.5, 'NRVOBM/nms/qeynoselddargrove_explored.dds', 'NRVOBM/nms/qeynoselddargrove_unexplored.dds', -1004.46, -588.61, -428.61, -152.51, -1004.46, -588.61, -428.61, -152.51, 174604223581131048, 3008929186351491332), + (47, 2847238067, 'qey_adv02_ruins', 35, 0.5, 'NRVOBM/nms/qeynosforestruins_explored.dds', 'NRVOBM/nms/qeynosforestruins_unexplored.dds', -1463.14, -1000.01, -675.87, -415.73, -1463.14, -1000.01, -675.87, -415.73, 1282097909803057147, 17471212299590345875), + (48, 226232511, 'qey_adv04_bog', 35, 0.5, 'NRVOBM/nms/qeynospeatbog_explored.dds', 'NRVOBM/nms/qeynospeatbog_unexplored.dds', -936.08, 336.3, -463.13, 692.21, -936.08, 336.3, -463.13, 692.21, 16743122741266783850, 14013686924212037841), + (49, 3713103859, 'steppes', 100, 1, 'NRVOBM/nms/thunderingsteppes_explored.dds', 'NRVOBM/nms/thunderingsteppes_unexplored.dds', -2573.44, -1205.21, 1618.27, 1966.47, -2573.44, -1205.21, 1618.27, 1966.47, 1189019206961727173, 14242711281201375492), + (50, 1778622548, 'qey_village05', 35, 0.5, 'NRVOBM/nms/qeynoswillowwood_explored.dds', 'NRVOBM/nms/qeynoswillowwood_unexplored.dds', -1258.05, -892.88, -499.3, -310.57, -1258.05, -892.88, -499.3, -310.57, 9150772007208460243, 5398585900817023960), + (51, 1120935014, 'exp04_rgn_fens_of_nathsar', 150, 1, 'NRVOBM/nms/fens_explored.dds', 'NRVOBM/nms/fens_unexplored.dds', -2943.84, -2995.24, 4711.95, 2734.79, -2943.84, -2995.24, 4711.95, 2734.79, 4748445054443799500, 13038592193461676513), + (52, 803025503, 'exp04_rgn_timorous_deep_0', 150, 0.5, 'NRVOBM/nms/timorousdeep_explored.dds', 'NRVOBM/nms/timorousdeep_unexplored.dds', -3264.41, -956.91, 730.29, 2041.62, -3264.41, -956.91, 730.29, 2041.62, 8594803996397212170, 16583833509182073751), + (53, 803025503, 'exp04_rgn_timorous_deep_1', 150, 0.5, 'NRVOBM/nms/gorowyntop_explored.dds', 'NRVOBM/nms/gorowyntop_unexplored.dds', -2890.45, 992.8, -2339, 1406.25, -2890.45, 1018, -2205, 1372, 7318396749680160946, 10506488850154391603), + (54, 803025503, 'exp04_rgn_timorous_deep_2', 150, 0.5, 'NRVOBM/nms/gorowynbottom_explored.dds', 'NRVOBM/nms/gorowynbottom_unexplored.dds', -2890.45, 992.8, -2339, 1406.25, -2783, 1137, -2385, 1373, 17577488901259245340, 17648099873460854204), + (55, 1843950258, 'exp04_rgn_jarsath_wastes', 150, 1, 'NRVOBM/nms/jarsath_explored.dds', 'NRVOBM/nms/jarsath_unexplored.dds', -2600.13, -2055.96, 4096.49, 3081.38, -2600.13, -2055.96, 4096.49, 3081.38, 6309459621313500911, 5469397549594442926), + (56, 3698519862, 'exp04_rgn_kunzar_jungle', 150, 1, 'NRVOBM/nms/kunzar_explored.dds', 'NRVOBM/nms/kunzar_unexplored.dds', -2373.98, -1567.05, 1925.73, 1704.59, -2373.98, -1567.05, 1925.73, 1704.59, 15064603935973368680, 1065628830467543370), + (57, 50574630, 'exp04_rgn_kylong_plains', 150, 1, 'NRVOBM/nms/kylong_explored.dds', 'NRVOBM/nms/kylong_unexplored.dds', -2870.96, -3587, 3170.91, 927.03, -2870.96, -3587, 3170.91, 927.03, 6732068156651055471, 702674427380517695), + (58, 1238692603, 'lavastorm', 100, 1, 'NRVOBM/nms/lavastorm_explored.dds', 'NRVOBM/nms/lavastorm_unexplored.dds', -797.12, -822.96, 1328.66, 745.33, -797.12, -822.96, 1328.66, 745.33, 4778084254654460528, 10357358143206496540), + (59, 540361188, 'exp05_rgn_innothule_0', 150, 1, 'NRVOBM/nms/Innothule_bottom_explored.dds', 'NRVOBM/nms/Innothule_bottom_unexplored.dds', -2871.3, -1563.66, 3145.39, 3011.64, -2871.3, -1563.66, 3145.39, 3011.64, 7976594891636730107, 12400329629261304445), + (60, 540361188, 'exp05_rgn_innothule_1', 150, 1, 'NRVOBM/nms/Innothule_top_explored.dds', 'NRVOBM/nms/Innothule_top_unexplored.dds', -2951.74, -1581.67, 3193.58, 3002.03, -2951.74, -1581.67, 3193.58, 3002.03, 7977227565062952700, 18174869680104535186), + (61, 3801547714, 'exp02_rgn_realm_of_twilight', 100, 1, 'NRVOBM/nms/realmoftwilight_explored.dds', 'NRVOBM/nms/realmoftwilight_unexplored.dds', -1490.48, -1181.85, 1693.79, 1216.61, -1490.48, -1181.85, 1693.79, 1216.61, 4365228348667727585, 13795972394651300598), + (62, 2413690345, 'exp02_rgn_realm_of_dawn', 100, 1, 'NRVOBM/nms/realmofdawn_explored.dds', 'NRVOBM/nms/realmofdawn_unexplored.dds', -1274.45, -963.48, 1384.82, 1045.41, -1274.45, -963.48, 1384.82, 1045.41, 3480121933232246843, 17172823087655282605), + (63, 4114060132, 'exp02_rgn_realm_of_night', 100, 1, 'NRVOBM/nms/realmofnight_explored.dds', 'NRVOBM/nms/realmofnight_unexplored.dds', -1536.85, -984.43, 1543.17, 1326.63, -1536.85, -984.43, 1543.17, 1326.63, 7922868148507137580, 3514434409054901812), + (64, 456626312, 'rivervale', 100, 1, 'NRVOBM/nms/rivervale_explored.dds', 'NRVOBM/nms/rivervale_unexplored.dds', -1622.79, -1445.35, 2332.72, 1505.69, -1622.79, -1445.35, 2332.72, 1505.69, 6962042073411490376, 7938990975975226834), + (65, 2763371011, 'enchanted', 100, 1, 'NRVOBM/nms/Enchantedlands_explored.dds', 'NRVOBM/nms/Enchantedlands_unexplored.dds', -919.73, -1398.81, 1263.92, 238.36, -919.73, -1398.81, 1263.92, 238.36, 17497270808375111069, 13340729561896321954), + (66, 2782496766, 'orcishwastes', 100, 1, 'NRVOBM/nms/zek_explored.dds', 'NRVOBM/nms/zek_unexplored.dds', -1131.55, -1016.4, 993.59, 570.54, -1131.55, -1016.4, 993.59, 570.54, 14881116540456471491, 17890726624561211948), + (67, 2567809289, 'halas_0', 50, 0.5, 'NRVOBM/nms/hallas_explored.dds', 'NRVOBM/nms/hallas_unexplored.dds', -2060.31, -1490.01, 1817.4, 1412.89, -5000, -5000, 5000, 5000, 2786678981700087224, 6249938391497124718), + (68, 2567809289, 'halas_1', 50, 0.5, 'NRVOBM/nms/hallas_cave_explored.dds', 'NRVOBM/nms/hallas_cave_unexplored.dds', -571.5, -283.73, 525.59, 538.26, -288, -107, 287, 334, 10500156960146780432, 11984741782918218328), + (69, 2567809289, 'halas_2', 50, 0.5, 'NRVOBM/nms/hallas_town_explored.dds', 'NRVOBM/nms/hallas_town_unexplored.dds', -192.07, -289.52, 891.52, 513.72, 216, -218, 408, -22, 1416647764989539994, 1416647764989539994), + (70, 2567809289, 'halas_3', 50, 0.5, 'NRVOBM/nms/hallas_town_explored.dds', 'NRVOBM/nms/hallas_town_unexplored.dds', -192.07, -289.52, 891.52, 513.72, 270, -54, 460, 353, 1416647764989539994, 1416647764989539994), + (71, 3861182166, 'battleground_iksar_ruins_0', 0, 0, 'NRVOBM/nms/battlegrounds_ctf_explored.dds', 'NRVOBM/nms/battlegrounds_ctf_explored.dds', -479, -370, 439, 328, -5000, -5000, 5000, 5000, 12985036808671302696, 12985036808671302696), + (72, 119032140, 'battleground_gears_of_klakanon_0', 0, 0, 'NRVOBM/nms/battlegrounds_relic_explored.dds', 'NRVOBM/nms/battlegrounds_relic_explored.dds', -85, -59, 84, 65, -5000, -5000, 5000, 5000, 14706693216500816344, 14706693216500816344), + (73, 2500428036, 'battleground_realm_of_prexus_0', 0, 0, 'NRVOBM/nms/battlegrounds_nodes_explored.dds', 'NRVOBM/nms/battlegrounds_nodes_explored.dds', -624, -470, 614, 462, -5000, -5000, 5000, 5000, 14767813154843060257, 14767813154843060257), + (74, 2567809289, 'halas_2', 50, 0.5, 'NRVOBM/nms/hallas_town_explored.dds', 'NRVOBM/nms/hallas_town_explored.dds', -192.07, -289.53, 891.52, 513.73, 216, -218, 408, -22, 1416647764989539994, 1416647764989539994), + (75, 2567809289, 'halas_3', 50, 0.5, 'NRVOBM/nms/hallas_town_explored.dds', 'NRVOBM/nms/hallas_town_explored.dds', -192.07, -289.53, 891.52, 513.73, 270, -54, 460, 353, 1416647764989539994, 1416647764989539994), + (76, 803025503, 'exp04_rgn_timorous_deep_2', 150, 0.5, 'NRVOBM/nms/gorowyntop_explored.dds', 'NRVOBM/nms/gorowyntop_unexplored.dds', -2890.45, 992.8, -2339, 1406.25, -2783, 1137, -2385, 1373, 7318396749680160946, 10506488850154391603), + (77, 2224654112, 'freeport_combined', 35, 0.5, 'NRVOBM/nms/freeport_explored.dds', 'NRVOBM/nms/freeport_explored.dds', -461, -392, 517, 342, -1500, -1500, 1500, 1500, 7657417192443711689, 7657417192443711689), + (78, 1143602509, 'exp06_rgn_odus_north', 150, 1, 'NRVOBM/nms/odus_north_explored.dds', 'NRVOBM/nms/odus_north_unexplored.dds', -1866, -860, 2435, 2331, -1296, -889, 1139, 1486, 4193934237649099649, 8355002581792198744), + (79, 291437850, 'exp06_rgn_odus_south_0', 150, 1, 'NRVOBM/nms/odus_south_explored.dds', 'NRVOBM/nms/odus_south_unexplored.dds', -3220, 382, 2878, 4957, -5000, -5000, 5000, 5000, 5378341627346504265, 17836069960944570576), + (80, 291437850, 'exp06_rgn_odus_south_1', 150, 1, 'NRVOBM/nms/odus_cave_top_explored.dds', 'NRVOBM/nms/odus_cave_top_unexplored.dds', -1499, 2971, -706, 3565, -1499, 2971, -706, 3565, 7189064107602066426, 15689380470328731586), + (81, 291437850, 'exp06_rgn_odus_south_2', 150, 1, 'NRVOBM/nms/odus_cave_bottom_explored.dds', 'NRVOBM/nms/odus_cave_bottom_unexplored.dds', -1499, 2971, -706, 3565, -1499, 2971, -706, 3565, 10713589630524092140, 7513375462749178008), + (82, 291437850, 'exp06_rgn_odus_south_3', 150, 1, 'NRVOBM/nms/odus_south_explored.dds', 'NRVOBM/nms/odus_south_unexplored.dds', -3220, 382, 2878, 4957, -1497, 3268, -1383, 3375, 5378341627346504265, 17836069960944570576), + (83, 291437850, 'exp06_rgn_odus_south_4', 150, 1, 'NRVOBM/nms/odus_cave_explored.dds', 'NRVOBM/nms/odus_cave_unexplored.dds', -968, 3372, -100, 4019, -834.43, 3485.5, -306.55, 3925.95, 11070526559645328143, 2664448008597217482), + (84, 907158877, 'fprt_hood03', 35, 0.5, 'NRVOBM/nms/freeporttemplestreet_explored.dds', 'NRVOBM/nms/freeporttemplestreet_unexplored.dds', -318.06, -122.85, 233.45, 290.97, -318.06, -122.85, 233.45, 290.97, 9437209823055117782, 16161684958939241492), + (85, 3160691463, 'exp07_rgn_great_divide_0', 100, 1, 'NRVOBM/nms/great_divide_explored.dds', 'NRVOBM/nms/great_divide_unexplored.dds', -2960, -1316, 1745, 2132, -2920, -1265, 1700, 2090, 15398375324763939407, 14512176915715961905), + (86, 3160691463, 'exp07_rgn_great_divide_1', 100, 1, 'NRVOBM/nms/great_divide_iceclad_explored.dds', 'NRVOBM/nms/great_divide_iceclad_unexplored.dds', 75, -2927, 2327, -1237, 144, -2864, 2266, -1300, 12395935522050732296, 14163990487889687947), + (87, 3160691463, 'exp07_rgn_great_divide_2', 100, 1, 'NRVOBM/nms/tizmak_explored.dds', 'NRVOBM/nms/tizmak_unexplored.dds', 23, -378, 708, 145, 124, -279, 641, 7, 5345382249830368354, 7309631109865933654), + (88, 1620258631, 'exp07_rgn_eastern_wastes', 100, 1, 'NRVOBM/nms/eastern_wastes_explored.dds', 'NRVOBM/nms/eastern_wastes_unexplored.dds', -3225, 1624, 1856, 5465, -3225, 1624, 1856, 5465, 14379236195658250109, 11061710627426383934), + (89, 307291459, 'exp07_dun_plane_of_war_0', 0, 0, 'NRVOBM/nms/exp07_dun_plane_of_war.dds', 'NRVOBM/nms/exp07_dun_plane_of_war.dds', -1964, -1484, 1640, 1224, -2000, -2000, 2000, 2000, 7098767948089097895, 7098767948089097895), + (90, 2753675974, 'exp07_dun_plane_of_war_challenge_0', 0, 0, 'NRVOBM/nms/exp07_dun_plane_of_war.dds', 'NRVOBM/nms/exp07_dun_plane_of_war.dds', -1964, -1484, 1640, 1224, -2000, -2000, 2000, 2000, 7098767948089097895, 7098767948089097895), + (91, 2838840815, 'exp07_dun_plane_of_war_raid_0', 0, 0, 'NRVOBM/nms/exp07_dun_plane_of_war.dds', 'NRVOBM/nms/exp07_dun_plane_of_war.dds', -1964, -1484, 1640, 1224, -2000, -2000, 2000, 2000, 7098767948089097895, 7098767948089097895), + (92, 854639842, 'exp07_dun_drunder_sullon_spire_0', 0, 0, 'NRVOBM/nms/exp07_dun_drunder.dds', 'NRVOBM/nms/exp07_dun_drunder.dds', -175, -142, 185, 125, -2000, -2000, 2000, 2000, 276240980989650788, 276240980989650788), + (93, 728095085, 'exp07_dun_drunder_sullon_spire_raid_easy_0', 0, 0, 'NRVOBM/nms/exp07_dun_drunder.dds', 'NRVOBM/nms/exp07_dun_drunder.dds', -175, -142, 185, 125, -2000, -2000, 2000, 2000, 276240980989650788, 276240980989650788), + (94, 1136416641, 'exp07_dun_drunder_sullon_spire_raid_0', 0, 0, 'NRVOBM/nms/exp07_dun_drunder.dds', 'NRVOBM/nms/exp07_dun_drunder.dds', -175, -142, 185, 125, -2000, -2000, 2000, 2000, 276240980989650788, 276240980989650788), + (95, 564686796, 'exp07_dun_drunder_vuul_0', 0, 0, 'NRVOBM/nms/exp07_dun_drunder.dds', 'NRVOBM/nms/exp07_dun_drunder.dds', -175, -142, 185, 125, -2000, -2000, 2000, 2000, 276240980989650788, 276240980989650788), + (96, 701535643, 'exp07_dun_drunder_tallon_stronghold_raid_easy_0', 0, 0, 'NRVOBM/nms/exp07_dun_drunder.dds', 'NRVOBM/nms/exp07_dun_drunder.dds', -175, -142, 185, 125, -2000, -2000, 2000, 2000, 276240980989650788, 276240980989650788), + (97, 3182672969, 'exp07_dun_drunder_tallon_stronghold_raid_0', 0, 0, 'NRVOBM/nms/exp07_dun_drunder.dds', 'NRVOBM/nms/exp07_dun_drunder.dds', -175, -142, 185, 125, -2000, -2000, 2000, 2000, 276240980989650788, 276240980989650788), + (98, 3476613004, 'exp07_dun_drunder_vallon_tower_raid_easy_0', 0, 0, 'NRVOBM/nms/exp07_dun_drunder.dds', 'NRVOBM/nms/exp07_dun_drunder.dds', -175, -142, 185, 125, -2000, -2000, 2000, 2000, 276240980989650788, 276240980989650788), + (99, 2709892608, 'exp07_dun_drunder_vallon_tower_raid_0', 0, 0, 'NRVOBM/nms/exp07_dun_drunder.dds', 'NRVOBM/nms/exp07_dun_drunder.dds', -175, -142, 185, 125, -2000, -2000, 2000, 2000, 276240980989650788, 276240980989650788), + (100, 1264714838, 'exp08_rgn_withered_lands', 100, 1, 'NRVOBM/nms/withering_lands_explored.dds', 'NRVOBM/nms/withering_lands_unexplored.dds', -1331, -2589, 4163, 1496, -5000, -5000, 5000, 5000, 17329737067621819744, 16071790561860977455), + (101, 1203853268, 'exp08_dun_skyshrine_contested_0', 0, 0, 'NRVOBM/nms/exp08_dun_skyshrine_market.dds', 'NRVOBM/nms/exp08_dun_skyshrine_market.dds', -446, -512, 414, 136, -41, -58, 41, 44, 7125115118790191414, 7125115118790191414), + (102, 1203853268, 'exp08_dun_skyshrine_contested_1', 0, 0, 'NRVOBM/nms/exp08_dun_skyshrine_market.dds', 'NRVOBM/nms/exp08_dun_skyshrine_market.dds', -446, -512, 414, 136, -168, -147, 168, -55, 7125115118790191414, 7125115118790191414), + (103, 1203853268, 'exp08_dun_skyshrine_contested_2', 0, 0, 'NRVOBM/nms/exp08_dun_skyshrine_market.dds', 'NRVOBM/nms/exp08_dun_skyshrine_market.dds', -446, -512, 414, 136, -5000, -5000, 5000, -58, 7125115118790191414, 7125115118790191414), + (104, 1203853268, 'exp08_dun_skyshrine_contested_3', 0, 0, 'NRVOBM/nms/exp08_dun_skyshrine_arcane.dds', 'NRVOBM/nms/exp08_dun_skyshrine_arcane.dds', -670, -247, 334, 507, -5000, -144, -25, 5000, 1118540259285863273, 1118540259285863273), + (105, 1203853268, 'exp08_dun_skyshrine_contested_4', 0, 0, 'NRVOBM/nms/exp08_dun_skyshrine_capital.dds', 'NRVOBM/nms/exp08_dun_skyshrine_capital.dds', -379, -260, 653, 506, 20, -146, 5000, 5000, 15959633070977862839, 15959633070977862839), + (106, 538386786, 'qeynos_combined02_0', 35, 1, 'NRVOBM/nms/qeynos_new_explored.dds', 'NRVOBM/nms/qeynos_new_unexplored.dds', -1232, -555, -73, 309, -5000, -165, 5000, 5000, 16974777748194939734, 9117030143180588321), + (107, 538386786, 'qeynos_combined02_1', 35, 1, 'NRVOBM/nms/qeynos_new_explored.dds', 'NRVOBM/nms/qeynos_new_unexplored.dds', -1284, -579, -48, 337, -5000, -5000, 5000, -165, 16974777748194939734, 9117030143180588321), + (108, 446027497, 'exp09_dun_wurmbones_end_solo', 0, 0, 'NRVOBM/nms/exp09_wurmbone_end.dds', 'NRVOBM/nms/exp09_wurmbone_end.dds', -1121, -828, 672, 527, -5000, -5000, 5000, 5000, 10598390550327136336, 10598390550327136336), + (109, 1995393318, 'exp09_dun_wurmbone_gulch_solo', 0, 0, 'NRVOBM/nms/exp09_wurmbone_gulch.dds', 'NRVOBM/nms/exp09_wurmbone_gulch.dds', -493, -331, 458, 385, -5000, -5000, 5000, 5000, 9670446201098646704, 9670446201098646704), + (110, 2143536644, 'exp09_dun_wurmbones_end', 0, 0, 'NRVOBM/nms/exp09_wurmbone_end.dds', 'NRVOBM/nms/exp09_wurmbone_end.dds', -1121, -828, 672, 527, -5000, -5000, 5000, 5000, 10598390550327136336, 10598390550327136336), + (111, 1822738145, 'exp09_dun_wurmbone_gulch', 0, 0, 'NRVOBM/nms/exp09_wurmbone_gulch.dds', 'NRVOBM/nms/exp09_wurmbone_gulch.dds', -493, -331, 458, 385, -5000, -5000, 5000, 5000, 9670446201098646704, 9670446201098646704), + (112, 2737465396, 'exp09_dun_deepchelsith_solo', 0, 0, 'NRVOBM/nms/exp09_chelsith.dds', 'NRVOBM/nms/exp09_chelsith.dds', -1793, -1380, 931, 664, -5000, -5000, 5000, 5000, 8272329878726696270, 8272329878726696270), + (113, 2611216761, 'exp09_dun_deepchelsith', 0, 0, 'NRVOBM/nms/exp09_chelsith.dds', 'NRVOBM/nms/exp09_chelsith.dds', -1793, -1380, 931, 664, -5000, -5000, 5000, 5000, 8272329878726696270, 8272329878726696270), + (114, 344863312, 'exp09_rgn_eidolon_jungle', 100, 1, 'NRVOBM/nms/exp09_eidolon_jungle_explored.dds', 'NRVOBM/nms/exp09_eidolon_jungle_unexplored.dds', -623, -686, 2651, 1767, -5000, -5000, 5000, 5000, 17016420756975687580, 11834282439838035541), + (115, 82694744, 'exp09_dun_temple_of_faceless_solo_0', 0, 0, 'NRVOBM/nms/exp09_temple_of_faceless_south.dds', 'NRVOBM/nms/exp09_temple_of_faceless_south.dds', -104, -162, 860, 557, -5000, -46, 5000, 5000, 15680989842487369893, 15680989842487369893), + (116, 82694744, 'exp09_dun_temple_of_faceless_solo_1', 0, 0, 'NRVOBM/nms/exp09_temple_of_faceless_north.dds', 'NRVOBM/nms/exp09_temple_of_faceless_north.dds', -98, -590, 855, 127, -5000, -5000, 5000, 46, 8420950750948911609, 8420950750948911609), + (117, 3227813427, 'exp09_dun_throne_of_fear_quest', 0, 0, 'NRVOBM/nms/exp09_throne_of_fear.dds', 'NRVOBM/nms/exp09_throne_of_fear.dds', -449, -274, 440, 396, -5000, -5000, 5000, 5000, 9218037391285322422, 9218037391285322422), + (118, 3649391170, 'exp09_dun_temple_of_faceless_raid_0', 0, 0, 'NRVOBM/nms/exp09_temple_of_faceless_south.dds', 'NRVOBM/nms/exp09_temple_of_faceless_south.dds', -104, -162, 860, 557, -5000, -46, 5000, 5000, 15680989842487369893, 15680989842487369893), + (119, 3649391170, 'exp09_dun_temple_of_faceless_raid_1', 0, 0, 'NRVOBM/nms/exp09_temple_of_faceless_north.dds', 'NRVOBM/nms/exp09_temple_of_faceless_north.dds', -98, -590, 855, 127, -5000, -5000, 5000, 46, 8420950750948911609, 8420950750948911609), + (120, 2955537692, 'exp09_dun_throne_of_fear_solo', 0, 0, 'NRVOBM/nms/exp09_throne_of_fear.dds', 'NRVOBM/nms/exp09_throne_of_fear.dds', -449, -274, 440, 396, -5000, -5000, 5000, 5000, 9218037391285322422, 9218037391285322422), + (121, 3508339628, 'exp09_dun_throne_of_fear', 0, 0, 'NRVOBM/nms/exp09_throne_of_fear.dds', 'NRVOBM/nms/exp09_throne_of_fear.dds', -449, -274, 440, 396, -5000, -5000, 5000, 5000, 9218037391285322422, 9218037391285322422), + (122, 3214732470, 'exp09_dun_temple_of_faceless_0', 0, 0, 'NRVOBM/nms/exp09_temple_of_faceless_south.dds', 'NRVOBM/nms/exp09_temple_of_faceless_south.dds', -104, -162, 860, 557, -5000, -46, 5000, 5000, 15680989842487369893, 15680989842487369893), + (123, 3214732470, 'exp09_dun_temple_of_faceless_1', 0, 0, 'NRVOBM/nms/exp09_temple_of_faceless_north.dds', 'NRVOBM/nms/exp09_temple_of_faceless_north.dds', -98, -590, 855, 127, -5000, -5000, 5000, 46, 8420950750948911609, 8420950750948911609), + (124, 1296399482, 'exp09_rgn_plains_of_obol', 100, 1, 'NRVOBM/nms/exp09_plains_of_obol_explored.dds', 'NRVOBM/nms/exp09_plains_of_obol_unexplored.dds', -1449, -866, 1483, 1331, -5000, -5000, 5000, 5000, 2682842916150972796, 16967132263527338798), + (125, 939053947, 'exp09_dun_drinals_ferry_solo', 0, 0, 'NRVOBM/nms/exp09_drenals_ferry.dds', 'NRVOBM/nms/exp09_drenals_ferry.dds', -164, -140, 160, 108, -5000, -5000, 5000, 5000, 16633786030976221656, 16633786030976221656), + (126, 3484386697, 'exp09_dun_drinals_ferry', 0, 0, 'NRVOBM/nms/exp09_drenals_ferry.dds', 'NRVOBM/nms/exp09_drenals_ferry.dds', -164, -140, 160, 108, -5000, -5000, 5000, 5000, 16633786030976221656, 16633786030976221656), + (127, 2034232021, 'exp09_dun_drinals_castle_raid_4', 0, 0, 'NRVOBM/nms/exp09_drinals_castle_05.dds', 'NRVOBM/nms/exp09_drinals_castle_05.dds', -388, -411, 324, 125, -5000, -5000, 5000, 5000, 187582067737357634, 187582067737357634), + (128, 2034232021, 'exp09_dun_drinals_castle_raid_3', 0, 0, 'NRVOBM/nms/exp09_drinals_castle_04.dds', 'NRVOBM/nms/exp09_drinals_castle_04.dds', -390, -513, 322, 21, -5000, -5000, 5000, 5000, 12213601451163227976, 12213601451163227976), + (129, 2034232021, 'exp09_dun_drinals_castle_raid_2', 0, 0, 'NRVOBM/nms/exp09_drinals_castle_03.dds', 'NRVOBM/nms/exp09_drinals_castle_03.dds', -299, -229, 295, 216, -5000, -5000, 5000, 5000, 17984566265797150987, 17984566265797150987), + (130, 2034232021, 'exp09_dun_drinals_castle_raid_1', 0, 0, 'NRVOBM/nms/exp09_drinals_castle_02.dds', 'NRVOBM/nms/exp09_drinals_castle_02.dds', -298, -229, 293, 212, -5000, -5000, 5000, 5000, 15921122684686867078, 15921122684686867078), + (131, 2034232021, 'exp09_dun_drinals_castle_raid_0', 0, 0, 'NRVOBM/nms/exp09_drinals_castle_01.dds', 'NRVOBM/nms/exp09_drinals_castle_01.dds', -145, -207, 158, 21, -5000, -5000, 5000, 5000, 9887787943210833918, 9887787943210833918), + (132, 1724618204, 'fprt_hood06', 35, 0.5, 'NRVOBM/nms/freeportscaleyard_explored.dds', 'NRVOBM/nms/freeportscaleyard_unexplored.dds', -269.5, -123.97, 214.44, 240.8, -269.5, -123.97, 214.44, 240.8, 9136914063004984589, 13210495355421380022), + (133, 1782493420, 'fprt_hood05', 35, 0.5, 'NRVOBM/nms/freeportlongshadowalley_explored.dds', 'NRVOBM/nms/freeportlongshadowalley_unexplored.dds', -185.63, -147.51, 165.21, 126.03, -185.63, -147.51, 165.21, 126.03, 17184580992826923618, 13923871875585603012), + (134, 2855298071, 'exp09_dun_drinals_castle_4', 0, 0, 'NRVOBM/nms/exp09_drinals_castle_05.dds', 'NRVOBM/nms/exp09_drinals_castle_05.dds', -388, -411, 324, 125, -5000, -5000, 5000, 5000, 187582067737357634, 187582067737357634), + (135, 1296089602, 'qey_village05_revamp', 0, 0, 'NRVOBM/nms/qeynoswillowwood_explored.dds', 'NRVOBM/nms/qeynoswillowwood_unexplored.dds', -1258.05, -892.88, -499.3, -310.57, -1258.05, -892.88, -499.3, -310.57, 9150772007208460243, 5398585900817023960), + (136, 3678731920, 'qey_village06_revamp', 0, 0, 'NRVOBM/nms/qeynosbaubbleshire_explored.dds', 'NRVOBM/nms/qeynosbaubbleshire_unexplored.dds', -1202.29, -731.03, -545.37, -218.19, -1202.29, -731.03, -545.37, -218.19, 176299128319668806, 2049429213224763607), + (137, 43963313, 'qey_village04_revamp', 0, 0, 'NRVOBM/nms/qeynoscastleviewhamlet_explored.dds', 'NRVOBM/nms/qeynoscastleviewhamlet_unexplored.dds', -1012.9, -312.79, -553.08, 41.48, -1012.9, -312.79, -553.08, 41.48, 15462632759483396449, 867966370954510497), + (138, 2499556381, 'qey_village03_revamp', 0, 0, 'NRVOBM/nms/qeynosgreystoneyard_explored.dds', 'NRVOBM/nms/qeynosgreystoneyard_unexplored.dds', -1104.84, -289.78, -649.27, 54.27, -1104.84, -289.78, -649.27, 54.27, 14219950055086169880, 2803156202057389600), + (139, 2988135420, 'qeynos_combined01', 35, 1, 'NRVOBM/nms/qeynos_new_explored.dds', 'NRVOBM/nms/qeynos_new_unexplored.dds', -1247, -565, -74, 310, -5000, -5000, 5000, 5000, 16974777748194939734, 9117030143180588321), + (140, 3115626164, 'qey_village02_revamp', 0, 0, 'NRVOBM/nms/qeynosstarcrestcommune_explored.dds', 'NRVOBM/nms/qeynosstarcrestcommune_unexplored.dds', -994.1, 133.09, -534.37, 477.61, -994.1, 133.09, -534.37, 477.61, 17000969402592380513, 2684731269491297199), + (141, 920040582, 'qey_village01_revamp', 0, 0, 'NRVOBM/nms/qeynosnettlevillehovel_explored.dds', 'NRVOBM/nms/qeynosnettlevillehovel_unexplored.dds', -884.86, 153.19, -403.2, 513.58, -884.86, 153.19, -403.2, 513.58, 15435981793457631353, 15965042855920104932), + (142, 202164305, 'exp07_dun_velks_forgotten_pools_0', 0, 0, 'NRVOBM/nms/exp07_dun_forgotten_pools01.dds', 'NRVOBM/nms/exp07_dun_forgotten_pools01.dds', -540, -626, 377, 57, -1000, -1000, 1000, 1000, 4424038280096058828, 4424038280096058828), + (143, 3696402977, 'exp_07_thurgadin_velious', 0, 0, 'NRVOBM/nms/thurgadin_explored.dds', 'NRVOBM/nms/thurgadin_explored.dds', -1105, -103, 257, 919, -1100, -200, 300, 900, 1741793989802223335, 1741793989802223335), + (144, 348830090, 'exp09_dun_sleepers_upper_0', 0, 0, 'NRVOBM/nms/dun_sleepers_upper.dds', 'NRVOBM/nms/dun_sleepers_upper.dds', -873, -577, 377, 363, -5000, -5000, 5000, 5000, 3868160118700218897, 3868160118700218897), + (145, 2855298071, 'exp09_dun_drinals_castle_3', 0, 0, 'NRVOBM/nms/exp09_drinals_castle_04.dds', 'NRVOBM/nms/exp09_drinals_castle_04.dds', -390, -513, 322, 21, -5000, -5000, 5000, 5000, 12213601451163227976, 12213601451163227976), + (146, 2855298071, 'exp09_dun_drinals_castle_2', 0, 0, 'NRVOBM/nms/exp09_drinals_castle_03.dds', 'NRVOBM/nms/exp09_drinals_castle_03.dds', -299, -229, 295, 216, -5000, -5000, 5000, 5000, 17984566265797150987, 17984566265797150987), + (147, 2855298071, 'exp09_dun_drinals_castle_1', 0, 0, 'NRVOBM/nms/exp09_drinals_castle_02.dds', 'NRVOBM/nms/exp09_drinals_castle_02.dds', -298, -229, 293, 212, -5000, -5000, 5000, 5000, 15921122684686867078, 15921122684686867078), + (148, 2855298071, 'exp09_dun_drinals_castle_0', 0, 0, 'NRVOBM/nms/exp09_drinals_castle_01.dds', 'NRVOBM/nms/exp09_drinals_castle_01.dds', -145, -207, 158, 21, -5000, -5000, 5000, 5000, 9887787943210833918, 9887787943210833918), + (149, 1357927069, 'fprt_hood01', 35, 0.5, 'NRVOBM/nms/freeportbigbend_explored.dds', 'NRVOBM/nms/freeportbigbend_unexplored.dds', -268.73, -156.94, 241.76, 233.74, -268.73, -156.94, 241.76, 233.74, 13893361007639750321, 13906198626671770666), + (150, 450503637, 'fprt_hood02', 35, 0.5, 'NRVOBM/nms/freeportstonestairbyway_explored.dds', 'NRVOBM/nms/freeportstonestairbyway_unexplored.dds', -167.84, -157.1, 164.91, 89.21, -167.84, -157.1, 164.91, 89.21, 9102244713137005177, 17181146217504603163), + (151, 4207549061, 'fprt_hood04', 35, 0.5, 'NRVOBM/nms/freeportbeggarscourt_explored.dds', 'NRVOBM/nms/freeportbeggarscourt_unexplored.dds', -225.8, -137.49, 181.39, 158.88, -225.8, -137.49, 181.39, 158.88, 4800855641399099720, 901758263814064518), + (152, 348830090, 'exp09_dun_sleepers_upper_1', 0, 0, 'NRVOBM/nms/dun_sleepers_lair.dds', 'NRVOBM/nms/dun_sleepers_lair.dds', 656, -420, 1537, 233, -5000, -5000, 5000, 5000, 17281961401678138388, 17281961401678138388), + (153, 3190881085, 'exp09_dun_sleepers_upper_raid_0', 0, 0, 'NRVOBM/nms/dun_sleepers_upper.dds', 'NRVOBM/nms/dun_sleepers_upper.dds', -873, -577, 377, 363, -5000, -5000, 5000, 5000, 3868160118700218897, 3868160118700218897), + (154, 3190881085, 'exp09_dun_sleepers_upper_raid_1', 0, 0, 'NRVOBM/nms/dun_sleepers_lair.dds', 'NRVOBM/nms/dun_sleepers_lair.dds', 656, -420, 1537, 233, -5000, -5000, 5000, 5000, 17281961401678138388, 17281961401678138388), + (155, 2608359373, 'exp07_dun_tofs_lower_0', 0, 0, 'NRVOBM/nms/exp07_dun_tofs_floor01.dds', 'NRVOBM/nms/exp07_dun_tofs_floor01.dds', -162, -151, 154, 85, -150, -300, 150, 300, 8533223195127342865, 8533223195127342865), + (156, 2608359373, 'exp07_dun_tofs_lower_1', 0, 0, 'NRVOBM/nms/exp07_dun_tofs_floor02.dds', 'NRVOBM/nms/exp07_dun_tofs_floor02.dds', -241, -169, 228, 186, -150, -300, 150, 300, 3969457324698211649, 3969457324698211649), + (157, 2608359373, 'exp07_dun_tofs_lower_2', 0, 0, 'NRVOBM/nms/exp07_dun_tofs_floor03.dds', 'NRVOBM/nms/exp07_dun_tofs_floor03.dds', -159, -117, 149, 114, -150, -300, 150, 300, 13031235590626083639, 13031235590626083639), + (158, 2607359490, 'exp07_dun_tofs_upper_0', 0, 0, 'NRVOBM/nms/exp07_dun_tofs_floor04.dds', 'NRVOBM/nms/exp07_dun_tofs_floor04.dds', -133, -165, 291, 153, -150, -300, 150, 300, 887812851746817802, 887812851746817802), + (159, 2607359490, 'exp07_dun_tofs_upper_1', 0, 0, 'NRVOBM/nms/exp07_dun_tofs_floor05.dds', 'NRVOBM/nms/exp07_dun_tofs_floor05.dds', -230, -193, 212, 142, -150, -300, 150, 300, 6814662529044666474, 6814662529044666474), + (160, 2607359490, 'exp07_dun_tofs_upper_2', 0, 0, 'NRVOBM/nms/exp07_dun_tofs_floor06.dds', 'NRVOBM/nms/exp07_dun_tofs_floor06.dds', -275, -135, 196, 218, -150, -300, 150, 300, 5826789502053469203, 5826789502053469203), + (161, 905538670, 'exp07_dun_tofs_top_0', 0, 0, 'NRVOBM/nms/exp07_dun_tofs_floor01.dds', 'NRVOBM/nms/exp07_dun_tofs_floor01.dds', -162, -151, 154, 85, -150, -300, 150, 300, 8533223195127342865, 8533223195127342865), + (162, 905538670, 'exp07_dun_tofs_top_1', 0, 0, 'NRVOBM/nms/blank_map.dds', 'NRVOBM/nms/blank_map.dds', -179, -12, 201, 272, -150, -300, 150, 300, 6089303624680826542, 6089303624680826542), + (163, 905538670, 'exp07_dun_tofs_top_2', 0, 0, 'NRVOBM/nms/exp07_dun_tofs_floor08.dds', 'NRVOBM/nms/exp07_dun_tofs_floor08.dds', -179, -90, 150, 154, -150, -300, 150, 300, 2564313238147359990, 2564313238147359990), + (164, 1882371056, 'exp_07_thurgadin_velious', 150, 0.5, 'NRVOBM/nms/thurgadin_explored.dds', 'NRVOBM/nms/thurgadin_explored.dds', -1105, -103, 257, 919, -1100, -200, 300, 900, 1741793989802223335, 1741793989802223335), + (165, 202164305, 'exp07_dun_velks_forgotten_pools_1', 0, 0, 'NRVOBM/nms/exp07_dun_forgotten_pools02.dds', 'NRVOBM/nms/exp07_dun_forgotten_pools02.dds', -3432, -2550, 3130, 2281, -2500, -2500, 2500, 2500, 5240459448305127650, 5240459448305127650), + (166, 3994920284, 'exp07_dun_velks_the_ascent_0', 0, 0, 'NRVOBM/nms/exp07_dun_velkslab_the_ascent.dds', 'NRVOBM/nms/exp07_dun_velkslab_the_ascent.dds', -137, -485, 705, 151, -1000, -1000, 1000, 1000, 11878982203057314982, 11878982203057314982), + (167, 3935624881, 'exp07_dun_velks_fortress_0', 0, 0, 'NRVOBM/nms/exp07_dun_kraytocs_fortess.dds', 'NRVOBM/nms/exp07_dun_kraytocs_fortess.dds', -189, -157, 915, 678, -1000, -1000, 1000, 1000, 15908459665844101530, 15908459665844101530), + (168, 3760373257, 'exp07_dun_kraytocs_fortress_0', 0, 0, 'NRVOBM/nms/exp07_dun_kraytocs_fortess.dds', 'NRVOBM/nms/exp07_dun_kraytocs_fortess.dds', -189, -157, 915, 678, -1000, -1000, 1000, 1000, 15908459665844101530, 15908459665844101530), + (169, 4159697226, 'exp09_dun_sleepers_contested_0', 0, 0, 'NRVOBM/nms/dun_sleepers_upper.dds', 'NRVOBM/nms/dun_sleepers_upper.dds', -873, -577, 377, 363, -5000, -5000, 5000, 5000, 3868160118700218897, 3868160118700218897), + (170, 241080936, 'exp07_dun_kael_throne_0', 0, 0, 'NRVOBM/nms/exp07_dun_kaeldrakkel01.dds', 'NRVOBM/nms/exp07_dun_kaeldrakkel01.dds', -1109, 290, 1285, 2098, 32, 451, 228, 1127, 3603769704654017244, 3603769704654017244), + (171, 2656318491, 'exp09_dun_sleepers_raid_0', 0, 0, 'NRVOBM/nms/dun_sleepers_upper.dds', 'NRVOBM/nms/dun_sleepers_upper.dds', -873, -577, 377, 363, -5000, -5000, 5000, 5000, 3868160118700218897, 3868160118700218897), + (172, 2656318491, 'exp09_dun_sleepers_raid_2', 0, 0, 'NRVOBM/nms/dun_sleepers_lower.dds', 'NRVOBM/nms/dun_sleepers_lower.dds', -501, -564, 761, 378, -5000, -5000, 5000, 5000, 10162887799718315843, 10162887799718315843), + (173, 2656318491, 'exp09_dun_sleepers_raid_1', 0, 0, 'NRVOBM/nms/dun_sleepers_lair.dds', 'NRVOBM/nms/dun_sleepers_lair.dds', 656, -420, 1537, 233, 746, -147, 1405, 308, 17281961401678138388, 17281961401678138388), + (174, 4159697226, 'exp09_dun_sleepers_contested_2', 0, 0, 'NRVOBM/nms/dun_sleepers_lower.dds', 'NRVOBM/nms/dun_sleepers_lower.dds', -501, -564, 761, 378, -5000, -5000, 5000, 5000, 10162887799718315843, 10162887799718315843), + (175, 4159697226, 'exp09_dun_sleepers_contested_1', 0, 0, 'NRVOBM/nms/dun_sleepers_lair.dds', 'NRVOBM/nms/dun_sleepers_lair.dds', 656, -420, 1537, 233, 746, -147, 1405, 308, 17281961401678138388, 17281961401678138388), + (176, 2853096630, 'exp07_dun_kael_iceshard_keep_0', 0, 0, 'NRVOBM/nms/exp07_dun_kaeldrakkel04.dds', 'NRVOBM/nms/exp07_dun_kaeldrakkel04.dds', 72, -69, 1058, 675, -1000, -1000, 1000, 1000, 11661461510227503106, 11661461510227503106), + (177, 1617785482, 'exp09_dun_sleepers_lower_solo', 0, 0, 'NRVOBM/nms/dun_sleepers_lower.dds', 'NRVOBM/nms/dun_sleepers_lower.dds', -501, -564, 761, 378, -5000, -5000, 5000, 5000, 10162887799718315843, 10162887799718315843), + (178, 1830310931, 'exp09_dun_sleepers_lower', 0, 0, 'NRVOBM/nms/dun_sleepers_lower.dds', 'NRVOBM/nms/dun_sleepers_lower.dds', -501, -564, 761, 378, -5000, -5000, 5000, 5000, 10162887799718315843, 10162887799718315843), + (179, 2777580771, 'exp07_dun_kael_temple_zek_raid_easy_0', 0, 0, 'NRVOBM/nms/exp07_dun_kaeldrakkel03.dds', 'NRVOBM/nms/exp07_dun_kaeldrakkel03.dds', -674, -3379, 2851, -749, -91, -3233, 2150, -1053, 13778997396821898878, 13778997396821898878), + (180, 233038101, 'exp07_dun_kael_temple_zek_raid_0', 0, 0, 'NRVOBM/nms/exp07_dun_kaeldrakkel03.dds', 'NRVOBM/nms/exp07_dun_kaeldrakkel03.dds', -674, -3379, 2851, -749, -91, -3233, 2150, -1053, 13778997396821898878, 13778997396821898878), + (181, 519055693, 'exp07_dun_kael_throne_raid_easy_0', 0, 0, 'NRVOBM/nms/exp07_dun_kaeldrakkel01.dds', 'NRVOBM/nms/exp07_dun_kaeldrakkel01.dds', -1109, 290, 1285, 2098, 32, 451, 228, 1127, 3603769704654017244, 3603769704654017244), + (182, 1585221530, 'exp07_dun_kael_throne_raid_0', 0, 0, 'NRVOBM/nms/exp07_dun_kaeldrakkel01.dds', 'NRVOBM/nms/exp07_dun_kaeldrakkel01.dds', -1109, 290, 1285, 2098, 32, 451, 228, 1127, 3603769704654017244, 3603769704654017244), + (183, 561709974, 'exp07_dun_kael_temple_zek_0', 0, 0, 'NRVOBM/nms/exp07_dun_kaeldrakkel03.dds', 'NRVOBM/nms/exp07_dun_kaeldrakkel03.dds', -674, -3379, 2851, -749, -91, -3233, 2150, -1053, 13778997396821898878, 13778997396821898878), + (184, 1290963353, 'exp07_dun_kael_drakkel_0', 0, 0, 'NRVOBM/nms/exp07_dun_kaeldrakkel05.dds', 'NRVOBM/nms/exp07_dun_kaeldrakkel05.dds', -1, -573, 2153, 1050, 770, -501, 1544, 940, 16520645256069336079, 16520645256069336079), + (185, 1290963353, 'exp07_dun_kael_drakkel_1', 0, 0, 'NRVOBM/nms/exp07_dun_kaeldrakkel05.dds', 'NRVOBM/nms/exp07_dun_kaeldrakkel05.dds', -1, -573, 2153, 1050, 765, -362, 963, 103, 16520645256069336079, 16520645256069336079), + (186, 1290963353, 'exp07_dun_kael_drakkel_2', 0, 0, 'NRVOBM/nms/exp07_dun_kaeldrakkel06.dds', 'NRVOBM/nms/exp07_dun_kaeldrakkel06.dds', -511, -1427, 1712, 190, 242, -1053, 963, -76, 16504038353869196008, 16504038353869196008), + (187, 1290963353, 'exp07_dun_kael_drakkel_3', 0, 0, 'NRVOBM/nms/exp07_dun_kaeldrakkel06.dds', 'NRVOBM/nms/exp07_dun_kaeldrakkel06.dds', -511, -1427, 1712, 190, 963, -1053, 1090, -405, 16504038353869196008, 16504038353869196008), + (188, 1290963353, 'exp07_dun_kael_drakkel_4', 0, 0, 'NRVOBM/nms/exp07_dun_kaeldrakkel04.dds', 'NRVOBM/nms/exp07_dun_kaeldrakkel04.dds', 72, -69, 1058, 675, 505, -40, 620, 96, 11661461510227503106, 11661461510227503106), + (189, 1290963353, 'exp07_dun_kael_drakkel_5', 0, 0, 'NRVOBM/nms/exp07_dun_kaeldrakkel04.dds', 'NRVOBM/nms/exp07_dun_kaeldrakkel04.dds', 72, -69, 1058, 675, 384, 97, 751, 288, 11661461510227503106, 11661461510227503106), + (190, 1290963353, 'exp07_dun_kael_drakkel_6', 0, 0, 'NRVOBM/nms/exp07_dun_kaeldrakkel04.dds', 'NRVOBM/nms/exp07_dun_kaeldrakkel04.dds', 72, -69, 1058, 675, 400, 288, 728, 589, 11661461510227503106, 11661461510227503106), + (191, 1290963353, 'exp07_dun_kael_drakkel_7', 0, 0, 'NRVOBM/nms/exp07_dun_kaeldrakkel01.dds', 'NRVOBM/nms/exp07_dun_kaeldrakkel01.dds', -1109, 290, 1285, 2098, 32, 451, 228, 1127, 3603769704654017244, 3603769704654017244), + (192, 1290963353, 'exp07_dun_kael_drakkel_8', 0, 0, 'NRVOBM/nms/exp07_dun_kaeldrakkel01.dds', 'NRVOBM/nms/exp07_dun_kaeldrakkel01.dds', -1109, 290, 1285, 2098, -337, 1127, 587, 1904, 3603769704654017244, 3603769704654017244), + (193, 1290963353, 'exp07_dun_kael_drakkel_9', 0, 0, 'NRVOBM/nms/exp07_dun_kaeldrakkel02.dds', 'NRVOBM/nms/exp07_dun_kaeldrakkel02.dds', -1836, -940, 616, 947, -1740, -363, 383, 451, 7568174142193434350, 7568174142193434350), + (194, 1290963353, 'exp07_dun_kael_drakkel_10', 0, 0, 'NRVOBM/nms/exp07_dun_kaeldrakkel02.dds', 'NRVOBM/nms/exp07_dun_kaeldrakkel02.dds', -1836, -940, 616, 947, 305, -552, 406, -31, 7568174142193434350, 7568174142193434350), + (195, 1290963353, 'exp07_dun_kael_drakkel_11', 0, 0, 'NRVOBM/nms/exp07_dun_kaeldrakkel03.dds', 'NRVOBM/nms/exp07_dun_kaeldrakkel03.dds', -728, -3383, 2865, -743, -91, -3233, 2150, -1053, 13778997396821898878, 13778997396821898878); +INSERT INTO `table_versions` (`name`,`version`,`download_version`) values ('map_data',1,0); +UPDATE `table_versions` SET `download_version`=1 WHERE `name`='map_data'; +DROP TABLE IF EXISTS `merchant_inventory`; +CREATE TABLE IF NOT EXISTS `merchant_inventory` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `inventory_id` int(10) unsigned NOT NULL DEFAULT '0', + `item_id` int(10) unsigned NOT NULL DEFAULT '0', + `quantity` smallint(5) unsigned NOT NULL DEFAULT '65535', + `price_item_id` int(10) unsigned NOT NULL DEFAULT '0', + `price_item_qty` smallint(5) unsigned NOT NULL DEFAULT '0', + `price_item2_id` int(10) unsigned NOT NULL DEFAULT '0', + `price_item2_qty` smallint(5) unsigned NOT NULL DEFAULT '0', + `price_status` int(10) unsigned NOT NULL DEFAULT '0', + `price_coins` int(10) unsigned NOT NULL DEFAULT '0', + `price_stationcash` int(10) unsigned NOT NULL DEFAULT '0', + PRIMARY KEY (`id`), + KEY `InventoryIDX` (`inventory_id`), + KEY `FK_merchant_inventory2` (`item_id`), + CONSTRAINT `FK_merchant_inventory1` FOREIGN KEY (`inventory_id`) REFERENCES `merchants` (`inventory_id`) ON DELETE CASCADE ON UPDATE CASCADE, + CONSTRAINT `FK_merchant_inventory2` FOREIGN KEY (`item_id`) REFERENCES `items` (`id`) ON DELETE CASCADE ON UPDATE CASCADE +) ENGINE=InnoDB AUTO_INCREMENT=22639 DEFAULT CHARSET=latin1; +INSERT INTO `table_versions` (`name`,`version`,`download_version`) values ('merchant_inventory',1,0); +DROP TABLE IF EXISTS `merchant_multipliers`; +CREATE TABLE IF NOT EXISTS `merchant_multipliers` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `merchant_id` int(10) unsigned NOT NULL DEFAULT '0' COMMENT 'Testing', + `low_buy_multiplier` float unsigned NOT NULL DEFAULT '1', + `high_buy_multiplier` float unsigned NOT NULL DEFAULT '10', + `low_sell_multiplier` float unsigned NOT NULL DEFAULT '1', + `high_sell_multiplier` float unsigned NOT NULL DEFAULT '10', + `multiplier_faction_id` int(10) unsigned NOT NULL DEFAULT '0', + `min_faction` int(11) NOT NULL DEFAULT '-20000', + `max_faction` int(11) NOT NULL DEFAULT '50000', + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=latin1; +INSERT INTO `table_versions` (`name`,`version`,`download_version`) values ('merchant_multipliers',1,0); +DROP TABLE IF EXISTS `merchants`; +CREATE TABLE IF NOT EXISTS `merchants` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `merchant_id` int(10) unsigned NOT NULL DEFAULT '0', + `inventory_id` int(10) unsigned NOT NULL DEFAULT '0', + `description` varchar(64) COLLATE latin1_general_ci DEFAULT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `MerchantInventoryIDX` (`inventory_id`,`merchant_id`) +) ENGINE=InnoDB AUTO_INCREMENT=810 DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci; +INSERT INTO `table_versions` (`name`,`version`,`download_version`) values ('merchants',1,0); +DROP TABLE IF EXISTS `name_filter`; +CREATE TABLE IF NOT EXISTS `name_filter` ( + `name` varchar(30) COLLATE latin1_general_ci NOT NULL DEFAULT '', + PRIMARY KEY (`name`) +) ENGINE=InnoDB DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci; +INSERT INTO `table_versions` (`name`,`version`,`download_version`) values ('name_filter',1,0); +DROP TABLE IF EXISTS `npc_appearance`; +CREATE TABLE IF NOT EXISTS `npc_appearance` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `spawn_id` int(10) unsigned NOT NULL DEFAULT '0', + `signed_value` tinyint(4) NOT NULL DEFAULT '0', + `type` varchar(32) COLLATE latin1_general_ci NOT NULL DEFAULT ' ', + `red` smallint(6) NOT NULL DEFAULT '0', + `green` smallint(6) NOT NULL DEFAULT '0', + `blue` smallint(6) NOT NULL DEFAULT '0', + PRIMARY KEY (`id`), + KEY `SpawnIDX` (`spawn_id`), + CONSTRAINT `FK_npc_appearance` FOREIGN KEY (`spawn_id`) REFERENCES `spawn` (`id`) ON DELETE CASCADE ON UPDATE CASCADE +) ENGINE=InnoDB AUTO_INCREMENT=420619 DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci; +INSERT INTO `table_versions` (`name`,`version`,`download_version`) values ('npc_appearance',1,0); +DROP TABLE IF EXISTS `npc_appearance_equip`; +CREATE TABLE IF NOT EXISTS `npc_appearance_equip` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `spawn_id` int(10) unsigned NOT NULL DEFAULT '0', + `slot_id` tinyint(3) unsigned NOT NULL DEFAULT '0', + `equip_type` int(10) unsigned NOT NULL DEFAULT '0', + `red` tinyint(3) unsigned NOT NULL DEFAULT '0', + `green` tinyint(3) unsigned NOT NULL DEFAULT '0', + `blue` tinyint(3) unsigned NOT NULL DEFAULT '0', + `highlight_red` tinyint(3) unsigned NOT NULL DEFAULT '0', + `highlight_green` tinyint(3) unsigned NOT NULL DEFAULT '0', + `highlight_blue` tinyint(3) unsigned NOT NULL DEFAULT '0', + PRIMARY KEY (`id`), + UNIQUE KEY `NewIndex` (`spawn_id`,`slot_id`), + CONSTRAINT `FK_npc_equipment` FOREIGN KEY (`spawn_id`) REFERENCES `spawn` (`id`) ON DELETE CASCADE ON UPDATE CASCADE +) ENGINE=InnoDB AUTO_INCREMENT=87842 DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci; +INSERT INTO `table_versions` (`name`,`version`,`download_version`) values ('npc_appearance_equip',1,0); +DROP TABLE IF EXISTS `opcodes`; +CREATE TABLE IF NOT EXISTS `opcodes` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `version_range1` smallint(5) unsigned NOT NULL DEFAULT '0', + `version_range2` smallint(5) unsigned NOT NULL DEFAULT '0', + `name` varchar(255) COLLATE latin1_general_ci NOT NULL DEFAULT '', + `opcode` smallint(5) unsigned NOT NULL DEFAULT '0', + `table_data_version` smallint(5) unsigned NOT NULL DEFAULT '1', + PRIMARY KEY (`id`), + UNIQUE KEY `newindex` (`version_range1`,`name`,`version_range2`) +) ENGINE=InnoDB AUTO_INCREMENT=22336 DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci; +INSERT INTO `opcodes` (`id`, `version_range1`, `version_range2`, `name`, `opcode`, `table_data_version`) VALUES + (1, 0, 0, 'OP_LoginRequestMsg', 0, 1), + (2, 0, 0, 'OP_LoginByNumRequestMsg', 1, 1), + (3, 0, 0, 'OP_WSLoginRequestMsg', 2, 1), + (4, 0, 0, 'OP_ESLoginRequestMsg', 3, 1), + (5, 0, 0, 'OP_LoginReplyMsg', 4, 1), + (6, 0, 0, 'OP_WSStatusReplyMsg', 5, 1), + (7, 0, 0, 'OP_WorldStatusChangeMsg', 6, 1), + (8, 0, 0, 'OP_AllWSDescRequestMsg', 7, 1), + (9, 0, 0, 'OP_WorldListMsg', 8, 1), + (10, 0, 0, 'OP_AllCharactersDescRequestMsg', 9, 1), + (11, 0, 0, 'OP_AllCharactersDescReplyMsg', 10, 1), + (12, 0, 0, 'OP_CreateCharacterRequestMsg', 11, 1), + (13, 0, 0, 'OP_CreateCharacterReplyMsg', 12, 1), + (14, 0, 0, 'OP_WSCreateCharacterRequestMsg', 13, 1), + (15, 0, 0, 'OP_WSCreateCharacterReplyMsg', 14, 1), + (16, 0, 0, 'OP_ReskinCharacterRequestMsg', 15, 1), + (17, 0, 0, 'OP_DeleteCharacterRequestMsg', 16, 1), + (18, 0, 0, 'OP_DeleteCharacterReplyMsg', 17, 1), + (19, 0, 0, 'OP_PlayCharacterRequestMsg', 18, 1), + (20, 0, 0, 'OP_PlayCharacterReplyMsg', 19, 1), + (21, 0, 0, 'OP_ExpectClientAsCharacterReplyMs', 22, 1), + (22, 0, 0, 'OP_ServerPlayCharacterRequestMsg', 23, 1), + (23, 0, 0, 'OP_ServerPlayCharacterReplyMsg', 24, 1), + (24, 0, 0, 'OP_ESInitMsg', 25, 1), + (25, 0, 0, 'OP_ESReadyForClientsMsg', 26, 1), + (26, 0, 0, 'OP_CreateZoneInstanceMsg', 27, 1), + (27, 0, 0, 'OP_ZoneInstanceCreateReplyMsg', 28, 1), + (28, 0, 0, 'OP_ZoneInstanceDestroyedMsg', 29, 1), + (29, 0, 0, 'OP_ExpectClientAsCharacterRequest', 30, 1), + (30, 0, 0, 'OP_ZoneInfoMsg', 31, 1), + (31, 0, 0, 'OP_DoneLoadingZoneResourcesMsg', 32, 1), + (32, 0, 0, 'OP_DoneSendingInitialEntitiesMsg', 33, 1), + (33, 0, 0, 'OP_DoneLoadingEntityResourcesMsg', 34, 1), + (34, 0, 0, 'OP_PredictionUpdateMsg', 35, 1), + (35, 0, 0, 'OP_UpdatePositionMsg', 36, 1), + (36, 0, 0, 'OP_SetRemoteCmdsMsg', 37, 1), + (37, 0, 0, 'OP_RemoteCmdMsg', 38, 1), + (38, 0, 0, 'OP_GameWorldTimeMsg', 39, 1), + (39, 0, 0, 'OP_MOTDMsg', 40, 1), + (40, 0, 0, 'OP_ZoneMOTDMsg', 41, 1), + (41, 0, 0, 'OP_AvatarCreatedMsg', 42, 1), + (42, 0, 0, 'OP_AvatarDestroyedMsg', 43, 1), + (43, 0, 0, 'OP_RequestCampMsg', 45, 1), + (44, 0, 0, 'OP_CampStartedMsg', 46, 1), + (45, 0, 0, 'OP_CampAbortedMsg', 47, 1), + (46, 0, 0, 'OP_WhoQueryRequestMsg', 48, 1), + (47, 0, 0, 'OP_WhoQueryReplyMsg', 49, 1), + (48, 0, 0, 'OP_MonitorReplyMsg', 50, 1), + (49, 0, 0, 'OP_Unknown_51', 51, 1), + (50, 0, 0, 'OP_MonitorCharacterListRequestMsg', 52, 1), + (51, 0, 0, 'OP_ClientCmdMsg', 53, 1), + (52, 0, 0, 'OP_DispatchESMsg', 54, 1), + (53, 0, 0, 'OP_DispatchClientCmdMsg', 55, 1), + (54, 0, 0, 'OP_UpdateTargetMsg', 56, 1), + (55, 0, 0, 'OP_UpdateTargetLocMsg', 57, 1), + (56, 0, 0, 'OP_UpdateCharacterSheetMsg', 58, 1), + (57, 0, 0, 'OP_UpdateSpellBookMsg', 59, 1), + (58, 0, 0, 'OP_UpdateInventoryMsg', 61, 1), + (59, 0, 0, 'OP_UpdateRecipeBookMsg', 63, 1), + (60, 0, 0, 'OP_RequestRecipeDetailsMsg', 64, 1), + (61, 0, 0, 'OP_RecipeDetailsMsg', 65, 1), + (62, 0, 0, 'OP_UpdateSkillBookMsg', 66, 1), + (63, 0, 0, 'OP_UpdateSkillsMsg', 67, 1), + (64, 0, 0, 'OP_UpdateOpportunityMsg', 68, 1), + (65, 0, 0, 'OP_ChangeZoneMsg', 70, 1), + (66, 0, 0, 'OP_ClientTeleportRequestMsg', 71, 1), + (67, 0, 0, 'OP_TeleportWithinZoneMsg', 72, 1), + (68, 0, 0, 'OP_TeleportWithinZoneNoReloadMsg', 73, 1), + (69, 0, 0, 'OP_MigrateClientToZoneRequestMsg', 74, 1), + (70, 0, 0, 'OP_MigrateClientToZoneReplyMsg', 75, 1), + (71, 0, 0, 'OP_ReadyToZoneMsg', 76, 1), + (72, 0, 0, 'OP_RemoveClientFromGroupMsg', 77, 1), + (73, 0, 0, 'OP_RemoveGroupFromGroupMsg', 78, 1), + (74, 0, 0, 'OP_MakeGroupLeaderMsg', 79, 1), + (75, 0, 0, 'OP_GroupCreatedMsg', 80, 1), + (76, 0, 0, 'OP_GroupDestroyedMsg', 81, 1), + (77, 0, 0, 'OP_GroupMemberAddedMsg', 82, 1), + (78, 0, 0, 'OP_GroupMemberRemovedMsg', 83, 1), + (79, 0, 0, 'OP_GroupRemovedFromGroupMsg', 84, 1), + (80, 0, 0, 'OP_GroupLeaderChangedMsg', 85, 1), + (81, 0, 0, 'OP_GroupResendOOZDataMsg', 86, 1), + (82, 0, 0, 'OP_GroupSettingsChangedMsg', 87, 1), + (83, 0, 0, 'OP_OutOfZoneMemberDataMsg', 88, 1), + (84, 0, 0, 'OP_SendLatestRequestMsg', 89, 1), + (85, 0, 0, 'OP_ClearDataMsg', 90, 1), + (86, 0, 0, 'OP_SetSocialMsg', 91, 1), + (87, 0, 0, 'OP_ESStatusMsg', 92, 1), + (88, 0, 0, 'OP_ESZoneInstanceStatusMsg', 93, 1), + (89, 0, 0, 'OP_ZonesStatusRequestMsg', 94, 1), + (90, 0, 0, 'OP_ZonesStatusMsg', 95, 1), + (91, 0, 0, 'OP_ESWeatherRequestMsg', 96, 1), + (92, 0, 0, 'OP_ESWeatherRequestEndMsg', 97, 1), + (93, 0, 0, 'OP_DialogSelectMsg', 98, 1), + (94, 0, 0, 'OP_DialogCloseMsg', 99, 1), + (95, 0, 0, 'OP_RemoveSpellEffectMsg', 100, 1), + (96, 0, 0, 'OP_RemoveConcentrationMsg', 101, 1), + (97, 0, 0, 'OP_QuestJournalOpenMsg', 104, 1), + (98, 0, 0, 'OP_QuestJournalInspectMsg', 105, 1), + (99, 0, 0, 'OP_QuestJournalSetVisibleMsg', 106, 1), + (100, 0, 0, 'OP_QuestJournalWaypointMsg', 107, 1), + (101, 0, 0, 'OP_CreateGuildRequestMsg', 108, 1), + (102, 0, 0, 'OP_CreateGuildReplyMsg', 109, 1), + (103, 0, 0, 'OP_GuildsayMsg', 110, 1), + (104, 0, 0, 'OP_GuildUpdateMsg', 111, 1), + (105, 0, 0, 'OP_DeleteGuildMsg', 112, 1), + (106, 0, 0, 'OP_FellowshipExpMsg', 113, 1), + (107, 0, 0, 'OP_ConsignmentCloseStoreMsg', 114, 1), + (108, 0, 0, 'OP_ConsignItemRequestMsg', 115, 1), + (109, 0, 0, 'OP_ConsignItemResponseMsg', 116, 1), + (110, 0, 0, 'OP_PurchaseConsignmentRequestMsg', 117, 1), + (111, 0, 0, 'OP_HouseDeletedRemotelyMsg', 118, 1), + (112, 0, 0, 'OP_UpdateHouseDataMsg', 119, 1), + (113, 0, 0, 'OP_UpdateHouseAccessDataMsg', 120, 1), + (114, 0, 0, 'OP_PlayerHouseBaseScreenMsg', 121, 1), + (115, 0, 0, 'OP_PlayerHousePurchaseScreenMsg', 122, 1), + (116, 0, 0, 'OP_PlayerHouseAccessUpdateMsg', 123, 1), + (117, 0, 0, 'OP_PlayerHouseDisplayStatusMsg', 124, 1), + (118, 0, 0, 'OP_PlayerHouseCloseUIMsg', 125, 1), + (119, 0, 0, 'OP_BuyPlayerHouseMsg', 126, 1), + (120, 0, 0, 'OP_BuyPlayerHouseTintMsg', 127, 1), + (121, 0, 0, 'OP_CollectAllHouseItemsMsg', 128, 1), + (122, 0, 0, 'OP_RelinquishHouseMsg', 129, 1), + (123, 0, 0, 'OP_EnterHouseMsg', 130, 1), + (124, 0, 0, 'OP_ExitHouseMsg', 131, 1), + (125, 0, 0, 'OP_HouseDefaultAccessSetMsg', 132, 1), + (126, 0, 0, 'OP_HouseAccessSetMsg', 133, 1), + (127, 0, 0, 'OP_HouseAccessRemoveMsg', 134, 1), + (128, 0, 0, 'OP_PayHouseUpkeepMsg', 135, 1), + (129, 0, 0, 'OP_MoveableObjectPlacementCriteri', 136, 1), + (130, 0, 0, 'OP_EnterMoveObjectModeMsg', 137, 1), + (131, 0, 0, 'OP_PositionMoveableObject', 138, 1), + (132, 0, 0, 'OP_CancelMoveObjectModeMsg', 139, 1), + (133, 0, 0, 'OP_ShaderCustomizationMsg', 140, 1), + (134, 0, 0, 'OP_ReplaceableSubMeshesMsg', 141, 1), + (135, 0, 0, 'OP_HouseCustomizationScreenMsg', 142, 1), + (136, 0, 0, 'OP_CustomizationPurchaseRequestMs', 143, 1), + (137, 0, 0, 'OP_CustomizationSetRequestMsg', 144, 1), + (138, 0, 0, 'OP_CustomizationReplyMsg', 145, 1), + (139, 0, 0, 'OP_TintWidgetsMsg', 146, 1), + (140, 0, 0, 'OP_ExamineConsignmentRequestMsg', 147, 1), + (141, 0, 0, 'OP_ExamineConsignmentResponseMsg', 148, 1), + (142, 0, 0, 'OP_UISettingsResponseMsg', 149, 1), + (143, 0, 0, 'OP_UIResetMsg', 150, 1), + (144, 0, 0, 'OP_KeymapLoadMsg', 151, 1), + (145, 0, 0, 'OP_KeymapNoneMsg', 152, 1), + (146, 0, 0, 'OP_KeymapDataMsg', 153, 1), + (147, 0, 0, 'OP_KeymapSaveMsg', 154, 1), + (148, 0, 0, 'OP_DispatchSpellCmdMsg', 155, 1), + (149, 0, 0, 'OP_EntityVerbsRequestMsg', 157, 1), + (150, 0, 0, 'OP_EntityVerbsReplyMsg', 158, 1), + (151, 0, 0, 'OP_EntityVerbsVerbMsg', 159, 1), + (152, 0, 0, 'OP_ChatRelationshipUpdateMsg', 161, 1), + (153, 0, 0, 'OP_LootItemsRequestMsg', 162, 1), + (154, 0, 0, 'OP_StoppedLootingMsg', 163, 1), + (155, 0, 0, 'OP_SitMsg', 164, 1), + (156, 0, 0, 'OP_StandMsg', 165, 1), + (157, 0, 0, 'OP_SatMsg', 166, 1), + (158, 0, 0, 'OP_StoodMsg', 167, 1), + (159, 0, 0, 'OP_ClearForTakeOffMsg', 168, 1), + (160, 0, 0, 'OP_ReadyForTakeOffMsg', 169, 1), + (161, 0, 0, 'OP_ShowIllusionsMsg', 170, 1), + (162, 0, 0, 'OP_HideIllusionsMsg', 171, 1), + (163, 0, 0, 'OP_ExamineItemRequestMsg', 172, 1), + (164, 0, 0, 'OP_ReadBookPageMsg', 173, 1), + (165, 0, 0, 'OP_DefaultGroupOptionsRequestMsg', 174, 1), + (166, 0, 0, 'OP_DefaultGroupOptionsMsg', 175, 1), + (167, 0, 0, 'OP_GroupOptionsMsg', 176, 1), + (168, 0, 0, 'OP_DisplayGroupOptionsScreenMsg', 177, 1), + (169, 0, 0, 'OP_DisplayInnVisitScreenMsg', 178, 1), + (170, 0, 0, 'OP_DumpSchedulerMsg', 179, 1), + (171, 0, 0, 'OP_LSRequestPlayerDescMsg', 180, 1), + (172, 0, 0, 'OP_LSCheckAcctLockMsg', 181, 1), + (173, 0, 0, 'OP_WSAcctLockStatusMsg', 182, 1), + (174, 0, 0, 'OP_RequestHelpRepathMsg', 183, 1), + (175, 0, 0, 'OP_RequestTargetLocMsg', 184, 1), + (176, 0, 0, 'OP_UpdateMotdMsg', 185, 1), + (177, 0, 0, 'OP_PerformPlayerKnockbackMsg', 186, 1), + (178, 0, 0, 'OP_PerformCameraShakeMsg', 187, 1), + (179, 0, 0, 'OP_PopulateSkillMapsMsg', 188, 1), + (180, 0, 0, 'OP_CancelledFeignMsg', 190, 1), + (181, 0, 0, 'OP_SignalMsg', 191, 1), + (182, 0, 0, 'OP_ShowCreateFromRecipeUIMsg', 192, 1), + (183, 0, 0, 'OP_CancelCreateFromRecipeMsg', 193, 1), + (184, 0, 0, 'OP_BeginItemCreationMsg', 194, 1), + (185, 0, 0, 'OP_StopItemCreationMsg', 195, 1), + (186, 0, 0, 'OP_ShowItemCreationProcessUIMsg', 196, 1), + (187, 0, 0, 'OP_UpdateItemCreationProcessUIMsg', 197, 1), + (188, 0, 0, 'OP_DisplayTSEventReactionMsg', 198, 1), + (189, 0, 0, 'OP_ShowRecipeBookMsg', 199, 1), + (190, 0, 0, 'OP_KnowledgebaseRequestMsg', 200, 1), + (191, 0, 0, 'OP_KnowledgebaseResponseMsg', 201, 1), + (192, 0, 0, 'OP_CSTicketHeaderRequestMsg', 202, 1), + (193, 0, 0, 'OP_CSTicketInfoMsg', 203, 1), + (194, 0, 0, 'OP_CSTicketCommentRequestMsg', 204, 1), + (195, 0, 0, 'OP_CSTicketCommentResponseMsg', 205, 1), + (196, 0, 0, 'OP_CSTicketCreateMsg', 206, 1), + (197, 0, 0, 'OP_CSTicketAddCommentMsg', 207, 1), + (198, 0, 0, 'OP_CSTicketDeleteMsg', 208, 1), + (199, 0, 0, 'OP_CSTicketChangeNotificationMsg', 209, 1), + (200, 0, 0, 'OP_WorldDataUpdateMsg', 210, 1), + (201, 0, 0, 'OP_KnownLanguagesMsg', 211, 1), + (202, 0, 0, 'OP_LsRequestClientCrashLogMsg', 212, 1), + (203, 0, 0, 'OP_LsClientBaselogReplyMsg', 213, 1), + (204, 0, 0, 'OP_LsClientCrashlogReplyMsg', 214, 1), + (205, 0, 0, 'OP_LsClientAlertlogReplyMsg', 215, 1), + (206, 0, 0, 'OP_LsClientVerifylogReplyMsg', 216, 1), + (207, 0, 0, 'OP_ClientTeleportToLocationMsg', 217, 1), + (208, 0, 0, 'OP_UpdateClientPredFlagsMsg', 218, 1), + (209, 0, 0, 'OP_ChangeServerControlFlagMsg', 219, 1), + (210, 0, 0, 'OP_CSToolsRequestMsg', 220, 1), + (211, 0, 0, 'OP_CSToolsResponseMsg', 221, 1), + (212, 0, 0, 'OP_AddSocialStructureStandingMsg', 222, 1), + (213, 0, 0, 'OP_CreateBoatTransportsMsg', 223, 1), + (214, 0, 0, 'OP_PositionBoatTransportMsg', 224, 1), + (215, 0, 0, 'OP_MigrateBoatTransportMsg', 225, 1), + (216, 0, 0, 'OP_MigrateBoatTransportReplyMsg', 226, 1), + (217, 0, 0, 'OP_DisplayDebugNLLPointsMsg', 227, 1), + (218, 0, 0, 'OP_ExamineInfoRequestMsg', 228, 1), + (219, 0, 0, 'OP_QuickbarInitMsg', 229, 1), + (220, 0, 0, 'OP_QuickbarUpdateMsg', 230, 1), + (221, 0, 0, 'OP_MacroInitMsg', 231, 1), + (222, 0, 0, 'OP_MacroUpdateMsg', 232, 1), + (223, 0, 0, 'OP_QuestionnaireMsg', 233, 1), + (224, 0, 0, 'OP_LevelChangedMsg', 234, 1), + (225, 0, 0, 'OP_SpellGainedMsg', 235, 1), + (226, 0, 0, 'OP_EncounterBrokenMsg', 236, 1), + (227, 0, 0, 'OP_OnscreenMsgMsg', 237, 1), + (228, 0, 0, 'OP_DisplayWarningMsg', 238, 1), + (229, 0, 0, 'OP_ModifyGuildMsg', 239, 1), + (230, 0, 0, 'OP_GuildEventMsg', 240, 1), + (231, 0, 0, 'OP_GuildEventAddMsg', 241, 1), + (232, 0, 0, 'OP_GuildEventActionMsg', 242, 1), + (233, 0, 0, 'OP_GuildEventListMsg', 243, 1), + (234, 0, 0, 'OP_RequestGuildEventDetailsMsg', 244, 1), + (235, 0, 0, 'OP_GuildEventDetailsMsg', 245, 1), + (236, 0, 0, 'OP_RequestGuildInfoMsg', 246, 1), + (237, 0, 0, 'OP_GuildBankActionMsg', 247, 1), + (238, 0, 0, 'OP_GuildBankActionResponseMsg', 248, 1), + (239, 0, 0, 'OP_GuildBankItemDetailsRequestMsg', 249, 1), + (240, 0, 0, 'OP_GuildBankItemDetailsResponseMs', 250, 1), + (241, 0, 0, 'OP_GuildBankUpdateMsg', 251, 1), + (242, 0, 0, 'OP_GuildBankEventListMsg', 252, 1), + (243, 0, 0, 'OP_RequestGuildBankEventDetailsMs', 253, 1), + (244, 0, 0, 'OP_RewardPackMsg', 254, 1), + (245, 0, 0, 'OP_RenameGuildMsg', 255, 1), + (246, 0, 0, 'OP_ZoneToFriendRequestMsg', 257, 1), + (247, 0, 0, 'OP_ZoneToFriendReplyMsg', 258, 1), + (248, 0, 0, 'OP_ChatCreateChannelMsg', 259, 1), + (249, 0, 0, 'OP_ChatJoinChannelMsg', 260, 1), + (250, 0, 0, 'OP_ChatWhoChannelMsg', 261, 1), + (251, 0, 0, 'OP_ChatLeaveChannelMsg', 262, 1), + (252, 0, 0, 'OP_ChatTellChannelMsg', 263, 1), + (253, 0, 0, 'OP_ChatTellUserMsg', 264, 1), + (254, 0, 0, 'OP_ChatToggleFriendMsg', 265, 1), + (255, 0, 0, 'OP_ChatToggleIgnoreMsg', 266, 1), + (256, 0, 0, 'OP_ChatSendFriendsMsg', 267, 1), + (257, 0, 0, 'OP_ChatSendIgnoresMsg', 268, 1), + (258, 0, 0, 'OP_QuestReward', 294, 1), + (259, 0, 0, 'OP_ChatFiltersMsg', 309, 1), + (260, 0, 0, 'OP_MailGetHeadersMsg', 310, 1), + (261, 0, 0, 'OP_MailGetMessageMsg', 311, 1), + (262, 0, 0, 'OP_MailSendMessageMsg', 312, 1), + (263, 0, 0, 'OP_MailDeleteMessageMsg', 313, 1), + (264, 0, 0, 'OP_MailGetHeadersReplyMsg', 314, 1), + (265, 0, 0, 'OP_MailGetMessageReplyMsg', 315, 1), + (266, 0, 0, 'OP_MailSendMessageReplyMsg', 316, 1), + (267, 0, 0, 'OP_MailCommitSendMessageMsg', 317, 1), + (268, 0, 0, 'OP_MailSendSystemMessageMsg', 318, 1), + (269, 0, 0, 'OP_MailRemoveAttachFromMailMsg', 319, 1), + (270, 0, 0, 'OP_WaypointRequestMsg', 321, 1), + (271, 0, 0, 'OP_WaypointReplyMsg', 322, 1), + (272, 0, 0, 'OP_WaypointSelectMsg', 323, 1), + (273, 0, 0, 'OP_WaypointUpdateMsg', 324, 1), + (274, 0, 0, 'OP_CharNameChangedMsg', 325, 1), + (275, 0, 0, 'OP_ShowZoneTeleporterDestinations', 326, 1), + (276, 0, 0, 'OP_SelectZoneTeleporterDestinatio', 327, 1), + (277, 0, 0, 'OP_ReloadLocalizedTxtMsg', 328, 1), + (278, 0, 0, 'OP_RequestGuildMembershipMsg', 329, 1), + (279, 0, 0, 'OP_GuildMembershipResponseMsg', 330, 1), + (280, 0, 0, 'OP_LeaveGuildNotifyMsg', 331, 1), + (281, 0, 0, 'OP_JoinGuildNotifyMsg', 332, 1), + (282, 0, 0, 'OP_AvatarUpdateMsg', 334, 1), + (283, 0, 0, 'OP_BioUpdateMsg', 335, 1), + (284, 0, 0, 'OP_InspectPlayerMsg', 336, 1), + (285, 0, 0, 'OP_WSServerLockMsg', 337, 1), + (286, 0, 0, 'OP_LSServerLockMsg', 338, 1), + (287, 0, 0, 'OP_WSServerHideMsg', 339, 1), + (288, 0, 0, 'OP_CsCategoryRequestMsg', 340, 1), + (289, 0, 0, 'OP_CsCategoryResponseMsg', 341, 1), + (290, 0, 0, 'OP_KnowledgeWindowSlotMappingMsg', 342, 1), + (291, 0, 0, 'OP_LFGUpdateMsg', 343, 1), + (292, 0, 0, 'OP_AFKUpdateMsg', 344, 1), + (293, 0, 0, 'OP_AnonUpdateMsg', 345, 1), + (294, 0, 0, 'OP_UpdateActivePublicZonesMsg', 346, 1), + (295, 0, 0, 'OP_UnknownNpcMsg', 347, 1), + (296, 0, 0, 'OP_PromoFlagsDetailsMsg', 348, 1), + (297, 0, 0, 'OP_ConsignViewCreateMsg', 349, 1), + (298, 0, 0, 'OP_ConsignViewGetPageMsg', 350, 1), + (299, 0, 0, 'OP_ConsignViewReleaseMsg', 351, 1), + (300, 0, 0, 'OP_ConsignRemoveItemsMsg', 352, 1), + (301, 0, 0, 'OP_UpdateDebugRadiiMsg', 353, 1), + (302, 0, 0, 'OP_SnoopMsg', 354, 1), + (303, 0, 0, 'OP_ReportMsg', 355, 1), + (304, 0, 0, 'OP_UpdateRaidMsg', 356, 1), + (305, 0, 0, 'OP_ConsignViewSortMsg', 357, 1), + (306, 0, 0, 'OP_TitleUpdateMsg', 358, 1), + (307, 0, 0, 'OP_ClientFellMsg', 359, 1), + (308, 0, 0, 'OP_ClientInDeathRegionMsg', 360, 1), + (309, 0, 0, 'OP_CampClientMsg', 361, 1), + (310, 0, 0, 'OP_CSToolAccessResponseMsg', 362, 1), + (311, 0, 0, 'OP_TrackingUpdateMsg', 363, 1), + (312, 0, 0, 'OP_BeginTrackingMsg', 364, 1), + (313, 0, 0, 'OP_StopTrackingMsg', 365, 1), + (314, 0, 0, 'OP_GetAvatarAccessRequestForCSToo', 366, 1), + (315, 0, 0, 'OP_AdvancementRequestMsg', 367, 1), + (316, 0, 0, 'OP_UpdateAvgFrameTimeMsg', 368, 1), + (317, 0, 0, 'OP_MapFogDataInitMsg', 369, 1), + (318, 0, 0, 'OP_MapFogDataUpdateMsg', 370, 1), + (319, 0, 0, 'OP_CloseGroupInviteWindowMsg', 371, 1), + (320, 0, 0, 'OP_UpdateGroupMemberDataMsg', 372, 1), + (321, 0, 0, 'OP_WorldPingMsg', 373, 1), + (322, 0, 0, 'OP_MoveLogUpdateMsg', 374, 1), + (323, 0, 0, 'OP_OfferQuestMsg', 375, 1), + (324, 0, 0, 'OP_WorldShutdownUpdateMsg', 376, 1), + (325, 0, 0, 'OP_DisplayMailScreenMsg', 377, 1), + (326, 0, 0, 'OP_ClientIdleBeginMsg', 378, 1), + (327, 0, 0, 'OP_ClientIdleEndMsg', 379, 1), + (328, 0, 0, 'OP_PurchaseConsignmentLoreCheckRe', 380, 1), + (329, 0, 0, 'OP_NotifyApprenticeStoppedMentori', 381, 1), + (330, 0, 0, 'OP_CorruptedClientMsg', 382, 1), + (331, 0, 0, 'OP_WorldDataChangeMsg', 383, 1), + (332, 0, 0, 'OP_MailEventNotificationMsg', 384, 1), + (333, 0, 0, 'OP_RestartZoneMsg', 385, 1), + (334, 0, 0, 'OP_FlightPathsMsg', 386, 1), + (335, 0, 0, 'OP_CharacterLinkdeadMsg', 387, 1), + (336, 0, 0, 'OP_CharTransferStartRequestMsg', 388, 1), + (337, 0, 0, 'OP_CharTransferStartReplyMsg', 389, 1), + (338, 0, 0, 'OP_CharTransferRequestMsg', 390, 1), + (339, 0, 0, 'OP_CharTransferReplyMsg', 391, 1), + (340, 0, 0, 'OP_CharTransferRollbackRequestMsg', 392, 1), + (341, 0, 0, 'OP_CharTransferCommitRequestMsg', 393, 1), + (342, 0, 0, 'OP_CharTransferRollbackReplyMsg', 394, 1), + (343, 0, 0, 'OP_CharTransferCommitReplyMsg', 395, 1), + (344, 0, 0, 'OP_GetCharacterSerializedRequestM', 396, 1), + (345, 0, 0, 'OP_GetCharacterSerializedReplyMsg', 397, 1), + (346, 0, 0, 'OP_CreateCharFromCBBRequestMsg', 398, 1), + (347, 0, 0, 'OP_CreateCharFromCBBReplyMsg', 399, 1), + (348, 0, 0, 'OP_HousingDataChangedMsg', 400, 1), + (349, 0, 0, 'OP_HousingRestoreMsg', 401, 1), + (350, 0, 0, 'OP_AuctionItem', 402, 1), + (351, 0, 0, 'OP_AuctionItemReply', 403, 1), + (352, 0, 0, 'OP_AuctionCoin', 404, 1), + (353, 0, 0, 'OP_AuctionCoinReply', 405, 1), + (354, 0, 0, 'OP_AuctionCharacter', 406, 1), + (355, 0, 0, 'OP_AuctionCharacterReply', 407, 1), + (356, 0, 0, 'OP_AuctionCommitMsg', 408, 1), + (357, 0, 0, 'OP_AuctionAbortMsg', 409, 1), + (358, 0, 0, 'OP_CharTransferValidateRequestMsg', 410, 1), + (359, 0, 0, 'OP_CharTransferValidateReplyMsg', 411, 1), + (360, 0, 0, 'OP_RaceRestrictionMsg', 412, 1), + (361, 0, 0, 'OP_SetInstanceDisplayNameMsg', 413, 1), + (362, 0, 0, 'OP_GetAuctionAssetIDMsg', 414, 1), + (363, 0, 0, 'OP_GetAuctionAssetIDReplyMsg', 415, 1), + (364, 0, 0, 'OP_ResendWorldChannelsMsg', 416, 1), + (365, 0, 0, 'OP_DisplayExchangeScreenMsg', 417, 1), + (366, 0, 0, 'OP_ArenaGameTypesMsg', 418, 1), + (367, 0, 0, 'OP_AuditAuctionEventMsg', 420, 1), + (368, 0, 0, 'OP_InviteRequestMsg', 422, 1), + (369, 0, 0, 'OP_InviteResponseMsg', 423, 1), + (370, 0, 0, 'OP_InviteTargetResponseMsg', 424, 1), + (371, 0, 0, 'OP_InspectPlayerRequestMsg', 425, 1), + (372, 0, 0, 'OP_DispatchMsg', 426, 1), + (373, 0, 0, 'OP_DisplayEventMsg', 427, 1), + (374, 0, 0, 'OP_PrePossessionMsg', 428, 1), + (375, 0, 0, 'OP_PostPossessionMsg', 429, 1), + (376, 0, 0, 'OP_AdventureList', 454, 1), + (377, 0, 0, 'OP_CancelSpellCast', 455, 1), + (378, 0, 0, 'OP_UpdateTitleCmd', 461, 1), + (379, 0, 0, 'OP_AttackAllowed', 467, 1), + (380, 0, 0, 'OP_AttackNotAllowed', 468, 1), + (381, 0, 0, 'OP_DressingRoom', 474, 1), + (382, 0, 0, 'OP_SkillInfoRequest', 478, 1), + (383, 0, 0, 'OP_SkillInfoResponse', 479, 1), + (384, 0, 0, 'OP_EqHearChatCmd', 480, 1), + (385, 0, 0, 'OP_EqDisplayTextCmd', 481, 1), + (386, 0, 0, 'OP_EqCreateGhostCmd', 482, 1), + (387, 0, 0, 'OP_EqCreateWidgetCmd', 483, 1), + (388, 0, 0, 'OP_EqCreateSignWidgetCmd', 484, 1), + (389, 0, 0, 'OP_EqDestroyGhostCmd', 485, 1), + (390, 0, 0, 'OP_EqUpdateGhostCmd', 486, 1), + (391, 0, 0, 'OP_EqSetControlGhostCmd', 487, 1), + (392, 0, 0, 'OP_EqSetPOVGhostCmd', 488, 1), + (393, 0, 0, 'OP_EqHearCombatCmd', 489, 1), + (394, 0, 0, 'OP_EqHearSpellCastCmd', 490, 1), + (395, 0, 0, 'OP_EqHearSpellInterruptCmd', 493, 1), + (396, 0, 0, 'OP_EqHearSpellFizzleCmd', 494, 1), + (397, 0, 0, 'OP_EqHearConsiderCmd', 495, 1), + (398, 0, 0, 'OP_EqUpdateSubClassesCmd', 496, 1), + (399, 0, 0, 'OP_EqCreateListBoxCmd', 497, 1), + (400, 0, 0, 'OP_EqSetDebugPathPointsCmd', 498, 1), + (401, 0, 0, 'OP_EqCannedEmoteCmd', 500, 1), + (402, 0, 0, 'OP_EqStateCmd', 501, 1), + (403, 0, 0, 'OP_EqPlaySoundCmd', 502, 1), + (404, 0, 0, 'OP_EqPlaySound3DCmd', 503, 1), + (405, 0, 0, 'OP_EqPlayVoiceCmd', 504, 1), + (406, 0, 0, 'OP_EqHearDrowningCmd', 505, 1), + (407, 0, 0, 'OP_EqHearDeathCmd', 506, 1), + (408, 0, 0, 'OP_EqGroupMemberRemovedCmd', 507, 1), + (409, 0, 0, 'OP_EqHearChainEffectCmd', 508, 1), + (410, 0, 0, 'OP_EqReceiveOfferCmd', 509, 1), + (411, 0, 0, 'OP_EqInspectPCResultsCmd', 510, 1), + (412, 0, 0, 'OP_EqDrawablePathGraphCmd', 511, 1), + (413, 0, 0, 'OP_EqDialogOpenCmd', 512, 1), + (414, 0, 0, 'OP_EqDialogCloseCmd', 513, 1), + (415, 0, 0, 'OP_EqFactionUpdateCmd', 514, 1), + (416, 0, 0, 'OP_EqCollectionUpdateCmd', 515, 1), + (417, 0, 0, 'OP_EqCollectionFilterCmd', 516, 1), + (418, 0, 0, 'OP_EqCollectionItemCmd', 517, 1), + (419, 0, 0, 'OP_EqQuestJournalUpdateCmd', 518, 1), + (420, 0, 0, 'OP_EqQuestJournalReplyCmd', 520, 1), + (421, 0, 0, 'OP_EqQuestGroupCmd', 521, 1), + (422, 0, 0, 'OP_EqUpdateMerchantCmd', 522, 1), + (423, 0, 0, 'OP_EqUpdateStoreCmd', 523, 1), + (424, 0, 0, 'OP_EqUpdatePlayerTradeCmd', 524, 1), + (425, 0, 0, 'OP_EqHelpPathCmd', 525, 1), + (426, 0, 0, 'OP_EqHelpPathClearCmd', 526, 1), + (427, 0, 0, 'OP_EqUpdateBankCmd', 527, 1), + (428, 0, 0, 'OP_EqExamineInfoCmd', 528, 1), + (429, 0, 0, 'OP_EqCloseWindowCmd', 529, 1), + (430, 0, 0, 'OP_EqUpdateLootCmd', 530, 1), + (431, 0, 0, 'OP_EqJunctionListCmd', 531, 1), + (432, 0, 0, 'OP_EqShowDeathWindowCmd', 532, 1), + (433, 0, 0, 'OP_EqDisplaySpellFailCmd', 533, 1), + (434, 0, 0, 'OP_EqSpellCastStartCmd', 534, 1), + (435, 0, 0, 'OP_EqSpellCastEndCmd', 535, 1), + (436, 0, 0, 'OP_EqResurrectedCmd', 536, 1), + (437, 0, 0, 'OP_EqChoiceWinCmd', 537, 1), + (438, 0, 0, 'OP_EqSetDefaultVerbCmd', 538, 1), + (439, 0, 0, 'OP_EqInstructionWindowCmd', 540, 1), + (440, 0, 0, 'OP_EqInstructionWindowCloseCmd', 541, 1), + (441, 0, 0, 'OP_EqInstructionWindowGoalCmd', 542, 1), + (442, 0, 0, 'OP_EqInstructionWindowTaskCmd', 543, 1), + (443, 0, 0, 'OP_EqEnableGameEventCmd', 544, 1), + (444, 0, 0, 'OP_EqShowWindowCmd', 545, 1), + (445, 0, 0, 'OP_EqEnableWindowCmd', 546, 1), + (446, 0, 0, 'OP_EqFlashWindowCmd', 547, 1), + (447, 0, 0, 'OP_EqHearPlayFlavorCmd', 548, 1), + (448, 0, 0, 'OP_EqUpdateSignWidgetCmd', 550, 1), + (449, 0, 0, 'OP_EqDebugPVDCmd', 551, 1), + (450, 0, 0, 'OP_EqShowBookCmd', 552, 1), + (451, 0, 0, 'OP_EqQuestionnaireCmd', 553, 1), + (452, 0, 0, 'OP_EqGetProbsCmd', 554, 1), + (453, 0, 0, 'OP_EqHearHealCmd', 555, 1), + (454, 0, 0, 'OP_EqChatChannelUpdateCmd', 556, 1), + (455, 0, 0, 'OP_EqWhoChannelQueryReplyCmd', 557, 1), + (456, 0, 0, 'OP_EqAvailWorldChannelsCmd', 558, 1), + (457, 0, 0, 'OP_EqUpdateTargetCmd', 559, 1), + (458, 0, 0, 'OP_EqConsignmentItemsCmd', 561, 1), + (459, 0, 0, 'OP_EqStartBrokerCmd', 563, 1), + (460, 0, 0, 'OP_EqMapExplorationCmd', 564, 1), + (461, 0, 0, 'OP_EqStoreLogCmd', 565, 1), + (462, 0, 0, 'OP_EqSpellMoveToRangeAndRetryCmd', 566, 1), + (463, 0, 0, 'OP_EqUpdatePlayerMailCmd', 567, 1), + (464, 0, 0, 'OP_EqArenaResultsCmd', 568, 1), + (465, 0, 0, 'OP_EqGuildBankEventActionCmd', 569, 1), + (466, 0, 0, 'OP_EqGuildBankExamineInfoCmd', 570, 1), + (467, 0, 0, 'OP_EqHearSpellNoLandCmd', 571, 1), + (468, 0, 0, 'OP_Lottery', 572, 1), + (469, 0, 0, 'OP_GuildRecruitingMemberInfo', 573, 1), + (470, 0, 0, 'OP_GuildRecruiting', 574, 1), + (471, 0, 0, 'OP_GuildRecruitingDetails', 575, 1), + (472, 0, 0, 'OP_GuildRecruitingImage', 576, 1), + (473, 0, 0, 'OP_PointOfInterest', 597, 1), + (474, 0, 0, 'OP_TraitsList', 599, 1), + (475, 0, 0, 'OP_RecipeList', 608, 1), + (476, 0, 0, 'OP_CharacterAchievements', 655, 1), + (477, 0, 0, 'OP_AddClientToGroupMsg', 999, 1), + (478, 0, 0, 'OP_AddGroupToGroupMsg', 999, 1), + (479, 0, 0, 'OP_GuildKickMsg', 999, 1), + (480, 0, 0, 'OP_PurchaseConsignmentResponseMsg', 999, 1), + (481, 0, 0, 'OP_ProcessScriptMsg', 999, 1), + (482, 0, 0, 'OP_ProcessWorkspaceMsg', 999, 1), + (483, 0, 0, 'OP_QuickbarAddMsg', 999, 1), + (484, 0, 0, 'OP_SkillSlotMapping', 999, 1), + (485, 0, 0, 'OP_MapRequest', 999, 1), + (486, 0, 0, 'OP_BadLanguageFilter', 999, 1), + (487, 0, 0, 'OP_Unknown', 10000, 1), + (488, 0, 0, 'OP_WSWeatherUpdateMsg', 10012, 1), + (489, 839, 844, 'OP_LoginRequestMsg', 0, 1), + (490, 839, 844, 'OP_LoginByNumRequestMsg', 1, 1), + (491, 839, 844, 'OP_WSLoginRequestMsg', 2, 1), + (492, 839, 844, 'OP_ESLoginRequestMsg', 3, 1), + (493, 839, 844, 'OP_LoginReplyMsg', 4, 1), + (494, 839, 844, 'OP_WSStatusReplyMsg', 5, 1), + (495, 839, 844, 'OP_WorldStatusChangeMsg', 6, 1), + (496, 839, 844, 'OP_AllWSDescRequestMsg', 7, 1), + (497, 839, 844, 'OP_WorldListMsg', 8, 1), + (498, 839, 844, 'OP_AllCharactersDescRequestMsg', 9, 1), + (499, 839, 844, 'OP_AllCharactersDescReplyMsg', 10, 1), + (500, 839, 844, 'OP_CreateCharacterRequestMsg', 11, 1), + (501, 839, 844, 'OP_CreateCharacterReplyMsg', 12, 1), + (502, 839, 844, 'OP_WSCreateCharacterRequestMsg', 13, 1), + (503, 839, 844, 'OP_WSCreateCharacterReplyMsg', 14, 1), + (504, 839, 844, 'OP_ReskinCharacterRequestMsg', 15, 1), + (505, 839, 844, 'OP_DeleteCharacterRequestMsg', 16, 1), + (506, 839, 844, 'OP_DeleteCharacterReplyMsg', 17, 1), + (507, 839, 844, 'OP_PlayCharacterRequestMsg', 18, 1), + (508, 839, 844, 'OP_PlayCharacterReplyMsg', 19, 1), + (509, 839, 844, 'OP_ExpectClientAsCharacterReplyMs', 22, 1), + (510, 839, 844, 'OP_ServerPlayCharacterRequestMsg', 23, 1), + (511, 839, 844, 'OP_ServerPlayCharacterReplyMsg', 24, 1), + (512, 839, 844, 'OP_ESInitMsg', 25, 1), + (513, 839, 844, 'OP_ESReadyForClientsMsg', 26, 1), + (514, 839, 844, 'OP_CreateZoneInstanceMsg', 27, 1), + (515, 839, 844, 'OP_ZoneInstanceCreateReplyMsg', 28, 1), + (516, 839, 844, 'OP_ZoneInstanceDestroyedMsg', 29, 1), + (517, 839, 844, 'OP_ExpectClientAsCharacterRequest', 30, 1), + (518, 839, 844, 'OP_ZoneInfoMsg', 31, 1), + (519, 839, 844, 'OP_DoneLoadingZoneResourcesMsg', 32, 1), + (520, 839, 844, 'OP_DoneSendingInitialEntitiesMsg', 33, 1), + (521, 839, 844, 'OP_DoneLoadingEntityResourcesMsg', 34, 1), + (522, 839, 844, 'OP_PredictionUpdateMsg', 35, 1), + (523, 839, 844, 'OP_UpdatePositionMsg', 36, 1), + (524, 839, 844, 'OP_SetRemoteCmdsMsg', 37, 1), + (525, 839, 844, 'OP_RemoteCmdMsg', 38, 1), + (526, 839, 844, 'OP_GameWorldTimeMsg', 39, 1), + (527, 839, 844, 'OP_MOTDMsg', 40, 1), + (528, 839, 844, 'OP_ZoneMOTDMsg', 41, 1), + (529, 839, 844, 'OP_AvatarCreatedMsg', 42, 1), + (530, 839, 844, 'OP_AvatarDestroyedMsg', 43, 1), + (531, 839, 844, 'OP_RequestCampMsg', 45, 1), + (532, 839, 844, 'OP_CampStartedMsg', 46, 1), + (533, 839, 844, 'OP_CampAbortedMsg', 47, 1), + (534, 839, 844, 'OP_WhoQueryRequestMsg', 48, 1), + (535, 839, 844, 'OP_WhoQueryReplyMsg', 49, 1), + (536, 839, 844, 'OP_MonitorReplyMsg', 50, 1), + (537, 839, 844, 'OP_MonitorCharacterListMsg', 51, 1), + (538, 839, 844, 'OP_MonitorCharacterListRequestMsg', 52, 1), + (539, 839, 844, 'OP_ClientCmdMsg', 53, 1), + (540, 839, 844, 'OP_DispatchESMsg', 54, 1), + (541, 839, 844, 'OP_DispatchClientCmdMsg', 55, 1), + (542, 839, 844, 'OP_UpdateTargetMsg', 56, 1), + (543, 839, 844, 'OP_UpdateTargetLocMsg', 57, 1), + (544, 839, 844, 'OP_UpdateCharacterSheetMsg', 58, 1), + (545, 839, 844, 'OP_UpdateSpellBookMsg', 59, 1), + (546, 839, 844, 'OP_UpdateInventoryMsg', 61, 1), + (547, 839, 844, 'OP_UpdateRecipeBookMsg', 63, 1), + (548, 839, 844, 'OP_RequestRecipeDetailsMsg', 64, 1), + (549, 839, 844, 'OP_RecipeDetailsMsg', 65, 1), + (550, 839, 844, 'OP_UpdateSkillBookMsg', 66, 1), + (551, 839, 844, 'OP_UpdateSkillsMsg', 67, 1), + (552, 839, 844, 'OP_UpdateOpportunityMsg', 68, 1), + (553, 839, 844, 'OP_ChangeZoneMsg', 70, 1), + (554, 839, 844, 'OP_ClientTeleportRequestMsg', 71, 1), + (555, 839, 844, 'OP_TeleportWithinZoneMsg', 72, 1), + (556, 839, 844, 'OP_TeleportWithinZoneNoReloadMsg', 73, 1), + (557, 839, 844, 'OP_MigrateClientToZoneRequestMsg', 74, 1), + (558, 839, 844, 'OP_MigrateClientToZoneReplyMsg', 75, 1), + (559, 839, 844, 'OP_ReadyToZoneMsg', 76, 1), + (560, 839, 844, 'OP_RemoveClientFromGroupMsg', 77, 1), + (561, 839, 844, 'OP_RemoveGroupFromGroupMsg', 78, 1), + (562, 839, 844, 'OP_MakeGroupLeaderMsg', 79, 1), + (563, 839, 844, 'OP_GroupCreatedMsg', 80, 1), + (564, 839, 844, 'OP_GroupDestroyedMsg', 81, 1), + (565, 839, 844, 'OP_GroupMemberAddedMsg', 82, 1), + (566, 839, 844, 'OP_GroupMemberRemovedMsg', 83, 1), + (567, 839, 844, 'OP_GroupRemovedFromGroupMsg', 84, 1), + (568, 839, 844, 'OP_GroupLeaderChangedMsg', 85, 1), + (569, 839, 844, 'OP_GroupResendOOZDataMsg', 86, 1), + (570, 839, 844, 'OP_GroupSettingsChangedMsg', 87, 1), + (571, 839, 844, 'OP_OutOfZoneMemberDataMsg', 88, 1), + (572, 839, 844, 'OP_SendLatestRequestMsg', 89, 1), + (573, 839, 844, 'OP_ClearDataMsg', 90, 1), + (574, 839, 844, 'OP_SetSocialMsg', 91, 1), + (575, 839, 844, 'OP_ESStatusMsg', 92, 1), + (576, 839, 844, 'OP_ESZoneInstanceStatusMsg', 93, 1), + (577, 839, 844, 'OP_ZonesStatusRequestMsg', 94, 1), + (578, 839, 844, 'OP_ZonesStatusMsg', 95, 1), + (579, 839, 844, 'OP_ESWeatherRequestMsg', 96, 1), + (580, 839, 844, 'OP_ESWeatherRequestEndMsg', 97, 1), + (581, 839, 844, 'OP_DialogSelectMsg', 98, 1), + (582, 839, 844, 'OP_DialogCloseMsg', 99, 1), + (583, 839, 844, 'OP_RemoveSpellEffectMsg', 100, 1), + (584, 839, 844, 'OP_RemoveConcentrationMsg', 101, 1), + (585, 839, 844, 'OP_QuestJournalOpenMsg', 102, 1), + (586, 839, 844, 'OP_QuestJournalInspectMsg', 103, 1), + (587, 839, 844, 'OP_QuestJournalSetVisibleMsg', 104, 1), + (588, 839, 844, 'OP_QuestJournalWaypointMsg', 105, 1), + (589, 839, 844, 'OP_CreateGuildRequestMsg', 108, 1), + (590, 839, 844, 'OP_CreateGuildReplyMsg', 109, 1), + (591, 839, 844, 'OP_GuildsayMsg', 110, 1), + (592, 839, 844, 'OP_GuildUpdateMsg', 111, 1), + (593, 839, 844, 'OP_DeleteGuildMsg', 112, 1), + (594, 839, 844, 'OP_FellowshipExpMsg', 113, 1), + (595, 839, 844, 'OP_ConsignmentCloseStoreMsg', 114, 1), + (596, 839, 844, 'OP_ConsignItemRequestMsg', 115, 1), + (597, 839, 844, 'OP_ConsignItemResponseMsg', 116, 1), + (598, 839, 844, 'OP_PurchaseConsignmentRequestMsg', 117, 1), + (599, 839, 844, 'OP_HouseDeletedRemotelyMsg', 118, 1), + (600, 839, 844, 'OP_UpdateHouseDataMsg', 119, 1), + (601, 839, 844, 'OP_UpdateHouseAccessDataMsg', 120, 1), + (602, 839, 844, 'OP_PlayerHouseBaseScreenMsg', 121, 1), + (603, 839, 844, 'OP_PlayerHousePurchaseScreenMsg', 122, 1), + (604, 839, 844, 'OP_PlayerHouseAccessUpdateMsg', 123, 1), + (605, 839, 844, 'OP_PlayerHouseDisplayStatusMsg', 124, 1), + (606, 839, 844, 'OP_PlayerHouseCloseUIMsg', 125, 1), + (607, 839, 844, 'OP_BuyPlayerHouseMsg', 126, 1), + (608, 839, 844, 'OP_BuyPlayerHouseTintMsg', 127, 1), + (609, 839, 844, 'OP_CollectAllHouseItemsMsg', 128, 1), + (610, 839, 844, 'OP_RelinquishHouseMsg', 129, 1), + (611, 839, 844, 'OP_EnterHouseMsg', 130, 1), + (612, 839, 844, 'OP_ExitHouseMsg', 131, 1), + (613, 839, 844, 'OP_HouseDefaultAccessSetMsg', 132, 1), + (614, 839, 844, 'OP_HouseAccessSetMsg', 133, 1), + (615, 839, 844, 'OP_HouseAccessRemoveMsg', 134, 1), + (616, 839, 844, 'OP_PayHouseUpkeepMsg', 135, 1), + (617, 839, 844, 'OP_MoveableObjectPlacementCriteri', 136, 1), + (618, 839, 844, 'OP_EnterMoveObjectModeMsg', 137, 1), + (619, 839, 844, 'OP_PositionMoveableObject', 138, 1), + (620, 839, 844, 'OP_CancelMoveObjectModeMsg', 139, 1), + (621, 839, 844, 'OP_ShaderCustomizationMsg', 140, 1), + (622, 839, 844, 'OP_ReplaceableSubMeshesMsg', 141, 1), + (623, 839, 844, 'OP_HouseCustomizationScreenMsg', 142, 1), + (624, 839, 844, 'OP_CustomizationPurchaseRequestMs', 143, 1), + (625, 839, 844, 'OP_CustomizationSetRequestMsg', 144, 1), + (626, 839, 844, 'OP_CustomizationReplyMsg', 145, 1), + (627, 839, 844, 'OP_TintWidgetsMsg', 146, 1), + (628, 839, 844, 'OP_ExamineConsignmentRequestMsg', 147, 1), + (629, 839, 844, 'OP_ExamineConsignmentResponseMsg', 148, 1), + (630, 839, 844, 'OP_UISettingsResponseMsg', 149, 1), + (631, 839, 844, 'OP_UIResetMsg', 150, 1), + (632, 839, 844, 'OP_KeymapLoadMsg', 151, 1), + (633, 839, 844, 'OP_KeymapNoneMsg', 152, 1), + (634, 839, 844, 'OP_KeymapDataMsg', 153, 1), + (635, 839, 844, 'OP_KeymapSaveMsg', 154, 1), + (636, 839, 844, 'OP_DispatchSpellCmdMsg', 155, 1), + (637, 839, 844, 'OP_EntityVerbsRequestMsg', 157, 1), + (638, 839, 844, 'OP_EntityVerbsReplyMsg', 158, 1), + (639, 839, 844, 'OP_EntityVerbsVerbMsg', 159, 1), + (640, 839, 844, 'OP_ChatRelationshipUpdateMsg', 161, 1), + (641, 839, 844, 'OP_LootItemsRequestMsg', 162, 1), + (642, 839, 844, 'OP_StoppedLootingMsg', 163, 1), + (643, 839, 844, 'OP_SitMsg', 164, 1), + (644, 839, 844, 'OP_StandMsg', 165, 1), + (645, 839, 844, 'OP_SatMsg', 166, 1), + (646, 839, 844, 'OP_StoodMsg', 167, 1), + (647, 839, 844, 'OP_ClearForTakeOffMsg', 168, 1), + (648, 839, 844, 'OP_ReadyForTakeOffMsg', 169, 1), + (649, 839, 844, 'OP_ShowIllusionsMsg', 170, 1), + (650, 839, 844, 'OP_HideIllusionsMsg', 171, 1), + (651, 839, 844, 'OP_ExamineItemRequestMsg', 172, 1), + (652, 839, 844, 'OP_ReadBookPageMsg', 173, 1), + (653, 839, 844, 'OP_DefaultGroupOptionsRequestMsg', 174, 1), + (654, 839, 844, 'OP_DefaultGroupOptionsMsg', 175, 1), + (655, 839, 844, 'OP_GroupOptionsMsg', 176, 1), + (656, 839, 844, 'OP_DisplayGroupOptionsScreenMsg', 177, 1), + (657, 839, 844, 'OP_DisplayInnVisitScreenMsg', 178, 1), + (658, 839, 844, 'OP_DumpSchedulerMsg', 179, 1), + (659, 839, 844, 'OP_LSRequestPlayerDescMsg', 180, 1), + (660, 839, 844, 'OP_LSCheckAcctLockMsg', 181, 1), + (661, 839, 844, 'OP_WSAcctLockStatusMsg', 182, 1), + (662, 839, 844, 'OP_RequestHelpRepathMsg', 183, 1), + (663, 839, 844, 'OP_RequestTargetLocMsg', 184, 1), + (664, 839, 844, 'OP_UpdateMotdMsg', 185, 1), + (665, 839, 844, 'OP_PerformPlayerKnockbackMsg', 186, 1), + (666, 839, 844, 'OP_PerformCameraShakeMsg', 187, 1), + (667, 839, 844, 'OP_PopulateSkillMapsMsg', 188, 1), + (668, 839, 844, 'OP_CancelledFeignMsg', 190, 1), + (669, 839, 844, 'OP_SignalMsg', 191, 1), + (670, 839, 844, 'OP_ShowCreateFromRecipeUIMsg', 192, 1), + (671, 839, 844, 'OP_CancelCreateFromRecipeMsg', 193, 1), + (672, 839, 844, 'OP_BeginItemCreationMsg', 194, 1), + (673, 839, 844, 'OP_StopItemCreationMsg', 195, 1), + (674, 839, 844, 'OP_ShowItemCreationProcessUIMsg', 196, 1), + (675, 839, 844, 'OP_UpdateItemCreationProcessUIMsg', 197, 1), + (676, 839, 844, 'OP_DisplayTSEventReactionMsg', 198, 1), + (677, 839, 844, 'OP_ShowRecipeBookMsg', 199, 1), + (678, 839, 844, 'OP_KnowledgebaseRequestMsg', 200, 1), + (679, 839, 844, 'OP_KnowledgebaseResponseMsg', 201, 1), + (680, 839, 844, 'OP_CSTicketHeaderRequestMsg', 202, 1), + (681, 839, 844, 'OP_CSTicketInfoMsg', 203, 1), + (682, 839, 844, 'OP_CSTicketCommentRequestMsg', 204, 1), + (683, 839, 844, 'OP_CSTicketCommentResponseMsg', 205, 1), + (684, 839, 844, 'OP_CSTicketCreateMsg', 206, 1), + (685, 839, 844, 'OP_CSTicketAddCommentMsg', 207, 1), + (686, 839, 844, 'OP_CSTicketDeleteMsg', 208, 1), + (687, 839, 844, 'OP_CSTicketChangeNotificationMsg', 209, 1), + (688, 839, 844, 'OP_WorldDataUpdateMsg', 210, 1), + (689, 839, 844, 'OP_KnownLanguagesMsg', 211, 1), + (690, 839, 844, 'OP_LsRequestClientCrashLogMsg', 212, 1), + (691, 839, 844, 'OP_LsClientBaselogReplyMsg', 213, 1), + (692, 839, 844, 'OP_LsClientCrashlogReplyMsg', 214, 1), + (693, 839, 844, 'OP_LsClientAlertlogReplyMsg', 215, 1), + (694, 839, 844, 'OP_LsClientVerifylogReplyMsg', 216, 1), + (695, 839, 844, 'OP_ClientTeleportToLocationMsg', 217, 1), + (696, 839, 844, 'OP_UpdateClientPredFlagsMsg', 218, 1), + (697, 839, 844, 'OP_ChangeServerControlFlagMsg', 219, 1), + (698, 839, 844, 'OP_CSToolsRequestMsg', 220, 1), + (699, 839, 844, 'OP_CSToolsResponseMsg', 221, 1), + (700, 839, 844, 'OP_AddSocialStructureStandingMsg', 222, 1), + (701, 839, 844, 'OP_CreateBoatTransportsMsg', 223, 1), + (702, 839, 844, 'OP_PositionBoatTransportMsg', 224, 1), + (703, 839, 844, 'OP_MigrateBoatTransportMsg', 225, 1), + (704, 839, 844, 'OP_MigrateBoatTransportReplyMsg', 226, 1), + (705, 839, 844, 'OP_DisplayDebugNLLPointsMsg', 227, 1), + (706, 839, 844, 'OP_ExamineInfoRequestMsg', 228, 1), + (707, 839, 844, 'OP_QuickbarInitMsg', 229, 1), + (708, 839, 844, 'OP_QuickbarUpdateMsg', 230, 1), + (709, 839, 844, 'OP_MacroInitMsg', 231, 1), + (710, 839, 844, 'OP_MacroUpdateMsg', 232, 1), + (711, 839, 844, 'OP_QuestionnaireMsg', 233, 1), + (712, 839, 844, 'OP_LevelChangedMsg', 234, 1), + (713, 839, 844, 'OP_SpellGainedMsg', 235, 1), + (714, 839, 844, 'OP_EncounterBrokenMsg', 236, 1), + (715, 839, 844, 'OP_OnscreenMsgMsg', 237, 1), + (716, 839, 844, 'OP_DisplayWarningMsg', 238, 1), + (717, 839, 844, 'OP_ModifyGuildMsg', 239, 1), + (718, 839, 844, 'OP_GuildEventMsg', 240, 1), + (719, 839, 844, 'OP_GuildEventAddMsg', 241, 1), + (720, 839, 844, 'OP_GuildEventActionMsg', 242, 1), + (721, 839, 844, 'OP_GuildEventListMsg', 243, 1), + (722, 839, 844, 'OP_RequestGuildEventDetailsMsg', 244, 1), + (723, 839, 844, 'OP_GuildEventDetailsMsg', 245, 1), + (724, 839, 844, 'OP_RequestGuildInfoMsg', 246, 1), + (725, 839, 844, 'OP_GuildBankActionMsg', 247, 1), + (726, 839, 844, 'OP_GuildBankActionResponseMsg', 248, 1), + (727, 839, 844, 'OP_GuildBankItemDetailsRequestMsg', 249, 1), + (728, 839, 844, 'OP_GuildBankItemDetailsResponseMs', 250, 1), + (729, 839, 844, 'OP_GuildBankUpdateMsg', 251, 1), + (730, 839, 844, 'OP_GuildBankEventListMsg', 252, 1), + (731, 839, 844, 'OP_RequestGuildBankEventDetailsMs', 253, 1), + (732, 839, 844, 'OP_RewardPackMsg', 254, 1), + (733, 839, 844, 'OP_RenameGuildMsg', 255, 1), + (734, 839, 844, 'OP_ZoneToFriendRequestMsg', 257, 1), + (735, 839, 844, 'OP_ZoneToFriendReplyMsg', 258, 1), + (736, 839, 844, 'OP_ChatCreateChannelMsg', 259, 1), + (737, 839, 844, 'OP_ChatJoinChannelMsg', 260, 1), + (738, 839, 844, 'OP_ChatWhoChannelMsg', 261, 1), + (739, 839, 844, 'OP_ChatLeaveChannelMsg', 262, 1), + (740, 839, 844, 'OP_ChatTellChannelMsg', 263, 1), + (741, 839, 844, 'OP_ChatTellUserMsg', 264, 1), + (742, 839, 844, 'OP_ChatToggleFriendMsg', 265, 1), + (743, 839, 844, 'OP_ChatToggleIgnoreMsg', 266, 1), + (744, 839, 844, 'OP_ChatSendFriendsMsg', 267, 1), + (745, 839, 844, 'OP_ChatSendIgnoresMsg', 268, 1), + (746, 839, 844, 'OP_QuestReward', 294, 1), + (747, 839, 844, 'OP_ChatFiltersMsg', 309, 1), + (748, 839, 844, 'OP_MailGetHeadersMsg', 310, 1), + (749, 839, 844, 'OP_MailGetMessageMsg', 311, 1), + (750, 839, 844, 'OP_MailSendMessageMsg', 312, 1), + (751, 839, 844, 'OP_MailDeleteMessageMsg', 313, 1), + (752, 839, 844, 'OP_MailGetHeadersReplyMsg', 314, 1), + (753, 839, 844, 'OP_MailGetMessageReplyMsg', 315, 1), + (754, 839, 844, 'OP_MailSendMessageReplyMsg', 316, 1), + (755, 839, 844, 'OP_MailCommitSendMessageMsg', 317, 1), + (756, 839, 844, 'OP_MailSendSystemMessageMsg', 318, 1), + (757, 839, 844, 'OP_MailRemoveAttachFromMailMsg', 319, 1), + (758, 839, 844, 'OP_WaypointRequestMsg', 321, 1), + (759, 839, 844, 'OP_WaypointReplyMsg', 322, 1), + (760, 839, 844, 'OP_WaypointSelectMsg', 323, 1), + (761, 839, 844, 'OP_WaypointUpdateMsg', 324, 1), + (762, 839, 844, 'OP_CharNameChangedMsg', 325, 1), + (763, 839, 844, 'OP_ShowZoneTeleporterDestinations', 326, 1), + (764, 839, 844, 'OP_SelectZoneTeleporterDestinatio', 327, 1), + (765, 839, 844, 'OP_ReloadLocalizedTxtMsg', 328, 1), + (766, 839, 844, 'OP_RequestGuildMembershipMsg', 329, 1), + (767, 839, 844, 'OP_GuildMembershipResponseMsg', 330, 1), + (768, 839, 844, 'OP_LeaveGuildNotifyMsg', 331, 1), + (769, 839, 844, 'OP_JoinGuildNotifyMsg', 332, 1), + (770, 839, 844, 'OP_AvatarUpdateMsg', 334, 1), + (771, 839, 844, 'OP_BioUpdateMsg', 335, 1), + (772, 839, 844, 'OP_InspectPlayerMsg', 336, 1), + (773, 839, 844, 'OP_WSServerLockMsg', 337, 1), + (774, 839, 844, 'OP_LSServerLockMsg', 338, 1), + (775, 839, 844, 'OP_WSServerHideMsg', 339, 1), + (776, 839, 844, 'OP_CsCategoryRequestMsg', 340, 1), + (777, 839, 844, 'OP_CsCategoryResponseMsg', 341, 1), + (778, 839, 844, 'OP_KnowledgeWindowSlotMappingMsg', 342, 1), + (779, 839, 844, 'OP_LFGUpdateMsg', 343, 1), + (780, 839, 844, 'OP_AFKUpdateMsg', 344, 1), + (781, 839, 844, 'OP_AnonUpdateMsg', 345, 1), + (782, 839, 844, 'OP_UpdateActivePublicZonesMsg', 346, 1), + (783, 839, 844, 'OP_UnknownNpcMsg', 347, 1), + (784, 839, 844, 'OP_PromoFlagsDetailsMsg', 348, 1), + (785, 839, 844, 'OP_ConsignViewCreateMsg', 349, 1), + (786, 839, 844, 'OP_ConsignViewGetPageMsg', 350, 1), + (787, 839, 844, 'OP_ConsignViewReleaseMsg', 351, 1), + (788, 839, 844, 'OP_ConsignRemoveItemsMsg', 352, 1), + (789, 839, 844, 'OP_UpdateDebugRadiiMsg', 353, 1), + (790, 839, 844, 'OP_SnoopMsg', 354, 1), + (791, 839, 844, 'OP_ReportMsg', 355, 1), + (792, 839, 844, 'OP_UpdateRaidMsg', 356, 1), + (793, 839, 844, 'OP_ConsignViewSortMsg', 357, 1), + (794, 839, 844, 'OP_TitleUpdateMsg', 358, 1), + (795, 839, 844, 'OP_ClientFellMsg', 359, 1), + (796, 839, 844, 'OP_ClientInDeathRegionMsg', 360, 1), + (797, 839, 844, 'OP_CampClientMsg', 361, 1), + (798, 839, 844, 'OP_CSToolAccessResponseMsg', 362, 1), + (799, 839, 844, 'OP_TrackingUpdateMsg', 363, 1), + (800, 839, 844, 'OP_BeginTrackingMsg', 364, 1), + (801, 839, 844, 'OP_StopTrackingMsg', 365, 1), + (802, 839, 844, 'OP_GetAvatarAccessRequestForCSToo', 366, 1), + (803, 839, 844, 'OP_AdvancementRequestMsg', 367, 1), + (804, 839, 844, 'OP_UpdateAvgFrameTimeMsg', 368, 1), + (805, 839, 844, 'OP_MapFogDataInitMsg', 369, 1), + (806, 839, 844, 'OP_MapFogDataUpdateMsg', 370, 1), + (807, 839, 844, 'OP_CloseGroupInviteWindowMsg', 371, 1), + (808, 839, 844, 'OP_UpdateGroupMemberDataMsg', 372, 1), + (809, 839, 844, 'OP_WorldPingMsg', 373, 1), + (810, 839, 844, 'OP_MoveLogUpdateMsg', 374, 1), + (811, 839, 844, 'OP_OfferQuestMsg', 375, 1), + (812, 839, 844, 'OP_WorldShutdownUpdateMsg', 376, 1), + (813, 839, 844, 'OP_DisplayMailScreenMsg', 377, 1), + (814, 839, 844, 'OP_ClientIdleBeginMsg', 378, 1), + (815, 839, 844, 'OP_ClientIdleEndMsg', 379, 1), + (816, 839, 844, 'OP_PurchaseConsignmentLoreCheckRe', 380, 1), + (817, 839, 844, 'OP_NotifyApprenticeStoppedMentori', 381, 1), + (818, 839, 844, 'OP_CorruptedClientMsg', 382, 1), + (819, 839, 844, 'OP_WorldDataChangeMsg', 383, 1), + (820, 839, 844, 'OP_MailEventNotificationMsg', 384, 1), + (821, 839, 844, 'OP_RestartZoneMsg', 385, 1), + (822, 839, 844, 'OP_FlightPathsMsg', 386, 1), + (823, 839, 844, 'OP_CharacterLinkdeadMsg', 387, 1), + (824, 839, 844, 'OP_CharTransferStartRequestMsg', 388, 1), + (825, 839, 844, 'OP_CharTransferStartReplyMsg', 389, 1), + (826, 839, 844, 'OP_CharTransferRequestMsg', 390, 1), + (827, 839, 844, 'OP_CharTransferReplyMsg', 391, 1), + (828, 839, 844, 'OP_CharTransferRollbackRequestMsg', 392, 1), + (829, 839, 844, 'OP_CharTransferCommitRequestMsg', 393, 1), + (830, 839, 844, 'OP_CharTransferRollbackReplyMsg', 394, 1), + (831, 839, 844, 'OP_CharTransferCommitReplyMsg', 395, 1), + (832, 839, 844, 'OP_GetCharacterSerializedRequestM', 396, 1), + (833, 839, 844, 'OP_GetCharacterSerializedReplyMsg', 397, 1), + (834, 839, 844, 'OP_CreateCharFromCBBRequestMsg', 398, 1), + (835, 839, 844, 'OP_CreateCharFromCBBReplyMsg', 399, 1), + (836, 839, 844, 'OP_HousingDataChangedMsg', 400, 1), + (837, 839, 844, 'OP_HousingRestoreMsg', 401, 1), + (838, 839, 844, 'OP_AuctionItem', 402, 1), + (839, 839, 844, 'OP_AuctionItemReply', 403, 1), + (840, 839, 844, 'OP_AuctionCoin', 404, 1), + (841, 839, 844, 'OP_AuctionCoinReply', 405, 1), + (842, 839, 844, 'OP_AuctionCharacter', 406, 1), + (843, 839, 844, 'OP_AuctionCharacterReply', 407, 1), + (844, 839, 844, 'OP_AuctionCommitMsg', 408, 1), + (845, 839, 844, 'OP_AuctionAbortMsg', 409, 1), + (846, 839, 844, 'OP_CharTransferValidateRequestMsg', 410, 1), + (847, 839, 844, 'OP_CharTransferValidateReplyMsg', 411, 1), + (848, 839, 844, 'OP_RaceRestrictionMsg', 412, 1), + (849, 839, 844, 'OP_SetInstanceDisplayNameMsg', 413, 1), + (850, 839, 844, 'OP_GetAuctionAssetIDMsg', 414, 1), + (851, 839, 844, 'OP_GetAuctionAssetIDReplyMsg', 415, 1), + (852, 839, 844, 'OP_ResendWorldChannelsMsg', 416, 1), + (853, 839, 844, 'OP_DisplayExchangeScreenMsg', 417, 1), + (854, 839, 844, 'OP_ArenaGameTypesMsg', 418, 1), + (855, 839, 844, 'OP_AuditAuctionEventMsg', 420, 1), + (856, 839, 844, 'OP_InviteRequestMsg', 422, 1), + (857, 839, 844, 'OP_InviteResponseMsg', 423, 1), + (858, 839, 844, 'OP_InviteTargetResponseMsg', 424, 1), + (859, 839, 844, 'OP_InspectPlayerRequestMsg', 425, 1), + (860, 839, 844, 'OP_DispatchMsg', 426, 1), + (861, 839, 844, 'OP_DisplayEventMsg', 427, 1), + (862, 839, 844, 'OP_PrePossessionMsg', 428, 1), + (863, 839, 844, 'OP_PostPossessionMsg', 429, 1), + (864, 839, 844, 'OP_AdventureList', 454, 1), + (865, 839, 844, 'OP_CancelSpellCast', 455, 1), + (866, 839, 844, 'OP_UpdateTitleCmd', 461, 1), + (867, 839, 844, 'OP_AttackAllowed', 467, 1), + (868, 839, 844, 'OP_AttackNotAllowed', 468, 1), + (869, 839, 844, 'OP_DressingRoom', 474, 1), + (870, 839, 844, 'OP_SkillInfoRequest', 478, 1), + (871, 839, 844, 'OP_SkillInfoResponse', 479, 1), + (872, 839, 844, 'OP_EqHearChatCmd', 480, 1), + (873, 839, 844, 'OP_EqDisplayTextCmd', 481, 1), + (874, 839, 844, 'OP_EqCreateGhostCmd', 482, 1), + (875, 839, 844, 'OP_EqCreateWidgetCmd', 483, 1), + (876, 839, 844, 'OP_EqCreateSignWidgetCmd', 484, 1), + (877, 839, 844, 'OP_EqDestroyGhostCmd', 485, 1), + (878, 839, 844, 'OP_EqUpdateGhostCmd', 486, 1), + (879, 839, 844, 'OP_EqSetControlGhostCmd', 487, 1), + (880, 839, 844, 'OP_EqSetPOVGhostCmd', 488, 1), + (881, 839, 844, 'OP_EqHearCombatCmd', 489, 1), + (882, 839, 844, 'OP_EqHearSpellCastCmd', 490, 1), + (883, 839, 844, 'OP_EqHearSpellInterruptCmd', 493, 1), + (884, 839, 844, 'OP_EqHearSpellFizzleCmd', 494, 1), + (885, 839, 844, 'OP_EqHearConsiderCmd', 495, 1), + (886, 839, 844, 'OP_EqUpdateSubClassesCmd', 496, 1), + (887, 839, 844, 'OP_EqCreateListBoxCmd', 497, 1), + (888, 839, 844, 'OP_EqSetDebugPathPointsCmd', 498, 1), + (889, 839, 844, 'OP_EqCannedEmoteCmd', 500, 1), + (890, 839, 844, 'OP_EqStateCmd', 501, 1), + (891, 839, 844, 'OP_EqPlaySoundCmd', 502, 1), + (892, 839, 844, 'OP_EqPlaySound3DCmd', 503, 1), + (893, 839, 844, 'OP_EqPlayVoiceCmd', 504, 1), + (894, 839, 844, 'OP_EqHearDrowningCmd', 505, 1), + (895, 839, 844, 'OP_EqHearDeathCmd', 506, 1), + (896, 839, 844, 'OP_EqGroupMemberRemovedCmd', 507, 1), + (897, 839, 844, 'OP_EqHearChainEffectCmd', 508, 1), + (898, 839, 844, 'OP_EqReceiveOfferCmd', 509, 1), + (899, 839, 844, 'OP_EqInspectPCResultsCmd', 510, 1), + (900, 839, 844, 'OP_EqDrawablePathGraphCmd', 511, 1), + (901, 839, 844, 'OP_EqDialogOpenCmd', 512, 1), + (902, 839, 844, 'OP_EqDialogCloseCmd', 513, 1), + (903, 839, 844, 'OP_EqFactionUpdateCmd', 514, 1), + (904, 839, 844, 'OP_EqCollectionUpdateCmd', 515, 1), + (905, 839, 844, 'OP_EqCollectionFilterCmd', 516, 1), + (906, 839, 844, 'OP_EqCollectionItemCmd', 517, 1), + (907, 839, 844, 'OP_EqQuestJournalUpdateCmd', 518, 1), + (908, 839, 844, 'OP_EqQuestJournalReplyCmd', 520, 1), + (909, 839, 844, 'OP_EqQuestGroupCmd', 521, 1), + (910, 839, 844, 'OP_EqUpdateMerchantCmd', 522, 1), + (911, 839, 844, 'OP_EqUpdateStoreCmd', 523, 1), + (912, 839, 844, 'OP_EqUpdatePlayerTradeCmd', 524, 1), + (913, 839, 844, 'OP_EqHelpPathCmd', 525, 1), + (914, 839, 844, 'OP_EqHelpPathClearCmd', 526, 1), + (915, 839, 844, 'OP_EqUpdateBankCmd', 527, 1), + (916, 839, 844, 'OP_EqExamineInfoCmd', 528, 1), + (917, 839, 844, 'OP_EqCloseWindowCmd', 529, 1), + (918, 839, 844, 'OP_EqUpdateLootCmd', 530, 1), + (919, 839, 844, 'OP_EqJunctionListCmd', 531, 1), + (920, 839, 844, 'OP_EqShowDeathWindowCmd', 532, 1), + (921, 839, 844, 'OP_EqDisplaySpellFailCmd', 533, 1), + (922, 839, 844, 'OP_EqSpellCastStartCmd', 534, 1), + (923, 839, 844, 'OP_EqSpellCastEndCmd', 535, 1), + (924, 839, 844, 'OP_EqResurrectedCmd', 536, 1), + (925, 839, 844, 'OP_EqChoiceWinCmd', 537, 1), + (926, 839, 844, 'OP_EqSetDefaultVerbCmd', 538, 1), + (927, 839, 844, 'OP_EqInstructionWindowCmd', 540, 1), + (928, 839, 844, 'OP_EqInstructionWindowCloseCmd', 541, 1), + (929, 839, 844, 'OP_EqInstructionWindowGoalCmd', 542, 1), + (930, 839, 844, 'OP_EqInstructionWindowTaskCmd', 543, 1), + (931, 839, 844, 'OP_EqEnableGameEventCmd', 544, 1), + (932, 839, 844, 'OP_EqShowWindowCmd', 545, 1), + (933, 839, 844, 'OP_EqEnableWindowCmd', 546, 1), + (934, 839, 844, 'OP_EqFlashWindowCmd', 547, 1), + (935, 839, 844, 'OP_EqHearPlayFlavorCmd', 548, 1), + (936, 839, 844, 'OP_EqUpdateSignWidgetCmd', 550, 1), + (937, 839, 844, 'OP_EqDebugPVDCmd', 551, 1), + (938, 839, 844, 'OP_EqShowBookCmd', 552, 1), + (939, 839, 844, 'OP_EqQuestionnaireCmd', 553, 1), + (940, 839, 844, 'OP_EqGetProbsCmd', 554, 1), + (941, 839, 844, 'OP_EqHearHealCmd', 555, 1), + (942, 839, 844, 'OP_EqChatChannelUpdateCmd', 556, 1), + (943, 839, 844, 'OP_EqWhoChannelQueryReplyCmd', 557, 1), + (944, 839, 844, 'OP_EqAvailWorldChannelsCmd', 558, 1), + (945, 839, 844, 'OP_EqUpdateTargetCmd', 559, 1), + (946, 839, 844, 'OP_EqConsignmentItemsCmd', 561, 1), + (947, 839, 844, 'OP_EqStartBrokerCmd', 563, 1), + (948, 839, 844, 'OP_EqMapExplorationCmd', 564, 1), + (949, 839, 844, 'OP_EqStoreLogCmd', 565, 1), + (950, 839, 844, 'OP_EqSpellMoveToRangeAndRetryCmd', 566, 1), + (951, 839, 844, 'OP_EqUpdatePlayerMailCmd', 567, 1), + (952, 839, 844, 'OP_EqArenaResultsCmd', 568, 1), + (953, 839, 844, 'OP_EqGuildBankEventActionCmd', 569, 1), + (954, 839, 844, 'OP_EqGuildBankExamineInfoCmd', 570, 1), + (955, 839, 844, 'OP_EqHearSpellNoLandCmd', 571, 1), + (956, 839, 844, 'OP_Lottery', 572, 1), + (957, 839, 844, 'OP_GuildRecruitingMemberInfo', 573, 1), + (958, 839, 844, 'OP_GuildRecruiting', 574, 1), + (959, 839, 844, 'OP_GuildRecruitingDetails', 575, 1), + (960, 839, 844, 'OP_GuildRecruitingImage', 576, 1), + (961, 839, 844, 'OP_PointOfInterest', 597, 1), + (962, 839, 844, 'OP_TraitsList', 599, 1), + (963, 839, 844, 'OP_RecipeList', 608, 1), + (964, 839, 844, 'OP_CharacterAchievements', 655, 1), + (965, 839, 844, 'OP_AddClientToGroupMsg', 999, 1), + (966, 839, 844, 'OP_AddGroupToGroupMsg', 999, 1), + (967, 839, 844, 'OP_GuildKickMsg', 999, 1), + (968, 839, 844, 'OP_PurchaseConsignmentResponseMsg', 999, 1), + (969, 839, 844, 'OP_ProcessScriptMsg', 999, 1), + (970, 839, 844, 'OP_ProcessWorkspaceMsg', 999, 1), + (971, 839, 844, 'OP_QuickbarAddMsg', 999, 1), + (972, 839, 844, 'OP_SkillSlotMapping', 999, 1), + (973, 839, 844, 'OP_MapRequest', 999, 1), + (974, 839, 844, 'OP_BadLanguageFilter', 999, 1), + (975, 839, 844, 'OP_Unknown', 10000, 1), + (976, 839, 844, 'OP_WSWeatherUpdateMsg', 10012, 1), + (977, 908, 927, 'OP_LoginRequestMsg', 0, 1), + (978, 908, 927, 'OP_LoginByNumRequestMsg', 1, 1), + (979, 908, 927, 'OP_WSLoginRequestMsg', 2, 1), + (980, 908, 927, 'OP_ESLoginRequestMsg', 3, 1), + (981, 908, 927, 'OP_LoginReplyMsg', 4, 1), + (982, 908, 927, 'OP_WSStatusReplyMsg', 5, 1), + (983, 908, 927, 'OP_WorldStatusChangeMsg', 6, 1), + (984, 908, 927, 'OP_AllWSDescRequestMsg', 7, 1), + (985, 908, 927, 'OP_WorldListMsg', 8, 1), + (986, 908, 927, 'OP_AllCharactersDescRequestMsg', 9, 1), + (987, 908, 927, 'OP_AllCharactersDescReplyMsg', 10, 1), + (988, 908, 927, 'OP_CreateCharacterRequestMsg', 11, 1), + (989, 908, 927, 'OP_CreateCharacterReplyMsg', 12, 1), + (990, 908, 927, 'OP_WSCreateCharacterRequestMsg', 13, 1), + (991, 908, 927, 'OP_WSCreateCharacterReplyMsg', 14, 1), + (992, 908, 927, 'OP_ReskinCharacterRequestMsg', 15, 1), + (993, 908, 927, 'OP_DeleteCharacterRequestMsg', 16, 1), + (994, 908, 927, 'OP_DeleteCharacterReplyMsg', 17, 1), + (995, 908, 927, 'OP_PlayCharacterRequestMsg', 18, 1), + (996, 908, 927, 'OP_PlayCharacterReplyMsg', 19, 1), + (997, 908, 927, 'OP_ExpectClientAsCharacterReplyMs', 22, 1), + (998, 908, 927, 'OP_ServerPlayCharacterRequestMsg', 23, 1), + (999, 908, 927, 'OP_ServerPlayCharacterReplyMsg', 24, 1), + (1000, 908, 927, 'OP_ESInitMsg', 25, 1), + (1001, 908, 927, 'OP_ESReadyForClientsMsg', 26, 1), + (1002, 908, 927, 'OP_CreateZoneInstanceMsg', 27, 1), + (1003, 908, 927, 'OP_ZoneInstanceCreateReplyMsg', 28, 1), + (1004, 908, 927, 'OP_ZoneInstanceDestroyedMsg', 29, 1), + (1005, 908, 927, 'OP_ExpectClientAsCharacterRequest', 30, 1), + (1006, 908, 927, 'OP_ZoneInfoMsg', 31, 1), + (1007, 908, 927, 'OP_DoneLoadingZoneResourcesMsg', 32, 1), + (1008, 908, 927, 'OP_DoneSendingInitialEntitiesMsg', 33, 1), + (1009, 908, 927, 'OP_DoneLoadingEntityResourcesMsg', 34, 1), + (1010, 908, 927, 'OP_PredictionUpdateMsg', 35, 1), + (1011, 908, 927, 'OP_UpdatePositionMsg', 37, 1), + (1012, 908, 927, 'OP_SetRemoteCmdsMsg', 39, 1), + (1013, 908, 927, 'OP_RemoteCmdMsg', 40, 1), + (1014, 908, 927, 'OP_GameWorldTimeMsg', 41, 1), + (1015, 908, 927, 'OP_MOTDMsg', 42, 1), + (1016, 908, 927, 'OP_ZoneMOTDMsg', 43, 1), + (1017, 908, 927, 'OP_AvatarCreatedMsg', 44, 1), + (1018, 908, 927, 'OP_AvatarDestroyedMsg', 45, 1), + (1019, 908, 927, 'OP_RequestCampMsg', 47, 1), + (1020, 908, 927, 'OP_CampStartedMsg', 48, 1), + (1021, 908, 927, 'OP_CampAbortedMsg', 49, 1), + (1022, 908, 927, 'OP_WhoQueryRequestMsg', 50, 1), + (1023, 908, 927, 'OP_WhoQueryReplyMsg', 51, 1), + (1024, 908, 927, 'OP_MonitorReplyMsg', 52, 1), + (1025, 908, 927, 'OP_MonitorCharacterListMsg', 53, 1), + (1026, 908, 927, 'OP_MonitorCharacterListRequestMsg', 54, 1), + (1027, 908, 927, 'OP_ClientCmdMsg', 55, 1), + (1028, 908, 927, 'OP_DispatchESMsg', 56, 1), + (1029, 908, 927, 'OP_DispatchClientCmdMsg', 57, 1), + (1030, 908, 927, 'OP_UpdateTargetMsg', 58, 1), + (1031, 908, 927, 'OP_UpdateTargetLocMsg', 59, 1), + (1032, 908, 927, 'OP_UpdateCharacterSheetMsg', 60, 1), + (1033, 908, 927, 'OP_UpdateSpellBookMsg', 61, 1), + (1034, 908, 927, 'OP_UpdateInventoryMsg', 63, 1), + (1035, 908, 927, 'OP_UpdateRecipeBookMsg', 65, 1), + (1036, 908, 927, 'OP_RequestRecipeDetailsMsg', 66, 1), + (1037, 908, 927, 'OP_RecipeDetailsMsg', 67, 1), + (1038, 908, 927, 'OP_UpdateSkillBookMsg', 68, 1), + (1039, 908, 927, 'OP_UpdateSkillsMsg', 69, 1), + (1040, 908, 927, 'OP_UpdateOpportunityMsg', 70, 1), + (1041, 908, 927, 'OP_ChangeZoneMsg', 72, 1), + (1042, 908, 927, 'OP_ClientTeleportRequestMsg', 73, 1), + (1043, 908, 927, 'OP_TeleportWithinZoneMsg', 74, 1), + (1044, 908, 927, 'OP_TeleportWithinZoneNoReloadMsg', 75, 1), + (1045, 908, 927, 'OP_MigrateClientToZoneRequestMsg', 76, 1), + (1046, 908, 927, 'OP_MigrateClientToZoneReplyMsg', 77, 1), + (1047, 908, 927, 'OP_ReadyToZoneMsg', 78, 1), + (1048, 908, 927, 'OP_RemoveClientFromGroupMsg', 79, 1), + (1049, 908, 927, 'OP_RemoveGroupFromGroupMsg', 80, 1), + (1050, 908, 927, 'OP_MakeGroupLeaderMsg', 81, 1), + (1051, 908, 927, 'OP_GroupCreatedMsg', 82, 1), + (1052, 908, 927, 'OP_GroupDestroyedMsg', 83, 1), + (1053, 908, 927, 'OP_GroupMemberAddedMsg', 84, 1), + (1054, 908, 927, 'OP_GroupMemberRemovedMsg', 85, 1), + (1055, 908, 927, 'OP_GroupRemovedFromGroupMsg', 86, 1), + (1056, 908, 927, 'OP_GroupLeaderChangedMsg', 87, 1), + (1057, 908, 927, 'OP_GroupResendOOZDataMsg', 88, 1), + (1058, 908, 927, 'OP_GroupSettingsChangedMsg', 89, 1), + (1059, 908, 927, 'OP_OutOfZoneMemberDataMsg', 90, 1), + (1060, 908, 927, 'OP_SendLatestRequestMsg', 91, 1), + (1061, 908, 927, 'OP_ClearDataMsg', 92, 1), + (1062, 908, 927, 'OP_SetSocialMsg', 93, 1), + (1063, 908, 927, 'OP_ESStatusMsg', 94, 1), + (1064, 908, 927, 'OP_ESZoneInstanceStatusMsg', 95, 1), + (1065, 908, 927, 'OP_ZonesStatusRequestMsg', 96, 1), + (1066, 908, 927, 'OP_ZonesStatusMsg', 97, 1), + (1067, 908, 927, 'OP_ESWeatherRequestMsg', 98, 1), + (1068, 908, 927, 'OP_ESWeatherRequestEndMsg', 99, 1), + (1069, 908, 927, 'OP_DialogSelectMsg', 102, 1), + (1070, 908, 927, 'OP_DialogCloseMsg', 103, 1), + (1071, 908, 927, 'OP_RemoveSpellEffectMsg', 104, 1), + (1072, 908, 927, 'OP_RemoveConcentrationMsg', 105, 1), + (1073, 908, 927, 'OP_QuestJournalOpenMsg', 106, 1), + (1074, 908, 927, 'OP_QuestJournalInspectMsg', 107, 1), + (1075, 908, 927, 'OP_QuestJournalSetVisibleMsg', 108, 1), + (1076, 908, 927, 'OP_QuestJournalWaypointMsg', 109, 1), + (1077, 908, 927, 'OP_CreateGuildRequestMsg', 110, 1), + (1078, 908, 927, 'OP_CreateGuildReplyMsg', 111, 1), + (1079, 908, 927, 'OP_GuildsayMsg', 112, 1), + (1080, 908, 927, 'OP_GuildUpdateMsg', 115, 1), + (1081, 908, 927, 'OP_DeleteGuildMsg', 116, 1), + (1082, 908, 927, 'OP_FellowshipExpMsg', 117, 1), + (1083, 908, 927, 'OP_ConsignmentCloseStoreMsg', 118, 1), + (1084, 908, 927, 'OP_ConsignItemRequestMsg', 119, 1), + (1085, 908, 927, 'OP_ConsignItemResponseMsg', 120, 1), + (1086, 908, 927, 'OP_PurchaseConsignmentRequestMsg', 121, 1), + (1087, 908, 927, 'OP_HouseDeletedRemotelyMsg', 122, 1), + (1088, 908, 927, 'OP_UpdateHouseDataMsg', 123, 1), + (1089, 908, 927, 'OP_UpdateHouseAccessDataMsg', 124, 1), + (1090, 908, 927, 'OP_PlayerHouseBaseScreenMsg', 125, 1), + (1091, 908, 927, 'OP_PlayerHousePurchaseScreenMsg', 126, 1), + (1092, 908, 927, 'OP_PlayerHouseAccessUpdateMsg', 127, 1), + (1093, 908, 927, 'OP_PlayerHouseDisplayStatusMsg', 128, 1), + (1094, 908, 927, 'OP_PlayerHouseCloseUIMsg', 129, 1), + (1095, 908, 927, 'OP_BuyPlayerHouseMsg', 130, 1), + (1096, 908, 927, 'OP_BuyPlayerHouseTintMsg', 131, 1), + (1097, 908, 927, 'OP_CollectAllHouseItemsMsg', 132, 1), + (1098, 908, 927, 'OP_RelinquishHouseMsg', 133, 1), + (1099, 908, 927, 'OP_EnterHouseMsg', 134, 1), + (1100, 908, 927, 'OP_ExitHouseMsg', 135, 1), + (1101, 908, 927, 'OP_HouseDefaultAccessSetMsg', 136, 1), + (1102, 908, 927, 'OP_HouseAccessSetMsg', 137, 1), + (1103, 908, 927, 'OP_HouseAccessRemoveMsg', 138, 1), + (1104, 908, 927, 'OP_PayHouseUpkeepMsg', 139, 1), + (1105, 908, 927, 'OP_MoveableObjectPlacementCriteri', 141, 1), + (1106, 908, 927, 'OP_EnterMoveObjectModeMsg', 142, 1), + (1107, 908, 927, 'OP_PositionMoveableObject', 143, 1), + (1108, 908, 927, 'OP_CancelMoveObjectModeMsg', 144, 1), + (1109, 908, 927, 'OP_ShaderCustomizationMsg', 145, 1), + (1110, 908, 927, 'OP_ReplaceableSubMeshesMsg', 146, 1), + (1111, 908, 927, 'OP_HouseCustomizationScreenMsg', 147, 1), + (1112, 908, 927, 'OP_CustomizationPurchaseRequestMs', 148, 1), + (1113, 908, 927, 'OP_CustomizationSetRequestMsg', 149, 1), + (1114, 908, 927, 'OP_CustomizationReplyMsg', 150, 1), + (1115, 908, 927, 'OP_TintWidgetsMsg', 151, 1), + (1116, 908, 927, 'OP_ExamineConsignmentRequestMsg', 152, 1), + (1117, 908, 927, 'OP_ExamineConsignmentResponseMsg', 153, 1), + (1118, 908, 927, 'OP_UISettingsResponseMsg', 154, 1), + (1119, 908, 927, 'OP_UIResetMsg', 155, 1), + (1120, 908, 927, 'OP_KeymapLoadMsg', 156, 1), + (1121, 908, 927, 'OP_KeymapNoneMsg', 157, 1), + (1122, 908, 927, 'OP_KeymapDataMsg', 158, 1), + (1123, 908, 927, 'OP_KeymapSaveMsg', 159, 1), + (1124, 908, 927, 'OP_DispatchSpellCmdMsg', 160, 1), + (1125, 908, 927, 'OP_EntityVerbsRequestMsg', 162, 1), + (1126, 908, 927, 'OP_EntityVerbsReplyMsg', 163, 1), + (1127, 908, 927, 'OP_EntityVerbsVerbMsg', 164, 1), + (1128, 908, 927, 'OP_ChatRelationshipUpdateMsg', 166, 1), + (1129, 908, 927, 'OP_LootItemsRequestMsg', 167, 1), + (1130, 908, 927, 'OP_StoppedLootingMsg', 168, 1), + (1131, 908, 927, 'OP_SitMsg', 169, 1), + (1132, 908, 927, 'OP_StandMsg', 170, 1), + (1133, 908, 927, 'OP_SatMsg', 171, 1), + (1134, 908, 927, 'OP_StoodMsg', 172, 1), + (1135, 908, 927, 'OP_ClearForTakeOffMsg', 173, 1), + (1136, 908, 927, 'OP_ReadyForTakeOffMsg', 174, 1), + (1137, 908, 927, 'OP_ShowIllusionsMsg', 175, 1), + (1138, 908, 927, 'OP_HideIllusionsMsg', 176, 1), + (1139, 908, 927, 'OP_ExamineItemRequestMsg', 177, 1), + (1140, 908, 927, 'OP_ReadBookPageMsg', 178, 1), + (1141, 908, 927, 'OP_DefaultGroupOptionsRequestMsg', 179, 1), + (1142, 908, 927, 'OP_DefaultGroupOptionsMsg', 180, 1), + (1143, 908, 927, 'OP_GroupOptionsMsg', 181, 1), + (1144, 908, 927, 'OP_DisplayGroupOptionsScreenMsg', 182, 1), + (1145, 908, 927, 'OP_DisplayInnVisitScreenMsg', 183, 1), + (1146, 908, 927, 'OP_DumpSchedulerMsg', 184, 1), + (1147, 908, 927, 'OP_LSRequestPlayerDescMsg', 185, 1), + (1148, 908, 927, 'OP_LSCheckAcctLockMsg', 186, 1), + (1149, 908, 927, 'OP_WSAcctLockStatusMsg', 187, 1), + (1150, 908, 927, 'OP_RequestHelpRepathMsg', 188, 1), + (1151, 908, 927, 'OP_RequestTargetLocMsg', 189, 1), + (1152, 908, 927, 'OP_UpdateMotdMsg', 190, 1), + (1153, 908, 927, 'OP_PerformPlayerKnockbackMsg', 191, 1), + (1154, 908, 927, 'OP_PerformCameraShakeMsg', 192, 1), + (1155, 908, 927, 'OP_PopulateSkillMapsMsg', 195, 1), + (1156, 908, 927, 'OP_CancelledFeignMsg', 197, 1), + (1157, 908, 927, 'OP_SignalMsg', 198, 1), + (1158, 908, 927, 'OP_ShowCreateFromRecipeUIMsg', 199, 1), + (1159, 908, 927, 'OP_CancelCreateFromRecipeMsg', 200, 1), + (1160, 908, 927, 'OP_BeginItemCreationMsg', 201, 1), + (1161, 908, 927, 'OP_StopItemCreationMsg', 202, 1), + (1162, 908, 927, 'OP_ShowItemCreationProcessUIMsg', 203, 1), + (1163, 908, 927, 'OP_UpdateItemCreationProcessUIMsg', 204, 1), + (1164, 908, 927, 'OP_DisplayTSEventReactionMsg', 205, 1), + (1165, 908, 927, 'OP_ShowRecipeBookMsg', 206, 1), + (1166, 908, 927, 'OP_KnowledgebaseRequestMsg', 207, 1), + (1167, 908, 927, 'OP_KnowledgebaseResponseMsg', 208, 1), + (1168, 908, 927, 'OP_CSTicketHeaderRequestMsg', 209, 1), + (1169, 908, 927, 'OP_CSTicketInfoMsg', 210, 1), + (1170, 908, 927, 'OP_CSTicketCommentRequestMsg', 211, 1), + (1171, 908, 927, 'OP_CSTicketCommentResponseMsg', 212, 1), + (1172, 908, 927, 'OP_CSTicketCreateMsg', 213, 1), + (1173, 908, 927, 'OP_CSTicketAddCommentMsg', 214, 1), + (1174, 908, 927, 'OP_CSTicketDeleteMsg', 215, 1), + (1175, 908, 927, 'OP_CSTicketChangeNotificationMsg', 216, 1), + (1176, 908, 927, 'OP_WorldDataUpdateMsg', 217, 1), + (1177, 908, 927, 'OP_KnownLanguagesMsg', 218, 1), + (1178, 908, 927, 'OP_LsRequestClientCrashLogMsg', 219, 1), + (1179, 908, 927, 'OP_LsClientBaselogReplyMsg', 220, 1), + (1180, 908, 927, 'OP_LsClientCrashlogReplyMsg', 221, 1), + (1181, 908, 927, 'OP_LsClientAlertlogReplyMsg', 222, 1), + (1182, 908, 927, 'OP_LsClientVerifylogReplyMsg', 223, 1), + (1183, 908, 927, 'OP_ClientTeleportToLocationMsg', 224, 1), + (1184, 908, 927, 'OP_UpdateClientPredFlagsMsg', 225, 1), + (1185, 908, 927, 'OP_ChangeServerControlFlagMsg', 226, 1), + (1186, 908, 927, 'OP_CSToolsRequestMsg', 227, 1), + (1187, 908, 927, 'OP_CSToolsResponseMsg', 228, 1), + (1188, 908, 927, 'OP_AddSocialStructureStandingMsg', 229, 1), + (1189, 908, 927, 'OP_CreateBoatTransportsMsg', 230, 1), + (1190, 908, 927, 'OP_PositionBoatTransportMsg', 231, 1), + (1191, 908, 927, 'OP_MigrateBoatTransportMsg', 232, 1), + (1192, 908, 927, 'OP_MigrateBoatTransportReplyMsg', 233, 1), + (1193, 908, 927, 'OP_DisplayDebugNLLPointsMsg', 234, 1), + (1194, 908, 927, 'OP_ExamineInfoRequestMsg', 235, 1), + (1195, 908, 927, 'OP_QuickbarInitMsg', 236, 1), + (1196, 908, 927, 'OP_QuickbarUpdateMsg', 237, 1), + (1197, 908, 927, 'OP_MacroInitMsg', 238, 1), + (1198, 908, 927, 'OP_MacroUpdateMsg', 239, 1), + (1199, 908, 927, 'OP_QuestionnaireMsg', 240, 1), + (1200, 908, 927, 'OP_LevelChangedMsg', 241, 1), + (1201, 908, 927, 'OP_SpellGainedMsg', 242, 1), + (1202, 908, 927, 'OP_EncounterBrokenMsg', 243, 1), + (1203, 908, 927, 'OP_OnscreenMsgMsg', 244, 1), + (1204, 908, 927, 'OP_DisplayWarningMsg', 245, 1), + (1205, 908, 927, 'OP_ModifyGuildMsg', 246, 1), + (1206, 908, 927, 'OP_GuildEventMsg', 247, 1), + (1207, 908, 927, 'OP_GuildEventAddMsg', 248, 1), + (1208, 908, 927, 'OP_GuildEventActionMsg', 249, 1), + (1209, 908, 927, 'OP_GuildEventListMsg', 250, 1), + (1210, 908, 927, 'OP_RequestGuildEventDetailsMsg', 251, 1), + (1211, 908, 927, 'OP_GuildEventDetailsMsg', 252, 1), + (1212, 908, 927, 'OP_RequestGuildInfoMsg', 253, 1), + (1213, 908, 927, 'OP_GuildBankActionMsg', 254, 1), + (1214, 908, 927, 'OP_GuildBankActionResponseMsg', 255, 1), + (1215, 908, 927, 'OP_GuildBankItemDetailsRequestMsg', 256, 1), + (1216, 908, 927, 'OP_GuildBankItemDetailsResponseMs', 257, 1), + (1217, 908, 927, 'OP_GuildBankUpdateMsg', 258, 1), + (1218, 908, 927, 'OP_GuildBankEventListMsg', 259, 1), + (1219, 908, 927, 'OP_RequestGuildBankEventDetailsMs', 260, 1), + (1220, 908, 927, 'OP_RewardPackMsg', 261, 1), + (1221, 908, 927, 'OP_RenameGuildMsg', 262, 1), + (1222, 908, 927, 'OP_ZoneToFriendRequestMsg', 264, 1), + (1223, 908, 927, 'OP_ZoneToFriendReplyMsg', 265, 1), + (1224, 908, 927, 'OP_ChatCreateChannelMsg', 266, 1), + (1225, 908, 927, 'OP_ChatJoinChannelMsg', 267, 1), + (1226, 908, 927, 'OP_ChatWhoChannelMsg', 268, 1), + (1227, 908, 927, 'OP_ChatLeaveChannelMsg', 269, 1), + (1228, 908, 927, 'OP_ChatTellChannelMsg', 270, 1), + (1229, 908, 927, 'OP_ChatTellUserMsg', 271, 1), + (1230, 908, 927, 'OP_ChatToggleFriendMsg', 272, 1), + (1231, 908, 927, 'OP_ChatToggleIgnoreMsg', 273, 1), + (1232, 908, 927, 'OP_ChatSendFriendsMsg', 274, 1), + (1233, 908, 927, 'OP_ChatSendIgnoresMsg', 275, 1), + (1234, 908, 927, 'OP_QuestReward', 302, 1), + (1235, 908, 927, 'OP_ChatFiltersMsg', 317, 1), + (1236, 908, 927, 'OP_MailGetHeadersMsg', 318, 1), + (1237, 908, 927, 'OP_MailGetMessageMsg', 319, 1), + (1238, 908, 927, 'OP_MailSendMessageMsg', 320, 1), + (1239, 908, 927, 'OP_MailDeleteMessageMsg', 321, 1), + (1240, 908, 927, 'OP_MailGetHeadersReplyMsg', 322, 1), + (1241, 908, 927, 'OP_MailGetMessageReplyMsg', 323, 1), + (1242, 908, 927, 'OP_MailSendMessageReplyMsg', 324, 1), + (1243, 908, 927, 'OP_MailCommitSendMessageMsg', 325, 1), + (1244, 908, 927, 'OP_MailSendSystemMessageMsg', 326, 1), + (1245, 908, 927, 'OP_MailRemoveAttachFromMailMsg', 327, 1), + (1246, 908, 927, 'OP_WaypointRequestMsg', 329, 1), + (1247, 908, 927, 'OP_WaypointReplyMsg', 330, 1), + (1248, 908, 927, 'OP_WaypointSelectMsg', 331, 1), + (1249, 908, 927, 'OP_WaypointUpdateMsg', 332, 1), + (1250, 908, 927, 'OP_CharNameChangedMsg', 333, 1), + (1251, 908, 927, 'OP_ShowZoneTeleporterDestinations', 334, 1), + (1252, 908, 927, 'OP_SelectZoneTeleporterDestinatio', 335, 1), + (1253, 908, 927, 'OP_ReloadLocalizedTxtMsg', 336, 1), + (1254, 908, 927, 'OP_RequestGuildMembershipMsg', 337, 1), + (1255, 908, 927, 'OP_GuildMembershipResponseMsg', 338, 1), + (1256, 908, 927, 'OP_LeaveGuildNotifyMsg', 339, 1), + (1257, 908, 927, 'OP_JoinGuildNotifyMsg', 340, 1), + (1258, 908, 927, 'OP_AvatarUpdateMsg', 342, 1), + (1259, 908, 927, 'OP_BioUpdateMsg', 343, 1), + (1260, 908, 927, 'OP_InspectPlayerMsg', 344, 1), + (1261, 908, 927, 'OP_WSServerLockMsg', 345, 1), + (1262, 908, 927, 'OP_LSServerLockMsg', 346, 1), + (1263, 908, 927, 'OP_WSServerHideMsg', 347, 1), + (1264, 908, 927, 'OP_CsCategoryRequestMsg', 348, 1), + (1265, 908, 927, 'OP_CsCategoryResponseMsg', 349, 1), + (1266, 908, 927, 'OP_KnowledgeWindowSlotMappingMsg', 350, 1), + (1267, 908, 927, 'OP_LFGUpdateMsg', 351, 1), + (1268, 908, 927, 'OP_AFKUpdateMsg', 352, 1), + (1269, 908, 927, 'OP_AnonUpdateMsg', 353, 1), + (1270, 908, 927, 'OP_UpdateActivePublicZonesMsg', 354, 1), + (1271, 908, 927, 'OP_UnknownNpcMsg', 355, 1), + (1272, 908, 927, 'OP_PromoFlagsDetailsMsg', 356, 1), + (1273, 908, 927, 'OP_ConsignViewCreateMsg', 357, 1), + (1274, 908, 927, 'OP_ConsignViewGetPageMsg', 358, 1), + (1275, 908, 927, 'OP_ConsignViewReleaseMsg', 359, 1), + (1276, 908, 927, 'OP_ConsignRemoveItemsMsg', 360, 1), + (1277, 908, 927, 'OP_UpdateDebugRadiiMsg', 361, 1), + (1278, 908, 927, 'OP_SnoopMsg', 362, 1), + (1279, 908, 927, 'OP_ReportMsg', 363, 1), + (1280, 908, 927, 'OP_UpdateRaidMsg', 364, 1), + (1281, 908, 927, 'OP_ConsignViewSortMsg', 365, 1), + (1282, 908, 927, 'OP_TitleUpdateMsg', 366, 1), + (1283, 908, 927, 'OP_ClientFellMsg', 367, 1), + (1284, 908, 927, 'OP_ClientInDeathRegionMsg', 368, 1), + (1285, 908, 927, 'OP_CampClientMsg', 369, 1), + (1286, 908, 927, 'OP_CSToolAccessResponseMsg', 370, 1), + (1287, 908, 927, 'OP_TrackingUpdateMsg', 371, 1), + (1288, 908, 927, 'OP_BeginTrackingMsg', 372, 1), + (1289, 908, 927, 'OP_StopTrackingMsg', 373, 1), + (1290, 908, 927, 'OP_GetAvatarAccessRequestForCSToo', 374, 1), + (1291, 908, 927, 'OP_AdvancementRequestMsg', 375, 1), + (1292, 908, 927, 'OP_UpdateAvgFrameTimeMsg', 376, 1), + (1293, 908, 927, 'OP_MapFogDataInitMsg', 377, 1), + (1294, 908, 927, 'OP_MapFogDataUpdateMsg', 378, 1), + (1295, 908, 927, 'OP_CloseGroupInviteWindowMsg', 379, 1), + (1296, 908, 927, 'OP_UpdateGroupMemberDataMsg', 380, 1), + (1297, 908, 927, 'OP_WorldPingMsg', 381, 1), + (1298, 908, 927, 'OP_MoveLogUpdateMsg', 382, 1), + (1299, 908, 927, 'OP_OfferQuestMsg', 383, 1), + (1300, 908, 927, 'OP_WorldShutdownUpdateMsg', 384, 1), + (1301, 908, 927, 'OP_DisplayMailScreenMsg', 385, 1), + (1302, 908, 927, 'OP_ClientIdleBeginMsg', 386, 1), + (1303, 908, 927, 'OP_ClientIdleEndMsg', 387, 1), + (1304, 908, 927, 'OP_PurchaseConsignmentLoreCheckRe', 388, 1), + (1305, 908, 927, 'OP_NotifyApprenticeStoppedMentori', 389, 1), + (1306, 908, 927, 'OP_CorruptedClientMsg', 390, 1), + (1307, 908, 927, 'OP_WorldDataChangeMsg', 391, 1), + (1308, 908, 927, 'OP_MailEventNotificationMsg', 392, 1), + (1309, 908, 927, 'OP_RestartZoneMsg', 393, 1), + (1310, 908, 927, 'OP_FlightPathsMsg', 394, 1), + (1311, 908, 927, 'OP_CharacterLinkdeadMsg', 395, 1), + (1312, 908, 927, 'OP_CharTransferStartRequestMsg', 396, 1), + (1313, 908, 927, 'OP_CharTransferStartReplyMsg', 397, 1), + (1314, 908, 927, 'OP_CharTransferRequestMsg', 398, 1), + (1315, 908, 927, 'OP_CharTransferReplyMsg', 399, 1), + (1316, 908, 927, 'OP_CharTransferRollbackRequestMsg', 400, 1), + (1317, 908, 927, 'OP_CharTransferCommitRequestMsg', 401, 1), + (1318, 908, 927, 'OP_CharTransferRollbackReplyMsg', 402, 1), + (1319, 908, 927, 'OP_CharTransferCommitReplyMsg', 403, 1), + (1320, 908, 927, 'OP_GetCharacterSerializedRequestM', 404, 1), + (1321, 908, 927, 'OP_GetCharacterSerializedReplyMsg', 405, 1), + (1322, 908, 927, 'OP_CreateCharFromCBBRequestMsg', 406, 1), + (1323, 908, 927, 'OP_CreateCharFromCBBReplyMsg', 407, 1), + (1324, 908, 927, 'OP_HousingDataChangedMsg', 408, 1), + (1325, 908, 927, 'OP_HousingRestoreMsg', 409, 1), + (1326, 908, 927, 'OP_AuctionItem', 410, 1), + (1327, 908, 927, 'OP_AuctionItemReply', 411, 1), + (1328, 908, 927, 'OP_AuctionCoin', 412, 1), + (1329, 908, 927, 'OP_AuctionCoinReply', 413, 1), + (1330, 908, 927, 'OP_AuctionCharacter', 414, 1), + (1331, 908, 927, 'OP_AuctionCharacterReply', 415, 1), + (1332, 908, 927, 'OP_AuctionCommitMsg', 416, 1), + (1333, 908, 927, 'OP_AuctionAbortMsg', 417, 1), + (1334, 908, 927, 'OP_CharTransferValidateRequestMsg', 418, 1), + (1335, 908, 927, 'OP_CharTransferValidateReplyMsg', 419, 1), + (1336, 908, 927, 'OP_RaceRestrictionMsg', 420, 1), + (1337, 908, 927, 'OP_SetInstanceDisplayNameMsg', 421, 1), + (1338, 908, 927, 'OP_GetAuctionAssetIDMsg', 422, 1), + (1339, 908, 927, 'OP_GetAuctionAssetIDReplyMsg', 423, 1), + (1340, 908, 927, 'OP_ResendWorldChannelsMsg', 424, 1), + (1341, 908, 927, 'OP_DisplayExchangeScreenMsg', 425, 1), + (1342, 908, 927, 'OP_ArenaGameTypesMsg', 426, 1), + (1343, 908, 927, 'OP_AuditAuctionEventMsg', 428, 1), + (1344, 908, 927, 'OP_InviteRequestMsg', 430, 1), + (1345, 908, 927, 'OP_InviteResponseMsg', 431, 1), + (1346, 908, 927, 'OP_InviteTargetResponseMsg', 432, 1), + (1347, 908, 927, 'OP_InspectPlayerRequestMsg', 433, 1), + (1348, 908, 927, 'OP_DispatchMsg', 434, 1), + (1349, 908, 927, 'OP_DisplayEventMsg', 435, 1), + (1350, 908, 927, 'OP_PrePossessionMsg', 436, 1), + (1351, 908, 927, 'OP_PostPossessionMsg', 437, 1), + (1352, 908, 927, 'OP_AdventureList', 462, 1), + (1353, 908, 927, 'OP_CancelSpellCast', 463, 1), + (1354, 908, 927, 'OP_UpdateTitleCmd', 469, 1), + (1355, 908, 927, 'OP_AttackAllowed', 475, 1), + (1356, 908, 927, 'OP_AttackNotAllowed', 476, 1), + (1357, 908, 927, 'OP_DressingRoom', 482, 1), + (1358, 908, 927, 'OP_SkillInfoRequest', 486, 1), + (1359, 908, 927, 'OP_SkillInfoResponse', 487, 1), + (1360, 908, 927, 'OP_BadLanguageFilter', 490, 1), + (1361, 908, 927, 'OP_MapRequest', 492, 1), + (1362, 908, 927, 'OP_EqUnknown', 493, 1), + (1363, 908, 927, 'OP_EqHearChatCmd', 494, 1), + (1364, 908, 927, 'OP_EqDisplayTextCmd', 495, 1), + (1365, 908, 927, 'OP_EqCreateGhostCmd', 496, 1), + (1366, 908, 927, 'OP_EqCreateWidgetCmd', 497, 1), + (1367, 908, 927, 'OP_EqCreateSignWidgetCmd', 498, 1), + (1368, 908, 927, 'OP_EqDestroyGhostCmd', 499, 1), + (1369, 908, 927, 'OP_EqUpdateGhostCmd', 500, 1), + (1370, 908, 927, 'OP_EqSetControlGhostCmd', 501, 1), + (1371, 908, 927, 'OP_EqSetPOVGhostCmd', 502, 1), + (1372, 908, 927, 'OP_EqHearCombatCmd', 503, 1), + (1373, 908, 927, 'OP_EqHearSpellCastCmd', 504, 1), + (1374, 908, 927, 'OP_EqHearSpellInterruptCmd', 507, 1), + (1375, 908, 927, 'OP_EqHearSpellFizzleCmd', 508, 1), + (1376, 908, 927, 'OP_EqHearConsiderCmd', 509, 1), + (1377, 908, 927, 'OP_EqUpdateSubClassesCmd', 510, 1), + (1378, 908, 927, 'OP_EqCreateListBoxCmd', 511, 1), + (1379, 908, 927, 'OP_EqSetDebugPathPointsCmd', 512, 1), + (1380, 908, 927, 'OP_EqCannedEmoteCmd', 514, 1), + (1381, 908, 927, 'OP_EqStateCmd', 515, 1), + (1382, 908, 927, 'OP_EqPlaySoundCmd', 516, 1), + (1383, 908, 927, 'OP_EqPlaySound3DCmd', 517, 1), + (1384, 908, 927, 'OP_EqPlayVoiceCmd', 518, 1), + (1385, 908, 927, 'OP_EqHearDrowningCmd', 519, 1), + (1386, 908, 927, 'OP_EqHearDeathCmd', 520, 1), + (1387, 908, 927, 'OP_EqGroupMemberRemovedCmd', 521, 1), + (1388, 908, 927, 'OP_EqHearChainEffectCmd', 522, 1), + (1389, 908, 927, 'OP_EqReceiveOfferCmd', 523, 1), + (1390, 908, 927, 'OP_EqInspectPCResultsCmd', 524, 1), + (1391, 908, 927, 'OP_EqDrawablePathGraphCmd', 525, 1), + (1392, 908, 927, 'OP_EqDialogOpenCmd', 526, 1), + (1393, 908, 927, 'OP_EqDialogCloseCmd', 527, 1), + (1394, 908, 927, 'OP_EqFactionUpdateCmd', 528, 1), + (1395, 908, 927, 'OP_EqCollectionUpdateCmd', 529, 1), + (1396, 908, 927, 'OP_EqCollectionFilterCmd', 530, 1), + (1397, 908, 927, 'OP_EqCollectionItemCmd', 531, 1), + (1398, 908, 927, 'OP_EqQuestJournalUpdateCmd', 532, 1), + (1399, 908, 927, 'OP_EqQuestJournalReplyCmd', 534, 1), + (1400, 908, 927, 'OP_EqQuestGroupCmd', 535, 1), + (1401, 908, 927, 'OP_EqUpdateMerchantCmd', 536, 1), + (1402, 908, 927, 'OP_EqUpdateStoreCmd', 537, 1), + (1403, 908, 927, 'OP_EqUpdatePlayerTradeCmd', 538, 1), + (1404, 908, 927, 'OP_EqHelpPathCmd', 539, 1), + (1405, 908, 927, 'OP_EqHelpPathClearCmd', 540, 1), + (1406, 908, 927, 'OP_EqUpdateBankCmd', 541, 1), + (1407, 908, 927, 'OP_EqExamineInfoCmd', 542, 1), + (1408, 908, 927, 'OP_EqCloseWindowCmd', 543, 1), + (1409, 908, 927, 'OP_EqUpdateLootCmd', 544, 1), + (1410, 908, 927, 'OP_EqJunctionListCmd', 545, 1), + (1411, 908, 927, 'OP_EqShowDeathWindowCmd', 546, 1), + (1412, 908, 927, 'OP_EqDisplaySpellFailCmd', 547, 1), + (1413, 908, 927, 'OP_EqSpellCastStartCmd', 548, 1), + (1414, 908, 927, 'OP_EqSpellCastEndCmd', 549, 1), + (1415, 908, 927, 'OP_EqResurrectedCmd', 550, 1), + (1416, 908, 927, 'OP_EqChoiceWinCmd', 551, 1), + (1417, 908, 927, 'OP_EqSetDefaultVerbCmd', 552, 1), + (1418, 908, 927, 'OP_EqInstructionWindowCmd', 554, 1), + (1419, 908, 927, 'OP_EqInstructionWindowCloseCmd', 555, 1), + (1420, 908, 927, 'OP_EqInstructionWindowGoalCmd', 556, 1), + (1421, 908, 927, 'OP_EqInstructionWindowTaskCmd', 557, 1), + (1422, 908, 927, 'OP_EqEnableGameEventCmd', 558, 1), + (1423, 908, 927, 'OP_EqShowWindowCmd', 559, 1), + (1424, 908, 927, 'OP_EqEnableWindowCmd', 560, 1), + (1425, 908, 927, 'OP_EqFlashWindowCmd', 561, 1), + (1426, 908, 927, 'OP_EqHearPlayFlavorCmd', 562, 1), + (1427, 908, 927, 'OP_EqUpdateSignWidgetCmd', 564, 1), + (1428, 908, 927, 'OP_EqDebugPVDCmd', 565, 1), + (1429, 908, 927, 'OP_EqShowBookCmd', 566, 1), + (1430, 908, 927, 'OP_EqQuestionnaireCmd', 567, 1), + (1431, 908, 927, 'OP_EqGetProbsCmd', 568, 1), + (1432, 908, 927, 'OP_EqHearHealCmd', 569, 1), + (1433, 908, 927, 'OP_EqChatChannelUpdateCmd', 570, 1), + (1434, 908, 927, 'OP_EqWhoChannelQueryReplyCmd', 571, 1), + (1435, 908, 927, 'OP_EqAvailWorldChannelsCmd', 572, 1), + (1436, 908, 927, 'OP_EqUpdateTargetCmd', 573, 1), + (1437, 908, 927, 'OP_EqConsignmentItemsCmd', 575, 1), + (1438, 908, 927, 'OP_EqStartBrokerCmd', 577, 1), + (1439, 908, 927, 'OP_EqMapExplorationCmd', 578, 1), + (1440, 908, 927, 'OP_EqStoreLogCmd', 579, 1), + (1441, 908, 927, 'OP_EqSpellMoveToRangeAndRetryCmd', 580, 1), + (1442, 908, 927, 'OP_EqUpdatePlayerMailCmd', 581, 1), + (1443, 908, 927, 'OP_EqArenaResultsCmd', 582, 1), + (1444, 908, 927, 'OP_EqGuildBankEventActionCmd', 583, 1), + (1445, 908, 927, 'OP_EqGuildBankExamineInfoCmd', 584, 1), + (1446, 908, 927, 'OP_EqHearSpellNoLandCmd', 585, 1), + (1447, 908, 927, 'OP_Lottery', 589, 1), + (1448, 908, 927, 'OP_GuildRecruitingMemberInfo', 590, 1), + (1449, 908, 927, 'OP_GuildRecruiting', 591, 1), + (1450, 908, 927, 'OP_GuildRecruitingDetails', 592, 1), + (1451, 908, 927, 'OP_GuildRecruitingImage', 593, 1), + (1452, 908, 927, 'OP_PointOfInterest', 614, 1), + (1453, 908, 927, 'OP_TraitsList', 616, 1), + (1454, 908, 927, 'OP_RecipeList', 625, 1), + (1455, 908, 927, 'OP_CharacterAchievements', 655, 1), + (1456, 908, 927, 'OP_AddClientToGroupMsg', 1010, 1), + (1457, 908, 927, 'OP_AddGroupToGroupMsg', 1010, 1), + (1458, 908, 927, 'OP_GuildKickMsg', 1010, 1), + (1459, 908, 927, 'OP_ProcessScriptMsg', 1010, 1), + (1460, 908, 927, 'OP_ProcessWorkspaceMsg', 1010, 1), + (1461, 908, 927, 'OP_PurchaseConsignmentResponseMsg', 1010, 1), + (1462, 908, 927, 'OP_QuickbarAddMsg', 1010, 1), + (1463, 908, 927, 'OP_SkillSlotMapping', 1010, 1), + (1464, 908, 927, 'OP_Unknown', 10014, 1), + (1465, 908, 927, 'OP_WSWeatherUpdateMsg', 10015, 1), + (1466, 1008, 1011, 'OP_LoginRequestMsg', 0, 1), + (1467, 1008, 1011, 'OP_LoginByNumRequestMsg', 1, 1), + (1468, 1008, 1011, 'OP_WSLoginRequestMsg', 2, 1), + (1469, 1008, 1011, 'OP_ESLoginRequestMsg', 3, 1), + (1470, 1008, 1011, 'OP_LoginReplyMsg', 4, 1), + (1471, 1008, 1011, 'OP_WSStatusReplyMsg', 5, 1), + (1472, 1008, 1011, 'OP_WorldStatusChangeMsg', 6, 1), + (1473, 1008, 1011, 'OP_AllWSDescRequestMsg', 7, 1), + (1474, 1008, 1011, 'OP_WorldListMsg', 8, 1), + (1475, 1008, 1011, 'OP_AllCharactersDescRequestMsg', 9, 1), + (1476, 1008, 1011, 'OP_AllCharactersDescReplyMsg', 10, 1), + (1477, 1008, 1011, 'OP_CreateCharacterRequestMsg', 11, 1), + (1478, 1008, 1011, 'OP_CreateCharacterReplyMsg', 12, 1), + (1479, 1008, 1011, 'OP_WSCreateCharacterRequestMsg', 13, 1), + (1480, 1008, 1011, 'OP_WSCreateCharacterReplyMsg', 14, 1), + (1481, 1008, 1011, 'OP_ReskinCharacterRequestMsg', 15, 1), + (1482, 1008, 1011, 'OP_DeleteCharacterRequestMsg', 16, 1), + (1483, 1008, 1011, 'OP_DeleteCharacterReplyMsg', 17, 1), + (1484, 1008, 1011, 'OP_PlayCharacterRequestMsg', 18, 1), + (1485, 1008, 1011, 'OP_PlayCharacterReplyMsg', 19, 1), + (1486, 1008, 1011, 'OP_ExpectClientAsCharacterReplyMs', 22, 1), + (1487, 1008, 1011, 'OP_ServerPlayCharacterRequestMsg', 23, 1), + (1488, 1008, 1011, 'OP_ServerPlayCharacterReplyMsg', 24, 1), + (1489, 1008, 1011, 'OP_ESInitMsg', 25, 1), + (1490, 1008, 1011, 'OP_ESReadyForClientsMsg', 26, 1), + (1491, 1008, 1011, 'OP_CreateZoneInstanceMsg', 27, 1), + (1492, 1008, 1011, 'OP_ZoneInstanceCreateReplyMsg', 28, 1), + (1493, 1008, 1011, 'OP_ZoneInstanceDestroyedMsg', 29, 1), + (1494, 1008, 1011, 'OP_ExpectClientAsCharacterRequest', 30, 1), + (1495, 1008, 1011, 'OP_ZoneInfoMsg', 31, 1), + (1496, 1008, 1011, 'OP_DoneLoadingZoneResourcesMsg', 32, 1), + (1497, 1008, 1011, 'OP_DoneSendingInitialEntitiesMsg', 33, 1), + (1498, 1008, 1011, 'OP_DoneLoadingEntityResourcesMsg', 34, 1), + (1499, 1008, 1011, 'OP_PredictionUpdateMsg', 35, 1), + (1500, 1008, 1011, 'OP_UpdatePositionMsg', 37, 1), + (1501, 1008, 1011, 'OP_SetRemoteCmdsMsg', 39, 1), + (1502, 1008, 1011, 'OP_RemoteCmdMsg', 40, 1), + (1503, 1008, 1011, 'OP_GameWorldTimeMsg', 41, 1), + (1504, 1008, 1011, 'OP_MOTDMsg', 42, 1), + (1505, 1008, 1011, 'OP_ZoneMOTDMsg', 43, 1), + (1506, 1008, 1011, 'OP_AvatarCreatedMsg', 44, 1), + (1507, 1008, 1011, 'OP_AvatarDestroyedMsg', 45, 1), + (1508, 1008, 1011, 'OP_RequestCampMsg', 47, 1), + (1509, 1008, 1011, 'OP_CampStartedMsg', 48, 1), + (1510, 1008, 1011, 'OP_CampAbortedMsg', 49, 1), + (1511, 1008, 1011, 'OP_WhoQueryRequestMsg', 50, 1), + (1512, 1008, 1011, 'OP_WhoQueryReplyMsg', 51, 1), + (1513, 1008, 1011, 'OP_MonitorReplyMsg', 52, 1), + (1514, 1008, 1011, 'OP_MonitorCharacterListMsg', 53, 1), + (1515, 1008, 1011, 'OP_MonitorCharacterListRequestMsg', 54, 1), + (1516, 1008, 1011, 'OP_ClientCmdMsg', 55, 1), + (1517, 1008, 1011, 'OP_DispatchESMsg', 56, 1), + (1518, 1008, 1011, 'OP_DispatchClientCmdMsg', 57, 1), + (1519, 1008, 1011, 'OP_UpdateTargetMsg', 58, 1), + (1520, 1008, 1011, 'OP_UpdateTargetLocMsg', 59, 1), + (1521, 1008, 1011, 'OP_UpdateCharacterSheetMsg', 60, 1), + (1522, 1008, 1011, 'OP_UpdateSpellBookMsg', 61, 1), + (1523, 1008, 1011, 'OP_UpdateInventoryMsg', 63, 1), + (1524, 1008, 1011, 'OP_UpdateRecipeBookMsg', 65, 1), + (1525, 1008, 1011, 'OP_RequestRecipeDetailsMsg', 66, 1), + (1526, 1008, 1011, 'OP_RecipeDetailsMsg', 67, 1), + (1527, 1008, 1011, 'OP_UpdateSkillBookMsg', 68, 1), + (1528, 1008, 1011, 'OP_UpdateSkillsMsg', 69, 1), + (1529, 1008, 1011, 'OP_UpdateOpportunityMsg', 70, 1), + (1530, 1008, 1011, 'OP_ChangeZoneMsg', 72, 1), + (1531, 1008, 1011, 'OP_ClientTeleportRequestMsg', 73, 1), + (1532, 1008, 1011, 'OP_TeleportWithinZoneMsg', 74, 1), + (1533, 1008, 1011, 'OP_TeleportWithinZoneNoReloadMsg', 75, 1), + (1534, 1008, 1011, 'OP_MigrateClientToZoneRequestMsg', 76, 1), + (1535, 1008, 1011, 'OP_MigrateClientToZoneReplyMsg', 77, 1), + (1536, 1008, 1011, 'OP_ReadyToZoneMsg', 78, 1), + (1537, 1008, 1011, 'OP_RemoveClientFromGroupMsg', 79, 1), + (1538, 1008, 1011, 'OP_RemoveGroupFromGroupMsg', 80, 1), + (1539, 1008, 1011, 'OP_MakeGroupLeaderMsg', 81, 1), + (1540, 1008, 1011, 'OP_GroupCreatedMsg', 82, 1), + (1541, 1008, 1011, 'OP_GroupDestroyedMsg', 83, 1), + (1542, 1008, 1011, 'OP_GroupMemberAddedMsg', 84, 1), + (1543, 1008, 1011, 'OP_GroupMemberRemovedMsg', 85, 1), + (1544, 1008, 1011, 'OP_GroupRemovedFromGroupMsg', 86, 1), + (1545, 1008, 1011, 'OP_GroupLeaderChangedMsg', 87, 1), + (1546, 1008, 1011, 'OP_GroupResendOOZDataMsg', 88, 1), + (1547, 1008, 1011, 'OP_GroupSettingsChangedMsg', 89, 1), + (1548, 1008, 1011, 'OP_OutOfZoneMemberDataMsg', 90, 1), + (1549, 1008, 1011, 'OP_SendLatestRequestMsg', 91, 1), + (1550, 1008, 1011, 'OP_ClearDataMsg', 92, 1), + (1551, 1008, 1011, 'OP_SetSocialMsg', 93, 1), + (1552, 1008, 1011, 'OP_ESStatusMsg', 94, 1), + (1553, 1008, 1011, 'OP_ESZoneInstanceStatusMsg', 95, 1), + (1554, 1008, 1011, 'OP_ZonesStatusRequestMsg', 96, 1), + (1555, 1008, 1011, 'OP_ZonesStatusMsg', 97, 1), + (1556, 1008, 1011, 'OP_ESWeatherRequestMsg', 98, 1), + (1557, 1008, 1011, 'OP_ESWeatherRequestEndMsg', 99, 1), + (1558, 1008, 1011, 'OP_DialogSelectMsg', 102, 1), + (1559, 1008, 1011, 'OP_DialogCloseMsg', 103, 1), + (1560, 1008, 1011, 'OP_RemoveSpellEffectMsg', 104, 1), + (1561, 1008, 1011, 'OP_RemoveConcentrationMsg', 105, 1), + (1562, 1008, 1011, 'OP_QuestJournalOpenMsg', 106, 1), + (1563, 1008, 1011, 'OP_QuestJournalInspectMsg', 107, 1), + (1564, 1008, 1011, 'OP_QuestJournalSetVisibleMsg', 108, 1), + (1565, 1008, 1011, 'OP_QuestJournalWaypointMsg', 109, 1), + (1566, 1008, 1011, 'OP_CreateGuildRequestMsg', 110, 1), + (1567, 1008, 1011, 'OP_CreateGuildReplyMsg', 111, 1), + (1568, 1008, 1011, 'OP_GuildsayMsg', 112, 1), + (1569, 1008, 1011, 'OP_GuildUpdateMsg', 115, 1), + (1570, 1008, 1011, 'OP_DeleteGuildMsg', 116, 1), + (1571, 1008, 1011, 'OP_FellowshipExpMsg', 117, 1), + (1572, 1008, 1011, 'OP_ConsignmentCloseStoreMsg', 118, 1), + (1573, 1008, 1011, 'OP_ConsignItemRequestMsg', 119, 1), + (1574, 1008, 1011, 'OP_ConsignItemResponseMsg', 120, 1), + (1575, 1008, 1011, 'OP_PurchaseConsignmentRequestMsg', 121, 1), + (1576, 1008, 1011, 'OP_HouseDeletedRemotelyMsg', 122, 1), + (1577, 1008, 1011, 'OP_UpdateHouseDataMsg', 123, 1), + (1578, 1008, 1011, 'OP_UpdateHouseAccessDataMsg', 124, 1), + (1579, 1008, 1011, 'OP_PlayerHouseBaseScreenMsg', 125, 1), + (1580, 1008, 1011, 'OP_PlayerHousePurchaseScreenMsg', 126, 1), + (1581, 1008, 1011, 'OP_PlayerHouseAccessUpdateMsg', 127, 1), + (1582, 1008, 1011, 'OP_PlayerHouseDisplayStatusMsg', 128, 1), + (1583, 1008, 1011, 'OP_PlayerHouseCloseUIMsg', 129, 1), + (1584, 1008, 1011, 'OP_BuyPlayerHouseMsg', 130, 1), + (1585, 1008, 1011, 'OP_BuyPlayerHouseTintMsg', 131, 1), + (1586, 1008, 1011, 'OP_CollectAllHouseItemsMsg', 132, 1), + (1587, 1008, 1011, 'OP_RelinquishHouseMsg', 133, 1), + (1588, 1008, 1011, 'OP_EnterHouseMsg', 134, 1), + (1589, 1008, 1011, 'OP_ExitHouseMsg', 135, 1), + (1590, 1008, 1011, 'OP_HouseDefaultAccessSetMsg', 136, 1), + (1591, 1008, 1011, 'OP_HouseAccessSetMsg', 137, 1), + (1592, 1008, 1011, 'OP_HouseAccessRemoveMsg', 138, 1), + (1593, 1008, 1011, 'OP_PayHouseUpkeepMsg', 139, 1), + (1594, 1008, 1011, 'OP_MoveableObjectPlacementCriteri', 141, 1), + (1595, 1008, 1011, 'OP_EnterMoveObjectModeMsg', 142, 1), + (1596, 1008, 1011, 'OP_PositionMoveableObject', 143, 1), + (1597, 1008, 1011, 'OP_CancelMoveObjectModeMsg', 144, 1), + (1598, 1008, 1011, 'OP_ShaderCustomizationMsg', 145, 1), + (1599, 1008, 1011, 'OP_ReplaceableSubMeshesMsg', 146, 1), + (1600, 1008, 1011, 'OP_HouseCustomizationScreenMsg', 147, 1), + (1601, 1008, 1011, 'OP_CustomizationPurchaseRequestMs', 148, 1), + (1602, 1008, 1011, 'OP_CustomizationSetRequestMsg', 149, 1), + (1603, 1008, 1011, 'OP_CustomizationReplyMsg', 150, 1), + (1604, 1008, 1011, 'OP_TintWidgetsMsg', 151, 1), + (1605, 1008, 1011, 'OP_ExamineConsignmentRequestMsg', 152, 1), + (1606, 1008, 1011, 'OP_ExamineConsignmentResponseMsg', 153, 1), + (1607, 1008, 1011, 'OP_UISettingsResponseMsg', 154, 1), + (1608, 1008, 1011, 'OP_UIResetMsg', 156, 1), + (1609, 1008, 1011, 'OP_KeymapLoadMsg', 157, 1), + (1610, 1008, 1011, 'OP_KeymapNoneMsg', 158, 1), + (1611, 1008, 1011, 'OP_KeymapDataMsg', 159, 1), + (1612, 1008, 1011, 'OP_KeymapSaveMsg', 160, 1), + (1613, 1008, 1011, 'OP_DispatchSpellCmdMsg', 161, 1), + (1614, 1008, 1011, 'OP_EntityVerbsRequestMsg', 163, 1), + (1615, 1008, 1011, 'OP_EntityVerbsReplyMsg', 164, 1), + (1616, 1008, 1011, 'OP_EntityVerbsVerbMsg', 165, 1), + (1617, 1008, 1011, 'OP_ChatRelationshipUpdateMsg', 167, 1), + (1618, 1008, 1011, 'OP_LootItemsRequestMsg', 168, 1), + (1619, 1008, 1011, 'OP_StoppedLootingMsg', 169, 1), + (1620, 1008, 1011, 'OP_SitMsg', 170, 1), + (1621, 1008, 1011, 'OP_StandMsg', 171, 1), + (1622, 1008, 1011, 'OP_SatMsg', 172, 1), + (1623, 1008, 1011, 'OP_StoodMsg', 173, 1), + (1624, 1008, 1011, 'OP_ClearForTakeOffMsg', 174, 1), + (1625, 1008, 1011, 'OP_ReadyForTakeOffMsg', 175, 1), + (1626, 1008, 1011, 'OP_ShowIllusionsMsg', 176, 1), + (1627, 1008, 1011, 'OP_HideIllusionsMsg', 177, 1), + (1628, 1008, 1011, 'OP_ExamineItemRequestMsg', 178, 1), + (1629, 1008, 1011, 'OP_ReadBookPageMsg', 179, 1), + (1630, 1008, 1011, 'OP_DefaultGroupOptionsRequestMsg', 180, 1), + (1631, 1008, 1011, 'OP_DefaultGroupOptionsMsg', 181, 1), + (1632, 1008, 1011, 'OP_GroupOptionsMsg', 182, 1), + (1633, 1008, 1011, 'OP_DisplayGroupOptionsScreenMsg', 183, 1), + (1634, 1008, 1011, 'OP_DisplayInnVisitScreenMsg', 184, 1), + (1635, 1008, 1011, 'OP_DumpSchedulerMsg', 185, 1), + (1636, 1008, 1011, 'OP_LSRequestPlayerDescMsg', 186, 1), + (1637, 1008, 1011, 'OP_LSCheckAcctLockMsg', 187, 1), + (1638, 1008, 1011, 'OP_WSAcctLockStatusMsg', 188, 1), + (1639, 1008, 1011, 'OP_RequestHelpRepathMsg', 189, 1), + (1640, 1008, 1011, 'OP_RequestTargetLocMsg', 190, 1), + (1641, 1008, 1011, 'OP_UpdateMotdMsg', 191, 1), + (1642, 1008, 1011, 'OP_PerformPlayerKnockbackMsg', 192, 1), + (1643, 1008, 1011, 'OP_PerformCameraShakeMsg', 193, 1), + (1644, 1008, 1011, 'OP_PopulateSkillMapsMsg', 196, 1), + (1645, 1008, 1011, 'OP_CancelledFeignMsg', 198, 1), + (1646, 1008, 1011, 'OP_SignalMsg', 199, 1), + (1647, 1008, 1011, 'OP_ShowCreateFromRecipeUIMsg', 200, 1), + (1648, 1008, 1011, 'OP_CancelCreateFromRecipeMsg', 201, 1), + (1649, 1008, 1011, 'OP_BeginItemCreationMsg', 202, 1), + (1650, 1008, 1011, 'OP_StopItemCreationMsg', 203, 1), + (1651, 1008, 1011, 'OP_ShowItemCreationProcessUIMsg', 204, 1), + (1652, 1008, 1011, 'OP_UpdateItemCreationProcessUIMsg', 205, 1), + (1653, 1008, 1011, 'OP_DisplayTSEventReactionMsg', 206, 1), + (1654, 1008, 1011, 'OP_ShowRecipeBookMsg', 207, 1), + (1655, 1008, 1011, 'OP_KnowledgebaseRequestMsg', 208, 1), + (1656, 1008, 1011, 'OP_KnowledgebaseResponseMsg', 209, 1), + (1657, 1008, 1011, 'OP_CSTicketHeaderRequestMsg', 210, 1), + (1658, 1008, 1011, 'OP_CSTicketInfoMsg', 211, 1), + (1659, 1008, 1011, 'OP_CSTicketCommentRequestMsg', 212, 1), + (1660, 1008, 1011, 'OP_CSTicketCommentResponseMsg', 213, 1), + (1661, 1008, 1011, 'OP_CSTicketCreateMsg', 214, 1), + (1662, 1008, 1011, 'OP_CSTicketAddCommentMsg', 215, 1), + (1663, 1008, 1011, 'OP_CSTicketDeleteMsg', 216, 1), + (1664, 1008, 1011, 'OP_CSTicketChangeNotificationMsg', 217, 1), + (1665, 1008, 1011, 'OP_WorldDataUpdateMsg', 218, 1), + (1666, 1008, 1011, 'OP_KnownLanguagesMsg', 219, 1), + (1667, 1008, 1011, 'OP_LsRequestClientCrashLogMsg', 220, 1), + (1668, 1008, 1011, 'OP_LsClientBaselogReplyMsg', 221, 1), + (1669, 1008, 1011, 'OP_LsClientCrashlogReplyMsg', 222, 1), + (1670, 1008, 1011, 'OP_LsClientAlertlogReplyMsg', 223, 1), + (1671, 1008, 1011, 'OP_LsClientVerifylogReplyMsg', 224, 1), + (1672, 1008, 1011, 'OP_ClientTeleportToLocationMsg', 225, 1), + (1673, 1008, 1011, 'OP_UpdateClientPredFlagsMsg', 226, 1), + (1674, 1008, 1011, 'OP_ChangeServerControlFlagMsg', 227, 1), + (1675, 1008, 1011, 'OP_CSToolsRequestMsg', 228, 1), + (1676, 1008, 1011, 'OP_CSToolsResponseMsg', 229, 1), + (1677, 1008, 1011, 'OP_AddSocialStructureStandingMsg', 230, 1), + (1678, 1008, 1011, 'OP_CreateBoatTransportsMsg', 231, 1), + (1679, 1008, 1011, 'OP_PositionBoatTransportMsg', 232, 1), + (1680, 1008, 1011, 'OP_MigrateBoatTransportMsg', 233, 1), + (1681, 1008, 1011, 'OP_MigrateBoatTransportReplyMsg', 234, 1), + (1682, 1008, 1011, 'OP_DisplayDebugNLLPointsMsg', 235, 1), + (1683, 1008, 1011, 'OP_ExamineInfoRequestMsg', 236, 1), + (1684, 1008, 1011, 'OP_QuickbarInitMsg', 237, 1), + (1685, 1008, 1011, 'OP_QuickbarUpdateMsg', 238, 1), + (1686, 1008, 1011, 'OP_MacroInitMsg', 239, 1), + (1687, 1008, 1011, 'OP_MacroUpdateMsg', 240, 1), + (1688, 1008, 1011, 'OP_QuestionnaireMsg', 241, 1), + (1689, 1008, 1011, 'OP_LevelChangedMsg', 242, 1), + (1690, 1008, 1011, 'OP_SpellGainedMsg', 243, 1), + (1691, 1008, 1011, 'OP_EncounterBrokenMsg', 244, 1), + (1692, 1008, 1011, 'OP_OnscreenMsgMsg', 245, 1), + (1693, 1008, 1011, 'OP_DisplayWarningMsg', 246, 1), + (1694, 1008, 1011, 'OP_ModifyGuildMsg', 247, 1), + (1695, 1008, 1011, 'OP_GuildEventMsg', 248, 1), + (1696, 1008, 1011, 'OP_GuildEventAddMsg', 249, 1), + (1697, 1008, 1011, 'OP_GuildEventActionMsg', 250, 1), + (1698, 1008, 1011, 'OP_GuildEventListMsg', 251, 1), + (1699, 1008, 1011, 'OP_RequestGuildEventDetailsMsg', 252, 1), + (1700, 1008, 1011, 'OP_GuildEventDetailsMsg', 253, 1), + (1701, 1008, 1011, 'OP_RequestGuildInfoMsg', 254, 1), + (1702, 1008, 1011, 'OP_GuildBankActionMsg', 255, 1), + (1703, 1008, 1011, 'OP_GuildBankActionResponseMsg', 256, 1), + (1704, 1008, 1011, 'OP_GuildBankItemDetailsRequestMsg', 257, 1), + (1705, 1008, 1011, 'OP_GuildBankItemDetailsResponseMs', 258, 1), + (1706, 1008, 1011, 'OP_GuildBankUpdateMsg', 259, 1), + (1707, 1008, 1011, 'OP_GuildBankEventListMsg', 260, 1), + (1708, 1008, 1011, 'OP_RequestGuildBankEventDetailsMs', 261, 1), + (1709, 1008, 1011, 'OP_RewardPackMsg', 262, 1), + (1710, 1008, 1011, 'OP_RenameGuildMsg', 263, 1), + (1711, 1008, 1011, 'OP_ZoneToFriendRequestMsg', 265, 1), + (1712, 1008, 1011, 'OP_ZoneToFriendReplyMsg', 266, 1), + (1713, 1008, 1011, 'OP_ChatCreateChannelMsg', 267, 1), + (1714, 1008, 1011, 'OP_ChatJoinChannelMsg', 268, 1), + (1715, 1008, 1011, 'OP_ChatWhoChannelMsg', 269, 1), + (1716, 1008, 1011, 'OP_ChatLeaveChannelMsg', 270, 1), + (1717, 1008, 1011, 'OP_ChatTellChannelMsg', 271, 1), + (1718, 1008, 1011, 'OP_ChatTellUserMsg', 272, 1), + (1719, 1008, 1011, 'OP_ChatToggleFriendMsg', 273, 1), + (1720, 1008, 1011, 'OP_ChatToggleIgnoreMsg', 274, 1), + (1721, 1008, 1011, 'OP_ChatSendFriendsMsg', 275, 1), + (1722, 1008, 1011, 'OP_ChatSendIgnoresMsg', 276, 1), + (1723, 1008, 1011, 'OP_QuestReward', 303, 1), + (1724, 1008, 1011, 'OP_ChatFiltersMsg', 318, 1), + (1725, 1008, 1011, 'OP_MailGetHeadersMsg', 319, 1), + (1726, 1008, 1011, 'OP_MailGetMessageMsg', 320, 1), + (1727, 1008, 1011, 'OP_MailSendMessageMsg', 321, 1), + (1728, 1008, 1011, 'OP_MailDeleteMessageMsg', 322, 1), + (1729, 1008, 1011, 'OP_MailGetHeadersReplyMsg', 323, 1), + (1730, 1008, 1011, 'OP_MailGetMessageReplyMsg', 324, 1), + (1731, 1008, 1011, 'OP_MailSendMessageReplyMsg', 325, 1), + (1732, 1008, 1011, 'OP_MailCommitSendMessageMsg', 326, 1), + (1733, 1008, 1011, 'OP_MailSendSystemMessageMsg', 327, 1), + (1734, 1008, 1011, 'OP_MailRemoveAttachFromMailMsg', 328, 1), + (1735, 1008, 1011, 'OP_WaypointRequestMsg', 330, 1), + (1736, 1008, 1011, 'OP_WaypointReplyMsg', 331, 1), + (1737, 1008, 1011, 'OP_WaypointSelectMsg', 332, 1), + (1738, 1008, 1011, 'OP_WaypointUpdateMsg', 333, 1), + (1739, 1008, 1011, 'OP_CharNameChangedMsg', 334, 1), + (1740, 1008, 1011, 'OP_ShowZoneTeleporterDestinations', 335, 1), + (1741, 1008, 1011, 'OP_SelectZoneTeleporterDestinatio', 336, 1), + (1742, 1008, 1011, 'OP_ReloadLocalizedTxtMsg', 337, 1), + (1743, 1008, 1011, 'OP_RequestGuildMembershipMsg', 338, 1), + (1744, 1008, 1011, 'OP_GuildMembershipResponseMsg', 339, 1), + (1745, 1008, 1011, 'OP_LeaveGuildNotifyMsg', 340, 1), + (1746, 1008, 1011, 'OP_JoinGuildNotifyMsg', 341, 1), + (1747, 1008, 1011, 'OP_AvatarUpdateMsg', 343, 1), + (1748, 1008, 1011, 'OP_BioUpdateMsg', 344, 1), + (1749, 1008, 1011, 'OP_InspectPlayerMsg', 345, 1), + (1750, 1008, 1011, 'OP_WSServerLockMsg', 346, 1), + (1751, 1008, 1011, 'OP_LSServerLockMsg', 347, 1), + (1752, 1008, 1011, 'OP_WSServerHideMsg', 348, 1), + (1753, 1008, 1011, 'OP_CsCategoryRequestMsg', 349, 1), + (1754, 1008, 1011, 'OP_CsCategoryResponseMsg', 350, 1), + (1755, 1008, 1011, 'OP_KnowledgeWindowSlotMappingMsg', 351, 1), + (1756, 1008, 1011, 'OP_LFGUpdateMsg', 352, 1), + (1757, 1008, 1011, 'OP_AFKUpdateMsg', 353, 1), + (1758, 1008, 1011, 'OP_AnonUpdateMsg', 354, 1), + (1759, 1008, 1011, 'OP_UpdateActivePublicZonesMsg', 355, 1), + (1760, 1008, 1011, 'OP_UnknownNpcMsg', 356, 1), + (1761, 1008, 1011, 'OP_PromoFlagsDetailsMsg', 357, 1), + (1762, 1008, 1011, 'OP_ConsignViewCreateMsg', 358, 1), + (1763, 1008, 1011, 'OP_ConsignViewGetPageMsg', 359, 1), + (1764, 1008, 1011, 'OP_ConsignViewReleaseMsg', 360, 1), + (1765, 1008, 1011, 'OP_ConsignRemoveItemsMsg', 361, 1), + (1766, 1008, 1011, 'OP_UpdateDebugRadiiMsg', 362, 1), + (1767, 1008, 1011, 'OP_SnoopMsg', 363, 1), + (1768, 1008, 1011, 'OP_ReportMsg', 364, 1), + (1769, 1008, 1011, 'OP_UpdateRaidMsg', 365, 1), + (1770, 1008, 1011, 'OP_ConsignViewSortMsg', 366, 1), + (1771, 1008, 1011, 'OP_TitleUpdateMsg', 367, 1), + (1772, 1008, 1011, 'OP_ClientFellMsg', 368, 1), + (1773, 1008, 1011, 'OP_ClientInDeathRegionMsg', 369, 1), + (1774, 1008, 1011, 'OP_CampClientMsg', 370, 1), + (1775, 1008, 1011, 'OP_CSToolAccessResponseMsg', 371, 1), + (1776, 1008, 1011, 'OP_TrackingUpdateMsg', 372, 1), + (1777, 1008, 1011, 'OP_BeginTrackingMsg', 373, 1), + (1778, 1008, 1011, 'OP_StopTrackingMsg', 374, 1), + (1779, 1008, 1011, 'OP_GetAvatarAccessRequestForCSToo', 375, 1), + (1780, 1008, 1011, 'OP_AdvancementRequestMsg', 376, 1), + (1781, 1008, 1011, 'OP_UpdateAvgFrameTimeMsg', 377, 1), + (1782, 1008, 1011, 'OP_MapFogDataInitMsg', 378, 1), + (1783, 1008, 1011, 'OP_MapFogDataUpdateMsg', 379, 1), + (1784, 1008, 1011, 'OP_CloseGroupInviteWindowMsg', 380, 1), + (1785, 1008, 1011, 'OP_UpdateGroupMemberDataMsg', 381, 1), + (1786, 1008, 1011, 'OP_WorldPingMsg', 382, 1), + (1787, 1008, 1011, 'OP_MoveLogUpdateMsg', 383, 1), + (1788, 1008, 1011, 'OP_OfferQuestMsg', 384, 1), + (1789, 1008, 1011, 'OP_WorldShutdownUpdateMsg', 385, 1), + (1790, 1008, 1011, 'OP_DisplayMailScreenMsg', 386, 1), + (1791, 1008, 1011, 'OP_ClientIdleBeginMsg', 387, 1), + (1792, 1008, 1011, 'OP_ClientIdleEndMsg', 388, 1), + (1793, 1008, 1011, 'OP_PurchaseConsignmentLoreCheckRe', 389, 1), + (1794, 1008, 1011, 'OP_NotifyApprenticeStoppedMentori', 390, 1), + (1795, 1008, 1011, 'OP_CorruptedClientMsg', 391, 1), + (1796, 1008, 1011, 'OP_WorldDataChangeMsg', 392, 1), + (1797, 1008, 1011, 'OP_MailEventNotificationMsg', 393, 1), + (1798, 1008, 1011, 'OP_RestartZoneMsg', 394, 1), + (1799, 1008, 1011, 'OP_FlightPathsMsg', 395, 1), + (1800, 1008, 1011, 'OP_CharacterLinkdeadMsg', 396, 1), + (1801, 1008, 1011, 'OP_CharTransferStartRequestMsg', 397, 1), + (1802, 1008, 1011, 'OP_CharTransferStartReplyMsg', 398, 1), + (1803, 1008, 1011, 'OP_CharTransferRequestMsg', 399, 1), + (1804, 1008, 1011, 'OP_CharTransferReplyMsg', 400, 1), + (1805, 1008, 1011, 'OP_CharTransferRollbackRequestMsg', 401, 1), + (1806, 1008, 1011, 'OP_CharTransferCommitRequestMsg', 402, 1), + (1807, 1008, 1011, 'OP_CharTransferRollbackReplyMsg', 403, 1), + (1808, 1008, 1011, 'OP_CharTransferCommitReplyMsg', 404, 1), + (1809, 1008, 1011, 'OP_GetCharacterSerializedRequestM', 405, 1), + (1810, 1008, 1011, 'OP_GetCharacterSerializedReplyMsg', 406, 1), + (1811, 1008, 1011, 'OP_CreateCharFromCBBRequestMsg', 407, 1), + (1812, 1008, 1011, 'OP_CreateCharFromCBBReplyMsg', 408, 1), + (1813, 1008, 1011, 'OP_HousingDataChangedMsg', 409, 1), + (1814, 1008, 1011, 'OP_HousingRestoreMsg', 410, 1), + (1815, 1008, 1011, 'OP_AuctionItem', 411, 1), + (1816, 1008, 1011, 'OP_AuctionItemReply', 412, 1), + (1817, 1008, 1011, 'OP_AuctionCoin', 413, 1), + (1818, 1008, 1011, 'OP_AuctionCoinReply', 414, 1), + (1819, 1008, 1011, 'OP_AuctionCharacter', 415, 1), + (1820, 1008, 1011, 'OP_AuctionCharacterReply', 416, 1), + (1821, 1008, 1011, 'OP_AuctionCommitMsg', 417, 1), + (1822, 1008, 1011, 'OP_AuctionAbortMsg', 418, 1), + (1823, 1008, 1011, 'OP_CharTransferValidateRequestMsg', 419, 1), + (1824, 1008, 1011, 'OP_CharTransferValidateReplyMsg', 420, 1), + (1825, 1008, 1011, 'OP_RaceRestrictionMsg', 421, 1), + (1826, 1008, 1011, 'OP_SetInstanceDisplayNameMsg', 422, 1), + (1827, 1008, 1011, 'OP_GetAuctionAssetIDMsg', 423, 1), + (1828, 1008, 1011, 'OP_GetAuctionAssetIDReplyMsg', 424, 1), + (1829, 1008, 1011, 'OP_ResendWorldChannelsMsg', 425, 1), + (1830, 1008, 1011, 'OP_DisplayExchangeScreenMsg', 426, 1), + (1831, 1008, 1011, 'OP_ArenaGameTypesMsg', 427, 1), + (1832, 1008, 1011, 'OP_AuditAuctionEventMsg', 429, 1), + (1833, 1008, 1011, 'OP_InviteRequestMsg', 431, 1), + (1834, 1008, 1011, 'OP_InviteResponseMsg', 432, 1), + (1835, 1008, 1011, 'OP_InviteTargetResponseMsg', 433, 1), + (1836, 1008, 1011, 'OP_InspectPlayerRequestMsg', 434, 1), + (1837, 1008, 1011, 'OP_DispatchMsg', 435, 1), + (1838, 1008, 1011, 'OP_DisplayEventMsg', 436, 1), + (1839, 1008, 1011, 'OP_PrePossessionMsg', 437, 1), + (1840, 1008, 1011, 'OP_PostPossessionMsg', 438, 1), + (1841, 1008, 1011, 'OP_AdventureList', 464, 1), + (1842, 1008, 1011, 'OP_CancelSpellCast', 465, 1), + (1843, 1008, 1011, 'OP_UpdateTitleCmd', 471, 1), + (1844, 1008, 1011, 'OP_AttackAllowed', 477, 1), + (1845, 1008, 1011, 'OP_AttackNotAllowed', 478, 1), + (1846, 1008, 1011, 'OP_DressingRoom', 485, 1), + (1847, 1008, 1011, 'OP_SkillInfoRequest', 489, 1), + (1848, 1008, 1011, 'OP_SkillInfoResponse', 490, 1), + (1849, 1008, 1011, 'OP_BadLanguageFilter', 494, 1), + (1850, 1008, 1011, 'OP_MapRequest', 495, 1), + (1851, 1008, 1011, 'OP_EqUnknown', 520, 1), + (1852, 1008, 1011, 'OP_EqHearChatCmd', 522, 1), + (1853, 1008, 1011, 'OP_EqDisplayTextCmd', 523, 1), + (1854, 1008, 1011, 'OP_EqCreateGhostCmd', 524, 1), + (1855, 1008, 1011, 'OP_EqCreateWidgetCmd', 525, 1), + (1856, 1008, 1011, 'OP_EqCreateSignWidgetCmd', 526, 1), + (1857, 1008, 1011, 'OP_EqDestroyGhostCmd', 527, 1), + (1858, 1008, 1011, 'OP_EqUpdateGhostCmd', 528, 1), + (1859, 1008, 1011, 'OP_EqSetControlGhostCmd', 529, 1), + (1860, 1008, 1011, 'OP_EqSetPOVGhostCmd', 530, 1), + (1861, 1008, 1011, 'OP_EqHearCombatCmd', 531, 1), + (1862, 1008, 1011, 'OP_EqHearSpellCastCmd', 532, 1), + (1863, 1008, 1011, 'OP_EqHearSpellInterruptCmd', 535, 1), + (1864, 1008, 1011, 'OP_EqHearSpellFizzleCmd', 536, 1), + (1865, 1008, 1011, 'OP_EqHearConsiderCmd', 537, 1), + (1866, 1008, 1011, 'OP_EqUpdateSubClassesCmd', 538, 1), + (1867, 1008, 1011, 'OP_EqCreateListBoxCmd', 539, 1), + (1868, 1008, 1011, 'OP_EqSetDebugPathPointsCmd', 540, 1), + (1869, 1008, 1011, 'OP_EqCannedEmoteCmd', 542, 1), + (1870, 1008, 1011, 'OP_EqStateCmd', 543, 1), + (1871, 1008, 1011, 'OP_EqPlaySoundCmd', 544, 1), + (1872, 1008, 1011, 'OP_EqPlaySound3DCmd', 545, 1), + (1873, 1008, 1011, 'OP_EqPlayVoiceCmd', 546, 1), + (1874, 1008, 1011, 'OP_EqHearDrowningCmd', 547, 1), + (1875, 1008, 1011, 'OP_EqHearDeathCmd', 548, 1), + (1876, 1008, 1011, 'OP_EqGroupMemberRemovedCmd', 549, 1), + (1877, 1008, 1011, 'OP_EqHearChainEffectCmd', 550, 1), + (1878, 1008, 1011, 'OP_EqReceiveOfferCmd', 551, 1), + (1879, 1008, 1011, 'OP_EqInspectPCResultsCmd', 552, 1), + (1880, 1008, 1011, 'OP_EqDrawablePathGraphCmd', 553, 1), + (1881, 1008, 1011, 'OP_EqDialogOpenCmd', 554, 1), + (1882, 1008, 1011, 'OP_EqDialogCloseCmd', 555, 1), + (1883, 1008, 1011, 'OP_EqFactionUpdateCmd', 556, 1), + (1884, 1008, 1011, 'OP_EqCollectionUpdateCmd', 557, 1), + (1885, 1008, 1011, 'OP_EqCollectionFilterCmd', 558, 1), + (1886, 1008, 1011, 'OP_EqCollectionItemCmd', 559, 1), + (1887, 1008, 1011, 'OP_EqQuestJournalUpdateCmd', 560, 1), + (1888, 1008, 1011, 'OP_EqQuestJournalReplyCmd', 562, 1), + (1889, 1008, 1011, 'OP_EqQuestGroupCmd', 563, 1), + (1890, 1008, 1011, 'OP_EqUpdateMerchantCmd', 564, 1), + (1891, 1008, 1011, 'OP_EqUpdateStoreCmd', 565, 1), + (1892, 1008, 1011, 'OP_EqUpdatePlayerTradeCmd', 566, 1), + (1893, 1008, 1011, 'OP_EqHelpPathCmd', 567, 1), + (1894, 1008, 1011, 'OP_EqHelpPathClearCmd', 568, 1), + (1895, 1008, 1011, 'OP_EqUpdateBankCmd', 569, 1), + (1896, 1008, 1011, 'OP_EqExamineInfoCmd', 570, 1), + (1897, 1008, 1011, 'OP_EqCloseWindowCmd', 571, 1), + (1898, 1008, 1011, 'OP_EqUpdateLootCmd', 572, 1), + (1899, 1008, 1011, 'OP_EqJunctionListCmd', 573, 1), + (1900, 1008, 1011, 'OP_EqShowDeathWindowCmd', 574, 1), + (1901, 1008, 1011, 'OP_EqDisplaySpellFailCmd', 575, 1), + (1902, 1008, 1011, 'OP_EqSpellCastStartCmd', 576, 1), + (1903, 1008, 1011, 'OP_EqSpellCastEndCmd', 577, 1), + (1904, 1008, 1011, 'OP_EqResurrectedCmd', 578, 1), + (1905, 1008, 1011, 'OP_EqChoiceWinCmd', 579, 1), + (1906, 1008, 1011, 'OP_EqSetDefaultVerbCmd', 580, 1), + (1907, 1008, 1011, 'OP_EqInstructionWindowCmd', 582, 1), + (1908, 1008, 1011, 'OP_EqInstructionWindowCloseCmd', 583, 1), + (1909, 1008, 1011, 'OP_EqInstructionWindowGoalCmd', 584, 1), + (1910, 1008, 1011, 'OP_EqInstructionWindowTaskCmd', 585, 1), + (1911, 1008, 1011, 'OP_EqEnableGameEventCmd', 586, 1), + (1912, 1008, 1011, 'OP_EqShowWindowCmd', 587, 1), + (1913, 1008, 1011, 'OP_EqEnableWindowCmd', 588, 1), + (1914, 1008, 1011, 'OP_EqFlashWindowCmd', 589, 1), + (1915, 1008, 1011, 'OP_EqHearPlayFlavorCmd', 590, 1), + (1916, 1008, 1011, 'OP_EqUpdateSignWidgetCmd', 592, 1), + (1917, 1008, 1011, 'OP_EqDebugPVDCmd', 593, 1), + (1918, 1008, 1011, 'OP_EqShowBookCmd', 594, 1), + (1919, 1008, 1011, 'OP_EqQuestionnaireCmd', 595, 1), + (1920, 1008, 1011, 'OP_EqGetProbsCmd', 596, 1), + (1921, 1008, 1011, 'OP_EqHearHealCmd', 597, 1), + (1922, 1008, 1011, 'OP_EqChatChannelUpdateCmd', 598, 1), + (1923, 1008, 1011, 'OP_EqWhoChannelQueryReplyCmd', 599, 1), + (1924, 1008, 1011, 'OP_EqAvailWorldChannelsCmd', 600, 1), + (1925, 1008, 1011, 'OP_EqUpdateTargetCmd', 601, 1), + (1926, 1008, 1011, 'OP_EqConsignmentItemsCmd', 603, 1), + (1927, 1008, 1011, 'OP_EqStartBrokerCmd', 605, 1), + (1928, 1008, 1011, 'OP_EqMapExplorationCmd', 606, 1), + (1929, 1008, 1011, 'OP_EqStoreLogCmd', 607, 1), + (1930, 1008, 1011, 'OP_EqSpellMoveToRangeAndRetryCmd', 608, 1), + (1931, 1008, 1011, 'OP_EqUpdatePlayerMailCmd', 609, 1), + (1932, 1008, 1011, 'OP_EqArenaResultsCmd', 610, 1), + (1933, 1008, 1011, 'OP_EqGuildBankEventActionCmd', 611, 1), + (1934, 1008, 1011, 'OP_EqGuildBankExamineInfoCmd', 612, 1), + (1935, 1008, 1011, 'OP_EqHearSpellNoLandCmd', 613, 1), + (1936, 1008, 1011, 'OP_Lottery', 617, 1), + (1937, 1008, 1011, 'OP_GuildRecruitingMemberInfo', 618, 1), + (1938, 1008, 1011, 'OP_GuildRecruiting', 619, 1), + (1939, 1008, 1011, 'OP_GuildRecruitingDetails', 620, 1), + (1940, 1008, 1011, 'OP_GuildRecruitingImage', 621, 1), + (1941, 1008, 1011, 'OP_PointOfInterest', 642, 1), + (1942, 1008, 1011, 'OP_TraitsList', 644, 1), + (1943, 1008, 1011, 'OP_RecipeList', 653, 1), + (1944, 1008, 1011, 'OP_CharacterAchievements', 655, 1), + (1945, 1008, 1011, 'OP_AddClientToGroupMsg', 1041, 1), + (1946, 1008, 1011, 'OP_AddGroupToGroupMsg', 1041, 1), + (1947, 1008, 1011, 'OP_GuildKickMsg', 1041, 1), + (1948, 1008, 1011, 'OP_ProcessScriptMsg', 1041, 1), + (1949, 1008, 1011, 'OP_ProcessWorkspaceMsg', 1041, 1), + (1950, 1008, 1011, 'OP_PurchaseConsignmentResponseMsg', 1041, 1), + (1951, 1008, 1011, 'OP_QuickbarAddMsg', 1041, 1), + (1952, 1008, 1011, 'OP_SkillSlotMapping', 1041, 1), + (1953, 1008, 1011, 'OP_Unknown', 10045, 1), + (1954, 1008, 1011, 'OP_WSWeatherUpdateMsg', 10046, 1), + (1955, 1045, 1046, 'OP_LoginRequestMsg', 0, 1), + (1956, 1045, 1046, 'OP_LoginByNumRequestMsg', 1, 1), + (1957, 1045, 1046, 'OP_WSLoginRequestMsg', 2, 1), + (1958, 1045, 1046, 'OP_ESLoginRequestMsg', 3, 1), + (1959, 1045, 1046, 'OP_LoginReplyMsg', 4, 1), + (1960, 1045, 1046, 'OP_WSStatusReplyMsg', 5, 1), + (1961, 1045, 1046, 'OP_WorldStatusChangeMsg', 6, 1), + (1962, 1045, 1046, 'OP_AllWSDescRequestMsg', 7, 1), + (1963, 1045, 1046, 'OP_WorldListMsg', 8, 1), + (1964, 1045, 1046, 'OP_AllCharactersDescRequestMsg', 9, 1), + (1965, 1045, 1046, 'OP_AllCharactersDescReplyMsg', 10, 1), + (1966, 1045, 1046, 'OP_CreateCharacterRequestMsg', 11, 1), + (1967, 1045, 1046, 'OP_CreateCharacterReplyMsg', 12, 1), + (1968, 1045, 1046, 'OP_WSCreateCharacterRequestMsg', 13, 1), + (1969, 1045, 1046, 'OP_WSCreateCharacterReplyMsg', 14, 1), + (1970, 1045, 1046, 'OP_ReskinCharacterRequestMsg', 15, 1), + (1971, 1045, 1046, 'OP_DeleteCharacterRequestMsg', 16, 1), + (1972, 1045, 1046, 'OP_DeleteCharacterReplyMsg', 17, 1), + (1973, 1045, 1046, 'OP_PlayCharacterRequestMsg', 18, 1), + (1974, 1045, 1046, 'OP_PlayCharacterReplyMsg', 19, 1), + (1975, 1045, 1046, 'OP_ExpectClientAsCharacterReplyMs', 22, 1), + (1976, 1045, 1046, 'OP_ServerPlayCharacterRequestMsg', 23, 1), + (1977, 1045, 1046, 'OP_ServerPlayCharacterReplyMsg', 24, 1), + (1978, 1045, 1046, 'OP_ESInitMsg', 25, 1), + (1979, 1045, 1046, 'OP_ESReadyForClientsMsg', 26, 1), + (1980, 1045, 1046, 'OP_CreateZoneInstanceMsg', 27, 1), + (1981, 1045, 1046, 'OP_ZoneInstanceCreateReplyMsg', 28, 1), + (1982, 1045, 1046, 'OP_ZoneInstanceDestroyedMsg', 29, 1), + (1983, 1045, 1046, 'OP_ExpectClientAsCharacterRequest', 30, 1), + (1984, 1045, 1046, 'OP_ZoneInfoMsg', 31, 1), + (1985, 1045, 1046, 'OP_DoneLoadingZoneResourcesMsg', 32, 1), + (1986, 1045, 1046, 'OP_DoneSendingInitialEntitiesMsg', 33, 1), + (1987, 1045, 1046, 'OP_DoneLoadingEntityResourcesMsg', 34, 1), + (1988, 1045, 1046, 'OP_PredictionUpdateMsg', 35, 1), + (1989, 1045, 1046, 'OP_UpdatePositionMsg', 37, 1), + (1990, 1045, 1046, 'OP_SetRemoteCmdsMsg', 39, 1), + (1991, 1045, 1046, 'OP_RemoteCmdMsg', 40, 1), + (1992, 1045, 1046, 'OP_GameWorldTimeMsg', 41, 1), + (1993, 1045, 1046, 'OP_MOTDMsg', 42, 1), + (1994, 1045, 1046, 'OP_ZoneMOTDMsg', 43, 1), + (1995, 1045, 1046, 'OP_AvatarCreatedMsg', 44, 1), + (1996, 1045, 1046, 'OP_AvatarDestroyedMsg', 45, 1), + (1997, 1045, 1046, 'OP_RequestCampMsg', 47, 1), + (1998, 1045, 1046, 'OP_CampStartedMsg', 48, 1), + (1999, 1045, 1046, 'OP_CampAbortedMsg', 49, 1), + (2000, 1045, 1046, 'OP_WhoQueryRequestMsg', 50, 1), + (2001, 1045, 1046, 'OP_WhoQueryReplyMsg', 51, 1), + (2002, 1045, 1046, 'OP_MonitorReplyMsg', 52, 1), + (2003, 1045, 1046, 'OP_MonitorCharacterListMsg', 53, 1), + (2004, 1045, 1046, 'OP_MonitorCharacterListRequestMsg', 54, 1), + (2005, 1045, 1046, 'OP_ClientCmdMsg', 55, 1), + (2006, 1045, 1046, 'OP_DispatchESMsg', 56, 1), + (2007, 1045, 1046, 'OP_DispatchClientCmdMsg', 57, 1), + (2008, 1045, 1046, 'OP_UpdateTargetMsg', 58, 1), + (2009, 1045, 1046, 'OP_UpdateTargetLocMsg', 59, 1), + (2010, 1045, 1046, 'OP_UpdateCharacterSheetMsg', 60, 1), + (2011, 1045, 1046, 'OP_UpdateSpellBookMsg', 61, 1), + (2012, 1045, 1046, 'OP_UpdateInventoryMsg', 63, 1), + (2013, 1045, 1046, 'OP_UpdateRecipeBookMsg', 65, 1), + (2014, 1045, 1046, 'OP_RequestRecipeDetailsMsg', 66, 1), + (2015, 1045, 1046, 'OP_RecipeDetailsMsg', 67, 1), + (2016, 1045, 1046, 'OP_UpdateSkillBookMsg', 68, 1), + (2017, 1045, 1046, 'OP_UpdateSkillsMsg', 69, 1), + (2018, 1045, 1046, 'OP_UpdateOpportunityMsg', 70, 1), + (2019, 1045, 1046, 'OP_ChangeZoneMsg', 72, 1), + (2020, 1045, 1046, 'OP_ClientTeleportRequestMsg', 73, 1), + (2021, 1045, 1046, 'OP_TeleportWithinZoneMsg', 74, 1), + (2022, 1045, 1046, 'OP_TeleportWithinZoneNoReloadMsg', 75, 1), + (2023, 1045, 1046, 'OP_MigrateClientToZoneRequestMsg', 76, 1), + (2024, 1045, 1046, 'OP_MigrateClientToZoneReplyMsg', 77, 1), + (2025, 1045, 1046, 'OP_ReadyToZoneMsg', 78, 1), + (2026, 1045, 1046, 'OP_RemoveClientFromGroupMsg', 79, 1), + (2027, 1045, 1046, 'OP_RemoveGroupFromGroupMsg', 80, 1), + (2028, 1045, 1046, 'OP_MakeGroupLeaderMsg', 81, 1), + (2029, 1045, 1046, 'OP_GroupCreatedMsg', 82, 1), + (2030, 1045, 1046, 'OP_GroupDestroyedMsg', 83, 1), + (2031, 1045, 1046, 'OP_GroupMemberAddedMsg', 84, 1), + (2032, 1045, 1046, 'OP_GroupMemberRemovedMsg', 85, 1), + (2033, 1045, 1046, 'OP_GroupRemovedFromGroupMsg', 86, 1), + (2034, 1045, 1046, 'OP_GroupLeaderChangedMsg', 87, 1), + (2035, 1045, 1046, 'OP_GroupResendOOZDataMsg', 88, 1), + (2036, 1045, 1046, 'OP_GroupSettingsChangedMsg', 89, 1), + (2037, 1045, 1046, 'OP_OutOfZoneMemberDataMsg', 90, 1), + (2038, 1045, 1046, 'OP_SendLatestRequestMsg', 91, 1), + (2039, 1045, 1046, 'OP_ClearDataMsg', 92, 1), + (2040, 1045, 1046, 'OP_SetSocialMsg', 93, 1), + (2041, 1045, 1046, 'OP_ESStatusMsg', 94, 1), + (2042, 1045, 1046, 'OP_ESZoneInstanceStatusMsg', 95, 1), + (2043, 1045, 1046, 'OP_ZonesStatusRequestMsg', 96, 1), + (2044, 1045, 1046, 'OP_ZonesStatusMsg', 97, 1), + (2045, 1045, 1046, 'OP_ESWeatherRequestMsg', 98, 1), + (2046, 1045, 1046, 'OP_ESWeatherRequestEndMsg', 99, 1), + (2047, 1045, 1046, 'OP_DialogSelectMsg', 102, 1), + (2048, 1045, 1046, 'OP_DialogCloseMsg', 103, 1), + (2049, 1045, 1046, 'OP_RemoveSpellEffectMsg', 104, 1), + (2050, 1045, 1046, 'OP_RemoveConcentrationMsg', 105, 1), + (2051, 1045, 1046, 'OP_QuestJournalOpenMsg', 106, 1), + (2052, 1045, 1046, 'OP_QuestJournalInspectMsg', 107, 1), + (2053, 1045, 1046, 'OP_QuestJournalSetVisibleMsg', 108, 1), + (2054, 1045, 1046, 'OP_QuestJournalWaypointMsg', 109, 1), + (2055, 1045, 1046, 'OP_CreateGuildRequestMsg', 110, 1), + (2056, 1045, 1046, 'OP_CreateGuildReplyMsg', 111, 1), + (2057, 1045, 1046, 'OP_GuildsayMsg', 112, 1), + (2058, 1045, 1046, 'OP_GuildUpdateMsg', 119, 1), + (2059, 1045, 1046, 'OP_DeleteGuildMsg', 120, 1), + (2060, 1045, 1046, 'OP_FellowshipExpMsg', 121, 1), + (2061, 1045, 1046, 'OP_ConsignmentCloseStoreMsg', 122, 1), + (2062, 1045, 1046, 'OP_ConsignItemRequestMsg', 123, 1), + (2063, 1045, 1046, 'OP_ConsignItemResponseMsg', 124, 1), + (2064, 1045, 1046, 'OP_PurchaseConsignmentRequestMsg', 125, 1), + (2065, 1045, 1046, 'OP_HouseDeletedRemotelyMsg', 126, 1), + (2066, 1045, 1046, 'OP_UpdateHouseDataMsg', 127, 1), + (2067, 1045, 1046, 'OP_UpdateHouseAccessDataMsg', 128, 1), + (2068, 1045, 1046, 'OP_PlayerHouseBaseScreenMsg', 129, 1), + (2069, 1045, 1046, 'OP_PlayerHousePurchaseScreenMsg', 130, 1), + (2070, 1045, 1046, 'OP_PlayerHouseAccessUpdateMsg', 131, 1), + (2071, 1045, 1046, 'OP_PlayerHouseDisplayStatusMsg', 132, 1), + (2072, 1045, 1046, 'OP_PlayerHouseCloseUIMsg', 133, 1), + (2073, 1045, 1046, 'OP_BuyPlayerHouseMsg', 134, 1), + (2074, 1045, 1046, 'OP_BuyPlayerHouseTintMsg', 135, 1), + (2075, 1045, 1046, 'OP_CollectAllHouseItemsMsg', 136, 1), + (2076, 1045, 1046, 'OP_RelinquishHouseMsg', 137, 1), + (2077, 1045, 1046, 'OP_EnterHouseMsg', 138, 1), + (2078, 1045, 1046, 'OP_ExitHouseMsg', 139, 1), + (2079, 1045, 1046, 'OP_HouseDefaultAccessSetMsg', 140, 1), + (2080, 1045, 1046, 'OP_HouseAccessSetMsg', 141, 1), + (2081, 1045, 1046, 'OP_HouseAccessRemoveMsg', 142, 1), + (2082, 1045, 1046, 'OP_PayHouseUpkeepMsg', 143, 1), + (2083, 1045, 1046, 'OP_MoveableObjectPlacementCriteri', 145, 1), + (2084, 1045, 1046, 'OP_EnterMoveObjectModeMsg', 146, 1), + (2085, 1045, 1046, 'OP_PositionMoveableObject', 147, 1), + (2086, 1045, 1046, 'OP_CancelMoveObjectModeMsg', 148, 1), + (2087, 1045, 1046, 'OP_ShaderCustomizationMsg', 149, 1), + (2088, 1045, 1046, 'OP_ReplaceableSubMeshesMsg', 150, 1), + (2089, 1045, 1046, 'OP_HouseCustomizationScreenMsg', 151, 1), + (2090, 1045, 1046, 'OP_CustomizationPurchaseRequestMs', 152, 1), + (2091, 1045, 1046, 'OP_CustomizationSetRequestMsg', 153, 1), + (2092, 1045, 1046, 'OP_CustomizationReplyMsg', 154, 1), + (2093, 1045, 1046, 'OP_TintWidgetsMsg', 155, 1), + (2094, 1045, 1046, 'OP_ExamineConsignmentRequestMsg', 156, 1), + (2095, 1045, 1046, 'OP_ExamineConsignmentResponseMsg', 157, 1), + (2096, 1045, 1046, 'OP_UISettingsResponseMsg', 158, 1), + (2097, 1045, 1046, 'OP_UIResetMsg', 160, 1), + (2098, 1045, 1046, 'OP_KeymapLoadMsg', 161, 1), + (2099, 1045, 1046, 'OP_KeymapNoneMsg', 162, 1), + (2100, 1045, 1046, 'OP_KeymapDataMsg', 163, 1), + (2101, 1045, 1046, 'OP_KeymapSaveMsg', 164, 1), + (2102, 1045, 1046, 'OP_DispatchSpellCmdMsg', 165, 1), + (2103, 1045, 1046, 'OP_EntityVerbsRequestMsg', 167, 1), + (2104, 1045, 1046, 'OP_EntityVerbsReplyMsg', 168, 1), + (2105, 1045, 1046, 'OP_EntityVerbsVerbMsg', 169, 1), + (2106, 1045, 1046, 'OP_ChatRelationshipUpdateMsg', 171, 1), + (2107, 1045, 1046, 'OP_LootItemsRequestMsg', 172, 1), + (2108, 1045, 1046, 'OP_StoppedLootingMsg', 173, 1), + (2109, 1045, 1046, 'OP_SitMsg', 174, 1), + (2110, 1045, 1046, 'OP_StandMsg', 175, 1), + (2111, 1045, 1046, 'OP_SatMsg', 176, 1), + (2112, 1045, 1046, 'OP_StoodMsg', 177, 1), + (2113, 1045, 1046, 'OP_ClearForTakeOffMsg', 178, 1), + (2114, 1045, 1046, 'OP_ReadyForTakeOffMsg', 179, 1), + (2115, 1045, 1046, 'OP_ShowIllusionsMsg', 180, 1), + (2116, 1045, 1046, 'OP_HideIllusionsMsg', 181, 1), + (2117, 1045, 1046, 'OP_ExamineItemRequestMsg', 182, 1), + (2118, 1045, 1046, 'OP_ReadBookPageMsg', 183, 1), + (2119, 1045, 1046, 'OP_DefaultGroupOptionsRequestMsg', 184, 1), + (2120, 1045, 1046, 'OP_DefaultGroupOptionsMsg', 185, 1), + (2121, 1045, 1046, 'OP_GroupOptionsMsg', 186, 1), + (2122, 1045, 1046, 'OP_DisplayGroupOptionsScreenMsg', 187, 1), + (2123, 1045, 1046, 'OP_DisplayInnVisitScreenMsg', 188, 1), + (2124, 1045, 1046, 'OP_DumpSchedulerMsg', 189, 1), + (2125, 1045, 1046, 'OP_LSRequestPlayerDescMsg', 190, 1), + (2126, 1045, 1046, 'OP_LSCheckAcctLockMsg', 191, 1), + (2127, 1045, 1046, 'OP_WSAcctLockStatusMsg', 192, 1), + (2128, 1045, 1046, 'OP_RequestHelpRepathMsg', 193, 1), + (2129, 1045, 1046, 'OP_RequestTargetLocMsg', 194, 1), + (2130, 1045, 1046, 'OP_UpdateMotdMsg', 195, 1), + (2131, 1045, 1046, 'OP_PerformPlayerKnockbackMsg', 196, 1), + (2132, 1045, 1046, 'OP_PerformCameraShakeMsg', 197, 1), + (2133, 1045, 1046, 'OP_PopulateSkillMapsMsg', 200, 1), + (2134, 1045, 1046, 'OP_CancelledFeignMsg', 202, 1), + (2135, 1045, 1046, 'OP_SignalMsg', 203, 1), + (2136, 1045, 1046, 'OP_ShowCreateFromRecipeUIMsg', 204, 1), + (2137, 1045, 1046, 'OP_CancelCreateFromRecipeMsg', 205, 1), + (2138, 1045, 1046, 'OP_BeginItemCreationMsg', 206, 1), + (2139, 1045, 1046, 'OP_StopItemCreationMsg', 207, 1), + (2140, 1045, 1046, 'OP_ShowItemCreationProcessUIMsg', 208, 1), + (2141, 1045, 1046, 'OP_UpdateItemCreationProcessUIMsg', 209, 1), + (2142, 1045, 1046, 'OP_DisplayTSEventReactionMsg', 210, 1), + (2143, 1045, 1046, 'OP_ShowRecipeBookMsg', 211, 1), + (2144, 1045, 1046, 'OP_KnowledgebaseRequestMsg', 212, 1), + (2145, 1045, 1046, 'OP_KnowledgebaseResponseMsg', 213, 1), + (2146, 1045, 1046, 'OP_CSTicketHeaderRequestMsg', 214, 1), + (2147, 1045, 1046, 'OP_CSTicketInfoMsg', 215, 1), + (2148, 1045, 1046, 'OP_CSTicketCommentRequestMsg', 216, 1), + (2149, 1045, 1046, 'OP_CSTicketCommentResponseMsg', 217, 1), + (2150, 1045, 1046, 'OP_CSTicketCreateMsg', 218, 1), + (2151, 1045, 1046, 'OP_CSTicketAddCommentMsg', 219, 1), + (2152, 1045, 1046, 'OP_CSTicketDeleteMsg', 220, 1), + (2153, 1045, 1046, 'OP_CSTicketChangeNotificationMsg', 221, 1), + (2154, 1045, 1046, 'OP_WorldDataUpdateMsg', 222, 1), + (2155, 1045, 1046, 'OP_KnownLanguagesMsg', 223, 1), + (2156, 1045, 1046, 'OP_LsRequestClientCrashLogMsg', 224, 1), + (2157, 1045, 1046, 'OP_LsClientBaselogReplyMsg', 225, 1), + (2158, 1045, 1046, 'OP_LsClientCrashlogReplyMsg', 226, 1), + (2159, 1045, 1046, 'OP_LsClientAlertlogReplyMsg', 227, 1), + (2160, 1045, 1046, 'OP_LsClientVerifylogReplyMsg', 228, 1), + (2161, 1045, 1046, 'OP_ClientTeleportToLocationMsg', 229, 1), + (2162, 1045, 1046, 'OP_UpdateClientPredFlagsMsg', 230, 1), + (2163, 1045, 1046, 'OP_ChangeServerControlFlagMsg', 231, 1), + (2164, 1045, 1046, 'OP_CSToolsRequestMsg', 232, 1), + (2165, 1045, 1046, 'OP_CSToolsResponseMsg', 233, 1), + (2166, 1045, 1046, 'OP_AddSocialStructureStandingMsg', 234, 1), + (2167, 1045, 1046, 'OP_CreateBoatTransportsMsg', 235, 1), + (2168, 1045, 1046, 'OP_PositionBoatTransportMsg', 236, 1), + (2169, 1045, 1046, 'OP_MigrateBoatTransportMsg', 237, 1), + (2170, 1045, 1046, 'OP_MigrateBoatTransportReplyMsg', 238, 1), + (2171, 1045, 1046, 'OP_DisplayDebugNLLPointsMsg', 239, 1), + (2172, 1045, 1046, 'OP_ExamineInfoRequestMsg', 240, 1), + (2173, 1045, 1046, 'OP_QuickbarInitMsg', 241, 1), + (2174, 1045, 1046, 'OP_QuickbarUpdateMsg', 242, 1), + (2175, 1045, 1046, 'OP_MacroInitMsg', 243, 1), + (2176, 1045, 1046, 'OP_MacroUpdateMsg', 244, 1), + (2177, 1045, 1046, 'OP_QuestionnaireMsg', 245, 1), + (2178, 1045, 1046, 'OP_LevelChangedMsg', 246, 1), + (2179, 1045, 1046, 'OP_SpellGainedMsg', 247, 1), + (2180, 1045, 1046, 'OP_EncounterBrokenMsg', 248, 1), + (2181, 1045, 1046, 'OP_OnscreenMsgMsg', 249, 1), + (2182, 1045, 1046, 'OP_DisplayWarningMsg', 250, 1), + (2183, 1045, 1046, 'OP_ModifyGuildMsg', 251, 1), + (2184, 1045, 1046, 'OP_GuildEventMsg', 252, 1), + (2185, 1045, 1046, 'OP_GuildEventAddMsg', 253, 1), + (2186, 1045, 1046, 'OP_GuildEventActionMsg', 254, 1), + (2187, 1045, 1046, 'OP_GuildEventListMsg', 255, 1), + (2188, 1045, 1046, 'OP_RequestGuildEventDetailsMsg', 256, 1), + (2189, 1045, 1046, 'OP_GuildEventDetailsMsg', 257, 1), + (2190, 1045, 1046, 'OP_RequestGuildInfoMsg', 258, 1), + (2191, 1045, 1046, 'OP_GuildBankActionMsg', 259, 1), + (2192, 1045, 1046, 'OP_GuildBankActionResponseMsg', 260, 1), + (2193, 1045, 1046, 'OP_GuildBankItemDetailsRequestMsg', 261, 1), + (2194, 1045, 1046, 'OP_GuildBankItemDetailsResponseMs', 262, 1), + (2195, 1045, 1046, 'OP_GuildBankUpdateMsg', 263, 1), + (2196, 1045, 1046, 'OP_GuildBankEventListMsg', 264, 1), + (2197, 1045, 1046, 'OP_RequestGuildBankEventDetailsMs', 265, 1), + (2198, 1045, 1046, 'OP_RewardPackMsg', 266, 1), + (2199, 1045, 1046, 'OP_RenameGuildMsg', 267, 1), + (2200, 1045, 1046, 'OP_ZoneToFriendRequestMsg', 269, 1), + (2201, 1045, 1046, 'OP_ZoneToFriendReplyMsg', 270, 1), + (2202, 1045, 1046, 'OP_ChatCreateChannelMsg', 271, 1), + (2203, 1045, 1046, 'OP_ChatJoinChannelMsg', 272, 1), + (2204, 1045, 1046, 'OP_ChatWhoChannelMsg', 273, 1), + (2205, 1045, 1046, 'OP_ChatLeaveChannelMsg', 274, 1), + (2206, 1045, 1046, 'OP_ChatTellChannelMsg', 275, 1), + (2207, 1045, 1046, 'OP_ChatTellUserMsg', 276, 1), + (2208, 1045, 1046, 'OP_ChatToggleFriendMsg', 277, 1), + (2209, 1045, 1046, 'OP_ChatToggleIgnoreMsg', 278, 1), + (2210, 1045, 1046, 'OP_ChatSendFriendsMsg', 279, 1), + (2211, 1045, 1046, 'OP_ChatSendIgnoresMsg', 280, 1), + (2212, 1045, 1046, 'OP_QuestReward', 307, 1), + (2213, 1045, 1046, 'OP_ChatFiltersMsg', 322, 1), + (2214, 1045, 1046, 'OP_MailGetHeadersMsg', 323, 1), + (2215, 1045, 1046, 'OP_MailGetMessageMsg', 324, 1), + (2216, 1045, 1046, 'OP_MailSendMessageMsg', 325, 1), + (2217, 1045, 1046, 'OP_MailDeleteMessageMsg', 326, 1), + (2218, 1045, 1046, 'OP_MailGetHeadersReplyMsg', 327, 1), + (2219, 1045, 1046, 'OP_MailGetMessageReplyMsg', 328, 1), + (2220, 1045, 1046, 'OP_MailSendMessageReplyMsg', 329, 1), + (2221, 1045, 1046, 'OP_MailCommitSendMessageMsg', 330, 1), + (2222, 1045, 1046, 'OP_MailSendSystemMessageMsg', 331, 1), + (2223, 1045, 1046, 'OP_MailRemoveAttachFromMailMsg', 332, 1), + (2224, 1045, 1046, 'OP_WaypointRequestMsg', 334, 1), + (2225, 1045, 1046, 'OP_WaypointReplyMsg', 335, 1), + (2226, 1045, 1046, 'OP_WaypointSelectMsg', 336, 1), + (2227, 1045, 1046, 'OP_WaypointUpdateMsg', 337, 1), + (2228, 1045, 1046, 'OP_CharNameChangedMsg', 338, 1), + (2229, 1045, 1046, 'OP_ShowZoneTeleporterDestinations', 339, 1), + (2230, 1045, 1046, 'OP_SelectZoneTeleporterDestinatio', 340, 1), + (2231, 1045, 1046, 'OP_ReloadLocalizedTxtMsg', 341, 1), + (2232, 1045, 1046, 'OP_RequestGuildMembershipMsg', 342, 1), + (2233, 1045, 1046, 'OP_GuildMembershipResponseMsg', 343, 1), + (2234, 1045, 1046, 'OP_LeaveGuildNotifyMsg', 344, 1), + (2235, 1045, 1046, 'OP_JoinGuildNotifyMsg', 345, 1), + (2236, 1045, 1046, 'OP_AvatarUpdateMsg', 347, 1), + (2237, 1045, 1046, 'OP_BioUpdateMsg', 348, 1), + (2238, 1045, 1046, 'OP_InspectPlayerMsg', 349, 1), + (2239, 1045, 1046, 'OP_WSServerLockMsg', 350, 1), + (2240, 1045, 1046, 'OP_LSServerLockMsg', 351, 1), + (2241, 1045, 1046, 'OP_WSServerHideMsg', 352, 1), + (2242, 1045, 1046, 'OP_CsCategoryRequestMsg', 353, 1), + (2243, 1045, 1046, 'OP_CsCategoryResponseMsg', 354, 1), + (2244, 1045, 1046, 'OP_KnowledgeWindowSlotMappingMsg', 355, 1), + (2245, 1045, 1046, 'OP_LFGUpdateMsg', 356, 1), + (2246, 1045, 1046, 'OP_AFKUpdateMsg', 357, 1), + (2247, 1045, 1046, 'OP_AnonUpdateMsg', 358, 1), + (2248, 1045, 1046, 'OP_UpdateActivePublicZonesMsg', 359, 1), + (2249, 1045, 1046, 'OP_UnknownNpcMsg', 360, 1), + (2250, 1045, 1046, 'OP_PromoFlagsDetailsMsg', 361, 1), + (2251, 1045, 1046, 'OP_ConsignViewCreateMsg', 362, 1), + (2252, 1045, 1046, 'OP_ConsignViewGetPageMsg', 363, 1), + (2253, 1045, 1046, 'OP_ConsignViewReleaseMsg', 364, 1), + (2254, 1045, 1046, 'OP_ConsignRemoveItemsMsg', 365, 1), + (2255, 1045, 1046, 'OP_UpdateDebugRadiiMsg', 366, 1), + (2256, 1045, 1046, 'OP_SnoopMsg', 367, 1), + (2257, 1045, 1046, 'OP_ReportMsg', 368, 1), + (2258, 1045, 1046, 'OP_UpdateRaidMsg', 369, 1), + (2259, 1045, 1046, 'OP_ConsignViewSortMsg', 370, 1), + (2260, 1045, 1046, 'OP_TitleUpdateMsg', 371, 1), + (2261, 1045, 1046, 'OP_ClientFellMsg', 372, 1), + (2262, 1045, 1046, 'OP_ClientInDeathRegionMsg', 373, 1), + (2263, 1045, 1046, 'OP_CampClientMsg', 374, 1), + (2264, 1045, 1046, 'OP_CSToolAccessResponseMsg', 375, 1), + (2265, 1045, 1046, 'OP_TrackingUpdateMsg', 376, 1), + (2266, 1045, 1046, 'OP_BeginTrackingMsg', 377, 1), + (2267, 1045, 1046, 'OP_StopTrackingMsg', 378, 1), + (2268, 1045, 1046, 'OP_GetAvatarAccessRequestForCSToo', 379, 1), + (2269, 1045, 1046, 'OP_AdvancementRequestMsg', 380, 1), + (2270, 1045, 1046, 'OP_UpdateAvgFrameTimeMsg', 381, 1), + (2271, 1045, 1046, 'OP_MapFogDataInitMsg', 382, 1), + (2272, 1045, 1046, 'OP_MapFogDataUpdateMsg', 383, 1), + (2273, 1045, 1046, 'OP_CloseGroupInviteWindowMsg', 384, 1), + (2274, 1045, 1046, 'OP_UpdateGroupMemberDataMsg', 385, 1), + (2275, 1045, 1046, 'OP_WorldPingMsg', 386, 1), + (2276, 1045, 1046, 'OP_MoveLogUpdateMsg', 387, 1), + (2277, 1045, 1046, 'OP_OfferQuestMsg', 388, 1), + (2278, 1045, 1046, 'OP_WorldShutdownUpdateMsg', 389, 1), + (2279, 1045, 1046, 'OP_DisplayMailScreenMsg', 390, 1), + (2280, 1045, 1046, 'OP_ClientIdleBeginMsg', 391, 1), + (2281, 1045, 1046, 'OP_ClientIdleEndMsg', 392, 1), + (2282, 1045, 1046, 'OP_PurchaseConsignmentLoreCheckRe', 393, 1), + (2283, 1045, 1046, 'OP_NotifyApprenticeStoppedMentori', 394, 1), + (2284, 1045, 1046, 'OP_CorruptedClientMsg', 395, 1), + (2285, 1045, 1046, 'OP_WorldDataChangeMsg', 396, 1), + (2286, 1045, 1046, 'OP_MailEventNotificationMsg', 397, 1), + (2287, 1045, 1046, 'OP_RestartZoneMsg', 398, 1), + (2288, 1045, 1046, 'OP_FlightPathsMsg', 399, 1), + (2289, 1045, 1046, 'OP_CharacterLinkdeadMsg', 400, 1), + (2290, 1045, 1046, 'OP_CharTransferStartRequestMsg', 401, 1), + (2291, 1045, 1046, 'OP_CharTransferStartReplyMsg', 402, 1), + (2292, 1045, 1046, 'OP_CharTransferRequestMsg', 403, 1), + (2293, 1045, 1046, 'OP_CharTransferReplyMsg', 404, 1), + (2294, 1045, 1046, 'OP_CharTransferRollbackRequestMsg', 405, 1), + (2295, 1045, 1046, 'OP_CharTransferCommitRequestMsg', 406, 1), + (2296, 1045, 1046, 'OP_CharTransferRollbackReplyMsg', 407, 1), + (2297, 1045, 1046, 'OP_CharTransferCommitReplyMsg', 408, 1), + (2298, 1045, 1046, 'OP_GetCharacterSerializedRequestM', 409, 1), + (2299, 1045, 1046, 'OP_GetCharacterSerializedReplyMsg', 410, 1), + (2300, 1045, 1046, 'OP_CreateCharFromCBBRequestMsg', 411, 1), + (2301, 1045, 1046, 'OP_CreateCharFromCBBReplyMsg', 412, 1), + (2302, 1045, 1046, 'OP_HousingDataChangedMsg', 413, 1), + (2303, 1045, 1046, 'OP_HousingRestoreMsg', 414, 1), + (2304, 1045, 1046, 'OP_AuctionItem', 415, 1), + (2305, 1045, 1046, 'OP_AuctionItemReply', 416, 1), + (2306, 1045, 1046, 'OP_AuctionCoin', 417, 1), + (2307, 1045, 1046, 'OP_AuctionCoinReply', 418, 1), + (2308, 1045, 1046, 'OP_AuctionCharacter', 419, 1), + (2309, 1045, 1046, 'OP_AuctionCharacterReply', 420, 1), + (2310, 1045, 1046, 'OP_AuctionCommitMsg', 421, 1), + (2311, 1045, 1046, 'OP_AuctionAbortMsg', 422, 1), + (2312, 1045, 1046, 'OP_CharTransferValidateRequestMsg', 423, 1), + (2313, 1045, 1046, 'OP_CharTransferValidateReplyMsg', 424, 1), + (2314, 1045, 1046, 'OP_RaceRestrictionMsg', 425, 1), + (2315, 1045, 1046, 'OP_SetInstanceDisplayNameMsg', 426, 1), + (2316, 1045, 1046, 'OP_GetAuctionAssetIDMsg', 427, 1), + (2317, 1045, 1046, 'OP_GetAuctionAssetIDReplyMsg', 428, 1), + (2318, 1045, 1046, 'OP_ResendWorldChannelsMsg', 429, 1), + (2319, 1045, 1046, 'OP_DisplayExchangeScreenMsg', 430, 1), + (2320, 1045, 1046, 'OP_ArenaGameTypesMsg', 431, 1), + (2321, 1045, 1046, 'OP_AuditAuctionEventMsg', 433, 1), + (2322, 1045, 1046, 'OP_InviteRequestMsg', 435, 1), + (2323, 1045, 1046, 'OP_InviteResponseMsg', 436, 1), + (2324, 1045, 1046, 'OP_InviteTargetResponseMsg', 437, 1), + (2325, 1045, 1046, 'OP_InspectPlayerRequestMsg', 438, 1), + (2326, 1045, 1046, 'OP_DispatchMsg', 439, 1), + (2327, 1045, 1046, 'OP_DisplayEventMsg', 440, 1), + (2328, 1045, 1046, 'OP_PrePossessionMsg', 441, 1), + (2329, 1045, 1046, 'OP_PostPossessionMsg', 442, 1), + (2330, 1045, 1046, 'OP_AdventureList', 474, 1), + (2331, 1045, 1046, 'OP_CancelSpellCast', 475, 1), + (2332, 1045, 1046, 'OP_UpdateTitleCmd', 483, 1), + (2333, 1045, 1046, 'OP_AttackAllowed', 487, 1), + (2334, 1045, 1046, 'OP_AttackNotAllowed', 488, 1), + (2335, 1045, 1046, 'OP_DressingRoom', 494, 1), + (2336, 1045, 1046, 'OP_SkillInfoRequest', 498, 1), + (2337, 1045, 1046, 'OP_SkillInfoResponse', 499, 1), + (2338, 1045, 1046, 'OP_BadLanguageFilter', 503, 1), + (2339, 1045, 1046, 'OP_MapRequest', 504, 1), + (2340, 1045, 1046, 'OP_EqUnknown', 539, 1), + (2341, 1045, 1046, 'OP_EqHearChatCmd', 541, 1), + (2342, 1045, 1046, 'OP_EqDisplayTextCmd', 542, 1), + (2343, 1045, 1046, 'OP_EqCreateGhostCmd', 543, 1), + (2344, 1045, 1046, 'OP_EqCreateWidgetCmd', 544, 1), + (2345, 1045, 1046, 'OP_EqCreateSignWidgetCmd', 545, 1), + (2346, 1045, 1046, 'OP_EqDestroyGhostCmd', 546, 1), + (2347, 1045, 1046, 'OP_EqUpdateGhostCmd', 547, 1), + (2348, 1045, 1046, 'OP_EqSetControlGhostCmd', 548, 1), + (2349, 1045, 1046, 'OP_EqSetPOVGhostCmd', 549, 1), + (2350, 1045, 1046, 'OP_EqHearCombatCmd', 550, 1), + (2351, 1045, 1046, 'OP_EqHearSpellCastCmd', 551, 1), + (2352, 1045, 1046, 'OP_EqHearSpellInterruptCmd', 554, 1), + (2353, 1045, 1046, 'OP_EqHearSpellFizzleCmd', 555, 1), + (2354, 1045, 1046, 'OP_EqHearConsiderCmd', 556, 1), + (2355, 1045, 1046, 'OP_EqUpdateSubClassesCmd', 557, 1), + (2356, 1045, 1046, 'OP_EqCreateListBoxCmd', 558, 1), + (2357, 1045, 1046, 'OP_EqSetDebugPathPointsCmd', 559, 1), + (2358, 1045, 1046, 'OP_EqCannedEmoteCmd', 561, 1), + (2359, 1045, 1046, 'OP_EqStateCmd', 562, 1), + (2360, 1045, 1046, 'OP_EqPlaySoundCmd', 563, 1), + (2361, 1045, 1046, 'OP_EqPlaySound3DCmd', 564, 1), + (2362, 1045, 1046, 'OP_EqPlayVoiceCmd', 565, 1), + (2363, 1045, 1046, 'OP_EqHearDrowningCmd', 566, 1), + (2364, 1045, 1046, 'OP_EqHearDeathCmd', 567, 1), + (2365, 1045, 1046, 'OP_EqGroupMemberRemovedCmd', 568, 1), + (2366, 1045, 1046, 'OP_EqHearChainEffectCmd', 569, 1), + (2367, 1045, 1046, 'OP_EqReceiveOfferCmd', 570, 1), + (2368, 1045, 1046, 'OP_EqInspectPCResultsCmd', 571, 1), + (2369, 1045, 1046, 'OP_EqDrawablePathGraphCmd', 572, 1), + (2370, 1045, 1046, 'OP_EqDialogOpenCmd', 573, 1), + (2371, 1045, 1046, 'OP_EqDialogCloseCmd', 574, 1), + (2372, 1045, 1046, 'OP_EqFactionUpdateCmd', 575, 1), + (2373, 1045, 1046, 'OP_EqCollectionUpdateCmd', 576, 1), + (2374, 1045, 1046, 'OP_EqCollectionFilterCmd', 577, 1), + (2375, 1045, 1046, 'OP_EqCollectionItemCmd', 578, 1), + (2376, 1045, 1046, 'OP_EqQuestJournalUpdateCmd', 579, 1), + (2377, 1045, 1046, 'OP_EqQuestJournalReplyCmd', 581, 1), + (2378, 1045, 1046, 'OP_EqQuestGroupCmd', 582, 1), + (2379, 1045, 1046, 'OP_EqUpdateMerchantCmd', 583, 1), + (2380, 1045, 1046, 'OP_EqUpdateStoreCmd', 584, 1), + (2381, 1045, 1046, 'OP_EqUpdatePlayerTradeCmd', 585, 1), + (2382, 1045, 1046, 'OP_EqHelpPathCmd', 586, 1), + (2383, 1045, 1046, 'OP_EqHelpPathClearCmd', 587, 1), + (2384, 1045, 1046, 'OP_EqUpdateBankCmd', 588, 1), + (2385, 1045, 1046, 'OP_EqExamineInfoCmd', 589, 1), + (2386, 1045, 1046, 'OP_EqCloseWindowCmd', 590, 1), + (2387, 1045, 1046, 'OP_EqUpdateLootCmd', 591, 1), + (2388, 1045, 1046, 'OP_EqJunctionListCmd', 592, 1), + (2389, 1045, 1046, 'OP_EqShowDeathWindowCmd', 593, 1), + (2390, 1045, 1046, 'OP_EqDisplaySpellFailCmd', 594, 1), + (2391, 1045, 1046, 'OP_EqSpellCastStartCmd', 595, 1), + (2392, 1045, 1046, 'OP_EqSpellCastEndCmd', 596, 1), + (2393, 1045, 1046, 'OP_EqResurrectedCmd', 597, 1), + (2394, 1045, 1046, 'OP_EqChoiceWinCmd', 598, 1), + (2395, 1045, 1046, 'OP_EqSetDefaultVerbCmd', 599, 1), + (2396, 1045, 1046, 'OP_EqInstructionWindowCmd', 601, 1), + (2397, 1045, 1046, 'OP_EqInstructionWindowCloseCmd', 602, 1), + (2398, 1045, 1046, 'OP_EqInstructionWindowGoalCmd', 603, 1), + (2399, 1045, 1046, 'OP_EqInstructionWindowTaskCmd', 604, 1), + (2400, 1045, 1046, 'OP_EqEnableGameEventCmd', 605, 1), + (2401, 1045, 1046, 'OP_EqShowWindowCmd', 606, 1), + (2402, 1045, 1046, 'OP_EqEnableWindowCmd', 607, 1), + (2403, 1045, 1046, 'OP_EqFlashWindowCmd', 608, 1), + (2404, 1045, 1046, 'OP_EqHearPlayFlavorCmd', 609, 1), + (2405, 1045, 1046, 'OP_EqUpdateSignWidgetCmd', 611, 1), + (2406, 1045, 1046, 'OP_EqDebugPVDCmd', 612, 1), + (2407, 1045, 1046, 'OP_EqShowBookCmd', 613, 1), + (2408, 1045, 1046, 'OP_EqQuestionnaireCmd', 614, 1), + (2409, 1045, 1046, 'OP_EqGetProbsCmd', 615, 1), + (2410, 1045, 1046, 'OP_EqHearHealCmd', 616, 1), + (2411, 1045, 1046, 'OP_EqChatChannelUpdateCmd', 617, 1), + (2412, 1045, 1046, 'OP_EqWhoChannelQueryReplyCmd', 618, 1), + (2413, 1045, 1046, 'OP_EqAvailWorldChannelsCmd', 619, 1), + (2414, 1045, 1046, 'OP_EqUpdateTargetCmd', 620, 1), + (2415, 1045, 1046, 'OP_EqConsignmentItemsCmd', 622, 1), + (2416, 1045, 1046, 'OP_EqStartBrokerCmd', 624, 1), + (2417, 1045, 1046, 'OP_EqMapExplorationCmd', 625, 1), + (2418, 1045, 1046, 'OP_EqStoreLogCmd', 626, 1), + (2419, 1045, 1046, 'OP_EqSpellMoveToRangeAndRetryCmd', 627, 1), + (2420, 1045, 1046, 'OP_EqUpdatePlayerMailCmd', 628, 1), + (2421, 1045, 1046, 'OP_EqArenaResultsCmd', 629, 1), + (2422, 1045, 1046, 'OP_EqGuildBankEventActionCmd', 630, 1), + (2423, 1045, 1046, 'OP_EqGuildBankExamineInfoCmd', 631, 1), + (2424, 1045, 1046, 'OP_EqHearSpellNoLandCmd', 632, 1), + (2425, 1045, 1046, 'OP_Lottery', 636, 1), + (2426, 1045, 1046, 'OP_GuildRecruitingMemberInfo', 637, 1), + (2427, 1045, 1046, 'OP_GuildRecruiting', 638, 1), + (2428, 1045, 1046, 'OP_GuildRecruitingDetails', 639, 1), + (2429, 1045, 1046, 'OP_GuildRecruitingImage', 640, 1), + (2430, 1045, 1046, 'OP_PointOfInterest', 661, 1), + (2431, 1045, 1046, 'OP_TraitsList', 663, 1), + (2432, 1045, 1046, 'OP_RecipeList', 672, 1), + (2433, 1045, 1046, 'OP_CharacterAchievements', 674, 1), + (2434, 1045, 1046, 'OP_AddClientToGroupMsg', 1054, 1), + (2435, 1045, 1046, 'OP_AddGroupToGroupMsg', 1054, 1), + (2436, 1045, 1046, 'OP_GuildKickMsg', 1054, 1), + (2437, 1045, 1046, 'OP_ProcessScriptMsg', 1054, 1), + (2438, 1045, 1046, 'OP_ProcessWorkspaceMsg', 1054, 1), + (2439, 1045, 1046, 'OP_PurchaseConsignmentResponseMsg', 1054, 1), + (2440, 1045, 1046, 'OP_QuickbarAddMsg', 1054, 1), + (2441, 1045, 1046, 'OP_SkillSlotMapping', 1054, 1), + (2442, 1045, 1046, 'OP_Unknown', 10058, 1), + (2443, 1045, 1046, 'OP_WSWeatherUpdateMsg', 10059, 1), + (2444, 1096, 1096, 'OP_LoginRequestMsg', 0, 1), + (2445, 1096, 1096, 'OP_LoginByNumRequestMsg', 1, 1), + (2446, 1096, 1096, 'OP_WSLoginRequestMsg', 2, 1), + (2447, 1096, 1096, 'OP_ESLoginRequestMsg', 3, 1), + (2448, 1096, 1096, 'OP_LoginReplyMsg', 4, 1), + (2449, 1096, 1096, 'OP_WSStatusReplyMsg', 5, 1), + (2450, 1096, 1096, 'OP_WorldStatusChangeMsg', 6, 1), + (2451, 1096, 1096, 'OP_AllWSDescRequestMsg', 7, 1), + (2452, 1096, 1096, 'OP_WorldListMsg', 8, 1), + (2453, 1096, 1096, 'OP_AllCharactersDescRequestMsg', 9, 1), + (2454, 1096, 1096, 'OP_AllCharactersDescReplyMsg', 10, 1), + (2455, 1096, 1096, 'OP_CreateCharacterRequestMsg', 11, 1), + (2456, 1096, 1096, 'OP_CreateCharacterReplyMsg', 12, 1), + (2457, 1096, 1096, 'OP_WSCreateCharacterRequestMsg', 13, 1), + (2458, 1096, 1096, 'OP_WSCreateCharacterReplyMsg', 14, 1), + (2459, 1096, 1096, 'OP_ReskinCharacterRequestMsg', 15, 1), + (2460, 1096, 1096, 'OP_DeleteCharacterRequestMsg', 16, 1), + (2461, 1096, 1096, 'OP_DeleteCharacterReplyMsg', 17, 1), + (2462, 1096, 1096, 'OP_PlayCharacterRequestMsg', 18, 1), + (2463, 1096, 1096, 'OP_PlayCharacterReplyMsg', 19, 1), + (2464, 1096, 1096, 'OP_ExpectClientAsCharacterReplyMs', 22, 1), + (2465, 1096, 1096, 'OP_ServerPlayCharacterRequestMsg', 23, 1), + (2466, 1096, 1096, 'OP_ServerPlayCharacterReplyMsg', 24, 1), + (2467, 1096, 1096, 'OP_ESInitMsg', 25, 1), + (2468, 1096, 1096, 'OP_ESReadyForClientsMsg', 26, 1), + (2469, 1096, 1096, 'OP_CreateZoneInstanceMsg', 27, 1), + (2470, 1096, 1096, 'OP_ZoneInstanceCreateReplyMsg', 28, 1), + (2471, 1096, 1096, 'OP_ZoneInstanceDestroyedMsg', 29, 1), + (2472, 1096, 1096, 'OP_ExpectClientAsCharacterRequest', 30, 1), + (2473, 1096, 1096, 'OP_ZoneInfoMsg', 32, 1), + (2474, 1096, 1096, 'OP_DoneLoadingZoneResourcesMsg', 33, 1), + (2475, 1096, 1096, 'OP_DoneSendingInitialEntitiesMsg', 34, 1), + (2476, 1096, 1096, 'OP_DoneLoadingEntityResourcesMsg', 35, 1), + (2477, 1096, 1096, 'OP_PredictionUpdateMsg', 36, 1), + (2478, 1096, 1096, 'OP_UpdatePositionMsg', 38, 1), + (2479, 1096, 1096, 'OP_SetRemoteCmdsMsg', 40, 1), + (2480, 1096, 1096, 'OP_RemoteCmdMsg', 41, 1), + (2481, 1096, 1096, 'OP_GameWorldTimeMsg', 42, 1), + (2482, 1096, 1096, 'OP_MOTDMsg', 43, 1), + (2483, 1096, 1096, 'OP_ZoneMOTDMsg', 44, 1), + (2484, 1096, 1096, 'OP_AvatarCreatedMsg', 45, 1), + (2485, 1096, 1096, 'OP_AvatarDestroyedMsg', 46, 1), + (2486, 1096, 1096, 'OP_RequestCampMsg', 48, 1), + (2487, 1096, 1096, 'OP_CampStartedMsg', 49, 1), + (2488, 1096, 1096, 'OP_CampAbortedMsg', 50, 1), + (2489, 1096, 1096, 'OP_WhoQueryRequestMsg', 51, 1), + (2490, 1096, 1096, 'OP_WhoQueryReplyMsg', 52, 1), + (2491, 1096, 1096, 'OP_MonitorReplyMsg', 53, 1), + (2492, 1096, 1096, 'OP_MonitorCharacterListMsg', 54, 1), + (2493, 1096, 1096, 'OP_MonitorCharacterListRequestMsg', 55, 1), + (2494, 1096, 1096, 'OP_ClientCmdMsg', 56, 1), + (2495, 1096, 1096, 'OP_DispatchESMsg', 57, 1), + (2496, 1096, 1096, 'OP_DispatchClientCmdMsg', 58, 1), + (2497, 1096, 1096, 'OP_UpdateTargetMsg', 59, 1), + (2498, 1096, 1096, 'OP_UpdateTargetLocMsg', 60, 1), + (2499, 1096, 1096, 'OP_UpdateCharacterSheetMsg', 61, 1), + (2500, 1096, 1096, 'OP_UpdateSpellBookMsg', 62, 1), + (2501, 1096, 1096, 'OP_UpdateInventoryMsg', 64, 1), + (2502, 1096, 1096, 'OP_UpdateRecipeBookMsg', 66, 1), + (2503, 1096, 1096, 'OP_RequestRecipeDetailsMsg', 67, 1), + (2504, 1096, 1096, 'OP_RecipeDetailsMsg', 68, 1), + (2505, 1096, 1096, 'OP_UpdateSkillBookMsg', 69, 1), + (2506, 1096, 1096, 'OP_UpdateSkillsMsg', 70, 1), + (2507, 1096, 1096, 'OP_UpdateOpportunityMsg', 71, 1), + (2508, 1096, 1096, 'OP_ChangeZoneMsg', 73, 1), + (2509, 1096, 1096, 'OP_ClientTeleportRequestMsg', 74, 1), + (2510, 1096, 1096, 'OP_TeleportWithinZoneMsg', 75, 1), + (2511, 1096, 1096, 'OP_TeleportWithinZoneNoReloadMsg', 76, 1), + (2512, 1096, 1096, 'OP_MigrateClientToZoneRequestMsg', 77, 1), + (2513, 1096, 1096, 'OP_MigrateClientToZoneReplyMsg', 78, 1), + (2514, 1096, 1096, 'OP_ReadyToZoneMsg', 80, 1), + (2515, 1096, 1096, 'OP_RemoveClientFromGroupMsg', 81, 1), + (2516, 1096, 1096, 'OP_RemoveGroupFromGroupMsg', 82, 1), + (2517, 1096, 1096, 'OP_MakeGroupLeaderMsg', 83, 1), + (2518, 1096, 1096, 'OP_GroupCreatedMsg', 84, 1), + (2519, 1096, 1096, 'OP_GroupDestroyedMsg', 85, 1), + (2520, 1096, 1096, 'OP_GroupMemberAddedMsg', 86, 1), + (2521, 1096, 1096, 'OP_GroupMemberRemovedMsg', 87, 1), + (2522, 1096, 1096, 'OP_GroupRemovedFromGroupMsg', 88, 1), + (2523, 1096, 1096, 'OP_GroupLeaderChangedMsg', 89, 1), + (2524, 1096, 1096, 'OP_GroupResendOOZDataMsg', 90, 1), + (2525, 1096, 1096, 'OP_GroupSettingsChangedMsg', 91, 1), + (2526, 1096, 1096, 'OP_OutOfZoneMemberDataMsg', 92, 1), + (2527, 1096, 1096, 'OP_SendLatestRequestMsg', 93, 1), + (2528, 1096, 1096, 'OP_ClearDataMsg', 94, 1), + (2529, 1096, 1096, 'OP_SetSocialMsg', 95, 1), + (2530, 1096, 1096, 'OP_ESStatusMsg', 96, 1), + (2531, 1096, 1096, 'OP_ESZoneInstanceStatusMsg', 97, 1), + (2532, 1096, 1096, 'OP_ZonesStatusRequestMsg', 98, 1), + (2533, 1096, 1096, 'OP_ZonesStatusMsg', 99, 1), + (2534, 1096, 1096, 'OP_ESWeatherRequestMsg', 100, 1), + (2535, 1096, 1096, 'OP_ESWeatherRequestEndMsg', 101, 1), + (2536, 1096, 1096, 'OP_DialogSelectMsg', 105, 1), + (2537, 1096, 1096, 'OP_DialogCloseMsg', 106, 1), + (2538, 1096, 1096, 'OP_RemoveSpellEffectMsg', 107, 1), + (2539, 1096, 1096, 'OP_RemoveConcentrationMsg', 108, 1), + (2540, 1096, 1096, 'OP_QuestJournalOpenMsg', 109, 1), + (2541, 1096, 1096, 'OP_QuestJournalInspectMsg', 110, 1), + (2542, 1096, 1096, 'OP_QuestJournalSetVisibleMsg', 111, 1), + (2543, 1096, 1096, 'OP_QuestJournalWaypointMsg', 112, 1), + (2544, 1096, 1096, 'OP_CreateGuildRequestMsg', 113, 1), + (2545, 1096, 1096, 'OP_CreateGuildReplyMsg', 114, 1), + (2546, 1096, 1096, 'OP_GuildsayMsg', 115, 1), + (2547, 1096, 1096, 'OP_FellowshipExpMsg', 118, 1), + (2548, 1096, 1096, 'OP_DeleteGuildMsg', 119, 1), + (2549, 1096, 1096, 'OP_GuildUpdateMsg', 120, 1), + (2550, 1096, 1096, 'OP_ConsignmentCloseStoreMsg', 121, 1), + (2551, 1096, 1096, 'OP_ConsignItemRequestMsg', 122, 1), + (2552, 1096, 1096, 'OP_ConsignItemResponseMsg', 123, 1), + (2553, 1096, 1096, 'OP_PurchaseConsignmentRequestMsg', 124, 1), + (2554, 1096, 1096, 'OP_HouseDeletedRemotelyMsg', 125, 1), + (2555, 1096, 1096, 'OP_UpdateHouseDataMsg', 126, 1), + (2556, 1096, 1096, 'OP_UpdateHouseAccessDataMsg', 127, 1), + (2557, 1096, 1096, 'OP_PlayerHouseBaseScreenMsg', 128, 1), + (2558, 1096, 1096, 'OP_PlayerHousePurchaseScreenMsg', 129, 1), + (2559, 1096, 1096, 'OP_PlayerHouseAccessUpdateMsg', 130, 1), + (2560, 1096, 1096, 'OP_PlayerHouseDisplayStatusMsg', 131, 1), + (2561, 1096, 1096, 'OP_PlayerHouseCloseUIMsg', 132, 1), + (2562, 1096, 1096, 'OP_BuyPlayerHouseMsg', 133, 1), + (2563, 1096, 1096, 'OP_BuyPlayerHouseTintMsg', 134, 1), + (2564, 1096, 1096, 'OP_CollectAllHouseItemsMsg', 135, 1), + (2565, 1096, 1096, 'OP_RelinquishHouseMsg', 136, 1), + (2566, 1096, 1096, 'OP_EnterHouseMsg', 137, 1), + (2567, 1096, 1096, 'OP_ExitHouseMsg', 138, 1), + (2568, 1096, 1096, 'OP_HouseDefaultAccessSetMsg', 139, 1), + (2569, 1096, 1096, 'OP_HouseAccessSetMsg', 140, 1), + (2570, 1096, 1096, 'OP_HouseAccessRemoveMsg', 141, 1), + (2571, 1096, 1096, 'OP_PayHouseUpkeepMsg', 142, 1), + (2572, 1096, 1096, 'OP_MoveableObjectPlacementCriteri', 146, 1), + (2573, 1096, 1096, 'OP_EnterMoveObjectModeMsg', 147, 1), + (2574, 1096, 1096, 'OP_PositionMoveableObject', 148, 1), + (2575, 1096, 1096, 'OP_CancelMoveObjectModeMsg', 149, 1), + (2576, 1096, 1096, 'OP_ShaderCustomizationMsg', 150, 1), + (2577, 1096, 1096, 'OP_ReplaceableSubMeshesMsg', 151, 1), + (2578, 1096, 1096, 'OP_HouseCustomizationScreenMsg', 152, 1), + (2579, 1096, 1096, 'OP_CustomizationPurchaseRequestMs', 153, 1), + (2580, 1096, 1096, 'OP_CustomizationSetRequestMsg', 154, 1), + (2581, 1096, 1096, 'OP_CustomizationReplyMsg', 155, 1), + (2582, 1096, 1096, 'OP_TintWidgetsMsg', 156, 1), + (2583, 1096, 1096, 'OP_ExamineConsignmentRequestMsg', 157, 1), + (2584, 1096, 1096, 'OP_ExamineConsignmentResponseMsg', 158, 1), + (2585, 1096, 1096, 'OP_UISettingsResponseMsg', 159, 1), + (2586, 1096, 1096, 'OP_UIResetMsg', 160, 1), + (2587, 1096, 1096, 'OP_KeymapLoadMsg', 161, 1), + (2588, 1096, 1096, 'OP_KeymapNoneMsg', 162, 1), + (2589, 1096, 1096, 'OP_KeymapDataMsg', 163, 1), + (2590, 1096, 1096, 'OP_KeymapSaveMsg', 164, 1), + (2591, 1096, 1096, 'OP_DispatchSpellCmdMsg', 165, 1), + (2592, 1096, 1096, 'OP_EntityVerbsRequestMsg', 166, 1), + (2593, 1096, 1096, 'OP_EntityVerbsReplyMsg', 167, 1), + (2594, 1096, 1096, 'OP_EntityVerbsVerbMsg', 168, 1), + (2595, 1096, 1096, 'OP_ChatRelationshipUpdateMsg', 170, 1), + (2596, 1096, 1096, 'OP_LootItemsRequestMsg', 171, 1), + (2597, 1096, 1096, 'OP_StoppedLootingMsg', 172, 1), + (2598, 1096, 1096, 'OP_SitMsg', 173, 1), + (2599, 1096, 1096, 'OP_StandMsg', 174, 1), + (2600, 1096, 1096, 'OP_SatMsg', 175, 1), + (2601, 1096, 1096, 'OP_StoodMsg', 176, 1), + (2602, 1096, 1096, 'OP_ClearForTakeOffMsg', 177, 1), + (2603, 1096, 1096, 'OP_ReadyForTakeOffMsg', 178, 1), + (2604, 1096, 1096, 'OP_ShowIllusionsMsg', 179, 1), + (2605, 1096, 1096, 'OP_HideIllusionsMsg', 180, 1), + (2606, 1096, 1096, 'OP_ExamineItemRequestMsg', 181, 1), + (2607, 1096, 1096, 'OP_ReadBookPageMsg', 182, 1), + (2608, 1096, 1096, 'OP_DefaultGroupOptionsRequestMsg', 183, 1), + (2609, 1096, 1096, 'OP_DefaultGroupOptionsMsg', 184, 1), + (2610, 1096, 1096, 'OP_GroupOptionsMsg', 185, 1), + (2611, 1096, 1096, 'OP_DisplayGroupOptionsScreenMsg', 186, 1), + (2612, 1096, 1096, 'OP_DisplayInnVisitScreenMsg', 188, 1), + (2613, 1096, 1096, 'OP_DumpSchedulerMsg', 189, 1), + (2614, 1096, 1096, 'OP_LSRequestPlayerDescMsg', 190, 1), + (2615, 1096, 1096, 'OP_LSCheckAcctLockMsg', 191, 1), + (2616, 1096, 1096, 'OP_WSAcctLockStatusMsg', 192, 1), + (2617, 1096, 1096, 'OP_RequestHelpRepathMsg', 193, 1), + (2618, 1096, 1096, 'OP_RequestTargetLocMsg', 194, 1), + (2619, 1096, 1096, 'OP_UpdateMotdMsg', 195, 1), + (2620, 1096, 1096, 'OP_PerformPlayerKnockbackMsg', 197, 1), + (2621, 1096, 1096, 'OP_PerformCameraShakeMsg', 198, 1), + (2622, 1096, 1096, 'OP_PopulateSkillMapsMsg', 199, 1), + (2623, 1096, 1096, 'OP_CancelledFeignMsg', 201, 1), + (2624, 1096, 1096, 'OP_SignalMsg', 202, 1), + (2625, 1096, 1096, 'OP_ShowCreateFromRecipeUIMsg', 203, 1), + (2626, 1096, 1096, 'OP_CancelCreateFromRecipeMsg', 204, 1), + (2627, 1096, 1096, 'OP_BeginItemCreationMsg', 205, 1), + (2628, 1096, 1096, 'OP_StopItemCreationMsg', 206, 1), + (2629, 1096, 1096, 'OP_ShowItemCreationProcessUIMsg', 207, 1), + (2630, 1096, 1096, 'OP_UpdateItemCreationProcessUIMsg', 208, 1), + (2631, 1096, 1096, 'OP_DisplayTSEventReactionMsg', 209, 1), + (2632, 1096, 1096, 'OP_ShowRecipeBookMsg', 210, 1), + (2633, 1096, 1096, 'OP_KnowledgebaseRequestMsg', 211, 1), + (2634, 1096, 1096, 'OP_KnowledgebaseResponseMsg', 212, 1), + (2635, 1096, 1096, 'OP_CSTicketHeaderRequestMsg', 213, 1), + (2636, 1096, 1096, 'OP_CSTicketInfoMsg', 214, 1), + (2637, 1096, 1096, 'OP_CSTicketCommentRequestMsg', 215, 1), + (2638, 1096, 1096, 'OP_CSTicketCommentResponseMsg', 216, 1), + (2639, 1096, 1096, 'OP_CSTicketCreateMsg', 217, 1), + (2640, 1096, 1096, 'OP_CSTicketAddCommentMsg', 218, 1), + (2641, 1096, 1096, 'OP_CSTicketDeleteMsg', 219, 1), + (2642, 1096, 1096, 'OP_CSTicketChangeNotificationMsg', 220, 1), + (2643, 1096, 1096, 'OP_WorldDataUpdateMsg', 221, 1), + (2644, 1096, 1096, 'OP_KnownLanguagesMsg', 222, 1), + (2645, 1096, 1096, 'OP_LsRequestClientCrashLogMsg', 223, 1), + (2646, 1096, 1096, 'OP_LsClientBaselogReplyMsg', 224, 1), + (2647, 1096, 1096, 'OP_LsClientCrashlogReplyMsg', 225, 1), + (2648, 1096, 1096, 'OP_LsClientAlertlogReplyMsg', 226, 1), + (2649, 1096, 1096, 'OP_LsClientVerifylogReplyMsg', 227, 1), + (2650, 1096, 1096, 'OP_ClientTeleportToLocationMsg', 228, 1), + (2651, 1096, 1096, 'OP_UpdateClientPredFlagsMsg', 229, 1), + (2652, 1096, 1096, 'OP_ChangeServerControlFlagMsg', 230, 1), + (2653, 1096, 1096, 'OP_CSToolsRequestMsg', 231, 1), + (2654, 1096, 1096, 'OP_CSToolsResponseMsg', 232, 1), + (2655, 1096, 1096, 'OP_AddSocialStructureStandingMsg', 233, 1), + (2656, 1096, 1096, 'OP_CreateBoatTransportsMsg', 234, 1), + (2657, 1096, 1096, 'OP_PositionBoatTransportMsg', 235, 1), + (2658, 1096, 1096, 'OP_MigrateBoatTransportMsg', 236, 1), + (2659, 1096, 1096, 'OP_MigrateBoatTransportReplyMsg', 237, 1), + (2660, 1096, 1096, 'OP_DisplayDebugNLLPointsMsg', 238, 1), + (2661, 1096, 1096, 'OP_ExamineInfoRequestMsg', 239, 1), + (2662, 1096, 1096, 'OP_QuickbarInitMsg', 240, 1), + (2663, 1096, 1096, 'OP_QuickbarUpdateMsg', 241, 1), + (2664, 1096, 1096, 'OP_MacroInitMsg', 242, 1), + (2665, 1096, 1096, 'OP_MacroUpdateMsg', 243, 1), + (2666, 1096, 1096, 'OP_QuestionnaireMsg', 244, 1), + (2667, 1096, 1096, 'OP_LevelChangedMsg', 245, 1), + (2668, 1096, 1096, 'OP_SpellGainedMsg', 246, 1), + (2669, 1096, 1096, 'OP_EncounterBrokenMsg', 247, 1), + (2670, 1096, 1096, 'OP_OnscreenMsgMsg', 248, 1), + (2671, 1096, 1096, 'OP_DisplayWarningMsg', 249, 1), + (2672, 1096, 1096, 'OP_ModifyGuildMsg', 250, 1), + (2673, 1096, 1096, 'OP_GuildEventMsg', 251, 1), + (2674, 1096, 1096, 'OP_GuildEventAddMsg', 252, 1), + (2675, 1096, 1096, 'OP_GuildEventActionMsg', 253, 1), + (2676, 1096, 1096, 'OP_GuildEventListMsg', 254, 1), + (2677, 1096, 1096, 'OP_RequestGuildEventDetailsMsg', 255, 1), + (2678, 1096, 1096, 'OP_GuildEventDetailsMsg', 256, 1), + (2679, 1096, 1096, 'OP_RequestGuildInfoMsg', 257, 1), + (2680, 1096, 1096, 'OP_GuildBankActionMsg', 258, 1), + (2681, 1096, 1096, 'OP_GuildBankActionResponseMsg', 259, 1), + (2682, 1096, 1096, 'OP_GuildBankItemDetailsRequestMsg', 260, 1), + (2683, 1096, 1096, 'OP_GuildBankItemDetailsResponseMs', 261, 1), + (2684, 1096, 1096, 'OP_GuildBankUpdateMsg', 262, 1), + (2685, 1096, 1096, 'OP_GuildBankEventListMsg', 263, 1), + (2686, 1096, 1096, 'OP_RequestGuildBankEventDetailsMs', 264, 1), + (2687, 1096, 1096, 'OP_RewardPackMsg', 265, 1), + (2688, 1096, 1096, 'OP_RenameGuildMsg', 266, 1), + (2689, 1096, 1096, 'OP_ZoneToFriendRequestMsg', 268, 1), + (2690, 1096, 1096, 'OP_ZoneToFriendReplyMsg', 269, 1), + (2691, 1096, 1096, 'OP_ChatCreateChannelMsg', 270, 1), + (2692, 1096, 1096, 'OP_ChatJoinChannelMsg', 271, 1), + (2693, 1096, 1096, 'OP_ChatWhoChannelMsg', 272, 1), + (2694, 1096, 1096, 'OP_ChatLeaveChannelMsg', 273, 1), + (2695, 1096, 1096, 'OP_ChatTellChannelMsg', 274, 1), + (2696, 1096, 1096, 'OP_ChatTellUserMsg', 275, 1), + (2697, 1096, 1096, 'OP_ChatToggleFriendMsg', 276, 1), + (2698, 1096, 1096, 'OP_ChatToggleIgnoreMsg', 277, 1), + (2699, 1096, 1096, 'OP_ChatSendFriendsMsg', 278, 1), + (2700, 1096, 1096, 'OP_ChatSendIgnoresMsg', 279, 1), + (2701, 1096, 1096, 'OP_QuestReward', 304, 1), + (2702, 1096, 1096, 'OP_ChatFiltersMsg', 319, 1), + (2703, 1096, 1096, 'OP_MailGetHeadersMsg', 320, 1), + (2704, 1096, 1096, 'OP_MailGetMessageMsg', 321, 1), + (2705, 1096, 1096, 'OP_MailSendMessageMsg', 322, 1), + (2706, 1096, 1096, 'OP_MailDeleteMessageMsg', 323, 1), + (2707, 1096, 1096, 'OP_MailGetHeadersReplyMsg', 324, 1), + (2708, 1096, 1096, 'OP_MailGetMessageReplyMsg', 325, 1), + (2709, 1096, 1096, 'OP_MailSendMessageReplyMsg', 326, 1), + (2710, 1096, 1096, 'OP_MailCommitSendMessageMsg', 327, 1), + (2711, 1096, 1096, 'OP_MailSendSystemMessageMsg', 328, 1), + (2712, 1096, 1096, 'OP_MailRemoveAttachFromMailMsg', 329, 1), + (2713, 1096, 1096, 'OP_WaypointRequestMsg', 331, 1), + (2714, 1096, 1096, 'OP_WaypointReplyMsg', 332, 1), + (2715, 1096, 1096, 'OP_WaypointSelectMsg', 333, 1), + (2716, 1096, 1096, 'OP_WaypointUpdateMsg', 334, 1), + (2717, 1096, 1096, 'OP_CharNameChangedMsg', 335, 1), + (2718, 1096, 1096, 'OP_ShowZoneTeleporterDestinations', 336, 1), + (2719, 1096, 1096, 'OP_SelectZoneTeleporterDestinatio', 337, 1), + (2720, 1096, 1096, 'OP_ReloadLocalizedTxtMsg', 338, 1), + (2721, 1096, 1096, 'OP_RequestGuildMembershipMsg', 339, 1), + (2722, 1096, 1096, 'OP_GuildMembershipResponseMsg', 340, 1), + (2723, 1096, 1096, 'OP_LeaveGuildNotifyMsg', 341, 1), + (2724, 1096, 1096, 'OP_JoinGuildNotifyMsg', 342, 1), + (2725, 1096, 1096, 'OP_AvatarUpdateMsg', 343, 1), + (2726, 1096, 1096, 'OP_BioUpdateMsg', 345, 1), + (2727, 1096, 1096, 'OP_InspectPlayerMsg', 346, 1), + (2728, 1096, 1096, 'OP_WSServerLockMsg', 347, 1), + (2729, 1096, 1096, 'OP_LSServerLockMsg', 348, 1), + (2730, 1096, 1096, 'OP_WSServerHideMsg', 349, 1), + (2731, 1096, 1096, 'OP_CsCategoryRequestMsg', 350, 1), + (2732, 1096, 1096, 'OP_CsCategoryResponseMsg', 351, 1), + (2733, 1096, 1096, 'OP_KnowledgeWindowSlotMappingMsg', 352, 1), + (2734, 1096, 1096, 'OP_LFGUpdateMsg', 3533, 1), + (2735, 1096, 1096, 'OP_AFKUpdateMsg', 353, 1), + (2736, 1096, 1096, 'OP_AnonUpdateMsg', 354, 1), + (2737, 1096, 1096, 'OP_UpdateActivePublicZonesMsg', 355, 1), + (2738, 1096, 1096, 'OP_UnknownNpcMsg', 356, 1), + (2739, 1096, 1096, 'OP_PromoFlagsDetailsMsg', 357, 1), + (2740, 1096, 1096, 'OP_ConsignViewCreateMsg', 358, 1), + (2741, 1096, 1096, 'OP_ConsignViewGetPageMsg', 359, 1), + (2742, 1096, 1096, 'OP_ConsignViewReleaseMsg', 360, 1), + (2743, 1096, 1096, 'OP_ConsignRemoveItemsMsg', 361, 1), + (2744, 1096, 1096, 'OP_UpdateDebugRadiiMsg', 362, 1), + (2745, 1096, 1096, 'OP_SnoopMsg', 363, 1), + (2746, 1096, 1096, 'OP_ReportMsg', 364, 1), + (2747, 1096, 1096, 'OP_UpdateRaidMsg', 365, 1), + (2748, 1096, 1096, 'OP_ConsignViewSortMsg', 366, 1), + (2749, 1096, 1096, 'OP_TitleUpdateMsg', 367, 1), + (2750, 1096, 1096, 'OP_ClientFellMsg', 368, 1), + (2751, 1096, 1096, 'OP_ClientInDeathRegionMsg', 369, 1), + (2752, 1096, 1096, 'OP_CampClientMsg', 370, 1), + (2753, 1096, 1096, 'OP_CSToolAccessResponseMsg', 371, 1), + (2754, 1096, 1096, 'OP_TrackingUpdateMsg', 372, 1), + (2755, 1096, 1096, 'OP_BeginTrackingMsg', 373, 1), + (2756, 1096, 1096, 'OP_StopTrackingMsg', 374, 1), + (2757, 1096, 1096, 'OP_GetAvatarAccessRequestForCSToo', 375, 1), + (2758, 1096, 1096, 'OP_AdvancementRequestMsg', 376, 1), + (2759, 1096, 1096, 'OP_UpdateAvgFrameTimeMsg', 377, 1), + (2760, 1096, 1096, 'OP_MapFogDataInitMsg', 378, 1), + (2761, 1096, 1096, 'OP_MapFogDataUpdateMsg', 379, 1), + (2762, 1096, 1096, 'OP_CloseGroupInviteWindowMsg', 380, 1), + (2763, 1096, 1096, 'OP_UpdateGroupMemberDataMsg', 381, 1), + (2764, 1096, 1096, 'OP_WorldPingMsg', 382, 1), + (2765, 1096, 1096, 'OP_MoveLogUpdateMsg', 383, 1), + (2766, 1096, 1096, 'OP_OfferQuestMsg', 384, 1), + (2767, 1096, 1096, 'OP_WorldShutdownUpdateMsg', 385, 1), + (2768, 1096, 1096, 'OP_DisplayMailScreenMsg', 386, 1), + (2769, 1096, 1096, 'OP_ClientIdleBeginMsg', 387, 1), + (2770, 1096, 1096, 'OP_ClientIdleEndMsg', 388, 1), + (2771, 1096, 1096, 'OP_PurchaseConsignmentLoreCheckRe', 389, 1), + (2772, 1096, 1096, 'OP_NotifyApprenticeStoppedMentori', 390, 1), + (2773, 1096, 1096, 'OP_CorruptedClientMsg', 391, 1), + (2774, 1096, 1096, 'OP_WorldDataChangeMsg', 392, 1), + (2775, 1096, 1096, 'OP_MailEventNotificationMsg', 393, 1), + (2776, 1096, 1096, 'OP_RestartZoneMsg', 394, 1), + (2777, 1096, 1096, 'OP_FlightPathsMsg', 395, 1), + (2778, 1096, 1096, 'OP_CharacterLinkdeadMsg', 396, 1), + (2779, 1096, 1096, 'OP_CharTransferStartRequestMsg', 397, 1), + (2780, 1096, 1096, 'OP_CharTransferStartReplyMsg', 398, 1), + (2781, 1096, 1096, 'OP_CharTransferRequestMsg', 399, 1), + (2782, 1096, 1096, 'OP_CharTransferReplyMsg', 400, 1), + (2783, 1096, 1096, 'OP_CharTransferRollbackRequestMsg', 401, 1), + (2784, 1096, 1096, 'OP_CharTransferCommitRequestMsg', 402, 1), + (2785, 1096, 1096, 'OP_CharTransferRollbackReplyMsg', 403, 1), + (2786, 1096, 1096, 'OP_CharTransferCommitReplyMsg', 404, 1), + (2787, 1096, 1096, 'OP_GetCharacterSerializedRequestM', 405, 1), + (2788, 1096, 1096, 'OP_GetCharacterSerializedReplyMsg', 406, 1), + (2789, 1096, 1096, 'OP_CreateCharFromCBBRequestMsg', 407, 1), + (2790, 1096, 1096, 'OP_CreateCharFromCBBReplyMsg', 408, 1), + (2791, 1096, 1096, 'OP_HousingDataChangedMsg', 409, 1), + (2792, 1096, 1096, 'OP_HousingRestoreMsg', 410, 1), + (2793, 1096, 1096, 'OP_AuctionItem', 411, 1), + (2794, 1096, 1096, 'OP_AuctionItemReply', 412, 1), + (2795, 1096, 1096, 'OP_AuctionCoin', 413, 1), + (2796, 1096, 1096, 'OP_AuctionCoinReply', 414, 1), + (2797, 1096, 1096, 'OP_AuctionCharacter', 415, 1), + (2798, 1096, 1096, 'OP_AuctionCharacterReply', 416, 1), + (2799, 1096, 1096, 'OP_AuctionCommitMsg', 417, 1), + (2800, 1096, 1096, 'OP_AuctionAbortMsg', 418, 1), + (2801, 1096, 1096, 'OP_CharTransferValidateRequestMsg', 419, 1), + (2802, 1096, 1096, 'OP_CharTransferValidateReplyMsg', 420, 1), + (2803, 1096, 1096, 'OP_RaceRestrictionMsg', 421, 1), + (2804, 1096, 1096, 'OP_SetInstanceDisplayNameMsg', 422, 1), + (2805, 1096, 1096, 'OP_GetAuctionAssetIDMsg', 423, 1), + (2806, 1096, 1096, 'OP_GetAuctionAssetIDReplyMsg', 424, 1), + (2807, 1096, 1096, 'OP_ResendWorldChannelsMsg', 425, 1), + (2808, 1096, 1096, 'OP_DisplayExchangeScreenMsg', 426, 1), + (2809, 1096, 1096, 'OP_ArenaGameTypesMsg', 428, 1), + (2810, 1096, 1096, 'OP_AuditAuctionEventMsg', 429, 1), + (2811, 1096, 1096, 'OP_InviteRequestMsg', 431, 1), + (2812, 1096, 1096, 'OP_InviteResponseMsg', 432, 1), + (2813, 1096, 1096, 'OP_InviteTargetResponseMsg', 433, 1), + (2814, 1096, 1096, 'OP_InspectPlayerRequestMsg', 434, 1), + (2815, 1096, 1096, 'OP_DispatchMsg', 435, 1), + (2816, 1096, 1096, 'OP_DisplayEventMsg', 436, 1), + (2817, 1096, 1096, 'OP_PrePossessionMsg', 437, 1), + (2818, 1096, 1096, 'OP_PostPossessionMsg', 438, 1), + (2819, 1096, 1096, 'OP_AdventureList', 470, 1), + (2820, 1096, 1096, 'OP_CancelSpellCast', 471, 1), + (2821, 1096, 1096, 'OP_UpdateTitleCmd', 476, 1), + (2822, 1096, 1096, 'OP_AttackAllowed', 482, 1), + (2823, 1096, 1096, 'OP_AttackNotAllowed', 483, 1), + (2824, 1096, 1096, 'OP_DressingRoom', 492, 1), + (2825, 1096, 1096, 'OP_SkillInfoRequest', 496, 1), + (2826, 1096, 1096, 'OP_SkillInfoResponse', 497, 1), + (2827, 1096, 1096, 'OP_BadLanguageFilter', 501, 1), + (2828, 1096, 1096, 'OP_MapRequest', 503, 1), + (2829, 1096, 1096, 'OP_Unknown', 509, 1), + (2830, 1096, 1096, 'OP_EqUnknown', 541, 1), + (2831, 1096, 1096, 'OP_EqHearChatCmd', 543, 1), + (2832, 1096, 1096, 'OP_EqDisplayTextCmd', 544, 1), + (2833, 1096, 1096, 'OP_EqCreateGhostCmd', 545, 1), + (2834, 1096, 1096, 'OP_EqCreateWidgetCmd', 546, 1), + (2835, 1096, 1096, 'OP_EqCreateSignWidgetCmd', 547, 1), + (2836, 1096, 1096, 'OP_EqDestroyGhostCmd', 548, 1), + (2837, 1096, 1096, 'OP_EqUpdateGhostCmd', 549, 1), + (2838, 1096, 1096, 'OP_EqSetControlGhostCmd', 550, 1), + (2839, 1096, 1096, 'OP_EqSetPOVGhostCmd', 551, 1), + (2840, 1096, 1096, 'OP_EqHearCombatCmd', 552, 1), + (2841, 1096, 1096, 'OP_EqHearSpellCastCmd', 553, 1), + (2842, 1096, 1096, 'OP_EqHearSpellInterruptCmd', 556, 1), + (2843, 1096, 1096, 'OP_EqHearSpellFizzleCmd', 557, 1), + (2844, 1096, 1096, 'OP_EqHearConsiderCmd', 558, 1), + (2845, 1096, 1096, 'OP_EqUpdateSubClassesCmd', 559, 1), + (2846, 1096, 1096, 'OP_EqCreateListBoxCmd', 560, 1), + (2847, 1096, 1096, 'OP_EqSetDebugPathPointsCmd', 561, 1), + (2848, 1096, 1096, 'OP_EqCannedEmoteCmd', 563, 1), + (2849, 1096, 1096, 'OP_EqStateCmd', 564, 1), + (2850, 1096, 1096, 'OP_EqPlaySoundCmd', 565, 1), + (2851, 1096, 1096, 'OP_EqPlaySound3DCmd', 566, 1), + (2852, 1096, 1096, 'OP_EqPlayVoiceCmd', 567, 1), + (2853, 1096, 1096, 'OP_EqHearDrowningCmd', 568, 1), + (2854, 1096, 1096, 'OP_EqHearDeathCmd', 569, 1), + (2855, 1096, 1096, 'OP_EqGroupMemberRemovedCmd', 570, 1), + (2856, 1096, 1096, 'OP_EqHearChainEffectCmd', 571, 1), + (2857, 1096, 1096, 'OP_EqReceiveOfferCmd', 572, 1), + (2858, 1096, 1096, 'OP_EqInspectPCResultsCmd', 573, 1), + (2859, 1096, 1096, 'OP_EqDrawablePathGraphCmd', 574, 1), + (2860, 1096, 1096, 'OP_EqDialogOpenCmd', 575, 1), + (2861, 1096, 1096, 'OP_EqDialogCloseCmd', 576, 1), + (2862, 1096, 1096, 'OP_EqFactionUpdateCmd', 577, 1), + (2863, 1096, 1096, 'OP_EqCollectionUpdateCmd', 578, 1), + (2864, 1096, 1096, 'OP_EqCollectionFilterCmd', 579, 1), + (2865, 1096, 1096, 'OP_EqCollectionItemCmd', 580, 1), + (2866, 1096, 1096, 'OP_EqQuestJournalUpdateCmd', 581, 1), + (2867, 1096, 1096, 'OP_EqQuestJournalReplyCmd', 583, 1), + (2868, 1096, 1096, 'OP_EqQuestGroupCmd', 584, 1), + (2869, 1096, 1096, 'OP_EqUpdateMerchantCmd', 585, 1), + (2870, 1096, 1096, 'OP_EqUpdateStoreCmd', 586, 1), + (2871, 1096, 1096, 'OP_EqUpdatePlayerTradeCmd', 587, 1), + (2872, 1096, 1096, 'OP_EqHelpPathCmd', 588, 1), + (2873, 1096, 1096, 'OP_EqHelpPathClearCmd', 589, 1), + (2874, 1096, 1096, 'OP_EqUpdateBankCmd', 590, 1), + (2875, 1096, 1096, 'OP_EqExamineInfoCmd', 591, 1), + (2876, 1096, 1096, 'OP_EqCloseWindowCmd', 592, 1), + (2877, 1096, 1096, 'OP_EqUpdateLootCmd', 593, 1), + (2878, 1096, 1096, 'OP_EqJunctionListCmd', 594, 1), + (2879, 1096, 1096, 'OP_EqShowDeathWindowCmd', 595, 1), + (2880, 1096, 1096, 'OP_EqDisplaySpellFailCmd', 596, 1), + (2881, 1096, 1096, 'OP_EqSpellCastStartCmd', 597, 1), + (2882, 1096, 1096, 'OP_EqSpellCastEndCmd', 598, 1), + (2883, 1096, 1096, 'OP_EqResurrectedCmd', 599, 1), + (2884, 1096, 1096, 'OP_EqChoiceWinCmd', 600, 1), + (2885, 1096, 1096, 'OP_EqSetDefaultVerbCmd', 601, 1), + (2886, 1096, 1096, 'OP_EqInstructionWindowCmd', 603, 1), + (2887, 1096, 1096, 'OP_EqInstructionWindowCloseCmd', 604, 1), + (2888, 1096, 1096, 'OP_EqInstructionWindowGoalCmd', 605, 1), + (2889, 1096, 1096, 'OP_EqInstructionWindowTaskCmd', 606, 1), + (2890, 1096, 1096, 'OP_EqEnableGameEventCmd', 607, 1), + (2891, 1096, 1096, 'OP_EqShowWindowCmd', 608, 1), + (2892, 1096, 1096, 'OP_EqEnableWindowCmd', 609, 1), + (2893, 1096, 1096, 'OP_EqFlashWindowCmd', 610, 1), + (2894, 1096, 1096, 'OP_EqHearPlayFlavorCmd', 611, 1), + (2895, 1096, 1096, 'OP_EqUpdateSignWidgetCmd', 613, 1), + (2896, 1096, 1096, 'OP_EqDebugPVDCmd', 614, 1), + (2897, 1096, 1096, 'OP_EqShowBookCmd', 614, 1), + (2898, 1096, 1096, 'OP_EqQuestionnaireCmd', 616, 1), + (2899, 1096, 1096, 'OP_EqGetProbsCmd', 617, 1), + (2900, 1096, 1096, 'OP_EqHearHealCmd', 618, 1), + (2901, 1096, 1096, 'OP_EqChatChannelUpdateCmd', 619, 1), + (2902, 1096, 1096, 'OP_EqWhoChannelQueryReplyCmd', 620, 1), + (2903, 1096, 1096, 'OP_EqAvailWorldChannelsCmd', 621, 1), + (2904, 1096, 1096, 'OP_EqUpdateTargetCmd', 622, 1), + (2905, 1096, 1096, 'OP_EqConsignmentItemsCmd', 624, 1), + (2906, 1096, 1096, 'OP_EqStartBrokerCmd', 626, 1), + (2907, 1096, 1096, 'OP_EqMapExplorationCmd', 627, 1), + (2908, 1096, 1096, 'OP_EqStoreLogCmd', 628, 1), + (2909, 1096, 1096, 'OP_EqSpellMoveToRangeAndRetryCmd', 629, 1), + (2910, 1096, 1096, 'OP_EqUpdatePlayerMailCmd', 630, 1), + (2911, 1096, 1096, 'OP_EqArenaResultsCmd', 631, 1), + (2912, 1096, 1096, 'OP_EqGuildBankEventActionCmd', 632, 1), + (2913, 1096, 1096, 'OP_EqGuildBankExamineInfoCmd', 633, 1), + (2914, 1096, 1096, 'OP_EqHearSpellNoLandCmd', 634, 1), + (2915, 1096, 1096, 'OP_GuildList', 637, 1), + (2916, 1096, 1096, 'OP_Lottery', 638, 1), + (2917, 1096, 1096, 'OP_GuildRecruitingMemberInfo', 639, 1), + (2918, 1096, 1096, 'OP_GuildRecruiting', 640, 1), + (2919, 1096, 1096, 'OP_GuildRecruitingDetails', 641, 1), + (2920, 1096, 1096, 'OP_GuildRecruitingImage', 642, 1), + (2921, 1096, 1096, 'OP_TradeskillList', 659, 1), + (2922, 1096, 1096, 'OP_PointOfInterest', 663, 1), + (2923, 1096, 1096, 'OP_TraitsList', 665, 1), + (2924, 1096, 1096, 'OP_RecipeList', 674, 1), + (2925, 1096, 1096, 'OP_CharacterAchievements', 677, 1), + (2926, 1096, 1096, 'OP_AddClientToGroupMsg', 999, 1), + (2927, 1096, 1096, 'OP_AddGroupToGroupMsg', 1000, 1), + (2928, 1096, 1096, 'OP_WSWeatherUpdateMsg', 1001, 1), + (2929, 1096, 1096, 'OP_SkillSlotMapping', 1002, 1), + (2930, 1096, 1096, 'OP_GuildKickMsg', 1003, 1), + (2931, 1096, 1096, 'OP_PurchaseConsignmentResponseMsg', 1004, 1), + (2932, 1096, 1096, 'OP_ProcessScriptMsg', 1005, 1), + (2933, 1096, 1096, 'OP_ProcessWorkspaceMsg', 1006, 1), + (2934, 1096, 1096, 'OP_QuickbarAddMsg', 1007, 1), + (2935, 0, 0, 'OP_BagOptions', 999, 1), + (2936, 839, 844, 'OP_BagOptions', 999, 1), + (2937, 908, 927, 'OP_BagOptions', 999, 1), + (2938, 1008, 1011, 'OP_BagOptions', 999, 1), + (2939, 1045, 1046, 'OP_BagOptions', 999, 1), + (2940, 1096, 1096, 'OP_BagOptions', 999, 1), + (2941, 0, 0, 'OP_AchievementUpdateMsg', 999, 1), + (2942, 839, 844, 'OP_AchievementUpdateMsg', 999, 1), + (2943, 908, 927, 'OP_AchievementUpdateMsg', 999, 1), + (2944, 1008, 1011, 'OP_AchievementUpdateMsg', 999, 1), + (2945, 1045, 1046, 'OP_AchievementUpdateMsg', 999, 1), + (2946, 1096, 1096, 'OP_AchievementUpdateMsg', 678, 1), + (2947, 1096, 1096, 'OP_PetOptions', 187, 1), + (2948, 1045, 1046, 'OP_PetOptions', 999, 1), + (2949, 1008, 1011, 'OP_PetOptions', 999, 1), + (2950, 908, 927, 'OP_PetOptions', 999, 1), + (2951, 839, 844, 'OP_PetOptions', 999, 1), + (2952, 0, 0, 'OP_PetOptions', 999, 1), + (2953, 1193, 1195, 'OP_LoginRequestMsg', 0, 1), + (2954, 1193, 1195, 'OP_LoginByNumRequestMsg', 1, 1), + (2955, 1193, 1195, 'OP_WSLoginRequestMsg', 2, 1), + (2956, 1193, 1195, 'OP_ESLoginRequestMsg', 3, 1), + (2957, 1193, 1195, 'OP_LoginReplyMsg', 4, 1), + (2958, 1193, 1195, 'OP_WSStatusReplyMsg', 5, 1), + (2959, 1193, 1195, 'OP_WorldStatusChangeMsg', 6, 1), + (2960, 1193, 1195, 'OP_AllWSDescRequestMsg', 7, 1), + (2961, 1193, 1195, 'OP_WorldListMsg', 8, 1), + (2962, 1193, 1195, 'OP_AllCharactersDescRequestMsg', 9, 1), + (2963, 1193, 1195, 'OP_AllCharactersDescReplyMsg', 10, 1), + (2964, 1193, 1195, 'OP_CreateCharacterRequestMsg', 11, 1), + (2965, 1193, 1195, 'OP_CreateCharacterReplyMsg', 12, 1), + (2966, 1193, 1195, 'OP_WSCreateCharacterRequestMsg', 13, 1), + (2967, 1193, 1195, 'OP_WSCreateCharacterReplyMsg', 14, 1), + (2968, 1193, 1195, 'OP_ReskinCharacterRequestMsg', 15, 1), + (2969, 1193, 1195, 'OP_DeleteCharacterRequestMsg', 16, 1), + (2970, 1193, 1195, 'OP_DeleteCharacterReplyMsg', 17, 1), + (2971, 1193, 1195, 'OP_PlayCharacterRequestMsg', 18, 1), + (2972, 1193, 1195, 'OP_PlayCharacterReplyMsg', 19, 1), + (2973, 1193, 1195, 'OP_ExpectClientAsCharacterReplyMs', 22, 1), + (2974, 1193, 1195, 'OP_ServerPlayCharacterRequestMsg', 23, 1), + (2975, 1193, 1195, 'OP_ServerPlayCharacterReplyMsg', 24, 1), + (2976, 1193, 1195, 'OP_ESInitMsg', 25, 1), + (2977, 1193, 1195, 'OP_ESReadyForClientsMsg', 26, 1), + (2978, 1193, 1195, 'OP_CreateZoneInstanceMsg', 29, 1), + (2979, 1193, 1195, 'OP_ZoneInstanceCreateReplyMsg', 30, 1), + (2980, 1193, 1195, 'OP_ZoneInstanceDestroyedMsg', 31, 1), + (2981, 1193, 1195, 'OP_ExpectClientAsCharacterRequest', 32, 1), + (2982, 1193, 1195, 'OP_ZoneInfoMsg', 33, 1), + (2983, 1193, 1195, 'OP_DoneLoadingZoneResourcesMsg', 34, 1), + (2984, 1193, 1195, 'OP_DoneSendingInitialEntitiesMsg', 35, 1), + (2985, 1193, 1195, 'OP_DoneLoadingEntityResourcesMsg', 36, 1), + (2986, 1193, 1195, 'OP_PredictionUpdateMsg', 37, 1), + (2987, 1193, 1195, 'OP_UpdatePositionMsg', 39, 1), + (2988, 1193, 1195, 'OP_SetRemoteCmdsMsg', 41, 1), + (2989, 1193, 1195, 'OP_RemoteCmdMsg', 42, 1), + (2990, 1193, 1195, 'OP_GameWorldTimeMsg', 43, 1), + (2991, 1193, 1195, 'OP_MOTDMsg', 44, 1), + (2992, 1193, 1195, 'OP_ZoneMOTDMsg', 45, 1), + (2993, 1193, 1195, 'OP_AvatarCreatedMsg', 46, 1), + (2994, 1193, 1195, 'OP_AvatarDestroyedMsg', 47, 1), + (2995, 1193, 1195, 'OP_RequestCampMsg', 50, 1), + (2996, 1193, 1195, 'OP_CampStartedMsg', 51, 1), + (2997, 1193, 1195, 'OP_CampAbortedMsg', 52, 1), + (2998, 1193, 1195, 'OP_WhoQueryRequestMsg', 53, 1), + (2999, 1193, 1195, 'OP_WhoQueryReplyMsg', 54, 1), + (3000, 1193, 1195, 'OP_MonitorReplyMsg', 55, 1), + (3001, 1193, 1195, 'OP_MonitorCharacterListMsg', 56, 1), + (3002, 1193, 1195, 'OP_MonitorCharacterListRequestMsg', 57, 1), + (3003, 1193, 1195, 'OP_ClientCmdMsg', 58, 1), + (3004, 1193, 1195, 'OP_DispatchESMsg', 59, 1), + (3005, 1193, 1195, 'OP_DispatchClientCmdMsg', 60, 1), + (3006, 1193, 1195, 'OP_UpdateTargetMsg', 61, 1), + (3007, 1193, 1195, 'OP_UpdateTargetLocMsg', 62, 1), + (3008, 1193, 1195, 'OP_UpdateCharacterSheetMsg', 63, 1), + (3009, 1193, 1195, 'OP_CharacterPet', 64, 1), + (3010, 1193, 1195, 'OP_CharacterMerc', 65, 1), + (3011, 1193, 1195, 'OP_UpdateSpellBookMsg', 66, 1), + (3012, 1193, 1195, 'OP_UpdateInventoryMsg', 68, 1), + (3013, 1193, 1195, 'OP_AfterInvSpellUpdate', 69, 1), + (3014, 1193, 1195, 'OP_UpdateRecipeBookMsg', 70, 1), + (3015, 1193, 1195, 'OP_RequestRecipeDetailsMsg', 71, 1), + (3016, 1193, 1195, 'OP_RecipeDetailsMsg', 72, 1), + (3017, 1193, 1195, 'OP_UpdateSkillBookMsg', 73, 1), + (3018, 1193, 1195, 'OP_UpdateSkillsMsg', 74, 1), + (3019, 1193, 1195, 'OP_UpdateOpportunityMsg', 75, 1), + (3020, 1193, 1195, 'OP_ChangeZoneMsg', 77, 1), + (3021, 1193, 1195, 'OP_ClientTeleportRequestMsg', 78, 1), + (3022, 1193, 1195, 'OP_TeleportWithinZoneMsg', 79, 1), + (3023, 1193, 1195, 'OP_TeleportWithinZoneNoReloadMsg', 80, 1), + (3024, 1193, 1195, 'OP_MigrateClientToZoneRequestMsg', 81, 1), + (3025, 1193, 1195, 'OP_MigrateClientToZoneReplyMsg', 82, 1), + (3026, 1193, 1195, 'OP_ReadyToZoneMsg', 84, 1), + (3027, 1193, 1195, 'OP_RemoveClientFromGroupMsg', 85, 1), + (3028, 1193, 1195, 'OP_RemoveGroupFromGroupMsg', 86, 1), + (3029, 1193, 1195, 'OP_MakeGroupLeaderMsg', 87, 1), + (3030, 1193, 1195, 'OP_GroupCreatedMsg', 88, 1), + (3031, 1193, 1195, 'OP_GroupDestroyedMsg', 89, 1), + (3032, 1193, 1195, 'OP_GroupMemberAddedMsg', 90, 1), + (3033, 1193, 1195, 'OP_GroupMemberRemovedMsg', 91, 1), + (3034, 1193, 1195, 'OP_GroupRemovedFromGroupMsg', 92, 1), + (3035, 1193, 1195, 'OP_GroupLeaderChangedMsg', 93, 1), + (3036, 1193, 1195, 'OP_GroupResendOOZDataMsg', 94, 1), + (3037, 1193, 1195, 'OP_GroupSettingsChangedMsg', 95, 1), + (3038, 1193, 1195, 'OP_OutOfZoneMemberDataMsg', 96, 1), + (3039, 1193, 1195, 'OP_SendLatestRequestMsg', 97, 1), + (3040, 1193, 1195, 'OP_ClearDataMsg', 98, 1), + (3041, 1193, 1195, 'OP_SetSocialMsg', 99, 1), + (3042, 1193, 1195, 'OP_ESStatusMsg', 100, 1), + (3043, 1193, 1195, 'OP_ESZoneInstanceStatusMsg', 101, 1), + (3044, 1193, 1195, 'OP_ZonesStatusRequestMsg', 102, 1), + (3045, 1193, 1195, 'OP_ZonesStatusMsg', 103, 1), + (3046, 1193, 1195, 'OP_ESWeatherRequestMsg', 104, 1), + (3047, 1193, 1195, 'OP_ESWeatherRequestEndMsg', 105, 1), + (3048, 1193, 1195, 'OP_DialogSelectMsg', 109, 1), + (3049, 1193, 1195, 'OP_DialogCloseMsg', 110, 1), + (3050, 1193, 1195, 'OP_RemoveSpellEffectMsg', 111, 1), + (3051, 1193, 1195, 'OP_RemoveConcentrationMsg', 112, 1), + (3052, 1193, 1195, 'OP_QuestJournalOpenMsg', 113, 1), + (3053, 1193, 1195, 'OP_QuestJournalInspectMsg', 114, 1), + (3054, 1193, 1195, 'OP_QuestJournalSetVisibleMsg', 115, 1), + (3055, 1193, 1195, 'OP_QuestJournalWaypointMsg', 116, 1), + (3056, 1193, 1195, 'OP_CreateGuildRequestMsg', 119, 1), + (3057, 1193, 1195, 'OP_CreateGuildReplyMsg', 120, 1), + (3058, 1193, 1195, 'OP_GuildsayMsg', 121, 1), + (3059, 1193, 1195, 'OP_FellowshipExpMsg', 122, 1), + (3060, 1193, 1195, 'OP_DeleteGuildMsg', 123, 1), + (3061, 1193, 1195, 'OP_GuildUpdateMsg', 124, 1), + (3062, 1193, 1195, 'OP_ConsignmentCloseStoreMsg', 125, 1), + (3063, 1193, 1195, 'OP_ConsignItemRequestMsg', 126, 1), + (3064, 1193, 1195, 'OP_ConsignItemResponseMsg', 127, 1), + (3065, 1193, 1195, 'OP_PurchaseConsignmentRequestMsg', 128, 1), + (3066, 1193, 1195, 'OP_LikeOption', 135, 1), + (3067, 1193, 1195, 'OP_PublishHouse', 137, 1), + (3068, 1193, 1195, 'OP_PlayerMadeInstacnesScreen', 138, 1), + (3069, 1193, 1195, 'OP_PlayerMadeInstances', 139, 1), + (3070, 1193, 1195, 'OP_HouseDeletedRemotelyMsg', 140, 1), + (3071, 1193, 1195, 'OP_UpdateHouseDataMsg', 141, 1), + (3072, 1193, 1195, 'OP_UpdateHouseAccessDataMsg', 142, 1), + (3073, 1193, 1195, 'OP_PlayerHouseBaseScreenMsg', 143, 1), + (3074, 1193, 1195, 'OP_PlayerHousePurchaseScreenMsg', 144, 1), + (3075, 1193, 1195, 'OP_PlayerHouseAccessUpdateMsg', 145, 1), + (3076, 1193, 1195, 'OP_PlayerHouseDisplayStatusMsg', 146, 1), + (3077, 1193, 1195, 'OP_PlayerHouseCloseUIMsg', 147, 1), + (3078, 1193, 1195, 'OP_BuyPlayerHouseMsg', 148, 1), + (3079, 1193, 1195, 'OP_BuyPlayerHouseTintMsg', 149, 1), + (3080, 1193, 1195, 'OP_CollectAllHouseItemsMsg', 150, 1), + (3081, 1193, 1195, 'OP_RelinquishHouseMsg', 151, 1), + (3082, 1193, 1195, 'OP_EnterHouseMsg', 152, 1), + (3083, 1193, 1195, 'OP_ExitHouseMsg', 153, 1), + (3084, 1193, 1195, 'OP_HouseDefaultAccessSetMsg', 154, 1), + (3085, 1193, 1195, 'OP_HouseAccessSetMsg', 155, 1), + (3086, 1193, 1195, 'OP_HouseAccessRemoveMsg', 156, 1), + (3087, 1193, 1195, 'OP_PayHouseUpkeepMsg', 157, 1), + (3088, 1193, 1195, 'OP_MoveableObjectPlacementCriteri', 158, 1), + (3089, 1193, 1195, 'OP_EnterMoveObjectModeMsg', 159, 1), + (3090, 1193, 1195, 'OP_PositionMoveableObject', 160, 1), + (3091, 1193, 1195, 'OP_CancelMoveObjectModeMsg', 161, 1), + (3092, 1193, 1195, 'OP_ShaderCustomizationMsg', 162, 1), + (3093, 1193, 1195, 'OP_ReplaceableSubMeshesMsg', 163, 1), + (3094, 1193, 1195, 'OP_HouseCustomizationScreenMsg', 164, 1), + (3095, 1193, 1195, 'OP_CustomizationPurchaseRequestMs', 165, 1), + (3096, 1193, 1195, 'OP_CustomizationSetRequestMsg', 166, 1), + (3097, 1193, 1195, 'OP_CustomizationReplyMsg', 167, 1), + (3098, 1193, 1195, 'OP_TintWidgetsMsg', 168, 1), + (3099, 1193, 1195, 'OP_ExamineConsignmentRequestMsg', 169, 1), + (3100, 1193, 1195, 'OP_ExamineConsignmentResponseMsg', 170, 1), + (3101, 1193, 1195, 'OP_UISettingsResponseMsg', 171, 1), + (3102, 1193, 1195, 'OP_UIResetMsg', 172, 1), + (3103, 1193, 1195, 'OP_KeymapLoadMsg', 173, 1), + (3104, 1193, 1195, 'OP_KeymapNoneMsg', 174, 1), + (3105, 1193, 1195, 'OP_KeymapDataMsg', 175, 1), + (3106, 1193, 1195, 'OP_KeymapSaveMsg', 176, 1), + (3107, 1193, 1195, 'OP_DispatchSpellCmdMsg', 177, 1), + (3108, 1193, 1195, 'OP_EntityVerbsRequestMsg', 178, 1), + (3109, 1193, 1195, 'OP_EntityVerbsReplyMsg', 179, 1), + (3110, 1193, 1195, 'OP_EntityVerbsVerbMsg', 180, 1), + (3111, 1193, 1195, 'OP_ChatRelationshipUpdateMsg', 182, 1), + (3112, 1193, 1195, 'OP_LootItemsRequestMsg', 183, 1), + (3113, 1193, 1195, 'OP_StoppedLootingMsg', 184, 1), + (3114, 1193, 1195, 'OP_SitMsg', 185, 1), + (3115, 1193, 1195, 'OP_StandMsg', 186, 1), + (3116, 1193, 1195, 'OP_SatMsg', 187, 1), + (3117, 1193, 1195, 'OP_StoodMsg', 188, 1), + (3118, 1193, 1195, 'OP_ClearForTakeOffMsg', 189, 1), + (3119, 1193, 1195, 'OP_ReadyForTakeOffMsg', 190, 1), + (3120, 1193, 1195, 'OP_ShowIllusionsMsg', 191, 1), + (3121, 1193, 1195, 'OP_HideIllusionsMsg', 192, 1), + (3122, 1193, 1195, 'OP_ExamineItemRequestMsg', 193, 1), + (3123, 1193, 1195, 'OP_ReadBookPageMsg', 194, 1), + (3124, 1193, 1195, 'OP_DefaultGroupOptionsRequestMsg', 195, 1), + (3125, 1193, 1195, 'OP_DefaultGroupOptionsMsg', 196, 1), + (3126, 1193, 1195, 'OP_GroupOptionsMsg', 197, 1), + (3127, 1193, 1195, 'OP_DisplayGroupOptionsScreenMsg', 198, 1), + (3128, 1193, 1195, 'OP_PetOptions', 199, 1), + (3129, 1193, 1195, 'OP_DisplayInnVisitScreenMsg', 200, 1), + (3130, 1193, 1195, 'OP_DumpSchedulerMsg', 201, 1), + (3131, 1193, 1195, 'OP_LSCheckAcctLockMsg', 202, 1), + (3132, 1193, 1195, 'OP_WSAcctLockStatusMsg', 203, 1), + (3133, 1193, 1195, 'OP_RequestHelpRepathMsg', 204, 1), + (3134, 1193, 1195, 'OP_RequestTargetLocMsg', 205, 1), + (3135, 1193, 1195, 'OP_UpdateMotdMsg', 206, 1), + (3136, 1193, 1195, 'OP_DestUpdateReq', 208, 1), + (3137, 1193, 1195, 'OP_PerformPlayerKnockbackMsg', 211, 1), + (3138, 1193, 1195, 'OP_PerformCameraShakeMsg', 212, 1), + (3139, 1193, 1195, 'OP_PopulateSkillMapsMsg', 213, 1), + (3140, 1193, 1195, 'OP_CancelledFeignMsg', 214, 1), + (3141, 1193, 1195, 'OP_SysClient', 216, 1), + (3142, 1193, 1195, 'OP_ShowCreateFromRecipeUIMsg', 217, 1), + (3143, 1193, 1195, 'OP_CancelCreateFromRecipeMsg', 218, 1), + (3144, 1193, 1195, 'OP_BeginItemCreationMsg', 219, 1), + (3145, 1193, 1195, 'OP_StopItemCreationMsg', 220, 1), + (3146, 1193, 1195, 'OP_ShowItemCreationProcessUIMsg', 221, 1), + (3147, 1193, 1195, 'OP_UpdateItemCreationProcessUIMsg', 222, 1), + (3148, 1193, 1195, 'OP_DisplayTSEventReactionMsg', 223, 1), + (3149, 1193, 1195, 'OP_ShowRecipeBookMsg', 224, 1), + (3150, 1193, 1195, 'OP_KnowledgebaseRequestMsg', 225, 1), + (3151, 1193, 1195, 'OP_KnowledgebaseResponseMsg', 226, 1), + (3152, 1193, 1195, 'OP_CSTicketHeaderRequestMsg', 227, 1), + (3153, 1193, 1195, 'OP_CSTicketInfoMsg', 228, 1), + (3154, 1193, 1195, 'OP_CSTicketCommentRequestMsg', 229, 1), + (3155, 1193, 1195, 'OP_CSTicketCommentResponseMsg', 230, 1), + (3156, 1193, 1195, 'OP_CSTicketCreateMsg', 231, 1), + (3157, 1193, 1195, 'OP_CSTicketAddCommentMsg', 232, 1), + (3158, 1193, 1195, 'OP_CSTicketDeleteMsg', 233, 1), + (3159, 1193, 1195, 'OP_CSTicketChangeNotificationMsg', 234, 1), + (3160, 1193, 1195, 'OP_WorldDataUpdateMsg', 235, 1), + (3161, 1193, 1195, 'OP_KnownLanguagesMsg', 236, 1), + (3162, 1193, 1195, 'OP_LsRequestClientCrashLogMsg', 237, 1), + (3163, 1193, 1195, 'OP_LsClientBaselogReplyMsg', 238, 1), + (3164, 1193, 1195, 'OP_LsClientCrashlogReplyMsg', 239, 1), + (3165, 1193, 1195, 'OP_LsClientAlertlogReplyMsg', 240, 1), + (3166, 1193, 1195, 'OP_LsClientVerifylogReplyMsg', 241, 1), + (3167, 1193, 1195, 'OP_ClientTeleportToLocationMsg', 242, 1), + (3168, 1193, 1195, 'OP_UpdateClientPredFlagsMsg', 243, 1), + (3169, 1193, 1195, 'OP_ChangeServerControlFlagMsg', 244, 1), + (3170, 1193, 1195, 'OP_CSToolsRequestMsg', 245, 1), + (3171, 1193, 1195, 'OP_CSToolsResponseMsg', 246, 1), + (3172, 1193, 1195, 'OP_AddSocialStructureStandingMsg', 247, 1), + (3173, 1193, 1195, 'OP_CreateBoatTransportsMsg', 248, 1), + (3174, 1193, 1195, 'OP_PositionBoatTransportMsg', 249, 1), + (3175, 1193, 1195, 'OP_MigrateBoatTransportMsg', 250, 1), + (3176, 1193, 1195, 'OP_MigrateBoatTransportReplyMsg', 251, 1), + (3177, 1193, 1195, 'OP_DisplayDebugNLLPointsMsg', 252, 1), + (3178, 1193, 1195, 'OP_ExamineInfoRequestMsg', 253, 1), + (3179, 1193, 1195, 'OP_QuickbarInitMsg', 254, 1), + (3180, 1193, 1195, 'OP_QuickbarUpdateMsg', 255, 1), + (3181, 1193, 1195, 'OP_MacroInitMsg', 256, 1), + (3182, 1193, 1195, 'OP_MacroUpdateMsg', 257, 1), + (3183, 1193, 1195, 'OP_QuestionnaireMsg', 258, 1), + (3184, 1193, 1195, 'OP_LevelChangedMsg', 259, 1), + (3185, 1193, 1195, 'OP_SpellGainedMsg', 260, 1), + (3186, 1193, 1195, 'OP_EncounterBrokenMsg', 261, 1), + (3187, 1193, 1195, 'OP_OnscreenMsgMsg', 262, 1), + (3188, 1193, 1195, 'OP_DisplayWarningMsg', 263, 1), + (3189, 1193, 1195, 'OP_ModifyGuildMsg', 264, 1), + (3190, 1193, 1195, 'OP_GuildEventMsg', 265, 1), + (3191, 1193, 1195, 'OP_GuildEventAddMsg', 266, 1), + (3192, 1193, 1195, 'OP_GuildEventActionMsg', 267, 1), + (3193, 1193, 1195, 'OP_GuildEventListMsg', 268, 1), + (3194, 1193, 1195, 'OP_RequestGuildEventDetailsMsg', 269, 1), + (3195, 1193, 1195, 'OP_GuildEventDetailsMsg', 270, 1), + (3196, 1193, 1195, 'OP_RequestGuildInfoMsg', 271, 1), + (3197, 1193, 1195, 'OP_GuildBankActionMsg', 272, 1), + (3198, 1193, 1195, 'OP_GuildBankActionResponseMsg', 273, 1), + (3199, 1193, 1195, 'OP_GuildBankItemDetailsRequestMsg', 274, 1), + (3200, 1193, 1195, 'OP_GuildBankItemDetailsResponseMs', 275, 1), + (3201, 1193, 1195, 'OP_GuildBankUpdateMsg', 276, 1), + (3202, 1193, 1195, 'OP_GuildBankEventListMsg', 277, 1), + (3203, 1193, 1195, 'OP_RequestGuildBankEventDetailsMs', 278, 1), + (3204, 1193, 1195, 'OP_RewardPackMsg', 279, 1), + (3205, 1193, 1195, 'OP_RenameGuildMsg', 280, 1), + (3206, 1193, 1195, 'OP_ZoneToFriendRequestMsg', 281, 1), + (3207, 1193, 1195, 'OP_ZoneToFriendReplyMsg', 282, 1), + (3208, 1193, 1195, 'OP_ChatCreateChannelMsg', 283, 1), + (3209, 1193, 1195, 'OP_ChatJoinChannelMsg', 284, 1), + (3210, 1193, 1195, 'OP_ChatWhoChannelMsg', 285, 1), + (3211, 1193, 1195, 'OP_ChatLeaveChannelMsg', 286, 1), + (3212, 1193, 1195, 'OP_ChatTellChannelMsg', 287, 1), + (3213, 1193, 1195, 'OP_ChatTellUserMsg', 288, 1), + (3214, 1193, 1195, 'OP_ChatToggleFriendMsg', 289, 1), + (3215, 1193, 1195, 'OP_BrokerAddBag', 290, 1), + (3216, 1193, 1195, 'OP_BrokerRemoveBag', 291, 1), + (3217, 1193, 1195, 'OP_ChatToggleIgnoreMsg', 292, 1), + (3218, 1193, 1195, 'OP_ChatSendFriendsMsg', 293, 1), + (3219, 1193, 1195, 'OP_ChatSendIgnoresMsg', 294, 1), + (3220, 1193, 1195, 'OP_QuestReward', 318, 1), + (3221, 1193, 1195, 'OP_ChatFiltersMsg', 333, 1), + (3222, 1193, 1195, 'OP_MailGetMessageMsg', 336, 1), + (3223, 1193, 1195, 'OP_MailSendMessageMsg', 337, 1), + (3224, 1193, 1195, 'OP_MailDeleteMessageMsg', 338, 1), + (3225, 1193, 1195, 'OP_MailGetHeadersReplyMsg', 339, 1), + (3226, 1193, 1195, 'OP_MailGetMessageReplyMsg', 340, 1), + (3227, 1193, 1195, 'OP_MailSendMessageReplyMsg', 341, 1), + (3228, 1193, 1195, 'OP_MailCommitSendMessageMsg', 342, 1), + (3229, 1193, 1195, 'OP_MailSendSystemMessageMsg', 343, 1), + (3230, 1193, 1195, 'OP_MailRemoveAttachFromMailMsg', 344, 1), + (3231, 1193, 1195, 'OP_WaypointRequestMsg', 346, 1), + (3232, 1193, 1195, 'OP_WaypointReplyMsg', 347, 1), + (3233, 1193, 1195, 'OP_WaypointSelectMsg', 348, 1), + (3234, 1193, 1195, 'OP_WaypointUpdateMsg', 349, 1), + (3235, 1193, 1195, 'OP_CharNameChangedMsg', 350, 1), + (3236, 1193, 1195, 'OP_ShowZoneTeleporterDestinations', 351, 1), + (3237, 1193, 1195, 'OP_SelectZoneTeleporterDestinatio', 352, 1), + (3238, 1193, 1195, 'OP_ReloadLocalizedTxtMsg', 353, 1), + (3239, 1193, 1195, 'OP_RequestGuildMembershipMsg', 354, 1), + (3240, 1193, 1195, 'OP_GuildMembershipResponseMsg', 355, 1), + (3241, 1193, 1195, 'OP_LeaveGuildNotifyMsg', 356, 1), + (3242, 1193, 1195, 'OP_JoinGuildNotifyMsg', 357, 1), + (3243, 1193, 1195, 'OP_AvatarUpdateMsg', 358, 1), + (3244, 1193, 1195, 'OP_BioUpdateMsg', 360, 1), + (3245, 1193, 1195, 'OP_InspectPlayerMsg', 361, 1), + (3246, 1193, 1195, 'OP_WSServerLockMsg', 362, 1), + (3247, 1193, 1195, 'OP_LSServerLockMsg', 363, 1), + (3248, 1193, 1195, 'OP_WSServerHideMsg', 364, 1), + (3249, 1193, 1195, 'OP_CsCategoryRequestMsg', 365, 1), + (3250, 1193, 1195, 'OP_CsCategoryResponseMsg', 366, 1), + (3251, 1193, 1195, 'OP_KnowledgeWindowSlotMappingMsg', 367, 1), + (3252, 1193, 1195, 'OP_AFKUpdateMsg', 368, 1), + (3253, 1193, 1195, 'OP_AnonUpdateMsg', 369, 1), + (3254, 1193, 1195, 'OP_UpdateActivePublicZonesMsg', 370, 1), + (3255, 1193, 1195, 'OP_UnknownNpcMsg', 371, 1), + (3256, 1193, 1195, 'OP_PromoFlagsDetailsMsg', 372, 1), + (3257, 1193, 1195, 'OP_ConsignViewCreateMsg', 373, 1), + (3258, 1193, 1195, 'OP_ConsignViewGetPageMsg', 374, 1), + (3259, 1193, 1195, 'OP_ConsignViewReleaseMsg', 375, 1), + (3260, 1193, 1195, 'OP_ConsignRemoveItemsMsg', 376, 1), + (3261, 1193, 1195, 'OP_UpdateDebugRadiiMsg', 377, 1), + (3262, 1193, 1195, 'OP_ReportMsg', 378, 1), + (3263, 1193, 1195, 'OP_UpdateRaidMsg', 379, 1), + (3264, 1193, 1195, 'OP_ConsignViewSortMsg', 381, 1), + (3265, 1193, 1195, 'OP_TitleUpdateMsg', 382, 1), + (3266, 1193, 1195, 'OP_ClientFellMsg', 383, 1), + (3267, 1193, 1195, 'OP_ClientInDeathRegionMsg', 384, 1), + (3268, 1193, 1195, 'OP_CampClientMsg', 385, 1), + (3269, 1193, 1195, 'OP_CSToolAccessResponseMsg', 386, 1), + (3270, 1193, 1195, 'OP_TrackingUpdateMsg', 387, 1), + (3271, 1193, 1195, 'OP_BeginTrackingMsg', 388, 1), + (3272, 1193, 1195, 'OP_StopTrackingMsg', 389, 1), + (3273, 1193, 1195, 'OP_GetAvatarAccessRequestForCSToo', 391, 1), + (3274, 1193, 1195, 'OP_AdvancementRequestMsg', 392, 1), + (3275, 1193, 1195, 'OP_MapFogDataInitMsg', 393, 1), + (3276, 1193, 1195, 'OP_MapFogDataUpdateMsg', 394, 1), + (3277, 1193, 1195, 'OP_CloseGroupInviteWindowMsg', 395, 1), + (3278, 1193, 1195, 'OP_UpdateGroupMemberDataMsg', 396, 1), + (3279, 1193, 1195, 'OP_WorldPingMsg', 397, 1), + (3280, 1193, 1195, 'OP_MoveLogUpdateMsg', 388, 1), + (3281, 1193, 1195, 'OP_OfferQuestMsg', 399, 1), + (3282, 1193, 1195, 'OP_WorldShutdownUpdateMsg', 401, 1), + (3283, 1193, 1195, 'OP_DisplayMailScreenMsg', 402, 1), + (3284, 1193, 1195, 'OP_ClientIdleBeginMsg', 403, 1), + (3285, 1193, 1195, 'OP_ClientIdleEndMsg', 404, 1), + (3286, 1193, 1195, 'OP_PurchaseConsignmentLoreCheckRe', 405, 1), + (3287, 1193, 1195, 'OP_NotifyApprenticeStoppedMentori', 406, 1), + (3288, 1193, 1195, 'OP_CorruptedClientMsg', 407, 1), + (3289, 1193, 1195, 'OP_WorldDataChangeMsg', 408, 1), + (3290, 1193, 1195, 'OP_MailEventNotificationMsg', 409, 1), + (3291, 1193, 1195, 'OP_RestartZoneMsg', 410, 1), + (3292, 1193, 1195, 'OP_FlightPathsMsg', 411, 1), + (3293, 1193, 1195, 'OP_CharacterLinkdeadMsg', 412, 1), + (3294, 1193, 1195, 'OP_CharTransferStartRequestMsg', 413, 1), + (3295, 1193, 1195, 'OP_CharTransferStartReplyMsg', 414, 1), + (3296, 1193, 1195, 'OP_CharTransferRequestMsg', 415, 1), + (3297, 1193, 1195, 'OP_CharTransferReplyMsg', 416, 1), + (3298, 1193, 1195, 'OP_CharTransferRollbackRequestMsg', 417, 1), + (3299, 1193, 1195, 'OP_CharTransferCommitRequestMsg', 418, 1), + (3300, 1193, 1195, 'OP_CharTransferRollbackReplyMsg', 419, 1), + (3301, 1193, 1195, 'OP_CharTransferCommitReplyMsg', 420, 1), + (3302, 1193, 1195, 'OP_GetCharacterSerializedRequestM', 421, 1), + (3303, 1193, 1195, 'OP_GetCharacterSerializedReplyMsg', 422, 1), + (3304, 1193, 1195, 'OP_CreateCharFromCBBRequestMsg', 423, 1), + (3305, 1193, 1195, 'OP_CreateCharFromCBBReplyMsg', 424, 1), + (3306, 1193, 1195, 'OP_HousingDataChangedMsg', 425, 1), + (3307, 1193, 1195, 'OP_HousingRestoreMsg', 426, 1), + (3308, 1193, 1195, 'OP_AuctionItem', 427, 1), + (3309, 1193, 1195, 'OP_AuctionItemReply', 428, 1), + (3310, 1193, 1195, 'OP_AuctionCoin', 429, 1), + (3311, 1193, 1195, 'OP_AuctionCoinReply', 430, 1), + (3312, 1193, 1195, 'OP_AuctionCharacter', 431, 1), + (3313, 1193, 1195, 'OP_AuctionCharacterReply', 432, 1), + (3314, 1193, 1195, 'OP_AuctionCommitMsg', 433, 1), + (3315, 1193, 1195, 'OP_AuctionAbortMsg', 434, 1), + (3316, 1193, 1195, 'OP_CharTransferValidateRequestMsg', 435, 1), + (3317, 1193, 1195, 'OP_CharTransferValidateReplyMsg', 436, 1), + (3318, 1193, 1195, 'OP_RaceRestrictionMsg', 437, 1), + (3319, 1193, 1195, 'OP_SetInstanceDisplayNameMsg', 438, 1), + (3320, 1193, 1195, 'OP_GetAuctionAssetIDMsg', 439, 1), + (3321, 1193, 1195, 'OP_GetAuctionAssetIDReplyMsg', 440, 1), + (3322, 1193, 1195, 'OP_ResendWorldChannelsMsg', 441, 1), + (3323, 1193, 1195, 'OP_DisplayExchangeScreenMsg', 442, 1), + (3324, 1193, 1195, 'OP_ArenaGameTypesMsg', 443, 1), + (3325, 1193, 1195, 'OP_AuditAuctionEventMsg', 444, 1), + (3326, 1193, 1195, 'OP_InviteRequestMsg', 445, 1), + (3327, 1193, 1195, 'OP_InviteResponseMsg', 446, 1), + (3328, 1193, 1195, 'OP_InviteTargetResponseMsg', 447, 1), + (3329, 1193, 1195, 'OP_InspectPlayerRequestMsg', 448, 1), + (3330, 1193, 1195, 'OP_DispatchMsg', 449, 1), + (3331, 1193, 1195, 'OP_DisplayEventMsg', 450, 1), + (3332, 1193, 1195, 'OP_PrePossessionMsg', 451, 1), + (3333, 1193, 1195, 'OP_PostPossessionMsg', 452, 1), + (3334, 1193, 1195, 'OP_ArenaCreate', 454, 1), + (3335, 1193, 1195, 'OP_ArenaList', 455, 1), + (3336, 1193, 1195, 'OP_ArenaWindow', 463, 1), + (3337, 1193, 1195, 'OP_HouseItemsList', 481, 1), + (3338, 1193, 1195, 'OP_CurrentPet', 483, 1), + (3339, 1193, 1195, 'OP_AdventureList', 486, 1), + (3340, 1193, 1195, 'OP_CancelSpellCast', 487, 1), + (3341, 1193, 1195, 'OP_UpdateTitleCmd', 492, 1), + (3342, 1193, 1195, 'OP_AttackAllowed', 498, 1), + (3343, 1193, 1195, 'OP_AttackNotAllowed', 499, 1), + (3344, 1193, 1195, 'OP_BagOptions', 500, 1), + (3345, 1193, 1195, 'OP_LFGGroupSearch', 502, 1), + (3346, 1193, 1195, 'OP_CharacterHousingList', 505, 1), + (3347, 1193, 1195, 'OP_DressingRoom', 508, 1), + (3348, 1193, 1195, 'OP_PlayLon', 509, 1), + (3349, 1193, 1195, 'OP_SkillInfoRequest', 512, 1), + (3350, 1193, 1195, 'OP_SkillInfoResponse', 513, 1), + (3351, 1193, 1195, 'OP_LFGUpdateMsg', 516, 1), + (3352, 1193, 1195, 'OP_BadLanguageFilter', 517, 1), + (3353, 1193, 1195, 'OP_VoiceChatChannel', 518, 1), + (3354, 1193, 1195, 'OP_MapRequest', 519, 1), + (3355, 1193, 1195, 'OP_MarketFundsUpdate', 524, 1), + (3356, 1193, 1195, 'OP_UIEvent', 525, 1), + (3357, 1193, 1195, 'OP_MarketAddFundsRequest', 526, 1), + (3358, 1193, 1195, 'OP_MarketAddFundsReply', 527, 1), + (3359, 1193, 1195, 'OP_MarketPurchase', 529, 1), + (3360, 1193, 1195, 'OP_MarketPlacePrices', 530, 1), + (3361, 1193, 1195, 'OP_MarketPlaceItems', 533, 1), + (3362, 1193, 1195, 'OP_RecipeBook', 534, 1), + (3363, 1193, 1195, 'OP_CreateCharacterDungeon', 543, 1), + (3364, 1193, 1195, 'OP_DungeonMakerEnter', 544, 1), + (3365, 1193, 1195, 'OP_DungeonMakerItemRequest', 546, 1), + (3366, 1193, 1195, 'OP_CharacterCreatedDungeons', 547, 1), + (3367, 1193, 1195, 'OP_DungeonMakerToolboxList', 548, 1), + (3368, 1193, 1195, 'OP_DungeonMakerUnknown', 549, 1), + (3369, 1193, 1195, 'OP_DungeonMakerUnknown1', 550, 1), + (3370, 1193, 1195, 'OP_PlayerPollPopup', 552, 1), + (3371, 1193, 1195, 'OP_PlayerPollAnswer', 553, 1), + (3372, 1193, 1195, 'OP_MentorPopup', 554, 1), + (3373, 1193, 1195, 'OP_LoadWelcomeWindow', 556, 1), + (3374, 1193, 1195, 'OP_OpenCharCust', 557, 1), + (3375, 1193, 1195, 'OP_SubmitCharCust', 558, 1), + (3376, 1193, 1195, 'OP_QueAllBgSolo', 560, 1), + (3377, 1193, 1195, 'OP_ZoneBgInstanceList', 562, 1), + (3378, 1193, 1195, 'OP_WorldTravelAvail', 566, 1), + (3379, 1193, 1195, 'OP_PaperdollImage', 569, 1), + (3380, 1193, 1195, 'OP_LoadCalendarEvents', 570, 1), + (3381, 1193, 1195, 'OP_VideoUploaded', 571, 1), + (3382, 1193, 1195, 'OP_SavageBarInitMsg', 572, 1), + (3383, 1193, 1195, 'OP_PetOptionsResponse', 573, 1), + (3384, 1193, 1195, 'OP_DungeonMakerItemResponse', 574, 1), + (3385, 1193, 1195, 'OP_CharacterMounts', 576, 1), + (3386, 1193, 1195, 'OP_EqBetaCopyRequest', 585, 1), + (3387, 1193, 1195, 'OP_EqHearChatCmd', 586, 1), + (3388, 1193, 1195, 'OP_EqDisplayTextCmd', 587, 1), + (3389, 1193, 1195, 'OP_EqCreateGhostCmd', 588, 1), + (3390, 1193, 1195, 'OP_EqCreateWidgetCmd', 589, 1), + (3391, 1193, 1195, 'OP_EqCreateSignWidgetCmd', 590, 1), + (3392, 1193, 1195, 'OP_EqDestroyGhostCmd', 591, 1), + (3393, 1193, 1195, 'OP_EqUpdateGhostCmd', 592, 1), + (3394, 1193, 1195, 'OP_EqSetControlGhostCmd', 593, 1), + (3395, 1193, 1195, 'OP_EqSetPOVGhostCmd', 594, 1), + (3396, 1193, 1195, 'OP_EqHearCombatCmd', 595, 1), + (3397, 1193, 1195, 'OP_EqHearSpellCastCmd', 596, 1), + (3398, 1193, 1195, 'OP_EQHearProcCmd', 597, 1), + (3399, 1193, 1195, 'OP_EQHearResEffectCmd', 598, 1), + (3400, 1193, 1195, 'OP_EqHearSpellInterruptCmd', 599, 1), + (3401, 1193, 1195, 'OP_EqHearSpellFizzleCmd', 600, 1), + (3402, 1193, 1195, 'OP_EqHearConsiderCmd', 601, 1), + (3403, 1193, 1195, 'OP_EqUpdateSubClassesCmd', 602, 1), + (3404, 1193, 1195, 'OP_EqCreateListBoxCmd', 603, 1), + (3405, 1193, 1195, 'OP_EqSetDebugPathPointsCmd', 604, 1), + (3406, 1193, 1195, 'OP_EqCannedEmoteCmd', 606, 1), + (3407, 1193, 1195, 'OP_EqStateCmd', 607, 1), + (3408, 1193, 1195, 'OP_EqPlaySoundCmd', 608, 1), + (3409, 1193, 1195, 'OP_EqPlaySound3DCmd', 609, 1), + (3410, 1193, 1195, 'OP_EqPlayVoiceCmd', 610, 1), + (3411, 1193, 1195, 'OP_EqHearDrowningCmd', 611, 1), + (3412, 1193, 1195, 'OP_EqHearDeathCmd', 612, 1), + (3413, 1193, 1195, 'OP_EqGroupMemberRemovedCmd', 613, 1), + (3414, 1193, 1195, 'OP_EqHearChainEffectCmd', 614, 1), + (3415, 1193, 1195, 'OP_EqReceiveOfferCmd', 615, 1), + (3416, 1193, 1195, 'OP_EqInspectPCResultsCmd', 616, 1), + (3417, 1193, 1195, 'OP_EqDrawablePathGraphCmd', 617, 1), + (3418, 1193, 1195, 'OP_EqDialogOpenCmd', 618, 1), + (3419, 1193, 1195, 'OP_EqDialogCloseCmd', 619, 1), + (3420, 1193, 1195, 'OP_EqFactionUpdateCmd', 620, 1), + (3421, 1193, 1195, 'OP_EqCollectionUpdateCmd', 621, 1), + (3422, 1193, 1195, 'OP_EqCollectionFilterCmd', 622, 1), + (3423, 1193, 1195, 'OP_EqCollectionItemCmd', 623, 1), + (3424, 1193, 1195, 'OP_EqQuestJournalUpdateCmd', 624, 1), + (3425, 1193, 1195, 'OP_EqMentoring', 625, 1), + (3426, 1193, 1195, 'OP_EqQuestJournalReplyCmd', 626, 1), + (3427, 1193, 1195, 'OP_EqQuestGroupCmd', 627, 1), + (3428, 1193, 1195, 'OP_EqUpdateMerchantCmd', 628, 1), + (3429, 1193, 1195, 'OP_EqUpdateStoreCmd', 629, 1), + (3430, 1193, 1195, 'OP_EqUpdatePlayerTradeCmd', 630, 1), + (3431, 1193, 1195, 'OP_EqHelpPathCmd', 631, 1), + (3432, 1193, 1195, 'OP_EqHelpPathClearCmd', 632, 1), + (3433, 1193, 1195, 'OP_EqUpdateBankCmd', 633, 1), + (3434, 1193, 1195, 'OP_EqExamineInfoCmd', 634, 1), + (3435, 1193, 1195, 'OP_EqCloseWindowCmd', 635, 1), + (3436, 1193, 1195, 'OP_EqUpdateLootCmd', 636, 1), + (3437, 1193, 1195, 'OP_EqJunctionListCmd', 637, 1), + (3438, 1193, 1195, 'OP_EqShowDeathWindowCmd', 638, 1), + (3439, 1193, 1195, 'OP_EqDisplaySpellFailCmd', 639, 1), + (3440, 1193, 1195, 'OP_EqSpellCastStartCmd', 640, 1), + (3441, 1193, 1195, 'OP_EqSpellCastEndCmd', 641, 1), + (3442, 1193, 1195, 'OP_EqResurrectedCmd', 642, 1), + (3443, 1193, 1195, 'OP_EqChoiceWinCmd', 643, 1), + (3444, 1193, 1195, 'OP_EqSetDefaultVerbCmd', 644, 1), + (3445, 1193, 1195, 'OP_EqInstructionWindowCmd', 645, 1), + (3446, 1193, 1195, 'OP_EqInstructionWindowCloseCmd', 646, 1), + (3447, 1193, 1195, 'OP_EqInstructionWindowGoalCmd', 647, 1), + (3448, 1193, 1195, 'OP_EqInstructionWindowTaskCmd', 648, 1), + (3449, 1193, 1195, 'OP_EqEnableGameEventCmd', 649, 1), + (3450, 1193, 1195, 'OP_EqShowWindowCmd', 650, 1), + (3451, 1193, 1195, 'OP_EqEnableWindowCmd', 651, 1), + (3452, 1193, 1195, 'OP_EqFlashWindowCmd', 652, 1), + (3453, 1193, 1195, 'OP_EqHearPlayFlavorCmd', 654, 1), + (3454, 1193, 1195, 'OP_EqUpdateSignWidgetCmd', 655, 1), + (3455, 1193, 1195, 'OP_EqDebugPVDCmd', 656, 1), + (3456, 1193, 1195, 'OP_EqShowBookCmd', 657, 1), + (3457, 1193, 1195, 'OP_EqQuestionnaireCmd', 658, 1), + (3458, 1193, 1195, 'OP_EqGetProbsCmd', 660, 1), + (3459, 1193, 1195, 'OP_EqHearHealCmd', 661, 1), + (3460, 1193, 1195, 'OP_EqChatChannelUpdateCmd', 662, 1), + (3461, 1193, 1195, 'OP_EqWhoChannelQueryReplyCmd', 663, 1), + (3462, 1193, 1195, 'OP_EqAvailWorldChannelsCmd', 664, 1), + (3463, 1193, 1195, 'OP_EqUpdateTargetCmd', 665, 1), + (3464, 1193, 1195, 'OP_BrokerSellList', 666, 1), + (3465, 1193, 1195, 'OP_EqConsignmentItemsCmd', 667, 1), + (3466, 1193, 1195, 'OP_EqStartBrokerCmd', 669, 1), + (3467, 1193, 1195, 'OP_EqMapExplorationCmd', 670, 1), + (3468, 1193, 1195, 'OP_EqStoreLogCmd', 671, 1), + (3469, 1193, 1195, 'OP_EqSpellMoveToRangeAndRetryCmd', 672, 1), + (3470, 1193, 1195, 'OP_EqUpdatePlayerMailCmd', 673, 1), + (3471, 1193, 1195, 'OP_GuildStatusUpdate', 676, 1), + (3472, 1193, 1195, 'OP_EqArenaResultsCmd', 677, 1), + (3473, 1193, 1195, 'OP_EqGuildBankEventActionCmd', 678, 1), + (3474, 1193, 1195, 'OP_EqGuildBankExamineInfoCmd', 679, 1), + (3475, 1193, 1195, 'OP_EqHearSpellNoLandCmd', 680, 1), + (3476, 1193, 1195, 'OP_Lottery', 681, 1), + (3477, 1193, 1195, 'OP_GuildRecruitingMemberInfo', 682, 1), + (3478, 1193, 1195, 'OP_GuildRecruiting', 683, 1), + (3479, 1193, 1195, 'OP_GuildRecruitingDetails', 684, 1), + (3480, 1193, 1195, 'OP_GuildRecruitingImage', 685, 1), + (3481, 1193, 1195, 'OP_TradeskillList', 703, 1), + (3482, 1193, 1195, 'OP_CharRenamed', 687, 1), + (3483, 1193, 1195, 'OP_UseAdornment', 697, 1), + (3484, 1193, 1195, 'OP_ExpPurchWindow', 703, 1), + (3485, 1193, 1195, 'OP_PointOfInterest', 707, 1), + (3486, 1193, 1195, 'OP_PointOfInterest2', 708, 1), + (3487, 1193, 1195, 'OP_TraitsList', 709, 1), + (3488, 1193, 1195, 'OP_CustomizeHouseDisplay', 712, 1), + (3489, 1193, 1195, 'OP_VoiceChatServer', 713, 1), + (3490, 1193, 1195, 'OP_SupplyDepot', 717, 1), + (3491, 1193, 1195, 'OP_EQHearThreatCmd', 718, 1), + (3492, 1193, 1195, 'OP_RecipeList', 719, 1), + (3493, 1193, 1195, 'OP_Research', 720, 1), + (3494, 1193, 1195, 'OP_CharacterCurrency', 721, 1), + (3495, 1193, 1195, 'OP_CharacterAchievements', 722, 1), + (3496, 1193, 1195, 'OP_AchievementUpdateMsg', 723, 1), + (3497, 1193, 1195, 'OP_EQHearDispellCmd', 724, 1), + (3498, 1193, 1195, 'OP_JournalQuestStoryline', 725, 1), + (3499, 1193, 1195, 'OP_DungeonPlayAsAvatarList', 726, 1), + (3500, 1193, 1195, 'OP_DungeonPlayAsAvatarSelected', 727, 1), + (3501, 1193, 1195, 'OP_MercHireWindow', 728, 1), + (3502, 1193, 1195, 'OP_MercUnknown', 729, 1), + (3503, 1193, 1195, 'OP_Unknown', 746, 1), + (3504, 1198, 1199, 'OP_LoginRequestMsg', 0, 1), + (3505, 1198, 1199, 'OP_LoginByNumRequestMsg', 1, 1), + (3506, 1198, 1199, 'OP_WSLoginRequestMsg', 2, 1), + (3507, 1198, 1199, 'OP_ESLoginRequestMsg', 3, 1), + (3508, 1198, 1199, 'OP_LoginReplyMsg', 4, 1), + (3509, 1198, 1199, 'OP_WSStatusReplyMsg', 5, 1), + (3510, 1198, 1199, 'OP_WorldStatusChangeMsg', 6, 1), + (3511, 1198, 1199, 'OP_AllWSDescRequestMsg', 7, 1), + (3512, 1198, 1199, 'OP_WorldListMsg', 8, 1), + (3513, 1198, 1199, 'OP_AllCharactersDescRequestMsg', 9, 1), + (3514, 1198, 1199, 'OP_AllCharactersDescReplyMsg', 10, 1), + (3515, 1198, 1199, 'OP_CreateCharacterRequestMsg', 11, 1), + (3516, 1198, 1199, 'OP_CreateCharacterReplyMsg', 12, 1), + (3517, 1198, 1199, 'OP_WSCreateCharacterRequestMsg', 13, 1), + (3518, 1198, 1199, 'OP_WSCreateCharacterReplyMsg', 14, 1), + (3519, 1198, 1199, 'OP_ReskinCharacterRequestMsg', 15, 1), + (3520, 1198, 1199, 'OP_DeleteCharacterRequestMsg', 16, 1), + (3521, 1198, 1199, 'OP_DeleteCharacterReplyMsg', 17, 1), + (3522, 1198, 1199, 'OP_PlayCharacterRequestMsg', 18, 1), + (3523, 1198, 1199, 'OP_PlayCharacterReplyMsg', 19, 1), + (3524, 1198, 1199, 'OP_ExpectClientAsCharacterReplyMs', 22, 1), + (3525, 1198, 1199, 'OP_ServerPlayCharacterRequestMsg', 23, 1), + (3526, 1198, 1199, 'OP_ServerPlayCharacterReplyMsg', 24, 1), + (3527, 1198, 1199, 'OP_ESInitMsg', 25, 1), + (3528, 1198, 1199, 'OP_ESReadyForClientsMsg', 26, 1), + (3529, 1198, 1199, 'OP_CreateZoneInstanceMsg', 29, 1), + (3530, 1198, 1199, 'OP_ZoneInstanceCreateReplyMsg', 30, 1), + (3531, 1198, 1199, 'OP_ZoneInstanceDestroyedMsg', 31, 1), + (3532, 1198, 1199, 'OP_ExpectClientAsCharacterRequest', 32, 1), + (3533, 1198, 1199, 'OP_ZoneInfoMsg', 33, 1), + (3534, 1198, 1199, 'OP_DoneLoadingZoneResourcesMsg', 34, 1), + (3535, 1198, 1199, 'OP_DoneSendingInitialEntitiesMsg', 35, 1), + (3536, 1198, 1199, 'OP_DoneLoadingEntityResourcesMsg', 36, 1), + (3537, 1198, 1199, 'OP_PredictionUpdateMsg', 37, 1), + (3538, 1198, 1199, 'OP_UpdatePositionMsg', 39, 1), + (3539, 1198, 1199, 'OP_SetRemoteCmdsMsg', 41, 1), + (3540, 1198, 1199, 'OP_RemoteCmdMsg', 42, 1), + (3541, 1198, 1199, 'OP_GameWorldTimeMsg', 43, 1), + (3542, 1198, 1199, 'OP_MOTDMsg', 44, 1), + (3543, 1198, 1199, 'OP_ZoneMOTDMsg', 45, 1), + (3544, 1198, 1199, 'OP_AvatarCreatedMsg', 46, 1), + (3545, 1198, 1199, 'OP_AvatarDestroyedMsg', 47, 1), + (3546, 1198, 1199, 'OP_RequestCampMsg', 50, 1), + (3547, 1198, 1199, 'OP_CampStartedMsg', 51, 1), + (3548, 1198, 1199, 'OP_CampAbortedMsg', 52, 1), + (3549, 1198, 1199, 'OP_WhoQueryRequestMsg', 53, 1), + (3550, 1198, 1199, 'OP_WhoQueryReplyMsg', 54, 1), + (3551, 1198, 1199, 'OP_MonitorReplyMsg', 55, 1), + (3552, 1198, 1199, 'OP_MonitorCharacterListMsg', 56, 1), + (3553, 1198, 1199, 'OP_MonitorCharacterListRequestMsg', 57, 1), + (3554, 1198, 1199, 'OP_ClientCmdMsg', 58, 1), + (3555, 1198, 1199, 'OP_DispatchESMsg', 59, 1), + (3556, 1198, 1199, 'OP_DispatchClientCmdMsg', 60, 1), + (3557, 1198, 1199, 'OP_UpdateTargetMsg', 61, 1), + (3558, 1198, 1199, 'OP_UpdateTargetLocMsg', 62, 1), + (3559, 1198, 1199, 'OP_UpdateCharacterSheetMsg', 63, 1), + (3560, 1198, 1199, 'OP_CharacterPet', 64, 1), + (3561, 1198, 1199, 'OP_CharacterMerc', 65, 1), + (3562, 1198, 1199, 'OP_UpdateSpellBookMsg', 66, 1), + (3563, 1198, 1199, 'OP_UpdateInventoryMsg', 68, 1), + (3564, 1198, 1199, 'OP_AfterInvSpellUpdate', 69, 1), + (3565, 1198, 1199, 'OP_UpdateRecipeBookMsg', 70, 1), + (3566, 1198, 1199, 'OP_RequestRecipeDetailsMsg', 71, 1), + (3567, 1198, 1199, 'OP_RecipeDetailsMsg', 72, 1), + (3568, 1198, 1199, 'OP_UpdateSkillBookMsg', 73, 1), + (3569, 1198, 1199, 'OP_UpdateSkillsMsg', 74, 1), + (3570, 1198, 1199, 'OP_UpdateOpportunityMsg', 75, 1), + (3571, 1198, 1199, 'OP_ChangeZoneMsg', 77, 1), + (3572, 1198, 1199, 'OP_ClientTeleportRequestMsg', 78, 1), + (3573, 1198, 1199, 'OP_TeleportWithinZoneMsg', 79, 1), + (3574, 1198, 1199, 'OP_TeleportWithinZoneNoReloadMsg', 80, 1), + (3575, 1198, 1199, 'OP_MigrateClientToZoneRequestMsg', 81, 1), + (3576, 1198, 1199, 'OP_MigrateClientToZoneReplyMsg', 82, 1), + (3577, 1198, 1199, 'OP_ReadyToZoneMsg', 84, 1), + (3578, 1198, 1199, 'OP_RemoveClientFromGroupMsg', 85, 1), + (3579, 1198, 1199, 'OP_RemoveGroupFromGroupMsg', 86, 1), + (3580, 1198, 1199, 'OP_MakeGroupLeaderMsg', 87, 1), + (3581, 1198, 1199, 'OP_GroupCreatedMsg', 88, 1), + (3582, 1198, 1199, 'OP_GroupDestroyedMsg', 89, 1), + (3583, 1198, 1199, 'OP_GroupMemberAddedMsg', 90, 1), + (3584, 1198, 1199, 'OP_GroupMemberRemovedMsg', 91, 1), + (3585, 1198, 1199, 'OP_GroupRemovedFromGroupMsg', 92, 1), + (3586, 1198, 1199, 'OP_GroupLeaderChangedMsg', 93, 1), + (3587, 1198, 1199, 'OP_GroupResendOOZDataMsg', 94, 1), + (3588, 1198, 1199, 'OP_GroupSettingsChangedMsg', 95, 1), + (3589, 1198, 1199, 'OP_OutOfZoneMemberDataMsg', 96, 1), + (3590, 1198, 1199, 'OP_SendLatestRequestMsg', 97, 1), + (3591, 1198, 1199, 'OP_ClearDataMsg', 98, 1), + (3592, 1198, 1199, 'OP_SetSocialMsg', 99, 1), + (3593, 1198, 1199, 'OP_ESStatusMsg', 100, 1), + (3594, 1198, 1199, 'OP_ESZoneInstanceStatusMsg', 101, 1), + (3595, 1198, 1199, 'OP_ZonesStatusRequestMsg', 102, 1), + (3596, 1198, 1199, 'OP_ZonesStatusMsg', 103, 1), + (3597, 1198, 1199, 'OP_ESWeatherRequestMsg', 104, 1), + (3598, 1198, 1199, 'OP_ESWeatherRequestEndMsg', 105, 1), + (3599, 1198, 1199, 'OP_DialogSelectMsg', 109, 1), + (3600, 1198, 1199, 'OP_DialogCloseMsg', 110, 1), + (3601, 1198, 1199, 'OP_RemoveSpellEffectMsg', 111, 1), + (3602, 1198, 1199, 'OP_RemoveConcentrationMsg', 112, 1), + (3603, 1198, 1199, 'OP_QuestJournalOpenMsg', 113, 1), + (3604, 1198, 1199, 'OP_QuestJournalInspectMsg', 114, 1), + (3605, 1198, 1199, 'OP_QuestJournalSetVisibleMsg', 115, 1), + (3606, 1198, 1199, 'OP_QuestJournalWaypointMsg', 116, 1), + (3607, 1198, 1199, 'OP_CreateGuildRequestMsg', 119, 1), + (3608, 1198, 1199, 'OP_CreateGuildReplyMsg', 120, 1), + (3609, 1198, 1199, 'OP_GuildsayMsg', 121, 1), + (3610, 1198, 1199, 'OP_FellowshipExpMsg', 122, 1), + (3611, 1198, 1199, 'OP_DeleteGuildMsg', 123, 1), + (3612, 1198, 1199, 'OP_GuildUpdateMsg', 124, 1), + (3613, 1198, 1199, 'OP_ConsignmentCloseStoreMsg', 125, 1), + (3614, 1198, 1199, 'OP_ConsignItemRequestMsg', 126, 1), + (3615, 1198, 1199, 'OP_ConsignItemResponseMsg', 127, 1), + (3616, 1198, 1199, 'OP_PurchaseConsignmentRequestMsg', 128, 1), + (3617, 1198, 1199, 'OP_LikeOption', 135, 1), + (3618, 1198, 1199, 'OP_PublishHouse', 137, 1), + (3619, 1198, 1199, 'OP_PlayerMadeInstacnesScreen', 138, 1), + (3620, 1198, 1199, 'OP_PlayerMadeInstances', 139, 1), + (3621, 1198, 1199, 'OP_HouseDeletedRemotelyMsg', 140, 1), + (3622, 1198, 1199, 'OP_UpdateHouseDataMsg', 141, 1), + (3623, 1198, 1199, 'OP_UpdateHouseAccessDataMsg', 142, 1), + (3624, 1198, 1199, 'OP_PlayerHouseBaseScreenMsg', 143, 1), + (3625, 1198, 1199, 'OP_PlayerHousePurchaseScreenMsg', 144, 1), + (3626, 1198, 1199, 'OP_PlayerHouseAccessUpdateMsg', 145, 1), + (3627, 1198, 1199, 'OP_PlayerHouseDisplayStatusMsg', 146, 1), + (3628, 1198, 1199, 'OP_PlayerHouseCloseUIMsg', 147, 1), + (3629, 1198, 1199, 'OP_BuyPlayerHouseMsg', 148, 1), + (3630, 1198, 1199, 'OP_BuyPlayerHouseTintMsg', 149, 1), + (3631, 1198, 1199, 'OP_CollectAllHouseItemsMsg', 150, 1), + (3632, 1198, 1199, 'OP_RelinquishHouseMsg', 151, 1), + (3633, 1198, 1199, 'OP_EnterHouseMsg', 152, 1), + (3634, 1198, 1199, 'OP_ExitHouseMsg', 153, 1), + (3635, 1198, 1199, 'OP_HouseDefaultAccessSetMsg', 154, 1), + (3636, 1198, 1199, 'OP_HouseAccessSetMsg', 155, 1), + (3637, 1198, 1199, 'OP_HouseAccessRemoveMsg', 156, 1), + (3638, 1198, 1199, 'OP_PayHouseUpkeepMsg', 157, 1), + (3639, 1198, 1199, 'OP_MoveableObjectPlacementCriteri', 158, 1), + (3640, 1198, 1199, 'OP_EnterMoveObjectModeMsg', 159, 1), + (3641, 1198, 1199, 'OP_PositionMoveableObject', 160, 1), + (3642, 1198, 1199, 'OP_CancelMoveObjectModeMsg', 161, 1), + (3643, 1198, 1199, 'OP_ShaderCustomizationMsg', 162, 1), + (3644, 1198, 1199, 'OP_ReplaceableSubMeshesMsg', 163, 1), + (3645, 1198, 1199, 'OP_HouseCustomizationScreenMsg', 164, 1), + (3646, 1198, 1199, 'OP_CustomizationPurchaseRequestMs', 165, 1), + (3647, 1198, 1199, 'OP_CustomizationSetRequestMsg', 166, 1), + (3648, 1198, 1199, 'OP_CustomizationReplyMsg', 167, 1), + (3649, 1198, 1199, 'OP_TintWidgetsMsg', 168, 1), + (3650, 1198, 1199, 'OP_ExamineConsignmentRequestMsg', 169, 1), + (3651, 1198, 1199, 'OP_ExamineConsignmentResponseMsg', 170, 1), + (3652, 1198, 1199, 'OP_UISettingsResponseMsg', 171, 1), + (3653, 1198, 1199, 'OP_UIResetMsg', 172, 1), + (3654, 1198, 1199, 'OP_KeymapLoadMsg', 173, 1), + (3655, 1198, 1199, 'OP_KeymapNoneMsg', 174, 1), + (3656, 1198, 1199, 'OP_KeymapDataMsg', 175, 1), + (3657, 1198, 1199, 'OP_KeymapSaveMsg', 176, 1), + (3658, 1198, 1199, 'OP_DispatchSpellCmdMsg', 177, 1), + (3659, 1198, 1199, 'OP_EntityVerbsRequestMsg', 178, 1), + (3660, 1198, 1199, 'OP_EntityVerbsReplyMsg', 179, 1), + (3661, 1198, 1199, 'OP_EntityVerbsVerbMsg', 180, 1), + (3662, 1198, 1199, 'OP_ChatRelationshipUpdateMsg', 182, 1), + (3663, 1198, 1199, 'OP_LootItemsRequestMsg', 183, 1), + (3664, 1198, 1199, 'OP_StoppedLootingMsg', 184, 1), + (3665, 1198, 1199, 'OP_SitMsg', 185, 1), + (3666, 1198, 1199, 'OP_StandMsg', 186, 1), + (3667, 1198, 1199, 'OP_SatMsg', 187, 1), + (3668, 1198, 1199, 'OP_StoodMsg', 188, 1), + (3669, 1198, 1199, 'OP_ClearForTakeOffMsg', 189, 1), + (3670, 1198, 1199, 'OP_ReadyForTakeOffMsg', 190, 1), + (3671, 1198, 1199, 'OP_ShowIllusionsMsg', 191, 1), + (3672, 1198, 1199, 'OP_HideIllusionsMsg', 192, 1), + (3673, 1198, 1199, 'OP_ExamineItemRequestMsg', 193, 1), + (3674, 1198, 1199, 'OP_ReadBookPageMsg', 194, 1), + (3675, 1198, 1199, 'OP_DefaultGroupOptionsRequestMsg', 195, 1), + (3676, 1198, 1199, 'OP_DefaultGroupOptionsMsg', 196, 1), + (3677, 1198, 1199, 'OP_GroupOptionsMsg', 197, 1), + (3678, 1198, 1199, 'OP_DisplayGroupOptionsScreenMsg', 198, 1), + (3679, 1198, 1199, 'OP_PetOptions', 199, 1), + (3680, 1198, 1199, 'OP_DisplayInnVisitScreenMsg', 200, 1), + (3681, 1198, 1199, 'OP_DumpSchedulerMsg', 201, 1), + (3682, 1198, 1199, 'OP_LSCheckAcctLockMsg', 202, 1), + (3683, 1198, 1199, 'OP_WSAcctLockStatusMsg', 203, 1), + (3684, 1198, 1199, 'OP_RequestHelpRepathMsg', 204, 1), + (3685, 1198, 1199, 'OP_RequestTargetLocMsg', 205, 1), + (3686, 1198, 1199, 'OP_UpdateMotdMsg', 206, 1), + (3687, 1198, 1199, 'OP_DestUpdateReq', 208, 1), + (3688, 1198, 1199, 'OP_PerformPlayerKnockbackMsg', 211, 1), + (3689, 1198, 1199, 'OP_PerformCameraShakeMsg', 212, 1), + (3690, 1198, 1199, 'OP_PopulateSkillMapsMsg', 213, 1), + (3691, 1198, 1199, 'OP_CancelledFeignMsg', 214, 1), + (3692, 1198, 1199, 'OP_SysClient', 216, 1), + (3693, 1198, 1199, 'OP_ShowCreateFromRecipeUIMsg', 217, 1), + (3694, 1198, 1199, 'OP_CancelCreateFromRecipeMsg', 218, 1), + (3695, 1198, 1199, 'OP_BeginItemCreationMsg', 219, 1), + (3696, 1198, 1199, 'OP_StopItemCreationMsg', 220, 1), + (3697, 1198, 1199, 'OP_ShowItemCreationProcessUIMsg', 221, 1), + (3698, 1198, 1199, 'OP_UpdateItemCreationProcessUIMsg', 222, 1), + (3699, 1198, 1199, 'OP_DisplayTSEventReactionMsg', 223, 1), + (3700, 1198, 1199, 'OP_ShowRecipeBookMsg', 224, 1), + (3701, 1198, 1199, 'OP_KnowledgebaseRequestMsg', 225, 1), + (3702, 1198, 1199, 'OP_KnowledgebaseResponseMsg', 226, 1), + (3703, 1198, 1199, 'OP_CSTicketHeaderRequestMsg', 227, 1), + (3704, 1198, 1199, 'OP_CSTicketInfoMsg', 228, 1), + (3705, 1198, 1199, 'OP_CSTicketCommentRequestMsg', 229, 1), + (3706, 1198, 1199, 'OP_CSTicketCommentResponseMsg', 230, 1), + (3707, 1198, 1199, 'OP_CSTicketCreateMsg', 231, 1), + (3708, 1198, 1199, 'OP_CSTicketAddCommentMsg', 232, 1), + (3709, 1198, 1199, 'OP_CSTicketDeleteMsg', 233, 1), + (3710, 1198, 1199, 'OP_CSTicketChangeNotificationMsg', 234, 1), + (3711, 1198, 1199, 'OP_WorldDataUpdateMsg', 235, 1), + (3712, 1198, 1199, 'OP_KnownLanguagesMsg', 236, 1), + (3713, 1198, 1199, 'OP_LsRequestClientCrashLogMsg', 237, 1), + (3714, 1198, 1199, 'OP_LsClientBaselogReplyMsg', 238, 1), + (3715, 1198, 1199, 'OP_LsClientCrashlogReplyMsg', 239, 1), + (3716, 1198, 1199, 'OP_LsClientAlertlogReplyMsg', 240, 1), + (3717, 1198, 1199, 'OP_LsClientVerifylogReplyMsg', 241, 1), + (3718, 1198, 1199, 'OP_ClientTeleportToLocationMsg', 242, 1), + (3719, 1198, 1199, 'OP_UpdateClientPredFlagsMsg', 243, 1), + (3720, 1198, 1199, 'OP_ChangeServerControlFlagMsg', 244, 1), + (3721, 1198, 1199, 'OP_CSToolsRequestMsg', 245, 1), + (3722, 1198, 1199, 'OP_CSToolsResponseMsg', 246, 1), + (3723, 1198, 1199, 'OP_AddSocialStructureStandingMsg', 247, 1), + (3724, 1198, 1199, 'OP_CreateBoatTransportsMsg', 248, 1), + (3725, 1198, 1199, 'OP_PositionBoatTransportMsg', 249, 1), + (3726, 1198, 1199, 'OP_MigrateBoatTransportMsg', 250, 1), + (3727, 1198, 1199, 'OP_MigrateBoatTransportReplyMsg', 251, 1), + (3728, 1198, 1199, 'OP_DisplayDebugNLLPointsMsg', 252, 1), + (3729, 1198, 1199, 'OP_ExamineInfoRequestMsg', 253, 1), + (3730, 1198, 1199, 'OP_QuickbarInitMsg', 254, 1), + (3731, 1198, 1199, 'OP_QuickbarUpdateMsg', 255, 1), + (3732, 1198, 1199, 'OP_MacroInitMsg', 256, 1), + (3733, 1198, 1199, 'OP_MacroUpdateMsg', 257, 1), + (3734, 1198, 1199, 'OP_QuestionnaireMsg', 258, 1), + (3735, 1198, 1199, 'OP_LevelChangedMsg', 259, 1), + (3736, 1198, 1199, 'OP_SpellGainedMsg', 260, 1), + (3737, 1198, 1199, 'OP_EncounterBrokenMsg', 261, 1), + (3738, 1198, 1199, 'OP_OnscreenMsgMsg', 262, 1), + (3739, 1198, 1199, 'OP_DisplayWarningMsg', 263, 1), + (3740, 1198, 1199, 'OP_ModifyGuildMsg', 264, 1), + (3741, 1198, 1199, 'OP_GuildEventMsg', 265, 1), + (3742, 1198, 1199, 'OP_GuildEventAddMsg', 266, 1), + (3743, 1198, 1199, 'OP_GuildEventActionMsg', 267, 1), + (3744, 1198, 1199, 'OP_GuildEventListMsg', 268, 1), + (3745, 1198, 1199, 'OP_RequestGuildEventDetailsMsg', 269, 1), + (3746, 1198, 1199, 'OP_GuildEventDetailsMsg', 270, 1), + (3747, 1198, 1199, 'OP_RequestGuildInfoMsg', 271, 1), + (3748, 1198, 1199, 'OP_GuildBankActionMsg', 272, 1), + (3749, 1198, 1199, 'OP_GuildBankActionResponseMsg', 273, 1), + (3750, 1198, 1199, 'OP_GuildBankItemDetailsRequestMsg', 274, 1), + (3751, 1198, 1199, 'OP_GuildBankItemDetailsResponseMs', 275, 1), + (3752, 1198, 1199, 'OP_GuildBankUpdateMsg', 276, 1), + (3753, 1198, 1199, 'OP_GuildBankEventListMsg', 277, 1), + (3754, 1198, 1199, 'OP_RequestGuildBankEventDetailsMs', 278, 1), + (3755, 1198, 1199, 'OP_RewardPackMsg', 279, 1), + (3756, 1198, 1199, 'OP_RenameGuildMsg', 280, 1), + (3757, 1198, 1199, 'OP_ZoneToFriendRequestMsg', 281, 1), + (3758, 1198, 1199, 'OP_ZoneToFriendReplyMsg', 282, 1), + (3759, 1198, 1199, 'OP_ChatCreateChannelMsg', 283, 1), + (3760, 1198, 1199, 'OP_ChatJoinChannelMsg', 284, 1), + (3761, 1198, 1199, 'OP_ChatWhoChannelMsg', 285, 1), + (3762, 1198, 1199, 'OP_ChatLeaveChannelMsg', 286, 1), + (3763, 1198, 1199, 'OP_ChatTellChannelMsg', 287, 1), + (3764, 1198, 1199, 'OP_ChatTellUserMsg', 288, 1), + (3765, 1198, 1199, 'OP_ChatToggleFriendMsg', 289, 1), + (3766, 1198, 1199, 'OP_BrokerAddBag', 290, 1), + (3767, 1198, 1199, 'OP_BrokerRemoveBag', 291, 1), + (3768, 1198, 1199, 'OP_ChatToggleIgnoreMsg', 292, 1), + (3769, 1198, 1199, 'OP_ChatSendFriendsMsg', 293, 1), + (3770, 1198, 1199, 'OP_ChatSendIgnoresMsg', 294, 1), + (3771, 1198, 1199, 'OP_QuestReward', 318, 1), + (3772, 1198, 1199, 'OP_ChatFiltersMsg', 333, 1), + (3773, 1198, 1199, 'OP_MailGetMessageMsg', 336, 1), + (3774, 1198, 1199, 'OP_MailSendMessageMsg', 337, 1), + (3775, 1198, 1199, 'OP_MailDeleteMessageMsg', 338, 1), + (3776, 1198, 1199, 'OP_MailGetHeadersReplyMsg', 339, 1), + (3777, 1198, 1199, 'OP_MailGetMessageReplyMsg', 340, 1), + (3778, 1198, 1199, 'OP_MailSendMessageReplyMsg', 341, 1), + (3779, 1198, 1199, 'OP_MailCommitSendMessageMsg', 342, 1), + (3780, 1198, 1199, 'OP_MailSendSystemMessageMsg', 343, 1), + (3781, 1198, 1199, 'OP_MailRemoveAttachFromMailMsg', 344, 1), + (3782, 1198, 1199, 'OP_WaypointRequestMsg', 346, 1), + (3783, 1198, 1199, 'OP_WaypointReplyMsg', 347, 1), + (3784, 1198, 1199, 'OP_WaypointSelectMsg', 348, 1), + (3785, 1198, 1199, 'OP_WaypointUpdateMsg', 349, 1), + (3786, 1198, 1199, 'OP_CharNameChangedMsg', 350, 1), + (3787, 1198, 1199, 'OP_ShowZoneTeleporterDestinations', 351, 1), + (3788, 1198, 1199, 'OP_SelectZoneTeleporterDestinatio', 352, 1), + (3789, 1198, 1199, 'OP_ReloadLocalizedTxtMsg', 353, 1), + (3790, 1198, 1199, 'OP_RequestGuildMembershipMsg', 354, 1), + (3791, 1198, 1199, 'OP_GuildMembershipResponseMsg', 355, 1), + (3792, 1198, 1199, 'OP_LeaveGuildNotifyMsg', 356, 1), + (3793, 1198, 1199, 'OP_JoinGuildNotifyMsg', 357, 1), + (3794, 1198, 1199, 'OP_AvatarUpdateMsg', 358, 1), + (3795, 1198, 1199, 'OP_BioUpdateMsg', 360, 1), + (3796, 1198, 1199, 'OP_InspectPlayerMsg', 361, 1), + (3797, 1198, 1199, 'OP_WSServerLockMsg', 362, 1), + (3798, 1198, 1199, 'OP_LSServerLockMsg', 363, 1), + (3799, 1198, 1199, 'OP_WSServerHideMsg', 364, 1), + (3800, 1198, 1199, 'OP_CsCategoryRequestMsg', 365, 1), + (3801, 1198, 1199, 'OP_CsCategoryResponseMsg', 366, 1), + (3802, 1198, 1199, 'OP_KnowledgeWindowSlotMappingMsg', 367, 1), + (3803, 1198, 1199, 'OP_AFKUpdateMsg', 368, 1), + (3804, 1198, 1199, 'OP_AnonUpdateMsg', 369, 1), + (3805, 1198, 1199, 'OP_UpdateActivePublicZonesMsg', 370, 1), + (3806, 1198, 1199, 'OP_UnknownNpcMsg', 371, 1), + (3807, 1198, 1199, 'OP_PromoFlagsDetailsMsg', 372, 1), + (3808, 1198, 1199, 'OP_ConsignViewCreateMsg', 373, 1), + (3809, 1198, 1199, 'OP_ConsignViewGetPageMsg', 374, 1), + (3810, 1198, 1199, 'OP_ConsignViewReleaseMsg', 375, 1), + (3811, 1198, 1199, 'OP_ConsignRemoveItemsMsg', 376, 1), + (3812, 1198, 1199, 'OP_UpdateDebugRadiiMsg', 377, 1), + (3813, 1198, 1199, 'OP_ReportMsg', 378, 1), + (3814, 1198, 1199, 'OP_UpdateRaidMsg', 379, 1), + (3815, 1198, 1199, 'OP_ConsignViewSortMsg', 381, 1), + (3816, 1198, 1199, 'OP_TitleUpdateMsg', 382, 1), + (3817, 1198, 1199, 'OP_ClientFellMsg', 383, 1), + (3818, 1198, 1199, 'OP_ClientInDeathRegionMsg', 384, 1), + (3819, 1198, 1199, 'OP_CampClientMsg', 385, 1), + (3820, 1198, 1199, 'OP_CSToolAccessResponseMsg', 386, 1), + (3821, 1198, 1199, 'OP_TrackingUpdateMsg', 387, 1), + (3822, 1198, 1199, 'OP_BeginTrackingMsg', 388, 1), + (3823, 1198, 1199, 'OP_StopTrackingMsg', 389, 1), + (3824, 1198, 1199, 'OP_GetAvatarAccessRequestForCSToo', 391, 1), + (3825, 1198, 1199, 'OP_AdvancementRequestMsg', 392, 1), + (3826, 1198, 1199, 'OP_MapFogDataInitMsg', 393, 1), + (3827, 1198, 1199, 'OP_MapFogDataUpdateMsg', 394, 1), + (3828, 1198, 1199, 'OP_CloseGroupInviteWindowMsg', 395, 1), + (3829, 1198, 1199, 'OP_UpdateGroupMemberDataMsg', 396, 1), + (3830, 1198, 1199, 'OP_WorldPingMsg', 397, 1), + (3831, 1198, 1199, 'OP_MoveLogUpdateMsg', 388, 1), + (3832, 1198, 1199, 'OP_OfferQuestMsg', 399, 1), + (3833, 1198, 1199, 'OP_WorldShutdownUpdateMsg', 401, 1), + (3834, 1198, 1199, 'OP_DisplayMailScreenMsg', 402, 1), + (3835, 1198, 1199, 'OP_ClientIdleBeginMsg', 403, 1), + (3836, 1198, 1199, 'OP_ClientIdleEndMsg', 404, 1), + (3837, 1198, 1199, 'OP_PurchaseConsignmentLoreCheckRe', 405, 1), + (3838, 1198, 1199, 'OP_NotifyApprenticeStoppedMentori', 406, 1), + (3839, 1198, 1199, 'OP_CorruptedClientMsg', 407, 1), + (3840, 1198, 1199, 'OP_WorldDataChangeMsg', 408, 1), + (3841, 1198, 1199, 'OP_MailEventNotificationMsg', 409, 1), + (3842, 1198, 1199, 'OP_RestartZoneMsg', 410, 1), + (3843, 1198, 1199, 'OP_FlightPathsMsg', 411, 1), + (3844, 1198, 1199, 'OP_CharacterLinkdeadMsg', 412, 1), + (3845, 1198, 1199, 'OP_CharTransferStartRequestMsg', 413, 1), + (3846, 1198, 1199, 'OP_CharTransferStartReplyMsg', 414, 1), + (3847, 1198, 1199, 'OP_CharTransferRequestMsg', 415, 1), + (3848, 1198, 1199, 'OP_CharTransferReplyMsg', 416, 1), + (3849, 1198, 1199, 'OP_CharTransferRollbackRequestMsg', 417, 1), + (3850, 1198, 1199, 'OP_CharTransferCommitRequestMsg', 418, 1), + (3851, 1198, 1199, 'OP_CharTransferRollbackReplyMsg', 419, 1), + (3852, 1198, 1199, 'OP_CharTransferCommitReplyMsg', 420, 1), + (3853, 1198, 1199, 'OP_GetCharacterSerializedRequestM', 421, 1), + (3854, 1198, 1199, 'OP_GetCharacterSerializedReplyMsg', 422, 1), + (3855, 1198, 1199, 'OP_CreateCharFromCBBRequestMsg', 423, 1), + (3856, 1198, 1199, 'OP_CreateCharFromCBBReplyMsg', 424, 1), + (3857, 1198, 1199, 'OP_HousingDataChangedMsg', 425, 1), + (3858, 1198, 1199, 'OP_HousingRestoreMsg', 426, 1), + (3859, 1198, 1199, 'OP_AuctionItem', 427, 1), + (3860, 1198, 1199, 'OP_AuctionItemReply', 428, 1), + (3861, 1198, 1199, 'OP_AuctionCoin', 429, 1), + (3862, 1198, 1199, 'OP_AuctionCoinReply', 430, 1), + (3863, 1198, 1199, 'OP_AuctionCharacter', 431, 1), + (3864, 1198, 1199, 'OP_AuctionCharacterReply', 432, 1), + (3865, 1198, 1199, 'OP_AuctionCommitMsg', 433, 1), + (3866, 1198, 1199, 'OP_AuctionAbortMsg', 434, 1), + (3867, 1198, 1199, 'OP_CharTransferValidateRequestMsg', 435, 1), + (3868, 1198, 1199, 'OP_CharTransferValidateReplyMsg', 436, 1), + (3869, 1198, 1199, 'OP_RaceRestrictionMsg', 437, 1), + (3870, 1198, 1199, 'OP_SetInstanceDisplayNameMsg', 438, 1), + (3871, 1198, 1199, 'OP_GetAuctionAssetIDMsg', 439, 1), + (3872, 1198, 1199, 'OP_GetAuctionAssetIDReplyMsg', 440, 1), + (3873, 1198, 1199, 'OP_ResendWorldChannelsMsg', 441, 1), + (3874, 1198, 1199, 'OP_DisplayExchangeScreenMsg', 442, 1), + (3875, 1198, 1199, 'OP_ArenaGameTypesMsg', 443, 1), + (3876, 1198, 1199, 'OP_AuditAuctionEventMsg', 444, 1), + (3877, 1198, 1199, 'OP_InviteRequestMsg', 445, 1), + (3878, 1198, 1199, 'OP_InviteResponseMsg', 446, 1), + (3879, 1198, 1199, 'OP_InviteTargetResponseMsg', 447, 1), + (3880, 1198, 1199, 'OP_InspectPlayerRequestMsg', 448, 1), + (3881, 1198, 1199, 'OP_DispatchMsg', 449, 1), + (3882, 1198, 1199, 'OP_DisplayEventMsg', 450, 1), + (3883, 1198, 1199, 'OP_PrePossessionMsg', 451, 1), + (3884, 1198, 1199, 'OP_PostPossessionMsg', 452, 1), + (3885, 1198, 1199, 'OP_ArenaCreate', 454, 1), + (3886, 1198, 1199, 'OP_ArenaList', 455, 1), + (3887, 1198, 1199, 'OP_ArenaWindow', 463, 1), + (3888, 1198, 1199, 'OP_HouseItemsList', 481, 1), + (3889, 1198, 1199, 'OP_CurrentPet', 483, 1), + (3890, 1198, 1199, 'OP_AdventureList', 486, 1), + (3891, 1198, 1199, 'OP_CancelSpellCast', 487, 1), + (3892, 1198, 1199, 'OP_UpdateTitleCmd', 492, 1), + (3893, 1198, 1199, 'OP_AttackAllowed', 498, 1), + (3894, 1198, 1199, 'OP_AttackNotAllowed', 499, 1), + (3895, 1198, 1199, 'OP_BagOptions', 500, 1), + (3896, 1198, 1199, 'OP_LFGGroupSearch', 502, 1), + (3897, 1198, 1199, 'OP_CharacterHousingList', 505, 1), + (3898, 1198, 1199, 'OP_DressingRoom', 508, 1), + (3899, 1198, 1199, 'OP_PlayLon', 509, 1), + (3900, 1198, 1199, 'OP_SkillInfoRequest', 512, 1), + (3901, 1198, 1199, 'OP_SkillInfoResponse', 513, 1), + (3902, 1198, 1199, 'OP_LFGUpdateMsg', 516, 1), + (3903, 1198, 1199, 'OP_BadLanguageFilter', 517, 1), + (3904, 1198, 1199, 'OP_VoiceChatChannel', 518, 1), + (3905, 1198, 1199, 'OP_MapRequest', 519, 1), + (3906, 1198, 1199, 'OP_MarketFundsUpdate', 524, 1), + (3907, 1198, 1199, 'OP_UIEvent', 525, 1), + (3908, 1198, 1199, 'OP_MarketAddFundsRequest', 526, 1), + (3909, 1198, 1199, 'OP_MarketAddFundsReply', 527, 1), + (3910, 1198, 1199, 'OP_MarketPurchase', 529, 1), + (3911, 1198, 1199, 'OP_MarketPlacePrices', 530, 1), + (3912, 1198, 1199, 'OP_MarketPlaceItems', 533, 1), + (3913, 1198, 1199, 'OP_RecipeBook', 534, 1), + (3914, 1198, 1199, 'OP_CreateCharacterDungeon', 543, 1), + (3915, 1198, 1199, 'OP_DungeonMakerEnter', 544, 1), + (3916, 1198, 1199, 'OP_DungeonMakerItemRequest', 546, 1), + (3917, 1198, 1199, 'OP_CharacterCreatedDungeons', 547, 1), + (3918, 1198, 1199, 'OP_DungeonMakerToolboxList', 548, 1), + (3919, 1198, 1199, 'OP_DungeonMakerUnknown', 549, 1), + (3920, 1198, 1199, 'OP_DungeonMakerUnknown1', 550, 1), + (3921, 1198, 1199, 'OP_PlayerPollPopup', 552, 1), + (3922, 1198, 1199, 'OP_PlayerPollAnswer', 553, 1), + (3923, 1198, 1199, 'OP_MentorPopup', 554, 1), + (3924, 1198, 1199, 'OP_LoadWelcomeWindow', 556, 1), + (3925, 1198, 1199, 'OP_OpenCharCust', 557, 1), + (3926, 1198, 1199, 'OP_SubmitCharCust', 558, 1), + (3927, 1198, 1199, 'OP_QueAllBgSolo', 560, 1), + (3928, 1198, 1199, 'OP_ZoneBgInstanceList', 562, 1), + (3929, 1198, 1199, 'OP_WorldTravelAvail', 566, 1), + (3930, 1198, 1199, 'OP_PaperdollImage', 569, 1), + (3931, 1198, 1199, 'OP_LoadCalendarEvents', 570, 1), + (3932, 1198, 1199, 'OP_VideoUploaded', 571, 1), + (3933, 1198, 1199, 'OP_SavageBarInitMsg', 572, 1), + (3934, 1198, 1199, 'OP_PetOptionsResponse', 573, 1), + (3935, 1198, 1199, 'OP_DungeonMakerItemResponse', 574, 1), + (3936, 1198, 1199, 'OP_CharacterMounts', 576, 1), + (3937, 1198, 1199, 'OP_EqBetaCopyRequest', 586, 1), + (3938, 1198, 1199, 'OP_EqHearChatCmd', 587, 1), + (3939, 1198, 1199, 'OP_EqDisplayTextCmd', 588, 1), + (3940, 1198, 1199, 'OP_EqCreateGhostCmd', 589, 1), + (3941, 1198, 1199, 'OP_EqCreateWidgetCmd', 590, 1), + (3942, 1198, 1199, 'OP_EqCreateSignWidgetCmd', 591, 1), + (3943, 1198, 1199, 'OP_EqDestroyGhostCmd', 592, 1), + (3944, 1198, 1199, 'OP_EqUpdateGhostCmd', 593, 1), + (3945, 1198, 1199, 'OP_EqSetControlGhostCmd', 594, 1), + (3946, 1198, 1199, 'OP_EqSetPOVGhostCmd', 595, 1), + (3947, 1198, 1199, 'OP_EqHearCombatCmd', 596, 1), + (3948, 1198, 1199, 'OP_EqHearSpellCastCmd', 597, 1), + (3949, 1198, 1199, 'OP_EQHearProcCmd', 598, 1), + (3950, 1198, 1199, 'OP_EQHearResEffectCmd', 599, 1), + (3951, 1198, 1199, 'OP_EqHearSpellInterruptCmd', 600, 1), + (3952, 1198, 1199, 'OP_EqHearSpellFizzleCmd', 601, 1), + (3953, 1198, 1199, 'OP_EqHearConsiderCmd', 602, 1), + (3954, 1198, 1199, 'OP_EqUpdateSubClassesCmd', 603, 1), + (3955, 1198, 1199, 'OP_EqCreateListBoxCmd', 604, 1), + (3956, 1198, 1199, 'OP_EqSetDebugPathPointsCmd', 605, 1), + (3957, 1198, 1199, 'OP_EqCannedEmoteCmd', 607, 1), + (3958, 1198, 1199, 'OP_EqStateCmd', 608, 1), + (3959, 1198, 1199, 'OP_EqPlaySoundCmd', 609, 1), + (3960, 1198, 1199, 'OP_EqPlaySound3DCmd', 610, 1), + (3961, 1198, 1199, 'OP_EqPlayVoiceCmd', 611, 1), + (3962, 1198, 1199, 'OP_EqHearDrowningCmd', 612, 1), + (3963, 1198, 1199, 'OP_EqHearDeathCmd', 613, 1), + (3964, 1198, 1199, 'OP_EqGroupMemberRemovedCmd', 614, 1), + (3965, 1198, 1199, 'OP_EqHearChainEffectCmd', 615, 1), + (3966, 1198, 1199, 'OP_EqReceiveOfferCmd', 616, 1), + (3967, 1198, 1199, 'OP_EqInspectPCResultsCmd', 617, 1), + (3968, 1198, 1199, 'OP_EqDrawablePathGraphCmd', 618, 1), + (3969, 1198, 1199, 'OP_EqDialogOpenCmd', 619, 1), + (3970, 1198, 1199, 'OP_EqDialogCloseCmd', 620, 1), + (3971, 1198, 1199, 'OP_EqFactionUpdateCmd', 621, 1), + (3972, 1198, 1199, 'OP_EqCollectionUpdateCmd', 622, 1), + (3973, 1198, 1199, 'OP_EqCollectionFilterCmd', 623, 1), + (3974, 1198, 1199, 'OP_EqCollectionItemCmd', 624, 1), + (3975, 1198, 1199, 'OP_EqQuestJournalUpdateCmd', 625, 1), + (3976, 1198, 1199, 'OP_EqMentoring', 626, 1), + (3977, 1198, 1199, 'OP_EqQuestJournalReplyCmd', 627, 1), + (3978, 1198, 1199, 'OP_EqQuestGroupCmd', 628, 1), + (3979, 1198, 1199, 'OP_EqUpdateMerchantCmd', 629, 1), + (3980, 1198, 1199, 'OP_EqUpdateStoreCmd', 630, 1), + (3981, 1198, 1199, 'OP_EqUpdatePlayerTradeCmd', 631, 1), + (3982, 1198, 1199, 'OP_EqHelpPathCmd', 632, 1), + (3983, 1198, 1199, 'OP_EqHelpPathClearCmd', 633, 1), + (3984, 1198, 1199, 'OP_EqUpdateBankCmd', 634, 1), + (3985, 1198, 1199, 'OP_EqExamineInfoCmd', 635, 1), + (3986, 1198, 1199, 'OP_EqCloseWindowCmd', 636, 1), + (3987, 1198, 1199, 'OP_EqUpdateLootCmd', 637, 1), + (3988, 1198, 1199, 'OP_EqJunctionListCmd', 638, 1), + (3989, 1198, 1199, 'OP_EqShowDeathWindowCmd', 639, 1), + (3990, 1198, 1199, 'OP_EqDisplaySpellFailCmd', 640, 1), + (3991, 1198, 1199, 'OP_EqSpellCastStartCmd', 641, 1), + (3992, 1198, 1199, 'OP_EqSpellCastEndCmd', 642, 1), + (3993, 1198, 1199, 'OP_EqResurrectedCmd', 643, 1), + (3994, 1198, 1199, 'OP_EqChoiceWinCmd', 644, 1), + (3995, 1198, 1199, 'OP_EqSetDefaultVerbCmd', 645, 1), + (3996, 1198, 1199, 'OP_EqInstructionWindowCmd', 646, 1), + (3997, 1198, 1199, 'OP_EqInstructionWindowCloseCmd', 647, 1), + (3998, 1198, 1199, 'OP_EqInstructionWindowGoalCmd', 648, 1), + (3999, 1198, 1199, 'OP_EqInstructionWindowTaskCmd', 649, 1), + (4000, 1198, 1199, 'OP_EqEnableGameEventCmd', 650, 1), + (4001, 1198, 1199, 'OP_EqShowWindowCmd', 651, 1), + (4002, 1198, 1199, 'OP_EqEnableWindowCmd', 652, 1), + (4003, 1198, 1199, 'OP_EqFlashWindowCmd', 653, 1), + (4004, 1198, 1199, 'OP_EqHearPlayFlavorCmd', 655, 1), + (4005, 1198, 1199, 'OP_EqUpdateSignWidgetCmd', 656, 1), + (4006, 1198, 1199, 'OP_EqDebugPVDCmd', 657, 1), + (4007, 1198, 1199, 'OP_EqShowBookCmd', 658, 1), + (4008, 1198, 1199, 'OP_EqQuestionnaireCmd', 659, 1), + (4009, 1198, 1199, 'OP_EqGetProbsCmd', 661, 1), + (4010, 1198, 1199, 'OP_EqHearHealCmd', 662, 1), + (4011, 1198, 1199, 'OP_EqChatChannelUpdateCmd', 663, 1), + (4012, 1198, 1199, 'OP_EqWhoChannelQueryReplyCmd', 664, 1), + (4013, 1198, 1199, 'OP_EqAvailWorldChannelsCmd', 665, 1), + (4014, 1198, 1199, 'OP_EqUpdateTargetCmd', 666, 1), + (4015, 1198, 1199, 'OP_BrokerSellList', 667, 1), + (4016, 1198, 1199, 'OP_EqConsignmentItemsCmd', 668, 1), + (4017, 1198, 1199, 'OP_EqStartBrokerCmd', 670, 1), + (4018, 1198, 1199, 'OP_EqMapExplorationCmd', 671, 1), + (4019, 1198, 1199, 'OP_EqStoreLogCmd', 672, 1), + (4020, 1198, 1199, 'OP_EqSpellMoveToRangeAndRetryCmd', 673, 1), + (4021, 1198, 1199, 'OP_EqUpdatePlayerMailCmd', 674, 1), + (4022, 1198, 1199, 'OP_GuildStatusUpdate', 677, 1), + (4023, 1198, 1199, 'OP_EqArenaResultsCmd', 678, 1), + (4024, 1198, 1199, 'OP_EqGuildBankEventActionCmd', 679, 1), + (4025, 1198, 1199, 'OP_EqGuildBankExamineInfoCmd', 680, 1), + (4026, 1198, 1199, 'OP_EqHearSpellNoLandCmd', 681, 1), + (4027, 1198, 1199, 'OP_Lottery', 682, 1), + (4028, 1198, 1199, 'OP_GuildRecruitingMemberInfo', 683, 1), + (4029, 1198, 1199, 'OP_GuildRecruiting', 684, 1), + (4030, 1198, 1199, 'OP_GuildRecruitingDetails', 685, 1), + (4031, 1198, 1199, 'OP_GuildRecruitingImage', 686, 1), + (4032, 1198, 1199, 'OP_TradeskillList', 704, 1), + (4033, 1198, 1199, 'OP_CharRenamed', 688, 1), + (4034, 1198, 1199, 'OP_UseAdornment', 698, 1), + (4035, 1198, 1199, 'OP_ExpPurchWindow', 704, 1), + (4036, 1198, 1199, 'OP_PointOfInterest', 708, 1), + (4037, 1198, 1199, 'OP_PointOfInterest2', 709, 1), + (4038, 1198, 1199, 'OP_TraitsList', 710, 1), + (4039, 1198, 1199, 'OP_CustomizeHouseDisplay', 713, 1), + (4040, 1198, 1199, 'OP_VoiceChatServer', 714, 1), + (4041, 1198, 1199, 'OP_SupplyDepot', 718, 1), + (4042, 1198, 1199, 'OP_EQHearThreatCmd', 719, 1), + (4043, 1198, 1199, 'OP_RecipeList', 720, 1), + (4044, 1198, 1199, 'OP_Research', 721, 1), + (4045, 1198, 1199, 'OP_CharacterCurrency', 722, 1), + (4046, 1198, 1199, 'OP_CharacterAchievements', 723, 1), + (4047, 1198, 1199, 'OP_AchievementUpdateMsg', 724, 1), + (4048, 1198, 1199, 'OP_EQHearDispellCmd', 725, 1), + (4049, 1198, 1199, 'OP_JournalQuestStoryline', 726, 1), + (4050, 1198, 1199, 'OP_DungeonPlayAsAvatarList', 727, 1), + (4051, 1198, 1199, 'OP_DungeonPlayAsAvatarSelected', 728, 1), + (4052, 1198, 1199, 'OP_MercHireWindow', 729, 1), + (4053, 1198, 1199, 'OP_MercUnknown', 730, 1), + (4054, 1198, 1199, 'OP_Unknown', 747, 1), + (4055, 0, 0, 'OP_BrokerAddBag', 9999, 1), + (4056, 839, 844, 'OP_BrokerAddBag', 9999, 1), + (4057, 908, 927, 'OP_BrokerAddBag', 9999, 1), + (4058, 1008, 1011, 'OP_BrokerAddBag', 9999, 1), + (4059, 1045, 1046, 'OP_BrokerAddBag', 9999, 1), + (4060, 1096, 1096, 'OP_BrokerAddBag', 9999, 1), + (4062, 0, 0, 'OP_CharacterCurrency', 654, 1), + (4063, 839, 844, 'OP_CharacterCurrency', 654, 1), + (4064, 908, 927, 'OP_CharacterCurrency', 654, 1), + (4065, 1008, 1011, 'OP_CharacterCurrency', 654, 1), + (4066, 1045, 1046, 'OP_CharacterCurrency', 673, 1), + (4067, 1096, 1096, 'OP_CharacterCurrency', 676, 1), + (4068, 0, 0, 'OP_CharacterPet', 9999, 1), + (4069, 839, 844, 'OP_CharacterPet', 9999, 1), + (4070, 908, 927, 'OP_CharacterPet', 9999, 1), + (4071, 1008, 1011, 'OP_CharacterPet', 9999, 1), + (4072, 1045, 1046, 'OP_CharacterPet', 9999, 1), + (4073, 1096, 1096, 'OP_CharacterPet', 9999, 1), + (4075, 0, 0, 'OP_TradeskillList', 9999, 1), + (4076, 839, 844, 'OP_TradeskillList', 9999, 1), + (4077, 908, 927, 'OP_TradeskillList', 9999, 1), + (4078, 1008, 1011, 'OP_TradeskillList', 9999, 1), + (4079, 1045, 1046, 'OP_TradeskillList', 9999, 1), + (4083, 1204, 1205, 'OP_LoginRequestMsg', 0, 1), + (4084, 1204, 1205, 'OP_LoginByNumRequestMsg', 1, 1), + (4085, 1204, 1205, 'OP_WSLoginRequestMsg', 2, 1), + (4086, 1204, 1205, 'OP_ESLoginRequestMsg', 3, 1), + (4087, 1204, 1205, 'OP_LoginReplyMsg', 4, 1), + (4088, 1204, 1205, 'OP_WSStatusReplyMsg', 5, 1), + (4089, 1204, 1205, 'OP_WorldStatusChangeMsg', 6, 1), + (4090, 1204, 1205, 'OP_AllWSDescRequestMsg', 7, 1), + (4091, 1204, 1205, 'OP_WorldListMsg', 8, 1), + (4092, 1204, 1205, 'OP_AllCharactersDescRequestMsg', 9, 1), + (4093, 1204, 1205, 'OP_AllCharactersDescReplyMsg', 10, 1), + (4094, 1204, 1205, 'OP_CreateCharacterRequestMsg', 11, 1), + (4095, 1204, 1205, 'OP_CreateCharacterReplyMsg', 12, 1), + (4096, 1204, 1205, 'OP_WSCreateCharacterRequestMsg', 13, 1), + (4097, 1204, 1205, 'OP_WSCreateCharacterReplyMsg', 14, 1), + (4098, 1204, 1205, 'OP_ReskinCharacterRequestMsg', 15, 1), + (4099, 1204, 1205, 'OP_DeleteCharacterRequestMsg', 16, 1), + (4100, 1204, 1205, 'OP_DeleteCharacterReplyMsg', 17, 1), + (4101, 1204, 1205, 'OP_PlayCharacterRequestMsg', 18, 1), + (4102, 1204, 1205, 'OP_PlayCharacterReplyMsg', 19, 1), + (4103, 1204, 1205, 'OP_ExpectClientAsCharacterReplyMs', 22, 1), + (4104, 1204, 1205, 'OP_ServerPlayCharacterRequestMsg', 23, 1), + (4105, 1204, 1205, 'OP_ServerPlayCharacterReplyMsg', 24, 1), + (4106, 1204, 1205, 'OP_ESInitMsg', 25, 1), + (4107, 1204, 1205, 'OP_ESReadyForClientsMsg', 26, 1), + (4108, 1204, 1205, 'OP_CreateZoneInstanceMsg', 29, 1), + (4109, 1204, 1205, 'OP_ZoneInstanceCreateReplyMsg', 30, 1), + (4110, 1204, 1205, 'OP_ZoneInstanceDestroyedMsg', 31, 1), + (4111, 1204, 1205, 'OP_ExpectClientAsCharacterRequest', 32, 1), + (4112, 1204, 1205, 'OP_ZoneInfoMsg', 33, 1), + (4113, 1204, 1205, 'OP_DoneLoadingZoneResourcesMsg', 34, 1), + (4114, 1204, 1205, 'OP_DoneSendingInitialEntitiesMsg', 35, 1), + (4115, 1204, 1205, 'OP_DoneLoadingEntityResourcesMsg', 36, 1), + (4116, 1204, 1205, 'OP_PredictionUpdateMsg', 37, 1), + (4117, 1204, 1205, 'OP_UpdatePositionMsg', 39, 1), + (4118, 1204, 1205, 'OP_SetRemoteCmdsMsg', 41, 1), + (4119, 1204, 1205, 'OP_RemoteCmdMsg', 42, 1), + (4120, 1204, 1205, 'OP_GameWorldTimeMsg', 43, 1), + (4121, 1204, 1205, 'OP_MOTDMsg', 44, 1), + (4122, 1204, 1205, 'OP_ZoneMOTDMsg', 45, 1), + (4123, 1204, 1205, 'OP_AvatarCreatedMsg', 46, 1), + (4124, 1204, 1205, 'OP_AvatarDestroyedMsg', 47, 1), + (4125, 1204, 1205, 'OP_RequestCampMsg', 50, 1), + (4126, 1204, 1205, 'OP_CampStartedMsg', 51, 1), + (4127, 1204, 1205, 'OP_CampAbortedMsg', 52, 1), + (4128, 1204, 1205, 'OP_WhoQueryRequestMsg', 53, 1), + (4129, 1204, 1205, 'OP_WhoQueryReplyMsg', 54, 1), + (4130, 1204, 1205, 'OP_MonitorReplyMsg', 55, 1), + (4131, 1204, 1205, 'OP_MonitorCharacterListMsg', 56, 1), + (4132, 1204, 1205, 'OP_MonitorCharacterListRequestMsg', 57, 1), + (4133, 1204, 1205, 'OP_ClientCmdMsg', 58, 1), + (4134, 1204, 1205, 'OP_DispatchESMsg', 59, 1), + (4135, 1204, 1205, 'OP_DispatchClientCmdMsg', 60, 1), + (4136, 1204, 1205, 'OP_UpdateTargetMsg', 61, 1), + (4137, 1204, 1205, 'OP_UpdateTargetLocMsg', 62, 1), + (4138, 1204, 1205, 'OP_UpdateCharacterSheetMsg', 63, 1), + (4139, 1204, 1205, 'OP_CharacterPet', 64, 1), + (4140, 1204, 1205, 'OP_CharacterMerc', 65, 1), + (4141, 1204, 1205, 'OP_UpdateSpellBookMsg', 66, 1), + (4142, 1204, 1205, 'OP_UpdateInventoryMsg', 68, 1), + (4143, 1204, 1205, 'OP_AfterInvSpellUpdate', 69, 1), + (4144, 1204, 1205, 'OP_UpdateRecipeBookMsg', 70, 1), + (4145, 1204, 1205, 'OP_RequestRecipeDetailsMsg', 71, 1), + (4146, 1204, 1205, 'OP_RecipeDetailsMsg', 72, 1), + (4147, 1204, 1205, 'OP_UpdateSkillBookMsg', 73, 1), + (4148, 1204, 1205, 'OP_UpdateSkillsMsg', 74, 1), + (4149, 1204, 1205, 'OP_UpdateOpportunityMsg', 75, 1), + (4150, 1204, 1205, 'OP_ChangeZoneMsg', 77, 1), + (4151, 1204, 1205, 'OP_ClientTeleportRequestMsg', 78, 1), + (4152, 1204, 1205, 'OP_TeleportWithinZoneMsg', 79, 1), + (4153, 1204, 1205, 'OP_TeleportWithinZoneNoReloadMsg', 80, 1), + (4154, 1204, 1205, 'OP_MigrateClientToZoneRequestMsg', 81, 1), + (4155, 1204, 1205, 'OP_MigrateClientToZoneReplyMsg', 82, 1), + (4156, 1204, 1205, 'OP_ReadyToZoneMsg', 84, 1), + (4157, 1204, 1205, 'OP_RemoveClientFromGroupMsg', 85, 1), + (4158, 1204, 1205, 'OP_RemoveGroupFromGroupMsg', 86, 1), + (4159, 1204, 1205, 'OP_MakeGroupLeaderMsg', 87, 1), + (4160, 1204, 1205, 'OP_GroupCreatedMsg', 88, 1), + (4161, 1204, 1205, 'OP_GroupDestroyedMsg', 89, 1), + (4162, 1204, 1205, 'OP_GroupMemberAddedMsg', 90, 1), + (4163, 1204, 1205, 'OP_GroupMemberRemovedMsg', 91, 1), + (4164, 1204, 1205, 'OP_GroupRemovedFromGroupMsg', 92, 1), + (4165, 1204, 1205, 'OP_GroupLeaderChangedMsg', 93, 1), + (4166, 1204, 1205, 'OP_GroupResendOOZDataMsg', 94, 1), + (4167, 1204, 1205, 'OP_GroupSettingsChangedMsg', 95, 1), + (4168, 1204, 1205, 'OP_OutOfZoneMemberDataMsg', 96, 1), + (4169, 1204, 1205, 'OP_SendLatestRequestMsg', 97, 1), + (4170, 1204, 1205, 'OP_ClearDataMsg', 98, 1), + (4171, 1204, 1205, 'OP_SetSocialMsg', 99, 1), + (4172, 1204, 1205, 'OP_ESStatusMsg', 100, 1), + (4173, 1204, 1205, 'OP_ESZoneInstanceStatusMsg', 101, 1), + (4174, 1204, 1205, 'OP_ZonesStatusRequestMsg', 102, 1), + (4175, 1204, 1205, 'OP_ZonesStatusMsg', 103, 1), + (4176, 1204, 1205, 'OP_ESWeatherRequestMsg', 104, 1), + (4177, 1204, 1205, 'OP_ESWeatherRequestEndMsg', 105, 1), + (4178, 1204, 1205, 'OP_DialogSelectMsg', 109, 1), + (4179, 1204, 1205, 'OP_DialogCloseMsg', 110, 1), + (4180, 1204, 1205, 'OP_RemoveSpellEffectMsg', 111, 1), + (4181, 1204, 1205, 'OP_RemoveConcentrationMsg', 112, 1), + (4182, 1204, 1205, 'OP_QuestJournalOpenMsg', 113, 1), + (4183, 1204, 1205, 'OP_QuestJournalInspectMsg', 114, 1), + (4184, 1204, 1205, 'OP_QuestJournalSetVisibleMsg', 115, 1), + (4185, 1204, 1205, 'OP_QuestJournalWaypointMsg', 116, 1), + (4186, 1204, 1205, 'OP_CreateGuildRequestMsg', 119, 1), + (4187, 1204, 1205, 'OP_CreateGuildReplyMsg', 120, 1), + (4188, 1204, 1205, 'OP_GuildsayMsg', 121, 1), + (4189, 1204, 1205, 'OP_FellowshipExpMsg', 122, 1), + (4190, 1204, 1205, 'OP_DeleteGuildMsg', 123, 1), + (4191, 1204, 1205, 'OP_GuildUpdateMsg', 124, 1), + (4192, 1204, 1205, 'OP_ConsignmentCloseStoreMsg', 125, 1), + (4193, 1204, 1205, 'OP_ConsignItemRequestMsg', 126, 1), + (4194, 1204, 1205, 'OP_ConsignItemResponseMsg', 127, 1), + (4195, 1204, 1205, 'OP_PurchaseConsignmentRequestMsg', 128, 1), + (4196, 1204, 1205, 'OP_LikeOption', 135, 1), + (4197, 1204, 1205, 'OP_PublishHouse', 138, 1), + (4198, 1204, 1205, 'OP_PlayerMadeInstacnesScreen', 139, 1), + (4199, 1204, 1205, 'OP_PlayerMadeInstances', 140, 1), + (4200, 1204, 1205, 'OP_HouseDeletedRemotelyMsg', 141, 1), + (4201, 1204, 1205, 'OP_UpdateHouseDataMsg', 142, 1), + (4202, 1204, 1205, 'OP_UpdateHouseAccessDataMsg', 143, 1), + (4203, 1204, 1205, 'OP_PlayerHouseBaseScreenMsg', 144, 1), + (4204, 1204, 1205, 'OP_PlayerHousePurchaseScreenMsg', 145, 1), + (4205, 1204, 1205, 'OP_PlayerHouseAccessUpdateMsg', 146, 1), + (4206, 1204, 1205, 'OP_PlayerHouseDisplayStatusMsg', 147, 1), + (4207, 1204, 1205, 'OP_PlayerHouseCloseUIMsg', 148, 1), + (4208, 1204, 1205, 'OP_BuyPlayerHouseMsg', 149, 1), + (4209, 1204, 1205, 'OP_BuyPlayerHouseTintMsg', 150, 1), + (4210, 1204, 1205, 'OP_CollectAllHouseItemsMsg', 151, 1), + (4211, 1204, 1205, 'OP_RelinquishHouseMsg', 152, 1), + (4212, 1204, 1205, 'OP_EnterHouseMsg', 153, 1), + (4213, 1204, 1205, 'OP_ExitHouseMsg', 154, 1), + (4214, 1204, 1205, 'OP_HouseDefaultAccessSetMsg', 155, 1), + (4215, 1204, 1205, 'OP_HouseAccessSetMsg', 156, 1), + (4216, 1204, 1205, 'OP_HouseAccessRemoveMsg', 157, 1), + (4217, 1204, 1205, 'OP_PayHouseUpkeepMsg', 158, 1), + (4218, 1204, 1205, 'OP_MoveableObjectPlacementCriteri', 159, 1), + (4219, 1204, 1205, 'OP_EnterMoveObjectModeMsg', 160, 1), + (4220, 1204, 1205, 'OP_PositionMoveableObject', 161, 1), + (4221, 1204, 1205, 'OP_CancelMoveObjectModeMsg', 162, 1), + (4222, 1204, 1205, 'OP_ShaderCustomizationMsg', 163, 1), + (4223, 1204, 1205, 'OP_ReplaceableSubMeshesMsg', 164, 1), + (4224, 1204, 1205, 'OP_HouseCustomizationScreenMsg', 165, 1), + (4225, 1204, 1205, 'OP_CustomizationPurchaseRequestMs', 166, 1), + (4226, 1204, 1205, 'OP_CustomizationSetRequestMsg', 167, 1), + (4227, 1204, 1205, 'OP_CustomizationReplyMsg', 168, 1), + (4228, 1204, 1205, 'OP_TintWidgetsMsg', 169, 1), + (4229, 1204, 1205, 'OP_ExamineConsignmentRequestMsg', 170, 1), + (4230, 1204, 1205, 'OP_ExamineConsignmentResponseMsg', 171, 1), + (4231, 1204, 1205, 'OP_UISettingsResponseMsg', 172, 1), + (4232, 1204, 1205, 'OP_UIResetMsg', 173, 1), + (4233, 1204, 1205, 'OP_KeymapLoadMsg', 174, 1), + (4234, 1204, 1205, 'OP_KeymapNoneMsg', 175, 1), + (4235, 1204, 1205, 'OP_KeymapDataMsg', 176, 1), + (4236, 1204, 1205, 'OP_KeymapSaveMsg', 177, 1), + (4237, 1204, 1205, 'OP_DispatchSpellCmdMsg', 178, 1), + (4238, 1204, 1205, 'OP_EntityVerbsRequestMsg', 179, 1), + (4239, 1204, 1205, 'OP_EntityVerbsReplyMsg', 180, 1), + (4240, 1204, 1205, 'OP_EntityVerbsVerbMsg', 181, 1), + (4241, 1204, 1205, 'OP_ChatRelationshipUpdateMsg', 183, 1), + (4242, 1204, 1205, 'OP_LootItemsRequestMsg', 184, 1), + (4243, 1204, 1205, 'OP_StoppedLootingMsg', 185, 1), + (4244, 1204, 1205, 'OP_SitMsg', 186, 1), + (4245, 1204, 1205, 'OP_StandMsg', 187, 1), + (4246, 1204, 1205, 'OP_SatMsg', 188, 1), + (4247, 1204, 1205, 'OP_StoodMsg', 189, 1), + (4248, 1204, 1205, 'OP_ClearForTakeOffMsg', 190, 1), + (4249, 1204, 1205, 'OP_ReadyForTakeOffMsg', 191, 1), + (4250, 1204, 1205, 'OP_ShowIllusionsMsg', 192, 1), + (4251, 1204, 1205, 'OP_HideIllusionsMsg', 193, 1), + (4252, 1204, 1205, 'OP_ExamineItemRequestMsg', 194, 1), + (4253, 1204, 1205, 'OP_ReadBookPageMsg', 195, 1), + (4254, 1204, 1205, 'OP_DefaultGroupOptionsRequestMsg', 196, 1), + (4255, 1204, 1205, 'OP_DefaultGroupOptionsMsg', 197, 1), + (4256, 1204, 1205, 'OP_GroupOptionsMsg', 198, 1), + (4257, 1204, 1205, 'OP_DisplayGroupOptionsScreenMsg', 199, 1), + (4258, 1204, 1205, 'OP_PetOptions', 200, 1), + (4259, 1204, 1205, 'OP_DisplayInnVisitScreenMsg', 201, 1), + (4260, 1204, 1205, 'OP_DumpSchedulerMsg', 202, 1), + (4261, 1204, 1205, 'OP_LSCheckAcctLockMsg', 203, 1), + (4262, 1204, 1205, 'OP_WSAcctLockStatusMsg', 204, 1), + (4263, 1204, 1205, 'OP_RequestHelpRepathMsg', 205, 1), + (4264, 1204, 1205, 'OP_RequestTargetLocMsg', 206, 1), + (4265, 1204, 1205, 'OP_UpdateMotdMsg', 207, 1), + (4266, 1204, 1205, 'OP_DestUpdateReq', 209, 1), + (4267, 1204, 1205, 'OP_PerformPlayerKnockbackMsg', 212, 1), + (4268, 1204, 1205, 'OP_PerformCameraShakeMsg', 213, 1), + (4269, 1204, 1205, 'OP_PopulateSkillMapsMsg', 214, 1), + (4270, 1204, 1205, 'OP_CancelledFeignMsg', 215, 1), + (4271, 1204, 1205, 'OP_SysClient', 217, 1), + (4272, 1204, 1205, 'OP_ShowCreateFromRecipeUIMsg', 218, 1), + (4273, 1204, 1205, 'OP_CancelCreateFromRecipeMsg', 219, 1), + (4274, 1204, 1205, 'OP_BeginItemCreationMsg', 220, 1), + (4275, 1204, 1205, 'OP_StopItemCreationMsg', 221, 1), + (4276, 1204, 1205, 'OP_ShowItemCreationProcessUIMsg', 222, 1), + (4277, 1204, 1205, 'OP_UpdateItemCreationProcessUIMsg', 223, 1), + (4278, 1204, 1205, 'OP_DisplayTSEventReactionMsg', 224, 1), + (4279, 1204, 1205, 'OP_ShowRecipeBookMsg', 225, 1), + (4280, 1204, 1205, 'OP_KnowledgebaseRequestMsg', 226, 1), + (4281, 1204, 1205, 'OP_KnowledgebaseResponseMsg', 227, 1), + (4282, 1204, 1205, 'OP_CSTicketHeaderRequestMsg', 228, 1), + (4283, 1204, 1205, 'OP_CSTicketInfoMsg', 229, 1), + (4284, 1204, 1205, 'OP_CSTicketCommentRequestMsg', 230, 1), + (4285, 1204, 1205, 'OP_CSTicketCommentResponseMsg', 231, 1), + (4286, 1204, 1205, 'OP_CSTicketCreateMsg', 232, 1), + (4287, 1204, 1205, 'OP_CSTicketAddCommentMsg', 233, 1), + (4288, 1204, 1205, 'OP_CSTicketDeleteMsg', 234, 1), + (4289, 1204, 1205, 'OP_CSTicketChangeNotificationMsg', 235, 1), + (4290, 1204, 1205, 'OP_WorldDataUpdateMsg', 236, 1), + (4291, 1204, 1205, 'OP_KnownLanguagesMsg', 237, 1), + (4292, 1204, 1205, 'OP_LsRequestClientCrashLogMsg', 238, 1), + (4293, 1204, 1205, 'OP_LsClientBaselogReplyMsg', 239, 1), + (4294, 1204, 1205, 'OP_LsClientCrashlogReplyMsg', 240, 1), + (4295, 1204, 1205, 'OP_LsClientAlertlogReplyMsg', 241, 1), + (4296, 1204, 1205, 'OP_LsClientVerifylogReplyMsg', 242, 1), + (4297, 1204, 1205, 'OP_ClientTeleportToLocationMsg', 243, 1), + (4298, 1204, 1205, 'OP_UpdateClientPredFlagsMsg', 244, 1), + (4299, 1204, 1205, 'OP_ChangeServerControlFlagMsg', 245, 1), + (4300, 1204, 1205, 'OP_CSToolsRequestMsg', 246, 1), + (4301, 1204, 1205, 'OP_CSToolsResponseMsg', 247, 1), + (4302, 1204, 1205, 'OP_AddSocialStructureStandingMsg', 248, 1), + (4303, 1204, 1205, 'OP_CreateBoatTransportsMsg', 249, 1), + (4304, 1204, 1205, 'OP_PositionBoatTransportMsg', 250, 1), + (4305, 1204, 1205, 'OP_MigrateBoatTransportMsg', 251, 1), + (4306, 1204, 1205, 'OP_MigrateBoatTransportReplyMsg', 252, 1), + (4307, 1204, 1205, 'OP_DisplayDebugNLLPointsMsg', 253, 1), + (4308, 1204, 1205, 'OP_ExamineInfoRequestMsg', 254, 1), + (4309, 1204, 1205, 'OP_QuickbarInitMsg', 255, 1), + (4310, 1204, 1205, 'OP_QuickbarUpdateMsg', 256, 1), + (4311, 1204, 1205, 'OP_MacroInitMsg', 257, 1), + (4312, 1204, 1205, 'OP_MacroUpdateMsg', 258, 1), + (4313, 1204, 1205, 'OP_QuestionnaireMsg', 259, 1), + (4314, 1204, 1205, 'OP_LevelChangedMsg', 260, 1), + (4315, 1204, 1205, 'OP_SpellGainedMsg', 261, 1), + (4316, 1204, 1205, 'OP_EncounterBrokenMsg', 262, 1), + (4317, 1204, 1205, 'OP_OnscreenMsgMsg', 263, 1), + (4318, 1204, 1205, 'OP_DisplayWarningMsg', 264, 1), + (4319, 1204, 1205, 'OP_ModifyGuildMsg', 265, 1), + (4320, 1204, 1205, 'OP_GuildEventMsg', 266, 1), + (4321, 1204, 1205, 'OP_GuildEventAddMsg', 267, 1), + (4322, 1204, 1205, 'OP_GuildEventActionMsg', 268, 1), + (4323, 1204, 1205, 'OP_GuildEventListMsg', 269, 1), + (4324, 1204, 1205, 'OP_RequestGuildEventDetailsMsg', 270, 1), + (4325, 1204, 1205, 'OP_GuildEventDetailsMsg', 271, 1), + (4326, 1204, 1205, 'OP_RequestGuildInfoMsg', 272, 1), + (4327, 1204, 1205, 'OP_GuildBankActionMsg', 273, 1), + (4328, 1204, 1205, 'OP_GuildBankActionResponseMsg', 274, 1), + (4329, 1204, 1205, 'OP_GuildBankItemDetailsRequestMsg', 275, 1), + (4330, 1204, 1205, 'OP_GuildBankItemDetailsResponseMs', 276, 1), + (4331, 1204, 1205, 'OP_GuildBankUpdateMsg', 277, 1), + (4332, 1204, 1205, 'OP_GuildBankEventListMsg', 278, 1), + (4333, 1204, 1205, 'OP_RequestGuildBankEventDetailsMs', 279, 1), + (4334, 1204, 1205, 'OP_RewardPackMsg', 280, 1), + (4335, 1204, 1205, 'OP_RenameGuildMsg', 281, 1), + (4336, 1204, 1205, 'OP_ZoneToFriendRequestMsg', 282, 1), + (4337, 1204, 1205, 'OP_ZoneToFriendReplyMsg', 283, 1), + (4338, 1204, 1205, 'OP_ChatCreateChannelMsg', 284, 1), + (4339, 1204, 1205, 'OP_ChatJoinChannelMsg', 285, 1), + (4340, 1204, 1205, 'OP_ChatWhoChannelMsg', 286, 1), + (4341, 1204, 1205, 'OP_ChatLeaveChannelMsg', 287, 1), + (4342, 1204, 1205, 'OP_ChatTellChannelMsg', 288, 1), + (4343, 1204, 1205, 'OP_ChatTellUserMsg', 289, 1), + (4344, 1204, 1205, 'OP_ChatToggleFriendMsg', 290, 1), + (4345, 1204, 1205, 'OP_BrokerAddBag', 291, 1), + (4346, 1204, 1205, 'OP_BrokerRemoveBag', 292, 1), + (4347, 1204, 1205, 'OP_ChatToggleIgnoreMsg', 293, 1), + (4348, 1204, 1205, 'OP_ChatSendFriendsMsg', 294, 1), + (4349, 1204, 1205, 'OP_ChatSendIgnoresMsg', 295, 1), + (4350, 1204, 1205, 'OP_QuestReward', 319, 1), + (4351, 1204, 1205, 'OP_ChatFiltersMsg', 334, 1), + (4352, 1204, 1205, 'OP_MailGetMessageMsg', 337, 1), + (4353, 1204, 1205, 'OP_MailSendMessageMsg', 338, 1), + (4354, 1204, 1205, 'OP_MailDeleteMessageMsg', 339, 1), + (4355, 1204, 1205, 'OP_MailGetHeadersReplyMsg', 340, 1), + (4356, 1204, 1205, 'OP_MailGetMessageReplyMsg', 341, 1), + (4357, 1204, 1205, 'OP_MailSendMessageReplyMsg', 342, 1), + (4358, 1204, 1205, 'OP_MailCommitSendMessageMsg', 343, 1), + (4359, 1204, 1205, 'OP_MailSendSystemMessageMsg', 344, 1), + (4360, 1204, 1205, 'OP_MailRemoveAttachFromMailMsg', 345, 1), + (4361, 1204, 1205, 'OP_WaypointRequestMsg', 347, 1), + (4362, 1204, 1205, 'OP_WaypointReplyMsg', 348, 1), + (4363, 1204, 1205, 'OP_WaypointSelectMsg', 349, 1), + (4364, 1204, 1205, 'OP_WaypointUpdateMsg', 350, 1), + (4365, 1204, 1205, 'OP_CharNameChangedMsg', 351, 1), + (4366, 1204, 1205, 'OP_ShowZoneTeleporterDestinations', 352, 1), + (4367, 1204, 1205, 'OP_SelectZoneTeleporterDestinatio', 353, 1), + (4368, 1204, 1205, 'OP_ReloadLocalizedTxtMsg', 354, 1), + (4369, 1204, 1205, 'OP_RequestGuildMembershipMsg', 355, 1), + (4370, 1204, 1205, 'OP_GuildMembershipResponseMsg', 356, 1), + (4371, 1204, 1205, 'OP_LeaveGuildNotifyMsg', 357, 1), + (4372, 1204, 1205, 'OP_JoinGuildNotifyMsg', 358, 1), + (4373, 1204, 1205, 'OP_AvatarUpdateMsg', 359, 1), + (4374, 1204, 1205, 'OP_BioUpdateMsg', 361, 1), + (4375, 1204, 1205, 'OP_InspectPlayerMsg', 362, 1), + (4376, 1204, 1205, 'OP_WSServerLockMsg', 363, 1), + (4377, 1204, 1205, 'OP_LSServerLockMsg', 364, 1), + (4378, 1204, 1205, 'OP_WSServerHideMsg', 365, 1), + (4379, 1204, 1205, 'OP_CsCategoryRequestMsg', 366, 1), + (4380, 1204, 1205, 'OP_CsCategoryResponseMsg', 367, 1), + (4381, 1204, 1205, 'OP_KnowledgeWindowSlotMappingMsg', 368, 1), + (4382, 1204, 1205, 'OP_AFKUpdateMsg', 369, 1), + (4383, 1204, 1205, 'OP_AnonUpdateMsg', 370, 1), + (4384, 1204, 1205, 'OP_UpdateActivePublicZonesMsg', 371, 1), + (4385, 1204, 1205, 'OP_UnknownNpcMsg', 372, 1), + (4386, 1204, 1205, 'OP_PromoFlagsDetailsMsg', 373, 1), + (4387, 1204, 1205, 'OP_ConsignViewCreateMsg', 374, 1), + (4388, 1204, 1205, 'OP_ConsignViewGetPageMsg', 375, 1), + (4389, 1204, 1205, 'OP_ConsignViewReleaseMsg', 376, 1), + (4390, 1204, 1205, 'OP_ConsignRemoveItemsMsg', 377, 1), + (4391, 1204, 1205, 'OP_UpdateDebugRadiiMsg', 378, 1), + (4392, 1204, 1205, 'OP_ReportMsg', 379, 1), + (4393, 1204, 1205, 'OP_UpdateRaidMsg', 380, 1), + (4394, 1204, 1205, 'OP_ConsignViewSortMsg', 382, 1), + (4395, 1204, 1205, 'OP_TitleUpdateMsg', 383, 1), + (4396, 1204, 1205, 'OP_ClientFellMsg', 384, 1), + (4397, 1204, 1205, 'OP_ClientInDeathRegionMsg', 385, 1), + (4398, 1204, 1205, 'OP_CampClientMsg', 386, 1), + (4399, 1204, 1205, 'OP_CSToolAccessResponseMsg', 387, 1), + (4400, 1204, 1205, 'OP_TrackingUpdateMsg', 388, 1), + (4401, 1204, 1205, 'OP_BeginTrackingMsg', 389, 1), + (4402, 1204, 1205, 'OP_StopTrackingMsg', 390, 1), + (4403, 1204, 1205, 'OP_GetAvatarAccessRequestForCSToo', 392, 1), + (4404, 1204, 1205, 'OP_AdvancementRequestMsg', 393, 1), + (4405, 1204, 1205, 'OP_MapFogDataInitMsg', 394, 1), + (4406, 1204, 1205, 'OP_MapFogDataUpdateMsg', 395, 1), + (4407, 1204, 1205, 'OP_CloseGroupInviteWindowMsg', 396, 1), + (4408, 1204, 1205, 'OP_UpdateGroupMemberDataMsg', 397, 1), + (4409, 1204, 1205, 'OP_WorldPingMsg', 398, 1), + (4410, 1204, 1205, 'OP_MoveLogUpdateMsg', 389, 1), + (4411, 1204, 1205, 'OP_OfferQuestMsg', 400, 1), + (4412, 1204, 1205, 'OP_WorldShutdownUpdateMsg', 402, 1), + (4413, 1204, 1205, 'OP_DisplayMailScreenMsg', 403, 1), + (4414, 1204, 1205, 'OP_ClientIdleBeginMsg', 404, 1), + (4415, 1204, 1205, 'OP_ClientIdleEndMsg', 405, 1), + (4416, 1204, 1205, 'OP_PurchaseConsignmentLoreCheckRe', 406, 1), + (4417, 1204, 1205, 'OP_NotifyApprenticeStoppedMentori', 407, 1), + (4418, 1204, 1205, 'OP_CorruptedClientMsg', 408, 1), + (4419, 1204, 1205, 'OP_WorldDataChangeMsg', 409, 1), + (4420, 1204, 1205, 'OP_MailEventNotificationMsg', 410, 1), + (4421, 1204, 1205, 'OP_RestartZoneMsg', 411, 1), + (4422, 1204, 1205, 'OP_FlightPathsMsg', 412, 1), + (4423, 1204, 1205, 'OP_CharacterLinkdeadMsg', 413, 1), + (4424, 1204, 1205, 'OP_CharTransferStartRequestMsg', 414, 1), + (4425, 1204, 1205, 'OP_CharTransferStartReplyMsg', 415, 1), + (4426, 1204, 1205, 'OP_CharTransferRequestMsg', 416, 1), + (4427, 1204, 1205, 'OP_CharTransferReplyMsg', 417, 1), + (4428, 1204, 1205, 'OP_CharTransferRollbackRequestMsg', 418, 1), + (4429, 1204, 1205, 'OP_CharTransferCommitRequestMsg', 419, 1), + (4430, 1204, 1205, 'OP_CharTransferRollbackReplyMsg', 420, 1), + (4431, 1204, 1205, 'OP_CharTransferCommitReplyMsg', 421, 1), + (4432, 1204, 1205, 'OP_GetCharacterSerializedRequestM', 422, 1), + (4433, 1204, 1205, 'OP_GetCharacterSerializedReplyMsg', 423, 1), + (4434, 1204, 1205, 'OP_CreateCharFromCBBRequestMsg', 424, 1), + (4435, 1204, 1205, 'OP_CreateCharFromCBBReplyMsg', 425, 1), + (4436, 1204, 1205, 'OP_HousingDataChangedMsg', 426, 1), + (4437, 1204, 1205, 'OP_HousingRestoreMsg', 427, 1), + (4438, 1204, 1205, 'OP_AuctionItem', 428, 1), + (4439, 1204, 1205, 'OP_AuctionItemReply', 429, 1), + (4440, 1204, 1205, 'OP_AuctionCoin', 430, 1), + (4441, 1204, 1205, 'OP_AuctionCoinReply', 431, 1), + (4442, 1204, 1205, 'OP_AuctionCharacter', 432, 1), + (4443, 1204, 1205, 'OP_AuctionCharacterReply', 433, 1), + (4444, 1204, 1205, 'OP_AuctionCommitMsg', 434, 1), + (4445, 1204, 1205, 'OP_AuctionAbortMsg', 435, 1), + (4446, 1204, 1205, 'OP_CharTransferValidateRequestMsg', 436, 1), + (4447, 1204, 1205, 'OP_CharTransferValidateReplyMsg', 437, 1), + (4448, 1204, 1205, 'OP_RaceRestrictionMsg', 438, 1), + (4449, 1204, 1205, 'OP_SetInstanceDisplayNameMsg', 439, 1), + (4450, 1204, 1205, 'OP_GetAuctionAssetIDMsg', 440, 1), + (4451, 1204, 1205, 'OP_GetAuctionAssetIDReplyMsg', 441, 1), + (4452, 1204, 1205, 'OP_ResendWorldChannelsMsg', 442, 1), + (4453, 1204, 1205, 'OP_DisplayExchangeScreenMsg', 443, 1), + (4454, 1204, 1205, 'OP_ArenaGameTypesMsg', 444, 1), + (4455, 1204, 1205, 'OP_AuditAuctionEventMsg', 445, 1), + (4456, 1204, 1205, 'OP_InviteRequestMsg', 446, 1), + (4457, 1204, 1205, 'OP_InviteResponseMsg', 447, 1), + (4458, 1204, 1205, 'OP_InviteTargetResponseMsg', 448, 1), + (4459, 1204, 1205, 'OP_InspectPlayerRequestMsg', 449, 1), + (4460, 1204, 1205, 'OP_DispatchMsg', 450, 1), + (4461, 1204, 1205, 'OP_DisplayEventMsg', 451, 1), + (4462, 1204, 1205, 'OP_PrePossessionMsg', 452, 1), + (4463, 1204, 1205, 'OP_PostPossessionMsg', 453, 1), + (4464, 1204, 1205, 'OP_ArenaCreate', 455, 1), + (4465, 1204, 1205, 'OP_ArenaList', 456, 1), + (4466, 1204, 1205, 'OP_ArenaWindow', 464, 1), + (4467, 1204, 1205, 'OP_HouseItemsList', 482, 1), + (4468, 1204, 1205, 'OP_CurrentPet', 484, 1), + (4469, 1204, 1205, 'OP_AdventureList', 487, 1), + (4470, 1204, 1205, 'OP_CancelSpellCast', 488, 1), + (4471, 1204, 1205, 'OP_UpdateTitleCmd', 493, 1), + (4472, 1204, 1205, 'OP_AttackAllowed', 499, 1), + (4473, 1204, 1205, 'OP_AttackNotAllowed', 500, 1), + (4474, 1204, 1205, 'OP_BagOptions', 501, 1), + (4475, 1204, 1205, 'OP_LFGGroupSearch', 503, 1), + (4476, 1204, 1205, 'OP_CharacterHousingList', 506, 1), + (4477, 1204, 1205, 'OP_DressingRoom', 509, 1), + (4478, 1204, 1205, 'OP_PlayLon', 510, 1), + (4479, 1204, 1205, 'OP_SkillInfoRequest', 513, 1), + (4480, 1204, 1205, 'OP_SkillInfoResponse', 514, 1), + (4481, 1204, 1205, 'OP_LFGUpdateMsg', 517, 1), + (4482, 1204, 1205, 'OP_BadLanguageFilter', 518, 1), + (4483, 1204, 1205, 'OP_VoiceChatChannel', 519, 1), + (4484, 1204, 1205, 'OP_MapRequest', 520, 1), + (4485, 1204, 1205, 'OP_MarketFundsUpdate', 525, 1), + (4486, 1204, 1205, 'OP_UIEvent', 526, 1), + (4487, 1204, 1205, 'OP_MarketAddFundsRequest', 527, 1), + (4488, 1204, 1205, 'OP_MarketAddFundsReply', 528, 1), + (4489, 1204, 1205, 'OP_MarketPurchase', 530, 1), + (4490, 1204, 1205, 'OP_MarketPlacePrices', 531, 1), + (4491, 1204, 1205, 'OP_MarketPlaceItems', 534, 1), + (4492, 1204, 1205, 'OP_RecipeBook', 535, 1), + (4493, 1204, 1205, 'OP_CreateCharacterDungeon', 544, 1), + (4494, 1204, 1205, 'OP_DungeonMakerEnter', 545, 1), + (4495, 1204, 1205, 'OP_DungeonMakerItemRequest', 547, 1), + (4496, 1204, 1205, 'OP_CharacterCreatedDungeons', 548, 1), + (4497, 1204, 1205, 'OP_DungeonMakerToolboxList', 549, 1), + (4498, 1204, 1205, 'OP_DungeonMakerUnknown', 550, 1), + (4499, 1204, 1205, 'OP_DungeonMakerUnknown1', 551, 1), + (4500, 1204, 1205, 'OP_PlayerPollPopup', 553, 1), + (4501, 1204, 1205, 'OP_PlayerPollAnswer', 554, 1), + (4502, 1204, 1205, 'OP_MentorPopup', 555, 1), + (4503, 1204, 1205, 'OP_LoadWelcomeWindow', 557, 1), + (4504, 1204, 1205, 'OP_OpenCharCust', 558, 1), + (4505, 1204, 1205, 'OP_SubmitCharCust', 559, 1), + (4506, 1204, 1205, 'OP_QueAllBgSolo', 561, 1), + (4507, 1204, 1205, 'OP_ZoneBgInstanceList', 563, 1), + (4508, 1204, 1205, 'OP_WorldTravelAvail', 567, 1), + (4509, 1204, 1205, 'OP_PaperdollImage', 570, 1), + (4510, 1204, 1205, 'OP_LoadCalendarEvents', 571, 1), + (4511, 1204, 1205, 'OP_VideoUploaded', 572, 1), + (4512, 1204, 1205, 'OP_SavageBarInitMsg', 573, 1), + (4513, 1204, 1205, 'OP_PetOptionsResponse', 574, 1), + (4514, 1204, 1205, 'OP_DungeonMakerItemResponse', 575, 1), + (4515, 1204, 1205, 'OP_CharacterMounts', 577, 1), + (4516, 1204, 1205, 'OP_EqBetaCopyRequest', 587, 1), + (4517, 1204, 1205, 'OP_EqHearChatCmd', 588, 1), + (4518, 1204, 1205, 'OP_EqDisplayTextCmd', 589, 1), + (4519, 1204, 1205, 'OP_EqCreateGhostCmd', 590, 1), + (4520, 1204, 1205, 'OP_EqCreateWidgetCmd', 591, 1), + (4521, 1204, 1205, 'OP_EqCreateSignWidgetCmd', 592, 1), + (4522, 1204, 1205, 'OP_EqDestroyGhostCmd', 593, 1), + (4523, 1204, 1205, 'OP_EqUpdateGhostCmd', 594, 1), + (4524, 1204, 1205, 'OP_EqSetControlGhostCmd', 595, 1), + (4525, 1204, 1205, 'OP_EqSetPOVGhostCmd', 596, 1), + (4526, 1204, 1205, 'OP_EqHearCombatCmd', 597, 1), + (4527, 1204, 1205, 'OP_EqHearSpellCastCmd', 598, 1), + (4528, 1204, 1205, 'OP_EQHearProcCmd', 599, 1), + (4529, 1204, 1205, 'OP_EQHearResEffectCmd', 600, 1), + (4530, 1204, 1205, 'OP_EqHearSpellInterruptCmd', 601, 1), + (4531, 1204, 1205, 'OP_EqHearSpellFizzleCmd', 602, 1), + (4532, 1204, 1205, 'OP_EqHearConsiderCmd', 603, 1), + (4533, 1204, 1205, 'OP_EqUpdateSubClassesCmd', 604, 1), + (4534, 1204, 1205, 'OP_EqCreateListBoxCmd', 605, 1), + (4535, 1204, 1205, 'OP_EqSetDebugPathPointsCmd', 606, 1), + (4536, 1204, 1205, 'OP_EqCannedEmoteCmd', 608, 1), + (4537, 1204, 1205, 'OP_EqStateCmd', 609, 1), + (4538, 1204, 1205, 'OP_EqPlaySoundCmd', 610, 1), + (4539, 1204, 1205, 'OP_EqPlaySound3DCmd', 611, 1), + (4540, 1204, 1205, 'OP_EqPlayVoiceCmd', 612, 1), + (4541, 1204, 1205, 'OP_EqHearDrowningCmd', 613, 1), + (4542, 1204, 1205, 'OP_EqHearDeathCmd', 614, 1), + (4543, 1204, 1205, 'OP_EqGroupMemberRemovedCmd', 615, 1), + (4544, 1204, 1205, 'OP_EqHearChainEffectCmd', 616, 1), + (4545, 1204, 1205, 'OP_EqReceiveOfferCmd', 617, 1), + (4546, 1204, 1205, 'OP_EqInspectPCResultsCmd', 618, 1), + (4547, 1204, 1205, 'OP_EqDrawablePathGraphCmd', 619, 1), + (4548, 1204, 1205, 'OP_EqDialogOpenCmd', 620, 1), + (4549, 1204, 1205, 'OP_EqDialogCloseCmd', 621, 1), + (4550, 1204, 1205, 'OP_EqFactionUpdateCmd', 622, 1), + (4551, 1204, 1205, 'OP_EqCollectionUpdateCmd', 623, 1), + (4552, 1204, 1205, 'OP_EqCollectionFilterCmd', 624, 1), + (4553, 1204, 1205, 'OP_EqCollectionItemCmd', 625, 1), + (4554, 1204, 1205, 'OP_EqQuestJournalUpdateCmd', 626, 1), + (4555, 1204, 1205, 'OP_EqMentoring', 627, 1), + (4556, 1204, 1205, 'OP_EqQuestJournalReplyCmd', 628, 1), + (4557, 1204, 1205, 'OP_EqQuestGroupCmd', 629, 1), + (4558, 1204, 1205, 'OP_EqUpdateMerchantCmd', 630, 1), + (4559, 1204, 1205, 'OP_EqUpdateStoreCmd', 631, 1), + (4560, 1204, 1205, 'OP_EqUpdatePlayerTradeCmd', 632, 1), + (4561, 1204, 1205, 'OP_EqHelpPathCmd', 633, 1), + (4562, 1204, 1205, 'OP_EqHelpPathClearCmd', 634, 1), + (4563, 1204, 1205, 'OP_EqUpdateBankCmd', 635, 1), + (4564, 1204, 1205, 'OP_EqExamineInfoCmd', 636, 1), + (4565, 1204, 1205, 'OP_EqCloseWindowCmd', 637, 1), + (4566, 1204, 1205, 'OP_EqUpdateLootCmd', 638, 1), + (4567, 1204, 1205, 'OP_EqJunctionListCmd', 639, 1), + (4568, 1204, 1205, 'OP_EqShowDeathWindowCmd', 640, 1), + (4569, 1204, 1205, 'OP_EqDisplaySpellFailCmd', 641, 1), + (4570, 1204, 1205, 'OP_EqSpellCastStartCmd', 642, 1), + (4571, 1204, 1205, 'OP_EqSpellCastEndCmd', 643, 1), + (4572, 1204, 1205, 'OP_EqResurrectedCmd', 644, 1), + (4573, 1204, 1205, 'OP_EqChoiceWinCmd', 645, 1), + (4574, 1204, 1205, 'OP_EqSetDefaultVerbCmd', 646, 1), + (4575, 1204, 1205, 'OP_EqInstructionWindowCmd', 647, 1), + (4576, 1204, 1205, 'OP_EqInstructionWindowCloseCmd', 648, 1), + (4577, 1204, 1205, 'OP_EqInstructionWindowGoalCmd', 649, 1), + (4578, 1204, 1205, 'OP_EqInstructionWindowTaskCmd', 650, 1), + (4579, 1204, 1205, 'OP_EqEnableGameEventCmd', 651, 1), + (4580, 1204, 1205, 'OP_EqShowWindowCmd', 652, 1), + (4581, 1204, 1205, 'OP_EqEnableWindowCmd', 653, 1), + (4582, 1204, 1205, 'OP_EqFlashWindowCmd', 654, 1), + (4583, 1204, 1205, 'OP_EqHearPlayFlavorCmd', 656, 1), + (4584, 1204, 1205, 'OP_EqUpdateSignWidgetCmd', 657, 1), + (4585, 1204, 1205, 'OP_EqDebugPVDCmd', 658, 1), + (4586, 1204, 1205, 'OP_EqShowBookCmd', 659, 1), + (4587, 1204, 1205, 'OP_EqQuestionnaireCmd', 660, 1), + (4588, 1204, 1205, 'OP_EqGetProbsCmd', 662, 1), + (4589, 1204, 1205, 'OP_EqHearHealCmd', 663, 1), + (4590, 1204, 1205, 'OP_EqChatChannelUpdateCmd', 664, 1), + (4591, 1204, 1205, 'OP_EqWhoChannelQueryReplyCmd', 665, 1), + (4592, 1204, 1205, 'OP_EqAvailWorldChannelsCmd', 666, 1), + (4593, 1204, 1205, 'OP_EqUpdateTargetCmd', 667, 1), + (4594, 1204, 1205, 'OP_BrokerSellList', 668, 1), + (4595, 1204, 1205, 'OP_EqConsignmentItemsCmd', 669, 1), + (4596, 1204, 1205, 'OP_EqStartBrokerCmd', 671, 1), + (4597, 1204, 1205, 'OP_EqMapExplorationCmd', 672, 1), + (4598, 1204, 1205, 'OP_EqStoreLogCmd', 673, 1), + (4599, 1204, 1205, 'OP_EqSpellMoveToRangeAndRetryCmd', 674, 1), + (4600, 1204, 1205, 'OP_EqUpdatePlayerMailCmd', 675, 1), + (4601, 1204, 1205, 'OP_GuildStatusUpdate', 678, 1), + (4602, 1204, 1205, 'OP_EqArenaResultsCmd', 679, 1), + (4603, 1204, 1205, 'OP_EqGuildBankEventActionCmd', 680, 1), + (4604, 1204, 1205, 'OP_EqGuildBankExamineInfoCmd', 681, 1), + (4605, 1204, 1205, 'OP_EqHearSpellNoLandCmd', 682, 1), + (4606, 1204, 1205, 'OP_Lottery', 683, 1), + (4607, 1204, 1205, 'OP_GuildRecruitingMemberInfo', 684, 1), + (4608, 1204, 1205, 'OP_GuildRecruiting', 685, 1), + (4609, 1204, 1205, 'OP_GuildRecruitingDetails', 686, 1), + (4610, 1204, 1205, 'OP_GuildRecruitingImage', 687, 1), + (4611, 1204, 1205, 'OP_TradeskillList', 705, 1), + (4612, 1204, 1205, 'OP_CharRenamed', 689, 1), + (4613, 1204, 1205, 'OP_UseAdornment', 699, 1), + (4614, 1204, 1205, 'OP_ExpPurchWindow', 705, 1), + (4615, 1204, 1205, 'OP_PointOfInterest', 709, 1), + (4616, 1204, 1205, 'OP_PointOfInterest2', 710, 1), + (4617, 1204, 1205, 'OP_TraitsList', 711, 1), + (4618, 1204, 1205, 'OP_CustomizeHouseDisplay', 714, 1), + (4619, 1204, 1205, 'OP_VoiceChatServer', 715, 1), + (4620, 1204, 1205, 'OP_SupplyDepot', 719, 1), + (4621, 1204, 1205, 'OP_EQHearThreatCmd', 720, 1), + (4622, 1204, 1205, 'OP_RecipeList', 721, 1), + (4623, 1204, 1205, 'OP_Research', 722, 1), + (4624, 1204, 1205, 'OP_CharacterCurrency', 723, 1), + (4625, 1204, 1205, 'OP_CharacterAchievements', 724, 1), + (4626, 1204, 1205, 'OP_AchievementUpdateMsg', 725, 1), + (4627, 1204, 1205, 'OP_EQHearDispellCmd', 726, 1), + (4628, 1204, 1205, 'OP_JournalQuestStoryline', 727, 1), + (4629, 1204, 1205, 'OP_DungeonPlayAsAvatarList', 728, 1), + (4630, 1204, 1205, 'OP_DungeonPlayAsAvatarSelected', 729, 1), + (4631, 1204, 1205, 'OP_MercHireWindow', 730, 1), + (4632, 1204, 1205, 'OP_MercUnknown', 731, 1), + (4633, 1204, 1205, 'OP_Unknown', 748, 1), + (4634, 1208, 1208, 'OP_LoginRequestMsg', 0, 1), + (4635, 1208, 1208, 'OP_LoginByNumRequestMsg', 1, 1), + (4636, 1208, 1208, 'OP_WSLoginRequestMsg', 2, 1), + (4637, 1208, 1208, 'OP_ESLoginRequestMsg', 3, 1), + (4638, 1208, 1208, 'OP_LoginReplyMsg', 4, 1), + (4639, 1208, 1208, 'OP_WSStatusReplyMsg', 5, 1), + (4640, 1208, 1208, 'OP_WorldStatusChangeMsg', 6, 1), + (4641, 1208, 1208, 'OP_AllWSDescRequestMsg', 7, 1), + (4642, 1208, 1208, 'OP_WorldListMsg', 8, 1), + (4643, 1208, 1208, 'OP_AllCharactersDescRequestMsg', 9, 1), + (4644, 1208, 1208, 'OP_AllCharactersDescReplyMsg', 10, 1), + (4645, 1208, 1208, 'OP_CreateCharacterRequestMsg', 11, 1), + (4646, 1208, 1208, 'OP_CreateCharacterReplyMsg', 12, 1), + (4647, 1208, 1208, 'OP_WSCreateCharacterRequestMsg', 13, 1), + (4648, 1208, 1208, 'OP_WSCreateCharacterReplyMsg', 14, 1), + (4649, 1208, 1208, 'OP_ReskinCharacterRequestMsg', 15, 1), + (4650, 1208, 1208, 'OP_DeleteCharacterRequestMsg', 16, 1), + (4651, 1208, 1208, 'OP_DeleteCharacterReplyMsg', 17, 1), + (4652, 1208, 1208, 'OP_PlayCharacterRequestMsg', 18, 1), + (4653, 1208, 1208, 'OP_PlayCharacterReplyMsg', 19, 1), + (4654, 1208, 1208, 'OP_ExpectClientAsCharacterReplyMs', 22, 1), + (4655, 1208, 1208, 'OP_ServerPlayCharacterRequestMsg', 23, 1), + (4656, 1208, 1208, 'OP_ServerPlayCharacterReplyMsg', 24, 1), + (4657, 1208, 1208, 'OP_ESInitMsg', 25, 1), + (4658, 1208, 1208, 'OP_ESReadyForClientsMsg', 26, 1), + (4659, 1208, 1208, 'OP_CreateZoneInstanceMsg', 29, 1), + (4660, 1208, 1208, 'OP_ZoneInstanceCreateReplyMsg', 30, 1), + (4661, 1208, 1208, 'OP_ZoneInstanceDestroyedMsg', 31, 1), + (4662, 1208, 1208, 'OP_ExpectClientAsCharacterRequest', 32, 1), + (4663, 1208, 1208, 'OP_ZoneInfoMsg', 33, 1), + (4664, 1208, 1208, 'OP_DoneLoadingZoneResourcesMsg', 34, 1), + (4665, 1208, 1208, 'OP_DoneSendingInitialEntitiesMsg', 35, 1), + (4666, 1208, 1208, 'OP_DoneLoadingEntityResourcesMsg', 36, 1), + (4667, 1208, 1208, 'OP_PredictionUpdateMsg', 37, 1), + (4668, 1208, 1208, 'OP_UpdatePositionMsg', 39, 1), + (4669, 1208, 1208, 'OP_SetRemoteCmdsMsg', 41, 1), + (4670, 1208, 1208, 'OP_RemoteCmdMsg', 42, 1), + (4671, 1208, 1208, 'OP_GameWorldTimeMsg', 43, 1), + (4672, 1208, 1208, 'OP_MOTDMsg', 44, 1), + (4673, 1208, 1208, 'OP_ZoneMOTDMsg', 45, 1), + (4674, 1208, 1208, 'OP_AvatarCreatedMsg', 46, 1), + (4675, 1208, 1208, 'OP_AvatarDestroyedMsg', 47, 1), + (4676, 1208, 1208, 'OP_RequestCampMsg', 50, 1), + (4677, 1208, 1208, 'OP_CampStartedMsg', 51, 1), + (4678, 1208, 1208, 'OP_CampAbortedMsg', 52, 1), + (4679, 1208, 1208, 'OP_WhoQueryRequestMsg', 53, 1), + (4680, 1208, 1208, 'OP_WhoQueryReplyMsg', 54, 1), + (4681, 1208, 1208, 'OP_MonitorReplyMsg', 55, 1), + (4682, 1208, 1208, 'OP_MonitorCharacterListMsg', 56, 1), + (4683, 1208, 1208, 'OP_MonitorCharacterListRequestMsg', 57, 1), + (4684, 1208, 1208, 'OP_ClientCmdMsg', 58, 1), + (4685, 1208, 1208, 'OP_DispatchESMsg', 59, 1), + (4686, 1208, 1208, 'OP_DispatchClientCmdMsg', 60, 1), + (4687, 1208, 1208, 'OP_UpdateTargetMsg', 61, 1), + (4688, 1208, 1208, 'OP_UpdateTargetLocMsg', 62, 1), + (4689, 1208, 1208, 'OP_UpdateCharacterSheetMsg', 63, 1), + (4690, 1208, 1208, 'OP_CharacterPet', 64, 1), + (4691, 1208, 1208, 'OP_CharacterMerc', 65, 1), + (4692, 1208, 1208, 'OP_UpdateSpellBookMsg', 66, 1), + (4693, 1208, 1208, 'OP_UpdateInventoryMsg', 68, 1), + (4694, 1208, 1208, 'OP_AfterInvSpellUpdate', 69, 1), + (4695, 1208, 1208, 'OP_UpdateRecipeBookMsg', 70, 1), + (4696, 1208, 1208, 'OP_RequestRecipeDetailsMsg', 71, 1), + (4697, 1208, 1208, 'OP_RecipeDetailsMsg', 72, 1), + (4698, 1208, 1208, 'OP_UpdateSkillBookMsg', 73, 1), + (4699, 1208, 1208, 'OP_UpdateSkillsMsg', 74, 1), + (4700, 1208, 1208, 'OP_UpdateOpportunityMsg', 75, 1), + (4701, 1208, 1208, 'OP_ChangeZoneMsg', 77, 1), + (4702, 1208, 1208, 'OP_ClientTeleportRequestMsg', 78, 1), + (4703, 1208, 1208, 'OP_TeleportWithinZoneMsg', 79, 1), + (4704, 1208, 1208, 'OP_TeleportWithinZoneNoReloadMsg', 80, 1), + (4705, 1208, 1208, 'OP_MigrateClientToZoneRequestMsg', 81, 1), + (4706, 1208, 1208, 'OP_MigrateClientToZoneReplyMsg', 82, 1), + (4707, 1208, 1208, 'OP_ReadyToZoneMsg', 84, 1), + (4708, 1208, 1208, 'OP_RemoveClientFromGroupMsg', 85, 1), + (4709, 1208, 1208, 'OP_RemoveGroupFromGroupMsg', 86, 1), + (4710, 1208, 1208, 'OP_MakeGroupLeaderMsg', 87, 1), + (4711, 1208, 1208, 'OP_GroupCreatedMsg', 88, 1), + (4712, 1208, 1208, 'OP_GroupDestroyedMsg', 89, 1), + (4713, 1208, 1208, 'OP_GroupMemberAddedMsg', 90, 1), + (4714, 1208, 1208, 'OP_GroupMemberRemovedMsg', 91, 1), + (4715, 1208, 1208, 'OP_GroupRemovedFromGroupMsg', 92, 1), + (4716, 1208, 1208, 'OP_GroupLeaderChangedMsg', 93, 1), + (4717, 1208, 1208, 'OP_GroupResendOOZDataMsg', 94, 1), + (4718, 1208, 1208, 'OP_GroupSettingsChangedMsg', 95, 1), + (4719, 1208, 1208, 'OP_OutOfZoneMemberDataMsg', 96, 1), + (4720, 1208, 1208, 'OP_SendLatestRequestMsg', 97, 1), + (4721, 1208, 1208, 'OP_ClearDataMsg', 98, 1), + (4722, 1208, 1208, 'OP_SetSocialMsg', 99, 1), + (4723, 1208, 1208, 'OP_ESStatusMsg', 100, 1), + (4724, 1208, 1208, 'OP_ESZoneInstanceStatusMsg', 101, 1), + (4725, 1208, 1208, 'OP_ZonesStatusRequestMsg', 102, 1), + (4726, 1208, 1208, 'OP_ZonesStatusMsg', 103, 1), + (4727, 1208, 1208, 'OP_ESWeatherRequestMsg', 104, 1), + (4728, 1208, 1208, 'OP_ESWeatherRequestEndMsg', 105, 1), + (4729, 1208, 1208, 'OP_DialogSelectMsg', 109, 1), + (4730, 1208, 1208, 'OP_DialogCloseMsg', 110, 1), + (4731, 1208, 1208, 'OP_RemoveSpellEffectMsg', 111, 1), + (4732, 1208, 1208, 'OP_RemoveConcentrationMsg', 112, 1), + (4733, 1208, 1208, 'OP_QuestJournalOpenMsg', 113, 1), + (4734, 1208, 1208, 'OP_QuestJournalInspectMsg', 114, 1), + (4735, 1208, 1208, 'OP_QuestJournalSetVisibleMsg', 115, 1), + (4736, 1208, 1208, 'OP_QuestJournalWaypointMsg', 116, 1), + (4737, 1208, 1208, 'OP_CreateGuildRequestMsg', 119, 1), + (4738, 1208, 1208, 'OP_CreateGuildReplyMsg', 120, 1), + (4739, 1208, 1208, 'OP_GuildsayMsg', 121, 1), + (4740, 1208, 1208, 'OP_FellowshipExpMsg', 122, 1), + (4741, 1208, 1208, 'OP_DeleteGuildMsg', 123, 1), + (4742, 1208, 1208, 'OP_GuildUpdateMsg', 124, 1), + (4743, 1208, 1208, 'OP_ConsignmentCloseStoreMsg', 125, 1), + (4744, 1208, 1208, 'OP_ConsignItemRequestMsg', 126, 1), + (4745, 1208, 1208, 'OP_ConsignItemResponseMsg', 127, 1), + (4746, 1208, 1208, 'OP_PurchaseConsignmentRequestMsg', 128, 1), + (4747, 1208, 1208, 'OP_LikeOption', 135, 1), + (4748, 1208, 1208, 'OP_PublishHouse', 138, 1), + (4749, 1208, 1208, 'OP_PlayerMadeInstacnesScreen', 139, 1), + (4750, 1208, 1208, 'OP_PlayerMadeInstances', 140, 1), + (4751, 1208, 1208, 'OP_HouseDeletedRemotelyMsg', 141, 1), + (4752, 1208, 1208, 'OP_UpdateHouseDataMsg', 142, 1), + (4753, 1208, 1208, 'OP_UpdateHouseAccessDataMsg', 143, 1), + (4754, 1208, 1208, 'OP_PlayerHouseBaseScreenMsg', 144, 1), + (4755, 1208, 1208, 'OP_PlayerHousePurchaseScreenMsg', 145, 1), + (4756, 1208, 1208, 'OP_PlayerHouseAccessUpdateMsg', 146, 1), + (4757, 1208, 1208, 'OP_PlayerHouseDisplayStatusMsg', 147, 1), + (4758, 1208, 1208, 'OP_PlayerHouseCloseUIMsg', 148, 1), + (4759, 1208, 1208, 'OP_BuyPlayerHouseMsg', 149, 1), + (4760, 1208, 1208, 'OP_BuyPlayerHouseTintMsg', 150, 1), + (4761, 1208, 1208, 'OP_CollectAllHouseItemsMsg', 151, 1), + (4762, 1208, 1208, 'OP_RelinquishHouseMsg', 152, 1), + (4763, 1208, 1208, 'OP_EnterHouseMsg', 153, 1), + (4764, 1208, 1208, 'OP_ExitHouseMsg', 154, 1), + (4765, 1208, 1208, 'OP_HouseDefaultAccessSetMsg', 155, 1), + (4766, 1208, 1208, 'OP_HouseAccessSetMsg', 156, 1), + (4767, 1208, 1208, 'OP_HouseAccessRemoveMsg', 157, 1), + (4768, 1208, 1208, 'OP_PayHouseUpkeepMsg', 158, 1), + (4769, 1208, 1208, 'OP_MoveableObjectPlacementCriteri', 159, 1), + (4770, 1208, 1208, 'OP_EnterMoveObjectModeMsg', 160, 1), + (4771, 1208, 1208, 'OP_PositionMoveableObject', 161, 1), + (4772, 1208, 1208, 'OP_CancelMoveObjectModeMsg', 162, 1), + (4773, 1208, 1208, 'OP_ShaderCustomizationMsg', 163, 1), + (4774, 1208, 1208, 'OP_ReplaceableSubMeshesMsg', 164, 1), + (4775, 1208, 1208, 'OP_HouseCustomizationScreenMsg', 165, 1), + (4776, 1208, 1208, 'OP_CustomizationPurchaseRequestMs', 166, 1), + (4777, 1208, 1208, 'OP_CustomizationSetRequestMsg', 167, 1), + (4778, 1208, 1208, 'OP_CustomizationReplyMsg', 168, 1), + (4779, 1208, 1208, 'OP_TintWidgetsMsg', 169, 1), + (4780, 1208, 1208, 'OP_ExamineConsignmentRequestMsg', 170, 1), + (4781, 1208, 1208, 'OP_ExamineConsignmentResponseMsg', 171, 1), + (4782, 1208, 1208, 'OP_UISettingsResponseMsg', 172, 1), + (4783, 1208, 1208, 'OP_UIResetMsg', 173, 1), + (4784, 1208, 1208, 'OP_KeymapLoadMsg', 174, 1), + (4785, 1208, 1208, 'OP_KeymapNoneMsg', 175, 1), + (4786, 1208, 1208, 'OP_KeymapDataMsg', 176, 1), + (4787, 1208, 1208, 'OP_KeymapSaveMsg', 177, 1), + (4788, 1208, 1208, 'OP_DispatchSpellCmdMsg', 178, 1), + (4789, 1208, 1208, 'OP_EntityVerbsRequestMsg', 179, 1), + (4790, 1208, 1208, 'OP_EntityVerbsReplyMsg', 180, 1), + (4791, 1208, 1208, 'OP_EntityVerbsVerbMsg', 181, 1), + (4792, 1208, 1208, 'OP_ChatRelationshipUpdateMsg', 183, 1), + (4793, 1208, 1208, 'OP_LootItemsRequestMsg', 184, 1), + (4794, 1208, 1208, 'OP_StoppedLootingMsg', 185, 1), + (4795, 1208, 1208, 'OP_SitMsg', 186, 1), + (4796, 1208, 1208, 'OP_StandMsg', 187, 1), + (4797, 1208, 1208, 'OP_SatMsg', 188, 1), + (4798, 1208, 1208, 'OP_StoodMsg', 189, 1), + (4799, 1208, 1208, 'OP_ClearForTakeOffMsg', 190, 1), + (4800, 1208, 1208, 'OP_ReadyForTakeOffMsg', 191, 1), + (4801, 1208, 1208, 'OP_ShowIllusionsMsg', 192, 1), + (4802, 1208, 1208, 'OP_HideIllusionsMsg', 193, 1), + (4803, 1208, 1208, 'OP_ExamineItemRequestMsg', 194, 1), + (4804, 1208, 1208, 'OP_ReadBookPageMsg', 195, 1), + (4805, 1208, 1208, 'OP_DefaultGroupOptionsRequestMsg', 196, 1), + (4806, 1208, 1208, 'OP_DefaultGroupOptionsMsg', 197, 1), + (4807, 1208, 1208, 'OP_GroupOptionsMsg', 198, 1), + (4808, 1208, 1208, 'OP_DisplayGroupOptionsScreenMsg', 199, 1), + (4809, 1208, 1208, 'OP_PetOptions', 200, 1), + (4810, 1208, 1208, 'OP_DisplayInnVisitScreenMsg', 201, 1), + (4811, 1208, 1208, 'OP_DumpSchedulerMsg', 202, 1), + (4812, 1208, 1208, 'OP_LSCheckAcctLockMsg', 203, 1), + (4813, 1208, 1208, 'OP_WSAcctLockStatusMsg', 204, 1), + (4814, 1208, 1208, 'OP_RequestHelpRepathMsg', 205, 1), + (4815, 1208, 1208, 'OP_RequestTargetLocMsg', 206, 1), + (4816, 1208, 1208, 'OP_UpdateMotdMsg', 207, 1), + (4817, 1208, 1208, 'OP_DestUpdateReq', 209, 1), + (4818, 1208, 1208, 'OP_PerformPlayerKnockbackMsg', 212, 1), + (4819, 1208, 1208, 'OP_PerformCameraShakeMsg', 213, 1), + (4820, 1208, 1208, 'OP_PopulateSkillMapsMsg', 214, 1), + (4821, 1208, 1208, 'OP_CancelledFeignMsg', 215, 1), + (4822, 1208, 1208, 'OP_SysClient', 217, 1), + (4823, 1208, 1208, 'OP_ShowCreateFromRecipeUIMsg', 218, 1), + (4824, 1208, 1208, 'OP_CancelCreateFromRecipeMsg', 219, 1), + (4825, 1208, 1208, 'OP_BeginItemCreationMsg', 220, 1), + (4826, 1208, 1208, 'OP_StopItemCreationMsg', 221, 1), + (4827, 1208, 1208, 'OP_ShowItemCreationProcessUIMsg', 222, 1), + (4828, 1208, 1208, 'OP_UpdateItemCreationProcessUIMsg', 223, 1), + (4829, 1208, 1208, 'OP_DisplayTSEventReactionMsg', 224, 1), + (4830, 1208, 1208, 'OP_ShowRecipeBookMsg', 225, 1), + (4831, 1208, 1208, 'OP_KnowledgebaseRequestMsg', 226, 1), + (4832, 1208, 1208, 'OP_KnowledgebaseResponseMsg', 227, 1), + (4833, 1208, 1208, 'OP_CSTicketHeaderRequestMsg', 228, 1), + (4834, 1208, 1208, 'OP_CSTicketInfoMsg', 229, 1), + (4835, 1208, 1208, 'OP_CSTicketCommentRequestMsg', 230, 1), + (4836, 1208, 1208, 'OP_CSTicketCommentResponseMsg', 231, 1), + (4837, 1208, 1208, 'OP_CSTicketCreateMsg', 232, 1), + (4838, 1208, 1208, 'OP_CSTicketAddCommentMsg', 233, 1), + (4839, 1208, 1208, 'OP_CSTicketDeleteMsg', 234, 1), + (4840, 1208, 1208, 'OP_CSTicketChangeNotificationMsg', 235, 1), + (4841, 1208, 1208, 'OP_WorldDataUpdateMsg', 236, 1), + (4842, 1208, 1208, 'OP_KnownLanguagesMsg', 237, 1), + (4843, 1208, 1208, 'OP_LsRequestClientCrashLogMsg', 238, 1), + (4844, 1208, 1208, 'OP_LsClientBaselogReplyMsg', 239, 1), + (4845, 1208, 1208, 'OP_LsClientCrashlogReplyMsg', 240, 1), + (4846, 1208, 1208, 'OP_LsClientAlertlogReplyMsg', 241, 1), + (4847, 1208, 1208, 'OP_LsClientVerifylogReplyMsg', 242, 1), + (4848, 1208, 1208, 'OP_ClientTeleportToLocationMsg', 243, 1), + (4849, 1208, 1208, 'OP_UpdateClientPredFlagsMsg', 244, 1), + (4850, 1208, 1208, 'OP_ChangeServerControlFlagMsg', 245, 1), + (4851, 1208, 1208, 'OP_CSToolsRequestMsg', 246, 1), + (4852, 1208, 1208, 'OP_CSToolsResponseMsg', 247, 1), + (4853, 1208, 1208, 'OP_AddSocialStructureStandingMsg', 248, 1), + (4854, 1208, 1208, 'OP_CreateBoatTransportsMsg', 249, 1), + (4855, 1208, 1208, 'OP_PositionBoatTransportMsg', 250, 1), + (4856, 1208, 1208, 'OP_MigrateBoatTransportMsg', 251, 1), + (4857, 1208, 1208, 'OP_MigrateBoatTransportReplyMsg', 252, 1), + (4858, 1208, 1208, 'OP_DisplayDebugNLLPointsMsg', 253, 1), + (4859, 1208, 1208, 'OP_ExamineInfoRequestMsg', 254, 1), + (4860, 1208, 1208, 'OP_QuickbarInitMsg', 255, 1), + (4861, 1208, 1208, 'OP_QuickbarUpdateMsg', 256, 1), + (4862, 1208, 1208, 'OP_MacroInitMsg', 257, 1), + (4863, 1208, 1208, 'OP_MacroUpdateMsg', 258, 1), + (4864, 1208, 1208, 'OP_QuestionnaireMsg', 259, 1), + (4865, 1208, 1208, 'OP_LevelChangedMsg', 260, 1), + (4866, 1208, 1208, 'OP_SpellGainedMsg', 261, 1), + (4867, 1208, 1208, 'OP_EncounterBrokenMsg', 262, 1), + (4868, 1208, 1208, 'OP_OnscreenMsgMsg', 263, 1), + (4869, 1208, 1208, 'OP_DisplayWarningMsg', 264, 1), + (4870, 1208, 1208, 'OP_ModifyGuildMsg', 265, 1), + (4871, 1208, 1208, 'OP_GuildEventMsg', 266, 1), + (4872, 1208, 1208, 'OP_GuildEventAddMsg', 267, 1), + (4873, 1208, 1208, 'OP_GuildEventActionMsg', 268, 1), + (4874, 1208, 1208, 'OP_GuildEventListMsg', 269, 1), + (4875, 1208, 1208, 'OP_RequestGuildEventDetailsMsg', 270, 1), + (4876, 1208, 1208, 'OP_GuildEventDetailsMsg', 271, 1), + (4877, 1208, 1208, 'OP_RequestGuildInfoMsg', 272, 1), + (4878, 1208, 1208, 'OP_GuildBankActionMsg', 273, 1), + (4879, 1208, 1208, 'OP_GuildBankActionResponseMsg', 274, 1), + (4880, 1208, 1208, 'OP_GuildBankItemDetailsRequestMsg', 275, 1), + (4881, 1208, 1208, 'OP_GuildBankItemDetailsResponseMs', 276, 1), + (4882, 1208, 1208, 'OP_GuildBankUpdateMsg', 277, 1), + (4883, 1208, 1208, 'OP_GuildBankEventListMsg', 278, 1), + (4884, 1208, 1208, 'OP_RequestGuildBankEventDetailsMs', 279, 1), + (4885, 1208, 1208, 'OP_RewardPackMsg', 280, 1), + (4886, 1208, 1208, 'OP_RenameGuildMsg', 281, 1), + (4887, 1208, 1208, 'OP_ZoneToFriendRequestMsg', 282, 1), + (4888, 1208, 1208, 'OP_ZoneToFriendReplyMsg', 283, 1), + (4889, 1208, 1208, 'OP_ChatCreateChannelMsg', 284, 1), + (4890, 1208, 1208, 'OP_ChatJoinChannelMsg', 285, 1), + (4891, 1208, 1208, 'OP_ChatWhoChannelMsg', 286, 1), + (4892, 1208, 1208, 'OP_ChatLeaveChannelMsg', 287, 1), + (4893, 1208, 1208, 'OP_ChatTellChannelMsg', 288, 1), + (4894, 1208, 1208, 'OP_ChatTellUserMsg', 289, 1), + (4895, 1208, 1208, 'OP_ChatToggleFriendMsg', 290, 1), + (4896, 1208, 1208, 'OP_BrokerAddBag', 291, 1), + (4897, 1208, 1208, 'OP_BrokerRemoveBag', 292, 1), + (4898, 1208, 1208, 'OP_ChatToggleIgnoreMsg', 293, 1), + (4899, 1208, 1208, 'OP_ChatSendFriendsMsg', 294, 1), + (4900, 1208, 1208, 'OP_ChatSendIgnoresMsg', 295, 1), + (4901, 1208, 1208, 'OP_QuestReward', 319, 1), + (4902, 1208, 1208, 'OP_ChatFiltersMsg', 334, 1), + (4903, 1208, 1208, 'OP_MailGetMessageMsg', 337, 1), + (4904, 1208, 1208, 'OP_MailSendMessageMsg', 338, 1), + (4905, 1208, 1208, 'OP_MailDeleteMessageMsg', 339, 1), + (4906, 1208, 1208, 'OP_MailGetHeadersReplyMsg', 340, 1), + (4907, 1208, 1208, 'OP_MailGetMessageReplyMsg', 341, 1), + (4908, 1208, 1208, 'OP_MailSendMessageReplyMsg', 342, 1), + (4909, 1208, 1208, 'OP_MailCommitSendMessageMsg', 343, 1), + (4910, 1208, 1208, 'OP_MailSendSystemMessageMsg', 344, 1), + (4911, 1208, 1208, 'OP_MailRemoveAttachFromMailMsg', 345, 1), + (4912, 1208, 1208, 'OP_WaypointRequestMsg', 347, 1), + (4913, 1208, 1208, 'OP_WaypointReplyMsg', 348, 1), + (4914, 1208, 1208, 'OP_WaypointSelectMsg', 349, 1), + (4915, 1208, 1208, 'OP_WaypointUpdateMsg', 350, 1), + (4916, 1208, 1208, 'OP_CharNameChangedMsg', 351, 1), + (4917, 1208, 1208, 'OP_ShowZoneTeleporterDestinations', 352, 1), + (4918, 1208, 1208, 'OP_SelectZoneTeleporterDestinatio', 353, 1), + (4919, 1208, 1208, 'OP_ReloadLocalizedTxtMsg', 354, 1), + (4920, 1208, 1208, 'OP_RequestGuildMembershipMsg', 355, 1), + (4921, 1208, 1208, 'OP_GuildMembershipResponseMsg', 356, 1), + (4922, 1208, 1208, 'OP_LeaveGuildNotifyMsg', 357, 1), + (4923, 1208, 1208, 'OP_JoinGuildNotifyMsg', 358, 1), + (4924, 1208, 1208, 'OP_AvatarUpdateMsg', 359, 1), + (4925, 1208, 1208, 'OP_BioUpdateMsg', 361, 1), + (4926, 1208, 1208, 'OP_InspectPlayerMsg', 362, 1), + (4927, 1208, 1208, 'OP_WSServerLockMsg', 363, 1), + (4928, 1208, 1208, 'OP_LSServerLockMsg', 364, 1), + (4929, 1208, 1208, 'OP_WSServerHideMsg', 365, 1), + (4930, 1208, 1208, 'OP_CsCategoryRequestMsg', 366, 1), + (4931, 1208, 1208, 'OP_CsCategoryResponseMsg', 367, 1), + (4932, 1208, 1208, 'OP_KnowledgeWindowSlotMappingMsg', 368, 1), + (4933, 1208, 1208, 'OP_AFKUpdateMsg', 369, 1), + (4934, 1208, 1208, 'OP_AnonUpdateMsg', 370, 1), + (4935, 1208, 1208, 'OP_UpdateActivePublicZonesMsg', 371, 1), + (4936, 1208, 1208, 'OP_UnknownNpcMsg', 372, 1), + (4937, 1208, 1208, 'OP_PromoFlagsDetailsMsg', 373, 1), + (4938, 1208, 1208, 'OP_ConsignViewCreateMsg', 374, 1), + (4939, 1208, 1208, 'OP_ConsignViewGetPageMsg', 375, 1), + (4940, 1208, 1208, 'OP_ConsignViewReleaseMsg', 376, 1), + (4941, 1208, 1208, 'OP_ConsignRemoveItemsMsg', 377, 1), + (4942, 1208, 1208, 'OP_UpdateDebugRadiiMsg', 378, 1), + (4943, 1208, 1208, 'OP_ReportMsg', 379, 1), + (4944, 1208, 1208, 'OP_UpdateRaidMsg', 380, 1), + (4945, 1208, 1208, 'OP_ConsignViewSortMsg', 382, 1), + (4946, 1208, 1208, 'OP_TitleUpdateMsg', 383, 1), + (4947, 1208, 1208, 'OP_ClientFellMsg', 384, 1), + (4948, 1208, 1208, 'OP_ClientInDeathRegionMsg', 385, 1), + (4949, 1208, 1208, 'OP_CampClientMsg', 386, 1), + (4950, 1208, 1208, 'OP_CSToolAccessResponseMsg', 387, 1), + (4951, 1208, 1208, 'OP_TrackingUpdateMsg', 388, 1), + (4952, 1208, 1208, 'OP_BeginTrackingMsg', 389, 1), + (4953, 1208, 1208, 'OP_StopTrackingMsg', 390, 1), + (4954, 1208, 1208, 'OP_GetAvatarAccessRequestForCSToo', 392, 1), + (4955, 1208, 1208, 'OP_AdvancementRequestMsg', 393, 1), + (4956, 1208, 1208, 'OP_MapFogDataInitMsg', 394, 1), + (4957, 1208, 1208, 'OP_MapFogDataUpdateMsg', 395, 1), + (4958, 1208, 1208, 'OP_CloseGroupInviteWindowMsg', 396, 1), + (4959, 1208, 1208, 'OP_UpdateGroupMemberDataMsg', 397, 1), + (4960, 1208, 1208, 'OP_WorldPingMsg', 398, 1), + (4961, 1208, 1208, 'OP_MoveLogUpdateMsg', 389, 1), + (4962, 1208, 1208, 'OP_OfferQuestMsg', 400, 1), + (4963, 1208, 1208, 'OP_WorldShutdownUpdateMsg', 402, 1), + (4964, 1208, 1208, 'OP_DisplayMailScreenMsg', 403, 1), + (4965, 1208, 1208, 'OP_ClientIdleBeginMsg', 404, 1), + (4966, 1208, 1208, 'OP_ClientIdleEndMsg', 405, 1), + (4967, 1208, 1208, 'OP_PurchaseConsignmentLoreCheckRe', 406, 1), + (4968, 1208, 1208, 'OP_NotifyApprenticeStoppedMentori', 407, 1), + (4969, 1208, 1208, 'OP_CorruptedClientMsg', 408, 1), + (4970, 1208, 1208, 'OP_WorldDataChangeMsg', 409, 1), + (4971, 1208, 1208, 'OP_MailEventNotificationMsg', 410, 1), + (4972, 1208, 1208, 'OP_RestartZoneMsg', 411, 1), + (4973, 1208, 1208, 'OP_FlightPathsMsg', 412, 1), + (4974, 1208, 1208, 'OP_CharacterLinkdeadMsg', 413, 1), + (4975, 1208, 1208, 'OP_CharTransferStartRequestMsg', 414, 1), + (4976, 1208, 1208, 'OP_CharTransferStartReplyMsg', 415, 1), + (4977, 1208, 1208, 'OP_CharTransferRequestMsg', 416, 1), + (4978, 1208, 1208, 'OP_CharTransferReplyMsg', 417, 1), + (4979, 1208, 1208, 'OP_CharTransferRollbackRequestMsg', 418, 1), + (4980, 1208, 1208, 'OP_CharTransferCommitRequestMsg', 419, 1), + (4981, 1208, 1208, 'OP_CharTransferRollbackReplyMsg', 420, 1), + (4982, 1208, 1208, 'OP_CharTransferCommitReplyMsg', 421, 1), + (4983, 1208, 1208, 'OP_GetCharacterSerializedRequestM', 422, 1), + (4984, 1208, 1208, 'OP_GetCharacterSerializedReplyMsg', 423, 1), + (4985, 1208, 1208, 'OP_CreateCharFromCBBRequestMsg', 424, 1), + (4986, 1208, 1208, 'OP_CreateCharFromCBBReplyMsg', 425, 1), + (4987, 1208, 1208, 'OP_HousingDataChangedMsg', 426, 1), + (4988, 1208, 1208, 'OP_HousingRestoreMsg', 427, 1), + (4989, 1208, 1208, 'OP_AuctionItem', 428, 1), + (4990, 1208, 1208, 'OP_AuctionItemReply', 429, 1), + (4991, 1208, 1208, 'OP_AuctionCoin', 430, 1), + (4992, 1208, 1208, 'OP_AuctionCoinReply', 431, 1), + (4993, 1208, 1208, 'OP_AuctionCharacter', 432, 1), + (4994, 1208, 1208, 'OP_AuctionCharacterReply', 433, 1), + (4995, 1208, 1208, 'OP_AuctionCommitMsg', 434, 1), + (4996, 1208, 1208, 'OP_AuctionAbortMsg', 435, 1), + (4997, 1208, 1208, 'OP_CharTransferValidateRequestMsg', 436, 1), + (4998, 1208, 1208, 'OP_CharTransferValidateReplyMsg', 437, 1), + (4999, 1208, 1208, 'OP_RaceRestrictionMsg', 438, 1), + (5000, 1208, 1208, 'OP_SetInstanceDisplayNameMsg', 439, 1), + (5001, 1208, 1208, 'OP_GetAuctionAssetIDMsg', 440, 1), + (5002, 1208, 1208, 'OP_GetAuctionAssetIDReplyMsg', 441, 1), + (5003, 1208, 1208, 'OP_ResendWorldChannelsMsg', 442, 1), + (5004, 1208, 1208, 'OP_DisplayExchangeScreenMsg', 443, 1), + (5005, 1208, 1208, 'OP_ArenaGameTypesMsg', 444, 1), + (5006, 1208, 1208, 'OP_AuditAuctionEventMsg', 445, 1), + (5007, 1208, 1208, 'OP_InviteRequestMsg', 446, 1), + (5008, 1208, 1208, 'OP_InviteResponseMsg', 447, 1), + (5009, 1208, 1208, 'OP_InviteTargetResponseMsg', 448, 1), + (5010, 1208, 1208, 'OP_InspectPlayerRequestMsg', 449, 1), + (5011, 1208, 1208, 'OP_DispatchMsg', 450, 1), + (5012, 1208, 1208, 'OP_DisplayEventMsg', 451, 1), + (5013, 1208, 1208, 'OP_PrePossessionMsg', 452, 1), + (5014, 1208, 1208, 'OP_PostPossessionMsg', 453, 1), + (5015, 1208, 1208, 'OP_ArenaCreate', 455, 1), + (5016, 1208, 1208, 'OP_ArenaList', 456, 1), + (5017, 1208, 1208, 'OP_ArenaWindow', 464, 1), + (5018, 1208, 1208, 'OP_HouseItemsList', 482, 1), + (5019, 1208, 1208, 'OP_CurrentPet', 484, 1), + (5020, 1208, 1208, 'OP_AdventureList', 487, 1), + (5021, 1208, 1208, 'OP_CancelSpellCast', 488, 1), + (5022, 1208, 1208, 'OP_UpdateTitleCmd', 493, 1), + (5023, 1208, 1208, 'OP_AttackAllowed', 499, 1), + (5024, 1208, 1208, 'OP_AttackNotAllowed', 500, 1), + (5025, 1208, 1208, 'OP_BagOptions', 501, 1), + (5026, 1208, 1208, 'OP_LFGGroupSearch', 503, 1), + (5027, 1208, 1208, 'OP_CharacterHousingList', 506, 1), + (5028, 1208, 1208, 'OP_DressingRoom', 509, 1), + (5029, 1208, 1208, 'OP_PlayLon', 510, 1), + (5030, 1208, 1208, 'OP_SkillInfoRequest', 513, 1), + (5031, 1208, 1208, 'OP_SkillInfoResponse', 514, 1), + (5032, 1208, 1208, 'OP_LFGUpdateMsg', 517, 1), + (5033, 1208, 1208, 'OP_BadLanguageFilter', 518, 1), + (5034, 1208, 1208, 'OP_VoiceChatChannel', 519, 1), + (5035, 1208, 1208, 'OP_MapRequest', 520, 1), + (5036, 1208, 1208, 'OP_MarketFundsUpdate', 525, 1), + (5037, 1208, 1208, 'OP_UIEvent', 526, 1), + (5038, 1208, 1208, 'OP_MarketAddFundsRequest', 527, 1), + (5039, 1208, 1208, 'OP_MarketAddFundsReply', 528, 1), + (5040, 1208, 1208, 'OP_MarketPurchase', 530, 1), + (5041, 1208, 1208, 'OP_MarketPlacePrices', 531, 1), + (5042, 1208, 1208, 'OP_MarketPlaceItems', 534, 1), + (5043, 1208, 1208, 'OP_RecipeBook', 535, 1), + (5044, 1208, 1208, 'OP_CreateCharacterDungeon', 544, 1), + (5045, 1208, 1208, 'OP_DungeonMakerEnter', 545, 1), + (5046, 1208, 1208, 'OP_DungeonMakerItemRequest', 547, 1), + (5047, 1208, 1208, 'OP_CharacterCreatedDungeons', 548, 1), + (5048, 1208, 1208, 'OP_DungeonMakerToolboxList', 549, 1), + (5049, 1208, 1208, 'OP_DungeonMakerUnknown', 550, 1), + (5050, 1208, 1208, 'OP_DungeonMakerUnknown1', 551, 1), + (5051, 1208, 1208, 'OP_PlayerPollPopup', 553, 1), + (5052, 1208, 1208, 'OP_PlayerPollAnswer', 554, 1), + (5053, 1208, 1208, 'OP_MentorPopup', 555, 1), + (5054, 1208, 1208, 'OP_LoadWelcomeWindow', 557, 1), + (5055, 1208, 1208, 'OP_OpenCharCust', 558, 1), + (5056, 1208, 1208, 'OP_SubmitCharCust', 559, 1), + (5057, 1208, 1208, 'OP_QueAllBgSolo', 561, 1), + (5058, 1208, 1208, 'OP_ZoneBgInstanceList', 563, 1), + (5059, 1208, 1208, 'OP_WorldTravelAvail', 567, 1), + (5060, 1208, 1208, 'OP_PaperdollImage', 571, 1), + (5061, 1208, 1208, 'OP_LoadCalendarEvents', 572, 1), + (5062, 1208, 1208, 'OP_VideoUploaded', 573, 1), + (5063, 1208, 1208, 'OP_SavageBarInitMsg', 574, 1), + (5064, 1208, 1208, 'OP_PetOptionsResponse', 575, 1), + (5065, 1208, 1208, 'OP_DungeonMakerItemResponse', 576, 1), + (5066, 1208, 1208, 'OP_CharacterMounts', 578, 1), + (5067, 1208, 1208, 'OP_EqBetaCopyRequest', 588, 1), + (5068, 1208, 1208, 'OP_EqHearChatCmd', 589, 1), + (5069, 1208, 1208, 'OP_EqDisplayTextCmd', 590, 1), + (5070, 1208, 1208, 'OP_EqCreateGhostCmd', 591, 1), + (5071, 1208, 1208, 'OP_EqCreateWidgetCmd', 592, 1), + (5072, 1208, 1208, 'OP_EqCreateSignWidgetCmd', 593, 1), + (5073, 1208, 1208, 'OP_EqDestroyGhostCmd', 594, 1), + (5074, 1208, 1208, 'OP_EqUpdateGhostCmd', 595, 1), + (5075, 1208, 1208, 'OP_EqSetControlGhostCmd', 596, 1), + (5076, 1208, 1208, 'OP_EqSetPOVGhostCmd', 597, 1), + (5077, 1208, 1208, 'OP_EqHearCombatCmd', 598, 1), + (5078, 1208, 1208, 'OP_EqHearSpellCastCmd', 599, 1), + (5079, 1208, 1208, 'OP_EQHearProcCmd', 600, 1), + (5080, 1208, 1208, 'OP_EQHearResEffectCmd', 601, 1), + (5081, 1208, 1208, 'OP_EqHearSpellInterruptCmd', 602, 1), + (5082, 1208, 1208, 'OP_EqHearSpellFizzleCmd', 603, 1), + (5083, 1208, 1208, 'OP_EqHearConsiderCmd', 604, 1), + (5084, 1208, 1208, 'OP_EqUpdateSubClassesCmd', 605, 1), + (5085, 1208, 1208, 'OP_EqCreateListBoxCmd', 606, 1), + (5086, 1208, 1208, 'OP_EqSetDebugPathPointsCmd', 607, 1), + (5087, 1208, 1208, 'OP_EqCannedEmoteCmd', 609, 1), + (5088, 1208, 1208, 'OP_EqStateCmd', 610, 1), + (5089, 1208, 1208, 'OP_EqPlaySoundCmd', 611, 1), + (5090, 1208, 1208, 'OP_EqPlaySound3DCmd', 612, 1), + (5091, 1208, 1208, 'OP_EqPlayVoiceCmd', 613, 1), + (5092, 1208, 1208, 'OP_EqHearDrowningCmd', 614, 1), + (5093, 1208, 1208, 'OP_EqHearDeathCmd', 615, 1), + (5094, 1208, 1208, 'OP_EqGroupMemberRemovedCmd', 616, 1), + (5095, 1208, 1208, 'OP_EqHearChainEffectCmd', 617, 1), + (5096, 1208, 1208, 'OP_EqReceiveOfferCmd', 618, 1), + (5097, 1208, 1208, 'OP_EqInspectPCResultsCmd', 619, 1), + (5098, 1208, 1208, 'OP_EqDrawablePathGraphCmd', 620, 1), + (5099, 1208, 1208, 'OP_EqDialogOpenCmd', 621, 1), + (5100, 1208, 1208, 'OP_EqDialogCloseCmd', 622, 1), + (5101, 1208, 1208, 'OP_EqFactionUpdateCmd', 623, 1), + (5102, 1208, 1208, 'OP_EqCollectionUpdateCmd', 624, 1), + (5103, 1208, 1208, 'OP_EqCollectionFilterCmd', 625, 1), + (5104, 1208, 1208, 'OP_EqCollectionItemCmd', 626, 1), + (5105, 1208, 1208, 'OP_EqQuestJournalUpdateCmd', 627, 1), + (5106, 1208, 1208, 'OP_EqMentoring', 628, 1), + (5107, 1208, 1208, 'OP_EqQuestJournalReplyCmd', 629, 1), + (5108, 1208, 1208, 'OP_EqQuestGroupCmd', 630, 1), + (5109, 1208, 1208, 'OP_EqUpdateMerchantCmd', 631, 1), + (5110, 1208, 1208, 'OP_EqUpdateStoreCmd', 632, 1), + (5111, 1208, 1208, 'OP_EqUpdatePlayerTradeCmd', 633, 1), + (5112, 1208, 1208, 'OP_EqHelpPathCmd', 634, 1), + (5113, 1208, 1208, 'OP_EqHelpPathClearCmd', 635, 1), + (5114, 1208, 1208, 'OP_EqUpdateBankCmd', 636, 1), + (5115, 1208, 1208, 'OP_EqExamineInfoCmd', 637, 1), + (5116, 1208, 1208, 'OP_EqCloseWindowCmd', 638, 1), + (5117, 1208, 1208, 'OP_EqUpdateLootCmd', 639, 1), + (5118, 1208, 1208, 'OP_EqJunctionListCmd', 640, 1), + (5119, 1208, 1208, 'OP_EqShowDeathWindowCmd', 641, 1), + (5120, 1208, 1208, 'OP_EqDisplaySpellFailCmd', 642, 1), + (5121, 1208, 1208, 'OP_EqSpellCastStartCmd', 643, 1), + (5122, 1208, 1208, 'OP_EqSpellCastEndCmd', 644, 1), + (5123, 1208, 1208, 'OP_EqResurrectedCmd', 645, 1), + (5124, 1208, 1208, 'OP_EqChoiceWinCmd', 646, 1), + (5125, 1208, 1208, 'OP_EqSetDefaultVerbCmd', 647, 1), + (5126, 1208, 1208, 'OP_EqInstructionWindowCmd', 648, 1), + (5127, 1208, 1208, 'OP_EqInstructionWindowCloseCmd', 649, 1), + (5128, 1208, 1208, 'OP_EqInstructionWindowGoalCmd', 650, 1), + (5129, 1208, 1208, 'OP_EqInstructionWindowTaskCmd', 651, 1), + (5130, 1208, 1208, 'OP_EqEnableGameEventCmd', 652, 1), + (5131, 1208, 1208, 'OP_EqShowWindowCmd', 653, 1), + (5132, 1208, 1208, 'OP_EqEnableWindowCmd', 654, 1), + (5133, 1208, 1208, 'OP_EqFlashWindowCmd', 655, 1), + (5134, 1208, 1208, 'OP_EqHearPlayFlavorCmd', 657, 1), + (5135, 1208, 1208, 'OP_EqUpdateSignWidgetCmd', 658, 1), + (5136, 1208, 1208, 'OP_EqDebugPVDCmd', 659, 1), + (5137, 1208, 1208, 'OP_EqShowBookCmd', 660, 1), + (5138, 1208, 1208, 'OP_EqQuestionnaireCmd', 661, 1), + (5139, 1208, 1208, 'OP_EqGetProbsCmd', 663, 1), + (5140, 1208, 1208, 'OP_EqHearHealCmd', 664, 1), + (5141, 1208, 1208, 'OP_EqChatChannelUpdateCmd', 665, 1), + (5142, 1208, 1208, 'OP_EqWhoChannelQueryReplyCmd', 666, 1), + (5143, 1208, 1208, 'OP_EqAvailWorldChannelsCmd', 667, 1), + (5144, 1208, 1208, 'OP_EqUpdateTargetCmd', 668, 1), + (5145, 1208, 1208, 'OP_BrokerSellList', 669, 1), + (5146, 1208, 1208, 'OP_EqConsignmentItemsCmd', 670, 1), + (5147, 1208, 1208, 'OP_EqStartBrokerCmd', 672, 1), + (5148, 1208, 1208, 'OP_EqMapExplorationCmd', 673, 1), + (5149, 1208, 1208, 'OP_EqStoreLogCmd', 674, 1), + (5150, 1208, 1208, 'OP_EqSpellMoveToRangeAndRetryCmd', 675, 1), + (5151, 1208, 1208, 'OP_EqUpdatePlayerMailCmd', 676, 1), + (5152, 1208, 1208, 'OP_GuildStatusUpdate', 679, 1), + (5153, 1208, 1208, 'OP_EqArenaResultsCmd', 680, 1), + (5154, 1208, 1208, 'OP_EqGuildBankEventActionCmd', 681, 1), + (5155, 1208, 1208, 'OP_EqGuildBankExamineInfoCmd', 682, 1), + (5156, 1208, 1208, 'OP_EqHearSpellNoLandCmd', 683, 1), + (5157, 1208, 1208, 'OP_Lottery', 684, 1), + (5158, 1208, 1208, 'OP_GuildRecruitingMemberInfo', 685, 1), + (5159, 1208, 1208, 'OP_GuildRecruiting', 686, 1), + (5160, 1208, 1208, 'OP_GuildRecruitingDetails', 687, 1), + (5161, 1208, 1208, 'OP_GuildRecruitingImage', 688, 1), + (5162, 1208, 1208, 'OP_TradeskillList', 706, 1), + (5163, 1208, 1208, 'OP_CharRenamed', 690, 1), + (5164, 1208, 1208, 'OP_UseAdornment', 700, 1), + (5165, 1208, 1208, 'OP_ExpPurchWindow', 706, 1), + (5166, 1208, 1208, 'OP_PointOfInterest', 710, 1), + (5167, 1208, 1208, 'OP_PointOfInterest2', 711, 1), + (5168, 1208, 1208, 'OP_TraitsList', 712, 1), + (5169, 1208, 1208, 'OP_CustomizeHouseDisplay', 715, 1), + (5170, 1208, 1208, 'OP_VoiceChatServer', 716, 1), + (5171, 1208, 1208, 'OP_SupplyDepot', 720, 1), + (5172, 1208, 1208, 'OP_EQHearThreatCmd', 721, 1), + (5173, 1208, 1208, 'OP_RecipeList', 722, 1), + (5174, 1208, 1208, 'OP_Research', 723, 1), + (5175, 1208, 1208, 'OP_CharacterCurrency', 724, 1), + (5176, 1208, 1208, 'OP_CharacterAchievements', 725, 1), + (5177, 1208, 1208, 'OP_AchievementUpdateMsg', 726, 1), + (5178, 1208, 1208, 'OP_EQHearDispellCmd', 727, 1), + (5179, 1208, 1208, 'OP_JournalQuestStoryline', 728, 1), + (5180, 1208, 1208, 'OP_DungeonPlayAsAvatarList', 729, 1), + (5181, 1208, 1208, 'OP_DungeonPlayAsAvatarSelected', 730, 1), + (5182, 1208, 1208, 'OP_MercHireWindow', 731, 1), + (5183, 1208, 1208, 'OP_MercUnknown', 732, 1), + (5184, 1208, 1208, 'OP_Unknown', 748, 1), + (5657, 1096, 1096, 'OP_RecipeBook', 999, 1), + (5658, 1045, 1046, 'OP_RecipeBook', 999, 1), + (5659, 1008, 1011, 'OP_RecipeBook', 999, 1), + (5660, 908, 927, 'OP_RecipeBook', 999, 1), + (5661, 839, 844, 'OP_RecipeBook', 999, 1), + (5662, 0, 0, 'OP_RecipeBook', 999, 1), + (5663, 57000, 57002, 'OP_LoginRequestMsg', 0, 1), + (5664, 57000, 57002, 'OP_LoginByNumRequestMsg', 1, 1), + (5665, 57000, 57002, 'OP_WSLoginRequestMsg', 2, 1), + (5666, 57000, 57002, 'OP_ESLoginRequestMsg', 3, 1), + (5667, 57000, 57002, 'OP_LoginReplyMsg', 4, 1), + (5668, 57000, 57002, 'OP_WSStatusReplyMsg', 5, 1), + (5669, 57000, 57002, 'OP_WorldStatusChangeMsg', 6, 1), + (5670, 57000, 57002, 'OP_AllWSDescRequestMsg', 7, 1), + (5671, 57000, 57002, 'OP_WorldListMsg', 8, 1), + (5672, 57000, 57002, 'OP_AllCharactersDescRequestMsg', 9, 1), + (5673, 57000, 57002, 'OP_AllCharactersDescReplyMsg', 10, 1), + (5674, 57000, 57002, 'OP_CreateCharacterRequestMsg', 11, 1), + (5675, 57000, 57002, 'OP_CreateCharacterReplyMsg', 12, 1), + (5676, 57000, 57002, 'OP_WSCreateCharacterRequestMsg', 13, 1), + (5677, 57000, 57002, 'OP_WSCreateCharacterReplyMsg', 14, 1), + (5678, 57000, 57002, 'OP_ReskinCharacterRequestMsg', 15, 1), + (5679, 57000, 57002, 'OP_DeleteCharacterRequestMsg', 16, 1), + (5680, 57000, 57002, 'OP_DeleteCharacterReplyMsg', 17, 1), + (5681, 57000, 57002, 'OP_PlayCharacterRequestMsg', 18, 1), + (5682, 57000, 57002, 'OP_PlayCharacterReplyMsg', 19, 1), + (5683, 57000, 57002, 'OP_ExpectClientAsCharacterReplyMs', 22, 1), + (5684, 57000, 57002, 'OP_ServerPlayCharacterRequestMsg', 23, 1), + (5685, 57000, 57002, 'OP_ServerPlayCharacterReplyMsg', 24, 1), + (5686, 57000, 57002, 'OP_ESInitMsg', 25, 1), + (5687, 57000, 57002, 'OP_ESReadyForClientsMsg', 26, 1), + (5688, 57000, 57002, 'OP_CreateZoneInstanceMsg', 29, 1), + (5689, 57000, 57002, 'OP_ZoneInstanceCreateReplyMsg', 30, 1), + (5690, 57000, 57002, 'OP_ZoneInstanceDestroyedMsg', 31, 1), + (5691, 57000, 57002, 'OP_ExpectClientAsCharacterRequest', 32, 1), + (5692, 57000, 57002, 'OP_ZoneInfoMsg', 33, 1), + (5693, 57000, 57002, 'OP_DoneLoadingZoneResourcesMsg', 34, 1), + (5694, 57000, 57002, 'OP_DoneSendingInitialEntitiesMsg', 35, 1), + (5695, 57000, 57002, 'OP_DoneLoadingEntityResourcesMsg', 36, 1), + (5696, 57000, 57002, 'OP_PredictionUpdateMsg', 37, 1), + (5697, 57000, 57002, 'OP_UpdatePositionMsg', 39, 1), + (5698, 57000, 57002, 'OP_SetRemoteCmdsMsg', 41, 1), + (5699, 57000, 57002, 'OP_RemoteCmdMsg', 42, 1), + (5700, 57000, 57002, 'OP_GameWorldTimeMsg', 43, 1), + (5701, 57000, 57002, 'OP_MOTDMsg', 44, 1), + (5702, 57000, 57002, 'OP_ZoneMOTDMsg', 45, 1), + (5703, 57000, 57002, 'OP_AvatarCreatedMsg', 46, 1), + (5704, 57000, 57002, 'OP_AvatarDestroyedMsg', 47, 1), + (5705, 57000, 57002, 'OP_RequestCampMsg', 50, 1), + (5706, 57000, 57002, 'OP_CampStartedMsg', 51, 1), + (5707, 57000, 57002, 'OP_CampAbortedMsg', 52, 1), + (5708, 57000, 57002, 'OP_WhoQueryRequestMsg', 53, 1), + (5709, 57000, 57002, 'OP_WhoQueryReplyMsg', 54, 1), + (5710, 57000, 57002, 'OP_MonitorReplyMsg', 55, 1), + (5711, 57000, 57002, 'OP_MonitorCharacterListMsg', 56, 1), + (5712, 57000, 57002, 'OP_MonitorCharacterListRequestMsg', 57, 1), + (5713, 57000, 57002, 'OP_ClientCmdMsg', 58, 1), + (5714, 57000, 57002, 'OP_DispatchESMsg', 59, 1), + (5715, 57000, 57002, 'OP_DispatchClientCmdMsg', 60, 1), + (5716, 57000, 57002, 'OP_UpdateTargetMsg', 61, 1), + (5717, 57000, 57002, 'OP_UpdateTargetLocMsg', 62, 1), + (5718, 57000, 57002, 'OP_UpdateCharacterSheetMsg', 63, 1), + (5719, 57000, 57002, 'OP_CharacterPet', 64, 1), + (5720, 57000, 57002, 'OP_CharacterMerc', 65, 1), + (5721, 57000, 57002, 'OP_UpdateSpellBookMsg', 66, 1), + (5722, 57000, 57002, 'OP_UpdateInventoryMsg', 68, 1), + (5723, 57000, 57002, 'OP_AfterInvSpellUpdate', 69, 1), + (5724, 57000, 57002, 'OP_UpdateRecipeBookMsg', 70, 1), + (5725, 57000, 57002, 'OP_RequestRecipeDetailsMsg', 71, 1), + (5726, 57000, 57002, 'OP_RecipeDetailsMsg', 72, 1), + (5727, 57000, 57002, 'OP_UpdateSkillBookMsg', 73, 1), + (5728, 57000, 57002, 'OP_UpdateSkillsMsg', 74, 1), + (5729, 57000, 57002, 'OP_UpdateOpportunityMsg', 75, 1), + (5730, 57000, 57002, 'OP_ChangeZoneMsg', 77, 1), + (5731, 57000, 57002, 'OP_ClientTeleportRequestMsg', 78, 1), + (5732, 57000, 57002, 'OP_TeleportWithinZoneMsg', 79, 1), + (5733, 57000, 57002, 'OP_TeleportWithinZoneNoReloadMsg', 80, 1), + (5734, 57000, 57002, 'OP_MigrateClientToZoneRequestMsg', 81, 1), + (5735, 57000, 57002, 'OP_MigrateClientToZoneReplyMsg', 82, 1), + (5736, 57000, 57002, 'OP_ReadyToZoneMsg', 84, 1), + (5737, 57000, 57002, 'OP_RemoveClientFromGroupMsg', 85, 1), + (5738, 57000, 57002, 'OP_RemoveGroupFromGroupMsg', 86, 1), + (5739, 57000, 57002, 'OP_MakeGroupLeaderMsg', 87, 1), + (5740, 57000, 57002, 'OP_GroupCreatedMsg', 88, 1), + (5741, 57000, 57002, 'OP_GroupDestroyedMsg', 89, 1), + (5742, 57000, 57002, 'OP_GroupMemberAddedMsg', 90, 1), + (5743, 57000, 57002, 'OP_GroupMemberRemovedMsg', 91, 1), + (5744, 57000, 57002, 'OP_GroupRemovedFromGroupMsg', 92, 1), + (5745, 57000, 57002, 'OP_GroupLeaderChangedMsg', 93, 1), + (5746, 57000, 57002, 'OP_GroupResendOOZDataMsg', 94, 1), + (5747, 57000, 57002, 'OP_GroupSettingsChangedMsg', 95, 1), + (5748, 57000, 57002, 'OP_OutOfZoneMemberDataMsg', 96, 1), + (5749, 57000, 57002, 'OP_SendLatestRequestMsg', 97, 1), + (5750, 57000, 57002, 'OP_ClearDataMsg', 98, 1), + (5751, 57000, 57002, 'OP_SetSocialMsg', 99, 1), + (5752, 57000, 57002, 'OP_ESStatusMsg', 100, 1), + (5753, 57000, 57002, 'OP_ESZoneInstanceStatusMsg', 101, 1), + (5754, 57000, 57002, 'OP_ZonesStatusRequestMsg', 102, 1), + (5755, 57000, 57002, 'OP_ZonesStatusMsg', 103, 1), + (5756, 57000, 57002, 'OP_ESWeatherRequestMsg', 104, 1), + (5757, 57000, 57002, 'OP_ESWeatherRequestEndMsg', 105, 1), + (5758, 57000, 57002, 'OP_DialogSelectMsg', 109, 1), + (5759, 57000, 57002, 'OP_DialogCloseMsg', 110, 1), + (5760, 57000, 57002, 'OP_RemoveSpellEffectMsg', 111, 1), + (5761, 57000, 57002, 'OP_RemoveConcentrationMsg', 112, 1), + (5762, 57000, 57002, 'OP_QuestJournalOpenMsg', 113, 1), + (5763, 57000, 57002, 'OP_QuestJournalInspectMsg', 114, 1), + (5764, 57000, 57002, 'OP_QuestJournalSetVisibleMsg', 115, 1), + (5765, 57000, 57002, 'OP_QuestJournalWaypointMsg', 116, 1), + (5766, 57000, 57002, 'OP_CreateGuildRequestMsg', 119, 1), + (5767, 57000, 57002, 'OP_CreateGuildReplyMsg', 120, 1), + (5768, 57000, 57002, 'OP_GuildsayMsg', 121, 1), + (5769, 57000, 57002, 'OP_FellowshipExpMsg', 122, 1), + (5770, 57000, 57002, 'OP_DeleteGuildMsg', 123, 1), + (5771, 57000, 57002, 'OP_GuildUpdateMsg', 124, 1), + (5772, 57000, 57002, 'OP_ConsignmentCloseStoreMsg', 125, 1), + (5773, 57000, 57002, 'OP_ConsignItemRequestMsg', 126, 1), + (5774, 57000, 57002, 'OP_ConsignItemResponseMsg', 127, 1), + (5775, 57000, 57002, 'OP_PurchaseConsignmentRequestMsg', 128, 1), + (5776, 57000, 57002, 'OP_LikeOption', 135, 1), + (5777, 57000, 57002, 'OP_PublishHouse', 138, 1), + (5778, 57000, 57002, 'OP_PlayerMadeInstacnesScreen', 139, 1), + (5779, 57000, 57002, 'OP_PlayerMadeInstances', 140, 1), + (5780, 57000, 57002, 'OP_HouseDeletedRemotelyMsg', 141, 1), + (5781, 57000, 57002, 'OP_UpdateHouseDataMsg', 142, 1), + (5782, 57000, 57002, 'OP_UpdateHouseAccessDataMsg', 143, 1), + (5783, 57000, 57002, 'OP_PlayerHouseBaseScreenMsg', 144, 1), + (5784, 57000, 57002, 'OP_PlayerHousePurchaseScreenMsg', 145, 1), + (5785, 57000, 57002, 'OP_PlayerHouseAccessUpdateMsg', 146, 1), + (5786, 57000, 57002, 'OP_PlayerHouseDisplayStatusMsg', 147, 1), + (5787, 57000, 57002, 'OP_PlayerHouseCloseUIMsg', 148, 1), + (5788, 57000, 57002, 'OP_BuyPlayerHouseMsg', 149, 1), + (5789, 57000, 57002, 'OP_BuyPlayerHouseTintMsg', 150, 1), + (5790, 57000, 57002, 'OP_CollectAllHouseItemsMsg', 151, 1), + (5791, 57000, 57002, 'OP_RelinquishHouseMsg', 152, 1), + (5792, 57000, 57002, 'OP_EnterHouseMsg', 153, 1), + (5793, 57000, 57002, 'OP_ExitHouseMsg', 154, 1), + (5794, 57000, 57002, 'OP_HouseDefaultAccessSetMsg', 155, 1), + (5795, 57000, 57002, 'OP_HouseAccessSetMsg', 156, 1), + (5796, 57000, 57002, 'OP_HouseAccessRemoveMsg', 157, 1), + (5797, 57000, 57002, 'OP_PayHouseUpkeepMsg', 158, 1), + (5798, 57000, 57002, 'OP_MoveableObjectPlacementCriteri', 159, 1), + (5799, 57000, 57002, 'OP_EnterMoveObjectModeMsg', 160, 1), + (5800, 57000, 57002, 'OP_PositionMoveableObject', 161, 1), + (5801, 57000, 57002, 'OP_CancelMoveObjectModeMsg', 162, 1), + (5802, 57000, 57002, 'OP_ShaderCustomizationMsg', 163, 1), + (5803, 57000, 57002, 'OP_ReplaceableSubMeshesMsg', 164, 1), + (5804, 57000, 57002, 'OP_HouseCustomizationScreenMsg', 165, 1), + (5805, 57000, 57002, 'OP_CustomizationPurchaseRequestMs', 166, 1), + (5806, 57000, 57002, 'OP_CustomizationSetRequestMsg', 167, 1), + (5807, 57000, 57002, 'OP_CustomizationReplyMsg', 168, 1), + (5808, 57000, 57002, 'OP_TintWidgetsMsg', 169, 1), + (5809, 57000, 57002, 'OP_ExamineConsignmentRequestMsg', 170, 1), + (5810, 57000, 57002, 'OP_ExamineConsignmentResponseMsg', 171, 1), + (5811, 57000, 57002, 'OP_UISettingsResponseMsg', 172, 1), + (5812, 57000, 57002, 'OP_UIResetMsg', 173, 1), + (5813, 57000, 57002, 'OP_KeymapLoadMsg', 174, 1), + (5814, 57000, 57002, 'OP_KeymapNoneMsg', 175, 1), + (5815, 57000, 57002, 'OP_KeymapDataMsg', 176, 1), + (5816, 57000, 57002, 'OP_KeymapSaveMsg', 177, 1), + (5817, 57000, 57002, 'OP_DispatchSpellCmdMsg', 178, 1), + (5818, 57000, 57002, 'OP_EntityVerbsRequestMsg', 179, 1), + (5819, 57000, 57002, 'OP_EntityVerbsReplyMsg', 180, 1), + (5820, 57000, 57002, 'OP_EntityVerbsVerbMsg', 181, 1), + (5821, 57000, 57002, 'OP_ChatRelationshipUpdateMsg', 183, 1), + (5822, 57000, 57002, 'OP_LootItemsRequestMsg', 184, 1), + (5823, 57000, 57002, 'OP_StoppedLootingMsg', 185, 1), + (5824, 57000, 57002, 'OP_SitMsg', 186, 1), + (5825, 57000, 57002, 'OP_StandMsg', 187, 1), + (5826, 57000, 57002, 'OP_SatMsg', 188, 1), + (5827, 57000, 57002, 'OP_StoodMsg', 189, 1), + (5828, 57000, 57002, 'OP_ClearForTakeOffMsg', 190, 1), + (5829, 57000, 57002, 'OP_ReadyForTakeOffMsg', 191, 1), + (5830, 57000, 57002, 'OP_ShowIllusionsMsg', 192, 1), + (5831, 57000, 57002, 'OP_HideIllusionsMsg', 193, 1), + (5832, 57000, 57002, 'OP_ExamineItemRequestMsg', 194, 1), + (5833, 57000, 57002, 'OP_ReadBookPageMsg', 195, 1), + (5834, 57000, 57002, 'OP_DefaultGroupOptionsRequestMsg', 196, 1), + (5835, 57000, 57002, 'OP_DefaultGroupOptionsMsg', 197, 1), + (5836, 57000, 57002, 'OP_GroupOptionsMsg', 198, 1), + (5837, 57000, 57002, 'OP_DisplayGroupOptionsScreenMsg', 199, 1), + (5838, 57000, 57002, 'OP_PetOptions', 200, 1), + (5839, 57000, 57002, 'OP_DisplayInnVisitScreenMsg', 201, 1), + (5840, 57000, 57002, 'OP_DumpSchedulerMsg', 202, 1), + (5841, 57000, 57002, 'OP_LSCheckAcctLockMsg', 203, 1), + (5842, 57000, 57002, 'OP_WSAcctLockStatusMsg', 204, 1), + (5843, 57000, 57002, 'OP_RequestHelpRepathMsg', 205, 1), + (5844, 57000, 57002, 'OP_RequestTargetLocMsg', 206, 1), + (5845, 57000, 57002, 'OP_UpdateMotdMsg', 207, 1), + (5846, 57000, 57002, 'OP_DestUpdateReq', 209, 1), + (5847, 57000, 57002, 'OP_PerformPlayerKnockbackMsg', 212, 1), + (5848, 57000, 57002, 'OP_PerformCameraShakeMsg', 213, 1), + (5849, 57000, 57002, 'OP_PopulateSkillMapsMsg', 214, 1), + (5850, 57000, 57002, 'OP_CancelledFeignMsg', 215, 1), + (5851, 57000, 57002, 'OP_SysClient', 217, 1), + (5852, 57000, 57002, 'OP_ShowCreateFromRecipeUIMsg', 218, 1), + (5853, 57000, 57002, 'OP_CancelCreateFromRecipeMsg', 219, 1), + (5854, 57000, 57002, 'OP_BeginItemCreationMsg', 220, 1), + (5855, 57000, 57002, 'OP_StopItemCreationMsg', 221, 1), + (5856, 57000, 57002, 'OP_ShowItemCreationProcessUIMsg', 222, 1), + (5857, 57000, 57002, 'OP_UpdateItemCreationProcessUIMsg', 223, 1), + (5858, 57000, 57002, 'OP_DisplayTSEventReactionMsg', 224, 1), + (5859, 57000, 57002, 'OP_ShowRecipeBookMsg', 225, 1), + (5860, 57000, 57002, 'OP_KnowledgebaseRequestMsg', 226, 1), + (5861, 57000, 57002, 'OP_KnowledgebaseResponseMsg', 227, 1), + (5862, 57000, 57002, 'OP_CSTicketHeaderRequestMsg', 228, 1), + (5863, 57000, 57002, 'OP_CSTicketInfoMsg', 229, 1), + (5864, 57000, 57002, 'OP_CSTicketCommentRequestMsg', 230, 1), + (5865, 57000, 57002, 'OP_CSTicketCommentResponseMsg', 231, 1), + (5866, 57000, 57002, 'OP_CSTicketCreateMsg', 232, 1), + (5867, 57000, 57002, 'OP_CSTicketAddCommentMsg', 233, 1), + (5868, 57000, 57002, 'OP_CSTicketDeleteMsg', 234, 1), + (5869, 57000, 57002, 'OP_CSTicketChangeNotificationMsg', 235, 1), + (5870, 57000, 57002, 'OP_WorldDataUpdateMsg', 236, 1), + (5871, 57000, 57002, 'OP_KnownLanguagesMsg', 237, 1), + (5872, 57000, 57002, 'OP_LsRequestClientCrashLogMsg', 238, 1), + (5873, 57000, 57002, 'OP_LsClientBaselogReplyMsg', 239, 1), + (5874, 57000, 57002, 'OP_LsClientCrashlogReplyMsg', 240, 1), + (5875, 57000, 57002, 'OP_LsClientAlertlogReplyMsg', 241, 1), + (5876, 57000, 57002, 'OP_LsClientVerifylogReplyMsg', 242, 1), + (5877, 57000, 57002, 'OP_ClientTeleportToLocationMsg', 243, 1), + (5878, 57000, 57002, 'OP_UpdateClientPredFlagsMsg', 244, 1), + (5879, 57000, 57002, 'OP_ChangeServerControlFlagMsg', 245, 1), + (5880, 57000, 57002, 'OP_CSToolsRequestMsg', 246, 1), + (5881, 57000, 57002, 'OP_CSToolsResponseMsg', 247, 1), + (5882, 57000, 57002, 'OP_AddSocialStructureStandingMsg', 248, 1), + (5883, 57000, 57002, 'OP_CreateBoatTransportsMsg', 249, 1), + (5884, 57000, 57002, 'OP_PositionBoatTransportMsg', 250, 1), + (5885, 57000, 57002, 'OP_MigrateBoatTransportMsg', 251, 1), + (5886, 57000, 57002, 'OP_MigrateBoatTransportReplyMsg', 252, 1), + (5887, 57000, 57002, 'OP_DisplayDebugNLLPointsMsg', 253, 1), + (5888, 57000, 57002, 'OP_ExamineInfoRequestMsg', 254, 1), + (5889, 57000, 57002, 'OP_QuickbarInitMsg', 255, 1), + (5890, 57000, 57002, 'OP_QuickbarUpdateMsg', 256, 1), + (5891, 57000, 57002, 'OP_MacroInitMsg', 257, 1), + (5892, 57000, 57002, 'OP_MacroUpdateMsg', 258, 1), + (5893, 57000, 57002, 'OP_QuestionnaireMsg', 259, 1), + (5894, 57000, 57002, 'OP_LevelChangedMsg', 260, 1), + (5895, 57000, 57002, 'OP_SpellGainedMsg', 261, 1), + (5896, 57000, 57002, 'OP_EncounterBrokenMsg', 262, 1), + (5897, 57000, 57002, 'OP_OnscreenMsgMsg', 263, 1), + (5898, 57000, 57002, 'OP_DisplayWarningMsg', 264, 1), + (5899, 57000, 57002, 'OP_ModifyGuildMsg', 265, 1), + (5900, 57000, 57002, 'OP_GuildEventMsg', 266, 1), + (5901, 57000, 57002, 'OP_GuildEventAddMsg', 267, 1), + (5902, 57000, 57002, 'OP_GuildEventActionMsg', 268, 1), + (5903, 57000, 57002, 'OP_GuildEventListMsg', 269, 1), + (5904, 57000, 57002, 'OP_RequestGuildEventDetailsMsg', 270, 1), + (5905, 57000, 57002, 'OP_GuildEventDetailsMsg', 271, 1), + (5906, 57000, 57002, 'OP_RequestGuildInfoMsg', 272, 1), + (5907, 57000, 57002, 'OP_GuildBankActionMsg', 273, 1), + (5908, 57000, 57002, 'OP_GuildBankActionResponseMsg', 274, 1), + (5909, 57000, 57002, 'OP_GuildBankItemDetailsRequestMsg', 275, 1), + (5910, 57000, 57002, 'OP_GuildBankItemDetailsResponseMs', 276, 1), + (5911, 57000, 57002, 'OP_GuildBankUpdateMsg', 277, 1), + (5912, 57000, 57002, 'OP_GuildBankEventListMsg', 278, 1), + (5913, 57000, 57002, 'OP_RequestGuildBankEventDetailsMs', 279, 1), + (5914, 57000, 57002, 'OP_RewardPackMsg', 280, 1), + (5915, 57000, 57002, 'OP_RenameGuildMsg', 281, 1), + (5916, 57000, 57002, 'OP_ZoneToFriendRequestMsg', 282, 1), + (5917, 57000, 57002, 'OP_ZoneToFriendReplyMsg', 283, 1), + (5918, 57000, 57002, 'OP_ChatCreateChannelMsg', 284, 1), + (5919, 57000, 57002, 'OP_ChatJoinChannelMsg', 285, 1), + (5920, 57000, 57002, 'OP_ChatWhoChannelMsg', 286, 1), + (5921, 57000, 57002, 'OP_ChatLeaveChannelMsg', 287, 1), + (5922, 57000, 57002, 'OP_ChatTellChannelMsg', 288, 1), + (5923, 57000, 57002, 'OP_ChatTellUserMsg', 289, 1), + (5924, 57000, 57002, 'OP_ChatToggleFriendMsg', 290, 1), + (5925, 57000, 57002, 'OP_BrokerAddBag', 291, 1), + (5926, 57000, 57002, 'OP_BrokerRemoveBag', 292, 1), + (5927, 57000, 57002, 'OP_ChatToggleIgnoreMsg', 293, 1), + (5928, 57000, 57002, 'OP_ChatSendFriendsMsg', 294, 1), + (5929, 57000, 57002, 'OP_ChatSendIgnoresMsg', 295, 1), + (5930, 57000, 57002, 'OP_QuestReward', 319, 1), + (5931, 57000, 57002, 'OP_ChatFiltersMsg', 334, 1), + (5932, 57000, 57002, 'OP_MailGetMessageMsg', 337, 1), + (5933, 57000, 57002, 'OP_MailSendMessageMsg', 338, 1), + (5934, 57000, 57002, 'OP_MailDeleteMessageMsg', 339, 1), + (5935, 57000, 57002, 'OP_MailGetHeadersReplyMsg', 340, 1), + (5936, 57000, 57002, 'OP_MailGetMessageReplyMsg', 341, 1), + (5937, 57000, 57002, 'OP_MailSendMessageReplyMsg', 342, 1), + (5938, 57000, 57002, 'OP_MailCommitSendMessageMsg', 343, 1), + (5939, 57000, 57002, 'OP_MailSendSystemMessageMsg', 344, 1), + (5940, 57000, 57002, 'OP_MailRemoveAttachFromMailMsg', 345, 1), + (5941, 57000, 57002, 'OP_WaypointRequestMsg', 347, 1), + (5942, 57000, 57002, 'OP_WaypointReplyMsg', 348, 1), + (5943, 57000, 57002, 'OP_WaypointSelectMsg', 349, 1), + (5944, 57000, 57002, 'OP_WaypointUpdateMsg', 350, 1), + (5945, 57000, 57002, 'OP_CharNameChangedMsg', 351, 1), + (5946, 57000, 57002, 'OP_ShowZoneTeleporterDestinations', 352, 1), + (5947, 57000, 57002, 'OP_SelectZoneTeleporterDestinatio', 353, 1), + (5948, 57000, 57002, 'OP_ReloadLocalizedTxtMsg', 354, 1), + (5949, 57000, 57002, 'OP_RequestGuildMembershipMsg', 355, 1), + (5950, 57000, 57002, 'OP_GuildMembershipResponseMsg', 356, 1), + (5951, 57000, 57002, 'OP_LeaveGuildNotifyMsg', 357, 1), + (5952, 57000, 57002, 'OP_JoinGuildNotifyMsg', 358, 1), + (5953, 57000, 57002, 'OP_AvatarUpdateMsg', 359, 1), + (5954, 57000, 57002, 'OP_BioUpdateMsg', 361, 1), + (5955, 57000, 57002, 'OP_InspectPlayerMsg', 362, 1), + (5956, 57000, 57002, 'OP_WSServerLockMsg', 363, 1), + (5957, 57000, 57002, 'OP_LSServerLockMsg', 364, 1), + (5958, 57000, 57002, 'OP_WSServerHideMsg', 365, 1), + (5959, 57000, 57002, 'OP_CsCategoryRequestMsg', 366, 1), + (5960, 57000, 57002, 'OP_CsCategoryResponseMsg', 367, 1), + (5961, 57000, 57002, 'OP_KnowledgeWindowSlotMappingMsg', 368, 1), + (5962, 57000, 57002, 'OP_AFKUpdateMsg', 369, 1), + (5963, 57000, 57002, 'OP_AnonUpdateMsg', 370, 1), + (5964, 57000, 57002, 'OP_UpdateActivePublicZonesMsg', 371, 1), + (5965, 57000, 57002, 'OP_UnknownNpcMsg', 372, 1), + (5966, 57000, 57002, 'OP_PromoFlagsDetailsMsg', 373, 1), + (5967, 57000, 57002, 'OP_ConsignViewCreateMsg', 374, 1), + (5968, 57000, 57002, 'OP_ConsignViewGetPageMsg', 375, 1), + (5969, 57000, 57002, 'OP_ConsignViewReleaseMsg', 376, 1), + (5970, 57000, 57002, 'OP_ConsignRemoveItemsMsg', 377, 1), + (5971, 57000, 57002, 'OP_UpdateDebugRadiiMsg', 378, 1), + (5972, 57000, 57002, 'OP_ReportMsg', 379, 1), + (5973, 57000, 57002, 'OP_UpdateRaidMsg', 380, 1), + (5974, 57000, 57002, 'OP_ConsignViewSortMsg', 382, 1), + (5975, 57000, 57002, 'OP_TitleUpdateMsg', 383, 1), + (5976, 57000, 57002, 'OP_ClientFellMsg', 384, 1), + (5977, 57000, 57002, 'OP_ClientInDeathRegionMsg', 385, 1), + (5978, 57000, 57002, 'OP_CampClientMsg', 386, 1), + (5979, 57000, 57002, 'OP_CSToolAccessResponseMsg', 387, 1), + (5980, 57000, 57002, 'OP_TrackingUpdateMsg', 388, 1), + (5981, 57000, 57002, 'OP_BeginTrackingMsg', 389, 1), + (5982, 57000, 57002, 'OP_StopTrackingMsg', 390, 1), + (5983, 57000, 57002, 'OP_GetAvatarAccessRequestForCSToo', 392, 1), + (5984, 57000, 57002, 'OP_AdvancementRequestMsg', 393, 1), + (5985, 57000, 57002, 'OP_MapFogDataInitMsg', 394, 1), + (5986, 57000, 57002, 'OP_MapFogDataUpdateMsg', 395, 1), + (5987, 57000, 57002, 'OP_CloseGroupInviteWindowMsg', 396, 1), + (5988, 57000, 57002, 'OP_UpdateGroupMemberDataMsg', 397, 1), + (5989, 57000, 57002, 'OP_WorldPingMsg', 398, 1), + (5990, 57000, 57002, 'OP_MoveLogUpdateMsg', 389, 1), + (5991, 57000, 57002, 'OP_OfferQuestMsg', 400, 1), + (5992, 57000, 57002, 'OP_WorldShutdownUpdateMsg', 402, 1), + (5993, 57000, 57002, 'OP_DisplayMailScreenMsg', 403, 1), + (5994, 57000, 57002, 'OP_ClientIdleBeginMsg', 404, 1), + (5995, 57000, 57002, 'OP_ClientIdleEndMsg', 405, 1), + (5996, 57000, 57002, 'OP_PurchaseConsignmentLoreCheckRe', 406, 1), + (5997, 57000, 57002, 'OP_NotifyApprenticeStoppedMentori', 407, 1), + (5998, 57000, 57002, 'OP_CorruptedClientMsg', 408, 1), + (5999, 57000, 57002, 'OP_WorldDataChangeMsg', 409, 1), + (6000, 57000, 57002, 'OP_MailEventNotificationMsg', 410, 1), + (6001, 57000, 57002, 'OP_RestartZoneMsg', 411, 1), + (6002, 57000, 57002, 'OP_FlightPathsMsg', 412, 1), + (6003, 57000, 57002, 'OP_CharacterLinkdeadMsg', 413, 1), + (6004, 57000, 57002, 'OP_CharTransferStartRequestMsg', 414, 1), + (6005, 57000, 57002, 'OP_CharTransferStartReplyMsg', 415, 1), + (6006, 57000, 57002, 'OP_CharTransferRequestMsg', 416, 1), + (6007, 57000, 57002, 'OP_CharTransferReplyMsg', 417, 1), + (6008, 57000, 57002, 'OP_CharTransferRollbackRequestMsg', 418, 1), + (6009, 57000, 57002, 'OP_CharTransferCommitRequestMsg', 419, 1), + (6010, 57000, 57002, 'OP_CharTransferRollbackReplyMsg', 420, 1), + (6011, 57000, 57002, 'OP_CharTransferCommitReplyMsg', 421, 1), + (6012, 57000, 57002, 'OP_GetCharacterSerializedRequestM', 422, 1), + (6013, 57000, 57002, 'OP_GetCharacterSerializedReplyMsg', 423, 1), + (6014, 57000, 57002, 'OP_CreateCharFromCBBRequestMsg', 424, 1), + (6015, 57000, 57002, 'OP_CreateCharFromCBBReplyMsg', 425, 1), + (6016, 57000, 57002, 'OP_HousingDataChangedMsg', 426, 1), + (6017, 57000, 57002, 'OP_HousingRestoreMsg', 427, 1), + (6018, 57000, 57002, 'OP_AuctionItem', 428, 1), + (6019, 57000, 57002, 'OP_AuctionItemReply', 429, 1), + (6020, 57000, 57002, 'OP_AuctionCoin', 430, 1), + (6021, 57000, 57002, 'OP_AuctionCoinReply', 431, 1), + (6022, 57000, 57002, 'OP_AuctionCharacter', 432, 1), + (6023, 57000, 57002, 'OP_AuctionCharacterReply', 433, 1), + (6024, 57000, 57002, 'OP_AuctionCommitMsg', 434, 1), + (6025, 57000, 57002, 'OP_AuctionAbortMsg', 435, 1), + (6026, 57000, 57002, 'OP_CharTransferValidateRequestMsg', 436, 1), + (6027, 57000, 57002, 'OP_CharTransferValidateReplyMsg', 437, 1), + (6028, 57000, 57002, 'OP_RaceRestrictionMsg', 438, 1), + (6029, 57000, 57002, 'OP_SetInstanceDisplayNameMsg', 439, 1), + (6030, 57000, 57002, 'OP_GetAuctionAssetIDMsg', 440, 1), + (6031, 57000, 57002, 'OP_GetAuctionAssetIDReplyMsg', 441, 1), + (6032, 57000, 57002, 'OP_ResendWorldChannelsMsg', 442, 1), + (6033, 57000, 57002, 'OP_DisplayExchangeScreenMsg', 443, 1), + (6034, 57000, 57002, 'OP_ArenaGameTypesMsg', 444, 1), + (6035, 57000, 57002, 'OP_AuditAuctionEventMsg', 445, 1), + (6036, 57000, 57002, 'OP_InviteRequestMsg', 446, 1), + (6037, 57000, 57002, 'OP_InviteResponseMsg', 447, 1), + (6038, 57000, 57002, 'OP_InviteTargetResponseMsg', 448, 1), + (6039, 57000, 57002, 'OP_InspectPlayerRequestMsg', 449, 1), + (6040, 57000, 57002, 'OP_DispatchMsg', 450, 1), + (6041, 57000, 57002, 'OP_DisplayEventMsg', 451, 1), + (6042, 57000, 57002, 'OP_PrePossessionMsg', 452, 1), + (6043, 57000, 57002, 'OP_PostPossessionMsg', 453, 1), + (6044, 57000, 57002, 'OP_ArenaCreate', 455, 1), + (6045, 57000, 57002, 'OP_ArenaList', 456, 1), + (6046, 57000, 57002, 'OP_ArenaWindow', 464, 1), + (6047, 57000, 57002, 'OP_HouseItemsList', 482, 1), + (6048, 57000, 57002, 'OP_CurrentPet', 484, 1), + (6049, 57000, 57002, 'OP_AdventureList', 487, 1), + (6050, 57000, 57002, 'OP_CancelSpellCast', 488, 1), + (6051, 57000, 57002, 'OP_UpdateTitleCmd', 493, 1), + (6052, 57000, 57002, 'OP_AttackAllowed', 499, 1), + (6053, 57000, 57002, 'OP_AttackNotAllowed', 500, 1), + (6054, 57000, 57002, 'OP_BagOptions', 501, 1), + (6055, 57000, 57002, 'OP_LFGGroupSearch', 503, 1), + (6056, 57000, 57002, 'OP_CharacterHousingList', 506, 1), + (6057, 57000, 57002, 'OP_DressingRoom', 509, 1), + (6058, 57000, 57002, 'OP_PlayLon', 510, 1), + (6059, 57000, 57002, 'OP_SkillInfoRequest', 513, 1), + (6060, 57000, 57002, 'OP_SkillInfoResponse', 514, 1), + (6061, 57000, 57002, 'OP_LFGUpdateMsg', 517, 1), + (6062, 57000, 57002, 'OP_BadLanguageFilter', 518, 1), + (6063, 57000, 57002, 'OP_VoiceChatChannel', 519, 1), + (6064, 57000, 57002, 'OP_MapRequest', 520, 1), + (6065, 57000, 57002, 'OP_MarketFundsUpdate', 525, 1), + (6066, 57000, 57002, 'OP_UIEvent', 526, 1), + (6067, 57000, 57002, 'OP_MarketAddFundsRequest', 527, 1), + (6068, 57000, 57002, 'OP_MarketAddFundsReply', 528, 1), + (6069, 57000, 57002, 'OP_MarketPurchase', 530, 1), + (6070, 57000, 57002, 'OP_MarketPlacePrices', 531, 1), + (6071, 57000, 57002, 'OP_MarketPlaceItems', 534, 1), + (6072, 57000, 57002, 'OP_RecipeBook', 535, 1), + (6073, 57000, 57002, 'OP_CreateCharacterDungeon', 544, 1), + (6074, 57000, 57002, 'OP_DungeonMakerEnter', 545, 1), + (6075, 57000, 57002, 'OP_DungeonMakerItemRequest', 547, 1), + (6076, 57000, 57002, 'OP_CharacterCreatedDungeons', 548, 1), + (6077, 57000, 57002, 'OP_DungeonMakerToolboxList', 549, 1), + (6078, 57000, 57002, 'OP_DungeonMakerUnknown', 550, 1), + (6079, 57000, 57002, 'OP_DungeonMakerUnknown1', 551, 1), + (6080, 57000, 57002, 'OP_PlayerPollPopup', 553, 1), + (6081, 57000, 57002, 'OP_PlayerPollAnswer', 554, 1), + (6082, 57000, 57002, 'OP_MentorPopup', 555, 1), + (6083, 57000, 57002, 'OP_LoadWelcomeWindow', 557, 1), + (6084, 57000, 57002, 'OP_OpenCharCust', 558, 1), + (6085, 57000, 57002, 'OP_SubmitCharCust', 559, 1), + (6086, 57000, 57002, 'OP_QueAllBgSolo', 561, 1), + (6087, 57000, 57002, 'OP_ZoneBgInstanceList', 563, 1), + (6088, 57000, 57002, 'OP_WorldTravelAvail', 567, 1), + (6089, 57000, 57002, 'OP_PaperdollImage', 571, 1), + (6090, 57000, 57002, 'OP_LoadCalendarEvents', 572, 1), + (6091, 57000, 57002, 'OP_VideoUploaded', 573, 1), + (6092, 57000, 57002, 'OP_SavageBarInitMsg', 574, 1), + (6093, 57000, 57002, 'OP_PetOptionsResponse', 575, 1), + (6094, 57000, 57002, 'OP_DungeonMakerItemResponse', 576, 1), + (6095, 57000, 57002, 'OP_CharacterMounts', 578, 1), + (6096, 57000, 57002, 'OP_EqBetaCopyRequest', 588, 1), + (6097, 57000, 57002, 'OP_EqHearChatCmd', 589, 1), + (6098, 57000, 57002, 'OP_EqDisplayTextCmd', 590, 1), + (6099, 57000, 57002, 'OP_EqCreateGhostCmd', 591, 1), + (6100, 57000, 57002, 'OP_EqCreateWidgetCmd', 592, 1), + (6101, 57000, 57002, 'OP_EqCreateSignWidgetCmd', 593, 1), + (6102, 57000, 57002, 'OP_EqDestroyGhostCmd', 594, 1), + (6103, 57000, 57002, 'OP_EqUpdateGhostCmd', 595, 1), + (6104, 57000, 57002, 'OP_EqSetControlGhostCmd', 596, 1), + (6105, 57000, 57002, 'OP_EqSetPOVGhostCmd', 597, 1), + (6106, 57000, 57002, 'OP_EqHearCombatCmd', 598, 1), + (6107, 57000, 57002, 'OP_EqHearSpellCastCmd', 599, 1), + (6108, 57000, 57002, 'OP_EQHearProcCmd', 600, 1), + (6109, 57000, 57002, 'OP_EQHearResEffectCmd', 601, 1), + (6110, 57000, 57002, 'OP_EqHearSpellInterruptCmd', 602, 1), + (6111, 57000, 57002, 'OP_EqHearSpellFizzleCmd', 603, 1), + (6112, 57000, 57002, 'OP_EqHearConsiderCmd', 604, 1), + (6113, 57000, 57002, 'OP_EqUpdateSubClassesCmd', 605, 1), + (6114, 57000, 57002, 'OP_EqCreateListBoxCmd', 606, 1), + (6115, 57000, 57002, 'OP_EqSetDebugPathPointsCmd', 607, 1), + (6116, 57000, 57002, 'OP_EqCannedEmoteCmd', 609, 1), + (6117, 57000, 57002, 'OP_EqStateCmd', 610, 1), + (6118, 57000, 57002, 'OP_EqPlaySoundCmd', 611, 1), + (6119, 57000, 57002, 'OP_EqPlaySound3DCmd', 612, 1), + (6120, 57000, 57002, 'OP_EqPlayVoiceCmd', 613, 1), + (6121, 57000, 57002, 'OP_EqHearDrowningCmd', 614, 1), + (6122, 57000, 57002, 'OP_EqHearDeathCmd', 615, 1), + (6123, 57000, 57002, 'OP_EqGroupMemberRemovedCmd', 616, 1), + (6124, 57000, 57002, 'OP_EqHearChainEffectCmd', 617, 1), + (6125, 57000, 57002, 'OP_EqReceiveOfferCmd', 618, 1), + (6126, 57000, 57002, 'OP_EqInspectPCResultsCmd', 619, 1), + (6127, 57000, 57002, 'OP_EqDrawablePathGraphCmd', 620, 1), + (6128, 57000, 57002, 'OP_EqDialogOpenCmd', 621, 1), + (6129, 57000, 57002, 'OP_EqDialogCloseCmd', 622, 1), + (6130, 57000, 57002, 'OP_EqFactionUpdateCmd', 623, 1), + (6131, 57000, 57002, 'OP_EqCollectionUpdateCmd', 624, 1), + (6132, 57000, 57002, 'OP_EqCollectionFilterCmd', 625, 1), + (6133, 57000, 57002, 'OP_EqCollectionItemCmd', 626, 1), + (6134, 57000, 57002, 'OP_EqQuestJournalUpdateCmd', 627, 1), + (6135, 57000, 57002, 'OP_EqMentoring', 628, 1), + (6136, 57000, 57002, 'OP_EqQuestJournalReplyCmd', 629, 1), + (6137, 57000, 57002, 'OP_EqQuestGroupCmd', 630, 1), + (6138, 57000, 57002, 'OP_EqUpdateMerchantCmd', 631, 1), + (6139, 57000, 57002, 'OP_EqUpdateStoreCmd', 632, 1), + (6140, 57000, 57002, 'OP_EqUpdatePlayerTradeCmd', 633, 1), + (6141, 57000, 57002, 'OP_EqHelpPathCmd', 634, 1), + (6142, 57000, 57002, 'OP_EqHelpPathClearCmd', 635, 1), + (6143, 57000, 57002, 'OP_EqUpdateBankCmd', 636, 1), + (6144, 57000, 57002, 'OP_EqExamineInfoCmd', 637, 1), + (6145, 57000, 57002, 'OP_EqCloseWindowCmd', 638, 1), + (6146, 57000, 57002, 'OP_EqUpdateLootCmd', 639, 1), + (6147, 57000, 57002, 'OP_EqJunctionListCmd', 640, 1), + (6148, 57000, 57002, 'OP_EqShowDeathWindowCmd', 641, 1), + (6149, 57000, 57002, 'OP_EqDisplaySpellFailCmd', 642, 1), + (6150, 57000, 57002, 'OP_EqSpellCastStartCmd', 643, 1), + (6151, 57000, 57002, 'OP_EqSpellCastEndCmd', 644, 1), + (6152, 57000, 57002, 'OP_EqResurrectedCmd', 645, 1), + (6153, 57000, 57002, 'OP_EqChoiceWinCmd', 646, 1), + (6154, 57000, 57002, 'OP_EqSetDefaultVerbCmd', 647, 1), + (6155, 57000, 57002, 'OP_EqInstructionWindowCmd', 648, 1), + (6156, 57000, 57002, 'OP_EqInstructionWindowCloseCmd', 649, 1), + (6157, 57000, 57002, 'OP_EqInstructionWindowGoalCmd', 650, 1), + (6158, 57000, 57002, 'OP_EqInstructionWindowTaskCmd', 651, 1), + (6159, 57000, 57002, 'OP_EqEnableGameEventCmd', 652, 1), + (6160, 57000, 57002, 'OP_EqShowWindowCmd', 653, 1), + (6161, 57000, 57002, 'OP_EqEnableWindowCmd', 654, 1), + (6162, 57000, 57002, 'OP_EqFlashWindowCmd', 655, 1), + (6163, 57000, 57002, 'OP_EqHearPlayFlavorCmd', 657, 1), + (6164, 57000, 57002, 'OP_EqUpdateSignWidgetCmd', 658, 1), + (6165, 57000, 57002, 'OP_EqDebugPVDCmd', 659, 1), + (6166, 57000, 57002, 'OP_EqShowBookCmd', 660, 1), + (6167, 57000, 57002, 'OP_EqQuestionnaireCmd', 661, 1), + (6168, 57000, 57002, 'OP_EqGetProbsCmd', 663, 1), + (6169, 57000, 57002, 'OP_EqHearHealCmd', 664, 1), + (6170, 57000, 57002, 'OP_EqChatChannelUpdateCmd', 665, 1), + (6171, 57000, 57002, 'OP_EqWhoChannelQueryReplyCmd', 666, 1), + (6172, 57000, 57002, 'OP_EqAvailWorldChannelsCmd', 667, 1), + (6173, 57000, 57002, 'OP_EqUpdateTargetCmd', 668, 1), + (6174, 57000, 57002, 'OP_BrokerSellList', 669, 1), + (6175, 57000, 57002, 'OP_EqConsignmentItemsCmd', 670, 1), + (6176, 57000, 57002, 'OP_EqStartBrokerCmd', 672, 1), + (6177, 57000, 57002, 'OP_EqMapExplorationCmd', 673, 1), + (6178, 57000, 57002, 'OP_EqStoreLogCmd', 674, 1), + (6179, 57000, 57002, 'OP_EqSpellMoveToRangeAndRetryCmd', 675, 1), + (6180, 57000, 57002, 'OP_EqUpdatePlayerMailCmd', 676, 1), + (6181, 57000, 57002, 'OP_GuildStatusUpdate', 679, 1), + (6182, 57000, 57002, 'OP_EqArenaResultsCmd', 680, 1), + (6183, 57000, 57002, 'OP_EqGuildBankEventActionCmd', 681, 1), + (6184, 57000, 57002, 'OP_EqGuildBankExamineInfoCmd', 682, 1), + (6185, 57000, 57002, 'OP_EqHearSpellNoLandCmd', 683, 1), + (6186, 57000, 57002, 'OP_Lottery', 684, 1), + (6187, 57000, 57002, 'OP_GuildRecruitingMemberInfo', 685, 1), + (6188, 57000, 57002, 'OP_GuildRecruiting', 686, 1), + (6189, 57000, 57002, 'OP_GuildRecruitingDetails', 687, 1), + (6190, 57000, 57002, 'OP_GuildRecruitingImage', 688, 1), + (6191, 57000, 57002, 'OP_TradeskillList', 706, 1), + (6192, 57000, 57002, 'OP_CharRenamed', 690, 1), + (6193, 57000, 57002, 'OP_UseAdornment', 700, 1), + (6194, 57000, 57002, 'OP_ExpPurchWindow', 706, 1), + (6195, 57000, 57002, 'OP_PointOfInterest', 710, 1), + (6196, 57000, 57002, 'OP_PointOfInterest2', 711, 1), + (6197, 57000, 57002, 'OP_TraitsList', 712, 1), + (6198, 57000, 57002, 'OP_CustomizeHouseDisplay', 715, 1), + (6199, 57000, 57002, 'OP_VoiceChatServer', 716, 1), + (6200, 57000, 57002, 'OP_SupplyDepot', 720, 1), + (6201, 57000, 57002, 'OP_EQHearThreatCmd', 721, 1), + (6202, 57000, 57002, 'OP_RecipeList', 722, 1), + (6203, 57000, 57002, 'OP_Research', 723, 1), + (6204, 57000, 57002, 'OP_CharacterCurrency', 724, 1), + (6205, 57000, 57002, 'OP_CharacterAchievements', 725, 1), + (6206, 57000, 57002, 'OP_AchievementUpdateMsg', 726, 1), + (6207, 57000, 57002, 'OP_EQHearDispellCmd', 727, 1), + (6208, 57000, 57002, 'OP_JournalQuestStoryline', 728, 1), + (6209, 57000, 57002, 'OP_DungeonPlayAsAvatarList', 729, 1), + (6210, 57000, 57002, 'OP_DungeonPlayAsAvatarSelected', 730, 1), + (6211, 57000, 57002, 'OP_MercHireWindow', 731, 1), + (6212, 57000, 57002, 'OP_MercUnknown', 732, 1), + (6213, 57000, 57002, 'OP_Unknown', 748, 1), + (6686, 57003, 57014, 'OP_LoginRequestMsg', 0, 1), + (6687, 57003, 57014, 'OP_LoginByNumRequestMsg', 1, 1), + (6688, 57003, 57014, 'OP_WSLoginRequestMsg', 2, 1), + (6689, 57003, 57014, 'OP_ESLoginRequestMsg', 3, 1), + (6690, 57003, 57014, 'OP_LoginReplyMsg', 4, 1), + (6691, 57003, 57014, 'OP_WSStatusReplyMsg', 5, 1), + (6692, 57003, 57014, 'OP_WorldStatusChangeMsg', 6, 1), + (6693, 57003, 57014, 'OP_AllWSDescRequestMsg', 7, 1), + (6694, 57003, 57014, 'OP_WorldListMsg', 8, 1), + (6695, 57003, 57014, 'OP_AllCharactersDescRequestMsg', 9, 1), + (6696, 57003, 57014, 'OP_AllCharactersDescReplyMsg', 10, 1), + (6697, 57003, 57014, 'OP_CreateCharacterRequestMsg', 11, 1), + (6698, 57003, 57014, 'OP_CreateCharacterReplyMsg', 12, 1), + (6699, 57003, 57014, 'OP_WSCreateCharacterRequestMsg', 13, 1), + (6700, 57003, 57014, 'OP_WSCreateCharacterReplyMsg', 14, 1), + (6701, 57003, 57014, 'OP_ReskinCharacterRequestMsg', 15, 1), + (6702, 57003, 57014, 'OP_DeleteCharacterRequestMsg', 16, 1), + (6703, 57003, 57014, 'OP_DeleteCharacterReplyMsg', 17, 1), + (6704, 57003, 57014, 'OP_PlayCharacterRequestMsg', 18, 1), + (6705, 57003, 57014, 'OP_PlayCharacterReplyMsg', 19, 1), + (6706, 57003, 57014, 'OP_ExpectClientAsCharacterReplyMs', 22, 1), + (6707, 57003, 57014, 'OP_ServerPlayCharacterRequestMsg', 23, 1), + (6708, 57003, 57014, 'OP_ServerPlayCharacterReplyMsg', 24, 1), + (6709, 57003, 57014, 'OP_ESInitMsg', 25, 1), + (6710, 57003, 57014, 'OP_ESReadyForClientsMsg', 26, 1), + (6711, 57003, 57014, 'OP_CreateZoneInstanceMsg', 29, 1), + (6712, 57003, 57014, 'OP_ZoneInstanceCreateReplyMsg', 30, 1), + (6713, 57003, 57014, 'OP_ZoneInstanceDestroyedMsg', 31, 1), + (6714, 57003, 57014, 'OP_ExpectClientAsCharacterRequest', 32, 1), + (6715, 57003, 57014, 'OP_ZoneInfoMsg', 33, 1), + (6716, 57003, 57014, 'OP_DoneLoadingZoneResourcesMsg', 34, 1), + (6717, 57003, 57014, 'OP_DoneSendingInitialEntitiesMsg', 35, 1), + (6718, 57003, 57014, 'OP_DoneLoadingEntityResourcesMsg', 36, 1), + (6719, 57003, 57014, 'OP_PredictionUpdateMsg', 37, 1), + (6720, 57003, 57014, 'OP_UpdatePositionMsg', 39, 1), + (6721, 57003, 57014, 'OP_SetRemoteCmdsMsg', 41, 1), + (6722, 57003, 57014, 'OP_RemoteCmdMsg', 42, 1), + (6723, 57003, 57014, 'OP_GameWorldTimeMsg', 43, 1), + (6724, 57003, 57014, 'OP_MOTDMsg', 44, 1), + (6725, 57003, 57014, 'OP_ZoneMOTDMsg', 45, 1), + (6726, 57003, 57014, 'OP_AvatarCreatedMsg', 46, 1), + (6727, 57003, 57014, 'OP_AvatarDestroyedMsg', 47, 1), + (6728, 57003, 57014, 'OP_RequestCampMsg', 50, 1), + (6729, 57003, 57014, 'OP_CampStartedMsg', 51, 1), + (6730, 57003, 57014, 'OP_CampAbortedMsg', 52, 1), + (6731, 57003, 57014, 'OP_WhoQueryRequestMsg', 53, 1), + (6732, 57003, 57014, 'OP_WhoQueryReplyMsg', 54, 1), + (6733, 57003, 57014, 'OP_MonitorReplyMsg', 55, 1), + (6734, 57003, 57014, 'OP_MonitorCharacterListMsg', 56, 1), + (6735, 57003, 57014, 'OP_MonitorCharacterListRequestMsg', 57, 1), + (6736, 57003, 57014, 'OP_ClientCmdMsg', 58, 1), + (6737, 57003, 57014, 'OP_DispatchESMsg', 59, 1), + (6738, 57003, 57014, 'OP_DispatchClientCmdMsg', 60, 1), + (6739, 57003, 57014, 'OP_UpdateTargetMsg', 61, 1), + (6740, 57003, 57014, 'OP_UpdateTargetLocMsg', 62, 1), + (6741, 57003, 57014, 'OP_UpdateCharacterSheetMsg', 63, 1), + (6742, 57003, 57014, 'OP_CharacterPet', 64, 1), + (6743, 57003, 57014, 'OP_CharacterMerc', 65, 1), + (6744, 57003, 57014, 'OP_UpdateSpellBookMsg', 66, 1), + (6745, 57003, 57014, 'OP_UpdateInventoryMsg', 68, 1), + (6746, 57003, 57014, 'OP_AfterInvSpellUpdate', 69, 1), + (6747, 57003, 57014, 'OP_UpdateRecipeBookMsg', 70, 1), + (6748, 57003, 57014, 'OP_RequestRecipeDetailsMsg', 71, 1), + (6749, 57003, 57014, 'OP_RecipeDetailsMsg', 72, 1), + (6750, 57003, 57014, 'OP_UpdateSkillBookMsg', 73, 1), + (6751, 57003, 57014, 'OP_UpdateSkillsMsg', 74, 1), + (6752, 57003, 57014, 'OP_UpdateOpportunityMsg', 75, 1), + (6753, 57003, 57014, 'OP_ChangeZoneMsg', 77, 1), + (6754, 57003, 57014, 'OP_ClientTeleportRequestMsg', 78, 1), + (6755, 57003, 57014, 'OP_TeleportWithinZoneMsg', 79, 1), + (6756, 57003, 57014, 'OP_TeleportWithinZoneNoReloadMsg', 80, 1), + (6757, 57003, 57014, 'OP_MigrateClientToZoneRequestMsg', 81, 1), + (6758, 57003, 57014, 'OP_MigrateClientToZoneReplyMsg', 82, 1), + (6759, 57003, 57014, 'OP_ReadyToZoneMsg', 84, 1), + (6760, 57003, 57014, 'OP_RemoveClientFromGroupMsg', 85, 1), + (6761, 57003, 57014, 'OP_RemoveGroupFromGroupMsg', 86, 1), + (6762, 57003, 57014, 'OP_MakeGroupLeaderMsg', 87, 1), + (6763, 57003, 57014, 'OP_GroupCreatedMsg', 88, 1), + (6764, 57003, 57014, 'OP_GroupDestroyedMsg', 89, 1), + (6765, 57003, 57014, 'OP_GroupMemberAddedMsg', 90, 1), + (6766, 57003, 57014, 'OP_GroupMemberRemovedMsg', 91, 1), + (6767, 57003, 57014, 'OP_GroupRemovedFromGroupMsg', 92, 1), + (6768, 57003, 57014, 'OP_GroupLeaderChangedMsg', 93, 1), + (6769, 57003, 57014, 'OP_GroupResendOOZDataMsg', 94, 1), + (6770, 57003, 57014, 'OP_GroupSettingsChangedMsg', 95, 1), + (6771, 57003, 57014, 'OP_OutOfZoneMemberDataMsg', 96, 1), + (6772, 57003, 57014, 'OP_SendLatestRequestMsg', 97, 1), + (6773, 57003, 57014, 'OP_ClearDataMsg', 98, 1), + (6774, 57003, 57014, 'OP_SetSocialMsg', 99, 1), + (6775, 57003, 57014, 'OP_ESStatusMsg', 100, 1), + (6776, 57003, 57014, 'OP_ESZoneInstanceStatusMsg', 101, 1), + (6777, 57003, 57014, 'OP_ZonesStatusRequestMsg', 102, 1), + (6778, 57003, 57014, 'OP_ZonesStatusMsg', 103, 1), + (6779, 57003, 57014, 'OP_ESWeatherRequestMsg', 104, 1), + (6780, 57003, 57014, 'OP_ESWeatherRequestEndMsg', 105, 1), + (6781, 57003, 57014, 'OP_DialogSelectMsg', 109, 1), + (6782, 57003, 57014, 'OP_DialogCloseMsg', 110, 1), + (6783, 57003, 57014, 'OP_RemoveSpellEffectMsg', 111, 1), + (6784, 57003, 57014, 'OP_RemoveConcentrationMsg', 112, 1), + (6785, 57003, 57014, 'OP_QuestJournalOpenMsg', 113, 1), + (6786, 57003, 57014, 'OP_QuestJournalInspectMsg', 114, 1), + (6787, 57003, 57014, 'OP_QuestJournalSetVisibleMsg', 115, 1), + (6788, 57003, 57014, 'OP_QuestJournalWaypointMsg', 116, 1), + (6789, 57003, 57014, 'OP_CreateGuildRequestMsg', 119, 1), + (6790, 57003, 57014, 'OP_CreateGuildReplyMsg', 120, 1), + (6791, 57003, 57014, 'OP_GuildsayMsg', 121, 1), + (6792, 57003, 57014, 'OP_FellowshipExpMsg', 122, 1), + (6793, 57003, 57014, 'OP_DeleteGuildMsg', 123, 1), + (6794, 57003, 57014, 'OP_GuildUpdateMsg', 124, 1), + (6795, 57003, 57014, 'OP_ConsignmentCloseStoreMsg', 125, 1), + (6796, 57003, 57014, 'OP_ConsignItemRequestMsg', 126, 1), + (6797, 57003, 57014, 'OP_ConsignItemResponseMsg', 127, 1), + (6798, 57003, 57014, 'OP_PurchaseConsignmentRequestMsg', 128, 1), + (6799, 57003, 57014, 'OP_LikeOption', 135, 1), + (6800, 57003, 57014, 'OP_PublishHouse', 138, 1), + (6801, 57003, 57014, 'OP_PlayerMadeInstacnesScreen', 139, 1), + (6802, 57003, 57014, 'OP_PlayerMadeInstances', 140, 1), + (6803, 57003, 57014, 'OP_HouseDeletedRemotelyMsg', 142, 1), + (6804, 57003, 57014, 'OP_UpdateHouseDataMsg', 143, 1), + (6805, 57003, 57014, 'OP_UpdateHouseAccessDataMsg', 144, 1), + (6806, 57003, 57014, 'OP_PlayerHouseBaseScreenMsg', 145, 1), + (6807, 57003, 57014, 'OP_PlayerHousePurchaseScreenMsg', 146, 1), + (6808, 57003, 57014, 'OP_PlayerHouseAccessUpdateMsg', 147, 1), + (6809, 57003, 57014, 'OP_PlayerHouseDisplayStatusMsg', 148, 1), + (6810, 57003, 57014, 'OP_PlayerHouseCloseUIMsg', 149, 1), + (6811, 57003, 57014, 'OP_BuyPlayerHouseMsg', 150, 1), + (6812, 57003, 57014, 'OP_BuyPlayerHouseTintMsg', 151, 1), + (6813, 57003, 57014, 'OP_CollectAllHouseItemsMsg', 152, 1), + (6814, 57003, 57014, 'OP_RelinquishHouseMsg', 153, 1), + (6815, 57003, 57014, 'OP_EnterHouseMsg', 154, 1), + (6816, 57003, 57014, 'OP_ExitHouseMsg', 155, 1), + (6817, 57003, 57014, 'OP_HouseDefaultAccessSetMsg', 156, 1), + (6818, 57003, 57014, 'OP_HouseAccessSetMsg', 157, 1), + (6819, 57003, 57014, 'OP_HouseAccessRemoveMsg', 158, 1), + (6820, 57003, 57014, 'OP_PayHouseUpkeepMsg', 159, 1), + (6821, 57003, 57014, 'OP_MoveableObjectPlacementCriteri', 160, 1), + (6822, 57003, 57014, 'OP_EnterMoveObjectModeMsg', 161, 1), + (6823, 57003, 57014, 'OP_PositionMoveableObject', 162, 1), + (6824, 57003, 57014, 'OP_CancelMoveObjectModeMsg', 163, 1), + (6825, 57003, 57014, 'OP_ShaderCustomizationMsg', 164, 1), + (6826, 57003, 57014, 'OP_ReplaceableSubMeshesMsg', 165, 1), + (6827, 57003, 57014, 'OP_HouseCustomizationScreenMsg', 166, 1), + (6828, 57003, 57014, 'OP_CustomizationPurchaseRequestMs', 167, 1), + (6829, 57003, 57014, 'OP_CustomizationSetRequestMsg', 168, 1), + (6830, 57003, 57014, 'OP_CustomizationReplyMsg', 169, 1), + (6831, 57003, 57014, 'OP_TintWidgetsMsg', 170, 1), + (6832, 57003, 57014, 'OP_ExamineConsignmentRequestMsg', 171, 1), + (6833, 57003, 57014, 'OP_ExamineConsignmentResponseMsg', 172, 1), + (6834, 57003, 57014, 'OP_UISettingsResponseMsg', 173, 1), + (6835, 57003, 57014, 'OP_UIResetMsg', 174, 1), + (6836, 57003, 57014, 'OP_KeymapLoadMsg', 175, 1), + (6837, 57003, 57014, 'OP_KeymapNoneMsg', 176, 1), + (6838, 57003, 57014, 'OP_KeymapDataMsg', 177, 1), + (6839, 57003, 57014, 'OP_KeymapSaveMsg', 178, 1), + (6840, 57003, 57014, 'OP_DispatchSpellCmdMsg', 179, 1), + (6841, 57003, 57014, 'OP_EntityVerbsRequestMsg', 180, 1), + (6842, 57003, 57014, 'OP_EntityVerbsReplyMsg', 181, 1), + (6843, 57003, 57014, 'OP_EntityVerbsVerbMsg', 182, 1), + (6844, 57003, 57014, 'OP_ChatRelationshipUpdateMsg', 184, 1), + (6845, 57003, 57014, 'OP_LootItemsRequestMsg', 185, 1), + (6846, 57003, 57014, 'OP_StoppedLootingMsg', 186, 1), + (6847, 57003, 57014, 'OP_SitMsg', 187, 1), + (6848, 57003, 57014, 'OP_StandMsg', 188, 1), + (6849, 57003, 57014, 'OP_SatMsg', 189, 1), + (6850, 57003, 57014, 'OP_StoodMsg', 190, 1), + (6851, 57003, 57014, 'OP_ClearForTakeOffMsg', 191, 1), + (6852, 57003, 57014, 'OP_ReadyForTakeOffMsg', 192, 1), + (6853, 57003, 57014, 'OP_ShowIllusionsMsg', 193, 1), + (6854, 57003, 57014, 'OP_HideIllusionsMsg', 194, 1), + (6855, 57003, 57014, 'OP_ExamineItemRequestMsg', 195, 1), + (6856, 57003, 57014, 'OP_ReadBookPageMsg', 196, 1), + (6857, 57003, 57014, 'OP_DefaultGroupOptionsRequestMsg', 197, 1), + (6858, 57003, 57014, 'OP_DefaultGroupOptionsMsg', 198, 1), + (6859, 57003, 57014, 'OP_GroupOptionsMsg', 199, 1), + (6860, 57003, 57014, 'OP_DisplayGroupOptionsScreenMsg', 200, 1), + (6861, 57003, 57014, 'OP_PetOptions', 201, 1), + (6862, 57003, 57014, 'OP_DisplayInnVisitScreenMsg', 202, 1), + (6863, 57003, 57014, 'OP_DumpSchedulerMsg', 203, 1), + (6864, 57003, 57014, 'OP_LSCheckAcctLockMsg', 204, 1), + (6865, 57003, 57014, 'OP_WSAcctLockStatusMsg', 205, 1), + (6866, 57003, 57014, 'OP_RequestHelpRepathMsg', 206, 1), + (6867, 57003, 57014, 'OP_RequestTargetLocMsg', 207, 1), + (6868, 57003, 57014, 'OP_UpdateMotdMsg', 208, 1), + (6869, 57003, 57014, 'OP_DestUpdateReq', 210, 1), + (6870, 57003, 57014, 'OP_PerformPlayerKnockbackMsg', 213, 1), + (6871, 57003, 57014, 'OP_PerformCameraShakeMsg', 214, 1), + (6872, 57003, 57014, 'OP_PopulateSkillMapsMsg', 215, 1), + (6873, 57003, 57014, 'OP_CancelledFeignMsg', 216, 1), + (6874, 57003, 57014, 'OP_SysClient', 218, 1), + (6875, 57003, 57014, 'OP_ShowCreateFromRecipeUIMsg', 219, 1), + (6876, 57003, 57014, 'OP_CancelCreateFromRecipeMsg', 220, 1), + (6877, 57003, 57014, 'OP_BeginItemCreationMsg', 221, 1), + (6878, 57003, 57014, 'OP_StopItemCreationMsg', 222, 1), + (6879, 57003, 57014, 'OP_ShowItemCreationProcessUIMsg', 223, 1), + (6880, 57003, 57014, 'OP_UpdateItemCreationProcessUIMsg', 224, 1), + (6881, 57003, 57014, 'OP_DisplayTSEventReactionMsg', 225, 1), + (6882, 57003, 57014, 'OP_ShowRecipeBookMsg', 226, 1), + (6883, 57003, 57014, 'OP_KnowledgebaseRequestMsg', 227, 1), + (6884, 57003, 57014, 'OP_KnowledgebaseResponseMsg', 228, 1), + (6885, 57003, 57014, 'OP_CSTicketHeaderRequestMsg', 229, 1), + (6886, 57003, 57014, 'OP_CSTicketInfoMsg', 230, 1), + (6887, 57003, 57014, 'OP_CSTicketCommentRequestMsg', 231, 1), + (6888, 57003, 57014, 'OP_CSTicketCommentResponseMsg', 232, 1), + (6889, 57003, 57014, 'OP_CSTicketCreateMsg', 233, 1), + (6890, 57003, 57014, 'OP_CSTicketAddCommentMsg', 234, 1), + (6891, 57003, 57014, 'OP_CSTicketDeleteMsg', 235, 1), + (6892, 57003, 57014, 'OP_CSTicketChangeNotificationMsg', 236, 1), + (6893, 57003, 57014, 'OP_WorldDataUpdateMsg', 237, 1), + (6894, 57003, 57014, 'OP_KnownLanguagesMsg', 238, 1), + (6895, 57003, 57014, 'OP_LsRequestClientCrashLogMsg', 239, 1), + (6896, 57003, 57014, 'OP_LsClientBaselogReplyMsg', 240, 1), + (6897, 57003, 57014, 'OP_LsClientCrashlogReplyMsg', 241, 1), + (6898, 57003, 57014, 'OP_LsClientAlertlogReplyMsg', 242, 1), + (6899, 57003, 57014, 'OP_LsClientVerifylogReplyMsg', 243, 1), + (6900, 57003, 57014, 'OP_ClientTeleportToLocationMsg', 244, 1), + (6901, 57003, 57014, 'OP_UpdateClientPredFlagsMsg', 245, 1), + (6902, 57003, 57014, 'OP_ChangeServerControlFlagMsg', 246, 1), + (6903, 57003, 57014, 'OP_CSToolsRequestMsg', 247, 1), + (6904, 57003, 57014, 'OP_CSToolsResponseMsg', 248, 1), + (6905, 57003, 57014, 'OP_AddSocialStructureStandingMsg', 249, 1), + (6906, 57003, 57014, 'OP_CreateBoatTransportsMsg', 250, 1), + (6907, 57003, 57014, 'OP_PositionBoatTransportMsg', 251, 1), + (6908, 57003, 57014, 'OP_MigrateBoatTransportMsg', 252, 1), + (6909, 57003, 57014, 'OP_MigrateBoatTransportReplyMsg', 253, 1), + (6910, 57003, 57014, 'OP_DisplayDebugNLLPointsMsg', 254, 1), + (6911, 57003, 57014, 'OP_ExamineInfoRequestMsg', 255, 1), + (6912, 57003, 57014, 'OP_QuickbarInitMsg', 256, 1), + (6913, 57003, 57014, 'OP_QuickbarUpdateMsg', 257, 1), + (6914, 57003, 57014, 'OP_MacroInitMsg', 258, 1), + (6915, 57003, 57014, 'OP_MacroUpdateMsg', 259, 1), + (6916, 57003, 57014, 'OP_QuestionnaireMsg', 260, 1), + (6917, 57003, 57014, 'OP_LevelChangedMsg', 261, 1), + (6918, 57003, 57014, 'OP_SpellGainedMsg', 262, 1), + (6919, 57003, 57014, 'OP_EncounterBrokenMsg', 263, 1), + (6920, 57003, 57014, 'OP_OnscreenMsgMsg', 264, 1), + (6921, 57003, 57014, 'OP_DisplayWarningMsg', 265, 1), + (6922, 57003, 57014, 'OP_ModifyGuildMsg', 266, 1), + (6923, 57003, 57014, 'OP_GuildEventMsg', 267, 1), + (6924, 57003, 57014, 'OP_GuildEventAddMsg', 268, 1), + (6925, 57003, 57014, 'OP_GuildEventActionMsg', 269, 1), + (6926, 57003, 57014, 'OP_GuildEventListMsg', 270, 1), + (6927, 57003, 57014, 'OP_RequestGuildEventDetailsMsg', 271, 1), + (6928, 57003, 57014, 'OP_GuildEventDetailsMsg', 272, 1), + (6929, 57003, 57014, 'OP_RequestGuildInfoMsg', 273, 1), + (6930, 57003, 57014, 'OP_GuildBankActionMsg', 274, 1), + (6931, 57003, 57014, 'OP_GuildBankActionResponseMsg', 275, 1), + (6932, 57003, 57014, 'OP_GuildBankItemDetailsRequestMsg', 276, 1), + (6933, 57003, 57014, 'OP_GuildBankItemDetailsResponseMs', 277, 1), + (6934, 57003, 57014, 'OP_GuildBankUpdateMsg', 278, 1), + (6935, 57003, 57014, 'OP_GuildBankEventListMsg', 279, 1), + (6936, 57003, 57014, 'OP_RequestGuildBankEventDetailsMs', 280, 1), + (6937, 57003, 57014, 'OP_RewardPackMsg', 281, 1), + (6938, 57003, 57014, 'OP_RenameGuildMsg', 282, 1), + (6939, 57003, 57014, 'OP_ZoneToFriendRequestMsg', 283, 1), + (6940, 57003, 57014, 'OP_ZoneToFriendReplyMsg', 284, 1), + (6941, 57003, 57014, 'OP_ChatCreateChannelMsg', 285, 1), + (6942, 57003, 57014, 'OP_ChatJoinChannelMsg', 286, 1), + (6943, 57003, 57014, 'OP_ChatWhoChannelMsg', 287, 1), + (6944, 57003, 57014, 'OP_ChatLeaveChannelMsg', 288, 1), + (6945, 57003, 57014, 'OP_ChatTellChannelMsg', 289, 1), + (6946, 57003, 57014, 'OP_ChatTellUserMsg', 290, 1), + (6947, 57003, 57014, 'OP_ChatToggleFriendMsg', 291, 1), + (6948, 57003, 57014, 'OP_BrokerAddBag', 292, 1), + (6949, 57003, 57014, 'OP_BrokerRemoveBag', 293, 1), + (6950, 57003, 57014, 'OP_ChatToggleIgnoreMsg', 294, 1), + (6951, 57003, 57014, 'OP_ChatSendFriendsMsg', 295, 1), + (6952, 57003, 57014, 'OP_ChatSendIgnoresMsg', 296, 1), + (6953, 57003, 57014, 'OP_QuestReward', 320, 1), + (6954, 57003, 57014, 'OP_ChatFiltersMsg', 335, 1), + (6955, 57003, 57014, 'OP_MailGetMessageMsg', 338, 1), + (6956, 57003, 57014, 'OP_MailSendMessageMsg', 339, 1), + (6957, 57003, 57014, 'OP_MailDeleteMessageMsg', 340, 1), + (6958, 57003, 57014, 'OP_MailGetHeadersReplyMsg', 341, 1), + (6959, 57003, 57014, 'OP_MailGetMessageReplyMsg', 342, 1), + (6960, 57003, 57014, 'OP_MailSendMessageReplyMsg', 343, 1), + (6961, 57003, 57014, 'OP_MailCommitSendMessageMsg', 344, 1), + (6962, 57003, 57014, 'OP_MailSendSystemMessageMsg', 345, 1), + (6963, 57003, 57014, 'OP_MailRemoveAttachFromMailMsg', 346, 1), + (6964, 57003, 57014, 'OP_WaypointRequestMsg', 348, 1), + (6965, 57003, 57014, 'OP_WaypointReplyMsg', 349, 1), + (6966, 57003, 57014, 'OP_WaypointSelectMsg', 350, 1), + (6967, 57003, 57014, 'OP_WaypointUpdateMsg', 351, 1), + (6968, 57003, 57014, 'OP_CharNameChangedMsg', 352, 1), + (6969, 57003, 57014, 'OP_ShowZoneTeleporterDestinations', 353, 1), + (6970, 57003, 57014, 'OP_SelectZoneTeleporterDestinatio', 354, 1), + (6971, 57003, 57014, 'OP_ReloadLocalizedTxtMsg', 355, 1), + (6972, 57003, 57014, 'OP_RequestGuildMembershipMsg', 356, 1), + (6973, 57003, 57014, 'OP_GuildMembershipResponseMsg', 357, 1), + (6974, 57003, 57014, 'OP_LeaveGuildNotifyMsg', 358, 1), + (6975, 57003, 57014, 'OP_JoinGuildNotifyMsg', 359, 1), + (6976, 57003, 57014, 'OP_AvatarUpdateMsg', 360, 1), + (6977, 57003, 57014, 'OP_BioUpdateMsg', 362, 1), + (6978, 57003, 57014, 'OP_InspectPlayerMsg', 363, 1), + (6979, 57003, 57014, 'OP_WSServerLockMsg', 364, 1), + (6980, 57003, 57014, 'OP_LSServerLockMsg', 365, 1), + (6981, 57003, 57014, 'OP_WSServerHideMsg', 366, 1), + (6982, 57003, 57014, 'OP_CsCategoryRequestMsg', 367, 1), + (6983, 57003, 57014, 'OP_CsCategoryResponseMsg', 368, 1), + (6984, 57003, 57014, 'OP_KnowledgeWindowSlotMappingMsg', 369, 1), + (6985, 57003, 57014, 'OP_AFKUpdateMsg', 370, 1), + (6986, 57003, 57014, 'OP_AnonUpdateMsg', 371, 1), + (6987, 57003, 57014, 'OP_UpdateActivePublicZonesMsg', 372, 1), + (6988, 57003, 57014, 'OP_UnknownNpcMsg', 373, 1), + (6989, 57003, 57014, 'OP_PromoFlagsDetailsMsg', 374, 1), + (6990, 57003, 57014, 'OP_ConsignViewCreateMsg', 375, 1), + (6991, 57003, 57014, 'OP_ConsignViewGetPageMsg', 376, 1), + (6992, 57003, 57014, 'OP_ConsignViewReleaseMsg', 377, 1), + (6993, 57003, 57014, 'OP_ConsignRemoveItemsMsg', 378, 1), + (6994, 57003, 57014, 'OP_UpdateDebugRadiiMsg', 379, 1), + (6995, 57003, 57014, 'OP_ReportMsg', 380, 1), + (6996, 57003, 57014, 'OP_UpdateRaidMsg', 381, 1), + (6997, 57003, 57014, 'OP_ConsignViewSortMsg', 383, 1), + (6998, 57003, 57014, 'OP_TitleUpdateMsg', 384, 1), + (6999, 57003, 57014, 'OP_ClientFellMsg', 385, 1), + (7000, 57003, 57014, 'OP_ClientInDeathRegionMsg', 386, 1), + (7001, 57003, 57014, 'OP_CampClientMsg', 387, 1), + (7002, 57003, 57014, 'OP_CSToolAccessResponseMsg', 388, 1), + (7003, 57003, 57014, 'OP_TrackingUpdateMsg', 389, 1), + (7004, 57003, 57014, 'OP_BeginTrackingMsg', 390, 1), + (7005, 57003, 57014, 'OP_StopTrackingMsg', 391, 1), + (7006, 57003, 57014, 'OP_GetAvatarAccessRequestForCSToo', 393, 1), + (7007, 57003, 57014, 'OP_AdvancementRequestMsg', 394, 1), + (7008, 57003, 57014, 'OP_MapFogDataInitMsg', 395, 1), + (7009, 57003, 57014, 'OP_MapFogDataUpdateMsg', 396, 1), + (7010, 57003, 57014, 'OP_CloseGroupInviteWindowMsg', 397, 1), + (7011, 57003, 57014, 'OP_UpdateGroupMemberDataMsg', 398, 1), + (7012, 57003, 57014, 'OP_WorldPingMsg', 399, 1), + (7013, 57003, 57014, 'OP_MoveLogUpdateMsg', 390, 1), + (7014, 57003, 57014, 'OP_OfferQuestMsg', 401, 1), + (7015, 57003, 57014, 'OP_WorldShutdownUpdateMsg', 403, 1), + (7016, 57003, 57014, 'OP_DisplayMailScreenMsg', 404, 1), + (7017, 57003, 57014, 'OP_ClientIdleBeginMsg', 405, 1), + (7018, 57003, 57014, 'OP_ClientIdleEndMsg', 406, 1), + (7019, 57003, 57014, 'OP_PurchaseConsignmentLoreCheckRe', 407, 1), + (7020, 57003, 57014, 'OP_NotifyApprenticeStoppedMentori', 408, 1), + (7021, 57003, 57014, 'OP_CorruptedClientMsg', 409, 1), + (7022, 57003, 57014, 'OP_WorldDataChangeMsg', 410, 1), + (7023, 57003, 57014, 'OP_MailEventNotificationMsg', 411, 1), + (7024, 57003, 57014, 'OP_RestartZoneMsg', 412, 1), + (7025, 57003, 57014, 'OP_FlightPathsMsg', 413, 1), + (7026, 57003, 57014, 'OP_CharacterLinkdeadMsg', 414, 1), + (7027, 57003, 57014, 'OP_CharTransferStartRequestMsg', 415, 1), + (7028, 57003, 57014, 'OP_CharTransferStartReplyMsg', 416, 1), + (7029, 57003, 57014, 'OP_CharTransferRequestMsg', 417, 1), + (7030, 57003, 57014, 'OP_CharTransferReplyMsg', 418, 1), + (7031, 57003, 57014, 'OP_CharTransferRollbackRequestMsg', 419, 1), + (7032, 57003, 57014, 'OP_CharTransferCommitRequestMsg', 420, 1), + (7033, 57003, 57014, 'OP_CharTransferRollbackReplyMsg', 421, 1), + (7034, 57003, 57014, 'OP_CharTransferCommitReplyMsg', 422, 1), + (7035, 57003, 57014, 'OP_GetCharacterSerializedRequestM', 423, 1), + (7036, 57003, 57014, 'OP_GetCharacterSerializedReplyMsg', 424, 1), + (7037, 57003, 57014, 'OP_CreateCharFromCBBRequestMsg', 425, 1), + (7038, 57003, 57014, 'OP_CreateCharFromCBBReplyMsg', 426, 1), + (7039, 57003, 57014, 'OP_HousingDataChangedMsg', 427, 1), + (7040, 57003, 57014, 'OP_HousingRestoreMsg', 428, 1), + (7041, 57003, 57014, 'OP_AuctionItem', 429, 1), + (7042, 57003, 57014, 'OP_AuctionItemReply', 430, 1), + (7043, 57003, 57014, 'OP_AuctionCoin', 431, 1), + (7044, 57003, 57014, 'OP_AuctionCoinReply', 432, 1), + (7045, 57003, 57014, 'OP_AuctionCharacter', 433, 1), + (7046, 57003, 57014, 'OP_AuctionCharacterReply', 434, 1), + (7047, 57003, 57014, 'OP_AuctionCommitMsg', 435, 1), + (7048, 57003, 57014, 'OP_AuctionAbortMsg', 436, 1), + (7049, 57003, 57014, 'OP_CharTransferValidateRequestMsg', 437, 1), + (7050, 57003, 57014, 'OP_CharTransferValidateReplyMsg', 438, 1), + (7051, 57003, 57014, 'OP_RaceRestrictionMsg', 439, 1), + (7052, 57003, 57014, 'OP_SetInstanceDisplayNameMsg', 440, 1), + (7053, 57003, 57014, 'OP_GetAuctionAssetIDMsg', 441, 1), + (7054, 57003, 57014, 'OP_GetAuctionAssetIDReplyMsg', 442, 1), + (7055, 57003, 57014, 'OP_ResendWorldChannelsMsg', 443, 1), + (7056, 57003, 57014, 'OP_DisplayExchangeScreenMsg', 444, 1), + (7057, 57003, 57014, 'OP_ArenaGameTypesMsg', 445, 1), + (7058, 57003, 57014, 'OP_AuditAuctionEventMsg', 446, 1), + (7059, 57003, 57014, 'OP_InviteRequestMsg', 447, 1), + (7060, 57003, 57014, 'OP_InviteResponseMsg', 448, 1), + (7061, 57003, 57014, 'OP_InviteTargetResponseMsg', 449, 1), + (7062, 57003, 57014, 'OP_InspectPlayerRequestMsg', 450, 1), + (7063, 57003, 57014, 'OP_DispatchMsg', 451, 1), + (7064, 57003, 57014, 'OP_DisplayEventMsg', 452, 1), + (7065, 57003, 57014, 'OP_PrePossessionMsg', 453, 1), + (7066, 57003, 57014, 'OP_PostPossessionMsg', 454, 1), + (7067, 57003, 57014, 'OP_ArenaCreate', 456, 1), + (7068, 57003, 57014, 'OP_ArenaList', 457, 1), + (7069, 57003, 57014, 'OP_ArenaWindow', 465, 1), + (7070, 57003, 57014, 'OP_HouseItemsList', 483, 1), + (7071, 57003, 57014, 'OP_CurrentPet', 485, 1), + (7072, 57003, 57014, 'OP_AdventureList', 488, 1), + (7073, 57003, 57014, 'OP_CancelSpellCast', 489, 1), + (7074, 57003, 57014, 'OP_UpdateTitleCmd', 494, 1), + (7075, 57003, 57014, 'OP_AttackAllowed', 500, 1), + (7076, 57003, 57014, 'OP_AttackNotAllowed', 501, 1), + (7077, 57003, 57014, 'OP_BagOptions', 502, 1), + (7078, 57003, 57014, 'OP_LFGGroupSearch', 504, 1), + (7079, 57003, 57014, 'OP_CharacterHousingList', 507, 1), + (7080, 57003, 57014, 'OP_DressingRoom', 510, 1), + (7081, 57003, 57014, 'OP_PlayLon', 511, 1), + (7082, 57003, 57014, 'OP_SkillInfoRequest', 514, 1), + (7083, 57003, 57014, 'OP_SkillInfoResponse', 515, 1), + (7084, 57003, 57014, 'OP_LFGUpdateMsg', 518, 1), + (7085, 57003, 57014, 'OP_BadLanguageFilter', 519, 1), + (7086, 57003, 57014, 'OP_VoiceChatChannel', 520, 1), + (7087, 57003, 57014, 'OP_MapRequest', 521, 1), + (7088, 57003, 57014, 'OP_MarketFundsUpdate', 526, 1), + (7089, 57003, 57014, 'OP_UIEvent', 527, 1), + (7090, 57003, 57014, 'OP_MarketAddFundsRequest', 528, 1), + (7091, 57003, 57014, 'OP_MarketAddFundsReply', 529, 1), + (7092, 57003, 57014, 'OP_MarketPurchase', 531, 1), + (7093, 57003, 57014, 'OP_MarketPlacePrices', 532, 1), + (7094, 57003, 57014, 'OP_MarketPlaceItems', 535, 1), + (7095, 57003, 57014, 'OP_RecipeBook', 536, 1), + (7096, 57003, 57014, 'OP_CreateCharacterDungeon', 545, 1), + (7097, 57003, 57014, 'OP_DungeonMakerEnter', 546, 1), + (7098, 57003, 57014, 'OP_DungeonMakerItemRequest', 548, 1), + (7099, 57003, 57014, 'OP_CharacterCreatedDungeons', 549, 1), + (7100, 57003, 57014, 'OP_DungeonMakerToolboxList', 550, 1), + (7101, 57003, 57014, 'OP_DungeonMakerUnknown', 551, 1), + (7102, 57003, 57014, 'OP_DungeonMakerUnknown1', 552, 1), + (7103, 57003, 57014, 'OP_PlayerPollPopup', 554, 1), + (7104, 57003, 57014, 'OP_PlayerPollAnswer', 555, 1), + (7105, 57003, 57014, 'OP_MentorPopup', 556, 1), + (7106, 57003, 57014, 'OP_LoadWelcomeWindow', 558, 1), + (7107, 57003, 57014, 'OP_OpenCharCust', 559, 1), + (7108, 57003, 57014, 'OP_SubmitCharCust', 560, 1), + (7109, 57003, 57014, 'OP_QueAllBgSolo', 562, 1), + (7110, 57003, 57014, 'OP_ZoneBgInstanceList', 564, 1), + (7111, 57003, 57014, 'OP_WorldTravelAvail', 568, 1), + (7112, 57003, 57014, 'OP_PaperdollImage', 572, 1), + (7113, 57003, 57014, 'OP_LoadCalendarEvents', 573, 1), + (7114, 57003, 57014, 'OP_VideoUploaded', 574, 1), + (7115, 57003, 57014, 'OP_SavageBarInitMsg', 575, 1), + (7116, 57003, 57014, 'OP_PetOptionsResponse', 576, 1), + (7117, 57003, 57014, 'OP_DungeonMakerItemResponse', 577, 1), + (7118, 57003, 57014, 'OP_CharacterMounts', 579, 1), + (7119, 57003, 57014, 'OP_EqBetaCopyRequest', 589, 1), + (7120, 57003, 57014, 'OP_EqHearChatCmd', 590, 1), + (7121, 57003, 57014, 'OP_EqDisplayTextCmd', 591, 1), + (7122, 57003, 57014, 'OP_EqCreateGhostCmd', 592, 1), + (7123, 57003, 57014, 'OP_EqCreateWidgetCmd', 593, 1), + (7124, 57003, 57014, 'OP_EqCreateSignWidgetCmd', 594, 1), + (7125, 57003, 57014, 'OP_EqDestroyGhostCmd', 595, 1), + (7126, 57003, 57014, 'OP_EqUpdateGhostCmd', 596, 1), + (7127, 57003, 57014, 'OP_EqSetControlGhostCmd', 597, 1), + (7128, 57003, 57014, 'OP_EqSetPOVGhostCmd', 598, 1), + (7129, 57003, 57014, 'OP_EqHearCombatCmd', 599, 1), + (7130, 57003, 57014, 'OP_EqHearSpellCastCmd', 600, 1), + (7131, 57003, 57014, 'OP_EQHearProcCmd', 601, 1), + (7132, 57003, 57014, 'OP_EQHearResEffectCmd', 602, 1), + (7133, 57003, 57014, 'OP_EqHearSpellInterruptCmd', 603, 1), + (7134, 57003, 57014, 'OP_EqHearSpellFizzleCmd', 604, 1), + (7135, 57003, 57014, 'OP_EqHearConsiderCmd', 605, 1), + (7136, 57003, 57014, 'OP_EqUpdateSubClassesCmd', 606, 1), + (7137, 57003, 57014, 'OP_EqCreateListBoxCmd', 607, 1), + (7138, 57003, 57014, 'OP_EqSetDebugPathPointsCmd', 608, 1), + (7139, 57003, 57014, 'OP_EqCannedEmoteCmd', 610, 1), + (7140, 57003, 57014, 'OP_EqStateCmd', 611, 1), + (7141, 57003, 57014, 'OP_EqPlaySoundCmd', 612, 1), + (7142, 57003, 57014, 'OP_EqPlaySound3DCmd', 613, 1), + (7143, 57003, 57014, 'OP_EqPlayVoiceCmd', 614, 1), + (7144, 57003, 57014, 'OP_EqHearDrowningCmd', 615, 1), + (7145, 57003, 57014, 'OP_EqHearDeathCmd', 616, 1), + (7146, 57003, 57014, 'OP_EqGroupMemberRemovedCmd', 617, 1), + (7147, 57003, 57014, 'OP_EqHearChainEffectCmd', 618, 1), + (7148, 57003, 57014, 'OP_EqReceiveOfferCmd', 619, 1), + (7149, 57003, 57014, 'OP_EqInspectPCResultsCmd', 620, 1), + (7150, 57003, 57014, 'OP_EqDrawablePathGraphCmd', 621, 1), + (7151, 57003, 57014, 'OP_EqDialogOpenCmd', 622, 1), + (7152, 57003, 57014, 'OP_EqDialogCloseCmd', 623, 1), + (7153, 57003, 57014, 'OP_EqFactionUpdateCmd', 624, 1), + (7154, 57003, 57014, 'OP_EqCollectionUpdateCmd', 625, 1), + (7155, 57003, 57014, 'OP_EqCollectionFilterCmd', 626, 1), + (7156, 57003, 57014, 'OP_EqCollectionItemCmd', 627, 1), + (7157, 57003, 57014, 'OP_EqQuestJournalUpdateCmd', 628, 1), + (7158, 57003, 57014, 'OP_EqMentoring', 629, 1), + (7159, 57003, 57014, 'OP_EqQuestJournalReplyCmd', 630, 1), + (7160, 57003, 57014, 'OP_EqQuestGroupCmd', 631, 1), + (7161, 57003, 57014, 'OP_EqUpdateMerchantCmd', 632, 1), + (7162, 57003, 57014, 'OP_EqUpdateStoreCmd', 633, 1), + (7163, 57003, 57014, 'OP_EqUpdatePlayerTradeCmd', 634, 1), + (7164, 57003, 57014, 'OP_EqHelpPathCmd', 635, 1), + (7165, 57003, 57014, 'OP_EqHelpPathClearCmd', 636, 1), + (7166, 57003, 57014, 'OP_EqUpdateBankCmd', 637, 1), + (7167, 57003, 57014, 'OP_EqExamineInfoCmd', 638, 1), + (7168, 57003, 57014, 'OP_EqCloseWindowCmd', 639, 1), + (7169, 57003, 57014, 'OP_EqUpdateLootCmd', 640, 1), + (7170, 57003, 57014, 'OP_EqJunctionListCmd', 641, 1), + (7171, 57003, 57014, 'OP_EqShowDeathWindowCmd', 642, 1), + (7172, 57003, 57014, 'OP_EqDisplaySpellFailCmd', 643, 1), + (7173, 57003, 57014, 'OP_EqSpellCastStartCmd', 644, 1), + (7174, 57003, 57014, 'OP_EqSpellCastEndCmd', 645, 1), + (7175, 57003, 57014, 'OP_EqResurrectedCmd', 646, 1), + (7176, 57003, 57014, 'OP_EqChoiceWinCmd', 647, 1), + (7177, 57003, 57014, 'OP_EqSetDefaultVerbCmd', 648, 1), + (7178, 57003, 57014, 'OP_EqInstructionWindowCmd', 649, 1), + (7179, 57003, 57014, 'OP_EqInstructionWindowCloseCmd', 650, 1), + (7180, 57003, 57014, 'OP_EqInstructionWindowGoalCmd', 651, 1), + (7181, 57003, 57014, 'OP_EqInstructionWindowTaskCmd', 652, 1), + (7182, 57003, 57014, 'OP_EqEnableGameEventCmd', 653, 1), + (7183, 57003, 57014, 'OP_EqShowWindowCmd', 654, 1), + (7184, 57003, 57014, 'OP_EqEnableWindowCmd', 655, 1), + (7185, 57003, 57014, 'OP_EqFlashWindowCmd', 656, 1), + (7186, 57003, 57014, 'OP_EqHearPlayFlavorCmd', 658, 1), + (7187, 57003, 57014, 'OP_EqUpdateSignWidgetCmd', 659, 1), + (7188, 57003, 57014, 'OP_EqDebugPVDCmd', 660, 1), + (7189, 57003, 57014, 'OP_EqShowBookCmd', 661, 1), + (7190, 57003, 57014, 'OP_EqQuestionnaireCmd', 662, 1), + (7191, 57003, 57014, 'OP_EqGetProbsCmd', 664, 1), + (7192, 57003, 57014, 'OP_EqHearHealCmd', 665, 1), + (7193, 57003, 57014, 'OP_EqChatChannelUpdateCmd', 666, 1), + (7194, 57003, 57014, 'OP_EqWhoChannelQueryReplyCmd', 667, 1), + (7195, 57003, 57014, 'OP_EqAvailWorldChannelsCmd', 668, 1), + (7196, 57003, 57014, 'OP_EqUpdateTargetCmd', 669, 1), + (7197, 57003, 57014, 'OP_BrokerSellList', 670, 1), + (7198, 57003, 57014, 'OP_EqConsignmentItemsCmd', 671, 1), + (7199, 57003, 57014, 'OP_EqStartBrokerCmd', 673, 1), + (7200, 57003, 57014, 'OP_EqMapExplorationCmd', 674, 1), + (7201, 57003, 57014, 'OP_EqStoreLogCmd', 675, 1), + (7202, 57003, 57014, 'OP_EqSpellMoveToRangeAndRetryCmd', 676, 1), + (7203, 57003, 57014, 'OP_EqUpdatePlayerMailCmd', 677, 1), + (7204, 57003, 57014, 'OP_GuildStatusUpdate', 680, 1), + (7205, 57003, 57014, 'OP_EqArenaResultsCmd', 681, 1), + (7206, 57003, 57014, 'OP_EqGuildBankEventActionCmd', 682, 1), + (7207, 57003, 57014, 'OP_EqGuildBankExamineInfoCmd', 683, 1), + (7208, 57003, 57014, 'OP_EqHearSpellNoLandCmd', 684, 1), + (7209, 57003, 57014, 'OP_Lottery', 685, 1), + (7210, 57003, 57014, 'OP_GuildRecruitingMemberInfo', 686, 1), + (7211, 57003, 57014, 'OP_GuildRecruiting', 687, 1), + (7212, 57003, 57014, 'OP_GuildRecruitingDetails', 688, 1), + (7213, 57003, 57014, 'OP_GuildRecruitingImage', 689, 1), + (7214, 57003, 57014, 'OP_TradeskillList', 707, 1), + (7215, 57003, 57014, 'OP_CharRenamed', 691, 1), + (7216, 57003, 57014, 'OP_UseAdornment', 701, 1), + (7217, 57003, 57014, 'OP_ExpPurchWindow', 707, 1), + (7218, 57003, 57014, 'OP_PointOfInterest', 711, 1), + (7219, 57003, 57014, 'OP_PointOfInterest2', 712, 1), + (7220, 57003, 57014, 'OP_TraitsList', 713, 1), + (7221, 57003, 57014, 'OP_CustomizeHouseDisplay', 716, 1), + (7222, 57003, 57014, 'OP_VoiceChatServer', 717, 1), + (7223, 57003, 57014, 'OP_SupplyDepot', 721, 1), + (7224, 57003, 57014, 'OP_EQHearThreatCmd', 722, 1), + (7225, 57003, 57014, 'OP_RecipeList', 723, 1), + (7226, 57003, 57014, 'OP_Research', 724, 1), + (7227, 57003, 57014, 'OP_CharacterCurrency', 725, 1), + (7228, 57003, 57014, 'OP_CharacterAchievements', 726, 1), + (7229, 57003, 57014, 'OP_AchievementUpdateMsg', 727, 1), + (7230, 57003, 57014, 'OP_EQHearDispellCmd', 728, 1), + (7231, 57003, 57014, 'OP_JournalQuestStoryline', 729, 1), + (7232, 57003, 57014, 'OP_DungeonPlayAsAvatarList', 730, 1), + (7233, 57003, 57014, 'OP_DungeonPlayAsAvatarSelected', 731, 1), + (7234, 57003, 57014, 'OP_MercHireWindow', 732, 1), + (7235, 57003, 57014, 'OP_MercUnknown', 733, 1), + (7236, 57003, 57014, 'OP_Unknown', 749, 1), + (7709, 57003, 57014, 'OP_ClearForLandingMsg', 491, 1), + (7710, 57003, 57014, 'OP_Launchpad', 570, 1), + (7711, 57003, 57014, 'OP_ReceipelistUnknown', 588, 1), + (7712, 57032, 57047, 'OP_LoginRequestMsg', 0, 1), + (7713, 57032, 57047, 'OP_LoginByNumRequestMsg', 1, 1), + (7714, 57032, 57047, 'OP_WSLoginRequestMsg', 2, 1), + (7715, 57032, 57047, 'OP_ESLoginRequestMsg', 3, 1), + (7716, 57032, 57047, 'OP_LoginReplyMsg', 4, 1), + (7717, 57032, 57047, 'OP_WSStatusReplyMsg', 5, 1), + (7718, 57032, 57047, 'OP_WorldStatusChangeMsg', 6, 1), + (7719, 57032, 57047, 'OP_AllWSDescRequestMsg', 7, 1), + (7720, 57032, 57047, 'OP_WorldListMsg', 8, 1), + (7721, 57032, 57047, 'OP_AllCharactersDescRequestMsg', 9, 1), + (7722, 57032, 57047, 'OP_AllCharactersDescReplyMsg', 10, 1), + (7723, 57032, 57047, 'OP_CreateCharacterRequestMsg', 11, 1), + (7724, 57032, 57047, 'OP_CreateCharacterReplyMsg', 12, 1), + (7725, 57032, 57047, 'OP_WSCreateCharacterRequestMsg', 13, 1), + (7726, 57032, 57047, 'OP_WSCreateCharacterReplyMsg', 14, 1), + (7727, 57032, 57047, 'OP_ReskinCharacterRequestMsg', 15, 1), + (7728, 57032, 57047, 'OP_DeleteCharacterRequestMsg', 16, 1), + (7729, 57032, 57047, 'OP_DeleteCharacterReplyMsg', 17, 1), + (7730, 57032, 57047, 'OP_PlayCharacterRequestMsg', 18, 1), + (7731, 57032, 57047, 'OP_PlayCharacterReplyMsg', 19, 1), + (7732, 57032, 57047, 'OP_ExpectClientAsCharacterReplyMs', 22, 1), + (7733, 57032, 57047, 'OP_ServerPlayCharacterRequestMsg', 23, 1), + (7734, 57032, 57047, 'OP_ServerPlayCharacterReplyMsg', 24, 1), + (7735, 57032, 57047, 'OP_ESInitMsg', 25, 1), + (7736, 57032, 57047, 'OP_ESReadyForClientsMsg', 26, 1), + (7737, 57032, 57047, 'OP_CreateZoneInstanceMsg', 29, 1), + (7738, 57032, 57047, 'OP_ZoneInstanceCreateReplyMsg', 30, 1), + (7739, 57032, 57047, 'OP_ZoneInstanceDestroyedMsg', 31, 1), + (7740, 57032, 57047, 'OP_ExpectClientAsCharacterRequest', 32, 1), + (7741, 57032, 57047, 'OP_ZoneInfoMsg', 33, 1), + (7742, 57032, 57047, 'OP_DoneLoadingZoneResourcesMsg', 34, 1), + (7743, 57032, 57047, 'OP_DoneSendingInitialEntitiesMsg', 35, 1), + (7744, 57032, 57047, 'OP_DoneLoadingEntityResourcesMsg', 36, 1), + (7745, 57032, 57047, 'OP_PredictionUpdateMsg', 37, 1), + (7746, 57032, 57047, 'OP_UpdatePositionMsg', 39, 1), + (7747, 57032, 57047, 'OP_SetRemoteCmdsMsg', 41, 1), + (7748, 57032, 57047, 'OP_RemoteCmdMsg', 42, 1), + (7749, 57032, 57047, 'OP_GameWorldTimeMsg', 43, 1), + (7750, 57032, 57047, 'OP_MOTDMsg', 44, 1), + (7751, 57032, 57047, 'OP_ZoneMOTDMsg', 45, 1), + (7752, 57032, 57047, 'OP_AvatarCreatedMsg', 46, 1), + (7753, 57032, 57047, 'OP_AvatarDestroyedMsg', 47, 1), + (7754, 57032, 57047, 'OP_RequestCampMsg', 50, 1), + (7755, 57032, 57047, 'OP_CampStartedMsg', 51, 1), + (7756, 57032, 57047, 'OP_CampAbortedMsg', 52, 1), + (7757, 57032, 57047, 'OP_WhoQueryRequestMsg', 53, 1), + (7758, 57032, 57047, 'OP_WhoQueryReplyMsg', 54, 1), + (7759, 57032, 57047, 'OP_MonitorReplyMsg', 55, 1), + (7760, 57032, 57047, 'OP_MonitorCharacterListMsg', 56, 1), + (7761, 57032, 57047, 'OP_MonitorCharacterListRequestMsg', 57, 1), + (7762, 57032, 57047, 'OP_ClientCmdMsg', 58, 1), + (7763, 57032, 57047, 'OP_DispatchESMsg', 59, 1), + (7764, 57032, 57047, 'OP_DispatchClientCmdMsg', 60, 1), + (7765, 57032, 57047, 'OP_UpdateTargetMsg', 61, 1), + (7766, 57032, 57047, 'OP_UpdateTargetLocMsg', 62, 1), + (7767, 57032, 57047, 'OP_UpdateCharacterSheetMsg', 63, 1), + (7768, 57032, 57047, 'OP_CharacterPet', 64, 1), + (7769, 57032, 57047, 'OP_CharacterMerc', 65, 1), + (7770, 57032, 57047, 'OP_UpdateSpellBookMsg', 66, 1), + (7771, 57032, 57047, 'OP_UpdateInventoryMsg', 68, 1), + (7772, 57032, 57047, 'OP_AfterInvSpellUpdate', 69, 1), + (7773, 57032, 57047, 'OP_UpdateRecipeBookMsg', 70, 1), + (7774, 57032, 57047, 'OP_RequestRecipeDetailsMsg', 71, 1), + (7775, 57032, 57047, 'OP_RecipeDetailsMsg', 72, 1), + (7776, 57032, 57047, 'OP_UpdateSkillBookMsg', 73, 1), + (7777, 57032, 57047, 'OP_UpdateSkillsMsg', 74, 1), + (7778, 57032, 57047, 'OP_UpdateOpportunityMsg', 75, 1), + (7779, 57032, 57047, 'OP_ChangeZoneMsg', 77, 1), + (7780, 57032, 57047, 'OP_ClientTeleportRequestMsg', 78, 1), + (7781, 57032, 57047, 'OP_TeleportWithinZoneMsg', 79, 1), + (7782, 57032, 57047, 'OP_TeleportWithinZoneNoReloadMsg', 80, 1), + (7783, 57032, 57047, 'OP_MigrateClientToZoneRequestMsg', 81, 1), + (7784, 57032, 57047, 'OP_MigrateClientToZoneReplyMsg', 82, 1), + (7785, 57032, 57047, 'OP_ReadyToZoneMsg', 84, 1), + (7786, 57032, 57047, 'OP_RemoveClientFromGroupMsg', 85, 1), + (7787, 57032, 57047, 'OP_RemoveGroupFromGroupMsg', 86, 1), + (7788, 57032, 57047, 'OP_MakeGroupLeaderMsg', 87, 1), + (7789, 57032, 57047, 'OP_GroupCreatedMsg', 88, 1), + (7790, 57032, 57047, 'OP_GroupDestroyedMsg', 89, 1), + (7791, 57032, 57047, 'OP_GroupMemberAddedMsg', 90, 1), + (7792, 57032, 57047, 'OP_GroupMemberRemovedMsg', 91, 1), + (7793, 57032, 57047, 'OP_GroupRemovedFromGroupMsg', 92, 1), + (7794, 57032, 57047, 'OP_GroupLeaderChangedMsg', 93, 1), + (7795, 57032, 57047, 'OP_GroupResendOOZDataMsg', 94, 1), + (7796, 57032, 57047, 'OP_GroupSettingsChangedMsg', 95, 1), + (7797, 57032, 57047, 'OP_OutOfZoneMemberDataMsg', 96, 1), + (7798, 57032, 57047, 'OP_SendLatestRequestMsg', 97, 1), + (7799, 57032, 57047, 'OP_ClearDataMsg', 98, 1), + (7800, 57032, 57047, 'OP_SetSocialMsg', 99, 1), + (7801, 57032, 57047, 'OP_ESStatusMsg', 100, 1), + (7802, 57032, 57047, 'OP_ESZoneInstanceStatusMsg', 101, 1), + (7803, 57032, 57047, 'OP_ZonesStatusRequestMsg', 102, 1), + (7804, 57032, 57047, 'OP_ZonesStatusMsg', 103, 1), + (7805, 57032, 57047, 'OP_ESWeatherRequestMsg', 104, 1), + (7806, 57032, 57047, 'OP_ESWeatherRequestEndMsg', 105, 1), + (7807, 57032, 57047, 'OP_DialogSelectMsg', 109, 1), + (7808, 57032, 57047, 'OP_DialogCloseMsg', 110, 1), + (7809, 57032, 57047, 'OP_RemoveSpellEffectMsg', 111, 1), + (7810, 57032, 57047, 'OP_RemoveConcentrationMsg', 112, 1), + (7811, 57032, 57047, 'OP_QuestJournalOpenMsg', 113, 1), + (7812, 57032, 57047, 'OP_QuestJournalInspectMsg', 114, 1), + (7813, 57032, 57047, 'OP_QuestJournalSetVisibleMsg', 115, 1), + (7814, 57032, 57047, 'OP_QuestJournalWaypointMsg', 116, 1), + (7815, 57032, 57047, 'OP_CreateGuildRequestMsg', 119, 1), + (7816, 57032, 57047, 'OP_CreateGuildReplyMsg', 120, 1), + (7817, 57032, 57047, 'OP_GuildsayMsg', 121, 1), + (7818, 57032, 57047, 'OP_FellowshipExpMsg', 122, 1), + (7819, 57032, 57047, 'OP_DeleteGuildMsg', 123, 1), + (7820, 57032, 57047, 'OP_GuildUpdateMsg', 124, 1), + (7821, 57032, 57047, 'OP_ConsignmentCloseStoreMsg', 125, 1), + (7822, 57032, 57047, 'OP_ConsignItemRequestMsg', 126, 1), + (7823, 57032, 57047, 'OP_ConsignItemResponseMsg', 127, 1), + (7824, 57032, 57047, 'OP_PurchaseConsignmentRequestMsg', 128, 1), + (7825, 57032, 57047, 'OP_LikeOption', 136, 1), + (7826, 57032, 57047, 'OP_PublishHouse', 138, 1), + (7827, 57032, 57047, 'OP_PlayerMadeInstancesScreen', 139, 1), + (7828, 57032, 57047, 'OP_PlayerMadeInstances', 140, 1), + (7829, 57032, 57047, 'OP_HouseDeletedRemotelyMsg', 142, 1), + (7830, 57032, 57047, 'OP_UpdateHouseDataMsg', 143, 1), + (7831, 57032, 57047, 'OP_UpdateHouseAccessDataMsg', 144, 1), + (7832, 57032, 57047, 'OP_PlayerHouseBaseScreenMsg', 145, 1), + (7833, 57032, 57047, 'OP_PlayerHousePurchaseScreenMsg', 146, 1), + (7834, 57032, 57047, 'OP_PlayerHouseAccessUpdateMsg', 147, 1), + (7835, 57032, 57047, 'OP_PlayerHouseDisplayStatusMsg', 148, 1), + (7836, 57032, 57047, 'OP_PlayerHouseCloseUIMsg', 149, 1), + (7837, 57032, 57047, 'OP_BuyPlayerHouseMsg', 150, 1), + (7838, 57032, 57047, 'OP_BuyPlayerHouseTintMsg', 151, 1), + (7839, 57032, 57047, 'OP_CollectAllHouseItemsMsg', 152, 1), + (7840, 57032, 57047, 'OP_RelinquishHouseMsg', 153, 1), + (7841, 57032, 57047, 'OP_EnterHouseMsg', 154, 1), + (7842, 57032, 57047, 'OP_ExitHouseMsg', 155, 1), + (7843, 57032, 57047, 'OP_HouseDefaultAccessSetMsg', 156, 1), + (7844, 57032, 57047, 'OP_HouseAccessSetMsg', 157, 1), + (7845, 57032, 57047, 'OP_HouseAccessRemoveMsg', 158, 1), + (7846, 57032, 57047, 'OP_PayHouseUpkeepMsg', 159, 1), + (7847, 57032, 57047, 'OP_MoveableObjectPlacementCriteri', 160, 1), + (7848, 57032, 57047, 'OP_EnterMoveObjectModeMsg', 161, 1), + (7849, 57032, 57047, 'OP_PositionMoveableObject', 162, 1), + (7850, 57032, 57047, 'OP_CancelMoveObjectModeMsg', 163, 1), + (7851, 57032, 57047, 'OP_ShaderCustomizationMsg', 164, 1), + (7852, 57032, 57047, 'OP_ReplaceableSubMeshesMsg', 165, 1), + (7853, 57032, 57047, 'OP_HouseCustomizationScreenMsg', 166, 1), + (7854, 57032, 57047, 'OP_CustomizationPurchaseRequestMs', 167, 1), + (7855, 57032, 57047, 'OP_CustomizationSetRequestMsg', 168, 1), + (7856, 57032, 57047, 'OP_CustomizationReplyMsg', 169, 1), + (7857, 57032, 57047, 'OP_TintWidgetsMsg', 170, 1), + (7858, 57032, 57047, 'OP_ExamineConsignmentRequestMsg', 171, 1), + (7859, 57032, 57047, 'OP_ExamineConsignmentResponseMsg', 172, 1), + (7860, 57032, 57047, 'OP_UISettingsResponseMsg', 173, 1), + (7861, 57032, 57047, 'OP_UIResetMsg', 174, 1), + (7862, 57032, 57047, 'OP_KeymapLoadMsg', 175, 1), + (7863, 57032, 57047, 'OP_KeymapNoneMsg', 176, 1), + (7864, 57032, 57047, 'OP_KeymapDataMsg', 177, 1), + (7865, 57032, 57047, 'OP_KeymapSaveMsg', 178, 1), + (7866, 57032, 57047, 'OP_DispatchSpellCmdMsg', 179, 1), + (7867, 57032, 57047, 'OP_EntityVerbsRequestMsg', 180, 1), + (7868, 57032, 57047, 'OP_EntityVerbsReplyMsg', 181, 1), + (7869, 57032, 57047, 'OP_EntityVerbsVerbMsg', 182, 1), + (7870, 57032, 57047, 'OP_ChatRelationshipUpdateMsg', 184, 1), + (7871, 57032, 57047, 'OP_LootItemsRequestMsg', 185, 1), + (7872, 57032, 57047, 'OP_StoppedLootingMsg', 186, 1), + (7873, 57032, 57047, 'OP_SitMsg', 187, 1), + (7874, 57032, 57047, 'OP_StandMsg', 188, 1), + (7875, 57032, 57047, 'OP_SatMsg', 189, 1), + (7876, 57032, 57047, 'OP_StoodMsg', 190, 1), + (7877, 57032, 57047, 'OP_ClearForTakeOffMsg', 191, 1), + (7878, 57032, 57047, 'OP_ReadyForTakeOffMsg', 192, 1), + (7879, 57032, 57047, 'OP_ShowIllusionsMsg', 193, 1), + (7880, 57032, 57047, 'OP_HideIllusionsMsg', 194, 1), + (7881, 57032, 57047, 'OP_ExamineItemRequestMsg', 195, 1), + (7882, 57032, 57047, 'OP_ReadBookPageMsg', 196, 1), + (7883, 57032, 57047, 'OP_DefaultGroupOptionsRequestMsg', 197, 1), + (7884, 57032, 57047, 'OP_DefaultGroupOptionsMsg', 198, 1), + (7885, 57032, 57047, 'OP_GroupOptionsMsg', 199, 1), + (7886, 57032, 57047, 'OP_DisplayGroupOptionsScreenMsg', 200, 1), + (7887, 57032, 57047, 'OP_PetOptions', 201, 1), + (7888, 57032, 57047, 'OP_DisplayInnVisitScreenMsg', 202, 1), + (7889, 57032, 57047, 'OP_DumpSchedulerMsg', 203, 1), + (7890, 57032, 57047, 'OP_LSCheckAcctLockMsg', 204, 1), + (7891, 57032, 57047, 'OP_WSAcctLockStatusMsg', 205, 1), + (7892, 57032, 57047, 'OP_RequestHelpRepathMsg', 206, 1), + (7893, 57032, 57047, 'OP_RequestTargetLocMsg', 207, 1), + (7894, 57032, 57047, 'OP_UpdateMotdMsg', 208, 1), + (7895, 57032, 57047, 'OP_DestUpdateReq', 210, 1), + (7896, 57032, 57047, 'OP_PerformPlayerKnockbackMsg', 213, 1), + (7897, 57032, 57047, 'OP_PerformCameraShakeMsg', 214, 1), + (7898, 57032, 57047, 'OP_PopulateSkillMapsMsg', 215, 1), + (7899, 57032, 57047, 'OP_CancelledFeignMsg', 216, 1), + (7900, 57032, 57047, 'OP_SysClient', 218, 1), + (7901, 57032, 57047, 'OP_ShowCreateFromRecipeUIMsg', 219, 1), + (7902, 57032, 57047, 'OP_CancelCreateFromRecipeMsg', 220, 1), + (7903, 57032, 57047, 'OP_BeginItemCreationMsg', 221, 1), + (7904, 57032, 57047, 'OP_StopItemCreationMsg', 222, 1), + (7905, 57032, 57047, 'OP_ShowItemCreationProcessUIMsg', 223, 1), + (7906, 57032, 57047, 'OP_UpdateItemCreationProcessUIMsg', 224, 1), + (7907, 57032, 57047, 'OP_DisplayTSEventReactionMsg', 225, 1), + (7908, 57032, 57047, 'OP_ShowRecipeBookMsg', 226, 1), + (7909, 57032, 57047, 'OP_KnowledgebaseRequestMsg', 227, 1), + (7910, 57032, 57047, 'OP_KnowledgebaseResponseMsg', 228, 1), + (7911, 57032, 57047, 'OP_CSTicketHeaderRequestMsg', 229, 1), + (7912, 57032, 57047, 'OP_CSTicketInfoMsg', 230, 1), + (7913, 57032, 57047, 'OP_CSTicketCommentRequestMsg', 231, 1), + (7914, 57032, 57047, 'OP_CSTicketCommentResponseMsg', 232, 1), + (7915, 57032, 57047, 'OP_CSTicketCreateMsg', 233, 1), + (7916, 57032, 57047, 'OP_CSTicketAddCommentMsg', 234, 1), + (7917, 57032, 57047, 'OP_CSTicketDeleteMsg', 235, 1), + (7918, 57032, 57047, 'OP_CSTicketChangeNotificationMsg', 236, 1), + (7919, 57032, 57047, 'OP_WorldDataUpdateMsg', 237, 1), + (7920, 57032, 57047, 'OP_KnownLanguagesMsg', 238, 1), + (7921, 57032, 57047, 'OP_LsRequestClientCrashLogMsg', 239, 1), + (7922, 57032, 57047, 'OP_LsClientBaselogReplyMsg', 240, 1), + (7923, 57032, 57047, 'OP_LsClientCrashlogReplyMsg', 241, 1), + (7924, 57032, 57047, 'OP_LsClientAlertlogReplyMsg', 242, 1), + (7925, 57032, 57047, 'OP_LsClientVerifylogReplyMsg', 243, 1), + (7926, 57032, 57047, 'OP_ClientTeleportToLocationMsg', 244, 1), + (7927, 57032, 57047, 'OP_UpdateClientPredFlagsMsg', 245, 1), + (7928, 57032, 57047, 'OP_ChangeServerControlFlagMsg', 246, 1), + (7929, 57032, 57047, 'OP_CSToolsRequestMsg', 247, 1), + (7930, 57032, 57047, 'OP_CSToolsResponseMsg', 248, 1), + (7931, 57032, 57047, 'OP_AddSocialStructureStandingMsg', 249, 1), + (7932, 57032, 57047, 'OP_CreateBoatTransportsMsg', 250, 1), + (7933, 57032, 57047, 'OP_PositionBoatTransportMsg', 251, 1), + (7934, 57032, 57047, 'OP_MigrateBoatTransportMsg', 252, 1), + (7935, 57032, 57047, 'OP_MigrateBoatTransportReplyMsg', 253, 1), + (7936, 57032, 57047, 'OP_DisplayDebugNLLPointsMsg', 254, 1), + (7937, 57032, 57047, 'OP_ExamineInfoRequestMsg', 255, 1), + (7938, 57032, 57047, 'OP_QuickbarInitMsg', 256, 1), + (7939, 57032, 57047, 'OP_QuickbarUpdateMsg', 257, 1), + (7940, 57032, 57047, 'OP_MacroInitMsg', 258, 1), + (7941, 57032, 57047, 'OP_MacroUpdateMsg', 259, 1), + (7942, 57032, 57047, 'OP_QuestionnaireMsg', 260, 1), + (7943, 57032, 57047, 'OP_LevelChangedMsg', 261, 1), + (7944, 57032, 57047, 'OP_SpellGainedMsg', 262, 1), + (7945, 57032, 57047, 'OP_EncounterBrokenMsg', 263, 1), + (7946, 57032, 57047, 'OP_OnscreenMsgMsg', 264, 1), + (7947, 57032, 57047, 'OP_DisplayWarningMsg', 265, 1), + (7948, 57032, 57047, 'OP_ModifyGuildMsg', 266, 1), + (7949, 57032, 57047, 'OP_GuildEventMsg', 267, 1), + (7950, 57032, 57047, 'OP_GuildEventAddMsg', 268, 1), + (7951, 57032, 57047, 'OP_GuildEventActionMsg', 269, 1), + (7952, 57032, 57047, 'OP_GuildEventListMsg', 270, 1), + (7953, 57032, 57047, 'OP_RequestGuildEventDetailsMsg', 271, 1), + (7954, 57032, 57047, 'OP_GuildEventDetailsMsg', 272, 1), + (7955, 57032, 57047, 'OP_RequestGuildInfoMsg', 273, 1), + (7956, 57032, 57047, 'OP_GuildBankActionMsg', 274, 1), + (7957, 57032, 57047, 'OP_GuildBankActionResponseMsg', 275, 1), + (7958, 57032, 57047, 'OP_GuildBankItemDetailsRequestMsg', 276, 1), + (7959, 57032, 57047, 'OP_GuildBankItemDetailsResponseMs', 277, 1), + (7960, 57032, 57047, 'OP_GuildBankUpdateMsg', 278, 1), + (7961, 57032, 57047, 'OP_GuildBankEventListMsg', 279, 1), + (7962, 57032, 57047, 'OP_RequestGuildBankEventDetailsMs', 280, 1), + (7963, 57032, 57047, 'OP_RewardPackMsg', 281, 1), + (7964, 57032, 57047, 'OP_RenameGuildMsg', 282, 1), + (7965, 57032, 57047, 'OP_ZoneToFriendRequestMsg', 283, 1), + (7966, 57032, 57047, 'OP_ZoneToFriendReplyMsg', 284, 1), + (7967, 57032, 57047, 'OP_ChatCreateChannelMsg', 285, 1), + (7968, 57032, 57047, 'OP_ChatJoinChannelMsg', 286, 1), + (7969, 57032, 57047, 'OP_ChatWhoChannelMsg', 287, 1), + (7970, 57032, 57047, 'OP_ChatLeaveChannelMsg', 288, 1), + (7971, 57032, 57047, 'OP_ChatTellChannelMsg', 289, 1), + (7972, 57032, 57047, 'OP_ChatTellUserMsg', 290, 1), + (7973, 57032, 57047, 'OP_ChatToggleFriendMsg', 291, 1), + (7974, 57032, 57047, 'OP_BrokerAddBag', 292, 1), + (7975, 57032, 57047, 'OP_BrokerRemoveBag', 293, 1), + (7976, 57032, 57047, 'OP_ChatToggleIgnoreMsg', 294, 1), + (7977, 57032, 57047, 'OP_ChatSendFriendsMsg', 295, 1), + (7978, 57032, 57047, 'OP_ChatSendIgnoresMsg', 296, 1), + (7979, 57032, 57047, 'OP_QuestReward', 320, 1), + (7980, 57032, 57047, 'OP_ChatFiltersMsg', 335, 1), + (7981, 57032, 57047, 'OP_MailGetMessageMsg', 338, 1), + (7982, 57032, 57047, 'OP_MailSendMessageMsg', 339, 1), + (7983, 57032, 57047, 'OP_MailDeleteMessageMsg', 340, 1), + (7984, 57032, 57047, 'OP_MailGetHeadersReplyMsg', 341, 1), + (7985, 57032, 57047, 'OP_MailGetMessageReplyMsg', 342, 1), + (7986, 57032, 57047, 'OP_MailSendMessageReplyMsg', 343, 1), + (7987, 57032, 57047, 'OP_MailCommitSendMessageMsg', 344, 1), + (7988, 57032, 57047, 'OP_MailSendSystemMessageMsg', 345, 1), + (7989, 57032, 57047, 'OP_MailRemoveAttachFromMailMsg', 346, 1), + (7990, 57032, 57047, 'OP_WaypointRequestMsg', 348, 1), + (7991, 57032, 57047, 'OP_WaypointReplyMsg', 349, 1), + (7992, 57032, 57047, 'OP_WaypointSelectMsg', 350, 1), + (7993, 57032, 57047, 'OP_WaypointUpdateMsg', 351, 1), + (7994, 57032, 57047, 'OP_CharNameChangedMsg', 352, 1), + (7995, 57032, 57047, 'OP_ShowZoneTeleporterDestinations', 353, 1), + (7996, 57032, 57047, 'OP_SelectZoneTeleporterDestinatio', 354, 1), + (7997, 57032, 57047, 'OP_ReloadLocalizedTxtMsg', 355, 1), + (7998, 57032, 57047, 'OP_RequestGuildMembershipMsg', 356, 1), + (7999, 57032, 57047, 'OP_GuildMembershipResponseMsg', 357, 1), + (8000, 57032, 57047, 'OP_LeaveGuildNotifyMsg', 358, 1), + (8001, 57032, 57047, 'OP_JoinGuildNotifyMsg', 359, 1), + (8002, 57032, 57047, 'OP_AvatarUpdateMsg', 360, 1), + (8003, 57032, 57047, 'OP_BioUpdateMsg', 362, 1), + (8004, 57032, 57047, 'OP_InspectPlayerMsg', 363, 1), + (8005, 57032, 57047, 'OP_WSServerLockMsg', 364, 1), + (8006, 57032, 57047, 'OP_LSServerLockMsg', 365, 1), + (8007, 57032, 57047, 'OP_WSServerHideMsg', 366, 1), + (8008, 57032, 57047, 'OP_CsCategoryRequestMsg', 367, 1), + (8009, 57032, 57047, 'OP_CsCategoryResponseMsg', 368, 1), + (8010, 57032, 57047, 'OP_KnowledgeWindowSlotMappingMsg', 369, 1), + (8011, 57032, 57047, 'OP_AFKUpdateMsg', 370, 1), + (8012, 57032, 57047, 'OP_AnonUpdateMsg', 371, 1), + (8013, 57032, 57047, 'OP_UpdateActivePublicZonesMsg', 372, 1), + (8014, 57032, 57047, 'OP_UnknownNpcMsg', 373, 1), + (8015, 57032, 57047, 'OP_PromoFlagsDetailsMsg', 374, 1), + (8016, 57032, 57047, 'OP_ConsignViewCreateMsg', 375, 1), + (8017, 57032, 57047, 'OP_ConsignViewGetPageMsg', 376, 1), + (8018, 57032, 57047, 'OP_ConsignViewReleaseMsg', 377, 1), + (8019, 57032, 57047, 'OP_ConsignRemoveItemsMsg', 378, 1), + (8020, 57032, 57047, 'OP_UpdateDebugRadiiMsg', 379, 1), + (8021, 57032, 57047, 'OP_ReportMsg', 380, 1), + (8022, 57032, 57047, 'OP_UpdateRaidMsg', 381, 1), + (8023, 57032, 57047, 'OP_ConsignViewSortMsg', 383, 1), + (8024, 57032, 57047, 'OP_TitleUpdateMsg', 384, 1), + (8025, 57032, 57047, 'OP_ClientFellMsg', 385, 1), + (8026, 57032, 57047, 'OP_ClientInDeathRegionMsg', 386, 1), + (8027, 57032, 57047, 'OP_CampClientMsg', 387, 1), + (8028, 57032, 57047, 'OP_CSToolAccessResponseMsg', 388, 1), + (8029, 57032, 57047, 'OP_UpdateGroupMemberDataMsg', 388, 1), + (8030, 57032, 57047, 'OP_TrackingUpdateMsg', 389, 1), + (8031, 57032, 57047, 'OP_BeginTrackingMsg', 390, 1), + (8032, 57032, 57047, 'OP_StopTrackingMsg', 391, 1), + (8033, 57032, 57047, 'OP_GetAvatarAccessRequestForCSToo', 393, 1), + (8034, 57032, 57047, 'OP_AdvancementRequestMsg', 394, 1), + (8035, 57032, 57047, 'OP_MapFogDataInitMsg', 395, 1), + (8036, 57032, 57047, 'OP_MapFogDataUpdateMsg', 396, 1), + (8037, 57032, 57047, 'OP_CloseGroupInviteWindowMsg', 397, 1), + (8038, 57032, 57047, 'OP_WorldPingMsg', 399, 1), + (8039, 57032, 57047, 'OP_MoveLogUpdateMsg', 400, 1), + (8040, 57032, 57047, 'OP_OfferQuestMsg', 401, 1), + (8041, 57032, 57047, 'OP_WorldShutdownUpdateMsg', 403, 1), + (8042, 57032, 57047, 'OP_DisplayMailScreenMsg', 404, 1), + (8043, 57032, 57047, 'OP_ClientIdleBeginMsg', 405, 1), + (8044, 57032, 57047, 'OP_ClientIdleEndMsg', 406, 1), + (8045, 57032, 57047, 'OP_PurchaseConsignmentLoreCheckRe', 407, 1), + (8046, 57032, 57047, 'OP_NotifyApprenticeStoppedMentori', 408, 1), + (8047, 57032, 57047, 'OP_CorruptedClientMsg', 409, 1), + (8048, 57032, 57047, 'OP_WorldDataChangeMsg', 410, 1), + (8049, 57032, 57047, 'OP_MailEventNotificationMsg', 411, 1), + (8050, 57032, 57047, 'OP_RestartZoneMsg', 412, 1), + (8051, 57032, 57047, 'OP_FlightPathsMsg', 413, 1), + (8052, 57032, 57047, 'OP_CharacterLinkdeadMsg', 414, 1), + (8053, 57032, 57047, 'OP_CharTransferStartRequestMsg', 415, 1), + (8054, 57032, 57047, 'OP_CharTransferStartReplyMsg', 416, 1), + (8055, 57032, 57047, 'OP_CharTransferRequestMsg', 417, 1), + (8056, 57032, 57047, 'OP_CharTransferReplyMsg', 418, 1), + (8057, 57032, 57047, 'OP_CharTransferRollbackRequestMsg', 419, 1), + (8058, 57032, 57047, 'OP_CharTransferCommitRequestMsg', 420, 1), + (8059, 57032, 57047, 'OP_CharTransferRollbackReplyMsg', 421, 1), + (8060, 57032, 57047, 'OP_CharTransferCommitReplyMsg', 422, 1), + (8061, 57032, 57047, 'OP_GetCharacterSerializedRequestM', 423, 1), + (8062, 57032, 57047, 'OP_GetCharacterSerializedReplyMsg', 424, 1), + (8063, 57032, 57047, 'OP_CreateCharFromCBBRequestMsg', 425, 1), + (8064, 57032, 57047, 'OP_CreateCharFromCBBReplyMsg', 426, 1), + (8065, 57032, 57047, 'OP_HousingDataChangedMsg', 427, 1), + (8066, 57032, 57047, 'OP_HousingRestoreMsg', 428, 1), + (8067, 57032, 57047, 'OP_AuctionItem', 429, 1), + (8068, 57032, 57047, 'OP_AuctionItemReply', 430, 1), + (8069, 57032, 57047, 'OP_AuctionCoin', 431, 1), + (8070, 57032, 57047, 'OP_AuctionCoinReply', 432, 1), + (8071, 57032, 57047, 'OP_AuctionCharacter', 433, 1), + (8072, 57032, 57047, 'OP_AuctionCharacterReply', 434, 1), + (8073, 57032, 57047, 'OP_AuctionCommitMsg', 435, 1), + (8074, 57032, 57047, 'OP_AuctionAbortMsg', 436, 1), + (8075, 57032, 57047, 'OP_CharTransferValidateRequestMsg', 437, 1), + (8076, 57032, 57047, 'OP_CharTransferValidateReplyMsg', 438, 1), + (8077, 57032, 57047, 'OP_RaceRestrictionMsg', 439, 1), + (8078, 57032, 57047, 'OP_SetInstanceDisplayNameMsg', 440, 1), + (8079, 57032, 57047, 'OP_GetAuctionAssetIDMsg', 441, 1), + (8080, 57032, 57047, 'OP_GetAuctionAssetIDReplyMsg', 442, 1), + (8081, 57032, 57047, 'OP_ResendWorldChannelsMsg', 443, 1), + (8082, 57032, 57047, 'OP_DisplayExchangeScreenMsg', 444, 1), + (8083, 57032, 57047, 'OP_ArenaGameTypesMsg', 445, 1), + (8084, 57032, 57047, 'OP_AuditAuctionEventMsg', 446, 1), + (8085, 57032, 57047, 'OP_InviteRequestMsg', 447, 1), + (8086, 57032, 57047, 'OP_InviteResponseMsg', 448, 1), + (8087, 57032, 57047, 'OP_InviteTargetResponseMsg', 449, 1), + (8088, 57032, 57047, 'OP_InspectPlayerRequestMsg', 450, 1), + (8089, 57032, 57047, 'OP_DispatchMsg', 451, 1), + (8090, 57032, 57047, 'OP_DisplayEventMsg', 452, 1), + (8091, 57032, 57047, 'OP_PrePossessionMsg', 453, 1), + (8092, 57032, 57047, 'OP_PostPossessionMsg', 454, 1), + (8093, 57032, 57047, 'OP_ArenaCreate', 456, 1), + (8094, 57032, 57047, 'OP_ArenaList', 457, 1), + (8095, 57032, 57047, 'OP_ArenaWindow', 465, 1), + (8096, 57032, 57047, 'OP_HouseItemsList', 483, 1), + (8097, 57032, 57047, 'OP_CurrentPet', 485, 1), + (8098, 57032, 57047, 'OP_AdventureList', 488, 1), + (8099, 57032, 57047, 'OP_CancelSpellCast', 489, 1), + (8100, 57032, 57047, 'OP_ClearForLandingMsg', 491, 1), + (8101, 57032, 57047, 'OP_UpdateTitleCmd', 494, 1), + (8102, 57032, 57047, 'OP_AttackAllowed', 500, 1), + (8103, 57032, 57047, 'OP_AttackNotAllowed', 501, 1), + (8104, 57032, 57047, 'OP_BagOptions', 502, 1), + (8105, 57032, 57047, 'OP_LFGGroupSearch', 504, 1), + (8106, 57032, 57047, 'OP_CharacterHousingList', 507, 1), + (8107, 57032, 57047, 'OP_DressingRoom', 510, 1), + (8108, 57032, 57047, 'OP_PlayLon', 511, 1), + (8109, 57032, 57047, 'OP_SkillInfoRequest', 514, 1), + (8110, 57032, 57047, 'OP_SkillInfoResponse', 515, 1), + (8111, 57032, 57047, 'OP_LFGUpdateMsg', 518, 1), + (8112, 57032, 57047, 'OP_BadLanguageFilter', 519, 1), + (8113, 57032, 57047, 'OP_VoiceChatChannel', 520, 1), + (8114, 57032, 57047, 'OP_MapRequest', 521, 1), + (8115, 57032, 57047, 'OP_MarketFundsUpdate', 526, 1), + (8116, 57032, 57047, 'OP_UIEvent', 527, 1), + (8117, 57032, 57047, 'OP_MarketAddFundsRequest', 528, 1), + (8118, 57032, 57047, 'OP_MarketAddFundsReply', 529, 1), + (8119, 57032, 57047, 'OP_MarketPurchase', 531, 1), + (8120, 57032, 57047, 'OP_MarketPlacePrices', 532, 1), + (8121, 57032, 57047, 'OP_MarketPlaceItems', 535, 1), + (8122, 57032, 57047, 'OP_RecipeBook', 536, 1), + (8123, 57032, 57047, 'OP_CreateCharacterDungeon', 545, 1), + (8124, 57032, 57047, 'OP_DungeonMakerEnter', 546, 1), + (8125, 57032, 57047, 'OP_DungeonMakerItemRequest', 548, 1), + (8126, 57032, 57047, 'OP_CharacterCreatedDungeons', 549, 1), + (8127, 57032, 57047, 'OP_DungeonMakerToolboxList', 550, 1), + (8128, 57032, 57047, 'OP_DungeonMakerUnknown', 551, 1), + (8129, 57032, 57047, 'OP_DungeonMakerUnknown1', 552, 1), + (8130, 57032, 57047, 'OP_PlayerPollPopup', 554, 1), + (8131, 57032, 57047, 'OP_PlayerPollAnswer', 555, 1), + (8132, 57032, 57047, 'OP_MentorPopup', 556, 1), + (8133, 57032, 57047, 'OP_LoadWelcomeWindow', 558, 1), + (8134, 57032, 57047, 'OP_OpenCharCust', 559, 1), + (8135, 57032, 57047, 'OP_SubmitCharCust', 560, 1), + (8136, 57032, 57047, 'OP_QueAllBgSolo', 562, 1), + (8137, 57032, 57047, 'OP_ZoneBgInstanceList', 564, 1), + (8138, 57032, 57047, 'OP_WorldTravelAvail', 568, 1), + (8139, 57032, 57047, 'OP_Launchpad', 570, 1), + (8140, 57032, 57047, 'OP_PaperdollImage', 572, 1), + (8141, 57032, 57047, 'OP_LoadCalendarEvents', 573, 1), + (8142, 57032, 57047, 'OP_VideoUploaded', 574, 1), + (8143, 57032, 57047, 'OP_SavageBarInitMsg', 575, 1), + (8144, 57032, 57047, 'OP_PetOptionsResponse', 576, 1), + (8145, 57032, 57047, 'OP_DungeonMakerItemResponse', 577, 1), + (8146, 57032, 57047, 'OP_CharacterMounts', 579, 1), + (8147, 57032, 57047, 'OP_RecipeListUnknown', 588, 1), + (8148, 57032, 57047, 'OP_EqBetaCopyRequest', 593, 1), + (8149, 57032, 57047, 'OP_EqHearChatCmd', 594, 1), + (8150, 57032, 57047, 'OP_EqDisplayTextCmd', 595, 1), + (8151, 57032, 57047, 'OP_EqCreateGhostCmd', 596, 1), + (8152, 57032, 57047, 'OP_EqCreateWidgetCmd', 597, 1), + (8153, 57032, 57047, 'OP_EqCreateSignWidgetCmd', 598, 1), + (8154, 57032, 57047, 'OP_EqDestroyGhostCmd', 599, 1), + (8155, 57032, 57047, 'OP_EqUpdateGhostCmd', 600, 1), + (8156, 57032, 57047, 'OP_EqSetControlGhostCmd', 601, 1), + (8157, 57032, 57047, 'OP_EqSetPOVGhostCmd', 602, 1), + (8158, 57032, 57047, 'OP_EqHearCombatCmd', 603, 1), + (8159, 57032, 57047, 'OP_EqHearSpellCastCmd', 604, 1), + (8160, 57032, 57047, 'OP_EQHearProcCmd', 605, 1), + (8161, 57032, 57047, 'OP_EQHearResEffectCmd', 606, 1), + (8162, 57032, 57047, 'OP_EqHearSpellInterruptCmd', 607, 1), + (8163, 57032, 57047, 'OP_EqHearSpellFizzleCmd', 608, 1), + (8164, 57032, 57047, 'OP_EqHearConsiderCmd', 609, 1), + (8165, 57032, 57047, 'OP_EqUpdateSubClassesCmd', 610, 1), + (8166, 57032, 57047, 'OP_EqCreateListBoxCmd', 611, 1), + (8167, 57032, 57047, 'OP_EqSetDebugPathPointsCmd', 612, 1), + (8168, 57032, 57047, 'OP_EqCannedEmoteCmd', 614, 1), + (8169, 57032, 57047, 'OP_EqStateCmd', 615, 1), + (8170, 57032, 57047, 'OP_EqPlaySoundCmd', 616, 1), + (8171, 57032, 57047, 'OP_EqPlaySound3DCmd', 617, 1), + (8172, 57032, 57047, 'OP_EqPlayVoiceCmd', 618, 1), + (8173, 57032, 57047, 'OP_EqHearDrowningCmd', 619, 1), + (8174, 57032, 57047, 'OP_EqHearDeathCmd', 620, 1), + (8175, 57032, 57047, 'OP_EqGroupMemberRemovedCmd', 621, 1), + (8176, 57032, 57047, 'OP_EqHearChainEffectCmd', 622, 1), + (8177, 57032, 57047, 'OP_EqReceiveOfferCmd', 623, 1), + (8178, 57032, 57047, 'OP_EqInspectPCResultsCmd', 624, 1), + (8179, 57032, 57047, 'OP_EqDrawablePathGraphCmd', 625, 1), + (8180, 57032, 57047, 'OP_EqDialogOpenCmd', 626, 1), + (8181, 57032, 57047, 'OP_EqDialogCloseCmd', 627, 1), + (8182, 57032, 57047, 'OP_EqFactionUpdateCmd', 628, 1), + (8183, 57032, 57047, 'OP_EqCollectionUpdateCmd', 629, 1), + (8184, 57032, 57047, 'OP_EqCollectionFilterCmd', 630, 1), + (8185, 57032, 57047, 'OP_EqCollectionItemCmd', 631, 1), + (8186, 57032, 57047, 'OP_EqQuestJournalUpdateCmd', 632, 1), + (8187, 57032, 57047, 'OP_EqMentoring', 633, 1), + (8188, 57032, 57047, 'OP_EqQuestJournalReplyCmd', 634, 1), + (8189, 57032, 57047, 'OP_EqQuestGroupCmd', 635, 1), + (8190, 57032, 57047, 'OP_EqUpdateMerchantCmd', 636, 1), + (8191, 57032, 57047, 'OP_EqUpdateStoreCmd', 637, 1), + (8192, 57032, 57047, 'OP_EqUpdatePlayerTradeCmd', 638, 1), + (8193, 57032, 57047, 'OP_EqHelpPathCmd', 639, 1), + (8194, 57032, 57047, 'OP_EqHelpPathClearCmd', 640, 1), + (8195, 57032, 57047, 'OP_EqUpdateBankCmd', 641, 1), + (8196, 57032, 57047, 'OP_EqExamineInfoCmd', 642, 1), + (8197, 57032, 57047, 'OP_EqCloseWindowCmd', 643, 1), + (8198, 57032, 57047, 'OP_EqUpdateLootCmd', 644, 1), + (8199, 57032, 57047, 'OP_EqJunctionListCmd', 645, 1), + (8200, 57032, 57047, 'OP_EqShowDeathWindowCmd', 646, 1), + (8201, 57032, 57047, 'OP_EqDisplaySpellFailCmd', 647, 1), + (8202, 57032, 57047, 'OP_EqSpellCastStartCmd', 648, 1), + (8203, 57032, 57047, 'OP_EqSpellCastEndCmd', 649, 1), + (8204, 57032, 57047, 'OP_EqResurrectedCmd', 650, 1), + (8205, 57032, 57047, 'OP_EqChoiceWinCmd', 651, 1), + (8206, 57032, 57047, 'OP_EqSetDefaultVerbCmd', 652, 1), + (8207, 57032, 57047, 'OP_EqInstructionWindowCmd', 653, 1), + (8208, 57032, 57047, 'OP_EqInstructionWindowCloseCmd', 654, 1), + (8209, 57032, 57047, 'OP_EqInstructionWindowGoalCmd', 655, 1), + (8210, 57032, 57047, 'OP_EqInstructionWindowTaskCmd', 656, 1), + (8211, 57032, 57047, 'OP_EqEnableGameEventCmd', 657, 1), + (8212, 57032, 57047, 'OP_EqShowWindowCmd', 658, 1), + (8213, 57032, 57047, 'OP_EqEnableWindowCmd', 659, 1), + (8214, 57032, 57047, 'OP_EqFlashWindowCmd', 660, 1), + (8215, 57032, 57047, 'OP_EqHearPlayFlavorCmd', 662, 1), + (8216, 57032, 57047, 'OP_EqUpdateSignWidgetCmd', 663, 1), + (8217, 57032, 57047, 'OP_EqDebugPVDCmd', 664, 1), + (8218, 57032, 57047, 'OP_EqShowBookCmd', 665, 1), + (8219, 57032, 57047, 'OP_EqQuestionnaireCmd', 666, 1), + (8220, 57032, 57047, 'OP_EqGetProbsCmd', 668, 1), + (8221, 57032, 57047, 'OP_EqHearHealCmd', 669, 1), + (8222, 57032, 57047, 'OP_EqChatChannelUpdateCmd', 670, 1), + (8223, 57032, 57047, 'OP_EqWhoChannelQueryReplyCmd', 671, 1), + (8224, 57032, 57047, 'OP_EqAvailWorldChannelsCmd', 672, 1), + (8225, 57032, 57047, 'OP_EqUpdateTargetCmd', 673, 1), + (8226, 57032, 57047, 'OP_BrokerSellList', 674, 1), + (8227, 57032, 57047, 'OP_EqConsignmentItemsCmd', 675, 1), + (8228, 57032, 57047, 'OP_EqStartBrokerCmd', 677, 1), + (8229, 57032, 57047, 'OP_EqMapExplorationCmd', 678, 1), + (8230, 57032, 57047, 'OP_EqStoreLogCmd', 679, 1), + (8231, 57032, 57047, 'OP_EqSpellMoveToRangeAndRetryCmd', 680, 1), + (8232, 57032, 57047, 'OP_EqUpdatePlayerMailCmd', 681, 1), + (8233, 57032, 57047, 'OP_GuildStatusUpdate', 684, 1), + (8234, 57032, 57047, 'OP_EqArenaResultsCmd', 685, 1), + (8235, 57032, 57047, 'OP_EqGuildBankEventActionCmd', 686, 1), + (8236, 57032, 57047, 'OP_EqGuildBankExamineInfoCmd', 687, 1), + (8237, 57032, 57047, 'OP_EqHearSpellNoLandCmd', 688, 1), + (8238, 57032, 57047, 'OP_Lottery', 689, 1), + (8239, 57032, 57047, 'OP_GuildRecruitingMemberInfo', 690, 1), + (8240, 57032, 57047, 'OP_GuildRecruiting', 691, 1), + (8241, 57032, 57047, 'OP_GuildRecruitingDetails', 692, 1), + (8242, 57032, 57047, 'OP_GuildRecruitingImage', 693, 1), + (8243, 57032, 57047, 'OP_TradeskillList', 694, 1), + (8244, 57032, 57047, 'OP_CharRenamed', 695, 1), + (8245, 57032, 57047, 'OP_UseAdornment', 705, 1), + (8246, 57032, 57047, 'OP_ExpPurchWindow', 711, 1), + (8247, 57032, 57047, 'OP_PointOfInterest', 715, 1), + (8248, 57032, 57047, 'OP_PointOfInterest2', 716, 1), + (8249, 57032, 57047, 'OP_TraitsList', 717, 1), + (8250, 57032, 57047, 'OP_CustomizeHouseDisplay', 720, 1), + (8251, 57032, 57047, 'OP_VoiceChatServer', 721, 1), + (8252, 57032, 57047, 'OP_SupplyDepot', 725, 1), + (8253, 57032, 57047, 'OP_EQHearThreatCmd', 726, 1), + (8254, 57032, 57047, 'OP_RecipeList', 727, 1), + (8255, 57032, 57047, 'OP_Research', 728, 1), + (8256, 57032, 57047, 'OP_CharacterCurrency', 729, 1), + (8257, 57032, 57047, 'OP_CharacterAchievements', 730, 1), + (8258, 57032, 57047, 'OP_AchievementUpdateMsg', 731, 1), + (8259, 57032, 57047, 'OP_EQHearDispellCmd', 732, 1), + (8260, 57032, 57047, 'OP_JournalQuestStoryline', 733, 1), + (8261, 57032, 57047, 'OP_DungeonPlayAsAvatarList', 734, 1), + (8262, 57032, 57047, 'OP_DungeonPlayAsAvatarSelected', 735, 1), + (8263, 57032, 57047, 'OP_MercHireWindow', 736, 1), + (8264, 57032, 57047, 'OP_MercUnknown', 737, 1), + (8265, 57032, 57047, 'OP_Unknown', 750, 1), + (8266, 57048, 57079, 'OP_LoginRequestMsg', 0, 1), + (8267, 57048, 57079, 'OP_LoginByNumRequestMsg', 1, 1), + (8268, 57048, 57079, 'OP_WSLoginRequestMsg', 2, 1), + (8269, 57048, 57079, 'OP_ESLoginRequestMsg', 3, 1), + (8270, 57048, 57079, 'OP_LoginReplyMsg', 4, 1), + (8271, 57048, 57079, 'OP_WSStatusReplyMsg', 5, 1), + (8272, 57048, 57079, 'OP_WorldStatusChangeMsg', 6, 1), + (8273, 57048, 57079, 'OP_AllWSDescRequestMsg', 7, 1), + (8274, 57048, 57079, 'OP_WorldListMsg', 8, 1), + (8275, 57048, 57079, 'OP_AllCharactersDescRequestMsg', 9, 1), + (8276, 57048, 57079, 'OP_AllCharactersDescReplyMsg', 10, 1), + (8277, 57048, 57079, 'OP_CreateCharacterRequestMsg', 11, 1), + (8278, 57048, 57079, 'OP_CreateCharacterReplyMsg', 12, 1), + (8279, 57048, 57079, 'OP_WSCreateCharacterRequestMsg', 13, 1), + (8280, 57048, 57079, 'OP_WSCreateCharacterReplyMsg', 14, 1), + (8281, 57048, 57079, 'OP_ReskinCharacterRequestMsg', 15, 1), + (8282, 57048, 57079, 'OP_DeleteCharacterRequestMsg', 16, 1), + (8283, 57048, 57079, 'OP_DeleteCharacterReplyMsg', 17, 1), + (8284, 57048, 57079, 'OP_PlayCharacterRequestMsg', 18, 1), + (8285, 57048, 57079, 'OP_PlayCharacterReplyMsg', 19, 1), + (8286, 57048, 57079, 'OP_ExpectClientAsCharacterReplyMs', 22, 1), + (8287, 57048, 57079, 'OP_ServerPlayCharacterRequestMsg', 23, 1), + (8288, 57048, 57079, 'OP_ServerPlayCharacterReplyMsg', 24, 1), + (8289, 57048, 57079, 'OP_ESInitMsg', 25, 1), + (8290, 57048, 57079, 'OP_ESReadyForClientsMsg', 26, 1), + (8291, 57048, 57079, 'OP_CreateZoneInstanceMsg', 29, 1), + (8292, 57048, 57079, 'OP_ZoneInstanceCreateReplyMsg', 30, 1), + (8293, 57048, 57079, 'OP_ZoneInstanceDestroyedMsg', 31, 1), + (8294, 57048, 57079, 'OP_ExpectClientAsCharacterRequest', 32, 1), + (8295, 57048, 57079, 'OP_ZoneInfoMsg', 33, 1), + (8296, 57048, 57079, 'OP_DoneLoadingZoneResourcesMsg', 34, 1), + (8297, 57048, 57079, 'OP_DoneSendingInitialEntitiesMsg', 35, 1), + (8298, 57048, 57079, 'OP_DoneLoadingEntityResourcesMsg', 36, 1), + (8299, 57048, 57079, 'OP_PredictionUpdateMsg', 37, 1), + (8300, 57048, 57079, 'OP_UpdatePositionMsg', 39, 1), + (8301, 57048, 57079, 'OP_SetRemoteCmdsMsg', 41, 1), + (8302, 57048, 57079, 'OP_RemoteCmdMsg', 42, 1), + (8303, 57048, 57079, 'OP_GameWorldTimeMsg', 43, 1), + (8304, 57048, 57079, 'OP_MOTDMsg', 44, 1), + (8305, 57048, 57079, 'OP_ZoneMOTDMsg', 45, 1), + (8306, 57048, 57079, 'OP_AvatarCreatedMsg', 46, 1), + (8307, 57048, 57079, 'OP_AvatarDestroyedMsg', 47, 1), + (8308, 57048, 57079, 'OP_RequestCampMsg', 50, 1), + (8309, 57048, 57079, 'OP_CampStartedMsg', 51, 1), + (8310, 57048, 57079, 'OP_CampAbortedMsg', 52, 1), + (8311, 57048, 57079, 'OP_WhoQueryRequestMsg', 53, 1), + (8312, 57048, 57079, 'OP_WhoQueryReplyMsg', 54, 1), + (8313, 57048, 57079, 'OP_MonitorReplyMsg', 55, 1), + (8314, 57048, 57079, 'OP_MonitorCharacterListMsg', 56, 1), + (8315, 57048, 57079, 'OP_MonitorCharacterListRequestMsg', 57, 1), + (8316, 57048, 57079, 'OP_ClientCmdMsg', 58, 1), + (8317, 57048, 57079, 'OP_DispatchESMsg', 59, 1), + (8318, 57048, 57079, 'OP_DispatchClientCmdMsg', 60, 1), + (8319, 57048, 57079, 'OP_UpdateTargetMsg', 61, 1), + (8320, 57048, 57079, 'OP_UpdateTargetLocMsg', 62, 1), + (8321, 57048, 57079, 'OP_UpdateCharacterSheetMsg', 63, 1), + (8322, 57048, 57079, 'OP_CharacterPet', 64, 1), + (8323, 57048, 57079, 'OP_CharacterMerc', 65, 1), + (8324, 57048, 57079, 'OP_UpdateSpellBookMsg', 66, 1), + (8325, 57048, 57079, 'OP_UpdateInventoryMsg', 68, 1), + (8326, 57048, 57079, 'OP_AfterInvSpellUpdate', 69, 1), + (8327, 57048, 57079, 'OP_UpdateRecipeBookMsg', 70, 1), + (8328, 57048, 57079, 'OP_RequestRecipeDetailsMsg', 71, 1), + (8329, 57048, 57079, 'OP_RecipeDetailsMsg', 72, 1), + (8330, 57048, 57079, 'OP_UpdateSkillBookMsg', 73, 1), + (8331, 57048, 57079, 'OP_UpdateSkillsMsg', 74, 1), + (8332, 57048, 57079, 'OP_UpdateOpportunityMsg', 75, 1), + (8333, 57048, 57079, 'OP_ChangeZoneMsg', 77, 1), + (8334, 57048, 57079, 'OP_ClientTeleportRequestMsg', 78, 1), + (8335, 57048, 57079, 'OP_TeleportWithinZoneMsg', 79, 1), + (8336, 57048, 57079, 'OP_TeleportWithinZoneNoReloadMsg', 80, 1), + (8337, 57048, 57079, 'OP_MigrateClientToZoneRequestMsg', 81, 1), + (8338, 57048, 57079, 'OP_MigrateClientToZoneReplyMsg', 82, 1), + (8339, 57048, 57079, 'OP_ReadyToZoneMsg', 84, 1), + (8340, 57048, 57079, 'OP_RemoveClientFromGroupMsg', 85, 1), + (8341, 57048, 57079, 'OP_RemoveGroupFromGroupMsg', 86, 1), + (8342, 57048, 57079, 'OP_MakeGroupLeaderMsg', 87, 1), + (8343, 57048, 57079, 'OP_GroupCreatedMsg', 88, 1), + (8344, 57048, 57079, 'OP_GroupDestroyedMsg', 89, 1), + (8345, 57048, 57079, 'OP_GroupMemberAddedMsg', 90, 1), + (8346, 57048, 57079, 'OP_GroupMemberRemovedMsg', 91, 1), + (8347, 57048, 57079, 'OP_GroupRemovedFromGroupMsg', 92, 1), + (8348, 57048, 57079, 'OP_GroupLeaderChangedMsg', 93, 1), + (8349, 57048, 57079, 'OP_GroupResendOOZDataMsg', 94, 1), + (8350, 57048, 57079, 'OP_GroupSettingsChangedMsg', 95, 1), + (8351, 57048, 57079, 'OP_OutOfZoneMemberDataMsg', 96, 1), + (8352, 57048, 57079, 'OP_SendLatestRequestMsg', 97, 1), + (8353, 57048, 57079, 'OP_ClearDataMsg', 98, 1), + (8354, 57048, 57079, 'OP_SetSocialMsg', 99, 1), + (8355, 57048, 57079, 'OP_ESStatusMsg', 100, 1), + (8356, 57048, 57079, 'OP_ESZoneInstanceStatusMsg', 101, 1), + (8357, 57048, 57079, 'OP_ZonesStatusRequestMsg', 102, 1), + (8358, 57048, 57079, 'OP_ZonesStatusMsg', 103, 1), + (8359, 57048, 57079, 'OP_ESWeatherRequestMsg', 104, 1), + (8360, 57048, 57079, 'OP_ESWeatherRequestEndMsg', 105, 1), + (8361, 57048, 57079, 'OP_DialogSelectMsg', 109, 1), + (8362, 57048, 57079, 'OP_DialogCloseMsg', 110, 1), + (8363, 57048, 57079, 'OP_RemoveSpellEffectMsg', 111, 1), + (8364, 57048, 57079, 'OP_RemoveConcentrationMsg', 112, 1), + (8365, 57048, 57079, 'OP_QuestJournalOpenMsg', 113, 1), + (8366, 57048, 57079, 'OP_QuestJournalInspectMsg', 114, 1), + (8367, 57048, 57079, 'OP_QuestJournalSetVisibleMsg', 115, 1), + (8368, 57048, 57079, 'OP_QuestJournalWaypointMsg', 116, 1), + (8369, 57048, 57079, 'OP_CreateGuildRequestMsg', 119, 1), + (8370, 57048, 57079, 'OP_CreateGuildReplyMsg', 120, 1), + (8371, 57048, 57079, 'OP_GuildsayMsg', 121, 1), + (8372, 57048, 57079, 'OP_FellowshipExpMsg', 122, 1), + (8373, 57048, 57079, 'OP_DeleteGuildMsg', 123, 1), + (8374, 57048, 57079, 'OP_GuildUpdateMsg', 124, 1), + (8375, 57048, 57079, 'OP_ConsignmentCloseStoreMsg', 125, 1), + (8376, 57048, 57079, 'OP_ConsignItemRequestMsg', 126, 1), + (8377, 57048, 57079, 'OP_ConsignItemResponseMsg', 127, 1), + (8378, 57048, 57079, 'OP_PurchaseConsignmentRequestMsg', 128, 1), + (8379, 57048, 57079, 'OP_LikeOption', 136, 1), + (8380, 57048, 57079, 'OP_PublishHouse', 138, 1), + (8381, 57048, 57079, 'OP_PlayerMadeInstancesScreen', 139, 1), + (8382, 57048, 57079, 'OP_PlayerMadeInstances', 140, 1), + (8383, 57048, 57079, 'OP_HouseDeletedRemotelyMsg', 142, 1), + (8384, 57048, 57079, 'OP_UpdateHouseDataMsg', 143, 1), + (8385, 57048, 57079, 'OP_UpdateHouseAccessDataMsg', 144, 1), + (8386, 57048, 57079, 'OP_PlayerHouseBaseScreenMsg', 145, 1), + (8387, 57048, 57079, 'OP_PlayerHousePurchaseScreenMsg', 146, 1), + (8388, 57048, 57079, 'OP_PlayerHouseAccessUpdateMsg', 147, 1), + (8389, 57048, 57079, 'OP_PlayerHouseDisplayStatusMsg', 148, 1), + (8390, 57048, 57079, 'OP_PlayerHouseCloseUIMsg', 149, 1), + (8391, 57048, 57079, 'OP_BuyPlayerHouseMsg', 150, 1), + (8392, 57048, 57079, 'OP_BuyPlayerHouseTintMsg', 151, 1), + (8393, 57048, 57079, 'OP_CollectAllHouseItemsMsg', 152, 1), + (8394, 57048, 57079, 'OP_RelinquishHouseMsg', 153, 1), + (8395, 57048, 57079, 'OP_EnterHouseMsg', 154, 1), + (8396, 57048, 57079, 'OP_ExitHouseMsg', 155, 1), + (8397, 57048, 57079, 'OP_HouseDefaultAccessSetMsg', 156, 1), + (8398, 57048, 57079, 'OP_HouseAccessSetMsg', 157, 1), + (8399, 57048, 57079, 'OP_HouseAccessRemoveMsg', 158, 1), + (8400, 57048, 57079, 'OP_PayHouseUpkeepMsg', 159, 1), + (8401, 57048, 57079, 'OP_MoveableObjectPlacementCriteri', 160, 1), + (8402, 57048, 57079, 'OP_EnterMoveObjectModeMsg', 161, 1), + (8403, 57048, 57079, 'OP_PositionMoveableObject', 162, 1), + (8404, 57048, 57079, 'OP_CancelMoveObjectModeMsg', 163, 1), + (8405, 57048, 57079, 'OP_ShaderCustomizationMsg', 164, 1), + (8406, 57048, 57079, 'OP_ReplaceableSubMeshesMsg', 165, 1), + (8407, 57048, 57079, 'OP_HouseCustomizationScreenMsg', 166, 1), + (8408, 57048, 57079, 'OP_CustomizationPurchaseRequestMs', 167, 1), + (8409, 57048, 57079, 'OP_CustomizationSetRequestMsg', 168, 1), + (8410, 57048, 57079, 'OP_CustomizationReplyMsg', 169, 1), + (8411, 57048, 57079, 'OP_TintWidgetsMsg', 170, 1), + (8412, 57048, 57079, 'OP_ExamineConsignmentRequestMsg', 171, 1), + (8413, 57048, 57079, 'OP_ExamineConsignmentResponseMsg', 172, 1), + (8414, 57048, 57079, 'OP_UISettingsResponseMsg', 173, 1), + (8415, 57048, 57079, 'OP_UIResetMsg', 174, 1), + (8416, 57048, 57079, 'OP_KeymapLoadMsg', 175, 1), + (8417, 57048, 57079, 'OP_KeymapNoneMsg', 176, 1), + (8418, 57048, 57079, 'OP_KeymapDataMsg', 177, 1), + (8419, 57048, 57079, 'OP_KeymapSaveMsg', 178, 1), + (8420, 57048, 57079, 'OP_DispatchSpellCmdMsg', 179, 1), + (8421, 57048, 57079, 'OP_EntityVerbsRequestMsg', 180, 1), + (8422, 57048, 57079, 'OP_EntityVerbsReplyMsg', 181, 1), + (8423, 57048, 57079, 'OP_EntityVerbsVerbMsg', 182, 1), + (8424, 57048, 57079, 'OP_ChatRelationshipUpdateMsg', 184, 1), + (8425, 57048, 57079, 'OP_LootItemsRequestMsg', 185, 1), + (8426, 57048, 57079, 'OP_StoppedLootingMsg', 186, 1), + (8427, 57048, 57079, 'OP_SitMsg', 187, 1), + (8428, 57048, 57079, 'OP_StandMsg', 188, 1), + (8429, 57048, 57079, 'OP_SatMsg', 189, 1), + (8430, 57048, 57079, 'OP_StoodMsg', 190, 1), + (8431, 57048, 57079, 'OP_ClearForTakeOffMsg', 191, 1), + (8432, 57048, 57079, 'OP_ReadyForTakeOffMsg', 192, 1), + (8433, 57048, 57079, 'OP_ShowIllusionsMsg', 193, 1), + (8434, 57048, 57079, 'OP_HideIllusionsMsg', 194, 1), + (8435, 57048, 57079, 'OP_ExamineItemRequestMsg', 195, 1), + (8436, 57048, 57079, 'OP_ReadBookPageMsg', 196, 1), + (8437, 57048, 57079, 'OP_DefaultGroupOptionsRequestMsg', 197, 1), + (8438, 57048, 57079, 'OP_DefaultGroupOptionsMsg', 198, 1), + (8439, 57048, 57079, 'OP_GroupOptionsMsg', 199, 1), + (8440, 57048, 57079, 'OP_DisplayGroupOptionsScreenMsg', 200, 1), + (8441, 57048, 57079, 'OP_PetOptions', 201, 1), + (8442, 57048, 57079, 'OP_DisplayInnVisitScreenMsg', 202, 1), + (8443, 57048, 57079, 'OP_DumpSchedulerMsg', 203, 1), + (8444, 57048, 57079, 'OP_LSCheckAcctLockMsg', 204, 1), + (8445, 57048, 57079, 'OP_WSAcctLockStatusMsg', 205, 1), + (8446, 57048, 57079, 'OP_RequestHelpRepathMsg', 206, 1), + (8447, 57048, 57079, 'OP_RequestTargetLocMsg', 207, 1), + (8448, 57048, 57079, 'OP_UpdateMotdMsg', 208, 1), + (8449, 57048, 57079, 'OP_DestUpdateReq', 210, 1), + (8450, 57048, 57079, 'OP_PerformPlayerKnockbackMsg', 213, 1), + (8451, 57048, 57079, 'OP_PerformCameraShakeMsg', 214, 1), + (8452, 57048, 57079, 'OP_PopulateSkillMapsMsg', 215, 1), + (8453, 57048, 57079, 'OP_CancelledFeignMsg', 216, 1), + (8454, 57048, 57079, 'OP_SysClient', 218, 1), + (8455, 57048, 57079, 'OP_ShowCreateFromRecipeUIMsg', 219, 1), + (8456, 57048, 57079, 'OP_CancelCreateFromRecipeMsg', 220, 1), + (8457, 57048, 57079, 'OP_BeginItemCreationMsg', 221, 1), + (8458, 57048, 57079, 'OP_StopItemCreationMsg', 222, 1), + (8459, 57048, 57079, 'OP_ShowItemCreationProcessUIMsg', 223, 1), + (8460, 57048, 57079, 'OP_UpdateItemCreationProcessUIMsg', 224, 1), + (8461, 57048, 57079, 'OP_DisplayTSEventReactionMsg', 225, 1), + (8462, 57048, 57079, 'OP_ShowRecipeBookMsg', 226, 1), + (8463, 57048, 57079, 'OP_KnowledgebaseRequestMsg', 227, 1), + (8464, 57048, 57079, 'OP_KnowledgebaseResponseMsg', 228, 1), + (8465, 57048, 57079, 'OP_CSTicketHeaderRequestMsg', 229, 1), + (8466, 57048, 57079, 'OP_CSTicketInfoMsg', 230, 1), + (8467, 57048, 57079, 'OP_CSTicketCommentRequestMsg', 231, 1), + (8468, 57048, 57079, 'OP_CSTicketCommentResponseMsg', 232, 1), + (8469, 57048, 57079, 'OP_CSTicketCreateMsg', 233, 1), + (8470, 57048, 57079, 'OP_CSTicketAddCommentMsg', 234, 1), + (8471, 57048, 57079, 'OP_CSTicketDeleteMsg', 235, 1), + (8472, 57048, 57079, 'OP_CSTicketChangeNotificationMsg', 236, 1), + (8473, 57048, 57079, 'OP_WorldDataUpdateMsg', 237, 1), + (8474, 57048, 57079, 'OP_KnownLanguagesMsg', 238, 1), + (8475, 57048, 57079, 'OP_LsRequestClientCrashLogMsg', 239, 1), + (8476, 57048, 57079, 'OP_LsClientBaselogReplyMsg', 240, 1), + (8477, 57048, 57079, 'OP_LsClientCrashlogReplyMsg', 241, 1), + (8478, 57048, 57079, 'OP_LsClientAlertlogReplyMsg', 242, 1), + (8479, 57048, 57079, 'OP_LsClientVerifylogReplyMsg', 243, 1), + (8480, 57048, 57079, 'OP_ClientTeleportToLocationMsg', 244, 1), + (8481, 57048, 57079, 'OP_UpdateClientPredFlagsMsg', 245, 1), + (8482, 57048, 57079, 'OP_ChangeServerControlFlagMsg', 246, 1), + (8483, 57048, 57079, 'OP_CSToolsRequestMsg', 247, 1), + (8484, 57048, 57079, 'OP_CSToolsResponseMsg', 248, 1), + (8485, 57048, 57079, 'OP_AddSocialStructureStandingMsg', 249, 1), + (8486, 57048, 57079, 'OP_CreateBoatTransportsMsg', 250, 1), + (8487, 57048, 57079, 'OP_PositionBoatTransportMsg', 251, 1), + (8488, 57048, 57079, 'OP_MigrateBoatTransportMsg', 252, 1), + (8489, 57048, 57079, 'OP_MigrateBoatTransportReplyMsg', 253, 1), + (8490, 57048, 57079, 'OP_DisplayDebugNLLPointsMsg', 254, 1), + (8491, 57048, 57079, 'OP_ExamineInfoRequestMsg', 255, 1), + (8492, 57048, 57079, 'OP_QuickbarInitMsg', 256, 1), + (8493, 57048, 57079, 'OP_QuickbarUpdateMsg', 257, 1), + (8494, 57048, 57079, 'OP_MacroInitMsg', 258, 1), + (8495, 57048, 57079, 'OP_MacroUpdateMsg', 259, 1), + (8496, 57048, 57079, 'OP_QuestionnaireMsg', 260, 1), + (8497, 57048, 57079, 'OP_LevelChangedMsg', 261, 1), + (8498, 57048, 57079, 'OP_SpellGainedMsg', 262, 1), + (8499, 57048, 57079, 'OP_EncounterBrokenMsg', 263, 1), + (8500, 57048, 57079, 'OP_OnscreenMsgMsg', 264, 1), + (8501, 57048, 57079, 'OP_DisplayWarningMsg', 265, 1), + (8502, 57048, 57079, 'OP_ModifyGuildMsg', 266, 1), + (8503, 57048, 57079, 'OP_GuildEventMsg', 267, 1), + (8504, 57048, 57079, 'OP_GuildEventAddMsg', 268, 1), + (8505, 57048, 57079, 'OP_GuildEventActionMsg', 269, 1), + (8506, 57048, 57079, 'OP_GuildEventListMsg', 270, 1), + (8507, 57048, 57079, 'OP_RequestGuildEventDetailsMsg', 271, 1), + (8508, 57048, 57079, 'OP_GuildEventDetailsMsg', 272, 1), + (8509, 57048, 57079, 'OP_RequestGuildInfoMsg', 273, 1), + (8510, 57048, 57079, 'OP_GuildBankActionMsg', 274, 1), + (8511, 57048, 57079, 'OP_GuildBankActionResponseMsg', 275, 1), + (8512, 57048, 57079, 'OP_GuildBankItemDetailsRequestMsg', 276, 1), + (8513, 57048, 57079, 'OP_GuildBankItemDetailsResponseMs', 277, 1), + (8514, 57048, 57079, 'OP_GuildBankUpdateMsg', 278, 1), + (8515, 57048, 57079, 'OP_GuildBankEventListMsg', 279, 1), + (8516, 57048, 57079, 'OP_RequestGuildBankEventDetailsMs', 280, 1), + (8517, 57048, 57079, 'OP_RewardPackMsg', 281, 1), + (8518, 57048, 57079, 'OP_RenameGuildMsg', 282, 1), + (8519, 57048, 57079, 'OP_ZoneToFriendRequestMsg', 283, 1), + (8520, 57048, 57079, 'OP_ZoneToFriendReplyMsg', 284, 1), + (8521, 57048, 57079, 'OP_ChatCreateChannelMsg', 285, 1), + (8522, 57048, 57079, 'OP_ChatJoinChannelMsg', 286, 1), + (8523, 57048, 57079, 'OP_ChatWhoChannelMsg', 287, 1), + (8524, 57048, 57079, 'OP_ChatLeaveChannelMsg', 288, 1), + (8525, 57048, 57079, 'OP_ChatTellChannelMsg', 289, 1), + (8526, 57048, 57079, 'OP_ChatTellUserMsg', 290, 1), + (8527, 57048, 57079, 'OP_ChatToggleFriendMsg', 291, 1), + (8528, 57048, 57079, 'OP_BrokerAddBag', 292, 1), + (8529, 57048, 57079, 'OP_BrokerRemoveBag', 293, 1), + (8530, 57048, 57079, 'OP_ChatToggleIgnoreMsg', 294, 1), + (8531, 57048, 57079, 'OP_ChatSendFriendsMsg', 295, 1), + (8532, 57048, 57079, 'OP_ChatSendIgnoresMsg', 296, 1), + (8533, 57048, 57079, 'OP_QuestReward', 320, 1), + (8534, 57048, 57079, 'OP_ChatFiltersMsg', 335, 1), + (8535, 57048, 57079, 'OP_MailGetMessageMsg', 338, 1), + (8536, 57048, 57079, 'OP_MailSendMessageMsg', 339, 1), + (8537, 57048, 57079, 'OP_MailDeleteMessageMsg', 340, 1), + (8538, 57048, 57079, 'OP_MailGetHeadersReplyMsg', 341, 1), + (8539, 57048, 57079, 'OP_MailGetMessageReplyMsg', 342, 1), + (8540, 57048, 57079, 'OP_MailSendMessageReplyMsg', 343, 1), + (8541, 57048, 57079, 'OP_MailCommitSendMessageMsg', 344, 1), + (8542, 57048, 57079, 'OP_MailSendSystemMessageMsg', 345, 1), + (8543, 57048, 57079, 'OP_MailRemoveAttachFromMailMsg', 346, 1), + (8544, 57048, 57079, 'OP_WaypointRequestMsg', 348, 1), + (8545, 57048, 57079, 'OP_WaypointReplyMsg', 349, 1), + (8546, 57048, 57079, 'OP_WaypointSelectMsg', 350, 1), + (8547, 57048, 57079, 'OP_WaypointUpdateMsg', 351, 1), + (8548, 57048, 57079, 'OP_CharNameChangedMsg', 352, 1), + (8549, 57048, 57079, 'OP_ShowZoneTeleporterDestinations', 353, 1), + (8550, 57048, 57079, 'OP_SelectZoneTeleporterDestinatio', 354, 1), + (8551, 57048, 57079, 'OP_ReloadLocalizedTxtMsg', 355, 1), + (8552, 57048, 57079, 'OP_RequestGuildMembershipMsg', 356, 1), + (8553, 57048, 57079, 'OP_GuildMembershipResponseMsg', 357, 1), + (8554, 57048, 57079, 'OP_LeaveGuildNotifyMsg', 358, 1), + (8555, 57048, 57079, 'OP_JoinGuildNotifyMsg', 359, 1), + (8556, 57048, 57079, 'OP_AvatarUpdateMsg', 360, 1), + (8557, 57048, 57079, 'OP_BioUpdateMsg', 362, 1), + (8558, 57048, 57079, 'OP_InspectPlayerMsg', 363, 1), + (8559, 57048, 57079, 'OP_WSServerLockMsg', 364, 1), + (8560, 57048, 57079, 'OP_LSServerLockMsg', 365, 1), + (8561, 57048, 57079, 'OP_WSServerHideMsg', 366, 1), + (8562, 57048, 57079, 'OP_CsCategoryRequestMsg', 367, 1), + (8563, 57048, 57079, 'OP_CsCategoryResponseMsg', 368, 1), + (8564, 57048, 57079, 'OP_KnowledgeWindowSlotMappingMsg', 369, 1), + (8565, 57048, 57079, 'OP_AFKUpdateMsg', 370, 1), + (8566, 57048, 57079, 'OP_AnonUpdateMsg', 371, 1), + (8567, 57048, 57079, 'OP_UpdateActivePublicZonesMsg', 372, 1), + (8568, 57048, 57079, 'OP_UnknownNpcMsg', 373, 1), + (8569, 57048, 57079, 'OP_PromoFlagsDetailsMsg', 374, 1), + (8570, 57048, 57079, 'OP_ConsignViewCreateMsg', 375, 1), + (8571, 57048, 57079, 'OP_ConsignViewGetPageMsg', 376, 1), + (8572, 57048, 57079, 'OP_ConsignViewReleaseMsg', 377, 1), + (8573, 57048, 57079, 'OP_ConsignRemoveItemsMsg', 378, 1), + (8574, 57048, 57079, 'OP_UpdateDebugRadiiMsg', 379, 1), + (8575, 57048, 57079, 'OP_ReportMsg', 380, 1), + (8576, 57048, 57079, 'OP_UpdateRaidMsg', 381, 1), + (8577, 57048, 57079, 'OP_ConsignViewSortMsg', 383, 1), + (8578, 57048, 57079, 'OP_TitleUpdateMsg', 384, 1), + (8579, 57048, 57079, 'OP_ClientFellMsg', 385, 1), + (8580, 57048, 57079, 'OP_ClientInDeathRegionMsg', 386, 1), + (8581, 57048, 57079, 'OP_CampClientMsg', 387, 1), + (8582, 57048, 57079, 'OP_CSToolAccessResponseMsg', 388, 1), + (8583, 57048, 57079, 'OP_UpdateGroupMemberDataMsg', 388, 1), + (8584, 57048, 57079, 'OP_TrackingUpdateMsg', 389, 1), + (8585, 57048, 57079, 'OP_BeginTrackingMsg', 390, 1), + (8586, 57048, 57079, 'OP_StopTrackingMsg', 391, 1), + (8587, 57048, 57079, 'OP_GetAvatarAccessRequestForCSToo', 393, 1), + (8588, 57048, 57079, 'OP_AdvancementRequestMsg', 394, 1), + (8589, 57048, 57079, 'OP_MapFogDataInitMsg', 395, 1), + (8590, 57048, 57079, 'OP_MapFogDataUpdateMsg', 396, 1), + (8591, 57048, 57079, 'OP_CloseGroupInviteWindowMsg', 397, 1), + (8592, 57048, 57079, 'OP_WorldPingMsg', 399, 1), + (8593, 57048, 57079, 'OP_MoveLogUpdateMsg', 400, 1), + (8594, 57048, 57079, 'OP_OfferQuestMsg', 401, 1), + (8595, 57048, 57079, 'OP_WorldShutdownUpdateMsg', 403, 1), + (8596, 57048, 57079, 'OP_DisplayMailScreenMsg', 404, 1), + (8597, 57048, 57079, 'OP_ClientIdleBeginMsg', 405, 1), + (8598, 57048, 57079, 'OP_ClientIdleEndMsg', 406, 1), + (8599, 57048, 57079, 'OP_PurchaseConsignmentLoreCheckRe', 407, 1), + (8600, 57048, 57079, 'OP_NotifyApprenticeStoppedMentori', 408, 1), + (8601, 57048, 57079, 'OP_CorruptedClientMsg', 409, 1), + (8602, 57048, 57079, 'OP_WorldDataChangeMsg', 410, 1), + (8603, 57048, 57079, 'OP_MailEventNotificationMsg', 411, 1), + (8604, 57048, 57079, 'OP_RestartZoneMsg', 412, 1), + (8605, 57048, 57079, 'OP_FlightPathsMsg', 413, 1), + (8606, 57048, 57079, 'OP_CharacterLinkdeadMsg', 414, 1), + (8607, 57048, 57079, 'OP_CharTransferStartRequestMsg', 415, 1), + (8608, 57048, 57079, 'OP_CharTransferStartReplyMsg', 416, 1), + (8609, 57048, 57079, 'OP_CharTransferRequestMsg', 417, 1), + (8610, 57048, 57079, 'OP_CharTransferReplyMsg', 418, 1), + (8611, 57048, 57079, 'OP_CharTransferRollbackRequestMsg', 419, 1), + (8612, 57048, 57079, 'OP_CharTransferCommitRequestMsg', 420, 1), + (8613, 57048, 57079, 'OP_CharTransferRollbackReplyMsg', 421, 1), + (8614, 57048, 57079, 'OP_CharTransferCommitReplyMsg', 422, 1), + (8615, 57048, 57079, 'OP_GetCharacterSerializedRequestM', 423, 1), + (8616, 57048, 57079, 'OP_GetCharacterSerializedReplyMsg', 424, 1), + (8617, 57048, 57079, 'OP_CreateCharFromCBBRequestMsg', 425, 1), + (8618, 57048, 57079, 'OP_CreateCharFromCBBReplyMsg', 426, 1), + (8619, 57048, 57079, 'OP_HousingDataChangedMsg', 427, 1), + (8620, 57048, 57079, 'OP_HousingRestoreMsg', 428, 1), + (8621, 57048, 57079, 'OP_AuctionItem', 429, 1), + (8622, 57048, 57079, 'OP_AuctionItemReply', 430, 1), + (8623, 57048, 57079, 'OP_AuctionCoin', 431, 1), + (8624, 57048, 57079, 'OP_AuctionCoinReply', 432, 1), + (8625, 57048, 57079, 'OP_AuctionCharacter', 433, 1), + (8626, 57048, 57079, 'OP_AuctionCharacterReply', 434, 1), + (8627, 57048, 57079, 'OP_AuctionCommitMsg', 435, 1), + (8628, 57048, 57079, 'OP_AuctionAbortMsg', 436, 1), + (8629, 57048, 57079, 'OP_CharTransferValidateRequestMsg', 437, 1), + (8630, 57048, 57079, 'OP_CharTransferValidateReplyMsg', 438, 1), + (8631, 57048, 57079, 'OP_RaceRestrictionMsg', 439, 1), + (8632, 57048, 57079, 'OP_SetInstanceDisplayNameMsg', 440, 1), + (8633, 57048, 57079, 'OP_GetAuctionAssetIDMsg', 441, 1), + (8634, 57048, 57079, 'OP_GetAuctionAssetIDReplyMsg', 442, 1), + (8635, 57048, 57079, 'OP_ResendWorldChannelsMsg', 443, 1), + (8636, 57048, 57079, 'OP_DisplayExchangeScreenMsg', 444, 1), + (8637, 57048, 57079, 'OP_ArenaGameTypesMsg', 445, 1), + (8638, 57048, 57079, 'OP_AuditAuctionEventMsg', 446, 1), + (8639, 57048, 57079, 'OP_InviteRequestMsg', 447, 1), + (8640, 57048, 57079, 'OP_InviteResponseMsg', 448, 1), + (8641, 57048, 57079, 'OP_InviteTargetResponseMsg', 449, 1), + (8642, 57048, 57079, 'OP_InspectPlayerRequestMsg', 450, 1), + (8643, 57048, 57079, 'OP_DispatchMsg', 451, 1), + (8644, 57048, 57079, 'OP_DisplayEventMsg', 452, 1), + (8645, 57048, 57079, 'OP_PrePossessionMsg', 453, 1), + (8646, 57048, 57079, 'OP_PostPossessionMsg', 454, 1), + (8647, 57048, 57079, 'OP_ArenaCreate', 456, 1), + (8648, 57048, 57079, 'OP_ArenaList', 457, 1), + (8649, 57048, 57079, 'OP_ArenaWindow', 465, 1), + (8650, 57048, 57079, 'OP_HouseItemsList', 484, 1), + (8651, 57048, 57079, 'OP_CurrentPet', 485, 1), + (8652, 57048, 57079, 'OP_AdventureList', 488, 1), + (8653, 57048, 57079, 'OP_CancelSpellCast', 489, 1), + (8654, 57048, 57079, 'OP_ClearForLandingMsg', 491, 1), + (8655, 57048, 57079, 'OP_UpdateTitleCmd', 494, 1), + (8656, 57048, 57079, 'OP_AttackAllowed', 500, 1), + (8657, 57048, 57079, 'OP_AttackNotAllowed', 501, 1), + (8658, 57048, 57079, 'OP_BagOptions', 502, 1), + (8659, 57048, 57079, 'OP_LFGGroupSearch', 504, 1), + (8660, 57048, 57079, 'OP_CharacterHousingList', 507, 1), + (8661, 57048, 57079, 'OP_DressingRoom', 510, 1), + (8662, 57048, 57079, 'OP_PlayLon', 511, 1), + (8663, 57048, 57079, 'OP_SkillInfoRequest', 514, 1), + (8664, 57048, 57079, 'OP_SkillInfoResponse', 515, 1), + (8665, 57048, 57079, 'OP_LFGUpdateMsg', 518, 1), + (8666, 57048, 57079, 'OP_BadLanguageFilter', 519, 1), + (8667, 57048, 57079, 'OP_VoiceChatChannel', 520, 1), + (8668, 57048, 57079, 'OP_MapRequest', 521, 1), + (8669, 57048, 57079, 'OP_MarketFundsUpdate', 526, 1), + (8670, 57048, 57079, 'OP_UIEvent', 527, 1), + (8671, 57048, 57079, 'OP_MarketAddFundsRequest', 528, 1), + (8672, 57048, 57079, 'OP_MarketAddFundsReply', 529, 1), + (8673, 57048, 57079, 'OP_MarketPurchase', 531, 1), + (8674, 57048, 57079, 'OP_MarketPlacePrices', 532, 1), + (8675, 57048, 57079, 'OP_MarketPlaceItems', 537, 1), + (8676, 57048, 57079, 'OP_RecipeBook', 538, 1), + (8677, 57048, 57079, 'OP_CreateCharacterDungeon', 547, 1), + (8678, 57048, 57079, 'OP_DungeonMakerEnter', 548, 1), + (8679, 57048, 57079, 'OP_DungeonMakerItemRequest', 550, 1), + (8680, 57048, 57079, 'OP_CharacterCreatedDungeons', 551, 1), + (8681, 57048, 57079, 'OP_DungeonMakerToolboxList', 552, 1), + (8682, 57048, 57079, 'OP_DungeonMakerUnknown', 553, 1), + (8683, 57048, 57079, 'OP_DungeonMakerUnknown1', 554, 1), + (8684, 57048, 57079, 'OP_PlayerPollPopup', 556, 1), + (8685, 57048, 57079, 'OP_PlayerPollAnswer', 557, 1), + (8686, 57048, 57079, 'OP_MentorPopup', 558, 1), + (8687, 57048, 57079, 'OP_LoadWelcomeWindow', 560, 1), + (8688, 57048, 57079, 'OP_OpenCharCust', 561, 1), + (8689, 57048, 57079, 'OP_SubmitCharCust', 562, 1), + (8690, 57048, 57079, 'OP_QueAllBgSolo', 564, 1), + (8691, 57048, 57079, 'OP_ZoneBgInstanceList', 566, 1), + (8692, 57048, 57079, 'OP_WorldTravelAvail', 570, 1), + (8693, 57048, 57079, 'OP_Launchpad', 572, 1), + (8694, 57048, 57079, 'OP_PaperdollImage', 574, 1), + (8695, 57048, 57079, 'OP_LoadCalendarEvents', 575, 1), + (8696, 57048, 57079, 'OP_VideoUploaded', 576, 1), + (8697, 57048, 57079, 'OP_SavageBarInitMsg', 577, 1), + (8698, 57048, 57079, 'OP_PetOptionsResponse', 578, 1), + (8699, 57048, 57079, 'OP_DungeonMakerItemResponse', 579, 1), + (8700, 57048, 57079, 'OP_CharacterMounts', 581, 1), + (8701, 57048, 57079, 'OP_RecipeListUnknown', 590, 1), + (8702, 57048, 57079, 'OP_EqBetaCopyRequest', 596, 1), + (8703, 57048, 57079, 'OP_EqHearChatCmd', 597, 1), + (8704, 57048, 57079, 'OP_EqDisplayTextCmd', 598, 1), + (8705, 57048, 57079, 'OP_EqCreateGhostCmd', 599, 1), + (8706, 57048, 57079, 'OP_EqCreateWidgetCmd', 600, 1), + (8707, 57048, 57079, 'OP_EqCreateSignWidgetCmd', 601, 1), + (8708, 57048, 57079, 'OP_EqDestroyGhostCmd', 602, 1), + (8709, 57048, 57079, 'OP_EqUpdateGhostCmd', 603, 1), + (8710, 57048, 57079, 'OP_EqSetControlGhostCmd', 604, 1), + (8711, 57048, 57079, 'OP_EqSetPOVGhostCmd', 605, 1), + (8712, 57048, 57079, 'OP_EqHearCombatCmd', 606, 1), + (8713, 57048, 57079, 'OP_EqHearSpellCastCmd', 607, 1), + (8714, 57048, 57079, 'OP_EQHearProcCmd', 608, 1), + (8715, 57048, 57079, 'OP_EQHearResEffectCmd', 609, 1), + (8716, 57048, 57079, 'OP_EqHearSpellInterruptCmd', 610, 1), + (8717, 57048, 57079, 'OP_EqHearSpellFizzleCmd', 611, 1), + (8718, 57048, 57079, 'OP_EqHearConsiderCmd', 612, 1), + (8719, 57048, 57079, 'OP_EqUpdateSubClassesCmd', 613, 1), + (8720, 57048, 57079, 'OP_EqCreateListBoxCmd', 614, 1), + (8721, 57048, 57079, 'OP_EqSetDebugPathPointsCmd', 615, 1), + (8722, 57048, 57079, 'OP_EqCannedEmoteCmd', 617, 1), + (8723, 57048, 57079, 'OP_EqStateCmd', 618, 1), + (8724, 57048, 57079, 'OP_EqPlaySoundCmd', 619, 1), + (8725, 57048, 57079, 'OP_EqPlaySound3DCmd', 620, 1), + (8726, 57048, 57079, 'OP_EqPlayVoiceCmd', 621, 1), + (8727, 57048, 57079, 'OP_EqHearDrowningCmd', 622, 1), + (8728, 57048, 57079, 'OP_EqHearDeathCmd', 623, 1), + (8729, 57048, 57079, 'OP_EqGroupMemberRemovedCmd', 624, 1), + (8730, 57048, 57079, 'OP_EqHearChainEffectCmd', 625, 1), + (8731, 57048, 57079, 'OP_EqReceiveOfferCmd', 626, 1), + (8732, 57048, 57079, 'OP_EqInspectPCResultsCmd', 627, 1), + (8733, 57048, 57079, 'OP_EqDrawablePathGraphCmd', 628, 1), + (8734, 57048, 57079, 'OP_EqDialogOpenCmd', 629, 1), + (8735, 57048, 57079, 'OP_EqDialogCloseCmd', 630, 1), + (8736, 57048, 57079, 'OP_EqFactionUpdateCmd', 631, 1), + (8737, 57048, 57079, 'OP_EqCollectionUpdateCmd', 632, 1), + (8738, 57048, 57079, 'OP_EqCollectionFilterCmd', 633, 1), + (8739, 57048, 57079, 'OP_EqCollectionItemCmd', 634, 1), + (8740, 57048, 57079, 'OP_EqQuestJournalUpdateCmd', 635, 1), + (8741, 57048, 57079, 'OP_EqMentoring', 636, 1), + (8742, 57048, 57079, 'OP_EqQuestJournalReplyCmd', 637, 1), + (8743, 57048, 57079, 'OP_EqQuestGroupCmd', 638, 1), + (8744, 57048, 57079, 'OP_EqUpdateMerchantCmd', 639, 1), + (8745, 57048, 57079, 'OP_EqUpdateStoreCmd', 640, 1), + (8746, 57048, 57079, 'OP_EqUpdatePlayerTradeCmd', 641, 1), + (8747, 57048, 57079, 'OP_EqHelpPathCmd', 642, 1), + (8748, 57048, 57079, 'OP_EqHelpPathClearCmd', 643, 1), + (8749, 57048, 57079, 'OP_EqUpdateBankCmd', 644, 1), + (8750, 57048, 57079, 'OP_EqExamineInfoCmd', 645, 1), + (8751, 57048, 57079, 'OP_EqCloseWindowCmd', 646, 1), + (8752, 57048, 57079, 'OP_EqUpdateLootCmd', 647, 1), + (8753, 57048, 57079, 'OP_EqJunctionListCmd', 648, 1), + (8754, 57048, 57079, 'OP_EqShowDeathWindowCmd', 649, 1), + (8755, 57048, 57079, 'OP_EqDisplaySpellFailCmd', 650, 1), + (8756, 57048, 57079, 'OP_EqSpellCastStartCmd', 651, 1), + (8757, 57048, 57079, 'OP_EqSpellCastEndCmd', 652, 1), + (8758, 57048, 57079, 'OP_EqResurrectedCmd', 653, 1), + (8759, 57048, 57079, 'OP_EqChoiceWinCmd', 654, 1), + (8760, 57048, 57079, 'OP_EqSetDefaultVerbCmd', 655, 1), + (8761, 57048, 57079, 'OP_EqInstructionWindowCmd', 656, 1), + (8762, 57048, 57079, 'OP_EqInstructionWindowCloseCmd', 657, 1), + (8763, 57048, 57079, 'OP_EqInstructionWindowGoalCmd', 658, 1), + (8764, 57048, 57079, 'OP_EqInstructionWindowTaskCmd', 659, 1), + (8765, 57048, 57079, 'OP_EqEnableGameEventCmd', 660, 1), + (8766, 57048, 57079, 'OP_EqShowWindowCmd', 661, 1), + (8767, 57048, 57079, 'OP_EqEnableWindowCmd', 662, 1), + (8768, 57048, 57079, 'OP_EqFlashWindowCmd', 663, 1), + (8769, 57048, 57079, 'OP_EqHearPlayFlavorCmd', 665, 1), + (8770, 57048, 57079, 'OP_EqUpdateSignWidgetCmd', 666, 1), + (8771, 57048, 57079, 'OP_EqDebugPVDCmd', 667, 1), + (8772, 57048, 57079, 'OP_EqShowBookCmd', 668, 1), + (8773, 57048, 57079, 'OP_EqQuestionnaireCmd', 669, 1), + (8774, 57048, 57079, 'OP_EqGetProbsCmd', 671, 1), + (8775, 57048, 57079, 'OP_EqHearHealCmd', 672, 1), + (8776, 57048, 57079, 'OP_EqChatChannelUpdateCmd', 673, 1), + (8777, 57048, 57079, 'OP_EqWhoChannelQueryReplyCmd', 674, 1), + (8778, 57048, 57079, 'OP_EqAvailWorldChannelsCmd', 675, 1), + (8779, 57048, 57079, 'OP_EqUpdateTargetCmd', 676, 1), + (8780, 57048, 57079, 'OP_BrokerSellList', 677, 1), + (8781, 57048, 57079, 'OP_EqConsignmentItemsCmd', 678, 1), + (8782, 57048, 57079, 'OP_EqStartBrokerCmd', 680, 1), + (8783, 57048, 57079, 'OP_EqMapExplorationCmd', 681, 1), + (8784, 57048, 57079, 'OP_EqStoreLogCmd', 682, 1), + (8785, 57048, 57079, 'OP_EqSpellMoveToRangeAndRetryCmd', 683, 1), + (8786, 57048, 57079, 'OP_EqUpdatePlayerMailCmd', 684, 1), + (8787, 57048, 57079, 'OP_GuildStatusUpdate', 687, 1), + (8788, 57048, 57079, 'OP_EqArenaResultsCmd', 688, 1), + (8789, 57048, 57079, 'OP_EqGuildBankEventActionCmd', 689, 1), + (8790, 57048, 57079, 'OP_EqGuildBankExamineInfoCmd', 690, 1), + (8791, 57048, 57079, 'OP_EqHearSpellNoLandCmd', 691, 1), + (8792, 57048, 57079, 'OP_Lottery', 692, 1), + (8793, 57048, 57079, 'OP_GuildRecruitingMemberInfo', 693, 1), + (8794, 57048, 57079, 'OP_GuildRecruiting', 694, 1), + (8795, 57048, 57079, 'OP_GuildRecruitingDetails', 695, 1), + (8796, 57048, 57079, 'OP_GuildRecruitingImage', 696, 1), + (8797, 57048, 57079, 'OP_TradeskillList', 697, 1), + (8798, 57048, 57079, 'OP_CharRenamed', 698, 1), + (8799, 57048, 57079, 'OP_UseAdornment', 708, 1), + (8800, 57048, 57079, 'OP_ExpPurchWindow', 714, 1), + (8801, 57048, 57079, 'OP_PointOfInterest', 718, 1), + (8802, 57048, 57079, 'OP_PointOfInterest2', 719, 1), + (8803, 57048, 57079, 'OP_TraitsList', 720, 1), + (8804, 57048, 57079, 'OP_CustomizeHouseDisplay', 723, 1), + (8805, 57048, 57079, 'OP_VoiceChatServer', 724, 1), + (8806, 57048, 57079, 'OP_SupplyDepot', 728, 1), + (8807, 57048, 57079, 'OP_EQHearThreatCmd', 729, 1), + (8808, 57048, 57079, 'OP_RecipeList', 730, 1), + (8809, 57048, 57079, 'OP_Research', 731, 1), + (8810, 57048, 57079, 'OP_CharacterCurrency', 732, 1), + (8811, 57048, 57079, 'OP_CharacterAchievements', 733, 1), + (8812, 57048, 57079, 'OP_AchievementUpdateMsg', 734, 1), + (8813, 57048, 57079, 'OP_EQHearDispellCmd', 735, 1), + (8814, 57048, 57079, 'OP_JournalQuestStoryline', 736, 1), + (8815, 57048, 57079, 'OP_DungeonPlayAsAvatarList', 737, 1), + (8816, 57048, 57079, 'OP_DungeonPlayAsAvatarSelected', 738, 1), + (8817, 57048, 57079, 'OP_MercHireWindow', 739, 1), + (8818, 57048, 57079, 'OP_MercUnknown', 740, 1), + (8819, 57048, 57079, 'OP_Unknown', 753, 1), + (9289, 57048, 57079, 'OP_DailyObjectives', 594, 1), + (9290, 1193, 1195, 'OP_Weakness', 575, 1), + (9291, 1198, 1199, 'OP_Weakness', 575, 1), + (9292, 1204, 1205, 'OP_Weakness', 576, 1), + (9293, 1208, 1208, 'OP_Weakness', 577, 1), + (9294, 57000, 57002, 'OP_Weakness', 577, 1), + (9295, 57003, 57014, 'OP_Weakness', 578, 1), + (9296, 57032, 57047, 'OP_Weakness', 578, 1), + (9297, 57048, 57079, 'OP_Weakness', 580, 1), + (9298, 57080, 57095, 'OP_LoginRequestMsg', 0, 1), + (9299, 57080, 57095, 'OP_LoginByNumRequestMsg', 1, 1), + (9300, 57080, 57095, 'OP_WSLoginRequestMsg', 2, 1), + (9301, 57080, 57095, 'OP_ESLoginRequestMsg', 3, 1), + (9302, 57080, 57095, 'OP_LoginReplyMsg', 4, 1), + (9303, 57080, 57095, 'OP_WSStatusReplyMsg', 5, 1), + (9304, 57080, 57095, 'OP_WorldStatusChangeMsg', 6, 1), + (9305, 57080, 57095, 'OP_AllWSDescRequestMsg', 7, 1), + (9306, 57080, 57095, 'OP_WorldListMsg', 8, 1), + (9307, 57080, 57095, 'OP_AllCharactersDescRequestMsg', 9, 1), + (9308, 57080, 57095, 'OP_AllCharactersDescReplyMsg', 10, 1), + (9309, 57080, 57095, 'OP_CreateCharacterRequestMsg', 11, 1), + (9310, 57080, 57095, 'OP_CreateCharacterReplyMsg', 12, 1), + (9311, 57080, 57095, 'OP_WSCreateCharacterRequestMsg', 13, 1), + (9312, 57080, 57095, 'OP_WSCreateCharacterReplyMsg', 14, 1), + (9313, 57080, 57095, 'OP_ReskinCharacterRequestMsg', 15, 1), + (9314, 57080, 57095, 'OP_DeleteCharacterRequestMsg', 16, 1), + (9315, 57080, 57095, 'OP_DeleteCharacterReplyMsg', 17, 1), + (9316, 57080, 57095, 'OP_PlayCharacterRequestMsg', 18, 1), + (9317, 57080, 57095, 'OP_PlayCharacterReplyMsg', 19, 1), + (9318, 57080, 57095, 'OP_ExpectClientAsCharacterReplyMs', 22, 1), + (9319, 57080, 57095, 'OP_ServerPlayCharacterRequestMsg', 23, 1), + (9320, 57080, 57095, 'OP_ServerPlayCharacterReplyMsg', 24, 1), + (9321, 57080, 57095, 'OP_ESInitMsg', 25, 1), + (9322, 57080, 57095, 'OP_ESReadyForClientsMsg', 26, 1), + (9323, 57080, 57095, 'OP_CreateZoneInstanceMsg', 29, 1), + (9324, 57080, 57095, 'OP_ZoneInstanceCreateReplyMsg', 30, 1), + (9325, 57080, 57095, 'OP_ZoneInstanceDestroyedMsg', 31, 1), + (9326, 57080, 57095, 'OP_ExpectClientAsCharacterRequest', 32, 1), + (9327, 57080, 57095, 'OP_ZoneInfoMsg', 33, 1), + (9328, 57080, 57095, 'OP_DoneLoadingZoneResourcesMsg', 34, 1), + (9329, 57080, 57095, 'OP_DoneSendingInitialEntitiesMsg', 35, 1), + (9330, 57080, 57095, 'OP_DoneLoadingEntityResourcesMsg', 36, 1), + (9331, 57080, 57095, 'OP_PredictionUpdateMsg', 37, 1), + (9332, 57080, 57095, 'OP_UpdatePositionMsg', 39, 1), + (9333, 57080, 57095, 'OP_SetRemoteCmdsMsg', 41, 1), + (9334, 57080, 57095, 'OP_RemoteCmdMsg', 42, 1), + (9335, 57080, 57095, 'OP_GameWorldTimeMsg', 43, 1), + (9336, 57080, 57095, 'OP_MOTDMsg', 44, 1), + (9337, 57080, 57095, 'OP_ZoneMOTDMsg', 45, 1), + (9338, 57080, 57095, 'OP_AvatarCreatedMsg', 46, 1), + (9339, 57080, 57095, 'OP_AvatarDestroyedMsg', 47, 1), + (9340, 57080, 57095, 'OP_RequestCampMsg', 50, 1), + (9341, 57080, 57095, 'OP_CampStartedMsg', 51, 1), + (9342, 57080, 57095, 'OP_CampAbortedMsg', 52, 1), + (9343, 57080, 57095, 'OP_WhoQueryRequestMsg', 53, 1), + (9344, 57080, 57095, 'OP_WhoQueryReplyMsg', 54, 1), + (9345, 57080, 57095, 'OP_MonitorReplyMsg', 55, 1), + (9346, 57080, 57095, 'OP_MonitorCharacterListMsg', 56, 1), + (9347, 57080, 57095, 'OP_MonitorCharacterListRequestMsg', 57, 1), + (9348, 57080, 57095, 'OP_ClientCmdMsg', 58, 1), + (9349, 57080, 57095, 'OP_DispatchESMsg', 59, 1), + (9350, 57080, 57095, 'OP_DispatchClientCmdMsg', 60, 1), + (9351, 57080, 57095, 'OP_UpdateTargetMsg', 61, 1), + (9352, 57080, 57095, 'OP_UpdateTargetLocMsg', 62, 1), + (9353, 57080, 57095, 'OP_UpdateCharacterSheetMsg', 63, 1), + (9354, 57080, 57095, 'OP_CharacterPet', 64, 1), + (9355, 57080, 57095, 'OP_CharacterMerc', 65, 1), + (9356, 57080, 57095, 'OP_UpdateSpellBookMsg', 66, 1), + (9357, 57080, 57095, 'OP_UpdateInventoryMsg', 68, 1), + (9358, 57080, 57095, 'OP_AfterInvSpellUpdate', 69, 1), + (9359, 57080, 57095, 'OP_UpdateRecipeBookMsg', 70, 1), + (9360, 57080, 57095, 'OP_RequestRecipeDetailsMsg', 71, 1), + (9361, 57080, 57095, 'OP_RecipeDetailsMsg', 72, 1), + (9362, 57080, 57095, 'OP_UpdateSkillBookMsg', 73, 1), + (9363, 57080, 57095, 'OP_UpdateSkillsMsg', 74, 1), + (9364, 57080, 57095, 'OP_UpdateOpportunityMsg', 75, 1), + (9365, 57080, 57095, 'OP_ChangeZoneMsg', 77, 1), + (9366, 57080, 57095, 'OP_ClientTeleportRequestMsg', 78, 1), + (9367, 57080, 57095, 'OP_TeleportWithinZoneMsg', 79, 1), + (9368, 57080, 57095, 'OP_TeleportWithinZoneNoReloadMsg', 80, 1), + (9369, 57080, 57095, 'OP_MigrateClientToZoneRequestMsg', 81, 1), + (9370, 57080, 57095, 'OP_MigrateClientToZoneReplyMsg', 82, 1), + (9371, 57080, 57095, 'OP_ReadyToZoneMsg', 84, 1), + (9372, 57080, 57095, 'OP_RemoveClientFromGroupMsg', 85, 1), + (9373, 57080, 57095, 'OP_RemoveGroupFromGroupMsg', 86, 1), + (9374, 57080, 57095, 'OP_MakeGroupLeaderMsg', 87, 1), + (9375, 57080, 57095, 'OP_GroupCreatedMsg', 88, 1), + (9376, 57080, 57095, 'OP_GroupDestroyedMsg', 89, 1), + (9377, 57080, 57095, 'OP_GroupMemberAddedMsg', 90, 1), + (9378, 57080, 57095, 'OP_GroupMemberRemovedMsg', 91, 1), + (9379, 57080, 57095, 'OP_GroupRemovedFromGroupMsg', 92, 1), + (9380, 57080, 57095, 'OP_GroupLeaderChangedMsg', 93, 1), + (9381, 57080, 57095, 'OP_GroupResendOOZDataMsg', 94, 1), + (9382, 57080, 57095, 'OP_GroupSettingsChangedMsg', 95, 1), + (9383, 57080, 57095, 'OP_OutOfZoneMemberDataMsg', 96, 1), + (9384, 57080, 57095, 'OP_SendLatestRequestMsg', 97, 1), + (9385, 57080, 57095, 'OP_ClearDataMsg', 98, 1), + (9386, 57080, 57095, 'OP_SetSocialMsg', 99, 1), + (9387, 57080, 57095, 'OP_ESStatusMsg', 100, 1), + (9388, 57080, 57095, 'OP_ESZoneInstanceStatusMsg', 101, 1), + (9389, 57080, 57095, 'OP_ZonesStatusRequestMsg', 102, 1), + (9390, 57080, 57095, 'OP_ZonesStatusMsg', 103, 1), + (9391, 57080, 57095, 'OP_ESWeatherRequestMsg', 104, 1), + (9392, 57080, 57095, 'OP_ESWeatherRequestEndMsg', 105, 1), + (9393, 57080, 57095, 'OP_DialogSelectMsg', 109, 1), + (9394, 57080, 57095, 'OP_DialogCloseMsg', 110, 1), + (9395, 57080, 57095, 'OP_RemoveSpellEffectMsg', 111, 1), + (9396, 57080, 57095, 'OP_RemoveConcentrationMsg', 112, 1), + (9397, 57080, 57095, 'OP_QuestJournalOpenMsg', 113, 1), + (9398, 57080, 57095, 'OP_QuestJournalInspectMsg', 114, 1), + (9399, 57080, 57095, 'OP_QuestJournalSetVisibleMsg', 115, 1), + (9400, 57080, 57095, 'OP_QuestJournalWaypointMsg', 116, 1), + (9401, 57080, 57095, 'OP_CreateGuildRequestMsg', 119, 1), + (9402, 57080, 57095, 'OP_CreateGuildReplyMsg', 120, 1), + (9403, 57080, 57095, 'OP_GuildsayMsg', 121, 1), + (9404, 57080, 57095, 'OP_FellowshipExpMsg', 122, 1), + (9405, 57080, 57095, 'OP_DeleteGuildMsg', 123, 1), + (9406, 57080, 57095, 'OP_GuildUpdateMsg', 124, 1), + (9407, 57080, 57095, 'OP_ConsignmentCloseStoreMsg', 125, 1), + (9408, 57080, 57095, 'OP_ConsignItemRequestMsg', 126, 1), + (9409, 57080, 57095, 'OP_ConsignItemResponseMsg', 127, 1), + (9410, 57080, 57095, 'OP_PurchaseConsignmentRequestMsg', 128, 1), + (9411, 57080, 57095, 'OP_LikeOption', 136, 1), + (9412, 57080, 57095, 'OP_PublishHouse', 138, 1), + (9413, 57080, 57095, 'OP_PlayerMadeInstancesScreen', 139, 1), + (9414, 57080, 57095, 'OP_PlayerMadeInstances', 140, 1), + (9415, 57080, 57095, 'OP_HouseDeletedRemotelyMsg', 142, 1), + (9416, 57080, 57095, 'OP_UpdateHouseDataMsg', 143, 1), + (9417, 57080, 57095, 'OP_UpdateHouseAccessDataMsg', 144, 1), + (9418, 57080, 57095, 'OP_PlayerHouseBaseScreenMsg', 145, 1), + (9419, 57080, 57095, 'OP_PlayerHousePurchaseScreenMsg', 146, 1), + (9420, 57080, 57095, 'OP_PlayerHouseAccessUpdateMsg', 147, 1), + (9421, 57080, 57095, 'OP_PlayerHouseDisplayStatusMsg', 148, 1), + (9422, 57080, 57095, 'OP_PlayerHouseCloseUIMsg', 149, 1), + (9423, 57080, 57095, 'OP_BuyPlayerHouseMsg', 150, 1), + (9424, 57080, 57095, 'OP_BuyPlayerHouseTintMsg', 151, 1), + (9425, 57080, 57095, 'OP_CollectAllHouseItemsMsg', 152, 1), + (9426, 57080, 57095, 'OP_RelinquishHouseMsg', 153, 1), + (9427, 57080, 57095, 'OP_EnterHouseMsg', 154, 1), + (9428, 57080, 57095, 'OP_ExitHouseMsg', 155, 1), + (9429, 57080, 57095, 'OP_HouseDefaultAccessSetMsg', 156, 1), + (9430, 57080, 57095, 'OP_HouseAccessSetMsg', 157, 1), + (9431, 57080, 57095, 'OP_HouseAccessRemoveMsg', 158, 1), + (9432, 57080, 57095, 'OP_PayHouseUpkeepMsg', 159, 1), + (9433, 57080, 57095, 'OP_MoveableObjectPlacementCriteri', 160, 1), + (9434, 57080, 57095, 'OP_EnterMoveObjectModeMsg', 161, 1), + (9435, 57080, 57095, 'OP_PositionMoveableObject', 162, 1), + (9436, 57080, 57095, 'OP_CancelMoveObjectModeMsg', 163, 1), + (9437, 57080, 57095, 'OP_ShaderCustomizationMsg', 164, 1), + (9438, 57080, 57095, 'OP_ReplaceableSubMeshesMsg', 165, 1), + (9439, 57080, 57095, 'OP_HouseCustomizationScreenMsg', 166, 1), + (9440, 57080, 57095, 'OP_CustomizationPurchaseRequestMs', 167, 1), + (9441, 57080, 57095, 'OP_CustomizationSetRequestMsg', 168, 1), + (9442, 57080, 57095, 'OP_CustomizationReplyMsg', 169, 1), + (9443, 57080, 57095, 'OP_TintWidgetsMsg', 170, 1), + (9444, 57080, 57095, 'OP_ExamineConsignmentRequestMsg', 171, 1), + (9445, 57080, 57095, 'OP_ExamineConsignmentResponseMsg', 172, 1), + (9446, 57080, 57095, 'OP_UISettingsResponseMsg', 173, 1), + (9447, 57080, 57095, 'OP_UIResetMsg', 174, 1), + (9448, 57080, 57095, 'OP_KeymapLoadMsg', 175, 1), + (9449, 57080, 57095, 'OP_KeymapNoneMsg', 176, 1), + (9450, 57080, 57095, 'OP_KeymapDataMsg', 177, 1), + (9451, 57080, 57095, 'OP_KeymapSaveMsg', 178, 1), + (9452, 57080, 57095, 'OP_DispatchSpellCmdMsg', 179, 1), + (9453, 57080, 57095, 'OP_EntityVerbsRequestMsg', 180, 1), + (9454, 57080, 57095, 'OP_EntityVerbsReplyMsg', 181, 1), + (9455, 57080, 57095, 'OP_EntityVerbsVerbMsg', 182, 1), + (9456, 57080, 57095, 'OP_ChatRelationshipUpdateMsg', 184, 1), + (9457, 57080, 57095, 'OP_LootItemsRequestMsg', 185, 1), + (9458, 57080, 57095, 'OP_StoppedLootingMsg', 186, 1), + (9459, 57080, 57095, 'OP_SitMsg', 187, 1), + (9460, 57080, 57095, 'OP_StandMsg', 188, 1), + (9461, 57080, 57095, 'OP_SatMsg', 189, 1), + (9462, 57080, 57095, 'OP_StoodMsg', 190, 1), + (9463, 57080, 57095, 'OP_ClearForTakeOffMsg', 191, 1), + (9464, 57080, 57095, 'OP_ReadyForTakeOffMsg', 192, 1), + (9465, 57080, 57095, 'OP_ShowIllusionsMsg', 193, 1), + (9466, 57080, 57095, 'OP_HideIllusionsMsg', 194, 1), + (9467, 57080, 57095, 'OP_ExamineItemRequestMsg', 195, 1), + (9468, 57080, 57095, 'OP_ReadBookPageMsg', 196, 1), + (9469, 57080, 57095, 'OP_DefaultGroupOptionsRequestMsg', 197, 1), + (9470, 57080, 57095, 'OP_DefaultGroupOptionsMsg', 198, 1), + (9471, 57080, 57095, 'OP_GroupOptionsMsg', 199, 1), + (9472, 57080, 57095, 'OP_DisplayGroupOptionsScreenMsg', 200, 1), + (9473, 57080, 57095, 'OP_PetOptions', 201, 1), + (9474, 57080, 57095, 'OP_DisplayInnVisitScreenMsg', 202, 1), + (9475, 57080, 57095, 'OP_DumpSchedulerMsg', 203, 1), + (9476, 57080, 57095, 'OP_LSCheckAcctLockMsg', 204, 1), + (9477, 57080, 57095, 'OP_WSAcctLockStatusMsg', 205, 1), + (9478, 57080, 57095, 'OP_RequestHelpRepathMsg', 206, 1), + (9479, 57080, 57095, 'OP_RequestTargetLocMsg', 207, 1), + (9480, 57080, 57095, 'OP_UpdateMotdMsg', 208, 1), + (9481, 57080, 57095, 'OP_DestUpdateReq', 210, 1), + (9482, 57080, 57095, 'OP_PerformPlayerKnockbackMsg', 213, 1), + (9483, 57080, 57095, 'OP_PerformCameraShakeMsg', 214, 1), + (9484, 57080, 57095, 'OP_PopulateSkillMapsMsg', 215, 1), + (9485, 57080, 57095, 'OP_CancelledFeignMsg', 216, 1), + (9486, 57080, 57095, 'OP_SysClient', 218, 1), + (9487, 57080, 57095, 'OP_ShowCreateFromRecipeUIMsg', 219, 1), + (9488, 57080, 57095, 'OP_CancelCreateFromRecipeMsg', 220, 1), + (9489, 57080, 57095, 'OP_BeginItemCreationMsg', 221, 1), + (9490, 57080, 57095, 'OP_StopItemCreationMsg', 222, 1), + (9491, 57080, 57095, 'OP_ShowItemCreationProcessUIMsg', 223, 1), + (9492, 57080, 57095, 'OP_UpdateItemCreationProcessUIMsg', 224, 1), + (9493, 57080, 57095, 'OP_DisplayTSEventReactionMsg', 225, 1), + (9494, 57080, 57095, 'OP_ShowRecipeBookMsg', 226, 1), + (9495, 57080, 57095, 'OP_KnowledgebaseRequestMsg', 227, 1), + (9496, 57080, 57095, 'OP_KnowledgebaseResponseMsg', 228, 1), + (9497, 57080, 57095, 'OP_CSTicketHeaderRequestMsg', 229, 1), + (9498, 57080, 57095, 'OP_CSTicketInfoMsg', 230, 1), + (9499, 57080, 57095, 'OP_CSTicketCommentRequestMsg', 231, 1), + (9500, 57080, 57095, 'OP_CSTicketCommentResponseMsg', 232, 1), + (9501, 57080, 57095, 'OP_CSTicketCreateMsg', 233, 1), + (9502, 57080, 57095, 'OP_CSTicketAddCommentMsg', 234, 1), + (9503, 57080, 57095, 'OP_CSTicketDeleteMsg', 235, 1), + (9504, 57080, 57095, 'OP_CSTicketChangeNotificationMsg', 236, 1), + (9505, 57080, 57095, 'OP_WorldDataUpdateMsg', 237, 1), + (9506, 57080, 57095, 'OP_KnownLanguagesMsg', 238, 1), + (9507, 57080, 57095, 'OP_LsRequestClientCrashLogMsg', 239, 1), + (9508, 57080, 57095, 'OP_LsClientBaselogReplyMsg', 240, 1), + (9509, 57080, 57095, 'OP_LsClientCrashlogReplyMsg', 241, 1), + (9510, 57080, 57095, 'OP_LsClientAlertlogReplyMsg', 242, 1), + (9511, 57080, 57095, 'OP_LsClientVerifylogReplyMsg', 243, 1), + (9512, 57080, 57095, 'OP_ClientTeleportToLocationMsg', 244, 1), + (9513, 57080, 57095, 'OP_UpdateClientPredFlagsMsg', 245, 1), + (9514, 57080, 57095, 'OP_ChangeServerControlFlagMsg', 246, 1), + (9515, 57080, 57095, 'OP_CSToolsRequestMsg', 247, 1), + (9516, 57080, 57095, 'OP_CSToolsResponseMsg', 248, 1), + (9517, 57080, 57095, 'OP_AddSocialStructureStandingMsg', 249, 1), + (9518, 57080, 57095, 'OP_CreateBoatTransportsMsg', 250, 1), + (9519, 57080, 57095, 'OP_PositionBoatTransportMsg', 251, 1), + (9520, 57080, 57095, 'OP_MigrateBoatTransportMsg', 252, 1), + (9521, 57080, 57095, 'OP_MigrateBoatTransportReplyMsg', 253, 1), + (9522, 57080, 57095, 'OP_DisplayDebugNLLPointsMsg', 254, 1), + (9523, 57080, 57095, 'OP_ExamineInfoRequestMsg', 255, 1), + (9524, 57080, 57095, 'OP_QuickbarInitMsg', 256, 1), + (9525, 57080, 57095, 'OP_QuickbarUpdateMsg', 257, 1), + (9526, 57080, 57095, 'OP_MacroInitMsg', 258, 1), + (9527, 57080, 57095, 'OP_MacroUpdateMsg', 259, 1), + (9528, 57080, 57095, 'OP_QuestionnaireMsg', 260, 1), + (9529, 57080, 57095, 'OP_LevelChangedMsg', 261, 1), + (9530, 57080, 57095, 'OP_SpellGainedMsg', 262, 1), + (9531, 57080, 57095, 'OP_EncounterBrokenMsg', 263, 1), + (9532, 57080, 57095, 'OP_OnscreenMsgMsg', 264, 1), + (9533, 57080, 57095, 'OP_DisplayWarningMsg', 265, 1), + (9534, 57080, 57095, 'OP_ModifyGuildMsg', 266, 1), + (9535, 57080, 57095, 'OP_GuildEventMsg', 267, 1), + (9536, 57080, 57095, 'OP_GuildEventAddMsg', 268, 1), + (9537, 57080, 57095, 'OP_GuildEventActionMsg', 269, 1), + (9538, 57080, 57095, 'OP_GuildEventListMsg', 270, 1), + (9539, 57080, 57095, 'OP_RequestGuildEventDetailsMsg', 271, 1), + (9540, 57080, 57095, 'OP_GuildEventDetailsMsg', 272, 1), + (9541, 57080, 57095, 'OP_RequestGuildInfoMsg', 273, 1), + (9542, 57080, 57095, 'OP_GuildBankActionMsg', 274, 1), + (9543, 57080, 57095, 'OP_GuildBankActionResponseMsg', 275, 1), + (9544, 57080, 57095, 'OP_GuildBankItemDetailsRequestMsg', 276, 1), + (9545, 57080, 57095, 'OP_GuildBankItemDetailsResponseMs', 277, 1), + (9546, 57080, 57095, 'OP_GuildBankUpdateMsg', 278, 1), + (9547, 57080, 57095, 'OP_GuildBankEventListMsg', 279, 1), + (9548, 57080, 57095, 'OP_RequestGuildBankEventDetailsMs', 280, 1), + (9549, 57080, 57095, 'OP_RewardPackMsg', 281, 1), + (9550, 57080, 57095, 'OP_RenameGuildMsg', 282, 1), + (9551, 57080, 57095, 'OP_ZoneToFriendRequestMsg', 283, 1), + (9552, 57080, 57095, 'OP_ZoneToFriendReplyMsg', 284, 1), + (9553, 57080, 57095, 'OP_ChatCreateChannelMsg', 285, 1), + (9554, 57080, 57095, 'OP_ChatJoinChannelMsg', 286, 1), + (9555, 57080, 57095, 'OP_ChatWhoChannelMsg', 287, 1), + (9556, 57080, 57095, 'OP_ChatLeaveChannelMsg', 288, 1), + (9557, 57080, 57095, 'OP_ChatTellChannelMsg', 289, 1), + (9558, 57080, 57095, 'OP_ChatTellUserMsg', 290, 1), + (9559, 57080, 57095, 'OP_ChatToggleFriendMsg', 291, 1), + (9560, 57080, 57095, 'OP_BrokerAddBag', 292, 1), + (9561, 57080, 57095, 'OP_BrokerRemoveBag', 293, 1), + (9562, 57080, 57095, 'OP_ChatToggleIgnoreMsg', 294, 1), + (9563, 57080, 57095, 'OP_ChatSendFriendsMsg', 295, 1), + (9564, 57080, 57095, 'OP_ChatSendIgnoresMsg', 296, 1), + (9565, 57080, 57095, 'OP_QuestReward', 320, 1), + (9566, 57080, 57095, 'OP_ChatFiltersMsg', 335, 1), + (9567, 57080, 57095, 'OP_MailGetMessageMsg', 338, 1), + (9568, 57080, 57095, 'OP_MailSendMessageMsg', 339, 1), + (9569, 57080, 57095, 'OP_MailDeleteMessageMsg', 340, 1), + (9570, 57080, 57095, 'OP_MailGetHeadersReplyMsg', 341, 1), + (9571, 57080, 57095, 'OP_MailGetMessageReplyMsg', 342, 1), + (9572, 57080, 57095, 'OP_MailSendMessageReplyMsg', 343, 1), + (9573, 57080, 57095, 'OP_MailCommitSendMessageMsg', 344, 1), + (9574, 57080, 57095, 'OP_MailSendSystemMessageMsg', 345, 1), + (9575, 57080, 57095, 'OP_MailRemoveAttachFromMailMsg', 346, 1), + (9576, 57080, 57095, 'OP_WaypointRequestMsg', 348, 1), + (9577, 57080, 57095, 'OP_WaypointReplyMsg', 349, 1), + (9578, 57080, 57095, 'OP_WaypointSelectMsg', 350, 1), + (9579, 57080, 57095, 'OP_WaypointUpdateMsg', 351, 1), + (9580, 57080, 57095, 'OP_CharNameChangedMsg', 352, 1), + (9581, 57080, 57095, 'OP_ShowZoneTeleporterDestinations', 353, 1), + (9582, 57080, 57095, 'OP_SelectZoneTeleporterDestinatio', 354, 1), + (9583, 57080, 57095, 'OP_ReloadLocalizedTxtMsg', 355, 1), + (9584, 57080, 57095, 'OP_RequestGuildMembershipMsg', 356, 1), + (9585, 57080, 57095, 'OP_GuildMembershipResponseMsg', 357, 1), + (9586, 57080, 57095, 'OP_LeaveGuildNotifyMsg', 358, 1), + (9587, 57080, 57095, 'OP_JoinGuildNotifyMsg', 359, 1), + (9588, 57080, 57095, 'OP_AvatarUpdateMsg', 360, 1), + (9589, 57080, 57095, 'OP_BioUpdateMsg', 362, 1), + (9590, 57080, 57095, 'OP_InspectPlayerMsg', 363, 1), + (9591, 57080, 57095, 'OP_WSServerLockMsg', 364, 1), + (9592, 57080, 57095, 'OP_LSServerLockMsg', 365, 1), + (9593, 57080, 57095, 'OP_WSServerHideMsg', 366, 1), + (9594, 57080, 57095, 'OP_CsCategoryRequestMsg', 367, 1), + (9595, 57080, 57095, 'OP_CsCategoryResponseMsg', 368, 1), + (9596, 57080, 57095, 'OP_KnowledgeWindowSlotMappingMsg', 369, 1), + (9597, 57080, 57095, 'OP_AFKUpdateMsg', 370, 1), + (9598, 57080, 57095, 'OP_AnonUpdateMsg', 371, 1), + (9599, 57080, 57095, 'OP_UpdateActivePublicZonesMsg', 372, 1), + (9600, 57080, 57095, 'OP_UnknownNpcMsg', 373, 1), + (9601, 57080, 57095, 'OP_PromoFlagsDetailsMsg', 374, 1), + (9602, 57080, 57095, 'OP_ConsignViewCreateMsg', 375, 1), + (9603, 57080, 57095, 'OP_ConsignViewGetPageMsg', 376, 1), + (9604, 57080, 57095, 'OP_ConsignViewReleaseMsg', 377, 1), + (9605, 57080, 57095, 'OP_ConsignRemoveItemsMsg', 378, 1), + (9606, 57080, 57095, 'OP_UpdateDebugRadiiMsg', 379, 1), + (9607, 57080, 57095, 'OP_ReportMsg', 380, 1), + (9608, 57080, 57095, 'OP_UpdateRaidMsg', 381, 1), + (9609, 57080, 57095, 'OP_ConsignViewSortMsg', 383, 1), + (9610, 57080, 57095, 'OP_TitleUpdateMsg', 384, 1), + (9611, 57080, 57095, 'OP_ClientFellMsg', 385, 1), + (9612, 57080, 57095, 'OP_ClientInDeathRegionMsg', 386, 1), + (9613, 57080, 57095, 'OP_CampClientMsg', 387, 1), + (9614, 57080, 57095, 'OP_CSToolAccessResponseMsg', 388, 1), + (9615, 57080, 57095, 'OP_UpdateGroupMemberDataMsg', 388, 1), + (9616, 57080, 57095, 'OP_TrackingUpdateMsg', 389, 1), + (9617, 57080, 57095, 'OP_BeginTrackingMsg', 390, 1), + (9618, 57080, 57095, 'OP_StopTrackingMsg', 391, 1), + (9619, 57080, 57095, 'OP_GetAvatarAccessRequestForCSToo', 393, 1), + (9620, 57080, 57095, 'OP_AdvancementRequestMsg', 394, 1), + (9621, 57080, 57095, 'OP_MapFogDataInitMsg', 395, 1), + (9622, 57080, 57095, 'OP_MapFogDataUpdateMsg', 396, 1), + (9623, 57080, 57095, 'OP_CloseGroupInviteWindowMsg', 397, 1), + (9624, 57080, 57095, 'OP_WorldPingMsg', 399, 1), + (9625, 57080, 57095, 'OP_MoveLogUpdateMsg', 400, 1), + (9626, 57080, 57095, 'OP_OfferQuestMsg', 401, 1), + (9627, 57080, 57095, 'OP_WorldShutdownUpdateMsg', 403, 1), + (9628, 57080, 57095, 'OP_DisplayMailScreenMsg', 404, 1), + (9629, 57080, 57095, 'OP_ClientIdleBeginMsg', 405, 1), + (9630, 57080, 57095, 'OP_ClientIdleEndMsg', 406, 1), + (9631, 57080, 57095, 'OP_PurchaseConsignmentLoreCheckRe', 407, 1), + (9632, 57080, 57095, 'OP_NotifyApprenticeStoppedMentori', 408, 1), + (9633, 57080, 57095, 'OP_CorruptedClientMsg', 409, 1), + (9634, 57080, 57095, 'OP_WorldDataChangeMsg', 410, 1), + (9635, 57080, 57095, 'OP_MailEventNotificationMsg', 411, 1), + (9636, 57080, 57095, 'OP_RestartZoneMsg', 412, 1), + (9637, 57080, 57095, 'OP_FlightPathsMsg', 413, 1), + (9638, 57080, 57095, 'OP_CharacterLinkdeadMsg', 414, 1), + (9639, 57080, 57095, 'OP_CharTransferStartRequestMsg', 415, 1), + (9640, 57080, 57095, 'OP_CharTransferStartReplyMsg', 416, 1), + (9641, 57080, 57095, 'OP_CharTransferRequestMsg', 417, 1), + (9642, 57080, 57095, 'OP_CharTransferReplyMsg', 418, 1), + (9643, 57080, 57095, 'OP_CharTransferRollbackRequestMsg', 419, 1), + (9644, 57080, 57095, 'OP_CharTransferCommitRequestMsg', 420, 1), + (9645, 57080, 57095, 'OP_CharTransferRollbackReplyMsg', 421, 1), + (9646, 57080, 57095, 'OP_CharTransferCommitReplyMsg', 422, 1), + (9647, 57080, 57095, 'OP_GetCharacterSerializedRequestM', 423, 1), + (9648, 57080, 57095, 'OP_GetCharacterSerializedReplyMsg', 424, 1), + (9649, 57080, 57095, 'OP_CreateCharFromCBBRequestMsg', 425, 1), + (9650, 57080, 57095, 'OP_CreateCharFromCBBReplyMsg', 426, 1), + (9651, 57080, 57095, 'OP_HousingDataChangedMsg', 427, 1), + (9652, 57080, 57095, 'OP_HousingRestoreMsg', 428, 1), + (9653, 57080, 57095, 'OP_AuctionItem', 429, 1), + (9654, 57080, 57095, 'OP_AuctionItemReply', 430, 1), + (9655, 57080, 57095, 'OP_AuctionCoin', 431, 1), + (9656, 57080, 57095, 'OP_AuctionCoinReply', 432, 1), + (9657, 57080, 57095, 'OP_AuctionCharacter', 433, 1), + (9658, 57080, 57095, 'OP_AuctionCharacterReply', 434, 1), + (9659, 57080, 57095, 'OP_AuctionCommitMsg', 435, 1), + (9660, 57080, 57095, 'OP_AuctionAbortMsg', 436, 1), + (9661, 57080, 57095, 'OP_CharTransferValidateRequestMsg', 437, 1), + (9662, 57080, 57095, 'OP_CharTransferValidateReplyMsg', 438, 1), + (9663, 57080, 57095, 'OP_RaceRestrictionMsg', 439, 1), + (9664, 57080, 57095, 'OP_SetInstanceDisplayNameMsg', 440, 1), + (9665, 57080, 57095, 'OP_GetAuctionAssetIDMsg', 441, 1), + (9666, 57080, 57095, 'OP_GetAuctionAssetIDReplyMsg', 442, 1), + (9667, 57080, 57095, 'OP_ResendWorldChannelsMsg', 443, 1), + (9668, 57080, 57095, 'OP_DisplayExchangeScreenMsg', 444, 1), + (9669, 57080, 57095, 'OP_ArenaGameTypesMsg', 445, 1), + (9670, 57080, 57095, 'OP_AuditAuctionEventMsg', 446, 1), + (9671, 57080, 57095, 'OP_InviteRequestMsg', 447, 1), + (9672, 57080, 57095, 'OP_InviteResponseMsg', 448, 1), + (9673, 57080, 57095, 'OP_InviteTargetResponseMsg', 449, 1), + (9674, 57080, 57095, 'OP_InspectPlayerRequestMsg', 450, 1), + (9675, 57080, 57095, 'OP_DispatchMsg', 451, 1), + (9676, 57080, 57095, 'OP_DisplayEventMsg', 452, 1), + (9677, 57080, 57095, 'OP_PrePossessionMsg', 453, 1), + (9678, 57080, 57095, 'OP_PostPossessionMsg', 454, 1), + (9679, 57080, 57095, 'OP_ArenaCreate', 456, 1), + (9680, 57080, 57095, 'OP_ArenaList', 457, 1), + (9681, 57080, 57095, 'OP_ArenaWindow', 465, 1), + (9682, 57080, 57095, 'OP_HouseItemsList', 484, 1), + (9683, 57080, 57095, 'OP_CurrentPet', 485, 1), + (9684, 57080, 57095, 'OP_AdventureList', 488, 1), + (9685, 57080, 57095, 'OP_CancelSpellCast', 489, 1), + (9686, 57080, 57095, 'OP_ClearForLandingMsg', 491, 1), + (9687, 57080, 57095, 'OP_UpdateTitleCmd', 494, 1), + (9688, 57080, 57095, 'OP_AttackAllowed', 500, 1), + (9689, 57080, 57095, 'OP_AttackNotAllowed', 501, 1), + (9690, 57080, 57095, 'OP_BagOptions', 502, 1), + (9691, 57080, 57095, 'OP_LFGGroupSearch', 504, 1), + (9692, 57080, 57095, 'OP_CharacterHousingList', 507, 1), + (9693, 57080, 57095, 'OP_DressingRoom', 510, 1), + (9694, 57080, 57095, 'OP_PlayLon', 511, 1), + (9695, 57080, 57095, 'OP_SkillInfoRequest', 514, 1), + (9696, 57080, 57095, 'OP_SkillInfoResponse', 515, 1), + (9697, 57080, 57095, 'OP_LFGUpdateMsg', 518, 1), + (9698, 57080, 57095, 'OP_BadLanguageFilter', 519, 1), + (9699, 57080, 57095, 'OP_VoiceChatChannel', 520, 1), + (9700, 57080, 57095, 'OP_MapRequest', 521, 1), + (9701, 57080, 57095, 'OP_MarketFundsUpdate', 526, 1), + (9702, 57080, 57095, 'OP_UIEvent', 527, 1), + (9703, 57080, 57095, 'OP_MarketAddFundsRequest', 528, 1), + (9704, 57080, 57095, 'OP_MarketAddFundsReply', 529, 1), + (9705, 57080, 57095, 'OP_MarketPurchase', 531, 1), + (9706, 57080, 57095, 'OP_MarketPlacePrices', 532, 1), + (9707, 57080, 57095, 'OP_MarketPlaceItems', 537, 1), + (9708, 57080, 57095, 'OP_RecipeBook', 538, 1), + (9709, 57080, 57095, 'OP_CreateCharacterDungeon', 547, 1), + (9710, 57080, 57095, 'OP_DungeonMakerEnter', 548, 1), + (9711, 57080, 57095, 'OP_DungeonMakerItemRequest', 550, 1), + (9712, 57080, 57095, 'OP_CharacterCreatedDungeons', 551, 1), + (9713, 57080, 57095, 'OP_DungeonMakerToolboxList', 552, 1), + (9714, 57080, 57095, 'OP_DungeonMakerUnknown', 553, 1), + (9715, 57080, 57095, 'OP_DungeonMakerUnknown1', 554, 1), + (9716, 57080, 57095, 'OP_PlayerPollPopup', 556, 1), + (9717, 57080, 57095, 'OP_PlayerPollAnswer', 557, 1), + (9718, 57080, 57095, 'OP_MentorPopup', 558, 1), + (9719, 57080, 57095, 'OP_LoadWelcomeWindow', 560, 1), + (9720, 57080, 57095, 'OP_OpenCharCust', 561, 1), + (9721, 57080, 57095, 'OP_SubmitCharCust', 562, 1), + (9722, 57080, 57095, 'OP_QueAllBgSolo', 564, 1), + (9723, 57080, 57095, 'OP_ZoneBgInstanceList', 566, 1), + (9724, 57080, 57095, 'OP_WorldTravelAvail', 570, 1), + (9725, 57080, 57095, 'OP_Launchpad', 572, 1), + (9726, 57080, 57095, 'OP_PaperdollImage', 574, 1), + (9727, 57080, 57095, 'OP_LoadCalendarEvents', 575, 1), + (9728, 57080, 57095, 'OP_VideoUploaded', 576, 1), + (9729, 57080, 57095, 'OP_SavageBarInitMsg', 577, 1), + (9730, 57080, 57095, 'OP_PetOptionsResponse', 578, 1), + (9731, 57080, 57095, 'OP_DungeonMakerItemResponse', 579, 1), + (9732, 57080, 57095, 'OP_CharacterMounts', 581, 1), + (9733, 57080, 57095, 'OP_RecipeListUnknown', 590, 1), + (9734, 57080, 57095, 'OP_EqBetaCopyRequest', 599, 1), + (9735, 57080, 57095, 'OP_EqHearChatCmd', 600, 1), + (9736, 57080, 57095, 'OP_EqDisplayTextCmd', 601, 1), + (9737, 57080, 57095, 'OP_EqCreateGhostCmd', 602, 1), + (9738, 57080, 57095, 'OP_EqCreateWidgetCmd', 603, 1), + (9739, 57080, 57095, 'OP_EqCreateSignWidgetCmd', 604, 1), + (9740, 57080, 57095, 'OP_EqDestroyGhostCmd', 605, 1), + (9741, 57080, 57095, 'OP_EqUpdateGhostCmd', 606, 1), + (9742, 57080, 57095, 'OP_EqSetControlGhostCmd', 607, 1), + (9743, 57080, 57095, 'OP_EqSetPOVGhostCmd', 608, 1), + (9744, 57080, 57095, 'OP_EqHearCombatCmd', 609, 1), + (9745, 57080, 57095, 'OP_EqHearSpellCastCmd', 610, 1), + (9746, 57080, 57095, 'OP_EQHearProcCmd', 611, 1), + (9747, 57080, 57095, 'OP_EQHearResEffectCmd', 612, 1), + (9748, 57080, 57095, 'OP_EqHearSpellInterruptCmd', 613, 1), + (9749, 57080, 57095, 'OP_EqHearSpellFizzleCmd', 614, 1), + (9750, 57080, 57095, 'OP_EqHearConsiderCmd', 615, 1), + (9751, 57080, 57095, 'OP_EqUpdateSubClassesCmd', 616, 1), + (9752, 57080, 57095, 'OP_EqCreateListBoxCmd', 617, 1), + (9753, 57080, 57095, 'OP_EqSetDebugPathPointsCmd', 618, 1), + (9754, 57080, 57095, 'OP_EqCannedEmoteCmd', 620, 1), + (9755, 57080, 57095, 'OP_EqStateCmd', 621, 1), + (9756, 57080, 57095, 'OP_EqPlaySoundCmd', 622, 1), + (9757, 57080, 57095, 'OP_EqPlaySound3DCmd', 623, 1), + (9758, 57080, 57095, 'OP_EqPlayVoiceCmd', 624, 1), + (9759, 57080, 57095, 'OP_EqHearDrowningCmd', 625, 1), + (9760, 57080, 57095, 'OP_EqHearDeathCmd', 626, 1), + (9761, 57080, 57095, 'OP_EqGroupMemberRemovedCmd', 627, 1), + (9762, 57080, 57095, 'OP_EqHearChainEffectCmd', 628, 1), + (9763, 57080, 57095, 'OP_EqReceiveOfferCmd', 629, 1), + (9764, 57080, 57095, 'OP_EqInspectPCResultsCmd', 630, 1), + (9765, 57080, 57095, 'OP_EqDrawablePathGraphCmd', 631, 1), + (9766, 57080, 57095, 'OP_EqDialogOpenCmd', 632, 1), + (9767, 57080, 57095, 'OP_EqDialogCloseCmd', 633, 1), + (9768, 57080, 57095, 'OP_EqFactionUpdateCmd', 634, 1), + (9769, 57080, 57095, 'OP_EqCollectionUpdateCmd', 635, 1), + (9770, 57080, 57095, 'OP_EqCollectionFilterCmd', 636, 1), + (9771, 57080, 57095, 'OP_EqCollectionItemCmd', 637, 1), + (9772, 57080, 57095, 'OP_EqQuestJournalUpdateCmd', 638, 1), + (9773, 57080, 57095, 'OP_EqMentoring', 639, 1), + (9774, 57080, 57095, 'OP_EqQuestJournalReplyCmd', 640, 1), + (9775, 57080, 57095, 'OP_EqQuestGroupCmd', 641, 1), + (9776, 57080, 57095, 'OP_EqUpdateMerchantCmd', 642, 1), + (9777, 57080, 57095, 'OP_EqUpdateStoreCmd', 643, 1), + (9778, 57080, 57095, 'OP_EqUpdatePlayerTradeCmd', 644, 1), + (9779, 57080, 57095, 'OP_EqHelpPathCmd', 645, 1), + (9780, 57080, 57095, 'OP_EqHelpPathClearCmd', 646, 1), + (9781, 57080, 57095, 'OP_EqUpdateBankCmd', 647, 1), + (9782, 57080, 57095, 'OP_EqExamineInfoCmd', 648, 1), + (9783, 57080, 57095, 'OP_EqCloseWindowCmd', 649, 1), + (9784, 57080, 57095, 'OP_EqUpdateLootCmd', 650, 1), + (9785, 57080, 57095, 'OP_EqJunctionListCmd', 651, 1), + (9786, 57080, 57095, 'OP_EqShowDeathWindowCmd', 652, 1), + (9787, 57080, 57095, 'OP_EqDisplaySpellFailCmd', 653, 1), + (9788, 57080, 57095, 'OP_EqSpellCastStartCmd', 654, 1), + (9789, 57080, 57095, 'OP_EqSpellCastEndCmd', 655, 1), + (9790, 57080, 57095, 'OP_EqResurrectedCmd', 656, 1), + (9791, 57080, 57095, 'OP_EqChoiceWinCmd', 657, 1), + (9792, 57080, 57095, 'OP_EqSetDefaultVerbCmd', 658, 1), + (9793, 57080, 57095, 'OP_EqInstructionWindowCmd', 659, 1), + (9794, 57080, 57095, 'OP_EqInstructionWindowCloseCmd', 660, 1), + (9795, 57080, 57095, 'OP_EqInstructionWindowGoalCmd', 661, 1), + (9796, 57080, 57095, 'OP_EqInstructionWindowTaskCmd', 662, 1), + (9797, 57080, 57095, 'OP_EqEnableGameEventCmd', 663, 1), + (9798, 57080, 57095, 'OP_EqShowWindowCmd', 664, 1), + (9799, 57080, 57095, 'OP_EqEnableWindowCmd', 665, 1), + (9800, 57080, 57095, 'OP_EqFlashWindowCmd', 666, 1), + (9801, 57080, 57095, 'OP_EqHearPlayFlavorCmd', 668, 1), + (9802, 57080, 57095, 'OP_EqUpdateSignWidgetCmd', 669, 1), + (9803, 57080, 57095, 'OP_EqDebugPVDCmd', 670, 1), + (9804, 57080, 57095, 'OP_EqShowBookCmd', 671, 1), + (9805, 57080, 57095, 'OP_EqQuestionnaireCmd', 672, 1), + (9806, 57080, 57095, 'OP_EqGetProbsCmd', 674, 1), + (9807, 57080, 57095, 'OP_EqHearHealCmd', 675, 1), + (9808, 57080, 57095, 'OP_EqChatChannelUpdateCmd', 676, 1), + (9809, 57080, 57095, 'OP_EqWhoChannelQueryReplyCmd', 677, 1), + (9810, 57080, 57095, 'OP_EqAvailWorldChannelsCmd', 678, 1), + (9811, 57080, 57095, 'OP_EqUpdateTargetCmd', 679, 1), + (9812, 57080, 57095, 'OP_BrokerSellList', 680, 1), + (9813, 57080, 57095, 'OP_EqConsignmentItemsCmd', 681, 1), + (9814, 57080, 57095, 'OP_EqStartBrokerCmd', 683, 1), + (9815, 57080, 57095, 'OP_EqMapExplorationCmd', 684, 1), + (9816, 57080, 57095, 'OP_EqStoreLogCmd', 685, 1), + (9817, 57080, 57095, 'OP_EqSpellMoveToRangeAndRetryCmd', 686, 1), + (9818, 57080, 57095, 'OP_EqUpdatePlayerMailCmd', 687, 1), + (9819, 57080, 57095, 'OP_GuildStatusUpdate', 690, 1), + (9820, 57080, 57095, 'OP_EqArenaResultsCmd', 691, 1), + (9821, 57080, 57095, 'OP_EqGuildBankEventActionCmd', 692, 1), + (9822, 57080, 57095, 'OP_EqGuildBankExamineInfoCmd', 693, 1), + (9823, 57080, 57095, 'OP_EqHearSpellNoLandCmd', 694, 1), + (9824, 57080, 57095, 'OP_Lottery', 695, 1), + (9825, 57080, 57095, 'OP_GuildRecruitingMemberInfo', 696, 1), + (9826, 57080, 57095, 'OP_GuildRecruiting', 697, 1), + (9827, 57080, 57095, 'OP_GuildRecruitingDetails', 698, 1), + (9828, 57080, 57095, 'OP_GuildRecruitingImage', 699, 1), + (9829, 57080, 57095, 'OP_TradeskillList', 700, 1), + (9830, 57080, 57095, 'OP_CharRenamed', 701, 1), + (9831, 57080, 57095, 'OP_UseAdornment', 711, 1), + (9832, 57080, 57095, 'OP_ExpPurchWindow', 717, 1), + (9833, 57080, 57095, 'OP_PointOfInterest', 721, 1), + (9834, 57080, 57095, 'OP_PointOfInterest2', 722, 1), + (9835, 57080, 57095, 'OP_TraitsList', 723, 1), + (9836, 57080, 57095, 'OP_CustomizeHouseDisplay', 726, 1), + (9837, 57080, 57095, 'OP_VoiceChatServer', 727, 1), + (9838, 57080, 57095, 'OP_SupplyDepot', 731, 1), + (9839, 57080, 57095, 'OP_EQHearThreatCmd', 732, 1), + (9840, 57080, 57095, 'OP_RecipeList', 733, 1), + (9841, 57080, 57095, 'OP_Research', 734, 1), + (9842, 57080, 57095, 'OP_CharacterCurrency', 735, 1), + (9843, 57080, 57095, 'OP_CharacterAchievements', 736, 1), + (9844, 57080, 57095, 'OP_AchievementUpdateMsg', 737, 1), + (9845, 57080, 57095, 'OP_EQHearDispellCmd', 738, 1), + (9846, 57080, 57095, 'OP_JournalQuestStoryline', 739, 1), + (9847, 57080, 57095, 'OP_DungeonPlayAsAvatarList', 740, 1), + (9848, 57080, 57095, 'OP_DungeonPlayAsAvatarSelected', 741, 1), + (9849, 57080, 57095, 'OP_MercHireWindow', 742, 1), + (9850, 57080, 57095, 'OP_MercUnknown', 743, 1), + (9851, 57080, 57095, 'OP_Unknown', 756, 1), + (9852, 57080, 57095, 'OP_DailyObjectives', 594, 1), + (9853, 57080, 57095, 'OP_Weakness', 580, 1), + (9854, 57015, 57031, 'OP_AchievementUpdateMsg', 731, 1), + (9855, 57015, 57031, 'OP_AddSocialStructureStandingMsg', 249, 1), + (9856, 57015, 57031, 'OP_AdvancementRequestMsg', 394, 1), + (9857, 57015, 57031, 'OP_AdventureList', 488, 1), + (9858, 57015, 57031, 'OP_AFKUpdateMsg', 370, 1), + (9859, 57015, 57031, 'OP_AfterInvSpellUpdate', 69, 1), + (9860, 57015, 57031, 'OP_AllCharactersDescReplyMsg', 10, 1), + (9861, 57015, 57031, 'OP_AllCharactersDescRequestMsg', 9, 1), + (9862, 57015, 57031, 'OP_AllWSDescRequestMsg', 7, 1), + (9863, 57015, 57031, 'OP_AnonUpdateMsg', 371, 1), + (9864, 57015, 57031, 'OP_ArenaCreate', 456, 1), + (9865, 57015, 57031, 'OP_ArenaGameTypesMsg', 445, 1), + (9866, 57015, 57031, 'OP_ArenaList', 457, 1), + (9867, 57015, 57031, 'OP_ArenaWindow', 465, 1), + (9868, 57015, 57031, 'OP_AttackAllowed', 500, 1), + (9869, 57015, 57031, 'OP_AttackNotAllowed', 501, 1), + (9870, 57015, 57031, 'OP_AuctionAbortMsg', 436, 1), + (9871, 57015, 57031, 'OP_AuctionCharacter', 433, 1), + (9872, 57015, 57031, 'OP_AuctionCharacterReply', 434, 1), + (9873, 57015, 57031, 'OP_AuctionCoin', 431, 1), + (9874, 57015, 57031, 'OP_AuctionCoinReply', 432, 1), + (9875, 57015, 57031, 'OP_AuctionCommitMsg', 435, 1), + (9876, 57015, 57031, 'OP_AuctionItem', 429, 1), + (9877, 57015, 57031, 'OP_AuctionItemReply', 430, 1), + (9878, 57015, 57031, 'OP_AuditAuctionEventMsg', 446, 1), + (9879, 57015, 57031, 'OP_AvatarCreatedMsg', 46, 1), + (9880, 57015, 57031, 'OP_AvatarDestroyedMsg', 47, 1), + (9881, 57015, 57031, 'OP_AvatarUpdateMsg', 360, 1), + (9882, 57015, 57031, 'OP_BadLanguageFilter', 519, 1), + (9883, 57015, 57031, 'OP_BagOptions', 502, 1), + (9884, 57015, 57031, 'OP_BeginItemCreationMsg', 221, 1), + (9885, 57015, 57031, 'OP_BeginTrackingMsg', 390, 1), + (9886, 57015, 57031, 'OP_BioUpdateMsg', 362, 1), + (9887, 57015, 57031, 'OP_BrokerAddBag', 292, 1), + (9888, 57015, 57031, 'OP_BrokerRemoveBag', 293, 1), + (9889, 57015, 57031, 'OP_BrokerSellList', 674, 1), + (9890, 57015, 57031, 'OP_BuyPlayerHouseMsg', 150, 1), + (9891, 57015, 57031, 'OP_BuyPlayerHouseTintMsg', 151, 1), + (9892, 57015, 57031, 'OP_CampAbortedMsg', 52, 1), + (9893, 57015, 57031, 'OP_CampClientMsg', 387, 1), + (9894, 57015, 57031, 'OP_CampStartedMsg', 51, 1), + (9895, 57015, 57031, 'OP_CancelCreateFromRecipeMsg', 220, 1), + (9896, 57015, 57031, 'OP_CancelledFeignMsg', 216, 1), + (9897, 57015, 57031, 'OP_CancelMoveObjectModeMsg', 163, 1), + (9898, 57015, 57031, 'OP_CancelSpellCast', 489, 1), + (9899, 57015, 57031, 'OP_ChangeServerControlFlagMsg', 246, 1), + (9900, 57015, 57031, 'OP_ChangeZoneMsg', 77, 1), + (9901, 57015, 57031, 'OP_CharacterAchievements', 730, 1), + (9902, 57015, 57031, 'OP_CharacterCreatedDungeons', 549, 1), + (9903, 57015, 57031, 'OP_CharacterCurrency', 729, 1), + (9904, 57015, 57031, 'OP_CharacterHousingList', 507, 1), + (9905, 57015, 57031, 'OP_CharacterLinkdeadMsg', 414, 1), + (9906, 57015, 57031, 'OP_CharacterMerc', 65, 1), + (9907, 57015, 57031, 'OP_CharacterMounts', 579, 1), + (9908, 57015, 57031, 'OP_CharacterPet', 64, 1), + (9909, 57015, 57031, 'OP_CharNameChangedMsg', 352, 1), + (9910, 57015, 57031, 'OP_CharRenamed', 695, 1), + (9911, 57015, 57031, 'OP_CharTransferCommitReplyMsg', 422, 1), + (9912, 57015, 57031, 'OP_CharTransferCommitRequestMsg', 420, 1), + (9913, 57015, 57031, 'OP_CharTransferReplyMsg', 418, 1), + (9914, 57015, 57031, 'OP_CharTransferRequestMsg', 417, 1), + (9915, 57015, 57031, 'OP_CharTransferRollbackReplyMsg', 421, 1), + (9916, 57015, 57031, 'OP_CharTransferRollbackRequestMsg', 419, 1), + (9917, 57015, 57031, 'OP_CharTransferStartReplyMsg', 416, 1), + (9918, 57015, 57031, 'OP_CharTransferStartRequestMsg', 415, 1), + (9919, 57015, 57031, 'OP_CharTransferValidateReplyMsg', 438, 1), + (9920, 57015, 57031, 'OP_CharTransferValidateRequestMsg', 437, 1), + (9921, 57015, 57031, 'OP_ChatCreateChannelMsg', 285, 1), + (9922, 57015, 57031, 'OP_ChatFiltersMsg', 335, 1), + (9923, 57015, 57031, 'OP_ChatJoinChannelMsg', 286, 1), + (9924, 57015, 57031, 'OP_ChatLeaveChannelMsg', 288, 1), + (9925, 57015, 57031, 'OP_ChatRelationshipUpdateMsg', 184, 1), + (9926, 57015, 57031, 'OP_ChatSendFriendsMsg', 295, 1), + (9927, 57015, 57031, 'OP_ChatSendIgnoresMsg', 296, 1), + (9928, 57015, 57031, 'OP_ChatTellChannelMsg', 289, 1), + (9929, 57015, 57031, 'OP_ChatTellUserMsg', 290, 1), + (9930, 57015, 57031, 'OP_ChatToggleFriendMsg', 291, 1), + (9931, 57015, 57031, 'OP_ChatToggleIgnoreMsg', 294, 1), + (9932, 57015, 57031, 'OP_ChatWhoChannelMsg', 287, 1), + (9933, 57015, 57031, 'OP_ClearDataMsg', 98, 1), + (9934, 57015, 57031, 'OP_ClearForLandingMsg', 491, 1), + (9935, 57015, 57031, 'OP_ClearForTakeOffMsg', 191, 1), + (9936, 57015, 57031, 'OP_ClientCmdMsg', 58, 1), + (9937, 57015, 57031, 'OP_ClientFellMsg', 385, 1), + (9938, 57015, 57031, 'OP_ClientIdleBeginMsg', 405, 1), + (9939, 57015, 57031, 'OP_ClientIdleEndMsg', 406, 1), + (9940, 57015, 57031, 'OP_ClientInDeathRegionMsg', 386, 1), + (9941, 57015, 57031, 'OP_ClientTeleportRequestMsg', 78, 1), + (9942, 57015, 57031, 'OP_ClientTeleportToLocationMsg', 244, 1), + (9943, 57015, 57031, 'OP_CloseGroupInviteWindowMsg', 397, 1), + (9944, 57015, 57031, 'OP_CollectAllHouseItemsMsg', 152, 1), + (9945, 57015, 57031, 'OP_ConsignItemRequestMsg', 126, 1), + (9946, 57015, 57031, 'OP_ConsignItemResponseMsg', 127, 1), + (9947, 57015, 57031, 'OP_ConsignmentCloseStoreMsg', 125, 1), + (9948, 57015, 57031, 'OP_ConsignRemoveItemsMsg', 378, 1), + (9949, 57015, 57031, 'OP_ConsignViewCreateMsg', 375, 1), + (9950, 57015, 57031, 'OP_ConsignViewGetPageMsg', 376, 1), + (9951, 57015, 57031, 'OP_ConsignViewReleaseMsg', 377, 1), + (9952, 57015, 57031, 'OP_ConsignViewSortMsg', 383, 1), + (9953, 57015, 57031, 'OP_CorruptedClientMsg', 409, 1), + (9954, 57015, 57031, 'OP_CreateBoatTransportsMsg', 250, 1), + (9955, 57015, 57031, 'OP_CreateCharacterDungeon', 545, 1), + (9956, 57015, 57031, 'OP_CreateCharacterReplyMsg', 12, 1), + (9957, 57015, 57031, 'OP_CreateCharacterRequestMsg', 11, 1), + (9958, 57015, 57031, 'OP_CreateCharFromCBBReplyMsg', 426, 1), + (9959, 57015, 57031, 'OP_CreateCharFromCBBRequestMsg', 425, 1), + (9960, 57015, 57031, 'OP_CreateGuildReplyMsg', 120, 1), + (9961, 57015, 57031, 'OP_CreateGuildRequestMsg', 119, 1), + (9962, 57015, 57031, 'OP_CreateZoneInstanceMsg', 29, 1), + (9963, 57015, 57031, 'OP_CsCategoryRequestMsg', 367, 1), + (9964, 57015, 57031, 'OP_CsCategoryResponseMsg', 368, 1), + (9965, 57015, 57031, 'OP_CSTicketAddCommentMsg', 234, 1), + (9966, 57015, 57031, 'OP_CSTicketChangeNotificationMsg', 236, 1), + (9967, 57015, 57031, 'OP_CSTicketCommentRequestMsg', 231, 1), + (9968, 57015, 57031, 'OP_CSTicketCommentResponseMsg', 232, 1), + (9969, 57015, 57031, 'OP_CSTicketCreateMsg', 233, 1), + (9970, 57015, 57031, 'OP_CSTicketDeleteMsg', 235, 1), + (9971, 57015, 57031, 'OP_CSTicketHeaderRequestMsg', 229, 1), + (9972, 57015, 57031, 'OP_CSTicketInfoMsg', 230, 1), + (9973, 57015, 57031, 'OP_CSToolAccessResponseMsg', 388, 1), + (9974, 57015, 57031, 'OP_CSToolsRequestMsg', 247, 1), + (9975, 57015, 57031, 'OP_CSToolsResponseMsg', 248, 1), + (9976, 57015, 57031, 'OP_CurrentPet', 485, 1), + (9977, 57015, 57031, 'OP_CustomizationPurchaseRequestMs', 167, 1), + (9978, 57015, 57031, 'OP_CustomizationReplyMsg', 169, 1), + (9979, 57015, 57031, 'OP_CustomizationSetRequestMsg', 168, 1), + (9980, 57015, 57031, 'OP_CustomizeHouseDisplay', 720, 1), + (9981, 57015, 57031, 'OP_DefaultGroupOptionsMsg', 198, 1), + (9982, 57015, 57031, 'OP_DefaultGroupOptionsRequestMsg', 197, 1), + (9983, 57015, 57031, 'OP_DeleteCharacterReplyMsg', 17, 1), + (9984, 57015, 57031, 'OP_DeleteCharacterRequestMsg', 16, 1), + (9985, 57015, 57031, 'OP_DeleteGuildMsg', 123, 1), + (9986, 57015, 57031, 'OP_DestUpdateReq', 210, 1), + (9987, 57015, 57031, 'OP_DialogCloseMsg', 110, 1), + (9988, 57015, 57031, 'OP_DialogSelectMsg', 109, 1), + (9989, 57015, 57031, 'OP_DispatchClientCmdMsg', 60, 1), + (9990, 57015, 57031, 'OP_DispatchESMsg', 59, 1), + (9991, 57015, 57031, 'OP_DispatchMsg', 451, 1), + (9992, 57015, 57031, 'OP_DispatchSpellCmdMsg', 179, 1), + (9993, 57015, 57031, 'OP_DisplayDebugNLLPointsMsg', 254, 1), + (9994, 57015, 57031, 'OP_DisplayEventMsg', 452, 1), + (9995, 57015, 57031, 'OP_DisplayExchangeScreenMsg', 444, 1), + (9996, 57015, 57031, 'OP_DisplayGroupOptionsScreenMsg', 200, 1), + (9997, 57015, 57031, 'OP_DisplayInnVisitScreenMsg', 202, 1), + (9998, 57015, 57031, 'OP_DisplayMailScreenMsg', 404, 1), + (9999, 57015, 57031, 'OP_DisplayTSEventReactionMsg', 225, 1), + (10000, 57015, 57031, 'OP_DisplayWarningMsg', 265, 1), + (10001, 57015, 57031, 'OP_DoneLoadingEntityResourcesMsg', 36, 1), + (10002, 57015, 57031, 'OP_DoneLoadingZoneResourcesMsg', 34, 1), + (10003, 57015, 57031, 'OP_DoneSendingInitialEntitiesMsg', 35, 1), + (10004, 57015, 57031, 'OP_DressingRoom', 510, 1), + (10005, 57015, 57031, 'OP_DumpSchedulerMsg', 203, 1), + (10006, 57015, 57031, 'OP_DungeonMakerEnter', 546, 1), + (10007, 57015, 57031, 'OP_DungeonMakerItemRequest', 548, 1), + (10008, 57015, 57031, 'OP_DungeonMakerItemResponse', 577, 1), + (10009, 57015, 57031, 'OP_DungeonMakerToolboxList', 550, 1), + (10010, 57015, 57031, 'OP_DungeonMakerUnknown', 551, 1), + (10011, 57015, 57031, 'OP_DungeonMakerUnknown1', 552, 1), + (10012, 57015, 57031, 'OP_DungeonPlayAsAvatarList', 734, 1), + (10013, 57015, 57031, 'OP_DungeonPlayAsAvatarSelected', 735, 1), + (10014, 57015, 57031, 'OP_EncounterBrokenMsg', 263, 1), + (10015, 57015, 57031, 'OP_EnterHouseMsg', 154, 1), + (10016, 57015, 57031, 'OP_EnterMoveObjectModeMsg', 161, 1), + (10017, 57015, 57031, 'OP_EntityVerbsReplyMsg', 181, 1), + (10018, 57015, 57031, 'OP_EntityVerbsRequestMsg', 180, 1), + (10019, 57015, 57031, 'OP_EntityVerbsVerbMsg', 182, 1), + (10020, 57015, 57031, 'OP_EqArenaResultsCmd', 685, 1), + (10021, 57015, 57031, 'OP_EqAvailWorldChannelsCmd', 672, 1), + (10022, 57015, 57031, 'OP_EqBetaCopyRequest', 593, 1), + (10023, 57015, 57031, 'OP_EqCannedEmoteCmd', 614, 1), + (10024, 57015, 57031, 'OP_EqChatChannelUpdateCmd', 670, 1), + (10025, 57015, 57031, 'OP_EqChoiceWinCmd', 651, 1), + (10026, 57015, 57031, 'OP_EqCloseWindowCmd', 643, 1), + (10027, 57015, 57031, 'OP_EqCollectionFilterCmd', 630, 1), + (10028, 57015, 57031, 'OP_EqCollectionItemCmd', 631, 1), + (10029, 57015, 57031, 'OP_EqCollectionUpdateCmd', 629, 1), + (10030, 57015, 57031, 'OP_EqConsignmentItemsCmd', 675, 1), + (10031, 57015, 57031, 'OP_EqCreateGhostCmd', 596, 1), + (10032, 57015, 57031, 'OP_EqCreateListBoxCmd', 611, 1), + (10033, 57015, 57031, 'OP_EqCreateSignWidgetCmd', 598, 1), + (10034, 57015, 57031, 'OP_EqCreateWidgetCmd', 597, 1), + (10035, 57015, 57031, 'OP_EqDebugPVDCmd', 664, 1), + (10036, 57015, 57031, 'OP_EqDestroyGhostCmd', 599, 1), + (10037, 57015, 57031, 'OP_EqDialogCloseCmd', 627, 1), + (10038, 57015, 57031, 'OP_EqDialogOpenCmd', 626, 1), + (10039, 57015, 57031, 'OP_EqDisplaySpellFailCmd', 647, 1), + (10040, 57015, 57031, 'OP_EqDisplayTextCmd', 595, 1), + (10041, 57015, 57031, 'OP_EqDrawablePathGraphCmd', 625, 1), + (10042, 57015, 57031, 'OP_EqEnableGameEventCmd', 657, 1), + (10043, 57015, 57031, 'OP_EqEnableWindowCmd', 659, 1), + (10044, 57015, 57031, 'OP_EqExamineInfoCmd', 642, 1), + (10045, 57015, 57031, 'OP_EqFactionUpdateCmd', 628, 1), + (10046, 57015, 57031, 'OP_EqFlashWindowCmd', 660, 1), + (10047, 57015, 57031, 'OP_EqGetProbsCmd', 668, 1), + (10048, 57015, 57031, 'OP_EqGroupMemberRemovedCmd', 621, 1), + (10049, 57015, 57031, 'OP_EqGuildBankEventActionCmd', 686, 1), + (10050, 57015, 57031, 'OP_EqGuildBankExamineInfoCmd', 687, 1), + (10051, 57015, 57031, 'OP_EqHearChainEffectCmd', 622, 1), + (10052, 57015, 57031, 'OP_EqHearChatCmd', 594, 1), + (10053, 57015, 57031, 'OP_EqHearCombatCmd', 603, 1), + (10054, 57015, 57031, 'OP_EqHearConsiderCmd', 609, 1), + (10055, 57015, 57031, 'OP_EqHearDeathCmd', 620, 1), + (10056, 57015, 57031, 'OP_EQHearDispellCmd', 732, 1), + (10057, 57015, 57031, 'OP_EqHearDrowningCmd', 619, 1), + (10058, 57015, 57031, 'OP_EqHearHealCmd', 669, 1), + (10059, 57015, 57031, 'OP_EqHearPlayFlavorCmd', 662, 1), + (10060, 57015, 57031, 'OP_EQHearProcCmd', 605, 1), + (10061, 57015, 57031, 'OP_EQHearResEffectCmd', 606, 1), + (10062, 57015, 57031, 'OP_EqHearSpellCastCmd', 604, 1), + (10063, 57015, 57031, 'OP_EqHearSpellFizzleCmd', 608, 1), + (10064, 57015, 57031, 'OP_EqHearSpellInterruptCmd', 607, 1), + (10065, 57015, 57031, 'OP_EqHearSpellNoLandCmd', 688, 1), + (10066, 57015, 57031, 'OP_EQHearThreatCmd', 726, 1), + (10067, 57015, 57031, 'OP_EqHelpPathClearCmd', 640, 1), + (10068, 57015, 57031, 'OP_EqHelpPathCmd', 639, 1), + (10069, 57015, 57031, 'OP_EqInspectPCResultsCmd', 624, 1), + (10070, 57015, 57031, 'OP_EqInstructionWindowCloseCmd', 654, 1), + (10071, 57015, 57031, 'OP_EqInstructionWindowCmd', 653, 1), + (10072, 57015, 57031, 'OP_EqInstructionWindowGoalCmd', 655, 1), + (10073, 57015, 57031, 'OP_EqInstructionWindowTaskCmd', 656, 1), + (10074, 57015, 57031, 'OP_EqJunctionListCmd', 645, 1), + (10075, 57015, 57031, 'OP_EqMapExplorationCmd', 678, 1), + (10076, 57015, 57031, 'OP_EqMentoring', 633, 1), + (10077, 57015, 57031, 'OP_EqPlaySound3DCmd', 617, 1), + (10078, 57015, 57031, 'OP_EqPlaySoundCmd', 616, 1), + (10079, 57015, 57031, 'OP_EqPlayVoiceCmd', 618, 1), + (10080, 57015, 57031, 'OP_EqQuestGroupCmd', 635, 1), + (10081, 57015, 57031, 'OP_EqQuestionnaireCmd', 666, 1), + (10082, 57015, 57031, 'OP_EqQuestJournalReplyCmd', 634, 1), + (10083, 57015, 57031, 'OP_EqQuestJournalUpdateCmd', 632, 1), + (10084, 57015, 57031, 'OP_EqReceiveOfferCmd', 623, 1), + (10085, 57015, 57031, 'OP_EqResurrectedCmd', 650, 1), + (10086, 57015, 57031, 'OP_EqSetControlGhostCmd', 601, 1), + (10087, 57015, 57031, 'OP_EqSetDebugPathPointsCmd', 612, 1), + (10088, 57015, 57031, 'OP_EqSetDefaultVerbCmd', 652, 1), + (10089, 57015, 57031, 'OP_EqSetPOVGhostCmd', 602, 1), + (10090, 57015, 57031, 'OP_EqShowBookCmd', 665, 1), + (10091, 57015, 57031, 'OP_EqShowDeathWindowCmd', 646, 1), + (10092, 57015, 57031, 'OP_EqShowWindowCmd', 658, 1), + (10093, 57015, 57031, 'OP_EqSpellCastEndCmd', 649, 1), + (10094, 57015, 57031, 'OP_EqSpellCastStartCmd', 648, 1), + (10095, 57015, 57031, 'OP_EqSpellMoveToRangeAndRetryCmd', 680, 1), + (10096, 57015, 57031, 'OP_EqStartBrokerCmd', 677, 1), + (10097, 57015, 57031, 'OP_EqStateCmd', 615, 1), + (10098, 57015, 57031, 'OP_EqStoreLogCmd', 679, 1), + (10099, 57015, 57031, 'OP_EqUpdateBankCmd', 641, 1), + (10100, 57015, 57031, 'OP_EqUpdateGhostCmd', 600, 1), + (10101, 57015, 57031, 'OP_EqUpdateLootCmd', 644, 1), + (10102, 57015, 57031, 'OP_EqUpdateMerchantCmd', 636, 1), + (10103, 57015, 57031, 'OP_EqUpdatePlayerMailCmd', 681, 1), + (10104, 57015, 57031, 'OP_EqUpdatePlayerTradeCmd', 638, 1), + (10105, 57015, 57031, 'OP_EqUpdateSignWidgetCmd', 663, 1), + (10106, 57015, 57031, 'OP_EqUpdateStoreCmd', 637, 1), + (10107, 57015, 57031, 'OP_EqUpdateSubClassesCmd', 610, 1), + (10108, 57015, 57031, 'OP_EqUpdateTargetCmd', 673, 1), + (10109, 57015, 57031, 'OP_EqWhoChannelQueryReplyCmd', 671, 1), + (10110, 57015, 57031, 'OP_ESInitMsg', 25, 1), + (10111, 57015, 57031, 'OP_ESLoginRequestMsg', 3, 1), + (10112, 57015, 57031, 'OP_ESReadyForClientsMsg', 26, 1), + (10113, 57015, 57031, 'OP_ESStatusMsg', 100, 1), + (10114, 57015, 57031, 'OP_ESWeatherRequestEndMsg', 105, 1), + (10115, 57015, 57031, 'OP_ESWeatherRequestMsg', 104, 1), + (10116, 57015, 57031, 'OP_ESZoneInstanceStatusMsg', 101, 1), + (10117, 57015, 57031, 'OP_ExamineConsignmentRequestMsg', 171, 1), + (10118, 57015, 57031, 'OP_ExamineConsignmentResponseMsg', 172, 1), + (10119, 57015, 57031, 'OP_ExamineInfoRequestMsg', 255, 1), + (10120, 57015, 57031, 'OP_ExamineItemRequestMsg', 195, 1), + (10121, 57015, 57031, 'OP_ExitHouseMsg', 155, 1), + (10122, 57015, 57031, 'OP_ExpectClientAsCharacterReplyMs', 22, 1), + (10123, 57015, 57031, 'OP_ExpectClientAsCharacterRequest', 32, 1), + (10124, 57015, 57031, 'OP_ExpPurchWindow', 711, 1), + (10125, 57015, 57031, 'OP_FellowshipExpMsg', 122, 1), + (10126, 57015, 57031, 'OP_FlightPathsMsg', 413, 1), + (10127, 57015, 57031, 'OP_GameWorldTimeMsg', 43, 1), + (10128, 57015, 57031, 'OP_PaperdollImage', 572, 1), + (10129, 57015, 57031, 'OP_GetAuctionAssetIDMsg', 441, 1), + (10130, 57015, 57031, 'OP_GetAuctionAssetIDReplyMsg', 442, 1), + (10131, 57015, 57031, 'OP_GetAvatarAccessRequestForCSToo', 393, 1), + (10132, 57015, 57031, 'OP_GetCharacterSerializedReplyMsg', 424, 1), + (10133, 57015, 57031, 'OP_GetCharacterSerializedRequestM', 423, 1), + (10134, 57015, 57031, 'OP_GroupCreatedMsg', 88, 1), + (10135, 57015, 57031, 'OP_GroupDestroyedMsg', 89, 1), + (10136, 57015, 57031, 'OP_GroupLeaderChangedMsg', 93, 1), + (10137, 57015, 57031, 'OP_GroupMemberAddedMsg', 90, 1), + (10138, 57015, 57031, 'OP_GroupMemberRemovedMsg', 91, 1), + (10139, 57015, 57031, 'OP_GroupOptionsMsg', 199, 1), + (10140, 57015, 57031, 'OP_GroupRemovedFromGroupMsg', 92, 1), + (10141, 57015, 57031, 'OP_GroupResendOOZDataMsg', 94, 1), + (10142, 57015, 57031, 'OP_GroupSettingsChangedMsg', 95, 1), + (10143, 57015, 57031, 'OP_GuildBankActionMsg', 274, 1), + (10144, 57015, 57031, 'OP_GuildBankActionResponseMsg', 275, 1), + (10145, 57015, 57031, 'OP_GuildBankEventListMsg', 279, 1), + (10146, 57015, 57031, 'OP_GuildBankItemDetailsRequestMsg', 276, 1), + (10147, 57015, 57031, 'OP_GuildBankItemDetailsResponseMs', 277, 1), + (10148, 57015, 57031, 'OP_GuildBankUpdateMsg', 278, 1), + (10149, 57015, 57031, 'OP_GuildEventActionMsg', 269, 1), + (10150, 57015, 57031, 'OP_GuildEventAddMsg', 268, 1), + (10151, 57015, 57031, 'OP_GuildEventDetailsMsg', 272, 1), + (10152, 57015, 57031, 'OP_GuildEventListMsg', 270, 1), + (10153, 57015, 57031, 'OP_GuildEventMsg', 267, 1), + (10154, 57015, 57031, 'OP_GuildMembershipResponseMsg', 357, 1), + (10155, 57015, 57031, 'OP_GuildRecruiting', 691, 1), + (10156, 57015, 57031, 'OP_GuildRecruitingDetails', 692, 1), + (10157, 57015, 57031, 'OP_GuildRecruitingImage', 693, 1), + (10158, 57015, 57031, 'OP_GuildRecruitingMemberInfo', 690, 1), + (10159, 57015, 57031, 'OP_GuildsayMsg', 121, 1), + (10160, 57015, 57031, 'OP_GuildStatusUpdate', 684, 1), + (10161, 57015, 57031, 'OP_GuildUpdateMsg', 124, 1), + (10162, 57015, 57031, 'OP_HideIllusionsMsg', 194, 1), + (10163, 57015, 57031, 'OP_HouseAccessRemoveMsg', 158, 1), + (10164, 57015, 57031, 'OP_HouseAccessSetMsg', 157, 1), + (10165, 57015, 57031, 'OP_HouseCustomizationScreenMsg', 166, 1), + (10166, 57015, 57031, 'OP_HouseDefaultAccessSetMsg', 156, 1), + (10167, 57015, 57031, 'OP_HouseDeletedRemotelyMsg', 142, 1), + (10168, 57015, 57031, 'OP_HouseItemsList', 483, 1), + (10169, 57015, 57031, 'OP_HousingDataChangedMsg', 427, 1), + (10170, 57015, 57031, 'OP_HousingRestoreMsg', 428, 1), + (10171, 57015, 57031, 'OP_InspectPlayerMsg', 363, 1), + (10172, 57015, 57031, 'OP_InspectPlayerRequestMsg', 450, 1), + (10173, 57015, 57031, 'OP_InviteRequestMsg', 447, 1), + (10174, 57015, 57031, 'OP_InviteResponseMsg', 448, 1), + (10175, 57015, 57031, 'OP_InviteTargetResponseMsg', 449, 1), + (10176, 57015, 57031, 'OP_JoinGuildNotifyMsg', 359, 1), + (10177, 57015, 57031, 'OP_JournalQuestStoryline', 733, 1), + (10178, 57015, 57031, 'OP_KeymapDataMsg', 177, 1), + (10179, 57015, 57031, 'OP_KeymapLoadMsg', 175, 1), + (10180, 57015, 57031, 'OP_KeymapNoneMsg', 176, 1), + (10181, 57015, 57031, 'OP_KeymapSaveMsg', 178, 1), + (10182, 57015, 57031, 'OP_KnowledgebaseRequestMsg', 227, 1), + (10183, 57015, 57031, 'OP_KnowledgebaseResponseMsg', 228, 1), + (10184, 57015, 57031, 'OP_KnowledgeWindowSlotMappingMsg', 369, 1), + (10185, 57015, 57031, 'OP_KnownLanguagesMsg', 238, 1), + (10186, 57015, 57031, 'OP_Launchpad', 570, 1), + (10187, 57015, 57031, 'OP_LeaveGuildNotifyMsg', 358, 1), + (10188, 57015, 57031, 'OP_LevelChangedMsg', 261, 1), + (10189, 57015, 57031, 'OP_LFGGroupSearch', 504, 1), + (10190, 57015, 57031, 'OP_LFGUpdateMsg', 518, 1), + (10191, 57015, 57031, 'OP_LikeOption', 135, 1), + (10192, 57015, 57031, 'OP_LoadCalendarEvents', 573, 1), + (10193, 57015, 57031, 'OP_LoadWelcomeWindow', 558, 1), + (10194, 57015, 57031, 'OP_LoginByNumRequestMsg', 1, 1), + (10195, 57015, 57031, 'OP_LoginReplyMsg', 4, 1), + (10196, 57015, 57031, 'OP_LoginRequestMsg', 0, 1), + (10197, 57015, 57031, 'OP_LootItemsRequestMsg', 185, 1), + (10198, 57015, 57031, 'OP_Lottery', 689, 1), + (10199, 57015, 57031, 'OP_LSCheckAcctLockMsg', 204, 1), + (10200, 57015, 57031, 'OP_LsClientAlertlogReplyMsg', 242, 1), + (10201, 57015, 57031, 'OP_LsClientBaselogReplyMsg', 240, 1), + (10202, 57015, 57031, 'OP_LsClientCrashlogReplyMsg', 241, 1), + (10203, 57015, 57031, 'OP_LsClientVerifylogReplyMsg', 243, 1), + (10204, 57015, 57031, 'OP_LsRequestClientCrashLogMsg', 239, 1), + (10205, 57015, 57031, 'OP_LSServerLockMsg', 365, 1), + (10206, 57015, 57031, 'OP_MacroInitMsg', 258, 1), + (10207, 57015, 57031, 'OP_MacroUpdateMsg', 259, 1), + (10208, 57015, 57031, 'OP_MailCommitSendMessageMsg', 344, 1), + (10209, 57015, 57031, 'OP_MailDeleteMessageMsg', 340, 1), + (10210, 57015, 57031, 'OP_MailEventNotificationMsg', 411, 1), + (10211, 57015, 57031, 'OP_MailGetHeadersReplyMsg', 341, 1), + (10212, 57015, 57031, 'OP_MailGetMessageMsg', 338, 1), + (10213, 57015, 57031, 'OP_MailGetMessageReplyMsg', 342, 1), + (10214, 57015, 57031, 'OP_MailRemoveAttachFromMailMsg', 346, 1), + (10215, 57015, 57031, 'OP_MailSendMessageMsg', 339, 1), + (10216, 57015, 57031, 'OP_MailSendMessageReplyMsg', 343, 1), + (10217, 57015, 57031, 'OP_MailSendSystemMessageMsg', 345, 1), + (10218, 57015, 57031, 'OP_MakeGroupLeaderMsg', 87, 1), + (10219, 57015, 57031, 'OP_MapFogDataInitMsg', 395, 1), + (10220, 57015, 57031, 'OP_MapFogDataUpdateMsg', 396, 1), + (10221, 57015, 57031, 'OP_MapRequest', 521, 1), + (10222, 57015, 57031, 'OP_MarketAddFundsReply', 529, 1), + (10223, 57015, 57031, 'OP_MarketAddFundsRequest', 528, 1), + (10224, 57015, 57031, 'OP_MarketFundsUpdate', 526, 1), + (10225, 57015, 57031, 'OP_MarketPlaceItems', 535, 1), + (10226, 57015, 57031, 'OP_MarketPlacePrices', 532, 1), + (10227, 57015, 57031, 'OP_MarketPurchase', 531, 1), + (10228, 57015, 57031, 'OP_MentorPopup', 556, 1), + (10229, 57015, 57031, 'OP_MercHireWindow', 736, 1), + (10230, 57015, 57031, 'OP_MercUnknown', 737, 1), + (10231, 57015, 57031, 'OP_MigrateBoatTransportMsg', 252, 1), + (10232, 57015, 57031, 'OP_MigrateBoatTransportReplyMsg', 253, 1), + (10233, 57015, 57031, 'OP_MigrateClientToZoneReplyMsg', 82, 1), + (10234, 57015, 57031, 'OP_MigrateClientToZoneRequestMsg', 81, 1), + (10235, 57015, 57031, 'OP_ModifyGuildMsg', 266, 1), + (10236, 57015, 57031, 'OP_MonitorCharacterListMsg', 56, 1), + (10237, 57015, 57031, 'OP_MonitorCharacterListRequestMsg', 57, 1), + (10238, 57015, 57031, 'OP_MonitorReplyMsg', 55, 1), + (10239, 57015, 57031, 'OP_MOTDMsg', 44, 1), + (10240, 57015, 57031, 'OP_MoveableObjectPlacementCriteri', 160, 1), + (10241, 57015, 57031, 'OP_MoveLogUpdateMsg', 390, 1), + (10242, 57015, 57031, 'OP_NotifyApprenticeStoppedMentori', 408, 1), + (10243, 57015, 57031, 'OP_OfferQuestMsg', 401, 1), + (10244, 57015, 57031, 'OP_OnscreenMsgMsg', 264, 1), + (10245, 57015, 57031, 'OP_OpenCharCust', 559, 1), + (10246, 57015, 57031, 'OP_OutOfZoneMemberDataMsg', 96, 1), + (10247, 57015, 57031, 'OP_PayHouseUpkeepMsg', 159, 1), + (10248, 57015, 57031, 'OP_PerformCameraShakeMsg', 214, 1), + (10249, 57015, 57031, 'OP_PerformPlayerKnockbackMsg', 213, 1), + (10250, 57015, 57031, 'OP_PetOptions', 201, 1), + (10251, 57015, 57031, 'OP_PetOptionsResponse', 576, 1), + (10252, 57015, 57031, 'OP_PlayCharacterReplyMsg', 19, 1), + (10253, 57015, 57031, 'OP_PlayCharacterRequestMsg', 18, 1), + (10254, 57015, 57031, 'OP_PlayerHouseAccessUpdateMsg', 147, 1), + (10255, 57015, 57031, 'OP_PlayerHouseBaseScreenMsg', 145, 1), + (10256, 57015, 57031, 'OP_PlayerHouseCloseUIMsg', 149, 1), + (10257, 57015, 57031, 'OP_PlayerHouseDisplayStatusMsg', 148, 1), + (10258, 57015, 57031, 'OP_PlayerHousePurchaseScreenMsg', 146, 1), + (10259, 57015, 57031, 'OP_PlayerMadeInstacnesScreen', 139, 1), + (10260, 57015, 57031, 'OP_PlayerMadeInstances', 140, 1), + (10261, 57015, 57031, 'OP_PlayerPollAnswer', 555, 1), + (10262, 57015, 57031, 'OP_PlayerPollPopup', 554, 1), + (10263, 57015, 57031, 'OP_PlayLon', 511, 1), + (10264, 57015, 57031, 'OP_PointOfInterest', 715, 1), + (10265, 57015, 57031, 'OP_PointOfInterest2', 716, 1), + (10266, 57015, 57031, 'OP_PopulateSkillMapsMsg', 215, 1), + (10267, 57015, 57031, 'OP_PositionBoatTransportMsg', 251, 1), + (10268, 57015, 57031, 'OP_PositionMoveableObject', 162, 1), + (10269, 57015, 57031, 'OP_PostPossessionMsg', 454, 1), + (10270, 57015, 57031, 'OP_PredictionUpdateMsg', 37, 1), + (10271, 57015, 57031, 'OP_PrePossessionMsg', 453, 1), + (10272, 57015, 57031, 'OP_PromoFlagsDetailsMsg', 374, 1), + (10273, 57015, 57031, 'OP_PublishHouse', 138, 1), + (10274, 57015, 57031, 'OP_PurchaseConsignmentLoreCheckRe', 407, 1), + (10275, 57015, 57031, 'OP_PurchaseConsignmentRequestMsg', 128, 1), + (10276, 57015, 57031, 'OP_QueAllBgSolo', 562, 1), + (10277, 57015, 57031, 'OP_QuestionnaireMsg', 260, 1), + (10278, 57015, 57031, 'OP_QuestJournalInspectMsg', 114, 1), + (10279, 57015, 57031, 'OP_QuestJournalOpenMsg', 113, 1), + (10280, 57015, 57031, 'OP_QuestJournalSetVisibleMsg', 115, 1), + (10281, 57015, 57031, 'OP_QuestJournalWaypointMsg', 116, 1), + (10282, 57015, 57031, 'OP_QuestReward', 320, 1), + (10283, 57015, 57031, 'OP_QuickbarInitMsg', 256, 1), + (10284, 57015, 57031, 'OP_QuickbarUpdateMsg', 257, 1), + (10285, 57015, 57031, 'OP_RaceRestrictionMsg', 439, 1), + (10286, 57015, 57031, 'OP_ReadBookPageMsg', 196, 1), + (10287, 57015, 57031, 'OP_ReadyForTakeOffMsg', 192, 1), + (10288, 57015, 57031, 'OP_ReadyToZoneMsg', 84, 1), + (10289, 57015, 57031, 'OP_ReceipelistUnknown', 588, 1), + (10290, 57015, 57031, 'OP_RecipeBook', 536, 1), + (10291, 57015, 57031, 'OP_RecipeDetailsMsg', 72, 1), + (10292, 57015, 57031, 'OP_RecipeList', 727, 1), + (10293, 57015, 57031, 'OP_RelinquishHouseMsg', 153, 1), + (10294, 57015, 57031, 'OP_ReloadLocalizedTxtMsg', 355, 1), + (10295, 57015, 57031, 'OP_RemoteCmdMsg', 42, 1), + (10296, 57015, 57031, 'OP_RemoveClientFromGroupMsg', 85, 1), + (10297, 57015, 57031, 'OP_RemoveConcentrationMsg', 112, 1), + (10298, 57015, 57031, 'OP_RemoveGroupFromGroupMsg', 86, 1), + (10299, 57015, 57031, 'OP_RemoveSpellEffectMsg', 111, 1), + (10300, 57015, 57031, 'OP_RenameGuildMsg', 282, 1), + (10301, 57015, 57031, 'OP_ReplaceableSubMeshesMsg', 165, 1), + (10302, 57015, 57031, 'OP_ReportMsg', 380, 1), + (10303, 57015, 57031, 'OP_RequestCampMsg', 50, 1), + (10304, 57015, 57031, 'OP_RequestGuildBankEventDetailsMs', 280, 1), + (10305, 57015, 57031, 'OP_RequestGuildEventDetailsMsg', 271, 1), + (10306, 57015, 57031, 'OP_RequestGuildInfoMsg', 273, 1), + (10307, 57015, 57031, 'OP_RequestGuildMembershipMsg', 356, 1), + (10308, 57015, 57031, 'OP_RequestHelpRepathMsg', 206, 1), + (10309, 57015, 57031, 'OP_RequestRecipeDetailsMsg', 71, 1), + (10310, 57015, 57031, 'OP_RequestTargetLocMsg', 207, 1), + (10311, 57015, 57031, 'OP_Research', 728, 1), + (10312, 57015, 57031, 'OP_ResendWorldChannelsMsg', 443, 1), + (10313, 57015, 57031, 'OP_ReskinCharacterRequestMsg', 15, 1), + (10314, 57015, 57031, 'OP_RestartZoneMsg', 412, 1), + (10315, 57015, 57031, 'OP_RewardPackMsg', 281, 1), + (10316, 57015, 57031, 'OP_SatMsg', 189, 1), + (10317, 57015, 57031, 'OP_SavageBarInitMsg', 575, 1), + (10318, 57015, 57031, 'OP_SelectZoneTeleporterDestinatio', 354, 1), + (10319, 57015, 57031, 'OP_SendLatestRequestMsg', 97, 1), + (10320, 57015, 57031, 'OP_ServerPlayCharacterReplyMsg', 24, 1), + (10321, 57015, 57031, 'OP_ServerPlayCharacterRequestMsg', 23, 1), + (10322, 57015, 57031, 'OP_SetInstanceDisplayNameMsg', 440, 1), + (10323, 57015, 57031, 'OP_SetRemoteCmdsMsg', 41, 1), + (10324, 57015, 57031, 'OP_SetSocialMsg', 99, 1), + (10325, 57015, 57031, 'OP_ShaderCustomizationMsg', 164, 1), + (10326, 57015, 57031, 'OP_ShowCreateFromRecipeUIMsg', 219, 1), + (10327, 57015, 57031, 'OP_ShowIllusionsMsg', 193, 1), + (10328, 57015, 57031, 'OP_ShowItemCreationProcessUIMsg', 223, 1), + (10329, 57015, 57031, 'OP_ShowRecipeBookMsg', 226, 1), + (10330, 57015, 57031, 'OP_ShowZoneTeleporterDestinations', 353, 1), + (10331, 57015, 57031, 'OP_SitMsg', 187, 1), + (10332, 57015, 57031, 'OP_SkillInfoRequest', 514, 1), + (10333, 57015, 57031, 'OP_SkillInfoResponse', 515, 1), + (10334, 57015, 57031, 'OP_SpellGainedMsg', 262, 1), + (10335, 57015, 57031, 'OP_StandMsg', 188, 1), + (10336, 57015, 57031, 'OP_StoodMsg', 190, 1), + (10337, 57015, 57031, 'OP_StopItemCreationMsg', 222, 1), + (10338, 57015, 57031, 'OP_StoppedLootingMsg', 186, 1), + (10339, 57015, 57031, 'OP_StopTrackingMsg', 391, 1), + (10340, 57015, 57031, 'OP_SubmitCharCust', 560, 1), + (10341, 57015, 57031, 'OP_SupplyDepot', 725, 1), + (10342, 57015, 57031, 'OP_SysClient', 218, 1), + (10343, 57015, 57031, 'OP_TeleportWithinZoneMsg', 79, 1), + (10344, 57015, 57031, 'OP_TeleportWithinZoneNoReloadMsg', 80, 1), + (10345, 57015, 57031, 'OP_TintWidgetsMsg', 170, 1), + (10346, 57015, 57031, 'OP_TitleUpdateMsg', 384, 1), + (10347, 57015, 57031, 'OP_TrackingUpdateMsg', 389, 1), + (10348, 57015, 57031, 'OP_TradeskillList', 711, 1), + (10349, 57015, 57031, 'OP_TraitsList', 717, 1), + (10350, 57015, 57031, 'OP_UIEvent', 527, 1), + (10351, 57015, 57031, 'OP_UIResetMsg', 174, 1), + (10352, 57015, 57031, 'OP_UISettingsResponseMsg', 173, 1), + (10353, 57015, 57031, 'OP_Unknown', 753, 1), + (10354, 57015, 57031, 'OP_UnknownNpcMsg', 373, 1), + (10355, 57015, 57031, 'OP_UpdateActivePublicZonesMsg', 372, 1), + (10356, 57015, 57031, 'OP_UpdateCharacterSheetMsg', 63, 1), + (10357, 57015, 57031, 'OP_UpdateClientPredFlagsMsg', 245, 1), + (10358, 57015, 57031, 'OP_UpdateDebugRadiiMsg', 379, 1), + (10359, 57015, 57031, 'OP_UpdateGroupMemberDataMsg', 398, 1), + (10360, 57015, 57031, 'OP_UpdateHouseAccessDataMsg', 144, 1), + (10361, 57015, 57031, 'OP_UpdateHouseDataMsg', 143, 1), + (10362, 57015, 57031, 'OP_UpdateInventoryMsg', 68, 1), + (10363, 57015, 57031, 'OP_UpdateItemCreationProcessUIMsg', 224, 1), + (10364, 57015, 57031, 'OP_UpdateMotdMsg', 208, 1), + (10365, 57015, 57031, 'OP_UpdateOpportunityMsg', 75, 1), + (10366, 57015, 57031, 'OP_UpdatePositionMsg', 39, 1), + (10367, 57015, 57031, 'OP_UpdateRaidMsg', 381, 1), + (10368, 57015, 57031, 'OP_UpdateRecipeBookMsg', 70, 1), + (10369, 57015, 57031, 'OP_UpdateSkillBookMsg', 73, 1), + (10370, 57015, 57031, 'OP_UpdateSkillsMsg', 74, 1), + (10371, 57015, 57031, 'OP_UpdateSpellBookMsg', 66, 1), + (10372, 57015, 57031, 'OP_UpdateTargetLocMsg', 62, 1), + (10373, 57015, 57031, 'OP_UpdateTargetMsg', 61, 1), + (10374, 57015, 57031, 'OP_UpdateTitleCmd', 494, 1), + (10375, 57015, 57031, 'OP_UseAdornment', 705, 1), + (10376, 57015, 57031, 'OP_VideoUploaded', 574, 1), + (10377, 57015, 57031, 'OP_VoiceChatChannel', 520, 1), + (10378, 57015, 57031, 'OP_VoiceChatServer', 721, 1), + (10379, 57015, 57031, 'OP_WaypointReplyMsg', 349, 1), + (10380, 57015, 57031, 'OP_WaypointRequestMsg', 348, 1), + (10381, 57015, 57031, 'OP_WaypointSelectMsg', 350, 1), + (10382, 57015, 57031, 'OP_WaypointUpdateMsg', 351, 1), + (10383, 57015, 57031, 'OP_Weakness', 578, 1), + (10384, 57015, 57031, 'OP_WhoQueryReplyMsg', 54, 1), + (10385, 57015, 57031, 'OP_WhoQueryRequestMsg', 53, 1), + (10386, 57015, 57031, 'OP_WorldDataChangeMsg', 410, 1), + (10387, 57015, 57031, 'OP_WorldDataUpdateMsg', 237, 1), + (10388, 57015, 57031, 'OP_WorldListMsg', 8, 1), + (10389, 57015, 57031, 'OP_WorldPingMsg', 399, 1), + (10390, 57015, 57031, 'OP_WorldShutdownUpdateMsg', 403, 1), + (10391, 57015, 57031, 'OP_WorldStatusChangeMsg', 6, 1), + (10392, 57015, 57031, 'OP_WorldTravelAvail', 568, 1), + (10393, 57015, 57031, 'OP_WSAcctLockStatusMsg', 205, 1), + (10394, 57015, 57031, 'OP_WSCreateCharacterReplyMsg', 14, 1), + (10395, 57015, 57031, 'OP_WSCreateCharacterRequestMsg', 13, 1), + (10396, 57015, 57031, 'OP_WSLoginRequestMsg', 2, 1), + (10397, 57015, 57031, 'OP_WSServerHideMsg', 366, 1), + (10398, 57015, 57031, 'OP_WSServerLockMsg', 364, 1), + (10399, 57015, 57031, 'OP_WSStatusReplyMsg', 5, 1), + (10400, 57015, 57031, 'OP_ZoneBgInstanceList', 564, 1), + (10401, 57015, 57031, 'OP_ZoneInfoMsg', 33, 1), + (10402, 57015, 57031, 'OP_ZoneInstanceCreateReplyMsg', 30, 1), + (10403, 57015, 57031, 'OP_ZoneInstanceDestroyedMsg', 31, 1), + (10404, 57015, 57031, 'OP_ZoneMOTDMsg', 45, 1), + (10405, 57015, 57031, 'OP_ZonesStatusMsg', 103, 1), + (10406, 57015, 57031, 'OP_ZonesStatusRequestMsg', 102, 1), + (10407, 57015, 57031, 'OP_ZoneToFriendReplyMsg', 284, 1), + (10408, 57015, 57031, 'OP_ZoneToFriendRequestMsg', 283, 1), + (10409, 57107, 57109, 'OP_LoginRequestMsg', 0, 1), + (10410, 57107, 57109, 'OP_LoginByNumRequestMsg', 1, 1), + (10411, 57107, 57109, 'OP_WSLoginRequestMsg', 2, 1), + (10412, 57107, 57109, 'OP_ESLoginRequestMsg', 3, 1), + (10413, 57107, 57109, 'OP_LoginReplyMsg', 4, 1), + (10414, 57107, 57109, 'OP_WSStatusReplyMsg', 5, 1), + (10415, 57107, 57109, 'OP_WorldStatusChangeMsg', 6, 1), + (10416, 57107, 57109, 'OP_AllWSDescRequestMsg', 7, 1), + (10417, 57107, 57109, 'OP_WorldListMsg', 8, 1), + (10418, 57107, 57109, 'OP_AllCharactersDescRequestMsg', 9, 1), + (10419, 57107, 57109, 'OP_AllCharactersDescReplyMsg', 10, 1), + (10420, 57107, 57109, 'OP_CreateCharacterRequestMsg', 11, 1), + (10421, 57107, 57109, 'OP_CreateCharacterReplyMsg', 12, 1), + (10422, 57107, 57109, 'OP_WSCreateCharacterRequestMsg', 13, 1), + (10423, 57107, 57109, 'OP_WSCreateCharacterReplyMsg', 14, 1), + (10424, 57107, 57109, 'OP_ReskinCharacterRequestMsg', 15, 1), + (10425, 57107, 57109, 'OP_DeleteCharacterRequestMsg', 16, 1), + (10426, 57107, 57109, 'OP_DeleteCharacterReplyMsg', 17, 1), + (10427, 57107, 57109, 'OP_PlayCharacterRequestMsg', 18, 1), + (10428, 57107, 57109, 'OP_PlayCharacterReplyMsg', 19, 1), + (10429, 57107, 57109, 'OP_ExpectClientAsCharacterReplyMs', 22, 1), + (10430, 57107, 57109, 'OP_ServerPlayCharacterRequestMsg', 23, 1), + (10431, 57107, 57109, 'OP_ServerPlayCharacterReplyMsg', 24, 1), + (10432, 57107, 57109, 'OP_ESInitMsg', 25, 1), + (10433, 57107, 57109, 'OP_ESReadyForClientsMsg', 26, 1), + (10434, 57107, 57109, 'OP_CreateZoneInstanceMsg', 29, 1), + (10435, 57107, 57109, 'OP_ZoneInstanceCreateReplyMsg', 30, 1), + (10436, 57107, 57109, 'OP_ZoneInstanceDestroyedMsg', 31, 1), + (10437, 57107, 57109, 'OP_ExpectClientAsCharacterRequest', 32, 1), + (10438, 57107, 57109, 'OP_ZoneInfoMsg', 33, 1), + (10439, 57107, 57109, 'OP_DoneLoadingZoneResourcesMsg', 34, 1), + (10440, 57107, 57109, 'OP_DoneSendingInitialEntitiesMsg', 35, 1), + (10441, 57107, 57109, 'OP_DoneLoadingEntityResourcesMsg', 36, 1), + (10442, 57107, 57109, 'OP_PredictionUpdateMsg', 37, 1), + (10443, 57107, 57109, 'OP_UpdatePositionMsg', 39, 1), + (10444, 57107, 57109, 'OP_SetRemoteCmdsMsg', 41, 1), + (10445, 57107, 57109, 'OP_RemoteCmdMsg', 42, 1), + (10446, 57107, 57109, 'OP_GameWorldTimeMsg', 43, 1), + (10447, 57107, 57109, 'OP_MOTDMsg', 44, 1), + (10448, 57107, 57109, 'OP_ZoneMOTDMsg', 45, 1), + (10449, 57107, 57109, 'OP_AvatarCreatedMsg', 46, 1), + (10450, 57107, 57109, 'OP_AvatarDestroyedMsg', 47, 1), + (10451, 57107, 57109, 'OP_RequestCampMsg', 50, 1), + (10452, 57107, 57109, 'OP_CampStartedMsg', 51, 1), + (10453, 57107, 57109, 'OP_CampAbortedMsg', 52, 1), + (10454, 57107, 57109, 'OP_WhoQueryRequestMsg', 53, 1), + (10455, 57107, 57109, 'OP_WhoQueryReplyMsg', 54, 1), + (10456, 57107, 57109, 'OP_MonitorReplyMsg', 55, 1), + (10457, 57107, 57109, 'OP_MonitorCharacterListMsg', 56, 1), + (10458, 57107, 57109, 'OP_MonitorCharacterListRequestMsg', 57, 1), + (10459, 57107, 57109, 'OP_ClientCmdMsg', 58, 1), + (10460, 57107, 57109, 'OP_DispatchESMsg', 59, 1), + (10461, 57107, 57109, 'OP_DispatchClientCmdMsg', 60, 1), + (10462, 57107, 57109, 'OP_UpdateTargetMsg', 61, 1), + (10463, 57107, 57109, 'OP_UpdateTargetLocMsg', 62, 1), + (10464, 57107, 57109, 'OP_UpdateCharacterSheetMsg', 63, 1), + (10465, 57107, 57109, 'OP_CharacterPet', 64, 1), + (10466, 57107, 57109, 'OP_CharacterMerc', 65, 1), + (10467, 57107, 57109, 'OP_UpdateSpellBookMsg', 66, 1), + (10468, 57107, 57109, 'OP_UpdateInventoryMsg', 68, 1), + (10469, 57107, 57109, 'OP_AfterInvSpellUpdate', 69, 1), + (10470, 57107, 57109, 'OP_UpdateRecipeBookMsg', 70, 1), + (10471, 57107, 57109, 'OP_RequestRecipeDetailsMsg', 71, 1), + (10472, 57107, 57109, 'OP_RecipeDetailsMsg', 72, 1), + (10473, 57107, 57109, 'OP_UpdateSkillBookMsg', 73, 1), + (10474, 57107, 57109, 'OP_UpdateSkillsMsg', 74, 1), + (10475, 57107, 57109, 'OP_UpdateOpportunityMsg', 75, 1), + (10476, 57107, 57109, 'OP_ChangeZoneMsg', 77, 1), + (10477, 57107, 57109, 'OP_ClientTeleportRequestMsg', 78, 1), + (10478, 57107, 57109, 'OP_TeleportWithinZoneMsg', 79, 1), + (10479, 57107, 57109, 'OP_TeleportWithinZoneNoReloadMsg', 80, 1), + (10480, 57107, 57109, 'OP_MigrateClientToZoneRequestMsg', 81, 1), + (10481, 57107, 57109, 'OP_MigrateClientToZoneReplyMsg', 82, 1), + (10482, 57107, 57109, 'OP_ReadyToZoneMsg', 84, 1), + (10483, 57107, 57109, 'OP_RemoveClientFromGroupMsg', 85, 1), + (10484, 57107, 57109, 'OP_RemoveGroupFromGroupMsg', 86, 1), + (10485, 57107, 57109, 'OP_MakeGroupLeaderMsg', 87, 1), + (10486, 57107, 57109, 'OP_GroupCreatedMsg', 88, 1), + (10487, 57107, 57109, 'OP_GroupDestroyedMsg', 89, 1), + (10488, 57107, 57109, 'OP_GroupMemberAddedMsg', 90, 1), + (10489, 57107, 57109, 'OP_GroupMemberRemovedMsg', 91, 1), + (10490, 57107, 57109, 'OP_GroupRemovedFromGroupMsg', 92, 1), + (10491, 57107, 57109, 'OP_GroupLeaderChangedMsg', 93, 1), + (10492, 57107, 57109, 'OP_GroupResendOOZDataMsg', 94, 1), + (10493, 57107, 57109, 'OP_GroupSettingsChangedMsg', 95, 1), + (10494, 57107, 57109, 'OP_OutOfZoneMemberDataMsg', 96, 1), + (10495, 57107, 57109, 'OP_SendLatestRequestMsg', 97, 1), + (10496, 57107, 57109, 'OP_ClearDataMsg', 98, 1), + (10497, 57107, 57109, 'OP_SetSocialMsg', 99, 1), + (10498, 57107, 57109, 'OP_ESStatusMsg', 100, 1), + (10499, 57107, 57109, 'OP_ESZoneInstanceStatusMsg', 101, 1), + (10500, 57107, 57109, 'OP_ZonesStatusRequestMsg', 102, 1), + (10501, 57107, 57109, 'OP_ZonesStatusMsg', 103, 1), + (10502, 57107, 57109, 'OP_ESWeatherRequestMsg', 104, 1), + (10503, 57107, 57109, 'OP_ESWeatherRequestEndMsg', 105, 1), + (10504, 57107, 57109, 'OP_DialogSelectMsg', 109, 1), + (10505, 57107, 57109, 'OP_DialogCloseMsg', 110, 1), + (10506, 57107, 57109, 'OP_RemoveSpellEffectMsg', 111, 1), + (10507, 57107, 57109, 'OP_RemoveConcentrationMsg', 112, 1), + (10508, 57107, 57109, 'OP_QuestJournalOpenMsg', 113, 1), + (10509, 57107, 57109, 'OP_QuestJournalInspectMsg', 114, 1), + (10510, 57107, 57109, 'OP_QuestJournalSetVisibleMsg', 115, 1), + (10511, 57107, 57109, 'OP_QuestJournalWaypointMsg', 116, 1), + (10512, 57107, 57109, 'OP_CreateGuildRequestMsg', 119, 1), + (10513, 57107, 57109, 'OP_CreateGuildReplyMsg', 120, 1), + (10514, 57107, 57109, 'OP_GuildsayMsg', 121, 1), + (10515, 57107, 57109, 'OP_FellowshipExpMsg', 122, 1), + (10516, 57107, 57109, 'OP_DeleteGuildMsg', 123, 1), + (10517, 57107, 57109, 'OP_GuildUpdateMsg', 124, 1), + (10518, 57107, 57109, 'OP_ConsignmentCloseStoreMsg', 125, 1), + (10519, 57107, 57109, 'OP_ConsignItemRequestMsg', 126, 1), + (10520, 57107, 57109, 'OP_ConsignItemResponseMsg', 127, 1), + (10521, 57107, 57109, 'OP_PurchaseConsignmentRequestMsg', 128, 1), + (10522, 57107, 57109, 'OP_LikeOption', 136, 1), + (10523, 57107, 57109, 'OP_PublishHouse', 138, 1), + (10524, 57107, 57109, 'OP_PlayerMadeInstancesScreen', 139, 1), + (10525, 57107, 57109, 'OP_PlayerMadeInstances', 140, 1), + (10526, 57107, 57109, 'OP_HouseDeletedRemotelyMsg', 142, 1), + (10527, 57107, 57109, 'OP_UpdateHouseDataMsg', 143, 1), + (10528, 57107, 57109, 'OP_UpdateHouseAccessDataMsg', 144, 1), + (10529, 57107, 57109, 'OP_PlayerHouseBaseScreenMsg', 145, 1), + (10530, 57107, 57109, 'OP_PlayerHousePurchaseScreenMsg', 146, 1), + (10531, 57107, 57109, 'OP_PlayerHouseAccessUpdateMsg', 147, 1), + (10532, 57107, 57109, 'OP_PlayerHouseDisplayStatusMsg', 148, 1), + (10533, 57107, 57109, 'OP_PlayerHouseCloseUIMsg', 149, 1), + (10534, 57107, 57109, 'OP_BuyPlayerHouseMsg', 150, 1), + (10535, 57107, 57109, 'OP_BuyPlayerHouseTintMsg', 151, 1), + (10536, 57107, 57109, 'OP_CollectAllHouseItemsMsg', 152, 1), + (10537, 57107, 57109, 'OP_RelinquishHouseMsg', 153, 1), + (10538, 57107, 57109, 'OP_EnterHouseMsg', 154, 1), + (10539, 57107, 57109, 'OP_ExitHouseMsg', 155, 1), + (10540, 57107, 57109, 'OP_HouseDefaultAccessSetMsg', 156, 1), + (10541, 57107, 57109, 'OP_HouseAccessSetMsg', 157, 1), + (10542, 57107, 57109, 'OP_HouseAccessRemoveMsg', 158, 1), + (10543, 57107, 57109, 'OP_PayHouseUpkeepMsg', 159, 1), + (10544, 57107, 57109, 'OP_MoveableObjectPlacementCriteri', 160, 1), + (10545, 57107, 57109, 'OP_EnterMoveObjectModeMsg', 161, 1), + (10546, 57107, 57109, 'OP_PositionMoveableObject', 162, 1), + (10547, 57107, 57109, 'OP_CancelMoveObjectModeMsg', 163, 1), + (10548, 57107, 57109, 'OP_ShaderCustomizationMsg', 164, 1), + (10549, 57107, 57109, 'OP_ReplaceableSubMeshesMsg', 165, 1), + (10550, 57107, 57109, 'OP_HouseCustomizationScreenMsg', 166, 1), + (10551, 57107, 57109, 'OP_CustomizationPurchaseRequestMs', 167, 1), + (10552, 57107, 57109, 'OP_CustomizationSetRequestMsg', 168, 1), + (10553, 57107, 57109, 'OP_CustomizationReplyMsg', 169, 1), + (10554, 57107, 57109, 'OP_TintWidgetsMsg', 170, 1), + (10555, 57107, 57109, 'OP_ExamineConsignmentRequestMsg', 171, 1), + (10556, 57107, 57109, 'OP_ExamineConsignmentResponseMsg', 172, 1), + (10557, 57107, 57109, 'OP_UISettingsResponseMsg', 173, 1), + (10558, 57107, 57109, 'OP_UIResetMsg', 174, 1), + (10559, 57107, 57109, 'OP_KeymapLoadMsg', 175, 1), + (10560, 57107, 57109, 'OP_KeymapNoneMsg', 176, 1), + (10561, 57107, 57109, 'OP_KeymapDataMsg', 177, 1), + (10562, 57107, 57109, 'OP_KeymapSaveMsg', 178, 1), + (10563, 57107, 57109, 'OP_DispatchSpellCmdMsg', 179, 1), + (10564, 57107, 57109, 'OP_EntityVerbsRequestMsg', 180, 1), + (10565, 57107, 57109, 'OP_EntityVerbsReplyMsg', 181, 1), + (10566, 57107, 57109, 'OP_EntityVerbsVerbMsg', 182, 1), + (10567, 57107, 57109, 'OP_ChatRelationshipUpdateMsg', 184, 1), + (10568, 57107, 57109, 'OP_LootItemsRequestMsg', 185, 1), + (10569, 57107, 57109, 'OP_StoppedLootingMsg', 186, 1), + (10570, 57107, 57109, 'OP_SitMsg', 187, 1), + (10571, 57107, 57109, 'OP_StandMsg', 188, 1), + (10572, 57107, 57109, 'OP_SatMsg', 189, 1), + (10573, 57107, 57109, 'OP_StoodMsg', 190, 1), + (10574, 57107, 57109, 'OP_ClearForTakeOffMsg', 191, 1), + (10575, 57107, 57109, 'OP_ReadyForTakeOffMsg', 192, 1), + (10576, 57107, 57109, 'OP_ShowIllusionsMsg', 193, 1), + (10577, 57107, 57109, 'OP_HideIllusionsMsg', 194, 1), + (10578, 57107, 57109, 'OP_ExamineItemRequestMsg', 195, 1), + (10579, 57107, 57109, 'OP_ReadBookPageMsg', 196, 1), + (10580, 57107, 57109, 'OP_DefaultGroupOptionsRequestMsg', 197, 1), + (10581, 57107, 57109, 'OP_DefaultGroupOptionsMsg', 198, 1), + (10582, 57107, 57109, 'OP_GroupOptionsMsg', 199, 1), + (10583, 57107, 57109, 'OP_DisplayGroupOptionsScreenMsg', 200, 1), + (10584, 57107, 57109, 'OP_PetOptions', 201, 1), + (10585, 57107, 57109, 'OP_DisplayInnVisitScreenMsg', 202, 1), + (10586, 57107, 57109, 'OP_DumpSchedulerMsg', 203, 1), + (10587, 57107, 57109, 'OP_LSCheckAcctLockMsg', 204, 1), + (10588, 57107, 57109, 'OP_WSAcctLockStatusMsg', 205, 1), + (10589, 57107, 57109, 'OP_RequestHelpRepathMsg', 206, 1), + (10590, 57107, 57109, 'OP_RequestTargetLocMsg', 207, 1), + (10591, 57107, 57109, 'OP_UpdateMotdMsg', 208, 1), + (10592, 57107, 57109, 'OP_DestUpdateReq', 210, 1), + (10593, 57107, 57109, 'OP_PerformPlayerKnockbackMsg', 213, 1), + (10594, 57107, 57109, 'OP_PerformCameraShakeMsg', 214, 1), + (10595, 57107, 57109, 'OP_PopulateSkillMapsMsg', 215, 1), + (10596, 57107, 57109, 'OP_CancelledFeignMsg', 216, 1), + (10597, 57107, 57109, 'OP_SysClient', 218, 1), + (10598, 57107, 57109, 'OP_ShowCreateFromRecipeUIMsg', 219, 1), + (10599, 57107, 57109, 'OP_CancelCreateFromRecipeMsg', 220, 1), + (10600, 57107, 57109, 'OP_BeginItemCreationMsg', 221, 1), + (10601, 57107, 57109, 'OP_StopItemCreationMsg', 222, 1), + (10602, 57107, 57109, 'OP_ShowItemCreationProcessUIMsg', 223, 1), + (10603, 57107, 57109, 'OP_UpdateItemCreationProcessUIMsg', 224, 1), + (10604, 57107, 57109, 'OP_DisplayTSEventReactionMsg', 225, 1), + (10605, 57107, 57109, 'OP_ShowRecipeBookMsg', 226, 1), + (10606, 57107, 57109, 'OP_KnowledgebaseRequestMsg', 227, 1), + (10607, 57107, 57109, 'OP_KnowledgebaseResponseMsg', 228, 1), + (10608, 57107, 57109, 'OP_CSTicketHeaderRequestMsg', 229, 1), + (10609, 57107, 57109, 'OP_CSTicketInfoMsg', 230, 1), + (10610, 57107, 57109, 'OP_CSTicketCommentRequestMsg', 231, 1), + (10611, 57107, 57109, 'OP_CSTicketCommentResponseMsg', 232, 1), + (10612, 57107, 57109, 'OP_CSTicketCreateMsg', 233, 1), + (10613, 57107, 57109, 'OP_CSTicketAddCommentMsg', 234, 1), + (10614, 57107, 57109, 'OP_CSTicketDeleteMsg', 235, 1), + (10615, 57107, 57109, 'OP_CSTicketChangeNotificationMsg', 236, 1), + (10616, 57107, 57109, 'OP_WorldDataUpdateMsg', 237, 1), + (10617, 57107, 57109, 'OP_KnownLanguagesMsg', 238, 1), + (10618, 57107, 57109, 'OP_LsRequestClientCrashLogMsg', 239, 1), + (10619, 57107, 57109, 'OP_LsClientBaselogReplyMsg', 240, 1), + (10620, 57107, 57109, 'OP_LsClientCrashlogReplyMsg', 241, 1), + (10621, 57107, 57109, 'OP_LsClientAlertlogReplyMsg', 242, 1), + (10622, 57107, 57109, 'OP_LsClientVerifylogReplyMsg', 243, 1), + (10623, 57107, 57109, 'OP_ClientTeleportToLocationMsg', 244, 1), + (10624, 57107, 57109, 'OP_UpdateClientPredFlagsMsg', 245, 1), + (10625, 57107, 57109, 'OP_ChangeServerControlFlagMsg', 246, 1), + (10626, 57107, 57109, 'OP_CSToolsRequestMsg', 247, 1), + (10627, 57107, 57109, 'OP_CSToolsResponseMsg', 248, 1), + (10628, 57107, 57109, 'OP_AddSocialStructureStandingMsg', 249, 1), + (10629, 57107, 57109, 'OP_CreateBoatTransportsMsg', 250, 1), + (10630, 57107, 57109, 'OP_PositionBoatTransportMsg', 251, 1), + (10631, 57107, 57109, 'OP_MigrateBoatTransportMsg', 252, 1), + (10632, 57107, 57109, 'OP_MigrateBoatTransportReplyMsg', 253, 1), + (10633, 57107, 57109, 'OP_DisplayDebugNLLPointsMsg', 254, 1), + (10634, 57107, 57109, 'OP_ExamineInfoRequestMsg', 255, 1), + (10635, 57107, 57109, 'OP_QuickbarInitMsg', 256, 1), + (10636, 57107, 57109, 'OP_QuickbarUpdateMsg', 257, 1), + (10637, 57107, 57109, 'OP_MacroInitMsg', 258, 1), + (10638, 57107, 57109, 'OP_MacroUpdateMsg', 259, 1), + (10639, 57107, 57109, 'OP_QuestionnaireMsg', 260, 1), + (10640, 57107, 57109, 'OP_LevelChangedMsg', 261, 1), + (10641, 57107, 57109, 'OP_SpellGainedMsg', 262, 1), + (10642, 57107, 57109, 'OP_EncounterBrokenMsg', 263, 1), + (10643, 57107, 57109, 'OP_OnscreenMsgMsg', 264, 1), + (10644, 57107, 57109, 'OP_DisplayWarningMsg', 265, 1), + (10645, 57107, 57109, 'OP_ModifyGuildMsg', 266, 1), + (10646, 57107, 57109, 'OP_GuildEventMsg', 267, 1), + (10647, 57107, 57109, 'OP_GuildEventAddMsg', 268, 1), + (10648, 57107, 57109, 'OP_GuildEventActionMsg', 269, 1), + (10649, 57107, 57109, 'OP_GuildEventListMsg', 270, 1), + (10650, 57107, 57109, 'OP_RequestGuildEventDetailsMsg', 271, 1), + (10651, 57107, 57109, 'OP_GuildEventDetailsMsg', 272, 1), + (10652, 57107, 57109, 'OP_RequestGuildInfoMsg', 273, 1), + (10653, 57107, 57109, 'OP_GuildBankActionMsg', 274, 1), + (10654, 57107, 57109, 'OP_GuildBankActionResponseMsg', 275, 1), + (10655, 57107, 57109, 'OP_GuildBankItemDetailsRequestMsg', 276, 1), + (10656, 57107, 57109, 'OP_GuildBankItemDetailsResponseMs', 277, 1), + (10657, 57107, 57109, 'OP_GuildBankUpdateMsg', 278, 1), + (10658, 57107, 57109, 'OP_GuildBankEventListMsg', 279, 1), + (10659, 57107, 57109, 'OP_RequestGuildBankEventDetailsMs', 280, 1), + (10660, 57107, 57109, 'OP_RewardPackMsg', 281, 1), + (10661, 57107, 57109, 'OP_RenameGuildMsg', 282, 1), + (10662, 57107, 57109, 'OP_ZoneToFriendRequestMsg', 283, 1), + (10663, 57107, 57109, 'OP_ZoneToFriendReplyMsg', 284, 1), + (10664, 57107, 57109, 'OP_ChatCreateChannelMsg', 285, 1), + (10665, 57107, 57109, 'OP_ChatJoinChannelMsg', 286, 1), + (10666, 57107, 57109, 'OP_ChatWhoChannelMsg', 287, 1), + (10667, 57107, 57109, 'OP_ChatLeaveChannelMsg', 288, 1), + (10668, 57107, 57109, 'OP_ChatTellChannelMsg', 289, 1), + (10669, 57107, 57109, 'OP_ChatTellUserMsg', 290, 1), + (10670, 57107, 57109, 'OP_ChatToggleFriendMsg', 291, 1), + (10671, 57107, 57109, 'OP_BrokerAddBag', 292, 1), + (10672, 57107, 57109, 'OP_BrokerRemoveBag', 293, 1), + (10673, 57107, 57109, 'OP_ChatToggleIgnoreMsg', 294, 1), + (10674, 57107, 57109, 'OP_ChatSendFriendsMsg', 295, 1), + (10675, 57107, 57109, 'OP_ChatSendIgnoresMsg', 296, 1), + (10676, 57107, 57109, 'OP_QuestReward', 320, 1), + (10677, 57107, 57109, 'OP_ChatFiltersMsg', 335, 1), + (10678, 57107, 57109, 'OP_MailGetMessageMsg', 338, 1), + (10679, 57107, 57109, 'OP_MailSendMessageMsg', 339, 1), + (10680, 57107, 57109, 'OP_MailDeleteMessageMsg', 340, 1), + (10681, 57107, 57109, 'OP_MailGetHeadersReplyMsg', 341, 1), + (10682, 57107, 57109, 'OP_MailGetMessageReplyMsg', 342, 1), + (10683, 57107, 57109, 'OP_MailSendMessageReplyMsg', 343, 1), + (10684, 57107, 57109, 'OP_MailCommitSendMessageMsg', 344, 1), + (10685, 57107, 57109, 'OP_MailSendSystemMessageMsg', 345, 1), + (10686, 57107, 57109, 'OP_MailRemoveAttachFromMailMsg', 346, 1), + (10687, 57107, 57109, 'OP_WaypointRequestMsg', 348, 1), + (10688, 57107, 57109, 'OP_WaypointReplyMsg', 349, 1), + (10689, 57107, 57109, 'OP_WaypointSelectMsg', 350, 1), + (10690, 57107, 57109, 'OP_WaypointUpdateMsg', 351, 1), + (10691, 57107, 57109, 'OP_CharNameChangedMsg', 352, 1), + (10692, 57107, 57109, 'OP_ShowZoneTeleporterDestinations', 353, 1), + (10693, 57107, 57109, 'OP_SelectZoneTeleporterDestinatio', 354, 1), + (10694, 57107, 57109, 'OP_ReloadLocalizedTxtMsg', 355, 1), + (10695, 57107, 57109, 'OP_RequestGuildMembershipMsg', 356, 1), + (10696, 57107, 57109, 'OP_GuildMembershipResponseMsg', 357, 1), + (10697, 57107, 57109, 'OP_LeaveGuildNotifyMsg', 358, 1), + (10698, 57107, 57109, 'OP_JoinGuildNotifyMsg', 359, 1), + (10699, 57107, 57109, 'OP_AvatarUpdateMsg', 360, 1), + (10700, 57107, 57109, 'OP_BioUpdateMsg', 362, 1), + (10701, 57107, 57109, 'OP_InspectPlayerMsg', 363, 1), + (10702, 57107, 57109, 'OP_WSServerLockMsg', 364, 1), + (10703, 57107, 57109, 'OP_LSServerLockMsg', 365, 1), + (10704, 57107, 57109, 'OP_WSServerHideMsg', 366, 1), + (10705, 57107, 57109, 'OP_CsCategoryRequestMsg', 367, 1), + (10706, 57107, 57109, 'OP_CsCategoryResponseMsg', 368, 1), + (10707, 57107, 57109, 'OP_KnowledgeWindowSlotMappingMsg', 369, 1), + (10708, 57107, 57109, 'OP_AFKUpdateMsg', 370, 1), + (10709, 57107, 57109, 'OP_AnonUpdateMsg', 371, 1), + (10710, 57107, 57109, 'OP_UpdateActivePublicZonesMsg', 372, 1), + (10711, 57107, 57109, 'OP_UnknownNpcMsg', 373, 1), + (10712, 57107, 57109, 'OP_PromoFlagsDetailsMsg', 374, 1), + (10713, 57107, 57109, 'OP_ConsignViewCreateMsg', 375, 1), + (10714, 57107, 57109, 'OP_ConsignViewGetPageMsg', 376, 1), + (10715, 57107, 57109, 'OP_ConsignViewReleaseMsg', 377, 1), + (10716, 57107, 57109, 'OP_ConsignRemoveItemsMsg', 378, 1), + (10717, 57107, 57109, 'OP_UpdateDebugRadiiMsg', 379, 1), + (10718, 57107, 57109, 'OP_ReportMsg', 380, 1), + (10719, 57107, 57109, 'OP_UpdateRaidMsg', 381, 1), + (10720, 57107, 57109, 'OP_ConsignViewSortMsg', 383, 1), + (10721, 57107, 57109, 'OP_TitleUpdateMsg', 384, 1), + (10722, 57107, 57109, 'OP_ClientFellMsg', 385, 1), + (10723, 57107, 57109, 'OP_ClientInDeathRegionMsg', 386, 1), + (10724, 57107, 57109, 'OP_CampClientMsg', 387, 1), + (10725, 57107, 57109, 'OP_CSToolAccessResponseMsg', 388, 1), + (10726, 57107, 57109, 'OP_UpdateGroupMemberDataMsg', 388, 1), + (10727, 57107, 57109, 'OP_TrackingUpdateMsg', 389, 1), + (10728, 57107, 57109, 'OP_BeginTrackingMsg', 390, 1), + (10729, 57107, 57109, 'OP_StopTrackingMsg', 391, 1), + (10730, 57107, 57109, 'OP_GetAvatarAccessRequestForCSToo', 393, 1), + (10731, 57107, 57109, 'OP_AdvancementRequestMsg', 394, 1), + (10732, 57107, 57109, 'OP_MapFogDataInitMsg', 395, 1), + (10733, 57107, 57109, 'OP_MapFogDataUpdateMsg', 396, 1), + (10734, 57107, 57109, 'OP_CloseGroupInviteWindowMsg', 397, 1), + (10735, 57107, 57109, 'OP_WorldPingMsg', 399, 1), + (10736, 57107, 57109, 'OP_MoveLogUpdateMsg', 400, 1), + (10737, 57107, 57109, 'OP_OfferQuestMsg', 401, 1), + (10738, 57107, 57109, 'OP_WorldShutdownUpdateMsg', 403, 1), + (10739, 57107, 57109, 'OP_DisplayMailScreenMsg', 404, 1), + (10740, 57107, 57109, 'OP_ClientIdleBeginMsg', 405, 1), + (10741, 57107, 57109, 'OP_ClientIdleEndMsg', 406, 1), + (10742, 57107, 57109, 'OP_PurchaseConsignmentLoreCheckRe', 407, 1), + (10743, 57107, 57109, 'OP_NotifyApprenticeStoppedMentori', 408, 1), + (10744, 57107, 57109, 'OP_CorruptedClientMsg', 409, 1), + (10745, 57107, 57109, 'OP_WorldDataChangeMsg', 410, 1), + (10746, 57107, 57109, 'OP_MailEventNotificationMsg', 411, 1), + (10747, 57107, 57109, 'OP_RestartZoneMsg', 412, 1), + (10748, 57107, 57109, 'OP_FlightPathsMsg', 413, 1), + (10749, 57107, 57109, 'OP_CharacterLinkdeadMsg', 414, 1), + (10750, 57107, 57109, 'OP_CharTransferStartRequestMsg', 415, 1), + (10751, 57107, 57109, 'OP_CharTransferStartReplyMsg', 416, 1), + (10752, 57107, 57109, 'OP_CharTransferRequestMsg', 417, 1), + (10753, 57107, 57109, 'OP_CharTransferReplyMsg', 418, 1), + (10754, 57107, 57109, 'OP_CharTransferRollbackRequestMsg', 419, 1), + (10755, 57107, 57109, 'OP_CharTransferCommitRequestMsg', 420, 1), + (10756, 57107, 57109, 'OP_CharTransferRollbackReplyMsg', 421, 1), + (10757, 57107, 57109, 'OP_CharTransferCommitReplyMsg', 422, 1), + (10758, 57107, 57109, 'OP_GetCharacterSerializedRequestM', 423, 1), + (10759, 57107, 57109, 'OP_GetCharacterSerializedReplyMsg', 424, 1), + (10760, 57107, 57109, 'OP_CreateCharFromCBBRequestMsg', 425, 1), + (10761, 57107, 57109, 'OP_CreateCharFromCBBReplyMsg', 426, 1), + (10762, 57107, 57109, 'OP_HousingDataChangedMsg', 427, 1), + (10763, 57107, 57109, 'OP_HousingRestoreMsg', 428, 1), + (10764, 57107, 57109, 'OP_AuctionItem', 429, 1), + (10765, 57107, 57109, 'OP_AuctionItemReply', 430, 1), + (10766, 57107, 57109, 'OP_AuctionCoin', 431, 1), + (10767, 57107, 57109, 'OP_AuctionCoinReply', 432, 1), + (10768, 57107, 57109, 'OP_AuctionCharacter', 433, 1), + (10769, 57107, 57109, 'OP_AuctionCharacterReply', 434, 1), + (10770, 57107, 57109, 'OP_AuctionCommitMsg', 435, 1), + (10771, 57107, 57109, 'OP_AuctionAbortMsg', 436, 1), + (10772, 57107, 57109, 'OP_CharTransferValidateRequestMsg', 437, 1), + (10773, 57107, 57109, 'OP_CharTransferValidateReplyMsg', 438, 1), + (10774, 57107, 57109, 'OP_RaceRestrictionMsg', 439, 1), + (10775, 57107, 57109, 'OP_SetInstanceDisplayNameMsg', 440, 1), + (10776, 57107, 57109, 'OP_GetAuctionAssetIDMsg', 441, 1), + (10777, 57107, 57109, 'OP_GetAuctionAssetIDReplyMsg', 442, 1), + (10778, 57107, 57109, 'OP_ResendWorldChannelsMsg', 443, 1), + (10779, 57107, 57109, 'OP_DisplayExchangeScreenMsg', 444, 1), + (10780, 57107, 57109, 'OP_ArenaGameTypesMsg', 445, 1), + (10781, 57107, 57109, 'OP_AuditAuctionEventMsg', 446, 1), + (10782, 57107, 57109, 'OP_InviteRequestMsg', 447, 1), + (10783, 57107, 57109, 'OP_InviteResponseMsg', 448, 1), + (10784, 57107, 57109, 'OP_InviteTargetResponseMsg', 449, 1), + (10785, 57107, 57109, 'OP_InspectPlayerRequestMsg', 450, 1), + (10786, 57107, 57109, 'OP_DispatchMsg', 451, 1), + (10787, 57107, 57109, 'OP_DisplayEventMsg', 452, 1), + (10788, 57107, 57109, 'OP_PrePossessionMsg', 453, 1), + (10789, 57107, 57109, 'OP_PostPossessionMsg', 454, 1), + (10790, 57107, 57109, 'OP_ArenaCreate', 456, 1), + (10791, 57107, 57109, 'OP_ArenaList', 457, 1), + (10792, 57107, 57109, 'OP_ArenaWindow', 465, 1), + (10793, 57107, 57109, 'OP_HouseItemsList', 484, 1), + (10794, 57107, 57109, 'OP_CurrentPet', 485, 1), + (10795, 57107, 57109, 'OP_AdventureList', 488, 1), + (10796, 57107, 57109, 'OP_CancelSpellCast', 489, 1), + (10797, 57107, 57109, 'OP_ClearForLandingMsg', 491, 1), + (10798, 57107, 57109, 'OP_UpdateTitleCmd', 494, 1), + (10799, 57107, 57109, 'OP_AttackAllowed', 500, 1), + (10800, 57107, 57109, 'OP_AttackNotAllowed', 501, 1), + (10801, 57107, 57109, 'OP_BagOptions', 502, 1), + (10802, 57107, 57109, 'OP_LFGGroupSearch', 504, 1), + (10803, 57107, 57109, 'OP_CharacterHousingList', 507, 1), + (10804, 57107, 57109, 'OP_DressingRoom', 510, 1), + (10805, 57107, 57109, 'OP_PlayLon', 511, 1), + (10806, 57107, 57109, 'OP_SkillInfoRequest', 514, 1), + (10807, 57107, 57109, 'OP_SkillInfoResponse', 515, 1), + (10808, 57107, 57109, 'OP_LFGUpdateMsg', 518, 1), + (10809, 57107, 57109, 'OP_BadLanguageFilter', 519, 1), + (10810, 57107, 57109, 'OP_VoiceChatChannel', 520, 1), + (10811, 57107, 57109, 'OP_MapRequest', 521, 1), + (10812, 57107, 57109, 'OP_MarketFundsUpdate', 526, 1), + (10813, 57107, 57109, 'OP_UIEvent', 527, 1), + (10814, 57107, 57109, 'OP_MarketAddFundsRequest', 528, 1), + (10815, 57107, 57109, 'OP_MarketAddFundsReply', 529, 1), + (10816, 57107, 57109, 'OP_MarketPurchase', 531, 1), + (10817, 57107, 57109, 'OP_MarketPlacePrices', 532, 1), + (10818, 57107, 57109, 'OP_MarketPlaceItems', 537, 1), + (10819, 57107, 57109, 'OP_RecipeBook', 538, 1), + (10820, 57107, 57109, 'OP_CreateCharacterDungeon', 547, 1), + (10821, 57107, 57109, 'OP_DungeonMakerEnter', 548, 1), + (10822, 57107, 57109, 'OP_DungeonMakerItemRequest', 550, 1), + (10823, 57107, 57109, 'OP_CharacterCreatedDungeons', 551, 1), + (10824, 57107, 57109, 'OP_DungeonMakerToolboxList', 552, 1), + (10825, 57107, 57109, 'OP_DungeonMakerUnknown', 553, 1), + (10826, 57107, 57109, 'OP_DungeonMakerUnknown1', 554, 1), + (10827, 57107, 57109, 'OP_PlayerPollPopup', 556, 1), + (10828, 57107, 57109, 'OP_PlayerPollAnswer', 557, 1), + (10829, 57107, 57109, 'OP_MentorPopup', 558, 1), + (10830, 57107, 57109, 'OP_LoadWelcomeWindow', 560, 1), + (10831, 57107, 57109, 'OP_OpenCharCust', 561, 1), + (10832, 57107, 57109, 'OP_SubmitCharCust', 562, 1), + (10833, 57107, 57109, 'OP_QueAllBgSolo', 564, 1), + (10834, 57107, 57109, 'OP_ZoneBgInstanceList', 566, 1), + (10835, 57107, 57109, 'OP_WorldTravelAvail', 570, 1), + (10836, 57107, 57109, 'OP_Launchpad', 572, 1), + (10837, 57107, 57109, 'OP_PaperdollImage', 574, 1), + (10838, 57107, 57109, 'OP_LoadCalendarEvents', 575, 1), + (10839, 57107, 57109, 'OP_VideoUploaded', 576, 1), + (10840, 57107, 57109, 'OP_SavageBarInitMsg', 577, 1), + (10841, 57107, 57109, 'OP_PetOptionsResponse', 578, 1), + (10842, 57107, 57109, 'OP_DungeonMakerItemResponse', 579, 1), + (10843, 57107, 57109, 'OP_CharacterMounts', 581, 1), + (10844, 57107, 57109, 'OP_RecipeListUnknown', 590, 1), + (10845, 57107, 57109, 'OP_EqBetaCopyRequest', 601, 1), + (10846, 57107, 57109, 'OP_EqHearChatCmd', 602, 1), + (10847, 57107, 57109, 'OP_EqDisplayTextCmd', 603, 1), + (10848, 57107, 57109, 'OP_EqCreateGhostCmd', 604, 1), + (10849, 57107, 57109, 'OP_EqCreateWidgetCmd', 605, 1), + (10850, 57107, 57109, 'OP_EqCreateSignWidgetCmd', 606, 1), + (10851, 57107, 57109, 'OP_EqDestroyGhostCmd', 607, 1), + (10852, 57107, 57109, 'OP_EqUpdateGhostCmd', 608, 1), + (10853, 57107, 57109, 'OP_EqSetControlGhostCmd', 609, 1), + (10854, 57107, 57109, 'OP_EqSetPOVGhostCmd', 610, 1), + (10855, 57107, 57109, 'OP_EqHearCombatCmd', 611, 1), + (10856, 57107, 57109, 'OP_EqHearSpellCastCmd', 612, 1), + (10857, 57107, 57109, 'OP_EQHearProcCmd', 613, 1), + (10858, 57107, 57109, 'OP_EQHearResEffectCmd', 614, 1), + (10859, 57107, 57109, 'OP_EqHearSpellInterruptCmd', 615, 1), + (10860, 57107, 57109, 'OP_EqHearSpellFizzleCmd', 616, 1), + (10861, 57107, 57109, 'OP_EqHearConsiderCmd', 617, 1), + (10862, 57107, 57109, 'OP_EqUpdateSubClassesCmd', 618, 1), + (10863, 57107, 57109, 'OP_EqCreateListBoxCmd', 619, 1), + (10864, 57107, 57109, 'OP_EqSetDebugPathPointsCmd', 620, 1), + (10865, 57107, 57109, 'OP_EqCannedEmoteCmd', 622, 1), + (10866, 57107, 57109, 'OP_EqStateCmd', 623, 1), + (10867, 57107, 57109, 'OP_EqPlaySoundCmd', 624, 1), + (10868, 57107, 57109, 'OP_EqPlaySound3DCmd', 625, 1), + (10869, 57107, 57109, 'OP_EqPlayVoiceCmd', 626, 1), + (10870, 57107, 57109, 'OP_EqHearDrowningCmd', 627, 1), + (10871, 57107, 57109, 'OP_EqHearDeathCmd', 628, 1), + (10872, 57107, 57109, 'OP_EqGroupMemberRemovedCmd', 629, 1), + (10873, 57107, 57109, 'OP_EqHearChainEffectCmd', 630, 1), + (10874, 57107, 57109, 'OP_EqReceiveOfferCmd', 631, 1), + (10875, 57107, 57109, 'OP_EqInspectPCResultsCmd', 632, 1), + (10876, 57107, 57109, 'OP_EqDrawablePathGraphCmd', 633, 1), + (10877, 57107, 57109, 'OP_EqDialogOpenCmd', 634, 1), + (10878, 57107, 57109, 'OP_EqDialogCloseCmd', 635, 1), + (10879, 57107, 57109, 'OP_EqFactionUpdateCmd', 636, 1), + (10880, 57107, 57109, 'OP_EqCollectionUpdateCmd', 637, 1), + (10881, 57107, 57109, 'OP_EqCollectionFilterCmd', 638, 1), + (10882, 57107, 57109, 'OP_EqCollectionItemCmd', 639, 1), + (10883, 57107, 57109, 'OP_EqQuestJournalUpdateCmd', 640, 1), + (10884, 57107, 57109, 'OP_EqMentoring', 641, 1), + (10885, 57107, 57109, 'OP_EqQuestJournalReplyCmd', 642, 1), + (10886, 57107, 57109, 'OP_EqQuestGroupCmd', 643, 1), + (10887, 57107, 57109, 'OP_EqUpdateMerchantCmd', 644, 1), + (10888, 57107, 57109, 'OP_EqUpdateStoreCmd', 645, 1), + (10889, 57107, 57109, 'OP_EqUpdatePlayerTradeCmd', 646, 1), + (10890, 57107, 57109, 'OP_EqHelpPathCmd', 647, 1), + (10891, 57107, 57109, 'OP_EqHelpPathClearCmd', 648, 1), + (10892, 57107, 57109, 'OP_EqUpdateBankCmd', 649, 1), + (10893, 57107, 57109, 'OP_EqExamineInfoCmd', 650, 1), + (10894, 57107, 57109, 'OP_EqCloseWindowCmd', 651, 1), + (10895, 57107, 57109, 'OP_EqUpdateLootCmd', 652, 1), + (10896, 57107, 57109, 'OP_EqJunctionListCmd', 653, 1), + (10897, 57107, 57109, 'OP_EqShowDeathWindowCmd', 654, 1), + (10898, 57107, 57109, 'OP_EqDisplaySpellFailCmd', 655, 1), + (10899, 57107, 57109, 'OP_EqSpellCastStartCmd', 656, 1), + (10900, 57107, 57109, 'OP_EqSpellCastEndCmd', 657, 1), + (10901, 57107, 57109, 'OP_EqResurrectedCmd', 658, 1), + (10902, 57107, 57109, 'OP_EqChoiceWinCmd', 659, 1), + (10903, 57107, 57109, 'OP_EqSetDefaultVerbCmd', 660, 1), + (10904, 57107, 57109, 'OP_EqInstructionWindowCmd', 661, 1), + (10905, 57107, 57109, 'OP_EqInstructionWindowCloseCmd', 662, 1), + (10906, 57107, 57109, 'OP_EqInstructionWindowGoalCmd', 663, 1), + (10907, 57107, 57109, 'OP_EqInstructionWindowTaskCmd', 664, 1), + (10908, 57107, 57109, 'OP_EqEnableGameEventCmd', 665, 1), + (10909, 57107, 57109, 'OP_EqShowWindowCmd', 666, 1), + (10910, 57107, 57109, 'OP_EqEnableWindowCmd', 667, 1), + (10911, 57107, 57109, 'OP_EqFlashWindowCmd', 668, 1), + (10912, 57107, 57109, 'OP_EqHearPlayFlavorCmd', 670, 1), + (10913, 57107, 57109, 'OP_EqUpdateSignWidgetCmd', 671, 1), + (10914, 57107, 57109, 'OP_EqDebugPVDCmd', 672, 1), + (10915, 57107, 57109, 'OP_EqShowBookCmd', 673, 1), + (10916, 57107, 57109, 'OP_EqQuestionnaireCmd', 674, 1), + (10917, 57107, 57109, 'OP_EqGetProbsCmd', 676, 1), + (10918, 57107, 57109, 'OP_EqHearHealCmd', 677, 1), + (10919, 57107, 57109, 'OP_EqChatChannelUpdateCmd', 678, 1), + (10920, 57107, 57109, 'OP_EqWhoChannelQueryReplyCmd', 679, 1), + (10921, 57107, 57109, 'OP_EqAvailWorldChannelsCmd', 680, 1), + (10922, 57107, 57109, 'OP_EqUpdateTargetCmd', 681, 1), + (10923, 57107, 57109, 'OP_BrokerSellList', 682, 1), + (10924, 57107, 57109, 'OP_EqConsignmentItemsCmd', 683, 1), + (10925, 57107, 57109, 'OP_EqStartBrokerCmd', 685, 1), + (10926, 57107, 57109, 'OP_EqMapExplorationCmd', 686, 1), + (10927, 57107, 57109, 'OP_EqStoreLogCmd', 687, 1), + (10928, 57107, 57109, 'OP_EqSpellMoveToRangeAndRetryCmd', 688, 1), + (10929, 57107, 57109, 'OP_EqUpdatePlayerMailCmd', 689, 1), + (10930, 57107, 57109, 'OP_GuildStatusUpdate', 692, 1), + (10931, 57107, 57109, 'OP_EqArenaResultsCmd', 693, 1), + (10932, 57107, 57109, 'OP_EqGuildBankEventActionCmd', 694, 1), + (10933, 57107, 57109, 'OP_EqGuildBankExamineInfoCmd', 695, 1), + (10934, 57107, 57109, 'OP_EqHearSpellNoLandCmd', 696, 1), + (10935, 57107, 57109, 'OP_Lottery', 697, 1), + (10936, 57107, 57109, 'OP_GuildRecruitingMemberInfo', 698, 1), + (10937, 57107, 57109, 'OP_GuildRecruiting', 699, 1), + (10938, 57107, 57109, 'OP_GuildRecruitingDetails', 700, 1), + (10939, 57107, 57109, 'OP_GuildRecruitingImage', 701, 1), + (10940, 57107, 57109, 'OP_TradeskillList', 702, 1), + (10941, 57107, 57109, 'OP_CharRenamed', 703, 1), + (10942, 57107, 57109, 'OP_UseAdornment', 713, 1), + (10943, 57107, 57109, 'OP_ExpPurchWindow', 719, 1), + (10944, 57107, 57109, 'OP_PointOfInterest', 723, 1), + (10945, 57107, 57109, 'OP_PointOfInterest2', 724, 1), + (10946, 57107, 57109, 'OP_TraitsList', 725, 1), + (10947, 57107, 57109, 'OP_CustomizeHouseDisplay', 728, 1), + (10948, 57107, 57109, 'OP_VoiceChatServer', 729, 1), + (10949, 57107, 57109, 'OP_SupplyDepot', 733, 1), + (10950, 57107, 57109, 'OP_EQHearThreatCmd', 734, 1), + (10951, 57107, 57109, 'OP_RecipeList', 735, 1), + (10952, 57107, 57109, 'OP_Research', 736, 1), + (10953, 57107, 57109, 'OP_CharacterCurrency', 737, 1), + (10954, 57107, 57109, 'OP_CharacterAchievements', 738, 1), + (10955, 57107, 57109, 'OP_AchievementUpdateMsg', 739, 1), + (10956, 57107, 57109, 'OP_EQHearDispellCmd', 740, 1), + (10957, 57107, 57109, 'OP_JournalQuestStoryline', 741, 1), + (10958, 57107, 57109, 'OP_DungeonPlayAsAvatarList', 742, 1), + (10959, 57107, 57109, 'OP_DungeonPlayAsAvatarSelected', 743, 1), + (10960, 57107, 57109, 'OP_MercHireWindow', 744, 1), + (10961, 57107, 57109, 'OP_MercUnknown', 745, 1), + (10962, 57107, 57109, 'OP_Unknown', 758, 1), + (10963, 57107, 57109, 'OP_DailyObjectives', 595, 1), + (10964, 57107, 57109, 'OP_Weakness', 580, 1), + (10965, 57121, 58525, 'OP_AchievementUpdateMsg', 741, 1), + (10966, 57121, 58525, 'OP_AddSocialStructureStandingMsg', 249, 1), + (10967, 57121, 58525, 'OP_AdvancementRequestMsg', 394, 1), + (10968, 57121, 58525, 'OP_AdventureList', 488, 1), + (10969, 57121, 58525, 'OP_AFKUpdateMsg', 370, 1), + (10970, 57121, 58525, 'OP_AfterInvSpellUpdate', 69, 1), + (10971, 57121, 58525, 'OP_AllCharactersDescReplyMsg', 10, 1), + (10972, 57121, 58525, 'OP_AllCharactersDescRequestMsg', 9, 1), + (10973, 57121, 58525, 'OP_AllWSDescRequestMsg', 7, 1), + (10974, 57121, 58525, 'OP_AnonUpdateMsg', 371, 1), + (10975, 57121, 58525, 'OP_ArenaCreate', 456, 1), + (10976, 57121, 58525, 'OP_ArenaGameTypesMsg', 445, 1), + (10977, 57121, 58525, 'OP_ArenaList', 457, 1), + (10978, 57121, 58525, 'OP_ArenaWindow', 465, 1), + (10979, 57121, 58525, 'OP_AttackAllowed', 500, 1), + (10980, 57121, 58525, 'OP_AttackNotAllowed', 501, 1), + (10981, 57121, 58525, 'OP_AuctionAbortMsg', 436, 1), + (10982, 57121, 58525, 'OP_AuctionCharacter', 433, 1), + (10983, 57121, 58525, 'OP_AuctionCharacterReply', 434, 1), + (10984, 57121, 58525, 'OP_AuctionCoin', 431, 1), + (10985, 57121, 58525, 'OP_AuctionCoinReply', 432, 1), + (10986, 57121, 58525, 'OP_AuctionCommitMsg', 435, 1), + (10987, 57121, 58525, 'OP_AuctionItem', 429, 1), + (10988, 57121, 58525, 'OP_AuctionItemReply', 430, 1), + (10989, 57121, 58525, 'OP_AuditAuctionEventMsg', 446, 1), + (10990, 57121, 58525, 'OP_AvatarCreatedMsg', 46, 1), + (10991, 57121, 58525, 'OP_AvatarDestroyedMsg', 47, 1), + (10992, 57121, 58525, 'OP_AvatarUpdateMsg', 360, 1), + (10993, 57121, 58525, 'OP_BadLanguageFilter', 519, 1), + (10994, 57121, 58525, 'OP_BagOptions', 502, 1), + (10995, 57121, 58525, 'OP_BeginItemCreationMsg', 221, 1), + (10996, 57121, 58525, 'OP_BeginTrackingMsg', 390, 1), + (10997, 57121, 58525, 'OP_BioUpdateMsg', 362, 1), + (10998, 57121, 58525, 'OP_BrokerAddBag', 292, 1), + (10999, 57121, 58525, 'OP_BrokerRemoveBag', 293, 1), + (11000, 57121, 58525, 'OP_BrokerSellList', 684, 1), + (11001, 57121, 58525, 'OP_BuyPlayerHouseMsg', 150, 1), + (11002, 57121, 58525, 'OP_BuyPlayerHouseTintMsg', 151, 1), + (11003, 57121, 58525, 'OP_CampAbortedMsg', 52, 1), + (11004, 57121, 58525, 'OP_CampClientMsg', 387, 1), + (11005, 57121, 58525, 'OP_CampStartedMsg', 51, 1), + (11006, 57121, 58525, 'OP_CancelCreateFromRecipeMsg', 220, 1), + (11007, 57121, 58525, 'OP_CancelledFeignMsg', 216, 1), + (11008, 57121, 58525, 'OP_CancelMoveObjectModeMsg', 163, 1), + (11009, 57121, 58525, 'OP_CancelSpellCast', 489, 1), + (11010, 57121, 58525, 'OP_ChangeServerControlFlagMsg', 246, 1), + (11011, 57121, 58525, 'OP_ChangeZoneMsg', 77, 1), + (11012, 57121, 58525, 'OP_CharacterAchievements', 740, 1), + (11013, 57121, 58525, 'OP_CharacterCreatedDungeons', 551, 1), + (11014, 57121, 58525, 'OP_CharacterCurrency', 739, 1), + (11015, 57121, 58525, 'OP_CharacterHousingList', 507, 1), + (11016, 57121, 58525, 'OP_CharacterLinkdeadMsg', 414, 1), + (11017, 57121, 58525, 'OP_CharacterMerc', 65, 1), + (11018, 57121, 58525, 'OP_CharacterMounts', 582, 1), + (11019, 57121, 58525, 'OP_CharacterPet', 64, 1), + (11020, 57121, 58525, 'OP_CharNameChangedMsg', 352, 1), + (11021, 57121, 58525, 'OP_CharRenamed', 705, 1), + (11022, 57121, 58525, 'OP_CharTransferCommitReplyMsg', 422, 1), + (11023, 57121, 58525, 'OP_CharTransferCommitRequestMsg', 420, 1), + (11024, 57121, 58525, 'OP_CharTransferReplyMsg', 418, 1), + (11025, 57121, 58525, 'OP_CharTransferRequestMsg', 417, 1), + (11026, 57121, 58525, 'OP_CharTransferRollbackReplyMsg', 421, 1), + (11027, 57121, 58525, 'OP_CharTransferRollbackRequestMsg', 419, 1), + (11028, 57121, 58525, 'OP_CharTransferStartReplyMsg', 416, 1), + (11029, 57121, 58525, 'OP_CharTransferStartRequestMsg', 415, 1), + (11030, 57121, 58525, 'OP_CharTransferValidateReplyMsg', 438, 1), + (11031, 57121, 58525, 'OP_CharTransferValidateRequestMsg', 437, 1), + (11032, 57121, 58525, 'OP_ChatCreateChannelMsg', 285, 1), + (11033, 57121, 58525, 'OP_ChatFiltersMsg', 335, 1), + (11034, 57121, 58525, 'OP_ChatJoinChannelMsg', 286, 1), + (11035, 57121, 58525, 'OP_ChatLeaveChannelMsg', 288, 1), + (11036, 57121, 58525, 'OP_ChatRelationshipUpdateMsg', 184, 1), + (11037, 57121, 58525, 'OP_ChatSendFriendsMsg', 295, 1), + (11038, 57121, 58525, 'OP_ChatSendIgnoresMsg', 296, 1), + (11039, 57121, 58525, 'OP_ChatTellChannelMsg', 289, 1), + (11040, 57121, 58525, 'OP_ChatTellUserMsg', 290, 1), + (11041, 57121, 58525, 'OP_ChatToggleFriendMsg', 291, 1), + (11042, 57121, 58525, 'OP_ChatToggleIgnoreMsg', 294, 1), + (11043, 57121, 58525, 'OP_ChatWhoChannelMsg', 287, 1), + (11044, 57121, 58525, 'OP_ClearDataMsg', 98, 1), + (11045, 57121, 58525, 'OP_ClearForLandingMsg', 491, 1), + (11046, 57121, 58525, 'OP_ClearForTakeOffMsg', 191, 1), + (11047, 57121, 58525, 'OP_ClientCmdMsg', 58, 1), + (11048, 57121, 58525, 'OP_ClientFellMsg', 385, 1), + (11049, 57121, 58525, 'OP_ClientIdleBeginMsg', 405, 1), + (11050, 57121, 58525, 'OP_ClientIdleEndMsg', 406, 1), + (11051, 57121, 58525, 'OP_ClientInDeathRegionMsg', 386, 1), + (11052, 57121, 58525, 'OP_ClientTeleportRequestMsg', 78, 1), + (11053, 57121, 58525, 'OP_ClientTeleportToLocationMsg', 244, 1), + (11054, 57121, 58525, 'OP_CloseGroupInviteWindowMsg', 397, 1), + (11055, 57121, 58525, 'OP_CollectAllHouseItemsMsg', 152, 1), + (11056, 57121, 58525, 'OP_ConsignItemRequestMsg', 126, 1), + (11057, 57121, 58525, 'OP_ConsignItemResponseMsg', 127, 1), + (11058, 57121, 58525, 'OP_ConsignmentCloseStoreMsg', 125, 1), + (11059, 57121, 58525, 'OP_ConsignRemoveItemsMsg', 378, 1), + (11060, 57121, 58525, 'OP_ConsignViewCreateMsg', 375, 1), + (11061, 57121, 58525, 'OP_ConsignViewGetPageMsg', 376, 1), + (11062, 57121, 58525, 'OP_ConsignViewReleaseMsg', 377, 1), + (11063, 57121, 58525, 'OP_ConsignViewSortMsg', 383, 1), + (11064, 57121, 58525, 'OP_CorruptedClientMsg', 409, 1), + (11065, 57121, 58525, 'OP_CreateBoatTransportsMsg', 250, 1), + (11066, 57121, 58525, 'OP_CreateCharacterDungeon', 547, 1), + (11067, 57121, 58525, 'OP_CreateCharacterReplyMsg', 12, 1), + (11068, 57121, 58525, 'OP_CreateCharacterRequestMsg', 11, 1), + (11069, 57121, 58525, 'OP_CreateCharFromCBBReplyMsg', 426, 1), + (11070, 57121, 58525, 'OP_CreateCharFromCBBRequestMsg', 425, 1), + (11071, 57121, 58525, 'OP_CreateGuildReplyMsg', 120, 1), + (11072, 57121, 58525, 'OP_CreateGuildRequestMsg', 119, 1), + (11073, 57121, 58525, 'OP_CreateZoneInstanceMsg', 29, 1), + (11074, 57121, 58525, 'OP_CsCategoryRequestMsg', 367, 1), + (11075, 57121, 58525, 'OP_CsCategoryResponseMsg', 368, 1), + (11076, 57121, 58525, 'OP_CSTicketAddCommentMsg', 234, 1), + (11077, 57121, 58525, 'OP_CSTicketChangeNotificationMsg', 236, 1), + (11078, 57121, 58525, 'OP_CSTicketCommentRequestMsg', 231, 1), + (11079, 57121, 58525, 'OP_CSTicketCommentResponseMsg', 232, 1), + (11080, 57121, 58525, 'OP_CSTicketCreateMsg', 233, 1), + (11081, 57121, 58525, 'OP_CSTicketDeleteMsg', 235, 1), + (11082, 57121, 58525, 'OP_CSTicketHeaderRequestMsg', 229, 1), + (11083, 57121, 58525, 'OP_CSTicketInfoMsg', 230, 1), + (11084, 57121, 58525, 'OP_CSToolAccessResponseMsg', 388, 1), + (11085, 57121, 58525, 'OP_CSToolsRequestMsg', 247, 1), + (11086, 57121, 58525, 'OP_CSToolsResponseMsg', 248, 1), + (11087, 57121, 58525, 'OP_CurrentPet', 485, 1), + (11088, 57121, 58525, 'OP_CustomizationPurchaseRequestMs', 167, 1), + (11089, 57121, 58525, 'OP_CustomizationReplyMsg', 169, 1), + (11090, 57121, 58525, 'OP_CustomizationSetRequestMsg', 168, 1), + (11091, 57121, 58525, 'OP_CustomizeHouseDisplay', 730, 1), + (11092, 57121, 58525, 'OP_DailyObjectives', 595, 1), + (11093, 57121, 58525, 'OP_DefaultGroupOptionsMsg', 198, 1), + (11094, 57121, 58525, 'OP_DefaultGroupOptionsRequestMsg', 197, 1), + (11095, 57121, 58525, 'OP_DeleteCharacterReplyMsg', 17, 1), + (11096, 57121, 58525, 'OP_DeleteCharacterRequestMsg', 16, 1), + (11097, 57121, 58525, 'OP_DeleteGuildMsg', 123, 1), + (11098, 57121, 58525, 'OP_DestUpdateReq', 210, 1), + (11099, 57121, 58525, 'OP_DialogCloseMsg', 110, 1), + (11100, 57121, 58525, 'OP_DialogSelectMsg', 109, 1), + (11101, 57121, 58525, 'OP_DispatchClientCmdMsg', 60, 1), + (11102, 57121, 58525, 'OP_DispatchESMsg', 59, 1), + (11103, 57121, 58525, 'OP_DispatchMsg', 451, 1), + (11104, 57121, 58525, 'OP_DispatchSpellCmdMsg', 179, 1), + (11105, 57121, 58525, 'OP_DisplayDebugNLLPointsMsg', 254, 1), + (11106, 57121, 58525, 'OP_DisplayEventMsg', 452, 1), + (11107, 57121, 58525, 'OP_DisplayExchangeScreenMsg', 444, 1), + (11108, 57121, 58525, 'OP_DisplayGroupOptionsScreenMsg', 200, 1), + (11109, 57121, 58525, 'OP_DisplayInnVisitScreenMsg', 202, 1), + (11110, 57121, 58525, 'OP_DisplayMailScreenMsg', 404, 1), + (11111, 57121, 58525, 'OP_DisplayTSEventReactionMsg', 225, 1), + (11112, 57121, 58525, 'OP_DisplayWarningMsg', 265, 1), + (11113, 57121, 58525, 'OP_DoneLoadingEntityResourcesMsg', 36, 1), + (11114, 57121, 58525, 'OP_DoneLoadingZoneResourcesMsg', 34, 1), + (11115, 57121, 58525, 'OP_DoneSendingInitialEntitiesMsg', 35, 1), + (11116, 57121, 58525, 'OP_DressingRoom', 510, 1), + (11117, 57121, 58525, 'OP_DumpSchedulerMsg', 203, 1), + (11118, 57121, 58525, 'OP_DungeonMakerEnter', 548, 1), + (11119, 57121, 58525, 'OP_DungeonMakerItemRequest', 550, 1), + (11120, 57121, 58525, 'OP_DungeonMakerItemResponse', 580, 1), + (11121, 57121, 58525, 'OP_DungeonMakerToolboxList', 552, 1), + (11122, 57121, 58525, 'OP_DungeonMakerUnknown', 553, 1), + (11123, 57121, 58525, 'OP_DungeonMakerUnknown1', 554, 1), + (11124, 57121, 58525, 'OP_DungeonPlayAsAvatarList', 744, 1), + (11125, 57121, 58525, 'OP_DungeonPlayAsAvatarSelected', 745, 1), + (11126, 57121, 58525, 'OP_EncounterBrokenMsg', 263, 1), + (11127, 57121, 58525, 'OP_EnterHouseMsg', 154, 1), + (11128, 57121, 58525, 'OP_EnterMoveObjectModeMsg', 161, 1), + (11129, 57121, 58525, 'OP_EntityVerbsReplyMsg', 181, 1), + (11130, 57121, 58525, 'OP_EntityVerbsRequestMsg', 180, 1), + (11131, 57121, 58525, 'OP_EntityVerbsVerbMsg', 182, 1), + (11132, 57121, 58525, 'OP_EqArenaResultsCmd', 695, 1), + (11133, 57121, 58525, 'OP_EqAvailWorldChannelsCmd', 682, 1), + (11134, 57121, 58525, 'OP_EqBetaCopyRequest', 603, 1), + (11135, 57121, 58525, 'OP_EqCannedEmoteCmd', 624, 1), + (11136, 57121, 58525, 'OP_EqChatChannelUpdateCmd', 680, 1), + (11137, 57121, 58525, 'OP_EqChoiceWinCmd', 661, 1), + (11138, 57121, 58525, 'OP_EqCloseWindowCmd', 653, 1), + (11139, 57121, 58525, 'OP_EqCollectionFilterCmd', 640, 1), + (11140, 57121, 58525, 'OP_EqCollectionItemCmd', 641, 1), + (11141, 57121, 58525, 'OP_EqCollectionUpdateCmd', 639, 1), + (11142, 57121, 58525, 'OP_EqConsignmentItemsCmd', 685, 1), + (11143, 57121, 58525, 'OP_EqCreateGhostCmd', 606, 1), + (11144, 57121, 58525, 'OP_EqCreateListBoxCmd', 621, 1), + (11145, 57121, 58525, 'OP_EqCreateSignWidgetCmd', 608, 1), + (11146, 57121, 58525, 'OP_EqCreateWidgetCmd', 607, 1), + (11147, 57121, 58525, 'OP_EqDebugPVDCmd', 674, 1), + (11148, 57121, 58525, 'OP_EqDestroyGhostCmd', 609, 1), + (11149, 57121, 58525, 'OP_EqDialogCloseCmd', 637, 1), + (11150, 57121, 58525, 'OP_EqDialogOpenCmd', 636, 1), + (11151, 57121, 58525, 'OP_EqDisplaySpellFailCmd', 657, 1), + (11152, 57121, 58525, 'OP_EqDisplayTextCmd', 605, 1), + (11153, 57121, 58525, 'OP_EqDrawablePathGraphCmd', 635, 1), + (11154, 57121, 58525, 'OP_EqEnableGameEventCmd', 667, 1), + (11155, 57121, 58525, 'OP_EqEnableWindowCmd', 669, 1), + (11156, 57121, 58525, 'OP_EqExamineInfoCmd', 652, 1), + (11157, 57121, 58525, 'OP_EqFactionUpdateCmd', 638, 1), + (11158, 57121, 58525, 'OP_EqFlashWindowCmd', 670, 1), + (11159, 57121, 58525, 'OP_EqGetProbsCmd', 678, 1), + (11160, 57121, 58525, 'OP_EqGroupMemberRemovedCmd', 631, 1), + (11161, 57121, 58525, 'OP_EqGuildBankEventActionCmd', 696, 1), + (11162, 57121, 58525, 'OP_EqGuildBankExamineInfoCmd', 697, 1), + (11163, 57121, 58525, 'OP_EqHearChainEffectCmd', 632, 1), + (11164, 57121, 58525, 'OP_EqHearChatCmd', 604, 1), + (11165, 57121, 58525, 'OP_EqHearCombatCmd', 613, 1), + (11166, 57121, 58525, 'OP_EqHearConsiderCmd', 619, 1), + (11167, 57121, 58525, 'OP_EqHearDeathCmd', 630, 1), + (11168, 57121, 58525, 'OP_EQHearDispellCmd', 742, 1), + (11169, 57121, 58525, 'OP_EqHearDrowningCmd', 629, 1), + (11170, 57121, 58525, 'OP_EqHearHealCmd', 679, 1), + (11171, 57121, 58525, 'OP_EqHearPlayFlavorCmd', 672, 1), + (11172, 57121, 58525, 'OP_EQHearProcCmd', 615, 1), + (11173, 57121, 58525, 'OP_EQHearResEffectCmd', 616, 1), + (11174, 57121, 58525, 'OP_EqHearSpellCastCmd', 614, 1), + (11175, 57121, 58525, 'OP_EqHearSpellFizzleCmd', 618, 1), + (11176, 57121, 58525, 'OP_EqHearSpellInterruptCmd', 617, 1), + (11177, 57121, 58525, 'OP_EqHearSpellNoLandCmd', 698, 1), + (11178, 57121, 58525, 'OP_EQHearThreatCmd', 736, 1), + (11179, 57121, 58525, 'OP_EqHelpPathClearCmd', 650, 1), + (11180, 57121, 58525, 'OP_EqHelpPathCmd', 649, 1), + (11181, 57121, 58525, 'OP_EqInspectPCResultsCmd', 634, 1), + (11182, 57121, 58525, 'OP_EqInstructionWindowCloseCmd', 664, 1), + (11183, 57121, 58525, 'OP_EqInstructionWindowCmd', 663, 1), + (11184, 57121, 58525, 'OP_EqInstructionWindowGoalCmd', 665, 1), + (11185, 57121, 58525, 'OP_EqInstructionWindowTaskCmd', 666, 1), + (11186, 57121, 58525, 'OP_EqJunctionListCmd', 655, 1), + (11187, 57121, 58525, 'OP_EqMapExplorationCmd', 688, 1), + (11188, 57121, 58525, 'OP_EqMentoring', 643, 1), + (11189, 57121, 58525, 'OP_EqPlaySound3DCmd', 627, 1), + (11190, 57121, 58525, 'OP_EqPlaySoundCmd', 626, 1), + (11191, 57121, 58525, 'OP_EqPlayVoiceCmd', 628, 1), + (11192, 57121, 58525, 'OP_EqQuestGroupCmd', 645, 1), + (11193, 57121, 58525, 'OP_EqQuestionnaireCmd', 676, 1), + (11194, 57121, 58525, 'OP_EqQuestJournalReplyCmd', 644, 1), + (11195, 57121, 58525, 'OP_EqQuestJournalUpdateCmd', 642, 1), + (11196, 57121, 58525, 'OP_EqReceiveOfferCmd', 633, 1), + (11197, 57121, 58525, 'OP_EqResurrectedCmd', 660, 1), + (11198, 57121, 58525, 'OP_EqSetControlGhostCmd', 611, 1), + (11199, 57121, 58525, 'OP_EqSetDebugPathPointsCmd', 622, 1), + (11200, 57121, 58525, 'OP_EqSetDefaultVerbCmd', 662, 1), + (11201, 57121, 58525, 'OP_EqSetPOVGhostCmd', 612, 1), + (11202, 57121, 58525, 'OP_EqShowBookCmd', 675, 1), + (11203, 57121, 58525, 'OP_EqShowDeathWindowCmd', 656, 1), + (11204, 57121, 58525, 'OP_EqShowWindowCmd', 668, 1), + (11205, 57121, 58525, 'OP_EqSpellCastEndCmd', 659, 1), + (11206, 57121, 58525, 'OP_EqSpellCastStartCmd', 658, 1), + (11207, 57121, 58525, 'OP_EqSpellMoveToRangeAndRetryCmd', 690, 1), + (11208, 57121, 58525, 'OP_EqStartBrokerCmd', 687, 1), + (11209, 57121, 58525, 'OP_EqStateCmd', 625, 1), + (11210, 57121, 58525, 'OP_EqStoreLogCmd', 689, 1), + (11211, 57121, 58525, 'OP_EqUpdateBankCmd', 651, 1), + (11212, 57121, 58525, 'OP_EqUpdateGhostCmd', 610, 1), + (11213, 57121, 58525, 'OP_EqUpdateLootCmd', 654, 1), + (11214, 57121, 58525, 'OP_EqUpdateMerchantCmd', 646, 1), + (11215, 57121, 58525, 'OP_EqUpdatePlayerMailCmd', 691, 1), + (11216, 57121, 58525, 'OP_EqUpdatePlayerTradeCmd', 648, 1), + (11217, 57121, 58525, 'OP_EqUpdateSignWidgetCmd', 673, 1), + (11218, 57121, 58525, 'OP_EqUpdateStoreCmd', 647, 1), + (11219, 57121, 58525, 'OP_EqUpdateSubClassesCmd', 620, 1), + (11220, 57121, 58525, 'OP_EqUpdateTargetCmd', 683, 1), + (11221, 57121, 58525, 'OP_EqWhoChannelQueryReplyCmd', 681, 1), + (11222, 57121, 58525, 'OP_ESInitMsg', 25, 1), + (11223, 57121, 58525, 'OP_ESLoginRequestMsg', 3, 1), + (11224, 57121, 58525, 'OP_ESReadyForClientsMsg', 26, 1), + (11225, 57121, 58525, 'OP_ESStatusMsg', 100, 1), + (11226, 57121, 58525, 'OP_ESWeatherRequestEndMsg', 105, 1), + (11227, 57121, 58525, 'OP_ESWeatherRequestMsg', 104, 1), + (11228, 57121, 58525, 'OP_ESZoneInstanceStatusMsg', 101, 1), + (11229, 57121, 58525, 'OP_ExamineConsignmentRequestMsg', 171, 1), + (11230, 57121, 58525, 'OP_ExamineConsignmentResponseMsg', 172, 1), + (11231, 57121, 58525, 'OP_ExamineInfoRequestMsg', 255, 1), + (11232, 57121, 58525, 'OP_ExamineItemRequestMsg', 195, 1), + (11233, 57121, 58525, 'OP_ExitHouseMsg', 155, 1), + (11234, 57121, 58525, 'OP_ExpectClientAsCharacterReplyMs', 22, 1), + (11235, 57121, 58525, 'OP_ExpectClientAsCharacterRequest', 32, 1), + (11236, 57121, 58525, 'OP_ExpPurchWindow', 721, 1), + (11237, 57121, 58525, 'OP_FellowshipExpMsg', 122, 1), + (11238, 57121, 58525, 'OP_FlightPathsMsg', 413, 1), + (11239, 57121, 58525, 'OP_GameWorldTimeMsg', 43, 1), + (11240, 57121, 58525, 'OP_PaperdollImage', 575, 1), + (11241, 57121, 58525, 'OP_GetAuctionAssetIDMsg', 441, 1), + (11242, 57121, 58525, 'OP_GetAuctionAssetIDReplyMsg', 442, 1), + (11243, 57121, 58525, 'OP_GetAvatarAccessRequestForCSToo', 393, 1), + (11244, 57121, 58525, 'OP_GetCharacterSerializedReplyMsg', 424, 1), + (11245, 57121, 58525, 'OP_GetCharacterSerializedRequestM', 423, 1), + (11246, 57121, 58525, 'OP_GroupCreatedMsg', 88, 1), + (11247, 57121, 58525, 'OP_GroupDestroyedMsg', 89, 1), + (11248, 57121, 58525, 'OP_GroupLeaderChangedMsg', 93, 1), + (11249, 57121, 58525, 'OP_GroupMemberAddedMsg', 90, 1), + (11250, 57121, 58525, 'OP_GroupMemberRemovedMsg', 91, 1), + (11251, 57121, 58525, 'OP_GroupOptionsMsg', 199, 1), + (11252, 57121, 58525, 'OP_GroupRemovedFromGroupMsg', 92, 1), + (11253, 57121, 58525, 'OP_GroupResendOOZDataMsg', 94, 1), + (11254, 57121, 58525, 'OP_GroupSettingsChangedMsg', 95, 1), + (11255, 57121, 58525, 'OP_GuildBankActionMsg', 274, 1), + (11256, 57121, 58525, 'OP_GuildBankActionResponseMsg', 275, 1), + (11257, 57121, 58525, 'OP_GuildBankEventListMsg', 279, 1), + (11258, 57121, 58525, 'OP_GuildBankItemDetailsRequestMsg', 276, 1), + (11259, 57121, 58525, 'OP_GuildBankItemDetailsResponseMs', 277, 1), + (11260, 57121, 58525, 'OP_GuildBankUpdateMsg', 278, 1), + (11261, 57121, 58525, 'OP_GuildEventActionMsg', 269, 1), + (11262, 57121, 58525, 'OP_GuildEventAddMsg', 268, 1), + (11263, 57121, 58525, 'OP_GuildEventDetailsMsg', 272, 1), + (11264, 57121, 58525, 'OP_GuildEventListMsg', 270, 1), + (11265, 57121, 58525, 'OP_GuildEventMsg', 267, 1), + (11266, 57121, 58525, 'OP_GuildMembershipResponseMsg', 357, 1), + (11267, 57121, 58525, 'OP_GuildRecruiting', 701, 1), + (11268, 57121, 58525, 'OP_GuildRecruitingDetails', 702, 1), + (11269, 57121, 58525, 'OP_GuildRecruitingImage', 703, 1), + (11270, 57121, 58525, 'OP_GuildRecruitingMemberInfo', 700, 1), + (11271, 57121, 58525, 'OP_GuildsayMsg', 121, 1), + (11272, 57121, 58525, 'OP_GuildStatusUpdate', 694, 1), + (11273, 57121, 58525, 'OP_GuildUpdateMsg', 124, 1), + (11274, 57121, 58525, 'OP_HideIllusionsMsg', 194, 1), + (11275, 57121, 58525, 'OP_HouseAccessRemoveMsg', 158, 1), + (11276, 57121, 58525, 'OP_HouseAccessSetMsg', 157, 1), + (11277, 57121, 58525, 'OP_HouseCustomizationScreenMsg', 166, 1), + (11278, 57121, 58525, 'OP_HouseDefaultAccessSetMsg', 156, 1), + (11279, 57121, 58525, 'OP_HouseDeletedRemotelyMsg', 142, 1), + (11280, 57121, 58525, 'OP_HouseItemsList', 484, 1), + (11281, 57121, 58525, 'OP_HousingDataChangedMsg', 427, 1), + (11282, 57121, 58525, 'OP_HousingRestoreMsg', 428, 1), + (11283, 57121, 58525, 'OP_InspectPlayerMsg', 363, 1), + (11284, 57121, 58525, 'OP_InspectPlayerRequestMsg', 450, 1), + (11285, 57121, 58525, 'OP_InviteRequestMsg', 447, 1), + (11286, 57121, 58525, 'OP_InviteResponseMsg', 448, 1), + (11287, 57121, 58525, 'OP_InviteTargetResponseMsg', 449, 1), + (11288, 57121, 58525, 'OP_JoinGuildNotifyMsg', 359, 1), + (11289, 57121, 58525, 'OP_JournalQuestStoryline', 743, 1), + (11290, 57121, 58525, 'OP_KeymapDataMsg', 177, 1), + (11291, 57121, 58525, 'OP_KeymapLoadMsg', 175, 1), + (11292, 57121, 58525, 'OP_KeymapNoneMsg', 176, 1), + (11293, 57121, 58525, 'OP_KeymapSaveMsg', 178, 1), + (11294, 57121, 58525, 'OP_KnowledgebaseRequestMsg', 227, 1), + (11295, 57121, 58525, 'OP_KnowledgebaseResponseMsg', 228, 1), + (11296, 57121, 58525, 'OP_KnowledgeWindowSlotMappingMsg', 369, 1), + (11297, 57121, 58525, 'OP_KnownLanguagesMsg', 238, 1), + (11298, 57121, 58525, 'OP_Launchpad', 573, 1), + (11299, 57121, 58525, 'OP_LeaveGuildNotifyMsg', 358, 1), + (11300, 57121, 58525, 'OP_LevelChangedMsg', 261, 1), + (11301, 57121, 58525, 'OP_LFGGroupSearch', 504, 1), + (11302, 57121, 58525, 'OP_LFGUpdateMsg', 518, 1), + (11303, 57121, 58525, 'OP_LikeOption', 136, 1), + (11304, 57121, 58525, 'OP_LoadCalendarEvents', 576, 1), + (11305, 57121, 58525, 'OP_LoadWelcomeWindow', 560, 1), + (11306, 57121, 58525, 'OP_LoginByNumRequestMsg', 1, 1), + (11307, 57121, 58525, 'OP_LoginReplyMsg', 4, 1), + (11308, 57121, 58525, 'OP_LoginRequestMsg', 0, 1), + (11309, 57121, 58525, 'OP_LootItemsRequestMsg', 185, 1), + (11310, 57121, 58525, 'OP_Lottery', 699, 1), + (11311, 57121, 58525, 'OP_LSCheckAcctLockMsg', 204, 1), + (11312, 57121, 58525, 'OP_LsClientAlertlogReplyMsg', 242, 1), + (11313, 57121, 58525, 'OP_LsClientBaselogReplyMsg', 240, 1), + (11314, 57121, 58525, 'OP_LsClientCrashlogReplyMsg', 241, 1), + (11315, 57121, 58525, 'OP_LsClientVerifylogReplyMsg', 243, 1), + (11316, 57121, 58525, 'OP_LsRequestClientCrashLogMsg', 239, 1), + (11317, 57121, 58525, 'OP_LSServerLockMsg', 365, 1), + (11318, 57121, 58525, 'OP_MacroInitMsg', 258, 1), + (11319, 57121, 58525, 'OP_MacroUpdateMsg', 259, 1), + (11320, 57121, 58525, 'OP_MailCommitSendMessageMsg', 344, 1), + (11321, 57121, 58525, 'OP_MailDeleteMessageMsg', 340, 1), + (11322, 57121, 58525, 'OP_MailEventNotificationMsg', 411, 1), + (11323, 57121, 58525, 'OP_MailGetHeadersReplyMsg', 341, 1), + (11324, 57121, 58525, 'OP_MailGetMessageMsg', 338, 1), + (11325, 57121, 58525, 'OP_MailGetMessageReplyMsg', 342, 1), + (11326, 57121, 58525, 'OP_MailRemoveAttachFromMailMsg', 346, 1), + (11327, 57121, 58525, 'OP_MailSendMessageMsg', 339, 1), + (11328, 57121, 58525, 'OP_MailSendMessageReplyMsg', 343, 1), + (11329, 57121, 58525, 'OP_MailSendSystemMessageMsg', 345, 1), + (11330, 57121, 58525, 'OP_MakeGroupLeaderMsg', 87, 1), + (11331, 57121, 58525, 'OP_MapFogDataInitMsg', 395, 1), + (11332, 57121, 58525, 'OP_MapFogDataUpdateMsg', 396, 1), + (11333, 57121, 58525, 'OP_MapRequest', 521, 1), + (11334, 57121, 58525, 'OP_MarketAddFundsReply', 529, 1), + (11335, 57121, 58525, 'OP_MarketAddFundsRequest', 528, 1), + (11336, 57121, 58525, 'OP_MarketFundsUpdate', 526, 1), + (11337, 57121, 58525, 'OP_MarketPlaceItems', 537, 1), + (11338, 57121, 58525, 'OP_MarketPlacePrices', 532, 1), + (11339, 57121, 58525, 'OP_MarketPurchase', 531, 1), + (11340, 57121, 58525, 'OP_MentorPopup', 558, 1), + (11341, 57121, 58525, 'OP_MercHireWindow', 746, 1), + (11342, 57121, 58525, 'OP_MercUnknown', 747, 1), + (11343, 57121, 58525, 'OP_MigrateBoatTransportMsg', 252, 1), + (11344, 57121, 58525, 'OP_MigrateBoatTransportReplyMsg', 253, 1), + (11345, 57121, 58525, 'OP_MigrateClientToZoneReplyMsg', 82, 1), + (11346, 57121, 58525, 'OP_MigrateClientToZoneRequestMsg', 81, 1), + (11347, 57121, 58525, 'OP_ModifyGuildMsg', 266, 1), + (11348, 57121, 58525, 'OP_MonitorCharacterListMsg', 56, 1), + (11349, 57121, 58525, 'OP_MonitorCharacterListRequestMsg', 57, 1), + (11350, 57121, 58525, 'OP_MonitorReplyMsg', 55, 1), + (11351, 57121, 58525, 'OP_MOTDMsg', 44, 1), + (11352, 57121, 58525, 'OP_MoveableObjectPlacementCriteri', 160, 1), + (11353, 57121, 58525, 'OP_MoveLogUpdateMsg', 400, 1), + (11354, 57121, 58525, 'OP_NotifyApprenticeStoppedMentori', 408, 1), + (11355, 57121, 58525, 'OP_OfferQuestMsg', 401, 1), + (11356, 57121, 58525, 'OP_OnscreenMsgMsg', 264, 1), + (11357, 57121, 58525, 'OP_OpenCharCust', 561, 1), + (11358, 57121, 58525, 'OP_OutOfZoneMemberDataMsg', 96, 1), + (11359, 57121, 58525, 'OP_PayHouseUpkeepMsg', 159, 1), + (11360, 57121, 58525, 'OP_PerformCameraShakeMsg', 214, 1), + (11361, 57121, 58525, 'OP_PerformPlayerKnockbackMsg', 213, 1), + (11362, 57121, 58525, 'OP_PetOptions', 201, 1), + (11363, 57121, 58525, 'OP_PetOptionsResponse', 579, 1), + (11364, 57121, 58525, 'OP_PlayCharacterReplyMsg', 19, 1), + (11365, 57121, 58525, 'OP_PlayCharacterRequestMsg', 18, 1), + (11366, 57121, 58525, 'OP_PlayerHouseAccessUpdateMsg', 147, 1), + (11367, 57121, 58525, 'OP_PlayerHouseBaseScreenMsg', 145, 1), + (11368, 57121, 58525, 'OP_PlayerHouseCloseUIMsg', 149, 1), + (11369, 57121, 58525, 'OP_PlayerHouseDisplayStatusMsg', 148, 1), + (11370, 57121, 58525, 'OP_PlayerHousePurchaseScreenMsg', 146, 1), + (11371, 57121, 58525, 'OP_PlayerMadeInstances', 140, 1), + (11372, 57121, 58525, 'OP_PlayerMadeInstancesScreen', 139, 1), + (11373, 57121, 58525, 'OP_PlayerPollAnswer', 557, 1), + (11374, 57121, 58525, 'OP_PlayerPollPopup', 556, 1), + (11375, 57121, 58525, 'OP_PlayLon', 511, 1), + (11376, 57121, 58525, 'OP_PointOfInterest', 725, 1), + (11377, 57121, 58525, 'OP_PointOfInterest2', 726, 1), + (11378, 57121, 58525, 'OP_PopulateSkillMapsMsg', 215, 1), + (11379, 57121, 58525, 'OP_PositionBoatTransportMsg', 251, 1), + (11380, 57121, 58525, 'OP_PositionMoveableObject', 162, 1), + (11381, 57121, 58525, 'OP_PostPossessionMsg', 454, 1), + (11382, 57121, 58525, 'OP_PredictionUpdateMsg', 37, 1), + (11383, 57121, 58525, 'OP_PrePossessionMsg', 453, 1), + (11384, 57121, 58525, 'OP_PromoFlagsDetailsMsg', 374, 1), + (11385, 57121, 58525, 'OP_PublishHouse', 138, 1), + (11386, 57121, 58525, 'OP_PurchaseConsignmentLoreCheckRe', 407, 1), + (11387, 57121, 58525, 'OP_PurchaseConsignmentRequestMsg', 128, 1), + (11388, 57121, 58525, 'OP_QueAllBgSolo', 564, 1), + (11389, 57121, 58525, 'OP_QuestionnaireMsg', 260, 1), + (11390, 57121, 58525, 'OP_QuestJournalInspectMsg', 114, 1), + (11391, 57121, 58525, 'OP_QuestJournalOpenMsg', 113, 1), + (11392, 57121, 58525, 'OP_QuestJournalSetVisibleMsg', 115, 1), + (11393, 57121, 58525, 'OP_QuestJournalWaypointMsg', 116, 1), + (11394, 57121, 58525, 'OP_QuestReward', 320, 1), + (11395, 57121, 58525, 'OP_QuickbarInitMsg', 256, 1), + (11396, 57121, 58525, 'OP_QuickbarUpdateMsg', 257, 1), + (11397, 57121, 58525, 'OP_RaceRestrictionMsg', 439, 1), + (11398, 57121, 58525, 'OP_ReadBookPageMsg', 196, 1), + (11399, 57121, 58525, 'OP_ReadyForTakeOffMsg', 192, 1), + (11400, 57121, 58525, 'OP_ReadyToZoneMsg', 84, 1), + (11401, 57121, 58525, 'OP_RecipeBook', 538, 1), + (11402, 57121, 58525, 'OP_RecipeDetailsMsg', 72, 1), + (11403, 57121, 58525, 'OP_RecipeList', 737, 1), + (11404, 57121, 58525, 'OP_RecipeListUnknown', 591, 1), + (11405, 57121, 58525, 'OP_RelinquishHouseMsg', 153, 1), + (11406, 57121, 58525, 'OP_ReloadLocalizedTxtMsg', 355, 1), + (11407, 57121, 58525, 'OP_RemoteCmdMsg', 42, 1), + (11408, 57121, 58525, 'OP_RemoveClientFromGroupMsg', 85, 1), + (11409, 57121, 58525, 'OP_RemoveConcentrationMsg', 112, 1), + (11410, 57121, 58525, 'OP_RemoveGroupFromGroupMsg', 86, 1), + (11411, 57121, 58525, 'OP_RemoveSpellEffectMsg', 111, 1), + (11412, 57121, 58525, 'OP_RenameGuildMsg', 282, 1), + (11413, 57121, 58525, 'OP_ReplaceableSubMeshesMsg', 165, 1), + (11414, 57121, 58525, 'OP_ReportMsg', 380, 1), + (11415, 57121, 58525, 'OP_RequestCampMsg', 50, 1), + (11416, 57121, 58525, 'OP_RequestGuildBankEventDetailsMs', 280, 1), + (11417, 57121, 58525, 'OP_RequestGuildEventDetailsMsg', 271, 1), + (11418, 57121, 58525, 'OP_RequestGuildInfoMsg', 273, 1), + (11419, 57121, 58525, 'OP_RequestGuildMembershipMsg', 356, 1), + (11420, 57121, 58525, 'OP_RequestHelpRepathMsg', 206, 1), + (11421, 57121, 58525, 'OP_RequestRecipeDetailsMsg', 71, 1), + (11422, 57121, 58525, 'OP_RequestTargetLocMsg', 207, 1), + (11423, 57121, 58525, 'OP_Research', 738, 1), + (11424, 57121, 58525, 'OP_ResendWorldChannelsMsg', 443, 1), + (11425, 57121, 58525, 'OP_ReskinCharacterRequestMsg', 15, 1), + (11426, 57121, 58525, 'OP_RestartZoneMsg', 412, 1), + (11427, 57121, 58525, 'OP_RewardPackMsg', 281, 1), + (11428, 57121, 58525, 'OP_SatMsg', 189, 1), + (11429, 57121, 58525, 'OP_SavageBarInitMsg', 578, 1), + (11430, 57121, 58525, 'OP_SelectZoneTeleporterDestinatio', 354, 1), + (11431, 57121, 58525, 'OP_SendLatestRequestMsg', 97, 1), + (11432, 57121, 58525, 'OP_ServerPlayCharacterReplyMsg', 24, 1), + (11433, 57121, 58525, 'OP_ServerPlayCharacterRequestMsg', 23, 1), + (11434, 57121, 58525, 'OP_SetInstanceDisplayNameMsg', 440, 1), + (11435, 57121, 58525, 'OP_SetRemoteCmdsMsg', 41, 1), + (11436, 57121, 58525, 'OP_SetSocialMsg', 99, 1), + (11437, 57121, 58525, 'OP_ShaderCustomizationMsg', 164, 1), + (11438, 57121, 58525, 'OP_ShowCreateFromRecipeUIMsg', 219, 1), + (11439, 57121, 58525, 'OP_ShowIllusionsMsg', 193, 1), + (11440, 57121, 58525, 'OP_ShowItemCreationProcessUIMsg', 223, 1), + (11441, 57121, 58525, 'OP_ShowRecipeBookMsg', 226, 1), + (11442, 57121, 58525, 'OP_ShowZoneTeleporterDestinations', 353, 1), + (11443, 57121, 58525, 'OP_SitMsg', 187, 1), + (11444, 57121, 58525, 'OP_SkillInfoRequest', 514, 1), + (11445, 57121, 58525, 'OP_SkillInfoResponse', 515, 1), + (11446, 57121, 58525, 'OP_SpellGainedMsg', 262, 1), + (11447, 57121, 58525, 'OP_StandMsg', 188, 1), + (11448, 57121, 58525, 'OP_StoodMsg', 190, 1), + (11449, 57121, 58525, 'OP_StopItemCreationMsg', 222, 1), + (11450, 57121, 58525, 'OP_StoppedLootingMsg', 186, 1), + (11451, 57121, 58525, 'OP_StopTrackingMsg', 391, 1), + (11452, 57121, 58525, 'OP_SubmitCharCust', 562, 1), + (11453, 57121, 58525, 'OP_SupplyDepot', 735, 1), + (11454, 57121, 58525, 'OP_SysClient', 218, 1), + (11455, 57121, 58525, 'OP_TeleportWithinZoneMsg', 79, 1), + (11456, 57121, 58525, 'OP_TeleportWithinZoneNoReloadMsg', 80, 1), + (11457, 57121, 58525, 'OP_TintWidgetsMsg', 170, 1), + (11458, 57121, 58525, 'OP_TitleUpdateMsg', 384, 1), + (11459, 57121, 58525, 'OP_TrackingUpdateMsg', 389, 1), + (11460, 57121, 58525, 'OP_TradeskillList', 704, 1), + (11461, 57121, 58525, 'OP_TraitsList', 727, 1), + (11462, 57121, 58525, 'OP_UIEvent', 527, 1), + (11463, 57121, 58525, 'OP_UIResetMsg', 174, 1), + (11464, 57121, 58525, 'OP_UISettingsResponseMsg', 173, 1), + (11465, 57121, 58525, 'OP_Unknown', 760, 1), + (11466, 57121, 58525, 'OP_UnknownNpcMsg', 373, 1), + (11467, 57121, 58525, 'OP_UpdateActivePublicZonesMsg', 372, 1), + (11468, 57121, 58525, 'OP_UpdateCharacterSheetMsg', 63, 1), + (11469, 57121, 58525, 'OP_UpdateClientPredFlagsMsg', 245, 1), + (11470, 57121, 58525, 'OP_UpdateDebugRadiiMsg', 379, 1), + (11471, 57121, 58525, 'OP_UpdateGroupMemberDataMsg', 388, 1), + (11472, 57121, 58525, 'OP_UpdateHouseAccessDataMsg', 144, 1), + (11473, 57121, 58525, 'OP_UpdateHouseDataMsg', 143, 1), + (11474, 57121, 58525, 'OP_UpdateInventoryMsg', 68, 1), + (11475, 57121, 58525, 'OP_UpdateItemCreationProcessUIMsg', 224, 1), + (11476, 57121, 58525, 'OP_UpdateMotdMsg', 208, 1), + (11477, 57121, 58525, 'OP_UpdateOpportunityMsg', 75, 1), + (11478, 57121, 58525, 'OP_UpdatePositionMsg', 39, 1), + (11479, 57121, 58525, 'OP_UpdateRaidMsg', 381, 1), + (11480, 57121, 58525, 'OP_UpdateRecipeBookMsg', 70, 1), + (11481, 57121, 58525, 'OP_UpdateSkillBookMsg', 73, 1), + (11482, 57121, 58525, 'OP_UpdateSkillsMsg', 74, 1), + (11483, 57121, 58525, 'OP_UpdateSpellBookMsg', 66, 1), + (11484, 57121, 58525, 'OP_UpdateTargetLocMsg', 62, 1), + (11485, 57121, 58525, 'OP_UpdateTargetMsg', 61, 1), + (11486, 57121, 58525, 'OP_UpdateTitleCmd', 494, 1), + (11487, 57121, 58525, 'OP_UseAdornment', 715, 1), + (11488, 57121, 58525, 'OP_VideoUploaded', 577, 1), + (11489, 57121, 58525, 'OP_VoiceChatChannel', 520, 1), + (11490, 57121, 58525, 'OP_VoiceChatServer', 731, 1), + (11491, 57121, 58525, 'OP_WaypointReplyMsg', 349, 1), + (11492, 57121, 58525, 'OP_WaypointRequestMsg', 348, 1), + (11493, 57121, 58525, 'OP_WaypointSelectMsg', 350, 1), + (11494, 57121, 58525, 'OP_WaypointUpdateMsg', 351, 1), + (11495, 57121, 58525, 'OP_Weakness', 581, 1), + (11496, 57121, 58525, 'OP_WhoQueryReplyMsg', 54, 1), + (11497, 57121, 58525, 'OP_WhoQueryRequestMsg', 53, 1), + (11498, 57121, 58525, 'OP_WorldDataChangeMsg', 410, 1), + (11499, 57121, 58525, 'OP_WorldDataUpdateMsg', 237, 1), + (11500, 57121, 58525, 'OP_WorldListMsg', 8, 1), + (11501, 57121, 58525, 'OP_WorldPingMsg', 399, 1), + (11502, 57121, 58525, 'OP_WorldShutdownUpdateMsg', 403, 1), + (11503, 57121, 58525, 'OP_WorldStatusChangeMsg', 6, 1), + (11504, 57121, 58525, 'OP_WorldTravelAvail', 570, 1), + (11505, 57121, 58525, 'OP_WSAcctLockStatusMsg', 205, 1), + (11506, 57121, 58525, 'OP_WSCreateCharacterReplyMsg', 14, 1), + (11507, 57121, 58525, 'OP_WSCreateCharacterRequestMsg', 13, 1), + (11508, 57121, 58525, 'OP_WSLoginRequestMsg', 2, 1), + (11509, 57121, 58525, 'OP_WSServerHideMsg', 366, 1), + (11510, 57121, 58525, 'OP_WSServerLockMsg', 364, 1), + (11511, 57121, 58525, 'OP_WSStatusReplyMsg', 5, 1), + (11512, 57121, 58525, 'OP_ZoneBgInstanceList', 566, 1), + (11513, 57121, 58525, 'OP_ZoneInfoMsg', 33, 1), + (11514, 57121, 58525, 'OP_ZoneInstanceCreateReplyMsg', 30, 1), + (11515, 57121, 58525, 'OP_ZoneInstanceDestroyedMsg', 31, 1), + (11516, 57121, 58525, 'OP_ZoneMOTDMsg', 45, 1), + (11517, 57121, 58525, 'OP_ZonesStatusMsg', 103, 1), + (11518, 57121, 58525, 'OP_ZonesStatusRequestMsg', 102, 1), + (11519, 57121, 58525, 'OP_ZoneToFriendReplyMsg', 284, 1), + (11520, 57121, 58525, 'OP_ZoneToFriendRequestMsg', 283, 1), + (11521, 0, 0, 'OP_OpenCharCust', 9999, 1), + (11522, 839, 844, 'OP_OpenCharCust', 9999, 1), + (11523, 908, 927, 'OP_OpenCharCust', 9999, 1), + (11524, 1008, 1011, 'OP_OpenCharCust', 9999, 1), + (11525, 1045, 1046, 'OP_OpenCharCust', 9999, 1), + (11526, 1096, 1096, 'OP_OpenCharCust', 9999, 1), + (11527, 0, 0, 'OP_CharacterMerc', 9999, 1), + (11528, 839, 844, 'OP_CharacterMerc', 9999, 1), + (11529, 908, 927, 'OP_CharacterMerc', 9999, 1), + (11530, 1008, 1011, 'OP_CharacterMerc', 9999, 1), + (11531, 1045, 1046, 'OP_CharacterMerc', 9999, 1), + (11532, 1096, 1096, 'OP_CharacterMerc', 9999, 1), + (11533, 0, 0, 'OP_AfterInvSpellUpdate', 9999, 1), + (11534, 839, 844, 'OP_AfterInvSpellUpdate', 9999, 1), + (11535, 908, 927, 'OP_AfterInvSpellUpdate', 9999, 1), + (11536, 1008, 1011, 'OP_AfterInvSpellUpdate', 9999, 1), + (11537, 1045, 1046, 'OP_AfterInvSpellUpdate', 9999, 1), + (11538, 1096, 1096, 'OP_AfterInvSpellUpdate', 9999, 1), + (11539, 0, 0, 'OP_CharacterCreatedDungeons', 9999, 1), + (11540, 839, 844, 'OP_CharacterCreatedDungeons', 9999, 1), + (11541, 908, 927, 'OP_CharacterCreatedDungeons', 9999, 1), + (11542, 1008, 1011, 'OP_CharacterCreatedDungeons', 9999, 1), + (11543, 1045, 1046, 'OP_CharacterCreatedDungeons', 9999, 1), + (11544, 1096, 1096, 'OP_CharacterCreatedDungeons', 9999, 1), + (11545, 0, 0, 'OP_CharacterHousingList', 9999, 1), + (11546, 839, 844, 'OP_CharacterHousingList', 9999, 1), + (11547, 908, 927, 'OP_CharacterHousingList', 9999, 1), + (11548, 1008, 1011, 'OP_CharacterHousingList', 9999, 1), + (11549, 1045, 1046, 'OP_CharacterHousingList', 9999, 1), + (11550, 1096, 1096, 'OP_CharacterHousingList', 9999, 1), + (11551, 0, 0, 'OP_HouseItemsList', 9999, 1), + (11552, 839, 844, 'OP_HouseItemsList', 9999, 1), + (11553, 908, 927, 'OP_HouseItemsList', 9999, 1), + (11554, 1008, 1011, 'OP_HouseItemsList', 9999, 1), + (11555, 1045, 1046, 'OP_HouseItemsList', 9999, 1), + (11556, 1096, 1096, 'OP_HouseItemsList', 9999, 1), + (11557, 0, 0, 'OP_CharacterMounts', 9999, 1), + (11558, 839, 844, 'OP_CharacterMounts', 9999, 1), + (11559, 908, 927, 'OP_CharacterMounts', 9999, 1), + (11560, 1008, 1011, 'OP_CharacterMounts', 9999, 1), + (11561, 1045, 1046, 'OP_CharacterMounts', 9999, 1), + (11562, 1096, 1096, 'OP_CharacterMounts', 9999, 1), + (11563, 0, 0, 'OP_LoadCalendarEvents', 9999, 1), + (11564, 839, 844, 'OP_LoadCalendarEvents', 9999, 1), + (11565, 908, 927, 'OP_LoadCalendarEvents', 9999, 1), + (11566, 1008, 1011, 'OP_LoadCalendarEvents', 9999, 1), + (11567, 1045, 1046, 'OP_LoadCalendarEvents', 9999, 1), + (11568, 1096, 1096, 'OP_LoadCalendarEvents', 9999, 1), + (11569, 0, 0, 'OP_LoadWelcomeWindow', 9999, 1), + (11570, 839, 844, 'OP_LoadWelcomeWindow', 9999, 1), + (11571, 908, 927, 'OP_LoadWelcomeWindow', 9999, 1), + (11572, 1008, 1011, 'OP_LoadWelcomeWindow', 9999, 1), + (11573, 1045, 1046, 'OP_LoadWelcomeWindow', 9999, 1), + (11574, 1096, 1096, 'OP_LoadWelcomeWindow', 9999, 1), + (11575, 0, 0, 'OP_DungeonMakerItemRequest', 9999, 1), + (11576, 839, 844, 'OP_DungeonMakerItemRequest', 9999, 1), + (11577, 908, 927, 'OP_DungeonMakerItemRequest', 9999, 1), + (11578, 1008, 1011, 'OP_DungeonMakerItemRequest', 9999, 1), + (11579, 1045, 1046, 'OP_DungeonMakerItemRequest', 9999, 1), + (11580, 1096, 1096, 'OP_DungeonMakerItemRequest', 9999, 1), + (11581, 0, 0, 'OP_SysClient', 9999, 1), + (11582, 839, 844, 'OP_SysClient', 9999, 1), + (11583, 908, 927, 'OP_SysClient', 9999, 1), + (11584, 1008, 1011, 'OP_SysClient', 9999, 1), + (11585, 1045, 1046, 'OP_SysClient', 9999, 1), + (11586, 1096, 1096, 'OP_SysClient', 9999, 1), + (11587, 0, 0, 'OP_LFGGroupSearch', 9999, 1), + (11588, 839, 844, 'OP_LFGGroupSearch', 9999, 1), + (11589, 908, 927, 'OP_LFGGroupSearch', 9999, 1), + (11590, 1008, 1011, 'OP_LFGGroupSearch', 9999, 1), + (11591, 1045, 1046, 'OP_LFGGroupSearch', 9999, 1), + (11592, 1096, 1096, 'OP_LFGGroupSearch', 9999, 1), + (11593, 0, 0, 'OP_MarketPlacePrices', 9999, 1), + (11594, 839, 844, 'OP_MarketPlacePrices', 9999, 1), + (11595, 908, 927, 'OP_MarketPlacePrices', 9999, 1), + (11596, 1008, 1011, 'OP_MarketPlacePrices', 9999, 1), + (11597, 1045, 1046, 'OP_MarketPlacePrices', 9999, 1), + (11598, 1096, 1096, 'OP_MarketPlacePrices', 9999, 1), + (11599, 0, 0, 'OP_MarketFundsUpdate', 9999, 1), + (11600, 839, 844, 'OP_MarketFundsUpdate', 9999, 1), + (11601, 908, 927, 'OP_MarketFundsUpdate', 9999, 1), + (11602, 1008, 1011, 'OP_MarketFundsUpdate', 9999, 1), + (11603, 1045, 1046, 'OP_MarketFundsUpdate', 9999, 1), + (11604, 1096, 1096, 'OP_MarketFundsUpdate', 9999, 1), + (11605, 0, 0, 'OP_MarketAddFundsRequest', 9999, 1), + (11606, 839, 844, 'OP_MarketAddFundsRequest', 9999, 1), + (11607, 908, 927, 'OP_MarketAddFundsRequest', 9999, 1), + (11608, 1008, 1011, 'OP_MarketAddFundsRequest', 9999, 1), + (11609, 1045, 1046, 'OP_MarketAddFundsRequest', 9999, 1), + (11610, 1096, 1096, 'OP_MarketAddFundsRequest', 9999, 1), + (11611, 0, 0, 'OP_ZoneBgInstanceList', 9999, 1), + (11612, 839, 844, 'OP_ZoneBgInstanceList', 9999, 1), + (11613, 908, 927, 'OP_ZoneBgInstanceList', 9999, 1), + (11614, 1008, 1011, 'OP_ZoneBgInstanceList', 9999, 1), + (11615, 1045, 1046, 'OP_ZoneBgInstanceList', 9999, 1), + (11616, 1096, 1096, 'OP_ZoneBgInstanceList', 9999, 1), + (11617, 0, 0, 'OP_UIEvent', 9999, 1), + (11618, 839, 844, 'OP_UIEvent', 9999, 1), + (11619, 908, 927, 'OP_UIEvent', 9999, 1), + (11620, 1008, 1011, 'OP_UIEvent', 9999, 1), + (11621, 1045, 1046, 'OP_UIEvent', 9999, 1), + (11622, 1096, 1096, 'OP_UIEvent', 9999, 1), + (11623, 0, 0, 'OP_EQHearThreatCmd', 9999, 1), + (11624, 839, 844, 'OP_EQHearThreatCmd', 9999, 1), + (11625, 908, 927, 'OP_EQHearThreatCmd', 9999, 1), + (11626, 1008, 1011, 'OP_EQHearThreatCmd', 9999, 1), + (11627, 1045, 1046, 'OP_EQHearThreatCmd', 9999, 1), + (11628, 1096, 1096, 'OP_EQHearThreatCmd', 9999, 1), + (11629, 0, 0, 'OP_Weakness', 9999, 1), + (11630, 839, 844, 'OP_Weakness', 9999, 1), + (11631, 908, 927, 'OP_Weakness', 9999, 1), + (11632, 1008, 1011, 'OP_Weakness', 9999, 1), + (11633, 1045, 1046, 'OP_Weakness', 9999, 1), + (11634, 1096, 1096, 'OP_Weakness', 9999, 1), + (11635, 0, 0, 'OP_SavageBarInitMsg', 9999, 1), + (11636, 839, 844, 'OP_SavageBarInitMsg', 9999, 1), + (11637, 908, 927, 'OP_SavageBarInitMsg', 9999, 1), + (11638, 1008, 1011, 'OP_SavageBarInitMsg', 9999, 1), + (11639, 1045, 1046, 'OP_SavageBarInitMsg', 9999, 1), + (11640, 1096, 1096, 'OP_SavageBarInitMsg', 9999, 1), + (11641, 0, 0, 'OP_PetOptionsResponse', 9999, 1), + (11642, 839, 844, 'OP_PetOptionsResponse', 9999, 1), + (11643, 908, 927, 'OP_PetOptionsResponse', 9999, 1), + (11644, 1008, 1011, 'OP_PetOptionsResponse', 9999, 1), + (11645, 1045, 1046, 'OP_PetOptionsResponse', 9999, 1), + (11646, 1096, 1096, 'OP_PetOptionsResponse', 9999, 1), + (11647, 0, 0, 'OP_CurrentPet', 9999, 1), + (11648, 839, 844, 'OP_CurrentPet', 9999, 1), + (11649, 908, 927, 'OP_CurrentPet', 9999, 1), + (11650, 1008, 1011, 'OP_CurrentPet', 9999, 1), + (11651, 1045, 1046, 'OP_CurrentPet', 9999, 1), + (11652, 1096, 1096, 'OP_CurrentPet', 9999, 1), + (11653, 0, 0, 'OP_JournalQuestStoryline', 9999, 1), + (11654, 839, 844, 'OP_JournalQuestStoryline', 9999, 1), + (11655, 908, 927, 'OP_JournalQuestStoryline', 9999, 1), + (11656, 1008, 1011, 'OP_JournalQuestStoryline', 9999, 1), + (11657, 1045, 1046, 'OP_JournalQuestStoryline', 9999, 1), + (11658, 1096, 1096, 'OP_JournalQuestStoryline', 9999, 1), + (11659, 0, 0, 'OP_EQHearDispellCmd', 9999, 1), + (11660, 839, 844, 'OP_EQHearDispellCmd', 9999, 1), + (11661, 908, 927, 'OP_EQHearDispellCmd', 9999, 1), + (11662, 1008, 1011, 'OP_EQHearDispellCmd', 9999, 1), + (11663, 1045, 1046, 'OP_EQHearDispellCmd', 9999, 1), + (11664, 1096, 1096, 'OP_EQHearDispellCmd', 9999, 1), + (11665, 0, 0, 'OP_LikeOption', 9999, 1), + (11666, 839, 844, 'OP_LikeOption', 9999, 1), + (11667, 908, 927, 'OP_LikeOption', 9999, 1), + (11668, 1008, 1011, 'OP_LikeOption', 9999, 1), + (11669, 1045, 1046, 'OP_LikeOption', 9999, 1), + (11670, 1096, 1096, 'OP_LikeOption', 9999, 1), + (11671, 0, 0, 'OP_Launchpad', 9999, 1), + (11672, 839, 844, 'OP_Launchpad', 9999, 1), + (11673, 908, 927, 'OP_Launchpad', 9999, 1), + (11674, 1008, 1011, 'OP_Launchpad', 9999, 1), + (11675, 1045, 1046, 'OP_Launchpad', 9999, 1), + (11676, 1096, 1096, 'OP_Launchpad', 9999, 1), + (11677, 1193, 1195, 'OP_Launchpad', 9999, 1), + (11678, 1198, 1199, 'OP_Launchpad', 9999, 1), + (11679, 1204, 1205, 'OP_Launchpad', 9999, 1), + (11680, 1208, 1208, 'OP_Launchpad', 9999, 1), + (11681, 57000, 57002, 'OP_Launchpad', 9999, 1), + (11682, 0, 0, 'OP_ClearForLandingMsg', 9999, 1), + (11683, 839, 844, 'OP_ClearForLandingMsg', 9999, 1), + (11684, 908, 927, 'OP_ClearForLandingMsg', 9999, 1), + (11685, 1008, 1011, 'OP_ClearForLandingMsg', 9999, 1), + (11686, 1045, 1046, 'OP_ClearForLandingMsg', 9999, 1), + (11687, 1096, 1096, 'OP_ClearForLandingMsg', 9999, 1), + (11688, 1193, 1195, 'OP_ClearForLandingMsg', 9999, 1), + (11689, 1198, 1199, 'OP_ClearForLandingMsg', 9999, 1), + (11690, 1204, 1205, 'OP_ClearForLandingMsg', 9999, 1), + (11691, 1208, 1208, 'OP_ClearForLandingMsg', 9999, 1), + (11692, 57000, 57002, 'OP_ClearForLandingMsg', 9999, 1), + (11693, 0, 0, 'OP_RecipeListUnknown', 9999, 1), + (11694, 839, 844, 'OP_RecipeListUnknown', 9999, 1), + (11695, 908, 927, 'OP_RecipeListUnknown', 9999, 1), + (11696, 1008, 1011, 'OP_RecipeListUnknown', 9999, 1), + (11697, 1045, 1046, 'OP_RecipeListUnknown', 9999, 1), + (11698, 1096, 1096, 'OP_RecipeListUnknown', 9999, 1), + (11699, 1193, 1195, 'OP_RecipeListUnknown', 9999, 1), + (11700, 1198, 1199, 'OP_RecipeListUnknown', 9999, 1), + (11701, 1204, 1205, 'OP_RecipeListUnknown', 9999, 1), + (11702, 1208, 1208, 'OP_RecipeListUnknown', 9999, 1), + (11703, 57000, 57002, 'OP_RecipeListUnknown', 9999, 1), + (11704, 57003, 57014, 'OP_RecipeListUnknown', 9999, 1), + (11705, 57015, 57031, 'OP_RecipeListUnknown', 9999, 1), + (11706, 0, 0, 'OP_DailyObjectives', 9999, 1), + (11707, 839, 844, 'OP_DailyObjectives', 9999, 1), + (11708, 908, 927, 'OP_DailyObjectives', 9999, 1), + (11709, 1008, 1011, 'OP_DailyObjectives', 9999, 1), + (11710, 1045, 1046, 'OP_DailyObjectives', 9999, 1), + (11711, 1096, 1096, 'OP_DailyObjectives', 9999, 1), + (11712, 1193, 1195, 'OP_DailyObjectives', 9999, 1), + (11713, 1198, 1199, 'OP_DailyObjectives', 9999, 1), + (11714, 1204, 1205, 'OP_DailyObjectives', 9999, 1), + (11715, 1208, 1208, 'OP_DailyObjectives', 9999, 1), + (11716, 57000, 57002, 'OP_DailyObjectives', 9999, 1), + (11717, 57003, 57014, 'OP_DailyObjectives', 9999, 1), + (11718, 57015, 57031, 'OP_DailyObjectives', 9999, 1), + (11719, 57032, 57047, 'OP_DailyObjectives', 9999, 1), + (11720, 0, 0, 'OP_HeritageMsg', 9999, 1), + (11721, 839, 844, 'OP_HeritageMsg', 9999, 1), + (11722, 908, 927, 'OP_HeritageMsg', 9999, 1), + (11723, 1008, 1011, 'OP_HeritageMsg', 9999, 1), + (11724, 1045, 1046, 'OP_HeritageMsg', 9999, 1), + (11725, 1096, 1096, 'OP_HeritageMsg', 9999, 1), + (11726, 1193, 1195, 'OP_HeritageMsg', 9999, 1), + (11727, 1198, 1199, 'OP_HeritageMsg', 9999, 1), + (11728, 1204, 1205, 'OP_HeritageMsg', 9999, 1), + (11729, 1208, 1208, 'OP_HeritageMsg', 9999, 1), + (11730, 57000, 57002, 'OP_HeritageMsg', 9999, 1), + (11731, 57003, 57014, 'OP_HeritageMsg', 9999, 1), + (11732, 57015, 57031, 'OP_HeritageMsg', 9999, 1), + (11733, 57032, 57047, 'OP_HeritageMsg', 9999, 1), + (11734, 57048, 57079, 'OP_HeritageMsg', 9999, 1), + (11735, 57080, 57095, 'OP_HeritageMsg', 9999, 1), + (11736, 57107, 57109, 'OP_HeritageMsg', 9999, 1), + (11737, 57121, 58525, 'OP_HeritageMsg', 9999, 1), + (11738, 58542, 58588, 'OP_AchievementUpdateMsg', 742, 1), + (11739, 58542, 58588, 'OP_AddSocialStructureStandingMsg', 249, 1), + (11740, 58542, 58588, 'OP_AdvancementRequestMsg', 394, 1), + (11741, 58542, 58588, 'OP_AdventureList', 488, 1), + (11742, 58542, 58588, 'OP_AFKUpdateMsg', 370, 1), + (11743, 58542, 58588, 'OP_AfterInvSpellUpdate', 69, 1), + (11744, 58542, 58588, 'OP_AllCharactersDescReplyMsg', 10, 1), + (11745, 58542, 58588, 'OP_AllCharactersDescRequestMsg', 9, 1), + (11746, 58542, 58588, 'OP_AllWSDescRequestMsg', 7, 1), + (11747, 58542, 58588, 'OP_AnonUpdateMsg', 371, 1), + (11748, 58542, 58588, 'OP_ArenaCreate', 456, 1), + (11749, 58542, 58588, 'OP_ArenaGameTypesMsg', 445, 1), + (11750, 58542, 58588, 'OP_ArenaList', 457, 1), + (11751, 58542, 58588, 'OP_ArenaWindow', 465, 1), + (11752, 58542, 58588, 'OP_AttackAllowed', 500, 1), + (11753, 58542, 58588, 'OP_AttackNotAllowed', 501, 1), + (11754, 58542, 58588, 'OP_AuctionAbortMsg', 436, 1), + (11755, 58542, 58588, 'OP_AuctionCharacter', 433, 1), + (11756, 58542, 58588, 'OP_AuctionCharacterReply', 434, 1), + (11757, 58542, 58588, 'OP_AuctionCoin', 431, 1), + (11758, 58542, 58588, 'OP_AuctionCoinReply', 432, 1), + (11759, 58542, 58588, 'OP_AuctionCommitMsg', 435, 1), + (11760, 58542, 58588, 'OP_AuctionItem', 429, 1), + (11761, 58542, 58588, 'OP_AuctionItemReply', 430, 1), + (11762, 58542, 58588, 'OP_AuditAuctionEventMsg', 446, 1), + (11763, 58542, 58588, 'OP_AvatarCreatedMsg', 46, 1), + (11764, 58542, 58588, 'OP_AvatarDestroyedMsg', 47, 1), + (11765, 58542, 58588, 'OP_AvatarUpdateMsg', 360, 1), + (11766, 58542, 58588, 'OP_BadLanguageFilter', 519, 1), + (11767, 58542, 58588, 'OP_BagOptions', 502, 1), + (11768, 58542, 58588, 'OP_BeginItemCreationMsg', 221, 1), + (11769, 58542, 58588, 'OP_BeginTrackingMsg', 390, 1), + (11770, 58542, 58588, 'OP_BioUpdateMsg', 362, 1), + (11771, 58542, 58588, 'OP_BrokerAddBag', 292, 1), + (11772, 58542, 58588, 'OP_BrokerRemoveBag', 293, 1), + (11773, 58542, 58588, 'OP_BrokerSellList', 685, 1), + (11774, 58542, 58588, 'OP_BuyPlayerHouseMsg', 150, 1), + (11775, 58542, 58588, 'OP_BuyPlayerHouseTintMsg', 151, 1), + (11776, 58542, 58588, 'OP_CampAbortedMsg', 52, 1), + (11777, 58542, 58588, 'OP_CampClientMsg', 387, 1), + (11778, 58542, 58588, 'OP_CampStartedMsg', 51, 1), + (11779, 58542, 58588, 'OP_CancelCreateFromRecipeMsg', 220, 1), + (11780, 58542, 58588, 'OP_CancelledFeignMsg', 216, 1), + (11781, 58542, 58588, 'OP_CancelMoveObjectModeMsg', 163, 1), + (11782, 58542, 58588, 'OP_CancelSpellCast', 489, 1), + (11783, 58542, 58588, 'OP_ChangeServerControlFlagMsg', 246, 1), + (11784, 58542, 58588, 'OP_ChangeZoneMsg', 77, 1), + (11785, 58542, 58588, 'OP_CharacterAchievements', 741, 1), + (11786, 58542, 58588, 'OP_CharacterCreatedDungeons', 551, 1), + (11787, 58542, 58588, 'OP_CharacterCurrency', 740, 1), + (11788, 58542, 58588, 'OP_CharacterHousingList', 507, 1), + (11789, 58542, 58588, 'OP_CharacterLinkdeadMsg', 414, 1), + (11790, 58542, 58588, 'OP_CharacterMerc', 65, 1), + (11791, 58542, 58588, 'OP_CharacterMounts', 582, 1), + (11792, 58542, 58588, 'OP_CharacterPet', 64, 1), + (11793, 58542, 58588, 'OP_CharNameChangedMsg', 352, 1), + (11794, 58542, 58588, 'OP_CharRenamed', 706, 1), + (11795, 58542, 58588, 'OP_CharTransferCommitReplyMsg', 422, 1), + (11796, 58542, 58588, 'OP_CharTransferCommitRequestMsg', 420, 1), + (11797, 58542, 58588, 'OP_CharTransferReplyMsg', 418, 1), + (11798, 58542, 58588, 'OP_CharTransferRequestMsg', 417, 1), + (11799, 58542, 58588, 'OP_CharTransferRollbackReplyMsg', 421, 1), + (11800, 58542, 58588, 'OP_CharTransferRollbackRequestMsg', 419, 1), + (11801, 58542, 58588, 'OP_CharTransferStartReplyMsg', 416, 1), + (11802, 58542, 58588, 'OP_CharTransferStartRequestMsg', 415, 1), + (11803, 58542, 58588, 'OP_CharTransferValidateReplyMsg', 438, 1), + (11804, 58542, 58588, 'OP_CharTransferValidateRequestMsg', 437, 1), + (11805, 58542, 58588, 'OP_ChatCreateChannelMsg', 285, 1), + (11806, 58542, 58588, 'OP_ChatFiltersMsg', 335, 1), + (11807, 58542, 58588, 'OP_ChatJoinChannelMsg', 286, 1), + (11808, 58542, 58588, 'OP_ChatLeaveChannelMsg', 288, 1), + (11809, 58542, 58588, 'OP_ChatRelationshipUpdateMsg', 184, 1), + (11810, 58542, 58588, 'OP_ChatSendFriendsMsg', 295, 1), + (11811, 58542, 58588, 'OP_ChatSendIgnoresMsg', 296, 1), + (11812, 58542, 58588, 'OP_ChatTellChannelMsg', 289, 1), + (11813, 58542, 58588, 'OP_ChatTellUserMsg', 290, 1), + (11814, 58542, 58588, 'OP_ChatToggleFriendMsg', 291, 1), + (11815, 58542, 58588, 'OP_ChatToggleIgnoreMsg', 294, 1), + (11816, 58542, 58588, 'OP_ChatWhoChannelMsg', 287, 1), + (11817, 58542, 58588, 'OP_ClearDataMsg', 98, 1), + (11818, 58542, 58588, 'OP_ClearForLandingMsg', 491, 1), + (11819, 58542, 58588, 'OP_ClearForTakeOffMsg', 191, 1), + (11820, 58542, 58588, 'OP_ClientCmdMsg', 58, 1), + (11821, 58542, 58588, 'OP_ClientFellMsg', 385, 1), + (11822, 58542, 58588, 'OP_ClientIdleBeginMsg', 405, 1), + (11823, 58542, 58588, 'OP_ClientIdleEndMsg', 406, 1), + (11824, 58542, 58588, 'OP_ClientInDeathRegionMsg', 386, 1), + (11825, 58542, 58588, 'OP_ClientTeleportRequestMsg', 78, 1), + (11826, 58542, 58588, 'OP_ClientTeleportToLocationMsg', 244, 1), + (11827, 58542, 58588, 'OP_CloseGroupInviteWindowMsg', 397, 1), + (11828, 58542, 58588, 'OP_CollectAllHouseItemsMsg', 152, 1), + (11829, 58542, 58588, 'OP_ConsignItemRequestMsg', 126, 1), + (11830, 58542, 58588, 'OP_ConsignItemResponseMsg', 127, 1), + (11831, 58542, 58588, 'OP_ConsignmentCloseStoreMsg', 125, 1), + (11832, 58542, 58588, 'OP_ConsignRemoveItemsMsg', 378, 1), + (11833, 58542, 58588, 'OP_ConsignViewCreateMsg', 375, 1), + (11834, 58542, 58588, 'OP_ConsignViewGetPageMsg', 376, 1), + (11835, 58542, 58588, 'OP_ConsignViewReleaseMsg', 377, 1), + (11836, 58542, 58588, 'OP_ConsignViewSortMsg', 383, 1), + (11837, 58542, 58588, 'OP_CorruptedClientMsg', 409, 1), + (11838, 58542, 58588, 'OP_CreateBoatTransportsMsg', 250, 1), + (11839, 58542, 58588, 'OP_CreateCharacterDungeon', 547, 1), + (11840, 58542, 58588, 'OP_CreateCharacterReplyMsg', 12, 1), + (11841, 58542, 58588, 'OP_CreateCharacterRequestMsg', 11, 1), + (11842, 58542, 58588, 'OP_CreateCharFromCBBReplyMsg', 426, 1), + (11843, 58542, 58588, 'OP_CreateCharFromCBBRequestMsg', 425, 1), + (11844, 58542, 58588, 'OP_CreateGuildReplyMsg', 120, 1), + (11845, 58542, 58588, 'OP_CreateGuildRequestMsg', 119, 1), + (11846, 58542, 58588, 'OP_CreateZoneInstanceMsg', 29, 1), + (11847, 58542, 58588, 'OP_CsCategoryRequestMsg', 367, 1), + (11848, 58542, 58588, 'OP_CsCategoryResponseMsg', 368, 1), + (11849, 58542, 58588, 'OP_CSTicketAddCommentMsg', 234, 1), + (11850, 58542, 58588, 'OP_CSTicketChangeNotificationMsg', 236, 1), + (11851, 58542, 58588, 'OP_CSTicketCommentRequestMsg', 231, 1), + (11852, 58542, 58588, 'OP_CSTicketCommentResponseMsg', 232, 1), + (11853, 58542, 58588, 'OP_CSTicketCreateMsg', 233, 1), + (11854, 58542, 58588, 'OP_CSTicketDeleteMsg', 235, 1), + (11855, 58542, 58588, 'OP_CSTicketHeaderRequestMsg', 229, 1), + (11856, 58542, 58588, 'OP_CSTicketInfoMsg', 230, 1), + (11857, 58542, 58588, 'OP_CSToolAccessResponseMsg', 388, 1), + (11858, 58542, 58588, 'OP_CSToolsRequestMsg', 247, 1), + (11859, 58542, 58588, 'OP_CSToolsResponseMsg', 248, 1), + (11860, 58542, 58588, 'OP_CurrentPet', 485, 1), + (11861, 58542, 58588, 'OP_CustomizationPurchaseRequestMs', 167, 1), + (11862, 58542, 58588, 'OP_CustomizationReplyMsg', 169, 1), + (11863, 58542, 58588, 'OP_CustomizationSetRequestMsg', 168, 1), + (11864, 58542, 58588, 'OP_CustomizeHouseDisplay', 731, 1), + (11865, 58542, 58588, 'OP_DailyObjectives', 595, 1), + (11866, 58542, 58588, 'OP_DefaultGroupOptionsMsg', 198, 1), + (11867, 58542, 58588, 'OP_DefaultGroupOptionsRequestMsg', 197, 1), + (11868, 58542, 58588, 'OP_DeleteCharacterReplyMsg', 17, 1), + (11869, 58542, 58588, 'OP_DeleteCharacterRequestMsg', 16, 1), + (11870, 58542, 58588, 'OP_DeleteGuildMsg', 123, 1), + (11871, 58542, 58588, 'OP_DestUpdateReq', 210, 1), + (11872, 58542, 58588, 'OP_DialogCloseMsg', 110, 1), + (11873, 58542, 58588, 'OP_DialogSelectMsg', 109, 1), + (11874, 58542, 58588, 'OP_DispatchClientCmdMsg', 60, 1), + (11875, 58542, 58588, 'OP_DispatchESMsg', 59, 1), + (11876, 58542, 58588, 'OP_DispatchMsg', 451, 1), + (11877, 58542, 58588, 'OP_DispatchSpellCmdMsg', 179, 1), + (11878, 58542, 58588, 'OP_DisplayDebugNLLPointsMsg', 254, 1), + (11879, 58542, 58588, 'OP_DisplayEventMsg', 452, 1), + (11880, 58542, 58588, 'OP_DisplayExchangeScreenMsg', 444, 1), + (11881, 58542, 58588, 'OP_DisplayGroupOptionsScreenMsg', 200, 1), + (11882, 58542, 58588, 'OP_DisplayInnVisitScreenMsg', 202, 1), + (11883, 58542, 58588, 'OP_DisplayMailScreenMsg', 404, 1), + (11884, 58542, 58588, 'OP_DisplayTSEventReactionMsg', 225, 1), + (11885, 58542, 58588, 'OP_DisplayWarningMsg', 265, 1), + (11886, 58542, 58588, 'OP_DoneLoadingEntityResourcesMsg', 36, 1), + (11887, 58542, 58588, 'OP_DoneLoadingZoneResourcesMsg', 34, 1), + (11888, 58542, 58588, 'OP_DoneSendingInitialEntitiesMsg', 35, 1), + (11889, 58542, 58588, 'OP_DressingRoom', 510, 1), + (11890, 58542, 58588, 'OP_DumpSchedulerMsg', 203, 1), + (11891, 58542, 58588, 'OP_DungeonMakerEnter', 548, 1), + (11892, 58542, 58588, 'OP_DungeonMakerItemRequest', 550, 1), + (11893, 58542, 58588, 'OP_DungeonMakerItemResponse', 580, 1), + (11894, 58542, 58588, 'OP_DungeonMakerToolboxList', 552, 1), + (11895, 58542, 58588, 'OP_DungeonMakerUnknown', 553, 1), + (11896, 58542, 58588, 'OP_DungeonMakerUnknown1', 554, 1), + (11897, 58542, 58588, 'OP_DungeonPlayAsAvatarList', 745, 1), + (11898, 58542, 58588, 'OP_DungeonPlayAsAvatarSelected', 746, 1), + (11899, 58542, 58588, 'OP_EncounterBrokenMsg', 263, 1), + (11900, 58542, 58588, 'OP_EnterHouseMsg', 154, 1), + (11901, 58542, 58588, 'OP_EnterMoveObjectModeMsg', 161, 1), + (11902, 58542, 58588, 'OP_EntityVerbsReplyMsg', 181, 1), + (11903, 58542, 58588, 'OP_EntityVerbsRequestMsg', 180, 1), + (11904, 58542, 58588, 'OP_EntityVerbsVerbMsg', 182, 1), + (11905, 58542, 58588, 'OP_EqArenaResultsCmd', 696, 1), + (11906, 58542, 58588, 'OP_EqAvailWorldChannelsCmd', 683, 1), + (11907, 58542, 58588, 'OP_EqBetaCopyRequest', 603, 1), + (11908, 58542, 58588, 'OP_EqCannedEmoteCmd', 625, 1), + (11909, 58542, 58588, 'OP_EqChatChannelUpdateCmd', 681, 1), + (11910, 58542, 58588, 'OP_EqChoiceWinCmd', 662, 1), + (11911, 58542, 58588, 'OP_EqCloseWindowCmd', 654, 1), + (11912, 58542, 58588, 'OP_EqCollectionFilterCmd', 641, 1), + (11913, 58542, 58588, 'OP_EqCollectionItemCmd', 642, 1), + (11914, 58542, 58588, 'OP_EqCollectionUpdateCmd', 640, 1), + (11915, 58542, 58588, 'OP_EqConsignmentItemsCmd', 686, 1), + (11916, 58542, 58588, 'OP_EqCreateGhostCmd', 607, 1), + (11917, 58542, 58588, 'OP_EqCreateListBoxCmd', 622, 1), + (11918, 58542, 58588, 'OP_EqCreateSignWidgetCmd', 609, 1), + (11919, 58542, 58588, 'OP_EqCreateWidgetCmd', 608, 1), + (11920, 58542, 58588, 'OP_EqDebugPVDCmd', 675, 1), + (11921, 58542, 58588, 'OP_EqDestroyGhostCmd', 610, 1), + (11922, 58542, 58588, 'OP_EqDialogCloseCmd', 638, 1), + (11923, 58542, 58588, 'OP_EqDialogOpenCmd', 637, 1), + (11924, 58542, 58588, 'OP_EqDisplaySpellFailCmd', 658, 1), + (11925, 58542, 58588, 'OP_EqDisplayTextCmd', 606, 1), + (11926, 58542, 58588, 'OP_EqDrawablePathGraphCmd', 636, 1), + (11927, 58542, 58588, 'OP_EqEnableGameEventCmd', 668, 1), + (11928, 58542, 58588, 'OP_EqEnableWindowCmd', 670, 1), + (11929, 58542, 58588, 'OP_EqExamineInfoCmd', 653, 1), + (11930, 58542, 58588, 'OP_EqFactionUpdateCmd', 639, 1), + (11931, 58542, 58588, 'OP_EqFlashWindowCmd', 671, 1), + (11932, 58542, 58588, 'OP_EqGetProbsCmd', 679, 1), + (11933, 58542, 58588, 'OP_EqGroupMemberRemovedCmd', 632, 1), + (11934, 58542, 58588, 'OP_EqGuildBankEventActionCmd', 697, 1), + (11935, 58542, 58588, 'OP_EqGuildBankExamineInfoCmd', 698, 1), + (11936, 58542, 58588, 'OP_EqHearChainEffectCmd', 633, 1), + (11937, 58542, 58588, 'OP_EqHearChatCmd', 605, 1), + (11938, 58542, 58588, 'OP_EqHearCombatCmd', 614, 1), + (11939, 58542, 58588, 'OP_EqHearConsiderCmd', 620, 1), + (11940, 58542, 58588, 'OP_EqHearDeathCmd', 631, 1), + (11941, 58542, 58588, 'OP_EQHearDispellCmd', 743, 1), + (11942, 58542, 58588, 'OP_EqHearDrowningCmd', 630, 1), + (11943, 58542, 58588, 'OP_EqHearHealCmd', 680, 1), + (11944, 58542, 58588, 'OP_EqHearPlayFlavorCmd', 673, 1), + (11945, 58542, 58588, 'OP_EQHearProcCmd', 616, 1), + (11946, 58542, 58588, 'OP_EQHearResEffectCmd', 617, 1), + (11947, 58542, 58588, 'OP_EqHearSpellCastCmd', 615, 1), + (11948, 58542, 58588, 'OP_EqHearSpellFizzleCmd', 619, 1), + (11949, 58542, 58588, 'OP_EqHearSpellInterruptCmd', 618, 1), + (11950, 58542, 58588, 'OP_EqHearSpellNoLandCmd', 699, 1), + (11951, 58542, 58588, 'OP_EQHearThreatCmd', 737, 1), + (11952, 58542, 58588, 'OP_EqHelpPathClearCmd', 651, 1), + (11953, 58542, 58588, 'OP_EqHelpPathCmd', 650, 1), + (11954, 58542, 58588, 'OP_EqInspectPCResultsCmd', 635, 1), + (11955, 58542, 58588, 'OP_EqInstructionWindowCloseCmd', 665, 1), + (11956, 58542, 58588, 'OP_EqInstructionWindowCmd', 664, 1), + (11957, 58542, 58588, 'OP_EqInstructionWindowGoalCmd', 666, 1), + (11958, 58542, 58588, 'OP_EqInstructionWindowTaskCmd', 667, 1), + (11959, 58542, 58588, 'OP_EqJunctionListCmd', 656, 1), + (11960, 58542, 58588, 'OP_EqMapExplorationCmd', 689, 1), + (11961, 58542, 58588, 'OP_EqMentoring', 644, 1), + (11962, 58542, 58588, 'OP_EqPlaySound3DCmd', 628, 1), + (11963, 58542, 58588, 'OP_EqPlaySoundCmd', 627, 1), + (11964, 58542, 58588, 'OP_EqPlayVoiceCmd', 629, 1), + (11965, 58542, 58588, 'OP_EqQuestGroupCmd', 646, 1), + (11966, 58542, 58588, 'OP_EqQuestionnaireCmd', 677, 1), + (11967, 58542, 58588, 'OP_EqQuestJournalReplyCmd', 645, 1), + (11968, 58542, 58588, 'OP_EqQuestJournalUpdateCmd', 643, 1), + (11969, 58542, 58588, 'OP_EqReceiveOfferCmd', 634, 1), + (11970, 58542, 58588, 'OP_EqResurrectedCmd', 661, 1), + (11971, 58542, 58588, 'OP_EqSetControlGhostCmd', 612, 1), + (11972, 58542, 58588, 'OP_EqSetDebugPathPointsCmd', 623, 1), + (11973, 58542, 58588, 'OP_EqSetDefaultVerbCmd', 663, 1), + (11974, 58542, 58588, 'OP_EqSetPOVGhostCmd', 613, 1), + (11975, 58542, 58588, 'OP_EqShowBookCmd', 676, 1), + (11976, 58542, 58588, 'OP_EqShowDeathWindowCmd', 657, 1), + (11977, 58542, 58588, 'OP_EqShowWindowCmd', 669, 1), + (11978, 58542, 58588, 'OP_EqSpellCastEndCmd', 660, 1), + (11979, 58542, 58588, 'OP_EqSpellCastStartCmd', 659, 1), + (11980, 58542, 58588, 'OP_EqSpellMoveToRangeAndRetryCmd', 691, 1), + (11981, 58542, 58588, 'OP_EqStartBrokerCmd', 688, 1), + (11982, 58542, 58588, 'OP_EqStateCmd', 626, 1), + (11983, 58542, 58588, 'OP_EqStoreLogCmd', 690, 1), + (11984, 58542, 58588, 'OP_EqUpdateBankCmd', 652, 1), + (11985, 58542, 58588, 'OP_EqUpdateGhostCmd', 611, 1), + (11986, 58542, 58588, 'OP_EqUpdateLootCmd', 655, 1), + (11987, 58542, 58588, 'OP_EqUpdateMerchantCmd', 647, 1), + (11988, 58542, 58588, 'OP_EqUpdatePlayerMailCmd', 692, 1), + (11989, 58542, 58588, 'OP_EqUpdatePlayerTradeCmd', 649, 1), + (11990, 58542, 58588, 'OP_EqUpdateSignWidgetCmd', 674, 1), + (11991, 58542, 58588, 'OP_EqUpdateStoreCmd', 648, 1), + (11992, 58542, 58588, 'OP_EqUpdateSubClassesCmd', 621, 1), + (11993, 58542, 58588, 'OP_EqUpdateTargetCmd', 684, 1), + (11994, 58542, 58588, 'OP_EqWhoChannelQueryReplyCmd', 682, 1), + (11995, 58542, 58588, 'OP_ESInitMsg', 25, 1), + (11996, 58542, 58588, 'OP_ESLoginRequestMsg', 3, 1), + (11997, 58542, 58588, 'OP_ESReadyForClientsMsg', 26, 1), + (11998, 58542, 58588, 'OP_ESStatusMsg', 100, 1), + (11999, 58542, 58588, 'OP_ESWeatherRequestEndMsg', 105, 1), + (12000, 58542, 58588, 'OP_ESWeatherRequestMsg', 104, 1), + (12001, 58542, 58588, 'OP_ESZoneInstanceStatusMsg', 101, 1), + (12002, 58542, 58588, 'OP_ExamineConsignmentRequestMsg', 171, 1), + (12003, 58542, 58588, 'OP_ExamineConsignmentResponseMsg', 172, 1), + (12004, 58542, 58588, 'OP_ExamineInfoRequestMsg', 255, 1), + (12005, 58542, 58588, 'OP_ExamineItemRequestMsg', 195, 1), + (12006, 58542, 58588, 'OP_ExitHouseMsg', 155, 1), + (12007, 58542, 58588, 'OP_ExpectClientAsCharacterReplyMs', 22, 1), + (12008, 58542, 58588, 'OP_ExpectClientAsCharacterRequest', 32, 1), + (12009, 58542, 58588, 'OP_ExpPurchWindow', 722, 1), + (12010, 58542, 58588, 'OP_FellowshipExpMsg', 122, 1), + (12011, 58542, 58588, 'OP_FlightPathsMsg', 413, 1), + (12012, 58542, 58588, 'OP_GameWorldTimeMsg', 43, 1), + (12013, 58542, 58588, 'OP_PaperdollImage', 575, 1), + (12014, 58542, 58588, 'OP_GetAuctionAssetIDMsg', 441, 1), + (12015, 58542, 58588, 'OP_GetAuctionAssetIDReplyMsg', 442, 1), + (12016, 58542, 58588, 'OP_GetAvatarAccessRequestForCSToo', 393, 1), + (12017, 58542, 58588, 'OP_GetCharacterSerializedReplyMsg', 424, 1), + (12018, 58542, 58588, 'OP_GetCharacterSerializedRequestM', 423, 1), + (12019, 58542, 58588, 'OP_GroupCreatedMsg', 88, 1), + (12020, 58542, 58588, 'OP_GroupDestroyedMsg', 89, 1), + (12021, 58542, 58588, 'OP_GroupLeaderChangedMsg', 93, 1), + (12022, 58542, 58588, 'OP_GroupMemberAddedMsg', 90, 1), + (12023, 58542, 58588, 'OP_GroupMemberRemovedMsg', 91, 1), + (12024, 58542, 58588, 'OP_GroupOptionsMsg', 199, 1), + (12025, 58542, 58588, 'OP_GroupRemovedFromGroupMsg', 92, 1), + (12026, 58542, 58588, 'OP_GroupResendOOZDataMsg', 94, 1), + (12027, 58542, 58588, 'OP_GroupSettingsChangedMsg', 95, 1), + (12028, 58542, 58588, 'OP_GuildBankActionMsg', 274, 1), + (12029, 58542, 58588, 'OP_GuildBankActionResponseMsg', 275, 1), + (12030, 58542, 58588, 'OP_GuildBankEventListMsg', 279, 1), + (12031, 58542, 58588, 'OP_GuildBankItemDetailsRequestMsg', 276, 1), + (12032, 58542, 58588, 'OP_GuildBankItemDetailsResponseMs', 277, 1), + (12033, 58542, 58588, 'OP_GuildBankUpdateMsg', 278, 1), + (12034, 58542, 58588, 'OP_GuildEventActionMsg', 269, 1), + (12035, 58542, 58588, 'OP_GuildEventAddMsg', 268, 1), + (12036, 58542, 58588, 'OP_GuildEventDetailsMsg', 272, 1), + (12037, 58542, 58588, 'OP_GuildEventListMsg', 270, 1), + (12038, 58542, 58588, 'OP_GuildEventMsg', 267, 1), + (12039, 58542, 58588, 'OP_GuildMembershipResponseMsg', 357, 1), + (12040, 58542, 58588, 'OP_GuildRecruiting', 702, 1), + (12041, 58542, 58588, 'OP_GuildRecruitingDetails', 703, 1), + (12042, 58542, 58588, 'OP_GuildRecruitingImage', 704, 1), + (12043, 58542, 58588, 'OP_GuildRecruitingMemberInfo', 701, 1), + (12044, 58542, 58588, 'OP_GuildsayMsg', 121, 1), + (12045, 58542, 58588, 'OP_GuildStatusUpdate', 695, 1), + (12046, 58542, 58588, 'OP_GuildUpdateMsg', 124, 1), + (12047, 58542, 58588, 'OP_HeritageMsg', 10000, 1), + (12048, 58542, 58588, 'OP_HideIllusionsMsg', 194, 1), + (12049, 58542, 58588, 'OP_HouseAccessRemoveMsg', 158, 1), + (12050, 58542, 58588, 'OP_HouseAccessSetMsg', 157, 1), + (12051, 58542, 58588, 'OP_HouseCustomizationScreenMsg', 166, 1), + (12052, 58542, 58588, 'OP_HouseDefaultAccessSetMsg', 156, 1), + (12053, 58542, 58588, 'OP_HouseDeletedRemotelyMsg', 142, 1), + (12054, 58542, 58588, 'OP_HouseItemsList', 484, 1), + (12055, 58542, 58588, 'OP_HousingDataChangedMsg', 427, 1), + (12056, 58542, 58588, 'OP_HousingRestoreMsg', 428, 1), + (12057, 58542, 58588, 'OP_InspectPlayerMsg', 363, 1), + (12058, 58542, 58588, 'OP_InspectPlayerRequestMsg', 450, 1), + (12059, 58542, 58588, 'OP_InviteRequestMsg', 447, 1), + (12060, 58542, 58588, 'OP_InviteResponseMsg', 448, 1), + (12061, 58542, 58588, 'OP_InviteTargetResponseMsg', 449, 1), + (12062, 58542, 58588, 'OP_JoinGuildNotifyMsg', 359, 1), + (12063, 58542, 58588, 'OP_JournalQuestStoryline', 744, 1), + (12064, 58542, 58588, 'OP_KeymapDataMsg', 177, 1), + (12065, 58542, 58588, 'OP_KeymapLoadMsg', 175, 1), + (12066, 58542, 58588, 'OP_KeymapNoneMsg', 176, 1), + (12067, 58542, 58588, 'OP_KeymapSaveMsg', 178, 1), + (12068, 58542, 58588, 'OP_KnowledgebaseRequestMsg', 227, 1), + (12069, 58542, 58588, 'OP_KnowledgebaseResponseMsg', 228, 1), + (12070, 58542, 58588, 'OP_KnowledgeWindowSlotMappingMsg', 369, 1), + (12071, 58542, 58588, 'OP_KnownLanguagesMsg', 238, 1), + (12072, 58542, 58588, 'OP_Launchpad', 573, 1), + (12073, 58542, 58588, 'OP_LeaveGuildNotifyMsg', 358, 1), + (12074, 58542, 58588, 'OP_LevelChangedMsg', 261, 1), + (12075, 58542, 58588, 'OP_LFGGroupSearch', 504, 1), + (12076, 58542, 58588, 'OP_LFGUpdateMsg', 518, 1), + (12077, 58542, 58588, 'OP_LikeOption', 136, 1), + (12078, 58542, 58588, 'OP_LoadCalendarEvents', 576, 1), + (12079, 58542, 58588, 'OP_LoadWelcomeWindow', 560, 1), + (12080, 58542, 58588, 'OP_LoginByNumRequestMsg', 1, 1), + (12081, 58542, 58588, 'OP_LoginReplyMsg', 4, 1), + (12082, 58542, 58588, 'OP_LoginRequestMsg', 0, 1), + (12083, 58542, 58588, 'OP_LootItemsRequestMsg', 185, 1), + (12084, 58542, 58588, 'OP_Lottery', 700, 1), + (12085, 58542, 58588, 'OP_LSCheckAcctLockMsg', 204, 1), + (12086, 58542, 58588, 'OP_LsClientAlertlogReplyMsg', 242, 1), + (12087, 58542, 58588, 'OP_LsClientBaselogReplyMsg', 240, 1), + (12088, 58542, 58588, 'OP_LsClientCrashlogReplyMsg', 241, 1), + (12089, 58542, 58588, 'OP_LsClientVerifylogReplyMsg', 243, 1), + (12090, 58542, 58588, 'OP_LsRequestClientCrashLogMsg', 239, 1), + (12091, 58542, 58588, 'OP_LSServerLockMsg', 365, 1), + (12092, 58542, 58588, 'OP_MacroInitMsg', 258, 1), + (12093, 58542, 58588, 'OP_MacroUpdateMsg', 259, 1), + (12094, 58542, 58588, 'OP_MailCommitSendMessageMsg', 344, 1), + (12095, 58542, 58588, 'OP_MailDeleteMessageMsg', 340, 1), + (12096, 58542, 58588, 'OP_MailEventNotificationMsg', 411, 1), + (12097, 58542, 58588, 'OP_MailGetHeadersReplyMsg', 341, 1), + (12098, 58542, 58588, 'OP_MailGetMessageMsg', 338, 1), + (12099, 58542, 58588, 'OP_MailGetMessageReplyMsg', 342, 1), + (12100, 58542, 58588, 'OP_MailRemoveAttachFromMailMsg', 346, 1), + (12101, 58542, 58588, 'OP_MailSendMessageMsg', 339, 1), + (12102, 58542, 58588, 'OP_MailSendMessageReplyMsg', 343, 1), + (12103, 58542, 58588, 'OP_MailSendSystemMessageMsg', 345, 1), + (12104, 58542, 58588, 'OP_MakeGroupLeaderMsg', 87, 1), + (12105, 58542, 58588, 'OP_MapFogDataInitMsg', 395, 1), + (12106, 58542, 58588, 'OP_MapFogDataUpdateMsg', 396, 1), + (12107, 58542, 58588, 'OP_MapRequest', 521, 1), + (12108, 58542, 58588, 'OP_MarketAddFundsReply', 529, 1), + (12109, 58542, 58588, 'OP_MarketAddFundsRequest', 528, 1), + (12110, 58542, 58588, 'OP_MarketFundsUpdate', 526, 1), + (12111, 58542, 58588, 'OP_MarketPlaceItems', 537, 1), + (12112, 58542, 58588, 'OP_MarketPlacePrices', 532, 1), + (12113, 58542, 58588, 'OP_MarketPurchase', 531, 1), + (12114, 58542, 58588, 'OP_MentorPopup', 558, 1), + (12115, 58542, 58588, 'OP_MercHireWindow', 747, 1), + (12116, 58542, 58588, 'OP_MercUnknown', 748, 1), + (12117, 58542, 58588, 'OP_MigrateBoatTransportMsg', 252, 1), + (12118, 58542, 58588, 'OP_MigrateBoatTransportReplyMsg', 253, 1), + (12119, 58542, 58588, 'OP_MigrateClientToZoneReplyMsg', 82, 1), + (12120, 58542, 58588, 'OP_MigrateClientToZoneRequestMsg', 81, 1), + (12121, 58542, 58588, 'OP_ModifyGuildMsg', 266, 1), + (12122, 58542, 58588, 'OP_MonitorCharacterListMsg', 56, 1), + (12123, 58542, 58588, 'OP_MonitorCharacterListRequestMsg', 57, 1), + (12124, 58542, 58588, 'OP_MonitorReplyMsg', 55, 1), + (12125, 58542, 58588, 'OP_MOTDMsg', 44, 1), + (12126, 58542, 58588, 'OP_MoveableObjectPlacementCriteri', 160, 1), + (12127, 58542, 58588, 'OP_MoveLogUpdateMsg', 400, 1), + (12128, 58542, 58588, 'OP_NotifyApprenticeStoppedMentori', 408, 1), + (12129, 58542, 58588, 'OP_OfferQuestMsg', 401, 1), + (12130, 58542, 58588, 'OP_OnscreenMsgMsg', 264, 1), + (12131, 58542, 58588, 'OP_OpenCharCust', 561, 1), + (12132, 58542, 58588, 'OP_OutOfZoneMemberDataMsg', 96, 1), + (12133, 58542, 58588, 'OP_PayHouseUpkeepMsg', 159, 1), + (12134, 58542, 58588, 'OP_PerformCameraShakeMsg', 214, 1), + (12135, 58542, 58588, 'OP_PerformPlayerKnockbackMsg', 213, 1), + (12136, 58542, 58588, 'OP_PetOptions', 201, 1), + (12137, 58542, 58588, 'OP_PetOptionsResponse', 579, 1), + (12138, 58542, 58588, 'OP_PlayCharacterReplyMsg', 19, 1), + (12139, 58542, 58588, 'OP_PlayCharacterRequestMsg', 18, 1), + (12140, 58542, 58588, 'OP_PlayerHouseAccessUpdateMsg', 147, 1), + (12141, 58542, 58588, 'OP_PlayerHouseBaseScreenMsg', 145, 1), + (12142, 58542, 58588, 'OP_PlayerHouseCloseUIMsg', 149, 1), + (12143, 58542, 58588, 'OP_PlayerHouseDisplayStatusMsg', 148, 1), + (12144, 58542, 58588, 'OP_PlayerHousePurchaseScreenMsg', 146, 1), + (12145, 58542, 58588, 'OP_PlayerMadeInstances', 140, 1), + (12146, 58542, 58588, 'OP_PlayerMadeInstancesScreen', 139, 1), + (12147, 58542, 58588, 'OP_PlayerPollAnswer', 557, 1), + (12148, 58542, 58588, 'OP_PlayerPollPopup', 556, 1), + (12149, 58542, 58588, 'OP_PlayLon', 511, 1), + (12150, 58542, 58588, 'OP_PointOfInterest', 726, 1), + (12151, 58542, 58588, 'OP_PointOfInterest2', 727, 1), + (12152, 58542, 58588, 'OP_PopulateSkillMapsMsg', 215, 1), + (12153, 58542, 58588, 'OP_PositionBoatTransportMsg', 251, 1), + (12154, 58542, 58588, 'OP_PositionMoveableObject', 162, 1), + (12155, 58542, 58588, 'OP_PostPossessionMsg', 454, 1), + (12156, 58542, 58588, 'OP_PredictionUpdateMsg', 37, 1), + (12157, 58542, 58588, 'OP_PrePossessionMsg', 453, 1), + (12158, 58542, 58588, 'OP_PromoFlagsDetailsMsg', 374, 1), + (12159, 58542, 58588, 'OP_PublishHouse', 138, 1), + (12160, 58542, 58588, 'OP_PurchaseConsignmentLoreCheckRe', 407, 1), + (12161, 58542, 58588, 'OP_PurchaseConsignmentRequestMsg', 128, 1), + (12162, 58542, 58588, 'OP_QueAllBgSolo', 564, 1), + (12163, 58542, 58588, 'OP_QuestionnaireMsg', 260, 1), + (12164, 58542, 58588, 'OP_QuestJournalInspectMsg', 114, 1), + (12165, 58542, 58588, 'OP_QuestJournalOpenMsg', 113, 1), + (12166, 58542, 58588, 'OP_QuestJournalSetVisibleMsg', 115, 1), + (12167, 58542, 58588, 'OP_QuestJournalWaypointMsg', 116, 1), + (12168, 58542, 58588, 'OP_QuestReward', 320, 1), + (12169, 58542, 58588, 'OP_QuickbarInitMsg', 256, 1), + (12170, 58542, 58588, 'OP_QuickbarUpdateMsg', 257, 1), + (12171, 58542, 58588, 'OP_RaceRestrictionMsg', 439, 1), + (12172, 58542, 58588, 'OP_ReadBookPageMsg', 196, 1), + (12173, 58542, 58588, 'OP_ReadyForTakeOffMsg', 192, 1), + (12174, 58542, 58588, 'OP_ReadyToZoneMsg', 84, 1), + (12175, 58542, 58588, 'OP_RecipeBook', 538, 1), + (12176, 58542, 58588, 'OP_RecipeDetailsMsg', 72, 1), + (12177, 58542, 58588, 'OP_RecipeList', 738, 1), + (12178, 58542, 58588, 'OP_RecipeListUnknown', 591, 1), + (12179, 58542, 58588, 'OP_RelinquishHouseMsg', 153, 1), + (12180, 58542, 58588, 'OP_ReloadLocalizedTxtMsg', 355, 1), + (12181, 58542, 58588, 'OP_RemoteCmdMsg', 42, 1), + (12182, 58542, 58588, 'OP_RemoveClientFromGroupMsg', 85, 1), + (12183, 58542, 58588, 'OP_RemoveConcentrationMsg', 112, 1), + (12184, 58542, 58588, 'OP_RemoveGroupFromGroupMsg', 86, 1), + (12185, 58542, 58588, 'OP_RemoveSpellEffectMsg', 111, 1), + (12186, 58542, 58588, 'OP_RenameGuildMsg', 282, 1), + (12187, 58542, 58588, 'OP_ReplaceableSubMeshesMsg', 165, 1), + (12188, 58542, 58588, 'OP_ReportMsg', 380, 1), + (12189, 58542, 58588, 'OP_RequestCampMsg', 50, 1), + (12190, 58542, 58588, 'OP_RequestGuildBankEventDetailsMs', 280, 1), + (12191, 58542, 58588, 'OP_RequestGuildEventDetailsMsg', 271, 1), + (12192, 58542, 58588, 'OP_RequestGuildInfoMsg', 273, 1), + (12193, 58542, 58588, 'OP_RequestGuildMembershipMsg', 356, 1), + (12194, 58542, 58588, 'OP_RequestHelpRepathMsg', 206, 1), + (12195, 58542, 58588, 'OP_RequestRecipeDetailsMsg', 71, 1), + (12196, 58542, 58588, 'OP_RequestTargetLocMsg', 207, 1), + (12197, 58542, 58588, 'OP_Research', 739, 1), + (12198, 58542, 58588, 'OP_ResendWorldChannelsMsg', 443, 1), + (12199, 58542, 58588, 'OP_ReskinCharacterRequestMsg', 15, 1), + (12200, 58542, 58588, 'OP_RestartZoneMsg', 412, 1), + (12201, 58542, 58588, 'OP_RewardPackMsg', 281, 1), + (12202, 58542, 58588, 'OP_SatMsg', 189, 1), + (12203, 58542, 58588, 'OP_SavageBarInitMsg', 578, 1), + (12204, 58542, 58588, 'OP_SelectZoneTeleporterDestinatio', 354, 1), + (12205, 58542, 58588, 'OP_SendLatestRequestMsg', 97, 1), + (12206, 58542, 58588, 'OP_ServerPlayCharacterReplyMsg', 24, 1), + (12207, 58542, 58588, 'OP_ServerPlayCharacterRequestMsg', 23, 1), + (12208, 58542, 58588, 'OP_SetInstanceDisplayNameMsg', 440, 1), + (12209, 58542, 58588, 'OP_SetRemoteCmdsMsg', 41, 1), + (12210, 58542, 58588, 'OP_SetSocialMsg', 99, 1), + (12211, 58542, 58588, 'OP_ShaderCustomizationMsg', 164, 1), + (12212, 58542, 58588, 'OP_ShowCreateFromRecipeUIMsg', 219, 1), + (12213, 58542, 58588, 'OP_ShowIllusionsMsg', 193, 1), + (12214, 58542, 58588, 'OP_ShowItemCreationProcessUIMsg', 223, 1), + (12215, 58542, 58588, 'OP_ShowRecipeBookMsg', 226, 1), + (12216, 58542, 58588, 'OP_ShowZoneTeleporterDestinations', 353, 1), + (12217, 58542, 58588, 'OP_SitMsg', 187, 1), + (12218, 58542, 58588, 'OP_SkillInfoRequest', 514, 1), + (12219, 58542, 58588, 'OP_SkillInfoResponse', 515, 1), + (12220, 58542, 58588, 'OP_SpellGainedMsg', 262, 1), + (12221, 58542, 58588, 'OP_StandMsg', 188, 1), + (12222, 58542, 58588, 'OP_StoodMsg', 190, 1), + (12223, 58542, 58588, 'OP_StopItemCreationMsg', 222, 1), + (12224, 58542, 58588, 'OP_StoppedLootingMsg', 186, 1), + (12225, 58542, 58588, 'OP_StopTrackingMsg', 391, 1), + (12226, 58542, 58588, 'OP_SubmitCharCust', 562, 1), + (12227, 58542, 58588, 'OP_SupplyDepot', 736, 1), + (12228, 58542, 58588, 'OP_SysClient', 218, 1), + (12229, 58542, 58588, 'OP_TeleportWithinZoneMsg', 79, 1), + (12230, 58542, 58588, 'OP_TeleportWithinZoneNoReloadMsg', 80, 1), + (12231, 58542, 58588, 'OP_TintWidgetsMsg', 170, 1), + (12232, 58542, 58588, 'OP_TitleUpdateMsg', 384, 1), + (12233, 58542, 58588, 'OP_TrackingUpdateMsg', 389, 1), + (12234, 58542, 58588, 'OP_TradeskillList', 705, 1), + (12235, 58542, 58588, 'OP_TraitsList', 728, 1), + (12236, 58542, 58588, 'OP_UIEvent', 527, 1), + (12237, 58542, 58588, 'OP_UIResetMsg', 174, 1), + (12238, 58542, 58588, 'OP_UISettingsResponseMsg', 173, 1), + (12239, 58542, 58588, 'OP_Unknown', 761, 1), + (12240, 58542, 58588, 'OP_UnknownNpcMsg', 373, 1), + (12241, 58542, 58588, 'OP_UpdateActivePublicZonesMsg', 372, 1), + (12242, 58542, 58588, 'OP_UpdateCharacterSheetMsg', 63, 1), + (12243, 58542, 58588, 'OP_UpdateClientPredFlagsMsg', 245, 1), + (12244, 58542, 58588, 'OP_UpdateDebugRadiiMsg', 379, 1), + (12245, 58542, 58588, 'OP_UpdateGroupMemberDataMsg', 388, 1), + (12246, 58542, 58588, 'OP_UpdateHouseAccessDataMsg', 144, 1), + (12247, 58542, 58588, 'OP_UpdateHouseDataMsg', 143, 1), + (12248, 58542, 58588, 'OP_UpdateInventoryMsg', 68, 1), + (12249, 58542, 58588, 'OP_UpdateItemCreationProcessUIMsg', 224, 1), + (12250, 58542, 58588, 'OP_UpdateMotdMsg', 208, 1), + (12251, 58542, 58588, 'OP_UpdateOpportunityMsg', 75, 1), + (12252, 58542, 58588, 'OP_UpdatePositionMsg', 39, 1), + (12253, 58542, 58588, 'OP_UpdateRaidMsg', 381, 1), + (12254, 58542, 58588, 'OP_UpdateRecipeBookMsg', 70, 1), + (12255, 58542, 58588, 'OP_UpdateSkillBookMsg', 73, 1), + (12256, 58542, 58588, 'OP_UpdateSkillsMsg', 74, 1), + (12257, 58542, 58588, 'OP_UpdateSpellBookMsg', 66, 1), + (12258, 58542, 58588, 'OP_UpdateTargetLocMsg', 62, 1), + (12259, 58542, 58588, 'OP_UpdateTargetMsg', 61, 1), + (12260, 58542, 58588, 'OP_UpdateTitleCmd', 494, 1), + (12261, 58542, 58588, 'OP_UseAdornment', 716, 1), + (12262, 58542, 58588, 'OP_VideoUploaded', 577, 1), + (12263, 58542, 58588, 'OP_VoiceChatChannel', 520, 1), + (12264, 58542, 58588, 'OP_VoiceChatServer', 732, 1), + (12265, 58542, 58588, 'OP_WaypointReplyMsg', 349, 1), + (12266, 58542, 58588, 'OP_WaypointRequestMsg', 348, 1), + (12267, 58542, 58588, 'OP_WaypointSelectMsg', 350, 1), + (12268, 58542, 58588, 'OP_WaypointUpdateMsg', 351, 1), + (12269, 58542, 58588, 'OP_Weakness', 581, 1), + (12270, 58542, 58588, 'OP_WhoQueryReplyMsg', 54, 1), + (12271, 58542, 58588, 'OP_WhoQueryRequestMsg', 53, 1), + (12272, 58542, 58588, 'OP_WorldDataChangeMsg', 410, 1), + (12273, 58542, 58588, 'OP_WorldDataUpdateMsg', 237, 1), + (12274, 58542, 58588, 'OP_WorldListMsg', 8, 1), + (12275, 58542, 58588, 'OP_WorldPingMsg', 399, 1), + (12276, 58542, 58588, 'OP_WorldShutdownUpdateMsg', 403, 1), + (12277, 58542, 58588, 'OP_WorldStatusChangeMsg', 6, 1), + (12278, 58542, 58588, 'OP_WorldTravelAvail', 570, 1), + (12279, 58542, 58588, 'OP_WSAcctLockStatusMsg', 205, 1), + (12280, 58542, 58588, 'OP_WSCreateCharacterReplyMsg', 14, 1), + (12281, 58542, 58588, 'OP_WSCreateCharacterRequestMsg', 13, 1), + (12282, 58542, 58588, 'OP_WSLoginRequestMsg', 2, 1), + (12283, 58542, 58588, 'OP_WSServerHideMsg', 366, 1), + (12284, 58542, 58588, 'OP_WSServerLockMsg', 364, 1), + (12285, 58542, 58588, 'OP_WSStatusReplyMsg', 5, 1), + (12286, 58542, 58588, 'OP_ZoneBgInstanceList', 566, 1), + (12287, 58542, 58588, 'OP_ZoneInfoMsg', 33, 1), + (12288, 58542, 58588, 'OP_ZoneInstanceCreateReplyMsg', 30, 1), + (12289, 58542, 58588, 'OP_ZoneInstanceDestroyedMsg', 31, 1), + (12290, 58542, 58588, 'OP_ZoneMOTDMsg', 45, 1), + (12291, 58542, 58588, 'OP_ZonesStatusMsg', 103, 1), + (12292, 58542, 58588, 'OP_ZonesStatusRequestMsg', 102, 1), + (12293, 58542, 58588, 'OP_ZoneToFriendReplyMsg', 284, 1), + (12294, 58542, 58588, 'OP_ZoneToFriendRequestMsg', 283, 1), + (12761, 58542, 58588, 'OP_SOEAllAccess', 604, 1), + (13188, 58604, 58604, 'OP_AchievementUpdateMsg', 745, 1), + (13189, 58604, 58604, 'OP_AddSocialStructureStandingMsg', 249, 1), + (13190, 58604, 58604, 'OP_AdvancementRequestMsg', 394, 1), + (13191, 58604, 58604, 'OP_AdventureList', 488, 1), + (13192, 58604, 58604, 'OP_AFKUpdateMsg', 370, 1), + (13193, 58604, 58604, 'OP_AfterInvSpellUpdate', 69, 1), + (13194, 58604, 58604, 'OP_AllCharactersDescReplyMsg', 10, 1), + (13195, 58604, 58604, 'OP_AllCharactersDescRequestMsg', 9, 1), + (13196, 58604, 58604, 'OP_AllWSDescRequestMsg', 7, 1), + (13197, 58604, 58604, 'OP_AnonUpdateMsg', 371, 1), + (13198, 58604, 58604, 'OP_ArenaCreate', 456, 1), + (13199, 58604, 58604, 'OP_ArenaGameTypesMsg', 445, 1), + (13200, 58604, 58604, 'OP_ArenaList', 457, 1), + (13201, 58604, 58604, 'OP_ArenaWindow', 465, 1), + (13202, 58604, 58604, 'OP_AttackAllowed', 500, 1), + (13203, 58604, 58604, 'OP_AttackNotAllowed', 501, 1), + (13204, 58604, 58604, 'OP_AuctionAbortMsg', 436, 1), + (13205, 58604, 58604, 'OP_AuctionCharacter', 433, 1), + (13206, 58604, 58604, 'OP_AuctionCharacterReply', 434, 1), + (13207, 58604, 58604, 'OP_AuctionCoin', 431, 1), + (13208, 58604, 58604, 'OP_AuctionCoinReply', 432, 1), + (13209, 58604, 58604, 'OP_AuctionCommitMsg', 435, 1), + (13210, 58604, 58604, 'OP_AuctionItem', 429, 1), + (13211, 58604, 58604, 'OP_AuctionItemReply', 430, 1), + (13212, 58604, 58604, 'OP_AuditAuctionEventMsg', 446, 1), + (13213, 58604, 58604, 'OP_AvatarCreatedMsg', 46, 1), + (13214, 58604, 58604, 'OP_AvatarDestroyedMsg', 47, 1), + (13215, 58604, 58604, 'OP_AvatarUpdateMsg', 360, 1), + (13216, 58604, 58604, 'OP_BadLanguageFilter', 519, 1), + (13217, 58604, 58604, 'OP_BagOptions', 502, 1), + (13218, 58604, 58604, 'OP_BeginItemCreationMsg', 221, 1), + (13219, 58604, 58604, 'OP_BeginTrackingMsg', 390, 1), + (13220, 58604, 58604, 'OP_BioUpdateMsg', 362, 1), + (13221, 58604, 58604, 'OP_BrokerAddBag', 292, 1), + (13222, 58604, 58604, 'OP_BrokerRemoveBag', 293, 1), + (13223, 58604, 58604, 'OP_BrokerSellList', 688, 1), + (13224, 58604, 58604, 'OP_BuyPlayerHouseMsg', 150, 1), + (13225, 58604, 58604, 'OP_BuyPlayerHouseTintMsg', 151, 1), + (13226, 58604, 58604, 'OP_CampAbortedMsg', 52, 1), + (13227, 58604, 58604, 'OP_CampClientMsg', 387, 1), + (13228, 58604, 58604, 'OP_CampStartedMsg', 51, 1), + (13229, 58604, 58604, 'OP_CancelCreateFromRecipeMsg', 220, 1), + (13230, 58604, 58604, 'OP_CancelledFeignMsg', 216, 1), + (13231, 58604, 58604, 'OP_CancelMoveObjectModeMsg', 163, 1), + (13232, 58604, 58604, 'OP_CancelSpellCast', 489, 1), + (13233, 58604, 58604, 'OP_ChangeServerControlFlagMsg', 246, 1), + (13234, 58604, 58604, 'OP_ChangeZoneMsg', 77, 1), + (13235, 58604, 58604, 'OP_CharacterAchievements', 744, 1), + (13236, 58604, 58604, 'OP_CharacterCreatedDungeons', 551, 1), + (13237, 58604, 58604, 'OP_CharacterCurrency', 743, 1), + (13238, 58604, 58604, 'OP_CharacterHousingList', 507, 1), + (13239, 58604, 58604, 'OP_CharacterLinkdeadMsg', 414, 1), + (13240, 58604, 58604, 'OP_CharacterMerc', 65, 1), + (13241, 58604, 58604, 'OP_CharacterMounts', 584, 1), + (13242, 58604, 58604, 'OP_CharacterPet', 64, 1), + (13243, 58604, 58604, 'OP_CharNameChangedMsg', 352, 1), + (13244, 58604, 58604, 'OP_CharRenamed', 709, 1), + (13245, 58604, 58604, 'OP_CharTransferCommitReplyMsg', 422, 1), + (13246, 58604, 58604, 'OP_CharTransferCommitRequestMsg', 420, 1), + (13247, 58604, 58604, 'OP_CharTransferReplyMsg', 418, 1), + (13248, 58604, 58604, 'OP_CharTransferRequestMsg', 417, 1), + (13249, 58604, 58604, 'OP_CharTransferRollbackReplyMsg', 421, 1), + (13250, 58604, 58604, 'OP_CharTransferRollbackRequestMsg', 419, 1), + (13251, 58604, 58604, 'OP_CharTransferStartReplyMsg', 416, 1), + (13252, 58604, 58604, 'OP_CharTransferStartRequestMsg', 415, 1), + (13253, 58604, 58604, 'OP_CharTransferValidateReplyMsg', 438, 1), + (13254, 58604, 58604, 'OP_CharTransferValidateRequestMsg', 437, 1), + (13255, 58604, 58604, 'OP_ChatCreateChannelMsg', 285, 1), + (13256, 58604, 58604, 'OP_ChatFiltersMsg', 335, 1), + (13257, 58604, 58604, 'OP_ChatJoinChannelMsg', 286, 1), + (13258, 58604, 58604, 'OP_ChatLeaveChannelMsg', 288, 1), + (13259, 58604, 58604, 'OP_ChatRelationshipUpdateMsg', 184, 1), + (13260, 58604, 58604, 'OP_ChatSendFriendsMsg', 295, 1), + (13261, 58604, 58604, 'OP_ChatSendIgnoresMsg', 296, 1), + (13262, 58604, 58604, 'OP_ChatTellChannelMsg', 289, 1), + (13263, 58604, 58604, 'OP_ChatTellUserMsg', 290, 1), + (13264, 58604, 58604, 'OP_ChatToggleFriendMsg', 291, 1), + (13265, 58604, 58604, 'OP_ChatToggleIgnoreMsg', 294, 1), + (13266, 58604, 58604, 'OP_ChatWhoChannelMsg', 287, 1), + (13267, 58604, 58604, 'OP_ClearDataMsg', 98, 1), + (13268, 58604, 58604, 'OP_ClearForLandingMsg', 491, 1), + (13269, 58604, 58604, 'OP_ClearForTakeOffMsg', 191, 1), + (13270, 58604, 58604, 'OP_ClientCmdMsg', 58, 1), + (13271, 58604, 58604, 'OP_ClientFellMsg', 385, 1), + (13272, 58604, 58604, 'OP_ClientIdleBeginMsg', 405, 1), + (13273, 58604, 58604, 'OP_ClientIdleEndMsg', 406, 1), + (13274, 58604, 58604, 'OP_ClientInDeathRegionMsg', 386, 1), + (13275, 58604, 58604, 'OP_ClientTeleportRequestMsg', 78, 1), + (13276, 58604, 58604, 'OP_ClientTeleportToLocationMsg', 244, 1), + (13277, 58604, 58604, 'OP_CloseGroupInviteWindowMsg', 397, 1), + (13278, 58604, 58604, 'OP_CollectAllHouseItemsMsg', 152, 1), + (13279, 58604, 58604, 'OP_ConsignItemRequestMsg', 126, 1), + (13280, 58604, 58604, 'OP_ConsignItemResponseMsg', 127, 1), + (13281, 58604, 58604, 'OP_ConsignmentCloseStoreMsg', 125, 1), + (13282, 58604, 58604, 'OP_ConsignRemoveItemsMsg', 378, 1), + (13283, 58604, 58604, 'OP_ConsignViewCreateMsg', 375, 1), + (13284, 58604, 58604, 'OP_ConsignViewGetPageMsg', 376, 1), + (13285, 58604, 58604, 'OP_ConsignViewReleaseMsg', 377, 1), + (13286, 58604, 58604, 'OP_ConsignViewSortMsg', 383, 1), + (13287, 58604, 58604, 'OP_CorruptedClientMsg', 409, 1), + (13288, 58604, 58604, 'OP_CreateBoatTransportsMsg', 250, 1), + (13289, 58604, 58604, 'OP_CreateCharacterDungeon', 547, 1), + (13290, 58604, 58604, 'OP_CreateCharacterReplyMsg', 12, 1), + (13291, 58604, 58604, 'OP_CreateCharacterRequestMsg', 11, 1), + (13292, 58604, 58604, 'OP_CreateCharFromCBBReplyMsg', 426, 1), + (13293, 58604, 58604, 'OP_CreateCharFromCBBRequestMsg', 425, 1), + (13294, 58604, 58604, 'OP_CreateGuildReplyMsg', 120, 1), + (13295, 58604, 58604, 'OP_CreateGuildRequestMsg', 119, 1), + (13296, 58604, 58604, 'OP_CreateZoneInstanceMsg', 29, 1), + (13297, 58604, 58604, 'OP_CsCategoryRequestMsg', 367, 1), + (13298, 58604, 58604, 'OP_CsCategoryResponseMsg', 368, 1), + (13299, 58604, 58604, 'OP_CSTicketAddCommentMsg', 234, 1), + (13300, 58604, 58604, 'OP_CSTicketChangeNotificationMsg', 236, 1), + (13301, 58604, 58604, 'OP_CSTicketCommentRequestMsg', 231, 1), + (13302, 58604, 58604, 'OP_CSTicketCommentResponseMsg', 232, 1), + (13303, 58604, 58604, 'OP_CSTicketCreateMsg', 233, 1), + (13304, 58604, 58604, 'OP_CSTicketDeleteMsg', 235, 1), + (13305, 58604, 58604, 'OP_CSTicketHeaderRequestMsg', 229, 1), + (13306, 58604, 58604, 'OP_CSTicketInfoMsg', 230, 1), + (13307, 58604, 58604, 'OP_CSToolAccessResponseMsg', 388, 1), + (13308, 58604, 58604, 'OP_CSToolsRequestMsg', 247, 1), + (13309, 58604, 58604, 'OP_CSToolsResponseMsg', 248, 1), + (13310, 58604, 58604, 'OP_CurrentPet', 485, 1), + (13311, 58604, 58604, 'OP_CustomizationPurchaseRequestMs', 167, 1), + (13312, 58604, 58604, 'OP_CustomizationReplyMsg', 169, 1), + (13313, 58604, 58604, 'OP_CustomizationSetRequestMsg', 168, 1), + (13314, 58604, 58604, 'OP_CustomizeHouseDisplay', 734, 1), + (13315, 58604, 58604, 'OP_DailyObjectives', 597, 1), + (13316, 58604, 58604, 'OP_DefaultGroupOptionsMsg', 198, 1), + (13317, 58604, 58604, 'OP_DefaultGroupOptionsRequestMsg', 197, 1), + (13318, 58604, 58604, 'OP_DeleteCharacterReplyMsg', 17, 1), + (13319, 58604, 58604, 'OP_DeleteCharacterRequestMsg', 16, 1), + (13320, 58604, 58604, 'OP_DeleteGuildMsg', 123, 1), + (13321, 58604, 58604, 'OP_DestUpdateReq', 210, 1), + (13322, 58604, 58604, 'OP_DialogCloseMsg', 110, 1), + (13323, 58604, 58604, 'OP_DialogSelectMsg', 109, 1), + (13324, 58604, 58604, 'OP_DispatchClientCmdMsg', 60, 1), + (13325, 58604, 58604, 'OP_DispatchESMsg', 59, 1), + (13326, 58604, 58604, 'OP_DispatchMsg', 451, 1), + (13327, 58604, 58604, 'OP_DispatchSpellCmdMsg', 179, 1), + (13328, 58604, 58604, 'OP_DisplayDebugNLLPointsMsg', 254, 1), + (13329, 58604, 58604, 'OP_DisplayEventMsg', 452, 1), + (13330, 58604, 58604, 'OP_DisplayExchangeScreenMsg', 444, 1), + (13331, 58604, 58604, 'OP_DisplayGroupOptionsScreenMsg', 200, 1), + (13332, 58604, 58604, 'OP_DisplayInnVisitScreenMsg', 202, 1), + (13333, 58604, 58604, 'OP_DisplayMailScreenMsg', 404, 1), + (13334, 58604, 58604, 'OP_DisplayTSEventReactionMsg', 225, 1), + (13335, 58604, 58604, 'OP_DisplayWarningMsg', 265, 1), + (13336, 58604, 58604, 'OP_DoneLoadingEntityResourcesMsg', 36, 1), + (13337, 58604, 58604, 'OP_DoneLoadingZoneResourcesMsg', 34, 1), + (13338, 58604, 58604, 'OP_DoneSendingInitialEntitiesMsg', 35, 1), + (13339, 58604, 58604, 'OP_DressingRoom', 510, 1), + (13340, 58604, 58604, 'OP_DumpSchedulerMsg', 203, 1), + (13341, 58604, 58604, 'OP_DungeonMakerEnter', 548, 1), + (13342, 58604, 58604, 'OP_DungeonMakerItemRequest', 550, 1), + (13343, 58604, 58604, 'OP_DungeonMakerItemResponse', 582, 1), + (13344, 58604, 58604, 'OP_DungeonMakerToolboxList', 552, 1), + (13345, 58604, 58604, 'OP_DungeonMakerUnknown', 553, 1), + (13346, 58604, 58604, 'OP_DungeonMakerUnknown1', 554, 1), + (13347, 58604, 58604, 'OP_DungeonPlayAsAvatarList', 748, 1), + (13348, 58604, 58604, 'OP_DungeonPlayAsAvatarSelected', 749, 1), + (13349, 58604, 58604, 'OP_EncounterBrokenMsg', 263, 1), + (13350, 58604, 58604, 'OP_EnterHouseMsg', 154, 1), + (13351, 58604, 58604, 'OP_EnterMoveObjectModeMsg', 161, 1), + (13352, 58604, 58604, 'OP_EntityVerbsReplyMsg', 181, 1), + (13353, 58604, 58604, 'OP_EntityVerbsRequestMsg', 180, 1), + (13354, 58604, 58604, 'OP_EntityVerbsVerbMsg', 182, 1), + (13355, 58604, 58604, 'OP_EqArenaResultsCmd', 699, 1), + (13356, 58604, 58604, 'OP_EqAvailWorldChannelsCmd', 686, 1), + (13357, 58604, 58604, 'OP_EqBetaCopyRequest', 606, 1), + (13358, 58604, 58604, 'OP_EqCannedEmoteCmd', 628, 1), + (13359, 58604, 58604, 'OP_EqChatChannelUpdateCmd', 684, 1), + (13360, 58604, 58604, 'OP_EqChoiceWinCmd', 665, 1), + (13361, 58604, 58604, 'OP_EqCloseWindowCmd', 657, 1), + (13362, 58604, 58604, 'OP_EqCollectionFilterCmd', 644, 1), + (13363, 58604, 58604, 'OP_EqCollectionItemCmd', 645, 1), + (13364, 58604, 58604, 'OP_EqCollectionUpdateCmd', 643, 1), + (13365, 58604, 58604, 'OP_EqConsignmentItemsCmd', 689, 1), + (13366, 58604, 58604, 'OP_EqCreateGhostCmd', 610, 1), + (13367, 58604, 58604, 'OP_EqCreateListBoxCmd', 625, 1), + (13368, 58604, 58604, 'OP_EqCreateSignWidgetCmd', 612, 1), + (13369, 58604, 58604, 'OP_EqCreateWidgetCmd', 611, 1), + (13370, 58604, 58604, 'OP_EqDebugPVDCmd', 678, 1), + (13371, 58604, 58604, 'OP_EqDestroyGhostCmd', 613, 1), + (13372, 58604, 58604, 'OP_EqDialogCloseCmd', 641, 1), + (13373, 58604, 58604, 'OP_EqDialogOpenCmd', 640, 1), + (13374, 58604, 58604, 'OP_EqDisplaySpellFailCmd', 661, 1), + (13375, 58604, 58604, 'OP_EqDisplayTextCmd', 609, 1), + (13376, 58604, 58604, 'OP_EqDrawablePathGraphCmd', 639, 1), + (13377, 58604, 58604, 'OP_EqEnableGameEventCmd', 671, 1), + (13378, 58604, 58604, 'OP_EqEnableWindowCmd', 673, 1), + (13379, 58604, 58604, 'OP_EqExamineInfoCmd', 656, 1), + (13380, 58604, 58604, 'OP_EqFactionUpdateCmd', 642, 1), + (13381, 58604, 58604, 'OP_EqFlashWindowCmd', 674, 1), + (13382, 58604, 58604, 'OP_EqGetProbsCmd', 682, 1), + (13383, 58604, 58604, 'OP_EqGroupMemberRemovedCmd', 635, 1), + (13384, 58604, 58604, 'OP_EqGuildBankEventActionCmd', 700, 1), + (13385, 58604, 58604, 'OP_EqGuildBankExamineInfoCmd', 701, 1), + (13386, 58604, 58604, 'OP_EqHearChainEffectCmd', 636, 1), + (13387, 58604, 58604, 'OP_EqHearChatCmd', 608, 1), + (13388, 58604, 58604, 'OP_EqHearCombatCmd', 617, 1), + (13389, 58604, 58604, 'OP_EqHearConsiderCmd', 623, 1), + (13390, 58604, 58604, 'OP_EqHearDeathCmd', 634, 1), + (13391, 58604, 58604, 'OP_EQHearDispellCmd', 746, 1), + (13392, 58604, 58604, 'OP_EqHearDrowningCmd', 633, 1), + (13393, 58604, 58604, 'OP_EqHearHealCmd', 683, 1), + (13394, 58604, 58604, 'OP_EqHearPlayFlavorCmd', 676, 1), + (13395, 58604, 58604, 'OP_EQHearProcCmd', 619, 1), + (13396, 58604, 58604, 'OP_EQHearResEffectCmd', 620, 1), + (13397, 58604, 58604, 'OP_EqHearSpellCastCmd', 618, 1), + (13398, 58604, 58604, 'OP_EqHearSpellFizzleCmd', 622, 1), + (13399, 58604, 58604, 'OP_EqHearSpellInterruptCmd', 621, 1), + (13400, 58604, 58604, 'OP_EqHearSpellNoLandCmd', 702, 1), + (13401, 58604, 58604, 'OP_EQHearThreatCmd', 740, 1), + (13402, 58604, 58604, 'OP_EqHelpPathClearCmd', 654, 1), + (13403, 58604, 58604, 'OP_EqHelpPathCmd', 653, 1), + (13404, 58604, 58604, 'OP_EqInspectPCResultsCmd', 638, 1), + (13405, 58604, 58604, 'OP_EqInstructionWindowCloseCmd', 668, 1), + (13406, 58604, 58604, 'OP_EqInstructionWindowCmd', 667, 1), + (13407, 58604, 58604, 'OP_EqInstructionWindowGoalCmd', 669, 1), + (13408, 58604, 58604, 'OP_EqInstructionWindowTaskCmd', 670, 1), + (13409, 58604, 58604, 'OP_EqJunctionListCmd', 659, 1), + (13410, 58604, 58604, 'OP_EqMapExplorationCmd', 692, 1), + (13411, 58604, 58604, 'OP_EqMentoring', 647, 1), + (13412, 58604, 58604, 'OP_EqPlaySound3DCmd', 631, 1), + (13413, 58604, 58604, 'OP_EqPlaySoundCmd', 630, 1), + (13414, 58604, 58604, 'OP_EqPlayVoiceCmd', 632, 1), + (13415, 58604, 58604, 'OP_EqQuestGroupCmd', 649, 1), + (13416, 58604, 58604, 'OP_EqQuestionnaireCmd', 680, 1), + (13417, 58604, 58604, 'OP_EqQuestJournalReplyCmd', 648, 1), + (13418, 58604, 58604, 'OP_EqQuestJournalUpdateCmd', 646, 1), + (13419, 58604, 58604, 'OP_EqReceiveOfferCmd', 637, 1), + (13420, 58604, 58604, 'OP_EqResurrectedCmd', 664, 1), + (13421, 58604, 58604, 'OP_EqSetControlGhostCmd', 615, 1), + (13422, 58604, 58604, 'OP_EqSetDebugPathPointsCmd', 626, 1), + (13423, 58604, 58604, 'OP_EqSetDefaultVerbCmd', 666, 1), + (13424, 58604, 58604, 'OP_EqSetPOVGhostCmd', 616, 1), + (13425, 58604, 58604, 'OP_EqShowBookCmd', 679, 1), + (13426, 58604, 58604, 'OP_EqShowDeathWindowCmd', 660, 1), + (13427, 58604, 58604, 'OP_EqShowWindowCmd', 672, 1), + (13428, 58604, 58604, 'OP_EqSpellCastEndCmd', 663, 1), + (13429, 58604, 58604, 'OP_EqSpellCastStartCmd', 662, 1), + (13430, 58604, 58604, 'OP_EqSpellMoveToRangeAndRetryCmd', 694, 1), + (13431, 58604, 58604, 'OP_EqStartBrokerCmd', 691, 1), + (13432, 58604, 58604, 'OP_EqStateCmd', 629, 1), + (13433, 58604, 58604, 'OP_EqStoreLogCmd', 693, 1), + (13434, 58604, 58604, 'OP_EqUpdateBankCmd', 655, 1), + (13435, 58604, 58604, 'OP_EqUpdateGhostCmd', 614, 1), + (13436, 58604, 58604, 'OP_EqUpdateLootCmd', 658, 1), + (13437, 58604, 58604, 'OP_EqUpdateMerchantCmd', 650, 1), + (13438, 58604, 58604, 'OP_EqUpdatePlayerMailCmd', 695, 1), + (13439, 58604, 58604, 'OP_EqUpdatePlayerTradeCmd', 652, 1), + (13440, 58604, 58604, 'OP_EqUpdateSignWidgetCmd', 677, 1), + (13441, 58604, 58604, 'OP_EqUpdateStoreCmd', 651, 1), + (13442, 58604, 58604, 'OP_EqUpdateSubClassesCmd', 624, 1), + (13443, 58604, 58604, 'OP_EqUpdateTargetCmd', 687, 1), + (13444, 58604, 58604, 'OP_EqWhoChannelQueryReplyCmd', 685, 1), + (13445, 58604, 58604, 'OP_ESInitMsg', 25, 1), + (13446, 58604, 58604, 'OP_ESLoginRequestMsg', 3, 1), + (13447, 58604, 58604, 'OP_ESReadyForClientsMsg', 26, 1), + (13448, 58604, 58604, 'OP_ESStatusMsg', 100, 1), + (13449, 58604, 58604, 'OP_ESWeatherRequestEndMsg', 105, 1), + (13450, 58604, 58604, 'OP_ESWeatherRequestMsg', 104, 1), + (13451, 58604, 58604, 'OP_ESZoneInstanceStatusMsg', 101, 1), + (13452, 58604, 58604, 'OP_ExamineConsignmentRequestMsg', 171, 1), + (13453, 58604, 58604, 'OP_ExamineConsignmentResponseMsg', 172, 1), + (13454, 58604, 58604, 'OP_ExamineInfoRequestMsg', 255, 1), + (13455, 58604, 58604, 'OP_ExamineItemRequestMsg', 195, 1), + (13456, 58604, 58604, 'OP_ExitHouseMsg', 155, 1), + (13457, 58604, 58604, 'OP_ExpectClientAsCharacterReplyMs', 22, 1), + (13458, 58604, 58604, 'OP_ExpectClientAsCharacterRequest', 32, 1), + (13459, 58604, 58604, 'OP_ExpPurchWindow', 725, 1), + (13460, 58604, 58604, 'OP_FellowshipExpMsg', 122, 1), + (13461, 58604, 58604, 'OP_FlightPathsMsg', 413, 1), + (13462, 58604, 58604, 'OP_GameWorldTimeMsg', 43, 1), + (13463, 58604, 58604, 'OP_PaperdollImage', 577, 1), + (13464, 58604, 58604, 'OP_GetAuctionAssetIDMsg', 441, 1), + (13465, 58604, 58604, 'OP_GetAuctionAssetIDReplyMsg', 442, 1), + (13466, 58604, 58604, 'OP_GetAvatarAccessRequestForCSToo', 393, 1), + (13467, 58604, 58604, 'OP_GetCharacterSerializedReplyMsg', 424, 1), + (13468, 58604, 58604, 'OP_GetCharacterSerializedRequestM', 423, 1), + (13469, 58604, 58604, 'OP_GroupCreatedMsg', 88, 1), + (13470, 58604, 58604, 'OP_GroupDestroyedMsg', 89, 1), + (13471, 58604, 58604, 'OP_GroupLeaderChangedMsg', 93, 1), + (13472, 58604, 58604, 'OP_GroupMemberAddedMsg', 90, 1), + (13473, 58604, 58604, 'OP_GroupMemberRemovedMsg', 91, 1), + (13474, 58604, 58604, 'OP_GroupOptionsMsg', 199, 1), + (13475, 58604, 58604, 'OP_GroupRemovedFromGroupMsg', 92, 1), + (13476, 58604, 58604, 'OP_GroupResendOOZDataMsg', 94, 1), + (13477, 58604, 58604, 'OP_GroupSettingsChangedMsg', 95, 1), + (13478, 58604, 58604, 'OP_GuildBankActionMsg', 274, 1), + (13479, 58604, 58604, 'OP_GuildBankActionResponseMsg', 275, 1), + (13480, 58604, 58604, 'OP_GuildBankEventListMsg', 279, 1), + (13481, 58604, 58604, 'OP_GuildBankItemDetailsRequestMsg', 276, 1), + (13482, 58604, 58604, 'OP_GuildBankItemDetailsResponseMs', 277, 1), + (13483, 58604, 58604, 'OP_GuildBankUpdateMsg', 278, 1), + (13484, 58604, 58604, 'OP_GuildEventActionMsg', 269, 1), + (13485, 58604, 58604, 'OP_GuildEventAddMsg', 268, 1), + (13486, 58604, 58604, 'OP_GuildEventDetailsMsg', 272, 1), + (13487, 58604, 58604, 'OP_GuildEventListMsg', 270, 1), + (13488, 58604, 58604, 'OP_GuildEventMsg', 267, 1), + (13489, 58604, 58604, 'OP_GuildMembershipResponseMsg', 357, 1), + (13490, 58604, 58604, 'OP_GuildRecruiting', 705, 1), + (13491, 58604, 58604, 'OP_GuildRecruitingDetails', 706, 1), + (13492, 58604, 58604, 'OP_GuildRecruitingImage', 707, 1), + (13493, 58604, 58604, 'OP_GuildRecruitingMemberInfo', 704, 1), + (13494, 58604, 58604, 'OP_GuildsayMsg', 121, 1), + (13495, 58604, 58604, 'OP_GuildStatusUpdate', 698, 1), + (13496, 58604, 58604, 'OP_GuildUpdateMsg', 124, 1), + (13497, 58604, 58604, 'OP_HeritageMsg', 10000, 1), + (13498, 58604, 58604, 'OP_HideIllusionsMsg', 194, 1), + (13499, 58604, 58604, 'OP_HouseAccessRemoveMsg', 158, 1), + (13500, 58604, 58604, 'OP_HouseAccessSetMsg', 157, 1), + (13501, 58604, 58604, 'OP_HouseCustomizationScreenMsg', 166, 1), + (13502, 58604, 58604, 'OP_HouseDefaultAccessSetMsg', 156, 1), + (13503, 58604, 58604, 'OP_HouseDeletedRemotelyMsg', 142, 1), + (13504, 58604, 58604, 'OP_HouseItemsList', 484, 1), + (13505, 58604, 58604, 'OP_HousingDataChangedMsg', 427, 1), + (13506, 58604, 58604, 'OP_HousingRestoreMsg', 428, 1), + (13507, 58604, 58604, 'OP_InspectPlayerMsg', 363, 1), + (13508, 58604, 58604, 'OP_InspectPlayerRequestMsg', 450, 1), + (13509, 58604, 58604, 'OP_InviteRequestMsg', 447, 1), + (13510, 58604, 58604, 'OP_InviteResponseMsg', 448, 1), + (13511, 58604, 58604, 'OP_InviteTargetResponseMsg', 449, 1), + (13512, 58604, 58604, 'OP_JoinGuildNotifyMsg', 359, 1), + (13513, 58604, 58604, 'OP_JournalQuestStoryline', 747, 1), + (13514, 58604, 58604, 'OP_KeymapDataMsg', 177, 1), + (13515, 58604, 58604, 'OP_KeymapLoadMsg', 175, 1), + (13516, 58604, 58604, 'OP_KeymapNoneMsg', 176, 1), + (13517, 58604, 58604, 'OP_KeymapSaveMsg', 178, 1), + (13518, 58604, 58604, 'OP_KnowledgebaseRequestMsg', 227, 1), + (13519, 58604, 58604, 'OP_KnowledgebaseResponseMsg', 228, 1), + (13520, 58604, 58604, 'OP_KnowledgeWindowSlotMappingMsg', 369, 1), + (13521, 58604, 58604, 'OP_KnownLanguagesMsg', 238, 1), + (13522, 58604, 58604, 'OP_Launchpad', 575, 1), + (13523, 58604, 58604, 'OP_LeaveGuildNotifyMsg', 358, 1), + (13524, 58604, 58604, 'OP_LevelChangedMsg', 261, 1), + (13525, 58604, 58604, 'OP_LFGGroupSearch', 504, 1), + (13526, 58604, 58604, 'OP_LFGUpdateMsg', 518, 1), + (13527, 58604, 58604, 'OP_LikeOption', 136, 1), + (13528, 58604, 58604, 'OP_LoadCalendarEvents', 578, 1), + (13529, 58604, 58604, 'OP_LoadWelcomeWindow', 560, 1), + (13530, 58604, 58604, 'OP_LoginByNumRequestMsg', 1, 1), + (13531, 58604, 58604, 'OP_LoginReplyMsg', 4, 1), + (13532, 58604, 58604, 'OP_LoginRequestMsg', 0, 1), + (13533, 58604, 58604, 'OP_LootItemsRequestMsg', 185, 1), + (13534, 58604, 58604, 'OP_Lottery', 703, 1), + (13535, 58604, 58604, 'OP_LSCheckAcctLockMsg', 204, 1), + (13536, 58604, 58604, 'OP_LsClientAlertlogReplyMsg', 242, 1), + (13537, 58604, 58604, 'OP_LsClientBaselogReplyMsg', 240, 1), + (13538, 58604, 58604, 'OP_LsClientCrashlogReplyMsg', 241, 1), + (13539, 58604, 58604, 'OP_LsClientVerifylogReplyMsg', 243, 1), + (13540, 58604, 58604, 'OP_LsRequestClientCrashLogMsg', 239, 1), + (13541, 58604, 58604, 'OP_LSServerLockMsg', 365, 1), + (13542, 58604, 58604, 'OP_MacroInitMsg', 258, 1), + (13543, 58604, 58604, 'OP_MacroUpdateMsg', 259, 1), + (13544, 58604, 58604, 'OP_MailCommitSendMessageMsg', 344, 1), + (13545, 58604, 58604, 'OP_MailDeleteMessageMsg', 340, 1), + (13546, 58604, 58604, 'OP_MailEventNotificationMsg', 411, 1), + (13547, 58604, 58604, 'OP_MailGetHeadersReplyMsg', 341, 1), + (13548, 58604, 58604, 'OP_MailGetMessageMsg', 338, 1), + (13549, 58604, 58604, 'OP_MailGetMessageReplyMsg', 342, 1), + (13550, 58604, 58604, 'OP_MailRemoveAttachFromMailMsg', 346, 1), + (13551, 58604, 58604, 'OP_MailSendMessageMsg', 339, 1), + (13552, 58604, 58604, 'OP_MailSendMessageReplyMsg', 343, 1), + (13553, 58604, 58604, 'OP_MailSendSystemMessageMsg', 345, 1), + (13554, 58604, 58604, 'OP_MakeGroupLeaderMsg', 87, 1), + (13555, 58604, 58604, 'OP_MapFogDataInitMsg', 395, 1), + (13556, 58604, 58604, 'OP_MapFogDataUpdateMsg', 396, 1), + (13557, 58604, 58604, 'OP_MapRequest', 521, 1), + (13558, 58604, 58604, 'OP_MarketAddFundsReply', 529, 1), + (13559, 58604, 58604, 'OP_MarketAddFundsRequest', 528, 1), + (13560, 58604, 58604, 'OP_MarketFundsUpdate', 526, 1), + (13561, 58604, 58604, 'OP_MarketPlaceItems', 537, 1), + (13562, 58604, 58604, 'OP_MarketPlacePrices', 532, 1), + (13563, 58604, 58604, 'OP_MarketPurchase', 531, 1), + (13564, 58604, 58604, 'OP_MentorPopup', 558, 1), + (13565, 58604, 58604, 'OP_MercHireWindow', 750, 1), + (13566, 58604, 58604, 'OP_MercUnknown', 751, 1), + (13567, 58604, 58604, 'OP_MigrateBoatTransportMsg', 252, 1), + (13568, 58604, 58604, 'OP_MigrateBoatTransportReplyMsg', 253, 1), + (13569, 58604, 58604, 'OP_MigrateClientToZoneReplyMsg', 82, 1), + (13570, 58604, 58604, 'OP_MigrateClientToZoneRequestMsg', 81, 1), + (13571, 58604, 58604, 'OP_ModifyGuildMsg', 266, 1), + (13572, 58604, 58604, 'OP_MonitorCharacterListMsg', 56, 1), + (13573, 58604, 58604, 'OP_MonitorCharacterListRequestMsg', 57, 1), + (13574, 58604, 58604, 'OP_MonitorReplyMsg', 55, 1), + (13575, 58604, 58604, 'OP_MOTDMsg', 44, 1), + (13576, 58604, 58604, 'OP_MoveableObjectPlacementCriteri', 160, 1), + (13577, 58604, 58604, 'OP_MoveLogUpdateMsg', 400, 1), + (13578, 58604, 58604, 'OP_NotifyApprenticeStoppedMentori', 408, 1), + (13579, 58604, 58604, 'OP_OfferQuestMsg', 401, 1), + (13580, 58604, 58604, 'OP_OnscreenMsgMsg', 264, 1), + (13581, 58604, 58604, 'OP_OpenCharCust', 561, 1), + (13582, 58604, 58604, 'OP_OutOfZoneMemberDataMsg', 96, 1), + (13583, 58604, 58604, 'OP_PayHouseUpkeepMsg', 159, 1), + (13584, 58604, 58604, 'OP_PerformCameraShakeMsg', 214, 1), + (13585, 58604, 58604, 'OP_PerformPlayerKnockbackMsg', 213, 1), + (13586, 58604, 58604, 'OP_PetOptions', 201, 1), + (13587, 58604, 58604, 'OP_PetOptionsResponse', 581, 1), + (13588, 58604, 58604, 'OP_PlayCharacterReplyMsg', 19, 1), + (13589, 58604, 58604, 'OP_PlayCharacterRequestMsg', 18, 1), + (13590, 58604, 58604, 'OP_PlayerHouseAccessUpdateMsg', 147, 1), + (13591, 58604, 58604, 'OP_PlayerHouseBaseScreenMsg', 145, 1), + (13592, 58604, 58604, 'OP_PlayerHouseCloseUIMsg', 149, 1), + (13593, 58604, 58604, 'OP_PlayerHouseDisplayStatusMsg', 148, 1), + (13594, 58604, 58604, 'OP_PlayerHousePurchaseScreenMsg', 146, 1), + (13595, 58604, 58604, 'OP_PlayerMadeInstances', 140, 1), + (13596, 58604, 58604, 'OP_PlayerMadeInstancesScreen', 139, 1), + (13597, 58604, 58604, 'OP_PlayerPollAnswer', 557, 1), + (13598, 58604, 58604, 'OP_PlayerPollPopup', 556, 1), + (13599, 58604, 58604, 'OP_PlayLon', 511, 1), + (13600, 58604, 58604, 'OP_PointOfInterest', 729, 1), + (13601, 58604, 58604, 'OP_PointOfInterest2', 730, 1), + (13602, 58604, 58604, 'OP_PopulateSkillMapsMsg', 215, 1), + (13603, 58604, 58604, 'OP_PositionBoatTransportMsg', 251, 1), + (13604, 58604, 58604, 'OP_PositionMoveableObject', 162, 1), + (13605, 58604, 58604, 'OP_PostPossessionMsg', 454, 1), + (13606, 58604, 58604, 'OP_PredictionUpdateMsg', 37, 1), + (13607, 58604, 58604, 'OP_PrePossessionMsg', 453, 1), + (13608, 58604, 58604, 'OP_PromoFlagsDetailsMsg', 374, 1), + (13609, 58604, 58604, 'OP_PublishHouse', 138, 1), + (13610, 58604, 58604, 'OP_PurchaseConsignmentLoreCheckRe', 407, 1), + (13611, 58604, 58604, 'OP_PurchaseConsignmentRequestMsg', 128, 1), + (13612, 58604, 58604, 'OP_QueAllBgSolo', 564, 1), + (13613, 58604, 58604, 'OP_QuestionnaireMsg', 260, 1), + (13614, 58604, 58604, 'OP_QuestJournalInspectMsg', 114, 1), + (13615, 58604, 58604, 'OP_QuestJournalOpenMsg', 113, 1), + (13616, 58604, 58604, 'OP_QuestJournalSetVisibleMsg', 115, 1), + (13617, 58604, 58604, 'OP_QuestJournalWaypointMsg', 116, 1), + (13618, 58604, 58604, 'OP_QuestReward', 320, 1), + (13619, 58604, 58604, 'OP_QuickbarInitMsg', 256, 1), + (13620, 58604, 58604, 'OP_QuickbarUpdateMsg', 257, 1), + (13621, 58604, 58604, 'OP_RaceRestrictionMsg', 439, 1), + (13622, 58604, 58604, 'OP_ReadBookPageMsg', 196, 1), + (13623, 58604, 58604, 'OP_ReadyForTakeOffMsg', 192, 1), + (13624, 58604, 58604, 'OP_ReadyToZoneMsg', 84, 1), + (13625, 58604, 58604, 'OP_RecipeBook', 538, 1), + (13626, 58604, 58604, 'OP_RecipeDetailsMsg', 72, 1), + (13627, 58604, 58604, 'OP_RecipeList', 741, 1), + (13628, 58604, 58604, 'OP_RecipeListUnknown', 593, 1), + (13629, 58604, 58604, 'OP_RelinquishHouseMsg', 153, 1), + (13630, 58604, 58604, 'OP_ReloadLocalizedTxtMsg', 355, 1), + (13631, 58604, 58604, 'OP_RemoteCmdMsg', 42, 1), + (13632, 58604, 58604, 'OP_RemoveClientFromGroupMsg', 85, 1), + (13633, 58604, 58604, 'OP_RemoveConcentrationMsg', 112, 1), + (13634, 58604, 58604, 'OP_RemoveGroupFromGroupMsg', 86, 1), + (13635, 58604, 58604, 'OP_RemoveSpellEffectMsg', 111, 1), + (13636, 58604, 58604, 'OP_RenameGuildMsg', 282, 1), + (13637, 58604, 58604, 'OP_ReplaceableSubMeshesMsg', 165, 1), + (13638, 58604, 58604, 'OP_ReportMsg', 380, 1), + (13639, 58604, 58604, 'OP_RequestCampMsg', 50, 1), + (13640, 58604, 58604, 'OP_RequestGuildBankEventDetailsMs', 280, 1), + (13641, 58604, 58604, 'OP_RequestGuildEventDetailsMsg', 271, 1), + (13642, 58604, 58604, 'OP_RequestGuildInfoMsg', 273, 1), + (13643, 58604, 58604, 'OP_RequestGuildMembershipMsg', 356, 1), + (13644, 58604, 58604, 'OP_RequestHelpRepathMsg', 206, 1), + (13645, 58604, 58604, 'OP_RequestRecipeDetailsMsg', 71, 1), + (13646, 58604, 58604, 'OP_RequestTargetLocMsg', 207, 1), + (13647, 58604, 58604, 'OP_Research', 742, 1), + (13648, 58604, 58604, 'OP_ResendWorldChannelsMsg', 443, 1), + (13649, 58604, 58604, 'OP_ReskinCharacterRequestMsg', 15, 1), + (13650, 58604, 58604, 'OP_RestartZoneMsg', 412, 1), + (13651, 58604, 58604, 'OP_RewardPackMsg', 281, 1), + (13652, 58604, 58604, 'OP_SatMsg', 189, 1), + (13653, 58604, 58604, 'OP_SavageBarInitMsg', 580, 1), + (13654, 58604, 58604, 'OP_SelectZoneTeleporterDestinatio', 354, 1), + (13655, 58604, 58604, 'OP_SendLatestRequestMsg', 97, 1), + (13656, 58604, 58604, 'OP_ServerPlayCharacterReplyMsg', 24, 1), + (13657, 58604, 58604, 'OP_ServerPlayCharacterRequestMsg', 23, 1), + (13658, 58604, 58604, 'OP_SetInstanceDisplayNameMsg', 440, 1), + (13659, 58604, 58604, 'OP_SetRemoteCmdsMsg', 41, 1), + (13660, 58604, 58604, 'OP_SetSocialMsg', 99, 1), + (13661, 58604, 58604, 'OP_ShaderCustomizationMsg', 164, 1), + (13662, 58604, 58604, 'OP_ShowCreateFromRecipeUIMsg', 219, 1), + (13663, 58604, 58604, 'OP_ShowIllusionsMsg', 193, 1), + (13664, 58604, 58604, 'OP_ShowItemCreationProcessUIMsg', 223, 1), + (13665, 58604, 58604, 'OP_ShowRecipeBookMsg', 226, 1), + (13666, 58604, 58604, 'OP_ShowZoneTeleporterDestinations', 353, 1), + (13667, 58604, 58604, 'OP_SitMsg', 187, 1), + (13668, 58604, 58604, 'OP_SkillInfoRequest', 514, 1), + (13669, 58604, 58604, 'OP_SkillInfoResponse', 515, 1), + (13670, 58604, 58604, 'OP_SOEAllAccess', 607, 1), + (13671, 58604, 58604, 'OP_SpellGainedMsg', 262, 1), + (13672, 58604, 58604, 'OP_StandMsg', 188, 1), + (13673, 58604, 58604, 'OP_StoodMsg', 190, 1), + (13674, 58604, 58604, 'OP_StopItemCreationMsg', 222, 1), + (13675, 58604, 58604, 'OP_StoppedLootingMsg', 186, 1), + (13676, 58604, 58604, 'OP_StopTrackingMsg', 391, 1), + (13677, 58604, 58604, 'OP_SubmitCharCust', 562, 1), + (13678, 58604, 58604, 'OP_SupplyDepot', 739, 1), + (13679, 58604, 58604, 'OP_SysClient', 218, 1), + (13680, 58604, 58604, 'OP_TeleportWithinZoneMsg', 79, 1), + (13681, 58604, 58604, 'OP_TeleportWithinZoneNoReloadMsg', 80, 1), + (13682, 58604, 58604, 'OP_TintWidgetsMsg', 170, 1), + (13683, 58604, 58604, 'OP_TitleUpdateMsg', 384, 1), + (13684, 58604, 58604, 'OP_TrackingUpdateMsg', 389, 1), + (13685, 58604, 58604, 'OP_TradeskillList', 708, 1), + (13686, 58604, 58604, 'OP_TraitsList', 731, 1), + (13687, 58604, 58604, 'OP_UIEvent', 527, 1), + (13688, 58604, 58604, 'OP_UIResetMsg', 174, 1), + (13689, 58604, 58604, 'OP_UISettingsResponseMsg', 173, 1), + (13690, 58604, 58604, 'OP_Unknown', 764, 1), + (13691, 58604, 58604, 'OP_UnknownNpcMsg', 373, 1), + (13692, 58604, 58604, 'OP_UpdateActivePublicZonesMsg', 372, 1), + (13693, 58604, 58604, 'OP_UpdateCharacterSheetMsg', 63, 1), + (13694, 58604, 58604, 'OP_UpdateClientPredFlagsMsg', 245, 1), + (13695, 58604, 58604, 'OP_UpdateDebugRadiiMsg', 379, 1), + (13696, 58604, 58604, 'OP_UpdateGroupMemberDataMsg', 388, 1), + (13697, 58604, 58604, 'OP_UpdateHouseAccessDataMsg', 144, 1), + (13698, 58604, 58604, 'OP_UpdateHouseDataMsg', 143, 1), + (13699, 58604, 58604, 'OP_UpdateInventoryMsg', 68, 1), + (13700, 58604, 58604, 'OP_UpdateItemCreationProcessUIMsg', 224, 1), + (13701, 58604, 58604, 'OP_UpdateMotdMsg', 208, 1), + (13702, 58604, 58604, 'OP_UpdateOpportunityMsg', 75, 1), + (13703, 58604, 58604, 'OP_UpdatePositionMsg', 39, 1), + (13704, 58604, 58604, 'OP_UpdateRaidMsg', 381, 1), + (13705, 58604, 58604, 'OP_UpdateRecipeBookMsg', 70, 1), + (13706, 58604, 58604, 'OP_UpdateSkillBookMsg', 73, 1), + (13707, 58604, 58604, 'OP_UpdateSkillsMsg', 74, 1), + (13708, 58604, 58604, 'OP_UpdateSpellBookMsg', 66, 1), + (13709, 58604, 58604, 'OP_UpdateTargetLocMsg', 62, 1), + (13710, 58604, 58604, 'OP_UpdateTargetMsg', 61, 1), + (13711, 58604, 58604, 'OP_UpdateTitleCmd', 494, 1), + (13712, 58604, 58604, 'OP_UseAdornment', 719, 1), + (13713, 58604, 58604, 'OP_VideoUploaded', 579, 1), + (13714, 58604, 58604, 'OP_VoiceChatChannel', 520, 1), + (13715, 58604, 58604, 'OP_VoiceChatServer', 735, 1), + (13716, 58604, 58604, 'OP_WaypointReplyMsg', 349, 1), + (13717, 58604, 58604, 'OP_WaypointRequestMsg', 348, 1), + (13718, 58604, 58604, 'OP_WaypointSelectMsg', 350, 1), + (13719, 58604, 58604, 'OP_WaypointUpdateMsg', 351, 1), + (13720, 58604, 58604, 'OP_Weakness', 583, 1), + (13721, 58604, 58604, 'OP_WhoQueryReplyMsg', 54, 1), + (13722, 58604, 58604, 'OP_WhoQueryRequestMsg', 53, 1), + (13723, 58604, 58604, 'OP_WorldDataChangeMsg', 410, 1), + (13724, 58604, 58604, 'OP_WorldDataUpdateMsg', 237, 1), + (13725, 58604, 58604, 'OP_WorldListMsg', 8, 1), + (13726, 58604, 58604, 'OP_WorldPingMsg', 399, 1), + (13727, 58604, 58604, 'OP_WorldShutdownUpdateMsg', 403, 1), + (13728, 58604, 58604, 'OP_WorldStatusChangeMsg', 6, 1), + (13729, 58604, 58604, 'OP_WorldTravelAvail', 572, 1), + (13730, 58604, 58604, 'OP_WSAcctLockStatusMsg', 205, 1), + (13731, 58604, 58604, 'OP_WSCreateCharacterReplyMsg', 14, 1), + (13732, 58604, 58604, 'OP_WSCreateCharacterRequestMsg', 13, 1), + (13733, 58604, 58604, 'OP_WSLoginRequestMsg', 2, 1), + (13734, 58604, 58604, 'OP_WSServerHideMsg', 366, 1), + (13735, 58604, 58604, 'OP_WSServerLockMsg', 364, 1), + (13736, 58604, 58604, 'OP_WSStatusReplyMsg', 5, 1), + (13737, 58604, 58604, 'OP_ZoneBgInstanceList', 568, 1), + (13738, 58604, 58604, 'OP_ZoneInfoMsg', 33, 1), + (13739, 58604, 58604, 'OP_ZoneInstanceCreateReplyMsg', 30, 1), + (13740, 58604, 58604, 'OP_ZoneInstanceDestroyedMsg', 31, 1), + (13741, 58604, 58604, 'OP_ZoneMOTDMsg', 45, 1), + (13742, 58604, 58604, 'OP_ZonesStatusMsg', 103, 1), + (13743, 58604, 58604, 'OP_ZonesStatusRequestMsg', 102, 1), + (13744, 58604, 58604, 'OP_ZoneToFriendReplyMsg', 284, 1), + (13745, 58604, 58604, 'OP_ZoneToFriendRequestMsg', 283, 1), + (13746, 58647, 58647, 'OP_AchievementUpdateMsg', 746, 1), + (13747, 58647, 58647, 'OP_AddSocialStructureStandingMsg', 249, 1), + (13748, 58647, 58647, 'OP_AdvancementRequestMsg', 394, 1), + (13749, 58647, 58647, 'OP_AdventureList', 488, 1), + (13750, 58647, 58647, 'OP_AFKUpdateMsg', 370, 1), + (13751, 58647, 58647, 'OP_AfterInvSpellUpdate', 69, 1), + (13752, 58647, 58647, 'OP_AllCharactersDescReplyMsg', 10, 1), + (13753, 58647, 58647, 'OP_AllCharactersDescRequestMsg', 9, 1), + (13754, 58647, 58647, 'OP_AllWSDescRequestMsg', 7, 1), + (13755, 58647, 58647, 'OP_AnonUpdateMsg', 371, 1), + (13756, 58647, 58647, 'OP_ArenaCreate', 456, 1), + (13757, 58647, 58647, 'OP_ArenaGameTypesMsg', 445, 1), + (13758, 58647, 58647, 'OP_ArenaList', 457, 1), + (13759, 58647, 58647, 'OP_ArenaWindow', 465, 1), + (13760, 58647, 58647, 'OP_AttackAllowed', 500, 1), + (13761, 58647, 58647, 'OP_AttackNotAllowed', 501, 1), + (13762, 58647, 58647, 'OP_AuctionAbortMsg', 436, 1), + (13763, 58647, 58647, 'OP_AuctionCharacter', 433, 1), + (13764, 58647, 58647, 'OP_AuctionCharacterReply', 434, 1), + (13765, 58647, 58647, 'OP_AuctionCoin', 431, 1), + (13766, 58647, 58647, 'OP_AuctionCoinReply', 432, 1), + (13767, 58647, 58647, 'OP_AuctionCommitMsg', 435, 1), + (13768, 58647, 58647, 'OP_AuctionItem', 429, 1), + (13769, 58647, 58647, 'OP_AuctionItemReply', 430, 1), + (13770, 58647, 58647, 'OP_AuditAuctionEventMsg', 446, 1), + (13771, 58647, 58647, 'OP_AvatarCreatedMsg', 46, 1), + (13772, 58647, 58647, 'OP_AvatarDestroyedMsg', 47, 1), + (13773, 58647, 58647, 'OP_AvatarUpdateMsg', 360, 1), + (13774, 58647, 58647, 'OP_BadLanguageFilter', 519, 1), + (13775, 58647, 58647, 'OP_BagOptions', 502, 1), + (13776, 58647, 58647, 'OP_BeginItemCreationMsg', 221, 1), + (13777, 58647, 58647, 'OP_BeginTrackingMsg', 390, 1), + (13778, 58647, 58647, 'OP_BioUpdateMsg', 362, 1), + (13779, 58647, 58647, 'OP_BrokerAddBag', 292, 1), + (13780, 58647, 58647, 'OP_BrokerRemoveBag', 293, 1), + (13781, 58647, 58647, 'OP_BrokerSellList', 689, 1), + (13782, 58647, 58647, 'OP_BuyPlayerHouseMsg', 150, 1), + (13783, 58647, 58647, 'OP_BuyPlayerHouseTintMsg', 151, 1), + (13784, 58647, 58647, 'OP_CampAbortedMsg', 52, 1), + (13785, 58647, 58647, 'OP_CampClientMsg', 387, 1), + (13786, 58647, 58647, 'OP_CampStartedMsg', 51, 1), + (13787, 58647, 58647, 'OP_CancelCreateFromRecipeMsg', 220, 1), + (13788, 58647, 58647, 'OP_CancelledFeignMsg', 216, 1), + (13789, 58647, 58647, 'OP_CancelMoveObjectModeMsg', 163, 1), + (13790, 58647, 58647, 'OP_CancelSpellCast', 489, 1), + (13791, 58647, 58647, 'OP_ChangeServerControlFlagMsg', 246, 1), + (13792, 58647, 58647, 'OP_ChangeZoneMsg', 77, 1), + (13793, 58647, 58647, 'OP_CharacterAchievements', 745, 1), + (13794, 58647, 58647, 'OP_CharacterCreatedDungeons', 551, 1), + (13795, 58647, 58647, 'OP_CharacterCurrency', 744, 1), + (13796, 58647, 58647, 'OP_CharacterHousingList', 507, 1), + (13797, 58647, 58647, 'OP_CharacterLinkdeadMsg', 414, 1), + (13798, 58647, 58647, 'OP_CharacterMerc', 65, 1), + (13799, 58647, 58647, 'OP_CharacterMounts', 584, 1), + (13800, 58647, 58647, 'OP_CharacterPet', 64, 1), + (13801, 58647, 58647, 'OP_CharNameChangedMsg', 352, 1), + (13802, 58647, 58647, 'OP_CharRenamed', 710, 1), + (13803, 58647, 58647, 'OP_CharTransferCommitReplyMsg', 422, 1), + (13804, 58647, 58647, 'OP_CharTransferCommitRequestMsg', 420, 1), + (13805, 58647, 58647, 'OP_CharTransferReplyMsg', 418, 1), + (13806, 58647, 58647, 'OP_CharTransferRequestMsg', 417, 1), + (13807, 58647, 58647, 'OP_CharTransferRollbackReplyMsg', 421, 1), + (13808, 58647, 58647, 'OP_CharTransferRollbackRequestMsg', 419, 1), + (13809, 58647, 58647, 'OP_CharTransferStartReplyMsg', 416, 1), + (13810, 58647, 58647, 'OP_CharTransferStartRequestMsg', 415, 1), + (13811, 58647, 58647, 'OP_CharTransferValidateReplyMsg', 438, 1), + (13812, 58647, 58647, 'OP_CharTransferValidateRequestMsg', 437, 1), + (13813, 58647, 58647, 'OP_ChatCreateChannelMsg', 285, 1), + (13814, 58647, 58647, 'OP_ChatFiltersMsg', 335, 1), + (13815, 58647, 58647, 'OP_ChatJoinChannelMsg', 286, 1), + (13816, 58647, 58647, 'OP_ChatLeaveChannelMsg', 288, 1), + (13817, 58647, 58647, 'OP_ChatRelationshipUpdateMsg', 184, 1), + (13818, 58647, 58647, 'OP_ChatSendFriendsMsg', 295, 1), + (13819, 58647, 58647, 'OP_ChatSendIgnoresMsg', 296, 1), + (13820, 58647, 58647, 'OP_ChatTellChannelMsg', 289, 1), + (13821, 58647, 58647, 'OP_ChatTellUserMsg', 290, 1), + (13822, 58647, 58647, 'OP_ChatToggleFriendMsg', 291, 1), + (13823, 58647, 58647, 'OP_ChatToggleIgnoreMsg', 294, 1), + (13824, 58647, 58647, 'OP_ChatWhoChannelMsg', 287, 1), + (13825, 58647, 58647, 'OP_ClearDataMsg', 98, 1), + (13826, 58647, 58647, 'OP_ClearForLandingMsg', 491, 1), + (13827, 58647, 58647, 'OP_ClearForTakeOffMsg', 191, 1), + (13828, 58647, 58647, 'OP_ClientCmdMsg', 58, 1), + (13829, 58647, 58647, 'OP_ClientFellMsg', 385, 1), + (13830, 58647, 58647, 'OP_ClientIdleBeginMsg', 405, 1), + (13831, 58647, 58647, 'OP_ClientIdleEndMsg', 406, 1), + (13832, 58647, 58647, 'OP_ClientInDeathRegionMsg', 386, 1), + (13833, 58647, 58647, 'OP_ClientTeleportRequestMsg', 78, 1), + (13834, 58647, 58647, 'OP_ClientTeleportToLocationMsg', 244, 1), + (13835, 58647, 58647, 'OP_CloseGroupInviteWindowMsg', 397, 1), + (13836, 58647, 58647, 'OP_CollectAllHouseItemsMsg', 152, 1), + (13837, 58647, 58647, 'OP_ConsignItemRequestMsg', 126, 1), + (13838, 58647, 58647, 'OP_ConsignItemResponseMsg', 127, 1), + (13839, 58647, 58647, 'OP_ConsignmentCloseStoreMsg', 125, 1), + (13840, 58647, 58647, 'OP_ConsignRemoveItemsMsg', 378, 1), + (13841, 58647, 58647, 'OP_ConsignViewCreateMsg', 375, 1), + (13842, 58647, 58647, 'OP_ConsignViewGetPageMsg', 376, 1), + (13843, 58647, 58647, 'OP_ConsignViewReleaseMsg', 377, 1), + (13844, 58647, 58647, 'OP_ConsignViewSortMsg', 383, 1), + (13845, 58647, 58647, 'OP_CorruptedClientMsg', 409, 1), + (13846, 58647, 58647, 'OP_CreateBoatTransportsMsg', 250, 1), + (13847, 58647, 58647, 'OP_CreateCharacterDungeon', 547, 1), + (13848, 58647, 58647, 'OP_CreateCharacterReplyMsg', 12, 1), + (13849, 58647, 58647, 'OP_CreateCharacterRequestMsg', 11, 1), + (13850, 58647, 58647, 'OP_CreateCharFromCBBReplyMsg', 426, 1), + (13851, 58647, 58647, 'OP_CreateCharFromCBBRequestMsg', 425, 1), + (13852, 58647, 58647, 'OP_CreateGuildReplyMsg', 120, 1), + (13853, 58647, 58647, 'OP_CreateGuildRequestMsg', 119, 1), + (13854, 58647, 58647, 'OP_CreateZoneInstanceMsg', 29, 1), + (13855, 58647, 58647, 'OP_CsCategoryRequestMsg', 367, 1), + (13856, 58647, 58647, 'OP_CsCategoryResponseMsg', 368, 1), + (13857, 58647, 58647, 'OP_CSTicketAddCommentMsg', 234, 1), + (13858, 58647, 58647, 'OP_CSTicketChangeNotificationMsg', 236, 1), + (13859, 58647, 58647, 'OP_CSTicketCommentRequestMsg', 231, 1), + (13860, 58647, 58647, 'OP_CSTicketCommentResponseMsg', 232, 1), + (13861, 58647, 58647, 'OP_CSTicketCreateMsg', 233, 1), + (13862, 58647, 58647, 'OP_CSTicketDeleteMsg', 235, 1), + (13863, 58647, 58647, 'OP_CSTicketHeaderRequestMsg', 229, 1), + (13864, 58647, 58647, 'OP_CSTicketInfoMsg', 230, 1), + (13865, 58647, 58647, 'OP_CSToolAccessResponseMsg', 388, 1), + (13866, 58647, 58647, 'OP_CSToolsRequestMsg', 247, 1), + (13867, 58647, 58647, 'OP_CSToolsResponseMsg', 248, 1), + (13868, 58647, 58647, 'OP_CurrentPet', 485, 1), + (13869, 58647, 58647, 'OP_CustomizationPurchaseRequestMs', 167, 1), + (13870, 58647, 58647, 'OP_CustomizationReplyMsg', 169, 1), + (13871, 58647, 58647, 'OP_CustomizationSetRequestMsg', 168, 1), + (13872, 58647, 58647, 'OP_CustomizeHouseDisplay', 735, 1), + (13873, 58647, 58647, 'OP_DailyObjectives', 597, 1), + (13874, 58647, 58647, 'OP_DefaultGroupOptionsMsg', 198, 1), + (13875, 58647, 58647, 'OP_DefaultGroupOptionsRequestMsg', 197, 1), + (13876, 58647, 58647, 'OP_DeleteCharacterReplyMsg', 17, 1), + (13877, 58647, 58647, 'OP_DeleteCharacterRequestMsg', 16, 1), + (13878, 58647, 58647, 'OP_DeleteGuildMsg', 123, 1), + (13879, 58647, 58647, 'OP_DestUpdateReq', 210, 1), + (13880, 58647, 58647, 'OP_DialogCloseMsg', 110, 1), + (13881, 58647, 58647, 'OP_DialogSelectMsg', 109, 1), + (13882, 58647, 58647, 'OP_DispatchClientCmdMsg', 60, 1), + (13883, 58647, 58647, 'OP_DispatchESMsg', 59, 1), + (13884, 58647, 58647, 'OP_DispatchMsg', 451, 1), + (13885, 58647, 58647, 'OP_DispatchSpellCmdMsg', 179, 1), + (13886, 58647, 58647, 'OP_DisplayDebugNLLPointsMsg', 254, 1), + (13887, 58647, 58647, 'OP_DisplayEventMsg', 452, 1), + (13888, 58647, 58647, 'OP_DisplayExchangeScreenMsg', 444, 1), + (13889, 58647, 58647, 'OP_DisplayGroupOptionsScreenMsg', 200, 1), + (13890, 58647, 58647, 'OP_DisplayInnVisitScreenMsg', 202, 1), + (13891, 58647, 58647, 'OP_DisplayMailScreenMsg', 404, 1), + (13892, 58647, 58647, 'OP_DisplayTSEventReactionMsg', 225, 1), + (13893, 58647, 58647, 'OP_DisplayWarningMsg', 265, 1), + (13894, 58647, 58647, 'OP_DoneLoadingEntityResourcesMsg', 36, 1), + (13895, 58647, 58647, 'OP_DoneLoadingZoneResourcesMsg', 34, 1), + (13896, 58647, 58647, 'OP_DoneSendingInitialEntitiesMsg', 35, 1), + (13897, 58647, 58647, 'OP_DressingRoom', 510, 1), + (13898, 58647, 58647, 'OP_DumpSchedulerMsg', 203, 1), + (13899, 58647, 58647, 'OP_DungeonMakerEnter', 548, 1), + (13900, 58647, 58647, 'OP_DungeonMakerItemRequest', 550, 1), + (13901, 58647, 58647, 'OP_DungeonMakerItemResponse', 582, 1), + (13902, 58647, 58647, 'OP_DungeonMakerToolboxList', 552, 1), + (13903, 58647, 58647, 'OP_DungeonMakerUnknown', 553, 1), + (13904, 58647, 58647, 'OP_DungeonMakerUnknown1', 554, 1), + (13905, 58647, 58647, 'OP_DungeonPlayAsAvatarList', 749, 1), + (13906, 58647, 58647, 'OP_DungeonPlayAsAvatarSelected', 750, 1), + (13907, 58647, 58647, 'OP_EncounterBrokenMsg', 263, 1), + (13908, 58647, 58647, 'OP_EnterHouseMsg', 154, 1), + (13909, 58647, 58647, 'OP_EnterMoveObjectModeMsg', 161, 1), + (13910, 58647, 58647, 'OP_EntityVerbsReplyMsg', 181, 1), + (13911, 58647, 58647, 'OP_EntityVerbsRequestMsg', 180, 1), + (13912, 58647, 58647, 'OP_EntityVerbsVerbMsg', 182, 1), + (13913, 58647, 58647, 'OP_EqArenaResultsCmd', 700, 1), + (13914, 58647, 58647, 'OP_EqAvailWorldChannelsCmd', 687, 1), + (13915, 58647, 58647, 'OP_EqBetaCopyRequest', 606, 1), + (13916, 58647, 58647, 'OP_EqCannedEmoteCmd', 629, 1), + (13917, 58647, 58647, 'OP_EqChatChannelUpdateCmd', 685, 1), + (13918, 58647, 58647, 'OP_EqChoiceWinCmd', 666, 1), + (13919, 58647, 58647, 'OP_EqCloseWindowCmd', 658, 1), + (13920, 58647, 58647, 'OP_EqCollectionFilterCmd', 645, 1), + (13921, 58647, 58647, 'OP_EqCollectionItemCmd', 646, 1), + (13922, 58647, 58647, 'OP_EqCollectionUpdateCmd', 644, 1), + (13923, 58647, 58647, 'OP_EqConsignmentItemsCmd', 690, 1), + (13924, 58647, 58647, 'OP_EqCreateGhostCmd', 611, 1), + (13925, 58647, 58647, 'OP_EqCreateListBoxCmd', 626, 1), + (13926, 58647, 58647, 'OP_EqCreateSignWidgetCmd', 613, 1), + (13927, 58647, 58647, 'OP_EqCreateWidgetCmd', 612, 1), + (13928, 58647, 58647, 'OP_EqDebugPVDCmd', 679, 1), + (13929, 58647, 58647, 'OP_EqDestroyGhostCmd', 614, 1), + (13930, 58647, 58647, 'OP_EqDialogCloseCmd', 642, 1), + (13931, 58647, 58647, 'OP_EqDialogOpenCmd', 641, 1), + (13932, 58647, 58647, 'OP_EqDisplaySpellFailCmd', 662, 1), + (13933, 58647, 58647, 'OP_EqDisplayTextCmd', 610, 1), + (13934, 58647, 58647, 'OP_EqDrawablePathGraphCmd', 640, 1), + (13935, 58647, 58647, 'OP_EqEnableGameEventCmd', 672, 1), + (13936, 58647, 58647, 'OP_EqEnableWindowCmd', 674, 1), + (13937, 58647, 58647, 'OP_EqExamineInfoCmd', 657, 1), + (13938, 58647, 58647, 'OP_EqFactionUpdateCmd', 643, 1), + (13939, 58647, 58647, 'OP_EqFlashWindowCmd', 675, 1), + (13940, 58647, 58647, 'OP_EqGetProbsCmd', 683, 1), + (13941, 58647, 58647, 'OP_EqGroupMemberRemovedCmd', 636, 1), + (13942, 58647, 58647, 'OP_EqGuildBankEventActionCmd', 701, 1), + (13943, 58647, 58647, 'OP_EqGuildBankExamineInfoCmd', 702, 1), + (13944, 58647, 58647, 'OP_EqHearChainEffectCmd', 637, 1), + (13945, 58647, 58647, 'OP_EqHearChatCmd', 609, 1), + (13946, 58647, 58647, 'OP_EqHearCombatCmd', 618, 1), + (13947, 58647, 58647, 'OP_EqHearConsiderCmd', 624, 1), + (13948, 58647, 58647, 'OP_EqHearDeathCmd', 635, 1), + (13949, 58647, 58647, 'OP_EQHearDispellCmd', 747, 1), + (13950, 58647, 58647, 'OP_EqHearDrowningCmd', 634, 1), + (13951, 58647, 58647, 'OP_EqHearHealCmd', 684, 1), + (13952, 58647, 58647, 'OP_EqHearPlayFlavorCmd', 677, 1), + (13953, 58647, 58647, 'OP_EQHearProcCmd', 620, 1), + (13954, 58647, 58647, 'OP_EQHearResEffectCmd', 621, 1), + (13955, 58647, 58647, 'OP_EqHearSpellCastCmd', 619, 1), + (13956, 58647, 58647, 'OP_EqHearSpellFizzleCmd', 623, 1), + (13957, 58647, 58647, 'OP_EqHearSpellInterruptCmd', 622, 1), + (13958, 58647, 58647, 'OP_EqHearSpellNoLandCmd', 703, 1), + (13959, 58647, 58647, 'OP_EQHearThreatCmd', 741, 1), + (13960, 58647, 58647, 'OP_EqHelpPathClearCmd', 655, 1), + (13961, 58647, 58647, 'OP_EqHelpPathCmd', 654, 1), + (13962, 58647, 58647, 'OP_EqInspectPCResultsCmd', 639, 1), + (13963, 58647, 58647, 'OP_EqInstructionWindowCloseCmd', 669, 1), + (13964, 58647, 58647, 'OP_EqInstructionWindowCmd', 668, 1), + (13965, 58647, 58647, 'OP_EqInstructionWindowGoalCmd', 670, 1), + (13966, 58647, 58647, 'OP_EqInstructionWindowTaskCmd', 671, 1), + (13967, 58647, 58647, 'OP_EqJunctionListCmd', 660, 1), + (13968, 58647, 58647, 'OP_EqMapExplorationCmd', 693, 1), + (13969, 58647, 58647, 'OP_EqMentoring', 648, 1), + (13970, 58647, 58647, 'OP_EqPlaySound3DCmd', 632, 1), + (13971, 58647, 58647, 'OP_EqPlaySoundCmd', 631, 1), + (13972, 58647, 58647, 'OP_EqPlayVoiceCmd', 633, 1), + (13973, 58647, 58647, 'OP_EqQuestGroupCmd', 650, 1), + (13974, 58647, 58647, 'OP_EqQuestionnaireCmd', 681, 1), + (13975, 58647, 58647, 'OP_EqQuestJournalReplyCmd', 649, 1), + (13976, 58647, 58647, 'OP_EqQuestJournalUpdateCmd', 647, 1), + (13977, 58647, 58647, 'OP_EqReceiveOfferCmd', 638, 1), + (13978, 58647, 58647, 'OP_EqResurrectedCmd', 665, 1), + (13979, 58647, 58647, 'OP_EqSetControlGhostCmd', 616, 1), + (13980, 58647, 58647, 'OP_EqSetDebugPathPointsCmd', 627, 1), + (13981, 58647, 58647, 'OP_EqSetDefaultVerbCmd', 667, 1), + (13982, 58647, 58647, 'OP_EqSetPOVGhostCmd', 617, 1), + (13983, 58647, 58647, 'OP_EqShowBookCmd', 680, 1), + (13984, 58647, 58647, 'OP_EqShowDeathWindowCmd', 661, 1), + (13985, 58647, 58647, 'OP_EqShowWindowCmd', 673, 1), + (13986, 58647, 58647, 'OP_EqSpellCastEndCmd', 664, 1), + (13987, 58647, 58647, 'OP_EqSpellCastStartCmd', 663, 1), + (13988, 58647, 58647, 'OP_EqSpellMoveToRangeAndRetryCmd', 695, 1), + (13989, 58647, 58647, 'OP_EqStartBrokerCmd', 692, 1), + (13990, 58647, 58647, 'OP_EqStateCmd', 630, 1), + (13991, 58647, 58647, 'OP_EqStoreLogCmd', 694, 1), + (13992, 58647, 58647, 'OP_EqUpdateBankCmd', 656, 1), + (13993, 58647, 58647, 'OP_EqUpdateGhostCmd', 615, 1), + (13994, 58647, 58647, 'OP_EqUpdateLootCmd', 659, 1), + (13995, 58647, 58647, 'OP_EqUpdateMerchantCmd', 651, 1), + (13996, 58647, 58647, 'OP_EqUpdatePlayerMailCmd', 696, 1), + (13997, 58647, 58647, 'OP_EqUpdatePlayerTradeCmd', 653, 1), + (13998, 58647, 58647, 'OP_EqUpdateSignWidgetCmd', 678, 1), + (13999, 58647, 58647, 'OP_EqUpdateStoreCmd', 652, 1), + (14000, 58647, 58647, 'OP_EqUpdateSubClassesCmd', 625, 1), + (14001, 58647, 58647, 'OP_EqUpdateTargetCmd', 688, 1), + (14002, 58647, 58647, 'OP_EqWhoChannelQueryReplyCmd', 686, 1), + (14003, 58647, 58647, 'OP_ESInitMsg', 25, 1), + (14004, 58647, 58647, 'OP_ESLoginRequestMsg', 3, 1), + (14005, 58647, 58647, 'OP_ESReadyForClientsMsg', 26, 1), + (14006, 58647, 58647, 'OP_ESStatusMsg', 100, 1), + (14007, 58647, 58647, 'OP_ESWeatherRequestEndMsg', 105, 1), + (14008, 58647, 58647, 'OP_ESWeatherRequestMsg', 104, 1), + (14009, 58647, 58647, 'OP_ESZoneInstanceStatusMsg', 101, 1), + (14010, 58647, 58647, 'OP_ExamineConsignmentRequestMsg', 171, 1), + (14011, 58647, 58647, 'OP_ExamineConsignmentResponseMsg', 172, 1), + (14012, 58647, 58647, 'OP_ExamineInfoRequestMsg', 255, 1), + (14013, 58647, 58647, 'OP_ExamineItemRequestMsg', 195, 1), + (14014, 58647, 58647, 'OP_ExitHouseMsg', 155, 1), + (14015, 58647, 58647, 'OP_ExpectClientAsCharacterReplyMs', 22, 1), + (14016, 58647, 58647, 'OP_ExpectClientAsCharacterRequest', 32, 1), + (14017, 58647, 58647, 'OP_ExpPurchWindow', 726, 1), + (14018, 58647, 58647, 'OP_FellowshipExpMsg', 122, 1), + (14019, 58647, 58647, 'OP_FlightPathsMsg', 413, 1), + (14020, 58647, 58647, 'OP_GameWorldTimeMsg', 43, 1), + (14021, 58647, 58647, 'OP_PaperdollImage', 577, 1), + (14022, 58647, 58647, 'OP_GetAuctionAssetIDMsg', 441, 1), + (14023, 58647, 58647, 'OP_GetAuctionAssetIDReplyMsg', 442, 1), + (14024, 58647, 58647, 'OP_GetAvatarAccessRequestForCSToo', 393, 1), + (14025, 58647, 58647, 'OP_GetCharacterSerializedReplyMsg', 424, 1), + (14026, 58647, 58647, 'OP_GetCharacterSerializedRequestM', 423, 1), + (14027, 58647, 58647, 'OP_GroupCreatedMsg', 88, 1), + (14028, 58647, 58647, 'OP_GroupDestroyedMsg', 89, 1), + (14029, 58647, 58647, 'OP_GroupLeaderChangedMsg', 93, 1), + (14030, 58647, 58647, 'OP_GroupMemberAddedMsg', 90, 1), + (14031, 58647, 58647, 'OP_GroupMemberRemovedMsg', 91, 1), + (14032, 58647, 58647, 'OP_GroupOptionsMsg', 199, 1), + (14033, 58647, 58647, 'OP_GroupRemovedFromGroupMsg', 92, 1), + (14034, 58647, 58647, 'OP_GroupResendOOZDataMsg', 94, 1), + (14035, 58647, 58647, 'OP_GroupSettingsChangedMsg', 95, 1), + (14036, 58647, 58647, 'OP_GuildBankActionMsg', 274, 1), + (14037, 58647, 58647, 'OP_GuildBankActionResponseMsg', 275, 1), + (14038, 58647, 58647, 'OP_GuildBankEventListMsg', 279, 1), + (14039, 58647, 58647, 'OP_GuildBankItemDetailsRequestMsg', 276, 1), + (14040, 58647, 58647, 'OP_GuildBankItemDetailsResponseMs', 277, 1), + (14041, 58647, 58647, 'OP_GuildBankUpdateMsg', 278, 1), + (14042, 58647, 58647, 'OP_GuildEventActionMsg', 269, 1), + (14043, 58647, 58647, 'OP_GuildEventAddMsg', 268, 1), + (14044, 58647, 58647, 'OP_GuildEventDetailsMsg', 272, 1), + (14045, 58647, 58647, 'OP_GuildEventListMsg', 270, 1), + (14046, 58647, 58647, 'OP_GuildEventMsg', 267, 1), + (14047, 58647, 58647, 'OP_GuildMembershipResponseMsg', 357, 1), + (14048, 58647, 58647, 'OP_GuildRecruiting', 706, 1), + (14049, 58647, 58647, 'OP_GuildRecruitingDetails', 707, 1), + (14050, 58647, 58647, 'OP_GuildRecruitingImage', 708, 1), + (14051, 58647, 58647, 'OP_GuildRecruitingMemberInfo', 705, 1), + (14052, 58647, 58647, 'OP_GuildsayMsg', 121, 1), + (14053, 58647, 58647, 'OP_GuildStatusUpdate', 699, 1), + (14054, 58647, 58647, 'OP_GuildUpdateMsg', 124, 1), + (14055, 58647, 58647, 'OP_HeritageMsg', 10001, 1), + (14056, 58647, 58647, 'OP_HideIllusionsMsg', 194, 1), + (14057, 58647, 58647, 'OP_HouseAccessRemoveMsg', 158, 1), + (14058, 58647, 58647, 'OP_HouseAccessSetMsg', 157, 1), + (14059, 58647, 58647, 'OP_HouseCustomizationScreenMsg', 166, 1), + (14060, 58647, 58647, 'OP_HouseDefaultAccessSetMsg', 156, 1), + (14061, 58647, 58647, 'OP_HouseDeletedRemotelyMsg', 142, 1), + (14062, 58647, 58647, 'OP_HouseItemsList', 484, 1), + (14063, 58647, 58647, 'OP_HousingDataChangedMsg', 427, 1), + (14064, 58647, 58647, 'OP_HousingRestoreMsg', 428, 1), + (14065, 58647, 58647, 'OP_InspectPlayerMsg', 363, 1), + (14066, 58647, 58647, 'OP_InspectPlayerRequestMsg', 450, 1), + (14067, 58647, 58647, 'OP_InviteRequestMsg', 447, 1), + (14068, 58647, 58647, 'OP_InviteResponseMsg', 448, 1), + (14069, 58647, 58647, 'OP_InviteTargetResponseMsg', 449, 1), + (14070, 58647, 58647, 'OP_JoinGuildNotifyMsg', 359, 1), + (14071, 58647, 58647, 'OP_JournalQuestStoryline', 748, 1), + (14072, 58647, 58647, 'OP_KeymapDataMsg', 177, 1), + (14073, 58647, 58647, 'OP_KeymapLoadMsg', 175, 1), + (14074, 58647, 58647, 'OP_KeymapNoneMsg', 176, 1), + (14075, 58647, 58647, 'OP_KeymapSaveMsg', 178, 1), + (14076, 58647, 58647, 'OP_KnowledgebaseRequestMsg', 227, 1), + (14077, 58647, 58647, 'OP_KnowledgebaseResponseMsg', 228, 1), + (14078, 58647, 58647, 'OP_KnowledgeWindowSlotMappingMsg', 369, 1), + (14079, 58647, 58647, 'OP_KnownLanguagesMsg', 238, 1), + (14080, 58647, 58647, 'OP_Launchpad', 575, 1), + (14081, 58647, 58647, 'OP_LeaveGuildNotifyMsg', 358, 1), + (14082, 58647, 58647, 'OP_LevelChangedMsg', 261, 1), + (14083, 58647, 58647, 'OP_LFGGroupSearch', 504, 1), + (14084, 58647, 58647, 'OP_LFGUpdateMsg', 518, 1), + (14085, 58647, 58647, 'OP_LikeOption', 136, 1), + (14086, 58647, 58647, 'OP_LoadCalendarEvents', 578, 1), + (14087, 58647, 58647, 'OP_LoadWelcomeWindow', 560, 1), + (14088, 58647, 58647, 'OP_LoginByNumRequestMsg', 1, 1), + (14089, 58647, 58647, 'OP_LoginReplyMsg', 4, 1), + (14090, 58647, 58647, 'OP_LoginRequestMsg', 0, 1), + (14091, 58647, 58647, 'OP_LootItemsRequestMsg', 185, 1), + (14092, 58647, 58647, 'OP_Lottery', 704, 1), + (14093, 58647, 58647, 'OP_LSCheckAcctLockMsg', 204, 1), + (14094, 58647, 58647, 'OP_LsClientAlertlogReplyMsg', 242, 1), + (14095, 58647, 58647, 'OP_LsClientBaselogReplyMsg', 240, 1), + (14096, 58647, 58647, 'OP_LsClientCrashlogReplyMsg', 241, 1), + (14097, 58647, 58647, 'OP_LsClientVerifylogReplyMsg', 243, 1), + (14098, 58647, 58647, 'OP_LsRequestClientCrashLogMsg', 239, 1), + (14099, 58647, 58647, 'OP_LSServerLockMsg', 365, 1), + (14100, 58647, 58647, 'OP_MacroInitMsg', 258, 1), + (14101, 58647, 58647, 'OP_MacroUpdateMsg', 259, 1), + (14102, 58647, 58647, 'OP_MailCommitSendMessageMsg', 344, 1), + (14103, 58647, 58647, 'OP_MailDeleteMessageMsg', 340, 1), + (14104, 58647, 58647, 'OP_MailEventNotificationMsg', 411, 1), + (14105, 58647, 58647, 'OP_MailGetHeadersReplyMsg', 341, 1), + (14106, 58647, 58647, 'OP_MailGetMessageMsg', 338, 1), + (14107, 58647, 58647, 'OP_MailGetMessageReplyMsg', 342, 1), + (14108, 58647, 58647, 'OP_MailRemoveAttachFromMailMsg', 346, 1), + (14109, 58647, 58647, 'OP_MailSendMessageMsg', 339, 1), + (14110, 58647, 58647, 'OP_MailSendMessageReplyMsg', 343, 1), + (14111, 58647, 58647, 'OP_MailSendSystemMessageMsg', 345, 1), + (14112, 58647, 58647, 'OP_MakeGroupLeaderMsg', 87, 1), + (14113, 58647, 58647, 'OP_MapFogDataInitMsg', 395, 1), + (14114, 58647, 58647, 'OP_MapFogDataUpdateMsg', 396, 1), + (14115, 58647, 58647, 'OP_MapRequest', 521, 1), + (14116, 58647, 58647, 'OP_MarketAddFundsReply', 529, 1), + (14117, 58647, 58647, 'OP_MarketAddFundsRequest', 528, 1), + (14118, 58647, 58647, 'OP_MarketFundsUpdate', 526, 1), + (14119, 58647, 58647, 'OP_MarketPlaceItems', 537, 1), + (14120, 58647, 58647, 'OP_MarketPlacePrices', 532, 1), + (14121, 58647, 58647, 'OP_MarketPurchase', 531, 1), + (14122, 58647, 58647, 'OP_MentorPopup', 558, 1), + (14123, 58647, 58647, 'OP_MercHireWindow', 751, 1), + (14124, 58647, 58647, 'OP_MercUnknown', 752, 1), + (14125, 58647, 58647, 'OP_MigrateBoatTransportMsg', 252, 1), + (14126, 58647, 58647, 'OP_MigrateBoatTransportReplyMsg', 253, 1), + (14127, 58647, 58647, 'OP_MigrateClientToZoneReplyMsg', 82, 1), + (14128, 58647, 58647, 'OP_MigrateClientToZoneRequestMsg', 81, 1), + (14129, 58647, 58647, 'OP_ModifyGuildMsg', 266, 1), + (14130, 58647, 58647, 'OP_MonitorCharacterListMsg', 56, 1), + (14131, 58647, 58647, 'OP_MonitorCharacterListRequestMsg', 57, 1), + (14132, 58647, 58647, 'OP_MonitorReplyMsg', 55, 1), + (14133, 58647, 58647, 'OP_MOTDMsg', 44, 1), + (14134, 58647, 58647, 'OP_MoveableObjectPlacementCriteri', 160, 1), + (14135, 58647, 58647, 'OP_MoveLogUpdateMsg', 400, 1), + (14136, 58647, 58647, 'OP_NotifyApprenticeStoppedMentori', 408, 1), + (14137, 58647, 58647, 'OP_OfferQuestMsg', 401, 1), + (14138, 58647, 58647, 'OP_OnscreenMsgMsg', 264, 1), + (14139, 58647, 58647, 'OP_OpenCharCust', 561, 1), + (14140, 58647, 58647, 'OP_OutOfZoneMemberDataMsg', 96, 1), + (14141, 58647, 58647, 'OP_PayHouseUpkeepMsg', 159, 1), + (14142, 58647, 58647, 'OP_PerformCameraShakeMsg', 214, 1), + (14143, 58647, 58647, 'OP_PerformPlayerKnockbackMsg', 213, 1), + (14144, 58647, 58647, 'OP_PetOptions', 201, 1), + (14145, 58647, 58647, 'OP_PetOptionsResponse', 581, 1), + (14146, 58647, 58647, 'OP_PlayCharacterReplyMsg', 19, 1), + (14147, 58647, 58647, 'OP_PlayCharacterRequestMsg', 18, 1), + (14148, 58647, 58647, 'OP_PlayerHouseAccessUpdateMsg', 147, 1), + (14149, 58647, 58647, 'OP_PlayerHouseBaseScreenMsg', 145, 1), + (14150, 58647, 58647, 'OP_PlayerHouseCloseUIMsg', 149, 1), + (14151, 58647, 58647, 'OP_PlayerHouseDisplayStatusMsg', 148, 1), + (14152, 58647, 58647, 'OP_PlayerHousePurchaseScreenMsg', 146, 1), + (14153, 58647, 58647, 'OP_PlayerMadeInstances', 140, 1), + (14154, 58647, 58647, 'OP_PlayerMadeInstancesScreen', 139, 1), + (14155, 58647, 58647, 'OP_PlayerPollAnswer', 557, 1), + (14156, 58647, 58647, 'OP_PlayerPollPopup', 556, 1), + (14157, 58647, 58647, 'OP_PlayLon', 511, 1), + (14158, 58647, 58647, 'OP_PointOfInterest', 730, 1), + (14159, 58647, 58647, 'OP_PointOfInterest2', 731, 1), + (14160, 58647, 58647, 'OP_PopulateSkillMapsMsg', 215, 1), + (14161, 58647, 58647, 'OP_PositionBoatTransportMsg', 251, 1), + (14162, 58647, 58647, 'OP_PositionMoveableObject', 162, 1), + (14163, 58647, 58647, 'OP_PostPossessionMsg', 454, 1), + (14164, 58647, 58647, 'OP_PredictionUpdateMsg', 37, 1), + (14165, 58647, 58647, 'OP_PrePossessionMsg', 453, 1), + (14166, 58647, 58647, 'OP_PromoFlagsDetailsMsg', 374, 1), + (14167, 58647, 58647, 'OP_PublishHouse', 138, 1), + (14168, 58647, 58647, 'OP_PurchaseConsignmentLoreCheckRe', 407, 1), + (14169, 58647, 58647, 'OP_PurchaseConsignmentRequestMsg', 128, 1), + (14170, 58647, 58647, 'OP_QueAllBgSolo', 564, 1), + (14171, 58647, 58647, 'OP_QuestionnaireMsg', 260, 1), + (14172, 58647, 58647, 'OP_QuestJournalInspectMsg', 114, 1), + (14173, 58647, 58647, 'OP_QuestJournalOpenMsg', 113, 1), + (14174, 58647, 58647, 'OP_QuestJournalSetVisibleMsg', 115, 1), + (14175, 58647, 58647, 'OP_QuestJournalWaypointMsg', 116, 1), + (14176, 58647, 58647, 'OP_QuestReward', 320, 1), + (14177, 58647, 58647, 'OP_QuickbarInitMsg', 256, 1), + (14178, 58647, 58647, 'OP_QuickbarUpdateMsg', 257, 1), + (14179, 58647, 58647, 'OP_RaceRestrictionMsg', 439, 1), + (14180, 58647, 58647, 'OP_ReadBookPageMsg', 196, 1), + (14181, 58647, 58647, 'OP_ReadyForTakeOffMsg', 192, 1), + (14182, 58647, 58647, 'OP_ReadyToZoneMsg', 84, 1), + (14183, 58647, 58647, 'OP_RecipeBook', 538, 1), + (14184, 58647, 58647, 'OP_RecipeDetailsMsg', 72, 1), + (14185, 58647, 58647, 'OP_RecipeList', 742, 1), + (14186, 58647, 58647, 'OP_RecipeListUnknown', 593, 1), + (14187, 58647, 58647, 'OP_RelinquishHouseMsg', 153, 1), + (14188, 58647, 58647, 'OP_ReloadLocalizedTxtMsg', 355, 1), + (14189, 58647, 58647, 'OP_RemoteCmdMsg', 42, 1), + (14190, 58647, 58647, 'OP_RemoveClientFromGroupMsg', 85, 1), + (14191, 58647, 58647, 'OP_RemoveConcentrationMsg', 112, 1), + (14192, 58647, 58647, 'OP_RemoveGroupFromGroupMsg', 86, 1), + (14193, 58647, 58647, 'OP_RemoveSpellEffectMsg', 111, 1), + (14194, 58647, 58647, 'OP_RenameGuildMsg', 282, 1), + (14195, 58647, 58647, 'OP_ReplaceableSubMeshesMsg', 165, 1), + (14196, 58647, 58647, 'OP_ReportMsg', 380, 1), + (14197, 58647, 58647, 'OP_RequestCampMsg', 50, 1), + (14198, 58647, 58647, 'OP_RequestGuildBankEventDetailsMs', 280, 1), + (14199, 58647, 58647, 'OP_RequestGuildEventDetailsMsg', 271, 1), + (14200, 58647, 58647, 'OP_RequestGuildInfoMsg', 273, 1), + (14201, 58647, 58647, 'OP_RequestGuildMembershipMsg', 356, 1), + (14202, 58647, 58647, 'OP_RequestHelpRepathMsg', 206, 1), + (14203, 58647, 58647, 'OP_RequestRecipeDetailsMsg', 71, 1), + (14204, 58647, 58647, 'OP_RequestTargetLocMsg', 207, 1), + (14205, 58647, 58647, 'OP_Research', 743, 1), + (14206, 58647, 58647, 'OP_ResendWorldChannelsMsg', 443, 1), + (14207, 58647, 58647, 'OP_ReskinCharacterRequestMsg', 15, 1), + (14208, 58647, 58647, 'OP_RestartZoneMsg', 412, 1), + (14209, 58647, 58647, 'OP_RewardPackMsg', 281, 1), + (14210, 58647, 58647, 'OP_SatMsg', 189, 1), + (14211, 58647, 58647, 'OP_SavageBarInitMsg', 580, 1), + (14212, 58647, 58647, 'OP_SelectZoneTeleporterDestinatio', 354, 1), + (14213, 58647, 58647, 'OP_SendLatestRequestMsg', 97, 1), + (14214, 58647, 58647, 'OP_ServerPlayCharacterReplyMsg', 24, 1), + (14215, 58647, 58647, 'OP_ServerPlayCharacterRequestMsg', 23, 1), + (14216, 58647, 58647, 'OP_SetInstanceDisplayNameMsg', 440, 1), + (14217, 58647, 58647, 'OP_SetRemoteCmdsMsg', 41, 1), + (14218, 58647, 58647, 'OP_SetSocialMsg', 99, 1), + (14219, 58647, 58647, 'OP_ShaderCustomizationMsg', 164, 1), + (14220, 58647, 58647, 'OP_ShowCreateFromRecipeUIMsg', 219, 1), + (14221, 58647, 58647, 'OP_ShowIllusionsMsg', 193, 1), + (14222, 58647, 58647, 'OP_ShowItemCreationProcessUIMsg', 223, 1), + (14223, 58647, 58647, 'OP_ShowRecipeBookMsg', 226, 1), + (14224, 58647, 58647, 'OP_ShowZoneTeleporterDestinations', 353, 1), + (14225, 58647, 58647, 'OP_SitMsg', 187, 1), + (14226, 58647, 58647, 'OP_SkillInfoRequest', 514, 1), + (14227, 58647, 58647, 'OP_SkillInfoResponse', 515, 1), + (14228, 58647, 58647, 'OP_SOEAllAccess', 607, 1), + (14229, 58647, 58647, 'OP_SpellGainedMsg', 262, 1), + (14230, 58647, 58647, 'OP_StandMsg', 188, 1), + (14231, 58647, 58647, 'OP_StoodMsg', 190, 1), + (14232, 58647, 58647, 'OP_StopItemCreationMsg', 222, 1), + (14233, 58647, 58647, 'OP_StoppedLootingMsg', 186, 1), + (14234, 58647, 58647, 'OP_StopTrackingMsg', 391, 1), + (14235, 58647, 58647, 'OP_SubmitCharCust', 562, 1), + (14236, 58647, 58647, 'OP_SupplyDepot', 740, 1), + (14237, 58647, 58647, 'OP_SysClient', 218, 1), + (14238, 58647, 58647, 'OP_TeleportWithinZoneMsg', 79, 1), + (14239, 58647, 58647, 'OP_TeleportWithinZoneNoReloadMsg', 80, 1), + (14240, 58647, 58647, 'OP_TintWidgetsMsg', 170, 1), + (14241, 58647, 58647, 'OP_TitleUpdateMsg', 384, 1), + (14242, 58647, 58647, 'OP_TrackingUpdateMsg', 389, 1), + (14243, 58647, 58647, 'OP_TradeskillList', 709, 1), + (14244, 58647, 58647, 'OP_TraitsList', 732, 1), + (14245, 58647, 58647, 'OP_UIEvent', 527, 1), + (14246, 58647, 58647, 'OP_UIResetMsg', 174, 1), + (14247, 58647, 58647, 'OP_UISettingsResponseMsg', 173, 1), + (14248, 58647, 58647, 'OP_Unknown', 765, 1), + (14249, 58647, 58647, 'OP_UnknownNpcMsg', 373, 1), + (14250, 58647, 58647, 'OP_UpdateActivePublicZonesMsg', 372, 1), + (14251, 58647, 58647, 'OP_UpdateCharacterSheetMsg', 63, 1), + (14252, 58647, 58647, 'OP_UpdateClientPredFlagsMsg', 245, 1), + (14253, 58647, 58647, 'OP_UpdateDebugRadiiMsg', 379, 1), + (14254, 58647, 58647, 'OP_UpdateGroupMemberDataMsg', 388, 1), + (14255, 58647, 58647, 'OP_UpdateHouseAccessDataMsg', 144, 1), + (14256, 58647, 58647, 'OP_UpdateHouseDataMsg', 143, 1), + (14257, 58647, 58647, 'OP_UpdateInventoryMsg', 68, 1), + (14258, 58647, 58647, 'OP_UpdateItemCreationProcessUIMsg', 224, 1), + (14259, 58647, 58647, 'OP_UpdateMotdMsg', 208, 1), + (14260, 58647, 58647, 'OP_UpdateOpportunityMsg', 75, 1), + (14261, 58647, 58647, 'OP_UpdatePositionMsg', 39, 1), + (14262, 58647, 58647, 'OP_UpdateRaidMsg', 381, 1), + (14263, 58647, 58647, 'OP_UpdateRecipeBookMsg', 70, 1), + (14264, 58647, 58647, 'OP_UpdateSkillBookMsg', 73, 1), + (14265, 58647, 58647, 'OP_UpdateSkillsMsg', 74, 1), + (14266, 58647, 58647, 'OP_UpdateSpellBookMsg', 66, 1), + (14267, 58647, 58647, 'OP_UpdateTargetLocMsg', 62, 1), + (14268, 58647, 58647, 'OP_UpdateTargetMsg', 61, 1), + (14269, 58647, 58647, 'OP_UpdateTitleCmd', 494, 1), + (14270, 58647, 58647, 'OP_UseAdornment', 720, 1), + (14271, 58647, 58647, 'OP_VideoUploaded', 579, 1), + (14272, 58647, 58647, 'OP_VoiceChatChannel', 520, 1), + (14273, 58647, 58647, 'OP_VoiceChatServer', 736, 1), + (14274, 58647, 58647, 'OP_WaypointReplyMsg', 349, 1), + (14275, 58647, 58647, 'OP_WaypointRequestMsg', 348, 1), + (14276, 58647, 58647, 'OP_WaypointSelectMsg', 350, 1), + (14277, 58647, 58647, 'OP_WaypointUpdateMsg', 351, 1), + (14278, 58647, 58647, 'OP_Weakness', 583, 1), + (14279, 58647, 58647, 'OP_WhoQueryReplyMsg', 54, 1), + (14280, 58647, 58647, 'OP_WhoQueryRequestMsg', 53, 1), + (14281, 58647, 58647, 'OP_WorldDataChangeMsg', 410, 1), + (14282, 58647, 58647, 'OP_WorldDataUpdateMsg', 237, 1), + (14283, 58647, 58647, 'OP_WorldListMsg', 8, 1), + (14284, 58647, 58647, 'OP_WorldPingMsg', 399, 1), + (14285, 58647, 58647, 'OP_WorldShutdownUpdateMsg', 403, 1), + (14286, 58647, 58647, 'OP_WorldStatusChangeMsg', 6, 1), + (14287, 58647, 58647, 'OP_WorldTravelAvail', 572, 1), + (14288, 58647, 58647, 'OP_WSAcctLockStatusMsg', 205, 1), + (14289, 58647, 58647, 'OP_WSCreateCharacterReplyMsg', 14, 1), + (14290, 58647, 58647, 'OP_WSCreateCharacterRequestMsg', 13, 1), + (14291, 58647, 58647, 'OP_WSLoginRequestMsg', 2, 1), + (14292, 58647, 58647, 'OP_WSServerHideMsg', 366, 1), + (14293, 58647, 58647, 'OP_WSServerLockMsg', 364, 1), + (14294, 58647, 58647, 'OP_WSStatusReplyMsg', 5, 1), + (14295, 58647, 58647, 'OP_ZoneBgInstanceList', 568, 1), + (14296, 58647, 58647, 'OP_ZoneInfoMsg', 33, 1), + (14297, 58647, 58647, 'OP_ZoneInstanceCreateReplyMsg', 30, 1), + (14298, 58647, 58647, 'OP_ZoneInstanceDestroyedMsg', 31, 1), + (14299, 58647, 58647, 'OP_ZoneMOTDMsg', 45, 1), + (14300, 58647, 58647, 'OP_ZonesStatusMsg', 103, 1), + (14301, 58647, 58647, 'OP_ZonesStatusRequestMsg', 102, 1), + (14302, 58647, 58647, 'OP_ZoneToFriendReplyMsg', 284, 1), + (14303, 58647, 58647, 'OP_ZoneToFriendRequestMsg', 283, 1), + (14304, 60024, 60024, 'OP_AchievementUpdateMsg', 748, 1), + (14305, 60024, 60024, 'OP_AddSocialStructureStandingMsg', 249, 1), + (14306, 60024, 60024, 'OP_AdvancementRequestMsg', 394, 1), + (14307, 60024, 60024, 'OP_AdventureList', 488, 1), + (14308, 60024, 60024, 'OP_AFKUpdateMsg', 370, 1), + (14309, 60024, 60024, 'OP_AfterInvSpellUpdate', 69, 1), + (14310, 60024, 60024, 'OP_AllCharactersDescReplyMsg', 10, 1), + (14311, 60024, 60024, 'OP_AllCharactersDescRequestMsg', 9, 1), + (14312, 60024, 60024, 'OP_AllWSDescRequestMsg', 7, 1), + (14313, 60024, 60024, 'OP_AnonUpdateMsg', 371, 1), + (14314, 60024, 60024, 'OP_ArenaCreate', 456, 1), + (14315, 60024, 60024, 'OP_ArenaGameTypesMsg', 445, 1), + (14316, 60024, 60024, 'OP_ArenaList', 457, 1), + (14317, 60024, 60024, 'OP_ArenaWindow', 465, 1), + (14318, 60024, 60024, 'OP_AttackAllowed', 500, 1), + (14319, 60024, 60024, 'OP_AttackNotAllowed', 501, 1), + (14320, 60024, 60024, 'OP_AuctionAbortMsg', 436, 1), + (14321, 60024, 60024, 'OP_AuctionCharacter', 433, 1), + (14322, 60024, 60024, 'OP_AuctionCharacterReply', 434, 1), + (14323, 60024, 60024, 'OP_AuctionCoin', 431, 1), + (14324, 60024, 60024, 'OP_AuctionCoinReply', 432, 1), + (14325, 60024, 60024, 'OP_AuctionCommitMsg', 435, 1), + (14326, 60024, 60024, 'OP_AuctionItem', 429, 1), + (14327, 60024, 60024, 'OP_AuctionItemReply', 430, 1), + (14328, 60024, 60024, 'OP_AuditAuctionEventMsg', 446, 1), + (14329, 60024, 60024, 'OP_AvatarCreatedMsg', 46, 1), + (14330, 60024, 60024, 'OP_AvatarDestroyedMsg', 47, 1), + (14331, 60024, 60024, 'OP_AvatarUpdateMsg', 360, 1), + (14332, 60024, 60024, 'OP_BadLanguageFilter', 519, 1), + (14333, 60024, 60024, 'OP_BagOptions', 502, 1), + (14334, 60024, 60024, 'OP_BeginItemCreationMsg', 221, 1), + (14335, 60024, 60024, 'OP_BeginTrackingMsg', 390, 1), + (14336, 60024, 60024, 'OP_BioUpdateMsg', 362, 1), + (14337, 60024, 60024, 'OP_BrokerAddBag', 292, 1), + (14338, 60024, 60024, 'OP_BrokerRemoveBag', 293, 1), + (14339, 60024, 60024, 'OP_BrokerSellList', 691, 1), + (14340, 60024, 60024, 'OP_BuyPlayerHouseMsg', 150, 1), + (14341, 60024, 60024, 'OP_BuyPlayerHouseTintMsg', 151, 1), + (14342, 60024, 60024, 'OP_CampAbortedMsg', 52, 1), + (14343, 60024, 60024, 'OP_CampClientMsg', 387, 1), + (14344, 60024, 60024, 'OP_CampStartedMsg', 51, 1), + (14345, 60024, 60024, 'OP_CancelCreateFromRecipeMsg', 220, 1), + (14346, 60024, 60024, 'OP_CancelledFeignMsg', 216, 1), + (14347, 60024, 60024, 'OP_CancelMoveObjectModeMsg', 163, 1), + (14348, 60024, 60024, 'OP_CancelSpellCast', 489, 1), + (14349, 60024, 60024, 'OP_ChangeServerControlFlagMsg', 246, 1), + (14350, 60024, 60024, 'OP_ChangeZoneMsg', 77, 1), + (14351, 60024, 60024, 'OP_CharacterAchievements', 747, 1), + (14352, 60024, 60024, 'OP_CharacterCreatedDungeons', 551, 1), + (14353, 60024, 60024, 'OP_CharacterCurrency', 746, 1), + (14354, 60024, 60024, 'OP_CharacterHousingList', 507, 1), + (14355, 60024, 60024, 'OP_CharacterLinkdeadMsg', 414, 1), + (14356, 60024, 60024, 'OP_CharacterMerc', 65, 1), + (14357, 60024, 60024, 'OP_CharacterMounts', 584, 1), + (14358, 60024, 60024, 'OP_CharacterPet', 64, 1), + (14359, 60024, 60024, 'OP_CharNameChangedMsg', 352, 1), + (14360, 60024, 60024, 'OP_CharRenamed', 712, 1), + (14361, 60024, 60024, 'OP_CharTransferCommitReplyMsg', 422, 1), + (14362, 60024, 60024, 'OP_CharTransferCommitRequestMsg', 420, 1), + (14363, 60024, 60024, 'OP_CharTransferReplyMsg', 418, 1), + (14364, 60024, 60024, 'OP_CharTransferRequestMsg', 417, 1), + (14365, 60024, 60024, 'OP_CharTransferRollbackReplyMsg', 421, 1), + (14366, 60024, 60024, 'OP_CharTransferRollbackRequestMsg', 419, 1), + (14367, 60024, 60024, 'OP_CharTransferStartReplyMsg', 416, 1), + (14368, 60024, 60024, 'OP_CharTransferStartRequestMsg', 415, 1), + (14369, 60024, 60024, 'OP_CharTransferValidateReplyMsg', 438, 1), + (14370, 60024, 60024, 'OP_CharTransferValidateRequestMsg', 437, 1), + (14371, 60024, 60024, 'OP_ChatCreateChannelMsg', 285, 1), + (14372, 60024, 60024, 'OP_ChatFiltersMsg', 335, 1), + (14373, 60024, 60024, 'OP_ChatJoinChannelMsg', 286, 1), + (14374, 60024, 60024, 'OP_ChatLeaveChannelMsg', 288, 1), + (14375, 60024, 60024, 'OP_ChatRelationshipUpdateMsg', 184, 1), + (14376, 60024, 60024, 'OP_ChatSendFriendsMsg', 295, 1), + (14377, 60024, 60024, 'OP_ChatSendIgnoresMsg', 296, 1), + (14378, 60024, 60024, 'OP_ChatTellChannelMsg', 289, 1), + (14379, 60024, 60024, 'OP_ChatTellUserMsg', 290, 1), + (14380, 60024, 60024, 'OP_ChatToggleFriendMsg', 291, 1), + (14381, 60024, 60024, 'OP_ChatToggleIgnoreMsg', 294, 1), + (14382, 60024, 60024, 'OP_ChatWhoChannelMsg', 287, 1), + (14383, 60024, 60024, 'OP_ClearDataMsg', 98, 1), + (14384, 60024, 60024, 'OP_ClearForLandingMsg', 491, 1), + (14385, 60024, 60024, 'OP_ClearForTakeOffMsg', 191, 1), + (14386, 60024, 60024, 'OP_ClientCmdMsg', 58, 1), + (14387, 60024, 60024, 'OP_ClientFellMsg', 385, 1), + (14388, 60024, 60024, 'OP_ClientIdleBeginMsg', 405, 1), + (14389, 60024, 60024, 'OP_ClientIdleEndMsg', 406, 1), + (14390, 60024, 60024, 'OP_ClientInDeathRegionMsg', 386, 1), + (14391, 60024, 60024, 'OP_ClientTeleportRequestMsg', 78, 1), + (14392, 60024, 60024, 'OP_ClientTeleportToLocationMsg', 244, 1), + (14393, 60024, 60024, 'OP_CloseGroupInviteWindowMsg', 397, 1), + (14394, 60024, 60024, 'OP_CollectAllHouseItemsMsg', 152, 1), + (14395, 60024, 60024, 'OP_ConsignItemRequestMsg', 126, 1), + (14396, 60024, 60024, 'OP_ConsignItemResponseMsg', 127, 1), + (14397, 60024, 60024, 'OP_ConsignmentCloseStoreMsg', 125, 1), + (14398, 60024, 60024, 'OP_ConsignRemoveItemsMsg', 378, 1), + (14399, 60024, 60024, 'OP_ConsignViewCreateMsg', 375, 1), + (14400, 60024, 60024, 'OP_ConsignViewGetPageMsg', 376, 1), + (14401, 60024, 60024, 'OP_ConsignViewReleaseMsg', 377, 1), + (14402, 60024, 60024, 'OP_ConsignViewSortMsg', 383, 1), + (14403, 60024, 60024, 'OP_CorruptedClientMsg', 409, 1), + (14404, 60024, 60024, 'OP_CreateBoatTransportsMsg', 250, 1), + (14405, 60024, 60024, 'OP_CreateCharacterDungeon', 547, 1), + (14406, 60024, 60024, 'OP_CreateCharacterReplyMsg', 12, 1), + (14407, 60024, 60024, 'OP_CreateCharacterRequestMsg', 11, 1), + (14408, 60024, 60024, 'OP_CreateCharFromCBBReplyMsg', 426, 1), + (14409, 60024, 60024, 'OP_CreateCharFromCBBRequestMsg', 425, 1), + (14410, 60024, 60024, 'OP_CreateGuildReplyMsg', 120, 1), + (14411, 60024, 60024, 'OP_CreateGuildRequestMsg', 119, 1), + (14412, 60024, 60024, 'OP_CreateZoneInstanceMsg', 29, 1), + (14413, 60024, 60024, 'OP_CsCategoryRequestMsg', 367, 1), + (14414, 60024, 60024, 'OP_CsCategoryResponseMsg', 368, 1), + (14415, 60024, 60024, 'OP_CSTicketAddCommentMsg', 234, 1), + (14416, 60024, 60024, 'OP_CSTicketChangeNotificationMsg', 236, 1), + (14417, 60024, 60024, 'OP_CSTicketCommentRequestMsg', 231, 1), + (14418, 60024, 60024, 'OP_CSTicketCommentResponseMsg', 232, 1), + (14419, 60024, 60024, 'OP_CSTicketCreateMsg', 233, 1), + (14420, 60024, 60024, 'OP_CSTicketDeleteMsg', 235, 1), + (14421, 60024, 60024, 'OP_CSTicketHeaderRequestMsg', 229, 1), + (14422, 60024, 60024, 'OP_CSTicketInfoMsg', 230, 1), + (14423, 60024, 60024, 'OP_CSToolAccessResponseMsg', 388, 1), + (14424, 60024, 60024, 'OP_CSToolsRequestMsg', 247, 1), + (14425, 60024, 60024, 'OP_CSToolsResponseMsg', 248, 1), + (14426, 60024, 60024, 'OP_CurrentPet', 485, 1), + (14427, 60024, 60024, 'OP_CustomizationPurchaseRequestMs', 167, 1), + (14428, 60024, 60024, 'OP_CustomizationReplyMsg', 169, 1), + (14429, 60024, 60024, 'OP_CustomizationSetRequestMsg', 168, 1), + (14430, 60024, 60024, 'OP_CustomizeHouseDisplay', 737, 1), + (14431, 60024, 60024, 'OP_DailyObjectives', 597, 1), + (14432, 60024, 60024, 'OP_DefaultGroupOptionsMsg', 198, 1), + (14433, 60024, 60024, 'OP_DefaultGroupOptionsRequestMsg', 197, 1), + (14434, 60024, 60024, 'OP_DeleteCharacterReplyMsg', 17, 1), + (14435, 60024, 60024, 'OP_DeleteCharacterRequestMsg', 16, 1), + (14436, 60024, 60024, 'OP_DeleteGuildMsg', 123, 1), + (14437, 60024, 60024, 'OP_DestUpdateReq', 210, 1), + (14438, 60024, 60024, 'OP_DialogCloseMsg', 110, 1), + (14439, 60024, 60024, 'OP_DialogSelectMsg', 109, 1), + (14440, 60024, 60024, 'OP_DispatchClientCmdMsg', 60, 1), + (14441, 60024, 60024, 'OP_DispatchESMsg', 59, 1), + (14442, 60024, 60024, 'OP_DispatchMsg', 451, 1), + (14443, 60024, 60024, 'OP_DispatchSpellCmdMsg', 179, 1), + (14444, 60024, 60024, 'OP_DisplayDebugNLLPointsMsg', 254, 1), + (14445, 60024, 60024, 'OP_DisplayEventMsg', 452, 1), + (14446, 60024, 60024, 'OP_DisplayExchangeScreenMsg', 444, 1), + (14447, 60024, 60024, 'OP_DisplayGroupOptionsScreenMsg', 200, 1), + (14448, 60024, 60024, 'OP_DisplayInnVisitScreenMsg', 202, 1), + (14449, 60024, 60024, 'OP_DisplayMailScreenMsg', 404, 1), + (14450, 60024, 60024, 'OP_DisplayTSEventReactionMsg', 225, 1), + (14451, 60024, 60024, 'OP_DisplayWarningMsg', 265, 1), + (14452, 60024, 60024, 'OP_DoneLoadingEntityResourcesMsg', 36, 1), + (14453, 60024, 60024, 'OP_DoneLoadingZoneResourcesMsg', 34, 1), + (14454, 60024, 60024, 'OP_DoneSendingInitialEntitiesMsg', 35, 1), + (14455, 60024, 60024, 'OP_DressingRoom', 510, 1), + (14456, 60024, 60024, 'OP_DumpSchedulerMsg', 203, 1), + (14457, 60024, 60024, 'OP_DungeonMakerEnter', 548, 1), + (14458, 60024, 60024, 'OP_DungeonMakerItemRequest', 550, 1), + (14459, 60024, 60024, 'OP_DungeonMakerItemResponse', 582, 1), + (14460, 60024, 60024, 'OP_DungeonMakerToolboxList', 552, 1), + (14461, 60024, 60024, 'OP_DungeonMakerUnknown', 553, 1), + (14462, 60024, 60024, 'OP_DungeonMakerUnknown1', 554, 1), + (14463, 60024, 60024, 'OP_DungeonPlayAsAvatarList', 751, 1), + (14464, 60024, 60024, 'OP_DungeonPlayAsAvatarSelected', 752, 1), + (14465, 60024, 60024, 'OP_EncounterBrokenMsg', 263, 1), + (14466, 60024, 60024, 'OP_EnterHouseMsg', 154, 1), + (14467, 60024, 60024, 'OP_EnterMoveObjectModeMsg', 161, 1), + (14468, 60024, 60024, 'OP_EntityVerbsReplyMsg', 181, 1), + (14469, 60024, 60024, 'OP_EntityVerbsRequestMsg', 180, 1), + (14470, 60024, 60024, 'OP_EntityVerbsVerbMsg', 182, 1), + (14471, 60024, 60024, 'OP_EqArenaResultsCmd', 702, 1), + (14472, 60024, 60024, 'OP_EqAvailWorldChannelsCmd', 689, 1), + (14473, 60024, 60024, 'OP_EqBetaCopyRequest', 608, 1), + (14474, 60024, 60024, 'OP_EqCannedEmoteCmd', 631, 1), + (14475, 60024, 60024, 'OP_EqChatChannelUpdateCmd', 687, 1), + (14476, 60024, 60024, 'OP_EqChoiceWinCmd', 668, 1), + (14477, 60024, 60024, 'OP_EqCloseWindowCmd', 660, 1), + (14478, 60024, 60024, 'OP_EqCollectionFilterCmd', 647, 1), + (14479, 60024, 60024, 'OP_EqCollectionItemCmd', 648, 1), + (14480, 60024, 60024, 'OP_EqCollectionUpdateCmd', 646, 1), + (14481, 60024, 60024, 'OP_EqConsignmentItemsCmd', 692, 1), + (14482, 60024, 60024, 'OP_EqCreateGhostCmd', 613, 1), + (14483, 60024, 60024, 'OP_EqCreateListBoxCmd', 628, 1), + (14484, 60024, 60024, 'OP_EqCreateSignWidgetCmd', 615, 1), + (14485, 60024, 60024, 'OP_EqCreateWidgetCmd', 614, 1), + (14486, 60024, 60024, 'OP_EqDebugPVDCmd', 681, 1), + (14487, 60024, 60024, 'OP_EqDestroyGhostCmd', 616, 1), + (14488, 60024, 60024, 'OP_EqDialogCloseCmd', 644, 1), + (14489, 60024, 60024, 'OP_EqDialogOpenCmd', 643, 1), + (14490, 60024, 60024, 'OP_EqDisplaySpellFailCmd', 664, 1), + (14491, 60024, 60024, 'OP_EqDisplayTextCmd', 612, 1), + (14492, 60024, 60024, 'OP_EqDrawablePathGraphCmd', 642, 1), + (14493, 60024, 60024, 'OP_EqEnableGameEventCmd', 674, 1), + (14494, 60024, 60024, 'OP_EqEnableWindowCmd', 676, 1), + (14495, 60024, 60024, 'OP_EqExamineInfoCmd', 659, 1), + (14496, 60024, 60024, 'OP_EqFactionUpdateCmd', 645, 1), + (14497, 60024, 60024, 'OP_EqFlashWindowCmd', 677, 1), + (14498, 60024, 60024, 'OP_EqGetProbsCmd', 685, 1), + (14499, 60024, 60024, 'OP_EqGroupMemberRemovedCmd', 638, 1), + (14500, 60024, 60024, 'OP_EqGuildBankEventActionCmd', 703, 1), + (14501, 60024, 60024, 'OP_EqGuildBankExamineInfoCmd', 704, 1), + (14502, 60024, 60024, 'OP_EqHearChainEffectCmd', 639, 1), + (14503, 60024, 60024, 'OP_EqHearChatCmd', 611, 1), + (14504, 60024, 60024, 'OP_EqHearCombatCmd', 620, 1), + (14505, 60024, 60024, 'OP_EqHearConsiderCmd', 626, 1), + (14506, 60024, 60024, 'OP_EqHearDeathCmd', 637, 1), + (14507, 60024, 60024, 'OP_EQHearDispellCmd', 749, 1), + (14508, 60024, 60024, 'OP_EqHearDrowningCmd', 636, 1), + (14509, 60024, 60024, 'OP_EqHearHealCmd', 686, 1), + (14510, 60024, 60024, 'OP_EqHearPlayFlavorCmd', 679, 1), + (14511, 60024, 60024, 'OP_EQHearProcCmd', 622, 1), + (14512, 60024, 60024, 'OP_EQHearResEffectCmd', 623, 1), + (14513, 60024, 60024, 'OP_EqHearSpellCastCmd', 621, 1), + (14514, 60024, 60024, 'OP_EqHearSpellFizzleCmd', 625, 1), + (14515, 60024, 60024, 'OP_EqHearSpellInterruptCmd', 624, 1), + (14516, 60024, 60024, 'OP_EqHearSpellNoLandCmd', 705, 1), + (14517, 60024, 60024, 'OP_EQHearThreatCmd', 743, 1), + (14518, 60024, 60024, 'OP_EqHelpPathClearCmd', 657, 1), + (14519, 60024, 60024, 'OP_EqHelpPathCmd', 656, 1), + (14520, 60024, 60024, 'OP_EqInspectPCResultsCmd', 641, 1), + (14521, 60024, 60024, 'OP_EqInstructionWindowCloseCmd', 671, 1), + (14522, 60024, 60024, 'OP_EqInstructionWindowCmd', 670, 1), + (14523, 60024, 60024, 'OP_EqInstructionWindowGoalCmd', 672, 1), + (14524, 60024, 60024, 'OP_EqInstructionWindowTaskCmd', 673, 1), + (14525, 60024, 60024, 'OP_EqJunctionListCmd', 662, 1), + (14526, 60024, 60024, 'OP_EqMapExplorationCmd', 695, 1), + (14527, 60024, 60024, 'OP_EqMentoring', 650, 1), + (14528, 60024, 60024, 'OP_EqPlaySound3DCmd', 634, 1), + (14529, 60024, 60024, 'OP_EqPlaySoundCmd', 633, 1), + (14530, 60024, 60024, 'OP_EqPlayVoiceCmd', 635, 1), + (14531, 60024, 60024, 'OP_EqQuestGroupCmd', 652, 1), + (14532, 60024, 60024, 'OP_EqQuestionnaireCmd', 683, 1), + (14533, 60024, 60024, 'OP_EqQuestJournalReplyCmd', 651, 1), + (14534, 60024, 60024, 'OP_EqQuestJournalUpdateCmd', 649, 1), + (14535, 60024, 60024, 'OP_EqReceiveOfferCmd', 640, 1), + (14536, 60024, 60024, 'OP_EqResurrectedCmd', 667, 1), + (14537, 60024, 60024, 'OP_EqSetControlGhostCmd', 618, 1), + (14538, 60024, 60024, 'OP_EqSetDebugPathPointsCmd', 629, 1), + (14539, 60024, 60024, 'OP_EqSetDefaultVerbCmd', 669, 1), + (14540, 60024, 60024, 'OP_EqSetPOVGhostCmd', 619, 1), + (14541, 60024, 60024, 'OP_EqShowBookCmd', 682, 1), + (14542, 60024, 60024, 'OP_EqShowDeathWindowCmd', 663, 1), + (14543, 60024, 60024, 'OP_EqShowWindowCmd', 675, 1), + (14544, 60024, 60024, 'OP_EqSpellCastEndCmd', 666, 1), + (14545, 60024, 60024, 'OP_EqSpellCastStartCmd', 665, 1), + (14546, 60024, 60024, 'OP_EqSpellMoveToRangeAndRetryCmd', 697, 1), + (14547, 60024, 60024, 'OP_EqStartBrokerCmd', 694, 1), + (14548, 60024, 60024, 'OP_EqStateCmd', 632, 1), + (14549, 60024, 60024, 'OP_EqStoreLogCmd', 696, 1), + (14550, 60024, 60024, 'OP_EqUpdateBankCmd', 658, 1), + (14551, 60024, 60024, 'OP_EqUpdateGhostCmd', 617, 1), + (14552, 60024, 60024, 'OP_EqUpdateLootCmd', 661, 1), + (14553, 60024, 60024, 'OP_EqUpdateMerchantCmd', 653, 1), + (14554, 60024, 60024, 'OP_EqUpdatePlayerMailCmd', 698, 1), + (14555, 60024, 60024, 'OP_EqUpdatePlayerTradeCmd', 655, 1), + (14556, 60024, 60024, 'OP_EqUpdateSignWidgetCmd', 680, 1), + (14557, 60024, 60024, 'OP_EqUpdateStoreCmd', 654, 1), + (14558, 60024, 60024, 'OP_EqUpdateSubClassesCmd', 627, 1), + (14559, 60024, 60024, 'OP_EqUpdateTargetCmd', 690, 1), + (14560, 60024, 60024, 'OP_EqWhoChannelQueryReplyCmd', 688, 1), + (14561, 60024, 60024, 'OP_ESInitMsg', 25, 1), + (14562, 60024, 60024, 'OP_ESLoginRequestMsg', 3, 1), + (14563, 60024, 60024, 'OP_ESReadyForClientsMsg', 26, 1), + (14564, 60024, 60024, 'OP_ESStatusMsg', 100, 1), + (14565, 60024, 60024, 'OP_ESWeatherRequestEndMsg', 105, 1), + (14566, 60024, 60024, 'OP_ESWeatherRequestMsg', 104, 1), + (14567, 60024, 60024, 'OP_ESZoneInstanceStatusMsg', 101, 1), + (14568, 60024, 60024, 'OP_ExamineConsignmentRequestMsg', 171, 1), + (14569, 60024, 60024, 'OP_ExamineConsignmentResponseMsg', 172, 1), + (14570, 60024, 60024, 'OP_ExamineInfoRequestMsg', 255, 1), + (14571, 60024, 60024, 'OP_ExamineItemRequestMsg', 195, 1), + (14572, 60024, 60024, 'OP_ExitHouseMsg', 155, 1), + (14573, 60024, 60024, 'OP_ExpectClientAsCharacterReplyMs', 22, 1), + (14574, 60024, 60024, 'OP_ExpectClientAsCharacterRequest', 32, 1), + (14575, 60024, 60024, 'OP_ExpPurchWindow', 728, 1), + (14576, 60024, 60024, 'OP_FellowshipExpMsg', 122, 1), + (14577, 60024, 60024, 'OP_FlightPathsMsg', 413, 1), + (14578, 60024, 60024, 'OP_GameWorldTimeMsg', 43, 1), + (14579, 60024, 60024, 'OP_PaperdollImage', 577, 1), + (14580, 60024, 60024, 'OP_GetAuctionAssetIDMsg', 441, 1), + (14581, 60024, 60024, 'OP_GetAuctionAssetIDReplyMsg', 442, 1), + (14582, 60024, 60024, 'OP_GetAvatarAccessRequestForCSToo', 393, 1), + (14583, 60024, 60024, 'OP_GetCharacterSerializedReplyMsg', 424, 1), + (14584, 60024, 60024, 'OP_GetCharacterSerializedRequestM', 423, 1), + (14585, 60024, 60024, 'OP_GroupCreatedMsg', 88, 1), + (14586, 60024, 60024, 'OP_GroupDestroyedMsg', 89, 1), + (14587, 60024, 60024, 'OP_GroupLeaderChangedMsg', 93, 1), + (14588, 60024, 60024, 'OP_GroupMemberAddedMsg', 90, 1), + (14589, 60024, 60024, 'OP_GroupMemberRemovedMsg', 91, 1), + (14590, 60024, 60024, 'OP_GroupOptionsMsg', 199, 1), + (14591, 60024, 60024, 'OP_GroupRemovedFromGroupMsg', 92, 1), + (14592, 60024, 60024, 'OP_GroupResendOOZDataMsg', 94, 1), + (14593, 60024, 60024, 'OP_GroupSettingsChangedMsg', 95, 1), + (14594, 60024, 60024, 'OP_GuildBankActionMsg', 274, 1), + (14595, 60024, 60024, 'OP_GuildBankActionResponseMsg', 275, 1), + (14596, 60024, 60024, 'OP_GuildBankEventListMsg', 279, 1), + (14597, 60024, 60024, 'OP_GuildBankItemDetailsRequestMsg', 276, 1), + (14598, 60024, 60024, 'OP_GuildBankItemDetailsResponseMs', 277, 1), + (14599, 60024, 60024, 'OP_GuildBankUpdateMsg', 278, 1), + (14600, 60024, 60024, 'OP_GuildEventActionMsg', 269, 1), + (14601, 60024, 60024, 'OP_GuildEventAddMsg', 268, 1), + (14602, 60024, 60024, 'OP_GuildEventDetailsMsg', 272, 1), + (14603, 60024, 60024, 'OP_GuildEventListMsg', 270, 1), + (14604, 60024, 60024, 'OP_GuildEventMsg', 267, 1), + (14605, 60024, 60024, 'OP_GuildMembershipResponseMsg', 357, 1), + (14606, 60024, 60024, 'OP_GuildRecruiting', 708, 1), + (14607, 60024, 60024, 'OP_GuildRecruitingDetails', 709, 1), + (14608, 60024, 60024, 'OP_GuildRecruitingImage', 710, 1), + (14609, 60024, 60024, 'OP_GuildRecruitingMemberInfo', 707, 1), + (14610, 60024, 60024, 'OP_GuildsayMsg', 121, 1), + (14611, 60024, 60024, 'OP_GuildStatusUpdate', 701, 1), + (14612, 60024, 60024, 'OP_GuildUpdateMsg', 124, 1), + (14613, 60024, 60024, 'OP_HeritageMsg', 10001, 1), + (14614, 60024, 60024, 'OP_HideIllusionsMsg', 194, 1), + (14615, 60024, 60024, 'OP_HouseAccessRemoveMsg', 158, 1), + (14616, 60024, 60024, 'OP_HouseAccessSetMsg', 157, 1), + (14617, 60024, 60024, 'OP_HouseCustomizationScreenMsg', 166, 1), + (14618, 60024, 60024, 'OP_HouseDefaultAccessSetMsg', 156, 1), + (14619, 60024, 60024, 'OP_HouseDeletedRemotelyMsg', 142, 1), + (14620, 60024, 60024, 'OP_HouseItemsList', 484, 1), + (14621, 60024, 60024, 'OP_HousingDataChangedMsg', 427, 1), + (14622, 60024, 60024, 'OP_HousingRestoreMsg', 428, 1), + (14623, 60024, 60024, 'OP_InspectPlayerMsg', 363, 1), + (14624, 60024, 60024, 'OP_InspectPlayerRequestMsg', 450, 1), + (14625, 60024, 60024, 'OP_InviteRequestMsg', 447, 1), + (14626, 60024, 60024, 'OP_InviteResponseMsg', 448, 1), + (14627, 60024, 60024, 'OP_InviteTargetResponseMsg', 449, 1), + (14628, 60024, 60024, 'OP_JoinGuildNotifyMsg', 359, 1), + (14629, 60024, 60024, 'OP_JournalQuestStoryline', 750, 1), + (14630, 60024, 60024, 'OP_KeymapDataMsg', 177, 1), + (14631, 60024, 60024, 'OP_KeymapLoadMsg', 175, 1), + (14632, 60024, 60024, 'OP_KeymapNoneMsg', 176, 1), + (14633, 60024, 60024, 'OP_KeymapSaveMsg', 178, 1), + (14634, 60024, 60024, 'OP_KnowledgebaseRequestMsg', 227, 1), + (14635, 60024, 60024, 'OP_KnowledgebaseResponseMsg', 228, 1), + (14636, 60024, 60024, 'OP_KnowledgeWindowSlotMappingMsg', 369, 1), + (14637, 60024, 60024, 'OP_KnownLanguagesMsg', 238, 1), + (14638, 60024, 60024, 'OP_Launchpad', 575, 1), + (14639, 60024, 60024, 'OP_LeaveGuildNotifyMsg', 358, 1), + (14640, 60024, 60024, 'OP_LevelChangedMsg', 261, 1), + (14641, 60024, 60024, 'OP_LFGGroupSearch', 504, 1), + (14642, 60024, 60024, 'OP_LFGUpdateMsg', 518, 1), + (14643, 60024, 60024, 'OP_LikeOption', 136, 1), + (14644, 60024, 60024, 'OP_LoadCalendarEvents', 578, 1), + (14645, 60024, 60024, 'OP_LoadWelcomeWindow', 560, 1), + (14646, 60024, 60024, 'OP_LoginByNumRequestMsg', 1, 1), + (14647, 60024, 60024, 'OP_LoginReplyMsg', 4, 1), + (14648, 60024, 60024, 'OP_LoginRequestMsg', 0, 1), + (14649, 60024, 60024, 'OP_LootItemsRequestMsg', 185, 1), + (14650, 60024, 60024, 'OP_Lottery', 706, 1), + (14651, 60024, 60024, 'OP_LSCheckAcctLockMsg', 204, 1), + (14652, 60024, 60024, 'OP_LsClientAlertlogReplyMsg', 242, 1), + (14653, 60024, 60024, 'OP_LsClientBaselogReplyMsg', 240, 1), + (14654, 60024, 60024, 'OP_LsClientCrashlogReplyMsg', 241, 1), + (14655, 60024, 60024, 'OP_LsClientVerifylogReplyMsg', 243, 1), + (14656, 60024, 60024, 'OP_LsRequestClientCrashLogMsg', 239, 1), + (14657, 60024, 60024, 'OP_LSServerLockMsg', 365, 1), + (14658, 60024, 60024, 'OP_MacroInitMsg', 258, 1), + (14659, 60024, 60024, 'OP_MacroUpdateMsg', 259, 1), + (14660, 60024, 60024, 'OP_MailCommitSendMessageMsg', 344, 1), + (14661, 60024, 60024, 'OP_MailDeleteMessageMsg', 340, 1), + (14662, 60024, 60024, 'OP_MailEventNotificationMsg', 411, 1), + (14663, 60024, 60024, 'OP_MailGetHeadersReplyMsg', 341, 1), + (14664, 60024, 60024, 'OP_MailGetMessageMsg', 338, 1), + (14665, 60024, 60024, 'OP_MailGetMessageReplyMsg', 342, 1), + (14666, 60024, 60024, 'OP_MailRemoveAttachFromMailMsg', 346, 1), + (14667, 60024, 60024, 'OP_MailSendMessageMsg', 339, 1), + (14668, 60024, 60024, 'OP_MailSendMessageReplyMsg', 343, 1), + (14669, 60024, 60024, 'OP_MailSendSystemMessageMsg', 345, 1), + (14670, 60024, 60024, 'OP_MakeGroupLeaderMsg', 87, 1), + (14671, 60024, 60024, 'OP_MapFogDataInitMsg', 395, 1), + (14672, 60024, 60024, 'OP_MapFogDataUpdateMsg', 396, 1), + (14673, 60024, 60024, 'OP_MapRequest', 521, 1), + (14674, 60024, 60024, 'OP_MarketAddFundsReply', 529, 1), + (14675, 60024, 60024, 'OP_MarketAddFundsRequest', 528, 1), + (14676, 60024, 60024, 'OP_MarketFundsUpdate', 526, 1), + (14677, 60024, 60024, 'OP_MarketPlaceItems', 537, 1), + (14678, 60024, 60024, 'OP_MarketPlacePrices', 532, 1), + (14679, 60024, 60024, 'OP_MarketPurchase', 531, 1), + (14680, 60024, 60024, 'OP_MentorPopup', 558, 1), + (14681, 60024, 60024, 'OP_MercHireWindow', 753, 1), + (14682, 60024, 60024, 'OP_MercUnknown', 754, 1), + (14683, 60024, 60024, 'OP_MigrateBoatTransportMsg', 252, 1), + (14684, 60024, 60024, 'OP_MigrateBoatTransportReplyMsg', 253, 1), + (14685, 60024, 60024, 'OP_MigrateClientToZoneReplyMsg', 82, 1), + (14686, 60024, 60024, 'OP_MigrateClientToZoneRequestMsg', 81, 1), + (14687, 60024, 60024, 'OP_ModifyGuildMsg', 266, 1), + (14688, 60024, 60024, 'OP_MonitorCharacterListMsg', 56, 1), + (14689, 60024, 60024, 'OP_MonitorCharacterListRequestMsg', 57, 1), + (14690, 60024, 60024, 'OP_MonitorReplyMsg', 55, 1), + (14691, 60024, 60024, 'OP_MOTDMsg', 44, 1), + (14692, 60024, 60024, 'OP_MoveableObjectPlacementCriteri', 160, 1), + (14693, 60024, 60024, 'OP_MoveLogUpdateMsg', 400, 1), + (14694, 60024, 60024, 'OP_NotifyApprenticeStoppedMentori', 408, 1), + (14695, 60024, 60024, 'OP_OfferQuestMsg', 401, 1), + (14696, 60024, 60024, 'OP_OnscreenMsgMsg', 264, 1), + (14697, 60024, 60024, 'OP_OpenCharCust', 561, 1), + (14698, 60024, 60024, 'OP_OutOfZoneMemberDataMsg', 96, 1), + (14699, 60024, 60024, 'OP_PayHouseUpkeepMsg', 159, 1), + (14700, 60024, 60024, 'OP_PerformCameraShakeMsg', 214, 1), + (14701, 60024, 60024, 'OP_PerformPlayerKnockbackMsg', 213, 1), + (14702, 60024, 60024, 'OP_PetOptions', 201, 1), + (14703, 60024, 60024, 'OP_PetOptionsResponse', 581, 1), + (14704, 60024, 60024, 'OP_PlayCharacterReplyMsg', 19, 1), + (14705, 60024, 60024, 'OP_PlayCharacterRequestMsg', 18, 1), + (14706, 60024, 60024, 'OP_PlayerHouseAccessUpdateMsg', 147, 1), + (14707, 60024, 60024, 'OP_PlayerHouseBaseScreenMsg', 145, 1), + (14708, 60024, 60024, 'OP_PlayerHouseCloseUIMsg', 149, 1), + (14709, 60024, 60024, 'OP_PlayerHouseDisplayStatusMsg', 148, 1), + (14710, 60024, 60024, 'OP_PlayerHousePurchaseScreenMsg', 146, 1), + (14711, 60024, 60024, 'OP_PlayerMadeInstances', 140, 1), + (14712, 60024, 60024, 'OP_PlayerMadeInstancesScreen', 139, 1), + (14713, 60024, 60024, 'OP_PlayerPollAnswer', 557, 1), + (14714, 60024, 60024, 'OP_PlayerPollPopup', 556, 1), + (14715, 60024, 60024, 'OP_PlayLon', 511, 1), + (14716, 60024, 60024, 'OP_PointOfInterest', 732, 1), + (14717, 60024, 60024, 'OP_PointOfInterest2', 733, 1), + (14718, 60024, 60024, 'OP_PopulateSkillMapsMsg', 215, 1), + (14719, 60024, 60024, 'OP_PositionBoatTransportMsg', 251, 1), + (14720, 60024, 60024, 'OP_PositionMoveableObject', 162, 1), + (14721, 60024, 60024, 'OP_PostPossessionMsg', 454, 1), + (14722, 60024, 60024, 'OP_PredictionUpdateMsg', 37, 1), + (14723, 60024, 60024, 'OP_PrePossessionMsg', 453, 1), + (14724, 60024, 60024, 'OP_PromoFlagsDetailsMsg', 374, 1), + (14725, 60024, 60024, 'OP_PublishHouse', 138, 1), + (14726, 60024, 60024, 'OP_PurchaseConsignmentLoreCheckRe', 407, 1), + (14727, 60024, 60024, 'OP_PurchaseConsignmentRequestMsg', 128, 1), + (14728, 60024, 60024, 'OP_QueAllBgSolo', 564, 1), + (14729, 60024, 60024, 'OP_QuestionnaireMsg', 260, 1), + (14730, 60024, 60024, 'OP_QuestJournalInspectMsg', 114, 1), + (14731, 60024, 60024, 'OP_QuestJournalOpenMsg', 113, 1), + (14732, 60024, 60024, 'OP_QuestJournalSetVisibleMsg', 115, 1), + (14733, 60024, 60024, 'OP_QuestJournalWaypointMsg', 116, 1), + (14734, 60024, 60024, 'OP_QuestReward', 320, 1), + (14735, 60024, 60024, 'OP_QuickbarInitMsg', 256, 1), + (14736, 60024, 60024, 'OP_QuickbarUpdateMsg', 257, 1), + (14737, 60024, 60024, 'OP_RaceRestrictionMsg', 439, 1), + (14738, 60024, 60024, 'OP_ReadBookPageMsg', 196, 1), + (14739, 60024, 60024, 'OP_ReadyForTakeOffMsg', 192, 1), + (14740, 60024, 60024, 'OP_ReadyToZoneMsg', 84, 1), + (14741, 60024, 60024, 'OP_RecipeBook', 538, 1), + (14742, 60024, 60024, 'OP_RecipeDetailsMsg', 72, 1), + (14743, 60024, 60024, 'OP_RecipeList', 744, 1), + (14744, 60024, 60024, 'OP_RecipeListUnknown', 593, 1), + (14745, 60024, 60024, 'OP_RelinquishHouseMsg', 153, 1), + (14746, 60024, 60024, 'OP_ReloadLocalizedTxtMsg', 355, 1), + (14747, 60024, 60024, 'OP_RemoteCmdMsg', 42, 1), + (14748, 60024, 60024, 'OP_RemoveClientFromGroupMsg', 85, 1), + (14749, 60024, 60024, 'OP_RemoveConcentrationMsg', 112, 1), + (14750, 60024, 60024, 'OP_RemoveGroupFromGroupMsg', 86, 1), + (14751, 60024, 60024, 'OP_RemoveSpellEffectMsg', 111, 1), + (14752, 60024, 60024, 'OP_RenameGuildMsg', 282, 1), + (14753, 60024, 60024, 'OP_ReplaceableSubMeshesMsg', 165, 1), + (14754, 60024, 60024, 'OP_ReportMsg', 380, 1), + (14755, 60024, 60024, 'OP_RequestCampMsg', 50, 1), + (14756, 60024, 60024, 'OP_RequestGuildBankEventDetailsMs', 280, 1), + (14757, 60024, 60024, 'OP_RequestGuildEventDetailsMsg', 271, 1), + (14758, 60024, 60024, 'OP_RequestGuildInfoMsg', 273, 1), + (14759, 60024, 60024, 'OP_RequestGuildMembershipMsg', 356, 1), + (14760, 60024, 60024, 'OP_RequestHelpRepathMsg', 206, 1), + (14761, 60024, 60024, 'OP_RequestRecipeDetailsMsg', 71, 1), + (14762, 60024, 60024, 'OP_RequestTargetLocMsg', 207, 1), + (14763, 60024, 60024, 'OP_Research', 745, 1), + (14764, 60024, 60024, 'OP_ResendWorldChannelsMsg', 443, 1), + (14765, 60024, 60024, 'OP_ReskinCharacterRequestMsg', 15, 1), + (14766, 60024, 60024, 'OP_RestartZoneMsg', 412, 1), + (14767, 60024, 60024, 'OP_RewardPackMsg', 281, 1), + (14768, 60024, 60024, 'OP_SatMsg', 189, 1), + (14769, 60024, 60024, 'OP_SavageBarInitMsg', 580, 1), + (14770, 60024, 60024, 'OP_SelectZoneTeleporterDestinatio', 354, 1), + (14771, 60024, 60024, 'OP_SendLatestRequestMsg', 97, 1), + (14772, 60024, 60024, 'OP_ServerPlayCharacterReplyMsg', 24, 1), + (14773, 60024, 60024, 'OP_ServerPlayCharacterRequestMsg', 23, 1), + (14774, 60024, 60024, 'OP_SetInstanceDisplayNameMsg', 440, 1), + (14775, 60024, 60024, 'OP_SetRemoteCmdsMsg', 41, 1), + (14776, 60024, 60024, 'OP_SetSocialMsg', 99, 1), + (14777, 60024, 60024, 'OP_ShaderCustomizationMsg', 164, 1), + (14778, 60024, 60024, 'OP_ShowCreateFromRecipeUIMsg', 219, 1), + (14779, 60024, 60024, 'OP_ShowIllusionsMsg', 193, 1), + (14780, 60024, 60024, 'OP_ShowItemCreationProcessUIMsg', 223, 1), + (14781, 60024, 60024, 'OP_ShowRecipeBookMsg', 226, 1), + (14782, 60024, 60024, 'OP_ShowZoneTeleporterDestinations', 353, 1), + (14783, 60024, 60024, 'OP_SitMsg', 187, 1), + (14784, 60024, 60024, 'OP_SkillInfoRequest', 514, 1), + (14785, 60024, 60024, 'OP_SkillInfoResponse', 515, 1), + (14786, 60024, 60024, 'OP_SOEAllAccess', 609, 1), + (14787, 60024, 60024, 'OP_SpellGainedMsg', 262, 1), + (14788, 60024, 60024, 'OP_StandMsg', 188, 1), + (14789, 60024, 60024, 'OP_StoodMsg', 190, 1), + (14790, 60024, 60024, 'OP_StopItemCreationMsg', 222, 1), + (14791, 60024, 60024, 'OP_StoppedLootingMsg', 186, 1), + (14792, 60024, 60024, 'OP_StopTrackingMsg', 391, 1), + (14793, 60024, 60024, 'OP_SubmitCharCust', 562, 1), + (14794, 60024, 60024, 'OP_SupplyDepot', 742, 1), + (14795, 60024, 60024, 'OP_SysClient', 218, 1), + (14796, 60024, 60024, 'OP_TeleportWithinZoneMsg', 79, 1), + (14797, 60024, 60024, 'OP_TeleportWithinZoneNoReloadMsg', 80, 1), + (14798, 60024, 60024, 'OP_TintWidgetsMsg', 170, 1), + (14799, 60024, 60024, 'OP_TitleUpdateMsg', 384, 1), + (14800, 60024, 60024, 'OP_TrackingUpdateMsg', 389, 1), + (14801, 60024, 60024, 'OP_TradeskillList', 711, 1), + (14802, 60024, 60024, 'OP_TraitsList', 734, 1), + (14803, 60024, 60024, 'OP_UIEvent', 527, 1), + (14804, 60024, 60024, 'OP_UIResetMsg', 174, 1), + (14805, 60024, 60024, 'OP_UISettingsResponseMsg', 173, 1), + (14806, 60024, 60024, 'OP_Unknown', 767, 1), + (14807, 60024, 60024, 'OP_UnknownNpcMsg', 373, 1), + (14808, 60024, 60024, 'OP_UpdateActivePublicZonesMsg', 372, 1), + (14809, 60024, 60024, 'OP_UpdateCharacterSheetMsg', 63, 1), + (14810, 60024, 60024, 'OP_UpdateClientPredFlagsMsg', 245, 1), + (14811, 60024, 60024, 'OP_UpdateDebugRadiiMsg', 379, 1), + (14812, 60024, 60024, 'OP_UpdateGroupMemberDataMsg', 388, 1), + (14813, 60024, 60024, 'OP_UpdateHouseAccessDataMsg', 144, 1), + (14814, 60024, 60024, 'OP_UpdateHouseDataMsg', 143, 1), + (14815, 60024, 60024, 'OP_UpdateInventoryMsg', 68, 1), + (14816, 60024, 60024, 'OP_UpdateItemCreationProcessUIMsg', 224, 1), + (14817, 60024, 60024, 'OP_UpdateMotdMsg', 208, 1), + (14818, 60024, 60024, 'OP_UpdateOpportunityMsg', 75, 1), + (14819, 60024, 60024, 'OP_UpdatePositionMsg', 39, 1), + (14820, 60024, 60024, 'OP_UpdateRaidMsg', 381, 1), + (14821, 60024, 60024, 'OP_UpdateRecipeBookMsg', 70, 1), + (14822, 60024, 60024, 'OP_UpdateSkillBookMsg', 73, 1), + (14823, 60024, 60024, 'OP_UpdateSkillsMsg', 74, 1), + (14824, 60024, 60024, 'OP_UpdateSpellBookMsg', 66, 1), + (14825, 60024, 60024, 'OP_UpdateTargetLocMsg', 62, 1), + (14826, 60024, 60024, 'OP_UpdateTargetMsg', 61, 1), + (14827, 60024, 60024, 'OP_UpdateTitleCmd', 494, 1), + (14828, 60024, 60024, 'OP_UseAdornment', 722, 1), + (14829, 60024, 60024, 'OP_VideoUploaded', 579, 1), + (14830, 60024, 60024, 'OP_VoiceChatChannel', 520, 1), + (14831, 60024, 60024, 'OP_VoiceChatServer', 738, 1), + (14832, 60024, 60024, 'OP_WaypointReplyMsg', 349, 1), + (14833, 60024, 60024, 'OP_WaypointRequestMsg', 348, 1), + (14834, 60024, 60024, 'OP_WaypointSelectMsg', 350, 1), + (14835, 60024, 60024, 'OP_WaypointUpdateMsg', 351, 1), + (14836, 60024, 60024, 'OP_Weakness', 583, 1), + (14837, 60024, 60024, 'OP_WhoQueryReplyMsg', 54, 1), + (14838, 60024, 60024, 'OP_WhoQueryRequestMsg', 53, 1), + (14839, 60024, 60024, 'OP_WorldDataChangeMsg', 410, 1), + (14840, 60024, 60024, 'OP_WorldDataUpdateMsg', 237, 1), + (14841, 60024, 60024, 'OP_WorldListMsg', 8, 1), + (14842, 60024, 60024, 'OP_WorldPingMsg', 399, 1), + (14843, 60024, 60024, 'OP_WorldShutdownUpdateMsg', 403, 1), + (14844, 60024, 60024, 'OP_WorldStatusChangeMsg', 6, 1), + (14845, 60024, 60024, 'OP_WorldTravelAvail', 572, 1), + (14846, 60024, 60024, 'OP_WSAcctLockStatusMsg', 205, 1), + (14847, 60024, 60024, 'OP_WSCreateCharacterReplyMsg', 14, 1), + (14848, 60024, 60024, 'OP_WSCreateCharacterRequestMsg', 13, 1), + (14849, 60024, 60024, 'OP_WSLoginRequestMsg', 2, 1), + (14850, 60024, 60024, 'OP_WSServerHideMsg', 366, 1), + (14851, 60024, 60024, 'OP_WSServerLockMsg', 364, 1), + (14852, 60024, 60024, 'OP_WSStatusReplyMsg', 5, 1), + (14853, 60024, 60024, 'OP_ZoneBgInstanceList', 568, 1), + (14854, 60024, 60024, 'OP_ZoneInfoMsg', 33, 1), + (14855, 60024, 60024, 'OP_ZoneInstanceCreateReplyMsg', 30, 1), + (14856, 60024, 60024, 'OP_ZoneInstanceDestroyedMsg', 31, 1), + (14857, 60024, 60024, 'OP_ZoneMOTDMsg', 45, 1), + (14858, 60024, 60024, 'OP_ZonesStatusMsg', 103, 1), + (14859, 60024, 60024, 'OP_ZonesStatusRequestMsg', 102, 1), + (14860, 60024, 60024, 'OP_ZoneToFriendReplyMsg', 284, 1), + (14861, 60024, 60024, 'OP_ZoneToFriendRequestMsg', 283, 1), + (15327, 60036, 60069, 'OP_AchievementUpdateMsg', 749, 1), + (15328, 60036, 60069, 'OP_AddSocialStructureStandingMsg', 250, 1), + (15329, 60036, 60069, 'OP_AdvancementRequestMsg', 395, 1), + (15330, 60036, 60069, 'OP_AdventureList', 489, 1), + (15331, 60036, 60069, 'OP_AFKUpdateMsg', 371, 1), + (15332, 60036, 60069, 'OP_AfterInvSpellUpdate', 69, 1), + (15333, 60036, 60069, 'OP_AllCharactersDescReplyMsg', 10, 1), + (15334, 60036, 60069, 'OP_AllCharactersDescRequestMsg', 9, 1), + (15335, 60036, 60069, 'OP_AllWSDescRequestMsg', 7, 1), + (15336, 60036, 60069, 'OP_AnonUpdateMsg', 372, 1), + (15337, 60036, 60069, 'OP_ArenaCreate', 457, 1), + (15338, 60036, 60069, 'OP_ArenaGameTypesMsg', 446, 1), + (15339, 60036, 60069, 'OP_ArenaList', 458, 1), + (15340, 60036, 60069, 'OP_ArenaWindow', 466, 1), + (15341, 60036, 60069, 'OP_AttackAllowed', 501, 1), + (15342, 60036, 60069, 'OP_AttackNotAllowed', 502, 1), + (15343, 60036, 60069, 'OP_AuctionAbortMsg', 437, 1), + (15344, 60036, 60069, 'OP_AuctionCharacter', 434, 1), + (15345, 60036, 60069, 'OP_AuctionCharacterReply', 435, 1), + (15346, 60036, 60069, 'OP_AuctionCoin', 432, 1), + (15347, 60036, 60069, 'OP_AuctionCoinReply', 433, 1), + (15348, 60036, 60069, 'OP_AuctionCommitMsg', 436, 1), + (15349, 60036, 60069, 'OP_AuctionItem', 430, 1), + (15350, 60036, 60069, 'OP_AuctionItemReply', 431, 1), + (15351, 60036, 60069, 'OP_AuditAuctionEventMsg', 447, 1), + (15352, 60036, 60069, 'OP_AvatarCreatedMsg', 46, 1), + (15353, 60036, 60069, 'OP_AvatarDestroyedMsg', 47, 1), + (15354, 60036, 60069, 'OP_AvatarUpdateMsg', 361, 1), + (15355, 60036, 60069, 'OP_BadLanguageFilter', 520, 1), + (15356, 60036, 60069, 'OP_BagOptions', 503, 1), + (15357, 60036, 60069, 'OP_BeginItemCreationMsg', 221, 1), + (15358, 60036, 60069, 'OP_BeginTrackingMsg', 391, 1), + (15359, 60036, 60069, 'OP_BioUpdateMsg', 363, 1), + (15360, 60036, 60069, 'OP_BrokerAddBag', 293, 1), + (15361, 60036, 60069, 'OP_BrokerRemoveBag', 294, 1), + (15362, 60036, 60069, 'OP_BrokerSellList', 692, 1), + (15363, 60036, 60069, 'OP_BuyPlayerHouseMsg', 150, 1), + (15364, 60036, 60069, 'OP_BuyPlayerHouseTintMsg', 151, 1), + (15365, 60036, 60069, 'OP_CampAbortedMsg', 52, 1), + (15366, 60036, 60069, 'OP_CampClientMsg', 388, 1), + (15367, 60036, 60069, 'OP_CampStartedMsg', 51, 1), + (15368, 60036, 60069, 'OP_CancelCreateFromRecipeMsg', 220, 1), + (15369, 60036, 60069, 'OP_CancelledFeignMsg', 216, 1), + (15370, 60036, 60069, 'OP_CancelMoveObjectModeMsg', 163, 1), + (15371, 60036, 60069, 'OP_CancelSpellCast', 490, 1), + (15372, 60036, 60069, 'OP_ChangeServerControlFlagMsg', 247, 1), + (15373, 60036, 60069, 'OP_ChangeZoneMsg', 77, 1), + (15374, 60036, 60069, 'OP_CharacterAchievements', 748, 1), + (15375, 60036, 60069, 'OP_CharacterCreatedDungeons', 552, 1), + (15376, 60036, 60069, 'OP_CharacterCurrency', 747, 1), + (15377, 60036, 60069, 'OP_CharacterHousingList', 508, 1), + (15378, 60036, 60069, 'OP_CharacterLinkdeadMsg', 415, 1), + (15379, 60036, 60069, 'OP_CharacterMerc', 65, 1), + (15380, 60036, 60069, 'OP_CharacterMounts', 585, 1), + (15381, 60036, 60069, 'OP_CharacterPet', 64, 1), + (15382, 60036, 60069, 'OP_CharNameChangedMsg', 352, 1), + (15383, 60036, 60069, 'OP_CharRenamed', 713, 1), + (15384, 60036, 60069, 'OP_CharTransferCommitReplyMsg', 423, 1), + (15385, 60036, 60069, 'OP_CharTransferCommitRequestMsg', 421, 1), + (15386, 60036, 60069, 'OP_CharTransferReplyMsg', 419, 1), + (15387, 60036, 60069, 'OP_CharTransferRequestMsg', 418, 1), + (15388, 60036, 60069, 'OP_CharTransferRollbackReplyMsg', 422, 1), + (15389, 60036, 60069, 'OP_CharTransferRollbackRequestMsg', 420, 1), + (15390, 60036, 60069, 'OP_CharTransferStartReplyMsg', 417, 1), + (15391, 60036, 60069, 'OP_CharTransferStartRequestMsg', 416, 1), + (15392, 60036, 60069, 'OP_CharTransferValidateReplyMsg', 439, 1), + (15393, 60036, 60069, 'OP_CharTransferValidateRequestMsg', 438, 1), + (15394, 60036, 60069, 'OP_ChatCreateChannelMsg', 286, 1), + (15395, 60036, 60069, 'OP_ChatFiltersMsg', 335, 1), + (15396, 60036, 60069, 'OP_ChatJoinChannelMsg', 287, 1), + (15397, 60036, 60069, 'OP_ChatLeaveChannelMsg', 289, 1), + (15398, 60036, 60069, 'OP_ChatRelationshipUpdateMsg', 184, 1), + (15399, 60036, 60069, 'OP_ChatSendFriendsMsg', 296, 1), + (15400, 60036, 60069, 'OP_ChatSendIgnoresMsg', 297, 1), + (15401, 60036, 60069, 'OP_ChatTellChannelMsg', 290, 1), + (15402, 60036, 60069, 'OP_ChatTellUserMsg', 291, 1), + (15403, 60036, 60069, 'OP_ChatToggleFriendMsg', 292, 1), + (15404, 60036, 60069, 'OP_ChatToggleIgnoreMsg', 295, 1), + (15405, 60036, 60069, 'OP_ChatWhoChannelMsg', 288, 1), + (15406, 60036, 60069, 'OP_ClearDataMsg', 98, 1), + (15407, 60036, 60069, 'OP_ClearForLandingMsg', 492, 1), + (15408, 60036, 60069, 'OP_ClearForTakeOffMsg', 191, 1), + (15409, 60036, 60069, 'OP_ClientCmdMsg', 58, 1), + (15410, 60036, 60069, 'OP_ClientFellMsg', 386, 1), + (15411, 60036, 60069, 'OP_ClientIdleBeginMsg', 406, 1), + (15412, 60036, 60069, 'OP_ClientIdleEndMsg', 407, 1), + (15413, 60036, 60069, 'OP_ClientInDeathRegionMsg', 387, 1), + (15414, 60036, 60069, 'OP_ClientTeleportRequestMsg', 78, 1), + (15415, 60036, 60069, 'OP_ClientTeleportToLocationMsg', 245, 1), + (15416, 60036, 60069, 'OP_CloseGroupInviteWindowMsg', 398, 1), + (15417, 60036, 60069, 'OP_CollectAllHouseItemsMsg', 152, 1), + (15418, 60036, 60069, 'OP_ConsignItemRequestMsg', 126, 1), + (15419, 60036, 60069, 'OP_ConsignItemResponseMsg', 127, 1), + (15420, 60036, 60069, 'OP_ConsignmentCloseStoreMsg', 125, 1), + (15421, 60036, 60069, 'OP_ConsignRemoveItemsMsg', 379, 1), + (15422, 60036, 60069, 'OP_ConsignViewCreateMsg', 376, 1), + (15423, 60036, 60069, 'OP_ConsignViewGetPageMsg', 377, 1), + (15424, 60036, 60069, 'OP_ConsignViewReleaseMsg', 378, 1), + (15425, 60036, 60069, 'OP_ConsignViewSortMsg', 384, 1), + (15426, 60036, 60069, 'OP_CorruptedClientMsg', 410, 1), + (15427, 60036, 60069, 'OP_CreateBoatTransportsMsg', 251, 1), + (15428, 60036, 60069, 'OP_CreateCharacterDungeon', 548, 1), + (15429, 60036, 60069, 'OP_CreateCharacterReplyMsg', 12, 1), + (15430, 60036, 60069, 'OP_CreateCharacterRequestMsg', 11, 1), + (15431, 60036, 60069, 'OP_CreateCharFromCBBReplyMsg', 427, 1), + (15432, 60036, 60069, 'OP_CreateCharFromCBBRequestMsg', 426, 1), + (15433, 60036, 60069, 'OP_CreateGuildReplyMsg', 120, 1), + (15434, 60036, 60069, 'OP_CreateGuildRequestMsg', 119, 1), + (15435, 60036, 60069, 'OP_CreateZoneInstanceMsg', 29, 1), + (15436, 60036, 60069, 'OP_CsCategoryRequestMsg', 368, 1), + (15437, 60036, 60069, 'OP_CsCategoryResponseMsg', 369, 1), + (15438, 60036, 60069, 'OP_CSTicketAddCommentMsg', 234, 1), + (15439, 60036, 60069, 'OP_CSTicketChangeNotificationMsg', 236, 1), + (15440, 60036, 60069, 'OP_CSTicketCommentRequestMsg', 231, 1), + (15441, 60036, 60069, 'OP_CSTicketCommentResponseMsg', 232, 1), + (15442, 60036, 60069, 'OP_CSTicketCreateMsg', 233, 1), + (15443, 60036, 60069, 'OP_CSTicketDeleteMsg', 235, 1), + (15444, 60036, 60069, 'OP_CSTicketHeaderRequestMsg', 229, 1), + (15445, 60036, 60069, 'OP_CSTicketInfoMsg', 230, 1), + (15446, 60036, 60069, 'OP_CSToolAccessResponseMsg', 389, 1), + (15447, 60036, 60069, 'OP_CSToolsRequestMsg', 248, 1), + (15448, 60036, 60069, 'OP_CSToolsResponseMsg', 249, 1), + (15449, 60036, 60069, 'OP_CurrentPet', 486, 1), + (15450, 60036, 60069, 'OP_CustomizationPurchaseRequestMs', 167, 1), + (15451, 60036, 60069, 'OP_CustomizationReplyMsg', 169, 1), + (15452, 60036, 60069, 'OP_CustomizationSetRequestMsg', 168, 1), + (15453, 60036, 60069, 'OP_CustomizeHouseDisplay', 738, 1), + (15454, 60036, 60069, 'OP_DailyObjectives', 598, 1), + (15455, 60036, 60069, 'OP_DefaultGroupOptionsMsg', 198, 1), + (15456, 60036, 60069, 'OP_DefaultGroupOptionsRequestMsg', 197, 1), + (15457, 60036, 60069, 'OP_DeleteCharacterReplyMsg', 17, 1), + (15458, 60036, 60069, 'OP_DeleteCharacterRequestMsg', 16, 1), + (15459, 60036, 60069, 'OP_DeleteGuildMsg', 123, 1), + (15460, 60036, 60069, 'OP_DestUpdateReq', 210, 1), + (15461, 60036, 60069, 'OP_DialogCloseMsg', 110, 1), + (15462, 60036, 60069, 'OP_DialogSelectMsg', 109, 1), + (15463, 60036, 60069, 'OP_DispatchClientCmdMsg', 60, 1), + (15464, 60036, 60069, 'OP_DispatchESMsg', 59, 1), + (15465, 60036, 60069, 'OP_DispatchMsg', 452, 1), + (15466, 60036, 60069, 'OP_DispatchSpellCmdMsg', 179, 1), + (15467, 60036, 60069, 'OP_DisplayDebugNLLPointsMsg', 255, 1), + (15468, 60036, 60069, 'OP_DisplayEventMsg', 453, 1), + (15469, 60036, 60069, 'OP_DisplayExchangeScreenMsg', 445, 1), + (15470, 60036, 60069, 'OP_DisplayGroupOptionsScreenMsg', 200, 1), + (15471, 60036, 60069, 'OP_DisplayInnVisitScreenMsg', 202, 1), + (15472, 60036, 60069, 'OP_DisplayMailScreenMsg', 405, 1), + (15473, 60036, 60069, 'OP_DisplayTSEventReactionMsg', 225, 1), + (15474, 60036, 60069, 'OP_DisplayWarningMsg', 266, 1), + (15475, 60036, 60069, 'OP_DoneLoadingEntityResourcesMsg', 36, 1), + (15476, 60036, 60069, 'OP_DoneLoadingZoneResourcesMsg', 34, 1), + (15477, 60036, 60069, 'OP_DoneSendingInitialEntitiesMsg', 35, 1), + (15478, 60036, 60069, 'OP_DressingRoom', 511, 1), + (15479, 60036, 60069, 'OP_DumpSchedulerMsg', 203, 1), + (15480, 60036, 60069, 'OP_DungeonMakerEnter', 549, 1), + (15481, 60036, 60069, 'OP_DungeonMakerItemRequest', 551, 1), + (15482, 60036, 60069, 'OP_DungeonMakerItemResponse', 583, 1), + (15483, 60036, 60069, 'OP_DungeonMakerToolboxList', 553, 1), + (15484, 60036, 60069, 'OP_DungeonMakerUnknown', 554, 1), + (15485, 60036, 60069, 'OP_DungeonMakerUnknown1', 555, 1), + (15486, 60036, 60069, 'OP_DungeonPlayAsAvatarList', 752, 1), + (15487, 60036, 60069, 'OP_DungeonPlayAsAvatarSelected', 753, 1), + (15488, 60036, 60069, 'OP_EncounterBrokenMsg', 264, 1), + (15489, 60036, 60069, 'OP_EnterHouseMsg', 154, 1), + (15490, 60036, 60069, 'OP_EnterMoveObjectModeMsg', 161, 1), + (15491, 60036, 60069, 'OP_EntityVerbsReplyMsg', 181, 1), + (15492, 60036, 60069, 'OP_EntityVerbsRequestMsg', 180, 1), + (15493, 60036, 60069, 'OP_EntityVerbsVerbMsg', 182, 1), + (15494, 60036, 60069, 'OP_EqArenaResultsCmd', 703, 1), + (15495, 60036, 60069, 'OP_EqAvailWorldChannelsCmd', 690, 1), + (15496, 60036, 60069, 'OP_EqBetaCopyRequest', 609, 1), + (15497, 60036, 60069, 'OP_EqCannedEmoteCmd', 632, 1), + (15498, 60036, 60069, 'OP_EqChatChannelUpdateCmd', 688, 1), + (15499, 60036, 60069, 'OP_EqChoiceWinCmd', 669, 1), + (15500, 60036, 60069, 'OP_EqCloseWindowCmd', 661, 1), + (15501, 60036, 60069, 'OP_EqCollectionFilterCmd', 648, 1), + (15502, 60036, 60069, 'OP_EqCollectionItemCmd', 649, 1), + (15503, 60036, 60069, 'OP_EqCollectionUpdateCmd', 647, 1), + (15504, 60036, 60069, 'OP_EqConsignmentItemsCmd', 693, 1), + (15505, 60036, 60069, 'OP_EqCreateGhostCmd', 614, 1), + (15506, 60036, 60069, 'OP_EqCreateListBoxCmd', 629, 1), + (15507, 60036, 60069, 'OP_EqCreateSignWidgetCmd', 616, 1), + (15508, 60036, 60069, 'OP_EqCreateWidgetCmd', 615, 1), + (15509, 60036, 60069, 'OP_EqDebugPVDCmd', 682, 1), + (15510, 60036, 60069, 'OP_EqDestroyGhostCmd', 617, 1), + (15511, 60036, 60069, 'OP_EqDialogCloseCmd', 645, 1), + (15512, 60036, 60069, 'OP_EqDialogOpenCmd', 644, 1), + (15513, 60036, 60069, 'OP_EqDisplaySpellFailCmd', 665, 1), + (15514, 60036, 60069, 'OP_EqDisplayTextCmd', 613, 1), + (15515, 60036, 60069, 'OP_EqDrawablePathGraphCmd', 643, 1), + (15516, 60036, 60069, 'OP_EqEnableGameEventCmd', 675, 1), + (15517, 60036, 60069, 'OP_EqEnableWindowCmd', 677, 1), + (15518, 60036, 60069, 'OP_EqExamineInfoCmd', 660, 1), + (15519, 60036, 60069, 'OP_EqFactionUpdateCmd', 646, 1), + (15520, 60036, 60069, 'OP_EqFlashWindowCmd', 678, 1), + (15521, 60036, 60069, 'OP_EqGetProbsCmd', 686, 1), + (15522, 60036, 60069, 'OP_EqGroupMemberRemovedCmd', 639, 1), + (15523, 60036, 60069, 'OP_EqGuildBankEventActionCmd', 704, 1), + (15524, 60036, 60069, 'OP_EqGuildBankExamineInfoCmd', 705, 1), + (15525, 60036, 60069, 'OP_EqHearChainEffectCmd', 640, 1), + (15526, 60036, 60069, 'OP_EqHearChatCmd', 612, 1), + (15527, 60036, 60069, 'OP_EqHearCombatCmd', 621, 1), + (15528, 60036, 60069, 'OP_EqHearConsiderCmd', 627, 1), + (15529, 60036, 60069, 'OP_EqHearDeathCmd', 638, 1), + (15530, 60036, 60069, 'OP_EQHearDispellCmd', 750, 1), + (15531, 60036, 60069, 'OP_EqHearDrowningCmd', 637, 1), + (15532, 60036, 60069, 'OP_EqHearHealCmd', 687, 1), + (15533, 60036, 60069, 'OP_EqHearPlayFlavorCmd', 680, 1), + (15534, 60036, 60069, 'OP_EQHearProcCmd', 623, 1), + (15535, 60036, 60069, 'OP_EQHearResEffectCmd', 624, 1), + (15536, 60036, 60069, 'OP_EqHearSpellCastCmd', 622, 1), + (15537, 60036, 60069, 'OP_EqHearSpellFizzleCmd', 626, 1), + (15538, 60036, 60069, 'OP_EqHearSpellInterruptCmd', 625, 1), + (15539, 60036, 60069, 'OP_EqHearSpellNoLandCmd', 706, 1), + (15540, 60036, 60069, 'OP_EQHearThreatCmd', 744, 1), + (15541, 60036, 60069, 'OP_EqHelpPathClearCmd', 658, 1), + (15542, 60036, 60069, 'OP_EqHelpPathCmd', 657, 1), + (15543, 60036, 60069, 'OP_EqInspectPCResultsCmd', 642, 1), + (15544, 60036, 60069, 'OP_EqInstructionWindowCloseCmd', 672, 1), + (15545, 60036, 60069, 'OP_EqInstructionWindowCmd', 671, 1), + (15546, 60036, 60069, 'OP_EqInstructionWindowGoalCmd', 673, 1), + (15547, 60036, 60069, 'OP_EqInstructionWindowTaskCmd', 674, 1), + (15548, 60036, 60069, 'OP_EqJunctionListCmd', 663, 1), + (15549, 60036, 60069, 'OP_EqMapExplorationCmd', 696, 1), + (15550, 60036, 60069, 'OP_EqMentoring', 651, 1), + (15551, 60036, 60069, 'OP_EqPlaySound3DCmd', 635, 1), + (15552, 60036, 60069, 'OP_EqPlaySoundCmd', 634, 1), + (15553, 60036, 60069, 'OP_EqPlayVoiceCmd', 636, 1), + (15554, 60036, 60069, 'OP_EqQuestGroupCmd', 653, 1), + (15555, 60036, 60069, 'OP_EqQuestionnaireCmd', 684, 1), + (15556, 60036, 60069, 'OP_EqQuestJournalReplyCmd', 652, 1), + (15557, 60036, 60069, 'OP_EqQuestJournalUpdateCmd', 650, 1), + (15558, 60036, 60069, 'OP_EqReceiveOfferCmd', 641, 1), + (15559, 60036, 60069, 'OP_EqResurrectedCmd', 668, 1), + (15560, 60036, 60069, 'OP_EqSetControlGhostCmd', 619, 1), + (15561, 60036, 60069, 'OP_EqSetDebugPathPointsCmd', 630, 1), + (15562, 60036, 60069, 'OP_EqSetDefaultVerbCmd', 670, 1), + (15563, 60036, 60069, 'OP_EqSetPOVGhostCmd', 620, 1), + (15564, 60036, 60069, 'OP_EqShowBookCmd', 683, 1), + (15565, 60036, 60069, 'OP_EqShowDeathWindowCmd', 664, 1), + (15566, 60036, 60069, 'OP_EqShowWindowCmd', 676, 1), + (15567, 60036, 60069, 'OP_EqSpellCastEndCmd', 667, 1), + (15568, 60036, 60069, 'OP_EqSpellCastStartCmd', 666, 1), + (15569, 60036, 60069, 'OP_EqSpellMoveToRangeAndRetryCmd', 698, 1), + (15570, 60036, 60069, 'OP_EqStartBrokerCmd', 695, 1), + (15571, 60036, 60069, 'OP_EqStateCmd', 633, 1), + (15572, 60036, 60069, 'OP_EqStoreLogCmd', 697, 1), + (15573, 60036, 60069, 'OP_EqUpdateBankCmd', 659, 1), + (15574, 60036, 60069, 'OP_EqUpdateGhostCmd', 618, 1), + (15575, 60036, 60069, 'OP_EqUpdateLootCmd', 662, 1), + (15576, 60036, 60069, 'OP_EqUpdateMerchantCmd', 654, 1), + (15577, 60036, 60069, 'OP_EqUpdatePlayerMailCmd', 699, 1), + (15578, 60036, 60069, 'OP_EqUpdatePlayerTradeCmd', 656, 1), + (15579, 60036, 60069, 'OP_EqUpdateSignWidgetCmd', 681, 1), + (15580, 60036, 60069, 'OP_EqUpdateStoreCmd', 655, 1), + (15581, 60036, 60069, 'OP_EqUpdateSubClassesCmd', 628, 1), + (15582, 60036, 60069, 'OP_EqUpdateTargetCmd', 691, 1), + (15583, 60036, 60069, 'OP_EqWhoChannelQueryReplyCmd', 689, 1), + (15584, 60036, 60069, 'OP_ESInitMsg', 25, 1), + (15585, 60036, 60069, 'OP_ESLoginRequestMsg', 3, 1), + (15586, 60036, 60069, 'OP_ESReadyForClientsMsg', 26, 1), + (15587, 60036, 60069, 'OP_ESStatusMsg', 100, 1), + (15588, 60036, 60069, 'OP_ESWeatherRequestEndMsg', 105, 1), + (15589, 60036, 60069, 'OP_ESWeatherRequestMsg', 104, 1), + (15590, 60036, 60069, 'OP_ESZoneInstanceStatusMsg', 101, 1), + (15591, 60036, 60069, 'OP_ExamineConsignmentRequestMsg', 171, 1), + (15592, 60036, 60069, 'OP_ExamineConsignmentResponseMsg', 172, 1), + (15593, 60036, 60069, 'OP_ExamineInfoRequestMsg', 256, 1), + (15594, 60036, 60069, 'OP_ExamineItemRequestMsg', 195, 1), + (15595, 60036, 60069, 'OP_ExitHouseMsg', 155, 1), + (15596, 60036, 60069, 'OP_ExpectClientAsCharacterReplyMs', 22, 1), + (15597, 60036, 60069, 'OP_ExpectClientAsCharacterRequest', 32, 1), + (15598, 60036, 60069, 'OP_ExpPurchWindow', 729, 1), + (15599, 60036, 60069, 'OP_FellowshipExpMsg', 122, 1), + (15600, 60036, 60069, 'OP_FlightPathsMsg', 414, 1), + (15601, 60036, 60069, 'OP_GameWorldTimeMsg', 43, 1), + (15602, 60036, 60069, 'OP_PaperdollImage', 578, 1), + (15603, 60036, 60069, 'OP_GetAuctionAssetIDMsg', 442, 1), + (15604, 60036, 60069, 'OP_GetAuctionAssetIDReplyMsg', 443, 1), + (15605, 60036, 60069, 'OP_GetAvatarAccessRequestForCSToo', 394, 1), + (15606, 60036, 60069, 'OP_GetCharacterSerializedReplyMsg', 425, 1), + (15607, 60036, 60069, 'OP_GetCharacterSerializedRequestM', 424, 1), + (15608, 60036, 60069, 'OP_GroupCreatedMsg', 88, 1), + (15609, 60036, 60069, 'OP_GroupDestroyedMsg', 89, 1), + (15610, 60036, 60069, 'OP_GroupLeaderChangedMsg', 93, 1), + (15611, 60036, 60069, 'OP_GroupMemberAddedMsg', 90, 1), + (15612, 60036, 60069, 'OP_GroupMemberRemovedMsg', 91, 1), + (15613, 60036, 60069, 'OP_GroupOptionsMsg', 199, 1), + (15614, 60036, 60069, 'OP_GroupRemovedFromGroupMsg', 92, 1), + (15615, 60036, 60069, 'OP_GroupResendOOZDataMsg', 94, 1), + (15616, 60036, 60069, 'OP_GroupSettingsChangedMsg', 95, 1), + (15617, 60036, 60069, 'OP_GuildBankActionMsg', 275, 1), + (15618, 60036, 60069, 'OP_GuildBankActionResponseMsg', 276, 1), + (15619, 60036, 60069, 'OP_GuildBankEventListMsg', 280, 1), + (15620, 60036, 60069, 'OP_GuildBankItemDetailsRequestMsg', 277, 1), + (15621, 60036, 60069, 'OP_GuildBankItemDetailsResponseMs', 278, 1), + (15622, 60036, 60069, 'OP_GuildBankUpdateMsg', 279, 1), + (15623, 60036, 60069, 'OP_GuildEventActionMsg', 270, 1), + (15624, 60036, 60069, 'OP_GuildEventAddMsg', 269, 1), + (15625, 60036, 60069, 'OP_GuildEventDetailsMsg', 273, 1), + (15626, 60036, 60069, 'OP_GuildEventListMsg', 271, 1), + (15627, 60036, 60069, 'OP_GuildEventMsg', 268, 1), + (15628, 60036, 60069, 'OP_GuildMembershipResponseMsg', 358, 1), + (15629, 60036, 60069, 'OP_GuildRecruiting', 709, 1), + (15630, 60036, 60069, 'OP_GuildRecruitingDetails', 710, 1), + (15631, 60036, 60069, 'OP_GuildRecruitingImage', 711, 1), + (15632, 60036, 60069, 'OP_GuildRecruitingMemberInfo', 708, 1), + (15633, 60036, 60069, 'OP_GuildsayMsg', 121, 1), + (15634, 60036, 60069, 'OP_GuildStatusUpdate', 702, 1), + (15635, 60036, 60069, 'OP_GuildUpdateMsg', 124, 1), + (15636, 60036, 60069, 'OP_HeritageMsg', 10001, 1), + (15637, 60036, 60069, 'OP_HideIllusionsMsg', 194, 1), + (15638, 60036, 60069, 'OP_HouseAccessRemoveMsg', 158, 1), + (15639, 60036, 60069, 'OP_HouseAccessSetMsg', 157, 1), + (15640, 60036, 60069, 'OP_HouseCustomizationScreenMsg', 166, 1), + (15641, 60036, 60069, 'OP_HouseDefaultAccessSetMsg', 156, 1), + (15642, 60036, 60069, 'OP_HouseDeletedRemotelyMsg', 142, 1), + (15643, 60036, 60069, 'OP_HouseItemsList', 485, 1), + (15644, 60036, 60069, 'OP_HousingDataChangedMsg', 428, 1), + (15645, 60036, 60069, 'OP_HousingRestoreMsg', 429, 1), + (15646, 60036, 60069, 'OP_InspectPlayerMsg', 364, 1), + (15647, 60036, 60069, 'OP_InspectPlayerRequestMsg', 451, 1), + (15648, 60036, 60069, 'OP_InviteRequestMsg', 448, 1), + (15649, 60036, 60069, 'OP_InviteResponseMsg', 449, 1), + (15650, 60036, 60069, 'OP_InviteTargetResponseMsg', 450, 1), + (15651, 60036, 60069, 'OP_JoinGuildNotifyMsg', 360, 1), + (15652, 60036, 60069, 'OP_JournalQuestStoryline', 751, 1), + (15653, 60036, 60069, 'OP_KeymapDataMsg', 177, 1), + (15654, 60036, 60069, 'OP_KeymapLoadMsg', 175, 1), + (15655, 60036, 60069, 'OP_KeymapNoneMsg', 176, 1), + (15656, 60036, 60069, 'OP_KeymapSaveMsg', 178, 1), + (15657, 60036, 60069, 'OP_KnowledgebaseRequestMsg', 227, 1), + (15658, 60036, 60069, 'OP_KnowledgebaseResponseMsg', 228, 1), + (15659, 60036, 60069, 'OP_KnowledgeWindowSlotMappingMsg', 370, 1), + (15660, 60036, 60069, 'OP_KnownLanguagesMsg', 239, 1), + (15661, 60036, 60069, 'OP_Launchpad', 576, 1), + (15662, 60036, 60069, 'OP_LeaveGuildNotifyMsg', 359, 1), + (15663, 60036, 60069, 'OP_LevelChangedMsg', 262, 1), + (15664, 60036, 60069, 'OP_LFGGroupSearch', 505, 1), + (15665, 60036, 60069, 'OP_LFGUpdateMsg', 519, 1), + (15666, 60036, 60069, 'OP_LikeOption', 136, 1), + (15667, 60036, 60069, 'OP_LoadCalendarEvents', 579, 1), + (15668, 60036, 60069, 'OP_LoadWelcomeWindow', 561, 1), + (15669, 60036, 60069, 'OP_LoginByNumRequestMsg', 1, 1), + (15670, 60036, 60069, 'OP_LoginReplyMsg', 4, 1), + (15671, 60036, 60069, 'OP_LoginRequestMsg', 0, 1), + (15672, 60036, 60069, 'OP_LootItemsRequestMsg', 185, 1), + (15673, 60036, 60069, 'OP_Lottery', 707, 1), + (15674, 60036, 60069, 'OP_LSCheckAcctLockMsg', 204, 1), + (15675, 60036, 60069, 'OP_LsClientAlertlogReplyMsg', 243, 1), + (15676, 60036, 60069, 'OP_LsClientBaselogReplyMsg', 241, 1), + (15677, 60036, 60069, 'OP_LsClientCrashlogReplyMsg', 242, 1), + (15678, 60036, 60069, 'OP_LsClientVerifylogReplyMsg', 244, 1), + (15679, 60036, 60069, 'OP_LsRequestClientCrashLogMsg', 240, 1), + (15680, 60036, 60069, 'OP_LSServerLockMsg', 366, 1), + (15681, 60036, 60069, 'OP_MacroInitMsg', 259, 1), + (15682, 60036, 60069, 'OP_MacroUpdateMsg', 260, 1), + (15683, 60036, 60069, 'OP_MailCommitSendMessageMsg', 344, 1), + (15684, 60036, 60069, 'OP_MailDeleteMessageMsg', 340, 1), + (15685, 60036, 60069, 'OP_MailEventNotificationMsg', 412, 1), + (15686, 60036, 60069, 'OP_MailGetHeadersReplyMsg', 341, 1), + (15687, 60036, 60069, 'OP_MailGetMessageMsg', 338, 1), + (15688, 60036, 60069, 'OP_MailGetMessageReplyMsg', 342, 1), + (15689, 60036, 60069, 'OP_MailRemoveAttachFromMailMsg', 346, 1), + (15690, 60036, 60069, 'OP_MailSendMessageMsg', 339, 1), + (15691, 60036, 60069, 'OP_MailSendMessageReplyMsg', 343, 1), + (15692, 60036, 60069, 'OP_MailSendSystemMessageMsg', 345, 1), + (15693, 60036, 60069, 'OP_MakeGroupLeaderMsg', 87, 1), + (15694, 60036, 60069, 'OP_MapFogDataInitMsg', 396, 1), + (15695, 60036, 60069, 'OP_MapFogDataUpdateMsg', 397, 1), + (15696, 60036, 60069, 'OP_MapRequest', 522, 1), + (15697, 60036, 60069, 'OP_MarketAddFundsReply', 530, 1), + (15698, 60036, 60069, 'OP_MarketAddFundsRequest', 529, 1), + (15699, 60036, 60069, 'OP_MarketFundsUpdate', 527, 1), + (15700, 60036, 60069, 'OP_MarketPlaceItems', 538, 1), + (15701, 60036, 60069, 'OP_MarketPlacePrices', 533, 1), + (15702, 60036, 60069, 'OP_MarketPurchase', 532, 1), + (15703, 60036, 60069, 'OP_MentorPopup', 559, 1), + (15704, 60036, 60069, 'OP_MercHireWindow', 754, 1), + (15705, 60036, 60069, 'OP_MercUnknown', 755, 1), + (15706, 60036, 60069, 'OP_MigrateBoatTransportMsg', 253, 1), + (15707, 60036, 60069, 'OP_MigrateBoatTransportReplyMsg', 254, 1), + (15708, 60036, 60069, 'OP_MigrateClientToZoneReplyMsg', 82, 1), + (15709, 60036, 60069, 'OP_MigrateClientToZoneRequestMsg', 81, 1), + (15710, 60036, 60069, 'OP_ModifyGuildMsg', 267, 1), + (15711, 60036, 60069, 'OP_MonitorCharacterListMsg', 56, 1), + (15712, 60036, 60069, 'OP_MonitorCharacterListRequestMsg', 57, 1), + (15713, 60036, 60069, 'OP_MonitorReplyMsg', 55, 1), + (15714, 60036, 60069, 'OP_MOTDMsg', 44, 1), + (15715, 60036, 60069, 'OP_MoveableObjectPlacementCriteri', 160, 1), + (15716, 60036, 60069, 'OP_MoveLogUpdateMsg', 401, 1), + (15717, 60036, 60069, 'OP_NotifyApprenticeStoppedMentori', 409, 1), + (15718, 60036, 60069, 'OP_OfferQuestMsg', 402, 1), + (15719, 60036, 60069, 'OP_OnscreenMsgMsg', 265, 1), + (15720, 60036, 60069, 'OP_OpenCharCust', 562, 1), + (15721, 60036, 60069, 'OP_OutOfZoneMemberDataMsg', 96, 1), + (15722, 60036, 60069, 'OP_PayHouseUpkeepMsg', 159, 1), + (15723, 60036, 60069, 'OP_PerformCameraShakeMsg', 214, 1), + (15724, 60036, 60069, 'OP_PerformPlayerKnockbackMsg', 213, 1), + (15725, 60036, 60069, 'OP_PetOptions', 201, 1), + (15726, 60036, 60069, 'OP_PetOptionsResponse', 582, 1), + (15727, 60036, 60069, 'OP_PlayCharacterReplyMsg', 19, 1), + (15728, 60036, 60069, 'OP_PlayCharacterRequestMsg', 18, 1), + (15729, 60036, 60069, 'OP_PlayerHouseAccessUpdateMsg', 147, 1), + (15730, 60036, 60069, 'OP_PlayerHouseBaseScreenMsg', 145, 1), + (15731, 60036, 60069, 'OP_PlayerHouseCloseUIMsg', 149, 1), + (15732, 60036, 60069, 'OP_PlayerHouseDisplayStatusMsg', 148, 1), + (15733, 60036, 60069, 'OP_PlayerHousePurchaseScreenMsg', 146, 1), + (15734, 60036, 60069, 'OP_PlayerMadeInstances', 140, 1), + (15735, 60036, 60069, 'OP_PlayerMadeInstancesScreen', 139, 1), + (15736, 60036, 60069, 'OP_PlayerPollAnswer', 558, 1), + (15737, 60036, 60069, 'OP_PlayerPollPopup', 557, 1), + (15738, 60036, 60069, 'OP_PlayLon', 512, 1), + (15739, 60036, 60069, 'OP_PointOfInterest', 733, 1), + (15740, 60036, 60069, 'OP_PointOfInterest2', 734, 1), + (15741, 60036, 60069, 'OP_PopulateSkillMapsMsg', 215, 1), + (15742, 60036, 60069, 'OP_PositionBoatTransportMsg', 252, 1), + (15743, 60036, 60069, 'OP_PositionMoveableObject', 162, 1), + (15744, 60036, 60069, 'OP_PostPossessionMsg', 455, 1), + (15745, 60036, 60069, 'OP_PredictionUpdateMsg', 37, 1), + (15746, 60036, 60069, 'OP_PrePossessionMsg', 454, 1), + (15747, 60036, 60069, 'OP_PromoFlagsDetailsMsg', 375, 1), + (15748, 60036, 60069, 'OP_PublishHouse', 138, 1), + (15749, 60036, 60069, 'OP_PurchaseConsignmentLoreCheckRe', 408, 1), + (15750, 60036, 60069, 'OP_PurchaseConsignmentRequestMsg', 128, 1), + (15751, 60036, 60069, 'OP_QueAllBgSolo', 565, 1), + (15752, 60036, 60069, 'OP_QuestionnaireMsg', 261, 1), + (15753, 60036, 60069, 'OP_QuestJournalInspectMsg', 114, 1), + (15754, 60036, 60069, 'OP_QuestJournalOpenMsg', 113, 1), + (15755, 60036, 60069, 'OP_QuestJournalSetVisibleMsg', 115, 1), + (15756, 60036, 60069, 'OP_QuestJournalWaypointMsg', 116, 1), + (15757, 60036, 60069, 'OP_QuestReward', 321, 1), + (15758, 60036, 60069, 'OP_QuickbarInitMsg', 257, 1), + (15759, 60036, 60069, 'OP_QuickbarUpdateMsg', 258, 1), + (15760, 60036, 60069, 'OP_RaceRestrictionMsg', 440, 1), + (15761, 60036, 60069, 'OP_ReadBookPageMsg', 196, 1), + (15762, 60036, 60069, 'OP_ReadyForTakeOffMsg', 192, 1), + (15763, 60036, 60069, 'OP_ReadyToZoneMsg', 84, 1), + (15764, 60036, 60069, 'OP_RecipeBook', 539, 1), + (15765, 60036, 60069, 'OP_RecipeDetailsMsg', 72, 1), + (15766, 60036, 60069, 'OP_RecipeList', 745, 1), + (15767, 60036, 60069, 'OP_RecipeListUnknown', 594, 1), + (15768, 60036, 60069, 'OP_RelinquishHouseMsg', 153, 1), + (15769, 60036, 60069, 'OP_ReloadLocalizedTxtMsg', 355, 1), + (15770, 60036, 60069, 'OP_RemoteCmdMsg', 42, 1), + (15771, 60036, 60069, 'OP_RemoveClientFromGroupMsg', 85, 1), + (15772, 60036, 60069, 'OP_RemoveConcentrationMsg', 112, 1), + (15773, 60036, 60069, 'OP_RemoveGroupFromGroupMsg', 86, 1), + (15774, 60036, 60069, 'OP_RemoveSpellEffectMsg', 111, 1), + (15775, 60036, 60069, 'OP_RenameGuildMsg', 283, 1), + (15776, 60036, 60069, 'OP_ReplaceableSubMeshesMsg', 165, 1), + (15777, 60036, 60069, 'OP_ReportMsg', 381, 1), + (15778, 60036, 60069, 'OP_RequestCampMsg', 50, 1), + (15779, 60036, 60069, 'OP_RequestGuildBankEventDetailsMs', 281, 1), + (15780, 60036, 60069, 'OP_RequestGuildEventDetailsMsg', 272, 1), + (15781, 60036, 60069, 'OP_RequestGuildInfoMsg', 274, 1), + (15782, 60036, 60069, 'OP_RequestGuildMembershipMsg', 357, 1), + (15783, 60036, 60069, 'OP_RequestHelpRepathMsg', 206, 1), + (15784, 60036, 60069, 'OP_RequestRecipeDetailsMsg', 71, 1), + (15785, 60036, 60069, 'OP_RequestTargetLocMsg', 207, 1), + (15786, 60036, 60069, 'OP_Research', 746, 1), + (15787, 60036, 60069, 'OP_ResendWorldChannelsMsg', 444, 1), + (15788, 60036, 60069, 'OP_ReskinCharacterRequestMsg', 15, 1), + (15789, 60036, 60069, 'OP_RestartZoneMsg', 413, 1), + (15790, 60036, 60069, 'OP_RewardPackMsg', 282, 1), + (15791, 60036, 60069, 'OP_SatMsg', 189, 1), + (15792, 60036, 60069, 'OP_SavageBarInitMsg', 581, 1), + (15793, 60036, 60069, 'OP_SelectZoneTeleporterDestinatio', 354, 1), + (15794, 60036, 60069, 'OP_SendLatestRequestMsg', 97, 1), + (15795, 60036, 60069, 'OP_ServerPlayCharacterReplyMsg', 24, 1), + (15796, 60036, 60069, 'OP_ServerPlayCharacterRequestMsg', 23, 1), + (15797, 60036, 60069, 'OP_SetInstanceDisplayNameMsg', 441, 1), + (15798, 60036, 60069, 'OP_SetRemoteCmdsMsg', 41, 1), + (15799, 60036, 60069, 'OP_SetSocialMsg', 99, 1), + (15800, 60036, 60069, 'OP_ShaderCustomizationMsg', 164, 1), + (15801, 60036, 60069, 'OP_ShowCreateFromRecipeUIMsg', 219, 1), + (15802, 60036, 60069, 'OP_ShowIllusionsMsg', 193, 1), + (15803, 60036, 60069, 'OP_ShowItemCreationProcessUIMsg', 223, 1), + (15804, 60036, 60069, 'OP_ShowRecipeBookMsg', 226, 1), + (15805, 60036, 60069, 'OP_ShowZoneTeleporterDestinations', 353, 1), + (15806, 60036, 60069, 'OP_SitMsg', 187, 1), + (15807, 60036, 60069, 'OP_SkillInfoRequest', 515, 1), + (15808, 60036, 60069, 'OP_SkillInfoResponse', 516, 1), + (15809, 60036, 60069, 'OP_SOEAllAccess', 610, 1), + (15810, 60036, 60069, 'OP_SpellGainedMsg', 263, 1), + (15811, 60036, 60069, 'OP_StandMsg', 188, 1), + (15812, 60036, 60069, 'OP_StoodMsg', 190, 1), + (15813, 60036, 60069, 'OP_StopItemCreationMsg', 222, 1), + (15814, 60036, 60069, 'OP_StoppedLootingMsg', 186, 1), + (15815, 60036, 60069, 'OP_StopTrackingMsg', 392, 1), + (15816, 60036, 60069, 'OP_SubmitCharCust', 563, 1), + (15817, 60036, 60069, 'OP_SupplyDepot', 743, 1), + (15818, 60036, 60069, 'OP_SysClient', 218, 1), + (15819, 60036, 60069, 'OP_TeleportWithinZoneMsg', 79, 1), + (15820, 60036, 60069, 'OP_TeleportWithinZoneNoReloadMsg', 80, 1), + (15821, 60036, 60069, 'OP_TintWidgetsMsg', 170, 1), + (15822, 60036, 60069, 'OP_TitleUpdateMsg', 385, 1), + (15823, 60036, 60069, 'OP_TrackingUpdateMsg', 390, 1), + (15824, 60036, 60069, 'OP_TradeskillList', 712, 1), + (15825, 60036, 60069, 'OP_TraitsList', 735, 1), + (15826, 60036, 60069, 'OP_UIEvent', 528, 1), + (15827, 60036, 60069, 'OP_UIResetMsg', 174, 1), + (15828, 60036, 60069, 'OP_UISettingsResponseMsg', 173, 1), + (15829, 60036, 60069, 'OP_Unknown', 768, 1), + (15830, 60036, 60069, 'OP_UnknownNpcMsg', 374, 1), + (15831, 60036, 60069, 'OP_UpdateActivePublicZonesMsg', 373, 1), + (15832, 60036, 60069, 'OP_UpdateCharacterSheetMsg', 63, 1), + (15833, 60036, 60069, 'OP_UpdateClientPredFlagsMsg', 246, 1), + (15834, 60036, 60069, 'OP_UpdateDebugRadiiMsg', 380, 1), + (15835, 60036, 60069, 'OP_UpdateGroupMemberDataMsg', 389, 1), + (15836, 60036, 60069, 'OP_UpdateHouseAccessDataMsg', 144, 1), + (15837, 60036, 60069, 'OP_UpdateHouseDataMsg', 143, 1), + (15838, 60036, 60069, 'OP_UpdateInventoryMsg', 68, 1), + (15839, 60036, 60069, 'OP_UpdateItemCreationProcessUIMsg', 224, 1), + (15840, 60036, 60069, 'OP_UpdateMotdMsg', 208, 1), + (15841, 60036, 60069, 'OP_UpdateOpportunityMsg', 75, 1), + (15842, 60036, 60069, 'OP_UpdatePositionMsg', 39, 1), + (15843, 60036, 60069, 'OP_UpdateRaidMsg', 382, 1), + (15844, 60036, 60069, 'OP_UpdateRecipeBookMsg', 70, 1), + (15845, 60036, 60069, 'OP_UpdateSkillBookMsg', 73, 1), + (15846, 60036, 60069, 'OP_UpdateSkillsMsg', 74, 1), + (15847, 60036, 60069, 'OP_UpdateSpellBookMsg', 66, 1), + (15848, 60036, 60069, 'OP_UpdateTargetLocMsg', 62, 1), + (15849, 60036, 60069, 'OP_UpdateTargetMsg', 61, 1), + (15850, 60036, 60069, 'OP_UpdateTitleCmd', 495, 1), + (15851, 60036, 60069, 'OP_UseAdornment', 723, 1), + (15852, 60036, 60069, 'OP_VideoUploaded', 580, 1), + (15853, 60036, 60069, 'OP_VoiceChatChannel', 521, 1), + (15854, 60036, 60069, 'OP_VoiceChatServer', 739, 1), + (15855, 60036, 60069, 'OP_WaypointReplyMsg', 349, 1), + (15856, 60036, 60069, 'OP_WaypointRequestMsg', 348, 1), + (15857, 60036, 60069, 'OP_WaypointSelectMsg', 350, 1), + (15858, 60036, 60069, 'OP_WaypointUpdateMsg', 351, 1), + (15859, 60036, 60069, 'OP_Weakness', 584, 1), + (15860, 60036, 60069, 'OP_WhoQueryReplyMsg', 54, 1), + (15861, 60036, 60069, 'OP_WhoQueryRequestMsg', 53, 1), + (15862, 60036, 60069, 'OP_WorldDataChangeMsg', 411, 1), + (15863, 60036, 60069, 'OP_WorldDataUpdateMsg', 237, 1), + (15864, 60036, 60069, 'OP_WorldListMsg', 8, 1), + (15865, 60036, 60069, 'OP_WorldPingMsg', 400, 1), + (15866, 60036, 60069, 'OP_WorldShutdownUpdateMsg', 404, 1), + (15867, 60036, 60069, 'OP_WorldStatusChangeMsg', 6, 1), + (15868, 60036, 60069, 'OP_WorldTravelAvail', 573, 1), + (15869, 60036, 60069, 'OP_WSAcctLockStatusMsg', 205, 1), + (15870, 60036, 60069, 'OP_WSCreateCharacterReplyMsg', 14, 1), + (15871, 60036, 60069, 'OP_WSCreateCharacterRequestMsg', 13, 1), + (15872, 60036, 60069, 'OP_WSLoginRequestMsg', 2, 1), + (15873, 60036, 60069, 'OP_WSServerHideMsg', 367, 1), + (15874, 60036, 60069, 'OP_WSServerLockMsg', 365, 1), + (15875, 60036, 60069, 'OP_WSStatusReplyMsg', 5, 1), + (15876, 60036, 60069, 'OP_ZoneBgInstanceList', 569, 1), + (15877, 60036, 60069, 'OP_ZoneInfoMsg', 33, 1), + (15878, 60036, 60069, 'OP_ZoneInstanceCreateReplyMsg', 30, 1), + (15879, 60036, 60069, 'OP_ZoneInstanceDestroyedMsg', 31, 1), + (15880, 60036, 60069, 'OP_ZoneMOTDMsg', 45, 1), + (15881, 60036, 60069, 'OP_ZonesStatusMsg', 103, 1), + (15882, 60036, 60069, 'OP_ZonesStatusRequestMsg', 102, 1), + (15883, 60036, 60069, 'OP_ZoneToFriendReplyMsg', 285, 1), + (15884, 60036, 60069, 'OP_ZoneToFriendRequestMsg', 284, 1), + (15885, 60085, 60116, 'OP_AchievementUpdateMsg', 751, 1), + (15886, 60085, 60116, 'OP_AddSocialStructureStandingMsg', 252, 1), + (15887, 60085, 60116, 'OP_AdvancementRequestMsg', 397, 1), + (15888, 60085, 60116, 'OP_AdventureList', 491, 1), + (15889, 60085, 60116, 'OP_AFKUpdateMsg', 373, 1), + (15890, 60085, 60116, 'OP_AfterInvSpellUpdate', 71, 1), + (15891, 60085, 60116, 'OP_AllCharactersDescReplyMsg', 10, 1), + (15892, 60085, 60116, 'OP_AllCharactersDescRequestMsg', 9, 1), + (15893, 60085, 60116, 'OP_AllWSDescRequestMsg', 7, 1), + (15894, 60085, 60116, 'OP_AnonUpdateMsg', 374, 1), + (15895, 60085, 60116, 'OP_ArenaCreate', 459, 1), + (15896, 60085, 60116, 'OP_ArenaGameTypesMsg', 448, 1), + (15897, 60085, 60116, 'OP_ArenaList', 460, 1), + (15898, 60085, 60116, 'OP_ArenaWindow', 468, 1), + (15899, 60085, 60116, 'OP_AttackAllowed', 503, 1), + (15900, 60085, 60116, 'OP_AttackNotAllowed', 504, 1), + (15901, 60085, 60116, 'OP_AuctionAbortMsg', 439, 1), + (15902, 60085, 60116, 'OP_AuctionCharacter', 436, 1), + (15903, 60085, 60116, 'OP_AuctionCharacterReply', 437, 1), + (15904, 60085, 60116, 'OP_AuctionCoin', 434, 1), + (15905, 60085, 60116, 'OP_AuctionCoinReply', 435, 1), + (15906, 60085, 60116, 'OP_AuctionCommitMsg', 438, 1), + (15907, 60085, 60116, 'OP_AuctionItem', 432, 1), + (15908, 60085, 60116, 'OP_AuctionItemReply', 433, 1), + (15909, 60085, 60116, 'OP_AuditAuctionEventMsg', 449, 1), + (15910, 60085, 60116, 'OP_AvatarCreatedMsg', 48, 1), + (15911, 60085, 60116, 'OP_AvatarDestroyedMsg', 49, 1), + (15912, 60085, 60116, 'OP_AvatarUpdateMsg', 363, 1), + (15913, 60085, 60116, 'OP_BadLanguageFilter', 522, 1), + (15914, 60085, 60116, 'OP_BagOptions', 505, 1), + (15915, 60085, 60116, 'OP_BeginItemCreationMsg', 223, 1), + (15916, 60085, 60116, 'OP_BeginTrackingMsg', 393, 1), + (15917, 60085, 60116, 'OP_BioUpdateMsg', 365, 1), + (15918, 60085, 60116, 'OP_BrokerAddBag', 295, 1), + (15919, 60085, 60116, 'OP_BrokerRemoveBag', 296, 1), + (15920, 60085, 60116, 'OP_BrokerSellList', 694, 1), + (15921, 60085, 60116, 'OP_BuyPlayerHouseMsg', 152, 1), + (15922, 60085, 60116, 'OP_BuyPlayerHouseTintMsg', 153, 1), + (15923, 60085, 60116, 'OP_CampAbortedMsg', 54, 1), + (15924, 60085, 60116, 'OP_CampClientMsg', 390, 1), + (15925, 60085, 60116, 'OP_CampStartedMsg', 53, 1), + (15926, 60085, 60116, 'OP_CancelCreateFromRecipeMsg', 222, 1), + (15927, 60085, 60116, 'OP_CancelledFeignMsg', 218, 1), + (15928, 60085, 60116, 'OP_CancelMoveObjectModeMsg', 165, 1), + (15929, 60085, 60116, 'OP_CancelSpellCast', 492, 1), + (15930, 60085, 60116, 'OP_ChangeServerControlFlagMsg', 249, 1), + (15931, 60085, 60116, 'OP_ChangeZoneMsg', 79, 1), + (15932, 60085, 60116, 'OP_CharacterAchievements', 750, 1), + (15933, 60085, 60116, 'OP_CharacterCreatedDungeons', 554, 1), + (15934, 60085, 60116, 'OP_CharacterCurrency', 749, 1), + (15935, 60085, 60116, 'OP_CharacterHousingList', 510, 1), + (15936, 60085, 60116, 'OP_CharacterLinkdeadMsg', 417, 1), + (15937, 60085, 60116, 'OP_CharacterMerc', 67, 1), + (15938, 60085, 60116, 'OP_CharacterMounts', 587, 1), + (15939, 60085, 60116, 'OP_CharacterPet', 66, 1), + (15940, 60085, 60116, 'OP_CharNameChangedMsg', 355, 1), + (15941, 60085, 60116, 'OP_CharRenamed', 715, 1), + (15942, 60085, 60116, 'OP_CharTransferCommitReplyMsg', 425, 1), + (15943, 60085, 60116, 'OP_CharTransferCommitRequestMsg', 423, 1), + (15944, 60085, 60116, 'OP_CharTransferReplyMsg', 421, 1), + (15945, 60085, 60116, 'OP_CharTransferRequestMsg', 420, 1), + (15946, 60085, 60116, 'OP_CharTransferRollbackReplyMsg', 424, 1), + (15947, 60085, 60116, 'OP_CharTransferRollbackRequestMsg', 422, 1), + (15948, 60085, 60116, 'OP_CharTransferStartReplyMsg', 419, 1), + (15949, 60085, 60116, 'OP_CharTransferStartRequestMsg', 418, 1), + (15950, 60085, 60116, 'OP_CharTransferValidateReplyMsg', 441, 1), + (15951, 60085, 60116, 'OP_CharTransferValidateRequestMsg', 440, 1), + (15952, 60085, 60116, 'OP_ChatCreateChannelMsg', 288, 1), + (15953, 60085, 60116, 'OP_ChatFiltersMsg', 337, 1), + (15954, 60085, 60116, 'OP_ChatJoinChannelMsg', 289, 1), + (15955, 60085, 60116, 'OP_ChatLeaveChannelMsg', 291, 1), + (15956, 60085, 60116, 'OP_ChatRelationshipUpdateMsg', 186, 1), + (15957, 60085, 60116, 'OP_ChatSendFriendsMsg', 298, 1), + (15958, 60085, 60116, 'OP_ChatSendIgnoresMsg', 299, 1), + (15959, 60085, 60116, 'OP_ChatTellChannelMsg', 292, 1), + (15960, 60085, 60116, 'OP_ChatTellUserMsg', 293, 1), + (15961, 60085, 60116, 'OP_ChatToggleFriendMsg', 294, 1), + (15962, 60085, 60116, 'OP_ChatToggleIgnoreMsg', 297, 1), + (15963, 60085, 60116, 'OP_ChatWhoChannelMsg', 290, 1), + (15964, 60085, 60116, 'OP_ClearDataMsg', 100, 1), + (15965, 60085, 60116, 'OP_ClearForLandingMsg', 494, 1), + (15966, 60085, 60116, 'OP_ClearForTakeOffMsg', 193, 1), + (15967, 60085, 60116, 'OP_ClientCmdMsg', 60, 1), + (15968, 60085, 60116, 'OP_ClientFellMsg', 388, 1), + (15969, 60085, 60116, 'OP_ClientIdleBeginMsg', 408, 1), + (15970, 60085, 60116, 'OP_ClientIdleEndMsg', 409, 1), + (15971, 60085, 60116, 'OP_ClientInDeathRegionMsg', 389, 1), + (15972, 60085, 60116, 'OP_ClientTeleportRequestMsg', 80, 1), + (15973, 60085, 60116, 'OP_ClientTeleportToLocationMsg', 247, 1), + (15974, 60085, 60116, 'OP_CloseGroupInviteWindowMsg', 400, 1), + (15975, 60085, 60116, 'OP_CollectAllHouseItemsMsg', 154, 1), + (15976, 60085, 60116, 'OP_ConsignItemRequestMsg', 128, 1), + (15977, 60085, 60116, 'OP_ConsignItemResponseMsg', 129, 1), + (15978, 60085, 60116, 'OP_ConsignmentCloseStoreMsg', 127, 1), + (15979, 60085, 60116, 'OP_ConsignRemoveItemsMsg', 381, 1), + (15980, 60085, 60116, 'OP_ConsignViewCreateMsg', 378, 1), + (15981, 60085, 60116, 'OP_ConsignViewGetPageMsg', 379, 1), + (15982, 60085, 60116, 'OP_ConsignViewReleaseMsg', 380, 1), + (15983, 60085, 60116, 'OP_ConsignViewSortMsg', 386, 1), + (15984, 60085, 60116, 'OP_CorruptedClientMsg', 412, 1), + (15985, 60085, 60116, 'OP_CreateBoatTransportsMsg', 253, 1), + (15986, 60085, 60116, 'OP_CreateCharacterDungeon', 550, 1), + (15987, 60085, 60116, 'OP_CreateCharacterReplyMsg', 12, 1), + (15988, 60085, 60116, 'OP_CreateCharacterRequestMsg', 11, 1), + (15989, 60085, 60116, 'OP_CreateCharFromCBBReplyMsg', 429, 1), + (15990, 60085, 60116, 'OP_CreateCharFromCBBRequestMsg', 428, 1), + (15991, 60085, 60116, 'OP_CreateGuildReplyMsg', 122, 1), + (15992, 60085, 60116, 'OP_CreateGuildRequestMsg', 121, 1), + (15993, 60085, 60116, 'OP_CreateZoneInstanceMsg', 31, 1), + (15994, 60085, 60116, 'OP_CsCategoryRequestMsg', 370, 1), + (15995, 60085, 60116, 'OP_CsCategoryResponseMsg', 371, 1), + (15996, 60085, 60116, 'OP_CSTicketAddCommentMsg', 236, 1), + (15997, 60085, 60116, 'OP_CSTicketChangeNotificationMsg', 238, 1), + (15998, 60085, 60116, 'OP_CSTicketCommentRequestMsg', 233, 1), + (15999, 60085, 60116, 'OP_CSTicketCommentResponseMsg', 234, 1), + (16000, 60085, 60116, 'OP_CSTicketCreateMsg', 235, 1), + (16001, 60085, 60116, 'OP_CSTicketDeleteMsg', 237, 1), + (16002, 60085, 60116, 'OP_CSTicketHeaderRequestMsg', 231, 1), + (16003, 60085, 60116, 'OP_CSTicketInfoMsg', 232, 1), + (16004, 60085, 60116, 'OP_CSToolAccessResponseMsg', 391, 1), + (16005, 60085, 60116, 'OP_CSToolsRequestMsg', 250, 1), + (16006, 60085, 60116, 'OP_CSToolsResponseMsg', 251, 1), + (16007, 60085, 60116, 'OP_CurrentPet', 488, 1), + (16008, 60085, 60116, 'OP_CustomizationPurchaseRequestMs', 169, 1), + (16009, 60085, 60116, 'OP_CustomizationReplyMsg', 171, 1), + (16010, 60085, 60116, 'OP_CustomizationSetRequestMsg', 170, 1), + (16011, 60085, 60116, 'OP_CustomizeHouseDisplay', 740, 1), + (16012, 60085, 60116, 'OP_DailyObjectives', 600, 1), + (16013, 60085, 60116, 'OP_DefaultGroupOptionsMsg', 200, 1), + (16014, 60085, 60116, 'OP_DefaultGroupOptionsRequestMsg', 199, 1), + (16015, 60085, 60116, 'OP_DeleteCharacterReplyMsg', 19, 1), + (16016, 60085, 60116, 'OP_DeleteCharacterRequestMsg', 18, 1), + (16017, 60085, 60116, 'OP_DeleteGuildMsg', 125, 1), + (16018, 60085, 60116, 'OP_DestUpdateReq', 212, 1), + (16019, 60085, 60116, 'OP_DialogCloseMsg', 112, 1), + (16020, 60085, 60116, 'OP_DialogSelectMsg', 111, 1), + (16021, 60085, 60116, 'OP_DispatchClientCmdMsg', 62, 1), + (16022, 60085, 60116, 'OP_DispatchESMsg', 61, 1), + (16023, 60085, 60116, 'OP_DispatchMsg', 454, 1), + (16024, 60085, 60116, 'OP_DispatchSpellCmdMsg', 181, 1), + (16025, 60085, 60116, 'OP_DisplayDebugNLLPointsMsg', 257, 1), + (16026, 60085, 60116, 'OP_DisplayEventMsg', 455, 1), + (16027, 60085, 60116, 'OP_DisplayExchangeScreenMsg', 447, 1), + (16028, 60085, 60116, 'OP_DisplayGroupOptionsScreenMsg', 202, 1), + (16029, 60085, 60116, 'OP_DisplayInnVisitScreenMsg', 204, 1), + (16030, 60085, 60116, 'OP_DisplayMailScreenMsg', 407, 1), + (16031, 60085, 60116, 'OP_DisplayTSEventReactionMsg', 227, 1), + (16032, 60085, 60116, 'OP_DisplayWarningMsg', 268, 1), + (16033, 60085, 60116, 'OP_DoneLoadingEntityResourcesMsg', 38, 1), + (16034, 60085, 60116, 'OP_DoneLoadingZoneResourcesMsg', 36, 1), + (16035, 60085, 60116, 'OP_DoneSendingInitialEntitiesMsg', 37, 1), + (16036, 60085, 60116, 'OP_DressingRoom', 513, 1), + (16037, 60085, 60116, 'OP_DumpSchedulerMsg', 205, 1), + (16038, 60085, 60116, 'OP_DungeonMakerEnter', 551, 1), + (16039, 60085, 60116, 'OP_DungeonMakerItemRequest', 553, 1), + (16040, 60085, 60116, 'OP_DungeonMakerItemResponse', 585, 1), + (16041, 60085, 60116, 'OP_DungeonMakerToolboxList', 555, 1), + (16042, 60085, 60116, 'OP_DungeonMakerUnknown', 556, 1), + (16043, 60085, 60116, 'OP_DungeonMakerUnknown1', 557, 1), + (16044, 60085, 60116, 'OP_DungeonPlayAsAvatarList', 754, 1), + (16045, 60085, 60116, 'OP_DungeonPlayAsAvatarSelected', 755, 1), + (16046, 60085, 60116, 'OP_EncounterBrokenMsg', 266, 1), + (16047, 60085, 60116, 'OP_EnterHouseMsg', 156, 1), + (16048, 60085, 60116, 'OP_EnterMoveObjectModeMsg', 163, 1), + (16049, 60085, 60116, 'OP_EntityVerbsReplyMsg', 183, 1), + (16050, 60085, 60116, 'OP_EntityVerbsRequestMsg', 182, 1), + (16051, 60085, 60116, 'OP_EntityVerbsVerbMsg', 184, 1), + (16052, 60085, 60116, 'OP_EqArenaResultsCmd', 705, 1), + (16053, 60085, 60116, 'OP_EqAvailWorldChannelsCmd', 692, 1), + (16054, 60085, 60116, 'OP_EqBetaCopyRequest', 611, 1), + (16055, 60085, 60116, 'OP_EqCannedEmoteCmd', 634, 1), + (16056, 60085, 60116, 'OP_EqChatChannelUpdateCmd', 690, 1), + (16057, 60085, 60116, 'OP_EqChoiceWinCmd', 671, 1), + (16058, 60085, 60116, 'OP_EqCloseWindowCmd', 663, 1), + (16059, 60085, 60116, 'OP_EqCollectionFilterCmd', 650, 1), + (16060, 60085, 60116, 'OP_EqCollectionItemCmd', 651, 1), + (16061, 60085, 60116, 'OP_EqCollectionUpdateCmd', 649, 1), + (16062, 60085, 60116, 'OP_EqConsignmentItemsCmd', 695, 1), + (16063, 60085, 60116, 'OP_EqCreateGhostCmd', 616, 1), + (16064, 60085, 60116, 'OP_EqCreateListBoxCmd', 631, 1), + (16065, 60085, 60116, 'OP_EqCreateSignWidgetCmd', 618, 1), + (16066, 60085, 60116, 'OP_EqCreateWidgetCmd', 617, 1), + (16067, 60085, 60116, 'OP_EqDebugPVDCmd', 684, 1), + (16068, 60085, 60116, 'OP_EqDestroyGhostCmd', 619, 1), + (16069, 60085, 60116, 'OP_EqDialogCloseCmd', 647, 1), + (16070, 60085, 60116, 'OP_EqDialogOpenCmd', 646, 1), + (16071, 60085, 60116, 'OP_EqDisplaySpellFailCmd', 667, 1), + (16072, 60085, 60116, 'OP_EqDisplayTextCmd', 615, 1), + (16073, 60085, 60116, 'OP_EqDrawablePathGraphCmd', 645, 1), + (16074, 60085, 60116, 'OP_EqEnableGameEventCmd', 677, 1), + (16075, 60085, 60116, 'OP_EqEnableWindowCmd', 679, 1), + (16076, 60085, 60116, 'OP_EqExamineInfoCmd', 662, 1), + (16077, 60085, 60116, 'OP_EqFactionUpdateCmd', 648, 1), + (16078, 60085, 60116, 'OP_EqFlashWindowCmd', 680, 1), + (16079, 60085, 60116, 'OP_EqGetProbsCmd', 688, 1), + (16080, 60085, 60116, 'OP_EqGroupMemberRemovedCmd', 641, 1), + (16081, 60085, 60116, 'OP_EqGuildBankEventActionCmd', 706, 1), + (16082, 60085, 60116, 'OP_EqGuildBankExamineInfoCmd', 707, 1), + (16083, 60085, 60116, 'OP_EqHearChainEffectCmd', 642, 1), + (16084, 60085, 60116, 'OP_EqHearChatCmd', 614, 1), + (16085, 60085, 60116, 'OP_EqHearCombatCmd', 623, 1), + (16086, 60085, 60116, 'OP_EqHearConsiderCmd', 629, 1), + (16087, 60085, 60116, 'OP_EqHearDeathCmd', 640, 1), + (16088, 60085, 60116, 'OP_EQHearDispellCmd', 752, 1), + (16089, 60085, 60116, 'OP_EqHearDrowningCmd', 639, 1), + (16090, 60085, 60116, 'OP_EqHearHealCmd', 689, 1), + (16091, 60085, 60116, 'OP_EqHearPlayFlavorCmd', 682, 1), + (16092, 60085, 60116, 'OP_EQHearProcCmd', 625, 1), + (16093, 60085, 60116, 'OP_EQHearResEffectCmd', 626, 1), + (16094, 60085, 60116, 'OP_EqHearSpellCastCmd', 624, 1), + (16095, 60085, 60116, 'OP_EqHearSpellFizzleCmd', 628, 1), + (16096, 60085, 60116, 'OP_EqHearSpellInterruptCmd', 627, 1), + (16097, 60085, 60116, 'OP_EqHearSpellNoLandCmd', 708, 1), + (16098, 60085, 60116, 'OP_EQHearThreatCmd', 746, 1), + (16099, 60085, 60116, 'OP_EqHelpPathClearCmd', 660, 1), + (16100, 60085, 60116, 'OP_EqHelpPathCmd', 659, 1), + (16101, 60085, 60116, 'OP_EqInspectPCResultsCmd', 644, 1), + (16102, 60085, 60116, 'OP_EqInstructionWindowCloseCmd', 674, 1), + (16103, 60085, 60116, 'OP_EqInstructionWindowCmd', 673, 1), + (16104, 60085, 60116, 'OP_EqInstructionWindowGoalCmd', 675, 1), + (16105, 60085, 60116, 'OP_EqInstructionWindowTaskCmd', 676, 1), + (16106, 60085, 60116, 'OP_EqJunctionListCmd', 665, 1), + (16107, 60085, 60116, 'OP_EqMapExplorationCmd', 698, 1), + (16108, 60085, 60116, 'OP_EqMentoring', 653, 1), + (16109, 60085, 60116, 'OP_EqPlaySound3DCmd', 637, 1), + (16110, 60085, 60116, 'OP_EqPlaySoundCmd', 636, 1), + (16111, 60085, 60116, 'OP_EqPlayVoiceCmd', 638, 1), + (16112, 60085, 60116, 'OP_EqQuestGroupCmd', 655, 1), + (16113, 60085, 60116, 'OP_EqQuestionnaireCmd', 686, 1), + (16114, 60085, 60116, 'OP_EqQuestJournalReplyCmd', 654, 1), + (16115, 60085, 60116, 'OP_EqQuestJournalUpdateCmd', 652, 1), + (16116, 60085, 60116, 'OP_EqReceiveOfferCmd', 643, 1), + (16117, 60085, 60116, 'OP_EqResurrectedCmd', 670, 1), + (16118, 60085, 60116, 'OP_EqSetControlGhostCmd', 621, 1), + (16119, 60085, 60116, 'OP_EqSetDebugPathPointsCmd', 632, 1), + (16120, 60085, 60116, 'OP_EqSetDefaultVerbCmd', 672, 1), + (16121, 60085, 60116, 'OP_EqSetPOVGhostCmd', 622, 1), + (16122, 60085, 60116, 'OP_EqShowBookCmd', 685, 1), + (16123, 60085, 60116, 'OP_EqShowDeathWindowCmd', 666, 1), + (16124, 60085, 60116, 'OP_EqShowWindowCmd', 678, 1), + (16125, 60085, 60116, 'OP_EqSpellCastEndCmd', 669, 1), + (16126, 60085, 60116, 'OP_EqSpellCastStartCmd', 668, 1), + (16127, 60085, 60116, 'OP_EqSpellMoveToRangeAndRetryCmd', 700, 1), + (16128, 60085, 60116, 'OP_EqStartBrokerCmd', 697, 1), + (16129, 60085, 60116, 'OP_EqStateCmd', 635, 1), + (16130, 60085, 60116, 'OP_EqStoreLogCmd', 699, 1), + (16131, 60085, 60116, 'OP_EqUpdateBankCmd', 661, 1), + (16132, 60085, 60116, 'OP_EqUpdateGhostCmd', 620, 1), + (16133, 60085, 60116, 'OP_EqUpdateLootCmd', 664, 1), + (16134, 60085, 60116, 'OP_EqUpdateMerchantCmd', 656, 1), + (16135, 60085, 60116, 'OP_EqUpdatePlayerMailCmd', 701, 1), + (16136, 60085, 60116, 'OP_EqUpdatePlayerTradeCmd', 658, 1), + (16137, 60085, 60116, 'OP_EqUpdateSignWidgetCmd', 683, 1), + (16138, 60085, 60116, 'OP_EqUpdateStoreCmd', 657, 1), + (16139, 60085, 60116, 'OP_EqUpdateSubClassesCmd', 630, 1), + (16140, 60085, 60116, 'OP_EqUpdateTargetCmd', 693, 1), + (16141, 60085, 60116, 'OP_EqWhoChannelQueryReplyCmd', 691, 1), + (16142, 60085, 60116, 'OP_ESInitMsg', 27, 1), + (16143, 60085, 60116, 'OP_ESLoginRequestMsg', 3, 1), + (16144, 60085, 60116, 'OP_ESReadyForClientsMsg', 28, 1), + (16145, 60085, 60116, 'OP_ESStatusMsg', 102, 1), + (16146, 60085, 60116, 'OP_ESWeatherRequestEndMsg', 107, 1), + (16147, 60085, 60116, 'OP_ESWeatherRequestMsg', 106, 1), + (16148, 60085, 60116, 'OP_ESZoneInstanceStatusMsg', 103, 1), + (16149, 60085, 60116, 'OP_ExamineConsignmentRequestMsg', 173, 1), + (16150, 60085, 60116, 'OP_ExamineConsignmentResponseMsg', 174, 1), + (16151, 60085, 60116, 'OP_ExamineInfoRequestMsg', 258, 1), + (16152, 60085, 60116, 'OP_ExamineItemRequestMsg', 197, 1), + (16153, 60085, 60116, 'OP_ExitHouseMsg', 157, 1), + (16154, 60085, 60116, 'OP_ExpectClientAsCharacterReplyMs', 24, 1), + (16155, 60085, 60116, 'OP_ExpectClientAsCharacterRequest', 34, 1), + (16156, 60085, 60116, 'OP_ExpPurchWindow', 731, 1), + (16157, 60085, 60116, 'OP_FellowshipExpMsg', 124, 1), + (16158, 60085, 60116, 'OP_FlightPathsMsg', 416, 1), + (16159, 60085, 60116, 'OP_GameWorldTimeMsg', 45, 1), + (16160, 60085, 60116, 'OP_PaperdollImage', 580, 1), + (16161, 60085, 60116, 'OP_GetAuctionAssetIDMsg', 444, 1), + (16162, 60085, 60116, 'OP_GetAuctionAssetIDReplyMsg', 445, 1), + (16163, 60085, 60116, 'OP_GetAvatarAccessRequestForCSToo', 396, 1), + (16164, 60085, 60116, 'OP_GetCharacterSerializedReplyMsg', 427, 1), + (16165, 60085, 60116, 'OP_GetCharacterSerializedRequestM', 426, 1), + (16166, 60085, 60116, 'OP_GroupCreatedMsg', 90, 1), + (16167, 60085, 60116, 'OP_GroupDestroyedMsg', 91, 1), + (16168, 60085, 60116, 'OP_GroupLeaderChangedMsg', 95, 1), + (16169, 60085, 60116, 'OP_GroupMemberAddedMsg', 92, 1), + (16170, 60085, 60116, 'OP_GroupMemberRemovedMsg', 93, 1), + (16171, 60085, 60116, 'OP_GroupOptionsMsg', 201, 1), + (16172, 60085, 60116, 'OP_GroupRemovedFromGroupMsg', 94, 1), + (16173, 60085, 60116, 'OP_GroupResendOOZDataMsg', 96, 1), + (16174, 60085, 60116, 'OP_GroupSettingsChangedMsg', 97, 1), + (16175, 60085, 60116, 'OP_GuildBankActionMsg', 277, 1), + (16176, 60085, 60116, 'OP_GuildBankActionResponseMsg', 278, 1), + (16177, 60085, 60116, 'OP_GuildBankEventListMsg', 282, 1), + (16178, 60085, 60116, 'OP_GuildBankItemDetailsRequestMsg', 279, 1), + (16179, 60085, 60116, 'OP_GuildBankItemDetailsResponseMs', 280, 1), + (16180, 60085, 60116, 'OP_GuildBankUpdateMsg', 281, 1), + (16181, 60085, 60116, 'OP_GuildEventActionMsg', 272, 1), + (16182, 60085, 60116, 'OP_GuildEventAddMsg', 271, 1), + (16183, 60085, 60116, 'OP_GuildEventDetailsMsg', 275, 1), + (16184, 60085, 60116, 'OP_GuildEventListMsg', 273, 1), + (16185, 60085, 60116, 'OP_GuildEventMsg', 270, 1), + (16186, 60085, 60116, 'OP_GuildMembershipResponseMsg', 360, 1), + (16187, 60085, 60116, 'OP_GuildRecruiting', 711, 1), + (16188, 60085, 60116, 'OP_GuildRecruitingDetails', 712, 1), + (16189, 60085, 60116, 'OP_GuildRecruitingImage', 713, 1), + (16190, 60085, 60116, 'OP_GuildRecruitingMemberInfo', 710, 1), + (16191, 60085, 60116, 'OP_GuildsayMsg', 123, 1), + (16192, 60085, 60116, 'OP_GuildStatusUpdate', 704, 1), + (16193, 60085, 60116, 'OP_GuildUpdateMsg', 126, 1), + (16194, 60085, 60116, 'OP_HeritageMsg', 10003, 1), + (16195, 60085, 60116, 'OP_HideIllusionsMsg', 196, 1), + (16196, 60085, 60116, 'OP_HouseAccessRemoveMsg', 160, 1), + (16197, 60085, 60116, 'OP_HouseAccessSetMsg', 159, 1), + (16198, 60085, 60116, 'OP_HouseCustomizationScreenMsg', 168, 1), + (16199, 60085, 60116, 'OP_HouseDefaultAccessSetMsg', 158, 1), + (16200, 60085, 60116, 'OP_HouseDeletedRemotelyMsg', 144, 1), + (16201, 60085, 60116, 'OP_HouseItemsList', 487, 1), + (16202, 60085, 60116, 'OP_HousingDataChangedMsg', 430, 1), + (16203, 60085, 60116, 'OP_HousingRestoreMsg', 431, 1), + (16204, 60085, 60116, 'OP_InspectPlayerMsg', 366, 1), + (16205, 60085, 60116, 'OP_InspectPlayerRequestMsg', 453, 1), + (16206, 60085, 60116, 'OP_InviteRequestMsg', 450, 1), + (16207, 60085, 60116, 'OP_InviteResponseMsg', 451, 1), + (16208, 60085, 60116, 'OP_InviteTargetResponseMsg', 452, 1), + (16209, 60085, 60116, 'OP_JoinGuildNotifyMsg', 362, 1), + (16210, 60085, 60116, 'OP_JournalQuestStoryline', 753, 1), + (16211, 60085, 60116, 'OP_KeymapDataMsg', 179, 1), + (16212, 60085, 60116, 'OP_KeymapLoadMsg', 177, 1), + (16213, 60085, 60116, 'OP_KeymapNoneMsg', 178, 1), + (16214, 60085, 60116, 'OP_KeymapSaveMsg', 180, 1), + (16215, 60085, 60116, 'OP_KnowledgebaseRequestMsg', 229, 1), + (16216, 60085, 60116, 'OP_KnowledgebaseResponseMsg', 230, 1), + (16217, 60085, 60116, 'OP_KnowledgeWindowSlotMappingMsg', 372, 1), + (16218, 60085, 60116, 'OP_KnownLanguagesMsg', 241, 1), + (16219, 60085, 60116, 'OP_Launchpad', 578, 1), + (16220, 60085, 60116, 'OP_LeaveGuildNotifyMsg', 361, 1), + (16221, 60085, 60116, 'OP_LevelChangedMsg', 264, 1), + (16222, 60085, 60116, 'OP_LFGGroupSearch', 507, 1), + (16223, 60085, 60116, 'OP_LFGUpdateMsg', 521, 1), + (16224, 60085, 60116, 'OP_LikeOption', 138, 1), + (16225, 60085, 60116, 'OP_LoadCalendarEvents', 581, 1), + (16226, 60085, 60116, 'OP_LoadWelcomeWindow', 563, 1), + (16227, 60085, 60116, 'OP_LoginByNumRequestMsg', 1, 1), + (16228, 60085, 60116, 'OP_LoginReplyMsg', 4, 1), + (16229, 60085, 60116, 'OP_LoginRequestMsg', 0, 1), + (16230, 60085, 60116, 'OP_LootItemsRequestMsg', 187, 1), + (16231, 60085, 60116, 'OP_Lottery', 709, 1), + (16232, 60085, 60116, 'OP_LSCheckAcctLockMsg', 206, 1), + (16233, 60085, 60116, 'OP_LsClientAlertlogReplyMsg', 245, 1), + (16234, 60085, 60116, 'OP_LsClientBaselogReplyMsg', 243, 1), + (16235, 60085, 60116, 'OP_LsClientCrashlogReplyMsg', 244, 1), + (16236, 60085, 60116, 'OP_LsClientVerifylogReplyMsg', 246, 1), + (16237, 60085, 60116, 'OP_LsRequestClientCrashLogMsg', 242, 1), + (16238, 60085, 60116, 'OP_LSServerLockMsg', 368, 1), + (16239, 60085, 60116, 'OP_MacroInitMsg', 261, 1), + (16240, 60085, 60116, 'OP_MacroUpdateMsg', 262, 1), + (16241, 60085, 60116, 'OP_MailCommitSendMessageMsg', 347, 1), + (16242, 60085, 60116, 'OP_MailDeleteMessageMsg', 343, 1), + (16243, 60085, 60116, 'OP_MailEventNotificationMsg', 414, 1), + (16244, 60085, 60116, 'OP_MailGetHeadersReplyMsg', 344, 1), + (16245, 60085, 60116, 'OP_MailGetMessageMsg', 341, 1), + (16246, 60085, 60116, 'OP_MailGetMessageReplyMsg', 345, 1), + (16247, 60085, 60116, 'OP_MailRemoveAttachFromMailMsg', 349, 1), + (16248, 60085, 60116, 'OP_MailSendMessageMsg', 342, 1), + (16249, 60085, 60116, 'OP_MailSendMessageReplyMsg', 346, 1), + (16250, 60085, 60116, 'OP_MailSendSystemMessageMsg', 348, 1), + (16251, 60085, 60116, 'OP_MakeGroupLeaderMsg', 89, 1), + (16252, 60085, 60116, 'OP_MapFogDataInitMsg', 398, 1), + (16253, 60085, 60116, 'OP_MapFogDataUpdateMsg', 399, 1), + (16254, 60085, 60116, 'OP_MapRequest', 524, 1), + (16255, 60085, 60116, 'OP_MarketAddFundsReply', 532, 1), + (16256, 60085, 60116, 'OP_MarketAddFundsRequest', 531, 1), + (16257, 60085, 60116, 'OP_MarketFundsUpdate', 529, 1), + (16258, 60085, 60116, 'OP_MarketPlaceItems', 542, 1), + (16259, 60085, 60116, 'OP_MarketPlacePrices', 535, 1), + (16260, 60085, 60116, 'OP_MarketPurchase', 534, 1), + (16261, 60085, 60116, 'OP_MentorPopup', 561, 1), + (16262, 60085, 60116, 'OP_MercHireWindow', 756, 1), + (16263, 60085, 60116, 'OP_MercUnknown', 757, 1), + (16264, 60085, 60116, 'OP_MigrateBoatTransportMsg', 255, 1), + (16265, 60085, 60116, 'OP_MigrateBoatTransportReplyMsg', 256, 1), + (16266, 60085, 60116, 'OP_MigrateClientToZoneReplyMsg', 84, 1), + (16267, 60085, 60116, 'OP_MigrateClientToZoneRequestMsg', 83, 1), + (16268, 60085, 60116, 'OP_ModifyGuildMsg', 269, 1), + (16269, 60085, 60116, 'OP_MonitorCharacterListMsg', 58, 1), + (16270, 60085, 60116, 'OP_MonitorCharacterListRequestMsg', 59, 1), + (16271, 60085, 60116, 'OP_MonitorReplyMsg', 57, 1), + (16272, 60085, 60116, 'OP_MOTDMsg', 46, 1), + (16273, 60085, 60116, 'OP_MoveableObjectPlacementCriteri', 162, 1), + (16274, 60085, 60116, 'OP_MoveLogUpdateMsg', 403, 1), + (16275, 60085, 60116, 'OP_NotifyApprenticeStoppedMentori', 411, 1), + (16276, 60085, 60116, 'OP_OfferQuestMsg', 404, 1), + (16277, 60085, 60116, 'OP_OnscreenMsgMsg', 267, 1), + (16278, 60085, 60116, 'OP_OpenCharCust', 564, 1), + (16279, 60085, 60116, 'OP_OutOfZoneMemberDataMsg', 98, 1), + (16280, 60085, 60116, 'OP_PayHouseUpkeepMsg', 161, 1), + (16281, 60085, 60116, 'OP_PerformCameraShakeMsg', 216, 1), + (16282, 60085, 60116, 'OP_PerformPlayerKnockbackMsg', 215, 1), + (16283, 60085, 60116, 'OP_PetOptions', 203, 1), + (16284, 60085, 60116, 'OP_PetOptionsResponse', 584, 1), + (16285, 60085, 60116, 'OP_PlayCharacterReplyMsg', 21, 1), + (16286, 60085, 60116, 'OP_PlayCharacterRequestMsg', 20, 1), + (16287, 60085, 60116, 'OP_PlayerHouseAccessUpdateMsg', 149, 1), + (16288, 60085, 60116, 'OP_PlayerHouseBaseScreenMsg', 147, 1), + (16289, 60085, 60116, 'OP_PlayerHouseCloseUIMsg', 151, 1), + (16290, 60085, 60116, 'OP_PlayerHouseDisplayStatusMsg', 150, 1), + (16291, 60085, 60116, 'OP_PlayerHousePurchaseScreenMsg', 148, 1), + (16292, 60085, 60116, 'OP_PlayerMadeInstances', 142, 1), + (16293, 60085, 60116, 'OP_PlayerMadeInstancesScreen', 141, 1), + (16294, 60085, 60116, 'OP_PlayerPollAnswer', 560, 1), + (16295, 60085, 60116, 'OP_PlayerPollPopup', 559, 1), + (16296, 60085, 60116, 'OP_PlayLon', 514, 1), + (16297, 60085, 60116, 'OP_PointOfInterest', 735, 1), + (16298, 60085, 60116, 'OP_PointOfInterest2', 736, 1), + (16299, 60085, 60116, 'OP_PopulateSkillMapsMsg', 217, 1), + (16300, 60085, 60116, 'OP_PositionBoatTransportMsg', 254, 1), + (16301, 60085, 60116, 'OP_PositionMoveableObject', 164, 1), + (16302, 60085, 60116, 'OP_PostPossessionMsg', 457, 1), + (16303, 60085, 60116, 'OP_PredictionUpdateMsg', 39, 1), + (16304, 60085, 60116, 'OP_PrePossessionMsg', 456, 1), + (16305, 60085, 60116, 'OP_PromoFlagsDetailsMsg', 377, 1), + (16306, 60085, 60116, 'OP_PublishHouse', 140, 1), + (16307, 60085, 60116, 'OP_PurchaseConsignmentLoreCheckRe', 410, 1), + (16308, 60085, 60116, 'OP_PurchaseConsignmentRequestMsg', 130, 1), + (16309, 60085, 60116, 'OP_QueAllBgSolo', 567, 1), + (16310, 60085, 60116, 'OP_QuestionnaireMsg', 263, 1), + (16311, 60085, 60116, 'OP_QuestJournalInspectMsg', 116, 1), + (16312, 60085, 60116, 'OP_QuestJournalOpenMsg', 115, 1), + (16313, 60085, 60116, 'OP_QuestJournalSetVisibleMsg', 117, 1), + (16314, 60085, 60116, 'OP_QuestJournalWaypointMsg', 118, 1), + (16315, 60085, 60116, 'OP_QuestReward', 323, 1), + (16316, 60085, 60116, 'OP_QuickbarInitMsg', 259, 1), + (16317, 60085, 60116, 'OP_QuickbarUpdateMsg', 260, 1), + (16318, 60085, 60116, 'OP_RaceRestrictionMsg', 442, 1), + (16319, 60085, 60116, 'OP_ReadBookPageMsg', 198, 1), + (16320, 60085, 60116, 'OP_ReadyForTakeOffMsg', 194, 1), + (16321, 60085, 60116, 'OP_ReadyToZoneMsg', 86, 1), + (16322, 60085, 60116, 'OP_RecipeBook', 543, 1), + (16323, 60085, 60116, 'OP_RecipeDetailsMsg', 74, 1), + (16324, 60085, 60116, 'OP_RecipeList', 747, 1), + (16325, 60085, 60116, 'OP_RecipeListUnknown', 596, 1), + (16326, 60085, 60116, 'OP_RelinquishHouseMsg', 155, 1), + (16327, 60085, 60116, 'OP_ReloadLocalizedTxtMsg', 358, 1), + (16328, 60085, 60116, 'OP_RemoteCmdMsg', 44, 1), + (16329, 60085, 60116, 'OP_RemoveClientFromGroupMsg', 87, 1), + (16330, 60085, 60116, 'OP_RemoveConcentrationMsg', 114, 1), + (16331, 60085, 60116, 'OP_RemoveGroupFromGroupMsg', 88, 1), + (16332, 60085, 60116, 'OP_RemoveSpellEffectMsg', 113, 1), + (16333, 60085, 60116, 'OP_RenameGuildMsg', 285, 1), + (16334, 60085, 60116, 'OP_ReplaceableSubMeshesMsg', 167, 1), + (16335, 60085, 60116, 'OP_ReportMsg', 383, 1), + (16336, 60085, 60116, 'OP_RequestCampMsg', 52, 1), + (16337, 60085, 60116, 'OP_RequestGuildBankEventDetailsMs', 283, 1), + (16338, 60085, 60116, 'OP_RequestGuildEventDetailsMsg', 274, 1), + (16339, 60085, 60116, 'OP_RequestGuildInfoMsg', 276, 1), + (16340, 60085, 60116, 'OP_RequestGuildMembershipMsg', 359, 1), + (16341, 60085, 60116, 'OP_RequestHelpRepathMsg', 208, 1), + (16342, 60085, 60116, 'OP_RequestRecipeDetailsMsg', 73, 1), + (16343, 60085, 60116, 'OP_RequestTargetLocMsg', 209, 1), + (16344, 60085, 60116, 'OP_Research', 748, 1), + (16345, 60085, 60116, 'OP_ResendWorldChannelsMsg', 446, 1), + (16346, 60085, 60116, 'OP_ReskinCharacterRequestMsg', 15, 1), + (16347, 60085, 60116, 'OP_RestartZoneMsg', 415, 1), + (16348, 60085, 60116, 'OP_RewardPackMsg', 284, 1), + (16349, 60085, 60116, 'OP_SatMsg', 191, 1), + (16350, 60085, 60116, 'OP_SavageBarInitMsg', 583, 1), + (16351, 60085, 60116, 'OP_SelectZoneTeleporterDestinatio', 357, 1), + (16352, 60085, 60116, 'OP_SendLatestRequestMsg', 99, 1), + (16353, 60085, 60116, 'OP_ServerPlayCharacterReplyMsg', 26, 1), + (16354, 60085, 60116, 'OP_ServerPlayCharacterRequestMsg', 25, 1), + (16355, 60085, 60116, 'OP_SetInstanceDisplayNameMsg', 443, 1), + (16356, 60085, 60116, 'OP_SetRemoteCmdsMsg', 43, 1), + (16357, 60085, 60116, 'OP_SetSocialMsg', 101, 1), + (16358, 60085, 60116, 'OP_ShaderCustomizationMsg', 166, 1), + (16359, 60085, 60116, 'OP_ShowCreateFromRecipeUIMsg', 221, 1), + (16360, 60085, 60116, 'OP_ShowIllusionsMsg', 195, 1), + (16361, 60085, 60116, 'OP_ShowItemCreationProcessUIMsg', 225, 1), + (16362, 60085, 60116, 'OP_ShowRecipeBookMsg', 228, 1), + (16363, 60085, 60116, 'OP_ShowZoneTeleporterDestinations', 356, 1), + (16364, 60085, 60116, 'OP_SitMsg', 189, 1), + (16365, 60085, 60116, 'OP_SkillInfoRequest', 517, 1), + (16366, 60085, 60116, 'OP_SkillInfoResponse', 518, 1), + (16367, 60085, 60116, 'OP_SOEAllAccess', 612, 1), + (16368, 60085, 60116, 'OP_SpellGainedMsg', 265, 1), + (16369, 60085, 60116, 'OP_StandMsg', 190, 1), + (16370, 60085, 60116, 'OP_StoodMsg', 192, 1), + (16371, 60085, 60116, 'OP_StopItemCreationMsg', 224, 1), + (16372, 60085, 60116, 'OP_StoppedLootingMsg', 188, 1), + (16373, 60085, 60116, 'OP_StopTrackingMsg', 394, 1), + (16374, 60085, 60116, 'OP_SubmitCharCust', 565, 1), + (16375, 60085, 60116, 'OP_SupplyDepot', 745, 1), + (16376, 60085, 60116, 'OP_SysClient', 220, 1), + (16377, 60085, 60116, 'OP_TeleportWithinZoneMsg', 81, 1), + (16378, 60085, 60116, 'OP_TeleportWithinZoneNoReloadMsg', 82, 1), + (16379, 60085, 60116, 'OP_TintWidgetsMsg', 172, 1), + (16380, 60085, 60116, 'OP_TitleUpdateMsg', 387, 1), + (16381, 60085, 60116, 'OP_TrackingUpdateMsg', 392, 1), + (16382, 60085, 60116, 'OP_TradeskillList', 714, 1), + (16383, 60085, 60116, 'OP_TraitsList', 737, 1), + (16384, 60085, 60116, 'OP_UIEvent', 530, 1), + (16385, 60085, 60116, 'OP_UIResetMsg', 176, 1), + (16386, 60085, 60116, 'OP_UISettingsResponseMsg', 175, 1), + (16387, 60085, 60116, 'OP_Unknown', 770, 1), + (16388, 60085, 60116, 'OP_UnknownNpcMsg', 376, 1), + (16389, 60085, 60116, 'OP_UpdateActivePublicZonesMsg', 375, 1), + (16390, 60085, 60116, 'OP_UpdateCharacterSheetMsg', 65, 1), + (16391, 60085, 60116, 'OP_UpdateClientPredFlagsMsg', 248, 1), + (16392, 60085, 60116, 'OP_UpdateDebugRadiiMsg', 382, 1), + (16393, 60085, 60116, 'OP_UpdateGroupMemberDataMsg', 391, 1), + (16394, 60085, 60116, 'OP_UpdateHouseAccessDataMsg', 146, 1), + (16395, 60085, 60116, 'OP_UpdateHouseDataMsg', 145, 1), + (16396, 60085, 60116, 'OP_UpdateInventoryMsg', 70, 1), + (16397, 60085, 60116, 'OP_UpdateItemCreationProcessUIMsg', 226, 1), + (16398, 60085, 60116, 'OP_UpdateMotdMsg', 210, 1), + (16399, 60085, 60116, 'OP_UpdateOpportunityMsg', 77, 1), + (16400, 60085, 60116, 'OP_UpdatePositionMsg', 41, 1), + (16401, 60085, 60116, 'OP_UpdateRaidMsg', 384, 1), + (16402, 60085, 60116, 'OP_UpdateRecipeBookMsg', 72, 1), + (16403, 60085, 60116, 'OP_UpdateSkillBookMsg', 75, 1), + (16404, 60085, 60116, 'OP_UpdateSkillsMsg', 76, 1), + (16405, 60085, 60116, 'OP_UpdateSpellBookMsg', 68, 1), + (16406, 60085, 60116, 'OP_UpdateTargetLocMsg', 64, 1), + (16407, 60085, 60116, 'OP_UpdateTargetMsg', 63, 1), + (16408, 60085, 60116, 'OP_UpdateTitleCmd', 497, 1), + (16409, 60085, 60116, 'OP_UseAdornment', 725, 1), + (16410, 60085, 60116, 'OP_VideoUploaded', 582, 1), + (16411, 60085, 60116, 'OP_VoiceChatChannel', 523, 1), + (16412, 60085, 60116, 'OP_VoiceChatServer', 741, 1), + (16413, 60085, 60116, 'OP_WaypointReplyMsg', 352, 1), + (16414, 60085, 60116, 'OP_WaypointRequestMsg', 351, 1), + (16415, 60085, 60116, 'OP_WaypointSelectMsg', 353, 1), + (16416, 60085, 60116, 'OP_WaypointUpdateMsg', 354, 1), + (16417, 60085, 60116, 'OP_Weakness', 586, 1), + (16418, 60085, 60116, 'OP_WhoQueryReplyMsg', 56, 1), + (16419, 60085, 60116, 'OP_WhoQueryRequestMsg', 55, 1), + (16420, 60085, 60116, 'OP_WorldDataChangeMsg', 413, 1), + (16421, 60085, 60116, 'OP_WorldDataUpdateMsg', 239, 1), + (16422, 60085, 60116, 'OP_WorldListMsg', 8, 1), + (16423, 60085, 60116, 'OP_WorldPingMsg', 402, 1), + (16424, 60085, 60116, 'OP_WorldShutdownUpdateMsg', 406, 1), + (16425, 60085, 60116, 'OP_WorldStatusChangeMsg', 6, 1), + (16426, 60085, 60116, 'OP_WorldTravelAvail', 575, 1), + (16427, 60085, 60116, 'OP_WSAcctLockStatusMsg', 207, 1), + (16428, 60085, 60116, 'OP_WSCreateCharacterReplyMsg', 14, 1), + (16429, 60085, 60116, 'OP_WSCreateCharacterRequestMsg', 13, 1), + (16430, 60085, 60116, 'OP_WSLoginRequestMsg', 2, 1), + (16431, 60085, 60116, 'OP_WSServerHideMsg', 369, 1), + (16432, 60085, 60116, 'OP_WSServerLockMsg', 367, 1), + (16433, 60085, 60116, 'OP_WSStatusReplyMsg', 5, 1), + (16434, 60085, 60116, 'OP_ZoneBgInstanceList', 571, 1), + (16435, 60085, 60116, 'OP_ZoneInfoMsg', 35, 1), + (16436, 60085, 60116, 'OP_ZoneInstanceCreateReplyMsg', 32, 1), + (16437, 60085, 60116, 'OP_ZoneInstanceDestroyedMsg', 33, 1), + (16438, 60085, 60116, 'OP_ZoneMOTDMsg', 47, 1), + (16439, 60085, 60116, 'OP_ZonesStatusMsg', 105, 1), + (16440, 60085, 60116, 'OP_ZonesStatusRequestMsg', 104, 1), + (16441, 60085, 60116, 'OP_ZoneToFriendReplyMsg', 287, 1), + (16442, 60085, 60116, 'OP_ZoneToFriendRequestMsg', 286, 1), + (16443, 60127, 60158, 'OP_AchievementUpdateMsg', 752, 1), + (16444, 60127, 60158, 'OP_AddSocialStructureStandingMsg', 253, 1), + (16445, 60127, 60158, 'OP_AdvancementRequestMsg', 398, 1), + (16446, 60127, 60158, 'OP_AdventureList', 492, 1), + (16447, 60127, 60158, 'OP_AFKUpdateMsg', 374, 1), + (16448, 60127, 60158, 'OP_AfterInvSpellUpdate', 71, 1), + (16449, 60127, 60158, 'OP_AllCharactersDescReplyMsg', 10, 1), + (16450, 60127, 60158, 'OP_AllCharactersDescRequestMsg', 9, 1), + (16451, 60127, 60158, 'OP_AllWSDescRequestMsg', 7, 1), + (16452, 60127, 60158, 'OP_AnonUpdateMsg', 375, 1), + (16453, 60127, 60158, 'OP_ArenaCreate', 460, 1), + (16454, 60127, 60158, 'OP_ArenaGameTypesMsg', 449, 1), + (16455, 60127, 60158, 'OP_ArenaList', 461, 1), + (16456, 60127, 60158, 'OP_ArenaWindow', 469, 1), + (16457, 60127, 60158, 'OP_AttackAllowed', 504, 1), + (16458, 60127, 60158, 'OP_AttackNotAllowed', 505, 1), + (16459, 60127, 60158, 'OP_AuctionAbortMsg', 440, 1), + (16460, 60127, 60158, 'OP_AuctionCharacter', 437, 1), + (16461, 60127, 60158, 'OP_AuctionCharacterReply', 438, 1), + (16462, 60127, 60158, 'OP_AuctionCoin', 435, 1), + (16463, 60127, 60158, 'OP_AuctionCoinReply', 436, 1), + (16464, 60127, 60158, 'OP_AuctionCommitMsg', 439, 1), + (16465, 60127, 60158, 'OP_AuctionItem', 433, 1), + (16466, 60127, 60158, 'OP_AuctionItemReply', 434, 1), + (16467, 60127, 60158, 'OP_AuditAuctionEventMsg', 450, 1), + (16468, 60127, 60158, 'OP_AvatarCreatedMsg', 48, 1), + (16469, 60127, 60158, 'OP_AvatarDestroyedMsg', 49, 1), + (16470, 60127, 60158, 'OP_AvatarUpdateMsg', 364, 1), + (16471, 60127, 60158, 'OP_BadLanguageFilter', 523, 1), + (16472, 60127, 60158, 'OP_BagOptions', 506, 1), + (16473, 60127, 60158, 'OP_BeginItemCreationMsg', 224, 1), + (16474, 60127, 60158, 'OP_BeginTrackingMsg', 394, 1), + (16475, 60127, 60158, 'OP_BioUpdateMsg', 366, 1), + (16476, 60127, 60158, 'OP_BrokerAddBag', 296, 1), + (16477, 60127, 60158, 'OP_BrokerRemoveBag', 297, 1), + (16478, 60127, 60158, 'OP_BrokerSellList', 695, 1), + (16479, 60127, 60158, 'OP_BuyPlayerHouseMsg', 153, 1), + (16480, 60127, 60158, 'OP_BuyPlayerHouseTintMsg', 154, 1), + (16481, 60127, 60158, 'OP_CampAbortedMsg', 54, 1), + (16482, 60127, 60158, 'OP_CampClientMsg', 391, 1), + (16483, 60127, 60158, 'OP_CampStartedMsg', 53, 1), + (16484, 60127, 60158, 'OP_CancelCreateFromRecipeMsg', 223, 1), + (16485, 60127, 60158, 'OP_CancelledFeignMsg', 219, 1), + (16486, 60127, 60158, 'OP_CancelMoveObjectModeMsg', 166, 1), + (16487, 60127, 60158, 'OP_CancelSpellCast', 493, 1), + (16488, 60127, 60158, 'OP_ChangeServerControlFlagMsg', 250, 1), + (16489, 60127, 60158, 'OP_ChangeZoneMsg', 79, 1), + (16490, 60127, 60158, 'OP_CharacterAchievements', 751, 1), + (16491, 60127, 60158, 'OP_CharacterCreatedDungeons', 555, 1), + (16492, 60127, 60158, 'OP_CharacterCurrency', 750, 1), + (16493, 60127, 60158, 'OP_CharacterHousingList', 511, 1), + (16494, 60127, 60158, 'OP_CharacterLinkdeadMsg', 418, 1), + (16495, 60127, 60158, 'OP_CharacterMerc', 67, 1), + (16496, 60127, 60158, 'OP_CharacterMounts', 588, 1), + (16497, 60127, 60158, 'OP_CharacterPet', 66, 1), + (16498, 60127, 60158, 'OP_CharNameChangedMsg', 356, 1), + (16499, 60127, 60158, 'OP_CharRenamed', 716, 1), + (16500, 60127, 60158, 'OP_CharTransferCommitReplyMsg', 426, 1), + (16501, 60127, 60158, 'OP_CharTransferCommitRequestMsg', 424, 1), + (16502, 60127, 60158, 'OP_CharTransferReplyMsg', 422, 1), + (16503, 60127, 60158, 'OP_CharTransferRequestMsg', 421, 1), + (16504, 60127, 60158, 'OP_CharTransferRollbackReplyMsg', 425, 1), + (16505, 60127, 60158, 'OP_CharTransferRollbackRequestMsg', 423, 1), + (16506, 60127, 60158, 'OP_CharTransferStartReplyMsg', 420, 1), + (16507, 60127, 60158, 'OP_CharTransferStartRequestMsg', 419, 1), + (16508, 60127, 60158, 'OP_CharTransferValidateReplyMsg', 442, 1), + (16509, 60127, 60158, 'OP_CharTransferValidateRequestMsg', 441, 1), + (16510, 60127, 60158, 'OP_ChatCreateChannelMsg', 289, 1), + (16511, 60127, 60158, 'OP_ChatFiltersMsg', 338, 1), + (16512, 60127, 60158, 'OP_ChatJoinChannelMsg', 290, 1), + (16513, 60127, 60158, 'OP_ChatLeaveChannelMsg', 292, 1), + (16514, 60127, 60158, 'OP_ChatRelationshipUpdateMsg', 187, 1), + (16515, 60127, 60158, 'OP_ChatSendFriendsMsg', 299, 1), + (16516, 60127, 60158, 'OP_ChatSendIgnoresMsg', 300, 1), + (16517, 60127, 60158, 'OP_ChatTellChannelMsg', 293, 1), + (16518, 60127, 60158, 'OP_ChatTellUserMsg', 294, 1), + (16519, 60127, 60158, 'OP_ChatToggleFriendMsg', 295, 1), + (16520, 60127, 60158, 'OP_ChatToggleIgnoreMsg', 298, 1), + (16521, 60127, 60158, 'OP_ChatWhoChannelMsg', 291, 1), + (16522, 60127, 60158, 'OP_ClearDataMsg', 100, 1), + (16523, 60127, 60158, 'OP_ClearForLandingMsg', 495, 1), + (16524, 60127, 60158, 'OP_ClearForTakeOffMsg', 194, 1), + (16525, 60127, 60158, 'OP_ClientCmdMsg', 60, 1), + (16526, 60127, 60158, 'OP_ClientFellMsg', 389, 1), + (16527, 60127, 60158, 'OP_ClientIdleBeginMsg', 409, 1), + (16528, 60127, 60158, 'OP_ClientIdleEndMsg', 410, 1), + (16529, 60127, 60158, 'OP_ClientInDeathRegionMsg', 390, 1), + (16530, 60127, 60158, 'OP_ClientTeleportRequestMsg', 80, 1), + (16531, 60127, 60158, 'OP_ClientTeleportToLocationMsg', 248, 1), + (16532, 60127, 60158, 'OP_CloseGroupInviteWindowMsg', 401, 1), + (16533, 60127, 60158, 'OP_CollectAllHouseItemsMsg', 155, 1), + (16534, 60127, 60158, 'OP_ConsignItemRequestMsg', 129, 1), + (16535, 60127, 60158, 'OP_ConsignItemResponseMsg', 130, 1), + (16536, 60127, 60158, 'OP_ConsignmentCloseStoreMsg', 128, 1), + (16537, 60127, 60158, 'OP_ConsignRemoveItemsMsg', 382, 1), + (16538, 60127, 60158, 'OP_ConsignViewCreateMsg', 379, 1), + (16539, 60127, 60158, 'OP_ConsignViewGetPageMsg', 380, 1), + (16540, 60127, 60158, 'OP_ConsignViewReleaseMsg', 381, 1), + (16541, 60127, 60158, 'OP_ConsignViewSortMsg', 387, 1), + (16542, 60127, 60158, 'OP_CorruptedClientMsg', 413, 1), + (16543, 60127, 60158, 'OP_CreateBoatTransportsMsg', 254, 1), + (16544, 60127, 60158, 'OP_CreateCharacterDungeon', 551, 1), + (16545, 60127, 60158, 'OP_CreateCharacterReplyMsg', 12, 1), + (16546, 60127, 60158, 'OP_CreateCharacterRequestMsg', 11, 1), + (16547, 60127, 60158, 'OP_CreateCharFromCBBReplyMsg', 430, 1), + (16548, 60127, 60158, 'OP_CreateCharFromCBBRequestMsg', 429, 1), + (16549, 60127, 60158, 'OP_CreateGuildReplyMsg', 123, 1), + (16550, 60127, 60158, 'OP_CreateGuildRequestMsg', 121, 1), + (16551, 60127, 60158, 'OP_CreateZoneInstanceMsg', 31, 1), + (16552, 60127, 60158, 'OP_CsCategoryRequestMsg', 371, 1), + (16553, 60127, 60158, 'OP_CsCategoryResponseMsg', 372, 1), + (16554, 60127, 60158, 'OP_CSTicketAddCommentMsg', 237, 1), + (16555, 60127, 60158, 'OP_CSTicketChangeNotificationMsg', 239, 1), + (16556, 60127, 60158, 'OP_CSTicketCommentRequestMsg', 234, 1), + (16557, 60127, 60158, 'OP_CSTicketCommentResponseMsg', 235, 1), + (16558, 60127, 60158, 'OP_CSTicketCreateMsg', 236, 1), + (16559, 60127, 60158, 'OP_CSTicketDeleteMsg', 238, 1), + (16560, 60127, 60158, 'OP_CSTicketHeaderRequestMsg', 232, 1), + (16561, 60127, 60158, 'OP_CSTicketInfoMsg', 233, 1), + (16562, 60127, 60158, 'OP_CSToolAccessResponseMsg', 392, 1), + (16563, 60127, 60158, 'OP_CSToolsRequestMsg', 251, 1), + (16564, 60127, 60158, 'OP_CSToolsResponseMsg', 252, 1), + (16565, 60127, 60158, 'OP_CurrentPet', 489, 1), + (16566, 60127, 60158, 'OP_CustomizationPurchaseRequestMs', 170, 1), + (16567, 60127, 60158, 'OP_CustomizationReplyMsg', 172, 1), + (16568, 60127, 60158, 'OP_CustomizationSetRequestMsg', 171, 1), + (16569, 60127, 60158, 'OP_CustomizeHouseDisplay', 741, 1), + (16570, 60127, 60158, 'OP_DailyObjectives', 601, 1), + (16571, 60127, 60158, 'OP_DefaultGroupOptionsMsg', 201, 1), + (16572, 60127, 60158, 'OP_DefaultGroupOptionsRequestMsg', 200, 1), + (16573, 60127, 60158, 'OP_DeleteCharacterReplyMsg', 19, 1), + (16574, 60127, 60158, 'OP_DeleteCharacterRequestMsg', 18, 1), + (16575, 60127, 60158, 'OP_DeleteGuildMsg', 126, 1), + (16576, 60127, 60158, 'OP_DestUpdateReq', 213, 1), + (16577, 60127, 60158, 'OP_DialogCloseMsg', 112, 1), + (16578, 60127, 60158, 'OP_DialogSelectMsg', 111, 1), + (16579, 60127, 60158, 'OP_DispatchClientCmdMsg', 62, 1), + (16580, 60127, 60158, 'OP_DispatchESMsg', 61, 1), + (16581, 60127, 60158, 'OP_DispatchMsg', 455, 1), + (16582, 60127, 60158, 'OP_DispatchSpellCmdMsg', 182, 1), + (16583, 60127, 60158, 'OP_DisplayDebugNLLPointsMsg', 258, 1), + (16584, 60127, 60158, 'OP_DisplayEventMsg', 456, 1), + (16585, 60127, 60158, 'OP_DisplayExchangeScreenMsg', 448, 1), + (16586, 60127, 60158, 'OP_DisplayGroupOptionsScreenMsg', 203, 1), + (16587, 60127, 60158, 'OP_DisplayInnVisitScreenMsg', 205, 1), + (16588, 60127, 60158, 'OP_DisplayMailScreenMsg', 408, 1), + (16589, 60127, 60158, 'OP_DisplayTSEventReactionMsg', 228, 1), + (16590, 60127, 60158, 'OP_DisplayWarningMsg', 269, 1), + (16591, 60127, 60158, 'OP_DoneLoadingEntityResourcesMsg', 38, 1), + (16592, 60127, 60158, 'OP_DoneLoadingZoneResourcesMsg', 36, 1), + (16593, 60127, 60158, 'OP_DoneSendingInitialEntitiesMsg', 37, 1), + (16594, 60127, 60158, 'OP_DressingRoom', 514, 1), + (16595, 60127, 60158, 'OP_DumpSchedulerMsg', 206, 1), + (16596, 60127, 60158, 'OP_DungeonMakerEnter', 552, 1), + (16597, 60127, 60158, 'OP_DungeonMakerItemRequest', 554, 1), + (16598, 60127, 60158, 'OP_DungeonMakerItemResponse', 586, 1), + (16599, 60127, 60158, 'OP_DungeonMakerToolboxList', 556, 1), + (16600, 60127, 60158, 'OP_DungeonMakerUnknown', 557, 1), + (16601, 60127, 60158, 'OP_DungeonMakerUnknown1', 558, 1), + (16602, 60127, 60158, 'OP_DungeonPlayAsAvatarList', 755, 1), + (16603, 60127, 60158, 'OP_DungeonPlayAsAvatarSelected', 756, 1), + (16604, 60127, 60158, 'OP_EncounterBrokenMsg', 267, 1), + (16605, 60127, 60158, 'OP_EnterHouseMsg', 157, 1), + (16606, 60127, 60158, 'OP_EnterMoveObjectModeMsg', 164, 1), + (16607, 60127, 60158, 'OP_EntityVerbsReplyMsg', 184, 1), + (16608, 60127, 60158, 'OP_EntityVerbsRequestMsg', 183, 1), + (16609, 60127, 60158, 'OP_EntityVerbsVerbMsg', 185, 1), + (16610, 60127, 60158, 'OP_EqArenaResultsCmd', 706, 1), + (16611, 60127, 60158, 'OP_EqAvailWorldChannelsCmd', 693, 1), + (16612, 60127, 60158, 'OP_EqBetaCopyRequest', 612, 1), + (16613, 60127, 60158, 'OP_EqCannedEmoteCmd', 635, 1), + (16614, 60127, 60158, 'OP_EqChatChannelUpdateCmd', 691, 1), + (16615, 60127, 60158, 'OP_EqChoiceWinCmd', 672, 1), + (16616, 60127, 60158, 'OP_EqCloseWindowCmd', 664, 1), + (16617, 60127, 60158, 'OP_EqCollectionFilterCmd', 651, 1), + (16618, 60127, 60158, 'OP_EqCollectionItemCmd', 652, 1), + (16619, 60127, 60158, 'OP_EqCollectionUpdateCmd', 650, 1), + (16620, 60127, 60158, 'OP_EqConsignmentItemsCmd', 696, 1), + (16621, 60127, 60158, 'OP_EqCreateGhostCmd', 617, 1), + (16622, 60127, 60158, 'OP_EqCreateListBoxCmd', 632, 1), + (16623, 60127, 60158, 'OP_EqCreateSignWidgetCmd', 619, 1), + (16624, 60127, 60158, 'OP_EqCreateWidgetCmd', 618, 1), + (16625, 60127, 60158, 'OP_EqDebugPVDCmd', 685, 1), + (16626, 60127, 60158, 'OP_EqDestroyGhostCmd', 620, 1), + (16627, 60127, 60158, 'OP_EqDialogCloseCmd', 648, 1), + (16628, 60127, 60158, 'OP_EqDialogOpenCmd', 647, 1), + (16629, 60127, 60158, 'OP_EqDisplaySpellFailCmd', 668, 1), + (16630, 60127, 60158, 'OP_EqDisplayTextCmd', 616, 1), + (16631, 60127, 60158, 'OP_EqDrawablePathGraphCmd', 646, 1), + (16632, 60127, 60158, 'OP_EqEnableGameEventCmd', 678, 1), + (16633, 60127, 60158, 'OP_EqEnableWindowCmd', 680, 1), + (16634, 60127, 60158, 'OP_EqExamineInfoCmd', 663, 1), + (16635, 60127, 60158, 'OP_EqFactionUpdateCmd', 649, 1), + (16636, 60127, 60158, 'OP_EqFlashWindowCmd', 681, 1), + (16637, 60127, 60158, 'OP_EqGetProbsCmd', 689, 1), + (16638, 60127, 60158, 'OP_EqGroupMemberRemovedCmd', 642, 1), + (16639, 60127, 60158, 'OP_EqGuildBankEventActionCmd', 707, 1), + (16640, 60127, 60158, 'OP_EqGuildBankExamineInfoCmd', 708, 1), + (16641, 60127, 60158, 'OP_EqHearChainEffectCmd', 643, 1), + (16642, 60127, 60158, 'OP_EqHearChatCmd', 615, 1), + (16643, 60127, 60158, 'OP_EqHearCombatCmd', 624, 1), + (16644, 60127, 60158, 'OP_EqHearConsiderCmd', 630, 1), + (16645, 60127, 60158, 'OP_EqHearDeathCmd', 641, 1), + (16646, 60127, 60158, 'OP_EQHearDispellCmd', 753, 1), + (16647, 60127, 60158, 'OP_EqHearDrowningCmd', 640, 1), + (16648, 60127, 60158, 'OP_EqHearHealCmd', 690, 1), + (16649, 60127, 60158, 'OP_EqHearPlayFlavorCmd', 683, 1), + (16650, 60127, 60158, 'OP_EQHearProcCmd', 626, 1), + (16651, 60127, 60158, 'OP_EQHearResEffectCmd', 627, 1), + (16652, 60127, 60158, 'OP_EqHearSpellCastCmd', 625, 1), + (16653, 60127, 60158, 'OP_EqHearSpellFizzleCmd', 629, 1), + (16654, 60127, 60158, 'OP_EqHearSpellInterruptCmd', 628, 1), + (16655, 60127, 60158, 'OP_EqHearSpellNoLandCmd', 709, 1), + (16656, 60127, 60158, 'OP_EQHearThreatCmd', 747, 1), + (16657, 60127, 60158, 'OP_EqHelpPathClearCmd', 661, 1), + (16658, 60127, 60158, 'OP_EqHelpPathCmd', 660, 1), + (16659, 60127, 60158, 'OP_EqInspectPCResultsCmd', 645, 1), + (16660, 60127, 60158, 'OP_EqInstructionWindowCloseCmd', 675, 1), + (16661, 60127, 60158, 'OP_EqInstructionWindowCmd', 674, 1), + (16662, 60127, 60158, 'OP_EqInstructionWindowGoalCmd', 676, 1), + (16663, 60127, 60158, 'OP_EqInstructionWindowTaskCmd', 677, 1), + (16664, 60127, 60158, 'OP_EqJunctionListCmd', 666, 1), + (16665, 60127, 60158, 'OP_EqMapExplorationCmd', 699, 1), + (16666, 60127, 60158, 'OP_EqMentoring', 654, 1), + (16667, 60127, 60158, 'OP_EqPlaySound3DCmd', 638, 1), + (16668, 60127, 60158, 'OP_EqPlaySoundCmd', 637, 1), + (16669, 60127, 60158, 'OP_EqPlayVoiceCmd', 639, 1), + (16670, 60127, 60158, 'OP_EqQuestGroupCmd', 656, 1), + (16671, 60127, 60158, 'OP_EqQuestionnaireCmd', 687, 1), + (16672, 60127, 60158, 'OP_EqQuestJournalReplyCmd', 655, 1), + (16673, 60127, 60158, 'OP_EqQuestJournalUpdateCmd', 653, 1), + (16674, 60127, 60158, 'OP_EqReceiveOfferCmd', 644, 1), + (16675, 60127, 60158, 'OP_EqResurrectedCmd', 671, 1), + (16676, 60127, 60158, 'OP_EqSetControlGhostCmd', 622, 1), + (16677, 60127, 60158, 'OP_EqSetDebugPathPointsCmd', 633, 1), + (16678, 60127, 60158, 'OP_EqSetDefaultVerbCmd', 673, 1), + (16679, 60127, 60158, 'OP_EqSetPOVGhostCmd', 623, 1), + (16680, 60127, 60158, 'OP_EqShowBookCmd', 686, 1), + (16681, 60127, 60158, 'OP_EqShowDeathWindowCmd', 667, 1), + (16682, 60127, 60158, 'OP_EqShowWindowCmd', 679, 1), + (16683, 60127, 60158, 'OP_EqSpellCastEndCmd', 670, 1), + (16684, 60127, 60158, 'OP_EqSpellCastStartCmd', 669, 1), + (16685, 60127, 60158, 'OP_EqSpellMoveToRangeAndRetryCmd', 701, 1), + (16686, 60127, 60158, 'OP_EqStartBrokerCmd', 698, 1), + (16687, 60127, 60158, 'OP_EqStateCmd', 636, 1), + (16688, 60127, 60158, 'OP_EqStoreLogCmd', 700, 1), + (16689, 60127, 60158, 'OP_EqUpdateBankCmd', 662, 1), + (16690, 60127, 60158, 'OP_EqUpdateGhostCmd', 621, 1), + (16691, 60127, 60158, 'OP_EqUpdateLootCmd', 665, 1), + (16692, 60127, 60158, 'OP_EqUpdateMerchantCmd', 657, 1), + (16693, 60127, 60158, 'OP_EqUpdatePlayerMailCmd', 702, 1), + (16694, 60127, 60158, 'OP_EqUpdatePlayerTradeCmd', 659, 1), + (16695, 60127, 60158, 'OP_EqUpdateSignWidgetCmd', 684, 1), + (16696, 60127, 60158, 'OP_EqUpdateStoreCmd', 658, 1), + (16697, 60127, 60158, 'OP_EqUpdateSubClassesCmd', 631, 1), + (16698, 60127, 60158, 'OP_EqUpdateTargetCmd', 694, 1), + (16699, 60127, 60158, 'OP_EqWhoChannelQueryReplyCmd', 692, 1), + (16700, 60127, 60158, 'OP_ESInitMsg', 27, 1), + (16701, 60127, 60158, 'OP_ESLoginRequestMsg', 3, 1), + (16702, 60127, 60158, 'OP_ESReadyForClientsMsg', 28, 1), + (16703, 60127, 60158, 'OP_ESStatusMsg', 102, 1), + (16704, 60127, 60158, 'OP_ESWeatherRequestEndMsg', 107, 1), + (16705, 60127, 60158, 'OP_ESWeatherRequestMsg', 106, 1), + (16706, 60127, 60158, 'OP_ESZoneInstanceStatusMsg', 103, 1), + (16707, 60127, 60158, 'OP_ExamineConsignmentRequestMsg', 174, 1), + (16708, 60127, 60158, 'OP_ExamineConsignmentResponseMsg', 175, 1), + (16709, 60127, 60158, 'OP_ExamineInfoRequestMsg', 259, 1), + (16710, 60127, 60158, 'OP_ExamineItemRequestMsg', 198, 1), + (16711, 60127, 60158, 'OP_ExitHouseMsg', 158, 1), + (16712, 60127, 60158, 'OP_ExpectClientAsCharacterReplyMs', 24, 1), + (16713, 60127, 60158, 'OP_ExpectClientAsCharacterRequest', 34, 1), + (16714, 60127, 60158, 'OP_ExpPurchWindow', 732, 1), + (16715, 60127, 60158, 'OP_FellowshipExpMsg', 125, 1), + (16716, 60127, 60158, 'OP_FlightPathsMsg', 417, 1), + (16717, 60127, 60158, 'OP_GameWorldTimeMsg', 45, 1), + (16718, 60127, 60158, 'OP_PaperdollImage', 581, 1), + (16719, 60127, 60158, 'OP_GetAuctionAssetIDMsg', 445, 1), + (16720, 60127, 60158, 'OP_GetAuctionAssetIDReplyMsg', 446, 1), + (16721, 60127, 60158, 'OP_GetAvatarAccessRequestForCSToo', 397, 1), + (16722, 60127, 60158, 'OP_GetCharacterSerializedReplyMsg', 428, 1), + (16723, 60127, 60158, 'OP_GetCharacterSerializedRequestM', 427, 1), + (16724, 60127, 60158, 'OP_GroupCreatedMsg', 90, 1), + (16725, 60127, 60158, 'OP_GroupDestroyedMsg', 91, 1), + (16726, 60127, 60158, 'OP_GroupLeaderChangedMsg', 95, 1), + (16727, 60127, 60158, 'OP_GroupMemberAddedMsg', 92, 1), + (16728, 60127, 60158, 'OP_GroupMemberRemovedMsg', 93, 1), + (16729, 60127, 60158, 'OP_GroupOptionsMsg', 202, 1), + (16730, 60127, 60158, 'OP_GroupRemovedFromGroupMsg', 94, 1), + (16731, 60127, 60158, 'OP_GroupResendOOZDataMsg', 96, 1), + (16732, 60127, 60158, 'OP_GroupSettingsChangedMsg', 97, 1), + (16733, 60127, 60158, 'OP_GuildBankActionMsg', 278, 1), + (16734, 60127, 60158, 'OP_GuildBankActionResponseMsg', 279, 1), + (16735, 60127, 60158, 'OP_GuildBankEventListMsg', 283, 1), + (16736, 60127, 60158, 'OP_GuildBankItemDetailsRequestMsg', 280, 1), + (16737, 60127, 60158, 'OP_GuildBankItemDetailsResponseMs', 281, 1), + (16738, 60127, 60158, 'OP_GuildBankUpdateMsg', 282, 1), + (16739, 60127, 60158, 'OP_GuildEventActionMsg', 273, 1), + (16740, 60127, 60158, 'OP_GuildEventAddMsg', 272, 1), + (16741, 60127, 60158, 'OP_GuildEventDetailsMsg', 276, 1), + (16742, 60127, 60158, 'OP_GuildEventListMsg', 274, 1), + (16743, 60127, 60158, 'OP_GuildEventMsg', 271, 1), + (16744, 60127, 60158, 'OP_GuildMembershipResponseMsg', 361, 1), + (16745, 60127, 60158, 'OP_GuildRecruiting', 712, 1), + (16746, 60127, 60158, 'OP_GuildRecruitingDetails', 713, 1), + (16747, 60127, 60158, 'OP_GuildRecruitingImage', 714, 1), + (16748, 60127, 60158, 'OP_GuildRecruitingMemberInfo', 711, 1), + (16749, 60127, 60158, 'OP_GuildsayMsg', 124, 1), + (16750, 60127, 60158, 'OP_GuildStatusUpdate', 705, 1), + (16751, 60127, 60158, 'OP_GuildUpdateMsg', 127, 1), + (16752, 60127, 60158, 'OP_HeritageMsg', 10004, 1), + (16753, 60127, 60158, 'OP_HideIllusionsMsg', 197, 1), + (16754, 60127, 60158, 'OP_HouseAccessRemoveMsg', 161, 1), + (16755, 60127, 60158, 'OP_HouseAccessSetMsg', 160, 1), + (16756, 60127, 60158, 'OP_HouseCustomizationScreenMsg', 169, 1), + (16757, 60127, 60158, 'OP_HouseDefaultAccessSetMsg', 159, 1), + (16758, 60127, 60158, 'OP_HouseDeletedRemotelyMsg', 145, 1), + (16759, 60127, 60158, 'OP_HouseItemsList', 488, 1), + (16760, 60127, 60158, 'OP_HousingDataChangedMsg', 431, 1), + (16761, 60127, 60158, 'OP_HousingRestoreMsg', 432, 1), + (16762, 60127, 60158, 'OP_InspectPlayerMsg', 367, 1), + (16763, 60127, 60158, 'OP_InspectPlayerRequestMsg', 454, 1), + (16764, 60127, 60158, 'OP_InviteRequestMsg', 451, 1), + (16765, 60127, 60158, 'OP_InviteResponseMsg', 452, 1), + (16766, 60127, 60158, 'OP_InviteTargetResponseMsg', 453, 1), + (16767, 60127, 60158, 'OP_JoinGuildNotifyMsg', 363, 1), + (16768, 60127, 60158, 'OP_JournalQuestStoryline', 754, 1), + (16769, 60127, 60158, 'OP_KeymapDataMsg', 180, 1), + (16770, 60127, 60158, 'OP_KeymapLoadMsg', 178, 1), + (16771, 60127, 60158, 'OP_KeymapNoneMsg', 179, 1), + (16772, 60127, 60158, 'OP_KeymapSaveMsg', 181, 1), + (16773, 60127, 60158, 'OP_KnowledgebaseRequestMsg', 230, 1), + (16774, 60127, 60158, 'OP_KnowledgebaseResponseMsg', 231, 1), + (16775, 60127, 60158, 'OP_KnowledgeWindowSlotMappingMsg', 373, 1), + (16776, 60127, 60158, 'OP_KnownLanguagesMsg', 242, 1), + (16777, 60127, 60158, 'OP_Launchpad', 579, 1), + (16778, 60127, 60158, 'OP_LeaveGuildNotifyMsg', 362, 1), + (16779, 60127, 60158, 'OP_LevelChangedMsg', 265, 1), + (16780, 60127, 60158, 'OP_LFGGroupSearch', 508, 1), + (16781, 60127, 60158, 'OP_LFGUpdateMsg', 522, 1), + (16782, 60127, 60158, 'OP_LikeOption', 139, 1), + (16783, 60127, 60158, 'OP_LoadCalendarEvents', 582, 1), + (16784, 60127, 60158, 'OP_LoadWelcomeWindow', 564, 1), + (16785, 60127, 60158, 'OP_LoginByNumRequestMsg', 1, 1), + (16786, 60127, 60158, 'OP_LoginReplyMsg', 4, 1), + (16787, 60127, 60158, 'OP_LoginRequestMsg', 0, 1), + (16788, 60127, 60158, 'OP_LootItemsRequestMsg', 188, 1), + (16789, 60127, 60158, 'OP_Lottery', 710, 1), + (16790, 60127, 60158, 'OP_LSCheckAcctLockMsg', 207, 1), + (16791, 60127, 60158, 'OP_LsClientAlertlogReplyMsg', 246, 1), + (16792, 60127, 60158, 'OP_LsClientBaselogReplyMsg', 244, 1), + (16793, 60127, 60158, 'OP_LsClientCrashlogReplyMsg', 245, 1), + (16794, 60127, 60158, 'OP_LsClientVerifylogReplyMsg', 247, 1), + (16795, 60127, 60158, 'OP_LsRequestClientCrashLogMsg', 243, 1), + (16796, 60127, 60158, 'OP_LSServerLockMsg', 369, 1), + (16797, 60127, 60158, 'OP_MacroInitMsg', 262, 1), + (16798, 60127, 60158, 'OP_MacroUpdateMsg', 263, 1), + (16799, 60127, 60158, 'OP_MailCommitSendMessageMsg', 348, 1), + (16800, 60127, 60158, 'OP_MailDeleteMessageMsg', 344, 1), + (16801, 60127, 60158, 'OP_MailEventNotificationMsg', 415, 1), + (16802, 60127, 60158, 'OP_MailGetHeadersReplyMsg', 345, 1), + (16803, 60127, 60158, 'OP_MailGetMessageMsg', 342, 1), + (16804, 60127, 60158, 'OP_MailGetMessageReplyMsg', 346, 1), + (16805, 60127, 60158, 'OP_MailRemoveAttachFromMailMsg', 350, 1), + (16806, 60127, 60158, 'OP_MailSendMessageMsg', 343, 1), + (16807, 60127, 60158, 'OP_MailSendMessageReplyMsg', 347, 1), + (16808, 60127, 60158, 'OP_MailSendSystemMessageMsg', 349, 1), + (16809, 60127, 60158, 'OP_MakeGroupLeaderMsg', 89, 1), + (16810, 60127, 60158, 'OP_MapFogDataInitMsg', 399, 1), + (16811, 60127, 60158, 'OP_MapFogDataUpdateMsg', 400, 1), + (16812, 60127, 60158, 'OP_MapRequest', 525, 1), + (16813, 60127, 60158, 'OP_MarketAddFundsReply', 533, 1), + (16814, 60127, 60158, 'OP_MarketAddFundsRequest', 532, 1), + (16815, 60127, 60158, 'OP_MarketFundsUpdate', 530, 1), + (16816, 60127, 60158, 'OP_MarketPlaceItems', 543, 1), + (16817, 60127, 60158, 'OP_MarketPlacePrices', 536, 1), + (16818, 60127, 60158, 'OP_MarketPurchase', 535, 1), + (16819, 60127, 60158, 'OP_MentorPopup', 562, 1), + (16820, 60127, 60158, 'OP_MercHireWindow', 757, 1), + (16821, 60127, 60158, 'OP_MercUnknown', 758, 1), + (16822, 60127, 60158, 'OP_MigrateBoatTransportMsg', 256, 1), + (16823, 60127, 60158, 'OP_MigrateBoatTransportReplyMsg', 257, 1), + (16824, 60127, 60158, 'OP_MigrateClientToZoneReplyMsg', 84, 1), + (16825, 60127, 60158, 'OP_MigrateClientToZoneRequestMsg', 83, 1), + (16826, 60127, 60158, 'OP_ModifyGuildMsg', 270, 1), + (16827, 60127, 60158, 'OP_MonitorCharacterListMsg', 58, 1), + (16828, 60127, 60158, 'OP_MonitorCharacterListRequestMsg', 59, 1), + (16829, 60127, 60158, 'OP_MonitorReplyMsg', 57, 1), + (16830, 60127, 60158, 'OP_MOTDMsg', 46, 1), + (16831, 60127, 60158, 'OP_MoveableObjectPlacementCriteri', 163, 1), + (16832, 60127, 60158, 'OP_MoveLogUpdateMsg', 404, 1), + (16833, 60127, 60158, 'OP_NotifyApprenticeStoppedMentori', 412, 1), + (16834, 60127, 60158, 'OP_OfferQuestMsg', 405, 1), + (16835, 60127, 60158, 'OP_OnscreenMsgMsg', 268, 1), + (16836, 60127, 60158, 'OP_OpenCharCust', 565, 1), + (16837, 60127, 60158, 'OP_OutOfZoneMemberDataMsg', 98, 1), + (16838, 60127, 60158, 'OP_PayHouseUpkeepMsg', 162, 1), + (16839, 60127, 60158, 'OP_PerformCameraShakeMsg', 217, 1), + (16840, 60127, 60158, 'OP_PerformPlayerKnockbackMsg', 216, 1), + (16841, 60127, 60158, 'OP_PetOptions', 204, 1), + (16842, 60127, 60158, 'OP_PetOptionsResponse', 585, 1), + (16843, 60127, 60158, 'OP_PlayCharacterReplyMsg', 21, 1), + (16844, 60127, 60158, 'OP_PlayCharacterRequestMsg', 20, 1), + (16845, 60127, 60158, 'OP_PlayerHouseAccessUpdateMsg', 150, 1), + (16846, 60127, 60158, 'OP_PlayerHouseBaseScreenMsg', 148, 1), + (16847, 60127, 60158, 'OP_PlayerHouseCloseUIMsg', 152, 1), + (16848, 60127, 60158, 'OP_PlayerHouseDisplayStatusMsg', 151, 1), + (16849, 60127, 60158, 'OP_PlayerHousePurchaseScreenMsg', 149, 1), + (16850, 60127, 60158, 'OP_PlayerMadeInstances', 143, 1), + (16851, 60127, 60158, 'OP_PlayerMadeInstancesScreen', 142, 1), + (16852, 60127, 60158, 'OP_PlayerPollAnswer', 561, 1), + (16853, 60127, 60158, 'OP_PlayerPollPopup', 560, 1), + (16854, 60127, 60158, 'OP_PlayLon', 515, 1), + (16855, 60127, 60158, 'OP_PointOfInterest', 736, 1), + (16856, 60127, 60158, 'OP_PointOfInterest2', 737, 1), + (16857, 60127, 60158, 'OP_PopulateSkillMapsMsg', 218, 1), + (16858, 60127, 60158, 'OP_PositionBoatTransportMsg', 255, 1), + (16859, 60127, 60158, 'OP_PositionMoveableObject', 165, 1), + (16860, 60127, 60158, 'OP_PostPossessionMsg', 458, 1), + (16861, 60127, 60158, 'OP_PredictionUpdateMsg', 39, 1), + (16862, 60127, 60158, 'OP_PrePossessionMsg', 457, 1), + (16863, 60127, 60158, 'OP_PromoFlagsDetailsMsg', 378, 1), + (16864, 60127, 60158, 'OP_PublishHouse', 141, 1), + (16865, 60127, 60158, 'OP_PurchaseConsignmentLoreCheckRe', 411, 1), + (16866, 60127, 60158, 'OP_PurchaseConsignmentRequestMsg', 131, 1), + (16867, 60127, 60158, 'OP_QueAllBgSolo', 568, 1), + (16868, 60127, 60158, 'OP_QuestionnaireMsg', 264, 1), + (16869, 60127, 60158, 'OP_QuestJournalInspectMsg', 116, 1), + (16870, 60127, 60158, 'OP_QuestJournalOpenMsg', 115, 1), + (16871, 60127, 60158, 'OP_QuestJournalSetVisibleMsg', 117, 1), + (16872, 60127, 60158, 'OP_QuestJournalWaypointMsg', 118, 1), + (16873, 60127, 60158, 'OP_QuestReward', 324, 1), + (16874, 60127, 60158, 'OP_QuickbarInitMsg', 260, 1), + (16875, 60127, 60158, 'OP_QuickbarUpdateMsg', 261, 1), + (16876, 60127, 60158, 'OP_RaceRestrictionMsg', 443, 1), + (16877, 60127, 60158, 'OP_ReadBookPageMsg', 199, 1), + (16878, 60127, 60158, 'OP_ReadyForTakeOffMsg', 195, 1), + (16879, 60127, 60158, 'OP_ReadyToZoneMsg', 86, 1), + (16880, 60127, 60158, 'OP_RecipeBook', 544, 1), + (16881, 60127, 60158, 'OP_RecipeDetailsMsg', 74, 1), + (16882, 60127, 60158, 'OP_RecipeList', 748, 1), + (16883, 60127, 60158, 'OP_RecipeListUnknown', 597, 1), + (16884, 60127, 60158, 'OP_RelinquishHouseMsg', 156, 1), + (16885, 60127, 60158, 'OP_ReloadLocalizedTxtMsg', 359, 1), + (16886, 60127, 60158, 'OP_RemoteCmdMsg', 44, 1), + (16887, 60127, 60158, 'OP_RemoveClientFromGroupMsg', 87, 1), + (16888, 60127, 60158, 'OP_RemoveConcentrationMsg', 114, 1), + (16889, 60127, 60158, 'OP_RemoveGroupFromGroupMsg', 88, 1), + (16890, 60127, 60158, 'OP_RemoveSpellEffectMsg', 113, 1), + (16891, 60127, 60158, 'OP_RenameGuildMsg', 286, 1), + (16892, 60127, 60158, 'OP_ReplaceableSubMeshesMsg', 168, 1), + (16893, 60127, 60158, 'OP_ReportMsg', 384, 1), + (16894, 60127, 60158, 'OP_RequestCampMsg', 52, 1), + (16895, 60127, 60158, 'OP_RequestGuildBankEventDetailsMs', 284, 1), + (16896, 60127, 60158, 'OP_RequestGuildEventDetailsMsg', 275, 1), + (16897, 60127, 60158, 'OP_RequestGuildInfoMsg', 277, 1), + (16898, 60127, 60158, 'OP_RequestGuildMembershipMsg', 360, 1), + (16899, 60127, 60158, 'OP_RequestHelpRepathMsg', 209, 1), + (16900, 60127, 60158, 'OP_RequestRecipeDetailsMsg', 73, 1), + (16901, 60127, 60158, 'OP_RequestTargetLocMsg', 210, 1), + (16902, 60127, 60158, 'OP_Research', 749, 1), + (16903, 60127, 60158, 'OP_ResendWorldChannelsMsg', 447, 1), + (16904, 60127, 60158, 'OP_ReskinCharacterRequestMsg', 15, 1), + (16905, 60127, 60158, 'OP_RestartZoneMsg', 416, 1), + (16906, 60127, 60158, 'OP_RewardPackMsg', 285, 1), + (16907, 60127, 60158, 'OP_SatMsg', 192, 1), + (16908, 60127, 60158, 'OP_SavageBarInitMsg', 584, 1), + (16909, 60127, 60158, 'OP_SelectZoneTeleporterDestinatio', 358, 1), + (16910, 60127, 60158, 'OP_SendLatestRequestMsg', 99, 1), + (16911, 60127, 60158, 'OP_ServerPlayCharacterReplyMsg', 26, 1), + (16912, 60127, 60158, 'OP_ServerPlayCharacterRequestMsg', 25, 1), + (16913, 60127, 60158, 'OP_SetInstanceDisplayNameMsg', 444, 1), + (16914, 60127, 60158, 'OP_SetRemoteCmdsMsg', 43, 1), + (16915, 60127, 60158, 'OP_SetSocialMsg', 101, 1), + (16916, 60127, 60158, 'OP_ShaderCustomizationMsg', 167, 1), + (16917, 60127, 60158, 'OP_ShowCreateFromRecipeUIMsg', 222, 1), + (16918, 60127, 60158, 'OP_ShowIllusionsMsg', 196, 1), + (16919, 60127, 60158, 'OP_ShowItemCreationProcessUIMsg', 226, 1), + (16920, 60127, 60158, 'OP_ShowRecipeBookMsg', 229, 1), + (16921, 60127, 60158, 'OP_ShowZoneTeleporterDestinations', 357, 1), + (16922, 60127, 60158, 'OP_SitMsg', 190, 1), + (16923, 60127, 60158, 'OP_SkillInfoRequest', 518, 1), + (16924, 60127, 60158, 'OP_SkillInfoResponse', 519, 1), + (16925, 60127, 60158, 'OP_SOEAllAccess', 613, 1), + (16926, 60127, 60158, 'OP_SpellGainedMsg', 266, 1), + (16927, 60127, 60158, 'OP_StandMsg', 191, 1), + (16928, 60127, 60158, 'OP_StoodMsg', 193, 1), + (16929, 60127, 60158, 'OP_StopItemCreationMsg', 225, 1), + (16930, 60127, 60158, 'OP_StoppedLootingMsg', 189, 1), + (16931, 60127, 60158, 'OP_StopTrackingMsg', 395, 1), + (16932, 60127, 60158, 'OP_SubmitCharCust', 566, 1), + (16933, 60127, 60158, 'OP_SupplyDepot', 746, 1), + (16934, 60127, 60158, 'OP_SysClient', 221, 1), + (16935, 60127, 60158, 'OP_TeleportWithinZoneMsg', 81, 1), + (16936, 60127, 60158, 'OP_TeleportWithinZoneNoReloadMsg', 82, 1), + (16937, 60127, 60158, 'OP_TintWidgetsMsg', 173, 1), + (16938, 60127, 60158, 'OP_TitleUpdateMsg', 388, 1), + (16939, 60127, 60158, 'OP_TrackingUpdateMsg', 393, 1), + (16940, 60127, 60158, 'OP_TradeskillList', 715, 1), + (16941, 60127, 60158, 'OP_TraitsList', 738, 1), + (16942, 60127, 60158, 'OP_UIEvent', 531, 1), + (16943, 60127, 60158, 'OP_UIResetMsg', 177, 1), + (16944, 60127, 60158, 'OP_UISettingsResponseMsg', 176, 1), + (16945, 60127, 60158, 'OP_Unknown', 771, 1), + (16946, 60127, 60158, 'OP_UnknownNpcMsg', 377, 1), + (16947, 60127, 60158, 'OP_UpdateActivePublicZonesMsg', 376, 1), + (16948, 60127, 60158, 'OP_UpdateCharacterSheetMsg', 65, 1), + (16949, 60127, 60158, 'OP_UpdateClientPredFlagsMsg', 249, 1), + (16950, 60127, 60158, 'OP_UpdateDebugRadiiMsg', 383, 1), + (16951, 60127, 60158, 'OP_UpdateGroupMemberDataMsg', 392, 1), + (16952, 60127, 60158, 'OP_UpdateHouseAccessDataMsg', 147, 1), + (16953, 60127, 60158, 'OP_UpdateHouseDataMsg', 146, 1), + (16954, 60127, 60158, 'OP_UpdateInventoryMsg', 70, 1), + (16955, 60127, 60158, 'OP_UpdateItemCreationProcessUIMsg', 227, 1), + (16956, 60127, 60158, 'OP_UpdateMotdMsg', 211, 1), + (16957, 60127, 60158, 'OP_UpdateOpportunityMsg', 77, 1), + (16958, 60127, 60158, 'OP_UpdatePositionMsg', 41, 1), + (16959, 60127, 60158, 'OP_UpdateRaidMsg', 385, 1), + (16960, 60127, 60158, 'OP_UpdateRecipeBookMsg', 72, 1), + (16961, 60127, 60158, 'OP_UpdateSkillBookMsg', 75, 1), + (16962, 60127, 60158, 'OP_UpdateSkillsMsg', 76, 1), + (16963, 60127, 60158, 'OP_UpdateSpellBookMsg', 68, 1), + (16964, 60127, 60158, 'OP_UpdateTargetLocMsg', 64, 1), + (16965, 60127, 60158, 'OP_UpdateTargetMsg', 63, 1), + (16966, 60127, 60158, 'OP_UpdateTitleCmd', 498, 1), + (16967, 60127, 60158, 'OP_UseAdornment', 726, 1), + (16968, 60127, 60158, 'OP_VideoUploaded', 583, 1), + (16969, 60127, 60158, 'OP_VoiceChatChannel', 524, 1), + (16970, 60127, 60158, 'OP_VoiceChatServer', 742, 1), + (16971, 60127, 60158, 'OP_WaypointReplyMsg', 353, 1), + (16972, 60127, 60158, 'OP_WaypointRequestMsg', 352, 1), + (16973, 60127, 60158, 'OP_WaypointSelectMsg', 354, 1), + (16974, 60127, 60158, 'OP_WaypointUpdateMsg', 355, 1), + (16975, 60127, 60158, 'OP_Weakness', 587, 1), + (16976, 60127, 60158, 'OP_WhoQueryReplyMsg', 56, 1), + (16977, 60127, 60158, 'OP_WhoQueryRequestMsg', 55, 1), + (16978, 60127, 60158, 'OP_WorldDataChangeMsg', 414, 1), + (16979, 60127, 60158, 'OP_WorldDataUpdateMsg', 240, 1), + (16980, 60127, 60158, 'OP_WorldListMsg', 8, 1), + (16981, 60127, 60158, 'OP_WorldPingMsg', 403, 1), + (16982, 60127, 60158, 'OP_WorldShutdownUpdateMsg', 407, 1), + (16983, 60127, 60158, 'OP_WorldStatusChangeMsg', 6, 1), + (16984, 60127, 60158, 'OP_WorldTravelAvail', 576, 1), + (16985, 60127, 60158, 'OP_WSAcctLockStatusMsg', 208, 1), + (16986, 60127, 60158, 'OP_WSCreateCharacterReplyMsg', 14, 1), + (16987, 60127, 60158, 'OP_WSCreateCharacterRequestMsg', 13, 1), + (16988, 60127, 60158, 'OP_WSLoginRequestMsg', 2, 1), + (16989, 60127, 60158, 'OP_WSServerHideMsg', 370, 1), + (16990, 60127, 60158, 'OP_WSServerLockMsg', 368, 1), + (16991, 60127, 60158, 'OP_WSStatusReplyMsg', 5, 1), + (16992, 60127, 60158, 'OP_ZoneBgInstanceList', 572, 1), + (16993, 60127, 60158, 'OP_ZoneInfoMsg', 35, 1), + (16994, 60127, 60158, 'OP_ZoneInstanceCreateReplyMsg', 32, 1), + (16995, 60127, 60158, 'OP_ZoneInstanceDestroyedMsg', 33, 1), + (16996, 60127, 60158, 'OP_ZoneMOTDMsg', 47, 1), + (16997, 60127, 60158, 'OP_ZonesStatusMsg', 105, 1), + (16998, 60127, 60158, 'OP_ZonesStatusRequestMsg', 104, 1), + (16999, 60127, 60158, 'OP_ZoneToFriendReplyMsg', 288, 1), + (17000, 60127, 60158, 'OP_ZoneToFriendRequestMsg', 287, 1), + (17001, 60160, 61548, 'OP_AchievementUpdateMsg', 759, 1), + (17002, 60160, 61548, 'OP_AddSocialStructureStandingMsg', 253, 1), + (17003, 60160, 61548, 'OP_AdvancementRequestMsg', 398, 1), + (17004, 60160, 61548, 'OP_AdventureList', 492, 1), + (17005, 60160, 61548, 'OP_AFKUpdateMsg', 374, 1), + (17006, 60160, 61548, 'OP_AfterInvSpellUpdate', 71, 1), + (17007, 60160, 61548, 'OP_AllCharactersDescReplyMsg', 10, 1), + (17008, 60160, 61548, 'OP_AllCharactersDescRequestMsg', 9, 1), + (17009, 60160, 61548, 'OP_AllWSDescRequestMsg', 7, 1), + (17010, 60160, 61548, 'OP_AnonUpdateMsg', 375, 1), + (17011, 60160, 61548, 'OP_ArenaCreate', 460, 1), + (17012, 60160, 61548, 'OP_ArenaGameTypesMsg', 449, 1), + (17013, 60160, 61548, 'OP_ArenaList', 461, 1), + (17014, 60160, 61548, 'OP_ArenaWindow', 469, 1), + (17015, 60160, 61548, 'OP_AttackAllowed', 504, 1), + (17016, 60160, 61548, 'OP_AttackNotAllowed', 505, 1), + (17017, 60160, 61548, 'OP_AuctionAbortMsg', 440, 1), + (17018, 60160, 61548, 'OP_AuctionCharacter', 437, 1), + (17019, 60160, 61548, 'OP_AuctionCharacterReply', 438, 1), + (17020, 60160, 61548, 'OP_AuctionCoin', 435, 1), + (17021, 60160, 61548, 'OP_AuctionCoinReply', 436, 1), + (17022, 60160, 61548, 'OP_AuctionCommitMsg', 439, 1), + (17023, 60160, 61548, 'OP_AuctionItem', 433, 1), + (17024, 60160, 61548, 'OP_AuctionItemReply', 434, 1), + (17025, 60160, 61548, 'OP_AuditAuctionEventMsg', 450, 1), + (17026, 60160, 61548, 'OP_AvatarCreatedMsg', 48, 1), + (17027, 60160, 61548, 'OP_AvatarDestroyedMsg', 49, 1), + (17028, 60160, 61548, 'OP_AvatarUpdateMsg', 364, 1), + (17029, 60160, 61548, 'OP_BadLanguageFilter', 523, 1), + (17030, 60160, 61548, 'OP_BagOptions', 506, 1), + (17031, 60160, 61548, 'OP_BeginItemCreationMsg', 224, 1), + (17032, 60160, 61548, 'OP_BeginTrackingMsg', 394, 1), + (17033, 60160, 61548, 'OP_BioUpdateMsg', 366, 1), + (17034, 60160, 61548, 'OP_BrokerAddBag', 296, 1), + (17035, 60160, 61548, 'OP_BrokerRemoveBag', 297, 1), + (17036, 60160, 61548, 'OP_BrokerSellList', 702, 1), + (17037, 60160, 61548, 'OP_BuyPlayerHouseMsg', 153, 1), + (17038, 60160, 61548, 'OP_BuyPlayerHouseTintMsg', 154, 1), + (17039, 60160, 61548, 'OP_CampAbortedMsg', 54, 1), + (17040, 60160, 61548, 'OP_CampClientMsg', 391, 1), + (17041, 60160, 61548, 'OP_CampStartedMsg', 53, 1), + (17042, 60160, 61548, 'OP_CancelCreateFromRecipeMsg', 223, 1), + (17043, 60160, 61548, 'OP_CancelledFeignMsg', 219, 1), + (17044, 60160, 61548, 'OP_CancelMoveObjectModeMsg', 166, 1), + (17045, 60160, 61548, 'OP_CancelSpellCast', 493, 1), + (17046, 60160, 61548, 'OP_ChangeServerControlFlagMsg', 250, 1), + (17047, 60160, 61548, 'OP_ChangeZoneMsg', 79, 1), + (17048, 60160, 61548, 'OP_CharacterAchievements', 758, 1), + (17049, 60160, 61548, 'OP_CharacterCreatedDungeons', 555, 1), + (17050, 60160, 61548, 'OP_CharacterCurrency', 757, 1), + (17051, 60160, 61548, 'OP_CharacterHousingList', 511, 1), + (17052, 60160, 61548, 'OP_CharacterLinkdeadMsg', 418, 1), + (17053, 60160, 61548, 'OP_CharacterMerc', 67, 1), + (17054, 60160, 61548, 'OP_CharacterMounts', 588, 1), + (17055, 60160, 61548, 'OP_CharacterPet', 66, 1), + (17056, 60160, 61548, 'OP_CharNameChangedMsg', 356, 1), + (17057, 60160, 61548, 'OP_CharRenamed', 723, 1), + (17058, 60160, 61548, 'OP_CharTransferCommitReplyMsg', 426, 1), + (17059, 60160, 61548, 'OP_CharTransferCommitRequestMsg', 424, 1), + (17060, 60160, 61548, 'OP_CharTransferReplyMsg', 422, 1), + (17061, 60160, 61548, 'OP_CharTransferRequestMsg', 421, 1), + (17062, 60160, 61548, 'OP_CharTransferRollbackReplyMsg', 425, 1), + (17063, 60160, 61548, 'OP_CharTransferRollbackRequestMsg', 423, 1), + (17064, 60160, 61548, 'OP_CharTransferStartReplyMsg', 420, 1), + (17065, 60160, 61548, 'OP_CharTransferStartRequestMsg', 419, 1), + (17066, 60160, 61548, 'OP_CharTransferValidateReplyMsg', 442, 1), + (17067, 60160, 61548, 'OP_CharTransferValidateRequestMsg', 441, 1), + (17068, 60160, 61548, 'OP_ChatCreateChannelMsg', 289, 1), + (17069, 60160, 61548, 'OP_ChatFiltersMsg', 338, 1), + (17070, 60160, 61548, 'OP_ChatJoinChannelMsg', 290, 1), + (17071, 60160, 61548, 'OP_ChatLeaveChannelMsg', 292, 1), + (17072, 60160, 61548, 'OP_ChatRelationshipUpdateMsg', 187, 1), + (17073, 60160, 61548, 'OP_ChatSendFriendsMsg', 299, 1), + (17074, 60160, 61548, 'OP_ChatSendIgnoresMsg', 300, 1), + (17075, 60160, 61548, 'OP_ChatTellChannelMsg', 293, 1), + (17076, 60160, 61548, 'OP_ChatTellUserMsg', 294, 1), + (17077, 60160, 61548, 'OP_ChatToggleFriendMsg', 295, 1), + (17078, 60160, 61548, 'OP_ChatToggleIgnoreMsg', 298, 1), + (17079, 60160, 61548, 'OP_ChatWhoChannelMsg', 291, 1), + (17080, 60160, 61548, 'OP_ClearDataMsg', 100, 1), + (17081, 60160, 61548, 'OP_ClearForLandingMsg', 495, 1), + (17082, 60160, 61548, 'OP_ClearForTakeOffMsg', 194, 1), + (17083, 60160, 61548, 'OP_ClientCmdMsg', 60, 1), + (17084, 60160, 61548, 'OP_ClientFellMsg', 389, 1), + (17085, 60160, 61548, 'OP_ClientIdleBeginMsg', 409, 1), + (17086, 60160, 61548, 'OP_ClientIdleEndMsg', 410, 1), + (17087, 60160, 61548, 'OP_ClientInDeathRegionMsg', 390, 1), + (17088, 60160, 61548, 'OP_ClientTeleportRequestMsg', 80, 1), + (17089, 60160, 61548, 'OP_ClientTeleportToLocationMsg', 248, 1), + (17090, 60160, 61548, 'OP_CloseGroupInviteWindowMsg', 401, 1), + (17091, 60160, 61548, 'OP_CollectAllHouseItemsMsg', 155, 1), + (17092, 60160, 61548, 'OP_ConsignItemRequestMsg', 129, 1), + (17093, 60160, 61548, 'OP_ConsignItemResponseMsg', 130, 1), + (17094, 60160, 61548, 'OP_ConsignmentCloseStoreMsg', 128, 1), + (17095, 60160, 61548, 'OP_ConsignRemoveItemsMsg', 382, 1), + (17096, 60160, 61548, 'OP_ConsignViewCreateMsg', 379, 1), + (17097, 60160, 61548, 'OP_ConsignViewGetPageMsg', 380, 1), + (17098, 60160, 61548, 'OP_ConsignViewReleaseMsg', 381, 1), + (17099, 60160, 61548, 'OP_ConsignViewSortMsg', 387, 1), + (17100, 60160, 61548, 'OP_CorruptedClientMsg', 413, 1), + (17101, 60160, 61548, 'OP_CreateBoatTransportsMsg', 254, 1), + (17102, 60160, 61548, 'OP_CreateCharacterDungeon', 551, 1), + (17103, 60160, 61548, 'OP_CreateCharacterReplyMsg', 12, 1), + (17104, 60160, 61548, 'OP_CreateCharacterRequestMsg', 11, 1), + (17105, 60160, 61548, 'OP_CreateCharFromCBBReplyMsg', 430, 1), + (17106, 60160, 61548, 'OP_CreateCharFromCBBRequestMsg', 429, 1), + (17107, 60160, 61548, 'OP_CreateGuildReplyMsg', 123, 1), + (17108, 60160, 61548, 'OP_CreateGuildRequestMsg', 121, 1), + (17109, 60160, 61548, 'OP_CreateZoneInstanceMsg', 31, 1), + (17110, 60160, 61548, 'OP_CsCategoryRequestMsg', 371, 1), + (17111, 60160, 61548, 'OP_CsCategoryResponseMsg', 372, 1), + (17112, 60160, 61548, 'OP_CSTicketAddCommentMsg', 237, 1), + (17113, 60160, 61548, 'OP_CSTicketChangeNotificationMsg', 239, 1), + (17114, 60160, 61548, 'OP_CSTicketCommentRequestMsg', 234, 1), + (17115, 60160, 61548, 'OP_CSTicketCommentResponseMsg', 235, 1), + (17116, 60160, 61548, 'OP_CSTicketCreateMsg', 236, 1), + (17117, 60160, 61548, 'OP_CSTicketDeleteMsg', 238, 1), + (17118, 60160, 61548, 'OP_CSTicketHeaderRequestMsg', 232, 1), + (17119, 60160, 61548, 'OP_CSTicketInfoMsg', 233, 1), + (17120, 60160, 61548, 'OP_CSToolAccessResponseMsg', 392, 1), + (17121, 60160, 61548, 'OP_CSToolsRequestMsg', 251, 1), + (17122, 60160, 61548, 'OP_CSToolsResponseMsg', 252, 1), + (17123, 60160, 61548, 'OP_CurrentPet', 489, 1), + (17124, 60160, 61548, 'OP_CustomizationPurchaseRequestMs', 170, 1), + (17125, 60160, 61548, 'OP_CustomizationReplyMsg', 172, 1), + (17126, 60160, 61548, 'OP_CustomizationSetRequestMsg', 171, 1), + (17127, 60160, 61548, 'OP_CustomizeHouseDisplay', 748, 1), + (17128, 60160, 61548, 'OP_DailyObjectives', 601, 1), + (17129, 60160, 61548, 'OP_DefaultGroupOptionsMsg', 201, 1), + (17130, 60160, 61548, 'OP_DefaultGroupOptionsRequestMsg', 200, 1), + (17131, 60160, 61548, 'OP_DeleteCharacterReplyMsg', 19, 1), + (17132, 60160, 61548, 'OP_DeleteCharacterRequestMsg', 18, 1), + (17133, 60160, 61548, 'OP_DeleteGuildMsg', 126, 1), + (17134, 60160, 61548, 'OP_DestUpdateReq', 213, 1), + (17135, 60160, 61548, 'OP_DialogCloseMsg', 112, 1), + (17136, 60160, 61548, 'OP_DialogSelectMsg', 111, 1), + (17137, 60160, 61548, 'OP_DispatchClientCmdMsg', 62, 1), + (17138, 60160, 61548, 'OP_DispatchESMsg', 61, 1), + (17139, 60160, 61548, 'OP_DispatchMsg', 455, 1), + (17140, 60160, 61548, 'OP_DispatchSpellCmdMsg', 182, 1), + (17141, 60160, 61548, 'OP_DisplayDebugNLLPointsMsg', 258, 1), + (17142, 60160, 61548, 'OP_DisplayEventMsg', 456, 1), + (17143, 60160, 61548, 'OP_DisplayExchangeScreenMsg', 448, 1), + (17144, 60160, 61548, 'OP_DisplayGroupOptionsScreenMsg', 203, 1), + (17145, 60160, 61548, 'OP_DisplayInnVisitScreenMsg', 205, 1), + (17146, 60160, 61548, 'OP_DisplayMailScreenMsg', 408, 1), + (17147, 60160, 61548, 'OP_DisplayTSEventReactionMsg', 228, 1), + (17148, 60160, 61548, 'OP_DisplayWarningMsg', 269, 1), + (17149, 60160, 61548, 'OP_DoneLoadingEntityResourcesMsg', 38, 1), + (17150, 60160, 61548, 'OP_DoneLoadingZoneResourcesMsg', 36, 1), + (17151, 60160, 61548, 'OP_DoneSendingInitialEntitiesMsg', 37, 1), + (17152, 60160, 61548, 'OP_DressingRoom', 514, 1), + (17153, 60160, 61548, 'OP_DumpSchedulerMsg', 206, 1), + (17154, 60160, 61548, 'OP_DungeonMakerEnter', 552, 1), + (17155, 60160, 61548, 'OP_DungeonMakerItemRequest', 554, 1), + (17156, 60160, 61548, 'OP_DungeonMakerItemResponse', 586, 1), + (17157, 60160, 61548, 'OP_DungeonMakerToolboxList', 556, 1), + (17158, 60160, 61548, 'OP_DungeonMakerUnknown', 557, 1), + (17159, 60160, 61548, 'OP_DungeonMakerUnknown1', 558, 1), + (17160, 60160, 61548, 'OP_DungeonPlayAsAvatarList', 762, 1), + (17161, 60160, 61548, 'OP_DungeonPlayAsAvatarSelected', 763, 1), + (17162, 60160, 61548, 'OP_EncounterBrokenMsg', 267, 1), + (17163, 60160, 61548, 'OP_EnterHouseMsg', 157, 1), + (17164, 60160, 61548, 'OP_EnterMoveObjectModeMsg', 164, 1), + (17165, 60160, 61548, 'OP_EntityVerbsReplyMsg', 184, 1), + (17166, 60160, 61548, 'OP_EntityVerbsRequestMsg', 183, 1), + (17167, 60160, 61548, 'OP_EntityVerbsVerbMsg', 185, 1), + (17168, 60160, 61548, 'OP_EqArenaResultsCmd', 713, 1), + (17169, 60160, 61548, 'OP_EqAvailWorldChannelsCmd', 700, 1), + (17170, 60160, 61548, 'OP_EqBetaCopyRequest', 619, 1), + (17171, 60160, 61548, 'OP_EqCannedEmoteCmd', 642, 1), + (17172, 60160, 61548, 'OP_EqChatChannelUpdateCmd', 698, 1), + (17173, 60160, 61548, 'OP_EqChoiceWinCmd', 679, 1), + (17174, 60160, 61548, 'OP_EqCloseWindowCmd', 671, 1), + (17175, 60160, 61548, 'OP_EqCollectionFilterCmd', 658, 1), + (17176, 60160, 61548, 'OP_EqCollectionItemCmd', 659, 1), + (17177, 60160, 61548, 'OP_EqCollectionUpdateCmd', 657, 1), + (17178, 60160, 61548, 'OP_EqConsignmentItemsCmd', 703, 1), + (17179, 60160, 61548, 'OP_EqCreateGhostCmd', 624, 1), + (17180, 60160, 61548, 'OP_EqCreateListBoxCmd', 639, 1), + (17181, 60160, 61548, 'OP_EqCreateSignWidgetCmd', 626, 1), + (17182, 60160, 61548, 'OP_EqCreateWidgetCmd', 625, 1), + (17183, 60160, 61548, 'OP_EqDebugPVDCmd', 692, 1), + (17184, 60160, 61548, 'OP_EqDestroyGhostCmd', 627, 1), + (17185, 60160, 61548, 'OP_EqDialogCloseCmd', 655, 1), + (17186, 60160, 61548, 'OP_EqDialogOpenCmd', 654, 1), + (17187, 60160, 61548, 'OP_EqDisplaySpellFailCmd', 675, 1), + (17188, 60160, 61548, 'OP_EqDisplayTextCmd', 623, 1), + (17189, 60160, 61548, 'OP_EqDrawablePathGraphCmd', 653, 1), + (17190, 60160, 61548, 'OP_EqEnableGameEventCmd', 685, 1), + (17191, 60160, 61548, 'OP_EqEnableWindowCmd', 687, 1), + (17192, 60160, 61548, 'OP_EqExamineInfoCmd', 670, 1), + (17193, 60160, 61548, 'OP_EqFactionUpdateCmd', 656, 1), + (17194, 60160, 61548, 'OP_EqFlashWindowCmd', 688, 1), + (17195, 60160, 61548, 'OP_EqGetProbsCmd', 696, 1), + (17196, 60160, 61548, 'OP_EqGroupMemberRemovedCmd', 649, 1), + (17197, 60160, 61548, 'OP_EqGuildBankEventActionCmd', 714, 1), + (17198, 60160, 61548, 'OP_EqGuildBankExamineInfoCmd', 715, 1), + (17199, 60160, 61548, 'OP_EqHearChainEffectCmd', 650, 1), + (17200, 60160, 61548, 'OP_EqHearChatCmd', 622, 1), + (17201, 60160, 61548, 'OP_EqHearCombatCmd', 631, 1), + (17202, 60160, 61548, 'OP_EqHearConsiderCmd', 637, 1), + (17203, 60160, 61548, 'OP_EqHearDeathCmd', 648, 1), + (17204, 60160, 61548, 'OP_EQHearDispellCmd', 760, 1), + (17205, 60160, 61548, 'OP_EqHearDrowningCmd', 647, 1), + (17206, 60160, 61548, 'OP_EqHearHealCmd', 697, 1), + (17207, 60160, 61548, 'OP_EqHearPlayFlavorCmd', 690, 1), + (17208, 60160, 61548, 'OP_EQHearProcCmd', 633, 1), + (17209, 60160, 61548, 'OP_EQHearResEffectCmd', 634, 1), + (17210, 60160, 61548, 'OP_EqHearSpellCastCmd', 632, 1), + (17211, 60160, 61548, 'OP_EqHearSpellFizzleCmd', 636, 1), + (17212, 60160, 61548, 'OP_EqHearSpellInterruptCmd', 635, 1), + (17213, 60160, 61548, 'OP_EqHearSpellNoLandCmd', 716, 1), + (17214, 60160, 61548, 'OP_EQHearThreatCmd', 754, 1), + (17215, 60160, 61548, 'OP_EqHelpPathClearCmd', 668, 1), + (17216, 60160, 61548, 'OP_EqHelpPathCmd', 667, 1), + (17217, 60160, 61548, 'OP_EqInspectPCResultsCmd', 652, 1), + (17218, 60160, 61548, 'OP_EqInstructionWindowCloseCmd', 682, 1), + (17219, 60160, 61548, 'OP_EqInstructionWindowCmd', 681, 1), + (17220, 60160, 61548, 'OP_EqInstructionWindowGoalCmd', 683, 1), + (17221, 60160, 61548, 'OP_EqInstructionWindowTaskCmd', 684, 1), + (17222, 60160, 61548, 'OP_EqJunctionListCmd', 673, 1), + (17223, 60160, 61548, 'OP_EqMapExplorationCmd', 706, 1), + (17224, 60160, 61548, 'OP_EqMentoring', 661, 1), + (17225, 60160, 61548, 'OP_EqPlaySound3DCmd', 645, 1), + (17226, 60160, 61548, 'OP_EqPlaySoundCmd', 644, 1), + (17227, 60160, 61548, 'OP_EqPlayVoiceCmd', 646, 1), + (17228, 60160, 61548, 'OP_EqQuestGroupCmd', 663, 1), + (17229, 60160, 61548, 'OP_EqQuestionnaireCmd', 694, 1), + (17230, 60160, 61548, 'OP_EqQuestJournalReplyCmd', 662, 1), + (17231, 60160, 61548, 'OP_EqQuestJournalUpdateCmd', 660, 1), + (17232, 60160, 61548, 'OP_EqReceiveOfferCmd', 651, 1), + (17233, 60160, 61548, 'OP_EqResurrectedCmd', 678, 1), + (17234, 60160, 61548, 'OP_EqSetControlGhostCmd', 629, 1), + (17235, 60160, 61548, 'OP_EqSetDebugPathPointsCmd', 640, 1), + (17236, 60160, 61548, 'OP_EqSetDefaultVerbCmd', 680, 1), + (17237, 60160, 61548, 'OP_EqSetPOVGhostCmd', 630, 1), + (17238, 60160, 61548, 'OP_EqShowBookCmd', 693, 1), + (17239, 60160, 61548, 'OP_EqShowDeathWindowCmd', 674, 1), + (17240, 60160, 61548, 'OP_EqShowWindowCmd', 686, 1), + (17241, 60160, 61548, 'OP_EqSpellCastEndCmd', 677, 1), + (17242, 60160, 61548, 'OP_EqSpellCastStartCmd', 676, 1), + (17243, 60160, 61548, 'OP_EqSpellMoveToRangeAndRetryCmd', 708, 1), + (17244, 60160, 61548, 'OP_EqStartBrokerCmd', 705, 1), + (17245, 60160, 61548, 'OP_EqStateCmd', 643, 1), + (17246, 60160, 61548, 'OP_EqStoreLogCmd', 707, 1), + (17247, 60160, 61548, 'OP_EqUpdateBankCmd', 669, 1), + (17248, 60160, 61548, 'OP_EqUpdateGhostCmd', 628, 1), + (17249, 60160, 61548, 'OP_EqUpdateLootCmd', 672, 1), + (17250, 60160, 61548, 'OP_EqUpdateMerchantCmd', 664, 1), + (17251, 60160, 61548, 'OP_EqUpdatePlayerMailCmd', 709, 1), + (17252, 60160, 61548, 'OP_EqUpdatePlayerTradeCmd', 666, 1), + (17253, 60160, 61548, 'OP_EqUpdateSignWidgetCmd', 691, 1), + (17254, 60160, 61548, 'OP_EqUpdateStoreCmd', 665, 1), + (17255, 60160, 61548, 'OP_EqUpdateSubClassesCmd', 638, 1), + (17256, 60160, 61548, 'OP_EqUpdateTargetCmd', 701, 1), + (17257, 60160, 61548, 'OP_EqWhoChannelQueryReplyCmd', 699, 1), + (17258, 60160, 61548, 'OP_ESInitMsg', 27, 1), + (17259, 60160, 61548, 'OP_ESLoginRequestMsg', 3, 1), + (17260, 60160, 61548, 'OP_ESReadyForClientsMsg', 28, 1), + (17261, 60160, 61548, 'OP_ESStatusMsg', 102, 1), + (17262, 60160, 61548, 'OP_ESWeatherRequestEndMsg', 107, 1), + (17263, 60160, 61548, 'OP_ESWeatherRequestMsg', 106, 1), + (17264, 60160, 61548, 'OP_ESZoneInstanceStatusMsg', 103, 1), + (17265, 60160, 61548, 'OP_ExamineConsignmentRequestMsg', 174, 1), + (17266, 60160, 61548, 'OP_ExamineConsignmentResponseMsg', 175, 1), + (17267, 60160, 61548, 'OP_ExamineInfoRequestMsg', 259, 1), + (17268, 60160, 61548, 'OP_ExamineItemRequestMsg', 198, 1), + (17269, 60160, 61548, 'OP_ExitHouseMsg', 158, 1), + (17270, 60160, 61548, 'OP_ExpectClientAsCharacterReplyMs', 24, 1), + (17271, 60160, 61548, 'OP_ExpectClientAsCharacterRequest', 34, 1), + (17272, 60160, 61548, 'OP_ExpPurchWindow', 739, 1), + (17273, 60160, 61548, 'OP_FellowshipExpMsg', 125, 1), + (17274, 60160, 61548, 'OP_FlightPathsMsg', 417, 1), + (17275, 60160, 61548, 'OP_GameWorldTimeMsg', 45, 1), + (17276, 60160, 61548, 'OP_PaperdollImage', 581, 1), + (17277, 60160, 61548, 'OP_GetAuctionAssetIDMsg', 445, 1), + (17278, 60160, 61548, 'OP_GetAuctionAssetIDReplyMsg', 446, 1), + (17279, 60160, 61548, 'OP_GetAvatarAccessRequestForCSToo', 397, 1), + (17280, 60160, 61548, 'OP_GetCharacterSerializedReplyMsg', 428, 1), + (17281, 60160, 61548, 'OP_GetCharacterSerializedRequestM', 427, 1), + (17282, 60160, 61548, 'OP_GroupCreatedMsg', 90, 1), + (17283, 60160, 61548, 'OP_GroupDestroyedMsg', 91, 1), + (17284, 60160, 61548, 'OP_GroupLeaderChangedMsg', 95, 1), + (17285, 60160, 61548, 'OP_GroupMemberAddedMsg', 92, 1), + (17286, 60160, 61548, 'OP_GroupMemberRemovedMsg', 93, 1), + (17287, 60160, 61548, 'OP_GroupOptionsMsg', 202, 1), + (17288, 60160, 61548, 'OP_GroupRemovedFromGroupMsg', 94, 1), + (17289, 60160, 61548, 'OP_GroupResendOOZDataMsg', 96, 1), + (17290, 60160, 61548, 'OP_GroupSettingsChangedMsg', 97, 1), + (17291, 60160, 61548, 'OP_GuildBankActionMsg', 278, 1), + (17292, 60160, 61548, 'OP_GuildBankActionResponseMsg', 279, 1), + (17293, 60160, 61548, 'OP_GuildBankEventListMsg', 283, 1), + (17294, 60160, 61548, 'OP_GuildBankItemDetailsRequestMsg', 280, 1), + (17295, 60160, 61548, 'OP_GuildBankItemDetailsResponseMs', 281, 1), + (17296, 60160, 61548, 'OP_GuildBankUpdateMsg', 282, 1), + (17297, 60160, 61548, 'OP_GuildEventActionMsg', 273, 1), + (17298, 60160, 61548, 'OP_GuildEventAddMsg', 272, 1), + (17299, 60160, 61548, 'OP_GuildEventDetailsMsg', 276, 1), + (17300, 60160, 61548, 'OP_GuildEventListMsg', 274, 1), + (17301, 60160, 61548, 'OP_GuildEventMsg', 271, 1), + (17302, 60160, 61548, 'OP_GuildMembershipResponseMsg', 361, 1), + (17303, 60160, 61548, 'OP_GuildRecruiting', 719, 1), + (17304, 60160, 61548, 'OP_GuildRecruitingDetails', 720, 1), + (17305, 60160, 61548, 'OP_GuildRecruitingImage', 721, 1), + (17306, 60160, 61548, 'OP_GuildRecruitingMemberInfo', 718, 1), + (17307, 60160, 61548, 'OP_GuildsayMsg', 124, 1), + (17308, 60160, 61548, 'OP_GuildStatusUpdate', 712, 1), + (17309, 60160, 61548, 'OP_GuildUpdateMsg', 127, 1), + (17310, 60160, 61548, 'OP_HeritageMsg', 10004, 1), + (17311, 60160, 61548, 'OP_HideIllusionsMsg', 197, 1), + (17312, 60160, 61548, 'OP_HouseAccessRemoveMsg', 161, 1), + (17313, 60160, 61548, 'OP_HouseAccessSetMsg', 160, 1), + (17314, 60160, 61548, 'OP_HouseCustomizationScreenMsg', 169, 1), + (17315, 60160, 61548, 'OP_HouseDefaultAccessSetMsg', 159, 1), + (17316, 60160, 61548, 'OP_HouseDeletedRemotelyMsg', 145, 1), + (17317, 60160, 61548, 'OP_HouseItemsList', 488, 1), + (17318, 60160, 61548, 'OP_HousingDataChangedMsg', 431, 1), + (17319, 60160, 61548, 'OP_HousingRestoreMsg', 432, 1), + (17320, 60160, 61548, 'OP_InspectPlayerMsg', 367, 1), + (17321, 60160, 61548, 'OP_InspectPlayerRequestMsg', 454, 1), + (17322, 60160, 61548, 'OP_InviteRequestMsg', 451, 1), + (17323, 60160, 61548, 'OP_InviteResponseMsg', 452, 1), + (17324, 60160, 61548, 'OP_InviteTargetResponseMsg', 453, 1), + (17325, 60160, 61548, 'OP_JoinGuildNotifyMsg', 363, 1), + (17326, 60160, 61548, 'OP_JournalQuestStoryline', 761, 1), + (17327, 60160, 61548, 'OP_KeymapDataMsg', 180, 1), + (17328, 60160, 61548, 'OP_KeymapLoadMsg', 178, 1), + (17329, 60160, 61548, 'OP_KeymapNoneMsg', 179, 1), + (17330, 60160, 61548, 'OP_KeymapSaveMsg', 181, 1), + (17331, 60160, 61548, 'OP_KnowledgebaseRequestMsg', 230, 1), + (17332, 60160, 61548, 'OP_KnowledgebaseResponseMsg', 231, 1), + (17333, 60160, 61548, 'OP_KnowledgeWindowSlotMappingMsg', 373, 1), + (17334, 60160, 61548, 'OP_KnownLanguagesMsg', 242, 1), + (17335, 60160, 61548, 'OP_Launchpad', 579, 1), + (17336, 60160, 61548, 'OP_LeaveGuildNotifyMsg', 362, 1), + (17337, 60160, 61548, 'OP_LevelChangedMsg', 265, 1), + (17338, 60160, 61548, 'OP_LFGGroupSearch', 508, 1), + (17339, 60160, 61548, 'OP_LFGUpdateMsg', 522, 1), + (17340, 60160, 61548, 'OP_LikeOption', 139, 1), + (17341, 60160, 61548, 'OP_LoadCalendarEvents', 582, 1), + (17342, 60160, 61548, 'OP_LoadWelcomeWindow', 564, 1), + (17343, 60160, 61548, 'OP_LoginByNumRequestMsg', 1, 1), + (17344, 60160, 61548, 'OP_LoginReplyMsg', 4, 1), + (17345, 60160, 61548, 'OP_LoginRequestMsg', 0, 1), + (17346, 60160, 61548, 'OP_LootItemsRequestMsg', 188, 1), + (17347, 60160, 61548, 'OP_Lottery', 717, 1), + (17348, 60160, 61548, 'OP_LSCheckAcctLockMsg', 207, 1), + (17349, 60160, 61548, 'OP_LsClientAlertlogReplyMsg', 246, 1), + (17350, 60160, 61548, 'OP_LsClientBaselogReplyMsg', 244, 1), + (17351, 60160, 61548, 'OP_LsClientCrashlogReplyMsg', 245, 1), + (17352, 60160, 61548, 'OP_LsClientVerifylogReplyMsg', 247, 1), + (17353, 60160, 61548, 'OP_LsRequestClientCrashLogMsg', 243, 1), + (17354, 60160, 61548, 'OP_LSServerLockMsg', 369, 1), + (17355, 60160, 61548, 'OP_MacroInitMsg', 262, 1), + (17356, 60160, 61548, 'OP_MacroUpdateMsg', 263, 1), + (17357, 60160, 61548, 'OP_MailCommitSendMessageMsg', 348, 1), + (17358, 60160, 61548, 'OP_MailDeleteMessageMsg', 344, 1), + (17359, 60160, 61548, 'OP_MailEventNotificationMsg', 415, 1), + (17360, 60160, 61548, 'OP_MailGetHeadersReplyMsg', 345, 1), + (17361, 60160, 61548, 'OP_MailGetMessageMsg', 342, 1), + (17362, 60160, 61548, 'OP_MailGetMessageReplyMsg', 346, 1), + (17363, 60160, 61548, 'OP_MailRemoveAttachFromMailMsg', 350, 1), + (17364, 60160, 61548, 'OP_MailSendMessageMsg', 343, 1), + (17365, 60160, 61548, 'OP_MailSendMessageReplyMsg', 347, 1), + (17366, 60160, 61548, 'OP_MailSendSystemMessageMsg', 349, 1), + (17367, 60160, 61548, 'OP_MakeGroupLeaderMsg', 89, 1), + (17368, 60160, 61548, 'OP_MapFogDataInitMsg', 399, 1), + (17369, 60160, 61548, 'OP_MapFogDataUpdateMsg', 400, 1), + (17370, 60160, 61548, 'OP_MapRequest', 525, 1), + (17371, 60160, 61548, 'OP_MarketAddFundsReply', 533, 1), + (17372, 60160, 61548, 'OP_MarketAddFundsRequest', 532, 1), + (17373, 60160, 61548, 'OP_MarketFundsUpdate', 530, 1), + (17374, 60160, 61548, 'OP_MarketPlaceItems', 543, 1), + (17375, 60160, 61548, 'OP_MarketPlacePrices', 536, 1), + (17376, 60160, 61548, 'OP_MarketPurchase', 535, 1), + (17377, 60160, 61548, 'OP_MentorPopup', 562, 1), + (17378, 60160, 61548, 'OP_MercHireWindow', 764, 1), + (17379, 60160, 61548, 'OP_MercUnknown', 765, 1), + (17380, 60160, 61548, 'OP_MigrateBoatTransportMsg', 256, 1), + (17381, 60160, 61548, 'OP_MigrateBoatTransportReplyMsg', 257, 1), + (17382, 60160, 61548, 'OP_MigrateClientToZoneReplyMsg', 84, 1), + (17383, 60160, 61548, 'OP_MigrateClientToZoneRequestMsg', 83, 1), + (17384, 60160, 61548, 'OP_ModifyGuildMsg', 270, 1), + (17385, 60160, 61548, 'OP_MonitorCharacterListMsg', 58, 1), + (17386, 60160, 61548, 'OP_MonitorCharacterListRequestMsg', 59, 1), + (17387, 60160, 61548, 'OP_MonitorReplyMsg', 57, 1), + (17388, 60160, 61548, 'OP_MOTDMsg', 46, 1), + (17389, 60160, 61548, 'OP_MoveableObjectPlacementCriteri', 163, 1), + (17390, 60160, 61548, 'OP_MoveLogUpdateMsg', 404, 1), + (17391, 60160, 61548, 'OP_NotifyApprenticeStoppedMentori', 412, 1), + (17392, 60160, 61548, 'OP_OfferQuestMsg', 405, 1), + (17393, 60160, 61548, 'OP_OnscreenMsgMsg', 268, 1), + (17394, 60160, 61548, 'OP_OpenCharCust', 565, 1), + (17395, 60160, 61548, 'OP_OutOfZoneMemberDataMsg', 98, 1), + (17396, 60160, 61548, 'OP_PayHouseUpkeepMsg', 162, 1), + (17397, 60160, 61548, 'OP_PerformCameraShakeMsg', 217, 1), + (17398, 60160, 61548, 'OP_PerformPlayerKnockbackMsg', 216, 1), + (17399, 60160, 61548, 'OP_PetOptions', 204, 1), + (17400, 60160, 61548, 'OP_PetOptionsResponse', 585, 1), + (17401, 60160, 61548, 'OP_PlayCharacterReplyMsg', 21, 1), + (17402, 60160, 61548, 'OP_PlayCharacterRequestMsg', 20, 1), + (17403, 60160, 61548, 'OP_PlayerHouseAccessUpdateMsg', 150, 1), + (17404, 60160, 61548, 'OP_PlayerHouseBaseScreenMsg', 148, 1), + (17405, 60160, 61548, 'OP_PlayerHouseCloseUIMsg', 152, 1), + (17406, 60160, 61548, 'OP_PlayerHouseDisplayStatusMsg', 151, 1), + (17407, 60160, 61548, 'OP_PlayerHousePurchaseScreenMsg', 149, 1), + (17408, 60160, 61548, 'OP_PlayerMadeInstances', 143, 1), + (17409, 60160, 61548, 'OP_PlayerMadeInstancesScreen', 142, 1), + (17410, 60160, 61548, 'OP_PlayerPollAnswer', 561, 1), + (17411, 60160, 61548, 'OP_PlayerPollPopup', 560, 1), + (17412, 60160, 61548, 'OP_PlayLon', 515, 1), + (17413, 60160, 61548, 'OP_PointOfInterest', 743, 1), + (17414, 60160, 61548, 'OP_PointOfInterest2', 744, 1), + (17415, 60160, 61548, 'OP_PopulateSkillMapsMsg', 218, 1), + (17416, 60160, 61548, 'OP_PositionBoatTransportMsg', 255, 1), + (17417, 60160, 61548, 'OP_PositionMoveableObject', 165, 1), + (17418, 60160, 61548, 'OP_PostPossessionMsg', 458, 1), + (17419, 60160, 61548, 'OP_PredictionUpdateMsg', 39, 1), + (17420, 60160, 61548, 'OP_PrePossessionMsg', 457, 1), + (17421, 60160, 61548, 'OP_PromoFlagsDetailsMsg', 378, 1), + (17422, 60160, 61548, 'OP_PublishHouse', 141, 1), + (17423, 60160, 61548, 'OP_PurchaseConsignmentLoreCheckRe', 411, 1), + (17424, 60160, 61548, 'OP_PurchaseConsignmentRequestMsg', 131, 1), + (17425, 60160, 61548, 'OP_QueAllBgSolo', 568, 1), + (17426, 60160, 61548, 'OP_QuestionnaireMsg', 264, 1), + (17427, 60160, 61548, 'OP_QuestJournalInspectMsg', 116, 1), + (17428, 60160, 61548, 'OP_QuestJournalOpenMsg', 115, 1), + (17429, 60160, 61548, 'OP_QuestJournalSetVisibleMsg', 117, 1), + (17430, 60160, 61548, 'OP_QuestJournalWaypointMsg', 118, 1), + (17431, 60160, 61548, 'OP_QuestReward', 324, 1), + (17432, 60160, 61548, 'OP_QuickbarInitMsg', 260, 1), + (17433, 60160, 61548, 'OP_QuickbarUpdateMsg', 261, 1), + (17434, 60160, 61548, 'OP_RaceRestrictionMsg', 443, 1), + (17435, 60160, 61548, 'OP_ReadBookPageMsg', 199, 1), + (17436, 60160, 61548, 'OP_ReadyForTakeOffMsg', 195, 1), + (17437, 60160, 61548, 'OP_ReadyToZoneMsg', 86, 1), + (17438, 60160, 61548, 'OP_RecipeBook', 544, 1), + (17439, 60160, 61548, 'OP_RecipeDetailsMsg', 74, 1), + (17440, 60160, 61548, 'OP_RecipeList', 755, 1), + (17441, 60160, 61548, 'OP_RecipeListUnknown', 597, 1), + (17442, 60160, 61548, 'OP_RelinquishHouseMsg', 156, 1), + (17443, 60160, 61548, 'OP_ReloadLocalizedTxtMsg', 359, 1), + (17444, 60160, 61548, 'OP_RemoteCmdMsg', 44, 1), + (17445, 60160, 61548, 'OP_RemoveClientFromGroupMsg', 87, 1), + (17446, 60160, 61548, 'OP_RemoveConcentrationMsg', 114, 1), + (17447, 60160, 61548, 'OP_RemoveGroupFromGroupMsg', 88, 1), + (17448, 60160, 61548, 'OP_RemoveSpellEffectMsg', 113, 1), + (17449, 60160, 61548, 'OP_RenameGuildMsg', 286, 1), + (17450, 60160, 61548, 'OP_ReplaceableSubMeshesMsg', 168, 1), + (17451, 60160, 61548, 'OP_ReportMsg', 384, 1), + (17452, 60160, 61548, 'OP_RequestCampMsg', 52, 1), + (17453, 60160, 61548, 'OP_RequestGuildBankEventDetailsMs', 284, 1), + (17454, 60160, 61548, 'OP_RequestGuildEventDetailsMsg', 275, 1), + (17455, 60160, 61548, 'OP_RequestGuildInfoMsg', 277, 1), + (17456, 60160, 61548, 'OP_RequestGuildMembershipMsg', 360, 1), + (17457, 60160, 61548, 'OP_RequestHelpRepathMsg', 209, 1), + (17458, 60160, 61548, 'OP_RequestRecipeDetailsMsg', 73, 1), + (17459, 60160, 61548, 'OP_RequestTargetLocMsg', 210, 1), + (17460, 60160, 61548, 'OP_Research', 756, 1), + (17461, 60160, 61548, 'OP_ResendWorldChannelsMsg', 447, 1), + (17462, 60160, 61548, 'OP_ReskinCharacterRequestMsg', 15, 1), + (17463, 60160, 61548, 'OP_RestartZoneMsg', 416, 1), + (17464, 60160, 61548, 'OP_RewardPackMsg', 285, 1), + (17465, 60160, 61548, 'OP_SatMsg', 192, 1), + (17466, 60160, 61548, 'OP_SavageBarInitMsg', 584, 1), + (17467, 60160, 61548, 'OP_SelectZoneTeleporterDestinatio', 358, 1), + (17468, 60160, 61548, 'OP_SendLatestRequestMsg', 99, 1), + (17469, 60160, 61548, 'OP_ServerPlayCharacterReplyMsg', 26, 1), + (17470, 60160, 61548, 'OP_ServerPlayCharacterRequestMsg', 25, 1), + (17471, 60160, 61548, 'OP_SetInstanceDisplayNameMsg', 444, 1), + (17472, 60160, 61548, 'OP_SetRemoteCmdsMsg', 43, 1), + (17473, 60160, 61548, 'OP_SetSocialMsg', 101, 1), + (17474, 60160, 61548, 'OP_ShaderCustomizationMsg', 167, 1), + (17475, 60160, 61548, 'OP_ShowCreateFromRecipeUIMsg', 222, 1), + (17476, 60160, 61548, 'OP_ShowIllusionsMsg', 196, 1), + (17477, 60160, 61548, 'OP_ShowItemCreationProcessUIMsg', 226, 1), + (17478, 60160, 61548, 'OP_ShowRecipeBookMsg', 229, 1), + (17479, 60160, 61548, 'OP_ShowZoneTeleporterDestinations', 357, 1), + (17480, 60160, 61548, 'OP_SitMsg', 190, 1), + (17481, 60160, 61548, 'OP_SkillInfoRequest', 518, 1), + (17482, 60160, 61548, 'OP_SkillInfoResponse', 519, 1), + (17483, 60160, 61548, 'OP_SOEAllAccess', 620, 1), + (17484, 60160, 61548, 'OP_SpellGainedMsg', 266, 1), + (17485, 60160, 61548, 'OP_StandMsg', 191, 1), + (17486, 60160, 61548, 'OP_StoodMsg', 193, 1), + (17487, 60160, 61548, 'OP_StopItemCreationMsg', 225, 1), + (17488, 60160, 61548, 'OP_StoppedLootingMsg', 189, 1), + (17489, 60160, 61548, 'OP_StopTrackingMsg', 395, 1), + (17490, 60160, 61548, 'OP_SubmitCharCust', 566, 1), + (17491, 60160, 61548, 'OP_SupplyDepot', 753, 1), + (17492, 60160, 61548, 'OP_SysClient', 221, 1), + (17493, 60160, 61548, 'OP_TeleportWithinZoneMsg', 81, 1), + (17494, 60160, 61548, 'OP_TeleportWithinZoneNoReloadMsg', 82, 1), + (17495, 60160, 61548, 'OP_TintWidgetsMsg', 173, 1), + (17496, 60160, 61548, 'OP_TitleUpdateMsg', 388, 1), + (17497, 60160, 61548, 'OP_TrackingUpdateMsg', 393, 1), + (17498, 60160, 61548, 'OP_TradeskillList', 722, 1), + (17499, 60160, 61548, 'OP_TraitsList', 745, 1), + (17500, 60160, 61548, 'OP_UIEvent', 531, 1), + (17501, 60160, 61548, 'OP_UIResetMsg', 177, 1), + (17502, 60160, 61548, 'OP_UISettingsResponseMsg', 176, 1), + (17503, 60160, 61548, 'OP_Unknown', 778, 1), + (17504, 60160, 61548, 'OP_UnknownNpcMsg', 377, 1), + (17505, 60160, 61548, 'OP_UpdateActivePublicZonesMsg', 376, 1), + (17506, 60160, 61548, 'OP_UpdateCharacterSheetMsg', 65, 1), + (17507, 60160, 61548, 'OP_UpdateClientPredFlagsMsg', 249, 1), + (17508, 60160, 61548, 'OP_UpdateDebugRadiiMsg', 383, 1), + (17509, 60160, 61548, 'OP_UpdateGroupMemberDataMsg', 392, 1), + (17510, 60160, 61548, 'OP_UpdateHouseAccessDataMsg', 147, 1), + (17511, 60160, 61548, 'OP_UpdateHouseDataMsg', 146, 1), + (17512, 60160, 61548, 'OP_UpdateInventoryMsg', 70, 1), + (17513, 60160, 61548, 'OP_UpdateItemCreationProcessUIMsg', 227, 1), + (17514, 60160, 61548, 'OP_UpdateMotdMsg', 211, 1), + (17515, 60160, 61548, 'OP_UpdateOpportunityMsg', 77, 1), + (17516, 60160, 61548, 'OP_UpdatePositionMsg', 41, 1), + (17517, 60160, 61548, 'OP_UpdateRaidMsg', 385, 1), + (17518, 60160, 61548, 'OP_UpdateRecipeBookMsg', 72, 1), + (17519, 60160, 61548, 'OP_UpdateSkillBookMsg', 75, 1), + (17520, 60160, 61548, 'OP_UpdateSkillsMsg', 76, 1), + (17521, 60160, 61548, 'OP_UpdateSpellBookMsg', 68, 1), + (17522, 60160, 61548, 'OP_UpdateTargetLocMsg', 64, 1), + (17523, 60160, 61548, 'OP_UpdateTargetMsg', 63, 1), + (17524, 60160, 61548, 'OP_UpdateTitleCmd', 498, 1), + (17525, 60160, 61548, 'OP_UseAdornment', 733, 1), + (17526, 60160, 61548, 'OP_VideoUploaded', 583, 1), + (17527, 60160, 61548, 'OP_VoiceChatChannel', 524, 1), + (17528, 60160, 61548, 'OP_VoiceChatServer', 749, 1), + (17529, 60160, 61548, 'OP_WaypointReplyMsg', 353, 1), + (17530, 60160, 61548, 'OP_WaypointRequestMsg', 352, 1), + (17531, 60160, 61548, 'OP_WaypointSelectMsg', 354, 1), + (17532, 60160, 61548, 'OP_WaypointUpdateMsg', 355, 1), + (17533, 60160, 61548, 'OP_Weakness', 587, 1), + (17534, 60160, 61548, 'OP_WhoQueryReplyMsg', 56, 1), + (17535, 60160, 61548, 'OP_WhoQueryRequestMsg', 55, 1), + (17536, 60160, 61548, 'OP_WorldDataChangeMsg', 414, 1), + (17537, 60160, 61548, 'OP_WorldDataUpdateMsg', 240, 1), + (17538, 60160, 61548, 'OP_WorldListMsg', 8, 1), + (17539, 60160, 61548, 'OP_WorldPingMsg', 403, 1), + (17540, 60160, 61548, 'OP_WorldShutdownUpdateMsg', 407, 1), + (17541, 60160, 61548, 'OP_WorldStatusChangeMsg', 6, 1), + (17542, 60160, 61548, 'OP_WorldTravelAvail', 576, 1), + (17543, 60160, 61548, 'OP_WSAcctLockStatusMsg', 208, 1), + (17544, 60160, 61548, 'OP_WSCreateCharacterReplyMsg', 14, 1), + (17545, 60160, 61548, 'OP_WSCreateCharacterRequestMsg', 13, 1), + (17546, 60160, 61548, 'OP_WSLoginRequestMsg', 2, 1), + (17547, 60160, 61548, 'OP_WSServerHideMsg', 370, 1), + (17548, 60160, 61548, 'OP_WSServerLockMsg', 368, 1), + (17549, 60160, 61548, 'OP_WSStatusReplyMsg', 5, 1), + (17550, 60160, 61548, 'OP_ZoneBgInstanceList', 572, 1), + (17551, 60160, 61548, 'OP_ZoneInfoMsg', 35, 1), + (17552, 60160, 61548, 'OP_ZoneInstanceCreateReplyMsg', 32, 1), + (17553, 60160, 61548, 'OP_ZoneInstanceDestroyedMsg', 33, 1), + (17554, 60160, 61548, 'OP_ZoneMOTDMsg', 47, 1), + (17555, 60160, 61548, 'OP_ZonesStatusMsg', 105, 1), + (17556, 60160, 61548, 'OP_ZonesStatusRequestMsg', 104, 1), + (17557, 60160, 61548, 'OP_ZoneToFriendReplyMsg', 288, 1), + (17558, 60160, 61548, 'OP_ZoneToFriendRequestMsg', 287, 1), + (18024, 60160, 61548, 'OP_EarlyLandingRequestMsg', 490, 1), + (18025, 60127, 60158, 'OP_EarlyLandingRequestMsg', 490, 1), + (18026, 60085, 60116, 'OP_EarlyLandingRequestMsg', 489, 1), + (18027, 60036, 60069, 'OP_EarlyLandingRequestMsg', 487, 1), + (18028, 60024, 60024, 'OP_EarlyLandingRequestMsg', 486, 1), + (18029, 58647, 58647, 'OP_EarlyLandingRequestMsg', 486, 1), + (18030, 58604, 58604, 'OP_EarlyLandingRequestMsg', 486, 1), + (18031, 58542, 58588, 'OP_EarlyLandingRequestMsg', 486, 1), + (18032, 57121, 58525, 'OP_EarlyLandingRequestMsg', 486, 1), + (18033, 57107, 57109, 'OP_EarlyLandingRequestMsg', 486, 1), + (18034, 57080, 57095, 'OP_EarlyLandingRequestMsg', 486, 1), + (18035, 57048, 57079, 'OP_EarlyLandingRequestMsg', 486, 1), + (18036, 57032, 57047, 'OP_EarlyLandingRequestMsg', 486, 1), + (18037, 57015, 57031, 'OP_EarlyLandingRequestMsg', 486, 1), + (18038, 57003, 57014, 'OP_EarlyLandingRequestMsg', 486, 1), + (18039, 57000, 57002, 'OP_EarlyLandingRequestMsg', 9999, 1), + (18040, 1208, 1208, 'OP_EarlyLandingRequestMsg', 442, 1), + (18041, 1204, 1205, 'OP_EarlyLandingRequestMsg', 9999, 1), + (18042, 1198, 1199, 'OP_EarlyLandingRequestMsg', 9999, 1), + (18043, 1193, 1195, 'OP_EarlyLandingRequestMsg', 9999, 1), + (18044, 1096, 1096, 'OP_EarlyLandingRequestMsg', 9999, 1), + (18045, 1045, 1046, 'OP_EarlyLandingRequestMsg', 9999, 1), + (18046, 1008, 1011, 'OP_EarlyLandingRequestMsg', 9999, 1), + (18047, 908, 927, 'OP_EarlyLandingRequestMsg', 9999, 1), + (18048, 839, 844, 'OP_EarlyLandingRequestMsg', 9999, 1), + (18049, 0, 0, 'OP_EarlyLandingRequestMsg', 9999, 1), + (18050, 61581, 61581, 'OP_AchievementUpdateMsg', 766, 1), + (18051, 61581, 61581, 'OP_AddSocialStructureStandingMsg', 253, 1), + (18052, 61581, 61581, 'OP_AdvancementRequestMsg', 399, 1), + (18053, 61581, 61581, 'OP_AdventureList', 493, 1), + (18054, 61581, 61581, 'OP_AFKUpdateMsg', 374, 1), + (18055, 61581, 61581, 'OP_AfterInvSpellUpdate', 71, 1), + (18056, 61581, 61581, 'OP_AllCharactersDescReplyMsg', 10, 1), + (18057, 61581, 61581, 'OP_AllCharactersDescRequestMsg', 9, 1), + (18058, 61581, 61581, 'OP_AllWSDescRequestMsg', 7, 1), + (18059, 61581, 61581, 'OP_AnonUpdateMsg', 375, 1), + (18060, 61581, 61581, 'OP_ArenaCreate', 461, 1), + (18061, 61581, 61581, 'OP_ArenaGameTypesMsg', 450, 1), + (18062, 61581, 61581, 'OP_ArenaList', 462, 1), + (18063, 61581, 61581, 'OP_ArenaWindow', 470, 1), + (18064, 61581, 61581, 'OP_AttackAllowed', 505, 1), + (18065, 61581, 61581, 'OP_AttackNotAllowed', 506, 1), + (18066, 61581, 61581, 'OP_AuctionAbortMsg', 441, 1), + (18067, 61581, 61581, 'OP_AuctionCharacter', 438, 1), + (18068, 61581, 61581, 'OP_AuctionCharacterReply', 439, 1), + (18069, 61581, 61581, 'OP_AuctionCoin', 436, 1), + (18070, 61581, 61581, 'OP_AuctionCoinReply', 437, 1), + (18071, 61581, 61581, 'OP_AuctionCommitMsg', 440, 1), + (18072, 61581, 61581, 'OP_AuctionItem', 434, 1), + (18073, 61581, 61581, 'OP_AuctionItemReply', 435, 1), + (18074, 61581, 61581, 'OP_AuditAuctionEventMsg', 451, 1), + (18075, 61581, 61581, 'OP_AvatarCreatedMsg', 48, 1), + (18076, 61581, 61581, 'OP_AvatarDestroyedMsg', 49, 1), + (18077, 61581, 61581, 'OP_AvatarUpdateMsg', 364, 1), + (18078, 61581, 61581, 'OP_BadLanguageFilter', 524, 1), + (18079, 61581, 61581, 'OP_BagOptions', 507, 1), + (18080, 61581, 61581, 'OP_BeginItemCreationMsg', 224, 1), + (18081, 61581, 61581, 'OP_BeginTrackingMsg', 395, 1), + (18082, 61581, 61581, 'OP_BioUpdateMsg', 366, 1), + (18083, 61581, 61581, 'OP_BrokerAddBag', 296, 1), + (18084, 61581, 61581, 'OP_BrokerRemoveBag', 297, 1), + (18085, 61581, 61581, 'OP_BrokerSellList', 709, 1), + (18086, 61581, 61581, 'OP_BuyPlayerHouseMsg', 153, 1), + (18087, 61581, 61581, 'OP_BuyPlayerHouseTintMsg', 154, 1), + (18088, 61581, 61581, 'OP_CampAbortedMsg', 54, 1), + (18089, 61581, 61581, 'OP_CampClientMsg', 392, 1), + (18090, 61581, 61581, 'OP_CampStartedMsg', 53, 1), + (18091, 61581, 61581, 'OP_CancelCreateFromRecipeMsg', 223, 1), + (18092, 61581, 61581, 'OP_CancelledFeignMsg', 219, 1), + (18093, 61581, 61581, 'OP_CancelMoveObjectModeMsg', 166, 1), + (18094, 61581, 61581, 'OP_CancelSpellCast', 494, 1), + (18095, 61581, 61581, 'OP_ChangeServerControlFlagMsg', 250, 1), + (18096, 61581, 61581, 'OP_ChangeZoneMsg', 79, 1), + (18097, 61581, 61581, 'OP_CharacterAchievements', 765, 1), + (18098, 61581, 61581, 'OP_CharacterCreatedDungeons', 558, 1), + (18099, 61581, 61581, 'OP_CharacterCurrency', 764, 1), + (18100, 61581, 61581, 'OP_CharacterHousingList', 512, 1), + (18101, 61581, 61581, 'OP_CharacterLinkdeadMsg', 419, 1), + (18102, 61581, 61581, 'OP_CharacterMerc', 67, 1), + (18103, 61581, 61581, 'OP_CharacterMounts', 591, 1), + (18104, 61581, 61581, 'OP_CharacterPet', 66, 1), + (18105, 61581, 61581, 'OP_CharNameChangedMsg', 356, 1), + (18106, 61581, 61581, 'OP_CharRenamed', 730, 1), + (18107, 61581, 61581, 'OP_CharTransferCommitReplyMsg', 427, 1), + (18108, 61581, 61581, 'OP_CharTransferCommitRequestMsg', 425, 1), + (18109, 61581, 61581, 'OP_CharTransferReplyMsg', 423, 1), + (18110, 61581, 61581, 'OP_CharTransferRequestMsg', 422, 1), + (18111, 61581, 61581, 'OP_CharTransferRollbackReplyMsg', 426, 1), + (18112, 61581, 61581, 'OP_CharTransferRollbackRequestMsg', 424, 1), + (18113, 61581, 61581, 'OP_CharTransferStartReplyMsg', 421, 1), + (18114, 61581, 61581, 'OP_CharTransferStartRequestMsg', 420, 1), + (18115, 61581, 61581, 'OP_CharTransferValidateReplyMsg', 443, 1), + (18116, 61581, 61581, 'OP_CharTransferValidateRequestMsg', 442, 1), + (18117, 61581, 61581, 'OP_ChatCreateChannelMsg', 289, 1), + (18118, 61581, 61581, 'OP_ChatFiltersMsg', 338, 1), + (18119, 61581, 61581, 'OP_ChatJoinChannelMsg', 290, 1), + (18120, 61581, 61581, 'OP_ChatLeaveChannelMsg', 292, 1), + (18121, 61581, 61581, 'OP_ChatRelationshipUpdateMsg', 187, 1), + (18122, 61581, 61581, 'OP_ChatSendFriendsMsg', 299, 1), + (18123, 61581, 61581, 'OP_ChatSendIgnoresMsg', 300, 1), + (18124, 61581, 61581, 'OP_ChatTellChannelMsg', 293, 1), + (18125, 61581, 61581, 'OP_ChatTellUserMsg', 294, 1), + (18126, 61581, 61581, 'OP_ChatToggleFriendMsg', 295, 1), + (18127, 61581, 61581, 'OP_ChatToggleIgnoreMsg', 298, 1), + (18128, 61581, 61581, 'OP_ChatWhoChannelMsg', 291, 1), + (18129, 61581, 61581, 'OP_ClearDataMsg', 100, 1), + (18130, 61581, 61581, 'OP_ClearForLandingMsg', 496, 1), + (18131, 61581, 61581, 'OP_ClearForTakeOffMsg', 194, 1), + (18132, 61581, 61581, 'OP_ClientCmdMsg', 60, 1), + (18133, 61581, 61581, 'OP_ClientFellMsg', 390, 1), + (18134, 61581, 61581, 'OP_ClientIdleBeginMsg', 410, 1), + (18135, 61581, 61581, 'OP_ClientIdleEndMsg', 411, 1), + (18136, 61581, 61581, 'OP_ClientInDeathRegionMsg', 391, 1), + (18137, 61581, 61581, 'OP_ClientTeleportRequestMsg', 80, 1), + (18138, 61581, 61581, 'OP_ClientTeleportToLocationMsg', 248, 1), + (18139, 61581, 61581, 'OP_CloseGroupInviteWindowMsg', 402, 1), + (18140, 61581, 61581, 'OP_CollectAllHouseItemsMsg', 155, 1), + (18141, 61581, 61581, 'OP_ConsignItemRequestMsg', 129, 1), + (18142, 61581, 61581, 'OP_ConsignItemResponseMsg', 130, 1), + (18143, 61581, 61581, 'OP_ConsignmentCloseStoreMsg', 128, 1), + (18144, 61581, 61581, 'OP_ConsignRemoveItemsMsg', 382, 1), + (18145, 61581, 61581, 'OP_ConsignViewCreateMsg', 379, 1), + (18146, 61581, 61581, 'OP_ConsignViewGetPageMsg', 380, 1), + (18147, 61581, 61581, 'OP_ConsignViewReleaseMsg', 381, 1), + (18148, 61581, 61581, 'OP_ConsignViewSortMsg', 388, 1), + (18149, 61581, 61581, 'OP_CorruptedClientMsg', 414, 1), + (18150, 61581, 61581, 'OP_CreateBoatTransportsMsg', 254, 1), + (18151, 61581, 61581, 'OP_CreateCharacterDungeon', 552, 1), + (18152, 61581, 61581, 'OP_CreateCharacterReplyMsg', 12, 1), + (18153, 61581, 61581, 'OP_CreateCharacterRequestMsg', 11, 1), + (18154, 61581, 61581, 'OP_CreateCharFromCBBReplyMsg', 431, 1), + (18155, 61581, 61581, 'OP_CreateCharFromCBBRequestMsg', 430, 1), + (18156, 61581, 61581, 'OP_CreateGuildReplyMsg', 123, 1), + (18157, 61581, 61581, 'OP_CreateGuildRequestMsg', 121, 1), + (18158, 61581, 61581, 'OP_CreateZoneInstanceMsg', 31, 1), + (18159, 61581, 61581, 'OP_CsCategoryRequestMsg', 371, 1), + (18160, 61581, 61581, 'OP_CsCategoryResponseMsg', 372, 1), + (18161, 61581, 61581, 'OP_CSTicketAddCommentMsg', 237, 1), + (18162, 61581, 61581, 'OP_CSTicketChangeNotificationMsg', 239, 1), + (18163, 61581, 61581, 'OP_CSTicketCommentRequestMsg', 234, 1), + (18164, 61581, 61581, 'OP_CSTicketCommentResponseMsg', 235, 1), + (18165, 61581, 61581, 'OP_CSTicketCreateMsg', 236, 1), + (18166, 61581, 61581, 'OP_CSTicketDeleteMsg', 238, 1), + (18167, 61581, 61581, 'OP_CSTicketHeaderRequestMsg', 232, 1), + (18168, 61581, 61581, 'OP_CSTicketInfoMsg', 233, 1), + (18169, 61581, 61581, 'OP_CSToolAccessResponseMsg', 393, 1), + (18170, 61581, 61581, 'OP_CSToolsRequestMsg', 251, 1), + (18171, 61581, 61581, 'OP_CSToolsResponseMsg', 252, 1), + (18172, 61581, 61581, 'OP_CurrentPet', 490, 1), + (18173, 61581, 61581, 'OP_CustomizationPurchaseRequestMs', 170, 1), + (18174, 61581, 61581, 'OP_CustomizationReplyMsg', 172, 1), + (18175, 61581, 61581, 'OP_CustomizationSetRequestMsg', 171, 1), + (18176, 61581, 61581, 'OP_CustomizeHouseDisplay', 755, 1), + (18177, 61581, 61581, 'OP_DailyObjectives', 604, 1), + (18178, 61581, 61581, 'OP_DefaultGroupOptionsMsg', 201, 1), + (18179, 61581, 61581, 'OP_DefaultGroupOptionsRequestMsg', 200, 1), + (18180, 61581, 61581, 'OP_DeleteCharacterReplyMsg', 19, 1), + (18181, 61581, 61581, 'OP_DeleteCharacterRequestMsg', 18, 1), + (18182, 61581, 61581, 'OP_DeleteGuildMsg', 126, 1), + (18183, 61581, 61581, 'OP_DestUpdateReq', 213, 1), + (18184, 61581, 61581, 'OP_DialogCloseMsg', 112, 1), + (18185, 61581, 61581, 'OP_DialogSelectMsg', 111, 1), + (18186, 61581, 61581, 'OP_DispatchClientCmdMsg', 62, 1), + (18187, 61581, 61581, 'OP_DispatchESMsg', 61, 1), + (18188, 61581, 61581, 'OP_DispatchMsg', 456, 1), + (18189, 61581, 61581, 'OP_DispatchSpellCmdMsg', 182, 1), + (18190, 61581, 61581, 'OP_DisplayDebugNLLPointsMsg', 258, 1), + (18191, 61581, 61581, 'OP_DisplayEventMsg', 457, 1), + (18192, 61581, 61581, 'OP_DisplayExchangeScreenMsg', 449, 1), + (18193, 61581, 61581, 'OP_DisplayGroupOptionsScreenMsg', 203, 1), + (18194, 61581, 61581, 'OP_DisplayInnVisitScreenMsg', 205, 1), + (18195, 61581, 61581, 'OP_DisplayMailScreenMsg', 409, 1), + (18196, 61581, 61581, 'OP_DisplayTSEventReactionMsg', 228, 1), + (18197, 61581, 61581, 'OP_DisplayWarningMsg', 269, 1), + (18198, 61581, 61581, 'OP_DoneLoadingEntityResourcesMsg', 38, 1), + (18199, 61581, 61581, 'OP_DoneLoadingZoneResourcesMsg', 36, 1), + (18200, 61581, 61581, 'OP_DoneSendingInitialEntitiesMsg', 37, 1), + (18201, 61581, 61581, 'OP_DressingRoom', 515, 1), + (18202, 61581, 61581, 'OP_DumpSchedulerMsg', 206, 1), + (18203, 61581, 61581, 'OP_DungeonMakerEnter', 553, 1), + (18204, 61581, 61581, 'OP_DungeonMakerItemRequest', 557, 1), + (18205, 61581, 61581, 'OP_DungeonMakerItemResponse', 589, 1), + (18206, 61581, 61581, 'OP_DungeonMakerToolboxList', 559, 1), + (18207, 61581, 61581, 'OP_DungeonMakerUnknown', 560, 1), + (18208, 61581, 61581, 'OP_DungeonMakerUnknown1', 561, 1), + (18209, 61581, 61581, 'OP_DungeonPlayAsAvatarList', 769, 1), + (18210, 61581, 61581, 'OP_DungeonPlayAsAvatarSelected', 770, 1), + (18211, 61581, 61581, 'OP_EncounterBrokenMsg', 267, 1), + (18212, 61581, 61581, 'OP_EnterHouseMsg', 157, 1), + (18213, 61581, 61581, 'OP_EnterMoveObjectModeMsg', 164, 1), + (18214, 61581, 61581, 'OP_EntityVerbsReplyMsg', 184, 1), + (18215, 61581, 61581, 'OP_EntityVerbsRequestMsg', 183, 1), + (18216, 61581, 61581, 'OP_EntityVerbsVerbMsg', 185, 1), + (18217, 61581, 61581, 'OP_EqArenaResultsCmd', 720, 1), + (18218, 61581, 61581, 'OP_EqAvailWorldChannelsCmd', 707, 1), + (18219, 61581, 61581, 'OP_EqBetaCopyRequest', 626, 1), + (18220, 61581, 61581, 'OP_EqCannedEmoteCmd', 649, 1), + (18221, 61581, 61581, 'OP_EqChatChannelUpdateCmd', 705, 1), + (18222, 61581, 61581, 'OP_EqChoiceWinCmd', 686, 1), + (18223, 61581, 61581, 'OP_EqCloseWindowCmd', 678, 1), + (18224, 61581, 61581, 'OP_EqCollectionFilterCmd', 665, 1), + (18225, 61581, 61581, 'OP_EqCollectionItemCmd', 666, 1), + (18226, 61581, 61581, 'OP_EqCollectionUpdateCmd', 664, 1), + (18227, 61581, 61581, 'OP_EqConsignmentItemsCmd', 710, 1), + (18228, 61581, 61581, 'OP_EqCreateGhostCmd', 631, 1), + (18229, 61581, 61581, 'OP_EqCreateListBoxCmd', 646, 1), + (18230, 61581, 61581, 'OP_EqCreateSignWidgetCmd', 633, 1), + (18231, 61581, 61581, 'OP_EqCreateWidgetCmd', 632, 1), + (18232, 61581, 61581, 'OP_EqDebugPVDCmd', 699, 1), + (18233, 61581, 61581, 'OP_EqDestroyGhostCmd', 634, 1), + (18234, 61581, 61581, 'OP_EqDialogCloseCmd', 662, 1), + (18235, 61581, 61581, 'OP_EqDialogOpenCmd', 661, 1), + (18236, 61581, 61581, 'OP_EqDisplaySpellFailCmd', 682, 1), + (18237, 61581, 61581, 'OP_EqDisplayTextCmd', 630, 1), + (18238, 61581, 61581, 'OP_EqDrawablePathGraphCmd', 660, 1), + (18239, 61581, 61581, 'OP_EqEnableGameEventCmd', 692, 1), + (18240, 61581, 61581, 'OP_EqEnableWindowCmd', 694, 1), + (18241, 61581, 61581, 'OP_EqExamineInfoCmd', 677, 1), + (18242, 61581, 61581, 'OP_EqFactionUpdateCmd', 663, 1), + (18243, 61581, 61581, 'OP_EqFlashWindowCmd', 695, 1), + (18244, 61581, 61581, 'OP_EqGetProbsCmd', 703, 1), + (18245, 61581, 61581, 'OP_EqGroupMemberRemovedCmd', 656, 1), + (18246, 61581, 61581, 'OP_EqGuildBankEventActionCmd', 721, 1), + (18247, 61581, 61581, 'OP_EqGuildBankExamineInfoCmd', 722, 1), + (18248, 61581, 61581, 'OP_EqHearChainEffectCmd', 657, 1), + (18249, 61581, 61581, 'OP_EqHearChatCmd', 629, 1), + (18250, 61581, 61581, 'OP_EqHearCombatCmd', 638, 1), + (18251, 61581, 61581, 'OP_EqHearConsiderCmd', 644, 1), + (18252, 61581, 61581, 'OP_EqHearDeathCmd', 655, 1), + (18253, 61581, 61581, 'OP_EQHearDispellCmd', 767, 1), + (18254, 61581, 61581, 'OP_EqHearDrowningCmd', 654, 1), + (18255, 61581, 61581, 'OP_EqHearHealCmd', 704, 1), + (18256, 61581, 61581, 'OP_EqHearPlayFlavorCmd', 697, 1), + (18257, 61581, 61581, 'OP_EQHearProcCmd', 640, 1), + (18258, 61581, 61581, 'OP_EQHearResEffectCmd', 641, 1), + (18259, 61581, 61581, 'OP_EqHearSpellCastCmd', 639, 1), + (18260, 61581, 61581, 'OP_EqHearSpellFizzleCmd', 643, 1), + (18261, 61581, 61581, 'OP_EqHearSpellInterruptCmd', 642, 1), + (18262, 61581, 61581, 'OP_EqHearSpellNoLandCmd', 723, 1), + (18263, 61581, 61581, 'OP_EQHearThreatCmd', 761, 1), + (18264, 61581, 61581, 'OP_EqHelpPathClearCmd', 675, 1), + (18265, 61581, 61581, 'OP_EqHelpPathCmd', 674, 1), + (18266, 61581, 61581, 'OP_EqInspectPCResultsCmd', 659, 1), + (18267, 61581, 61581, 'OP_EqInstructionWindowCloseCmd', 689, 1), + (18268, 61581, 61581, 'OP_EqInstructionWindowCmd', 688, 1), + (18269, 61581, 61581, 'OP_EqInstructionWindowGoalCmd', 690, 1), + (18270, 61581, 61581, 'OP_EqInstructionWindowTaskCmd', 691, 1), + (18271, 61581, 61581, 'OP_EqJunctionListCmd', 680, 1), + (18272, 61581, 61581, 'OP_EqMapExplorationCmd', 713, 1), + (18273, 61581, 61581, 'OP_EqMentoring', 668, 1), + (18274, 61581, 61581, 'OP_EqPlaySound3DCmd', 652, 1), + (18275, 61581, 61581, 'OP_EqPlaySoundCmd', 651, 1), + (18276, 61581, 61581, 'OP_EqPlayVoiceCmd', 653, 1), + (18277, 61581, 61581, 'OP_EqQuestGroupCmd', 670, 1), + (18278, 61581, 61581, 'OP_EqQuestionnaireCmd', 701, 1), + (18279, 61581, 61581, 'OP_EqQuestJournalReplyCmd', 669, 1), + (18280, 61581, 61581, 'OP_EqQuestJournalUpdateCmd', 667, 1), + (18281, 61581, 61581, 'OP_EqReceiveOfferCmd', 658, 1), + (18282, 61581, 61581, 'OP_EqResurrectedCmd', 685, 1), + (18283, 61581, 61581, 'OP_EqSetControlGhostCmd', 636, 1), + (18284, 61581, 61581, 'OP_EqSetDebugPathPointsCmd', 647, 1), + (18285, 61581, 61581, 'OP_EqSetDefaultVerbCmd', 687, 1), + (18286, 61581, 61581, 'OP_EqSetPOVGhostCmd', 637, 1), + (18287, 61581, 61581, 'OP_EqShowBookCmd', 700, 1), + (18288, 61581, 61581, 'OP_EqShowDeathWindowCmd', 681, 1), + (18289, 61581, 61581, 'OP_EqShowWindowCmd', 693, 1), + (18290, 61581, 61581, 'OP_EqSpellCastEndCmd', 684, 1), + (18291, 61581, 61581, 'OP_EqSpellCastStartCmd', 683, 1), + (18292, 61581, 61581, 'OP_EqSpellMoveToRangeAndRetryCmd', 715, 1), + (18293, 61581, 61581, 'OP_EqStartBrokerCmd', 712, 1), + (18294, 61581, 61581, 'OP_EqStateCmd', 650, 1), + (18295, 61581, 61581, 'OP_EqStoreLogCmd', 714, 1), + (18296, 61581, 61581, 'OP_EqUpdateBankCmd', 676, 1), + (18297, 61581, 61581, 'OP_EqUpdateGhostCmd', 635, 1), + (18298, 61581, 61581, 'OP_EqUpdateLootCmd', 679, 1), + (18299, 61581, 61581, 'OP_EqUpdateMerchantCmd', 671, 1), + (18300, 61581, 61581, 'OP_EqUpdatePlayerMailCmd', 716, 1), + (18301, 61581, 61581, 'OP_EqUpdatePlayerTradeCmd', 673, 1), + (18302, 61581, 61581, 'OP_EqUpdateSignWidgetCmd', 698, 1), + (18303, 61581, 61581, 'OP_EqUpdateStoreCmd', 672, 1), + (18304, 61581, 61581, 'OP_EqUpdateSubClassesCmd', 645, 1), + (18305, 61581, 61581, 'OP_EqUpdateTargetCmd', 708, 1), + (18306, 61581, 61581, 'OP_EqWhoChannelQueryReplyCmd', 706, 1), + (18307, 61581, 61581, 'OP_ESInitMsg', 27, 1), + (18308, 61581, 61581, 'OP_ESLoginRequestMsg', 3, 1), + (18309, 61581, 61581, 'OP_ESReadyForClientsMsg', 28, 1), + (18310, 61581, 61581, 'OP_ESStatusMsg', 102, 1), + (18311, 61581, 61581, 'OP_ESWeatherRequestEndMsg', 107, 1), + (18312, 61581, 61581, 'OP_ESWeatherRequestMsg', 106, 1), + (18313, 61581, 61581, 'OP_ESZoneInstanceStatusMsg', 103, 1), + (18314, 61581, 61581, 'OP_ExamineConsignmentRequestMsg', 174, 1), + (18315, 61581, 61581, 'OP_ExamineConsignmentResponseMsg', 175, 1), + (18316, 61581, 61581, 'OP_ExamineInfoRequestMsg', 259, 1), + (18317, 61581, 61581, 'OP_ExamineItemRequestMsg', 198, 1), + (18318, 61581, 61581, 'OP_ExitHouseMsg', 158, 1), + (18319, 61581, 61581, 'OP_ExpectClientAsCharacterReplyMs', 24, 1), + (18320, 61581, 61581, 'OP_ExpectClientAsCharacterRequest', 34, 1), + (18321, 61581, 61581, 'OP_ExpPurchWindow', 746, 1), + (18322, 61581, 61581, 'OP_FellowshipExpMsg', 125, 1), + (18323, 61581, 61581, 'OP_FlightPathsMsg', 418, 1), + (18324, 61581, 61581, 'OP_GameWorldTimeMsg', 45, 1), + (18325, 61581, 61581, 'OP_PaperdollImage', 584, 1), + (18326, 61581, 61581, 'OP_GetAuctionAssetIDMsg', 446, 1), + (18327, 61581, 61581, 'OP_GetAuctionAssetIDReplyMsg', 447, 1), + (18328, 61581, 61581, 'OP_GetAvatarAccessRequestForCSToo', 398, 1), + (18329, 61581, 61581, 'OP_GetCharacterSerializedReplyMsg', 429, 1), + (18330, 61581, 61581, 'OP_GetCharacterSerializedRequestM', 428, 1), + (18331, 61581, 61581, 'OP_GroupCreatedMsg', 90, 1), + (18332, 61581, 61581, 'OP_GroupDestroyedMsg', 91, 1), + (18333, 61581, 61581, 'OP_GroupLeaderChangedMsg', 95, 1), + (18334, 61581, 61581, 'OP_GroupMemberAddedMsg', 92, 1), + (18335, 61581, 61581, 'OP_GroupMemberRemovedMsg', 93, 1), + (18336, 61581, 61581, 'OP_GroupOptionsMsg', 202, 1), + (18337, 61581, 61581, 'OP_GroupRemovedFromGroupMsg', 94, 1), + (18338, 61581, 61581, 'OP_GroupResendOOZDataMsg', 96, 1), + (18339, 61581, 61581, 'OP_GroupSettingsChangedMsg', 97, 1), + (18340, 61581, 61581, 'OP_GuildBankActionMsg', 278, 1), + (18341, 61581, 61581, 'OP_GuildBankActionResponseMsg', 279, 1), + (18342, 61581, 61581, 'OP_GuildBankEventListMsg', 283, 1), + (18343, 61581, 61581, 'OP_GuildBankItemDetailsRequestMsg', 280, 1), + (18344, 61581, 61581, 'OP_GuildBankItemDetailsResponseMs', 281, 1), + (18345, 61581, 61581, 'OP_GuildBankUpdateMsg', 282, 1), + (18346, 61581, 61581, 'OP_GuildEventActionMsg', 273, 1), + (18347, 61581, 61581, 'OP_GuildEventAddMsg', 272, 1), + (18348, 61581, 61581, 'OP_GuildEventDetailsMsg', 276, 1), + (18349, 61581, 61581, 'OP_GuildEventListMsg', 274, 1), + (18350, 61581, 61581, 'OP_GuildEventMsg', 271, 1), + (18351, 61581, 61581, 'OP_GuildMembershipResponseMsg', 361, 1), + (18352, 61581, 61581, 'OP_GuildRecruiting', 726, 1), + (18353, 61581, 61581, 'OP_GuildRecruitingDetails', 727, 1), + (18354, 61581, 61581, 'OP_GuildRecruitingImage', 728, 1), + (18355, 61581, 61581, 'OP_GuildRecruitingMemberInfo', 725, 1), + (18356, 61581, 61581, 'OP_GuildsayMsg', 124, 1), + (18357, 61581, 61581, 'OP_GuildStatusUpdate', 719, 1), + (18358, 61581, 61581, 'OP_GuildUpdateMsg', 127, 1), + (18359, 61581, 61581, 'OP_HeritageMsg', 10011, 1), + (18360, 61581, 61581, 'OP_HideIllusionsMsg', 197, 1), + (18361, 61581, 61581, 'OP_HouseAccessRemoveMsg', 161, 1), + (18362, 61581, 61581, 'OP_HouseAccessSetMsg', 160, 1), + (18363, 61581, 61581, 'OP_HouseCustomizationScreenMsg', 169, 1), + (18364, 61581, 61581, 'OP_HouseDefaultAccessSetMsg', 159, 1), + (18365, 61581, 61581, 'OP_HouseDeletedRemotelyMsg', 145, 1), + (18366, 61581, 61581, 'OP_HouseItemsList', 489, 1), + (18367, 61581, 61581, 'OP_HousingDataChangedMsg', 432, 1), + (18368, 61581, 61581, 'OP_HousingRestoreMsg', 433, 1), + (18369, 61581, 61581, 'OP_InspectPlayerMsg', 367, 1), + (18370, 61581, 61581, 'OP_InspectPlayerRequestMsg', 455, 1), + (18371, 61581, 61581, 'OP_InviteRequestMsg', 452, 1), + (18372, 61581, 61581, 'OP_InviteResponseMsg', 453, 1), + (18373, 61581, 61581, 'OP_InviteTargetResponseMsg', 454, 1), + (18374, 61581, 61581, 'OP_JoinGuildNotifyMsg', 363, 1), + (18375, 61581, 61581, 'OP_JournalQuestStoryline', 768, 1), + (18376, 61581, 61581, 'OP_KeymapDataMsg', 180, 1), + (18377, 61581, 61581, 'OP_KeymapLoadMsg', 178, 1), + (18378, 61581, 61581, 'OP_KeymapNoneMsg', 179, 1), + (18379, 61581, 61581, 'OP_KeymapSaveMsg', 181, 1), + (18380, 61581, 61581, 'OP_KnowledgebaseRequestMsg', 230, 1), + (18381, 61581, 61581, 'OP_KnowledgebaseResponseMsg', 231, 1), + (18382, 61581, 61581, 'OP_KnowledgeWindowSlotMappingMsg', 373, 1), + (18383, 61581, 61581, 'OP_KnownLanguagesMsg', 242, 1), + (18384, 61581, 61581, 'OP_Launchpad', 582, 1), + (18385, 61581, 61581, 'OP_LeaveGuildNotifyMsg', 362, 1), + (18386, 61581, 61581, 'OP_LevelChangedMsg', 265, 1), + (18387, 61581, 61581, 'OP_LFGGroupSearch', 509, 1), + (18388, 61581, 61581, 'OP_LFGUpdateMsg', 523, 1), + (18389, 61581, 61581, 'OP_LikeOption', 139, 1), + (18390, 61581, 61581, 'OP_LoadCalendarEvents', 585, 1), + (18391, 61581, 61581, 'OP_LoadWelcomeWindow', 567, 1), + (18392, 61581, 61581, 'OP_LoginByNumRequestMsg', 1, 1), + (18393, 61581, 61581, 'OP_LoginReplyMsg', 4, 1), + (18394, 61581, 61581, 'OP_LoginRequestMsg', 0, 1), + (18395, 61581, 61581, 'OP_LootItemsRequestMsg', 188, 1), + (18396, 61581, 61581, 'OP_Lottery', 724, 1), + (18397, 61581, 61581, 'OP_LSCheckAcctLockMsg', 207, 1), + (18398, 61581, 61581, 'OP_LsClientAlertlogReplyMsg', 246, 1), + (18399, 61581, 61581, 'OP_LsClientBaselogReplyMsg', 244, 1), + (18400, 61581, 61581, 'OP_LsClientCrashlogReplyMsg', 245, 1), + (18401, 61581, 61581, 'OP_LsClientVerifylogReplyMsg', 247, 1), + (18402, 61581, 61581, 'OP_LsRequestClientCrashLogMsg', 243, 1), + (18403, 61581, 61581, 'OP_LSServerLockMsg', 369, 1), + (18404, 61581, 61581, 'OP_MacroInitMsg', 262, 1), + (18405, 61581, 61581, 'OP_MacroUpdateMsg', 263, 1), + (18406, 61581, 61581, 'OP_MailCommitSendMessageMsg', 348, 1), + (18407, 61581, 61581, 'OP_MailDeleteMessageMsg', 344, 1), + (18408, 61581, 61581, 'OP_MailEventNotificationMsg', 416, 1), + (18409, 61581, 61581, 'OP_MailGetHeadersReplyMsg', 345, 1), + (18410, 61581, 61581, 'OP_MailGetMessageMsg', 342, 1), + (18411, 61581, 61581, 'OP_MailGetMessageReplyMsg', 346, 1), + (18412, 61581, 61581, 'OP_MailRemoveAttachFromMailMsg', 350, 1), + (18413, 61581, 61581, 'OP_MailSendMessageMsg', 343, 1), + (18414, 61581, 61581, 'OP_MailSendMessageReplyMsg', 347, 1), + (18415, 61581, 61581, 'OP_MailSendSystemMessageMsg', 349, 1), + (18416, 61581, 61581, 'OP_MakeGroupLeaderMsg', 89, 1), + (18417, 61581, 61581, 'OP_MapFogDataInitMsg', 400, 1), + (18418, 61581, 61581, 'OP_MapFogDataUpdateMsg', 401, 1), + (18419, 61581, 61581, 'OP_MapRequest', 526, 1), + (18420, 61581, 61581, 'OP_MarketAddFundsReply', 534, 1), + (18421, 61581, 61581, 'OP_MarketAddFundsRequest', 533, 1), + (18422, 61581, 61581, 'OP_MarketFundsUpdate', 531, 1), + (18423, 61581, 61581, 'OP_MarketPlaceItems', 544, 1), + (18424, 61581, 61581, 'OP_MarketPlacePrices', 537, 1), + (18425, 61581, 61581, 'OP_MarketPurchase', 536, 1), + (18426, 61581, 61581, 'OP_MentorPopup', 565, 1), + (18427, 61581, 61581, 'OP_MercHireWindow', 771, 1), + (18428, 61581, 61581, 'OP_MercUnknown', 772, 1), + (18429, 61581, 61581, 'OP_MigrateBoatTransportMsg', 256, 1), + (18430, 61581, 61581, 'OP_MigrateBoatTransportReplyMsg', 257, 1), + (18431, 61581, 61581, 'OP_MigrateClientToZoneReplyMsg', 84, 1), + (18432, 61581, 61581, 'OP_MigrateClientToZoneRequestMsg', 83, 1), + (18433, 61581, 61581, 'OP_ModifyGuildMsg', 270, 1), + (18434, 61581, 61581, 'OP_MonitorCharacterListMsg', 58, 1), + (18435, 61581, 61581, 'OP_MonitorCharacterListRequestMsg', 59, 1), + (18436, 61581, 61581, 'OP_MonitorReplyMsg', 57, 1), + (18437, 61581, 61581, 'OP_MOTDMsg', 46, 1), + (18438, 61581, 61581, 'OP_MoveableObjectPlacementCriteri', 163, 1), + (18439, 61581, 61581, 'OP_MoveLogUpdateMsg', 405, 1), + (18440, 61581, 61581, 'OP_NotifyApprenticeStoppedMentori', 413, 1), + (18441, 61581, 61581, 'OP_OfferQuestMsg', 406, 1), + (18442, 61581, 61581, 'OP_OnscreenMsgMsg', 268, 1), + (18443, 61581, 61581, 'OP_OpenCharCust', 568, 1), + (18444, 61581, 61581, 'OP_OutOfZoneMemberDataMsg', 98, 1), + (18445, 61581, 61581, 'OP_PayHouseUpkeepMsg', 162, 1), + (18446, 61581, 61581, 'OP_PerformCameraShakeMsg', 217, 1), + (18447, 61581, 61581, 'OP_PerformPlayerKnockbackMsg', 216, 1), + (18448, 61581, 61581, 'OP_PetOptions', 204, 1), + (18449, 61581, 61581, 'OP_PetOptionsResponse', 588, 1), + (18450, 61581, 61581, 'OP_PlayCharacterReplyMsg', 21, 1), + (18451, 61581, 61581, 'OP_PlayCharacterRequestMsg', 20, 1), + (18452, 61581, 61581, 'OP_PlayerHouseAccessUpdateMsg', 150, 1), + (18453, 61581, 61581, 'OP_PlayerHouseBaseScreenMsg', 148, 1), + (18454, 61581, 61581, 'OP_PlayerHouseCloseUIMsg', 152, 1), + (18455, 61581, 61581, 'OP_PlayerHouseDisplayStatusMsg', 151, 1), + (18456, 61581, 61581, 'OP_PlayerHousePurchaseScreenMsg', 149, 1), + (18457, 61581, 61581, 'OP_PlayerMadeInstances', 143, 1), + (18458, 61581, 61581, 'OP_PlayerMadeInstancesScreen', 142, 1), + (18459, 61581, 61581, 'OP_PlayerPollAnswer', 564, 1), + (18460, 61581, 61581, 'OP_PlayerPollPopup', 563, 1), + (18461, 61581, 61581, 'OP_PlayLon', 516, 1), + (18462, 61581, 61581, 'OP_PointOfInterest', 750, 1), + (18463, 61581, 61581, 'OP_PointOfInterest2', 751, 1), + (18464, 61581, 61581, 'OP_PopulateSkillMapsMsg', 218, 1), + (18465, 61581, 61581, 'OP_PositionBoatTransportMsg', 255, 1), + (18466, 61581, 61581, 'OP_PositionMoveableObject', 165, 1), + (18467, 61581, 61581, 'OP_PostPossessionMsg', 459, 1), + (18468, 61581, 61581, 'OP_PredictionUpdateMsg', 39, 1), + (18469, 61581, 61581, 'OP_PrePossessionMsg', 458, 1), + (18470, 61581, 61581, 'OP_PromoFlagsDetailsMsg', 378, 1), + (18471, 61581, 61581, 'OP_PublishHouse', 141, 1), + (18472, 61581, 61581, 'OP_PurchaseConsignmentLoreCheckRe', 412, 1), + (18473, 61581, 61581, 'OP_PurchaseConsignmentRequestMsg', 131, 1), + (18474, 61581, 61581, 'OP_QueAllBgSolo', 571, 1), + (18475, 61581, 61581, 'OP_QuestionnaireMsg', 264, 1), + (18476, 61581, 61581, 'OP_QuestJournalInspectMsg', 116, 1), + (18477, 61581, 61581, 'OP_QuestJournalOpenMsg', 115, 1), + (18478, 61581, 61581, 'OP_QuestJournalSetVisibleMsg', 117, 1), + (18479, 61581, 61581, 'OP_QuestJournalWaypointMsg', 118, 1), + (18480, 61581, 61581, 'OP_QuestReward', 324, 1), + (18481, 61581, 61581, 'OP_QuickbarInitMsg', 260, 1), + (18482, 61581, 61581, 'OP_QuickbarUpdateMsg', 261, 1), + (18483, 61581, 61581, 'OP_RaceRestrictionMsg', 444, 1), + (18484, 61581, 61581, 'OP_ReadBookPageMsg', 199, 1), + (18485, 61581, 61581, 'OP_ReadyForTakeOffMsg', 195, 1), + (18486, 61581, 61581, 'OP_ReadyToZoneMsg', 86, 1), + (18487, 61581, 61581, 'OP_RecipeBook', 545, 1), + (18488, 61581, 61581, 'OP_RecipeDetailsMsg', 74, 1), + (18489, 61581, 61581, 'OP_RecipeList', 762, 1), + (18490, 61581, 61581, 'OP_RecipeListUnknown', 600, 1), + (18491, 61581, 61581, 'OP_RelinquishHouseMsg', 156, 1), + (18492, 61581, 61581, 'OP_ReloadLocalizedTxtMsg', 359, 1), + (18493, 61581, 61581, 'OP_RemoteCmdMsg', 44, 1), + (18494, 61581, 61581, 'OP_RemoveClientFromGroupMsg', 87, 1), + (18495, 61581, 61581, 'OP_RemoveConcentrationMsg', 114, 1), + (18496, 61581, 61581, 'OP_RemoveGroupFromGroupMsg', 88, 1), + (18497, 61581, 61581, 'OP_RemoveSpellEffectMsg', 113, 1), + (18498, 61581, 61581, 'OP_RenameGuildMsg', 286, 1), + (18499, 61581, 61581, 'OP_ReplaceableSubMeshesMsg', 168, 1), + (18500, 61581, 61581, 'OP_ReportMsg', 384, 1), + (18501, 61581, 61581, 'OP_RequestCampMsg', 52, 1), + (18502, 61581, 61581, 'OP_RequestGuildBankEventDetailsMs', 284, 1), + (18503, 61581, 61581, 'OP_RequestGuildEventDetailsMsg', 275, 1), + (18504, 61581, 61581, 'OP_RequestGuildInfoMsg', 277, 1), + (18505, 61581, 61581, 'OP_RequestGuildMembershipMsg', 360, 1), + (18506, 61581, 61581, 'OP_RequestHelpRepathMsg', 209, 1), + (18507, 61581, 61581, 'OP_RequestRecipeDetailsMsg', 73, 1), + (18508, 61581, 61581, 'OP_RequestTargetLocMsg', 210, 1), + (18509, 61581, 61581, 'OP_Research', 763, 1), + (18510, 61581, 61581, 'OP_ResendWorldChannelsMsg', 448, 1), + (18511, 61581, 61581, 'OP_ReskinCharacterRequestMsg', 15, 1), + (18512, 61581, 61581, 'OP_RestartZoneMsg', 417, 1), + (18513, 61581, 61581, 'OP_RewardPackMsg', 285, 1), + (18514, 61581, 61581, 'OP_SatMsg', 192, 1), + (18515, 61581, 61581, 'OP_SavageBarInitMsg', 587, 1), + (18516, 61581, 61581, 'OP_SelectZoneTeleporterDestinatio', 358, 1), + (18517, 61581, 61581, 'OP_SendLatestRequestMsg', 99, 1), + (18518, 61581, 61581, 'OP_ServerPlayCharacterReplyMsg', 26, 1), + (18519, 61581, 61581, 'OP_ServerPlayCharacterRequestMsg', 25, 1), + (18520, 61581, 61581, 'OP_SetInstanceDisplayNameMsg', 445, 1), + (18521, 61581, 61581, 'OP_SetRemoteCmdsMsg', 43, 1), + (18522, 61581, 61581, 'OP_SetSocialMsg', 101, 1), + (18523, 61581, 61581, 'OP_ShaderCustomizationMsg', 167, 1), + (18524, 61581, 61581, 'OP_ShowCreateFromRecipeUIMsg', 222, 1), + (18525, 61581, 61581, 'OP_ShowIllusionsMsg', 196, 1), + (18526, 61581, 61581, 'OP_ShowItemCreationProcessUIMsg', 226, 1), + (18527, 61581, 61581, 'OP_ShowRecipeBookMsg', 229, 1), + (18528, 61581, 61581, 'OP_ShowZoneTeleporterDestinations', 357, 1), + (18529, 61581, 61581, 'OP_SitMsg', 190, 1), + (18530, 61581, 61581, 'OP_SkillInfoRequest', 519, 1), + (18531, 61581, 61581, 'OP_SkillInfoResponse', 520, 1), + (18532, 61581, 61581, 'OP_SOEAllAccess', 627, 1), + (18533, 61581, 61581, 'OP_SpellGainedMsg', 266, 1), + (18534, 61581, 61581, 'OP_StandMsg', 191, 1), + (18535, 61581, 61581, 'OP_StoodMsg', 193, 1), + (18536, 61581, 61581, 'OP_StopItemCreationMsg', 225, 1), + (18537, 61581, 61581, 'OP_StoppedLootingMsg', 189, 1), + (18538, 61581, 61581, 'OP_StopTrackingMsg', 396, 1), + (18539, 61581, 61581, 'OP_SubmitCharCust', 569, 1), + (18540, 61581, 61581, 'OP_SupplyDepot', 760, 1), + (18541, 61581, 61581, 'OP_SysClient', 221, 1), + (18542, 61581, 61581, 'OP_TeleportWithinZoneMsg', 81, 1), + (18543, 61581, 61581, 'OP_TeleportWithinZoneNoReloadMsg', 82, 1), + (18544, 61581, 61581, 'OP_TintWidgetsMsg', 173, 1), + (18545, 61581, 61581, 'OP_TitleUpdateMsg', 389, 1), + (18546, 61581, 61581, 'OP_TrackingUpdateMsg', 394, 1), + (18547, 61581, 61581, 'OP_TradeskillList', 729, 1), + (18548, 61581, 61581, 'OP_TraitsList', 752, 1), + (18549, 61581, 61581, 'OP_UIEvent', 532, 1), + (18550, 61581, 61581, 'OP_UIResetMsg', 177, 1), + (18551, 61581, 61581, 'OP_UISettingsResponseMsg', 176, 1), + (18552, 61581, 61581, 'OP_Unknown', 785, 1), + (18553, 61581, 61581, 'OP_UnknownNpcMsg', 377, 1), + (18554, 61581, 61581, 'OP_UpdateActivePublicZonesMsg', 376, 1), + (18555, 61581, 61581, 'OP_UpdateCharacterSheetMsg', 65, 1), + (18556, 61581, 61581, 'OP_UpdateClientPredFlagsMsg', 249, 1), + (18557, 61581, 61581, 'OP_UpdateDebugRadiiMsg', 383, 1), + (18558, 61581, 61581, 'OP_UpdateGroupMemberDataMsg', 393, 1), + (18559, 61581, 61581, 'OP_UpdateHouseAccessDataMsg', 147, 1), + (18560, 61581, 61581, 'OP_UpdateHouseDataMsg', 146, 1), + (18561, 61581, 61581, 'OP_UpdateInventoryMsg', 70, 1), + (18562, 61581, 61581, 'OP_UpdateItemCreationProcessUIMsg', 227, 1), + (18563, 61581, 61581, 'OP_UpdateMotdMsg', 211, 1), + (18564, 61581, 61581, 'OP_UpdateOpportunityMsg', 77, 1), + (18565, 61581, 61581, 'OP_UpdatePositionMsg', 41, 1), + (18566, 61581, 61581, 'OP_UpdateRaidMsg', 385, 1), + (18567, 61581, 61581, 'OP_UpdateRecipeBookMsg', 72, 1), + (18568, 61581, 61581, 'OP_UpdateSkillBookMsg', 75, 1), + (18569, 61581, 61581, 'OP_UpdateSkillsMsg', 76, 1), + (18570, 61581, 61581, 'OP_UpdateSpellBookMsg', 68, 1), + (18571, 61581, 61581, 'OP_UpdateTargetLocMsg', 64, 1), + (18572, 61581, 61581, 'OP_UpdateTargetMsg', 63, 1), + (18573, 61581, 61581, 'OP_UpdateTitleCmd', 499, 1), + (18574, 61581, 61581, 'OP_UseAdornment', 740, 1), + (18575, 61581, 61581, 'OP_VideoUploaded', 586, 1), + (18576, 61581, 61581, 'OP_VoiceChatChannel', 525, 1), + (18577, 61581, 61581, 'OP_VoiceChatServer', 756, 1), + (18578, 61581, 61581, 'OP_WaypointReplyMsg', 353, 1), + (18579, 61581, 61581, 'OP_WaypointRequestMsg', 352, 1), + (18580, 61581, 61581, 'OP_WaypointSelectMsg', 354, 1), + (18581, 61581, 61581, 'OP_WaypointUpdateMsg', 355, 1), + (18582, 61581, 61581, 'OP_Weakness', 590, 1), + (18583, 61581, 61581, 'OP_WhoQueryReplyMsg', 56, 1), + (18584, 61581, 61581, 'OP_WhoQueryRequestMsg', 55, 1), + (18585, 61581, 61581, 'OP_WorldDataChangeMsg', 415, 1), + (18586, 61581, 61581, 'OP_WorldDataUpdateMsg', 240, 1), + (18587, 61581, 61581, 'OP_WorldListMsg', 8, 1), + (18588, 61581, 61581, 'OP_WorldPingMsg', 404, 1), + (18589, 61581, 61581, 'OP_WorldShutdownUpdateMsg', 408, 1), + (18590, 61581, 61581, 'OP_WorldStatusChangeMsg', 6, 1), + (18591, 61581, 61581, 'OP_WorldTravelAvail', 579, 1), + (18592, 61581, 61581, 'OP_WSAcctLockStatusMsg', 208, 1), + (18593, 61581, 61581, 'OP_WSCreateCharacterReplyMsg', 14, 1), + (18594, 61581, 61581, 'OP_WSCreateCharacterRequestMsg', 13, 1), + (18595, 61581, 61581, 'OP_WSLoginRequestMsg', 2, 1), + (18596, 61581, 61581, 'OP_WSServerHideMsg', 370, 1), + (18597, 61581, 61581, 'OP_WSServerLockMsg', 368, 1), + (18598, 61581, 61581, 'OP_WSStatusReplyMsg', 5, 1), + (18599, 61581, 61581, 'OP_ZoneBgInstanceList', 575, 1), + (18600, 61581, 61581, 'OP_ZoneInfoMsg', 35, 1), + (18601, 61581, 61581, 'OP_ZoneInstanceCreateReplyMsg', 32, 1), + (18602, 61581, 61581, 'OP_ZoneInstanceDestroyedMsg', 33, 1), + (18603, 61581, 61581, 'OP_ZoneMOTDMsg', 47, 1), + (18604, 61581, 61581, 'OP_ZonesStatusMsg', 105, 1), + (18605, 61581, 61581, 'OP_ZonesStatusRequestMsg', 104, 1), + (18606, 61581, 61581, 'OP_ZoneToFriendReplyMsg', 288, 1), + (18607, 61581, 61581, 'OP_ZoneToFriendRequestMsg', 287, 1), + (18608, 61581, 61581, 'OP_EarlyLandingRequestMsg', 491, 1), + (19073, 61608, 61608, 'OP_AchievementUpdateMsg', 764, 1), + (19074, 61608, 61608, 'OP_AddSocialStructureStandingMsg', 253, 1), + (19075, 61608, 61608, 'OP_AdvancementRequestMsg', 399, 1), + (19076, 61608, 61608, 'OP_AdventureList', 493, 1), + (19077, 61608, 61608, 'OP_AFKUpdateMsg', 374, 1), + (19078, 61608, 61608, 'OP_AfterInvSpellUpdate', 71, 1), + (19079, 61608, 61608, 'OP_AllCharactersDescReplyMsg', 10, 1), + (19080, 61608, 61608, 'OP_AllCharactersDescRequestMsg', 9, 1), + (19081, 61608, 61608, 'OP_AllWSDescRequestMsg', 7, 1), + (19082, 61608, 61608, 'OP_AnonUpdateMsg', 375, 1), + (19083, 61608, 61608, 'OP_ArenaCreate', 461, 1), + (19084, 61608, 61608, 'OP_ArenaGameTypesMsg', 450, 1), + (19085, 61608, 61608, 'OP_ArenaList', 462, 1), + (19086, 61608, 61608, 'OP_ArenaWindow', 470, 1), + (19087, 61608, 61608, 'OP_AttackAllowed', 505, 1), + (19088, 61608, 61608, 'OP_AttackNotAllowed', 506, 1), + (19089, 61608, 61608, 'OP_AuctionAbortMsg', 441, 1), + (19090, 61608, 61608, 'OP_AuctionCharacter', 438, 1), + (19091, 61608, 61608, 'OP_AuctionCharacterReply', 439, 1), + (19092, 61608, 61608, 'OP_AuctionCoin', 436, 1), + (19093, 61608, 61608, 'OP_AuctionCoinReply', 437, 1), + (19094, 61608, 61608, 'OP_AuctionCommitMsg', 440, 1), + (19095, 61608, 61608, 'OP_AuctionItem', 434, 1), + (19096, 61608, 61608, 'OP_AuctionItemReply', 435, 1), + (19097, 61608, 61608, 'OP_AuditAuctionEventMsg', 451, 1), + (19098, 61608, 61608, 'OP_AvatarCreatedMsg', 48, 1), + (19099, 61608, 61608, 'OP_AvatarDestroyedMsg', 49, 1), + (19100, 61608, 61608, 'OP_AvatarUpdateMsg', 364, 1), + (19101, 61608, 61608, 'OP_BadLanguageFilter', 524, 1), + (19102, 61608, 61608, 'OP_BagOptions', 507, 1), + (19103, 61608, 61608, 'OP_BeginItemCreationMsg', 224, 1), + (19104, 61608, 61608, 'OP_BeginTrackingMsg', 395, 1), + (19105, 61608, 61608, 'OP_BioUpdateMsg', 366, 1), + (19106, 61608, 61608, 'OP_BrokerAddBag', 296, 1), + (19107, 61608, 61608, 'OP_BrokerRemoveBag', 297, 1), + (19108, 61608, 61608, 'OP_BrokerSellList', 707, 1), + (19109, 61608, 61608, 'OP_BuyPlayerHouseMsg', 153, 1), + (19110, 61608, 61608, 'OP_BuyPlayerHouseTintMsg', 154, 1), + (19111, 61608, 61608, 'OP_CampAbortedMsg', 54, 1), + (19112, 61608, 61608, 'OP_CampClientMsg', 392, 1), + (19113, 61608, 61608, 'OP_CampStartedMsg', 53, 1), + (19114, 61608, 61608, 'OP_CancelCreateFromRecipeMsg', 223, 1), + (19115, 61608, 61608, 'OP_CancelledFeignMsg', 219, 1), + (19116, 61608, 61608, 'OP_CancelMoveObjectModeMsg', 166, 1), + (19117, 61608, 61608, 'OP_CancelSpellCast', 494, 1), + (19118, 61608, 61608, 'OP_ChangeServerControlFlagMsg', 250, 1), + (19119, 61608, 61608, 'OP_ChangeZoneMsg', 79, 1), + (19120, 61608, 61608, 'OP_CharacterAchievements', 763, 1), + (19121, 61608, 61608, 'OP_CharacterCreatedDungeons', 558, 1), + (19122, 61608, 61608, 'OP_CharacterCurrency', 762, 1), + (19123, 61608, 61608, 'OP_CharacterHousingList', 512, 1), + (19124, 61608, 61608, 'OP_CharacterLinkdeadMsg', 419, 1), + (19125, 61608, 61608, 'OP_CharacterMerc', 67, 1), + (19126, 61608, 61608, 'OP_CharacterMounts', 591, 1), + (19127, 61608, 61608, 'OP_CharacterPet', 66, 1), + (19128, 61608, 61608, 'OP_CharNameChangedMsg', 356, 1), + (19129, 61608, 61608, 'OP_CharRenamed', 728, 1), + (19130, 61608, 61608, 'OP_CharTransferCommitReplyMsg', 427, 1), + (19131, 61608, 61608, 'OP_CharTransferCommitRequestMsg', 425, 1), + (19132, 61608, 61608, 'OP_CharTransferReplyMsg', 423, 1), + (19133, 61608, 61608, 'OP_CharTransferRequestMsg', 422, 1), + (19134, 61608, 61608, 'OP_CharTransferRollbackReplyMsg', 426, 1), + (19135, 61608, 61608, 'OP_CharTransferRollbackRequestMsg', 424, 1), + (19136, 61608, 61608, 'OP_CharTransferStartReplyMsg', 421, 1), + (19137, 61608, 61608, 'OP_CharTransferStartRequestMsg', 420, 1), + (19138, 61608, 61608, 'OP_CharTransferValidateReplyMsg', 443, 1), + (19139, 61608, 61608, 'OP_CharTransferValidateRequestMsg', 442, 1), + (19140, 61608, 61608, 'OP_ChatCreateChannelMsg', 289, 1), + (19141, 61608, 61608, 'OP_ChatFiltersMsg', 338, 1), + (19142, 61608, 61608, 'OP_ChatJoinChannelMsg', 290, 1), + (19143, 61608, 61608, 'OP_ChatLeaveChannelMsg', 292, 1), + (19144, 61608, 61608, 'OP_ChatRelationshipUpdateMsg', 187, 1), + (19145, 61608, 61608, 'OP_ChatSendFriendsMsg', 299, 1), + (19146, 61608, 61608, 'OP_ChatSendIgnoresMsg', 300, 1), + (19147, 61608, 61608, 'OP_ChatTellChannelMsg', 293, 1), + (19148, 61608, 61608, 'OP_ChatTellUserMsg', 294, 1), + (19149, 61608, 61608, 'OP_ChatToggleFriendMsg', 295, 1), + (19150, 61608, 61608, 'OP_ChatToggleIgnoreMsg', 298, 1), + (19151, 61608, 61608, 'OP_ChatWhoChannelMsg', 291, 1), + (19152, 61608, 61608, 'OP_ClearDataMsg', 100, 1), + (19153, 61608, 61608, 'OP_ClearForLandingMsg', 496, 1), + (19154, 61608, 61608, 'OP_ClearForTakeOffMsg', 194, 1), + (19155, 61608, 61608, 'OP_ClientCmdMsg', 60, 1), + (19156, 61608, 61608, 'OP_ClientFellMsg', 390, 1), + (19157, 61608, 61608, 'OP_ClientIdleBeginMsg', 410, 1), + (19158, 61608, 61608, 'OP_ClientIdleEndMsg', 411, 1), + (19159, 61608, 61608, 'OP_ClientInDeathRegionMsg', 391, 1), + (19160, 61608, 61608, 'OP_ClientTeleportRequestMsg', 80, 1), + (19161, 61608, 61608, 'OP_ClientTeleportToLocationMsg', 248, 1), + (19162, 61608, 61608, 'OP_CloseGroupInviteWindowMsg', 402, 1), + (19163, 61608, 61608, 'OP_CollectAllHouseItemsMsg', 155, 1), + (19164, 61608, 61608, 'OP_ConsignItemRequestMsg', 129, 1), + (19165, 61608, 61608, 'OP_ConsignItemResponseMsg', 130, 1), + (19166, 61608, 61608, 'OP_ConsignmentCloseStoreMsg', 128, 1), + (19167, 61608, 61608, 'OP_ConsignRemoveItemsMsg', 382, 1), + (19168, 61608, 61608, 'OP_ConsignViewCreateMsg', 379, 1), + (19169, 61608, 61608, 'OP_ConsignViewGetPageMsg', 380, 1), + (19170, 61608, 61608, 'OP_ConsignViewReleaseMsg', 381, 1), + (19171, 61608, 61608, 'OP_ConsignViewSortMsg', 388, 1), + (19172, 61608, 61608, 'OP_CorruptedClientMsg', 414, 1), + (19173, 61608, 61608, 'OP_CreateBoatTransportsMsg', 254, 1), + (19174, 61608, 61608, 'OP_CreateCharacterDungeon', 552, 1), + (19175, 61608, 61608, 'OP_CreateCharacterReplyMsg', 12, 1), + (19176, 61608, 61608, 'OP_CreateCharacterRequestMsg', 11, 1), + (19177, 61608, 61608, 'OP_CreateCharFromCBBReplyMsg', 431, 1), + (19178, 61608, 61608, 'OP_CreateCharFromCBBRequestMsg', 430, 1), + (19179, 61608, 61608, 'OP_CreateGuildReplyMsg', 123, 1), + (19180, 61608, 61608, 'OP_CreateGuildRequestMsg', 121, 1), + (19181, 61608, 61608, 'OP_CreateZoneInstanceMsg', 31, 1), + (19182, 61608, 61608, 'OP_CsCategoryRequestMsg', 371, 1), + (19183, 61608, 61608, 'OP_CsCategoryResponseMsg', 372, 1), + (19184, 61608, 61608, 'OP_CSTicketAddCommentMsg', 237, 1), + (19185, 61608, 61608, 'OP_CSTicketChangeNotificationMsg', 239, 1), + (19186, 61608, 61608, 'OP_CSTicketCommentRequestMsg', 234, 1), + (19187, 61608, 61608, 'OP_CSTicketCommentResponseMsg', 235, 1), + (19188, 61608, 61608, 'OP_CSTicketCreateMsg', 236, 1), + (19189, 61608, 61608, 'OP_CSTicketDeleteMsg', 238, 1), + (19190, 61608, 61608, 'OP_CSTicketHeaderRequestMsg', 232, 1), + (19191, 61608, 61608, 'OP_CSTicketInfoMsg', 233, 1), + (19192, 61608, 61608, 'OP_CSToolAccessResponseMsg', 393, 1), + (19193, 61608, 61608, 'OP_CSToolsRequestMsg', 251, 1), + (19194, 61608, 61608, 'OP_CSToolsResponseMsg', 252, 1), + (19195, 61608, 61608, 'OP_CurrentPet', 490, 1), + (19196, 61608, 61608, 'OP_CustomizationPurchaseRequestMs', 170, 1), + (19197, 61608, 61608, 'OP_CustomizationReplyMsg', 172, 1), + (19198, 61608, 61608, 'OP_CustomizationSetRequestMsg', 171, 1), + (19199, 61608, 61608, 'OP_CustomizeHouseDisplay', 753, 1), + (19200, 61608, 61608, 'OP_DailyObjectives', 604, 1), + (19201, 61608, 61608, 'OP_DefaultGroupOptionsMsg', 201, 1), + (19202, 61608, 61608, 'OP_DefaultGroupOptionsRequestMsg', 200, 1), + (19203, 61608, 61608, 'OP_DeleteCharacterReplyMsg', 19, 1), + (19204, 61608, 61608, 'OP_DeleteCharacterRequestMsg', 18, 1), + (19205, 61608, 61608, 'OP_DeleteGuildMsg', 126, 1), + (19206, 61608, 61608, 'OP_DestUpdateReq', 213, 1), + (19207, 61608, 61608, 'OP_DialogCloseMsg', 112, 1), + (19208, 61608, 61608, 'OP_DialogSelectMsg', 111, 1), + (19209, 61608, 61608, 'OP_DispatchClientCmdMsg', 62, 1), + (19210, 61608, 61608, 'OP_DispatchESMsg', 61, 1), + (19211, 61608, 61608, 'OP_DispatchMsg', 456, 1), + (19212, 61608, 61608, 'OP_DispatchSpellCmdMsg', 182, 1), + (19213, 61608, 61608, 'OP_DisplayDebugNLLPointsMsg', 258, 1), + (19214, 61608, 61608, 'OP_DisplayEventMsg', 457, 1), + (19215, 61608, 61608, 'OP_DisplayExchangeScreenMsg', 449, 1), + (19216, 61608, 61608, 'OP_DisplayGroupOptionsScreenMsg', 203, 1), + (19217, 61608, 61608, 'OP_DisplayInnVisitScreenMsg', 205, 1), + (19218, 61608, 61608, 'OP_DisplayMailScreenMsg', 409, 1), + (19219, 61608, 61608, 'OP_DisplayTSEventReactionMsg', 228, 1), + (19220, 61608, 61608, 'OP_DisplayWarningMsg', 269, 1), + (19221, 61608, 61608, 'OP_DoneLoadingEntityResourcesMsg', 38, 1), + (19222, 61608, 61608, 'OP_DoneLoadingZoneResourcesMsg', 36, 1), + (19223, 61608, 61608, 'OP_DoneSendingInitialEntitiesMsg', 37, 1), + (19224, 61608, 61608, 'OP_DressingRoom', 515, 1), + (19225, 61608, 61608, 'OP_DumpSchedulerMsg', 206, 1), + (19226, 61608, 61608, 'OP_DungeonMakerEnter', 553, 1), + (19227, 61608, 61608, 'OP_DungeonMakerItemRequest', 557, 1), + (19228, 61608, 61608, 'OP_DungeonMakerItemResponse', 589, 1), + (19229, 61608, 61608, 'OP_DungeonMakerToolboxList', 559, 1), + (19230, 61608, 61608, 'OP_DungeonMakerUnknown', 560, 1), + (19231, 61608, 61608, 'OP_DungeonMakerUnknown1', 561, 1), + (19232, 61608, 61608, 'OP_DungeonPlayAsAvatarList', 767, 1), + (19233, 61608, 61608, 'OP_DungeonPlayAsAvatarSelected', 768, 1), + (19234, 61608, 61608, 'OP_EncounterBrokenMsg', 267, 1), + (19235, 61608, 61608, 'OP_EnterHouseMsg', 157, 1), + (19236, 61608, 61608, 'OP_EnterMoveObjectModeMsg', 164, 1), + (19237, 61608, 61608, 'OP_EntityVerbsReplyMsg', 184, 1), + (19238, 61608, 61608, 'OP_EntityVerbsRequestMsg', 183, 1), + (19239, 61608, 61608, 'OP_EntityVerbsVerbMsg', 185, 1), + (19240, 61608, 61608, 'OP_EqArenaResultsCmd', 718, 1), + (19241, 61608, 61608, 'OP_EqAvailWorldChannelsCmd', 705, 1), + (19242, 61608, 61608, 'OP_EqBetaCopyRequest', 624, 1), + (19243, 61608, 61608, 'OP_EqCannedEmoteCmd', 647, 1), + (19244, 61608, 61608, 'OP_EqChatChannelUpdateCmd', 703, 1), + (19245, 61608, 61608, 'OP_EqChoiceWinCmd', 684, 1), + (19246, 61608, 61608, 'OP_EqCloseWindowCmd', 676, 1), + (19247, 61608, 61608, 'OP_EqCollectionFilterCmd', 663, 1), + (19248, 61608, 61608, 'OP_EqCollectionItemCmd', 664, 1), + (19249, 61608, 61608, 'OP_EqCollectionUpdateCmd', 662, 1), + (19250, 61608, 61608, 'OP_EqConsignmentItemsCmd', 708, 1), + (19251, 61608, 61608, 'OP_EqCreateGhostCmd', 629, 1), + (19252, 61608, 61608, 'OP_EqCreateListBoxCmd', 644, 1), + (19253, 61608, 61608, 'OP_EqCreateSignWidgetCmd', 631, 1), + (19254, 61608, 61608, 'OP_EqCreateWidgetCmd', 630, 1), + (19255, 61608, 61608, 'OP_EqDebugPVDCmd', 697, 1), + (19256, 61608, 61608, 'OP_EqDestroyGhostCmd', 632, 1), + (19257, 61608, 61608, 'OP_EqDialogCloseCmd', 660, 1), + (19258, 61608, 61608, 'OP_EqDialogOpenCmd', 659, 1), + (19259, 61608, 61608, 'OP_EqDisplaySpellFailCmd', 680, 1), + (19260, 61608, 61608, 'OP_EqDisplayTextCmd', 628, 1), + (19261, 61608, 61608, 'OP_EqDrawablePathGraphCmd', 658, 1), + (19262, 61608, 61608, 'OP_EqEnableGameEventCmd', 690, 1), + (19263, 61608, 61608, 'OP_EqEnableWindowCmd', 692, 1), + (19264, 61608, 61608, 'OP_EqExamineInfoCmd', 675, 1), + (19265, 61608, 61608, 'OP_EqFactionUpdateCmd', 661, 1), + (19266, 61608, 61608, 'OP_EqFlashWindowCmd', 693, 1), + (19267, 61608, 61608, 'OP_EqGetProbsCmd', 701, 1), + (19268, 61608, 61608, 'OP_EqGroupMemberRemovedCmd', 654, 1), + (19269, 61608, 61608, 'OP_EqGuildBankEventActionCmd', 719, 1), + (19270, 61608, 61608, 'OP_EqGuildBankExamineInfoCmd', 720, 1), + (19271, 61608, 61608, 'OP_EqHearChainEffectCmd', 655, 1), + (19272, 61608, 61608, 'OP_EqHearChatCmd', 627, 1), + (19273, 61608, 61608, 'OP_EqHearCombatCmd', 636, 1), + (19274, 61608, 61608, 'OP_EqHearConsiderCmd', 642, 1), + (19275, 61608, 61608, 'OP_EqHearDeathCmd', 653, 1), + (19276, 61608, 61608, 'OP_EQHearDispellCmd', 765, 1), + (19277, 61608, 61608, 'OP_EqHearDrowningCmd', 652, 1), + (19278, 61608, 61608, 'OP_EqHearHealCmd', 702, 1), + (19279, 61608, 61608, 'OP_EqHearPlayFlavorCmd', 695, 1), + (19280, 61608, 61608, 'OP_EQHearProcCmd', 638, 1), + (19281, 61608, 61608, 'OP_EQHearResEffectCmd', 639, 1), + (19282, 61608, 61608, 'OP_EqHearSpellCastCmd', 637, 1), + (19283, 61608, 61608, 'OP_EqHearSpellFizzleCmd', 641, 1), + (19284, 61608, 61608, 'OP_EqHearSpellInterruptCmd', 640, 1), + (19285, 61608, 61608, 'OP_EqHearSpellNoLandCmd', 721, 1), + (19286, 61608, 61608, 'OP_EQHearThreatCmd', 759, 1), + (19287, 61608, 61608, 'OP_EqHelpPathClearCmd', 673, 1), + (19288, 61608, 61608, 'OP_EqHelpPathCmd', 672, 1), + (19289, 61608, 61608, 'OP_EqInspectPCResultsCmd', 657, 1), + (19290, 61608, 61608, 'OP_EqInstructionWindowCloseCmd', 687, 1), + (19291, 61608, 61608, 'OP_EqInstructionWindowCmd', 686, 1), + (19292, 61608, 61608, 'OP_EqInstructionWindowGoalCmd', 688, 1), + (19293, 61608, 61608, 'OP_EqInstructionWindowTaskCmd', 689, 1), + (19294, 61608, 61608, 'OP_EqJunctionListCmd', 678, 1), + (19295, 61608, 61608, 'OP_EqMapExplorationCmd', 711, 1), + (19296, 61608, 61608, 'OP_EqMentoring', 666, 1), + (19297, 61608, 61608, 'OP_EqPlaySound3DCmd', 650, 1), + (19298, 61608, 61608, 'OP_EqPlaySoundCmd', 649, 1), + (19299, 61608, 61608, 'OP_EqPlayVoiceCmd', 651, 1), + (19300, 61608, 61608, 'OP_EqQuestGroupCmd', 668, 1), + (19301, 61608, 61608, 'OP_EqQuestionnaireCmd', 699, 1), + (19302, 61608, 61608, 'OP_EqQuestJournalReplyCmd', 667, 1), + (19303, 61608, 61608, 'OP_EqQuestJournalUpdateCmd', 665, 1), + (19304, 61608, 61608, 'OP_EqReceiveOfferCmd', 656, 1), + (19305, 61608, 61608, 'OP_EqResurrectedCmd', 683, 1), + (19306, 61608, 61608, 'OP_EqSetControlGhostCmd', 634, 1), + (19307, 61608, 61608, 'OP_EqSetDebugPathPointsCmd', 645, 1), + (19308, 61608, 61608, 'OP_EqSetDefaultVerbCmd', 685, 1), + (19309, 61608, 61608, 'OP_EqSetPOVGhostCmd', 635, 1), + (19310, 61608, 61608, 'OP_EqShowBookCmd', 698, 1), + (19311, 61608, 61608, 'OP_EqShowDeathWindowCmd', 679, 1), + (19312, 61608, 61608, 'OP_EqShowWindowCmd', 691, 1), + (19313, 61608, 61608, 'OP_EqSpellCastEndCmd', 682, 1), + (19314, 61608, 61608, 'OP_EqSpellCastStartCmd', 681, 1), + (19315, 61608, 61608, 'OP_EqSpellMoveToRangeAndRetryCmd', 713, 1), + (19316, 61608, 61608, 'OP_EqStartBrokerCmd', 710, 1), + (19317, 61608, 61608, 'OP_EqStateCmd', 648, 1), + (19318, 61608, 61608, 'OP_EqStoreLogCmd', 712, 1), + (19319, 61608, 61608, 'OP_EqUpdateBankCmd', 674, 1), + (19320, 61608, 61608, 'OP_EqUpdateGhostCmd', 633, 1), + (19321, 61608, 61608, 'OP_EqUpdateLootCmd', 677, 1), + (19322, 61608, 61608, 'OP_EqUpdateMerchantCmd', 669, 1), + (19323, 61608, 61608, 'OP_EqUpdatePlayerMailCmd', 714, 1), + (19324, 61608, 61608, 'OP_EqUpdatePlayerTradeCmd', 671, 1), + (19325, 61608, 61608, 'OP_EqUpdateSignWidgetCmd', 696, 1), + (19326, 61608, 61608, 'OP_EqUpdateStoreCmd', 670, 1), + (19327, 61608, 61608, 'OP_EqUpdateSubClassesCmd', 643, 1), + (19328, 61608, 61608, 'OP_EqUpdateTargetCmd', 706, 1), + (19329, 61608, 61608, 'OP_EqWhoChannelQueryReplyCmd', 704, 1), + (19330, 61608, 61608, 'OP_ESInitMsg', 27, 1), + (19331, 61608, 61608, 'OP_ESLoginRequestMsg', 3, 1), + (19332, 61608, 61608, 'OP_ESReadyForClientsMsg', 28, 1), + (19333, 61608, 61608, 'OP_ESStatusMsg', 102, 1), + (19334, 61608, 61608, 'OP_ESWeatherRequestEndMsg', 107, 1), + (19335, 61608, 61608, 'OP_ESWeatherRequestMsg', 106, 1), + (19336, 61608, 61608, 'OP_ESZoneInstanceStatusMsg', 103, 1), + (19337, 61608, 61608, 'OP_ExamineConsignmentRequestMsg', 174, 1), + (19338, 61608, 61608, 'OP_ExamineConsignmentResponseMsg', 175, 1), + (19339, 61608, 61608, 'OP_ExamineInfoRequestMsg', 259, 1), + (19340, 61608, 61608, 'OP_ExamineItemRequestMsg', 198, 1), + (19341, 61608, 61608, 'OP_ExitHouseMsg', 158, 1), + (19342, 61608, 61608, 'OP_ExpectClientAsCharacterReplyMs', 24, 1), + (19343, 61608, 61608, 'OP_ExpectClientAsCharacterRequest', 34, 1), + (19344, 61608, 61608, 'OP_ExpPurchWindow', 744, 1), + (19345, 61608, 61608, 'OP_FellowshipExpMsg', 125, 1), + (19346, 61608, 61608, 'OP_FlightPathsMsg', 418, 1), + (19347, 61608, 61608, 'OP_GameWorldTimeMsg', 45, 1), + (19348, 61608, 61608, 'OP_PaperdollImage', 584, 1), + (19349, 61608, 61608, 'OP_GetAuctionAssetIDMsg', 446, 1), + (19350, 61608, 61608, 'OP_GetAuctionAssetIDReplyMsg', 447, 1), + (19351, 61608, 61608, 'OP_GetAvatarAccessRequestForCSToo', 398, 1), + (19352, 61608, 61608, 'OP_GetCharacterSerializedReplyMsg', 429, 1), + (19353, 61608, 61608, 'OP_GetCharacterSerializedRequestM', 428, 1), + (19354, 61608, 61608, 'OP_GroupCreatedMsg', 90, 1), + (19355, 61608, 61608, 'OP_GroupDestroyedMsg', 91, 1), + (19356, 61608, 61608, 'OP_GroupLeaderChangedMsg', 95, 1), + (19357, 61608, 61608, 'OP_GroupMemberAddedMsg', 92, 1), + (19358, 61608, 61608, 'OP_GroupMemberRemovedMsg', 93, 1), + (19359, 61608, 61608, 'OP_GroupOptionsMsg', 202, 1), + (19360, 61608, 61608, 'OP_GroupRemovedFromGroupMsg', 94, 1), + (19361, 61608, 61608, 'OP_GroupResendOOZDataMsg', 96, 1), + (19362, 61608, 61608, 'OP_GroupSettingsChangedMsg', 97, 1), + (19363, 61608, 61608, 'OP_GuildBankActionMsg', 278, 1), + (19364, 61608, 61608, 'OP_GuildBankActionResponseMsg', 279, 1), + (19365, 61608, 61608, 'OP_GuildBankEventListMsg', 283, 1), + (19366, 61608, 61608, 'OP_GuildBankItemDetailsRequestMsg', 280, 1), + (19367, 61608, 61608, 'OP_GuildBankItemDetailsResponseMs', 281, 1), + (19368, 61608, 61608, 'OP_GuildBankUpdateMsg', 282, 1), + (19369, 61608, 61608, 'OP_GuildEventActionMsg', 273, 1), + (19370, 61608, 61608, 'OP_GuildEventAddMsg', 272, 1), + (19371, 61608, 61608, 'OP_GuildEventDetailsMsg', 276, 1), + (19372, 61608, 61608, 'OP_GuildEventListMsg', 274, 1), + (19373, 61608, 61608, 'OP_GuildEventMsg', 271, 1), + (19374, 61608, 61608, 'OP_GuildMembershipResponseMsg', 361, 1), + (19375, 61608, 61608, 'OP_GuildRecruiting', 724, 1), + (19376, 61608, 61608, 'OP_GuildRecruitingDetails', 725, 1), + (19377, 61608, 61608, 'OP_GuildRecruitingImage', 726, 1), + (19378, 61608, 61608, 'OP_GuildRecruitingMemberInfo', 723, 1), + (19379, 61608, 61608, 'OP_GuildsayMsg', 124, 1), + (19380, 61608, 61608, 'OP_GuildStatusUpdate', 717, 1), + (19381, 61608, 61608, 'OP_GuildUpdateMsg', 127, 1), + (19382, 61608, 61608, 'OP_HeritageMsg', 10009, 1), + (19383, 61608, 61608, 'OP_HideIllusionsMsg', 197, 1), + (19384, 61608, 61608, 'OP_HouseAccessRemoveMsg', 161, 1), + (19385, 61608, 61608, 'OP_HouseAccessSetMsg', 160, 1), + (19386, 61608, 61608, 'OP_HouseCustomizationScreenMsg', 169, 1), + (19387, 61608, 61608, 'OP_HouseDefaultAccessSetMsg', 159, 1), + (19388, 61608, 61608, 'OP_HouseDeletedRemotelyMsg', 145, 1), + (19389, 61608, 61608, 'OP_HouseItemsList', 489, 1), + (19390, 61608, 61608, 'OP_HousingDataChangedMsg', 432, 1), + (19391, 61608, 61608, 'OP_HousingRestoreMsg', 433, 1), + (19392, 61608, 61608, 'OP_InspectPlayerMsg', 367, 1), + (19393, 61608, 61608, 'OP_InspectPlayerRequestMsg', 455, 1), + (19394, 61608, 61608, 'OP_InviteRequestMsg', 452, 1), + (19395, 61608, 61608, 'OP_InviteResponseMsg', 453, 1), + (19396, 61608, 61608, 'OP_InviteTargetResponseMsg', 454, 1), + (19397, 61608, 61608, 'OP_JoinGuildNotifyMsg', 363, 1), + (19398, 61608, 61608, 'OP_JournalQuestStoryline', 766, 1), + (19399, 61608, 61608, 'OP_KeymapDataMsg', 180, 1), + (19400, 61608, 61608, 'OP_KeymapLoadMsg', 178, 1), + (19401, 61608, 61608, 'OP_KeymapNoneMsg', 179, 1), + (19402, 61608, 61608, 'OP_KeymapSaveMsg', 181, 1), + (19403, 61608, 61608, 'OP_KnowledgebaseRequestMsg', 230, 1), + (19404, 61608, 61608, 'OP_KnowledgebaseResponseMsg', 231, 1), + (19405, 61608, 61608, 'OP_KnowledgeWindowSlotMappingMsg', 373, 1), + (19406, 61608, 61608, 'OP_KnownLanguagesMsg', 242, 1), + (19407, 61608, 61608, 'OP_Launchpad', 582, 1), + (19408, 61608, 61608, 'OP_LeaveGuildNotifyMsg', 362, 1), + (19409, 61608, 61608, 'OP_LevelChangedMsg', 265, 1), + (19410, 61608, 61608, 'OP_LFGGroupSearch', 509, 1), + (19411, 61608, 61608, 'OP_LFGUpdateMsg', 523, 1), + (19412, 61608, 61608, 'OP_LikeOption', 139, 1), + (19413, 61608, 61608, 'OP_LoadCalendarEvents', 585, 1), + (19414, 61608, 61608, 'OP_LoadWelcomeWindow', 567, 1), + (19415, 61608, 61608, 'OP_LoginByNumRequestMsg', 1, 1), + (19416, 61608, 61608, 'OP_LoginReplyMsg', 4, 1), + (19417, 61608, 61608, 'OP_LoginRequestMsg', 0, 1), + (19418, 61608, 61608, 'OP_LootItemsRequestMsg', 188, 1), + (19419, 61608, 61608, 'OP_Lottery', 722, 1), + (19420, 61608, 61608, 'OP_LSCheckAcctLockMsg', 207, 1), + (19421, 61608, 61608, 'OP_LsClientAlertlogReplyMsg', 246, 1), + (19422, 61608, 61608, 'OP_LsClientBaselogReplyMsg', 244, 1), + (19423, 61608, 61608, 'OP_LsClientCrashlogReplyMsg', 245, 1), + (19424, 61608, 61608, 'OP_LsClientVerifylogReplyMsg', 247, 1), + (19425, 61608, 61608, 'OP_LsRequestClientCrashLogMsg', 243, 1), + (19426, 61608, 61608, 'OP_LSServerLockMsg', 369, 1), + (19427, 61608, 61608, 'OP_MacroInitMsg', 262, 1), + (19428, 61608, 61608, 'OP_MacroUpdateMsg', 263, 1), + (19429, 61608, 61608, 'OP_MailCommitSendMessageMsg', 348, 1), + (19430, 61608, 61608, 'OP_MailDeleteMessageMsg', 344, 1), + (19431, 61608, 61608, 'OP_MailEventNotificationMsg', 416, 1), + (19432, 61608, 61608, 'OP_MailGetHeadersReplyMsg', 345, 1), + (19433, 61608, 61608, 'OP_MailGetMessageMsg', 342, 1), + (19434, 61608, 61608, 'OP_MailGetMessageReplyMsg', 346, 1), + (19435, 61608, 61608, 'OP_MailRemoveAttachFromMailMsg', 350, 1), + (19436, 61608, 61608, 'OP_MailSendMessageMsg', 343, 1), + (19437, 61608, 61608, 'OP_MailSendMessageReplyMsg', 347, 1), + (19438, 61608, 61608, 'OP_MailSendSystemMessageMsg', 349, 1), + (19439, 61608, 61608, 'OP_MakeGroupLeaderMsg', 89, 1), + (19440, 61608, 61608, 'OP_MapFogDataInitMsg', 400, 1), + (19441, 61608, 61608, 'OP_MapFogDataUpdateMsg', 401, 1), + (19442, 61608, 61608, 'OP_MapRequest', 526, 1), + (19443, 61608, 61608, 'OP_MarketAddFundsReply', 534, 1), + (19444, 61608, 61608, 'OP_MarketAddFundsRequest', 533, 1), + (19445, 61608, 61608, 'OP_MarketFundsUpdate', 531, 1), + (19446, 61608, 61608, 'OP_MarketPlaceItems', 544, 1), + (19447, 61608, 61608, 'OP_MarketPlacePrices', 537, 1), + (19448, 61608, 61608, 'OP_MarketPurchase', 536, 1), + (19449, 61608, 61608, 'OP_MentorPopup', 565, 1), + (19450, 61608, 61608, 'OP_MercHireWindow', 769, 1), + (19451, 61608, 61608, 'OP_MercUnknown', 770, 1), + (19452, 61608, 61608, 'OP_MigrateBoatTransportMsg', 256, 1), + (19453, 61608, 61608, 'OP_MigrateBoatTransportReplyMsg', 257, 1), + (19454, 61608, 61608, 'OP_MigrateClientToZoneReplyMsg', 84, 1), + (19455, 61608, 61608, 'OP_MigrateClientToZoneRequestMsg', 83, 1), + (19456, 61608, 61608, 'OP_ModifyGuildMsg', 270, 1), + (19457, 61608, 61608, 'OP_MonitorCharacterListMsg', 58, 1), + (19458, 61608, 61608, 'OP_MonitorCharacterListRequestMsg', 59, 1), + (19459, 61608, 61608, 'OP_MonitorReplyMsg', 57, 1), + (19460, 61608, 61608, 'OP_MOTDMsg', 46, 1), + (19461, 61608, 61608, 'OP_MoveableObjectPlacementCriteri', 163, 1), + (19462, 61608, 61608, 'OP_MoveLogUpdateMsg', 405, 1), + (19463, 61608, 61608, 'OP_NotifyApprenticeStoppedMentori', 413, 1), + (19464, 61608, 61608, 'OP_OfferQuestMsg', 406, 1), + (19465, 61608, 61608, 'OP_OnscreenMsgMsg', 268, 1), + (19466, 61608, 61608, 'OP_OpenCharCust', 568, 1), + (19467, 61608, 61608, 'OP_OutOfZoneMemberDataMsg', 98, 1), + (19468, 61608, 61608, 'OP_PayHouseUpkeepMsg', 162, 1), + (19469, 61608, 61608, 'OP_PerformCameraShakeMsg', 217, 1), + (19470, 61608, 61608, 'OP_PerformPlayerKnockbackMsg', 216, 1), + (19471, 61608, 61608, 'OP_PetOptions', 204, 1), + (19472, 61608, 61608, 'OP_PetOptionsResponse', 588, 1), + (19473, 61608, 61608, 'OP_PlayCharacterReplyMsg', 21, 1), + (19474, 61608, 61608, 'OP_PlayCharacterRequestMsg', 20, 1), + (19475, 61608, 61608, 'OP_PlayerHouseAccessUpdateMsg', 150, 1), + (19476, 61608, 61608, 'OP_PlayerHouseBaseScreenMsg', 148, 1), + (19477, 61608, 61608, 'OP_PlayerHouseCloseUIMsg', 152, 1), + (19478, 61608, 61608, 'OP_PlayerHouseDisplayStatusMsg', 151, 1), + (19479, 61608, 61608, 'OP_PlayerHousePurchaseScreenMsg', 149, 1), + (19480, 61608, 61608, 'OP_PlayerMadeInstances', 143, 1), + (19481, 61608, 61608, 'OP_PlayerMadeInstancesScreen', 142, 1), + (19482, 61608, 61608, 'OP_PlayerPollAnswer', 564, 1), + (19483, 61608, 61608, 'OP_PlayerPollPopup', 563, 1), + (19484, 61608, 61608, 'OP_PlayLon', 516, 1), + (19485, 61608, 61608, 'OP_PointOfInterest', 748, 1), + (19486, 61608, 61608, 'OP_PointOfInterest2', 749, 1), + (19487, 61608, 61608, 'OP_PopulateSkillMapsMsg', 218, 1), + (19488, 61608, 61608, 'OP_PositionBoatTransportMsg', 255, 1), + (19489, 61608, 61608, 'OP_PositionMoveableObject', 165, 1), + (19490, 61608, 61608, 'OP_PostPossessionMsg', 459, 1), + (19491, 61608, 61608, 'OP_PredictionUpdateMsg', 39, 1), + (19492, 61608, 61608, 'OP_PrePossessionMsg', 458, 1), + (19493, 61608, 61608, 'OP_PromoFlagsDetailsMsg', 378, 1), + (19494, 61608, 61608, 'OP_PublishHouse', 141, 1), + (19495, 61608, 61608, 'OP_PurchaseConsignmentLoreCheckRe', 412, 1), + (19496, 61608, 61608, 'OP_PurchaseConsignmentRequestMsg', 131, 1), + (19497, 61608, 61608, 'OP_QueAllBgSolo', 571, 1), + (19498, 61608, 61608, 'OP_QuestionnaireMsg', 264, 1), + (19499, 61608, 61608, 'OP_QuestJournalInspectMsg', 116, 1), + (19500, 61608, 61608, 'OP_QuestJournalOpenMsg', 115, 1), + (19501, 61608, 61608, 'OP_QuestJournalSetVisibleMsg', 117, 1), + (19502, 61608, 61608, 'OP_QuestJournalWaypointMsg', 118, 1), + (19503, 61608, 61608, 'OP_QuestReward', 324, 1), + (19504, 61608, 61608, 'OP_QuickbarInitMsg', 260, 1), + (19505, 61608, 61608, 'OP_QuickbarUpdateMsg', 261, 1), + (19506, 61608, 61608, 'OP_RaceRestrictionMsg', 444, 1), + (19507, 61608, 61608, 'OP_ReadBookPageMsg', 199, 1), + (19508, 61608, 61608, 'OP_ReadyForTakeOffMsg', 195, 1), + (19509, 61608, 61608, 'OP_ReadyToZoneMsg', 86, 1), + (19510, 61608, 61608, 'OP_RecipeBook', 545, 1), + (19511, 61608, 61608, 'OP_RecipeDetailsMsg', 74, 1), + (19512, 61608, 61608, 'OP_RecipeList', 760, 1), + (19513, 61608, 61608, 'OP_RecipeListUnknown', 600, 1), + (19514, 61608, 61608, 'OP_RelinquishHouseMsg', 156, 1), + (19515, 61608, 61608, 'OP_ReloadLocalizedTxtMsg', 359, 1), + (19516, 61608, 61608, 'OP_RemoteCmdMsg', 44, 1), + (19517, 61608, 61608, 'OP_RemoveClientFromGroupMsg', 87, 1), + (19518, 61608, 61608, 'OP_RemoveConcentrationMsg', 114, 1), + (19519, 61608, 61608, 'OP_RemoveGroupFromGroupMsg', 88, 1), + (19520, 61608, 61608, 'OP_RemoveSpellEffectMsg', 113, 1), + (19521, 61608, 61608, 'OP_RenameGuildMsg', 286, 1), + (19522, 61608, 61608, 'OP_ReplaceableSubMeshesMsg', 168, 1), + (19523, 61608, 61608, 'OP_ReportMsg', 384, 1), + (19524, 61608, 61608, 'OP_RequestCampMsg', 52, 1), + (19525, 61608, 61608, 'OP_RequestGuildBankEventDetailsMs', 284, 1), + (19526, 61608, 61608, 'OP_RequestGuildEventDetailsMsg', 275, 1), + (19527, 61608, 61608, 'OP_RequestGuildInfoMsg', 277, 1), + (19528, 61608, 61608, 'OP_RequestGuildMembershipMsg', 360, 1), + (19529, 61608, 61608, 'OP_RequestHelpRepathMsg', 209, 1), + (19530, 61608, 61608, 'OP_RequestRecipeDetailsMsg', 73, 1), + (19531, 61608, 61608, 'OP_RequestTargetLocMsg', 210, 1), + (19532, 61608, 61608, 'OP_Research', 761, 1), + (19533, 61608, 61608, 'OP_ResendWorldChannelsMsg', 448, 1), + (19534, 61608, 61608, 'OP_ReskinCharacterRequestMsg', 15, 1), + (19535, 61608, 61608, 'OP_RestartZoneMsg', 417, 1), + (19536, 61608, 61608, 'OP_RewardPackMsg', 285, 1), + (19537, 61608, 61608, 'OP_SatMsg', 192, 1), + (19538, 61608, 61608, 'OP_SavageBarInitMsg', 587, 1), + (19539, 61608, 61608, 'OP_SelectZoneTeleporterDestinatio', 358, 1), + (19540, 61608, 61608, 'OP_SendLatestRequestMsg', 99, 1), + (19541, 61608, 61608, 'OP_ServerPlayCharacterReplyMsg', 26, 1), + (19542, 61608, 61608, 'OP_ServerPlayCharacterRequestMsg', 25, 1), + (19543, 61608, 61608, 'OP_SetInstanceDisplayNameMsg', 445, 1), + (19544, 61608, 61608, 'OP_SetRemoteCmdsMsg', 43, 1), + (19545, 61608, 61608, 'OP_SetSocialMsg', 101, 1), + (19546, 61608, 61608, 'OP_ShaderCustomizationMsg', 167, 1), + (19547, 61608, 61608, 'OP_ShowCreateFromRecipeUIMsg', 222, 1), + (19548, 61608, 61608, 'OP_ShowIllusionsMsg', 196, 1), + (19549, 61608, 61608, 'OP_ShowItemCreationProcessUIMsg', 226, 1), + (19550, 61608, 61608, 'OP_ShowRecipeBookMsg', 229, 1), + (19551, 61608, 61608, 'OP_ShowZoneTeleporterDestinations', 357, 1), + (19552, 61608, 61608, 'OP_SitMsg', 190, 1), + (19553, 61608, 61608, 'OP_SkillInfoRequest', 519, 1), + (19554, 61608, 61608, 'OP_SkillInfoResponse', 520, 1), + (19555, 61608, 61608, 'OP_SOEAllAccess', 625, 1), + (19556, 61608, 61608, 'OP_SpellGainedMsg', 266, 1), + (19557, 61608, 61608, 'OP_StandMsg', 191, 1), + (19558, 61608, 61608, 'OP_StoodMsg', 193, 1), + (19559, 61608, 61608, 'OP_StopItemCreationMsg', 225, 1), + (19560, 61608, 61608, 'OP_StoppedLootingMsg', 189, 1), + (19561, 61608, 61608, 'OP_StopTrackingMsg', 396, 1), + (19562, 61608, 61608, 'OP_SubmitCharCust', 569, 1), + (19563, 61608, 61608, 'OP_SupplyDepot', 758, 1), + (19564, 61608, 61608, 'OP_SysClient', 221, 1), + (19565, 61608, 61608, 'OP_TeleportWithinZoneMsg', 81, 1), + (19566, 61608, 61608, 'OP_TeleportWithinZoneNoReloadMsg', 82, 1), + (19567, 61608, 61608, 'OP_TintWidgetsMsg', 173, 1), + (19568, 61608, 61608, 'OP_TitleUpdateMsg', 389, 1), + (19569, 61608, 61608, 'OP_TrackingUpdateMsg', 394, 1), + (19570, 61608, 61608, 'OP_TradeskillList', 727, 1), + (19571, 61608, 61608, 'OP_TraitsList', 750, 1), + (19572, 61608, 61608, 'OP_UIEvent', 532, 1), + (19573, 61608, 61608, 'OP_UIResetMsg', 177, 1), + (19574, 61608, 61608, 'OP_UISettingsResponseMsg', 176, 1), + (19575, 61608, 61608, 'OP_Unknown', 783, 1), + (19576, 61608, 61608, 'OP_UnknownNpcMsg', 377, 1), + (19577, 61608, 61608, 'OP_UpdateActivePublicZonesMsg', 376, 1), + (19578, 61608, 61608, 'OP_UpdateCharacterSheetMsg', 65, 1), + (19579, 61608, 61608, 'OP_UpdateClientPredFlagsMsg', 249, 1), + (19580, 61608, 61608, 'OP_UpdateDebugRadiiMsg', 383, 1), + (19581, 61608, 61608, 'OP_UpdateGroupMemberDataMsg', 393, 1), + (19582, 61608, 61608, 'OP_UpdateHouseAccessDataMsg', 147, 1), + (19583, 61608, 61608, 'OP_UpdateHouseDataMsg', 146, 1), + (19584, 61608, 61608, 'OP_UpdateInventoryMsg', 70, 1), + (19585, 61608, 61608, 'OP_UpdateItemCreationProcessUIMsg', 227, 1), + (19586, 61608, 61608, 'OP_UpdateMotdMsg', 211, 1), + (19587, 61608, 61608, 'OP_UpdateOpportunityMsg', 77, 1), + (19588, 61608, 61608, 'OP_UpdatePositionMsg', 41, 1), + (19589, 61608, 61608, 'OP_UpdateRaidMsg', 385, 1), + (19590, 61608, 61608, 'OP_UpdateRecipeBookMsg', 72, 1), + (19591, 61608, 61608, 'OP_UpdateSkillBookMsg', 75, 1), + (19592, 61608, 61608, 'OP_UpdateSkillsMsg', 76, 1), + (19593, 61608, 61608, 'OP_UpdateSpellBookMsg', 68, 1), + (19594, 61608, 61608, 'OP_UpdateTargetLocMsg', 64, 1), + (19595, 61608, 61608, 'OP_UpdateTargetMsg', 63, 1), + (19596, 61608, 61608, 'OP_UpdateTitleCmd', 499, 1), + (19597, 61608, 61608, 'OP_UseAdornment', 738, 1), + (19598, 61608, 61608, 'OP_VideoUploaded', 586, 1), + (19599, 61608, 61608, 'OP_VoiceChatChannel', 525, 1), + (19600, 61608, 61608, 'OP_VoiceChatServer', 754, 1), + (19601, 61608, 61608, 'OP_WaypointReplyMsg', 353, 1), + (19602, 61608, 61608, 'OP_WaypointRequestMsg', 352, 1), + (19603, 61608, 61608, 'OP_WaypointSelectMsg', 354, 1), + (19604, 61608, 61608, 'OP_WaypointUpdateMsg', 355, 1), + (19605, 61608, 61608, 'OP_Weakness', 590, 1), + (19606, 61608, 61608, 'OP_WhoQueryReplyMsg', 56, 1), + (19607, 61608, 61608, 'OP_WhoQueryRequestMsg', 55, 1), + (19608, 61608, 61608, 'OP_WorldDataChangeMsg', 415, 1), + (19609, 61608, 61608, 'OP_WorldDataUpdateMsg', 240, 1), + (19610, 61608, 61608, 'OP_WorldListMsg', 8, 1), + (19611, 61608, 61608, 'OP_WorldPingMsg', 404, 1), + (19612, 61608, 61608, 'OP_WorldShutdownUpdateMsg', 408, 1), + (19613, 61608, 61608, 'OP_WorldStatusChangeMsg', 6, 1), + (19614, 61608, 61608, 'OP_WorldTravelAvail', 579, 1), + (19615, 61608, 61608, 'OP_WSAcctLockStatusMsg', 208, 1), + (19616, 61608, 61608, 'OP_WSCreateCharacterReplyMsg', 14, 1), + (19617, 61608, 61608, 'OP_WSCreateCharacterRequestMsg', 13, 1), + (19618, 61608, 61608, 'OP_WSLoginRequestMsg', 2, 1), + (19619, 61608, 61608, 'OP_WSServerHideMsg', 370, 1), + (19620, 61608, 61608, 'OP_WSServerLockMsg', 368, 1), + (19621, 61608, 61608, 'OP_WSStatusReplyMsg', 5, 1), + (19622, 61608, 61608, 'OP_ZoneBgInstanceList', 575, 1), + (19623, 61608, 61608, 'OP_ZoneInfoMsg', 35, 1), + (19624, 61608, 61608, 'OP_ZoneInstanceCreateReplyMsg', 32, 1), + (19625, 61608, 61608, 'OP_ZoneInstanceDestroyedMsg', 33, 1), + (19626, 61608, 61608, 'OP_ZoneMOTDMsg', 47, 1), + (19627, 61608, 61608, 'OP_ZonesStatusMsg', 105, 1), + (19628, 61608, 61608, 'OP_ZonesStatusRequestMsg', 104, 1), + (19629, 61608, 61608, 'OP_ZoneToFriendReplyMsg', 288, 1), + (19630, 61608, 61608, 'OP_ZoneToFriendRequestMsg', 287, 1), + (19631, 61608, 61608, 'OP_EarlyLandingRequestMsg', 491, 1), + (19632, 63119, 63119, 'OP_LoginRequestMsg', 0, 1), + (19633, 63119, 63119, 'OP_LoginByNumRequestMsg', 1, 1), + (19634, 63119, 63119, 'OP_WSLoginRequestMsg', 2, 1), + (19635, 63119, 63119, 'OP_ESLoginRequestMsg', 3, 1), + (19636, 63119, 63119, 'OP_LoginReplyMsg', 4, 1), + (19637, 63119, 63119, 'OP_WSStatusReplyMsg', 5, 1), + (19638, 63119, 63119, 'OP_WorldStatusChangeMsg', 6, 1), + (19639, 63119, 63119, 'OP_AllWSDescRequestMsg', 7, 1), + (19640, 63119, 63119, 'OP_WorldListMsg', 8, 1), + (19641, 63119, 63119, 'OP_AllCharactersDescRequestMsg', 9, 1), + (19642, 63119, 63119, 'OP_AllCharactersDescReplyMsg', 10, 1), + (19643, 63119, 63119, 'OP_CreateCharacterRequestMsg', 11, 1), + (19644, 63119, 63119, 'OP_CreateCharacterReplyMsg', 12, 1), + (19645, 63119, 63119, 'OP_WSCreateCharacterRequestMsg', 13, 1), + (19646, 63119, 63119, 'OP_WSCreateCharacterReplyMsg', 14, 1), + (19647, 63119, 63119, 'OP_ReskinCharacterRequestMsg', 15, 1), + (19648, 63119, 63119, 'OP_DeleteCharacterRequestMsg', 18, 1), + (19649, 63119, 63119, 'OP_DeleteCharacterReplyMsg', 19, 1), + (19650, 63119, 63119, 'OP_PlayCharacterRequestMsg', 20, 1), + (19651, 63119, 63119, 'OP_PlayCharacterReplyMsg', 21, 1), + (19652, 63119, 63119, 'OP_ExpectClientAsCharacterReplyMs', 24, 1), + (19653, 63119, 63119, 'OP_ServerPlayCharacterRequestMsg', 25, 1), + (19654, 63119, 63119, 'OP_ServerPlayCharacterReplyMsg', 26, 1), + (19655, 63119, 63119, 'OP_ESInitMsg', 27, 1), + (19656, 63119, 63119, 'OP_ESReadyForClientsMsg', 28, 1), + (19657, 63119, 63119, 'OP_CreateZoneInstanceMsg', 31, 1), + (19658, 63119, 63119, 'OP_ZoneInstanceCreateReplyMsg', 32, 1), + (19659, 63119, 63119, 'OP_ZoneInstanceDestroyedMsg', 33, 1), + (19660, 63119, 63119, 'OP_ExpectClientAsCharacterRequest', 34, 1), + (19661, 63119, 63119, 'OP_ZoneInfoMsg', 35, 1), + (19662, 63119, 63119, 'OP_DoneLoadingZoneResourcesMsg', 36, 1), + (19663, 63119, 63119, 'OP_DoneSendingInitialEntitiesMsg', 37, 1), + (19664, 63119, 63119, 'OP_DoneLoadingEntityResourcesMsg', 38, 1), + (19665, 63119, 63119, 'OP_PredictionUpdateMsg', 39, 1), + (19666, 63119, 63119, 'OP_UpdatePositionMsg', 41, 1), + (19667, 63119, 63119, 'OP_SetRemoteCmdsMsg', 43, 1), + (19668, 63119, 63119, 'OP_RemoteCmdMsg', 44, 1), + (19669, 63119, 63119, 'OP_GameWorldTimeMsg', 45, 1), + (19670, 63119, 63119, 'OP_MOTDMsg', 46, 1), + (19671, 63119, 63119, 'OP_ZoneMOTDMsg', 47, 1), + (19672, 63119, 63119, 'OP_AvatarCreatedMsg', 48, 1), + (19673, 63119, 63119, 'OP_AvatarDestroyedMsg', 49, 1), + (19674, 63119, 63119, 'OP_RequestCampMsg', 52, 1), + (19675, 63119, 63119, 'OP_CampStartedMsg', 53, 1), + (19676, 63119, 63119, 'OP_CampAbortedMsg', 54, 1), + (19677, 63119, 63119, 'OP_WhoQueryRequestMsg', 55, 1), + (19678, 63119, 63119, 'OP_WhoQueryReplyMsg', 56, 1), + (19679, 63119, 63119, 'OP_MonitorReplyMsg', 57, 1), + (19680, 63119, 63119, 'OP_MonitorCharacterListMsg', 58, 1), + (19681, 63119, 63119, 'OP_MonitorCharacterListRequestMsg', 59, 1), + (19682, 63119, 63119, 'OP_ClientCmdMsg', 60, 1), + (19683, 63119, 63119, 'OP_DispatchESMsg', 61, 1), + (19684, 63119, 63119, 'OP_DispatchClientCmdMsg', 62, 1), + (19685, 63119, 63119, 'OP_UpdateTargetMsg', 63, 1), + (19686, 63119, 63119, 'OP_UpdateTargetLocMsg', 64, 1), + (19687, 63119, 63119, 'OP_UpdateCharacterSheetMsg', 65, 1), + (19688, 63119, 63119, 'OP_CharacterPet', 66, 1), + (19689, 63119, 63119, 'OP_CharacterMerc', 67, 1), + (19690, 63119, 63119, 'OP_UpdateSpellBookMsg', 68, 1), + (19691, 63119, 63119, 'OP_UpdateInventoryMsg', 70, 1), + (19692, 63119, 63119, 'OP_AfterInvSpellUpdate', 71, 1), + (19693, 63119, 63119, 'OP_UpdateRecipeBookMsg', 72, 1), + (19694, 63119, 63119, 'OP_RequestRecipeDetailsMsg', 73, 1), + (19695, 63119, 63119, 'OP_RecipeDetailsMsg', 74, 1), + (19696, 63119, 63119, 'OP_UpdateSkillBookMsg', 75, 1), + (19697, 63119, 63119, 'OP_UpdateSkillsMsg', 76, 1), + (19698, 63119, 63119, 'OP_UpdateOpportunityMsg', 77, 1), + (19699, 63119, 63119, 'OP_ChangeZoneMsg', 79, 1), + (19700, 63119, 63119, 'OP_ClientTeleportRequestMsg', 80, 1), + (19701, 63119, 63119, 'OP_TeleportWithinZoneMsg', 81, 1), + (19702, 63119, 63119, 'OP_TeleportWithinZoneNoReloadMsg', 82, 1), + (19703, 63119, 63119, 'OP_MigrateClientToZoneRequestMsg', 83, 1), + (19704, 63119, 63119, 'OP_MigrateClientToZoneReplyMsg', 84, 1), + (19705, 63119, 63119, 'OP_ReadyToZoneMsg', 86, 1), + (19706, 63119, 63119, 'OP_RemoveClientFromGroupMsg', 87, 1), + (19707, 63119, 63119, 'OP_RemoveGroupFromGroupMsg', 88, 1), + (19708, 63119, 63119, 'OP_MakeGroupLeaderMsg', 89, 1), + (19709, 63119, 63119, 'OP_GroupCreatedMsg', 90, 1), + (19710, 63119, 63119, 'OP_GroupDestroyedMsg', 91, 1), + (19711, 63119, 63119, 'OP_GroupMemberAddedMsg', 92, 1), + (19712, 63119, 63119, 'OP_GroupMemberRemovedMsg', 93, 1), + (19713, 63119, 63119, 'OP_GroupRemovedFromGroupMsg', 94, 1), + (19714, 63119, 63119, 'OP_GroupLeaderChangedMsg', 95, 1), + (19715, 63119, 63119, 'OP_GroupResendOOZDataMsg', 96, 1), + (19716, 63119, 63119, 'OP_GroupSettingsChangedMsg', 97, 1), + (19717, 63119, 63119, 'OP_OutOfZoneMemberDataMsg', 98, 1), + (19718, 63119, 63119, 'OP_SendLatestRequestMsg', 99, 1), + (19719, 63119, 63119, 'OP_ClearDataMsg', 100, 1), + (19720, 63119, 63119, 'OP_SetSocialMsg', 101, 1), + (19721, 63119, 63119, 'OP_ESStatusMsg', 102, 1), + (19722, 63119, 63119, 'OP_ESZoneInstanceStatusMsg', 103, 1), + (19723, 63119, 63119, 'OP_ZonesStatusRequestMsg', 104, 1), + (19724, 63119, 63119, 'OP_ZonesStatusMsg', 105, 1), + (19725, 63119, 63119, 'OP_ESWeatherRequestMsg', 106, 1), + (19726, 63119, 63119, 'OP_ESWeatherRequestEndMsg', 107, 1), + (19727, 63119, 63119, 'OP_DialogSelectMsg', 111, 1), + (19728, 63119, 63119, 'OP_DialogCloseMsg', 112, 1), + (19729, 63119, 63119, 'OP_RemoveSpellEffectMsg', 113, 1), + (19730, 63119, 63119, 'OP_RemoveConcentrationMsg', 114, 1), + (19731, 63119, 63119, 'OP_QuestJournalOpenMsg', 115, 1), + (19732, 63119, 63119, 'OP_QuestJournalInspectMsg', 116, 1), + (19733, 63119, 63119, 'OP_QuestJournalSetVisibleMsg', 117, 1), + (19734, 63119, 63119, 'OP_QuestJournalWaypointMsg', 118, 1), + (19735, 63119, 63119, 'OP_CreateGuildRequestMsg', 121, 1), + (19736, 63119, 63119, 'OP_CreateGuildReplyMsg', 123, 1), + (19737, 63119, 63119, 'OP_GuildsayMsg', 124, 1), + (19738, 63119, 63119, 'OP_FellowshipExpMsg', 125, 1), + (19739, 63119, 63119, 'OP_DeleteGuildMsg', 126, 1), + (19740, 63119, 63119, 'OP_GuildUpdateMsg', 127, 1), + (19741, 63119, 63119, 'OP_ConsignmentCloseStoreMsg', 128, 1), + (19742, 63119, 63119, 'OP_ConsignItemRequestMsg', 129, 1), + (19743, 63119, 63119, 'OP_ConsignItemResponseMsg', 130, 1), + (19744, 63119, 63119, 'OP_PurchaseConsignmentRequestMsg', 131, 1), + (19745, 63119, 63119, 'OP_LikeOption', 139, 1), + (19746, 63119, 63119, 'OP_PublishHouse', 141, 1), + (19747, 63119, 63119, 'OP_PlayerMadeInstancesScreen', 142, 1), + (19748, 63119, 63119, 'OP_PlayerMadeInstances', 143, 1), + (19749, 63119, 63119, 'OP_HouseDeletedRemotelyMsg', 145, 1), + (19750, 63119, 63119, 'OP_UpdateHouseDataMsg', 146, 1), + (19751, 63119, 63119, 'OP_UpdateHouseAccessDataMsg', 147, 1), + (19752, 63119, 63119, 'OP_PlayerHouseBaseScreenMsg', 148, 1), + (19753, 63119, 63119, 'OP_PlayerHousePurchaseScreenMsg', 149, 1), + (19754, 63119, 63119, 'OP_PlayerHouseAccessUpdateMsg', 150, 1), + (19755, 63119, 63119, 'OP_PlayerHouseDisplayStatusMsg', 151, 1), + (19756, 63119, 63119, 'OP_PlayerHouseCloseUIMsg', 152, 1), + (19757, 63119, 63119, 'OP_BuyPlayerHouseMsg', 153, 1), + (19758, 63119, 63119, 'OP_BuyPlayerHouseTintMsg', 154, 1), + (19759, 63119, 63119, 'OP_CollectAllHouseItemsMsg', 155, 1), + (19760, 63119, 63119, 'OP_RelinquishHouseMsg', 156, 1), + (19761, 63119, 63119, 'OP_EnterHouseMsg', 157, 1), + (19762, 63119, 63119, 'OP_ExitHouseMsg', 158, 1), + (19763, 63119, 63119, 'OP_HouseDefaultAccessSetMsg', 159, 1), + (19764, 63119, 63119, 'OP_HouseAccessSetMsg', 160, 1), + (19765, 63119, 63119, 'OP_HouseAccessRemoveMsg', 161, 1), + (19766, 63119, 63119, 'OP_PayHouseUpkeepMsg', 162, 1), + (19767, 63119, 63119, 'OP_MoveableObjectPlacementCriteri', 163, 1), + (19768, 63119, 63119, 'OP_EnterMoveObjectModeMsg', 164, 1), + (19769, 63119, 63119, 'OP_PositionMoveableObject', 165, 1), + (19770, 63119, 63119, 'OP_CancelMoveObjectModeMsg', 166, 1), + (19771, 63119, 63119, 'OP_ShaderCustomizationMsg', 167, 1), + (19772, 63119, 63119, 'OP_ReplaceableSubMeshesMsg', 168, 1), + (19773, 63119, 63119, 'OP_HouseCustomizationScreenMsg', 169, 1), + (19774, 63119, 63119, 'OP_CustomizationPurchaseRequestMs', 170, 1), + (19775, 63119, 63119, 'OP_CustomizationSetRequestMsg', 171, 1), + (19776, 63119, 63119, 'OP_CustomizationReplyMsg', 172, 1), + (19777, 63119, 63119, 'OP_TintWidgetsMsg', 173, 1), + (19778, 63119, 63119, 'OP_ExamineConsignmentRequestMsg', 174, 1), + (19779, 63119, 63119, 'OP_ExamineConsignmentResponseMsg', 175, 1), + (19780, 63119, 63119, 'OP_UISettingsResponseMsg', 176, 1), + (19781, 63119, 63119, 'OP_UIResetMsg', 177, 1), + (19782, 63119, 63119, 'OP_KeymapLoadMsg', 178, 1), + (19783, 63119, 63119, 'OP_KeymapNoneMsg', 179, 1), + (19784, 63119, 63119, 'OP_KeymapDataMsg', 180, 1), + (19785, 63119, 63119, 'OP_KeymapSaveMsg', 181, 1), + (19786, 63119, 63119, 'OP_DispatchSpellCmdMsg', 182, 1), + (19787, 63119, 63119, 'OP_EntityVerbsRequestMsg', 183, 1), + (19788, 63119, 63119, 'OP_EntityVerbsReplyMsg', 184, 1), + (19789, 63119, 63119, 'OP_EntityVerbsVerbMsg', 185, 1), + (19790, 63119, 63119, 'OP_ChatRelationshipUpdateMsg', 187, 1), + (19791, 63119, 63119, 'OP_LootItemsRequestMsg', 188, 1), + (19792, 63119, 63119, 'OP_StoppedLootingMsg', 189, 1), + (19793, 63119, 63119, 'OP_SitMsg', 190, 1), + (19794, 63119, 63119, 'OP_StandMsg', 191, 1), + (19795, 63119, 63119, 'OP_SatMsg', 192, 1), + (19796, 63119, 63119, 'OP_StoodMsg', 193, 1), + (19797, 63119, 63119, 'OP_ClearForTakeOffMsg', 194, 1), + (19798, 63119, 63119, 'OP_ReadyForTakeOffMsg', 195, 1), + (19799, 63119, 63119, 'OP_ShowIllusionsMsg', 196, 1), + (19800, 63119, 63119, 'OP_HideIllusionsMsg', 197, 1), + (19801, 63119, 63119, 'OP_ExamineItemRequestMsg', 198, 1), + (19802, 63119, 63119, 'OP_ReadBookPageMsg', 199, 1), + (19803, 63119, 63119, 'OP_DefaultGroupOptionsRequestMsg', 200, 1), + (19804, 63119, 63119, 'OP_DefaultGroupOptionsMsg', 201, 1), + (19805, 63119, 63119, 'OP_GroupOptionsMsg', 202, 1), + (19806, 63119, 63119, 'OP_DisplayGroupOptionsScreenMsg', 203, 1), + (19807, 63119, 63119, 'OP_PetOptions', 204, 1), + (19808, 63119, 63119, 'OP_DisplayInnVisitScreenMsg', 205, 1), + (19809, 63119, 63119, 'OP_DumpSchedulerMsg', 206, 1), + (19810, 63119, 63119, 'OP_LSCheckAcctLockMsg', 207, 1), + (19811, 63119, 63119, 'OP_WSAcctLockStatusMsg', 208, 1), + (19812, 63119, 63119, 'OP_RequestHelpRepathMsg', 209, 1), + (19813, 63119, 63119, 'OP_RequestTargetLocMsg', 210, 1), + (19814, 63119, 63119, 'OP_UpdateMotdMsg', 211, 1), + (19815, 63119, 63119, 'OP_DestUpdateReq', 213, 1), + (19816, 63119, 63119, 'OP_PerformPlayerKnockbackMsg', 216, 1), + (19817, 63119, 63119, 'OP_PerformCameraShakeMsg', 217, 1), + (19818, 63119, 63119, 'OP_PopulateSkillMapsMsg', 218, 1), + (19819, 63119, 63119, 'OP_CancelledFeignMsg', 219, 1), + (19820, 63119, 63119, 'OP_SysClient', 221, 1), + (19821, 63119, 63119, 'OP_ShowCreateFromRecipeUIMsg', 222, 1), + (19822, 63119, 63119, 'OP_CancelCreateFromRecipeMsg', 223, 1), + (19823, 63119, 63119, 'OP_BeginItemCreationMsg', 224, 1), + (19824, 63119, 63119, 'OP_StopItemCreationMsg', 225, 1), + (19825, 63119, 63119, 'OP_ShowItemCreationProcessUIMsg', 226, 1), + (19826, 63119, 63119, 'OP_UpdateItemCreationProcessUIMsg', 227, 1), + (19827, 63119, 63119, 'OP_DisplayTSEventReactionMsg', 228, 1), + (19828, 63119, 63119, 'OP_ShowRecipeBookMsg', 229, 1), + (19829, 63119, 63119, 'OP_KnowledgebaseRequestMsg', 230, 1), + (19830, 63119, 63119, 'OP_KnowledgebaseResponseMsg', 231, 1), + (19831, 63119, 63119, 'OP_CSTicketHeaderRequestMsg', 232, 1), + (19832, 63119, 63119, 'OP_CSTicketInfoMsg', 233, 1), + (19833, 63119, 63119, 'OP_CSTicketCommentRequestMsg', 234, 1), + (19834, 63119, 63119, 'OP_CSTicketCommentResponseMsg', 235, 1), + (19835, 63119, 63119, 'OP_CSTicketCreateMsg', 236, 1), + (19836, 63119, 63119, 'OP_CSTicketAddCommentMsg', 237, 1), + (19837, 63119, 63119, 'OP_CSTicketDeleteMsg', 238, 1), + (19838, 63119, 63119, 'OP_CSTicketChangeNotificationMsg', 239, 1), + (19839, 63119, 63119, 'OP_WorldDataUpdateMsg', 240, 1), + (19840, 63119, 63119, 'OP_KnownLanguagesMsg', 242, 1), + (19841, 63119, 63119, 'OP_LsRequestClientCrashLogMsg', 243, 1), + (19842, 63119, 63119, 'OP_LsClientBaselogReplyMsg', 244, 1), + (19843, 63119, 63119, 'OP_LsClientCrashlogReplyMsg', 245, 1), + (19844, 63119, 63119, 'OP_LsClientAlertlogReplyMsg', 246, 1), + (19845, 63119, 63119, 'OP_LsClientVerifylogReplyMsg', 247, 1), + (19846, 63119, 63119, 'OP_ClientTeleportToLocationMsg', 248, 1), + (19847, 63119, 63119, 'OP_UpdateClientPredFlagsMsg', 249, 1), + (19848, 63119, 63119, 'OP_ChangeServerControlFlagMsg', 250, 1), + (19849, 63119, 63119, 'OP_CSToolsRequestMsg', 251, 1), + (19850, 63119, 63119, 'OP_CSToolsResponseMsg', 252, 1), + (19851, 63119, 63119, 'OP_AddSocialStructureStandingMsg', 253, 1), + (19852, 63119, 63119, 'OP_CreateBoatTransportsMsg', 254, 1), + (19853, 63119, 63119, 'OP_PositionBoatTransportMsg', 255, 1), + (19854, 63119, 63119, 'OP_MigrateBoatTransportMsg', 256, 1), + (19855, 63119, 63119, 'OP_MigrateBoatTransportReplyMsg', 257, 1), + (19856, 63119, 63119, 'OP_DisplayDebugNLLPointsMsg', 258, 1), + (19857, 63119, 63119, 'OP_ExamineInfoRequestMsg', 259, 1), + (19858, 63119, 63119, 'OP_QuickbarInitMsg', 260, 1), + (19859, 63119, 63119, 'OP_QuickbarUpdateMsg', 261, 1), + (19860, 63119, 63119, 'OP_MacroInitMsg', 262, 1), + (19861, 63119, 63119, 'OP_MacroUpdateMsg', 263, 1), + (19862, 63119, 63119, 'OP_QuestionnaireMsg', 264, 1), + (19863, 63119, 63119, 'OP_LevelChangedMsg', 265, 1), + (19864, 63119, 63119, 'OP_SpellGainedMsg', 266, 1), + (19865, 63119, 63119, 'OP_EncounterBrokenMsg', 267, 1), + (19866, 63119, 63119, 'OP_OnscreenMsgMsg', 268, 1), + (19867, 63119, 63119, 'OP_DisplayWarningMsg', 269, 1), + (19868, 63119, 63119, 'OP_ModifyGuildMsg', 270, 1), + (19869, 63119, 63119, 'OP_GuildEventMsg', 271, 1), + (19870, 63119, 63119, 'OP_GuildEventAddMsg', 272, 1), + (19871, 63119, 63119, 'OP_GuildEventActionMsg', 273, 1), + (19872, 63119, 63119, 'OP_GuildEventListMsg', 274, 1), + (19873, 63119, 63119, 'OP_RequestGuildEventDetailsMsg', 275, 1), + (19874, 63119, 63119, 'OP_GuildEventDetailsMsg', 276, 1), + (19875, 63119, 63119, 'OP_RequestGuildInfoMsg', 277, 1), + (19876, 63119, 63119, 'OP_GuildBankActionMsg', 278, 1), + (19877, 63119, 63119, 'OP_GuildBankActionResponseMsg', 279, 1), + (19878, 63119, 63119, 'OP_GuildBankItemDetailsRequestMsg', 280, 1), + (19879, 63119, 63119, 'OP_GuildBankItemDetailsResponseMs', 281, 1), + (19880, 63119, 63119, 'OP_GuildBankUpdateMsg', 282, 1), + (19881, 63119, 63119, 'OP_GuildBankEventListMsg', 283, 1), + (19882, 63119, 63119, 'OP_RequestGuildBankEventDetailsMs', 284, 1), + (19883, 63119, 63119, 'OP_RewardPackMsg', 285, 1), + (19884, 63119, 63119, 'OP_RenameGuildMsg', 286, 1), + (19885, 63119, 63119, 'OP_ZoneToFriendRequestMsg', 287, 1), + (19886, 63119, 63119, 'OP_ZoneToFriendReplyMsg', 288, 1), + (19887, 63119, 63119, 'OP_ChatCreateChannelMsg', 289, 1), + (19888, 63119, 63119, 'OP_ChatJoinChannelMsg', 290, 1), + (19889, 63119, 63119, 'OP_ChatWhoChannelMsg', 291, 1), + (19890, 63119, 63119, 'OP_ChatLeaveChannelMsg', 292, 1), + (19891, 63119, 63119, 'OP_ChatTellChannelMsg', 293, 1), + (19892, 63119, 63119, 'OP_ChatTellUserMsg', 294, 1), + (19893, 63119, 63119, 'OP_ChatToggleFriendMsg', 295, 1), + (19894, 63119, 63119, 'OP_BrokerAddBag', 296, 1), + (19895, 63119, 63119, 'OP_BrokerRemoveBag', 297, 1), + (19896, 63119, 63119, 'OP_ChatToggleIgnoreMsg', 298, 1), + (19897, 63119, 63119, 'OP_ChatSendFriendsMsg', 299, 1), + (19898, 63119, 63119, 'OP_ChatSendIgnoresMsg', 300, 1), + (19899, 63119, 63119, 'OP_QuestReward', 324, 1), + (19900, 63119, 63119, 'OP_ChatFiltersMsg', 338, 1), + (19901, 63119, 63119, 'OP_MailGetMessageMsg', 342, 1), + (19902, 63119, 63119, 'OP_MailSendMessageMsg', 343, 1), + (19903, 63119, 63119, 'OP_MailDeleteMessageMsg', 344, 1), + (19904, 63119, 63119, 'OP_MailGetHeadersReplyMsg', 345, 1), + (19905, 63119, 63119, 'OP_MailGetMessageReplyMsg', 346, 1), + (19906, 63119, 63119, 'OP_MailSendMessageReplyMsg', 347, 1), + (19907, 63119, 63119, 'OP_MailCommitSendMessageMsg', 348, 1), + (19908, 63119, 63119, 'OP_MailSendSystemMessageMsg', 349, 1), + (19909, 63119, 63119, 'OP_MailRemoveAttachFromMailMsg', 350, 1), + (19910, 63119, 63119, 'OP_WaypointRequestMsg', 352, 1), + (19911, 63119, 63119, 'OP_WaypointReplyMsg', 353, 1), + (19912, 63119, 63119, 'OP_WaypointSelectMsg', 354, 1), + (19913, 63119, 63119, 'OP_WaypointUpdateMsg', 355, 1), + (19914, 63119, 63119, 'OP_CharNameChangedMsg', 356, 1), + (19915, 63119, 63119, 'OP_ShowZoneTeleporterDestinations', 357, 1), + (19916, 63119, 63119, 'OP_SelectZoneTeleporterDestinatio', 358, 1), + (19917, 63119, 63119, 'OP_ReloadLocalizedTxtMsg', 359, 1), + (19918, 63119, 63119, 'OP_RequestGuildMembershipMsg', 360, 1), + (19919, 63119, 63119, 'OP_GuildMembershipResponseMsg', 361, 1), + (19920, 63119, 63119, 'OP_LeaveGuildNotifyMsg', 362, 1), + (19921, 63119, 63119, 'OP_JoinGuildNotifyMsg', 363, 1), + (19922, 63119, 63119, 'OP_AvatarUpdateMsg', 364, 1), + (19923, 63119, 63119, 'OP_BioUpdateMsg', 366, 1), + (19924, 63119, 63119, 'OP_InspectPlayerMsg', 367, 1), + (19925, 63119, 63119, 'OP_WSServerLockMsg', 368, 1), + (19926, 63119, 63119, 'OP_LSServerLockMsg', 369, 1), + (19927, 63119, 63119, 'OP_WSServerHideMsg', 370, 1), + (19928, 63119, 63119, 'OP_CsCategoryRequestMsg', 371, 1), + (19929, 63119, 63119, 'OP_CsCategoryResponseMsg', 372, 1), + (19930, 63119, 63119, 'OP_KnowledgeWindowSlotMappingMsg', 373, 1), + (19931, 63119, 63119, 'OP_AFKUpdateMsg', 374, 1), + (19932, 63119, 63119, 'OP_AnonUpdateMsg', 375, 1), + (19933, 63119, 63119, 'OP_UpdateActivePublicZonesMsg', 376, 1), + (19934, 63119, 63119, 'OP_UnknownNpcMsg', 377, 1), + (19935, 63119, 63119, 'OP_PromoFlagsDetailsMsg', 378, 1), + (19936, 63119, 63119, 'OP_ConsignViewCreateMsg', 379, 1), + (19937, 63119, 63119, 'OP_ConsignViewGetPageMsg', 380, 1), + (19938, 63119, 63119, 'OP_ConsignViewReleaseMsg', 381, 1), + (19939, 63119, 63119, 'OP_ConsignRemoveItemsMsg', 382, 1), + (19940, 63119, 63119, 'OP_UpdateDebugRadiiMsg', 383, 1), + (19941, 63119, 63119, 'OP_ReportMsg', 384, 1), + (19942, 63119, 63119, 'OP_UpdateRaidMsg', 385, 1), + (19943, 63119, 63119, 'OP_ConsignViewSortMsg', 387, 1), + (19944, 63119, 63119, 'OP_TitleUpdateMsg', 388, 1), + (19945, 63119, 63119, 'OP_ClientFellMsg', 389, 1), + (19946, 63119, 63119, 'OP_ClientInDeathRegionMsg', 390, 1), + (19947, 63119, 63119, 'OP_CampClientMsg', 391, 1), + (19948, 63119, 63119, 'OP_CSToolAccessResponseMsg', 392, 1), + (19949, 63119, 63119, 'OP_UpdateGroupMemberDataMsg', 392, 1), + (19950, 63119, 63119, 'OP_TrackingUpdateMsg', 393, 1), + (19951, 63119, 63119, 'OP_BeginTrackingMsg', 394, 1), + (19952, 63119, 63119, 'OP_StopTrackingMsg', 395, 1), + (19953, 63119, 63119, 'OP_GetAvatarAccessRequestForCSToo', 397, 1), + (19954, 63119, 63119, 'OP_AdvancementRequestMsg', 398, 1), + (19955, 63119, 63119, 'OP_MapFogDataInitMsg', 399, 1), + (19956, 63119, 63119, 'OP_MapFogDataUpdateMsg', 400, 1), + (19957, 63119, 63119, 'OP_CloseGroupInviteWindowMsg', 401, 1), + (19958, 63119, 63119, 'OP_WorldPingMsg', 404, 1), + (19959, 63119, 63119, 'OP_MoveLogUpdateMsg', 405, 1), + (19960, 63119, 63119, 'OP_OfferQuestMsg', 406, 1), + (19961, 63119, 63119, 'OP_WorldShutdownUpdateMsg', 408, 1), + (19962, 63119, 63119, 'OP_DisplayMailScreenMsg', 409, 1), + (19963, 63119, 63119, 'OP_ClientIdleBeginMsg', 410, 1), + (19964, 63119, 63119, 'OP_ClientIdleEndMsg', 411, 1), + (19965, 63119, 63119, 'OP_PurchaseConsignmentLoreCheckRe', 412, 1), + (19966, 63119, 63119, 'OP_NotifyApprenticeStoppedMentori', 413, 1), + (19967, 63119, 63119, 'OP_CorruptedClientMsg', 414, 1), + (19968, 63119, 63119, 'OP_WorldDataChangeMsg', 415, 1), + (19969, 63119, 63119, 'OP_MailEventNotificationMsg', 416, 1), + (19970, 63119, 63119, 'OP_RestartZoneMsg', 417, 1), + (19971, 63119, 63119, 'OP_FlightPathsMsg', 418, 1), + (19972, 63119, 63119, 'OP_CharacterLinkdeadMsg', 419, 1), + (19973, 63119, 63119, 'OP_CharTransferStartRequestMsg', 420, 1), + (19974, 63119, 63119, 'OP_CharTransferStartReplyMsg', 421, 1), + (19975, 63119, 63119, 'OP_CharTransferRequestMsg', 422, 1), + (19976, 63119, 63119, 'OP_CharTransferReplyMsg', 423, 1), + (19977, 63119, 63119, 'OP_CharTransferRollbackRequestMsg', 424, 1), + (19978, 63119, 63119, 'OP_CharTransferCommitRequestMsg', 425, 1), + (19979, 63119, 63119, 'OP_CharTransferRollbackReplyMsg', 426, 1), + (19980, 63119, 63119, 'OP_CharTransferCommitReplyMsg', 427, 1), + (19981, 63119, 63119, 'OP_GetCharacterSerializedRequestM', 428, 1), + (19982, 63119, 63119, 'OP_GetCharacterSerializedReplyMsg', 429, 1), + (19983, 63119, 63119, 'OP_CreateCharFromCBBRequestMsg', 430, 1), + (19984, 63119, 63119, 'OP_CreateCharFromCBBReplyMsg', 431, 1), + (19985, 63119, 63119, 'OP_HousingDataChangedMsg', 432, 1), + (19986, 63119, 63119, 'OP_HousingRestoreMsg', 433, 1), + (19987, 63119, 63119, 'OP_AuctionItem', 434, 1), + (19988, 63119, 63119, 'OP_AuctionItemReply', 435, 1), + (19989, 63119, 63119, 'OP_AuctionCoin', 436, 1), + (19990, 63119, 63119, 'OP_AuctionCoinReply', 437, 1), + (19991, 63119, 63119, 'OP_AuctionCharacter', 438, 1), + (19992, 63119, 63119, 'OP_AuctionCharacterReply', 439, 1), + (19993, 63119, 63119, 'OP_AuctionCommitMsg', 440, 1), + (19994, 63119, 63119, 'OP_AuctionAbortMsg', 441, 1), + (19995, 63119, 63119, 'OP_CharTransferValidateRequestMsg', 442, 1), + (19996, 63119, 63119, 'OP_CharTransferValidateReplyMsg', 443, 1), + (19997, 63119, 63119, 'OP_RaceRestrictionMsg', 444, 1), + (19998, 63119, 63119, 'OP_SetInstanceDisplayNameMsg', 445, 1), + (19999, 63119, 63119, 'OP_GetAuctionAssetIDMsg', 446, 1), + (20000, 63119, 63119, 'OP_GetAuctionAssetIDReplyMsg', 447, 1), + (20001, 63119, 63119, 'OP_ResendWorldChannelsMsg', 448, 1), + (20002, 63119, 63119, 'OP_DisplayExchangeScreenMsg', 449, 1), + (20003, 63119, 63119, 'OP_ArenaGameTypesMsg', 450, 1), + (20004, 63119, 63119, 'OP_AuditAuctionEventMsg', 451, 1), + (20005, 63119, 63119, 'OP_InviteRequestMsg', 452, 1), + (20006, 63119, 63119, 'OP_InviteResponseMsg', 453, 1), + (20007, 63119, 63119, 'OP_InviteTargetResponseMsg', 454, 1), + (20008, 63119, 63119, 'OP_InspectPlayerRequestMsg', 455, 1), + (20009, 63119, 63119, 'OP_DispatchMsg', 456, 1), + (20010, 63119, 63119, 'OP_DisplayEventMsg', 457, 1), + (20011, 63119, 63119, 'OP_PrePossessionMsg', 458, 1), + (20012, 63119, 63119, 'OP_PostPossessionMsg', 459, 1), + (20013, 63119, 63119, 'OP_ArenaCreate', 461, 1), + (20014, 63119, 63119, 'OP_ArenaList', 462, 1), + (20015, 63119, 63119, 'OP_ArenaWindow', 470, 1), + (20016, 63119, 63119, 'OP_HouseItemsList', 489, 1), + (20017, 63119, 63119, 'OP_CurrentPet', 490, 1), + (20018, 63119, 63119, 'OP_EarlyLandingRequestMsg', 491, 1), + (20019, 63119, 63119, 'OP_AdventureList', 493, 1), + (20020, 63119, 63119, 'OP_CancelSpellCast', 494, 1), + (20021, 63119, 63119, 'OP_ClearForLandingMsg', 496, 1), + (20022, 63119, 63119, 'OP_UpdateTitleCmd', 499, 1), + (20023, 63119, 63119, 'OP_AttackAllowed', 505, 1), + (20024, 63119, 63119, 'OP_AttackNotAllowed', 506, 1), + (20025, 63119, 63119, 'OP_BagOptions', 507, 1), + (20026, 63119, 63119, 'OP_LFGGroupSearch', 509, 1), + (20027, 63119, 63119, 'OP_CharacterHousingList', 512, 1), + (20028, 63119, 63119, 'OP_DressingRoom', 515, 1), + (20029, 63119, 63119, 'OP_PlayLon', 516, 1), + (20030, 63119, 63119, 'OP_SkillInfoRequest', 518, 1), + (20031, 63119, 63119, 'OP_SkillInfoResponse', 519, 1), + (20032, 63119, 63119, 'OP_LFGUpdateMsg', 522, 1), + (20033, 63119, 63119, 'OP_BadLanguageFilter', 523, 1), + (20034, 63119, 63119, 'OP_VoiceChatChannel', 524, 1), + (20035, 63119, 63119, 'OP_MapRequest', 525, 1), + (20036, 63119, 63119, 'OP_MarketFundsUpdate', 530, 1), + (20037, 63119, 63119, 'OP_UIEvent', 531, 1), + (20038, 63119, 63119, 'OP_MarketAddFundsRequest', 532, 1), + (20039, 63119, 63119, 'OP_MarketAddFundsReply', 533, 1), + (20040, 63119, 63119, 'OP_MarketPurchase', 535, 1), + (20041, 63119, 63119, 'OP_MarketPlacePrices', 536, 1), + (20042, 63119, 63119, 'OP_MarketPlaceItems', 543, 1), + (20043, 63119, 63119, 'OP_RecipeBook', 544, 1), + (20044, 63119, 63119, 'OP_CreateCharacterDungeon', 551, 1), + (20045, 63119, 63119, 'OP_DungeonMakerEnter', 552, 1), + (20046, 63119, 63119, 'OP_DungeonMakerItemRequest', 556, 1), + (20047, 63119, 63119, 'OP_CharacterCreatedDungeons', 557, 1), + (20048, 63119, 63119, 'OP_DungeonMakerToolboxList', 558, 1), + (20049, 63119, 63119, 'OP_DungeonMakerUnknown', 559, 1), + (20050, 63119, 63119, 'OP_DungeonMakerUnknown1', 560, 1), + (20051, 63119, 63119, 'OP_PlayerPollPopup', 562, 1), + (20052, 63119, 63119, 'OP_PlayerPollAnswer', 563, 1), + (20053, 63119, 63119, 'OP_MentorPopup', 564, 1), + (20054, 63119, 63119, 'OP_LoadWelcomeWindow', 566, 1), + (20055, 63119, 63119, 'OP_OpenCharCust', 568, 1), + (20056, 63119, 63119, 'OP_SubmitCharCust', 569, 1), + (20057, 63119, 63119, 'OP_QueAllBgSolo', 571, 1), + (20058, 63119, 63119, 'OP_ZoneBgInstanceList', 572, 1), + (20059, 63119, 63119, 'OP_WorldTravelAvail', 576, 1), + (20060, 63119, 63119, 'OP_Launchpad', 579, 1), + (20061, 63119, 63119, 'OP_PaperdollImage', 581, 1), + (20062, 63119, 63119, 'OP_LoadCalendarEvents', 582, 1), + (20063, 63119, 63119, 'OP_VideoUploaded', 583, 1), + (20064, 63119, 63119, 'OP_SavageBarInitMsg', 584, 1), + (20065, 63119, 63119, 'OP_PetOptionsResponse', 585, 1), + (20066, 63119, 63119, 'OP_DungeonMakerItemResponse', 586, 1), + (20067, 63119, 63119, 'OP_Weakness', 587, 1), + (20068, 63119, 63119, 'OP_CharacterMounts', 588, 1), + (20069, 63119, 63119, 'OP_RecipeListUnknown', 597, 1), + (20070, 63119, 63119, 'OP_DailyObjectives', 601, 1), + (20071, 63119, 63119, 'OP_DeityAbilityWindow', 621, 1), + (20072, 63119, 63119, 'OP_EqBetaCopyRequest', 637, 1), + (20073, 63119, 63119, 'OP_SOEAllAccess', 638, 1), + (20074, 63119, 63119, 'OP_EqHearChatCmd', 641, 1), + (20075, 63119, 63119, 'OP_EqDisplayTextCmd', 642, 1), + (20076, 63119, 63119, 'OP_EqCreateGhostCmd', 643, 1), + (20077, 63119, 63119, 'OP_EqCreateWidgetCmd', 644, 1), + (20078, 63119, 63119, 'OP_EqCreateSignWidgetCmd', 645, 1), + (20079, 63119, 63119, 'OP_EqDestroyGhostCmd', 646, 1), + (20080, 63119, 63119, 'OP_EqUpdateGhostCmd', 647, 1), + (20081, 63119, 63119, 'OP_EqSetControlGhostCmd', 648, 1), + (20082, 63119, 63119, 'OP_EqSetPOVGhostCmd', 649, 1), + (20083, 63119, 63119, 'OP_EqHearCombatCmd', 650, 1), + (20084, 63119, 63119, 'OP_EqHearSpellCastCmd', 651, 1), + (20085, 63119, 63119, 'OP_EQHearProcCmd', 652, 1), + (20086, 63119, 63119, 'OP_EQHearResEffectCmd', 653, 1), + (20087, 63119, 63119, 'OP_EqHearSpellInterruptCmd', 654, 1), + (20088, 63119, 63119, 'OP_EqHearSpellFizzleCmd', 655, 1), + (20089, 63119, 63119, 'OP_EqHearConsiderCmd', 656, 1), + (20090, 63119, 63119, 'OP_EqUpdateSubClassesCmd', 657, 1), + (20091, 63119, 63119, 'OP_EqCreateListBoxCmd', 658, 1), + (20092, 63119, 63119, 'OP_EqSetDebugPathPointsCmd', 659, 1), + (20093, 63119, 63119, 'OP_EqCannedEmoteCmd', 661, 1), + (20094, 63119, 63119, 'OP_EqStateCmd', 662, 1), + (20095, 63119, 63119, 'OP_EqPlaySoundCmd', 663, 1), + (20096, 63119, 63119, 'OP_EqPlaySound3DCmd', 664, 1), + (20097, 63119, 63119, 'OP_EqPlayVoiceCmd', 665, 1), + (20098, 63119, 63119, 'OP_EqHearDrowningCmd', 666, 1), + (20099, 63119, 63119, 'OP_EqHearDeathCmd', 667, 1), + (20100, 63119, 63119, 'OP_EqGroupMemberRemovedCmd', 668, 1), + (20101, 63119, 63119, 'OP_EqHearChainEffectCmd', 669, 1), + (20102, 63119, 63119, 'OP_EqReceiveOfferCmd', 670, 1), + (20103, 63119, 63119, 'OP_EqInspectPCResultsCmd', 671, 1), + (20104, 63119, 63119, 'OP_EqDrawablePathGraphCmd', 672, 1), + (20105, 63119, 63119, 'OP_EqDialogOpenCmd', 673, 1), + (20106, 63119, 63119, 'OP_EqDialogCloseCmd', 674, 1), + (20107, 63119, 63119, 'OP_EqFactionUpdateCmd', 675, 1), + (20108, 63119, 63119, 'OP_EqCollectionUpdateCmd', 676, 1), + (20109, 63119, 63119, 'OP_EqCollectionFilterCmd', 677, 1), + (20110, 63119, 63119, 'OP_EqCollectionItemCmd', 678, 1), + (20111, 63119, 63119, 'OP_EqQuestJournalUpdateCmd', 679, 1), + (20112, 63119, 63119, 'OP_EqMentoring', 680, 1), + (20113, 63119, 63119, 'OP_EqQuestJournalReplyCmd', 681, 1), + (20114, 63119, 63119, 'OP_EqQuestGroupCmd', 682, 1), + (20115, 63119, 63119, 'OP_EqUpdateMerchantCmd', 683, 1), + (20116, 63119, 63119, 'OP_EqUpdateStoreCmd', 684, 1), + (20117, 63119, 63119, 'OP_EqUpdatePlayerTradeCmd', 685, 1), + (20118, 63119, 63119, 'OP_EqHelpPathCmd', 686, 1), + (20119, 63119, 63119, 'OP_EqHelpPathClearCmd', 687, 1), + (20120, 63119, 63119, 'OP_EqUpdateBankCmd', 688, 1), + (20121, 63119, 63119, 'OP_EqExamineInfoCmd', 689, 1), + (20122, 63119, 63119, 'OP_EqCloseWindowCmd', 690, 1), + (20123, 63119, 63119, 'OP_EqUpdateLootCmd', 691, 1), + (20124, 63119, 63119, 'OP_EqJunctionListCmd', 692, 1), + (20125, 63119, 63119, 'OP_EqShowDeathWindowCmd', 693, 1), + (20126, 63119, 63119, 'OP_EqDisplaySpellFailCmd', 694, 1), + (20127, 63119, 63119, 'OP_EqSpellCastStartCmd', 695, 1), + (20128, 63119, 63119, 'OP_EqSpellCastEndCmd', 696, 1), + (20129, 63119, 63119, 'OP_EqResurrectedCmd', 697, 1), + (20130, 63119, 63119, 'OP_EqChoiceWinCmd', 698, 1), + (20131, 63119, 63119, 'OP_EqSetDefaultVerbCmd', 699, 1), + (20132, 63119, 63119, 'OP_EqInstructionWindowCmd', 700, 1), + (20133, 63119, 63119, 'OP_EqInstructionWindowCloseCmd', 701, 1), + (20134, 63119, 63119, 'OP_EqInstructionWindowGoalCmd', 702, 1), + (20135, 63119, 63119, 'OP_EqInstructionWindowTaskCmd', 703, 1), + (20136, 63119, 63119, 'OP_EqEnableGameEventCmd', 704, 1), + (20137, 63119, 63119, 'OP_EqShowWindowCmd', 705, 1), + (20138, 63119, 63119, 'OP_EqEnableWindowCmd', 706, 1), + (20139, 63119, 63119, 'OP_EqFlashWindowCmd', 707, 1), + (20140, 63119, 63119, 'OP_EqHearPlayFlavorCmd', 709, 1), + (20141, 63119, 63119, 'OP_EqUpdateSignWidgetCmd', 710, 1), + (20142, 63119, 63119, 'OP_EqDebugPVDCmd', 711, 1), + (20143, 63119, 63119, 'OP_EqShowBookCmd', 712, 1), + (20144, 63119, 63119, 'OP_EqQuestionnaireCmd', 713, 1), + (20145, 63119, 63119, 'OP_EqGetProbsCmd', 715, 1), + (20146, 63119, 63119, 'OP_EqHearHealCmd', 716, 1), + (20147, 63119, 63119, 'OP_EqChatChannelUpdateCmd', 717, 1), + (20148, 63119, 63119, 'OP_EqWhoChannelQueryReplyCmd', 718, 1), + (20149, 63119, 63119, 'OP_EqAvailWorldChannelsCmd', 719, 1), + (20150, 63119, 63119, 'OP_EqUpdateTargetCmd', 720, 1), + (20151, 63119, 63119, 'OP_BrokerSellList', 721, 1), + (20152, 63119, 63119, 'OP_EqConsignmentItemsCmd', 722, 1), + (20153, 63119, 63119, 'OP_EqStartBrokerCmd', 724, 1), + (20154, 63119, 63119, 'OP_EqMapExplorationCmd', 725, 1), + (20155, 63119, 63119, 'OP_EqStoreLogCmd', 726, 1), + (20156, 63119, 63119, 'OP_EqSpellMoveToRangeAndRetryCmd', 727, 1), + (20157, 63119, 63119, 'OP_EqUpdatePlayerMailCmd', 728, 1), + (20158, 63119, 63119, 'OP_GuildStatusUpdate', 731, 1), + (20159, 63119, 63119, 'OP_EqArenaResultsCmd', 732, 1), + (20160, 63119, 63119, 'OP_EqGuildBankEventActionCmd', 733, 1), + (20161, 63119, 63119, 'OP_EqGuildBankExamineInfoCmd', 734, 1), + (20162, 63119, 63119, 'OP_EqHearSpellNoLandCmd', 735, 1), + (20163, 63119, 63119, 'OP_Lottery', 736, 1), + (20164, 63119, 63119, 'OP_GuildRecruitingMemberInfo', 737, 1), + (20165, 63119, 63119, 'OP_GuildRecruiting', 738, 1), + (20166, 63119, 63119, 'OP_GuildRecruitingDetails', 739, 1), + (20167, 63119, 63119, 'OP_GuildRecruitingImage', 740, 1), + (20168, 63119, 63119, 'OP_TradeskillList', 741, 1), + (20169, 63119, 63119, 'OP_CharRenamed', 742, 1), + (20170, 63119, 63119, 'OP_UseAdornment', 752, 1), + (20171, 63119, 63119, 'OP_ExpPurchWindow', 758, 1), + (20172, 63119, 63119, 'OP_PointOfInterest', 762, 1), + (20173, 63119, 63119, 'OP_PointOfInterest2', 763, 1), + (20174, 63119, 63119, 'OP_TraitsList', 764, 1), + (20175, 63119, 63119, 'OP_CustomizeHouseDisplay', 767, 1), + (20176, 63119, 63119, 'OP_VoiceChatServer', 768, 1), + (20177, 63119, 63119, 'OP_SupplyDepot', 772, 1), + (20178, 63119, 63119, 'OP_EQHearThreatCmd', 773, 1), + (20179, 63119, 63119, 'OP_RecipeList', 774, 1), + (20180, 63119, 63119, 'OP_Research', 775, 1), + (20181, 63119, 63119, 'OP_CharacterCurrency', 776, 1), + (20182, 63119, 63119, 'OP_CharacterAchievements', 777, 1), + (20183, 63119, 63119, 'OP_AchievementUpdateMsg', 778, 1), + (20184, 63119, 63119, 'OP_EQHearDispellCmd', 779, 1), + (20185, 63119, 63119, 'OP_JournalQuestStoryline', 780, 1), + (20186, 63119, 63119, 'OP_DungeonPlayAsAvatarList', 781, 1), + (20187, 63119, 63119, 'OP_DungeonPlayAsAvatarSelected', 782, 1), + (20188, 63119, 63119, 'OP_MercHireWindow', 783, 1), + (20189, 63119, 63119, 'OP_MercUnknown', 784, 1), + (20190, 63119, 63119, 'OP_Unknown', 797, 1), + (20191, 63119, 63119, 'OP_HeritageMsg', 10023, 1), + (20192, 63120, 63135, 'OP_AchievementUpdateMsg', 780, 1), + (20193, 63120, 63135, 'OP_AddSocialStructureStandingMsg', 253, 1), + (20194, 63120, 63135, 'OP_AdvancementRequestMsg', 398, 1), + (20195, 63120, 63135, 'OP_AdventureList', 493, 1), + (20196, 63120, 63135, 'OP_AFKUpdateMsg', 374, 1), + (20197, 63120, 63135, 'OP_AfterInvSpellUpdate', 71, 1), + (20198, 63120, 63135, 'OP_AllCharactersDescReplyMsg', 10, 1), + (20199, 63120, 63135, 'OP_AllCharactersDescRequestMsg', 9, 1), + (20200, 63120, 63135, 'OP_AllWSDescRequestMsg', 7, 1), + (20201, 63120, 63135, 'OP_AnonUpdateMsg', 375, 1), + (20202, 63120, 63135, 'OP_ArenaCreate', 461, 1), + (20203, 63120, 63135, 'OP_ArenaGameTypesMsg', 450, 1), + (20204, 63120, 63135, 'OP_ArenaList', 462, 1), + (20205, 63120, 63135, 'OP_ArenaWindow', 470, 1), + (20206, 63120, 63135, 'OP_AttackAllowed', 505, 1), + (20207, 63120, 63135, 'OP_AttackNotAllowed', 506, 1), + (20208, 63120, 63135, 'OP_AuctionAbortMsg', 441, 1), + (20209, 63120, 63135, 'OP_AuctionCharacter', 438, 1), + (20210, 63120, 63135, 'OP_AuctionCharacterReply', 439, 1), + (20211, 63120, 63135, 'OP_AuctionCoin', 436, 1), + (20212, 63120, 63135, 'OP_AuctionCoinReply', 437, 1), + (20213, 63120, 63135, 'OP_AuctionCommitMsg', 440, 1), + (20214, 63120, 63135, 'OP_AuctionItem', 434, 1), + (20215, 63120, 63135, 'OP_AuctionItemReply', 435, 1), + (20216, 63120, 63135, 'OP_AuditAuctionEventMsg', 451, 1), + (20217, 63120, 63135, 'OP_AvatarCreatedMsg', 48, 1), + (20218, 63120, 63135, 'OP_AvatarDestroyedMsg', 49, 1), + (20219, 63120, 63135, 'OP_AvatarUpdateMsg', 364, 1), + (20220, 63120, 63135, 'OP_BadLanguageFilter', 523, 1), + (20221, 63120, 63135, 'OP_BagOptions', 507, 1), + (20222, 63120, 63135, 'OP_BeginItemCreationMsg', 224, 1), + (20223, 63120, 63135, 'OP_BeginTrackingMsg', 394, 1), + (20224, 63120, 63135, 'OP_BioUpdateMsg', 366, 1), + (20225, 63120, 63135, 'OP_BrokerAddBag', 296, 1), + (20226, 63120, 63135, 'OP_BrokerRemoveBag', 297, 1), + (20227, 63120, 63135, 'OP_BrokerSellList', 723, 1), + (20228, 63120, 63135, 'OP_BuyPlayerHouseMsg', 153, 1), + (20229, 63120, 63135, 'OP_BuyPlayerHouseTintMsg', 154, 1), + (20230, 63120, 63135, 'OP_CampAbortedMsg', 54, 1), + (20231, 63120, 63135, 'OP_CampClientMsg', 391, 1), + (20232, 63120, 63135, 'OP_CampStartedMsg', 53, 1), + (20233, 63120, 63135, 'OP_CancelCreateFromRecipeMsg', 223, 1), + (20234, 63120, 63135, 'OP_CancelledFeignMsg', 219, 1), + (20235, 63120, 63135, 'OP_CancelMoveObjectModeMsg', 166, 1), + (20236, 63120, 63135, 'OP_CancelSpellCast', 494, 1), + (20237, 63120, 63135, 'OP_ChangeServerControlFlagMsg', 250, 1), + (20238, 63120, 63135, 'OP_ChangeZoneMsg', 79, 1), + (20239, 63120, 63135, 'OP_CharacterAchievements', 779, 1), + (20240, 63120, 63135, 'OP_CharacterCreatedDungeons', 557, 1), + (20241, 63120, 63135, 'OP_CharacterCurrency', 778, 1), + (20242, 63120, 63135, 'OP_CharacterHousingList', 512, 1), + (20243, 63120, 63135, 'OP_CharacterLinkdeadMsg', 419, 1), + (20244, 63120, 63135, 'OP_CharacterMerc', 67, 1), + (20245, 63120, 63135, 'OP_CharacterMounts', 588, 1), + (20246, 63120, 63135, 'OP_CharacterPet', 66, 1), + (20247, 63120, 63135, 'OP_CharNameChangedMsg', 356, 1), + (20248, 63120, 63135, 'OP_CharRenamed', 744, 1), + (20249, 63120, 63135, 'OP_CharTransferCommitReplyMsg', 427, 1), + (20250, 63120, 63135, 'OP_CharTransferCommitRequestMsg', 425, 1), + (20251, 63120, 63135, 'OP_CharTransferReplyMsg', 423, 1), + (20252, 63120, 63135, 'OP_CharTransferRequestMsg', 422, 1), + (20253, 63120, 63135, 'OP_CharTransferRollbackReplyMsg', 426, 1), + (20254, 63120, 63135, 'OP_CharTransferRollbackRequestMsg', 424, 1), + (20255, 63120, 63135, 'OP_CharTransferStartReplyMsg', 421, 1), + (20256, 63120, 63135, 'OP_CharTransferStartRequestMsg', 420, 1), + (20257, 63120, 63135, 'OP_CharTransferValidateReplyMsg', 443, 1), + (20258, 63120, 63135, 'OP_CharTransferValidateRequestMsg', 442, 1), + (20259, 63120, 63135, 'OP_ChatCreateChannelMsg', 289, 1), + (20260, 63120, 63135, 'OP_ChatFiltersMsg', 338, 1), + (20261, 63120, 63135, 'OP_ChatJoinChannelMsg', 290, 1), + (20262, 63120, 63135, 'OP_ChatLeaveChannelMsg', 292, 1), + (20263, 63120, 63135, 'OP_ChatRelationshipUpdateMsg', 187, 1), + (20264, 63120, 63135, 'OP_ChatSendFriendsMsg', 299, 1), + (20265, 63120, 63135, 'OP_ChatSendIgnoresMsg', 300, 1), + (20266, 63120, 63135, 'OP_ChatTellChannelMsg', 293, 1), + (20267, 63120, 63135, 'OP_ChatTellUserMsg', 294, 1), + (20268, 63120, 63135, 'OP_ChatToggleFriendMsg', 295, 1), + (20269, 63120, 63135, 'OP_ChatToggleIgnoreMsg', 298, 1), + (20270, 63120, 63135, 'OP_ChatWhoChannelMsg', 291, 1), + (20271, 63120, 63135, 'OP_ClearDataMsg', 100, 1), + (20272, 63120, 63135, 'OP_ClearForLandingMsg', 496, 1), + (20273, 63120, 63135, 'OP_ClearForTakeOffMsg', 194, 1), + (20274, 63120, 63135, 'OP_ClientCmdMsg', 60, 1), + (20275, 63120, 63135, 'OP_ClientFellMsg', 389, 1), + (20276, 63120, 63135, 'OP_ClientIdleBeginMsg', 410, 1), + (20277, 63120, 63135, 'OP_ClientIdleEndMsg', 411, 1), + (20278, 63120, 63135, 'OP_ClientInDeathRegionMsg', 390, 1), + (20279, 63120, 63135, 'OP_ClientTeleportRequestMsg', 80, 1), + (20280, 63120, 63135, 'OP_ClientTeleportToLocationMsg', 248, 1), + (20281, 63120, 63135, 'OP_CloseGroupInviteWindowMsg', 401, 1), + (20282, 63120, 63135, 'OP_CollectAllHouseItemsMsg', 155, 1), + (20283, 63120, 63135, 'OP_ConsignItemRequestMsg', 129, 1), + (20284, 63120, 63135, 'OP_ConsignItemResponseMsg', 130, 1), + (20285, 63120, 63135, 'OP_ConsignmentCloseStoreMsg', 128, 1), + (20286, 63120, 63135, 'OP_ConsignRemoveItemsMsg', 382, 1), + (20287, 63120, 63135, 'OP_ConsignViewCreateMsg', 379, 1), + (20288, 63120, 63135, 'OP_ConsignViewGetPageMsg', 380, 1), + (20289, 63120, 63135, 'OP_ConsignViewReleaseMsg', 381, 1), + (20290, 63120, 63135, 'OP_ConsignViewSortMsg', 387, 1), + (20291, 63120, 63135, 'OP_CorruptedClientMsg', 414, 1), + (20292, 63120, 63135, 'OP_CreateBoatTransportsMsg', 254, 1), + (20293, 63120, 63135, 'OP_CreateCharacterDungeon', 551, 1), + (20294, 63120, 63135, 'OP_CreateCharacterReplyMsg', 12, 1), + (20295, 63120, 63135, 'OP_CreateCharacterRequestMsg', 11, 1), + (20296, 63120, 63135, 'OP_CreateCharFromCBBReplyMsg', 431, 1), + (20297, 63120, 63135, 'OP_CreateCharFromCBBRequestMsg', 430, 1), + (20298, 63120, 63135, 'OP_CreateGuildReplyMsg', 123, 1), + (20299, 63120, 63135, 'OP_CreateGuildRequestMsg', 121, 1), + (20300, 63120, 63135, 'OP_CreateZoneInstanceMsg', 31, 1), + (20301, 63120, 63135, 'OP_CsCategoryRequestMsg', 371, 1), + (20302, 63120, 63135, 'OP_CsCategoryResponseMsg', 372, 1), + (20303, 63120, 63135, 'OP_CSTicketAddCommentMsg', 237, 1), + (20304, 63120, 63135, 'OP_CSTicketChangeNotificationMsg', 239, 1), + (20305, 63120, 63135, 'OP_CSTicketCommentRequestMsg', 234, 1), + (20306, 63120, 63135, 'OP_CSTicketCommentResponseMsg', 235, 1), + (20307, 63120, 63135, 'OP_CSTicketCreateMsg', 236, 1), + (20308, 63120, 63135, 'OP_CSTicketDeleteMsg', 238, 1), + (20309, 63120, 63135, 'OP_CSTicketHeaderRequestMsg', 232, 1), + (20310, 63120, 63135, 'OP_CSTicketInfoMsg', 233, 1), + (20311, 63120, 63135, 'OP_CSToolAccessResponseMsg', 392, 1), + (20312, 63120, 63135, 'OP_CSToolsRequestMsg', 251, 1), + (20313, 63120, 63135, 'OP_CSToolsResponseMsg', 252, 1), + (20314, 63120, 63135, 'OP_CurrentPet', 490, 1), + (20315, 63120, 63135, 'OP_CustomizationPurchaseRequestMs', 170, 1), + (20316, 63120, 63135, 'OP_CustomizationReplyMsg', 172, 1), + (20317, 63120, 63135, 'OP_CustomizationSetRequestMsg', 171, 1), + (20318, 63120, 63135, 'OP_CustomizeHouseDisplay', 769, 1), + (20319, 63120, 63135, 'OP_DailyObjectives', 601, 1), + (20320, 63120, 63135, 'OP_DefaultGroupOptionsMsg', 201, 1), + (20321, 63120, 63135, 'OP_DefaultGroupOptionsRequestMsg', 200, 1), + (20322, 63120, 63135, 'OP_DeityAbilityWindow', 621, 1), + (20323, 63120, 63135, 'OP_DeleteCharacterReplyMsg', 19, 1), + (20324, 63120, 63135, 'OP_DeleteCharacterRequestMsg', 18, 1), + (20325, 63120, 63135, 'OP_DeleteGuildMsg', 126, 1), + (20326, 63120, 63135, 'OP_DestUpdateReq', 213, 1), + (20327, 63120, 63135, 'OP_DialogCloseMsg', 112, 1), + (20328, 63120, 63135, 'OP_DialogSelectMsg', 111, 1), + (20329, 63120, 63135, 'OP_DispatchClientCmdMsg', 62, 1), + (20330, 63120, 63135, 'OP_DispatchESMsg', 61, 1), + (20331, 63120, 63135, 'OP_DispatchMsg', 456, 1), + (20332, 63120, 63135, 'OP_DispatchSpellCmdMsg', 182, 1), + (20333, 63120, 63135, 'OP_DisplayDebugNLLPointsMsg', 258, 1), + (20334, 63120, 63135, 'OP_DisplayEventMsg', 457, 1), + (20335, 63120, 63135, 'OP_DisplayExchangeScreenMsg', 449, 1), + (20336, 63120, 63135, 'OP_DisplayGroupOptionsScreenMsg', 203, 1), + (20337, 63120, 63135, 'OP_DisplayInnVisitScreenMsg', 205, 1), + (20338, 63120, 63135, 'OP_DisplayMailScreenMsg', 409, 1), + (20339, 63120, 63135, 'OP_DisplayTSEventReactionMsg', 228, 1), + (20340, 63120, 63135, 'OP_DisplayWarningMsg', 269, 1), + (20341, 63120, 63135, 'OP_DoneLoadingEntityResourcesMsg', 38, 1), + (20342, 63120, 63135, 'OP_DoneLoadingZoneResourcesMsg', 36, 1), + (20343, 63120, 63135, 'OP_DoneSendingInitialEntitiesMsg', 37, 1), + (20344, 63120, 63135, 'OP_DressingRoom', 515, 1), + (20345, 63120, 63135, 'OP_DumpSchedulerMsg', 206, 1), + (20346, 63120, 63135, 'OP_DungeonMakerEnter', 552, 1), + (20347, 63120, 63135, 'OP_DungeonMakerItemRequest', 556, 1), + (20348, 63120, 63135, 'OP_DungeonMakerItemResponse', 586, 1), + (20349, 63120, 63135, 'OP_DungeonMakerToolboxList', 558, 1), + (20350, 63120, 63135, 'OP_DungeonMakerUnknown', 559, 1), + (20351, 63120, 63135, 'OP_DungeonMakerUnknown1', 560, 1), + (20352, 63120, 63135, 'OP_DungeonPlayAsAvatarList', 783, 1), + (20353, 63120, 63135, 'OP_DungeonPlayAsAvatarSelected', 784, 1), + (20354, 63120, 63135, 'OP_EarlyLandingRequestMsg', 491, 1), + (20355, 63120, 63135, 'OP_EncounterBrokenMsg', 267, 1), + (20356, 63120, 63135, 'OP_EnterHouseMsg', 157, 1), + (20357, 63120, 63135, 'OP_EnterMoveObjectModeMsg', 164, 1), + (20358, 63120, 63135, 'OP_EntityVerbsReplyMsg', 184, 1), + (20359, 63120, 63135, 'OP_EntityVerbsRequestMsg', 183, 1), + (20360, 63120, 63135, 'OP_EntityVerbsVerbMsg', 185, 1), + (20361, 63120, 63135, 'OP_EqArenaResultsCmd', 734, 1), + (20362, 63120, 63135, 'OP_EqAvailWorldChannelsCmd', 721, 1), + (20363, 63120, 63135, 'OP_EqBetaCopyRequest', 639, 1), + (20364, 63120, 63135, 'OP_EqCannedEmoteCmd', 663, 1), + (20365, 63120, 63135, 'OP_EqChatChannelUpdateCmd', 719, 1), + (20366, 63120, 63135, 'OP_EqChoiceWinCmd', 700, 1), + (20367, 63120, 63135, 'OP_EqCloseWindowCmd', 692, 1), + (20368, 63120, 63135, 'OP_EqCollectionFilterCmd', 679, 1), + (20369, 63120, 63135, 'OP_EqCollectionItemCmd', 680, 1), + (20370, 63120, 63135, 'OP_EqCollectionUpdateCmd', 678, 1), + (20371, 63120, 63135, 'OP_EqConsignmentItemsCmd', 724, 1), + (20372, 63120, 63135, 'OP_EqCreateGhostCmd', 645, 1), + (20373, 63120, 63135, 'OP_EqCreateListBoxCmd', 660, 1), + (20374, 63120, 63135, 'OP_EqCreateSignWidgetCmd', 647, 1), + (20375, 63120, 63135, 'OP_EqCreateWidgetCmd', 646, 1), + (20376, 63120, 63135, 'OP_EqDebugPVDCmd', 713, 1), + (20377, 63120, 63135, 'OP_EqDestroyGhostCmd', 648, 1), + (20378, 63120, 63135, 'OP_EqDialogCloseCmd', 676, 1), + (20379, 63120, 63135, 'OP_EqDialogOpenCmd', 675, 1), + (20380, 63120, 63135, 'OP_EqDisplaySpellFailCmd', 696, 1), + (20381, 63120, 63135, 'OP_EqDisplayTextCmd', 644, 1), + (20382, 63120, 63135, 'OP_EqDrawablePathGraphCmd', 674, 1), + (20383, 63120, 63135, 'OP_EqEnableGameEventCmd', 706, 1), + (20384, 63120, 63135, 'OP_EqEnableWindowCmd', 708, 1), + (20385, 63120, 63135, 'OP_EqExamineInfoCmd', 691, 1), + (20386, 63120, 63135, 'OP_EqFactionUpdateCmd', 677, 1), + (20387, 63120, 63135, 'OP_EqFlashWindowCmd', 709, 1), + (20388, 63120, 63135, 'OP_EqGetProbsCmd', 717, 1), + (20389, 63120, 63135, 'OP_EqGroupMemberRemovedCmd', 670, 1), + (20390, 63120, 63135, 'OP_EqGuildBankEventActionCmd', 735, 1), + (20391, 63120, 63135, 'OP_EqGuildBankExamineInfoCmd', 736, 1), + (20392, 63120, 63135, 'OP_EqHearChainEffectCmd', 671, 1), + (20393, 63120, 63135, 'OP_EqHearChatCmd', 643, 1), + (20394, 63120, 63135, 'OP_EqHearCombatCmd', 652, 1), + (20395, 63120, 63135, 'OP_EqHearConsiderCmd', 658, 1), + (20396, 63120, 63135, 'OP_EqHearDeathCmd', 669, 1), + (20397, 63120, 63135, 'OP_EQHearDispellCmd', 781, 1), + (20398, 63120, 63135, 'OP_EqHearDrowningCmd', 668, 1), + (20399, 63120, 63135, 'OP_EqHearHealCmd', 718, 1), + (20400, 63120, 63135, 'OP_EqHearPlayFlavorCmd', 711, 1), + (20401, 63120, 63135, 'OP_EQHearProcCmd', 654, 1), + (20402, 63120, 63135, 'OP_EQHearResEffectCmd', 655, 1), + (20403, 63120, 63135, 'OP_EqHearSpellCastCmd', 653, 1), + (20404, 63120, 63135, 'OP_EqHearSpellFizzleCmd', 657, 1), + (20405, 63120, 63135, 'OP_EqHearSpellInterruptCmd', 656, 1), + (20406, 63120, 63135, 'OP_EqHearSpellNoLandCmd', 737, 1), + (20407, 63120, 63135, 'OP_EQHearThreatCmd', 775, 1), + (20408, 63120, 63135, 'OP_EqHelpPathClearCmd', 689, 1), + (20409, 63120, 63135, 'OP_EqHelpPathCmd', 688, 1), + (20410, 63120, 63135, 'OP_EqInspectPCResultsCmd', 673, 1), + (20411, 63120, 63135, 'OP_EqInstructionWindowCloseCmd', 703, 1), + (20412, 63120, 63135, 'OP_EqInstructionWindowCmd', 702, 1), + (20413, 63120, 63135, 'OP_EqInstructionWindowGoalCmd', 704, 1), + (20414, 63120, 63135, 'OP_EqInstructionWindowTaskCmd', 705, 1), + (20415, 63120, 63135, 'OP_EqJunctionListCmd', 694, 1), + (20416, 63120, 63135, 'OP_EqMapExplorationCmd', 727, 1), + (20417, 63120, 63135, 'OP_EqMentoring', 682, 1), + (20418, 63120, 63135, 'OP_EqPlaySound3DCmd', 666, 1), + (20419, 63120, 63135, 'OP_EqPlaySoundCmd', 665, 1), + (20420, 63120, 63135, 'OP_EqPlayVoiceCmd', 667, 1), + (20421, 63120, 63135, 'OP_EqQuestGroupCmd', 684, 1), + (20422, 63120, 63135, 'OP_EqQuestionnaireCmd', 715, 1), + (20423, 63120, 63135, 'OP_EqQuestJournalReplyCmd', 683, 1), + (20424, 63120, 63135, 'OP_EqQuestJournalUpdateCmd', 681, 1), + (20425, 63120, 63135, 'OP_EqReceiveOfferCmd', 672, 1), + (20426, 63120, 63135, 'OP_EqResurrectedCmd', 699, 1), + (20427, 63120, 63135, 'OP_EqSetControlGhostCmd', 650, 1), + (20428, 63120, 63135, 'OP_EqSetDebugPathPointsCmd', 661, 1), + (20429, 63120, 63135, 'OP_EqSetDefaultVerbCmd', 701, 1), + (20430, 63120, 63135, 'OP_EqSetPOVGhostCmd', 651, 1), + (20431, 63120, 63135, 'OP_EqShowBookCmd', 714, 1), + (20432, 63120, 63135, 'OP_EqShowDeathWindowCmd', 695, 1), + (20433, 63120, 63135, 'OP_EqShowWindowCmd', 707, 1), + (20434, 63120, 63135, 'OP_EqSpellCastEndCmd', 698, 1), + (20435, 63120, 63135, 'OP_EqSpellCastStartCmd', 697, 1), + (20436, 63120, 63135, 'OP_EqSpellMoveToRangeAndRetryCmd', 729, 1), + (20437, 63120, 63135, 'OP_EqStartBrokerCmd', 726, 1), + (20438, 63120, 63135, 'OP_EqStateCmd', 664, 1), + (20439, 63120, 63135, 'OP_EqStoreLogCmd', 728, 1), + (20440, 63120, 63135, 'OP_EqUpdateBankCmd', 690, 1), + (20441, 63120, 63135, 'OP_EqUpdateGhostCmd', 649, 1), + (20442, 63120, 63135, 'OP_EqUpdateLootCmd', 693, 1), + (20443, 63120, 63135, 'OP_EqUpdateMerchantCmd', 685, 1), + (20444, 63120, 63135, 'OP_EqUpdatePlayerMailCmd', 730, 1), + (20445, 63120, 63135, 'OP_EqUpdatePlayerTradeCmd', 687, 1), + (20446, 63120, 63135, 'OP_EqUpdateSignWidgetCmd', 712, 1), + (20447, 63120, 63135, 'OP_EqUpdateStoreCmd', 686, 1), + (20448, 63120, 63135, 'OP_EqUpdateSubClassesCmd', 659, 1), + (20449, 63120, 63135, 'OP_EqUpdateTargetCmd', 722, 1), + (20450, 63120, 63135, 'OP_EqWhoChannelQueryReplyCmd', 720, 1), + (20451, 63120, 63135, 'OP_ESInitMsg', 27, 1), + (20452, 63120, 63135, 'OP_ESLoginRequestMsg', 3, 1), + (20453, 63120, 63135, 'OP_ESReadyForClientsMsg', 28, 1), + (20454, 63120, 63135, 'OP_ESStatusMsg', 102, 1), + (20455, 63120, 63135, 'OP_ESWeatherRequestEndMsg', 107, 1), + (20456, 63120, 63135, 'OP_ESWeatherRequestMsg', 106, 1), + (20457, 63120, 63135, 'OP_ESZoneInstanceStatusMsg', 103, 1), + (20458, 63120, 63135, 'OP_ExamineConsignmentRequestMsg', 174, 1), + (20459, 63120, 63135, 'OP_ExamineConsignmentResponseMsg', 175, 1), + (20460, 63120, 63135, 'OP_ExamineInfoRequestMsg', 259, 1), + (20461, 63120, 63135, 'OP_ExamineItemRequestMsg', 198, 1), + (20462, 63120, 63135, 'OP_ExitHouseMsg', 158, 1), + (20463, 63120, 63135, 'OP_ExpectClientAsCharacterReplyMs', 24, 1), + (20464, 63120, 63135, 'OP_ExpectClientAsCharacterRequest', 34, 1), + (20465, 63120, 63135, 'OP_ExpPurchWindow', 760, 1), + (20466, 63120, 63135, 'OP_FellowshipExpMsg', 125, 1), + (20467, 63120, 63135, 'OP_FlightPathsMsg', 418, 1), + (20468, 63120, 63135, 'OP_GameWorldTimeMsg', 45, 1), + (20469, 63120, 63135, 'OP_GetAuctionAssetIDMsg', 446, 1), + (20470, 63120, 63135, 'OP_GetAuctionAssetIDReplyMsg', 447, 1), + (20471, 63120, 63135, 'OP_GetAvatarAccessRequestForCSToo', 397, 1), + (20472, 63120, 63135, 'OP_GetCharacterSerializedReplyMsg', 429, 1), + (20473, 63120, 63135, 'OP_GetCharacterSerializedRequestM', 428, 1), + (20474, 63120, 63135, 'OP_GroupCreatedMsg', 90, 1), + (20475, 63120, 63135, 'OP_GroupDestroyedMsg', 91, 1), + (20476, 63120, 63135, 'OP_GroupLeaderChangedMsg', 95, 1), + (20477, 63120, 63135, 'OP_GroupMemberAddedMsg', 92, 1), + (20478, 63120, 63135, 'OP_GroupMemberRemovedMsg', 93, 1), + (20479, 63120, 63135, 'OP_GroupOptionsMsg', 202, 1), + (20480, 63120, 63135, 'OP_GroupRemovedFromGroupMsg', 94, 1), + (20481, 63120, 63135, 'OP_GroupResendOOZDataMsg', 96, 1), + (20482, 63120, 63135, 'OP_GroupSettingsChangedMsg', 97, 1), + (20483, 63120, 63135, 'OP_GuildBankActionMsg', 278, 1), + (20484, 63120, 63135, 'OP_GuildBankActionResponseMsg', 279, 1), + (20485, 63120, 63135, 'OP_GuildBankEventListMsg', 283, 1), + (20486, 63120, 63135, 'OP_GuildBankItemDetailsRequestMsg', 280, 1), + (20487, 63120, 63135, 'OP_GuildBankItemDetailsResponseMs', 281, 1), + (20488, 63120, 63135, 'OP_GuildBankUpdateMsg', 282, 1), + (20489, 63120, 63135, 'OP_GuildEventActionMsg', 273, 1), + (20490, 63120, 63135, 'OP_GuildEventAddMsg', 272, 1), + (20491, 63120, 63135, 'OP_GuildEventDetailsMsg', 276, 1), + (20492, 63120, 63135, 'OP_GuildEventListMsg', 274, 1), + (20493, 63120, 63135, 'OP_GuildEventMsg', 271, 1), + (20494, 63120, 63135, 'OP_GuildMembershipResponseMsg', 361, 1), + (20495, 63120, 63135, 'OP_GuildRecruiting', 740, 1), + (20496, 63120, 63135, 'OP_GuildRecruitingDetails', 741, 1), + (20497, 63120, 63135, 'OP_GuildRecruitingImage', 742, 1), + (20498, 63120, 63135, 'OP_GuildRecruitingMemberInfo', 739, 1), + (20499, 63120, 63135, 'OP_GuildsayMsg', 124, 1), + (20500, 63120, 63135, 'OP_GuildStatusUpdate', 733, 1), + (20501, 63120, 63135, 'OP_GuildUpdateMsg', 127, 1), + (20502, 63120, 63135, 'OP_HeritageMsg', 10025, 1), + (20503, 63120, 63135, 'OP_HideIllusionsMsg', 197, 1), + (20504, 63120, 63135, 'OP_HouseAccessRemoveMsg', 161, 1), + (20505, 63120, 63135, 'OP_HouseAccessSetMsg', 160, 1), + (20506, 63120, 63135, 'OP_HouseCustomizationScreenMsg', 169, 1), + (20507, 63120, 63135, 'OP_HouseDefaultAccessSetMsg', 159, 1), + (20508, 63120, 63135, 'OP_HouseDeletedRemotelyMsg', 145, 1), + (20509, 63120, 63135, 'OP_HouseItemsList', 489, 1), + (20510, 63120, 63135, 'OP_HousingDataChangedMsg', 432, 1), + (20511, 63120, 63135, 'OP_HousingRestoreMsg', 433, 1), + (20512, 63120, 63135, 'OP_InspectPlayerMsg', 367, 1), + (20513, 63120, 63135, 'OP_InspectPlayerRequestMsg', 455, 1), + (20514, 63120, 63135, 'OP_InviteRequestMsg', 452, 1), + (20515, 63120, 63135, 'OP_InviteResponseMsg', 453, 1), + (20516, 63120, 63135, 'OP_InviteTargetResponseMsg', 454, 1), + (20517, 63120, 63135, 'OP_JoinGuildNotifyMsg', 363, 1), + (20518, 63120, 63135, 'OP_JournalQuestStoryline', 782, 1), + (20519, 63120, 63135, 'OP_KeymapDataMsg', 180, 1), + (20520, 63120, 63135, 'OP_KeymapLoadMsg', 178, 1), + (20521, 63120, 63135, 'OP_KeymapNoneMsg', 179, 1), + (20522, 63120, 63135, 'OP_KeymapSaveMsg', 181, 1), + (20523, 63120, 63135, 'OP_KnowledgebaseRequestMsg', 230, 1), + (20524, 63120, 63135, 'OP_KnowledgebaseResponseMsg', 231, 1), + (20525, 63120, 63135, 'OP_KnowledgeWindowSlotMappingMsg', 373, 1), + (20526, 63120, 63135, 'OP_KnownLanguagesMsg', 242, 1), + (20527, 63120, 63135, 'OP_Launchpad', 579, 1), + (20528, 63120, 63135, 'OP_LeaveGuildNotifyMsg', 362, 1), + (20529, 63120, 63135, 'OP_LevelChangedMsg', 265, 1), + (20530, 63120, 63135, 'OP_LFGGroupSearch', 509, 1), + (20531, 63120, 63135, 'OP_LFGUpdateMsg', 522, 1), + (20532, 63120, 63135, 'OP_LikeOption', 139, 1), + (20533, 63120, 63135, 'OP_LoadCalendarEvents', 582, 1), + (20534, 63120, 63135, 'OP_LoadWelcomeWindow', 566, 1), + (20535, 63120, 63135, 'OP_LoginByNumRequestMsg', 1, 1), + (20536, 63120, 63135, 'OP_LoginReplyMsg', 4, 1), + (20537, 63120, 63135, 'OP_LoginRequestMsg', 0, 1), + (20538, 63120, 63135, 'OP_LootItemsRequestMsg', 188, 1), + (20539, 63120, 63135, 'OP_Lottery', 738, 1), + (20540, 63120, 63135, 'OP_LSCheckAcctLockMsg', 207, 1), + (20541, 63120, 63135, 'OP_LsClientAlertlogReplyMsg', 246, 1), + (20542, 63120, 63135, 'OP_LsClientBaselogReplyMsg', 244, 1), + (20543, 63120, 63135, 'OP_LsClientCrashlogReplyMsg', 245, 1), + (20544, 63120, 63135, 'OP_LsClientVerifylogReplyMsg', 247, 1), + (20545, 63120, 63135, 'OP_LsRequestClientCrashLogMsg', 243, 1), + (20546, 63120, 63135, 'OP_LSServerLockMsg', 369, 1), + (20547, 63120, 63135, 'OP_MacroInitMsg', 262, 1), + (20548, 63120, 63135, 'OP_MacroUpdateMsg', 263, 1), + (20549, 63120, 63135, 'OP_MailCommitSendMessageMsg', 348, 1), + (20550, 63120, 63135, 'OP_MailDeleteMessageMsg', 344, 1), + (20551, 63120, 63135, 'OP_MailEventNotificationMsg', 416, 1), + (20552, 63120, 63135, 'OP_MailGetHeadersReplyMsg', 345, 1), + (20553, 63120, 63135, 'OP_MailGetMessageMsg', 342, 1), + (20554, 63120, 63135, 'OP_MailGetMessageReplyMsg', 346, 1), + (20555, 63120, 63135, 'OP_MailRemoveAttachFromMailMsg', 350, 1), + (20556, 63120, 63135, 'OP_MailSendMessageMsg', 343, 1), + (20557, 63120, 63135, 'OP_MailSendMessageReplyMsg', 347, 1), + (20558, 63120, 63135, 'OP_MailSendSystemMessageMsg', 349, 1), + (20559, 63120, 63135, 'OP_MakeGroupLeaderMsg', 89, 1), + (20560, 63120, 63135, 'OP_MapFogDataInitMsg', 399, 1), + (20561, 63120, 63135, 'OP_MapFogDataUpdateMsg', 400, 1), + (20562, 63120, 63135, 'OP_MapRequest', 525, 1), + (20563, 63120, 63135, 'OP_MarketAddFundsReply', 533, 1), + (20564, 63120, 63135, 'OP_MarketAddFundsRequest', 532, 1), + (20565, 63120, 63135, 'OP_MarketFundsUpdate', 530, 1), + (20566, 63120, 63135, 'OP_MarketPlaceItems', 543, 1), + (20567, 63120, 63135, 'OP_MarketPlacePrices', 536, 1), + (20568, 63120, 63135, 'OP_MarketPurchase', 535, 1), + (20569, 63120, 63135, 'OP_MentorPopup', 564, 1), + (20570, 63120, 63135, 'OP_MercHireWindow', 785, 1), + (20571, 63120, 63135, 'OP_MercUnknown', 786, 1), + (20572, 63120, 63135, 'OP_MigrateBoatTransportMsg', 256, 1), + (20573, 63120, 63135, 'OP_MigrateBoatTransportReplyMsg', 257, 1), + (20574, 63120, 63135, 'OP_MigrateClientToZoneReplyMsg', 84, 1), + (20575, 63120, 63135, 'OP_MigrateClientToZoneRequestMsg', 83, 1), + (20576, 63120, 63135, 'OP_ModifyGuildMsg', 270, 1), + (20577, 63120, 63135, 'OP_MonitorCharacterListMsg', 58, 1), + (20578, 63120, 63135, 'OP_MonitorCharacterListRequestMsg', 59, 1), + (20579, 63120, 63135, 'OP_MonitorReplyMsg', 57, 1), + (20580, 63120, 63135, 'OP_MOTDMsg', 46, 1), + (20581, 63120, 63135, 'OP_MoveableObjectPlacementCriteri', 163, 1), + (20582, 63120, 63135, 'OP_MoveLogUpdateMsg', 405, 1), + (20583, 63120, 63135, 'OP_NotifyApprenticeStoppedMentori', 413, 1), + (20584, 63120, 63135, 'OP_OfferQuestMsg', 406, 1), + (20585, 63120, 63135, 'OP_OnscreenMsgMsg', 268, 1), + (20586, 63120, 63135, 'OP_OpenCharCust', 568, 1), + (20587, 63120, 63135, 'OP_OutOfZoneMemberDataMsg', 98, 1), + (20588, 63120, 63135, 'OP_PaperdollImage', 581, 1), + (20589, 63120, 63135, 'OP_PayHouseUpkeepMsg', 162, 1), + (20590, 63120, 63135, 'OP_PerformCameraShakeMsg', 217, 1), + (20591, 63120, 63135, 'OP_PerformPlayerKnockbackMsg', 216, 1), + (20592, 63120, 63135, 'OP_PetOptions', 204, 1), + (20593, 63120, 63135, 'OP_PetOptionsResponse', 585, 1), + (20594, 63120, 63135, 'OP_PlayCharacterReplyMsg', 21, 1), + (20595, 63120, 63135, 'OP_PlayCharacterRequestMsg', 20, 1), + (20596, 63120, 63135, 'OP_PlayerHouseAccessUpdateMsg', 150, 1), + (20597, 63120, 63135, 'OP_PlayerHouseBaseScreenMsg', 148, 1), + (20598, 63120, 63135, 'OP_PlayerHouseCloseUIMsg', 152, 1), + (20599, 63120, 63135, 'OP_PlayerHouseDisplayStatusMsg', 151, 1), + (20600, 63120, 63135, 'OP_PlayerHousePurchaseScreenMsg', 149, 1), + (20601, 63120, 63135, 'OP_PlayerMadeInstances', 143, 1), + (20602, 63120, 63135, 'OP_PlayerMadeInstancesScreen', 142, 1), + (20603, 63120, 63135, 'OP_PlayerPollAnswer', 563, 1), + (20604, 63120, 63135, 'OP_PlayerPollPopup', 562, 1), + (20605, 63120, 63135, 'OP_PlayLon', 516, 1), + (20606, 63120, 63135, 'OP_PointOfInterest', 764, 1), + (20607, 63120, 63135, 'OP_PointOfInterest2', 765, 1), + (20608, 63120, 63135, 'OP_PopulateSkillMapsMsg', 218, 1), + (20609, 63120, 63135, 'OP_PositionBoatTransportMsg', 255, 1), + (20610, 63120, 63135, 'OP_PositionMoveableObject', 165, 1), + (20611, 63120, 63135, 'OP_PostPossessionMsg', 459, 1), + (20612, 63120, 63135, 'OP_PredictionUpdateMsg', 39, 1), + (20613, 63120, 63135, 'OP_PrePossessionMsg', 458, 1), + (20614, 63120, 63135, 'OP_PromoFlagsDetailsMsg', 378, 1), + (20615, 63120, 63135, 'OP_PublishHouse', 141, 1), + (20616, 63120, 63135, 'OP_PurchaseConsignmentLoreCheckRe', 412, 1), + (20617, 63120, 63135, 'OP_PurchaseConsignmentRequestMsg', 131, 1), + (20618, 63120, 63135, 'OP_QueAllBgSolo', 571, 1), + (20619, 63120, 63135, 'OP_QuestionnaireMsg', 264, 1), + (20620, 63120, 63135, 'OP_QuestJournalInspectMsg', 116, 1), + (20621, 63120, 63135, 'OP_QuestJournalOpenMsg', 115, 1), + (20622, 63120, 63135, 'OP_QuestJournalSetVisibleMsg', 117, 1), + (20623, 63120, 63135, 'OP_QuestJournalWaypointMsg', 118, 1), + (20624, 63120, 63135, 'OP_QuestReward', 324, 1), + (20625, 63120, 63135, 'OP_QuickbarInitMsg', 260, 1), + (20626, 63120, 63135, 'OP_QuickbarUpdateMsg', 261, 1), + (20627, 63120, 63135, 'OP_RaceRestrictionMsg', 444, 1), + (20628, 63120, 63135, 'OP_ReadBookPageMsg', 199, 1), + (20629, 63120, 63135, 'OP_ReadyForTakeOffMsg', 195, 1), + (20630, 63120, 63135, 'OP_ReadyToZoneMsg', 86, 1), + (20631, 63120, 63135, 'OP_RecipeBook', 544, 1), + (20632, 63120, 63135, 'OP_RecipeDetailsMsg', 74, 1), + (20633, 63120, 63135, 'OP_RecipeList', 776, 1), + (20634, 63120, 63135, 'OP_RecipeListUnknown', 597, 1), + (20635, 63120, 63135, 'OP_RelinquishHouseMsg', 156, 1), + (20636, 63120, 63135, 'OP_ReloadLocalizedTxtMsg', 359, 1), + (20637, 63120, 63135, 'OP_RemoteCmdMsg', 44, 1), + (20638, 63120, 63135, 'OP_RemoveClientFromGroupMsg', 87, 1), + (20639, 63120, 63135, 'OP_RemoveConcentrationMsg', 114, 1), + (20640, 63120, 63135, 'OP_RemoveGroupFromGroupMsg', 88, 1), + (20641, 63120, 63135, 'OP_RemoveSpellEffectMsg', 113, 1), + (20642, 63120, 63135, 'OP_RenameGuildMsg', 286, 1), + (20643, 63120, 63135, 'OP_ReplaceableSubMeshesMsg', 168, 1), + (20644, 63120, 63135, 'OP_ReportMsg', 384, 1), + (20645, 63120, 63135, 'OP_RequestCampMsg', 52, 1), + (20646, 63120, 63135, 'OP_RequestGuildBankEventDetailsMs', 284, 1), + (20647, 63120, 63135, 'OP_RequestGuildEventDetailsMsg', 275, 1), + (20648, 63120, 63135, 'OP_RequestGuildInfoMsg', 277, 1), + (20649, 63120, 63135, 'OP_RequestGuildMembershipMsg', 360, 1), + (20650, 63120, 63135, 'OP_RequestHelpRepathMsg', 209, 1), + (20651, 63120, 63135, 'OP_RequestRecipeDetailsMsg', 73, 1), + (20652, 63120, 63135, 'OP_RequestTargetLocMsg', 210, 1), + (20653, 63120, 63135, 'OP_Research', 777, 1), + (20654, 63120, 63135, 'OP_ResendWorldChannelsMsg', 448, 1), + (20655, 63120, 63135, 'OP_ReskinCharacterRequestMsg', 15, 1), + (20656, 63120, 63135, 'OP_RestartZoneMsg', 417, 1), + (20657, 63120, 63135, 'OP_RewardPackMsg', 285, 1), + (20658, 63120, 63135, 'OP_SatMsg', 192, 1), + (20659, 63120, 63135, 'OP_SavageBarInitMsg', 584, 1), + (20660, 63120, 63135, 'OP_SelectZoneTeleporterDestinatio', 358, 1), + (20661, 63120, 63135, 'OP_SendLatestRequestMsg', 99, 1), + (20662, 63120, 63135, 'OP_ServerPlayCharacterReplyMsg', 26, 1), + (20663, 63120, 63135, 'OP_ServerPlayCharacterRequestMsg', 25, 1), + (20664, 63120, 63135, 'OP_SetInstanceDisplayNameMsg', 445, 1), + (20665, 63120, 63135, 'OP_SetRemoteCmdsMsg', 43, 1), + (20666, 63120, 63135, 'OP_SetSocialMsg', 101, 1), + (20667, 63120, 63135, 'OP_ShaderCustomizationMsg', 167, 1), + (20668, 63120, 63135, 'OP_ShowCreateFromRecipeUIMsg', 222, 1), + (20669, 63120, 63135, 'OP_ShowIllusionsMsg', 196, 1), + (20670, 63120, 63135, 'OP_ShowItemCreationProcessUIMsg', 226, 1), + (20671, 63120, 63135, 'OP_ShowRecipeBookMsg', 229, 1), + (20672, 63120, 63135, 'OP_ShowZoneTeleporterDestinations', 357, 1), + (20673, 63120, 63135, 'OP_SitMsg', 190, 1), + (20674, 63120, 63135, 'OP_SkillInfoRequest', 518, 1), + (20675, 63120, 63135, 'OP_SkillInfoResponse', 519, 1), + (20676, 63120, 63135, 'OP_SOEAllAccess', 640, 1), + (20677, 63120, 63135, 'OP_SpellGainedMsg', 266, 1), + (20678, 63120, 63135, 'OP_StandMsg', 191, 1), + (20679, 63120, 63135, 'OP_StoodMsg', 193, 1), + (20680, 63120, 63135, 'OP_StopItemCreationMsg', 225, 1), + (20681, 63120, 63135, 'OP_StoppedLootingMsg', 189, 1), + (20682, 63120, 63135, 'OP_StopTrackingMsg', 395, 1), + (20683, 63120, 63135, 'OP_SubmitCharCust', 569, 1), + (20684, 63120, 63135, 'OP_SupplyDepot', 774, 1), + (20685, 63120, 63135, 'OP_SysClient', 221, 1), + (20686, 63120, 63135, 'OP_TeleportWithinZoneMsg', 81, 1), + (20687, 63120, 63135, 'OP_TeleportWithinZoneNoReloadMsg', 82, 1), + (20688, 63120, 63135, 'OP_TintWidgetsMsg', 173, 1), + (20689, 63120, 63135, 'OP_TitleUpdateMsg', 388, 1), + (20690, 63120, 63135, 'OP_TrackingUpdateMsg', 393, 1); +INSERT INTO `opcodes` (`id`, `version_range1`, `version_range2`, `name`, `opcode`, `table_data_version`) VALUES + (20691, 63120, 63135, 'OP_TradeskillList', 743, 1), + (20692, 63120, 63135, 'OP_TraitsList', 766, 1), + (20693, 63120, 63135, 'OP_UIEvent', 531, 1), + (20694, 63120, 63135, 'OP_UIResetMsg', 177, 1), + (20695, 63120, 63135, 'OP_UISettingsResponseMsg', 176, 1), + (20696, 63120, 63135, 'OP_Unknown', 799, 1), + (20697, 63120, 63135, 'OP_UnknownNpcMsg', 377, 1), + (20698, 63120, 63135, 'OP_UpdateActivePublicZonesMsg', 376, 1), + (20699, 63120, 63135, 'OP_UpdateCharacterSheetMsg', 65, 1), + (20700, 63120, 63135, 'OP_UpdateClientPredFlagsMsg', 249, 1), + (20701, 63120, 63135, 'OP_UpdateDebugRadiiMsg', 383, 1), + (20702, 63120, 63135, 'OP_UpdateGroupMemberDataMsg', 392, 1), + (20703, 63120, 63135, 'OP_UpdateHouseAccessDataMsg', 147, 1), + (20704, 63120, 63135, 'OP_UpdateHouseDataMsg', 146, 1), + (20705, 63120, 63135, 'OP_UpdateInventoryMsg', 70, 1), + (20706, 63120, 63135, 'OP_UpdateItemCreationProcessUIMsg', 227, 1), + (20707, 63120, 63135, 'OP_UpdateMotdMsg', 211, 1), + (20708, 63120, 63135, 'OP_UpdateOpportunityMsg', 77, 1), + (20709, 63120, 63135, 'OP_UpdatePositionMsg', 41, 1), + (20710, 63120, 63135, 'OP_UpdateRaidMsg', 385, 1), + (20711, 63120, 63135, 'OP_UpdateRecipeBookMsg', 72, 1), + (20712, 63120, 63135, 'OP_UpdateSkillBookMsg', 75, 1), + (20713, 63120, 63135, 'OP_UpdateSkillsMsg', 76, 1), + (20714, 63120, 63135, 'OP_UpdateSpellBookMsg', 68, 1), + (20715, 63120, 63135, 'OP_UpdateTargetLocMsg', 64, 1), + (20716, 63120, 63135, 'OP_UpdateTargetMsg', 63, 1), + (20717, 63120, 63135, 'OP_UpdateTitleCmd', 499, 1), + (20718, 63120, 63135, 'OP_UseAdornment', 754, 1), + (20719, 63120, 63135, 'OP_VideoUploaded', 583, 1), + (20720, 63120, 63135, 'OP_VoiceChatChannel', 524, 1), + (20721, 63120, 63135, 'OP_VoiceChatServer', 770, 1), + (20722, 63120, 63135, 'OP_WaypointReplyMsg', 353, 1), + (20723, 63120, 63135, 'OP_WaypointRequestMsg', 352, 1), + (20724, 63120, 63135, 'OP_WaypointSelectMsg', 354, 1), + (20725, 63120, 63135, 'OP_WaypointUpdateMsg', 355, 1), + (20726, 63120, 63135, 'OP_Weakness', 587, 1), + (20727, 63120, 63135, 'OP_WhoQueryReplyMsg', 56, 1), + (20728, 63120, 63135, 'OP_WhoQueryRequestMsg', 55, 1), + (20729, 63120, 63135, 'OP_WorldDataChangeMsg', 415, 1), + (20730, 63120, 63135, 'OP_WorldDataUpdateMsg', 240, 1), + (20731, 63120, 63135, 'OP_WorldListMsg', 8, 1), + (20732, 63120, 63135, 'OP_WorldPingMsg', 404, 1), + (20733, 63120, 63135, 'OP_WorldShutdownUpdateMsg', 408, 1), + (20734, 63120, 63135, 'OP_WorldStatusChangeMsg', 6, 1), + (20735, 63120, 63135, 'OP_WorldTravelAvail', 576, 1), + (20736, 63120, 63135, 'OP_WSAcctLockStatusMsg', 208, 1), + (20737, 63120, 63135, 'OP_WSCreateCharacterReplyMsg', 14, 1), + (20738, 63120, 63135, 'OP_WSCreateCharacterRequestMsg', 13, 1), + (20739, 63120, 63135, 'OP_WSLoginRequestMsg', 2, 1), + (20740, 63120, 63135, 'OP_WSServerHideMsg', 370, 1), + (20741, 63120, 63135, 'OP_WSServerLockMsg', 368, 1), + (20742, 63120, 63135, 'OP_WSStatusReplyMsg', 5, 1), + (20743, 63120, 63135, 'OP_ZoneBgInstanceList', 572, 1), + (20744, 63120, 63135, 'OP_ZoneInfoMsg', 35, 1), + (20745, 63120, 63135, 'OP_ZoneInstanceCreateReplyMsg', 32, 1), + (20746, 63120, 63135, 'OP_ZoneInstanceDestroyedMsg', 33, 1), + (20747, 63120, 63135, 'OP_ZoneMOTDMsg', 47, 1), + (20748, 63120, 63135, 'OP_ZonesStatusMsg', 105, 1), + (20749, 63120, 63135, 'OP_ZonesStatusRequestMsg', 104, 1), + (20750, 63120, 63135, 'OP_ZoneToFriendReplyMsg', 288, 1), + (20751, 63120, 63135, 'OP_ZoneToFriendRequestMsg', 287, 1), + (21215, 63136, 63136, 'OP_AchievementUpdateMsg', 780, 1), + (21216, 63136, 63136, 'OP_AddSocialStructureStandingMsg', 253, 1), + (21217, 63136, 63136, 'OP_AdvancementRequestMsg', 398, 1), + (21218, 63136, 63136, 'OP_AdventureList', 493, 1), + (21219, 63136, 63136, 'OP_AFKUpdateMsg', 374, 1), + (21220, 63136, 63136, 'OP_AfterInvSpellUpdate', 71, 1), + (21221, 63136, 63136, 'OP_AllCharactersDescReplyMsg', 10, 1), + (21222, 63136, 63136, 'OP_AllCharactersDescRequestMsg', 9, 1), + (21223, 63136, 63136, 'OP_AllWSDescRequestMsg', 7, 1), + (21224, 63136, 63136, 'OP_AnonUpdateMsg', 375, 1), + (21225, 63136, 63136, 'OP_ArenaCreate', 461, 1), + (21226, 63136, 63136, 'OP_ArenaGameTypesMsg', 450, 1), + (21227, 63136, 63136, 'OP_ArenaList', 462, 1), + (21228, 63136, 63136, 'OP_ArenaWindow', 470, 1), + (21229, 63136, 63136, 'OP_AttackAllowed', 505, 1), + (21230, 63136, 63136, 'OP_AttackNotAllowed', 506, 1), + (21231, 63136, 63136, 'OP_AuctionAbortMsg', 441, 1), + (21232, 63136, 63136, 'OP_AuctionCharacter', 438, 1), + (21233, 63136, 63136, 'OP_AuctionCharacterReply', 439, 1), + (21234, 63136, 63136, 'OP_AuctionCoin', 436, 1), + (21235, 63136, 63136, 'OP_AuctionCoinReply', 437, 1), + (21236, 63136, 63136, 'OP_AuctionCommitMsg', 440, 1), + (21237, 63136, 63136, 'OP_AuctionItem', 434, 1), + (21238, 63136, 63136, 'OP_AuctionItemReply', 435, 1), + (21239, 63136, 63136, 'OP_AuditAuctionEventMsg', 451, 1), + (21240, 63136, 63136, 'OP_AvatarCreatedMsg', 48, 1), + (21241, 63136, 63136, 'OP_AvatarDestroyedMsg', 49, 1), + (21242, 63136, 63136, 'OP_AvatarUpdateMsg', 364, 1), + (21243, 63136, 63136, 'OP_BadLanguageFilter', 523, 1), + (21244, 63136, 63136, 'OP_BagOptions', 507, 1), + (21245, 63136, 63136, 'OP_BeginItemCreationMsg', 224, 1), + (21246, 63136, 63136, 'OP_BeginTrackingMsg', 394, 1), + (21247, 63136, 63136, 'OP_BioUpdateMsg', 366, 1), + (21248, 63136, 63136, 'OP_BrokerAddBag', 296, 1), + (21249, 63136, 63136, 'OP_BrokerRemoveBag', 297, 1), + (21250, 63136, 63136, 'OP_BrokerSellList', 723, 1), + (21251, 63136, 63136, 'OP_BuyPlayerHouseMsg', 153, 1), + (21252, 63136, 63136, 'OP_BuyPlayerHouseTintMsg', 154, 1), + (21253, 63136, 63136, 'OP_CampAbortedMsg', 54, 1), + (21254, 63136, 63136, 'OP_CampClientMsg', 391, 1), + (21255, 63136, 63136, 'OP_CampStartedMsg', 53, 1), + (21256, 63136, 63136, 'OP_CancelCreateFromRecipeMsg', 223, 1), + (21257, 63136, 63136, 'OP_CancelledFeignMsg', 219, 1), + (21258, 63136, 63136, 'OP_CancelMoveObjectModeMsg', 166, 1), + (21259, 63136, 63136, 'OP_CancelSpellCast', 494, 1), + (21260, 63136, 63136, 'OP_ChangeServerControlFlagMsg', 250, 1), + (21261, 63136, 63136, 'OP_ChangeZoneMsg', 79, 1), + (21262, 63136, 63136, 'OP_CharacterAchievements', 779, 1), + (21263, 63136, 63136, 'OP_CharacterCreatedDungeons', 557, 1), + (21264, 63136, 63136, 'OP_CharacterCurrency', 778, 1), + (21265, 63136, 63136, 'OP_CharacterHousingList', 512, 1), + (21266, 63136, 63136, 'OP_CharacterLinkdeadMsg', 419, 1), + (21267, 63136, 63136, 'OP_CharacterMerc', 67, 1), + (21268, 63136, 63136, 'OP_CharacterMounts', 588, 1), + (21269, 63136, 63136, 'OP_CharacterPet', 66, 1), + (21270, 63136, 63136, 'OP_CharNameChangedMsg', 356, 1), + (21271, 63136, 63136, 'OP_CharRenamed', 744, 1), + (21272, 63136, 63136, 'OP_CharTransferCommitReplyMsg', 427, 1), + (21273, 63136, 63136, 'OP_CharTransferCommitRequestMsg', 425, 1), + (21274, 63136, 63136, 'OP_CharTransferReplyMsg', 423, 1), + (21275, 63136, 63136, 'OP_CharTransferRequestMsg', 422, 1), + (21276, 63136, 63136, 'OP_CharTransferRollbackReplyMsg', 426, 1), + (21277, 63136, 63136, 'OP_CharTransferRollbackRequestMsg', 424, 1), + (21278, 63136, 63136, 'OP_CharTransferStartReplyMsg', 421, 1), + (21279, 63136, 63136, 'OP_CharTransferStartRequestMsg', 420, 1), + (21280, 63136, 63136, 'OP_CharTransferValidateReplyMsg', 443, 1), + (21281, 63136, 63136, 'OP_CharTransferValidateRequestMsg', 442, 1), + (21282, 63136, 63136, 'OP_ChatCreateChannelMsg', 289, 1), + (21283, 63136, 63136, 'OP_ChatFiltersMsg', 338, 1), + (21284, 63136, 63136, 'OP_ChatJoinChannelMsg', 290, 1), + (21285, 63136, 63136, 'OP_ChatLeaveChannelMsg', 292, 1), + (21286, 63136, 63136, 'OP_ChatRelationshipUpdateMsg', 187, 1), + (21287, 63136, 63136, 'OP_ChatSendFriendsMsg', 299, 1), + (21288, 63136, 63136, 'OP_ChatSendIgnoresMsg', 300, 1), + (21289, 63136, 63136, 'OP_ChatTellChannelMsg', 293, 1), + (21290, 63136, 63136, 'OP_ChatTellUserMsg', 294, 1), + (21291, 63136, 63136, 'OP_ChatToggleFriendMsg', 295, 1), + (21292, 63136, 63136, 'OP_ChatToggleIgnoreMsg', 298, 1), + (21293, 63136, 63136, 'OP_ChatWhoChannelMsg', 291, 1), + (21294, 63136, 63136, 'OP_ClearDataMsg', 100, 1), + (21295, 63136, 63136, 'OP_ClearForLandingMsg', 496, 1), + (21296, 63136, 63136, 'OP_ClearForTakeOffMsg', 194, 1), + (21297, 63136, 63136, 'OP_ClientCmdMsg', 60, 1), + (21298, 63136, 63136, 'OP_ClientFellMsg', 389, 1), + (21299, 63136, 63136, 'OP_ClientIdleBeginMsg', 410, 1), + (21300, 63136, 63136, 'OP_ClientIdleEndMsg', 411, 1), + (21301, 63136, 63136, 'OP_ClientInDeathRegionMsg', 390, 1), + (21302, 63136, 63136, 'OP_ClientTeleportRequestMsg', 80, 1), + (21303, 63136, 63136, 'OP_ClientTeleportToLocationMsg', 248, 1), + (21304, 63136, 63136, 'OP_CloseGroupInviteWindowMsg', 401, 1), + (21305, 63136, 63136, 'OP_CollectAllHouseItemsMsg', 155, 1), + (21306, 63136, 63136, 'OP_ConsignItemRequestMsg', 129, 1), + (21307, 63136, 63136, 'OP_ConsignItemResponseMsg', 130, 1), + (21308, 63136, 63136, 'OP_ConsignmentCloseStoreMsg', 128, 1), + (21309, 63136, 63136, 'OP_ConsignRemoveItemsMsg', 382, 1), + (21310, 63136, 63136, 'OP_ConsignViewCreateMsg', 379, 1), + (21311, 63136, 63136, 'OP_ConsignViewGetPageMsg', 380, 1), + (21312, 63136, 63136, 'OP_ConsignViewReleaseMsg', 381, 1), + (21313, 63136, 63136, 'OP_ConsignViewSortMsg', 387, 1), + (21314, 63136, 63136, 'OP_CorruptedClientMsg', 414, 1), + (21315, 63136, 63136, 'OP_CreateBoatTransportsMsg', 254, 1), + (21316, 63136, 63136, 'OP_CreateCharacterDungeon', 551, 1), + (21317, 63136, 63136, 'OP_CreateCharacterReplyMsg', 12, 1), + (21318, 63136, 63136, 'OP_CreateCharacterRequestMsg', 11, 1), + (21319, 63136, 63136, 'OP_CreateCharFromCBBReplyMsg', 431, 1), + (21320, 63136, 63136, 'OP_CreateCharFromCBBRequestMsg', 430, 1), + (21321, 63136, 63136, 'OP_CreateGuildReplyMsg', 123, 1), + (21322, 63136, 63136, 'OP_CreateGuildRequestMsg', 121, 1), + (21323, 63136, 63136, 'OP_CreateZoneInstanceMsg', 31, 1), + (21324, 63136, 63136, 'OP_CsCategoryRequestMsg', 371, 1), + (21325, 63136, 63136, 'OP_CsCategoryResponseMsg', 372, 1), + (21326, 63136, 63136, 'OP_CSTicketAddCommentMsg', 237, 1), + (21327, 63136, 63136, 'OP_CSTicketChangeNotificationMsg', 239, 1), + (21328, 63136, 63136, 'OP_CSTicketCommentRequestMsg', 234, 1), + (21329, 63136, 63136, 'OP_CSTicketCommentResponseMsg', 235, 1), + (21330, 63136, 63136, 'OP_CSTicketCreateMsg', 236, 1), + (21331, 63136, 63136, 'OP_CSTicketDeleteMsg', 238, 1), + (21332, 63136, 63136, 'OP_CSTicketHeaderRequestMsg', 232, 1), + (21333, 63136, 63136, 'OP_CSTicketInfoMsg', 233, 1), + (21334, 63136, 63136, 'OP_CSToolAccessResponseMsg', 392, 1), + (21335, 63136, 63136, 'OP_CSToolsRequestMsg', 251, 1), + (21336, 63136, 63136, 'OP_CSToolsResponseMsg', 252, 1), + (21337, 63136, 63136, 'OP_CurrentPet', 490, 1), + (21338, 63136, 63136, 'OP_CustomizationPurchaseRequestMs', 170, 1), + (21339, 63136, 63136, 'OP_CustomizationReplyMsg', 172, 1), + (21340, 63136, 63136, 'OP_CustomizationSetRequestMsg', 171, 1), + (21341, 63136, 63136, 'OP_CustomizeHouseDisplay', 769, 1), + (21342, 63136, 63136, 'OP_DailyObjectives', 601, 1), + (21343, 63136, 63136, 'OP_DefaultGroupOptionsMsg', 201, 1), + (21344, 63136, 63136, 'OP_DefaultGroupOptionsRequestMsg', 200, 1), + (21345, 63136, 63136, 'OP_DeityAbilityWindow', 621, 1), + (21346, 63136, 63136, 'OP_DeleteCharacterReplyMsg', 19, 1), + (21347, 63136, 63136, 'OP_DeleteCharacterRequestMsg', 18, 1), + (21348, 63136, 63136, 'OP_DeleteGuildMsg', 126, 1), + (21349, 63136, 63136, 'OP_DestUpdateReq', 213, 1), + (21350, 63136, 63136, 'OP_DialogCloseMsg', 112, 1), + (21351, 63136, 63136, 'OP_DialogSelectMsg', 111, 1), + (21352, 63136, 63136, 'OP_DispatchClientCmdMsg', 62, 1), + (21353, 63136, 63136, 'OP_DispatchESMsg', 61, 1), + (21354, 63136, 63136, 'OP_DispatchMsg', 456, 1), + (21355, 63136, 63136, 'OP_DispatchSpellCmdMsg', 182, 1), + (21356, 63136, 63136, 'OP_DisplayDebugNLLPointsMsg', 258, 1), + (21357, 63136, 63136, 'OP_DisplayEventMsg', 457, 1), + (21358, 63136, 63136, 'OP_DisplayExchangeScreenMsg', 449, 1), + (21359, 63136, 63136, 'OP_DisplayGroupOptionsScreenMsg', 203, 1), + (21360, 63136, 63136, 'OP_DisplayInnVisitScreenMsg', 205, 1), + (21361, 63136, 63136, 'OP_DisplayMailScreenMsg', 409, 1), + (21362, 63136, 63136, 'OP_DisplayTSEventReactionMsg', 228, 1), + (21363, 63136, 63136, 'OP_DisplayWarningMsg', 269, 1), + (21364, 63136, 63136, 'OP_DoneLoadingEntityResourcesMsg', 38, 1), + (21365, 63136, 63136, 'OP_DoneLoadingZoneResourcesMsg', 36, 1), + (21366, 63136, 63136, 'OP_DoneSendingInitialEntitiesMsg', 37, 1), + (21367, 63136, 63136, 'OP_DressingRoom', 515, 1), + (21368, 63136, 63136, 'OP_DumpSchedulerMsg', 206, 1), + (21369, 63136, 63136, 'OP_DungeonMakerEnter', 552, 1), + (21370, 63136, 63136, 'OP_DungeonMakerItemRequest', 556, 1), + (21371, 63136, 63136, 'OP_DungeonMakerItemResponse', 586, 1), + (21372, 63136, 63136, 'OP_DungeonMakerToolboxList', 558, 1), + (21373, 63136, 63136, 'OP_DungeonMakerUnknown', 559, 1), + (21374, 63136, 63136, 'OP_DungeonMakerUnknown1', 560, 1), + (21375, 63136, 63136, 'OP_DungeonPlayAsAvatarList', 783, 1), + (21376, 63136, 63136, 'OP_DungeonPlayAsAvatarSelected', 784, 1), + (21377, 63136, 63136, 'OP_EarlyLandingRequestMsg', 491, 1), + (21378, 63136, 63136, 'OP_EncounterBrokenMsg', 267, 1), + (21379, 63136, 63136, 'OP_EnterHouseMsg', 157, 1), + (21380, 63136, 63136, 'OP_EnterMoveObjectModeMsg', 164, 1), + (21381, 63136, 63136, 'OP_EntityVerbsReplyMsg', 184, 1), + (21382, 63136, 63136, 'OP_EntityVerbsRequestMsg', 183, 1), + (21383, 63136, 63136, 'OP_EntityVerbsVerbMsg', 185, 1), + (21384, 63136, 63136, 'OP_EqArenaResultsCmd', 734, 1), + (21385, 63136, 63136, 'OP_EqAvailWorldChannelsCmd', 721, 1), + (21386, 63136, 63136, 'OP_EqBetaCopyRequest', 639, 1), + (21387, 63136, 63136, 'OP_EqCannedEmoteCmd', 663, 1), + (21388, 63136, 63136, 'OP_EqChatChannelUpdateCmd', 719, 1), + (21389, 63136, 63136, 'OP_EqChoiceWinCmd', 700, 1), + (21390, 63136, 63136, 'OP_EqCloseWindowCmd', 692, 1), + (21391, 63136, 63136, 'OP_EqCollectionFilterCmd', 679, 1), + (21392, 63136, 63136, 'OP_EqCollectionItemCmd', 680, 1), + (21393, 63136, 63136, 'OP_EqCollectionUpdateCmd', 678, 1), + (21394, 63136, 63136, 'OP_EqConsignmentItemsCmd', 724, 1), + (21395, 63136, 63136, 'OP_EqCreateGhostCmd', 645, 1), + (21396, 63136, 63136, 'OP_EqCreateListBoxCmd', 660, 1), + (21397, 63136, 63136, 'OP_EqCreateSignWidgetCmd', 647, 1), + (21398, 63136, 63136, 'OP_EqCreateWidgetCmd', 646, 1), + (21399, 63136, 63136, 'OP_EqDebugPVDCmd', 713, 1), + (21400, 63136, 63136, 'OP_EqDestroyGhostCmd', 648, 1), + (21401, 63136, 63136, 'OP_EqDialogCloseCmd', 676, 1), + (21402, 63136, 63136, 'OP_EqDialogOpenCmd', 675, 1), + (21403, 63136, 63136, 'OP_EqDisplaySpellFailCmd', 696, 1), + (21404, 63136, 63136, 'OP_EqDisplayTextCmd', 644, 1), + (21405, 63136, 63136, 'OP_EqDrawablePathGraphCmd', 674, 1), + (21406, 63136, 63136, 'OP_EqEnableGameEventCmd', 706, 1), + (21407, 63136, 63136, 'OP_EqEnableWindowCmd', 708, 1), + (21408, 63136, 63136, 'OP_EqExamineInfoCmd', 691, 1), + (21409, 63136, 63136, 'OP_EqFactionUpdateCmd', 677, 1), + (21410, 63136, 63136, 'OP_EqFlashWindowCmd', 709, 1), + (21411, 63136, 63136, 'OP_EqGetProbsCmd', 717, 1), + (21412, 63136, 63136, 'OP_EqGroupMemberRemovedCmd', 670, 1), + (21413, 63136, 63136, 'OP_EqGuildBankEventActionCmd', 735, 1), + (21414, 63136, 63136, 'OP_EqGuildBankExamineInfoCmd', 736, 1), + (21415, 63136, 63136, 'OP_EqHearChainEffectCmd', 671, 1), + (21416, 63136, 63136, 'OP_EqHearChatCmd', 643, 1), + (21417, 63136, 63136, 'OP_EqHearCombatCmd', 652, 1), + (21418, 63136, 63136, 'OP_EqHearConsiderCmd', 658, 1), + (21419, 63136, 63136, 'OP_EqHearDeathCmd', 669, 1), + (21420, 63136, 63136, 'OP_EQHearDispellCmd', 781, 1), + (21421, 63136, 63136, 'OP_EqHearDrowningCmd', 668, 1), + (21422, 63136, 63136, 'OP_EqHearHealCmd', 718, 1), + (21423, 63136, 63136, 'OP_EqHearPlayFlavorCmd', 711, 1), + (21424, 63136, 63136, 'OP_EQHearProcCmd', 654, 1), + (21425, 63136, 63136, 'OP_EQHearResEffectCmd', 655, 1), + (21426, 63136, 63136, 'OP_EqHearSpellCastCmd', 653, 1), + (21427, 63136, 63136, 'OP_EqHearSpellFizzleCmd', 657, 1), + (21428, 63136, 63136, 'OP_EqHearSpellInterruptCmd', 656, 1), + (21429, 63136, 63136, 'OP_EqHearSpellNoLandCmd', 737, 1), + (21430, 63136, 63136, 'OP_EQHearThreatCmd', 775, 1), + (21431, 63136, 63136, 'OP_EqHelpPathClearCmd', 689, 1), + (21432, 63136, 63136, 'OP_EqHelpPathCmd', 688, 1), + (21433, 63136, 63136, 'OP_EqInspectPCResultsCmd', 673, 1), + (21434, 63136, 63136, 'OP_EqInstructionWindowCloseCmd', 703, 1), + (21435, 63136, 63136, 'OP_EqInstructionWindowCmd', 702, 1), + (21436, 63136, 63136, 'OP_EqInstructionWindowGoalCmd', 704, 1), + (21437, 63136, 63136, 'OP_EqInstructionWindowTaskCmd', 705, 1), + (21438, 63136, 63136, 'OP_EqJunctionListCmd', 694, 1), + (21439, 63136, 63136, 'OP_EqMapExplorationCmd', 727, 1), + (21440, 63136, 63136, 'OP_EqMentoring', 682, 1), + (21441, 63136, 63136, 'OP_EqPlaySound3DCmd', 666, 1), + (21442, 63136, 63136, 'OP_EqPlaySoundCmd', 665, 1), + (21443, 63136, 63136, 'OP_EqPlayVoiceCmd', 667, 1), + (21444, 63136, 63136, 'OP_EqQuestGroupCmd', 684, 1), + (21445, 63136, 63136, 'OP_EqQuestionnaireCmd', 715, 1), + (21446, 63136, 63136, 'OP_EqQuestJournalReplyCmd', 683, 1), + (21447, 63136, 63136, 'OP_EqQuestJournalUpdateCmd', 681, 1), + (21448, 63136, 63136, 'OP_EqReceiveOfferCmd', 672, 1), + (21449, 63136, 63136, 'OP_EqResurrectedCmd', 699, 1), + (21450, 63136, 63136, 'OP_EqSetControlGhostCmd', 650, 1), + (21451, 63136, 63136, 'OP_EqSetDebugPathPointsCmd', 661, 1), + (21452, 63136, 63136, 'OP_EqSetDefaultVerbCmd', 701, 1), + (21453, 63136, 63136, 'OP_EqSetPOVGhostCmd', 651, 1), + (21454, 63136, 63136, 'OP_EqShowBookCmd', 714, 1), + (21455, 63136, 63136, 'OP_EqShowDeathWindowCmd', 695, 1), + (21456, 63136, 63136, 'OP_EqShowWindowCmd', 707, 1), + (21457, 63136, 63136, 'OP_EqSpellCastEndCmd', 698, 1), + (21458, 63136, 63136, 'OP_EqSpellCastStartCmd', 697, 1), + (21459, 63136, 63136, 'OP_EqSpellMoveToRangeAndRetryCmd', 729, 1), + (21460, 63136, 63136, 'OP_EqStartBrokerCmd', 726, 1), + (21461, 63136, 63136, 'OP_EqStateCmd', 664, 1), + (21462, 63136, 63136, 'OP_EqStoreLogCmd', 728, 1), + (21463, 63136, 63136, 'OP_EqUpdateBankCmd', 690, 1), + (21464, 63136, 63136, 'OP_EqUpdateGhostCmd', 649, 1), + (21465, 63136, 63136, 'OP_EqUpdateLootCmd', 693, 1), + (21466, 63136, 63136, 'OP_EqUpdateMerchantCmd', 685, 1), + (21467, 63136, 63136, 'OP_EqUpdatePlayerMailCmd', 730, 1), + (21468, 63136, 63136, 'OP_EqUpdatePlayerTradeCmd', 687, 1), + (21469, 63136, 63136, 'OP_EqUpdateSignWidgetCmd', 712, 1), + (21470, 63136, 63136, 'OP_EqUpdateStoreCmd', 686, 1), + (21471, 63136, 63136, 'OP_EqUpdateSubClassesCmd', 659, 1), + (21472, 63136, 63136, 'OP_EqUpdateTargetCmd', 722, 1), + (21473, 63136, 63136, 'OP_EqWhoChannelQueryReplyCmd', 720, 1), + (21474, 63136, 63136, 'OP_ESInitMsg', 27, 1), + (21475, 63136, 63136, 'OP_ESLoginRequestMsg', 3, 1), + (21476, 63136, 63136, 'OP_ESReadyForClientsMsg', 28, 1), + (21477, 63136, 63136, 'OP_ESStatusMsg', 102, 1), + (21478, 63136, 63136, 'OP_ESWeatherRequestEndMsg', 107, 1), + (21479, 63136, 63136, 'OP_ESWeatherRequestMsg', 106, 1), + (21480, 63136, 63136, 'OP_ESZoneInstanceStatusMsg', 103, 1), + (21481, 63136, 63136, 'OP_ExamineConsignmentRequestMsg', 174, 1), + (21482, 63136, 63136, 'OP_ExamineConsignmentResponseMsg', 175, 1), + (21483, 63136, 63136, 'OP_ExamineInfoRequestMsg', 259, 1), + (21484, 63136, 63136, 'OP_ExamineItemRequestMsg', 198, 1), + (21485, 63136, 63136, 'OP_ExitHouseMsg', 158, 1), + (21486, 63136, 63136, 'OP_ExpectClientAsCharacterReplyMs', 24, 1), + (21487, 63136, 63136, 'OP_ExpectClientAsCharacterRequest', 34, 1), + (21488, 63136, 63136, 'OP_ExpPurchWindow', 760, 1), + (21489, 63136, 63136, 'OP_FellowshipExpMsg', 125, 1), + (21490, 63136, 63136, 'OP_FlightPathsMsg', 418, 1), + (21491, 63136, 63136, 'OP_GameWorldTimeMsg', 45, 1), + (21492, 63136, 63136, 'OP_GetAuctionAssetIDMsg', 446, 1), + (21493, 63136, 63136, 'OP_GetAuctionAssetIDReplyMsg', 447, 1), + (21494, 63136, 63136, 'OP_GetAvatarAccessRequestForCSToo', 397, 1), + (21495, 63136, 63136, 'OP_GetCharacterSerializedReplyMsg', 429, 1), + (21496, 63136, 63136, 'OP_GetCharacterSerializedRequestM', 428, 1), + (21497, 63136, 63136, 'OP_GroupCreatedMsg', 90, 1), + (21498, 63136, 63136, 'OP_GroupDestroyedMsg', 91, 1), + (21499, 63136, 63136, 'OP_GroupLeaderChangedMsg', 95, 1), + (21500, 63136, 63136, 'OP_GroupMemberAddedMsg', 92, 1), + (21501, 63136, 63136, 'OP_GroupMemberRemovedMsg', 93, 1), + (21502, 63136, 63136, 'OP_GroupOptionsMsg', 202, 1), + (21503, 63136, 63136, 'OP_GroupRemovedFromGroupMsg', 94, 1), + (21504, 63136, 63136, 'OP_GroupResendOOZDataMsg', 96, 1), + (21505, 63136, 63136, 'OP_GroupSettingsChangedMsg', 97, 1), + (21506, 63136, 63136, 'OP_GuildBankActionMsg', 278, 1), + (21507, 63136, 63136, 'OP_GuildBankActionResponseMsg', 279, 1), + (21508, 63136, 63136, 'OP_GuildBankEventListMsg', 283, 1), + (21509, 63136, 63136, 'OP_GuildBankItemDetailsRequestMsg', 280, 1), + (21510, 63136, 63136, 'OP_GuildBankItemDetailsResponseMs', 281, 1), + (21511, 63136, 63136, 'OP_GuildBankUpdateMsg', 282, 1), + (21512, 63136, 63136, 'OP_GuildEventActionMsg', 273, 1), + (21513, 63136, 63136, 'OP_GuildEventAddMsg', 272, 1), + (21514, 63136, 63136, 'OP_GuildEventDetailsMsg', 276, 1), + (21515, 63136, 63136, 'OP_GuildEventListMsg', 274, 1), + (21516, 63136, 63136, 'OP_GuildEventMsg', 271, 1), + (21517, 63136, 63136, 'OP_GuildMembershipResponseMsg', 361, 1), + (21518, 63136, 63136, 'OP_GuildRecruiting', 740, 1), + (21519, 63136, 63136, 'OP_GuildRecruitingDetails', 741, 1), + (21520, 63136, 63136, 'OP_GuildRecruitingImage', 742, 1), + (21521, 63136, 63136, 'OP_GuildRecruitingMemberInfo', 739, 1), + (21522, 63136, 63136, 'OP_GuildsayMsg', 124, 1), + (21523, 63136, 63136, 'OP_GuildStatusUpdate', 733, 1), + (21524, 63136, 63136, 'OP_GuildUpdateMsg', 127, 1), + (21525, 63136, 63136, 'OP_HeritageMsg', 10026, 1), + (21526, 63136, 63136, 'OP_HideIllusionsMsg', 197, 1), + (21527, 63136, 63136, 'OP_HouseAccessRemoveMsg', 161, 1), + (21528, 63136, 63136, 'OP_HouseAccessSetMsg', 160, 1), + (21529, 63136, 63136, 'OP_HouseCustomizationScreenMsg', 169, 1), + (21530, 63136, 63136, 'OP_HouseDefaultAccessSetMsg', 159, 1), + (21531, 63136, 63136, 'OP_HouseDeletedRemotelyMsg', 145, 1), + (21532, 63136, 63136, 'OP_HouseItemsList', 489, 1), + (21533, 63136, 63136, 'OP_HousingDataChangedMsg', 432, 1), + (21534, 63136, 63136, 'OP_HousingRestoreMsg', 433, 1), + (21535, 63136, 63136, 'OP_InspectPlayerMsg', 367, 1), + (21536, 63136, 63136, 'OP_InspectPlayerRequestMsg', 455, 1), + (21537, 63136, 63136, 'OP_InviteRequestMsg', 452, 1), + (21538, 63136, 63136, 'OP_InviteResponseMsg', 453, 1), + (21539, 63136, 63136, 'OP_InviteTargetResponseMsg', 454, 1), + (21540, 63136, 63136, 'OP_JoinGuildNotifyMsg', 363, 1), + (21541, 63136, 63136, 'OP_JournalQuestStoryline', 782, 1), + (21542, 63136, 63136, 'OP_KeymapDataMsg', 180, 1), + (21543, 63136, 63136, 'OP_KeymapLoadMsg', 178, 1), + (21544, 63136, 63136, 'OP_KeymapNoneMsg', 179, 1), + (21545, 63136, 63136, 'OP_KeymapSaveMsg', 181, 1), + (21546, 63136, 63136, 'OP_KnowledgebaseRequestMsg', 230, 1), + (21547, 63136, 63136, 'OP_KnowledgebaseResponseMsg', 231, 1), + (21548, 63136, 63136, 'OP_KnowledgeWindowSlotMappingMsg', 373, 1), + (21549, 63136, 63136, 'OP_KnownLanguagesMsg', 242, 1), + (21550, 63136, 63136, 'OP_Launchpad', 579, 1), + (21551, 63136, 63136, 'OP_LeaveGuildNotifyMsg', 362, 1), + (21552, 63136, 63136, 'OP_LevelChangedMsg', 265, 1), + (21553, 63136, 63136, 'OP_LFGGroupSearch', 509, 1), + (21554, 63136, 63136, 'OP_LFGUpdateMsg', 522, 1), + (21555, 63136, 63136, 'OP_LikeOption', 139, 1), + (21556, 63136, 63136, 'OP_LoadCalendarEvents', 582, 1), + (21557, 63136, 63136, 'OP_LoadWelcomeWindow', 566, 1), + (21558, 63136, 63136, 'OP_LoginByNumRequestMsg', 1, 1), + (21559, 63136, 63136, 'OP_LoginReplyMsg', 4, 1), + (21560, 63136, 63136, 'OP_LoginRequestMsg', 0, 1), + (21561, 63136, 63136, 'OP_LootItemsRequestMsg', 188, 1), + (21562, 63136, 63136, 'OP_Lottery', 738, 1), + (21563, 63136, 63136, 'OP_LSCheckAcctLockMsg', 207, 1), + (21564, 63136, 63136, 'OP_LsClientAlertlogReplyMsg', 246, 1), + (21565, 63136, 63136, 'OP_LsClientBaselogReplyMsg', 244, 1), + (21566, 63136, 63136, 'OP_LsClientCrashlogReplyMsg', 245, 1), + (21567, 63136, 63136, 'OP_LsClientVerifylogReplyMsg', 247, 1), + (21568, 63136, 63136, 'OP_LsRequestClientCrashLogMsg', 243, 1), + (21569, 63136, 63136, 'OP_LSServerLockMsg', 369, 1), + (21570, 63136, 63136, 'OP_MacroInitMsg', 262, 1), + (21571, 63136, 63136, 'OP_MacroUpdateMsg', 263, 1), + (21572, 63136, 63136, 'OP_MailCommitSendMessageMsg', 348, 1), + (21573, 63136, 63136, 'OP_MailDeleteMessageMsg', 344, 1), + (21574, 63136, 63136, 'OP_MailEventNotificationMsg', 416, 1), + (21575, 63136, 63136, 'OP_MailGetHeadersReplyMsg', 345, 1), + (21576, 63136, 63136, 'OP_MailGetMessageMsg', 342, 1), + (21577, 63136, 63136, 'OP_MailGetMessageReplyMsg', 346, 1), + (21578, 63136, 63136, 'OP_MailRemoveAttachFromMailMsg', 350, 1), + (21579, 63136, 63136, 'OP_MailSendMessageMsg', 343, 1), + (21580, 63136, 63136, 'OP_MailSendMessageReplyMsg', 347, 1), + (21581, 63136, 63136, 'OP_MailSendSystemMessageMsg', 349, 1), + (21582, 63136, 63136, 'OP_MakeGroupLeaderMsg', 89, 1), + (21583, 63136, 63136, 'OP_MapFogDataInitMsg', 399, 1), + (21584, 63136, 63136, 'OP_MapFogDataUpdateMsg', 400, 1), + (21585, 63136, 63136, 'OP_MapRequest', 525, 1), + (21586, 63136, 63136, 'OP_MarketAddFundsReply', 533, 1), + (21587, 63136, 63136, 'OP_MarketAddFundsRequest', 532, 1), + (21588, 63136, 63136, 'OP_MarketFundsUpdate', 530, 1), + (21589, 63136, 63136, 'OP_MarketPlaceItems', 543, 1), + (21590, 63136, 63136, 'OP_MarketPlacePrices', 536, 1), + (21591, 63136, 63136, 'OP_MarketPurchase', 535, 1), + (21592, 63136, 63136, 'OP_MentorPopup', 564, 1), + (21593, 63136, 63136, 'OP_MercHireWindow', 786, 1), + (21594, 63136, 63136, 'OP_MercUnknown', 787, 1), + (21595, 63136, 63136, 'OP_MigrateBoatTransportMsg', 256, 1), + (21596, 63136, 63136, 'OP_MigrateBoatTransportReplyMsg', 257, 1), + (21597, 63136, 63136, 'OP_MigrateClientToZoneReplyMsg', 84, 1), + (21598, 63136, 63136, 'OP_MigrateClientToZoneRequestMsg', 83, 1), + (21599, 63136, 63136, 'OP_ModifyGuildMsg', 270, 1), + (21600, 63136, 63136, 'OP_MonitorCharacterListMsg', 58, 1), + (21601, 63136, 63136, 'OP_MonitorCharacterListRequestMsg', 59, 1), + (21602, 63136, 63136, 'OP_MonitorReplyMsg', 57, 1), + (21603, 63136, 63136, 'OP_MOTDMsg', 46, 1), + (21604, 63136, 63136, 'OP_MoveableObjectPlacementCriteri', 163, 1), + (21605, 63136, 63136, 'OP_MoveLogUpdateMsg', 405, 1), + (21606, 63136, 63136, 'OP_NotifyApprenticeStoppedMentori', 413, 1), + (21607, 63136, 63136, 'OP_OfferQuestMsg', 406, 1), + (21608, 63136, 63136, 'OP_OnscreenMsgMsg', 268, 1), + (21609, 63136, 63136, 'OP_OpenCharCust', 568, 1), + (21610, 63136, 63136, 'OP_OutOfZoneMemberDataMsg', 98, 1), + (21611, 63136, 63136, 'OP_PaperdollImage', 581, 1), + (21612, 63136, 63136, 'OP_PayHouseUpkeepMsg', 162, 1), + (21613, 63136, 63136, 'OP_PerformCameraShakeMsg', 217, 1), + (21614, 63136, 63136, 'OP_PerformPlayerKnockbackMsg', 216, 1), + (21615, 63136, 63136, 'OP_PetOptions', 204, 1), + (21616, 63136, 63136, 'OP_PetOptionsResponse', 585, 1), + (21617, 63136, 63136, 'OP_PlayCharacterReplyMsg', 21, 1), + (21618, 63136, 63136, 'OP_PlayCharacterRequestMsg', 20, 1), + (21619, 63136, 63136, 'OP_PlayerHouseAccessUpdateMsg', 150, 1), + (21620, 63136, 63136, 'OP_PlayerHouseBaseScreenMsg', 148, 1), + (21621, 63136, 63136, 'OP_PlayerHouseCloseUIMsg', 152, 1), + (21622, 63136, 63136, 'OP_PlayerHouseDisplayStatusMsg', 151, 1), + (21623, 63136, 63136, 'OP_PlayerHousePurchaseScreenMsg', 149, 1), + (21624, 63136, 63136, 'OP_PlayerMadeInstances', 143, 1), + (21625, 63136, 63136, 'OP_PlayerMadeInstancesScreen', 142, 1), + (21626, 63136, 63136, 'OP_PlayerPollAnswer', 563, 1), + (21627, 63136, 63136, 'OP_PlayerPollPopup', 562, 1), + (21628, 63136, 63136, 'OP_PlayLon', 516, 1), + (21629, 63136, 63136, 'OP_PointOfInterest', 764, 1), + (21630, 63136, 63136, 'OP_PointOfInterest2', 765, 1), + (21631, 63136, 63136, 'OP_PopulateSkillMapsMsg', 218, 1), + (21632, 63136, 63136, 'OP_PositionBoatTransportMsg', 255, 1), + (21633, 63136, 63136, 'OP_PositionMoveableObject', 165, 1), + (21634, 63136, 63136, 'OP_PostPossessionMsg', 459, 1), + (21635, 63136, 63136, 'OP_PredictionUpdateMsg', 39, 1), + (21636, 63136, 63136, 'OP_PrePossessionMsg', 458, 1), + (21637, 63136, 63136, 'OP_PromoFlagsDetailsMsg', 378, 1), + (21638, 63136, 63136, 'OP_PublishHouse', 141, 1), + (21639, 63136, 63136, 'OP_PurchaseConsignmentLoreCheckRe', 412, 1), + (21640, 63136, 63136, 'OP_PurchaseConsignmentRequestMsg', 131, 1), + (21641, 63136, 63136, 'OP_QueAllBgSolo', 571, 1), + (21642, 63136, 63136, 'OP_QuestionnaireMsg', 264, 1), + (21643, 63136, 63136, 'OP_QuestJournalInspectMsg', 116, 1), + (21644, 63136, 63136, 'OP_QuestJournalOpenMsg', 115, 1), + (21645, 63136, 63136, 'OP_QuestJournalSetVisibleMsg', 117, 1), + (21646, 63136, 63136, 'OP_QuestJournalWaypointMsg', 118, 1), + (21647, 63136, 63136, 'OP_QuestReward', 324, 1), + (21648, 63136, 63136, 'OP_QuickbarInitMsg', 260, 1), + (21649, 63136, 63136, 'OP_QuickbarUpdateMsg', 261, 1), + (21650, 63136, 63136, 'OP_RaceRestrictionMsg', 444, 1), + (21651, 63136, 63136, 'OP_ReadBookPageMsg', 199, 1), + (21652, 63136, 63136, 'OP_ReadyForTakeOffMsg', 195, 1), + (21653, 63136, 63136, 'OP_ReadyToZoneMsg', 86, 1), + (21654, 63136, 63136, 'OP_RecipeBook', 544, 1), + (21655, 63136, 63136, 'OP_RecipeDetailsMsg', 74, 1), + (21656, 63136, 63136, 'OP_RecipeList', 776, 1), + (21657, 63136, 63136, 'OP_RecipeListUnknown', 597, 1), + (21658, 63136, 63136, 'OP_RelinquishHouseMsg', 156, 1), + (21659, 63136, 63136, 'OP_ReloadLocalizedTxtMsg', 359, 1), + (21660, 63136, 63136, 'OP_RemoteCmdMsg', 44, 1), + (21661, 63136, 63136, 'OP_RemoveClientFromGroupMsg', 87, 1), + (21662, 63136, 63136, 'OP_RemoveConcentrationMsg', 114, 1), + (21663, 63136, 63136, 'OP_RemoveGroupFromGroupMsg', 88, 1), + (21664, 63136, 63136, 'OP_RemoveSpellEffectMsg', 113, 1), + (21665, 63136, 63136, 'OP_RenameGuildMsg', 286, 1), + (21666, 63136, 63136, 'OP_ReplaceableSubMeshesMsg', 168, 1), + (21667, 63136, 63136, 'OP_ReportMsg', 384, 1), + (21668, 63136, 63136, 'OP_RequestCampMsg', 52, 1), + (21669, 63136, 63136, 'OP_RequestGuildBankEventDetailsMs', 284, 1), + (21670, 63136, 63136, 'OP_RequestGuildEventDetailsMsg', 275, 1), + (21671, 63136, 63136, 'OP_RequestGuildInfoMsg', 277, 1), + (21672, 63136, 63136, 'OP_RequestGuildMembershipMsg', 360, 1), + (21673, 63136, 63136, 'OP_RequestHelpRepathMsg', 209, 1), + (21674, 63136, 63136, 'OP_RequestRecipeDetailsMsg', 73, 1), + (21675, 63136, 63136, 'OP_RequestTargetLocMsg', 210, 1), + (21676, 63136, 63136, 'OP_Research', 777, 1), + (21677, 63136, 63136, 'OP_ResendWorldChannelsMsg', 448, 1), + (21678, 63136, 63136, 'OP_ReskinCharacterRequestMsg', 15, 1), + (21679, 63136, 63136, 'OP_RestartZoneMsg', 417, 1), + (21680, 63136, 63136, 'OP_RewardPackMsg', 285, 1), + (21681, 63136, 63136, 'OP_SatMsg', 192, 1), + (21682, 63136, 63136, 'OP_SavageBarInitMsg', 584, 1), + (21683, 63136, 63136, 'OP_SelectZoneTeleporterDestinatio', 358, 1), + (21684, 63136, 63136, 'OP_SendLatestRequestMsg', 99, 1), + (21685, 63136, 63136, 'OP_ServerPlayCharacterReplyMsg', 26, 1), + (21686, 63136, 63136, 'OP_ServerPlayCharacterRequestMsg', 25, 1), + (21687, 63136, 63136, 'OP_SetInstanceDisplayNameMsg', 445, 1), + (21688, 63136, 63136, 'OP_SetRemoteCmdsMsg', 43, 1), + (21689, 63136, 63136, 'OP_SetSocialMsg', 101, 1), + (21690, 63136, 63136, 'OP_ShaderCustomizationMsg', 167, 1), + (21691, 63136, 63136, 'OP_ShowCreateFromRecipeUIMsg', 222, 1), + (21692, 63136, 63136, 'OP_ShowIllusionsMsg', 196, 1), + (21693, 63136, 63136, 'OP_ShowItemCreationProcessUIMsg', 226, 1), + (21694, 63136, 63136, 'OP_ShowRecipeBookMsg', 229, 1), + (21695, 63136, 63136, 'OP_ShowZoneTeleporterDestinations', 357, 1), + (21696, 63136, 63136, 'OP_SitMsg', 190, 1), + (21697, 63136, 63136, 'OP_SkillInfoRequest', 518, 1), + (21698, 63136, 63136, 'OP_SkillInfoResponse', 519, 1), + (21699, 63136, 63136, 'OP_SOEAllAccess', 640, 1), + (21700, 63136, 63136, 'OP_SpellGainedMsg', 266, 1), + (21701, 63136, 63136, 'OP_StandMsg', 191, 1), + (21702, 63136, 63136, 'OP_StoodMsg', 193, 1), + (21703, 63136, 63136, 'OP_StopItemCreationMsg', 225, 1), + (21704, 63136, 63136, 'OP_StoppedLootingMsg', 189, 1), + (21705, 63136, 63136, 'OP_StopTrackingMsg', 395, 1), + (21706, 63136, 63136, 'OP_SubmitCharCust', 569, 1), + (21707, 63136, 63136, 'OP_SupplyDepot', 774, 1), + (21708, 63136, 63136, 'OP_SysClient', 221, 1), + (21709, 63136, 63136, 'OP_TeleportWithinZoneMsg', 81, 1), + (21710, 63136, 63136, 'OP_TeleportWithinZoneNoReloadMsg', 82, 1), + (21711, 63136, 63136, 'OP_TintWidgetsMsg', 173, 1), + (21712, 63136, 63136, 'OP_TitleUpdateMsg', 388, 1), + (21713, 63136, 63136, 'OP_TrackingUpdateMsg', 393, 1), + (21714, 63136, 63136, 'OP_TradeskillList', 743, 1), + (21715, 63136, 63136, 'OP_TraitsList', 766, 1), + (21716, 63136, 63136, 'OP_UIEvent', 531, 1), + (21717, 63136, 63136, 'OP_UIResetMsg', 177, 1), + (21718, 63136, 63136, 'OP_UISettingsResponseMsg', 176, 1), + (21719, 63136, 63136, 'OP_Unknown', 800, 1), + (21720, 63136, 63136, 'OP_UnknownNpcMsg', 377, 1), + (21721, 63136, 63136, 'OP_UpdateActivePublicZonesMsg', 376, 1), + (21722, 63136, 63136, 'OP_UpdateCharacterSheetMsg', 65, 1), + (21723, 63136, 63136, 'OP_UpdateClientPredFlagsMsg', 249, 1), + (21724, 63136, 63136, 'OP_UpdateDebugRadiiMsg', 383, 1), + (21725, 63136, 63136, 'OP_UpdateGroupMemberDataMsg', 392, 1), + (21726, 63136, 63136, 'OP_UpdateHouseAccessDataMsg', 147, 1), + (21727, 63136, 63136, 'OP_UpdateHouseDataMsg', 146, 1), + (21728, 63136, 63136, 'OP_UpdateInventoryMsg', 70, 1), + (21729, 63136, 63136, 'OP_UpdateItemCreationProcessUIMsg', 227, 1), + (21730, 63136, 63136, 'OP_UpdateMotdMsg', 211, 1), + (21731, 63136, 63136, 'OP_UpdateOpportunityMsg', 77, 1), + (21732, 63136, 63136, 'OP_UpdatePositionMsg', 41, 1), + (21733, 63136, 63136, 'OP_UpdateRaidMsg', 385, 1), + (21734, 63136, 63136, 'OP_UpdateRecipeBookMsg', 72, 1), + (21735, 63136, 63136, 'OP_UpdateSkillBookMsg', 75, 1), + (21736, 63136, 63136, 'OP_UpdateSkillsMsg', 76, 1), + (21737, 63136, 63136, 'OP_UpdateSpellBookMsg', 68, 1), + (21738, 63136, 63136, 'OP_UpdateTargetLocMsg', 64, 1), + (21739, 63136, 63136, 'OP_UpdateTargetMsg', 63, 1), + (21740, 63136, 63136, 'OP_UpdateTitleCmd', 499, 1), + (21741, 63136, 63136, 'OP_UseAdornment', 754, 1), + (21742, 63136, 63136, 'OP_VideoUploaded', 583, 1), + (21743, 63136, 63136, 'OP_VoiceChatChannel', 524, 1), + (21744, 63136, 63136, 'OP_VoiceChatServer', 770, 1), + (21745, 63136, 63136, 'OP_WaypointReplyMsg', 353, 1), + (21746, 63136, 63136, 'OP_WaypointRequestMsg', 352, 1), + (21747, 63136, 63136, 'OP_WaypointSelectMsg', 354, 1), + (21748, 63136, 63136, 'OP_WaypointUpdateMsg', 355, 1), + (21749, 63136, 63136, 'OP_Weakness', 587, 1), + (21750, 63136, 63136, 'OP_WhoQueryReplyMsg', 56, 1), + (21751, 63136, 63136, 'OP_WhoQueryRequestMsg', 55, 1), + (21752, 63136, 63136, 'OP_WorldDataChangeMsg', 415, 1), + (21753, 63136, 63136, 'OP_WorldDataUpdateMsg', 240, 1), + (21754, 63136, 63136, 'OP_WorldListMsg', 8, 1), + (21755, 63136, 63136, 'OP_WorldPingMsg', 404, 1), + (21756, 63136, 63136, 'OP_WorldShutdownUpdateMsg', 408, 1), + (21757, 63136, 63136, 'OP_WorldStatusChangeMsg', 6, 1), + (21758, 63136, 63136, 'OP_WorldTravelAvail', 576, 1), + (21759, 63136, 63136, 'OP_WSAcctLockStatusMsg', 208, 1), + (21760, 63136, 63136, 'OP_WSCreateCharacterReplyMsg', 14, 1), + (21761, 63136, 63136, 'OP_WSCreateCharacterRequestMsg', 13, 1), + (21762, 63136, 63136, 'OP_WSLoginRequestMsg', 2, 1), + (21763, 63136, 63136, 'OP_WSServerHideMsg', 370, 1), + (21764, 63136, 63136, 'OP_WSServerLockMsg', 368, 1), + (21765, 63136, 63136, 'OP_WSStatusReplyMsg', 5, 1), + (21766, 63136, 63136, 'OP_ZoneBgInstanceList', 572, 1), + (21767, 63136, 63136, 'OP_ZoneInfoMsg', 35, 1), + (21768, 63136, 63136, 'OP_ZoneInstanceCreateReplyMsg', 32, 1), + (21769, 63136, 63136, 'OP_ZoneInstanceDestroyedMsg', 33, 1), + (21770, 63136, 63136, 'OP_ZoneMOTDMsg', 47, 1), + (21771, 63136, 63136, 'OP_ZonesStatusMsg', 105, 1), + (21772, 63136, 63136, 'OP_ZonesStatusRequestMsg', 104, 1), + (21773, 63136, 63136, 'OP_ZoneToFriendReplyMsg', 288, 1), + (21774, 63136, 63136, 'OP_ZoneToFriendRequestMsg', 287, 1), + (22238, 63137, 63166, 'OP_AchievementUpdateMsg', 781, 1), + (22239, 63137, 63166, 'OP_AddSocialStructureStandingMsg', 253, 1), + (22240, 63137, 63166, 'OP_AdvancementRequestMsg', 398, 1), + (22241, 63137, 63166, 'OP_AdventureList', 493, 1), + (22242, 63137, 63166, 'OP_AFKUpdateMsg', 374, 1), + (22243, 63137, 63166, 'OP_AfterInvSpellUpdate', 71, 1), + (22244, 63137, 63166, 'OP_AllCharactersDescReplyMsg', 10, 1), + (22245, 63137, 63166, 'OP_AllCharactersDescRequestMsg', 9, 1), + (22246, 63137, 63166, 'OP_AllWSDescRequestMsg', 7, 1), + (22247, 63137, 63166, 'OP_AnonUpdateMsg', 375, 1), + (22248, 63137, 63166, 'OP_ArenaCreate', 461, 1), + (22249, 63137, 63166, 'OP_ArenaGameTypesMsg', 450, 1), + (22250, 63137, 63166, 'OP_ArenaList', 462, 1), + (22251, 63137, 63166, 'OP_ArenaWindow', 470, 1), + (22252, 63137, 63166, 'OP_AttackAllowed', 505, 1), + (22253, 63137, 63166, 'OP_AttackNotAllowed', 506, 1), + (22254, 63137, 63166, 'OP_AuctionAbortMsg', 441, 1), + (22255, 63137, 63166, 'OP_AuctionCharacter', 438, 1), + (22256, 63137, 63166, 'OP_AuctionCharacterReply', 439, 1), + (22257, 63137, 63166, 'OP_AuctionCoin', 436, 1), + (22258, 63137, 63166, 'OP_AuctionCoinReply', 437, 1), + (22259, 63137, 63166, 'OP_AuctionCommitMsg', 440, 1), + (22260, 63137, 63166, 'OP_AuctionItem', 434, 1), + (22261, 63137, 63166, 'OP_AuctionItemReply', 435, 1), + (22262, 63137, 63166, 'OP_AuditAuctionEventMsg', 451, 1), + (22263, 63137, 63166, 'OP_AvatarCreatedMsg', 48, 1), + (22264, 63137, 63166, 'OP_AvatarDestroyedMsg', 49, 1), + (22265, 63137, 63166, 'OP_AvatarUpdateMsg', 364, 1), + (22266, 63137, 63166, 'OP_BadLanguageFilter', 523, 1), + (22267, 63137, 63166, 'OP_BagOptions', 507, 1), + (22268, 63137, 63166, 'OP_BeginItemCreationMsg', 224, 1), + (22269, 63137, 63166, 'OP_BeginTrackingMsg', 394, 1), + (22270, 63137, 63166, 'OP_BioUpdateMsg', 366, 1), + (22271, 63137, 63166, 'OP_BrokerAddBag', 296, 1), + (22272, 63137, 63166, 'OP_BrokerRemoveBag', 297, 1), + (22273, 63137, 63166, 'OP_BrokerSellList', 724, 1), + (22274, 63137, 63166, 'OP_BuyPlayerHouseMsg', 153, 1), + (22275, 63137, 63166, 'OP_BuyPlayerHouseTintMsg', 154, 1), + (22276, 63137, 63166, 'OP_CampAbortedMsg', 54, 1), + (22277, 63137, 63166, 'OP_CampClientMsg', 391, 1), + (22278, 63137, 63166, 'OP_CampStartedMsg', 53, 1), + (22279, 63137, 63166, 'OP_CancelCreateFromRecipeMsg', 223, 1), + (22280, 63137, 63166, 'OP_CancelledFeignMsg', 219, 1), + (22281, 63137, 63166, 'OP_CancelMoveObjectModeMsg', 166, 1), + (22282, 63137, 63166, 'OP_CancelSpellCast', 494, 1), + (22283, 63137, 63166, 'OP_ChangeServerControlFlagMsg', 250, 1), + (22284, 63137, 63166, 'OP_ChangeZoneMsg', 79, 1), + (22285, 63137, 63166, 'OP_CharacterAchievements', 780, 1), + (22286, 63137, 63166, 'OP_CharacterCreatedDungeons', 557, 1), + (22287, 63137, 63166, 'OP_CharacterCurrency', 779, 1), + (22288, 63137, 63166, 'OP_CharacterHousingList', 512, 1), + (22289, 63137, 63166, 'OP_CharacterLinkdeadMsg', 419, 1), + (22290, 63137, 63166, 'OP_CharacterMerc', 67, 1), + (22291, 63137, 63166, 'OP_CharacterMounts', 588, 1), + (22292, 63137, 63166, 'OP_CharacterPet', 66, 1), + (22293, 63137, 63166, 'OP_CharNameChangedMsg', 356, 1), + (22294, 63137, 63166, 'OP_CharRenamed', 745, 1), + (22295, 63137, 63166, 'OP_CharTransferCommitReplyMsg', 427, 1), + (22296, 63137, 63166, 'OP_CharTransferCommitRequestMsg', 425, 1), + (22297, 63137, 63166, 'OP_CharTransferReplyMsg', 423, 1), + (22298, 63137, 63166, 'OP_CharTransferRequestMsg', 422, 1), + (22299, 63137, 63166, 'OP_CharTransferRollbackReplyMsg', 426, 1), + (22300, 63137, 63166, 'OP_CharTransferRollbackRequestMsg', 424, 1), + (22301, 63137, 63166, 'OP_CharTransferStartReplyMsg', 421, 1), + (22302, 63137, 63166, 'OP_CharTransferStartRequestMsg', 420, 1), + (22303, 63137, 63166, 'OP_CharTransferValidateReplyMsg', 443, 1), + (22304, 63137, 63166, 'OP_CharTransferValidateRequestMsg', 442, 1), + (22305, 63137, 63166, 'OP_ChatCreateChannelMsg', 289, 1), + (22306, 63137, 63166, 'OP_ChatFiltersMsg', 338, 1), + (22307, 63137, 63166, 'OP_ChatJoinChannelMsg', 290, 1), + (22308, 63137, 63166, 'OP_ChatLeaveChannelMsg', 292, 1), + (22309, 63137, 63166, 'OP_ChatRelationshipUpdateMsg', 187, 1), + (22310, 63137, 63166, 'OP_ChatSendFriendsMsg', 299, 1), + (22311, 63137, 63166, 'OP_ChatSendIgnoresMsg', 300, 1), + (22312, 63137, 63166, 'OP_ChatTellChannelMsg', 293, 1), + (22313, 63137, 63166, 'OP_ChatTellUserMsg', 294, 1), + (22314, 63137, 63166, 'OP_ChatToggleFriendMsg', 295, 1), + (22315, 63137, 63166, 'OP_ChatToggleIgnoreMsg', 298, 1), + (22316, 63137, 63166, 'OP_ChatWhoChannelMsg', 291, 1), + (22317, 63137, 63166, 'OP_ClearDataMsg', 100, 1), + (22318, 63137, 63166, 'OP_ClearForLandingMsg', 496, 1), + (22319, 63137, 63166, 'OP_ClearForTakeOffMsg', 194, 1), + (22320, 63137, 63166, 'OP_ClientCmdMsg', 60, 1), + (22321, 63137, 63166, 'OP_ClientFellMsg', 389, 1), + (22322, 63137, 63166, 'OP_ClientIdleBeginMsg', 410, 1), + (22323, 63137, 63166, 'OP_ClientIdleEndMsg', 411, 1), + (22324, 63137, 63166, 'OP_ClientInDeathRegionMsg', 390, 1), + (22325, 63137, 63166, 'OP_ClientTeleportRequestMsg', 80, 1), + (22326, 63137, 63166, 'OP_ClientTeleportToLocationMsg', 248, 1), + (22327, 63137, 63166, 'OP_CloseGroupInviteWindowMsg', 401, 1), + (22328, 63137, 63166, 'OP_CollectAllHouseItemsMsg', 155, 1), + (22329, 63137, 63166, 'OP_ConsignItemRequestMsg', 129, 1), + (22330, 63137, 63166, 'OP_ConsignItemResponseMsg', 130, 1), + (22331, 63137, 63166, 'OP_ConsignmentCloseStoreMsg', 128, 1), + (22332, 63137, 63166, 'OP_ConsignRemoveItemsMsg', 382, 1), + (22333, 63137, 63166, 'OP_ConsignViewCreateMsg', 379, 1), + (22334, 63137, 63166, 'OP_ConsignViewGetPageMsg', 380, 1), + (22335, 63137, 63166, 'OP_ConsignViewReleaseMsg', 381, 1), + (22336, 63137, 63166, 'OP_ConsignViewSortMsg', 387, 1), + (22337, 63137, 63166, 'OP_CorruptedClientMsg', 414, 1), + (22338, 63137, 63166, 'OP_CreateBoatTransportsMsg', 254, 1), + (22339, 63137, 63166, 'OP_CreateCharacterDungeon', 551, 1), + (22340, 63137, 63166, 'OP_CreateCharacterReplyMsg', 12, 1), + (22341, 63137, 63166, 'OP_CreateCharacterRequestMsg', 11, 1), + (22342, 63137, 63166, 'OP_CreateCharFromCBBReplyMsg', 431, 1), + (22343, 63137, 63166, 'OP_CreateCharFromCBBRequestMsg', 430, 1), + (22344, 63137, 63166, 'OP_CreateGuildReplyMsg', 123, 1), + (22345, 63137, 63166, 'OP_CreateGuildRequestMsg', 121, 1), + (22346, 63137, 63166, 'OP_CreateZoneInstanceMsg', 31, 1), + (22347, 63137, 63166, 'OP_CsCategoryRequestMsg', 371, 1), + (22348, 63137, 63166, 'OP_CsCategoryResponseMsg', 372, 1), + (22349, 63137, 63166, 'OP_CSTicketAddCommentMsg', 237, 1), + (22350, 63137, 63166, 'OP_CSTicketChangeNotificationMsg', 239, 1), + (22351, 63137, 63166, 'OP_CSTicketCommentRequestMsg', 234, 1), + (22352, 63137, 63166, 'OP_CSTicketCommentResponseMsg', 235, 1), + (22353, 63137, 63166, 'OP_CSTicketCreateMsg', 236, 1), + (22354, 63137, 63166, 'OP_CSTicketDeleteMsg', 238, 1), + (22355, 63137, 63166, 'OP_CSTicketHeaderRequestMsg', 232, 1), + (22356, 63137, 63166, 'OP_CSTicketInfoMsg', 233, 1), + (22357, 63137, 63166, 'OP_CSToolAccessResponseMsg', 392, 1), + (22358, 63137, 63166, 'OP_CSToolsRequestMsg', 251, 1), + (22359, 63137, 63166, 'OP_CSToolsResponseMsg', 252, 1), + (22360, 63137, 63166, 'OP_CurrentPet', 490, 1), + (22361, 63137, 63166, 'OP_CustomizationPurchaseRequestMs', 170, 1), + (22362, 63137, 63166, 'OP_CustomizationReplyMsg', 172, 1), + (22363, 63137, 63166, 'OP_CustomizationSetRequestMsg', 171, 1), + (22364, 63137, 63166, 'OP_CustomizeHouseDisplay', 770, 1), + (22365, 63137, 63166, 'OP_DailyObjectives', 601, 1), + (22366, 63137, 63166, 'OP_DefaultGroupOptionsMsg', 201, 1), + (22367, 63137, 63166, 'OP_DefaultGroupOptionsRequestMsg', 200, 1), + (22368, 63137, 63166, 'OP_DeityAbilityWindow', 621, 1), + (22369, 63137, 63166, 'OP_DeleteCharacterReplyMsg', 19, 1), + (22370, 63137, 63166, 'OP_DeleteCharacterRequestMsg', 18, 1), + (22371, 63137, 63166, 'OP_DeleteGuildMsg', 126, 1), + (22372, 63137, 63166, 'OP_DestUpdateReq', 213, 1), + (22373, 63137, 63166, 'OP_DialogCloseMsg', 112, 1), + (22374, 63137, 63166, 'OP_DialogSelectMsg', 111, 1), + (22375, 63137, 63166, 'OP_DispatchClientCmdMsg', 62, 1), + (22376, 63137, 63166, 'OP_DispatchESMsg', 61, 1), + (22377, 63137, 63166, 'OP_DispatchMsg', 456, 1), + (22378, 63137, 63166, 'OP_DispatchSpellCmdMsg', 182, 1), + (22379, 63137, 63166, 'OP_DisplayDebugNLLPointsMsg', 258, 1), + (22380, 63137, 63166, 'OP_DisplayEventMsg', 457, 1), + (22381, 63137, 63166, 'OP_DisplayExchangeScreenMsg', 449, 1), + (22382, 63137, 63166, 'OP_DisplayGroupOptionsScreenMsg', 203, 1), + (22383, 63137, 63166, 'OP_DisplayInnVisitScreenMsg', 205, 1), + (22384, 63137, 63166, 'OP_DisplayMailScreenMsg', 409, 1), + (22385, 63137, 63166, 'OP_DisplayTSEventReactionMsg', 228, 1), + (22386, 63137, 63166, 'OP_DisplayWarningMsg', 269, 1), + (22387, 63137, 63166, 'OP_DoneLoadingEntityResourcesMsg', 38, 1), + (22388, 63137, 63166, 'OP_DoneLoadingZoneResourcesMsg', 36, 1), + (22389, 63137, 63166, 'OP_DoneSendingInitialEntitiesMsg', 37, 1), + (22390, 63137, 63166, 'OP_DressingRoom', 515, 1), + (22391, 63137, 63166, 'OP_DumpSchedulerMsg', 206, 1), + (22392, 63137, 63166, 'OP_DungeonMakerEnter', 552, 1), + (22393, 63137, 63166, 'OP_DungeonMakerItemRequest', 556, 1), + (22394, 63137, 63166, 'OP_DungeonMakerItemResponse', 586, 1), + (22395, 63137, 63166, 'OP_DungeonMakerToolboxList', 558, 1), + (22396, 63137, 63166, 'OP_DungeonMakerUnknown', 559, 1), + (22397, 63137, 63166, 'OP_DungeonMakerUnknown1', 560, 1), + (22398, 63137, 63166, 'OP_DungeonPlayAsAvatarList', 784, 1), + (22399, 63137, 63166, 'OP_DungeonPlayAsAvatarSelected', 785, 1), + (22400, 63137, 63166, 'OP_EarlyLandingRequestMsg', 491, 1), + (22401, 63137, 63166, 'OP_EncounterBrokenMsg', 267, 1), + (22402, 63137, 63166, 'OP_EnterHouseMsg', 157, 1), + (22403, 63137, 63166, 'OP_EnterMoveObjectModeMsg', 164, 1), + (22404, 63137, 63166, 'OP_EntityVerbsReplyMsg', 184, 1), + (22405, 63137, 63166, 'OP_EntityVerbsRequestMsg', 183, 1), + (22406, 63137, 63166, 'OP_EntityVerbsVerbMsg', 185, 1), + (22407, 63137, 63166, 'OP_EqArenaResultsCmd', 735, 1), + (22408, 63137, 63166, 'OP_EqAvailWorldChannelsCmd', 722, 1), + (22409, 63137, 63166, 'OP_EqBetaCopyRequest', 639, 1), + (22410, 63137, 63166, 'OP_EqCannedEmoteCmd', 664, 1), + (22411, 63137, 63166, 'OP_EqChatChannelUpdateCmd', 720, 1), + (22412, 63137, 63166, 'OP_EqChoiceWinCmd', 701, 1), + (22413, 63137, 63166, 'OP_EqCloseWindowCmd', 693, 1), + (22414, 63137, 63166, 'OP_EqCollectionFilterCmd', 680, 1), + (22415, 63137, 63166, 'OP_EqCollectionItemCmd', 681, 1), + (22416, 63137, 63166, 'OP_EqCollectionUpdateCmd', 679, 1), + (22417, 63137, 63166, 'OP_EqConsignmentItemsCmd', 725, 1), + (22418, 63137, 63166, 'OP_EqCreateGhostCmd', 646, 1), + (22419, 63137, 63166, 'OP_EqCreateListBoxCmd', 661, 1), + (22420, 63137, 63166, 'OP_EqCreateSignWidgetCmd', 648, 1), + (22421, 63137, 63166, 'OP_EqCreateWidgetCmd', 647, 1), + (22422, 63137, 63166, 'OP_EqDebugPVDCmd', 714, 1), + (22423, 63137, 63166, 'OP_EqDestroyGhostCmd', 649, 1), + (22424, 63137, 63166, 'OP_EqDialogCloseCmd', 677, 1), + (22425, 63137, 63166, 'OP_EqDialogOpenCmd', 676, 1), + (22426, 63137, 63166, 'OP_EqDisplaySpellFailCmd', 697, 1), + (22427, 63137, 63166, 'OP_EqDisplayTextCmd', 645, 1), + (22428, 63137, 63166, 'OP_EqDrawablePathGraphCmd', 675, 1), + (22429, 63137, 63166, 'OP_EqEnableGameEventCmd', 707, 1), + (22430, 63137, 63166, 'OP_EqEnableWindowCmd', 709, 1), + (22431, 63137, 63166, 'OP_EqExamineInfoCmd', 692, 1), + (22432, 63137, 63166, 'OP_EqFactionUpdateCmd', 678, 1), + (22433, 63137, 63166, 'OP_EqFlashWindowCmd', 710, 1), + (22434, 63137, 63166, 'OP_EqGetProbsCmd', 718, 1), + (22435, 63137, 63166, 'OP_EqGroupMemberRemovedCmd', 671, 1), + (22436, 63137, 63166, 'OP_EqGuildBankEventActionCmd', 736, 1), + (22437, 63137, 63166, 'OP_EqGuildBankExamineInfoCmd', 737, 1), + (22438, 63137, 63166, 'OP_EqHearChainEffectCmd', 672, 1), + (22439, 63137, 63166, 'OP_EqHearChatCmd', 644, 1), + (22440, 63137, 63166, 'OP_EqHearCombatCmd', 653, 1), + (22441, 63137, 63166, 'OP_EqHearConsiderCmd', 659, 1), + (22442, 63137, 63166, 'OP_EqHearDeathCmd', 670, 1), + (22443, 63137, 63166, 'OP_EQHearDispellCmd', 782, 1), + (22444, 63137, 63166, 'OP_EqHearDrowningCmd', 669, 1), + (22445, 63137, 63166, 'OP_EqHearHealCmd', 719, 1), + (22446, 63137, 63166, 'OP_EqHearPlayFlavorCmd', 712, 1), + (22447, 63137, 63166, 'OP_EQHearProcCmd', 655, 1), + (22448, 63137, 63166, 'OP_EQHearResEffectCmd', 656, 1), + (22449, 63137, 63166, 'OP_EqHearSpellCastCmd', 654, 1), + (22450, 63137, 63166, 'OP_EqHearSpellFizzleCmd', 658, 1), + (22451, 63137, 63166, 'OP_EqHearSpellInterruptCmd', 657, 1), + (22452, 63137, 63166, 'OP_EqHearSpellNoLandCmd', 738, 1), + (22453, 63137, 63166, 'OP_EQHearThreatCmd', 776, 1), + (22454, 63137, 63166, 'OP_EqHelpPathClearCmd', 690, 1), + (22455, 63137, 63166, 'OP_EqHelpPathCmd', 689, 1), + (22456, 63137, 63166, 'OP_EqInspectPCResultsCmd', 674, 1), + (22457, 63137, 63166, 'OP_EqInstructionWindowCloseCmd', 704, 1), + (22458, 63137, 63166, 'OP_EqInstructionWindowCmd', 703, 1), + (22459, 63137, 63166, 'OP_EqInstructionWindowGoalCmd', 705, 1), + (22460, 63137, 63166, 'OP_EqInstructionWindowTaskCmd', 706, 1), + (22461, 63137, 63166, 'OP_EqJunctionListCmd', 695, 1), + (22462, 63137, 63166, 'OP_EqMapExplorationCmd', 728, 1), + (22463, 63137, 63166, 'OP_EqMentoring', 683, 1), + (22464, 63137, 63166, 'OP_EqPlaySound3DCmd', 667, 1), + (22465, 63137, 63166, 'OP_EqPlaySoundCmd', 666, 1), + (22466, 63137, 63166, 'OP_EqPlayVoiceCmd', 668, 1), + (22467, 63137, 63166, 'OP_EqQuestGroupCmd', 685, 1), + (22468, 63137, 63166, 'OP_EqQuestionnaireCmd', 716, 1), + (22469, 63137, 63166, 'OP_EqQuestJournalReplyCmd', 684, 1), + (22470, 63137, 63166, 'OP_EqQuestJournalUpdateCmd', 682, 1), + (22471, 63137, 63166, 'OP_EqReceiveOfferCmd', 673, 1), + (22472, 63137, 63166, 'OP_EqResurrectedCmd', 700, 1), + (22473, 63137, 63166, 'OP_EqSetControlGhostCmd', 651, 1), + (22474, 63137, 63166, 'OP_EqSetDebugPathPointsCmd', 662, 1), + (22475, 63137, 63166, 'OP_EqSetDefaultVerbCmd', 702, 1), + (22476, 63137, 63166, 'OP_EqSetPOVGhostCmd', 652, 1), + (22477, 63137, 63166, 'OP_EqShowBookCmd', 715, 1), + (22478, 63137, 63166, 'OP_EqShowDeathWindowCmd', 696, 1), + (22479, 63137, 63166, 'OP_EqShowWindowCmd', 708, 1), + (22480, 63137, 63166, 'OP_EqSpellCastEndCmd', 699, 1), + (22481, 63137, 63166, 'OP_EqSpellCastStartCmd', 698, 1), + (22482, 63137, 63166, 'OP_EqSpellMoveToRangeAndRetryCmd', 730, 1), + (22483, 63137, 63166, 'OP_EqStartBrokerCmd', 727, 1), + (22484, 63137, 63166, 'OP_EqStateCmd', 665, 1), + (22485, 63137, 63166, 'OP_EqStoreLogCmd', 729, 1), + (22486, 63137, 63166, 'OP_EqUpdateBankCmd', 691, 1), + (22487, 63137, 63166, 'OP_EqUpdateGhostCmd', 650, 1), + (22488, 63137, 63166, 'OP_EqUpdateLootCmd', 694, 1), + (22489, 63137, 63166, 'OP_EqUpdateMerchantCmd', 686, 1), + (22490, 63137, 63166, 'OP_EqUpdatePlayerMailCmd', 731, 1), + (22491, 63137, 63166, 'OP_EqUpdatePlayerTradeCmd', 688, 1), + (22492, 63137, 63166, 'OP_EqUpdateSignWidgetCmd', 713, 1), + (22493, 63137, 63166, 'OP_EqUpdateStoreCmd', 687, 1), + (22494, 63137, 63166, 'OP_EqUpdateSubClassesCmd', 660, 1), + (22495, 63137, 63166, 'OP_EqUpdateTargetCmd', 723, 1), + (22496, 63137, 63166, 'OP_EqWhoChannelQueryReplyCmd', 721, 1), + (22497, 63137, 63166, 'OP_ESInitMsg', 27, 1), + (22498, 63137, 63166, 'OP_ESLoginRequestMsg', 3, 1), + (22499, 63137, 63166, 'OP_ESReadyForClientsMsg', 28, 1), + (22500, 63137, 63166, 'OP_ESStatusMsg', 102, 1), + (22501, 63137, 63166, 'OP_ESWeatherRequestEndMsg', 107, 1), + (22502, 63137, 63166, 'OP_ESWeatherRequestMsg', 106, 1), + (22503, 63137, 63166, 'OP_ESZoneInstanceStatusMsg', 103, 1), + (22504, 63137, 63166, 'OP_ExamineConsignmentRequestMsg', 174, 1), + (22505, 63137, 63166, 'OP_ExamineConsignmentResponseMsg', 175, 1), + (22506, 63137, 63166, 'OP_ExamineInfoRequestMsg', 259, 1), + (22507, 63137, 63166, 'OP_ExamineItemRequestMsg', 198, 1), + (22508, 63137, 63166, 'OP_ExitHouseMsg', 158, 1), + (22509, 63137, 63166, 'OP_ExpectClientAsCharacterReplyMs', 24, 1), + (22510, 63137, 63166, 'OP_ExpectClientAsCharacterRequest', 34, 1), + (22511, 63137, 63166, 'OP_ExpPurchWindow', 761, 1), + (22512, 63137, 63166, 'OP_FellowshipExpMsg', 125, 1), + (22513, 63137, 63166, 'OP_FlightPathsMsg', 418, 1), + (22514, 63137, 63166, 'OP_GameWorldTimeMsg', 45, 1), + (22515, 63137, 63166, 'OP_GetAuctionAssetIDMsg', 446, 1), + (22516, 63137, 63166, 'OP_GetAuctionAssetIDReplyMsg', 447, 1), + (22517, 63137, 63166, 'OP_GetAvatarAccessRequestForCSToo', 397, 1), + (22518, 63137, 63166, 'OP_GetCharacterSerializedReplyMsg', 429, 1), + (22519, 63137, 63166, 'OP_GetCharacterSerializedRequestM', 428, 1), + (22520, 63137, 63166, 'OP_GroupCreatedMsg', 90, 1), + (22521, 63137, 63166, 'OP_GroupDestroyedMsg', 91, 1), + (22522, 63137, 63166, 'OP_GroupLeaderChangedMsg', 95, 1), + (22523, 63137, 63166, 'OP_GroupMemberAddedMsg', 92, 1), + (22524, 63137, 63166, 'OP_GroupMemberRemovedMsg', 93, 1), + (22525, 63137, 63166, 'OP_GroupOptionsMsg', 202, 1), + (22526, 63137, 63166, 'OP_GroupRemovedFromGroupMsg', 94, 1), + (22527, 63137, 63166, 'OP_GroupResendOOZDataMsg', 96, 1), + (22528, 63137, 63166, 'OP_GroupSettingsChangedMsg', 97, 1), + (22529, 63137, 63166, 'OP_GuildBankActionMsg', 278, 1), + (22530, 63137, 63166, 'OP_GuildBankActionResponseMsg', 279, 1), + (22531, 63137, 63166, 'OP_GuildBankEventListMsg', 283, 1), + (22532, 63137, 63166, 'OP_GuildBankItemDetailsRequestMsg', 280, 1), + (22533, 63137, 63166, 'OP_GuildBankItemDetailsResponseMs', 281, 1), + (22534, 63137, 63166, 'OP_GuildBankUpdateMsg', 282, 1), + (22535, 63137, 63166, 'OP_GuildEventActionMsg', 273, 1), + (22536, 63137, 63166, 'OP_GuildEventAddMsg', 272, 1), + (22537, 63137, 63166, 'OP_GuildEventDetailsMsg', 276, 1), + (22538, 63137, 63166, 'OP_GuildEventListMsg', 274, 1), + (22539, 63137, 63166, 'OP_GuildEventMsg', 271, 1), + (22540, 63137, 63166, 'OP_GuildMembershipResponseMsg', 361, 1), + (22541, 63137, 63166, 'OP_GuildRecruiting', 741, 1), + (22542, 63137, 63166, 'OP_GuildRecruitingDetails', 742, 1), + (22543, 63137, 63166, 'OP_GuildRecruitingImage', 743, 1), + (22544, 63137, 63166, 'OP_GuildRecruitingMemberInfo', 740, 1), + (22545, 63137, 63166, 'OP_GuildsayMsg', 124, 1), + (22546, 63137, 63166, 'OP_GuildStatusUpdate', 734, 1), + (22547, 63137, 63166, 'OP_GuildUpdateMsg', 127, 1), + (22548, 63137, 63166, 'OP_HeritageMsg', 10027, 1), + (22549, 63137, 63166, 'OP_HideIllusionsMsg', 197, 1), + (22550, 63137, 63166, 'OP_HouseAccessRemoveMsg', 161, 1), + (22551, 63137, 63166, 'OP_HouseAccessSetMsg', 160, 1), + (22552, 63137, 63166, 'OP_HouseCustomizationScreenMsg', 169, 1), + (22553, 63137, 63166, 'OP_HouseDefaultAccessSetMsg', 159, 1), + (22554, 63137, 63166, 'OP_HouseDeletedRemotelyMsg', 145, 1), + (22555, 63137, 63166, 'OP_HouseItemsList', 489, 1), + (22556, 63137, 63166, 'OP_HousingDataChangedMsg', 432, 1), + (22557, 63137, 63166, 'OP_HousingRestoreMsg', 433, 1), + (22558, 63137, 63166, 'OP_InspectPlayerMsg', 367, 1), + (22559, 63137, 63166, 'OP_InspectPlayerRequestMsg', 455, 1), + (22560, 63137, 63166, 'OP_InviteRequestMsg', 452, 1), + (22561, 63137, 63166, 'OP_InviteResponseMsg', 453, 1), + (22562, 63137, 63166, 'OP_InviteTargetResponseMsg', 454, 1), + (22563, 63137, 63166, 'OP_JoinGuildNotifyMsg', 363, 1), + (22564, 63137, 63166, 'OP_JournalQuestStoryline', 783, 1), + (22565, 63137, 63166, 'OP_KeymapDataMsg', 180, 1), + (22566, 63137, 63166, 'OP_KeymapLoadMsg', 178, 1), + (22567, 63137, 63166, 'OP_KeymapNoneMsg', 179, 1), + (22568, 63137, 63166, 'OP_KeymapSaveMsg', 181, 1), + (22569, 63137, 63166, 'OP_KnowledgebaseRequestMsg', 230, 1), + (22570, 63137, 63166, 'OP_KnowledgebaseResponseMsg', 231, 1), + (22571, 63137, 63166, 'OP_KnowledgeWindowSlotMappingMsg', 373, 1), + (22572, 63137, 63166, 'OP_KnownLanguagesMsg', 242, 1), + (22573, 63137, 63166, 'OP_Launchpad', 579, 1), + (22574, 63137, 63166, 'OP_LeaveGuildNotifyMsg', 362, 1), + (22575, 63137, 63166, 'OP_LevelChangedMsg', 265, 1), + (22576, 63137, 63166, 'OP_LFGGroupSearch', 509, 1), + (22577, 63137, 63166, 'OP_LFGUpdateMsg', 522, 1), + (22578, 63137, 63166, 'OP_LikeOption', 139, 1), + (22579, 63137, 63166, 'OP_LoadCalendarEvents', 582, 1), + (22580, 63137, 63166, 'OP_LoadWelcomeWindow', 566, 1), + (22581, 63137, 63166, 'OP_LoginByNumRequestMsg', 1, 1), + (22582, 63137, 63166, 'OP_LoginReplyMsg', 4, 1), + (22583, 63137, 63166, 'OP_LoginRequestMsg', 0, 1), + (22584, 63137, 63166, 'OP_LootItemsRequestMsg', 188, 1), + (22585, 63137, 63166, 'OP_Lottery', 739, 1), + (22586, 63137, 63166, 'OP_LSCheckAcctLockMsg', 207, 1), + (22587, 63137, 63166, 'OP_LsClientAlertlogReplyMsg', 246, 1), + (22588, 63137, 63166, 'OP_LsClientBaselogReplyMsg', 244, 1), + (22589, 63137, 63166, 'OP_LsClientCrashlogReplyMsg', 245, 1), + (22590, 63137, 63166, 'OP_LsClientVerifylogReplyMsg', 247, 1), + (22591, 63137, 63166, 'OP_LsRequestClientCrashLogMsg', 243, 1), + (22592, 63137, 63166, 'OP_LSServerLockMsg', 369, 1), + (22593, 63137, 63166, 'OP_MacroInitMsg', 262, 1), + (22594, 63137, 63166, 'OP_MacroUpdateMsg', 263, 1), + (22595, 63137, 63166, 'OP_MailCommitSendMessageMsg', 348, 1), + (22596, 63137, 63166, 'OP_MailDeleteMessageMsg', 344, 1), + (22597, 63137, 63166, 'OP_MailEventNotificationMsg', 416, 1), + (22598, 63137, 63166, 'OP_MailGetHeadersReplyMsg', 345, 1), + (22599, 63137, 63166, 'OP_MailGetMessageMsg', 342, 1), + (22600, 63137, 63166, 'OP_MailGetMessageReplyMsg', 346, 1), + (22601, 63137, 63166, 'OP_MailRemoveAttachFromMailMsg', 350, 1), + (22602, 63137, 63166, 'OP_MailSendMessageMsg', 343, 1), + (22603, 63137, 63166, 'OP_MailSendMessageReplyMsg', 347, 1), + (22604, 63137, 63166, 'OP_MailSendSystemMessageMsg', 349, 1), + (22605, 63137, 63166, 'OP_MakeGroupLeaderMsg', 89, 1), + (22606, 63137, 63166, 'OP_MapFogDataInitMsg', 399, 1), + (22607, 63137, 63166, 'OP_MapFogDataUpdateMsg', 400, 1), + (22608, 63137, 63166, 'OP_MapRequest', 525, 1), + (22609, 63137, 63166, 'OP_MarketAddFundsReply', 533, 1), + (22610, 63137, 63166, 'OP_MarketAddFundsRequest', 532, 1), + (22611, 63137, 63166, 'OP_MarketFundsUpdate', 530, 1), + (22612, 63137, 63166, 'OP_MarketPlaceItems', 543, 1), + (22613, 63137, 63166, 'OP_MarketPlacePrices', 536, 1), + (22614, 63137, 63166, 'OP_MarketPurchase', 535, 1), + (22615, 63137, 63166, 'OP_MentorPopup', 564, 1), + (22616, 63137, 63166, 'OP_MercHireWindow', 787, 1), + (22617, 63137, 63166, 'OP_MercUnknown', 788, 1), + (22618, 63137, 63166, 'OP_MigrateBoatTransportMsg', 256, 1), + (22619, 63137, 63166, 'OP_MigrateBoatTransportReplyMsg', 257, 1), + (22620, 63137, 63166, 'OP_MigrateClientToZoneReplyMsg', 84, 1), + (22621, 63137, 63166, 'OP_MigrateClientToZoneRequestMsg', 83, 1), + (22622, 63137, 63166, 'OP_ModifyGuildMsg', 270, 1), + (22623, 63137, 63166, 'OP_MonitorCharacterListMsg', 58, 1), + (22624, 63137, 63166, 'OP_MonitorCharacterListRequestMsg', 59, 1), + (22625, 63137, 63166, 'OP_MonitorReplyMsg', 57, 1), + (22626, 63137, 63166, 'OP_MOTDMsg', 46, 1), + (22627, 63137, 63166, 'OP_MoveableObjectPlacementCriteri', 163, 1), + (22628, 63137, 63166, 'OP_MoveLogUpdateMsg', 405, 1), + (22629, 63137, 63166, 'OP_NotifyApprenticeStoppedMentori', 413, 1), + (22630, 63137, 63166, 'OP_OfferQuestMsg', 406, 1), + (22631, 63137, 63166, 'OP_OnscreenMsgMsg', 268, 1), + (22632, 63137, 63166, 'OP_OpenCharCust', 568, 1), + (22633, 63137, 63166, 'OP_OutOfZoneMemberDataMsg', 98, 1), + (22634, 63137, 63166, 'OP_PaperdollImage', 581, 1), + (22635, 63137, 63166, 'OP_PayHouseUpkeepMsg', 162, 1), + (22636, 63137, 63166, 'OP_PerformCameraShakeMsg', 217, 1), + (22637, 63137, 63166, 'OP_PerformPlayerKnockbackMsg', 216, 1), + (22638, 63137, 63166, 'OP_PetOptions', 204, 1), + (22639, 63137, 63166, 'OP_PetOptionsResponse', 585, 1), + (22640, 63137, 63166, 'OP_PlayCharacterReplyMsg', 21, 1), + (22641, 63137, 63166, 'OP_PlayCharacterRequestMsg', 20, 1), + (22642, 63137, 63166, 'OP_PlayerHouseAccessUpdateMsg', 150, 1), + (22643, 63137, 63166, 'OP_PlayerHouseBaseScreenMsg', 148, 1), + (22644, 63137, 63166, 'OP_PlayerHouseCloseUIMsg', 152, 1), + (22645, 63137, 63166, 'OP_PlayerHouseDisplayStatusMsg', 151, 1), + (22646, 63137, 63166, 'OP_PlayerHousePurchaseScreenMsg', 149, 1), + (22647, 63137, 63166, 'OP_PlayerMadeInstances', 143, 1), + (22648, 63137, 63166, 'OP_PlayerMadeInstancesScreen', 142, 1), + (22649, 63137, 63166, 'OP_PlayerPollAnswer', 563, 1), + (22650, 63137, 63166, 'OP_PlayerPollPopup', 562, 1), + (22651, 63137, 63166, 'OP_PlayLon', 516, 1), + (22652, 63137, 63166, 'OP_PointOfInterest', 765, 1), + (22653, 63137, 63166, 'OP_PointOfInterest2', 766, 1), + (22654, 63137, 63166, 'OP_PopulateSkillMapsMsg', 218, 1), + (22655, 63137, 63166, 'OP_PositionBoatTransportMsg', 255, 1), + (22656, 63137, 63166, 'OP_PositionMoveableObject', 165, 1), + (22657, 63137, 63166, 'OP_PostPossessionMsg', 459, 1), + (22658, 63137, 63166, 'OP_PredictionUpdateMsg', 39, 1), + (22659, 63137, 63166, 'OP_PrePossessionMsg', 458, 1), + (22660, 63137, 63166, 'OP_PromoFlagsDetailsMsg', 378, 1), + (22661, 63137, 63166, 'OP_PublishHouse', 141, 1), + (22662, 63137, 63166, 'OP_PurchaseConsignmentLoreCheckRe', 412, 1), + (22663, 63137, 63166, 'OP_PurchaseConsignmentRequestMsg', 131, 1), + (22664, 63137, 63166, 'OP_QueAllBgSolo', 571, 1), + (22665, 63137, 63166, 'OP_QuestionnaireMsg', 264, 1), + (22666, 63137, 63166, 'OP_QuestJournalInspectMsg', 116, 1), + (22667, 63137, 63166, 'OP_QuestJournalOpenMsg', 115, 1), + (22668, 63137, 63166, 'OP_QuestJournalSetVisibleMsg', 117, 1), + (22669, 63137, 63166, 'OP_QuestJournalWaypointMsg', 118, 1), + (22670, 63137, 63166, 'OP_QuestReward', 324, 1), + (22671, 63137, 63166, 'OP_QuickbarInitMsg', 260, 1), + (22672, 63137, 63166, 'OP_QuickbarUpdateMsg', 261, 1), + (22673, 63137, 63166, 'OP_RaceRestrictionMsg', 444, 1), + (22674, 63137, 63166, 'OP_ReadBookPageMsg', 199, 1), + (22675, 63137, 63166, 'OP_ReadyForTakeOffMsg', 195, 1), + (22676, 63137, 63166, 'OP_ReadyToZoneMsg', 86, 1), + (22677, 63137, 63166, 'OP_RecipeBook', 544, 1), + (22678, 63137, 63166, 'OP_RecipeDetailsMsg', 74, 1), + (22679, 63137, 63166, 'OP_RecipeList', 777, 1), + (22680, 63137, 63166, 'OP_RecipeListUnknown', 597, 1), + (22681, 63137, 63166, 'OP_RelinquishHouseMsg', 156, 1), + (22682, 63137, 63166, 'OP_ReloadLocalizedTxtMsg', 359, 1), + (22683, 63137, 63166, 'OP_RemoteCmdMsg', 44, 1), + (22684, 63137, 63166, 'OP_RemoveClientFromGroupMsg', 87, 1), + (22685, 63137, 63166, 'OP_RemoveConcentrationMsg', 114, 1), + (22686, 63137, 63166, 'OP_RemoveGroupFromGroupMsg', 88, 1), + (22687, 63137, 63166, 'OP_RemoveSpellEffectMsg', 113, 1), + (22688, 63137, 63166, 'OP_RenameGuildMsg', 286, 1), + (22689, 63137, 63166, 'OP_ReplaceableSubMeshesMsg', 168, 1), + (22690, 63137, 63166, 'OP_ReportMsg', 384, 1), + (22691, 63137, 63166, 'OP_RequestCampMsg', 52, 1), + (22692, 63137, 63166, 'OP_RequestGuildBankEventDetailsMs', 284, 1), + (22693, 63137, 63166, 'OP_RequestGuildEventDetailsMsg', 275, 1), + (22694, 63137, 63166, 'OP_RequestGuildInfoMsg', 277, 1), + (22695, 63137, 63166, 'OP_RequestGuildMembershipMsg', 360, 1), + (22696, 63137, 63166, 'OP_RequestHelpRepathMsg', 209, 1), + (22697, 63137, 63166, 'OP_RequestRecipeDetailsMsg', 73, 1), + (22698, 63137, 63166, 'OP_RequestTargetLocMsg', 210, 1), + (22699, 63137, 63166, 'OP_Research', 778, 1), + (22700, 63137, 63166, 'OP_ResendWorldChannelsMsg', 448, 1), + (22701, 63137, 63166, 'OP_ReskinCharacterRequestMsg', 15, 1), + (22702, 63137, 63166, 'OP_RestartZoneMsg', 417, 1), + (22703, 63137, 63166, 'OP_RewardPackMsg', 285, 1), + (22704, 63137, 63166, 'OP_SatMsg', 192, 1), + (22705, 63137, 63166, 'OP_SavageBarInitMsg', 584, 1), + (22706, 63137, 63166, 'OP_SelectZoneTeleporterDestinatio', 358, 1), + (22707, 63137, 63166, 'OP_SendLatestRequestMsg', 99, 1), + (22708, 63137, 63166, 'OP_ServerPlayCharacterReplyMsg', 26, 1), + (22709, 63137, 63166, 'OP_ServerPlayCharacterRequestMsg', 25, 1), + (22710, 63137, 63166, 'OP_SetInstanceDisplayNameMsg', 445, 1), + (22711, 63137, 63166, 'OP_SetRemoteCmdsMsg', 43, 1), + (22712, 63137, 63166, 'OP_SetSocialMsg', 101, 1), + (22713, 63137, 63166, 'OP_ShaderCustomizationMsg', 167, 1), + (22714, 63137, 63166, 'OP_ShowCreateFromRecipeUIMsg', 222, 1), + (22715, 63137, 63166, 'OP_ShowIllusionsMsg', 196, 1), + (22716, 63137, 63166, 'OP_ShowItemCreationProcessUIMsg', 226, 1), + (22717, 63137, 63166, 'OP_ShowRecipeBookMsg', 229, 1), + (22718, 63137, 63166, 'OP_ShowZoneTeleporterDestinations', 357, 1), + (22719, 63137, 63166, 'OP_SitMsg', 190, 1), + (22720, 63137, 63166, 'OP_SkillInfoRequest', 518, 1), + (22721, 63137, 63166, 'OP_SkillInfoResponse', 519, 1), + (22722, 63137, 63166, 'OP_SOEAllAccess', 640, 1), + (22723, 63137, 63166, 'OP_SpellGainedMsg', 266, 1), + (22724, 63137, 63166, 'OP_StandMsg', 191, 1), + (22725, 63137, 63166, 'OP_StoodMsg', 193, 1), + (22726, 63137, 63166, 'OP_StopItemCreationMsg', 225, 1), + (22727, 63137, 63166, 'OP_StoppedLootingMsg', 189, 1), + (22728, 63137, 63166, 'OP_StopTrackingMsg', 395, 1), + (22729, 63137, 63166, 'OP_SubmitCharCust', 569, 1), + (22730, 63137, 63166, 'OP_SupplyDepot', 775, 1), + (22731, 63137, 63166, 'OP_SysClient', 221, 1), + (22732, 63137, 63166, 'OP_TeleportWithinZoneMsg', 81, 1), + (22733, 63137, 63166, 'OP_TeleportWithinZoneNoReloadMsg', 82, 1), + (22734, 63137, 63166, 'OP_TintWidgetsMsg', 173, 1), + (22735, 63137, 63166, 'OP_TitleUpdateMsg', 388, 1), + (22736, 63137, 63166, 'OP_TrackingUpdateMsg', 393, 1), + (22737, 63137, 63166, 'OP_TradeskillList', 744, 1), + (22738, 63137, 63166, 'OP_TraitsList', 767, 1), + (22739, 63137, 63166, 'OP_UIEvent', 531, 1), + (22740, 63137, 63166, 'OP_UIResetMsg', 177, 1), + (22741, 63137, 63166, 'OP_UISettingsResponseMsg', 176, 1), + (22742, 63137, 63166, 'OP_Unknown', 801, 1), + (22743, 63137, 63166, 'OP_UnknownNpcMsg', 377, 1), + (22744, 63137, 63166, 'OP_UpdateActivePublicZonesMsg', 376, 1), + (22745, 63137, 63166, 'OP_UpdateCharacterSheetMsg', 65, 1), + (22746, 63137, 63166, 'OP_UpdateClientPredFlagsMsg', 249, 1), + (22747, 63137, 63166, 'OP_UpdateDebugRadiiMsg', 383, 1), + (22748, 63137, 63166, 'OP_UpdateGroupMemberDataMsg', 392, 1), + (22749, 63137, 63166, 'OP_UpdateHouseAccessDataMsg', 147, 1), + (22750, 63137, 63166, 'OP_UpdateHouseDataMsg', 146, 1), + (22751, 63137, 63166, 'OP_UpdateInventoryMsg', 70, 1), + (22752, 63137, 63166, 'OP_UpdateItemCreationProcessUIMsg', 227, 1), + (22753, 63137, 63166, 'OP_UpdateMotdMsg', 211, 1), + (22754, 63137, 63166, 'OP_UpdateOpportunityMsg', 77, 1), + (22755, 63137, 63166, 'OP_UpdatePositionMsg', 41, 1), + (22756, 63137, 63166, 'OP_UpdateRaidMsg', 385, 1), + (22757, 63137, 63166, 'OP_UpdateRecipeBookMsg', 72, 1), + (22758, 63137, 63166, 'OP_UpdateSkillBookMsg', 75, 1), + (22759, 63137, 63166, 'OP_UpdateSkillsMsg', 76, 1), + (22760, 63137, 63166, 'OP_UpdateSpellBookMsg', 68, 1), + (22761, 63137, 63166, 'OP_UpdateTargetLocMsg', 64, 1), + (22762, 63137, 63166, 'OP_UpdateTargetMsg', 63, 1), + (22763, 63137, 63166, 'OP_UpdateTitleCmd', 499, 1), + (22764, 63137, 63166, 'OP_UseAdornment', 755, 1), + (22765, 63137, 63166, 'OP_VideoUploaded', 583, 1), + (22766, 63137, 63166, 'OP_VoiceChatChannel', 524, 1), + (22767, 63137, 63166, 'OP_VoiceChatServer', 771, 1), + (22768, 63137, 63166, 'OP_WaypointReplyMsg', 353, 1), + (22769, 63137, 63166, 'OP_WaypointRequestMsg', 352, 1), + (22770, 63137, 63166, 'OP_WaypointSelectMsg', 354, 1), + (22771, 63137, 63166, 'OP_WaypointUpdateMsg', 355, 1), + (22772, 63137, 63166, 'OP_Weakness', 587, 1), + (22773, 63137, 63166, 'OP_WhoQueryReplyMsg', 56, 1), + (22774, 63137, 63166, 'OP_WhoQueryRequestMsg', 55, 1), + (22775, 63137, 63166, 'OP_WorldDataChangeMsg', 415, 1), + (22776, 63137, 63166, 'OP_WorldDataUpdateMsg', 240, 1), + (22777, 63137, 63166, 'OP_WorldListMsg', 8, 1), + (22778, 63137, 63166, 'OP_WorldPingMsg', 404, 1), + (22779, 63137, 63166, 'OP_WorldShutdownUpdateMsg', 408, 1), + (22780, 63137, 63166, 'OP_WorldStatusChangeMsg', 6, 1), + (22781, 63137, 63166, 'OP_WorldTravelAvail', 576, 1), + (22782, 63137, 63166, 'OP_WSAcctLockStatusMsg', 208, 1), + (22783, 63137, 63166, 'OP_WSCreateCharacterReplyMsg', 14, 1), + (22784, 63137, 63166, 'OP_WSCreateCharacterRequestMsg', 13, 1), + (22785, 63137, 63166, 'OP_WSLoginRequestMsg', 2, 1), + (22786, 63137, 63166, 'OP_WSServerHideMsg', 370, 1), + (22787, 63137, 63166, 'OP_WSServerLockMsg', 368, 1), + (22788, 63137, 63166, 'OP_WSStatusReplyMsg', 5, 1), + (22789, 63137, 63166, 'OP_ZoneBgInstanceList', 572, 1), + (22790, 63137, 63166, 'OP_ZoneInfoMsg', 35, 1), + (22791, 63137, 63166, 'OP_ZoneInstanceCreateReplyMsg', 32, 1), + (22792, 63137, 63166, 'OP_ZoneInstanceDestroyedMsg', 33, 1), + (22793, 63137, 63166, 'OP_ZoneMOTDMsg', 47, 1), + (22794, 63137, 63166, 'OP_ZonesStatusMsg', 105, 1), + (22795, 63137, 63166, 'OP_ZonesStatusRequestMsg', 104, 1), + (22796, 63137, 63166, 'OP_ZoneToFriendReplyMsg', 288, 1), + (22797, 63137, 63166, 'OP_ZoneToFriendRequestMsg', 287, 1), + (23261, 63167, 63210, 'OP_AchievementUpdateMsg', 777, 1), + (23262, 63167, 63210, 'OP_AddSocialStructureStandingMsg', 253, 1), + (23263, 63167, 63210, 'OP_AdvancementRequestMsg', 398, 1), + (23264, 63167, 63210, 'OP_AdventureList', 493, 1), + (23265, 63167, 63210, 'OP_AFKUpdateMsg', 374, 1), + (23266, 63167, 63210, 'OP_AfterInvSpellUpdate', 71, 1), + (23267, 63167, 63210, 'OP_AllCharactersDescReplyMsg', 10, 1), + (23268, 63167, 63210, 'OP_AllCharactersDescRequestMsg', 9, 1), + (23269, 63167, 63210, 'OP_AllWSDescRequestMsg', 7, 1), + (23270, 63167, 63210, 'OP_AnonUpdateMsg', 375, 1), + (23271, 63167, 63210, 'OP_ArenaCreate', 461, 1), + (23272, 63167, 63210, 'OP_ArenaGameTypesMsg', 450, 1), + (23273, 63167, 63210, 'OP_ArenaList', 462, 1), + (23274, 63167, 63210, 'OP_ArenaWindow', 470, 1), + (23275, 63167, 63210, 'OP_AttackAllowed', 505, 1), + (23276, 63167, 63210, 'OP_AttackNotAllowed', 506, 1), + (23277, 63167, 63210, 'OP_AuctionAbortMsg', 441, 1), + (23278, 63167, 63210, 'OP_AuctionCharacter', 438, 1), + (23279, 63167, 63210, 'OP_AuctionCharacterReply', 439, 1), + (23280, 63167, 63210, 'OP_AuctionCoin', 436, 1), + (23281, 63167, 63210, 'OP_AuctionCoinReply', 437, 1), + (23282, 63167, 63210, 'OP_AuctionCommitMsg', 440, 1), + (23283, 63167, 63210, 'OP_AuctionItem', 434, 1), + (23284, 63167, 63210, 'OP_AuctionItemReply', 435, 1), + (23285, 63167, 63210, 'OP_AuditAuctionEventMsg', 451, 1), + (23286, 63167, 63210, 'OP_AvatarCreatedMsg', 48, 1), + (23287, 63167, 63210, 'OP_AvatarDestroyedMsg', 49, 1), + (23288, 63167, 63210, 'OP_AvatarUpdateMsg', 364, 1), + (23289, 63167, 63210, 'OP_BadLanguageFilter', 523, 1), + (23290, 63167, 63210, 'OP_BagOptions', 507, 1), + (23291, 63167, 63210, 'OP_BeginItemCreationMsg', 224, 1), + (23292, 63167, 63210, 'OP_BeginTrackingMsg', 394, 1), + (23293, 63167, 63210, 'OP_BioUpdateMsg', 366, 1), + (23294, 63167, 63210, 'OP_BrokerAddBag', 296, 1), + (23295, 63167, 63210, 'OP_BrokerRemoveBag', 297, 1), + (23296, 63167, 63210, 'OP_BrokerSellList', 720, 1), + (23297, 63167, 63210, 'OP_BuyPlayerHouseMsg', 153, 1), + (23298, 63167, 63210, 'OP_BuyPlayerHouseTintMsg', 154, 1), + (23299, 63167, 63210, 'OP_CampAbortedMsg', 54, 1), + (23300, 63167, 63210, 'OP_CampClientMsg', 391, 1), + (23301, 63167, 63210, 'OP_CampStartedMsg', 53, 1), + (23302, 63167, 63210, 'OP_CancelCreateFromRecipeMsg', 223, 1), + (23303, 63167, 63210, 'OP_CancelledFeignMsg', 219, 1), + (23304, 63167, 63210, 'OP_CancelMoveObjectModeMsg', 166, 1), + (23305, 63167, 63210, 'OP_CancelSpellCast', 494, 1), + (23306, 63167, 63210, 'OP_ChangeServerControlFlagMsg', 250, 1), + (23307, 63167, 63210, 'OP_ChangeZoneMsg', 79, 1), + (23308, 63167, 63210, 'OP_CharacterAchievements', 776, 1), + (23309, 63167, 63210, 'OP_CharacterCreatedDungeons', 557, 1), + (23310, 63167, 63210, 'OP_CharacterCurrency', 775, 1), + (23311, 63167, 63210, 'OP_CharacterHousingList', 512, 1), + (23312, 63167, 63210, 'OP_CharacterLinkdeadMsg', 419, 1), + (23313, 63167, 63210, 'OP_CharacterMerc', 67, 1), + (23314, 63167, 63210, 'OP_CharacterMounts', 588, 1), + (23315, 63167, 63210, 'OP_CharacterPet', 66, 1), + (23316, 63167, 63210, 'OP_CharNameChangedMsg', 356, 1), + (23317, 63167, 63210, 'OP_CharRenamed', 741, 1), + (23318, 63167, 63210, 'OP_CharTransferCommitReplyMsg', 427, 1), + (23319, 63167, 63210, 'OP_CharTransferCommitRequestMsg', 425, 1), + (23320, 63167, 63210, 'OP_CharTransferReplyMsg', 423, 1), + (23321, 63167, 63210, 'OP_CharTransferRequestMsg', 422, 1), + (23322, 63167, 63210, 'OP_CharTransferRollbackReplyMsg', 426, 1), + (23323, 63167, 63210, 'OP_CharTransferRollbackRequestMsg', 424, 1), + (23324, 63167, 63210, 'OP_CharTransferStartReplyMsg', 421, 1), + (23325, 63167, 63210, 'OP_CharTransferStartRequestMsg', 420, 1), + (23326, 63167, 63210, 'OP_CharTransferValidateReplyMsg', 443, 1), + (23327, 63167, 63210, 'OP_CharTransferValidateRequestMsg', 442, 1), + (23328, 63167, 63210, 'OP_ChatCreateChannelMsg', 289, 1), + (23329, 63167, 63210, 'OP_ChatFiltersMsg', 338, 1), + (23330, 63167, 63210, 'OP_ChatJoinChannelMsg', 290, 1), + (23331, 63167, 63210, 'OP_ChatLeaveChannelMsg', 292, 1), + (23332, 63167, 63210, 'OP_ChatRelationshipUpdateMsg', 187, 1), + (23333, 63167, 63210, 'OP_ChatSendFriendsMsg', 299, 1), + (23334, 63167, 63210, 'OP_ChatSendIgnoresMsg', 300, 1), + (23335, 63167, 63210, 'OP_ChatTellChannelMsg', 293, 1), + (23336, 63167, 63210, 'OP_ChatTellUserMsg', 294, 1), + (23337, 63167, 63210, 'OP_ChatToggleFriendMsg', 295, 1), + (23338, 63167, 63210, 'OP_ChatToggleIgnoreMsg', 298, 1), + (23339, 63167, 63210, 'OP_ChatWhoChannelMsg', 291, 1), + (23340, 63167, 63210, 'OP_ClearDataMsg', 100, 1), + (23341, 63167, 63210, 'OP_ClearForLandingMsg', 496, 1), + (23342, 63167, 63210, 'OP_ClearForTakeOffMsg', 194, 1), + (23343, 63167, 63210, 'OP_ClientCmdMsg', 60, 1), + (23344, 63167, 63210, 'OP_ClientFellMsg', 389, 1), + (23345, 63167, 63210, 'OP_ClientIdleBeginMsg', 410, 1), + (23346, 63167, 63210, 'OP_ClientIdleEndMsg', 411, 1), + (23347, 63167, 63210, 'OP_ClientInDeathRegionMsg', 390, 1), + (23348, 63167, 63210, 'OP_ClientTeleportRequestMsg', 80, 1), + (23349, 63167, 63210, 'OP_ClientTeleportToLocationMsg', 248, 1), + (23350, 63167, 63210, 'OP_CloseGroupInviteWindowMsg', 401, 1), + (23351, 63167, 63210, 'OP_CollectAllHouseItemsMsg', 155, 1), + (23352, 63167, 63210, 'OP_ConsignItemRequestMsg', 129, 1), + (23353, 63167, 63210, 'OP_ConsignItemResponseMsg', 130, 1), + (23354, 63167, 63210, 'OP_ConsignmentCloseStoreMsg', 128, 1), + (23355, 63167, 63210, 'OP_ConsignRemoveItemsMsg', 382, 1), + (23356, 63167, 63210, 'OP_ConsignViewCreateMsg', 379, 1), + (23357, 63167, 63210, 'OP_ConsignViewGetPageMsg', 380, 1), + (23358, 63167, 63210, 'OP_ConsignViewReleaseMsg', 381, 1), + (23359, 63167, 63210, 'OP_ConsignViewSortMsg', 387, 1), + (23360, 63167, 63210, 'OP_CorruptedClientMsg', 414, 1), + (23361, 63167, 63210, 'OP_CreateBoatTransportsMsg', 254, 1), + (23362, 63167, 63210, 'OP_CreateCharacterDungeon', 551, 1), + (23363, 63167, 63210, 'OP_CreateCharacterReplyMsg', 12, 1), + (23364, 63167, 63210, 'OP_CreateCharacterRequestMsg', 11, 1), + (23365, 63167, 63210, 'OP_CreateCharFromCBBReplyMsg', 431, 1), + (23366, 63167, 63210, 'OP_CreateCharFromCBBRequestMsg', 430, 1), + (23367, 63167, 63210, 'OP_CreateGuildReplyMsg', 123, 1), + (23368, 63167, 63210, 'OP_CreateGuildRequestMsg', 121, 1), + (23369, 63167, 63210, 'OP_CreateZoneInstanceMsg', 31, 1), + (23370, 63167, 63210, 'OP_CsCategoryRequestMsg', 371, 1), + (23371, 63167, 63210, 'OP_CsCategoryResponseMsg', 372, 1), + (23372, 63167, 63210, 'OP_CSTicketAddCommentMsg', 237, 1), + (23373, 63167, 63210, 'OP_CSTicketChangeNotificationMsg', 239, 1), + (23374, 63167, 63210, 'OP_CSTicketCommentRequestMsg', 234, 1), + (23375, 63167, 63210, 'OP_CSTicketCommentResponseMsg', 235, 1), + (23376, 63167, 63210, 'OP_CSTicketCreateMsg', 236, 1), + (23377, 63167, 63210, 'OP_CSTicketDeleteMsg', 238, 1), + (23378, 63167, 63210, 'OP_CSTicketHeaderRequestMsg', 232, 1), + (23379, 63167, 63210, 'OP_CSTicketInfoMsg', 233, 1), + (23380, 63167, 63210, 'OP_CSToolAccessResponseMsg', 392, 1), + (23381, 63167, 63210, 'OP_CSToolsRequestMsg', 251, 1), + (23382, 63167, 63210, 'OP_CSToolsResponseMsg', 252, 1), + (23383, 63167, 63210, 'OP_CurrentPet', 490, 1), + (23384, 63167, 63210, 'OP_CustomizationPurchaseRequestMs', 170, 1), + (23385, 63167, 63210, 'OP_CustomizationReplyMsg', 172, 1), + (23386, 63167, 63210, 'OP_CustomizationSetRequestMsg', 171, 1), + (23387, 63167, 63210, 'OP_CustomizeHouseDisplay', 766, 1), + (23388, 63167, 63210, 'OP_DailyObjectives', 601, 1), + (23389, 63167, 63210, 'OP_DefaultGroupOptionsMsg', 201, 1), + (23390, 63167, 63210, 'OP_DefaultGroupOptionsRequestMsg', 200, 1), + (23391, 63167, 63210, 'OP_DeityAbilityWindow', 621, 1), + (23392, 63167, 63210, 'OP_DeleteCharacterReplyMsg', 19, 1), + (23393, 63167, 63210, 'OP_DeleteCharacterRequestMsg', 18, 1), + (23394, 63167, 63210, 'OP_DeleteGuildMsg', 126, 1), + (23395, 63167, 63210, 'OP_DestUpdateReq', 213, 1), + (23396, 63167, 63210, 'OP_DialogCloseMsg', 112, 1), + (23397, 63167, 63210, 'OP_DialogSelectMsg', 111, 1), + (23398, 63167, 63210, 'OP_DispatchClientCmdMsg', 62, 1), + (23399, 63167, 63210, 'OP_DispatchESMsg', 61, 1), + (23400, 63167, 63210, 'OP_DispatchMsg', 456, 1), + (23401, 63167, 63210, 'OP_DispatchSpellCmdMsg', 182, 1), + (23402, 63167, 63210, 'OP_DisplayDebugNLLPointsMsg', 258, 1), + (23403, 63167, 63210, 'OP_DisplayEventMsg', 457, 1), + (23404, 63167, 63210, 'OP_DisplayExchangeScreenMsg', 449, 1), + (23405, 63167, 63210, 'OP_DisplayGroupOptionsScreenMsg', 203, 1), + (23406, 63167, 63210, 'OP_DisplayInnVisitScreenMsg', 205, 1), + (23407, 63167, 63210, 'OP_DisplayMailScreenMsg', 409, 1), + (23408, 63167, 63210, 'OP_DisplayTSEventReactionMsg', 228, 1), + (23409, 63167, 63210, 'OP_DisplayWarningMsg', 269, 1), + (23410, 63167, 63210, 'OP_DoneLoadingEntityResourcesMsg', 38, 1), + (23411, 63167, 63210, 'OP_DoneLoadingZoneResourcesMsg', 36, 1), + (23412, 63167, 63210, 'OP_DoneSendingInitialEntitiesMsg', 37, 1), + (23413, 63167, 63210, 'OP_DressingRoom', 515, 1), + (23414, 63167, 63210, 'OP_DumpSchedulerMsg', 206, 1), + (23415, 63167, 63210, 'OP_DungeonMakerEnter', 552, 1), + (23416, 63167, 63210, 'OP_DungeonMakerItemRequest', 556, 1), + (23417, 63167, 63210, 'OP_DungeonMakerItemResponse', 586, 1), + (23418, 63167, 63210, 'OP_DungeonMakerToolboxList', 558, 1), + (23419, 63167, 63210, 'OP_DungeonMakerUnknown', 559, 1), + (23420, 63167, 63210, 'OP_DungeonMakerUnknown1', 560, 1), + (23421, 63167, 63210, 'OP_DungeonPlayAsAvatarList', 780, 1), + (23422, 63167, 63210, 'OP_DungeonPlayAsAvatarSelected', 781, 1), + (23423, 63167, 63210, 'OP_EarlyLandingRequestMsg', 491, 1), + (23424, 63167, 63210, 'OP_EncounterBrokenMsg', 267, 1), + (23425, 63167, 63210, 'OP_EnterHouseMsg', 157, 1), + (23426, 63167, 63210, 'OP_EnterMoveObjectModeMsg', 164, 1), + (23427, 63167, 63210, 'OP_EntityVerbsReplyMsg', 184, 1), + (23428, 63167, 63210, 'OP_EntityVerbsRequestMsg', 183, 1), + (23429, 63167, 63210, 'OP_EntityVerbsVerbMsg', 185, 1), + (23430, 63167, 63210, 'OP_EqArenaResultsCmd', 731, 1), + (23431, 63167, 63210, 'OP_EqAvailWorldChannelsCmd', 718, 1), + (23432, 63167, 63210, 'OP_EqBetaCopyRequest', 639, 1), + (23433, 63167, 63210, 'OP_EqCannedEmoteCmd', 660, 1), + (23434, 63167, 63210, 'OP_EqChatChannelUpdateCmd', 716, 1), + (23435, 63167, 63210, 'OP_EqChoiceWinCmd', 697, 1), + (23436, 63167, 63210, 'OP_EqCloseWindowCmd', 689, 1), + (23437, 63167, 63210, 'OP_EqCollectionFilterCmd', 676, 1), + (23438, 63167, 63210, 'OP_EqCollectionItemCmd', 677, 1), + (23439, 63167, 63210, 'OP_EqCollectionUpdateCmd', 675, 1), + (23440, 63167, 63210, 'OP_EqConsignmentItemsCmd', 721, 1), + (23441, 63167, 63210, 'OP_EqCreateGhostCmd', 642, 1), + (23442, 63167, 63210, 'OP_EqCreateListBoxCmd', 657, 1), + (23443, 63167, 63210, 'OP_EqCreateSignWidgetCmd', 644, 1), + (23444, 63167, 63210, 'OP_EqCreateWidgetCmd', 643, 1), + (23445, 63167, 63210, 'OP_EqDebugPVDCmd', 710, 1), + (23446, 63167, 63210, 'OP_EqDestroyGhostCmd', 645, 1), + (23447, 63167, 63210, 'OP_EqDialogCloseCmd', 673, 1), + (23448, 63167, 63210, 'OP_EqDialogOpenCmd', 672, 1), + (23449, 63167, 63210, 'OP_EqDisplaySpellFailCmd', 693, 1), + (23450, 63167, 63210, 'OP_EqDisplayTextCmd', 641, 1), + (23451, 63167, 63210, 'OP_EqDrawablePathGraphCmd', 671, 1), + (23452, 63167, 63210, 'OP_EqEnableGameEventCmd', 703, 1), + (23453, 63167, 63210, 'OP_EqEnableWindowCmd', 705, 1), + (23454, 63167, 63210, 'OP_EqExamineInfoCmd', 688, 1), + (23455, 63167, 63210, 'OP_EqFactionUpdateCmd', 674, 1), + (23456, 63167, 63210, 'OP_EqFlashWindowCmd', 706, 1), + (23457, 63167, 63210, 'OP_EqGetProbsCmd', 714, 1), + (23458, 63167, 63210, 'OP_EqGroupMemberRemovedCmd', 667, 1), + (23459, 63167, 63210, 'OP_EqGuildBankEventActionCmd', 732, 1), + (23460, 63167, 63210, 'OP_EqGuildBankExamineInfoCmd', 733, 1), + (23461, 63167, 63210, 'OP_EqHearChainEffectCmd', 668, 1), + (23462, 63167, 63210, 'OP_EqHearChatCmd', 640, 1), + (23463, 63167, 63210, 'OP_EqHearCombatCmd', 649, 1), + (23464, 63167, 63210, 'OP_EqHearConsiderCmd', 655, 1), + (23465, 63167, 63210, 'OP_EqHearDeathCmd', 666, 1), + (23466, 63167, 63210, 'OP_EQHearDispellCmd', 778, 1), + (23467, 63167, 63210, 'OP_EqHearDrowningCmd', 665, 1), + (23468, 63167, 63210, 'OP_EqHearHealCmd', 715, 1), + (23469, 63167, 63210, 'OP_EqHearPlayFlavorCmd', 708, 1), + (23470, 63167, 63210, 'OP_EQHearProcCmd', 651, 1), + (23471, 63167, 63210, 'OP_EQHearResEffectCmd', 652, 1), + (23472, 63167, 63210, 'OP_EqHearSpellCastCmd', 650, 1), + (23473, 63167, 63210, 'OP_EqHearSpellFizzleCmd', 654, 1), + (23474, 63167, 63210, 'OP_EqHearSpellInterruptCmd', 653, 1), + (23475, 63167, 63210, 'OP_EqHearSpellNoLandCmd', 734, 1), + (23476, 63167, 63210, 'OP_EQHearThreatCmd', 772, 1), + (23477, 63167, 63210, 'OP_EqHelpPathClearCmd', 686, 1), + (23478, 63167, 63210, 'OP_EqHelpPathCmd', 685, 1), + (23479, 63167, 63210, 'OP_EqInspectPCResultsCmd', 670, 1), + (23480, 63167, 63210, 'OP_EqInstructionWindowCloseCmd', 700, 1), + (23481, 63167, 63210, 'OP_EqInstructionWindowCmd', 699, 1), + (23482, 63167, 63210, 'OP_EqInstructionWindowGoalCmd', 701, 1), + (23483, 63167, 63210, 'OP_EqInstructionWindowTaskCmd', 702, 1), + (23484, 63167, 63210, 'OP_EqJunctionListCmd', 691, 1), + (23485, 63167, 63210, 'OP_EqMapExplorationCmd', 724, 1), + (23486, 63167, 63210, 'OP_EqMentoring', 679, 1), + (23487, 63167, 63210, 'OP_EqPlaySound3DCmd', 663, 1), + (23488, 63167, 63210, 'OP_EqPlaySoundCmd', 662, 1), + (23489, 63167, 63210, 'OP_EqPlayVoiceCmd', 664, 1), + (23490, 63167, 63210, 'OP_EqQuestGroupCmd', 681, 1), + (23491, 63167, 63210, 'OP_EqQuestionnaireCmd', 712, 1), + (23492, 63167, 63210, 'OP_EqQuestJournalReplyCmd', 680, 1), + (23493, 63167, 63210, 'OP_EqQuestJournalUpdateCmd', 678, 1), + (23494, 63167, 63210, 'OP_EqReceiveOfferCmd', 669, 1), + (23495, 63167, 63210, 'OP_EqResurrectedCmd', 696, 1), + (23496, 63167, 63210, 'OP_EqSetControlGhostCmd', 647, 1), + (23497, 63167, 63210, 'OP_EqSetDebugPathPointsCmd', 658, 1), + (23498, 63167, 63210, 'OP_EqSetDefaultVerbCmd', 698, 1), + (23499, 63167, 63210, 'OP_EqSetPOVGhostCmd', 648, 1), + (23500, 63167, 63210, 'OP_EqShowBookCmd', 711, 1), + (23501, 63167, 63210, 'OP_EqShowDeathWindowCmd', 692, 1), + (23502, 63167, 63210, 'OP_EqShowWindowCmd', 704, 1), + (23503, 63167, 63210, 'OP_EqSpellCastEndCmd', 695, 1), + (23504, 63167, 63210, 'OP_EqSpellCastStartCmd', 694, 1), + (23505, 63167, 63210, 'OP_EqSpellMoveToRangeAndRetryCmd', 726, 1), + (23506, 63167, 63210, 'OP_EqStartBrokerCmd', 723, 1), + (23507, 63167, 63210, 'OP_EqStateCmd', 661, 1), + (23508, 63167, 63210, 'OP_EqStoreLogCmd', 725, 1), + (23509, 63167, 63210, 'OP_EqUpdateBankCmd', 687, 1), + (23510, 63167, 63210, 'OP_EqUpdateGhostCmd', 646, 1), + (23511, 63167, 63210, 'OP_EqUpdateLootCmd', 690, 1), + (23512, 63167, 63210, 'OP_EqUpdateMerchantCmd', 682, 1), + (23513, 63167, 63210, 'OP_EqUpdatePlayerMailCmd', 727, 1), + (23514, 63167, 63210, 'OP_EqUpdatePlayerTradeCmd', 684, 1), + (23515, 63167, 63210, 'OP_EqUpdateSignWidgetCmd', 709, 1), + (23516, 63167, 63210, 'OP_EqUpdateStoreCmd', 683, 1), + (23517, 63167, 63210, 'OP_EqUpdateSubClassesCmd', 656, 1), + (23518, 63167, 63210, 'OP_EqUpdateTargetCmd', 719, 1), + (23519, 63167, 63210, 'OP_EqWhoChannelQueryReplyCmd', 717, 1), + (23520, 63167, 63210, 'OP_ESInitMsg', 27, 1), + (23521, 63167, 63210, 'OP_ESLoginRequestMsg', 3, 1), + (23522, 63167, 63210, 'OP_ESReadyForClientsMsg', 28, 1), + (23523, 63167, 63210, 'OP_ESStatusMsg', 102, 1), + (23524, 63167, 63210, 'OP_ESWeatherRequestEndMsg', 107, 1), + (23525, 63167, 63210, 'OP_ESWeatherRequestMsg', 106, 1), + (23526, 63167, 63210, 'OP_ESZoneInstanceStatusMsg', 103, 1), + (23527, 63167, 63210, 'OP_ExamineConsignmentRequestMsg', 174, 1), + (23528, 63167, 63210, 'OP_ExamineConsignmentResponseMsg', 175, 1), + (23529, 63167, 63210, 'OP_ExamineInfoRequestMsg', 259, 1), + (23530, 63167, 63210, 'OP_ExamineItemRequestMsg', 198, 1), + (23531, 63167, 63210, 'OP_ExitHouseMsg', 158, 1), + (23532, 63167, 63210, 'OP_ExpectClientAsCharacterReplyMs', 24, 1), + (23533, 63167, 63210, 'OP_ExpectClientAsCharacterRequest', 34, 1), + (23534, 63167, 63210, 'OP_ExpPurchWindow', 757, 1), + (23535, 63167, 63210, 'OP_FellowshipExpMsg', 125, 1), + (23536, 63167, 63210, 'OP_FlightPathsMsg', 418, 1), + (23537, 63167, 63210, 'OP_GameWorldTimeMsg', 45, 1), + (23538, 63167, 63210, 'OP_GetAuctionAssetIDMsg', 446, 1), + (23539, 63167, 63210, 'OP_GetAuctionAssetIDReplyMsg', 447, 1), + (23540, 63167, 63210, 'OP_GetAvatarAccessRequestForCSToo', 397, 1), + (23541, 63167, 63210, 'OP_GetCharacterSerializedReplyMsg', 429, 1), + (23542, 63167, 63210, 'OP_GetCharacterSerializedRequestM', 428, 1), + (23543, 63167, 63210, 'OP_GroupCreatedMsg', 90, 1), + (23544, 63167, 63210, 'OP_GroupDestroyedMsg', 91, 1), + (23545, 63167, 63210, 'OP_GroupLeaderChangedMsg', 95, 1), + (23546, 63167, 63210, 'OP_GroupMemberAddedMsg', 92, 1), + (23547, 63167, 63210, 'OP_GroupMemberRemovedMsg', 93, 1), + (23548, 63167, 63210, 'OP_GroupOptionsMsg', 202, 1), + (23549, 63167, 63210, 'OP_GroupRemovedFromGroupMsg', 94, 1), + (23550, 63167, 63210, 'OP_GroupResendOOZDataMsg', 96, 1), + (23551, 63167, 63210, 'OP_GroupSettingsChangedMsg', 97, 1), + (23552, 63167, 63210, 'OP_GuildBankActionMsg', 278, 1), + (23553, 63167, 63210, 'OP_GuildBankActionResponseMsg', 279, 1), + (23554, 63167, 63210, 'OP_GuildBankEventListMsg', 283, 1), + (23555, 63167, 63210, 'OP_GuildBankItemDetailsRequestMsg', 280, 1), + (23556, 63167, 63210, 'OP_GuildBankItemDetailsResponseMs', 281, 1), + (23557, 63167, 63210, 'OP_GuildBankUpdateMsg', 282, 1), + (23558, 63167, 63210, 'OP_GuildEventActionMsg', 273, 1), + (23559, 63167, 63210, 'OP_GuildEventAddMsg', 272, 1), + (23560, 63167, 63210, 'OP_GuildEventDetailsMsg', 276, 1), + (23561, 63167, 63210, 'OP_GuildEventListMsg', 274, 1), + (23562, 63167, 63210, 'OP_GuildEventMsg', 271, 1), + (23563, 63167, 63210, 'OP_GuildMembershipResponseMsg', 361, 1), + (23564, 63167, 63210, 'OP_GuildRecruiting', 737, 1), + (23565, 63167, 63210, 'OP_GuildRecruitingDetails', 738, 1), + (23566, 63167, 63210, 'OP_GuildRecruitingImage', 739, 1), + (23567, 63167, 63210, 'OP_GuildRecruitingMemberInfo', 736, 1), + (23568, 63167, 63210, 'OP_GuildsayMsg', 124, 1), + (23569, 63167, 63210, 'OP_GuildStatusUpdate', 730, 1), + (23570, 63167, 63210, 'OP_GuildUpdateMsg', 127, 1), + (23571, 63167, 63210, 'OP_HeritageMsg', 10023, 1), + (23572, 63167, 63210, 'OP_HideIllusionsMsg', 197, 1), + (23573, 63167, 63210, 'OP_HouseAccessRemoveMsg', 161, 1), + (23574, 63167, 63210, 'OP_HouseAccessSetMsg', 160, 1), + (23575, 63167, 63210, 'OP_HouseCustomizationScreenMsg', 169, 1), + (23576, 63167, 63210, 'OP_HouseDefaultAccessSetMsg', 159, 1), + (23577, 63167, 63210, 'OP_HouseDeletedRemotelyMsg', 145, 1), + (23578, 63167, 63210, 'OP_HouseItemsList', 489, 1), + (23579, 63167, 63210, 'OP_HousingDataChangedMsg', 432, 1), + (23580, 63167, 63210, 'OP_HousingRestoreMsg', 433, 1), + (23581, 63167, 63210, 'OP_InspectPlayerMsg', 367, 1), + (23582, 63167, 63210, 'OP_InspectPlayerRequestMsg', 455, 1), + (23583, 63167, 63210, 'OP_InviteRequestMsg', 452, 1), + (23584, 63167, 63210, 'OP_InviteResponseMsg', 453, 1), + (23585, 63167, 63210, 'OP_InviteTargetResponseMsg', 454, 1), + (23586, 63167, 63210, 'OP_JoinGuildNotifyMsg', 363, 1), + (23587, 63167, 63210, 'OP_JournalQuestStoryline', 779, 1), + (23588, 63167, 63210, 'OP_KeymapDataMsg', 180, 1), + (23589, 63167, 63210, 'OP_KeymapLoadMsg', 178, 1), + (23590, 63167, 63210, 'OP_KeymapNoneMsg', 179, 1), + (23591, 63167, 63210, 'OP_KeymapSaveMsg', 181, 1), + (23592, 63167, 63210, 'OP_KnowledgebaseRequestMsg', 230, 1), + (23593, 63167, 63210, 'OP_KnowledgebaseResponseMsg', 231, 1), + (23594, 63167, 63210, 'OP_KnowledgeWindowSlotMappingMsg', 373, 1), + (23595, 63167, 63210, 'OP_KnownLanguagesMsg', 242, 1), + (23596, 63167, 63210, 'OP_Launchpad', 579, 1), + (23597, 63167, 63210, 'OP_LeaveGuildNotifyMsg', 362, 1), + (23598, 63167, 63210, 'OP_LevelChangedMsg', 265, 1), + (23599, 63167, 63210, 'OP_LFGGroupSearch', 509, 1), + (23600, 63167, 63210, 'OP_LFGUpdateMsg', 522, 1), + (23601, 63167, 63210, 'OP_LikeOption', 139, 1), + (23602, 63167, 63210, 'OP_LoadCalendarEvents', 582, 1), + (23603, 63167, 63210, 'OP_LoadWelcomeWindow', 566, 1), + (23604, 63167, 63210, 'OP_LoginByNumRequestMsg', 1, 1), + (23605, 63167, 63210, 'OP_LoginReplyMsg', 4, 1), + (23606, 63167, 63210, 'OP_LoginRequestMsg', 0, 1), + (23607, 63167, 63210, 'OP_LootItemsRequestMsg', 188, 1), + (23608, 63167, 63210, 'OP_Lottery', 735, 1), + (23609, 63167, 63210, 'OP_LSCheckAcctLockMsg', 207, 1), + (23610, 63167, 63210, 'OP_LsClientAlertlogReplyMsg', 246, 1), + (23611, 63167, 63210, 'OP_LsClientBaselogReplyMsg', 244, 1), + (23612, 63167, 63210, 'OP_LsClientCrashlogReplyMsg', 245, 1), + (23613, 63167, 63210, 'OP_LsClientVerifylogReplyMsg', 247, 1), + (23614, 63167, 63210, 'OP_LsRequestClientCrashLogMsg', 243, 1), + (23615, 63167, 63210, 'OP_LSServerLockMsg', 369, 1), + (23616, 63167, 63210, 'OP_MacroInitMsg', 262, 1), + (23617, 63167, 63210, 'OP_MacroUpdateMsg', 263, 1), + (23618, 63167, 63210, 'OP_MailCommitSendMessageMsg', 348, 1), + (23619, 63167, 63210, 'OP_MailDeleteMessageMsg', 344, 1), + (23620, 63167, 63210, 'OP_MailEventNotificationMsg', 416, 1), + (23621, 63167, 63210, 'OP_MailGetHeadersReplyMsg', 345, 1), + (23622, 63167, 63210, 'OP_MailGetMessageMsg', 342, 1), + (23623, 63167, 63210, 'OP_MailGetMessageReplyMsg', 346, 1), + (23624, 63167, 63210, 'OP_MailRemoveAttachFromMailMsg', 350, 1), + (23625, 63167, 63210, 'OP_MailSendMessageMsg', 343, 1), + (23626, 63167, 63210, 'OP_MailSendMessageReplyMsg', 347, 1), + (23627, 63167, 63210, 'OP_MailSendSystemMessageMsg', 349, 1), + (23628, 63167, 63210, 'OP_MakeGroupLeaderMsg', 89, 1), + (23629, 63167, 63210, 'OP_MapFogDataInitMsg', 399, 1), + (23630, 63167, 63210, 'OP_MapFogDataUpdateMsg', 400, 1), + (23631, 63167, 63210, 'OP_MapRequest', 525, 1), + (23632, 63167, 63210, 'OP_MarketAddFundsReply', 533, 1), + (23633, 63167, 63210, 'OP_MarketAddFundsRequest', 532, 1), + (23634, 63167, 63210, 'OP_MarketFundsUpdate', 530, 1), + (23635, 63167, 63210, 'OP_MarketPlaceItems', 543, 1), + (23636, 63167, 63210, 'OP_MarketPlacePrices', 536, 1), + (23637, 63167, 63210, 'OP_MarketPurchase', 535, 1), + (23638, 63167, 63210, 'OP_MentorPopup', 564, 1), + (23639, 63167, 63210, 'OP_MercHireWindow', 783, 1), + (23640, 63167, 63210, 'OP_MercUnknown', 784, 1), + (23641, 63167, 63210, 'OP_MigrateBoatTransportMsg', 256, 1), + (23642, 63167, 63210, 'OP_MigrateBoatTransportReplyMsg', 257, 1), + (23643, 63167, 63210, 'OP_MigrateClientToZoneReplyMsg', 84, 1), + (23644, 63167, 63210, 'OP_MigrateClientToZoneRequestMsg', 83, 1), + (23645, 63167, 63210, 'OP_ModifyGuildMsg', 270, 1), + (23646, 63167, 63210, 'OP_MonitorCharacterListMsg', 58, 1), + (23647, 63167, 63210, 'OP_MonitorCharacterListRequestMsg', 59, 1), + (23648, 63167, 63210, 'OP_MonitorReplyMsg', 57, 1), + (23649, 63167, 63210, 'OP_MOTDMsg', 46, 1), + (23650, 63167, 63210, 'OP_MoveableObjectPlacementCriteri', 163, 1), + (23651, 63167, 63210, 'OP_MoveLogUpdateMsg', 405, 1), + (23652, 63167, 63210, 'OP_NotifyApprenticeStoppedMentori', 413, 1), + (23653, 63167, 63210, 'OP_OfferQuestMsg', 406, 1), + (23654, 63167, 63210, 'OP_OnscreenMsgMsg', 268, 1), + (23655, 63167, 63210, 'OP_OpenCharCust', 568, 1), + (23656, 63167, 63210, 'OP_OutOfZoneMemberDataMsg', 98, 1), + (23657, 63167, 63210, 'OP_PaperdollImage', 581, 1), + (23658, 63167, 63210, 'OP_PayHouseUpkeepMsg', 162, 1), + (23659, 63167, 63210, 'OP_PerformCameraShakeMsg', 217, 1), + (23660, 63167, 63210, 'OP_PerformPlayerKnockbackMsg', 216, 1), + (23661, 63167, 63210, 'OP_PetOptions', 204, 1), + (23662, 63167, 63210, 'OP_PetOptionsResponse', 585, 1), + (23663, 63167, 63210, 'OP_PlayCharacterReplyMsg', 21, 1), + (23664, 63167, 63210, 'OP_PlayCharacterRequestMsg', 20, 1), + (23665, 63167, 63210, 'OP_PlayerHouseAccessUpdateMsg', 150, 1), + (23666, 63167, 63210, 'OP_PlayerHouseBaseScreenMsg', 148, 1), + (23667, 63167, 63210, 'OP_PlayerHouseCloseUIMsg', 152, 1), + (23668, 63167, 63210, 'OP_PlayerHouseDisplayStatusMsg', 151, 1), + (23669, 63167, 63210, 'OP_PlayerHousePurchaseScreenMsg', 149, 1), + (23670, 63167, 63210, 'OP_PlayerMadeInstances', 143, 1), + (23671, 63167, 63210, 'OP_PlayerMadeInstancesScreen', 142, 1), + (23672, 63167, 63210, 'OP_PlayerPollAnswer', 563, 1), + (23673, 63167, 63210, 'OP_PlayerPollPopup', 562, 1), + (23674, 63167, 63210, 'OP_PlayLon', 516, 1), + (23675, 63167, 63210, 'OP_PointOfInterest', 761, 1), + (23676, 63167, 63210, 'OP_PointOfInterest2', 762, 1), + (23677, 63167, 63210, 'OP_PopulateSkillMapsMsg', 218, 1), + (23678, 63167, 63210, 'OP_PositionBoatTransportMsg', 255, 1), + (23679, 63167, 63210, 'OP_PositionMoveableObject', 165, 1), + (23680, 63167, 63210, 'OP_PostPossessionMsg', 459, 1), + (23681, 63167, 63210, 'OP_PredictionUpdateMsg', 39, 1), + (23682, 63167, 63210, 'OP_PrePossessionMsg', 458, 1), + (23683, 63167, 63210, 'OP_PromoFlagsDetailsMsg', 378, 1), + (23684, 63167, 63210, 'OP_PublishHouse', 141, 1), + (23685, 63167, 63210, 'OP_PurchaseConsignmentLoreCheckRe', 412, 1), + (23686, 63167, 63210, 'OP_PurchaseConsignmentRequestMsg', 131, 1), + (23687, 63167, 63210, 'OP_QueAllBgSolo', 571, 1), + (23688, 63167, 63210, 'OP_QuestionnaireMsg', 264, 1), + (23689, 63167, 63210, 'OP_QuestJournalInspectMsg', 116, 1), + (23690, 63167, 63210, 'OP_QuestJournalOpenMsg', 115, 1), + (23691, 63167, 63210, 'OP_QuestJournalSetVisibleMsg', 117, 1), + (23692, 63167, 63210, 'OP_QuestJournalWaypointMsg', 118, 1), + (23693, 63167, 63210, 'OP_QuestReward', 324, 1), + (23694, 63167, 63210, 'OP_QuickbarInitMsg', 260, 1), + (23695, 63167, 63210, 'OP_QuickbarUpdateMsg', 261, 1), + (23696, 63167, 63210, 'OP_RaceRestrictionMsg', 444, 1), + (23697, 63167, 63210, 'OP_ReadBookPageMsg', 199, 1), + (23698, 63167, 63210, 'OP_ReadyForTakeOffMsg', 195, 1), + (23699, 63167, 63210, 'OP_ReadyToZoneMsg', 86, 1), + (23700, 63167, 63210, 'OP_RecipeBook', 544, 1), + (23701, 63167, 63210, 'OP_RecipeDetailsMsg', 74, 1), + (23702, 63167, 63210, 'OP_RecipeList', 773, 1), + (23703, 63167, 63210, 'OP_RecipeListUnknown', 597, 1), + (23704, 63167, 63210, 'OP_RelinquishHouseMsg', 156, 1), + (23705, 63167, 63210, 'OP_ReloadLocalizedTxtMsg', 359, 1), + (23706, 63167, 63210, 'OP_RemoteCmdMsg', 44, 1), + (23707, 63167, 63210, 'OP_RemoveClientFromGroupMsg', 87, 1), + (23708, 63167, 63210, 'OP_RemoveConcentrationMsg', 114, 1), + (23709, 63167, 63210, 'OP_RemoveGroupFromGroupMsg', 88, 1), + (23710, 63167, 63210, 'OP_RemoveSpellEffectMsg', 113, 1), + (23711, 63167, 63210, 'OP_RenameGuildMsg', 286, 1), + (23712, 63167, 63210, 'OP_ReplaceableSubMeshesMsg', 168, 1), + (23713, 63167, 63210, 'OP_ReportMsg', 384, 1), + (23714, 63167, 63210, 'OP_RequestCampMsg', 52, 1), + (23715, 63167, 63210, 'OP_RequestGuildBankEventDetailsMs', 284, 1), + (23716, 63167, 63210, 'OP_RequestGuildEventDetailsMsg', 275, 1), + (23717, 63167, 63210, 'OP_RequestGuildInfoMsg', 277, 1), + (23718, 63167, 63210, 'OP_RequestGuildMembershipMsg', 360, 1), + (23719, 63167, 63210, 'OP_RequestHelpRepathMsg', 209, 1), + (23720, 63167, 63210, 'OP_RequestRecipeDetailsMsg', 73, 1), + (23721, 63167, 63210, 'OP_RequestTargetLocMsg', 210, 1), + (23722, 63167, 63210, 'OP_Research', 774, 1), + (23723, 63167, 63210, 'OP_ResendWorldChannelsMsg', 448, 1), + (23724, 63167, 63210, 'OP_ReskinCharacterRequestMsg', 15, 1), + (23725, 63167, 63210, 'OP_RestartZoneMsg', 417, 1), + (23726, 63167, 63210, 'OP_RewardPackMsg', 285, 1), + (23727, 63167, 63210, 'OP_SatMsg', 192, 1), + (23728, 63167, 63210, 'OP_SavageBarInitMsg', 584, 1), + (23729, 63167, 63210, 'OP_SelectZoneTeleporterDestinatio', 358, 1), + (23730, 63167, 63210, 'OP_SendLatestRequestMsg', 99, 1), + (23731, 63167, 63210, 'OP_ServerPlayCharacterReplyMsg', 26, 1), + (23732, 63167, 63210, 'OP_ServerPlayCharacterRequestMsg', 25, 1), + (23733, 63167, 63210, 'OP_SetInstanceDisplayNameMsg', 445, 1), + (23734, 63167, 63210, 'OP_SetRemoteCmdsMsg', 43, 1), + (23735, 63167, 63210, 'OP_SetSocialMsg', 101, 1), + (23736, 63167, 63210, 'OP_ShaderCustomizationMsg', 167, 1), + (23737, 63167, 63210, 'OP_ShowCreateFromRecipeUIMsg', 222, 1), + (23738, 63167, 63210, 'OP_ShowIllusionsMsg', 196, 1), + (23739, 63167, 63210, 'OP_ShowItemCreationProcessUIMsg', 226, 1), + (23740, 63167, 63210, 'OP_ShowRecipeBookMsg', 229, 1), + (23741, 63167, 63210, 'OP_ShowZoneTeleporterDestinations', 357, 1), + (23742, 63167, 63210, 'OP_SitMsg', 190, 1), + (23743, 63167, 63210, 'OP_SkillInfoRequest', 518, 1), + (23744, 63167, 63210, 'OP_SkillInfoResponse', 519, 1), + (23745, 63167, 63210, 'OP_SOEAllAccess', 640, 1), + (23746, 63167, 63210, 'OP_SpellGainedMsg', 266, 1), + (23747, 63167, 63210, 'OP_StandMsg', 191, 1), + (23748, 63167, 63210, 'OP_StoodMsg', 193, 1), + (23749, 63167, 63210, 'OP_StopItemCreationMsg', 225, 1), + (23750, 63167, 63210, 'OP_StoppedLootingMsg', 189, 1), + (23751, 63167, 63210, 'OP_StopTrackingMsg', 395, 1), + (23752, 63167, 63210, 'OP_SubmitCharCust', 569, 1), + (23753, 63167, 63210, 'OP_SupplyDepot', 771, 1), + (23754, 63167, 63210, 'OP_SysClient', 221, 1), + (23755, 63167, 63210, 'OP_TeleportWithinZoneMsg', 81, 1), + (23756, 63167, 63210, 'OP_TeleportWithinZoneNoReloadMsg', 82, 1), + (23757, 63167, 63210, 'OP_TintWidgetsMsg', 173, 1), + (23758, 63167, 63210, 'OP_TitleUpdateMsg', 388, 1), + (23759, 63167, 63210, 'OP_TrackingUpdateMsg', 393, 1), + (23760, 63167, 63210, 'OP_TradeskillList', 740, 1), + (23761, 63167, 63210, 'OP_TraitsList', 763, 1), + (23762, 63167, 63210, 'OP_UIEvent', 531, 1), + (23763, 63167, 63210, 'OP_UIResetMsg', 177, 1), + (23764, 63167, 63210, 'OP_UISettingsResponseMsg', 176, 1), + (23765, 63167, 63210, 'OP_Unknown', 797, 1), + (23766, 63167, 63210, 'OP_UnknownNpcMsg', 377, 1), + (23767, 63167, 63210, 'OP_UpdateActivePublicZonesMsg', 376, 1), + (23768, 63167, 63210, 'OP_UpdateCharacterSheetMsg', 65, 1), + (23769, 63167, 63210, 'OP_UpdateClientPredFlagsMsg', 249, 1), + (23770, 63167, 63210, 'OP_UpdateDebugRadiiMsg', 383, 1), + (23771, 63167, 63210, 'OP_UpdateGroupMemberDataMsg', 392, 1), + (23772, 63167, 63210, 'OP_UpdateHouseAccessDataMsg', 147, 1), + (23773, 63167, 63210, 'OP_UpdateHouseDataMsg', 146, 1), + (23774, 63167, 63210, 'OP_UpdateInventoryMsg', 70, 1), + (23775, 63167, 63210, 'OP_UpdateItemCreationProcessUIMsg', 227, 1), + (23776, 63167, 63210, 'OP_UpdateMotdMsg', 211, 1), + (23777, 63167, 63210, 'OP_UpdateOpportunityMsg', 77, 1), + (23778, 63167, 63210, 'OP_UpdatePositionMsg', 41, 1), + (23779, 63167, 63210, 'OP_UpdateRaidMsg', 385, 1), + (23780, 63167, 63210, 'OP_UpdateRecipeBookMsg', 72, 1), + (23781, 63167, 63210, 'OP_UpdateSkillBookMsg', 75, 1), + (23782, 63167, 63210, 'OP_UpdateSkillsMsg', 76, 1), + (23783, 63167, 63210, 'OP_UpdateSpellBookMsg', 68, 1), + (23784, 63167, 63210, 'OP_UpdateTargetLocMsg', 64, 1), + (23785, 63167, 63210, 'OP_UpdateTargetMsg', 63, 1), + (23786, 63167, 63210, 'OP_UpdateTitleCmd', 499, 1), + (23787, 63167, 63210, 'OP_UseAdornment', 751, 1), + (23788, 63167, 63210, 'OP_VideoUploaded', 583, 1), + (23789, 63167, 63210, 'OP_VoiceChatChannel', 524, 1), + (23790, 63167, 63210, 'OP_VoiceChatServer', 767, 1), + (23791, 63167, 63210, 'OP_WaypointReplyMsg', 353, 1), + (23792, 63167, 63210, 'OP_WaypointRequestMsg', 352, 1), + (23793, 63167, 63210, 'OP_WaypointSelectMsg', 354, 1), + (23794, 63167, 63210, 'OP_WaypointUpdateMsg', 355, 1), + (23795, 63167, 63210, 'OP_Weakness', 587, 1), + (23796, 63167, 63210, 'OP_WhoQueryReplyMsg', 56, 1), + (23797, 63167, 63210, 'OP_WhoQueryRequestMsg', 55, 1), + (23798, 63167, 63210, 'OP_WorldDataChangeMsg', 415, 1), + (23799, 63167, 63210, 'OP_WorldDataUpdateMsg', 240, 1), + (23800, 63167, 63210, 'OP_WorldListMsg', 8, 1), + (23801, 63167, 63210, 'OP_WorldPingMsg', 404, 1), + (23802, 63167, 63210, 'OP_WorldShutdownUpdateMsg', 408, 1), + (23803, 63167, 63210, 'OP_WorldStatusChangeMsg', 6, 1), + (23804, 63167, 63210, 'OP_WorldTravelAvail', 576, 1), + (23805, 63167, 63210, 'OP_WSAcctLockStatusMsg', 208, 1), + (23806, 63167, 63210, 'OP_WSCreateCharacterReplyMsg', 14, 1), + (23807, 63167, 63210, 'OP_WSCreateCharacterRequestMsg', 13, 1), + (23808, 63167, 63210, 'OP_WSLoginRequestMsg', 2, 1), + (23809, 63167, 63210, 'OP_WSServerHideMsg', 370, 1), + (23810, 63167, 63210, 'OP_WSServerLockMsg', 368, 1), + (23811, 63167, 63210, 'OP_WSStatusReplyMsg', 5, 1), + (23812, 63167, 63210, 'OP_ZoneBgInstanceList', 572, 1), + (23813, 63167, 63210, 'OP_ZoneInfoMsg', 35, 1), + (23814, 63167, 63210, 'OP_ZoneInstanceCreateReplyMsg', 32, 1), + (23815, 63167, 63210, 'OP_ZoneInstanceDestroyedMsg', 33, 1), + (23816, 63167, 63210, 'OP_ZoneMOTDMsg', 47, 1), + (23817, 63167, 63210, 'OP_ZonesStatusMsg', 105, 1), + (23818, 63167, 63210, 'OP_ZonesStatusRequestMsg', 104, 1), + (23819, 63167, 63210, 'OP_ZoneToFriendReplyMsg', 288, 1), + (23820, 63167, 63210, 'OP_ZoneToFriendRequestMsg', 287, 1); +UPDATE opcodes SET version_range2 = 63212 WHERE version_range1 = 63167; +UPDATE `opcodes` SET `opcode` = 529 WHERE `name` = 'OP_OpenCharCust' AND version_range1 = 1096; +INSERT INTO `opcodes` (`version_range1`, `version_range2`, `name`, `opcode`) VALUES (1096, 1096, 'OP_SubmitCharCust', 530); +UPDATE `opcodes` SET `opcode` = 534 WHERE `name` = 'OP_ZoneBgInstanceList' AND version_range1 = 1096; +UPDATE `opcodes` SET `opcode` = 542 WHERE `name` = 'OP_LoadCalendarEvents' AND version_range1 = 1096; +UPDATE `opcodes` SET `opcode` = 528 WHERE `name` = 'OP_LoadWelcomeWindow' AND version_range1 = 1096; +INSERT INTO `opcodes` (`version_range1`, `version_range2`, `name`, `opcode`) VALUES (1096, 1096, 'OP_MentorPopup', 526); +UPDATE `opcodes` SET `opcode` = 489 WHERE `name` = 'OP_CharacterHousingList' AND version_range1 = 1096; +UPDATE `opcodes` SET `opcode` = 65 WHERE `name` = 'OP_AfterInvSpellUpdate' AND version_range1 = 1096; +INSERT INTO opcodes (`version_range1`, `version_range2`, `name`, `opcode`) SELECT 63213, 63214, `name`, `opcode` FROM opcodes WHERE version_range1 = 63167; +UPDATE opcodes SET opcode = opcode +1 WHERE opcode >= 493 AND version_range1 = 63213; + +UPDATE opcodes SET version_range2 = 63225 WHERE version_range1 = 63213; +UPDATE opcodes SET version_range2 = 63226 WHERE version_range1 = 63213; +UPDATE opcodes SET version_range2 = 63227 WHERE version_range1 = 63213; +UPDATE opcodes SET version_range2 = 64583 WHERE version_range1 = 63213; +UPDATE opcodes SET version_range2 = 64584 WHERE version_range1 = 63213; +UPDATE opcodes SET version_range2 = 64598 WHERE version_range1 = 63213; +UPDATE opcodes SET version_range2 = 64600 WHERE version_range1 = 63213; +UPDATE opcodes SET version_range2 = 64615 WHERE version_range1 = 63213; +UPDATE opcodes SET version_range2 = 64632 WHERE version_range1 = 63213; +UPDATE opcodes SET version_range2 = 64644 WHERE version_range1 = 63213; +UPDATE opcodes SET opcode = 202 WHERE version_range1 = 1096 AND name = "Op_SysClient"; +UPDATE opcodes SET opcode = 203 WHERE version_range1 = 1045 AND name = "Op_SysClient"; +UPDATE opcodes SET opcode = 199 WHERE version_range1 = 1008 AND name = "Op_SysClient"; +UPDATE opcodes SET opcode = 198 WHERE version_range1 = 908 AND name = "Op_SysClient"; +UPDATE opcodes SET opcode = 191 WHERE version_range1 = 839 AND name = "Op_SysClient"; +UPDATE opcodes SET opcode = 191 WHERE version_range1 = 0 AND name = "Op_SysClient"; +insert into opcodes (version_range1, version_range2, name, opcode) select 64647, 64648, name, opcode from opcodes where version_range1 = 63213; +update opcodes set opcode = opcode + 2 where opcode >= 641 and version_range1 = 64647; +UPDATE opcodes SET version_range2 = 64659 WHERE version_range1 = 64647; +UPDATE opcodes SET version_range2 = 64660 WHERE version_range1 = 64647; +UPDATE opcodes SET version_range2 = 64661 WHERE version_range1 = 64647; +insert into opcodes (version_range1, version_range2, name, opcode) select 64662, 64663, name, opcode from opcodes where version_range1 = 64647 order by opcode asc; +update opcodes set opcode = opcode + 1 where version_range1 = 64662 and opcode >= 643; +UPDATE opcodes SET version_range2 = 64675 WHERE version_range1 = 64662; +UPDATE opcodes SET version_range2 = 64676 WHERE version_range1 = 64662; +UPDATE opcodes SET version_range2 = 64677 WHERE version_range1 = 64662; +insert into opcodes (version_range1, version_range2, name, opcode) select 64678, 64678, name, opcode from opcodes where version_range1 = 64662 order by opcode asc; +update opcodes set opcode = opcode + 3 where version_range1 = 64678 and opcode >= 644; +UPDATE opcodes SET version_range2 = 64690 WHERE version_range1 = 64678; +UPDATE opcodes SET version_range2 = 64691 WHERE version_range1 = 64678; +UPDATE opcodes SET version_range2 = 64693 WHERE version_range1 = 64678; +UPDATE opcodes SET version_range2 = 64705 WHERE version_range1 = 64678; +UPDATE opcodes SET version_range2 = 64707 WHERE version_range1 = 64678; +UPDATE opcodes SET version_range2 = 64720 WHERE version_range1 = 64678; +UPDATE opcodes SET version_range2 = 64721 WHERE version_range1 = 64678; +UPDATE opcodes SET version_range2 = 64724 WHERE version_range1 = 64678; +insert into opcodes (version_range1, version_range2, name, opcode) select 64736, 64737, name, opcode from opcodes where version_range1 = 64678 order by opcode asc; +update opcodes set opcode = opcode + 2 where opcode >= 647 and version_range1 = 64736; +UPDATE opcodes SET version_range2 = 64738 WHERE version_range1 = 64736; +UPDATE opcodes SET version_range2 = 64740 WHERE version_range1 = 64736; +DELETE FROM `opcodes` WHERE `version_range1` = 64736; +INSERT INTO opcodes (version_range1, version_range2, name, opcode) SELECT 64736, 64737, name, opcode FROM opcodes WHERE version_range1 = 64678 ORDER BY opcode asc; +UPDATE opcodes SET opcode = opcode + 2 WHERE opcode >= 647 AND version_range1 = 64736; +UPDATE opcodes SET version_range2 = 64740 WHERE version_range1 = 64736; +UPDATE opcodes SET version_range2 = 64752 WHERE version_range1 = 64736; +UPDATE opcodes SET version_range2 = 64753 WHERE version_range1 = 64736; +UPDATE opcodes SET opcode = 490 WHERE NAME='OP_ClearForLandingMsg' AND version_range1 = 1208; +UPDATE opcodes SET opcode = 485 WHERE NAME='OP_EarlyLandingRequestMsg' AND version_range1 = 1208; +UPDATE opcodes SET opcode = 473 WHERE NAME='OP_ClearForLandingMsg' AND version_range1 = 1096; +UPDATE opcodes SET opcode = 468 WHERE NAME='OP_EarlyLandingRequestMsg' AND version_range1 = 1096; +INSERT INTO `table_versions` (`name`,`version`,`download_version`) values ('opcodes',1,0); +UPDATE `table_versions` SET `download_version`=191 WHERE `name`='opcodes'; +DROP TABLE IF EXISTS `quest_details`; +CREATE TABLE IF NOT EXISTS `quest_details` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `quest_id` int(10) unsigned NOT NULL DEFAULT '0', + `type` enum('None','Prereq','Reward') COLLATE latin1_general_ci NOT NULL DEFAULT 'None', + `subtype` enum('None','Experience','Faction','Item','Quest','Race','AdvClass','AdvLevel','TSClass','TSLevel','Coin','Selectable','MaxCoin','MaxAdvLevel','MaxTSLevel','TSExperience') COLLATE latin1_general_ci NOT NULL DEFAULT 'None', + `value` int(10) NOT NULL DEFAULT '0', + `faction_id` smallint(5) unsigned NOT NULL DEFAULT '0', + `quantity` tinyint(3) unsigned NOT NULL DEFAULT '0', + PRIMARY KEY (`id`), + UNIQUE KEY `QuestIDX` (`quest_id`,`type`,`subtype`,`value`,`faction_id`,`quantity`), + CONSTRAINT `FK_quest_details` FOREIGN KEY (`quest_id`) REFERENCES `quests` (`quest_id`) ON DELETE CASCADE ON UPDATE CASCADE +) ENGINE=InnoDB AUTO_INCREMENT=760 DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci; +INSERT INTO `table_versions` (`name`,`version`,`download_version`) values ('quest_details',1,0); +DROP TABLE IF EXISTS `quest_reward_reqs`; +CREATE TABLE IF NOT EXISTS `quest_reward_reqs` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `list_id` int(10) unsigned NOT NULL DEFAULT '0', + `class_req` tinyint(3) unsigned NOT NULL DEFAULT '0', + `race_req` tinyint(3) unsigned NOT NULL DEFAULT '0', + PRIMARY KEY (`id`) +) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci; +INSERT INTO `table_versions` (`name`,`version`,`download_version`) values ('quest_reward_reqs',1,0); +DROP TABLE IF EXISTS `quests`; +CREATE TABLE IF NOT EXISTS `quests` ( + `quest_id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `name` varchar(64) COLLATE latin1_general_ci DEFAULT NULL, + `type` varchar(64) COLLATE latin1_general_ci DEFAULT NULL, + `zone` varchar(64) COLLATE latin1_general_ci DEFAULT NULL, + `level` tinyint(3) unsigned NOT NULL DEFAULT '0', + `enc_level` tinyint(3) NOT NULL DEFAULT '0', + `description` text COLLATE latin1_general_ci, + `spawn_id` int(10) unsigned NOT NULL DEFAULT '0', + `completed_text` text COLLATE latin1_general_ci, + `lua_script` varchar(255) COLLATE latin1_general_ci DEFAULT NULL, + PRIMARY KEY (`quest_id`) +) ENGINE=InnoDB AUTO_INCREMENT=185 DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci; +INSERT INTO `table_versions` (`name`,`version`,`download_version`) values ('quests',1,0); +DROP TABLE IF EXISTS `race_types`; +CREATE TABLE IF NOT EXISTS `race_types` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `category` varchar(64) COLLATE latin1_general_ci DEFAULT NULL, + `subcategory` varchar(64) COLLATE latin1_general_ci DEFAULT NULL, + `model_type` int(10) unsigned NOT NULL, + `model_name` varchar(250) COLLATE latin1_general_ci DEFAULT NULL, + `race_id` smallint(5) unsigned NOT NULL DEFAULT '0', + PRIMARY KEY (`id`), + KEY `NewIndex1` (`model_type`) +) ENGINE=InnoDB DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci; +INSERT INTO `table_versions` (`name`,`version`,`download_version`) values ('race_types',1,0); +DROP TABLE IF EXISTS `recipe_components`; +CREATE TABLE IF NOT EXISTS `recipe_components` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `recipe_id` int(10) unsigned NOT NULL DEFAULT '0', + `item_id` int(10) unsigned NOT NULL DEFAULT '0', + `slot_id` tinyint(3) unsigned NOT NULL DEFAULT '0', + PRIMARY KEY (`id`) +) ENGINE=InnoDB AUTO_INCREMENT=4489 DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci; +INSERT INTO `table_versions` (`name`,`version`,`download_version`) values ('recipe_components',1,0); +DROP TABLE IF EXISTS `recipe_products`; +CREATE TABLE IF NOT EXISTS `recipe_products` ( + `id` int(10) NOT NULL AUTO_INCREMENT, + `recipe_id` int(10) unsigned NOT NULL, + `stage` tinyint(3) unsigned NOT NULL, + `product_id` int(10) unsigned NOT NULL, + `byproduct_id` int(10) unsigned NOT NULL, + `product_qty` smallint(5) unsigned NOT NULL, + `byproduct_qty` tinyint(3) unsigned NOT NULL, + PRIMARY KEY (`id`), + KEY `FK_RECIPE_ID` (`recipe_id`), + CONSTRAINT `FK_RECIPE_ID` FOREIGN KEY (`recipe_id`) REFERENCES `recipes` (`recipe_id`) ON DELETE CASCADE ON UPDATE CASCADE +) ENGINE=InnoDB AUTO_INCREMENT=4906 DEFAULT CHARSET=utf8; +INSERT INTO `table_versions` (`name`,`version`,`download_version`) values ('recipe_products',1,0); +DROP TABLE IF EXISTS `recipes`; +CREATE TABLE IF NOT EXISTS `recipes` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `recipe_id` int(10) unsigned NOT NULL DEFAULT '0', + `tier` tinyint(3) unsigned NOT NULL DEFAULT '0', + `level` tinyint(3) unsigned NOT NULL DEFAULT '0', + `icon` smallint(5) unsigned NOT NULL DEFAULT '0', + `skill_level` tinyint(3) unsigned NOT NULL DEFAULT '0', + `technique` int(10) unsigned NOT NULL DEFAULT '0', + `knowledge` int(10) unsigned NOT NULL DEFAULT '0', + `name` varchar(200) COLLATE latin1_general_ci DEFAULT 'Unknown', + `book` varchar(200) COLLATE latin1_general_ci DEFAULT 'Unknown', + `device` enum('Chemistry Table','Engraved Desk','Forge','Stove & Keg','Sewing Table & Mannequin','Woodworking Table','Work Bench') CHARACTER SET utf8 NOT NULL, + `product_classes` tinyint(3) unsigned NOT NULL DEFAULT '0', + `unknown2` int(10) unsigned NOT NULL DEFAULT '0', + `unknown3` int(10) unsigned NOT NULL DEFAULT '0', + `unknown4` int(10) unsigned NOT NULL DEFAULT '0', + `product_item_id` int(10) NOT NULL, + `product_name` varchar(200) COLLATE latin1_general_ci DEFAULT NULL, + `product_qty` smallint(5) unsigned NOT NULL, + `primary_comp_title` varchar(200) COLLATE latin1_general_ci DEFAULT NULL, + `build_comp_title` varchar(200) COLLATE latin1_general_ci DEFAULT NULL, + `build2_comp_title` varchar(200) COLLATE latin1_general_ci DEFAULT NULL, + `build3_comp_title` varchar(200) COLLATE latin1_general_ci DEFAULT NULL, + `build4_comp_title` varchar(200) COLLATE latin1_general_ci DEFAULT NULL, + `build_comp_qty` varchar(200) COLLATE latin1_general_ci DEFAULT NULL, + `build2_comp_qty` varchar(200) COLLATE latin1_general_ci DEFAULT NULL, + `build3_comp_qty` varchar(200) COLLATE latin1_general_ci DEFAULT NULL, + `build4_comp_qty` varchar(200) COLLATE latin1_general_ci DEFAULT NULL, + `fuel_comp_title` varchar(200) COLLATE latin1_general_ci DEFAULT NULL, + `fuel_comp_qty` varchar(200) COLLATE latin1_general_ci DEFAULT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `recipe_id` (`recipe_id`) +) ENGINE=InnoDB AUTO_INCREMENT=982 DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci; +INSERT INTO `table_versions` (`name`,`version`,`download_version`) values ('recipes',1,0); +DROP TABLE IF EXISTS `reference_spell_effects`; +CREATE TABLE IF NOT EXISTS `reference_spell_effects` ( + `id` int(10) unsigned NOT NULL DEFAULT '0', + `category` varchar(64) COLLATE latin1_general_ci DEFAULT NULL, + `type` varchar(64) COLLATE latin1_general_ci DEFAULT NULL, + `name` varchar(64) COLLATE latin1_general_ci DEFAULT NULL, + `misc` varchar(64) COLLATE latin1_general_ci DEFAULT NULL, + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci; +INSERT INTO `reference_spell_effects` (`id`, `category`, `type`, `name`, `misc`) VALUES + (1, 'test', 'test_default\r', NULL, NULL), + (2, 'test', 'test_loot\r', NULL, NULL), + (3, 'test', 'test_spawn\r', NULL, NULL), + (4, 'test', 'test1\r', NULL, NULL), + (5, 'test', 'test2\r', NULL, NULL), + (6, 'test', 'test3\r', NULL, NULL), + (7, 'design', 'design_musk_spray_p2p\r', NULL, NULL), + (8, 'vampire', 'cast_vampire_evil_form\r', NULL, NULL), + (9, 'expansion_07', 'design_hawk_release\r', NULL, NULL), + (10, 'any', 'bone_toss\r', NULL, NULL), + (11, 'expansion_07', 'sacrifice_blast\r', NULL, NULL), + (12, 'expansion_07', 'giant_cull_the_weak\r', NULL, NULL), + (13, 'priest', 'buff_limbs\r', NULL, NULL), + (14, 'priest', 'heal_ball\r', NULL, NULL), + (15, 'priest', 'root\r', NULL, NULL), + (16, 'mage', 'heal_rune_blur\r', NULL, NULL), + (17, 'mage', 'heal_rune_randomorbits\r', NULL, NULL), + (18, 'mage', 'nuke_lightning\r', NULL, NULL), + (19, 'mage', 'heal_runedraw\r', NULL, NULL), + (20, 'priest', 'druid', 'firequench\r', NULL), + (21, 'mage', 'group_manashield\r', NULL, NULL), + (22, 'priest', 'aggro2\r', NULL, NULL), + (23, 'priest', 'resurrect\r', NULL, NULL), + (24, 'priest', 'shaman', 'mystic', 'ursine\r'), + (25, 'test', 'test_combat_demo\r', NULL, NULL), + (26, 'mage', 'lightning_burst\r', NULL, NULL), + (27, 'expansion_07', 'giant_vindictive_slam\r', NULL, NULL), + (28, 'expansion_07', 'giant_cleanse\r', NULL, NULL), + (29, 'expansion_07', 'giant_passion_of_rallos\r', NULL, NULL), + (30, 'expansion_07', 'giant_soul_spear\r', NULL, NULL), + (31, 'expansion_07', 'giant_perforate_being\r', NULL, NULL), + (32, 'expansion_07', 'giant_deathless_fealty\r', NULL, NULL), + (33, 'expansion_07', 'ice_wand_shoot\r', NULL, NULL), + (34, 'expansion_07', 'rallos_statue_invincible_persist\r', NULL, NULL), + (35, 'test', 'test_default_and_persist\r', NULL, NULL), + (36, 'expansion_07', 'rallos_statue_indestructible_persist\r', NULL, NULL), + (37, 'mage', 'lightning_burst2\r', NULL, NULL), + (38, 'expansion_07', 'rallos_statue_blue_beam_p2p\r', NULL, NULL), + (39, 'expansion_07', 'rallos_statue_red_beam_p2p\r', NULL, NULL), + (40, 'expansion_07', 'alternate_advancement', 'shaman_aa_totemic_protection\r', NULL), + (41, 'scout', 'sneak\r', NULL, NULL), + (42, 'priest', 'spirit_of_the_wolf\r', NULL, NULL), + (43, 'expansion_07', 'alternate_advancement', 'shaman_aa_avenging_ancestors\r', NULL), + (44, 'expansion_07', 'alternate_advancement', 'shaman_aa_spirit_aegis\r', NULL), + (45, 'expansion_07', 'alternate_advancement', 'shaman_aa_spiritfire\r', NULL), + (46, 'fighter', 'kick\r', NULL, NULL), + (47, 'priest', 'phoenix\r', NULL, NULL), + (48, 'priest', 'phoenix_descending\r', NULL, NULL), + (49, 'expansion_07', 'alternate_advancement', 'brawler_aa_unrivaled_focus\r', NULL), + (50, 'fighter', 'charge\r', NULL, NULL), + (51, 'fighter', 'wild_swing\r', NULL, NULL), + (52, 'priest', 'ethereal_mending\r', NULL, NULL), + (53, 'priest', 'ethereal_salve\r', NULL, NULL), + (54, 'priest', 'ghost_shield\r', NULL, NULL), + (55, 'scout', 'ambush\r', NULL, NULL), + (56, 'mage', 'nuke_lightning_result\r', NULL, NULL), + (57, 'priest', 'ethereal_mending_result\r', NULL, NULL), + (58, 'priest', 'ethereal_salve_result\r', NULL, NULL), + (59, 'priest', 'phoenix_descending_result\r', NULL, NULL), + (60, 'priest', 'rekindle_life\r', NULL, NULL), + (61, 'fighter', 'taunt\r', NULL, NULL), + (62, 'priest', 'crystal_shield\r', NULL, NULL), + (63, 'priest', 'smite\r', NULL, NULL), + (64, 'priest', 'horse_running\r', NULL, NULL), + (65, 'priest', 'lion_attacking\r', NULL, NULL), + (66, 'priest', 'lion_roaring\r', NULL, NULL), + (67, 'test', 'default_result\r', NULL, NULL), + (68, 'test', 'default_result_persist\r', NULL, NULL), + (69, 'npc', 'nightbloodwarrior', 'fire_from_below\r', NULL), + (70, 'npc', 'venekor', 'venekor\'s_poison_breath\r', NULL), + (71, 'mage', 'purple_lightning_bolt\r', NULL, NULL), + (72, 'fighter', 'knockdown\r', NULL, NULL), + (73, 'mage', 'teleporter_coalesce\r', NULL, NULL), + (74, 'npc', 'venekor', 'venekors_poison_breath\r', NULL), + (75, 'priest', 'snake_attacking\r', NULL, NULL), + (76, 'npc', 'demo_knockedoffbridge\r', NULL, NULL), + (77, 'expansion_07', 'alternate_advancement', 'brawler_aa_combat_mastery\r', NULL), + (78, 'mage', 'fire_slam\r', NULL, NULL), + (79, 'npc', 'test\r', NULL, NULL), + (80, 'priest', 'root_colored\r', NULL, NULL), + (81, 'npc', 'venekor', 'venekors_wing_dust\r', NULL), + (82, 'npc', 'venekor', 'venekors_fire_breath\r', NULL), + (83, 'npc', 'venekor', 'venekors_winged_fire\r', NULL), + (84, 'priest', 'bull_stomping\r', NULL, NULL), + (85, 'mage', 'ethereal_salve\r', NULL, NULL), + (86, 'expansion_07', 'alternate_advancement', 'brawler_aa_stone_cold\r', NULL), + (87, 'expansion_07', 'alternate_advancement', 'brawler_aa_tag_team\r', NULL), + (88, 'expansion_07', 'alternate_advancement', 'crusader_zealous_smite\r', NULL), + (89, 'any', 'lightning_mishap\r', NULL, NULL), + (90, 'fighter', 'shield_shove\r', NULL, NULL), + (91, 'fighter', 'whirling_attack\r', NULL, NULL), + (92, 'npc', 'venekor', 'venekors_wing_dust_alt\r', NULL), + (93, 'expansion_07', 'alternate_advancement', 'crusader_manawall\r', NULL), + (94, 'npc', 'venekor', 'venekors_poison_breath_alt\r', NULL), + (95, 'mage', 'fade\r', NULL, NULL), + (96, 'priest', 'cactus_01\r', NULL, NULL), + (97, 'priest', 'cactus_02\r', NULL, NULL), + (98, 'priest', 'cat_leaping\r', NULL, NULL), + (99, 'priest', 'tangling_roots\r', NULL, NULL), + (100, 'priest', 'teleport_appear\r', NULL, NULL), + (101, 'priest', 'teleport_vanish\r', NULL, NULL), + (102, 'priest', 'tree_morph\r', NULL, NULL), + (103, 'priest', 'wood_spikes_growing\r', NULL, NULL), + (104, 'expansion_07', 'alternate_advancement', 'crusader_soul_claim\r', NULL), + (105, 'expansion_07', 'alternate_advancement', 'warrior_unshakable_grip\r', NULL), + (106, 'expansion_07', 'alternate_advancement', 'proc_aa_massive_damage\r', NULL), + (107, 'expansion_07', 'alternate_advancement', 'warrior_partisan_cleave\r', NULL), + (108, 'expansion_07', 'alternate_advancement', 'warrior_perfect_counter\r', NULL), + (109, 'expansion_07', 'alternate_advancement', 'proc_aa_massive_poison_damage\r', NULL), + (110, 'expansion_07', 'alternate_advancement', 'predator_exploit_weakness\r', NULL), + (111, 'expansion_07', 'alternate_advancement', 'proc_aa_exploit_weakness\r', NULL), + (112, 'expansion_07', 'alternate_advancement', 'rogue_change_of_engagement\r', NULL), + (113, 'expansion_07', 'alternate_advancement', 'proc_aa_attribute_debuff\r', NULL), + (114, 'expansion_07', 'alternate_advancement', 'rogue_pris_de_fer\r', NULL), + (115, 'expansion_07', 'alternate_advancement', 'rogue_sunder\r', NULL), + (116, 'expansion_07', 'alternate_advancement', 'bard_songspinners_note\r', NULL), + (117, 'expansion_07', 'alternate_advancement', 'bard_deadly_dance\r', NULL), + (118, 'expansion_07', 'alternate_advancement', 'bard_cadence_of_destruction\r', NULL), + (119, 'expansion_07', 'alternate_advancement', 'proc_aa_multi_attack\r', NULL), + (120, 'any', 'feverous_touch\r', NULL, NULL), + (121, 'any', 'flickering_lash\r', NULL, NULL), + (122, 'any', 'freezing_breath\r', NULL, NULL), + (123, 'any', 'watery_respite_1\r', NULL, NULL), + (124, 'any', 'watery_respite_2\r', NULL, NULL), + (125, 'any', 'watery_respite_3\r', NULL, NULL), + (126, 'mage', 'badge_of_energy\r', NULL, NULL), + (127, 'mage', 'enthralling_fetters\r', NULL, NULL), + (128, 'mage', 'frost_spike\r', NULL, NULL), + (129, 'mage', 'glacial_wall\r', NULL, NULL), + (130, 'mage', 'ice_comet\r', NULL, NULL), + (131, 'mage', 'icy_cage\r', NULL, NULL), + (132, 'mage', 'intelligence\r', NULL, NULL), + (133, 'priest', 'skin_of_clay\r', NULL, NULL), + (134, 'npc', 'knock_to_back_result\r', NULL, NULL), + (135, 'npc', 'knock_to_knee_result\r', NULL, NULL), + (136, 'priest', 'sanctify\r', NULL, NULL), + (137, 'priest', 'treat_toxin\r', NULL, NULL), + (138, 'priest', 'bestowal_of_vitae\r', NULL, NULL), + (139, 'priest', 'ethereal_ward\r', NULL, NULL), + (140, 'scout', 'startling_screech\r', NULL, NULL), + (141, 'priest', 'fuliginous_sphere\r', NULL, NULL), + (142, 'any', 'force\r', NULL, NULL), + (143, 'any', 'force_yellow_fire\r', NULL, NULL), + (144, 'any', 'venenox\r', NULL, NULL), + (145, 'fighter', 'offering_of_vitae\r', NULL, NULL), + (146, 'fighter', 'offering_of_vitae_2\r', NULL, NULL), + (147, 'mage', 'color_shower\r', NULL, NULL), + (148, 'mage', 'dps_decrease\r', NULL, NULL), + (149, 'mage', 'earthly_brand\r', NULL, NULL), + (150, 'mage', 'volatile_refuge\r', NULL, NULL), + (151, 'mage', 'volatile_refuge_2\r', NULL, NULL), + (152, 'priest', 'scimitar_smite\r', NULL, NULL), + (153, 'priest', 'scimitar_smite_2\r', NULL, NULL), + (154, 'priest', 'verdant_genesis\r', NULL, NULL), + (155, 'expansion_07', 'alternate_advancement', 'proc_aa_healing_buff\r', NULL), + (156, 'mage', 'foul_distortion\r', NULL, NULL), + (157, 'mage', 'haste\r', NULL, NULL), + (158, 'mage', 'tremor\r', NULL, NULL), + (159, 'priest', 'bloodlust\r', NULL, NULL), + (160, 'any', 'backdraft\r', NULL, NULL), + (161, 'any', 'deadly_stench\r', NULL, NULL), + (162, 'any', 'sanction_of_merit\r', NULL, NULL), + (163, 'mage', 'charm\r', NULL, NULL), + (164, 'mage', 'pyrotechnic\r', NULL, NULL), + (165, 'mage', 'tellurian_recruit\r', NULL, NULL), + (166, 'priest', 'weakness\r', NULL, NULL), + (167, 'fighter', 'cry_of_conviction\r', NULL, NULL), + (168, 'auras', 'mage\r', NULL, NULL), + (169, 'auras', 'priest\r', NULL, NULL), + (170, 'mage', 'enthralling_fetters_ghostly\r', NULL, NULL), + (171, 'priest', 'benefaction_of_life\r', NULL, NULL), + (172, 'test', 'test_projectile\r', NULL, NULL), + (173, 'scout', 'stifle\r', NULL, NULL), + (174, 'fighter', 'instant_lifetap\r', NULL, NULL), + (175, 'mage', 'ot_lifetap\r', NULL, NULL), + (176, 'any', 'utility\r', NULL, NULL), + (177, 'any', 'bone_cage_1\r', NULL, NULL), + (178, 'any', 'grim_champion\r', NULL, NULL), + (179, 'fighter', 'decree_of_faith\r', NULL, NULL), + (180, 'mage', 'fascinate\r', NULL, NULL), + (181, 'priest', 'bloodlust_2\r', NULL, NULL), + (182, 'expansion_07', 'alternate_advancement', 'proc_aa_int_wis_buff\r', NULL), + (183, 'mage', 'shrink\r', NULL, NULL), + (184, 'mage', 'lightning_surge\r', NULL, NULL), + (185, 'any', 'fire_from_below_orange\r', NULL, NULL), + (186, 'artisan', 'metal_bar\r', NULL, NULL), + (187, 'artisan', 'rune_01\r', NULL, NULL), + (188, 'artisan', 'rune_02\r', NULL, NULL), + (189, 'artisan', 'rune_03\r', NULL, NULL), + (190, 'artisan', 'rune_04\r', NULL, NULL), + (191, 'artisan', 'rune_05\r', NULL, NULL), + (192, 'artisan', 'rune_06\r', NULL, NULL), + (193, 'artisan', 'rune_07\r', NULL, NULL), + (194, 'artisan', 'rune_08\r', NULL, NULL), + (195, 'expansion_07', 'alternate_advancement', 'sorcerer_sanguine_sacrifice\r', NULL), + (196, 'expansion_07', 'alternate_advancement', 'sorcerer_ethernere_chains\r', NULL), + (197, 'expansion_07', 'alternate_advancement', 'sorcerer_mystical_field\r', NULL), + (198, 'expansion_07', 'alternate_advancement', 'sorcerer_mystical_overflow\r', NULL), + (199, 'artisan', 'chemistry_blue\r', NULL, NULL), + (200, 'artisan', 'chemistry_gold\r', NULL, NULL), + (201, 'artisan', 'chemistry_green\r', NULL, NULL), + (202, 'artisan', 'chemistry_violet\r', NULL, NULL), + (203, 'artisan', 'forge_blue\r', NULL, NULL), + (204, 'artisan', 'forge_gold\r', NULL, NULL), + (205, 'artisan', 'forge_green\r', NULL, NULL), + (206, 'artisan', 'forge_violet\r', NULL, NULL), + (207, 'artisan', 'planer\r', NULL, NULL), + (208, 'artisan', 'saw\r', NULL, NULL), + (209, 'artisan', 'sewing_blue\r', NULL, NULL), + (210, 'artisan', 'sewing_gold\r', NULL, NULL), + (211, 'artisan', 'sewing_green\r', NULL, NULL), + (212, 'artisan', 'sewing_violet\r', NULL, NULL), + (213, 'artisan', 'stove_blue\r', NULL, NULL), + (214, 'artisan', 'stove_gold\r', NULL, NULL), + (215, 'artisan', 'stove_green\r', NULL, NULL), + (216, 'artisan', 'stove_knives_blue\r', NULL, NULL), + (217, 'artisan', 'stove_knives_gold\r', NULL, NULL), + (218, 'artisan', 'stove_knives_green\r', NULL, NULL), + (219, 'artisan', 'stove_knives_violet\r', NULL, NULL), + (220, 'artisan', 'stove_violet\r', NULL, NULL), + (221, 'boss', 'pbae_cold\r', NULL, NULL), + (222, 'boss', 'pbae_disease\r', NULL, NULL), + (223, 'boss', 'pbae_heat\r', NULL, NULL), + (224, 'boss', 'pbae_mental\r', NULL, NULL), + (225, 'boss', 'pbae_poison\r', NULL, NULL), + (226, 'boss', 'tae_cold\r', NULL, NULL), + (227, 'boss', 'tae_disease\r', NULL, NULL), + (228, 'boss', 'tae_heat\r', NULL, NULL), + (229, 'boss', 'tae_mental\r', NULL, NULL), + (230, 'boss', 'tae_poison\r', NULL, NULL), + (231, 'artisan', 'forge_helmet_gold\r', NULL, NULL), + (232, 'priest', 'utility\r', NULL, NULL), + (233, 'artisan', 'forge_helmet_blue\r', NULL, NULL), + (234, 'artisan', 'forge_helmet_green\r', NULL, NULL), + (235, 'artisan', 'forge_helmet_violet\r', NULL, NULL), + (236, 'artisan', 'forge_metal_rod_blue\r', NULL, NULL), + (237, 'artisan', 'forge_metal_rod_gold\r', NULL, NULL), + (238, 'artisan', 'forge_metal_rod_green\r', NULL, NULL), + (239, 'artisan', 'forge_metal_rod_violet\r', NULL, NULL), + (240, 'boss', 'pbae_divine\r', NULL, NULL), + (241, 'boss', 'pbae_lightning\r', NULL, NULL), + (242, 'boss', 'tae_divine\r', NULL, NULL), + (243, 'boss', 'tae_lightning\r', NULL, NULL), + (244, 'artisan', 'chemistry_molecule_blue\r', NULL, NULL), + (245, 'artisan', 'chemistry_molecule_gold\r', NULL, NULL), + (246, 'artisan', 'chemistry_molecule_green\r', NULL, NULL), + (247, 'artisan', 'chemistry_molecule_violet\r', NULL, NULL), + (248, 'artisan', 'log_cut\r', NULL, NULL), + (249, 'fighter', 'attack_back\r', NULL, NULL), + (250, 'fighter', 'attack_crush_damage\r', NULL, NULL), + (251, 'fighter', 'attack_down_stun\r', NULL, NULL), + (252, 'fighter', 'attack_down_taunt\r', NULL, NULL), + (253, 'fighter', 'attack_forward_damage\r', NULL, NULL), + (254, 'fighter', 'attack_forward_highdamage\r', NULL, NULL), + (255, 'fighter', 'attack_forward_knockdown\r', NULL, NULL), + (256, 'fighter', 'charge_up_anger\r', NULL, NULL), + (257, 'fighter', 'charge_up_defence\r', NULL, NULL), + (258, 'fighter', 'defensive_buff\r', NULL, NULL), + (259, 'fighter', 'defensive_buff_avoidance\r', NULL, NULL), + (260, 'fighter', 'defensive_buff_shielding\r', NULL, NULL), + (261, 'fighter', 'defensive_buff_stealth\r', NULL, NULL), + (262, 'fighter', 'feint_avoidance\r', NULL, NULL), + (263, 'fighter', 'feint_sooth\r', NULL, NULL), + (264, 'fighter', 'kick_damage\r', NULL, NULL), + (265, 'fighter', 'kick_flame\r', NULL, NULL), + (266, 'fighter', 'kick_ice\r', NULL, NULL), + (267, 'fighter', 'kick_knockdown\r', NULL, NULL), + (268, 'fighter', 'offensive_buff_accuracy\r', NULL, NULL), + (269, 'fighter', 'offensive_buff_agility\r', NULL, NULL), + (270, 'fighter', 'offensive_buff_increase\r', NULL, NULL), + (271, 'fighter', 'ranged_attack_fast\r', NULL, NULL), + (272, 'fighter', 'ranged_attack_persist\r', NULL, NULL), + (273, 'fighter', 'super_buff_enrage\r', NULL, NULL), + (274, 'fighter', 'super_buff_group\r', NULL, NULL), + (275, 'fighter', 'taunt_damage\r', NULL, NULL), + (276, 'fighter', 'thrust_forward\r', NULL, NULL), + (277, 'fighter', 'thrust_forward_persist\r', NULL, NULL), + (278, 'expansion_07', 'alternate_advancement', 'proc_aa_soulburn\r', NULL), + (279, 'fighter', 'whirling_attack_flame\r', NULL, NULL), + (280, 'fighter', 'whirling_attack_taunt\r', NULL, NULL), + (281, 'fighter', 'wildswing\r', NULL, NULL), + (282, 'fighter', 'wildswing_debuff\r', NULL, NULL), + (283, 'fighter', 'wildswing_flame\r', NULL, NULL), + (284, 'fighter', 'wildswing_ice\r', NULL, NULL), + (285, 'artisan', 'sewing_knot_blue\r', NULL, NULL), + (286, 'artisan', 'sewing_knot_gold\r', NULL, NULL), + (287, 'artisan', 'sewing_knot_green\r', NULL, NULL), + (288, 'artisan', 'sewing_knot_violet\r', NULL, NULL), + (289, 'fighter', 'flying_kick_damage\r', NULL, NULL), + (290, 'fighter', 'flying_kick_flame\r', NULL, NULL), + (291, 'fighter', 'flying_kick_ice\r', NULL, NULL), + (292, 'fighter', 'flying_kick_lightning\r', NULL, NULL), + (293, 'fighter', 'whirling_attack_alt\r', NULL, NULL), + (294, 'persist', 'persist_divine\r', NULL, NULL), + (295, 'persist', 'persist_energy\r', NULL, NULL), + (296, 'persist', 'persist_fire\r', NULL, NULL), + (297, 'persist', 'persist_ice\r', NULL, NULL), + (298, 'persist', 'persist_mental\r', NULL, NULL), + (299, 'persist', 'persist_mesmerize\r', NULL, NULL), + (300, 'persist', 'persist_poison\r', NULL, NULL), + (301, 'persist', 'persist_stunned\r', NULL, NULL), + (302, 'priest', 'brace_eidolon\r', NULL, NULL), + (303, 'any', 'impart_essence\r', NULL, NULL), + (304, 'any', 'rally_essence\r', NULL, NULL), + (305, 'persist', 'persist_stone\r', NULL, NULL), + (306, 'scout', 'ballad_of_chivalry\r', NULL, NULL), + (307, 'scout', 'drumming\r', NULL, NULL), + (308, 'scout', 'rousing_tune\r', NULL, NULL), + (309, 'fighter', 'defensive_debuff\r', NULL, NULL), + (310, 'fighter', 'multiple_attack\r', NULL, NULL), + (311, 'fighter', 'escape_combat\r', NULL, NULL), + (312, 'fighter', 'heal_target\r', NULL, NULL), + (313, 'scout', 'cry_conviction\r', NULL, NULL), + (314, 'fighter', 'beg_for_mercy\r', NULL, NULL), + (315, 'fighter', 'dragon_stance\r', NULL, NULL), + (316, 'fighter', 'spider_stance\r', NULL, NULL), + (317, 'scout', 'cry_conviction_projectile\r', NULL, NULL), + (318, 'scout', 'cry_conviction_wave_projectile\r', NULL, NULL), + (319, 'mage', 'nuke_lightning_projectile\r', NULL, NULL), + (320, 'any', 'deadly_stench_projectile\r', NULL, NULL), + (321, 'mage', 'psychic_wail_projectile\r', NULL, NULL), + (322, 'any', 'levelup\r', NULL, NULL), + (323, 'any', 'levelup_50\r', NULL, NULL), + (324, 'any', 'levelup_hallmark\r', NULL, NULL), + (325, 'fighter', 'multiple_attack_02\r', NULL, NULL), + (326, 'fighter', 'multiple_attack_03\r', NULL, NULL), + (327, 'fighter', 'multiple_attack_04\r', NULL, NULL), + (328, 'mage', 'fire_ball_projectile\r', NULL, NULL), + (329, 'mage', 'fire_ball_projectile_blue\r', NULL, NULL), + (330, 'mage', 'fire_ball_projectile_green\r', NULL, NULL), + (331, 'mage', 'fire_ball_projectile_purple\r', NULL, NULL), + (332, 'any', 'levelup_mini\r', NULL, NULL), + (333, 'mage', 'fire_ball_projectile_2\r', NULL, NULL), + (334, 'mage', 'fire_ball_projectile_3\r', NULL, NULL), + (335, 'mage', 'fire_ball_projectile_blue_2\r', NULL, NULL), + (336, 'mage', 'fire_ball_projectile_blue_3\r', NULL, NULL), + (337, 'mage', 'fire_ball_projectile_green_2\r', NULL, NULL), + (338, 'mage', 'fire_ball_projectile_green_3\r', NULL, NULL), + (339, 'mage', 'fire_ball_projectile_purple_2\r', NULL, NULL), + (340, 'mage', 'fire_ball_projectile_purple_3\r', NULL, NULL), + (341, 'fighter', 'attack_back_alt\r', NULL, NULL), + (342, 'fighter', 'attack_back_flame\r', NULL, NULL), + (343, 'fighter', 'attack_back_highdamage\r', NULL, NULL), + (344, 'fighter', 'attack_back_ice\r', NULL, NULL), + (345, 'fighter', 'attack_crush_alt\r', NULL, NULL), + (346, 'fighter', 'attack_crush_highdamage\r', NULL, NULL), + (347, 'fighter', 'attack_crush_knockdown\r', NULL, NULL), + (348, 'fighter', 'attack_down_damage\r', NULL, NULL), + (349, 'fighter', 'attack_down_damage_alt\r', NULL, NULL), + (350, 'fighter', 'attack_down_highdamage\r', NULL, NULL), + (351, 'fighter', 'attack_forward_damage_alt\r', NULL, NULL), + (352, 'fighter', 'attack_forward_damage_persist\r', NULL, NULL), + (353, 'fighter', 'attack_forward_defense_persist\r', NULL, NULL), + (354, 'fighter', 'attack_forward_offense_persist\r', NULL, NULL), + (355, 'fighter', 'charge_up_group\r', NULL, NULL), + (356, 'fighter', 'charge_up_increase\r', NULL, NULL), + (357, 'fighter', 'defensive_buff_increase\r', NULL, NULL), + (358, 'fighter', 'flying_kick_damage_alt\r', NULL, NULL), + (359, 'fighter', 'flying_kick_highdamage\r', NULL, NULL), + (360, 'fighter', 'flying_kick_stun\r', NULL, NULL), + (361, 'fighter', 'kick_damage_alt\r', NULL, NULL), + (362, 'fighter', 'kick_highdamage\r', NULL, NULL), + (363, 'fighter', 'multiple_attack_02_alt\r', NULL, NULL), + (364, 'expansion_07', 'alternate_advancement', 'summoner_energy_clash\r', NULL), + (365, 'fighter', 'ranged_attack_throw_2x\r', NULL, NULL), + (366, 'fighter', 'ranged_attack_throw_fast\r', NULL, NULL), + (367, 'fighter', 'ranged_attack_throw_persist\r', NULL, NULL), + (368, 'fighter', 'shield_shove_knockdown\r', NULL, NULL), + (369, 'fighter', 'shield_shove_persist\r', NULL, NULL), + (370, 'fighter', 'shield_shove_stun\r', NULL, NULL), + (371, 'fighter', 'super_buff_increase\r', NULL, NULL), + (372, 'fighter', 'thrust_forward_knockdown\r', NULL, NULL), + (373, 'fighter', 'thrust_forward_sooth\r', NULL, NULL), + (374, 'fighter', 'whirling_attack_damage\r', NULL, NULL), + (375, 'fighter', 'whirling_attack_highdamage\r', NULL, NULL), + (376, 'fighter', 'wildswing_highdamage\r', NULL, NULL), + (377, 'fighter', 'attack_back_lifetap\r', NULL, NULL), + (378, 'fighter', 'attack_crush_lifetap\r', NULL, NULL), + (379, 'fighter', 'attack_down_lifetap\r', NULL, NULL), + (380, 'fighter', 'attack_forward_lifetap\r', NULL, NULL), + (381, 'fighter', 'flying_kick_lifetap\r', NULL, NULL), + (382, 'fighter', 'kick_lifetap\r', NULL, NULL), + (383, 'fighter', 'multiple_attack_02_lifetap\r', NULL, NULL), + (384, 'fighter', 'multiple_attack_04_alt\r', NULL, NULL), + (385, 'fighter', 'multiple_attack_04_highdamage\r', NULL, NULL), + (386, 'fighter', 'ranged_attack_fast_highdamage\r', NULL, NULL), + (387, 'fighter', 'ranged_attack_persist_highdamage\r', NULL, NULL), + (388, 'fighter', 'shield_shove_alt\r', NULL, NULL), + (389, 'fighter', 'shield_shove_highdamage\r', NULL, NULL), + (390, 'fighter', 'thrust_forward_alt\r', NULL, NULL), + (391, 'fighter', 'thrust_forward_highdamage\r', NULL, NULL), + (392, 'mage', 'color_rain_damage\r', NULL, NULL), + (393, 'mage', 'haste_distortion\r', NULL, NULL), + (394, 'mage', 'rock_ball_projectile\r', NULL, NULL), + (395, 'mage', 'skull_dark_projectile\r', NULL, NULL), + (396, 'priest', 'evil_resurrection\r', NULL, NULL), + (397, 'fighter', 'attack_back_debuff\r', NULL, NULL), + (398, 'fighter', 'attack_back_knockdown\r', NULL, NULL), + (399, 'fighter', 'attack_back_persist\r', NULL, NULL), + (400, 'fighter', 'attack_back_stun\r', NULL, NULL), + (401, 'fighter', 'attack_crush_debuff\r', NULL, NULL), + (402, 'fighter', 'attack_crush_persist\r', NULL, NULL), + (403, 'fighter', 'attack_crush_stun\r', NULL, NULL), + (404, 'fighter', 'attack_down_debuff\r', NULL, NULL), + (405, 'fighter', 'attack_down_knockdown\r', NULL, NULL), + (406, 'fighter', 'attack_down_persist\r', NULL, NULL), + (407, 'fighter', 'attack_forward_debuff\r', NULL, NULL), + (408, 'fighter', 'attack_forward_stun\r', NULL, NULL), + (409, 'fighter', 'defensive_buff_evil\r', NULL, NULL), + (410, 'fighter', 'flying_kick_debuff\r', NULL, NULL), + (411, 'fighter', 'flying_kick_knockdown\r', NULL, NULL), + (412, 'fighter', 'flying_kick_persist\r', NULL, NULL), + (413, 'fighter', 'kick_debuff\r', NULL, NULL), + (414, 'fighter', 'kick_persist\r', NULL, NULL), + (415, 'fighter', 'kick_stun\r', NULL, NULL), + (416, 'fighter', 'multiple_attack_02_debuff\r', NULL, NULL), + (417, 'fighter', 'multiple_attack_02_knockdown\r', NULL, NULL), + (418, 'fighter', 'multiple_attack_02_persist\r', NULL, NULL), + (419, 'fighter', 'multiple_attack_02_stun\r', NULL, NULL), + (420, 'fighter', 'multiple_attack_03_alt\r', NULL, NULL), + (421, 'fighter', 'multiple_attack_03_debuff\r', NULL, NULL), + (422, 'fighter', 'multiple_attack_03_knockdown\r', NULL, NULL), + (423, 'fighter', 'multiple_attack_03_knocktoknees\r', NULL, NULL), + (424, 'fighter', 'multiple_attack_03_lifetap\r', NULL, NULL), + (425, 'fighter', 'multiple_attack_03_persist\r', NULL, NULL), + (426, 'fighter', 'multiple_attack_03_stun\r', NULL, NULL), + (427, 'fighter', 'multiple_attack_04_debuff\r', NULL, NULL), + (428, 'fighter', 'multiple_attack_04_knockdown\r', NULL, NULL), + (429, 'fighter', 'multiple_attack_04_knocktoknees\r', NULL, NULL), + (430, 'fighter', 'multiple_attack_04_lifetap\r', NULL, NULL), + (431, 'fighter', 'multiple_attack_04_stun\r', NULL, NULL), + (432, 'fighter', 'ranged_attack_fast_debuff\r', NULL, NULL), + (433, 'fighter', 'ranged_attack_fast_knockdown\r', NULL, NULL), + (434, 'fighter', 'ranged_attack_fast_persist_knockdown\r', NULL, NULL), + (435, 'fighter', 'ranged_attack_fast_stun\r', NULL, NULL), + (436, 'fighter', 'ranged_attack_persist_debuff\r', NULL, NULL), + (437, 'fighter', 'ranged_attack_persist_lifetap\r', NULL, NULL), + (438, 'fighter', 'ranged_attack_persist_stun\r', NULL, NULL), + (439, 'fighter', 'shield_shove_debuff\r', NULL, NULL), + (440, 'fighter', 'shield_shove_lifetap\r', NULL, NULL), + (441, 'fighter', 'super_buff_evil\r', NULL, NULL), + (442, 'fighter', 'thrust_forward_debuff\r', NULL, NULL), + (443, 'fighter', 'thrust_forward_lifetap\r', NULL, NULL), + (444, 'fighter', 'thrust_forward_stun\r', NULL, NULL), + (445, 'fighter', 'whirling_attack_debuff\r', NULL, NULL), + (446, 'fighter', 'whirling_attack_knockdown\r', NULL, NULL), + (447, 'fighter', 'whirling_attack_lifetap\r', NULL, NULL), + (448, 'fighter', 'whirling_attack_persist\r', NULL, NULL), + (449, 'fighter', 'whirling_attack_stun\r', NULL, NULL), + (450, 'fighter', 'wildswing_knockdown\r', NULL, NULL), + (451, 'fighter', 'wildswing_lifetap\r', NULL, NULL), + (452, 'fighter', 'wildswing_persist\r', NULL, NULL), + (453, 'fighter', 'wildswing_stun\r', NULL, NULL), + (454, 'mage', 'fire_rain_damage\r', NULL, NULL), + (455, 'mage', 'fire_swirl_buff\r', NULL, NULL), + (456, 'mage', 'icicle_rain_damage\r', NULL, NULL), + (457, 'mage', 'lightning_swirl_buff\r', NULL, NULL), + (458, 'mage', 'noxious_oozing_shield_buff\r', NULL, NULL), + (459, 'mage', 'poison_rain_damage\r', NULL, NULL), + (460, 'mage', 'skull_breath_poison_damage\r', NULL, NULL), + (461, 'priest', 'bloodlust_3\r', NULL, NULL), + (462, 'priest', 'resurrect_nature\r', NULL, NULL), + (463, 'priest', 'resurrect_spirit\r', NULL, NULL), + (464, 'priest', 'vines_root_control\r', NULL, NULL), + (465, 'fighter', 'attack_back_lightning\r', NULL, NULL), + (466, 'fighter', 'attack_back_notes\r', NULL, NULL), + (467, 'fighter', 'attack_back_sooth\r', NULL, NULL), + (468, 'fighter', 'attack_back_taunt\r', NULL, NULL), + (469, 'fighter', 'attack_crush_flame\r', NULL, NULL), + (470, 'fighter', 'attack_crush_ice\r', NULL, NULL), + (471, 'fighter', 'attack_crush_knocktoknees\r', NULL, NULL), + (472, 'fighter', 'attack_crush_lightning\r', NULL, NULL), + (473, 'fighter', 'attack_crush_notes\r', NULL, NULL), + (474, 'fighter', 'attack_crush_sooth\r', NULL, NULL), + (475, 'fighter', 'attack_crush_taunt\r', NULL, NULL), + (476, 'fighter', 'attack_down_flame\r', NULL, NULL), + (477, 'fighter', 'attack_down_ice\r', NULL, NULL), + (478, 'fighter', 'attack_down_lightning\r', NULL, NULL), + (479, 'fighter', 'attack_down_notes\r', NULL, NULL), + (480, 'fighter', 'attack_down_sooth\r', NULL, NULL), + (481, 'fighter', 'attack_forward_flame\r', NULL, NULL), + (482, 'fighter', 'attack_forward_ice\r', NULL, NULL), + (483, 'fighter', 'attack_forward_lightning\r', NULL, NULL), + (484, 'fighter', 'attack_forward_notes\r', NULL, NULL), + (485, 'fighter', 'attack_forward_taunt\r', NULL, NULL), + (486, 'fighter', 'defensive_buff_accuracy\r', NULL, NULL), + (487, 'fighter', 'defensive_buff_notes\r', NULL, NULL), + (488, 'fighter', 'flying_kick_knocktoknees\r', NULL, NULL), + (489, 'fighter', 'flying_kick_notes\r', NULL, NULL), + (490, 'fighter', 'kick_notes\r', NULL, NULL), + (491, 'fighter', 'multiple_attack_02_highdamage\r', NULL, NULL), + (492, 'fighter', 'multiple_attack_02_ice\r', NULL, NULL), + (493, 'fighter', 'multiple_attack_02_knocktoknees\r', NULL, NULL), + (494, 'fighter', 'multiple_attack_02_notes\r', NULL, NULL), + (495, 'fighter', 'multiple_attack_03_highdamage\r', NULL, NULL), + (496, 'fighter', 'multiple_attack_03_ice\r', NULL, NULL), + (497, 'fighter', 'multiple_attack_03_notes\r', NULL, NULL), + (498, 'fighter', 'multiple_attack_04_notes\r', NULL, NULL), + (499, 'fighter', 'offensive_buff_group\r', NULL, NULL), + (500, 'fighter', 'offensive_buff_lightning\r', NULL, NULL), + (501, 'fighter', 'ranged_attack_fast_notes\r', NULL, NULL), + (502, 'fighter', 'ranged_attack_fast_taunt\r', NULL, NULL), + (503, 'fighter', 'ranged_attack_persist_notes\r', NULL, NULL), + (504, 'fighter', 'result_highdamage\r', NULL, NULL), + (505, 'fighter', 'result_knockdown\r', NULL, NULL), + (506, 'fighter', 'result_lightning\r', NULL, NULL), + (507, 'fighter', 'shield_shove_knocktoknees\r', NULL, NULL), + (508, 'fighter', 'shield_shove_notes\r', NULL, NULL), + (509, 'fighter', 'shield_shove_taunt\r', NULL, NULL), + (510, 'fighter', 'super_buff_notes\r', NULL, NULL), + (511, 'fighter', 'thrust_forward_knocktoknees\r', NULL, NULL), + (512, 'fighter', 'thrust_forward_notes\r', NULL, NULL), + (513, 'fighter', 'whirling_attack_knocktoknees\r', NULL, NULL), + (514, 'fighter', 'whirling_attack_notes\r', NULL, NULL), + (515, 'fighter', 'wildswing_notes\r', NULL, NULL), + (516, 'mage', 'darkness_skull_buff\r', NULL, NULL), + (517, 'mage', 'petrify_stun_control\r', NULL, NULL), + (518, 'mage', 'shadow_summon\r', NULL, NULL), + (519, 'mage', 'sword_rain_damage\r', NULL, NULL), + (520, 'mage', 'zombie_summon\r', NULL, NULL), + (521, 'fighter', 'defensive_buff_agility\r', NULL, NULL), + (522, 'fighter', 'kick_lightning\r', NULL, NULL), + (523, 'fighter', 'multiple_attack_02_flame\r', NULL, NULL), + (524, 'fighter', 'multiple_attack_02_lightning\r', NULL, NULL), + (525, 'fighter', 'multiple_attack_02_soothe\r', NULL, NULL), + (526, 'fighter', 'multiple_attack_03_lightning\r', NULL, NULL), + (527, 'fighter', 'multiple_attack_03_taunt\r', NULL, NULL), + (528, 'fighter', 'multiple_attack_04_flame\r', NULL, NULL), + (529, 'fighter', 'multiple_attack_04_persist\r', NULL, NULL), + (530, 'fighter', 'multiple_attack_04_soothe\r', NULL, NULL), + (531, 'fighter', 'multiple_attack_04_taunt\r', NULL, NULL), + (532, 'fighter', 'ranged_attack_fast_flame\r', NULL, NULL), + (533, 'fighter', 'ranged_attack_fast_ice\r', NULL, NULL), + (534, 'fighter', 'ranged_attack_fast_knocktoknees\r', NULL, NULL), + (535, 'fighter', 'ranged_attack_fast_lifetap\r', NULL, NULL), + (536, 'fighter', 'ranged_attack_fast_lightning\r', NULL, NULL), + (537, 'fighter', 'ranged_attack_persist_flame\r', NULL, NULL), + (538, 'fighter', 'ranged_attack_persist_knockdown\r', NULL, NULL), + (539, 'fighter', 'ranged_attack_persist_lightning\r', NULL, NULL), + (540, 'fighter', 'result_anger\r', NULL, NULL), + (541, 'fighter', 'result_avoidance\r', NULL, NULL), + (542, 'fighter', 'result_enrage\r', NULL, NULL), + (543, 'fighter', 'result_evil\r', NULL, NULL), + (544, 'fighter', 'result_flame\r', NULL, NULL), + (545, 'fighter', 'result_group\r', NULL, NULL), + (546, 'fighter', 'result_ice\r', NULL, NULL), + (547, 'fighter', 'result_knocktoknees\r', NULL, NULL), + (548, 'fighter', 'result_persist\r', NULL, NULL), + (549, 'fighter', 'result_shielding\r', NULL, NULL), + (550, 'fighter', 'result_soothe\r', NULL, NULL), + (551, 'fighter', 'result_stun\r', NULL, NULL), + (552, 'fighter', 'result_taunt\r', NULL, NULL), + (553, 'fighter', 'shield_shove_lightning\r', NULL, NULL), + (554, 'fighter', 'shield_shove_soothe\r', NULL, NULL), + (555, 'fighter', 'super_buff_accuracy\r', NULL, NULL), + (556, 'fighter', 'super_buff_anger\r', NULL, NULL), + (557, 'fighter', 'super_buff_avoidance\r', NULL, NULL), + (558, 'fighter', 'super_buff_defense\r', NULL, NULL), + (559, 'fighter', 'super_buff_shielding\r', NULL, NULL), + (560, 'fighter', 'thrust_forward_flame\r', NULL, NULL), + (561, 'fighter', 'thrust_forward_ice\r', NULL, NULL), + (562, 'fighter', 'thrust_forward_lightning\r', NULL, NULL), + (563, 'fighter', 'thrust_forward_taunt\r', NULL, NULL), + (564, 'fighter', 'whirling_attack_lightning\r', NULL, NULL), + (565, 'fighter', 'wildswing_lightning\r', NULL, NULL), + (566, 'harvesting', 'fishing\r', NULL, NULL), + (567, 'harvesting', 'forestry\r', NULL, NULL), + (568, 'harvesting', 'gathering\r', NULL, NULL), + (569, 'harvesting', 'mining\r', NULL, NULL), + (570, 'harvesting', 'trapping\r', NULL, NULL), + (571, 'mage', 'air_elemental_summon\r', NULL, NULL), + (572, 'priest', 'arch_heal\r', NULL, NULL), + (573, 'priest', 'fury_regen\r', NULL, NULL), + (574, 'priest', 'vitae_buff_heal\r', NULL, NULL), + (575, 'fighter', 'attack_back_knocktoknees\r', NULL, NULL), + (576, 'fighter', 'attack_back_soothe\r', NULL, NULL), + (577, 'fighter', 'attack_crush_soothe\r', NULL, NULL), + (578, 'fighter', 'attack_down_knocktoknees\r', NULL, NULL), + (579, 'fighter', 'attack_forward_soothe\r', NULL, NULL), + (580, 'fighter', 'flying_kick_soothe\r', NULL, NULL), + (581, 'fighter', 'flying_kick_taunt\r', NULL, NULL), + (582, 'fighter', 'kick_soothe\r', NULL, NULL), + (583, 'fighter', 'kick_taunt\r', NULL, NULL), + (584, 'fighter', 'ranged_attack_fast_persist_ice\r', NULL, NULL), + (585, 'fighter', 'result_accuracy\r', NULL, NULL), + (586, 'fighter', 'result_agility\r', NULL, NULL), + (587, 'fighter', 'result_debuff\r', NULL, NULL), + (588, 'fighter', 'result_divine\r', NULL, NULL), + (589, 'fighter', 'result_lifetap\r', NULL, NULL), + (590, 'fighter', 'result_notes\r', NULL, NULL), + (591, 'fighter', 'result_stealth\r', NULL, NULL), + (592, 'fighter', 'super_buff_divine\r', NULL, NULL), + (593, 'fighter', 'thrust_forward_soothe\r', NULL, NULL), + (594, 'fighter', 'wildswing_taunt\r', NULL, NULL), + (595, 'mage', 'black_fire_from_below_damage\r', NULL, NULL), + (596, 'mage', 'lash_darkness_damage\r', NULL, NULL), + (597, 'mage', 'sparks_updown_projectile\r', NULL, NULL), + (598, 'priest', 'blue_fire_from_below_damage\r', NULL, NULL), + (599, 'priest', 'brace_eidolon_green\r', NULL, NULL), + (600, 'priest', 'brace_eidolon_psyonic\r', NULL, NULL), + (601, 'priest', 'brace_eidolon_red\r', NULL, NULL), + (602, 'priest', 'evil_ward\r', NULL, NULL), + (603, 'priest', 'nuke_lightning_projectile_persist\r', NULL, NULL), + (604, 'fighter', 'attack_down_soothe\r', NULL, NULL), + (605, 'fighter', 'defensive_buff_anger\r', NULL, NULL), + (606, 'fighter', 'defensive_buff_enrage\r', NULL, NULL), + (607, 'fighter', 'feint_soothe\r', NULL, NULL), + (608, 'fighter', 'multiple_attack_03_flame\r', NULL, NULL), + (609, 'fighter', 'multiple_attack_03_soothe\r', NULL, NULL), + (610, 'fighter', 'multiple_attack_04_ice\r', NULL, NULL), + (611, 'fighter', 'multiple_attack_04_lightning\r', NULL, NULL), + (612, 'fighter', 'ranged_attack_fast_soothe\r', NULL, NULL), + (613, 'fighter', 'ranged_attack_persist_knocktoknees\r', NULL, NULL), + (614, 'fighter', 'ranged_attack_persist_soothe\r', NULL, NULL), + (615, 'fighter', 'ranged_attack_persist_taunt\r', NULL, NULL), + (616, 'fighter', 'shield_shove_flame\r', NULL, NULL), + (617, 'fighter', 'shield_shove_ice\r', NULL, NULL), + (618, 'fighter', 'super_buff_stealth\r', NULL, NULL), + (619, 'fighter', 'whirling_attack_ice\r', NULL, NULL), + (620, 'fighter', 'whirling_attack_soothe\r', NULL, NULL), + (621, 'fighter', 'wildswing_knocktoknees\r', NULL, NULL), + (622, 'fighter', 'wildswing_soothe\r', NULL, NULL), + (623, 'ho', 'ancient_wrath\r', NULL, NULL), + (624, 'ho', 'arcane_fury\r', NULL, NULL), + (625, 'ho', 'archaic_shackles\r', NULL, NULL), + (626, 'ho', 'archaic_shackles_b\r', NULL, NULL), + (627, 'ho', 'divine_blade\r', NULL, NULL), + (628, 'ho', 'divine_judgement\r', NULL, NULL), + (629, 'ho', 'scholars_insight\r', NULL, NULL), + (630, 'ho', 'storm_of_ancients\r', NULL, NULL), + (631, 'ho', 'thunder_slash\r', NULL, NULL), + (632, 'ho', 'tricksters_grasp\r', NULL, NULL), + (633, 'expansion_07', 'alternate_advancement', 'summoner_minions_intent\r', NULL), + (634, 'expansion_07', 'alternate_advancement', 'summoner_servants_intervention\r', NULL), + (635, 'expansion_07', 'alternate_advancement', 'summoner_soulburn\r', NULL), + (636, 'expansion_07', 'alternate_advancement', 'enchanter_psychic_trauma\r', NULL), + (637, 'expansion_07', 'alternate_advancement', 'enchanter_convert_power\r', NULL), + (638, 'expansion_07', 'alternate_advancement', 'enchanter_enchanted_vigor\r', NULL), + (639, 'expansion_07', 'alternate_advancement', 'enchanter_manasoul\r', NULL), + (640, 'expansion_07', 'giant_frost_tempest\r', NULL, NULL), + (641, 'ho', 'bravos_dance\r', NULL, NULL), + (642, 'ho', 'crucible_of_life\r', NULL, NULL), + (643, 'ho', 'inspiring_piety\r', NULL, NULL), + (644, 'ho', 'shower_of_daggers\r', NULL, NULL), + (645, 'ho', 'soldiers_instinct\r', NULL, NULL), + (646, 'ho', 'trinity_divide\r', NULL, NULL), + (647, 'ho', 'ancients_embrace\r', NULL, NULL), + (648, 'ho', 'arcane_trickery\r', NULL, NULL), + (649, 'ho', 'heros_armor\r', NULL, NULL), + (650, 'expansion_07', 'giant_hammer_flurry\r', NULL, NULL), + (651, 'expansion_07', 'zek_devastation_aoe\r', NULL, NULL), + (652, 'mage', 'evil_heal\r', NULL, NULL), + (653, 'mage', 'ice_comet_slam_damage\r', NULL, NULL), + (654, 'mage', 'skull_limb_debuff\r', NULL, NULL), + (655, 'mage', 'skull_slam_damage\r', NULL, NULL), + (656, 'expansion_07', 'coldain_spell_cage_reverse\r', NULL, NULL), + (657, 'expansion_07', 'giant_power_summon\r', NULL, NULL), + (658, 'design', 'design_shadow_lich_swords\r', NULL, NULL), + (659, 'design', 'design_white_lich_casting\r', NULL, NULL), + (660, 'expansion_07', 'lord_yelinak_ice_breath\r', NULL, NULL), + (661, 'spell_revamp', 'pets', 'conjuror_wisp_blade\r', NULL), + (662, 'spell_revamp', 'pets', 'conjuror_aery_whip\r', NULL), + (663, 'ho', 'shield_of_ancients\r', NULL, NULL), + (664, 'any', 'dragon_flight_fetters\r', NULL, NULL), + (665, 'any', 'drakota_fetters\r', NULL, NULL), + (666, 'ho', 'ancient_crucible\r', NULL, NULL), + (667, 'ho', 'natures_growth\r', NULL, NULL), + (668, 'ho', 'archaic_ruin\r', NULL, NULL), + (669, 'ho', 'crushing_anvil\r', NULL, NULL), + (670, 'ho', 'lucks_bite\r', NULL, NULL), + (671, 'ho', 'ringing_blow\r', NULL, NULL), + (672, 'ho', 'sky_cleave\r', NULL, NULL), + (673, 'ho', 'suffocating_wrath\r', NULL, NULL), + (674, 'ho', 'arcane_chalice\r', NULL, NULL), + (675, 'ho', 'blessing_of_faith\r', NULL, NULL), + (676, 'priest', 'spirit_of_the_stag\r', NULL, NULL), + (677, 'ho', 'ancient_demise\r', NULL, NULL), + (678, 'ho', 'arcane_enlightenment\r', NULL, NULL), + (679, 'ho', 'chalice_of_life\r', NULL, NULL), + (680, 'ho', 'crippling_shroud\r', NULL, NULL), + (681, 'ho', 'divine_trickery\r', NULL, NULL), + (682, 'ho', 'piercing_faith\r', NULL, NULL), + (683, 'ho', 'raging_sword\r', NULL, NULL), + (684, 'ho', 'breaking_faith\r', NULL, NULL), + (685, 'spell_revamp', 'pets', 'conjuror_furystorm\r', NULL), + (686, 'spell_revamp', 'pets', 'conjuror_galestorm\r', NULL), + (687, 'ho', 'verdant_trinity\r', NULL, NULL), + (688, 'ho', 'faiths_bulwark\r', NULL, NULL), + (689, 'ho', 'pasts_awakening\r', NULL, NULL), + (690, 'ho', 'strength_in_unity\r', NULL, NULL), + (691, 'ho', 'swindlers_gift\r', NULL, NULL), + (692, 'ho', 'swindlers_luck\r', NULL, NULL), + (693, 'ho', 'tricksters_grasp2\r', NULL, NULL), + (694, 'scout', 'drum_nofx\r', NULL, NULL), + (695, 'scout', 'guitar_nofx\r', NULL, NULL), + (696, 'scout', 'singing_nofx\r', NULL, NULL), + (697, 'spell_revamp', 'pets', 'conjuror_igneous_flames\r', NULL), + (698, 'spell_revamp', 'pets', 'conjuror_searing_flames\r', NULL), + (699, 'ho', 'soldiers_gambit\r', NULL, NULL), + (700, 'ho', 'lucks_bite_2\r', NULL, NULL), + (701, 'spell_revamp', 'pets', 'conjuror_shocking_flames\r', NULL), + (702, 'spell_revamp', 'pets', 'conjuror_sphere_of_flames\r', NULL), + (703, 'spell_revamp', 'pets', 'conjuror_storm_of_flames\r', NULL), + (704, 'spell_revamp', 'pets', 'conjuror_storm_surge\r', NULL), + (705, 'spell_revamp', 'pets', 'conjuror_telluric_bash\r', NULL), + (706, 'spell_revamp', 'pets', 'conjuror_telluric_pummel\r', NULL), + (707, 'spell_revamp', 'pets', 'conjuror_telluric_retaliation\r', NULL), + (708, 'spell_revamp', 'pets', 'conjuror_telluric_roar\r', NULL), + (709, 'spell_revamp', 'pets', 'conjuror_telluric_shout\r', NULL), + (710, 'ho', 'arcane_aegis\r', NULL, NULL), + (711, 'ho', 'arcane_salvation\r', NULL, NULL), + (712, 'ho', 'ardent_challenge\r', NULL, NULL), + (713, 'ho', 'capricious_strike\r', NULL, NULL), + (714, 'ho', 'celestial_bloom\r', NULL, NULL), + (715, 'ho', 'divine_nobility\r', NULL, NULL), + (716, 'ho', 'fervent_quickening\r', NULL, NULL), + (717, 'ho', 'grand_proclamation\r', NULL, NULL), + (718, 'ho', 'luminary_fate\r', NULL, NULL), + (719, 'ho', 'resonating_cascade\r', NULL, NULL), + (720, 'ho', 'tears_of_luclin\r', NULL, NULL), + (721, 'priest', 'ethereal_salve_result_spin\r', NULL, NULL), + (722, 'priest', 'ethereal_salve_result_spin_blue\r', NULL, NULL), + (723, 'priest', 'ethereal_salve_result_spin_fast\r', NULL, NULL), + (724, 'priest', 'ethereal_salve_result_spin_fast_blue\r', NULL, NULL), + (725, 'priest', 'ethereal_salve_result_spin_fast_green\r', NULL, NULL), + (726, 'priest', 'ethereal_salve_result_spin_fast_yellow\r', NULL, NULL), + (727, 'priest', 'ethereal_salve_result_spin_green\r', NULL, NULL), + (728, 'priest', 'ethereal_salve_result_spin_yellow\r', NULL, NULL), + (729, 'priest', 'ethereal_salve_spin\r', NULL, NULL), + (730, 'priest', 'ethereal_salve_spin_blue\r', NULL, NULL), + (731, 'priest', 'ethereal_salve_spin_fast\r', NULL, NULL), + (732, 'priest', 'ethereal_salve_spin_fast_blue\r', NULL, NULL), + (733, 'priest', 'ethereal_salve_spin_fast_green\r', NULL, NULL), + (734, 'priest', 'ethereal_salve_spin_fast_yellow\r', NULL, NULL), + (735, 'priest', 'ethereal_salve_spin_green\r', NULL, NULL), + (736, 'priest', 'ethereal_salve_spin_yellow\r', NULL, NULL), + (737, 'vampire', 'iceflame\r', NULL, NULL), + (738, 'vampire', 'lifetap_head_p2p\r', NULL, NULL), + (739, 'vampire', 'lifetap_heart_p2p\r', NULL, NULL), + (740, 'vampire', 'lioness_running\r', NULL, NULL), + (741, 'vampire', 'mana_cloak\r', NULL, NULL), + (742, 'vampire', 'power_fount\r', NULL, NULL), + (743, 'vampire', 'rainbow_blast_p2p\r', NULL, NULL), + (744, 'vampire', 'scorpion_attacking\r', NULL, NULL), + (745, 'vampire', 'shower_of_arrows_flaming_p2p\r', NULL, NULL), + (746, 'vampire', 'shower_of_arrows_p2p\r', NULL, NULL), + (747, 'vampire', 'shower_of_daggers_p2p\r', NULL, NULL), + (748, 'vampire', 'skeleton_bowing\r', NULL, NULL), + (749, 'vampire', 'skeleton_dancing\r', NULL, NULL), + (750, 'vampire', 'smoke_lifetap_p2p\r', NULL, NULL), + (751, 'vampire', 'smoke_p2p\r', NULL, NULL), + (752, 'vampire', 'soul_devour_p2p\r', NULL, NULL), + (753, 'vampire', 'spirit_descending\r', NULL, NULL), + (754, 'vampire', 'spirit_of_the_bat\r', NULL, NULL), + (755, 'vampire', 'stance_of_the_bat\r', NULL, NULL), + (756, 'vampire', 'swarm_of_bats\r', NULL, NULL), + (757, 'vampire', 'swarm_of_bats_p2p\r', NULL, NULL), + (758, 'scout', 'choral_rebuff\r', NULL, NULL), + (759, 'scout', 'eerie_sonata\r', NULL, NULL), + (760, 'scout', 'piercing_note\r', NULL, NULL), + (761, 'vampire', 'spirit_appearing\r', NULL, NULL), + (762, 'vampire', 'spirit_appearing_persist\r', NULL, NULL), + (763, 'vampire', 'spirit_ascending\r', NULL, NULL), + (764, 'scout', 'ballad_of_chivalry_gold\r', NULL, NULL), + (765, 'scout', 'ballad_of_chivalry_green\r', NULL, NULL), + (766, 'scout', 'ballad_of_chivalry_purple\r', NULL, NULL), + (767, 'scout', 'ballad_of_chivalry_red\r', NULL, NULL), + (768, 'scout', 'choral_rebuff_blue\r', NULL, NULL), + (769, 'scout', 'choral_rebuff_green\r', NULL, NULL), + (770, 'scout', 'choral_rebuff_red\r', NULL, NULL), + (771, 'vampire', 'devastation_fist\r', NULL, NULL), + (772, 'scout', 'choral_chains\r', NULL, NULL), + (773, 'vampire', 'corruptive_symbol_p2p\r', NULL, NULL), + (774, 'vampire', 'dark_whip\r', NULL, NULL), + (775, 'vampire', 'rainbow_circle_throw\r', NULL, NULL), + (776, 'vampire', 'skeleton_attacking\r', NULL, NULL), + (777, 'vampire', 'umbral_trap\r', NULL, NULL), + (778, 'vampire', 'green_cosmic_debuff_p2p\r', NULL, NULL), + (779, 'scout', 'wavey_song\r', NULL, NULL), + (780, 'any', 'plague\r', NULL, NULL), + (781, 'priest', 'brace_eidolon_aoe\r', NULL, NULL), + (782, 'priest', 'brace_eidolon_psyonic_aoe\r', NULL, NULL), + (783, 'priest', 'evil_ward_aoe\r', NULL, NULL), + (784, 'priest', 'sanctify_aoe\r', NULL, NULL), + (785, 'scout', 'choral_chains_green\r', NULL, NULL), + (786, 'scout', 'choral_chains_purple\r', NULL, NULL), + (787, 'scout', 'wavey_song_blue\r', NULL, NULL), + (788, 'scout', 'wavey_song_green\r', NULL, NULL), + (789, 'scout', 'wavey_song_purple\r', NULL, NULL), + (790, 'any', 'deadly_stench_aoe\r', NULL, NULL), + (791, 'mage', 'earthly_brand_aoe\r', NULL, NULL), + (792, 'mage', 'glacial_wall_aoe\r', NULL, NULL), + (793, 'mage', 'haste_aoe\r', NULL, NULL), + (794, 'mage', 'intelligence_aoe\r', NULL, NULL), + (795, 'mage', 'tremor_aoe\r', NULL, NULL), + (796, 'priest', 'bloodlust_aoe\r', NULL, NULL), + (797, 'priest', 'cactus_01_aoe\r', NULL, NULL), + (798, 'priest', 'crystal_shield_aoe\r', NULL, NULL), + (799, 'priest', 'verdant_genesis_aoe\r', NULL, NULL), + (800, 'priest', 'weakness_aoe\r', NULL, NULL), + (801, 'priest', 'wood_spikes_growing_aoe\r', NULL, NULL), + (802, 'any', 'grim_champion_aoe\r', NULL, NULL), + (803, 'any', 'sanction_of_merit_aoe\r', NULL, NULL), + (804, 'boss', 'pbae_disease_aoe\r', NULL, NULL), + (805, 'mage', 'color_shower_aoe\r', NULL, NULL), + (806, 'mage', 'darkness_skull_buff_aoe\r', NULL, NULL), + (807, 'mage', 'ot_lifetap_aoe\r', NULL, NULL), + (808, 'mage', 'shadow_summon_aoe\r', NULL, NULL), + (809, 'mage', 'teleporter_coalesce_aoe\r', NULL, NULL), + (810, 'mage', 'volatile_refuge_aoe\r', NULL, NULL), + (811, 'priest', 'bloodlust_2_aoe\r', NULL, NULL), + (812, 'priest', 'bull_stomping_aoe\r', NULL, NULL), + (813, 'priest', 'ghost_shield_aoe\r', NULL, NULL), + (814, 'priest', 'lion_attacking_aoe\r', NULL, NULL), + (815, 'priest', 'lion_roaring_aoe\r', NULL, NULL), + (816, 'priest', 'spirit_of_the_wolf_aoe\r', NULL, NULL), + (817, 'priest', 'tree_morph_aoe\r', NULL, NULL), + (818, 'priest', 'vines_root_control_aoe\r', NULL, NULL), + (819, 'priest', 'vitae_buff_heal_aoe\r', NULL, NULL), + (820, 'scout', 'startling_screech_aoe\r', NULL, NULL), + (821, 'fighter', 'attack_down_highdamage_aoe\r', NULL, NULL), + (822, 'fighter', 'charge_up_anger_aoe\r', NULL, NULL), + (823, 'fighter', 'defensive_buff_increase_aoe\r', NULL, NULL), + (824, 'fighter', 'defensive_buff_stealth_aoe\r', NULL, NULL), + (825, 'fighter', 'flying_kick_highdamage_aoe\r', NULL, NULL), + (826, 'fighter', 'offensive_buff_accuracy_aoe\r', NULL, NULL), + (827, 'fighter', 'offensive_buff_agility_aoe\r', NULL, NULL), + (828, 'fighter', 'offensive_buff_group_aoe\r', NULL, NULL), + (829, 'fighter', 'offensive_buff_increase_aoe\r', NULL, NULL), + (830, 'fighter', 'super_buff_anger_aoe\r', NULL, NULL), + (831, 'fighter', 'super_buff_avoidance_aoe\r', NULL, NULL), + (832, 'fighter', 'thrust_forward_debuff_aoe\r', NULL, NULL), + (833, 'fighter', 'whirling_attack_alt_aoe\r', NULL, NULL), + (834, 'fighter', 'whirling_attack_aoe\r', NULL, NULL), + (835, 'fighter', 'whirling_attack_debuff_aoe\r', NULL, NULL), + (836, 'fighter', 'whirling_attack_flame_aoe\r', NULL, NULL), + (837, 'fighter', 'whirling_attack_highdamage_aoe\r', NULL, NULL), + (838, 'fighter', 'whirling_attack_lightning_aoe\r', NULL, NULL), + (839, 'fighter', 'whirling_attack_persist_aoe\r', NULL, NULL), + (840, 'fighter', 'wildswing_lightning_aoe\r', NULL, NULL), + (841, 'spell_revamp', 'pets', 'conjuror_telluric_strike\r', NULL), + (842, 'spell_revamp', 'pets', 'conjuror_thunderous_attack\r', NULL), + (843, 'any', 'coins_falling\r', NULL, NULL), + (844, 'adventure_pack_02', 'terra_armor_01\r', NULL, NULL), + (845, 'adventure_pack_02', 'terra_armor_01_aoe\r', NULL, NULL), + (846, 'adventure_pack_02', 'terra_armor_02\r', NULL, NULL), + (847, 'adventure_pack_02', 'terra_armor_02_aoe\r', NULL, NULL), + (848, 'adventure_pack_02', 'terra_armor_03\r', NULL, NULL), + (849, 'adventure_pack_02', 'terra_armor_03_aoe\r', NULL, NULL), + (850, 'expansion_01', 'force_buff_dust\r', NULL, NULL), + (851, 'expansion_01', 'force_buff_dust_break_wind\r', NULL, NULL), + (852, 'expansion_01', 'force_buff_smoke\r', NULL, NULL), + (853, 'expansion_01', 'force_buff_bones\r', NULL, NULL), + (854, 'expansion_01', 'force_buff_ice\r', NULL, NULL), + (855, 'adventure_pack_02', 'avalanche_01\r', NULL, NULL), + (856, 'adventure_pack_02', 'avalanche_01_aoe\r', NULL, NULL), + (857, 'adventure_pack_02', 'avalanche_02\r', NULL, NULL), + (858, 'adventure_pack_02', 'avalanche_02_aoe\r', NULL, NULL), + (859, 'adventure_pack_02', 'avalanche_03\r', NULL, NULL), + (860, 'adventure_pack_02', 'avalanche_03_aoe\r', NULL, NULL), + (861, 'npc', 'stone_curse\r', NULL, NULL), + (862, 'adventure_pack_02', 'coalescing_notes_gold\r', NULL, NULL), + (863, 'adventure_pack_02', 'coalescing_notes_green\r', NULL, NULL), + (864, 'adventure_pack_02', 'coalescing_notes_purple\r', NULL, NULL), + (865, 'adventure_pack_02', 'coalescing_notes_red\r', NULL, NULL), + (866, 'adventure_pack_02', 'coalescing_poison\r', NULL, NULL), + (867, 'adventure_pack_02', 'coalescing_steam\r', NULL, NULL), + (868, 'adventure_pack_02', 'coalescing_vapor\r', NULL, NULL), + (869, 'any', 'coins_falling_01\r', NULL, NULL), + (870, 'any', 'coins_falling_02\r', NULL, NULL), + (871, 'any', 'coins_falling_03\r', NULL, NULL), + (872, 'any', 'coins_falling_04\r', NULL, NULL), + (873, 'npc', 'flame_curse\r', NULL, NULL), + (874, 'vampire', 'devastation_fist_long\r', NULL, NULL), + (875, 'expansion_01', 'sharpened_focus_01\r', NULL, NULL), + (876, 'expansion_01', 'sharpened_focus_01_aoe\r', NULL, NULL), + (877, 'expansion_01', 'sharpened_focus_02\r', NULL, NULL), + (878, 'expansion_01', 'sharpened_focus_02_aoe\r', NULL, NULL), + (879, 'expansion_01', 'sharpened_focus_03\r', NULL, NULL), + (880, 'expansion_01', 'sharpened_focus_03_aoe\r', NULL, NULL), + (881, 'expansion_01', 'dragon_barakah_breath\r', NULL, NULL), + (882, 'expansion_01', 'dragon_siyamak_breath\r', NULL, NULL), + (883, 'adventure_pack_02', 'hand_grab_skeleton\r', NULL, NULL), + (884, 'adventure_pack_02', 'hand_grab_stone\r', NULL, NULL), + (885, 'expansion_01', 'call_of_power_blue\r', NULL, NULL), + (886, 'expansion_01', 'call_of_power_green\r', NULL, NULL), + (887, 'expansion_01', 'call_of_power_purple\r', NULL, NULL), + (888, 'expansion_01', 'call_of_power_red\r', NULL, NULL), + (889, 'expansion_01', 'cyclone_fire\r', NULL, NULL), + (890, 'expansion_01', 'firespitter\r', NULL, NULL), + (891, 'expansion_01', 'pet_victory\r', NULL, NULL), + (892, 'expansion_01', 'searing_sun_blue\r', NULL, NULL), + (893, 'expansion_01', 'searing_sun_red\r', NULL, NULL), + (894, 'expansion_01', 'searing_sun_yellow\r', NULL, NULL), + (895, 'expansion_01', 'morph_to_pet\r', NULL, NULL), + (896, 'expansion_01', 'morph_to_dragon_cast\r', NULL, NULL), + (897, 'expansion_01', 'morph_to_dragon_result\r', NULL, NULL), + (898, 'expansion_01', 'cyclone_rocks\r', NULL, NULL), + (899, 'expansion_01', 'cyclone_sand\r', NULL, NULL), + (900, 'expansion_01', 'cyclone_snow\r', NULL, NULL), + (901, 'npc', 'word_of_doom\r', NULL, NULL), + (902, 'npc', 'word_of_flame\r', NULL, NULL), + (903, 'npc', 'word_of_obedience\r', NULL, NULL), + (904, 'npc', 'word_of_silence\r', NULL, NULL), + (905, 'adventure_pack_02', 'gnoll_champion_buff\r', NULL, NULL), + (906, 'adventure_pack_02', 'underwater_burning\r', NULL, NULL), + (907, 'any', 'froglok_buff\r', NULL, NULL), + (908, 'expansion_01', 'dragon_barakah_breath_e3\r', NULL, NULL), + (909, 'expansion_01', 'morph_to_elf_cast\r', NULL, NULL), + (910, 'expansion_01', 'morph_to_elf_result\r', NULL, NULL), + (911, 'expansion_01', 'morph_to_dragon_cast_gold\r', NULL, NULL), + (912, 'expansion_01', 'morph_to_dragon_result_gold\r', NULL, NULL), + (913, 'expansion_01', 'morph_to_elf_cast_gold\r', NULL, NULL), + (914, 'expansion_01', 'morph_to_elf_result_gold\r', NULL, NULL), + (915, 'expansion_01', 'knighthood_bauble\r', NULL, NULL), + (916, 'expansion_01', 'scintillating_tapestry\r', NULL, NULL), + (917, 'expansion_01', 'scintillating_tapestry_blue_tint\r', NULL, NULL), + (918, 'expansion_01', 'scintillating_tapestry_gold_tint\r', NULL, NULL), + (919, 'expansion_01', 'scintillating_tapestry_green_tint\r', NULL, NULL), + (920, 'expansion_01', 'scintillating_tapestry_purple_tint\r', NULL, NULL), + (921, 'expansion_01', 'scintillating_tapestry_red_tint\r', NULL, NULL), + (922, 'mage', 'mez_projectile\r', NULL, NULL), + (923, 'expansion_01', 'serpents_intent_gold\r', NULL, NULL), + (924, 'expansion_01', 'serpents_intent_green\r', NULL, NULL), + (925, 'expansion_01', 'serpents_intent_purple\r', NULL, NULL), + (926, 'expansion_01', 'singing_drum\r', NULL, NULL), + (927, 'expansion_01', 'singing_flute\r', NULL, NULL), + (928, 'expansion_01', 'singing_lute\r', NULL, NULL), + (929, 'expansion_01', 'singing_sword\r', NULL, NULL), + (930, 'expansion_01', 'flash_flood_blue\r', NULL, NULL), + (931, 'expansion_01', 'flash_flood_gold\r', NULL, NULL), + (932, 'expansion_01', 'flash_flood_green\r', NULL, NULL), + (933, 'expansion_01', 'flash_flood_purple\r', NULL, NULL), + (934, 'spell_revamp', 'pets', 'conjuror_wave_of_flames\r', NULL), + (935, 'expansion_01', 'desert_call_scarab\r', NULL, NULL), + (936, 'expansion_01', 'desert_call_scorpion\r', NULL, NULL), + (937, 'expansion_01', 'desert_call_spider\r', NULL, NULL), + (938, 'expansion_01', 'protection_of_faith_bat\r', NULL, NULL), + (939, 'expansion_01', 'protection_of_faith_drake\r', NULL, NULL), + (940, 'expansion_01', 'protection_of_faith_hawk\r', NULL, NULL), + (941, 'expansion_01', 'granted_wish_female_blue_yellow\r', NULL, NULL), + (942, 'expansion_01', 'granted_wish_female_green_gold\r', NULL, NULL), + (943, 'expansion_01', 'granted_wish_female_purple_red\r', NULL, NULL), + (944, 'expansion_01', 'granted_wish_male_blue_yellow\r', NULL, NULL), + (945, 'expansion_01', 'granted_wish_male_green_gold\r', NULL, NULL), + (946, 'expansion_01', 'granted_wish_male_purple_red\r', NULL, NULL), + (947, 'mage', 'shadow_summon_2\r', NULL, NULL), + (948, 'mage', 'shadow_summon_2_aoe\r', NULL, NULL), + (949, 'adventure_pack_02', 'fungusman_breath_attack\r', NULL, NULL), + (950, 'mage', 'nuke_lightning_no_rocks\r', NULL, NULL), + (951, 'npc', 'ice_curse\r', NULL, NULL), + (952, 'expansion_01', 'candlelight_vigil\r', NULL, NULL), + (953, 'expansion_01', 'candlelight_vigil_evil\r', NULL, NULL), + (954, 'expansion_01', 'tears_of_druzil_fire\r', NULL, NULL), + (955, 'expansion_01', 'tears_of_druzil_ice\r', NULL, NULL), + (956, 'expansion_01', 'tears_of_druzil_lightning\r', NULL, NULL), + (957, 'expansion_01', 'arena_stone_gaze\r', NULL, NULL), + (958, 'expansion_01', 'arena_water_whirlpool\r', NULL, NULL), + (959, 'expansion_01', 'arena_water_whirlpool_aoe\r', NULL, NULL), + (960, 'expansion_01', 'arena_water_rain_heal\r', NULL, NULL), + (961, 'expansion_01', 'arena_water_rain_heal_aoe\r', NULL, NULL), + (962, 'expansion_01', 'terrorantula_attack\r', NULL, NULL), + (963, 'expansion_01', 'fire_devil_attack1\r', NULL, NULL), + (964, 'expansion_01', 'fire_devil_attack2\r', NULL, NULL), + (965, 'expansion_01', 'harpy_blast_green\r', NULL, NULL), + (966, 'expansion_01', 'harpy_blast_orange\r', NULL, NULL), + (967, 'expansion_01', 'harpy_blast_purple\r', NULL, NULL), + (968, 'scout', 'ruse\r', NULL, NULL), + (969, 'expansion_01', 'arena_heal_blue\r', NULL, NULL), + (970, 'expansion_01', 'arena_heal_red\r', NULL, NULL), + (971, 'expansion_01', 'carry_blue_flag\r', NULL, NULL), + (972, 'expansion_01', 'carry_red_flag\r', NULL, NULL), + (973, 'test', 'design_test1\r', NULL, NULL), + (974, 'test', 'design_test2\r', NULL, NULL), + (975, 'test', 'design_test3\r', NULL, NULL), + (976, 'test', 'design_test4\r', NULL, NULL), + (977, 'test', 'design_test5\r', NULL, NULL), + (978, 'expansion_01', 'design', 'adept_summon\r', NULL), + (979, 'expansion_01', 'arena_voidbeast_attack\r', NULL, NULL), + (980, 'expansion_01', 'arena_voidbeast_smoke\r', NULL, NULL), + (981, 'priest', 'spirit_of_the_elephant\r', NULL, NULL), + (982, 'priest', 'spirit_of_the_elephant_aoe\r', NULL, NULL), + (983, 'fighter', 'charge_up_anger_no_anim\r', NULL, NULL), + (984, 'mage', 'prisms_sparkle_soul\r', NULL, NULL), + (985, 'mage', 'prisms_hex_clinging\r', NULL, NULL), + (986, 'mage', 'prisms_sphere\r', NULL, NULL), + (987, 'mage', 'fire_ball_projectile_long_trail\r', NULL, NULL), + (988, 'mage', 'fire_ball_projectile_long_trail_2\r', NULL, NULL), + (989, 'mage', 'fire_ball_projectile_long_trail_3\r', NULL, NULL), + (990, 'any', 'zombie_scare\r', NULL, NULL), + (991, 'any', 'camera_shake_3\r', NULL, NULL), + (992, 'any', 'camera_shake_2\r', NULL, NULL), + (993, 'design', 'ranged_attack_single_arrow\r', NULL, NULL), + (994, 'any', 'fireworks_burst_overhead\r', NULL, NULL), + (995, 'design', 'npc_shard_recovery\r', NULL, NULL), + (996, 'any', 'fireworks_ring_overhead\r', NULL, NULL), + (997, 'creatures', 'paw_trails_lion\r', NULL, NULL), + (998, 'creatures', 'prism_tube_trails_lion\r', NULL, NULL), + (999, 'creatures', 'sparkle_soul\r', NULL, NULL), + (1000, 'expansion_02', 'pestilence\r', NULL, NULL), + (1001, 'expansion_02', 'dragonbreath\r', NULL, NULL), + (1002, 'expansion_02', 'hypnosis\r', NULL, NULL), + (1003, 'expansion_02', 'juggernaut\r', NULL, NULL), + (1004, 'expansion_02', 'design', 'molotov_cocktail\r', NULL), + (1005, 'expansion_02', 'castigate\r', NULL, NULL), + (1006, 'expansion_02', 'jesters_gamble\r', NULL, NULL), + (1007, 'creatures', 'trace_spider\r', NULL, NULL), + (1008, 'creatures', 'trace_drake\r', NULL, NULL), + (1009, 'creatures', 'attack\r', NULL, NULL), + (1010, 'creatures', 'attack_damage\r', NULL, NULL), + (1011, 'creatures', 'attack_damage_alt\r', NULL, NULL), + (1012, 'creatures', 'attack_debuff\r', NULL, NULL), + (1013, 'creatures', 'attack_flame\r', NULL, NULL), + (1014, 'creatures', 'attack_highdamage\r', NULL, NULL), + (1015, 'creatures', 'attack_highdamage_aoe\r', NULL, NULL), + (1016, 'creatures', 'attack_knockdown\r', NULL, NULL), + (1017, 'creatures', 'attack_knocktoknees\r', NULL, NULL), + (1018, 'creatures', 'attack_lifetap\r', NULL, NULL), + (1019, 'creatures', 'attack_lightning\r', NULL, NULL), + (1020, 'creatures', 'attack_persist\r', NULL, NULL), + (1021, 'creatures', 'attack_soothe\r', NULL, NULL), + (1022, 'creatures', 'attack_stun\r', NULL, NULL), + (1023, 'creatures', 'attack_taunt\r', NULL, NULL), + (1024, 'creatures', 'trace_lion\r', NULL, NULL), + (1025, 'expansion_02', 'call_of_storms\r', NULL, NULL), + (1026, 'expansion_02', 'crazy_tube\r', NULL, NULL), + (1027, 'expansion_02', 'crazy_tube_iron\r', NULL, NULL), + (1028, 'expansion_02', 'mysticism\r', NULL, NULL), + (1029, 'expansion_02', 'fusion\r', NULL, NULL), + (1030, 'any', 'snowball_fight\r', NULL, NULL), + (1031, 'expansion_02', 'verdict\r', NULL, NULL), + (1032, 'expansion_02', 'vortex\r', NULL, NULL), + (1033, 'expansion_02', 'plane_shift\r', NULL, NULL), + (1034, 'expansion_02', 'rift\r', NULL, NULL), + (1035, 'expansion_02', 'undead_tide\r', NULL, NULL), + (1036, 'spell_revamp', 'pets', 'necromancer_unseen_blade\r', NULL), + (1037, 'expansion_02', 'dragons', 'dragon_cone_lightning\r', NULL), + (1038, 'expansion_02', 'dragons', 'dragon_cone_lightning_wave_p2p\r', NULL), + (1039, 'expansion_02', 'dragons', 'dragon_cone_roar\r', NULL), + (1040, 'spell_revamp', 'pets', 'necromancer_acidity\r', NULL), + (1041, 'expansion_02', 'dragons', 'dragon_ice_dagger_breath_small\r', NULL), + (1042, 'expansion_02', 'dragons', 'dragon_ice_laser_breath\r', NULL), + (1043, 'spell_revamp', 'pets', 'necromancer_graven_assault\r', NULL), + (1044, 'spell_revamp', 'pets', 'necromancer_graven_breath\r', NULL), + (1045, 'expansion_02', 'dragons', 'dragon_rock_breath_harla_dar\r', NULL), + (1046, 'expansion_02', 'dragons', 'dragon_rock_breath_vraksakin\r', NULL), + (1047, 'spell_revamp', 'pets', 'necromancer_graven_frenzy\r', NULL), + (1048, 'spell_revamp', 'pets', 'necromancer_graven_scream\r', NULL), + (1049, 'expansion_02', 'dragons', 'dragon_sothis_poison_gas\r', NULL), + (1050, 'expansion_02', 'dragons', 'dragon_steam_breath\r', NULL), + (1051, 'expansion_02', 'dragons', 'dragon_tarranax_breath\r', NULL), + (1052, 'expansion_02', 'dragons', 'drake_fire_breath\r', NULL), + (1053, 'expansion_02', 'achievements', 'shaman_ghost_wolf_pet\r', NULL), + (1054, 'expansion_02', 'achievements', 'mana_channeling\r', NULL), + (1055, 'expansion_02', 'achievements', 'pickpocket\r', NULL), + (1056, 'any', 'levelup_achievement\r', NULL, NULL), + (1057, 'expansion_02', 'dragons', 'tail_attack\r', NULL), + (1058, 'expansion_02', 'dragons', 'wing_attack\r', NULL), + (1059, 'expansion_02', 'dragons', 'dragon_tarranax_breath_aoe\r', NULL), + (1060, 'expansion_02', 'dragons', 'dragon_tarinax_bite\r', NULL), + (1061, 'expansion_02', 'dragons', 'dragon_vyemm_slam\r', NULL), + (1062, 'expansion_02', 'design', 'gnome_rocket_explosion\r', NULL), + (1063, 'expansion_02', 'dragons', 'dragon_vyemm_breath\r', NULL), + (1064, 'expansion_02', 'dragons', 'drake_fire_breath_special\r', NULL), + (1065, 'expansion_02', 'dragons', 'drake_fire_breath_purple\r', NULL), + (1066, 'expansion_02', 'bloody_cleave\r', NULL, NULL), + (1067, 'expansion_02', 'black_fire\r', NULL, NULL), + (1068, 'expansion_02', 'design', 'droag_ranged_attack\r', NULL), + (1069, 'expansion_02', 'design', 'droag_ranged_attack_fire\r', NULL), + (1070, 'expansion_02', 'design', 'bone_hurler\r', NULL), + (1071, 'expansion_02', 'achievements', 'aa_pyramid_gold\r', NULL), + (1072, 'expansion_02', 'achievements', 'aa_pyramid_green\r', NULL), + (1073, 'expansion_02', 'achievements', 'aa_pyramid_purple\r', NULL), + (1074, 'expansion_02', 'achievements', 'aa_pyramid_red\r', NULL), + (1075, 'expansion_02', 'achievements', 'aa_pyramid_gold_big\r', NULL), + (1076, 'expansion_02', 'achievements', 'aa_pyramid_green_big\r', NULL), + (1077, 'expansion_02', 'achievements', 'aa_pyramid_purple_big\r', NULL), + (1078, 'expansion_02', 'achievements', 'aa_pyramid_red_big\r', NULL), + (1079, 'design', 'kerra_tweeze\r', NULL, NULL), + (1080, 'expansion_02', 'design', 'droag_keepers_p2p\r', NULL), + (1081, 'mage', 'frost_spike_result\r', NULL, NULL), + (1082, 'any', 'deadly_stench_orangegreen\r', NULL, NULL), + (1083, 'expansion_02', 'achievements', 'mana_channeling_green\r', NULL), + (1084, 'expansion_02', 'achievements', 'mana_channeling_green_result\r', NULL), + (1085, 'expansion_02', 'achievements', 'mana_channeling_red\r', NULL), + (1086, 'expansion_02', 'achievements', 'mana_channeling_red_result\r', NULL), + (1087, 'expansion_02', 'achievements', 'mana_channeling_result\r', NULL), + (1088, 'expansion_02', 'achievements', 'shaman_ghost_wolf_pet_blue\r', NULL), + (1089, 'expansion_02', 'achievements', 'shaman_ghost_wolf_pet_green\r', NULL), + (1090, 'expansion_02', 'achievements', 'shaman_ghost_wolf_pet_purple\r', NULL), + (1091, 'expansion_02', 'achievements', 'shaman_ghost_wolf_pet_red\r', NULL), + (1092, 'any', 'deadly_stench_smoke\r', NULL, NULL), + (1093, 'expansion_02', 'design', 'basilisk_slam\r', NULL), + (1094, 'expansion_02', 'dragons', 'drake_smoke_breath_special\r', NULL), + (1095, 'expansion_02', 'design', 'bangflasher\r', NULL), + (1096, 'expansion_02', 'design', 'smoky_vial_of_escape\r', NULL), + (1097, 'expansion_02', 'design', 'webby_canister\r', NULL), + (1098, 'expansion_02', 'design', 'chiller_bomb\r', NULL), + (1099, 'priest', 'cat_leaping_aoe\r', NULL, NULL), + (1100, 'priest', 'horse_running_aoe\r', NULL, NULL), + (1101, 'priest', 'phoenix_aoe\r', NULL, NULL), + (1102, 'priest', 'phoenix_descending_aoe\r', NULL, NULL), + (1103, 'priest', 'phoenix_descending_result_aoe\r', NULL, NULL), + (1104, 'priest', 'rekindle_life_aoe\r', NULL, NULL), + (1105, 'priest', 'resurrect_aoe\r', NULL, NULL), + (1106, 'priest', 'snake_attacking_aoe\r', NULL, NULL), + (1107, 'priest', 'spirit_of_the_stag_aoe\r', NULL, NULL), + (1108, 'design', 'keg_fill_mug\r', NULL, NULL), + (1109, 'expansion_01', 'velociraptor_fire_breath_attack\r', NULL, NULL), + (1110, 'expansion_03', 'design', 'steamfont_geyser\r', NULL), + (1111, 'expansion_03', 'design', 'steamfont_steam_tubes\r', NULL), + (1112, 'adventure_pack_04', 'nayad_tail_thrash\r', NULL, NULL), + (1113, 'adventure_pack_04', 'nayad_flame_claw\r', NULL, NULL), + (1114, 'adventure_pack_04', 'nayad_nizari_blessing\r', NULL, NULL), + (1115, 'adventure_pack_04', 'nayad_alluring_voice\r', NULL, NULL), + (1116, 'adventure_pack_04', 'nayad_devouring_spirit\r', NULL, NULL), + (1117, 'adventure_pack_04', 'nayad_blackheal\r', NULL, NULL), + (1118, 'adventure_pack_04', 'birdman_wing_buffet\r', NULL, NULL), + (1119, 'adventure_pack_04', 'birdman_lightning_blaze\r', NULL, NULL), + (1120, 'expansion_03', 'design', 'faydark_fireflies\r', NULL), + (1121, 'expansion_03', 'design', 'faydark_hummingbirds\r', NULL), + (1122, 'adventure_pack_04', 'birdman_avalanch\r', NULL, NULL), + (1123, 'adventure_pack_04', 'dryad_teleporter\r', NULL, NULL), + (1124, 'adventure_pack_04', 'dryad_attack_aoe\r', NULL, NULL), + (1125, 'adventure_pack_04', 'dragon_turtle_stomp\r', NULL, NULL), + (1126, 'adventure_pack_04', 'dryad_rain_of_thistles\r', NULL, NULL), + (1127, 'adventure_pack_04', 'dragon_turtle_breath\r', NULL, NULL), + (1128, 'adventure_pack_02', 'gnoll_dust_throw\r', NULL, NULL), + (1129, 'adventure_pack_02', 'hand_stone_terraporter\r', NULL, NULL), + (1130, 'expansion_03', 'design', 'steamfont_clockwork_fixer\r', NULL), + (1131, 'expansion_03', 'design', 'steamfont_slow_steam\r', NULL), + (1132, 'expansion_03', 'design', 'steamfont_item_oxidizer\r', NULL), + (1133, 'deity', 'exp3_deity_ros_fury\r', NULL, NULL), + (1134, 'deity', 'exp3_deity_general_sermon\r', NULL, NULL), + (1135, 'expansion_03', 'design', 'steamfont_crystal_golem_special\r', NULL), + (1136, 'expansion_03', 'copter_welder_flamethrower\r', NULL, NULL), + (1137, 'expansion_03', 'copter_welder_lightning_p2p\r', NULL, NULL), + (1138, 'expansion_03', 'design', 'crushbone_war_ancient_stomp\r', NULL), + (1139, 'expansion_03', 'design', 'vampire_bat_form\r', NULL), + (1140, 'design', 'trap_spear\r', NULL, NULL), + (1141, 'design', 'trap_weight\r', NULL, NULL), + (1142, 'expansion_03', 'clockwork_worker_lightning_projectile\r', NULL, NULL), + (1143, 'expansion_03', 'fairy_drake_breath\r', NULL, NULL), + (1144, 'expansion_03', 'fairy_drake_breath_blue\r', NULL, NULL), + (1145, 'expansion_03', 'fairy_drake_breath_purple\r', NULL, NULL), + (1146, 'expansion_03', 'design', 'mistmoore_baelesqui_attack\r', NULL), + (1147, 'expansion_03', 'design', 'rain_caller_werewolf_slay\r', NULL), + (1148, 'expansion_03', 'design', 'vampire_bat_escape\r', NULL), + (1149, 'expansion_03', 'design', 'mistmoore_tanara_mez_dance\r', NULL), + (1150, 'expansion_03', 'design', 'mistmoore_ferox_stun_grasp\r', NULL), + (1151, 'expansion_03', 'design', 'mistmoore_ferox_stoneform\r', NULL), + (1152, 'expansion_03', 'design', 'pumpkin_flaming_thrown\r', NULL), + (1153, 'expansion_03', 'design', 'crushbone_kelzaral_frost_shield\r', NULL), + (1154, 'expansion_03', 'design', 'loping_shinspitter\r', NULL), + (1155, 'expansion_03', 'achievements', 'paladin_lightning_white\r', NULL), + (1156, 'expansion_03', 'achievements', 'guardian_block\r', NULL), + (1157, 'expansion_03', 'teleport_druid_ring\r', NULL, NULL), + (1158, 'expansion_03', 'teleport_wizard_faydwer\r', NULL, NULL), + (1159, 'expansion_03', 'design', 'charged_gear_throw\r', NULL), + (1160, 'expansion_03', 'wuoshi_choking_vines_aoe\r', NULL, NULL), + (1161, 'expansion_03', 'wuoshi_tree_morph\r', NULL, NULL), + (1162, 'design', 'brell_earthquake\r', NULL, NULL), + (1163, 'expansion_03', 'achievements', 'monk_duck\r', NULL), + (1164, 'expansion_03', 'wuoshi_fire_and_ice_aoe\r', NULL, NULL), + (1165, 'expansion_03', 'achievements', 'shadowknight_lightning_blue\r', NULL), + (1166, 'scout', 'stifle_result\r', NULL, NULL), + (1167, 'expansion_03', 'teleport_wizard_faydwer_targetted\r', NULL, NULL), + (1168, 'expansion_03', 'mayong_blanket_of_eternal_night\r', NULL, NULL), + (1169, 'expansion_03', 'mayongs_touch\r', NULL, NULL), + (1170, 'expansion_03', 'mayong_soul_paralysis\r', NULL, NULL), + (1171, 'expansion_03', 'mayong_gaze_of_obedience\r', NULL, NULL), + (1172, 'expansion_03', 'recharging_station\r', NULL, NULL), + (1173, 'expansion_03', 'mcp_breath_attack\r', NULL, NULL), + (1174, 'expansion_03', 'mcp_fire_breath_attack\r', NULL, NULL), + (1175, 'expansion_03', 'mcp_laser_p2p\r', NULL, NULL), + (1176, 'expansion_03', 'mcp_laser_p2p_2\r', NULL, NULL), + (1177, 'expansion_03', 'mcp_laser_aoe\r', NULL, NULL), + (1178, 'expansion_03', 'mcp_fire_breath_attack_p2p\r', NULL, NULL), + (1179, 'expansion_03', 'achievements', 'mana_burn_necro\r', NULL), + (1180, 'expansion_03', 'achievements', 'mana_burn_wizard\r', NULL), + (1181, 'expansion_03', 'achievements', 'assassin_frontload\r', NULL), + (1182, 'expansion_03', 'achievements', 'coercer_tashiana\r', NULL), + (1183, 'expansion_03', 'achievements', 'brigand_slide\r', NULL), + (1184, 'expansion_03', 'achievements', 'dirge_confront_fear\r', NULL), + (1185, 'expansion_03', 'achievements', 'illusionist_illuminate\r', NULL), + (1186, 'any', 'blessings_miracles', 'brell_serilis_blessing\r', NULL), + (1187, 'any', 'blessings_miracles', 'brell_serilis_miracle\r', NULL), + (1188, 'any', 'blessings_miracles', 'innoruuk_blessing\r', NULL), + (1189, 'any', 'blessings_miracles', 'innoruuk_miracle\r', NULL), + (1190, 'any', 'blessings_miracles', 'mithaniel_marr_blessing\r', NULL), + (1191, 'any', 'blessings_miracles', 'mithaniel_marr_miracle\r', NULL), + (1192, 'any', 'blessings_miracles', 'quellious_blessing\r', NULL), + (1193, 'any', 'blessings_miracles', 'quellious_miracle\r', NULL), + (1194, 'any', 'blessings_miracles', 'rallos_zek_blessing\r', NULL), + (1195, 'any', 'blessings_miracles', 'rallos_zek_miracle\r', NULL), + (1196, 'any', 'blessings_miracles', 'solusek_ro_blessing\r', NULL), + (1197, 'any', 'blessings_miracles', 'solusek_ro_miracle\r', NULL), + (1198, 'any', 'blessings_miracles', 'tunare_blessing\r', NULL), + (1199, 'any', 'blessings_miracles', 'tunare_miracle\r', NULL), + (1200, 'expansion_03', 'avatars', 'brell_tectonic_barrage\r', NULL), + (1201, 'expansion_03', 'avatars', 'cazic_thule_green_mists_of_fear\r', NULL), + (1202, 'expansion_03', 'avatars', 'innoruuk_hateful_repulsion\r', NULL), + (1203, 'expansion_03', 'avatars', 'innoruuk_hates_blinding\r', NULL), + (1204, 'expansion_03', 'avatars', 'rallos_zek_fog_of_war\r', NULL), + (1205, 'expansion_03', 'avatars', 'tunare_tectonic_barrage\r', NULL), + (1206, 'expansion_03', 'design', 'cube_cached_backdraft\r', NULL), + (1207, 'expansion_03', 'menace_tailswipe\r', NULL, NULL), + (1208, 'expansion_03', 'menace_stomp\r', NULL, NULL), + (1209, 'expansion_03', 'menace_breath_fire\r', NULL, NULL), + (1210, 'expansion_03', 'menace_breath_fire_short\r', NULL, NULL), + (1211, 'expansion_03', 'design', 'unrest_fireplace_flame\r', NULL), + (1212, 'expansion_03', 'design', 'unrest_hammer_door_smash\r', NULL), + (1213, 'expansion_03', 'avatars', 'marrs_radiance\r', NULL), + (1214, 'expansion_03', 'avatars', 'marrs_resplendence\r', NULL), + (1215, 'expansion_03', 'avatars', 'peaceful_emanations\r', NULL), + (1216, 'expansion_03', 'avatars', 'quel_karmic_backlash\r', NULL), + (1217, 'expansion_03', 'avatars', 'rallos_kick\r', NULL), + (1218, 'expansion_03', 'avatars', 'sweeping_cobra\r', NULL), + (1219, 'expansion_03', 'avatars', 'tunare_triggered_root\r', NULL), + (1220, 'expansion_03', 'fae_silvani_transformation\r', NULL, NULL), + (1221, 'any', 'blessings_miracles', 'cazic_thule_blessing\r', NULL), + (1222, 'any', 'blessings_miracles', 'cazic_thule_miracle\r', NULL), + (1223, 'any', 'fruitcake_fight\r', NULL, NULL), + (1224, 'any', 'snowball_fight_big\r', NULL, NULL), + (1225, 'fighter', 'attack\r', NULL, NULL), + (1226, 'fighter', 'attack_alt\r', NULL, NULL), + (1227, 'fighter', 'attack_debuff\r', NULL, NULL), + (1228, 'fighter', 'attack_flame\r', NULL, NULL), + (1229, 'fighter', 'attack_highdamage\r', NULL, NULL), + (1230, 'fighter', 'attack_ice\r', NULL, NULL), + (1231, 'fighter', 'attack_knockdown\r', NULL, NULL), + (1232, 'fighter', 'attack_knocktoknees\r', NULL, NULL), + (1233, 'fighter', 'attack_lifetap\r', NULL, NULL), + (1234, 'fighter', 'attack_lightning\r', NULL, NULL), + (1235, 'fighter', 'attack_notes\r', NULL, NULL), + (1236, 'fighter', 'attack_soothe\r', NULL, NULL), + (1237, 'fighter', 'attack_stun\r', NULL, NULL), + (1238, 'fighter', 'attack_taunt\r', NULL, NULL), + (1239, 'expansion_03', 'design', 'screwloose_bomb\r', NULL), + (1240, 'fighter', 'ranged_attack_single_arrow\r', NULL, NULL), + (1241, 'priest', 'hammer_stun\r', NULL, NULL), + (1242, 'expansion_03', 'design', 'hemogloblin_appear\r', NULL), + (1243, 'any', 'dagger_vision_p2p\r', NULL, NULL), + (1244, 'any', 'heart_vision_p2p\r', NULL, NULL), + (1245, 'expansion_03', 'design', 'unrest_trdskl_cooking\r', NULL), + (1246, 'harvesting', 'investigation\r', NULL, NULL), + (1247, 'expansion_03', 'design', 'unrest_static_scare\r', NULL), + (1248, 'expansion_03', 'design', 'unrest_terror_shriek\r', NULL), + (1249, 'expansion_03', 'design', 'unrest_zombie_scare\r', NULL), + (1250, 'expansion_03', 'design', 'unrest_piano\r', NULL), + (1251, 'expansion_03', 'design', 'unrest_piano_long\r', NULL), + (1252, 'expansion_03', 'design', 'unrest_revenant_vomit\r', NULL), + (1253, 'fighter', 'berserker_toughness\r', NULL, NULL), + (1254, 'fighter', 'berserker_wild_swing\r', NULL, NULL), + (1255, 'fighter', 'bruiser_wild_swing\r', NULL, NULL), + (1256, 'fighter', 'guardian_toughness\r', NULL, NULL), + (1257, 'fighter', 'guardian_wild_swing\r', NULL, NULL), + (1258, 'fighter', 'monk_wild_swing\r', NULL, NULL), + (1259, 'fighter', 'paladin_toughness\r', NULL, NULL), + (1260, 'fighter', 'paladin_wild_swing\r', NULL, NULL), + (1261, 'fighter', 'shadowknight_toughness\r', NULL, NULL), + (1262, 'fighter', 'shadowknight_wild_swing\r', NULL, NULL), + (1263, 'fighter', 'taunt_monk\r', NULL, NULL), + (1264, 'fighter', 'taunt_shadowknight\r', NULL, NULL), + (1265, 'any', 'ghost_shield_p2p\r', NULL, NULL), + (1266, 'design', 'deathfist_arena_champion\r', NULL, NULL), + (1267, 'fighter', 'berserker_call_to_arms\r', NULL, NULL), + (1268, 'fighter', 'berserker_hunker\r', NULL, NULL), + (1269, 'fighter', 'berserker_mangle\r', NULL, NULL), + (1270, 'fighter', 'berserker_shield\r', NULL, NULL), + (1271, 'fighter', 'berserker_taunting_blow\r', NULL, NULL), + (1272, 'fighter', 'bruiser_indomitable_will\r', NULL, NULL), + (1273, 'fighter', 'bruiser_martial_focus\r', NULL, NULL), + (1274, 'fighter', 'bruiser_power_strike\r', NULL, NULL), + (1275, 'fighter', 'bruiser_shield\r', NULL, NULL), + (1276, 'fighter', 'bruiser_whirling_attack\r', NULL, NULL), + (1277, 'fighter', 'bruiser_toughness\r', NULL, NULL), + (1278, 'fighter', 'guardian_call_to_arms\r', NULL, NULL), + (1279, 'fighter', 'guardian_hunker\r', NULL, NULL), + (1280, 'fighter', 'guardian_mangle\r', NULL, NULL), + (1281, 'fighter', 'guardian_shield\r', NULL, NULL), + (1282, 'fighter', 'guardian_taunting_blow\r', NULL, NULL), + (1283, 'fighter', 'guardian_whirling_attack\r', NULL, NULL), + (1284, 'fighter', 'monk_indomitable_will\r', NULL, NULL), + (1285, 'fighter', 'monk_kick\r', NULL, NULL), + (1286, 'fighter', 'monk_kick1\r', NULL, NULL), + (1287, 'fighter', 'monk_kick2\r', NULL, NULL), + (1288, 'fighter', 'monk_martial_focus\r', NULL, NULL), + (1289, 'fighter', 'monk_power_strike\r', NULL, NULL), + (1290, 'fighter', 'monk_shield\r', NULL, NULL), + (1291, 'fighter', 'monk_toughness\r', NULL, NULL), + (1292, 'fighter', 'monk_whirling_attack\r', NULL, NULL), + (1293, 'fighter', 'paladin_call_to_arms\r', NULL, NULL), + (1294, 'fighter', 'paladin_kick\r', NULL, NULL), + (1295, 'fighter', 'paladin_righteous_blow\r', NULL, NULL), + (1296, 'fighter', 'paladin_shield\r', NULL, NULL), + (1297, 'fighter', 'paladin_ward\r', NULL, NULL), + (1298, 'fighter', 'paladin_whirling_attack\r', NULL, NULL), + (1299, 'fighter', 'shadowknight_call_to_arms\r', NULL, NULL), + (1300, 'fighter', 'shadowknight_shield\r', NULL, NULL), + (1301, 'fighter', 'shadowknight_whirling_attack\r', NULL, NULL), + (1302, 'fighter', 'shout\r', NULL, NULL), + (1303, 'procs', 'disease\r', NULL, NULL), + (1304, 'procs', 'divine\r', NULL, NULL), + (1305, 'procs', 'lifetap_p2p\r', NULL, NULL), + (1306, 'fighter', 'bruiser_call_to_arms\r', NULL, NULL), + (1307, 'fighter', 'berserker_whirling_attack\r', NULL, NULL), + (1308, 'fighter', 'intervene\r', NULL, NULL), + (1309, 'expansion_04', 'defiler_deathward\r', NULL, NULL), + (1310, 'expansion_04', 'dirge_gravitas\r', NULL, NULL), + (1311, 'expansion_04', 'illusionist_doppleganger\r', NULL, NULL), + (1312, 'expansion_04', 'warlock_acid_storm\r', NULL, NULL), + (1313, 'design', 'horn_blowing_centaur\r', NULL, NULL), + (1314, 'design', 'horn_blowing_conch\r', NULL, NULL), + (1315, 'design', 'horn_blowing_gnoll\r', NULL, NULL), + (1316, 'design', 'horn_blowing_goblin\r', NULL, NULL), + (1317, 'expansion_04', 'fury_ball_lightning\r', NULL, NULL), + (1318, 'expansion_04', 'wizard_rays_of_disintigration\r', NULL, NULL), + (1319, 'expansion_04', 'troubador_countersong\r', NULL, NULL), + (1320, 'expansion_04', 'necromancer_vampirism\r', NULL, NULL), + (1321, 'expansion_04', 'coercer_puppetmaster\r', NULL, NULL), + (1322, 'expansion_04', 'assassin_fatal_followup\r', NULL, NULL), + (1323, 'spell_revamp', 'pets', 'necromancer_graven_strike\r', NULL), + (1324, 'spell_revamp', 'pets', 'necromancer_graven_vanquishing\r', NULL), + (1325, 'spell_revamp', 'pets', 'necromancer_grim_bolt\r', NULL), + (1326, 'spell_revamp', 'pets', 'necromancer_grim_devastation\r', NULL), + (1327, 'npc', 'neriak_only', 'electric_whimsy\r', NULL), + (1328, 'npc', 'neriak_only', 'fire_whimsy\r', NULL), + (1329, 'npc', 'neriak_only', 'leaf_pile_whimsy\r', NULL), + (1330, 'npc', 'neriak_only', 'water_whimsy\r', NULL), + (1331, 'npc', 'neriak_only', 'spotlight\r', NULL), + (1332, 'npc', 'neriak_only', 'summon_undead_1\r', NULL), + (1333, 'npc', 'neriak_only', 'summon_undead_2\r', NULL), + (1334, 'npc', 'neriak_only', 'summon_undead_3\r', NULL), + (1335, 'design', 'nightmare_ghost_projectile\r', NULL, NULL), + (1336, 'design', 'nightmare_ghost_p2p\r', NULL, NULL), + (1337, 'deity', 'anvils_of_fizzlethorpe\r', NULL, NULL), + (1338, 'fighter', 'berserker_fury\r', NULL, NULL), + (1339, 'fighter', 'monk_mending\r', NULL, NULL), + (1340, 'fighter', 'berserker_stifled\r', NULL, NULL), + (1341, 'fighter', 'bruiser_close_mind\r', NULL, NULL), + (1342, 'any', 'royal_wave_short\r', NULL, NULL), + (1343, 'deity', 'bristlebane_rofl\r', NULL, NULL), + (1344, 'expansion_04', 'design', 'exp04_rgn_fens_of_nathsar', 'stinging_nettles\r'), + (1345, 'any', 'ice_breath_blizzard\r', NULL, NULL), + (1346, 'expansion_04', 'npc', 'golem_sonic_kick\r', NULL), + (1347, 'expansion_04', 'silence_mana_drain\r', NULL, NULL), + (1348, 'expansion_04', 'living_dead_dot\r', NULL, NULL), + (1349, 'expansion_04', 'npc', 'persist_plant_filament_grab\r', NULL), + (1350, 'expansion_04', 'gangrene_dot\r', NULL, NULL), + (1351, 'design', 'cow_catapult\r', NULL, NULL), + (1352, 'deity', 'bristlebane_anvil_kick\r', NULL, NULL), + (1353, 'scout', 'long_scream\r', NULL, NULL), + (1354, 'deity', 'mischievious_malaise\r', NULL, NULL), + (1355, 'expansion_04', 'npc', 'dpo_lava_blob_projectile\r', NULL), + (1356, 'deity', 'bristlebane_whirling_bladestorm\r', NULL, NULL), + (1357, 'expansion_04', 'drachnid_queen_web\r', NULL, NULL), + (1358, 'expansion_04', 'beehive_toss\r', NULL, NULL), + (1359, 'artisan', 'rp_hair_of_the_dog\r', NULL, NULL), + (1360, 'artisan', 'rp_jesters_nightcap\r', NULL, NULL), + (1361, 'expansion_04', 'wild_heart_buff\r', NULL, NULL), + (1362, 'expansion_04', 'mighty_roar\r', NULL, NULL), + (1363, 'expansion_04', 'wild_rampage\r', NULL, NULL), + (1364, 'expansion_04', 'pawbuster\r', NULL, NULL), + (1365, 'expansion_04', 'thunderous_fist\r', NULL, NULL), + (1366, 'any', 'blessings_miracles', 'bristlebane_blessing\r', NULL), + (1367, 'any', 'blessings_miracles', 'bristlebane_miracle\r', NULL), + (1368, 'expansion_04', 'npc', 'overking_sword_summon\r', NULL), + (1369, 'expansion_04', 'npc', 'sebilite_protector_rocks\r', NULL), + (1370, 'fighter', 'bruiser_fiery_fists\r', NULL, NULL), + (1371, 'fighter', 'bruiser_stone_deaf\r', NULL, NULL), + (1372, 'procs', 'stoneskin\r', NULL, NULL), + (1373, 'expansion_04', 'npc', 'deity_karana_quest\r', NULL), + (1374, 'expansion_04', 'npc', 'deity_karana_quest_blast\r', NULL), + (1375, 'expansion_04', 'deity_karana_crystal_merge\r', NULL, NULL), + (1376, 'expansion_04', 'charasis_light_puzzle_purple\r', NULL, NULL), + (1377, 'expansion_04', 'charasis_light_puzzle_turquoise\r', NULL, NULL), + (1378, 'expansion_04', 'design', 'orkales_electric_attack\r', NULL), + (1379, 'expansion_04', 'design', 'exp04_dun_charasis', 'iron_windlass_frontal_ae\r'), + (1380, 'expansion_04', 'design', 'exp04_dun_charasis', 'iron_windlass_multi-attack\r'), + (1381, 'expansion_04', 'design', 'exp04_dun_charasis', 'tzilug_poison_sting\r'), + (1382, 'expansion_04', 'design', 'exp04_dun_charasis', 'tzilug_poison_rain\r'), + (1383, 'expansion_04', 'npc', 'fon_iksar_skeleton_cast\r', NULL), + (1384, 'expansion_04', 'design', 'exp04_dun_charasis', 'golem_sandstorm\r'), + (1385, 'expansion_04', 'design', 'exp04_dun_charasis', 'golem_sandstorm_solitude\r'), + (1386, 'expansion_04', 'design', 'exp04_dun_charasis', 'drusella_head_bowling\r'), + (1387, 'expansion_04', 'deity_bertoxxulous_pus_bolt\r', NULL, NULL), + (1388, 'expansion_04', 'deity_bertoxxulous_mix_plague\r', NULL, NULL), + (1389, 'expansion_04', 'deity_bertoxxulous_sickly_aura\r', NULL, NULL), + (1390, 'expansion_04', 'deity_bertoxxulous_walking_blight\r', NULL, NULL), + (1391, 'expansion_04', 'deity_tribunal_inquiry\r', NULL, NULL), + (1392, 'expansion_04', 'deity_karana_blessing_glade\r', NULL, NULL), + (1393, 'expansion_04', 'deity_karana_blessing_storm\r', NULL, NULL), + (1394, 'expansion_04', 'deity_karana_shroud_of_clouds\r', NULL, NULL), + (1395, 'expansion_04', 'deity_karana_unyielding_ice\r', NULL, NULL), + (1396, 'expansion_04', 'timed_heart_tap\r', NULL, NULL), + (1397, 'expansion_04', 'soul_attack_p2p\r', NULL, NULL), + (1398, 'expansion_04', 'venril_ring_buff\r', NULL, NULL), + (1399, 'expansion_04', 'venril_crystal_charge_up\r', NULL, NULL), + (1400, 'expansion_04', 'venril_soul_attack_p2p\r', NULL, NULL), + (1401, 'expansion_04', 'venril_fatalisis_p2p\r', NULL, NULL), + (1402, 'expansion_04', 'venril_toxic_infusion\r', NULL, NULL), + (1403, 'expansion_04', 'design', 'exp04_rgn_fens_of_nathsar', 'cactus_spines\r'), + (1404, 'expansion_04', 'design', 'exp04_dun_charasis', 'reading_scroll\r'), + (1405, 'expansion_04', 'design', 'exp04_dun_charasis', 'turn_valve\r'), + (1406, 'expansion_04', 'behemoth_basher_attack01\r', NULL, NULL), + (1407, 'expansion_04', 'behemoth_basher_attack02\r', NULL, NULL), + (1408, 'expansion_04', 'behemoth_basher_attack03\r', NULL, NULL), + (1409, 'expansion_04', 'behemoth_piercer_attack01\r', NULL, NULL), + (1410, 'expansion_04', 'behemoth_piercer_attack02\r', NULL, NULL), + (1411, 'expansion_04', 'behemoth_piercer_attack03\r', NULL, NULL), + (1412, 'expansion_04', 'behemoth_eye_beams\r', NULL, NULL), + (1413, 'any', 'fireworks_exp_04_confetti\r', NULL, NULL), + (1414, 'expansion_04', 'dragon_breath_poison\r', NULL, NULL), + (1415, 'expansion_04', 'dragon_tail_swipe\r', NULL, NULL), + (1416, 'expansion_04', 'dragon_tail_swipe_long\r', NULL, NULL), + (1417, 'expansion_04', 'dragon_wing_buffet\r', NULL, NULL), + (1418, 'expansion_04', 'dragon_wing_buffet_long\r', NULL, NULL), + (1419, 'expansion_04', 'dragon_wing_buffet_trak\r', NULL, NULL), + (1420, 'expansion_04', 'design', 'barracuda_throw\r', NULL), + (1421, 'expansion_04', 'dragon_breath_cold\r', NULL, NULL), + (1422, 'expansion_04', 'dragon_breath_divine\r', NULL, NULL), + (1423, 'expansion_04', 'dragon_breath_heat\r', NULL, NULL), + (1424, 'expansion_04', 'dragon_breath_lightning\r', NULL, NULL), + (1425, 'expansion_04', 'dragon_breath_magic\r', NULL, NULL), + (1426, 'expansion_04', 'dragon_exp04_breath_cold\r', NULL, NULL), + (1427, 'expansion_04', 'dragon_exp04_breath_divine\r', NULL, NULL), + (1428, 'expansion_04', 'dragon_exp04_breath_heat\r', NULL, NULL), + (1429, 'expansion_04', 'dragon_exp04_breath_lightning\r', NULL, NULL), + (1430, 'expansion_04', 'dragon_exp04_breath_magic\r', NULL, NULL), + (1431, 'expansion_04', 'dragon_exp04_breath_poison\r', NULL, NULL), + (1432, 'any', 'blessings_miracles', 'bertoxxulous_blessing\r', NULL), + (1433, 'any', 'blessings_miracles', 'bertoxxulous_miracle\r', NULL), + (1434, 'any', 'blessings_miracles', 'karana_blessing\r', NULL), + (1435, 'any', 'blessings_miracles', 'karana_miracle\r', NULL), + (1436, 'any', 'blessings_miracles', 'tribunal_blessing\r', NULL), + (1437, 'any', 'blessings_miracles', 'tribunal_miracle\r', NULL), + (1438, 'expansion_04', 'deity_tribunal_final_judgement\r', NULL, NULL), + (1439, 'expansion_04', 'npc', 'klp_lightning_pillars\r', NULL), + (1440, 'expansion_04', 'drake_breath_cold\r', NULL, NULL), + (1441, 'expansion_04', 'drake_breath_divine\r', NULL, NULL), + (1442, 'expansion_04', 'drake_breath_heat\r', NULL, NULL), + (1443, 'expansion_04', 'drake_breath_lightning\r', NULL, NULL), + (1444, 'expansion_04', 'drake_breath_magic\r', NULL, NULL), + (1445, 'expansion_04', 'drake_breath_poison\r', NULL, NULL), + (1446, 'expansion_04', 'trakanon_arcane_maelstrom\r', NULL, NULL), + (1447, 'expansion_04', 'trakanon_arcane_reckoning\r', NULL, NULL), + (1448, 'expansion_04', 'trakanon_fetid_cloud\r', NULL, NULL), + (1449, 'expansion_04', 'trakanon_pestilential_pause\r', NULL, NULL), + (1450, 'expansion_04', 'trakanon_prescient_intervention\r', NULL, NULL), + (1451, 'expansion_04', 'trakanon_static_repulsion\r', NULL, NULL), + (1452, 'expansion_04', 'trakanon_toxic_tempest\r', NULL, NULL), + (1453, 'npc', 'wizard_rune_blast\r', NULL, NULL), + (1454, 'any', 'pie_fight\r', NULL, NULL), + (1455, 'artisan', 'rp_flaming_dragon_breath\r', NULL, NULL), + (1456, 'artisan', 'rp_queen_masquerade\r', NULL, NULL), + (1457, 'artisan', 'rp_vampiric_toothache\r', NULL, NULL), + (1458, 'artisan', 'rp_forget_me_not\r', NULL, NULL), + (1459, 'any', 'pudding_fight\r', NULL, NULL), + (1460, 'any', 'bread_fight\r', NULL, NULL), + (1461, 'expansion_04', 'design', 'defiler_mega_buff\r', NULL), + (1462, 'design', 'paladin_religious_xp\r', NULL, NULL), + (1463, 'design', 'shadownight_armor_assemble\r', NULL, NULL), + (1464, 'expansion_04', 'design', 'epics', 'necro_epic_break_01\r'), + (1465, 'expansion_04', 'design', 'epics', 'necro_epic_break_02\r'), + (1466, 'expansion_04', 'design', 'epics', 'necro_epic_break_03\r'), + (1467, 'expansion_04', 'design', 'epics', 'necro_epic_break_04\r'), + (1468, 'deity', 'tunare_disease_cure\r', NULL, NULL), + (1469, 'deity', 'bertox_feverous_plague\r', NULL, NULL), + (1470, 'deity', 'bertox_plague_bolt\r', NULL, NULL), + (1471, 'deity', 'bertox_total_collapse\r', NULL, NULL), + (1472, 'deity', 'bertox_violent_spasm\r', NULL, NULL), + (1473, 'any', 'erollisi_rose_offer\r', NULL, NULL), + (1474, 'any', 'book_fight\r', NULL, NULL), + (1475, 'deity', 'bertox_toxic_blade\r', NULL, NULL), + (1476, 'deity', 'bertox_plaguebringers_rebuke\r', NULL, NULL), + (1477, 'deity', 'tribunal_brutal_judgement\r', NULL, NULL), + (1478, 'deity', 'tribunal_whirling_aoe_attack\r', NULL, NULL), + (1479, 'deity', 'tribunal_light_of_justice\r', NULL, NULL), + (1480, 'deity', 'tribunal_plead_mercy\r', NULL, NULL), + (1481, 'deity', 'karana_chain_lightning\r', NULL, NULL), + (1482, 'deity', 'karana_planar_tempest\r', NULL, NULL), + (1483, 'deity', 'karana_chaotic_whirlwind\r', NULL, NULL), + (1484, 'deity', 'karana_stormbolt\r', NULL, NULL), + (1485, 'deity', 'karana_squelching_squall\r', NULL, NULL), + (1486, 'expansion_04', 'design', 'witchdoctor_choking_poison\r', NULL), + (1487, 'design', 'mark_of_merriment\r', NULL, NULL), + (1488, 'any', 'frisbee_toss\r', NULL, NULL), + (1489, 'any', 'pillow_fight\r', NULL, NULL), + (1490, 'any', 'boomerang_toss\r', NULL, NULL), + (1491, 'mage', 'vacuous_buff\r', NULL, NULL), + (1492, 'expansion_05', 'design', 'exp05_dun_nuroga', 'bilthor_flame_breath\r'), + (1493, 'expansion_04', 'design', 'nortalz_charged_strike\r', NULL), + (1494, 'expansion_04', 'design', 'spore_king_spore_toss\r', NULL), + (1495, 'any', 'net_toss\r', NULL, NULL), + (1496, 'expansion_04', 'design', 'spore_king_spore_growth\r', NULL), + (1497, 'expansion_05', 'design', 'exp05_dun_nuroga', 'goblin_throw_brick\r'), + (1498, 'expansion_05', 'design', 'exp05_dun_nuroga', 'sacrifice_chains\r'), + (1499, 'expansion_05', 'design', 'exp05_dun_nuroga', 'golem_rain\r'), + (1500, 'expansion_05', 'seething_hydration\r', NULL, NULL), + (1501, 'expansion_05', 'aqueous_globe\r', NULL, NULL), + (1502, 'expansion_05', 'saturated_torrent\r', NULL, NULL), + (1503, 'expansion_05', 'concussive_blast\r', NULL, NULL), + (1504, 'expansion_05', 'design', 'exp05_dun_miragul_upper', 'reverie_wild_swing\r'), + (1505, 'expansion_05', 'design', 'exp05_dun_miragul_upper', 'reverie_icy_descant\r'), + (1506, 'expansion_05', 'censer_blessing\r', NULL, NULL), + (1507, 'expansion_05', 'barrel_cannon\r', NULL, NULL), + (1508, 'expansion_05', 'dervish_book_throw\r', NULL, NULL), + (1509, 'expansion_05', 'fire_bolt_p2p\r', NULL, NULL), + (1510, 'expansion_05', 'brain_leaving\r', NULL, NULL), + (1511, 'expansion_05', 'dervish_book_throw_aoe\r', NULL, NULL), + (1512, 'expansion_05', 'lack_of_faith_p2p\r', NULL, NULL), + (1513, 'expansion_05', 'flames_of_scorn\r', NULL, NULL), + (1514, 'expansion_05', 'void_beast_impale\r', NULL, NULL), + (1515, 'expansion_05', 'brain_freeze\r', NULL, NULL), + (1516, 'expansion_05', 'mind_blade\r', NULL, NULL), + (1517, 'expansion_05', 'wing_blade_attack\r', NULL, NULL), + (1518, 'expansion_05', 'withering_sanity_p2p\r', NULL, NULL), + (1519, 'expansion_05', 'design', 'exp05_dun_najena_hollow', 'design_steam_vent\r'), + (1520, 'expansion_05', 'evasive_maneuvers\r', NULL, NULL), + (1521, 'expansion_05', 'chomping_skulls\r', NULL, NULL), + (1522, 'expansion_05', 'explosive_arrow\r', NULL, NULL), + (1523, 'expansion_05', 'upbeat_tempo\r', NULL, NULL), + (1524, 'expansion_05', 'super_buff_blue\r', NULL, NULL), + (1525, 'expansion_05', 'super_buff_green\r', NULL, NULL), + (1526, 'expansion_05', 'super_buff_orange\r', NULL, NULL), + (1527, 'expansion_05', 'super_buff_purple\r', NULL, NULL), + (1528, 'expansion_05', 'clinging_darkness\r', NULL, NULL), + (1529, 'expansion_05', 'miragul_puzzle_complete\r', NULL, NULL), + (1530, 'expansion_05', 'golem_barnacle_blast\r', NULL, NULL), + (1531, 'expansion_05', 'lava_column_blast\r', NULL, NULL), + (1532, 'expansion_05', 'lava_god_finish_move\r', NULL, NULL), + (1533, 'expansion_05', 'heat_exhaustion\r', NULL, NULL), + (1534, 'expansion_05', 'assassin_killing_blow\r', NULL, NULL), + (1535, 'expansion_05', 'assassin_touch_nightshade\r', NULL, NULL), + (1536, 'expansion_05', 'rogue_taunting_blows\r', NULL, NULL), + (1537, 'expansion_05', 'rogue_glancing_blows\r', NULL, NULL), + (1538, 'expansion_05', 'brigand_evil_drain\r', NULL, NULL), + (1539, 'expansion_05', 'brigand_evil_drain_aoe\r', NULL, NULL), + (1540, 'expansion_05', 'armor_drain_buff\r', NULL, NULL), + (1541, 'expansion_05', 'armor_drain_debuff\r', NULL, NULL), + (1542, 'expansion_05', 'bard_dexterous_sonata\r', NULL, NULL), + (1543, 'expansion_05', 'bard_intoxicating_notes\r', NULL, NULL), + (1544, 'expansion_05', 'dirge_frenzy_buff\r', NULL, NULL), + (1545, 'expansion_05', 'fighter_hate_attack\r', NULL, NULL), + (1546, 'expansion_05', 'warrior_cry\r', NULL, NULL), + (1547, 'expansion_05', 'guardian_defensive_minded\r', NULL, NULL), + (1548, 'expansion_05', 'guardian_sentinel_strike\r', NULL, NULL), + (1549, 'expansion_05', 'berserker_force_wall\r', NULL, NULL), + (1550, 'expansion_05', 'berserker_jeering_onslaught\r', NULL, NULL), + (1551, 'expansion_05', 'crusader_break_chains\r', NULL, NULL), + (1552, 'expansion_05', 'paladin_stonewall\r', NULL, NULL), + (1553, 'expansion_05', 'paladin_faithful_cry\r', NULL, NULL), + (1554, 'expansion_05', 'shadowknight_essence_siphon\r', NULL, NULL), + (1555, 'expansion_05', 'shadowknight_furor\r', NULL, NULL), + (1556, 'expansion_05', 'brawler_shield_absorb\r', NULL, NULL), + (1557, 'expansion_05', 'monk_bob_weave\r', NULL, NULL), + (1558, 'expansion_05', 'monk_hidden_openings\r', NULL, NULL), + (1559, 'expansion_05', 'bruiser_adrenaline_rush\r', NULL, NULL), + (1560, 'expansion_05', 'bruiser_impenetrable_will\r', NULL, NULL), + (1561, 'expansion_05', 'bruiser_staggering_blow\r', NULL, NULL), + (1562, 'expansion_05', 'swashbuckler_hate_aoe\r', NULL, NULL), + (1563, 'expansion_05', 'priest_raid_rez_aoe\r', NULL, NULL), + (1564, 'expansion_05', 'cleric_sacrifice\r', NULL, NULL), + (1565, 'expansion_05', 'cleric_overwhelming_arms\r', NULL, NULL), + (1566, 'expansion_05', 'inquisitor_persecution\r', NULL, NULL), + (1567, 'expansion_05', 'inquisitor_persecution_stance\r', NULL, NULL), + (1568, 'expansion_05', 'inquisitor_prayer_stance\r', NULL, NULL), + (1569, 'expansion_05', 'templar_faith_stance\r', NULL, NULL), + (1570, 'expansion_05', 'templar_peaceaggro_stance\r', NULL, NULL), + (1571, 'expansion_05', 'templar_persecution\r', NULL, NULL), + (1572, 'expansion_05', 'mage_bewilderment\r', NULL, NULL), + (1573, 'expansion_05', 'summoner_hasten\r', NULL, NULL), + (1574, 'expansion_05', 'defiler_ravenous_protector\r', NULL, NULL), + (1575, 'expansion_05', 'defiler_warding_spirit\r', NULL, NULL), + (1576, 'expansion_05', 'mystic_spiritual_ally\r', NULL, NULL), + (1577, 'expansion_05', 'mystic_ritual_prot\r', NULL, NULL), + (1578, 'expansion_05', 'druid_wrath_nature\r', NULL, NULL), + (1579, 'expansion_05', 'fury_master_storms\r', NULL, NULL), + (1580, 'expansion_05', 'fury_nature_ferocity\r', NULL, NULL), + (1581, 'expansion_05', 'warden_crit_debilitation\r', NULL, NULL), + (1582, 'expansion_05', 'warden_glacial_assult\r', NULL, NULL), + (1583, 'expansion_05', 'warden_nature_aura\r', NULL, NULL), + (1584, 'expansion_05', 'sorcerer_deception\r', NULL, NULL), + (1585, 'expansion_05', 'wizard_hail_storm\r', NULL, NULL), + (1586, 'expansion_05', 'warlock_plaguebringer\r', NULL, NULL), + (1587, 'expansion_05', 'conjuror_blazing\r', NULL, NULL), + (1588, 'expansion_05', 'necromancer_wrath_servant\r', NULL, NULL), + (1589, 'expansion_05', 'enchanter_peace_of_mind\r', NULL, NULL), + (1590, 'expansion_05', 'illusionist_aoe_buff\r', NULL, NULL), + (1591, 'expansion_05', 'coercer_aoe_buff\r', NULL, NULL), + (1592, 'expansion_05', 'creeping_death_aoe\r', NULL, NULL), + (1593, 'expansion_05', 'plague_flies\r', NULL, NULL), + (1594, 'expansion_05', 'plague_flies_aoe\r', NULL, NULL), + (1595, 'expansion_05', 'poison_song_stun\r', NULL, NULL), + (1596, 'expansion_05', 'curse_ykesha\r', NULL, NULL), + (1597, 'any', 'ghost_cleanse\r', NULL, NULL), + (1598, 'expansion_05', 'void_portal_summon\r', NULL, NULL), + (1599, 'any', 'fireworks_shooting_fist\r', NULL, NULL), + (1600, 'expansion_05', 'voidman', 'void_burst\r', NULL), + (1601, 'expansion_05', 'voidman', 'void_cosma_shielding\r', NULL), + (1602, 'expansion_05', 'voidman', 'void_crackling_wave\r', NULL), + (1603, 'expansion_05', 'design', 'exp05_dun_bef_asylum', 'cast_mage_bridge_blast\r'), + (1604, 'expansion_05', 'design', 'exp05_dun_bef_asylum', 'mage_bridge_blast\r'), + (1605, 'any', 'blessings_miracles', 'anashti_sul_blessing\r', NULL), + (1606, 'any', 'blessings_miracles', 'anashti_sul_miracle\r', NULL), + (1607, 'any', 'blessings_miracles', 'rodcet_nife_blessing\r', NULL), + (1608, 'any', 'blessings_miracles', 'rodcet_nife_miracle\r', NULL), + (1609, 'expansion_05', 'greenmist_skull_attack_p2p\r', NULL, NULL), + (1610, 'expansion_05', 'lich', 'lich_charge_up\r', NULL), + (1611, 'expansion_05', 'lich', 'lich_blast_cone_p2p\r', NULL), + (1612, 'expansion_05', 'lich', 'lich_energy_blast_aoe\r', NULL), + (1613, 'expansion_05', 'voidman', 'void_bubble_shielding\r', NULL), + (1614, 'expansion_05', 'voidman', 'void_shield_implode\r', NULL), + (1615, 'expansion_05', 'voidman', 'void_5_attack\r', NULL), + (1616, 'any', 'spear_throw\r', NULL, NULL), + (1617, 'expansion_05', 'lich', 'lich_evil_stun\r', NULL), + (1618, 'expansion_05', 'lightning_cage_p2p\r', NULL, NULL), + (1619, 'expansion_05', 'voidman', 'void_pit_blast_wave\r', NULL), + (1620, 'expansion_05', 'punji_trap\r', NULL, NULL), + (1621, 'expansion_05', 'string_trap_p2p\r', NULL, NULL), + (1622, 'expansion_05', 'putrid_gash\r', NULL, NULL), + (1623, 'expansion_05', 'strangulation\r', NULL, NULL), + (1624, 'expansion_05', 'bone_frenzy\r', NULL, NULL), + (1625, 'expansion_05', 'cast_rune_ehernaughts\r', NULL, NULL), + (1626, 'expansion_05', 'varsoon_void_tether\r', NULL, NULL), + (1627, 'expansion_05', 'varsoon_void_crystal_p2p\r', NULL, NULL), + (1628, 'expansion_05', 'design', 'exp05_dun_void_palace', 'void_beam_blue_nuke\r'), + (1629, 'expansion_05', 'design', 'exp05_dun_void_palace', 'void_beam_red_nuke\r'), + (1630, 'expansion_05', 'design', 'exp05_dun_void_palace', 'void_beam_barrier_nuke\r'), + (1631, 'expansion_05', 'voidman', 'void_heal_beam_p2p\r', NULL), + (1632, 'expansion_05', 'void_channel_beam_p2p\r', NULL, NULL), + (1633, 'expansion_05', 'voidman', 'void_elemental_onslaught\r', NULL), + (1634, 'expansion_05', 'voidman', 'void_exothermic_reaction\r', NULL), + (1635, 'expansion_05', 'voidman', 'void_meteor_storm\r', NULL), + (1636, 'expansion_05', 'voidman', 'void_negative_flux\r', NULL), + (1637, 'expansion_05', 'voidman', 'void_negative_flux_storm\r', NULL), + (1638, 'expansion_05', 'voidman', 'void_squall\r', NULL), + (1639, 'expansion_05', 'voidman', 'void_xythian_tempest\r', NULL), + (1640, 'expansion_05', 'voidman', 'void_exothermic_explosion\r', NULL), + (1641, 'expansion_05', 'voidman', 'void_squall_result\r', NULL), + (1642, 'expansion_05', 'voidman', 'void_xythiam_ragestorm\r', NULL), + (1643, 'expansion_05', 'voidman', 'void_xythiam_storm\r', NULL), + (1644, 'expansion_05', 'result_nether_cloud\r', NULL, NULL), + (1645, 'expansion_05', 'void_beast_nether_mists\r', NULL, NULL), + (1646, 'expansion_05', 'manta_nether_delusions\r', NULL, NULL), + (1647, 'expansion_05', 'manta_nether_shadows\r', NULL, NULL), + (1648, 'expansion_05', 'ancient_curse\r', NULL, NULL), + (1649, 'expansion_05', 'ancient_tempest\r', NULL, NULL), + (1650, 'expansion_05', 'anashti_sul', 'anashti_transform\r', NULL), + (1651, 'expansion_05', 'anashti_sul', 'anashti_summon\r', NULL), + (1652, 'expansion_05', 'vampire_dragon', 'vd_breath_attack\r', NULL), + (1653, 'expansion_05', 'vampire_dragon', 'vd_mymerian_burst\r', NULL), + (1654, 'expansion_05', 'vampire_dragon', 'vd_vampiric_mists\r', NULL), + (1655, 'expansion_05', 'vampire_dragon', 'vd_result_breath_attack\r', NULL), + (1656, 'expansion_05', 'result_ignite\r', NULL, NULL), + (1657, 'expansion_05', 'result_arcane_blast\r', NULL, NULL), + (1658, 'expansion_05', 'lich', 'lich_arcane_blast_aoe\r', NULL), + (1659, 'expansion_05', 'dreadful_swipe_aoe\r', NULL, NULL), + (1660, 'expansion_05', 'spinning_fury_aoe\r', NULL, NULL), + (1661, 'expansion_05', 'dust_of_despair\r', NULL, NULL), + (1662, 'expansion_05', 'rotting_fog\r', NULL, NULL), + (1663, 'expansion_05', 'winds_asphyxia\r', NULL, NULL), + (1664, 'expansion_05', 'acrid_cloud\r', NULL, NULL), + (1665, 'expansion_05', 'pungent_mist\r', NULL, NULL), + (1666, 'expansion_05', 'toxic_fog\r', NULL, NULL), + (1667, 'expansion_05', 'conscription_charm\r', NULL, NULL), + (1668, 'expansion_05', 'touch_of_death\r', NULL, NULL), + (1669, 'expansion_05', 'cast_dusts_of_disintegration\r', NULL, NULL), + (1670, 'expansion_05', 'result_dusts_of_disintegration\r', NULL, NULL), + (1671, 'expansion_05', 'gnollslayer_judgement\r', NULL, NULL), + (1672, 'expansion_05', 'frigid_gale\r', NULL, NULL), + (1673, 'expansion_05', 'mana_diffusion\r', NULL, NULL), + (1674, 'expansion_05', 'quick_heal\r', NULL, NULL), + (1675, 'expansion_05', 'galeforce_aura\r', NULL, NULL), + (1676, 'expansion_05', 'fist_norrathian_star\r', NULL, NULL), + (1677, 'expansion_05', 'aortic_rupture\r', NULL, NULL), + (1678, 'expansion_05', 'grummus_poison_breath\r', NULL, NULL), + (1679, 'any', 'fireworks_flower_burst_overhead\r', NULL, NULL), + (1680, 'any', 'fireworks_foamy_burst_overhead\r', NULL, NULL), + (1681, 'any', 'fireworks_rainbow_burst_overhead\r', NULL, NULL), + (1682, 'spell_revamp', 'fighter', 'berserker', 'blood_lust_buff_tiered\r'), + (1683, 'spell_revamp', 'fighter', 'berserker', 'defensive_stance_tiered\r'), + (1684, 'spell_revamp', 'fighter', 'berserker', 'disorder_tiered\r'), + (1685, 'spell_revamp', 'fighter', 'berserker', 'kick_tiered\r'), + (1686, 'spell_revamp', 'fighter', 'berserker', 'mangle_tiered\r'), + (1687, 'spell_revamp', 'fighter', 'berserker', 'offend_tiered\r'), + (1688, 'spell_revamp', 'fighter', 'berserker', 'offensive_stance_tiered\r'), + (1689, 'spell_revamp', 'fighter', 'berserker', 'raging_blow_tiered\r'), + (1690, 'spell_revamp', 'fighter', 'berserker', 'whirling_attack_tiered\r'), + (1691, 'spell_revamp', 'fighter', 'berserker', 'wild_strike_tiered\r'), + (1692, 'spell_revamp', 'fighter', 'berserker', 'wall_of_fury_tiered\r'), + (1693, 'spell_revamp', 'fighter', 'berserker', 'tackle_tiered\r'), + (1694, 'spell_revamp', 'fighter', 'berserker', 'surround_tiered\r'), + (1695, 'spell_revamp', 'fighter', 'berserker', 'mutilate_tiered\r'), + (1696, 'spell_revamp', 'fighter', 'berserker', 'frenzy_tiered\r'), + (1697, 'spell_revamp', 'fighter', 'berserker', 'bullying_defense_tiered\r'), + (1698, 'spell_revamp', 'fighter', 'berserker', 'proc_hit_taunt_tiered\r'), + (1699, 'spell_revamp', 'fighter', 'berserker', 'proc_slow_tiered\r'), + (1700, 'spell_revamp', 'fighter', 'berserker', 'agility_buff_tiered\r'), + (1701, 'spell_revamp', 'fighter', 'berserker', 'avoidance_buff_tiered\r'), + (1702, 'expansion_04', 'dragon_breath_p2p\r', NULL, NULL), + (1703, 'design', 'water_djinn_electric_charge\r', NULL, NULL), + (1704, 'design', 'water_djinn_void_charge\r', NULL, NULL), + (1705, 'npc', 'elementalfire_greater', 'fire_rift_aoe\r', NULL), + (1706, 'npc', 'elementalfire_greater', 'fire_storm_aoe\r', NULL), + (1707, 'npc', 'digg_badger_buff\r', NULL, NULL), + (1708, 'npc', 'digg_mushroom_buff\r', NULL, NULL), + (1709, 'npc', 'digg_snake_buff\r', NULL, NULL), + (1710, 'npc', 'digg_rock_shocker\r', NULL, NULL), + (1711, 'spell_revamp', 'fighter', 'berserker', 'anger_buff_aoe_tiered\r'), + (1712, 'spell_revamp', 'fighter', 'berserker', 'anger_buff_tiered\r'), + (1713, 'spell_revamp', 'fighter', 'berserker', 'blood_rage_buff_tiered\r'), + (1714, 'spell_revamp', 'fighter', 'berserker', 'proc_berserk_tiered\r'), + (1715, 'spell_revamp', 'fighter', 'berserker', 'battle_chant_tiered\r'), + (1716, 'expansion_05', 'dervish_ice_blast_aoe\r', NULL, NULL), + (1717, 'expansion_05', 'dervish_ice_disarm\r', NULL, NULL), + (1718, 'expansion_05', 'dervish_ice_concussive_blast\r', NULL, NULL), + (1719, 'expansion_05', 'ogre_elemental_aoe_blast\r', NULL, NULL), + (1720, 'expansion_05', 'poison_bookstorm\r', NULL, NULL), + (1721, 'spell_revamp', 'fighter', 'berserker', 'adrenaline_tiered\r'), + (1722, 'spell_revamp', 'fighter', 'berserker', 'aggression_buff_tiered\r'), + (1723, 'spell_revamp', 'fighter', 'berserker', 'barrage_tiered\r'), + (1724, 'spell_revamp', 'fighter', 'berserker', 'focus_buff_tiered\r'), + (1725, 'spell_revamp', 'fighter', 'berserker', 'insolence_tiered\r'), + (1726, 'spell_revamp', 'fighter', 'berserker', 'juggernaut_tiered\r'), + (1727, 'spell_revamp', 'fighter', 'berserker', 'open_wounds_tiered\r'), + (1728, 'spell_revamp', 'fighter', 'berserker', 'parry_buff_tiered\r'), + (1729, 'spell_revamp', 'fighter', 'berserker', 'proc_heal_tiered\r'), + (1730, 'spell_revamp', 'fighter', 'berserker', 'proc_hit_tiered\r'), + (1731, 'spell_revamp', 'fighter', 'berserker', 'rampage_buff_tiered\r'), + (1732, 'spell_revamp', 'fighter', 'berserker', 'stunning_cry_tiered\r'), + (1733, 'spell_revamp', 'fighter', 'berserker', 'vanquish_tiered\r'), + (1734, 'spell_revamp', 'fighter', 'berserker', 'vision_madness_tiered\r'), + (1735, 'spell_revamp', 'fighter', 'berserker', 'growl_tiered\r'), + (1736, 'spell_revamp', 'fighter', 'guardian', 'assault_tiered\r'), + (1737, 'spell_revamp', 'fighter', 'guardian', 'defense_stance_tiered\r'), + (1738, 'spell_revamp', 'fighter', 'guardian', 'knee_bash_tiered\r'), + (1739, 'spell_revamp', 'fighter', 'guardian', 'provoke_tiered\r'), + (1740, 'spell_revamp', 'fighter', 'guardian', 'shouting_tiered\r'), + (1741, 'spell_revamp', 'fighter', 'guardian', 'strike_tiered\r'), + (1742, 'spell_revamp', 'fighter', 'guardian', 'aggression_hold_tiered\r'), + (1743, 'spell_revamp', 'fighter', 'guardian', 'allay_tiered\r'), + (1744, 'spell_revamp', 'fighter', 'guardian', 'battle_tactics_tiered\r'), + (1745, 'spell_revamp', 'fighter', 'guardian', 'call_of_shielding_tiered\r'), + (1746, 'spell_revamp', 'fighter', 'guardian', 'call_to_arms_tiered\r'), + (1747, 'spell_revamp', 'fighter', 'guardian', 'concussion_tiered\r'), + (1748, 'spell_revamp', 'fighter', 'guardian', 'crumble_tiered\r'), + (1749, 'spell_revamp', 'fighter', 'guardian', 'entrench_tiered\r'), + (1750, 'spell_revamp', 'fighter', 'guardian', 'guardian_sphere_tiered\r'), + (1751, 'spell_revamp', 'fighter', 'guardian', 'iron_will_tiered\r'), + (1752, 'spell_revamp', 'fighter', 'guardian', 'offense_stance_tiered\r'), + (1753, 'spell_revamp', 'fighter', 'guardian', 'proc_bubble_shield_tiered\r'), + (1754, 'spell_revamp', 'fighter', 'guardian', 'proc_root_tiered\r'), + (1755, 'spell_revamp', 'fighter', 'guardian', 'proc_taunt_tiered\r'), + (1756, 'spell_revamp', 'fighter', 'guardian', 'rallying_cry_tiered\r'), + (1757, 'spell_revamp', 'fighter', 'guardian', 'retaliate_tiered\r'), + (1758, 'spell_revamp', 'fighter', 'guardian', 'sentinel_tiered\r'), + (1759, 'spell_revamp', 'fighter', 'guardian', 'shield_bash_tiered\r'), + (1760, 'spell_revamp', 'fighter', 'guardian', 'slam_tiered\r'), + (1761, 'spell_revamp', 'fighter', 'guardian', 'taunt_strike_tiered\r'), + (1762, 'spell_revamp', 'fighter', 'guardian', 'true_strike_tiered\r'), + (1763, 'spell_revamp', 'fighter', 'guardian', 'wall_of_might_tiered\r'), + (1764, 'spell_revamp', 'fighter', 'guardian', 'wound_tiered\r'), + (1765, 'spell_revamp', 'fighter', 'guardian', 'reinforcement_tiered\r'), + (1766, 'spell_revamp', 'fighter', 'guardian', 'sentry_watch_tiered\r'), + (1767, 'spell_revamp', 'fighter', 'guardian', 'tower_of_stone_tiered\r'), + (1768, 'spell_revamp', 'fighter', 'guardian', 'obliterate_tiered\r'), + (1769, 'spell_revamp', 'fighter', 'guardian', 'recapture_tiered\r'), + (1770, 'spell_revamp', 'fighter', 'guardian', 'stand_firm_tiered\r'), + (1771, 'spell_revamp', 'fighter', 'guardian', 'taunting_assault_tiered\r'), + (1772, 'spell_revamp', 'fighter', 'shadowknight', 'boot_tiered\r'), + (1773, 'spell_revamp', 'fighter', 'shadowknight', 'condemning_smite_tiered\r'), + (1774, 'spell_revamp', 'fighter', 'shadowknight', 'decree_tiered\r'), + (1775, 'spell_revamp', 'fighter', 'shadowknight', 'defensive_pact_tiered\r'), + (1776, 'spell_revamp', 'fighter', 'shadowknight', 'fetid_strike_tiered\r'), + (1777, 'spell_revamp', 'fighter', 'shadowknight', 'infernal_blessing_tiered\r'), + (1778, 'spell_revamp', 'fighter', 'shadowknight', 'insinuate_tiered\r'), + (1779, 'spell_revamp', 'fighter', 'shadowknight', 'pariah_strike_tiered\r'), + (1780, 'spell_revamp', 'fighter', 'shadowknight', 'proc_lifetap_tiered\r'), + (1781, 'spell_revamp', 'fighter', 'shadowknight', 'sickening_circle_tiered\r'), + (1782, 'spell_revamp', 'fighter', 'shadowknight', 'unholy_hunger_tiered\r'), + (1783, 'spell_revamp', 'fighter', 'shadowknight', 'unholy_weapon_tiered\r'), + (1784, 'spell_revamp', 'fighter', 'shadowknight', 'cleave_flesh_tiered\r'), + (1785, 'spell_revamp', 'fighter', 'shadowknight', 'cruel_aura_tiered\r'), + (1786, 'spell_revamp', 'fighter', 'shadowknight', 'death_touch_tiered\r'), + (1787, 'spell_revamp', 'fighter', 'shadowknight', 'evasive_tactics_tiered\r'), + (1788, 'spell_revamp', 'fighter', 'shadowknight', 'lucan_leadership_tiered\r'), + (1789, 'spell_revamp', 'fighter', 'shadowknight', 'shield_slam_tiered\r'), + (1790, 'spell_revamp', 'fighter', 'shadowknight', 'graven_embrace_tiered\r'), + (1791, 'spell_revamp', 'fighter', 'shadowknight', 'grim_coil_tiered\r'), + (1792, 'spell_revamp', 'fighter', 'shadowknight', 'dark_caress_tiered\r'), + (1793, 'spell_revamp', 'fighter', 'shadowknight', 'tainted_sacrament_tiered\r'), + (1794, 'spell_revamp', 'fighter', 'shadowknight', 'consume_vitae_tiered\r'), + (1795, 'spell_revamp', 'fighter', 'shadowknight', 'draw_strength_tiered\r'), + (1796, 'spell_revamp', 'fighter', 'shadowknight', 'offensive_blade_tiered\r'), + (1797, 'spell_revamp', 'fighter', 'shadowknight', 'proc_disease_tiered\r'), + (1798, 'spell_revamp', 'fighter', 'shadowknight', 'dreadful_wrath_tiered\r'), + (1799, 'spell_revamp', 'fighter', 'shadowknight', 'shadowy_illusion_tiered\r'), + (1800, 'spell_revamp', 'fighter', 'shadowknight', 'dispoil_tiered\r'), + (1801, 'spell_revamp', 'fighter', 'shadowknight', 'mana_sieve_tiered\r'), + (1802, 'spell_revamp', 'fighter', 'shadowknight', 'tap_veins_tiered\r'), + (1803, 'spell_revamp', 'fighter', 'shadowknight', 'proc_int_speed_tiered\r'), + (1804, 'spell_revamp', 'fighter', 'shadowknight', 'death_march_tiered\r'), + (1805, 'spell_revamp', 'fighter', 'shadowknight', 'pestilence_tiered\r'), + (1806, 'spell_revamp', 'fighter', 'shadowknight', 'bloodletter_tiered\r'), + (1807, 'spell_revamp', 'fighter', 'paladin', 'faithful_swing_tiered\r'), + (1808, 'spell_revamp', 'fighter', 'paladin', 'incite_tiered\r'), + (1809, 'spell_revamp', 'fighter', 'paladin', 'offensive_courage_tiered\r'), + (1810, 'spell_revamp', 'fighter', 'paladin', 'proc_threat_stun_tiered\r'), + (1811, 'spell_revamp', 'fighter', 'paladin', 'penitent_kick_tiered\r'), + (1812, 'spell_revamp', 'fighter', 'paladin', 'divine_circle_tiered\r'), + (1813, 'spell_revamp', 'fighter', 'paladin', 'blinding_rays_tiered\r'), + (1814, 'spell_revamp', 'fighter', 'paladin', 'divine_inspiration_tiered\r'), + (1815, 'spell_revamp', 'fighter', 'paladin', 'proc_divine_hit_stun_tiered\r'), + (1816, 'spell_revamp', 'fighter', 'paladin', 'proc_divine_hit_tiered\r'), + (1817, 'spell_revamp', 'fighter', 'paladin', 'blessed_weapon_tiered\r'), + (1818, 'spell_revamp', 'fighter', 'paladin', 'righteous_blow_tiered\r'), + (1819, 'spell_revamp', 'fighter', 'paladin', 'devotion_tiered\r'), + (1820, 'spell_revamp', 'fighter', 'paladin', 'judgement_tiered\r'), + (1821, 'spell_revamp', 'fighter', 'paladin', 'bash_tiered\r'), + (1822, 'spell_revamp', 'fighter', 'paladin', 'circle_of_conviction_tiered\r'), + (1823, 'spell_revamp', 'fighter', 'paladin', 'power_cleave_tiered\r'), + (1824, 'spell_revamp', 'fighter', 'paladin', 'ancient_pledge_tiered\r'), + (1825, 'spell_revamp', 'fighter', 'paladin', 'bayles_leadership_tiered\r'), + (1826, 'spell_revamp', 'fighter', 'paladin', 'redemption_tiered\r'), + (1827, 'spell_revamp', 'fighter', 'paladin', 'holy_touch_tiered\r'), + (1828, 'spell_revamp', 'fighter', 'paladin', 'holy_aid_tiered\r'), + (1829, 'spell_revamp', 'fighter', 'paladin', 'blessing_of_the_paladin_tiered\r'), + (1830, 'spell_revamp', 'fighter', 'paladin', 'penitent_sacrament_tiered\r'), + (1831, 'spell_revamp', 'fighter', 'paladin', 'oath_strike_tiered\r'), + (1832, 'spell_revamp', 'fighter', 'paladin', 'prayer_of_healing_tiered\r'), + (1833, 'spell_revamp', 'fighter', 'paladin', 'refusal_of_atonement_tiered\r'), + (1834, 'spell_revamp', 'fighter', 'paladin', 'brimstone_tiered\r'), + (1835, 'spell_revamp', 'fighter', 'paladin', 'elixir_of_resuscitation_tiered\r'), + (1836, 'spell_revamp', 'fighter', 'paladin', 'sigil_of_heroism_tiered\r'), + (1837, 'spell_revamp', 'fighter', 'paladin', 'consecration_tiered\r'), + (1838, 'spell_revamp', 'fighter', 'paladin', 'holy_ground_tiered\r'), + (1839, 'spell_revamp', 'fighter', 'paladin', 'castigate_tiered\r'), + (1840, 'spell_revamp', 'fighter', 'paladin', 'divine_favor_tiered\r'), + (1841, 'spell_revamp', 'fighter', 'paladin', 'knights_defense_tiered\r'), + (1842, 'spell_revamp', 'fighter', 'paladin', 'offering_of_armament_tiered\r'), + (1843, 'spell_revamp', 'fighter', 'shadowknight', 'doom_judgement_tiered\r'), + (1844, 'spell_revamp', 'fighter', 'bruiser', 'bouncer_defense_stance_tiered\r'), + (1845, 'spell_revamp', 'fighter', 'bruiser', 'jab_tiered\r'), + (1846, 'spell_revamp', 'fighter', 'bruiser', 'boil_tiered\r'), + (1847, 'spell_revamp', 'fighter', 'bruiser', 'flying_kick_tiered\r'), + (1848, 'spell_revamp', 'fighter', 'bruiser', 'blazing_strikes_tiered\r'), + (1849, 'spell_revamp', 'fighter', 'bruiser', 'impose_tiered\r'), + (1850, 'spell_revamp', 'fighter', 'bruiser', 'brutality_tiered\r'), + (1851, 'spell_revamp', 'fighter', 'bruiser', 'stamp_tiered\r'), + (1852, 'spell_revamp', 'fighter', 'bruiser', 'blaze_kick_tiered\r'), + (1853, 'spell_revamp', 'fighter', 'bruiser', 'battle_ready_tiered\r'), + (1854, 'spell_revamp', 'fighter', 'bruiser', 'tenacity_tiered\r'), + (1855, 'spell_revamp', 'fighter', 'bruiser', 'bruiser_offense_stance_tiered\r'), + (1856, 'spell_revamp', 'fighter', 'bruiser', 'proc_heat_tiered\r'), + (1857, 'spell_revamp', 'fighter', 'bruiser', 'adamantine_fist_tiered\r'), + (1858, 'spell_revamp', 'fighter', 'bruiser', 'thundering_fists_tiered\r'), + (1859, 'spell_revamp', 'fighter', 'bruiser', 'proc_magic_tiered\r'), + (1860, 'spell_revamp', 'fighter', 'bruiser', 'bruising_fist_tiered\r'), + (1861, 'spell_revamp', 'fighter', 'bruiser', 'shake_off_tiered\r'), + (1862, 'spell_revamp', 'fighter', 'bruiser', 'hundred_hands_tiered\r'), + (1863, 'spell_revamp', 'fighter', 'bruiser', 'ignore_agony_tiered\r'), + (1864, 'spell_revamp', 'fighter', 'bruiser', 'roughhouse_tiered\r'), + (1865, 'spell_revamp', 'fighter', 'bruiser', 'intimidate_tiered\r'), + (1866, 'spell_revamp', 'fighter', 'bruiser', 'bruising_spirit_tiered\r'), + (1867, 'spell_revamp', 'fighter', 'bruiser', 'eye_gouge_tiered\r'), + (1868, 'spell_revamp', 'fighter', 'bruiser', 'haymaker_tiered\r'), + (1869, 'spell_revamp', 'fighter', 'bruiser', 'sucker_punch_tiered\r'), + (1870, 'spell_revamp', 'fighter', 'bruiser', 'rock_skin_tiered\r'), + (1871, 'spell_revamp', 'fighter', 'bruiser', 'bruiser_balance_stance_tiered\r'), + (1872, 'spell_revamp', 'fighter', 'bruiser', 'savage_blows_tiered\r'), + (1873, 'spell_revamp', 'fighter', 'bruiser', 'sonic_punch_tiered\r'), + (1874, 'spell_revamp', 'fighter', 'bruiser', 'divide_and_conquer_tiered\r'), + (1875, 'spell_revamp', 'fighter', 'bruiser', 'knockout_tiered\r'), + (1876, 'spell_revamp', 'fighter', 'bruiser', 'close_mind_tiered\r'), + (1877, 'spell_revamp', 'fighter', 'bruiser', 'stone_deaf_tiered\r'), + (1878, 'spell_revamp', 'fighter', 'monk', 'forward_strike_tiered\r'), + (1879, 'spell_revamp', 'fighter', 'monk', 'stare_tiered\r'), + (1880, 'spell_revamp', 'fighter', 'monk', 'monk_defense_stance_tiered\r'), + (1881, 'spell_revamp', 'fighter', 'monk', 'roundhouse_kick_tiered\r'), + (1882, 'spell_revamp', 'fighter', 'monk', 'cobra_circle_tiered\r'), + (1883, 'spell_revamp', 'fighter', 'monk', 'beckon_tiered\r'), + (1884, 'spell_revamp', 'fighter', 'monk', 'swiftness_tiered\r'), + (1885, 'spell_revamp', 'fighter', 'monk', 'striking_cobra_tiered\r'), + (1886, 'spell_revamp', 'fighter', 'monk', 'soaring_eagle_tiered\r'), + (1887, 'spell_revamp', 'fighter', 'monk', 'martial_focus_tiered\r'), + (1888, 'spell_revamp', 'fighter', 'monk', 'will_of_the_void_tiered\r'), + (1889, 'spell_revamp', 'fighter', 'monk', 'cold_fist_tiered\r'), + (1890, 'spell_revamp', 'fighter', 'monk', 'pouncing_leopard_tiered\r'), + (1891, 'spell_revamp', 'fighter', 'monk', 'thundering_hand_tiered\r'), + (1892, 'spell_revamp', 'fighter', 'monk', 'martial_order_tiered\r'), + (1893, 'spell_revamp', 'fighter', 'monk', 'mantis_jabs_tiered\r'), + (1894, 'spell_revamp', 'fighter', 'monk', 'focus_tiered\r'), + (1895, 'spell_revamp', 'fighter', 'monk', 'monk_offense_stance_tiered\r'), + (1896, 'spell_revamp', 'fighter', 'monk', 'rising_dragon_tiered\r'), + (1897, 'spell_revamp', 'fighter', 'monk', 'wind_walk_tiered\r'), + (1898, 'spell_revamp', 'fighter', 'monk', 'body_like_mountain_tiered\r'), + (1899, 'spell_revamp', 'fighter', 'monk', 'icy_talon_tiered\r'), + (1900, 'spell_revamp', 'fighter', 'monk', 'stone_stance_tiered\r'), + (1901, 'spell_revamp', 'fighter', 'monk', 'monk_balance_stance_tiered\r'), + (1902, 'spell_revamp', 'fighter', 'monk', 'silent_palm_tiered\r'), + (1903, 'spell_revamp', 'fighter', 'monk', 'outward_calm_tiered\r'), + (1904, 'spell_revamp', 'fighter', 'monk', 'tsunami_tiered\r'), + (1905, 'spell_revamp', 'fighter', 'monk', 'fall_of_the_phoenix_tiered\r'), + (1906, 'spell_revamp', 'fighter', 'monk', 'dragonfire_tiered\r'), + (1907, 'spell_revamp', 'fighter', 'monk', 'peel_tiered\r'), + (1908, 'spell_revamp', 'fighter', 'bruiser', 'feign_death_tiered\r'), + (1909, 'spell_revamp', 'fighter', 'bruiser', 'instill_panic_tiered\r'), + (1910, 'spell_revamp', 'fighter', 'bruiser', 'devastation_fist_tiered\r'), + (1911, 'npc', 'haggle_massive_rez\r', NULL, NULL), + (1912, 'npc', 'haggle_boiling_energy\r', NULL, NULL), + (1913, 'npc', 'mage_twin_buff\r', NULL, NULL), + (1914, 'spell_revamp', 'mage', 'wizard', 'sunstrike_tiered\r'), + (1915, 'spell_revamp', 'mage', 'wizard', 'engulf_tiered\r'), + (1916, 'spell_revamp', 'mage', 'wizard', 'arcane_bindings_tiered\r'), + (1917, 'spell_revamp', 'mage', 'wizard', 'amplify_tiered\r'), + (1918, 'spell_revamp', 'mage', 'wizard', 'electron_storm_tiered\r'), + (1919, 'spell_revamp', 'mage', 'wizard', 'snow_filled_steps_tiered\r'), + (1920, 'spell_revamp', 'mage', 'wizard', 'immolation_tiered\r'), + (1921, 'spell_revamp', 'mage', 'wizard', 'phoenixblade_tiered\r'), + (1922, 'spell_revamp', 'mage', 'wizard', 'vivid_seal_tiered\r'), + (1923, 'spell_revamp', 'mage', 'wizard', 'vital_transfer_tiered\r'), + (1924, 'spell_revamp', 'mage', 'wizard', 'magma_chamber_tiered\r'), + (1925, 'spell_revamp', 'mage', 'wizard', 'blip_tiered\r'), + (1926, 'spell_revamp', 'mage', 'wizard', 'conflagration_tiered\r'), + (1927, 'spell_revamp', 'mage', 'wizard', 'ice_spears_tiered\r'), + (1928, 'spell_revamp', 'mage', 'wizard', 'accord_tiered\r'), + (1929, 'spell_revamp', 'mage', 'wizard', 'proc_power_heal_tiered\r'), + (1930, 'spell_revamp', 'mage', 'wizard', 'chilling_wind_tiered\r'), + (1931, 'spell_revamp', 'mage', 'wizard', 'glacial_shield_tiered\r'), + (1932, 'spell_revamp', 'mage', 'wizard', 'proc_cold_damage_tiered\r'), + (1933, 'spell_revamp', 'mage', 'wizard', 'ball_of_fire_tiered\r'), + (1934, 'spell_revamp', 'mage', 'wizard', 'depart_tiered\r'), + (1935, 'spell_revamp', 'mage', 'wizard', 'corona_tiered\r'), + (1936, 'spell_revamp', 'mage', 'wizard', 'harvest_mana_tiered\r'), + (1937, 'spell_revamp', 'mage', 'wizard', 'surge_of_flames_tiered\r'), + (1938, 'spell_revamp', 'mage', 'wizard', 'intromission_tiered\r'), + (1939, 'spell_revamp', 'mage', 'wizard', 'frigid_gift_tiered\r'), + (1940, 'spell_revamp', 'mage', 'wizard', 'proc_cold_damage_slow_tiered\r'), + (1941, 'spell_revamp', 'mage', 'wizard', 'ring_of_glaciers_tiered\r'), + (1942, 'spell_revamp', 'mage', 'wizard', 'proc_ice_root_tiered\r'), + (1943, 'spell_revamp', 'mage', 'wizard', 'ice_comet_tiered\r'), + (1944, 'spell_revamp', 'mage', 'wizard', 'mail_of_frost_tiered\r'), + (1945, 'spell_revamp', 'mage', 'wizard', 'proc_frost_ward_tiered\r'), + (1946, 'spell_revamp', 'mage', 'wizard', 'numbing_cold_tiered\r'), + (1947, 'spell_revamp', 'mage', 'wizard', 'forge_of_ro_tiered\r'), + (1948, 'spell_revamp', 'mage', 'wizard', 'fusion_tiered\r'), + (1949, 'spell_revamp', 'mage', 'wizard', 'surging_tempest_tiered\r'), + (1950, 'spell_revamp', 'mage', 'wizard', 'rays_of_disintegration_tiered\r'), + (1951, 'spell_revamp', 'mage', 'wizard', 'protoflame_tiered\r'), + (1952, 'spell_revamp', 'mage', 'warlock', 'dissolve_tiered\r'), + (1953, 'spell_revamp', 'mage', 'warlock', 'acid_tiered\r'), + (1954, 'spell_revamp', 'fighter', 'monk', 'everburning_tiered\r'), + (1955, 'spell_revamp', 'fighter', 'monk', 'dragon_rage_tiered\r'), + (1956, 'spell_revamp', 'mage', 'warlock', 'netherous_bind_tiered\r'), + (1957, 'spell_revamp', 'mage', 'warlock', 'aspect_of_moon_tiered\r'), + (1958, 'spell_revamp', 'mage', 'warlock', 'putrid_cloud_tiered\r'), + (1959, 'spell_revamp', 'mage', 'warlock', 'shadowsight_tiered\r'), + (1960, 'spell_revamp', 'mage', 'warlock', 'suffocation_tiered\r'), + (1961, 'spell_revamp', 'mage', 'warlock', 'proc_fear_tiered\r'), + (1962, 'spell_revamp', 'mage', 'warlock', 'toxic_grasp_tiered\r'), + (1963, 'spell_revamp', 'mage', 'warlock', 'proc_poison_tiered\r'), + (1964, 'spell_revamp', 'mage', 'warlock', 'dark_pact_tiered\r'), + (1965, 'spell_revamp', 'mage', 'warlock', 'void_contract_tiered\r'), + (1966, 'spell_revamp', 'mage', 'warlock', 'flashfreeze_tiered\r'), + (1967, 'spell_revamp', 'mage', 'warlock', 'nullify_tiered\r'), + (1968, 'spell_revamp', 'mage', 'warlock', 'cataclysm_tiered\r'), + (1969, 'spell_revamp', 'mage', 'warlock', 'stop_breath_tiered\r'), + (1970, 'spell_revamp', 'mage', 'warlock', 'boon_of_solitude_tiered\r'), + (1971, 'spell_revamp', 'mage', 'warlock', 'absolution_tiered\r'), + (1972, 'spell_revamp', 'mage', 'warlock', 'poisonous_veil_tiered\r'), + (1973, 'spell_revamp', 'mage', 'warlock', 'dark_distortion_tiered\r'), + (1974, 'spell_revamp', 'pets', 'necromancer_grim_distortion\r', NULL), + (1975, 'npc', 'boon_of_roehn_theer\r', NULL, NULL), + (1976, 'npc', 'flash_jump_blue_aoe\r', NULL, NULL), + (1977, 'npc', 'flash_jump_green_aoe\r', NULL, NULL), + (1978, 'npc', 'flash_jump_purple_aoe\r', NULL, NULL), + (1979, 'npc', 'flash_jump_yellow_aoe\r', NULL, NULL), + (1980, 'npc', 'iksar_statue_p2p_beam_blue\r', NULL, NULL), + (1981, 'npc', 'iksar_statue_p2p_beam_green\r', NULL, NULL), + (1982, 'npc', 'iksar_statue_p2p_beam_purple\r', NULL, NULL), + (1983, 'npc', 'iksar_statue_p2p_beam_yellow\r', NULL, NULL), + (1984, 'npc', 'result_disarm_green\r', NULL, NULL), + (1985, 'npc', 'result_fear_purple\r', NULL, NULL), + (1986, 'npc', 'result_root_blue\r', NULL, NULL), + (1987, 'npc', 'result_stifle_yellow\r', NULL, NULL), + (1988, 'npc', 'boss_bones_shockwave\r', NULL, NULL), + (1989, 'npc', 'cannibalistic_bones_aoe\r', NULL, NULL), + (1990, 'npc', 'gloop_root_aoe\r', NULL, NULL), + (1991, 'npc', 'ice_bone_aoe\r', NULL, NULL), + (1992, 'npc', 'fire_bone_aoe\r', NULL, NULL), + (1993, 'npc', 'boot_kick\r', NULL, NULL), + (1994, 'expansion_06', 'erudin_light_beam_p2p\r', NULL, NULL), + (1995, 'expansion_06', 'erudin_firebeam_hit_p2p\r', NULL, NULL), + (1996, 'expansion_06', 'gazer_eye_beam_p2p\r', NULL, NULL), + (1997, 'expansion_06', 'gazer_attack_breath\r', NULL, NULL), + (1998, 'expansion_06', 'gazer_eye_melt_p2p\r', NULL, NULL), + (1999, 'any', 'fruit_fight\r', NULL, NULL), + (2000, 'expansion_06', 'guardian_summon_gold_p2p\r', NULL, NULL), + (2001, 'expansion_06', 'guardian_summon_red_p2p\r', NULL, NULL), + (2002, 'spell_revamp', 'fighter', 'berserker', 'unyielding_will_tiered\r'), + (2003, 'spell_revamp', 'mage', 'warlock', 'curse_of_darkness_tiered\r'), + (2004, 'spell_revamp', 'mage', 'warlock', 'curse_of_null_tiered\r'), + (2005, 'spell_revamp', 'mage', 'warlock', 'wicked_gift_tiered\r'), + (2006, 'spell_revamp', 'mage', 'warlock', 'dark_siphoning_tiered\r'), + (2007, 'spell_revamp', 'mage', 'warlock', 'mana_trickle_tiered\r'), + (2008, 'spell_revamp', 'mage', 'warlock', 'dead_grasp_tiered\r'), + (2009, 'spell_revamp', 'mage', 'warlock', 'nullmail_tiered\r'), + (2010, 'spell_revamp', 'mage', 'warlock', 'apocalypse_tiered\r'), + (2011, 'spell_revamp', 'mage', 'warlock', 'netheros_tiered\r'), + (2012, 'spell_revamp', 'mage', 'warlock', 'brood_infestation_tiered\r'), + (2013, 'spell_revamp', 'mage', 'warlock', 'null_caress_tiered\r'), + (2014, 'spell_revamp', 'mage', 'warlock', 'netherealm_tiered\r'), + (2015, 'spell_revamp', 'mage', 'warlock', 'rift_tiered\r'), + (2016, 'spell_revamp', 'mage', 'warlock', 'acid_storm_tiered\r'), + (2017, 'any', 'rain_of_shinies\r', NULL, NULL), + (2018, 'expansion_06', 'eru_cast_epic_nuke\r', NULL, NULL), + (2019, 'expansion_06', 'eru_charge_tag\r', NULL, NULL), + (2020, 'expansion_06', 'eru_result_epic_nuke\r', NULL, NULL), + (2021, 'spell_revamp', 'mage', 'warlock', 'aura_of_darkness_tiered\r'), + (2022, 'spell_revamp', 'mage', 'warlock', 'proc_summon_tiered\r'), + (2023, 'any', 'claw_face\r', NULL, NULL), + (2024, 'any', 'badge_acquire\r', NULL, NULL), + (2025, 'expansion_05', 'bounce_break_beam_p2p\r', NULL, NULL), + (2026, 'expansion_05', 'bounce_death_beam_p2p\r', NULL, NULL), + (2027, 'expansion_05', 'statue_break_beam_p2p\r', NULL, NULL), + (2028, 'expansion_05', 'statue_death_beam_p2p\r', NULL, NULL), + (2029, 'expansion_05', 'zapper_bolt_p2p\r', NULL, NULL), + (2030, 'expansion_05', 'ghost_trap_p2p\r', NULL, NULL), + (2031, 'design', 'marr_godly_teleport\r', NULL, NULL), + (2032, 'design', 'flaming_pumpkin_p2p\r', NULL, NULL), + (2033, 'design', 'miragul_teleport_blast_up\r', NULL, NULL), + (2034, 'expansion_06', 'eru_icicle_blast_aoe\r', NULL, NULL), + (2035, 'expansion_06', 'eru_glacial_vortex\r', NULL, NULL), + (2036, 'expansion_06', 'eru_flaming_inferno\r', NULL, NULL), + (2037, 'expansion_06', 'haladan_spin_root_aoe\r', NULL, NULL), + (2038, 'expansion_06', 'haladan_icy_torrent\r', NULL, NULL), + (2039, 'expansion_06', 'tuskers_gore\r', NULL, NULL), + (2040, 'expansion_06', 'tuskers_slam\r', NULL, NULL), + (2041, 'expansion_06', 'arcane_maelstrom_aoe\r', NULL, NULL), + (2042, 'expansion_06', 'mana_breach_p2p\r', NULL, NULL), + (2043, 'expansion_06', 'polar_avalanche_aoe\r', NULL, NULL), + (2044, 'expansion_06', 'frozen_shardstorm_aoe\r', NULL, NULL), + (2045, 'expansion_06', 'titanic_stomp_aoe\r', NULL, NULL), + (2046, 'expansion_06', 'qxectus_toxic_cloud_aoe\r', NULL, NULL), + (2047, 'expansion_06', 'banish_p2p\r', NULL, NULL), + (2048, 'expansion_06', 'sphinx_screech_aoe\r', NULL, NULL), + (2049, 'expansion_06', 'sphinx_battering_ram_aoe\r', NULL, NULL), + (2050, 'expansion_06', 'crushing_fog_aoe\r', NULL, NULL), + (2051, 'expansion_06', 'elemental_vortex_aoe\r', NULL, NULL), + (2052, 'any', 'fireworks_shinies_burst_overhead\r', NULL, NULL), + (2053, 'expansion_06', 'vasty_gold_tether_p2p\r', NULL, NULL), + (2054, 'expansion_06', 'octopus_cannon_p2p\r', NULL, NULL), + (2055, 'expansion_06', 'plasma_bolt_p2p\r', NULL, NULL), + (2056, 'expansion_06', 'sea_dragon_breath\r', NULL, NULL), + (2057, 'deity', 'marr_sword_blast\r', NULL, NULL), + (2058, 'any', 'fireworks_burst_rose_petals\r', NULL, NULL), + (2059, 'expansion_06', 'god_blast_aoe\r', NULL, NULL), + (2060, 'design', 'exp06_prelude_earth1\r', NULL, NULL), + (2061, 'design', 'exp06_prelude_ice1\r', NULL, NULL), + (2062, 'any', 'fireworks_burst_snowflakes\r', NULL, NULL), + (2063, 'npc', 'glacial_dividing\r', NULL, NULL), + (2064, 'expansion_06', 'stew_pot_dot\r', NULL, NULL), + (2065, 'expansion_06', 'elemental_water_shield\r', NULL, NULL), + (2066, 'expansion_06', 'medusa_snake_attack_aoe\r', NULL, NULL), + (2067, 'expansion_06', 'medusa_snake_attack_p2p\r', NULL, NULL), + (2068, 'expansion_06', 'medusa_snake_buff\r', NULL, NULL), + (2069, 'expansion_06', 'medusa_stone_gaze\r', NULL, NULL), + (2070, 'expansion_06', 'eel_hemotoxin_p2p\r', NULL, NULL), + (2071, 'expansion_06', 'ectoplasmic_blast_aoe\r', NULL, NULL), + (2072, 'expansion_06', 'soul_chill_aoe\r', NULL, NULL), + (2073, 'expansion_06', 'deep_fall_aoe\r', NULL, NULL), + (2074, 'expansion_06', 'eerie_wail\r', NULL, NULL), + (2075, 'expansion_06', 'necrotic_venom\r', NULL, NULL), + (2076, 'expansion_06', 'vd_amputation\r', NULL, NULL), + (2077, 'expansion_06', 'incredulous_stench\r', NULL, NULL), + (2078, 'expansion_06', 'vd_mana_distortion\r', NULL, NULL), + (2079, 'expansion_06', 'vd_mortal_siphon\r', NULL, NULL), + (2080, 'expansion_06', 'vd_world_of_hurt\r', NULL, NULL), + (2081, 'expansion_06', 'vd_strike_of_gorad\r', NULL, NULL), + (2082, 'spell_revamp', 'mage', 'wizard', 'translocate_tiered\r'), + (2083, 'expansion_06', 'firefly_release\r', NULL, NULL), + (2084, 'expansion_06', 'pandaman_firefly_release\r', NULL, NULL), + (2085, 'expansion_06', 'roek_watching_you\r', NULL, NULL), + (2086, 'expansion_06', 'npc_wand_enhance\r', NULL, NULL), + (2087, 'expansion_06', 'tallonite_summon\r', NULL, NULL), + (2088, 'expansion_06', 'tallonite_quick_summon\r', NULL, NULL), + (2089, 'expansion_06', 'achievements', 'coercer_event_trig\r', NULL), + (2090, 'expansion_06', 'achievements', 'conjuror_event_trig\r', NULL), + (2091, 'expansion_06', 'achievements', 'enchanter_event_trig\r', NULL), + (2092, 'expansion_06', 'achievements', 'illusionist_event_trig\r', NULL), + (2093, 'expansion_06', 'achievements', 'necromancer_event_trig\r', NULL), + (2094, 'expansion_06', 'achievements', 'sorcerer_event_trig\r', NULL), + (2095, 'expansion_06', 'achievements', 'summoner_event_trig\r', NULL), + (2096, 'expansion_06', 'achievements', 'warlock_event_trig\r', NULL), + (2097, 'expansion_06', 'achievements', 'wizard_event_trig\r', NULL), + (2098, 'expansion_06', 'achievements', 'assassin_event_trig\r', NULL), + (2099, 'expansion_06', 'achievements', 'bard_event_trig\r', NULL), + (2100, 'expansion_06', 'achievements', 'brigand_event_trig\r', NULL), + (2101, 'expansion_06', 'achievements', 'dirge_event_trig\r', NULL), + (2102, 'expansion_06', 'achievements', 'predator_event_trig\r', NULL), + (2103, 'expansion_06', 'achievements', 'ranger_event_trig\r', NULL), + (2104, 'expansion_06', 'achievements', 'rogue_event_trig\r', NULL), + (2105, 'expansion_06', 'achievements', 'swashbuckler_event_trig\r', NULL), + (2106, 'expansion_06', 'achievements', 'troubador_event_trig\r', NULL), + (2107, 'expansion_06', 'rift_crack_summon\r', NULL, NULL), + (2108, 'expansion_06', 'eru_tether_p2p\r', NULL, NULL), + (2109, 'expansion_06', 'npc_wand_fizzle\r', NULL, NULL), + (2110, 'expansion_06', 'npc_wand_lightning_blast_p2p\r', NULL, NULL), + (2111, 'expansion_06', 'rift_crack_summon_nostep\r', NULL, NULL), + (2112, 'spell_revamp', 'mage', 'wizard', 'magi_shielding_tiered\r'), + (2113, 'spell_revamp', 'mage', 'wizard', 'arcane_augur_tiered\r'), + (2114, 'spell_revamp', 'mage', 'wizard', 'bind_sight_tiered\r'), + (2115, 'spell_revamp', 'mage', 'wizard', 'cure_arcane_tiered\r'), + (2116, 'spell_revamp', 'mage', 'wizard', 'see_invisibility_tiered\r'), + (2117, 'spell_revamp', 'mage', 'wizard', 'dispel_magic_tiered\r'), + (2118, 'spell_revamp', 'mage', 'illusionist', 'aneurysm_tiered\r'), + (2119, 'spell_revamp', 'mage', 'illusionist', 'aspect_of_genius_tiered\r'), + (2120, 'spell_revamp', 'mage', 'illusionist', 'barrier_of_intellect_tiered\r'), + (2121, 'spell_revamp', 'mage', 'illusionist', 'bewilderment_tiered\r'), + (2122, 'spell_revamp', 'mage', 'illusionist', 'blink_tiered\r'), + (2123, 'spell_revamp', 'mage', 'illusionist', 'brainburst_tiered\r'), + (2124, 'spell_revamp', 'mage', 'illusionist', 'chromatic_shower_tiered\r'), + (2125, 'spell_revamp', 'mage', 'illusionist', 'chromatic_storm_tiered\r'), + (2126, 'spell_revamp', 'mage', 'illusionist', 'construct_of_order_tiered\r'), + (2127, 'spell_revamp', 'mage', 'illusionist', 'dismay_tiered\r'), + (2128, 'spell_revamp', 'mage', 'illusionist', 'doppleganger_tiered\r'), + (2129, 'spell_revamp', 'mage', 'illusionist', 'entrance_tiered\r'), + (2130, 'spell_revamp', 'mage', 'illusionist', 'epiphany_tiered\r'), + (2131, 'spell_revamp', 'mage', 'illusionist', 'extract_mana_tiered\r'), + (2132, 'spell_revamp', 'mage', 'illusionist', 'flash_of_brilliance_tiered\r'), + (2133, 'spell_revamp', 'mage', 'illusionist', 'illusory_allies_tiered\r'), + (2134, 'spell_revamp', 'mage', 'illusionist', 'illusory_mask_tiered\r'), + (2135, 'spell_revamp', 'mage', 'illusionist', 'lockdown_tiered\r'), + (2136, 'spell_revamp', 'mage', 'illusionist', 'mana_cloak_tiered\r'), + (2137, 'spell_revamp', 'mage', 'illusionist', 'mana_tap_tiered\r'), + (2138, 'spell_revamp', 'mage', 'illusionist', 'nightmare_tiered\r'), + (2139, 'spell_revamp', 'mage', 'illusionist', 'paranoia_tiered\r'), + (2140, 'spell_revamp', 'mage', 'illusionist', 'personae_reflection_tiered\r'), + (2141, 'spell_revamp', 'mage', 'illusionist', 'phantasmal_awe_tiered\r'), + (2142, 'spell_revamp', 'mage', 'illusionist', 'phase_tiered\r'), + (2143, 'spell_revamp', 'mage', 'illusionist', 'prismatic_chaos_tiered\r'), + (2144, 'spell_revamp', 'mage', 'illusionist', 'proc_blink_tiered\r'), + (2145, 'spell_revamp', 'mage', 'illusionist', 'proc_lower_hate_tiered\r'), + (2146, 'spell_revamp', 'mage', 'illusionist', 'proc_mental_damage_tiered\r'), + (2147, 'spell_revamp', 'mage', 'illusionist', 'proc_stifle_tiered\r'), + (2148, 'spell_revamp', 'mage', 'illusionist', 'rapidity_tiered\r'), + (2149, 'spell_revamp', 'mage', 'illusionist', 'regalia_tiered\r'), + (2150, 'spell_revamp', 'mage', 'illusionist', 'rune_of_thought_tiered\r'), + (2151, 'spell_revamp', 'mage', 'illusionist', 'savante_tiered\r'), + (2152, 'spell_revamp', 'mage', 'illusionist', 'shift_vision_tiered\r'), + (2153, 'spell_revamp', 'mage', 'illusionist', 'speechless_tiered\r'), + (2154, 'spell_revamp', 'mage', 'illusionist', 'spell_shield_tiered\r'), + (2155, 'spell_revamp', 'mage', 'illusionist', 'synergism_tiered\r'), + (2156, 'spell_revamp', 'mage', 'illusionist', 'ultraviolet_beam_tiered\r'), + (2157, 'spell_revamp', 'mage', 'illusionist', 'veil_of_the_unseen_tiered\r'), + (2158, 'spell_revamp', 'mage', 'coercer', 'amnesia_tiered\r'), + (2159, 'spell_revamp', 'mage', 'coercer', 'asylum_tiered\r'), + (2160, 'spell_revamp', 'mage', 'coercer', 'brainshock_tiered\r'), + (2161, 'spell_revamp', 'mage', 'coercer', 'breeze_tiered\r'), + (2162, 'spell_revamp', 'mage', 'coercer', 'cannibalize_thoughts_tiered\r'), + (2163, 'spell_revamp', 'mage', 'coercer', 'channel_tiered\r'), + (2164, 'spell_revamp', 'mage', 'coercer', 'charm_tiered\r'), + (2165, 'spell_revamp', 'mage', 'coercer', 'destructive_mind_tiered\r'), + (2166, 'spell_revamp', 'mage', 'coercer', 'ego_shock_tiered\r'), + (2167, 'spell_revamp', 'mage', 'coercer', 'enraging_demeanor_tiered\r'), + (2168, 'spell_revamp', 'mage', 'coercer', 'forced_hesitation_tiered\r'), + (2169, 'spell_revamp', 'mage', 'coercer', 'hemorrhage_tiered\r'), + (2170, 'spell_revamp', 'mage', 'coercer', 'hostage_tiered\r'), + (2171, 'spell_revamp', 'mage', 'coercer', 'mesmerize_tiered\r'), + (2172, 'spell_revamp', 'mage', 'coercer', 'mindbend_tiered\r'), + (2173, 'spell_revamp', 'mage', 'coercer', 'minds_eye_tiered\r'), + (2174, 'spell_revamp', 'mage', 'coercer', 'obliterated_psyche_tiered\r'), + (2175, 'spell_revamp', 'mage', 'coercer', 'peaceful_link_tiered\r'), + (2176, 'spell_revamp', 'mage', 'coercer', 'possess_essence_tiered\r'), + (2177, 'spell_revamp', 'mage', 'coercer', 'power_of_mind_tiered\r'), + (2178, 'spell_revamp', 'mage', 'coercer', 'proc_stunned_tiered\r'), + (2179, 'spell_revamp', 'mage', 'coercer', 'puppetmaster_tiered\r'), + (2180, 'spell_revamp', 'mage', 'coercer', 'pure_awe_tiered\r'), + (2181, 'spell_revamp', 'mage', 'coercer', 'reek_of_terror_tiered\r'), + (2182, 'spell_revamp', 'mage', 'coercer', 'shift_mana_tiered\r'), + (2183, 'spell_revamp', 'mage', 'coercer', 'shock_wave_tiered\r'), + (2184, 'spell_revamp', 'mage', 'coercer', 'signet_of_intellect_tiered\r'), + (2185, 'spell_revamp', 'mage', 'coercer', 'silence_tiered\r'), + (2186, 'spell_revamp', 'mage', 'coercer', 'simple_minds_tiered\r'), + (2187, 'spell_revamp', 'mage', 'coercer', 'spell_curse_tiered\r'), + (2188, 'spell_revamp', 'mage', 'coercer', 'stupefy_tiered\r'), + (2189, 'spell_revamp', 'mage', 'coercer', 'unveil_tiered\r'), + (2190, 'spell_revamp', 'mage', 'coercer', 'velocity_tiered\r'), + (2191, 'spell_revamp', 'mage', 'coercer', 'medusa_gaze_tiered\r'), + (2192, 'spell_revamp', 'mage', 'wizard', 'concussive_tiered\r'), + (2193, 'spell_revamp', 'mage', 'wizard', 'flames_of_velious_tiered\r'), + (2194, 'spell_revamp', 'mage', 'conjurer', 'aery_hunter_tiered\r'), + (2195, 'spell_revamp', 'mage', 'conjurer', 'antagonize_tiered\r'), + (2196, 'spell_revamp', 'mage', 'conjurer', 'aqueous_stone_tiered\r'), + (2197, 'spell_revamp', 'mage', 'conjurer', 'blazing_avatar_tiered\r'), + (2198, 'spell_revamp', 'mage', 'conjurer', 'aqueous_swarm_tiered\r'), + (2199, 'spell_revamp', 'mage', 'conjurer', 'call_of_the_hero_tiered\r'), + (2200, 'spell_revamp', 'mage', 'conjurer', 'call_servant_tiered\r'), + (2201, 'spell_revamp', 'mage', 'conjurer', 'cats_eye_tiered\r'), + (2202, 'spell_revamp', 'mage', 'conjurer', 'communion_tiered\r'), + (2203, 'spell_revamp', 'mage', 'conjurer', 'conjurors_pact_tiered\r'), + (2204, 'spell_revamp', 'mage', 'conjurer', 'crystal_blast_tiered\r'), + (2205, 'spell_revamp', 'mage', 'conjurer', 'defensive_haven_tiered\r'), + (2206, 'spell_revamp', 'mage', 'conjurer', 'earthen_avatar_tiered\r'), + (2207, 'spell_revamp', 'mage', 'conjurer', 'earthquake_tiered\r'), + (2208, 'spell_revamp', 'mage', 'conjurer', 'elemental_aspect_tiered\r'), + (2209, 'spell_revamp', 'mage', 'conjurer', 'elemental_unity_tiered\r'), + (2210, 'spell_revamp', 'mage', 'conjurer', 'essence_shift_tiered\r'), + (2211, 'spell_revamp', 'mage', 'conjurer', 'fiery_annihilation_tiered\r'), + (2212, 'spell_revamp', 'mage', 'conjurer', 'fiery_magician_tiered\r'), + (2213, 'spell_revamp', 'mage', 'conjurer', 'fire_seed_tiered\r'), + (2214, 'spell_revamp', 'mage', 'conjurer', 'flameshield_tiered\r'), + (2215, 'spell_revamp', 'mage', 'conjurer', 'geotic_rune_tiered\r'), + (2216, 'spell_revamp', 'mage', 'conjurer', 'heal_servant_tiered\r'), + (2217, 'spell_revamp', 'mage', 'conjurer', 'ice_storm_tiered\r'), + (2218, 'spell_revamp', 'mage', 'conjurer', 'invisibility_tiered\r'), + (2219, 'spell_revamp', 'mage', 'conjurer', 'masters_intervention_tiered\r'), + (2220, 'spell_revamp', 'mage', 'conjurer', 'najenas_essence_summoning_tiered\r'), + (2221, 'spell_revamp', 'mage', 'conjurer', 'petrify_tiered\r'), + (2222, 'spell_revamp', 'mage', 'conjurer', 'plane_shift_tiered\r'), + (2223, 'spell_revamp', 'mage', 'conjurer', 'proc_elemental_damage_tiered\r'), + (2224, 'spell_revamp', 'mage', 'conjurer', 'proc_heat_damage_tiered\r'), + (2225, 'spell_revamp', 'mage', 'conjurer', 'proc_knockback_tiered\r'), + (2226, 'spell_revamp', 'mage', 'conjurer', 'proc_plane_shift_tiered\r'), + (2227, 'spell_revamp', 'mage', 'conjurer', 'proc_resist_debuff_tiered\r'), + (2228, 'spell_revamp', 'mage', 'conjurer', 'quicksand_tiered\r'), + (2229, 'spell_revamp', 'mage', 'conjurer', 'roaring_flames_tiered\r'), + (2230, 'spell_revamp', 'mage', 'conjurer', 'sacrifice_tiered\r'), + (2231, 'spell_revamp', 'mage', 'conjurer', 'shard_of_essence_tiered\r'), + (2232, 'spell_revamp', 'mage', 'conjurer', 'shattered_earth_tiered\r'), + (2233, 'spell_revamp', 'mage', 'conjurer', 'shrink_servant_tiered\r'), + (2234, 'spell_revamp', 'mage', 'conjurer', 'stoneskin_tiered\r'), + (2235, 'spell_revamp', 'mage', 'conjurer', 'vampire_bats_tiered\r'), + (2236, 'spell_revamp', 'mage', 'conjurer', 'vehement_skin_tiered\r'), + (2237, 'spell_revamp', 'mage', 'conjurer', 'winds_of_velious_tiered\r'), + (2238, 'spell_revamp', 'mage', 'necromancer', 'awaken_grave_tiered\r'), + (2239, 'spell_revamp', 'mage', 'necromancer', 'blighted_horde_tiered\r'), + (2240, 'spell_revamp', 'mage', 'necromancer', 'blood_cloud_tiered\r'), + (2241, 'spell_revamp', 'mage', 'necromancer', 'bloodcoil_tiered\r'), + (2242, 'spell_revamp', 'mage', 'necromancer', 'bloody_ritual_tiered\r'), + (2243, 'spell_revamp', 'mage', 'necromancer', 'chains_of_torment_tiered\r'), + (2244, 'spell_revamp', 'mage', 'necromancer', 'consumption_tiered\r'), + (2245, 'spell_revamp', 'mage', 'necromancer', 'control_undead_tiered\r'), + (2246, 'spell_revamp', 'mage', 'necromancer', 'dark_heart_tiered\r'), + (2247, 'spell_revamp', 'mage', 'necromancer', 'deathly_pallor_tiered\r'), + (2248, 'spell_revamp', 'mage', 'necromancer', 'dooming_darkness_tiered\r'), + (2249, 'spell_revamp', 'mage', 'necromancer', 'fear_tiered\r'), + (2250, 'spell_revamp', 'mage', 'necromancer', 'grasping_bones_tiered\r'), + (2251, 'spell_revamp', 'mage', 'necromancer', 'grim_sorcerer_tiered\r'), + (2252, 'spell_revamp', 'mage', 'necromancer', 'grisly_protection_tiered\r'), + (2253, 'spell_revamp', 'mage', 'necromancer', 'howl_of_the_damned_tiered\r'), + (2254, 'spell_revamp', 'mage', 'necromancer', 'lifetap_tiered\r'), + (2255, 'spell_revamp', 'mage', 'necromancer', 'miraguls_dark_heart_summoning_tiered\r'), + (2256, 'spell_revamp', 'mage', 'necromancer', 'mortality_mark_tiered\r'), + (2257, 'spell_revamp', 'mage', 'necromancer', 'necromantic_pact_tiered\r'), + (2258, 'spell_revamp', 'mage', 'necromancer', 'necrotic_reconstruction_tiered\r'), + (2259, 'spell_revamp', 'mage', 'necromancer', 'nightshade_tiered\r'), + (2260, 'spell_revamp', 'mage', 'necromancer', 'pandemic_tiered\r'), + (2261, 'spell_revamp', 'mage', 'necromancer', 'proc_debuff_nox_resist_tiered\r'), + (2262, 'spell_revamp', 'mage', 'necromancer', 'proc_fear_slow_tiered\r'), + (2263, 'spell_revamp', 'mage', 'necromancer', 'proc_soul_suck_tiered\r'), + (2264, 'spell_revamp', 'mage', 'necromancer', 'rending_tiered\r'), + (2265, 'spell_revamp', 'mage', 'necromancer', 'revivication_tiered\r'), + (2266, 'spell_revamp', 'mage', 'necromancer', 'siphoning_of_souls_tiered\r'), + (2267, 'spell_revamp', 'mage', 'necromancer', 'soulrot_tiered\r'), + (2268, 'spell_revamp', 'mage', 'necromancer', 'teachings_of_the_underworld_tiered\r'), + (2269, 'spell_revamp', 'mage', 'necromancer', 'transfer_life_tiered\r'), + (2270, 'spell_revamp', 'mage', 'necromancer', 'undead_horde_tiered\r'), + (2271, 'spell_revamp', 'mage', 'necromancer', 'undead_knight_tiered\r'), + (2272, 'spell_revamp', 'mage', 'necromancer', 'unholy_covenant_tiered\r'), + (2273, 'spell_revamp', 'mage', 'necromancer', 'unliving_eyes_tiered\r'), + (2274, 'spell_revamp', 'mage', 'necromancer', 'vampirism_tiered\r'), + (2275, 'expansion_06', 'eru_energy_drain_p2p\r', NULL, NULL), + (2276, 'expansion_06', 'meditation_rings\r', NULL, NULL), + (2277, 'expansion_06', 'design_air_sample\r', NULL, NULL), + (2278, 'expansion_06', 'tallonite_barb_p2p\r', NULL, NULL), + (2279, 'expansion_06', 'tallonite_rage\r', NULL, NULL), + (2280, 'expansion_06', 'tallonite_balance\r', NULL, NULL), + (2281, 'expansion_06', 'tallonite_command\r', NULL, NULL), + (2282, 'expansion_06', 'tallonite_order\r', NULL, NULL), + (2283, 'expansion_06', 'tallonite_sphere\r', NULL, NULL), + (2284, 'expansion_06', 'tallonite_energy_blob_kick\r', NULL, NULL), + (2285, 'expansion_06', 'tallonite_lightning_quick_daggers\r', NULL, NULL), + (2286, 'expansion_06', 'tallonite_quad_axe_throw\r', NULL, NULL), + (2287, 'expansion_06', 'tallonite_bow_barb_p2p\r', NULL, NULL), + (2288, 'expansion_06', 'eru_massive_ring_blast\r', NULL, NULL), + (2289, 'artisan', 'transmuting\r', NULL, NULL), + (2290, 'spell_revamp', 'pets', 'necromancer_grim_embrace\r', NULL), + (2291, 'expansion_06', 'healing_flora\r', NULL, NULL), + (2292, 'expansion_06', 'singing_wind\r', NULL, NULL), + (2293, 'expansion_06', 'fiery_sun\r', NULL, NULL), + (2294, 'expansion_06', 'theer_plane_cracker\r', NULL, NULL), + (2295, 'expansion_06', 'theer_manaburn\r', NULL, NULL), + (2296, 'expansion_06', 'theer_manaburn_p2p\r', NULL, NULL), + (2297, 'expansion_06', 'theer_balanced_judgement\r', NULL, NULL), + (2298, 'expansion_06', 'wyvern_cold_poison_breath\r', NULL, NULL), + (2299, 'expansion_06', 'wyvern_fire_poison_breath\r', NULL, NULL), + (2300, 'expansion_06', 'wurm_fiery_breath\r', NULL, NULL), + (2301, 'expansion_06', 'wurm_tremorous_slam\r', NULL, NULL), + (2302, 'expansion_06', 'draconian_arcane_solstice\r', NULL, NULL), + (2303, 'expansion_06', 'draconian_fiery_vortex\r', NULL, NULL), + (2304, 'expansion_06', 'draconian_icy_avalanche\r', NULL, NULL), + (2305, 'expansion_06', 'draconian_crystal_summon\r', NULL, NULL), + (2306, 'expansion_06', 'staff_crystal_summon\r', NULL, NULL), + (2307, 'expansion_06', 'toxx_fetid_torrent\r', NULL, NULL), + (2308, 'expansion_06', 'soup_stat_buff\r', NULL, NULL), + (2309, 'expansion_06', 'design_floor_pie\r', NULL, NULL), + (2310, 'expansion_06', 'eru_lich_evil_theer_drain_p2p\r', NULL, NULL), + (2311, 'expansion_06', 'eru_lich_good_theer_drain_p2p\r', NULL, NULL), + (2312, 'expansion_06', 'toxx_ancient_winds\r', NULL, NULL), + (2313, 'expansion_06', 'toxx_piercing_pestilence\r', NULL, NULL), + (2314, 'expansion_06', 'toxx_essence_trap_p2p\r', NULL, NULL), + (2315, 'expansion_06', 'chimera_arcane_eruption\r', NULL, NULL), + (2316, 'expansion_06', 'chimera_buffeting_force\r', NULL, NULL), + (2317, 'expansion_06', 'chimera_toxic_torment\r', NULL, NULL), + (2318, 'expansion_06', 'chimera_pall_of_dread\r', NULL, NULL), + (2319, 'expansion_06', 'cerberus_fearful_paralysis\r', NULL, NULL), + (2320, 'expansion_06', 'cerberus_cloud_of_trepidation\r', NULL, NULL), + (2321, 'expansion_06', 'cerberus_crushing_horror\r', NULL, NULL), + (2322, 'expansion_06', 'wail_of_banshee\r', NULL, NULL), + (2323, 'spell_revamp', 'priest', 'templar', 'summon_food_and_water_tiered\r'), + (2324, 'spell_revamp', 'priest', 'templar', 'cure_curse_tiered\r'), + (2325, 'spell_revamp', 'priest', 'templar', 'cure_tiered\r'), + (2326, 'spell_revamp', 'priest', 'templar', 'divine_awakening_tiered\r'), + (2327, 'spell_revamp', 'priest', 'templar', 'divine_providence_tiered\r'), + (2328, 'spell_revamp', 'priest', 'templar', 'enduring_breath_tiered\r'), + (2329, 'spell_revamp', 'priest', 'templar', 'odyssey_tiered\r'), + (2330, 'spell_revamp', 'priest', 'templar', 'proc_heal_tiered\r'), + (2331, 'spell_revamp', 'priest', 'templar', 'proc_small_heal_tiered\r'), + (2332, 'spell_revamp', 'priest', 'templar', 'radiance_tiered\r'), + (2333, 'spell_revamp', 'priest', 'templar', 'revive_tiered\r'), + (2334, 'spell_revamp', 'priest', 'templar', 'smite_corruption_tiered\r'), + (2335, 'spell_revamp', 'priest', 'templar', 'soothe_tiered\r'), + (2336, 'spell_revamp', 'priest', 'templar', 'word_of_redemption_tiered\r'), + (2337, 'spell_revamp', 'priest', 'templar', 'aegolism_tiered\r'), + (2338, 'spell_revamp', 'priest', 'templar', 'awestruck_tiered\r'), + (2339, 'spell_revamp', 'priest', 'templar', 'battles_reprieve_tiered\r'), + (2340, 'spell_revamp', 'priest', 'templar', 'beneficence_tiered\r'), + (2341, 'spell_revamp', 'priest', 'templar', 'blaze_of_faith_tiered\r'), + (2342, 'spell_revamp', 'priest', 'templar', 'blazon_life_tiered\r'), + (2343, 'spell_revamp', 'priest', 'templar', 'devoted_resolve_tiered\r'), + (2344, 'spell_revamp', 'priest', 'templar', 'divine_arbitration_tiered\r'), + (2345, 'spell_revamp', 'priest', 'templar', 'divine_smite_tiered\r'), + (2346, 'spell_revamp', 'priest', 'templar', 'divine_strike_tiered\r'), + (2347, 'spell_revamp', 'priest', 'templar', 'focused_intervention_tiered\r'), + (2348, 'spell_revamp', 'priest', 'templar', 'glory_tiered\r'), + (2349, 'spell_revamp', 'priest', 'templar', 'harmony_tiered\r'), + (2350, 'spell_revamp', 'priest', 'templar', 'healing_fate_tiered\r'), + (2351, 'spell_revamp', 'priest', 'templar', 'holy_armor_tiered\r'), + (2352, 'spell_revamp', 'priest', 'templar', 'holy_intercession_tiered\r'), + (2353, 'spell_revamp', 'priest', 'templar', 'holy_salvation_tiered\r'), + (2354, 'spell_revamp', 'priest', 'templar', 'involuntary_gift_tiered\r'), + (2355, 'spell_revamp', 'priest', 'templar', 'mark_of_divinity_tiered\r'), + (2356, 'spell_revamp', 'priest', 'templar', 'meliorate_tiered\r'), + (2357, 'spell_revamp', 'priest', 'templar', 'proc_bubble_tiered\r'), + (2358, 'spell_revamp', 'priest', 'templar', 'proc_cure_trauma_tiered\r'), + (2359, 'spell_revamp', 'priest', 'templar', 'proc_heal_physical_resist_tiered\r'), + (2360, 'spell_revamp', 'priest', 'templar', 'proc_physical_resist_tiered\r'), + (2361, 'spell_revamp', 'priest', 'templar', 'rebuke_tiered\r'), + (2362, 'spell_revamp', 'priest', 'templar', 'repent_tiered\r'), + (2363, 'spell_revamp', 'priest', 'templar', 'restoration_tiered\r'), + (2364, 'spell_revamp', 'priest', 'templar', 'resurrect_tiered\r'), + (2365, 'spell_revamp', 'priest', 'templar', 'reverence_tiered\r'), + (2366, 'spell_revamp', 'priest', 'templar', 'sanctuary_tiered\r'), + (2367, 'spell_revamp', 'priest', 'templar', 'shield_of_faith_tiered\r'), + (2368, 'spell_revamp', 'priest', 'templar', 'sign_of_pacification_tiered\r'), + (2369, 'spell_revamp', 'priest', 'templar', 'symbol_of_marzin_tiered\r'), + (2370, 'spell_revamp', 'priest', 'templar', 'unswerving_hammer_tiered\r'), + (2371, 'spell_revamp', 'priest', 'templar', 'unyielding_benediction_tiered\r'), + (2372, 'spell_revamp', 'priest', 'templar', 'virtue_tiered\r'), + (2373, 'spell_revamp', 'priest', 'templar', 'vital_intercession_tiered\r'), + (2374, 'spell_revamp', 'priest', 'templar', 'warring_deitites_tiered\r'), + (2375, 'spell_revamp', 'priest', 'templar', 'watery_respite_tiered\r'), + (2376, 'spell_revamp', 'priest', 'templar', 'proc_big_heal_tiered\r'), + (2377, 'spell_revamp', 'priest', 'inquisitor', 'verdict_tiered\r'), + (2378, 'spell_revamp', 'priest', 'inquisitor', 'act_of_war_tiered\r'), + (2379, 'spell_revamp', 'priest', 'inquisitor', 'alleviation_tiered\r'), + (2380, 'spell_revamp', 'priest', 'inquisitor', 'condemn_tiered\r'), + (2381, 'spell_revamp', 'priest', 'inquisitor', 'conversion_of_the_soul_tiered\r'), + (2382, 'spell_revamp', 'priest', 'inquisitor', 'deny_tiered\r'), + (2383, 'spell_revamp', 'priest', 'inquisitor', 'disorientation_tiered\r'), + (2384, 'spell_revamp', 'priest', 'inquisitor', 'dogma_tiered\r'), + (2385, 'spell_revamp', 'priest', 'inquisitor', 'evidence_of_faith_tiered\r'), + (2386, 'spell_revamp', 'priest', 'inquisitor', 'fanatical_healing_tiered\r'), + (2387, 'spell_revamp', 'priest', 'inquisitor', 'fanaticism_tiered\r'), + (2388, 'spell_revamp', 'priest', 'inquisitor', 'fanatics_faith_tiered\r'), + (2389, 'spell_revamp', 'priest', 'inquisitor', 'fervent_faith_tiered\r'), + (2390, 'spell_revamp', 'priest', 'inquisitor', 'forced_obedience_tiered\r'), + (2391, 'spell_revamp', 'priest', 'inquisitor', 'heresy_tiered\r'), + (2392, 'spell_revamp', 'priest', 'inquisitor', 'heretics_doom_tiered\r'), + (2393, 'spell_revamp', 'priest', 'inquisitor', 'incarcerate_tiered\r'), + (2394, 'spell_revamp', 'priest', 'inquisitor', 'inquest_tiered\r'), + (2395, 'spell_revamp', 'priest', 'inquisitor', 'inquisition_tiered\r'), + (2396, 'spell_revamp', 'priest', 'inquisitor', 'invocation_tiered\r'), + (2397, 'spell_revamp', 'priest', 'inquisitor', 'litany_tiered\r'), + (2398, 'spell_revamp', 'priest', 'inquisitor', 'malevolent_diatribe_tiered\r'), + (2399, 'spell_revamp', 'priest', 'inquisitor', 'ministration_tiered\r'), + (2400, 'spell_revamp', 'priest', 'inquisitor', 'penance_tiered\r'), + (2401, 'spell_revamp', 'priest', 'inquisitor', 'proc_divine_damage_tiered\r'), + (2402, 'spell_revamp', 'priest', 'inquisitor', 'proc_mezz_tiered\r'), + (2403, 'spell_revamp', 'priest', 'inquisitor', 'proc_non_physical_resist_tiered\r'), + (2404, 'spell_revamp', 'priest', 'inquisitor', 'purifying_flames_tiered\r'), + (2405, 'spell_revamp', 'priest', 'inquisitor', 'redemption_tiered\r'), + (2406, 'spell_revamp', 'priest', 'inquisitor', 'reforming_soul_tiered\r'), + (2407, 'spell_revamp', 'priest', 'inquisitor', 'repentance_tiered\r'), + (2408, 'spell_revamp', 'priest', 'inquisitor', 'resolute_flagellant_tiered\r'), + (2409, 'spell_revamp', 'priest', 'inquisitor', 'resurgence_tiered\r'), + (2410, 'spell_revamp', 'priest', 'inquisitor', 'sacred_armor_tiered\r'), + (2411, 'spell_revamp', 'priest', 'inquisitor', 'swill_tiered\r'), + (2412, 'spell_revamp', 'priest', 'inquisitor', 'tenacity_tiered\r'), + (2413, 'spell_revamp', 'priest', 'inquisitor', 'torment_tiered\r'), + (2414, 'spell_revamp', 'priest', 'inquisitor', 'tormenting_conversion_tiered\r'), + (2415, 'spell_revamp', 'priest', 'inquisitor', 'vengeance_tiered\r'), + (2416, 'artisan', 'tinkering_bomb\r', NULL, NULL), + (2417, 'expansion_06', 'ice_drake_flame_up\r', NULL, NULL), + (2418, 'spell_revamp', 'priest', 'warden', 'winters_sting_tiered\r'), + (2419, 'spell_revamp', 'priest', 'warden', 'armor_of_seasons_tiered\r'), + (2420, 'spell_revamp', 'priest', 'warden', 'aspect_of_the_forest_tiered\r'), + (2421, 'spell_revamp', 'priest', 'warden', 'dawnstrike_tiered\r'), + (2422, 'spell_revamp', 'priest', 'warden', 'equinox_tiered\r'), + (2423, 'spell_revamp', 'priest', 'warden', 'essence_of_the_great_bear_tiered\r'), + (2424, 'spell_revamp', 'priest', 'warden', 'favor_of_the_phoenix_tiered\r'), + (2425, 'spell_revamp', 'priest', 'warden', 'favor_of_the_wild_tiered\r'), + (2426, 'spell_revamp', 'priest', 'warden', 'frostbite_tiered\r'), + (2427, 'spell_revamp', 'priest', 'warden', 'healing_grove_tiered\r'), + (2428, 'spell_revamp', 'priest', 'warden', 'healstorm_tiered\r'), + (2429, 'spell_revamp', 'priest', 'warden', 'hierophantic_genesis_tiered\r'), + (2430, 'spell_revamp', 'priest', 'warden', 'icefall_tiered\r'), + (2431, 'spell_revamp', 'priest', 'warden', 'instinct_tiered\r'), + (2432, 'spell_revamp', 'priest', 'warden', 'natures_embrace_tiered\r'), + (2433, 'spell_revamp', 'priest', 'warden', 'natures_pack_tiered\r'), + (2434, 'spell_revamp', 'priest', 'warden', 'natures_renewal_tiered\r'), + (2435, 'spell_revamp', 'priest', 'warden', 'natures_touch_tiered\r'), + (2436, 'spell_revamp', 'priest', 'warden', 'nereids_boon_tiered\r'), + (2437, 'spell_revamp', 'priest', 'warden', 'photosynthesis_tiered\r'), + (2438, 'spell_revamp', 'priest', 'warden', 'proc_heal_wisdom_tiered\r'), + (2439, 'spell_revamp', 'priest', 'warden', 'proc_heath_regen_tiered\r'), + (2440, 'spell_revamp', 'priest', 'warden', 'regenerating_spores_tiered\r'), + (2441, 'spell_revamp', 'priest', 'warden', 'reincarnation_tiered\r'), + (2442, 'spell_revamp', 'priest', 'warden', 'root_tiered\r'), + (2443, 'spell_revamp', 'priest', 'warden', 'sandstorm_tiered\r'), + (2444, 'spell_revamp', 'priest', 'warden', 'snare_tiered\r'), + (2445, 'spell_revamp', 'priest', 'warden', 'spirit_of_the_bat_tiered\r'), + (2446, 'spell_revamp', 'priest', 'warden', 'spirit_of_the_wolf_tiered\r'), + (2447, 'spell_revamp', 'priest', 'warden', 'sylvan_bloom_tiered\r'), + (2448, 'spell_revamp', 'priest', 'warden', 'sylvan_embrace_tiered\r'), + (2449, 'spell_revamp', 'priest', 'warden', 'sylvan_touch_tiered\r'), + (2450, 'spell_revamp', 'priest', 'warden', 'thorncoat_tiered\r'), + (2451, 'spell_revamp', 'priest', 'warden', 'tranquility_tiered\r'), + (2452, 'spell_revamp', 'priest', 'warden', 'tunares_watch_tiered\r'), + (2453, 'spell_revamp', 'priest', 'warden', 'undergrowth_tiered\r'), + (2454, 'spell_revamp', 'priest', 'warden', 'verdant_whisper_tiered\r'), + (2455, 'spell_revamp', 'priest', 'warden', 'verdurous_journey_tiered\r'), + (2456, 'spell_revamp', 'priest', 'warden', 'ward_of_the_untamed_tiered\r'), + (2457, 'spell_revamp', 'priest', 'warden', 'warden_of_the_forest_tiered\r'), + (2458, 'spell_revamp', 'priest', 'warden', 'willow_wisp_tiered\r'), + (2459, 'spell_revamp', 'priest', 'warden', 'winds_of_healing_tiered\r'), + (2460, 'spell_revamp', 'priest', 'warden', 'winds_of_permafrost_tiered\r'), + (2461, 'expansion_06', 'frost_giant_stomp\r', NULL, NULL), + (2462, 'spell_revamp', 'priest', 'fury', 'untamed_shroud_tiered\r'), + (2463, 'spell_revamp', 'priest', 'fury', 'abolishment_tiered\r'), + (2464, 'spell_revamp', 'priest', 'fury', 'armor_of_nature_tiered\r'), + (2465, 'spell_revamp', 'priest', 'fury', 'autumns_kiss_tiered\r'), + (2466, 'spell_revamp', 'priest', 'fury', 'back_into_the_fray_tiered\r'), + (2467, 'spell_revamp', 'priest', 'fury', 'ball_lightning_tiered\r'), + (2468, 'spell_revamp', 'priest', 'fury', 'brambles_tiered\r'), + (2469, 'spell_revamp', 'priest', 'fury', 'call_of_storms_tiered\r'), + (2470, 'spell_revamp', 'priest', 'fury', 'call_of_the_hunt_tiered\r'), + (2471, 'spell_revamp', 'priest', 'fury', 'death_swarm_tiered\r'), + (2472, 'spell_revamp', 'priest', 'fury', 'fae_fire_tiered\r'), + (2473, 'spell_revamp', 'priest', 'fury', 'feast_tiered\r'), + (2474, 'spell_revamp', 'priest', 'fury', 'feral_pulse_tiered\r'), + (2475, 'spell_revamp', 'priest', 'fury', 'feral_tenacity_tiered\r'), + (2476, 'spell_revamp', 'priest', 'fury', 'ferocity_of_the_eel_tiered\r'), + (2477, 'spell_revamp', 'priest', 'fury', 'fierce_rousing_tiered\r'), + (2478, 'spell_revamp', 'priest', 'fury', 'forest_spirit_tiered\r'), + (2479, 'spell_revamp', 'priest', 'fury', 'hibernation_tiered\r'), + (2480, 'spell_revamp', 'priest', 'fury', 'intimidation_tiered\r'), + (2481, 'spell_revamp', 'priest', 'fury', 'karanas_hold_tiered\r'), + (2482, 'spell_revamp', 'priest', 'fury', 'lucidity_tiered\r'), + (2483, 'spell_revamp', 'priest', 'fury', 'maddening_swarm_tiered\r'), + (2484, 'spell_revamp', 'priest', 'fury', 'master_of_the_hunt_tiered\r'), + (2485, 'spell_revamp', 'priest', 'fury', 'natures_elixir_tiered\r'), + (2486, 'spell_revamp', 'priest', 'fury', 'natures_salve_tiered\r'), + (2487, 'spell_revamp', 'priest', 'fury', 'peerless_predator_tiered\r'), + (2488, 'spell_revamp', 'priest', 'fury', 'porcupine_tiered\r'), + (2489, 'spell_revamp', 'priest', 'fury', 'primal_fury_tiered\r'), + (2490, 'spell_revamp', 'priest', 'fury', 'primeval_awakening_tiered\r'), + (2491, 'spell_revamp', 'priest', 'fury', 'proc_attack_speed_damage_tiered\r'), + (2492, 'spell_revamp', 'priest', 'fury', 'regrowth_tiered\r'), + (2493, 'spell_revamp', 'priest', 'fury', 'ring_of_fire_tiered\r'), + (2494, 'spell_revamp', 'priest', 'fury', 'starnova_tiered\r'), + (2495, 'spell_revamp', 'priest', 'fury', 'tempest_tiered\r'), + (2496, 'spell_revamp', 'priest', 'fury', 'thornskin_tiered\r'), + (2497, 'spell_revamp', 'priest', 'fury', 'thunderbolt_tiered\r'), + (2498, 'spell_revamp', 'priest', 'fury', 'untamed_regeneration_tiered\r'), + (2499, 'spell_revamp', 'priest', 'fury', 'pact_of_the_cheetah_tiered\r'), + (2500, 'expansion_06', 'yeti_endless_chrushing\r', NULL, NULL), + (2501, 'npc', 'vrewwx_wing_buffet_aoe\r', NULL, NULL), + (2502, 'npc', 'vrewwx_ice_blast_aoe\r', NULL, NULL), + (2503, 'npc', 'vrewwx_ice_breath\r', NULL, NULL), + (2504, 'npc', 'vrewwx_shake_down_aoe\r', NULL, NULL), + (2505, 'design', 'design_repellent_spray_p2p\r', NULL, NULL), + (2506, 'npc', 'valkarie_spin_ice_attack\r', NULL, NULL), + (2507, 'any', 'leash_p2p\r', NULL, NULL), + (2508, 'any', 'leash_root_p2p\r', NULL, NULL), + (2509, 'any', 'pick_axe_toss_up\r', NULL, NULL), + (2510, 'spell_revamp', 'priest', 'mystic', 'umbral_trap_tiered\r'), + (2511, 'spell_revamp', 'priest', 'mystic', 'eidolic_ward_tiered\r'), + (2512, 'spell_revamp', 'priest', 'mystic', 'spirit_guide_tiered\r'), + (2513, 'spell_revamp', 'priest', 'mystic', 'spirit_of_the_wolf_tiered\r'), + (2514, 'procs', 'proc_mind_blade\r', NULL, NULL), + (2515, 'spell_revamp', 'priest', 'mystic', 'wrath_of_the_ancients_tiered\r'), + (2516, 'spell_revamp', 'priest', 'mystic', 'ancestral_avatar_tiered\r'), + (2517, 'spell_revamp', 'priest', 'mystic', 'ancestral_balm_tiered\r'), + (2518, 'spell_revamp', 'priest', 'mystic', 'ancestral_mettle_tiered\r'), + (2519, 'spell_revamp', 'priest', 'mystic', 'ancestral_savior_tiered\r'), + (2520, 'spell_revamp', 'priest', 'mystic', 'ancestral_sentry_tiered\r'), + (2521, 'spell_revamp', 'priest', 'mystic', 'ancestrall_ward_tiered\r'), + (2522, 'spell_revamp', 'priest', 'mystic', 'bolster_tiered\r'), + (2523, 'spell_revamp', 'priest', 'mystic', 'deteriorate_tiered\r'), + (2524, 'spell_revamp', 'priest', 'mystic', 'ebbing_spirit_tiered\r'), + (2525, 'spell_revamp', 'priest', 'mystic', 'echoes_of_the_ancients_tiered\r'), + (2526, 'spell_revamp', 'priest', 'mystic', 'fields_of_grey_tiered\r'), + (2527, 'spell_revamp', 'priest', 'mystic', 'glacial_flames_tiered\r'), + (2528, 'spell_revamp', 'priest', 'mystic', 'haze_tiered\r'), + (2529, 'spell_revamp', 'priest', 'mystic', 'lamenting_soul_tiered\r'), + (2530, 'spell_revamp', 'priest', 'mystic', 'lethargy_tiered\r'), + (2531, 'spell_revamp', 'priest', 'mystic', 'lunar_attendant_tiered\r'), + (2532, 'spell_revamp', 'priest', 'mystic', 'oberon_tiered\r'), + (2533, 'spell_revamp', 'priest', 'mystic', 'path_of_the_grey_tiered\r'), + (2534, 'spell_revamp', 'priest', 'mystic', 'plague_tiered\r'), + (2535, 'spell_revamp', 'priest', 'mystic', 'premonition_tiered\r'), + (2536, 'spell_revamp', 'priest', 'mystic', 'proc_heal_ward_tiered\r'), + (2537, 'spell_revamp', 'priest', 'mystic', 'prophetic_ward_tiered\r'), + (2538, 'spell_revamp', 'priest', 'mystic', 'recall_of_the_grey_tiered\r'), + (2539, 'spell_revamp', 'priest', 'mystic', 'rejuvenation_tiered\r'), + (2540, 'spell_revamp', 'priest', 'mystic', 'ritual_healing_tiered\r'), + (2541, 'spell_revamp', 'priest', 'mystic', 'runic_armor_tiered\r'), + (2542, 'spell_revamp', 'priest', 'mystic', 'slothful_spirit_tiered\r'), + (2543, 'spell_revamp', 'priest', 'mystic', 'spirit_of_the_mammoth_tiered\r'), + (2544, 'spell_revamp', 'priest', 'mystic', 'spirits_tiered\r'), + (2545, 'spell_revamp', 'priest', 'mystic', 'torpor_tiered\r'), + (2546, 'spell_revamp', 'priest', 'mystic', 'transcendence_tiered\r'), + (2547, 'spell_revamp', 'priest', 'mystic', 'umbral_warding_tiered\r'), + (2548, 'spell_revamp', 'priest', 'mystic', 'ursine_avatar_tiered\r'), + (2549, 'spell_revamp', 'priest', 'mystic', 'velium_winds_tiered\r'), + (2550, 'spell_revamp', 'priest', 'mystic', 'wards_of_the_eidolon_tiered\r'), + (2551, 'spell_revamp', 'priest', 'mystic', 'water_spirit_tiered\r'), + (2552, 'spell_revamp', 'priest', 'defiler', 'wild_accretion_tiered\r'), + (2553, 'spell_revamp', 'priest', 'defiler', 'abhorrent_seal_tiered\r'), + (2554, 'spell_revamp', 'priest', 'defiler', 'abomination_tiered\r'), + (2555, 'spell_revamp', 'priest', 'defiler', 'abominus_tiered\r'), + (2556, 'spell_revamp', 'priest', 'defiler', 'absolute_corruption_tiered\r'), + (2557, 'spell_revamp', 'priest', 'defiler', 'ancestral_avenger_tiered\r'), + (2558, 'spell_revamp', 'priest', 'defiler', 'ancient_shroud_tiered\r'), + (2559, 'spell_revamp', 'priest', 'defiler', 'ancient_terror_tiered\r'), + (2560, 'spell_revamp', 'priest', 'defiler', 'atrophy_tiered\r'), + (2561, 'spell_revamp', 'priest', 'defiler', 'bane_of_warding_tiered\r'), + (2562, 'spell_revamp', 'priest', 'defiler', 'carrion_warding_tiered\r'), + (2563, 'spell_revamp', 'priest', 'defiler', 'crystalize_soul_tiered\r'), + (2564, 'spell_revamp', 'priest', 'defiler', 'deathward_tiered\r'), + (2565, 'spell_revamp', 'priest', 'defiler', 'defile_tiered\r'), + (2566, 'spell_revamp', 'priest', 'defiler', 'dire_balm_tiered\r'), + (2567, 'spell_revamp', 'priest', 'defiler', 'fuliginous_whip_tiered\r'), + (2568, 'spell_revamp', 'priest', 'defiler', 'harbinger_tiered\r'), + (2569, 'spell_revamp', 'priest', 'defiler', 'imprecate_tiered\r'), + (2570, 'spell_revamp', 'priest', 'defiler', 'invective_tiered\r'), + (2571, 'spell_revamp', 'priest', 'defiler', 'maelstrom_tiered\r'), + (2572, 'spell_revamp', 'priest', 'defiler', 'mail_of_souls_tiered\r'), + (2573, 'spell_revamp', 'priest', 'defiler', 'noxious_efflux_tiered\r'), + (2574, 'spell_revamp', 'priest', 'defiler', 'purulence_tiered\r'), + (2575, 'spell_revamp', 'priest', 'defiler', 'putrefy_tiered\r'), + (2576, 'spell_revamp', 'priest', 'defiler', 'reanimate_tiered\r'), + (2577, 'spell_revamp', 'priest', 'defiler', 'sacrificial_restoration_tiered\r'), + (2578, 'spell_revamp', 'priest', 'defiler', 'senescence_tiered\r'), + (2579, 'spell_revamp', 'priest', 'defiler', 'shroud_of_armor_tiered\r'), + (2580, 'spell_revamp', 'priest', 'defiler', 'sinister_countenance_tiered\r'), + (2581, 'spell_revamp', 'priest', 'defiler', 'soul_cannibalize_tiered\r'), + (2582, 'spell_revamp', 'priest', 'defiler', 'spiritual_circle_tiered\r'), + (2583, 'spell_revamp', 'priest', 'defiler', 'tendrils_of_horror_tiered\r'), + (2584, 'spell_revamp', 'priest', 'defiler', 'terror_chant_tiered\r'), + (2585, 'spell_revamp', 'priest', 'defiler', 'vehemence_tiered\r'), + (2586, 'spell_revamp', 'priest', 'defiler', 'vivication_tiered\r'), + (2587, 'spell_revamp', 'priest', 'defiler', 'voice_of_the_ancestors_tiered\r'), + (2588, 'spell_revamp', 'scout', 'troubador', 'zanders_choral_rebuff_tiered\r'), + (2589, 'spell_revamp', 'scout', 'troubador', 'alins_serene_serenade_tiered\r'), + (2590, 'spell_revamp', 'scout', 'troubador', 'allegretto_tiered\r'), + (2591, 'spell_revamp', 'scout', 'troubador', 'arcane_symphony_tiered\r'), + (2592, 'spell_revamp', 'scout', 'troubador', 'aria_of_magic_tiered\r'), + (2593, 'spell_revamp', 'scout', 'troubador', 'breathtaking_bellow_tiered\r'), + (2594, 'spell_revamp', 'scout', 'troubador', 'brias_entrancing_sonnet_tiered\r'), + (2595, 'spell_revamp', 'scout', 'troubador', 'brias_inspiring_ballad_tiered\r'), + (2596, 'spell_revamp', 'scout', 'troubador', 'ceremonial_blade_tiered\r'), + (2597, 'spell_revamp', 'scout', 'troubador', 'chaos_anthem_tiered\r'), + (2598, 'spell_revamp', 'scout', 'troubador', 'cheap_shot_tiered\r'), + (2599, 'spell_revamp', 'scout', 'troubador', 'countersong_tiered\r'), + (2600, 'spell_revamp', 'scout', 'troubador', 'daelis_dance_of_blades_tiered\r'), + (2601, 'spell_revamp', 'scout', 'troubador', 'dancing_blade_tiered\r'), + (2602, 'spell_revamp', 'scout', 'troubador', 'demoralizing_processional_tiered\r'), + (2603, 'spell_revamp', 'scout', 'troubador', 'depressing_chant_tiered\r'), + (2604, 'spell_revamp', 'scout', 'troubador', 'disheartening_descant_tiered\r'), + (2605, 'spell_revamp', 'scout', 'troubador', 'elemental_concerto_tiered\r'), + (2606, 'spell_revamp', 'scout', 'troubador', 'escape_tiered\r'), + (2607, 'spell_revamp', 'scout', 'troubador', 'evade_tiered\r'), + (2608, 'spell_revamp', 'scout', 'troubador', 'graceful_avoidance_tiered\r'), + (2609, 'spell_revamp', 'scout', 'troubador', 'jesters_cap_tiered\r'), + (2610, 'spell_revamp', 'scout', 'troubador', 'lucky_break_tiered\r'), + (2611, 'spell_revamp', 'scout', 'troubador', 'lullaby_tiered\r'), + (2612, 'spell_revamp', 'scout', 'troubador', 'night_strike_tiered\r'), + (2613, 'spell_revamp', 'scout', 'troubador', 'painful_lamentations_tiered\r'), + (2614, 'spell_revamp', 'scout', 'troubador', 'pathfinding_tiered\r'), + (2615, 'spell_revamp', 'scout', 'troubador', 'perfect_shrill_tiered\r'), + (2616, 'spell_revamp', 'scout', 'troubador', 'perfection_of_the_maestro_tiered\r'), + (2617, 'spell_revamp', 'scout', 'troubador', 'proc_reflect_absorb_tiered\r'), + (2618, 'spell_revamp', 'scout', 'troubador', 'raxxyls_rousing_tune_tiered\r'), + (2619, 'spell_revamp', 'scout', 'troubador', 'rejuvenating_celebration_tiered\r'), + (2620, 'spell_revamp', 'scout', 'troubador', 'requiem_of_reflection_tiered\r'), + (2621, 'spell_revamp', 'scout', 'troubador', 'sandra_deafening_strike_tiered\r'), + (2622, 'spell_revamp', 'scout', 'troubador', 'selos_accelerando_tiered\r'), + (2623, 'spell_revamp', 'scout', 'troubador', 'shroud_tiered\r'), + (2624, 'spell_revamp', 'scout', 'troubador', 'singing_shot_tiered\r'), + (2625, 'spell_revamp', 'scout', 'troubador', 'song_of_magic_tiered\r'), + (2626, 'spell_revamp', 'scout', 'troubador', 'tap_essence_tiered\r'), + (2627, 'spell_revamp', 'scout', 'troubador', 'thunderous_overture_tiered\r'), + (2628, 'spell_revamp', 'scout', 'troubador', 'vexing_verses_tiered\r'), + (2629, 'spell_revamp', 'scout', 'dirge', 'zanders_choral_rebuff_tiered\r'), + (2630, 'spell_revamp', 'scout', 'dirge', 'cacophony_of_blades_tiered\r'), + (2631, 'spell_revamp', 'scout', 'dirge', 'claras_chaotic_cacophony_tiered\r'), + (2632, 'spell_revamp', 'scout', 'dirge', 'darksong_blade_tiered\r'), + (2633, 'spell_revamp', 'scout', 'dirge', 'daros_dull_blade_tiered\r'), + (2634, 'spell_revamp', 'scout', 'dirge', 'daros_sorrowful_dirge_tiered\r'), + (2635, 'spell_revamp', 'scout', 'dirge', 'dead_calm_tiered\r'), + (2636, 'spell_revamp', 'scout', 'dirge', 'deaths_door_tiered\r'), + (2637, 'spell_revamp', 'scout', 'dirge', 'elegy_at_deaths_door_tiered\r'), + (2638, 'spell_revamp', 'scout', 'dirge', 'elegy_of_awakening_tiered\r'), + (2639, 'spell_revamp', 'scout', 'dirge', 'garsins_funeral_march_tiered\r'), + (2640, 'spell_revamp', 'scout', 'dirge', 'gravitas_tiered\r'), + (2641, 'spell_revamp', 'scout', 'dirge', 'harls_rousing_tune_tiered\r'), + (2642, 'spell_revamp', 'scout', 'dirge', 'howl_of_death_tiered\r'), + (2643, 'spell_revamp', 'scout', 'dirge', 'hymn_of_horror_tiered\r'), + (2644, 'spell_revamp', 'scout', 'dirge', 'hyrans_seething_sonata_tiered\r'), + (2645, 'spell_revamp', 'scout', 'dirge', 'jaels_dreadful_deprivation_tiered\r'), + (2646, 'spell_revamp', 'scout', 'dirge', 'jaels_mysterious_mettle_tiered\r'), + (2647, 'spell_revamp', 'scout', 'dirge', 'jarols_sorrowful_requiem_tiered\r'), + (2648, 'spell_revamp', 'scout', 'dirge', 'lanets_excruciating_scream_tiered\r'), + (2649, 'spell_revamp', 'scout', 'dirge', 'ludas_nefarious_wail_tiered\r'), + (2650, 'spell_revamp', 'scout', 'dirge', 'misfortunes_kiss_tiered\r'), + (2651, 'spell_revamp', 'scout', 'dirge', 'noxious_symphony_tiered\r'), + (2652, 'spell_revamp', 'scout', 'dirge', 'oration_of_sacrifice_tiered\r'), + (2653, 'spell_revamp', 'scout', 'dirge', 'percussion_of_stone_tiered\r'), + (2654, 'spell_revamp', 'scout', 'dirge', 'proc_disease_interrupt_tiered\r'), + (2655, 'spell_revamp', 'scout', 'dirge', 'proc_stone_shield_tiered\r'), + (2656, 'spell_revamp', 'scout', 'dirge', 'rianas_relentless_tune_tiered\r'), + (2657, 'spell_revamp', 'scout', 'dirge', 'scream_of_death_tiered\r'), + (2658, 'spell_revamp', 'scout', 'dirge', 'songsters_luck_tiered\r'), + (2659, 'spell_revamp', 'scout', 'dirge', 'tarvens_crippling_crescendo_tiered\r'), + (2660, 'spell_revamp', 'scout', 'dirge', 'thuris_doleful_thrust_tiered\r'), + (2661, 'spell_revamp', 'scout', 'dirge', 'verliens_keen_of_dispair_tiered\r'), + (2662, 'spell_revamp', 'scout', 'dirge', 'wail_of_the_banshee_tiered\r'), + (2663, 'spell_revamp', 'priest', 'warden', 'faerie_ally_tiered\r'), + (2664, 'spell_revamp', 'scout', 'ranger', 'triple_shot_tiered\r'), + (2665, 'spell_revamp', 'scout', 'ranger', 'archers_fury_tiered\r'), + (2666, 'spell_revamp', 'scout', 'ranger', 'arrow_rip_tiered\r'), + (2667, 'spell_revamp', 'scout', 'ranger', 'bloody_reminder_tiered\r'), + (2668, 'spell_revamp', 'scout', 'ranger', 'coverage_tiered\r'), + (2669, 'spell_revamp', 'scout', 'ranger', 'crippling_arrow_tiered\r'), + (2670, 'spell_revamp', 'scout', 'ranger', 'emberstrike_tiered\r'), + (2671, 'spell_revamp', 'scout', 'ranger', 'ensnare_tiered\r'), + (2672, 'spell_revamp', 'scout', 'ranger', 'focus_aim_tiered\r'), + (2673, 'spell_revamp', 'scout', 'ranger', 'hawk_attack_tiered\r'), + (2674, 'spell_revamp', 'scout', 'ranger', 'hidden_shot_tiered\r'), + (2675, 'spell_revamp', 'scout', 'ranger', 'honed_reflexes_tiered\r'), + (2676, 'spell_revamp', 'scout', 'ranger', 'hunters_instinct_tiered\r'), + (2677, 'spell_revamp', 'scout', 'ranger', 'immobilizing_lunge_tiered\r'), + (2678, 'spell_revamp', 'scout', 'ranger', 'killing_instinct_tiered\r'), + (2679, 'spell_revamp', 'scout', 'ranger', 'lightning_strike_tiered\r'), + (2680, 'spell_revamp', 'scout', 'ranger', 'makeshift_arrows_tiered\r'), + (2681, 'spell_revamp', 'scout', 'ranger', 'miracle_shot_tiered\r'), + (2682, 'spell_revamp', 'scout', 'ranger', 'natural_selection_tiered\r'), + (2683, 'spell_revamp', 'scout', 'ranger', 'primal_reflexes_tiered\r'), + (2684, 'spell_revamp', 'scout', 'ranger', 'proc_stealth_tiered\r'), + (2685, 'spell_revamp', 'scout', 'ranger', 'rangers_blade_tiered\r'), + (2686, 'spell_revamp', 'scout', 'ranger', 'rear_shot_tiered\r'), + (2687, 'spell_revamp', 'scout', 'ranger', 'searing_shot_tiered\r'), + (2688, 'spell_revamp', 'scout', 'ranger', 'shadow_slip_tiered\r'), + (2689, 'spell_revamp', 'scout', 'ranger', 'snaring_shot_tiered\r'), + (2690, 'spell_revamp', 'scout', 'ranger', 'sneak_attack_tiered\r'), + (2691, 'spell_revamp', 'scout', 'ranger', 'snipe_tiered\r'), + (2692, 'spell_revamp', 'scout', 'ranger', 'sniper_shot_tiered\r'), + (2693, 'spell_revamp', 'scout', 'ranger', 'stalk_tiered\r'), + (2694, 'spell_revamp', 'scout', 'ranger', 'stealth_tiered\r'), + (2695, 'spell_revamp', 'scout', 'ranger', 'storm_of_arrows_tiered\r'), + (2696, 'spell_revamp', 'scout', 'ranger', 'stream_of_arrows_tiered\r'), + (2697, 'spell_revamp', 'scout', 'ranger', 'survival_instincts_tiered\r'), + (2698, 'spell_revamp', 'scout', 'ranger', 'thorny_trap_tiered\r'), + (2699, 'spell_revamp', 'scout', 'ranger', 'thorny_trap_trigger_tiered\r'), + (2700, 'spell_revamp', 'scout', 'ranger', 'trick_shot_tiered\r'), + (2701, 'spell_revamp', 'scout', 'assassin', 'whirling_blades_tiered\r'), + (2702, 'spell_revamp', 'scout', 'assassin', 'ambush_tiered\r'), + (2703, 'spell_revamp', 'scout', 'assassin', 'apply_poison_tiered\r'), + (2704, 'spell_revamp', 'scout', 'assassin', 'assassinate_tiered\r'), + (2705, 'spell_revamp', 'scout', 'assassin', 'caltrops_tiered\r'), + (2706, 'spell_revamp', 'scout', 'assassin', 'concealment_tiered\r'), + (2707, 'spell_revamp', 'scout', 'assassin', 'crippling_strike_tiered\r'), + (2708, 'spell_revamp', 'scout', 'assassin', 'cunning_defense_tiered\r'), + (2709, 'spell_revamp', 'scout', 'assassin', 'deadly_focus_tiered\r'), + (2710, 'spell_revamp', 'scout', 'assassin', 'deadly_shot_tiered\r'), + (2711, 'spell_revamp', 'scout', 'assassin', 'death_blow_tiered\r'), + (2712, 'spell_revamp', 'scout', 'assassin', 'death_mark_tiered\r'), + (2713, 'spell_revamp', 'scout', 'assassin', 'eviscerate_tiered\r'), + (2714, 'spell_revamp', 'scout', 'assassin', 'exacting_tiered\r'), + (2715, 'spell_revamp', 'scout', 'assassin', 'fatal_followup_tiered\r'), + (2716, 'spell_revamp', 'scout', 'assassin', 'gushing_wound_tiered\r'), + (2717, 'spell_revamp', 'scout', 'assassin', 'head_shot_tiered\r'), + (2718, 'spell_revamp', 'scout', 'assassin', 'impale_tiered\r'), + (2719, 'spell_revamp', 'scout', 'assassin', 'improvised_weapon_tiered\r'), + (2720, 'spell_revamp', 'scout', 'assassin', 'jugular_slice_tiered\r'), + (2721, 'spell_revamp', 'scout', 'assassin', 'masked_strike_tiered\r'), + (2722, 'spell_revamp', 'scout', 'assassin', 'massacre_tiered\r'), + (2723, 'spell_revamp', 'scout', 'assassin', 'mortal_blade_tiered\r'), + (2724, 'spell_revamp', 'scout', 'assassin', 'murderous_design_tiered\r'), + (2725, 'spell_revamp', 'scout', 'assassin', 'paralyzing_strike_tiered\r'), + (2726, 'spell_revamp', 'scout', 'assassin', 'proc_lower_hate_tiered\r'), + (2727, 'spell_revamp', 'scout', 'assassin', 'proc_pain_tiered\r'), + (2728, 'spell_revamp', 'scout', 'assassin', 'quick_strike_tiered\r'), + (2729, 'spell_revamp', 'scout', 'assassin', 'slip_away_tiered\r'), + (2730, 'spell_revamp', 'scout', 'assassin', 'spine_shot_tiered\r'), + (2731, 'spell_revamp', 'scout', 'assassin', 'stealth_assault_tiered\r'), + (2732, 'spell_revamp', 'scout', 'assassin', 'torture_tiered\r'), + (2733, 'spell_revamp', 'scout', 'assassin', 'villainy_tiered\r'), + (2734, 'spell_revamp', 'scout', 'swashbuckler', 'viscerate_tiered\r'), + (2735, 'spell_revamp', 'scout', 'swashbuckler', 'arctic_blast_tiered\r'), + (2736, 'spell_revamp', 'scout', 'swashbuckler', 'avoid_blame_tiered\r'), + (2737, 'spell_revamp', 'scout', 'swashbuckler', 'bladeweaver_tiered\r'), + (2738, 'spell_revamp', 'scout', 'swashbuckler', 'daring_advance_tiered\r'), + (2739, 'spell_revamp', 'scout', 'swashbuckler', 'dashing_swathe_tiered\r'), + (2740, 'spell_revamp', 'scout', 'swashbuckler', 'devious_blade_tiered\r'), + (2741, 'spell_revamp', 'scout', 'swashbuckler', 'disarming_grin_tiered\r'), + (2742, 'spell_revamp', 'scout', 'swashbuckler', 'double-cross_tiered\r'), + (2743, 'spell_revamp', 'scout', 'swashbuckler', 'en_garde_tiered\r'), + (2744, 'spell_revamp', 'scout', 'swashbuckler', 'fancy_footwork_tiered\r'), + (2745, 'spell_revamp', 'scout', 'swashbuckler', 'flamboyant_strike_tiered\r'), + (2746, 'spell_revamp', 'scout', 'swashbuckler', 'flash_of_steel_tiered\r'), + (2747, 'spell_revamp', 'scout', 'swashbuckler', 'flurry_of_blades_tiered\r'), + (2748, 'spell_revamp', 'scout', 'swashbuckler', 'hamstring_tiered\r'), + (2749, 'spell_revamp', 'scout', 'swashbuckler', 'hangmans_noose_tiered\r'), + (2750, 'spell_revamp', 'scout', 'swashbuckler', 'hurricane_tiered\r'), + (2751, 'spell_revamp', 'scout', 'swashbuckler', 'inspired_daring_tiered\r'), + (2752, 'spell_revamp', 'scout', 'swashbuckler', 'kidney_stab_tiered\r'), + (2753, 'spell_revamp', 'scout', 'swashbuckler', 'lucky_gambit_tiered\r'), + (2754, 'spell_revamp', 'scout', 'swashbuckler', 'lung_puncture_tiered\r'), + (2755, 'spell_revamp', 'scout', 'swashbuckler', 'perfect_finesse_tiered\r'), + (2756, 'spell_revamp', 'scout', 'swashbuckler', 'proc_taunt_speed_tiered\r'), + (2757, 'spell_revamp', 'scout', 'swashbuckler', 'razor_edge_tiered\r'), + (2758, 'spell_revamp', 'scout', 'swashbuckler', 'ruthless_cunning_tiered\r'), + (2759, 'spell_revamp', 'scout', 'swashbuckler', 'shanghai_tiered\r'), + (2760, 'spell_revamp', 'scout', 'swashbuckler', 'sleight_of_hand_tiered\r'), + (2761, 'spell_revamp', 'scout', 'swashbuckler', 'smuggle_tiered\r'), + (2762, 'spell_revamp', 'scout', 'swashbuckler', 'snap_of_the_wrist_tiered\r'), + (2763, 'spell_revamp', 'scout', 'swashbuckler', 'spurious_bravado_tiered\r'), + (2764, 'spell_revamp', 'scout', 'swashbuckler', 'storm_of_steel_tiered\r'), + (2765, 'spell_revamp', 'scout', 'swashbuckler', 'swarthy_deception_tiered\r'), + (2766, 'spell_revamp', 'scout', 'swashbuckler', 'tease_tiered\r'), + (2767, 'spell_revamp', 'scout', 'swashbuckler', 'trig_storm_of_steel_tiered\r'), + (2768, 'spell_revamp', 'scout', 'brigand', 'thieves_guild_tiered\r'), + (2769, 'spell_revamp', 'scout', 'brigand', 'amazing_reflexes_tiered\r'), + (2770, 'spell_revamp', 'scout', 'brigand', 'backstab_tiered\r'), + (2771, 'spell_revamp', 'scout', 'brigand', 'band_of_thugs_tiered\r'), + (2772, 'spell_revamp', 'scout', 'brigand', 'barroom_negotiation_tiered\r'), + (2773, 'spell_revamp', 'scout', 'brigand', 'battery_and_assault_tiered\r'), + (2774, 'spell_revamp', 'scout', 'brigand', 'befuddle_tiered\r'), + (2775, 'spell_revamp', 'scout', 'brigand', 'beg_for_mercy_tiered\r'), + (2776, 'spell_revamp', 'scout', 'brigand', 'black_jack_tiered\r'), + (2777, 'spell_revamp', 'scout', 'brigand', 'blackguard_tiered\r'), + (2778, 'spell_revamp', 'scout', 'brigand', 'bum_rush_tiered\r'), + (2779, 'spell_revamp', 'scout', 'brigand', 'cuss_tiered\r'), + (2780, 'spell_revamp', 'scout', 'brigand', 'debilitate_tiered\r'), + (2781, 'spell_revamp', 'scout', 'brigand', 'deceit_tiered\r'), + (2782, 'spell_revamp', 'scout', 'brigand', 'desperate_thrust_tiered\r'), + (2783, 'spell_revamp', 'scout', 'brigand', 'dispatch_tiered\r'), + (2784, 'spell_revamp', 'scout', 'brigand', 'double_throw_tiered\r'), + (2785, 'spell_revamp', 'scout', 'brigand', 'double_up_tiered\r'), + (2786, 'spell_revamp', 'scout', 'brigand', 'entangle_tiered\r'), + (2787, 'spell_revamp', 'scout', 'brigand', 'gouge_tiered\r'), + (2788, 'spell_revamp', 'scout', 'brigand', 'holdup_tiered\r'), + (2789, 'spell_revamp', 'scout', 'brigand', 'mug_tiered\r'), + (2790, 'spell_revamp', 'scout', 'brigand', 'murderous_rake_tiered\r'), + (2791, 'spell_revamp', 'scout', 'brigand', 'proc_powerful_attack_tiered\r'), + (2792, 'spell_revamp', 'scout', 'brigand', 'puncture_tiered\r'), + (2793, 'spell_revamp', 'scout', 'brigand', 'rob_tiered\r'), + (2794, 'spell_revamp', 'scout', 'brigand', 'shank_tiered\r'), + (2795, 'spell_revamp', 'scout', 'brigand', 'shenanigans_tiered\r'), + (2796, 'spell_revamp', 'scout', 'brigand', 'street_smarts_tiered\r'), + (2797, 'spell_revamp', 'scout', 'brigand', 'stunning_blow_tiered\r'), + (2798, 'any', 'bind_wound\r', NULL, NULL), + (2799, 'design', 'wellspring_ghost_attack_blast\r', NULL, NULL), + (2800, 'priest', 'wrath\r', NULL, NULL), + (2801, 'scout', 'predator_hilt_strike\r', NULL, NULL), + (2802, 'any', 'spore_dust_toss\r', NULL, NULL), + (2803, 'design', 'flame_burst_knockback\r', NULL, NULL), + (2804, 'creatures', 'ball_lightning_blast\r', NULL, NULL), + (2805, 'creatures', 'ring_of_fire_blast\r', NULL, NULL), + (2806, 'creatures', 'lunar_attendant_heal\r', NULL, NULL), + (2807, 'any', 'wand_of_obliteration\r', NULL, NULL), + (2808, 'any', 'drink_potion_cure\r', NULL, NULL), + (2809, 'any', 'drink_potion_forgive\r', NULL, NULL), + (2810, 'any', 'drink_potion_heal\r', NULL, NULL), + (2811, 'any', 'drink_potion_heal_power\r', NULL, NULL), + (2812, 'any', 'drink_potion_luck\r', NULL, NULL), + (2813, 'any', 'drink_potion_speed\r', NULL, NULL), + (2814, 'any', 'instant_resurrection\r', NULL, NULL), + (2815, 'any', 'research_reduction\r', NULL, NULL), + (2816, 'any', 'rune_of_devastation\r', NULL, NULL), + (2817, 'creatures', 'ancestral_sentry_buff\r', NULL, NULL), + (2818, 'design', 'talisman_blinding_flash\r', NULL, NULL), + (2819, 'boss', 'fallengate_plague_spikes\r', NULL, NULL), + (2820, 'boss', 'rheegor_axe_throw\r', NULL, NULL), + (2821, 'any', 'snotball_fling\r', NULL, NULL), + (2822, 'expansion_07', 'reverant_book_swarm\r', NULL, NULL), + (2823, 'spell_revamp', 'fighter', 'paladin', 'proc_consecration_tiered\r'), + (2824, 'spell_revamp', 'fighter', 'paladin', 'proc_castigate_tiered\r'), + (2825, 'spell_revamp', 'mage', 'coercer', 'proc_color_rain_tiered\r'), + (2826, 'mage', 'peace_of_mind\r', NULL, NULL), + (2827, 'any', 'paper_toss\r', NULL, NULL), + (2828, 'npc', 'npc_mind_control\r', NULL, NULL), + (2829, 'npc', 'npc_inquisitor_blast\r', NULL, NULL), + (2830, 'spell_revamp', 'priest', 'defiler', 'proc_defile_tiered\r'), + (2831, 'expansion_07', 'reverant_book_swarm_red\r', NULL, NULL), + (2832, 'expansion_07', 'reverant_book_swarm_blue\r', NULL, NULL), + (2833, 'expansion_07', 'coldain_light_flare\r', NULL, NULL), + (2834, 'expansion_07', 'coldain_spell_cage\r', NULL, NULL), + (2835, 'expansion_07', 'hot_water_toss\r', NULL, NULL), + (2836, 'expansion_07', 'tserrina_wing_buffet\r', NULL, NULL), + (2837, 'expansion_07', 'tserrina_scream\r', NULL, NULL), + (2838, 'expansion_07', 'efreeti_healthdrain_p2p\r', NULL, NULL), + (2839, 'expansion_07', 'target_ice_melt\r', NULL, NULL), + (2840, 'expansion_07', 'target_ice_shatter\r', NULL, NULL), + (2841, 'expansion_07', 'diaku_hammer_shower\r', NULL, NULL), + (2842, 'expansion_07', 'design_split_copy\r', NULL, NULL), + (2843, 'expansion_07', 'scream_of_vehemence\r', NULL, NULL), + (2844, 'expansion_07', 'design_split_copy2\r', NULL, NULL), + (2845, 'expansion_07', 'hamslammer_malady\r', NULL, NULL), + (2846, 'expansion_07', 'hamslammer_fear_chaos_doubt\r', NULL, NULL), + (2847, 'expansion_07', 'hamslammer_gall_smash\r', NULL, NULL), + (2848, 'expansion_07', 'elemental_drain_p2p\r', NULL, NULL), + (2849, 'expansion_07', 'ettin_heal_ball\r', NULL, NULL), + (2850, 'expansion_07', 'golden_talon_strike\r', NULL, NULL), + (2851, 'expansion_07', 'bone_crushing_strike\r', NULL, NULL), + (2852, 'expansion_07', 'tallonite_shadow_strike\r', NULL, NULL), + (2853, 'expansion_07', 'tallonite_sphere_green\r', NULL, NULL), + (2854, 'expansion_07', 'tallonite_balance_blue\r', NULL, NULL), + (2855, 'expansion_07', 'tallonite_balance_green\r', NULL, NULL), + (2856, 'expansion_07', 'tallonite_balance_purple\r', NULL, NULL), + (2857, 'expansion_07', 'tallonite_bow_barb_p2p_blue\r', NULL, NULL), + (2858, 'expansion_07', 'tallonite_bow_barb_p2p_green\r', NULL, NULL), + (2859, 'expansion_07', 'tallonite_bow_barb_p2p_purple\r', NULL, NULL), + (2860, 'expansion_07', 'tallonite_command_blue\r', NULL, NULL), + (2861, 'expansion_07', 'tallonite_command_green\r', NULL, NULL), + (2862, 'expansion_07', 'tallonite_lightning_quick_daggers_blue\r', NULL, NULL), + (2863, 'expansion_07', 'tallonite_lightning_quick_daggers_green\r', NULL, NULL), + (2864, 'expansion_07', 'tallonite_lightning_quick_daggers_purple\r', NULL, NULL), + (2865, 'expansion_07', 'tallonite_order_blue\r', NULL, NULL), + (2866, 'expansion_07', 'tallonite_order_green\r', NULL, NULL), + (2867, 'expansion_07', 'tallonite_rage_blue\r', NULL, NULL), + (2868, 'expansion_07', 'tallonite_rage_green\r', NULL, NULL), + (2869, 'expansion_07', 'tallonite_rage_purple\r', NULL, NULL), + (2870, 'expansion_07', 'tallonite_sphere_blue\r', NULL, NULL), + (2871, 'expansion_07', 'flaying_strike\r', NULL, NULL), + (2872, 'expansion_07', 'mind_spike\r', NULL, NULL), + (2873, 'expansion_07', 'soul_strike\r', NULL, NULL), + (2874, 'expansion_07', 'vallonite_barrage\r', NULL, NULL), + (2875, 'expansion_07', 'stoke_the_forge\r', NULL, NULL), + (2876, 'expansion_07', 'giant_ice_cage\r', NULL, NULL), + (2877, 'expansion_07', 'giant_thunder_clap\r', NULL, NULL), + (2878, 'expansion_07', 'giant_circle_of_storms\r', NULL, NULL), + (2879, 'expansion_07', 'giant_songs_of_thunder\r', NULL, NULL), + (2880, 'expansion_07', 'giant_storm_stomp\r', NULL, NULL), + (2881, 'expansion_07', 'kromzek_strike\r', NULL, NULL), + (2882, 'expansion_07', 'lifetap_p2p_red\r', NULL, NULL), + (2883, 'expansion_07', 'lifetap_p2p_purple\r', NULL, NULL), + (2884, 'expansion_07', 'alternate_advancement', 'cleric_aa_divine_armor\r', NULL), + (2885, 'expansion_07', 'alternate_advancement', 'cleric_aa_divine_perseverance\r', NULL), + (2886, 'expansion_07', 'alternate_advancement', 'cleric_aa_equilibrium\r', NULL), + (2887, 'expansion_07', 'alternate_advancement', 'cleric_aa_immaculate_revival\r', NULL), + (2888, 'expansion_07', 'alternate_advancement', 'proc_cleric_aa_equilibrium\r', NULL), + (2889, 'expansion_07', 'alternate_advancement', 'druid_aa_faith_of_the_fallen\r', NULL), + (2890, 'expansion_07', 'alternate_advancement', 'druid_aa_proc_ward\r', NULL), + (2891, 'expansion_07', 'alternate_advancement', 'druid_aa_protective_instinct\r', NULL), + (2892, 'expansion_07', 'alternate_advancement', 'druid_aa_howling_pack\r', NULL), + (2893, 'vampire', 'cast_vampire_bat_mount\r', NULL, NULL), + (2894, 'design', 'racing_speed_boost_buff\r', NULL, NULL), + (2895, 'design', 'racing_speed_drop_twister_debuff\r', NULL, NULL), + (2896, 'design', 'racing_timestop_buff\r', NULL, NULL), + (2897, 'design', 'racing_twister_blaster_buff\r', NULL, NULL), + (2898, 'spell_revamp', 'pets', 'necromancer_throat_gash\r', NULL), + (2899, 'spell_revamp', 'pets', 'necromancer_shadestrike\r', NULL), + (2900, 'spell_revamp', 'pets', 'necromancer_shadowy_garrote\r', NULL), + (2901, 'spell_revamp', 'pets', 'necromancer_poisoned_spike\r', NULL), + (2902, 'any', 'mug_fight\r', NULL, NULL), + (2903, 'expansion_07', 'falcon_punch_boss\r', NULL, NULL), + (2904, 'spell_revamp', 'pets', 'necromancer_grim_lifetap\r', NULL), + (2905, 'spell_revamp', 'pets', 'necromancer_grim_wave\r', NULL), + (2906, 'expansion_07', 'charge_up_crush_blast\r', NULL, NULL), + (2907, 'expansion_07', 'charge_up_crush_blast_lesser\r', NULL, NULL), + (2908, 'creatures', 'mount_komodo_summon\r', NULL, NULL), + (2909, 'creatures', 'mount_raptor_summon\r', NULL, NULL), + (2910, 'creatures', 'mount_terrorbird_summon\r', NULL, NULL), + (2911, 'creatures', 'mount_fae_summon\r', NULL, NULL), + (2912, 'expansion_08', 'falcon_god_catapult_hit\r', NULL, NULL), + (2913, 'expansion_08', 'falcon_god_concussive_winds\r', NULL, NULL), + (2914, 'expansion_08', 'falcon_god_egg_spit_p2p\r', NULL, NULL), + (2915, 'expansion_08', 'falcon_god_screech_snare\r', NULL, NULL), + (2916, 'expansion_07', 'tallon_special_bow_attack\r', NULL, NULL), + (2917, 'expansion_07', 'vallon_special_sword_attack\r', NULL, NULL), + (2918, 'expansion_07', 'sullon_special_axe_attack\r', NULL, NULL), + (2919, 'expansion_07', 'zek_special_axe_attack\r', NULL, NULL), + (2920, 'expansion_07', 'zek_special_shield_attack\r', NULL, NULL), + (2921, 'expansion_07', 'zek_fire_teleport\r', NULL, NULL), + (2922, 'expansion_07', 'zek_epic_death_p2p\r', NULL, NULL), + (2923, 'expansion_08', 'erollisi_bow_attack_p2p\r', NULL, NULL), + (2924, 'expansion_08', 'erollisi_spell_blast\r', NULL, NULL), + (2925, 'expansion_08', 'ullkorruuk_shadow_buff\r', NULL, NULL), + (2926, 'expansion_08', 'ullkorruuk_shadow_attack_p2p\r', NULL, NULL), + (2927, 'expansion_08', 'ullkorruuk_shadow_streaks\r', NULL, NULL), + (2928, 'creatures', 'mount_fire_gryphon_summon\r', NULL, NULL), + (2929, 'vampire', 'lifetap_heart_reverse_p2p\r', NULL, NULL), + (2930, 'design', 'fprt_ghost_attack_blast\r', NULL, NULL), + (2931, 'spell_revamp', 'scout', 'beastlord', 'astral_ravaging\r'), + (2932, 'spell_revamp', 'scout', 'beastlord', 'bestial_vehemence\r'), + (2933, 'spell_revamp', 'scout', 'beastlord', 'chilling_claws_tiered\r'), + (2934, 'spell_revamp', 'scout', 'beastlord', 'feral_stance_tiered\r'), + (2935, 'spell_revamp', 'scout', 'beastlord', 'frigid_fortification\r'), + (2936, 'spell_revamp', 'scout', 'beastlord', 'glacial_lance_tiered\r'), + (2937, 'spell_revamp', 'scout', 'beastlord', 'proc_potency\r'), + (2938, 'spell_revamp', 'scout', 'beastlord', 'quick_swipe_tiered\r'), + (2939, 'spell_revamp', 'scout', 'beastlord', 'rush_tiered\r'), + (2940, 'spell_revamp', 'scout', 'beastlord', 'savage_ruin_tiered\r'), + (2941, 'spell_revamp', 'scout', 'beastlord', 'spinechiller_blood_tiered\r'), + (2942, 'spell_revamp', 'scout', 'beastlord', 'spiritshroud_tiered\r'), + (2943, 'spell_revamp', 'scout', 'beastlord', 'spiritual_stance_tiered\r'), + (2944, 'spell_revamp', 'scout', 'beastlord', 'summon_warder_tiered\r'), + (2945, 'spell_revamp', 'scout', 'beastlord', 'tame_warder\r'), + (2946, 'spell_revamp', 'scout', 'beastlord', 'vine_net_tiered\r'), + (2947, 'spell_revamp', 'scout', 'beastlord', 'savage_resilience\r'), + (2948, 'expansion_08', 'lucan_soul_sacrifice\r', NULL, NULL), + (2949, 'spell_revamp', 'scout', 'beastlord', 'beastsoul\r'), + (2950, 'spell_revamp', 'scout', 'beastlord', 'callous_ferocity\r'), + (2951, 'spell_revamp', 'scout', 'beastlord', 'noxious_assault\r'), + (2952, 'spell_revamp', 'scout', 'beastlord', 'proc_crit_bonus\r'), + (2953, 'spell_revamp', 'scout', 'beastlord', 'proc_haste_dps\r'), + (2954, 'spell_revamp', 'scout', 'beastlord', 'spiritual_feast\r'), + (2955, 'spell_revamp', 'scout', 'beastlord', 'truespirit_claws\r'), + (2956, 'spell_revamp', 'scout', 'beastlord', 'flurry_of_claws\r'), + (2957, 'spell_revamp', 'scout', 'beastlord', 'glacial_roar\r'), + (2958, 'spell_revamp', 'scout', 'beastlord', 'shiverback_endemic\r'), + (2959, 'spell_revamp', 'scout', 'beastlord', 'feral_rending\r'), + (2960, 'spell_revamp', 'scout', 'beastlord', 'hawk_eyes\r'), + (2961, 'spell_revamp', 'scout', 'beastlord', 'neurotoxic_venom\r'), + (2962, 'spell_revamp', 'scout', 'beastlord', 'feral_pounce\r'), + (2963, 'spell_revamp', 'scout', 'beastlord', 'advantages_available\r'), + (2964, 'spell_revamp', 'scout', 'beastlord', 'chillbarrier\r'), + (2965, 'spell_revamp', 'scout', 'beastlord', 'kaldrahirs_leadership\r'), + (2966, 'spell_revamp', 'scout', 'beastlord', 'proc_dps\r'), + (2967, 'spell_revamp', 'scout', 'beastlord', 'proc_haste\r'), + (2968, 'spell_revamp', 'scout', 'beastlord', 'restoration_of_marish_kur\r'), + (2969, 'spell_revamp', 'scout', 'beastlord', 'ullas_resolution\r'), + (2970, 'spell_revamp', 'scout', 'beastlord', 'aquatic_courageous_scarring\r'), + (2971, 'spell_revamp', 'scout', 'beastlord', 'astral_soulsiphon\r'), + (2972, 'spell_revamp', 'scout', 'beastlord', 'bear_ferocious_roar\r'), + (2973, 'spell_revamp', 'scout', 'beastlord', 'boar_wild_goring\r'), + (2974, 'spell_revamp', 'scout', 'beastlord', 'bovid_energizing_assault\r'), + (2975, 'spell_revamp', 'scout', 'beastlord', 'enchanted_barrier\r'), + (2976, 'spell_revamp', 'scout', 'beastlord', 'rodent_rapid_flurry\r'), + (2978, 'spell_revamp', 'scout', 'beastlord', 'simian_grinning_onslaught\r'), + (2979, 'spell_revamp', 'scout', 'beastlord', 'soulbreath\r'), + (2980, 'spell_revamp', 'scout', 'beastlord', 'truespirit_strike\r'), + (2981, 'spell_revamp', 'scout', 'beastlord', 'amphibian_noxious_grasp\r'), + (2982, 'spell_revamp', 'scout', 'beastlord', 'bat_sonic_screech\r'), + (2983, 'spell_revamp', 'scout', 'beastlord', 'bird_silent_talon\r'), + (2984, 'spell_revamp', 'scout', 'beastlord', 'canine_savage_ravaging\r'), + (2985, 'spell_revamp', 'scout', 'beastlord', 'claw_of_khati_sha\r'), + (2986, 'spell_revamp', 'scout', 'beastlord', 'devour\r'), + (2987, 'spell_revamp', 'scout', 'beastlord', 'dire_brutal_beatdown\r'), + (2988, 'spell_revamp', 'scout', 'beastlord', 'drake_draconic_breath\r'), + (2989, 'spell_revamp', 'scout', 'beastlord', 'feline_shadow_leap\r'), + (2990, 'spell_revamp', 'scout', 'beastlord', 'feral_charge\r'), + (2991, 'spell_revamp', 'scout', 'beastlord', 'luclins_pain\r'), + (2992, 'spell_revamp', 'scout', 'beastlord', 'reptile_venom_fangs\r'), + (2993, 'spell_revamp', 'scout', 'beastlord', 'shalih_mars_mandate\r'), + (2994, 'spell_revamp', 'scout', 'beastlord', 'truespirit_venom\r'), + (2995, 'spell_revamp', 'scout', 'beastlord', 'beastmasters_sight\r'), + (2996, 'spell_revamp', 'scout', 'beastlord', 'blindside\r'), + (2997, 'spell_revamp', 'scout', 'beastlord', 'bonechiller_venom\r'), + (2998, 'spell_revamp', 'scout', 'beastlord', 'chilling_armor\r'), + (2999, 'spell_revamp', 'scout', 'beastlord', 'den_mothers_intervention\r'), + (3000, 'spell_revamp', 'scout', 'beastlord', 'kahldrahirs_growl\r'), + (3001, 'spell_revamp', 'scout', 'beastlord', 'marisha_kurs_protection\r'), + (3002, 'spell_revamp', 'scout', 'beastlord', 'packs_ferocity\r'), + (3003, 'spell_revamp', 'scout', 'beastlord', 'ralissks_insight\r'), + (3004, 'spell_revamp', 'scout', 'beastlord', 'savage_blaze\r'), + (3005, 'spell_revamp', 'scout', 'beastlord', 'savage_howl\r'), + (3006, 'spell_revamp', 'scout', 'beastlord', 'savagery_freeze\r'), + (3007, 'spell_revamp', 'scout', 'beastlord', 'ullas_spinning_bite\r'), + (3008, 'spell_revamp', 'scout', 'beastlord', 'elnakiis_swipe\r'), + (3009, 'spell_revamp', 'scout', 'beastlord', 'frostwall\r'), + (3010, 'spell_revamp', 'scout', 'beastlord', 'northwind_barrier\r'), + (3011, 'spell_revamp', 'scout', 'beastlord', 'primal_consumption\r'), + (3012, 'spell_revamp', 'scout', 'beastlord', 'proc_heal_power_restore\r'), + (3013, 'spell_revamp', 'scout', 'beastlord', 'proc_icicle_blast\r'), + (3014, 'spell_revamp', 'scout', 'beastlord', 'unchained_ferocity\r'), + (3015, 'expansion_08', 'draconian_cyclone_summon\r', NULL, NULL), + (3016, 'expansion_08', 'draconian_necro_summon\r', NULL, NULL), + (3017, 'design', 'racing_speed_drop_debuff_no_sound\r', NULL, NULL), + (3018, 'design', 'racing_speed_boost_buff_no_sound\r', NULL, NULL), + (3019, 'fighter', 'ranged_attack_throw_star_of_ro\r', NULL, NULL), + (3020, 'expansion_08', 'satyr_corruption\r', NULL, NULL), + (3021, 'expansion_08', 'satyr_gather_heal\r', NULL, NULL), + (3022, 'expansion_08', 'raptor_spit_p2p\r', NULL, NULL), + (3023, 'expansion_08', 'raptor_claws\r', NULL, NULL), + (3024, 'expansion_08', 'lumpy_spit_p2p\r', NULL, NULL), + (3025, 'expansion_08', 'giant_vine_slap\r', NULL, NULL), + (3026, 'expansion_08', 'giant_circle_of_thorns\r', NULL, NULL), + (3027, 'expansion_08', 'giant_vine_stomp\r', NULL, NULL), + (3028, 'expansion_08', 'satyr_obelisk_repair\r', NULL, NULL), + (3029, 'expansion_08', 'draconian_raptor_summon\r', NULL, NULL), + (3030, 'expansion_08', 'draconian_plant_summon\r', NULL, NULL), + (3031, 'expansion_08', 'draconian_drake_summon\r', NULL, NULL), + (3032, 'expansion_08', 'draconian_chokidai_summon\r', NULL, NULL), + (3033, 'expansion_08', 'satyr_sacrifice\r', NULL, NULL), + (3034, 'expansion_08', 'grendish_ice_breath_attack\r', NULL, NULL), + (3035, 'expansion_08', 'susarrak_necro_breath_attack\r', NULL, NULL), + (3036, 'expansion_08', 'draconian_lightning_bolt_p2p\r', NULL, NULL), + (3037, 'expansion_08', 'draconian_banish_grendish\r', NULL, NULL), + (3038, 'expansion_08', 'draconian_teleport_grendish\r', NULL, NULL), + (3039, 'expansion_08', 'sifaye_calm_storm\r', NULL, NULL), + (3040, 'expansion_08', 'buff_calm_storm\r', NULL, NULL), + (3041, 'expansion_08', 'lumpy_cycle_kick\r', NULL, NULL), + (3042, 'expansion_08', 'lumpy_dive_bomb\r', NULL, NULL), + (3043, 'expansion_08', 'lumpy_wing_buffet\r', NULL, NULL), + (3044, 'spell_revamp', 'fighter', 'berserker', 'demolish_aa\r'), + (3045, 'spell_revamp', 'fighter', 'shadowknight', 'tainted_sacrament_aa\r'), + (3046, 'spell_revamp', 'fighter', 'bruiser', 'knockout_aa\r'), + (3047, 'spell_revamp', 'mage', 'wizard', 'ice_comet_aa\r'), + (3048, 'spell_revamp', 'mage', 'warlock', 'netherealm_aa\r'), + (3049, 'spell_revamp', 'mage', 'illusionist', 'spell_shield_aa\r'), + (3050, 'spell_revamp', 'priest', 'fury', 'tempest_aa\r'), + (3051, 'spell_revamp', 'priest', 'inquisitor', 'heresy_aa\r'), + (3052, 'spell_revamp', 'priest', 'inquisitor', 'fanatical_healing_aa\r'), + (3053, 'spell_revamp', 'priest', 'templar', 'restoration_aa\r'), + (3054, 'spell_revamp', 'priest', 'templar', 'healing_fate_aa\r'), + (3055, 'spell_revamp', 'priest', 'mystic', 'umbral_warding_aa\r'), + (3056, 'spell_revamp', 'priest', 'defiler', 'sinister_countenance_aa\r'), + (3057, 'spell_revamp', 'scout', 'assassin', 'gushing_wound_aa\r'), + (3058, 'spell_revamp', 'scout', 'assassin', 'concealment_aa\r'), + (3059, 'spell_revamp', 'scout', 'ranger', 'coverage_aa\r'), + (3060, 'spell_revamp', 'scout', 'ranger', 'hidden_shot_aa\r'), + (3061, 'spell_revamp', 'scout', 'brigand', 'shenanigans_aa\r'), + (3062, 'spell_revamp', 'scout', 'brigand', 'beg_for_mercy_aa\r'), + (3063, 'spell_revamp', 'scout', 'swashbuckler', 'flurry_of_blades_aa\r'), + (3064, 'spell_revamp', 'scout', 'dirge', 'hymn_of_horror_aa\r'), + (3065, 'expansion_08', 'queen_bug_spit_p2p\r', NULL, NULL), + (3066, 'expansion_08', 'devouring_ember_breath\r', NULL, NULL), + (3067, 'expansion_08', 'drake_wings_of_war\r', NULL, NULL), + (3068, 'expansion_08', 'bone_golem_mortal_gorge_green\r', NULL, NULL), + (3069, 'expansion_08', 'bone_golem_mortal_gorge_blue\r', NULL, NULL), + (3070, 'expansion_08', 'bone_golem_mortal_gorge_red\r', NULL, NULL), + (3071, 'expansion_08', 'golem_battering_onset\r', NULL, NULL), + (3072, 'expansion_08', 'golem_levitating_assault\r', NULL, NULL), + (3073, 'expansion_08', 'draconian_command_of_armament\r', NULL, NULL), + (3074, 'expansion_08', 'draconian_rending_gash\r', NULL, NULL), + (3075, 'expansion_08', 'dragon_tail_snap_black\r', NULL, NULL), + (3076, 'expansion_08', 'dragon_tail_snap_blue\r', NULL, NULL), + (3077, 'expansion_08', 'dragon_tail_snap_red\r', NULL, NULL), + (3078, 'expansion_08', 'dragon_tail_snap_green\r', NULL, NULL), + (3079, 'any', 'levelup_prestige\r', NULL, NULL), + (3080, 'expansion_08', 'ancient_time_warp\r', NULL, NULL), + (3081, 'expansion_08', 'dragon_breath_noxious_vaporize\r', NULL, NULL), + (3082, 'expansion_08', 'dragon_breath_fire_vaporize\r', NULL, NULL), + (3083, 'expansion_08', 'dragon_breath_cold_vaporize\r', NULL, NULL), + (3084, 'expansion_08', 'dragon_breath_magic_vaporize\r', NULL, NULL), + (3085, 'expansion_08', 'dracurion_sonic_blast\r', NULL, NULL), + (3086, 'expansion_08', 'dracurion_shadow_screech\r', NULL, NULL), + (3087, 'expansion_08', 'dracurion_petrify\r', NULL, NULL), + (3088, 'expansion_08', 'dracurion_wings_of_flame\r', NULL, NULL), + (3089, 'spell_revamp', 'scout', 'dirge', 'darksong_blade_aa\r'), + (3090, 'expansion_08', 'beetle_fireball_p2p\r', NULL, NULL), + (3091, 'spell_revamp', 'mage', 'arcane_bewilderment_aa\r', NULL), + (3092, 'any', 'vial_toss\r', NULL, NULL), + (3093, 'spell_revamp', 'mage', 'chronosiphoning_aa\r', NULL), + (3094, 'spell_revamp', 'mage', 'counter_blade_aa\r', NULL), + (3095, 'spell_revamp', 'mage', 'daydream_aa\r', NULL), + (3096, 'spell_revamp', 'mage', 'empathic_aura_aa\r', NULL), + (3097, 'spell_revamp', 'mage', 'empathic_breeze_aa\r', NULL), + (3098, 'spell_revamp', 'mage', 'mana_channelling_aa\r', NULL), + (3099, 'spell_revamp', 'mage', 'mesmerizing_trance_aa\r', NULL), + (3100, 'spell_revamp', 'mage', 'nullifying_staff_aa\r', NULL), + (3101, 'spell_revamp', 'mage', 'proc_mana_channelling_aa\r', NULL), + (3102, 'spell_revamp', 'mage', 'proc_mesmerize_aa\r', NULL), + (3103, 'spell_revamp', 'mage', 'proc_soothe_aa\r', NULL), + (3104, 'spell_revamp', 'mage', 'sever_hate_aa\r', NULL), + (3105, 'spell_revamp', 'mage', 'spellblades_counter_aa\r', NULL), + (3106, 'spell_revamp', 'mage', 'touch_of_empathy_aa\r', NULL), + (3107, 'spell_revamp', 'mage', 'channeled_focus_aa\r', NULL), + (3108, 'spell_revamp', 'mage', 'wide_swings_aa\r', NULL), + (3109, 'spell_revamp', 'mage', 'illusionist', 'arms_of_imagination_aa\r'), + (3110, 'spell_revamp', 'mage', 'illusionist', 'destructive_rampage_aa\r'), + (3111, 'spell_revamp', 'mage', 'illusionist', 'illuminate_aa\r'), + (3112, 'spell_revamp', 'mage', 'illusionist', 'illusionary_instigation_aa\r'), + (3113, 'spell_revamp', 'mage', 'illusionist', 'illusory_arm_aa\r'), + (3114, 'spell_revamp', 'mage', 'illusionist', 'time_compression_aa\r'), + (3115, 'spell_revamp', 'mage', 'illusionist', 'time_warp_aa\r'), + (3116, 'spell_revamp', 'mage', 'coercer', 'coercive_healing_aa\r'), + (3117, 'spell_revamp', 'mage', 'coercer', 'coercive_shout_aa\r'), + (3118, 'spell_revamp', 'mage', 'coercer', 'manaward_aa\r'), + (3119, 'spell_revamp', 'mage', 'coercer', 'thought_snap_aa\r'), + (3120, 'spell_revamp', 'mage', 'ambidexterous_casting_aa\r', NULL), + (3121, 'spell_revamp', 'mage', 'blast_of_devastation_aa\r', NULL), + (3122, 'spell_revamp', 'mage', 'catalyst_aa\r', NULL), + (3123, 'spell_revamp', 'mage', 'concussive_blast_aa\r', NULL), + (3124, 'spell_revamp', 'mage', 'confounding_aa\r', NULL), + (3125, 'spell_revamp', 'mage', 'freehand_sorcery_aa\r', NULL), + (3126, 'spell_revamp', 'mage', 'manashield_aa\r', NULL), + (3127, 'spell_revamp', 'mage', 'proc_lightning_damage_aa\r', NULL), + (3128, 'spell_revamp', 'mage', 'static_discharge_aa\r', NULL), + (3129, 'spell_revamp', 'mage', 'static_shield_aa\r', NULL), + (3130, 'spell_revamp', 'mage', 'summon_drake_aa\r', NULL), + (3131, 'spell_revamp', 'mage', 'summon_gargoyle_aa\r', NULL), + (3132, 'spell_revamp', 'mage', 'summon_tome_aa\r', NULL), + (3133, 'spell_revamp', 'mage', 'thunderclap_aa\r', NULL), + (3134, 'spell_revamp', 'mage', 'ward_of_sages_aa\r', NULL), + (3135, 'spell_revamp', 'mage', 'wizard', 'fiery_blast_aa\r'), + (3136, 'spell_revamp', 'mage', 'wizard', 'manaburn_aa\r'), + (3137, 'spell_revamp', 'mage', 'wizard', 'proc_fire_slam_aa\r'), + (3138, 'spell_revamp', 'mage', 'warlock', 'dark_aggravation_aa\r'), + (3139, 'spell_revamp', 'mage', 'warlock', 'focused_casting_aa\r'), + (3140, 'spell_revamp', 'mage', 'warlock', 'proc_dark_aggravation_aa\r'), + (3141, 'spell_revamp', 'mage', 'warlock', 'propagation_aa\r'), + (3142, 'spell_revamp', 'mage', 'warlock', 'volatility_aa\r'), + (3143, 'any', 'bg_achievement_acquired\r', NULL, NULL), + (3144, 'spell_revamp', 'mage', 'animated_dagger_aa\r', NULL), + (3145, 'spell_revamp', 'mage', 'cabalisitic_conservation_aa\r', NULL), + (3146, 'spell_revamp', 'mage', 'magic_leash_aa\r', NULL), + (3147, 'spell_revamp', 'mage', 'possess_minion_aa\r', NULL), + (3148, 'spell_revamp', 'mage', 'proc_shockwave_aa\r', NULL), + (3149, 'spell_revamp', 'mage', 'shadow_step_aa\r', NULL), + (3150, 'spell_revamp', 'mage', 'shockwave_aa\r', NULL), + (3151, 'spell_revamp', 'mage', 'symbiosis_aa\r', NULL), + (3152, 'spell_revamp', 'mage', 'theurgists_detonation_aa\r', NULL), + (3153, 'spell_revamp', 'mage', 'transference_aa\r', NULL), + (3154, 'npc', 'blood_craze_ritual_p2p\r', NULL, NULL), + (3155, 'npc', 'idol_corruption_p2p\r', NULL, NULL), + (3156, 'spell_revamp', 'scout', 'beastlord', 'salivary_excretion\r'), + (3157, 'design', 'skull_attack_blast\r', NULL, NULL), + (3158, 'npc', 'ghostly_essence_p2p\r', NULL, NULL), + (3159, 'npc', 'succubus_flying_fireball\r', NULL, NULL), + (3160, 'npc', 'shadow_gather_ring_blast\r', NULL, NULL), + (3161, 'npc', 'essense_power_up_p2p\r', NULL, NULL), + (3162, 'boss', 'baelon_fear_shockwave\r', NULL, NULL), + (3163, 'boss', 'baelon_fist_shockwave\r', NULL, NULL), + (3164, 'boss', 'baelon_toxic_rain\r', NULL, NULL), + (3165, 'boss', 'tribal_ape_boss_fist_shockwave\r', NULL, NULL), + (3166, 'boss', 'tribal_ape_boss_enraged_recover\r', NULL, NULL), + (3167, 'spell_revamp', 'mage', 'unflinching_servant_aa\r', NULL), + (3168, 'spell_revamp', 'mage', 'animists_evasion_aa\r', NULL), + (3169, 'spell_revamp', 'mage', 'reanimate_aa\r', NULL), + (3170, 'spell_revamp', 'mage', 'elemental_toxicity_aa\r', NULL), + (3171, 'spell_revamp', 'mage', 'dimensional_storage_aa\r', NULL), + (3172, 'spell_revamp', 'mage', 'conjurer', 'hydromancer_aa\r'), + (3173, 'spell_revamp', 'mage', 'conjurer', 'stoneskins_aa\r'), + (3174, 'spell_revamp', 'mage', 'conjurer', 'bubble_aa\r'), + (3175, 'spell_revamp', 'mage', 'conjurer', 'runes_of_geomancy_aa\r'), + (3176, 'spell_revamp', 'mage', 'conjurer', 'elemental_blast_aa\r'), + (3177, 'spell_revamp', 'mage', 'conjurer', 'elemental_barrier_aa\r'), + (3178, 'spell_revamp', 'mage', 'necromancer', 'ooze_crawler_aa\r'), + (3179, 'spell_revamp', 'mage', 'necromancer', 'blood_pact_aa\r'), + (3180, 'spell_revamp', 'mage', 'necromancer', 'lifeburn_aa\r'), + (3181, 'spell_revamp', 'mage', 'necromancer', 'noxious_barrier_aa\r'), + (3182, 'any', 'sc_win_chest\r', NULL, NULL), + (3183, 'expansion_08', 'st_pillar_fire_leash_p2p\r', NULL, NULL), + (3184, 'expansion_08', 'st_pillar_ice_leash_p2p\r', NULL, NULL), + (3185, 'expansion_08', 'st_gargoyle_tether_buff_p2p\r', NULL, NULL), + (3186, 'boss', 'drinal_fear_shockwave\r', NULL, NULL), + (3187, 'boss', 'drinal_devastation_aoe\r', NULL, NULL), + (3188, 'boss', 'drinal_spirit_attack_p2p\r', NULL, NULL), + (3189, 'boss', 'drinal_warned_devastate\r', NULL, NULL), + (3190, 'artisan', 'forge_hammers_anvil_glow\r', NULL, NULL), + (3191, 'artisan', 'anvil_flask_log_glow\r', NULL, NULL), + (3192, 'expansion_09', 'bastion_vessel_red_p2p\r', NULL, NULL), + (3193, 'expansion_09', 'bastion_vessel_blue_p2p\r', NULL, NULL), + (3194, 'expansion_09', 'arcane_barrier_p2p\r', NULL, NULL), + (3195, 'expansion_09', 'divine_barrier_p2p\r', NULL, NULL), + (3196, 'expansion_09', 'post_werewolf_transformation\r', NULL, NULL), + (3197, 'expansion_09', 'pre_werewolf_transformation\r', NULL, NULL), + (3198, 'expansion_09', 'skirth_essence_suck_p2p\r', NULL, NULL), + (3199, 'expansion_09', 'gazer_flame_eye_attack_p2p\r', NULL, NULL), + (3200, 'expansion_09', 'gazer_charging_eye_cone_attack\r', NULL, NULL), + (3201, 'expansion_09', 'aggression_removal_restoration_p2p\r', NULL, NULL), + (3202, 'expansion_09', 'statue_restoration_p2p\r', NULL, NULL), + (3203, 'spell_revamp', 'fighter', 'berserker', 'rampagers_resilliance_aa\r'), + (3204, 'spell_revamp', 'fighter', 'berserker', 'saga_of_bloodshed_aa\r'), + (3205, 'spell_revamp', 'fighter', 'guardian', 'defenders_charge_aa\r'), + (3206, 'spell_revamp', 'fighter', 'guardian', 'champions_stand_aa\r'), + (3207, 'spell_revamp', 'fighter', 'guardian', 'champions_interception_aa\r'), + (3208, 'spell_revamp', 'fighter', 'shadowknight', 'chaotic_blade_aa\r'), + (3209, 'spell_revamp', 'fighter', 'shadowknight', 'reapers_mist_aa\r'), + (3210, 'spell_revamp', 'fighter', 'paladin', 'faith_aa\r'), + (3211, 'spell_revamp', 'fighter', 'paladin', 'divine_territory_aa\r'), + (3212, 'spell_revamp', 'fighter', 'bruiser', 'martial_leap_aa\r'), + (3213, 'spell_revamp', 'fighter', 'bruiser', 'battering_onslaught_aa\r'), + (3214, 'spell_revamp', 'fighter', 'monk', 'winds_of_salvation_aa\r'), + (3215, 'spell_revamp', 'fighter', 'monk', 'fluid_combination_aa\r'), + (3216, 'spell_revamp', 'mage', 'illusionist', 'chromatic_illusion_aa\r'), + (3217, 'spell_revamp', 'mage', 'illusionist', 'illusionary_vigor_aa\r'), + (3218, 'spell_revamp', 'mage', 'illusionist', 'energy_overload_aa\r'), + (3219, 'spell_revamp', 'mage', 'coercer', 'coerced_intensity_aa\r'), + (3220, 'spell_revamp', 'mage', 'coercer', 'ether_balance_aa\r'), + (3221, 'spell_revamp', 'mage', 'coercer', 'mind_control_aa\r'), + (3222, 'spell_revamp', 'mage', 'wizard', 'frozen_rain_aa\r'), + (3223, 'spell_revamp', 'mage', 'wizard', 'hellfire_aa\r'), + (3224, 'spell_revamp', 'mage', 'warlock', 'noxious_bolt_aa\r'), + (3225, 'spell_revamp', 'mage', 'warlock', 'toxic_mist_aa\r'), + (3226, 'spell_revamp', 'mage', 'conjurer', 'planar_detonation_aa\r'), + (3227, 'spell_revamp', 'mage', 'conjurer', 'conjure_armor_aa\r'), + (3228, 'spell_revamp', 'mage', 'conjurer', 'stone_armor_aa\r'), + (3229, 'spell_revamp', 'mage', 'conjurer', 'blazing_energy_aa\r'), + (3230, 'spell_revamp', 'mage', 'conjurer', 'planar_burst_aa\r'), + (3231, 'spell_revamp', 'mage', 'necromancer', 'tomb_burst_aa\r'), + (3232, 'spell_revamp', 'mage', 'necromancer', 'necrotic_lifeforce_aa\r'), + (3233, 'spell_revamp', 'mage', 'necromancer', 'rot_flesh_aa\r'), + (3234, 'spell_revamp', 'mage', 'necromancer', 'death_grip_aa\r'), + (3235, 'spell_revamp', 'priest', 'templar', 'deific_restoration_aa\r'), + (3236, 'spell_revamp', 'priest', 'templar', 'sanctify_aa\r'), + (3237, 'spell_revamp', 'priest', 'inquisitor', 'interrogation_aa\r'), + (3238, 'spell_revamp', 'priest', 'inquisitor', 'fanatics_protection_aa\r'), + (3239, 'spell_revamp', 'priest', 'warden', 'windblade_aa\r'), + (3240, 'spell_revamp', 'priest', 'warden', 'winds_of_growth_aa\r'), + (3241, 'spell_revamp', 'priest', 'warden', 'proc_heal_windy\r'), + (3242, 'spell_revamp', 'priest', 'warden', 'clearwater_current_aa\r'), + (3243, 'spell_revamp', 'priest', 'fury', 'stormbearers_fury_aa\r'), + (3244, 'spell_revamp', 'priest', 'fury', 'proc_lightning_bolt\r'), + (3245, 'spell_revamp', 'priest', 'fury', 'proc_cleanse_heal\r'), + (3246, 'spell_revamp', 'priest', 'fury', 'natures_cleanse_aa\r'), + (3247, 'spell_revamp', 'priest', 'fury', 'lightning_siphon_aa\r'), + (3248, 'spell_revamp', 'priest', 'mystic', 'proc_spirit_ward\r'), + (3249, 'spell_revamp', 'priest', 'mystic', 'ancestral_support_aa\r'), + (3250, 'spell_revamp', 'priest', 'mystic', 'spectral_strike_aa\r'), + (3251, 'spell_revamp', 'priest', 'mystic', 'spiritual_stability_aa\r'), + (3252, 'spell_revamp', 'priest', 'mystic', 'barrier_of_the_spirits_aa\r'), + (3253, 'spell_revamp', 'priest', 'defiler', 'proc_phantom_ward\r'), + (3254, 'spell_revamp', 'priest', 'defiler', 'spiritual_dominion_aa\r'), + (3255, 'spell_revamp', 'priest', 'defiler', 'phantasmal_barrier_aa\r'), + (3256, 'spell_revamp', 'priest', 'defiler', 'wraithwall_aa\r'), + (3257, 'spell_revamp', 'scout', 'troubador', 'reverberation_aa\r'), + (3258, 'spell_revamp', 'scout', 'troubador', 'bagpipe_solo_aa\r'), + (3259, 'spell_revamp', 'scout', 'troubador', 'mamba_of_blades_aa\r'), + (3260, 'spell_revamp', 'scout', 'dirge', 'echoing_howl_aa\r'), + (3261, 'spell_revamp', 'scout', 'dirge', 'exuberant_encore_aa\r'), + (3262, 'spell_revamp', 'scout', 'dirge', 'eulogy_of_the_fallen_aa\r'), + (3263, 'spell_revamp', 'scout', 'ranger', 'rapid_salvo_aa\r'), + (3264, 'spell_revamp', 'scout', 'ranger', 'blazing_shot_aa\r'), + (3265, 'spell_revamp', 'scout', 'assassin', 'nightblade_aa\r'), + (3266, 'spell_revamp', 'scout', 'assassin', 'bloodflurry_aa\r'), + (3267, 'spell_revamp', 'scout', 'swashbuckler', 'dashing_flourish_aa\r'), + (3268, 'spell_revamp', 'scout', 'swashbuckler', 'pirates_perception_aa\r'), + (3269, 'spell_revamp', 'scout', 'swashbuckler', 'seafury_thrust_aa\r'), + (3270, 'spell_revamp', 'scout', 'brigand', 'venom_explosion_aa\r'), + (3271, 'spell_revamp', 'scout', 'brigand', 'exacting_venom_aa\r'), + (3272, 'spell_revamp', 'scout', 'brigand', 'shred_aa\r'), + (3273, 'spell_revamp', 'scout', 'brigand', 'blinding_dust_aa\r'), + (3274, 'spell_revamp', 'scout', 'beastlord', 'ralissks_perception_aa\r'), + (3275, 'spell_revamp', 'scout', 'beastlord', 'feral_intensity_aa\r'), + (3276, 'expansion_09', 'firiona_tourbillion_essence_suck_p2p\r', NULL, NULL), + (3277, 'spell_revamp', 'fighter', 'altruism_aa\r', NULL), + (3278, 'spell_revamp', 'fighter', 'baton_flurry_aa\r', NULL), + (3279, 'spell_revamp', 'fighter', 'brawlers_tenacity_aa\r', NULL), + (3280, 'spell_revamp', 'fighter', 'chi_aa\r', NULL), + (3281, 'spell_revamp', 'fighter', 'crane_flock_aa\r', NULL), + (3282, 'spell_revamp', 'fighter', 'crane_sweep_aa\r', NULL), + (3283, 'spell_revamp', 'fighter', 'crane_twirl_aa\r', NULL), + (3284, 'spell_revamp', 'fighter', 'eagle_spin_aa\r', NULL), + (3285, 'spell_revamp', 'fighter', 'eagles_patience_aa\r', NULL), + (3286, 'spell_revamp', 'fighter', 'hostility_aa\r', NULL), + (3287, 'spell_revamp', 'fighter', 'mantis_leap_aa\r', NULL), + (3288, 'spell_revamp', 'fighter', 'mantis_star_aa\r', NULL), + (3289, 'spell_revamp', 'fighter', 'pressure_point_aa\r', NULL), + (3290, 'spell_revamp', 'fighter', 'proc_aoe_hit_aa\r', NULL), + (3291, 'spell_revamp', 'fighter', 'proc_crystal_ward_aa\r', NULL), + (3292, 'spell_revamp', 'fighter', 'bruiser', 'brutal_inspiration_aa\r'), + (3293, 'spell_revamp', 'fighter', 'bruiser', 'control_hate_aa\r'), + (3294, 'spell_revamp', 'fighter', 'bruiser', 'drag_aa\r'), + (3295, 'spell_revamp', 'fighter', 'bruiser', 'impenetrable_will_aa\r'), + (3296, 'spell_revamp', 'fighter', 'bruiser', 'proc_heat_damage_threat_aa\r'), + (3297, 'spell_revamp', 'fighter', 'bruiser', 'pulverize_aa\r'), + (3298, 'spell_revamp', 'fighter', 'bruiser', 'soak_hit_aa\r'), + (3299, 'spell_revamp', 'fighter', 'bruiser', 'staggering_blow_aa\r'), + (3300, 'spell_revamp', 'fighter', 'bruiser', 'wild_beating_aa\r'), + (3301, 'spell_revamp', 'fighter', 'monk', 'alternate_mongoose_stance_aa\r'), + (3302, 'spell_revamp', 'fighter', 'monk', 'evasion_aa\r'), + (3303, 'spell_revamp', 'fighter', 'monk', 'provoking_stance_aa\r'), + (3304, 'spell_revamp', 'fighter', 'monk', 'reprimand_aa\r'), + (3305, 'spell_revamp', 'fighter', 'monk', 'superior_guard_aa\r'), + (3306, 'spell_revamp', 'fighter', 'aura_of_leadership_aa\r', NULL), + (3307, 'spell_revamp', 'fighter', 'battle_leadership_aa\r', NULL), + (3308, 'spell_revamp', 'fighter', 'cavaliers_shout_aa\r', NULL), + (3309, 'spell_revamp', 'fighter', 'combat_leadership_aa\r', NULL), + (3310, 'spell_revamp', 'fighter', 'crusaders_faith_aa\r', NULL), + (3311, 'spell_revamp', 'fighter', 'divine_aura_aa\r', NULL), + (3312, 'spell_revamp', 'fighter', 'fearless_morale_aa\r', NULL), + (3313, 'spell_revamp', 'fighter', 'hammer_ground_aa\r', NULL), + (3314, 'spell_revamp', 'fighter', 'joust_aa\r', NULL), + (3315, 'spell_revamp', 'fighter', 'lance_aa\r', NULL), + (3316, 'spell_revamp', 'fighter', 'legionnaires_conviction_aa\r', NULL), + (3317, 'spell_revamp', 'fighter', 'legionnaires_smite_aa\r', NULL), + (3318, 'spell_revamp', 'fighter', 'paladin', 'arch_heal_aa\r'), + (3319, 'spell_revamp', 'fighter', 'paladin', 'cure_spells_aa\r'), + (3320, 'spell_revamp', 'fighter', 'paladin', 'harbinger_of_justice_aa\r'), + (3321, 'spell_revamp', 'fighter', 'paladin', 'heretics_destruction_aa\r'), + (3322, 'spell_revamp', 'fighter', 'paladin', 'smite_evil_aa\r'), + (3323, 'spell_revamp', 'fighter', 'proc_stab_hit_snare_aa\r', NULL), + (3324, 'spell_revamp', 'fighter', 'shadowknight', 'alternate_siphon_armament_aa\r'), + (3325, 'spell_revamp', 'fighter', 'shadowknight', 'blood_siphon_aa\r'), + (3326, 'spell_revamp', 'fighter', 'shadowknight', 'hateful_respite_aa\r'), + (3327, 'spell_revamp', 'fighter', 'shadowknight', 'proc_self_heal_taunt_diseased_aa\r'), + (3328, 'spell_revamp', 'fighter', 'shadowknight', 'reaver_aa\r'), + (3329, 'spell_revamp', 'fighter', 'swift_attack_aa\r', NULL), + (3330, 'spell_revamp', 'fighter', 'trample_aa\r', NULL), + (3331, 'spell_revamp', 'fighter', 'acceleration_strike_aa\r', NULL), + (3332, 'spell_revamp', 'fighter', 'belly_smash_aa\r', NULL), + (3333, 'spell_revamp', 'fighter', 'berserker', 'battle_frenzy_aa\r'), + (3334, 'spell_revamp', 'fighter', 'berserker', 'berserk_aa\r'), + (3335, 'spell_revamp', 'fighter', 'berserker', 'gut_roar_aa\r'), + (3336, 'spell_revamp', 'fighter', 'berserker', 'perseverance_aa\r'), + (3337, 'spell_revamp', 'fighter', 'bind_wound_aa\r', NULL), + (3338, 'spell_revamp', 'fighter', 'dragoon_spin_aa\r', NULL), + (3339, 'spell_revamp', 'fighter', 'dragoons_cyclone_aa\r', NULL), + (3340, 'spell_revamp', 'fighter', 'dragoons_reflexes_aa\r', NULL), + (3341, 'spell_revamp', 'fighter', 'executioners_wrath_aa\r', NULL), + (3342, 'spell_revamp', 'fighter', 'experienced_insight_aa\r', NULL), + (3343, 'spell_revamp', 'fighter', 'guardian', 'got_your_back_aa\r'), + (3344, 'spell_revamp', 'fighter', 'guardian', 'improved_moderation_aa\r'), + (3345, 'spell_revamp', 'fighter', 'guardian', 'last_man_standing_aa\r'), + (3346, 'spell_revamp', 'fighter', 'guardian', 'lay_waste_aa\r'), + (3347, 'spell_revamp', 'fighter', 'guardian', 'shoulder_the_burden_aa\r'), + (3348, 'spell_revamp', 'fighter', 'proc_reflect_aa\r', NULL), + (3349, 'spell_revamp', 'fighter', 'reversal_aa\r', NULL), + (3350, 'spell_revamp', 'priest', 'divine_aura_aa\r', NULL), + (3351, 'spell_revamp', 'priest', 'divine_castigation_aa\r', NULL), + (3352, 'spell_revamp', 'priest', 'divine_demonstration_aa\r', NULL), + (3353, 'spell_revamp', 'priest', 'divine_guidance_aa\r', NULL), + (3354, 'spell_revamp', 'priest', 'divine_recovery_aa\r', NULL), + (3355, 'spell_revamp', 'priest', 'exorcise_aa\r', NULL), + (3356, 'spell_revamp', 'priest', 'hammer_divine_smite_aa\r', NULL), + (3357, 'spell_revamp', 'priest', 'holy_shield_aa\r', NULL), + (3358, 'spell_revamp', 'priest', 'inquisitor', 'chilling_invigoration_aa\r'), + (3359, 'spell_revamp', 'priest', 'inquisitor', 'invocation_strike_aa\r'), + (3360, 'spell_revamp', 'priest', 'inquisitor', 'litany_circle_aa\r'), + (3361, 'spell_revamp', 'priest', 'inquisitor', 'maladroit_aa\r'), + (3362, 'spell_revamp', 'priest', 'inquisitor', 'strike_of_corruption_aa\r'), + (3363, 'spell_revamp', 'priest', 'inquisitor', 'strike_of_flames_aa\r'), + (3364, 'spell_revamp', 'priest', 'inquisitor', 'writhing_strike_aa\r'), + (3365, 'spell_revamp', 'priest', 'shield_ally_aa\r', NULL), + (3366, 'spell_revamp', 'priest', 'skull_crack_aa\r', NULL), + (3367, 'spell_revamp', 'priest', 'supplication_of_the_fallen_aa\r', NULL), + (3368, 'spell_revamp', 'priest', 'templar', 'blessings_aa\r'), + (3369, 'spell_revamp', 'priest', 'templar', 'mana_cure_aa\r'), + (3370, 'spell_revamp', 'priest', 'templar', 'overconfidence_aa\r'), + (3371, 'spell_revamp', 'priest', 'templar', 'true_faith_aa\r'), + (3372, 'spell_revamp', 'priest', 'wondrous_distraction_aa\r', NULL), + (3373, 'spell_revamp', 'priest', 'yaulp_aa\r', NULL), + (3374, 'spell_revamp', 'priest', 'calm_aa\r', NULL), + (3375, 'spell_revamp', 'priest', 'charm_creature_aa\r', NULL), + (3376, 'spell_revamp', 'priest', 'fury', 'animal_form_aa\r'), + (3377, 'spell_revamp', 'priest', 'fury', 'energy_vortex_aa\r'), + (3378, 'spell_revamp', 'priest', 'fury', 'natural_cleanse_aa\r'), + (3379, 'spell_revamp', 'priest', 'fury', 'pact_of_nature_aa\r'), + (3380, 'spell_revamp', 'priest', 'hierophant_grasp_aa\r', NULL), + (3381, 'spell_revamp', 'priest', 'infusion_aa\r', NULL), + (3382, 'spell_revamp', 'priest', 'nature_blade_aa\r', NULL), + (3383, 'spell_revamp', 'priest', 'primodial_strike_aa\r', NULL), + (3384, 'spell_revamp', 'priest', 'proc_heal_cure_aa\r', NULL), + (3385, 'spell_revamp', 'priest', 'rebirth_aa\r', NULL), + (3386, 'spell_revamp', 'priest', 'serene_symbol_aa\r', NULL), + (3387, 'spell_revamp', 'priest', 'serenity_aa\r', NULL), + (3388, 'spell_revamp', 'priest', 'shapeshift_tiger_aa\r', NULL), + (3389, 'spell_revamp', 'priest', 'shapeshift_treant_aa\r', NULL), + (3390, 'spell_revamp', 'priest', 'shapeshift_winter_wolf_aa\r', NULL), + (3391, 'spell_revamp', 'priest', 'thunder_spike_aa\r', NULL), + (3392, 'spell_revamp', 'priest', 'tortoise_shell_aa\r', NULL), + (3393, 'spell_revamp', 'priest', 'tunares_grace_aa\r', NULL), + (3394, 'spell_revamp', 'priest', 'warden', 'cyclone_aa\r'), + (3395, 'spell_revamp', 'priest', 'warden', 'dawnstrike_aa\r'), + (3396, 'spell_revamp', 'priest', 'warden', 'frostbite_slice_aa\r'), + (3397, 'spell_revamp', 'priest', 'warden', 'icefall_strike_aa\r'), + (3398, 'spell_revamp', 'priest', 'warden', 'nature_walk_aa\r'), + (3399, 'spell_revamp', 'priest', 'warden', 'shatter_infections_aa\r'), + (3400, 'spell_revamp', 'priest', 'warden', 'whirl_of_permafrost_aa\r'), + (3401, 'spell_revamp', 'priest', 'ancestral_channeling_aa\r', NULL), + (3402, 'spell_revamp', 'priest', 'coagulate_aa\r', NULL), + (3403, 'spell_revamp', 'priest', 'dazing_bash_aa\r', NULL), + (3404, 'spell_revamp', 'priest', 'immunities_aa\r', NULL), + (3405, 'spell_revamp', 'priest', 'leg_bite_aa\r', NULL), + (3406, 'spell_revamp', 'priest', 'phalanx_aa\r', NULL), + (3407, 'spell_revamp', 'priest', 'rabies_aa\r', NULL), + (3408, 'spell_revamp', 'priest', 'ritual_aa\r', NULL), + (3409, 'spell_revamp', 'priest', 'ritual_of_alacrity_aa\r', NULL), + (3410, 'spell_revamp', 'priest', 'scourge_aa\r', NULL), + (3411, 'spell_revamp', 'priest', 'summon_spirit_companion_aa\r', NULL), + (3412, 'spell_revamp', 'priest', 'mystic', 'ancestry_aa\r'), + (3413, 'spell_revamp', 'priest', 'mystic', 'chilling_strike_aa\r'), + (3414, 'spell_revamp', 'priest', 'mystic', 'circle_of_the_ancients_aa\r'), + (3415, 'spell_revamp', 'priest', 'mystic', 'glacial_strike_aa\r'), + (3416, 'spell_revamp', 'priest', 'mystic', 'immunization_aa\r'), + (3417, 'spell_revamp', 'priest', 'mystic', 'plagueish_strike_aa\r'), + (3418, 'spell_revamp', 'priest', 'mystic', 'proc_crush_hit\r'), + (3419, 'spell_revamp', 'priest', 'mystic', 'proc_summon_wolf\r'), + (3420, 'spell_revamp', 'priest', 'mystic', 'spirit_dance_aa\r'), + (3421, 'spell_revamp', 'priest', 'mystic', 'stampede_of_the_herd_aa\r'), + (3422, 'spell_revamp', 'priest', 'defiler', 'cannibalize_aa\r'), + (3423, 'spell_revamp', 'priest', 'defiler', 'death_cries_aa\r'), + (3424, 'spell_revamp', 'priest', 'defiler', 'hexation_aa\r'), + (3425, 'spell_revamp', 'priest', 'defiler', 'malicious_spirits_aa\r'), + (3426, 'spell_revamp', 'priest', 'defiler', 'proc_weakness_aa\r'), + (3427, 'spell_revamp', 'priest', 'defiler', 'soul_ward_aa\r'), + (3428, 'spell_revamp', 'priest', 'defiler', 'spirit_wrath_aa\r'), + (3429, 'spell_revamp', 'priest', 'defiler', 'spiritual_sacrifice_aa\r'), + (3430, 'expansion_09', 'wood_elf_rock_blast_cast\r', NULL, NULL), + (3431, 'expansion_08', 'chitari_bone_blast\r', NULL, NULL), + (3432, 'expansion_08', 'chitari_multi_slash\r', NULL, NULL), + (3433, 'spell_revamp', 'scout', 'allegro_aa\r', NULL), + (3434, 'spell_revamp', 'scout', 'bladedance_aa\r', NULL), + (3435, 'spell_revamp', 'scout', 'bump_aa\r', NULL), + (3436, 'spell_revamp', 'scout', 'dirge', 'luck_of_the_dirge_aa\r'), + (3437, 'spell_revamp', 'scout', 'dirge', 'magnetic_note_aa\r'), + (3438, 'spell_revamp', 'scout', 'dirge', 'sonic_barrier_aa\r'), + (3439, 'spell_revamp', 'scout', 'dodge_and_cover_aa\r', NULL), + (3440, 'spell_revamp', 'scout', 'dont_kill_the_messenger_aa\r', NULL), + (3441, 'spell_revamp', 'scout', 'evasive_maneuvers_aa\r', NULL), + (3442, 'spell_revamp', 'scout', 'fortissimo_aa\r', NULL), + (3443, 'spell_revamp', 'scout', 'heroic_storytelling_aa\r', NULL), + (3444, 'spell_revamp', 'scout', 'lend_shielding_aa\r', NULL), + (3445, 'spell_revamp', 'scout', 'messengers_letter_aa\r', NULL), + (3446, 'spell_revamp', 'scout', 'proc_int_wis_buff_aa\r', NULL), + (3447, 'spell_revamp', 'scout', 'proc_victorious_concerto_aa\r', NULL), + (3448, 'spell_revamp', 'scout', 'rhythm_blade_aa\r', NULL), + (3449, 'spell_revamp', 'scout', 'rhythmic_overture_aa\r', NULL), + (3450, 'spell_revamp', 'scout', 'round_bash_aa\r', NULL), + (3451, 'spell_revamp', 'scout', 'song_of_shielding_aa\r', NULL), + (3452, 'spell_revamp', 'scout', 'troubador', 'abhorrent_verse_aa\r'), + (3453, 'spell_revamp', 'scout', 'troubador', 'energizing_ballad_aa\r'), + (3454, 'spell_revamp', 'scout', 'troubador', 'harmonization_aa\r'), + (3455, 'spell_revamp', 'scout', 'troubador', 'proc_heal_duration_aa\r'), + (3456, 'spell_revamp', 'scout', 'troubador', 'proc_spell_duration_aa\r'), + (3457, 'spell_revamp', 'scout', 'troubador', 'resonance_aa\r'), + (3458, 'spell_revamp', 'scout', 'troubador', 'sonic_interference_aa\r'), + (3459, 'spell_revamp', 'scout', 'turnstrike_aa\r', NULL), + (3460, 'spell_revamp', 'scout', 'veil_of_notes_aa\r', NULL), + (3461, 'any', 'fireworks_brewday_confetti_streamers\r', NULL, NULL), + (3462, 'any', 'fireworks_brewday_foam_bubbles\r', NULL, NULL), + (3463, 'any', 'fireworks_brewday_shamrock_sparkles\r', NULL, NULL), + (3464, 'any', 'fireworks_bristlebane_flare_beads\r', NULL, NULL), + (3465, 'any', 'fireworks_bristlebane_flare_cards\r', NULL, NULL), + (3466, 'any', 'fireworks_bristlebane_flare_coins\r', NULL, NULL), + (3467, 'expansion_09', 'music_barrier_p2p\r', NULL, NULL), + (3468, 'spell_revamp', 'scout', 'assassin', 'apply_poison_aa\r'), + (3469, 'spell_revamp', 'scout', 'assassin', 'carnage_aa\r'), + (3470, 'spell_revamp', 'scout', 'assassin', 'getaway_aa\r'), + (3471, 'spell_revamp', 'scout', 'assassin', 'shadow_step_aa\r'), + (3472, 'spell_revamp', 'scout', 'bladed_opening_aa\r', NULL), + (3473, 'spell_revamp', 'scout', 'bounty_aa\r', NULL), + (3474, 'spell_revamp', 'scout', 'impenetrable_aa\r', NULL), + (3475, 'spell_revamp', 'scout', 'intoxication_aa\r', NULL), + (3476, 'spell_revamp', 'scout', 'neurotoxic_coating_aa\r', NULL), + (3477, 'spell_revamp', 'scout', 'placating_strike_aa\r', NULL), + (3478, 'spell_revamp', 'scout', 'point_blank_shot_aa\r', NULL), + (3479, 'spell_revamp', 'scout', 'poison_combination_aa\r', NULL), + (3480, 'spell_revamp', 'scout', 'predators_final_trick_aa\r', NULL), + (3481, 'spell_revamp', 'scout', 'proc_poison_debuff_aa\r', NULL), + (3482, 'spell_revamp', 'scout', 'ranger', 'arrow_barrage_aa\r'), + (3483, 'spell_revamp', 'scout', 'ranger', 'cat_like_reflexes_aa\r'), + (3484, 'spell_revamp', 'scout', 'ranger', 'hook_arrow_aa\r'), + (3485, 'spell_revamp', 'scout', 'ranger', 'proc_explosive_arrow_aa\r'), + (3486, 'spell_revamp', 'scout', 'smoke_bomb_aa\r', NULL), + (3487, 'spell_revamp', 'scout', 'spinning_spear_aa\r', NULL), + (3488, 'spell_revamp', 'scout', 'surrounding_attacks_aa\r', NULL), + (3489, 'spell_revamp', 'scout', 'boot_dagger_aa\r', NULL), + (3490, 'spell_revamp', 'scout', 'brigand', 'cornered_aa\r'), + (3491, 'spell_revamp', 'scout', 'brigand', 'honor_among_thieves_aa\r'), + (3492, 'spell_revamp', 'scout', 'brigand', 'poisoned_blades_aa\r'), + (3493, 'spell_revamp', 'scout', 'brigand', 'proc_teleport_stealth\r'), + (3494, 'spell_revamp', 'scout', 'brigand', 'will_to_survive_aa\r'), + (3495, 'spell_revamp', 'scout', 'coule_aa\r', NULL), + (3496, 'spell_revamp', 'scout', 'dance_of_metal_aa\r', NULL), + (3497, 'spell_revamp', 'scout', 'deft_disarm_aa\r', NULL), + (3498, 'spell_revamp', 'scout', 'evasiveness_aa\r', NULL), + (3499, 'spell_revamp', 'scout', 'lunge_reversal_aa\r', NULL), + (3500, 'spell_revamp', 'scout', 'swashbuckler', 'advance_warning_aa\r'), + (3501, 'spell_revamp', 'scout', 'swashbuckler', 'enfeebling_whirl_aa\r'), + (3502, 'spell_revamp', 'scout', 'swear_aa\r', NULL), + (3503, 'spell_revamp', 'scout', 'thiefs_prowess_aa\r', NULL), + (3504, 'spell_revamp', 'scout', 'torporous_strike_aa\r', NULL), + (3505, 'spell_revamp', 'scout', 'traumatic_swipe_aa\r', NULL), + (3506, 'spell_revamp', 'scout', 'walk_the_plank_aa\r', NULL), + (3507, 'expansion_08', 'boss_frog_spitting_adds\r', NULL, NULL), + (3508, 'expansion_08', 'poisonous_shockwave\r', NULL, NULL), + (3509, 'expansion_08', 'boss_frog_sweeping_tongue\r', NULL, NULL), + (3510, 'expansion_08', 'boss_frog_trailing_pollution\r', NULL, NULL), + (3511, 'expansion_08', 'ballista_fire_green_p2p\r', NULL, NULL), + (3512, 'expansion_09', 'illithid_ink_blast_aoe\r', NULL, NULL), + (3513, 'expansion_09', 'illithid_ink_barrier\r', NULL, NULL), + (3514, 'expansion_09', 'illithid_chain_lightning_p2p\r', NULL, NULL), + (3515, 'expansion_09', 'illithid_chain_lightning_bolt_p2p\r', NULL, NULL), + (3516, 'expansion_07', 'othmir_bone_summon_toss\r', NULL, NULL), + (3517, 'expansion_07', 'othmir_snowball_fight\r', NULL, NULL), + (3518, 'expansion_07', 'eel_toxic_lockdown\r', NULL, NULL), + (3519, 'expansion_07', 'sirens_melody\r', NULL, NULL), + (3520, 'expansion_07', 'piercing_wail\r', NULL, NULL), + (3521, 'expansion_07', 'stomp_of_ages\r', NULL, NULL), + (3522, 'expansion_07', 'heretical_judgement\r', NULL, NULL), + (3523, 'expansion_07', 'hydra_waterspout_attack\r', NULL, NULL), + (3524, 'expansion_07', 'hydra_acidic_spittle\r', NULL, NULL), + (3525, 'expansion_07', 'hydra_acid_spit\r', NULL, NULL), + (3526, 'expansion_07', 'hydra_overwhelming_snaps\r', NULL, NULL), + (3527, 'expansion_07', 'othmir_staff_poison_stab\r', NULL, NULL), + (3528, 'expansion_08', 'undead_ward_deploy\r', NULL, NULL), + (3529, 'expansion_07', 'othmir_triage_heal\r', NULL, NULL), + (3530, 'spell_revamp', 'fighter', 'berserker', 'berserker_mythical_wall_of_hatred\r'), + (3531, 'spell_revamp', 'fighter', 'berserker', 'berserker_mythical_whirlwind\r'), + (3532, 'spell_revamp', 'fighter', 'bruiser', 'bruiser_mythical_fist_of_gorynn\r'), + (3533, 'spell_revamp', 'fighter', 'bruiser', 'bruiser_mythical_unyielding_resolve\r'), + (3534, 'spell_revamp', 'fighter', 'guardian', 'guardian_mythical_wrath_of_valarek\r'), + (3535, 'spell_revamp', 'fighter', 'monk', 'monk_mythical_perfect_serenity\r'), + (3536, 'spell_revamp', 'fighter', 'paladin', 'paladin_mythical_holy_avenger\r'), + (3537, 'spell_revamp', 'fighter', 'paladin', 'paladin_mythical_marrs_favor\r'), + (3538, 'spell_revamp', 'fighter', 'shadowknight', 'shadowknight_mythical_seething_hatred\r'), + (3539, 'spell_revamp', 'fighter', 'shadowknight', 'shadowknight_mythical_touch_of_death\r'), + (3540, 'spell_revamp', 'mage', 'coercer', 'coercer_mythical_sirens_gift\r'), + (3541, 'spell_revamp', 'mage', 'coercer', 'coercer_mythical_sirens_stare\r'), + (3542, 'spell_revamp', 'mage', 'conjurer', 'conjuror_mythical_elemental_mastery\r'), + (3543, 'spell_revamp', 'mage', 'illusionist', 'illusionist_mythical_mirage_mastery\r'), + (3544, 'spell_revamp', 'mage', 'necromancer', 'necromancer_mythical_secrets_of_vazaelle\r'), + (3545, 'spell_revamp', 'mage', 'warlock', 'warlock_mythical_acid_rain\r'), + (3546, 'spell_revamp', 'mage', 'warlock', 'warlock_mythical_negative_void\r'), + (3547, 'spell_revamp', 'mage', 'wizard', 'wizard_mythical_focused_mind\r'), + (3548, 'spell_revamp', 'priest', 'defiler', 'defiler_mythical_nightmares\r'), + (3549, 'spell_revamp', 'priest', 'defiler', 'defiler_mythical_tribal_spirit\r'), + (3550, 'spell_revamp', 'priest', 'defiler', 'proc_evil_ward_aoe\r'), + (3551, 'spell_revamp', 'priest', 'fury', 'fury_mythical_natures_wrath\r'), + (3552, 'spell_revamp', 'priest', 'fury', 'fury_mythical_wraths_blessing\r'), + (3553, 'spell_revamp', 'priest', 'inquisitor', 'inquisitor_mythical_absolution\r'), + (3554, 'spell_revamp', 'priest', 'inquisitor', 'inquisitor_mythical_cleansing_of_the_soul\r'), + (3555, 'spell_revamp', 'priest', 'mystic', 'mystic_mythical_spirit_tap\r'), + (3556, 'spell_revamp', 'priest', 'mystic', 'mystic_mythical_spiritual_warding\r'), + (3557, 'spell_revamp', 'priest', 'templar', 'templar_mythical_divine_light\r'), + (3558, 'spell_revamp', 'priest', 'templar', 'templar_mythical_impenetrable_faith\r'), + (3559, 'spell_revamp', 'priest', 'warden', 'warden_mythical_infuriating_thorns\r'), + (3560, 'spell_revamp', 'priest', 'warden', 'warden_mythical_natures_restoration\r'), + (3561, 'spell_revamp', 'scout', 'assassin', 'assassin_mythical_assassins_flurry\r'), + (3562, 'spell_revamp', 'scout', 'beastlord', 'beastlord_mythical_master_of_beasts\r'), + (3563, 'spell_revamp', 'scout', 'brigand', 'brigand_mythical_havocs_treachery\r'), + (3564, 'spell_revamp', 'scout', 'dirge', 'dirge_mythical_march_of_blades\r'), + (3565, 'spell_revamp', 'scout', 'ranger', 'ranger_mythical_eagles_talon\r'), + (3566, 'spell_revamp', 'scout', 'swashbuckler', 'swashbuckler_mythical_swarthy_ways\r'), + (3567, 'spell_revamp', 'scout', 'troubador', 'troubador_mythical_ayonic_inspiration\r'), + (3568, 'deity', 'solusek_sun_beam_devastation\r', NULL, NULL), + (3569, 'deity', 'solusek_incineration\r', NULL, NULL), + (3570, 'deity', 'solusek_wrath_of_the_burning_prince\r', NULL, NULL), + (3571, 'deity', 'solusek_flame_front_blast\r', NULL, NULL), + (3572, 'deity', 'solusek_perimeter_blast\r', NULL, NULL), + (3573, 'any', 'fighter_aa_reassignment\r', NULL, NULL), + (3574, 'any', 'mage_aa_reassignment\r', NULL, NULL), + (3575, 'any', 'priest_aa_reassignment\r', NULL, NULL), + (3576, 'any', 'scout_aa_reassignment\r', NULL, NULL), + (3577, 'expansion_09', 'tear_of_veeshan_channeling_p2p\r', NULL, NULL), + (3578, 'expansion_09', 'kerafyrm_tear_runes_p2p\r', NULL, NULL), + (3579, 'expansion_09', 'tear_chain_channeling_p2p\r', NULL, NULL), + (3580, 'expansion_09', 'veeshan_teleport\r', NULL, NULL), + (3581, 'expansion_09', 'lucan_antonia_soul_suck_p2p\r', NULL, NULL), + (3582, 'expansion_09', 'lucan_human_soul_suck_p2p\r', NULL, NULL), + (3583, 'expansion_09', 'duality_protection_p2p\r', NULL, NULL), + (3584, 'expansion_09', 'tear_gather_energy_release_p2p\r', NULL, NULL), + (3585, 'expansion_10', 'goblin_ring_summon_blue\r', NULL, NULL), + (3586, 'expansion_10', 'goblin_ring_summon_red\r', NULL, NULL), + (3587, 'expansion_10', 'goblin_ring_summon_yellow\r', NULL, NULL), + (3588, 'spell_revamp', 'priest', 'channeler', 'barrage_tiered\r'), + (3589, 'spell_revamp', 'priest', 'channeler', 'constructs_sacrifice_tiered\r'), + (3590, 'spell_revamp', 'priest', 'channeler', 'eye_shot_tiered\r'), + (3591, 'spell_revamp', 'priest', 'channeler', 'healing_arrow_tiered\r'), + (3592, 'spell_revamp', 'priest', 'channeler', 'sanctuary_of_darkness\r'), + (3593, 'spell_revamp', 'priest', 'channeler', 'shadow_bind_tiered\r'), + (3594, 'spell_revamp', 'priest', 'channeler', 'shadow_escape\r'), + (3595, 'spell_revamp', 'priest', 'channeler', 'vengeful_arrow_tiered\r'), + (3596, 'spell_revamp', 'priest', 'channeler', 'aura_of_crippling\r'), + (3597, 'spell_revamp', 'priest', 'channeler', 'barrier_of_dissonance\r'), + (3598, 'spell_revamp', 'priest', 'channeler', 'channeled_cleansing\r'), + (3599, 'spell_revamp', 'priest', 'channeler', 'channeled_evacuation\r'), + (3600, 'spell_revamp', 'priest', 'channeler', 'channeled_transference\r'), + (3601, 'spell_revamp', 'priest', 'channeler', 'construct_regeneration\r'), + (3602, 'spell_revamp', 'priest', 'channeler', 'proc_stoneskin\r'), + (3603, 'spell_revamp', 'priest', 'channeler', 'controlled_backlash\r'), + (3604, 'spell_revamp', 'priest', 'channeler', 'dissonance_decimation\r'), + (3605, 'spell_revamp', 'priest', 'channeler', 'dissonance_shielding\r'), + (3606, 'spell_revamp', 'priest', 'channeler', 'essence_weave\r'), + (3607, 'spell_revamp', 'priest', 'channeler', 'hidden_reserves\r'), + (3608, 'spell_revamp', 'priest', 'channeler', 'interfering_noise\r'), + (3609, 'spell_revamp', 'priest', 'channeler', 'interpose_redirect\r'), + (3610, 'spell_revamp', 'priest', 'channeler', 'mist_of_poison\r'), + (3611, 'spell_revamp', 'priest', 'channeler', 'poison_bolt\r'), + (3612, 'spell_revamp', 'priest', 'channeler', 'quickened_regeneration\r'), + (3613, 'spell_revamp', 'priest', 'channeler', 'repair_overload\r'), + (3614, 'spell_revamp', 'priest', 'channeler', 'siphoned_protection\r'), + (3615, 'spell_revamp', 'priest', 'channeler', 'swift_aid\r'), + (3616, 'spell_revamp', 'priest', 'channeler', 'thirslaas_shell\r'), + (3617, 'spell_revamp', 'priest', 'channeler', 'triggered_rejuvenation\r'), + (3618, 'spell_revamp', 'priest', 'channeler', 'triggered_restoration\r'), + (3619, 'spell_revamp', 'priest', 'channeler', 'truespirit_defiance\r'), + (3620, 'spell_revamp', 'priest', 'channeler', 'truespirit_restoration\r'), + (3621, 'spell_revamp', 'priest', 'channeler', 'weapon_dissonance\r'), + (3622, 'spell_revamp', 'priest', 'channeler', 'brood_cure_tiered\r'), + (3623, 'spell_revamp', 'priest', 'channeler', 'channel_essence\r'), + (3624, 'spell_revamp', 'priest', 'channeler', 'proc_win_channel_essence\r'), + (3625, 'spell_revamp', 'priest', 'channeler', 'proc_fail_channel_essence\r'), + (3626, 'spell_revamp', 'priest', 'channeler', 'channel_soul\r'), + (3627, 'spell_revamp', 'priest', 'channeler', 'proc_dodge_buff\r'), + (3628, 'spell_revamp', 'priest', 'channeler', 'channeled_protection_tiered\r'), + (3629, 'spell_revamp', 'priest', 'channeler', 'channeled_resurrection\r'), + (3630, 'spell_revamp', 'priest', 'channeler', 'constructs_interception\r'), + (3631, 'spell_revamp', 'priest', 'channeler', 'create_construct\r'), + (3632, 'spell_revamp', 'priest', 'channeler', 'marisha_kurs_blessing_tiered\r'), + (3633, 'spell_revamp', 'priest', 'channeler', 'oxygen_tunnel\r'), + (3634, 'spell_revamp', 'priest', 'channeler', 'salubrious_invocation_tiered\r'), + (3635, 'spell_revamp', 'priest', 'channeler', 'shield_of_blackwood_tiered\r'), + (3636, 'spell_revamp', 'priest', 'channeler', 'proc_dark_invisible\r'), + (3637, 'spell_revamp', 'priest', 'channeler', 'vector_of_life_tiered\r'), + (3638, 'spell_revamp', 'priest', 'channeler', 'dissipate_aa\r'), + (3639, 'spell_revamp', 'priest', 'channeler', 'impulse_shot_aa\r'), + (3640, 'spell_revamp', 'priest', 'channeler', 'focused_assault_aa\r'), + (3641, 'spell_revamp', 'priest', 'channeler', 'snap_shot_aa\r'), + (3642, 'spell_revamp', 'priest', 'channeler', 'stone_shaping_aa\r'), + (3643, 'spell_revamp', 'priest', 'channeler', 'dazing_invocation_aa\r'), + (3644, 'spell_revamp', 'priest', 'channeler', 'proc_resurrect_aa\r'), + (3645, 'spell_revamp', 'priest', 'channeler', 'chip_essence_aa\r'), + (3646, 'spell_revamp', 'priest', 'channeler', 'proc_damage_immunity\r'), + (3647, 'spell_revamp', 'priest', 'channeler', 'maximized_protection_aa\r'), + (3648, 'spell_revamp', 'priest', 'channeler', 'consume_construct_aa\r'), + (3649, 'spell_revamp', 'priest', 'channeler', 'downpour_aa\r'), + (3650, 'spell_revamp', 'priest', 'channeler', 'protect_me_aa\r'), + (3651, 'spell_revamp', 'priest', 'channeler', 'proc_damage_reduction_aa\r'), + (3652, 'spell_revamp', 'priest', 'channeler', 'piercing_arrows_aa\r'), + (3653, 'spell_revamp', 'priest', 'channeler', 'focus_of_restoration_aa\r'), + (3654, 'spell_revamp', 'priest', 'channeler', 'shatter_rain_aa\r'), + (3655, 'spell_revamp', 'priest', 'channeler', 'proc_area_damage_aa\r'), + (3656, 'spell_revamp', 'priest', 'channeler', 'healing_barrage_aa\r'), + (3657, 'spell_revamp', 'priest', 'channeler', 'truespirit_rift_aa\r'), + (3658, 'spell_revamp', 'priest', 'channeler', 'seeking_cascade_aa\r'), + (3659, 'expansion_10', 'aerakyn_boss_fist_blast\r', NULL, NULL), + (3660, 'expansion_10', 'dragon_enraged_breath\r', NULL, NULL), + (3661, 'expansion_10', 'wyvern_poison_breath\r', NULL, NULL), + (3662, 'expansion_10', 'wyvern_fire_breath\r', NULL, NULL), + (3663, 'expansion_10', 'nayad_spider_transformation\r', NULL, NULL), + (3664, 'expansion_10', 'nayad_beetle_transformation\r', NULL, NULL), + (3665, 'expansion_10', 'horde_dragon_breath\r', NULL, NULL), + (3666, 'expansion_10', 'nayad_black_hole_summon\r', NULL, NULL), + (3667, 'spell_revamp', 'priest', 'channeler', 'channeled_confusion\r'), + (3668, 'expansion_10', 'lendiniara_switch_summon_p2p\r', NULL, NULL), + (3669, 'expansion_10', 'nexus_switch_buff_red_p2p\r', NULL, NULL), + (3670, 'expansion_10', 'nexus_switch_buff_green_p2p\r', NULL, NULL), + (3671, 'expansion_10', 'nexus_switch_buff_blue_p2p\r', NULL, NULL), + (3672, 'expansion_10', 'nayad_blood_pool_buff_p2p\r', NULL, NULL), + (3673, 'expansion_10', 'nayad_blood_pool_death\r', NULL, NULL), + (3674, 'expansion_10', 'nayad_blood_spirit_vanish\r', NULL, NULL), + (3675, 'expansion_10', 'nexus_switch_buff_all_p2p\r', NULL, NULL), + (3676, 'expansion_10', 'bixie_arc_slash\r', NULL, NULL), + (3677, 'any', 'billiard_ball_fight\r', NULL, NULL), + (3678, 'expansion_10', 'void_portal_open_p2p\r', NULL, NULL), + (3679, 'expansion_10', 'void_portal_essence_suck_p2p\r', NULL, NULL), + (3680, 'expansion_10', 'mud_monster_flame_splash\r', NULL, NULL), + (3681, 'expansion_10', 'goblin_billiard_ball_fight\r', NULL, NULL), + (3682, 'expansion_10', 'goblin_bread_fight\r', NULL, NULL), + (3683, 'expansion_10', 'goblin_wine_bottle_fight\r', NULL, NULL), + (3684, 'expansion_10', 'goblin_bowl_fight\r', NULL, NULL), + (3685, 'expansion_10', 'goblin_fish_fight\r', NULL, NULL), + (3686, 'expansion_10', 'goblin_goblet_fight\r', NULL, NULL), + (3687, 'expansion_10', 'goblin_lime_fight\r', NULL, NULL), + (3688, 'expansion_10', 'goblin_orange_fight\r', NULL, NULL), + (3689, 'expansion_10', 'goblin_apple_fight\r', NULL, NULL), + (3690, 'spell_revamp', 'priest', 'channeler', 'channeler_mythical_blackwoods_focus\r'), + (3691, 'spell_revamp', 'priest', 'channeler', 'channeler_mythical_redirection\r'), + (3692, 'expansion_10', 'nexus_crystal_reform_p2p\r', NULL, NULL), + (3693, 'expansion_10', 'goblin_potion_empty\r', NULL, NULL), + (3694, 'expansion_10', 'goblin_potion_grow\r', NULL, NULL), + (3695, 'expansion_10', 'goblin_rocky_crack_blast\r', NULL, NULL), + (3696, 'expansion_10', 'goblin_coal_furnace_throw\r', NULL, NULL), + (3697, 'expansion_10', 'proc_goblin_crate_drop\r', NULL, NULL), + (3698, 'expansion_10', 'bolgin_rum_barrel_throw\r', NULL, NULL), + (3699, 'expansion_10', 'bolgin_rock_coin_shockwave\r', NULL, NULL), + (3700, 'expansion_10', 'bolgin_rock_kick\r', NULL, NULL), + (3701, 'expansion_10', 'bolgin_shove_curse\r', NULL, NULL), + (3702, 'expansion_10', 'bolgin_bellow\r', NULL, NULL), + (3703, 'expansion_08', 'grendish_ice_breath_knockdown\r', NULL, NULL), + (3704, 'expansion_10', 'soul_siphon_arc_p2p\r', NULL, NULL), + (3705, 'expansion_10', 'teleport_fold_blast\r', NULL, NULL), + (3706, 'expansion_10', 'shambler_leaf_burst_swing\r', NULL, NULL), + (3707, 'expansion_10', 'shambler_leaf_burst_stomp\r', NULL, NULL), + (3708, 'expansion_10', 'ethernere_speed_boost\r', NULL, NULL), + (3709, 'expansion_10', 'ethernere_speed_drop\r', NULL, NULL), + (3710, 'expansion_10', 'cast_mage_city_barrier\r', NULL, NULL), + (3711, 'spell_revamp', 'priest', 'uncontrollable_wrath_aa\r', NULL), + (3712, 'spell_revamp', 'dragon_regenerating_ward_aa\r', NULL, NULL), + (3713, 'spell_revamp', 'dragon_spell_reuse_buff_aa\r', NULL, NULL), + (3714, 'spell_revamp', 'dragon_prevent_death_aa\r', NULL, NULL), + (3715, 'spell_revamp', 'priest', 'unyielding_retribution_aa\r', NULL), + (3716, 'spell_revamp', 'fighter', 'draconic_shout_aa\r', NULL), + (3717, 'spell_revamp', 'fighter', 'provocation_aa\r', NULL), + (3718, 'spell_revamp', 'fighter', 'aggressors_power_aa\r', NULL), + (3719, 'spell_revamp', 'fighter', 'dragonwrath_aa\r', NULL), + (3720, 'spell_revamp', 'dragon_potency_buff_aa\r', NULL, NULL); +INSERT INTO `table_versions` (`name`,`version`,`download_version`) values ('reference_spell_effects',1,0); +UPDATE `table_versions` SET `download_version`=1 WHERE `name`='reference_spell_effects'; +DROP TABLE IF EXISTS `revive_points`; +CREATE TABLE IF NOT EXISTS `revive_points` ( + `id` int(11) unsigned NOT NULL AUTO_INCREMENT, + `location_name` varchar(64) COLLATE latin1_general_ci DEFAULT NULL, + `zone_id` int(10) unsigned NOT NULL DEFAULT '12', + `respawn_zone_id` int(10) unsigned NOT NULL DEFAULT '12', + `safe_x` float NOT NULL DEFAULT '0', + `safe_y` float NOT NULL DEFAULT '0', + `safe_z` float NOT NULL DEFAULT '0', + `heading` float NOT NULL DEFAULT '0', + PRIMARY KEY (`id`), + KEY `FK_respawn_points` (`respawn_zone_id`), + KEY `FK_revive_zone` (`zone_id`), + CONSTRAINT `FK_respawn_points` FOREIGN KEY (`respawn_zone_id`) REFERENCES `zones` (`id`) ON DELETE CASCADE ON UPDATE CASCADE, + CONSTRAINT `FK_revive_zone` FOREIGN KEY (`zone_id`) REFERENCES `zones` (`id`) ON DELETE CASCADE ON UPDATE CASCADE +) ENGINE=InnoDB AUTO_INCREMENT=155 DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci CHECKSUM=1 DELAY_KEY_WRITE=1 ROW_FORMAT=DYNAMIC; +INSERT INTO `table_versions` (`name`,`version`,`download_version`) values ('revive_points',1,0); +DROP TABLE IF EXISTS `ruleset_details`; +CREATE TABLE IF NOT EXISTS `ruleset_details` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `ruleset_id` int(10) unsigned NOT NULL DEFAULT '1', + `rule_category` varchar(64) CHARACTER SET latin1 COLLATE latin1_general_ci NOT NULL DEFAULT '', + `rule_type` varchar(64) CHARACTER SET latin1 COLLATE latin1_general_ci NOT NULL DEFAULT '', + `rule_value` varchar(64) CHARACTER SET latin1 COLLATE latin1_general_ci NOT NULL DEFAULT '', + `description` varchar(256) CHARACTER SET latin1 COLLATE latin1_general_ci DEFAULT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `RuleCatTypeIDX` (`ruleset_id`,`rule_category`,`rule_type`) +) ENGINE=InnoDB AUTO_INCREMENT=86 DEFAULT CHARSET=latin1; +INSERT INTO `ruleset_details` (`id`, `ruleset_id`, `rule_category`, `rule_type`, `rule_value`, `description`) VALUES + (1, 1, 'R_Client', 'ShowWelcomeScreen', '0', '1 = show welcome screen, 0 = do not show welcome screen'), + (2, 1, 'R_Guild', 'MaxLevel', '50', 'Maximum guild level allowed on this server (0 = no cap)'), + (3, 1, 'R_Guild', 'MaxPlayers', '-1', 'Max number of players per guild, -1 is no max'), + (4, 1, 'R_Player', 'MaxLevel', '50', 'Maximum player level allowed on this server (0 = no cap)'), + (5, 1, 'R_Player', 'MaxLevelOverrideStatus', '100', 'admin_status value which can override the level_cap (GMs and Admins)'), + (6, 1, 'R_Player', 'VitalityAmount', '.5', 'Amount of vitality given to players each vitalityfrequency'), + (7, 1, 'R_Player', 'VitalityFrequency', '3600', 'Time in seconds that vitality is increased'), + (8, 1, 'R_Player', 'XPMultiplier', '1.0', 'XP Rate, set to 2 to double xp gain, .5 to half it, etc'), + (9, 1, 'R_Player', 'TSXPMultiplier', '1.0', 'Tradeskill XP Rate, set to 2 to double xp gain, .5 to half it, etc'), + (10, 1, 'R_UI', 'MaxWhoResults', '20', 'Maximum number of players to show up in /who commands'), + (11, 1, 'R_UI', 'MaxWhoOverrideStatus', '200', 'Admin status to override the cap and display all results'), + (12, 1, 'R_World', 'GamblingTokenItemID', '2', 'items.id value of token used in gambling casino'), + (13, 1, 'R_World', 'GuildAutoJoin', '1', '1 = new players are automatically joined to the global world guild'), + (14, 1, 'R_World', 'GuildAutoJoinID', '3', 'Guild ID of the global world server'), + (15, 1, 'R_World', 'GuildAutoJoinDefaultRankID', '4', 'Guild Rank to set new members to in auto-join server guild'), + (16, 1, 'R_World', 'MaxPlayers', '-1', 'Max number of players, -1 is no max'), + (17, 1, 'R_World', 'MaxPlayersOverrideStatus', '100', 'Admin Status to override a full server'), + (18, 1, 'R_World', 'ServerLocked', '0', '1 = World is locked, 0 = World is unlocked'), + (19, 1, 'R_World', 'ServerLockedOverrideStatus', '10', 'Status required to login to server if it is locked.'), + (20, 1, 'R_World', 'SyncZonesWithLogin', '1', 'Sync custom zones data with LoginServer'), + (21, 1, 'R_World', 'SyncEquipWithLogin', '1', 'Sync character equip appearances with LoginServer'), + (22, 1, 'R_World', 'UseBannedIPsTable', '0', 'Enable checking banned IPs table'), + (23, 1, 'R_Zone', 'MinZoneLevelOverrideStatus', '1', 'This variable is used to override all min_level set on a zone if it is larger than 0'), + (24, 1, 'R_Zone', 'MinZoneAccessOverrideStatus', '100', 'This variable is used to override all min_status zones that are set negative to this default admin_status'), + (25, 1, 'R_Zone', 'MaxPlayers', '100', 'Max number of players in a zone before a second instance is created'), + (26, 1, 'R_Spawn', 'SpeedMultiplier', '300', 'Multiplier used to calculate spawn movementloop speed'), + (27, 1, 'R_Spawn', 'SpeedRatio', '0', 'Additional ratio to use in calculating spawn movementloop speed'), + (28, 1, 'R_World', 'EnablePOIDiscovery', '0', 'Players can discover areas in the world.'), + (32, 1, 'R_World', 'DefaultStartingZoneID', '253', 'On character creation, if all other starting_zone checks fail, default player to this zone_id'), + (33, 1, 'R_Faction', 'AllowFactionBasedCombat', '1', 'Allows NPCs to battle one another based on friendly/hostile faction alliance settings.'), + (34, 1, 'R_World', 'LinkDeadTimer', '120000', 'How long to wait for a linkdead player to return (default: 2 minutes in milliseconds)'), + (35, 1, 'R_World', 'RemoveDisconnectedClientsTimer', '100', 'Timer for removing clients that logged off (default: 100 milliseconds)'), + (36, 1, 'R_World', 'PlayerCampTimer', '20', 'Camp timer for general players (default: 20 seconds)'), + (37, 1, 'R_World', 'GMCampTimer', '1', 'Camp timer for GM players (default: 1 second)'), + (38, 1, 'R_World', 'AutoAdminStatusValue', '10', 'Default admin_status for new players (If AutoAdminPlayers rule = true)'), + (39, 1, 'R_World', 'AutoAdminPlayers', '0', 'New characters created get default GM status (default: 0, false)'), + (40, 1, 'R_World', 'AutoAdminGMs', '1', 'New characters created by GMs are given their highest admin_status (default: 0, false)'), + (41, 1, 'R_PVP', 'AllowPVP', '0', '1 = PvP, 0 = PvE'), + (42, 1, 'R_Zone', 'WeatherEnabled', '1', '0 = disabled, 1 = enabled/normal, 2 = enabled/random'), + (43, 1, 'R_Zone', 'WeatherTimer', '60000', 'How often the zone checks for weather changes (in milliseconds)'), + (44, 1, 'R_Zone', 'WeatherChangeFrequency', '300', 'How often the weather changes in a zone (in seconds)'), + (45, 1, 'R_Zone', 'WeatherChangeChance', '20', 'Chance of a weather change'), + (46, 1, 'R_Zone', 'MinWeatherSeverity', '0.0', 'Minimum weather pattern in the zone'), + (47, 1, 'R_Zone', 'MaxWeatherSeverity', '1.0', 'Maximum weather pattern in the zone'), + (48, 1, 'R_Zone', 'WeatherChangePerInterval', '0.02', 'How much the weather changes each interval'), + (49, 1, 'R_Zone', 'WeatherType', '0', '0 = normal, 1 = dynamic, 2 = random, 3 = chaotic'), + (50, 1, 'R_Zone', 'WeatherDynamicMaxOffset', '0.08', 'default: 0.08 - dynamic weather changes can only change this max amount'), + (51, 1, 'R_World', 'ThreadedLoad', '1', 'Enables startup to use threads'), + (52, 1, 'R_Player', 'MaxAA', '320', 'Max AA points to spend globally'), + (53, 1, 'R_Player', 'MaxClassAA', '100', 'Max AA points to spend in the Class AA Tab'), + (54, 1, 'R_Player', 'MaxSubclassAA', '100', 'Max AA points to spend in the SubClass AA Tab'), + (55, 1, 'R_Player', 'MaxShadowsAA', '70', 'Max AA points to spend in the Shadows AA Tab'), + (56, 1, 'R_Player', 'MaxHeroicAA', '50', 'Max AA points to spend in the Heroic AA Tab'), + (57, 1, 'R_Player', 'MaxTradeskillAA', '40', 'Max AA points to spend in the Tradeskill AA Tab'), + (58, 1, 'R_Player', 'MaxPrestigeAA', '25', 'Max AA points to spend in the Prestige AA Tab'), + (59, 1, 'R_Player', 'MaxTradeskillPrestigeAA', '25', 'Max AA points to spend in the Tradeskill Prestige AA Tab'), + (60, 1, 'R_Zone', 'SpawnUpdateTimer', '200', 'The interval in milliseconds to check for spawn updates sent to connected clients'), + (61, 1, 'R_World', 'TradeskillSuccessChance', '87.0', 'Chance of success while crafting'), + (62, 1, 'R_World', 'TradeskillCritSuccessChance', '2.0', 'Chance of critical success while crafting'), + (63, 1, 'R_World', 'TradeskillFailChance', '10.0', 'Chance of failure while crafting'), + (64, 1, 'R_World', 'TradeskillCritFailChance', '1.0', 'Chance of a critical failure while crafting'), + (65, 1, 'R_World', 'TradeskillEventChance', '15.0', 'Chance of a trade skill event'), + (66, 1, 'R_World', 'EditorURL', 'www.eq2emulator.net', 'URL to open when the /editor command is used'), + (67, 1, 'R_World', 'EditorIncludeID', '0', 'Insert the spawn ID into the url'), + (68, 1, 'R_World', 'EditorOfficialServer', '0', 'Insert the zone ID, spawn type, and spawn ID into the url'), + (69, 1, 'R_Client', 'GroupSpellsTimer', '1000', 'The interval in milliseconds to reapply group buffs'), + (70, 1, 'R_World', 'IRCEnabled', '0', 'Allow player to make private IRC connections'), + (71, 1, 'R_World', 'IRCAddress', 'irc.eq2emulator.net', 'IRC server to auto connect to'), + (72, 1, 'R_World', 'IRCPort', '6667', 'Port to use when auto connecting to IRC'), + (73, 1, 'R_World', 'IRCChan', '#EQ2Emu', 'Channel to join when auto connecting to IRC'), + (74, 1, 'R_World', 'IRCGlobalEnabled', '1', 'Enable a global IRC server'), + (75, 1, 'R_Player', 'MaxLastNameLength', '20', 'Maximum length of a player\'s last name'), + (76, 1, 'R_Player', 'MinLastNameLength', '4', 'Minimum length of a player\'s last name'), + (77, 1, 'R_Player', 'MinLastNameLevel', '20', 'Minimum level a player can set their last name at'), + (78, 1, 'R_Zone', 'CheckAttackNPC', '2000', 'How often to check for NPCs to attack eachother in milliseconds'), + (79, 1, 'R_Zone', 'CheckAttackPlayer', '2000', 'How often to check for NPCs to attack players in milliseconds'), + (80, 1, 'R_Zone', 'HOTime', '10.0', 'Time to complete an HO wheel before it expires'), + (81, 1, 'R_Zone', 'SpawnDeleteTimer', '30000', 'how long a spawn pointer is held onto after being removed from the world before deleting it'), + (82, 1, 'R_World', 'SavePaperdollImage', '1', 'Allow the server to store the paperdoll image in the database, 1 = true 0 = false'), + (83, 1, 'R_World', 'SaveHeadshotImage', '1', 'Allow the server to store the head shot image in the database, 1 = true 0 = false'), + (84, 1, 'R_World', 'SendPaperdollImagesToLogin', '1', 'Set to 0 to stop the head shot from being sent to the login server'), + (85, 1, 'R_World', 'TreasureChestDisabled', '0', 'Disable treasure chest drops for loot, default is false'); +UPDATE `ruleset_details` SET `rule_value`='0' WHERE `rule_type`='IRCGlobalEnabled'; +INSERT INTO `table_versions` (`name`,`version`,`download_version`) values ('ruleset_details',1,0); +UPDATE `table_versions` SET `download_version`=2 WHERE `name`='ruleset_details'; +DROP TABLE IF EXISTS `rulesets`; +CREATE TABLE IF NOT EXISTS `rulesets` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `ruleset_id` int(10) unsigned NOT NULL, + `ruleset_name` varchar(64) CHARACTER SET latin1 COLLATE latin1_general_ci NOT NULL DEFAULT 'default_ruleset', + `ruleset_active` tinyint(1) unsigned NOT NULL DEFAULT '1', + PRIMARY KEY (`id`), + UNIQUE KEY `RuleNameIDX` (`ruleset_name`), + KEY `RulesIDX` (`ruleset_id`) +) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=latin1; +INSERT INTO `rulesets` (`id`, `ruleset_id`, `ruleset_name`, `ruleset_active`) VALUES + (1, 1, 'default_ruleset', 1); +INSERT INTO `table_versions` (`name`,`version`,`download_version`) values ('rulesets',1,0); +UPDATE `table_versions` SET `download_version`=1 WHERE `name`='rulesets'; +DROP TABLE IF EXISTS `skills`; +CREATE TABLE IF NOT EXISTS `skills` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `short_name` varchar(32) COLLATE latin1_general_ci NOT NULL DEFAULT 'unknown', + `name` varchar(255) COLLATE latin1_general_ci NOT NULL DEFAULT 'unknown', + `description` varchar(255) COLLATE latin1_general_ci NOT NULL DEFAULT 'unknown', + `skill_type` int(10) unsigned NOT NULL DEFAULT '0', + `display` tinyint(3) unsigned NOT NULL DEFAULT '0', + PRIMARY KEY (`id`) +) ENGINE=InnoDB AUTO_INCREMENT=4253456354 DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci; +INSERT INTO `skills` (`id`, `short_name`, `name`, `description`, `skill_type`, `display`) VALUES + (1, 'halasian', 'Halasian', 'language', 13, 1), + (2, 'thexian', 'Thexian', 'language', 13, 1), + (3, 'dwarven', 'Dwarven', 'language', 13, 1), + (4, 'erudian', 'Erudian', 'language', 13, 1), + (5, 'guktan', 'Guktan', 'language', 13, 1), + (6, 'gnomish', 'Gnomish', 'language', 13, 1), + (7, 'ayr\'dal', 'Ayr\'Dal', 'language', 13, 1), + (8, 'stout', 'Stout', 'language', 13, 1), + (9, 'koada\'dal', 'Koada\'Dal', 'language', 13, 1), + (10, 'lucanic', 'Lucanic', 'language', 13, 1), + (11, 'antonican', 'Antonican', 'language', 13, 1), + (12, 'sebilisian', 'Sebilisian', 'language', 13, 1), + (13, 'kerran', 'Kerran', 'language', 13, 1), + (14, 'oggish', 'Oggish', 'language', 13, 1), + (15, 'ykeshan', 'Ykeshan', 'language', 13, 1), + (16, 'feir\'dal', 'Feir\'Dal', 'language', 13, 1), + (17, 'orcish', 'Orcish', 'language', 13, 1), + (18, 'gnollish', 'Gnollish', 'language', 13, 1), + (19, 'draconic', 'Draconic', 'language', 13, 1), + (20, 'goblish', 'Goblish', 'language', 13, 1), + (21, 'thulian', 'Thulian', 'language', 13, 1), + (22, 'wordsofshade', 'Words of Shade', 'language', 13, 1), + (23, 'fayefolk', 'Fayfolk', 'language', 13, 1), + (24, 'chaostongue', 'Chaos Tongue', 'language', 13, 1), + (25, 'krombral', 'Krombral', 'language', 13, 1), + (26, 'ratongan', 'Ratongan', 'language', 13, 1), + (27, 'druzaic', 'Druzaic', 'language', 13, 1), + (28, 'uruvanian', 'Uruvanian', 'language', 13, 1), + (29, 'death\'swhisper', 'Death\'s Whisper', 'language', 13, 1), + (30, 'screechsong', 'Screechsong', 'language', 13, 1), + (31, 'volant', 'Volant', 'language', 13, 1), + (32, 'argot', 'Argot', 'language', 13, 1), + (33, 'serilian', 'Serilian', 'language', 13, 1), + (34, 'tiktok', 'Tik-Tok', 'language', 13, 1), + (35, 'faerlie', 'Faerlie', 'language', 13, 1), + (36, 'gorwish', 'Gorwish', 'language', 13, 1), + (37, 'sathirian', 'Sathirian', 'language', 13, 1), + (38, 'di\'zokian', 'Di\'Zokian', 'language', 13, 1), + (39, 'froak', 'Froak', 'language', 13, 1), + (40, 'shisik', 'Shisik', 'language', 13, 1), + (41, 'sul\'dal', 'Sul\'Dal', 'language', 13, 1), + (51, 'packetdecipher', 'Packet Deciphering', 'This is a test EQ2Emulator Skill :)', 13, 1), + (52, 'eq2hack', 'EQ2 Hacking', 'EQ2Emulator 4tw :)', 13, 1), + (90523872, 'determinedfaith', 'Paladin', 'This allows you to use paladin spells.', 0, 0), + (193411854, 'noctivagance', 'Warlock', 'This allows you to use warlock spells.', 0, 0), + (241174330, 'heavyarmor', 'Plate Armor', 'This allows you to wear plate and vanguard armor.', 0, 0), + (287643040, 'enchantments', 'Enchanter', 'This allows you to use enchanter spells.', 0, 0), + (296246391, 'ballads', 'Troubador', 'This allows you to use troubador spells.', 0, 0), + (340921594, 'dirges', 'Dirge', 'This allows you to use dirge spells.', 0, 0), + (366253016, 'ministration', 'Ministration', 'This is how well you use spells that heal and cure.', 2, 1), + (418532101, 'slashing', 'Slashing', 'This is how well you use all types of swords and axes.', 1, 1), + (540022425, 'parry', 'Parry', 'This gives you a chance to ward off a physical attack.', 3, 1), + (545043066, 'symbols', 'Symbols', 'This allows you to use a magical symbol as a shield.', 0, 0), + (554333641, 'hammer', 'Hammer', 'This allows you to use one-handed hammers in battle.', 17, 0), + (570458645, 'towershield', 'Tower Shield', 'This allows you to use very large shields.', 0, 0), + (574366497, 'apothecary', 'Apothecary', 'This allows you to refine items into oil, resin, temper, loam, and wash. It also allows you to work these refines into other components.', 18, 0), + (609880714, 'defense', 'Defense', 'This is how well you avoid physical attacks.', 3, 1), + (613995491, 'disruption', 'Disruption', 'This reduces your target\'s resistance to your Disruption spells.', 2, 1), + (641561514, 'rapier', 'Rapier', 'The allows you to use rapiers in battle.', 0, 0), + (688591146, 'foresting', 'Foresting', 'This is how well you find and harvest different kinds of lumber.', 6, 1), + (723762198, 'aggression', 'Aggression', 'This is how well your taunts will affect monsters.', 1, 1), + (770311065, 'mace', 'Mace', 'This allows you to wield Mace and Mace-like weapons.', 17, 0), + (773137566, 'scribing', 'Scribing', 'This is how well you create spells and copy books.', 10, 1), + (882983852, 'subjugation', 'Subjugation', 'This is how well you use spells to command pets and control monsters.', 2, 1), + (887279616, 'dagger', 'Dagger', 'This allows you to use daggers in battle.', 0, 0), + (931275816, 'adorning', 'Adorning', 'This allows you to create adornments from the component essences created by deconstructing regular items.', 0, 0), + (935416212, 'culinary', 'Culinary', 'This allows you to prepare foods.', 18, 0), + (1038997614, 'tinkering', 'Tinkering', 'This allows you to make Gadgets, Gizmos, and Doohickeys', 0, 1), + (1039865549, 'sculpting', 'Sculpting', 'Tradeskill technique used by carpenters and craftsman', 8, 1), + (1040683335, 'naturesrefuge', 'Warden', 'This allows you to use warden spells.', 0, 0), + (1048513601, 'gathering', 'Gathering', 'This is how well you gather herbs, flowers, and other small plants.', 6, 1), + (1124719197, 'tactics', 'Warrior', 'This allows you to use warrior combat arts.', 0, 0), + (1151456682, 'heavyarmoring', 'Heavy Armoring', 'Tradeskill knowledge used by outfitters and armorers', 18, 0), + (1209716810, 'protection', 'Guardian', 'This allows you to use guardian combat arts.', 0, 0), + (1223501307, 'beasttaming', 'Beastlord', 'This allows you to use Beastlord abilities.', 0, 0), + (1311635100, 'melodies', 'Bard', 'This allows you to use bard spells.', 0, 0), + (1386343008, 'geocraft', 'Geocraft', 'Technique used by geomancers.', 7, 0), + (1400160844, 'archery', 'Ranger', 'This allows you to use ranger combat arts.', 0, 0), + (1408356869, 'martial', 'Fighter', 'This allows you to use fighter combat arts.', 15, 0), + (1433335062, 'berserk', 'Berserker', 'This allows you to use berserker arts.', 0, 0), + (1468243427, 'tracking', 'Tracking', 'This is how well you find monsters or creatures within a zone.', 0, 1), + (1478114179, 'woodcraft', 'Woodcraft', 'Technique used by timbercrafters.', 7, 0), + (1514256692, 'skullduggery', 'Rogue', 'This allows you to use rogue combat arts.', 0, 0), + (1519965519, 'banditry', 'Brigand', 'This allows you to use brigand combat arts.', 0, 0), + (1553857724, 'investigating', 'Investigation', 'Your ability to investigate various objects and discern any clues they might possess.', 0, 0), + (1616998748, 'spear', 'Spear', 'This allows you to use spears in battle.', 0, 0), + (1624274802, 'naturesreckoning', 'Fury', 'This allows you to use fury spells.', 0, 0), + (1653482350, 'greathammer', 'Great Hammer', 'The allows you to use two-handed hammers in battle.', 17, 0), + (1677747280, 'woodworking', 'Woodworking', 'This is how well you create items made of wood.', 18, 0), + (1696217328, 'sword', 'Sword', 'This allows you to use one-handed swords in battle.', 0, 0), + (1703539708, 'timbercraft', 'Timbercraft', 'This allows you to refine items into lumber and paper. It also allows you to work these refines into other components.', 18, 0), + (1743366740, 'bow', 'Bow', 'This allows you to use short and long bows in battle.', 0, 0), + (1756482397, 'ranged', 'Ranged', 'This is how well you use bows and thrown weapons.', 1, 1), + (1829443087, 'interrogations', 'Inquisitor', 'This allows you to use inquisitor spells.', 0, 0), + (1852383242, 'dualwield', 'Dual Wield', 'This skill allows you to wield dual wield style weapons in your secondary slot.', 1, 0), + (1921433074, 'reconnaissance', 'Scout', 'This allows you to use scout combat arts.', 0, 0), + (1970131346, 'transmuting', 'Transmuting', 'This allows you to break down items into components.', 0, 1), + (2011726342, 'tranquility', 'Monk', 'This allows you to use monk combat arts.', 15, 0), + (2037831821, 'swimming', 'Swimming', 'This is how well you swim in water.', 12, 1), + (2042842194, 'conjurations', 'Conjuror', 'This allows you to use conjuror spells.', 0, 0), + (2072844078, 'magicaffinity', 'Magic Affinity', 'Skill used to wield generic magical items.', 12, 0), + (2074345482, 'channeling', 'Channeling', 'This allows you to use channeler spells.', 0, 0), + (2082133324, 'tailoring', 'Tailoring', 'This is how well you create items made of cloth.', 9, 1), + (2120065377, 'legerdemain', 'Summoner', 'This allows you to use summoner spells.', 0, 0), + (2200201799, 'disarmtrap', 'Disarm Trap', 'This is how well you disarm the dangerous effects of a trap.', 0, 1), + (2246237129, 'mediumarmor', 'Chain Armor', 'This allows you to wear chain and brigadine armor.', 0, 0), + (2292577688, 'greatsword', 'Great Sword', 'This allows you to use two-handed swords in battle.', 0, 0), + (2319450178, 'fishing', 'Fishing', 'This is how well you catch fish.', 6, 1), + (2380184628, 'greatspear', 'Great Spear', 'This allows you to use large polearms in battle.', 0, 0), + (2383540775, 'spellavoidance', 'Spell Avoidance', 'This is how well you avoid magical attacks.', 0, 0), + (2398950520, 'sortilege', 'Summoner', 'Knowledge used in the casting of Summoner spells.', 0, 0), + (2459659856, 'sanction', 'Dummy', 'Dummy Skill used for combat arts, no one really gets it. It\'s referred to by combat arts which as a success skill. Since combat arts ignore success skills this is OK, but not really that straightforward we might want to remove references to it from thos', 0, 0), + (2463145248, 'inspirations', 'Priest', 'This allows you to use priest spells.', 0, 0), + (2463992638, 'runecraft', 'Runecraft', 'This allows you to make magical augmentations that can be placed in many different items.', 18, 0), + (2476073427, 'axe', 'Axe', 'This allows you to use one-handed axes in battle.', 0, 0), + (2530063117, 'weaving', 'Weaving', 'This allows you to refine items into leather, thread, and yarn. It also allows you to work these refines into other components.', 18, 0), + (2533124061, 'sorcery', 'Sorcery', 'Knowledge used to cast Sorcery spells.', 0, 0), + (2557647574, 'chemistry', 'Chemistry', 'This is how well you create trade skill items by using chemistry.', 10, 1), + (2572463168, 'mounted_flight', 'Mounted Flight', 'This difficulty of mounted flight requires this skill.', 0, 0), + (2581053277, 'regimens', 'Templar', 'This allows you to use templar spells.', 0, 0), + (2591116872, 'thaumaturgy', 'Thaumaturgy', 'Technique used by apothecaries.', 7, 0), + (2608320658, 'kiteshield', 'Kite Shield', 'This allows you to use large shields.', 0, 0), + (2638198038, 'focus', 'Focus', 'This is how well you maintain your concentration in battle. This will help you cast spells or perform combat arts while under attack.', 1, 1), + (2639209773, 'craftsmanship', 'Craftsmanship', 'This is a knowledge used by craftman and carpenters for tradeskills.', 18, 0), + (2650425026, 'thrownweapon', 'Thrown Weapon', 'This allows you to use thrown weapons in battle.', 17, 0), + (2662430630, 'elementalmastery', 'Wizard', 'This allows you to use wizard spells.', 0, 0), + (2663054519, 'swashbuckling', 'Swashbuckler', 'This allows you to use swashbuckler combat arts.', 0, 0), + (2710531826, 'lightarmoring', 'Light Armoring', 'Tradeskill knowledge used by outfitters and weaponsmiths', 18, 0), + (2711101135, 'assassination', 'Assassin', 'This allows you to use assassin combat arts.', 0, 0), + (2741805322, 'determinedzeal', 'Shadowknight', 'This allows you to use shadowknight spells.', 0, 0), + (2812765109, 'geomancy', 'Geomancy', 'This allows you to refine items into gems, metal bars, and precious metal bars. It also allows you to work these refines into other components.', 18, 0), + (2817699641, 'alchemy', 'Alchemy', 'This allows you to make potions and poisons.', 18, 0), + (2894715199, 'sepultures', 'Necromancer', 'This allows you to use necromancer spells.', 0, 0), + (2896808154, 'binding', 'Binding', 'Technique used by weavers.', 7, 0), + (2897193374, 'lightarmor', 'Leather Armor', 'This allows you to wear woven and leather armor.', 4, 0), + (2898101972, 'hallucinations', 'Illusionist', 'This allows you to use illusionist spells.', 0, 0), + (2949308177, 'arcana', 'Arcana', 'This allows you to make spells and books.', 18, 0), + (2950599749, 'protean', 'Coercer', 'This allows you to use coercer spells.', 0, 0), + (2954459351, 'greataxe', 'Great Axe', 'This allows you to use two-handed axes in battle.', 0, 0), + (3048574950, 'piercing', 'Piercing', 'This is how well you use daggers and spears.', 1, 1), + (3067436248, 'physicality', 'Bruiser', 'This allows you to use bruiser combat arts.', 0, 0), + (3076004370, 'fletching', 'Fletching', 'Used by tradesman to create arrows, shields, staves etc', 8, 1), + (3108933728, 'metalshaping', 'Metal Shaping', 'Tradeskill Technique used by outfitters and Armorers', 9, 1), + (3145299162, 'animistal', 'Animist', 'This allows you to use Animist abilities.', 0, 0), + (3167106577, 'stalking', 'Predator', 'This allows you to use predator combat arts.', 0, 0), + (3173504370, 'roundshield', 'Round Shield', 'This allows you to use medium shields.', 0, 0), + (3177806075, 'fists', 'Fists', 'This allows you to use your fists in battle.', 1, 1), + (3180399725, 'staff', 'Staff', 'This allows you to use two-handed staves in battle.', 17, 0), + (3191839982, 'vehemence', 'Defiler', 'This allows you to use defiler spells.', 0, 0), + (3232294366, 'safefall', 'Safe Fall', 'This is how well you reduce damage taken in a fall.', 12, 1), + (3282420779, 'archegenesis', 'Druid', 'This allows you to use druid spells.', 0, 0), + (3330500131, 'artificing', 'Artificing', 'This is how well you create magic items by using trade skills.', 10, 1), + (3341842907, 'theurgy', 'Cleric', 'This allows you to use cleric spells.', 0, 0), + (3343700951, 'talismans', 'Shaman', 'This allows you to cast Shaman spells', 0, 0), + (3395302654, 'weaponry', 'Weaponry', 'This allows you to craft weapons.', 18, 0), + (3421494576, 'crushing', 'Crushing', 'This is how well you use hammers, maces, staves, and even your own fists.', 1, 1), + (3429135390, 'destroying', 'Mystical Destruction', 'This governs your ability to destroy mystical objects.', 12, 0), + (3467160477, 'fetichisms', 'Mystic', 'This allows you to use mystic spells.', 0, 0), + (3539032716, 'verylightarmor', 'Cloth Armor', 'This allows you to wear robes and other light armors.', 4, 0), + (3548414643, 'DONOTUSE', 'DONOTUSE', '', 0, 0), + (3587918036, 'ordination', 'Ordination', 'This is how well you use spells that augment your friends and weaken your enemies.', 2, 1), + (3659699625, 'mining', 'Mining', 'This is how well you mine for ore and minerals.', 6, 1), + (3694382619, 'poisoning', 'Poisoning', 'Scout ability to apply and use poisons.', 0, 1), + (3729226181, 'warcries', 'Warcries', 'NOT USED', 0, 0), + (3809066846, 'faith', 'Crusader', 'This allows you to use crusader spells.', 0, 0), + (3820670534, 'evocations', 'Mage', 'This allows you to use mage spells.', 0, 0), + (3850377186, 'deflection', 'Deflection', 'This gives you a chance to avert a physical attack.', 3, 1), + (3856706740, 'brawling', 'Brawler', 'This allows you to use brawler combat arts.', 15, 0), + (3881305672, 'artistry', 'Artistry', 'Technique used by Craftsman and Provisioners', 8, 1), + (4008363914, 'picklock', 'Pick Lock', 'This is how well you pick a lock.', 13, 0), + (4032608519, 'metalworking', 'Metalworking', 'This is how well you create items made of metal.', 9, 1), + (4037812502, 'buckler', 'Buckler', 'This allows you to use very small shields.', 0, 0), + (4158365743, 'trapping', 'Trapping', 'This is how well you catch small game animals.', 6, 1), + (4250045746, 'alcoholtolerance', 'Alcohol Tolerance', 'This is how well you tolerate the effects of alcohol.', 12, 1), + (4253456353, 'skin', 'Skin', 'Generic skill in wielding natural items.', 15, 0); +INSERT INTO `table_versions` (`name`,`version`,`download_version`) values ('skills',1,0); +UPDATE `table_versions` SET `download_version`=1 WHERE `name`='skills'; +DROP TABLE IF EXISTS `spawn`; +CREATE TABLE IF NOT EXISTS `spawn` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `name` varchar(64) COLLATE latin1_general_ci DEFAULT NULL, + `sub_title` varchar(250) COLLATE latin1_general_ci DEFAULT NULL, + `prefix` varchar(128) COLLATE latin1_general_ci NOT NULL DEFAULT '', + `suffix` varchar(128) COLLATE latin1_general_ci NOT NULL DEFAULT '', + `last_name` varchar(64) COLLATE latin1_general_ci NOT NULL DEFAULT '', + `race` tinyint(3) unsigned NOT NULL DEFAULT '0', + `model_type` mediumint(8) unsigned NOT NULL DEFAULT '0', + `size` smallint(5) unsigned NOT NULL DEFAULT '32', + `size_offset` tinyint(3) NOT NULL DEFAULT '0', + `targetable` tinyint(3) unsigned NOT NULL DEFAULT '0', + `show_name` tinyint(3) unsigned NOT NULL DEFAULT '0', + `command_primary` int(10) unsigned NOT NULL DEFAULT '0', + `command_secondary` int(10) unsigned NOT NULL DEFAULT '0', + `visual_state` int(10) unsigned NOT NULL DEFAULT '0', + `attackable` tinyint(3) unsigned NOT NULL DEFAULT '0', + `show_level` tinyint(3) unsigned NOT NULL DEFAULT '0', + `show_command_icon` tinyint(3) unsigned NOT NULL DEFAULT '0', + `display_hand_icon` tinyint(3) unsigned NOT NULL DEFAULT '0', + `faction_id` int(10) unsigned NOT NULL DEFAULT '0', + `collision_radius` smallint(5) unsigned NOT NULL DEFAULT '0', + `hp` int(10) unsigned NOT NULL DEFAULT '0', + `power` int(10) unsigned NOT NULL DEFAULT '0', + `savagery` int(10) unsigned NOT NULL DEFAULT '0', + `dissonance` int(10) unsigned NOT NULL DEFAULT '0', + `merchant_id` int(10) unsigned NOT NULL DEFAULT '0', + `transport_id` int(10) unsigned NOT NULL DEFAULT '0', + `merchant_type` tinyint(3) unsigned NOT NULL DEFAULT '0', + `processed` tinyint(1) unsigned NOT NULL DEFAULT '0', + PRIMARY KEY (`id`), + KEY `SpawnIDX` (`name`), + KEY `SpawnCmdIDX` (`command_primary`,`command_secondary`), + KEY `SpawnMiscIDX` (`faction_id`,`merchant_id`,`transport_id`) +) ENGINE=InnoDB AUTO_INCREMENT=7720001 DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci; +INSERT INTO `table_versions` (`name`,`version`,`download_version`) values ('spawn',1,0); +DROP TABLE IF EXISTS `spawn_ground`; +CREATE TABLE IF NOT EXISTS `spawn_ground` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `spawn_id` int(10) unsigned NOT NULL DEFAULT '0', + `number_harvests` tinyint(3) unsigned NOT NULL DEFAULT '3', + `num_attempts_per_harvest` tinyint(3) unsigned NOT NULL DEFAULT '1', + `groundspawn_id` int(10) unsigned NOT NULL DEFAULT '0', + `collection_skill` enum('Unused','Mining','Gathering','Fishing','Trapping','Foresting','Collecting') COLLATE latin1_general_ci NOT NULL DEFAULT 'Unused', + PRIMARY KEY (`id`), + UNIQUE KEY `SpawnIdx` (`spawn_id`), + KEY `GroundIDX` (`groundspawn_id`), + CONSTRAINT `FK_groundspawn` FOREIGN KEY (`spawn_id`) REFERENCES `spawn` (`id`) ON DELETE CASCADE ON UPDATE CASCADE +) ENGINE=InnoDB AUTO_INCREMENT=1122 DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci; +INSERT INTO `table_versions` (`name`,`version`,`download_version`) values ('spawn_ground',1,0); +DROP TABLE IF EXISTS `spawn_location_entry`; +CREATE TABLE IF NOT EXISTS `spawn_location_entry` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `spawn_id` int(10) unsigned NOT NULL DEFAULT '0', + `spawn_location_id` int(10) unsigned NOT NULL DEFAULT '0', + `spawnpercentage` float NOT NULL DEFAULT '0', + PRIMARY KEY (`id`), + KEY `SpawnLocationIDX` (`spawn_location_id`), + KEY `SpawnIDX` (`spawn_id`), + CONSTRAINT `FK_spawn_entry1` FOREIGN KEY (`spawn_location_id`) REFERENCES `spawn_location_name` (`id`) ON DELETE CASCADE ON UPDATE CASCADE, + CONSTRAINT `FK_spawn_entry2` FOREIGN KEY (`spawn_id`) REFERENCES `spawn` (`id`) ON DELETE CASCADE ON UPDATE CASCADE +) ENGINE=InnoDB AUTO_INCREMENT=1589824 DEFAULT CHARSET=latin1 ROW_FORMAT=DYNAMIC; +ALTER TABLE `spawn_location_entry` + ADD COLUMN `condition` TINYINT(3) UNSIGNED NOT NULL DEFAULT '0' AFTER `spawnpercentage`; +INSERT INTO `table_versions` (`name`,`version`,`download_version`) values ('spawn_location_entry',73028,0); +DROP TABLE IF EXISTS `spawn_location_group`; +CREATE TABLE IF NOT EXISTS `spawn_location_group` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `group_id` int(10) unsigned NOT NULL DEFAULT '0', + `placement_id` int(10) unsigned NOT NULL DEFAULT '0', + `name` varchar(200) COLLATE latin1_general_ci NOT NULL DEFAULT '', + PRIMARY KEY (`id`), + UNIQUE KEY `GroupPlacementIDX` (`group_id`,`placement_id`), + KEY `FK_group_placement` (`placement_id`), + CONSTRAINT `FK_group_placement` FOREIGN KEY (`placement_id`) REFERENCES `spawn_location_placement` (`id`) ON DELETE CASCADE ON UPDATE CASCADE +) ENGINE=InnoDB AUTO_INCREMENT=83330 DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci; +INSERT INTO `table_versions` (`name`,`version`,`download_version`) values ('spawn_location_group',1,0); +DROP TABLE IF EXISTS `spawn_location_group_associations`; +CREATE TABLE IF NOT EXISTS `spawn_location_group_associations` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `group_id1` int(10) unsigned NOT NULL DEFAULT '0', + `group_id2` int(10) unsigned NOT NULL DEFAULT '0', + `type` enum('SPAWN_SEPARATELY') COLLATE latin1_general_ci NOT NULL DEFAULT 'SPAWN_SEPARATELY', + PRIMARY KEY (`id`), + UNIQUE KEY `GroupAssociationIDX` (`group_id1`,`group_id2`), + KEY `FK_group_association2` (`group_id2`), + CONSTRAINT `FK_group_association1` FOREIGN KEY (`group_id1`) REFERENCES `spawn_location_group` (`group_id`) ON DELETE CASCADE ON UPDATE CASCADE, + CONSTRAINT `FK_group_association2` FOREIGN KEY (`group_id2`) REFERENCES `spawn_location_group` (`group_id`) ON DELETE CASCADE ON UPDATE CASCADE +) ENGINE=InnoDB AUTO_INCREMENT=1242 DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci; +INSERT INTO `table_versions` (`name`,`version`,`download_version`) values ('spawn_location_group_associations',1,0); +DROP TABLE IF EXISTS `spawn_location_group_chances`; +CREATE TABLE IF NOT EXISTS `spawn_location_group_chances` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `group_id` int(10) unsigned NOT NULL DEFAULT '0', + `percentage` float unsigned NOT NULL DEFAULT '100', + PRIMARY KEY (`id`), + UNIQUE KEY `GroupLocationIDX` (`group_id`), + CONSTRAINT `FK_group_chances` FOREIGN KEY (`group_id`) REFERENCES `spawn_location_group` (`group_id`) ON DELETE CASCADE ON UPDATE CASCADE +) ENGINE=InnoDB AUTO_INCREMENT=17 DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci; +INSERT INTO `table_versions` (`name`,`version`,`download_version`) values ('spawn_location_group_chances',1,0); +DROP TABLE IF EXISTS `spawn_location_name`; +CREATE TABLE IF NOT EXISTS `spawn_location_name` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `name` varchar(200) COLLATE latin1_general_ci NOT NULL DEFAULT '', + PRIMARY KEY (`id`) +) ENGINE=InnoDB AUTO_INCREMENT=1584987 DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci; +INSERT INTO `table_versions` (`name`,`version`,`download_version`) values ('spawn_location_name',1,0); +DROP TABLE IF EXISTS `spawn_location_placement`; +CREATE TABLE IF NOT EXISTS `spawn_location_placement` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `zone_id` int(10) unsigned NOT NULL DEFAULT '0', + `spawn_location_id` int(10) unsigned NOT NULL DEFAULT '0', + `x` float NOT NULL DEFAULT '0', + `y` float NOT NULL DEFAULT '0', + `z` float NOT NULL DEFAULT '0', + `x_offset` float NOT NULL DEFAULT '0', + `y_offset` float NOT NULL DEFAULT '0', + `z_offset` float NOT NULL DEFAULT '0', + `heading` float NOT NULL DEFAULT '0', + `pitch` float NOT NULL DEFAULT '0', + `roll` float NOT NULL DEFAULT '0', + `respawn` int(10) unsigned NOT NULL DEFAULT '3600', + `expire_timer` int(10) unsigned NOT NULL DEFAULT '0', + `expire_offset` int(10) unsigned NOT NULL DEFAULT '0', + `grid_id` int(10) unsigned NOT NULL DEFAULT '0', + `processed` tinyint(1) unsigned NOT NULL DEFAULT '0', + PRIMARY KEY (`id`), + KEY `SpawnLocationIDX` (`spawn_location_id`), + KEY `ZoneIDX` (`zone_id`), + CONSTRAINT `FK_placement1` FOREIGN KEY (`spawn_location_id`) REFERENCES `spawn_location_name` (`id`) ON DELETE CASCADE ON UPDATE CASCADE, + CONSTRAINT `FK_placement2` FOREIGN KEY (`zone_id`) REFERENCES `zones` (`id`) ON DELETE CASCADE ON UPDATE CASCADE +) ENGINE=InnoDB AUTO_INCREMENT=1585007 DEFAULT CHARSET=latin1 ROW_FORMAT=DYNAMIC; +INSERT INTO `table_versions` (`name`,`version`,`download_version`) values ('spawn_location_placement',1,0); +DROP TABLE IF EXISTS `spawn_loot`; +CREATE TABLE IF NOT EXISTS `spawn_loot` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `spawn_id` int(10) unsigned NOT NULL DEFAULT '0', + `loottable_id` int(10) unsigned NOT NULL DEFAULT '0', + PRIMARY KEY (`id`), + KEY `NewIndex` (`loottable_id`,`spawn_id`), + KEY `FK_loot_spawn` (`spawn_id`), + CONSTRAINT `FK_loot_spawn` FOREIGN KEY (`spawn_id`) REFERENCES `spawn` (`id`) ON DELETE CASCADE ON UPDATE CASCADE, + CONSTRAINT `FK_spawnloot_loottable` FOREIGN KEY (`loottable_id`) REFERENCES `loottable` (`id`) ON DELETE CASCADE ON UPDATE CASCADE +) ENGINE=InnoDB DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci; +INSERT INTO `table_versions` (`name`,`version`,`download_version`) values ('spawn_loot',1,0); +DROP TABLE IF EXISTS `spawn_npc_equipment`; +CREATE TABLE IF NOT EXISTS `spawn_npc_equipment` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `equipment_list_id` int(10) unsigned NOT NULL DEFAULT '0', + `item_id` int(10) unsigned NOT NULL DEFAULT '0', + `description` varchar(64) COLLATE latin1_general_ci DEFAULT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `ListItemIDX` (`equipment_list_id`,`item_id`), + KEY `FK_spawn_npc_equipment` (`item_id`), + CONSTRAINT `FK_spawn_npc_equipment` FOREIGN KEY (`item_id`) REFERENCES `items` (`id`) ON DELETE CASCADE ON UPDATE CASCADE +) ENGINE=InnoDB DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci; +INSERT INTO `table_versions` (`name`,`version`,`download_version`) values ('spawn_npc_equipment',1,0); +DROP TABLE IF EXISTS `spawn_npc_skills`; +CREATE TABLE IF NOT EXISTS `spawn_npc_skills` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `skill_list_id` int(10) unsigned NOT NULL DEFAULT '0', + `skill_id` int(10) unsigned NOT NULL DEFAULT '0', + `starting_value` smallint(5) unsigned NOT NULL DEFAULT '25', + `description` varchar(64) COLLATE latin1_general_ci DEFAULT NULL, + PRIMARY KEY (`id`), + KEY `ListSkillIDX` (`skill_list_id`,`skill_id`), + KEY `FK_spawn_skills` (`skill_id`), + CONSTRAINT `FK_spawn_skills` FOREIGN KEY (`skill_id`) REFERENCES `skills` (`id`) ON DELETE CASCADE ON UPDATE CASCADE +) ENGINE=InnoDB DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci; +INSERT INTO `table_versions` (`name`,`version`,`download_version`) values ('spawn_npc_skills',1,0); +DROP TABLE IF EXISTS `spawn_npc_spells`; +CREATE TABLE IF NOT EXISTS `spawn_npc_spells` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `spell_list_id` int(10) unsigned NOT NULL DEFAULT '0', + `spell_id` int(10) unsigned NOT NULL DEFAULT '0', + `spell_tier` tinyint(3) unsigned NOT NULL DEFAULT '1', + `description` varchar(64) COLLATE latin1_general_ci DEFAULT NULL, + PRIMARY KEY (`id`), + KEY `ListSpellIDX` (`spell_list_id`,`spell_id`), + KEY `FK_spawn_npc_spells` (`spell_id`), + CONSTRAINT `FK_spawn_npc_spells` FOREIGN KEY (`spell_id`) REFERENCES `spells` (`id`) ON DELETE CASCADE ON UPDATE CASCADE +) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci; +INSERT INTO `table_versions` (`name`,`version`,`download_version`) values ('spawn_npc_spells',1,0); +DROP TABLE IF EXISTS `spawn_npcs`; +CREATE TABLE IF NOT EXISTS `spawn_npcs` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `spawn_id` int(10) unsigned NOT NULL DEFAULT '0', + `min_level` tinyint(3) unsigned NOT NULL DEFAULT '0', + `max_level` tinyint(3) unsigned NOT NULL DEFAULT '0', + `enc_level` tinyint(3) unsigned NOT NULL DEFAULT '0', + `class_` tinyint(3) unsigned NOT NULL DEFAULT '0', + `gender` tinyint(3) unsigned NOT NULL DEFAULT '0', + `min_group_size` tinyint(3) unsigned NOT NULL DEFAULT '0', + `max_group_size` tinyint(3) unsigned NOT NULL DEFAULT '0', + `hair_type_id` smallint(5) unsigned NOT NULL DEFAULT '0', + `facial_hair_type_id` smallint(5) unsigned NOT NULL DEFAULT '0', + `wing_type_id` smallint(5) unsigned NOT NULL DEFAULT '0', + `chest_type_id` smallint(5) unsigned NOT NULL DEFAULT '0', + `legs_type_id` smallint(5) unsigned NOT NULL DEFAULT '0', + `soga_hair_type_id` smallint(5) unsigned NOT NULL DEFAULT '0', + `soga_facial_hair_type_id` smallint(5) unsigned NOT NULL DEFAULT '0', + `soga_model_type` smallint(5) unsigned NOT NULL DEFAULT '0', + `hide_hood` tinyint(1) unsigned NOT NULL DEFAULT '0', + `heroic_flag` tinyint(3) unsigned NOT NULL DEFAULT '0', + `action_state` smallint(5) unsigned NOT NULL DEFAULT '0', + `mood_state` smallint(5) unsigned NOT NULL DEFAULT '0', + `emote_state` smallint(5) unsigned NOT NULL DEFAULT '0', + `initial_state` smallint(5) unsigned NOT NULL DEFAULT '0', + `activity_status` smallint(5) unsigned NOT NULL DEFAULT '0', + `attack_type` tinyint(3) unsigned NOT NULL DEFAULT '0', + `aggro_radius` float unsigned NOT NULL DEFAULT '10', + `ai_strategy` enum('BALANCED','OFFENSIVE','DEFENSIVE') COLLATE latin1_general_ci NOT NULL DEFAULT 'BALANCED', + `spell_list_id` int(10) unsigned NOT NULL DEFAULT '0', + `secondary_spell_list_id` int(10) unsigned NOT NULL DEFAULT '0', + `skill_list_id` int(10) unsigned NOT NULL DEFAULT '0', + `secondary_skill_list_id` int(10) unsigned NOT NULL DEFAULT '0', + `equipment_list_id` int(10) unsigned NOT NULL DEFAULT '0', + `str` smallint(5) NOT NULL DEFAULT '0', + `sta` smallint(5) NOT NULL DEFAULT '0', + `wis` smallint(5) NOT NULL DEFAULT '0', + `intel` smallint(5) NOT NULL DEFAULT '0', + `agi` smallint(5) NOT NULL DEFAULT '0', + `heat` smallint(5) NOT NULL DEFAULT '0', + `cold` smallint(5) NOT NULL DEFAULT '0', + `magic` smallint(5) NOT NULL DEFAULT '0', + `mental` smallint(5) NOT NULL DEFAULT '0', + `divine` smallint(5) NOT NULL DEFAULT '0', + `disease` smallint(5) NOT NULL DEFAULT '0', + `poison` smallint(5) NOT NULL DEFAULT '0', + `elemental` smallint(5) unsigned NOT NULL DEFAULT '0', + `arcane` smallint(5) unsigned NOT NULL DEFAULT '0', + `noxious` smallint(5) unsigned NOT NULL DEFAULT '0', + `cast_percentage` tinyint(3) unsigned NOT NULL DEFAULT '10', + `randomize` int(10) unsigned NOT NULL DEFAULT '0', + `alignment` tinyint(3) NOT NULL DEFAULT '0', + PRIMARY KEY (`id`), + KEY `SpawnIDX` (`spawn_id`), + CONSTRAINT `FK_npcs_spawn` FOREIGN KEY (`spawn_id`) REFERENCES `spawn` (`id`) ON DELETE CASCADE ON UPDATE CASCADE +) ENGINE=InnoDB AUTO_INCREMENT=35647 DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci; +INSERT INTO `table_versions` (`name`,`version`,`download_version`) values ('spawn_npcs',1,0); +DROP TABLE IF EXISTS `spawn_objects`; +CREATE TABLE IF NOT EXISTS `spawn_objects` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `spawn_id` int(10) unsigned NOT NULL DEFAULT '0', + `device_id` tinyint(3) unsigned NOT NULL DEFAULT '0', + PRIMARY KEY (`id`), + UNIQUE KEY `SpawnIDX` (`spawn_id`), + CONSTRAINT `FK_objects_spawn` FOREIGN KEY (`spawn_id`) REFERENCES `spawn` (`id`) ON DELETE CASCADE ON UPDATE CASCADE +) ENGINE=InnoDB AUTO_INCREMENT=12329 DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci; +INSERT INTO `table_versions` (`name`,`version`,`download_version`) values ('spawn_objects',1,0); +DROP TABLE IF EXISTS `spawn_pet_names`; +CREATE TABLE IF NOT EXISTS `spawn_pet_names` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `pet_name` varchar(64) COLLATE latin1_general_ci NOT NULL DEFAULT '', + PRIMARY KEY (`id`), + UNIQUE KEY `PetNameIDX` (`pet_name`) +) ENGINE=InnoDB AUTO_INCREMENT=1708 DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci; +INSERT INTO `spawn_pet_names` (`id`, `pet_name`) VALUES + (1, 'Abaddon'), + (2, 'Abbadabbado'), + (3, 'Aciaja'), + (4, 'Ackroh'), + (5, 'Adam'), + (6, 'Adebisi'), + (7, 'Adonut'), + (8, 'Aegisfang'), + (9, 'Aerabella'), + (10, 'Aerial'), + (11, 'Aerynai'), + (12, 'Agathia'), + (13, 'Ahaziah'), + (14, 'Ahgony'), + (15, 'Ainsley'), + (16, 'Akashiaa'), + (17, 'Akeysha'), + (18, 'Akisha'), + (19, 'Alei'), + (20, 'Alix'), + (21, 'Allen'), + (22, 'Allexxa'), + (23, 'Alpha'), + (24, 'Alpo'), + (25, 'Alyice'), + (26, 'Alyisia'), + (27, 'Alyka'), + (28, 'Amidala'), + (29, 'Amnepoh'), + (30, 'Ananez'), + (31, 'Ancestral Sentry'), + (32, 'Andramada'), + (33, 'Angel'), + (34, 'Anita'), + (35, 'Ankh'), + (36, 'Anorexic'), + (37, 'Antidote'), + (38, 'Apesheit'), + (39, 'Apetoodeetoo'), + (40, 'Aphid'), + (41, 'Apollo'), + (42, 'Applepudding'), + (43, 'Aquarius'), + (44, 'Arach'), + (45, 'Arby'), + (46, 'Arcanetreepulp'), + (47, 'Arcanium'), + (48, 'Ardan'), + (49, 'Arirea'), + (50, 'Artemis'), + (51, 'Assistme'), + (52, 'Atlantic'), + (53, 'Atua'), + (54, 'Auenyin'), + (55, 'Avarissa'), + (56, 'Avengedsevenfold'), + (57, 'Azhadrhane'), + (58, 'Azule'), + (59, 'Azyrx'), + (60, 'Babau'), + (61, 'Baby'), + (62, 'baby monkey'), + (63, 'Babyface'), + (64, 'Babykong'), + (65, 'Bacon'), + (66, 'Baconater'), + (67, 'Badjax'), + (68, 'Badkitty'), + (69, 'Bagabones'), + (70, 'Bagofbones'), + (71, 'Bahamut'), + (72, 'Baked'), + (73, 'Baldie'), + (74, 'Bareblue'), + (75, 'Barney'), + (76, 'Barocko'), + (77, 'Barrathos'), + (78, 'Bashyourfacein'), + (79, 'Battie'), + (80, 'Battyforu'), + (81, 'Beaker'), + (82, 'Beans'), + (83, 'Beast'), + (84, 'Beautyqueen'), + (85, 'Beedlin'), + (86, 'Beeeeeesssss'), + (87, 'Beetle'), + (88, 'Beeyiyengeo'), + (89, 'Bellia'), + (90, 'Benas'), + (91, 'Benny'), + (92, 'Berathor'), + (93, 'Berengaria'), + (94, 'Bibi'), + (95, 'Bible'), + (96, 'Bigdaddy'), + (97, 'Bigfunbookofspells'), + (98, 'Bigron'), + (99, 'Binkey'), + (100, 'Bitey'), + (101, 'Bitt'), + (102, 'Bizzel'), + (103, 'Black'), + (104, 'Blackfell'), + (105, 'Blackfist'), + (106, 'Blackpepper'), + (107, 'Blinky'), + (108, 'Blip'), + (109, 'Blizzard'), + (110, 'Bobafet'), + (111, 'Bobfairyslayer'), + (112, 'Boggmarr'), + (113, 'Bogo'), + (114, 'Bokfanharrypothuvud'), + (115, 'Bonelily'), + (116, 'Bonerack'), + (117, 'Bones'), + (118, 'Bonesy'), + (119, 'Bongrips'), + (120, 'Bonydeath'), + (121, 'Booboo'), + (122, 'Boog'), + (123, 'Boogie'), + (124, 'Bookie'), + (125, 'Booloo'), + (126, 'Boomer'), + (127, 'Borntobebad'), + (128, 'Brainiak'), + (129, 'Breiah'), + (130, 'Brightfang'), + (131, 'Brimstone'), + (132, 'Broyl'), + (133, 'Brun'), + (134, 'Buba'), + (135, 'Bubba'), + (136, 'Bubbles'), + (137, 'Buddy'), + (138, 'Budgie'), + (139, 'Buffysummers'), + (140, 'Buger'), + (141, 'Bugged'), + (142, 'Bully'), + (143, 'Bungholio'), + (144, 'Bupack'), + (145, 'Buster'), + (146, 'Butthead'), + (147, 'Button'), + (148, 'Buttugly'), + (149, 'Cadberry'), + (150, 'Caelon'), + (151, 'Callyia'), + (152, 'Cannonfodder'), + (153, 'Cannonphaughter'), + (154, 'Cantonevonemenoobs'), + (155, 'Captainjack'), + (156, 'Caramel'), + (157, 'Carborundum'), + (158, 'Carie'), + (159, 'Carpebotsum'), + (160, 'Cartaphilus'), + (161, 'Casmet'), + (162, 'Catsby'), + (163, 'Celemeric'), + (164, 'Celeste'), + (165, 'Ceoin'), + (166, 'Cernunnos'), + (167, 'Charmed'), + (168, 'Chartreusia'), + (169, 'Chase'), + (170, 'Cheesecakeneverlies'), + (171, 'Cheesespawn'), + (172, 'Cheezeburger'), + (173, 'Chemicallobotomy'), + (174, 'Chilaquilesverdes'), + (175, 'Chip'), + (176, 'Chole'), + (177, 'Chonk'), + (178, 'Chronos'), + (179, 'Chronotrigger'), + (180, 'Chubby'), + (181, 'Chuckles'), + (182, 'Chucknorris'), + (183, 'Chunash'), + (184, 'Chunk'), + (185, 'Cinderella'), + (186, 'Cinnamon'), + (187, 'Clarence'), + (188, 'Clatter'), + (189, 'Cleopatra'), + (190, 'clockwork owlbear'), + (191, 'Clone'), + (192, 'Cloudy'), + (193, 'Clove'), + (194, 'Cloy'), + (195, 'Clubber'), + (196, 'Clyf'), + (197, 'Cocombre'), + (198, 'Coffin'), + (199, 'Constitution'), + (200, 'Convulse'), + (201, 'Coocoo'), + (202, 'Cookie'), + (203, 'Cookies'), + (204, 'Cowtor'), + (205, 'Crabby'), + (206, 'Cranky'), + (207, 'Cratos'), + (208, 'Crawlingsnot'), + (209, 'Crazycat'), + (210, 'Creapin'), + (211, 'Criana'), + (212, 'Cringer'), + (213, 'Cross'), + (214, 'Cucumber'), + (215, 'Cuddlenator'), + (216, 'Cuddles'), + (217, 'Cujo'), + (218, 'Cutie'), + (219, 'Cutnutsjr'), + (220, 'Cypress'), + (221, 'Dagimp'), + (222, 'Daisy'), + (223, 'Danielle'), + (224, 'Darkangelz'), + (225, 'Darkbringer'), + (226, 'Darkmagic'), + (227, 'Darkwing'), + (228, 'Dartagnan'), + (229, 'Dawn'), + (230, 'Dazhbog'), + (231, 'Ddeath'), + (232, 'Ddog'), + (233, 'Deadapostle'), + (234, 'Deadly'), + (235, 'Decessa'), + (236, 'Decombones'), + (237, 'Deeogee'), + (238, 'Dejavu'), + (239, 'Delorean'), + (240, 'Demmin'), + (241, 'Demon'), + (242, 'Demonseed'), + (243, 'Destroyer'), + (244, 'Destruct'), + (245, 'Devalera'), + (246, 'Devinwind'), + (247, 'Diamond'), + (248, 'Diavoli'), + (249, 'Digmdigm'), + (250, 'Dingbat'), + (251, 'Dinner'), + (252, 'Disturbed'), + (253, 'Diversion'), + (254, 'Divider'), + (255, 'Divnity'), + (256, 'Docile Ice Slurry'), + (257, 'Doesitrlytakeagrp'), + (258, 'Dogmeat'), + (259, 'Dogsbollox'), + (260, 'Dommi'), + (261, 'Donald'), + (262, 'Donkeyboy'), + (263, 'Dontfeedthedoggie'), + (264, 'Dork'), + (265, 'Dorne'), + (266, 'Draco'), + (267, 'Dragon'), + (268, 'Dragonlance'), + (269, 'Drax'), + (270, 'Draycon'), + (271, 'Dreckskoeter'), + (272, 'Droppe'), + (273, 'Dumbchuck'), + (274, 'Dumdumneedsgumgum'), + (275, 'Duration'), + (276, 'Dusty'), + (277, 'Dyerix'), + (278, 'Easypeasy'), + (279, 'Eatyou'), + (280, 'Ebola'), + (281, 'Edge'), + (282, 'Edwood'), + (283, 'Efaynne'), + (284, 'Einstein'), + (285, 'Elandil'), + (286, 'Elynsynos'), + (287, 'Emmypop'), + (288, 'Equinox'), + (289, 'Erenor'), + (290, 'Eris'), + (291, 'Erys'), + (292, 'Estonia'), + (293, 'Evilbookman'), + (294, 'Eyelusion'), + (295, 'Eymahponie'), + (296, 'Ezekial'), + (297, 'Faera'), + (298, 'Faezed'), + (299, 'Fafi'), + (300, 'Faith'), + (301, 'Fallingapart'), + (302, 'Falsehood'), + (303, 'Fang'), + (304, 'Fangs'), + (305, 'Fatswaller'), + (306, 'Fattymcmoobiepants'), + (307, 'Feskay'), + (308, 'Fester'), + (309, 'Fhursna'), + (310, 'Fido'), + (311, 'Fightwastakintoolong'), + (312, 'Filthyboy'), + (313, 'Fire'), + (314, 'Firedude'), + (315, 'Firefly'), + (316, 'Fitz'), + (317, 'Fizzledingus'), + (318, 'Flame'), + (319, 'Flamey'), + (320, 'Flaps'), + (321, 'Flare'), + (322, 'Flashthunder'), + (323, 'Fleabyte'), + (324, 'Flee'), + (325, 'Floppy'), + (326, 'Fluffy'), + (327, 'Flutter'), + (328, 'Flutterby'), + (329, 'Fodder'), + (330, 'Fookinfook'), + (331, 'Foookmi'), + (332, 'Forest Spirit'), + (333, 'Frank'), + (334, 'Frankenweiner'), + (335, 'Fred'), + (336, 'Freddie'), + (337, 'Freepcreep'), + (338, 'Freety'), + (339, 'Frikinchicken'), + (340, 'Frogorz'), + (341, 'Froschen'), + (342, 'Froschy'), + (343, 'Frost'), + (344, 'Fufo'), + (345, 'Fugly'), + (346, 'Funnyfellow'), + (347, 'Fuzzy'), + (348, 'Fyrell'), + (349, 'Gabaner'), + (350, 'Gabann'), + (351, 'Gabantik'), + (352, 'Gabarer'), + (353, 'Gabarn'), + (354, 'Gabartik'), + (355, 'Gabeker'), + (356, 'Gabekn'), + (357, 'Gaber'), + (358, 'Gabn'), + (359, 'Gabober'), + (360, 'Gabobn'), + (361, 'Gabobtik'), + (362, 'Gamolron'), + (363, 'Ganab'), + (364, 'Ganer'), + (365, 'Gann'), + (366, 'Gantik'), + (367, 'Garanab'), + (368, 'Garantik'), + (369, 'Gararer'), + (370, 'Gararn'), + (371, 'Garartik'), + (372, 'Gareker'), + (373, 'Garer'), + (374, 'Garn'), + (375, 'Garober'), + (376, 'Garry'), + (377, 'Garsh'), + (378, 'Gartik'), + (379, 'Gartth'), + (380, 'Gasaner'), + (381, 'Gasann'), + (382, 'Gasantik'), + (383, 'Gasarer'), + (384, 'Gasarn'), + (385, 'Gasartik'), + (386, 'Gaseker'), + (387, 'Gasekn'), + (388, 'Gasn'), + (389, 'Gastik'), + (390, 'Gebanab'), + (391, 'Gebarab'), + (392, 'Gebekab'), + (393, 'Gebeker'), + (394, 'Gebekn'), + (395, 'Geber'), + (396, 'Gebober'), + (397, 'Gebobn'), + (398, 'Gebtik'), + (399, 'Gedhawk'), + (400, 'Geerdaso'), + (401, 'Geker'), + (402, 'Gekn'), + (403, 'Genab'), + (404, 'Genaner'), + (405, 'Genann'), + (406, 'Genantik'), + (407, 'Genarn'), + (408, 'Genartik'), + (409, 'Genekab'), + (410, 'Geneker'), + (411, 'Genekn'), + (412, 'Genn'), + (413, 'Genober'), + (414, 'Genobn'), + (415, 'Gentik'), + (416, 'George'), + (417, 'Georgedoors'), + (418, 'Getmoretokillone'), + (419, 'Gibanab'), + (420, 'Gibaner'), + (421, 'Gibarab'), + (422, 'Gibarer'), + (423, 'Gibartik'), + (424, 'Gibekn'), + (425, 'Gibober'), + (426, 'Gibobtik'), + (427, 'Gibson'), + (428, 'Gigglebones'), + (429, 'Gili'), + (430, 'Gimpboy'), + (431, 'Gingerbreadman'), + (432, 'Gingersnaps'), + (433, 'Ginster'), + (434, 'Girentine'), + (435, 'Gisela'), + (436, 'Glam'), + (437, 'Glitter'), + (438, 'Glowbones'), + (439, 'Glowingfart'), + (440, 'Gmork'), + (441, 'Gnat'), + (442, 'Gobaner'), + (443, 'Gobann'), + (444, 'Gobantik'), + (445, 'Gobarab'), + (446, 'Gobarer'), + (447, 'Gobartik'), + (448, 'Gobblerot'), + (449, 'Gobekab'), + (450, 'Gobeker'), + (451, 'Gobekn'), + (452, 'Gober'), + (453, 'Gobn'), + (454, 'Gobobtik'), + (455, 'Gobtik'), + (456, 'Godpetsannoyme'), + (457, 'Goindar'), + (458, 'Golddigga'), + (459, 'Gomez'), + (460, 'Gonab'), + (461, 'Gonad'), + (462, 'Gonanab'), + (463, 'Gonaner'), + (464, 'Gonann'), + (465, 'Gonantik'), + (466, 'Gonarer'), + (467, 'Gonarn'), + (468, 'Gonartik'), + (469, 'Gonekab'), + (470, 'Goneker'), + (471, 'Gonekn'), + (472, 'Goner'), + (473, 'Gonn'), + (474, 'Gonober'), + (475, 'Gonobn'), + (476, 'Goober'), + (477, 'Goodhousekeeping'), + (478, 'Goodjobnoobz'), + (479, 'Goondar'), + (480, 'Goondor'), + (481, 'Gorgeous'), + (482, 'Gort'), + (483, 'Gosantik'), + (484, 'Gosarer'), + (485, 'Gosarn'), + (486, 'Gosekab'), + (487, 'Gosekn'), + (488, 'Gosn'), + (489, 'Gosober'), + (490, 'Gosobtik'), + (491, 'Gostik'), + (492, 'Gotit'), + (493, 'Gotmilk'), + (494, 'Gracie'), + (495, 'Grael'), + (496, 'Grand'), + (497, 'Granite'), + (498, 'Granstwin'), + (499, 'Grassgalor'), + (500, 'Graul'), + (501, 'Greven'), + (502, 'Greywolves'), + (503, 'Griefer'), + (504, 'Griffon Defender'), + (505, 'Grim'), + (506, 'Grimace'), + (507, 'Grimmymcreaper'), + (508, 'Grizz'), + (509, 'Grodd'), + (510, 'Grogor'), + (511, 'Gromafem'), + (512, 'Groupie'), + (513, 'Grover'), + (514, 'Growler'), + (515, 'Gruffle'), + (516, 'Grumpy'), + (517, 'Grymalkin'), + (518, 'Gryme'), + (519, 'Guenhwyvar'), + (520, 'Gumdrop'), + (521, 'Hahayoudied'), + (522, 'Hannahrexic'), + (523, 'Hannibal'), + (524, 'Hansel'), + (525, 'Harbinger'), + (526, 'Harvey'), + (527, 'Harvo'), + (528, 'Hawkeye'), + (529, 'Hayleee'), + (530, 'Healface'), + (531, 'Hearkittykitty'), + (532, 'Heartacramp'), + (533, 'Heartbreaker'), + (534, 'Helledd'), + (535, 'Hellspawn'), + (536, 'Hepam'), + (537, 'Herbert'), + (538, 'Hiath'), + (539, 'Himato'), + (540, 'Hobo'), + (541, 'Holybible'), + (542, 'Hoochie'), + (543, 'Hornie'), + (544, 'Hothead'), + (545, 'Hotpockets'), + (546, 'Hrimnir'), + (547, 'Hugger'), + (548, 'Huggyface'), + (549, 'Hunglow'), + (550, 'Iamadragon'), + (551, 'Icarus'), + (552, 'Icklepickle'), + (553, 'Iggee'), + (554, 'Iggy'), + (555, 'Igneous'), + (556, 'Ihaveahat'), + (557, 'Ikary'), + (558, 'Ilikeratboy'), + (559, 'Illictdrugs'), + (560, 'Illusori'), + (561, 'Iloveyou'), + (562, 'Ilyendin'), + (563, 'Imascarydragonrawr'), + (564, 'Immabook'), + (565, 'Impetigo'), + (566, 'Imsi'), + (567, 'Incrediblehunk'), + (568, 'Interpol'), + (569, 'Invisiblemunkee'), + (570, 'Ionic'), + (571, 'Ironlionzion'), + (572, 'Ironman'), + (573, 'Irony'), + (574, 'Irritation'), + (575, 'Isgood'), + (576, 'Iskios'), + (577, 'Ismellrealbad'), + (578, 'Itswhatsfordinner'), + (579, 'Itsy'), + (580, 'Jabann'), + (581, 'Jabarer'), + (582, 'Jabarn'), + (583, 'Jabber'), + (584, 'Jabekab'), + (585, 'Jabekn'), + (586, 'Jaber'), + (587, 'Jabn'), + (588, 'Jabober'), + (589, 'Jackdaniels'), + (590, 'James'), + (591, 'Janab'), + (592, 'Janer'), + (593, 'Janice'), + (594, 'Jann'), + (595, 'Jantik'), + (596, 'Jaraner'), + (597, 'Jarann'), + (598, 'Jararab'), + (599, 'Jararer'), + (600, 'Jararn'), + (601, 'Jarartik'), + (602, 'Jarazi'), + (603, 'Jareker'), + (604, 'Jarer'), + (605, 'Jareth'), + (606, 'Jarn'), + (607, 'Jartik'), + (608, 'Jasann'), + (609, 'Jasantik'), + (610, 'Jasarer'), + (611, 'Jasartik'), + (612, 'Jasekab'), + (613, 'Jaseker'), + (614, 'Jasekn'), + (615, 'Jaser'), + (616, 'Jaslo'), + (617, 'Jasn'), + (618, 'Jason'), + (619, 'Jasper'), + (620, 'Jebaner'), + (621, 'Jebann'), + (622, 'Jebarer'), + (623, 'Jebartik'), + (624, 'Jebekn'), + (625, 'Jeber'), + (626, 'Jedanor'), + (627, 'Jeker'), + (628, 'Jekn'), + (629, 'Jenanab'), + (630, 'Jenantik'), + (631, 'Jenarab'), + (632, 'Jenarer'), + (633, 'Jenarn'), + (634, 'Jenartik'), + (635, 'Jeneker'), + (636, 'Jenekn'), + (637, 'Jener'), + (638, 'Jenn'), + (639, 'Jenobab'), + (640, 'Jester'), + (641, 'Jibanab'), + (642, 'Jibaner'), + (643, 'Jibann'), + (644, 'Jibantik'), + (645, 'Jibarer'), + (646, 'Jibarn'), + (647, 'Jibartik'), + (648, 'Jibekab'), + (649, 'Jibeker'), + (650, 'Jiber'), + (651, 'Jibtik'), + (652, 'Joanie'), + (653, 'Jobab'), + (654, 'Jobann'), + (655, 'Jobantik'), + (656, 'Jobarab'), + (657, 'Jobarer'), + (658, 'Jobartik'), + (659, 'Jobeker'), + (660, 'Jobekn'), + (661, 'Jobn'), + (662, 'Jobtik'), + (663, 'Johanpaulik'), + (664, 'John'), + (665, 'Johnnydankseed'), + (666, 'Jojo'), + (667, 'Jonaner'), + (668, 'Jonantik'), + (669, 'Jonarer'), + (670, 'Jonartik'), + (671, 'Jonekab'), + (672, 'Jonekn'), + (673, 'Joner'), + (674, 'Jonobab'), + (675, 'Jonober'), + (676, 'Jontik'), + (677, 'Joramora'), + (678, 'Josab'), + (679, 'Josaner'), + (680, 'Josann'), + (681, 'Josantik'), + (682, 'Josephcurwen'), + (683, 'Joser'), + (684, 'Josn'), + (685, 'Josober'), + (686, 'Jostik'), + (687, 'Journal'), + (688, 'Judgedredd'), + (689, 'Juggernaut'), + (690, 'Juggz'), + (691, 'Jute'), + (692, 'Kabaner'), + (693, 'Kabann'), + (694, 'Kabantik'), + (695, 'Kabarer'), + (696, 'Kabarn'), + (697, 'Kabartik'), + (698, 'Kabeker'), + (699, 'Kabekn'), + (700, 'Kaber'), + (701, 'Kabn'), + (702, 'Kabobn'), + (703, 'Kabobtik'), + (704, 'Kabtik'), + (705, 'Kaleb'), + (706, 'Kalten'), + (707, 'Kann'), + (708, 'Kantik'), + (709, 'Karab'), + (710, 'Karaner'), + (711, 'Karann'), + (712, 'Karantik'), + (713, 'Kararer'), + (714, 'Kararn'), + (715, 'Karek'), + (716, 'Kareker'), + (717, 'Karer'), + (718, 'Karn'), + (719, 'Karobtik'), + (720, 'Kartik'), + (721, 'Kasaner'), + (722, 'Kasann'), + (723, 'Kasantik'), + (724, 'Kaseker'), + (725, 'Kasekn'), + (726, 'Kasn'), + (727, 'Kasober'), + (728, 'Kasobn'), + (729, 'Kasobtik'), + (730, 'Kastik'), + (731, 'Katastrophe'), + (732, 'Katie'), + (733, 'Katius'), + (734, 'Kato'), + (735, 'Katpal'), + (736, 'Kazoc'), + (737, 'Keaneu'), + (738, 'Kebab'), + (739, 'Kebaner'), + (740, 'Kebann'), + (741, 'Kebantik'), + (742, 'Kebarer'), + (743, 'Kebarn'), + (744, 'Kebartik'), + (745, 'Kebeker'), + (746, 'Kebekn'), + (747, 'Keber'), + (748, 'Kebker'), + (749, 'Kebn'), + (750, 'Kebtik'), + (751, 'Keiva'), + (752, 'Kekab'), + (753, 'Keker'), + (754, 'Kekn'), + (755, 'Kenab'), + (756, 'Kenanab'), + (757, 'Kenaner'), + (758, 'Kenann'), + (759, 'Kenantik'), + (760, 'Kenarab'), + (761, 'Kenarer'), + (762, 'Kenartik'), + (763, 'Kenekab'), + (764, 'Keneker'), + (765, 'Kenny'), + (766, 'Kenober'), + (767, 'Kenobn'), + (768, 'Kerowynn'), + (769, 'Khalina'), + (770, 'Kharis'), + (771, 'Kheria'), + (772, 'Kibanab'), + (773, 'Kibaner'), + (774, 'Kibann'), + (775, 'Kibantik'), + (776, 'Kibarn'), + (777, 'Kibekn'), + (778, 'Kibektik'), + (779, 'Kibn'), + (780, 'Kibober'), + (781, 'Kibtik'), + (782, 'Kickme'), + (783, 'Kiddly'), + (784, 'Kieler'), + (785, 'Kilbasa'), + (786, 'Killer'), + (787, 'Killingfrost'), + (788, 'Kimi'), + (789, 'King'), + (790, 'Kingkong'), + (791, 'Kitten'), + (792, 'Kitty'), + (793, 'Kjrn'), + (794, 'Klijs'), + (795, 'Klutz'), + (796, 'Knightly'), + (797, 'Knowes'), + (798, 'Knowitall'), + (799, 'Knuckles'), + (800, 'Kobab'), + (801, 'Kobann'), + (802, 'Kobarer'), + (803, 'Kobartik'), + (804, 'Kobekab'), + (805, 'Kobeker'), + (806, 'Kober'), + (807, 'Kobn'), + (808, 'Kobtik'), + (809, 'Kojo'), + (810, 'Konanab'), + (811, 'Konaner'), + (812, 'Konann'), + (813, 'Konarn'), + (814, 'Konartik'), + (815, 'Konekab'), + (816, 'Koneker'), + (817, 'Konekn'), + (818, 'Kong'), + (819, 'Konn'), + (820, 'Konober'), + (821, 'Konobn'), + (822, 'Kontik'), + (823, 'Koppar'), + (824, 'Kornsbuttt'), + (825, 'Kosab'), + (826, 'Kosarab'), + (827, 'Kosarer'), + (828, 'Kosarn'), + (829, 'Kosartik'), + (830, 'Koseker'), + (831, 'Kosektik'), + (832, 'Koser'), + (833, 'Kosn'), + (834, 'Krithix'), + (835, 'Kujo'), + (836, 'Kunarg'), + (837, 'Kuutar'), + (838, 'Kvak'), + (839, 'Kylah'), + (840, 'Kyostal'), + (841, 'Labaner'), + (842, 'Labantik'), + (843, 'Labarab'), + (844, 'Labartik'), + (845, 'Labeker'), + (846, 'Labekn'), + (847, 'Labn'), + (848, 'Labobn'), + (849, 'Labobtik'), + (850, 'Labtik'), + (851, 'Laelinne'), + (852, 'Lagartuno'), + (853, 'Lampie'), + (854, 'Lanab'), + (855, 'Laner'), + (856, 'Lantik'), + (857, 'Larann'), + (858, 'Lardy'), + (859, 'Larober'), + (860, 'Larry'), + (861, 'Lartik'), + (862, 'Lasartik'), + (863, 'Laskod'), + (864, 'Lasn'), + (865, 'Lasobn'), + (866, 'Lassie'), + (867, 'Lastik'), + (868, 'Lavastorm'), + (869, 'Lavinious'), + (870, 'Lawst'), + (871, 'Lebarab'), + (872, 'Lebektik'), + (873, 'Lebobn'), + (874, 'Lebobtik'), + (875, 'Lebtik'), + (876, 'Legionsucks'), + (877, 'Lehane'), + (878, 'Lekab'), + (879, 'Leker'), + (880, 'Lekn'), + (881, 'Lemvile'), + (882, 'Lenann'), + (883, 'Lenarer'), + (884, 'Lenarn'), + (885, 'Lenarr'), + (886, 'Lenartik'), + (887, 'Lenekn'), + (888, 'Lener'), + (889, 'Lenneth'), + (890, 'Lenober'), + (891, 'Lesser'), + (892, 'Libarn'), + (893, 'Libekn'), + (894, 'Libn'), + (895, 'Librios'), + (896, 'Libtik'), + (897, 'Lilai'), + (898, 'Lildrake'), + (899, 'Lilger'), + (900, 'Lillepeteredderkop'), + (901, 'Lillightomine'), + (902, 'Lillithia'), + (903, 'Liltourch'), + (904, 'Lionel'), + (905, 'Lisabelle'), + (906, 'Lite'), + (907, 'Littlehuggy'), + (908, 'Littleone'), + (909, 'Livi'), + (910, 'Liza'), + (911, 'Lloyd'), + (912, 'Lobarn'), + (913, 'Lobeker'), + (914, 'Lober'), + (915, 'Lobn'), + (916, 'Lobtik'), + (917, 'Loci'), + (918, 'Lofofora'), + (919, 'Logan'), + (920, 'Loki'), + (921, 'Loli'), + (922, 'Lollipop'), + (923, 'Lolneed'), + (924, 'Lolzergers'), + (925, 'Lonanab'), + (926, 'Lonaner'), + (927, 'Lonantik'), + (928, 'Lonarer'), + (929, 'Lonarn'), + (930, 'Lonartik'), + (931, 'Lonn'), + (932, 'Lonobn'), + (933, 'Lontik'), + (934, 'Lordofdeath'), + (935, 'Loru'), + (936, 'Losann'), + (937, 'Losarer'), + (938, 'Losarn'), + (939, 'Losartik'), + (940, 'Loseker'), + (941, 'Losekn'), + (942, 'Lourdez'), + (943, 'Lovemummy'), + (944, 'Lucky'), + (945, 'Lucretia'), + (946, 'Luipy'), + (947, 'Lumihaamu'), + (948, 'Lunch'), + (949, 'Lupin'), + (950, 'Lupus'), + (951, 'Lurra'), + (952, 'Luteneo'), + (953, 'Lynild'), + (954, 'Lyriel'), + (955, 'Maglamon'), + (956, 'Magnus'), + (957, 'Mahsampig'), + (958, 'Mainyu'), + (959, 'Maizen'), + (960, 'Makenzy'), + (961, 'Malil'), + (962, 'Manbearpig'), + (963, 'Manhands'), + (964, 'Mantoe'), + (965, 'Margaret'), + (966, 'Marilee'), + (967, 'Mariposa'), + (968, 'Martial'), + (969, 'Mascot'), + (970, 'Masterxl'), + (971, 'Maybeso'), + (972, 'Meanstreak'), + (973, 'Meat'), + (974, 'Meathead'), + (975, 'Meezik'), + (976, 'Mellrych'), + (977, 'Meow'), + (978, 'Meowzah'), + (979, 'Merlincia'), + (980, 'Mervi'), + (981, 'Mesmeric'), + (982, 'Method'), + (983, 'Mezzaluna'), + (984, 'Mezzme'), + (985, 'Mickey'), + (986, 'Mikehunt'), + (987, 'Milk'), + (988, 'Milkme'), + (989, 'Milkshake'), + (990, 'Mimi'), + (991, 'Mine'), + (992, 'Miniivore'), + (993, 'Miniknight'), + (994, 'Minime'), + (995, 'Minimeara'), + (996, 'Miniwhoss'), + (997, 'Mintok'), + (998, 'Mira'), + (999, 'Miranda'), + (1000, 'Miri'), + (1001, 'Mirrona'), + (1002, 'Mirror'), + (1003, 'Mischa'), + (1004, 'Misty'), + (1005, 'Mistycal'), + (1006, 'Mitzie'), + (1007, 'Mockery'), + (1008, 'Mojen'), + (1009, 'Mojodesu'), + (1010, 'Momo'), + (1011, 'Moncha'), + (1012, 'Monteryjack'), + (1013, 'Mooby'), + (1014, 'Moochee'), + (1015, 'Moomoo'), + (1016, 'Moondancer'), + (1017, 'Moore'), + (1018, 'Moosaurus'), + (1019, 'Moose'), + (1020, 'Moosifer'), + (1021, 'Moralebooster'), + (1022, 'Mordechi'), + (1023, 'Morejuce'), + (1024, 'Mrclaws'), + (1025, 'Mrpudgeface'), + (1026, 'Mucho'), + (1027, 'Mufasa'), + (1028, 'Muffinhealer'), + (1029, 'Mumrha'), + (1030, 'Munny'), + (1031, 'Muse'), + (1032, 'Myotherspells'), + (1033, 'Myst'), + (1034, 'Mywang'), + (1035, 'Myxwife'), + (1036, 'Nagfenlightning'), + (1037, 'Nakidfairy'), + (1038, 'Namelessnevermore'), + (1039, 'Nasan'), + (1040, 'Nassssssty'), + (1041, 'Nate'), + (1042, 'Navi'), + (1043, 'Nayay'), + (1044, 'Nazareth'), + (1045, 'Nazosa'), + (1046, 'Neal'), + (1047, 'Necelf'), + (1048, 'Necman'), + (1049, 'Necromongers'), + (1050, 'Necronomicon'), + (1051, 'Necronomiconxmorte'), + (1052, 'Necronomore'), + (1053, 'Nekromel'), + (1054, 'Nephratiti'), + (1055, 'Neptulos'), + (1056, 'Nero'), + (1057, 'Nertath'), + (1058, 'Newt'), + (1059, 'Niamooh'), + (1060, 'Nibbler'), + (1061, 'Nidaarla'), + (1062, 'Niff'), + (1063, 'Nofour'), + (1064, 'Nohealer'), + (1065, 'Nomi'), + (1066, 'Noob'), + (1067, 'Noodles'), + (1068, 'Note'), + (1069, 'Notmachia'), + (1070, 'Numbies'), + (1071, 'Numbnuts'), + (1072, 'Nuttnhoney'), + (1073, 'Oakster'), + (1074, 'Oawfulmean'), + (1075, 'Ofai'), + (1076, 'Oginok'), + (1077, 'Ohmadon'), + (1078, 'Oldyella'), + (1079, 'Omega'), + (1080, 'Omeye'), + (1081, 'Onevsone'), + (1082, 'Onevssonemewhinps'), + (1083, 'Oopi'), + (1084, 'Opurk'), + (1085, 'Opus'), + (1086, 'Orbeet'), + (1087, 'Oscar'), + (1088, 'Otis'), + (1089, 'Otsirx'), + (1090, 'Package'), + (1091, 'Pacman'), + (1092, 'Paige'), + (1093, 'Pain'), + (1094, 'Pantaliamon'), + (1095, 'Papercut'), + (1096, 'Paragwen'), + (1097, 'partial earthen essence'), + (1098, 'Passerby'), + (1099, 'Patties'), + (1100, 'Paulywalnuts'), + (1101, 'Pawtucket'), + (1102, 'Payne'), + (1103, 'Peaches'), + (1104, 'Peanut'), + (1105, 'Peasandgreavy'), + (1106, 'Pebbles'), + (1107, 'Penadurn'), + (1108, 'Pepe'), + (1109, 'Pepito'), + (1110, 'Perpe'), + (1111, 'Perplexed'), + (1112, 'Pertyboy'), + (1113, 'Pestilence'), + (1114, 'Phal'), + (1115, 'Philip'), + (1116, 'Phiobair'), + (1117, 'Phloem'), + (1118, 'Phoebs'), + (1119, 'Phuqingweetodded'), + (1120, 'Picklepic'), + (1121, 'Pikelet'), + (1122, 'Pilfer'), + (1123, 'Pillar'), + (1124, 'Pimm'), + (1125, 'Pink'), + (1126, 'Pita'), + (1127, 'Plonk'), + (1128, 'Plush'), + (1129, 'Pokee'), + (1130, 'Poof'), + (1131, 'Pooh'), + (1132, 'Pooka'), + (1133, 'Pooky'), + (1134, 'Poon'), + (1135, 'Poot'), + (1136, 'Poppylop'), + (1137, 'Porchmonkey'), + (1138, 'Poresret'), + (1139, 'Portablebuff'), + (1140, 'Pottingsoil'), + (1141, 'Powpowpow'), + (1142, 'Prator'), + (1143, 'Prats'), + (1144, 'Prexi'), + (1145, 'Prisskilla'), + (1146, 'Privatepyle'), + (1147, 'Provolone'), + (1148, 'psychomalleable ice'), + (1149, 'Psyclon'), + (1150, 'Pullmybone'), + (1151, 'Punkwock'), + (1152, 'Puss'), + (1153, 'Qsmell'), + (1154, 'Quacker Yig'), + (1155, 'Quellor'), + (1156, 'Quelmar'), + (1157, 'Radniilac'), + (1158, 'Ragequit'), + (1159, 'Raglark'), + (1160, 'Rainyy'), + (1161, 'Rakuz'), + (1162, 'Raptoronga'), + (1163, 'Ratzilla'), + (1164, 'Raukus'), + (1165, 'Rawbin'), + (1166, 'Rawr'), + (1167, 'Raythe'), + (1168, 'Razamatazberry'), + (1169, 'Reaper'), + (1170, 'Redbullnewlogo'), + (1171, 'Reddeath'), + (1172, 'Reginald'), + (1173, 'Repellent'), + (1174, 'Revoltx'), + (1175, 'Rexy'), + (1176, 'Reyus'), + (1177, 'Rholl'), + (1178, 'Rhumsaa'), + (1179, 'Rigormortis'), + (1180, 'Riip'), + (1181, 'Ringo'), + (1182, 'Ringworm'), + (1183, 'Roar'), + (1184, 'Rock'), + (1185, 'Rocka'), + (1186, 'Rockdropper'), + (1187, 'Rockie'), + (1188, 'Rockstar'), + (1189, 'Rocktree'), + (1190, 'Rocky'), + (1191, 'Rockybalboa'), + (1192, 'Roflmao'), + (1193, 'Ronanhob'), + (1194, 'Rouras'), + (1195, 'Roxx'), + (1196, 'Rrarwrk'), + (1197, 'Ruari'), + (1198, 'Rudeboy'), + (1199, 'Runningcowards'), + (1200, 'Saadra'), + (1201, 'Sabertoothtwotooth'), + (1202, 'Sable'), + (1203, 'Saecred'), + (1204, 'Sagga'), + (1205, 'Sakee'), + (1206, 'Sakumo'), + (1207, 'Salsa'), + (1208, 'Salty'), + (1209, 'Sandy'), + (1210, 'Sangilicious'), + (1211, 'Sargoth'), + (1212, 'Sarkuu'), + (1213, 'Sasha'), + (1214, 'Scales'), + (1215, 'Scavenge'), + (1216, 'Scoobie'), + (1217, 'Scooby'), + (1218, 'Scorchio'), + (1219, 'Scruff'), + (1220, 'Scrumby'), + (1221, 'Scurvy'), + (1222, 'Seals'), + (1223, 'Seipher'), + (1224, 'Selena'), + (1225, 'Senedin'), + (1226, 'Sereene'), + (1227, 'Serif'), + (1228, 'Shadow'), + (1229, 'Shailas'), + (1230, 'Shami'), + (1231, 'Shanimal'), + (1232, 'Shantru'), + (1233, 'Sharie'), + (1234, 'Shaylie'), + (1235, 'Sheamus'), + (1236, 'Shellen'), + (1237, 'Shellshock'), + (1238, 'Shelly'), + (1239, 'Sherman'), + (1240, 'Shimmerpaw'), + (1241, 'Shivs'), + (1242, 'Shonji'), + (1243, 'Shortbus'), + (1244, 'Shredder'), + (1245, 'Siakar'), + (1246, 'Sickem'), + (1247, 'Silk'), + (1248, 'Siltarr'), + (1249, 'Silver'), + (1250, 'Silvermane'), + (1251, 'Simba'), + (1252, 'Simion'), + (1253, 'Simon'), + (1254, 'Skahrin'), + (1255, 'Skeletor'), + (1256, 'Skellington'), + (1257, 'Skippy'), + (1258, 'Skittles'), + (1259, 'Sklurr'), + (1260, 'Slapaho'), + (1261, 'Slim'), + (1262, 'Slugb'), + (1263, 'Slugballa'), + (1264, 'Sluggersjr'), + (1265, 'Sluggggggghaxxxxxxxx'), + (1266, 'Slurpee'), + (1267, 'Smallone'), + (1268, 'Smokey'), + (1269, 'Snarf'), + (1270, 'Snookies'), + (1271, 'Snorft'), + (1272, 'Snowball'), + (1273, 'Snowbunny'), + (1274, 'Snowflake'), + (1275, 'Snuffles'), + (1276, 'Snugglebuns'), + (1277, 'Snuggles'), + (1278, 'Someoneonevone'), + (1279, 'Somethingwithwings'), + (1280, 'Sonny'), + (1281, 'Sophie'), + (1282, 'Sorrow'), + (1283, 'Sorrowmoon'), + (1284, 'Soylent'), + (1285, 'Spanky'), + (1286, 'Spannki'), + (1287, 'Spark'), + (1288, 'Sparkle'), + (1289, 'Sparklin'), + (1290, 'Sparkly'), + (1291, 'Sparks'), + (1292, 'Sparky'), + (1293, 'Sparrowhawk'), + (1294, 'Spear of the Sun'), + (1295, 'Speedy'), + (1296, 'Spiderman'), + (1297, 'Spidey'), + (1298, 'Spike'), + (1299, 'Spineless'), + (1300, 'Splenda'), + (1301, 'Splorpy Quagmarr'), + (1302, 'Spores'), + (1303, 'Spraynardjr'), + (1304, 'Squirt'), + (1305, 'Ssshhhoooooossshhh'), + (1306, 'Sssspider'), + (1307, 'Stains'), + (1308, 'Stalagmitebob'), + (1309, 'Stallone'), + (1310, 'Star'), + (1311, 'Starlitt'), + (1312, 'Starvinmarvin'), + (1313, 'Stassis'), + (1314, 'Steelballs'), + (1315, 'Steeldragon'), + (1316, 'Steil'), + (1317, 'Sticky'), + (1318, 'Stinker'), + (1319, 'Stinquer'), + (1320, 'Stone'), + (1321, 'Stoned'), + (1322, 'Stoner'), + (1323, 'Stoopidfookingsoe'), + (1324, 'Stormcaller'), + (1325, 'Stormfeather'), + (1326, 'Stravinski'), + (1327, 'Strife'), + (1328, 'Strikkeer'), + (1329, 'Stumpy'), + (1330, 'Stupidwazza'), + (1331, 'Stupit'), + (1332, 'Subwoofer'), + (1333, 'Sunblaade'), + (1334, 'Sunshine'), + (1335, 'Superaids'), + (1336, 'Supercow'), + (1337, 'Superslug'), + (1338, 'Sweetbabyjeebus'), + (1339, 'Taizz'), + (1340, 'Takeout'), + (1341, 'Takethat'), + (1342, 'Talcice'), + (1343, 'Taleofdespereaux'), + (1344, 'Tank'), + (1345, 'Tanooki'), + (1346, 'Tanzy'), + (1347, 'Target'), + (1348, 'Tarr'), + (1349, 'Tarrant'), + (1350, 'Taryne'), + (1351, 'Tastemymilk'), + (1352, 'Tater'), + (1353, 'Tealwraith'), + (1354, 'Terror'), + (1355, 'Terry'), + (1356, 'Teru'), + (1357, 'Tesoro'), + (1358, 'Thebible'), + (1359, 'Theevil'), + (1360, 'Thegiantfatmidgetboy'), + (1361, 'Thejugernaught'), + (1362, 'Theo'), + (1363, 'Theshinkicker'), + (1364, 'Thezoo'), + (1365, 'Thibodeaux'), + (1366, 'Thingy'), + (1367, 'Thipsycho'), + (1368, 'Thlexian'), + (1369, 'Thoret'), + (1370, 'Thunderbolt'), + (1371, 'Tickle'), + (1372, 'Tikii'), + (1373, 'Tilex'), + (1374, 'Tilinpaatos'), + (1375, 'Timber'), + (1376, 'Tina'), + (1377, 'Tink'), + (1378, 'Tiny'), + (1379, 'Tjorven'), + (1380, 'Tjuvnyp'), + (1381, 'Toadi'), + (1382, 'Toddy'), + (1383, 'Tombs'), + (1384, 'Tome of Erudin'), + (1385, 'Tommy'), + (1386, 'Toodles'), + (1387, 'Toofy'), + (1388, 'Toosquishy'), + (1389, 'Tortuga'), + (1390, 'Toughie'), + (1391, 'Toxxic'), + (1392, 'Tranel'), + (1393, 'Trecc'), + (1394, 'Tribie'), + (1395, 'Trogdor'), + (1396, 'Trouble'), + (1397, 'Truge'), + (1398, 'Tubby'), + (1399, 'Tummysticks'), + (1400, 'Tumtum'), + (1401, 'Turner'), + (1402, 'Turtle'), + (1403, 'Twigsnap'), + (1404, 'Twinkle'), + (1405, 'Twisty'), + (1406, 'Twixel'), + (1407, 'Twoply'), + (1408, 'Tyller'), + (1409, 'Tyrrannmoosaurusrex'), + (1410, 'Ubuu'), + (1411, 'Uermel'), + (1412, 'Uhhhhhhh'), + (1413, 'Uljae'), + (1414, 'Ummm'), + (1415, 'Unevolved'), + (1416, 'Urpathetic'), + (1417, 'Ursa'), + (1418, 'Urzmat'), + (1419, 'Usda'), + (1420, 'Useless'), + (1421, 'Uuugly'), + (1422, 'Vabanab'), + (1423, 'Vabaner'), + (1424, 'Vabantik'), + (1425, 'Vabarer'), + (1426, 'Vabarn'), + (1427, 'Vabeker'), + (1428, 'Vabekn'), + (1429, 'Vaber'), + (1430, 'Vabn'), + (1431, 'Vabobab'), + (1432, 'Vabober'), + (1433, 'Vabtik'), + (1434, 'Vacuous'), + (1435, 'Valdama'), + (1436, 'Vann'), + (1437, 'Vanq'), + (1438, 'Vantik'), + (1439, 'Vanyel'), + (1440, 'Varann'), + (1441, 'Vararab'), + (1442, 'Vararer'), + (1443, 'Vararn'), + (1444, 'Varekab'), + (1445, 'Vareker'), + (1446, 'Varekn'), + (1447, 'Varer'), + (1448, 'Varn'), + (1449, 'Vartik'), + (1450, 'Vasab'), + (1451, 'Vasantik'), + (1452, 'Vasarer'), + (1453, 'Vasarn'), + (1454, 'Vasartik'), + (1455, 'Vaseker'), + (1456, 'Vaser'), + (1457, 'Vasobtik'), + (1458, 'Vebaner'), + (1459, 'Vebarer'), + (1460, 'Vebeker'), + (1461, 'Vebekn'), + (1462, 'Veber'), + (1463, 'Vebtik'), + (1464, 'Veker'), + (1465, 'Vekn'), + (1466, 'Vellocet'), + (1467, 'Velvet'), + (1468, 'Vemon'), + (1469, 'Vendetta'), + (1470, 'Venekn'), + (1471, 'Vener'), + (1472, 'Ventik'), + (1473, 'Veracity'), + (1474, 'Verta'), + (1475, 'Vessik'), + (1476, 'Vibanab'), + (1477, 'Vibaner'), + (1478, 'Vibann'), + (1479, 'Vibantik'), + (1480, 'Vibarn'), + (1481, 'Vibartik'), + (1482, 'Vibekn'), + (1483, 'Vibtik'), + (1484, 'Victory'), + (1485, 'Violen'), + (1486, 'Viollette'), + (1487, 'Virtue'), + (1488, 'Vladd'), + (1489, 'Vladimir'), + (1490, 'Vobab'), + (1491, 'Vobantik'), + (1492, 'Vobarab'), + (1493, 'Vobarn'), + (1494, 'Vober'), + (1495, 'Vobn'), + (1496, 'Vobobab'), + (1497, 'Vobober'), + (1498, 'Vobtik'), + (1499, 'Voidtick'), + (1500, 'Vonaner'), + (1501, 'Vonann'), + (1502, 'Vonantik'), + (1503, 'Vonarer'), + (1504, 'Vonartik'), + (1505, 'Voneker'), + (1506, 'Vonekn'), + (1507, 'Voner'), + (1508, 'Vonober'), + (1509, 'Vosarer'), + (1510, 'Vosarn'), + (1511, 'Voseker'), + (1512, 'Voser'), + (1513, 'Vosn'), + (1514, 'Vosober'), + (1515, 'Vovven'), + (1516, 'Waaterre'), + (1517, 'Wackojacko'), + (1518, 'Waffles'), + (1519, 'Wakkyzakky'), + (1520, 'Walter'), + (1521, 'Wannaonevone'), + (1522, 'Wardone'), + (1523, 'Warr'), + (1524, 'Warslug'), + (1525, 'Warts'), + (1526, 'Wasup'), + (1527, 'Webster'), + (1528, 'Weeneeroaster'), + (1529, 'Weirds'), + (1530, 'Well'), + (1531, 'Werd'), + (1532, 'What'), + (1533, 'Whatchamacallit'), + (1534, 'Whisbob'), + (1535, 'Whiskers'), + (1536, 'Whisper'), + (1537, 'Whisperling'), + (1538, 'Whoja'), + (1539, 'Whoopass'), + (1540, 'Widowmakerr'), + (1541, 'Wierd'), + (1542, 'Wigglypede'), + (1543, 'Willis'), + (1544, 'Willow'), + (1545, 'Willowisp'), + (1546, 'Wingendund'), + (1547, 'Wispy'), + (1548, 'Wizardryfordummies'), + (1549, 'Woffletags'), + (1550, 'Wokkawokka'), + (1551, 'Wolf'), + (1552, 'Wolfface'), + (1553, 'Wolfin'), + (1554, 'Wolfina'), + (1555, 'Woowoo'), + (1556, 'Woozie'), + (1557, 'Workedforme'), + (1558, 'Wraithjade'), + (1559, 'Xabanab'), + (1560, 'Xabann'), + (1561, 'Xabantik'), + (1562, 'Xabartik'), + (1563, 'Xabeker'), + (1564, 'Xabn'), + (1565, 'Xabtik'), + (1566, 'Xanab'), + (1567, 'Xaner'), + (1568, 'Xann'), + (1569, 'Xantik'), + (1570, 'Xarab'), + (1571, 'Xaraner'), + (1572, 'Xarantik'), + (1573, 'Xarer'), + (1574, 'Xarn'), + (1575, 'Xartik'), + (1576, 'Xasaner'), + (1577, 'Xasarer'), + (1578, 'Xasarn'), + (1579, 'Xasartik'), + (1580, 'Xasekn'), + (1581, 'Xaser'), + (1582, 'Xasn'), + (1583, 'Xasobab'), + (1584, 'Xebann'), + (1585, 'Xebarab'), + (1586, 'Xebarer'), + (1587, 'Xebeker'), + (1588, 'Xebekn'), + (1589, 'Xebektik'), + (1590, 'Xeber'), + (1591, 'Xebtik'), + (1592, 'Xekn'), + (1593, 'Xenaner'), + (1594, 'Xenantik'), + (1595, 'Xenarn'), + (1596, 'Xenoc'), + (1597, 'Xentik'), + (1598, 'Xibantik'), + (1599, 'Xibarer'), + (1600, 'Xiber'), + (1601, 'Xibn'), + (1602, 'Xobanab'), + (1603, 'Xobaner'), + (1604, 'Xobarer'), + (1605, 'Xobarn'), + (1606, 'Xobartik'), + (1607, 'Xobekab'), + (1608, 'Xober'), + (1609, 'Xobn'), + (1610, 'Xobtik'), + (1611, 'Xonab'), + (1612, 'Xonaner'), + (1613, 'Xonann'), + (1614, 'Xonantik'), + (1615, 'Xonarn'), + (1616, 'Xonartik'), + (1617, 'Xoner'), + (1618, 'Xonn'), + (1619, 'Xonober'), + (1620, 'Xonobn'), + (1621, 'Xosaner'), + (1622, 'Xosantik'), + (1623, 'Xosarn'), + (1624, 'Xoser'), + (1625, 'Xostik'), + (1626, 'Xpvaluuin'), + (1627, 'Xris'), + (1628, 'Xuxhu'), + (1629, 'XXXXXX'), + (1630, 'Yojimbo'), + (1631, 'Youredumblol'), + (1632, 'Yours'), + (1633, 'Yucha'), + (1634, 'Yuukari'), + (1635, 'Zabanab'), + (1636, 'Zabaner'), + (1637, 'Zabann'), + (1638, 'Zabantik'), + (1639, 'Zabarab'), + (1640, 'Zabarer'), + (1641, 'Zabarn'), + (1642, 'Zabobab'), + (1643, 'Zabobtik'), + (1644, 'Zack'), + (1645, 'Zaknafein'), + (1646, 'Zalu'), + (1647, 'Zaner'), + (1648, 'Zann'), + (1649, 'Zanti'), + (1650, 'Zaraner'), + (1651, 'Zarer'), + (1652, 'Zarn'), + (1653, 'Zarny'), + (1654, 'Zartik'), + (1655, 'Zasann'), + (1656, 'Zaseker'), + (1657, 'Zasn'), + (1658, 'Zebarer'), + (1659, 'Zebekn'), + (1660, 'Zeber'), + (1661, 'Zebn'), + (1662, 'Zekab'), + (1663, 'Zeke'), + (1664, 'Zeker'), + (1665, 'Zekn'), + (1666, 'Zenanab'), + (1667, 'Zenarer'), + (1668, 'Zenekab'), + (1669, 'Zeneker'), + (1670, 'Zenekn'), + (1671, 'Zenektik'), + (1672, 'Zenn'), + (1673, 'Zeno'), + (1674, 'Zenober'), + (1675, 'Zentik'), + (1676, 'Zeucada'), + (1677, 'Zeus'), + (1678, 'Zibann'), + (1679, 'Zibantik'), + (1680, 'Zibarer'), + (1681, 'Zibartik'), + (1682, 'Zibeker'), + (1683, 'Ziber'), + (1684, 'Zibtik'), + (1685, 'Ziggy'), + (1686, 'Ziphyr'), + (1687, 'Zippy'), + (1688, 'Zobaner'), + (1689, 'Zobantik'), + (1690, 'Zobn'), + (1691, 'Zobobab'), + (1692, 'Zonaner'), + (1693, 'Zonantik'), + (1694, 'Zonarab'), + (1695, 'Zonarn'), + (1696, 'Zonartik'), + (1697, 'Zoneker'), + (1698, 'Zoner'), + (1699, 'Zonobtik'), + (1700, 'Zontik'), + (1701, 'Zosann'), + (1702, 'Zosarab'), + (1703, 'Zosarn'), + (1704, 'Zosartik'), + (1705, 'Zoseker'), + (1706, 'Zosekn'), + (1707, '\\aITEM -1034168081 -1184561711:Konobtik\\/a'); +INSERT INTO `table_versions` (`name`,`version`,`download_version`) values ('spawn_pet_names',1,0); +UPDATE `table_versions` SET `download_version`=1 WHERE `name`='spawn_pet_names'; +DROP TABLE IF EXISTS `spawn_scripts`; +CREATE TABLE IF NOT EXISTS `spawn_scripts` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `spawn_id` int(10) unsigned NOT NULL DEFAULT '0', + `spawnentry_id` int(10) unsigned NOT NULL DEFAULT '0', + `spawn_location_id` int(10) unsigned NOT NULL DEFAULT '0', + `lua_script` varchar(255) COLLATE latin1_general_ci NOT NULL DEFAULT ' ', + PRIMARY KEY (`id`) +) ENGINE=InnoDB AUTO_INCREMENT=139940 DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci; +INSERT INTO `table_versions` (`name`,`version`,`download_version`) values ('spawn_scripts',1,0); +DROP TABLE IF EXISTS `spawn_signs`; +CREATE TABLE IF NOT EXISTS `spawn_signs` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `spawn_id` int(10) unsigned NOT NULL DEFAULT '0', + `type` enum('Zone','Generic') COLLATE latin1_general_ci NOT NULL DEFAULT 'Generic', + `zone_id` int(10) unsigned NOT NULL DEFAULT '0', + `widget_id` int(10) unsigned NOT NULL DEFAULT '0', + `title` varchar(250) COLLATE latin1_general_ci DEFAULT NULL, + `widget_x` float NOT NULL DEFAULT '0', + `widget_y` float NOT NULL DEFAULT '0', + `widget_z` float NOT NULL DEFAULT '0', + `icon` smallint(6) NOT NULL DEFAULT '0', + `description` text COLLATE latin1_general_ci NOT NULL, + `sign_distance` float NOT NULL DEFAULT '0', + `zone_x` float NOT NULL DEFAULT '0', + `zone_y` float NOT NULL DEFAULT '0', + `zone_z` float NOT NULL DEFAULT '0', + `zone_heading` float NOT NULL DEFAULT '0', + `include_heading` tinyint(3) unsigned NOT NULL DEFAULT '1', + `include_location` tinyint(3) unsigned NOT NULL DEFAULT '1', + PRIMARY KEY (`id`), + UNIQUE KEY `SpawnIDX` (`spawn_id`), + CONSTRAINT `FK_signs_spawn` FOREIGN KEY (`spawn_id`) REFERENCES `spawn` (`id`) ON DELETE CASCADE ON UPDATE CASCADE +) ENGINE=InnoDB AUTO_INCREMENT=4700 DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci; +INSERT INTO `table_versions` (`name`,`version`,`download_version`) values ('spawn_signs',1,0); +DROP TABLE IF EXISTS `spawn_templates`; +CREATE TABLE IF NOT EXISTS `spawn_templates` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `name` varchar(64) COLLATE latin1_general_ci NOT NULL DEFAULT '', + `spawn_location_id` int(10) unsigned NOT NULL DEFAULT '0', + PRIMARY KEY (`id`), + UNIQUE KEY `TemplateName` (`name`) +) ENGINE=InnoDB AUTO_INCREMENT=58 DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci; +INSERT INTO `table_versions` (`name`,`version`,`download_version`) values ('spawn_templates',1,0); +DROP TABLE IF EXISTS `spawn_widgets`; +CREATE TABLE IF NOT EXISTS `spawn_widgets` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `spawn_id` int(10) unsigned NOT NULL, + `widget_id` int(10) unsigned NOT NULL DEFAULT '0', + `widget_x` float NOT NULL DEFAULT '0', + `widget_y` float NOT NULL DEFAULT '0', + `widget_z` float NOT NULL DEFAULT '0', + `include_heading` tinyint(3) unsigned NOT NULL DEFAULT '1', + `include_location` tinyint(3) unsigned NOT NULL DEFAULT '1', + `icon` tinyint(3) unsigned NOT NULL DEFAULT '4', + `type` enum('Generic','Door') COLLATE latin1_general_ci NOT NULL DEFAULT 'Generic', + `open_heading` float NOT NULL DEFAULT '-1', + `closed_heading` float NOT NULL DEFAULT '-1', + `open_x` float NOT NULL DEFAULT '0', + `open_y` float NOT NULL DEFAULT '0', + `open_z` float NOT NULL DEFAULT '0', + `action_spawn_id` int(10) unsigned NOT NULL DEFAULT '0', + `open_sound_file` varchar(255) COLLATE latin1_general_ci NOT NULL DEFAULT '0', + `close_sound_file` varchar(255) COLLATE latin1_general_ci NOT NULL DEFAULT '0', + `open_duration` smallint(5) unsigned NOT NULL DEFAULT '10', + `close_x` float NOT NULL, + `close_y` float NOT NULL DEFAULT '0', + `close_z` float NOT NULL DEFAULT '0', + `linked_spawn_id` int(10) unsigned NOT NULL DEFAULT '0', + `house_id` int(10) unsigned NOT NULL DEFAULT '0', + PRIMARY KEY (`id`), + UNIQUE KEY `SpawnIDX` (`spawn_id`), + KEY `WidgetIDX` (`widget_id`), + CONSTRAINT `FK_widgets_spawn` FOREIGN KEY (`spawn_id`) REFERENCES `spawn` (`id`) ON DELETE CASCADE ON UPDATE CASCADE +) ENGINE=InnoDB AUTO_INCREMENT=5561 DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci; +ALTER TABLE `spawn_widgets` + CHANGE COLUMN `type` `type` ENUM('Generic','Door','Lift') NOT NULL DEFAULT 'Generic' COLLATE 'latin1_general_ci' AFTER `icon`; +INSERT INTO `table_versions` (`name`,`version`,`download_version`) values ('spawn_widgets',73027,0); +DROP TABLE IF EXISTS `spell_aa`; +CREATE TABLE IF NOT EXISTS `spell_aa` ( + `id` int(10) NOT NULL AUTO_INCREMENT, + `spell_id` int(10) unsigned NOT NULL DEFAULT '0', + `group` tinyint(3) unsigned NOT NULL DEFAULT '0', + `icon` mediumint(8) unsigned NOT NULL DEFAULT '0', + `icon2` mediumint(8) unsigned NOT NULL DEFAULT '0', + `col` tinyint(3) unsigned NOT NULL DEFAULT '0', + `row` tinyint(3) unsigned NOT NULL DEFAULT '0', + `rank_cost` tinyint(3) unsigned NOT NULL DEFAULT '0', + `max_cost` tinyint(3) unsigned NOT NULL DEFAULT '0', + `rank_prereq_id` int(10) unsigned NOT NULL DEFAULT '0', + `rank_prereq` tinyint(3) unsigned NOT NULL DEFAULT '0', + `class_req` tinyint(3) unsigned NOT NULL DEFAULT '255', + `tier` tinyint(3) unsigned NOT NULL DEFAULT '0', + `req_points` tinyint(3) unsigned NOT NULL DEFAULT '0', + `class_name` varchar(50) COLLATE latin1_general_ci DEFAULT NULL, + `subclass_name` varchar(50) COLLATE latin1_general_ci DEFAULT NULL, + `line_title` varchar(50) COLLATE latin1_general_ci DEFAULT NULL, + `aa_type` varchar(32) COLLATE latin1_general_ci DEFAULT NULL, + PRIMARY KEY (`id`), + KEY `FK_spell_aa` (`spell_id`), + CONSTRAINT `FK_spell_aa` FOREIGN KEY (`spell_id`) REFERENCES `spells` (`id`) ON UPDATE CASCADE +) ENGINE=InnoDB DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci; +DROP TABLE IF EXISTS `spell_aa`; +INSERT INTO `table_versions` (`name`,`version`,`download_version`) values ('spell_aa',73033,0); +DROP TABLE IF EXISTS `spell_aa_class_list`; +CREATE TABLE IF NOT EXISTS `spell_aa_class_list` ( + `id` int(10) NOT NULL AUTO_INCREMENT, + `class_id` int(10) NOT NULL DEFAULT '0', + `tree_node` int(10) NOT NULL DEFAULT '0', + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci; +ALTER TABLE `spell_aa_class_list` + ADD COLUMN `aa_tree_id` INT(10) UNSIGNED NOT NULL AFTER `tree_node`; + +INSERT INTO `table_versions` (`name`,`version`,`download_version`) values ('spell_aa_class_list',73034,0); +DROP TABLE IF EXISTS `spell_aa_list`; +CREATE TABLE IF NOT EXISTS `spell_aa_list` ( + `list_id` int(10) unsigned NOT NULL, + `name` varchar(64) NOT NULL DEFAULT '', + `level` tinyint(3) unsigned NOT NULL DEFAULT '0', + `maximumpoints` tinyint(3) unsigned NOT NULL DEFAULT '0', + `maxpoints` smallint(5) unsigned NOT NULL DEFAULT '0', + `minimumpointsrequired` smallint(5) unsigned NOT NULL DEFAULT '0', + `iswardertree` tinyint(1) NOT NULL DEFAULT '0', + `last_update` float NOT NULL DEFAULT '0', + `ts` float NOT NULL, + `version` tinyint(3) unsigned NOT NULL DEFAULT '0', + PRIMARY KEY (`list_id`) +) ENGINE=InnoDB DEFAULT CHARSET=latin1; +insert into `spell_aa_list`(`list_id`,`name`,`level`,`maximumpoints`,`maxpoints`,`minimumpointsrequired`,`iswardertree`,`last_update`,`ts`,`version`) values +(1,'Bard',10,0,100,0,0,1384380000,1384380000,2), +(2,'Brawler',10,0,100,0,0,1384380000,1384380000,2), +(3,'Cleric',10,0,100,0,0,1384380000,1384380000,2), +(4,'Crusader',10,0,100,0,0,1384380000,1384380000,2), +(5,'Druid',10,0,100,0,0,1384380000,1384380000,2), +(6,'Enchanter',10,0,100,0,0,1384290000,1384290000,2), +(7,'Predator',10,0,100,0,0,1384380000,1384380000,2), +(8,'Rogue',10,0,100,0,0,1384370000,1384370000,2), +(9,'Shaman',10,0,100,0,0,1384370000,1384370000,2), +(10,'Sorcerer',10,0,100,0,0,1384380000,1384380000,2), +(11,'Summoner',10,0,100,0,0,1384380000,1384380000,2), +(12,'Warrior',10,0,100,0,0,1384380000,1384380000,2), +(13,'Guardian',10,0,100,0,0,1384380000,1384380000,2), +(14,'Berserker',10,0,100,0,0,1384380000,1384380000,2), +(15,'Paladin',10,0,100,0,0,1384380000,1384380000,2), +(16,'Shadowknight',10,0,100,0,0,1384380000,1384380000,2), +(17,'Monk',10,0,100,0,0,1384380000,1384380000,2), +(18,'Bruiser',10,0,100,0,0,1384380000,1384380000,2), +(19,'Assassin',10,0,100,0,0,1384380000,1384380000,2), +(20,'Ranger',10,0,100,0,0,1384370000,1384370000,2), +(21,'Brigand',10,0,100,0,0,1384380000,1384380000,2), +(22,'Swashbuckler',10,0,100,0,0,1384380000,1384380000,2), +(23,'Dirge',10,0,100,0,0,1384380000,1384380000,2), +(24,'Troubador',10,0,100,0,0,1384380000,1384380000,2), +(25,'Templar',10,0,100,0,0,1384380000,1384380000,2), +(26,'Inquisitor',10,0,100,0,0,1384380000,1384380000,2), +(27,'Warden',10,0,100,0,0,1384380000,1384380000,2), +(28,'Fury',10,0,100,0,0,1384380000,1384380000,2), +(29,'Mystic',10,0,100,0,0,1384380000,1384380000,2), +(30,'Defiler',10,0,100,0,0,1384380000,1384380000,2), +(31,'Wizard',10,0,100,0,0,1384380000,1384380000,2), +(32,'Warlock',10,0,100,0,0,1384380000,1384380000,2), +(33,'Conjuror',10,0,100,0,0,1384380000,1384380000,2), +(34,'Necromancer',10,0,100,0,0,1384380000,1384380000,2), +(35,'Coercer',10,0,100,0,0,1384380000,1384380000,2), +(36,'Illusionist',10,0,100,0,0,1384370000,1384370000,2), +(37,'Shadows',10,0,100,0,0,1384380000,1384380000,2), +(38,'Shadows',10,0,100,0,0,1384380000,1384380000,2), +(39,'Shadows',10,0,100,0,0,1384380000,1384380000,2), +(40,'Shadows',10,0,100,0,0,1384380000,1384380000,2), +(41,'Shadows',10,0,100,0,0,1384380000,1384380000,2), +(42,'Shadows',10,0,100,0,0,1384380000,1384380000,2), +(43,'Shadows',10,0,100,0,0,1384380000,1384380000,2), +(44,'Shadows',10,0,100,0,0,1384380000,1384380000,2), +(45,'Shadows',10,0,100,0,0,1384380000,1384380000,2), +(46,'Shadows',10,0,100,0,0,1384290000,1384290000,2), +(47,'Shadows',10,0,100,0,0,1384370000,1384370000,2), +(48,'Shadows',10,0,100,0,0,1384370000,1384370000,2), +(49,'Shadows',10,0,100,0,0,1384380000,1384380000,2), +(50,'Shadows',10,0,100,0,0,1384380000,1384380000,2), +(51,'Shadows',10,0,100,0,0,1384380000,1384380000,2), +(52,'Shadows',10,0,100,0,0,1384380000,1384380000,2), +(53,'Shadows',10,0,100,0,0,1384380000,1384380000,2), +(54,'Shadows',10,0,100,0,0,1384380000,1384380000,2), +(55,'Shadows',10,0,100,0,0,1384380000,1384380000,2), +(56,'Shadows',10,0,100,0,0,1384380000,1384380000,2), +(57,'Shadows',10,0,100,0,0,1384380000,1384380000,2), +(58,'Shadows',10,0,100,0,0,1384380000,1384380000,2), +(59,'Shadows',10,0,100,0,0,1384380000,1384380000,2), +(60,'Shadows',10,0,100,0,0,1384380000,1384380000,2), +(61,'Heroic',10,0,100,0,0,1384380000,1384380000,2), +(62,'Heroic',10,0,100,0,0,1384380000,1384380000,2), +(63,'Heroic',10,0,100,0,0,1384380000,1384380000,2), +(64,'Heroic',10,0,100,0,0,1384290000,1384290000,2), +(65,'Heroic',10,0,100,0,0,1384380000,1384380000,2), +(66,'Heroic',10,0,100,0,0,1384380000,1384380000,2), +(67,'Heroic',10,0,100,0,0,1384380000,1384380000,2), +(68,'Heroic',10,0,100,0,0,1384380000,1384380000,2), +(69,'Heroic',10,0,100,0,0,1384370000,1384370000,2), +(70,'Heroic',10,0,100,0,0,1384380000,1384380000,2), +(71,'Heroic',10,0,100,0,0,1384370000,1384370000,2), +(72,'Heroic',10,0,100,0,0,1384380000,1384380000,2), +(73,'Tradeskill',10,0,40,0,0,1384380000,1384380000,2), +(74,'Animalist',10,0,100,0,0,1384380000,1384380000,2), +(75,'Beastlord',10,0,100,0,0,1384380000,1384380000,2), +(76,'Shadows',10,0,100,0,0,1384380000,1384380000,2), +(77,'Heroic',10,0,100,0,0,1384380000,1384380000,2), +(78,'Aquatic',20,0,40,0,0,1384290000,1384290000,2), +(79,'Canine',20,0,40,0,0,1384380000,1384380000,2), +(80,'Feline',20,0,40,0,0,1384380000,1384380000,2), +(81,'Avian',20,0,40,0,0,1384380000,1384380000,2), +(82,'Bat',20,0,40,0,0,1384380000,1384380000,2), +(83,'Reptile',20,0,40,0,0,1384290000,1384290000,2), +(84,'Bear',20,0,40,0,0,1384380000,1384380000,2), +(85,'Boar',20,0,40,0,0,1384290000,1384290000,2), +(86,'Bovid',20,0,40,0,0,1384380000,1384380000,2), +(87,'War Boar',20,0,40,0,0,1384380000,1384380000,2), +(88,'Mystical',20,0,40,0,0,1384380000,1384380000,2), +(89,'Simian',20,0,40,0,0,1384380000,1384380000,2), +(90,'Amphibian',20,0,40,0,0,1384290000,1384290000,2), +(91,'Dire',20,0,40,0,0,1384380000,1384380000,2), +(92,'Drake',20,0,40,0,0,1384380000,1384380000,2), +(93,'Enchanted',20,0,40,0,0,1384370000,1384370000,2), +(94,'Rodent',20,0,40,0,0,1384380000,1384380000,2), +(95,'Insect',20,0,40,0,0,1384380000,1384380000,2), +(96,'Prestige',90,0,25,0,0,1384380000,1384380000,2), +(97,'Prestige',90,0,25,0,0,1384370000,1384370000,2), +(98,'Prestige',90,0,25,0,0,1384380000,1384380000,2), +(99,'Prestige',90,0,25,0,0,1384290000,1384290000,2), +(100,'Prestige',90,0,25,0,0,1384380000,1384380000,2), +(101,'Prestige',90,0,25,0,0,1384380000,1384380000,2), +(102,'Prestige',90,0,25,0,0,1384290000,1384290000,2), +(103,'Prestige',90,0,25,0,0,1384380000,1384380000,2), +(104,'Prestige',90,0,25,0,0,1384380000,1384380000,2), +(105,'Prestige',90,0,25,0,0,1384380000,1384380000,2), +(106,'Prestige',90,0,25,0,0,1384290000,1384290000,2), +(107,'Prestige',90,0,25,0,0,1384380000,1384380000,2), +(108,'Prestige',90,0,25,0,0,1384380000,1384380000,2), +(109,'Prestige',90,0,25,0,0,1384380000,1384380000,2), +(110,'Prestige',90,0,25,0,0,1384380000,1384380000,2), +(111,'Prestige',90,0,25,0,0,1384380000,1384380000,2), +(112,'Prestige',90,0,25,0,0,1384380000,1384380000,2), +(113,'Prestige',90,0,25,0,0,1384380000,1384380000,2), +(114,'Prestige',90,0,25,0,0,1384380000,1384380000,2), +(115,'Prestige',90,0,25,0,0,1384380000,1384380000,2), +(116,'Prestige',90,0,25,0,0,1384380000,1384380000,2), +(117,'Prestige',90,0,25,0,0,1384380000,1384380000,2), +(118,'Prestige',90,0,25,0,0,1384380000,1384380000,2), +(119,'Prestige',90,0,25,0,0,1384380000,1384380000,2), +(120,'Prestige',90,0,25,0,0,1384370000,1384370000,2), +(121,'Tradeskill Prestige',90,0,25,0,0,1384380000,1384380000,2), +(122,'Shaper',10,0,100,0,0,1384380000,1384380000,2), +(123,'Channeler',10,0,100,0,0,1384380000,1384380000,2), +(124,'Shadows',10,0,100,0,0,1384380000,1384380000,2), +(125,'Heroic',10,0,100,0,0,1384380000,1384380000,2), +(126,'Prestige',90,0,25,0,0,1384380000,1384380000,2), +(127,'Dragon',10,0,100,0,0,1384380000,1384380000,2), +(128,'Dragon',10,0,100,0,0,1384380000,1384380000,2), +(129,'Dragon',10,0,100,0,0,1384380000,1384380000,2), +(130,'Dragon',10,0,100,0,0,1384290000,1384290000,2), +(132,'Prismatic',95,0,25,0,0,1384290000,1384290000,2), +(158,'Far Seas',95,0,25,0,0,1384290000,1384290000,2); + +DROP TABLE IF EXISTS `spell_aa_list`; +CREATE TABLE `spell_aa_list` ( + `list_id` int(10) unsigned NOT NULL, + `name` varchar(64) COLLATE latin1_general_ci NOT NULL DEFAULT '', + `level` tinyint(3) unsigned NOT NULL DEFAULT '0', + `maximumpoints` tinyint(3) unsigned NOT NULL DEFAULT '0', + `maxpoints` smallint(5) unsigned NOT NULL DEFAULT '0', + `minimumpointsrequired` smallint(5) unsigned NOT NULL DEFAULT '0', + `iswardertree` tinyint(1) NOT NULL DEFAULT '0', + `last_update` float NOT NULL DEFAULT '0', + `ts` float NOT NULL, + `version` tinyint(3) unsigned NOT NULL DEFAULT '0', + PRIMARY KEY (`list_id`) +) ENGINE=InnoDB DEFAULT CHARSET=latin1 COLLATE latin1_general_ci; +INSERT INTO `table_versions` (`name`,`version`,`download_version`) values ('spell_aa_list',73035,0); +UPDATE `table_versions` SET `download_version`=1 WHERE `name`='spell_aa_list'; +DROP TABLE IF EXISTS `spell_aa_nodelist`; +CREATE TABLE IF NOT EXISTS `spell_aa_nodelist` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `aa_list_fk` int(10) unsigned NOT NULL DEFAULT '0', + `classification` varchar(64) COLLATE latin1_general_ci NOT NULL DEFAULT '', + `classificationpointsrequired` tinyint(3) unsigned NOT NULL DEFAULT '0', + `description` text COLLATE latin1_general_ci, + `firstparentid` int(10) unsigned NOT NULL DEFAULT '0', + `firstparentrequiredtier` tinyint(3) unsigned NOT NULL DEFAULT '0', + `maxtier` tinyint(3) unsigned NOT NULL DEFAULT '0', + `minlevel` tinyint(3) unsigned NOT NULL DEFAULT '0', + `name` varchar(64) COLLATE latin1_general_ci NOT NULL DEFAULT '', + `nodeid` int(10) unsigned NOT NULL DEFAULT '0', + `pointspertier` smallint(5) unsigned NOT NULL DEFAULT '0', + `pointsspentgloballytounlock` smallint(5) unsigned NOT NULL DEFAULT '0', + `pointsspentintreetounlock` smallint(5) unsigned NOT NULL DEFAULT '0', + `spellcrc` int(10) unsigned NOT NULL DEFAULT '0', + `title` varchar(64) COLLATE latin1_general_ci NOT NULL DEFAULT '', + `titlelevel` tinyint(3) unsigned NOT NULL DEFAULT '0', + `xcoord` tinyint(3) unsigned NOT NULL DEFAULT '0', + `ycoord` tinyint(3) unsigned NOT NULL DEFAULT '0', + `icon_backdrop` int(10) DEFAULT '0', + `icon_id` int(10) DEFAULT '0', + PRIMARY KEY (`id`) +) ENGINE=InnoDB AUTO_INCREMENT=3085 DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci; + +DROP TABLE IF EXISTS `spell_aa_nodelist`; + +CREATE TABLE `spell_aa_nodelist` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `aa_list_fk` int(10) unsigned NOT NULL DEFAULT '0', + `displayedclassification` varchar(64) COLLATE latin1_general_ci NOT NULL DEFAULT '', + `requiredclassification` varchar(64) COLLATE latin1_general_ci NOT NULL DEFAULT '', + `classificationpointsrequired` tinyint(3) unsigned NOT NULL DEFAULT '0', + `description` text, + `firstparentid` int(10) unsigned NOT NULL DEFAULT '0', + `firstparentrequiredtier` tinyint(3) unsigned NOT NULL DEFAULT '0', + `maxtier` tinyint(3) unsigned NOT NULL DEFAULT '0', + `minlevel` tinyint(3) unsigned NOT NULL DEFAULT '0', + `name` varchar(64) COLLATE latin1_general_ci NOT NULL DEFAULT '', + `nodeid` int(10) unsigned NOT NULL DEFAULT '0', + `pointspertier` smallint(5) unsigned NOT NULL DEFAULT '0', + `pointsspentgloballytounlock` smallint(5) unsigned NOT NULL DEFAULT '0', + `pointsspentintreetounlock` smallint(5) unsigned NOT NULL DEFAULT '0', + `spellcrc` int(10) unsigned NOT NULL DEFAULT '0', + `title` varchar(64) COLLATE latin1_general_ci NOT NULL DEFAULT '', + `titlelevel` tinyint(3) unsigned NOT NULL DEFAULT '0', + `xcoord` tinyint(3) unsigned NOT NULL DEFAULT '0', + `ycoord` tinyint(3) unsigned NOT NULL DEFAULT '0', + `icon_backdrop` int(10) DEFAULT '0', + `icon_id` int(10) DEFAULT '0', + PRIMARY KEY (`id`) +) ENGINE=InnoDB AUTO_INCREMENT=3085 DEFAULT CHARSET=latin1 COLLATE latin1_general_ci; +INSERT INTO `table_versions` (`name`,`version`,`download_version`) values ('spell_aa_nodelist',73036,0); +DROP TABLE IF EXISTS `spell_aa_tablist`; +create table `spell_aa_tablist` ( + `id` tinyint (3), + `tab_string` text , + `tab_group` tinyint (4) +); +insert into `spell_aa_tablist` (`id`, `tab_string`, `tab_group`) values('1',':es24a58bd8fcaac8c2:All','0'); +insert into `spell_aa_tablist` (`id`, `tab_string`, `tab_group`) values('2',':410385c727bd47a6:Racial Innate','0'); +insert into `spell_aa_tablist` (`id`, `tab_string`, `tab_group`) values('3',':410385c75a96e23c:Tradeskill Advancement','0'); +insert into `spell_aa_tablist` (`id`, `tab_string`, `tab_group`) values('4',':410385c744f1fd99:Focus Effects','0'); +insert into `spell_aa_tablist` (`id`, `tab_string`, `tab_group`) values('5',':410385c71edd2a66:Heroic','0'); +insert into `spell_aa_tablist` (`id`, `tab_string`, `tab_group`) values('6',':410385c76ee6239f:Shadows','0'); +insert into `spell_aa_tablist` (`id`, `tab_string`, `tab_group`) values('7',':410385c7e678b977:Prestige','0'); +insert into `spell_aa_tablist` (`id`, `tab_string`, `tab_group`) values('8',':410385c77ee422d7:Animalist','0'); +insert into `spell_aa_tablist` (`id`, `tab_string`, `tab_group`) values('9',':410385c7f165af77:Bard','0'); +insert into `spell_aa_tablist` (`id`, `tab_string`, `tab_group`) values('10',':410385c7421b9375:Brawler','0'); +insert into `spell_aa_tablist` (`id`, `tab_string`, `tab_group`) values('11',':410385c7a03ae7d1:Cleric','0'); +insert into `spell_aa_tablist` (`id`, `tab_string`, `tab_group`) values('12',':410385c7c9605e9f:Crusader','0'); +insert into `spell_aa_tablist` (`id`, `tab_string`, `tab_group`) values('13',':410385c7f9424168:Druid','0'); +insert into `spell_aa_tablist` (`id`, `tab_string`, `tab_group`) values('14',':410385c79cb9556c:Enchanter','0'); +insert into `spell_aa_tablist` (`id`, `tab_string`, `tab_group`) values('15',':410385c70c8b6aa4:Predator','0'); +insert into `spell_aa_tablist` (`id`, `tab_string`, `tab_group`) values('16',':410385c73a43b6dd:Rogue','0'); +insert into `spell_aa_tablist` (`id`, `tab_string`, `tab_group`) values('17',':410385c759fe7d15:Sorcerer','0'); +insert into `spell_aa_tablist` (`id`, `tab_string`, `tab_group`) values('18',':410385c7ad610aca:Summoner','0'); +insert into `spell_aa_tablist` (`id`, `tab_string`, `tab_group`) values('19',':410385c71e056728:Warrior','0'); +insert into `spell_aa_tablist` (`id`, `tab_string`, `tab_group`) values('20',':410385c7ba864c0b:Assassin','0'); +insert into `spell_aa_tablist` (`id`, `tab_string`, `tab_group`) values('21',':410385c7b8116aad:Beastlord','0'); +insert into `spell_aa_tablist` (`id`, `tab_string`, `tab_group`) values('22',':410385c7f53feb7b:Berserker','0'); +insert into `spell_aa_tablist` (`id`, `tab_string`, `tab_group`) values('23',':410385c73d8a70e2:Brigand','0'); +insert into `spell_aa_tablist` (`id`, `tab_string`, `tab_group`) values('24',':410385c770c766d6:Bruiser','0'); +insert into `spell_aa_tablist` (`id`, `tab_string`, `tab_group`) values('25',':410385c79226984b:Coercer','0'); +insert into `spell_aa_tablist` (`id`, `tab_string`, `tab_group`) values('26',':410385c70c58bb30:Conjurer','0'); +insert into `spell_aa_tablist` (`id`, `tab_string`, `tab_group`) values('27',':410385c73dfe68d0:Defiler','0'); +insert into `spell_aa_tablist` (`id`, `tab_string`, `tab_group`) values('28',':410385c792919a6b:Dirge','0'); +insert into `spell_aa_tablist` (`id`, `tab_string`, `tab_group`) values('29',':410385c7062e5f55:Fury','0'); +insert into `spell_aa_tablist` (`id`, `tab_string`, `tab_group`) values('30',':410385c762c1fdfc:Guardian','0'); +insert into `spell_aa_tablist` (`id`, `tab_string`, `tab_group`) values('31',':410385c78addfbf4:Illusionist','0'); +insert into `spell_aa_tablist` (`id`, `tab_string`, `tab_group`) values('32',':410385c7ece054a7:Inquisitor','0'); +insert into `spell_aa_tablist` (`id`, `tab_string`, `tab_group`) values('33',':410385c7d550d2e7:Monk','0'); +insert into `spell_aa_tablist` (`id`, `tab_string`, `tab_group`) values('34',':410385c743cfeaa2:Mystic','0'); +insert into `spell_aa_tablist` (`id`, `tab_string`, `tab_group`) values('35',':410385c7f63c9c8c:Necromancer','0'); +insert into `spell_aa_tablist` (`id`, `tab_string`, `tab_group`) values('36',':410385c70c5de0ae:Paladin','0'); +insert into `spell_aa_tablist` (`id`, `tab_string`, `tab_group`) values('37',':410385c79bc97b3a:Ranger','0'); +insert into `spell_aa_tablist` (`id`, `tab_string`, `tab_group`) values('38',':410385c78fbd2256:Shadowknight','0'); +insert into `spell_aa_tablist` (`id`, `tab_string`, `tab_group`) values('39',':410385c7781cc625:Shaman','0'); +insert into `spell_aa_tablist` (`id`, `tab_string`, `tab_group`) values('40',':410385c77eecdcdb:Swashbuckler','0'); +insert into `spell_aa_tablist` (`id`, `tab_string`, `tab_group`) values('41',':410385c7648d181e:Templar','0'); +insert into `spell_aa_tablist` (`id`, `tab_string`, `tab_group`) values('42',':410385c78df47d77:Troubador','0'); +insert into `spell_aa_tablist` (`id`, `tab_string`, `tab_group`) values('43',':410385c7c78ce0b8:Warden','0'); +insert into `spell_aa_tablist` (`id`, `tab_string`, `tab_group`) values('44',':410385c76290dcfa:Warlock','0'); +insert into `spell_aa_tablist` (`id`, `tab_string`, `tab_group`) values('45',':410385c7d1d52cf5:Wizard','0'); +insert into `spell_aa_tablist` (`id`, `tab_string`, `tab_group`) values('46',':410385c71c8f6f4d:Shaper','0'); +insert into `spell_aa_tablist` (`id`, `tab_string`, `tab_group`) values('47',':410385c72f6e354d:Channeler','0'); +insert into `spell_aa_tablist` (`id`, `tab_string`, `tab_group`) values('48',':410385c7df8bd37d:Dragon','0'); + +INSERT INTO `table_versions` (`name`,`version`,`download_version`) values ('spell_aa_tablist',73032,0); +UPDATE `table_versions` SET `download_version`=1 WHERE `name`='spell_aa_tablist'; +DROP TABLE IF EXISTS `spell_classes`; +CREATE TABLE IF NOT EXISTS `spell_classes` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `spell_id` int(10) unsigned NOT NULL DEFAULT '0', + `adventure_class_id` tinyint(3) unsigned NOT NULL DEFAULT '255', + `tradeskill_class_id` tinyint(3) unsigned NOT NULL DEFAULT '255', + `level` tinyint(3) unsigned NOT NULL DEFAULT '1', + PRIMARY KEY (`id`), + KEY `FK_spell_classes` (`spell_id`), + CONSTRAINT `FK_spell_classes` FOREIGN KEY (`spell_id`) REFERENCES `spells` (`id`) ON DELETE CASCADE ON UPDATE CASCADE +) ENGINE=InnoDB AUTO_INCREMENT=6702 DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci; +INSERT INTO `table_versions` (`name`,`version`,`download_version`) values ('spell_classes',1,0); +DROP TABLE IF EXISTS `spell_data`; +CREATE TABLE IF NOT EXISTS `spell_data` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `spell_id` int(10) unsigned NOT NULL DEFAULT '0', + `tier` int(10) unsigned NOT NULL DEFAULT '1', + `index_field` tinyint(3) unsigned NOT NULL DEFAULT '0', + `value_type` enum('INT','FLOAT','BOOL','STRING') COLLATE latin1_general_ci NOT NULL DEFAULT 'INT', + `value` varchar(255) COLLATE latin1_general_ci NOT NULL DEFAULT '0', + `value2` varchar(255) COLLATE latin1_general_ci NOT NULL DEFAULT '0', + PRIMARY KEY (`id`), + UNIQUE KEY `SpellTierIDX` (`spell_id`,`tier`,`index_field`), + CONSTRAINT `FK_spell_data` FOREIGN KEY (`spell_id`) REFERENCES `spells` (`id`) ON DELETE CASCADE ON UPDATE CASCADE +) ENGINE=InnoDB AUTO_INCREMENT=28231 DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci; +ALTER TABLE `spell_data` + ADD COLUMN `dynamic_helper` VARCHAR(255) NOT NULL DEFAULT '0' AFTER `value2`; +INSERT INTO `table_versions` (`name`,`version`,`download_version`) values ('spell_data',73038,0); +DROP TABLE IF EXISTS `spell_display_effects`; +CREATE TABLE IF NOT EXISTS `spell_display_effects` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `spell_id` int(10) unsigned NOT NULL DEFAULT '0', + `tier` tinyint(3) unsigned NOT NULL DEFAULT '1', + `percentage` tinyint(3) unsigned DEFAULT '100', + `description` text COLLATE latin1_general_ci NOT NULL, + `bullet` tinyint(3) unsigned NOT NULL DEFAULT '0', + `index` tinyint(3) unsigned NOT NULL DEFAULT '0', + PRIMARY KEY (`id`), + KEY `FK_spell_display_effects` (`spell_id`), + CONSTRAINT `FK_spell_display_effects` FOREIGN KEY (`spell_id`) REFERENCES `spells` (`id`) ON DELETE CASCADE ON UPDATE CASCADE +) ENGINE=InnoDB AUTO_INCREMENT=139147 DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci; +INSERT INTO `table_versions` (`name`,`version`,`download_version`) values ('spell_display_effects',1,0); +DROP TABLE IF EXISTS `spell_error_versions`; +CREATE TABLE IF NOT EXISTS `spell_error_versions` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `version` smallint(5) unsigned NOT NULL DEFAULT '0', + `error_index` smallint(5) unsigned NOT NULL DEFAULT '0', + `value` smallint(5) unsigned NOT NULL DEFAULT '0', + `name` char(64) COLLATE latin1_general_ci NOT NULL DEFAULT '', + PRIMARY KEY (`id`), + UNIQUE KEY `SpellErrorIDX` (`version`,`error_index`) +) ENGINE=InnoDB AUTO_INCREMENT=329 DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci; +INSERT INTO `spell_error_versions` (`id`, `version`, `error_index`, `value`, `name`) VALUES + (1, 1193, 1, 8, 'SPELL_ERROR_NOT_ENOUGH_KNOWLEDGE'), + (2, 1193, 2, 11, 'SPELL_ERROR_INTERRUPTED'), + (3, 1193, 3, 13, 'SPELL_ERROR_TAKE_EFFECT_MOREPOWERFUL'), + (4, 1193, 4, 14, 'SPELL_ERROR_TAKE_EFFECT_SAMESPELL'), + (5, 1193, 5, 19, 'SPELL_ERROR_CANNOT_CAST_DEAD'), + (6, 1193, 6, 20, 'SPELL_ERROR_NOT_ALIVE'), + (7, 1193, 7, 21, 'SPELL_ERROR_NOT_DEAD'), + (8, 1193, 8, 22, 'SPELL_ERROR_CANNOT_CAST_SITTING'), + (9, 1193, 9, 23, 'SPELL_ERROR_CANNOT_CAST_UNCON'), + (10, 1193, 10, 24, 'SPELL_ERROR_ALREADY_CASTING'), + (11, 1193, 11, 25, 'SPELL_ERROR_RECOVERING'), + (12, 1193, 12, 26, 'SPELL_ERROR_NON_COMBAT_ONLY'), + (13, 1193, 13, 27, 'SPELL_ERROR_CANNOT_CAST_STUNNED'), + (14, 1193, 14, 28, 'SPELL_ERROR_CANNOT_CAST_STIFFLED'), + (15, 1193, 15, 29, 'SPELL_ERROR_CANNOT_CAST_CHARMED'), + (16, 1193, 16, 30, 'SPELL_ERROR_NOT_WHILE_MOUNTED'), + (17, 1193, 17, 31, 'SPELL_ERROR_NOT_WHILE_FLYING'), + (18, 1193, 18, 32, 'SPELL_ERROR_NOT_WHILE_CLIMBING'), + (19, 1193, 19, 33, 'SPELL_ERROR_NOT_READY'), + (20, 1193, 20, 34, 'SPELL_ERROR_CANT_SEE_TARGET'), + (21, 1193, 21, 36, 'SPELL_ERROR_INCORRECT_STANCE'), + (22, 1193, 22, 37, 'SPELL_ERROR_CANNOT_CAST_FEIGNDEATH'), + (23, 1193, 23, 38, 'SPELL_ERROR_INVENTORY_FULL'), + (24, 1193, 24, 39, 'SPELL_ERROR_NOT_ENOUGH_COIN'), + (25, 1193, 25, 40, 'SPELL_ERROR_NOT_ALLOWED_HERE'), + (26, 1193, 26, 41, 'SPELL_ERROR_NOT_WHILE_CRAFTING'), + (27, 1193, 27, 42, 'SPELL_ERROR_ONLY_WHEN_CRAFTING'), + (28, 1193, 28, 45, 'SPELL_ERROR_ITEM_NOT_ATTUNED'), + (29, 1193, 29, 46, 'SPELL_ERROR_ITEM_WORN_OUT'), + (30, 1193, 30, 48, 'SPELL_ERROR_MUST_EQUIP_WEAPON'), + (31, 1193, 31, 49, 'SPELL_ERROR_WEAPON_BROKEN'), + (32, 1193, 32, 50, 'SPELL_ERROR_CANNOT_CAST_FEARED'), + (33, 1193, 33, 51, 'SPELL_ERROR_TARGET_IMMUNE_HOSTILE'), + (34, 1193, 34, 52, 'SPELL_ERROR_TARGET_IMMUNE_BENEFICIAL'), + (35, 1193, 35, 53, 'SPELL_ERROR_NO_TAUNT_SPELLS'), + (36, 1193, 36, 54, 'SPELL_ERROR_CANNOT_USE_IN_BATTLEGROUNDS'), + (37, 1193, 37, 55, 'SPELL_ERROR_CANNOT_PREPARE'), + (38, 1193, 38, 56, 'SPELL_ERROR_NO_ELIGIBLE_TARGET'), + (39, 1193, 39, 57, 'SPELL_ERROR_NO_TARGETS_IN_RANGE'), + (40, 1193, 40, 58, 'SPELL_ERROR_TOO_CLOSE'), + (41, 1193, 41, 59, 'SPELL_ERROR_TOO_FAR_AWAY'), + (42, 1193, 42, 60, 'SPELL_ERROR_TARGET_TOO_WEAK'), + (43, 1193, 43, 61, 'SPELL_ERROR_TARGET_TOO_POWERFUL'), + (44, 1193, 44, 62, 'SPELL_ERROR_WONT_WORK_ON_TARGET'), + (45, 1193, 45, 63, 'SPELL_ERROR_TARGET_INVULNERABLE'), + (46, 1193, 46, 64, 'SPELL_ERROR_TARGET_IMMUNE'), + (47, 1193, 47, 65, 'SPELL_ERROR_TARGET_ENGAGED'), + (48, 1193, 48, 66, 'SPELL_ERROR_TARGET_NOT_GROUPED'), + (49, 1193, 49, 67, 'SPELL_ERROR_TARGET_IN_USE'), + (50, 1193, 50, 68, 'SPELL_ERROR_TARGET_GROUP_HAS_SPELL'), + (51, 1193, 51, 70, 'SPELL_ERROR_TARGET_ALREADY_ENGAGED'), + (52, 1193, 52, 71, 'SPELL_ERROR_CANNOT_ENGAGE'), + (53, 1193, 53, 72, 'SPELL_ERROR_NOT_A_FRIEND'), + (54, 1193, 54, 73, 'SPELL_ERROR_NOT_AN_ENEMY'), + (55, 1193, 55, 74, 'SPELL_ERROR_TARGET_INVENTORY_FULL'), + (56, 1193, 56, 75, 'SPELL_ERROR_FINISH_DUELING_FIRST'), + (57, 1193, 57, 76, 'SPELL_ERROR_ILLEGAL_TARGET_ATTACK'), + (58, 1193, 58, 77, 'SPELL_ERROR_NOT_WHILE_MENTORING_PVP'), + (59, 1193, 59, 78, 'SPELL_ERROR_NOT_WHILE_MENTORING_BENEFICIAL'), + (60, 1193, 60, 79, 'SPELL_ERROR_ILLEGAL_TARGET_HEAL_OUTSIDE_LEVEL_RANGE'), + (61, 1193, 61, 80, 'SPELL_ERROR_NOTHING_TO_CURE'), + (62, 1193, 62, 81, 'SPELL_ERROR_NOT_ENOUGH_POWER'), + (63, 1193, 63, 82, 'SPELL_ERROR_NOT_ENOUGH_HEALTH'), + (64, 1193, 64, 83, 'SPELL_ERROR_NOT_ENOUGH_CONC'), + (65, 1193, 65, 84, 'SPELL_ERROR_MISSING_COMPONENT'), + (66, 1193, 66, 85, 'SPELL_ERROR_OUT_OF_CHARGES'), + (67, 1193, 67, 86, 'SPELL_ERROR_LACK_AMMO'), + (68, 1193, 68, 87, 'SPELL_ERROR_NO_RANGED_EQUIPPED'), + (69, 1193, 69, 88, 'SPELL_ERROR_RANGED_NEEDS_REPAIR'), + (70, 1193, 70, 89, 'SPELL_ERROR_LACK_WEAPON_TYPE'), + (71, 1193, 71, 90, 'SPELL_ERROR_NOT_ENOUGH_SAVAGERY'), + (72, 1193, 72, 93, 'SPELL_ERROR_ALREADY_PREPARED'), + (73, 1193, 73, 94, 'SPELL_ERROR_ALREADY_HAVE_SPELL'), + (74, 1193, 74, 96, 'SPELL_ERROR_NOT_SMART_ENOUGH'), + (75, 1193, 75, 99, 'SPELL_ERROR_NO_HOSTILE_SPELLS'), + (76, 1193, 76, 100, 'SPELL_ERROR_NO_BENEFICIAL_SPELLS'), + (77, 1193, 77, 101, 'SPELL_ERROR_CANNOT_MOUNT_NOW_SITTING'), + (78, 1193, 78, 102, 'SPELL_ERROR_CANNOT_MOUNT_NOW_DEAD'), + (79, 1193, 79, 103, 'SPELL_ERROR_CANNOT_MOUNT_NOW_CLIMBING'), + (80, 1193, 80, 104, 'SPELL_ERROR_CANNOT_MOUNT_NOW_FORM'), + (81, 1193, 81, 105, 'SPELL_ERROR_CANNOT_MOUNT_NOW_WATER_TO_DEEP'), + (82, 1193, 82, 107, 'SPELL_ERROR_ALREADY_CAST'), + (83, 1193, 83, 108, 'SPELL_ERROR_LOTTERY_IN_PROGRESS'), + (84, 1193, 84, 109, 'SPELL_ERROR_NOT_IN_PVP'), + (85, 1096, 1, 8, 'SPELL_ERROR_NOT_ENOUGH_KNOWLEDGE'), + (86, 1096, 2, 11, 'SPELL_ERROR_INTERRUPTED'), + (87, 1096, 3, 13, 'SPELL_ERROR_TAKE_EFFECT_MOREPOWERFUL'), + (88, 1096, 4, 14, 'SPELL_ERROR_TAKE_EFFECT_SAMESPELL'), + (89, 1096, 5, 19, 'SPELL_ERROR_CANNOT_CAST_DEAD'), + (90, 1096, 6, 20, 'SPELL_ERROR_NOT_ALIVE'), + (91, 1096, 7, 21, 'SPELL_ERROR_NOT_DEAD'), + (92, 1096, 8, 22, 'SPELL_ERROR_CANNOT_CAST_SITTING'), + (93, 1096, 9, 23, 'SPELL_ERROR_CANNOT_CAST_UNCON'), + (94, 1096, 10, 24, 'SPELL_ERROR_ALREADY_CASTING'), + (95, 1096, 11, 25, 'SPELL_ERROR_RECOVERING'), + (96, 1096, 12, 26, 'SPELL_ERROR_NON_COMBAT_ONLY'), + (97, 1096, 13, 27, 'SPELL_ERROR_CANNOT_CAST_STUNNED'), + (98, 1096, 14, 28, 'SPELL_ERROR_CANNOT_CAST_STIFFLED'), + (99, 1096, 15, 29, 'SPELL_ERROR_CANNOT_CAST_CHARMED'), + (100, 1096, 16, 30, 'SPELL_ERROR_NOT_WHILE_MOUNTED'), + (101, 1096, 17, 31, 'SPELL_ERROR_NOT_WHILE_FLYING'), + (102, 1096, 18, 32, 'SPELL_ERROR_NOT_WHILE_CLIMBING'), + (103, 1096, 19, 33, 'SPELL_ERROR_NOT_READY'), + (104, 1096, 20, 34, 'SPELL_ERROR_CANT_SEE_TARGET'), + (105, 1096, 22, 36, 'SPELL_ERROR_CANNOT_CAST_FEIGNDEATH'), + (106, 1096, 23, 37, 'SPELL_ERROR_INVENTORY_FULL'), + (107, 1096, 24, 38, 'SPELL_ERROR_NOT_ENOUGH_COIN'), + (108, 1096, 25, 39, 'SPELL_ERROR_NOT_ALLOWED_HERE'), + (109, 1096, 26, 40, 'SPELL_ERROR_NOT_WHILE_CRAFTING'), + (110, 1096, 27, 41, 'SPELL_ERROR_ONLY_WHEN_CRAFTING'), + (111, 1096, 28, 44, 'SPELL_ERROR_ITEM_NOT_ATTUNED'), + (112, 1096, 29, 45, 'SPELL_ERROR_ITEM_WORN_OUT'), + (113, 1096, 30, 47, 'SPELL_ERROR_MUST_EQUIP_WEAPON'), + (114, 1096, 31, 48, 'SPELL_ERROR_WEAPON_BROKEN'), + (115, 1096, 32, 49, 'SPELL_ERROR_CANNOT_CAST_FEARED'), + (116, 1096, 33, 50, 'SPELL_ERROR_TARGET_IMMUNE_HOSTILE'), + (117, 1096, 34, 51, 'SPELL_ERROR_TARGET_IMMUNE_BENEFICIAL'), + (118, 1096, 35, 52, 'SPELL_ERROR_NO_TAUNT_SPELLS'), + (119, 1096, 36, 53, 'SPELL_ERROR_CANNOT_USE_IN_BATTLEGROUNDS'), + (120, 1096, 37, 54, 'SPELL_ERROR_CANNOT_PREPARE'), + (121, 1096, 38, 55, 'SPELL_ERROR_NO_ELIGIBLE_TARGET'), + (122, 1096, 39, 56, 'SPELL_ERROR_NO_TARGETS_IN_RANGE'), + (123, 1096, 40, 57, 'SPELL_ERROR_TOO_CLOSE'), + (124, 1096, 41, 58, 'SPELL_ERROR_TOO_FAR_AWAY'), + (125, 1096, 42, 59, 'SPELL_ERROR_TARGET_TOO_WEAK'), + (126, 1096, 43, 60, 'SPELL_ERROR_TARGET_TOO_POWERFUL'), + (127, 1096, 44, 61, 'SPELL_ERROR_WONT_WORK_ON_TARGET'), + (128, 1096, 45, 62, 'SPELL_ERROR_TARGET_INVULNERABLE'), + (129, 1096, 46, 63, 'SPELL_ERROR_TARGET_IMMUNE'), + (130, 1096, 47, 64, 'SPELL_ERROR_TARGET_ENGAGED'), + (131, 1096, 48, 65, 'SPELL_ERROR_TARGET_NOT_GROUPED'), + (132, 1096, 49, 66, 'SPELL_ERROR_TARGET_IN_USE'), + (133, 1096, 50, 67, 'SPELL_ERROR_TARGET_GROUP_HAS_SPELL'), + (134, 1096, 51, 69, 'SPELL_ERROR_TARGET_ALREADY_ENGAGED'), + (135, 1096, 52, 70, 'SPELL_ERROR_CANNOT_ENGAGE'), + (136, 1096, 53, 71, 'SPELL_ERROR_NOT_A_FRIEND'), + (137, 1096, 54, 72, 'SPELL_ERROR_NOT_AN_ENEMY'), + (138, 1096, 55, 73, 'SPELL_ERROR_TARGET_INVENTORY_FULL'), + (139, 1096, 56, 74, 'SPELL_ERROR_FINISH_DUELING_FIRST'), + (140, 1096, 57, 75, 'SPELL_ERROR_ILLEGAL_TARGET_ATTACK'), + (141, 1096, 58, 76, 'SPELL_ERROR_NOT_WHILE_MENTORING_PVP'), + (142, 1096, 59, 77, 'SPELL_ERROR_NOT_WHILE_MENTORING_BENEFICIAL'), + (143, 1096, 60, 78, 'SPELL_ERROR_ILLEGAL_TARGET_HEAL_OUTSIDE_LEVEL_RANGE'), + (144, 1096, 61, 79, 'SPELL_ERROR_NOTHING_TO_CURE'), + (145, 1096, 62, 80, 'SPELL_ERROR_NOT_ENOUGH_POWER'), + (146, 1096, 63, 81, 'SPELL_ERROR_NOT_ENOUGH_HEALTH'), + (147, 1096, 64, 82, 'SPELL_ERROR_NOT_ENOUGH_CONC'), + (148, 1096, 65, 83, 'SPELL_ERROR_MISSING_COMPONENT'), + (149, 1096, 66, 84, 'SPELL_ERROR_OUT_OF_CHARGES'), + (150, 1096, 67, 85, 'SPELL_ERROR_LACK_AMMO'), + (151, 1096, 68, 86, 'SPELL_ERROR_NO_RANGED_EQUIPPED'), + (152, 1096, 69, 87, 'SPELL_ERROR_RANGED_NEEDS_REPAIR'), + (153, 1096, 70, 88, 'SPELL_ERROR_LACK_WEAPON_TYPE'), + (154, 1096, 72, 91, 'SPELL_ERROR_ALREADY_PREPARED'), + (155, 1096, 73, 92, 'SPELL_ERROR_ALREADY_HAVE_SPELL'), + (156, 1096, 74, 94, 'SPELL_ERROR_NOT_SMART_ENOUGH'), + (157, 1096, 75, 97, 'SPELL_ERROR_NO_HOSTILE_SPELLS'), + (158, 1096, 76, 98, 'SPELL_ERROR_NO_BENEFICIAL_SPELLS'), + (159, 1096, 77, 99, 'SPELL_ERROR_CANNOT_MOUNT_NOW_SITTING'), + (160, 1096, 78, 100, 'SPELL_ERROR_CANNOT_MOUNT_NOW_DEAD'), + (161, 1096, 79, 101, 'SPELL_ERROR_CANNOT_MOUNT_NOW_CLIMBING'), + (162, 1096, 80, 102, 'SPELL_ERROR_CANNOT_MOUNT_NOW_FORM'), + (163, 1096, 81, 103, 'SPELL_ERROR_CANNOT_MOUNT_NOW_WATER_TO_DEEP'), + (164, 1096, 82, 105, 'SPELL_ERROR_ALREADY_CAST'), + (165, 1096, 83, 106, 'SPELL_ERROR_LOTTERY_IN_PROGRESS'), + (166, 1096, 84, 107, 'SPELL_ERROR_NOT_IN_PVP'), + (167, 0, 1, 8, 'SPELL_ERROR_NOT_ENOUGH_KNOWLEDGE'), + (168, 0, 2, 10, 'SPELL_ERROR_INTERRUPTED'), + (169, 0, 3, 12, 'SPELL_ERROR_TAKE_EFFECT_MOREPOWERFUL'), + (170, 0, 4, 13, 'SPELL_ERROR_TAKE_EFFECT_SAMESPELL'), + (171, 0, 5, 18, 'SPELL_ERROR_CANNOT_CAST_DEAD'), + (172, 0, 6, 19, 'SPELL_ERROR_NOT_ALIVE'), + (173, 0, 7, 20, 'SPELL_ERROR_NOT_DEAD'), + (174, 0, 8, 21, 'SPELL_ERROR_CANNOT_CAST_SITTING'), + (175, 0, 9, 22, 'SPELL_ERROR_CANNOT_CAST_UNCON'), + (176, 0, 10, 23, 'SPELL_ERROR_ALREADY_CASTING'), + (177, 0, 11, 24, 'SPELL_ERROR_RECOVERING'), + (178, 0, 12, 25, 'SPELL_ERROR_NON_COMBAT_ONLY'), + (179, 0, 13, 26, 'SPELL_ERROR_CANNOT_CAST_STUNNED'), + (180, 0, 14, 27, 'SPELL_ERROR_CANNOT_CAST_STIFFLED'), + (181, 0, 15, 28, 'SPELL_ERROR_CANNOT_CAST_CHARMED'), + (182, 0, 16, 29, 'SPELL_ERROR_NOT_WHILE_MOUNTED'), + (183, 0, 18, 30, 'SPELL_ERROR_NOT_WHILE_CLIMBING'), + (184, 0, 19, 31, 'SPELL_ERROR_NOT_READY'), + (185, 0, 20, 32, 'SPELL_ERROR_CANT_SEE_TARGET'), + (186, 0, 22, 34, 'SPELL_ERROR_CANNOT_CAST_FEIGNDEATH'), + (187, 0, 23, 35, 'SPELL_ERROR_INVENTORY_FULL'), + (188, 0, 24, 36, 'SPELL_ERROR_NOT_ENOUGH_COIN'), + (189, 0, 25, 37, 'SPELL_ERROR_NOT_ALLOWED_HERE'), + (190, 0, 26, 38, 'SPELL_ERROR_NOT_WHILE_CRAFTING'), + (191, 0, 27, 39, 'SPELL_ERROR_ONLY_WHEN_CRAFTING'), + (192, 0, 28, 42, 'SPELL_ERROR_ITEM_NOT_ATTUNED'), + (193, 0, 29, 43, 'SPELL_ERROR_ITEM_WORN_OUT'), + (194, 0, 30, 45, 'SPELL_ERROR_MUST_EQUIP_WEAPON'), + (195, 0, 31, 46, 'SPELL_ERROR_WEAPON_BROKEN'), + (196, 0, 32, 47, 'SPELL_ERROR_CANNOT_CAST_FEARED'), + (197, 0, 33, 48, 'SPELL_ERROR_TARGET_IMMUNE_HOSTILE'), + (198, 0, 34, 49, 'SPELL_ERROR_TARGET_IMMUNE_BENEFICIAL'), + (199, 0, 35, 50, 'SPELL_ERROR_NO_TAUNT_SPELLS'), + (200, 0, 37, 51, 'SPELL_ERROR_CANNOT_PREPARE'), + (201, 0, 38, 52, 'SPELL_ERROR_NO_ELIGIBLE_TARGET'), + (202, 0, 39, 53, 'SPELL_ERROR_NO_TARGETS_IN_RANGE'), + (203, 0, 40, 54, 'SPELL_ERROR_TOO_CLOSE'), + (204, 0, 41, 55, 'SPELL_ERROR_TOO_FAR_AWAY'), + (205, 0, 42, 56, 'SPELL_ERROR_TARGET_TOO_WEAK'), + (206, 0, 43, 57, 'SPELL_ERROR_TARGET_TOO_POWERFUL'), + (207, 0, 44, 58, 'SPELL_ERROR_WONT_WORK_ON_TARGET'), + (208, 0, 45, 59, 'SPELL_ERROR_TARGET_INVULNERABLE'), + (209, 0, 46, 60, 'SPELL_ERROR_TARGET_IMMUNE'), + (210, 0, 47, 61, 'SPELL_ERROR_TARGET_ENGAGED'), + (211, 0, 48, 62, 'SPELL_ERROR_TARGET_NOT_GROUPED'), + (212, 0, 49, 63, 'SPELL_ERROR_TARGET_IN_USE'), + (213, 0, 51, 65, 'SPELL_ERROR_TARGET_ALREADY_ENGAGED'), + (214, 0, 52, 66, 'SPELL_ERROR_CANNOT_ENGAGE'), + (215, 0, 53, 67, 'SPELL_ERROR_NOT_A_FRIEND'), + (216, 0, 54, 68, 'SPELL_ERROR_NOT_AN_ENEMY'), + (217, 0, 55, 69, 'SPELL_ERROR_TARGET_INVENTORY_FULL'), + (218, 0, 56, 70, 'SPELL_ERROR_FINISH_DUELING_FIRST'), + (219, 0, 57, 71, 'SPELL_ERROR_ILLEGAL_TARGET_ATTACK'), + (220, 0, 58, 72, 'SPELL_ERROR_NOT_WHILE_MENTORING_PVP'), + (221, 0, 59, 73, 'SPELL_ERROR_NOT_WHILE_MENTORING_BENEFICIAL'), + (222, 0, 60, 74, 'SPELL_ERROR_ILLEGAL_TARGET_HEAL_OUTSIDE_LEVEL_RANGE'), + (223, 0, 62, 75, 'SPELL_ERROR_NOT_ENOUGH_POWER'), + (224, 0, 63, 79, 'SPELL_ERROR_NOT_ENOUGH_HEALTH'), + (225, 0, 64, 77, 'SPELL_ERROR_NOT_ENOUGH_CONC'), + (226, 0, 65, 78, 'SPELL_ERROR_MISSING_COMPONENT'), + (227, 0, 66, 79, 'SPELL_ERROR_OUT_OF_CHARGES'), + (228, 0, 67, 80, 'SPELL_ERROR_LACK_AMMO'), + (229, 0, 68, 81, 'SPELL_ERROR_NO_RANGED_EQUIPPED'), + (230, 0, 69, 82, 'SPELL_ERROR_RANGED_NEEDS_REPAIR'), + (231, 0, 70, 83, 'SPELL_ERROR_LACK_WEAPON_TYPE'), + (232, 0, 72, 86, 'SPELL_ERROR_ALREADY_PREPARED'), + (233, 0, 73, 87, 'SPELL_ERROR_ALREADY_HAVE_SPELL'), + (234, 0, 74, 89, 'SPELL_ERROR_NOT_SMART_ENOUGH'), + (235, 0, 75, 92, 'SPELL_ERROR_NO_HOSTILE_SPELLS'), + (236, 0, 76, 93, 'SPELL_ERROR_NO_BENEFICIAL_SPELLS'), + (237, 0, 77, 94, 'SPELL_ERROR_CANNOT_MOUNT_NOW_SITTING'), + (238, 0, 78, 95, 'SPELL_ERROR_CANNOT_MOUNT_NOW_DEAD'), + (239, 0, 79, 96, 'SPELL_ERROR_CANNOT_MOUNT_NOW_CLIMBING'), + (240, 0, 80, 97, 'SPELL_ERROR_CANNOT_MOUNT_NOW_FORM'), + (241, 0, 81, 98, 'SPELL_ERROR_CANNOT_MOUNT_NOW_WATER_TO_DEEP'), + (242, 0, 82, 100, 'SPELL_ERROR_ALREADY_CAST'), + (243, 0, 83, 101, 'SPELL_ERROR_LOTTERY_IN_PROGRESS'), + (244, 57032, 1, 8, 'SPELL_ERROR_NOT_ENOUGH_KNOWLEDGE'), + (245, 57032, 2, 11, 'SPELL_ERROR_INTERRUPTED'), + (246, 57032, 3, 13, 'SPELL_ERROR_TAKE_EFFECT_MOREPOWERFUL'), + (247, 57032, 4, 14, 'SPELL_ERROR_TAKE_EFFECT_SAMESPELL'), + (248, 57032, 5, 19, 'SPELL_ERROR_CANNOT_CAST_DEAD'), + (249, 57032, 6, 20, 'SPELL_ERROR_NOT_ALIVE'), + (250, 57032, 7, 21, 'SPELL_ERROR_NOT_DEAD'), + (251, 57032, 8, 22, 'SPELL_ERROR_CANNOT_CAST_SITTING'), + (252, 57032, 9, 23, 'SPELL_ERROR_CANNOT_CAST_UNCON'), + (253, 57032, 10, 24, 'SPELL_ERROR_ALREADY_CASTING'), + (254, 57032, 11, 25, 'SPELL_ERROR_RECOVERING'), + (255, 57032, 12, 26, 'SPELL_ERROR_NON_COMBAT_ONLY'), + (256, 57032, 13, 27, 'SPELL_ERROR_CANNOT_CAST_STUNNED'), + (257, 57032, 14, 28, 'SPELL_ERROR_CANNOT_CAST_STIFFLED'), + (258, 57032, 15, 29, 'SPELL_ERROR_CANNOT_CAST_CHARMED'), + (259, 57032, 16, 30, 'SPELL_ERROR_NOT_WHILE_MOUNTED'), + (260, 57032, 17, 31, 'SPELL_ERROR_NOT_WHILE_FLYING'), + (261, 57032, 18, 32, 'SPELL_ERROR_NOT_WHILE_CLIMBING'), + (262, 57032, 19, 33, 'SPELL_ERROR_NOT_READY'), + (263, 57032, 20, 34, 'SPELL_ERROR_CANT_SEE_TARGET'), + (264, 57032, 21, 36, 'SPELL_ERROR_INCORRECT_STANCE'), + (265, 57032, 22, 37, 'SPELL_ERROR_CANNOT_CAST_FEIGNDEATH'), + (266, 57032, 23, 38, 'SPELL_ERROR_INVENTORY_FULL'), + (267, 57032, 24, 39, 'SPELL_ERROR_NOT_ENOUGH_COIN'), + (268, 57032, 25, 40, 'SPELL_ERROR_NOT_ALLOWED_HERE'), + (269, 57032, 26, 41, 'SPELL_ERROR_NOT_WHILE_CRAFTING'), + (270, 57032, 27, 42, 'SPELL_ERROR_ONLY_WHEN_CRAFTING'), + (271, 57032, 28, 45, 'SPELL_ERROR_ITEM_NOT_ATTUNED'), + (272, 57032, 29, 46, 'SPELL_ERROR_ITEM_WORN_OUT'), + (273, 57032, 30, 48, 'SPELL_ERROR_MUST_EQUIP_WEAPON'), + (274, 57032, 31, 49, 'SPELL_ERROR_WEAPON_BROKEN'), + (275, 57032, 32, 50, 'SPELL_ERROR_CANNOT_CAST_FEARED'), + (276, 57032, 33, 51, 'SPELL_ERROR_TARGET_IMMUNE_HOSTILE'), + (277, 57032, 34, 52, 'SPELL_ERROR_TARGET_IMMUNE_BENEFICIAL'), + (278, 57032, 35, 54, 'SPELL_ERROR_NO_TAUNT_SPELLS'), + (279, 57032, 36, 55, 'SPELL_ERROR_CANNOT_USE_IN_BATTLEGROUNDS'), + (280, 57032, 37, 56, 'SPELL_ERROR_CANNOT_PREPARE'), + (281, 57032, 38, 57, 'SPELL_ERROR_NO_ELIGIBLE_TARGET'), + (282, 57032, 39, 58, 'SPELL_ERROR_NO_TARGETS_IN_RANGE'), + (283, 57032, 40, 59, 'SPELL_ERROR_TOO_CLOSE'), + (284, 57032, 41, 60, 'SPELL_ERROR_TOO_FAR_AWAY'), + (285, 57032, 42, 61, 'SPELL_ERROR_TARGET_TOO_WEAK'), + (286, 57032, 43, 62, 'SPELL_ERROR_TARGET_TOO_POWERFUL'), + (287, 57032, 44, 63, 'SPELL_ERROR_WONT_WORK_ON_TARGET'), + (288, 57032, 45, 64, 'SPELL_ERROR_TARGET_INVULNERABLE'), + (289, 57032, 46, 65, 'SPELL_ERROR_TARGET_IMMUNE'), + (290, 57032, 47, 66, 'SPELL_ERROR_TARGET_ENGAGED'), + (291, 57032, 48, 67, 'SPELL_ERROR_TARGET_NOT_GROUPED'), + (292, 57032, 49, 68, 'SPELL_ERROR_TARGET_IN_USE'), + (293, 57032, 50, 69, 'SPELL_ERROR_TARGET_GROUP_HAS_SPELL'), + (294, 57032, 51, 71, 'SPELL_ERROR_TARGET_ALREADY_ENGAGED'), + (295, 57032, 52, 72, 'SPELL_ERROR_CANNOT_ENGAGE'), + (296, 57032, 53, 73, 'SPELL_ERROR_NOT_A_FRIEND'), + (297, 57032, 54, 74, 'SPELL_ERROR_NOT_AN_ENEMY'), + (298, 57032, 55, 75, 'SPELL_ERROR_TARGET_INVENTORY_FULL'), + (299, 57032, 56, 76, 'SPELL_ERROR_FINISH_DUELING_FIRST'), + (300, 57032, 57, 77, 'SPELL_ERROR_ILLEGAL_TARGET_ATTACK'), + (301, 57032, 58, 78, 'SPELL_ERROR_NOT_WHILE_MENTORING_PVP'), + (302, 57032, 59, 79, 'SPELL_ERROR_NOT_WHILE_MENTORING_BENEFICIAL'), + (303, 57032, 60, 80, 'SPELL_ERROR_ILLEGAL_TARGET_HEAL_OUTSIDE_LEVEL_RANGE'), + (304, 57032, 61, 81, 'SPELL_ERROR_NOTHING_TO_CURE'), + (305, 57032, 62, 82, 'SPELL_ERROR_NOT_ENOUGH_POWER'), + (306, 57032, 63, 83, 'SPELL_ERROR_NOT_ENOUGH_HEALTH'), + (307, 57032, 64, 84, 'SPELL_ERROR_NOT_ENOUGH_CONC'), + (308, 57032, 65, 85, 'SPELL_ERROR_MISSING_COMPONENT'), + (309, 57032, 66, 86, 'SPELL_ERROR_OUT_OF_CHARGES'), + (310, 57032, 67, 87, 'SPELL_ERROR_LACK_AMMO'), + (311, 57032, 68, 88, 'SPELL_ERROR_NO_RANGED_EQUIPPED'), + (312, 57032, 69, 89, 'SPELL_ERROR_RANGED_NEEDS_REPAIR'), + (313, 57032, 70, 90, 'SPELL_ERROR_LACK_WEAPON_TYPE'), + (314, 57032, 71, 91, 'SPELL_ERROR_NOT_ENOUGH_SAVAGERY'), + (315, 57032, 72, 94, 'SPELL_ERROR_ALREADY_PREPARED'), + (316, 57032, 73, 95, 'SPELL_ERROR_ALREADY_HAVE_SPELL'), + (317, 57032, 74, 97, 'SPELL_ERROR_NOT_SMART_ENOUGH'), + (318, 57032, 75, 101, 'SPELL_ERROR_NO_HOSTILE_SPELLS'), + (319, 57032, 76, 102, 'SPELL_ERROR_NO_BENEFICIAL_SPELLS'), + (320, 57032, 77, 103, 'SPELL_ERROR_CANNOT_MOUNT_NOW_SITTING'), + (321, 57032, 78, 104, 'SPELL_ERROR_CANNOT_MOUNT_NOW_DEAD'), + (322, 57032, 79, 105, 'SPELL_ERROR_CANNOT_MOUNT_NOW_CLIMBING'), + (323, 57032, 80, 106, 'SPELL_ERROR_CANNOT_MOUNT_NOW_FORM'), + (324, 57032, 81, 107, 'SPELL_ERROR_CANNOT_MOUNT_NOW_WATER_TO_DEEP'), + (325, 57032, 82, 109, 'SPELL_ERROR_ALREADY_CAST'), + (326, 57032, 83, 110, 'SPELL_ERROR_LOTTERY_IN_PROGRESS'), + (327, 57032, 84, 111, 'SPELL_ERROR_NOT_IN_PVP'), + (328, 57032, 85, 92, 'SPELL_ERROR_NOT_ENOUGH_DISSONANCE'); +INSERT INTO `table_versions` (`name`,`version`,`download_version`) values ('spell_error_versions',1,0); +UPDATE `table_versions` SET `download_version`=1 WHERE `name`='spell_error_versions'; +DROP TABLE IF EXISTS `spell_tiers`; +CREATE TABLE IF NOT EXISTS `spell_tiers` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `spell_id` int(10) unsigned NOT NULL DEFAULT '0', + `tier` tinyint(3) unsigned NOT NULL DEFAULT '0', + `hp_req` mediumint(8) unsigned NOT NULL DEFAULT '0', + `hp_req_percent` tinyint(3) unsigned NOT NULL DEFAULT '0', + `hp_upkeep` mediumint(8) unsigned NOT NULL DEFAULT '0', + `power_req` mediumint(8) unsigned NOT NULL DEFAULT '0', + `power_req_percent` tinyint(3) unsigned NOT NULL DEFAULT '0', + `power_upkeep` mediumint(8) unsigned NOT NULL DEFAULT '0', + `savagery_req` mediumint(8) unsigned NOT NULL DEFAULT '0', + `savagery_req_percent` tinyint(3) unsigned NOT NULL DEFAULT '0', + `savagery_upkeep` mediumint(8) unsigned NOT NULL DEFAULT '0', + `dissonance_req` mediumint(8) unsigned NOT NULL DEFAULT '0', + `dissonance_req_percent` tinyint(3) unsigned NOT NULL DEFAULT '0', + `dissonance_upkeep` mediumint(8) unsigned NOT NULL DEFAULT '0', + `req_concentration` mediumint(8) unsigned NOT NULL DEFAULT '0', + `cast_time` mediumint(8) unsigned NOT NULL DEFAULT '100', + `recovery` float NOT NULL DEFAULT '0', + `recast` float unsigned NOT NULL DEFAULT '1', + `radius` float unsigned NOT NULL DEFAULT '0', + `max_aoe_targets` mediumint(8) unsigned NOT NULL DEFAULT '0', + `min_range` float unsigned NOT NULL DEFAULT '0', + `range` float unsigned NOT NULL DEFAULT '0', + `duration1` int(10) unsigned NOT NULL DEFAULT '0', + `duration2` int(10) unsigned NOT NULL DEFAULT '0', + `resistibility` float unsigned NOT NULL DEFAULT '0', + `hit_bonus` float NOT NULL DEFAULT '0', + `call_frequency` int(10) unsigned NOT NULL DEFAULT '0', + `unknown9` tinyint(3) unsigned NOT NULL DEFAULT '0', + `given_by` varchar(64) COLLATE latin1_general_ci NOT NULL DEFAULT '', + PRIMARY KEY (`id`), + UNIQUE KEY `SpellTierIDX` (`spell_id`,`tier`), + CONSTRAINT `FK_spell_tiers` FOREIGN KEY (`spell_id`) REFERENCES `spells` (`id`) ON DELETE CASCADE ON UPDATE CASCADE +) ENGINE=InnoDB AUTO_INCREMENT=54714 DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci; +ALTER TABLE `spell_tiers` + CHANGE COLUMN `power_req` `power_req` FLOAT UNSIGNED NOT NULL DEFAULT '0' AFTER `hp_upkeep`, + ADD COLUMN `power_by_level` TINYINT(1) UNSIGNED NOT NULL DEFAULT '0' AFTER `power_upkeep`; +INSERT INTO `table_versions` (`name`,`version`,`download_version`) values ('spell_tiers',73041,0); +DROP TABLE IF EXISTS `spell_traits`; +CREATE TABLE IF NOT EXISTS `spell_traits` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `spell_id` int(10) unsigned NOT NULL DEFAULT '0', + `level` tinyint(3) unsigned NOT NULL DEFAULT '0', + `class_req` tinyint(3) unsigned NOT NULL DEFAULT '255', + `race_req` tinyint(3) unsigned NOT NULL DEFAULT '255', + `isInate` tinyint(1) unsigned NOT NULL DEFAULT '0', + `isFocusEffect` tinyint(1) unsigned NOT NULL DEFAULT '0', + `tier` tinyint(3) unsigned NOT NULL DEFAULT '0', + `group` tinyint(3) unsigned NOT NULL DEFAULT '0', + PRIMARY KEY (`id`), + KEY `FK_spell_traits` (`spell_id`), + CONSTRAINT `FK_spell_traits` FOREIGN KEY (`spell_id`) REFERENCES `spells` (`id`) ON DELETE CASCADE ON UPDATE CASCADE +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +DROP TABLE IF EXISTS `spell_traits`; +CREATE TABLE `spell_traits` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `spell_id` int(10) unsigned NOT NULL DEFAULT '0', + `level` tinyint(3) unsigned NOT NULL DEFAULT '0', + `class_req` tinyint(3) unsigned NOT NULL DEFAULT '255', + `race_req` tinyint(3) unsigned NOT NULL DEFAULT '255', + `isTrait` tinyint(1) unsigned NOT NULL DEFAULT '0', + `isInate` tinyint(1) unsigned NOT NULL DEFAULT '0', + `isFocusEffect` tinyint(1) unsigned NOT NULL DEFAULT '0', + `isTraining` tinyint(1) unsigned NOT NULL DEFAULT '0', + `tier` tinyint(3) unsigned NOT NULL DEFAULT '0', + `group` tinyint(3) unsigned NOT NULL DEFAULT '0', + PRIMARY KEY (`id`), + KEY `FK_spell_traits` (`spell_id`), + CONSTRAINT `FK_spell_traits` FOREIGN KEY (`spell_id`) REFERENCES `spells` (`id`) ON DELETE CASCADE ON UPDATE CASCADE +) ENGINE=InnoDB AUTO_INCREMENT=98 DEFAULT CHARSET=latin1 COLLATE latin1_general_ci; +INSERT INTO `table_versions` (`name`,`version`,`download_version`) values ('spell_traits',73037,0); +DROP TABLE IF EXISTS `spell_ts_ability_index`; +CREATE TABLE `spell_ts_ability_index` ( + `id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT, + `spell_id` INT(10) UNSIGNED NOT NULL, + `index` INT(10) UNSIGNED NOT NULL, + PRIMARY KEY (`id`) +) +COLLATE='latin1_general_ci' +ENGINE=InnoDB +; +INSERT INTO `table_versions` (`name`,`version`,`download_version`) values ('spell_ts_ability_index',73029,0); +DROP TABLE IF EXISTS `spells`; +CREATE TABLE IF NOT EXISTS `spells` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `soe_spell_crc` int(10) unsigned NOT NULL DEFAULT '0', + `type` smallint(5) unsigned NOT NULL DEFAULT '0', + `cast_type` tinyint(3) unsigned NOT NULL DEFAULT '0', + `name` varchar(250) COLLATE latin1_general_ci NOT NULL DEFAULT 'NoName', + `description` text COLLATE latin1_general_ci NOT NULL, + `icon` smallint(5) unsigned NOT NULL DEFAULT '0', + `icon_heroic_op` smallint(5) unsigned NOT NULL DEFAULT '0', + `icon_backdrop` smallint(5) unsigned NOT NULL DEFAULT '0', + `class_skill` bigint(20) unsigned NOT NULL DEFAULT '0', + `mastery_skill` bigint(20) unsigned NOT NULL DEFAULT '0', + `min_class_skill_req` smallint(5) unsigned NOT NULL DEFAULT '0', + `duration_until_cancel` tinyint(1) unsigned NOT NULL DEFAULT '0', + `target_type` tinyint(3) unsigned NOT NULL DEFAULT '0', + `success_message` varchar(255) COLLATE latin1_general_ci NOT NULL DEFAULT '', + `fade_message` varchar(255) COLLATE latin1_general_ci NOT NULL DEFAULT '', + `interruptable` tinyint(1) unsigned NOT NULL DEFAULT '1', + `cast_while_moving` tinyint(1) unsigned NOT NULL DEFAULT '0', + `lua_script` varchar(255) COLLATE latin1_general_ci NOT NULL DEFAULT '', + `spell_visual` int(10) unsigned NOT NULL DEFAULT '0', + `effect_message` varchar(255) COLLATE latin1_general_ci NOT NULL DEFAULT '', + `spell_book_type` tinyint(3) unsigned NOT NULL DEFAULT '0', + `can_effect_raid` tinyint(1) unsigned NOT NULL DEFAULT '0', + `affect_only_group_members` tinyint(1) unsigned NOT NULL DEFAULT '0', + `display_spell_tier` tinyint(1) unsigned NOT NULL DEFAULT '0', + `friendly_spell` tinyint(1) unsigned NOT NULL DEFAULT '0', + `group_spell` tinyint(1) unsigned NOT NULL DEFAULT '0', + `det_type` tinyint(3) NOT NULL DEFAULT '0', + `control_effect_type` tinyint(3) NOT NULL DEFAULT '0', + `incurable` tinyint(1) NOT NULL DEFAULT '0', + `linked_timer_id` int(10) unsigned NOT NULL DEFAULT '0', + `not_maintained` tinyint(1) unsigned NOT NULL DEFAULT '0', + `casting_flags` int(10) unsigned NOT NULL DEFAULT '0', + `persist_through_death` tinyint(1) unsigned NOT NULL DEFAULT '0', + `savage_bar` tinyint(3) unsigned NOT NULL DEFAULT '0', + `savage_bar_slot` tinyint(3) unsigned NOT NULL DEFAULT '0', + `is_active` tinyint(3) unsigned NOT NULL DEFAULT '0', + `is_aa` tinyint(1) unsigned NOT NULL DEFAULT '0', + `is_deity` tinyint(1) unsigned NOT NULL DEFAULT '0', + `deity` tinyint(3) unsigned NOT NULL DEFAULT '0', + `last_auto_update` int(10) unsigned NOT NULL DEFAULT '0', + `soe_last_update` int(10) unsigned NOT NULL DEFAULT '0', + PRIMARY KEY (`id`), + KEY `SpellIDX` (`name`), + KEY `SpellLUAIDX` (`lua_script`), + KEY `SpellSkillsIDX` (`class_skill`,`mastery_skill`) +) ENGINE=InnoDB AUTO_INCREMENT=2000754 DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci; +ALTER TABLE `spells` + ADD COLUMN `spell_type` ENUM('Unset','DD','DoT','Heal','HoT-Ward','Debuff','Buff','CombatBuff','Taunt','Detaunt','Rez','Cure') NULL DEFAULT 'Unset' AFTER `deity`; +INSERT INTO `table_versions` (`name`,`version`,`download_version`) values ('spells',73026,0); +DROP TABLE IF EXISTS `starting_details`; +CREATE TABLE IF NOT EXISTS `starting_details` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `race_id` tinyint(3) unsigned NOT NULL DEFAULT '255', + `class_id` tinyint(3) unsigned NOT NULL DEFAULT '255', + `max_hp` int(10) unsigned NOT NULL DEFAULT '0', + `max_power` int(10) unsigned NOT NULL DEFAULT '0', + `max_savagery` int(10) unsigned NOT NULL DEFAULT '0', + `max_dissonance` int(10) unsigned NOT NULL DEFAULT '0', + `max_concentration` tinyint(3) unsigned NOT NULL DEFAULT '0', + `str` smallint(5) unsigned NOT NULL DEFAULT '0', + `agi` smallint(5) unsigned NOT NULL DEFAULT '0', + `sta` smallint(5) unsigned NOT NULL DEFAULT '0', + `intel` smallint(5) unsigned NOT NULL DEFAULT '0', + `wis` smallint(5) unsigned NOT NULL DEFAULT '0', + `heat` smallint(5) unsigned NOT NULL DEFAULT '0', + `cold` smallint(5) unsigned NOT NULL DEFAULT '0', + `magic` smallint(5) unsigned NOT NULL DEFAULT '0', + `mental` smallint(5) unsigned NOT NULL DEFAULT '0', + `divine` smallint(5) unsigned NOT NULL DEFAULT '0', + `disease` smallint(5) unsigned NOT NULL DEFAULT '0', + `poison` smallint(5) unsigned NOT NULL DEFAULT '0', + `elemental` smallint(5) unsigned NOT NULL DEFAULT '0', + `arcane` smallint(5) unsigned NOT NULL DEFAULT '0', + `noxious` smallint(5) unsigned NOT NULL DEFAULT '0', + `coin_copper` int(10) unsigned NOT NULL DEFAULT '0', + `coin_silver` int(10) unsigned NOT NULL DEFAULT '0', + `coin_gold` int(10) unsigned NOT NULL DEFAULT '0', + `coin_plat` int(10) unsigned NOT NULL DEFAULT '0', + `status_points` int(10) unsigned NOT NULL DEFAULT '0', + PRIMARY KEY (`id`), + UNIQUE KEY `RaceClassIDX` (`race_id`,`class_id`) +) ENGINE=InnoDB AUTO_INCREMENT=22 DEFAULT CHARSET=latin1; +INSERT INTO `starting_details` (`id`, `race_id`, `class_id`, `max_hp`, `max_power`, `max_savagery`, `max_dissonance`, `max_concentration`, `str`, `agi`, `sta`, `intel`, `wis`, `heat`, `cold`, `magic`, `mental`, `divine`, `disease`, `poison`, `elemental`, `arcane`, `noxious`, `coin_copper`, `coin_silver`, `coin_gold`, `coin_plat`, `status_points`) VALUES + (1, 0, 255, 40, 45, 0, 0, 0, 25, 20, 25, 12, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), + (2, 1, 255, 40, 45, 0, 0, 0, 13, 23, 15, 26, 23, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), + (3, 2, 255, 40, 45, 0, 0, 0, 22, 16, 25, 12, 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), + (4, 3, 255, 40, 45, 0, 0, 0, 12, 18, 15, 30, 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), + (5, 4, 255, 40, 45, 0, 0, 0, 16, 24, 20, 20, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), + (6, 5, 255, 40, 45, 0, 0, 0, 12, 25, 16, 27, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), + (7, 6, 255, 40, 45, 0, 0, 0, 17, 25, 18, 21, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), + (8, 7, 255, 40, 45, 0, 0, 0, 15, 30, 17, 16, 22, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), + (9, 8, 255, 40, 45, 0, 0, 0, 10, 22, 15, 23, 30, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), + (10, 9, 255, 40, 45, 0, 0, 0, 20, 20, 20, 20, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), + (11, 10, 255, 40, 45, 0, 0, 0, 18, 22, 18, 20, 22, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), + (12, 11, 255, 40, 45, 0, 0, 0, 22, 23, 20, 15, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), + (13, 12, 255, 40, 45, 0, 0, 0, 30, 15, 25, 15, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), + (14, 13, 255, 40, 45, 0, 0, 0, 10, 30, 15, 25, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), + (15, 14, 255, 40, 45, 0, 0, 0, 25, 18, 30, 10, 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), + (16, 15, 255, 40, 45, 0, 0, 0, 14, 30, 16, 17, 23, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), + (17, 16, 255, 40, 45, 0, 0, 0, 10, 30, 10, 25, 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), + (18, 17, 255, 40, 45, 0, 0, 0, 10, 30, 10, 25, 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), + (19, 18, 255, 40, 45, 0, 0, 0, 21, 17, 23, 15, 24, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), + (20, 19, 255, 40, 45, 0, 0, 0, 15, 25, 18, 25, 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), + (21, 20, 255, 40, 45, 0, 0, 0, 20, 20, 20, 20, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0); +INSERT INTO `table_versions` (`name`,`version`,`download_version`) values ('starting_details',1,0); +UPDATE `table_versions` SET `download_version`=1 WHERE `name`='starting_details'; +DROP TABLE IF EXISTS `starting_factions`; +CREATE TABLE IF NOT EXISTS `starting_factions` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `faction_id` int(10) unsigned NOT NULL DEFAULT '0', + `starting_city` tinyint(3) unsigned NOT NULL DEFAULT '0', + `value` mediumint(9) NOT NULL DEFAULT '0', + PRIMARY KEY (`id`), + UNIQUE KEY `NewIndex` (`faction_id`,`starting_city`), + CONSTRAINT `FK_starting_factions` FOREIGN KEY (`faction_id`) REFERENCES `factions` (`id`) ON DELETE CASCADE ON UPDATE CASCADE +) ENGINE=InnoDB AUTO_INCREMENT=54 DEFAULT CHARSET=latin1; +INSERT INTO `starting_factions` (`id`, `faction_id`, `starting_city`, `value`) VALUES + (12, 11, 1, 20000), + (13, 11, 2, -50000), + (14, 11, 4, 5000), + (15, 11, 8, -50000), + (16, 12, 1, -50000), + (17, 12, 2, 20000), + (18, 12, 4, -50000), + (19, 12, 8, 5000), + (20, 154, 1, -50000), + (21, 154, 2, -50000), + (22, 15, 4, -50000), + (23, 16, 8, -50000), + (24, 155, 1, 5000), + (25, 155, 2, -50000), + (26, 17, 4, -15000), + (27, 14, 8, -50000), + (28, 156, 1, -50000), + (29, 156, 2, 5000), + (30, 13, 4, -50000), + (31, 15, 8, -50000), + (32, 17, 16, 40000), + (33, 13, 16, 5000), + (34, 12, 16, 5000), + (35, 16, 16, -50000), + (36, 14, 16, -50000), + (37, 15, 16, -50000), + (38, 11, 16, -50000), + (39, 16, 32, 40000), + (40, 14, 32, 5000), + (43, 11, 32, 5000), + (44, 17, 32, -15000), + (45, 13, 32, -50000), + (46, 15, 32, -50000), + (47, 12, 32, -50000), + (48, 17, 8, -15000), + (49, 13, 8, 40000), + (52, 14, 4, 40000), + (53, 16, 4, 5000); +INSERT INTO `table_versions` (`name`,`version`,`download_version`) values ('starting_factions',1,0); +UPDATE `table_versions` SET `download_version`=1 WHERE `name`='starting_factions'; +DROP TABLE IF EXISTS `starting_items`; +CREATE TABLE IF NOT EXISTS `starting_items` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `class_id` tinyint(3) unsigned NOT NULL DEFAULT '255', + `race_id` tinyint(3) unsigned NOT NULL DEFAULT '255', + `type` enum('EQUIPPED','NOT-EQUIPPED') CHARACTER SET latin1 NOT NULL DEFAULT 'NOT-EQUIPPED', + `item_id` int(10) unsigned NOT NULL DEFAULT '0', + `creator` varchar(64) COLLATE latin1_general_ci DEFAULT NULL, + `condition_` tinyint(3) unsigned NOT NULL DEFAULT '100', + `attuned` tinyint(3) unsigned NOT NULL DEFAULT '0', + `count` tinyint(3) unsigned NOT NULL DEFAULT '1', + PRIMARY KEY (`id`), + UNIQUE KEY `NewIndex` (`class_id`,`race_id`,`type`,`item_id`), + KEY `FK_starting_items` (`item_id`), + CONSTRAINT `FK_starting_items` FOREIGN KEY (`item_id`) REFERENCES `items` (`id`) ON UPDATE CASCADE +) ENGINE=InnoDB AUTO_INCREMENT=150 DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci CHECKSUM=1 DELAY_KEY_WRITE=1 ROW_FORMAT=DYNAMIC; +INSERT INTO `table_versions` (`name`,`version`,`download_version`) values ('starting_items',1,0); +DROP TABLE IF EXISTS `starting_skillbar`; +CREATE TABLE IF NOT EXISTS `starting_skillbar` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `race_id` tinyint(3) unsigned NOT NULL DEFAULT '255', + `class_id` tinyint(3) unsigned NOT NULL DEFAULT '255', + `type` tinyint(3) unsigned NOT NULL DEFAULT '1', + `hotbar` int(10) unsigned NOT NULL DEFAULT '0', + `spell_id` int(10) unsigned NOT NULL DEFAULT '0', + `slot` int(10) unsigned NOT NULL DEFAULT '0', + `text_val` varchar(255) COLLATE latin1_general_ci NOT NULL DEFAULT 'Unused', + PRIMARY KEY (`id`), + UNIQUE KEY `NewIndex` (`hotbar`,`class_id`,`slot`,`race_id`) +) ENGINE=InnoDB AUTO_INCREMENT=55 DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci; +INSERT INTO `starting_skillbar` (`id`, `race_id`, `class_id`, `type`, `hotbar`, `spell_id`, `slot`, `text_val`) VALUES + (1, 255, 255, 4, 0, 0, 0, 'attack'), + (2, 255, 1, 4, 0, 0, 1, 'ranged_attack'), + (3, 255, 31, 4, 0, 0, 1, 'ranged_attack'), + (4, 255, 3, 1, 0, 30118, 2, 'overpower'), + (5, 255, 4, 1, 0, 40170, 2, 'rupture'), + (6, 255, 6, 1, 0, 60181, 2, 'waking dragon'), + (7, 255, 7, 1, 0, 70133, 2, 'pummel'), + (8, 255, 9, 1, 0, 90044, 2, 'painbringer'), + (9, 255, 10, 1, 0, 100025, 2, 'faith strike'), + (12, 255, 9, 1, 0, 90134, 3, 'insidious whisper'), + (13, 255, 13, 1, 0, 130106, 1, 'meliorate'), + (14, 255, 13, 1, 0, 130027, 2, 'divine smite'), + (15, 255, 14, 1, 0, 140103, 1, 'invocation'), + (16, 255, 14, 1, 0, 140126, 2, 'ministration'), + (17, 255, 16, 1, 0, 160016, 1, 'dawnstrike'), + (18, 255, 16, 1, 0, 160134, 2, 'sylvan bloom'), + (19, 255, 17, 1, 0, 170039, 1, 'death swarm'), + (20, 255, 17, 1, 0, 170124, 2, 'nature\'s salve'), + (21, 255, 19, 1, 0, 190108, 1, 'rejuvenation'), + (22, 255, 20, 1, 0, 200074, 1, 'dire balm'), + (23, 255, 20, 1, 0, 200099, 2, 'imprecate'), + (24, 255, 19, 1, 0, 190183, 2, 'velium winds'), + (25, 255, 23, 1, 0, 230160, 1, 'solar flare'), + (26, 255, 24, 1, 0, 240104, 1, 'dissolve'), + (27, 255, 26, 1, 0, 260186, 1, 'ultraviolet beam'), + (28, 255, 26, 1, 0, 260055, 2, 'entrance'), + (29, 255, 27, 1, 0, 270069, 1, 'hemorrhage'), + (31, 255, 27, 1, 0, 270095, 2, 'mesmerize'), + (32, 255, 29, 1, 0, 290039, 1, 'crystal blast'), + (33, 255, 29, 1, 0, 290057, 2, 'earthen avatar'), + (35, 255, 30, 1, 0, 300198, 1, 'undead knight'), + (36, 255, 30, 1, 0, 300170, 2, 'soulrot'), + (37, 255, 33, 1, 0, 330065, 1, 'flash of steel'), + (38, 255, 34, 1, 0, 340131, 1, 'puncture'), + (39, 255, 37, 1, 0, 370036, 1, 'thuri\'s doleful thrust'), + (40, 255, 39, 1, 0, 390081, 1, 'lightning strike'), + (41, 255, 40, 1, 0, 400145, 1, 'quick strike'), + (43, 255, 36, 1, 0, 360033, 1, 'sandra\'s deafening strike'), + (44, 255, 42, 1, 0, 420056, 2, 'quick swipe'), + (45, 255, 42, 1, 0, 420109, 3, 'spiritshroud'), + (47, 255, 44, 1, 0, 440050, 1, 'vengeful arrow'), + (48, 255, 44, 1, 0, 440092, 2, 'create construct'), + (53, 255, 31, 1, 0, 8441, 10, 'tracking'), + (54, 255, 255, 1, 0, 8308, 11, 'sprint'); +INSERT INTO `table_versions` (`name`,`version`,`download_version`) values ('starting_skillbar',1,0); +UPDATE `table_versions` SET `download_version`=1 WHERE `name`='starting_skillbar'; +DROP TABLE IF EXISTS `starting_skills`; +CREATE TABLE IF NOT EXISTS `starting_skills` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `class_id` tinyint(3) unsigned NOT NULL DEFAULT '255', + `race_id` tinyint(3) unsigned NOT NULL DEFAULT '255', + `skill_id` int(10) unsigned NOT NULL DEFAULT '0', + `current_val` smallint(5) unsigned NOT NULL DEFAULT '1', + `max_val` smallint(5) unsigned NOT NULL DEFAULT '1', + `progress` int(10) unsigned NOT NULL DEFAULT '0', + PRIMARY KEY (`id`), + UNIQUE KEY `RaceClassIDX` (`race_id`,`class_id`,`skill_id`), + KEY `FK_starting_skills` (`skill_id`), + CONSTRAINT `FK_starting_skills` FOREIGN KEY (`skill_id`) REFERENCES `skills` (`id`) ON UPDATE CASCADE +) ENGINE=InnoDB AUTO_INCREMENT=159 DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci; +INSERT INTO `starting_skills` (`id`, `class_id`, `race_id`, `skill_id`, `current_val`, `max_val`, `progress`) VALUES + (1, 255, 255, 4250045746, 5, 5, 0), + (2, 255, 255, 4037812502, 1, 1, 0), + (3, 255, 255, 3539032716, 1, 1, 0), + (5, 255, 255, 609880714, 5, 5, 0), + (6, 255, 255, 2319450178, 5, 5, 0), + (7, 5, 255, 3177806075, 5, 5, 0), + (8, 255, 255, 2638198038, 5, 5, 0), + (9, 255, 255, 688591146, 5, 5, 0), + (10, 255, 255, 1048513601, 5, 5, 0), + (11, 255, 255, 1553857724, 1, 1, 0), + (12, 255, 255, 2072844078, 1, 1, 0), + (13, 255, 255, 3659699625, 5, 5, 0), + (14, 255, 255, 3429135390, 1, 1, 0), + (15, 255, 255, 4253456353, 1, 1, 0), + (16, 255, 255, 2383540775, 1, 1, 0), + (17, 255, 255, 2037831821, 5, 5, 0), + (18, 255, 255, 1970131346, 5, 5, 0), + (19, 255, 255, 4158365743, 5, 5, 0), + (20, 1, 255, 723762198, 5, 5, 0), + (21, 1, 255, 2246237129, 1, 1, 0), + (22, 1, 255, 3421494576, 5, 5, 0), + (23, 1, 255, 1408356869, 1, 1, 0), + (24, 1, 255, 1653482350, 1, 1, 0), + (25, 1, 255, 554333641, 1, 1, 0), + (26, 1, 255, 2897193374, 1, 1, 0), + (27, 1, 255, 770311065, 1, 1, 0), + (28, 1, 255, 540022425, 5, 5, 0), + (29, 1, 255, 3180399725, 1, 1, 0), + (30, 11, 255, 3421494576, 5, 5, 0), + (31, 11, 255, 613995491, 5, 5, 0), + (32, 11, 255, 1653482350, 1, 1, 0), + (33, 11, 255, 554333641, 1, 1, 0), + (34, 11, 255, 2897193374, 1, 1, 0), + (35, 11, 255, 770311065, 1, 1, 0), + (36, 11, 255, 366253016, 5, 5, 0), + (37, 11, 255, 3587918036, 5, 5, 0), + (38, 11, 255, 2463145248, 1, 1, 0), + (39, 11, 255, 3180399725, 1, 1, 0), + (40, 11, 255, 882983852, 5, 5, 0), + (41, 21, 255, 3421494576, 5, 5, 0), + (42, 21, 255, 887279616, 1, 1, 0), + (43, 21, 255, 613995491, 5, 5, 0), + (44, 21, 255, 554333641, 1, 1, 0), + (45, 21, 255, 770311065, 1, 1, 0), + (46, 21, 255, 3820670534, 1, 1, 0), + (47, 21, 255, 366253016, 5, 5, 0), + (48, 21, 255, 3587918036, 5, 5, 0), + (49, 21, 255, 3048574950, 5, 5, 0), + (50, 21, 255, 3180399725, 1, 1, 0), + (51, 21, 255, 882983852, 5, 5, 0), + (52, 21, 255, 545043066, 1, 1, 0), + (53, 31, 255, 2476073427, 1, 1, 0), + (54, 31, 255, 1743366740, 1, 1, 0), + (55, 31, 255, 2246237129, 1, 1, 0), + (56, 31, 255, 887279616, 1, 1, 0), + (57, 31, 255, 2200201799, 5, 5, 0), + (58, 31, 255, 1852383242, 1, 1, 0), + (59, 31, 255, 2897193374, 1, 1, 0), + (60, 31, 255, 540022425, 5, 5, 0), + (61, 31, 255, 3048574950, 5, 5, 0), + (62, 31, 255, 3694382619, 5, 5, 0), + (63, 31, 255, 641561514, 1, 1, 0), + (64, 31, 255, 3173504370, 1, 1, 0), + (65, 31, 255, 3232294366, 5, 5, 0), + (66, 31, 255, 1921433074, 1, 1, 0), + (67, 31, 255, 418532101, 5, 5, 0), + (68, 31, 255, 1616998748, 1, 1, 0), + (69, 31, 255, 1696217328, 1, 1, 0), + (70, 31, 255, 2650425026, 1, 1, 0), + (71, 31, 255, 1468243427, 5, 5, 0), + (72, 2, 255, 2476073427, 1, 1, 0), + (73, 2, 255, 1743366740, 1, 1, 0), + (74, 2, 255, 2954459351, 1, 1, 0), + (75, 2, 255, 2380184628, 1, 1, 0), + (76, 2, 255, 2292577688, 1, 1, 0), + (77, 2, 255, 2608320658, 1, 1, 0), + (78, 2, 255, 3048574950, 5, 5, 0), + (79, 2, 255, 241174330, 1, 1, 0), + (80, 2, 255, 1756482397, 5, 5, 0), + (81, 2, 255, 641561514, 1, 1, 0), + (82, 2, 255, 3173504370, 1, 1, 0), + (83, 2, 255, 418532101, 5, 5, 0), + (84, 2, 255, 1616998748, 1, 1, 0), + (85, 2, 255, 1696217328, 1, 1, 0), + (86, 2, 255, 2650425026, 1, 1, 0), + (87, 2, 255, 570458645, 1, 1, 0), + (88, 2, 255, 1124719197, 1, 1, 0), + (89, 2, 255, 887279616, 1, 1, 0), + (90, 2, 255, 1852383242, 1, 1, 0), + (91, 3, 255, 1209716810, 1, 1, 0), + (92, 4, 255, 1433335062, 1, 1, 0), + (93, 5, 255, 3856706740, 1, 1, 0), + (94, 5, 255, 3850377186, 5, 5, 0), + (95, 5, 255, 3232294366, 5, 5, 0), + (96, 5, 255, 2650425026, 1, 1, 0), + (97, 6, 255, 2011726342, 1, 1, 0), + (98, 7, 255, 3067436248, 1, 1, 0), + (99, 8, 255, 2476073427, 1, 1, 0), + (100, 8, 255, 1743366740, 1, 1, 0), + (101, 8, 255, 3809066846, 1, 1, 0), + (102, 8, 255, 887279616, 1, 1, 0), + (103, 8, 255, 613995491, 5, 5, 0), + (104, 8, 255, 2954459351, 1, 1, 0), + (105, 8, 255, 2380184628, 1, 1, 0), + (106, 8, 255, 2292577688, 1, 1, 0), + (107, 8, 255, 2608320658, 1, 1, 0), + (108, 8, 255, 366253016, 5, 5, 0), + (109, 8, 255, 3587918036, 5, 5, 0), + (110, 8, 255, 241174330, 1, 1, 0), + (111, 8, 255, 3173504370, 1, 1, 0), + (112, 8, 255, 418532101, 5, 5, 0), + (113, 8, 255, 1616998748, 1, 1, 0), + (114, 8, 255, 1696217328, 1, 1, 0), + (115, 8, 255, 570458645, 1, 1, 0), + (116, 9, 255, 2741805322, 1, 1, 0), + (117, 10, 255, 90523872, 1, 1, 0), + (118, 12, 255, 2246237129, 1, 1, 0), + (119, 12, 255, 3341842907, 1, 1, 0), + (120, 12, 255, 241174330, 1, 1, 0), + (121, 13, 255, 2581053277, 1, 1, 0), + (122, 14, 255, 1829443087, 1, 1, 0), + (123, 15, 255, 3282420779, 1, 1, 0), + (124, 15, 255, 641561514, 1, 1, 0), + (125, 15, 255, 1616998748, 1, 1, 0), + (126, 16, 255, 1040683335, 1, 1, 0), + (127, 17, 255, 1624274802, 1, 1, 0), + (128, 18, 255, 2246237129, 1, 1, 0), + (129, 18, 255, 2380184628, 1, 1, 0), + (130, 18, 255, 3343700951, 1, 1, 0), + (131, 18, 255, 1616998748, 1, 1, 0), + (132, 19, 255, 3467160477, 1, 1, 0), + (133, 20, 255, 3191839982, 1, 1, 0), + (134, 22, 255, 2533124061, 1, 1, 0), + (135, 23, 255, 2662430630, 1, 1, 0), + (136, 24, 255, 193411854, 1, 1, 0), + (137, 25, 255, 287643040, 1, 1, 0), + (138, 26, 255, 2898101972, 1, 1, 0), + (139, 27, 255, 2950599749, 1, 1, 0), + (140, 28, 255, 2120065377, 1, 1, 0), + (141, 28, 255, 2398950520, 1, 1, 0), + (142, 29, 255, 2042842194, 1, 1, 0), + (143, 30, 255, 2894715199, 1, 1, 0), + (144, 32, 255, 1514256692, 1, 1, 0), + (145, 33, 255, 2663054519, 1, 1, 0), + (146, 34, 255, 1519965519, 1, 1, 0), + (147, 35, 255, 1311635100, 1, 1, 0), + (148, 35, 255, 613995491, 5, 5, 0), + (149, 35, 255, 366253016, 5, 5, 0), + (150, 35, 255, 3587918036, 5, 5, 0), + (151, 35, 255, 1756482397, 5, 5, 0), + (152, 36, 255, 296246391, 1, 1, 0), + (153, 37, 255, 340921594, 1, 1, 0), + (154, 38, 255, 3167106577, 1, 1, 0), + (155, 38, 255, 1756482397, 5, 5, 0), + (156, 39, 255, 1400160844, 1, 1, 0), + (157, 40, 255, 2711101135, 1, 1, 0), + (158, 8, 255, 1756482397, 5, 5, 0); +INSERT INTO `table_versions` (`name`,`version`,`download_version`) values ('starting_skills',1,0); +UPDATE `table_versions` SET `download_version`=1 WHERE `name`='starting_skills'; +DROP TABLE IF EXISTS `starting_spells`; +CREATE TABLE IF NOT EXISTS `starting_spells` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `race_id` tinyint(3) unsigned NOT NULL DEFAULT '255', + `class_id` tinyint(3) unsigned NOT NULL DEFAULT '255', + `spell_id` int(10) unsigned NOT NULL DEFAULT '0', + `tier` tinyint(3) unsigned NOT NULL DEFAULT '1', + `knowledge_slot` mediumint(9) NOT NULL DEFAULT '-1', + PRIMARY KEY (`id`), + UNIQUE KEY `SpellsIDX` (`race_id`,`class_id`,`spell_id`), + KEY `FK_starting_spells` (`spell_id`), + CONSTRAINT `FK_starting_spells` FOREIGN KEY (`spell_id`) REFERENCES `spells` (`id`) ON DELETE CASCADE ON UPDATE CASCADE +) ENGINE=InnoDB AUTO_INCREMENT=273 DEFAULT CHARSET=latin1 CHECKSUM=1 DELAY_KEY_WRITE=1 ROW_FORMAT=DYNAMIC; +INSERT INTO `table_versions` (`name`,`version`,`download_version`) values ('starting_spells',1,0); +DROP TABLE IF EXISTS `starting_titles`; +CREATE TABLE IF NOT EXISTS `starting_titles` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `race_id` smallint(5) unsigned NOT NULL DEFAULT '255', + `class_id` smallint(5) unsigned NOT NULL DEFAULT '255', + `gender_id` tinyint(1) unsigned NOT NULL DEFAULT '255', + `title_id` int(10) unsigned NOT NULL DEFAULT '0', + PRIMARY KEY (`id`), + UNIQUE KEY `StartTitlesIDX` (`race_id`,`class_id`,`gender_id`,`title_id`), + KEY `FK_starting_titles` (`title_id`), + CONSTRAINT `FK_starting_titles` FOREIGN KEY (`title_id`) REFERENCES `titles` (`id`) ON DELETE CASCADE ON UPDATE CASCADE +) ENGINE=InnoDB AUTO_INCREMENT=7 DEFAULT CHARSET=latin1; +INSERT INTO `table_versions` (`name`,`version`,`download_version`) values ('starting_titles',1,0); +DROP TABLE IF EXISTS `starting_zones`; +CREATE TABLE IF NOT EXISTS `starting_zones` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `class_id` tinyint(3) unsigned NOT NULL DEFAULT '255', + `race_id` tinyint(3) unsigned NOT NULL DEFAULT '255', + `choice` tinyint(3) unsigned NOT NULL DEFAULT '255', + `zone_id` int(11) unsigned NOT NULL DEFAULT '253', + PRIMARY KEY (`id`), + UNIQUE KEY `NewIndex` (`class_id`,`race_id`,`zone_id`,`choice`), + KEY `FK_starting_zones` (`zone_id`), + CONSTRAINT `FK_starting_zones` FOREIGN KEY (`zone_id`) REFERENCES `zones` (`id`) ON DELETE CASCADE ON UPDATE CASCADE +) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=latin1; +INSERT INTO `table_versions` (`name`,`version`,`download_version`) values ('starting_zones',1,0); +DROP TABLE IF EXISTS `statistics`; +CREATE TABLE IF NOT EXISTS `statistics` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `char_id` int(10) unsigned NOT NULL DEFAULT '0', + `guild_id` int(10) unsigned NOT NULL DEFAULT '0', + `stat_id` int(10) unsigned NOT NULL DEFAULT '0', + `stat_value` double NOT NULL DEFAULT '0', + `stat_date` int(11) unsigned NOT NULL DEFAULT '0', + PRIMARY KEY (`id`), + UNIQUE KEY `characterIDX` (`char_id`,`guild_id`,`stat_id`) +) ENGINE=InnoDB AUTO_INCREMENT=125292 DEFAULT CHARSET=utf8; +INSERT INTO `table_versions` (`name`,`version`,`download_version`) values ('statistics',1,0); +DROP TABLE IF EXISTS `titles`; +CREATE TABLE IF NOT EXISTS `titles` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `title` varchar(64) COLLATE latin1_general_ci DEFAULT '', + `prefix` tinyint(1) unsigned NOT NULL DEFAULT '0', + `description` text COLLATE latin1_general_ci, + `price` varchar(64) COLLATE latin1_general_ci DEFAULT '', + PRIMARY KEY (`id`) +) ENGINE=InnoDB AUTO_INCREMENT=562 DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci; +INSERT INTO `titles` (`id`, `title`, `prefix`, `description`, `price`) VALUES + (1, 'Candidate', 1, NULL, ''), + (2, 'Apprentice Guide', 1, NULL, ''), + (3, 'Guide', 1, NULL, ''), + (4, 'Senior Guide', 1, NULL, ''), + (5, 'Elder Guide', 1, NULL, ''), + (6, 'GM', 1, NULL, ''), + (7, 'GM Admin', 1, NULL, ''), + (8, 'Designer', 1, NULL, ''), + (9, 'Developer', 1, NULL, ''), + (21, 'of EQ2Emulator', 0, 'Default Suffix Title (for testing purposes)', ''), + (100, 'Server Admin', 1, NULL, ''), + (101, ', Champion of Bayle', 0, 'A suffix title granted for completing Eternal Revenge quest in the Royal Hunting Camp. ', ''), + (102, ', Champion of D\'Lere ', 0, 'Suffix title granted for completing the quest, Tinmizer\'s Magnificent Messenger. ', ''), + (103, ', Destroyer of Aviaks', 0, '10000 Kills', ''), + (104, ', Destroyer of Brownies', 0, '10000 Kills', ''), + (105, ', Destroyer of Bugbears', 0, '10000 Kills', ''), + (106, ', Destroyer of Clockworks', 0, '10000 Kills', ''), + (107, ', Destroyer of Cyclops', 0, '10000 Kills', ''), + (108, ', Destroyer of Di\'Zok', 0, '10000 Kills', ''), + (109, ', Destroyer of Djinn', 0, '10000 Kills', ''), + (110, ', Destroyer of Droag', 0, '10000 Kills', ''), + (111, ', Destroyer of Drolvarg', 0, '10000 Kills', ''), + (112, ', Destroyer of Elementals', 0, '10000 Kills', ''), + (113, ', Destroyer of Exenka', 0, 'Suffix title earned for participating in the killing of Exenka, a dragon that appeared in Enchanted Lands when the Ulteran Spires were completed during the events leading to release of Kingdom of Sky. ', ''), + (114, ', Destroyer of Fairies', 0, '10000 Kills', ''), + (115, ', Destroyer of Frogloks', 0, '10000 Kills', ''), + (116, ', Destroyer of Gnolls', 0, '10000 Kills', ''), + (117, ', Destroyer of Goblins', 0, '10000 Kills', ''), + (118, ', Destroyer of Harpies', 0, '10000 Kills', ''), + (119, ', Destroyer of Kobolds', 0, '10000 Kills', ''), + (120, ', Destroyer of Lashka', 0, 'Suffix title earned for participating in the killing of Lashka, a dragon that appeared in The Commonlands when the Ulteran Spires were completed during the events leading to release of Kingdom of Sky. ', ''), + (121, ', Destroyer of Netshiavha ', 0, 'Suffix title earned for participating in the killing of Netshiavha, a dragon that appeared in The Feerrott when the Ulteran Spires were completed during the events leading to release of Kingdom of Sky. ', ''), + (122, ', Destroyer of Orcs', 0, '10000 Kills', ''), + (123, ', Destroyer of Ordanach', 0, 'Suffix title earned for participating in the killing of Ordanach, a dragon that appeared in Antonica when the Ulteran Spires were completed during the events leading to release of Kingdom of Sky. ', ''), + (124, ', Destroyer of Pheurtix', 0, 'Suffix title earned for participating in the killing of Pheurtix, a dragon that appeared in The Thundering Steppes when the Ulteran Spires were completed during the events leading to release of Kingdom of Sky. ', ''), + (125, ', Destroyer of Ravasect', 0, '10000 Kills', ''), + (126, ', Destroyer of Saevytr', 0, 'Suffix title earned for participating in the killing of Saevytr, a dragon that appeared in Nektulos Forest when the Ulteran Spires were completed during the events leading to release of Kingdom of Sky. ', ''), + (127, ', Destroyer of Undead', 0, '10000 Kills', ''), + (128, ', Destroyer of Vampires', 0, '10000 Kills', ''), + (129, ', Destroyer of Werewolves', 0, '10000 Kills', ''), + (130, ', Destroyer of Yha-lei', 0, '10000 Kills', ''), + (131, ', Gate Caller Architect', 0, 'Suffix title earned for crafting 100 tradeskill units during the building of the Ulteran Spires during the live events leading to the release of Kingdom of Sky. ', ''), + (132, ', Gate Caller Builder', 0, 'Suffix title earned for crafting 10 tradeskill units during the building of the Ulteran Spires during the live events leading to the release of Kingdom of Sky. ', ''), + (133, ', Gate Caller Constructor', 0, 'Suffix title earned for crafting 10 conduits during the building of the Ulteran Spires during the live events leading to the release of Kingdom of Sky. ', ''), + (134, ', Gate Caller Engineer ', 0, 'Suffix title earned for crafting 50 tradeskill units during the building of the Ulteran Spires during the live events leading to the release of Kingdom of Sky', ''), + (135, ', Gate Caller Fabricator ', 0, 'Suffix title earned for crafting 10 support beams during the building of the Ulteran Spires during the live events leading to the release of Kingdom of Sky. ', ''), + (136, ', Gate Caller Sky Seeker', 0, 'Suffix title earned for crafting 10 sky essences during the building of the Ulteran Spires during the live events leading to the release of Kingdom of Sky. ', ''), + (137, ', Hero of Kugup', 0, 'Title received from completing the quest Marr\'s Chosen. ', ''), + (138, ', Hero of the Ethernauts', 0, 'Random Chance from an Ethernauts Booster pack (LoN title)', ''), + (139, ', Hero of the Inquisition', 0, 'Random Chance from an Inquisitor Booster pack', ''), + (140, ', Hero of the Oathbound', 0, 'Random Chance from an Inquisitor Booster pack ', ''), + (141, ', Hunter of Aviaks', 0, '500 Kills', ''), + (142, ', Hunter of Brownies', 0, '500 Kills', ''), + (143, ', Hunter of Bugbears', 0, '500 Kills', ''), + (144, ', Hunter of Clockworks', 0, '500 Kills', ''), + (145, ', Hunter of Cyclops', 0, '500 Kills', ''), + (146, ', Hunter of Di\'Zok', 0, '500 Kills', ''), + (147, ', Hunter of Djinn', 0, '500 Kills', ''), + (148, ', Hunter of Droag', 0, '500 Kills', ''), + (149, ', Hunter of Drolvarg', 0, '500 Kills', ''), + (150, ', Hunter of Elementals', 0, '500 Kills', ''), + (151, ', Hunter of Fairies', 0, '500 Kills', ''), + (152, ', Hunter of Frogloks', 0, '500 Kills', ''), + (153, ', Hunter of Gnolls', 0, '500 Kills', ''), + (154, ', Hunter of Goblins', 0, '500 Kills', ''), + (155, ', Hunter of Harpies', 0, '500 Kills', ''), + (156, ', Hunter of Kobolds', 0, '500 Kills', ''), + (157, ', Hunter of Orcs', 0, '500 Kills', ''), + (158, ', Hunter of Ravasect', 0, '500 Kills', ''), + (159, ', Hunter of the Wastes', 0, 'Title received as a reward from A More Dangerous Game! Test of Mastery! quest. ', ''), + (160, ', Hunter of Undead', 0, '500 Kills', ''), + (161, ', Hunter of Vampires', 0, '500 Kills', ''), + (162, ', Hunter of Werewolves', 0, '500 Kills', ''), + (163, ', Hunter of Yha-lei', 0, '500 Kills', ''), + (164, ', Knight of Bayle', 0, 'Reach level 20 within two weeks under \'good\' faction.', ''), + (165, ', Knight of D\'Lere', 0, 'Reach level 20 within two weeks under \'evil\' faction. ', ''), + (166, ', Knight of Exiled', 0, 'Reach level 20 within two weeks under \'exiled\' faction. ', ''), + (167, ', Legend of Norrath', 0, 'Random Chance from an Oathbound Booster pack ', ''), + (168, ', Legionnaire of Rime', 0, '100 Order of Rime Repeatable Quests ', ''), + (169, ', Nybright Benefactor', 0, 'suffix title received from completing the quest Lock and Key', ''), + (170, ', Order of Rime', 0, '25 Order of Rime Repeatable Quests ', ''), + (171, ', Paragon of Truth', 0, 'suffix title received from completing the quest Earning Rank', ''), + (172, ', Rime Knight ', 0, '125 Order of Rime Repeatable Quests ', ''), + (173, ', Sentinel of Rime ', 0, '75 Order of Rime Repeatable Quests ', ''), + (174, ', Shadow Assailant', 0, '', ''), + (175, ', Slayer of Aviaks', 0, '5000 Kills ', ''), + (176, ', Slayer of Brownies', 0, '5000 Kills ', ''), + (177, ', Slayer of Bugbears', 0, '5000 Kills ', ''), + (178, ', Slayer of Clockworks', 0, '5000 Kills ', ''), + (179, ', Slayer of Cyclops', 0, '5000 Kills ', ''), + (180, ', Slayer of Di\'Zok', 0, '5000 Kills ', ''), + (181, ', Slayer of Djinn', 0, '5000 Kills ', ''), + (182, ', Slayer of Droag', 0, '5000 Kills ', ''), + (183, ', Slayer of Drolvarg', 0, '5000 Kills ', ''), + (184, ', Slayer of Elementals', 0, '5000 Kills ', ''), + (185, ', Slayer of Fairies', 0, '5000 Kills ', ''), + (186, ', Slayer of Frogloks', 0, '5000 Kills ', ''), + (187, ', Slayer of Gnolls', 0, '5000 Kills ', ''), + (188, ', Slayer of Goblins', 0, '5000 Kills ', ''), + (189, ', Slayer of Harpies', 0, '5000 Kills ', ''), + (190, ', Slayer of Kobolds', 0, '5000 Kills ', ''), + (191, ', Slayer of Orcs', 0, '5000 Kills ', ''), + (192, ', Slayer of Ravasect', 0, '5000 Kills ', ''), + (193, ', Slayer of Undead', 0, '5000 Kills ', ''), + (194, ', Slayer of Vampires', 0, '5000 Kills ', ''), + (195, ', Slayer of Werewolves', 0, '5000 Kills ', ''), + (196, ', Slayer of Yha-lei', 0, '5000 Kills ', ''), + (197, ', Tempest Chaser', 0, 'Suffix title earned during a world event. Obtained by completing the quest Tempests of Mystery or Storms of Mystery. ', ''), + (198, ', the Oathbreaker', 0, 'Random Chance from an Oathbreaker Booster pack ', ''), + (199, ', Trooper of Rime ', 0, '50 Order of Rime Repeatable Quests ', ''), + (200, 'Acolyte', 1, 'Prefix Title earned by gaining +20,000 (Kindly) faction with the Dismal Rage in North Freeport.', ''), + (201, 'Acquisitions Expert', 1, 'Prefix Title earned by gaining +40,000 (Ally) faction with The Dark Bargainers in the City of Neriak. ', ''), + (202, 'Adherent', 1, 'Prefix Title earned by gaining +20,000 (Kindly) faction with the Celestial Watch in North Qeynos. ', ''), + (203, 'Agent', 1, '500 missions completed', ''), + (204, 'Animalist', 1, 'A prefix title awarded to druids who complete their agility AA line. ', ''), + (205, 'Animist', 1, 'A prefix title awarded to summoners who complete their wisdom AA line. ', ''), + (206, 'Apprentice', 1, 'Prefix Title earned by gaining 10,000 (amiable) faction with the The Watchers of Timorous in Gorowyn. ', ''), + (207, 'Apprentice Liaison', 1, 'A prefix Title earned by gaining +10,000 (Amiable) faction with Tunare\'s Pages (Tradeskills) in the City of Kelethin. ', ''), + (208, 'Arbiter', 1, 'A prefix title awarded to clerics who complete their intelligence AA line. ', ''), + (209, 'Arcanist', 1, 'A prefix title earned by gaining +40,000 (Ally) faction with the Order of Arcane in the City of Kelethin. ', ''), + (210, 'Arch Duchess', 1, 'A Title available only to female characters in level 75+ guilds. Eligible characters can purchase it from Freeport/Qeynos/Kelethin city merchants', '3p 42g 3,118,591 status. '), + (211, 'Arch Duke ', 1, 'A Title available only to male characters in level 75+ guilds. Eligible characters can purchase it from Freeport/Qeynos/Kelethin city merchants', '3p 42g 3,118,591 status. '), + (212, 'Arch Lich', 1, 'From the Shadow Odyssey, can be obtained by Necromancers of no less than 182 AA points ', ''), + (213, 'Archer', 1, 'A prefix title awarded to predators who complete their agility AA line', ''), + (214, 'Archivist ', 1, 'A prefix title earned by gaining +20,000 (Kindly) faction with the Academy of Arcane Science in North Freeport. ', ''), + (215, 'Archon', 1, 'From the Shadow Odyssey, can be obtained by Inquisitors of no less than 182 AA points ', ''), + (216, 'Augurer', 1, 'A prefix title earned by gaining +40,000 (Ally) faction with the Concordium in South Qeynos. ', ''), + (217, 'Avenger', 1, 'A prefix title awarded to crusaders who complete their strength AA line. ', ''), + (218, 'Bargain Hunter', 1, 'A prefix title earned by gaining +10,000 (Amiable) faction with The Dark Bargainers in Neriak, City of Hate. ', ''), + (219, 'Baron', 1, 'A prefix title available only to male characters in level 50+ guilds. Eligible characters can purchase it from Freeport/Qeynos/Kelethin city merchants. ', ''), + (220, 'Baroness', 1, 'A prefix title available only to female characters in level 50+ guilds. Eligible characters can purchase it from Freeport/Qeynos/Kelethin city merchants. ', ''), + (221, 'Battlemage', 1, 'A prefix title awarded to sorcerers who complete their stamina AA line. ', ''), + (222, 'Battlemaster', 1, 'From the Shadow Odyssey, can be obtained by Berserker of no less than 182 AA points ', ''), + (223, 'Battlerager', 1, 'From the Shadow Odyssey, can be obtained by Bruisers of no less than 182 AA points ', ''), + (224, 'Beguiler', 1, 'From the Shadow Odyssey, can be obtained by Illusionists of no less than 182 AA points ', ''), + (225, 'Bishop', 1, 'A prefix title awarded to clerics who complete their strength AA line. ', ''), + (226, 'Blackguard', 1, 'A prefix title awarded to rogues who complete their strength AA line.', ''), + (227, 'Blademaster', 1, 'A prefix title awarded to predators who complete their strength AA line. ', ''), + (228, 'Bladesinger', 1, 'A prefix title awarded to bards who complete their strength AA line.', ''), + (229, 'Blight Sage ', 1, 'A prefix title earned by gaining +30,000 (Warmly) faction with the Dismal Rage in North Freeport. ', ''), + (230, 'Blighter', 1, 'A prefix title awarded to shamans who complete their intelligence AA line.', ''), + (231, 'Bowyer', 1, 'From the Shadow Odyssey, can be obtained by Rangers of no less than 182 AA points ', ''), + (232, 'Cabalist', 1, 'A prefix title awarded to summoners who complete their agility AA line.', ''), + (233, 'Captain', 1, 'Prefix Title earned by gaining +40,000 (Ally) faction with the Seafury Buccaneers in South Freeport.', ''), + (234, 'Cavalier', 1, 'A prefix title awarded to crusaders who complete their agility AA line. ', ''), + (235, 'Champion', 1, 'PvP title', ''), + (236, 'Champion of Discord', 0, '500 PvP writs', ''), + (237, 'Champion of Drednever', 0, 'suffix title received from completing the quest Host of Thyr: Act III: Reckoning', ''), + (238, 'Champion of the Nest', 0, 'Suffix title earned for participating in the 2006 Fan Faire event. (Part of LU21) ', ''), + (239, 'Chieftain', 1, 'A prefix title awarded to shamans who complete their agility AA line. ', ''), + (240, 'Chronicler', 1, 'Prefix Title earned by gaining +20,000 (Kindly) faction with the Concordium in South Qeynos. ', ''), + (241, 'Chronomancer', 1, 'A prefix title awarded to enchanters who complete their agility AA line. ', ''), + (242, 'Collector', 1, '400 collections completed', ''), + (243, 'Commandant', 1, 'Prefix Title earned by gaining +40,000 (Ally) faction with the Freeport Militia in West Freeport. ', ''), + (244, 'Commission Deputy', 1, 'Prefix Title available for purchase after gaining +30,000 (Warmly) faction with the The Ironforge Exchange (Tradeskills)', '2p 45g 76s 20,000 status '), + (245, 'Commissioner ', 1, 'Prefix Title earned by gaining +30,000 (Warmly) faction with the The Coalition of Tradesfolke (Tradeskills) in West Freeport. ', ''), + (246, 'Corsair', 1, 'Prefix Title earned by gaining +30,000 (Warmly) faction with the Seafury Buccaneers in South Freeport.', ''), + (247, 'Count', 1, 'A Title available only to male characters in level 60+ guilds. Eligible characters can purchase it from Freeport/Qeynos/Kelethin city merchants', '3p 10g 48c 2577348 status. '), + (248, 'Countess ', 1, 'A Title available only to female characters in level 60+ guilds. Eligible characters can purchase it from Freeport/Qeynos/Kelethin city merchants. ', ''), + (249, 'Courier', 1, 'Prefix Title earned by gaining +10,000 (Amiable) faction with the The Coalition of Tradesfolke (Tradeskills) in West Freeport.', ''), + (250, 'Crane Sensei', 1, 'A prefix title awarded to brawlers who complete their wisdom AA line. ', ''), + (251, 'Crier', 1, 'Prefix Title available for purchase after gaining +10,000 (Amiable) faction with the The Ironforge Exchange (Tradeskills)', '15g 36s 20,000 status '), + (252, 'Dame', 1, 'Dame is a title available only to female characters in level 30+ guilds. Eligible characters can purchase the title from Freeport city merchants. ', ''), + (253, 'Darkblade', 1, 'Prefix Title earned by gaining +30,000 faction with the Agents of Neriak. Purchased from Dalion D\'Abth', '2p 45g 76s 20000 status. '), + (254, 'Deacon', 1, 'A prefix title awarded to clerics who complete their stamina AA line. ', ''), + (255, 'Deceiver', 1, 'From the Shadow Odyssey, can be obtained by Brigands of no less than 182 AA points ', ''), + (256, 'Deckhand', 1, 'By completing the 4 quests given by Scabby Gabby while on the quest Soko-what? ', ''), + (257, 'Defender', 1, 'Prefix Title earned by gaining +40,000 (Ally) faction with the House of the Protectors of Growth in the City of Kelethin. ', ''), + (258, 'Demolisher', 1, 'A prefix title awarded to warriors who complete their wisdom AA line. ', ''), + (259, 'Destroyer', 1, 'PvP title', ''), + (260, 'Destroyer of Discord', 0, '200 PvP writs', ''), + (261, 'Devotee', 1, 'Prefix Title earned by gaining +10,000 (Amiable) faction with the Dismal Rage in North Freeport. ', ''), + (262, 'Disciple', 1, 'Prefix Title earned by gaining +10,000 (Amiable) faction with the Celestial Watch in North Qeynos. ', ''), + (263, 'Dragoon', 1, 'A prefix title awarded to warriors who complete their agility AA line. ', ''), + (264, 'Dread Guard', 1, 'Prefix Title earned by gaining +40,000 faction with the Agents of Neriak. Purchased from Dalion D\'Abth', '3p 68g 64s 20000 status. '), + (265, 'Dread Knight', 1, 'From the Shadow Odyssey, can be obtained by Shadowknights of no less than 182 AA points ', ''), + (266, 'Dread Pirate', 1, 'From the Shadow Odyssey, can be obtained by Swashbucklers of no less than 182 AA points ', ''), + (267, 'Dreadnaught ', 1, 'PvP title', ''), + (268, 'Dreadnaught of Discord', 0, '800 PvP writs', ''), + (269, 'Dreamweaver', 1, 'A prefix title awarded to enchanters who complete their wisdom AA line.', ''), + (270, 'Duchess ', 1, 'A Title available only to female characters in level 70+ guilds. Eligible characters can purchase it from Freeport/Qeynos/Kelethin city merchants', '3p 42g 3,118,591 status. '), + (271, 'Duke ', 1, 'A Title available only to male characters in level 70+ guilds. Eligible characters can purchase it from Freeport/Qeynos/Kelethin', '3p 42g 3,118,591 status. '), + (272, 'Eagle Expert', 1, 'A prefix title awarded to brawlers who complete their intelligence AA line.', ''), + (273, 'Elder Hierophant', 1, 'From the Shadow Odyssey, can be obtained by Wardens of no less than 182 AA points', ''), + (274, 'Elegist', 1, 'From the Shadow Odyssey, can be obtained by Dirges of no less than 182 AA points', ''), + (275, 'Elementalist', 1, 'From the Shadow Odyssey, can be obtained by Conjurors of no less than 182 AA points ', ''), + (276, 'Empathic', 1, 'A prefix title awarded to enchanters who complete their stamina AA line. ', ''), + (277, 'Envoy', 1, 'Prefix Title available for purchase after gaining +20,000 (Kindly) faction with the The Ironforge Exchange (Tradeskills) in North Qeynos. ', '61g 44s 20,000 status '), + (278, 'Exalted', 1, 'Prefix Title earned by gaining +30,000 (Warmly) faction with the Concordium in South Qeynos.', ''), + (279, 'Executioner', 1, 'A prefix title awarded to warriors who complete their strength AA line. ', ''), + (280, 'Exorcist', 1, 'A prefix title awarded to clerics who complete their wisdom AA line. ', ''), + (281, 'Expert Liaison', 1, 'Prefix Title earned by gaining +30,000 (Warmly) faction with Tunare\'s Pages (Tradeskills) in the City of Kelethin. ', ''), + (282, 'Explorer', 1, 'Prefix Title earned by gaining +40,000 (Ally) faction with the Sylvan Hunters in the City of Kelethin. ', ''), + (283, 'Facilitator', 1, 'Prefix Title earned by gaining +20,000 (Kindly) faction with The Dark Bargainers in the City of Neriak. ', ''), + (284, 'Factor', 1, 'Prefix Title available for purchase after gaining +40,000 (Ally) faction with the The Ironforge Exchange (Tradeskills) in North Qeynos.', '3p 68g 64s 20,000 status '), + (285, 'Fencer', 1, 'A prefix title awarded to rogues who complete their wisdom AA line. ', ''), + (286, 'General', 1, 'PvP title', ''), + (287, 'General of Discord', 0, '1000 PvP writs', ''), + (288, 'Gladiator', 1, 'A prefix title awarded to warriors who complete their stamina AA line. ', ''), + (289, 'Golden Sun', 1, 'Prefix title earned by giving 500 monk pebbles to Huang in the Whistling Fist Clan\'s Tower on the Isle of Mara.', ''), + (290, 'Grandmaster', 1, 'From the Shadow Odyssey, can be obtained by Monks of no less than 182 AA points ', ''), + (291, 'Harbinger', 1, 'A prefix title awarded to bards who complete their wisdom AA line. ', ''), + (292, 'Heretic', 1, 'From the Shadow Odyssey, can be obtained by Warlocks of no less than 182 AA points ', ''), + (293, 'Hero of Maj\'Dul', 0, 'suffix title received from completing the epic storyline The Courts of Maj\'Dul: Of Fate and Destiny. ', ''), + (294, 'Hierophant', 1, 'A prefix title awarded to druids who complete their wisdom AA line.', ''), + (295, 'Hunter', 1, 'A prefix title awarded to predators who complete their stamina AA line. ', ''), + (296, 'Hunter', 1, 'an automatic prefix in PvP combat. ', ''), + (297, 'Hunter of Discord', 0, '50 PvP writs', ''), + (298, 'Interagent', 1, 'Prefix Title earned by gaining +20,000 (Kindly) faction with the The Coalition of Tradesfolke (Tradeskills) in West Freeport. ', ''), + (299, 'Invoker', 1, 'A prefix title awarded to sorcerers who complete their strength AA line. ', ''), + (300, 'Journeyman Liaison', 1, 'Prefix Title earned by gaining +20,000 (Kindly) faction with Tunare\'s Pages (Tradeskills) in the City of Kelethin. ', ''), + (301, 'Keeper of the Glade ', 0, 'From the Shadow Odyssey, can be obtained by Wardens of no less than 182 AA points ', ''), + (302, 'Kineticist', 1, 'A prefix title awarded to sorcerers who complete their intelligence AA line. ', ''), + (303, 'Knight', 1, 'A prefix title awarded to crusaders who complete their wisdom AA line. ', ''), + (304, 'Knight-Captain', 1, 'Prefix Title earned by gaining +40,000 (Ally) faction with the Qeynos Guard in North Qeynos. ', ''), + (305, 'Lady', 1, 'A Title available only to female characters in level 40+ guilds. Eligible characters can purchase it from Freeport/Qeynos/Kelethin city merchants.', ''), + (306, 'Legionnaire', 1, 'A prefix title awarded to crusaders who complete their intelligence AA line. ', ''), + (307, 'Lord', 1, 'A Title available only to male characters in level 40+ guilds. Eligible characters can purchase it from Freeport/Qeynos/Kelethin city merchants. ', ''), + (308, 'Luminary', 1, 'From the Shadow Odyssey, can be obtained by Mystics of no less than 182 AA points ', ''), + (309, 'Maar-Arcanist', 1, 'Prefix Title earned by gaining +20,000 (Kindly) faction with the Order of Arcane in the City of Kelethin. ', ''), + (310, 'Maar-Defender', 1, 'Prefix Title earned by gaining +20,000 (Kindly) faction with the House of the Protectors of Growth in the City of Kelethin. ', ''), + (311, 'Maar-Explorer', 1, 'Prefix Title earned by gaining +20,000 (Kindly) faction with the Sylvan Hunters in the City of Kelethin. ', ''), + (312, 'Maar-Presbyter', 1, 'Prefix Title earned by gaining +20,000 (Kindly) faction with the House of Falling Stars in the City of Kelethin. ', ''), + (313, 'Madam', 1, 'A Title available only to female characters in level 30+ guilds. Eligible characters can purchase it from Qeynos/Kelethin city merchants. ', ''), + (314, 'Maestro', 1, 'From the Shadow Odyssey, can be obtained by Troubadors of no less than 182 AA points ', ''), + (315, 'Magician', 1, 'A prefix title awarded to summoners who complete their intelligence AA line. ', ''), + (316, 'Man-at-Arms', 1, 'Prefix Title earned by gaining +30,000 (Warmly) faction with the Freeport Militia in West Freeport.', ''), + (317, 'Mantis Master', 1, 'A prefix title awarded to brawlers who complete their stamina AA line. ', ''), + (318, 'Marauder', 1, 'Prefix Title earned by gaining +20,000 (Kindly) faction with the Seafury Buccaneers in South Freeport. ', ''), + (319, 'Marauder of Veksar', 0, 'Title earned for winning the 2008 Fan Faire event. It was a speed run through Veksar. ', ''), + (320, 'Mariner', 1, 'Prefix Title earned by gaining +10,000 (Amiable) faction with the Seafury Buccaneers in South Freeport. ', ''), + (321, 'Marquis ', 1, 'A Title available only to male characters in level 65+ guilds. Eligible characters can purchase it from Freeport/Qeynos/Kelethin city merchants', '3p 24g 2,835,082 status. '), + (322, 'Marquise', 1, 'A Title available only to female characters in level 65+ guilds. Eligible characters can purchase it from Freeport/Qeynos/Kelethin', '3p 24g 2,835,082 status'), + (323, 'Master', 1, 'PvP title', ''), + (324, 'Master Alchemist', 1, 'A prefix awarded for completing the quest: The Proof of the Pudding. ?Upon completing the quest, you will receive a mail from the \'leader\' of your city\'s tradeskill faction. Attached to this mail is a house item (scroll). As soon as you remove the item from the mail, you are granted the title. ', ''), + (325, 'Master Armorer ', 1, 'A prefix awarded for completing the quest: The Proof of the Pudding. ?Upon completing the quest, you will receive a mail from the \'leader\' of your city\'s tradeskill faction. Attached to this mail is a house item (scroll). As soon as you remove the item from the mail, you are granted the title. ', ''), + (326, 'Master Carpenter ', 1, 'A prefix awarded for completing the quest: The Proof of the Pudding. ?Upon completing the quest, you will receive a mail from the \'leader\' of your city\'s tradeskill faction. Attached to this mail is a house item (scroll). As soon as you remove the item from the mail, you are granted the title. ', ''), + (327, 'Master Crafter', 1, '100000 combines', ''), + (328, 'Master Jeweler ', 1, 'A prefix awarded for completing the quest: The Proof of the Pudding. ?Upon completing the quest, you will receive a mail from the \'leader\' of your city\'s tradeskill faction. Attached to this mail is a house item (scroll). As soon as you remove the item from the mail, you are granted the title. ', ''), + (329, 'Master Liaison', 1, 'Prefix Title earned by gaining +40,000 (Ally) faction with Tunare\'s Pages (Tradeskills) in the City of Kelethin. ', ''), + (330, 'Master of Discord ', 0, '2000 PvP writs', ''), + (331, 'Master Provisioner ', 1, 'A prefix awarded for completing the quest: The Proof of the Pudding. ?Upon completing the quest, you will receive a mail from the \'leader\' of your city\'s tradeskill faction. Attached to this mail is a house item (scroll). As soon as you remove the item from the mail, you are granted the title. ', ''), + (332, 'Master Sage', 1, 'A prefix awarded for completing the quest: The Proof of the Pudding. ?Upon completing the quest, you will receive a mail from the \'leader\' of your city\'s tradeskill faction. Attached to this mail is a house item (scroll). As soon as you remove the item from the mail, you are granted the title. ', ''), + (333, 'Master Tailor ', 1, 'A prefix awarded for completing the quest: The Proof of the Pudding. ?Upon completing the quest, you will receive a mail from the \'leader\' of your city\'s tradeskill faction. Attached to this mail is a house item (scroll). As soon as you remove the item from the mail, you are granted the title. ', ''), + (334, 'Master Weaponsmith ', 1, 'A prefix awarded for completing the quest: The Proof of the Pudding. ?Upon completing the quest, you will receive a mail from the \'leader\' of your city\'s tradeskill faction. Attached to this mail is a house item (scroll). As soon as you remove the item from the mail, you are granted the title. ', ''), + (335, 'Master Woodworker ', 1, 'A prefix awarded for completing the quest: The Proof of the Pudding. ?Upon completing the quest, you will receive a mail from the \'leader\' of your city\'s tradeskill faction. Attached to this mail is a house item (scroll). As soon as you remove the item from the mail, you are granted the title. ', ''), + (336, 'Mercenary', 1, 'by gaining +10,000 (Amiable) faction with the Freeport Militia in West Freeport', ''), + (337, 'Mercenary', 1, 'by completing the stamina AA line on Swashbucklers or Brigands. ', ''), + (338, 'Meti-Arcanist', 1, 'Prefix Title earned by gaining +30,000 (Warmly) faction with the Order of Arcane in the City of Kelethin. ', ''), + (339, 'Meti-Defender', 1, 'Prefix Title earned by gaining +30,000 (Warmly) faction with the House of the Protectors of Growth in the City of Kelethin. ', ''), + (340, 'Meti-Explorer', 1, 'Prefix Title earned by gaining +30,000 (Warmly) faction with the Sylvan Hunters in the City of Kelethin. ', ''), + (341, 'Meti-Presbyter', 1, 'Prefix Title earned by gaining +30,000 (Warmly) faction with the House of Falling Stars in the City of Kelethin.', ''), + (342, 'Minor Arcanist', 1, 'Prefix Title earned by gaining +10,000 (Amiable) faction with the Order of Arcane in the City of Kelethin. ', ''), + (343, 'Minor Defender', 1, 'Prefix Title earned by gaining +10,000 (Amiable) faction with the House of the Protectors of Growth in the City of Kelethin. ', ''), + (344, 'Minor Explorer', 1, 'Prefix Title earned by gaining +10,000 (Amiable) faction with the Sylvan Hunters in the City of Kelethin. ', ''), + (345, 'Minor Presbyter', 1, 'Prefix Title earned by gaining +10,000 (Amiable) faction with the House of Falling Stars in the City of Kelethin.', ''), + (346, 'Minstrel', 1, 'A prefix title awarded to bards who complete their intelligence AA line.', ''), + (347, 'Missionary', 1, 'Prefix Title earned by gaining +30,000 (Warmly) faction with the Celestial Watch in North Qeynos. ', ''), + (348, 'Monkey Guru', 1, 'A prefix title awarded to brawlers who complete their agility AA line.', ''), + (349, 'Naturalist', 1, 'by gaining +10,000 (Amiable) faction with the Tunarian Alliance in Elddar Grove. ', ''), + (350, 'Naturalist', 1, 'by completing the strength AA line on Furies or Wardens. ', ''), + (351, 'Neophyte ', 1, 'Prefix Title earned by gaining +10,000 (Amiable) faction with the Academy of Arcane Science in North Freeport. ', ''), + (352, 'Nightshade', 1, 'A prefix title awarded to predators who complete their intelligence AA line. ', ''), + (353, 'Novitiate', 1, 'Prefix Title earned by gaining +10,000 (Amiable) faction with the Concordium in South Qeynos. ', ''), + (354, 'Occultist', 1, 'Prefix Title earned by gaining +40,000 (Ally) faction with the Dismal Rage in North Freeport.', ''), + (355, 'of Al\'Kabor ', 0, 'Granted after examining the item: an ancestral scroll (?/claim for having a Heritage account. ?Granted by claiming the 3 year Veteran Reward. )', ''), + (356, 'of Antonius Bayle ', 0, 'Granted after examining the item: an ancestral scroll (?/claim for having a Heritage account. ?Granted by claiming the 3 year Veteran Reward. )', ''), + (357, 'of Ayonae Ro ', 0, 'Granted after examining the item: an ancestral scroll (?/claim for having a Heritage account. ?Granted by claiming the 3 year Veteran Reward. )', ''), + (358, 'of Bertoxxulous ', 0, 'Granted after examining the item: an ancestral scroll (?/claim for having a Heritage account. ?Granted by claiming the 3 year Veteran Reward. )', ''), + (359, 'of Brell Serilis ', 0, 'Granted after examining the item: an ancestral scroll (?/claim for having a Heritage account. ?Granted by claiming the 3 year Veteran Reward. )', ''), + (360, 'of Bristlebane', 0, 'Granted after examining the item: an ancestral scroll (?/claim for having a Heritage account. ?Granted by claiming the 3 year Veteran Reward. )', ''), + (361, 'of Castle Lightwolf ', 0, 'Granted after examining the item: an ancestral scroll (?/claim for having a Heritage account. ?Granted by claiming the 3 year Veteran Reward. )', ''), + (362, 'of Cazic-Thule ', 0, 'Granted after examining the item: an ancestral scroll (?/claim for having a Heritage account. ?Granted by claiming the 3 year Veteran Reward. )', ''), + (363, 'of Dark Solace ', 0, 'Granted after examining the item: an ancestral scroll (?/claim for having a Heritage account. ?Granted by claiming the 3 year Veteran Reward. )', ''), + (364, 'of Diren Hold ', 0, 'Granted after examining the item: an ancestral scroll (?/claim for having a Heritage account. ?Granted by claiming the 3 year Veteran Reward. )', ''), + (365, 'of Drinal ', 0, 'Granted after examining the item: an ancestral scroll (?/claim for having a Heritage account. ?Granted by claiming the 3 year Veteran Reward. )', ''), + (366, 'of Druzzil Ro', 0, 'Granted after examining the item: an ancestral scroll (?/claim for having a Heritage account. ?Granted by claiming the 3 year Veteran Reward. )', ''), + (367, 'of Erollisi Marr ', 0, 'Granted after examining the item: an ancestral scroll (?/claim for having a Heritage account. ?Granted by claiming the 3 year Veteran Reward. )', ''), + (368, 'of E`Ci ', 0, 'Granted after examining the item: an ancestral scroll (?/claim for having a Heritage account. ?Granted by claiming the 3 year Veteran Reward. )', ''), + (369, 'of Fennin Ro ', 0, 'Granted after examining the item: an ancestral scroll (?/claim for having a Heritage account. ?Granted by claiming the 3 year Veteran Reward. )', ''), + (370, 'of Ferran\'s Hope ', 0, 'Granted after examining the item: an ancestral scroll (?/claim for having a Heritage account. ?Granted by claiming the 3 year Veteran Reward. )', ''), + (371, 'of Firiona Vie', 0, 'Granted after examining the item: an ancestral scroll (?/claim for having a Heritage account. ?Granted by claiming the 3 year Veteran Reward. )', ''), + (372, 'of Hodstock ', 0, 'Granted after examining the item: an ancestral scroll (?/claim for having a Heritage account. ?Granted by claiming the 3 year Veteran Reward. )', ''), + (373, 'of Innoruuk ', 0, 'Granted after examining the item: an ancestral scroll (?/claim for having a Heritage account. ?Granted by claiming the 3 year Veteran Reward. )', ''), + (374, 'of Kael Drakkal ', 0, 'Granted after examining the item: an ancestral scroll (?/claim for having a Heritage account. ?Granted by claiming the 3 year Veteran Reward. )', ''), + (375, 'of Kane Bayle ', 0, 'Granted after examining the item: an ancestral scroll (?/claim for having a Heritage account. ?Granted by claiming the 3 year Veteran Reward. )', ''), + (376, 'of Karana ', 0, 'Granted after examining the item: an ancestral scroll (?/claim for having a Heritage account. ?Granted by claiming the 3 year Veteran Reward. )', ''), + (377, 'of Lanys T`vyl ', 0, 'Granted after examining the item: an ancestral scroll (?/claim for having a Heritage account. ?Granted by claiming the 3 year Veteran Reward. )', ''), + (378, 'of Luclin ', 0, 'Granted after examining the item: an ancestral scroll (?/claim for having a Heritage account. ?Granted by claiming the 3 year Veteran Reward. )', ''), + (379, 'of Maelin Starpyre ', 0, 'Granted after examining the item: an ancestral scroll (?/claim for having a Heritage account. ?Granted by claiming the 3 year Veteran Reward. )', ''), + (380, 'of Marr\'s Fist ', 0, 'Granted after examining the item: an ancestral scroll (?/claim for having a Heritage account. ?Granted by claiming the 3 year Veteran Reward. )', ''), + (381, 'of Mithaniel Marr ', 0, 'Granted after examining the item: an ancestral scroll (?/claim for having a Heritage account. ?Granted by claiming the 3 year Veteran Reward. )', ''), + (382, 'of Morden Rasp ', 0, 'Granted after examining the item: an ancestral scroll (?/claim for having a Heritage account. ?Granted by claiming the 3 year Veteran Reward. )', ''), + (383, 'of Morell-Thule ', 0, 'Granted after examining the item: an ancestral scroll (?/claim for having a Heritage account. ?Granted by claiming the 3 year Veteran Reward. )', ''), + (384, 'of Povar ', 0, 'Granted after examining the item: an ancestral scroll (?/claim for having a Heritage account. ?Granted by claiming the 3 year Veteran Reward. )', ''), + (385, 'of Prexus ', 0, 'Granted after examining the item: an ancestral scroll (?/claim for having a Heritage account. ?Granted by claiming the 3 year Veteran Reward. )', ''), + (386, 'of Proudpine Outpost ', 0, 'Granted after examining the item: an ancestral scroll (?/claim for having a Heritage account. ?Granted by claiming the 3 year Veteran Reward. )', ''), + (387, 'of Quellious ', 0, 'Granted after examining the item: an ancestral scroll (?/claim for having a Heritage account. ?Granted by claiming the 3 year Veteran Reward. )', ''), + (388, 'of Rallos Zek ', 0, 'Granted after examining the item: an ancestral scroll (?/claim for having a Heritage account. ?Granted by claiming the 3 year Veteran Reward. )', ''), + (389, 'of Rodcet Nife ', 0, 'Granted after examining the item: an ancestral scroll (?/claim for having a Heritage account. ?Granted by claiming the 3 year Veteran Reward. )', ''), + (390, 'of Sarym ', 0, 'Granted after examining the item: an ancestral scroll (?/claim for having a Heritage account. ?Granted by claiming the 3 year Veteran Reward. )', ''), + (391, 'of Sebilis ', 0, 'Granted after examining the item: an ancestral scroll (?/claim for having a Heritage account. ?Granted by claiming the 3 year Veteran Reward. )', ''), + (392, 'of Solusek Ro ', 0, 'Granted after examining the item: an ancestral scroll (?/claim for having a Heritage account. ?Granted by claiming the 3 year Veteran Reward. )', ''), + (393, 'of Stone Watchers ', 0, 'Granted after examining the item: an ancestral scroll (?/claim for having a Heritage account. ?Granted by claiming the 3 year Veteran Reward. )', ''), + (394, 'of Stormhammer ', 0, 'Granted after examining the item: an ancestral scroll (?/claim for having a Heritage account. ?Granted by claiming the 3 year Veteran Reward. )', ''), + (395, 'of Stromm ', 0, 'Granted after examining the item: an ancestral scroll (?/claim for having a Heritage account. ?Granted by claiming the 3 year Veteran Reward. )', ''), + (396, 'of Sullon Zek ', 0, 'Granted after examining the item: an ancestral scroll (?/claim for having a Heritage account. ?Granted by claiming the 3 year Veteran Reward. )', ''), + (397, 'of Tallon Zek ', 0, 'Granted after examining the item: an ancestral scroll (?/claim for having a Heritage account. ?Granted by claiming the 3 year Veteran Reward. )', ''), + (398, 'of Tarew Marr ', 0, 'Granted after examining the item: an ancestral scroll (?/claim for having a Heritage account. ?Granted by claiming the 3 year Veteran Reward. )', ''), + (399, 'of Terris-Thule ', 0, 'Granted after examining the item: an ancestral scroll (?/claim for having a Heritage account. ?Granted by claiming the 3 year Veteran Reward. )', ''), + (400, 'of the Bronze Shackle', 0, 'A suffix title granted for completing The Trial of Bronze quest in Kunzar Jungle. ', ''), + (401, 'of the Clay Shackle', 0, 'Title received as a reward from the The Trial of Clay quest. ', ''), + (402, 'of the Copper Shackle', 0, 'A suffix title granted for completing The Trial of Copper quest in Kunzar Jungle. ', ''), + (403, 'of The Nameless ', 0, 'Granted after examining the item: an ancestral scroll (?/claim for having a Heritage account. ?Granted by claiming the 3 year Veteran Reward. )', ''), + (404, 'of The Nest ', 0, 'Granted after examining the item: an ancestral scroll (?/claim for having a Heritage account. ?Granted by claiming the 3 year Veteran Reward. )', ''), + (405, 'of The Rathe ', 0, 'Granted after examining the item: an ancestral scroll (?/claim for having a Heritage account. ?Granted by claiming the 3 year Veteran Reward. )', ''), + (406, 'of the Rock Shackle', 0, 'Title received as a reward from The Trial of Rock quest. ', ''), + (407, 'of the Seventh Hammer ', 0, 'Granted after examining the item: an ancestral scroll (?/claim for having a Heritage account. ?Granted by claiming the 3 year Veteran Reward. )', ''), + (408, 'of the Shard', 0, 'Title received as a reward from the Deception quest. ', ''), + (409, 'of the Steel Shackle', 0, 'A suffix title granted for completing The Trial of Steel quest in Kunzar Jungle. ', ''), + (410, 'of the Stone Shackle', 0, 'Title received as a reward from the The Trial of Stone quest.', ''), + (411, 'of the Tribunal ', 0, 'Granted after examining the item: an ancestral scroll (?/claim for having a Heritage account. ?Granted by claiming the 3 year Veteran Reward. )', ''), + (412, 'of the Tynnonium Shackle', 0, 'A suffix title granted for completing The Trial of Tynnonium quest in Kunzar Jungle. ', ''), + (413, 'of Toluxe Paells', 0, 'Granted after examining the item: an ancestral scroll (?/claim for having a Heritage account. ?Granted by claiming the 3 year Veteran Reward. )', ''), + (414, 'of Torvonnilous ', 0, 'Granted after examining the item: an ancestral scroll (?/claim for having a Heritage account. ?Granted by claiming the 3 year Veteran Reward. )', ''), + (415, 'of Tunare ', 0, 'Granted after examining the item: an ancestral scroll (?/claim for having a Heritage account. ?Granted by claiming the 3 year Veteran Reward. )', ''), + (416, 'of Vallon Zek ', 0, 'Granted after examining the item: an ancestral scroll (?/claim for having a Heritage account. ?Granted by claiming the 3 year Veteran Reward. )', ''), + (417, 'of Vazaelle ', 0, 'Granted after examining the item: an ancestral scroll (?/claim for having a Heritage account. ?Granted by claiming the 3 year Veteran Reward. )', ''), + (418, 'of Veeshan ', 0, 'Granted after examining the item: an ancestral scroll (?/claim for having a Heritage account. ?Granted by claiming the 3 year Veteran Reward. )', ''), + (419, 'of Venril Sathir ', 0, 'Granted after examining the item: an ancestral scroll (?/claim for having a Heritage account. ?Granted by claiming the 3 year Veteran Reward. )', ''), + (420, 'of Xegony ', 0, 'Granted after examining the item: an ancestral scroll (?/claim for having a Heritage account. ?Granted by claiming the 3 year Veteran Reward. )', ''), + (421, 'of Xev ', 0, 'Granted after examining the item: an ancestral scroll (?/claim for having a Heritage account. ?Granted by claiming the 3 year Veteran Reward. )', ''), + (422, 'of Zebuxoruk ', 0, 'Granted after examining the item: an ancestral scroll (?/claim for having a Heritage account. ?Granted by claiming the 3 year Veteran Reward. )', ''), + (423, 'Outrider', 1, 'Prefix Title earned by gaining +30,000 (Warmly) faction with the Tunarian Alliance in Elddar Grove. ', ''), + (424, 'Overlord', 1, 'PvP title', ''), + (425, 'Overlord', 1, 'From the Shadow Odyssey, can be obtained by Guardians of no less than 182 AA points ', ''), + (426, 'Overlord of Discord', 0, '5000 PvP writs', ''), + (427, 'Overseer', 1, 'PvP title', ''), + (428, 'Overseer of Discord', 0, '3000 PvP writs', ''), + (429, 'Parser', 1, 'Prefix Title earned by gaining 20,000 (amiable) faction with the The Watchers of Timorous in Gorowyn. ', ''), + (430, 'Pathfinder', 1, 'Prefix Title earned by gaining +20,000 (Kindly) faction with the Tunarian Alliance in Elddar Grove. ', ''), + (431, 'Perceptive', 1, '200 collections completed', ''), + (432, 'Perceptor', 1, 'A prefix title awarded to summoners who complete their stamina AA line. ', ''), + (433, 'Petty Officer', 1, 'By completing 4 quests from Petty Officer Kimtiz while on the quest A Higher Purpose ', ''), + (434, 'Pirate', 1, 'A prefix title awarded to rogues who complete their agility AA line. ', ''), + (435, 'Prelate', 1, 'Prefix Title earned by gaining +40,000 (Ally) faction with the Celestial Watch in North Qeynos. ', ''), + (436, 'Presbyter', 1, 'Prefix Title earned by gaining +40,000 (Ally) faction with the House of Falling Stars in the City of Kelethin. ', ''), + (437, 'Primary', 1, 'Prefix Title earned by gaining 40,000 (amiable) faction with the The Watchers of Timorous in Gorowyn. ', ''), + (438, 'Prime Purveyor', 1, 'Prefix Title earned by gaining 40,000 (ally) faction with the Academy of Logistics in Gorowyn. ', ''), + (439, 'Private', 1, 'Prefix Title earned by gaining +20,000 (Kindly) faction with the Qeynos Guard in North Qeynos. ', ''), + (440, 'Prophet', 1, 'A prefix title awarded to shamans who complete their strength AA line. ', ''), + (441, 'Protector', 1, 'A prefix title awarded to clerics who complete their agility AA line. ', ''), + (442, 'Protector', 1, 'From the Shadow Odyssey, can be obtained by Paladinss of no less than 182 AA points', ''), + (443, 'Prowler', 1, 'A prefix title awarded to predators who complete their wisdom AA line. ', ''), + (444, 'Psionicist', 1, 'From the Shadow Odyssey, can be obtained by Coercers of no less than 182 AA points ', ''), + (445, 'Quatcha Catcher', 0, 'A suffix title rewarded for completing the quest Find Stronger Help in Kunzar Jungle. ', ''), + (446, 'Racketeer ', 1, 'Prefix Title earned by gaining +40,000 (Ally) faction with the The Coalition of Tradesfolke (Tradeskills) in West Freeport. ', ''), + (447, 'Ritsar', 1, 'The Ritsar title is available only to male characters in level 30+ guilds. Eligible characters can purchase it from Freeport city merchants. ', ''), + (448, 'Ritualist', 1, 'A prefix title awarded to shamans who complete their wisdom AA line. ', ''), + (449, 'Rubble-rabble Rouser', 1, 'A prefix title awarded from completing the Everyone Loves a Snitch quest in the Kunzar Jungle. ', ''), + (450, 'Sagacious', 1, 'Prefix title earned by giving 500 monk pebbles to Huang in the Whistling Fist Clan\'s Tower on the Isle of Mara.', ''), + (451, 'Sage', 1, 'A prefix title awarded to sorcerers who complete their wisdom AA line. ', ''), + (452, 'Savant ', 1, 'by gaining +40,000 (Ally) faction with the Academy of Arcane Science in North Freeport. ', ''), + (453, 'Savant ', 1, 'by completing the intelligence AA line with a Enchanter character.', ''), + (454, 'Savior', 1, 'A Title available to all characters (no gender restriction) in level 80 guilds. Eligible characters can purchase it from Qeynos/Kelethin city merchants', '3p 60g 3,430,450 status. '), + (455, 'Scholar', 1, 'From the Shadow Odyssey, can be obtained by Wizards of no less than 182 AA points ', ''), + (456, 'Scion', 1, 'Prefix Title earned by gaining +10,000 faction with the Agents of Neriak. Purchased from Dalion D\'Abth', '15g 36s 20000 status. '), + (457, 'Secondary', 1, 'Prefix Title earned by gaining 30,000 (amiable) faction with the The Watchers of Timorous in Gorowyn. ', ''), + (458, 'Secondary Purveyor', 1, 'Prefix Title earned by gaining 30,000 (warmly) faction with the Academy of Logistics in Gorowyn. ', ''), + (459, 'Secret Agent', 1, '1000 missions completed', ''), + (460, 'Seeker of Discord', 0, '1 PvP writ', ''), + (461, 'Sentinel', 1, 'Prefix Title earned by gaining +20,000 (Kindly) faction with the Freeport Militia in West Freeport.', ''), + (462, 'Sentry', 1, 'A prefix title awarded to crusaders who complete their stamina AA line. ', ''), + (463, 'Serenicist', 1, 'A prefix title awarded to druids who complete their stamina AA line. ', ''), + (464, 'Sergeant-at-Arms', 1, 'Prefix Title earned by gaining +30,000 (Warmly) faction with the Qeynos Guard in North Qeynos. ', ''), + (465, 'Shackle Grandmaster', 1, 'A prefix title granted for completing The Trial of Tynnonium quest in Kunzar Jungle. ', ''), + (466, 'Shadowlurker', 1, 'From the Shadow Odyssey, can be obtained by Assassins of no less than 182 AA points ', ''), + (467, 'Sir', 1, 'A Title available only to male characters in level 30+ guilds. Eligible characters can purchase it from Qeynos/Kelethin city merchants. ', ''), + (468, 'Skald', 1, 'A prefix title awarded to bards who complete their stamina AA line. ', ''), + (469, 'Slayer', 1, 'PvP title', ''), + (470, 'Slayer', 1, 'A prefix title awarded to warriors who complete their intelligence AA line. ', ''), + (471, 'Slayer of Discord', 0, '100 PvP writs', ''), + (472, 'Spellblade', 1, 'A prefix title awarded to enchanters who complete their strength AA line. ', ''), + (473, 'Spellshifter', 1, 'A prefix title awarded to sorcerers who complete their strength AA line. ', ''), + (474, 'Spirit Walker', 1, 'From the Shadow Odyssey, can be obtained by Defilers of no less than 182 AA points ', ''), + (475, 'Squire', 1, 'Prefix Title earned by gaining +10,000 (Amiable) faction with the Qeynos Guard in North Qeynos. ', ''), + (476, 'Stockworker', 1, 'Prefix Title earned by gaining 10,000 (amiable) faction with the Academy of Logistics in Gorowyn. ', ''), + (477, 'Stormcaller', 1, 'A prefix title awarded to druids who complete their intelligence AA line. ', ''), + (478, 'Supplytender', 1, 'Prefix Title earned by gaining 20,000 (kindly) faction with the Academy of Logistics in Gorowyn. ', ''), + (479, 'Swabber', 1, 'Prefix title granted as reward for the quest, Prove Ye Be a Swabber! ', ''), + (480, 'Thaumaturge ', 1, 'Prefix Title earned by gaining +30,000 (Warmly) faction with the Academy of Arcane Science in North Freeport.', ''), + (481, 'the Aggressor ', 0, 'From the Shadow Odyssey, can be obtained by Berserkers of no less than 182 AA points ', ''), + (482, 'the Amorous', 0, 'Suffix title earned for giving 500 fresh-cut roses away during Erollisi Day. ', ''), + (483, 'the Apothecary', 0, 'Suffix title earned by a single player on each server who found the cure for the plague that hit each server during the 2005 live events. ', ''), + (484, 'the Artifact Raider', 0, 'Suffix title earned for completing 30 Heritage Quests.?You must talk to the following NPC to earn this title: ?Qeynos - Sage Indis Surion (green portal) in the mage tower in South Qeynos ?Freeport - Sage Navarius Orvalis in The Academy of Arcane Science in North Freeport ?Kelethin - Sage Piritta Silvarri. ', ''), + (485, 'the Assailant ', 0, '1000 arena kills', ''), + (486, 'the Axe Master', 0, 'suffix title received from the quest Axe and Ye Shall Receive, a Guide-run event. ', ''), + (487, 'the Bandit ', 0, 'From the Shadow Odyssey, can be obtained by Brigands of no less than 182 AA points ', ''), + (488, 'the Battle Cleric ', 0, 'From the Shadow Odyssey, can be obtained by Inquisitors of no less than 182 AA points ', ''), + (489, 'the Blade Singer ', 0, 'From the Shadow Odyssey, can be obtained by Dirges of no less than 182 AA points ', ''), + (490, 'the Bookbinder', 0, 'Complete In A Bind in The Village of Shin', ''), + (491, 'the Champion', 0, '1000 arena wins', ''), + (492, 'the Combatant ', 0, '500 Arena kills', ''), + (493, 'the Conqueror', 0, 'Freeportian suffix title earned during the live events leading up to the release of Bloodline Chronicles. ', ''), + (494, 'the Contender ', 0, '100 arena wins', ''), + (495, 'the Crusader ', 0, 'From the Shadow Odyssey, can be obtained by Paladins of no less than 182 AA points ', ''), + (496, 'the Cunning Saboteur', 0, 'From the Shadow Odyssey, can be obtained by Swashbucklers of no less than 182 AA points ', ''), + (497, 'the Dark Talon', 0, 'quest reward: Tie up Some Loose Ends ', ''), + (498, 'the Decimator', 0, 'Suffix title earned by giving 300 monk pebbles to Huang in the Whistling Fist Clan\'s Tower on the Isle of Mara. ', ''), + (499, 'the Dedicated', 0, 'suffix title granted by claiming the 2 year veteran reward. ', ''), + (500, 'the Distinguished', 0, 'suffix title granted by claiming the 3 year veteran reward. ', ''), + (501, 'the Dream Hero', 0, '', ''), + (502, 'the Ebon Dragon', 0, 'Title rewarded from the Elite Training quest. ', ''), + (503, 'the Enlightened ', 0, 'From the Shadow Odyssey, can be obtained by Monks of no less than 182 AA points ', ''), + (504, 'the Executioner ', 0, 'From the Shadow Odyssey, can be obtained by Assassins of no less than 182 AA points ', ''), + (505, 'the Exiled', 0, 'suffix title received after completing any betrayal quest of Qeynos, Freeport or Kelethin. ?You will lose it when you become a citizen of any city (except Maj\'Dul) ', ''), + (506, 'the Festive Spirit ', 0, 'participate in Norrath\'s 6 holiday festivities ', ''), + (507, 'the Flirtatious', 0, 'Suffix title earned for giving 25 fresh-cut roses away during Erollisi Day. ', ''), + (508, 'the Forest Stalker ', 0, 'From the Shadow Odyssey, can be obtained by Rangers of no less than 182 AA points ', ''), + (509, 'the Fox', 0, 'Suffix title earned by giving 250 monk pebbles to Huang in the Whistling Fist Clan\'s Tower on the Isle of Mara.', ''), + (510, 'the Fragrant', 0, 'Suffix title earned by giving 150 monk pebbles to Huang in the Whistling Fist Clan\'s Tower on the Isle of Mara.', ''), + (511, 'the Gladiator ', 0, '5000 arena kills', ''), + (512, 'the Gnomish Pirate', 0, 'suffix title received from the quest Printing Pressganger', ''), + (513, 'the Grand Evoker ', 0, 'From the Shadow Odyssey, can be obtained by Wizards of no less than 182 AA points ', ''), + (514, 'the Guild Hall Constructor', 0, 'This suffix title "Guild Hall Constructor" is granted by the quest "Construction Materials" as part of the lead-up to the introduction of Guild Halls in EQ2. You achieve this by completing 30 construction materials quests. ', ''), + (515, 'the Heartbreaker', 0, 'Suffix title earned for giving 1000 fresh-cut roses away during Erollisi Day. ', ''), + (516, 'the Heretic ', 0, 'From the Shadow Odyssey, can be obtained by Necromancers of no less than 182 AA points ', ''), + (517, 'the High Magician ', 0, 'From the Shadow Odyssey, can be obtained by Conjurors of no less than 182 AA points ', ''), + (518, 'the High Priest ', 0, 'From the Shadow Odyssey, can be obtained by Templars of no less than 182 AA points ', ''), + (519, 'the Jade Tiger', 0, 'Title rewarded from the quest Learning the Way. ', ''), + (520, 'the Lore Seeker', 0, 'Suffix title earned for completing 10 Heritage Quests. ?You must talk to the following NPC to earn this title: ?Qeynos - Sage Indis Surion (green portal) in the mage tower in South Qeynos ?Freeport - Sage Navarius Orvalis in The Academy of Arcane Science in North Freeport ?Kelethin - Sage Piritta Silvarri. ', ''), + (521, 'the Loyal', 0, 'suffix title granted by claiming the 1 year veteran reward. ', ''), + (522, 'the Mind Bender', 0, 'From the Shadow Odyssey, can be obtained by Coercers of no less than 182 AA points ', ''), + (523, 'the Muse ', 0, 'From the Shadow Odyssey, can be obtained by Troubadors of no less than 182 AA points ', ''), + (524, 'the Oracle ', 0, 'From the Shadow Odyssey, can be obtained by Mystics of no less than 182 AA points ', ''), + (525, 'the Passionate', 0, 'Suffix title earned for giving 250 fresh-cut roses away during Erollisi Day.', ''), + (526, 'the Patient', 0, '50000 tradeskill combines', ''), + (527, 'the Perceptive', 0, '', ''), + (528, 'the Persistant ', 0, 'Suffix title earned by giving 100 monk pebbles to Huang in the Whistling Fist Clan\'s Tower on the Isle of Mara.', ''), + (529, 'the Plague Bringer ', 0, 'From the Shadow Odyssey, can be obtained by Warlocks of no less than 182 AA points ', ''), + (530, 'the Protector', 0, 'Qeynosian suffix title earned during the live events leading up to the release of Bloodline Chronicles.', ''), + (531, 'the Protector ', 0, 'From the Shadow Odyssey, can be obtained by Guardians of no less than 182 AA points ', ''), + (532, 'The Prurient', 0, 'The Prurient is a prefix title earned for giving a cumulative 2000 fresh-cut roses away in My Romantic Reputation. (quest)', ''), + (533, 'the Reaver ', 0, 'From the Shadow Odyssey, can be obtained by Shadowknights of no less than 182 AA points ', ''), + (534, 'the Relic Keeper', 0, 'Suffix title earned for completing 10 Heritage Quests. ?You must talk to the following NPC to earn this title: ?Qeynos - Sage Indis Surion (green portal) in the mage tower in South Qeynos ?Freeport - Sage Navarius Orvalis in The Academy of Arcane Science in North Freeport ?Kelethin - Sage Piritta Silvarri. ', ''), + (535, 'the Romantic', 0, 'Suffix title earned for giving 100 fresh-cut roses away during Erollisi Day. ', ''), + (536, 'the Ruffian ', 0, 'From the Shadow Odyssey, can be obtained by Bruisers of no less than 182 AA points ', ''), + (537, 'the Shadow Blade', 0, 'Quest reward: Back into the Fray! ', ''), + (538, 'the Shape Shifter', 0, 'From the Shadow Odyssey, can be obtained by Illusionists of no less than 182 AA points ', ''), + (539, 'the Soul Corrupter ', 0, 'From the Shadow Odyssey, can be obtained by Defilers of no less than 182 AA points ', ''), + (540, 'the Stormbringer ', 0, 'From the Shadow Odyssey, can be obtained by Furies of no less than 182 AA points ', ''), + (541, 'the Treasure Hunter', 0, 'Suffix title earned for completing 5 Heritage Quests. ?You must talk to the following NPC to earn this title: ?Qeynos - Sage Indis Surion (Yellow portal) in the mage tower in South Qeynos ?Freeport - Sage Navarius Orvalis in The Academy of Arcane Science in North Freeport ?Kelethin - Sage Piritta Silvarri. ', ''), + (542, 'the Triumphant', 0, '250 arena wins', ''), + (543, 'the Vanquisher', 0, '2500 arena kills', ''), + (544, 'the Victorious ', 0, '500 arena wins', ''), + (545, 'the Vigilant', 0, 'Suffix title earned by giving 200 monk pebbles to Huang in the Whistling Fist Clan\'s Tower on the Isle of Mara', ''), + (546, 'the Voice', 0, 'Quest reward: The Means to an End... ', ''), + (547, 'the Zealous', 0, 'suffix title granted by claiming the 4 year veteran reward. ', ''), + (548, 'Theurgist', 1, 'A prefix title awarded to summoners who complete their strength AA line. ', ''), + (549, 'Thief', 1, 'A prefix title awarded to rogues who complete their intelligence AA line. ', ''), + (550, 'Tiger Sifu', 1, 'A prefix title awarded to brawlers who complete their strength AA line. ', ''), + (551, 'Trafficker', 1, 'Prefix Title earned by gaining +30,000 (Warmly) faction with The Dark Bargainers in the City of Neriak. ', ''), + (552, 'Tyrant', 1, 'A Title available to all characters (no gender restriction) in level 80 guilds. Eligible characters can purchase it from Freeport/Neriak city merchants', '3p 60g 3,430,450 status. '), + (553, 'Vanguard of the Blade', 0, 'suffix title received from completing the quest Blades Champion', ''), + (554, 'Vicar', 1, 'From the Shadow Odyssey, can be obtained by Templars of no less than 182 AA points ', ''), + (555, 'Vindicator of the Coin', 0, 'suffix title received from completing the quest Loyalty Pays', ''), + (556, 'Wanderer', 1, 'Prefix Title earned by gaining +40,000 (Ally) faction with the Tunarian Alliance in Elddar Grove. ', ''), + (557, 'Wayfarer', 1, 'A prefix title awarded to bards who complete their agility AA line. ', ''), + (558, 'Windcaller', 1, 'From the Shadow Odyssey, can be obtained by Furies of no less than 182 AA points ', ''), + (559, 'Witchdoctor', 1, 'A prefix title awarded to shamans who complete their stamina AA line. ', ''), + (560, 'Zealot', 1, 'Prefix Title earned by gaining +20,000 faction with the Agents of Neriak. Purchased from Dalion D\'Abth', '61g 44s 20000 status. '), + (561, ', Slayer of Joy', 0, NULL, ''); +INSERT INTO `table_versions` (`name`,`version`,`download_version`) values ('titles',1,0); +UPDATE `table_versions` SET `download_version`=1 WHERE `name`='titles'; +DROP TABLE IF EXISTS `tradeskillevents`; +CREATE TABLE IF NOT EXISTS `tradeskillevents` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `name` varchar(250) COLLATE latin1_general_ci DEFAULT NULL, + `icon` mediumint(8) unsigned NOT NULL DEFAULT '0', + `technique` int(10) unsigned NOT NULL DEFAULT '0', + `success_progress` mediumint(8) unsigned NOT NULL DEFAULT '0', + `success_durability` mediumint(8) unsigned NOT NULL DEFAULT '0', + `success_hp` mediumint(8) unsigned NOT NULL DEFAULT '0', + `success_power` mediumint(8) unsigned NOT NULL DEFAULT '0', + `success_spell_id` int(10) unsigned NOT NULL DEFAULT '0', + `success_item_id` int(10) unsigned NOT NULL DEFAULT '0', + `fail_progress` mediumint(8) NOT NULL DEFAULT '0', + `fail_durability` mediumint(8) NOT NULL DEFAULT '0', + `fail_hp` mediumint(8) NOT NULL DEFAULT '0', + `fail_power` mediumint(8) NOT NULL DEFAULT '0', + PRIMARY KEY (`id`) +) ENGINE=InnoDB AUTO_INCREMENT=145 DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci; +INSERT INTO `table_versions` (`name`,`version`,`download_version`) values ('tradeskillevents',1,0); +DROP TABLE IF EXISTS `transport_maps`; +CREATE TABLE IF NOT EXISTS `transport_maps` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `transport_id` int(10) unsigned NOT NULL DEFAULT '0', + `map_name` varchar(64) COLLATE latin1_general_ci NOT NULL, + PRIMARY KEY (`id`), + KEY `transport_id` (`transport_id`) +) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci; +INSERT INTO `table_versions` (`name`,`version`,`download_version`) values ('transport_maps',1,0); +DROP TABLE IF EXISTS `transporters`; +CREATE TABLE IF NOT EXISTS `transporters` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `transport_id` int(10) unsigned NOT NULL DEFAULT '0', + `transport_type` enum('Zone','Location','Generic Transport') CHARACTER SET latin1 NOT NULL DEFAULT 'Zone', + `display_name` varchar(64) COLLATE latin1_general_ci DEFAULT NULL, + `destination_zone_id` int(10) unsigned NOT NULL DEFAULT '0', + `destination_x` float NOT NULL DEFAULT '0', + `destination_y` float NOT NULL DEFAULT '0', + `destination_z` float NOT NULL DEFAULT '0', + `destination_heading` float NOT NULL DEFAULT '0', + `trigger_location_zone_id` int(10) unsigned NOT NULL DEFAULT '0', + `trigger_location_x` float NOT NULL DEFAULT '-1', + `trigger_location_y` float NOT NULL DEFAULT '-1', + `trigger_location_z` float NOT NULL DEFAULT '-1', + `trigger_radius` float NOT NULL DEFAULT '-1', + `cost` int(10) unsigned NOT NULL DEFAULT '0', + `message` varchar(255) COLLATE latin1_general_ci DEFAULT NULL, + `min_level` tinyint(3) unsigned NOT NULL DEFAULT '0', + `max_level` tinyint(3) unsigned NOT NULL DEFAULT '0', + `quest_req` int(10) unsigned NOT NULL DEFAULT '0', + `quest_step_req` smallint(5) unsigned NOT NULL DEFAULT '0', + `quest_completed` int(10) unsigned NOT NULL DEFAULT '0', + `map_x` int(10) unsigned NOT NULL DEFAULT '0', + `map_y` int(10) unsigned NOT NULL DEFAULT '0', + PRIMARY KEY (`id`), + KEY `FK_transporters` (`destination_zone_id`), + KEY `FK_transporters2` (`trigger_location_zone_id`), + CONSTRAINT `FK_transporters` FOREIGN KEY (`destination_zone_id`) REFERENCES `zones` (`id`) ON DELETE CASCADE ON UPDATE CASCADE, + CONSTRAINT `FK_transporters2` FOREIGN KEY (`trigger_location_zone_id`) REFERENCES `zones` (`id`) ON DELETE CASCADE ON UPDATE CASCADE +) ENGINE=InnoDB AUTO_INCREMENT=37 DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci CHECKSUM=1 DELAY_KEY_WRITE=1 ROW_FORMAT=DYNAMIC; +INSERT INTO `table_versions` (`name`,`version`,`download_version`) values ('transporters',1,0); +DROP TABLE IF EXISTS `variables`; +CREATE TABLE IF NOT EXISTS `variables` ( + `variable_name` varchar(64) COLLATE latin1_general_ci NOT NULL DEFAULT '', + `variable_value` varchar(512) COLLATE latin1_general_ci NOT NULL DEFAULT '', + `comment` varchar(255) COLLATE latin1_general_ci DEFAULT NULL, + PRIMARY KEY (`variable_name`) +) ENGINE=InnoDB DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci; +INSERT INTO `variables` (`variable_name`, `variable_value`, `comment`) VALUES + ('default_ruleset_id', '1', 'Default RuleSet used by the World (normally = 1)'), + ('gambling_current_jackpot', '34000', 'Current Gigglegibber Gambling Game Jackpot'), + ('gambling_winning_numbers', '010203040506', 'Current Gigglegibber Gambling Game winning numbers'), + ('gametime', '10/6/3895 11:11', NULL), + ('lastinstanceid', '1000', 'This value increments a identifier for individual instances and is handled by the World Server, do not change manually as it may cause corruption in instances.'), + ('motd', 'Dev: DB Milestone 2 - Current zones: FrostfangSea, GreaterFaydark, DarklightWood. Spells have been wiped, repop starting soon.', ''), + ('vitalitytimer', '1510796438', 'This is the unix timestamp of the last vitality update.'); +INSERT INTO `table_versions` (`name`,`version`,`download_version`) values ('variables',1,0); +UPDATE `table_versions` SET `download_version`=1 WHERE `name`='variables'; +DROP TABLE IF EXISTS `versioned_spell_errors`; +CREATE TABLE IF NOT EXISTS `versioned_spell_errors` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `version` smallint(5) unsigned NOT NULL DEFAULT '0', + `error_index` smallint(5) unsigned NOT NULL DEFAULT '0', + `value` smallint(5) unsigned NOT NULL DEFAULT '0', + `name` char(64) COLLATE latin1_general_ci NOT NULL DEFAULT '', + PRIMARY KEY (`id`), + UNIQUE KEY `SpellErrorIDX` (`version`,`error_index`) +) ENGINE=InnoDB AUTO_INCREMENT=244 DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci; +INSERT INTO `table_versions` (`name`,`version`,`download_version`) values ('versioned_spell_errors',1,0); +DROP TABLE IF EXISTS `visual_states`; +CREATE TABLE IF NOT EXISTS `visual_states` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `visual_state_id` int(10) unsigned NOT NULL DEFAULT '0', + `name` varchar(250) COLLATE latin1_general_ci NOT NULL DEFAULT 'None', + `min_client_version` smallint(5) unsigned NOT NULL DEFAULT '0', + PRIMARY KEY (`id`), + UNIQUE KEY `VisIDX` (`visual_state_id`) +) ENGINE=InnoDB AUTO_INCREMENT=21671 DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci; +INSERT INTO `visual_states` (`id`, `visual_state_id`, `name`, `min_client_version`) VALUES + (1, 16, '1h_sword_idle', 0), + (2, 50, '2h_sword_enter', 0), + (3, 52, '2h_sword_idle', 0), + (4, 101, 'bostaff_idle', 0), + (5, 121, 'bow', 0), + (6, 125, 'cackle', 0), + (7, 126, 'cast', 0), + (8, 138, 'cast_arch_circle', 0), + (9, 139, 'cast_ball', 0), + (10, 140, 'cast_bright_ring', 0), + (11, 141, 'cast_columns', 0), + (12, 142, 'cast_dark_ring', 0), + (13, 143, 'cast_dbl_bright_ring', 0), + (14, 144, 'cast_druid', 0), + (15, 145, 'cast_dustpuff', 0), + (16, 146, 'cast_heal', 0), + (17, 147, 'cast_heal_blur', 0), + (18, 148, 'cast_lightning', 0), + (19, 149, 'cast_mage', 0), + (20, 150, 'cast_mandala', 0), + (21, 151, 'cast_mesmerize', 0), + (22, 152, 'cast_necromancer', 0), + (23, 153, 'cast_nuke_mental', 0), + (24, 154, 'cast_pfx_dust_leaves_l', 0), + (25, 155, 'cast_pfx_dust_leaves_r', 0), + (26, 158, 'cast_pfx_glow_firepuff_l', 0), + (27, 159, 'cast_pfx_glow_firepuff_r', 0), + (28, 160, 'cast_pfx_glow_galv_l', 0), + (29, 161, 'cast_pfx_glow_galv_r', 0), + (30, 162, 'cast_pfx_glow_prism_l', 0), + (31, 163, 'cast_pfx_glow_prism_r', 0), + (32, 166, 'cast_pfx_l', 0), + (33, 167, 'cast_pfx_magenuke_l', 0), + (34, 168, 'cast_pfx_magenuke_r', 0), + (35, 169, 'cast_pfx_r', 0), + (36, 172, 'cast_placeholder_l', 0), + (37, 173, 'cast_placeholder_r', 0), + (38, 174, 'cast_priest', 0), + (39, 175, 'cast_rays', 0), + (40, 176, 'cast_rays_l', 0), + (41, 177, 'cast_rays_mental', 0), + (42, 178, 'cast_rays_r', 0), + (43, 180, 'cast_rings_crescent', 0), + (44, 181, 'cast_rune_ring', 0), + (45, 182, 'cast_runedraw', 0), + (46, 183, 'cast_runes_randomorbits', 0), + (47, 184, 'cast_spark_circle', 0), + (48, 185, 'cast_sparktrail_spiral', 0), + (49, 186, 'cast_spotsparks_ring', 0), + (50, 187, 'cast_swirlie', 0), + (51, 188, 'cast_vault', 0), + (52, 189, 'cast_ward', 0), + (53, 219, 'crouch_enter', 0), + (54, 220, 'crouch_exit', 0), + (55, 221, 'crouch_idle', 0), + (56, 228, 'dead', 0), + (57, 229, 'dead_enter', 0), + (58, 267, 'dual_wield_idle', 0), + (59, 290, 'fall', 0), + (60, 298, 'flourish', 0), + (61, 308, 'gag', 0), + (62, 323, 'idle', 0), + (63, 324, 'idle01', 0), + (64, 325, 'idle02', 0), + (65, 372, 'monk_idle', 0), + (66, 396, 'notworthy', 0), + (67, 419, 'pike_idle', 0), + (68, 434, 'procedural_hit', 0), + (69, 450, 'pugilist_idle', 0), + (70, 489, 'result_bash', 0), + (71, 490, 'result_buff_limbs', 0), + (72, 491, 'result_fire', 0), + (73, 492, 'result_firetrail', 0), + (74, 493, 'result_firews', 0), + (75, 495, 'result_gather_mana1', 0), + (76, 496, 'result_ghost', 0), + (77, 497, 'result_heal', 0), + (78, 498, 'result_heal11', 0), + (79, 499, 'result_heal9', 0), + (80, 500, 'result_kick', 0), + (81, 501, 'result_lightning', 0), + (82, 502, 'result_loot', 0), + (83, 503, 'result_loot_ash', 0), + (84, 504, 'result_mesmerize', 0), + (85, 505, 'result_placeholder', 0), + (86, 506, 'result_spawn', 0), + (87, 507, 'result_strike', 0), + (88, 508, 'result_stun', 0), + (89, 509, 'result_test', 0), + (90, 510, 'result_ward', 0), + (91, 511, 'result_ward1', 0), + (92, 517, 'run', 0), + (93, 518, 'rune_fire_orbiting', 0), + (94, 538, 'sit_enter', 0), + (95, 539, 'sit_exit', 0), + (96, 540, 'sit_idle', 0), + (97, 626, 'spell_placeholder', 0), + (98, 627, 'spell_root', 0), + (99, 722, 'trail', 0), + (100, 746, 'untrained_idle', 0), + (101, 891, 'yawn', 0), + (102, 893, 'cast_cloudring', 0), + (103, 894, 'cast_dblring_blend', 0), + (104, 895, 'cast_lhand_sparkle_trail', 0), + (105, 902, 'cast_mistring', 0), + (106, 909, 'cast_rhand_sparkle_trail', 0), + (107, 968, 'cast_cloudsphere', 0), + (108, 1004, 'horse_idle', 0), + (109, 1026, '1h_sword_attack', 0), + (110, 1027, '1h_sword_attack01', 0), + (111, 1028, '1h_sword_attack02', 0), + (112, 1029, '1h_sword_attack03', 0), + (113, 1044, 'cast_rays_cloud', 0), + (114, 1045, 'cast_winkers', 0), + (115, 1053, 'procedural_ouch', 0), + (116, 1054, 'result_bear', 0), + (117, 1114, '1h_sword_death_blow', 0), + (118, 1162, 'procedural_parry', 0), + (119, 1163, 'ignite_weapon', 0), + (120, 1181, 'monk_attack', 0), + (121, 1201, 'monk_attack01', 0), + (122, 1206, 'pike_attack', 0), + (123, 1211, 'cast_orbiting_rings', 0), + (124, 1212, 'cast_spiral_trace', 0), + (125, 1218, 'cast_elec_hands', 0), + (126, 1226, 'cast_pfx_glow_trail_l', 0), + (127, 1227, 'cast_pfx_glow_trail_r', 0), + (128, 1228, 'cast_hammer_toss', 0), + (129, 1229, 'result_hammer_approaching', 0), + (130, 1230, 'result_hammer_explode', 0), + (131, 1237, '2h_sword_attack', 0), + (132, 1243, 'dual_wield_attack', 0), + (133, 1244, 'dual_wield_attack01', 0), + (134, 1245, 'dual_wield_attack02', 0), + (135, 1258, 'cast_scimitar_toss', 0), + (136, 1259, 'cast_spark_sphere', 0), + (137, 1261, 'result_scimitar_approaching', 0), + (138, 1262, 'result_scimitar_explode', 0), + (139, 1271, '1h_sword_dodge_backhand', 0), + (140, 1272, '1h_sword_dodge_down', 0), + (141, 1273, '1h_sword_dodge_forehand', 0), + (142, 1274, '1h_sword_ouch_backhand', 0), + (143, 1275, '1h_sword_ouch_down', 0), + (144, 1276, '1h_sword_ouch_forehand', 0), + (145, 1277, '1h_sword_parry_backhand', 0), + (146, 1278, '1h_sword_parry_down', 0), + (147, 1279, '1h_sword_parry_forehand', 0), + (148, 1280, 'cast_distort', 0), + (149, 1281, 'cast_distort_rect', 0), + (150, 1282, 'cast_trail_leftarm', 0), + (151, 1283, 'cast_trail_rightarm', 0), + (152, 1284, 'monk_attack02', 0), + (153, 1286, 'monk_dodge_backhand', 0), + (154, 1287, 'monk_dodge_down', 0), + (155, 1295, 'result_blast_cone', 0), + (156, 1296, 'result_camera_shake', 0), + (157, 1297, 'result_ground_blast', 0), + (158, 1298, 'result_lightning_bolt1', 0), + (159, 1299, 'result_lion_spirit', 0), + (160, 1300, 'result_phoenix_rising', 0), + (161, 1302, 'result_flash1', 0), + (162, 1303, 'result_lightning_bolt2', 0), + (163, 1304, 'result_lightning_bolt3', 0), + (164, 1305, 'result_spirit_of_the_wolf', 0), + (165, 1307, 'cast_runedraw_blue', 0), + (166, 1314, 'result_phoenix_descending', 0), + (167, 1316, 'cast_dustpuff_rfoot', 0), + (168, 1317, 'cast_trail_rightfoot', 0), + (169, 1318, 'cast_trail_rightshin', 0), + (170, 1323, '1h_crush_attack', 0), + (171, 1324, '1h_crush_attack01', 0), + (172, 1325, '1h_crush_attack02', 0), + (173, 1326, '1h_crush_attack03', 0), + (174, 1332, '1h_crush_dodge_backhand', 0), + (175, 1333, '1h_crush_dodge_down', 0), + (176, 1334, '1h_crush_dodge_forehand', 0), + (177, 1335, '1h_crush_dodge_thrust', 0), + (178, 1338, '1h_crush_idle', 0), + (179, 1339, '1h_crush_ouch_backhand', 0), + (180, 1340, '1h_crush_ouch_down', 0), + (181, 1341, '1h_crush_ouch_forehand', 0), + (182, 1342, '1h_crush_ouch_thrust', 0), + (183, 1343, '1h_crush_parry_backhand', 0), + (184, 1344, '1h_crush_parry_down', 0), + (185, 1345, '1h_crush_parry_forehand', 0), + (186, 1346, '1h_crush_parry_thrust', 0), + (187, 1350, '1h_pierce_attack', 0), + (188, 1351, '1h_pierce_attack01', 0), + (189, 1355, '1h_pierce_dodge_backhand', 0), + (190, 1356, '1h_pierce_dodge_down', 0), + (191, 1357, '1h_pierce_dodge_forehand', 0), + (192, 1358, '1h_pierce_dodge_thrust', 0), + (193, 1361, '1h_pierce_idle', 0), + (194, 1362, '1h_pierce_ouch_backhand', 0), + (195, 1363, '1h_pierce_ouch_down', 0), + (196, 1364, '1h_pierce_ouch_forehand', 0), + (197, 1365, '1h_pierce_ouch_thrust', 0), + (198, 1366, '1h_pierce_parry_backhand', 0), + (199, 1367, '1h_pierce_parry_down', 0), + (200, 1368, '1h_pierce_parry_forehand', 0), + (201, 1369, '1h_pierce_parry_thrust', 0), + (202, 1373, '1h_sword_death_blow01', 0), + (203, 1374, '1h_sword_dodge_thrust', 0), + (204, 1375, '1h_sword_ouch_thrust', 0), + (205, 1376, '1h_sword_parry_thrust', 0), + (206, 1384, 'cast_dustpuff_ws', 0), + (207, 1386, 'cast_glow_ring_wavyrays', 0), + (208, 1387, 'cast_glow_ring_wavyrays_l', 0), + (209, 1388, 'cast_glow_ring_wavyrays_r', 0), + (210, 1412, 'cast_sphere_lightning', 0), + (211, 1413, 'cast_sphere_lightning2', 0), + (212, 1414, 'cast_sphere_lightning_r', 0), + (213, 1423, 'result_charge', 0), + (214, 1424, 'result_ghost_shield', 0), + (215, 1425, 'result_heal_heart', 0), + (216, 1426, 'result_sparkly_swirl_flare', 0), + (217, 1432, 'cast_fighter', 0), + (218, 1433, 'cast_ghost_shield_summoned', 0), + (219, 1439, 'cast_scout', 0), + (220, 1441, 'cast_ghost_shield_summoned_sparkles', 0), + (221, 1444, 'result_glint2', 0), + (222, 1445, 'result_trail', 0), + (223, 1453, '2h_sword_attack01', 0), + (224, 1454, '2h_sword_attack02', 0), + (225, 1457, '2h_sword_dodge_backhand', 0), + (226, 1458, '2h_sword_dodge_down', 0), + (227, 1459, '2h_sword_dodge_forehand', 0), + (228, 1460, '2h_sword_ouch_backhand', 0), + (229, 1461, '2h_sword_ouch_down', 0), + (230, 1462, '2h_sword_ouch_forehand', 0), + (231, 1472, 'result_crystal_shield', 0), + (232, 1481, 'cast_snake_idling', 0), + (233, 1482, 'result_horse_running', 0), + (234, 1483, 'result_lion_attacking', 0), + (235, 1484, 'result_lion_roaring', 0), + (236, 1485, 'result_snake_striking', 0), + (237, 1490, 'result_cat_leaping', 0), + (238, 1491, 'result_cold_blast', 0), + (239, 1492, 'result_cold_breath', 0), + (240, 1493, 'state_breath_cold', 0), + (241, 1494, 'result_cold_forced_shader', 0), + (242, 1495, 'result_cold_ice_crystals', 0), + (243, 1496, 'result_poison_breath', 0), + (244, 1497, 'result_poison_cysts_growing', 0), + (245, 1498, 'result_poison_forced_shader', 0), + (246, 1503, 'cast_ball_fire', 0), + (247, 1505, 'cast_spotsparks_ring2', 0), + (248, 1506, 'cast_spotsparks_ring3', 0), + (249, 1521, 'result_poison_cysts_blast', 0), + (250, 1523, 'cast_lhand_sparkle_trail_t', 0), + (251, 1524, 'cast_poison_dragon_breath', 0), + (252, 1525, 'cast_rhand_sparkle_trail_t', 0), + (253, 1528, 'result_poison_whirlwind', 0), + (254, 1544, 'cast_distort_leftfoot', 0), + (255, 1546, 'cast_distort_weaponrootleft', 0), + (256, 1547, 'cast_distort_weaponrootright', 0), + (257, 1548, 'cast_dustpuff_lfoot', 0), + (258, 1549, 'cast_dustpuff_weaponrootleft', 0), + (259, 1550, 'cast_dustpuff_weaponrootright', 0), + (260, 1556, 'result_fire_ring_green_medium', 0), + (261, 1557, 'result_poison_cyst_vomit', 0), + (262, 1558, 'result_runes_rising', 0), + (263, 1559, 'result_teleporter_coalesce', 0), + (264, 1563, 'cast_cleric', 0), + (265, 1564, 'cast_coercer', 0), + (266, 1566, 'cast_defiler', 0), + (267, 1567, 'cast_enchanter', 0), + (268, 1568, 'cast_fury', 0), + (269, 1569, 'cast_illusionist', 0), + (270, 1570, 'cast_inquisitor', 0), + (271, 1571, 'cast_mystic', 0), + (272, 1572, 'cast_shaman', 0), + (273, 1573, 'cast_sorcerer', 0), + (274, 1574, 'cast_summoner', 0), + (275, 1575, 'cast_templar', 0), + (276, 1576, 'cast_warden', 0), + (277, 1577, 'cast_warlock', 0), + (278, 1578, 'cast_wizard', 0), + (279, 1580, 'result_bull_stomping', 0), + (280, 1581, 'cast_hammer_sparkling_floating', 0), + (281, 1582, 'cast_mist_sphere_add', 0), + (282, 1583, 'cast_mist_sphere_blend', 0), + (283, 1584, 'cast_swirlies_smoke', 0), + (284, 1585, 'cast_swirlies_smoke_blend', 0), + (285, 1592, 'result_fire_green', 0), + (286, 1593, 'result_poison_cysts_growing_giant', 0), + (287, 1594, 'cast_forced_flasher_diff_noise', 0), + (288, 1595, 'cast_forced_flasher_oceanseamless', 0), + (289, 1596, 'cast_forced_flasher_streaks', 0), + (290, 1597, 'cast_forced_flasher_tiledfoam', 0), + (291, 1598, 'cast_forced_flasher_tiledfoam2', 0), + (292, 1599, 'cast_forced_flasher_tiledfoam3', 0), + (293, 1600, 'cast_forced_flasher_tiledfoam4', 0), + (294, 1625, 'result_fire_engulf', 0), + (295, 1630, 'cast_expanding_rings', 0), + (296, 1631, 'cast_forced_flasher_fadein_diff_noise', 0), + (297, 1644, 'pugilist_attack', 0), + (298, 1646, 'pugilist_attack02', 0), + (299, 1659, 'result_fire_slam', 0), + (300, 1660, 'cast_distort_flat', 0), + (301, 1661, 'cast_mandala_blobs', 0), + (302, 1662, 'result_ground_blast_lava', 0), + (303, 1665, 'spell_root_colored', 0), + (304, 1667, 'cast_dragon_wing_dust', 0), + (305, 1683, 'result_camera_shake_wider', 0), + (306, 1684, 'result_stunned', 0), + (307, 1686, 'cast_snake_shrinking', 0), + (308, 1727, 'horse_enter', 0), + (309, 1753, 'levelup', 0), + (310, 1756, 'result_trail_lightning', 0), + (311, 1764, 'result_trail_motion', 0), + (312, 1765, 'result_tree_morph', 0), + (313, 1766, 'result_wood_forced_shader', 0), + (314, 1767, 'result_wood_spikes_growing', 0), + (315, 1773, 'cast_fire_trail', 0), + (316, 1793, 'result_cactus_spikes_growing', 0), + (317, 1794, 'result_cold_fog', 0), + (318, 1795, 'result_colored_forced_shader', 0), + (319, 1796, 'result_ghost_forced_shader', 0), + (320, 1797, 'result_snowflakes_growing', 0), + (321, 1798, 'result_snowstorm', 0), + (322, 1799, 'result_sparkles_clinging', 0), + (323, 1800, 'result_teleport_sparkle', 0), + (324, 1801, 'result_teleport_vanish', 0), + (325, 1802, 'result_wood_roots_growing', 0), + (326, 1803, 'result_teleport_appear', 0), + (327, 1806, 'cast_flasher', 0), + (328, 1807, 'cast_pfx_trace_puffs_l', 0), + (329, 1808, 'cast_pfx_trace_puffs_r', 0), + (330, 1823, 'cast_fire_whip_circling', 0), + (331, 1832, 'result_spark_burst', 0), + (332, 1849, 'cast_enthralling_fetters_circling', 0), + (333, 1850, 'cast_enthralling_fetters_circling_ghostly', 0), + (334, 1851, 'cast_testbones', 0), + (335, 1853, 'result_clay_red_forced_shader', 0), + (336, 1854, 'result_enthralling_fetters', 0), + (337, 1855, 'result_metal_rusty_forced_shader', 0), + (338, 1859, 'result_clay_chunks_dropping', 0), + (339, 1860, 'result_flash', 0), + (340, 1861, 'result_water_dripping', 0), + (341, 1862, 'result_water_forced_shader', 0), + (342, 1863, 'result_bubble_stream', 0), + (343, 1864, 'result_ghost_fish_circling', 0), + (344, 1865, 'cast_testbones_vgraph', 0), + (345, 1866, 'result_ice_blast', 0), + (346, 1867, 'result_ice_crystals_dropping', 0), + (347, 1868, 'result_icy_cage', 0), + (348, 1869, 'cast_mandala_electricity', 0), + (349, 1870, 'cast_mandala_streaks', 0), + (350, 1871, 'result_icy_cage_blast_ring', 0), + (351, 1872, 'cast_rune_ring_good', 0), + (352, 1873, 'cast_rune_ring_rotate', 0), + (353, 1874, 'result_icicles_breaking', 0), + (354, 1875, 'result_icy_comet', 0), + (355, 1876, 'result_icy_comet_exploding', 0), + (356, 1879, 'result_glacial_wall', 0), + (357, 1880, 'result_glacial_wall_sparkles', 0), + (358, 1881, 'result_ice_shields_burning', 0), + (359, 1882, 'pike_attack01', 0), + (360, 1883, 'pike_attack02', 0), + (361, 1901, 'result_clay_shields', 0), + (362, 1902, 'result_scale_skin_forced_shader', 0), + (363, 1904, 'result_color_shower', 0), + (364, 1905, 'result_dispell1_out', 0), + (365, 1906, 'result_verdant_genesis', 0), + (366, 1907, 'result_attract_bubbles', 0), + (367, 1909, 'result_offering_of_vitae', 0), + (368, 1910, 'result_sparkles_clinging_soft', 0), + (369, 1911, 'result_bestowal_of_vitae', 0), + (370, 1912, 'result_ethereal_ward', 0), + (371, 1913, 'result_dps_decrease', 0), + (372, 1914, 'result_smite', 0), + (373, 1938, 'result_ember_kite_shields_burning', 0), + (374, 1939, 'result_ice_sword_breaking', 0), + (375, 1942, 'result_charm', 0), + (376, 1943, 'result_rainbow_forced_shader', 0), + (377, 1945, 'result_ember_swords_burning', 0), + (378, 1946, 'result_ghost_sword_breaking', 0), + (379, 1947, 'result_offering_of_vitae_2', 0), + (380, 1953, 'result_smite_2', 0), + (381, 1954, 'result_tellurian_recruit', 0), + (382, 1962, 'result_expand_ring_screech', 0), + (383, 1963, 'result_grim_champion', 0), + (384, 1964, 'result_shockwave_sparkles', 0), + (385, 1965, 'result_tremor', 0), + (386, 1966, 'bostaff_attack', 0), + (387, 1967, 'bostaff_attack01', 0), + (388, 1968, 'bostaff_attack02', 0), + (389, 1969, 'bostaff_attack03', 0), + (390, 1986, 'result_bloodlust', 0), + (391, 1987, 'result_haste', 0), + (392, 1994, 'cast_forced_flasher_tiledfoam3_scroll', 0), + (393, 1995, 'cast_mage_old', 0), + (394, 2000, 'result_backdraft', 0), + (395, 2001, 'result_sanction_of_merit', 0), + (396, 2002, 'result_toxin_out', 0), + (397, 2003, 'result_white_radiance', 0), + (398, 2017, 'result_explosion_fireworks', 0), + (399, 2018, 'result_explosion_fireworks_ground', 0), + (400, 2031, 'result_distort_dot', 0), + (401, 2032, 'result_distort_hit', 0), + (402, 2036, 'result_bone_cage_1', 0), + (403, 2037, 'result_fiery_comet_descending', 0), + (404, 2038, 'result_spiral_smite', 0), + (405, 2049, 'result_weakness', 0), + (406, 2065, 'result_bloodlust_2', 0), + (407, 2066, 'result_colored_radiance', 0), + (408, 2073, 'result_poison_cloud', 0), + (409, 2074, 'result_smoke_sphere', 0), + (410, 2082, 'result_decree_of_faith', 0), + (411, 2083, 'result_dust_fall', 0), + (412, 2084, 'result_fascinate', 0), + (413, 2085, 'result_sparkle_blast', 0), + (414, 2103, 'aura_mage', 0), + (415, 2104, 'aura_priest', 0), + (416, 2111, 'result_statue', 0), + (417, 2114, 'bow_dodge_backhand', 0), + (418, 2115, 'bow_dodge_down', 0), + (419, 2116, 'bow_dodge_forehand', 0), + (420, 2117, 'bow_dodge_thrust', 0), + (421, 2120, 'bow_idle', 0), + (422, 2121, 'bow_ouch_backhand', 0), + (423, 2122, 'bow_ouch_down', 0), + (424, 2123, 'bow_ouch_forehand', 0), + (425, 2124, 'bow_ouch_thrust', 0), + (426, 2139, 'cast_pfx_glow_galv_ws_l', 0), + (427, 2140, 'cast_pfx_glow_galv_ws_r', 0), + (428, 2141, 'result_bubble_ring', 0), + (429, 2142, 'result_sparkles_out', 0), + (430, 2145, 'cast_orbiting_rings2', 0), + (431, 2178, 'cast_fuliginous', 0), + (432, 2188, 'result_enthralling_fetters_ghostly', 0), + (433, 2198, 'cast_sparkles_in', 0), + (434, 2208, 'result_swirly_column', 0), + (435, 2228, 'result_instant_lifetap', 0), + (436, 2229, 'result_ot_lifetap', 0), + (437, 2248, 'result_mouth_in', 0), + (438, 2249, 'result_sparkle_scan_up', 0), + (439, 2250, 'result_spiral_up', 0), + (440, 2258, 'cast_bard', 0), + (441, 2259, 'cast_crusader', 0), + (442, 2260, 'cast_dirge', 0), + (443, 2261, 'cast_paladin', 0), + (444, 2263, 'cast_shadowknight', 0), + (445, 2264, 'cast_troubador', 0), + (446, 2270, 'cast_sawdust', 0), + (447, 2507, 'result_lightning_shimmer', 0), + (448, 2525, 'persist_pet_air_fragment', 0), + (449, 2526, 'persist_pet_chaos_fragment', 0), + (450, 2527, 'persist_pet_earth_fragment', 0), + (451, 2528, 'persist_pet_fire_fragment', 0), + (452, 2529, 'persist_pet_fire_servant', 0), + (453, 2530, 'persist_pet_ice_servant', 0), + (454, 2531, 'persist_pet_lightning_servant', 0), + (455, 2532, 'persist_pet_water_fragment', 0), + (456, 2536, 'cast_distort_p3', 0), + (457, 2538, 'cast_explosion_p5', 0), + (458, 2544, 'result_flash_weapon_red', 0), + (459, 2545, 'result_shield', 0), + (460, 2558, 'cast_angry_burst', 0), + (461, 2559, 'cast_cold_dragon_breath', 0), + (462, 2560, 'cast_distortion_hit_minimal', 0), + (463, 2561, 'cast_glow_distort', 0), + (464, 2563, 'cast_void_dragon_breath', 0), + (465, 2564, 'result_sparks_360_p5', 0), + (466, 2565, 'result_void_whirlwind', 0), + (467, 2588, 'cast_distort_rightfoot_ws', 0), + (468, 2589, 'cast_dragon_pbae_cold', 0), + (469, 2590, 'cast_dragon_pbae_heat', 0), + (470, 2591, 'cast_dragon_pbae_mental', 0), + (471, 2592, 'cast_dragon_pbae_poison', 0), + (472, 2593, 'cast_dragon_pbae_void', 0), + (473, 2594, 'cast_dragon_tae_mental', 0), + (474, 2595, 'cast_fire_foot', 0), + (475, 2597, 'cast_spark_sphere_ws_p5', 0), + (476, 2599, 'result_circle_blast_p5', 0), + (477, 2600, 'result_cold_ice_crystals_rightfoot', 0), + (478, 2601, 'result_flash_weapon_red_min', 0), + (479, 2602, 'result_golden_glow', 0), + (480, 2603, 'result_ice_blast_rightfoot', 0), + (481, 2604, 'result_silver_glow', 0), + (482, 2623, 'cast_dark_forced_shader', 0), + (483, 2624, 'cast_expand_ring_ws', 0), + (484, 2626, 'cast_stun_stars', 0), + (485, 2627, 'cast_taunt', 0), + (486, 2636, 'cast_dragon_pbae_lightning', 0), + (487, 2637, 'cast_dragon_tae_lightning', 0), + (488, 2642, 'result_dust_black', 0), + (489, 2643, 'result_spark_burst_p3', 0), + (490, 2644, 'result_sparkle_trail_fire_shin', 0), + (491, 2645, 'result_sparkle_trail_ice_shin', 0), + (492, 2647, 'trails_lightning_rightshin', 0), + (493, 2652, 'cast_fire_weapon', 0), + (494, 2656, 'result_sparkle_trail_fire_weapon', 0), + (495, 2659, 'result_trail_lightning_red', 0), + (496, 2668, '2h_sword_defensive_buff', 0), + (497, 2670, '2h_sword_kick', 0), + (498, 2674, '2h_sword_whirling_attack', 0), + (499, 2675, '2h_sword_wild_swing', 0), + (500, 2684, 'cast_elec_feet', 0), + (501, 2686, 'cast_soothe_burst', 0), + (502, 2687, 'cast_spark_sphere_ws_red_p5', 0), + (503, 2688, 'cast_sparkle_trail_fire_head', 0), + (504, 2702, 'pike_kick', 0), + (505, 2706, 'pike_whirling_attack', 0), + (506, 2707, 'result_flash_weapon_sat_blue', 0), + (507, 2708, 'result_flash_weapon_sat_red', 0), + (508, 2709, 'result_ice_blast_weapon', 0), + (509, 2710, 'result_spark_burst_p3_gold', 0), + (510, 2711, 'result_spark_burst_p3_red', 0), + (511, 2712, 'result_spark_burst_rightfoot', 0), + (512, 2714, 'result_sparkle_trail_fire_leftshin', 0), + (513, 2716, 'result_sparkle_trail_ice_lefthand', 0), + (514, 2717, 'result_sparkle_trail_ice_leftshin', 0), + (515, 2718, 'result_sparkle_trail_ice_weapon', 0), + (516, 2719, 'result_sparkle_trail_weapon_right_glow_blue', 0), + (517, 2720, 'result_sparkle_trail_weapon_right_glow_gold', 0), + (518, 2721, 'result_sparkle_trail_weapon_right_glow_red', 0), + (519, 2722, 'result_sparks_360_blue_p5', 0), + (520, 2723, 'result_white_radiance_weapon', 0), + (521, 2724, 'result_wind_smoke_head', 0), + (522, 2753, 'cast_spark_cage', 0), + (523, 2754, 'cast_spark_shield', 0), + (524, 2755, 'cast_sparkle_trail_fire_lefthand', 0), + (525, 2756, 'cast_sparkle_trail_fire_righthand', 0), + (526, 2757, 'cast_sparkle_trail_fire_righttolefthand', 0), + (527, 2758, 'cast_statue', 0), + (528, 2759, 'cast_super_buff', 0), + (529, 2767, 'persist_divine', 0), + (530, 2768, 'persist_eidolon', 0), + (531, 2769, 'persist_energy', 0), + (532, 2770, 'persist_fire', 0), + (533, 2771, 'persist_ice', 0), + (534, 2772, 'persist_mental', 0), + (535, 2773, 'persist_mesmerize', 0), + (536, 2774, 'persist_poison', 0), + (537, 2775, 'persist_stunned', 0), + (538, 2776, 'result_spark_burst_head', 0), + (539, 2777, 'result_weapon_trail_fire', 0), + (540, 2778, 'result_wind_smoke_p3', 0), + (541, 2782, 'cast_instrument_drum', 0), + (542, 2783, 'cast_instrument_stringed', 0), + (543, 2785, 'cast_tune_guitar', 0), + (544, 2790, 'persist_damage', 0), + (545, 2791, 'persist_stone', 0), + (546, 2792, 'result_heal_heart_blue', 0), + (547, 2793, 'result_motion_lines', 0), + (548, 2794, 'result_note_circle', 0), + (549, 2797, 'cast_debuff', 0), + (550, 2799, 'cast_stun_stars_sub', 0), + (551, 2800, 'pike_wild_swing', 0), + (552, 2801, 'result_motion_lines_flasher', 0), + (553, 2802, 'result_motion_lines_sub', 0), + (554, 2803, 'result_spark_burst_p3_blue', 0), + (555, 2808, 'forestry_success', 0), + (556, 2809, 'gathering_search', 0), + (557, 2810, 'gathering_success', 0), + (558, 2811, 'mining_digging', 0), + (559, 2812, 'mining_success', 0), + (560, 2813, 'result_bard_zap', 0), + (561, 2814, 'result_motion_circles', 0), + (562, 2815, 'result_note_blast', 0), + (563, 2837, 'result_ghost_spider', 0), + (564, 2852, 'cast_anim_mesh_dragon_ps', 0), + (565, 2871, 'cast_druid_ws', 0), + (566, 2872, 'cast_frosty_hand_l', 0), + (567, 2873, 'cast_frosty_hand_r', 0), + (568, 2900, 'cast_tune_drum', 0), + (569, 2924, 'cast_priest_ws', 0), + (570, 2925, 'cast_trail_rightfoot_gold', 0), + (571, 2926, 'levelup_50', 0), + (572, 2927, 'levelup_hallmark', 0), + (573, 2928, 'result_sparkle_scan_down', 0), + (574, 2930, 'result_trail_lightning_gold', 0), + (575, 2933, '1h_thrown_attack', 0), + (576, 2935, '1h_thrown_dodge_backhand', 0), + (577, 2936, '1h_thrown_dodge_down', 0), + (578, 2937, '1h_thrown_dodge_forehand', 0), + (579, 2938, '1h_thrown_dodge_thrust', 0), + (580, 2939, '1h_thrown_idle', 0), + (581, 2940, '1h_thrown_ouch_backhand', 0), + (582, 2941, '1h_thrown_ouch_down', 0), + (583, 2942, '1h_thrown_ouch_forehand', 0), + (584, 2943, '1h_thrown_ouch_thrust', 0), + (585, 2953, 'bostaff_kick', 0), + (586, 2960, 'bostaff_whirling_attack', 0), + (587, 2961, 'bostaff_wild_swing', 0), + (588, 2966, 'cast_spark_burst_weaponrootright', 0), + (589, 2983, 'converse_male04', 0), + (590, 2991, 'converse_male12', 0), + (591, 2995, 'dual_wield_kick', 0), + (592, 3002, 'dual_wield_whirling_attack', 0), + (593, 3003, 'dual_wield_wild_swing', 0), + (594, 3021, 'monk_wild_swing', 0), + (595, 3029, 'pugilist_kick', 0), + (596, 3036, 'pugilist_whirling_attack', 0), + (597, 3037, 'pugilist_wild_swing', 0), + (598, 3038, 'result_spark_burst_p1', 0), + (599, 3112, 'cast_sparkle_trail_fire_lhand_neg', 0), + (600, 3113, 'cast_sparkle_trail_fire_rhand_neg', 0), + (601, 3118, 'persist_debuff', 0), + (602, 3119, 'result_fire_negative', 0), + (603, 3120, 'result_fire_objects', 0), + (604, 3142, 'result_embers_p2p', 0), + (605, 3143, 'result_fraxflame_p2p', 0), + (606, 3144, 'result_prism_hex_p2p', 0), + (607, 3181, 'result_glow_weapon_red', 0), + (608, 3183, 'trails_fire_rightshin', 0), + (609, 3192, 'cast_darkness_skull_buff_summoned', 0), + (610, 3194, 'persist_distortion_hit_minimal', 0), + (611, 3195, 'result_color_rain_damage', 0), + (612, 3196, 'result_darkness_skull_buff', 0), + (613, 3197, 'result_noxious_oozing_shield_buff', 0), + (614, 3198, 'result_swirly_column_evil', 0), + (615, 3202, 'result_icicle_rain_damage', 0), + (616, 3203, 'result_rain_damage', 0), + (617, 3210, 'cast_vines_root_control_circling', 0), + (618, 3224, 'persist_electrified', 0), + (619, 3225, 'result_bloodlust_3', 0), + (620, 3226, 'result_nature_res', 0), + (621, 3227, 'result_poison_rain_damage', 0), + (622, 3228, 'result_skull_breath_poison_damage', 0), + (623, 3229, 'result_spirit_res', 0), + (624, 3230, 'result_sword_rain_damage', 0), + (625, 3231, 'result_vines_root_control', 0), + (626, 3236, 'cast_super_lightning', 0), + (627, 3237, 'result_petrify_stun_control', 0), + (628, 3238, 'result_shadow_summon', 0), + (629, 3243, 'result_agility', 0), + (630, 3244, 'result_air_elemental_summon', 0), + (631, 3245, 'result_arch_heal', 0), + (632, 3246, 'result_electrified', 0), + (633, 3247, 'result_lifetap', 0), + (634, 3248, 'result_vitae_buff_heal', 0), + (635, 3254, 'cast_darkness_whip_circling', 0), + (636, 3256, 'cast_spark_cage_neg', 0), + (637, 3257, 'cast_spark_shield2', 0), + (638, 3258, 'cast_spark_shield_neg', 0), + (639, 3259, 'result_ice_blast_weapon_center', 0), + (640, 3260, 'result_water_elemental_summon', 0), + (641, 3335, 'cast_mandala_sub', 0), + (642, 3337, 'cast_p2p_lightning_01', 0), + (643, 3338, 'cast_p2p_lightning_02', 0), + (644, 3340, 'result_arcane_fury', 0), + (645, 3341, 'result_archaic_shackles', 0), + (646, 3342, 'result_archaic_shackles_b', 0), + (647, 3343, 'result_ice_slam', 0), + (648, 3344, 'result_skull_blast', 0), + (649, 3345, 'result_skull_buff_limbs', 0), + (650, 3346, 'result_storm_of_ancients', 0), + (651, 3347, 'result_stun_sub', 0), + (652, 3348, 'result_tricksters_grasp', 0), + (653, 3351, 'cast_p2p_fire_01', 0), + (654, 3352, 'cast_p2p_fire_02', 0), + (655, 3354, 'result_ethereal_p2p', 0), + (656, 3358, 'cast_gold_sparkletrace_l', 0), + (657, 3359, 'cast_gold_sparkletrace_r', 0), + (658, 3360, 'cast_gold_trace_l', 0), + (659, 3361, 'cast_gold_trace_r', 0), + (660, 3363, 'cast_rune_ring_rotate_persist', 0), + (661, 3364, 'cast_trace_firespikes_l', 0), + (662, 3365, 'cast_trace_firespikes_r', 0), + (663, 3366, 'cast_trace_wine_l', 0), + (664, 3367, 'cast_trace_wine_r', 0), + (665, 3376, 'cast_rainbow_rays_cloud', 0), + (666, 3377, 'cast_spark_sphere_blend', 0), + (667, 3379, 'result_crystal_ring', 0), + (668, 3380, 'result_dispell1_out_blend', 0), + (669, 3381, 'result_helmet_silver_floating', 0), + (670, 3392, 'result_ho_sphere', 0), + (671, 3393, 'result_shield_silver_floating', 0), + (672, 3397, 'ignite_weapon_big', 0), + (673, 3398, 'ignite_weapon_small', 0), + (674, 3404, 'result_dragon_flight_fetters', 0), + (675, 3405, 'result_drakota_fetters', 0), + (676, 3406, 'result_drakota_flight_fetters', 0), + (677, 3421, 'ignite_weapon_prism', 0), + (678, 3422, 'result_ancient_crucible', 0), + (679, 3423, 'result_natures_growth', 0), + (680, 3427, 'result_dripping_rain', 0), + (681, 3428, 'result_rock_chunks_dropping', 0), + (682, 3432, 'result_arcane_chalice', 0), + (683, 3433, 'result_blessing_of_faith', 0), + (684, 3434, 'result_stag_running', 0), + (685, 3437, 'cast_columns_slow', 0), + (686, 3439, 'result_cat_running', 0), + (687, 3440, 'result_chalice_of_life', 0), + (688, 3441, 'result_creature_fire_ls', 0), + (689, 3442, 'result_runes_gathering', 0), + (690, 3443, 'result_sparkle_fill', 0), + (691, 3444, 'result_weapon_trail_prism', 0), + (692, 3448, 'cast_sparkle2', 0), + (693, 3449, 'result_breaking_faith', 0), + (694, 3450, 'result_runes_falling', 0), + (695, 3451, 'result_sparkles_gathering', 0), + (696, 3460, 'cast_glow_distort2', 0), + (697, 3464, 'result_blue_whirlwind', 0), + (698, 3465, 'result_stag_running2', 0), + (699, 3466, 'result_turtle_walking', 0), + (700, 3573, 'result_breakable_wall', 0), + (701, 3605, 'result_lucks_bite', 0), + (702, 3630, 'result_bat_swarm_appear', 0), + (703, 3631, 'result_bat_swarm_attack', 0), + (704, 3632, 'result_forced_shader_electric', 0), + (705, 3640, 'result_bat_swarm_p2p', 0), + (706, 3671, 'result_rainbow_blast_p2p', 0), + (707, 3672, 'result_vampire_lifetap_p2p', 0), + (708, 3679, 'result_fire_blue_white', 0), + (709, 3680, 'result_vampire_daggers_p2p', 0), + (710, 3681, 'result_vampire_ice_daggers_p2p', 0), + (711, 3682, 'result_vampire_lifetap_heart_p2p', 0), + (712, 3683, 'result_vampire_snow_throw', 0), + (713, 3693, 'cast_instrument_flute', 0), + (714, 3705, 'persist_power_gathering', 0), + (715, 3706, 'result_bat_swarm_persist', 0), + (716, 3707, 'result_brain_leech_p2p', 0), + (717, 3708, 'result_power_fount', 0), + (718, 3727, 'result_lioness_running', 0), + (719, 3728, 'result_mana_cloak', 0), + (720, 3729, 'result_scorpion_attacking', 0), + (721, 3730, 'result_skeleton_dancing', 0), + (722, 3734, 'cast_tune_song', 0), + (723, 3741, 'result_bat_flying', 0), + (724, 3742, 'result_stance_of_the_bat', 0), + (725, 3749, 'persist_sparkles_clinging_soft_blue', 0), + (726, 3750, 'persist_sparkles_clinging_soft_gold', 0), + (727, 3751, 'persist_sparkles_clinging_soft_green', 0), + (728, 3752, 'persist_sparkles_clinging_soft_purple', 0), + (729, 3753, 'persist_sparkles_clinging_soft_red', 0), + (730, 3754, 'result_skeleton_bowing', 0), + (731, 3755, 'result_unerring_shot', 0), + (732, 3756, 'result_unerring_shot_flaming', 0), + (733, 3757, 'result_unyielding_will', 0), + (734, 3766, 'result_smoke_p2p', 0), + (735, 3777, 'cast_piercing_note', 0), + (736, 3779, 'cast_tune_flute', 0), + (737, 3785, 'persist_notes_gathering', 0), + (738, 3786, 'persist_notes_spiral_off', 0), + (739, 3787, 'result_note_swarm', 0), + (740, 3788, 'result_notes_gathering', 0), + (741, 3789, 'result_notes_spiral_off', 0), + (742, 3790, 'result_rings_rising', 0), + (743, 3807, 'result_devastation_fist_1', 0), + (744, 3808, 'result_devastation_fist_2', 0), + (745, 3809, 'result_devastation_fist_3', 0), + (746, 3820, 'persist_fear', 0), + (747, 3821, 'persist_notes_spiral_off_blue', 0), + (748, 3822, 'persist_notes_spiral_off_green', 0), + (749, 3823, 'persist_notes_spiral_off_red', 0), + (750, 3826, 'result_corruptive_symbol_p2p', 0), + (751, 3827, 'result_skeleton_attacking', 0), + (752, 3845, 'cast_tune_multichain', 0), + (753, 3849, 'result_fire_dark', 0), + (754, 3850, 'result_sparkles_explode', 0), + (755, 3851, 'result_vampire_rainbow_circle_throw', 0), + (756, 3852, 'result_vampire_whip_dark', 0), + (757, 3859, 'result_notes_spiral_chains', 0), + (758, 3860, 'result_rings_rising_noshrink', 0), + (759, 3861, 'result_umbral_trap', 0), + (760, 3864, 'cast_notes_out_song', 0), + (761, 3869, 'result_kirby_energy_p2p', 0), + (762, 3870, 'result_notes_tube_wavey', 0), + (763, 3910, 'result_mist_clingy', 0), + (764, 3938, 'design_result_lightning_bolt1', 0), + (765, 3949, 'cast_spark_cage_aoe', 0), + (766, 3950, 'cast_spark_cage_neg_aoe', 0), + (767, 4000, 'design_result_bat_swarm_attack', 0), + (768, 4001, 'design_result_tremor', 0), + (769, 4008, 'design_artifact_ap1_breath', 0), + (770, 4009, 'design_cast_inquisitor', 0), + (771, 4010, 'design_cast_vision_nek', 0), + (772, 4011, 'design_result_dispell1_out', 0), + (773, 4012, 'design_result_zombie_summon', 0), + (774, 4030, 'result_bloodlust_aoe', 0), + (775, 4031, 'result_clay_shields_aoe', 0), + (776, 4032, 'result_poison_cloud_aoe', 0), + (777, 4065, 'result_toxin_out_aoe', 0), + (778, 4073, 'result_shockwave_sparkles_aoe', 0), + (779, 4092, 'climbing_strafe_right', 0), + (780, 4093, 'climbing_walk', 0), + (781, 4123, 'cast_angry_burst_aoe', 0), + (782, 4124, 'cast_debuff_aoe', 0), + (783, 4129, 'result_fire_engulf_aoe', 0), + (784, 4130, 'result_flash_aoe', 0), + (785, 4131, 'result_motion_lines_flasher_aoe', 0), + (786, 4132, 'result_motion_lines_sub_aoe', 0), + (787, 4140, 'result_coins_falling', 0), + (788, 4141, 'result_forced_shader_rock', 0), + (789, 4142, 'result_terra_armor', 0), + (790, 4150, 'result_coalescing_vapor', 0), + (791, 4161, 'result_bone_blast', 0), + (792, 4162, 'result_bone_glow', 0), + (793, 4163, 'result_coalescing_notes', 0), + (794, 4164, 'result_dust_blast', 0), + (795, 4172, 'result_ice_blast_from_mesh', 0), + (796, 4194, 'result_rock_toss_p2p', 0), + (797, 4195, 'result_rocks_flying_from_mesh', 0), + (798, 4203, 'result_ring_of_blades', 0), + (799, 4204, 'result_ring_of_blades_scimitars', 0), + (800, 4205, 'result_ring_of_blades_swords', 0), + (801, 4341, 'result_devastation_fist_3a', 0), + (802, 4357, 'result_skeleton_hand', 0), + (803, 4368, 'cast_pfx_orbiting_rings_l', 0), + (804, 4369, 'cast_pfx_orbiting_rings_r', 0), + (805, 4449, 'cast_ring_expanding', 0), + (806, 4493, 'cast_call_of_power', 0), + (807, 4495, 'climbing_backup', 0), + (808, 4496, 'climbing_idle', 0), + (809, 4497, 'climbing_strafe_left', 0), + (810, 4506, 'monk_attack03', 0), + (811, 4518, 'result_call_of_power', 0), + (812, 4519, 'result_firespitter', 0), + (813, 4520, 'result_pet_victory', 0), + (814, 4545, 'result_morph_to_pet', 0), + (815, 4546, 'result_sparkles_radiating', 0), + (816, 4556, 'result_searing_sun', 0), + (817, 4557, 'result_smoking_mesh', 0), + (818, 4561, 'cast_bone_blast_1', 0), + (819, 4562, 'cast_bone_blast_2', 0), + (820, 4563, 'cast_bone_blast_3', 0), + (821, 4564, 'cast_morph_to_dragon', 0), + (822, 4569, 'result_cyclone_fire', 0), + (823, 4570, 'result_cyclone_snow', 0), + (824, 4571, 'result_morph_to_dragon', 0), + (825, 4580, 'result_cyclone_rocks', 0), + (826, 4581, 'result_cyclone_sand', 0), + (827, 4582, 'result_gnoll_buff', 0), + (828, 4599, 'dual_wield_attack03', 0), + (829, 4601, 'result_word_of_doom', 0), + (830, 4602, 'result_word_of_flame', 0), + (831, 4603, 'result_word_of_obedience', 0), + (832, 4604, 'result_word_of_silence', 0), + (833, 4608, '2h_sword_ouch_thrust', 0), + (834, 4625, 'result_froglok_buff', 0), + (835, 4626, 'result_stone_hand_terraporter', 0), + (836, 4670, 'result_candlelight_vigil', 0), + (837, 4702, 'result_rock_shock_wave', 0), + (838, 4718, 'result_fire_blast', 0), + (839, 4719, 'result_rock_shock_wave_lava', 0), + (840, 4720, 'result_tears_of_druzil', 0), + (841, 4730, 'climbing_exit_up_root', 0), + (842, 4735, 'result_rock_shock_wave_ice', 0), + (843, 4736, 'result_snowflakes_radiating', 0), + (844, 4742, 'cast_bright_ring_blue', 0), + (845, 4743, 'cast_bright_ring_red', 0), + (846, 4783, 'cast_morph_to_elf', 0), + (847, 4788, 'result_morph_to_elf', 0), + (848, 4798, 'climbing_enter_down_root', 0), + (849, 4810, 'result_scintillating_tapestry', 0), + (850, 4825, 'design_cast_vision_living_tombs', 0), + (851, 4850, 'result_runes_blast', 0), + (852, 4868, 'carry_blue_flag', 0), + (853, 4869, 'carry_red_flag', 0), + (854, 4911, 'result_coalescing_sparkles', 0), + (855, 4912, 'result_coalescing_vapor_sub', 0), + (856, 4913, 'result_serpents_intent', 0), + (857, 4914, 'result_singing_sword', 0), + (858, 4923, 'result_desert_call_p2p', 0), + (859, 4924, 'result_flash_flood_wave_cross_line', 0), + (860, 4925, 'result_flash_flood_wave_spray', 0), + (861, 4926, 'result_flash_flood_wave_tube', 0), + (862, 4995, 'design_cast_vision_ap2', 0), + (863, 4997, 'result_protection_of_faith_p2p', 0), + (864, 4998, 'result_protection_of_faith_tapestry', 0), + (865, 5020, 'result_anim_mesh_genie_ps', 0), + (866, 5069, 'result_fungusman_breath_attack_p2p', 0), + (867, 5070, 'result_mushrooms_growing', 0), + (868, 5135, 'result_shadow_summon_2', 0), + (869, 5149, 'result_shadow_summon_2_aoe', 0), + (870, 5352, 'debris_flying', 0), + (871, 5353, 'debris_swimming', 0), + (872, 5513, 'result_arena_water_whirlpool', 0), + (873, 5514, 'result_arena_water_whirlpool_aoe', 0), + (874, 5565, 'horse_backup', 0), + (875, 5566, 'horse_turn_left', 0), + (876, 5567, 'horse_turn_right', 0), + (877, 5571, 'result_arena_stone_gaze', 0), + (878, 5572, 'result_arena_water_rain', 0), + (879, 5573, 'result_fogger', 0), + (880, 5603, 'result_arena_water_rain_bubbles', 0), + (881, 5604, 'result_terrorantula_attack', 0), + (882, 5605, 'result_terrorantula_attack_cocoon', 0), + (883, 5640, 'result_arena_stone_gaze_flash', 0), + (884, 5971, 'result_arena_voidbeast_attack', 0), + (885, 5972, 'result_arena_voidbeast_smoke', 0), + (886, 5973, 'result_arena_voidbeast_smoke_threads', 0), + (887, 5983, 'result_ghost_fadeout', 0), + (888, 6012, 'result_spirit_of_the_elephant', 0), + (889, 6037, 'cast_trace_prism_left', 0), + (890, 6038, 'cast_trace_prism_right', 0), + (891, 6044, 'result_prisms_hex_clinging', 0), + (892, 6045, 'result_prisms_sparkle_soul', 0), + (893, 6046, 'result_prisms_sphere', 0), + (894, 6068, 'result_ice_dagger_breath_p2p', 0), + (895, 6090, 'result_cone_lightning_p2p', 0), + (896, 6091, 'result_dragon_cone_roar', 0), + (897, 6183, 'design_result_zombie_scare', 0), + (898, 6185, 'result_zombie_scare', 0), + (899, 6193, 'result_ghost_forced_shader_4', 0), + (900, 6269, 'result_bone_glow_2', 0), + (901, 6270, 'result_fireworks_burst', 0), + (902, 6271, 'result_fireworks_ring', 0), + (903, 6329, 'result_lion_paw_trails', 0), + (904, 6330, 'result_prism_tube_trail_1', 0), + (905, 6331, 'result_prism_tube_trail_2', 0), + (906, 6332, 'result_sparkle_soul', 0), + (907, 6410, 'result_pestilence', 0), + (908, 6435, 'result_dragonbreath', 0), + (909, 6453, 'cast_dragonbreath', 0), + (910, 6458, 'persist_dragonbreath', 0), + (911, 6459, 'result_hypnosis', 0), + (912, 6470, 'cast_celtic_circle', 0), + (913, 6473, 'cast_hypnosis', 0), + (914, 6497, 'persist_juggernaut', 0), + (915, 6498, 'result_juggernaut', 0), + (916, 6523, 'result_firestrips', 0), + (917, 6544, 'result_castigate', 0), + (918, 6605, 'cast_jesters_gamble', 0), + (919, 6674, 'status_quest_completes', 0), + (920, 6675, 'status_quest_gives', 0), + (921, 6676, 'status_quest_updates', 0), + (922, 6701, 'result_crazy_tube', 0), + (923, 6702, 'result_crazy_tube_iron', 0), + (924, 6752, 'cast_call_of_storms', 0), + (925, 6757, 'result_call_of_storms', 0), + (926, 6766, 'cast_mysticism', 0), + (927, 6771, 'result_mysticism', 0), + (928, 6776, 'cast_fusion', 0), + (929, 6786, 'cast_crescent_hands_l', 0), + (930, 6787, 'cast_crescent_hands_r', 0), + (931, 6801, 'result_rift', 0), + (932, 6802, 'result_verdict', 0), + (933, 6803, 'result_verdict_explosion', 0), + (934, 6844, 'cast_plane_shift', 0), + (935, 6849, 'result_plane_shift', 0), + (936, 6850, 'result_vortex_p2p', 0), + (937, 6862, 'cast_undead_tide', 0), + (938, 6866, 'result_bonfire', 0), + (939, 6867, 'result_steam', 0), + (940, 6880, 'result_cone_lightning_wave_p2p', 0), + (941, 6881, 'result_ice_dagger_breath_small_p2p', 0), + (942, 6890, 'result_rock_breath_p2p', 0), + (943, 6891, 'result_rocks_sticky', 0), + (944, 6967, 'result_aa_shaman_ghost_wolf', 0), + (945, 6975, 'cast_pickpocket', 0), + (946, 6980, 'result_mana_channeling', 0), + (947, 7001, 'levelup_achievement', 0), + (948, 7011, 'result_pickpocket', 0), + (949, 7059, 'result_snoring_zzz', 0), + (950, 7064, 'cast_vyemm_slam', 0), + (951, 7072, 'result_steam_blast', 0), + (952, 7104, 'result_poison_cysts', 0), + (953, 7442, 'result_aa_pyramid', 0), + (954, 7682, 'result_webby_canister', 0), + (955, 7747, 'result_ghost_undo', 0), + (956, 7815, 'cast_trace_sparkcrescent_l', 0), + (957, 7816, 'cast_trace_sparkcrescent_r', 0), + (958, 7821, 'design_keg_filling_mug', 0), + (959, 7966, 'result_charge_fast', 0), + (960, 7967, 'result_smoke_small_p5', 0), + (961, 8179, 'result_fire_purple', 0), + (962, 8482, 'cast_dryad_teleport', 0), + (963, 8489, 'result_dryad_teleport', 0), + (964, 8502, 'cast_dryad_attack_aoe', 0), + (965, 8509, 'result_dryad_attack_aoe', 0), + (966, 8536, 'cast_rain_of_thistles', 0), + (967, 8542, 'result_rain_of_thistles', 0), + (968, 8785, 'result_chrome_forced_shader', 0), + (969, 8991, 'result_copter_welder_lightning_p2p', 0), + (970, 9078, 'run_03', 0), + (971, 9079, 'run_down_idle', 0), + (972, 9080, 'run_up_idle', 0), + (973, 9082, 'sway_l', 0), + (974, 9083, 'sway_r', 0), + (975, 9232, 'result_soulless', 0), + (976, 9443, 'result_soap_mouth', 0), + (977, 9516, 'cast_vision_plane_druid_ring', 0), + (978, 9526, 'cast_wizard_spires', 0), + (979, 9587, 'result_choking_vines_aoe', 0), + (980, 9608, 'result_wuoshi_tree_morph', 0), + (981, 9654, 'result_lightning_bolt_sub1', 0), + (982, 9655, 'result_lightning_bolt_sub2', 0), + (983, 9676, 'female_dead', 0), + (984, 9677, 'female_dead_enter', 0), + (985, 9733, 'aura_red', 0), + (986, 9739, 'female_run', 0), + (987, 9754, 'cast_blanket_of_eternal_night', 0), + (988, 9755, 'cast_mayongs_touch', 0), + (989, 9757, 'cast_soul_paralysis', 0), + (990, 9763, 'result_blanket_of_eternal_night', 0), + (991, 9773, 'cast_gaze_of_obedience', 0), + (992, 9788, 'froglok_idle', 0), + (993, 9821, 'cast_laser_p2p', 0), + (994, 9832, 'result_laser_p2p', 0), + (995, 9836, 'cast_firebreath_p2p', 0), + (996, 9844, 'froglok_bow', 0), + (997, 9845, 'froglok_crouch', 0), + (998, 9846, 'froglok_curtsey', 0), + (999, 9847, 'froglok_dead', 0), + (1000, 9848, 'froglok_death', 0), + (1001, 9849, 'froglok_run', 0), + (1002, 9850, 'froglok_sit_enter', 0), + (1003, 9851, 'froglok_sit_exit', 0), + (1004, 9852, 'froglok_sit_idle', 0), + (1005, 9857, 'cast_mana_burn', 0), + (1006, 9881, 'fae_light_idle', 0), + (1007, 9884, 'result_mana_burn', 0), + (1008, 9930, 'result_poison_forced_shader_weapon', 0), + (1009, 9950, 'cast_glass_shattering', 0), + (1010, 9960, 'result_glass_shattering', 0), + (1011, 9971, 'result_brigand_slide', 0), + (1012, 9972, 'result_golden_flash', 0), + (1013, 9985, 'result_dirge_confront_fear', 0), + (1014, 9986, 'result_illusionist_illuminate', 0), + (1015, 10012, 'attack_earthshake', 0), + (1016, 10019, 'fae_light_1h_sword_attack', 0), + (1017, 10020, 'fae_light_1h_sword_attack01', 0), + (1018, 10021, 'fae_light_1h_sword_attack02', 0), + (1019, 10022, 'fae_light_1h_sword_attack03', 0), + (1020, 10023, 'fae_light_1h_sword_death_blow', 0), + (1021, 10024, 'fae_light_1h_sword_death_blow01', 0), + (1022, 10025, 'fae_light_1h_sword_dodge_backhand', 0), + (1023, 10026, 'fae_light_1h_sword_dodge_down', 0), + (1024, 10027, 'fae_light_1h_sword_dodge_forehand', 0), + (1025, 10028, 'fae_light_1h_sword_dodge_thrust', 0), + (1026, 10029, 'fae_light_1h_sword_ouch_backhand', 0), + (1027, 10030, 'fae_light_1h_sword_ouch_down', 0), + (1028, 10031, 'fae_light_1h_sword_ouch_forehand', 0), + (1029, 10032, 'fae_light_1h_sword_ouch_thrust', 0), + (1030, 10033, 'fae_light_1h_sword_parry_backhand', 0), + (1031, 10034, 'fae_light_1h_sword_parry_down', 0), + (1032, 10035, 'fae_light_1h_sword_parry_forehand', 0), + (1033, 10036, 'fae_light_1h_sword_parry_thrust', 0), + (1034, 10037, 'fae_light_2h_sword_attack', 0), + (1035, 10038, 'fae_light_2h_sword_attack01', 0), + (1036, 10039, 'fae_light_2h_sword_attack02', 0), + (1037, 10040, 'fae_light_2h_sword_defensive_buff', 0), + (1038, 10041, 'fae_light_2h_sword_dodge_backhand', 0), + (1039, 10042, 'fae_light_2h_sword_dodge_down', 0), + (1040, 10043, 'fae_light_2h_sword_dodge_forehand', 0), + (1041, 10044, 'fae_light_2h_sword_enter', 0), + (1042, 10045, 'fae_light_2h_sword_kick', 0), + (1043, 10046, 'fae_light_2h_sword_ouch_backhand', 0), + (1044, 10047, 'fae_light_2h_sword_ouch_down', 0), + (1045, 10048, 'fae_light_2h_sword_ouch_forehand', 0), + (1046, 10049, 'fae_light_2h_sword_ouch_thrust', 0), + (1047, 10052, 'fae_light_bostaff_attack01', 0), + (1048, 10053, 'fae_light_bostaff_attack02', 0), + (1049, 10054, 'fae_light_bostaff_attack03', 0), + (1050, 10081, 'fae_light_dual_wield_attack', 0), + (1051, 10082, 'fae_light_dual_wield_attack01', 0), + (1052, 10083, 'fae_light_dual_wield_attack02', 0), + (1053, 10084, 'fae_light_dual_wield_attack03', 0), + (1054, 10085, 'fae_light_dual_wield_kick', 0), + (1055, 10086, 'fae_light_dual_wield_whirling_attack', 0), + (1056, 10087, 'fae_light_dual_wield_wild_swing', 0), + (1057, 10088, 'fae_light_monk_attack', 0), + (1058, 10089, 'fae_light_monk_attack01', 0), + (1059, 10090, 'fae_light_monk_attack02', 0), + (1060, 10091, 'fae_light_monk_attack03', 0), + (1061, 10092, 'fae_light_monk_wild_swing', 0), + (1062, 10093, 'fae_light_pike_attack', 0), + (1063, 10094, 'fae_light_pike_attack01', 0), + (1064, 10095, 'fae_light_pike_attack02', 0), + (1065, 10096, 'fae_light_pike_kick', 0), + (1066, 10097, 'fae_light_pike_whirling_attack', 0), + (1067, 10098, 'fae_light_pike_wild_swing', 0), + (1068, 10099, 'fae_light_pugilist_attack', 0), + (1069, 10100, 'fae_light_pugilist_attack02', 0), + (1070, 10101, 'fae_light_pugilist_kick', 0), + (1071, 10102, 'fae_light_pugilist_whirling_attack', 0), + (1072, 10103, 'fae_light_pugilist_wild_swing', 0), + (1073, 10122, 'froglok_1h_sword_attack', 0), + (1074, 10123, 'froglok_1h_sword_idle', 0), + (1075, 10128, 'cast_forced_flasher_stream_scroll', 0), + (1076, 10129, 'cast_forced_flasher_stream_scroll_blend', 0), + (1077, 10137, 'result_berserker_red_eyes', 0), + (1078, 10138, 'result_god_spell_brell_serilis', 0), + (1079, 10139, 'result_god_spell_cazic_thule', 0), + (1080, 10140, 'result_god_spell_innoruuk', 0), + (1081, 10141, 'result_god_spell_mithaniel_marr', 0), + (1082, 10142, 'result_god_spell_quellious', 0), + (1083, 10143, 'result_god_spell_rallos_zek', 0), + (1084, 10144, 'result_god_spell_solusek_ro', 0), + (1085, 10145, 'result_god_spell_tunare', 0), + (1086, 10146, 'result_sun_spell', 0), + (1087, 10157, 'froglok_1h_crush_attack', 0), + (1088, 10158, 'froglok_1h_crush_attack01', 0), + (1089, 10159, 'froglok_1h_crush_attack02', 0), + (1090, 10160, 'froglok_1h_crush_attack03', 0), + (1091, 10161, 'froglok_1h_crush_dodge_backhand', 0), + (1092, 10162, 'froglok_1h_crush_dodge_down', 0), + (1093, 10163, 'froglok_1h_crush_dodge_forehand', 0), + (1094, 10164, 'froglok_1h_crush_dodge_thrust', 0), + (1095, 10165, 'froglok_1h_crush_ouch_backhand', 0), + (1096, 10166, 'froglok_1h_crush_ouch_down', 0), + (1097, 10167, 'froglok_1h_crush_ouch_forehand', 0), + (1098, 10168, 'froglok_1h_crush_ouch_thrust', 0), + (1099, 10169, 'froglok_1h_crush_parry_backhand', 0), + (1100, 10170, 'froglok_1h_crush_parry_down', 0), + (1101, 10171, 'froglok_1h_crush_parry_forehand', 0), + (1102, 10172, 'froglok_1h_crush_parry_thrust', 0), + (1103, 10173, 'froglok_1h_pierce_attack', 0), + (1104, 10174, 'froglok_1h_pierce_attack01', 0), + (1105, 10175, 'froglok_1h_pierce_dodge_backhand', 0), + (1106, 10176, 'froglok_1h_pierce_dodge_down', 0), + (1107, 10177, 'froglok_1h_pierce_dodge_forehand', 0), + (1108, 10178, 'froglok_1h_pierce_dodge_thrust', 0), + (1109, 10179, 'froglok_1h_pierce_ouch_backhand', 0), + (1110, 10180, 'froglok_1h_pierce_ouch_down', 0), + (1111, 10181, 'froglok_1h_pierce_ouch_forehand', 0), + (1112, 10182, 'froglok_1h_pierce_ouch_thrust', 0), + (1113, 10183, 'froglok_1h_pierce_parry_backhand', 0), + (1114, 10184, 'froglok_1h_pierce_parry_down', 0), + (1115, 10185, 'froglok_1h_pierce_parry_forehand', 0), + (1116, 10186, 'froglok_1h_pierce_parry_thrust', 0), + (1117, 10187, 'froglok_1h_sword_attack01', 0), + (1118, 10188, 'froglok_1h_sword_attack02', 0), + (1119, 10189, 'froglok_1h_sword_attack03', 0), + (1120, 10190, 'froglok_1h_sword_death_blow', 0), + (1121, 10191, 'froglok_1h_sword_death_blow01', 0), + (1122, 10192, 'froglok_1h_sword_dodge_backhand', 0), + (1123, 10193, 'froglok_1h_sword_dodge_down', 0), + (1124, 10194, 'froglok_1h_sword_dodge_forehand', 0), + (1125, 10195, 'froglok_1h_sword_dodge_thrust', 0), + (1126, 10196, 'froglok_1h_sword_ouch_backhand', 0), + (1127, 10197, 'froglok_1h_sword_ouch_down', 0), + (1128, 10198, 'froglok_1h_sword_ouch_forehand', 0), + (1129, 10199, 'froglok_1h_sword_ouch_thrust', 0), + (1130, 10200, 'froglok_1h_sword_parry_backhand', 0), + (1131, 10201, 'froglok_1h_sword_parry_down', 0), + (1132, 10202, 'froglok_1h_sword_parry_forehand', 0), + (1133, 10203, 'froglok_1h_sword_parry_thrust', 0), + (1134, 10204, 'froglok_1h_thrown_dodge_backhand', 0), + (1135, 10205, 'froglok_1h_thrown_dodge_down', 0), + (1136, 10206, 'froglok_1h_thrown_dodge_forehand', 0), + (1137, 10207, 'froglok_1h_thrown_dodge_thrust', 0), + (1138, 10208, 'froglok_1h_thrown_ouch_backhand', 0), + (1139, 10209, 'froglok_1h_thrown_ouch_down', 0), + (1140, 10210, 'froglok_1h_thrown_ouch_forehand', 0), + (1141, 10211, 'froglok_1h_thrown_ouch_thrust', 0), + (1142, 10212, 'froglok_bow_dodge_backhand', 0), + (1143, 10213, 'froglok_bow_dodge_down', 0), + (1144, 10214, 'froglok_bow_dodge_forehand', 0), + (1145, 10215, 'froglok_bow_dodge_thrust', 0), + (1146, 10216, 'froglok_bow_ouch_backhand', 0), + (1147, 10217, 'froglok_bow_ouch_down', 0), + (1148, 10218, 'froglok_bow_ouch_forehand', 0), + (1149, 10219, 'froglok_bow_ouch_thrust', 0), + (1150, 10220, 'froglok_dual_wield_attack', 0), + (1151, 10221, 'froglok_dual_wield_attack01', 0), + (1152, 10222, 'froglok_dual_wield_attack02', 0), + (1153, 10223, 'froglok_dual_wield_attack03', 0), + (1154, 10224, 'froglok_dual_wield_dodge_backhand', 0), + (1155, 10225, 'froglok_dual_wield_dodge_down', 0), + (1156, 10226, 'froglok_dual_wield_dodge_forehand', 0), + (1157, 10227, 'froglok_dual_wield_dodge_thrust', 0), + (1158, 10228, 'froglok_dual_wield_idle', 0), + (1159, 10229, 'froglok_dual_wield_ouch_backhand', 0), + (1160, 10230, 'froglok_dual_wield_ouch_down', 0), + (1161, 10231, 'froglok_dual_wield_ouch_forehand', 0), + (1162, 10232, 'froglok_dual_wield_ouch_thrust', 0), + (1163, 10243, 'froglok_1h_crush_idle', 0), + (1164, 10244, 'froglok_1h_pierce_idle', 0), + (1165, 10245, 'froglok_1h_thrown_idle', 0), + (1166, 10246, 'froglok_2h_sword_attack', 0), + (1167, 10247, 'froglok_2h_sword_attack01', 0), + (1168, 10248, 'froglok_2h_sword_attack02', 0), + (1169, 10249, 'froglok_2h_sword_attack03', 0), + (1170, 10250, 'froglok_2h_sword_idle', 0), + (1171, 10251, 'froglok_bow_idle', 0), + (1172, 10252, 'froglok_dual_wield_kick', 0), + (1173, 10253, 'froglok_dual_wield_whirling_attack', 0), + (1174, 10254, 'froglok_dual_wield_wild_swing', 0), + (1175, 10290, 'froglok_2h_sword_dodge_backhand', 0), + (1176, 10291, 'froglok_2h_sword_dodge_down', 0), + (1177, 10292, 'froglok_2h_sword_dodge_forehand', 0), + (1178, 10293, 'froglok_2h_sword_dodge_thrust', 0), + (1179, 10294, 'froglok_2h_sword_kick', 0), + (1180, 10295, 'froglok_2h_sword_whirling_attack', 0), + (1181, 10296, 'froglok_2h_sword_wild_swing', 0), + (1182, 10297, 'froglok_bostaff_attack', 0), + (1183, 10298, 'froglok_bostaff_attack01', 0), + (1184, 10299, 'froglok_bostaff_attack02', 0), + (1185, 10300, 'froglok_bostaff_attack03', 0), + (1186, 10301, 'froglok_bostaff_idle', 0), + (1187, 10302, 'froglok_bostaff_kick', 0), + (1188, 10303, 'froglok_bostaff_whirling_attack', 0), + (1189, 10304, 'froglok_bostaff_wild_swing', 0), + (1190, 10305, 'froglok_monk_idle', 0), + (1191, 10307, 'result_beserker_red_eyes', 0), + (1192, 10308, 'result_guardian_aura', 0), + (1193, 10318, 'froglok_monk_attack', 0), + (1194, 10319, 'froglok_monk_attack01', 0), + (1195, 10320, 'froglok_monk_attack02', 0), + (1196, 10321, 'froglok_monk_attack03', 0), + (1197, 10322, 'froglok_monk_kick', 0), + (1198, 10323, 'froglok_monk_kick_spin', 0), + (1199, 10324, 'froglok_monk_wild_swing', 0), + (1200, 10356, 'froglok_monk_whirling_attack', 0), + (1201, 10357, 'froglok_pike_attack', 0), + (1202, 10358, 'froglok_pike_attack01', 0), + (1203, 10359, 'froglok_pike_attack02', 0), + (1204, 10360, 'froglok_pike_idle', 0), + (1205, 10361, 'froglok_pike_kick', 0), + (1206, 10362, 'froglok_pike_whirling_attack', 0), + (1207, 10363, 'froglok_pike_wild_swing', 0), + (1208, 10364, 'froglok_pugilist_attack', 0), + (1209, 10365, 'froglok_pugilist_attack02', 0), + (1210, 10366, 'froglok_pugilist_attack03', 0), + (1211, 10367, 'froglok_pugilist_idle', 0), + (1212, 10368, 'froglok_pugilist_kick', 0), + (1213, 10369, 'froglok_pugilist_whirling_attack', 0), + (1214, 10370, 'froglok_pugilist_wild_swing', 0), + (1215, 10371, 'froglok_untrained_attack', 0), + (1216, 10372, 'froglok_untrained_idle', 0), + (1217, 10374, 'result_coercer_sun_aura', 0), + (1218, 10375, 'result_illusionist_head_aura', 0), + (1219, 10376, 'result_paladin_shoulder_streamers', 0), + (1220, 10377, 'result_templar_halo', 0), + (1221, 10387, 'fae_light_run', 0), + (1222, 10389, 'result_assassin_star_cloud_hands', 0), + (1223, 10390, 'result_brigand_hand_trails', 0), + (1224, 10391, 'result_bruiser_fist_shining', 0), + (1225, 10392, 'result_dirge_sparkles', 0), + (1226, 10393, 'result_monk_fist_rings', 0), + (1227, 10394, 'result_swashbuckler_hand_trails', 0), + (1228, 10395, 'result_warlock_subtle_aura', 0), + (1229, 10415, 'fae_light_climbing_backup', 0), + (1230, 10416, 'fae_light_climbing_enter_down_root', 0), + (1231, 10417, 'fae_light_climbing_exit_up_root', 0), + (1232, 10418, 'fae_light_climbing_idle', 0), + (1233, 10419, 'fae_light_climbing_strafe_left', 0), + (1234, 10420, 'fae_light_climbing_strafe_right', 0), + (1235, 10421, 'fae_light_climbing_walk', 0), + (1236, 10422, 'fae_light_dead', 0), + (1237, 10423, 'fae_light_dead_enter', 0), + (1238, 10469, 'fae_light_bostaff_dodge_backhand', 0), + (1239, 10470, 'fae_light_bostaff_dodge_forehand', 0), + (1240, 10471, 'fae_light_dual_wield_dodge_backhand', 0), + (1241, 10472, 'fae_light_dual_wield_dodge_forehand', 0), + (1242, 10473, 'fae_light_dual_wield_ouch_backhand', 0), + (1243, 10474, 'fae_light_dual_wield_ouch_forehand', 0), + (1244, 10475, 'fae_light_dual_wield_parry_down', 0), + (1245, 10508, 'fae_light_monk_dodge_backhand', 0), + (1246, 10509, 'fae_light_monk_dodge_down', 0), + (1247, 10512, 'horse_jump_substitute', 0), + (1248, 10516, 'result_conjuror_shoulder_blue_flames', 0), + (1249, 10529, 'fae_light_sit_enter', 0), + (1250, 10530, 'fae_light_sit_exit', 0), + (1251, 10531, 'fae_light_sit_idle', 0), + (1252, 10533, 'froglok_horse_idle', 0), + (1253, 10542, 'result_necromancer_hand_skulls', 0), + (1254, 10553, 'froglok_gathering_search', 0), + (1255, 10554, 'froglok_gathering_success', 0), + (1256, 10555, 'froglok_mining_digging', 0), + (1257, 10559, 'result_ranger_green_aura', 0), + (1258, 10560, 'result_shadowknight_flame_horns', 0), + (1259, 10561, 'result_wizard_elemental_hands', 0), + (1260, 10574, 'froglok_converse_male04', 0), + (1261, 10575, 'froglok_converse_male12', 0), + (1262, 10576, 'froglok_forestry_success', 0), + (1263, 10577, 'froglok_horse_jump_substitute', 0), + (1264, 10578, 'froglok_kick', 0), + (1265, 10579, 'froglok_knockedtoback', 0), + (1266, 10580, 'froglok_mining_success', 0), + (1267, 10581, 'froglok_run_03', 0), + (1268, 10582, 'froglok_wild_swing', 0), + (1269, 10584, 'result_defiler_poison_cloud', 0), + (1270, 10585, 'result_mystic_cloudy_feet', 0), + (1271, 10586, 'result_troubador_clouds', 0), + (1272, 10596, 'froglok_bostaff_knockedtoback', 0), + (1273, 10597, 'froglok_bostaff_knockedtoback_getup', 0), + (1274, 10598, 'froglok_bow_knockedtoback', 0), + (1275, 10599, 'froglok_bow_knockedtoback_getup', 0), + (1276, 10600, 'froglok_dual_wield_knockedtoback', 0), + (1277, 10601, 'froglok_dual_wield_knockedtoback_getup', 0), + (1278, 10602, 'froglok_knockedtoback_getup', 0), + (1279, 10603, 'froglok_knockedtoback_onbackidle', 0), + (1280, 10604, 'froglok_monk_knockedtoback', 0), + (1281, 10605, 'froglok_monk_knockedtoback_getup', 0), + (1282, 10606, 'froglok_pike_knockedtoback', 0), + (1283, 10607, 'froglok_pike_knockedtoback_getup', 0), + (1284, 10608, 'froglok_pugilist_knockedtoback', 0), + (1285, 10609, 'froglok_pugilist_knockedtoback_getup', 0), + (1286, 10680, '1h_crush_attack_recoil', 0), + (1287, 10681, '1h_crush_attack_recoil01', 0), + (1288, 10682, '1h_crush_attack_recoil02', 0), + (1289, 10683, '1h_crush_attack_recoil03', 0), + (1290, 10684, '1h_crush_backup', 0), + (1291, 10685, '1h_crush_enter', 0), + (1292, 10686, '1h_crush_exit', 0), + (1293, 10687, '1h_crush_strafe_left', 0), + (1294, 10688, '1h_crush_strafe_right', 0), + (1295, 10689, '1h_crush_walk', 0), + (1296, 10690, '1h_pierce_attack02', 0), + (1297, 10691, '1h_pierce_attack03', 0), + (1298, 10692, '1h_pierce_attack_recoil', 0), + (1299, 10693, '1h_pierce_attack_recoil01', 0), + (1300, 10694, '1h_pierce_attack_recoil02', 0), + (1301, 10695, '1h_pierce_attack_recoil03', 0), + (1302, 10696, '1h_pierce_backup', 0), + (1303, 10697, '1h_pierce_death_blow', 0), + (1304, 10698, '1h_pierce_death_blow01', 0), + (1305, 10699, '1h_pierce_enter', 0), + (1306, 10700, '1h_pierce_exit', 0), + (1307, 10701, '1h_pierce_strafe_left', 0), + (1308, 10702, '1h_pierce_strafe_right', 0), + (1309, 10703, '1h_pierce_walk', 0), + (1310, 10704, '1h_sword_attack_recoil', 0), + (1311, 10705, '1h_sword_attack_recoil01', 0), + (1312, 10706, '1h_sword_attack_recoil02', 0), + (1313, 10707, '1h_sword_attack_recoil03', 0), + (1314, 10708, '1h_sword_backup', 0), + (1315, 10709, '1h_sword_enter', 0), + (1316, 10710, '1h_sword_exit', 0), + (1317, 10711, '1h_sword_parry_thurst', 0), + (1318, 10712, '1h_sword_strafe_left', 0), + (1319, 10713, '1h_sword_strafe_right', 0), + (1320, 10714, '1h_sword_walk', 0), + (1321, 10715, '1h_throw_attack', 0), + (1322, 10716, '1h_thrown_backup', 0), + (1323, 10717, '1h_thrown_strafe_left', 0), + (1324, 10718, '1h_thrown_strafe_right', 0), + (1325, 10719, '1h_thrown_walk', 0), + (1326, 10720, '2h_sword_attack03', 0), + (1327, 10721, '2h_sword_attack_recoil', 0), + (1328, 10722, '2h_sword_attack_recoil01', 0), + (1329, 10723, '2h_sword_attack_recoil02', 0), + (1330, 10724, '2h_sword_attack_recoil03', 0), + (1331, 10725, '2h_sword_backup', 0), + (1332, 10726, '2h_sword_charge_up', 0), + (1333, 10727, '2h_sword_dodge_thrust', 0), + (1334, 10728, '2h_sword_exit', 0), + (1335, 10729, '2h_sword_feint', 0), + (1336, 10730, '2h_sword_offensive_buff', 0), + (1337, 10731, '2h_sword_parry_backhand', 0), + (1338, 10732, '2h_sword_parry_down', 0), + (1339, 10733, '2h_sword_parry_forehand', 0), + (1340, 10734, '2h_sword_parry_thrust', 0), + (1341, 10735, '2h_sword_strafe_left', 0), + (1342, 10736, '2h_sword_strafe_right', 0), + (1343, 10737, '2h_sword_super_buff', 0), + (1344, 10738, '2h_sword_taunt', 0), + (1345, 10739, '2h_sword_taunt_combat_art', 0), + (1346, 10740, '2h_sword_walk', 0), + (1347, 10741, '2hsword_idle01', 0), + (1348, 10744, 'a', 0), + (1349, 10745, 'agree', 0), + (1350, 10747, 'alchemy_failure', 0), + (1351, 10748, 'alchemy_idle', 0), + (1352, 10749, 'alchemy_success', 0), + (1353, 10750, 'angry', 0), + (1354, 10751, 'antenna_01', 0), + (1355, 10752, 'antenna_02', 0), + (1356, 10753, 'antenna_03', 0), + (1357, 10754, 'antenna_04', 0), + (1358, 10755, 'antenna_05', 0), + (1359, 10756, 'antonia_wisp', 0), + (1360, 10757, 'anvil', 0), + (1361, 10758, 'anvil_small', 0), + (1362, 10759, 'appear', 0), + (1363, 10760, 'applaude', 0), + (1364, 10761, 'arm04_fail', 0), + (1365, 10762, 'arm04_success', 0), + (1366, 10763, 'armpour01', 0), + (1367, 10764, 'artifact', 0), + (1368, 10765, 'artificing_failure', 0), + (1369, 10766, 'artificing_idle', 0), + (1370, 10767, 'artificing_success', 0), + (1371, 10768, 'artsn_chem_sound', 0), + (1372, 10769, 'artsn_chimepad_sound', 0), + (1373, 10770, 'artsn_forge_helmet_sound', 0), + (1374, 10771, 'artsn_forge_sound', 0), + (1375, 10772, 'artsn_glow_sound', 0), + (1376, 10773, 'artsn_knives_sound', 0), + (1377, 10774, 'artsn_knot_sound', 0), + (1378, 10775, 'artsn_logcut_sound', 0), + (1379, 10776, 'artsn_metal_bar_end_snd', 0), + (1380, 10777, 'artsn_metal_bar_snd', 0), + (1381, 10778, 'artsn_molecule_sound', 0), + (1382, 10779, 'artsn_planer_sound', 0), + (1383, 10780, 'artsn_saw_sound', 0), + (1384, 10781, 'artsn_stove_sound', 0), + (1385, 10782, 'asg_stonegaze_snd', 0), + (1386, 10783, 'attack', 0), + (1387, 10784, 'attack01', 0), + (1388, 10785, 'attack02', 0), + (1389, 10786, 'attack03', 0), + (1390, 10787, 'attack04', 0), + (1391, 10788, 'attack_backhand_trigger', 0), + (1392, 10789, 'attack_bite', 0), + (1393, 10790, 'attack_breath', 0), + (1394, 10791, 'attack_breath01', 0), + (1395, 10792, 'attack_breath02', 0), + (1396, 10793, 'attack_forehand_trigger', 0), + (1397, 10794, 'attack_headram', 0), + (1398, 10795, 'attack_rear', 0), + (1399, 10796, 'attack_roar01', 0), + (1400, 10797, 'attack_scream', 0), + (1401, 10798, 'attack_slam', 0), + (1402, 10799, 'attack_snap', 0), + (1403, 10800, 'attack_sound', 0), + (1404, 10801, 'attack_special', 0), + (1405, 10802, 'attack_special01', 0), + (1406, 10803, 'attack_special02', 0), + (1407, 10804, 'attack_special03', 0), + (1408, 10805, 'attack_special_spring', 0), + (1409, 10806, 'attack_stomp', 0), + (1410, 10807, 'attack_tail', 0), + (1411, 10808, 'attack_whirling', 0), + (1412, 10809, 'attack_wildswing', 0), + (1413, 10810, 'attack_wing', 0), + (1414, 10811, 'attack_wings', 0), + (1415, 10812, 'attack_woosh01', 0), + (1416, 10813, 'attacktiming', 0), + (1417, 10814, 'attacktiming_a', 0), + (1418, 10815, 'attention', 0), + (1419, 10816, 'aval_cast_snd', 0), + (1420, 10817, 'awrh_cast_snd', 0), + (1421, 10818, 'awrh_heal2_snd', 0), + (1422, 10819, 'awrh_heal_snd', 0), + (1423, 10820, 'awrh_rainfall_snd', 0), + (1424, 10821, 'aww_whirlcast_snd', 0), + (1425, 10822, 'aww_whirlparticles_snd', 0), + (1426, 10823, 'backup', 0), + (1427, 10824, 'backup_run', 0), + (1428, 10825, 'bad_outcome01', 0), + (1429, 10826, 'bad_outcome01_shuttle', 0), + (1430, 10827, 'bad_outcome02', 0), + (1431, 10828, 'bad_outcome02_shuttle', 0), + (1432, 10829, 'ball_bk', 0), + (1433, 10830, 'ball_bk_sm', 0), + (1434, 10831, 'ball_glow', 0), + (1435, 10832, 'ball_wht', 0), + (1436, 10833, 'ball_wht_sm', 0), + (1437, 10834, 'barrel_fire', 0), + (1438, 10835, 'barrel_pieces', 0), + (1439, 10836, 'base', 0), + (1440, 10837, 'bat_swarm', 0), + (1441, 10838, 'battlecry', 0), + (1442, 10839, 'bc_caged_snd', 0), + (1443, 10840, 'bd_cast_lp_snd', 0), + (1444, 10841, 'bd_fireburst_snd', 0), + (1445, 10842, 'beaker01', 0), + (1446, 10843, 'beckon', 0), + (1447, 10844, 'beg', 0), + (1448, 10845, 'bene', 0), + (1449, 10846, 'big_saw_success', 0), + (1450, 10847, 'big_saw_success2', 0), + (1451, 10848, 'big_smoke', 0), + (1452, 10849, 'bl_castswirls_snd', 0), + (1453, 10850, 'bl_start_particles_snd', 0), + (1454, 10851, 'blammo', 0), + (1455, 10852, 'blink', 0), + (1456, 10853, 'boe_endspinner_sound', 0), + (1457, 10854, 'boe_open_burst_sound', 0), + (1458, 10855, 'boe_shield_tone_sound', 0), + (1459, 10856, 'boggle', 0), + (1460, 10857, 'boilover01', 0), + (1461, 10858, 'book_white', 0), + (1462, 10859, 'bostaff_attack_recoil', 0), + (1463, 10860, 'bostaff_attack_recoil01', 0), + (1464, 10861, 'bostaff_attack_recoil02', 0), + (1465, 10862, 'bostaff_attack_recoil03', 0), + (1466, 10863, 'bostaff_backup', 0), + (1467, 10864, 'bostaff_charge_up', 0), + (1468, 10865, 'bostaff_defensive_buff', 0), + (1469, 10866, 'bostaff_dodge_backhand', 0), + (1470, 10867, 'bostaff_dodge_down', 0), + (1471, 10868, 'bostaff_dodge_forehand', 0), + (1472, 10869, 'bostaff_dodge_thrust', 0), + (1473, 10870, 'bostaff_enter', 0), + (1474, 10871, 'bostaff_exit', 0), + (1475, 10872, 'bostaff_feint', 0), + (1476, 10873, 'bostaff_idle01', 0), + (1477, 10874, 'bostaff_knockdowntoknees', 0), + (1478, 10875, 'bostaff_knockedtoback', 0), + (1479, 10876, 'bostaff_knockedtoback_getup', 0), + (1480, 10877, 'bostaff_offensive_buff', 0), + (1481, 10878, 'bostaff_ouch_backhand', 0), + (1482, 10879, 'bostaff_ouch_down', 0), + (1483, 10880, 'bostaff_ouch_forehand', 0), + (1484, 10881, 'bostaff_ouch_thrust', 0), + (1485, 10882, 'bostaff_parry_backhand', 0), + (1486, 10883, 'bostaff_parry_down', 0), + (1487, 10884, 'bostaff_parry_forehand', 0), + (1488, 10885, 'bostaff_parry_thrust', 0), + (1489, 10886, 'bostaff_strafe_left', 0), + (1490, 10887, 'bostaff_strafe_right', 0), + (1491, 10888, 'bostaff_super_buff', 0), + (1492, 10889, 'bostaff_taunt_combat_art', 0), + (1493, 10890, 'bostaff_walk', 0), + (1494, 10891, 'bow_aim_down', 0), + (1495, 10892, 'bow_aim_up', 0), + (1496, 10893, 'bow_attack', 0), + (1497, 10894, 'bow_attack_2x', 0), + (1498, 10895, 'bow_backup', 0), + (1499, 10896, 'bow_enter', 0), + (1500, 10897, 'bow_exit', 0), + (1501, 10898, 'bow_getarrow', 0), + (1502, 10899, 'bow_knockdowntoknees', 0), + (1503, 10900, 'bow_knockedtoback', 0), + (1504, 10901, 'bow_knockedtoback_getup', 0), + (1505, 10902, 'bow_pullback', 0), + (1506, 10903, 'bow_release', 0), + (1507, 10904, 'bow_sheathe', 0), + (1508, 10905, 'bow_strafe_left', 0), + (1509, 10906, 'bow_strafe_right', 0), + (1510, 10907, 'bow_unsheathe', 0), + (1511, 10908, 'bow_walk', 0), + (1512, 10909, 'bowstring', 0), + (1513, 10910, 'bowstring_electricity', 0), + (1514, 10911, 'bowstring_electricity_red', 0), + (1515, 10912, 'brandish', 0), + (1516, 10913, 'breath', 0), + (1517, 10914, 'breath_attack', 0), + (1518, 10915, 'breath_attack_blue', 0), + (1519, 10916, 'breath_attack_purple', 0), + (1520, 10917, 'breath_nostop', 0), + (1521, 10918, 'breathweapon', 0), + (1522, 10919, 'bs_bull_form_01_snd', 0), + (1523, 10920, 'bs_cast_armpush_snd', 0), + (1524, 10921, 'bs_hooves_snd', 0), + (1525, 10922, 'bs_makebull_tone_snd', 0), + (1526, 10923, 'bubbles01', 0), + (1527, 10924, 'burn', 0), + (1528, 10925, 'burst_sound_01', 0), + (1529, 10926, 'bye', 0), + (1530, 10927, 'c', 0), + (1531, 10928, 'cache_state0', 0), + (1532, 10929, 'cache_state1', 0), + (1533, 10930, 'cache_state2', 0), + (1534, 10931, 'cached_state0', 0), + (1535, 10932, 'cached_state1', 0), + (1536, 10933, 'cactus_spiney_sound', 0), + (1537, 10934, 'candle01', 0), + (1538, 10935, 'candle02', 0), + (1539, 10936, 'candle03', 0), + (1540, 10937, 'candle04', 0), + (1541, 10938, 'candle_flair01', 0), + (1542, 10939, 'candle_flair02', 0), + (1543, 10940, 'candle_flair03', 0), + (1544, 10941, 'candle_smoke01', 0), + (1545, 10942, 'candle_smoke02', 0), + (1546, 10943, 'candle_smoke03', 0), + (1547, 10944, 'carpet_enter', 0), + (1548, 10945, 'carpet_exit', 0), + (1549, 10946, 'carpet_fall', 0), + (1550, 10947, 'carpet_idle', 0), + (1551, 10948, 'carpet_jump', 0), + (1552, 10949, 'carpet_land', 0), + (1553, 10950, 'carpet_run', 0), + (1554, 10951, 'carpet_walk', 0), + (1555, 10952, 'cast01', 0), + (1556, 10953, 'cast4', 0), + (1557, 10954, 'cast_01lp_snd', 0), + (1558, 10955, 'cast_1', 0), + (1559, 10956, 'cast_10', 0), + (1560, 10957, 'cast_11', 0), + (1561, 10958, 'cast_12', 0), + (1562, 10959, 'cast_2', 0), + (1563, 10960, 'cast_3', 0), + (1564, 10961, 'cast_4', 0), + (1565, 10962, 'cast_6', 0), + (1566, 10963, 'cast_7', 0), + (1567, 10964, 'cast_8', 0), + (1568, 10965, 'cast_9', 0), + (1569, 10966, 'cast_aoe_beneficial_end', 0), + (1570, 10967, 'cast_aoe_beneficial_loop', 0), + (1571, 10968, 'cast_aoe_beneficial_start', 0), + (1572, 10969, 'cast_aoe_detrimental_end', 0), + (1573, 10970, 'cast_aoe_detrimental_loop', 0), + (1574, 10971, 'cast_aoe_detrimental_start', 0), + (1575, 10973, 'cast_aoe_invocation_end', 0), + (1576, 10974, 'cast_aoe_invocation_loop', 0), + (1577, 10975, 'cast_aoe_invocation_start', 0), + (1578, 10976, 'cast_aoe_wand_end', 0), + (1579, 10977, 'cast_aoe_wand_loop', 0), + (1580, 10978, 'cast_aoe_wand_start', 0), + (1581, 10979, 'cast_armor_01_snd', 0), + (1582, 10980, 'cast_attack02', 0), + (1583, 10981, 'cast_backgroundsparkle_snd', 0), + (1584, 10982, 'cast_bard_drum_end', 0), + (1585, 10983, 'cast_bard_drum_loop', 0), + (1586, 10985, 'cast_bard_flute_end', 0), + (1587, 10986, 'cast_bard_flute_loop', 0), + (1588, 10988, 'cast_bard_stringed_end', 0), + (1589, 10989, 'cast_bard_stringed_loop', 0), + (1590, 10990, 'cast_bard_stringed_start', 0), + (1591, 10991, 'cast_bard_vocal_end', 0), + (1592, 10992, 'cast_bard_vocal_loop', 0), + (1593, 10994, 'cast_charge_wind_01_sound', 0), + (1594, 10995, 'cast_chargeswordglint_sound', 0), + (1595, 10996, 'cast_clowhand_sound_01', 0), + (1596, 10997, 'cast_clowhand_sound_02', 0), + (1597, 10998, 'cast_clowhand_sound_03', 0), + (1598, 10999, 'cast_deepbreath', 0), + (1599, 11000, 'cast_distort_lefthand', 0), + (1600, 11001, 'cast_distort_right_foot_ws', 0), + (1601, 11002, 'cast_distort_righthand', 0), + (1602, 11003, 'cast_drake_fire_breath', 0), + (1603, 11004, 'cast_drone_01_snd', 0), + (1604, 11005, 'cast_drone_02_snd', 0), + (1605, 11006, 'cast_drone_snd', 0), + (1606, 11007, 'cast_drone_sound', 0), + (1607, 11008, 'cast_dustpuff_lefthand', 0), + (1608, 11009, 'cast_dustpuff_righthand', 0), + (1609, 11010, 'cast_elec_feet_green', 0), + (1610, 11011, 'cast_elec_hands_four', 0), + (1611, 11012, 'cast_elec_hands_four_up', 0), + (1612, 11013, 'cast_elec_hands_up', 0), + (1613, 11014, 'cast_end_sound', 0), + (1614, 11015, 'cast_endbang2_snd', 0), + (1615, 11016, 'cast_endbang_snd', 0), + (1616, 11017, 'cast_endsparkle_snd', 0), + (1617, 11018, 'cast_endthunder_snd', 0), + (1618, 11019, 'cast_es_arches_01_snd', 0), + (1619, 11020, 'cast_fast', 0), + (1620, 11021, 'cast_force_snd', 0), + (1621, 11022, 'cast_glowhand__sound_02', 0), + (1622, 11023, 'cast_glowhand_sound_01', 0), + (1623, 11024, 'cast_glowhand_sound_03', 0), + (1624, 11025, 'cast_glowhand_sound_04', 0), + (1625, 11026, 'cast_glowhand_sound_05', 0), + (1626, 11027, 'cast_glowhand_sound_06', 0), + (1627, 11028, 'cast_gsswipe_01_snd', 0), + (1628, 11029, 'cast_gsswipe_02_snd', 0), + (1629, 11030, 'cast_gsswipe_03_snd', 0), + (1630, 11031, 'cast_hands_elec_nightblood', 0), + (1631, 11032, 'cast_handswipe_snd', 0), + (1632, 11033, 'cast_howlverb_sound', 0), + (1633, 11034, 'cast_hrb_choral_snd', 0), + (1634, 11035, 'cast_hrb_rune_snd', 0), + (1635, 11036, 'cast_ice_laser_breath', 0), + (1636, 11037, 'cast_kickcharge_sound', 0), + (1637, 11038, 'cast_laser_aoe', 0), + (1638, 11039, 'cast_lava_rocks', 0), + (1639, 11040, 'cast_lense01', 0), + (1640, 11041, 'cast_lense02', 0), + (1641, 11042, 'cast_light_sound', 0), + (1642, 11043, 'cast_mage_aggro_01', 0), + (1643, 11044, 'cast_mage_aggro_02', 0), + (1644, 11045, 'cast_mage_buff_01', 0), + (1645, 11046, 'cast_mage_buff_02', 0), + (1646, 11047, 'cast_mage_ddam_01', 0), + (1647, 11048, 'cast_mage_ddam_02', 0), + (1648, 11049, 'cast_mage_qa_01', 0), + (1649, 11050, 'cast_mage_qa_02', 0), + (1650, 11051, 'cast_mage_qa_03', 0), + (1651, 11052, 'cast_mage_quickzap_01', 0), + (1652, 11053, 'cast_mage_quickzap_02', 0), + (1653, 11054, 'cast_mage_ready', 0), + (1654, 11055, 'cast_mendhands_01', 0), + (1655, 11056, 'cast_mendsparkleball_01', 0), + (1656, 11057, 'cast_mendsparkleball_02', 0), + (1657, 11058, 'cast_mendtrail_01', 0), + (1658, 11059, 'cast_mendtrails_01', 0), + (1659, 11060, 'cast_mendtwinkles_01', 0), + (1660, 11061, 'cast_new_qa_part1', 0), + (1661, 11062, 'cast_new_qa_part2', 0), + (1662, 11063, 'cast_new_qa_part3', 0), + (1663, 11064, 'cast_pdswipe_01_snd', 0), + (1664, 11065, 'cast_pfx_magenuke_head', 0), + (1665, 11066, 'cast_pillar_sound_01', 0), + (1666, 11067, 'cast_pillar_sound_02', 0), + (1667, 11068, 'cast_pillar_sound_03', 0), + (1668, 11069, 'cast_pillar_sound_04', 0), + (1669, 11070, 'cast_pillar_sound_05', 0), + (1670, 11071, 'cast_pillars', 0), + (1671, 11074, 'cast_priest_aggro_01', 0), + (1672, 11075, 'cast_priest_aggro_02', 0), + (1673, 11076, 'cast_priest_buff_01', 0), + (1674, 11077, 'cast_priest_buff_02', 0), + (1675, 11078, 'cast_priest_ddam_01', 0), + (1676, 11079, 'cast_priest_ddam_02', 0), + (1677, 11080, 'cast_priest_floating', 0), + (1678, 11081, 'cast_quickhit_snd', 0), + (1679, 11082, 'cast_ready', 0), + (1680, 11083, 'cast_rune_sound_01', 0), + (1681, 11084, 'cast_rune_sound_02', 0), + (1682, 11085, 'cast_rune_sound_03', 0), + (1683, 11086, 'cast_rune_sound_04', 0), + (1684, 11087, 'cast_shield_grow', 0), + (1685, 11088, 'cast_shortbreath', 0), + (1686, 11089, 'cast_sneak_sound', 0), + (1687, 11090, 'cast_spark_burst_righthand', 0), + (1688, 11091, 'cast_sparklewave_01_snd', 0), + (1689, 11092, 'cast_sparklewave_02_snd', 0), + (1690, 11093, 'cast_sparklewave_03_snd', 0), + (1691, 11094, 'cast_sparklewave_04_snd', 0), + (1692, 11095, 'cast_sparklewave_05_snd', 0), + (1693, 11096, 'cast_startlow_snd', 0), + (1694, 11097, 'cast_startthunder_snd', 0), + (1695, 11098, 'cast_steam_breath', 0), + (1696, 11099, 'cast_summon_end', 0), + (1697, 11100, 'cast_summon_loop', 0), + (1698, 11101, 'cast_summon_start', 0), + (1699, 11102, 'cast_swipe01_snd', 0), + (1700, 11103, 'cast_swipe02_snd', 0), + (1701, 11104, 'cast_target_det_01', 0), + (1702, 11105, 'cast_target_det_02', 0), + (1703, 11106, 'cast_target_det_03', 0), + (1704, 11107, 'cast_target_detrimental_01', 0), + (1705, 11108, 'cast_target_detrimental_02', 0), + (1706, 11109, 'cast_targeted_benefical_end', 0), + (1707, 11110, 'cast_targeted_benefical_loop', 0), + (1708, 11111, 'cast_targeted_benefical_start', 0), + (1709, 11112, 'cast_targeted_beneficial_end', 0), + (1710, 11113, 'cast_targeted_beneficial_loop', 0), + (1711, 11114, 'cast_targeted_beneficial_start', 0), + (1712, 11115, 'cast_targeted_detrimental_end', 0), + (1713, 11116, 'cast_targeted_detrimental_loop', 0), + (1714, 11117, 'cast_targeted_detrimental_start', 0), + (1715, 11118, 'cast_targeted_detrimental_start2', 0), + (1716, 11119, 'cast_targeted_wand_end', 0), + (1717, 11120, 'cast_targeted_wand_loop', 0), + (1718, 11121, 'cast_targeted_wand_start', 0), + (1719, 11122, 'cast_tarranax_breath', 0), + (1720, 11123, 'cast_tarranax_breath_path', 0), + (1721, 11124, 'cast_tarranax_breath_start', 0), + (1722, 11125, 'cast_thunder_snd', 0), + (1723, 11126, 'cast_trail_leftarm_bright', 0), + (1724, 11127, 'cast_trail_rightarm_bright', 0), + (1725, 11128, 'cast_undertone_snd', 0), + (1726, 11129, 'cast_venekors_fire_breath', 0), + (1727, 11130, 'cast_wildcharge_sound', 0), + (1728, 11131, 'cast_wildswingwindsword_sound', 0), + (1729, 11132, 'cast_wuoshi_choking_vines_aoe', 0), + (1730, 11133, 'cast_wuoshi_fire_and_ice_aoe', 0), + (1731, 11134, 'cast_wuoshi_tree_morph', 0), + (1732, 11135, 'cast_zombie_scare', 0), + (1733, 11136, 'cchains_resultchains_snd', 0), + (1734, 11137, 'cchains_sing_snd', 0), + (1735, 11138, 'cf_coins_bounce_background_snd', 0), + (1736, 11139, 'cf_coins_bounce_bkgrnd_short_snd', 0), + (1737, 11140, 'cf_coins_lots_snd', 0), + (1738, 11141, 'cf_coins_many_snd', 0), + (1739, 11142, 'cf_coinsfall_snd', 0), + (1740, 11143, 'charge', 0), + (1741, 11144, 'charge_burst_snd', 0), + (1742, 11145, 'charge_rumble_snd', 0), + (1743, 11146, 'charge_up', 0), + (1744, 11147, 'charge_whoosh_snd', 0), + (1745, 11148, 'charm_cast_snd', 0), + (1746, 11149, 'charm_flutes_snd', 0), + (1747, 11150, 'cheer', 0), + (1748, 11151, 'chimney01', 0), + (1749, 11152, 'chuckle', 0), + (1750, 11153, 'ciseme_m', 0), + (1751, 11154, 'cl_catglow_snd', 0), + (1752, 11155, 'clear_target_tigger', 0), + (1753, 11156, 'clear_target_trigger', 0), + (1754, 11157, 'climbing', 0), + (1755, 11158, 'climbing_chainmail_stone', 0), + (1756, 11159, 'climbing_chainmail_wood', 0), + (1757, 11160, 'climbing_enter_down', 0), + (1758, 11161, 'climbing_exit_up', 0), + (1759, 11162, 'climbing_idle01', 0), + (1760, 11163, 'climbing_leather_stone', 0), + (1761, 11164, 'climbing_leather_wood', 0), + (1762, 11165, 'climbing_metal_stone', 0), + (1763, 11166, 'climbing_metal_wood', 0), + (1764, 11167, 'climbing_ouch', 0), + (1765, 11168, 'closed', 0), + (1766, 11169, 'cloud_group_sound', 0), + (1767, 11170, 'cloud_sound', 0), + (1768, 11171, 'cloud_sound_02', 0), + (1769, 11172, 'cloud_widget', 0), + (1770, 11173, 'cn_ringout_snd', 0), + (1771, 11174, 'cn_strums_snd', 0), + (1772, 11175, 'coals01', 0), + (1773, 11176, 'coals_failure', 0), + (1774, 11177, 'coals_fire_large', 0), + (1775, 11178, 'coals_fire_small', 0), + (1776, 11179, 'coins_and_jewels_pile', 0), + (1777, 11180, 'coins_pile_copper', 0), + (1778, 11181, 'coins_pile_gold', 0), + (1779, 11182, 'coins_pile_silver', 0), + (1780, 11183, 'cold_breath', 0), + (1781, 11184, 'comabt_exit', 0), + (1782, 11185, 'combat', 0), + (1783, 11186, 'combat_backup', 0), + (1784, 11187, 'combat_backup_run', 0), + (1785, 11188, 'combat_enter', 0), + (1786, 11189, 'combat_exit', 0), + (1787, 11190, 'combat_fx', 0), + (1788, 11191, 'combat_idle', 0), + (1789, 11192, 'combat_idle01', 0), + (1790, 11193, 'combat_idle1', 0), + (1791, 11194, 'combat_idle_bark', 0), + (1792, 11195, 'combat_idle_enter', 0), + (1793, 11196, 'combat_idle_jump', 0), + (1794, 11197, 'combat_idle_rhand', 0), + (1795, 11198, 'combat_idle_snap', 0), + (1796, 11199, 'combat_idle_sound01', 0), + (1797, 11200, 'combat_idle_sound02', 0), + (1798, 11201, 'combat_idleflap', 0), + (1799, 11202, 'combat_ouch', 0), + (1800, 11203, 'combat_ouch_sound', 0), + (1801, 11204, 'combat_peace', 0), + (1802, 11205, 'combat_run', 0), + (1803, 11206, 'combat_strafe_left_run', 0), + (1804, 11207, 'combat_strafe_right_run', 0), + (1805, 11208, 'combat_tail', 0), + (1806, 11209, 'combat_tail_cloak', 0), + (1807, 11210, 'combat_turn_left', 0), + (1808, 11211, 'combat_turn_right', 0), + (1809, 11212, 'combat_walk', 0), + (1810, 11213, 'complete', 0), + (1811, 11214, 'confused', 0), + (1812, 11220, 'converse', 0), + (1813, 11221, 'converse_female01', 0), + (1814, 11222, 'converse_female02', 0), + (1815, 11223, 'converse_female03', 0), + (1816, 11224, 'converse_female04', 0), + (1817, 11225, 'converse_female05', 0), + (1818, 11226, 'converse_female06', 0), + (1819, 11227, 'converse_female07', 0), + (1820, 11228, 'converse_female08', 0), + (1821, 11229, 'converse_female09', 0), + (1822, 11230, 'converse_female10', 0), + (1823, 11231, 'converse_female11', 0), + (1824, 11232, 'converse_female12', 0), + (1825, 11233, 'converse_male01', 0), + (1826, 11234, 'converse_male02', 0), + (1827, 11235, 'converse_male03', 0), + (1828, 11236, 'converse_male05', 0), + (1829, 11237, 'converse_male06', 0), + (1830, 11238, 'converse_male07', 0), + (1831, 11239, 'converse_male08', 0), + (1832, 11240, 'converse_male09', 0), + (1833, 11241, 'converse_male10', 0), + (1834, 11242, 'converse_male11', 0), + (1835, 11243, 'cooking_failure', 0), + (1836, 11244, 'cooking_idle', 0), + (1837, 11245, 'cooking_success', 0), + (1838, 11246, 'corpse', 0), + (1839, 11247, 'cos_call_storm_snd', 0), + (1840, 11248, 'cos_storm_space_snd', 0), + (1841, 11249, 'cp_charge_snd', 0), + (1842, 11250, 'cr_choral01_sound', 0), + (1843, 11251, 'cr_choral02_sound', 0), + (1844, 11252, 'cracks', 0), + (1845, 11253, 'crash_enter', 0), + (1846, 11254, 'crash_exit', 0), + (1847, 11255, 'crazy', 0), + (1848, 11256, 'cringe', 0), + (1849, 11257, 'croak_01', 0), + (1850, 11258, 'croak_02', 0), + (1851, 11259, 'croak_03', 0), + (1852, 11260, 'croak_04', 0), + (1853, 11261, 'croak_05', 0), + (1854, 11262, 'croak_06', 0), + (1855, 11263, 'croak_07', 0), + (1856, 11264, 'croak_08', 0), + (1857, 11265, 'croak_09', 0), + (1858, 11266, 'crouch_backup', 0), + (1859, 11267, 'crouch_run', 0), + (1860, 11268, 'crouch_strafe_left', 0), + (1861, 11269, 'crouch_strafe_right', 0), + (1862, 11270, 'crouch_tail', 0), + (1863, 11271, 'crouch_tail_cloak', 0), + (1864, 11272, 'crouch_turn_left', 0), + (1865, 11273, 'crouch_turn_right', 0), + (1866, 11274, 'crouch_walk', 0), + (1867, 11275, 'cry', 0), + (1868, 11276, 'cs_begin_snd', 0), + (1869, 11277, 'cs_cast_lp_snd', 0), + (1870, 11278, 'cs_disco_lp01_snd', 0), + (1871, 11279, 'cs_end_snd', 0), + (1872, 11280, 'cs_ice_crackle_01', 0), + (1873, 11281, 'cs_iceburst_sound', 0), + (1874, 11282, 'cs_icetones_01', 0), + (1875, 11283, 'cs_icewind_sound', 0), + (1876, 11284, 'cs_result_sound', 0), + (1877, 11285, 'curse', 0), + (1878, 11286, 'curtsey', 0), + (1879, 11287, 'cutthroat', 0), + (1880, 11288, 'cv_candle01_snd', 0), + (1881, 11289, 'cv_candle02_snd', 0), + (1882, 11290, 'cv_darkcandle_snd', 0), + (1883, 11291, 'cv_drone_snd', 0), + (1884, 11292, 'cv_handwave01_snd', 0), + (1885, 11293, 'cv_handwave02_snd', 0), + (1886, 11294, 'damage01', 0), + (1887, 11295, 'damage02', 0), + (1888, 11296, 'damage03', 0), + (1889, 11297, 'damage_small', 0), + (1890, 11298, 'dance', 0), + (1891, 11299, 'dance01', 0), + (1892, 11300, 'dark_smoke', 0), + (1893, 11301, 'dark_smoke_up', 0), + (1894, 11302, 'db_drone_sound', 0), + (1895, 11303, 'db_electricend_sound', 0), + (1896, 11304, 'db_swordstickdirt_sound', 0), + (1897, 11305, 'dbb_dragonbreath_snd', 0), + (1898, 11306, 'dbb_dragonbreathhiwav_snd', 0), + (1899, 11307, 'dcs_scarab_lp_snd', 0), + (1900, 11308, 'dcspid_spider_snd', 0), + (1901, 11309, 'dead_dark_smoke', 0), + (1902, 11310, 'dead_dark_smoke_head', 0), + (1903, 11311, 'dead_enter_death02', 0), + (1904, 11312, 'dead_enter_death03', 0), + (1905, 11313, 'dead_enter_fall', 0), + (1906, 11314, 'dead_enter_scream', 0), + (1907, 11315, 'dead_enter_sound', 0), + (1908, 11316, 'dead_entertiming_a', 0), + (1909, 11317, 'dead_entertiming_b', 0), + (1910, 11318, 'dead_entertiming_c', 0), + (1911, 11319, 'dead_entertiming_c2', 0), + (1912, 11320, 'dead_entertiming_c3', 0), + (1913, 11321, 'dead_entertiming_d', 0), + (1914, 11322, 'dead_entertiming_e', 0), + (1915, 11323, 'dead_exit', 0), + (1916, 11324, 'dead_fall', 0), + (1917, 11325, 'dead_scream01', 0), + (1918, 11326, 'dead_scream02', 0), + (1919, 11327, 'dead_tail', 0), + (1920, 11328, 'death_fall01', 0), + (1921, 11329, 'death_fall02', 0), + (1922, 11330, 'default', 0), + (1923, 11331, 'defensive_buff', 0), + (1924, 11332, 'definsive_buff', 0), + (1925, 11333, 'descend_sound_01', 0), + (1926, 11334, 'design_fear_gate_flash', 0), + (1927, 11335, 'design_fireflies', 0), + (1928, 11336, 'design_fireflies_evil', 0), + (1929, 11337, 'design_hearts_all', 0), + (1930, 11338, 'design_hearts_big_all', 0), + (1931, 11339, 'design_hearts_big_blue', 0), + (1932, 11340, 'design_hearts_big_purple', 0), + (1933, 11341, 'design_hearts_big_red', 0), + (1934, 11342, 'design_hearts_blue', 0), + (1935, 11343, 'design_hearts_purple', 0), + (1936, 11344, 'design_hearts_red', 0), + (1937, 11345, 'design_hummingbirds', 0), + (1938, 11346, 'design_portal_to_hell', 0), + (1939, 11347, 'design_result_backdraft', 0), + (1940, 11348, 'design_result_cyclone_sand', 0), + (1941, 11349, 'design_result_cyclone_sand_ccw', 0), + (1942, 11350, 'design_result_freeport_pit_fire_spurt', 0), + (1943, 11351, 'design_result_fungusman_poked', 0), + (1944, 11352, 'design_result_halloween_fog', 0), + (1945, 11353, 'design_result_light_shafts', 0), + (1946, 11354, 'design_result_sparkle_scan_up', 0), + (1947, 11355, 'design_result_teleporter', 0), + (1948, 11356, 'design_smoke_jet_brown', 0), + (1949, 11357, 'design_smoke_jet_brown_int', 0), + (1950, 11358, 'design_smoke_jet_gray', 0), + (1951, 11359, 'design_smoke_jet_gray_int', 0), + (1952, 11360, 'design_smoke_jet_white', 0), + (1953, 11361, 'design_smoke_jet_white_int', 0), + (1954, 11362, 'design_sound_blow', 0), + (1955, 11363, 'design_sound_bubble', 0), + (1956, 11364, 'design_sound_steam', 0), + (1957, 11365, 'design_steamfont_bubbles_ripples', 0), + (1958, 11366, 'design_steamfont_rainbow', 0), + (1959, 11367, 'design_steamfont_slow_steam', 0), + (1960, 11368, 'design_steamfont_steam_column', 0), + (1961, 11369, 'design_steamfont_steam_tube_a', 0), + (1962, 11370, 'design_steamfont_steam_tube_b', 0), + (1963, 11371, 'design_steamfont_water_column', 0), + (1964, 11372, 'design_teleport_spires', 0), + (1965, 11373, 'design_trap_spear', 0), + (1966, 11374, 'design_trap_weight', 0), + (1967, 11375, 'design_vision_plane_druid_ring', 0), + (1968, 11376, 'design_vortex_portal_blue', 0), + (1969, 11377, 'design_vortex_portal_green', 0), + (1970, 11378, 'design_vortex_portal_oval_blue', 0), + (1971, 11379, 'destination', 0), + (1972, 11380, 'destroy', 0), + (1973, 11381, 'destroyed', 0), + (1974, 11382, 'df_charge_sound', 0), + (1975, 11383, 'df_hit_sound', 0), + (1976, 11384, 'df_impact_sound', 0), + (1977, 11385, 'df_vortex_sound', 0), + (1978, 11386, 'dieyell', 0), + (1979, 11387, 'dig', 0), + (1980, 11388, 'dig_enter', 0), + (1981, 11389, 'dig_exit', 0), + (1982, 11390, 'dig_loop', 0), + (1983, 11391, 'ding', 0), + (1984, 11392, 'disarm_both', 0), + (1985, 11393, 'disarm_left', 0), + (1986, 11394, 'disarm_right', 0), + (1987, 11395, 'disease', 0), + (1988, 11396, 'dm_backgroundexplosions_snd', 0), + (1989, 11397, 'dm_dragonform_snd', 0), + (1990, 11398, 'dm_energyforce_snd', 0), + (1991, 11399, 'dodge', 0), + (1992, 11400, 'dodge01', 0), + (1993, 11401, 'dodge02', 0), + (1994, 11402, 'dodge03', 0), + (1995, 11403, 'dodge1', 0), + (1996, 11404, 'dodge2', 0), + (1997, 11405, 'dodge3', 0), + (1998, 11406, 'dodge_backhand', 0), + (1999, 11407, 'dodge_down', 0), + (2000, 11408, 'dodge_forehand', 0), + (2001, 11409, 'dodge_thrust', 0), + (2002, 11410, 'doh', 0), + (2003, 11411, 'door_move', 0), + (2004, 11412, 'door_slam', 0), + (2005, 11413, 'doorcorner01', 0), + (2006, 11414, 'doorcorner02', 0), + (2007, 11415, 'doubletake', 0), + (2008, 11416, 'dpsd_swordshatter.wav_snd', 0), + (2009, 11417, 'dragon_e3demo', 0), + (2010, 11418, 'draw_metal_weapon_snd', 0), + (2011, 11419, 'draw_weapon_snd', 0), + (2012, 11420, 'draw_weapon_trigger', 0), + (2013, 11421, 'drinking_failure', 0), + (2014, 11422, 'drinking_idle', 0), + (2015, 11423, 'drinking_success', 0), + (2016, 11424, 'drip01', 0), + (2017, 11425, 'drip02', 0), + (2018, 11426, 'dronewolf_sound', 0), + (2019, 11427, 'drum_drone_snd', 0), + (2020, 11428, 'drum_drum_snd', 0), + (2021, 11429, 'ds_dragonspawn_sound', 0), + (2022, 11430, 'ds_gashiss_snd', 0), + (2023, 11433, 'dual_wield_attack_recoil', 0), + (2024, 11434, 'dual_wield_attack_recoil01', 0), + (2025, 11435, 'dual_wield_attack_recoil02', 0), + (2026, 11436, 'dual_wield_attack_recoil03', 0), + (2027, 11437, 'dual_wield_backup', 0), + (2028, 11438, 'dual_wield_defensive_buff', 0), + (2029, 11439, 'dual_wield_dodge_backhand', 0), + (2030, 11440, 'dual_wield_dodge_down', 0), + (2031, 11441, 'dual_wield_dodge_forehand', 0), + (2032, 11442, 'dual_wield_dodge_thrust', 0), + (2033, 11443, 'dual_wield_enter', 0), + (2034, 11444, 'dual_wield_exit', 0), + (2035, 11445, 'dual_wield_feint', 0), + (2036, 11446, 'dual_wield_knockdowntoknees', 0), + (2037, 11447, 'dual_wield_knockedtoback', 0), + (2038, 11448, 'dual_wield_knockedtoback_getup', 0), + (2039, 11449, 'dual_wield_offensive_buff', 0), + (2040, 11450, 'dual_wield_ouch_backhand', 0), + (2041, 11451, 'dual_wield_ouch_down', 0), + (2042, 11452, 'dual_wield_ouch_forehand', 0), + (2043, 11453, 'dual_wield_ouch_thrust', 0), + (2044, 11454, 'dual_wield_parry_backhand', 0), + (2045, 11455, 'dual_wield_parry_down', 0), + (2046, 11456, 'dual_wield_parry_forehand', 0), + (2047, 11457, 'dual_wield_parry_thrust', 0), + (2048, 11458, 'dual_wield_strafe_left', 0), + (2049, 11459, 'dual_wield_strafe_right', 0), + (2050, 11460, 'dual_wield_super_buff', 0), + (2051, 11461, 'dual_wield_taunt_combat_art', 0), + (2052, 11462, 'dual_wield_walk', 0), + (2053, 11463, 'duck', 0), + (2054, 11464, 'duck_short', 0), + (2055, 11465, 'dust_base', 0), + (2056, 11466, 'dust_holster_center', 0), + (2057, 11467, 'dust_holster_left', 0), + (2058, 11468, 'dust_holster_right', 0), + (2059, 11469, 'dust_leftfoot', 0), + (2060, 11470, 'dust_lefttfoot', 0), + (2061, 11471, 'dust_puff', 0), + (2062, 11472, 'dust_rightfoot', 0), + (2063, 11473, 'dust_righttfoot', 0), + (2064, 11474, 'dw_snap_snd', 0), + (2065, 11475, 'e', 0), + (2066, 11476, 'eat', 0), + (2067, 11477, 'ef_cast_chains_lp_snd', 0), + (2068, 11478, 'ef_chains_snd', 0), + (2069, 11479, 'elbow', 0), + (2070, 11480, 'electric_shackles_softer_sound', 0), + (2071, 11481, 'electric_shackles_sound', 0), + (2072, 11482, 'end_snarl_sound', 0), + (2073, 11483, 'endsplat', 0), + (2074, 11484, 'enter', 0), + (2075, 11485, 'es_flutecast_sound', 0), + (2076, 11486, 'es_fluteresult_sound', 0), + (2077, 11487, 'ew_castlp_snd', 0), + (2078, 11488, 'explode01', 0), + (2079, 11489, 'explode02', 0), + (2080, 11490, 'explode03', 0), + (2081, 11491, 'explode_big', 0), + (2082, 11492, 'explosion', 0), + (2083, 11493, 'eye_beam', 0), + (2084, 11494, 'eye_beam_red_blue', 0), + (2085, 11495, 'eyes', 0), + (2086, 11496, 'f', 0), + (2087, 11497, 'face_combat', 0), + (2088, 11498, 'face_idle', 0), + (2089, 11499, 'facial_frown', 0), + (2090, 11500, 'facial_smile', 0), + (2091, 11501, 'fae_dance_spark_sphere', 0), + (2092, 11502, 'fae_silvani_transformation', 0), + (2093, 11503, 'failure01', 0), + (2094, 11504, 'failure02', 0), + (2095, 11505, 'fall_enter', 0), + (2096, 11506, 'fall_idle', 0), + (2097, 11507, 'fall_moving', 0), + (2098, 11508, 'fall_sequence', 0), + (2099, 11509, 'fb_froggy01_snd', 0), + (2100, 11510, 'fb_froggyform_snd', 0), + (2101, 11511, 'fb_ice_explode_sound', 0), + (2102, 11512, 'fbb_charge_snd', 0), + (2103, 11513, 'fbb_crunches_snd', 0), + (2104, 11514, 'fbb_explode_snd', 0), + (2105, 11515, 'fbd_charge01_snd', 0), + (2106, 11516, 'fbd_impact_snd', 0), + (2107, 11517, 'fbd_precharge_snd', 0), + (2108, 11518, 'fd_distort02_snd', 0), + (2109, 11519, 'fd_distort_end_snd', 0), + (2110, 11520, 'fd_distort_low_snd', 0), + (2111, 11521, 'fd_distort_snd', 0), + (2112, 11522, 'feint', 0), + (2113, 11523, 'ff_explode_lp_snd', 0), + (2114, 11524, 'ff_lasercloud_lp_snd', 0), + (2115, 11525, 'fgdt_dust_snd', 0), + (2116, 11526, 'fh_cast_sparkles_snd', 0), + (2117, 11527, 'fh_end_body_fall_snd', 0), + (2118, 11528, 'fh_flames_snd', 0), + (2119, 11529, 'fh_hammer_appear_02_snd', 0), + (2120, 11530, 'fh_hammer_appear_snd', 0), + (2121, 11531, 'fh_hammer_impact_snd', 0), + (2122, 11532, 'fh_hammer_whoosh_snd', 0), + (2123, 11533, 'fire', 0), + (2124, 11534, 'fire01', 0), + (2125, 11535, 'fire02', 0), + (2126, 11536, 'fire_breath', 0), + (2127, 11537, 'fire_loop', 0), + (2128, 11538, 'fireblast', 0), + (2129, 11539, 'fishing_cast', 0), + (2130, 11540, 'fishing_fight', 0), + (2131, 11541, 'fishing_reel_in', 0), + (2132, 11542, 'fizzle', 0), + (2133, 11543, 'fkd_impact_sound', 0), + (2134, 11544, 'fkd_kneebreak_sound', 0), + (2135, 11545, 'fl_bckgrnd_snd', 0), + (2136, 11546, 'fl_lash_snd', 0), + (2137, 11547, 'fl_whiphit_snd', 0), + (2138, 11548, 'flames_sound', 0), + (2139, 11549, 'flash_blue', 0), + (2140, 11550, 'flash_green', 0), + (2141, 11551, 'flash_red', 0), + (2142, 11552, 'flash_yellow', 0), + (2143, 11553, 'flee', 0), + (2144, 11554, 'flex', 0), + (2145, 11555, 'flight_path', 0), + (2146, 11556, 'flingpoo', 0), + (2147, 11557, 'flirt', 0), + (2148, 11558, 'flustered', 0), + (2149, 11559, 'fly', 0), + (2150, 11560, 'fly_attack', 0), + (2151, 11561, 'fly_attack_bite', 0), + (2152, 11562, 'fly_attack_breath', 0), + (2153, 11563, 'fly_attack_breath_arc', 0), + (2154, 11564, 'fly_dive', 0), + (2155, 11565, 'fly_glide', 0), + (2156, 11566, 'fly_glide2', 0), + (2157, 11567, 'fly_idle', 0), + (2158, 11568, 'fly_in', 0), + (2159, 11569, 'fly_ouch', 0), + (2160, 11570, 'fly_run', 0), + (2161, 11571, 'fmba_breathattack_snd', 0), + (2162, 11572, 'foostep_trigger', 0), + (2163, 11573, 'foot_dust_left', 0), + (2164, 11574, 'foot_dust_right', 0), + (2165, 11575, 'foot_shake', 0), + (2166, 11576, 'footste_trigger', 0), + (2167, 11577, 'footstep', 0), + (2168, 11578, 'footstep_chainmail_carpet', 0), + (2169, 11579, 'footstep_chainmail_dirt', 0), + (2170, 11580, 'footstep_chainmail_grass', 0), + (2171, 11581, 'footstep_chainmail_gravel', 0), + (2172, 11582, 'footstep_chainmail_ice', 0), + (2173, 11583, 'footstep_chainmail_metal', 0), + (2174, 11584, 'footstep_chainmail_mud', 0), + (2175, 11585, 'footstep_chainmail_sand', 0), + (2176, 11586, 'footstep_chainmail_snow', 0), + (2177, 11587, 'footstep_chainmail_stone', 0), + (2178, 11588, 'footstep_chainmail_water', 0), + (2179, 11589, 'footstep_chainmail_wood', 0), + (2180, 11590, 'footstep_leather_carpet', 0), + (2181, 11591, 'footstep_leather_dirt', 0), + (2182, 11592, 'footstep_leather_grass', 0), + (2183, 11593, 'footstep_leather_gravel', 0), + (2184, 11594, 'footstep_leather_ice', 0), + (2185, 11595, 'footstep_leather_metal', 0), + (2186, 11596, 'footstep_leather_mud', 0), + (2187, 11597, 'footstep_leather_sand', 0), + (2188, 11598, 'footstep_leather_snow', 0), + (2189, 11599, 'footstep_leather_stone', 0), + (2190, 11600, 'footstep_leather_water', 0), + (2191, 11601, 'footstep_leather_wood', 0), + (2192, 11602, 'footstep_metal_carpet', 0), + (2193, 11603, 'footstep_metal_dirt', 0), + (2194, 11604, 'footstep_metal_grass', 0), + (2195, 11605, 'footstep_metal_gravel', 0), + (2196, 11606, 'footstep_metal_ice', 0), + (2197, 11607, 'footstep_metal_metal', 0), + (2198, 11608, 'footstep_metal_mud', 0), + (2199, 11609, 'footstep_metal_sand', 0), + (2200, 11610, 'footstep_metal_snow', 0), + (2201, 11611, 'footstep_metal_stone', 0), + (2202, 11612, 'footstep_metal_water', 0), + (2203, 11613, 'footstep_metal_wood', 0), + (2204, 11614, 'footstep_trigger', 0), + (2205, 11615, 'forest_flare', 0), + (2206, 11616, 'forestry_chopping', 0), + (2207, 11617, 'four_rings', 0), + (2208, 11618, 'four_rings_fail', 0), + (2209, 11619, 'frog_attack_01', 0), + (2210, 11620, 'frog_hit', 0), + (2211, 11621, 'frog_ouch', 0), + (2212, 11622, 'frog_squish_01', 0), + (2213, 11623, 'frog_squish_02', 0), + (2214, 11624, 'frog_squish_03', 0), + (2215, 11625, 'frog_tongue_01', 0), + (2216, 11626, 'frog_tongueslime_01', 0), + (2217, 11627, 'frog_whoosh_01', 0), + (2218, 11628, 'frustrated', 0), + (2219, 11629, 'fs_cast_flame_snd', 0), + (2220, 11630, 'fs_endfire_snd', 0), + (2221, 11631, 'fs_firefall_snd', 0), + (2222, 11632, 'fs_whoosh_snd', 0), + (2223, 11633, 'fullcurtsey', 0), + (2224, 11634, 'fusion_bubbly_snd', 0), + (2225, 11635, 'fusion_cast_snd', 0), + (2226, 11636, 'gc_boneburs_snd', 0), + (2227, 11637, 'gc_castcharge_snd', 0), + (2228, 11638, 'gc_result_snd', 0), + (2229, 11639, 'gc_screams_snd', 0), + (2230, 11640, 'gem_glow', 0), + (2231, 11641, 'gemsparkle', 0), + (2232, 11642, 'gemsparkle_fail1', 0), + (2233, 11643, 'gemsparkle_fail2', 0), + (2234, 11644, 'gemsparkle_go', 0), + (2235, 11645, 'ghost_carpet', 0), + (2236, 11646, 'ghost_die', 0), + (2237, 11647, 'ghost_loop', 0), + (2238, 11648, 'giggle', 0), + (2239, 11649, 'glare', 0), + (2240, 11650, 'glide', 0), + (2241, 11651, 'glow', 0), + (2242, 11652, 'glow_top', 0), + (2243, 11653, 'go', 0), + (2244, 11654, 'go_down', 0), + (2245, 11655, 'green_fire', 0), + (2246, 11656, 'green_smoke', 0), + (2247, 11657, 'griffin_idle', 0), + (2248, 11658, 'griffin_run', 0), + (2249, 11659, 'griffin_walk', 0), + (2250, 11660, 'group_chargeswordglint_sound', 0), + (2251, 11661, 'group_cloud_sound', 0), + (2252, 11662, 'group_electricend_sound', 0), + (2253, 11663, 'grumble', 0), + (2254, 11664, 'gutcramp', 0), + (2255, 11665, 'gw_chargeup_snd', 0), + (2256, 11666, 'gw_grantwish_snd', 0), + (2257, 11667, 'gw_impact_sound', 0), + (2258, 11668, 'happy', 0), + (2259, 11669, 'harpy_fire_snd', 0), + (2260, 11670, 'harpy_spin_snd', 0), + (2261, 11671, 'haste_sparkles_snd', 0), + (2262, 11672, 'haste_swirl_snd', 0), + (2263, 11673, 'haste_swords_snd', 0), + (2264, 11674, 'head_tracking_off_trigger', 0), + (2265, 11675, 'hearnoevil', 0), + (2266, 11676, 'heartattack', 0), + (2267, 11677, 'heat_shimmer', 0), + (2268, 11678, 'heavydamage_enter', 0), + (2269, 11679, 'heavydamage_idle', 0), + (2270, 11680, 'heckno', 0), + (2271, 11681, 'heelclick', 0), + (2272, 11682, 'hello', 0), + (2273, 11683, 'heroic_sound', 0), + (2274, 11684, 'hide', 0), + (2275, 11685, 'hide_melee_projectile_trigger', 0), + (2276, 11686, 'hit_02', 0), + (2277, 11687, 'hit_chainmail_snd', 0), + (2278, 11688, 'hit_cloth_snd', 0), + (2279, 11689, 'hit_leather_snd', 0), + (2280, 11690, 'hit_metal_chainmail_snd', 0), + (2281, 11691, 'hit_metal_cloth_snd', 0), + (2282, 11692, 'hit_metal_leather_snd', 0), + (2283, 11693, 'hit_metal_metal_snd', 0), + (2284, 11694, 'hit_metal_skin_snd', 0), + (2285, 11695, 'hit_metal_snd', 0), + (2286, 11696, 'hit_shake', 0), + (2287, 11697, 'hit_skin_chainmail_snd', 0), + (2288, 11698, 'hit_skin_cloth_snd', 0), + (2289, 11699, 'hit_skin_leather_snd', 0), + (2290, 11700, 'hit_skin_metal_snd', 0), + (2291, 11701, 'hit_skin_skin_snd', 0), + (2292, 11702, 'hit_skin_snd', 0), + (2293, 11703, 'hit_snd', 0), + (2294, 11704, 'hit_target_tigger', 0), + (2295, 11705, 'hit_target_trigger', 0), + (2296, 11706, 'hit_wood_chainmail_snd', 0), + (2297, 11707, 'hit_wood_cloth_snd', 0), + (2298, 11708, 'hit_wood_leather_snd', 0), + (2299, 11709, 'hit_wood_metal_snd', 0), + (2300, 11710, 'hit_wood_skin_snd', 0), + (2301, 11711, 'hitonhead_sound', 0), + (2302, 11712, 'horse_fall', 0), + (2303, 11713, 'horse_jump', 0), + (2304, 11714, 'horse_land', 0), + (2305, 11715, 'horse_run', 0), + (2306, 11716, 'horse_tail', 0), + (2307, 11717, 'horse_walk', 0), + (2308, 11718, 'howl', 0), + (2309, 11719, 'hr_ghost_gallop_snd', 0), + (2310, 11720, 'hr_whiney_snd', 0), + (2311, 11721, 'hrb_endruneblur_sound', 0), + (2312, 11722, 'hro_heal_snd', 0), + (2313, 11723, 'hro_runeorbit_snd', 0), + (2314, 11724, 'hungry', 0), + (2315, 11725, 'ic_fragments_snd', 0), + (2316, 11726, 'ic_ice_bkgrnd_sound', 0), + (2317, 11727, 'ic_ice_spike_sound', 0), + (2318, 11728, 'idle03', 0), + (2319, 11729, 'idle04', 0), + (2320, 11730, 'idle_01', 0), + (2321, 11731, 'idle_bark', 0), + (2322, 11732, 'idle_break', 0), + (2323, 11733, 'idle_e3', 0), + (2324, 11734, 'idle_pant', 0), + (2325, 11735, 'idle_sniff', 0), + (2326, 11736, 'idle_snort', 0), + (2327, 11737, 'idle_static', 0), + (2328, 11738, 'idle_step', 0), + (2329, 11739, 'idle_vocal', 0), + (2330, 11740, 'idletiming_a', 0), + (2331, 11741, 'idletiming_b', 0), + (2332, 11742, 'idletiming_c', 0), + (2333, 11743, 'idletiming_d', 0), + (2334, 11744, 'idletiming_e', 0), + (2335, 11745, 'idletiming_g', 0), + (2336, 11746, 'idletiming_h', 0), + (2337, 11747, 'idletiming_i', 0), + (2338, 11748, 'ignite_weapon_sh', 0), + (2339, 11749, 'ilt_tap_snd', 0), + (2340, 11750, 'inhale', 0), + (2341, 11752, 'int_cast_lp_snd', 0), + (2342, 11753, 'int_cast_sparkles_lp', 0), + (2343, 11754, 'int_float_sound', 0), + (2344, 11755, 'int_intglow_sound', 0), + (2345, 11756, 'itch', 0), + (2346, 11757, 'jump', 0), + (2347, 11758, 'jump_moving', 0), + (2348, 11759, 'jump_substitute', 0), + (2349, 11760, 'kettle01', 0), + (2350, 11761, 'kick', 0), + (2351, 11762, 'kiss', 0), + (2352, 11763, 'knockdown_attack', 0), + (2353, 11764, 'knockdowntoknees', 0), + (2354, 11765, 'knockdowntokness', 0), + (2355, 11766, 'knockdwontoknees', 0), + (2356, 11767, 'knockedtoback', 0), + (2357, 11768, 'knockedtoback_getup', 0), + (2358, 11769, 'knockedtoback_onbackidle', 0), + (2359, 11770, 'knockedtoknees', 0), + (2360, 11771, 'knockedtokness', 0), + (2361, 11772, 'knocktoknees', 0), + (2362, 11773, 'l', 0), + (2363, 11774, 'la_lion_roar_02_snd', 0), + (2364, 11775, 'la_lion_roar_snd', 0), + (2365, 11776, 'land', 0), + (2366, 11777, 'land_thud', 0), + (2367, 11778, 'landing', 0), + (2368, 11779, 'launch_melee_projectile_trigger', 0), + (2369, 11780, 'lb2_zap_snd', 0), + (2370, 11781, 'lb_cloud_sound', 0), + (2371, 11782, 'lb_volts_sound', 0), + (2372, 11783, 'leatherworking_failure', 0), + (2373, 11784, 'leatherworking_idle', 0), + (2374, 11785, 'leatherworking_success', 0), + (2375, 11786, 'left_hand_fist', 0), + (2376, 11787, 'left_hand_relaxed', 0), + (2377, 11788, 'level_up3d_sound', 0), + (2378, 11789, 'light_torch', 0), + (2379, 11790, 'lightdamage_enter', 0), + (2380, 11791, 'lightdamage_idle', 0), + (2381, 11792, 'lightning_spheres', 0), + (2382, 11793, 'listen', 0), + (2383, 11794, 'long_fall', 0), + (2384, 11795, 'long_fall_moving', 0), + (2385, 11796, 'lookaway', 0), + (2386, 11797, 'lr_castlion_snd', 0), + (2387, 11798, 'lr_growl_snd', 0), + (2388, 11799, 'lt_suck2_snd', 0), + (2389, 11800, 'lt_suck_snd', 0), + (2390, 11801, 'lucan_lightning_bolt', 0), + (2391, 11802, 'lvlup_achievment_snd', 0), + (2392, 11803, 'm', 0), + (2393, 11804, 'mc_castend_snd', 0), + (2394, 11805, 'mc_castopen_snd', 0), + (2395, 11806, 'mc_manna_channel_snd', 0), + (2396, 11807, 'mc_resultwhip_snd', 0), + (2397, 11808, 'mcp_shield', 0), + (2398, 11809, 'mediumdamage_enter', 0), + (2399, 11810, 'mediumdamage_idle', 0), + (2400, 11811, 'metalworking_failure', 0), + (2401, 11812, 'metalworking_idle', 0), + (2402, 11813, 'metalworking_success', 0), + (2403, 11814, 'miss_target_tigger', 0), + (2404, 11815, 'miss_target_trigger', 0), + (2405, 11816, 'molten_metal', 0), + (2406, 11817, 'monk_attack_recoil', 0), + (2407, 11818, 'monk_attack_recoil01', 0), + (2408, 11819, 'monk_attack_recoil02', 0), + (2409, 11820, 'monk_attack_recoil03', 0), + (2410, 11821, 'monk_backup', 0), + (2411, 11822, 'monk_charge_up', 0), + (2412, 11823, 'monk_defensive_buff', 0), + (2413, 11824, 'monk_dodge_forehand', 0), + (2414, 11825, 'monk_dodge_thrust', 0), + (2415, 11826, 'monk_enter', 0), + (2416, 11827, 'monk_exit', 0), + (2417, 11828, 'monk_feint', 0), + (2418, 11829, 'monk_idle01', 0), + (2419, 11830, 'monk_kick', 0), + (2420, 11831, 'monk_kick_flying', 0), + (2421, 11832, 'monk_kick_spin', 0), + (2422, 11833, 'monk_knockdowntoknees', 0), + (2423, 11834, 'monk_knockedtoback', 0), + (2424, 11835, 'monk_knockedtoback_getup', 0), + (2425, 11836, 'monk_offensive_buff', 0), + (2426, 11837, 'monk_ouch_backhand', 0), + (2427, 11838, 'monk_ouch_down', 0), + (2428, 11839, 'monk_ouch_forehand', 0), + (2429, 11840, 'monk_ouch_thrust', 0), + (2430, 11841, 'monk_parry_backhand', 0), + (2431, 11842, 'monk_parry_down', 0), + (2432, 11843, 'monk_parry_forehand', 0), + (2433, 11844, 'monk_parry_thrust', 0), + (2434, 11845, 'monk_strafe_left', 0), + (2435, 11846, 'monk_strafe_right', 0), + (2436, 11847, 'monk_super_buff', 0), + (2437, 11848, 'monk_taunt_combat_art', 0), + (2438, 11849, 'monk_walk', 0), + (2439, 11850, 'monk_whirling_attack', 0), + (2440, 11851, 'mood_afraid', 0), + (2441, 11852, 'mood_angry', 0), + (2442, 11853, 'mood_combat', 0), + (2443, 11854, 'mood_happy', 0), + (2444, 11855, 'mood_idle', 0), + (2445, 11856, 'mood_sad', 0), + (2446, 11857, 'mood_tired', 0), + (2447, 11858, 'moon', 0), + (2448, 11859, 'mount', 0), + (2449, 11860, 'mr_chomp', 0), + (2450, 11861, 'mr_curl', 0), + (2451, 11862, 'mr_death_yell', 0), + (2452, 11863, 'mr_fall', 0), + (2453, 11864, 'mr_growl', 0), + (2454, 11865, 'mr_land', 0), + (2455, 11866, 'mr_ouch_01', 0), + (2456, 11867, 'mr_run_01', 0), + (2457, 11868, 'myst_caststars_snd', 0), + (2458, 11869, 'myst_caststarsresult_snd', 0), + (2459, 11870, 'myst_stars_snd', 0), + (2460, 11871, 'nb_burn_01_snd', 0), + (2461, 11872, 'nb_burst_02_snd', 0), + (2462, 11873, 'nb_burst_snd', 0), + (2463, 11874, 'nb_castmagic_snd', 0), + (2464, 11875, 'nb_handsparks_long_snd', 0), + (2465, 11876, 'nb_handsparks_louder_snd', 0), + (2466, 11877, 'nb_handsparks_snd', 0), + (2467, 11878, 'nbgroup_castmagic_snd', 0), + (2468, 11879, 'needle01', 0), + (2469, 11880, 'neener', 0), + (2470, 11881, 'no', 0), + (2471, 11882, 'nod', 0), + (2472, 11883, 'o', 0), + (2473, 11884, 'off_combat', 0), + (2474, 11885, 'off_enter', 0), + (2475, 11886, 'off_exit', 0), + (2476, 11887, 'off_idle', 0), + (2477, 11888, 'off_peace', 0), + (2478, 11889, 'off_sit', 0), + (2479, 11890, 'offensive_buff', 0), + (2480, 11891, 'one_ring', 0), + (2481, 11892, 'one_ring_fail', 0), + (2482, 11893, 'oov_bubbles_snd', 0), + (2483, 11894, 'oov_effect_short_snd', 0), + (2484, 11895, 'oov_effect_snd', 0), + (2485, 11896, 'oov_heal_snd', 0), + (2486, 11897, 'open', 0), + (2487, 11898, 'open_coins_and_jewels', 0), + (2488, 11899, 'open_coins_copper', 0), + (2489, 11900, 'open_coins_gold', 0), + (2490, 11901, 'open_coins_silver', 0), + (2491, 11902, 'open_glow', 0), + (2492, 11903, 'opened', 0), + (2493, 11904, 'opened_coins_and_jewels', 0), + (2494, 11905, 'opened_coins_copper', 0), + (2495, 11906, 'opened_coins_gold', 0), + (2496, 11907, 'opened_coins_silver', 0), + (2497, 11908, 'opened_glow', 0), + (2498, 11909, 'orate', 0), + (2499, 11910, 'other_idle', 0), + (2500, 11911, 'ouch', 0), + (2501, 11912, 'ouch+forehand', 0), + (2502, 11913, 'ouch01', 0), + (2503, 11914, 'ouch01_01', 0), + (2504, 11915, 'ouch02', 0), + (2505, 11916, 'ouch02_01', 0), + (2506, 11917, 'ouch03', 0), + (2507, 11918, 'ouch03_01', 0), + (2508, 11919, 'ouch04', 0), + (2509, 11920, 'ouch_01', 0), + (2510, 11921, 'ouch_backhand', 0), + (2511, 11922, 'ouch_backhand_01', 0), + (2512, 11923, 'ouch_bakchand', 0), + (2513, 11924, 'ouch_big', 0), + (2514, 11925, 'ouch_chips', 0), + (2515, 11926, 'ouch_down', 0), + (2516, 11927, 'ouch_down_01', 0), + (2517, 11928, 'ouch_forehand', 0), + (2518, 11929, 'ouch_forehand_01', 0), + (2519, 11930, 'ouch_fx', 0), + (2520, 11931, 'ouch_fx2', 0), + (2521, 11932, 'ouch_headshake01', 0), + (2522, 11933, 'ouch_medium', 0), + (2523, 11934, 'ouch_medium_big', 0), + (2524, 11935, 'ouch_oil_drip', 0), + (2525, 11936, 'ouch_parts', 0), + (2526, 11937, 'ouch_roar01', 0), + (2527, 11938, 'ouch_scream', 0), + (2528, 11939, 'ouch_small', 0), + (2529, 11940, 'ouch_sound', 0), + (2530, 11941, 'ouch_spurt_chest', 0), + (2531, 11942, 'ouch_spurt_pelvis', 0), + (2532, 11943, 'ouch_tail', 0), + (2533, 11944, 'ouch_tail02', 0), + (2534, 11945, 'ouch_thrust', 0), + (2535, 11946, 'ouch_thrust_01', 0), + (2536, 11947, 'ouchdown', 0), + (2537, 11948, 'ouchtiming_a', 0), + (2538, 11949, 'ouchtiming_b', 0), + (2539, 11950, 'ouchtiming_c', 0), + (2540, 11951, 'oven_door', 0), + (2541, 11952, 'overhere', 0), + (2542, 11953, 'parry', 0), + (2543, 11954, 'parry01', 0), + (2544, 11955, 'parry02', 0), + (2545, 11956, 'parry03', 0), + (2546, 11957, 'parry_metal_metal_snd', 0), + (2547, 11958, 'parry_metal_skin_snd', 0), + (2548, 11959, 'parry_metal_wood_snd', 0), + (2549, 11960, 'parry_skin_metal_snd', 0), + (2550, 11961, 'parry_skin_skin_snd', 0), + (2551, 11962, 'parry_skin_wood_snd', 0), + (2552, 11963, 'parry_snd', 0), + (2553, 11964, 'parry_target_tigger', 0), + (2554, 11965, 'parry_target_trigger', 0), + (2555, 11966, 'parry_wood_metal_snd', 0), + (2556, 11967, 'parry_wood_skin_snd', 0), + (2557, 11968, 'parry_wood_wood_snd', 0), + (2558, 11969, 'particle_mood_combat', 0), + (2559, 11970, 'particle_mood_dead', 0), + (2560, 11971, 'particle_mood_peace', 0), + (2561, 11972, 'pbae_divine_snd', 0), + (2562, 11973, 'peace_combat', 0), + (2563, 11974, 'peace_fx', 0), + (2564, 11975, 'peace_off', 0), + (2565, 11976, 'peer', 0), + (2566, 11977, 'pen01', 0), + (2567, 11978, 'pf_endsplash_snd', 0), + (2568, 11979, 'pf_pwrcast_snd', 0), + (2569, 11980, 'pf_pwrrslt_snd', 0), + (2570, 11981, 'pike_attack03', 0), + (2571, 11982, 'pike_attack04', 0), + (2572, 11983, 'pike_attack_recoil', 0), + (2573, 11984, 'pike_attack_recoil01', 0), + (2574, 11985, 'pike_attack_recoil02', 0), + (2575, 11986, 'pike_attack_recoil03', 0), + (2576, 11987, 'pike_backup', 0), + (2577, 11988, 'pike_charge_up', 0), + (2578, 11989, 'pike_death_blow', 0), + (2579, 11990, 'pike_defensive_buff', 0), + (2580, 11991, 'pike_dodge_backhand', 0), + (2581, 11992, 'pike_dodge_down', 0), + (2582, 11993, 'pike_dodge_forehand', 0), + (2583, 11994, 'pike_dodge_thrust', 0), + (2584, 11995, 'pike_enter', 0), + (2585, 11996, 'pike_exit', 0), + (2586, 11997, 'pike_feint', 0), + (2587, 11998, 'pike_idle01', 0), + (2588, 11999, 'pike_knockdowntoknees', 0), + (2589, 12000, 'pike_knockedtoback', 0), + (2590, 12001, 'pike_knockedtoback_getup', 0), + (2591, 12002, 'pike_offensive_buff', 0), + (2592, 12003, 'pike_ouch01_backhand', 0), + (2593, 12004, 'pike_ouch02_down', 0), + (2594, 12005, 'pike_ouch_backhand', 0), + (2595, 12006, 'pike_ouch_down', 0), + (2596, 12007, 'pike_ouch_forehand', 0), + (2597, 12008, 'pike_ouch_thrust', 0), + (2598, 12009, 'pike_parry_backhand', 0), + (2599, 12010, 'pike_parry_down', 0), + (2600, 12011, 'pike_parry_forehand', 0), + (2601, 12012, 'pike_parry_thrust', 0), + (2602, 12013, 'pike_strafe_left', 0), + (2603, 12014, 'pike_strafe_right', 0), + (2604, 12015, 'pike_super_buff', 0), + (2605, 12016, 'pike_taunt', 0), + (2606, 12017, 'pike_walk', 0), + (2607, 12018, 'pl_lightning_01_snd', 0), + (2608, 12019, 'pl_lightning_02_snd', 0), + (2609, 12020, 'pl_lightning_03_snd', 0), + (2610, 12021, 'pl_warp_01_snd', 0), + (2611, 12022, 'planer', 0), + (2612, 12023, 'plummet', 0), + (2613, 12024, 'pn_castflute_sound', 0), + (2614, 12025, 'pn_resultflute_sound', 0), + (2615, 12026, 'pof_batdrone_snd', 0), + (2616, 12027, 'pof_casttone_snd', 0), + (2617, 12028, 'point', 0), + (2618, 12029, 'point_right', 0), + (2619, 12030, 'ponder', 0), + (2620, 12031, 'pout', 0), + (2621, 12032, 'pp_casthi_snd', 0), + (2622, 12033, 'pp_stab_snd', 0), + (2623, 12034, 'ps_caststream_snd', 0), + (2624, 12035, 'ps_resultfx_snd', 0), + (2625, 12036, 'pugilist_attack01', 0), + (2626, 12037, 'pugilist_attack03', 0), + (2627, 12038, 'pugilist_attack_recoil', 0), + (2628, 12039, 'pugilist_attack_recoil01', 0), + (2629, 12040, 'pugilist_attack_recoil02', 0), + (2630, 12041, 'pugilist_attack_recoil03', 0), + (2631, 12042, 'pugilist_backup', 0), + (2632, 12043, 'pugilist_charge_up', 0), + (2633, 12044, 'pugilist_defensive_buff', 0), + (2634, 12045, 'pugilist_dodge', 0), + (2635, 12046, 'pugilist_dodge01', 0), + (2636, 12047, 'pugilist_dodge02', 0), + (2637, 12048, 'pugilist_dodge_backhand', 0), + (2638, 12049, 'pugilist_dodge_down', 0), + (2639, 12050, 'pugilist_dodge_forehand', 0), + (2640, 12051, 'pugilist_dodge_thrust', 0), + (2641, 12052, 'pugilist_enter', 0), + (2642, 12053, 'pugilist_exit', 0), + (2643, 12054, 'pugilist_feint', 0), + (2644, 12055, 'pugilist_knockdowntoknees', 0), + (2645, 12056, 'pugilist_knockedtoback', 0), + (2646, 12057, 'pugilist_knockedtoback_getup', 0), + (2647, 12058, 'pugilist_offensive_buff', 0), + (2648, 12059, 'pugilist_ouch', 0), + (2649, 12060, 'pugilist_ouch01', 0), + (2650, 12061, 'pugilist_ouch_backhand', 0), + (2651, 12062, 'pugilist_ouch_down', 0), + (2652, 12063, 'pugilist_ouch_forehand', 0), + (2653, 12064, 'pugilist_ouch_thrust', 0), + (2654, 12065, 'pugilist_parry', 0), + (2655, 12066, 'pugilist_parry_backhand', 0), + (2656, 12067, 'pugilist_parry_down', 0), + (2657, 12068, 'pugilist_parry_forehand', 0), + (2658, 12069, 'pugilist_parry_thrust', 0), + (2659, 12070, 'pugilist_recoil', 0), + (2660, 12071, 'pugilist_strafe_left', 0), + (2661, 12072, 'pugilist_strafe_right', 0), + (2662, 12073, 'pugilist_super_buff', 0), + (2663, 12074, 'pugilist_taunt', 0), + (2664, 12075, 'pugilist_walk', 0), + (2665, 12076, 'pv_pet_victory_snd', 0), + (2666, 12077, 'quality_down', 0), + (2667, 12078, 'quality_up', 0), + (2668, 12079, 'quest_complete', 0), + (2669, 12080, 'rain', 0), + (2670, 12081, 'raisehand', 0), + (2671, 12082, 'rays', 0), + (2672, 12083, 'rb_p2pcast_snd', 0), + (2673, 12084, 'rb_p2pstream_snd', 0), + (2674, 12085, 'rc_leaves_01_snd', 0), + (2675, 12086, 'rc_roots_grow_01_snd', 0), + (2676, 12087, 'rct_endblast_sound', 0), + (2677, 12088, 'rct_endtones_sound', 0), + (2678, 12089, 'rebirth_sound_01', 0), + (2679, 12090, 'red_nose', 0), + (2680, 12091, 'resilt_end_sound', 0), + (2681, 12092, 'rest', 0), + (2682, 12093, 'result_bladebarrier', 0), + (2683, 12094, 'result_camera_shake2_snd', 0), + (2684, 12095, 'result_camera_shake_snd', 0), + (2685, 12096, 'result_chain_lightning_p2p', 0), + (2686, 12097, 'result_charge1_sh', 0), + (2687, 12098, 'result_charge_sh', 0), + (2688, 12099, 'result_copter_flamethrower', 0), + (2689, 12100, 'result_dawn_rising', 0), + (2690, 12101, 'result_dragon_fire_spiral', 0), + (2691, 12102, 'result_dragon_shield_fire', 0), + (2692, 12103, 'result_dragon_shield_lightning', 0), + (2693, 12104, 'result_dragon_shield_lightning_02a', 0), + (2694, 12105, 'result_dragon_shield_lightning_02b', 0), + (2695, 12106, 'result_dragon_shield_lightning_02c', 0), + (2696, 12107, 'result_dust_blast_heavy', 0), + (2697, 12108, 'result_feather_explosion', 0), + (2698, 12109, 'result_flash_dragon', 0), + (2699, 12110, 'result_fog', 0), + (2700, 12111, 'result_fog_low', 0), + (2701, 12112, 'result_fog_low_small', 0), + (2702, 12113, 'result_fog_poison', 0), + (2703, 12114, 'result_fog_poison_4x10', 0), + (2704, 12115, 'result_fog_poison_low', 0), + (2705, 12116, 'result_fog_poison_low_small', 0), + (2706, 12117, 'result_fog_poison_small', 0), + (2707, 12118, 'result_fog_small', 0), + (2708, 12119, 'result_forced_shader_dark_dragon', 0), + (2709, 12120, 'result_forced_shader_electric_dragon', 0), + (2710, 12121, 'result_forced_shader_fire_dragon', 0), + (2711, 12122, 'result_forced_shader_ice_dragon', 0), + (2712, 12123, 'result_froglok_bauble', 0), + (2713, 12124, 'result_glint2_sh', 0), + (2714, 12125, 'result_knighthood_bauble', 0), + (2715, 12126, 'result_lightning_bolt1_snd', 0), + (2716, 12127, 'result_mend_synth_sound', 0), + (2717, 12128, 'result_protection_of_twilight', 0), + (2718, 12129, 'result_recharging_station_effect', 0), + (2719, 12130, 'result_rune_awakened', 0), + (2720, 12131, 'result_sparkles_clinging_dragon', 0), + (2721, 12132, 'result_sparkles_clinging_soft_dragon', 0), + (2722, 12133, 'result_sun_sphere', 0), + (2723, 12134, 'result_twinkle_01', 0), + (2724, 12135, 'result_weakness_disk_blue', 0), + (2725, 12136, 'result_weakness_disk_green', 0), + (2726, 12137, 'result_weakness_disk_purple', 0), + (2727, 12138, 'result_weakness_disk_red', 0), + (2728, 12139, 'result_weakness_disk_yellow', 0), + (2729, 12140, 'result_windrazor', 0), + (2730, 12141, 'result_wood_chips', 0), + (2731, 12142, 'resurrect', 0), + (2732, 12143, 'right_hand_fist', 0), + (2733, 12144, 'right_hand_relaxed', 0), + (2734, 12145, 'righthand_impact', 0), + (2735, 12146, 'ring_glints', 0), + (2736, 12147, 'ring_glints2', 0), + (2737, 12148, 'ring_glints_idle', 0), + (2738, 12149, 'rofl', 0), + (2739, 12150, 'royalwave', 0), + (2740, 12151, 'rt_drone_snd', 0), + (2741, 12152, 'rt_tune_snd', 0), + (2742, 12153, 'rude', 0), + (2743, 12155, 'runes', 0), + (2744, 12156, 'sa_bones_sound', 0), + (2745, 12157, 'sa_flash01_snd', 0), + (2746, 12158, 'sa_flash02_snd', 0), + (2747, 12159, 'sa_flash03_snd', 0), + (2748, 12160, 'sa_rattle_01_snd', 0), + (2749, 12161, 'sa_skelattack_snd', 0), + (2750, 12162, 'sa_skeldance_snd', 0), + (2751, 12163, 'sa_snakespawn_snd', 0), + (2752, 12164, 'sa_spiritappear_snd', 0), + (2753, 12165, 'sa_strike_snd', 0), + (2754, 12166, 'sad', 0), + (2755, 12167, 'salute', 0), + (2756, 12168, 'salute_freeport', 0), + (2757, 12169, 'sanc_castlp_snd', 0), + (2758, 12170, 'sanc_pulse_01_sound', 0), + (2759, 12171, 'sanc_pulse_02_sound', 0), + (2760, 12172, 'sarcasm', 0), + (2761, 12173, 'saw01', 0), + (2762, 12174, 'saw02', 0), + (2763, 12175, 'saw_sparks_front', 0), + (2764, 12176, 'saw_sparks_inside', 0), + (2765, 12177, 'saw_sparks_outside', 0), + (2766, 12178, 'sb_skelcast_sound', 0), + (2767, 12179, 'sb_skeleton_sound', 0), + (2768, 12180, 'sc_impact_snd', 0), + (2769, 12181, 'sc_swipe_snd', 0), + (2770, 12182, 'scheme', 0), + (2771, 12183, 'scims_scimitar_snd', 0), + (2772, 12184, 'scims_swordswipe_snd', 0), + (2773, 12185, 'scims_whoosh_snd', 0), + (2774, 12186, 'scissors01', 0), + (2775, 12187, 'scold', 0), + (2776, 12188, 'scorp_crunches_snd', 0), + (2777, 12189, 'scorpa_scorpform_snd', 0), + (2778, 12190, 'scorpa_scream01_snd', 0), + (2779, 12191, 'scratch', 0), + (2780, 12192, 'scream', 0), + (2781, 12193, 'scribing_idle', 0), + (2782, 12194, 'scruntch', 0), + (2783, 12195, 'sd_drumming_lp_snd', 0), + (2784, 12196, 'sd_soulcast_sound', 0), + (2785, 12197, 'sd_soulsuck_sound', 0), + (2786, 12199, 'sd_spiritflash_snd', 0), + (2787, 12200, 'sd_spiritflashsoft_snd', 0), + (2788, 12201, 'section01', 0), + (2789, 12202, 'section02', 0), + (2790, 12203, 'section03', 0), + (2791, 12204, 'seenoevil', 0), + (2792, 12205, 'sf_bladering_snd', 0), + (2793, 12206, 'sf_flute_lp_snd', 0), + (2794, 12207, 'sgwp_bark_snd', 0), + (2795, 12208, 'shaft01', 0), + (2796, 12209, 'shaft02', 0), + (2797, 12210, 'shake', 0), + (2798, 12211, 'shake1', 0), + (2799, 12212, 'shake2', 0), + (2800, 12213, 'shake3', 0), + (2801, 12214, 'shakefist', 0), + (2802, 12215, 'shakeit', 0), + (2803, 12216, 'shame', 0), + (2804, 12217, 'shark_attack01', 0), + (2805, 12218, 'shark_bite01', 0), + (2806, 12219, 'shark_bite02', 0), + (2807, 12220, 'shark_cry', 0), + (2808, 12221, 'shark_die', 0), + (2809, 12222, 'shark_ouch', 0), + (2810, 12223, 'shark_runtail', 0), + (2811, 12224, 'shark_runtail02', 0), + (2812, 12225, 'shark_tail', 0), + (2813, 12226, 'sheathe_metal_weapon_snd', 0), + (2814, 12227, 'sheathe_weapon_snd', 0), + (2815, 12228, 'sheathe_weapon_trigger', 0), + (2816, 12229, 'shield_block_backhand', 0), + (2817, 12230, 'shield_block_down', 0), + (2818, 12231, 'shield_block_forehand', 0), + (2819, 12232, 'shield_block_thrust', 0), + (2820, 12233, 'shield_shove', 0), + (2821, 12234, 'shield_sound', 0), + (2822, 12235, 'shimmy', 0), + (2823, 12236, 'shiver', 0), + (2824, 12237, 'show_bridge', 0), + (2825, 12238, 'show_melee_projectile_trigger', 0), + (2826, 12239, 'shrink_sound', 0), + (2827, 12240, 'shrug', 0), + (2828, 12241, 'shuttle01', 0), + (2829, 12242, 'sick', 0), + (2830, 12243, 'side_smoke01', 0), + (2831, 12244, 'sig_bursting_snd', 0), + (2832, 12245, 'sig_rattler_snd', 0), + (2833, 12246, 'sigh', 0), + (2834, 12247, 'sit_combat', 0), + (2835, 12248, 'sit_idle01', 0), + (2836, 12249, 'sit_idle02', 0), + (2837, 12250, 'sit_off', 0), + (2838, 12251, 'sit_peace', 0), + (2839, 12252, 'sit_tail', 0), + (2840, 12253, 'sit_tail_cloak', 0), + (2841, 12254, 'sl_lute_lp_snd', 0), + (2842, 12255, 'slt_castfire_snd', 0), + (2843, 12256, 'slt_resultvortex_snd', 0), + (2844, 12257, 'slt_splode_snd', 0), + (2845, 12258, 'slugattack_01', 0), + (2846, 12259, 'slugdie_hit_01', 0), + (2847, 12260, 'slugdie_hit_02', 0), + (2848, 12261, 'slugdie_hit_03', 0), + (2849, 12262, 'slugpulse_01', 0), + (2850, 12263, 'slugpulse_02', 0), + (2851, 12264, 'slugpulse_03', 0), + (2852, 12265, 'slugpulse_04', 0), + (2853, 12266, 'slugpulser_01', 0), + (2854, 12267, 'slugrun_01', 0), + (2855, 12268, 'slugrun_02', 0), + (2856, 12269, 'slugrunpulse_01', 0), + (2857, 12270, 'slugrunpulse_02', 0), + (2858, 12271, 'slugsplat_01', 0), + (2859, 12272, 'slugsplat_02', 0), + (2860, 12273, 'slugsway_01', 0), + (2861, 12274, 'slugsway_02', 0), + (2862, 12275, 'slugtongue', 0), + (2863, 12276, 'slugtongueimpact_01', 0), + (2864, 12277, 'slugwalk_01', 0), + (2865, 12278, 'slugwalk_02', 0), + (2866, 12279, 'slugwalkpulse_01', 0), + (2867, 12280, 'slugwalkpulse_02', 0), + (2868, 12281, 'slugyell_01', 0), + (2869, 12282, 'small_saw', 0), + (2870, 12283, 'smash', 0), + (2871, 12284, 'smashed', 0), + (2872, 12285, 'smile', 0), + (2873, 12286, 'smirk', 0), + (2874, 12287, 'smite_cast_lp_snd', 0), + (2875, 12288, 'smoke', 0), + (2876, 12289, 'smoke_breath', 0), + (2877, 12290, 'smoke_dark_chimney', 0), + (2878, 12291, 'smoke_dark_coals', 0), + (2879, 12292, 'smoke_dark_ground', 0), + (2880, 12293, 'smoke_dark_up', 0), + (2881, 12294, 'smoke_flash', 0), + (2882, 12295, 'smoke_ring', 0), + (2883, 12296, 'smoke_sparks', 0), + (2884, 12297, 'snd_boom', 0), + (2885, 12298, 'snd_confrontfear_fade', 0), + (2886, 12299, 'snd_confrontfear_skull', 0), + (2887, 12300, 'snd_fall_damage', 0), + (2888, 12301, 'snd_fire_whoosh', 0), + (2889, 12302, 'snd_fireworks_boom', 0), + (2890, 12303, 'snd_frontload_acid', 0), + (2891, 12304, 'snd_keg_appear', 0), + (2892, 12305, 'snd_keg_gulp', 0), + (2893, 12306, 'snd_keg_pour', 0), + (2894, 12307, 'snd_keg_whoosh', 0), + (2895, 12308, 'snd_keg_yum', 0), + (2896, 12309, 'snd_lifeburn_castabsorb', 0), + (2897, 12310, 'snd_lifeburn_castbase', 0), + (2898, 12311, 'snd_lifeburn_resultblast', 0), + (2899, 12312, 'snd_mayong_boen_blanket', 0), + (2900, 12313, 'snd_mayong_boen_result', 0), + (2901, 12314, 'snd_pumpkin_flaming', 0), + (2902, 12315, 'snd_slide_cast', 0), + (2903, 12316, 'snd_slide_result', 0), + (2904, 12317, 'snd_snowball_impact', 0), + (2905, 12318, 'snd_spirit_elephant_vocal', 0), + (2906, 12319, 'snd_teleport_druidring_flash', 0), + (2907, 12320, 'snd_teleport_druidring_loop', 0), + (2908, 12321, 'snd_wuoshi_choking_vines', 0), + (2909, 12322, 'snd_wuoshi_tree_enter', 0), + (2910, 12323, 'snd_wuoshi_tree_exit', 0), + (2911, 12324, 'snd_wuoshi_tree_loop', 0), + (2912, 12325, 'sneer', 0), + (2913, 12326, 'sneeze', 0), + (2914, 12327, 'sneeze_smoke', 0), + (2915, 12328, 'snicker', 0), + (2916, 12329, 'sniff', 0), + (2917, 12330, 'snort', 0), + (2918, 12331, 'soaf_burn_sound', 0), + (2919, 12332, 'soaf_castcharge02_sound', 0), + (2920, 12333, 'soaf_castcharge_sound', 0), + (2921, 12334, 'soaf_flamearrow_sound', 0), + (2922, 12335, 'soc_clayskinfall_lp_sound', 0), + (2923, 12336, 'soc_clayskinform_sound', 0), + (2924, 12337, 'sod_flameup_sound', 0), + (2925, 12338, 'sod_whoosh01_sound', 0), + (2926, 12339, 'som_cast_lp_snd', 0), + (2927, 12340, 'sotb_batsqueak2_sound', 0), + (2928, 12341, 'sotb_batsqueak_sound', 0), + (2929, 12342, 'sound_angry', 0), + (2930, 12343, 'sound_angry01', 0), + (2931, 12344, 'sound_angry02', 0), + (2932, 12345, 'sound_anvilhit', 0), + (2933, 12346, 'sound_aoeflame', 0), + (2934, 12347, 'sound_artifact_bury', 0), + (2935, 12348, 'sound_artifact_emerge', 0), + (2936, 12349, 'sound_atkhit', 0), + (2937, 12350, 'sound_atkland', 0), + (2938, 12351, 'sound_atkslide', 0), + (2939, 12352, 'sound_atkvocal', 0), + (2940, 12353, 'sound_attachwhirl', 0), + (2941, 12354, 'sound_attack', 0), + (2942, 12355, 'sound_attack01', 0), + (2943, 12356, 'sound_attack02', 0), + (2944, 12357, 'sound_attack1_vocal', 0), + (2945, 12358, 'sound_attack2_vocal', 0), + (2946, 12359, 'sound_attack2rock', 0), + (2947, 12360, 'sound_attack2slam', 0), + (2948, 12361, 'sound_attack_hit', 0), + (2949, 12362, 'sound_attacka', 0), + (2950, 12363, 'sound_attackarm', 0), + (2951, 12364, 'sound_attackb', 0), + (2952, 12365, 'sound_attackback', 0), + (2953, 12366, 'sound_attackbase', 0), + (2954, 12367, 'sound_attackbend', 0), + (2955, 12368, 'sound_attackbite', 0), + (2956, 12369, 'sound_attackbitein', 0), + (2957, 12370, 'sound_attackbiterip', 0), + (2958, 12371, 'sound_attackblade', 0), + (2959, 12372, 'sound_attackbreath', 0), + (2960, 12373, 'sound_attackbreath01', 0), + (2961, 12374, 'sound_attackbreath02', 0), + (2962, 12375, 'sound_attackbreath02_inhale', 0), + (2963, 12376, 'sound_attackbreath1', 0), + (2964, 12377, 'sound_attackbreath2', 0), + (2965, 12378, 'sound_attackbreath_long', 0), + (2966, 12379, 'sound_attackbreath_short', 0), + (2967, 12380, 'sound_attackbreathe', 0), + (2968, 12381, 'sound_attackbreathefire', 0), + (2969, 12382, 'sound_attackbreathfire', 0), + (2970, 12383, 'sound_attackbreathfire_long', 0), + (2971, 12384, 'sound_attackbreathfire_short', 0), + (2972, 12385, 'sound_attackcast', 0), + (2973, 12386, 'sound_attackchain', 0), + (2974, 12387, 'sound_attackchime', 0), + (2975, 12388, 'sound_attackchomp', 0), + (2976, 12389, 'sound_attackclaw', 0), + (2977, 12390, 'sound_attackclaw_vocal', 0), + (2978, 12391, 'sound_attackcreak', 0), + (2979, 12392, 'sound_attackcrunch01', 0), + (2980, 12393, 'sound_attackcrunch02', 0), + (2981, 12394, 'sound_attacke3_vocal', 0), + (2982, 12395, 'sound_attackfire', 0), + (2983, 12396, 'sound_attackfistwater', 0), + (2984, 12397, 'sound_attackflame', 0), + (2985, 12398, 'sound_attackflap', 0), + (2986, 12399, 'sound_attackflutter', 0), + (2987, 12400, 'sound_attackfoot', 0), + (2988, 12401, 'sound_attackgear', 0), + (2989, 12402, 'sound_attackgrowl', 0), + (2990, 12403, 'sound_attackheadram_swoosh', 0), + (2991, 12404, 'sound_attackhit', 0), + (2992, 12405, 'sound_attackinhale', 0), + (2993, 12406, 'sound_attackjaw', 0), + (2994, 12407, 'sound_attackkick', 0), + (2995, 12408, 'sound_attackleaves', 0), + (2996, 12409, 'sound_attackliddown', 0), + (2997, 12410, 'sound_attacklidup', 0), + (2998, 12411, 'sound_attacklong', 0), + (2999, 12412, 'sound_attackmetal', 0), + (3000, 12413, 'sound_attackpage', 0), + (3001, 12414, 'sound_attackram', 0), + (3002, 12415, 'sound_attackrock', 0), + (3003, 12416, 'sound_attackrockinhale', 0), + (3004, 12417, 'sound_attackrun', 0), + (3005, 12418, 'sound_attacksaw', 0), + (3006, 12419, 'sound_attacksbreathin', 0), + (3007, 12420, 'sound_attackscream', 0), + (3008, 12421, 'sound_attackshort', 0), + (3009, 12422, 'sound_attackslam', 0), + (3010, 12423, 'sound_attacksnap', 0), + (3011, 12424, 'sound_attacksnort', 0), + (3012, 12425, 'sound_attackspecial', 0), + (3013, 12426, 'sound_attacksquish', 0), + (3014, 12427, 'sound_attackstab', 0), + (3015, 12428, 'sound_attacksting', 0), + (3016, 12429, 'sound_attackstomp', 0), + (3017, 12430, 'sound_attackswing', 0), + (3018, 12431, 'sound_attackswoosh', 0), + (3019, 12432, 'sound_attackswordwater01', 0), + (3020, 12433, 'sound_attackswordwater02', 0), + (3021, 12434, 'sound_attacktail', 0), + (3022, 12435, 'sound_attacktailvocal', 0), + (3023, 12436, 'sound_attacktailwhip', 0), + (3024, 12437, 'sound_attacktongue', 0), + (3025, 12438, 'sound_attackvocal', 0), + (3026, 12439, 'sound_attackvocal01', 0), + (3027, 12440, 'sound_attackvocal02', 0), + (3028, 12441, 'sound_attackvocal2', 0), + (3029, 12442, 'sound_attackvocal_long', 0), + (3030, 12443, 'sound_attackwater', 0), + (3031, 12444, 'sound_attackwhip', 0), + (3032, 12445, 'sound_attackwhirl', 0), + (3033, 12446, 'sound_attackwhirlblade', 0), + (3034, 12447, 'sound_attackwhoosh', 0), + (3035, 12448, 'sound_attackwild', 0), + (3036, 12449, 'sound_attackwind', 0), + (3037, 12450, 'sound_attackwindflap', 0), + (3038, 12451, 'sound_attackwindup', 0), + (3039, 12452, 'sound_attackwing', 0), + (3040, 12453, 'sound_attackwing_land', 0), + (3041, 12454, 'sound_attackwingbreath', 0), + (3042, 12455, 'sound_attackwingflap', 0), + (3043, 12456, 'sound_attackyell', 0), + (3044, 12457, 'sound_battlecry', 0), + (3045, 12458, 'sound_battlecry01', 0), + (3046, 12459, 'sound_beg', 0), + (3047, 12460, 'sound_bell', 0), + (3048, 12461, 'sound_bite', 0), + (3049, 12462, 'sound_bite_rip', 0), + (3050, 12463, 'sound_bitetear', 0), + (3051, 12464, 'sound_bitevocal', 0), + (3052, 12465, 'sound_blech', 0), + (3053, 12466, 'sound_blink', 0), + (3054, 12467, 'sound_boggle', 0), + (3055, 12468, 'sound_boltdamage', 0), + (3056, 12469, 'sound_bonehit', 0), + (3057, 12470, 'sound_boom', 0), + (3058, 12471, 'sound_bowpull', 0), + (3059, 12472, 'sound_bowrelease', 0), + (3060, 12473, 'sound_breath', 0), + (3061, 12474, 'sound_breath_a', 0), + (3062, 12475, 'sound_breath_b', 0), + (3063, 12476, 'sound_breathfire', 0), + (3064, 12477, 'sound_breathinhale', 0), + (3065, 12478, 'sound_breathvocal', 0), + (3066, 12479, 'sound_bridge', 0), + (3067, 12480, 'sound_buff', 0), + (3068, 12481, 'sound_buffdefensive', 0), + (3069, 12482, 'sound_buffinhale', 0), + (3070, 12483, 'sound_buffoffensive', 0), + (3071, 12484, 'sound_buffspin001', 0), + (3072, 12485, 'sound_burp', 0), + (3073, 12486, 'sound_casgrowl', 0), + (3074, 12487, 'sound_cast', 0), + (3075, 12488, 'sound_cast_shortbreath_open', 0), + (3076, 12489, 'sound_castend', 0), + (3077, 12490, 'sound_castgears', 0), + (3078, 12491, 'sound_castgrowl', 0), + (3079, 12492, 'sound_casthowl', 0), + (3080, 12493, 'sound_castinhalegears', 0), + (3081, 12494, 'sound_castlong_breath', 0), + (3082, 12495, 'sound_castlong_inhale', 0), + (3083, 12496, 'sound_castlong_open', 0), + (3084, 12497, 'sound_castroar', 0), + (3085, 12498, 'sound_castshort_breath', 0), + (3086, 12499, 'sound_caststart', 0), + (3087, 12500, 'sound_castvocal', 0), + (3088, 12501, 'sound_chesthit', 0), + (3089, 12502, 'sound_chesthitdouble', 0), + (3090, 12503, 'sound_chew', 0), + (3091, 12504, 'sound_clap', 0), + (3092, 12505, 'sound_claw', 0), + (3093, 12506, 'sound_clawhit', 0), + (3094, 12507, 'sound_clawwalk', 0), + (3095, 12508, 'sound_clop', 0), + (3096, 12509, 'sound_clop_left', 0), + (3097, 12510, 'sound_clop_right', 0), + (3098, 12511, 'sound_combatart', 0), + (3099, 12512, 'sound_combatbreath', 0), + (3100, 12513, 'sound_combatbreathe', 0), + (3101, 12514, 'sound_combatchew', 0), + (3102, 12515, 'sound_combatcrunch', 0), + (3103, 12516, 'sound_combatenter', 0), + (3104, 12517, 'sound_combatenter001', 0), + (3105, 12518, 'sound_combatenter002', 0), + (3106, 12519, 'sound_combatentergrowl', 0), + (3107, 12520, 'sound_combatenterrock01', 0), + (3108, 12521, 'sound_combatenterrock02', 0), + (3109, 12522, 'sound_combatenterrock03', 0), + (3110, 12523, 'sound_combatentervocal01', 0), + (3111, 12524, 'sound_combatentervocal02', 0), + (3112, 12525, 'sound_combatenterwing', 0), + (3113, 12526, 'sound_combatenterwingfire', 0), + (3114, 12527, 'sound_combatexit', 0), + (3115, 12528, 'sound_combatflap', 0), + (3116, 12529, 'sound_combatflapup', 0), + (3117, 12530, 'sound_combatgrowl', 0), + (3118, 12531, 'sound_combatidle', 0), + (3119, 12532, 'sound_combatpage', 0), + (3120, 12533, 'sound_combatpaw', 0), + (3121, 12534, 'sound_combatsnort', 0), + (3122, 12535, 'sound_combatwing', 0), + (3123, 12536, 'sound_creak', 0), + (3124, 12537, 'sound_crunch', 0), + (3125, 12538, 'sound_curl', 0), + (3126, 12539, 'sound_cutthroat', 0), + (3127, 12540, 'sound_damage', 0), + (3128, 12541, 'sound_damage02', 0), + (3129, 12542, 'sound_damage03', 0), + (3130, 12543, 'sound_damageblade', 0), + (3131, 12544, 'sound_damagebolts', 0), + (3132, 12545, 'sound_damagebone', 0), + (3133, 12546, 'sound_damagecrunch', 0), + (3134, 12547, 'sound_damageflutter', 0), + (3135, 12548, 'sound_damagehit', 0), + (3136, 12549, 'sound_damagerock', 0), + (3137, 12550, 'sound_damageshell', 0), + (3138, 12551, 'sound_damagetwang', 0), + (3139, 12552, 'sound_damagevocal', 0), + (3140, 12553, 'sound_dead', 0), + (3141, 12554, 'sound_dead01', 0), + (3142, 12555, 'sound_dead02', 0), + (3143, 12556, 'sound_dead03', 0), + (3144, 12557, 'sound_dead_enter', 0), + (3145, 12558, 'sound_deadball', 0), + (3146, 12559, 'sound_deadballfall', 0), + (3147, 12560, 'sound_deadbell', 0), + (3148, 12561, 'sound_deadblade', 0), + (3149, 12562, 'sound_deadboom', 0), + (3150, 12563, 'sound_deadbreathe', 0), + (3151, 12564, 'sound_deadbubble', 0), + (3152, 12565, 'sound_deadbuzz01', 0), + (3153, 12566, 'sound_deadbuzz02', 0), + (3154, 12567, 'sound_deadbuzz03', 0), + (3155, 12568, 'sound_deadbuzz04', 0), + (3156, 12569, 'sound_deadclose', 0), + (3157, 12570, 'sound_deadcreak', 0), + (3158, 12571, 'sound_deadcrunch', 0), + (3159, 12572, 'sound_deadcrunch01', 0), + (3160, 12573, 'sound_deadcrunch02', 0), + (3161, 12574, 'sound_deadcrunch1', 0), + (3162, 12575, 'sound_deadcrunch2', 0), + (3163, 12576, 'sound_deadcry', 0), + (3164, 12577, 'sound_deadcurl', 0), + (3165, 12578, 'sound_deadfall', 0), + (3166, 12579, 'sound_deadfall001', 0), + (3167, 12580, 'sound_deadfall002', 0), + (3168, 12581, 'sound_deadfall01', 0), + (3169, 12582, 'sound_deadfall02', 0), + (3170, 12583, 'sound_deadfall03', 0), + (3171, 12584, 'sound_deadfall1', 0), + (3172, 12585, 'sound_deadfall2', 0), + (3173, 12586, 'sound_deadfire', 0), + (3174, 12587, 'sound_deadflame', 0), + (3175, 12588, 'sound_deadflap', 0), + (3176, 12589, 'sound_deadgear', 0), + (3177, 12590, 'sound_deadglob', 0), + (3178, 12591, 'sound_deadglub', 0), + (3179, 12592, 'sound_deadgroan', 0), + (3180, 12593, 'sound_deadgrowl', 0), + (3181, 12594, 'sound_deadhead', 0), + (3182, 12595, 'sound_deadhit', 0), + (3183, 12596, 'sound_deadhit1', 0), + (3184, 12597, 'sound_deadhit2', 0), + (3185, 12598, 'sound_deadhit3', 0), + (3186, 12599, 'sound_deadknee', 0), + (3187, 12600, 'sound_deadliddown', 0), + (3188, 12601, 'sound_deadlidup', 0), + (3189, 12602, 'sound_deadmist', 0), + (3190, 12603, 'sound_deadmotor', 0), + (3191, 12604, 'sound_deadpage', 0), + (3192, 12605, 'sound_deadprevocal', 0), + (3193, 12606, 'sound_deadrock', 0), + (3194, 12607, 'sound_deadrockfall', 0), + (3195, 12608, 'sound_deadscratch', 0), + (3196, 12609, 'sound_deadscream', 0), + (3197, 12610, 'sound_deadscream01', 0), + (3198, 12611, 'sound_deadscream02', 0), + (3199, 12612, 'sound_deadslam', 0), + (3200, 12613, 'sound_deadslither', 0), + (3201, 12614, 'sound_deadsquish', 0), + (3202, 12615, 'sound_deadsway', 0), + (3203, 12616, 'sound_deadtail', 0), + (3204, 12617, 'sound_deadthrash01', 0), + (3205, 12618, 'sound_deadthrash02', 0), + (3206, 12619, 'sound_deadtongue', 0), + (3207, 12620, 'sound_deadvanish', 0), + (3208, 12621, 'sound_deadvocal', 0), + (3209, 12622, 'sound_deadvocal01', 0), + (3210, 12623, 'sound_deadvocal02', 0), + (3211, 12624, 'sound_deadvocal03', 0), + (3212, 12625, 'sound_deadwarble01', 0), + (3213, 12626, 'sound_deadwarble02', 0), + (3214, 12627, 'sound_deadwater', 0), + (3215, 12628, 'sound_deadwater01', 0), + (3216, 12629, 'sound_deadwater02', 0), + (3217, 12630, 'sound_deadwater03', 0), + (3218, 12631, 'sound_deadwhimper', 0), + (3219, 12632, 'sound_deadwhoosh', 0), + (3220, 12633, 'sound_deadwing', 0), + (3221, 12634, 'sound_deadwingfold', 0), + (3222, 12635, 'sound_deadwoosh', 0), + (3223, 12636, 'sound_death', 0), + (3224, 12637, 'sound_death001', 0), + (3225, 12638, 'sound_death002', 0), + (3226, 12639, 'sound_deathbone', 0), + (3227, 12640, 'sound_deathbreak', 0), + (3228, 12641, 'sound_deathclaw', 0), + (3229, 12642, 'sound_deathcrash', 0), + (3230, 12643, 'sound_deathengine', 0), + (3231, 12644, 'sound_deathfall', 0), + (3232, 12645, 'sound_deathmotor', 0), + (3233, 12646, 'sound_deathshake', 0), + (3234, 12647, 'sound_deathsigh', 0), + (3235, 12648, 'sound_deathtail', 0), + (3236, 12649, 'sound_deathvocal', 0), + (3237, 12650, 'sound_deathwhoosh', 0), + (3238, 12651, 'sound_design_lavabridge', 0), + (3239, 12652, 'sound_die', 0), + (3240, 12653, 'sound_dig001', 0), + (3241, 12654, 'sound_dig002', 0), + (3242, 12655, 'sound_duck', 0), + (3243, 12656, 'sound_eat', 0), + (3244, 12657, 'sound_eating', 0), + (3245, 12658, 'sound_eatslime', 0), + (3246, 12659, 'sound_entercreak', 0), + (3247, 12660, 'sound_enterglide', 0), + (3248, 12661, 'sound_enterleaves', 0), + (3249, 12662, 'sound_entermoan', 0), + (3250, 12663, 'sound_enteropen', 0), + (3251, 12664, 'sound_enterscrape', 0), + (3252, 12665, 'sound_entervocal', 0), + (3253, 12666, 'sound_exhale', 0), + (3254, 12667, 'sound_exitflap', 0), + (3255, 12668, 'sound_exitidle', 0), + (3256, 12669, 'sound_exitjump', 0), + (3257, 12670, 'sound_exitscream', 0), + (3258, 12671, 'sound_explode', 0), + (3259, 12672, 'sound_extinguish', 0), + (3260, 12673, 'sound_fall', 0), + (3261, 12674, 'sound_fall01', 0), + (3262, 12675, 'sound_fall02', 0), + (3263, 12676, 'sound_fallmetal', 0), + (3264, 12677, 'sound_filler', 0), + (3265, 12678, 'sound_fire', 0), + (3266, 12679, 'sound_fireswoosh', 0), + (3267, 12680, 'sound_fishing_cast01', 0), + (3268, 12681, 'sound_fishing_cast02', 0), + (3269, 12682, 'sound_fishing_cast03', 0), + (3270, 12683, 'sound_flame', 0), + (3271, 12684, 'sound_flamethrower', 0), + (3272, 12685, 'sound_flap', 0), + (3273, 12686, 'sound_flapup', 0), + (3274, 12687, 'sound_fleeflutter', 0), + (3275, 12688, 'sound_fluter', 0), + (3276, 12689, 'sound_fly_bite_rip', 0), + (3277, 12690, 'sound_foot', 0), + (3278, 12691, 'sound_footlayerleft', 0), + (3279, 12692, 'sound_footlayerright', 0), + (3280, 12693, 'sound_footstep', 0), + (3281, 12694, 'sound_footstomp', 0), + (3282, 12695, 'sound_foresting', 0), + (3283, 12696, 'sound_fuse', 0), + (3284, 12697, 'sound_gathering', 0), + (3285, 12698, 'sound_getup', 0), + (3286, 12699, 'sound_glide', 0), + (3287, 12700, 'sound_glide02', 0), + (3288, 12701, 'sound_growl', 0), + (3289, 12702, 'sound_gulp01', 0), + (3290, 12703, 'sound_gulp02', 0), + (3291, 12704, 'sound_hammerhit', 0), + (3292, 12705, 'sound_happy', 0), + (3293, 12706, 'sound_head', 0), + (3294, 12707, 'sound_headram_inhale', 0), + (3295, 12708, 'sound_headram_land', 0), + (3296, 12709, 'sound_headram_snort', 0), + (3297, 12710, 'sound_headram_swoosh', 0), + (3298, 12711, 'sound_headspark', 0), + (3299, 12712, 'sound_headturn', 0), + (3300, 12713, 'sound_heartattack', 0), + (3301, 12714, 'sound_hiss', 0), + (3302, 12715, 'sound_hit', 0), + (3303, 12716, 'sound_hoofleft', 0), + (3304, 12717, 'sound_hoofright', 0), + (3305, 12718, 'sound_hungry', 0), + (3306, 12719, 'sound_hungrycreak', 0), + (3307, 12720, 'sound_idle', 0), + (3308, 12721, 'sound_idle01', 0), + (3309, 12722, 'sound_idle02', 0), + (3310, 12723, 'sound_idle03_walk001', 0), + (3311, 12724, 'sound_idle03_walk002', 0), + (3312, 12725, 'sound_idle04', 0), + (3313, 12726, 'sound_idlebreath', 0), + (3314, 12727, 'sound_idlebubble', 0), + (3315, 12728, 'sound_idlechew', 0), + (3316, 12729, 'sound_idlecreak', 0), + (3317, 12730, 'sound_idleflap', 0), + (3318, 12731, 'sound_idleflapup', 0), + (3319, 12732, 'sound_idleglass', 0), + (3320, 12733, 'sound_idlegrowl', 0), + (3321, 12734, 'sound_idlehiss', 0), + (3322, 12735, 'sound_idlelaugh', 0), + (3323, 12736, 'sound_idlemoo', 0), + (3324, 12737, 'sound_idlepant', 0), + (3325, 12738, 'sound_idleroar01', 0), + (3326, 12739, 'sound_idleroar02', 0), + (3327, 12740, 'sound_idlerock', 0), + (3328, 12741, 'sound_idlescuff', 0), + (3329, 12742, 'sound_idleshort', 0), + (3330, 12743, 'sound_idlesniff', 0), + (3331, 12744, 'sound_idlesnort', 0), + (3332, 12745, 'sound_idletail', 0), + (3333, 12746, 'sound_idlevocal', 0), + (3334, 12747, 'sound_idlevocal01', 0), + (3335, 12748, 'sound_idlevocal02', 0), + (3336, 12749, 'sound_idlewater', 0), + (3337, 12750, 'sound_inahle', 0), + (3338, 12751, 'sound_inhale', 0), + (3339, 12752, 'sound_inhale001', 0), + (3340, 12753, 'sound_inhale002', 0), + (3341, 12754, 'sound_jawsnap', 0), + (3342, 12755, 'sound_jump', 0), + (3343, 12756, 'sound_knockback', 0), + (3344, 12757, 'sound_knockdown', 0), + (3345, 12758, 'sound_land', 0), + (3346, 12759, 'sound_land01', 0), + (3347, 12760, 'sound_land02', 0), + (3348, 12761, 'sound_laughlong', 0), + (3349, 12762, 'sound_lense', 0), + (3350, 12763, 'sound_lense3s', 0), + (3351, 12764, 'sound_lickpur01', 0), + (3352, 12765, 'sound_liddown', 0), + (3353, 12766, 'sound_lidup', 0), + (3354, 12767, 'sound_lipsmack', 0), + (3355, 12768, 'sound_mining', 0), + (3356, 12769, 'sound_moon', 0), + (3357, 12770, 'sound_mounthorse_foot', 0), + (3358, 12771, 'sound_mounthorse_land', 0), + (3359, 12772, 'sound_mounthorse_squeak', 0), + (3360, 12773, 'sound_neener', 0), + (3361, 12774, 'sound_offensive', 0), + (3362, 12775, 'sound_offensive001', 0), + (3363, 12776, 'sound_offensiveelec001', 0), + (3364, 12777, 'sound_open', 0), + (3365, 12778, 'sound_ouch', 0), + (3366, 12779, 'sound_ouchbase', 0), + (3367, 12780, 'sound_ouchbell', 0), + (3368, 12781, 'sound_ouchbend', 0), + (3369, 12782, 'sound_ouchbone', 0), + (3370, 12783, 'sound_ouchbubble', 0), + (3371, 12784, 'sound_ouchbuzz', 0), + (3372, 12785, 'sound_ouchchain', 0), + (3373, 12786, 'sound_ouchcreak', 0), + (3374, 12787, 'sound_ouchcrunch', 0), + (3375, 12788, 'sound_ouchfire', 0), + (3376, 12789, 'sound_ouchflame', 0), + (3377, 12790, 'sound_ouchflap', 0), + (3378, 12791, 'sound_ouchflutter', 0), + (3379, 12792, 'sound_ouchhit', 0), + (3380, 12793, 'sound_ouchliddown', 0), + (3381, 12794, 'sound_ouchlidopen', 0), + (3382, 12795, 'sound_ouchlidup', 0), + (3383, 12796, 'sound_ouchlow', 0), + (3384, 12797, 'sound_ouchpage', 0), + (3385, 12798, 'sound_ouchrock', 0), + (3386, 12799, 'sound_ouchrun', 0), + (3387, 12800, 'sound_ouchscream', 0), + (3388, 12801, 'sound_ouchshell', 0), + (3389, 12802, 'sound_ouchslam', 0), + (3390, 12803, 'sound_ouchsnort', 0), + (3391, 12804, 'sound_ouchsquawk', 0), + (3392, 12805, 'sound_ouchtail', 0), + (3393, 12806, 'sound_ouchvocal', 0), + (3394, 12807, 'sound_ouchwarble', 0), + (3395, 12808, 'sound_ouchwater', 0), + (3396, 12809, 'sound_ouchwhoosh', 0), + (3397, 12810, 'sound_ouchwing', 0), + (3398, 12811, 'sound_pain001', 0), + (3399, 12812, 'sound_pain002', 0), + (3400, 12813, 'sound_paw', 0), + (3401, 12814, 'sound_pen01', 0), + (3402, 12815, 'sound_pen02', 0), + (3403, 12816, 'sound_piercer', 0), + (3404, 12817, 'sound_purr', 0), + (3405, 12818, 'sound_purr02', 0), + (3406, 12819, 'sound_purr03', 0), + (3407, 12820, 'sound_raisehand', 0), + (3408, 12821, 'sound_rechargeresult', 0), + (3409, 12822, 'sound_recharging', 0), + (3410, 12823, 'sound_roar', 0), + (3411, 12824, 'sound_rockroll', 0), + (3412, 12825, 'sound_rofl', 0), + (3413, 12826, 'sound_rude', 0), + (3414, 12827, 'sound_run', 0), + (3415, 12828, 'sound_runcreak', 0), + (3416, 12829, 'sound_runflap', 0), + (3417, 12830, 'sound_runflap01', 0), + (3418, 12831, 'sound_runflap02', 0), + (3419, 12832, 'sound_runflapsmall', 0), + (3420, 12833, 'sound_runhit', 0), + (3421, 12834, 'sound_runland', 0), + (3422, 12835, 'sound_runleft', 0), + (3423, 12836, 'sound_runright', 0), + (3424, 12837, 'sound_runwing', 0), + (3425, 12838, 'sound_sad01', 0), + (3426, 12839, 'sound_sad02', 0), + (3427, 12840, 'sound_saw001', 0), + (3428, 12841, 'sound_saw002', 0), + (3429, 12842, 'sound_scratch', 0), + (3430, 12843, 'sound_scream', 0), + (3431, 12844, 'sound_scream01', 0), + (3432, 12845, 'sound_scream02', 0), + (3433, 12846, 'sound_shake', 0), + (3434, 12847, 'sound_sheathe', 0), + (3435, 12848, 'sound_sit', 0), + (3436, 12849, 'sound_sitenter', 0), + (3437, 12850, 'sound_sitexit', 0), + (3438, 12851, 'sound_sitidle', 0), + (3439, 12852, 'sound_sleep', 0), + (3440, 12853, 'sound_sleep001', 0), + (3441, 12854, 'sound_sleep002', 0), + (3442, 12855, 'sound_slither', 0), + (3443, 12856, 'sound_snap', 0), + (3444, 12857, 'sound_snarl', 0), + (3445, 12858, 'sound_sneer', 0), + (3446, 12859, 'sound_sneeze', 0), + (3447, 12860, 'sound_sneezeinhale', 0), + (3448, 12861, 'sound_snort', 0), + (3449, 12862, 'sound_spellvocal', 0), + (3450, 12863, 'sound_splash', 0), + (3451, 12864, 'sound_stand', 0), + (3452, 12865, 'sound_step', 0), + (3453, 12866, 'sound_stomp', 0), + (3454, 12867, 'sound_stompgrowl', 0), + (3455, 12868, 'sound_stompvocal', 0), + (3456, 12869, 'sound_stunfall', 0), + (3457, 12870, 'sound_stunned', 0), + (3458, 12871, 'sound_stunnedfall', 0), + (3459, 12872, 'sound_stunnedreturn', 0), + (3460, 12873, 'sound_stunnedwhirl', 0), + (3461, 12874, 'sound_stunshake', 0), + (3462, 12875, 'sound_stunsnort', 0), + (3463, 12876, 'sound_stunspin', 0), + (3464, 12877, 'sound_summon', 0), + (3465, 12878, 'sound_summonhit', 0), + (3466, 12879, 'sound_summonrock', 0), + (3467, 12880, 'sound_summonrock01', 0), + (3468, 12881, 'sound_summonrock02', 0), + (3469, 12882, 'sound_summonrockback', 0), + (3470, 12883, 'sound_summonslide', 0), + (3471, 12884, 'sound_summonstart', 0), + (3472, 12885, 'sound_summonvocal', 0), + (3473, 12886, 'sound_superbuff', 0), + (3474, 12887, 'sound_swim', 0), + (3475, 12888, 'sound_swimfast', 0), + (3476, 12889, 'sound_swoosh', 0), + (3477, 12890, 'sound_swooshkick', 0), + (3478, 12891, 'sound_swooshleft', 0), + (3479, 12892, 'sound_swooshright', 0), + (3480, 12893, 'sound_swooshtail', 0), + (3481, 12894, 'sound_taillash001', 0), + (3482, 12895, 'sound_taillash002', 0), + (3483, 12896, 'sound_tailswoosh', 0), + (3484, 12897, 'sound_tailvocal', 0), + (3485, 12898, 'sound_tailwhip', 0), + (3486, 12899, 'sound_taunt01', 0), + (3487, 12900, 'sound_taunt02', 0), + (3488, 12901, 'sound_taunt03', 0), + (3489, 12902, 'sound_thunder', 0), + (3490, 12903, 'sound_trick', 0), + (3491, 12904, 'sound_uncoil', 0), + (3492, 12905, 'sound_unsheathe', 0), + (3493, 12906, 'sound_vocalattack', 0), + (3494, 12907, 'sound_vocalbite', 0), + (3495, 12908, 'sound_vocalbuffet', 0), + (3496, 12909, 'sound_vocaldamage', 0), + (3497, 12910, 'sound_vocaldead', 0), + (3498, 12911, 'sound_vocaldeath', 0), + (3499, 12912, 'sound_vocalouch', 0), + (3500, 12913, 'sound_walk', 0), + (3501, 12914, 'sound_walk001', 0), + (3502, 12915, 'sound_walk002', 0), + (3503, 12916, 'sound_walk01', 0), + (3504, 12917, 'sound_walk02', 0), + (3505, 12918, 'sound_walk1', 0), + (3506, 12919, 'sound_walkbubble', 0), + (3507, 12920, 'sound_walkclaw', 0), + (3508, 12921, 'sound_walkflap', 0), + (3509, 12922, 'sound_walkflap01', 0), + (3510, 12923, 'sound_walkleft', 0), + (3511, 12924, 'sound_walkpiercer', 0), + (3512, 12925, 'sound_walkright', 0), + (3513, 12926, 'sound_walkrock', 0), + (3514, 12927, 'sound_walkservo', 0), + (3515, 12928, 'sound_walkservoleft', 0), + (3516, 12929, 'sound_walkservoright', 0), + (3517, 12930, 'sound_water', 0), + (3518, 12931, 'sound_waterstep', 0), + (3519, 12932, 'sound_whirl', 0), + (3520, 12933, 'sound_whirlmotor', 0), + (3521, 12934, 'sound_whirlwhoosh', 0), + (3522, 12935, 'sound_wildspring', 0), + (3523, 12936, 'sound_wildswing', 0), + (3524, 12937, 'sound_wildswinghit001', 0), + (3525, 12938, 'sound_wildswinghit002', 0), + (3526, 12939, 'sound_wing', 0), + (3527, 12940, 'sound_wingbuffet', 0), + (3528, 12941, 'sound_wingflap', 0), + (3529, 12942, 'sound_wingfold', 0), + (3530, 12943, 'sound_wingmove', 0), + (3531, 12944, 'sound_wingopen', 0), + (3532, 12945, 'sound_wings', 0), + (3533, 12946, 'sound_wingwind', 0), + (3534, 12947, 'sound_yawn001', 0), + (3535, 12948, 'sound_zap', 0), + (3536, 12949, 'spark_circle01', 0), + (3537, 12950, 'spark_circle02', 0), + (3538, 12951, 'spark_circle03', 0), + (3539, 12952, 'spark_circle04', 0), + (3540, 12953, 'spark_circle05', 0), + (3541, 12954, 'spark_sphere01', 0), + (3542, 12955, 'spark_sphere_ws', 0), + (3543, 12956, 'spark_sphere_ws_lefthand', 0), + (3544, 12957, 'sparkle01', 0), + (3545, 12958, 'sparkle02', 0), + (3546, 12959, 'sparkle03', 0), + (3547, 12960, 'sparkle_trail', 0), + (3548, 12961, 'sparks', 0), + (3549, 12962, 'sparks_lf', 0), + (3550, 12963, 'sparks_lr', 0), + (3551, 12964, 'sparks_rf', 0), + (3552, 12965, 'sparks_rr', 0), + (3553, 12966, 'speaknoevil', 0), + (3554, 12967, 'spellcast01', 0), + (3555, 12968, 'spellcast02', 0), + (3556, 12969, 'spider_webbshoot_snd', 0), + (3557, 12970, 'spider_webcover_snd', 0), + (3558, 12971, 'spinningwheel01', 0), + (3559, 12972, 'spinningwheel02', 0), + (3560, 12973, 'spinningwheel04', 0), + (3561, 12974, 'spinningwheel_success', 0), + (3562, 12975, 'spinningwheel_success02', 0), + (3563, 12976, 'spinningwheel_success03', 0), + (3564, 12977, 'spiritascend_snd', 0), + (3565, 12978, 'square', 0), + (3566, 12979, 'squeal', 0), + (3567, 12980, 'ss_singing_lp_snd', 0), + (3568, 12981, 'st_casttap_snd', 0), + (3569, 12982, 'st_tappestry_snd', 0), + (3570, 12983, 'stare', 0), + (3571, 12984, 'start', 0), + (3572, 12985, 'start_drone_sound', 0), + (3573, 12986, 'startburst_sound_01', 0), + (3574, 12987, 'steam01', 0), + (3575, 12988, 'steam_forearm_l', 0), + (3576, 12989, 'steam_forearm_r', 0), + (3577, 12990, 'steam_hip_l', 0), + (3578, 12991, 'steam_hip_l_death', 0), + (3579, 12992, 'steam_hip_r', 0), + (3580, 12993, 'steam_hip_r_death', 0), + (3581, 12994, 'steam_upperarm_l', 0), + (3582, 12995, 'steam_upperarm_r', 0), + (3583, 12996, 'stifle_cast_arm_snd', 0), + (3584, 12997, 'stifle_cast_lp_snd', 0), + (3585, 12998, 'stifle_result_snd', 0), + (3586, 12999, 'still', 0), + (3587, 13000, 'stinky', 0), + (3588, 13001, 'stove_boilover01', 0), + (3589, 13002, 'stove_boilover02', 0), + (3590, 13003, 'stove_boilover03', 0), + (3591, 13004, 'strafe_left', 0), + (3592, 13005, 'strafe_left_run', 0), + (3593, 13006, 'strafe_right', 0), + (3594, 13007, 'strafe_right_run', 0), + (3595, 13008, 'stretch', 0), + (3596, 13009, 'string_knotted', 0), + (3597, 13010, 'success01', 0), + (3598, 13011, 'success02', 0), + (3599, 13012, 'success_flash01', 0), + (3600, 13013, 'success_flash02', 0), + (3601, 13014, 'success_flash03', 0), + (3602, 13015, 'sulk', 0), + (3603, 13016, 'summon', 0), + (3604, 13017, 'summon_idle', 0), + (3605, 13018, 'super_buff', 0), + (3606, 13019, 'swear', 0), + (3607, 13020, 'sweep01', 0), + (3608, 13021, 'swim_attack', 0), + (3609, 13022, 'swim_backup', 0), + (3610, 13023, 'swim_foward', 0), + (3611, 13024, 'swim_idle', 0), + (3612, 13025, 'swim_ouch', 0), + (3613, 13026, 'swim_run', 0), + (3614, 13027, 'swim_tail', 0), + (3615, 13028, 'swim_tail_cloak', 0), + (3616, 13029, 'swim_walk', 0), + (3617, 13030, 'swoosh', 0), + (3618, 13031, 'swoosh_light_low', 0), + (3619, 13032, 'swoosh_medium', 0), + (3620, 13033, 'swwosh', 0), + (3621, 13034, 'ta_cast_snd', 0), + (3622, 13035, 'tail', 0), + (3623, 13036, 'tail_cloak', 0), + (3624, 13037, 'tail_dust', 0), + (3625, 13038, 'tailoring_failure', 0), + (3626, 13039, 'tailoring_idle', 0), + (3627, 13040, 'tailoring_success', 0), + (3628, 13041, 'talk_idle', 0), + (3629, 13042, 'talk_idle01', 0), + (3630, 13043, 'talk_idle02', 0), + (3631, 13044, 'talk_idle03', 0), + (3632, 13045, 'talk_idle04', 0), + (3633, 13046, 'talk_idle05', 0), + (3634, 13047, 'talk_idle06', 0), + (3635, 13048, 'talk_idle07', 0), + (3636, 13049, 'talk_idle08', 0), + (3637, 13050, 'talk_idle09', 0), + (3638, 13051, 'talk_idle10', 0), + (3639, 13052, 'talk_idle11', 0), + (3640, 13053, 'talk_idle12', 0), + (3641, 13054, 'tantrum', 0), + (3642, 13055, 'tantrum_short', 0), + (3643, 13056, 'tapfoot', 0), + (3644, 13057, 'taunt', 0), + (3645, 13058, 'taunt_combat_art', 0), + (3646, 13059, 'tc_teleport_snd', 0), + (3647, 13060, 'thaiko_sound', 0), + (3648, 13061, 'thanks', 0), + (3649, 13062, 'thirsty', 0), + (3650, 13063, 'threaten', 0), + (3651, 13064, 'thumbsup', 0), + (3652, 13065, 'thunder_clap', 0), + (3653, 13066, 'tiger_idle', 0), + (3654, 13067, 'tiger_run', 0), + (3655, 13068, 'tiger_walk', 0), + (3656, 13069, 'tod_explode_snd', 0), + (3657, 13070, 'tod_voltz_snd', 0), + (3658, 13071, 'tr_spawn_snd', 0), + (3659, 13072, 'tradeart_beaker01', 0), + (3660, 13073, 'tradeart_butcherknife01', 0), + (3661, 13074, 'tradeart_celticknot01', 0), + (3662, 13075, 'tradeart_flask01', 0), + (3663, 13076, 'tradeart_forge_hammer01', 0), + (3664, 13077, 'tradeart_forge_hammer02', 0), + (3665, 13078, 'tradeart_forge_helmet01', 0), + (3666, 13079, 'tradeart_fork01', 0), + (3667, 13080, 'tradeart_kitchenknife01', 0), + (3668, 13081, 'tradeart_log_cut', 0), + (3669, 13082, 'tradeart_metal_bar', 0), + (3670, 13083, 'tradeart_metal_rod01', 0), + (3671, 13084, 'tradeart_metal_sparkling2', 0), + (3672, 13085, 'tradeart_molecule01', 0), + (3673, 13086, 'tradeart_needle_left01', 0), + (3674, 13087, 'tradeart_needle_right01', 0), + (3675, 13088, 'tradeart_planer', 0), + (3676, 13089, 'tradeart_rune_01', 0), + (3677, 13090, 'tradeart_rune_02', 0), + (3678, 13091, 'tradeart_rune_03', 0), + (3679, 13092, 'tradeart_rune_04', 0), + (3680, 13093, 'tradeart_rune_05', 0), + (3681, 13094, 'tradeart_rune_06', 0), + (3682, 13095, 'tradeart_rune_07', 0), + (3683, 13096, 'tradeart_rune_08', 0), + (3684, 13097, 'tradeart_saw', 0), + (3685, 13098, 'tradeart_spoon01', 0), + (3686, 13099, 'trail_pike', 0), + (3687, 13100, 'transit', 0), + (3688, 13101, 'trdskl_beaker', 0), + (3689, 13102, 'trdskl_cloth', 0), + (3690, 13103, 'trdskl_feather', 0), + (3691, 13104, 'trdskl_fishingpole', 0), + (3692, 13105, 'trdskl_gem', 0), + (3693, 13106, 'trdskl_hammer', 0), + (3694, 13107, 'trdskl_hatchet', 0), + (3695, 13108, 'trdskl_hatchet_l', 0), + (3696, 13109, 'trdskl_leather', 0), + (3697, 13110, 'trdskl_magnifying', 0), + (3698, 13111, 'trdskl_mug', 0), + (3699, 13112, 'trdskl_needle', 0), + (3700, 13113, 'trdskl_pick', 0), + (3701, 13114, 'trdskl_pot', 0), + (3702, 13115, 'trdskl_saw', 0), + (3703, 13116, 'trdskl_scroll', 0), + (3704, 13117, 'trdskl_spoon', 0), + (3705, 13118, 'trdskl_testtube', 0), + (3706, 13119, 'trdskl_tongs', 0), + (3707, 13120, 'trdskl_vial', 0), + (3708, 13121, 'trdskl_wood', 0), + (3709, 13122, 'trem_boulder_snd', 0), + (3710, 13123, 'trem_cast_lp_snd', 0), + (3711, 13124, 'trem_open_snd', 0), + (3712, 13125, 'trem_rings_snd', 0), + (3713, 13126, 'trem_ringsh_snd', 0), + (3714, 13127, 'trem_rocks_lp_01_snd', 0), + (3715, 13128, 'trick', 0), + (3716, 13129, 'trt_treat_toxin_sound', 0), + (3717, 13130, 'turn_left', 0), + (3718, 13131, 'turn_right', 0), + (3719, 13132, 'turn_to_wood', 0), + (3720, 13133, 'u', 0), + (3721, 13134, 'unsummon', 0), + (3722, 13135, 'untrained_attack', 0), + (3723, 13136, 'untrained_backup', 0), + (3724, 13137, 'untrained_dodge', 0), + (3725, 13138, 'untrained_dodge01', 0), + (3726, 13139, 'untrained_dodge02', 0), + (3727, 13140, 'untrained_ouch', 0), + (3728, 13141, 'untrained_ouch01', 0), + (3729, 13142, 'untrained_parry', 0), + (3730, 13143, 'untrained_recoil', 0), + (3731, 13144, 'untrained_strafe_left', 0), + (3732, 13145, 'untrained_strafe_right', 0), + (3733, 13146, 'untrained_walk', 0), + (3734, 13147, 'util_rings_snd', 0), + (3735, 13148, 'vamp_batattack_sound', 0), + (3736, 13149, 'vamp_batflaps_sound', 0), + (3737, 13150, 'vamp_batsqueak_sound', 0), + (3738, 13151, 'ven_bkgrnd_slime_sound', 0), + (3739, 13152, 'ven_breath_01', 0), + (3740, 13153, 'ven_breath_02', 0), + (3741, 13154, 'ven_explode_sound', 0), + (3742, 13155, 'ven_fire_01', 0), + (3743, 13156, 'ven_fire_02', 0), + (3744, 13157, 'ven_pulse_sound', 0), + (3745, 13158, 'ven_rumble_01', 0), + (3746, 13159, 'ven_rumble_02', 0), + (3747, 13160, 'ven_slime_01', 0), + (3748, 13161, 'ven_slime_02', 0), + (3749, 13162, 'verdict_cast_snd', 0), + (3750, 13163, 'verdict_gavel_snd', 0), + (3751, 13164, 'vg_healing_snd', 0), + (3752, 13165, 'vg_leaves_snd', 0), + (3753, 13166, 'vg_leaveslp_snd', 0), + (3754, 13167, 'violin', 0), + (3755, 13168, 'viseme_a', 0), + (3756, 13169, 'viseme_aa', 0), + (3757, 13170, 'viseme_ae', 0), + (3758, 13171, 'viseme_ah', 0), + (3759, 13172, 'viseme_ao', 0), + (3760, 13173, 'viseme_aw', 0), + (3761, 13174, 'viseme_ay', 0), + (3762, 13175, 'viseme_b', 0), + (3763, 13176, 'viseme_c', 0), + (3764, 13177, 'viseme_ch', 0), + (3765, 13178, 'viseme_d', 0), + (3766, 13179, 'viseme_dh', 0), + (3767, 13180, 'viseme_e', 0), + (3768, 13181, 'viseme_eh', 0), + (3769, 13182, 'viseme_er', 0), + (3770, 13183, 'viseme_ey', 0), + (3771, 13184, 'viseme_f', 0), + (3772, 13185, 'viseme_g', 0), + (3773, 13186, 'viseme_h', 0), + (3774, 13187, 'viseme_ih', 0), + (3775, 13188, 'viseme_iy', 0), + (3776, 13189, 'viseme_j', 0), + (3777, 13190, 'viseme_k', 0), + (3778, 13191, 'viseme_l', 0), + (3779, 13192, 'viseme_m', 0), + (3780, 13193, 'viseme_n', 0), + (3781, 13194, 'viseme_ng', 0), + (3782, 13195, 'viseme_o', 0), + (3783, 13196, 'viseme_ow', 0), + (3784, 13197, 'viseme_oy', 0), + (3785, 13198, 'viseme_p', 0), + (3786, 13199, 'viseme_r', 0), + (3787, 13200, 'viseme_reast', 0), + (3788, 13201, 'viseme_rest', 0), + (3789, 13202, 'viseme_s', 0), + (3790, 13203, 'viseme_sh', 0), + (3791, 13204, 'viseme_t', 0), + (3792, 13205, 'viseme_th', 0), + (3793, 13206, 'viseme_u', 0), + (3794, 13207, 'viseme_uh', 0), + (3795, 13208, 'viseme_uw', 0), + (3796, 13209, 'viseme_v', 0), + (3797, 13210, 'viseme_w', 0), + (3798, 13211, 'viseme_x', 0), + (3799, 13212, 'viseme_y', 0), + (3800, 13213, 'viseme_z', 0), + (3801, 13214, 'viseme_zh', 0), + (3802, 13215, 'visemes_a', 0), + (3803, 13216, 'visemes_c', 0), + (3804, 13217, 'visemes_e', 0), + (3805, 13218, 'visemes_f', 0), + (3806, 13219, 'visemes_l', 0), + (3807, 13220, 'visemes_m', 0), + (3808, 13221, 'visemes_o', 0), + (3809, 13222, 'visemes_rest', 0), + (3810, 13223, 'visemes_u', 0), + (3811, 13224, 'visemes_w', 0), + (3812, 13225, 'vision_1', 0), + (3813, 13226, 'vision_2', 0), + (3814, 13227, 'vision_3', 0), + (3815, 13228, 'vision_4', 0), + (3816, 13229, 'vo_callout_afk', 0), + (3817, 13230, 'vo_callout_agree', 0), + (3818, 13231, 'vo_callout_apologies', 0), + (3819, 13232, 'vo_callout_assist', 0), + (3820, 13233, 'vo_callout_battle', 0), + (3821, 13234, 'vo_callout_cheer', 0), + (3822, 13235, 'vo_callout_confused', 0), + (3823, 13236, 'vo_callout_disagree', 0), + (3824, 13237, 'vo_callout_doh', 0), + (3825, 13238, 'vo_callout_flirt', 0), + (3826, 13239, 'vo_callout_follow', 0), + (3827, 13240, 'vo_callout_goodbye', 0), + (3828, 13241, 'vo_callout_got', 0), + (3829, 13242, 'vo_callout_greetings', 0), + (3830, 13243, 'vo_callout_growl', 0), + (3831, 13244, 'vo_callout_heal', 0), + (3832, 13245, 'vo_callout_help', 0), + (3833, 13246, 'vo_callout_helping', 0), + (3834, 13247, 'vo_callout_hungry', 0), + (3835, 13248, 'vo_callout_incoming', 0), + (3836, 13249, 'vo_callout_laugh', 0), + (3837, 13250, 'vo_callout_look', 0), + (3838, 13251, 'vo_callout_looking', 0), + (3839, 13252, 'vo_callout_out', 0), + (3840, 13253, 'vo_callout_run', 0), + (3841, 13254, 'vo_callout_starting', 0), + (3842, 13255, 'vo_callout_stay', 0), + (3843, 13256, 'vo_callout_taunting', 0), + (3844, 13257, 'vo_callout_thank', 0), + (3845, 13258, 'vo_callout_thirsty', 0), + (3846, 13259, 'vo_callout_threaten', 0), + (3847, 13260, 'vo_callout_train', 0), + (3848, 13261, 'vo_callout_under', 0), + (3849, 13262, 'vo_callout_vocal_attack', 0), + (3850, 13263, 'vo_callout_vocal_death', 0), + (3851, 13264, 'vo_callout_vocal_drown', 0), + (3852, 13265, 'vo_callout_vocal_jump', 0), + (3853, 13266, 'vo_callout_vocal_land', 0), + (3854, 13267, 'vo_callout_vocal_ouch', 0), + (3855, 13268, 'vo_callout_watch', 0), + (3856, 13269, 'vo_callout_yawn', 0), + (3857, 13270, 'vo_callout_yell', 0), + (3858, 13271, 'vocal_attack', 0), + (3859, 13272, 'vocal_attacklong', 0), + (3860, 13273, 'vocal_death', 0), + (3861, 13274, 'vocal_drown', 0), + (3862, 13275, 'vocal_jump', 0), + (3863, 13276, 'vocal_ouch', 0), + (3864, 13277, 'voidbeast_attack_snd', 0), + (3865, 13278, 'voidbeast_result_snd', 0), + (3866, 13279, 'vr2_burst_snd', 0), + (3867, 13280, 'vr2_flames_snd', 0), + (3868, 13281, 'w', 0), + (3869, 13282, 'wa_voltsword_sound', 0), + (3870, 13283, 'wa_voltswordstart_sound', 0), + (3871, 13284, 'walk', 0), + (3872, 13286, 'walk_shake', 0), + (3873, 13287, 'wave', 0), + (3874, 13288, 'welder_lefthand', 0), + (3875, 13289, 'welder_righthand', 0), + (3876, 13290, 'wheel', 0), + (3877, 13291, 'wheel1', 0), + (3878, 13292, 'wheel_smoke', 0), + (3879, 13293, 'whirling_attack', 0), + (3880, 13294, 'whistle', 0), + (3881, 13295, 'whome', 0), + (3882, 13296, 'wild_swing', 0), + (3883, 13297, 'wild_swing_recoilmax', 0), + (3884, 13298, 'wildswing', 0), + (3885, 13299, 'wince', 0), + (3886, 13300, 'wing_glide', 0), + (3887, 13301, 'wingflap', 0), + (3888, 13302, 'wings_01', 0), + (3889, 13303, 'wings_sound_01', 0), + (3890, 13304, 'wink', 0), + (3891, 13305, 'wkn_glowsplash_snd', 0), + (3892, 13306, 'wod_timer_tone_snd', 0), + (3893, 13307, 'woodworking_failure', 0), + (3894, 13308, 'woodworking_idle', 0), + (3895, 13309, 'woodworking_success', 0), + (3896, 13310, 'woowoo', 0), + (3897, 13311, 'wr_energy_glow_sound', 0), + (3898, 13312, 'wr_energy_glowout_sound', 0), + (3899, 13313, 'wr_glimmer_sound', 0), + (3900, 13314, 'wr_watershield_sound', 0), + (3901, 13315, 'ws_resounding_snd', 0), + (3902, 13316, 'ws_singout_snd', 0), + (3903, 13317, 'yeah', 0), + (3904, 13318, 'yell', 0), + (3905, 13319, 'zap', 0), + (3906, 13322, 'airborne', 0), + (3907, 13329, 'froglok_forestry_chopping', 0), + (3908, 13331, 'ogre_forestry_success', 0), + (3909, 13332, 'ogre_gathering_search', 0), + (3910, 13333, 'ogre_gathering_success', 0), + (3911, 13334, 'ogre_mining_success', 0), + (3912, 13458, 'attack_boss01', 0), + (3913, 13459, 'attack_boss02', 0), + (3914, 13460, 'buff_boss01', 0), + (3915, 13467, 'heal_boss01', 0), + (3916, 13469, 'result_fruitcake_explosion', 0), + (3917, 13470, 'result_snowball_big_explosion', 0), + (3918, 13542, 'sound_groundhit', 0), + (3919, 13601, 'froglok_1h_sword_attack_recoil', 0), + (3920, 13602, 'froglok_1h_sword_attack_recoil01', 0), + (3921, 13603, 'froglok_1h_sword_attack_recoil02', 0), + (3922, 13604, 'froglok_1h_sword_attack_recoil03', 0), + (3923, 13605, 'froglok_1h_thrown_attack', 0), + (3924, 13606, 'froglok_2h_sword_attack_recoil', 0), + (3925, 13607, 'froglok_2h_sword_attack_recoil01', 0), + (3926, 13608, 'froglok_2h_sword_attack_recoil02', 0), + (3927, 13609, 'froglok_2h_sword_backup', 0), + (3928, 13610, 'froglok_2h_sword_defensive_buff', 0), + (3929, 13611, 'froglok_2h_sword_enter', 0), + (3930, 13612, 'froglok_2h_sword_offensive_buff', 0), + (3931, 13613, 'froglok_2h_sword_ouch_backhand', 0), + (3932, 13614, 'froglok_2h_sword_ouch_down', 0), + (3933, 13615, 'froglok_2h_sword_ouch_forehand', 0), + (3934, 13616, 'froglok_2h_sword_ouch_thrust', 0), + (3935, 13617, 'froglok_2h_sword_parry_backhand', 0), + (3936, 13618, 'froglok_2h_sword_parry_down', 0), + (3937, 13619, 'froglok_2h_sword_parry_forehand', 0), + (3938, 13620, 'froglok_2h_sword_super_buff', 0), + (3939, 13621, 'froglok_2h_sword_walk', 0), + (3940, 13622, 'froglok_bostaff_attack_recoil', 0), + (3941, 13623, 'froglok_bostaff_attack_recoil01', 0), + (3942, 13624, 'froglok_bostaff_attack_recoil02', 0), + (3943, 13625, 'froglok_bostaff_attack_recoil03', 0), + (3944, 13626, 'froglok_bostaff_defensive_buff', 0), + (3945, 13627, 'froglok_bostaff_dodge_backhand', 0), + (3946, 13628, 'froglok_bostaff_dodge_down', 0), + (3947, 13629, 'froglok_bostaff_dodge_forehand', 0), + (3948, 13630, 'froglok_bostaff_dodge_thrust', 0), + (3949, 13631, 'froglok_bostaff_offensive_buff', 0), + (3950, 13632, 'froglok_bostaff_ouch_backhand', 0), + (3951, 13633, 'froglok_bostaff_ouch_down', 0), + (3952, 13634, 'froglok_bostaff_ouch_forehand', 0), + (3953, 13635, 'froglok_bostaff_ouch_thrust', 0), + (3954, 13636, 'froglok_bostaff_parry_backhand', 0), + (3955, 13637, 'froglok_bostaff_parry_down', 0), + (3956, 13638, 'froglok_bostaff_parry_forehand', 0), + (3957, 13639, 'froglok_bostaff_parry_thrust', 0), + (3958, 13640, 'froglok_bostaff_super_buff', 0), + (3959, 13641, 'froglok_dual_wield_attack_recoil', 0), + (3960, 13642, 'froglok_dual_wield_attack_recoil01', 0), + (3961, 13643, 'froglok_dual_wield_attack_recoil02', 0), + (3962, 13644, 'froglok_dual_wield_attack_recoil03', 0), + (3963, 13645, 'froglok_dual_wield_parry_backhand', 0), + (3964, 13646, 'froglok_dual_wield_parry_down', 0), + (3965, 13647, 'froglok_dual_wield_parry_forehand', 0), + (3966, 13648, 'froglok_dual_wield_parry_thrust', 0), + (3967, 13649, 'froglok_monk_attack_recoil', 0), + (3968, 13650, 'froglok_monk_attack_recoil02', 0), + (3969, 13651, 'froglok_monk_charge_up', 0), + (3970, 13652, 'froglok_monk_defensive_buff', 0), + (3971, 13653, 'froglok_monk_dodge_backhand', 0), + (3972, 13654, 'froglok_monk_dodge_down', 0), + (3973, 13655, 'froglok_monk_dodge_forehand', 0), + (3974, 13656, 'froglok_monk_dodge_thrust', 0), + (3975, 13657, 'froglok_monk_kick_flying', 0), + (3976, 13658, 'froglok_monk_offensive_buff', 0), + (3977, 13659, 'froglok_monk_ouch_down', 0), + (3978, 13660, 'froglok_monk_ouch_thrust', 0), + (3979, 13661, 'froglok_monk_parry_backhand', 0), + (3980, 13662, 'froglok_monk_parry_down', 0), + (3981, 13663, 'froglok_monk_parry_forehand', 0), + (3982, 13664, 'froglok_monk_parry_thrust', 0), + (3983, 13665, 'froglok_monk_super_buff', 0), + (3984, 13666, 'froglok_monk_taunt_combat_art', 0), + (3985, 13667, 'froglok_pike_attack_recoil', 0), + (3986, 13668, 'froglok_pike_attack_recoil01', 0), + (3987, 13669, 'froglok_pike_attack_recoil02', 0), + (3988, 13670, 'froglok_pike_charge_up', 0), + (3989, 13671, 'froglok_pike_dodge_backhand', 0), + (3990, 13672, 'froglok_pike_dodge_down', 0), + (3991, 13673, 'froglok_pike_dodge_forehand', 0), + (3992, 13674, 'froglok_pike_dodge_thrust', 0), + (3993, 13675, 'froglok_pike_offensive_buff', 0), + (3994, 13676, 'froglok_pike_ouch_backhand', 0), + (3995, 13677, 'froglok_pike_ouch_down', 0), + (3996, 13678, 'froglok_pike_ouch_forehand', 0), + (3997, 13679, 'froglok_pike_ouch_thrust', 0), + (3998, 13680, 'froglok_pike_parry_backhand', 0), + (3999, 13681, 'froglok_pike_parry_down', 0), + (4000, 13682, 'froglok_pike_parry_forehand', 0), + (4001, 13683, 'froglok_pike_parry_thrust', 0), + (4002, 13684, 'froglok_pugilist_attack_recoil02', 0), + (4003, 13685, 'froglok_pugilist_defensive_buff', 0), + (4004, 13686, 'froglok_pugilist_dodge_backhand', 0), + (4005, 13687, 'froglok_pugilist_dodge_down', 0), + (4006, 13688, 'froglok_pugilist_dodge_forehand', 0), + (4007, 13689, 'froglok_pugilist_dodge_thrust', 0), + (4008, 13690, 'froglok_pugilist_offensive_buff', 0), + (4009, 13691, 'froglok_pugilist_ouch_backhand', 0), + (4010, 13692, 'froglok_pugilist_ouch_down', 0), + (4011, 13693, 'froglok_pugilist_ouch_forehand', 0), + (4012, 13694, 'froglok_pugilist_super_buff', 0), + (4013, 13705, 'froglok_bostaff_charge_up', 0), + (4014, 13706, 'froglok_dual_wield_knockdowntoknees', 0), + (4015, 13707, 'froglok_dual_wield_offensive_buff', 0), + (4016, 13708, 'froglok_dual_wield_super_buff', 0), + (4017, 13709, 'froglok_knockdown_attack', 0), + (4018, 13710, 'froglok_knockdowntoknees', 0), + (4019, 13711, 'froglok_offensive_buff', 0), + (4020, 13712, 'froglok_pike_backup', 0), + (4021, 13713, 'froglok_pike_knockdowntoknees', 0), + (4022, 13714, 'froglok_pike_walk', 0), + (4023, 13715, 'froglok_pugilist_attack01', 0), + (4024, 13716, 'froglok_pugilist_attack_recoil01', 0), + (4025, 13717, 'froglok_pugilist_knockdowntoknees', 0), + (4026, 13718, 'froglok_super_buff', 0), + (4027, 13720, 'lights', 0), + (4028, 13721, 'lights_spiral', 0), + (4029, 13731, 'fae_light_dance', 0), + (4030, 13732, 'horse_long_fall', 0), + (4031, 13735, 'trdskl_fruitcake', 0), + (4032, 13744, 'fire01_big', 0), + (4033, 13745, 'fire01_small', 0), + (4034, 13747, 'lights_blue', 0), + (4035, 13748, 'lights_blue_slow', 0), + (4036, 13749, 'lights_flocked', 0), + (4037, 13750, 'lights_gold', 0), + (4038, 13751, 'lights_gold_slow', 0), + (4039, 13752, 'lights_red', 0), + (4040, 13753, 'lights_red_slow', 0), + (4041, 13754, 'lights_white', 0), + (4042, 13755, 'lights_white_slow', 0), + (4043, 13785, 'dwarf_forestry_success', 0), + (4044, 13786, 'gnome_forestry_success', 0), + (4045, 13787, 'halfling_forestry_success', 0), + (4046, 13789, 'ogre_1h_crush_ouch_forehand', 0), + (4047, 13790, 'ogre_1h_pierce_ouch_forehand', 0), + (4048, 13791, 'ogre_1h_sword_ouch_forehand', 0), + (4049, 13792, 'ogre_1h_thrown_ouch_forehand', 0), + (4050, 13793, 'ogre_2h_sword_dodge_backhand', 0), + (4051, 13794, 'ogre_2h_sword_dodge_forehand', 0), + (4052, 13795, 'ogre_2h_sword_ouch_down', 0), + (4053, 13796, 'ogre_2h_sword_ouch_thrust', 0), + (4054, 13797, 'ogre_dual_wield_dodge_backhand', 0), + (4055, 13798, 'ogre_dual_wield_dodge_forehand', 0), + (4056, 13799, 'ogre_dual_wield_ouch_forehand', 0), + (4057, 13800, 'ogre_pike_dodge_backhand', 0), + (4058, 13801, 'ogre_pike_dodge_forehand', 0), + (4059, 13802, 'ogre_pike_kick', 0), + (4060, 13803, 'ogre_pike_ouch_backhand', 0), + (4061, 13804, 'ogre_pike_ouch_down', 0), + (4062, 13805, 'ogre_pike_ouch_forehand', 0), + (4063, 13806, 'ogre_pike_ouch_thrust', 0), + (4064, 13816, 'darkelf_female_2h_sword_wild_swing', 0), + (4065, 13817, 'erudite_female_2h_sword_wild_swing', 0), + (4066, 13818, 'fae_light_2h_sword_whirling_attack', 0), + (4067, 13819, 'fae_light_2h_sword_wild_swing', 0), + (4068, 13820, 'fae_light_female_2h_sword_wild_swing', 0), + (4069, 13821, 'gnome_female_2h_sword_wild_swing', 0), + (4070, 13822, 'halfelf_female_2h_sword_wild_swing', 0), + (4071, 13823, 'highelf_female_2h_sword_wild_swing', 0), + (4072, 13824, 'human_female_2h_sword_wild_swing', 0), + (4073, 13825, 'iksar_female_2h_sword_wild_swing', 0), + (4074, 13827, 'kerra_female_2h_sword_wild_swing', 0), + (4075, 13828, 'ratonga_female_2h_sword_wild_swing', 0), + (4076, 13830, 'troll_female_2h_sword_wild_swing', 0), + (4077, 13831, 'woodelf_female_2h_sword_wild_swing', 0), + (4078, 13850, 'darkelf_female_pike_charge_up', 0), + (4079, 13851, 'darkelf_female_pike_defensive_buff', 0), + (4080, 13852, 'darkelf_female_pike_offensive_buff', 0), + (4081, 13853, 'erudite_female_pike_charge_up', 0), + (4082, 13854, 'erudite_female_pike_defensive_buff', 0), + (4083, 13855, 'erudite_female_pike_offensive_buff', 0), + (4084, 13856, 'fae_light_female_pike_charge_up', 0), + (4085, 13857, 'fae_light_female_pike_defensive_buff', 0), + (4086, 13858, 'fae_light_female_pike_offensive_buff', 0), + (4087, 13859, 'fae_light_untrained_ouch01', 0), + (4088, 13860, 'gnome_female_pike_charge_up', 0), + (4089, 13861, 'gnome_female_pike_defensive_buff', 0), + (4090, 13862, 'gnome_female_pike_offensive_buff', 0), + (4091, 13863, 'halfelf_female_pike_charge_up', 0), + (4092, 13864, 'halfelf_female_pike_defensive_buff', 0), + (4093, 13865, 'halfelf_female_pike_offensive_buff', 0), + (4094, 13866, 'highelf_female_pike_charge_up', 0), + (4095, 13867, 'highelf_female_pike_defensive_buff', 0), + (4096, 13868, 'highelf_female_pike_offensive_buff', 0), + (4097, 13869, 'human_female_pike_charge_up', 0), + (4098, 13870, 'human_female_pike_defensive_buff', 0), + (4099, 13871, 'human_female_pike_offensive_buff', 0), + (4100, 13872, 'iksar_female_pike_charge_up', 0), + (4101, 13873, 'iksar_female_pike_defensive_buff', 0), + (4102, 13874, 'iksar_female_pike_offensive_buff', 0), + (4103, 13876, 'kerra_female_pike_charge_up', 0), + (4104, 13877, 'kerra_female_pike_defensive_buff', 0), + (4105, 13878, 'kerra_female_pike_offensive_buff', 0), + (4106, 13879, 'ratonga_female_pike_charge_up', 0), + (4107, 13880, 'ratonga_female_pike_defensive_buff', 0), + (4108, 13881, 'ratonga_female_pike_offensive_buff', 0), + (4109, 13883, 'troll_female_pike_charge_up', 0), + (4110, 13884, 'troll_female_pike_defensive_buff', 0), + (4111, 13885, 'troll_female_pike_offensive_buff', 0), + (4112, 13886, 'woodelf_female_pike_charge_up', 0), + (4113, 13887, 'woodelf_female_pike_defensive_buff', 0), + (4114, 13888, 'woodelf_female_pike_offensive_buff', 0), + (4115, 13937, 'design_frostfell_candy_canes', 0), + (4116, 13958, 'fire_hearts', 0), + (4117, 14010, 'result_heart_vision', 0), + (4118, 14011, 'result_heartbreak', 0), + (4119, 14023, 'result_flies', 0), + (4120, 14024, 'result_weapon_trail_poison', 0), + (4121, 14175, 'result_dagger_vision_p2p', 0), + (4122, 14176, 'result_heart_vision_p2p', 0), + (4123, 14186, 'flirt_short_butt', 0), + (4124, 14187, 'flirt_short_leg', 0), + (4125, 14188, 'flirt_short_shake', 0), + (4126, 14189, 'flirt_short_wave', 0), + (4127, 14190, 'flirt_short_wave2', 0), + (4128, 14191, 'flirt_short_wave3', 0), + (4129, 14193, 'result_heart_success', 0), + (4130, 14223, 'design_result_static_scare', 0), + (4131, 14225, 'result_fog_poison_billboards', 0), + (4132, 14226, 'result_fog_poison_billboards_small', 0), + (4133, 14227, 'result_fog_poison_billboards_thinner', 0), + (4134, 14228, 'roxbury', 0), + (4135, 14242, 'cast_pfx_notes_l', 0), + (4136, 14243, 'cast_pfx_notes_r', 0), + (4137, 14312, 'sound_unrest_quel_piano', 0), + (4138, 14323, 'water', 0), + (4139, 14364, '1h_wand_attack', 0), + (4140, 14365, '1h_wand_attack01', 0), + (4141, 14366, '1h_wand_attack02', 0), + (4142, 14367, '1h_wand_attack03', 0), + (4143, 14368, '1h_wand_attack_recoil', 0), + (4144, 14369, '1h_wand_attack_recoil01', 0), + (4145, 14370, '1h_wand_attack_recoil02', 0), + (4146, 14371, '1h_wand_attack_recoil03', 0), + (4147, 14372, '1h_wand_backup', 0), + (4148, 14373, '1h_wand_dodge_backhand', 0), + (4149, 14374, '1h_wand_dodge_down', 0), + (4150, 14375, '1h_wand_dodge_forehand', 0), + (4151, 14376, '1h_wand_dodge_thrust', 0), + (4152, 14377, '1h_wand_enter', 0), + (4153, 14378, '1h_wand_exit', 0), + (4154, 14379, '1h_wand_idle', 0), + (4155, 14380, '1h_wand_ouch_backhand', 0), + (4156, 14381, '1h_wand_ouch_down', 0), + (4157, 14382, '1h_wand_ouch_forehand', 0), + (4158, 14383, '1h_wand_ouch_thrust', 0), + (4159, 14384, '1h_wand_parry_backhand', 0), + (4160, 14385, '1h_wand_parry_down', 0), + (4161, 14386, '1h_wand_parry_forehand', 0), + (4162, 14387, '1h_wand_parry_thrust', 0), + (4163, 14388, '1h_wand_strafe_left', 0), + (4164, 14389, '1h_wand_strafe_right', 0), + (4165, 14390, '1h_wand_walk', 0), + (4166, 14401, 'snd_design_unrest_zombie_scare', 0), + (4167, 14407, 'constant2_fx', 0), + (4168, 14420, 'result_sparkles_explode_noise', 0), + (4169, 14422, 'sound_howl', 0), + (4170, 14460, 'attack_recoil', 0), + (4171, 14461, 'attack_recoil01', 0), + (4172, 14462, 'attack_recoil02', 0), + (4173, 14463, 'attack_recoil03', 0), + (4174, 14469, 'parry_backhand', 0), + (4175, 14470, 'parry_down', 0), + (4176, 14471, 'parry_forehand', 0), + (4177, 14472, 'parry_thrust', 0), + (4178, 14497, 'monk_offensive_buff_short', 0), + (4179, 14506, 'result_sparkle_trail_weapon_right_glow_blend_brown', 0), + (4180, 14507, 'result_sparkle_trail_weapon_right_glow_blend_purple', 0), + (4181, 14508, 'result_sparkle_trail_weapon_right_glow_silver', 0), + (4182, 14509, 'result_sparkle_trail_weapon_right_glow_tan', 0), + (4183, 14519, '1h_pierce_attack_03', 0), + (4184, 14535, 'result_sparkle_trail_rightfoot_glow', 0), + (4185, 14555, 'cast_mist_sphere_sub', 0), + (4186, 14561, 'result_ghost_shield_p2p', 0), + (4187, 14576, 'design_flying_barrel', 0), + (4188, 14585, 'result_breaking_faith_wall', 0), + (4189, 14589, 'cached_state2', 0), + (4190, 14623, 'result_flash_weapon_brown', 0), + (4191, 14624, 'result_flash_weapon_purple', 0), + (4192, 14625, 'result_flash_weapon_silver', 0), + (4193, 14626, 'result_glow_weapon_tan', 0), + (4194, 14627, 'result_mist_clingy_sub', 0), + (4195, 14628, 'result_shout', 0), + (4196, 14681, 'cast_debuff_blend', 0), + (4197, 14684, 'cast_shield_grow_blend', 0), + (4198, 14721, 'design_result_bubble_ring', 0), + (4199, 14736, 'fel_epic_symbol', 0), + (4200, 14739, 'warg_backup', 0), + (4201, 14740, 'warg_fall', 0), + (4202, 14741, 'warg_idle', 0), + (4203, 14742, 'warg_jump', 0), + (4204, 14743, 'warg_jump_substitute', 0), + (4205, 14744, 'warg_land', 0), + (4206, 14745, 'warg_long_fall', 0), + (4207, 14746, 'warg_run', 0), + (4208, 14747, 'warg_turn_left', 0), + (4209, 14748, 'warg_turn_right', 0), + (4210, 14749, 'warg_walk', 0), + (4211, 14797, 'electric_hands_l', 0), + (4212, 14798, 'electric_hands_r', 0), + (4213, 14802, 'trdskl_horn', 0), + (4214, 14810, 'warg_idle01', 0), + (4215, 14811, 'warg_idle02', 0), + (4216, 14839, 'pawstep_trigger', 0), + (4217, 14869, 'result_deathward_heal', 0), + (4218, 14870, 'result_doppleganger_p2p', 0), + (4219, 14871, 'result_eyehand_buff', 0), + (4220, 14889, 'cast_acid_storm_damage', 0), + (4221, 14895, 'result_acid_rain_damage', 0), + (4222, 14896, 'result_acid_storm_damage', 0), + (4223, 14904, 'pawstep', 0), + (4224, 14913, 'pawstep_snow', 0), + (4225, 14918, 'snd_horn_centaur', 0), + (4226, 14919, 'snd_horn_conch', 0), + (4227, 14920, 'snd_horn_gnoll', 0), + (4228, 14921, 'snd_horn_goblin', 0), + (4229, 14924, 'cast_ball_lightning_damage', 0), + (4230, 14925, 'cast_conjuror', 0), + (4231, 14937, 'result_countersong_p2p', 0), + (4232, 14938, 'result_rays_of_disintigration', 0), + (4233, 14939, 'result_rays_of_disintigration_p2p', 0), + (4234, 14945, 'cast_vampirism_p2p', 0), + (4235, 14947, 'froglok_warg_idle', 0), + (4236, 14948, 'froglok_warg_jump_substitute', 0), + (4237, 14978, 'particle_mood_combat_enter', 0), + (4238, 14979, 'result_fatal_followup', 0), + (4239, 14980, 'result_puppetmaster', 0), + (4240, 14989, 'special', 0), + (4241, 14996, 'result_barrier', 0), + (4242, 14997, 'result_softkill', 0), + (4243, 15001, 'cast_leaf_blower_p2p', 0), + (4244, 15004, 'cast_waterflush_p2p', 0), + (4245, 15007, 'result_firewhimsy_p2p', 0), + (4246, 15008, 'result_leaves_sticky', 0), + (4247, 15009, 'result_p2p_lightning_bolts', 0), + (4248, 15051, 'design_spotlight', 0), + (4249, 15053, 'pawstep_leather_carpet', 0), + (4250, 15054, 'pawstep_leather_dirt', 0), + (4251, 15055, 'pawstep_leather_grass', 0), + (4252, 15056, 'pawstep_leather_gravel', 0), + (4253, 15057, 'pawstep_leather_ice', 0), + (4254, 15058, 'pawstep_leather_metal', 0), + (4255, 15059, 'pawstep_leather_mud', 0), + (4256, 15060, 'pawstep_leather_sand', 0), + (4257, 15061, 'pawstep_leather_snow', 0), + (4258, 15062, 'pawstep_leather_stone', 0), + (4259, 15063, 'pawstep_leather_water', 0), + (4260, 15064, 'pawstep_leather_wood', 0), + (4261, 15094, 'snd_fire_large_loop', 0), + (4262, 15109, 'sound_peck', 0), + (4263, 15117, 'sound_damagefeather', 0), + (4264, 15120, 'cast_dirge_stringed_loop', 0), + (4265, 15122, 'cast_horn_blowing_end', 0), + (4266, 15123, 'cast_horn_blowing_loop', 0), + (4267, 15128, 'fae_dark_1h_sword_attack', 0), + (4268, 15129, 'fae_dark_1h_sword_attack01', 0), + (4269, 15130, 'fae_dark_1h_sword_attack02', 0), + (4270, 15131, 'fae_dark_1h_sword_attack03', 0), + (4271, 15132, 'fae_dark_1h_sword_death_blow', 0), + (4272, 15133, 'fae_dark_1h_sword_death_blow01', 0), + (4273, 15134, 'fae_dark_1h_sword_dodge_backhand', 0), + (4274, 15135, 'fae_dark_1h_sword_dodge_down', 0), + (4275, 15136, 'fae_dark_1h_sword_dodge_forehand', 0), + (4276, 15137, 'fae_dark_1h_sword_dodge_thrust', 0), + (4277, 15138, 'fae_dark_1h_sword_ouch_backhand', 0), + (4278, 15139, 'fae_dark_1h_sword_ouch_down', 0), + (4279, 15140, 'fae_dark_1h_sword_ouch_forehand', 0), + (4280, 15141, 'fae_dark_1h_sword_ouch_thrust', 0), + (4281, 15142, 'fae_dark_1h_sword_parry_backhand', 0), + (4282, 15143, 'fae_dark_1h_sword_parry_down', 0), + (4283, 15144, 'fae_dark_1h_sword_parry_forehand', 0), + (4284, 15145, 'fae_dark_1h_sword_parry_thrust', 0), + (4285, 15146, 'fae_dark_2h_sword_attack', 0), + (4286, 15147, 'fae_dark_2h_sword_attack01', 0), + (4287, 15148, 'fae_dark_2h_sword_attack02', 0), + (4288, 15149, 'fae_dark_2h_sword_defensive_buff', 0), + (4289, 15150, 'fae_dark_2h_sword_dodge_backhand', 0), + (4290, 15151, 'fae_dark_2h_sword_dodge_down', 0), + (4291, 15152, 'fae_dark_2h_sword_dodge_forehand', 0), + (4292, 15153, 'fae_dark_2h_sword_enter', 0), + (4293, 15154, 'fae_dark_2h_sword_kick', 0), + (4294, 15155, 'fae_dark_2h_sword_ouch_backhand', 0), + (4295, 15156, 'fae_dark_2h_sword_ouch_down', 0), + (4296, 15157, 'fae_dark_2h_sword_ouch_forehand', 0), + (4297, 15158, 'fae_dark_2h_sword_ouch_thrust', 0), + (4298, 15159, 'fae_dark_2h_sword_whirling_attack', 0), + (4299, 15160, 'fae_dark_2h_sword_wild_swing', 0), + (4300, 15161, 'fae_dark_bostaff_attack01', 0), + (4301, 15162, 'fae_dark_bostaff_attack02', 0), + (4302, 15163, 'fae_dark_bostaff_attack03', 0), + (4303, 15164, 'fae_dark_bostaff_dodge_backhand', 0), + (4304, 15165, 'fae_dark_bostaff_dodge_forehand', 0), + (4305, 15166, 'fae_dark_climbing_backup', 0), + (4306, 15167, 'fae_dark_climbing_enter_down_root', 0), + (4307, 15168, 'fae_dark_climbing_exit_up_root', 0), + (4308, 15169, 'fae_dark_climbing_idle', 0), + (4309, 15170, 'fae_dark_climbing_strafe_left', 0), + (4310, 15171, 'fae_dark_climbing_strafe_right', 0), + (4311, 15172, 'fae_dark_climbing_walk', 0), + (4312, 15173, 'fae_dark_dance', 0), + (4313, 15174, 'fae_dark_dead', 0), + (4314, 15175, 'fae_dark_dead_enter', 0), + (4315, 15176, 'fae_dark_dual_wield_attack', 0), + (4316, 15177, 'fae_dark_dual_wield_attack01', 0), + (4317, 15178, 'fae_dark_dual_wield_attack02', 0), + (4318, 15179, 'fae_dark_dual_wield_attack03', 0), + (4319, 15180, 'fae_dark_dual_wield_dodge_backhand', 0), + (4320, 15181, 'fae_dark_dual_wield_dodge_forehand', 0), + (4321, 15182, 'fae_dark_dual_wield_kick', 0), + (4322, 15183, 'fae_dark_dual_wield_ouch_backhand', 0), + (4323, 15184, 'fae_dark_dual_wield_ouch_forehand', 0), + (4324, 15185, 'fae_dark_dual_wield_parry_down', 0), + (4325, 15186, 'fae_dark_dual_wield_whirling_attack', 0), + (4326, 15187, 'fae_dark_dual_wield_wild_swing', 0), + (4327, 15188, 'fae_dark_idle', 0), + (4328, 15189, 'fae_dark_monk_attack', 0), + (4329, 15190, 'fae_dark_monk_attack01', 0), + (4330, 15191, 'fae_dark_monk_attack02', 0), + (4331, 15192, 'fae_dark_monk_attack03', 0), + (4332, 15193, 'fae_dark_monk_dodge_backhand', 0), + (4333, 15194, 'fae_dark_monk_dodge_down', 0), + (4334, 15195, 'fae_dark_monk_wild_swing', 0), + (4335, 15196, 'fae_dark_pike_attack', 0), + (4336, 15197, 'fae_dark_pike_attack01', 0), + (4337, 15198, 'fae_dark_pike_attack02', 0), + (4338, 15199, 'fae_dark_pike_kick', 0), + (4339, 15200, 'fae_dark_pike_whirling_attack', 0), + (4340, 15201, 'fae_dark_pike_wild_swing', 0), + (4341, 15202, 'fae_dark_pugilist_attack', 0), + (4342, 15203, 'fae_dark_pugilist_attack02', 0), + (4343, 15204, 'fae_dark_pugilist_kick', 0), + (4344, 15205, 'fae_dark_pugilist_whirling_attack', 0), + (4345, 15206, 'fae_dark_pugilist_wild_swing', 0), + (4346, 15207, 'fae_dark_run', 0), + (4347, 15208, 'fae_dark_sit_enter', 0), + (4348, 15209, 'fae_dark_sit_exit', 0), + (4349, 15210, 'fae_dark_sit_idle', 0), + (4350, 15211, 'fae_dark_untrained_ouch01', 0), + (4351, 15232, 'cast_summon_undead_assemble', 0), + (4352, 15233, 'cast_summon_undead_cyclone', 0), + (4353, 15234, 'cast_summon_undead_flame_spurt', 0), + (4354, 15235, 'cast_summon_undead_yawn', 0), + (4355, 15245, 'result_clouds_head', 0), + (4356, 15246, 'run01', 0), + (4357, 15247, 'run02', 0), + (4358, 15258, 'cast_bard_drum_persist', 0), + (4359, 15259, 'cast_bard_flute_persist', 0), + (4360, 15260, 'cast_bard_stringed_persist', 0), + (4361, 15265, 'result_soulsuck_p2p', 0), + (4362, 15301, 'design_fireworks_show_10', 0), + (4363, 15302, 'design_fireworks_show_2', 0), + (4364, 15303, 'design_fireworks_show_4', 0), + (4365, 15304, 'design_fireworks_show_6', 0), + (4366, 15307, 'sound_bud', 0), + (4367, 15308, 'sound_idle_legs', 0), + (4368, 15321, 'design_neriak_opera_backdrop_moon', 0), + (4369, 15322, 'design_neriak_opera_backdrop_palace', 0), + (4370, 15323, 'design_neriak_opera_backdrop_sky', 0), + (4371, 15324, 'design_neriak_opera_backdrop_trees', 0), + (4372, 15334, 'trdskl_metal_sparks', 0), + (4373, 15363, 'sound_deathwing', 0), + (4374, 15364, 'sound_idlebreathe', 0), + (4375, 15365, 'sound_idlewing', 0), + (4376, 15366, 'sound_stinger', 0), + (4377, 15367, 'sound_swooshstinger', 0), + (4378, 15409, 'result_anvil_drop', 0), + (4379, 15418, 'walk01', 0), + (4380, 15419, 'walk02', 0), + (4381, 15475, 'result_star_burst', 0), + (4382, 15476, 'result_stunned_star', 0), + (4383, 15529, 'attack_02', 0), + (4384, 15533, 'green_smoke-ouch', 0), + (4385, 15534, 'green_smoke_ouch', 0), + (4386, 15536, 'royal_wave_short', 0), + (4387, 15538, 'spike_ball01', 0), + (4388, 15539, 'spike_ball02', 0), + (4389, 15540, 'spike_ball03', 0), + (4390, 15588, 'draw_weapon', 0), + (4391, 15589, 'fel_epic_symbol_outer', 0), + (4392, 15611, 'draw_weapon_idle', 0), + (4393, 15614, 'sheathe_weapon_idle', 0), + (4394, 15615, 'fade_cast_sound', 0), + (4395, 15616, 'fade_reverse_sound', 0), + (4396, 15617, 'cast_poison_dragon_breath_test', 0), + (4397, 15618, 'cast_pricecheck', 0), + (4398, 15619, 'constant_fx', 0), + (4399, 15620, 'instant_fx', 0), + (4400, 15621, 'sd_spiritdescend_snd', 0), + (4401, 15622, '1h_sword_idle01', 0), + (4402, 15629, 'paperdoll', 0), + (4403, 15637, 'tail_combat', 0), + (4404, 15640, 'aura_yellow', 0), + (4405, 15641, 'cast_lhand_sparkle_trail_blend', 0), + (4406, 15644, 'cast_rhand_sparkle_trail_blend', 0), + (4407, 15652, 'tail_run', 0), + (4408, 15657, 'climbing_chainmail_rope', 0), + (4409, 15658, 'climbing_leather_rope', 0), + (4410, 15659, 'climbing_metal_rope', 0), + (4411, 15662, 'run_tail', 0), + (4412, 15669, 'result_cold_ice_crystals_hands', 0), + (4413, 15670, 'result_cold_ice_crystals_lefthand', 0), + (4414, 15671, 'result_cold_ice_crystals_righthand', 0), + (4415, 15672, 'result_hand_rings_fire', 0), + (4416, 15673, 'result_hand_rings_ice', 0), + (4417, 15674, 'result_hand_rings_lightning', 0), + (4418, 15675, 'result_rock_hands', 0), + (4419, 15678, 'attack_fx', 0), + (4420, 15685, 'result_plant_filaments', 0), + (4421, 15693, 'sound_damagestone', 0), + (4422, 15694, 'sound_deadloud', 0), + (4423, 15699, 'cast_skull_grow', 0), + (4424, 15700, 'cast_sonic_ring', 0), + (4425, 15701, 'cast_sonic_ring_vertical', 0), + (4426, 15704, 'result_poison_cysts_popping', 0), + (4427, 15705, 'result_silence', 0), + (4428, 15712, 'result_gangrene', 0), + (4429, 15720, 'snd_aof_anvilfall', 0), + (4430, 15721, 'snd_aof_anvilhit', 0), + (4431, 15729, 'snd_acidrain_cast', 0), + (4432, 15730, 'snd_acidrain_result', 0), + (4433, 15736, 'death', 0), + (4434, 15739, 'sheathe_weapon', 0), + (4435, 15740, 'snd_design_terror001', 0), + (4436, 15741, 'snd_design_terror002', 0), + (4437, 15742, 'snd_design_terror003', 0), + (4438, 15743, 'snd_design_terror004', 0), + (4439, 15744, 'snd_design_terror005', 0), + (4440, 15745, 'snd_design_terror006', 0), + (4441, 15746, 'snd_design_terror007', 0), + (4442, 15747, 'snd_design_terror008', 0), + (4443, 15748, 'snd_design_terror009', 0), + (4444, 15749, 'snd_design_terror010', 0), + (4445, 15750, 'snd_design_terror011', 0), + (4446, 15751, 'snd_design_terror012', 0), + (4447, 15752, 'snd_design_terror020', 0), + (4448, 15753, 'sound_blow', 0), + (4449, 15754, 'sound_deathfall1', 0), + (4450, 15755, 'sound_deathfall2', 0), + (4451, 15763, 'sound_idlehit', 0), + (4452, 15764, 'sound_idleyell', 0), + (4453, 15771, 'kick_fx', 0), + (4454, 15772, 'result_bucket', 0), + (4455, 15779, 'result_lava_burst', 0), + (4456, 15780, 'rhino_backup', 0), + (4457, 15781, 'rhino_idle', 0), + (4458, 15782, 'rhino_jump_substitute', 0), + (4459, 15783, 'rhino_run', 0), + (4460, 15784, 'rhino_turn_left', 0), + (4461, 15785, 'rhino_turn_right', 0), + (4462, 15786, 'rhino_walk', 0), + (4463, 15793, 'result_blast_cone_aoe', 0), + (4464, 15794, 'result_pants_off', 0), + (4465, 15801, 'result_god_spell_bristlebane', 0), + (4466, 15807, 'design_plant_attack', 0), + (4467, 15809, 'rhino_fall', 0), + (4468, 15810, 'rhino_jump', 0), + (4469, 15811, 'rhino_land', 0), + (4470, 15818, 'result_cocoon_blue', 0), + (4471, 15819, 'result_cocoon_green', 0), + (4472, 15820, 'result_cocoon_red', 0), + (4473, 15821, 'result_cocoon_yellow', 0), + (4474, 15822, 'result_web_shooting_p2p', 0), + (4475, 15828, 'fly_combat', 0), + (4476, 15829, 'fly_combat01', 0), + (4477, 15830, 'fly_enter', 0), + (4478, 15831, 'fly_exit', 0), + (4479, 15834, 'snd_cow_moo', 0), + (4480, 15835, 'trdskl_beehive', 0), + (4481, 15842, 'result_bee_breath', 0), + (4482, 15843, 'result_beehive_hit', 0), + (4483, 15845, 'sound_ribbit', 0), + (4484, 15846, 'sound_tonguesplat', 0), + (4485, 15851, 'cast_wild_heart_buff', 0), + (4486, 15854, 'persist_fear_skulls', 0), + (4487, 15855, 'persist_wild_heart_beating', 0), + (4488, 15861, 'drag_sparks', 0), + (4489, 15862, 'ground_blast', 0), + (4490, 15864, 'pawbuster_attack_enter', 0), + (4491, 15865, 'pawbuster_attack_exit', 0), + (4492, 15866, 'pawbuster_attack_idle', 0), + (4493, 15867, 'result_webby_root', 0), + (4494, 15875, 'sparkle_trail_weapon', 0), + (4495, 15876, 'sparkle_trail_weapon_spiral', 0), + (4496, 15881, 'cast_webshoot', 0), + (4497, 15882, 'cast_webshoot_p2p', 0), + (4498, 15886, 'walk_tail', 0), + (4499, 15891, 'cast_trace_firespikes_sub_l', 0), + (4500, 15892, 'cast_trace_firespikes_sub_r', 0), + (4501, 15899, 'pugilist_charge_up_long', 0), + (4502, 15907, 'spike_fist', 0), + (4503, 15913, 'fx_on', 0), + (4504, 15915, 'result_ground_blast_ring', 0), + (4505, 15921, 'griffin_glide', 0), + (4506, 15927, 'idle_to_combat', 0), + (4507, 15934, 'result_fire_object', 0), + (4508, 15941, 'rhino_long_fall', 0), + (4509, 15942, 'rhino_strafe_left', 0), + (4510, 15943, 'rhino_strafe_right', 0), + (4511, 15944, 'run_tail_cloak', 0), + (4512, 15946, 'walk_tail_cloak', 0), + (4513, 15949, 'beam0_blue', 0), + (4514, 15950, 'beam0_red', 0), + (4515, 15951, 'beam0_yellow', 0), + (4516, 15952, 'beam1_blue', 0), + (4517, 15953, 'beam1_red', 0), + (4518, 15954, 'beam1_yellow', 0), + (4519, 15955, 'beam2_blue', 0), + (4520, 15956, 'beam2_red', 0), + (4521, 15957, 'beam2_yellow', 0), + (4522, 15958, 'beam3_blue', 0), + (4523, 15959, 'beam3_red', 0), + (4524, 15960, 'beam3_yellow', 0), + (4525, 15961, 'beam_door', 0), + (4526, 15966, 'cast_shards', 0), + (4527, 15967, 'cast_shards_blast', 0), + (4528, 15970, 'mood_dance', 0), + (4529, 15973, 'beam_miss_orange', 0), + (4530, 15974, 'beam_miss_purple', 0), + (4531, 15975, 'cast_dragon_pbae_lightning_red', 0), + (4532, 15976, 'cast_dual_shards', 0), + (4533, 15979, 'cast_shard_cloud_blast', 0), + (4534, 15980, 'cast_shard_lightning', 0), + (4535, 15981, 'cast_shard_pulse', 0), + (4536, 15982, 'cast_shards_fusion', 0), + (4537, 15983, 'cast_shards_merging', 0), + (4538, 15989, 'ghost_idle', 0), + (4539, 15994, 'cha_beam_blast0', 0), + (4540, 15995, 'cha_beam_blast1', 0), + (4541, 15996, 'cha_beam_blast2', 0), + (4542, 15997, 'cha_beam_blast_up', 0), + (4543, 16003, 'design_charasis_beams_purple', 0), + (4544, 16004, 'design_charasis_beams_turquoise', 0), + (4545, 16011, 'result_ghost_forced_shader_4_green', 0), + (4546, 16012, 'result_ghost_forced_shader_4_red', 0), + (4547, 16019, 'result_barrier_blue', 0), + (4548, 16020, 'result_barrier_red', 0), + (4549, 16021, 'result_barrier_yellow', 0), + (4550, 16027, 'design_blood_puddle', 0), + (4551, 16029, 'result_berserker_black_eyes', 0), + (4552, 16030, 'result_berserker_blue_eyes', 0), + (4553, 16031, 'result_berserker_purple_eyes', 0), + (4554, 16032, 'result_berserker_white_eyes', 0), + (4555, 16037, 'combat_idle2', 0), + (4556, 16039, 'design_charasis_windfan_fx', 0), + (4557, 16042, 'cast_no_target_blue_star', 0), + (4558, 16046, 'design_charasis_theater_fx', 0), + (4559, 16047, 'design_charasis_vision_fens', 0), + (4560, 16048, 'design_charasis_vision_jarsath', 0), + (4561, 16049, 'design_charasis_vision_kunzar', 0), + (4562, 16050, 'design_charasis_vision_kylong', 0), + (4563, 16056, 'dance_enter', 0), + (4564, 16057, 'dance_exit', 0), + (4565, 16059, 'result_ghost_shadow', 0), + (4566, 16065, 'design_lava_projectile', 0), + (4567, 16066, 'design_vision_teleport_veeshans', 0), + (4568, 16074, 'sound_fall001', 0), + (4569, 16080, 'design_veeshans_barrier', 0), + (4570, 16086, 'design_veeshans_rock_drop', 0), + (4571, 16089, 'sound_belly001', 0), + (4572, 16090, 'sound_belly002', 0), + (4573, 16095, 'cast_summon_undead_cyclone_green', 0), + (4574, 16097, 'goo_arm_buff', 0), + (4575, 16099, 'result_pus_bolt_p2p', 0), + (4576, 16100, 'result_pus_splat', 0), + (4577, 16101, 'result_sickly_aura_aoe', 0), + (4578, 16102, 'ring', 0), + (4579, 16108, 'design_vision_teleport_traks_lair', 0), + (4580, 16109, 'draw_weapon_primary_trigger', 0), + (4581, 16110, 'draw_weapon_secondary_trigger', 0), + (4582, 16112, 'result_barrier_orange', 0), + (4583, 16113, 'result_gavel_pound', 0), + (4584, 16114, 'result_stinky_aura', 0), + (4585, 16115, 'screen_shake', 0), + (4586, 16117, 'sheathe_weapon_primary_trigger', 0), + (4587, 16118, 'sheathe_weapon_secondary_trigger', 0), + (4588, 16119, 'stomp_sound', 0), + (4589, 16127, 'sound_bone', 0), + (4590, 16128, 'sound_bonedeath', 0), + (4591, 16135, 'result_glade', 0), + (4592, 16136, 'result_ice_storm', 0), + (4593, 16137, 'result_shroud_of_clouds', 0), + (4594, 16143, 'design_karnors_beam_center', 0), + (4595, 16144, 'design_karnors_beam_left', 0), + (4596, 16145, 'design_karnors_beam_right', 0), + (4597, 16147, 'result_timed_heart_tap', 0), + (4598, 16149, 'sound_yawn', 0), + (4599, 16154, 'combat_attack', 0), + (4600, 16157, 'mount_attack01', 0), + (4601, 16158, 'mount_combat_idle', 0), + (4602, 16159, 'mount_ouch', 0), + (4603, 16160, 'mount_ouch01', 0), + (4604, 16161, 'result_soul_attack_p2p', 0), + (4605, 16162, 'rhino_sprint', 0), + (4606, 16163, 'sarnak_1h_crush_idle', 0), + (4607, 16164, 'sarnak_1h_pierce_idle', 0), + (4608, 16165, 'sarnak_1h_sword_idle', 0), + (4609, 16166, 'sarnak_1h_thrown_idle', 0), + (4610, 16167, 'sarnak_2h_sword_idle', 0), + (4611, 16168, 'sarnak_backup', 0), + (4612, 16169, 'sarnak_backup_run', 0), + (4613, 16170, 'sarnak_bostaff_idle', 0), + (4614, 16171, 'sarnak_combat_idle', 0), + (4615, 16172, 'sarnak_dual_wield_idle', 0), + (4616, 16173, 'sarnak_fall', 0), + (4617, 16174, 'sarnak_idle', 0), + (4618, 16175, 'sarnak_idle01', 0), + (4619, 16176, 'sarnak_monk_idle', 0), + (4620, 16177, 'sarnak_pike_idle', 0), + (4621, 16178, 'sarnak_pugilist_idle', 0), + (4622, 16179, 'sarnak_rhino_backup', 0), + (4623, 16180, 'sarnak_rhino_idle', 0), + (4624, 16181, 'sarnak_rhino_jump_substitute', 0), + (4625, 16182, 'sarnak_rhino_run', 0), + (4626, 16183, 'sarnak_rhino_strafe_left', 0), + (4627, 16184, 'sarnak_rhino_strafe_right', 0), + (4628, 16185, 'sarnak_rhino_turn_left', 0), + (4629, 16186, 'sarnak_rhino_turn_right', 0), + (4630, 16187, 'sarnak_run', 0), + (4631, 16188, 'sarnak_run_03', 0), + (4632, 16189, 'sarnak_run_down_idle', 0), + (4633, 16190, 'sarnak_run_long', 0), + (4634, 16191, 'sarnak_run_up_idle', 0), + (4635, 16192, 'sarnak_sit_enter', 0), + (4636, 16193, 'sarnak_sit_exit', 0), + (4637, 16194, 'sarnak_sit_idle', 0), + (4638, 16195, 'sarnak_strafe_left_run', 0), + (4639, 16196, 'sarnak_strafe_right_run', 0), + (4640, 16197, 'sarnak_sway_l', 0), + (4641, 16198, 'sarnak_sway_r', 0), + (4642, 16199, 'sarnak_untrained_idle', 0), + (4643, 16200, 'sarnak_walk', 0), + (4644, 16203, 'carpet_backup', 0), + (4645, 16209, 'sokokar_idle', 0), + (4646, 16210, 'sokokar_run', 0), + (4647, 16211, 'sokokar_walk', 0), + (4648, 16218, 'pus_splat', 0), + (4649, 16220, 'sound_cast001', 0), + (4650, 16221, 'sound_cast002', 0), + (4651, 16222, 'sound_slam', 0), + (4652, 16225, 'aura_green', 0), + (4653, 16228, 'cast_venril_beam_buff', 0), + (4654, 16229, 'cast_venril_crystal', 0), + (4655, 16230, 'cast_venril_ring', 0), + (4656, 16231, 'cast_venril_ring_buff', 0), + (4657, 16234, 'result_ghosts', 0), + (4658, 16240, 'death_enter', 0), + (4659, 16241, 'death_tail', 0), + (4660, 16242, 'hand_fx_left', 0), + (4661, 16243, 'hand_fx_right', 0), + (4662, 16246, 'sokokar_glide', 0), + (4663, 16247, 'sound_deadeye001', 0), + (4664, 16248, 'sound_deadeye002', 0), + (4665, 16249, 'sound_deathdeflate', 0), + (4666, 16250, 'sound_smoke', 0), + (4667, 16255, 'cast_trail_head', 0), + (4668, 16262, 'manipulate', 0), + (4669, 16270, 'sound_bones', 0), + (4670, 16271, 'sound_deathghost', 0), + (4671, 16277, 'eye_beams', 0), + (4672, 16279, 'result_pus_rain_aoe', 0), + (4673, 16280, 'sarnak_1h_crush_enter', 0), + (4674, 16281, 'sarnak_1h_pierce_enter', 0), + (4675, 16282, 'sarnak_1h_sword_attack', 0), + (4676, 16283, 'sarnak_1h_sword_attack02', 0), + (4677, 16284, 'sarnak_1h_sword_attack03', 0), + (4678, 16285, 'sarnak_1h_sword_death_blow', 0), + (4679, 16286, 'sarnak_1h_sword_death_blow01', 0), + (4680, 16287, 'sarnak_1h_sword_enter', 0), + (4681, 16288, 'sarnak_1h_sword_exit', 0), + (4682, 16289, 'sarnak_1h_thrown_enter', 0), + (4683, 16290, 'sarnak_1h_wand_enter', 0), + (4684, 16291, 'sarnak_1h_wand_idle', 0), + (4685, 16292, 'sarnak_2h_sword_enter', 0), + (4686, 16293, 'sarnak_dead', 0), + (4687, 16294, 'sarnak_dead_enter', 0), + (4688, 16301, 'result_fireworks_confetti', 0), + (4689, 16304, 'cast_breath_divine', 0), + (4690, 16305, 'cast_breath_magic', 0), + (4691, 16312, 'result_breath_magic', 0), + (4692, 16318, 'design_green_mist', 0), + (4693, 16320, 'power_up', 0), + (4694, 16321, 'sarnak_2h_sword_attack', 0), + (4695, 16322, 'sarnak_2h_sword_attack01', 0), + (4696, 16323, 'sarnak_2h_sword_attack02', 0), + (4697, 16324, 'sarnak_2h_sword_kick', 0), + (4698, 16325, 'sarnak_monk_enter', 0), + (4699, 16328, 'cast_dragon_tail_trail', 0), + (4700, 16329, 'cast_dragon_tail_trail_long', 0), + (4701, 16330, 'cast_dragon_wing_buffet', 0), + (4702, 16334, 'horse_combat_idle', 0), + (4703, 16336, 'result_fleas', 0), + (4704, 16337, 'sarnak_bow_enter', 0), + (4705, 16338, 'sarnak_bow_idle', 0), + (4706, 16340, 'sound_attack_main', 0), + (4707, 16341, 'sound_attack_medusa', 0), + (4708, 16342, 'sound_attack_mouth', 0), + (4709, 16343, 'sound_damage_medusa', 0), + (4710, 16344, 'sound_damage_mouth', 0), + (4711, 16345, 'sound_death_medusa', 0), + (4712, 16346, 'sound_death_mouth', 0), + (4713, 16347, 'sound_enter', 0), + (4714, 16348, 'sound_enter_vocal', 0), + (4715, 16349, 'sound_swing', 0), + (4716, 16356, 'result_god_cackle_tribunal', 0), + (4717, 16357, 'result_god_spell_bertoxxulous', 0), + (4718, 16358, 'result_god_spell_karana', 0), + (4719, 16359, 'result_god_spell_tribunal', 0), + (4720, 16361, 'snd_rain_9s', 0), + (4721, 16362, 'trdskl_barracuda', 0), + (4722, 16365, 'cast_dragon_breath_cold', 0), + (4723, 16366, 'cast_dragon_breath_heat', 0), + (4724, 16367, 'cast_dragon_breath_lightning', 0), + (4725, 16368, 'cast_dragon_breath_poison', 0), + (4726, 16369, 'cast_drake_breath_cold', 0), + (4727, 16370, 'cast_drake_breath_lightning', 0), + (4728, 16371, 'cast_drake_breath_magic_divine', 0), + (4729, 16372, 'cast_drake_breath_poison', 0), + (4730, 16376, 'design_ball_summon', 0), + (4731, 16377, 'design_leash', 0), + (4732, 16378, 'design_lightning_ground', 0), + (4733, 16379, 'design_pillar_summon', 0), + (4734, 16381, 'ouch_back', 0), + (4735, 16382, 'sarnak_dual_wield_attack01', 0), + (4736, 16384, 'sit_idle_tail', 0), + (4737, 16391, 'runes_shissar1', 0), + (4738, 16392, 'runes_shissar2', 0), + (4739, 16393, 'runes_shissar3', 0), + (4740, 16394, 'runes_shissar4', 0), + (4741, 16395, 'runes_shissar5', 0), + (4742, 16396, 'runes_shissar6', 0), + (4743, 16397, 'runes_shissar7', 0), + (4744, 16398, 'runes_shissar8', 0), + (4745, 16405, 'pike_advance', 0), + (4746, 16412, 'result_trakanon_static_repulsion', 0), + (4747, 16418, 'design_poison_splashes', 0), + (4748, 16420, 'particle_teleport', 0), + (4749, 16422, 'wizard_rune_blast', 0), + (4750, 16429, 'result_hand_rings_smoke', 0), + (4751, 16430, 'result_pie_splat', 0), + (4752, 16431, 'sarnak_1h_crush_attack', 0), + (4753, 16432, 'sarnak_1h_crush_attack02', 0), + (4754, 16433, 'sarnak_1h_crush_attack03', 0), + (4755, 16434, 'sarnak_1h_pierce_attack', 0), + (4756, 16435, 'sarnak_bostaff_attack', 0), + (4757, 16436, 'sarnak_bostaff_attack01', 0), + (4758, 16437, 'sarnak_bostaff_attack02', 0), + (4759, 16438, 'sarnak_bostaff_attack03', 0), + (4760, 16439, 'sarnak_dual_wield_attack', 0), + (4761, 16440, 'sarnak_dual_wield_attack02', 0), + (4762, 16441, 'sarnak_fishing_cast', 0), + (4763, 16442, 'sarnak_fishing_fight', 0), + (4764, 16443, 'sarnak_fishing_reel_in', 0), + (4765, 16444, 'sarnak_forestry_chopping', 0), + (4766, 16445, 'sarnak_forestry_success', 0), + (4767, 16446, 'sarnak_gathering_search', 0), + (4768, 16447, 'sarnak_gathering_success', 0), + (4769, 16448, 'sarnak_mining_digging', 0), + (4770, 16449, 'sarnak_monk_attack', 0), + (4771, 16450, 'sarnak_monk_attack01', 0), + (4772, 16451, 'sarnak_monk_attack02', 0), + (4773, 16452, 'sarnak_monk_attack03', 0), + (4774, 16453, 'sarnak_monk_kick', 0), + (4775, 16454, 'sarnak_pike_attack', 0), + (4776, 16455, 'sarnak_pike_attack01', 0), + (4777, 16456, 'sarnak_pike_attack02', 0), + (4778, 16457, 'sarnak_pike_attack03', 0), + (4779, 16458, 'sarnak_pike_kick', 0), + (4780, 16460, 'trdskl_pie', 0), + (4781, 16467, 'result_hand_rings_poison', 0), + (4782, 16468, 'sarnak_1h_sword_attack01', 0), + (4783, 16469, 'sarnak_mining_success', 0), + (4784, 16472, 'cast_mirror', 0), + (4785, 16476, 'design_parrot_shoulder', 0), + (4786, 16478, 'result_splat', 0), + (4787, 16480, 'trdskl_glob', 0), + (4788, 16487, 'result_bread_hit', 0), + (4789, 16489, 'trdskl_bread', 0), + (4790, 16495, 'froglok_dead_enter', 0), + (4791, 16496, 'froglok_run_up_idle', 0), + (4792, 16497, 'froglok_swim_attack', 0), + (4793, 16498, 'froglok_swim_go', 0), + (4794, 16499, 'froglok_swim_idle', 0), + (4795, 16500, 'froglok_swim_ouch', 0), + (4796, 16501, 'iksar_swim_backup', 0), + (4797, 16502, 'iksar_swim_go', 0), + (4798, 16504, 'sarnak_rhino_sprint', 0), + (4799, 16505, 'sarnak_swim_backup', 0), + (4800, 16506, 'sarnak_swim_go', 0), + (4801, 16508, 'swim_go', 0), + (4802, 16513, 'close', 0), + (4803, 16514, '2h_sword', 0), + (4804, 16517, 'cast_armor_assemble', 0), + (4805, 16520, 'cast_chalice_descending', 0), + (4806, 16527, 'result_blast_double_cone_aoe', 0), + (4807, 16530, 'carpet_tail', 0), + (4808, 16531, 'carpet_tail_cloak', 0), + (4809, 16536, 'result_book_hit', 0), + (4810, 16538, 'trdskl_book', 0), + (4811, 16539, 'trdskl_rose', 0), + (4812, 16545, 'flash', 0), + (4813, 16546, 'glint', 0), + (4814, 16549, 'cast_light_beam_grow', 0), + (4815, 16554, 'result_gavel_drop', 0), + (4816, 16555, 'result_hearts_red', 0), + (4817, 16556, 'result_light_slam_aoe', 0), + (4818, 16557, 'result_vertical_blast', 0), + (4819, 16560, 'cast_lightning_aoe_blast_out', 0), + (4820, 16565, 'result_cyclone_storm', 0), + (4821, 16568, 'cast_cyclone_storm_blast', 0), + (4822, 16575, 'ouch_forhand', 0), + (4823, 16580, 'community_robe_red', 0), + (4824, 16582, 'fire_foolish', 0), + (4825, 16583, 'guide_robe_green', 0), + (4826, 16589, 'dance_synced', 0), + (4827, 16591, 'result_frisbee_p2p', 0), + (4828, 16593, 'trdskl_frisbee', 0), + (4829, 16596, 'brew_day_mugs', 0), + (4830, 16601, 'result_feather_smack', 0), + (4831, 16602, 'sarnak_1h_sword_dodge_backhand', 0), + (4832, 16603, 'sarnak_1h_sword_dodge_down', 0), + (4833, 16604, 'sarnak_1h_sword_dodge_forehand', 0), + (4834, 16605, 'sarnak_1h_sword_dodge_thrust', 0), + (4835, 16606, 'sarnak_1h_sword_ouch_backhand', 0), + (4836, 16607, 'sarnak_1h_sword_ouch_down', 0), + (4837, 16608, 'sarnak_1h_sword_ouch_forehand', 0), + (4838, 16609, 'sarnak_1h_sword_ouch_thrust', 0), + (4839, 16610, 'sarnak_1h_sword_parry_backhand', 0), + (4840, 16611, 'sarnak_1h_sword_parry_down', 0), + (4841, 16612, 'sarnak_1h_sword_parry_forehand', 0), + (4842, 16613, 'sarnak_1h_sword_parry_thrust', 0), + (4843, 16614, 'sarnak_2h_sword_dodge_down', 0), + (4844, 16615, 'sarnak_2h_sword_dodge_forehand', 0), + (4845, 16616, 'sarnak_2h_sword_ouch_backhand', 0), + (4846, 16617, 'sarnak_2h_sword_ouch_down', 0), + (4847, 16618, 'sarnak_2h_sword_ouch_forehand', 0), + (4848, 16619, 'sarnak_2h_sword_ouch_thrust', 0), + (4849, 16620, 'sarnak_2h_sword_ouch_thust', 0), + (4850, 16621, 'sarnak_2h_sword_parry_backhand', 0), + (4851, 16622, 'sarnak_2h_sword_parry_down', 0), + (4852, 16623, 'sarnak_2h_sword_parry_forehand', 0), + (4853, 16624, 'sarnak_agree', 0), + (4854, 16625, 'sarnak_applaude', 0), + (4855, 16626, 'sarnak_attention', 0), + (4856, 16627, 'sarnak_beckon', 0), + (4857, 16628, 'sarnak_beg', 0), + (4858, 16629, 'sarnak_boggle', 0), + (4859, 16630, 'sarnak_bostaff_dodge_backhand', 0), + (4860, 16631, 'sarnak_bostaff_dodge_down', 0), + (4861, 16632, 'sarnak_bostaff_dodge_forehand', 0), + (4862, 16633, 'sarnak_bostaff_ouch_backhand', 0), + (4863, 16634, 'sarnak_bostaff_ouch_down', 0), + (4864, 16635, 'sarnak_bostaff_ouch_forehand', 0), + (4865, 16636, 'sarnak_bostaff_ouch_thrust', 0), + (4866, 16637, 'sarnak_bostaff_parry_backhand', 0), + (4867, 16638, 'sarnak_bostaff_parry_down', 0), + (4868, 16639, 'sarnak_bostaff_parry_forehand', 0), + (4869, 16640, 'sarnak_bostaff_parry_thrust', 0), + (4870, 16641, 'sarnak_bow', 0), + (4871, 16642, 'sarnak_brandish', 0), + (4872, 16643, 'sarnak_bye', 0), + (4873, 16644, 'sarnak_cackle', 0), + (4874, 16645, 'sarnak_cheer', 0), + (4875, 16646, 'sarnak_chuckle', 0), + (4876, 16647, 'sarnak_confused', 0), + (4877, 16648, 'sarnak_crazy', 0), + (4878, 16649, 'sarnak_cringe', 0), + (4879, 16650, 'sarnak_cry', 0), + (4880, 16651, 'sarnak_curse', 0), + (4881, 16652, 'sarnak_curtsey', 0), + (4882, 16653, 'sarnak_curtsey2', 0), + (4883, 16654, 'sarnak_cutthroat', 0), + (4884, 16655, 'sarnak_doubletake', 0), + (4885, 16656, 'sarnak_dual_wield_attack03', 0), + (4886, 16657, 'sarnak_dual_wield_dodge_backhand', 0), + (4887, 16658, 'sarnak_dual_wield_dodge_down', 0), + (4888, 16659, 'sarnak_dual_wield_dodge_forehand', 0), + (4889, 16660, 'sarnak_dual_wield_kick', 0), + (4890, 16661, 'sarnak_dual_wield_ouch_backhand', 0), + (4891, 16662, 'sarnak_dual_wield_ouch_down', 0), + (4892, 16663, 'sarnak_dual_wield_ouch_forehand', 0), + (4893, 16664, 'sarnak_dual_wield_parry_down', 0), + (4894, 16665, 'sarnak_duck', 0), + (4895, 16666, 'sarnak_fflirt', 0), + (4896, 16667, 'sarnak_fistclapping', 0), + (4897, 16668, 'sarnak_flex', 0), + (4898, 16669, 'sarnak_flirt', 0), + (4899, 16670, 'sarnak_flustered', 0), + (4900, 16671, 'sarnak_frustration', 0), + (4901, 16672, 'sarnak_gag', 0), + (4902, 16673, 'sarnak_giggle', 0), + (4903, 16674, 'sarnak_glare', 0), + (4904, 16675, 'sarnak_grumble', 0), + (4905, 16676, 'sarnak_happy', 0), + (4906, 16677, 'sarnak_headslap', 0), + (4907, 16678, 'sarnak_hearnoevil', 0), + (4908, 16679, 'sarnak_heartattack', 0), + (4909, 16680, 'sarnak_heelclick', 0), + (4910, 16681, 'sarnak_hellno', 0), + (4911, 16682, 'sarnak_hello', 0), + (4912, 16683, 'sarnak_hourglass', 0), + (4913, 16684, 'sarnak_howl', 0), + (4914, 16685, 'sarnak_indigestion', 0), + (4915, 16686, 'sarnak_itch', 0), + (4916, 16687, 'sarnak_listen', 0), + (4917, 16688, 'sarnak_lookaway', 0), + (4918, 16689, 'sarnak_monk_dodge_backhand', 0), + (4919, 16690, 'sarnak_monk_dodge_forehand', 0), + (4920, 16691, 'sarnak_monk_ouch_backhand', 0), + (4921, 16692, 'sarnak_monk_ouch_down', 0), + (4922, 16693, 'sarnak_monk_ouch_forehand', 0), + (4923, 16694, 'sarnak_monk_parry_backhand', 0), + (4924, 16695, 'sarnak_monk_parry_down', 0), + (4925, 16696, 'sarnak_monk_parry_forehand', 0), + (4926, 16697, 'sarnak_moon', 0), + (4927, 16698, 'sarnak_neener', 0), + (4928, 16699, 'sarnak_no', 0), + (4929, 16700, 'sarnak_nod', 0), + (4930, 16701, 'sarnak_notworthy', 0), + (4931, 16702, 'sarnak_orate', 0), + (4932, 16703, 'sarnak_peer', 0), + (4933, 16704, 'sarnak_pike_dodge_backhand', 0), + (4934, 16705, 'sarnak_pike_dodge_down', 0), + (4935, 16706, 'sarnak_pike_dodge_forehand', 0), + (4936, 16707, 'sarnak_pike_dodge_thrust', 0), + (4937, 16708, 'sarnak_pike_ouch_backhand', 0), + (4938, 16709, 'sarnak_pike_ouch_down', 0), + (4939, 16710, 'sarnak_pike_ouch_thrust', 0), + (4940, 16711, 'sarnak_pike_parry_backhand', 0), + (4941, 16712, 'sarnak_pike_parry_down', 0), + (4942, 16713, 'sarnak_pike_parry_forehand', 0), + (4943, 16714, 'sarnak_point', 0), + (4944, 16715, 'sarnak_ponder', 0), + (4945, 16716, 'sarnak_pout', 0), + (4946, 16717, 'sarnak_pugilist_attack', 0), + (4947, 16718, 'sarnak_pugilist_attack01', 0), + (4948, 16719, 'sarnak_pugilist_attack02', 0), + (4949, 16720, 'sarnak_pugilist_attack03', 0), + (4950, 16721, 'sarnak_pugilist_dodge_backhand', 0), + (4951, 16722, 'sarnak_pugilist_dodge_down', 0), + (4952, 16723, 'sarnak_pugilist_kick', 0), + (4953, 16724, 'sarnak_raisehand', 0), + (4954, 16725, 'sarnak_royalwave', 0), + (4955, 16726, 'sarnak_rubhands', 0), + (4956, 16727, 'sarnak_rude', 0), + (4957, 16728, 'sarnak_sad', 0), + (4958, 16729, 'sarnak_salute', 0), + (4959, 16730, 'sarnak_sarcasticclap', 0), + (4960, 16731, 'sarnak_scold', 0), + (4961, 16732, 'sarnak_scratch', 0), + (4962, 16733, 'sarnak_scream', 0), + (4963, 16734, 'sarnak_seenoevil', 0), + (4964, 16735, 'sarnak_shakefist', 0), + (4965, 16736, 'sarnak_shame', 0), + (4966, 16737, 'sarnak_shimmy', 0), + (4967, 16738, 'sarnak_shiver', 0), + (4968, 16739, 'sarnak_shrug', 0), + (4969, 16740, 'sarnak_sigh', 0), + (4970, 16741, 'sarnak_smile', 0), + (4971, 16742, 'sarnak_smirk', 0), + (4972, 16743, 'sarnak_sneer', 0), + (4973, 16744, 'sarnak_sneeze', 0), + (4974, 16745, 'sarnak_snicker', 0), + (4975, 16746, 'sarnak_sniff', 0), + (4976, 16747, 'sarnak_speaknoevil', 0), + (4977, 16748, 'sarnak_square', 0), + (4978, 16749, 'sarnak_squeal', 0), + (4979, 16750, 'sarnak_stare', 0), + (4980, 16751, 'sarnak_stinky', 0), + (4981, 16752, 'sarnak_stretch', 0), + (4982, 16753, 'sarnak_sulk', 0), + (4983, 16754, 'sarnak_swear', 0), + (4984, 16755, 'sarnak_tantrum', 0), + (4985, 16756, 'sarnak_tapfoot', 0), + (4986, 16757, 'sarnak_taunt', 0), + (4987, 16758, 'sarnak_thank', 0), + (4988, 16759, 'sarnak_thumbs', 0), + (4989, 16760, 'sarnak_violin', 0), + (4990, 16761, 'sarnak_wave', 0), + (4991, 16762, 'sarnak_whistle', 0), + (4992, 16763, 'sarnak_whome', 0), + (4993, 16764, 'sarnak_wince', 0), + (4994, 16765, 'sarnak_wink', 0), + (4995, 16766, 'sarnak_yawn', 0), + (4996, 16767, 'sarnak_yeah', 0), + (4997, 16769, 'trdskl_pillow', 0), + (4998, 16772, 'cast_boomerang', 0), + (4999, 16778, 'trdskl_boomerang', 0), + (5000, 16786, 'snd_pillow_impact', 0), + (5001, 16789, 'brick_throw', 0), + (5002, 16793, 'horn_blow', 0), + (5003, 16801, 'sound_horn', 0), + (5004, 16807, 'design_cast_vision_shardofhate', 0), + (5005, 16814, 'result_waterwall', 0), + (5006, 16821, 'result_netted', 0), + (5007, 16823, 'trdskl_net', 0), + (5008, 16831, 'vek_beam01_blue', 0), + (5009, 16832, 'vek_beam01_green', 0), + (5010, 16833, 'vek_beam01_red', 0), + (5011, 16834, 'vek_beam01_yellow', 0), + (5012, 16835, 'vek_beam02_blue', 0), + (5013, 16836, 'vek_beam02_green', 0), + (5014, 16837, 'vek_beam02_red', 0), + (5015, 16838, 'vek_beam02_yellow', 0), + (5016, 16839, 'vek_beam03_blue', 0), + (5017, 16840, 'vek_beam03_green', 0), + (5018, 16841, 'vek_beam03_red', 0), + (5019, 16842, 'vek_beam03_yellow', 0), + (5020, 16843, 'vek_beam04_blue', 0), + (5021, 16844, 'vek_beam04_green', 0), + (5022, 16845, 'vek_beam04_red', 0), + (5023, 16846, 'vek_beam04_yellow', 0), + (5024, 16847, 'vek_map', 0), + (5025, 16848, 'vek_mapshine', 0), + (5026, 16849, 'vek_runes', 0), + (5027, 16850, 'vek_sunlight', 0), + (5028, 16856, 'fx_off', 0), + (5029, 16858, 'knocktoback_enter', 0), + (5030, 16859, 'knocktoback_exit', 0), + (5031, 16860, 'knocktoback_idle', 0), + (5032, 16861, 'result_brick_hit', 0), + (5033, 16863, 'status_quest_guide_gives', 0), + (5034, 16864, 'trdskl_brick', 0), + (5035, 16871, 'result_hand_rings_shimmer', 0), + (5036, 16873, 'snd_design_murderer', 0), + (5037, 16879, 'design_horse_carrot', 0), + (5038, 16880, 'design_rhino_carrot', 0), + (5039, 16881, 'design_warg_carrot', 0), + (5040, 16882, 'dn_goblin_beam_blue', 0), + (5041, 16883, 'dn_goblin_beam_green', 0), + (5042, 16884, 'dn_goblin_beam_red', 0), + (5043, 16885, 'dn_goblin_beam_yellow', 0), + (5044, 16893, 'void_storm', 0), + (5045, 16894, 'void_summon_portal', 0), + (5046, 16900, 'design_altar_chained', 0), + (5047, 16902, 'result_blue_glow', 0), + (5048, 16903, 'result_green_glow', 0), + (5049, 16904, 'result_orange_glow', 0), + (5050, 16905, 'result_purple_glow', 0), + (5051, 16912, 'result_drake_breath', 0), + (5052, 16913, 'result_napalm', 0), + (5053, 16914, 'result_void_fx', 0), + (5054, 16917, 'bear_backup', 0), + (5055, 16918, 'bear_fall', 0), + (5056, 16919, 'bear_idle', 0), + (5057, 16920, 'bear_jump', 0), + (5058, 16921, 'bear_jump_substitute', 0), + (5059, 16922, 'bear_land', 0), + (5060, 16923, 'bear_long_fall', 0), + (5061, 16924, 'bear_run', 0), + (5062, 16925, 'bear_turn_left', 0), + (5063, 16926, 'bear_turn_right', 0), + (5064, 16927, 'bear_walk', 0), + (5065, 16934, 'result_blood_boil', 0), + (5066, 16935, 'result_golem_rain', 0), + (5067, 16936, 'result_water_ball', 0), + (5068, 16937, 'result_water_burst', 0), + (5069, 16938, 'result_waterspout_p2p', 0), + (5070, 16941, 'cast_aoe_water_blast', 0), + (5071, 16942, 'cast_barnicle_blast', 0), + (5072, 16948, 'snd_claygolem_attack', 0), + (5073, 16956, 'sound_attackspin', 0), + (5074, 16957, 'sound_damagelow', 0), + (5075, 16958, 'sound_swimwalk', 0), + (5076, 16959, 'sound_walkbounce', 0), + (5077, 16960, 'sound_wildswingenter', 0), + (5078, 16967, 'persist_enrage', 0), + (5079, 16973, 'golem_charm', 0), + (5080, 16974, 'golem_shutdown', 0), + (5081, 16982, 'status_quest_gives_gray', 0), + (5082, 16990, 'trdskl_censer', 0), + (5083, 16996, 'dusting_off', 0), + (5084, 17004, 'snd_net_toss', 0), + (5085, 17011, 'result_barrel_break', 0), + (5086, 17012, 'result_brain_leaving', 0), + (5087, 17020, 'snd_barrel_cannon', 0), + (5088, 17028, 'sound_bookdeath', 0), + (5089, 17029, 'sound_thunder0', 0), + (5090, 17035, 'flock_of_seagulls', 0), + (5091, 17042, 'mistmoore_runes_fx', 0), + (5092, 17043, 'mistmoore_sun_fx', 0), + (5093, 17045, 'swim_backward', 0), + (5094, 17046, 'swim_forward', 0), + (5095, 17049, 'cast_energy_blob', 0), + (5096, 17050, 'cast_energy_blob_p2p', 0), + (5097, 17057, 'result_napalm_aoe', 0), + (5098, 17064, 'result_blood_puddle', 0), + (5099, 17065, 'result_cold_ice_crystals_head', 0), + (5100, 17066, 'result_ice_shackles', 0), + (5101, 17067, 'result_icicle_impale', 0), + (5102, 17068, 'result_snow_dust', 0), + (5103, 17069, 'result_void_splat', 0), + (5104, 17072, 'attack_bolts', 0), + (5105, 17075, 'cast_sword_head', 0), + (5106, 17078, 'result_sword_head', 0), + (5107, 17085, 'result_steam_column', 0), + (5108, 17093, 'sound_footsrape', 0), + (5109, 17094, 'sound_runbreathe', 0), + (5110, 17101, 'result_mesh_attack', 0), + (5111, 17106, 'cast_spin_buff', 0), + (5112, 17109, 'result_power_life_drain_p2p', 0), + (5113, 17115, 'design_ice_door_blast', 0), + (5114, 17121, 'design_rising_stairs_finish_fx', 0), + (5115, 17122, 'design_rising_stairs_fx', 0), + (5116, 17129, 'result_chomping_skulls', 0), + (5117, 17136, 'result_pulsing_note', 0), + (5118, 17142, 'design_ice_wall_breaking', 0), + (5119, 17145, 'sound_ice_shatter', 0), + (5120, 17148, 'cast_lost_souls', 0), + (5121, 17155, 'knockeddowntoknees', 0), + (5122, 17156, 'meditate', 0), + (5123, 17158, 'worship', 0), + (5124, 17161, 'cast_lasso', 0), + (5125, 17166, 'result_cobwebs', 0), + (5126, 17173, 'miragul_puzzle_blue_flasher', 0), + (5127, 17174, 'miragul_puzzle_blue_runes', 0), + (5128, 17175, 'miragul_puzzle_green_flasher', 0), + (5129, 17176, 'miragul_puzzle_green_runes', 0), + (5130, 17177, 'miragul_puzzle_lightning_orb', 0), + (5131, 17178, 'miragul_puzzle_red_flasher', 0), + (5132, 17179, 'miragul_puzzle_red_runes', 0), + (5133, 17180, 'miragul_puzzle_spire_beams', 0), + (5134, 17181, 'miragul_puzzle_splash_column', 0), + (5135, 17182, 'miragul_puzzle_yellow_flasher', 0), + (5136, 17183, 'miragul_puzzle_yellow_runes', 0), + (5137, 17186, 'cast_barnacle_blast', 0), + (5138, 17193, 'najena_face_lava', 0), + (5139, 17200, 'najena_dark_rune01', 0), + (5140, 17201, 'najena_dark_rune02', 0), + (5141, 17202, 'najena_dark_rune03', 0), + (5142, 17203, 'najena_dark_rune04', 0), + (5143, 17204, 'najena_dark_rune05', 0), + (5144, 17205, 'najena_light_rune01', 0), + (5145, 17206, 'najena_light_rune02', 0), + (5146, 17207, 'najena_light_rune03', 0), + (5147, 17208, 'najena_light_rune04', 0), + (5148, 17209, 'najena_light_rune05', 0), + (5149, 17210, 'najena_puzzle_complete', 0), + (5150, 17211, '1h_dual_wield_enter', 0), + (5151, 17212, '1h_dual_wield_exit', 0), + (5152, 17219, 'najena_lava_god_hands', 0), + (5153, 17220, 'najena_lava_god_skull', 0), + (5154, 17221, 'result_lava_column', 0), + (5155, 17228, 'najena_lava_curtain', 0), + (5156, 17229, 'najena_rune_key', 0), + (5157, 17232, 'cast_heat_sphere', 0), + (5158, 17239, 'result_dagger_back', 0), + (5159, 17240, 'result_melee_lifetap_p2p', 0), + (5160, 17242, 'vocal_idle', 0), + (5161, 17245, 'cast_bone_blast_blend', 0), + (5162, 17248, 'cast_wavy_bubble_shield', 0), + (5163, 17253, 'cast_shield_buff', 0), + (5164, 17260, 'result_hammer_buff', 0), + (5165, 17267, 'result_forced_shader_hologram', 0), + (5166, 17274, 'result_clanging_note', 0), + (5167, 17275, 'result_forced_shader_glass', 0), + (5168, 17276, 'result_swirling_note', 0), + (5169, 17279, 'cast_bone_blast_notes', 0), + (5170, 17284, 'result_notes_spiral_frenzy', 0), + (5171, 17286, 'vek_door_beam_blue', 0), + (5172, 17287, 'vek_door_beam_red', 0), + (5173, 17290, 'cast_bubble_ward', 0), + (5174, 17291, 'cast_dodge_buff', 0), + (5175, 17294, 'cast_shout_aoe', 0), + (5176, 17297, 'result_crush_blast', 0), + (5177, 17304, 'result_break_chains', 0), + (5178, 17309, 'cast_quick_shield', 0), + (5179, 17312, 'result_spike_blast', 0), + (5180, 17315, 'cast_bubble_ward_out', 0), + (5181, 17318, 'cast_shield_deflect', 0), + (5182, 17325, 'paper_scatter', 0), + (5183, 17333, 'skull_candles_head', 0), + (5184, 17338, 'cast_rings_aoe', 0), + (5185, 17344, 'design_void_eyes', 0), + (5186, 17345, 'design_void_portal', 0), + (5187, 17348, 'vocal_combat_idle', 0), + (5188, 17351, 'cast_melee_buff', 0), + (5189, 17354, 'cast_speed_buff', 0), + (5190, 17355, 'cast_wings', 0), + (5191, 17358, 'buff_fx', 0), + (5192, 17361, 'cast_rune_buff', 0), + (5193, 17362, 'cast_rune_spiral_buff', 0), + (5194, 17365, 'cast_ice_block', 0), + (5195, 17366, 'cast_leaf_buff', 0), + (5196, 17367, 'cast_leaf_spiral_buff', 0), + (5197, 17372, 'result_nature_storm', 0), + (5198, 17375, 'cast_fire_buff', 0), + (5199, 17376, 'cast_mental_buff', 0), + (5200, 17381, 'result_hail_storm', 0), + (5201, 17382, 'result_poison_skulls', 0), + (5202, 17385, 'cast_flash_rune_buff', 0), + (5203, 17393, 'serve', 0), + (5204, 17399, 'guk_barracks_poison', 0), + (5205, 17400, 'guk_crystal_cleanse', 0), + (5206, 17401, 'guk_temple_splashes_clean', 0), + (5207, 17402, 'guk_temple_splashes_poison', 0), + (5208, 17403, 'guk_waterfalls_poison', 0), + (5209, 17405, 'result_slime_wall', 0), + (5210, 17412, 'result_fly_breath', 0), + (5211, 17413, 'result_fly_swarm', 0), + (5212, 17420, 'result_poison_cloud_explosion', 0), + (5213, 17421, 'result_poison_splat', 0), + (5214, 17422, 'result_skull_attack_p2p', 0), + (5215, 17423, 'result_troll_curse', 0), + (5216, 17430, 'korsha_lift_blast', 0), + (5217, 17431, 'result_object_sparkles_blue', 0), + (5218, 17432, 'result_object_sparkles_green', 0), + (5219, 17433, 'result_object_sparkles_red', 0), + (5220, 17434, 'result_object_sparkles_white', 0), + (5221, 17441, 'result_head_flames', 0), + (5222, 17447, 'design_lamp_ignite', 0), + (5223, 17449, 'mr_lamp_fx_01', 0), + (5224, 17450, 'mr_lamp_fx_02', 0), + (5225, 17451, 'mr_lamp_fx_03', 0), + (5226, 17452, 'mr_lamp_fx_04', 0), + (5227, 17453, 'mr_lamp_fx_05', 0), + (5228, 17454, 'mr_lamp_fx_06', 0), + (5229, 17455, 'mr_lamp_ignite_sound', 0), + (5230, 17456, 'mr_lamp_sounds_finish', 0), + (5231, 17457, 'mr_lamp_sounds_start', 0), + (5232, 17463, 'design_result_black_out', 0), + (5233, 17465, 'result_bat_scare', 0), + (5234, 17467, 'whistle_toot_01', 0), + (5235, 17468, 'whistle_toot_02', 0), + (5236, 17469, 'whistle_toot_03', 0), + (5237, 17470, 'whistle_toot_04', 0), + (5238, 17471, 'whistle_toot_05', 0), + (5239, 17472, 'whistle_toot_06', 0), + (5240, 17473, 'whistle_toot_07', 0), + (5241, 17474, 'whistle_toot_08', 0), + (5242, 17475, 'whistle_toot_09', 0), + (5243, 17476, 'whistle_toot_10', 0), + (5244, 17477, 'whistle_toot_11', 0), + (5245, 17478, 'whistle_toot_12', 0), + (5246, 17479, 'whistle_toot_13', 0), + (5247, 17480, 'whistle_toot_14', 0), + (5248, 17486, 'eq2_music1', 0), + (5249, 17487, 'eq2_music2', 0), + (5250, 17488, 'frost_blast', 0), + (5251, 17489, 'fudge_drip', 0), + (5252, 17490, 'ice_blast_sound', 0), + (5253, 17491, 'icecream_drip', 0), + (5254, 17494, 'server_idle', 0), + (5255, 17495, 'server_shutdown', 0), + (5256, 17496, 'server_start', 0), + (5257, 17502, 'hourglass_active', 0), + (5258, 17503, 'hourglass_idle', 0), + (5259, 17509, 'frosty_crown', 0), + (5260, 17512, 'bf_lightning_gate_rm5', 0), + (5261, 17513, 'bf_lightning_gate_rm9', 0), + (5262, 17516, 'cast_void_portal', 0), + (5263, 17519, 'result_crystal_trap', 0), + (5264, 17526, 'lights_eyes', 0), + (5265, 17527, 'lights_pumpkin', 0), + (5266, 17528, 'result_pumpkin_smash', 0), + (5267, 17534, 'design_fairy_pet', 0), + (5268, 17539, 'cast_void_energy_cloud', 0), + (5269, 17540, 'cast_void_rune_barrier', 0), + (5270, 17541, 'cast_void_rune_circle', 0), + (5271, 17543, 'design_fist_fireworks', 0), + (5272, 17545, 'result_void_energy_barrier', 0), + (5273, 17546, 'result_void_energy_blast', 0), + (5274, 17547, 'result_void_energy_wave', 0), + (5275, 17550, 'cast_lightning_beam_converge', 0), + (5276, 17551, 'cast_lightning_beam_point', 0), + (5277, 17552, 'cast_lightning_blastdown', 0), + (5278, 17559, 'result_flesh_peel', 0), + (5279, 17560, 'result_god_spell_anashti_sul', 0), + (5280, 17561, 'result_god_spell_rodcet_nife', 0), + (5281, 17569, 'vp_shissar_new', 0), + (5282, 17570, 'vp_shissar_old', 0), + (5283, 17577, 'result_greenmist_attack_p2p', 0), + (5284, 17583, 'design_cannon_blast', 0), + (5285, 17584, 'design_cannon_chargeup', 0), + (5286, 17585, 'design_inno_cannon_fire1', 0), + (5287, 17586, 'design_inno_cannon_fire2', 0), + (5288, 17589, 'cast_energy_charge_up', 0), + (5289, 17594, 'mr_chargeup_sound', 0), + (5290, 17595, 'mr_lightning_chargeup', 0), + (5291, 17597, 'zepplin_enter', 0), + (5292, 17598, 'zepplin_exit', 0), + (5293, 17599, 'zepplin_fall', 0), + (5294, 17600, 'zepplin_idle', 0), + (5295, 17601, 'zepplin_jump', 0), + (5296, 17602, 'zepplin_land', 0), + (5297, 17603, 'zepplin_run', 0), + (5298, 17604, 'zepplin_walk', 0), + (5299, 17610, 'idle_sound', 0), + (5300, 17613, 'zeppelin_enter', 0), + (5301, 17614, 'zeppelin_exit', 0), + (5302, 17615, 'zeppelin_fall', 0), + (5303, 17616, 'zeppelin_glide', 0), + (5304, 17617, 'zeppelin_idle', 0), + (5305, 17618, 'zeppelin_jump', 0), + (5306, 17619, 'zeppelin_land', 0), + (5307, 17620, 'zeppelin_run', 0), + (5308, 17621, 'zeppelin_walk', 0), + (5309, 17622, 'zepplin_glide', 0), + (5310, 17625, 'cast_energy_blast_aoe', 0), + (5311, 17630, 'result_energy_wave_p2p', 0), + (5312, 17637, 'result_void_implode', 0), + (5313, 17639, 'void_beam_sound', 0), + (5314, 17640, 'void_door_beam', 0), + (5315, 17647, 'persist_evil_stun', 0), + (5316, 17648, 'result_spear_hit', 0), + (5317, 17650, 'trdskl_spear', 0), + (5318, 17656, 'energy_flow_sound', 0), + (5319, 17658, 'mistmoore_energy_flow01', 0), + (5320, 17659, 'mistmoore_energy_flow02', 0), + (5321, 17660, 'mistmoore_energy_flow03', 0), + (5322, 17661, 'mistmoore_energy_flow04', 0), + (5323, 17662, 'mistmoore_energy_flow05', 0), + (5324, 17663, 'result_lightning_cage', 0), + (5325, 17664, 'result_rune_ethernaughts', 0), + (5326, 17667, 'burrow', 0), + (5327, 17668, 'burrow_sound', 0), + (5328, 17672, 'design_chain_release', 0), + (5329, 17673, 'design_chained', 0), + (5330, 17675, 'mistmoore_coffin_glow', 0), + (5331, 17683, 'void_blast_wave', 0), + (5332, 17686, 'blast_bolt', 0), + (5333, 17689, 'cast_speed_trail', 0), + (5334, 17692, 'result_cyclone_bones', 0), + (5335, 17695, 'cast_hand_slash', 0), + (5336, 17700, 'result_hand_choke', 0), + (5337, 17701, 'result_spike_trap', 0), + (5338, 17702, 'result_string_trap', 0), + (5339, 17703, 'run_sound', 0), + (5340, 17705, 'wood_sound', 0), + (5341, 17713, 'void_portal_sound', 0), + (5342, 17714, 'void_summon_sound', 0), + (5343, 17715, 'void_teleporter', 0), + (5344, 17723, 'varsoon_portal_collapse', 0), + (5345, 17724, 'varsoon_void_portal', 0), + (5346, 17731, 'result_void_tether_p2p', 0), + (5347, 17733, 'varsoon_crystal_1', 0), + (5348, 17734, 'varsoon_crystal_2', 0), + (5349, 17735, 'varsoon_crystal_3', 0), + (5350, 17741, 'design_blue_sun', 0), + (5351, 17742, 'design_red_sun', 0), + (5352, 17743, 'design_red_sun_sound', 0), + (5353, 17744, 'design_sun_sound', 0), + (5354, 17746, 'result_void_crystal_p2p', 0), + (5355, 17748, 'void_beam_blue', 0), + (5356, 17749, 'void_beam_red', 0), + (5357, 17752, 'cast_5', 0), + (5358, 17756, 'design_lattice_activate', 0), + (5359, 17757, 'design_void_energy_activate', 0), + (5360, 17760, 'void_energy_activate_sound', 0), + (5361, 17761, 'void_energy_sound', 0), + (5362, 17768, 'result_blast_ring', 0), + (5363, 17770, 'void_energy_barrier', 0), + (5364, 17771, 'void_energy_barrier_blast', 0), + (5365, 17779, 'void_energy_channeling_p2p', 0), + (5366, 17785, 'design_result_cloudy_head', 0), + (5367, 17787, 'result_dark_mist', 0), + (5368, 17788, 'result_sparkle_mist', 0), + (5369, 17791, 'cast_meteor_storm', 0), + (5370, 17796, 'result_meteor_storm', 0), + (5371, 17797, 'result_neg_flux', 0), + (5372, 17798, 'result_neg_flux_storm', 0), + (5373, 17799, 'result_void_explode', 0), + (5374, 17800, 'result_void_ragestorm', 0), + (5375, 17801, 'result_void_storm', 0), + (5376, 17804, 'cast_manta_bolt_p2p', 0), + (5377, 17805, 'cast_manta_tail_beam', 0), + (5378, 17806, 'cast_manta_tail_flare', 0), + (5379, 17807, 'cast_nether_blast', 0), + (5380, 17808, 'cast_nether_storm', 0), + (5381, 17811, 'cast_sucking_charge_up', 0), + (5382, 17814, 'result_anashti_curse', 0), + (5383, 17815, 'result_anashti_tempest', 0), + (5384, 17818, 'anashti_summon', 0), + (5385, 17819, 'anashti_transform', 0), + (5386, 17820, 'anashti_vortex', 0), + (5387, 17823, 'attack_breath_inhale', 0), + (5388, 17824, 'attack_burst', 0), + (5389, 17825, 'attack_dark_breath', 0), + (5390, 17826, 'attack_wing_bolts', 0), + (5391, 17833, 'result_misty_snare', 0), + (5392, 17836, 'cast_arcane_blast_aoe', 0), + (5393, 17841, 'result_melee_swipe', 0), + (5394, 17842, 'result_melee_wild_swipe', 0), + (5395, 17847, 'cast_sparkling_dust_aoe', 0), + (5396, 17854, 'result_gnollslayer', 0), + (5397, 17855, 'result_gnollslayer_burst', 0), + (5398, 17856, 'result_skull_debuff', 0), + (5399, 17863, 'result_quick_heal', 0), + (5400, 17866, 'bear_tail', 0), + (5401, 17869, 'bear_sprint', 0), + (5402, 17872, 'bear_attack_sound', 0), + (5403, 17873, 'bear_battlecry_sound', 0), + (5404, 17874, 'bear_dead_sound', 0), + (5405, 17875, 'bear_deadfall_sound', 0), + (5406, 17876, 'bear_headshake_sound', 0), + (5407, 17877, 'bear_idle_sound', 0), + (5408, 17878, 'bear_idle_sound_omit', 0), + (5409, 17879, 'bear_ouch_sound', 0), + (5410, 17880, 'bear_sniff_sound', 0), + (5411, 17886, 'fae_dark_bear_backup', 0), + (5412, 17887, 'fae_dark_bear_idle', 0), + (5413, 17888, 'fae_dark_bear_jump', 0), + (5414, 17889, 'fae_dark_bear_jump_substitute', 0), + (5415, 17890, 'fae_dark_bear_run', 0), + (5416, 17891, 'fae_dark_bear_sprint', 0), + (5417, 17892, 'fae_dark_bear_turn_left', 0), + (5418, 17893, 'fae_dark_bear_turn_right', 0), + (5419, 17894, 'fae_dark_bear_walk', 0), + (5420, 17895, 'fae_light_bear_backup', 0), + (5421, 17896, 'fae_light_bear_idle', 0), + (5422, 17897, 'fae_light_bear_jump', 0), + (5423, 17898, 'fae_light_bear_jump_substitute', 0), + (5424, 17899, 'fae_light_bear_run', 0), + (5425, 17900, 'fae_light_bear_sprint', 0), + (5426, 17901, 'fae_light_bear_turn_left', 0), + (5427, 17902, 'fae_light_bear_turn_right', 0), + (5428, 17903, 'fae_light_bear_walk', 0), + (5429, 17904, 'froglok_bear_backup', 0), + (5430, 17905, 'froglok_bear_idle', 0), + (5431, 17906, 'froglok_bear_jump', 0), + (5432, 17907, 'froglok_bear_jump_substitute', 0), + (5433, 17908, 'froglok_bear_run', 0), + (5434, 17909, 'froglok_bear_sprint', 0), + (5435, 17910, 'froglok_bear_turn_left', 0), + (5436, 17911, 'froglok_bear_turn_right', 0), + (5437, 17912, 'froglok_bear_walk', 0), + (5438, 17918, 'footstep_sound', 0), + (5439, 17925, 'result_fireworks_flower', 0), + (5440, 17926, 'result_fireworks_foamy_burst', 0), + (5441, 17927, 'result_fireworks_rainbow', 0), + (5442, 17929, 'tiered_blast_cone', 0), + (5443, 17930, 'tiered_blood_lust', 0), + (5444, 17931, 'tiered_crush_blast', 0), + (5445, 17932, 'tiered_cyclone', 0), + (5446, 17933, 'tiered_defensive_buff', 0), + (5447, 17934, 'tiered_dustpuff_rfoot', 0), + (5448, 17935, 'tiered_flash_weapon', 0), + (5449, 17936, 'tiered_glow_distort', 0), + (5450, 17937, 'tiered_motion_lines', 0), + (5451, 17938, 'tiered_motion_lines_sub', 0), + (5452, 17939, 'tiered_offensive_buff', 0), + (5453, 17940, 'tiered_shout', 0), + (5454, 17941, 'tiered_sparkle_trail_weapon', 0), + (5455, 17942, 'tiered_sparks_hit', 0), + (5456, 17943, 'tiered_taunt', 0), + (5457, 17944, 'tiered_weapon_trail_fire', 0), + (5458, 17950, 'gathering_end', 0), + (5459, 17951, 'gathering_loop', 0), + (5460, 17952, 'gathering_start', 0), + (5461, 17953, 'idle_afraid', 0), + (5462, 17954, 'idle_angry', 0), + (5463, 17957, 'bearwalk', 0), + (5464, 17963, 'tiered_blast_hit', 0), + (5465, 17964, 'tiered_flash', 0), + (5466, 17965, 'tiered_melee_swipe', 0), + (5467, 17966, 'tiered_shield', 0), + (5468, 17967, 'tiered_slash_hit', 0), + (5469, 17975, 'tiered_shield_blast', 0), + (5470, 17976, 'tiered_slow', 0), + (5471, 17982, 'design_powerarray_electric', 0), + (5472, 17983, 'design_powerarray_void', 0), + (5473, 17984, 'gathering_enter', 0), + (5474, 17985, 'gathering_exit', 0), + (5475, 17988, 'attack_disarm', 0), + (5476, 17992, 'design_ice_fan_side', 0), + (5477, 17993, 'design_ice_fan_up', 0), + (5478, 17994, 'design_najena_barrier', 0), + (5479, 17997, 'sound_attack_disarm', 0), + (5480, 17998, 'sound_fan_start', 0), + (5481, 17999, 'sound_wind_blast', 0), + (5482, 18000, 'tiered_rune_buff', 0), + (5483, 18006, 'electric_fx', 0), + (5484, 18008, 'particle_mood_idle', 0), + (5485, 18010, 'sound_buff_electric', 0), + (5486, 18011, 'sound_buff_void', 0), + (5487, 18012, 'void_fx', 0), + (5488, 18018, 'design_najena_electric_water', 0), + (5489, 18020, 'result_dragon_breath_p2p', 0), + (5490, 18021, 'result_electric_beam_p2p', 0), + (5491, 18022, 'result_void_beam_p2p', 0), + (5492, 18028, 'design_najena_fire', 0), + (5493, 18029, 'design_najena_lightning', 0), + (5494, 18030, 'design_najena_poison', 0), + (5495, 18031, 'design_najena_portals', 0), + (5496, 18032, 'design_najena_snow', 0), + (5497, 18033, 'design_najena_water', 0), + (5498, 18039, 'elemental_fire_hands', 0), + (5499, 18040, 'fire_summon_portal', 0), + (5500, 18043, 'sound_fire_vortex', 0), + (5501, 18046, 'badger_buff', 0), + (5502, 18051, 'mushroom_buff', 0), + (5503, 18053, 'snake_buff', 0), + (5504, 18056, 'cast_lava_shield', 0), + (5505, 18061, 'result_rock_blast_wave', 0), + (5506, 18063, 'summon_fx', 0), + (5507, 18064, 'transform_fx', 0), + (5508, 18072, 'tiered_anger_buff', 0), + (5509, 18073, 'tiered_hand_buff', 0), + (5510, 18079, 'design_fire_wall', 0), + (5511, 18080, 'design_fire_wall_opening', 0), + (5512, 18081, 'design_rock_wall', 0), + (5513, 18082, 'design_rock_wall_breaking', 0), + (5514, 18085, 'aoe_ice_blast', 0), + (5515, 18086, 'aoe_rock_blast', 0), + (5516, 18087, 'cast_air_charge', 0), + (5517, 18088, 'cast_earth_charge', 0), + (5518, 18089, 'cast_fire_charge', 0), + (5519, 18090, 'cast_ice_blast_out', 0), + (5520, 18091, 'cast_ice_column', 0), + (5521, 18094, 'cast_water_charge', 0), + (5522, 18101, 'persist_book_dervish', 0), + (5523, 18107, 'design_elemental_wall', 0), + (5524, 18108, 'design_elemental_wall_breaking', 0), + (5525, 18111, 'sound_electric', 0), + (5526, 18112, 'sound_rock_breaking', 0), + (5527, 18113, 'tiered_bubble_pop', 0), + (5528, 18114, 'tiered_power_gather', 0), + (5529, 18115, 'tiered_quick_heal', 0), + (5530, 18116, 'tiered_rune_in_buff', 0), + (5531, 18117, 'tiered_rune_out_buff', 0), + (5532, 18118, 'tiered_speed', 0), + (5533, 18119, 'tiered_spikes_hit', 0), + (5534, 18120, 'tiered_stifle', 0), + (5535, 18128, 'tiered_defense_buff', 0), + (5536, 18136, 'tiered_bubble_shield', 0), + (5537, 18137, 'tiered_offense_buff', 0), + (5538, 18138, 'tiered_root', 0), + (5539, 18146, 'tiered_charge_up', 0), + (5540, 18154, 'tiered_bubble_shield_in', 0), + (5541, 18155, 'tiered_evil_rune_base', 0), + (5542, 18156, 'tiered_good_rune_base', 0), + (5543, 18157, 'tiered_skull_lifetap', 0), + (5544, 18165, 'tiered_boiling_circle', 0), + (5545, 18173, 'tiered_cloud_blast', 0), + (5546, 18174, 'tiered_diseased', 0), + (5547, 18175, 'tiered_grip_blast', 0), + (5548, 18183, 'tiered_flash_vanish', 0), + (5549, 18184, 'tiered_rune_base', 0), + (5550, 18185, 'tiered_sparkle_cling', 0), + (5551, 18193, 'tiered_dark_mist', 0), + (5552, 18194, 'tiered_mana_drain_p2p', 0), + (5553, 18200, 'design_electric_barrier_round', 0), + (5554, 18201, 'design_fire_barrier_round', 0), + (5555, 18202, 'design_poison_barrier_round', 0), + (5556, 18203, 'design_snow_barrier_round', 0), + (5557, 18204, 'design_water_barrier_round', 0), + (5558, 18207, 'tiered_lost_souls', 0), + (5559, 18215, 'tiered_rock_shield', 0), + (5560, 18216, 'tiered_stance_base', 0), + (5561, 18217, 'waist_tracking_off_trigger', 0), + (5562, 18224, 'result_forced_shader_soot', 0), + (5563, 18226, 'tiered_energy_blob_p2p', 0), + (5564, 18227, 'tiered_heal_hands_blast', 0), + (5565, 18228, 'tiered_healing_rays', 0), + (5566, 18236, 'tiered_blessed_hand', 0), + (5567, 18237, 'tiered_castigate', 0), + (5568, 18238, 'tiered_sparkle_swirl', 0), + (5569, 18244, 'design_void_barrier', 0), + (5570, 18252, 'tiered_defense_buff_brawler', 0), + (5571, 18260, 'tiered_feet_buff', 0), + (5572, 18261, 'tiered_feet_sparks', 0), + (5573, 18262, 'tiered_flame_burst', 0), + (5574, 18263, 'tiered_frenzy', 0), + (5575, 18264, 'tiered_hand_sparks', 0), + (5576, 18265, 'tiered_offense_buff_brawler', 0), + (5577, 18266, 'tiered_rune_buff_brawler', 0), + (5578, 18267, 'tiered_sparkle_scan_up', 0), + (5579, 18275, 'tiered_balance_buff_brawler', 0), + (5580, 18276, 'tiered_focus_spark', 0), + (5581, 18277, 'tiered_second_skin', 0), + (5582, 18278, 'tiered_sonic_punch', 0), + (5583, 18279, 'tiered_wavy_shield_out', 0), + (5584, 18287, 'snd_ape', 0), + (5585, 18288, 'snd_bear_roar', 0), + (5586, 18289, 'snd_hawk_scream', 0), + (5587, 18290, 'snd_monkey', 0), + (5588, 18291, 'snd_owl_hoot', 0), + (5589, 18297, 'design_fae_drake_pet', 0), + (5590, 18300, 'snd_wave_crash', 0), + (5591, 18301, 'tiered_mountain', 0), + (5592, 18302, 'tiered_phoenix_blast', 0), + (5593, 18303, 'tiered_plasma_burst', 0), + (5594, 18304, 'tiered_water_burst', 0), + (5595, 18312, 'tiered_dragon_breath', 0), + (5596, 18313, 'tiered_fear_skulls', 0), + (5597, 18314, 'tiered_hand_flare', 0), + (5598, 18315, 'tiered_heart_beat', 0), + (5599, 18321, 'design_dark_rez', 0), + (5600, 18322, 'design_void_dome', 0), + (5601, 18323, 'heal_lifetap_p2p', 0), + (5602, 18324, 'iksar_ghost_rez_p2p', 0), + (5603, 18327, 'tiered_skull', 0), + (5604, 18333, 'design_gas_fire_blast', 0), + (5605, 18334, 'design_gas_fire_warning', 0), + (5606, 18336, 'result_void_fx_alt', 0), + (5607, 18342, 'design_boiling_energy_blast', 0), + (5608, 18343, 'design_boiling_energy_warning', 0), + (5609, 18346, 'sound_electric_burst', 0), + (5610, 18349, 'cast_boiling_energy', 0), + (5611, 18353, 'design_gas_fire_blast_up', 0), + (5612, 18354, 'design_gas_fire_warning_up', 0), + (5613, 18355, 'design_void_dome_blue', 0), + (5614, 18356, 'design_void_dome_red', 0), + (5615, 18363, 'result_arc_tether_p2p', 0), + (5616, 18364, 'result_rose_petals', 0), + (5617, 18372, 'tiered_plasma_hit', 0), + (5618, 18375, 'cast_back_rune_wheel', 0), + (5619, 18376, 'cast_base_rune_wheel', 0), + (5620, 18377, 'cast_forward_rune_wheel', 0), + (5621, 18383, 'tiered_agility_buff', 0), + (5622, 18384, 'tiered_charge_weapon', 0), + (5623, 18385, 'tiered_energy_beam_p2p', 0), + (5624, 18386, 'tiered_fire_slam', 0), + (5625, 18387, 'tiered_fire_tube', 0), + (5626, 18388, 'tiered_hand_rings', 0), + (5627, 18389, 'tiered_head_ring', 0), + (5628, 18390, 'tiered_intellect_buff', 0), + (5629, 18391, 'tiered_rays_out', 0), + (5630, 18392, 'tiered_rune_drop_base', 0), + (5631, 18393, 'tiered_rune_forward', 0), + (5632, 18394, 'tiered_rune_rise_base', 0), + (5633, 18395, 'tiered_rune_rise_buff', 0), + (5634, 18396, 'tiered_rune_root', 0), + (5635, 18397, 'tiered_rune_swirl', 0), + (5636, 18398, 'tiered_self_lifetap', 0), + (5637, 18399, 'tiered_stamina_buff', 0), + (5638, 18400, 'tiered_strength_buff', 0), + (5639, 18401, 'tiered_weapon_buff_charge', 0), + (5640, 18402, 'tiered_wisdom_buff', 0), + (5641, 18410, 'tiered_blast_circle', 0), + (5642, 18411, 'tiered_chain_root', 0), + (5643, 18412, 'tiered_cold_blast', 0), + (5644, 18413, 'tiered_column_blast_circle', 0), + (5645, 18414, 'tiered_fire_column', 0), + (5646, 18415, 'tiered_fireball_p2p', 0), + (5647, 18416, 'tiered_frostball_p2p', 0), + (5648, 18417, 'tiered_glacial_wall', 0), + (5649, 18418, 'tiered_hand_runes', 0), + (5650, 18419, 'tiered_ice_root', 0), + (5651, 18420, 'tiered_icicle_blast_p2p', 0), + (5652, 18421, 'tiered_particle_transfer_p2p', 0), + (5653, 18422, 'tiered_rune_chain_swirl', 0), + (5654, 18423, 'tiered_windy_tube_p2p', 0), + (5655, 18431, 'tiered_blast_cone_forward', 0), + (5656, 18432, 'tiered_cold_fusion', 0), + (5657, 18433, 'tiered_dots_explode', 0), + (5658, 18434, 'tiered_forced_shader_burst', 0), + (5659, 18435, 'tiered_frosty_swirls', 0), + (5660, 18436, 'tiered_magic_waves', 0), + (5661, 18437, 'tiered_ring_blast_p2p', 0), + (5662, 18440, 'cast_enchanter_wheel_back', 0), + (5663, 18441, 'cast_enchanter_wheel_base', 0), + (5664, 18442, 'cast_enchanter_wheel_forward', 0), + (5665, 18445, 'cast_summoner_wheel_back', 0), + (5666, 18446, 'cast_summoner_wheel_base', 0), + (5667, 18447, 'cast_summoner_wheel_forward', 0), + (5668, 18451, 'tiered_poisonball_p2p', 0), + (5669, 18452, 'tiered_poisoned', 0), + (5670, 18453, 'tiered_rune_spikes_swirl', 0), + (5671, 18454, 'tiered_spikes_root', 0), + (5672, 18462, 'tiered_column_poison_blast', 0), + (5673, 18463, 'tiered_hand_evil_runes', 0), + (5674, 18464, 'tiered_poison_breath', 0), + (5675, 18467, 'cast_hand_energy_artifact', 0), + (5676, 18471, 'design_hand_energy_artifact', 0), + (5677, 18473, 'result_sparkles_crackle_out', 0), + (5678, 18474, 'result_wings_grow', 0), + (5679, 18476, 'tiered_power_drain_p2p', 0), + (5680, 18479, 'cast_flash_jump_attack', 0), + (5681, 18484, 'result_forced_shader_rock_blue', 0), + (5682, 18485, 'result_forced_shader_rock_green', 0), + (5683, 18486, 'result_forced_shader_rock_purple', 0), + (5684, 18487, 'result_forced_shader_rock_yellow', 0), + (5685, 18488, 'result_iksar_statue_beam_p2p', 0), + (5686, 18489, 'result_root_magic', 0), + (5687, 18490, 'result_stifle_magic', 0), + (5688, 18497, 'result_shackles_void', 0), + (5689, 18503, 'design_bixie_pet', 0), + (5690, 18504, 'design_bones_shockwave', 0), + (5691, 18505, 'design_void_shield', 0), + (5692, 18508, 'cast_column_blast_circle', 0), + (5693, 18509, 'cast_goo_bubble_bursting', 0), + (5694, 18512, 'cast_raise_dead_column', 0), + (5695, 18515, 'result_bone_cyclone', 0), + (5696, 18516, 'result_cold_blast_snow', 0), + (5697, 18517, 'result_flame_burst', 0), + (5698, 18518, 'result_gloop_root', 0), + (5699, 18525, 'result_boot_kick', 0), + (5700, 18526, 'result_sonic_trail', 0), + (5701, 18532, 'design_barrier_void', 0), + (5702, 18533, 'design_er_light_beam_p2p', 0), + (5703, 18534, 'design_er_target_cube', 0), + (5704, 18540, 'design_erudin_column_fx', 0), + (5705, 18541, 'design_shield_drop', 0), + (5706, 18544, 'sound_electrified', 0), + (5707, 18545, 'sound_shield_drop', 0), + (5708, 18548, 'attack_eye_beams', 0), + (5709, 18551, 'charge_mouth_fx', 0), + (5710, 18553, 'design_gazer_eye_beam_p2p', 0), + (5711, 18554, 'fx_eye_beam1', 0), + (5712, 18555, 'fx_eye_beam2', 0), + (5713, 18556, 'fx_eye_beam3', 0), + (5714, 18557, 'fx_eye_beam4', 0), + (5715, 18558, 'fx_eye_beam5', 0), + (5716, 18559, 'fx_eye_charge', 0), + (5717, 18561, 'result_disintegrate', 0), + (5718, 18563, 'sound_charge', 0), + (5719, 18564, 'sound_charge_blast', 0), + (5720, 18570, 'design_erudin_wind_boost', 0), + (5721, 18571, 'design_rocket_pack', 0), + (5722, 18574, 'wind_blast_sound', 0), + (5723, 18577, 'attack_eye_ring', 0), + (5724, 18581, 'design_erudin_column_charge', 0), + (5725, 18582, 'design_gazer_main_eye_beam_p2p', 0), + (5726, 18584, 'result_melt', 0), + (5727, 18586, 'sit', 0), + (5728, 18587, 'sit_to_idle', 0), + (5729, 18593, 'design_erudin_gazer_barrier', 0), + (5730, 18595, 'power_on', 0), + (5731, 18601, 'design_erudin_gun_plugged', 0), + (5732, 18602, 'design_erudin_gun_unplugged', 0), + (5733, 18603, 'habitat01', 0), + (5734, 18604, 'habitat02', 0), + (5735, 18605, 'habitat03', 0), + (5736, 18606, 'idle01_stone', 0), + (5737, 18607, 'idle_stone', 0), + (5738, 18609, 'scarecrow_post_idle', 0), + (5739, 18611, 'shield_bash', 0), + (5740, 18617, 'design_bat_pet', 0), + (5741, 18619, 'result_bubble_glow', 0), + (5742, 18620, 'result_leaf_blow_glow', 0), + (5743, 18627, 'result_splat_add', 0), + (5744, 18632, 'cast_summon', 0), + (5745, 18634, 'design_guardian_wisp_summon_p2p', 0), + (5746, 18636, 'result_buble_leaf_blast', 0), + (5747, 18642, 'design_eru_book_cyclone', 0), + (5748, 18643, 'design_eru_book_ramp', 0), + (5749, 18649, 'design_erudin_teleport_good', 0), + (5750, 18650, 'design_erudin_teleport_trap', 0), + (5751, 18652, 'result_teleport_ring_vanish', 0), + (5752, 18654, 'tiered_unyielding_will', 0), + (5753, 18662, 'tiered_black_hole', 0), + (5754, 18670, 'sound_bark', 0), + (5755, 18671, 'sound_combat_idle', 0), + (5756, 18672, 'sound_dead_fall', 0), + (5757, 18673, 'sound_death_whimper', 0), + (5758, 18674, 'sound_pant', 0), + (5759, 18675, 'sound_sniff', 0), + (5760, 18681, 'design_icy_barrier', 0), + (5761, 18683, 'result_teleport_icy_vanish', 0), + (5762, 18691, 'tiered_acid_storm', 0), + (5763, 18692, 'tiered_bone_cage', 0), + (5764, 18693, 'tiered_dark_cyclone', 0), + (5765, 18694, 'tiered_rift', 0), + (5766, 18695, 'tiered_skull_summon', 0), + (5767, 18696, 'tiered_skull_swirls', 0), + (5768, 18703, 'rain_of_shinies', 0), + (5769, 18706, 'cast_gathering_charge_up', 0), + (5770, 18711, 'result_charge_tag', 0), + (5771, 18712, 'result_nuke_blast', 0), + (5772, 18713, 'result_pillar_blast', 0), + (5773, 18714, 'result_pillar_slam', 0), + (5774, 18715, 'result_precharge_blast', 0), + (5775, 18721, 'design_book_shield1', 0), + (5776, 18722, 'design_book_shield2', 0), + (5777, 18723, 'design_book_shield3', 0), + (5778, 18724, 'design_book_summon1', 0), + (5779, 18725, 'design_book_summon2', 0), + (5780, 18726, 'design_book_summon3', 0), + (5781, 18729, 'badge_acquired', 0), + (5782, 18733, 'cooked/characters/ec/core/mounts/pegasus/pegasus_glide.anim', 0), + (5783, 18734, 'design_claw_face', 0), + (5784, 18736, 'pegasus_glide', 0), + (5785, 18737, 'pegasus_idle', 0), + (5786, 18738, 'pegasus_run', 0), + (5787, 18739, 'pegasus_walk', 0), + (5788, 18741, 'sound_vortex', 0), + (5789, 18746, 'coin_drop_snd', 0), + (5790, 18748, 'design_coin_drop', 0), + (5791, 18754, 'design_air_portal', 0), + (5792, 18755, 'design_fear_portal', 0), + (5793, 18756, 'design_growth_portal', 0), + (5794, 18757, 'design_water_portal', 0), + (5795, 18763, 'design_clouds_parting', 0), + (5796, 18764, 'design_summon', 0), + (5797, 18765, 'design_unsummon', 0), + (5798, 18771, 'design_death_beam_p2p', 0), + (5799, 18772, 'design_statue_death_beam_p2p', 0), + (5800, 18773, 'design_statue_power', 0), + (5801, 18774, 'design_zapper_bolt_p2p', 0), + (5802, 18781, 'result_forced_shader_shadow', 0), + (5803, 18782, 'result_ghost_trap', 0), + (5804, 18788, 'cooked/characters/ec/core/mounts/pegasus/pegasus_run.anim', 0), + (5805, 18789, 'design_coffin_explode', 0), + (5806, 18790, 'design_coffin_lid', 0), + (5807, 18791, 'design_erollisi_essence', 0), + (5808, 18792, 'design_erollisi_evil_essence', 0), + (5809, 18793, 'design_light_rays', 0), + (5810, 18795, 'pegasus_fly', 0), + (5811, 18798, 'cast_enter', 0), + (5812, 18799, 'cast_exit', 0), + (5813, 18800, 'cast_idle', 0), + (5814, 18806, 'design_marr_godly_light', 0), + (5815, 18807, 'design_marr_godly_teleport', 0), + (5816, 18809, 'result_sparkles_cling_drop_bounce', 0), + (5817, 18815, 'design_flaming_pumpkin_p2p', 0), + (5818, 18818, 'snd_splat', 0), + (5819, 18819, 'trdskl_flaming_pumpkin', 0), + (5820, 18826, 'result_cold_summon_portal', 0), + (5821, 18827, 'result_teleport_blast_up', 0), + (5822, 18828, 'result_teleport_fold', 0), + (5823, 18830, 'sound_attack_grunt', 0), + (5824, 18831, 'sound_attack_stab', 0), + (5825, 18832, 'sound_attack_vo', 0), + (5826, 18833, 'sound_attack_vo_01', 0), + (5827, 18834, 'sound_attack_whip_high', 0), + (5828, 18835, 'sound_attack_whip_low', 0), + (5829, 18836, 'sound_attack_whip_low_01', 0), + (5830, 18837, 'sound_attack_whirl', 0), + (5831, 18838, 'sound_cast_enter_bodynoise_01', 0), + (5832, 18839, 'sound_cast_enter_bodynoise_02', 0), + (5833, 18840, 'sound_cast_enter_roar', 0), + (5834, 18841, 'sound_cast_exit_roar', 0), + (5835, 18842, 'sound_cast_exit_spring', 0), + (5836, 18843, 'sound_cast_idle', 0), + (5837, 18844, 'sound_combat_art_buff_bodynoise_01', 0), + (5838, 18845, 'sound_combat_art_buff_bodynoise_02', 0), + (5839, 18846, 'sound_combat_art_buff_roar', 0), + (5840, 18847, 'sound_footstep_deep', 0), + (5841, 18848, 'sound_footstep_small', 0), + (5842, 18849, 'sound_idle_bodynoise', 0), + (5843, 18850, 'sound_idle_breath', 0), + (5844, 18851, 'sound_idle_breath_01', 0), + (5845, 18852, 'sound_rockbody', 0), + (5846, 18853, 'sound_roperbodynoise_quick', 0), + (5847, 18854, 'sound_roperbodynoise_slow', 0), + (5848, 18857, 'cast_ice_pulse', 0), + (5849, 18858, 'cast_icicle_spin_blast', 0), + (5850, 18863, 'result_icicle_hit', 0), + (5851, 18866, 'attack_head_butt', 0), + (5852, 18867, 'attack_trample', 0), + (5853, 18874, 'result_lightning_bolt_blast', 0), + (5854, 18875, 'result_mana_drain_p2p', 0), + (5855, 18876, 'result_rainy_black_cloud', 0), + (5856, 18877, 'result_spikes_hit', 0), + (5857, 18882, 'cast_stomp_blast_aoe', 0), + (5858, 18885, 'result_banish', 0), + (5859, 18886, 'result_banish_wisps_p2p', 0), + (5860, 18887, 'result_icicle_storm', 0), + (5861, 18893, 'design_ice_chains', 0), + (5862, 18895, 'screech_attack', 0), + (5863, 18897, 'sound_head_butt', 0), + (5864, 18903, 'design_bone_barrier', 0), + (5865, 18905, 'result_fireworks_shinies', 0), + (5866, 18908, 'cannon_blast', 0), + (5867, 18913, 'kneel_enter', 0), + (5868, 18914, 'kneel_exit', 0), + (5869, 18915, 'kneel_idle', 0), + (5870, 18916, 'result_octopus_cannon_p2p', 0), + (5871, 18917, 'result_octopus_splat_grab', 0), + (5872, 18923, 'design_vd_bone_swirls', 0), + (5873, 18924, 'design_vd_portal', 0), + (5874, 18925, 'design_void_tainted', 0), + (5875, 18926, 'flight_path_dawn', 0), + (5876, 18933, 'result_plasma_bolt_p2p', 0), + (5877, 18938, 'cast_sea_dragon_breath', 0), + (5878, 18939, 'cast_sea_dragon_inhale', 0), + (5879, 18940, 'cast_sea_dragon_powerup', 0), + (5880, 18942, 'converse01', 0), + (5881, 18943, 'converse02', 0), + (5882, 18945, 'panda_chi', 0), + (5883, 18947, 'sit_eat', 0), + (5884, 18948, 'yells_charge', 0), + (5885, 18954, 'hover_idle', 0), + (5886, 18960, 'design_hedge_marker', 0), + (5887, 18961, 'design_sol_lock_symbol', 0), + (5888, 18962, 'h_sword_attack', 0), + (5889, 18964, 'panda_dance01', 0), + (5890, 18965, 'panda_dance02', 0), + (5891, 18966, 'result_sea_dragon_buff_aoe', 0), + (5892, 18972, 'design_marr_sword_blast', 0), + (5893, 18973, 'design_vision_plane_spires', 0), + (5894, 18979, 'design_sol_chapel_debris', 0), + (5895, 18985, 'design_hole_pillar_corruption', 0), + (5896, 18991, 'design_sol_coffin_body_fx', 0), + (5897, 18997, 'design_spider_face', 0), + (5898, 19003, 'design_vd_shrine_blast', 0), + (5899, 19009, 'design_hole_summon_circle1', 0), + (5900, 19010, 'design_hole_summon_circle2', 0), + (5901, 19011, 'design_hole_summon_circle3', 0), + (5902, 19012, 'design_hole_summon_circle4', 0), + (5903, 19013, 'design_hole_summon_circles', 0), + (5904, 19020, 'result_fireworks_rose_petals', 0), + (5905, 19028, 'sound_glass_break', 0), + (5906, 19034, 'design_fire_lit', 0), + (5907, 19035, 'design_rhand_sparkles_out', 0), + (5908, 19036, 'design_rhand_stars_out', 0), + (5909, 19037, 'design_rune_fire_lit', 0), + (5910, 19040, 'sit_fish', 0), + (5911, 19043, 'cast_god_blast', 0), + (5912, 19047, 'eat_bread', 0), + (5913, 19048, 'eat_fish', 0), + (5914, 19051, 'cast_magic_portal', 0), + (5915, 19056, 'result_fireworks_snowflakes', 0), + (5916, 19057, 'result_snowflakes_falling', 0), + (5917, 19063, 'design_furnace_fire_blast', 0), + (5918, 19064, 'design_golden_fire_lit', 0), + (5919, 19070, 'design_personal_void_vortex', 0), + (5920, 19073, 'cast_icy_division', 0), + (5921, 19079, 'design_fire_elemental_smoke_blast', 0), + (5922, 19080, 'design_hole_furnace_charge', 0), + (5923, 19081, 'design_hole_furnace_essence', 0), + (5924, 19087, 'design_crossed_swords', 0), + (5925, 19088, 'design_feet_trail_clockwork', 0), + (5926, 19089, 'design_feet_trail_confusion', 0), + (5927, 19090, 'design_feet_trail_rose_petals', 0), + (5928, 19091, 'design_feet_trail_shamrocks', 0), + (5929, 19092, 'design_feet_trail_skulls', 0), + (5930, 19093, 'design_feet_trail_snow', 0), + (5931, 19098, 'cast_water_shield', 0), + (5932, 19101, 'result_diseased', 0), + (5933, 19102, 'result_stew_pot_dump', 0), + (5934, 19108, 'converse03', 0), + (5935, 19114, 'design_vd_shrine_bridge', 0), + (5936, 19115, 'design_vd_shrine_dome', 0), + (5937, 19121, 'dust_fx', 0), + (5938, 19124, 'cast_medusa_snake_attack_aoe', 0), + (5939, 19125, 'cast_medusa_snake_attack_p2p', 0), + (5940, 19126, 'cast_medusa_snake_buff', 0), + (5941, 19130, 'fly_from_roost', 0), + (5942, 19132, 'result_medusa_snake_strike', 0), + (5943, 19134, 'untrained_enter', 0), + (5944, 19137, 'cast_lost_souls_rising', 0), + (5945, 19138, 'cast_poison_column_blast', 0), + (5946, 19141, 'cast_stone_gaze', 0), + (5947, 19144, 'result_eel_spit_p2p', 0), + (5948, 19145, 'result_medusa_snake_attack_p2p', 0), + (5949, 19146, 'result_poisoned', 0), + (5950, 19152, 'design_eru_light_bridge', 0), + (5951, 19153, 'design_vd_shrine_bridge1', 0), + (5952, 19154, 'design_vd_shrine_bridge2', 0), + (5953, 19157, 'cast_poison_daggers', 0), + (5954, 19162, 'result_amputation', 0), + (5955, 19163, 'result_amputation_blast', 0), + (5956, 19165, 'trdskl_bow', 0), + (5957, 19172, 'result_dark_wings', 0), + (5958, 19178, 'dw_attack_enter', 0), + (5959, 19179, 'dw_attack_exit', 0), + (5960, 19180, 'dw_attack_hold', 0), + (5961, 19181, 'fly_away', 0), + (5962, 19183, 'result_fist_rain', 0), + (5963, 19191, 'smoke_fx', 0), + (5964, 19199, 'trdskl_firefly_escape', 0), + (5965, 19200, 'trdskl_firefly_jar', 0), + (5966, 19205, 'cast_watching', 0), + (5967, 19208, 'result_bullseye', 0), + (5968, 19213, 'cast_weapon_chargeup', 0), + (5969, 19214, 'cast_weapon_glint_point', 0), + (5970, 19215, 'cast_weapon_shudder', 0), + (5971, 19221, 'dual_wield_idle01', 0), + (5972, 19222, 'habitat04', 0), + (5973, 19228, 'design_boulder_roll', 0), + (5974, 19229, 'design_boulder_shatter', 0), + (5975, 19230, 'design_vd_teleport_fx', 0), + (5976, 19237, 'quick_summon_fx', 0), + (5977, 19245, 'smoke_fx_short', 0), + (5978, 19248, 'cast_ghostly_vanish', 0), + (5979, 19253, 'result_ghostly_possession_p2p', 0), + (5980, 19255, 'sound_big_footstep', 0), + (5981, 19256, 'sound_roehn_theer_cast_roar', 0), + (5982, 19257, 'sound_roehn_theer_cast_roar_1', 0), + (5983, 19258, 'sound_roehn_theer_combat_art_buff_roar', 0), + (5984, 19259, 'sound_roehn_theer_combat_idle_wings', 0), + (5985, 19260, 'sound_roehn_theer_death_roar', 0), + (5986, 19261, 'sound_roehn_theer_dodge_grunt', 0), + (5987, 19262, 'sound_roehn_theer_footstep_deep', 0), + (5988, 19263, 'sound_roehn_theer_footstep_light', 0), + (5989, 19264, 'sound_roehn_theer_grunt_quick', 0), + (5990, 19265, 'sound_roehn_theer_hit', 0), + (5991, 19266, 'sound_roehn_theer_idle_04_knuckles', 0), + (5992, 19267, 'sound_roehn_theer_idle_hiss', 0), + (5993, 19268, 'sound_roehn_theer_idle_hiss_light', 0), + (5994, 19269, 'sound_roehn_theer_ouch', 0), + (5995, 19270, 'sound_roehn_theer_sheath', 0), + (5996, 19271, 'sound_roehn_theer_shield_shove_grunt', 0), + (5997, 19272, 'sound_roehn_theer_sit_wings_short', 0), + (5998, 19273, 'sound_roehn_theer_stomp', 0), + (5999, 19274, 'sound_roehn_theer_swim_idle', 0), + (6000, 19275, 'sound_roehn_theer_sword_attack_grunt', 0), + (6001, 19276, 'sound_roehn_theer_sword_attack_grunt_quick', 0), + (6002, 19277, 'sound_roehn_theer_sword_swoosh', 0), + (6003, 19278, 'sound_roehn_theer_tail_whoosh', 0), + (6004, 19279, 'sound_roehn_theer_tail_whoosh_deep', 0), + (6005, 19280, 'sound_roehn_theer_unsheath', 0), + (6006, 19281, 'sound_roehn_theer_wings', 0), + (6007, 19282, 'sound_roehn_theer_wings_1', 0), + (6008, 19289, 'mage_combo_trigger', 0), + (6009, 19290, 'result_blast_hit', 0), + (6010, 19291, 'result_mesh_blast', 0), + (6011, 19292, 'result_skull_lifetap', 0), + (6012, 19295, 'cast_crackling_rift_summon', 0), + (6013, 19300, 'scout_combo_trigger', 0), + (6014, 19302, 'sound_attack_grunt_small', 0), + (6015, 19303, 'sound_combat_enter_pop', 0), + (6016, 19304, 'sound_combat_enter_vox', 0), + (6017, 19305, 'sound_combat_enter_woodbreak', 0), + (6018, 19306, 'sound_dodge_down', 0), + (6019, 19307, 'sound_reverberant_bang', 0), + (6020, 19308, 'sound_whip_hit', 0), + (6021, 19309, 'swim', 0), + (6022, 19315, 'design_eru_lightning_barrier', 0), + (6023, 19316, 'design_eru_water_barrier', 0), + (6024, 19322, 'design_eru_ring_boundary', 0), + (6025, 19324, 'result_eru_tether_p2p', 0), + (6026, 19330, 'design_eru_alcove_broken', 0), + (6027, 19331, 'design_eru_alcove_working', 0), + (6028, 19332, 'design_eru_platform_discharge', 0), + (6029, 19333, 'design_eru_platform_summon', 0), + (6030, 19338, 'cast_wand_fizzle', 0), + (6031, 19341, 'result_lightning_cage_blast', 0), + (6032, 19342, 'result_wand_lightning_bolts_p2p', 0), + (6033, 19350, 'sound_big_wings', 0), + (6034, 19351, 'sound_toxxulia_attack_roar', 0), + (6035, 19352, 'sound_toxxulia_bark', 0), + (6036, 19353, 'sound_toxxulia_big_footsteps', 0), + (6037, 19354, 'sound_toxxulia_cast_roar', 0), + (6038, 19355, 'sound_toxxulia_feet_nails', 0), + (6039, 19356, 'sound_toxxulia_growl', 0), + (6040, 19357, 'sound_toxxulia_grunt', 0), + (6041, 19358, 'sound_toxxulia_hiss', 0), + (6042, 19359, 'sound_toxxulia_hiss_quiet', 0), + (6043, 19360, 'sound_toxxulia_idle_wing_movement_short', 0), + (6044, 19361, 'sound_toxxulia_ouch_hit', 0), + (6045, 19362, 'sound_toxxulia_scrape', 0), + (6046, 19363, 'sound_toxxulia_swallow_crunch_close', 0), + (6047, 19364, 'sound_toxxulia_swallow_crunch_open', 0), + (6048, 19365, 'sound_toxxulia_swallow_roar', 0), + (6049, 19366, 'sound_toxxulia_swallow_slop', 0), + (6050, 19367, 'sound_toxxulia_swim', 0), + (6051, 19368, 'sound_toxxulia_tail_drop', 0), + (6052, 19369, 'sound_toxxulia_walk', 0), + (6053, 19370, 'sound_toxxulia_whip', 0), + (6054, 19371, 'sound_toxxulia_whip_light', 0), + (6055, 19372, 'sound_toxxulia_wing_movement', 0), + (6056, 19373, 'sound_toxxulia_wings_flapping', 0), + (6057, 19381, 'tiered_confused', 0), + (6058, 19382, 'tiered_doppleganger_p2p', 0), + (6059, 19383, 'tiered_entranced', 0), + (6060, 19384, 'tiered_forced_shader_prism', 0), + (6061, 19385, 'tiered_glow_eyes', 0), + (6062, 19386, 'tiered_hand_crescent', 0), + (6063, 19387, 'tiered_hand_prism', 0), + (6064, 19388, 'tiered_mage_cure', 0), + (6065, 19389, 'tiered_mage_ring_cure', 0), + (6066, 19390, 'tiered_mental_blast', 0), + (6067, 19391, 'tiered_mental_damage', 0), + (6068, 19392, 'tiered_prism_eyes', 0), + (6069, 19393, 'tiered_prism_rain', 0), + (6070, 19394, 'tiered_prism_rays', 0), + (6071, 19395, 'tiered_prismatic_summon', 0), + (6072, 19396, 'tiered_runed_shield', 0), + (6073, 19397, 'tiered_spin_stat_buff', 0), + (6074, 19398, 'tiered_vanish_reappear', 0), + (6075, 19406, 'tiered_mind_rings', 0), + (6076, 19407, 'tiered_stunned', 0), + (6077, 19415, 'tiered_mind_blast', 0), + (6078, 19416, 'tiered_prism_cling', 0), + (6079, 19424, 'tiered_crystal_summon', 0), + (6080, 19425, 'tiered_magic_summon', 0), + (6081, 19426, 'tiered_power_transfer_p2p', 0), + (6082, 19427, 'tiered_sucking_tube_p2p', 0), + (6083, 19435, 'tiered_bat_attack_p2p', 0), + (6084, 19436, 'tiered_crystal_blast', 0), + (6085, 19437, 'tiered_crystal_p2p', 0), + (6086, 19438, 'tiered_earth_summon', 0), + (6087, 19439, 'tiered_quicksand', 0), + (6088, 19440, 'tiered_shrink', 0), + (6089, 19448, 'tiered_air_summon', 0), + (6090, 19449, 'tiered_earthquake', 0), + (6091, 19450, 'tiered_elemental_portal', 0), + (6092, 19451, 'tiered_fire_summon', 0), + (6093, 19452, 'tiered_life_summon', 0), + (6094, 19453, 'tiered_plane_shift', 0), + (6095, 19459, 'gazer_pained_roar', 0), + (6096, 19462, 'sound_gazer_attack02_roar', 0), + (6097, 19463, 'sound_gazer_attack03_roar', 0), + (6098, 19464, 'sound_gazer_attack_roar', 0), + (6099, 19465, 'sound_gazer_attack_woosh', 0), + (6100, 19466, 'sound_gazer_attack_woosh_quiet', 0), + (6101, 19467, 'sound_gazer_bite_roar', 0), + (6102, 19468, 'sound_gazer_bodynoise', 0), + (6103, 19469, 'sound_gazer_bodynoise_fall', 0), + (6104, 19470, 'sound_gazer_bodynoise_fall_deep', 0), + (6105, 19471, 'sound_gazer_bodynoise_fall_dirt', 0), + (6106, 19472, 'sound_gazer_bodynoise_long', 0), + (6107, 19473, 'sound_gazer_breath', 0), + (6108, 19474, 'sound_gazer_breath_grunt', 0), + (6109, 19475, 'sound_gazer_combat_art_buff_roar', 0), + (6110, 19476, 'sound_gazer_crunch', 0), + (6111, 19477, 'sound_gazer_deadfall', 0), + (6112, 19478, 'sound_gazer_eyeball_gross', 0), + (6113, 19479, 'sound_gazer_eyeball_pop', 0), + (6114, 19480, 'sound_gazer_eyeball_pop_quiet', 0), + (6115, 19481, 'sound_gazer_eyeball_twirl', 0), + (6116, 19482, 'sound_gazer_growl_low', 0), + (6117, 19483, 'sound_gazer_grunt_short', 0), + (6118, 19484, 'sound_gazer_liddown', 0), + (6119, 19485, 'sound_gazer_swim', 0), + (6120, 19486, 'sound_gazer_swim_idle', 0), + (6121, 19487, 'sound_gazer_whip', 0), + (6122, 19488, 'sound_gazer_whip_impact', 0), + (6123, 19489, 'sound_gazer_whip_low', 0), + (6124, 19490, 'tiered_clouds_head', 0), + (6125, 19491, 'tiered_hand_dark_rings', 0), + (6126, 19492, 'tiered_heart_summon', 0), + (6127, 19493, 'tiered_undead_tide', 0), + (6128, 19494, 'tiered_vampirism_p2p', 0), + (6129, 19497, 'attack_eat', 0), + (6130, 19502, 'perch_idle', 0), + (6131, 19509, 'result_steam_cup', 0), + (6132, 19515, 'design_glow_full', 0), + (6133, 19516, 'design_glow_low', 0), + (6134, 19517, 'design_glow_med', 0), + (6135, 19519, 'result_energy_drain_p2p', 0), + (6136, 19520, 'result_meditate_rings', 0), + (6137, 19526, 'design_hole_mines', 0), + (6138, 19527, 'design_hole_mines_blast', 0), + (6139, 19530, 'sound_mine_blast', 0), + (6140, 19531, 'sound_mine_splash', 0), + (6141, 19537, 'design_th_platform', 0), + (6142, 19538, 'design_th_platform_collapse', 0), + (6143, 19539, 'design_th_platform_rift', 0), + (6144, 19547, 'sound_displacer_beast_attack_1', 0), + (6145, 19548, 'sound_displacer_beast_footstep', 0), + (6146, 19549, 'sound_displacer_beast_footstep_dirt', 0), + (6147, 19550, 'sound_displacer_beast_hiss', 0), + (6148, 19551, 'sound_displacer_beast_idle', 0), + (6149, 19552, 'sound_displacer_beast_idle_long', 0), + (6150, 19553, 'sound_displacer_beast_whip', 0), + (6151, 19554, 'sound_displacer_beast_whip_deep', 0), + (6152, 19555, 'sound_displacer_beast_whip_high', 0), + (6153, 19558, 'cast_air_sample', 0), + (6154, 19563, 'cast_tallonite_lash_cone', 0), + (6155, 19564, 'cast_tallonite_lash_summon', 0), + (6156, 19567, 'lynx_backup', 0), + (6157, 19568, 'lynx_fall', 0), + (6158, 19569, 'lynx_idle', 0), + (6159, 19570, 'lynx_jump', 0), + (6160, 19571, 'lynx_jump_substitute', 0), + (6161, 19572, 'lynx_land', 0), + (6162, 19573, 'lynx_long_fall', 0), + (6163, 19574, 'lynx_run', 0), + (6164, 19575, 'lynx_turn_left', 0), + (6165, 19576, 'lynx_turn_right', 0), + (6166, 19577, 'lynx_walk', 0), + (6167, 19578, 'result_tallonite_barb_p2p', 0), + (6168, 19579, 'result_trail_tallonite', 0), + (6169, 19582, 'attack_throw_boulder', 0), + (6170, 19585, 'cast_tallonite_balance', 0), + (6171, 19588, 'result_cloud_dot_blast', 0), + (6172, 19589, 'result_tallonite_lash_p2p', 0), + (6173, 19596, 'result_tallonite_lash_skulls_p2p', 0), + (6174, 19597, 'result_tallonite_skull_control', 0), + (6175, 19598, 'result_tallonite_sphere', 0), + (6176, 19600, 'sound_displacer_beast_attack_2', 0), + (6177, 19601, 'sound_displacer_beast_attack_3', 0), + (6178, 19602, 'sound_displacer_beast_bark', 0), + (6179, 19603, 'sound_displacer_beast_big_purr', 0), + (6180, 19604, 'sound_displacer_beast_blade_fall', 0), + (6181, 19605, 'sound_displacer_beast_blade_swoosh', 0), + (6182, 19606, 'sound_displacer_beast_charge_up_roar', 0), + (6183, 19607, 'sound_displacer_beast_dead_1', 0), + (6184, 19608, 'sound_displacer_beast_dead_2', 0), + (6185, 19609, 'sound_displacer_beast_dodge_thrust_roar', 0), + (6186, 19610, 'sound_displacer_beast_fall_small', 0), + (6187, 19611, 'sound_displacer_beast_footstep_deep', 0), + (6188, 19612, 'sound_displacer_beast_idle_breath', 0), + (6189, 19613, 'sound_displacer_beast_ouch', 0), + (6190, 19614, 'sound_displacer_beast_ouch_hit', 0), + (6191, 19615, 'sound_displacer_beast_pulse', 0), + (6192, 19616, 'sound_displacer_beast_pulse_crunch', 0), + (6193, 19617, 'sound_displacer_beast_small_purr', 0), + (6194, 19618, 'sound_displacer_beast_swim', 0), + (6195, 19626, 'sound_pandaman_footstep', 0), + (6196, 19627, 'sound_pandaman_idle_breathing', 0), + (6197, 19628, 'sound_pegasus_attack', 0), + (6198, 19629, 'sound_pegasus_attack_1', 0), + (6199, 19630, 'sound_pegasus_attack_4', 0), + (6200, 19631, 'sound_pegasus_death_fall', 0), + (6201, 19632, 'sound_pegasus_death_niegh', 0), + (6202, 19633, 'sound_pegasus_grunt', 0), + (6203, 19634, 'sound_pegasus_hooves', 0), + (6204, 19635, 'sound_pegasus_hooves_scrapex', 0), + (6205, 19636, 'sound_pegasus_idle_1', 0), + (6206, 19637, 'sound_pegasus_idle_2', 0), + (6207, 19638, 'sound_pegasus_idle_slow', 0), + (6208, 19639, 'sound_pegasus_idleloop', 0), + (6209, 19640, 'sound_pegasus_limb_whip', 0), + (6210, 19641, 'sound_pegasus_ouch_1', 0), + (6211, 19642, 'sound_pegasus_ouch_hit', 0), + (6212, 19643, 'sound_pegasus_snort_quick', 0), + (6213, 19644, 'sound_pegasus_wings_soft', 0), + (6214, 19651, 'lynx_idle01', 0), + (6215, 19656, 'cast_spin_flash_buff', 0), + (6216, 19657, 'cast_tallonite_dagger_blast', 0), + (6217, 19659, 'energy_blobs_kick_blast', 0), + (6218, 19661, 'result_slow', 0), + (6219, 19666, 'cast_tallonite_axe_throw', 0), + (6220, 19667, 'cast_tallonite_glow_eyes', 0), + (6221, 19669, 'design_sen_lava_falls', 0), + (6222, 19670, 'design_sen_lightning_rune_orb', 0), + (6223, 19676, 'design_eru_column_protection', 0), + (6224, 19682, 'design_theer_fire_forrest', 0), + (6225, 19683, 'design_theer_fire_passion', 0), + (6226, 19684, 'design_theer_fire_water', 0), + (6227, 19685, 'design_theer_fire_wrath', 0), + (6228, 19686, 'design_theer_obj_forrest', 0), + (6229, 19687, 'design_theer_obj_passion', 0), + (6230, 19688, 'design_theer_obj_water', 0), + (6231, 19689, 'design_theer_obj_wrath', 0), + (6232, 19690, 'design_theer_symbol_blast', 0), + (6233, 19691, 'design_theer_symbol_evil', 0), + (6234, 19692, 'design_theer_symbol_forrest', 0), + (6235, 19693, 'design_theer_symbol_good', 0), + (6236, 19694, 'design_theer_symbol_none', 0), + (6237, 19695, 'design_theer_symbol_passion', 0), + (6238, 19696, 'design_theer_symbol_water', 0), + (6239, 19697, 'design_theer_symbol_wrath', 0), + (6240, 19698, 'design_theer_wrath_blast', 0), + (6241, 19701, 'cast_massive_ring_blast', 0), + (6242, 19706, 'result_billowing_energy', 0), + (6243, 19707, 'result_seeping_energy', 0), + (6244, 19713, 'design_odus_dome_barrier', 0), + (6245, 19715, 'result_fiery_sun', 0), + (6246, 19716, 'result_healing_flora', 0), + (6247, 19717, 'result_singing_wind', 0), + (6248, 19719, 'sound_catoplebus_attack_roar_1', 0), + (6249, 19720, 'sound_catoplebus_attack_roar_2', 0), + (6250, 19721, 'sound_catoplebus_attack_roar_3', 0), + (6251, 19722, 'sound_catoplebus_body_movement', 0), + (6252, 19723, 'sound_catoplebus_cast_roar', 0), + (6253, 19724, 'sound_catoplebus_combat_art_buff_roar', 0), + (6254, 19725, 'sound_catoplebus_crunch', 0), + (6255, 19726, 'sound_catoplebus_death_roar', 0), + (6256, 19727, 'sound_catoplebus_dodge_grunt', 0), + (6257, 19728, 'sound_catoplebus_dodge_roar', 0), + (6258, 19729, 'sound_catoplebus_footstep', 0), + (6259, 19730, 'sound_catoplebus_footstep_deep', 0), + (6260, 19731, 'sound_catoplebus_footstep_deep_soft', 0), + (6261, 19732, 'sound_catoplebus_idle_grunt', 0), + (6262, 19733, 'sound_catoplebus_idle_roar', 0), + (6263, 19734, 'sound_catoplebus_idle_sniff', 0), + (6264, 19735, 'sound_catoplebus_idle_snort', 0), + (6265, 19736, 'sound_catoplebus_slide', 0), + (6266, 19737, 'sound_catoplebus_swim', 0), + (6267, 19738, 'sound_catoplebus_swim_idle', 0), + (6268, 19739, 'sound_catoplebus_tail_whoosh', 0), + (6269, 19740, 'sound_cerberus_attack_roar', 0), + (6270, 19741, 'sound_cerberus_cast_roar', 0), + (6271, 19742, 'sound_cerberus_combat_art_buff_roar', 0), + (6272, 19743, 'sound_cerberus_death_fall', 0), + (6273, 19744, 'sound_cerberus_death_roar', 0), + (6274, 19745, 'sound_cerberus_dodge_bark', 0), + (6275, 19746, 'sound_cerberus_dodge_growl', 0), + (6276, 19747, 'sound_cerberus_growl', 0), + (6277, 19748, 'sound_cerberus_idle_howl_1', 0), + (6278, 19749, 'sound_cerberus_idle_howl_2', 0), + (6279, 19750, 'sound_cerberus_idle_howl_long', 0), + (6280, 19751, 'sound_cerberus_scrape', 0), + (6281, 19752, 'sound_cerberus_snarl', 0), + (6282, 19753, 'sound_cerberus_swim', 0), + (6283, 19754, 'trdskl_transmute_complete', 0), + (6284, 19755, 'trdskl_transmute_rings', 0), + (6285, 19763, 'sound_goatmen_lf_stomp', 0), + (6286, 19764, 'sound_goatmen_armor_long', 0), + (6287, 19765, 'sound_goatmen_armor_short_loud', 0), + (6288, 19766, 'sound_goatmen_armor_short_quiet', 0), + (6289, 19767, 'sound_goatmen_attack_roar', 0), + (6290, 19768, 'sound_goatmen_blade_swoosh_1', 0), + (6291, 19769, 'sound_goatmen_blade_swoosh_2', 0), + (6292, 19770, 'sound_goatmen_body_fall', 0), + (6293, 19771, 'sound_goatmen_body_movement_short', 0), + (6294, 19772, 'sound_goatmen_bow_enter', 0), + (6295, 19773, 'sound_goatmen_bow_exit', 0), + (6296, 19774, 'sound_goatmen_bow_getarrow', 0), + (6297, 19775, 'sound_goatmen_bow_pullback', 0), + (6298, 19776, 'sound_goatmen_bow_release', 0), + (6299, 19777, 'sound_goatmen_breath_out', 0), + (6300, 19778, 'sound_goatmen_cast_yell', 0), + (6301, 19779, 'sound_goatmen_combat_art_buff', 0), + (6302, 19780, 'sound_goatmen_death_roar', 0), + (6303, 19781, 'sound_goatmen_death_roar_2', 0), + (6304, 19782, 'sound_goatmen_footstep', 0), + (6305, 19783, 'sound_goatmen_grunt', 0), + (6306, 19784, 'sound_goatmen_ouch', 0), + (6307, 19785, 'sound_goatmen_scrape', 0), + (6308, 19786, 'sound_goatmen_snort', 0), + (6309, 19787, 'sound_goatmen_swim', 0), + (6310, 19788, 'sound_goatmen_weapon_twirl', 0), + (6311, 19794, 'design_pulse_beacon', 0), + (6312, 19795, 'design_shard_blast', 0), + (6313, 19797, 'pandamen_wildswing_attack', 0), + (6314, 19798, 'pulse_sound', 0), + (6315, 19801, 'sound_pandamen_bark', 0), + (6316, 19802, 'sound_pandamen_bleat', 0), + (6317, 19803, 'sound_pandamen_bow_getarrow', 0), + (6318, 19804, 'sound_pandamen_bow_pullback', 0), + (6319, 19805, 'sound_pandamen_bow_release', 0), + (6320, 19806, 'sound_pandamen_bow_sheath', 0), + (6321, 19807, 'sound_pandamen_bow_unsheath', 0), + (6322, 19808, 'sound_pandamen_charge_roar', 0), + (6323, 19809, 'sound_pandamen_dead', 0), + (6324, 19810, 'sound_pandamen_eat', 0), + (6325, 19811, 'sound_pandamen_footslide', 0), + (6326, 19812, 'sound_pandamen_footstep_soft', 0), + (6327, 19813, 'sound_pandamen_growl', 0), + (6328, 19814, 'sound_pandamen_grunt', 0), + (6329, 19815, 'sound_pandamen_idle_grunt', 0), + (6330, 19816, 'sound_pandamen_idle_grunt_short', 0), + (6331, 19817, 'sound_pandamen_movement_cloth_long', 0), + (6332, 19818, 'sound_pandamen_movement_cloth_short', 0), + (6333, 19819, 'sound_pandamen_scratch', 0), + (6334, 19820, 'sound_pandamen_scratch_pant', 0), + (6335, 19821, 'sound_pandamen_sit', 0), + (6336, 19822, 'sound_pandamen_swim', 0), + (6337, 19823, 'sound_pandamen_whoosh', 0), + (6338, 19829, 'evil_theer_energy_buff', 0), + (6339, 19830, 'good_theer_energy_buff', 0), + (6340, 19832, 'result_balanced_judgement', 0), + (6341, 19833, 'result_fiery_flames', 0), + (6342, 19834, 'result_theer_debuff_down', 0), + (6343, 19835, 'result_theer_debuff_up', 0), + (6344, 19836, 'result_theer_mana_drain_p2p', 0), + (6345, 19839, 'theer_charge_up', 0), + (6346, 19840, 'theer_mana_blast', 0), + (6347, 19845, 'cast_wyvern_breath', 0), + (6348, 19846, 'cast_wyvern_inhale', 0), + (6349, 19848, 'design_erudite_switch_evil', 0), + (6350, 19849, 'design_erudite_switch_good', 0), + (6351, 19850, 'design_murderball_debuff', 0), + (6352, 19853, 'sound_chimera_attack_roar_1', 0), + (6353, 19854, 'sound_chimera_attack_roar_2', 0), + (6354, 19855, 'sound_chimera_attack_roar_3', 0), + (6355, 19856, 'sound_chimera_cast_roar', 0), + (6356, 19857, 'sound_chimera_cast_roar_short', 0), + (6357, 19858, 'sound_chimera_combat_art_buff_roar', 0), + (6358, 19859, 'sound_chimera_dead_fall', 0), + (6359, 19860, 'sound_chimera_death_roar', 0), + (6360, 19861, 'sound_chimera_dodge_down_roar', 0), + (6361, 19862, 'sound_chimera_dodge_grunt', 0), + (6362, 19863, 'sound_chimera_footslide', 0), + (6363, 19864, 'sound_chimera_footstep', 0), + (6364, 19865, 'sound_chimera_footstep_big', 0), + (6365, 19866, 'sound_chimera_idle_bird_1', 0), + (6366, 19867, 'sound_chimera_idle_bird_2', 0), + (6367, 19868, 'sound_chimera_idle_bird_3', 0), + (6368, 19869, 'sound_chimera_idle_goat_1', 0), + (6369, 19870, 'sound_chimera_idle_goat_2', 0), + (6370, 19871, 'sound_chimera_idle_goat_3', 0), + (6371, 19872, 'sound_chimera_idle_lion_1', 0), + (6372, 19873, 'sound_chimera_idle_lion_2', 0), + (6373, 19874, 'sound_chimera_idle_lion_3', 0), + (6374, 19875, 'sound_chimera_idle_lion_4', 0), + (6375, 19876, 'sound_chimera_idle_wings', 0), + (6376, 19877, 'sound_chimera_sit_wings_short', 0), + (6377, 19878, 'sound_chimera_snake_stab', 0), + (6378, 19879, 'sound_chimera_swim', 0), + (6379, 19880, 'sound_chimera_wings_big', 0), + (6380, 19882, 'sound_lynx_mount_bare_idle', 0), + (6381, 19883, 'sound_lynx_mount_bare_roar_1', 0), + (6382, 19884, 'sound_lynx_mount_bare_roar_2', 0), + (6383, 19885, 'sound_lynx_mount_footstep_quiet', 0), + (6384, 19886, 'sound_lynx_mount_land', 0), + (6385, 19887, 'sound_odus_kitten_attack_1', 0), + (6386, 19888, 'sound_odus_kitten_attack_2', 0), + (6387, 19889, 'sound_odus_kitten_attack_3', 0), + (6388, 19890, 'sound_odus_kitten_attack_4', 0), + (6389, 19891, 'sound_odus_kitten_combat_exit', 0), + (6390, 19892, 'sound_odus_kitten_eat_1', 0), + (6391, 19893, 'sound_odus_kitten_fall', 0), + (6392, 19894, 'sound_odus_kitten_footstep', 0), + (6393, 19895, 'sound_odus_kitten_hiss', 0), + (6394, 19896, 'sound_odus_kitten_idle_purr_1', 0), + (6395, 19897, 'sound_odus_kitten_lick', 0), + (6396, 19898, 'sound_odus_kitten_meow_1', 0), + (6397, 19899, 'sound_odus_kitten_meow_2', 0), + (6398, 19900, 'sound_odus_kitten_ouch_short', 0), + (6399, 19901, 'sound_odus_kitten_scratch', 0), + (6400, 19902, 'sound_odus_kitten_sneeze', 0), + (6401, 19903, 'sound_odus_kitten_swim', 0), + (6402, 19906, 'cast_draconian_breath', 0), + (6403, 19909, 'cast_wurm_breath', 0), + (6404, 19910, 'cast_wurm_crush_blast', 0), + (6405, 19911, 'cast_wurm_inhale', 0), + (6406, 19913, 'design_active_eggs', 0), + (6407, 19914, 'design_hatched_eggs', 0), + (6408, 19915, 'design_inactive_eggs', 0), + (6409, 19917, 'result_blinded', 0), + (6410, 19918, 'result_crush_rings', 0), + (6411, 19924, 'design_summon_fx', 1045), + (6412, 19926, 'result_summoning_crystal', 1045), + (6413, 19929, 'sound_lynx_armor_1', 1045), + (6414, 19930, 'sound_lynx_armor_short', 1045), + (6415, 19939, 'toxx_breath_attack', 1045), + (6416, 19940, 'toxx_breath_inhale', 1045), + (6417, 19947, 'result_floor_pie', 1045), + (6418, 19954, 'result_lich_evil_drain_p2p', 1045), + (6419, 19955, 'result_lich_good_drain_p2p', 1045), + (6420, 19956, 'result_theer_evil_drain', 1045), + (6421, 19957, 'result_theer_good_drain', 1045), + (6422, 19964, 'result_toxic_debuff', 1045), + (6423, 19967, 'toxx_breath_attack01', 1045), + (6424, 19968, 'toxx_breath_attack02', 1045), + (6425, 19974, 'design_kobold_claw', 1045), + (6426, 19975, 'design_toxic_sphere0', 1045), + (6427, 19976, 'design_toxic_sphere01', 1045), + (6428, 19977, 'design_toxic_sphere02', 1045), + (6429, 19978, 'design_toxic_sphere03', 1045), + (6430, 19979, 'design_toxic_sphere04', 1045), + (6431, 19980, 'design_toxic_sphere05', 1045), + (6432, 19982, 'result_toxx_essence_trap_p2p', 1045), + (6433, 19984, 'sound_catoplebus_ouch', 1045), + (6434, 19985, 'sound_catoplebus_ouch_1', 1045), + (6435, 19986, 'sound_catoplebus_ouch_2', 1045), + (6436, 19988, 'sound_skeletal_1', 1045), + (6437, 19989, 'sound_skeletal_10', 1045), + (6438, 19990, 'sound_skeletal_11', 1045), + (6439, 19991, 'sound_skeletal_12', 1045), + (6440, 19992, 'sound_skeletal_13', 1045), + (6441, 19993, 'sound_skeletal_14', 1045), + (6442, 19994, 'sound_skeletal_15', 1045), + (6443, 19995, 'sound_skeletal_16', 1045), + (6444, 19996, 'sound_skeletal_17', 1045), + (6445, 19997, 'sound_skeletal_18', 1045), + (6446, 19998, 'sound_skeletal_19', 1045), + (6447, 19999, 'sound_skeletal_2', 1045), + (6448, 20000, 'sound_skeletal_20', 1045), + (6449, 20001, 'sound_skeletal_21', 1045), + (6450, 20002, 'sound_skeletal_22', 1045), + (6451, 20003, 'sound_skeletal_3', 1045), + (6452, 20004, 'sound_skeletal_4', 1045), + (6453, 20005, 'sound_skeletal_5', 1045), + (6454, 20006, 'sound_skeletal_6', 1045), + (6455, 20007, 'sound_skeletal_7', 1045), + (6456, 20008, 'sound_skeletal_8', 1045), + (6457, 20009, 'sound_skeletal_9', 1045), + (6458, 20010, 'toxx_chained', 1045), + (6459, 20011, 'toxx_vanish', 1045), + (6460, 20017, 'design_active_head_001', 1045), + (6461, 20018, 'design_active_head_010', 1045), + (6462, 20019, 'design_active_head_011', 1045), + (6463, 20020, 'design_active_head_100', 1045), + (6464, 20021, 'design_active_head_101', 1045), + (6465, 20022, 'design_active_head_110', 1045), + (6466, 20023, 'design_active_head_111', 1045), + (6467, 20024, 'design_tallonite_portal', 1045), + (6468, 20025, 'design_teleport_druid_ring', 1045), + (6469, 20028, 'cast_arcane_blast', 1045), + (6470, 20029, 'cast_crush_blast', 1045), + (6471, 20030, 'cast_poison_blast', 1045), + (6472, 20034, 'design_mystic_barrier', 1045), + (6473, 20040, 'design_blue_flag_pickup', 1045), + (6474, 20041, 'design_red_flag_pickup', 1045), + (6475, 20047, 'death_impact', 1045), + (6476, 20048, 'gorgon_attack_roar_01', 1045), + (6477, 20049, 'gorgon_attack_roar_02', 1045), + (6478, 20050, 'gorgon_breath_in', 1045), + (6479, 20051, 'gorgon_breath_out_long', 1045), + (6480, 20052, 'gorgon_breath_out_short', 1045), + (6481, 20053, 'gorgon_cast_roar_01', 1045), + (6482, 20054, 'gorgon_chewing_close', 1045), + (6483, 20055, 'gorgon_chewing_open', 1045), + (6484, 20056, 'gorgon_death_impact', 1045), + (6485, 20057, 'gorgon_death_roar', 1045), + (6486, 20058, 'gorgon_footscrape', 1045), + (6487, 20059, 'gorgon_footstep_deep', 1045), + (6488, 20060, 'gorgon_footstep_metal', 1045), + (6489, 20061, 'gorgon_hooves', 1045), + (6490, 20062, 'gorgon_kick_swish', 1045), + (6491, 20063, 'gorgon_metal_movement', 1045), + (6492, 20064, 'gorgon_metal_movement_deep', 1045), + (6493, 20065, 'gorgon_metal_movement_long', 1045), + (6494, 20066, 'gorgon_metal_movement_quiet', 1045), + (6495, 20067, 'gorgon_metal_scrape', 1045), + (6496, 20068, 'gorgon_ouch_headshake', 1045), + (6497, 20069, 'gorgon_ouch_impact', 1045), + (6498, 20070, 'gorgon_snort', 1045), + (6499, 20071, 'gorgon_snort_big', 1045), + (6500, 20072, 'gorgon_swim', 1045), + (6501, 20076, 'stone_ouch_impact', 1045), + (6502, 20082, 'design_blue_flag_trail', 1045), + (6503, 20083, 'design_red_flag_trail', 1045), + (6504, 20089, 'design_battleground_tower_blue', 1045), + (6505, 20090, 'design_battleground_tower_red', 1045), + (6506, 20096, 'crystaline_folk_lf', 1045), + (6507, 20097, 'crystaline_folk_footstep_big', 1045), + (6508, 20098, 'crystaline_folk_footstep_crunch', 1045), + (6509, 20099, 'crystaline_folk_stone_debris', 1045), + (6510, 20100, 'crystaline_folk_tantrum_1', 1045), + (6511, 20101, 'crystaline_folk_tantrum_2', 1045), + (6512, 20102, 'crystaline_folk_tantrum_3', 1045), + (6513, 20103, 'crystaline_folk_tantrum_body_1', 1045), + (6514, 20104, 'crystaline_folk_tantrum_body_2', 1045), + (6515, 20105, 'crystaline_folk_tantrum_body_3', 1045), + (6516, 20106, 'design_sen_lava_floor', 1045), + (6517, 20109, 'cast_mental_blast', 1045), + (6518, 20114, 'design_reform_fx', 1045), + (6519, 20117, 'attack_breath_crush', 1045), + (6520, 20118, 'attack_breath_poison', 1045), + (6521, 20123, 'design_drain_theer_fx', 1045), + (6522, 20124, 'design_power_aura', 1045), + (6523, 20126, 'result_forced_shader_white', 1045), + (6524, 20127, 'result_stunned_rings', 1045), + (6525, 20134, 'froglock_gathering_search', 1045), + (6526, 20138, 'status_quest_completes_storyline', 1045), + (6527, 20139, 'status_quest_gives_storyline', 1045), + (6528, 20140, 'status_quest_updates_storyline', 1045), + (6529, 20150, 'sound_lynx_armor_short_1', 1045), + (6530, 20151, 'sound_lynx_mount_bare_roar_3', 1045), + (6531, 20159, 'result_forced_shader_rock_red', 1045), + (6532, 20162, 'tiered_cleric_wheel_back', 1045), + (6533, 20163, 'tiered_cleric_wheel_base', 1045), + (6534, 20164, 'tiered_cleric_wheel_forward', 1045), + (6535, 20165, 'tiered_hand_cross', 1045), + (6536, 20166, 'tiered_hand_leaves', 1045), + (6537, 20167, 'tiered_hand_leaves_glowing', 1045), + (6538, 20168, 'tiered_hand_pattern', 1045), + (6539, 20169, 'tiered_refreshment_summon', 1045), + (6540, 20170, 'tiered_smite_p2p', 1045), + (6541, 20178, 'jump_falling', 1045), + (6542, 20188, 'tiered_angel_wings', 1045), + (6543, 20189, 'tiered_bar_heal', 1045), + (6544, 20190, 'tiered_divine_burst', 1045), + (6545, 20191, 'tiered_divine_essence_summon', 1045), + (6546, 20192, 'tiered_head_halo', 1045), + (6547, 20193, 'tiered_priest_ring_cure', 1045), + (6548, 20194, 'tiered_radiant_glow', 1045), + (6549, 20195, 'tiered_resurrect_swirls', 1045), + (6550, 20196, 'tiered_small_heal', 1045), + (6551, 20197, 'tiered_smite_hit', 1045), + (6552, 20198, 'tiered_soothe', 1045), + (6553, 20199, 'tiered_toxin_out', 1045), + (6554, 20200, 'tiered_water_bubble', 1045), + (6555, 20210, 'sound_roehn_theer_stomp_rocks_1', 1045), + (6556, 20211, 'sound_roehn_theer_stomp_rocks_2', 1045), + (6557, 20212, 'sound_roehn_theer_stomp_rocks_3', 1045), + (6558, 20213, 'tiered_flash_heal', 1045), + (6559, 20214, 'tiered_ring_shield', 1045), + (6560, 20215, 'tiered_scimitar_exploding', 1045), + (6561, 20216, 'tiered_scimitar_smite', 1045), + (6562, 20217, 'tiered_timer', 1045), + (6563, 20227, 'tiered_divine_hit', 1045), + (6564, 20228, 'tiered_double_smite_p2p', 1045), + (6565, 20229, 'tiered_hand_sparkles', 1045), + (6566, 20230, 'tiered_heal_tube_p2p', 1045), + (6567, 20240, 'tiered_heal_barrier', 1045), + (6568, 20241, 'tiered_smite_blobs_p2p', 1045), + (6569, 20251, 'tiered_hammer_smite', 1045), + (6570, 20252, 'tiered_hand_cross_dark', 1045), + (6571, 20253, 'tiered_hand_sparkles_dark', 1045), + (6572, 20263, 'tiered_mental_smite', 1045), + (6573, 20273, 'tiered_engulf_flames', 1045), + (6574, 20274, 'tiered_gavel_pound', 1045), + (6575, 20275, 'tiered_light_cage', 1045), + (6576, 20276, 'tiered_swirly_heal', 1045), + (6577, 20277, 'tiered_swirly_power_heal', 1045), + (6578, 20287, 'trdskl_tinker_fail', 1045), + (6579, 20294, 'fire_build_up', 1045), + (6580, 20304, 'tiered_feather_summon', 1045), + (6581, 20305, 'tiered_phoenix_summon', 1045), + (6582, 20306, 'tiered_run_speed_buff', 1045), + (6583, 20307, 'tiered_spirit_wolf', 1045), + (6584, 20308, 'tiered_wood_root', 1045), + (6585, 20318, 'tiered_bat_summon', 1045), + (6586, 20319, 'tiered_nature_heal', 1045), + (6587, 20329, 'tiered_druid_wheel_base', 1045), + (6588, 20330, 'tiered_fire_slam2', 1045), + (6589, 20331, 'tiered_hand_leaf', 1045), + (6590, 20332, 'tiered_icicle_stab', 1045), + (6591, 20333, 'tiered_leaf_burst', 1045), + (6592, 20334, 'tiered_leaf_gather', 1045), + (6593, 20335, 'tiered_leaf_spin', 1045), + (6594, 20336, 'tiered_rings_shrinking', 1045), + (6595, 20337, 'tiered_swirly_wisps', 1045), + (6596, 20338, 'tiered_wood_spikes', 1045), + (6597, 20346, 'panting_wolf_sound', 1045), + (6598, 20349, 'tiered_hand_leaf_glowing', 1045), + (6599, 20350, 'tiered_leaf_spot_burst', 1045), + (6600, 20351, 'tiered_spin_runed_shield', 1045), + (6601, 20352, 'tiered_spirit_bear', 1045), + (6602, 20353, 'tiered_spirit_lion', 1045), + (6603, 20354, 'wolfbackground_sound', 1045), + (6604, 20364, 'tiered_growing_spores', 1045), + (6605, 20365, 'tiered_healing_grove', 1045), + (6606, 20366, 'tiered_ice_spikes', 1045), + (6607, 20367, 'tiered_sandstorm', 1045), + (6608, 20368, 'tiered_spirit_wolf_summon', 1045), + (6609, 20369, 'tiered_tranquility', 1045), + (6610, 20370, 'tiered_wood_root_grow', 1045), + (6611, 20373, 'belch_fx', 1045), + (6612, 20378, 'design_theer_symbol_blue', 1045), + (6613, 20379, 'design_theer_symbol_green', 1045), + (6614, 20380, 'icicle_stomp', 1045), + (6615, 20382, 'result_hand_drips_blood', 1045), + (6616, 20383, 'result_hand_drips_poison', 1045), + (6617, 20385, 'slime_trail_fx', 1045), + (6618, 20386, 'sound_giant_hill_attack', 1045), + (6619, 20387, 'sound_giant_hill_buff', 1045), + (6620, 20388, 'sound_giant_hill_cast', 1045), + (6621, 20389, 'sound_giant_hill_death', 1045), + (6622, 20390, 'sound_giant_hill_fall', 1045), + (6623, 20391, 'sound_giant_hill_footstep', 1045), + (6624, 20392, 'sound_giant_hill_grunt', 1045), + (6625, 20393, 'sound_giant_hill_idle_cloth', 1045), + (6626, 20394, 'sound_giant_hill_idle_grunt', 1045), + (6627, 20395, 'sound_giant_hill_idle_yawn', 1045), + (6628, 20396, 'sound_giant_hill_movement_cloth', 1045), + (6629, 20397, 'sound_giant_hill_ouch', 1045), + (6630, 20398, 'sound_giant_hill_rising_groan', 1045), + (6631, 20399, 'sound_giant_hill_sit_groan', 1045), + (6632, 20400, 'sound_giant_hill_swim', 1045), + (6633, 20401, 'sound_giant_hill_swim_idle', 1045), + (6634, 20402, 'sound_giant_hill_turn', 1045), + (6635, 20412, 'tiered_brambles', 1045), + (6636, 20413, 'tiered_hand_leaf_dark', 1045), + (6637, 20414, 'tiered_hand_leaves_dark', 1045), + (6638, 20415, 'tiered_leaf_flourish', 1045), + (6639, 20416, 'tiered_lightning_bolt', 1045), + (6640, 20417, 'tiered_snow_tempest', 1045), + (6641, 20418, 'tiered_swarm_p2p', 1045), + (6642, 20428, 'tiered_spirit_cat', 1045), + (6643, 20429, 'tiered_spirit_eel', 1045), + (6644, 20430, 'tiered_starfire', 1045), + (6645, 20431, 'tiered_sun_nova', 1045), + (6646, 20441, 'tiered_fae_swirling', 1045), + (6647, 20442, 'tiered_lightning_fusion', 1045), + (6648, 20443, 'tiered_spirit_cheetah', 1045), + (6649, 20444, 'tiered_spirit_lion_summon', 1045), + (6650, 20445, 'tiered_spirit_tree', 1045), + (6651, 20446, 'tiered_thunder_cloud', 1045), + (6652, 20453, 'design_goblin_launch', 1045), + (6653, 20457, 'transforma', 1045), + (6654, 20458, 'transformb', 1045), + (6655, 20461, 'cast_ice_blastwave', 1045), + (6656, 20464, 'cast_wing_buffet_snow', 1045), + (6657, 20465, 'cast_wing_buffet_wind', 1045), + (6658, 20469, 'result_icy_trap_shatter', 1045), + (6659, 20476, 'design_starburst_blue', 1045), + (6660, 20477, 'design_starburst_green', 1045), + (6661, 20478, 'design_starburst_purple', 1045), + (6662, 20479, 'design_starburst_red', 1045), + (6663, 20480, 'design_starburst_white', 1045), + (6664, 20482, 'kneel', 1045), + (6665, 20483, 'result_shadow_curse', 1045), + (6666, 20493, 'sound_lynx_mount_bare_idle_1', 1045), + (6667, 20494, 'sound_lynx_mount_bare_pant', 1045), + (6668, 20504, 'sound_lynx_purr', 1045), + (6669, 20505, 'sound_vrewwx_attack_roar_3', 1045), + (6670, 20506, 'sound_vrewwx_cast_roar', 1045), + (6671, 20513, 'design_arm_prelaunch', 1045), + (6672, 20515, 'result_repellent_spray', 1045), + (6673, 20516, 'result_repellent_spray_p2p', 1045), + (6674, 20519, 'activate', 1045), + (6675, 20520, 'cast_ice_blast', 1045), + (6676, 20521, 'cast_ice_blast_ring', 1045), + (6677, 20529, 'sound_vrewwx_attack_roar_1', 1045), + (6678, 20530, 'sound_vrewwx_attack_roar_2', 1045), + (6679, 20531, 'sound_vrewwx_idle02_roar', 1045), + (6680, 20541, 'sound_vrewwx_idle1_breathing_2', 1045), + (6681, 20548, 'design_void_energy_pool', 1045), + (6682, 20550, 'result_flower_trail', 1045), + (6683, 20551, 'result_leash_p2p', 1045), + (6684, 20552, 'result_rope_root', 1045), + (6685, 20555, 'cast_pick_axe_throw', 1045), + (6686, 20560, 'design_crystal_drop_impact', 1045), + (6687, 20561, 'design_orc_footprints', 1045), + (6688, 20563, 'result_leash_p2p_static', 1045), + (6689, 20565, 'sitchair', 1045), + (6690, 20567, 'sound_vrewwx_body_fall', 1045), + (6691, 20568, 'trdskl_halas_pick', 1045), + (6692, 20575, 'design_chessboard_collapse_fx', 1045), + (6693, 20576, 'design_chessboard_static_fx', 1045), + (6694, 20577, 'design_druidring_burst_fx', 1045), + (6695, 20578, 'design_druidring_fx', 1045), + (6696, 20579, 'design_harpoon_fire', 1045), + (6697, 20580, 'design_harpoon_load', 1045), + (6698, 20590, 'sound_vrewwx_death', 1045), + (6699, 20591, 'sound_vrewwx_ouch', 1045), + (6700, 20594, 'bellyslide', 1045), + (6701, 20599, 'float_on_back', 1045), + (6702, 20601, 'laugh', 1045), + (6703, 20604, 'sound_vrewwx_buff', 1045), + (6704, 20605, 'sound_vrewwx_chomp', 1045), + (6705, 20615, 'sound_vrewwx_death_fall', 1045), + (6706, 20622, 'design_theer_symbol_blast_circle', 1045), + (6707, 20629, 'fly_ouch_backhand', 1045), + (6708, 20639, 'tiered_heal_ward', 1045), + (6709, 20640, 'tiered_shaman_wheel_base', 1045), + (6710, 20641, 'tiered_spirit_summon', 1045), + (6711, 20642, 'tiered_spirit_swirl_hit', 1045), + (6712, 20650, 'proc_sword_head', 1045), + (6713, 20653, 'tiered_hand_stars', 1045), + (6714, 20654, 'tiered_haze', 1045), + (6715, 20655, 'tiered_head_spirits', 1045), + (6716, 20656, 'tiered_spirit_heal', 1045), + (6717, 20666, 'tiered_heal_flourish', 1045), + (6718, 20667, 'tiered_resurrect_spirits', 1045), + (6719, 20668, 'tiered_spirit_elephant', 1045), + (6720, 20669, 'tiered_spirit_swirl_shield', 1045), + (6721, 20679, 'tiered_echo_rings', 1045), + (6722, 20680, 'tiered_fire', 1045), + (6723, 20681, 'tiered_iceball_p2p', 1045), + (6724, 20682, 'tiered_spirit_tube', 1045), + (6725, 20683, 'tiered_spirits_p2p', 1045), + (6726, 20693, 'tiered_ancestral_summon', 1045), + (6727, 20694, 'tiered_lunar_summon', 1045), + (6728, 20695, 'tiered_spirit_circle_summon', 1045), + (6729, 20696, 'tiered_spirit_growing', 1045), + (6730, 20703, 'fly_jumpsubstitute', 1045), + (6731, 20704, 'fly_turn_left', 1045), + (6732, 20705, 'fly_turn_right', 1045), + (6733, 20706, 'fly_walk', 1045), + (6734, 20708, 'lizard_backup', 1045), + (6735, 20709, 'lizard_fall', 1045), + (6736, 20710, 'lizard_fly_backup', 1045), + (6737, 20711, 'lizard_fly_fall', 1045), + (6738, 20712, 'lizard_fly_idle', 1045), + (6739, 20713, 'lizard_fly_idle01', 1045), + (6740, 20714, 'lizard_fly_jump', 1045), + (6741, 20715, 'lizard_fly_jump_substitute', 1045), + (6742, 20716, 'lizard_fly_run', 1045), + (6743, 20717, 'lizard_fly_turn_left', 1045), + (6744, 20718, 'lizard_fly_turn_right', 1045), + (6745, 20719, 'lizard_fly_walk', 1045), + (6746, 20720, 'lizard_glide', 1045), + (6747, 20721, 'lizard_idle', 1045), + (6748, 20722, 'lizard_idle01', 1045), + (6749, 20723, 'lizard_jump', 1045), + (6750, 20724, 'lizard_jump_substitute', 1045), + (6751, 20725, 'lizard_land', 1045), + (6752, 20726, 'lizard_long_fall', 1045), + (6753, 20727, 'lizard_run', 1045), + (6754, 20728, 'lizard_turn_left', 1045), + (6755, 20729, 'lizard_turn_right', 1045), + (6756, 20730, 'lizard_walk', 1045), + (6757, 20738, 'lizard_fly_dive', 1045), + (6758, 20739, 'lizard_fly_glide', 1045), + (6759, 20740, 'lizard_fly_jumpsubstitute', 1045), + (6760, 20743, 'tiered_bone_tendrils', 1045), + (6761, 20744, 'tiered_crystal_soultap', 1045), + (6762, 20745, 'tiered_dark_swirly_wisps', 1045), + (6763, 20746, 'tiered_deathward', 1045), + (6764, 20747, 'tiered_forced_shader_burst_blend', 1045), + (6765, 20748, 'tiered_hand_stars_dark', 1045), + (6766, 20749, 'tiered_heal_shroud', 1045), + (6767, 20750, 'tiered_poison_spirits_p2p', 1045), + (6768, 20751, 'tiered_rune_debuff_all', 1045), + (6769, 20752, 'tiered_shadow_curse', 1045), + (6770, 20753, 'tiered_shroud', 1045), + (6771, 20761, 'lizard_fly_enter', 1045), + (6772, 20771, 'spark_trail_lf', 1045), + (6773, 20772, 'spark_trail_lr', 1045), + (6774, 20773, 'spark_trail_rf', 1045), + (6775, 20774, 'spark_trail_rr', 1045), + (6776, 20781, 'griffin_backup', 1045), + (6777, 20782, 'griffin_fall', 1045), + (6778, 20783, 'griffin_fly_backup', 1045), + (6779, 20784, 'griffin_fly_dive', 1045), + (6780, 20785, 'griffin_fly_enter', 1045), + (6781, 20786, 'griffin_fly_fall', 1045), + (6782, 20787, 'griffin_fly_glide', 1045), + (6783, 20788, 'griffin_fly_idle', 1045), + (6784, 20789, 'griffin_fly_idle01', 1045), + (6785, 20790, 'griffin_fly_jump', 1045), + (6786, 20791, 'griffin_fly_jumpsubstitute', 1045), + (6787, 20792, 'griffin_fly_run', 1045), + (6788, 20793, 'griffin_fly_turn_left', 1045), + (6789, 20794, 'griffin_fly_turn_right', 1045), + (6790, 20795, 'griffin_fly_walk', 1045), + (6791, 20796, 'griffin_idle01', 1045), + (6792, 20797, 'griffin_jump', 1045), + (6793, 20798, 'griffin_jump_substitute', 1045), + (6794, 20799, 'griffin_land', 1045), + (6795, 20800, 'griffin_long_fall', 1045), + (6796, 20801, 'griffin_turn_left', 1045), + (6797, 20802, 'griffin_turn_right', 1045), + (6798, 20804, 'pegasus_backup', 1045), + (6799, 20805, 'pegasus_fall', 1045), + (6800, 20806, 'pegasus_fly_backup', 1045), + (6801, 20807, 'pegasus_fly_dive', 1045), + (6802, 20808, 'pegasus_fly_enter', 1045), + (6803, 20809, 'pegasus_fly_fall', 1045), + (6804, 20810, 'pegasus_fly_glide', 1045), + (6805, 20811, 'pegasus_fly_idle', 1045), + (6806, 20812, 'pegasus_fly_idle01', 1045), + (6807, 20813, 'pegasus_fly_jump', 1045), + (6808, 20814, 'pegasus_fly_jumpsubstitute', 1045), + (6809, 20815, 'pegasus_fly_run', 1045), + (6810, 20816, 'pegasus_fly_turn_left', 1045), + (6811, 20817, 'pegasus_fly_turn_right', 1045), + (6812, 20818, 'pegasus_fly_walk', 1045), + (6813, 20819, 'pegasus_idle01', 1045), + (6814, 20820, 'pegasus_jump', 1045), + (6815, 20821, 'pegasus_jump_substitute', 1045), + (6816, 20822, 'pegasus_land', 1045), + (6817, 20823, 'pegasus_long_fall', 1045), + (6818, 20824, 'pegasus_turn_left', 1045), + (6819, 20825, 'pegasus_turn_right', 1045), + (6820, 20833, 'result_weapon_trail_music', 1096), + (6821, 20836, 'tiered_bard_baton', 1096), + (6822, 20837, 'tiered_bard_drum', 1096), + (6823, 20838, 'tiered_bard_flute', 1096), + (6824, 20839, 'tiered_bard_guitar', 1096), + (6825, 20840, 'tiered_bard_horn', 1096), + (6826, 20841, 'tiered_bard_shroud', 1096), + (6827, 20842, 'tiered_bard_wheel_base', 1096), + (6828, 20843, 'tiered_clanging_notes', 1096), + (6829, 20844, 'tiered_coin_toss', 1096), + (6830, 20845, 'tiered_dancing_blades', 1096), + (6831, 20846, 'tiered_hand_notes', 1096), + (6832, 20847, 'tiered_hand_spin_notes', 1096), + (6833, 20848, 'tiered_jester_cap_toss_p2p', 1096), + (6834, 20849, 'tiered_music_ball_p2p', 1096), + (6835, 20850, 'tiered_music_band', 1096), + (6836, 20851, 'tiered_music_beam_p2p', 1096), + (6837, 20852, 'tiered_music_blast_ball', 1096), + (6838, 20853, 'tiered_music_bubble', 1096), + (6839, 20854, 'tiered_music_swirls', 1096), + (6840, 20855, 'tiered_music_wave_p2p', 1096), + (6841, 20856, 'tiered_notes_blast', 1096), + (6842, 20857, 'tiered_notes_burst', 1096), + (6843, 20858, 'tiered_notes_confetti', 1096), + (6844, 20859, 'tiered_notes_head', 1096), + (6845, 20860, 'tiered_notes_out_blast', 1096), + (6846, 20861, 'tiered_notes_out_song', 1096), + (6847, 20862, 'tiered_notes_shield', 1096), + (6848, 20863, 'tiered_notes_spiral_frenzy', 1096), + (6849, 20864, 'tiered_notes_up_song', 1096), + (6850, 20865, 'tiered_slashing_blade', 1096), + (6851, 20866, 'tiered_sound_rings_head', 1096), + (6852, 20867, 'tiered_spark_burst', 1096), + (6853, 20868, 'tiered_stabbing_blades', 1096), + (6854, 20878, 'tiered_notes_swirling_p2p', 1096), + (6855, 20888, 'tiered_bellow', 1096), + (6856, 20889, 'tiered_eyehand_buff', 1096), + (6857, 20890, 'tiered_note_crescent_p2p', 1096), + (6858, 20891, 'tiered_notes_out_song_bellow', 1096), + (6859, 20892, 'tiered_notes_transfer_p2p', 1096), + (6860, 20893, 'tiered_rock_skin_grow', 1096), + (6861, 20894, 'tiered_shaky_notes', 1096), + (6862, 20901, 'griffin_mount_backup', 1096), + (6863, 20902, 'griffin_mount_fall', 1096), + (6864, 20903, 'griffin_mount_fly_backup', 1096), + (6865, 20904, 'griffin_mount_fly_dive', 1096), + (6866, 20905, 'griffin_mount_fly_enter', 1096), + (6867, 20906, 'griffin_mount_fly_fall', 1096), + (6868, 20907, 'griffin_mount_fly_glide', 1096), + (6869, 20908, 'griffin_mount_fly_idle', 1096), + (6870, 20909, 'griffin_mount_fly_idle01', 1096), + (6871, 20910, 'griffin_mount_fly_jump', 1096), + (6872, 20911, 'griffin_mount_fly_jumpsubstitute', 1096), + (6873, 20912, 'griffin_mount_fly_run', 1096), + (6874, 20913, 'griffin_mount_fly_turn_left', 1096), + (6875, 20914, 'griffin_mount_fly_turn_right', 1096), + (6876, 20915, 'griffin_mount_fly_walk', 1096), + (6877, 20916, 'griffin_mount_idle', 1096), + (6878, 20917, 'griffin_mount_idle01', 1096), + (6879, 20918, 'griffin_mount_jump', 1096), + (6880, 20919, 'griffin_mount_jump_substitute', 1096), + (6881, 20920, 'griffin_mount_land', 1096), + (6882, 20921, 'griffin_mount_long_fall', 1096), + (6883, 20922, 'griffin_mount_run', 1096), + (6884, 20923, 'griffin_mount_turn_left', 1096), + (6885, 20924, 'griffin_mount_turn_right', 1096), + (6886, 20925, 'griffin_mount_walk', 1096), + (6887, 20929, 'tiered_arrow_blast', 1096), + (6888, 20930, 'tiered_blood_burst', 1096), + (6889, 20931, 'tiered_fire_arrow_p2p', 1096), + (6890, 20932, 'tiered_harvest_arrows', 1096), + (6891, 20933, 'tiered_lightning_blast_hit', 1096), + (6892, 20934, 'tiered_lightning_spark_burst', 1096), + (6893, 20935, 'tiered_massive_hit', 1096), + (6894, 20936, 'tiered_ranged_buff', 1096), + (6895, 20937, 'tiered_shimmer_arrow_p2p', 1096), + (6896, 20938, 'tiered_slow_arrow_p2p', 1096), + (6897, 20939, 'tiered_sparkle_trail_weapon_blend', 1096), + (6898, 20940, 'tiered_weapon_blood_lust', 1096), + (6899, 20950, 'tiered_arrow', 1096), + (6900, 20951, 'tiered_arrow_storm', 1096), + (6901, 20952, 'tiered_briar_trap', 1096), + (6902, 20953, 'tiered_bullseye', 1096), + (6903, 20954, 'tiered_hawk_summon', 1096), + (6904, 20955, 'tiered_head_arrow_p2p', 1096), + (6905, 20956, 'tiered_redirect_arrow_p2p', 1096), + (6906, 20957, 'tiered_redirection', 1096), + (6907, 20958, 'tiered_shoot_arrow_rain', 1096), + (6908, 20959, 'tiered_triple_arrow_p2p', 1096), + (6909, 20969, 'tiered_ice_comet', 1096), + (6910, 20976, 'griffin_mount_fly_climb', 1096), + (6911, 20977, 'griffin_mount_fly_down', 1096), + (6912, 20978, 'griffin_mount_fly_up', 1096), + (6913, 20982, 'tiered_blades_buff', 1096), + (6914, 20983, 'tiered_damage_persist', 1096), + (6915, 20984, 'tiered_dark_arrow_p2p', 1096), + (6916, 20985, 'tiered_dark_cloud', 1096), + (6917, 20986, 'tiered_death_mark', 1096), + (6918, 20987, 'tiered_deflect_buff', 1096), + (6919, 20988, 'tiered_shoot_daggers', 1096), + (6920, 20989, 'tiered_slashing_daggers', 1096), + (6921, 20999, 'tiered_apply_poison_p2p', 1096), + (6922, 21000, 'tiered_dagger_head', 1096), + (6923, 21001, 'tiered_dark_ring_vanish', 1096), + (6924, 21002, 'tiered_fatal_followup', 1096), + (6925, 21003, 'tiered_hand_plasma', 1096), + (6926, 21004, 'tiered_spin_dagger_blast', 1096), + (6927, 21011, 'griffin_mount_fly_jump_substitute', 1096), + (6928, 21021, 'tiered_blast_tube', 1096), + (6929, 21022, 'tiered_flurry_daggers', 1096), + (6930, 21023, 'tiered_mesmerized', 1096), + (6931, 21024, 'tiered_slash_trail', 1096), + (6932, 21025, 'tiered_snow_dagger_p2p', 1096), + (6933, 21026, 'tiered_spin_shield_buff', 1096), + (6934, 21027, 'tiered_storm_waves', 1096), + (6935, 21028, 'tiered_stream_throw_attack_p2p', 1096), + (6936, 21029, 'tiered_swords_buff', 1096), + (6937, 21030, 'tiered_teeth_glint', 1096), + (6938, 21038, 'result_bind_wound', 1096), + (6939, 21041, 'tiered_blast_trail', 1096), + (6940, 21042, 'tiered_dagger_p2p', 1096), + (6941, 21043, 'tiered_dark_melee_swipe', 1096), + (6942, 21044, 'tiered_poison_forced_shader_weapon', 1096), + (6943, 21045, 'tiered_slash_trail_dark', 1096), + (6944, 21052, 'design_wellspring_bones_toss', 1096), + (6945, 21054, 'result_wellspring_ghosts_attack_p2p', 1096), + (6946, 21064, 'tiered_cone_defensive_buff', 1096), + (6947, 21065, 'tiered_cone_offensive_buff', 1096), + (6948, 21072, 'design_crater_blast', 1096), + (6949, 21073, 'design_fire_area', 1096), + (6950, 21075, 'result_spore_toss_p2p', 1096), + (6951, 21082, 'design_electro_disease_portal', 1096), + (6952, 21083, 'design_lightning_shield', 1096), + (6953, 21084, 'design_summon_disease_portal', 1096), + (6954, 21091, 'design_meteor_impact', 1096), + (6955, 21092, 'design_meteor_target', 1096), + (6956, 21095, 'ball_lightning_bolt_p2p', 1096), + (6957, 21097, 'cast_potion_hand_pattern_heal', 1096), + (6958, 21098, 'cast_potion_hand_sparks', 1096), + (6959, 21099, 'cast_potion_ring_cure', 1096), + (6960, 21101, 'cast_resurrect_swirls', 1096), + (6961, 21105, 'result_fire_engulfed', 1096), + (6962, 21106, 'result_flash_heal', 1096), + (6963, 21109, 'trdskl_vial_left', 1096), + (6964, 21116, 'design_gf_tree_fire', 1096), + (6965, 21117, 'design_gf_tree_fire_big', 1096), + (6966, 21119, 'result_head_flash_sparks', 1096), + (6967, 21122, 'cast_plague_spikes', 1096), + (6968, 21127, 'design_feet_trail_leaves', 1096), + (6969, 21129, 'pbae_cast_blast', 1096), + (6970, 21134, 'cast_summon_elemental_cyclone', 1096), + (6971, 21137, 'design_gf_cleansed_flowers', 1096), + (6972, 21138, 'design_gf_poisoned_vines', 1096), + (6973, 21139, 'design_guk_portal', 1096), + (6974, 21140, 'design_power_blast', 1096), + (6975, 21141, 'design_summon_power', 1096), + (6976, 21142, 'griffin_fly_up', 1096), + (6977, 21145, 'boom_sound', 1096), + (6978, 21151, 'result_guk_axe_attack_p2p', 1096), + (6979, 21152, 'result_guk_axe_stuck', 1096), + (6980, 21153, 'result_snotball_p2p', 1096), + (6981, 21163, 'turkey_cannon_blast', 1096), + (6982, 21164, 'turkey_shoot', 1096), + (6983, 21172, 'lights_baubles', 1096), + (6984, 21173, 'lights_bows', 1096), + (6985, 21181, 'result_book_hover', 1096), + (6986, 21183, 'sound_feeding', 1096), + (6987, 21185, 'zombie_feeding_fx', 1096), + (6988, 21192, 'design_boiling_pool_fx', 1096), + (6989, 21193, 'design_book_blast', 1096), + (6990, 21194, 'design_book_summon', 1096), + (6991, 21195, 'design_icy_shadow_portal', 1096), + (6992, 21197, 'knocktoknees_enter', 1096), + (6993, 21198, 'knocktoknees_idle', 1096), + (6994, 21201, 'cast_mirror_emerge', 1096), + (6995, 21206, 'design_light_column_grow', 1096), + (6996, 21209, 'bite', 1096), + (6997, 21219, 'tiered_bloodlust_swords', 1096), + (6998, 21220, 'tiered_cloud_buff_out', 1096), + (6999, 21221, 'tiered_divine_wave_p2p', 1096), + (7000, 21222, 'tiered_electrified', 1096), + (7001, 21223, 'tiered_rock_blast', 1096), + (7002, 21224, 'tiered_weakness', 1096), + (7003, 21225, 'tiered_whip_dark', 1096), + (7004, 21235, 'tiered_brain_leech_p2p', 1096), + (7005, 21236, 'tiered_dark_vanish', 1096), + (7006, 21237, 'tiered_dark_ward', 1096), + (7007, 21238, 'tiered_icy_cage', 1096), + (7008, 21248, 'tiered_cold_ice_crystals', 1096), + (7009, 21249, 'tiered_icicle_rain', 1096), + (7010, 21250, 'tiered_skull_p2p', 1096), + (7011, 21251, 'tiered_starnova_p2p', 1096), + (7012, 21261, 'tiered_dark_fire', 1096), + (7013, 21262, 'tiered_poison_spore_p2p', 1096), + (7014, 21263, 'tiered_spirit_dragon', 1096), + (7015, 21273, 'tiered_cast_mysticism', 1096), + (7016, 21274, 'tiered_light_ward', 1096), + (7017, 21275, 'tiered_mental_comet', 1096), + (7018, 21276, 'tiered_result_mysticism', 1096), + (7019, 21277, 'tiered_whip_circling', 1096), + (7020, 21287, 'tiered_ice_comet_shower', 1096), + (7021, 21288, 'tiered_sanction_of_merit', 1096), + (7022, 21293, 'combat_art_buff', 1096), + (7023, 21296, 'design_crow_shoulder', 1096), + (7024, 21297, 'design_ghost_wurm_shoulder', 1096), + (7025, 21299, 'result_dark_bubbles_rising', 1096), + (7026, 21307, 'result_candy_stars_rising', 1096), + (7027, 21317, 'wolf_mount_backup', 1096), + (7028, 21318, 'wolf_mount_fall', 1096), + (7029, 21319, 'wolf_mount_idle', 1096), + (7030, 21320, 'wolf_mount_idle01', 1096), + (7031, 21321, 'wolf_mount_jump', 1096), + (7032, 21322, 'wolf_mount_jump_substitute', 1096), + (7033, 21323, 'wolf_mount_land', 1096), + (7034, 21324, 'wolf_mount_long_fall', 1096), + (7035, 21325, 'wolf_mount_run', 1096), + (7036, 21326, 'wolf_mount_turn_left', 1096), + (7037, 21327, 'wolf_mount_turn_right', 1096), + (7038, 21328, 'wolf_mount_walk', 1096), + (7039, 21338, 'tiered_cloud_ring_burst', 1096), + (7040, 21339, 'tiered_ember_sword', 1096), + (7041, 21340, 'tiered_fire_rain', 1096), + (7042, 21341, 'tiered_lightning_bolt_p2p', 1096), + (7043, 21342, 'wolfmount_backup', 1096), + (7044, 21343, 'wolfmount_fall', 1096), + (7045, 21344, 'wolfmount_idle', 1096), + (7046, 21345, 'wolfmount_idle01', 1096), + (7047, 21346, 'wolfmount_jump', 1096), + (7048, 21347, 'wolfmount_jump_substitute', 1096), + (7049, 21348, 'wolfmount_land', 1096), + (7050, 21349, 'wolfmount_long_fall', 1096), + (7051, 21350, 'wolfmount_run', 1096), + (7052, 21351, 'wolfmount_turn_left', 1096), + (7053, 21352, 'wolfmount_turn_right', 1096), + (7054, 21353, 'wolfmount_walk', 1096), + (7055, 21363, 'tiered_hammer_head', 1096), + (7056, 21364, 'tiered_power_fount', 1096), + (7057, 21365, 'tiered_smashing_hammers', 1096), + (7058, 21372, 'ettin_drink', 1096), + (7059, 21376, 'tiered_color_shower', 1096), + (7060, 21377, 'tiered_haste', 1096), + (7061, 21387, 'tiered_bat_swarm_appear', 1096), + (7062, 21388, 'tiered_ember_shield', 1096), + (7063, 21396, 'result_paper_toss_p2p', 1096), + (7064, 21406, 'tiered_jesters_cap', 1096), + (7065, 21414, 'persist_notes_dirge', 1096), + (7066, 21415, 'persist_notes_troub', 1096), + (7067, 21418, 'sound_wolfmount_bare_pant', 1096), + (7068, 21419, 'sound_wolfmount_bare_roar_3', 1096), + (7069, 21420, 'sound_wolfmount_footstep_quiet', 1096), + (7070, 21421, 'sound_wolfmount_idle', 1096), + (7071, 21422, 'sound_wolfmount_jump_substitute', 1096), + (7072, 21423, 'sound_wolfmount_land', 1096), + (7073, 21424, 'tiered_notes_entranced', 1096), + (7074, 21425, 'tiered_poison_notes_wave_p2p', 1096), + (7075, 21432, 'design_vision_plane_map_bell', 1096), + (7076, 21442, 'tiered_rift_crack', 1096), + (7077, 21449, 'design_djinn_pod_cloud', 1096), + (7078, 21451, 'result_water_douse', 1096), + (7079, 21454, 'tiered_lava_column', 1096), + (7080, 21462, 'result_arrow_ridden', 1096), + (7081, 21470, 'result_body_fire', 1096), + (7082, 21471, 'result_body_lightning_purple', 1096), + (7083, 21472, 'result_body_snow', 1096), + (7084, 21474, 'sound_ettin_1h_sword_attack', 1096), + (7085, 21475, 'sound_ettin_1h_sword_attack01', 1096), + (7086, 21476, 'sound_ettin_1h_sword_attack03', 1096), + (7087, 21477, 'sound_ettin_fs', 1096), + (7088, 21478, 'sound_ettin_attack', 1096), + (7089, 21479, 'sound_ettin_attack01', 1096), + (7090, 21480, 'sound_ettin_attack02', 1096), + (7091, 21481, 'sound_ettin_attack03', 1096), + (7092, 21482, 'sound_ettin_attack_throw_boulder', 1096), + (7093, 21483, 'sound_ettin_cast_aoe_beneficial_end', 1096), + (7094, 21484, 'sound_ettin_cast_aoe_beneficial_loop', 1096), + (7095, 21485, 'sound_ettin_cast_aoe_beneficial_start', 1096), + (7096, 21486, 'sound_ettin_cast_aoe_detrimental_end', 1096), + (7097, 21487, 'sound_ettin_cast_aoe_detrimental_loop', 1096), + (7098, 21488, 'sound_ettin_cast_aoe_detrimental_start', 1096), + (7099, 21489, 'sound_ettin_cast_aoe_invocation_end', 1096), + (7100, 21490, 'sound_ettin_cast_aoe_invocation_loop', 1096), + (7101, 21491, 'sound_ettin_cast_aoe_invocation_start', 1096), + (7102, 21492, 'sound_ettin_cast_aoe_wand_end', 1096), + (7103, 21493, 'sound_ettin_cast_aoe_wand_loop', 1096), + (7104, 21494, 'sound_ettin_cast_aoe_wand_start', 1096), + (7105, 21495, 'sound_ettin_cast_summon_end', 1096), + (7106, 21496, 'sound_ettin_cast_summon_loop', 1096), + (7107, 21497, 'sound_ettin_cast_summon_start', 1096), + (7108, 21498, 'sound_ettin_cast_targeted_beneficial_end', 1096), + (7109, 21499, 'sound_ettin_cast_targeted_beneficial_start', 1096), + (7110, 21500, 'sound_ettin_cast_targeted_detrimental_end', 1096), + (7111, 21501, 'sound_ettin_cast_targeted_detrimental_start', 1096), + (7112, 21502, 'sound_ettin_cast_targeted_wand_end', 1096), + (7113, 21503, 'sound_ettin_cast_targeted_wand_loop', 1096), + (7114, 21504, 'sound_ettin_cast_targeted_wand_start', 1096), + (7115, 21505, 'sound_ettin_charge_up', 1096), + (7116, 21506, 'sound_ettin_dodge_backhand', 1096), + (7117, 21507, 'sound_ettin_dodge_forehand', 1096), + (7118, 21508, 'sound_ettin_drink', 1096), + (7119, 21509, 'sound_ettin_dual_wield_attack', 1096), + (7120, 21510, 'sound_ettin_dual_wield_attack01', 1096), + (7121, 21511, 'sound_ettin_dual_wield_attack02', 1096), + (7122, 21512, 'sound_ettin_dual_wield_attack03', 1096), + (7123, 21513, 'sound_ettin_habitat01', 1096), + (7124, 21514, 'sound_ettin_habitat03', 1096), + (7125, 21515, 'sound_ettin_idle01', 1096), + (7126, 21516, 'sound_ettin_idle02', 1096), + (7127, 21517, 'sound_ettin_knockeddowntoknees', 1096), + (7128, 21518, 'sound_ettin_ouch_backhand', 1096), + (7129, 21519, 'sound_ettin_ouch_forehand', 1096), + (7130, 21520, 'sound_ettin_run', 1096), + (7131, 21521, 'sound_ettin_shield_shove', 1096), + (7132, 21522, 'sound_ettin_swim_idle', 1096), + (7133, 21523, 'sound_ettin_walk', 1096), + (7134, 21524, 'sound_ettin_whirling_attack', 1096), + (7135, 21525, 'sound_ettin_wild_swing', 1096), + (7136, 21527, 'sound_idle03', 1096), + (7137, 21528, 'sound_wolfmount_idle01', 1096), + (7138, 21529, 'sound_wolfmount_turn_left', 1096), + (7139, 21530, 'sound_wolfmount_turn_right', 1096), + (7140, 21537, 'fly_attack01', 1096), + (7141, 21538, 'fly_attack02', 1096), + (7142, 21539, 'fly_attack03', 1096), + (7143, 21540, 'fly_death', 1096), + (7144, 21541, 'fly_dodge', 1096), + (7145, 21542, 'fly_ouchbackhand', 1096), + (7146, 21543, 'fly_ouchforehand', 1096), + (7147, 21544, 'fly_ouchthrust', 1096), + (7148, 21545, 'fly_turnleft', 1096), + (7149, 21546, 'fly_turnright', 1096), + (7150, 21548, 'perch', 1096), + (7151, 21555, 'design_book_summon_blue', 1096), + (7152, 21556, 'design_book_summon_red', 1096), + (7153, 21564, 'result_light_flare_p2p', 1096), + (7154, 21569, 'cast_shadow_gather', 1096), + (7155, 21570, 'cast_speed_trail_shadow', 1096), + (7156, 21574, 'removemask_enter', 1096), + (7157, 21575, 'removemask_exit', 1096), + (7158, 21576, 'removemask_idle', 1096), + (7159, 21579, 'attack_cage', 1096), + (7160, 21585, 'result_cage_beam_p2p', 1096), + (7161, 21586, 'result_spell_cage', 1096), + (7162, 21590, 'spell_cage_hit', 1096), + (7163, 21593, 'badger_dig', 1096), + (7164, 21598, 'design_vekascent_lifebringer', 1096), + (7165, 21605, 'design_vekascent_ice_bridge', 1096), + (7166, 21613, 'result_ice_trap_swirls', 1096), + (7167, 21616, 'cast_hot_water_douse', 1096), + (7168, 21625, 'trdskl_pot_large', 1096), + (7169, 21632, 'design_tofs_jail_barrier', 1096), + (7170, 21639, 'design_tofs_water_orb', 1096), + (7171, 21644, 'cast_scream', 1096), + (7172, 21645, 'cast_wing_buffet', 1096), + (7173, 21649, 'result_vines_trap', 1096), + (7174, 21656, 'design_vekfortress_water_blast', 1096), + (7175, 21657, 'design_vekfortress_water_warning', 1096), + (7176, 21658, 'design_vekpools_water_gush', 1096), + (7177, 21659, 'design_vekpools_water_warning', 1096), + (7178, 21666, 'design_velks_breakable_wall', 1096), + (7179, 21667, 'design_velks_breakable_wall_blue', 1096), + (7180, 21669, 'result_ice_spikes_growing', 1096), + (7181, 21670, 'result_zombie_slash', 1096), + (7182, 21674, 'trdskl_meat', 1096), + (7183, 21677, 'bow_attack01', 1096), + (7184, 21678, 'bow_attack02', 1096), + (7185, 21679, 'bow_attack03', 1096), + (7186, 21684, 'exit', 1096), + (7187, 21689, 'untrained_attack01', 1096), + (7188, 21690, 'untrained_attack02', 1096), + (7189, 21691, 'untrained_attack03', 1096), + (7190, 21699, 'persist_cold_book_swarm', 1096), + (7191, 21700, 'result_forced_shader_web', 1096), + (7192, 21701, 'result_halas_runes_spiral', 1096), + (7193, 21702, 'result_healthdrain_p2p', 1096), + (7194, 21709, 'design_vekpools_flower_fx', 1096), + (7195, 21714, 'sound_tse_attack', 1096), + (7196, 21715, 'sound_tse_attack01', 1096), + (7197, 21716, 'sound_tse_attack02', 1096), + (7198, 21717, 'sound_tse_attack03', 1096), + (7199, 21718, 'sound_tse_cast_aoe_beneficial_end', 1096), + (7200, 21719, 'sound_tse_cast_aoe_invocation_end', 1096), + (7201, 21720, 'sound_tse_cast_summon_end', 1096), + (7202, 21721, 'sound_tse_cast_targeted_beneficial_end', 1096), + (7203, 21722, 'sound_tse_cast_targeted_beneficial_loop', 1096), + (7204, 21723, 'sound_tse_cast_targeted_beneficial_start', 1096), + (7205, 21724, 'sound_tse_cast_targeted_detrimental_end', 1096), + (7206, 21725, 'sound_tse_combat_enter', 1096), + (7207, 21726, 'sound_tse_dead_enter', 1096), + (7208, 21727, 'sound_tse_dodge_down', 1096), + (7209, 21728, 'sound_tse_dodge_thrust', 1096), + (7210, 21729, 'sound_tse_fly_attack', 1096), + (7211, 21730, 'sound_tse_fly_attack01', 1096), + (7212, 21731, 'sound_tse_fly_attack02', 1096), + (7213, 21732, 'sound_tse_fly_attack03', 1096), + (7214, 21733, 'sound_tse_fly_cast_targeted_beneficial_end', 1096), + (7215, 21734, 'sound_tse_fly_cast_targeted_beneficial_loop', 1096), + (7216, 21735, 'sound_tse_fly_cast_targeted_beneficial_start', 1096), + (7217, 21736, 'sound_tse_fly_cast_targeted_detrimental_end', 1096), + (7218, 21737, 'sound_tse_fly_idle', 1096), + (7219, 21738, 'sound_tse_fly_offensive_buff', 1096), + (7220, 21739, 'sound_tse_knockeddowntoknees', 1096), + (7221, 21740, 'sound_tse_offensive_buff', 1096), + (7222, 21741, 'sound_tse_ouch', 1096), + (7223, 21742, 'sound_tse_ouch_forehand', 1096), + (7224, 21743, 'sound_tse_ouch_thrust', 1096), + (7225, 21744, 'sound_tse_whirling_attack', 1096), + (7226, 21745, 'sound_tse_wild_swing', 1096), + (7227, 21752, 'design_sullon_zek_containment', 1096), + (7228, 21754, 'result_ice_melt', 1096), + (7229, 21758, 'sound_hland_griffin_attack01', 1096), + (7230, 21759, 'sound_hland_griffin_attack02', 1096), + (7231, 21760, 'sound_hland_griffin_attack03', 1096), + (7232, 21761, 'sound_hland_griffin_combat_enter', 1096), + (7233, 21762, 'sound_hland_griffin_dead_enter', 1096), + (7234, 21763, 'sound_hland_griffin_dodge_backhand', 1096), + (7235, 21764, 'sound_hland_griffin_dodge_down', 1096), + (7236, 21765, 'sound_hland_griffin_dodge_forehand', 1096), + (7237, 21766, 'sound_hland_griffin_dodge_thrust', 1096), + (7238, 21767, 'sound_hland_griffin_idle01', 1096), + (7239, 21768, 'sound_hland_griffin_ouch', 1096), + (7240, 21769, 'sound_hland_griffin_ouch_thrust', 1096), + (7241, 21770, 'sound_hland_griffin_swim_walk', 1096), + (7242, 21771, 'sound_hland_griffin_whirling_attack', 1096), + (7243, 21772, 'sound_hland_griffin_wildswing', 1096), + (7244, 21773, 'sound_othmir_m_1h_sword_attack', 1096), + (7245, 21774, 'sound_othmir_m_1h_sword_attack01', 1096), + (7246, 21775, 'sound_othmir_m_1h_sword_attack02', 1096), + (7247, 21776, 'sound_othmir_m_1h_sword_attack03', 1096), + (7248, 21777, 'sound_othmir_m_attack', 1096), + (7249, 21778, 'sound_othmir_m_attack01', 1096), + (7250, 21779, 'sound_othmir_m_attack02', 1096), + (7251, 21780, 'sound_othmir_m_attack03', 1096), + (7252, 21781, 'sound_othmir_m_bow_attack', 1096), + (7253, 21782, 'sound_othmir_m_cast_targeted_beneficial_end', 1096), + (7254, 21783, 'sound_othmir_m_cast_targeted_beneficial_loop', 1096), + (7255, 21784, 'sound_othmir_m_cast_targeted_beneficial_start', 1096), + (7256, 21785, 'sound_othmir_m_charge_up', 1096), + (7257, 21786, 'sound_othmir_m_combat_idle', 1096), + (7258, 21787, 'sound_othmir_m_dance', 1096), + (7259, 21788, 'sound_othmir_m_dead_enter', 1096), + (7260, 21789, 'sound_othmir_m_dual_wield_attack', 1096), + (7261, 21790, 'sound_othmir_m_dual_wield_attack01', 1096), + (7262, 21791, 'sound_othmir_m_dual_wield_attack02', 1096), + (7263, 21792, 'sound_othmir_m_dual_wield_attack03', 1096), + (7264, 21793, 'sound_othmir_m_idle02', 1096), + (7265, 21794, 'sound_othmir_m_offensive_buff', 1096), + (7266, 21795, 'sound_othmir_m_shield_shove', 1096), + (7267, 21796, 'sound_othmir_m_swim_idle', 1096), + (7268, 21797, 'sound_othmir_m_swim_run', 1096), + (7269, 21798, 'sound_othmir_m_swim_walk', 1096), + (7270, 21799, 'sound_othmir_m_whirling_attack', 1096), + (7271, 21800, 'sound_othmir_m_wild_swing', 1096), + (7272, 21801, 'writhe_idle', 1096), + (7273, 21809, 'result_ice_shatter', 1096), + (7274, 21810, 'result_seafoam_dissolve', 1096), + (7275, 21813, 'cast_enraged_flames', 1096), + (7276, 21819, 'result_hammer_shower', 1096), + (7277, 21823, 'sound_othmir_f_1h_sword_attack', 1096), + (7278, 21824, 'sound_othmir_f_1h_sword_attack01', 1096), + (7279, 21825, 'sound_othmir_f_1h_sword_attack02', 1096), + (7280, 21826, 'sound_othmir_f_1h_sword_attack03', 1096), + (7281, 21827, 'sound_othmir_f_attack', 1096), + (7282, 21828, 'sound_othmir_f_attack01', 1096), + (7283, 21829, 'sound_othmir_f_attack02', 1096), + (7284, 21830, 'sound_othmir_f_attack03', 1096), + (7285, 21831, 'sound_othmir_f_bow_attack', 1096), + (7286, 21832, 'sound_othmir_f_cast_targeted_beneficial_end', 1096), + (7287, 21833, 'sound_othmir_f_cast_targeted_beneficial_start', 1096), + (7288, 21834, 'sound_othmir_f_charge_up', 1096), + (7289, 21835, 'sound_othmir_f_combat_idle', 1096), + (7290, 21836, 'sound_othmir_f_dead_enter', 1096), + (7291, 21837, 'sound_othmir_f_dual_wield_attack', 1096), + (7292, 21838, 'sound_othmir_f_dual_wield_attack01', 1096), + (7293, 21839, 'sound_othmir_f_dual_wield_attack02', 1096), + (7294, 21840, 'sound_othmir_f_dual_wield_attack03', 1096), + (7295, 21841, 'sound_othmir_f_idle02', 1096), + (7296, 21842, 'sound_othmir_f_shield_shove', 1096), + (7297, 21843, 'sound_othmir_f_swim_idle', 1096), + (7298, 21844, 'sound_othmir_f_swim_walk', 1096), + (7299, 21845, 'sound_othmir_f_whirling_attack', 1096), + (7300, 21846, 'sound_othmir_f_wild_swing', 1096), + (7301, 21855, 'sleep_idle', 1096), + (7302, 21858, 'sound_othmir_fs', 1096), + (7303, 21859, 'sound_tse_fs', 1096), + (7304, 21864, 'cast_split_beam_flash', 1096), + (7305, 21865, 'cast_split_copy', 1096), + (7306, 21868, 'cast_elemental_converge', 1096), + (7307, 21873, 'design_elemental_coalescing', 1096), + (7308, 21875, 'result_elemental_drain_p2p', 1096), + (7309, 21878, 'aura_purple', 1096), + (7310, 21879, 'cast_death_beam', 1096), + (7311, 21880, 'cast_heal_ball', 1096), + (7312, 21887, 'sleep_enter', 1096), + (7313, 21888, 'sleep_exit', 1096), + (7314, 21893, 'sound_wolfpup_bf', 1096), + (7315, 21894, 'sound_wolfpup_angry', 1096), + (7316, 21895, 'sound_wolfpup_attack', 1096), + (7317, 21896, 'sound_wolfpup_confused', 1096), + (7318, 21897, 'sound_wolfpup_eat', 1096), + (7319, 21898, 'sound_wolfpup_footstep', 1096), + (7320, 21899, 'sound_wolfpup_hungry', 1096), + (7321, 21900, 'sound_wolfpup_idle01', 1096), + (7322, 21901, 'sound_wolfpup_idle02', 1096), + (7323, 21902, 'sound_wolfpup_ouch', 1096), + (7324, 21903, 'sound_wolfpup_sick', 1096), + (7325, 21904, 'sound_wolfpup_trick', 1096), + (7326, 21910, 'converse01_sit', 1096), + (7327, 21911, 'converse02_sit', 1096), + (7328, 21912, 'converse_sit', 1096), + (7329, 21914, 'design_coldain_prayer_shawl', 1096), + (7330, 21916, 'leap_enter', 1096), + (7331, 21917, 'leap_exit', 1096), + (7332, 21918, 'leap_idle', 1096), + (7333, 21922, 'sound_hland_griffin_fs', 1096), + (7334, 21923, 'sound_hland_griffin_cast_enter', 1096), + (7335, 21924, 'sound_hland_griffin_cast_exit', 1096), + (7336, 21925, 'sound_hland_griffin_charge_up', 1096), + (7337, 21932, 'design_coldain_ring_adamantium', 1096), + (7338, 21933, 'design_coldain_ring_copper', 1096), + (7339, 21934, 'design_coldain_ring_frostreaver', 1096), + (7340, 21935, 'design_coldain_ring_gold', 1096), + (7341, 21936, 'design_coldain_ring_hero', 1096), + (7342, 21937, 'design_coldain_ring_mithril', 1096), + (7343, 21938, 'design_coldain_ring_obsidian', 1096), + (7344, 21939, 'design_coldain_ring_platinum', 1096), + (7345, 21940, 'design_coldain_ring_silver', 1096), + (7346, 21941, 'design_coldain_ring_velium', 1096), + (7347, 21942, 'design_spider_shoulder', 1096), + (7348, 21948, 'sound_hland_griffin_wing_flap_01', 1096), + (7349, 21949, 'sound_hland_griffin_wing_flap_02', 1096), + (7350, 21956, 'dive', 1096), + (7351, 21958, 'result_talon_strike', 1096), + (7352, 21963, 'sound_hland_griffin_wild_swing', 1096), + (7353, 21967, 'whirlingattack', 1096), + (7354, 21970, 'cast_head_souls', 1096), + (7355, 21971, 'cast_head_spikes', 1096), + (7356, 21974, 'cast_tallonite_attacking', 1096), + (7357, 21975, 'cast_tallonite_lash_spin', 1096), + (7358, 21979, 'result_head_spikes', 1096), + (7359, 21987, 'untrained_exit', 1096), + (7360, 21995, 'result_ember_strike', 1096), + (7361, 21996, 'result_ice_vine_trap', 1096), + (7362, 22004, 'untrained_idle01', 1096), + (7363, 22007, 'cast_nipik_spirits', 1096), + (7364, 22010, 'cast_shadow_vortex', 1096), + (7365, 22014, 'result_forced_shader_lichen', 1096), + (7366, 22015, 'result_gnoll_drool', 1096), + (7367, 22029, 'sound_vamp_fs', 1096), + (7368, 22030, 'sound_vamp_f_idle', 1096), + (7369, 22031, 'sound_vamp_f_untrained_attack', 1096), + (7370, 22032, 'sound_vamp_f_untrained_attack01', 1096), + (7371, 22033, 'sound_vamp_f_untrained_attack02', 1096), + (7372, 22034, 'sound_vamp_f_untrained_attack03', 1096), + (7373, 22035, 'sound_vamp_f_untrained_enter', 1096), + (7374, 22036, 'sound_vamp_f_untrained_idle', 1096), + (7375, 22037, 'sound_vamp_f_untrained_idle01', 1096), + (7376, 22038, 'sound_vamp_f_whirling_attack', 1096), + (7377, 22044, 'converse_sit01', 1096), + (7378, 22045, 'converse_sit02', 1096), + (7379, 22047, 'design_velkslab_flame_arch', 1096), + (7380, 22049, 'result_red_glow', 1096), + (7381, 22057, 'sound_vamp_m_untrained_attack', 1096), + (7382, 22058, 'sound_vamp_m_untrained_attack01', 1096), + (7383, 22059, 'sound_vamp_m_untrained_attack02', 1096), + (7384, 22060, 'sound_vamp_m_untrained_attack03', 1096), + (7385, 22061, 'sound_vamp_m_untrained_enter', 1096), + (7386, 22062, 'sound_vamp_m_untrained_idle01', 1096), + (7387, 22063, 'sound_vamp_m_whirling_attack', 1096), + (7388, 22065, 'talking_idle', 1096), + (7389, 22072, 'griffin_mount_fly_glide_left', 1096), + (7390, 22073, 'griffin_mount_fly_glide_right', 1096), + (7391, 22076, 'cast_foot_crush_stomp', 1096), + (7392, 22077, 'cast_kromzek_strike', 1096), + (7393, 22080, 'cast_targeted_beneficial_idle', 1096), + (7394, 22081, 'cast_thunder_clap', 1096), + (7395, 22089, 'pugilist_idle01', 1096), + (7396, 22092, 'cast_aa_column_heal_blast', 1096), + (7397, 22093, 'cast_aa_heal_bars', 1096), + (7398, 22098, 'design_bat_appear', 1096), + (7399, 22099, 'design_bat_vanish', 1096), + (7400, 22100, 'hover_exit', 1096), + (7401, 22110, 'untrained_slash', 1096), + (7402, 22111, 'untrained_slash1', 1096), + (7403, 22112, 'untrained_slash2', 1096), + (7404, 22113, 'untrained_slash3', 1096), + (7405, 22120, 'griffin_mount_fly_strafe_left', 1096), + (7406, 22121, 'griffin_mount_fly_strafe_right', 1096), + (7407, 22123, 'pugilist_idle02', 1096), + (7408, 22124, 'result_aa_lightning_debuff', 1096), + (7409, 22125, 'result_aa_ward_column_blast', 1096), + (7410, 22133, 'kd_barrel_idle', 1096), + (7411, 22134, 'kd_barrel_roll_enter', 1096), + (7412, 22135, 'kd_barrel_roll_idle', 1096), + (7413, 22143, 'sound_vamp_f_pugilist_idle02', 1096), + (7414, 22144, 'sound_vamp_m_pugilist_idle02', 1096), + (7415, 22149, 'cast_spirit_hands', 1096), + (7416, 22150, 'cast_spirit_sands', 1096), + (7417, 22151, 'cast_spirit_shell_buff', 1096), + (7418, 22154, 'eat_idle', 1096), + (7419, 22156, 'result_ice_trap_dark', 1096), + (7420, 22157, 'result_small_net', 1096), + (7421, 22159, 'sniff_idle', 1096), + (7422, 22167, 'trdskl_vel_hammer', 1096), + (7423, 22168, 'walk_sniff', 1096), + (7424, 22175, 'design_bat_smoke_attack', 1096), + (7425, 22176, 'design_seaweed_cluster', 1096), + (7426, 22186, 'vamp_smoke_trail', 1096), + (7427, 22187, 'vampire_attack', 1096), + (7428, 22188, 'vampire_attack01', 1096), + (7429, 22189, 'vampire_attack02', 1096), + (7430, 22190, 'vampire_attack03', 1096), + (7431, 22191, 'vampire_dodge', 1096), + (7432, 22192, 'vampire_dodge01', 1096), + (7433, 22193, 'vampire_dodge02', 1096), + (7434, 22194, 'vampire_enter', 1096), + (7435, 22195, 'vampire_exit', 1096), + (7436, 22196, 'vampire_idle', 1096), + (7437, 22197, 'vampire_idle01', 1096), + (7438, 22198, 'vampire_idle02', 1096), + (7439, 22199, 'vampire_ouch', 1096), + (7440, 22200, 'vampire_ouch01', 1096), + (7441, 22201, 'vampire_parry', 1096), + (7442, 22202, 'vampire_recoil', 1096), + (7443, 22203, 'vampire_whirling_attack', 1096), + (7444, 22211, 'result_rock_crystal_cyclone', 1096), + (7445, 22220, 'vamp_grab_slash', 1096), + (7446, 22223, 'cast_cold_breath', 1096), + (7447, 22224, 'cast_inhale_breath', 1096), + (7448, 22225, 'cast_lightning_burst', 1096), + (7449, 22226, 'cast_lightning_wings', 1096), + (7450, 22240, 'vampire_nofx_attack', 1096), + (7451, 22241, 'vampire_nofx_attack01', 1096), + (7452, 22242, 'vampire_nofx_attack02', 1096), + (7453, 22243, 'vampire_nofx_attack03', 1096), + (7454, 22244, 'vampire_nofx_dodge', 1096), + (7455, 22245, 'vampire_nofx_dodge01', 1096), + (7456, 22246, 'vampire_nofx_dodge02', 1096), + (7457, 22247, 'vampire_nofx_enter', 1096), + (7458, 22248, 'vampire_nofx_exit', 1096), + (7459, 22249, 'vampire_nofx_idle', 1096), + (7460, 22250, 'vampire_nofx_idle01', 1096), + (7461, 22251, 'vampire_nofx_idle02', 1096), + (7462, 22252, 'vampire_nofx_ouch', 1096), + (7463, 22253, 'vampire_nofx_ouch01', 1096), + (7464, 22254, 'vampire_nofx_parry', 1096), + (7465, 22255, 'vampire_nofx_recoil', 1096), + (7466, 22256, 'vampire_nofx_whirling_attack', 1096), + (7467, 22257, 'vampire_whirling_nofx_attack', 1096), + (7468, 22264, 'design_seaweed_cluster_down', 1096), + (7469, 22266, 'result_object_sparkles_white_down', 1096), + (7470, 22269, 'barrel_blast_snd', 1096), + (7471, 22273, 'crate_break_snd', 1096), + (7472, 22275, 'design_rock_door_collapse', 1096), + (7473, 22276, 'design_vine_door_grow', 1096), + (7474, 22277, 'impact_snd', 1096), + (7475, 22279, 'result_barrel_explode', 1096), + (7476, 22280, 'result_crate_explode', 1096), + (7477, 22281, 'result_heat_shimmer_dots', 1096), + (7478, 22282, 'result_musk_spray_p2p', 1096), + (7479, 22283, 'result_musky_object', 1096), + (7480, 22292, 'vamp_smoke_burst', 1096), + (7481, 22300, 'run_temp', 1096), + (7482, 22309, 'walk_temp', 1096), + (7483, 22316, 'design_hawk_release', 1096), + (7484, 22317, 'fx_splash_out', 1096), + (7485, 22318, 'fx_splash_up', 1096), + (7486, 22320, 'result_hawk_circling', 1096), + (7487, 22327, 'design_lava', 1096), + (7488, 22341, 'sound_tse_rx_attack', 1096), + (7489, 22342, 'sound_tse_rx_buff', 1096), + (7490, 22343, 'sound_tse_rx_hit', 1096), + (7491, 22344, 'sound_tse_fly_rx_attack', 1096), + (7492, 22352, 'knockedtoback_idle', 1096), + (7493, 22361, 'sound_carac_crying', 1096), + (7494, 22364, 'admire', 1096), + (7495, 22369, 'griffin_mount_idle02', 1096), + (7496, 22377, 'measure', 1096), + (7497, 22379, 'snd_lich_attack', 1096), + (7498, 22380, 'snd_lich_attack01', 1096), + (7499, 22381, 'snd_lich_attack02', 1096), + (7500, 22382, 'snd_lich_attack03', 1096), + (7501, 22383, 'snd_lich_bride_idle_lp', 1096), + (7502, 22384, 'snd_lich_combat_enter', 1096), + (7503, 22385, 'snd_lich_ouch', 1096), + (7504, 22386, 'snd_lich_whirling_attack', 1096), + (7505, 22387, 'snd_lich_wild_swing', 1096), + (7506, 22390, 'sound_griffin_mount_idle01', 1096), + (7507, 22400, 'worship_idle', 1096), + (7508, 22403, 'cast_bone_toss', 1096), + (7509, 22407, 'count', 1096), + (7510, 22409, 'design_vel_cannon_fire', 1096), + (7511, 22424, 'trdskl_bone', 1096), + (7512, 22431, 'design_light_beam_fx', 1096), + (7513, 22432, 'design_tofs_portal_base_fx', 1096), + (7514, 22437, 'cast_sacrifice_blast', 1096), + (7515, 22440, 'design_fire_big', 1096), + (7516, 22441, 'design_fire_green', 1096), + (7517, 22442, 'design_fire_small', 1096), + (7518, 22444, 'result_mark_of_doom', 1096), + (7519, 22449, 'cast_rallos_zek_superbuff', 1096), + (7520, 22452, 'design_blue_fire_wall', 1096), + (7521, 22453, 'design_red_fire_wall', 1096), + (7522, 22456, 'sit_throne_idle', 1096), + (7523, 22464, 'result_giant_icicle_drop', 1096), + (7524, 22465, 'result_giant_spear_p2p', 1096), + (7525, 22468, 'cast_hammer_hands', 1096), + (7526, 22487, 'trdskl_ice_wand', 1096), + (7527, 22494, 'design_massive_rock_impact', 1096), + (7528, 22496, 'persist_blue_tagged', 1096), + (7529, 22497, 'persist_red_tagged', 1096), + (7530, 22498, 'result_indestructible', 1096), + (7531, 22499, 'result_invincible', 1096), + (7532, 22500, 'result_statue_beam_p2p', 1096), + (7533, 22503, 'amaze', 1096), + (7534, 22508, 'design_zek_helm_fire', 1096), + (7535, 22509, 'grin', 1096), + (7536, 22510, 'growl', 1096), + (7537, 22512, 'mourn', 1096), + (7538, 22513, 'puzzle', 1096), + (7539, 22514, 'roar', 1096), + (7540, 22521, 'design_distort_face', 1096), + (7541, 22522, 'design_kd_rage_portal', 1096), + (7542, 22525, 'cast_aa_ancestor_swirls', 1096), + (7543, 22526, 'cast_aa_spiritfire_blast', 1096), + (7544, 22527, 'cast_aa_spiritfire_swirls', 1096), + (7545, 22533, 'result_aa_pulsing_ward', 1096), + (7546, 22534, 'result_aa_totem_blast', 1096), + (7547, 22541, 'gathering_find', 1096), + (7548, 22542, 'griffin_mount_launch', 1096), + (7549, 22544, 'result_aa_cold_mesh_grow', 1096), + (7550, 22545, 'result_aa_crush_blast', 1096), + (7551, 22546, 'result_aa_focus_spark', 1096), + (7552, 22547, 'result_aa_manawall', 1096), + (7553, 22548, 'result_aa_mesh_grow', 1096), + (7554, 22549, 'result_aa_shadow_blob_p2p', 1096), + (7555, 22550, 'result_aa_swap_hate', 1096), + (7556, 22553, 'applaud', 1096), + (7557, 22556, 'clap', 1096), + (7558, 22559, 'cast_aa_lightning_cleave_blast', 1096), + (7559, 22560, 'cast_aa_riposte', 1096), + (7560, 22561, 'cast_aa_shield_bars', 1096), + (7561, 22564, 'cast_aa_deflecting_daggers', 1096), + (7562, 22570, 'result_aa_slash_hit', 1096), + (7563, 22571, 'result_aa_watchful_eyes', 1096), + (7564, 22574, 'cast_aa_music_ring_blast', 1096), + (7565, 22575, 'cast_aa_notes_spiral', 1096), + (7566, 22581, 'result_aa_note_dagger_p2p', 1096), + (7567, 22584, 'carpet_fly_backup', 1096), + (7568, 22585, 'carpet_fly_climb', 1096), + (7569, 22586, 'carpet_fly_dive', 1096), + (7570, 22587, 'carpet_fly_glide', 1096), + (7571, 22588, 'carpet_fly_glide_left', 1096), + (7572, 22589, 'carpet_fly_glide_right', 1096), + (7573, 22590, 'carpet_fly_idle', 1096), + (7574, 22591, 'carpet_fly_run', 1096), + (7575, 22592, 'carpet_fly_strafe_left', 1096), + (7576, 22593, 'carpet_fly_strafe_right', 1096), + (7577, 22594, 'carpet_fly_turn_left', 1096), + (7578, 22595, 'carpet_fly_turn_right', 1096), + (7579, 22596, 'carpet_fly_up', 1096), + (7580, 22597, 'carpet_fly_walk', 1096), + (7581, 22600, 'carpet_fly_down', 1096), + (7582, 22603, 'conjure', 1096), + (7583, 22604, 'conjure_enter', 1096), + (7584, 22605, 'conjure_exit', 1096), + (7585, 22609, 'pray', 1096), + (7586, 22614, 'climb', 1096), + (7587, 22617, 'design_prexus_water_pillar', 1096), + (7588, 22621, 'snd_twolf_attack', 1096), + (7589, 22622, 'snd_twolf_attack_01', 1096), + (7590, 22623, 'snd_twolf_attack_02', 1096), + (7591, 22624, 'snd_twolf_attack_03', 1096), + (7592, 22625, 'snd_twolf_attk', 1096), + (7593, 22626, 'snd_twolf_attk_01', 1096), + (7594, 22627, 'snd_twolf_attk_02', 1096), + (7595, 22628, 'snd_twolf_cast_loop', 1096), + (7596, 22629, 'snd_twolf_charge_up', 1096), + (7597, 22630, 'snd_twolf_death', 1096), + (7598, 22631, 'snd_twolf_dodge_back', 1096), + (7599, 22632, 'snd_twolf_dodge_down', 1096), + (7600, 22633, 'snd_twolf_dodge_fore', 1096), + (7601, 22634, 'snd_twolf_dodge_thrust', 1096), + (7602, 22635, 'snd_twolf_eat_idle', 1096), + (7603, 22636, 'snd_twolf_habitat01', 1096), + (7604, 22637, 'snd_twolf_habitat02', 1096), + (7605, 22638, 'snd_twolf_idle_01', 1096), + (7606, 22639, 'snd_twolf_idle_02', 1096), + (7607, 22640, 'snd_twolf_ouch', 1096), + (7608, 22641, 'snd_twolf_ouch_knockknees', 1096), + (7609, 22642, 'snd_twolf_ouch_thrust', 1096), + (7610, 22643, 'snd_twolf_sniff_idle', 1096), + (7611, 22644, 'snd_twolf_walk_sniff', 1096), + (7612, 22645, 'snd_twolf_whirl', 1096), + (7613, 22646, 'snd_twolf_wildswing', 1096), + (7614, 22649, 'cast_aa_magic_overflow', 1096), + (7615, 22650, 'cast_aa_manasoul', 1096), + (7616, 22651, 'cast_aa_mystic_field', 1096), + (7617, 22652, 'cast_aa_self_lifetap', 1096), + (7618, 22658, 'look', 1096), + (7619, 22659, 'result_aa_lightning_clash', 1096), + (7620, 22660, 'result_aa_power_convert', 1096), + (7621, 22661, 'result_aa_protection_ward', 1096), + (7622, 22662, 'result_aa_soul_burn', 1096), + (7623, 22669, 'design_fortress_docks_bluefire', 1096), + (7624, 22670, 'design_table_explode', 1096), + (7625, 22685, 'trdskl_cane', 1096), + (7626, 22686, 'trdskl_cane_sit', 1096), + (7627, 22693, 'design_blood_dervish', 1096), + (7628, 22694, 'design_blood_fountain_blast', 1096), + (7629, 22695, 'design_blood_fountain_fx', 1096), + (7630, 22696, 'design_electric_barrier', 1096), + (7631, 22697, 'design_lightning_floor', 1096), + (7632, 22699, 'result_retaliation', 1096), + (7633, 22700, 'result_zek_divine', 1096), + (7634, 22701, 'result_zek_elemental', 1096), + (7635, 22702, 'result_zek_noxious', 1096), + (7636, 22711, 'snd_gnm_racemnt_idle_01', 1096), + (7637, 22712, 'snd_gnm_racemnt_run_01', 1096), + (7638, 22713, 'snd_gnm_racemnt_walk_01', 1096), + (7639, 22734, 'temp_idle01', 1096), + (7640, 22735, 'temp_idle02', 1096), + (7641, 22736, 'temp_idle03', 1096), + (7642, 22749, 'sound_hland_griffin_mount_fly_dive', 1096), + (7643, 22756, 'design_mount_explode', 1096), + (7644, 22757, 'design_speed_boost_buff', 1096), + (7645, 22758, 'design_speed_drop_twister_debuff', 1096), + (7646, 22759, 'design_timestop_buff', 1096), + (7647, 22760, 'design_twister_blaster_buff', 1096), + (7648, 22763, 'snd_gnomerace_ringwhoosh', 1096), + (7649, 22766, 'cast_aa_blast_tube', 1096), + (7650, 22772, 'result_aa_fire_comet', 1096), + (7651, 22773, 'result_aa_taunt', 1096), + (7652, 22778, 'cast_yelinak_ice_breath', 1096), + (7653, 22783, 'sit_chair', 1096), + (7654, 22796, 'spin_it', 1096), + (7655, 22799, 'cast_aa_whip_circling', 1096), + (7656, 22806, 'design_dark_ice_wall', 1096), + (7657, 22808, 'knockedtoback_enter', 1096), + (7658, 22809, 'knockedtoback_exit', 1096), + (7659, 22816, 'design_aqua_crystals_fall', 1096), + (7660, 22817, 'design_crysal_wall', 1096), + (7661, 22818, 'design_crystal_wall', 1096), + (7662, 22819, 'design_green_crystals_fall', 1096), + (7663, 22820, 'design_purple_crystals_fall', 1096), + (7664, 22835, 'wall_destroy', 1096), + (7665, 22843, 'result_mug_hit', 1096), + (7666, 22857, 'trdskl_mug_r', 1096), + (7667, 22864, 'horse_fly_backup', 1096), + (7668, 22865, 'horse_fly_climb', 1096), + (7669, 22866, 'horse_fly_dive', 1096), + (7670, 22867, 'horse_fly_glide', 1096), + (7671, 22868, 'horse_fly_glide_left', 1096), + (7672, 22869, 'horse_fly_glide_right', 1096), + (7673, 22870, 'horse_fly_idle', 1096), + (7674, 22871, 'horse_fly_run', 1096), + (7675, 22872, 'horse_fly_strafe_left', 1096), + (7676, 22873, 'horse_fly_strafe_right', 1096), + (7677, 22874, 'horse_fly_turn_left', 1096), + (7678, 22875, 'horse_fly_turn_right', 1096), + (7679, 22876, 'horse_fly_up', 1096), + (7680, 22877, 'horse_fly_walk', 1096), + (7681, 22879, 'result_ice_strike', 1096), + (7682, 22887, 'lose_spin', 1096), + (7683, 22888, 'pegasus_mount_backup', 1096), + (7684, 22889, 'pegasus_mount_fall', 1096), + (7685, 22890, 'pegasus_mount_fly_backup', 1096), + (7686, 22891, 'pegasus_mount_fly_climb', 1096), + (7687, 22892, 'pegasus_mount_fly_dive', 1096), + (7688, 22893, 'pegasus_mount_fly_down', 1096), + (7689, 22894, 'pegasus_mount_fly_glide', 1096), + (7690, 22895, 'pegasus_mount_fly_glide_left', 1096), + (7691, 22896, 'pegasus_mount_fly_glide_right', 1096), + (7692, 22897, 'pegasus_mount_fly_idle', 1096), + (7693, 22898, 'pegasus_mount_fly_run', 1096), + (7694, 22899, 'pegasus_mount_fly_strafe_left', 1096), + (7695, 22900, 'pegasus_mount_fly_strafe_right', 1096), + (7696, 22901, 'pegasus_mount_fly_turn_left', 1096), + (7697, 22902, 'pegasus_mount_fly_turn_right', 1096), + (7698, 22903, 'pegasus_mount_fly_up', 1096), + (7699, 22904, 'pegasus_mount_fly_walk', 1096), + (7700, 22905, 'pegasus_mount_idle', 1096), + (7701, 22906, 'pegasus_mount_jump', 1096), + (7702, 22907, 'pegasus_mount_jump_substitute', 1096), + (7703, 22908, 'pegasus_mount_land', 1096), + (7704, 22909, 'pegasus_mount_long_fall', 1096), + (7705, 22910, 'pegasus_mount_run', 1096), + (7706, 22911, 'pegasus_mount_turn_left', 1096), + (7707, 22912, 'pegasus_mount_turn_right', 1096), + (7708, 22913, 'pegasus_mount_walk', 1096), + (7709, 22916, 'sound_coins', 1096), + (7710, 22927, 'sound_win', 1096), + (7711, 22929, 'win_fx', 1096), + (7712, 22930, 'win_spin', 1096), + (7713, 22938, 'roll_it', 1096), + (7714, 22945, 'design_chronoportal_rift', 1096), + (7715, 22955, 'sound_bite_trex', 1096), + (7716, 22956, 'sound_breathe_trex', 1096), + (7717, 22960, 'sound_idle01_trex', 1096), + (7718, 22961, 'sound_idle02_trex', 1096), + (7719, 22962, 'sound_idle_trex', 1096), + (7720, 22963, 'sound_kick_trex', 1096), + (7721, 22965, 'sound_ouch_trex', 1096), + (7722, 22973, 'result_ice_strike_targeted', 1096), + (7723, 22980, 'flame_burst_lh', 1096), + (7724, 22981, 'flame_burst_rh', 1096), + (7725, 22989, 'pegasus_mount_fly_fall', 1096), + (7726, 22999, 'snd_warboar_fs', 1096), + (7727, 23000, 'snd_warboar_attack', 1096), + (7728, 23001, 'snd_warboar_attack01', 1096), + (7729, 23002, 'snd_warboar_attack02', 1096), + (7730, 23003, 'snd_warboar_attack03', 1096), + (7731, 23004, 'snd_warboar_cast_targeted_beneficial_end', 1096), + (7732, 23005, 'snd_warboar_cast_targeted_beneficial_start', 1096), + (7733, 23006, 'snd_warboar_charge_up', 1096), + (7734, 23007, 'snd_warboar_combat_enter', 1096), + (7735, 23008, 'snd_warboar_dead_enter', 1096), + (7736, 23009, 'snd_warboar_dodge_backhand', 1096), + (7737, 23010, 'snd_warboar_dodge_forehand', 1096), + (7738, 23011, 'snd_warboar_dodge_thrust', 1096), + (7739, 23012, 'snd_warboar_idle', 1096), + (7740, 23013, 'snd_warboar_idle01', 1096), + (7741, 23014, 'snd_warboar_idle02', 1096), + (7742, 23015, 'snd_warboar_kick', 1096), + (7743, 23016, 'snd_warboar_knockeddowntoknees_01', 1096), + (7744, 23017, 'snd_warboar_knockeddowntoknees_02', 1096), + (7745, 23018, 'snd_warboar_knockedtoback', 1096), + (7746, 23019, 'snd_warboar_knockedtoback_getup', 1096), + (7747, 23020, 'snd_warboar_ouch', 1096), + (7748, 23021, 'snd_warboar_ouch_backhand', 1096), + (7749, 23022, 'snd_warboar_ouch_forehand', 1096), + (7750, 23023, 'snd_warboar_shield_shove', 1096), + (7751, 23024, 'snd_warboar_swim_walk', 1096), + (7752, 23025, 'snd_warboar_whirling_attack', 1096), + (7753, 23026, 'snd_warboar_wild_swing', 1096), + (7754, 23027, 'snd_warboar_wildswing', 1096), + (7755, 23037, 'snd_tallon_zek_arrow_get', 1096), + (7756, 23038, 'snd_tallon_zek_bow_pull', 1096), + (7757, 23039, 'snd_tallon_zek_bowshot_01', 1096), + (7758, 23040, 'snd_tallon_zek_bowshot_02', 1096), + (7759, 23041, 'snd_tallon_zek_bowshot_03', 1096), + (7760, 23049, 'result_chain_root_simple', 1096), + (7761, 23050, 'result_chain_root_simple_sparkle', 1096), + (7762, 23057, 'design_eastern_wastes_spire_portal', 1096), + (7763, 23058, 'design_gnomish_wormhole', 1096), + (7764, 23059, 'design_gnomish_wormhole_exit', 1096), + (7765, 23066, 'design_spear_drop', 1096), + (7766, 23067, 'design_spear_idle', 1096), + (7767, 23071, 'cast_poison_sands', 1096), + (7768, 23078, 'snd_sullon_attack_rx', 1096), + (7769, 23079, 'snd_sullon_buff_rx', 1096), + (7770, 23080, 'snd_sullon_death_rx', 1096), + (7771, 23081, 'snd_sullon_ouch_rx', 1096), + (7772, 23089, 'persist_notes_green', 1096), + (7773, 23090, 'persist_notes_purple', 1096), + (7774, 23092, 'snd_bodyfall', 1096), + (7775, 23094, 'snd_pegasus_dive_vox', 1096), + (7776, 23095, 'snd_pegasus_wingflap_01', 1096), + (7777, 23096, 'snd_pegasus_wingflap_02', 1096), + (7778, 23101, 'snd_tallon_buff_rx', 1096), + (7779, 23102, 'snd_tallon_death_rx', 1096), + (7780, 23103, 'snd_tallon_ouch_rx', 1096), + (7781, 23104, 'snd_vallon_attack_rx', 1096), + (7782, 23105, 'snd_vallon_buff_rx', 1096), + (7783, 23106, 'snd_vallon_dead_rx', 1096), + (7784, 23107, 'snd_vallon_ouch_rx', 1096), + (7785, 23114, 'fire_trail_fx', 1144), + (7786, 23116, 'listening', 1144), + (7787, 23143, 'talking', 1144), + (7788, 23170, 'sound_terrorbird_mount_bare_pant', 1144), + (7789, 23171, 'sound_terrorbird_mount_footstep_quiet', 1144), + (7790, 23172, 'sound_terrorbird_mount_idle', 1144), + (7791, 23173, 'sound_terrorbird_mount_idle01', 1144), + (7792, 23174, 'sound_terrorbird_mount_jump_substitute', 1144), + (7793, 23175, 'sound_terrorbird_mount_land', 1144), + (7794, 23176, 'sound_terrorbird_mount_turn_left', 1144), + (7795, 23177, 'sound_terrorbird_mount_turn_right', 1144), + (7796, 23185, 'terrorbird_mount', 1144), + (7797, 23186, 'terrorbird_mount_backup', 1144), + (7798, 23187, 'terrorbird_mount_fall', 1144), + (7799, 23188, 'terrorbird_mount_idle', 1144), + (7800, 23189, 'terrorbird_mount_idle01', 1144), + (7801, 23190, 'terrorbird_mount_jump', 1144), + (7802, 23191, 'terrorbird_mount_jump_substitute', 1144), + (7803, 23192, 'terrorbird_mount_land', 1144), + (7804, 23193, 'terrorbird_mount_long_fall', 1144), + (7805, 23194, 'terrorbird_mount_run', 1144), + (7806, 23195, 'terrorbird_mount_turn_left', 1144), + (7807, 23196, 'terrorbird_mount_turn_right', 1144), + (7808, 23197, 'terrorbird_mount_walk', 1144), + (7809, 23204, 'feather_fx', 1144), + (7810, 23207, 'small_feather_fx', 1144), + (7811, 23215, 'komodo_mount_backup', 1144), + (7812, 23216, 'komodo_mount_fall', 1144), + (7813, 23217, 'komodo_mount_idle', 1144), + (7814, 23218, 'komodo_mount_jump', 1144), + (7815, 23219, 'komodo_mount_jump_substitute', 1144), + (7816, 23220, 'komodo_mount_land', 1144), + (7817, 23221, 'komodo_mount_long_fall', 1144), + (7818, 23222, 'komodo_mount_run', 1144), + (7819, 23223, 'komodo_mount_turn_left', 1144), + (7820, 23224, 'komodo_mount_turn_right', 1144), + (7821, 23225, 'komodo_mount_walk', 1144), + (7822, 23226, 'raptor_mount_backup', 1144), + (7823, 23227, 'raptor_mount_fall', 1144), + (7824, 23228, 'raptor_mount_idle', 1144), + (7825, 23229, 'raptor_mount_jump', 1144), + (7826, 23230, 'raptor_mount_jump_substitute', 1144), + (7827, 23231, 'raptor_mount_land', 1144), + (7828, 23232, 'raptor_mount_long_fall', 1144), + (7829, 23233, 'raptor_mount_run', 1144), + (7830, 23234, 'raptor_mount_turn_left', 1144), + (7831, 23235, 'raptor_mount_turn_right', 1144), + (7832, 23236, 'raptor_mount_walk', 1144), + (7833, 23247, 'snd_terrorbird_mount_idle_01', 1144), + (7834, 23248, 'snd_terrorbird_mount_idle_02', 1144), + (7835, 23249, 'snd_terrorbird_mount_idle_03', 1144), + (7836, 23250, 'snd_terrorbird_mount_idle_04', 1144), + (7837, 23251, 'snd_terrorbird_mount_jump_substitute', 1144), + (7838, 23259, 'result_spiritual_vanish', 1144), + (7839, 23270, 'snd_terrorbird_mount_wingflap_01', 1144), + (7840, 23281, 'snd_raptor_mount_idle_01', 1144), + (7841, 23282, 'snd_raptor_mount_idle_02', 1144), + (7842, 23283, 'snd_raptor_mount_idle_03', 1144), + (7843, 23284, 'snd_raptor_mount_idle_04', 1144), + (7844, 23285, 'snd_raptor_mount_jump_substitute', 1144), + (7845, 23286, 'snd_raptor_mount_wingflap_01', 1144), + (7846, 23293, 'design_pow_rocky_uprising', 1144), + (7847, 23301, 'komodo_mount_fly_glide_left', 1144), + (7848, 23302, 'komodo_mount_fly_glide_right', 1144), + (7849, 23303, 'komodo_mount_glide', 1144), + (7850, 23304, 'raptor_mount_fly_glide_left', 1144), + (7851, 23305, 'raptor_mount_fly_glide_right', 1144), + (7852, 23306, 'raptor_mount_glide', 1144), + (7853, 23307, 'raptor_mount_glide_left', 1144), + (7854, 23308, 'raptor_mount_glide_right', 1144), + (7855, 23342, 'terrorbird_mount_glide', 1144), + (7856, 23343, 'walk_kilt', 1144), + (7857, 23351, 'komodo_mount_glide_left', 1144), + (7858, 23352, 'komodo_mount_glide_right', 1144), + (7859, 23359, 'hover_enter', 1144), + (7860, 23360, 'hover_walk', 1144), + (7861, 23362, 'result_cold_fog_ground', 1144), + (7862, 23363, 'result_fire_frostfell_candy', 1144), + (7863, 23364, 'result_fire_frosty_swirls', 1144), + (7864, 23387, 'snd_wolfmount_jump', 1144), + (7865, 23394, 'design_launch_fireworks', 1144), + (7866, 23398, 'snd_komodo_mount_idle_01', 1144), + (7867, 23399, 'snd_komodo_mount_idle_02', 1144), + (7868, 23400, 'snd_komodo_mount_jump_substitute', 1144), + (7869, 23410, 'snd_komodo_mount_glide', 1144), + (7870, 23417, 'design_hologram01', 1144), + (7871, 23418, 'design_hologram02', 1144), + (7872, 23419, 'design_hologram03', 1144), + (7873, 23420, 'design_hologram04', 1144), + (7874, 23430, 'snd_evil_komodo_mount_idle_01', 1144), + (7875, 23431, 'snd_evil_komodo_mount_idle_02', 1144), + (7876, 23438, 'design_parachute', 1144), + (7877, 23440, 'mount_summon_komodo_snd', 1144), + (7878, 23441, 'mount_summon_raptor_snd', 1144), + (7879, 23442, 'mount_summon_terrorbird_snd', 1144), + (7880, 23445, 'snd_komodo_mount_jump', 1144), + (7881, 23447, 'snd_raptor_mount_jump', 1144), + (7882, 23455, 'snd_terrorbird_mount_jump', 1144), + (7883, 23472, 'takeoff_trail', 1144), + (7884, 23479, 'design_pow_blur_essence', 1144), + (7885, 23486, 'design_ballista_fire', 1144), + (7886, 23487, 'design_ballista_load', 1144), + (7887, 23488, 'design_drake_pet', 1144), + (7888, 23489, 'design_pow_battle_scene', 1144), + (7889, 23496, 'design_bixie_face_splat', 1144), + (7890, 23504, 'result_dusty_black', 1144), + (7891, 23512, 'raptor_idle01', 1144), + (7892, 23513, 'raptor_mount_idle02', 1144), + (7893, 23520, 'fae_mount_backup', 1144), + (7894, 23521, 'fae_mount_fall', 1144), + (7895, 23522, 'fae_mount_fly_backup', 1144), + (7896, 23523, 'fae_mount_fly_climb', 1144), + (7897, 23524, 'fae_mount_fly_dive', 1144), + (7898, 23525, 'fae_mount_fly_down', 1144), + (7899, 23526, 'fae_mount_fly_glide', 1144), + (7900, 23527, 'fae_mount_fly_glide_left', 1144), + (7901, 23528, 'fae_mount_fly_glide_right', 1144), + (7902, 23529, 'fae_mount_fly_idle', 1144), + (7903, 23530, 'fae_mount_fly_run', 1144), + (7904, 23531, 'fae_mount_fly_strafe_left', 1144), + (7905, 23532, 'fae_mount_fly_strafe_right', 1144), + (7906, 23533, 'fae_mount_fly_turn_left', 1144), + (7907, 23534, 'fae_mount_fly_turn_right', 1144), + (7908, 23535, 'fae_mount_fly_up', 1144), + (7909, 23536, 'fae_mount_fly_walk', 1144), + (7910, 23537, 'fae_mount_idle', 1144), + (7911, 23538, 'fae_mount_jump', 1144), + (7912, 23539, 'fae_mount_land', 1144), + (7913, 23540, 'fae_mount_long_fall', 1144), + (7914, 23541, 'fae_mount_run', 1144), + (7915, 23542, 'fae_mount_turn_left', 1144), + (7916, 23543, 'fae_mount_turn_right', 1144), + (7917, 23544, 'fae_mount_walk', 1144), + (7918, 23572, 'trail_fx', 1144), + (7919, 23579, 'design_hands_trail_clockwork', 1144), + (7920, 23580, 'design_octopus_pet', 1144), + (7921, 23581, 'fae_mount_fly_fall', 1144), + (7922, 23582, 'fae_mount_jump_substitute', 1144), + (7923, 23604, 'snd_war_general_1h_attack', 1144), + (7924, 23605, 'snd_war_general_1h_attack01', 1144), + (7925, 23606, 'snd_war_general_1h_attack02', 1144), + (7926, 23607, 'snd_war_general_1h_attack03', 1144), + (7927, 23608, 'snd_war_general_attack', 1144), + (7928, 23609, 'snd_war_general_attack01', 1144), + (7929, 23610, 'snd_war_general_attack02', 1144), + (7930, 23611, 'snd_war_general_attack03', 1144), + (7931, 23612, 'snd_war_general_offensive_buff', 1144), + (7932, 23613, 'snd_war_general_wing_flap', 1144), + (7933, 23626, 'spin_con1', 1144), + (7934, 23627, 'spin_con10', 1144), + (7935, 23628, 'spin_con11', 1144), + (7936, 23629, 'spin_con12', 1144), + (7937, 23630, 'spin_con13', 1144), + (7938, 23631, 'spin_con14', 1144), + (7939, 23632, 'spin_con15', 1144), + (7940, 23633, 'spin_con16', 1144), + (7941, 23634, 'spin_con2', 1144), + (7942, 23635, 'spin_con3', 1144), + (7943, 23636, 'spin_con4', 1144), + (7944, 23637, 'spin_con5', 1144), + (7945, 23638, 'spin_con6', 1144), + (7946, 23639, 'spin_con7', 1144), + (7947, 23640, 'spin_con8', 1144), + (7948, 23641, 'spin_con9', 1144), + (7949, 23642, 'squirrel_mount_backup', 1144), + (7950, 23643, 'squirrel_mount_fall', 1144), + (7951, 23644, 'squirrel_mount_glide', 1144), + (7952, 23645, 'squirrel_mount_glide_left', 1144), + (7953, 23646, 'squirrel_mount_glide_right', 1144), + (7954, 23647, 'squirrel_mount_idle', 1144), + (7955, 23648, 'squirrel_mount_idle01', 1144), + (7956, 23649, 'squirrel_mount_jump', 1144), + (7957, 23650, 'squirrel_mount_jump_substitute', 1144), + (7958, 23651, 'squirrel_mount_land', 1144), + (7959, 23652, 'squirrel_mount_long_fall', 1144), + (7960, 23653, 'squirrel_mount_run', 1144), + (7961, 23654, 'squirrel_mount_turn_left', 1144), + (7962, 23655, 'squirrel_mount_turn_right', 1144), + (7963, 23656, 'squirrel_mount_walk', 1144), + (7964, 23657, 'wand_attack', 1144), + (7965, 23658, 'wand_idle', 1144), + (7966, 23666, 'result_blue_aura', 1144), + (7967, 23667, 'result_golden_aura', 1144), + (7968, 23668, 'result_poppy_trail', 1144), + (7969, 23669, 'result_red_aura', 1144), + (7970, 23684, 'snd_war_general_dead_enter', 1144), + (7971, 23685, 'snd_war_general_knockeddowntoknees', 1144), + (7972, 23686, 'snd_war_general_whirling_attack', 1144), + (7973, 23687, 'snd_war_general_wild_swing', 1144), + (7974, 23690, 'cast_fae_flight_grant_fx', 1144), + (7975, 23695, 'design_rock_launch', 1144), + (7976, 23697, 'result_cyclops_eye_debuff', 1144), + (7977, 23698, 'result_fae_dark_mount_fx', 1144), + (7978, 23699, 'result_fae_light_mount_fx', 1144), + (7979, 23700, 'result_falcon_god_egg_spit_p2p', 1144), + (7980, 23701, 'screech_fx', 1144), + (7981, 23703, 'shield_bash_enter', 1144), + (7982, 23704, 'shield_bash_exit', 1144), + (7983, 23706, 'snd_falcon_god_fs', 1144), + (7984, 23707, 'snd_falcon_god_wing_flap_01', 1144), + (7985, 23720, 'snd_war_general_1h_sword_enter', 1144), + (7986, 23721, 'snd_war_general_fs', 1144), + (7987, 23722, 'snd_war_general_combat_enter', 1144), + (7988, 23723, 'snd_war_general_idle01', 1144), + (7989, 23724, 'snd_war_general_idle02', 1144), + (7990, 23725, 'snd_war_general_ouch_forehand', 1144), + (7991, 23738, 'writhe_enter', 1144), + (7992, 23745, 'fire_magic', 1144), + (7993, 23750, 'snd_falcon_god_attack02_vox', 1144), + (7994, 23751, 'snd_falcon_god_attack03_vox', 1144), + (7995, 23752, 'snd_falcon_god_attack_vox', 1144), + (7996, 23753, 'snd_falcon_god_cast_vox', 1144), + (7997, 23754, 'snd_falcon_god_combat_enter_vox', 1144), + (7998, 23755, 'snd_falcon_god_idle01', 1144), + (7999, 23756, 'snd_falcon_god_idle02_vox', 1144), + (8000, 23757, 'snd_falcon_god_offensive_buff', 1144), + (8001, 23759, 'snd_squirrel_mount_glide', 1144), + (8002, 23760, 'snd_squirrel_mount_idle', 1144), + (8003, 23761, 'snd_squirrel_mount_idle_01', 1144), + (8004, 23762, 'snd_squirrel_mount_jump', 1144), + (8005, 23763, 'snd_squirrel_mount_jump_substitute', 1144), + (8006, 23788, 'squirrel_mount_run01', 1144), + (8007, 23789, 'trdskl_acorn', 1144), + (8008, 23790, 'trdskl_skull', 1144), + (8009, 23797, 'fire_magic_blue', 1144), + (8010, 23798, 'fire_magic_green', 1144), + (8011, 23799, 'fire_magic_purple', 1144), + (8012, 23800, 'fire_magic_red', 1144), + (8013, 23801, 'gas_torch_flame', 1144), + (8014, 23812, 'snd_falcon_god_bodyfall', 1144), + (8015, 23817, 'cast_shoot_fire_arrows', 1144), + (8016, 23818, 'cast_slash_trail', 1144), + (8017, 23819, 'cast_soul_attack_blast', 1144), + (8018, 23823, 'result_fire_arrow_storm', 1144), + (8019, 23828, 'snd_rallos_zek_1h_sword_attack', 1144), + (8020, 23829, 'snd_rallos_zek_1h_sword_attack01', 1144), + (8021, 23830, 'snd_rallos_zek_1h_sword_attack02', 1144), + (8022, 23831, 'snd_rallos_zek_1h_sword_attack03', 1144), + (8023, 23832, 'snd_rallos_zek_fs', 1144), + (8024, 23833, 'snd_rallos_zek_shield_bash', 1144), + (8025, 23834, 'snd_rallos_zek_shield_bash_exit', 1144), + (8026, 23835, 'snd_rallos_zek_shield_shove', 1144), + (8027, 23836, 'snd_rallos_zek_whirling_attack01', 1144), + (8028, 23837, 'snd_rallos_zek_whirling_attack02', 1144), + (8029, 23838, 'snd_rallos_zek_whirling_attack03', 1144), + (8030, 23839, 'snd_rallos_zek_whoosh', 1144), + (8031, 23840, 'snd_rallos_zek_wild_swing', 1144), + (8032, 23843, 'cast_axe_fire_attack', 1144), + (8033, 23844, 'cast_axe_flurry', 1144), + (8034, 23847, 'cast_shooting_axes', 1144), + (8035, 23848, 'cast_slashing_axes', 1144), + (8036, 23853, 'cast_shield_slam_blast', 1144), + (8037, 23856, 'cast_fire_teleport', 1144), + (8038, 23857, 'cast_godly_port', 1144), + (8039, 23862, 'design_embedded_swords', 1144), + (8040, 23863, 'design_swords_exit', 1144), + (8041, 23866, 'angler_mount_backup', 1144), + (8042, 23867, 'angler_mount_fall', 1144), + (8043, 23868, 'angler_mount_glide', 1144), + (8044, 23869, 'angler_mount_glide_left', 1144), + (8045, 23870, 'angler_mount_glide_right', 1144), + (8046, 23871, 'angler_mount_idle', 1144), + (8047, 23872, 'angler_mount_idle01', 1144), + (8048, 23873, 'angler_mount_idle02', 1144), + (8049, 23874, 'angler_mount_jump', 1144), + (8050, 23875, 'angler_mount_jump_substitute', 1144), + (8051, 23876, 'angler_mount_land', 1144), + (8052, 23877, 'angler_mount_long_fall', 1144), + (8053, 23878, 'angler_mount_run', 1144), + (8054, 23879, 'angler_mount_run01', 1144), + (8055, 23880, 'angler_mount_turn_left', 1144), + (8056, 23881, 'angler_mount_turn_right', 1144), + (8057, 23882, 'angler_mount_walk', 1144), + (8058, 23887, 'design_swords_enter', 1144), + (8059, 23888, 'design_swords_strike', 1144), + (8060, 23889, 'design_zek_death_fx', 1144), + (8061, 23891, 'result_power_infused', 1144), + (8062, 23892, 'result_rallos_lightning_p2p', 1144), + (8063, 23895, 'snd_angler_mount_glide', 1144), + (8064, 23896, 'snd_angler_mount_idle', 1144), + (8065, 23897, 'snd_angler_mount_idle_01', 1144), + (8066, 23898, 'snd_angler_mount_jump', 1144), + (8067, 23899, 'snd_angler_mount_jump_substitute', 1144), + (8068, 23926, 'squirrel_mount_idle02', 1144), + (8069, 23929, 'cast_godly_port_exit', 1144), + (8070, 23934, 'design_result_white_out', 1144), + (8071, 23936, 'result_death_charge_blast', 1144), + (8072, 23943, 'design_pow_rock_blast', 1144), + (8073, 23946, 'cast_gather_fx', 1144), + (8074, 23952, 'result_erollisi_bow_attack_p2p', 1144), + (8075, 23955, 'breath_fx', 1144), + (8076, 23960, 'eye_fx', 1144), + (8077, 23962, 'port_down_fx', 1144), + (8078, 23963, 'result_shadow_shatter', 1144), + (8079, 23964, 'result_shadow_sphere_p2p', 1144), + (8080, 23971, 'design_sol_statue_breaking', 1144), + (8081, 23972, 'design_sol_statue_essence', 1144), + (8082, 23973, 'design_sol_statue_evil_essence', 1144), + (8083, 23975, 'result_fire_engulfed_dark', 1144), + (8084, 23976, 'result_shadow_streaks', 1144), + (8085, 23983, 'design_frostfell_portal_new', 1144), + (8086, 23987, 'snd_angler_mount_idle02', 1144), + (8087, 23988, 'snd_angler_mount_scratch', 1144), + (8088, 23989, 'snd_angler_mount_vox_01', 1144), + (8089, 23990, 'snd_angler_mount_vox_02', 1144), + (8090, 23991, 'snd_angler_mount_vox_03', 1144), + (8091, 23992, 'snd_angler_mount_vox_short', 1144), + (8092, 24000, 'result_object_sparkles_black', 1144), + (8093, 24001, 'result_object_sparkles_gold', 1144), + (8094, 24002, 'result_object_sparkles_pink', 1144), + (8095, 24003, 'result_object_sparkles_purple', 1144), + (8096, 24010, 'dance_female', 1144), + (8097, 24046, 'trdskl_tinker_hands', 1144), + (8098, 24054, 'result_exorcise_evil', 1144), + (8099, 24061, 'death01_enter', 1144), + (8100, 24062, 'death01_exit', 1144), + (8101, 24063, 'death01_idle', 1144), + (8102, 24064, '1h_sword_run', 1144), + (8103, 24067, 'cast1', 1144), + (8104, 24075, 'result_flash_bomb_vanish', 1144), + (8105, 24076, 'result_lifetap_heart_p2p', 1144), + (8106, 24084, 'player_wing_mount_backup', 1144), + (8107, 24085, 'player_wing_mount_fall', 1144), + (8108, 24086, 'player_wing_mount_fly_backup', 1144), + (8109, 24087, 'player_wing_mount_fly_climb', 1144), + (8110, 24088, 'player_wing_mount_fly_dive', 1144), + (8111, 24089, 'player_wing_mount_fly_down', 1144), + (8112, 24090, 'player_wing_mount_fly_glide', 1144), + (8113, 24091, 'player_wing_mount_fly_glide_left', 1144), + (8114, 24092, 'player_wing_mount_fly_glide_right', 1144), + (8115, 24093, 'player_wing_mount_fly_idle', 1144), + (8116, 24094, 'player_wing_mount_fly_run', 1144), + (8117, 24095, 'player_wing_mount_fly_strafe_left', 1144), + (8118, 24096, 'player_wing_mount_fly_strafe_right', 1144), + (8119, 24097, 'player_wing_mount_fly_turn_left', 1144), + (8120, 24098, 'player_wing_mount_fly_turn_right', 1144), + (8121, 24099, 'player_wing_mount_fly_up', 1144), + (8122, 24100, 'player_wing_mount_fly_walk', 1144), + (8123, 24101, 'player_wing_mount_idle', 1144), + (8124, 24102, 'player_wing_mount_jump', 1144), + (8125, 24103, 'player_wing_mount_land', 1144), + (8126, 24104, 'player_wing_mount_long_fall', 1144), + (8127, 24105, 'player_wing_mount_run', 1144), + (8128, 24106, 'player_wing_mount_turn_left', 1144), + (8129, 24107, 'player_wing_mount_turn_right', 1144), + (8130, 24108, 'player_wing_mount_walk', 1144), + (8131, 24113, 'chop_ground_digging', 1144), + (8132, 24114, 'chop_ground_success', 1144), + (8133, 32784, 'kill_1h_sword_idle', 0), + (8134, 32818, 'kill_2h_sword_enter', 0), + (8135, 32820, 'kill_2h_sword_idle', 0), + (8136, 32869, 'kill_bostaff_idle', 0), + (8137, 32889, 'kill_bow', 0), + (8138, 32893, 'kill_cackle', 0), + (8139, 32894, 'kill_cast', 0), + (8140, 32906, 'kill_cast_arch_circle', 0), + (8141, 32907, 'kill_cast_ball', 0), + (8142, 32908, 'kill_cast_bright_ring', 0), + (8143, 32909, 'kill_cast_columns', 0), + (8144, 32910, 'kill_cast_dark_ring', 0), + (8145, 32911, 'kill_cast_dbl_bright_ring', 0), + (8146, 32912, 'kill_cast_druid', 0), + (8147, 32913, 'kill_cast_dustpuff', 0), + (8148, 32914, 'kill_cast_heal', 0), + (8149, 32915, 'kill_cast_heal_blur', 0), + (8150, 32916, 'kill_cast_lightning', 0), + (8151, 32917, 'kill_cast_mage', 0), + (8152, 32918, 'kill_cast_mandala', 0), + (8153, 32919, 'kill_cast_mesmerize', 0), + (8154, 32920, 'kill_cast_necromancer', 0), + (8155, 32921, 'kill_cast_nuke_mental', 0), + (8156, 32922, 'kill_cast_pfx_dust_leaves_l', 0), + (8157, 32923, 'kill_cast_pfx_dust_leaves_r', 0), + (8158, 32926, 'kill_cast_pfx_glow_firepuff_l', 0), + (8159, 32927, 'kill_cast_pfx_glow_firepuff_r', 0), + (8160, 32928, 'kill_cast_pfx_glow_galv_l', 0), + (8161, 32929, 'kill_cast_pfx_glow_galv_r', 0), + (8162, 32930, 'kill_cast_pfx_glow_prism_l', 0), + (8163, 32931, 'kill_cast_pfx_glow_prism_r', 0), + (8164, 32934, 'kill_cast_pfx_l', 0), + (8165, 32935, 'kill_cast_pfx_magenuke_l', 0), + (8166, 32936, 'kill_cast_pfx_magenuke_r', 0), + (8167, 32937, 'kill_cast_pfx_r', 0), + (8168, 32940, 'kill_cast_placeholder_l', 0), + (8169, 32941, 'kill_cast_placeholder_r', 0), + (8170, 32942, 'kill_cast_priest', 0), + (8171, 32943, 'kill_cast_rays', 0), + (8172, 32944, 'kill_cast_rays_l', 0), + (8173, 32945, 'kill_cast_rays_mental', 0), + (8174, 32946, 'kill_cast_rays_r', 0), + (8175, 32948, 'kill_cast_rings_crescent', 0), + (8176, 32949, 'kill_cast_rune_ring', 0), + (8177, 32950, 'kill_cast_runedraw', 0), + (8178, 32951, 'kill_cast_runes_randomorbits', 0), + (8179, 32952, 'kill_cast_spark_circle', 0), + (8180, 32953, 'kill_cast_sparktrail_spiral', 0), + (8181, 32954, 'kill_cast_spotsparks_ring', 0), + (8182, 32955, 'kill_cast_swirlie', 0), + (8183, 32956, 'kill_cast_vault', 0), + (8184, 32957, 'kill_cast_ward', 0), + (8185, 32987, 'kill_crouch_enter', 0), + (8186, 32988, 'kill_crouch_exit', 0), + (8187, 32989, 'kill_crouch_idle', 0), + (8188, 32996, 'kill_dead', 0), + (8189, 32997, 'kill_dead_enter', 0), + (8190, 33035, 'kill_dual_wield_idle', 0), + (8191, 33058, 'kill_fall', 0), + (8192, 33066, 'kill_flourish', 0), + (8193, 33076, 'kill_gag', 0), + (8194, 33091, 'kill_idle', 0), + (8195, 33092, 'kill_idle01', 0), + (8196, 33093, 'kill_idle02', 0), + (8197, 33140, 'kill_monk_idle', 0), + (8198, 33164, 'kill_notworthy', 0), + (8199, 33187, 'kill_pike_idle', 0), + (8200, 33202, 'kill_procedural_hit', 0), + (8201, 33218, 'kill_pugilist_idle', 0), + (8202, 33257, 'kill_result_bash', 0), + (8203, 33258, 'kill_result_buff_limbs', 0), + (8204, 33259, 'kill_result_fire', 0), + (8205, 33260, 'kill_result_firetrail', 0), + (8206, 33261, 'kill_result_firews', 0), + (8207, 33263, 'kill_result_gather_mana1', 0), + (8208, 33264, 'kill_result_ghost', 0), + (8209, 33265, 'kill_result_heal', 0), + (8210, 33266, 'kill_result_heal11', 0), + (8211, 33267, 'kill_result_heal9', 0), + (8212, 33268, 'kill_result_kick', 0), + (8213, 33269, 'kill_result_lightning', 0), + (8214, 33270, 'kill_result_loot', 0), + (8215, 33271, 'kill_result_loot_ash', 0), + (8216, 33272, 'kill_result_mesmerize', 0), + (8217, 33273, 'kill_result_placeholder', 0), + (8218, 33274, 'kill_result_spawn', 0), + (8219, 33275, 'kill_result_strike', 0), + (8220, 33276, 'kill_result_stun', 0), + (8221, 33277, 'kill_result_test', 0), + (8222, 33278, 'kill_result_ward', 0), + (8223, 33279, 'kill_result_ward1', 0), + (8224, 33285, 'kill_run', 0), + (8225, 33286, 'kill_rune_fire_orbiting', 0), + (8226, 33306, 'kill_sit_enter', 0), + (8227, 33307, 'kill_sit_exit', 0), + (8228, 33308, 'kill_sit_idle', 0), + (8229, 33394, 'kill_spell_placeholder', 0), + (8230, 33395, 'kill_spell_root', 0), + (8231, 33490, 'kill_trail', 0), + (8232, 33514, 'kill_untrained_idle', 0), + (8233, 33659, 'kill_yawn', 0), + (8234, 33661, 'kill_cast_cloudring', 0), + (8235, 33662, 'kill_cast_dblring_blend', 0), + (8236, 33663, 'kill_cast_lhand_sparkle_trail', 0), + (8237, 33670, 'kill_cast_mistring', 0), + (8238, 33677, 'kill_cast_rhand_sparkle_trail', 0), + (8239, 33736, 'kill_cast_cloudsphere', 0), + (8240, 33772, 'kill_horse_idle', 0), + (8241, 33794, 'kill_1h_sword_attack', 0), + (8242, 33795, 'kill_1h_sword_attack01', 0), + (8243, 33796, 'kill_1h_sword_attack02', 0), + (8244, 33797, 'kill_1h_sword_attack03', 0), + (8245, 33812, 'kill_cast_rays_cloud', 0), + (8246, 33813, 'kill_cast_winkers', 0), + (8247, 33821, 'kill_procedural_ouch', 0), + (8248, 33822, 'kill_result_bear', 0), + (8249, 33882, 'kill_1h_sword_death_blow', 0), + (8250, 33930, 'kill_procedural_parry', 0), + (8251, 33931, 'kill_ignite_weapon', 0), + (8252, 33949, 'kill_monk_attack', 0), + (8253, 33969, 'kill_monk_attack01', 0), + (8254, 33974, 'kill_pike_attack', 0), + (8255, 33979, 'kill_cast_orbiting_rings', 0), + (8256, 33980, 'kill_cast_spiral_trace', 0), + (8257, 33986, 'kill_cast_elec_hands', 0), + (8258, 33994, 'kill_cast_pfx_glow_trail_l', 0), + (8259, 33995, 'kill_cast_pfx_glow_trail_r', 0), + (8260, 33996, 'kill_cast_hammer_toss', 0), + (8261, 33997, 'kill_result_hammer_approaching', 0), + (8262, 33998, 'kill_result_hammer_explode', 0), + (8263, 34005, 'kill_2h_sword_attack', 0), + (8264, 34011, 'kill_dual_wield_attack', 0), + (8265, 34012, 'kill_dual_wield_attack01', 0), + (8266, 34013, 'kill_dual_wield_attack02', 0), + (8267, 34026, 'kill_cast_scimitar_toss', 0), + (8268, 34027, 'kill_cast_spark_sphere', 0), + (8269, 34029, 'kill_result_scimitar_approaching', 0), + (8270, 34030, 'kill_result_scimitar_explode', 0), + (8271, 34039, 'kill_1h_sword_dodge_backhand', 0), + (8272, 34040, 'kill_1h_sword_dodge_down', 0), + (8273, 34041, 'kill_1h_sword_dodge_forehand', 0), + (8274, 34042, 'kill_1h_sword_ouch_backhand', 0), + (8275, 34043, 'kill_1h_sword_ouch_down', 0), + (8276, 34044, 'kill_1h_sword_ouch_forehand', 0), + (8277, 34045, 'kill_1h_sword_parry_backhand', 0), + (8278, 34046, 'kill_1h_sword_parry_down', 0), + (8279, 34047, 'kill_1h_sword_parry_forehand', 0), + (8280, 34048, 'kill_cast_distort', 0), + (8281, 34049, 'kill_cast_distort_rect', 0), + (8282, 34050, 'kill_cast_trail_leftarm', 0), + (8283, 34051, 'kill_cast_trail_rightarm', 0), + (8284, 34052, 'kill_monk_attack02', 0), + (8285, 34054, 'kill_monk_dodge_backhand', 0), + (8286, 34055, 'kill_monk_dodge_down', 0), + (8287, 34063, 'kill_result_blast_cone', 0), + (8288, 34064, 'kill_result_camera_shake', 0), + (8289, 34065, 'kill_result_ground_blast', 0), + (8290, 34066, 'kill_result_lightning_bolt1', 0), + (8291, 34067, 'kill_result_lion_spirit', 0), + (8292, 34068, 'kill_result_phoenix_rising', 0), + (8293, 34070, 'kill_result_flash1', 0), + (8294, 34071, 'kill_result_lightning_bolt2', 0), + (8295, 34072, 'kill_result_lightning_bolt3', 0), + (8296, 34073, 'kill_result_spirit_of_the_wolf', 0), + (8297, 34075, 'kill_cast_runedraw_blue', 0), + (8298, 34082, 'kill_result_phoenix_descending', 0), + (8299, 34084, 'kill_cast_dustpuff_rfoot', 0), + (8300, 34085, 'kill_cast_trail_rightfoot', 0), + (8301, 34086, 'kill_cast_trail_rightshin', 0), + (8302, 34091, 'kill_1h_crush_attack', 0), + (8303, 34092, 'kill_1h_crush_attack01', 0), + (8304, 34093, 'kill_1h_crush_attack02', 0), + (8305, 34094, 'kill_1h_crush_attack03', 0), + (8306, 34100, 'kill_1h_crush_dodge_backhand', 0), + (8307, 34101, 'kill_1h_crush_dodge_down', 0), + (8308, 34102, 'kill_1h_crush_dodge_forehand', 0), + (8309, 34103, 'kill_1h_crush_dodge_thrust', 0), + (8310, 34106, 'kill_1h_crush_idle', 0), + (8311, 34107, 'kill_1h_crush_ouch_backhand', 0), + (8312, 34108, 'kill_1h_crush_ouch_down', 0), + (8313, 34109, 'kill_1h_crush_ouch_forehand', 0), + (8314, 34110, 'kill_1h_crush_ouch_thrust', 0), + (8315, 34111, 'kill_1h_crush_parry_backhand', 0), + (8316, 34112, 'kill_1h_crush_parry_down', 0), + (8317, 34113, 'kill_1h_crush_parry_forehand', 0), + (8318, 34114, 'kill_1h_crush_parry_thrust', 0), + (8319, 34118, 'kill_1h_pierce_attack', 0), + (8320, 34119, 'kill_1h_pierce_attack01', 0), + (8321, 34123, 'kill_1h_pierce_dodge_backhand', 0), + (8322, 34124, 'kill_1h_pierce_dodge_down', 0), + (8323, 34125, 'kill_1h_pierce_dodge_forehand', 0), + (8324, 34126, 'kill_1h_pierce_dodge_thrust', 0), + (8325, 34129, 'kill_1h_pierce_idle', 0), + (8326, 34130, 'kill_1h_pierce_ouch_backhand', 0), + (8327, 34131, 'kill_1h_pierce_ouch_down', 0), + (8328, 34132, 'kill_1h_pierce_ouch_forehand', 0), + (8329, 34133, 'kill_1h_pierce_ouch_thrust', 0), + (8330, 34134, 'kill_1h_pierce_parry_backhand', 0), + (8331, 34135, 'kill_1h_pierce_parry_down', 0), + (8332, 34136, 'kill_1h_pierce_parry_forehand', 0), + (8333, 34137, 'kill_1h_pierce_parry_thrust', 0), + (8334, 34141, 'kill_1h_sword_death_blow01', 0), + (8335, 34142, 'kill_1h_sword_dodge_thrust', 0), + (8336, 34143, 'kill_1h_sword_ouch_thrust', 0), + (8337, 34144, 'kill_1h_sword_parry_thrust', 0), + (8338, 34152, 'kill_cast_dustpuff_ws', 0), + (8339, 34154, 'kill_cast_glow_ring_wavyrays', 0), + (8340, 34155, 'kill_cast_glow_ring_wavyrays_l', 0), + (8341, 34156, 'kill_cast_glow_ring_wavyrays_r', 0), + (8342, 34180, 'kill_cast_sphere_lightning', 0), + (8343, 34181, 'kill_cast_sphere_lightning2', 0), + (8344, 34182, 'kill_cast_sphere_lightning_r', 0), + (8345, 34191, 'kill_result_charge', 0), + (8346, 34192, 'kill_result_ghost_shield', 0), + (8347, 34193, 'kill_result_heal_heart', 0), + (8348, 34194, 'kill_result_sparkly_swirl_flare', 0), + (8349, 34200, 'kill_cast_fighter', 0), + (8350, 34201, 'kill_cast_ghost_shield_summoned', 0), + (8351, 34207, 'kill_cast_scout', 0), + (8352, 34209, 'kill_cast_ghost_shield_summoned_sparkles', 0), + (8353, 34212, 'kill_result_glint2', 0), + (8354, 34213, 'kill_result_trail', 0), + (8355, 34221, 'kill_2h_sword_attack01', 0), + (8356, 34222, 'kill_2h_sword_attack02', 0), + (8357, 34225, 'kill_2h_sword_dodge_backhand', 0), + (8358, 34226, 'kill_2h_sword_dodge_down', 0), + (8359, 34227, 'kill_2h_sword_dodge_forehand', 0), + (8360, 34228, 'kill_2h_sword_ouch_backhand', 0), + (8361, 34229, 'kill_2h_sword_ouch_down', 0), + (8362, 34230, 'kill_2h_sword_ouch_forehand', 0), + (8363, 34240, 'kill_result_crystal_shield', 0), + (8364, 34249, 'kill_cast_snake_idling', 0), + (8365, 34250, 'kill_result_horse_running', 0), + (8366, 34251, 'kill_result_lion_attacking', 0), + (8367, 34252, 'kill_result_lion_roaring', 0), + (8368, 34253, 'kill_result_snake_striking', 0), + (8369, 34258, 'kill_result_cat_leaping', 0), + (8370, 34259, 'kill_result_cold_blast', 0), + (8371, 34260, 'kill_result_cold_breath', 0), + (8372, 34261, 'kill_state_breath_cold', 0), + (8373, 34262, 'kill_result_cold_forced_shader', 0), + (8374, 34263, 'kill_result_cold_ice_crystals', 0), + (8375, 34264, 'kill_result_poison_breath', 0), + (8376, 34265, 'kill_result_poison_cysts_growing', 0), + (8377, 34266, 'kill_result_poison_forced_shader', 0), + (8378, 34271, 'kill_cast_ball_fire', 0), + (8379, 34273, 'kill_cast_spotsparks_ring2', 0), + (8380, 34274, 'kill_cast_spotsparks_ring3', 0), + (8381, 34289, 'kill_result_poison_cysts_blast', 0), + (8382, 34291, 'kill_cast_lhand_sparkle_trail_t', 0), + (8383, 34292, 'kill_cast_poison_dragon_breath', 0), + (8384, 34293, 'kill_cast_rhand_sparkle_trail_t', 0), + (8385, 34296, 'kill_result_poison_whirlwind', 0), + (8386, 34312, 'kill_cast_distort_leftfoot', 0), + (8387, 34314, 'kill_cast_distort_weaponrootleft', 0), + (8388, 34315, 'kill_cast_distort_weaponrootright', 0), + (8389, 34316, 'kill_cast_dustpuff_lfoot', 0), + (8390, 34317, 'kill_cast_dustpuff_weaponrootleft', 0), + (8391, 34318, 'kill_cast_dustpuff_weaponrootright', 0), + (8392, 34324, 'kill_result_fire_ring_green_medium', 0), + (8393, 34325, 'kill_result_poison_cyst_vomit', 0), + (8394, 34326, 'kill_result_runes_rising', 0), + (8395, 34327, 'kill_result_teleporter_coalesce', 0), + (8396, 34331, 'kill_cast_cleric', 0), + (8397, 34332, 'kill_cast_coercer', 0), + (8398, 34334, 'kill_cast_defiler', 0), + (8399, 34335, 'kill_cast_enchanter', 0), + (8400, 34336, 'kill_cast_fury', 0), + (8401, 34337, 'kill_cast_illusionist', 0), + (8402, 34338, 'kill_cast_inquisitor', 0), + (8403, 34339, 'kill_cast_mystic', 0), + (8404, 34340, 'kill_cast_shaman', 0), + (8405, 34341, 'kill_cast_sorcerer', 0), + (8406, 34342, 'kill_cast_summoner', 0), + (8407, 34343, 'kill_cast_templar', 0), + (8408, 34344, 'kill_cast_warden', 0), + (8409, 34345, 'kill_cast_warlock', 0), + (8410, 34346, 'kill_cast_wizard', 0), + (8411, 34348, 'kill_result_bull_stomping', 0), + (8412, 34349, 'kill_cast_hammer_sparkling_floating', 0), + (8413, 34350, 'kill_cast_mist_sphere_add', 0), + (8414, 34351, 'kill_cast_mist_sphere_blend', 0), + (8415, 34352, 'kill_cast_swirlies_smoke', 0), + (8416, 34353, 'kill_cast_swirlies_smoke_blend', 0), + (8417, 34360, 'kill_result_fire_green', 0), + (8418, 34361, 'kill_result_poison_cysts_growing_giant', 0), + (8419, 34362, 'kill_cast_forced_flasher_diff_noise', 0), + (8420, 34363, 'kill_cast_forced_flasher_oceanseamless', 0), + (8421, 34364, 'kill_cast_forced_flasher_streaks', 0), + (8422, 34365, 'kill_cast_forced_flasher_tiledfoam', 0), + (8423, 34366, 'kill_cast_forced_flasher_tiledfoam2', 0), + (8424, 34367, 'kill_cast_forced_flasher_tiledfoam3', 0), + (8425, 34368, 'kill_cast_forced_flasher_tiledfoam4', 0), + (8426, 34393, 'kill_result_fire_engulf', 0), + (8427, 34398, 'kill_cast_expanding_rings', 0), + (8428, 34399, 'kill_cast_forced_flasher_fadein_diff_noise', 0), + (8429, 34412, 'kill_pugilist_attack', 0), + (8430, 34414, 'kill_pugilist_attack02', 0), + (8431, 34427, 'kill_result_fire_slam', 0), + (8432, 34428, 'kill_cast_distort_flat', 0), + (8433, 34429, 'kill_cast_mandala_blobs', 0), + (8434, 34430, 'kill_result_ground_blast_lava', 0), + (8435, 34433, 'kill_spell_root_colored', 0), + (8436, 34435, 'kill_cast_dragon_wing_dust', 0), + (8437, 34451, 'kill_result_camera_shake_wider', 0), + (8438, 34452, 'kill_result_stunned', 0), + (8439, 34454, 'kill_cast_snake_shrinking', 0), + (8440, 34495, 'kill_horse_enter', 0), + (8441, 34521, 'kill_levelup', 0), + (8442, 34524, 'kill_result_trail_lightning', 0), + (8443, 34532, 'kill_result_trail_motion', 0), + (8444, 34533, 'kill_result_tree_morph', 0), + (8445, 34534, 'kill_result_wood_forced_shader', 0), + (8446, 34535, 'kill_result_wood_spikes_growing', 0), + (8447, 34541, 'kill_cast_fire_trail', 0), + (8448, 34561, 'kill_result_cactus_spikes_growing', 0), + (8449, 34562, 'kill_result_cold_fog', 0), + (8450, 34563, 'kill_result_colored_forced_shader', 0), + (8451, 34564, 'kill_result_ghost_forced_shader', 0), + (8452, 34565, 'kill_result_snowflakes_growing', 0), + (8453, 34566, 'kill_result_snowstorm', 0), + (8454, 34567, 'kill_result_sparkles_clinging', 0), + (8455, 34568, 'kill_result_teleport_sparkle', 0), + (8456, 34569, 'kill_result_teleport_vanish', 0), + (8457, 34570, 'kill_result_wood_roots_growing', 0), + (8458, 34571, 'kill_result_teleport_appear', 0), + (8459, 34574, 'kill_cast_flasher', 0), + (8460, 34575, 'kill_cast_pfx_trace_puffs_l', 0), + (8461, 34576, 'kill_cast_pfx_trace_puffs_r', 0), + (8462, 34591, 'kill_cast_fire_whip_circling', 0), + (8463, 34600, 'kill_result_spark_burst', 0), + (8464, 34617, 'kill_cast_enthralling_fetters_circling', 0), + (8465, 34618, 'kill_cast_enthralling_fetters_circling_ghostly', 0), + (8466, 34619, 'kill_cast_testbones', 0), + (8467, 34621, 'kill_result_clay_red_forced_shader', 0), + (8468, 34622, 'kill_result_enthralling_fetters', 0), + (8469, 34623, 'kill_result_metal_rusty_forced_shader', 0), + (8470, 34627, 'kill_result_clay_chunks_dropping', 0), + (8471, 34628, 'kill_result_flash', 0), + (8472, 34629, 'kill_result_water_dripping', 0), + (8473, 34630, 'kill_result_water_forced_shader', 0), + (8474, 34631, 'kill_result_bubble_stream', 0), + (8475, 34632, 'kill_result_ghost_fish_circling', 0), + (8476, 34633, 'kill_cast_testbones_vgraph', 0), + (8477, 34634, 'kill_result_ice_blast', 0), + (8478, 34635, 'kill_result_ice_crystals_dropping', 0), + (8479, 34636, 'kill_result_icy_cage', 0), + (8480, 34637, 'kill_cast_mandala_electricity', 0), + (8481, 34638, 'kill_cast_mandala_streaks', 0), + (8482, 34639, 'kill_result_icy_cage_blast_ring', 0), + (8483, 34640, 'kill_cast_rune_ring_good', 0), + (8484, 34641, 'kill_cast_rune_ring_rotate', 0), + (8485, 34642, 'kill_result_icicles_breaking', 0), + (8486, 34643, 'kill_result_icy_comet', 0), + (8487, 34644, 'kill_result_icy_comet_exploding', 0), + (8488, 34647, 'kill_result_glacial_wall', 0), + (8489, 34648, 'kill_result_glacial_wall_sparkles', 0), + (8490, 34649, 'kill_result_ice_shields_burning', 0), + (8491, 34650, 'kill_pike_attack01', 0), + (8492, 34651, 'kill_pike_attack02', 0), + (8493, 34669, 'kill_result_clay_shields', 0), + (8494, 34670, 'kill_result_scale_skin_forced_shader', 0), + (8495, 34672, 'kill_result_color_shower', 0), + (8496, 34673, 'kill_result_dispell1_out', 0), + (8497, 34674, 'kill_result_verdant_genesis', 0), + (8498, 34675, 'kill_result_attract_bubbles', 0), + (8499, 34677, 'kill_result_offering_of_vitae', 0), + (8500, 34678, 'kill_result_sparkles_clinging_soft', 0), + (8501, 34679, 'kill_result_bestowal_of_vitae', 0), + (8502, 34680, 'kill_result_ethereal_ward', 0), + (8503, 34681, 'kill_result_dps_decrease', 0), + (8504, 34682, 'kill_result_smite', 0), + (8505, 34706, 'kill_result_ember_kite_shields_burning', 0), + (8506, 34707, 'kill_result_ice_sword_breaking', 0), + (8507, 34710, 'kill_result_charm', 0), + (8508, 34711, 'kill_result_rainbow_forced_shader', 0), + (8509, 34713, 'kill_result_ember_swords_burning', 0), + (8510, 34714, 'kill_result_ghost_sword_breaking', 0), + (8511, 34715, 'kill_result_offering_of_vitae_2', 0), + (8512, 34721, 'kill_result_smite_2', 0), + (8513, 34722, 'kill_result_tellurian_recruit', 0), + (8514, 34730, 'kill_result_expand_ring_screech', 0), + (8515, 34731, 'kill_result_grim_champion', 0), + (8516, 34732, 'kill_result_shockwave_sparkles', 0), + (8517, 34733, 'kill_result_tremor', 0), + (8518, 34734, 'kill_bostaff_attack', 0), + (8519, 34735, 'kill_bostaff_attack01', 0), + (8520, 34736, 'kill_bostaff_attack02', 0), + (8521, 34737, 'kill_bostaff_attack03', 0), + (8522, 34754, 'kill_result_bloodlust', 0), + (8523, 34755, 'kill_result_haste', 0), + (8524, 34762, 'kill_cast_forced_flasher_tiledfoam3_scroll', 0), + (8525, 34763, 'kill_cast_mage_old', 0), + (8526, 34768, 'kill_result_backdraft', 0), + (8527, 34769, 'kill_result_sanction_of_merit', 0), + (8528, 34770, 'kill_result_toxin_out', 0), + (8529, 34771, 'kill_result_white_radiance', 0), + (8530, 34785, 'kill_result_explosion_fireworks', 0), + (8531, 34786, 'kill_result_explosion_fireworks_ground', 0), + (8532, 34799, 'kill_result_distort_dot', 0), + (8533, 34800, 'kill_result_distort_hit', 0), + (8534, 34804, 'kill_result_bone_cage_1', 0), + (8535, 34805, 'kill_result_fiery_comet_descending', 0), + (8536, 34806, 'kill_result_spiral_smite', 0), + (8537, 34817, 'kill_result_weakness', 0), + (8538, 34833, 'kill_result_bloodlust_2', 0), + (8539, 34834, 'kill_result_colored_radiance', 0), + (8540, 34841, 'kill_result_poison_cloud', 0), + (8541, 34842, 'kill_result_smoke_sphere', 0), + (8542, 34850, 'kill_result_decree_of_faith', 0), + (8543, 34851, 'kill_result_dust_fall', 0), + (8544, 34852, 'kill_result_fascinate', 0), + (8545, 34853, 'kill_result_sparkle_blast', 0), + (8546, 34871, 'kill_aura_mage', 0), + (8547, 34872, 'kill_aura_priest', 0), + (8548, 34879, 'kill_result_statue', 0), + (8549, 34882, 'kill_bow_dodge_backhand', 0), + (8550, 34883, 'kill_bow_dodge_down', 0), + (8551, 34884, 'kill_bow_dodge_forehand', 0), + (8552, 34885, 'kill_bow_dodge_thrust', 0), + (8553, 34888, 'kill_bow_idle', 0), + (8554, 34889, 'kill_bow_ouch_backhand', 0), + (8555, 34890, 'kill_bow_ouch_down', 0), + (8556, 34891, 'kill_bow_ouch_forehand', 0), + (8557, 34892, 'kill_bow_ouch_thrust', 0), + (8558, 34907, 'kill_cast_pfx_glow_galv_ws_l', 0), + (8559, 34908, 'kill_cast_pfx_glow_galv_ws_r', 0), + (8560, 34909, 'kill_result_bubble_ring', 0), + (8561, 34910, 'kill_result_sparkles_out', 0), + (8562, 34913, 'kill_cast_orbiting_rings2', 0), + (8563, 34946, 'kill_cast_fuliginous', 0), + (8564, 34956, 'kill_result_enthralling_fetters_ghostly', 0), + (8565, 34966, 'kill_cast_sparkles_in', 0), + (8566, 34976, 'kill_result_swirly_column', 0), + (8567, 34996, 'kill_result_instant_lifetap', 0), + (8568, 34997, 'kill_result_ot_lifetap', 0), + (8569, 35016, 'kill_result_mouth_in', 0), + (8570, 35017, 'kill_result_sparkle_scan_up', 0), + (8571, 35018, 'kill_result_spiral_up', 0), + (8572, 35026, 'kill_cast_bard', 0), + (8573, 35027, 'kill_cast_crusader', 0), + (8574, 35028, 'kill_cast_dirge', 0), + (8575, 35029, 'kill_cast_paladin', 0), + (8576, 35031, 'kill_cast_shadowknight', 0), + (8577, 35032, 'kill_cast_troubador', 0), + (8578, 35038, 'kill_cast_sawdust', 0), + (8579, 35275, 'kill_result_lightning_shimmer', 0), + (8580, 35293, 'kill_persist_pet_air_fragment', 0), + (8581, 35294, 'kill_persist_pet_chaos_fragment', 0), + (8582, 35295, 'kill_persist_pet_earth_fragment', 0), + (8583, 35296, 'kill_persist_pet_fire_fragment', 0), + (8584, 35297, 'kill_persist_pet_fire_servant', 0), + (8585, 35298, 'kill_persist_pet_ice_servant', 0), + (8586, 35299, 'kill_persist_pet_lightning_servant', 0), + (8587, 35300, 'kill_persist_pet_water_fragment', 0), + (8588, 35304, 'kill_cast_distort_p3', 0), + (8589, 35306, 'kill_cast_explosion_p5', 0), + (8590, 35312, 'kill_result_flash_weapon_red', 0), + (8591, 35313, 'kill_result_shield', 0), + (8592, 35326, 'kill_cast_angry_burst', 0), + (8593, 35327, 'kill_cast_cold_dragon_breath', 0), + (8594, 35328, 'kill_cast_distortion_hit_minimal', 0), + (8595, 35329, 'kill_cast_glow_distort', 0), + (8596, 35331, 'kill_cast_void_dragon_breath', 0), + (8597, 35332, 'kill_result_sparks_360_p5', 0), + (8598, 35333, 'kill_result_void_whirlwind', 0), + (8599, 35356, 'kill_cast_distort_rightfoot_ws', 0), + (8600, 35357, 'kill_cast_dragon_pbae_cold', 0), + (8601, 35358, 'kill_cast_dragon_pbae_heat', 0), + (8602, 35359, 'kill_cast_dragon_pbae_mental', 0), + (8603, 35360, 'kill_cast_dragon_pbae_poison', 0), + (8604, 35361, 'kill_cast_dragon_pbae_void', 0), + (8605, 35362, 'kill_cast_dragon_tae_mental', 0), + (8606, 35363, 'kill_cast_fire_foot', 0), + (8607, 35365, 'kill_cast_spark_sphere_ws_p5', 0), + (8608, 35367, 'kill_result_circle_blast_p5', 0), + (8609, 35368, 'kill_result_cold_ice_crystals_rightfoot', 0), + (8610, 35369, 'kill_result_flash_weapon_red_min', 0), + (8611, 35370, 'kill_result_golden_glow', 0), + (8612, 35371, 'kill_result_ice_blast_rightfoot', 0), + (8613, 35372, 'kill_result_silver_glow', 0), + (8614, 35391, 'kill_cast_dark_forced_shader', 0), + (8615, 35392, 'kill_cast_expand_ring_ws', 0), + (8616, 35394, 'kill_cast_stun_stars', 0), + (8617, 35395, 'kill_cast_taunt', 0), + (8618, 35404, 'kill_cast_dragon_pbae_lightning', 0), + (8619, 35405, 'kill_cast_dragon_tae_lightning', 0), + (8620, 35410, 'kill_result_dust_black', 0), + (8621, 35411, 'kill_result_spark_burst_p3', 0), + (8622, 35412, 'kill_result_sparkle_trail_fire_shin', 0), + (8623, 35413, 'kill_result_sparkle_trail_ice_shin', 0), + (8624, 35415, 'kill_trails_lightning_rightshin', 0), + (8625, 35420, 'kill_cast_fire_weapon', 0), + (8626, 35424, 'kill_result_sparkle_trail_fire_weapon', 0), + (8627, 35427, 'kill_result_trail_lightning_red', 0), + (8628, 35436, 'kill_2h_sword_defensive_buff', 0), + (8629, 35438, 'kill_2h_sword_kick', 0), + (8630, 35442, 'kill_2h_sword_whirling_attack', 0), + (8631, 35443, 'kill_2h_sword_wild_swing', 0), + (8632, 35452, 'kill_cast_elec_feet', 0), + (8633, 35454, 'kill_cast_soothe_burst', 0), + (8634, 35455, 'kill_cast_spark_sphere_ws_red_p5', 0), + (8635, 35456, 'kill_cast_sparkle_trail_fire_head', 0), + (8636, 35470, 'kill_pike_kick', 0), + (8637, 35474, 'kill_pike_whirling_attack', 0), + (8638, 35475, 'kill_result_flash_weapon_sat_blue', 0), + (8639, 35476, 'kill_result_flash_weapon_sat_red', 0), + (8640, 35477, 'kill_result_ice_blast_weapon', 0), + (8641, 35478, 'kill_result_spark_burst_p3_gold', 0), + (8642, 35479, 'kill_result_spark_burst_p3_red', 0), + (8643, 35480, 'kill_result_spark_burst_rightfoot', 0), + (8644, 35482, 'kill_result_sparkle_trail_fire_leftshin', 0), + (8645, 35484, 'kill_result_sparkle_trail_ice_lefthand', 0), + (8646, 35485, 'kill_result_sparkle_trail_ice_leftshin', 0), + (8647, 35486, 'kill_result_sparkle_trail_ice_weapon', 0), + (8648, 35487, 'kill_result_sparkle_trail_weapon_right_glow_blue', 0), + (8649, 35488, 'kill_result_sparkle_trail_weapon_right_glow_gold', 0), + (8650, 35489, 'kill_result_sparkle_trail_weapon_right_glow_red', 0), + (8651, 35490, 'kill_result_sparks_360_blue_p5', 0), + (8652, 35491, 'kill_result_white_radiance_weapon', 0), + (8653, 35492, 'kill_result_wind_smoke_head', 0), + (8654, 35521, 'kill_cast_spark_cage', 0), + (8655, 35522, 'kill_cast_spark_shield', 0), + (8656, 35523, 'kill_cast_sparkle_trail_fire_lefthand', 0), + (8657, 35524, 'kill_cast_sparkle_trail_fire_righthand', 0), + (8658, 35525, 'kill_cast_sparkle_trail_fire_righttolefthand', 0), + (8659, 35526, 'kill_cast_statue', 0), + (8660, 35527, 'kill_cast_super_buff', 0), + (8661, 35535, 'kill_persist_divine', 0), + (8662, 35536, 'kill_persist_eidolon', 0), + (8663, 35537, 'kill_persist_energy', 0), + (8664, 35538, 'kill_persist_fire', 0), + (8665, 35539, 'kill_persist_ice', 0), + (8666, 35540, 'kill_persist_mental', 0), + (8667, 35541, 'kill_persist_mesmerize', 0), + (8668, 35542, 'kill_persist_poison', 0), + (8669, 35543, 'kill_persist_stunned', 0), + (8670, 35544, 'kill_result_spark_burst_head', 0), + (8671, 35545, 'kill_result_weapon_trail_fire', 0), + (8672, 35546, 'kill_result_wind_smoke_p3', 0), + (8673, 35550, 'kill_cast_instrument_drum', 0), + (8674, 35551, 'kill_cast_instrument_stringed', 0), + (8675, 35553, 'kill_cast_tune_guitar', 0), + (8676, 35558, 'kill_persist_damage', 0), + (8677, 35559, 'kill_persist_stone', 0), + (8678, 35560, 'kill_result_heal_heart_blue', 0), + (8679, 35561, 'kill_result_motion_lines', 0), + (8680, 35562, 'kill_result_note_circle', 0), + (8681, 35565, 'kill_cast_debuff', 0), + (8682, 35567, 'kill_cast_stun_stars_sub', 0), + (8683, 35568, 'kill_pike_wild_swing', 0), + (8684, 35569, 'kill_result_motion_lines_flasher', 0), + (8685, 35570, 'kill_result_motion_lines_sub', 0), + (8686, 35571, 'kill_result_spark_burst_p3_blue', 0), + (8687, 35576, 'kill_forestry_success', 0), + (8688, 35577, 'kill_gathering_search', 0), + (8689, 35578, 'kill_gathering_success', 0), + (8690, 35579, 'kill_mining_digging', 0), + (8691, 35580, 'kill_mining_success', 0), + (8692, 35581, 'kill_result_bard_zap', 0), + (8693, 35582, 'kill_result_motion_circles', 0), + (8694, 35583, 'kill_result_note_blast', 0), + (8695, 35605, 'kill_result_ghost_spider', 0), + (8696, 35620, 'kill_cast_anim_mesh_dragon_ps', 0), + (8697, 35639, 'kill_cast_druid_ws', 0), + (8698, 35640, 'kill_cast_frosty_hand_l', 0), + (8699, 35641, 'kill_cast_frosty_hand_r', 0), + (8700, 35668, 'kill_cast_tune_drum', 0), + (8701, 35692, 'kill_cast_priest_ws', 0), + (8702, 35693, 'kill_cast_trail_rightfoot_gold', 0), + (8703, 35694, 'kill_levelup_50', 0), + (8704, 35695, 'kill_levelup_hallmark', 0), + (8705, 35696, 'kill_result_sparkle_scan_down', 0), + (8706, 35698, 'kill_result_trail_lightning_gold', 0), + (8707, 35701, 'kill_1h_thrown_attack', 0), + (8708, 35703, 'kill_1h_thrown_dodge_backhand', 0), + (8709, 35704, 'kill_1h_thrown_dodge_down', 0), + (8710, 35705, 'kill_1h_thrown_dodge_forehand', 0), + (8711, 35706, 'kill_1h_thrown_dodge_thrust', 0), + (8712, 35707, 'kill_1h_thrown_idle', 0), + (8713, 35708, 'kill_1h_thrown_ouch_backhand', 0), + (8714, 35709, 'kill_1h_thrown_ouch_down', 0), + (8715, 35710, 'kill_1h_thrown_ouch_forehand', 0), + (8716, 35711, 'kill_1h_thrown_ouch_thrust', 0), + (8717, 35721, 'kill_bostaff_kick', 0), + (8718, 35728, 'kill_bostaff_whirling_attack', 0), + (8719, 35729, 'kill_bostaff_wild_swing', 0), + (8720, 35734, 'kill_cast_spark_burst_weaponrootright', 0), + (8721, 35751, 'kill_converse_male04', 0), + (8722, 35759, 'kill_converse_male12', 0), + (8723, 35763, 'kill_dual_wield_kick', 0), + (8724, 35770, 'kill_dual_wield_whirling_attack', 0), + (8725, 35771, 'kill_dual_wield_wild_swing', 0), + (8726, 35789, 'kill_monk_wild_swing', 0), + (8727, 35797, 'kill_pugilist_kick', 0), + (8728, 35804, 'kill_pugilist_whirling_attack', 0), + (8729, 35805, 'kill_pugilist_wild_swing', 0), + (8730, 35806, 'kill_result_spark_burst_p1', 0), + (8731, 35880, 'kill_cast_sparkle_trail_fire_lhand_neg', 0), + (8732, 35881, 'kill_cast_sparkle_trail_fire_rhand_neg', 0), + (8733, 35886, 'kill_persist_debuff', 0), + (8734, 35887, 'kill_result_fire_negative', 0), + (8735, 35888, 'kill_result_fire_objects', 0), + (8736, 35910, 'kill_result_embers_p2p', 0), + (8737, 35911, 'kill_result_fraxflame_p2p', 0), + (8738, 35912, 'kill_result_prism_hex_p2p', 0), + (8739, 35949, 'kill_result_glow_weapon_red', 0), + (8740, 35951, 'kill_trails_fire_rightshin', 0), + (8741, 35960, 'kill_cast_darkness_skull_buff_summoned', 0), + (8742, 35962, 'kill_persist_distortion_hit_minimal', 0), + (8743, 35963, 'kill_result_color_rain_damage', 0), + (8744, 35964, 'kill_result_darkness_skull_buff', 0), + (8745, 35965, 'kill_result_noxious_oozing_shield_buff', 0), + (8746, 35966, 'kill_result_swirly_column_evil', 0), + (8747, 35970, 'kill_result_icicle_rain_damage', 0), + (8748, 35971, 'kill_result_rain_damage', 0), + (8749, 35978, 'kill_cast_vines_root_control_circling', 0), + (8750, 35992, 'kill_persist_electrified', 0), + (8751, 35993, 'kill_result_bloodlust_3', 0), + (8752, 35994, 'kill_result_nature_res', 0), + (8753, 35995, 'kill_result_poison_rain_damage', 0), + (8754, 35996, 'kill_result_skull_breath_poison_damage', 0), + (8755, 35997, 'kill_result_spirit_res', 0), + (8756, 35998, 'kill_result_sword_rain_damage', 0), + (8757, 35999, 'kill_result_vines_root_control', 0), + (8758, 36004, 'kill_cast_super_lightning', 0), + (8759, 36005, 'kill_result_petrify_stun_control', 0), + (8760, 36006, 'kill_result_shadow_summon', 0), + (8761, 36011, 'kill_result_agility', 0), + (8762, 36012, 'kill_result_air_elemental_summon', 0), + (8763, 36013, 'kill_result_arch_heal', 0), + (8764, 36014, 'kill_result_electrified', 0), + (8765, 36015, 'kill_result_lifetap', 0), + (8766, 36016, 'kill_result_vitae_buff_heal', 0), + (8767, 36022, 'kill_cast_darkness_whip_circling', 0), + (8768, 36024, 'kill_cast_spark_cage_neg', 0), + (8769, 36025, 'kill_cast_spark_shield2', 0), + (8770, 36026, 'kill_cast_spark_shield_neg', 0), + (8771, 36027, 'kill_result_ice_blast_weapon_center', 0), + (8772, 36028, 'kill_result_water_elemental_summon', 0), + (8773, 36103, 'kill_cast_mandala_sub', 0), + (8774, 36105, 'kill_cast_p2p_lightning_01', 0), + (8775, 36106, 'kill_cast_p2p_lightning_02', 0), + (8776, 36108, 'kill_result_arcane_fury', 0), + (8777, 36109, 'kill_result_archaic_shackles', 0), + (8778, 36110, 'kill_result_archaic_shackles_b', 0), + (8779, 36111, 'kill_result_ice_slam', 0), + (8780, 36112, 'kill_result_skull_blast', 0), + (8781, 36113, 'kill_result_skull_buff_limbs', 0), + (8782, 36114, 'kill_result_storm_of_ancients', 0), + (8783, 36115, 'kill_result_stun_sub', 0), + (8784, 36116, 'kill_result_tricksters_grasp', 0), + (8785, 36119, 'kill_cast_p2p_fire_01', 0), + (8786, 36120, 'kill_cast_p2p_fire_02', 0), + (8787, 36122, 'kill_result_ethereal_p2p', 0), + (8788, 36126, 'kill_cast_gold_sparkletrace_l', 0), + (8789, 36127, 'kill_cast_gold_sparkletrace_r', 0), + (8790, 36128, 'kill_cast_gold_trace_l', 0), + (8791, 36129, 'kill_cast_gold_trace_r', 0), + (8792, 36131, 'kill_cast_rune_ring_rotate_persist', 0), + (8793, 36132, 'kill_cast_trace_firespikes_l', 0), + (8794, 36133, 'kill_cast_trace_firespikes_r', 0), + (8795, 36134, 'kill_cast_trace_wine_l', 0), + (8796, 36135, 'kill_cast_trace_wine_r', 0), + (8797, 36144, 'kill_cast_rainbow_rays_cloud', 0), + (8798, 36145, 'kill_cast_spark_sphere_blend', 0), + (8799, 36147, 'kill_result_crystal_ring', 0), + (8800, 36148, 'kill_result_dispell1_out_blend', 0), + (8801, 36149, 'kill_result_helmet_silver_floating', 0), + (8802, 36160, 'kill_result_ho_sphere', 0), + (8803, 36161, 'kill_result_shield_silver_floating', 0), + (8804, 36165, 'kill_ignite_weapon_big', 0), + (8805, 36166, 'kill_ignite_weapon_small', 0), + (8806, 36172, 'kill_result_dragon_flight_fetters', 0), + (8807, 36173, 'kill_result_drakota_fetters', 0), + (8808, 36174, 'kill_result_drakota_flight_fetters', 0), + (8809, 36189, 'kill_ignite_weapon_prism', 0), + (8810, 36190, 'kill_result_ancient_crucible', 0), + (8811, 36191, 'kill_result_natures_growth', 0), + (8812, 36195, 'kill_result_dripping_rain', 0), + (8813, 36196, 'kill_result_rock_chunks_dropping', 0), + (8814, 36200, 'kill_result_arcane_chalice', 0), + (8815, 36201, 'kill_result_blessing_of_faith', 0), + (8816, 36202, 'kill_result_stag_running', 0), + (8817, 36205, 'kill_cast_columns_slow', 0), + (8818, 36207, 'kill_result_cat_running', 0), + (8819, 36208, 'kill_result_chalice_of_life', 0), + (8820, 36209, 'kill_result_creature_fire_ls', 0), + (8821, 36210, 'kill_result_runes_gathering', 0), + (8822, 36211, 'kill_result_sparkle_fill', 0), + (8823, 36212, 'kill_result_weapon_trail_prism', 0), + (8824, 36216, 'kill_cast_sparkle2', 0), + (8825, 36217, 'kill_result_breaking_faith', 0), + (8826, 36218, 'kill_result_runes_falling', 0), + (8827, 36219, 'kill_result_sparkles_gathering', 0), + (8828, 36228, 'kill_cast_glow_distort2', 0), + (8829, 36232, 'kill_result_blue_whirlwind', 0), + (8830, 36233, 'kill_result_stag_running2', 0), + (8831, 36234, 'kill_result_turtle_walking', 0), + (8832, 36341, 'kill_result_breakable_wall', 0), + (8833, 36373, 'kill_result_lucks_bite', 0), + (8834, 36398, 'kill_result_bat_swarm_appear', 0), + (8835, 36399, 'kill_result_bat_swarm_attack', 0), + (8836, 36400, 'kill_result_forced_shader_electric', 0), + (8837, 36408, 'kill_result_bat_swarm_p2p', 0), + (8838, 36439, 'kill_result_rainbow_blast_p2p', 0), + (8839, 36440, 'kill_result_vampire_lifetap_p2p', 0), + (8840, 36447, 'kill_result_fire_blue_white', 0), + (8841, 36448, 'kill_result_vampire_daggers_p2p', 0), + (8842, 36449, 'kill_result_vampire_ice_daggers_p2p', 0), + (8843, 36450, 'kill_result_vampire_lifetap_heart_p2p', 0), + (8844, 36451, 'kill_result_vampire_snow_throw', 0), + (8845, 36461, 'kill_cast_instrument_flute', 0), + (8846, 36473, 'kill_persist_power_gathering', 0), + (8847, 36474, 'kill_result_bat_swarm_persist', 0), + (8848, 36475, 'kill_result_brain_leech_p2p', 0), + (8849, 36476, 'kill_result_power_fount', 0), + (8850, 36495, 'kill_result_lioness_running', 0), + (8851, 36496, 'kill_result_mana_cloak', 0), + (8852, 36497, 'kill_result_scorpion_attacking', 0), + (8853, 36498, 'kill_result_skeleton_dancing', 0), + (8854, 36502, 'kill_cast_tune_song', 0), + (8855, 36509, 'kill_result_bat_flying', 0), + (8856, 36510, 'kill_result_stance_of_the_bat', 0), + (8857, 36517, 'kill_persist_sparkles_clinging_soft_blue', 0), + (8858, 36518, 'kill_persist_sparkles_clinging_soft_gold', 0), + (8859, 36519, 'kill_persist_sparkles_clinging_soft_green', 0), + (8860, 36520, 'kill_persist_sparkles_clinging_soft_purple', 0), + (8861, 36521, 'kill_persist_sparkles_clinging_soft_red', 0), + (8862, 36522, 'kill_result_skeleton_bowing', 0), + (8863, 36523, 'kill_result_unerring_shot', 0), + (8864, 36524, 'kill_result_unerring_shot_flaming', 0), + (8865, 36525, 'kill_result_unyielding_will', 0), + (8866, 36534, 'kill_result_smoke_p2p', 0), + (8867, 36545, 'kill_cast_piercing_note', 0), + (8868, 36547, 'kill_cast_tune_flute', 0), + (8869, 36553, 'kill_persist_notes_gathering', 0), + (8870, 36554, 'kill_persist_notes_spiral_off', 0), + (8871, 36555, 'kill_result_note_swarm', 0), + (8872, 36556, 'kill_result_notes_gathering', 0), + (8873, 36557, 'kill_result_notes_spiral_off', 0), + (8874, 36558, 'kill_result_rings_rising', 0), + (8875, 36575, 'kill_result_devastation_fist_1', 0), + (8876, 36576, 'kill_result_devastation_fist_2', 0), + (8877, 36577, 'kill_result_devastation_fist_3', 0), + (8878, 36588, 'kill_persist_fear', 0), + (8879, 36589, 'kill_persist_notes_spiral_off_blue', 0), + (8880, 36590, 'kill_persist_notes_spiral_off_green', 0), + (8881, 36591, 'kill_persist_notes_spiral_off_red', 0), + (8882, 36594, 'kill_result_corruptive_symbol_p2p', 0), + (8883, 36595, 'kill_result_skeleton_attacking', 0), + (8884, 36613, 'kill_cast_tune_multichain', 0), + (8885, 36617, 'kill_result_fire_dark', 0), + (8886, 36618, 'kill_result_sparkles_explode', 0), + (8887, 36619, 'kill_result_vampire_rainbow_circle_throw', 0), + (8888, 36620, 'kill_result_vampire_whip_dark', 0), + (8889, 36627, 'kill_result_notes_spiral_chains', 0), + (8890, 36628, 'kill_result_rings_rising_noshrink', 0), + (8891, 36629, 'kill_result_umbral_trap', 0), + (8892, 36632, 'kill_cast_notes_out_song', 0), + (8893, 36637, 'kill_result_kirby_energy_p2p', 0), + (8894, 36638, 'kill_result_notes_tube_wavey', 0), + (8895, 36678, 'kill_result_mist_clingy', 0), + (8896, 36706, 'kill_design_result_lightning_bolt1', 0), + (8897, 36717, 'kill_cast_spark_cage_aoe', 0), + (8898, 36718, 'kill_cast_spark_cage_neg_aoe', 0), + (8899, 36768, 'kill_design_result_bat_swarm_attack', 0), + (8900, 36769, 'kill_design_result_tremor', 0), + (8901, 36776, 'kill_design_artifact_ap1_breath', 0), + (8902, 36777, 'kill_design_cast_inquisitor', 0), + (8903, 36778, 'kill_design_cast_vision_nek', 0), + (8904, 36779, 'kill_design_result_dispell1_out', 0), + (8905, 36780, 'kill_design_result_zombie_summon', 0), + (8906, 36798, 'kill_result_bloodlust_aoe', 0), + (8907, 36799, 'kill_result_clay_shields_aoe', 0), + (8908, 36800, 'kill_result_poison_cloud_aoe', 0), + (8909, 36833, 'kill_result_toxin_out_aoe', 0), + (8910, 36841, 'kill_result_shockwave_sparkles_aoe', 0), + (8911, 36860, 'kill_climbing_strafe_right', 0), + (8912, 36861, 'kill_climbing_walk', 0), + (8913, 36891, 'kill_cast_angry_burst_aoe', 0), + (8914, 36892, 'kill_cast_debuff_aoe', 0), + (8915, 36897, 'kill_result_fire_engulf_aoe', 0), + (8916, 36898, 'kill_result_flash_aoe', 0), + (8917, 36899, 'kill_result_motion_lines_flasher_aoe', 0), + (8918, 36900, 'kill_result_motion_lines_sub_aoe', 0), + (8919, 36908, 'kill_result_coins_falling', 0), + (8920, 36909, 'kill_result_forced_shader_rock', 0), + (8921, 36910, 'kill_result_terra_armor', 0), + (8922, 36918, 'kill_result_coalescing_vapor', 0), + (8923, 36929, 'kill_result_bone_blast', 0), + (8924, 36930, 'kill_result_bone_glow', 0), + (8925, 36931, 'kill_result_coalescing_notes', 0), + (8926, 36932, 'kill_result_dust_blast', 0), + (8927, 36940, 'kill_result_ice_blast_from_mesh', 0), + (8928, 36962, 'kill_result_rock_toss_p2p', 0), + (8929, 36963, 'kill_result_rocks_flying_from_mesh', 0), + (8930, 36971, 'kill_result_ring_of_blades', 0), + (8931, 36972, 'kill_result_ring_of_blades_scimitars', 0), + (8932, 36973, 'kill_result_ring_of_blades_swords', 0), + (8933, 37109, 'kill_result_devastation_fist_3a', 0), + (8934, 37125, 'kill_result_skeleton_hand', 0), + (8935, 37136, 'kill_cast_pfx_orbiting_rings_l', 0), + (8936, 37137, 'kill_cast_pfx_orbiting_rings_r', 0), + (8937, 37217, 'kill_cast_ring_expanding', 0), + (8938, 37261, 'kill_cast_call_of_power', 0), + (8939, 37263, 'kill_climbing_backup', 0), + (8940, 37264, 'kill_climbing_idle', 0), + (8941, 37265, 'kill_climbing_strafe_left', 0), + (8942, 37274, 'kill_monk_attack03', 0), + (8943, 37286, 'kill_result_call_of_power', 0), + (8944, 37287, 'kill_result_firespitter', 0), + (8945, 37288, 'kill_result_pet_victory', 0), + (8946, 37313, 'kill_result_morph_to_pet', 0), + (8947, 37314, 'kill_result_sparkles_radiating', 0), + (8948, 37324, 'kill_result_searing_sun', 0), + (8949, 37325, 'kill_result_smoking_mesh', 0), + (8950, 37329, 'kill_cast_bone_blast_1', 0), + (8951, 37330, 'kill_cast_bone_blast_2', 0), + (8952, 37331, 'kill_cast_bone_blast_3', 0), + (8953, 37332, 'kill_cast_morph_to_dragon', 0), + (8954, 37337, 'kill_result_cyclone_fire', 0), + (8955, 37338, 'kill_result_cyclone_snow', 0), + (8956, 37339, 'kill_result_morph_to_dragon', 0), + (8957, 37348, 'kill_result_cyclone_rocks', 0), + (8958, 37349, 'kill_result_cyclone_sand', 0), + (8959, 37350, 'kill_result_gnoll_buff', 0), + (8960, 37367, 'kill_dual_wield_attack03', 0), + (8961, 37369, 'kill_result_word_of_doom', 0), + (8962, 37370, 'kill_result_word_of_flame', 0), + (8963, 37371, 'kill_result_word_of_obedience', 0), + (8964, 37372, 'kill_result_word_of_silence', 0), + (8965, 37376, 'kill_2h_sword_ouch_thrust', 0), + (8966, 37393, 'kill_result_froglok_buff', 0), + (8967, 37394, 'kill_result_stone_hand_terraporter', 0), + (8968, 37438, 'kill_result_candlelight_vigil', 0), + (8969, 37470, 'kill_result_rock_shock_wave', 0), + (8970, 37486, 'kill_result_fire_blast', 0), + (8971, 37487, 'kill_result_rock_shock_wave_lava', 0), + (8972, 37488, 'kill_result_tears_of_druzil', 0), + (8973, 37498, 'kill_climbing_exit_up_root', 0), + (8974, 37503, 'kill_result_rock_shock_wave_ice', 0), + (8975, 37504, 'kill_result_snowflakes_radiating', 0), + (8976, 37510, 'kill_cast_bright_ring_blue', 0), + (8977, 37511, 'kill_cast_bright_ring_red', 0), + (8978, 37551, 'kill_cast_morph_to_elf', 0), + (8979, 37556, 'kill_result_morph_to_elf', 0), + (8980, 37566, 'kill_climbing_enter_down_root', 0), + (8981, 37578, 'kill_result_scintillating_tapestry', 0), + (8982, 37593, 'kill_design_cast_vision_living_tombs', 0), + (8983, 37618, 'kill_result_runes_blast', 0), + (8984, 37636, 'kill_carry_blue_flag', 0), + (8985, 37637, 'kill_carry_red_flag', 0), + (8986, 37679, 'kill_result_coalescing_sparkles', 0), + (8987, 37680, 'kill_result_coalescing_vapor_sub', 0), + (8988, 37681, 'kill_result_serpents_intent', 0), + (8989, 37682, 'kill_result_singing_sword', 0), + (8990, 37691, 'kill_result_desert_call_p2p', 0), + (8991, 37692, 'kill_result_flash_flood_wave_cross_line', 0), + (8992, 37693, 'kill_result_flash_flood_wave_spray', 0), + (8993, 37694, 'kill_result_flash_flood_wave_tube', 0), + (8994, 37763, 'kill_design_cast_vision_ap2', 0), + (8995, 37765, 'kill_result_protection_of_faith_p2p', 0), + (8996, 37766, 'kill_result_protection_of_faith_tapestry', 0), + (8997, 37788, 'kill_result_anim_mesh_genie_ps', 0), + (8998, 37837, 'kill_result_fungusman_breath_attack_p2p', 0), + (8999, 37838, 'kill_result_mushrooms_growing', 0), + (9000, 37903, 'kill_result_shadow_summon_2', 0), + (9001, 37917, 'kill_result_shadow_summon_2_aoe', 0), + (9002, 38120, 'kill_debris_flying', 0), + (9003, 38121, 'kill_debris_swimming', 0), + (9004, 38281, 'kill_result_arena_water_whirlpool', 0), + (9005, 38282, 'kill_result_arena_water_whirlpool_aoe', 0), + (9006, 38333, 'kill_horse_backup', 0), + (9007, 38334, 'kill_horse_turn_left', 0), + (9008, 38335, 'kill_horse_turn_right', 0), + (9009, 38339, 'kill_result_arena_stone_gaze', 0), + (9010, 38340, 'kill_result_arena_water_rain', 0), + (9011, 38341, 'kill_result_fogger', 0), + (9012, 38371, 'kill_result_arena_water_rain_bubbles', 0), + (9013, 38372, 'kill_result_terrorantula_attack', 0), + (9014, 38373, 'kill_result_terrorantula_attack_cocoon', 0), + (9015, 38408, 'kill_result_arena_stone_gaze_flash', 0), + (9016, 38739, 'kill_result_arena_voidbeast_attack', 0), + (9017, 38740, 'kill_result_arena_voidbeast_smoke', 0), + (9018, 38741, 'kill_result_arena_voidbeast_smoke_threads', 0), + (9019, 38751, 'kill_result_ghost_fadeout', 0), + (9020, 38780, 'kill_result_spirit_of_the_elephant', 0), + (9021, 38805, 'kill_cast_trace_prism_left', 0), + (9022, 38806, 'kill_cast_trace_prism_right', 0), + (9023, 38812, 'kill_result_prisms_hex_clinging', 0), + (9024, 38813, 'kill_result_prisms_sparkle_soul', 0), + (9025, 38814, 'kill_result_prisms_sphere', 0), + (9026, 38836, 'kill_result_ice_dagger_breath_p2p', 0), + (9027, 38858, 'kill_result_cone_lightning_p2p', 0), + (9028, 38859, 'kill_result_dragon_cone_roar', 0), + (9029, 38951, 'kill_design_result_zombie_scare', 0), + (9030, 38953, 'kill_result_zombie_scare', 0), + (9031, 38961, 'kill_result_ghost_forced_shader_4', 0), + (9032, 39037, 'kill_result_bone_glow_2', 0), + (9033, 39038, 'kill_result_fireworks_burst', 0), + (9034, 39039, 'kill_result_fireworks_ring', 0), + (9035, 39097, 'kill_result_lion_paw_trails', 0), + (9036, 39098, 'kill_result_prism_tube_trail_1', 0), + (9037, 39099, 'kill_result_prism_tube_trail_2', 0), + (9038, 39100, 'kill_result_sparkle_soul', 0), + (9039, 39178, 'kill_result_pestilence', 0), + (9040, 39203, 'kill_result_dragonbreath', 0), + (9041, 39221, 'kill_cast_dragonbreath', 0), + (9042, 39226, 'kill_persist_dragonbreath', 0), + (9043, 39227, 'kill_result_hypnosis', 0), + (9044, 39238, 'kill_cast_celtic_circle', 0), + (9045, 39241, 'kill_cast_hypnosis', 0), + (9046, 39265, 'kill_persist_juggernaut', 0), + (9047, 39266, 'kill_result_juggernaut', 0), + (9048, 39291, 'kill_result_firestrips', 0), + (9049, 39312, 'kill_result_castigate', 0), + (9050, 39373, 'kill_cast_jesters_gamble', 0), + (9051, 39442, 'kill_status_quest_completes', 0), + (9052, 39443, 'kill_status_quest_gives', 0), + (9053, 39444, 'kill_status_quest_updates', 0), + (9054, 39469, 'kill_result_crazy_tube', 0), + (9055, 39470, 'kill_result_crazy_tube_iron', 0), + (9056, 39520, 'kill_cast_call_of_storms', 0), + (9057, 39525, 'kill_result_call_of_storms', 0), + (9058, 39534, 'kill_cast_mysticism', 0), + (9059, 39539, 'kill_result_mysticism', 0), + (9060, 39544, 'kill_cast_fusion', 0), + (9061, 39554, 'kill_cast_crescent_hands_l', 0), + (9062, 39555, 'kill_cast_crescent_hands_r', 0), + (9063, 39569, 'kill_result_rift', 0), + (9064, 39570, 'kill_result_verdict', 0), + (9065, 39571, 'kill_result_verdict_explosion', 0), + (9066, 39612, 'kill_cast_plane_shift', 0), + (9067, 39617, 'kill_result_plane_shift', 0), + (9068, 39618, 'kill_result_vortex_p2p', 0), + (9069, 39630, 'kill_cast_undead_tide', 0), + (9070, 39634, 'kill_result_bonfire', 0), + (9071, 39635, 'kill_result_steam', 0), + (9072, 39648, 'kill_result_cone_lightning_wave_p2p', 0), + (9073, 39649, 'kill_result_ice_dagger_breath_small_p2p', 0), + (9074, 39658, 'kill_result_rock_breath_p2p', 0), + (9075, 39659, 'kill_result_rocks_sticky', 0), + (9076, 39735, 'kill_result_aa_shaman_ghost_wolf', 0), + (9077, 39743, 'kill_cast_pickpocket', 0), + (9078, 39748, 'kill_result_mana_channeling', 0), + (9079, 39769, 'kill_levelup_achievement', 0), + (9080, 39779, 'kill_result_pickpocket', 0), + (9081, 39827, 'kill_result_snoring_zzz', 0), + (9082, 39832, 'kill_cast_vyemm_slam', 0), + (9083, 39840, 'kill_result_steam_blast', 0), + (9084, 39872, 'kill_result_poison_cysts', 0), + (9085, 40210, 'kill_result_aa_pyramid', 0), + (9086, 40450, 'kill_result_webby_canister', 0), + (9087, 40515, 'kill_result_ghost_undo', 0), + (9088, 40583, 'kill_cast_trace_sparkcrescent_l', 0), + (9089, 40584, 'kill_cast_trace_sparkcrescent_r', 0), + (9090, 40589, 'kill_design_keg_filling_mug', 0), + (9091, 40734, 'kill_result_charge_fast', 0), + (9092, 40735, 'kill_result_smoke_small_p5', 0), + (9093, 40947, 'kill_result_fire_purple', 0), + (9094, 41250, 'kill_cast_dryad_teleport', 0), + (9095, 41257, 'kill_result_dryad_teleport', 0), + (9096, 41270, 'kill_cast_dryad_attack_aoe', 0), + (9097, 41277, 'kill_result_dryad_attack_aoe', 0), + (9098, 41304, 'kill_cast_rain_of_thistles', 0), + (9099, 41310, 'kill_result_rain_of_thistles', 0), + (9100, 41553, 'kill_result_chrome_forced_shader', 0), + (9101, 41759, 'kill_result_copter_welder_lightning_p2p', 0), + (9102, 41846, 'kill_run_03', 0), + (9103, 41847, 'kill_run_down_idle', 0), + (9104, 41848, 'kill_run_up_idle', 0), + (9105, 41850, 'kill_sway_l', 0), + (9106, 41851, 'kill_sway_r', 0), + (9107, 42000, 'kill_result_soulless', 0), + (9108, 42211, 'kill_result_soap_mouth', 0), + (9109, 42284, 'kill_cast_vision_plane_druid_ring', 0), + (9110, 42294, 'kill_cast_wizard_spires', 0), + (9111, 42355, 'kill_result_choking_vines_aoe', 0), + (9112, 42376, 'kill_result_wuoshi_tree_morph', 0), + (9113, 42422, 'kill_result_lightning_bolt_sub1', 0), + (9114, 42423, 'kill_result_lightning_bolt_sub2', 0), + (9115, 42444, 'kill_female_dead', 0), + (9116, 42445, 'kill_female_dead_enter', 0), + (9117, 42501, 'kill_aura_red', 0), + (9118, 42507, 'kill_female_run', 0), + (9119, 42522, 'kill_cast_blanket_of_eternal_night', 0), + (9120, 42523, 'kill_cast_mayongs_touch', 0), + (9121, 42525, 'kill_cast_soul_paralysis', 0), + (9122, 42531, 'kill_result_blanket_of_eternal_night', 0), + (9123, 42541, 'kill_cast_gaze_of_obedience', 0), + (9124, 42556, 'kill_froglok_idle', 0), + (9125, 42589, 'kill_cast_laser_p2p', 0), + (9126, 42600, 'kill_result_laser_p2p', 0), + (9127, 42604, 'kill_cast_firebreath_p2p', 0), + (9128, 42612, 'kill_froglok_bow', 0), + (9129, 42613, 'kill_froglok_crouch', 0), + (9130, 42614, 'kill_froglok_curtsey', 0), + (9131, 42615, 'kill_froglok_dead', 0), + (9132, 42616, 'kill_froglok_death', 0), + (9133, 42617, 'kill_froglok_run', 0), + (9134, 42618, 'kill_froglok_sit_enter', 0), + (9135, 42619, 'kill_froglok_sit_exit', 0), + (9136, 42620, 'kill_froglok_sit_idle', 0), + (9137, 42625, 'kill_cast_mana_burn', 0), + (9138, 42649, 'kill_fae_light_idle', 0), + (9139, 42652, 'kill_result_mana_burn', 0), + (9140, 42698, 'kill_result_poison_forced_shader_weapon', 0), + (9141, 42718, 'kill_cast_glass_shattering', 0), + (9142, 42728, 'kill_result_glass_shattering', 0), + (9143, 42739, 'kill_result_brigand_slide', 0), + (9144, 42740, 'kill_result_golden_flash', 0), + (9145, 42753, 'kill_result_dirge_confront_fear', 0), + (9146, 42754, 'kill_result_illusionist_illuminate', 0), + (9147, 42780, 'kill_attack_earthshake', 0), + (9148, 42787, 'kill_fae_light_1h_sword_attack', 0), + (9149, 42788, 'kill_fae_light_1h_sword_attack01', 0), + (9150, 42789, 'kill_fae_light_1h_sword_attack02', 0), + (9151, 42790, 'kill_fae_light_1h_sword_attack03', 0), + (9152, 42791, 'kill_fae_light_1h_sword_death_blow', 0), + (9153, 42792, 'kill_fae_light_1h_sword_death_blow01', 0), + (9154, 42793, 'kill_fae_light_1h_sword_dodge_backhand', 0), + (9155, 42794, 'kill_fae_light_1h_sword_dodge_down', 0), + (9156, 42795, 'kill_fae_light_1h_sword_dodge_forehand', 0), + (9157, 42796, 'kill_fae_light_1h_sword_dodge_thrust', 0), + (9158, 42797, 'kill_fae_light_1h_sword_ouch_backhand', 0), + (9159, 42798, 'kill_fae_light_1h_sword_ouch_down', 0), + (9160, 42799, 'kill_fae_light_1h_sword_ouch_forehand', 0), + (9161, 42800, 'kill_fae_light_1h_sword_ouch_thrust', 0), + (9162, 42801, 'kill_fae_light_1h_sword_parry_backhand', 0), + (9163, 42802, 'kill_fae_light_1h_sword_parry_down', 0), + (9164, 42803, 'kill_fae_light_1h_sword_parry_forehand', 0), + (9165, 42804, 'kill_fae_light_1h_sword_parry_thrust', 0), + (9166, 42805, 'kill_fae_light_2h_sword_attack', 0), + (9167, 42806, 'kill_fae_light_2h_sword_attack01', 0), + (9168, 42807, 'kill_fae_light_2h_sword_attack02', 0), + (9169, 42808, 'kill_fae_light_2h_sword_defensive_buff', 0), + (9170, 42809, 'kill_fae_light_2h_sword_dodge_backhand', 0), + (9171, 42810, 'kill_fae_light_2h_sword_dodge_down', 0), + (9172, 42811, 'kill_fae_light_2h_sword_dodge_forehand', 0), + (9173, 42812, 'kill_fae_light_2h_sword_enter', 0), + (9174, 42813, 'kill_fae_light_2h_sword_kick', 0), + (9175, 42814, 'kill_fae_light_2h_sword_ouch_backhand', 0), + (9176, 42815, 'kill_fae_light_2h_sword_ouch_down', 0), + (9177, 42816, 'kill_fae_light_2h_sword_ouch_forehand', 0), + (9178, 42817, 'kill_fae_light_2h_sword_ouch_thrust', 0), + (9179, 42820, 'kill_fae_light_bostaff_attack01', 0), + (9180, 42821, 'kill_fae_light_bostaff_attack02', 0), + (9181, 42822, 'kill_fae_light_bostaff_attack03', 0), + (9182, 42849, 'kill_fae_light_dual_wield_attack', 0), + (9183, 42850, 'kill_fae_light_dual_wield_attack01', 0), + (9184, 42851, 'kill_fae_light_dual_wield_attack02', 0), + (9185, 42852, 'kill_fae_light_dual_wield_attack03', 0), + (9186, 42853, 'kill_fae_light_dual_wield_kick', 0), + (9187, 42854, 'kill_fae_light_dual_wield_whirling_attack', 0), + (9188, 42855, 'kill_fae_light_dual_wield_wild_swing', 0), + (9189, 42856, 'kill_fae_light_monk_attack', 0), + (9190, 42857, 'kill_fae_light_monk_attack01', 0), + (9191, 42858, 'kill_fae_light_monk_attack02', 0), + (9192, 42859, 'kill_fae_light_monk_attack03', 0), + (9193, 42860, 'kill_fae_light_monk_wild_swing', 0), + (9194, 42861, 'kill_fae_light_pike_attack', 0), + (9195, 42862, 'kill_fae_light_pike_attack01', 0), + (9196, 42863, 'kill_fae_light_pike_attack02', 0), + (9197, 42864, 'kill_fae_light_pike_kick', 0), + (9198, 42865, 'kill_fae_light_pike_whirling_attack', 0), + (9199, 42866, 'kill_fae_light_pike_wild_swing', 0), + (9200, 42867, 'kill_fae_light_pugilist_attack', 0), + (9201, 42868, 'kill_fae_light_pugilist_attack02', 0), + (9202, 42869, 'kill_fae_light_pugilist_kick', 0), + (9203, 42870, 'kill_fae_light_pugilist_whirling_attack', 0), + (9204, 42871, 'kill_fae_light_pugilist_wild_swing', 0), + (9205, 42890, 'kill_froglok_1h_sword_attack', 0), + (9206, 42891, 'kill_froglok_1h_sword_idle', 0), + (9207, 42896, 'kill_cast_forced_flasher_stream_scroll', 0), + (9208, 42897, 'kill_cast_forced_flasher_stream_scroll_blend', 0), + (9209, 42905, 'kill_result_berserker_red_eyes', 0), + (9210, 42906, 'kill_result_god_spell_brell_serilis', 0), + (9211, 42907, 'kill_result_god_spell_cazic_thule', 0), + (9212, 42908, 'kill_result_god_spell_innoruuk', 0), + (9213, 42909, 'kill_result_god_spell_mithaniel_marr', 0), + (9214, 42910, 'kill_result_god_spell_quellious', 0), + (9215, 42911, 'kill_result_god_spell_rallos_zek', 0), + (9216, 42912, 'kill_result_god_spell_solusek_ro', 0), + (9217, 42913, 'kill_result_god_spell_tunare', 0), + (9218, 42914, 'kill_result_sun_spell', 0), + (9219, 42925, 'kill_froglok_1h_crush_attack', 0), + (9220, 42926, 'kill_froglok_1h_crush_attack01', 0), + (9221, 42927, 'kill_froglok_1h_crush_attack02', 0), + (9222, 42928, 'kill_froglok_1h_crush_attack03', 0), + (9223, 42929, 'kill_froglok_1h_crush_dodge_backhand', 0), + (9224, 42930, 'kill_froglok_1h_crush_dodge_down', 0), + (9225, 42931, 'kill_froglok_1h_crush_dodge_forehand', 0), + (9226, 42932, 'kill_froglok_1h_crush_dodge_thrust', 0), + (9227, 42933, 'kill_froglok_1h_crush_ouch_backhand', 0), + (9228, 42934, 'kill_froglok_1h_crush_ouch_down', 0), + (9229, 42935, 'kill_froglok_1h_crush_ouch_forehand', 0), + (9230, 42936, 'kill_froglok_1h_crush_ouch_thrust', 0), + (9231, 42937, 'kill_froglok_1h_crush_parry_backhand', 0), + (9232, 42938, 'kill_froglok_1h_crush_parry_down', 0), + (9233, 42939, 'kill_froglok_1h_crush_parry_forehand', 0), + (9234, 42940, 'kill_froglok_1h_crush_parry_thrust', 0), + (9235, 42941, 'kill_froglok_1h_pierce_attack', 0), + (9236, 42942, 'kill_froglok_1h_pierce_attack01', 0), + (9237, 42943, 'kill_froglok_1h_pierce_dodge_backhand', 0), + (9238, 42944, 'kill_froglok_1h_pierce_dodge_down', 0), + (9239, 42945, 'kill_froglok_1h_pierce_dodge_forehand', 0), + (9240, 42946, 'kill_froglok_1h_pierce_dodge_thrust', 0), + (9241, 42947, 'kill_froglok_1h_pierce_ouch_backhand', 0), + (9242, 42948, 'kill_froglok_1h_pierce_ouch_down', 0), + (9243, 42949, 'kill_froglok_1h_pierce_ouch_forehand', 0), + (9244, 42950, 'kill_froglok_1h_pierce_ouch_thrust', 0), + (9245, 42951, 'kill_froglok_1h_pierce_parry_backhand', 0), + (9246, 42952, 'kill_froglok_1h_pierce_parry_down', 0), + (9247, 42953, 'kill_froglok_1h_pierce_parry_forehand', 0), + (9248, 42954, 'kill_froglok_1h_pierce_parry_thrust', 0), + (9249, 42955, 'kill_froglok_1h_sword_attack01', 0), + (9250, 42956, 'kill_froglok_1h_sword_attack02', 0), + (9251, 42957, 'kill_froglok_1h_sword_attack03', 0), + (9252, 42958, 'kill_froglok_1h_sword_death_blow', 0), + (9253, 42959, 'kill_froglok_1h_sword_death_blow01', 0), + (9254, 42960, 'kill_froglok_1h_sword_dodge_backhand', 0), + (9255, 42961, 'kill_froglok_1h_sword_dodge_down', 0), + (9256, 42962, 'kill_froglok_1h_sword_dodge_forehand', 0), + (9257, 42963, 'kill_froglok_1h_sword_dodge_thrust', 0), + (9258, 42964, 'kill_froglok_1h_sword_ouch_backhand', 0), + (9259, 42965, 'kill_froglok_1h_sword_ouch_down', 0), + (9260, 42966, 'kill_froglok_1h_sword_ouch_forehand', 0), + (9261, 42967, 'kill_froglok_1h_sword_ouch_thrust', 0), + (9262, 42968, 'kill_froglok_1h_sword_parry_backhand', 0), + (9263, 42969, 'kill_froglok_1h_sword_parry_down', 0), + (9264, 42970, 'kill_froglok_1h_sword_parry_forehand', 0), + (9265, 42971, 'kill_froglok_1h_sword_parry_thrust', 0), + (9266, 42972, 'kill_froglok_1h_thrown_dodge_backhand', 0), + (9267, 42973, 'kill_froglok_1h_thrown_dodge_down', 0), + (9268, 42974, 'kill_froglok_1h_thrown_dodge_forehand', 0), + (9269, 42975, 'kill_froglok_1h_thrown_dodge_thrust', 0), + (9270, 42976, 'kill_froglok_1h_thrown_ouch_backhand', 0), + (9271, 42977, 'kill_froglok_1h_thrown_ouch_down', 0), + (9272, 42978, 'kill_froglok_1h_thrown_ouch_forehand', 0), + (9273, 42979, 'kill_froglok_1h_thrown_ouch_thrust', 0), + (9274, 42980, 'kill_froglok_bow_dodge_backhand', 0), + (9275, 42981, 'kill_froglok_bow_dodge_down', 0), + (9276, 42982, 'kill_froglok_bow_dodge_forehand', 0), + (9277, 42983, 'kill_froglok_bow_dodge_thrust', 0), + (9278, 42984, 'kill_froglok_bow_ouch_backhand', 0), + (9279, 42985, 'kill_froglok_bow_ouch_down', 0), + (9280, 42986, 'kill_froglok_bow_ouch_forehand', 0), + (9281, 42987, 'kill_froglok_bow_ouch_thrust', 0), + (9282, 42988, 'kill_froglok_dual_wield_attack', 0), + (9283, 42989, 'kill_froglok_dual_wield_attack01', 0), + (9284, 42990, 'kill_froglok_dual_wield_attack02', 0), + (9285, 42991, 'kill_froglok_dual_wield_attack03', 0), + (9286, 42992, 'kill_froglok_dual_wield_dodge_backhand', 0), + (9287, 42993, 'kill_froglok_dual_wield_dodge_down', 0), + (9288, 42994, 'kill_froglok_dual_wield_dodge_forehand', 0), + (9289, 42995, 'kill_froglok_dual_wield_dodge_thrust', 0), + (9290, 42996, 'kill_froglok_dual_wield_idle', 0), + (9291, 42997, 'kill_froglok_dual_wield_ouch_backhand', 0), + (9292, 42998, 'kill_froglok_dual_wield_ouch_down', 0), + (9293, 42999, 'kill_froglok_dual_wield_ouch_forehand', 0), + (9294, 43000, 'kill_froglok_dual_wield_ouch_thrust', 0), + (9295, 43011, 'kill_froglok_1h_crush_idle', 0), + (9296, 43012, 'kill_froglok_1h_pierce_idle', 0), + (9297, 43013, 'kill_froglok_1h_thrown_idle', 0), + (9298, 43014, 'kill_froglok_2h_sword_attack', 0), + (9299, 43015, 'kill_froglok_2h_sword_attack01', 0), + (9300, 43016, 'kill_froglok_2h_sword_attack02', 0), + (9301, 43017, 'kill_froglok_2h_sword_attack03', 0), + (9302, 43018, 'kill_froglok_2h_sword_idle', 0), + (9303, 43019, 'kill_froglok_bow_idle', 0), + (9304, 43020, 'kill_froglok_dual_wield_kick', 0), + (9305, 43021, 'kill_froglok_dual_wield_whirling_attack', 0), + (9306, 43022, 'kill_froglok_dual_wield_wild_swing', 0), + (9307, 43058, 'kill_froglok_2h_sword_dodge_backhand', 0), + (9308, 43059, 'kill_froglok_2h_sword_dodge_down', 0), + (9309, 43060, 'kill_froglok_2h_sword_dodge_forehand', 0), + (9310, 43061, 'kill_froglok_2h_sword_dodge_thrust', 0), + (9311, 43062, 'kill_froglok_2h_sword_kick', 0), + (9312, 43063, 'kill_froglok_2h_sword_whirling_attack', 0), + (9313, 43064, 'kill_froglok_2h_sword_wild_swing', 0), + (9314, 43065, 'kill_froglok_bostaff_attack', 0), + (9315, 43066, 'kill_froglok_bostaff_attack01', 0), + (9316, 43067, 'kill_froglok_bostaff_attack02', 0), + (9317, 43068, 'kill_froglok_bostaff_attack03', 0), + (9318, 43069, 'kill_froglok_bostaff_idle', 0), + (9319, 43070, 'kill_froglok_bostaff_kick', 0), + (9320, 43071, 'kill_froglok_bostaff_whirling_attack', 0), + (9321, 43072, 'kill_froglok_bostaff_wild_swing', 0), + (9322, 43073, 'kill_froglok_monk_idle', 0), + (9323, 43075, 'kill_result_beserker_red_eyes', 0), + (9324, 43076, 'kill_result_guardian_aura', 0), + (9325, 43086, 'kill_froglok_monk_attack', 0), + (9326, 43087, 'kill_froglok_monk_attack01', 0), + (9327, 43088, 'kill_froglok_monk_attack02', 0), + (9328, 43089, 'kill_froglok_monk_attack03', 0), + (9329, 43090, 'kill_froglok_monk_kick', 0), + (9330, 43091, 'kill_froglok_monk_kick_spin', 0), + (9331, 43092, 'kill_froglok_monk_wild_swing', 0), + (9332, 43124, 'kill_froglok_monk_whirling_attack', 0), + (9333, 43125, 'kill_froglok_pike_attack', 0), + (9334, 43126, 'kill_froglok_pike_attack01', 0), + (9335, 43127, 'kill_froglok_pike_attack02', 0), + (9336, 43128, 'kill_froglok_pike_idle', 0), + (9337, 43129, 'kill_froglok_pike_kick', 0), + (9338, 43130, 'kill_froglok_pike_whirling_attack', 0), + (9339, 43131, 'kill_froglok_pike_wild_swing', 0), + (9340, 43132, 'kill_froglok_pugilist_attack', 0), + (9341, 43133, 'kill_froglok_pugilist_attack02', 0), + (9342, 43134, 'kill_froglok_pugilist_attack03', 0), + (9343, 43135, 'kill_froglok_pugilist_idle', 0), + (9344, 43136, 'kill_froglok_pugilist_kick', 0), + (9345, 43137, 'kill_froglok_pugilist_whirling_attack', 0), + (9346, 43138, 'kill_froglok_pugilist_wild_swing', 0), + (9347, 43139, 'kill_froglok_untrained_attack', 0), + (9348, 43140, 'kill_froglok_untrained_idle', 0), + (9349, 43142, 'kill_result_coercer_sun_aura', 0), + (9350, 43143, 'kill_result_illusionist_head_aura', 0), + (9351, 43144, 'kill_result_paladin_shoulder_streamers', 0), + (9352, 43145, 'kill_result_templar_halo', 0), + (9353, 43155, 'kill_fae_light_run', 0), + (9354, 43157, 'kill_result_assassin_star_cloud_hands', 0), + (9355, 43158, 'kill_result_brigand_hand_trails', 0), + (9356, 43159, 'kill_result_bruiser_fist_shining', 0), + (9357, 43160, 'kill_result_dirge_sparkles', 0), + (9358, 43161, 'kill_result_monk_fist_rings', 0), + (9359, 43162, 'kill_result_swashbuckler_hand_trails', 0), + (9360, 43163, 'kill_result_warlock_subtle_aura', 0), + (9361, 43183, 'kill_fae_light_climbing_backup', 0), + (9362, 43184, 'kill_fae_light_climbing_enter_down_root', 0), + (9363, 43185, 'kill_fae_light_climbing_exit_up_root', 0), + (9364, 43186, 'kill_fae_light_climbing_idle', 0), + (9365, 43187, 'kill_fae_light_climbing_strafe_left', 0), + (9366, 43188, 'kill_fae_light_climbing_strafe_right', 0), + (9367, 43189, 'kill_fae_light_climbing_walk', 0), + (9368, 43190, 'kill_fae_light_dead', 0), + (9369, 43191, 'kill_fae_light_dead_enter', 0), + (9370, 43237, 'kill_fae_light_bostaff_dodge_backhand', 0), + (9371, 43238, 'kill_fae_light_bostaff_dodge_forehand', 0), + (9372, 43239, 'kill_fae_light_dual_wield_dodge_backhand', 0), + (9373, 43240, 'kill_fae_light_dual_wield_dodge_forehand', 0), + (9374, 43241, 'kill_fae_light_dual_wield_ouch_backhand', 0), + (9375, 43242, 'kill_fae_light_dual_wield_ouch_forehand', 0), + (9376, 43243, 'kill_fae_light_dual_wield_parry_down', 0), + (9377, 43276, 'kill_fae_light_monk_dodge_backhand', 0), + (9378, 43277, 'kill_fae_light_monk_dodge_down', 0), + (9379, 43280, 'kill_horse_jump_substitute', 0), + (9380, 43284, 'kill_result_conjuror_shoulder_blue_flames', 0), + (9381, 43297, 'kill_fae_light_sit_enter', 0), + (9382, 43298, 'kill_fae_light_sit_exit', 0), + (9383, 43299, 'kill_fae_light_sit_idle', 0), + (9384, 43301, 'kill_froglok_horse_idle', 0), + (9385, 43310, 'kill_result_necromancer_hand_skulls', 0), + (9386, 43321, 'kill_froglok_gathering_search', 0), + (9387, 43322, 'kill_froglok_gathering_success', 0), + (9388, 43323, 'kill_froglok_mining_digging', 0), + (9389, 43327, 'kill_result_ranger_green_aura', 0), + (9390, 43328, 'kill_result_shadowknight_flame_horns', 0), + (9391, 43329, 'kill_result_wizard_elemental_hands', 0), + (9392, 43342, 'kill_froglok_converse_male04', 0), + (9393, 43343, 'kill_froglok_converse_male12', 0), + (9394, 43344, 'kill_froglok_forestry_success', 0), + (9395, 43345, 'kill_froglok_horse_jump_substitute', 0), + (9396, 43346, 'kill_froglok_kick', 0), + (9397, 43347, 'kill_froglok_knockedtoback', 0), + (9398, 43348, 'kill_froglok_mining_success', 0), + (9399, 43349, 'kill_froglok_run_03', 0), + (9400, 43350, 'kill_froglok_wild_swing', 0), + (9401, 43352, 'kill_result_defiler_poison_cloud', 0), + (9402, 43353, 'kill_result_mystic_cloudy_feet', 0), + (9403, 43354, 'kill_result_troubador_clouds', 0), + (9404, 43364, 'kill_froglok_bostaff_knockedtoback', 0), + (9405, 43365, 'kill_froglok_bostaff_knockedtoback_getup', 0), + (9406, 43366, 'kill_froglok_bow_knockedtoback', 0), + (9407, 43367, 'kill_froglok_bow_knockedtoback_getup', 0), + (9408, 43368, 'kill_froglok_dual_wield_knockedtoback', 0), + (9409, 43369, 'kill_froglok_dual_wield_knockedtoback_getup', 0), + (9410, 43370, 'kill_froglok_knockedtoback_getup', 0), + (9411, 43371, 'kill_froglok_knockedtoback_onbackidle', 0), + (9412, 43372, 'kill_froglok_monk_knockedtoback', 0), + (9413, 43373, 'kill_froglok_monk_knockedtoback_getup', 0), + (9414, 43374, 'kill_froglok_pike_knockedtoback', 0), + (9415, 43375, 'kill_froglok_pike_knockedtoback_getup', 0), + (9416, 43376, 'kill_froglok_pugilist_knockedtoback', 0), + (9417, 43377, 'kill_froglok_pugilist_knockedtoback_getup', 0), + (9418, 43448, 'kill_1h_crush_attack_recoil', 0), + (9419, 43449, 'kill_1h_crush_attack_recoil01', 0), + (9420, 43450, 'kill_1h_crush_attack_recoil02', 0), + (9421, 43451, 'kill_1h_crush_attack_recoil03', 0), + (9422, 43452, 'kill_1h_crush_backup', 0), + (9423, 43453, 'kill_1h_crush_enter', 0), + (9424, 43454, 'kill_1h_crush_exit', 0), + (9425, 43455, 'kill_1h_crush_strafe_left', 0), + (9426, 43456, 'kill_1h_crush_strafe_right', 0), + (9427, 43457, 'kill_1h_crush_walk', 0), + (9428, 43458, 'kill_1h_pierce_attack02', 0), + (9429, 43459, 'kill_1h_pierce_attack03', 0), + (9430, 43460, 'kill_1h_pierce_attack_recoil', 0), + (9431, 43461, 'kill_1h_pierce_attack_recoil01', 0), + (9432, 43462, 'kill_1h_pierce_attack_recoil02', 0), + (9433, 43463, 'kill_1h_pierce_attack_recoil03', 0), + (9434, 43464, 'kill_1h_pierce_backup', 0), + (9435, 43465, 'kill_1h_pierce_death_blow', 0), + (9436, 43466, 'kill_1h_pierce_death_blow01', 0), + (9437, 43467, 'kill_1h_pierce_enter', 0), + (9438, 43468, 'kill_1h_pierce_exit', 0), + (9439, 43469, 'kill_1h_pierce_strafe_left', 0), + (9440, 43470, 'kill_1h_pierce_strafe_right', 0), + (9441, 43471, 'kill_1h_pierce_walk', 0), + (9442, 43472, 'kill_1h_sword_attack_recoil', 0), + (9443, 43473, 'kill_1h_sword_attack_recoil01', 0), + (9444, 43474, 'kill_1h_sword_attack_recoil02', 0), + (9445, 43475, 'kill_1h_sword_attack_recoil03', 0), + (9446, 43476, 'kill_1h_sword_backup', 0), + (9447, 43477, 'kill_1h_sword_enter', 0), + (9448, 43478, 'kill_1h_sword_exit', 0), + (9449, 43479, 'kill_1h_sword_parry_thurst', 0), + (9450, 43480, 'kill_1h_sword_strafe_left', 0), + (9451, 43481, 'kill_1h_sword_strafe_right', 0), + (9452, 43482, 'kill_1h_sword_walk', 0), + (9453, 43483, 'kill_1h_throw_attack', 0), + (9454, 43484, 'kill_1h_thrown_backup', 0), + (9455, 43485, 'kill_1h_thrown_strafe_left', 0), + (9456, 43486, 'kill_1h_thrown_strafe_right', 0), + (9457, 43487, 'kill_1h_thrown_walk', 0), + (9458, 43488, 'kill_2h_sword_attack03', 0), + (9459, 43489, 'kill_2h_sword_attack_recoil', 0), + (9460, 43490, 'kill_2h_sword_attack_recoil01', 0), + (9461, 43491, 'kill_2h_sword_attack_recoil02', 0), + (9462, 43492, 'kill_2h_sword_attack_recoil03', 0), + (9463, 43493, 'kill_2h_sword_backup', 0), + (9464, 43494, 'kill_2h_sword_charge_up', 0), + (9465, 43495, 'kill_2h_sword_dodge_thrust', 0), + (9466, 43496, 'kill_2h_sword_exit', 0), + (9467, 43497, 'kill_2h_sword_feint', 0), + (9468, 43498, 'kill_2h_sword_offensive_buff', 0), + (9469, 43499, 'kill_2h_sword_parry_backhand', 0), + (9470, 43500, 'kill_2h_sword_parry_down', 0), + (9471, 43501, 'kill_2h_sword_parry_forehand', 0), + (9472, 43502, 'kill_2h_sword_parry_thrust', 0), + (9473, 43503, 'kill_2h_sword_strafe_left', 0), + (9474, 43504, 'kill_2h_sword_strafe_right', 0), + (9475, 43505, 'kill_2h_sword_super_buff', 0), + (9476, 43506, 'kill_2h_sword_taunt', 0), + (9477, 43507, 'kill_2h_sword_taunt_combat_art', 0), + (9478, 43508, 'kill_2h_sword_walk', 0), + (9479, 43509, 'kill_2hsword_idle01', 0), + (9480, 43512, 'kill_a', 0), + (9481, 43513, 'kill_agree', 0), + (9482, 43515, 'kill_alchemy_failure', 0), + (9483, 43516, 'kill_alchemy_idle', 0), + (9484, 43517, 'kill_alchemy_success', 0), + (9485, 43518, 'kill_angry', 0), + (9486, 43519, 'kill_antenna_01', 0), + (9487, 43520, 'kill_antenna_02', 0), + (9488, 43521, 'kill_antenna_03', 0), + (9489, 43522, 'kill_antenna_04', 0), + (9490, 43523, 'kill_antenna_05', 0), + (9491, 43524, 'kill_antonia_wisp', 0), + (9492, 43525, 'kill_anvil', 0), + (9493, 43526, 'kill_anvil_small', 0), + (9494, 43527, 'kill_appear', 0), + (9495, 43528, 'kill_applaude', 0), + (9496, 43529, 'kill_arm04_fail', 0), + (9497, 43530, 'kill_arm04_success', 0), + (9498, 43531, 'kill_armpour01', 0), + (9499, 43532, 'kill_artifact', 0), + (9500, 43533, 'kill_artificing_failure', 0), + (9501, 43534, 'kill_artificing_idle', 0), + (9502, 43535, 'kill_artificing_success', 0), + (9503, 43536, 'kill_artsn_chem_sound', 0), + (9504, 43537, 'kill_artsn_chimepad_sound', 0), + (9505, 43538, 'kill_artsn_forge_helmet_sound', 0), + (9506, 43539, 'kill_artsn_forge_sound', 0), + (9507, 43540, 'kill_artsn_glow_sound', 0), + (9508, 43541, 'kill_artsn_knives_sound', 0), + (9509, 43542, 'kill_artsn_knot_sound', 0), + (9510, 43543, 'kill_artsn_logcut_sound', 0), + (9511, 43544, 'kill_artsn_metal_bar_end_snd', 0), + (9512, 43545, 'kill_artsn_metal_bar_snd', 0), + (9513, 43546, 'kill_artsn_molecule_sound', 0), + (9514, 43547, 'kill_artsn_planer_sound', 0), + (9515, 43548, 'kill_artsn_saw_sound', 0), + (9516, 43549, 'kill_artsn_stove_sound', 0), + (9517, 43550, 'kill_asg_stonegaze_snd', 0), + (9518, 43551, 'kill_attack', 0), + (9519, 43552, 'kill_attack01', 0), + (9520, 43553, 'kill_attack02', 0), + (9521, 43554, 'kill_attack03', 0), + (9522, 43555, 'kill_attack04', 0), + (9523, 43556, 'kill_attack_backhand_trigger', 0), + (9524, 43557, 'kill_attack_bite', 0), + (9525, 43558, 'kill_attack_breath', 0), + (9526, 43559, 'kill_attack_breath01', 0), + (9527, 43560, 'kill_attack_breath02', 0), + (9528, 43561, 'kill_attack_forehand_trigger', 0), + (9529, 43562, 'kill_attack_headram', 0), + (9530, 43563, 'kill_attack_rear', 0), + (9531, 43564, 'kill_attack_roar01', 0), + (9532, 43565, 'kill_attack_scream', 0), + (9533, 43566, 'kill_attack_slam', 0), + (9534, 43567, 'kill_attack_snap', 0), + (9535, 43568, 'kill_attack_sound', 0), + (9536, 43569, 'kill_attack_special', 0), + (9537, 43570, 'kill_attack_special01', 0), + (9538, 43571, 'kill_attack_special02', 0), + (9539, 43572, 'kill_attack_special03', 0), + (9540, 43573, 'kill_attack_special_spring', 0), + (9541, 43574, 'kill_attack_stomp', 0), + (9542, 43575, 'kill_attack_tail', 0), + (9543, 43576, 'kill_attack_whirling', 0), + (9544, 43577, 'kill_attack_wildswing', 0), + (9545, 43578, 'kill_attack_wing', 0), + (9546, 43579, 'kill_attack_wings', 0), + (9547, 43580, 'kill_attack_woosh01', 0), + (9548, 43581, 'kill_attacktiming', 0), + (9549, 43582, 'kill_attacktiming_a', 0), + (9550, 43583, 'kill_attention', 0), + (9551, 43584, 'kill_aval_cast_snd', 0), + (9552, 43585, 'kill_awrh_cast_snd', 0), + (9553, 43586, 'kill_awrh_heal2_snd', 0), + (9554, 43587, 'kill_awrh_heal_snd', 0), + (9555, 43588, 'kill_awrh_rainfall_snd', 0), + (9556, 43589, 'kill_aww_whirlcast_snd', 0), + (9557, 43590, 'kill_aww_whirlparticles_snd', 0), + (9558, 43591, 'kill_backup', 0), + (9559, 43592, 'kill_backup_run', 0), + (9560, 43593, 'kill_bad_outcome01', 0), + (9561, 43594, 'kill_bad_outcome01_shuttle', 0), + (9562, 43595, 'kill_bad_outcome02', 0), + (9563, 43596, 'kill_bad_outcome02_shuttle', 0), + (9564, 43597, 'kill_ball_bk', 0), + (9565, 43598, 'kill_ball_bk_sm', 0), + (9566, 43599, 'kill_ball_glow', 0), + (9567, 43600, 'kill_ball_wht', 0), + (9568, 43601, 'kill_ball_wht_sm', 0), + (9569, 43602, 'kill_barrel_fire', 0), + (9570, 43603, 'kill_barrel_pieces', 0), + (9571, 43604, 'kill_base', 0), + (9572, 43605, 'kill_bat_swarm', 0), + (9573, 43606, 'kill_battlecry', 0), + (9574, 43607, 'kill_bc_caged_snd', 0), + (9575, 43608, 'kill_bd_cast_lp_snd', 0), + (9576, 43609, 'kill_bd_fireburst_snd', 0), + (9577, 43610, 'kill_beaker01', 0), + (9578, 43611, 'kill_beckon', 0), + (9579, 43612, 'kill_beg', 0), + (9580, 43613, 'kill_bene', 0), + (9581, 43614, 'kill_big_saw_success', 0), + (9582, 43615, 'kill_big_saw_success2', 0), + (9583, 43616, 'kill_big_smoke', 0), + (9584, 43617, 'kill_bl_castswirls_snd', 0), + (9585, 43618, 'kill_bl_start_particles_snd', 0), + (9586, 43619, 'kill_blammo', 0), + (9587, 43620, 'kill_blink', 0), + (9588, 43621, 'kill_boe_endspinner_sound', 0), + (9589, 43622, 'kill_boe_open_burst_sound', 0), + (9590, 43623, 'kill_boe_shield_tone_sound', 0), + (9591, 43624, 'kill_boggle', 0), + (9592, 43625, 'kill_boilover01', 0), + (9593, 43626, 'kill_book_white', 0), + (9594, 43627, 'kill_bostaff_attack_recoil', 0), + (9595, 43628, 'kill_bostaff_attack_recoil01', 0), + (9596, 43629, 'kill_bostaff_attack_recoil02', 0), + (9597, 43630, 'kill_bostaff_attack_recoil03', 0), + (9598, 43631, 'kill_bostaff_backup', 0), + (9599, 43632, 'kill_bostaff_charge_up', 0), + (9600, 43633, 'kill_bostaff_defensive_buff', 0), + (9601, 43634, 'kill_bostaff_dodge_backhand', 0), + (9602, 43635, 'kill_bostaff_dodge_down', 0), + (9603, 43636, 'kill_bostaff_dodge_forehand', 0), + (9604, 43637, 'kill_bostaff_dodge_thrust', 0), + (9605, 43638, 'kill_bostaff_enter', 0), + (9606, 43639, 'kill_bostaff_exit', 0), + (9607, 43640, 'kill_bostaff_feint', 0), + (9608, 43641, 'kill_bostaff_idle01', 0), + (9609, 43642, 'kill_bostaff_knockdowntoknees', 0), + (9610, 43643, 'kill_bostaff_knockedtoback', 0), + (9611, 43644, 'kill_bostaff_knockedtoback_getup', 0), + (9612, 43645, 'kill_bostaff_offensive_buff', 0), + (9613, 43646, 'kill_bostaff_ouch_backhand', 0), + (9614, 43647, 'kill_bostaff_ouch_down', 0), + (9615, 43648, 'kill_bostaff_ouch_forehand', 0), + (9616, 43649, 'kill_bostaff_ouch_thrust', 0), + (9617, 43650, 'kill_bostaff_parry_backhand', 0), + (9618, 43651, 'kill_bostaff_parry_down', 0), + (9619, 43652, 'kill_bostaff_parry_forehand', 0), + (9620, 43653, 'kill_bostaff_parry_thrust', 0), + (9621, 43654, 'kill_bostaff_strafe_left', 0), + (9622, 43655, 'kill_bostaff_strafe_right', 0), + (9623, 43656, 'kill_bostaff_super_buff', 0), + (9624, 43657, 'kill_bostaff_taunt_combat_art', 0), + (9625, 43658, 'kill_bostaff_walk', 0), + (9626, 43659, 'kill_bow_aim_down', 0), + (9627, 43660, 'kill_bow_aim_up', 0), + (9628, 43661, 'kill_bow_attack', 0), + (9629, 43662, 'kill_bow_attack_2x', 0), + (9630, 43663, 'kill_bow_backup', 0), + (9631, 43664, 'kill_bow_enter', 0), + (9632, 43665, 'kill_bow_exit', 0), + (9633, 43666, 'kill_bow_getarrow', 0), + (9634, 43667, 'kill_bow_knockdowntoknees', 0), + (9635, 43668, 'kill_bow_knockedtoback', 0), + (9636, 43669, 'kill_bow_knockedtoback_getup', 0), + (9637, 43670, 'kill_bow_pullback', 0), + (9638, 43671, 'kill_bow_release', 0), + (9639, 43672, 'kill_bow_sheathe', 0), + (9640, 43673, 'kill_bow_strafe_left', 0), + (9641, 43674, 'kill_bow_strafe_right', 0), + (9642, 43675, 'kill_bow_unsheathe', 0), + (9643, 43676, 'kill_bow_walk', 0), + (9644, 43677, 'kill_bowstring', 0), + (9645, 43678, 'kill_bowstring_electricity', 0), + (9646, 43679, 'kill_bowstring_electricity_red', 0), + (9647, 43680, 'kill_brandish', 0), + (9648, 43681, 'kill_breath', 0), + (9649, 43682, 'kill_breath_attack', 0), + (9650, 43683, 'kill_breath_attack_blue', 0), + (9651, 43684, 'kill_breath_attack_purple', 0), + (9652, 43685, 'kill_breath_nostop', 0), + (9653, 43686, 'kill_breathweapon', 0), + (9654, 43687, 'kill_bs_bull_form_01_snd', 0), + (9655, 43688, 'kill_bs_cast_armpush_snd', 0), + (9656, 43689, 'kill_bs_hooves_snd', 0), + (9657, 43690, 'kill_bs_makebull_tone_snd', 0), + (9658, 43691, 'kill_bubbles01', 0), + (9659, 43692, 'kill_burn', 0), + (9660, 43693, 'kill_burst_sound_01', 0), + (9661, 43694, 'kill_bye', 0), + (9662, 43695, 'kill_c', 0), + (9663, 43696, 'kill_cache_state0', 0), + (9664, 43697, 'kill_cache_state1', 0), + (9665, 43698, 'kill_cache_state2', 0), + (9666, 43699, 'kill_cached_state0', 0), + (9667, 43700, 'kill_cached_state1', 0), + (9668, 43701, 'kill_cactus_spiney_sound', 0), + (9669, 43702, 'kill_candle01', 0), + (9670, 43703, 'kill_candle02', 0), + (9671, 43704, 'kill_candle03', 0), + (9672, 43705, 'kill_candle04', 0), + (9673, 43706, 'kill_candle_flair01', 0), + (9674, 43707, 'kill_candle_flair02', 0), + (9675, 43708, 'kill_candle_flair03', 0), + (9676, 43709, 'kill_candle_smoke01', 0), + (9677, 43710, 'kill_candle_smoke02', 0), + (9678, 43711, 'kill_candle_smoke03', 0), + (9679, 43712, 'kill_carpet_enter', 0), + (9680, 43713, 'kill_carpet_exit', 0), + (9681, 43714, 'kill_carpet_fall', 0), + (9682, 43715, 'kill_carpet_idle', 0), + (9683, 43716, 'kill_carpet_jump', 0), + (9684, 43717, 'kill_carpet_land', 0), + (9685, 43718, 'kill_carpet_run', 0), + (9686, 43719, 'kill_carpet_walk', 0), + (9687, 43720, 'kill_cast01', 0), + (9688, 43721, 'kill_cast4', 0), + (9689, 43722, 'kill_cast_01lp_snd', 0), + (9690, 43723, 'kill_cast_1', 0), + (9691, 43724, 'kill_cast_10', 0), + (9692, 43725, 'kill_cast_11', 0), + (9693, 43726, 'kill_cast_12', 0), + (9694, 43727, 'kill_cast_2', 0), + (9695, 43728, 'kill_cast_3', 0), + (9696, 43729, 'kill_cast_4', 0), + (9697, 43730, 'kill_cast_6', 0), + (9698, 43731, 'kill_cast_7', 0), + (9699, 43732, 'kill_cast_8', 0), + (9700, 43733, 'kill_cast_9', 0), + (9701, 43734, 'kill_cast_aoe_beneficial_end', 0), + (9702, 43735, 'kill_cast_aoe_beneficial_loop', 0), + (9703, 43736, 'kill_cast_aoe_beneficial_start', 0), + (9704, 43737, 'kill_cast_aoe_detrimental_end', 0), + (9705, 43738, 'kill_cast_aoe_detrimental_loop', 0), + (9706, 43739, 'kill_cast_aoe_detrimental_start', 0), + (9707, 43741, 'kill_cast_aoe_invocation_end', 0), + (9708, 43742, 'kill_cast_aoe_invocation_loop', 0), + (9709, 43743, 'kill_cast_aoe_invocation_start', 0), + (9710, 43744, 'kill_cast_aoe_wand_end', 0), + (9711, 43745, 'kill_cast_aoe_wand_loop', 0), + (9712, 43746, 'kill_cast_aoe_wand_start', 0), + (9713, 43747, 'kill_cast_armor_01_snd', 0), + (9714, 43748, 'kill_cast_attack02', 0), + (9715, 43749, 'kill_cast_backgroundsparkle_snd', 0), + (9716, 43750, 'kill_cast_bard_drum_end', 0), + (9717, 43751, 'kill_cast_bard_drum_loop', 0), + (9718, 43753, 'kill_cast_bard_flute_end', 0), + (9719, 43754, 'kill_cast_bard_flute_loop', 0), + (9720, 43756, 'kill_cast_bard_stringed_end', 0), + (9721, 43757, 'kill_cast_bard_stringed_loop', 0), + (9722, 43758, 'kill_cast_bard_stringed_start', 0), + (9723, 43759, 'kill_cast_bard_vocal_end', 0), + (9724, 43760, 'kill_cast_bard_vocal_loop', 0), + (9725, 43762, 'kill_cast_charge_wind_01_sound', 0), + (9726, 43763, 'kill_cast_chargeswordglint_sound', 0), + (9727, 43764, 'kill_cast_clowhand_sound_01', 0), + (9728, 43765, 'kill_cast_clowhand_sound_02', 0), + (9729, 43766, 'kill_cast_clowhand_sound_03', 0), + (9730, 43767, 'kill_cast_deepbreath', 0), + (9731, 43768, 'kill_cast_distort_lefthand', 0), + (9732, 43769, 'kill_cast_distort_right_foot_ws', 0), + (9733, 43770, 'kill_cast_distort_righthand', 0), + (9734, 43771, 'kill_cast_drake_fire_breath', 0), + (9735, 43772, 'kill_cast_drone_01_snd', 0), + (9736, 43773, 'kill_cast_drone_02_snd', 0), + (9737, 43774, 'kill_cast_drone_snd', 0), + (9738, 43775, 'kill_cast_drone_sound', 0), + (9739, 43776, 'kill_cast_dustpuff_lefthand', 0), + (9740, 43777, 'kill_cast_dustpuff_righthand', 0), + (9741, 43778, 'kill_cast_elec_feet_green', 0), + (9742, 43779, 'kill_cast_elec_hands_four', 0), + (9743, 43780, 'kill_cast_elec_hands_four_up', 0), + (9744, 43781, 'kill_cast_elec_hands_up', 0), + (9745, 43782, 'kill_cast_end_sound', 0), + (9746, 43783, 'kill_cast_endbang2_snd', 0), + (9747, 43784, 'kill_cast_endbang_snd', 0), + (9748, 43785, 'kill_cast_endsparkle_snd', 0), + (9749, 43786, 'kill_cast_endthunder_snd', 0), + (9750, 43787, 'kill_cast_es_arches_01_snd', 0), + (9751, 43788, 'kill_cast_fast', 0), + (9752, 43789, 'kill_cast_force_snd', 0), + (9753, 43790, 'kill_cast_glowhand__sound_02', 0), + (9754, 43791, 'kill_cast_glowhand_sound_01', 0), + (9755, 43792, 'kill_cast_glowhand_sound_03', 0), + (9756, 43793, 'kill_cast_glowhand_sound_04', 0), + (9757, 43794, 'kill_cast_glowhand_sound_05', 0), + (9758, 43795, 'kill_cast_glowhand_sound_06', 0), + (9759, 43796, 'kill_cast_gsswipe_01_snd', 0), + (9760, 43797, 'kill_cast_gsswipe_02_snd', 0), + (9761, 43798, 'kill_cast_gsswipe_03_snd', 0), + (9762, 43799, 'kill_cast_hands_elec_nightblood', 0), + (9763, 43800, 'kill_cast_handswipe_snd', 0), + (9764, 43801, 'kill_cast_howlverb_sound', 0), + (9765, 43802, 'kill_cast_hrb_choral_snd', 0), + (9766, 43803, 'kill_cast_hrb_rune_snd', 0), + (9767, 43804, 'kill_cast_ice_laser_breath', 0), + (9768, 43805, 'kill_cast_kickcharge_sound', 0), + (9769, 43806, 'kill_cast_laser_aoe', 0), + (9770, 43807, 'kill_cast_lava_rocks', 0), + (9771, 43808, 'kill_cast_lense01', 0), + (9772, 43809, 'kill_cast_lense02', 0), + (9773, 43810, 'kill_cast_light_sound', 0), + (9774, 43811, 'kill_cast_mage_aggro_01', 0), + (9775, 43812, 'kill_cast_mage_aggro_02', 0), + (9776, 43813, 'kill_cast_mage_buff_01', 0), + (9777, 43814, 'kill_cast_mage_buff_02', 0), + (9778, 43815, 'kill_cast_mage_ddam_01', 0), + (9779, 43816, 'kill_cast_mage_ddam_02', 0), + (9780, 43817, 'kill_cast_mage_qa_01', 0), + (9781, 43818, 'kill_cast_mage_qa_02', 0), + (9782, 43819, 'kill_cast_mage_qa_03', 0), + (9783, 43820, 'kill_cast_mage_quickzap_01', 0), + (9784, 43821, 'kill_cast_mage_quickzap_02', 0), + (9785, 43822, 'kill_cast_mage_ready', 0), + (9786, 43823, 'kill_cast_mendhands_01', 0), + (9787, 43824, 'kill_cast_mendsparkleball_01', 0), + (9788, 43825, 'kill_cast_mendsparkleball_02', 0), + (9789, 43826, 'kill_cast_mendtrail_01', 0), + (9790, 43827, 'kill_cast_mendtrails_01', 0), + (9791, 43828, 'kill_cast_mendtwinkles_01', 0), + (9792, 43829, 'kill_cast_new_qa_part1', 0), + (9793, 43830, 'kill_cast_new_qa_part2', 0), + (9794, 43831, 'kill_cast_new_qa_part3', 0), + (9795, 43832, 'kill_cast_pdswipe_01_snd', 0), + (9796, 43833, 'kill_cast_pfx_magenuke_head', 0), + (9797, 43834, 'kill_cast_pillar_sound_01', 0), + (9798, 43835, 'kill_cast_pillar_sound_02', 0), + (9799, 43836, 'kill_cast_pillar_sound_03', 0), + (9800, 43837, 'kill_cast_pillar_sound_04', 0), + (9801, 43838, 'kill_cast_pillar_sound_05', 0), + (9802, 43839, 'kill_cast_pillars', 0), + (9803, 43842, 'kill_cast_priest_aggro_01', 0), + (9804, 43843, 'kill_cast_priest_aggro_02', 0), + (9805, 43844, 'kill_cast_priest_buff_01', 0), + (9806, 43845, 'kill_cast_priest_buff_02', 0), + (9807, 43846, 'kill_cast_priest_ddam_01', 0), + (9808, 43847, 'kill_cast_priest_ddam_02', 0), + (9809, 43848, 'kill_cast_priest_floating', 0), + (9810, 43849, 'kill_cast_quickhit_snd', 0), + (9811, 43850, 'kill_cast_ready', 0), + (9812, 43851, 'kill_cast_rune_sound_01', 0), + (9813, 43852, 'kill_cast_rune_sound_02', 0), + (9814, 43853, 'kill_cast_rune_sound_03', 0), + (9815, 43854, 'kill_cast_rune_sound_04', 0), + (9816, 43855, 'kill_cast_shield_grow', 0), + (9817, 43856, 'kill_cast_shortbreath', 0), + (9818, 43857, 'kill_cast_sneak_sound', 0), + (9819, 43858, 'kill_cast_spark_burst_righthand', 0), + (9820, 43859, 'kill_cast_sparklewave_01_snd', 0), + (9821, 43860, 'kill_cast_sparklewave_02_snd', 0), + (9822, 43861, 'kill_cast_sparklewave_03_snd', 0), + (9823, 43862, 'kill_cast_sparklewave_04_snd', 0), + (9824, 43863, 'kill_cast_sparklewave_05_snd', 0), + (9825, 43864, 'kill_cast_startlow_snd', 0), + (9826, 43865, 'kill_cast_startthunder_snd', 0), + (9827, 43866, 'kill_cast_steam_breath', 0), + (9828, 43867, 'kill_cast_summon_end', 0), + (9829, 43868, 'kill_cast_summon_loop', 0), + (9830, 43869, 'kill_cast_summon_start', 0), + (9831, 43870, 'kill_cast_swipe01_snd', 0), + (9832, 43871, 'kill_cast_swipe02_snd', 0), + (9833, 43872, 'kill_cast_target_det_01', 0), + (9834, 43873, 'kill_cast_target_det_02', 0), + (9835, 43874, 'kill_cast_target_det_03', 0), + (9836, 43875, 'kill_cast_target_detrimental_01', 0), + (9837, 43876, 'kill_cast_target_detrimental_02', 0), + (9838, 43877, 'kill_cast_targeted_benefical_end', 0), + (9839, 43878, 'kill_cast_targeted_benefical_loop', 0), + (9840, 43879, 'kill_cast_targeted_benefical_start', 0), + (9841, 43880, 'kill_cast_targeted_beneficial_end', 0), + (9842, 43881, 'kill_cast_targeted_beneficial_loop', 0), + (9843, 43882, 'kill_cast_targeted_beneficial_start', 0), + (9844, 43883, 'kill_cast_targeted_detrimental_end', 0), + (9845, 43884, 'kill_cast_targeted_detrimental_loop', 0), + (9846, 43885, 'kill_cast_targeted_detrimental_start', 0), + (9847, 43886, 'kill_cast_targeted_detrimental_start2', 0), + (9848, 43887, 'kill_cast_targeted_wand_end', 0), + (9849, 43888, 'kill_cast_targeted_wand_loop', 0), + (9850, 43889, 'kill_cast_targeted_wand_start', 0), + (9851, 43890, 'kill_cast_tarranax_breath', 0), + (9852, 43891, 'kill_cast_tarranax_breath_path', 0), + (9853, 43892, 'kill_cast_tarranax_breath_start', 0), + (9854, 43893, 'kill_cast_thunder_snd', 0), + (9855, 43894, 'kill_cast_trail_leftarm_bright', 0), + (9856, 43895, 'kill_cast_trail_rightarm_bright', 0), + (9857, 43896, 'kill_cast_undertone_snd', 0), + (9858, 43897, 'kill_cast_venekors_fire_breath', 0), + (9859, 43898, 'kill_cast_wildcharge_sound', 0), + (9860, 43899, 'kill_cast_wildswingwindsword_sound', 0), + (9861, 43900, 'kill_cast_wuoshi_choking_vines_aoe', 0), + (9862, 43901, 'kill_cast_wuoshi_fire_and_ice_aoe', 0), + (9863, 43902, 'kill_cast_wuoshi_tree_morph', 0), + (9864, 43903, 'kill_cast_zombie_scare', 0), + (9865, 43904, 'kill_cchains_resultchains_snd', 0), + (9866, 43905, 'kill_cchains_sing_snd', 0), + (9867, 43906, 'kill_cf_coins_bounce_background_snd', 0), + (9868, 43907, 'kill_cf_coins_bounce_bkgrnd_short_snd', 0), + (9869, 43908, 'kill_cf_coins_lots_snd', 0), + (9870, 43909, 'kill_cf_coins_many_snd', 0), + (9871, 43910, 'kill_cf_coinsfall_snd', 0), + (9872, 43911, 'kill_charge', 0), + (9873, 43912, 'kill_charge_burst_snd', 0), + (9874, 43913, 'kill_charge_rumble_snd', 0), + (9875, 43914, 'kill_charge_up', 0), + (9876, 43915, 'kill_charge_whoosh_snd', 0), + (9877, 43916, 'kill_charm_cast_snd', 0), + (9878, 43917, 'kill_charm_flutes_snd', 0), + (9879, 43918, 'kill_cheer', 0), + (9880, 43919, 'kill_chimney01', 0), + (9881, 43920, 'kill_chuckle', 0), + (9882, 43921, 'kill_ciseme_m', 0), + (9883, 43922, 'kill_cl_catglow_snd', 0), + (9884, 43923, 'kill_clear_target_tigger', 0), + (9885, 43924, 'kill_clear_target_trigger', 0), + (9886, 43925, 'kill_climbing', 0), + (9887, 43926, 'kill_climbing_chainmail_stone', 0), + (9888, 43927, 'kill_climbing_chainmail_wood', 0), + (9889, 43928, 'kill_climbing_enter_down', 0), + (9890, 43929, 'kill_climbing_exit_up', 0), + (9891, 43930, 'kill_climbing_idle01', 0), + (9892, 43931, 'kill_climbing_leather_stone', 0), + (9893, 43932, 'kill_climbing_leather_wood', 0), + (9894, 43933, 'kill_climbing_metal_stone', 0), + (9895, 43934, 'kill_climbing_metal_wood', 0), + (9896, 43935, 'kill_climbing_ouch', 0), + (9897, 43936, 'kill_closed', 0), + (9898, 43937, 'kill_cloud_group_sound', 0), + (9899, 43938, 'kill_cloud_sound', 0), + (9900, 43939, 'kill_cloud_sound_02', 0), + (9901, 43940, 'kill_cloud_widget', 0), + (9902, 43941, 'kill_cn_ringout_snd', 0), + (9903, 43942, 'kill_cn_strums_snd', 0), + (9904, 43943, 'kill_coals01', 0), + (9905, 43944, 'kill_coals_failure', 0), + (9906, 43945, 'kill_coals_fire_large', 0), + (9907, 43946, 'kill_coals_fire_small', 0), + (9908, 43947, 'kill_coins_and_jewels_pile', 0), + (9909, 43948, 'kill_coins_pile_copper', 0), + (9910, 43949, 'kill_coins_pile_gold', 0), + (9911, 43950, 'kill_coins_pile_silver', 0), + (9912, 43951, 'kill_cold_breath', 0), + (9913, 43952, 'kill_comabt_exit', 0), + (9914, 43953, 'kill_combat', 0), + (9915, 43954, 'kill_combat_backup', 0), + (9916, 43955, 'kill_combat_backup_run', 0), + (9917, 43956, 'kill_combat_enter', 0), + (9918, 43957, 'kill_combat_exit', 0), + (9919, 43958, 'kill_combat_fx', 0), + (9920, 43959, 'kill_combat_idle', 0), + (9921, 43960, 'kill_combat_idle01', 0), + (9922, 43961, 'kill_combat_idle1', 0), + (9923, 43962, 'kill_combat_idle_bark', 0), + (9924, 43963, 'kill_combat_idle_enter', 0), + (9925, 43964, 'kill_combat_idle_jump', 0), + (9926, 43965, 'kill_combat_idle_rhand', 0), + (9927, 43966, 'kill_combat_idle_snap', 0), + (9928, 43967, 'kill_combat_idle_sound01', 0), + (9929, 43968, 'kill_combat_idle_sound02', 0), + (9930, 43969, 'kill_combat_idleflap', 0), + (9931, 43970, 'kill_combat_ouch', 0), + (9932, 43971, 'kill_combat_ouch_sound', 0), + (9933, 43972, 'kill_combat_peace', 0), + (9934, 43973, 'kill_combat_run', 0), + (9935, 43974, 'kill_combat_strafe_left_run', 0), + (9936, 43975, 'kill_combat_strafe_right_run', 0), + (9937, 43976, 'kill_combat_tail', 0), + (9938, 43977, 'kill_combat_tail_cloak', 0), + (9939, 43978, 'kill_combat_turn_left', 0), + (9940, 43979, 'kill_combat_turn_right', 0), + (9941, 43980, 'kill_combat_walk', 0), + (9942, 43981, 'kill_complete', 0), + (9943, 43982, 'kill_confused', 0), + (9944, 43988, 'kill_converse', 0), + (9945, 43989, 'kill_converse_female01', 0), + (9946, 43990, 'kill_converse_female02', 0), + (9947, 43991, 'kill_converse_female03', 0), + (9948, 43992, 'kill_converse_female04', 0), + (9949, 43993, 'kill_converse_female05', 0), + (9950, 43994, 'kill_converse_female06', 0), + (9951, 43995, 'kill_converse_female07', 0), + (9952, 43996, 'kill_converse_female08', 0), + (9953, 43997, 'kill_converse_female09', 0), + (9954, 43998, 'kill_converse_female10', 0), + (9955, 43999, 'kill_converse_female11', 0), + (9956, 44000, 'kill_converse_female12', 0), + (9957, 44001, 'kill_converse_male01', 0), + (9958, 44002, 'kill_converse_male02', 0), + (9959, 44003, 'kill_converse_male03', 0), + (9960, 44004, 'kill_converse_male05', 0), + (9961, 44005, 'kill_converse_male06', 0), + (9962, 44006, 'kill_converse_male07', 0), + (9963, 44007, 'kill_converse_male08', 0), + (9964, 44008, 'kill_converse_male09', 0), + (9965, 44009, 'kill_converse_male10', 0), + (9966, 44010, 'kill_converse_male11', 0), + (9967, 44011, 'kill_cooking_failure', 0), + (9968, 44012, 'kill_cooking_idle', 0), + (9969, 44013, 'kill_cooking_success', 0), + (9970, 44014, 'kill_corpse', 0), + (9971, 44015, 'kill_cos_call_storm_snd', 0), + (9972, 44016, 'kill_cos_storm_space_snd', 0), + (9973, 44017, 'kill_cp_charge_snd', 0), + (9974, 44018, 'kill_cr_choral01_sound', 0), + (9975, 44019, 'kill_cr_choral02_sound', 0), + (9976, 44020, 'kill_cracks', 0), + (9977, 44021, 'kill_crash_enter', 0), + (9978, 44022, 'kill_crash_exit', 0), + (9979, 44023, 'kill_crazy', 0), + (9980, 44024, 'kill_cringe', 0), + (9981, 44025, 'kill_croak_01', 0), + (9982, 44026, 'kill_croak_02', 0), + (9983, 44027, 'kill_croak_03', 0), + (9984, 44028, 'kill_croak_04', 0), + (9985, 44029, 'kill_croak_05', 0), + (9986, 44030, 'kill_croak_06', 0), + (9987, 44031, 'kill_croak_07', 0), + (9988, 44032, 'kill_croak_08', 0), + (9989, 44033, 'kill_croak_09', 0), + (9990, 44034, 'kill_crouch_backup', 0), + (9991, 44035, 'kill_crouch_run', 0), + (9992, 44036, 'kill_crouch_strafe_left', 0), + (9993, 44037, 'kill_crouch_strafe_right', 0), + (9994, 44038, 'kill_crouch_tail', 0), + (9995, 44039, 'kill_crouch_tail_cloak', 0), + (9996, 44040, 'kill_crouch_turn_left', 0), + (9997, 44041, 'kill_crouch_turn_right', 0), + (9998, 44042, 'kill_crouch_walk', 0), + (9999, 44043, 'kill_cry', 0), + (10000, 44044, 'kill_cs_begin_snd', 0), + (10001, 44045, 'kill_cs_cast_lp_snd', 0), + (10002, 44046, 'kill_cs_disco_lp01_snd', 0), + (10003, 44047, 'kill_cs_end_snd', 0), + (10004, 44048, 'kill_cs_ice_crackle_01', 0), + (10005, 44049, 'kill_cs_iceburst_sound', 0), + (10006, 44050, 'kill_cs_icetones_01', 0), + (10007, 44051, 'kill_cs_icewind_sound', 0), + (10008, 44052, 'kill_cs_result_sound', 0), + (10009, 44053, 'kill_curse', 0), + (10010, 44054, 'kill_curtsey', 0), + (10011, 44055, 'kill_cutthroat', 0), + (10012, 44056, 'kill_cv_candle01_snd', 0), + (10013, 44057, 'kill_cv_candle02_snd', 0), + (10014, 44058, 'kill_cv_darkcandle_snd', 0), + (10015, 44059, 'kill_cv_drone_snd', 0), + (10016, 44060, 'kill_cv_handwave01_snd', 0), + (10017, 44061, 'kill_cv_handwave02_snd', 0), + (10018, 44062, 'kill_damage01', 0), + (10019, 44063, 'kill_damage02', 0), + (10020, 44064, 'kill_damage03', 0), + (10021, 44065, 'kill_damage_small', 0), + (10022, 44066, 'kill_dance', 0), + (10023, 44067, 'kill_dance01', 0), + (10024, 44068, 'kill_dark_smoke', 0), + (10025, 44069, 'kill_dark_smoke_up', 0), + (10026, 44070, 'kill_db_drone_sound', 0), + (10027, 44071, 'kill_db_electricend_sound', 0), + (10028, 44072, 'kill_db_swordstickdirt_sound', 0), + (10029, 44073, 'kill_dbb_dragonbreath_snd', 0), + (10030, 44074, 'kill_dbb_dragonbreathhiwav_snd', 0), + (10031, 44075, 'kill_dcs_scarab_lp_snd', 0), + (10032, 44076, 'kill_dcspid_spider_snd', 0), + (10033, 44077, 'kill_dead_dark_smoke', 0), + (10034, 44078, 'kill_dead_dark_smoke_head', 0), + (10035, 44079, 'kill_dead_enter_death02', 0), + (10036, 44080, 'kill_dead_enter_death03', 0), + (10037, 44081, 'kill_dead_enter_fall', 0), + (10038, 44082, 'kill_dead_enter_scream', 0), + (10039, 44083, 'kill_dead_enter_sound', 0), + (10040, 44084, 'kill_dead_entertiming_a', 0), + (10041, 44085, 'kill_dead_entertiming_b', 0), + (10042, 44086, 'kill_dead_entertiming_c', 0), + (10043, 44087, 'kill_dead_entertiming_c2', 0), + (10044, 44088, 'kill_dead_entertiming_c3', 0), + (10045, 44089, 'kill_dead_entertiming_d', 0), + (10046, 44090, 'kill_dead_entertiming_e', 0), + (10047, 44091, 'kill_dead_exit', 0), + (10048, 44092, 'kill_dead_fall', 0), + (10049, 44093, 'kill_dead_scream01', 0), + (10050, 44094, 'kill_dead_scream02', 0), + (10051, 44095, 'kill_dead_tail', 0), + (10052, 44096, 'kill_death_fall01', 0), + (10053, 44097, 'kill_death_fall02', 0), + (10054, 44098, 'kill_default', 0), + (10055, 44099, 'kill_defensive_buff', 0), + (10056, 44100, 'kill_definsive_buff', 0), + (10057, 44101, 'kill_descend_sound_01', 0), + (10058, 44102, 'kill_design_fear_gate_flash', 0), + (10059, 44103, 'kill_design_fireflies', 0), + (10060, 44104, 'kill_design_fireflies_evil', 0), + (10061, 44105, 'kill_design_hearts_all', 0), + (10062, 44106, 'kill_design_hearts_big_all', 0), + (10063, 44107, 'kill_design_hearts_big_blue', 0), + (10064, 44108, 'kill_design_hearts_big_purple', 0), + (10065, 44109, 'kill_design_hearts_big_red', 0), + (10066, 44110, 'kill_design_hearts_blue', 0), + (10067, 44111, 'kill_design_hearts_purple', 0), + (10068, 44112, 'kill_design_hearts_red', 0), + (10069, 44113, 'kill_design_hummingbirds', 0), + (10070, 44114, 'kill_design_portal_to_hell', 0), + (10071, 44115, 'kill_design_result_backdraft', 0), + (10072, 44116, 'kill_design_result_cyclone_sand', 0), + (10073, 44117, 'kill_design_result_cyclone_sand_ccw', 0), + (10074, 44118, 'kill_design_result_freeport_pit_fire_spurt', 0), + (10075, 44119, 'kill_design_result_fungusman_poked', 0), + (10076, 44120, 'kill_design_result_halloween_fog', 0), + (10077, 44121, 'kill_design_result_light_shafts', 0), + (10078, 44122, 'kill_design_result_sparkle_scan_up', 0), + (10079, 44123, 'kill_design_result_teleporter', 0), + (10080, 44124, 'kill_design_smoke_jet_brown', 0), + (10081, 44125, 'kill_design_smoke_jet_brown_int', 0), + (10082, 44126, 'kill_design_smoke_jet_gray', 0), + (10083, 44127, 'kill_design_smoke_jet_gray_int', 0), + (10084, 44128, 'kill_design_smoke_jet_white', 0), + (10085, 44129, 'kill_design_smoke_jet_white_int', 0), + (10086, 44130, 'kill_design_sound_blow', 0), + (10087, 44131, 'kill_design_sound_bubble', 0), + (10088, 44132, 'kill_design_sound_steam', 0), + (10089, 44133, 'kill_design_steamfont_bubbles_ripples', 0), + (10090, 44134, 'kill_design_steamfont_rainbow', 0), + (10091, 44135, 'kill_design_steamfont_slow_steam', 0), + (10092, 44136, 'kill_design_steamfont_steam_column', 0), + (10093, 44137, 'kill_design_steamfont_steam_tube_a', 0), + (10094, 44138, 'kill_design_steamfont_steam_tube_b', 0), + (10095, 44139, 'kill_design_steamfont_water_column', 0), + (10096, 44140, 'kill_design_teleport_spires', 0), + (10097, 44141, 'kill_design_trap_spear', 0), + (10098, 44142, 'kill_design_trap_weight', 0), + (10099, 44143, 'kill_design_vision_plane_druid_ring', 0), + (10100, 44144, 'kill_design_vortex_portal_blue', 0), + (10101, 44145, 'kill_design_vortex_portal_green', 0), + (10102, 44146, 'kill_design_vortex_portal_oval_blue', 0), + (10103, 44147, 'kill_destination', 0), + (10104, 44148, 'kill_destroy', 0), + (10105, 44149, 'kill_destroyed', 0), + (10106, 44150, 'kill_df_charge_sound', 0), + (10107, 44151, 'kill_df_hit_sound', 0), + (10108, 44152, 'kill_df_impact_sound', 0), + (10109, 44153, 'kill_df_vortex_sound', 0), + (10110, 44154, 'kill_dieyell', 0), + (10111, 44155, 'kill_dig', 0), + (10112, 44156, 'kill_dig_enter', 0), + (10113, 44157, 'kill_dig_exit', 0), + (10114, 44158, 'kill_dig_loop', 0), + (10115, 44159, 'kill_ding', 0), + (10116, 44160, 'kill_disarm_both', 0), + (10117, 44161, 'kill_disarm_left', 0), + (10118, 44162, 'kill_disarm_right', 0), + (10119, 44163, 'kill_disease', 0), + (10120, 44164, 'kill_dm_backgroundexplosions_snd', 0), + (10121, 44165, 'kill_dm_dragonform_snd', 0), + (10122, 44166, 'kill_dm_energyforce_snd', 0), + (10123, 44167, 'kill_dodge', 0), + (10124, 44168, 'kill_dodge01', 0), + (10125, 44169, 'kill_dodge02', 0), + (10126, 44170, 'kill_dodge03', 0), + (10127, 44171, 'kill_dodge1', 0), + (10128, 44172, 'kill_dodge2', 0), + (10129, 44173, 'kill_dodge3', 0), + (10130, 44174, 'kill_dodge_backhand', 0), + (10131, 44175, 'kill_dodge_down', 0), + (10132, 44176, 'kill_dodge_forehand', 0), + (10133, 44177, 'kill_dodge_thrust', 0), + (10134, 44178, 'kill_doh', 0), + (10135, 44179, 'kill_door_move', 0), + (10136, 44180, 'kill_door_slam', 0), + (10137, 44181, 'kill_doorcorner01', 0), + (10138, 44182, 'kill_doorcorner02', 0), + (10139, 44183, 'kill_doubletake', 0), + (10140, 44184, 'kill_dpsd_swordshatter.wav_snd', 0), + (10141, 44185, 'kill_dragon_e3demo', 0), + (10142, 44186, 'kill_draw_metal_weapon_snd', 0), + (10143, 44187, 'kill_draw_weapon_snd', 0), + (10144, 44188, 'kill_draw_weapon_trigger', 0), + (10145, 44189, 'kill_drinking_failure', 0), + (10146, 44190, 'kill_drinking_idle', 0), + (10147, 44191, 'kill_drinking_success', 0), + (10148, 44192, 'kill_drip01', 0), + (10149, 44193, 'kill_drip02', 0), + (10150, 44194, 'kill_dronewolf_sound', 0), + (10151, 44195, 'kill_drum_drone_snd', 0), + (10152, 44196, 'kill_drum_drum_snd', 0), + (10153, 44197, 'kill_ds_dragonspawn_sound', 0), + (10154, 44198, 'kill_ds_gashiss_snd', 0), + (10155, 44201, 'kill_dual_wield_attack_recoil', 0), + (10156, 44202, 'kill_dual_wield_attack_recoil01', 0), + (10157, 44203, 'kill_dual_wield_attack_recoil02', 0), + (10158, 44204, 'kill_dual_wield_attack_recoil03', 0), + (10159, 44205, 'kill_dual_wield_backup', 0), + (10160, 44206, 'kill_dual_wield_defensive_buff', 0), + (10161, 44207, 'kill_dual_wield_dodge_backhand', 0), + (10162, 44208, 'kill_dual_wield_dodge_down', 0), + (10163, 44209, 'kill_dual_wield_dodge_forehand', 0), + (10164, 44210, 'kill_dual_wield_dodge_thrust', 0), + (10165, 44211, 'kill_dual_wield_enter', 0), + (10166, 44212, 'kill_dual_wield_exit', 0), + (10167, 44213, 'kill_dual_wield_feint', 0), + (10168, 44214, 'kill_dual_wield_knockdowntoknees', 0), + (10169, 44215, 'kill_dual_wield_knockedtoback', 0), + (10170, 44216, 'kill_dual_wield_knockedtoback_getup', 0), + (10171, 44217, 'kill_dual_wield_offensive_buff', 0), + (10172, 44218, 'kill_dual_wield_ouch_backhand', 0), + (10173, 44219, 'kill_dual_wield_ouch_down', 0), + (10174, 44220, 'kill_dual_wield_ouch_forehand', 0), + (10175, 44221, 'kill_dual_wield_ouch_thrust', 0), + (10176, 44222, 'kill_dual_wield_parry_backhand', 0), + (10177, 44223, 'kill_dual_wield_parry_down', 0), + (10178, 44224, 'kill_dual_wield_parry_forehand', 0), + (10179, 44225, 'kill_dual_wield_parry_thrust', 0), + (10180, 44226, 'kill_dual_wield_strafe_left', 0), + (10181, 44227, 'kill_dual_wield_strafe_right', 0), + (10182, 44228, 'kill_dual_wield_super_buff', 0), + (10183, 44229, 'kill_dual_wield_taunt_combat_art', 0), + (10184, 44230, 'kill_dual_wield_walk', 0), + (10185, 44231, 'kill_duck', 0), + (10186, 44232, 'kill_duck_short', 0), + (10187, 44233, 'kill_dust_base', 0), + (10188, 44234, 'kill_dust_holster_center', 0), + (10189, 44235, 'kill_dust_holster_left', 0), + (10190, 44236, 'kill_dust_holster_right', 0), + (10191, 44237, 'kill_dust_leftfoot', 0), + (10192, 44238, 'kill_dust_lefttfoot', 0), + (10193, 44239, 'kill_dust_puff', 0), + (10194, 44240, 'kill_dust_rightfoot', 0), + (10195, 44241, 'kill_dust_righttfoot', 0), + (10196, 44242, 'kill_dw_snap_snd', 0), + (10197, 44243, 'kill_e', 0), + (10198, 44244, 'kill_eat', 0), + (10199, 44245, 'kill_ef_cast_chains_lp_snd', 0), + (10200, 44246, 'kill_ef_chains_snd', 0), + (10201, 44247, 'kill_elbow', 0), + (10202, 44248, 'kill_electric_shackles_softer_sound', 0), + (10203, 44249, 'kill_electric_shackles_sound', 0), + (10204, 44250, 'kill_end_snarl_sound', 0), + (10205, 44251, 'kill_endsplat', 0), + (10206, 44252, 'kill_enter', 0), + (10207, 44253, 'kill_es_flutecast_sound', 0), + (10208, 44254, 'kill_es_fluteresult_sound', 0), + (10209, 44255, 'kill_ew_castlp_snd', 0), + (10210, 44256, 'kill_explode01', 0), + (10211, 44257, 'kill_explode02', 0), + (10212, 44258, 'kill_explode03', 0), + (10213, 44259, 'kill_explode_big', 0), + (10214, 44260, 'kill_explosion', 0), + (10215, 44261, 'kill_eye_beam', 0), + (10216, 44262, 'kill_eye_beam_red_blue', 0), + (10217, 44263, 'kill_eyes', 0), + (10218, 44264, 'kill_f', 0), + (10219, 44265, 'kill_face_combat', 0), + (10220, 44266, 'kill_face_idle', 0), + (10221, 44267, 'kill_facial_frown', 0), + (10222, 44268, 'kill_facial_smile', 0), + (10223, 44269, 'kill_fae_dance_spark_sphere', 0), + (10224, 44270, 'kill_fae_silvani_transformation', 0), + (10225, 44271, 'kill_failure01', 0), + (10226, 44272, 'kill_failure02', 0), + (10227, 44273, 'kill_fall_enter', 0), + (10228, 44274, 'kill_fall_idle', 0), + (10229, 44275, 'kill_fall_moving', 0), + (10230, 44276, 'kill_fall_sequence', 0), + (10231, 44277, 'kill_fb_froggy01_snd', 0), + (10232, 44278, 'kill_fb_froggyform_snd', 0), + (10233, 44279, 'kill_fb_ice_explode_sound', 0), + (10234, 44280, 'kill_fbb_charge_snd', 0), + (10235, 44281, 'kill_fbb_crunches_snd', 0), + (10236, 44282, 'kill_fbb_explode_snd', 0), + (10237, 44283, 'kill_fbd_charge01_snd', 0), + (10238, 44284, 'kill_fbd_impact_snd', 0), + (10239, 44285, 'kill_fbd_precharge_snd', 0), + (10240, 44286, 'kill_fd_distort02_snd', 0), + (10241, 44287, 'kill_fd_distort_end_snd', 0), + (10242, 44288, 'kill_fd_distort_low_snd', 0), + (10243, 44289, 'kill_fd_distort_snd', 0), + (10244, 44290, 'kill_feint', 0), + (10245, 44291, 'kill_ff_explode_lp_snd', 0), + (10246, 44292, 'kill_ff_lasercloud_lp_snd', 0), + (10247, 44293, 'kill_fgdt_dust_snd', 0), + (10248, 44294, 'kill_fh_cast_sparkles_snd', 0), + (10249, 44295, 'kill_fh_end_body_fall_snd', 0), + (10250, 44296, 'kill_fh_flames_snd', 0), + (10251, 44297, 'kill_fh_hammer_appear_02_snd', 0), + (10252, 44298, 'kill_fh_hammer_appear_snd', 0), + (10253, 44299, 'kill_fh_hammer_impact_snd', 0), + (10254, 44300, 'kill_fh_hammer_whoosh_snd', 0), + (10255, 44301, 'kill_fire', 0), + (10256, 44302, 'kill_fire01', 0), + (10257, 44303, 'kill_fire02', 0), + (10258, 44304, 'kill_fire_breath', 0), + (10259, 44305, 'kill_fire_loop', 0), + (10260, 44306, 'kill_fireblast', 0), + (10261, 44307, 'kill_fishing_cast', 0), + (10262, 44308, 'kill_fishing_fight', 0), + (10263, 44309, 'kill_fishing_reel_in', 0), + (10264, 44310, 'kill_fizzle', 0), + (10265, 44311, 'kill_fkd_impact_sound', 0), + (10266, 44312, 'kill_fkd_kneebreak_sound', 0), + (10267, 44313, 'kill_fl_bckgrnd_snd', 0), + (10268, 44314, 'kill_fl_lash_snd', 0), + (10269, 44315, 'kill_fl_whiphit_snd', 0), + (10270, 44316, 'kill_flames_sound', 0), + (10271, 44317, 'kill_flash_blue', 0), + (10272, 44318, 'kill_flash_green', 0), + (10273, 44319, 'kill_flash_red', 0), + (10274, 44320, 'kill_flash_yellow', 0), + (10275, 44321, 'kill_flee', 0), + (10276, 44322, 'kill_flex', 0), + (10277, 44323, 'kill_flight_path', 0), + (10278, 44324, 'kill_flingpoo', 0), + (10279, 44325, 'kill_flirt', 0), + (10280, 44326, 'kill_flustered', 0), + (10281, 44327, 'kill_fly', 0), + (10282, 44328, 'kill_fly_attack', 0), + (10283, 44329, 'kill_fly_attack_bite', 0), + (10284, 44330, 'kill_fly_attack_breath', 0), + (10285, 44331, 'kill_fly_attack_breath_arc', 0), + (10286, 44332, 'kill_fly_dive', 0), + (10287, 44333, 'kill_fly_glide', 0), + (10288, 44334, 'kill_fly_glide2', 0), + (10289, 44335, 'kill_fly_idle', 0), + (10290, 44336, 'kill_fly_in', 0), + (10291, 44337, 'kill_fly_ouch', 0), + (10292, 44338, 'kill_fly_run', 0), + (10293, 44339, 'kill_fmba_breathattack_snd', 0), + (10294, 44340, 'kill_foostep_trigger', 0), + (10295, 44341, 'kill_foot_dust_left', 0), + (10296, 44342, 'kill_foot_dust_right', 0), + (10297, 44343, 'kill_foot_shake', 0), + (10298, 44344, 'kill_footste_trigger', 0), + (10299, 44345, 'kill_footstep', 0), + (10300, 44346, 'kill_footstep_chainmail_carpet', 0), + (10301, 44347, 'kill_footstep_chainmail_dirt', 0), + (10302, 44348, 'kill_footstep_chainmail_grass', 0), + (10303, 44349, 'kill_footstep_chainmail_gravel', 0), + (10304, 44350, 'kill_footstep_chainmail_ice', 0), + (10305, 44351, 'kill_footstep_chainmail_metal', 0), + (10306, 44352, 'kill_footstep_chainmail_mud', 0), + (10307, 44353, 'kill_footstep_chainmail_sand', 0), + (10308, 44354, 'kill_footstep_chainmail_snow', 0), + (10309, 44355, 'kill_footstep_chainmail_stone', 0), + (10310, 44356, 'kill_footstep_chainmail_water', 0), + (10311, 44357, 'kill_footstep_chainmail_wood', 0), + (10312, 44358, 'kill_footstep_leather_carpet', 0), + (10313, 44359, 'kill_footstep_leather_dirt', 0), + (10314, 44360, 'kill_footstep_leather_grass', 0), + (10315, 44361, 'kill_footstep_leather_gravel', 0), + (10316, 44362, 'kill_footstep_leather_ice', 0), + (10317, 44363, 'kill_footstep_leather_metal', 0), + (10318, 44364, 'kill_footstep_leather_mud', 0), + (10319, 44365, 'kill_footstep_leather_sand', 0), + (10320, 44366, 'kill_footstep_leather_snow', 0), + (10321, 44367, 'kill_footstep_leather_stone', 0), + (10322, 44368, 'kill_footstep_leather_water', 0), + (10323, 44369, 'kill_footstep_leather_wood', 0), + (10324, 44370, 'kill_footstep_metal_carpet', 0), + (10325, 44371, 'kill_footstep_metal_dirt', 0), + (10326, 44372, 'kill_footstep_metal_grass', 0), + (10327, 44373, 'kill_footstep_metal_gravel', 0), + (10328, 44374, 'kill_footstep_metal_ice', 0), + (10329, 44375, 'kill_footstep_metal_metal', 0), + (10330, 44376, 'kill_footstep_metal_mud', 0), + (10331, 44377, 'kill_footstep_metal_sand', 0), + (10332, 44378, 'kill_footstep_metal_snow', 0), + (10333, 44379, 'kill_footstep_metal_stone', 0), + (10334, 44380, 'kill_footstep_metal_water', 0), + (10335, 44381, 'kill_footstep_metal_wood', 0), + (10336, 44382, 'kill_footstep_trigger', 0), + (10337, 44383, 'kill_forest_flare', 0), + (10338, 44384, 'kill_forestry_chopping', 0), + (10339, 44385, 'kill_four_rings', 0), + (10340, 44386, 'kill_four_rings_fail', 0), + (10341, 44387, 'kill_frog_attack_01', 0), + (10342, 44388, 'kill_frog_hit', 0), + (10343, 44389, 'kill_frog_ouch', 0), + (10344, 44390, 'kill_frog_squish_01', 0), + (10345, 44391, 'kill_frog_squish_02', 0), + (10346, 44392, 'kill_frog_squish_03', 0), + (10347, 44393, 'kill_frog_tongue_01', 0), + (10348, 44394, 'kill_frog_tongueslime_01', 0), + (10349, 44395, 'kill_frog_whoosh_01', 0), + (10350, 44396, 'kill_frustrated', 0), + (10351, 44397, 'kill_fs_cast_flame_snd', 0), + (10352, 44398, 'kill_fs_endfire_snd', 0), + (10353, 44399, 'kill_fs_firefall_snd', 0), + (10354, 44400, 'kill_fs_whoosh_snd', 0), + (10355, 44401, 'kill_fullcurtsey', 0), + (10356, 44402, 'kill_fusion_bubbly_snd', 0), + (10357, 44403, 'kill_fusion_cast_snd', 0), + (10358, 44404, 'kill_gc_boneburs_snd', 0), + (10359, 44405, 'kill_gc_castcharge_snd', 0), + (10360, 44406, 'kill_gc_result_snd', 0), + (10361, 44407, 'kill_gc_screams_snd', 0), + (10362, 44408, 'kill_gem_glow', 0), + (10363, 44409, 'kill_gemsparkle', 0), + (10364, 44410, 'kill_gemsparkle_fail1', 0), + (10365, 44411, 'kill_gemsparkle_fail2', 0), + (10366, 44412, 'kill_gemsparkle_go', 0), + (10367, 44413, 'kill_ghost_carpet', 0), + (10368, 44414, 'kill_ghost_die', 0), + (10369, 44415, 'kill_ghost_loop', 0), + (10370, 44416, 'kill_giggle', 0), + (10371, 44417, 'kill_glare', 0), + (10372, 44418, 'kill_glide', 0), + (10373, 44419, 'kill_glow', 0), + (10374, 44420, 'kill_glow_top', 0), + (10375, 44421, 'kill_go', 0), + (10376, 44422, 'kill_go_down', 0), + (10377, 44423, 'kill_green_fire', 0), + (10378, 44424, 'kill_green_smoke', 0), + (10379, 44425, 'kill_griffin_idle', 0), + (10380, 44426, 'kill_griffin_run', 0), + (10381, 44427, 'kill_griffin_walk', 0), + (10382, 44428, 'kill_group_chargeswordglint_sound', 0), + (10383, 44429, 'kill_group_cloud_sound', 0), + (10384, 44430, 'kill_group_electricend_sound', 0), + (10385, 44431, 'kill_grumble', 0), + (10386, 44432, 'kill_gutcramp', 0), + (10387, 44433, 'kill_gw_chargeup_snd', 0), + (10388, 44434, 'kill_gw_grantwish_snd', 0), + (10389, 44435, 'kill_gw_impact_sound', 0), + (10390, 44436, 'kill_happy', 0), + (10391, 44437, 'kill_harpy_fire_snd', 0), + (10392, 44438, 'kill_harpy_spin_snd', 0), + (10393, 44439, 'kill_haste_sparkles_snd', 0), + (10394, 44440, 'kill_haste_swirl_snd', 0), + (10395, 44441, 'kill_haste_swords_snd', 0), + (10396, 44442, 'kill_head_tracking_off_trigger', 0), + (10397, 44443, 'kill_hearnoevil', 0), + (10398, 44444, 'kill_heartattack', 0), + (10399, 44445, 'kill_heat_shimmer', 0), + (10400, 44446, 'kill_heavydamage_enter', 0), + (10401, 44447, 'kill_heavydamage_idle', 0), + (10402, 44448, 'kill_heckno', 0), + (10403, 44449, 'kill_heelclick', 0), + (10404, 44450, 'kill_hello', 0), + (10405, 44451, 'kill_heroic_sound', 0), + (10406, 44452, 'kill_hide', 0), + (10407, 44453, 'kill_hide_melee_projectile_trigger', 0), + (10408, 44454, 'kill_hit_02', 0), + (10409, 44455, 'kill_hit_chainmail_snd', 0), + (10410, 44456, 'kill_hit_cloth_snd', 0), + (10411, 44457, 'kill_hit_leather_snd', 0), + (10412, 44458, 'kill_hit_metal_chainmail_snd', 0), + (10413, 44459, 'kill_hit_metal_cloth_snd', 0), + (10414, 44460, 'kill_hit_metal_leather_snd', 0), + (10415, 44461, 'kill_hit_metal_metal_snd', 0), + (10416, 44462, 'kill_hit_metal_skin_snd', 0), + (10417, 44463, 'kill_hit_metal_snd', 0), + (10418, 44464, 'kill_hit_shake', 0), + (10419, 44465, 'kill_hit_skin_chainmail_snd', 0), + (10420, 44466, 'kill_hit_skin_cloth_snd', 0), + (10421, 44467, 'kill_hit_skin_leather_snd', 0), + (10422, 44468, 'kill_hit_skin_metal_snd', 0), + (10423, 44469, 'kill_hit_skin_skin_snd', 0), + (10424, 44470, 'kill_hit_skin_snd', 0), + (10425, 44471, 'kill_hit_snd', 0), + (10426, 44472, 'kill_hit_target_tigger', 0), + (10427, 44473, 'kill_hit_target_trigger', 0), + (10428, 44474, 'kill_hit_wood_chainmail_snd', 0), + (10429, 44475, 'kill_hit_wood_cloth_snd', 0), + (10430, 44476, 'kill_hit_wood_leather_snd', 0), + (10431, 44477, 'kill_hit_wood_metal_snd', 0), + (10432, 44478, 'kill_hit_wood_skin_snd', 0), + (10433, 44479, 'kill_hitonhead_sound', 0), + (10434, 44480, 'kill_horse_fall', 0), + (10435, 44481, 'kill_horse_jump', 0), + (10436, 44482, 'kill_horse_land', 0), + (10437, 44483, 'kill_horse_run', 0), + (10438, 44484, 'kill_horse_tail', 0), + (10439, 44485, 'kill_horse_walk', 0), + (10440, 44486, 'kill_howl', 0), + (10441, 44487, 'kill_hr_ghost_gallop_snd', 0), + (10442, 44488, 'kill_hr_whiney_snd', 0), + (10443, 44489, 'kill_hrb_endruneblur_sound', 0), + (10444, 44490, 'kill_hro_heal_snd', 0), + (10445, 44491, 'kill_hro_runeorbit_snd', 0), + (10446, 44492, 'kill_hungry', 0), + (10447, 44493, 'kill_ic_fragments_snd', 0), + (10448, 44494, 'kill_ic_ice_bkgrnd_sound', 0), + (10449, 44495, 'kill_ic_ice_spike_sound', 0), + (10450, 44496, 'kill_idle03', 0), + (10451, 44497, 'kill_idle04', 0), + (10452, 44498, 'kill_idle_01', 0), + (10453, 44499, 'kill_idle_bark', 0), + (10454, 44500, 'kill_idle_break', 0), + (10455, 44501, 'kill_idle_e3', 0), + (10456, 44502, 'kill_idle_pant', 0), + (10457, 44503, 'kill_idle_sniff', 0), + (10458, 44504, 'kill_idle_snort', 0), + (10459, 44505, 'kill_idle_static', 0), + (10460, 44506, 'kill_idle_step', 0), + (10461, 44507, 'kill_idle_vocal', 0), + (10462, 44508, 'kill_idletiming_a', 0), + (10463, 44509, 'kill_idletiming_b', 0), + (10464, 44510, 'kill_idletiming_c', 0), + (10465, 44511, 'kill_idletiming_d', 0), + (10466, 44512, 'kill_idletiming_e', 0), + (10467, 44513, 'kill_idletiming_g', 0), + (10468, 44514, 'kill_idletiming_h', 0), + (10469, 44515, 'kill_idletiming_i', 0), + (10470, 44516, 'kill_ignite_weapon_sh', 0), + (10471, 44517, 'kill_ilt_tap_snd', 0), + (10472, 44518, 'kill_inhale', 0), + (10473, 44520, 'kill_int_cast_lp_snd', 0), + (10474, 44521, 'kill_int_cast_sparkles_lp', 0), + (10475, 44522, 'kill_int_float_sound', 0), + (10476, 44523, 'kill_int_intglow_sound', 0), + (10477, 44524, 'kill_itch', 0), + (10478, 44525, 'kill_jump', 0), + (10479, 44526, 'kill_jump_moving', 0), + (10480, 44527, 'kill_jump_substitute', 0), + (10481, 44528, 'kill_kettle01', 0), + (10482, 44529, 'kill_kick', 0), + (10483, 44530, 'kill_kiss', 0), + (10484, 44531, 'kill_knockdown_attack', 0), + (10485, 44532, 'kill_knockdowntoknees', 0), + (10486, 44533, 'kill_knockdowntokness', 0), + (10487, 44534, 'kill_knockdwontoknees', 0), + (10488, 44535, 'kill_knockedtoback', 0), + (10489, 44536, 'kill_knockedtoback_getup', 0), + (10490, 44537, 'kill_knockedtoback_onbackidle', 0), + (10491, 44538, 'kill_knockedtoknees', 0), + (10492, 44539, 'kill_knockedtokness', 0), + (10493, 44540, 'kill_knocktoknees', 0), + (10494, 44541, 'kill_l', 0), + (10495, 44542, 'kill_la_lion_roar_02_snd', 0), + (10496, 44543, 'kill_la_lion_roar_snd', 0), + (10497, 44544, 'kill_land', 0), + (10498, 44545, 'kill_land_thud', 0), + (10499, 44546, 'kill_landing', 0), + (10500, 44547, 'kill_launch_melee_projectile_trigger', 0), + (10501, 44548, 'kill_lb2_zap_snd', 0), + (10502, 44549, 'kill_lb_cloud_sound', 0), + (10503, 44550, 'kill_lb_volts_sound', 0), + (10504, 44551, 'kill_leatherworking_failure', 0), + (10505, 44552, 'kill_leatherworking_idle', 0), + (10506, 44553, 'kill_leatherworking_success', 0), + (10507, 44554, 'kill_left_hand_fist', 0), + (10508, 44555, 'kill_left_hand_relaxed', 0), + (10509, 44556, 'kill_level_up3d_sound', 0), + (10510, 44557, 'kill_light_torch', 0), + (10511, 44558, 'kill_lightdamage_enter', 0), + (10512, 44559, 'kill_lightdamage_idle', 0), + (10513, 44560, 'kill_lightning_spheres', 0), + (10514, 44561, 'kill_listen', 0), + (10515, 44562, 'kill_long_fall', 0), + (10516, 44563, 'kill_long_fall_moving', 0), + (10517, 44564, 'kill_lookaway', 0), + (10518, 44565, 'kill_lr_castlion_snd', 0), + (10519, 44566, 'kill_lr_growl_snd', 0), + (10520, 44567, 'kill_lt_suck2_snd', 0), + (10521, 44568, 'kill_lt_suck_snd', 0), + (10522, 44569, 'kill_lucan_lightning_bolt', 0), + (10523, 44570, 'kill_lvlup_achievment_snd', 0), + (10524, 44571, 'kill_m', 0), + (10525, 44572, 'kill_mc_castend_snd', 0), + (10526, 44573, 'kill_mc_castopen_snd', 0), + (10527, 44574, 'kill_mc_manna_channel_snd', 0), + (10528, 44575, 'kill_mc_resultwhip_snd', 0), + (10529, 44576, 'kill_mcp_shield', 0), + (10530, 44577, 'kill_mediumdamage_enter', 0), + (10531, 44578, 'kill_mediumdamage_idle', 0), + (10532, 44579, 'kill_metalworking_failure', 0), + (10533, 44580, 'kill_metalworking_idle', 0), + (10534, 44581, 'kill_metalworking_success', 0), + (10535, 44582, 'kill_miss_target_tigger', 0), + (10536, 44583, 'kill_miss_target_trigger', 0), + (10537, 44584, 'kill_molten_metal', 0), + (10538, 44585, 'kill_monk_attack_recoil', 0), + (10539, 44586, 'kill_monk_attack_recoil01', 0), + (10540, 44587, 'kill_monk_attack_recoil02', 0), + (10541, 44588, 'kill_monk_attack_recoil03', 0), + (10542, 44589, 'kill_monk_backup', 0), + (10543, 44590, 'kill_monk_charge_up', 0), + (10544, 44591, 'kill_monk_defensive_buff', 0), + (10545, 44592, 'kill_monk_dodge_forehand', 0), + (10546, 44593, 'kill_monk_dodge_thrust', 0), + (10547, 44594, 'kill_monk_enter', 0), + (10548, 44595, 'kill_monk_exit', 0), + (10549, 44596, 'kill_monk_feint', 0), + (10550, 44597, 'kill_monk_idle01', 0), + (10551, 44598, 'kill_monk_kick', 0), + (10552, 44599, 'kill_monk_kick_flying', 0), + (10553, 44600, 'kill_monk_kick_spin', 0), + (10554, 44601, 'kill_monk_knockdowntoknees', 0), + (10555, 44602, 'kill_monk_knockedtoback', 0), + (10556, 44603, 'kill_monk_knockedtoback_getup', 0), + (10557, 44604, 'kill_monk_offensive_buff', 0), + (10558, 44605, 'kill_monk_ouch_backhand', 0), + (10559, 44606, 'kill_monk_ouch_down', 0), + (10560, 44607, 'kill_monk_ouch_forehand', 0), + (10561, 44608, 'kill_monk_ouch_thrust', 0), + (10562, 44609, 'kill_monk_parry_backhand', 0), + (10563, 44610, 'kill_monk_parry_down', 0), + (10564, 44611, 'kill_monk_parry_forehand', 0), + (10565, 44612, 'kill_monk_parry_thrust', 0), + (10566, 44613, 'kill_monk_strafe_left', 0), + (10567, 44614, 'kill_monk_strafe_right', 0), + (10568, 44615, 'kill_monk_super_buff', 0), + (10569, 44616, 'kill_monk_taunt_combat_art', 0), + (10570, 44617, 'kill_monk_walk', 0), + (10571, 44618, 'kill_monk_whirling_attack', 0), + (10572, 44619, 'kill_mood_afraid', 0), + (10573, 44620, 'kill_mood_angry', 0), + (10574, 44621, 'kill_mood_combat', 0), + (10575, 44622, 'kill_mood_happy', 0), + (10576, 44623, 'kill_mood_idle', 0), + (10577, 44624, 'kill_mood_sad', 0), + (10578, 44625, 'kill_mood_tired', 0), + (10579, 44626, 'kill_moon', 0), + (10580, 44627, 'kill_mount', 0), + (10581, 44628, 'kill_mr_chomp', 0), + (10582, 44629, 'kill_mr_curl', 0), + (10583, 44630, 'kill_mr_death_yell', 0), + (10584, 44631, 'kill_mr_fall', 0), + (10585, 44632, 'kill_mr_growl', 0), + (10586, 44633, 'kill_mr_land', 0), + (10587, 44634, 'kill_mr_ouch_01', 0), + (10588, 44635, 'kill_mr_run_01', 0), + (10589, 44636, 'kill_myst_caststars_snd', 0), + (10590, 44637, 'kill_myst_caststarsresult_snd', 0), + (10591, 44638, 'kill_myst_stars_snd', 0), + (10592, 44639, 'kill_nb_burn_01_snd', 0), + (10593, 44640, 'kill_nb_burst_02_snd', 0), + (10594, 44641, 'kill_nb_burst_snd', 0), + (10595, 44642, 'kill_nb_castmagic_snd', 0), + (10596, 44643, 'kill_nb_handsparks_long_snd', 0), + (10597, 44644, 'kill_nb_handsparks_louder_snd', 0), + (10598, 44645, 'kill_nb_handsparks_snd', 0), + (10599, 44646, 'kill_nbgroup_castmagic_snd', 0), + (10600, 44647, 'kill_needle01', 0), + (10601, 44648, 'kill_neener', 0), + (10602, 44649, 'kill_no', 0), + (10603, 44650, 'kill_nod', 0), + (10604, 44651, 'kill_o', 0), + (10605, 44652, 'kill_off_combat', 0), + (10606, 44653, 'kill_off_enter', 0), + (10607, 44654, 'kill_off_exit', 0), + (10608, 44655, 'kill_off_idle', 0), + (10609, 44656, 'kill_off_peace', 0), + (10610, 44657, 'kill_off_sit', 0), + (10611, 44658, 'kill_offensive_buff', 0), + (10612, 44659, 'kill_one_ring', 0), + (10613, 44660, 'kill_one_ring_fail', 0), + (10614, 44661, 'kill_oov_bubbles_snd', 0), + (10615, 44662, 'kill_oov_effect_short_snd', 0), + (10616, 44663, 'kill_oov_effect_snd', 0), + (10617, 44664, 'kill_oov_heal_snd', 0), + (10618, 44665, 'kill_open', 0), + (10619, 44666, 'kill_open_coins_and_jewels', 0), + (10620, 44667, 'kill_open_coins_copper', 0), + (10621, 44668, 'kill_open_coins_gold', 0), + (10622, 44669, 'kill_open_coins_silver', 0), + (10623, 44670, 'kill_open_glow', 0), + (10624, 44671, 'kill_opened', 0), + (10625, 44672, 'kill_opened_coins_and_jewels', 0), + (10626, 44673, 'kill_opened_coins_copper', 0), + (10627, 44674, 'kill_opened_coins_gold', 0), + (10628, 44675, 'kill_opened_coins_silver', 0), + (10629, 44676, 'kill_opened_glow', 0), + (10630, 44677, 'kill_orate', 0), + (10631, 44678, 'kill_other_idle', 0), + (10632, 44679, 'kill_ouch', 0), + (10633, 44680, 'kill_ouch+forehand', 0), + (10634, 44681, 'kill_ouch01', 0), + (10635, 44682, 'kill_ouch01_01', 0), + (10636, 44683, 'kill_ouch02', 0), + (10637, 44684, 'kill_ouch02_01', 0), + (10638, 44685, 'kill_ouch03', 0), + (10639, 44686, 'kill_ouch03_01', 0), + (10640, 44687, 'kill_ouch04', 0), + (10641, 44688, 'kill_ouch_01', 0), + (10642, 44689, 'kill_ouch_backhand', 0), + (10643, 44690, 'kill_ouch_backhand_01', 0), + (10644, 44691, 'kill_ouch_bakchand', 0), + (10645, 44692, 'kill_ouch_big', 0), + (10646, 44693, 'kill_ouch_chips', 0), + (10647, 44694, 'kill_ouch_down', 0), + (10648, 44695, 'kill_ouch_down_01', 0), + (10649, 44696, 'kill_ouch_forehand', 0), + (10650, 44697, 'kill_ouch_forehand_01', 0), + (10651, 44698, 'kill_ouch_fx', 0), + (10652, 44699, 'kill_ouch_fx2', 0), + (10653, 44700, 'kill_ouch_headshake01', 0), + (10654, 44701, 'kill_ouch_medium', 0), + (10655, 44702, 'kill_ouch_medium_big', 0), + (10656, 44703, 'kill_ouch_oil_drip', 0), + (10657, 44704, 'kill_ouch_parts', 0), + (10658, 44705, 'kill_ouch_roar01', 0), + (10659, 44706, 'kill_ouch_scream', 0), + (10660, 44707, 'kill_ouch_small', 0), + (10661, 44708, 'kill_ouch_sound', 0), + (10662, 44709, 'kill_ouch_spurt_chest', 0), + (10663, 44710, 'kill_ouch_spurt_pelvis', 0), + (10664, 44711, 'kill_ouch_tail', 0), + (10665, 44712, 'kill_ouch_tail02', 0), + (10666, 44713, 'kill_ouch_thrust', 0), + (10667, 44714, 'kill_ouch_thrust_01', 0), + (10668, 44715, 'kill_ouchdown', 0), + (10669, 44716, 'kill_ouchtiming_a', 0), + (10670, 44717, 'kill_ouchtiming_b', 0), + (10671, 44718, 'kill_ouchtiming_c', 0), + (10672, 44719, 'kill_oven_door', 0), + (10673, 44720, 'kill_overhere', 0), + (10674, 44721, 'kill_parry', 0), + (10675, 44722, 'kill_parry01', 0), + (10676, 44723, 'kill_parry02', 0), + (10677, 44724, 'kill_parry03', 0), + (10678, 44725, 'kill_parry_metal_metal_snd', 0), + (10679, 44726, 'kill_parry_metal_skin_snd', 0), + (10680, 44727, 'kill_parry_metal_wood_snd', 0), + (10681, 44728, 'kill_parry_skin_metal_snd', 0), + (10682, 44729, 'kill_parry_skin_skin_snd', 0), + (10683, 44730, 'kill_parry_skin_wood_snd', 0), + (10684, 44731, 'kill_parry_snd', 0), + (10685, 44732, 'kill_parry_target_tigger', 0), + (10686, 44733, 'kill_parry_target_trigger', 0), + (10687, 44734, 'kill_parry_wood_metal_snd', 0), + (10688, 44735, 'kill_parry_wood_skin_snd', 0), + (10689, 44736, 'kill_parry_wood_wood_snd', 0), + (10690, 44737, 'kill_particle_mood_combat', 0), + (10691, 44738, 'kill_particle_mood_dead', 0), + (10692, 44739, 'kill_particle_mood_peace', 0), + (10693, 44740, 'kill_pbae_divine_snd', 0), + (10694, 44741, 'kill_peace_combat', 0), + (10695, 44742, 'kill_peace_fx', 0), + (10696, 44743, 'kill_peace_off', 0), + (10697, 44744, 'kill_peer', 0), + (10698, 44745, 'kill_pen01', 0), + (10699, 44746, 'kill_pf_endsplash_snd', 0), + (10700, 44747, 'kill_pf_pwrcast_snd', 0), + (10701, 44748, 'kill_pf_pwrrslt_snd', 0), + (10702, 44749, 'kill_pike_attack03', 0), + (10703, 44750, 'kill_pike_attack04', 0), + (10704, 44751, 'kill_pike_attack_recoil', 0), + (10705, 44752, 'kill_pike_attack_recoil01', 0), + (10706, 44753, 'kill_pike_attack_recoil02', 0), + (10707, 44754, 'kill_pike_attack_recoil03', 0), + (10708, 44755, 'kill_pike_backup', 0), + (10709, 44756, 'kill_pike_charge_up', 0), + (10710, 44757, 'kill_pike_death_blow', 0), + (10711, 44758, 'kill_pike_defensive_buff', 0), + (10712, 44759, 'kill_pike_dodge_backhand', 0), + (10713, 44760, 'kill_pike_dodge_down', 0), + (10714, 44761, 'kill_pike_dodge_forehand', 0), + (10715, 44762, 'kill_pike_dodge_thrust', 0), + (10716, 44763, 'kill_pike_enter', 0), + (10717, 44764, 'kill_pike_exit', 0), + (10718, 44765, 'kill_pike_feint', 0), + (10719, 44766, 'kill_pike_idle01', 0), + (10720, 44767, 'kill_pike_knockdowntoknees', 0), + (10721, 44768, 'kill_pike_knockedtoback', 0), + (10722, 44769, 'kill_pike_knockedtoback_getup', 0), + (10723, 44770, 'kill_pike_offensive_buff', 0), + (10724, 44771, 'kill_pike_ouch01_backhand', 0), + (10725, 44772, 'kill_pike_ouch02_down', 0), + (10726, 44773, 'kill_pike_ouch_backhand', 0), + (10727, 44774, 'kill_pike_ouch_down', 0), + (10728, 44775, 'kill_pike_ouch_forehand', 0), + (10729, 44776, 'kill_pike_ouch_thrust', 0), + (10730, 44777, 'kill_pike_parry_backhand', 0), + (10731, 44778, 'kill_pike_parry_down', 0), + (10732, 44779, 'kill_pike_parry_forehand', 0), + (10733, 44780, 'kill_pike_parry_thrust', 0), + (10734, 44781, 'kill_pike_strafe_left', 0), + (10735, 44782, 'kill_pike_strafe_right', 0), + (10736, 44783, 'kill_pike_super_buff', 0), + (10737, 44784, 'kill_pike_taunt', 0), + (10738, 44785, 'kill_pike_walk', 0), + (10739, 44786, 'kill_pl_lightning_01_snd', 0), + (10740, 44787, 'kill_pl_lightning_02_snd', 0), + (10741, 44788, 'kill_pl_lightning_03_snd', 0), + (10742, 44789, 'kill_pl_warp_01_snd', 0), + (10743, 44790, 'kill_planer', 0), + (10744, 44791, 'kill_plummet', 0), + (10745, 44792, 'kill_pn_castflute_sound', 0), + (10746, 44793, 'kill_pn_resultflute_sound', 0), + (10747, 44794, 'kill_pof_batdrone_snd', 0), + (10748, 44795, 'kill_pof_casttone_snd', 0), + (10749, 44796, 'kill_point', 0), + (10750, 44797, 'kill_point_right', 0), + (10751, 44798, 'kill_ponder', 0), + (10752, 44799, 'kill_pout', 0), + (10753, 44800, 'kill_pp_casthi_snd', 0), + (10754, 44801, 'kill_pp_stab_snd', 0), + (10755, 44802, 'kill_ps_caststream_snd', 0), + (10756, 44803, 'kill_ps_resultfx_snd', 0), + (10757, 44804, 'kill_pugilist_attack01', 0), + (10758, 44805, 'kill_pugilist_attack03', 0), + (10759, 44806, 'kill_pugilist_attack_recoil', 0), + (10760, 44807, 'kill_pugilist_attack_recoil01', 0), + (10761, 44808, 'kill_pugilist_attack_recoil02', 0), + (10762, 44809, 'kill_pugilist_attack_recoil03', 0), + (10763, 44810, 'kill_pugilist_backup', 0), + (10764, 44811, 'kill_pugilist_charge_up', 0), + (10765, 44812, 'kill_pugilist_defensive_buff', 0), + (10766, 44813, 'kill_pugilist_dodge', 0), + (10767, 44814, 'kill_pugilist_dodge01', 0), + (10768, 44815, 'kill_pugilist_dodge02', 0), + (10769, 44816, 'kill_pugilist_dodge_backhand', 0), + (10770, 44817, 'kill_pugilist_dodge_down', 0), + (10771, 44818, 'kill_pugilist_dodge_forehand', 0), + (10772, 44819, 'kill_pugilist_dodge_thrust', 0), + (10773, 44820, 'kill_pugilist_enter', 0), + (10774, 44821, 'kill_pugilist_exit', 0), + (10775, 44822, 'kill_pugilist_feint', 0), + (10776, 44823, 'kill_pugilist_knockdowntoknees', 0), + (10777, 44824, 'kill_pugilist_knockedtoback', 0), + (10778, 44825, 'kill_pugilist_knockedtoback_getup', 0), + (10779, 44826, 'kill_pugilist_offensive_buff', 0), + (10780, 44827, 'kill_pugilist_ouch', 0), + (10781, 44828, 'kill_pugilist_ouch01', 0), + (10782, 44829, 'kill_pugilist_ouch_backhand', 0), + (10783, 44830, 'kill_pugilist_ouch_down', 0), + (10784, 44831, 'kill_pugilist_ouch_forehand', 0), + (10785, 44832, 'kill_pugilist_ouch_thrust', 0), + (10786, 44833, 'kill_pugilist_parry', 0), + (10787, 44834, 'kill_pugilist_parry_backhand', 0), + (10788, 44835, 'kill_pugilist_parry_down', 0), + (10789, 44836, 'kill_pugilist_parry_forehand', 0), + (10790, 44837, 'kill_pugilist_parry_thrust', 0), + (10791, 44838, 'kill_pugilist_recoil', 0), + (10792, 44839, 'kill_pugilist_strafe_left', 0), + (10793, 44840, 'kill_pugilist_strafe_right', 0), + (10794, 44841, 'kill_pugilist_super_buff', 0), + (10795, 44842, 'kill_pugilist_taunt', 0), + (10796, 44843, 'kill_pugilist_walk', 0), + (10797, 44844, 'kill_pv_pet_victory_snd', 0), + (10798, 44845, 'kill_quality_down', 0), + (10799, 44846, 'kill_quality_up', 0), + (10800, 44847, 'kill_quest_complete', 0), + (10801, 44848, 'kill_rain', 0), + (10802, 44849, 'kill_raisehand', 0), + (10803, 44850, 'kill_rays', 0), + (10804, 44851, 'kill_rb_p2pcast_snd', 0), + (10805, 44852, 'kill_rb_p2pstream_snd', 0), + (10806, 44853, 'kill_rc_leaves_01_snd', 0), + (10807, 44854, 'kill_rc_roots_grow_01_snd', 0), + (10808, 44855, 'kill_rct_endblast_sound', 0), + (10809, 44856, 'kill_rct_endtones_sound', 0), + (10810, 44857, 'kill_rebirth_sound_01', 0), + (10811, 44858, 'kill_red_nose', 0), + (10812, 44859, 'kill_resilt_end_sound', 0), + (10813, 44860, 'kill_rest', 0), + (10814, 44861, 'kill_result_bladebarrier', 0), + (10815, 44862, 'kill_result_camera_shake2_snd', 0), + (10816, 44863, 'kill_result_camera_shake_snd', 0), + (10817, 44864, 'kill_result_chain_lightning_p2p', 0), + (10818, 44865, 'kill_result_charge1_sh', 0), + (10819, 44866, 'kill_result_charge_sh', 0), + (10820, 44867, 'kill_result_copter_flamethrower', 0), + (10821, 44868, 'kill_result_dawn_rising', 0), + (10822, 44869, 'kill_result_dragon_fire_spiral', 0), + (10823, 44870, 'kill_result_dragon_shield_fire', 0), + (10824, 44871, 'kill_result_dragon_shield_lightning', 0), + (10825, 44872, 'kill_result_dragon_shield_lightning_02a', 0), + (10826, 44873, 'kill_result_dragon_shield_lightning_02b', 0), + (10827, 44874, 'kill_result_dragon_shield_lightning_02c', 0), + (10828, 44875, 'kill_result_dust_blast_heavy', 0), + (10829, 44876, 'kill_result_feather_explosion', 0), + (10830, 44877, 'kill_result_flash_dragon', 0), + (10831, 44878, 'kill_result_fog', 0), + (10832, 44879, 'kill_result_fog_low', 0), + (10833, 44880, 'kill_result_fog_low_small', 0), + (10834, 44881, 'kill_result_fog_poison', 0), + (10835, 44882, 'kill_result_fog_poison_4x10', 0), + (10836, 44883, 'kill_result_fog_poison_low', 0), + (10837, 44884, 'kill_result_fog_poison_low_small', 0), + (10838, 44885, 'kill_result_fog_poison_small', 0), + (10839, 44886, 'kill_result_fog_small', 0), + (10840, 44887, 'kill_result_forced_shader_dark_dragon', 0), + (10841, 44888, 'kill_result_forced_shader_electric_dragon', 0), + (10842, 44889, 'kill_result_forced_shader_fire_dragon', 0), + (10843, 44890, 'kill_result_forced_shader_ice_dragon', 0), + (10844, 44891, 'kill_result_froglok_bauble', 0), + (10845, 44892, 'kill_result_glint2_sh', 0), + (10846, 44893, 'kill_result_knighthood_bauble', 0), + (10847, 44894, 'kill_result_lightning_bolt1_snd', 0), + (10848, 44895, 'kill_result_mend_synth_sound', 0), + (10849, 44896, 'kill_result_protection_of_twilight', 0), + (10850, 44897, 'kill_result_recharging_station_effect', 0), + (10851, 44898, 'kill_result_rune_awakened', 0), + (10852, 44899, 'kill_result_sparkles_clinging_dragon', 0), + (10853, 44900, 'kill_result_sparkles_clinging_soft_dragon', 0), + (10854, 44901, 'kill_result_sun_sphere', 0), + (10855, 44902, 'kill_result_twinkle_01', 0), + (10856, 44903, 'kill_result_weakness_disk_blue', 0), + (10857, 44904, 'kill_result_weakness_disk_green', 0), + (10858, 44905, 'kill_result_weakness_disk_purple', 0), + (10859, 44906, 'kill_result_weakness_disk_red', 0), + (10860, 44907, 'kill_result_weakness_disk_yellow', 0), + (10861, 44908, 'kill_result_windrazor', 0), + (10862, 44909, 'kill_result_wood_chips', 0), + (10863, 44910, 'kill_resurrect', 0), + (10864, 44911, 'kill_right_hand_fist', 0), + (10865, 44912, 'kill_right_hand_relaxed', 0), + (10866, 44913, 'kill_righthand_impact', 0), + (10867, 44914, 'kill_ring_glints', 0), + (10868, 44915, 'kill_ring_glints2', 0), + (10869, 44916, 'kill_ring_glints_idle', 0), + (10870, 44917, 'kill_rofl', 0), + (10871, 44918, 'kill_royalwave', 0), + (10872, 44919, 'kill_rt_drone_snd', 0), + (10873, 44920, 'kill_rt_tune_snd', 0), + (10874, 44921, 'kill_rude', 0), + (10875, 44923, 'kill_runes', 0), + (10876, 44924, 'kill_sa_bones_sound', 0), + (10877, 44925, 'kill_sa_flash01_snd', 0), + (10878, 44926, 'kill_sa_flash02_snd', 0), + (10879, 44927, 'kill_sa_flash03_snd', 0), + (10880, 44928, 'kill_sa_rattle_01_snd', 0), + (10881, 44929, 'kill_sa_skelattack_snd', 0), + (10882, 44930, 'kill_sa_skeldance_snd', 0), + (10883, 44931, 'kill_sa_snakespawn_snd', 0), + (10884, 44932, 'kill_sa_spiritappear_snd', 0), + (10885, 44933, 'kill_sa_strike_snd', 0), + (10886, 44934, 'kill_sad', 0), + (10887, 44935, 'kill_salute', 0), + (10888, 44936, 'kill_salute_freeport', 0), + (10889, 44937, 'kill_sanc_castlp_snd', 0), + (10890, 44938, 'kill_sanc_pulse_01_sound', 0), + (10891, 44939, 'kill_sanc_pulse_02_sound', 0), + (10892, 44940, 'kill_sarcasm', 0), + (10893, 44941, 'kill_saw01', 0), + (10894, 44942, 'kill_saw02', 0), + (10895, 44943, 'kill_saw_sparks_front', 0), + (10896, 44944, 'kill_saw_sparks_inside', 0), + (10897, 44945, 'kill_saw_sparks_outside', 0), + (10898, 44946, 'kill_sb_skelcast_sound', 0), + (10899, 44947, 'kill_sb_skeleton_sound', 0), + (10900, 44948, 'kill_sc_impact_snd', 0), + (10901, 44949, 'kill_sc_swipe_snd', 0), + (10902, 44950, 'kill_scheme', 0), + (10903, 44951, 'kill_scims_scimitar_snd', 0), + (10904, 44952, 'kill_scims_swordswipe_snd', 0), + (10905, 44953, 'kill_scims_whoosh_snd', 0), + (10906, 44954, 'kill_scissors01', 0), + (10907, 44955, 'kill_scold', 0), + (10908, 44956, 'kill_scorp_crunches_snd', 0), + (10909, 44957, 'kill_scorpa_scorpform_snd', 0), + (10910, 44958, 'kill_scorpa_scream01_snd', 0), + (10911, 44959, 'kill_scratch', 0), + (10912, 44960, 'kill_scream', 0), + (10913, 44961, 'kill_scribing_idle', 0), + (10914, 44962, 'kill_scruntch', 0), + (10915, 44963, 'kill_sd_drumming_lp_snd', 0), + (10916, 44964, 'kill_sd_soulcast_sound', 0), + (10917, 44965, 'kill_sd_soulsuck_sound', 0), + (10918, 44967, 'kill_sd_spiritflash_snd', 0), + (10919, 44968, 'kill_sd_spiritflashsoft_snd', 0), + (10920, 44969, 'kill_section01', 0), + (10921, 44970, 'kill_section02', 0), + (10922, 44971, 'kill_section03', 0), + (10923, 44972, 'kill_seenoevil', 0), + (10924, 44973, 'kill_sf_bladering_snd', 0), + (10925, 44974, 'kill_sf_flute_lp_snd', 0), + (10926, 44975, 'kill_sgwp_bark_snd', 0), + (10927, 44976, 'kill_shaft01', 0), + (10928, 44977, 'kill_shaft02', 0), + (10929, 44978, 'kill_shake', 0), + (10930, 44979, 'kill_shake1', 0), + (10931, 44980, 'kill_shake2', 0), + (10932, 44981, 'kill_shake3', 0), + (10933, 44982, 'kill_shakefist', 0), + (10934, 44983, 'kill_shakeit', 0), + (10935, 44984, 'kill_shame', 0), + (10936, 44985, 'kill_shark_attack01', 0), + (10937, 44986, 'kill_shark_bite01', 0), + (10938, 44987, 'kill_shark_bite02', 0), + (10939, 44988, 'kill_shark_cry', 0), + (10940, 44989, 'kill_shark_die', 0), + (10941, 44990, 'kill_shark_ouch', 0), + (10942, 44991, 'kill_shark_runtail', 0), + (10943, 44992, 'kill_shark_runtail02', 0), + (10944, 44993, 'kill_shark_tail', 0), + (10945, 44994, 'kill_sheathe_metal_weapon_snd', 0), + (10946, 44995, 'kill_sheathe_weapon_snd', 0), + (10947, 44996, 'kill_sheathe_weapon_trigger', 0), + (10948, 44997, 'kill_shield_block_backhand', 0), + (10949, 44998, 'kill_shield_block_down', 0), + (10950, 44999, 'kill_shield_block_forehand', 0), + (10951, 45000, 'kill_shield_block_thrust', 0), + (10952, 45001, 'kill_shield_shove', 0), + (10953, 45002, 'kill_shield_sound', 0), + (10954, 45003, 'kill_shimmy', 0), + (10955, 45004, 'kill_shiver', 0), + (10956, 45005, 'kill_show_bridge', 0), + (10957, 45006, 'kill_show_melee_projectile_trigger', 0), + (10958, 45007, 'kill_shrink_sound', 0), + (10959, 45008, 'kill_shrug', 0), + (10960, 45009, 'kill_shuttle01', 0), + (10961, 45010, 'kill_sick', 0), + (10962, 45011, 'kill_side_smoke01', 0), + (10963, 45012, 'kill_sig_bursting_snd', 0), + (10964, 45013, 'kill_sig_rattler_snd', 0), + (10965, 45014, 'kill_sigh', 0), + (10966, 45015, 'kill_sit_combat', 0), + (10967, 45016, 'kill_sit_idle01', 0), + (10968, 45017, 'kill_sit_idle02', 0), + (10969, 45018, 'kill_sit_off', 0), + (10970, 45019, 'kill_sit_peace', 0), + (10971, 45020, 'kill_sit_tail', 0), + (10972, 45021, 'kill_sit_tail_cloak', 0), + (10973, 45022, 'kill_sl_lute_lp_snd', 0), + (10974, 45023, 'kill_slt_castfire_snd', 0), + (10975, 45024, 'kill_slt_resultvortex_snd', 0), + (10976, 45025, 'kill_slt_splode_snd', 0), + (10977, 45026, 'kill_slugattack_01', 0), + (10978, 45027, 'kill_slugdie_hit_01', 0), + (10979, 45028, 'kill_slugdie_hit_02', 0), + (10980, 45029, 'kill_slugdie_hit_03', 0), + (10981, 45030, 'kill_slugpulse_01', 0), + (10982, 45031, 'kill_slugpulse_02', 0), + (10983, 45032, 'kill_slugpulse_03', 0), + (10984, 45033, 'kill_slugpulse_04', 0), + (10985, 45034, 'kill_slugpulser_01', 0), + (10986, 45035, 'kill_slugrun_01', 0), + (10987, 45036, 'kill_slugrun_02', 0), + (10988, 45037, 'kill_slugrunpulse_01', 0), + (10989, 45038, 'kill_slugrunpulse_02', 0), + (10990, 45039, 'kill_slugsplat_01', 0), + (10991, 45040, 'kill_slugsplat_02', 0), + (10992, 45041, 'kill_slugsway_01', 0), + (10993, 45042, 'kill_slugsway_02', 0), + (10994, 45043, 'kill_slugtongue', 0), + (10995, 45044, 'kill_slugtongueimpact_01', 0), + (10996, 45045, 'kill_slugwalk_01', 0), + (10997, 45046, 'kill_slugwalk_02', 0), + (10998, 45047, 'kill_slugwalkpulse_01', 0), + (10999, 45048, 'kill_slugwalkpulse_02', 0), + (11000, 45049, 'kill_slugyell_01', 0), + (11001, 45050, 'kill_small_saw', 0), + (11002, 45051, 'kill_smash', 0), + (11003, 45052, 'kill_smashed', 0), + (11004, 45053, 'kill_smile', 0), + (11005, 45054, 'kill_smirk', 0), + (11006, 45055, 'kill_smite_cast_lp_snd', 0), + (11007, 45056, 'kill_smoke', 0), + (11008, 45057, 'kill_smoke_breath', 0), + (11009, 45058, 'kill_smoke_dark_chimney', 0), + (11010, 45059, 'kill_smoke_dark_coals', 0), + (11011, 45060, 'kill_smoke_dark_ground', 0), + (11012, 45061, 'kill_smoke_dark_up', 0), + (11013, 45062, 'kill_smoke_flash', 0), + (11014, 45063, 'kill_smoke_ring', 0), + (11015, 45064, 'kill_smoke_sparks', 0), + (11016, 45065, 'kill_snd_boom', 0), + (11017, 45066, 'kill_snd_confrontfear_fade', 0), + (11018, 45067, 'kill_snd_confrontfear_skull', 0), + (11019, 45068, 'kill_snd_fall_damage', 0), + (11020, 45069, 'kill_snd_fire_whoosh', 0), + (11021, 45070, 'kill_snd_fireworks_boom', 0), + (11022, 45071, 'kill_snd_frontload_acid', 0), + (11023, 45072, 'kill_snd_keg_appear', 0), + (11024, 45073, 'kill_snd_keg_gulp', 0), + (11025, 45074, 'kill_snd_keg_pour', 0), + (11026, 45075, 'kill_snd_keg_whoosh', 0), + (11027, 45076, 'kill_snd_keg_yum', 0), + (11028, 45077, 'kill_snd_lifeburn_castabsorb', 0), + (11029, 45078, 'kill_snd_lifeburn_castbase', 0), + (11030, 45079, 'kill_snd_lifeburn_resultblast', 0), + (11031, 45080, 'kill_snd_mayong_boen_blanket', 0), + (11032, 45081, 'kill_snd_mayong_boen_result', 0), + (11033, 45082, 'kill_snd_pumpkin_flaming', 0), + (11034, 45083, 'kill_snd_slide_cast', 0), + (11035, 45084, 'kill_snd_slide_result', 0), + (11036, 45085, 'kill_snd_snowball_impact', 0), + (11037, 45086, 'kill_snd_spirit_elephant_vocal', 0), + (11038, 45087, 'kill_snd_teleport_druidring_flash', 0), + (11039, 45088, 'kill_snd_teleport_druidring_loop', 0), + (11040, 45089, 'kill_snd_wuoshi_choking_vines', 0), + (11041, 45090, 'kill_snd_wuoshi_tree_enter', 0), + (11042, 45091, 'kill_snd_wuoshi_tree_exit', 0), + (11043, 45092, 'kill_snd_wuoshi_tree_loop', 0), + (11044, 45093, 'kill_sneer', 0), + (11045, 45094, 'kill_sneeze', 0), + (11046, 45095, 'kill_sneeze_smoke', 0), + (11047, 45096, 'kill_snicker', 0), + (11048, 45097, 'kill_sniff', 0), + (11049, 45098, 'kill_snort', 0), + (11050, 45099, 'kill_soaf_burn_sound', 0), + (11051, 45100, 'kill_soaf_castcharge02_sound', 0), + (11052, 45101, 'kill_soaf_castcharge_sound', 0), + (11053, 45102, 'kill_soaf_flamearrow_sound', 0), + (11054, 45103, 'kill_soc_clayskinfall_lp_sound', 0), + (11055, 45104, 'kill_soc_clayskinform_sound', 0), + (11056, 45105, 'kill_sod_flameup_sound', 0), + (11057, 45106, 'kill_sod_whoosh01_sound', 0), + (11058, 45107, 'kill_som_cast_lp_snd', 0), + (11059, 45108, 'kill_sotb_batsqueak2_sound', 0), + (11060, 45109, 'kill_sotb_batsqueak_sound', 0), + (11061, 45110, 'kill_sound_angry', 0), + (11062, 45111, 'kill_sound_angry01', 0), + (11063, 45112, 'kill_sound_angry02', 0), + (11064, 45113, 'kill_sound_anvilhit', 0), + (11065, 45114, 'kill_sound_aoeflame', 0), + (11066, 45115, 'kill_sound_artifact_bury', 0), + (11067, 45116, 'kill_sound_artifact_emerge', 0), + (11068, 45117, 'kill_sound_atkhit', 0), + (11069, 45118, 'kill_sound_atkland', 0), + (11070, 45119, 'kill_sound_atkslide', 0), + (11071, 45120, 'kill_sound_atkvocal', 0), + (11072, 45121, 'kill_sound_attachwhirl', 0), + (11073, 45122, 'kill_sound_attack', 0), + (11074, 45123, 'kill_sound_attack01', 0), + (11075, 45124, 'kill_sound_attack02', 0), + (11076, 45125, 'kill_sound_attack1_vocal', 0), + (11077, 45126, 'kill_sound_attack2_vocal', 0), + (11078, 45127, 'kill_sound_attack2rock', 0), + (11079, 45128, 'kill_sound_attack2slam', 0), + (11080, 45129, 'kill_sound_attack_hit', 0), + (11081, 45130, 'kill_sound_attacka', 0), + (11082, 45131, 'kill_sound_attackarm', 0), + (11083, 45132, 'kill_sound_attackb', 0), + (11084, 45133, 'kill_sound_attackback', 0), + (11085, 45134, 'kill_sound_attackbase', 0), + (11086, 45135, 'kill_sound_attackbend', 0), + (11087, 45136, 'kill_sound_attackbite', 0), + (11088, 45137, 'kill_sound_attackbitein', 0), + (11089, 45138, 'kill_sound_attackbiterip', 0), + (11090, 45139, 'kill_sound_attackblade', 0), + (11091, 45140, 'kill_sound_attackbreath', 0), + (11092, 45141, 'kill_sound_attackbreath01', 0), + (11093, 45142, 'kill_sound_attackbreath02', 0), + (11094, 45143, 'kill_sound_attackbreath02_inhale', 0), + (11095, 45144, 'kill_sound_attackbreath1', 0), + (11096, 45145, 'kill_sound_attackbreath2', 0), + (11097, 45146, 'kill_sound_attackbreath_long', 0), + (11098, 45147, 'kill_sound_attackbreath_short', 0), + (11099, 45148, 'kill_sound_attackbreathe', 0), + (11100, 45149, 'kill_sound_attackbreathefire', 0), + (11101, 45150, 'kill_sound_attackbreathfire', 0), + (11102, 45151, 'kill_sound_attackbreathfire_long', 0), + (11103, 45152, 'kill_sound_attackbreathfire_short', 0), + (11104, 45153, 'kill_sound_attackcast', 0), + (11105, 45154, 'kill_sound_attackchain', 0), + (11106, 45155, 'kill_sound_attackchime', 0), + (11107, 45156, 'kill_sound_attackchomp', 0), + (11108, 45157, 'kill_sound_attackclaw', 0), + (11109, 45158, 'kill_sound_attackclaw_vocal', 0), + (11110, 45159, 'kill_sound_attackcreak', 0), + (11111, 45160, 'kill_sound_attackcrunch01', 0), + (11112, 45161, 'kill_sound_attackcrunch02', 0), + (11113, 45162, 'kill_sound_attacke3_vocal', 0), + (11114, 45163, 'kill_sound_attackfire', 0), + (11115, 45164, 'kill_sound_attackfistwater', 0), + (11116, 45165, 'kill_sound_attackflame', 0), + (11117, 45166, 'kill_sound_attackflap', 0), + (11118, 45167, 'kill_sound_attackflutter', 0), + (11119, 45168, 'kill_sound_attackfoot', 0), + (11120, 45169, 'kill_sound_attackgear', 0), + (11121, 45170, 'kill_sound_attackgrowl', 0), + (11122, 45171, 'kill_sound_attackheadram_swoosh', 0), + (11123, 45172, 'kill_sound_attackhit', 0), + (11124, 45173, 'kill_sound_attackinhale', 0), + (11125, 45174, 'kill_sound_attackjaw', 0), + (11126, 45175, 'kill_sound_attackkick', 0), + (11127, 45176, 'kill_sound_attackleaves', 0), + (11128, 45177, 'kill_sound_attackliddown', 0), + (11129, 45178, 'kill_sound_attacklidup', 0), + (11130, 45179, 'kill_sound_attacklong', 0), + (11131, 45180, 'kill_sound_attackmetal', 0), + (11132, 45181, 'kill_sound_attackpage', 0), + (11133, 45182, 'kill_sound_attackram', 0), + (11134, 45183, 'kill_sound_attackrock', 0), + (11135, 45184, 'kill_sound_attackrockinhale', 0), + (11136, 45185, 'kill_sound_attackrun', 0), + (11137, 45186, 'kill_sound_attacksaw', 0), + (11138, 45187, 'kill_sound_attacksbreathin', 0), + (11139, 45188, 'kill_sound_attackscream', 0), + (11140, 45189, 'kill_sound_attackshort', 0), + (11141, 45190, 'kill_sound_attackslam', 0), + (11142, 45191, 'kill_sound_attacksnap', 0), + (11143, 45192, 'kill_sound_attacksnort', 0), + (11144, 45193, 'kill_sound_attackspecial', 0), + (11145, 45194, 'kill_sound_attacksquish', 0), + (11146, 45195, 'kill_sound_attackstab', 0), + (11147, 45196, 'kill_sound_attacksting', 0), + (11148, 45197, 'kill_sound_attackstomp', 0), + (11149, 45198, 'kill_sound_attackswing', 0), + (11150, 45199, 'kill_sound_attackswoosh', 0), + (11151, 45200, 'kill_sound_attackswordwater01', 0), + (11152, 45201, 'kill_sound_attackswordwater02', 0), + (11153, 45202, 'kill_sound_attacktail', 0), + (11154, 45203, 'kill_sound_attacktailvocal', 0), + (11155, 45204, 'kill_sound_attacktailwhip', 0), + (11156, 45205, 'kill_sound_attacktongue', 0), + (11157, 45206, 'kill_sound_attackvocal', 0), + (11158, 45207, 'kill_sound_attackvocal01', 0), + (11159, 45208, 'kill_sound_attackvocal02', 0), + (11160, 45209, 'kill_sound_attackvocal2', 0), + (11161, 45210, 'kill_sound_attackvocal_long', 0), + (11162, 45211, 'kill_sound_attackwater', 0), + (11163, 45212, 'kill_sound_attackwhip', 0), + (11164, 45213, 'kill_sound_attackwhirl', 0), + (11165, 45214, 'kill_sound_attackwhirlblade', 0), + (11166, 45215, 'kill_sound_attackwhoosh', 0), + (11167, 45216, 'kill_sound_attackwild', 0), + (11168, 45217, 'kill_sound_attackwind', 0), + (11169, 45218, 'kill_sound_attackwindflap', 0), + (11170, 45219, 'kill_sound_attackwindup', 0), + (11171, 45220, 'kill_sound_attackwing', 0), + (11172, 45221, 'kill_sound_attackwing_land', 0), + (11173, 45222, 'kill_sound_attackwingbreath', 0), + (11174, 45223, 'kill_sound_attackwingflap', 0), + (11175, 45224, 'kill_sound_attackyell', 0), + (11176, 45225, 'kill_sound_battlecry', 0), + (11177, 45226, 'kill_sound_battlecry01', 0), + (11178, 45227, 'kill_sound_beg', 0), + (11179, 45228, 'kill_sound_bell', 0), + (11180, 45229, 'kill_sound_bite', 0), + (11181, 45230, 'kill_sound_bite_rip', 0), + (11182, 45231, 'kill_sound_bitetear', 0), + (11183, 45232, 'kill_sound_bitevocal', 0), + (11184, 45233, 'kill_sound_blech', 0), + (11185, 45234, 'kill_sound_blink', 0), + (11186, 45235, 'kill_sound_boggle', 0), + (11187, 45236, 'kill_sound_boltdamage', 0), + (11188, 45237, 'kill_sound_bonehit', 0), + (11189, 45238, 'kill_sound_boom', 0), + (11190, 45239, 'kill_sound_bowpull', 0), + (11191, 45240, 'kill_sound_bowrelease', 0), + (11192, 45241, 'kill_sound_breath', 0), + (11193, 45242, 'kill_sound_breath_a', 0), + (11194, 45243, 'kill_sound_breath_b', 0), + (11195, 45244, 'kill_sound_breathfire', 0), + (11196, 45245, 'kill_sound_breathinhale', 0), + (11197, 45246, 'kill_sound_breathvocal', 0), + (11198, 45247, 'kill_sound_bridge', 0), + (11199, 45248, 'kill_sound_buff', 0), + (11200, 45249, 'kill_sound_buffdefensive', 0), + (11201, 45250, 'kill_sound_buffinhale', 0), + (11202, 45251, 'kill_sound_buffoffensive', 0), + (11203, 45252, 'kill_sound_buffspin001', 0), + (11204, 45253, 'kill_sound_burp', 0), + (11205, 45254, 'kill_sound_casgrowl', 0), + (11206, 45255, 'kill_sound_cast', 0), + (11207, 45256, 'kill_sound_cast_shortbreath_open', 0), + (11208, 45257, 'kill_sound_castend', 0), + (11209, 45258, 'kill_sound_castgears', 0), + (11210, 45259, 'kill_sound_castgrowl', 0), + (11211, 45260, 'kill_sound_casthowl', 0), + (11212, 45261, 'kill_sound_castinhalegears', 0), + (11213, 45262, 'kill_sound_castlong_breath', 0), + (11214, 45263, 'kill_sound_castlong_inhale', 0), + (11215, 45264, 'kill_sound_castlong_open', 0), + (11216, 45265, 'kill_sound_castroar', 0), + (11217, 45266, 'kill_sound_castshort_breath', 0), + (11218, 45267, 'kill_sound_caststart', 0), + (11219, 45268, 'kill_sound_castvocal', 0), + (11220, 45269, 'kill_sound_chesthit', 0), + (11221, 45270, 'kill_sound_chesthitdouble', 0), + (11222, 45271, 'kill_sound_chew', 0), + (11223, 45272, 'kill_sound_clap', 0), + (11224, 45273, 'kill_sound_claw', 0), + (11225, 45274, 'kill_sound_clawhit', 0), + (11226, 45275, 'kill_sound_clawwalk', 0), + (11227, 45276, 'kill_sound_clop', 0), + (11228, 45277, 'kill_sound_clop_left', 0), + (11229, 45278, 'kill_sound_clop_right', 0), + (11230, 45279, 'kill_sound_combatart', 0), + (11231, 45280, 'kill_sound_combatbreath', 0), + (11232, 45281, 'kill_sound_combatbreathe', 0), + (11233, 45282, 'kill_sound_combatchew', 0), + (11234, 45283, 'kill_sound_combatcrunch', 0), + (11235, 45284, 'kill_sound_combatenter', 0), + (11236, 45285, 'kill_sound_combatenter001', 0), + (11237, 45286, 'kill_sound_combatenter002', 0), + (11238, 45287, 'kill_sound_combatentergrowl', 0), + (11239, 45288, 'kill_sound_combatenterrock01', 0), + (11240, 45289, 'kill_sound_combatenterrock02', 0), + (11241, 45290, 'kill_sound_combatenterrock03', 0), + (11242, 45291, 'kill_sound_combatentervocal01', 0), + (11243, 45292, 'kill_sound_combatentervocal02', 0), + (11244, 45293, 'kill_sound_combatenterwing', 0), + (11245, 45294, 'kill_sound_combatenterwingfire', 0), + (11246, 45295, 'kill_sound_combatexit', 0), + (11247, 45296, 'kill_sound_combatflap', 0), + (11248, 45297, 'kill_sound_combatflapup', 0), + (11249, 45298, 'kill_sound_combatgrowl', 0), + (11250, 45299, 'kill_sound_combatidle', 0), + (11251, 45300, 'kill_sound_combatpage', 0), + (11252, 45301, 'kill_sound_combatpaw', 0), + (11253, 45302, 'kill_sound_combatsnort', 0), + (11254, 45303, 'kill_sound_combatwing', 0), + (11255, 45304, 'kill_sound_creak', 0), + (11256, 45305, 'kill_sound_crunch', 0), + (11257, 45306, 'kill_sound_curl', 0), + (11258, 45307, 'kill_sound_cutthroat', 0), + (11259, 45308, 'kill_sound_damage', 0), + (11260, 45309, 'kill_sound_damage02', 0), + (11261, 45310, 'kill_sound_damage03', 0), + (11262, 45311, 'kill_sound_damageblade', 0), + (11263, 45312, 'kill_sound_damagebolts', 0), + (11264, 45313, 'kill_sound_damagebone', 0), + (11265, 45314, 'kill_sound_damagecrunch', 0), + (11266, 45315, 'kill_sound_damageflutter', 0), + (11267, 45316, 'kill_sound_damagehit', 0), + (11268, 45317, 'kill_sound_damagerock', 0), + (11269, 45318, 'kill_sound_damageshell', 0), + (11270, 45319, 'kill_sound_damagetwang', 0), + (11271, 45320, 'kill_sound_damagevocal', 0), + (11272, 45321, 'kill_sound_dead', 0), + (11273, 45322, 'kill_sound_dead01', 0), + (11274, 45323, 'kill_sound_dead02', 0), + (11275, 45324, 'kill_sound_dead03', 0), + (11276, 45325, 'kill_sound_dead_enter', 0), + (11277, 45326, 'kill_sound_deadball', 0), + (11278, 45327, 'kill_sound_deadballfall', 0), + (11279, 45328, 'kill_sound_deadbell', 0), + (11280, 45329, 'kill_sound_deadblade', 0), + (11281, 45330, 'kill_sound_deadboom', 0), + (11282, 45331, 'kill_sound_deadbreathe', 0), + (11283, 45332, 'kill_sound_deadbubble', 0), + (11284, 45333, 'kill_sound_deadbuzz01', 0), + (11285, 45334, 'kill_sound_deadbuzz02', 0), + (11286, 45335, 'kill_sound_deadbuzz03', 0), + (11287, 45336, 'kill_sound_deadbuzz04', 0), + (11288, 45337, 'kill_sound_deadclose', 0), + (11289, 45338, 'kill_sound_deadcreak', 0), + (11290, 45339, 'kill_sound_deadcrunch', 0), + (11291, 45340, 'kill_sound_deadcrunch01', 0), + (11292, 45341, 'kill_sound_deadcrunch02', 0), + (11293, 45342, 'kill_sound_deadcrunch1', 0), + (11294, 45343, 'kill_sound_deadcrunch2', 0), + (11295, 45344, 'kill_sound_deadcry', 0), + (11296, 45345, 'kill_sound_deadcurl', 0), + (11297, 45346, 'kill_sound_deadfall', 0), + (11298, 45347, 'kill_sound_deadfall001', 0), + (11299, 45348, 'kill_sound_deadfall002', 0), + (11300, 45349, 'kill_sound_deadfall01', 0), + (11301, 45350, 'kill_sound_deadfall02', 0), + (11302, 45351, 'kill_sound_deadfall03', 0), + (11303, 45352, 'kill_sound_deadfall1', 0), + (11304, 45353, 'kill_sound_deadfall2', 0), + (11305, 45354, 'kill_sound_deadfire', 0), + (11306, 45355, 'kill_sound_deadflame', 0), + (11307, 45356, 'kill_sound_deadflap', 0), + (11308, 45357, 'kill_sound_deadgear', 0), + (11309, 45358, 'kill_sound_deadglob', 0), + (11310, 45359, 'kill_sound_deadglub', 0), + (11311, 45360, 'kill_sound_deadgroan', 0), + (11312, 45361, 'kill_sound_deadgrowl', 0), + (11313, 45362, 'kill_sound_deadhead', 0), + (11314, 45363, 'kill_sound_deadhit', 0), + (11315, 45364, 'kill_sound_deadhit1', 0), + (11316, 45365, 'kill_sound_deadhit2', 0), + (11317, 45366, 'kill_sound_deadhit3', 0), + (11318, 45367, 'kill_sound_deadknee', 0), + (11319, 45368, 'kill_sound_deadliddown', 0), + (11320, 45369, 'kill_sound_deadlidup', 0), + (11321, 45370, 'kill_sound_deadmist', 0), + (11322, 45371, 'kill_sound_deadmotor', 0), + (11323, 45372, 'kill_sound_deadpage', 0), + (11324, 45373, 'kill_sound_deadprevocal', 0), + (11325, 45374, 'kill_sound_deadrock', 0), + (11326, 45375, 'kill_sound_deadrockfall', 0), + (11327, 45376, 'kill_sound_deadscratch', 0), + (11328, 45377, 'kill_sound_deadscream', 0), + (11329, 45378, 'kill_sound_deadscream01', 0), + (11330, 45379, 'kill_sound_deadscream02', 0), + (11331, 45380, 'kill_sound_deadslam', 0), + (11332, 45381, 'kill_sound_deadslither', 0), + (11333, 45382, 'kill_sound_deadsquish', 0), + (11334, 45383, 'kill_sound_deadsway', 0), + (11335, 45384, 'kill_sound_deadtail', 0), + (11336, 45385, 'kill_sound_deadthrash01', 0), + (11337, 45386, 'kill_sound_deadthrash02', 0), + (11338, 45387, 'kill_sound_deadtongue', 0), + (11339, 45388, 'kill_sound_deadvanish', 0), + (11340, 45389, 'kill_sound_deadvocal', 0), + (11341, 45390, 'kill_sound_deadvocal01', 0), + (11342, 45391, 'kill_sound_deadvocal02', 0), + (11343, 45392, 'kill_sound_deadvocal03', 0), + (11344, 45393, 'kill_sound_deadwarble01', 0), + (11345, 45394, 'kill_sound_deadwarble02', 0), + (11346, 45395, 'kill_sound_deadwater', 0), + (11347, 45396, 'kill_sound_deadwater01', 0), + (11348, 45397, 'kill_sound_deadwater02', 0), + (11349, 45398, 'kill_sound_deadwater03', 0), + (11350, 45399, 'kill_sound_deadwhimper', 0), + (11351, 45400, 'kill_sound_deadwhoosh', 0), + (11352, 45401, 'kill_sound_deadwing', 0), + (11353, 45402, 'kill_sound_deadwingfold', 0), + (11354, 45403, 'kill_sound_deadwoosh', 0), + (11355, 45404, 'kill_sound_death', 0), + (11356, 45405, 'kill_sound_death001', 0), + (11357, 45406, 'kill_sound_death002', 0), + (11358, 45407, 'kill_sound_deathbone', 0), + (11359, 45408, 'kill_sound_deathbreak', 0), + (11360, 45409, 'kill_sound_deathclaw', 0), + (11361, 45410, 'kill_sound_deathcrash', 0), + (11362, 45411, 'kill_sound_deathengine', 0), + (11363, 45412, 'kill_sound_deathfall', 0), + (11364, 45413, 'kill_sound_deathmotor', 0), + (11365, 45414, 'kill_sound_deathshake', 0), + (11366, 45415, 'kill_sound_deathsigh', 0), + (11367, 45416, 'kill_sound_deathtail', 0), + (11368, 45417, 'kill_sound_deathvocal', 0), + (11369, 45418, 'kill_sound_deathwhoosh', 0), + (11370, 45419, 'kill_sound_design_lavabridge', 0), + (11371, 45420, 'kill_sound_die', 0), + (11372, 45421, 'kill_sound_dig001', 0), + (11373, 45422, 'kill_sound_dig002', 0), + (11374, 45423, 'kill_sound_duck', 0), + (11375, 45424, 'kill_sound_eat', 0), + (11376, 45425, 'kill_sound_eating', 0), + (11377, 45426, 'kill_sound_eatslime', 0), + (11378, 45427, 'kill_sound_entercreak', 0), + (11379, 45428, 'kill_sound_enterglide', 0), + (11380, 45429, 'kill_sound_enterleaves', 0), + (11381, 45430, 'kill_sound_entermoan', 0), + (11382, 45431, 'kill_sound_enteropen', 0), + (11383, 45432, 'kill_sound_enterscrape', 0), + (11384, 45433, 'kill_sound_entervocal', 0), + (11385, 45434, 'kill_sound_exhale', 0), + (11386, 45435, 'kill_sound_exitflap', 0), + (11387, 45436, 'kill_sound_exitidle', 0), + (11388, 45437, 'kill_sound_exitjump', 0), + (11389, 45438, 'kill_sound_exitscream', 0), + (11390, 45439, 'kill_sound_explode', 0), + (11391, 45440, 'kill_sound_extinguish', 0), + (11392, 45441, 'kill_sound_fall', 0), + (11393, 45442, 'kill_sound_fall01', 0), + (11394, 45443, 'kill_sound_fall02', 0), + (11395, 45444, 'kill_sound_fallmetal', 0), + (11396, 45445, 'kill_sound_filler', 0), + (11397, 45446, 'kill_sound_fire', 0), + (11398, 45447, 'kill_sound_fireswoosh', 0), + (11399, 45448, 'kill_sound_fishing_cast01', 0), + (11400, 45449, 'kill_sound_fishing_cast02', 0), + (11401, 45450, 'kill_sound_fishing_cast03', 0), + (11402, 45451, 'kill_sound_flame', 0), + (11403, 45452, 'kill_sound_flamethrower', 0), + (11404, 45453, 'kill_sound_flap', 0), + (11405, 45454, 'kill_sound_flapup', 0), + (11406, 45455, 'kill_sound_fleeflutter', 0), + (11407, 45456, 'kill_sound_fluter', 0), + (11408, 45457, 'kill_sound_fly_bite_rip', 0), + (11409, 45458, 'kill_sound_foot', 0), + (11410, 45459, 'kill_sound_footlayerleft', 0), + (11411, 45460, 'kill_sound_footlayerright', 0), + (11412, 45461, 'kill_sound_footstep', 0), + (11413, 45462, 'kill_sound_footstomp', 0), + (11414, 45463, 'kill_sound_foresting', 0), + (11415, 45464, 'kill_sound_fuse', 0), + (11416, 45465, 'kill_sound_gathering', 0), + (11417, 45466, 'kill_sound_getup', 0), + (11418, 45467, 'kill_sound_glide', 0), + (11419, 45468, 'kill_sound_glide02', 0), + (11420, 45469, 'kill_sound_growl', 0), + (11421, 45470, 'kill_sound_gulp01', 0), + (11422, 45471, 'kill_sound_gulp02', 0), + (11423, 45472, 'kill_sound_hammerhit', 0), + (11424, 45473, 'kill_sound_happy', 0), + (11425, 45474, 'kill_sound_head', 0), + (11426, 45475, 'kill_sound_headram_inhale', 0), + (11427, 45476, 'kill_sound_headram_land', 0), + (11428, 45477, 'kill_sound_headram_snort', 0), + (11429, 45478, 'kill_sound_headram_swoosh', 0), + (11430, 45479, 'kill_sound_headspark', 0), + (11431, 45480, 'kill_sound_headturn', 0), + (11432, 45481, 'kill_sound_heartattack', 0), + (11433, 45482, 'kill_sound_hiss', 0), + (11434, 45483, 'kill_sound_hit', 0), + (11435, 45484, 'kill_sound_hoofleft', 0), + (11436, 45485, 'kill_sound_hoofright', 0), + (11437, 45486, 'kill_sound_hungry', 0), + (11438, 45487, 'kill_sound_hungrycreak', 0), + (11439, 45488, 'kill_sound_idle', 0), + (11440, 45489, 'kill_sound_idle01', 0), + (11441, 45490, 'kill_sound_idle02', 0), + (11442, 45491, 'kill_sound_idle03_walk001', 0), + (11443, 45492, 'kill_sound_idle03_walk002', 0), + (11444, 45493, 'kill_sound_idle04', 0), + (11445, 45494, 'kill_sound_idlebreath', 0), + (11446, 45495, 'kill_sound_idlebubble', 0), + (11447, 45496, 'kill_sound_idlechew', 0), + (11448, 45497, 'kill_sound_idlecreak', 0), + (11449, 45498, 'kill_sound_idleflap', 0), + (11450, 45499, 'kill_sound_idleflapup', 0), + (11451, 45500, 'kill_sound_idleglass', 0), + (11452, 45501, 'kill_sound_idlegrowl', 0), + (11453, 45502, 'kill_sound_idlehiss', 0), + (11454, 45503, 'kill_sound_idlelaugh', 0), + (11455, 45504, 'kill_sound_idlemoo', 0), + (11456, 45505, 'kill_sound_idlepant', 0), + (11457, 45506, 'kill_sound_idleroar01', 0), + (11458, 45507, 'kill_sound_idleroar02', 0), + (11459, 45508, 'kill_sound_idlerock', 0), + (11460, 45509, 'kill_sound_idlescuff', 0), + (11461, 45510, 'kill_sound_idleshort', 0), + (11462, 45511, 'kill_sound_idlesniff', 0), + (11463, 45512, 'kill_sound_idlesnort', 0), + (11464, 45513, 'kill_sound_idletail', 0), + (11465, 45514, 'kill_sound_idlevocal', 0), + (11466, 45515, 'kill_sound_idlevocal01', 0), + (11467, 45516, 'kill_sound_idlevocal02', 0), + (11468, 45517, 'kill_sound_idlewater', 0), + (11469, 45518, 'kill_sound_inahle', 0), + (11470, 45519, 'kill_sound_inhale', 0), + (11471, 45520, 'kill_sound_inhale001', 0), + (11472, 45521, 'kill_sound_inhale002', 0), + (11473, 45522, 'kill_sound_jawsnap', 0), + (11474, 45523, 'kill_sound_jump', 0), + (11475, 45524, 'kill_sound_knockback', 0), + (11476, 45525, 'kill_sound_knockdown', 0), + (11477, 45526, 'kill_sound_land', 0), + (11478, 45527, 'kill_sound_land01', 0), + (11479, 45528, 'kill_sound_land02', 0), + (11480, 45529, 'kill_sound_laughlong', 0), + (11481, 45530, 'kill_sound_lense', 0), + (11482, 45531, 'kill_sound_lense3s', 0), + (11483, 45532, 'kill_sound_lickpur01', 0), + (11484, 45533, 'kill_sound_liddown', 0), + (11485, 45534, 'kill_sound_lidup', 0), + (11486, 45535, 'kill_sound_lipsmack', 0), + (11487, 45536, 'kill_sound_mining', 0), + (11488, 45537, 'kill_sound_moon', 0), + (11489, 45538, 'kill_sound_mounthorse_foot', 0), + (11490, 45539, 'kill_sound_mounthorse_land', 0), + (11491, 45540, 'kill_sound_mounthorse_squeak', 0), + (11492, 45541, 'kill_sound_neener', 0), + (11493, 45542, 'kill_sound_offensive', 0), + (11494, 45543, 'kill_sound_offensive001', 0), + (11495, 45544, 'kill_sound_offensiveelec001', 0), + (11496, 45545, 'kill_sound_open', 0), + (11497, 45546, 'kill_sound_ouch', 0), + (11498, 45547, 'kill_sound_ouchbase', 0), + (11499, 45548, 'kill_sound_ouchbell', 0), + (11500, 45549, 'kill_sound_ouchbend', 0), + (11501, 45550, 'kill_sound_ouchbone', 0), + (11502, 45551, 'kill_sound_ouchbubble', 0), + (11503, 45552, 'kill_sound_ouchbuzz', 0), + (11504, 45553, 'kill_sound_ouchchain', 0), + (11505, 45554, 'kill_sound_ouchcreak', 0), + (11506, 45555, 'kill_sound_ouchcrunch', 0), + (11507, 45556, 'kill_sound_ouchfire', 0), + (11508, 45557, 'kill_sound_ouchflame', 0), + (11509, 45558, 'kill_sound_ouchflap', 0), + (11510, 45559, 'kill_sound_ouchflutter', 0), + (11511, 45560, 'kill_sound_ouchhit', 0), + (11512, 45561, 'kill_sound_ouchliddown', 0), + (11513, 45562, 'kill_sound_ouchlidopen', 0), + (11514, 45563, 'kill_sound_ouchlidup', 0), + (11515, 45564, 'kill_sound_ouchlow', 0), + (11516, 45565, 'kill_sound_ouchpage', 0), + (11517, 45566, 'kill_sound_ouchrock', 0), + (11518, 45567, 'kill_sound_ouchrun', 0), + (11519, 45568, 'kill_sound_ouchscream', 0), + (11520, 45569, 'kill_sound_ouchshell', 0), + (11521, 45570, 'kill_sound_ouchslam', 0), + (11522, 45571, 'kill_sound_ouchsnort', 0), + (11523, 45572, 'kill_sound_ouchsquawk', 0), + (11524, 45573, 'kill_sound_ouchtail', 0), + (11525, 45574, 'kill_sound_ouchvocal', 0), + (11526, 45575, 'kill_sound_ouchwarble', 0), + (11527, 45576, 'kill_sound_ouchwater', 0), + (11528, 45577, 'kill_sound_ouchwhoosh', 0), + (11529, 45578, 'kill_sound_ouchwing', 0), + (11530, 45579, 'kill_sound_pain001', 0), + (11531, 45580, 'kill_sound_pain002', 0), + (11532, 45581, 'kill_sound_paw', 0), + (11533, 45582, 'kill_sound_pen01', 0), + (11534, 45583, 'kill_sound_pen02', 0), + (11535, 45584, 'kill_sound_piercer', 0), + (11536, 45585, 'kill_sound_purr', 0), + (11537, 45586, 'kill_sound_purr02', 0), + (11538, 45587, 'kill_sound_purr03', 0), + (11539, 45588, 'kill_sound_raisehand', 0), + (11540, 45589, 'kill_sound_rechargeresult', 0), + (11541, 45590, 'kill_sound_recharging', 0), + (11542, 45591, 'kill_sound_roar', 0), + (11543, 45592, 'kill_sound_rockroll', 0), + (11544, 45593, 'kill_sound_rofl', 0), + (11545, 45594, 'kill_sound_rude', 0), + (11546, 45595, 'kill_sound_run', 0), + (11547, 45596, 'kill_sound_runcreak', 0), + (11548, 45597, 'kill_sound_runflap', 0), + (11549, 45598, 'kill_sound_runflap01', 0), + (11550, 45599, 'kill_sound_runflap02', 0), + (11551, 45600, 'kill_sound_runflapsmall', 0), + (11552, 45601, 'kill_sound_runhit', 0), + (11553, 45602, 'kill_sound_runland', 0), + (11554, 45603, 'kill_sound_runleft', 0), + (11555, 45604, 'kill_sound_runright', 0), + (11556, 45605, 'kill_sound_runwing', 0), + (11557, 45606, 'kill_sound_sad01', 0), + (11558, 45607, 'kill_sound_sad02', 0), + (11559, 45608, 'kill_sound_saw001', 0), + (11560, 45609, 'kill_sound_saw002', 0), + (11561, 45610, 'kill_sound_scratch', 0), + (11562, 45611, 'kill_sound_scream', 0), + (11563, 45612, 'kill_sound_scream01', 0), + (11564, 45613, 'kill_sound_scream02', 0), + (11565, 45614, 'kill_sound_shake', 0), + (11566, 45615, 'kill_sound_sheathe', 0), + (11567, 45616, 'kill_sound_sit', 0), + (11568, 45617, 'kill_sound_sitenter', 0), + (11569, 45618, 'kill_sound_sitexit', 0), + (11570, 45619, 'kill_sound_sitidle', 0), + (11571, 45620, 'kill_sound_sleep', 0), + (11572, 45621, 'kill_sound_sleep001', 0), + (11573, 45622, 'kill_sound_sleep002', 0), + (11574, 45623, 'kill_sound_slither', 0), + (11575, 45624, 'kill_sound_snap', 0), + (11576, 45625, 'kill_sound_snarl', 0), + (11577, 45626, 'kill_sound_sneer', 0), + (11578, 45627, 'kill_sound_sneeze', 0), + (11579, 45628, 'kill_sound_sneezeinhale', 0), + (11580, 45629, 'kill_sound_snort', 0), + (11581, 45630, 'kill_sound_spellvocal', 0), + (11582, 45631, 'kill_sound_splash', 0), + (11583, 45632, 'kill_sound_stand', 0), + (11584, 45633, 'kill_sound_step', 0), + (11585, 45634, 'kill_sound_stomp', 0), + (11586, 45635, 'kill_sound_stompgrowl', 0), + (11587, 45636, 'kill_sound_stompvocal', 0), + (11588, 45637, 'kill_sound_stunfall', 0), + (11589, 45638, 'kill_sound_stunned', 0), + (11590, 45639, 'kill_sound_stunnedfall', 0), + (11591, 45640, 'kill_sound_stunnedreturn', 0), + (11592, 45641, 'kill_sound_stunnedwhirl', 0), + (11593, 45642, 'kill_sound_stunshake', 0), + (11594, 45643, 'kill_sound_stunsnort', 0), + (11595, 45644, 'kill_sound_stunspin', 0), + (11596, 45645, 'kill_sound_summon', 0), + (11597, 45646, 'kill_sound_summonhit', 0), + (11598, 45647, 'kill_sound_summonrock', 0), + (11599, 45648, 'kill_sound_summonrock01', 0), + (11600, 45649, 'kill_sound_summonrock02', 0), + (11601, 45650, 'kill_sound_summonrockback', 0), + (11602, 45651, 'kill_sound_summonslide', 0), + (11603, 45652, 'kill_sound_summonstart', 0), + (11604, 45653, 'kill_sound_summonvocal', 0), + (11605, 45654, 'kill_sound_superbuff', 0), + (11606, 45655, 'kill_sound_swim', 0), + (11607, 45656, 'kill_sound_swimfast', 0), + (11608, 45657, 'kill_sound_swoosh', 0), + (11609, 45658, 'kill_sound_swooshkick', 0), + (11610, 45659, 'kill_sound_swooshleft', 0), + (11611, 45660, 'kill_sound_swooshright', 0), + (11612, 45661, 'kill_sound_swooshtail', 0), + (11613, 45662, 'kill_sound_taillash001', 0), + (11614, 45663, 'kill_sound_taillash002', 0), + (11615, 45664, 'kill_sound_tailswoosh', 0), + (11616, 45665, 'kill_sound_tailvocal', 0), + (11617, 45666, 'kill_sound_tailwhip', 0), + (11618, 45667, 'kill_sound_taunt01', 0), + (11619, 45668, 'kill_sound_taunt02', 0), + (11620, 45669, 'kill_sound_taunt03', 0), + (11621, 45670, 'kill_sound_thunder', 0), + (11622, 45671, 'kill_sound_trick', 0), + (11623, 45672, 'kill_sound_uncoil', 0), + (11624, 45673, 'kill_sound_unsheathe', 0), + (11625, 45674, 'kill_sound_vocalattack', 0), + (11626, 45675, 'kill_sound_vocalbite', 0), + (11627, 45676, 'kill_sound_vocalbuffet', 0), + (11628, 45677, 'kill_sound_vocaldamage', 0), + (11629, 45678, 'kill_sound_vocaldead', 0), + (11630, 45679, 'kill_sound_vocaldeath', 0), + (11631, 45680, 'kill_sound_vocalouch', 0), + (11632, 45681, 'kill_sound_walk', 0), + (11633, 45682, 'kill_sound_walk001', 0), + (11634, 45683, 'kill_sound_walk002', 0), + (11635, 45684, 'kill_sound_walk01', 0), + (11636, 45685, 'kill_sound_walk02', 0), + (11637, 45686, 'kill_sound_walk1', 0), + (11638, 45687, 'kill_sound_walkbubble', 0), + (11639, 45688, 'kill_sound_walkclaw', 0), + (11640, 45689, 'kill_sound_walkflap', 0), + (11641, 45690, 'kill_sound_walkflap01', 0), + (11642, 45691, 'kill_sound_walkleft', 0), + (11643, 45692, 'kill_sound_walkpiercer', 0), + (11644, 45693, 'kill_sound_walkright', 0), + (11645, 45694, 'kill_sound_walkrock', 0), + (11646, 45695, 'kill_sound_walkservo', 0), + (11647, 45696, 'kill_sound_walkservoleft', 0), + (11648, 45697, 'kill_sound_walkservoright', 0), + (11649, 45698, 'kill_sound_water', 0), + (11650, 45699, 'kill_sound_waterstep', 0), + (11651, 45700, 'kill_sound_whirl', 0), + (11652, 45701, 'kill_sound_whirlmotor', 0), + (11653, 45702, 'kill_sound_whirlwhoosh', 0), + (11654, 45703, 'kill_sound_wildspring', 0), + (11655, 45704, 'kill_sound_wildswing', 0), + (11656, 45705, 'kill_sound_wildswinghit001', 0), + (11657, 45706, 'kill_sound_wildswinghit002', 0), + (11658, 45707, 'kill_sound_wing', 0), + (11659, 45708, 'kill_sound_wingbuffet', 0), + (11660, 45709, 'kill_sound_wingflap', 0), + (11661, 45710, 'kill_sound_wingfold', 0), + (11662, 45711, 'kill_sound_wingmove', 0), + (11663, 45712, 'kill_sound_wingopen', 0), + (11664, 45713, 'kill_sound_wings', 0), + (11665, 45714, 'kill_sound_wingwind', 0), + (11666, 45715, 'kill_sound_yawn001', 0), + (11667, 45716, 'kill_sound_zap', 0), + (11668, 45717, 'kill_spark_circle01', 0), + (11669, 45718, 'kill_spark_circle02', 0), + (11670, 45719, 'kill_spark_circle03', 0), + (11671, 45720, 'kill_spark_circle04', 0), + (11672, 45721, 'kill_spark_circle05', 0), + (11673, 45722, 'kill_spark_sphere01', 0), + (11674, 45723, 'kill_spark_sphere_ws', 0), + (11675, 45724, 'kill_spark_sphere_ws_lefthand', 0), + (11676, 45725, 'kill_sparkle01', 0), + (11677, 45726, 'kill_sparkle02', 0), + (11678, 45727, 'kill_sparkle03', 0), + (11679, 45728, 'kill_sparkle_trail', 0), + (11680, 45729, 'kill_sparks', 0), + (11681, 45730, 'kill_sparks_lf', 0), + (11682, 45731, 'kill_sparks_lr', 0), + (11683, 45732, 'kill_sparks_rf', 0), + (11684, 45733, 'kill_sparks_rr', 0), + (11685, 45734, 'kill_speaknoevil', 0), + (11686, 45735, 'kill_spellcast01', 0), + (11687, 45736, 'kill_spellcast02', 0), + (11688, 45737, 'kill_spider_webbshoot_snd', 0), + (11689, 45738, 'kill_spider_webcover_snd', 0), + (11690, 45739, 'kill_spinningwheel01', 0), + (11691, 45740, 'kill_spinningwheel02', 0), + (11692, 45741, 'kill_spinningwheel04', 0), + (11693, 45742, 'kill_spinningwheel_success', 0), + (11694, 45743, 'kill_spinningwheel_success02', 0), + (11695, 45744, 'kill_spinningwheel_success03', 0), + (11696, 45745, 'kill_spiritascend_snd', 0), + (11697, 45746, 'kill_square', 0), + (11698, 45747, 'kill_squeal', 0), + (11699, 45748, 'kill_ss_singing_lp_snd', 0), + (11700, 45749, 'kill_st_casttap_snd', 0), + (11701, 45750, 'kill_st_tappestry_snd', 0), + (11702, 45751, 'kill_stare', 0), + (11703, 45752, 'kill_start', 0), + (11704, 45753, 'kill_start_drone_sound', 0), + (11705, 45754, 'kill_startburst_sound_01', 0), + (11706, 45755, 'kill_steam01', 0), + (11707, 45756, 'kill_steam_forearm_l', 0), + (11708, 45757, 'kill_steam_forearm_r', 0), + (11709, 45758, 'kill_steam_hip_l', 0), + (11710, 45759, 'kill_steam_hip_l_death', 0), + (11711, 45760, 'kill_steam_hip_r', 0), + (11712, 45761, 'kill_steam_hip_r_death', 0), + (11713, 45762, 'kill_steam_upperarm_l', 0), + (11714, 45763, 'kill_steam_upperarm_r', 0), + (11715, 45764, 'kill_stifle_cast_arm_snd', 0), + (11716, 45765, 'kill_stifle_cast_lp_snd', 0), + (11717, 45766, 'kill_stifle_result_snd', 0), + (11718, 45767, 'kill_still', 0), + (11719, 45768, 'kill_stinky', 0), + (11720, 45769, 'kill_stove_boilover01', 0), + (11721, 45770, 'kill_stove_boilover02', 0), + (11722, 45771, 'kill_stove_boilover03', 0), + (11723, 45772, 'kill_strafe_left', 0), + (11724, 45773, 'kill_strafe_left_run', 0), + (11725, 45774, 'kill_strafe_right', 0), + (11726, 45775, 'kill_strafe_right_run', 0), + (11727, 45776, 'kill_stretch', 0), + (11728, 45777, 'kill_string_knotted', 0), + (11729, 45778, 'kill_success01', 0), + (11730, 45779, 'kill_success02', 0), + (11731, 45780, 'kill_success_flash01', 0), + (11732, 45781, 'kill_success_flash02', 0), + (11733, 45782, 'kill_success_flash03', 0), + (11734, 45783, 'kill_sulk', 0), + (11735, 45784, 'kill_summon', 0), + (11736, 45785, 'kill_summon_idle', 0), + (11737, 45786, 'kill_super_buff', 0), + (11738, 45787, 'kill_swear', 0), + (11739, 45788, 'kill_sweep01', 0), + (11740, 45789, 'kill_swim_attack', 0), + (11741, 45790, 'kill_swim_backup', 0), + (11742, 45791, 'kill_swim_foward', 0), + (11743, 45792, 'kill_swim_idle', 0), + (11744, 45793, 'kill_swim_ouch', 0), + (11745, 45794, 'kill_swim_run', 0), + (11746, 45795, 'kill_swim_tail', 0), + (11747, 45796, 'kill_swim_tail_cloak', 0), + (11748, 45797, 'kill_swim_walk', 0), + (11749, 45798, 'kill_swoosh', 0), + (11750, 45799, 'kill_swoosh_light_low', 0), + (11751, 45800, 'kill_swoosh_medium', 0), + (11752, 45801, 'kill_swwosh', 0), + (11753, 45802, 'kill_ta_cast_snd', 0), + (11754, 45803, 'kill_tail', 0), + (11755, 45804, 'kill_tail_cloak', 0), + (11756, 45805, 'kill_tail_dust', 0), + (11757, 45806, 'kill_tailoring_failure', 0), + (11758, 45807, 'kill_tailoring_idle', 0), + (11759, 45808, 'kill_tailoring_success', 0), + (11760, 45809, 'kill_talk_idle', 0), + (11761, 45810, 'kill_talk_idle01', 0), + (11762, 45811, 'kill_talk_idle02', 0), + (11763, 45812, 'kill_talk_idle03', 0), + (11764, 45813, 'kill_talk_idle04', 0), + (11765, 45814, 'kill_talk_idle05', 0), + (11766, 45815, 'kill_talk_idle06', 0), + (11767, 45816, 'kill_talk_idle07', 0), + (11768, 45817, 'kill_talk_idle08', 0), + (11769, 45818, 'kill_talk_idle09', 0), + (11770, 45819, 'kill_talk_idle10', 0), + (11771, 45820, 'kill_talk_idle11', 0), + (11772, 45821, 'kill_talk_idle12', 0), + (11773, 45822, 'kill_tantrum', 0), + (11774, 45823, 'kill_tantrum_short', 0), + (11775, 45824, 'kill_tapfoot', 0), + (11776, 45825, 'kill_taunt', 0), + (11777, 45826, 'kill_taunt_combat_art', 0), + (11778, 45827, 'kill_tc_teleport_snd', 0), + (11779, 45828, 'kill_thaiko_sound', 0), + (11780, 45829, 'kill_thanks', 0), + (11781, 45830, 'kill_thirsty', 0), + (11782, 45831, 'kill_threaten', 0), + (11783, 45832, 'kill_thumbsup', 0), + (11784, 45833, 'kill_thunder_clap', 0), + (11785, 45834, 'kill_tiger_idle', 0), + (11786, 45835, 'kill_tiger_run', 0), + (11787, 45836, 'kill_tiger_walk', 0), + (11788, 45837, 'kill_tod_explode_snd', 0), + (11789, 45838, 'kill_tod_voltz_snd', 0), + (11790, 45839, 'kill_tr_spawn_snd', 0), + (11791, 45840, 'kill_tradeart_beaker01', 0), + (11792, 45841, 'kill_tradeart_butcherknife01', 0), + (11793, 45842, 'kill_tradeart_celticknot01', 0), + (11794, 45843, 'kill_tradeart_flask01', 0), + (11795, 45844, 'kill_tradeart_forge_hammer01', 0), + (11796, 45845, 'kill_tradeart_forge_hammer02', 0), + (11797, 45846, 'kill_tradeart_forge_helmet01', 0), + (11798, 45847, 'kill_tradeart_fork01', 0), + (11799, 45848, 'kill_tradeart_kitchenknife01', 0), + (11800, 45849, 'kill_tradeart_log_cut', 0), + (11801, 45850, 'kill_tradeart_metal_bar', 0), + (11802, 45851, 'kill_tradeart_metal_rod01', 0), + (11803, 45852, 'kill_tradeart_metal_sparkling2', 0), + (11804, 45853, 'kill_tradeart_molecule01', 0), + (11805, 45854, 'kill_tradeart_needle_left01', 0), + (11806, 45855, 'kill_tradeart_needle_right01', 0), + (11807, 45856, 'kill_tradeart_planer', 0), + (11808, 45857, 'kill_tradeart_rune_01', 0), + (11809, 45858, 'kill_tradeart_rune_02', 0), + (11810, 45859, 'kill_tradeart_rune_03', 0), + (11811, 45860, 'kill_tradeart_rune_04', 0), + (11812, 45861, 'kill_tradeart_rune_05', 0), + (11813, 45862, 'kill_tradeart_rune_06', 0), + (11814, 45863, 'kill_tradeart_rune_07', 0), + (11815, 45864, 'kill_tradeart_rune_08', 0), + (11816, 45865, 'kill_tradeart_saw', 0), + (11817, 45866, 'kill_tradeart_spoon01', 0), + (11818, 45867, 'kill_trail_pike', 0), + (11819, 45868, 'kill_transit', 0), + (11820, 45869, 'kill_trdskl_beaker', 0), + (11821, 45870, 'kill_trdskl_cloth', 0), + (11822, 45871, 'kill_trdskl_feather', 0), + (11823, 45872, 'kill_trdskl_fishingpole', 0), + (11824, 45873, 'kill_trdskl_gem', 0), + (11825, 45874, 'kill_trdskl_hammer', 0), + (11826, 45875, 'kill_trdskl_hatchet', 0), + (11827, 45876, 'kill_trdskl_hatchet_l', 0), + (11828, 45877, 'kill_trdskl_leather', 0), + (11829, 45878, 'kill_trdskl_magnifying', 0), + (11830, 45879, 'kill_trdskl_mug', 0), + (11831, 45880, 'kill_trdskl_needle', 0), + (11832, 45881, 'kill_trdskl_pick', 0), + (11833, 45882, 'kill_trdskl_pot', 0), + (11834, 45883, 'kill_trdskl_saw', 0), + (11835, 45884, 'kill_trdskl_scroll', 0), + (11836, 45885, 'kill_trdskl_spoon', 0), + (11837, 45886, 'kill_trdskl_testtube', 0), + (11838, 45887, 'kill_trdskl_tongs', 0), + (11839, 45888, 'kill_trdskl_vial', 0), + (11840, 45889, 'kill_trdskl_wood', 0), + (11841, 45890, 'kill_trem_boulder_snd', 0), + (11842, 45891, 'kill_trem_cast_lp_snd', 0), + (11843, 45892, 'kill_trem_open_snd', 0), + (11844, 45893, 'kill_trem_rings_snd', 0), + (11845, 45894, 'kill_trem_ringsh_snd', 0), + (11846, 45895, 'kill_trem_rocks_lp_01_snd', 0), + (11847, 45896, 'kill_trick', 0), + (11848, 45897, 'kill_trt_treat_toxin_sound', 0), + (11849, 45898, 'kill_turn_left', 0), + (11850, 45899, 'kill_turn_right', 0), + (11851, 45900, 'kill_turn_to_wood', 0), + (11852, 45901, 'kill_u', 0), + (11853, 45902, 'kill_unsummon', 0), + (11854, 45903, 'kill_untrained_attack', 0), + (11855, 45904, 'kill_untrained_backup', 0), + (11856, 45905, 'kill_untrained_dodge', 0), + (11857, 45906, 'kill_untrained_dodge01', 0), + (11858, 45907, 'kill_untrained_dodge02', 0), + (11859, 45908, 'kill_untrained_ouch', 0), + (11860, 45909, 'kill_untrained_ouch01', 0), + (11861, 45910, 'kill_untrained_parry', 0), + (11862, 45911, 'kill_untrained_recoil', 0), + (11863, 45912, 'kill_untrained_strafe_left', 0), + (11864, 45913, 'kill_untrained_strafe_right', 0), + (11865, 45914, 'kill_untrained_walk', 0), + (11866, 45915, 'kill_util_rings_snd', 0), + (11867, 45916, 'kill_vamp_batattack_sound', 0), + (11868, 45917, 'kill_vamp_batflaps_sound', 0), + (11869, 45918, 'kill_vamp_batsqueak_sound', 0), + (11870, 45919, 'kill_ven_bkgrnd_slime_sound', 0), + (11871, 45920, 'kill_ven_breath_01', 0), + (11872, 45921, 'kill_ven_breath_02', 0), + (11873, 45922, 'kill_ven_explode_sound', 0), + (11874, 45923, 'kill_ven_fire_01', 0), + (11875, 45924, 'kill_ven_fire_02', 0), + (11876, 45925, 'kill_ven_pulse_sound', 0), + (11877, 45926, 'kill_ven_rumble_01', 0), + (11878, 45927, 'kill_ven_rumble_02', 0), + (11879, 45928, 'kill_ven_slime_01', 0), + (11880, 45929, 'kill_ven_slime_02', 0), + (11881, 45930, 'kill_verdict_cast_snd', 0), + (11882, 45931, 'kill_verdict_gavel_snd', 0), + (11883, 45932, 'kill_vg_healing_snd', 0), + (11884, 45933, 'kill_vg_leaves_snd', 0), + (11885, 45934, 'kill_vg_leaveslp_snd', 0), + (11886, 45935, 'kill_violin', 0), + (11887, 45936, 'kill_viseme_a', 0), + (11888, 45937, 'kill_viseme_aa', 0), + (11889, 45938, 'kill_viseme_ae', 0), + (11890, 45939, 'kill_viseme_ah', 0), + (11891, 45940, 'kill_viseme_ao', 0), + (11892, 45941, 'kill_viseme_aw', 0), + (11893, 45942, 'kill_viseme_ay', 0), + (11894, 45943, 'kill_viseme_b', 0), + (11895, 45944, 'kill_viseme_c', 0), + (11896, 45945, 'kill_viseme_ch', 0), + (11897, 45946, 'kill_viseme_d', 0), + (11898, 45947, 'kill_viseme_dh', 0), + (11899, 45948, 'kill_viseme_e', 0), + (11900, 45949, 'kill_viseme_eh', 0), + (11901, 45950, 'kill_viseme_er', 0), + (11902, 45951, 'kill_viseme_ey', 0), + (11903, 45952, 'kill_viseme_f', 0), + (11904, 45953, 'kill_viseme_g', 0), + (11905, 45954, 'kill_viseme_h', 0), + (11906, 45955, 'kill_viseme_ih', 0), + (11907, 45956, 'kill_viseme_iy', 0), + (11908, 45957, 'kill_viseme_j', 0), + (11909, 45958, 'kill_viseme_k', 0), + (11910, 45959, 'kill_viseme_l', 0), + (11911, 45960, 'kill_viseme_m', 0), + (11912, 45961, 'kill_viseme_n', 0), + (11913, 45962, 'kill_viseme_ng', 0), + (11914, 45963, 'kill_viseme_o', 0), + (11915, 45964, 'kill_viseme_ow', 0), + (11916, 45965, 'kill_viseme_oy', 0), + (11917, 45966, 'kill_viseme_p', 0), + (11918, 45967, 'kill_viseme_r', 0), + (11919, 45968, 'kill_viseme_reast', 0), + (11920, 45969, 'kill_viseme_rest', 0), + (11921, 45970, 'kill_viseme_s', 0), + (11922, 45971, 'kill_viseme_sh', 0), + (11923, 45972, 'kill_viseme_t', 0), + (11924, 45973, 'kill_viseme_th', 0), + (11925, 45974, 'kill_viseme_u', 0), + (11926, 45975, 'kill_viseme_uh', 0), + (11927, 45976, 'kill_viseme_uw', 0), + (11928, 45977, 'kill_viseme_v', 0), + (11929, 45978, 'kill_viseme_w', 0), + (11930, 45979, 'kill_viseme_x', 0), + (11931, 45980, 'kill_viseme_y', 0), + (11932, 45981, 'kill_viseme_z', 0), + (11933, 45982, 'kill_viseme_zh', 0), + (11934, 45983, 'kill_visemes_a', 0), + (11935, 45984, 'kill_visemes_c', 0), + (11936, 45985, 'kill_visemes_e', 0), + (11937, 45986, 'kill_visemes_f', 0), + (11938, 45987, 'kill_visemes_l', 0), + (11939, 45988, 'kill_visemes_m', 0), + (11940, 45989, 'kill_visemes_o', 0), + (11941, 45990, 'kill_visemes_rest', 0), + (11942, 45991, 'kill_visemes_u', 0), + (11943, 45992, 'kill_visemes_w', 0), + (11944, 45993, 'kill_vision_1', 0), + (11945, 45994, 'kill_vision_2', 0), + (11946, 45995, 'kill_vision_3', 0), + (11947, 45996, 'kill_vision_4', 0), + (11948, 45997, 'kill_vo_callout_afk', 0), + (11949, 45998, 'kill_vo_callout_agree', 0), + (11950, 45999, 'kill_vo_callout_apologies', 0), + (11951, 46000, 'kill_vo_callout_assist', 0), + (11952, 46001, 'kill_vo_callout_battle', 0), + (11953, 46002, 'kill_vo_callout_cheer', 0), + (11954, 46003, 'kill_vo_callout_confused', 0), + (11955, 46004, 'kill_vo_callout_disagree', 0), + (11956, 46005, 'kill_vo_callout_doh', 0), + (11957, 46006, 'kill_vo_callout_flirt', 0), + (11958, 46007, 'kill_vo_callout_follow', 0), + (11959, 46008, 'kill_vo_callout_goodbye', 0), + (11960, 46009, 'kill_vo_callout_got', 0), + (11961, 46010, 'kill_vo_callout_greetings', 0), + (11962, 46011, 'kill_vo_callout_growl', 0), + (11963, 46012, 'kill_vo_callout_heal', 0), + (11964, 46013, 'kill_vo_callout_help', 0), + (11965, 46014, 'kill_vo_callout_helping', 0), + (11966, 46015, 'kill_vo_callout_hungry', 0), + (11967, 46016, 'kill_vo_callout_incoming', 0), + (11968, 46017, 'kill_vo_callout_laugh', 0), + (11969, 46018, 'kill_vo_callout_look', 0), + (11970, 46019, 'kill_vo_callout_looking', 0), + (11971, 46020, 'kill_vo_callout_out', 0), + (11972, 46021, 'kill_vo_callout_run', 0), + (11973, 46022, 'kill_vo_callout_starting', 0), + (11974, 46023, 'kill_vo_callout_stay', 0), + (11975, 46024, 'kill_vo_callout_taunting', 0), + (11976, 46025, 'kill_vo_callout_thank', 0), + (11977, 46026, 'kill_vo_callout_thirsty', 0), + (11978, 46027, 'kill_vo_callout_threaten', 0), + (11979, 46028, 'kill_vo_callout_train', 0), + (11980, 46029, 'kill_vo_callout_under', 0), + (11981, 46030, 'kill_vo_callout_vocal_attack', 0), + (11982, 46031, 'kill_vo_callout_vocal_death', 0), + (11983, 46032, 'kill_vo_callout_vocal_drown', 0), + (11984, 46033, 'kill_vo_callout_vocal_jump', 0), + (11985, 46034, 'kill_vo_callout_vocal_land', 0), + (11986, 46035, 'kill_vo_callout_vocal_ouch', 0), + (11987, 46036, 'kill_vo_callout_watch', 0), + (11988, 46037, 'kill_vo_callout_yawn', 0), + (11989, 46038, 'kill_vo_callout_yell', 0), + (11990, 46039, 'kill_vocal_attack', 0), + (11991, 46040, 'kill_vocal_attacklong', 0), + (11992, 46041, 'kill_vocal_death', 0), + (11993, 46042, 'kill_vocal_drown', 0), + (11994, 46043, 'kill_vocal_jump', 0), + (11995, 46044, 'kill_vocal_ouch', 0), + (11996, 46045, 'kill_voidbeast_attack_snd', 0), + (11997, 46046, 'kill_voidbeast_result_snd', 0), + (11998, 46047, 'kill_vr2_burst_snd', 0), + (11999, 46048, 'kill_vr2_flames_snd', 0), + (12000, 46049, 'kill_w', 0), + (12001, 46050, 'kill_wa_voltsword_sound', 0), + (12002, 46051, 'kill_wa_voltswordstart_sound', 0), + (12003, 46052, 'kill_walk', 0), + (12004, 46054, 'kill_walk_shake', 0), + (12005, 46055, 'kill_wave', 0), + (12006, 46056, 'kill_welder_lefthand', 0), + (12007, 46057, 'kill_welder_righthand', 0), + (12008, 46058, 'kill_wheel', 0), + (12009, 46059, 'kill_wheel1', 0), + (12010, 46060, 'kill_wheel_smoke', 0), + (12011, 46061, 'kill_whirling_attack', 0), + (12012, 46062, 'kill_whistle', 0), + (12013, 46063, 'kill_whome', 0), + (12014, 46064, 'kill_wild_swing', 0), + (12015, 46065, 'kill_wild_swing_recoilmax', 0), + (12016, 46066, 'kill_wildswing', 0), + (12017, 46067, 'kill_wince', 0), + (12018, 46068, 'kill_wing_glide', 0), + (12019, 46069, 'kill_wingflap', 0), + (12020, 46070, 'kill_wings_01', 0), + (12021, 46071, 'kill_wings_sound_01', 0), + (12022, 46072, 'kill_wink', 0), + (12023, 46073, 'kill_wkn_glowsplash_snd', 0), + (12024, 46074, 'kill_wod_timer_tone_snd', 0), + (12025, 46075, 'kill_woodworking_failure', 0), + (12026, 46076, 'kill_woodworking_idle', 0), + (12027, 46077, 'kill_woodworking_success', 0), + (12028, 46078, 'kill_woowoo', 0), + (12029, 46079, 'kill_wr_energy_glow_sound', 0), + (12030, 46080, 'kill_wr_energy_glowout_sound', 0), + (12031, 46081, 'kill_wr_glimmer_sound', 0), + (12032, 46082, 'kill_wr_watershield_sound', 0), + (12033, 46083, 'kill_ws_resounding_snd', 0), + (12034, 46084, 'kill_ws_singout_snd', 0), + (12035, 46085, 'kill_yeah', 0), + (12036, 46086, 'kill_yell', 0), + (12037, 46087, 'kill_zap', 0), + (12038, 46090, 'kill_airborne', 0), + (12039, 46097, 'kill_froglok_forestry_chopping', 0), + (12040, 46099, 'kill_ogre_forestry_success', 0), + (12041, 46100, 'kill_ogre_gathering_search', 0), + (12042, 46101, 'kill_ogre_gathering_success', 0), + (12043, 46102, 'kill_ogre_mining_success', 0), + (12044, 46226, 'kill_attack_boss01', 0), + (12045, 46227, 'kill_attack_boss02', 0), + (12046, 46228, 'kill_buff_boss01', 0), + (12047, 46235, 'kill_heal_boss01', 0), + (12048, 46237, 'kill_result_fruitcake_explosion', 0), + (12049, 46238, 'kill_result_snowball_big_explosion', 0), + (12050, 46310, 'kill_sound_groundhit', 0), + (12051, 46369, 'kill_froglok_1h_sword_attack_recoil', 0), + (12052, 46370, 'kill_froglok_1h_sword_attack_recoil01', 0), + (12053, 46371, 'kill_froglok_1h_sword_attack_recoil02', 0), + (12054, 46372, 'kill_froglok_1h_sword_attack_recoil03', 0), + (12055, 46373, 'kill_froglok_1h_thrown_attack', 0), + (12056, 46374, 'kill_froglok_2h_sword_attack_recoil', 0), + (12057, 46375, 'kill_froglok_2h_sword_attack_recoil01', 0), + (12058, 46376, 'kill_froglok_2h_sword_attack_recoil02', 0), + (12059, 46377, 'kill_froglok_2h_sword_backup', 0), + (12060, 46378, 'kill_froglok_2h_sword_defensive_buff', 0), + (12061, 46379, 'kill_froglok_2h_sword_enter', 0), + (12062, 46380, 'kill_froglok_2h_sword_offensive_buff', 0), + (12063, 46381, 'kill_froglok_2h_sword_ouch_backhand', 0), + (12064, 46382, 'kill_froglok_2h_sword_ouch_down', 0), + (12065, 46383, 'kill_froglok_2h_sword_ouch_forehand', 0), + (12066, 46384, 'kill_froglok_2h_sword_ouch_thrust', 0), + (12067, 46385, 'kill_froglok_2h_sword_parry_backhand', 0), + (12068, 46386, 'kill_froglok_2h_sword_parry_down', 0), + (12069, 46387, 'kill_froglok_2h_sword_parry_forehand', 0), + (12070, 46388, 'kill_froglok_2h_sword_super_buff', 0), + (12071, 46389, 'kill_froglok_2h_sword_walk', 0), + (12072, 46390, 'kill_froglok_bostaff_attack_recoil', 0), + (12073, 46391, 'kill_froglok_bostaff_attack_recoil01', 0), + (12074, 46392, 'kill_froglok_bostaff_attack_recoil02', 0), + (12075, 46393, 'kill_froglok_bostaff_attack_recoil03', 0), + (12076, 46394, 'kill_froglok_bostaff_defensive_buff', 0), + (12077, 46395, 'kill_froglok_bostaff_dodge_backhand', 0), + (12078, 46396, 'kill_froglok_bostaff_dodge_down', 0), + (12079, 46397, 'kill_froglok_bostaff_dodge_forehand', 0), + (12080, 46398, 'kill_froglok_bostaff_dodge_thrust', 0), + (12081, 46399, 'kill_froglok_bostaff_offensive_buff', 0), + (12082, 46400, 'kill_froglok_bostaff_ouch_backhand', 0), + (12083, 46401, 'kill_froglok_bostaff_ouch_down', 0), + (12084, 46402, 'kill_froglok_bostaff_ouch_forehand', 0), + (12085, 46403, 'kill_froglok_bostaff_ouch_thrust', 0), + (12086, 46404, 'kill_froglok_bostaff_parry_backhand', 0), + (12087, 46405, 'kill_froglok_bostaff_parry_down', 0), + (12088, 46406, 'kill_froglok_bostaff_parry_forehand', 0), + (12089, 46407, 'kill_froglok_bostaff_parry_thrust', 0), + (12090, 46408, 'kill_froglok_bostaff_super_buff', 0), + (12091, 46409, 'kill_froglok_dual_wield_attack_recoil', 0), + (12092, 46410, 'kill_froglok_dual_wield_attack_recoil01', 0), + (12093, 46411, 'kill_froglok_dual_wield_attack_recoil02', 0), + (12094, 46412, 'kill_froglok_dual_wield_attack_recoil03', 0), + (12095, 46413, 'kill_froglok_dual_wield_parry_backhand', 0), + (12096, 46414, 'kill_froglok_dual_wield_parry_down', 0), + (12097, 46415, 'kill_froglok_dual_wield_parry_forehand', 0), + (12098, 46416, 'kill_froglok_dual_wield_parry_thrust', 0), + (12099, 46417, 'kill_froglok_monk_attack_recoil', 0), + (12100, 46418, 'kill_froglok_monk_attack_recoil02', 0), + (12101, 46419, 'kill_froglok_monk_charge_up', 0), + (12102, 46420, 'kill_froglok_monk_defensive_buff', 0), + (12103, 46421, 'kill_froglok_monk_dodge_backhand', 0), + (12104, 46422, 'kill_froglok_monk_dodge_down', 0), + (12105, 46423, 'kill_froglok_monk_dodge_forehand', 0), + (12106, 46424, 'kill_froglok_monk_dodge_thrust', 0), + (12107, 46425, 'kill_froglok_monk_kick_flying', 0), + (12108, 46426, 'kill_froglok_monk_offensive_buff', 0), + (12109, 46427, 'kill_froglok_monk_ouch_down', 0), + (12110, 46428, 'kill_froglok_monk_ouch_thrust', 0), + (12111, 46429, 'kill_froglok_monk_parry_backhand', 0), + (12112, 46430, 'kill_froglok_monk_parry_down', 0), + (12113, 46431, 'kill_froglok_monk_parry_forehand', 0), + (12114, 46432, 'kill_froglok_monk_parry_thrust', 0), + (12115, 46433, 'kill_froglok_monk_super_buff', 0), + (12116, 46434, 'kill_froglok_monk_taunt_combat_art', 0), + (12117, 46435, 'kill_froglok_pike_attack_recoil', 0), + (12118, 46436, 'kill_froglok_pike_attack_recoil01', 0), + (12119, 46437, 'kill_froglok_pike_attack_recoil02', 0), + (12120, 46438, 'kill_froglok_pike_charge_up', 0), + (12121, 46439, 'kill_froglok_pike_dodge_backhand', 0), + (12122, 46440, 'kill_froglok_pike_dodge_down', 0), + (12123, 46441, 'kill_froglok_pike_dodge_forehand', 0), + (12124, 46442, 'kill_froglok_pike_dodge_thrust', 0), + (12125, 46443, 'kill_froglok_pike_offensive_buff', 0), + (12126, 46444, 'kill_froglok_pike_ouch_backhand', 0), + (12127, 46445, 'kill_froglok_pike_ouch_down', 0), + (12128, 46446, 'kill_froglok_pike_ouch_forehand', 0), + (12129, 46447, 'kill_froglok_pike_ouch_thrust', 0), + (12130, 46448, 'kill_froglok_pike_parry_backhand', 0), + (12131, 46449, 'kill_froglok_pike_parry_down', 0), + (12132, 46450, 'kill_froglok_pike_parry_forehand', 0), + (12133, 46451, 'kill_froglok_pike_parry_thrust', 0), + (12134, 46452, 'kill_froglok_pugilist_attack_recoil02', 0), + (12135, 46453, 'kill_froglok_pugilist_defensive_buff', 0), + (12136, 46454, 'kill_froglok_pugilist_dodge_backhand', 0), + (12137, 46455, 'kill_froglok_pugilist_dodge_down', 0), + (12138, 46456, 'kill_froglok_pugilist_dodge_forehand', 0), + (12139, 46457, 'kill_froglok_pugilist_dodge_thrust', 0), + (12140, 46458, 'kill_froglok_pugilist_offensive_buff', 0), + (12141, 46459, 'kill_froglok_pugilist_ouch_backhand', 0), + (12142, 46460, 'kill_froglok_pugilist_ouch_down', 0), + (12143, 46461, 'kill_froglok_pugilist_ouch_forehand', 0), + (12144, 46462, 'kill_froglok_pugilist_super_buff', 0), + (12145, 46473, 'kill_froglok_bostaff_charge_up', 0), + (12146, 46474, 'kill_froglok_dual_wield_knockdowntoknees', 0), + (12147, 46475, 'kill_froglok_dual_wield_offensive_buff', 0), + (12148, 46476, 'kill_froglok_dual_wield_super_buff', 0), + (12149, 46477, 'kill_froglok_knockdown_attack', 0), + (12150, 46478, 'kill_froglok_knockdowntoknees', 0), + (12151, 46479, 'kill_froglok_offensive_buff', 0), + (12152, 46480, 'kill_froglok_pike_backup', 0), + (12153, 46481, 'kill_froglok_pike_knockdowntoknees', 0), + (12154, 46482, 'kill_froglok_pike_walk', 0), + (12155, 46483, 'kill_froglok_pugilist_attack01', 0), + (12156, 46484, 'kill_froglok_pugilist_attack_recoil01', 0), + (12157, 46485, 'kill_froglok_pugilist_knockdowntoknees', 0), + (12158, 46486, 'kill_froglok_super_buff', 0), + (12159, 46488, 'kill_lights', 0), + (12160, 46489, 'kill_lights_spiral', 0), + (12161, 46499, 'kill_fae_light_dance', 0), + (12162, 46500, 'kill_horse_long_fall', 0), + (12163, 46503, 'kill_trdskl_fruitcake', 0), + (12164, 46512, 'kill_fire01_big', 0), + (12165, 46513, 'kill_fire01_small', 0), + (12166, 46515, 'kill_lights_blue', 0), + (12167, 46516, 'kill_lights_blue_slow', 0), + (12168, 46517, 'kill_lights_flocked', 0), + (12169, 46518, 'kill_lights_gold', 0), + (12170, 46519, 'kill_lights_gold_slow', 0), + (12171, 46520, 'kill_lights_red', 0), + (12172, 46521, 'kill_lights_red_slow', 0), + (12173, 46522, 'kill_lights_white', 0), + (12174, 46523, 'kill_lights_white_slow', 0), + (12175, 46553, 'kill_dwarf_forestry_success', 0), + (12176, 46554, 'kill_gnome_forestry_success', 0), + (12177, 46555, 'kill_halfling_forestry_success', 0), + (12178, 46557, 'kill_ogre_1h_crush_ouch_forehand', 0), + (12179, 46558, 'kill_ogre_1h_pierce_ouch_forehand', 0), + (12180, 46559, 'kill_ogre_1h_sword_ouch_forehand', 0), + (12181, 46560, 'kill_ogre_1h_thrown_ouch_forehand', 0), + (12182, 46561, 'kill_ogre_2h_sword_dodge_backhand', 0), + (12183, 46562, 'kill_ogre_2h_sword_dodge_forehand', 0), + (12184, 46563, 'kill_ogre_2h_sword_ouch_down', 0), + (12185, 46564, 'kill_ogre_2h_sword_ouch_thrust', 0), + (12186, 46565, 'kill_ogre_dual_wield_dodge_backhand', 0), + (12187, 46566, 'kill_ogre_dual_wield_dodge_forehand', 0), + (12188, 46567, 'kill_ogre_dual_wield_ouch_forehand', 0), + (12189, 46568, 'kill_ogre_pike_dodge_backhand', 0), + (12190, 46569, 'kill_ogre_pike_dodge_forehand', 0), + (12191, 46570, 'kill_ogre_pike_kick', 0), + (12192, 46571, 'kill_ogre_pike_ouch_backhand', 0), + (12193, 46572, 'kill_ogre_pike_ouch_down', 0), + (12194, 46573, 'kill_ogre_pike_ouch_forehand', 0), + (12195, 46574, 'kill_ogre_pike_ouch_thrust', 0), + (12196, 46584, 'kill_darkelf_female_2h_sword_wild_swing', 0), + (12197, 46585, 'kill_erudite_female_2h_sword_wild_swing', 0), + (12198, 46586, 'kill_fae_light_2h_sword_whirling_attack', 0), + (12199, 46587, 'kill_fae_light_2h_sword_wild_swing', 0), + (12200, 46588, 'kill_fae_light_female_2h_sword_wild_swing', 0), + (12201, 46589, 'kill_gnome_female_2h_sword_wild_swing', 0), + (12202, 46590, 'kill_halfelf_female_2h_sword_wild_swing', 0), + (12203, 46591, 'kill_highelf_female_2h_sword_wild_swing', 0), + (12204, 46592, 'kill_human_female_2h_sword_wild_swing', 0), + (12205, 46593, 'kill_iksar_female_2h_sword_wild_swing', 0), + (12206, 46595, 'kill_kerra_female_2h_sword_wild_swing', 0), + (12207, 46596, 'kill_ratonga_female_2h_sword_wild_swing', 0), + (12208, 46598, 'kill_troll_female_2h_sword_wild_swing', 0), + (12209, 46599, 'kill_woodelf_female_2h_sword_wild_swing', 0), + (12210, 46618, 'kill_darkelf_female_pike_charge_up', 0), + (12211, 46619, 'kill_darkelf_female_pike_defensive_buff', 0), + (12212, 46620, 'kill_darkelf_female_pike_offensive_buff', 0), + (12213, 46621, 'kill_erudite_female_pike_charge_up', 0), + (12214, 46622, 'kill_erudite_female_pike_defensive_buff', 0), + (12215, 46623, 'kill_erudite_female_pike_offensive_buff', 0), + (12216, 46624, 'kill_fae_light_female_pike_charge_up', 0), + (12217, 46625, 'kill_fae_light_female_pike_defensive_buff', 0), + (12218, 46626, 'kill_fae_light_female_pike_offensive_buff', 0), + (12219, 46627, 'kill_fae_light_untrained_ouch01', 0), + (12220, 46628, 'kill_gnome_female_pike_charge_up', 0), + (12221, 46629, 'kill_gnome_female_pike_defensive_buff', 0), + (12222, 46630, 'kill_gnome_female_pike_offensive_buff', 0), + (12223, 46631, 'kill_halfelf_female_pike_charge_up', 0), + (12224, 46632, 'kill_halfelf_female_pike_defensive_buff', 0), + (12225, 46633, 'kill_halfelf_female_pike_offensive_buff', 0), + (12226, 46634, 'kill_highelf_female_pike_charge_up', 0), + (12227, 46635, 'kill_highelf_female_pike_defensive_buff', 0), + (12228, 46636, 'kill_highelf_female_pike_offensive_buff', 0), + (12229, 46637, 'kill_human_female_pike_charge_up', 0), + (12230, 46638, 'kill_human_female_pike_defensive_buff', 0), + (12231, 46639, 'kill_human_female_pike_offensive_buff', 0), + (12232, 46640, 'kill_iksar_female_pike_charge_up', 0), + (12233, 46641, 'kill_iksar_female_pike_defensive_buff', 0), + (12234, 46642, 'kill_iksar_female_pike_offensive_buff', 0), + (12235, 46644, 'kill_kerra_female_pike_charge_up', 0), + (12236, 46645, 'kill_kerra_female_pike_defensive_buff', 0), + (12237, 46646, 'kill_kerra_female_pike_offensive_buff', 0), + (12238, 46647, 'kill_ratonga_female_pike_charge_up', 0), + (12239, 46648, 'kill_ratonga_female_pike_defensive_buff', 0), + (12240, 46649, 'kill_ratonga_female_pike_offensive_buff', 0), + (12241, 46651, 'kill_troll_female_pike_charge_up', 0), + (12242, 46652, 'kill_troll_female_pike_defensive_buff', 0), + (12243, 46653, 'kill_troll_female_pike_offensive_buff', 0), + (12244, 46654, 'kill_woodelf_female_pike_charge_up', 0), + (12245, 46655, 'kill_woodelf_female_pike_defensive_buff', 0), + (12246, 46656, 'kill_woodelf_female_pike_offensive_buff', 0), + (12247, 46705, 'kill_design_frostfell_candy_canes', 0), + (12248, 46726, 'kill_fire_hearts', 0), + (12249, 46778, 'kill_result_heart_vision', 0), + (12250, 46779, 'kill_result_heartbreak', 0), + (12251, 46791, 'kill_result_flies', 0), + (12252, 46792, 'kill_result_weapon_trail_poison', 0), + (12253, 46943, 'kill_result_dagger_vision_p2p', 0), + (12254, 46944, 'kill_result_heart_vision_p2p', 0), + (12255, 46954, 'kill_flirt_short_butt', 0), + (12256, 46955, 'kill_flirt_short_leg', 0), + (12257, 46956, 'kill_flirt_short_shake', 0), + (12258, 46957, 'kill_flirt_short_wave', 0), + (12259, 46958, 'kill_flirt_short_wave2', 0), + (12260, 46959, 'kill_flirt_short_wave3', 0), + (12261, 46961, 'kill_result_heart_success', 0), + (12262, 46991, 'kill_design_result_static_scare', 0), + (12263, 46993, 'kill_result_fog_poison_billboards', 0), + (12264, 46994, 'kill_result_fog_poison_billboards_small', 0), + (12265, 46995, 'kill_result_fog_poison_billboards_thinner', 0), + (12266, 46996, 'kill_roxbury', 0), + (12267, 47010, 'kill_cast_pfx_notes_l', 0), + (12268, 47011, 'kill_cast_pfx_notes_r', 0), + (12269, 47080, 'kill_sound_unrest_quel_piano', 0), + (12270, 47091, 'kill_water', 0), + (12271, 47132, 'kill_1h_wand_attack', 0), + (12272, 47133, 'kill_1h_wand_attack01', 0), + (12273, 47134, 'kill_1h_wand_attack02', 0), + (12274, 47135, 'kill_1h_wand_attack03', 0), + (12275, 47136, 'kill_1h_wand_attack_recoil', 0), + (12276, 47137, 'kill_1h_wand_attack_recoil01', 0), + (12277, 47138, 'kill_1h_wand_attack_recoil02', 0), + (12278, 47139, 'kill_1h_wand_attack_recoil03', 0), + (12279, 47140, 'kill_1h_wand_backup', 0), + (12280, 47141, 'kill_1h_wand_dodge_backhand', 0), + (12281, 47142, 'kill_1h_wand_dodge_down', 0), + (12282, 47143, 'kill_1h_wand_dodge_forehand', 0), + (12283, 47144, 'kill_1h_wand_dodge_thrust', 0), + (12284, 47145, 'kill_1h_wand_enter', 0), + (12285, 47146, 'kill_1h_wand_exit', 0), + (12286, 47147, 'kill_1h_wand_idle', 0), + (12287, 47148, 'kill_1h_wand_ouch_backhand', 0), + (12288, 47149, 'kill_1h_wand_ouch_down', 0), + (12289, 47150, 'kill_1h_wand_ouch_forehand', 0), + (12290, 47151, 'kill_1h_wand_ouch_thrust', 0), + (12291, 47152, 'kill_1h_wand_parry_backhand', 0), + (12292, 47153, 'kill_1h_wand_parry_down', 0), + (12293, 47154, 'kill_1h_wand_parry_forehand', 0), + (12294, 47155, 'kill_1h_wand_parry_thrust', 0), + (12295, 47156, 'kill_1h_wand_strafe_left', 0), + (12296, 47157, 'kill_1h_wand_strafe_right', 0), + (12297, 47158, 'kill_1h_wand_walk', 0), + (12298, 47169, 'kill_snd_design_unrest_zombie_scare', 0), + (12299, 47175, 'kill_constant2_fx', 0), + (12300, 47188, 'kill_result_sparkles_explode_noise', 0), + (12301, 47190, 'kill_sound_howl', 0), + (12302, 47228, 'kill_attack_recoil', 0), + (12303, 47229, 'kill_attack_recoil01', 0), + (12304, 47230, 'kill_attack_recoil02', 0), + (12305, 47231, 'kill_attack_recoil03', 0), + (12306, 47237, 'kill_parry_backhand', 0), + (12307, 47238, 'kill_parry_down', 0), + (12308, 47239, 'kill_parry_forehand', 0), + (12309, 47240, 'kill_parry_thrust', 0), + (12310, 47265, 'kill_monk_offensive_buff_short', 0), + (12311, 47274, 'kill_result_sparkle_trail_weapon_right_glow_blend_brown', 0), + (12312, 47275, 'kill_result_sparkle_trail_weapon_right_glow_blend_purple', 0), + (12313, 47276, 'kill_result_sparkle_trail_weapon_right_glow_silver', 0), + (12314, 47277, 'kill_result_sparkle_trail_weapon_right_glow_tan', 0), + (12315, 47287, 'kill_1h_pierce_attack_03', 0), + (12316, 47303, 'kill_result_sparkle_trail_rightfoot_glow', 0), + (12317, 47323, 'kill_cast_mist_sphere_sub', 0), + (12318, 47329, 'kill_result_ghost_shield_p2p', 0), + (12319, 47344, 'kill_design_flying_barrel', 0), + (12320, 47353, 'kill_result_breaking_faith_wall', 0), + (12321, 47357, 'kill_cached_state2', 0), + (12322, 47391, 'kill_result_flash_weapon_brown', 0), + (12323, 47392, 'kill_result_flash_weapon_purple', 0), + (12324, 47393, 'kill_result_flash_weapon_silver', 0), + (12325, 47394, 'kill_result_glow_weapon_tan', 0), + (12326, 47395, 'kill_result_mist_clingy_sub', 0), + (12327, 47396, 'kill_result_shout', 0), + (12328, 47449, 'kill_cast_debuff_blend', 0), + (12329, 47452, 'kill_cast_shield_grow_blend', 0), + (12330, 47489, 'kill_design_result_bubble_ring', 0), + (12331, 47504, 'kill_fel_epic_symbol', 0), + (12332, 47507, 'kill_warg_backup', 0), + (12333, 47508, 'kill_warg_fall', 0), + (12334, 47509, 'kill_warg_idle', 0), + (12335, 47510, 'kill_warg_jump', 0), + (12336, 47511, 'kill_warg_jump_substitute', 0), + (12337, 47512, 'kill_warg_land', 0), + (12338, 47513, 'kill_warg_long_fall', 0), + (12339, 47514, 'kill_warg_run', 0), + (12340, 47515, 'kill_warg_turn_left', 0), + (12341, 47516, 'kill_warg_turn_right', 0), + (12342, 47517, 'kill_warg_walk', 0), + (12343, 47565, 'kill_electric_hands_l', 0), + (12344, 47566, 'kill_electric_hands_r', 0), + (12345, 47570, 'kill_trdskl_horn', 0), + (12346, 47578, 'kill_warg_idle01', 0), + (12347, 47579, 'kill_warg_idle02', 0), + (12348, 47607, 'kill_pawstep_trigger', 0), + (12349, 47637, 'kill_result_deathward_heal', 0), + (12350, 47638, 'kill_result_doppleganger_p2p', 0), + (12351, 47639, 'kill_result_eyehand_buff', 0), + (12352, 47657, 'kill_cast_acid_storm_damage', 0), + (12353, 47663, 'kill_result_acid_rain_damage', 0), + (12354, 47664, 'kill_result_acid_storm_damage', 0), + (12355, 47672, 'kill_pawstep', 0), + (12356, 47681, 'kill_pawstep_snow', 0), + (12357, 47686, 'kill_snd_horn_centaur', 0), + (12358, 47687, 'kill_snd_horn_conch', 0), + (12359, 47688, 'kill_snd_horn_gnoll', 0), + (12360, 47689, 'kill_snd_horn_goblin', 0), + (12361, 47692, 'kill_cast_ball_lightning_damage', 0), + (12362, 47693, 'kill_cast_conjuror', 0), + (12363, 47705, 'kill_result_countersong_p2p', 0), + (12364, 47706, 'kill_result_rays_of_disintigration', 0), + (12365, 47707, 'kill_result_rays_of_disintigration_p2p', 0), + (12366, 47713, 'kill_cast_vampirism_p2p', 0), + (12367, 47715, 'kill_froglok_warg_idle', 0), + (12368, 47716, 'kill_froglok_warg_jump_substitute', 0), + (12369, 47746, 'kill_particle_mood_combat_enter', 0), + (12370, 47747, 'kill_result_fatal_followup', 0), + (12371, 47748, 'kill_result_puppetmaster', 0), + (12372, 47757, 'kill_special', 0), + (12373, 47764, 'kill_result_barrier', 0), + (12374, 47765, 'kill_result_softkill', 0), + (12375, 47769, 'kill_cast_leaf_blower_p2p', 0), + (12376, 47772, 'kill_cast_waterflush_p2p', 0), + (12377, 47775, 'kill_result_firewhimsy_p2p', 0), + (12378, 47776, 'kill_result_leaves_sticky', 0), + (12379, 47777, 'kill_result_p2p_lightning_bolts', 0), + (12380, 47819, 'kill_design_spotlight', 0), + (12381, 47821, 'kill_pawstep_leather_carpet', 0), + (12382, 47822, 'kill_pawstep_leather_dirt', 0), + (12383, 47823, 'kill_pawstep_leather_grass', 0), + (12384, 47824, 'kill_pawstep_leather_gravel', 0), + (12385, 47825, 'kill_pawstep_leather_ice', 0), + (12386, 47826, 'kill_pawstep_leather_metal', 0), + (12387, 47827, 'kill_pawstep_leather_mud', 0), + (12388, 47828, 'kill_pawstep_leather_sand', 0), + (12389, 47829, 'kill_pawstep_leather_snow', 0), + (12390, 47830, 'kill_pawstep_leather_stone', 0), + (12391, 47831, 'kill_pawstep_leather_water', 0), + (12392, 47832, 'kill_pawstep_leather_wood', 0), + (12393, 47862, 'kill_snd_fire_large_loop', 0), + (12394, 47877, 'kill_sound_peck', 0), + (12395, 47885, 'kill_sound_damagefeather', 0), + (12396, 47888, 'kill_cast_dirge_stringed_loop', 0), + (12397, 47890, 'kill_cast_horn_blowing_end', 0), + (12398, 47891, 'kill_cast_horn_blowing_loop', 0), + (12399, 47896, 'kill_fae_dark_1h_sword_attack', 0), + (12400, 47897, 'kill_fae_dark_1h_sword_attack01', 0), + (12401, 47898, 'kill_fae_dark_1h_sword_attack02', 0), + (12402, 47899, 'kill_fae_dark_1h_sword_attack03', 0), + (12403, 47900, 'kill_fae_dark_1h_sword_death_blow', 0), + (12404, 47901, 'kill_fae_dark_1h_sword_death_blow01', 0), + (12405, 47902, 'kill_fae_dark_1h_sword_dodge_backhand', 0), + (12406, 47903, 'kill_fae_dark_1h_sword_dodge_down', 0), + (12407, 47904, 'kill_fae_dark_1h_sword_dodge_forehand', 0), + (12408, 47905, 'kill_fae_dark_1h_sword_dodge_thrust', 0), + (12409, 47906, 'kill_fae_dark_1h_sword_ouch_backhand', 0), + (12410, 47907, 'kill_fae_dark_1h_sword_ouch_down', 0), + (12411, 47908, 'kill_fae_dark_1h_sword_ouch_forehand', 0), + (12412, 47909, 'kill_fae_dark_1h_sword_ouch_thrust', 0), + (12413, 47910, 'kill_fae_dark_1h_sword_parry_backhand', 0), + (12414, 47911, 'kill_fae_dark_1h_sword_parry_down', 0), + (12415, 47912, 'kill_fae_dark_1h_sword_parry_forehand', 0), + (12416, 47913, 'kill_fae_dark_1h_sword_parry_thrust', 0), + (12417, 47914, 'kill_fae_dark_2h_sword_attack', 0), + (12418, 47915, 'kill_fae_dark_2h_sword_attack01', 0), + (12419, 47916, 'kill_fae_dark_2h_sword_attack02', 0), + (12420, 47917, 'kill_fae_dark_2h_sword_defensive_buff', 0), + (12421, 47918, 'kill_fae_dark_2h_sword_dodge_backhand', 0), + (12422, 47919, 'kill_fae_dark_2h_sword_dodge_down', 0), + (12423, 47920, 'kill_fae_dark_2h_sword_dodge_forehand', 0), + (12424, 47921, 'kill_fae_dark_2h_sword_enter', 0), + (12425, 47922, 'kill_fae_dark_2h_sword_kick', 0), + (12426, 47923, 'kill_fae_dark_2h_sword_ouch_backhand', 0), + (12427, 47924, 'kill_fae_dark_2h_sword_ouch_down', 0), + (12428, 47925, 'kill_fae_dark_2h_sword_ouch_forehand', 0), + (12429, 47926, 'kill_fae_dark_2h_sword_ouch_thrust', 0), + (12430, 47927, 'kill_fae_dark_2h_sword_whirling_attack', 0), + (12431, 47928, 'kill_fae_dark_2h_sword_wild_swing', 0), + (12432, 47929, 'kill_fae_dark_bostaff_attack01', 0), + (12433, 47930, 'kill_fae_dark_bostaff_attack02', 0), + (12434, 47931, 'kill_fae_dark_bostaff_attack03', 0), + (12435, 47932, 'kill_fae_dark_bostaff_dodge_backhand', 0), + (12436, 47933, 'kill_fae_dark_bostaff_dodge_forehand', 0), + (12437, 47934, 'kill_fae_dark_climbing_backup', 0), + (12438, 47935, 'kill_fae_dark_climbing_enter_down_root', 0), + (12439, 47936, 'kill_fae_dark_climbing_exit_up_root', 0), + (12440, 47937, 'kill_fae_dark_climbing_idle', 0), + (12441, 47938, 'kill_fae_dark_climbing_strafe_left', 0), + (12442, 47939, 'kill_fae_dark_climbing_strafe_right', 0), + (12443, 47940, 'kill_fae_dark_climbing_walk', 0), + (12444, 47941, 'kill_fae_dark_dance', 0), + (12445, 47942, 'kill_fae_dark_dead', 0), + (12446, 47943, 'kill_fae_dark_dead_enter', 0), + (12447, 47944, 'kill_fae_dark_dual_wield_attack', 0), + (12448, 47945, 'kill_fae_dark_dual_wield_attack01', 0), + (12449, 47946, 'kill_fae_dark_dual_wield_attack02', 0), + (12450, 47947, 'kill_fae_dark_dual_wield_attack03', 0), + (12451, 47948, 'kill_fae_dark_dual_wield_dodge_backhand', 0), + (12452, 47949, 'kill_fae_dark_dual_wield_dodge_forehand', 0), + (12453, 47950, 'kill_fae_dark_dual_wield_kick', 0), + (12454, 47951, 'kill_fae_dark_dual_wield_ouch_backhand', 0), + (12455, 47952, 'kill_fae_dark_dual_wield_ouch_forehand', 0), + (12456, 47953, 'kill_fae_dark_dual_wield_parry_down', 0), + (12457, 47954, 'kill_fae_dark_dual_wield_whirling_attack', 0), + (12458, 47955, 'kill_fae_dark_dual_wield_wild_swing', 0), + (12459, 47956, 'kill_fae_dark_idle', 0), + (12460, 47957, 'kill_fae_dark_monk_attack', 0), + (12461, 47958, 'kill_fae_dark_monk_attack01', 0), + (12462, 47959, 'kill_fae_dark_monk_attack02', 0), + (12463, 47960, 'kill_fae_dark_monk_attack03', 0), + (12464, 47961, 'kill_fae_dark_monk_dodge_backhand', 0), + (12465, 47962, 'kill_fae_dark_monk_dodge_down', 0), + (12466, 47963, 'kill_fae_dark_monk_wild_swing', 0), + (12467, 47964, 'kill_fae_dark_pike_attack', 0), + (12468, 47965, 'kill_fae_dark_pike_attack01', 0), + (12469, 47966, 'kill_fae_dark_pike_attack02', 0), + (12470, 47967, 'kill_fae_dark_pike_kick', 0), + (12471, 47968, 'kill_fae_dark_pike_whirling_attack', 0), + (12472, 47969, 'kill_fae_dark_pike_wild_swing', 0), + (12473, 47970, 'kill_fae_dark_pugilist_attack', 0), + (12474, 47971, 'kill_fae_dark_pugilist_attack02', 0), + (12475, 47972, 'kill_fae_dark_pugilist_kick', 0), + (12476, 47973, 'kill_fae_dark_pugilist_whirling_attack', 0), + (12477, 47974, 'kill_fae_dark_pugilist_wild_swing', 0), + (12478, 47975, 'kill_fae_dark_run', 0), + (12479, 47976, 'kill_fae_dark_sit_enter', 0), + (12480, 47977, 'kill_fae_dark_sit_exit', 0), + (12481, 47978, 'kill_fae_dark_sit_idle', 0), + (12482, 47979, 'kill_fae_dark_untrained_ouch01', 0), + (12483, 48000, 'kill_cast_summon_undead_assemble', 0), + (12484, 48001, 'kill_cast_summon_undead_cyclone', 0), + (12485, 48002, 'kill_cast_summon_undead_flame_spurt', 0), + (12486, 48003, 'kill_cast_summon_undead_yawn', 0), + (12487, 48013, 'kill_result_clouds_head', 0), + (12488, 48014, 'kill_run01', 0), + (12489, 48015, 'kill_run02', 0), + (12490, 48026, 'kill_cast_bard_drum_persist', 0), + (12491, 48027, 'kill_cast_bard_flute_persist', 0), + (12492, 48028, 'kill_cast_bard_stringed_persist', 0), + (12493, 48033, 'kill_result_soulsuck_p2p', 0), + (12494, 48069, 'kill_design_fireworks_show_10', 0), + (12495, 48070, 'kill_design_fireworks_show_2', 0), + (12496, 48071, 'kill_design_fireworks_show_4', 0), + (12497, 48072, 'kill_design_fireworks_show_6', 0), + (12498, 48075, 'kill_sound_bud', 0), + (12499, 48076, 'kill_sound_idle_legs', 0), + (12500, 48089, 'kill_design_neriak_opera_backdrop_moon', 0), + (12501, 48090, 'kill_design_neriak_opera_backdrop_palace', 0), + (12502, 48091, 'kill_design_neriak_opera_backdrop_sky', 0), + (12503, 48092, 'kill_design_neriak_opera_backdrop_trees', 0), + (12504, 48102, 'kill_trdskl_metal_sparks', 0), + (12505, 48131, 'kill_sound_deathwing', 0), + (12506, 48132, 'kill_sound_idlebreathe', 0), + (12507, 48133, 'kill_sound_idlewing', 0), + (12508, 48134, 'kill_sound_stinger', 0), + (12509, 48135, 'kill_sound_swooshstinger', 0), + (12510, 48177, 'kill_result_anvil_drop', 0), + (12511, 48186, 'kill_walk01', 0), + (12512, 48187, 'kill_walk02', 0), + (12513, 48243, 'kill_result_star_burst', 0), + (12514, 48244, 'kill_result_stunned_star', 0), + (12515, 48297, 'kill_attack_02', 0), + (12516, 48301, 'kill_green_smoke-ouch', 0), + (12517, 48302, 'kill_green_smoke_ouch', 0), + (12518, 48304, 'kill_royal_wave_short', 0), + (12519, 48306, 'kill_spike_ball01', 0), + (12520, 48307, 'kill_spike_ball02', 0), + (12521, 48308, 'kill_spike_ball03', 0), + (12522, 48356, 'kill_draw_weapon', 0), + (12523, 48357, 'kill_fel_epic_symbol_outer', 0), + (12524, 48379, 'kill_draw_weapon_idle', 0), + (12525, 48382, 'kill_sheathe_weapon_idle', 0), + (12526, 48383, 'kill_fade_cast_sound', 0), + (12527, 48384, 'kill_fade_reverse_sound', 0), + (12528, 48385, 'kill_cast_poison_dragon_breath_test', 0), + (12529, 48386, 'kill_cast_pricecheck', 0), + (12530, 48387, 'kill_constant_fx', 0), + (12531, 48388, 'kill_instant_fx', 0), + (12532, 48389, 'kill_sd_spiritdescend_snd', 0), + (12533, 48390, 'kill_1h_sword_idle01', 0), + (12534, 48397, 'kill_paperdoll', 0), + (12535, 48405, 'kill_tail_combat', 0), + (12536, 48408, 'kill_aura_yellow', 0), + (12537, 48409, 'kill_cast_lhand_sparkle_trail_blend', 0), + (12538, 48412, 'kill_cast_rhand_sparkle_trail_blend', 0), + (12539, 48420, 'kill_tail_run', 0), + (12540, 48425, 'kill_climbing_chainmail_rope', 0), + (12541, 48426, 'kill_climbing_leather_rope', 0), + (12542, 48427, 'kill_climbing_metal_rope', 0), + (12543, 48430, 'kill_run_tail', 0), + (12544, 48437, 'kill_result_cold_ice_crystals_hands', 0), + (12545, 48438, 'kill_result_cold_ice_crystals_lefthand', 0), + (12546, 48439, 'kill_result_cold_ice_crystals_righthand', 0), + (12547, 48440, 'kill_result_hand_rings_fire', 0), + (12548, 48441, 'kill_result_hand_rings_ice', 0), + (12549, 48442, 'kill_result_hand_rings_lightning', 0), + (12550, 48443, 'kill_result_rock_hands', 0), + (12551, 48446, 'kill_attack_fx', 0), + (12552, 48453, 'kill_result_plant_filaments', 0), + (12553, 48461, 'kill_sound_damagestone', 0), + (12554, 48462, 'kill_sound_deadloud', 0), + (12555, 48467, 'kill_cast_skull_grow', 0), + (12556, 48468, 'kill_cast_sonic_ring', 0), + (12557, 48469, 'kill_cast_sonic_ring_vertical', 0), + (12558, 48472, 'kill_result_poison_cysts_popping', 0), + (12559, 48473, 'kill_result_silence', 0), + (12560, 48480, 'kill_result_gangrene', 0), + (12561, 48488, 'kill_snd_aof_anvilfall', 0), + (12562, 48489, 'kill_snd_aof_anvilhit', 0), + (12563, 48497, 'kill_snd_acidrain_cast', 0), + (12564, 48498, 'kill_snd_acidrain_result', 0), + (12565, 48504, 'kill_death', 0), + (12566, 48507, 'kill_sheathe_weapon', 0), + (12567, 48508, 'kill_snd_design_terror001', 0), + (12568, 48509, 'kill_snd_design_terror002', 0), + (12569, 48510, 'kill_snd_design_terror003', 0), + (12570, 48511, 'kill_snd_design_terror004', 0), + (12571, 48512, 'kill_snd_design_terror005', 0), + (12572, 48513, 'kill_snd_design_terror006', 0), + (12573, 48514, 'kill_snd_design_terror007', 0), + (12574, 48515, 'kill_snd_design_terror008', 0), + (12575, 48516, 'kill_snd_design_terror009', 0), + (12576, 48517, 'kill_snd_design_terror010', 0), + (12577, 48518, 'kill_snd_design_terror011', 0), + (12578, 48519, 'kill_snd_design_terror012', 0), + (12579, 48520, 'kill_snd_design_terror020', 0), + (12580, 48521, 'kill_sound_blow', 0), + (12581, 48522, 'kill_sound_deathfall1', 0), + (12582, 48523, 'kill_sound_deathfall2', 0), + (12583, 48531, 'kill_sound_idlehit', 0), + (12584, 48532, 'kill_sound_idleyell', 0), + (12585, 48539, 'kill_kick_fx', 0), + (12586, 48540, 'kill_result_bucket', 0), + (12587, 48547, 'kill_result_lava_burst', 0), + (12588, 48548, 'kill_rhino_backup', 0), + (12589, 48549, 'kill_rhino_idle', 0), + (12590, 48550, 'kill_rhino_jump_substitute', 0), + (12591, 48551, 'kill_rhino_run', 0), + (12592, 48552, 'kill_rhino_turn_left', 0), + (12593, 48553, 'kill_rhino_turn_right', 0), + (12594, 48554, 'kill_rhino_walk', 0), + (12595, 48561, 'kill_result_blast_cone_aoe', 0), + (12596, 48562, 'kill_result_pants_off', 0), + (12597, 48569, 'kill_result_god_spell_bristlebane', 0), + (12598, 48575, 'kill_design_plant_attack', 0), + (12599, 48577, 'kill_rhino_fall', 0), + (12600, 48578, 'kill_rhino_jump', 0), + (12601, 48579, 'kill_rhino_land', 0), + (12602, 48586, 'kill_result_cocoon_blue', 0), + (12603, 48587, 'kill_result_cocoon_green', 0), + (12604, 48588, 'kill_result_cocoon_red', 0), + (12605, 48589, 'kill_result_cocoon_yellow', 0), + (12606, 48590, 'kill_result_web_shooting_p2p', 0), + (12607, 48596, 'kill_fly_combat', 0), + (12608, 48597, 'kill_fly_combat01', 0), + (12609, 48598, 'kill_fly_enter', 0), + (12610, 48599, 'kill_fly_exit', 0), + (12611, 48602, 'kill_snd_cow_moo', 0), + (12612, 48603, 'kill_trdskl_beehive', 0), + (12613, 48610, 'kill_result_bee_breath', 0), + (12614, 48611, 'kill_result_beehive_hit', 0), + (12615, 48613, 'kill_sound_ribbit', 0), + (12616, 48614, 'kill_sound_tonguesplat', 0), + (12617, 48619, 'kill_cast_wild_heart_buff', 0), + (12618, 48622, 'kill_persist_fear_skulls', 0), + (12619, 48623, 'kill_persist_wild_heart_beating', 0), + (12620, 48629, 'kill_drag_sparks', 0), + (12621, 48630, 'kill_ground_blast', 0), + (12622, 48632, 'kill_pawbuster_attack_enter', 0), + (12623, 48633, 'kill_pawbuster_attack_exit', 0), + (12624, 48634, 'kill_pawbuster_attack_idle', 0), + (12625, 48635, 'kill_result_webby_root', 0), + (12626, 48643, 'kill_sparkle_trail_weapon', 0), + (12627, 48644, 'kill_sparkle_trail_weapon_spiral', 0), + (12628, 48649, 'kill_cast_webshoot', 0), + (12629, 48650, 'kill_cast_webshoot_p2p', 0), + (12630, 48654, 'kill_walk_tail', 0), + (12631, 48659, 'kill_cast_trace_firespikes_sub_l', 0), + (12632, 48660, 'kill_cast_trace_firespikes_sub_r', 0), + (12633, 48667, 'kill_pugilist_charge_up_long', 0), + (12634, 48675, 'kill_spike_fist', 0), + (12635, 48681, 'kill_fx_on', 0), + (12636, 48683, 'kill_result_ground_blast_ring', 0), + (12637, 48689, 'kill_griffin_glide', 0), + (12638, 48695, 'kill_idle_to_combat', 0), + (12639, 48702, 'kill_result_fire_object', 0), + (12640, 48709, 'kill_rhino_long_fall', 0), + (12641, 48710, 'kill_rhino_strafe_left', 0), + (12642, 48711, 'kill_rhino_strafe_right', 0), + (12643, 48712, 'kill_run_tail_cloak', 0), + (12644, 48714, 'kill_walk_tail_cloak', 0), + (12645, 48717, 'kill_beam0_blue', 0), + (12646, 48718, 'kill_beam0_red', 0), + (12647, 48719, 'kill_beam0_yellow', 0), + (12648, 48720, 'kill_beam1_blue', 0), + (12649, 48721, 'kill_beam1_red', 0), + (12650, 48722, 'kill_beam1_yellow', 0), + (12651, 48723, 'kill_beam2_blue', 0), + (12652, 48724, 'kill_beam2_red', 0), + (12653, 48725, 'kill_beam2_yellow', 0), + (12654, 48726, 'kill_beam3_blue', 0), + (12655, 48727, 'kill_beam3_red', 0), + (12656, 48728, 'kill_beam3_yellow', 0), + (12657, 48729, 'kill_beam_door', 0), + (12658, 48734, 'kill_cast_shards', 0), + (12659, 48735, 'kill_cast_shards_blast', 0), + (12660, 48738, 'kill_mood_dance', 0), + (12661, 48741, 'kill_beam_miss_orange', 0), + (12662, 48742, 'kill_beam_miss_purple', 0), + (12663, 48743, 'kill_cast_dragon_pbae_lightning_red', 0), + (12664, 48744, 'kill_cast_dual_shards', 0), + (12665, 48747, 'kill_cast_shard_cloud_blast', 0), + (12666, 48748, 'kill_cast_shard_lightning', 0), + (12667, 48749, 'kill_cast_shard_pulse', 0), + (12668, 48750, 'kill_cast_shards_fusion', 0), + (12669, 48751, 'kill_cast_shards_merging', 0), + (12670, 48757, 'kill_ghost_idle', 0), + (12671, 48762, 'kill_cha_beam_blast0', 0), + (12672, 48763, 'kill_cha_beam_blast1', 0), + (12673, 48764, 'kill_cha_beam_blast2', 0), + (12674, 48765, 'kill_cha_beam_blast_up', 0), + (12675, 48771, 'kill_design_charasis_beams_purple', 0), + (12676, 48772, 'kill_design_charasis_beams_turquoise', 0), + (12677, 48779, 'kill_result_ghost_forced_shader_4_green', 0), + (12678, 48780, 'kill_result_ghost_forced_shader_4_red', 0), + (12679, 48787, 'kill_result_barrier_blue', 0), + (12680, 48788, 'kill_result_barrier_red', 0), + (12681, 48789, 'kill_result_barrier_yellow', 0), + (12682, 48795, 'kill_design_blood_puddle', 0), + (12683, 48797, 'kill_result_berserker_black_eyes', 0), + (12684, 48798, 'kill_result_berserker_blue_eyes', 0), + (12685, 48799, 'kill_result_berserker_purple_eyes', 0), + (12686, 48800, 'kill_result_berserker_white_eyes', 0), + (12687, 48805, 'kill_combat_idle2', 0), + (12688, 48807, 'kill_design_charasis_windfan_fx', 0), + (12689, 48810, 'kill_cast_no_target_blue_star', 0), + (12690, 48814, 'kill_design_charasis_theater_fx', 0), + (12691, 48815, 'kill_design_charasis_vision_fens', 0), + (12692, 48816, 'kill_design_charasis_vision_jarsath', 0), + (12693, 48817, 'kill_design_charasis_vision_kunzar', 0), + (12694, 48818, 'kill_design_charasis_vision_kylong', 0), + (12695, 48824, 'kill_dance_enter', 0), + (12696, 48825, 'kill_dance_exit', 0), + (12697, 48827, 'kill_result_ghost_shadow', 0), + (12698, 48833, 'kill_design_lava_projectile', 0), + (12699, 48834, 'kill_design_vision_teleport_veeshans', 0), + (12700, 48842, 'kill_sound_fall001', 0), + (12701, 48848, 'kill_design_veeshans_barrier', 0), + (12702, 48854, 'kill_design_veeshans_rock_drop', 0), + (12703, 48857, 'kill_sound_belly001', 0), + (12704, 48858, 'kill_sound_belly002', 0), + (12705, 48863, 'kill_cast_summon_undead_cyclone_green', 0), + (12706, 48865, 'kill_goo_arm_buff', 0), + (12707, 48867, 'kill_result_pus_bolt_p2p', 0), + (12708, 48868, 'kill_result_pus_splat', 0), + (12709, 48869, 'kill_result_sickly_aura_aoe', 0), + (12710, 48870, 'kill_ring', 0), + (12711, 48876, 'kill_design_vision_teleport_traks_lair', 0), + (12712, 48877, 'kill_draw_weapon_primary_trigger', 0), + (12713, 48878, 'kill_draw_weapon_secondary_trigger', 0), + (12714, 48880, 'kill_result_barrier_orange', 0), + (12715, 48881, 'kill_result_gavel_pound', 0), + (12716, 48882, 'kill_result_stinky_aura', 0), + (12717, 48883, 'kill_screen_shake', 0), + (12718, 48885, 'kill_sheathe_weapon_primary_trigger', 0), + (12719, 48886, 'kill_sheathe_weapon_secondary_trigger', 0), + (12720, 48887, 'kill_stomp_sound', 0), + (12721, 48895, 'kill_sound_bone', 0), + (12722, 48896, 'kill_sound_bonedeath', 0), + (12723, 48903, 'kill_result_glade', 0), + (12724, 48904, 'kill_result_ice_storm', 0), + (12725, 48905, 'kill_result_shroud_of_clouds', 0), + (12726, 48911, 'kill_design_karnors_beam_center', 0), + (12727, 48912, 'kill_design_karnors_beam_left', 0), + (12728, 48913, 'kill_design_karnors_beam_right', 0), + (12729, 48915, 'kill_result_timed_heart_tap', 0), + (12730, 48917, 'kill_sound_yawn', 0), + (12731, 48922, 'kill_combat_attack', 0), + (12732, 48925, 'kill_mount_attack01', 0), + (12733, 48926, 'kill_mount_combat_idle', 0), + (12734, 48927, 'kill_mount_ouch', 0), + (12735, 48928, 'kill_mount_ouch01', 0), + (12736, 48929, 'kill_result_soul_attack_p2p', 0), + (12737, 48930, 'kill_rhino_sprint', 0), + (12738, 48931, 'kill_sarnak_1h_crush_idle', 0), + (12739, 48932, 'kill_sarnak_1h_pierce_idle', 0), + (12740, 48933, 'kill_sarnak_1h_sword_idle', 0), + (12741, 48934, 'kill_sarnak_1h_thrown_idle', 0), + (12742, 48935, 'kill_sarnak_2h_sword_idle', 0), + (12743, 48936, 'kill_sarnak_backup', 0), + (12744, 48937, 'kill_sarnak_backup_run', 0), + (12745, 48938, 'kill_sarnak_bostaff_idle', 0), + (12746, 48939, 'kill_sarnak_combat_idle', 0), + (12747, 48940, 'kill_sarnak_dual_wield_idle', 0), + (12748, 48941, 'kill_sarnak_fall', 0), + (12749, 48942, 'kill_sarnak_idle', 0), + (12750, 48943, 'kill_sarnak_idle01', 0), + (12751, 48944, 'kill_sarnak_monk_idle', 0), + (12752, 48945, 'kill_sarnak_pike_idle', 0), + (12753, 48946, 'kill_sarnak_pugilist_idle', 0), + (12754, 48947, 'kill_sarnak_rhino_backup', 0), + (12755, 48948, 'kill_sarnak_rhino_idle', 0), + (12756, 48949, 'kill_sarnak_rhino_jump_substitute', 0), + (12757, 48950, 'kill_sarnak_rhino_run', 0), + (12758, 48951, 'kill_sarnak_rhino_strafe_left', 0), + (12759, 48952, 'kill_sarnak_rhino_strafe_right', 0), + (12760, 48953, 'kill_sarnak_rhino_turn_left', 0), + (12761, 48954, 'kill_sarnak_rhino_turn_right', 0), + (12762, 48955, 'kill_sarnak_run', 0), + (12763, 48956, 'kill_sarnak_run_03', 0), + (12764, 48957, 'kill_sarnak_run_down_idle', 0), + (12765, 48958, 'kill_sarnak_run_long', 0), + (12766, 48959, 'kill_sarnak_run_up_idle', 0), + (12767, 48960, 'kill_sarnak_sit_enter', 0), + (12768, 48961, 'kill_sarnak_sit_exit', 0), + (12769, 48962, 'kill_sarnak_sit_idle', 0), + (12770, 48963, 'kill_sarnak_strafe_left_run', 0), + (12771, 48964, 'kill_sarnak_strafe_right_run', 0), + (12772, 48965, 'kill_sarnak_sway_l', 0), + (12773, 48966, 'kill_sarnak_sway_r', 0), + (12774, 48967, 'kill_sarnak_untrained_idle', 0), + (12775, 48968, 'kill_sarnak_walk', 0), + (12776, 48971, 'kill_carpet_backup', 0), + (12777, 48977, 'kill_sokokar_idle', 0), + (12778, 48978, 'kill_sokokar_run', 0), + (12779, 48979, 'kill_sokokar_walk', 0), + (12780, 48986, 'kill_pus_splat', 0), + (12781, 48988, 'kill_sound_cast001', 0), + (12782, 48989, 'kill_sound_cast002', 0), + (12783, 48990, 'kill_sound_slam', 0), + (12784, 48993, 'kill_aura_green', 0), + (12785, 48996, 'kill_cast_venril_beam_buff', 0), + (12786, 48997, 'kill_cast_venril_crystal', 0), + (12787, 48998, 'kill_cast_venril_ring', 0), + (12788, 48999, 'kill_cast_venril_ring_buff', 0), + (12789, 49002, 'kill_result_ghosts', 0), + (12790, 49008, 'kill_death_enter', 0), + (12791, 49009, 'kill_death_tail', 0), + (12792, 49010, 'kill_hand_fx_left', 0), + (12793, 49011, 'kill_hand_fx_right', 0), + (12794, 49014, 'kill_sokokar_glide', 0), + (12795, 49015, 'kill_sound_deadeye001', 0), + (12796, 49016, 'kill_sound_deadeye002', 0), + (12797, 49017, 'kill_sound_deathdeflate', 0), + (12798, 49018, 'kill_sound_smoke', 0), + (12799, 49023, 'kill_cast_trail_head', 0), + (12800, 49030, 'kill_manipulate', 0), + (12801, 49038, 'kill_sound_bones', 0), + (12802, 49039, 'kill_sound_deathghost', 0), + (12803, 49045, 'kill_eye_beams', 0), + (12804, 49047, 'kill_result_pus_rain_aoe', 0), + (12805, 49048, 'kill_sarnak_1h_crush_enter', 0), + (12806, 49049, 'kill_sarnak_1h_pierce_enter', 0), + (12807, 49050, 'kill_sarnak_1h_sword_attack', 0), + (12808, 49051, 'kill_sarnak_1h_sword_attack02', 0), + (12809, 49052, 'kill_sarnak_1h_sword_attack03', 0), + (12810, 49053, 'kill_sarnak_1h_sword_death_blow', 0), + (12811, 49054, 'kill_sarnak_1h_sword_death_blow01', 0), + (12812, 49055, 'kill_sarnak_1h_sword_enter', 0), + (12813, 49056, 'kill_sarnak_1h_sword_exit', 0), + (12814, 49057, 'kill_sarnak_1h_thrown_enter', 0), + (12815, 49058, 'kill_sarnak_1h_wand_enter', 0), + (12816, 49059, 'kill_sarnak_1h_wand_idle', 0), + (12817, 49060, 'kill_sarnak_2h_sword_enter', 0), + (12818, 49061, 'kill_sarnak_dead', 0), + (12819, 49062, 'kill_sarnak_dead_enter', 0), + (12820, 49069, 'kill_result_fireworks_confetti', 0), + (12821, 49072, 'kill_cast_breath_divine', 0), + (12822, 49073, 'kill_cast_breath_magic', 0), + (12823, 49080, 'kill_result_breath_magic', 0), + (12824, 49086, 'kill_design_green_mist', 0), + (12825, 49088, 'kill_power_up', 0), + (12826, 49089, 'kill_sarnak_2h_sword_attack', 0), + (12827, 49090, 'kill_sarnak_2h_sword_attack01', 0), + (12828, 49091, 'kill_sarnak_2h_sword_attack02', 0), + (12829, 49092, 'kill_sarnak_2h_sword_kick', 0), + (12830, 49093, 'kill_sarnak_monk_enter', 0), + (12831, 49096, 'kill_cast_dragon_tail_trail', 0), + (12832, 49097, 'kill_cast_dragon_tail_trail_long', 0), + (12833, 49098, 'kill_cast_dragon_wing_buffet', 0), + (12834, 49102, 'kill_horse_combat_idle', 0), + (12835, 49104, 'kill_result_fleas', 0), + (12836, 49105, 'kill_sarnak_bow_enter', 0), + (12837, 49106, 'kill_sarnak_bow_idle', 0), + (12838, 49108, 'kill_sound_attack_main', 0), + (12839, 49109, 'kill_sound_attack_medusa', 0), + (12840, 49110, 'kill_sound_attack_mouth', 0), + (12841, 49111, 'kill_sound_damage_medusa', 0), + (12842, 49112, 'kill_sound_damage_mouth', 0), + (12843, 49113, 'kill_sound_death_medusa', 0), + (12844, 49114, 'kill_sound_death_mouth', 0), + (12845, 49115, 'kill_sound_enter', 0), + (12846, 49116, 'kill_sound_enter_vocal', 0), + (12847, 49117, 'kill_sound_swing', 0), + (12848, 49124, 'kill_result_god_cackle_tribunal', 0), + (12849, 49125, 'kill_result_god_spell_bertoxxulous', 0), + (12850, 49126, 'kill_result_god_spell_karana', 0), + (12851, 49127, 'kill_result_god_spell_tribunal', 0), + (12852, 49129, 'kill_snd_rain_9s', 0), + (12853, 49130, 'kill_trdskl_barracuda', 0), + (12854, 49133, 'kill_cast_dragon_breath_cold', 0), + (12855, 49134, 'kill_cast_dragon_breath_heat', 0), + (12856, 49135, 'kill_cast_dragon_breath_lightning', 0), + (12857, 49136, 'kill_cast_dragon_breath_poison', 0), + (12858, 49137, 'kill_cast_drake_breath_cold', 0), + (12859, 49138, 'kill_cast_drake_breath_lightning', 0), + (12860, 49139, 'kill_cast_drake_breath_magic_divine', 0), + (12861, 49140, 'kill_cast_drake_breath_poison', 0), + (12862, 49144, 'kill_design_ball_summon', 0), + (12863, 49145, 'kill_design_leash', 0), + (12864, 49146, 'kill_design_lightning_ground', 0), + (12865, 49147, 'kill_design_pillar_summon', 0), + (12866, 49149, 'kill_ouch_back', 0), + (12867, 49150, 'kill_sarnak_dual_wield_attack01', 0), + (12868, 49152, 'kill_sit_idle_tail', 0), + (12869, 49159, 'kill_runes_shissar1', 0), + (12870, 49160, 'kill_runes_shissar2', 0), + (12871, 49161, 'kill_runes_shissar3', 0), + (12872, 49162, 'kill_runes_shissar4', 0), + (12873, 49163, 'kill_runes_shissar5', 0), + (12874, 49164, 'kill_runes_shissar6', 0), + (12875, 49165, 'kill_runes_shissar7', 0), + (12876, 49166, 'kill_runes_shissar8', 0), + (12877, 49173, 'kill_pike_advance', 0), + (12878, 49180, 'kill_result_trakanon_static_repulsion', 0), + (12879, 49186, 'kill_design_poison_splashes', 0), + (12880, 49188, 'kill_particle_teleport', 0), + (12881, 49190, 'kill_wizard_rune_blast', 0), + (12882, 49197, 'kill_result_hand_rings_smoke', 0), + (12883, 49198, 'kill_result_pie_splat', 0), + (12884, 49199, 'kill_sarnak_1h_crush_attack', 0), + (12885, 49200, 'kill_sarnak_1h_crush_attack02', 0), + (12886, 49201, 'kill_sarnak_1h_crush_attack03', 0), + (12887, 49202, 'kill_sarnak_1h_pierce_attack', 0), + (12888, 49203, 'kill_sarnak_bostaff_attack', 0), + (12889, 49204, 'kill_sarnak_bostaff_attack01', 0), + (12890, 49205, 'kill_sarnak_bostaff_attack02', 0), + (12891, 49206, 'kill_sarnak_bostaff_attack03', 0), + (12892, 49207, 'kill_sarnak_dual_wield_attack', 0), + (12893, 49208, 'kill_sarnak_dual_wield_attack02', 0), + (12894, 49209, 'kill_sarnak_fishing_cast', 0), + (12895, 49210, 'kill_sarnak_fishing_fight', 0), + (12896, 49211, 'kill_sarnak_fishing_reel_in', 0), + (12897, 49212, 'kill_sarnak_forestry_chopping', 0), + (12898, 49213, 'kill_sarnak_forestry_success', 0), + (12899, 49214, 'kill_sarnak_gathering_search', 0), + (12900, 49215, 'kill_sarnak_gathering_success', 0), + (12901, 49216, 'kill_sarnak_mining_digging', 0), + (12902, 49217, 'kill_sarnak_monk_attack', 0), + (12903, 49218, 'kill_sarnak_monk_attack01', 0), + (12904, 49219, 'kill_sarnak_monk_attack02', 0), + (12905, 49220, 'kill_sarnak_monk_attack03', 0), + (12906, 49221, 'kill_sarnak_monk_kick', 0), + (12907, 49222, 'kill_sarnak_pike_attack', 0), + (12908, 49223, 'kill_sarnak_pike_attack01', 0), + (12909, 49224, 'kill_sarnak_pike_attack02', 0), + (12910, 49225, 'kill_sarnak_pike_attack03', 0), + (12911, 49226, 'kill_sarnak_pike_kick', 0), + (12912, 49228, 'kill_trdskl_pie', 0), + (12913, 49235, 'kill_result_hand_rings_poison', 0), + (12914, 49236, 'kill_sarnak_1h_sword_attack01', 0), + (12915, 49237, 'kill_sarnak_mining_success', 0), + (12916, 49240, 'kill_cast_mirror', 0), + (12917, 49244, 'kill_design_parrot_shoulder', 0), + (12918, 49246, 'kill_result_splat', 0), + (12919, 49248, 'kill_trdskl_glob', 0), + (12920, 49255, 'kill_result_bread_hit', 0), + (12921, 49257, 'kill_trdskl_bread', 0), + (12922, 49263, 'kill_froglok_dead_enter', 0), + (12923, 49264, 'kill_froglok_run_up_idle', 0), + (12924, 49265, 'kill_froglok_swim_attack', 0), + (12925, 49266, 'kill_froglok_swim_go', 0), + (12926, 49267, 'kill_froglok_swim_idle', 0), + (12927, 49268, 'kill_froglok_swim_ouch', 0), + (12928, 49269, 'kill_iksar_swim_backup', 0), + (12929, 49270, 'kill_iksar_swim_go', 0), + (12930, 49272, 'kill_sarnak_rhino_sprint', 0), + (12931, 49273, 'kill_sarnak_swim_backup', 0), + (12932, 49274, 'kill_sarnak_swim_go', 0), + (12933, 49276, 'kill_swim_go', 0), + (12934, 49281, 'kill_close', 0), + (12935, 49282, 'kill_2h_sword', 0), + (12936, 49285, 'kill_cast_armor_assemble', 0), + (12937, 49288, 'kill_cast_chalice_descending', 0), + (12938, 49295, 'kill_result_blast_double_cone_aoe', 0), + (12939, 49298, 'kill_carpet_tail', 0), + (12940, 49299, 'kill_carpet_tail_cloak', 0), + (12941, 49304, 'kill_result_book_hit', 0), + (12942, 49306, 'kill_trdskl_book', 0), + (12943, 49307, 'kill_trdskl_rose', 0), + (12944, 49313, 'kill_flash', 0), + (12945, 49314, 'kill_glint', 0), + (12946, 49317, 'kill_cast_light_beam_grow', 0), + (12947, 49322, 'kill_result_gavel_drop', 0), + (12948, 49323, 'kill_result_hearts_red', 0), + (12949, 49324, 'kill_result_light_slam_aoe', 0), + (12950, 49325, 'kill_result_vertical_blast', 0), + (12951, 49328, 'kill_cast_lightning_aoe_blast_out', 0), + (12952, 49333, 'kill_result_cyclone_storm', 0), + (12953, 49336, 'kill_cast_cyclone_storm_blast', 0), + (12954, 49343, 'kill_ouch_forhand', 0), + (12955, 49348, 'kill_community_robe_red', 0), + (12956, 49350, 'kill_fire_foolish', 0), + (12957, 49351, 'kill_guide_robe_green', 0), + (12958, 49357, 'kill_dance_synced', 0), + (12959, 49359, 'kill_result_frisbee_p2p', 0), + (12960, 49361, 'kill_trdskl_frisbee', 0), + (12961, 49364, 'kill_brew_day_mugs', 0), + (12962, 49369, 'kill_result_feather_smack', 0), + (12963, 49370, 'kill_sarnak_1h_sword_dodge_backhand', 0), + (12964, 49371, 'kill_sarnak_1h_sword_dodge_down', 0), + (12965, 49372, 'kill_sarnak_1h_sword_dodge_forehand', 0), + (12966, 49373, 'kill_sarnak_1h_sword_dodge_thrust', 0), + (12967, 49374, 'kill_sarnak_1h_sword_ouch_backhand', 0), + (12968, 49375, 'kill_sarnak_1h_sword_ouch_down', 0), + (12969, 49376, 'kill_sarnak_1h_sword_ouch_forehand', 0), + (12970, 49377, 'kill_sarnak_1h_sword_ouch_thrust', 0), + (12971, 49378, 'kill_sarnak_1h_sword_parry_backhand', 0), + (12972, 49379, 'kill_sarnak_1h_sword_parry_down', 0), + (12973, 49380, 'kill_sarnak_1h_sword_parry_forehand', 0), + (12974, 49381, 'kill_sarnak_1h_sword_parry_thrust', 0), + (12975, 49382, 'kill_sarnak_2h_sword_dodge_down', 0), + (12976, 49383, 'kill_sarnak_2h_sword_dodge_forehand', 0), + (12977, 49384, 'kill_sarnak_2h_sword_ouch_backhand', 0), + (12978, 49385, 'kill_sarnak_2h_sword_ouch_down', 0), + (12979, 49386, 'kill_sarnak_2h_sword_ouch_forehand', 0), + (12980, 49387, 'kill_sarnak_2h_sword_ouch_thrust', 0), + (12981, 49388, 'kill_sarnak_2h_sword_ouch_thust', 0), + (12982, 49389, 'kill_sarnak_2h_sword_parry_backhand', 0), + (12983, 49390, 'kill_sarnak_2h_sword_parry_down', 0), + (12984, 49391, 'kill_sarnak_2h_sword_parry_forehand', 0), + (12985, 49392, 'kill_sarnak_agree', 0), + (12986, 49393, 'kill_sarnak_applaude', 0), + (12987, 49394, 'kill_sarnak_attention', 0), + (12988, 49395, 'kill_sarnak_beckon', 0), + (12989, 49396, 'kill_sarnak_beg', 0), + (12990, 49397, 'kill_sarnak_boggle', 0), + (12991, 49398, 'kill_sarnak_bostaff_dodge_backhand', 0), + (12992, 49399, 'kill_sarnak_bostaff_dodge_down', 0), + (12993, 49400, 'kill_sarnak_bostaff_dodge_forehand', 0), + (12994, 49401, 'kill_sarnak_bostaff_ouch_backhand', 0), + (12995, 49402, 'kill_sarnak_bostaff_ouch_down', 0), + (12996, 49403, 'kill_sarnak_bostaff_ouch_forehand', 0), + (12997, 49404, 'kill_sarnak_bostaff_ouch_thrust', 0), + (12998, 49405, 'kill_sarnak_bostaff_parry_backhand', 0), + (12999, 49406, 'kill_sarnak_bostaff_parry_down', 0), + (13000, 49407, 'kill_sarnak_bostaff_parry_forehand', 0), + (13001, 49408, 'kill_sarnak_bostaff_parry_thrust', 0), + (13002, 49409, 'kill_sarnak_bow', 0), + (13003, 49410, 'kill_sarnak_brandish', 0), + (13004, 49411, 'kill_sarnak_bye', 0), + (13005, 49412, 'kill_sarnak_cackle', 0), + (13006, 49413, 'kill_sarnak_cheer', 0), + (13007, 49414, 'kill_sarnak_chuckle', 0), + (13008, 49415, 'kill_sarnak_confused', 0), + (13009, 49416, 'kill_sarnak_crazy', 0), + (13010, 49417, 'kill_sarnak_cringe', 0), + (13011, 49418, 'kill_sarnak_cry', 0), + (13012, 49419, 'kill_sarnak_curse', 0), + (13013, 49420, 'kill_sarnak_curtsey', 0), + (13014, 49421, 'kill_sarnak_curtsey2', 0), + (13015, 49422, 'kill_sarnak_cutthroat', 0), + (13016, 49423, 'kill_sarnak_doubletake', 0), + (13017, 49424, 'kill_sarnak_dual_wield_attack03', 0), + (13018, 49425, 'kill_sarnak_dual_wield_dodge_backhand', 0), + (13019, 49426, 'kill_sarnak_dual_wield_dodge_down', 0), + (13020, 49427, 'kill_sarnak_dual_wield_dodge_forehand', 0), + (13021, 49428, 'kill_sarnak_dual_wield_kick', 0), + (13022, 49429, 'kill_sarnak_dual_wield_ouch_backhand', 0), + (13023, 49430, 'kill_sarnak_dual_wield_ouch_down', 0), + (13024, 49431, 'kill_sarnak_dual_wield_ouch_forehand', 0), + (13025, 49432, 'kill_sarnak_dual_wield_parry_down', 0), + (13026, 49433, 'kill_sarnak_duck', 0), + (13027, 49434, 'kill_sarnak_fflirt', 0), + (13028, 49435, 'kill_sarnak_fistclapping', 0), + (13029, 49436, 'kill_sarnak_flex', 0), + (13030, 49437, 'kill_sarnak_flirt', 0), + (13031, 49438, 'kill_sarnak_flustered', 0), + (13032, 49439, 'kill_sarnak_frustration', 0), + (13033, 49440, 'kill_sarnak_gag', 0), + (13034, 49441, 'kill_sarnak_giggle', 0), + (13035, 49442, 'kill_sarnak_glare', 0), + (13036, 49443, 'kill_sarnak_grumble', 0), + (13037, 49444, 'kill_sarnak_happy', 0), + (13038, 49445, 'kill_sarnak_headslap', 0), + (13039, 49446, 'kill_sarnak_hearnoevil', 0), + (13040, 49447, 'kill_sarnak_heartattack', 0), + (13041, 49448, 'kill_sarnak_heelclick', 0), + (13042, 49449, 'kill_sarnak_hellno', 0), + (13043, 49450, 'kill_sarnak_hello', 0), + (13044, 49451, 'kill_sarnak_hourglass', 0), + (13045, 49452, 'kill_sarnak_howl', 0), + (13046, 49453, 'kill_sarnak_indigestion', 0), + (13047, 49454, 'kill_sarnak_itch', 0), + (13048, 49455, 'kill_sarnak_listen', 0), + (13049, 49456, 'kill_sarnak_lookaway', 0), + (13050, 49457, 'kill_sarnak_monk_dodge_backhand', 0), + (13051, 49458, 'kill_sarnak_monk_dodge_forehand', 0), + (13052, 49459, 'kill_sarnak_monk_ouch_backhand', 0), + (13053, 49460, 'kill_sarnak_monk_ouch_down', 0), + (13054, 49461, 'kill_sarnak_monk_ouch_forehand', 0), + (13055, 49462, 'kill_sarnak_monk_parry_backhand', 0), + (13056, 49463, 'kill_sarnak_monk_parry_down', 0), + (13057, 49464, 'kill_sarnak_monk_parry_forehand', 0), + (13058, 49465, 'kill_sarnak_moon', 0), + (13059, 49466, 'kill_sarnak_neener', 0), + (13060, 49467, 'kill_sarnak_no', 0), + (13061, 49468, 'kill_sarnak_nod', 0), + (13062, 49469, 'kill_sarnak_notworthy', 0), + (13063, 49470, 'kill_sarnak_orate', 0), + (13064, 49471, 'kill_sarnak_peer', 0), + (13065, 49472, 'kill_sarnak_pike_dodge_backhand', 0), + (13066, 49473, 'kill_sarnak_pike_dodge_down', 0), + (13067, 49474, 'kill_sarnak_pike_dodge_forehand', 0), + (13068, 49475, 'kill_sarnak_pike_dodge_thrust', 0), + (13069, 49476, 'kill_sarnak_pike_ouch_backhand', 0), + (13070, 49477, 'kill_sarnak_pike_ouch_down', 0), + (13071, 49478, 'kill_sarnak_pike_ouch_thrust', 0), + (13072, 49479, 'kill_sarnak_pike_parry_backhand', 0), + (13073, 49480, 'kill_sarnak_pike_parry_down', 0), + (13074, 49481, 'kill_sarnak_pike_parry_forehand', 0), + (13075, 49482, 'kill_sarnak_point', 0), + (13076, 49483, 'kill_sarnak_ponder', 0), + (13077, 49484, 'kill_sarnak_pout', 0), + (13078, 49485, 'kill_sarnak_pugilist_attack', 0), + (13079, 49486, 'kill_sarnak_pugilist_attack01', 0), + (13080, 49487, 'kill_sarnak_pugilist_attack02', 0), + (13081, 49488, 'kill_sarnak_pugilist_attack03', 0), + (13082, 49489, 'kill_sarnak_pugilist_dodge_backhand', 0), + (13083, 49490, 'kill_sarnak_pugilist_dodge_down', 0), + (13084, 49491, 'kill_sarnak_pugilist_kick', 0), + (13085, 49492, 'kill_sarnak_raisehand', 0), + (13086, 49493, 'kill_sarnak_royalwave', 0), + (13087, 49494, 'kill_sarnak_rubhands', 0), + (13088, 49495, 'kill_sarnak_rude', 0), + (13089, 49496, 'kill_sarnak_sad', 0), + (13090, 49497, 'kill_sarnak_salute', 0), + (13091, 49498, 'kill_sarnak_sarcasticclap', 0), + (13092, 49499, 'kill_sarnak_scold', 0), + (13093, 49500, 'kill_sarnak_scratch', 0), + (13094, 49501, 'kill_sarnak_scream', 0), + (13095, 49502, 'kill_sarnak_seenoevil', 0), + (13096, 49503, 'kill_sarnak_shakefist', 0), + (13097, 49504, 'kill_sarnak_shame', 0), + (13098, 49505, 'kill_sarnak_shimmy', 0), + (13099, 49506, 'kill_sarnak_shiver', 0), + (13100, 49507, 'kill_sarnak_shrug', 0), + (13101, 49508, 'kill_sarnak_sigh', 0), + (13102, 49509, 'kill_sarnak_smile', 0), + (13103, 49510, 'kill_sarnak_smirk', 0), + (13104, 49511, 'kill_sarnak_sneer', 0), + (13105, 49512, 'kill_sarnak_sneeze', 0), + (13106, 49513, 'kill_sarnak_snicker', 0), + (13107, 49514, 'kill_sarnak_sniff', 0), + (13108, 49515, 'kill_sarnak_speaknoevil', 0), + (13109, 49516, 'kill_sarnak_square', 0), + (13110, 49517, 'kill_sarnak_squeal', 0), + (13111, 49518, 'kill_sarnak_stare', 0), + (13112, 49519, 'kill_sarnak_stinky', 0), + (13113, 49520, 'kill_sarnak_stretch', 0), + (13114, 49521, 'kill_sarnak_sulk', 0), + (13115, 49522, 'kill_sarnak_swear', 0), + (13116, 49523, 'kill_sarnak_tantrum', 0), + (13117, 49524, 'kill_sarnak_tapfoot', 0), + (13118, 49525, 'kill_sarnak_taunt', 0), + (13119, 49526, 'kill_sarnak_thank', 0), + (13120, 49527, 'kill_sarnak_thumbs', 0), + (13121, 49528, 'kill_sarnak_violin', 0), + (13122, 49529, 'kill_sarnak_wave', 0), + (13123, 49530, 'kill_sarnak_whistle', 0), + (13124, 49531, 'kill_sarnak_whome', 0), + (13125, 49532, 'kill_sarnak_wince', 0), + (13126, 49533, 'kill_sarnak_wink', 0), + (13127, 49534, 'kill_sarnak_yawn', 0), + (13128, 49535, 'kill_sarnak_yeah', 0), + (13129, 49537, 'kill_trdskl_pillow', 0), + (13130, 49540, 'kill_cast_boomerang', 0), + (13131, 49546, 'kill_trdskl_boomerang', 0), + (13132, 49554, 'kill_snd_pillow_impact', 0), + (13133, 49557, 'kill_brick_throw', 0), + (13134, 49561, 'kill_horn_blow', 0), + (13135, 49569, 'kill_sound_horn', 0), + (13136, 49575, 'kill_design_cast_vision_shardofhate', 0), + (13137, 49582, 'kill_result_waterwall', 0), + (13138, 49589, 'kill_result_netted', 0), + (13139, 49591, 'kill_trdskl_net', 0), + (13140, 49599, 'kill_vek_beam01_blue', 0), + (13141, 49600, 'kill_vek_beam01_green', 0), + (13142, 49601, 'kill_vek_beam01_red', 0), + (13143, 49602, 'kill_vek_beam01_yellow', 0), + (13144, 49603, 'kill_vek_beam02_blue', 0), + (13145, 49604, 'kill_vek_beam02_green', 0), + (13146, 49605, 'kill_vek_beam02_red', 0), + (13147, 49606, 'kill_vek_beam02_yellow', 0), + (13148, 49607, 'kill_vek_beam03_blue', 0), + (13149, 49608, 'kill_vek_beam03_green', 0), + (13150, 49609, 'kill_vek_beam03_red', 0), + (13151, 49610, 'kill_vek_beam03_yellow', 0), + (13152, 49611, 'kill_vek_beam04_blue', 0), + (13153, 49612, 'kill_vek_beam04_green', 0), + (13154, 49613, 'kill_vek_beam04_red', 0), + (13155, 49614, 'kill_vek_beam04_yellow', 0), + (13156, 49615, 'kill_vek_map', 0), + (13157, 49616, 'kill_vek_mapshine', 0), + (13158, 49617, 'kill_vek_runes', 0), + (13159, 49618, 'kill_vek_sunlight', 0), + (13160, 49624, 'kill_fx_off', 0), + (13161, 49626, 'kill_knocktoback_enter', 0), + (13162, 49627, 'kill_knocktoback_exit', 0), + (13163, 49628, 'kill_knocktoback_idle', 0), + (13164, 49629, 'kill_result_brick_hit', 0), + (13165, 49631, 'kill_status_quest_guide_gives', 0), + (13166, 49632, 'kill_trdskl_brick', 0), + (13167, 49639, 'kill_result_hand_rings_shimmer', 0), + (13168, 49641, 'kill_snd_design_murderer', 0), + (13169, 49647, 'kill_design_horse_carrot', 0), + (13170, 49648, 'kill_design_rhino_carrot', 0), + (13171, 49649, 'kill_design_warg_carrot', 0), + (13172, 49650, 'kill_dn_goblin_beam_blue', 0), + (13173, 49651, 'kill_dn_goblin_beam_green', 0), + (13174, 49652, 'kill_dn_goblin_beam_red', 0), + (13175, 49653, 'kill_dn_goblin_beam_yellow', 0), + (13176, 49661, 'kill_void_storm', 0), + (13177, 49662, 'kill_void_summon_portal', 0), + (13178, 49668, 'kill_design_altar_chained', 0), + (13179, 49670, 'kill_result_blue_glow', 0), + (13180, 49671, 'kill_result_green_glow', 0), + (13181, 49672, 'kill_result_orange_glow', 0), + (13182, 49673, 'kill_result_purple_glow', 0), + (13183, 49680, 'kill_result_drake_breath', 0), + (13184, 49681, 'kill_result_napalm', 0), + (13185, 49682, 'kill_result_void_fx', 0), + (13186, 49685, 'kill_bear_backup', 0), + (13187, 49686, 'kill_bear_fall', 0), + (13188, 49687, 'kill_bear_idle', 0), + (13189, 49688, 'kill_bear_jump', 0), + (13190, 49689, 'kill_bear_jump_substitute', 0), + (13191, 49690, 'kill_bear_land', 0), + (13192, 49691, 'kill_bear_long_fall', 0), + (13193, 49692, 'kill_bear_run', 0), + (13194, 49693, 'kill_bear_turn_left', 0), + (13195, 49694, 'kill_bear_turn_right', 0), + (13196, 49695, 'kill_bear_walk', 0), + (13197, 49702, 'kill_result_blood_boil', 0), + (13198, 49703, 'kill_result_golem_rain', 0), + (13199, 49704, 'kill_result_water_ball', 0), + (13200, 49705, 'kill_result_water_burst', 0), + (13201, 49706, 'kill_result_waterspout_p2p', 0), + (13202, 49709, 'kill_cast_aoe_water_blast', 0), + (13203, 49710, 'kill_cast_barnicle_blast', 0), + (13204, 49716, 'kill_snd_claygolem_attack', 0), + (13205, 49724, 'kill_sound_attackspin', 0), + (13206, 49725, 'kill_sound_damagelow', 0), + (13207, 49726, 'kill_sound_swimwalk', 0), + (13208, 49727, 'kill_sound_walkbounce', 0), + (13209, 49728, 'kill_sound_wildswingenter', 0), + (13210, 49735, 'kill_persist_enrage', 0), + (13211, 49741, 'kill_golem_charm', 0), + (13212, 49742, 'kill_golem_shutdown', 0), + (13213, 49750, 'kill_status_quest_gives_gray', 0), + (13214, 49758, 'kill_trdskl_censer', 0), + (13215, 49764, 'kill_dusting_off', 0), + (13216, 49772, 'kill_snd_net_toss', 0), + (13217, 49779, 'kill_result_barrel_break', 0), + (13218, 49780, 'kill_result_brain_leaving', 0), + (13219, 49788, 'kill_snd_barrel_cannon', 0), + (13220, 49796, 'kill_sound_bookdeath', 0), + (13221, 49797, 'kill_sound_thunder0', 0), + (13222, 49803, 'kill_flock_of_seagulls', 0), + (13223, 49810, 'kill_mistmoore_runes_fx', 0), + (13224, 49811, 'kill_mistmoore_sun_fx', 0), + (13225, 49813, 'kill_swim_backward', 0), + (13226, 49814, 'kill_swim_forward', 0), + (13227, 49817, 'kill_cast_energy_blob', 0), + (13228, 49818, 'kill_cast_energy_blob_p2p', 0), + (13229, 49825, 'kill_result_napalm_aoe', 0), + (13230, 49832, 'kill_result_blood_puddle', 0), + (13231, 49833, 'kill_result_cold_ice_crystals_head', 0), + (13232, 49834, 'kill_result_ice_shackles', 0), + (13233, 49835, 'kill_result_icicle_impale', 0), + (13234, 49836, 'kill_result_snow_dust', 0), + (13235, 49837, 'kill_result_void_splat', 0), + (13236, 49840, 'kill_attack_bolts', 0), + (13237, 49843, 'kill_cast_sword_head', 0), + (13238, 49846, 'kill_result_sword_head', 0), + (13239, 49853, 'kill_result_steam_column', 0), + (13240, 49861, 'kill_sound_footsrape', 0), + (13241, 49862, 'kill_sound_runbreathe', 0), + (13242, 49869, 'kill_result_mesh_attack', 0), + (13243, 49874, 'kill_cast_spin_buff', 0), + (13244, 49877, 'kill_result_power_life_drain_p2p', 0), + (13245, 49883, 'kill_design_ice_door_blast', 0), + (13246, 49889, 'kill_design_rising_stairs_finish_fx', 0), + (13247, 49890, 'kill_design_rising_stairs_fx', 0), + (13248, 49897, 'kill_result_chomping_skulls', 0), + (13249, 49904, 'kill_result_pulsing_note', 0), + (13250, 49910, 'kill_design_ice_wall_breaking', 0), + (13251, 49913, 'kill_sound_ice_shatter', 0), + (13252, 49916, 'kill_cast_lost_souls', 0), + (13253, 49923, 'kill_knockeddowntoknees', 0), + (13254, 49924, 'kill_meditate', 0), + (13255, 49926, 'kill_worship', 0), + (13256, 49929, 'kill_cast_lasso', 0), + (13257, 49934, 'kill_result_cobwebs', 0), + (13258, 49941, 'kill_miragul_puzzle_blue_flasher', 0), + (13259, 49942, 'kill_miragul_puzzle_blue_runes', 0), + (13260, 49943, 'kill_miragul_puzzle_green_flasher', 0), + (13261, 49944, 'kill_miragul_puzzle_green_runes', 0), + (13262, 49945, 'kill_miragul_puzzle_lightning_orb', 0), + (13263, 49946, 'kill_miragul_puzzle_red_flasher', 0), + (13264, 49947, 'kill_miragul_puzzle_red_runes', 0), + (13265, 49948, 'kill_miragul_puzzle_spire_beams', 0), + (13266, 49949, 'kill_miragul_puzzle_splash_column', 0), + (13267, 49950, 'kill_miragul_puzzle_yellow_flasher', 0), + (13268, 49951, 'kill_miragul_puzzle_yellow_runes', 0), + (13269, 49954, 'kill_cast_barnacle_blast', 0), + (13270, 49961, 'kill_najena_face_lava', 0), + (13271, 49968, 'kill_najena_dark_rune01', 0), + (13272, 49969, 'kill_najena_dark_rune02', 0), + (13273, 49970, 'kill_najena_dark_rune03', 0), + (13274, 49971, 'kill_najena_dark_rune04', 0), + (13275, 49972, 'kill_najena_dark_rune05', 0), + (13276, 49973, 'kill_najena_light_rune01', 0), + (13277, 49974, 'kill_najena_light_rune02', 0), + (13278, 49975, 'kill_najena_light_rune03', 0), + (13279, 49976, 'kill_najena_light_rune04', 0), + (13280, 49977, 'kill_najena_light_rune05', 0), + (13281, 49978, 'kill_najena_puzzle_complete', 0), + (13282, 49979, 'kill_1h_dual_wield_enter', 0), + (13283, 49980, 'kill_1h_dual_wield_exit', 0), + (13284, 49987, 'kill_najena_lava_god_hands', 0), + (13285, 49988, 'kill_najena_lava_god_skull', 0), + (13286, 49989, 'kill_result_lava_column', 0), + (13287, 49996, 'kill_najena_lava_curtain', 0), + (13288, 49997, 'kill_najena_rune_key', 0), + (13289, 50000, 'kill_cast_heat_sphere', 0), + (13290, 50007, 'kill_result_dagger_back', 0), + (13291, 50008, 'kill_result_melee_lifetap_p2p', 0), + (13292, 50010, 'kill_vocal_idle', 0), + (13293, 50013, 'kill_cast_bone_blast_blend', 0), + (13294, 50016, 'kill_cast_wavy_bubble_shield', 0), + (13295, 50021, 'kill_cast_shield_buff', 0), + (13296, 50028, 'kill_result_hammer_buff', 0), + (13297, 50035, 'kill_result_forced_shader_hologram', 0), + (13298, 50042, 'kill_result_clanging_note', 0), + (13299, 50043, 'kill_result_forced_shader_glass', 0), + (13300, 50044, 'kill_result_swirling_note', 0), + (13301, 50047, 'kill_cast_bone_blast_notes', 0), + (13302, 50052, 'kill_result_notes_spiral_frenzy', 0), + (13303, 50054, 'kill_vek_door_beam_blue', 0), + (13304, 50055, 'kill_vek_door_beam_red', 0), + (13305, 50058, 'kill_cast_bubble_ward', 0), + (13306, 50059, 'kill_cast_dodge_buff', 0), + (13307, 50062, 'kill_cast_shout_aoe', 0), + (13308, 50065, 'kill_result_crush_blast', 0), + (13309, 50072, 'kill_result_break_chains', 0), + (13310, 50077, 'kill_cast_quick_shield', 0), + (13311, 50080, 'kill_result_spike_blast', 0), + (13312, 50083, 'kill_cast_bubble_ward_out', 0), + (13313, 50086, 'kill_cast_shield_deflect', 0), + (13314, 50093, 'kill_paper_scatter', 0), + (13315, 50101, 'kill_skull_candles_head', 0), + (13316, 50106, 'kill_cast_rings_aoe', 0), + (13317, 50112, 'kill_design_void_eyes', 0), + (13318, 50113, 'kill_design_void_portal', 0), + (13319, 50116, 'kill_vocal_combat_idle', 0), + (13320, 50119, 'kill_cast_melee_buff', 0), + (13321, 50122, 'kill_cast_speed_buff', 0), + (13322, 50123, 'kill_cast_wings', 0), + (13323, 50126, 'kill_buff_fx', 0), + (13324, 50129, 'kill_cast_rune_buff', 0), + (13325, 50130, 'kill_cast_rune_spiral_buff', 0), + (13326, 50133, 'kill_cast_ice_block', 0), + (13327, 50134, 'kill_cast_leaf_buff', 0), + (13328, 50135, 'kill_cast_leaf_spiral_buff', 0), + (13329, 50140, 'kill_result_nature_storm', 0), + (13330, 50143, 'kill_cast_fire_buff', 0), + (13331, 50144, 'kill_cast_mental_buff', 0), + (13332, 50149, 'kill_result_hail_storm', 0), + (13333, 50150, 'kill_result_poison_skulls', 0), + (13334, 50153, 'kill_cast_flash_rune_buff', 0), + (13335, 50161, 'kill_serve', 0), + (13336, 50167, 'kill_guk_barracks_poison', 0), + (13337, 50168, 'kill_guk_crystal_cleanse', 0), + (13338, 50169, 'kill_guk_temple_splashes_clean', 0), + (13339, 50170, 'kill_guk_temple_splashes_poison', 0), + (13340, 50171, 'kill_guk_waterfalls_poison', 0), + (13341, 50173, 'kill_result_slime_wall', 0), + (13342, 50180, 'kill_result_fly_breath', 0), + (13343, 50181, 'kill_result_fly_swarm', 0), + (13344, 50188, 'kill_result_poison_cloud_explosion', 0), + (13345, 50189, 'kill_result_poison_splat', 0), + (13346, 50190, 'kill_result_skull_attack_p2p', 0), + (13347, 50191, 'kill_result_troll_curse', 0), + (13348, 50198, 'kill_korsha_lift_blast', 0), + (13349, 50199, 'kill_result_object_sparkles_blue', 0), + (13350, 50200, 'kill_result_object_sparkles_green', 0), + (13351, 50201, 'kill_result_object_sparkles_red', 0), + (13352, 50202, 'kill_result_object_sparkles_white', 0), + (13353, 50209, 'kill_result_head_flames', 0), + (13354, 50215, 'kill_design_lamp_ignite', 0), + (13355, 50217, 'kill_mr_lamp_fx_01', 0), + (13356, 50218, 'kill_mr_lamp_fx_02', 0), + (13357, 50219, 'kill_mr_lamp_fx_03', 0), + (13358, 50220, 'kill_mr_lamp_fx_04', 0), + (13359, 50221, 'kill_mr_lamp_fx_05', 0), + (13360, 50222, 'kill_mr_lamp_fx_06', 0), + (13361, 50223, 'kill_mr_lamp_ignite_sound', 0), + (13362, 50224, 'kill_mr_lamp_sounds_finish', 0), + (13363, 50225, 'kill_mr_lamp_sounds_start', 0), + (13364, 50231, 'kill_design_result_black_out', 0), + (13365, 50233, 'kill_result_bat_scare', 0), + (13366, 50235, 'kill_whistle_toot_01', 0), + (13367, 50236, 'kill_whistle_toot_02', 0), + (13368, 50237, 'kill_whistle_toot_03', 0), + (13369, 50238, 'kill_whistle_toot_04', 0), + (13370, 50239, 'kill_whistle_toot_05', 0), + (13371, 50240, 'kill_whistle_toot_06', 0), + (13372, 50241, 'kill_whistle_toot_07', 0), + (13373, 50242, 'kill_whistle_toot_08', 0), + (13374, 50243, 'kill_whistle_toot_09', 0), + (13375, 50244, 'kill_whistle_toot_10', 0), + (13376, 50245, 'kill_whistle_toot_11', 0), + (13377, 50246, 'kill_whistle_toot_12', 0), + (13378, 50247, 'kill_whistle_toot_13', 0), + (13379, 50248, 'kill_whistle_toot_14', 0), + (13380, 50254, 'kill_eq2_music1', 0), + (13381, 50255, 'kill_eq2_music2', 0), + (13382, 50256, 'kill_frost_blast', 0), + (13383, 50257, 'kill_fudge_drip', 0), + (13384, 50258, 'kill_ice_blast_sound', 0), + (13385, 50259, 'kill_icecream_drip', 0), + (13386, 50262, 'kill_server_idle', 0), + (13387, 50263, 'kill_server_shutdown', 0), + (13388, 50264, 'kill_server_start', 0), + (13389, 50270, 'kill_hourglass_active', 0), + (13390, 50271, 'kill_hourglass_idle', 0), + (13391, 50277, 'kill_frosty_crown', 0), + (13392, 50280, 'kill_bf_lightning_gate_rm5', 0), + (13393, 50281, 'kill_bf_lightning_gate_rm9', 0), + (13394, 50284, 'kill_cast_void_portal', 0), + (13395, 50287, 'kill_result_crystal_trap', 0), + (13396, 50294, 'kill_lights_eyes', 0), + (13397, 50295, 'kill_lights_pumpkin', 0), + (13398, 50296, 'kill_result_pumpkin_smash', 0), + (13399, 50302, 'kill_design_fairy_pet', 0), + (13400, 50307, 'kill_cast_void_energy_cloud', 0), + (13401, 50308, 'kill_cast_void_rune_barrier', 0), + (13402, 50309, 'kill_cast_void_rune_circle', 0), + (13403, 50311, 'kill_design_fist_fireworks', 0), + (13404, 50313, 'kill_result_void_energy_barrier', 0), + (13405, 50314, 'kill_result_void_energy_blast', 0), + (13406, 50315, 'kill_result_void_energy_wave', 0), + (13407, 50318, 'kill_cast_lightning_beam_converge', 0), + (13408, 50319, 'kill_cast_lightning_beam_point', 0), + (13409, 50320, 'kill_cast_lightning_blastdown', 0), + (13410, 50327, 'kill_result_flesh_peel', 0), + (13411, 50328, 'kill_result_god_spell_anashti_sul', 0), + (13412, 50329, 'kill_result_god_spell_rodcet_nife', 0), + (13413, 50337, 'kill_vp_shissar_new', 0), + (13414, 50338, 'kill_vp_shissar_old', 0), + (13415, 50345, 'kill_result_greenmist_attack_p2p', 0), + (13416, 50351, 'kill_design_cannon_blast', 0), + (13417, 50352, 'kill_design_cannon_chargeup', 0), + (13418, 50353, 'kill_design_inno_cannon_fire1', 0), + (13419, 50354, 'kill_design_inno_cannon_fire2', 0), + (13420, 50357, 'kill_cast_energy_charge_up', 0), + (13421, 50362, 'kill_mr_chargeup_sound', 0), + (13422, 50363, 'kill_mr_lightning_chargeup', 0), + (13423, 50365, 'kill_zepplin_enter', 0), + (13424, 50366, 'kill_zepplin_exit', 0), + (13425, 50367, 'kill_zepplin_fall', 0), + (13426, 50368, 'kill_zepplin_idle', 0), + (13427, 50369, 'kill_zepplin_jump', 0), + (13428, 50370, 'kill_zepplin_land', 0), + (13429, 50371, 'kill_zepplin_run', 0), + (13430, 50372, 'kill_zepplin_walk', 0), + (13431, 50378, 'kill_idle_sound', 0), + (13432, 50381, 'kill_zeppelin_enter', 0), + (13433, 50382, 'kill_zeppelin_exit', 0), + (13434, 50383, 'kill_zeppelin_fall', 0), + (13435, 50384, 'kill_zeppelin_glide', 0), + (13436, 50385, 'kill_zeppelin_idle', 0), + (13437, 50386, 'kill_zeppelin_jump', 0), + (13438, 50387, 'kill_zeppelin_land', 0), + (13439, 50388, 'kill_zeppelin_run', 0), + (13440, 50389, 'kill_zeppelin_walk', 0), + (13441, 50390, 'kill_zepplin_glide', 0), + (13442, 50393, 'kill_cast_energy_blast_aoe', 0), + (13443, 50398, 'kill_result_energy_wave_p2p', 0), + (13444, 50405, 'kill_result_void_implode', 0), + (13445, 50407, 'kill_void_beam_sound', 0), + (13446, 50408, 'kill_void_door_beam', 0), + (13447, 50415, 'kill_persist_evil_stun', 0), + (13448, 50416, 'kill_result_spear_hit', 0), + (13449, 50418, 'kill_trdskl_spear', 0), + (13450, 50424, 'kill_energy_flow_sound', 0), + (13451, 50426, 'kill_mistmoore_energy_flow01', 0), + (13452, 50427, 'kill_mistmoore_energy_flow02', 0), + (13453, 50428, 'kill_mistmoore_energy_flow03', 0), + (13454, 50429, 'kill_mistmoore_energy_flow04', 0), + (13455, 50430, 'kill_mistmoore_energy_flow05', 0), + (13456, 50431, 'kill_result_lightning_cage', 0), + (13457, 50432, 'kill_result_rune_ethernaughts', 0), + (13458, 50435, 'kill_burrow', 0), + (13459, 50436, 'kill_burrow_sound', 0), + (13460, 50440, 'kill_design_chain_release', 0), + (13461, 50441, 'kill_design_chained', 0), + (13462, 50443, 'kill_mistmoore_coffin_glow', 0), + (13463, 50451, 'kill_void_blast_wave', 0), + (13464, 50454, 'kill_blast_bolt', 0), + (13465, 50457, 'kill_cast_speed_trail', 0), + (13466, 50460, 'kill_result_cyclone_bones', 0), + (13467, 50463, 'kill_cast_hand_slash', 0), + (13468, 50468, 'kill_result_hand_choke', 0), + (13469, 50469, 'kill_result_spike_trap', 0), + (13470, 50470, 'kill_result_string_trap', 0), + (13471, 50471, 'kill_run_sound', 0), + (13472, 50473, 'kill_wood_sound', 0), + (13473, 50481, 'kill_void_portal_sound', 0), + (13474, 50482, 'kill_void_summon_sound', 0), + (13475, 50483, 'kill_void_teleporter', 0), + (13476, 50491, 'kill_varsoon_portal_collapse', 0), + (13477, 50492, 'kill_varsoon_void_portal', 0), + (13478, 50499, 'kill_result_void_tether_p2p', 0), + (13479, 50501, 'kill_varsoon_crystal_1', 0), + (13480, 50502, 'kill_varsoon_crystal_2', 0), + (13481, 50503, 'kill_varsoon_crystal_3', 0), + (13482, 50509, 'kill_design_blue_sun', 0), + (13483, 50510, 'kill_design_red_sun', 0), + (13484, 50511, 'kill_design_red_sun_sound', 0), + (13485, 50512, 'kill_design_sun_sound', 0), + (13486, 50514, 'kill_result_void_crystal_p2p', 0), + (13487, 50516, 'kill_void_beam_blue', 0), + (13488, 50517, 'kill_void_beam_red', 0), + (13489, 50520, 'kill_cast_5', 0), + (13490, 50524, 'kill_design_lattice_activate', 0), + (13491, 50525, 'kill_design_void_energy_activate', 0), + (13492, 50528, 'kill_void_energy_activate_sound', 0), + (13493, 50529, 'kill_void_energy_sound', 0), + (13494, 50536, 'kill_result_blast_ring', 0), + (13495, 50538, 'kill_void_energy_barrier', 0), + (13496, 50539, 'kill_void_energy_barrier_blast', 0), + (13497, 50547, 'kill_void_energy_channeling_p2p', 0), + (13498, 50553, 'kill_design_result_cloudy_head', 0), + (13499, 50555, 'kill_result_dark_mist', 0), + (13500, 50556, 'kill_result_sparkle_mist', 0), + (13501, 50559, 'kill_cast_meteor_storm', 0), + (13502, 50564, 'kill_result_meteor_storm', 0), + (13503, 50565, 'kill_result_neg_flux', 0), + (13504, 50566, 'kill_result_neg_flux_storm', 0), + (13505, 50567, 'kill_result_void_explode', 0), + (13506, 50568, 'kill_result_void_ragestorm', 0), + (13507, 50569, 'kill_result_void_storm', 0), + (13508, 50572, 'kill_cast_manta_bolt_p2p', 0), + (13509, 50573, 'kill_cast_manta_tail_beam', 0), + (13510, 50574, 'kill_cast_manta_tail_flare', 0), + (13511, 50575, 'kill_cast_nether_blast', 0), + (13512, 50576, 'kill_cast_nether_storm', 0), + (13513, 50579, 'kill_cast_sucking_charge_up', 0), + (13514, 50582, 'kill_result_anashti_curse', 0), + (13515, 50583, 'kill_result_anashti_tempest', 0), + (13516, 50586, 'kill_anashti_summon', 0), + (13517, 50587, 'kill_anashti_transform', 0), + (13518, 50588, 'kill_anashti_vortex', 0), + (13519, 50591, 'kill_attack_breath_inhale', 0), + (13520, 50592, 'kill_attack_burst', 0), + (13521, 50593, 'kill_attack_dark_breath', 0), + (13522, 50594, 'kill_attack_wing_bolts', 0), + (13523, 50601, 'kill_result_misty_snare', 0), + (13524, 50604, 'kill_cast_arcane_blast_aoe', 0), + (13525, 50609, 'kill_result_melee_swipe', 0), + (13526, 50610, 'kill_result_melee_wild_swipe', 0), + (13527, 50615, 'kill_cast_sparkling_dust_aoe', 0), + (13528, 50622, 'kill_result_gnollslayer', 0), + (13529, 50623, 'kill_result_gnollslayer_burst', 0), + (13530, 50624, 'kill_result_skull_debuff', 0), + (13531, 50631, 'kill_result_quick_heal', 0), + (13532, 50634, 'kill_bear_tail', 0), + (13533, 50637, 'kill_bear_sprint', 0), + (13534, 50640, 'kill_bear_attack_sound', 0), + (13535, 50641, 'kill_bear_battlecry_sound', 0), + (13536, 50642, 'kill_bear_dead_sound', 0), + (13537, 50643, 'kill_bear_deadfall_sound', 0), + (13538, 50644, 'kill_bear_headshake_sound', 0), + (13539, 50645, 'kill_bear_idle_sound', 0), + (13540, 50646, 'kill_bear_idle_sound_omit', 0), + (13541, 50647, 'kill_bear_ouch_sound', 0), + (13542, 50648, 'kill_bear_sniff_sound', 0), + (13543, 50654, 'kill_fae_dark_bear_backup', 0), + (13544, 50655, 'kill_fae_dark_bear_idle', 0), + (13545, 50656, 'kill_fae_dark_bear_jump', 0), + (13546, 50657, 'kill_fae_dark_bear_jump_substitute', 0), + (13547, 50658, 'kill_fae_dark_bear_run', 0), + (13548, 50659, 'kill_fae_dark_bear_sprint', 0), + (13549, 50660, 'kill_fae_dark_bear_turn_left', 0), + (13550, 50661, 'kill_fae_dark_bear_turn_right', 0), + (13551, 50662, 'kill_fae_dark_bear_walk', 0), + (13552, 50663, 'kill_fae_light_bear_backup', 0), + (13553, 50664, 'kill_fae_light_bear_idle', 0), + (13554, 50665, 'kill_fae_light_bear_jump', 0), + (13555, 50666, 'kill_fae_light_bear_jump_substitute', 0), + (13556, 50667, 'kill_fae_light_bear_run', 0), + (13557, 50668, 'kill_fae_light_bear_sprint', 0), + (13558, 50669, 'kill_fae_light_bear_turn_left', 0), + (13559, 50670, 'kill_fae_light_bear_turn_right', 0), + (13560, 50671, 'kill_fae_light_bear_walk', 0), + (13561, 50672, 'kill_froglok_bear_backup', 0), + (13562, 50673, 'kill_froglok_bear_idle', 0), + (13563, 50674, 'kill_froglok_bear_jump', 0), + (13564, 50675, 'kill_froglok_bear_jump_substitute', 0), + (13565, 50676, 'kill_froglok_bear_run', 0), + (13566, 50677, 'kill_froglok_bear_sprint', 0), + (13567, 50678, 'kill_froglok_bear_turn_left', 0), + (13568, 50679, 'kill_froglok_bear_turn_right', 0), + (13569, 50680, 'kill_froglok_bear_walk', 0), + (13570, 50686, 'kill_footstep_sound', 0), + (13571, 50693, 'kill_result_fireworks_flower', 0), + (13572, 50694, 'kill_result_fireworks_foamy_burst', 0), + (13573, 50695, 'kill_result_fireworks_rainbow', 0), + (13574, 50697, 'kill_tiered_blast_cone', 0), + (13575, 50698, 'kill_tiered_blood_lust', 0), + (13576, 50699, 'kill_tiered_crush_blast', 0), + (13577, 50700, 'kill_tiered_cyclone', 0), + (13578, 50701, 'kill_tiered_defensive_buff', 0), + (13579, 50702, 'kill_tiered_dustpuff_rfoot', 0), + (13580, 50703, 'kill_tiered_flash_weapon', 0), + (13581, 50704, 'kill_tiered_glow_distort', 0), + (13582, 50705, 'kill_tiered_motion_lines', 0), + (13583, 50706, 'kill_tiered_motion_lines_sub', 0), + (13584, 50707, 'kill_tiered_offensive_buff', 0), + (13585, 50708, 'kill_tiered_shout', 0), + (13586, 50709, 'kill_tiered_sparkle_trail_weapon', 0), + (13587, 50710, 'kill_tiered_sparks_hit', 0), + (13588, 50711, 'kill_tiered_taunt', 0), + (13589, 50712, 'kill_tiered_weapon_trail_fire', 0), + (13590, 50718, 'kill_gathering_end', 0), + (13591, 50719, 'kill_gathering_loop', 0), + (13592, 50720, 'kill_gathering_start', 0), + (13593, 50721, 'kill_idle_afraid', 0), + (13594, 50722, 'kill_idle_angry', 0), + (13595, 50725, 'kill_bearwalk', 0), + (13596, 50731, 'kill_tiered_blast_hit', 0), + (13597, 50732, 'kill_tiered_flash', 0), + (13598, 50733, 'kill_tiered_melee_swipe', 0), + (13599, 50734, 'kill_tiered_shield', 0), + (13600, 50735, 'kill_tiered_slash_hit', 0), + (13601, 50743, 'kill_tiered_shield_blast', 0), + (13602, 50744, 'kill_tiered_slow', 0), + (13603, 50750, 'kill_design_powerarray_electric', 0), + (13604, 50751, 'kill_design_powerarray_void', 0), + (13605, 50752, 'kill_gathering_enter', 0), + (13606, 50753, 'kill_gathering_exit', 0), + (13607, 50756, 'kill_attack_disarm', 0), + (13608, 50760, 'kill_design_ice_fan_side', 0), + (13609, 50761, 'kill_design_ice_fan_up', 0), + (13610, 50762, 'kill_design_najena_barrier', 0), + (13611, 50765, 'kill_sound_attack_disarm', 0), + (13612, 50766, 'kill_sound_fan_start', 0), + (13613, 50767, 'kill_sound_wind_blast', 0), + (13614, 50768, 'kill_tiered_rune_buff', 0), + (13615, 50774, 'kill_electric_fx', 0), + (13616, 50776, 'kill_particle_mood_idle', 0), + (13617, 50778, 'kill_sound_buff_electric', 0), + (13618, 50779, 'kill_sound_buff_void', 0), + (13619, 50780, 'kill_void_fx', 0), + (13620, 50786, 'kill_design_najena_electric_water', 0), + (13621, 50788, 'kill_result_dragon_breath_p2p', 0), + (13622, 50789, 'kill_result_electric_beam_p2p', 0), + (13623, 50790, 'kill_result_void_beam_p2p', 0), + (13624, 50796, 'kill_design_najena_fire', 0), + (13625, 50797, 'kill_design_najena_lightning', 0), + (13626, 50798, 'kill_design_najena_poison', 0), + (13627, 50799, 'kill_design_najena_portals', 0), + (13628, 50800, 'kill_design_najena_snow', 0), + (13629, 50801, 'kill_design_najena_water', 0), + (13630, 50807, 'kill_elemental_fire_hands', 0), + (13631, 50808, 'kill_fire_summon_portal', 0), + (13632, 50811, 'kill_sound_fire_vortex', 0), + (13633, 50814, 'kill_badger_buff', 0), + (13634, 50819, 'kill_mushroom_buff', 0), + (13635, 50821, 'kill_snake_buff', 0), + (13636, 50824, 'kill_cast_lava_shield', 0), + (13637, 50829, 'kill_result_rock_blast_wave', 0), + (13638, 50831, 'kill_summon_fx', 0), + (13639, 50832, 'kill_transform_fx', 0), + (13640, 50840, 'kill_tiered_anger_buff', 0), + (13641, 50841, 'kill_tiered_hand_buff', 0), + (13642, 50847, 'kill_design_fire_wall', 0), + (13643, 50848, 'kill_design_fire_wall_opening', 0), + (13644, 50849, 'kill_design_rock_wall', 0), + (13645, 50850, 'kill_design_rock_wall_breaking', 0), + (13646, 50853, 'kill_aoe_ice_blast', 0), + (13647, 50854, 'kill_aoe_rock_blast', 0), + (13648, 50855, 'kill_cast_air_charge', 0), + (13649, 50856, 'kill_cast_earth_charge', 0), + (13650, 50857, 'kill_cast_fire_charge', 0), + (13651, 50858, 'kill_cast_ice_blast_out', 0), + (13652, 50859, 'kill_cast_ice_column', 0), + (13653, 50862, 'kill_cast_water_charge', 0), + (13654, 50869, 'kill_persist_book_dervish', 0), + (13655, 50875, 'kill_design_elemental_wall', 0), + (13656, 50876, 'kill_design_elemental_wall_breaking', 0), + (13657, 50879, 'kill_sound_electric', 0), + (13658, 50880, 'kill_sound_rock_breaking', 0), + (13659, 50881, 'kill_tiered_bubble_pop', 0), + (13660, 50882, 'kill_tiered_power_gather', 0), + (13661, 50883, 'kill_tiered_quick_heal', 0), + (13662, 50884, 'kill_tiered_rune_in_buff', 0), + (13663, 50885, 'kill_tiered_rune_out_buff', 0), + (13664, 50886, 'kill_tiered_speed', 0), + (13665, 50887, 'kill_tiered_spikes_hit', 0), + (13666, 50888, 'kill_tiered_stifle', 0), + (13667, 50896, 'kill_tiered_defense_buff', 0), + (13668, 50904, 'kill_tiered_bubble_shield', 0), + (13669, 50905, 'kill_tiered_offense_buff', 0), + (13670, 50906, 'kill_tiered_root', 0), + (13671, 50914, 'kill_tiered_charge_up', 0), + (13672, 50922, 'kill_tiered_bubble_shield_in', 0), + (13673, 50923, 'kill_tiered_evil_rune_base', 0), + (13674, 50924, 'kill_tiered_good_rune_base', 0), + (13675, 50925, 'kill_tiered_skull_lifetap', 0), + (13676, 50933, 'kill_tiered_boiling_circle', 0), + (13677, 50941, 'kill_tiered_cloud_blast', 0), + (13678, 50942, 'kill_tiered_diseased', 0), + (13679, 50943, 'kill_tiered_grip_blast', 0), + (13680, 50951, 'kill_tiered_flash_vanish', 0), + (13681, 50952, 'kill_tiered_rune_base', 0), + (13682, 50953, 'kill_tiered_sparkle_cling', 0), + (13683, 50961, 'kill_tiered_dark_mist', 0), + (13684, 50962, 'kill_tiered_mana_drain_p2p', 0), + (13685, 50968, 'kill_design_electric_barrier_round', 0), + (13686, 50969, 'kill_design_fire_barrier_round', 0), + (13687, 50970, 'kill_design_poison_barrier_round', 0), + (13688, 50971, 'kill_design_snow_barrier_round', 0), + (13689, 50972, 'kill_design_water_barrier_round', 0), + (13690, 50975, 'kill_tiered_lost_souls', 0), + (13691, 50983, 'kill_tiered_rock_shield', 0), + (13692, 50984, 'kill_tiered_stance_base', 0), + (13693, 50985, 'kill_waist_tracking_off_trigger', 0), + (13694, 50992, 'kill_result_forced_shader_soot', 0), + (13695, 50994, 'kill_tiered_energy_blob_p2p', 0), + (13696, 50995, 'kill_tiered_heal_hands_blast', 0), + (13697, 50996, 'kill_tiered_healing_rays', 0), + (13698, 51004, 'kill_tiered_blessed_hand', 0), + (13699, 51005, 'kill_tiered_castigate', 0), + (13700, 51006, 'kill_tiered_sparkle_swirl', 0), + (13701, 51012, 'kill_design_void_barrier', 0), + (13702, 51020, 'kill_tiered_defense_buff_brawler', 0), + (13703, 51028, 'kill_tiered_feet_buff', 0), + (13704, 51029, 'kill_tiered_feet_sparks', 0), + (13705, 51030, 'kill_tiered_flame_burst', 0), + (13706, 51031, 'kill_tiered_frenzy', 0), + (13707, 51032, 'kill_tiered_hand_sparks', 0), + (13708, 51033, 'kill_tiered_offense_buff_brawler', 0), + (13709, 51034, 'kill_tiered_rune_buff_brawler', 0), + (13710, 51035, 'kill_tiered_sparkle_scan_up', 0), + (13711, 51043, 'kill_tiered_balance_buff_brawler', 0), + (13712, 51044, 'kill_tiered_focus_spark', 0), + (13713, 51045, 'kill_tiered_second_skin', 0), + (13714, 51046, 'kill_tiered_sonic_punch', 0), + (13715, 51047, 'kill_tiered_wavy_shield_out', 0), + (13716, 51055, 'kill_snd_ape', 0), + (13717, 51056, 'kill_snd_bear_roar', 0), + (13718, 51057, 'kill_snd_hawk_scream', 0), + (13719, 51058, 'kill_snd_monkey', 0), + (13720, 51059, 'kill_snd_owl_hoot', 0), + (13721, 51065, 'kill_design_fae_drake_pet', 0), + (13722, 51068, 'kill_snd_wave_crash', 0), + (13723, 51069, 'kill_tiered_mountain', 0), + (13724, 51070, 'kill_tiered_phoenix_blast', 0), + (13725, 51071, 'kill_tiered_plasma_burst', 0), + (13726, 51072, 'kill_tiered_water_burst', 0), + (13727, 51080, 'kill_tiered_dragon_breath', 0), + (13728, 51081, 'kill_tiered_fear_skulls', 0), + (13729, 51082, 'kill_tiered_hand_flare', 0), + (13730, 51083, 'kill_tiered_heart_beat', 0), + (13731, 51089, 'kill_design_dark_rez', 0), + (13732, 51090, 'kill_design_void_dome', 0), + (13733, 51091, 'kill_heal_lifetap_p2p', 0), + (13734, 51092, 'kill_iksar_ghost_rez_p2p', 0), + (13735, 51095, 'kill_tiered_skull', 0), + (13736, 51101, 'kill_design_gas_fire_blast', 0), + (13737, 51102, 'kill_design_gas_fire_warning', 0), + (13738, 51104, 'kill_result_void_fx_alt', 0), + (13739, 51110, 'kill_design_boiling_energy_blast', 0), + (13740, 51111, 'kill_design_boiling_energy_warning', 0), + (13741, 51114, 'kill_sound_electric_burst', 0), + (13742, 51117, 'kill_cast_boiling_energy', 0), + (13743, 51121, 'kill_design_gas_fire_blast_up', 0), + (13744, 51122, 'kill_design_gas_fire_warning_up', 0), + (13745, 51123, 'kill_design_void_dome_blue', 0), + (13746, 51124, 'kill_design_void_dome_red', 0), + (13747, 51131, 'kill_result_arc_tether_p2p', 0), + (13748, 51132, 'kill_result_rose_petals', 0), + (13749, 51140, 'kill_tiered_plasma_hit', 0), + (13750, 51143, 'kill_cast_back_rune_wheel', 0), + (13751, 51144, 'kill_cast_base_rune_wheel', 0), + (13752, 51145, 'kill_cast_forward_rune_wheel', 0), + (13753, 51151, 'kill_tiered_agility_buff', 0), + (13754, 51152, 'kill_tiered_charge_weapon', 0), + (13755, 51153, 'kill_tiered_energy_beam_p2p', 0), + (13756, 51154, 'kill_tiered_fire_slam', 0), + (13757, 51155, 'kill_tiered_fire_tube', 0), + (13758, 51156, 'kill_tiered_hand_rings', 0), + (13759, 51157, 'kill_tiered_head_ring', 0), + (13760, 51158, 'kill_tiered_intellect_buff', 0), + (13761, 51159, 'kill_tiered_rays_out', 0), + (13762, 51160, 'kill_tiered_rune_drop_base', 0), + (13763, 51161, 'kill_tiered_rune_forward', 0), + (13764, 51162, 'kill_tiered_rune_rise_base', 0), + (13765, 51163, 'kill_tiered_rune_rise_buff', 0), + (13766, 51164, 'kill_tiered_rune_root', 0), + (13767, 51165, 'kill_tiered_rune_swirl', 0), + (13768, 51166, 'kill_tiered_self_lifetap', 0), + (13769, 51167, 'kill_tiered_stamina_buff', 0), + (13770, 51168, 'kill_tiered_strength_buff', 0), + (13771, 51169, 'kill_tiered_weapon_buff_charge', 0), + (13772, 51170, 'kill_tiered_wisdom_buff', 0), + (13773, 51178, 'kill_tiered_blast_circle', 0), + (13774, 51179, 'kill_tiered_chain_root', 0), + (13775, 51180, 'kill_tiered_cold_blast', 0), + (13776, 51181, 'kill_tiered_column_blast_circle', 0), + (13777, 51182, 'kill_tiered_fire_column', 0), + (13778, 51183, 'kill_tiered_fireball_p2p', 0), + (13779, 51184, 'kill_tiered_frostball_p2p', 0), + (13780, 51185, 'kill_tiered_glacial_wall', 0), + (13781, 51186, 'kill_tiered_hand_runes', 0), + (13782, 51187, 'kill_tiered_ice_root', 0), + (13783, 51188, 'kill_tiered_icicle_blast_p2p', 0), + (13784, 51189, 'kill_tiered_particle_transfer_p2p', 0), + (13785, 51190, 'kill_tiered_rune_chain_swirl', 0), + (13786, 51191, 'kill_tiered_windy_tube_p2p', 0), + (13787, 51199, 'kill_tiered_blast_cone_forward', 0), + (13788, 51200, 'kill_tiered_cold_fusion', 0), + (13789, 51201, 'kill_tiered_dots_explode', 0), + (13790, 51202, 'kill_tiered_forced_shader_burst', 0), + (13791, 51203, 'kill_tiered_frosty_swirls', 0), + (13792, 51204, 'kill_tiered_magic_waves', 0), + (13793, 51205, 'kill_tiered_ring_blast_p2p', 0), + (13794, 51208, 'kill_cast_enchanter_wheel_back', 0), + (13795, 51209, 'kill_cast_enchanter_wheel_base', 0), + (13796, 51210, 'kill_cast_enchanter_wheel_forward', 0), + (13797, 51213, 'kill_cast_summoner_wheel_back', 0), + (13798, 51214, 'kill_cast_summoner_wheel_base', 0), + (13799, 51215, 'kill_cast_summoner_wheel_forward', 0), + (13800, 51219, 'kill_tiered_poisonball_p2p', 0), + (13801, 51220, 'kill_tiered_poisoned', 0), + (13802, 51221, 'kill_tiered_rune_spikes_swirl', 0), + (13803, 51222, 'kill_tiered_spikes_root', 0), + (13804, 51230, 'kill_tiered_column_poison_blast', 0), + (13805, 51231, 'kill_tiered_hand_evil_runes', 0), + (13806, 51232, 'kill_tiered_poison_breath', 0), + (13807, 51235, 'kill_cast_hand_energy_artifact', 0), + (13808, 51239, 'kill_design_hand_energy_artifact', 0), + (13809, 51241, 'kill_result_sparkles_crackle_out', 0), + (13810, 51242, 'kill_result_wings_grow', 0), + (13811, 51244, 'kill_tiered_power_drain_p2p', 0), + (13812, 51247, 'kill_cast_flash_jump_attack', 0), + (13813, 51252, 'kill_result_forced_shader_rock_blue', 0), + (13814, 51253, 'kill_result_forced_shader_rock_green', 0), + (13815, 51254, 'kill_result_forced_shader_rock_purple', 0), + (13816, 51255, 'kill_result_forced_shader_rock_yellow', 0), + (13817, 51256, 'kill_result_iksar_statue_beam_p2p', 0), + (13818, 51257, 'kill_result_root_magic', 0), + (13819, 51258, 'kill_result_stifle_magic', 0), + (13820, 51265, 'kill_result_shackles_void', 0), + (13821, 51271, 'kill_design_bixie_pet', 0), + (13822, 51272, 'kill_design_bones_shockwave', 0), + (13823, 51273, 'kill_design_void_shield', 0), + (13824, 51276, 'kill_cast_column_blast_circle', 0), + (13825, 51277, 'kill_cast_goo_bubble_bursting', 0), + (13826, 51280, 'kill_cast_raise_dead_column', 0), + (13827, 51283, 'kill_result_bone_cyclone', 0), + (13828, 51284, 'kill_result_cold_blast_snow', 0), + (13829, 51285, 'kill_result_flame_burst', 0), + (13830, 51286, 'kill_result_gloop_root', 0), + (13831, 51293, 'kill_result_boot_kick', 0), + (13832, 51294, 'kill_result_sonic_trail', 0), + (13833, 51300, 'kill_design_barrier_void', 0), + (13834, 51301, 'kill_design_er_light_beam_p2p', 0), + (13835, 51302, 'kill_design_er_target_cube', 0), + (13836, 51308, 'kill_design_erudin_column_fx', 0), + (13837, 51309, 'kill_design_shield_drop', 0), + (13838, 51312, 'kill_sound_electrified', 0), + (13839, 51313, 'kill_sound_shield_drop', 0), + (13840, 51316, 'kill_attack_eye_beams', 0), + (13841, 51319, 'kill_charge_mouth_fx', 0), + (13842, 51321, 'kill_design_gazer_eye_beam_p2p', 0), + (13843, 51322, 'kill_fx_eye_beam1', 0), + (13844, 51323, 'kill_fx_eye_beam2', 0), + (13845, 51324, 'kill_fx_eye_beam3', 0), + (13846, 51325, 'kill_fx_eye_beam4', 0), + (13847, 51326, 'kill_fx_eye_beam5', 0), + (13848, 51327, 'kill_fx_eye_charge', 0), + (13849, 51329, 'kill_result_disintegrate', 0), + (13850, 51331, 'kill_sound_charge', 0), + (13851, 51332, 'kill_sound_charge_blast', 0), + (13852, 51338, 'kill_design_erudin_wind_boost', 0), + (13853, 51339, 'kill_design_rocket_pack', 0), + (13854, 51342, 'kill_wind_blast_sound', 0), + (13855, 51345, 'kill_attack_eye_ring', 0), + (13856, 51349, 'kill_design_erudin_column_charge', 0), + (13857, 51350, 'kill_design_gazer_main_eye_beam_p2p', 0), + (13858, 51352, 'kill_result_melt', 0), + (13859, 51354, 'kill_sit', 0), + (13860, 51355, 'kill_sit_to_idle', 0), + (13861, 51361, 'kill_design_erudin_gazer_barrier', 0), + (13862, 51363, 'kill_power_on', 0), + (13863, 51369, 'kill_design_erudin_gun_plugged', 0), + (13864, 51370, 'kill_design_erudin_gun_unplugged', 0), + (13865, 51371, 'kill_habitat01', 0), + (13866, 51372, 'kill_habitat02', 0), + (13867, 51373, 'kill_habitat03', 0), + (13868, 51374, 'kill_idle01_stone', 0), + (13869, 51375, 'kill_idle_stone', 0), + (13870, 51377, 'kill_scarecrow_post_idle', 0), + (13871, 51379, 'kill_shield_bash', 0), + (13872, 51385, 'kill_design_bat_pet', 0), + (13873, 51387, 'kill_result_bubble_glow', 0), + (13874, 51388, 'kill_result_leaf_blow_glow', 0), + (13875, 51395, 'kill_result_splat_add', 0), + (13876, 51400, 'kill_cast_summon', 0), + (13877, 51402, 'kill_design_guardian_wisp_summon_p2p', 0), + (13878, 51404, 'kill_result_buble_leaf_blast', 0), + (13879, 51410, 'kill_design_eru_book_cyclone', 0), + (13880, 51411, 'kill_design_eru_book_ramp', 0), + (13881, 51417, 'kill_design_erudin_teleport_good', 0), + (13882, 51418, 'kill_design_erudin_teleport_trap', 0), + (13883, 51420, 'kill_result_teleport_ring_vanish', 0), + (13884, 51422, 'kill_tiered_unyielding_will', 0), + (13885, 51430, 'kill_tiered_black_hole', 0), + (13886, 51438, 'kill_sound_bark', 0), + (13887, 51439, 'kill_sound_combat_idle', 0), + (13888, 51440, 'kill_sound_dead_fall', 0), + (13889, 51441, 'kill_sound_death_whimper', 0), + (13890, 51442, 'kill_sound_pant', 0), + (13891, 51443, 'kill_sound_sniff', 0), + (13892, 51449, 'kill_design_icy_barrier', 0), + (13893, 51451, 'kill_result_teleport_icy_vanish', 0), + (13894, 51459, 'kill_tiered_acid_storm', 0), + (13895, 51460, 'kill_tiered_bone_cage', 0), + (13896, 51461, 'kill_tiered_dark_cyclone', 0), + (13897, 51462, 'kill_tiered_rift', 0), + (13898, 51463, 'kill_tiered_skull_summon', 0), + (13899, 51464, 'kill_tiered_skull_swirls', 0), + (13900, 51471, 'kill_rain_of_shinies', 0), + (13901, 51474, 'kill_cast_gathering_charge_up', 0), + (13902, 51479, 'kill_result_charge_tag', 0), + (13903, 51480, 'kill_result_nuke_blast', 0), + (13904, 51481, 'kill_result_pillar_blast', 0), + (13905, 51482, 'kill_result_pillar_slam', 0), + (13906, 51483, 'kill_result_precharge_blast', 0), + (13907, 51489, 'kill_design_book_shield1', 0), + (13908, 51490, 'kill_design_book_shield2', 0), + (13909, 51491, 'kill_design_book_shield3', 0), + (13910, 51492, 'kill_design_book_summon1', 0), + (13911, 51493, 'kill_design_book_summon2', 0), + (13912, 51494, 'kill_design_book_summon3', 0), + (13913, 51497, 'kill_badge_acquired', 0), + (13914, 51501, 'kill_cooked/characters/ec/core/mounts/pegasus/pegasus_glide.anim', 0), + (13915, 51502, 'kill_design_claw_face', 0), + (13916, 51504, 'kill_pegasus_glide', 0), + (13917, 51505, 'kill_pegasus_idle', 0), + (13918, 51506, 'kill_pegasus_run', 0), + (13919, 51507, 'kill_pegasus_walk', 0), + (13920, 51509, 'kill_sound_vortex', 0), + (13921, 51514, 'kill_coin_drop_snd', 0), + (13922, 51516, 'kill_design_coin_drop', 0), + (13923, 51522, 'kill_design_air_portal', 0), + (13924, 51523, 'kill_design_fear_portal', 0), + (13925, 51524, 'kill_design_growth_portal', 0), + (13926, 51525, 'kill_design_water_portal', 0), + (13927, 51531, 'kill_design_clouds_parting', 0), + (13928, 51532, 'kill_design_summon', 0), + (13929, 51533, 'kill_design_unsummon', 0), + (13930, 51539, 'kill_design_death_beam_p2p', 0), + (13931, 51540, 'kill_design_statue_death_beam_p2p', 0), + (13932, 51541, 'kill_design_statue_power', 0), + (13933, 51542, 'kill_design_zapper_bolt_p2p', 0), + (13934, 51549, 'kill_result_forced_shader_shadow', 0), + (13935, 51550, 'kill_result_ghost_trap', 0), + (13936, 51556, 'kill_cooked/characters/ec/core/mounts/pegasus/pegasus_run.anim', 0), + (13937, 51557, 'kill_design_coffin_explode', 0), + (13938, 51558, 'kill_design_coffin_lid', 0), + (13939, 51559, 'kill_design_erollisi_essence', 0), + (13940, 51560, 'kill_design_erollisi_evil_essence', 0), + (13941, 51561, 'kill_design_light_rays', 0), + (13942, 51563, 'kill_pegasus_fly', 0), + (13943, 51566, 'kill_cast_enter', 0), + (13944, 51567, 'kill_cast_exit', 0), + (13945, 51568, 'kill_cast_idle', 0), + (13946, 51574, 'kill_design_marr_godly_light', 0), + (13947, 51575, 'kill_design_marr_godly_teleport', 0), + (13948, 51577, 'kill_result_sparkles_cling_drop_bounce', 0), + (13949, 51583, 'kill_design_flaming_pumpkin_p2p', 0), + (13950, 51586, 'kill_snd_splat', 0), + (13951, 51587, 'kill_trdskl_flaming_pumpkin', 0), + (13952, 51594, 'kill_result_cold_summon_portal', 0), + (13953, 51595, 'kill_result_teleport_blast_up', 0), + (13954, 51596, 'kill_result_teleport_fold', 0), + (13955, 51598, 'kill_sound_attack_grunt', 0), + (13956, 51599, 'kill_sound_attack_stab', 0), + (13957, 51600, 'kill_sound_attack_vo', 0), + (13958, 51601, 'kill_sound_attack_vo_01', 0), + (13959, 51602, 'kill_sound_attack_whip_high', 0), + (13960, 51603, 'kill_sound_attack_whip_low', 0), + (13961, 51604, 'kill_sound_attack_whip_low_01', 0), + (13962, 51605, 'kill_sound_attack_whirl', 0), + (13963, 51606, 'kill_sound_cast_enter_bodynoise_01', 0), + (13964, 51607, 'kill_sound_cast_enter_bodynoise_02', 0), + (13965, 51608, 'kill_sound_cast_enter_roar', 0), + (13966, 51609, 'kill_sound_cast_exit_roar', 0), + (13967, 51610, 'kill_sound_cast_exit_spring', 0), + (13968, 51611, 'kill_sound_cast_idle', 0), + (13969, 51612, 'kill_sound_combat_art_buff_bodynoise_01', 0), + (13970, 51613, 'kill_sound_combat_art_buff_bodynoise_02', 0), + (13971, 51614, 'kill_sound_combat_art_buff_roar', 0), + (13972, 51615, 'kill_sound_footstep_deep', 0), + (13973, 51616, 'kill_sound_footstep_small', 0), + (13974, 51617, 'kill_sound_idle_bodynoise', 0), + (13975, 51618, 'kill_sound_idle_breath', 0), + (13976, 51619, 'kill_sound_idle_breath_01', 0), + (13977, 51620, 'kill_sound_rockbody', 0), + (13978, 51621, 'kill_sound_roperbodynoise_quick', 0), + (13979, 51622, 'kill_sound_roperbodynoise_slow', 0), + (13980, 51625, 'kill_cast_ice_pulse', 0), + (13981, 51626, 'kill_cast_icicle_spin_blast', 0), + (13982, 51631, 'kill_result_icicle_hit', 0), + (13983, 51634, 'kill_attack_head_butt', 0), + (13984, 51635, 'kill_attack_trample', 0), + (13985, 51642, 'kill_result_lightning_bolt_blast', 0), + (13986, 51643, 'kill_result_mana_drain_p2p', 0), + (13987, 51644, 'kill_result_rainy_black_cloud', 0), + (13988, 51645, 'kill_result_spikes_hit', 0), + (13989, 51650, 'kill_cast_stomp_blast_aoe', 0), + (13990, 51653, 'kill_result_banish', 0), + (13991, 51654, 'kill_result_banish_wisps_p2p', 0), + (13992, 51655, 'kill_result_icicle_storm', 0), + (13993, 51661, 'kill_design_ice_chains', 0), + (13994, 51663, 'kill_screech_attack', 0), + (13995, 51665, 'kill_sound_head_butt', 0), + (13996, 51671, 'kill_design_bone_barrier', 0), + (13997, 51673, 'kill_result_fireworks_shinies', 0), + (13998, 51676, 'kill_cannon_blast', 0), + (13999, 51681, 'kill_kneel_enter', 0), + (14000, 51682, 'kill_kneel_exit', 0), + (14001, 51683, 'kill_kneel_idle', 0), + (14002, 51684, 'kill_result_octopus_cannon_p2p', 0), + (14003, 51685, 'kill_result_octopus_splat_grab', 0), + (14004, 51691, 'kill_design_vd_bone_swirls', 0), + (14005, 51692, 'kill_design_vd_portal', 0), + (14006, 51693, 'kill_design_void_tainted', 0), + (14007, 51694, 'kill_flight_path_dawn', 0), + (14008, 51701, 'kill_result_plasma_bolt_p2p', 0), + (14009, 51706, 'kill_cast_sea_dragon_breath', 0), + (14010, 51707, 'kill_cast_sea_dragon_inhale', 0), + (14011, 51708, 'kill_cast_sea_dragon_powerup', 0), + (14012, 51710, 'kill_converse01', 0), + (14013, 51711, 'kill_converse02', 0), + (14014, 51713, 'kill_panda_chi', 0), + (14015, 51715, 'kill_sit_eat', 0), + (14016, 51716, 'kill_yells_charge', 0), + (14017, 51722, 'kill_hover_idle', 0), + (14018, 51728, 'kill_design_hedge_marker', 0), + (14019, 51729, 'kill_design_sol_lock_symbol', 0), + (14020, 51730, 'kill_h_sword_attack', 0), + (14021, 51732, 'kill_panda_dance01', 0), + (14022, 51733, 'kill_panda_dance02', 0), + (14023, 51734, 'kill_result_sea_dragon_buff_aoe', 0), + (14024, 51740, 'kill_design_marr_sword_blast', 0), + (14025, 51741, 'kill_design_vision_plane_spires', 0), + (14026, 51747, 'kill_design_sol_chapel_debris', 0), + (14027, 51753, 'kill_design_hole_pillar_corruption', 0), + (14028, 51759, 'kill_design_sol_coffin_body_fx', 0), + (14029, 51765, 'kill_design_spider_face', 0), + (14030, 51771, 'kill_design_vd_shrine_blast', 0), + (14031, 51777, 'kill_design_hole_summon_circle1', 0), + (14032, 51778, 'kill_design_hole_summon_circle2', 0), + (14033, 51779, 'kill_design_hole_summon_circle3', 0), + (14034, 51780, 'kill_design_hole_summon_circle4', 0), + (14035, 51781, 'kill_design_hole_summon_circles', 0), + (14036, 51788, 'kill_result_fireworks_rose_petals', 0), + (14037, 51796, 'kill_sound_glass_break', 0), + (14038, 51802, 'kill_design_fire_lit', 0), + (14039, 51803, 'kill_design_rhand_sparkles_out', 0), + (14040, 51804, 'kill_design_rhand_stars_out', 0), + (14041, 51805, 'kill_design_rune_fire_lit', 0), + (14042, 51808, 'kill_sit_fish', 0), + (14043, 51811, 'kill_cast_god_blast', 0), + (14044, 51815, 'kill_eat_bread', 0), + (14045, 51816, 'kill_eat_fish', 0), + (14046, 51819, 'kill_cast_magic_portal', 0), + (14047, 51824, 'kill_result_fireworks_snowflakes', 0), + (14048, 51825, 'kill_result_snowflakes_falling', 0), + (14049, 51831, 'kill_design_furnace_fire_blast', 0), + (14050, 51832, 'kill_design_golden_fire_lit', 0), + (14051, 51838, 'kill_design_personal_void_vortex', 0), + (14052, 51841, 'kill_cast_icy_division', 0), + (14053, 51847, 'kill_design_fire_elemental_smoke_blast', 0), + (14054, 51848, 'kill_design_hole_furnace_charge', 0), + (14055, 51849, 'kill_design_hole_furnace_essence', 0), + (14056, 51855, 'kill_design_crossed_swords', 0), + (14057, 51856, 'kill_design_feet_trail_clockwork', 0), + (14058, 51857, 'kill_design_feet_trail_confusion', 0), + (14059, 51858, 'kill_design_feet_trail_rose_petals', 0), + (14060, 51859, 'kill_design_feet_trail_shamrocks', 0), + (14061, 51860, 'kill_design_feet_trail_skulls', 0), + (14062, 51861, 'kill_design_feet_trail_snow', 0), + (14063, 51866, 'kill_cast_water_shield', 0), + (14064, 51869, 'kill_result_diseased', 0), + (14065, 51870, 'kill_result_stew_pot_dump', 0), + (14066, 51876, 'kill_converse03', 0), + (14067, 51882, 'kill_design_vd_shrine_bridge', 0), + (14068, 51883, 'kill_design_vd_shrine_dome', 0), + (14069, 51889, 'kill_dust_fx', 0), + (14070, 51892, 'kill_cast_medusa_snake_attack_aoe', 0), + (14071, 51893, 'kill_cast_medusa_snake_attack_p2p', 0), + (14072, 51894, 'kill_cast_medusa_snake_buff', 0), + (14073, 51898, 'kill_fly_from_roost', 0), + (14074, 51900, 'kill_result_medusa_snake_strike', 0), + (14075, 51902, 'kill_untrained_enter', 0), + (14076, 51905, 'kill_cast_lost_souls_rising', 0), + (14077, 51906, 'kill_cast_poison_column_blast', 0), + (14078, 51909, 'kill_cast_stone_gaze', 0), + (14079, 51912, 'kill_result_eel_spit_p2p', 0), + (14080, 51913, 'kill_result_medusa_snake_attack_p2p', 0), + (14081, 51914, 'kill_result_poisoned', 0), + (14082, 51920, 'kill_design_eru_light_bridge', 0), + (14083, 51921, 'kill_design_vd_shrine_bridge1', 0), + (14084, 51922, 'kill_design_vd_shrine_bridge2', 0), + (14085, 51925, 'kill_cast_poison_daggers', 0), + (14086, 51930, 'kill_result_amputation', 0), + (14087, 51931, 'kill_result_amputation_blast', 0), + (14088, 51933, 'kill_trdskl_bow', 0), + (14089, 51940, 'kill_result_dark_wings', 0), + (14090, 51946, 'kill_dw_attack_enter', 0), + (14091, 51947, 'kill_dw_attack_exit', 0), + (14092, 51948, 'kill_dw_attack_hold', 0), + (14093, 51949, 'kill_fly_away', 0), + (14094, 51951, 'kill_result_fist_rain', 0), + (14095, 51959, 'kill_smoke_fx', 0), + (14096, 51967, 'kill_trdskl_firefly_escape', 0), + (14097, 51968, 'kill_trdskl_firefly_jar', 0), + (14098, 51973, 'kill_cast_watching', 0), + (14099, 51976, 'kill_result_bullseye', 0), + (14100, 51981, 'kill_cast_weapon_chargeup', 0), + (14101, 51982, 'kill_cast_weapon_glint_point', 0), + (14102, 51983, 'kill_cast_weapon_shudder', 0), + (14103, 51989, 'kill_dual_wield_idle01', 0), + (14104, 51990, 'kill_habitat04', 0), + (14105, 51996, 'kill_design_boulder_roll', 0), + (14106, 51997, 'kill_design_boulder_shatter', 0), + (14107, 51998, 'kill_design_vd_teleport_fx', 0), + (14108, 52005, 'kill_quick_summon_fx', 0), + (14109, 52013, 'kill_smoke_fx_short', 0), + (14110, 52016, 'kill_cast_ghostly_vanish', 0), + (14111, 52021, 'kill_result_ghostly_possession_p2p', 0), + (14112, 52023, 'kill_sound_big_footstep', 0), + (14113, 52024, 'kill_sound_roehn_theer_cast_roar', 0), + (14114, 52025, 'kill_sound_roehn_theer_cast_roar_1', 0), + (14115, 52026, 'kill_sound_roehn_theer_combat_art_buff_roar', 0), + (14116, 52027, 'kill_sound_roehn_theer_combat_idle_wings', 0), + (14117, 52028, 'kill_sound_roehn_theer_death_roar', 0), + (14118, 52029, 'kill_sound_roehn_theer_dodge_grunt', 0), + (14119, 52030, 'kill_sound_roehn_theer_footstep_deep', 0), + (14120, 52031, 'kill_sound_roehn_theer_footstep_light', 0), + (14121, 52032, 'kill_sound_roehn_theer_grunt_quick', 0), + (14122, 52033, 'kill_sound_roehn_theer_hit', 0), + (14123, 52034, 'kill_sound_roehn_theer_idle_04_knuckles', 0), + (14124, 52035, 'kill_sound_roehn_theer_idle_hiss', 0), + (14125, 52036, 'kill_sound_roehn_theer_idle_hiss_light', 0), + (14126, 52037, 'kill_sound_roehn_theer_ouch', 0), + (14127, 52038, 'kill_sound_roehn_theer_sheath', 0), + (14128, 52039, 'kill_sound_roehn_theer_shield_shove_grunt', 0), + (14129, 52040, 'kill_sound_roehn_theer_sit_wings_short', 0), + (14130, 52041, 'kill_sound_roehn_theer_stomp', 0), + (14131, 52042, 'kill_sound_roehn_theer_swim_idle', 0), + (14132, 52043, 'kill_sound_roehn_theer_sword_attack_grunt', 0), + (14133, 52044, 'kill_sound_roehn_theer_sword_attack_grunt_quick', 0), + (14134, 52045, 'kill_sound_roehn_theer_sword_swoosh', 0), + (14135, 52046, 'kill_sound_roehn_theer_tail_whoosh', 0), + (14136, 52047, 'kill_sound_roehn_theer_tail_whoosh_deep', 0), + (14137, 52048, 'kill_sound_roehn_theer_unsheath', 0), + (14138, 52049, 'kill_sound_roehn_theer_wings', 0), + (14139, 52050, 'kill_sound_roehn_theer_wings_1', 0), + (14140, 52057, 'kill_mage_combo_trigger', 0), + (14141, 52058, 'kill_result_blast_hit', 0), + (14142, 52059, 'kill_result_mesh_blast', 0), + (14143, 52060, 'kill_result_skull_lifetap', 0), + (14144, 52063, 'kill_cast_crackling_rift_summon', 0), + (14145, 52068, 'kill_scout_combo_trigger', 0), + (14146, 52070, 'kill_sound_attack_grunt_small', 0), + (14147, 52071, 'kill_sound_combat_enter_pop', 0), + (14148, 52072, 'kill_sound_combat_enter_vox', 0), + (14149, 52073, 'kill_sound_combat_enter_woodbreak', 0), + (14150, 52074, 'kill_sound_dodge_down', 0), + (14151, 52075, 'kill_sound_reverberant_bang', 0), + (14152, 52076, 'kill_sound_whip_hit', 0), + (14153, 52077, 'kill_swim', 0), + (14154, 52083, 'kill_design_eru_lightning_barrier', 0), + (14155, 52084, 'kill_design_eru_water_barrier', 0), + (14156, 52090, 'kill_design_eru_ring_boundary', 0), + (14157, 52092, 'kill_result_eru_tether_p2p', 0), + (14158, 52098, 'kill_design_eru_alcove_broken', 0), + (14159, 52099, 'kill_design_eru_alcove_working', 0), + (14160, 52100, 'kill_design_eru_platform_discharge', 0), + (14161, 52101, 'kill_design_eru_platform_summon', 0), + (14162, 52106, 'kill_cast_wand_fizzle', 0), + (14163, 52109, 'kill_result_lightning_cage_blast', 0), + (14164, 52110, 'kill_result_wand_lightning_bolts_p2p', 0), + (14165, 52118, 'kill_sound_big_wings', 0), + (14166, 52119, 'kill_sound_toxxulia_attack_roar', 0), + (14167, 52120, 'kill_sound_toxxulia_bark', 0), + (14168, 52121, 'kill_sound_toxxulia_big_footsteps', 0), + (14169, 52122, 'kill_sound_toxxulia_cast_roar', 0), + (14170, 52123, 'kill_sound_toxxulia_feet_nails', 0), + (14171, 52124, 'kill_sound_toxxulia_growl', 0), + (14172, 52125, 'kill_sound_toxxulia_grunt', 0), + (14173, 52126, 'kill_sound_toxxulia_hiss', 0), + (14174, 52127, 'kill_sound_toxxulia_hiss_quiet', 0), + (14175, 52128, 'kill_sound_toxxulia_idle_wing_movement_short', 0), + (14176, 52129, 'kill_sound_toxxulia_ouch_hit', 0), + (14177, 52130, 'kill_sound_toxxulia_scrape', 0), + (14178, 52131, 'kill_sound_toxxulia_swallow_crunch_close', 0), + (14179, 52132, 'kill_sound_toxxulia_swallow_crunch_open', 0), + (14180, 52133, 'kill_sound_toxxulia_swallow_roar', 0), + (14181, 52134, 'kill_sound_toxxulia_swallow_slop', 0), + (14182, 52135, 'kill_sound_toxxulia_swim', 0), + (14183, 52136, 'kill_sound_toxxulia_tail_drop', 0), + (14184, 52137, 'kill_sound_toxxulia_walk', 0), + (14185, 52138, 'kill_sound_toxxulia_whip', 0), + (14186, 52139, 'kill_sound_toxxulia_whip_light', 0), + (14187, 52140, 'kill_sound_toxxulia_wing_movement', 0), + (14188, 52141, 'kill_sound_toxxulia_wings_flapping', 0), + (14189, 52149, 'kill_tiered_confused', 0), + (14190, 52150, 'kill_tiered_doppleganger_p2p', 0), + (14191, 52151, 'kill_tiered_entranced', 0), + (14192, 52152, 'kill_tiered_forced_shader_prism', 0), + (14193, 52153, 'kill_tiered_glow_eyes', 0), + (14194, 52154, 'kill_tiered_hand_crescent', 0), + (14195, 52155, 'kill_tiered_hand_prism', 0), + (14196, 52156, 'kill_tiered_mage_cure', 0), + (14197, 52157, 'kill_tiered_mage_ring_cure', 0), + (14198, 52158, 'kill_tiered_mental_blast', 0), + (14199, 52159, 'kill_tiered_mental_damage', 0), + (14200, 52160, 'kill_tiered_prism_eyes', 0), + (14201, 52161, 'kill_tiered_prism_rain', 0), + (14202, 52162, 'kill_tiered_prism_rays', 0), + (14203, 52163, 'kill_tiered_prismatic_summon', 0), + (14204, 52164, 'kill_tiered_runed_shield', 0), + (14205, 52165, 'kill_tiered_spin_stat_buff', 0), + (14206, 52166, 'kill_tiered_vanish_reappear', 0), + (14207, 52174, 'kill_tiered_mind_rings', 0), + (14208, 52175, 'kill_tiered_stunned', 0), + (14209, 52183, 'kill_tiered_mind_blast', 0), + (14210, 52184, 'kill_tiered_prism_cling', 0), + (14211, 52192, 'kill_tiered_crystal_summon', 0), + (14212, 52193, 'kill_tiered_magic_summon', 0), + (14213, 52194, 'kill_tiered_power_transfer_p2p', 0), + (14214, 52195, 'kill_tiered_sucking_tube_p2p', 0), + (14215, 52203, 'kill_tiered_bat_attack_p2p', 0), + (14216, 52204, 'kill_tiered_crystal_blast', 0), + (14217, 52205, 'kill_tiered_crystal_p2p', 0), + (14218, 52206, 'kill_tiered_earth_summon', 0), + (14219, 52207, 'kill_tiered_quicksand', 0), + (14220, 52208, 'kill_tiered_shrink', 0), + (14221, 52216, 'kill_tiered_air_summon', 0), + (14222, 52217, 'kill_tiered_earthquake', 0), + (14223, 52218, 'kill_tiered_elemental_portal', 0), + (14224, 52219, 'kill_tiered_fire_summon', 0), + (14225, 52220, 'kill_tiered_life_summon', 0), + (14226, 52221, 'kill_tiered_plane_shift', 0), + (14227, 52227, 'kill_gazer_pained_roar', 0), + (14228, 52230, 'kill_sound_gazer_attack02_roar', 0), + (14229, 52231, 'kill_sound_gazer_attack03_roar', 0), + (14230, 52232, 'kill_sound_gazer_attack_roar', 0), + (14231, 52233, 'kill_sound_gazer_attack_woosh', 0), + (14232, 52234, 'kill_sound_gazer_attack_woosh_quiet', 0), + (14233, 52235, 'kill_sound_gazer_bite_roar', 0), + (14234, 52236, 'kill_sound_gazer_bodynoise', 0), + (14235, 52237, 'kill_sound_gazer_bodynoise_fall', 0), + (14236, 52238, 'kill_sound_gazer_bodynoise_fall_deep', 0), + (14237, 52239, 'kill_sound_gazer_bodynoise_fall_dirt', 0), + (14238, 52240, 'kill_sound_gazer_bodynoise_long', 0), + (14239, 52241, 'kill_sound_gazer_breath', 0), + (14240, 52242, 'kill_sound_gazer_breath_grunt', 0), + (14241, 52243, 'kill_sound_gazer_combat_art_buff_roar', 0), + (14242, 52244, 'kill_sound_gazer_crunch', 0), + (14243, 52245, 'kill_sound_gazer_deadfall', 0), + (14244, 52246, 'kill_sound_gazer_eyeball_gross', 0), + (14245, 52247, 'kill_sound_gazer_eyeball_pop', 0), + (14246, 52248, 'kill_sound_gazer_eyeball_pop_quiet', 0), + (14247, 52249, 'kill_sound_gazer_eyeball_twirl', 0), + (14248, 52250, 'kill_sound_gazer_growl_low', 0), + (14249, 52251, 'kill_sound_gazer_grunt_short', 0), + (14250, 52252, 'kill_sound_gazer_liddown', 0), + (14251, 52253, 'kill_sound_gazer_swim', 0), + (14252, 52254, 'kill_sound_gazer_swim_idle', 0), + (14253, 52255, 'kill_sound_gazer_whip', 0), + (14254, 52256, 'kill_sound_gazer_whip_impact', 0), + (14255, 52257, 'kill_sound_gazer_whip_low', 0), + (14256, 52258, 'kill_tiered_clouds_head', 0), + (14257, 52259, 'kill_tiered_hand_dark_rings', 0), + (14258, 52260, 'kill_tiered_heart_summon', 0), + (14259, 52261, 'kill_tiered_undead_tide', 0), + (14260, 52262, 'kill_tiered_vampirism_p2p', 0), + (14261, 52265, 'kill_attack_eat', 0), + (14262, 52270, 'kill_perch_idle', 0), + (14263, 52277, 'kill_result_steam_cup', 0), + (14264, 52283, 'kill_design_glow_full', 0), + (14265, 52284, 'kill_design_glow_low', 0), + (14266, 52285, 'kill_design_glow_med', 0), + (14267, 52287, 'kill_result_energy_drain_p2p', 0), + (14268, 52288, 'kill_result_meditate_rings', 0), + (14269, 52294, 'kill_design_hole_mines', 0), + (14270, 52295, 'kill_design_hole_mines_blast', 0), + (14271, 52298, 'kill_sound_mine_blast', 0), + (14272, 52299, 'kill_sound_mine_splash', 0), + (14273, 52305, 'kill_design_th_platform', 0), + (14274, 52306, 'kill_design_th_platform_collapse', 0), + (14275, 52307, 'kill_design_th_platform_rift', 0), + (14276, 52315, 'kill_sound_displacer_beast_attack_1', 0), + (14277, 52316, 'kill_sound_displacer_beast_footstep', 0), + (14278, 52317, 'kill_sound_displacer_beast_footstep_dirt', 0), + (14279, 52318, 'kill_sound_displacer_beast_hiss', 0), + (14280, 52319, 'kill_sound_displacer_beast_idle', 0), + (14281, 52320, 'kill_sound_displacer_beast_idle_long', 0), + (14282, 52321, 'kill_sound_displacer_beast_whip', 0), + (14283, 52322, 'kill_sound_displacer_beast_whip_deep', 0), + (14284, 52323, 'kill_sound_displacer_beast_whip_high', 0), + (14285, 52326, 'kill_cast_air_sample', 0), + (14286, 52331, 'kill_cast_tallonite_lash_cone', 0), + (14287, 52332, 'kill_cast_tallonite_lash_summon', 0), + (14288, 52335, 'kill_lynx_backup', 0), + (14289, 52336, 'kill_lynx_fall', 0), + (14290, 52337, 'kill_lynx_idle', 0), + (14291, 52338, 'kill_lynx_jump', 0), + (14292, 52339, 'kill_lynx_jump_substitute', 0), + (14293, 52340, 'kill_lynx_land', 0), + (14294, 52341, 'kill_lynx_long_fall', 0), + (14295, 52342, 'kill_lynx_run', 0), + (14296, 52343, 'kill_lynx_turn_left', 0), + (14297, 52344, 'kill_lynx_turn_right', 0), + (14298, 52345, 'kill_lynx_walk', 0), + (14299, 52346, 'kill_result_tallonite_barb_p2p', 0), + (14300, 52347, 'kill_result_trail_tallonite', 0), + (14301, 52350, 'kill_attack_throw_boulder', 0), + (14302, 52353, 'kill_cast_tallonite_balance', 0), + (14303, 52356, 'kill_result_cloud_dot_blast', 0), + (14304, 52357, 'kill_result_tallonite_lash_p2p', 0), + (14305, 52364, 'kill_result_tallonite_lash_skulls_p2p', 0), + (14306, 52365, 'kill_result_tallonite_skull_control', 0), + (14307, 52366, 'kill_result_tallonite_sphere', 0), + (14308, 52368, 'kill_sound_displacer_beast_attack_2', 0), + (14309, 52369, 'kill_sound_displacer_beast_attack_3', 0), + (14310, 52370, 'kill_sound_displacer_beast_bark', 0), + (14311, 52371, 'kill_sound_displacer_beast_big_purr', 0), + (14312, 52372, 'kill_sound_displacer_beast_blade_fall', 0), + (14313, 52373, 'kill_sound_displacer_beast_blade_swoosh', 0), + (14314, 52374, 'kill_sound_displacer_beast_charge_up_roar', 0), + (14315, 52375, 'kill_sound_displacer_beast_dead_1', 0), + (14316, 52376, 'kill_sound_displacer_beast_dead_2', 0), + (14317, 52377, 'kill_sound_displacer_beast_dodge_thrust_roar', 0), + (14318, 52378, 'kill_sound_displacer_beast_fall_small', 0), + (14319, 52379, 'kill_sound_displacer_beast_footstep_deep', 0), + (14320, 52380, 'kill_sound_displacer_beast_idle_breath', 0), + (14321, 52381, 'kill_sound_displacer_beast_ouch', 0), + (14322, 52382, 'kill_sound_displacer_beast_ouch_hit', 0), + (14323, 52383, 'kill_sound_displacer_beast_pulse', 0), + (14324, 52384, 'kill_sound_displacer_beast_pulse_crunch', 0), + (14325, 52385, 'kill_sound_displacer_beast_small_purr', 0), + (14326, 52386, 'kill_sound_displacer_beast_swim', 0), + (14327, 52394, 'kill_sound_pandaman_footstep', 0), + (14328, 52395, 'kill_sound_pandaman_idle_breathing', 0), + (14329, 52396, 'kill_sound_pegasus_attack', 0), + (14330, 52397, 'kill_sound_pegasus_attack_1', 0), + (14331, 52398, 'kill_sound_pegasus_attack_4', 0), + (14332, 52399, 'kill_sound_pegasus_death_fall', 0), + (14333, 52400, 'kill_sound_pegasus_death_niegh', 0), + (14334, 52401, 'kill_sound_pegasus_grunt', 0), + (14335, 52402, 'kill_sound_pegasus_hooves', 0), + (14336, 52403, 'kill_sound_pegasus_hooves_scrape', 0), + (14337, 52404, 'kill_sound_pegasus_idle_1', 0), + (14338, 52405, 'kill_sound_pegasus_idle_2', 0), + (14339, 52406, 'kill_sound_pegasus_idle_slow', 0), + (14340, 52407, 'kill_sound_pegasus_idleloop', 0), + (14341, 52408, 'kill_sound_pegasus_limb_whip', 0), + (14342, 52409, 'kill_sound_pegasus_ouch_1', 0), + (14343, 52410, 'kill_sound_pegasus_ouch_hit', 0), + (14344, 52411, 'kill_sound_pegasus_snort_quick', 0), + (14345, 52412, 'kill_sound_pegasus_wings_soft', 0), + (14346, 52419, 'kill_lynx_idle01', 0), + (14347, 52424, 'kill_cast_spin_flash_buff', 0), + (14348, 52425, 'kill_cast_tallonite_dagger_blast', 0), + (14349, 52427, 'kill_energy_blobs_kick_blast', 0), + (14350, 52429, 'kill_result_slow', 0), + (14351, 52434, 'kill_cast_tallonite_axe_throw', 0), + (14352, 52435, 'kill_cast_tallonite_glow_eyes', 0), + (14353, 52437, 'kill_design_sen_lava_falls', 0), + (14354, 52438, 'kill_design_sen_lightning_rune_orb', 0), + (14355, 52444, 'kill_design_eru_column_protection', 0), + (14356, 52450, 'kill_design_theer_fire_forrest', 0), + (14357, 52451, 'kill_design_theer_fire_passion', 0), + (14358, 52452, 'kill_design_theer_fire_water', 0), + (14359, 52453, 'kill_design_theer_fire_wrath', 0), + (14360, 52454, 'kill_design_theer_obj_forrest', 0), + (14361, 52455, 'kill_design_theer_obj_passion', 0), + (14362, 52456, 'kill_design_theer_obj_water', 0), + (14363, 52457, 'kill_design_theer_obj_wrath', 0), + (14364, 52458, 'kill_design_theer_symbol_blast', 0), + (14365, 52459, 'kill_design_theer_symbol_evil', 0), + (14366, 52460, 'kill_design_theer_symbol_forrest', 0), + (14367, 52461, 'kill_design_theer_symbol_good', 0), + (14368, 52462, 'kill_design_theer_symbol_none', 0), + (14369, 52463, 'kill_design_theer_symbol_passion', 0), + (14370, 52464, 'kill_design_theer_symbol_water', 0), + (14371, 52465, 'kill_design_theer_symbol_wrath', 0), + (14372, 52466, 'kill_design_theer_wrath_blast', 0), + (14373, 52469, 'kill_cast_massive_ring_blast', 0), + (14374, 52474, 'kill_result_billowing_energy', 0), + (14375, 52475, 'kill_result_seeping_energy', 0), + (14376, 52481, 'kill_design_odus_dome_barrier', 0), + (14377, 52483, 'kill_result_fiery_sun', 0), + (14378, 52484, 'kill_result_healing_flora', 0), + (14379, 52485, 'kill_result_singing_wind', 0), + (14380, 52487, 'kill_sound_catoplebus_attack_roar_1', 0), + (14381, 52488, 'kill_sound_catoplebus_attack_roar_2', 0), + (14382, 52489, 'kill_sound_catoplebus_attack_roar_3', 0), + (14383, 52490, 'kill_sound_catoplebus_body_movement', 0), + (14384, 52491, 'kill_sound_catoplebus_cast_roar', 0), + (14385, 52492, 'kill_sound_catoplebus_combat_art_buff_roar', 0), + (14386, 52493, 'kill_sound_catoplebus_crunch', 0), + (14387, 52494, 'kill_sound_catoplebus_death_roar', 0), + (14388, 52495, 'kill_sound_catoplebus_dodge_grunt', 0), + (14389, 52496, 'kill_sound_catoplebus_dodge_roar', 0), + (14390, 52497, 'kill_sound_catoplebus_footstep', 0), + (14391, 52498, 'kill_sound_catoplebus_footstep_deep', 0), + (14392, 52499, 'kill_sound_catoplebus_footstep_deep_soft', 0), + (14393, 52500, 'kill_sound_catoplebus_idle_grunt', 0), + (14394, 52501, 'kill_sound_catoplebus_idle_roar', 0), + (14395, 52502, 'kill_sound_catoplebus_idle_sniff', 0), + (14396, 52503, 'kill_sound_catoplebus_idle_snort', 0), + (14397, 52504, 'kill_sound_catoplebus_slide', 0), + (14398, 52505, 'kill_sound_catoplebus_swim', 0), + (14399, 52506, 'kill_sound_catoplebus_swim_idle', 0), + (14400, 52507, 'kill_sound_catoplebus_tail_whoosh', 0), + (14401, 52508, 'kill_sound_cerberus_attack_roar', 0), + (14402, 52509, 'kill_sound_cerberus_cast_roar', 0), + (14403, 52510, 'kill_sound_cerberus_combat_art_buff_roar', 0), + (14404, 52511, 'kill_sound_cerberus_death_fall', 0), + (14405, 52512, 'kill_sound_cerberus_death_roar', 0), + (14406, 52513, 'kill_sound_cerberus_dodge_bark', 0), + (14407, 52514, 'kill_sound_cerberus_dodge_growl', 0), + (14408, 52515, 'kill_sound_cerberus_growl', 0), + (14409, 52516, 'kill_sound_cerberus_idle_howl_1', 0), + (14410, 52517, 'kill_sound_cerberus_idle_howl_2', 0), + (14411, 52518, 'kill_sound_cerberus_idle_howl_long', 0), + (14412, 52519, 'kill_sound_cerberus_scrape', 0), + (14413, 52520, 'kill_sound_cerberus_snarl', 0), + (14414, 52521, 'kill_sound_cerberus_swim', 0), + (14415, 52522, 'kill_trdskl_transmute_complete', 0), + (14416, 52523, 'kill_trdskl_transmute_rings', 0), + (14417, 52531, 'kill_sound_goatmen_lf_stomp', 0), + (14418, 52532, 'kill_sound_goatmen_armor_long', 0), + (14419, 52533, 'kill_sound_goatmen_armor_short_loud', 0), + (14420, 52534, 'kill_sound_goatmen_armor_short_quiet', 0), + (14421, 52535, 'kill_sound_goatmen_attack_roar', 0), + (14422, 52536, 'kill_sound_goatmen_blade_swoosh_1', 0), + (14423, 52537, 'kill_sound_goatmen_blade_swoosh_2', 0), + (14424, 52538, 'kill_sound_goatmen_body_fall', 0), + (14425, 52539, 'kill_sound_goatmen_body_movement_short', 0), + (14426, 52540, 'kill_sound_goatmen_bow_enter', 0), + (14427, 52541, 'kill_sound_goatmen_bow_exit', 0), + (14428, 52542, 'kill_sound_goatmen_bow_getarrow', 0), + (14429, 52543, 'kill_sound_goatmen_bow_pullback', 0), + (14430, 52544, 'kill_sound_goatmen_bow_release', 0), + (14431, 52545, 'kill_sound_goatmen_breath_out', 0), + (14432, 52546, 'kill_sound_goatmen_cast_yell', 0), + (14433, 52547, 'kill_sound_goatmen_combat_art_buff', 0), + (14434, 52548, 'kill_sound_goatmen_death_roar', 0), + (14435, 52549, 'kill_sound_goatmen_death_roar_2', 0), + (14436, 52550, 'kill_sound_goatmen_footstep', 0), + (14437, 52551, 'kill_sound_goatmen_grunt', 0), + (14438, 52552, 'kill_sound_goatmen_ouch', 0), + (14439, 52553, 'kill_sound_goatmen_scrape', 0), + (14440, 52554, 'kill_sound_goatmen_snort', 0), + (14441, 52555, 'kill_sound_goatmen_swim', 0), + (14442, 52556, 'kill_sound_goatmen_weapon_twirl', 0), + (14443, 52562, 'kill_design_pulse_beacon', 0), + (14444, 52563, 'kill_design_shard_blast', 0), + (14445, 52565, 'kill_pandamen_wildswing_attack', 0), + (14446, 52566, 'kill_pulse_sound', 0), + (14447, 52569, 'kill_sound_pandamen_bark', 0), + (14448, 52570, 'kill_sound_pandamen_bleat', 0), + (14449, 52571, 'kill_sound_pandamen_bow_getarrow', 0), + (14450, 52572, 'kill_sound_pandamen_bow_pullback', 0), + (14451, 52573, 'kill_sound_pandamen_bow_release', 0), + (14452, 52574, 'kill_sound_pandamen_bow_sheath', 0), + (14453, 52575, 'kill_sound_pandamen_bow_unsheath', 0), + (14454, 52576, 'kill_sound_pandamen_charge_roar', 0), + (14455, 52577, 'kill_sound_pandamen_dead', 0), + (14456, 52578, 'kill_sound_pandamen_eat', 0), + (14457, 52579, 'kill_sound_pandamen_footslide', 0), + (14458, 52580, 'kill_sound_pandamen_footstep_soft', 0), + (14459, 52581, 'kill_sound_pandamen_growl', 0), + (14460, 52582, 'kill_sound_pandamen_grunt', 0), + (14461, 52583, 'kill_sound_pandamen_idle_grunt', 0), + (14462, 52584, 'kill_sound_pandamen_idle_grunt_short', 0), + (14463, 52585, 'kill_sound_pandamen_movement_cloth_long', 0), + (14464, 52586, 'kill_sound_pandamen_movement_cloth_short', 0), + (14465, 52587, 'kill_sound_pandamen_scratch', 0), + (14466, 52588, 'kill_sound_pandamen_scratch_pant', 0), + (14467, 52589, 'kill_sound_pandamen_sit', 0), + (14468, 52590, 'kill_sound_pandamen_swim', 0), + (14469, 52591, 'kill_sound_pandamen_whoosh', 0), + (14470, 52597, 'kill_evil_theer_energy_buff', 0), + (14471, 52598, 'kill_good_theer_energy_buff', 0), + (14472, 52600, 'kill_result_balanced_judgement', 0), + (14473, 52601, 'kill_result_fiery_flames', 0), + (14474, 52602, 'kill_result_theer_debuff_down', 0), + (14475, 52603, 'kill_result_theer_debuff_up', 0), + (14476, 52604, 'kill_result_theer_mana_drain_p2p', 0), + (14477, 52607, 'kill_theer_charge_up', 0), + (14478, 52608, 'kill_theer_mana_blast', 0), + (14479, 52613, 'kill_cast_wyvern_breath', 0), + (14480, 52614, 'kill_cast_wyvern_inhale', 0), + (14481, 52616, 'kill_design_erudite_switch_evil', 0), + (14482, 52617, 'kill_design_erudite_switch_good', 0), + (14483, 52618, 'kill_design_murderball_debuff', 0), + (14484, 52621, 'kill_sound_chimera_attack_roar_1', 0), + (14485, 52622, 'kill_sound_chimera_attack_roar_2', 0), + (14486, 52623, 'kill_sound_chimera_attack_roar_3', 0), + (14487, 52624, 'kill_sound_chimera_cast_roar', 0), + (14488, 52625, 'kill_sound_chimera_cast_roar_short', 0), + (14489, 52626, 'kill_sound_chimera_combat_art_buff_roar', 0), + (14490, 52627, 'kill_sound_chimera_dead_fall', 0), + (14491, 52628, 'kill_sound_chimera_death_roar', 0), + (14492, 52629, 'kill_sound_chimera_dodge_down_roar', 0), + (14493, 52630, 'kill_sound_chimera_dodge_grunt', 0), + (14494, 52631, 'kill_sound_chimera_footslide', 0), + (14495, 52632, 'kill_sound_chimera_footstep', 0), + (14496, 52633, 'kill_sound_chimera_footstep_big', 0), + (14497, 52634, 'kill_sound_chimera_idle_bird_1', 0), + (14498, 52635, 'kill_sound_chimera_idle_bird_2', 0), + (14499, 52636, 'kill_sound_chimera_idle_bird_3', 0), + (14500, 52637, 'kill_sound_chimera_idle_goat_1', 0), + (14501, 52638, 'kill_sound_chimera_idle_goat_2', 0), + (14502, 52639, 'kill_sound_chimera_idle_goat_3', 0), + (14503, 52640, 'kill_sound_chimera_idle_lion_1', 0), + (14504, 52641, 'kill_sound_chimera_idle_lion_2', 0), + (14505, 52642, 'kill_sound_chimera_idle_lion_3', 0), + (14506, 52643, 'kill_sound_chimera_idle_lion_4', 0), + (14507, 52644, 'kill_sound_chimera_idle_wings', 0), + (14508, 52645, 'kill_sound_chimera_sit_wings_short', 0), + (14509, 52646, 'kill_sound_chimera_snake_stab', 0), + (14510, 52647, 'kill_sound_chimera_swim', 0), + (14511, 52648, 'kill_sound_chimera_wings_big', 0), + (14512, 52650, 'kill_sound_lynx_mount_bare_idle', 0), + (14513, 52651, 'kill_sound_lynx_mount_bare_roar_1', 0), + (14514, 52652, 'kill_sound_lynx_mount_bare_roar_2', 0), + (14515, 52653, 'kill_sound_lynx_mount_footstep_quiet', 0), + (14516, 52654, 'kill_sound_lynx_mount_land', 0), + (14517, 52655, 'kill_sound_odus_kitten_attack_1', 0), + (14518, 52656, 'kill_sound_odus_kitten_attack_2', 0), + (14519, 52657, 'kill_sound_odus_kitten_attack_3', 0), + (14520, 52658, 'kill_sound_odus_kitten_attack_4', 0), + (14521, 52659, 'kill_sound_odus_kitten_combat_exit', 0), + (14522, 52660, 'kill_sound_odus_kitten_eat_1', 0), + (14523, 52661, 'kill_sound_odus_kitten_fall', 0), + (14524, 52662, 'kill_sound_odus_kitten_footstep', 0), + (14525, 52663, 'kill_sound_odus_kitten_hiss', 0), + (14526, 52664, 'kill_sound_odus_kitten_idle_purr_1', 0), + (14527, 52665, 'kill_sound_odus_kitten_lick', 0), + (14528, 52666, 'kill_sound_odus_kitten_meow_1', 0), + (14529, 52667, 'kill_sound_odus_kitten_meow_2', 0), + (14530, 52668, 'kill_sound_odus_kitten_ouch_short', 0), + (14531, 52669, 'kill_sound_odus_kitten_scratch', 0), + (14532, 52670, 'kill_sound_odus_kitten_sneeze', 0), + (14533, 52671, 'kill_sound_odus_kitten_swim', 0), + (14534, 52674, 'kill_cast_draconian_breath', 0), + (14535, 52677, 'kill_cast_wurm_breath', 0), + (14536, 52678, 'kill_cast_wurm_crush_blast', 0), + (14537, 52679, 'kill_cast_wurm_inhale', 0), + (14538, 52681, 'kill_design_active_eggs', 0), + (14539, 52682, 'kill_design_hatched_eggs', 0), + (14540, 52683, 'kill_design_inactive_eggs', 0), + (14541, 52685, 'kill_result_blinded', 0), + (14542, 52686, 'kill_result_crush_rings', 0), + (14543, 52692, 'kill_design_summon_fx', 1045), + (14544, 52694, 'kill_result_summoning_crystal', 1045), + (14545, 52697, 'kill_sound_lynx_armor_1', 1045), + (14546, 52698, 'kill_sound_lynx_armor_short', 1045), + (14547, 52707, 'kill_toxx_breath_attack', 1045), + (14548, 52708, 'kill_toxx_breath_inhale', 1045), + (14549, 52715, 'kill_result_floor_pie', 1045), + (14550, 52722, 'kill_result_lich_evil_drain_p2p', 1045), + (14551, 52723, 'kill_result_lich_good_drain_p2p', 1045), + (14552, 52724, 'kill_result_theer_evil_drain', 1045), + (14553, 52725, 'kill_result_theer_good_drain', 1045), + (14554, 52732, 'kill_result_toxic_debuff', 1045), + (14555, 52735, 'kill_toxx_breath_attack01', 1045), + (14556, 52736, 'kill_toxx_breath_attack02', 1045), + (14557, 52742, 'kill_design_kobold_claw', 1045), + (14558, 52743, 'kill_design_toxic_sphere0', 1045), + (14559, 52744, 'kill_design_toxic_sphere01', 1045), + (14560, 52745, 'kill_design_toxic_sphere02', 1045), + (14561, 52746, 'kill_design_toxic_sphere03', 1045), + (14562, 52747, 'kill_design_toxic_sphere04', 1045), + (14563, 52748, 'kill_design_toxic_sphere05', 1045), + (14564, 52750, 'kill_result_toxx_essence_trap_p2p', 1045), + (14565, 52752, 'kill_sound_catoplebus_ouch', 1045), + (14566, 52753, 'kill_sound_catoplebus_ouch_1', 1045), + (14567, 52754, 'kill_sound_catoplebus_ouch_2', 1045), + (14568, 52756, 'kill_sound_skeletal_1', 1045), + (14569, 52757, 'kill_sound_skeletal_10', 1045), + (14570, 52758, 'kill_sound_skeletal_11', 1045), + (14571, 52759, 'kill_sound_skeletal_12', 1045), + (14572, 52760, 'kill_sound_skeletal_13', 1045), + (14573, 52761, 'kill_sound_skeletal_14', 1045), + (14574, 52762, 'kill_sound_skeletal_15', 1045), + (14575, 52763, 'kill_sound_skeletal_16', 1045), + (14576, 52764, 'kill_sound_skeletal_17', 1045), + (14577, 52765, 'kill_sound_skeletal_18', 1045), + (14578, 52766, 'kill_sound_skeletal_19', 1045), + (14579, 52767, 'kill_sound_skeletal_2', 1045), + (14580, 52768, 'kill_sound_skeletal_20', 1045), + (14581, 52769, 'kill_sound_skeletal_21', 1045), + (14582, 52770, 'kill_sound_skeletal_22', 1045), + (14583, 52771, 'kill_sound_skeletal_3', 1045), + (14584, 52772, 'kill_sound_skeletal_4', 1045), + (14585, 52773, 'kill_sound_skeletal_5', 1045), + (14586, 52774, 'kill_sound_skeletal_6', 1045), + (14587, 52775, 'kill_sound_skeletal_7', 1045), + (14588, 52776, 'kill_sound_skeletal_8', 1045), + (14589, 52777, 'kill_sound_skeletal_9', 1045), + (14590, 52778, 'kill_toxx_chained', 1045), + (14591, 52779, 'kill_toxx_vanish', 1045), + (14592, 52785, 'kill_design_active_head_001', 1045), + (14593, 52786, 'kill_design_active_head_010', 1045), + (14594, 52787, 'kill_design_active_head_011', 1045), + (14595, 52788, 'kill_design_active_head_100', 1045), + (14596, 52789, 'kill_design_active_head_101', 1045), + (14597, 52790, 'kill_design_active_head_110', 1045), + (14598, 52791, 'kill_design_active_head_111', 1045), + (14599, 52792, 'kill_design_tallonite_portal', 1045), + (14600, 52793, 'kill_design_teleport_druid_ring', 1045), + (14601, 52796, 'kill_cast_arcane_blast', 1045), + (14602, 52797, 'kill_cast_crush_blast', 1045), + (14603, 52798, 'kill_cast_poison_blast', 1045), + (14604, 52802, 'kill_design_mystic_barrier', 1045), + (14605, 52808, 'kill_design_blue_flag_pickup', 1045), + (14606, 52809, 'kill_design_red_flag_pickup', 1045), + (14607, 52815, 'kill_death_impact', 1045), + (14608, 52816, 'kill_gorgon_attack_roar_01', 1045), + (14609, 52817, 'kill_gorgon_attack_roar_02', 1045), + (14610, 52818, 'kill_gorgon_breath_in', 1045), + (14611, 52819, 'kill_gorgon_breath_out_long', 1045), + (14612, 52820, 'kill_gorgon_breath_out_short', 1045), + (14613, 52821, 'kill_gorgon_cast_roar_01', 1045), + (14614, 52822, 'kill_gorgon_chewing_close', 1045), + (14615, 52823, 'kill_gorgon_chewing_open', 1045), + (14616, 52824, 'kill_gorgon_death_impact', 1045), + (14617, 52825, 'kill_gorgon_death_roar', 1045), + (14618, 52826, 'kill_gorgon_footscrape', 1045), + (14619, 52827, 'kill_gorgon_footstep_deep', 1045), + (14620, 52828, 'kill_gorgon_footstep_metal', 1045), + (14621, 52829, 'kill_gorgon_hooves', 1045), + (14622, 52830, 'kill_gorgon_kick_swish', 1045), + (14623, 52831, 'kill_gorgon_metal_movement', 1045), + (14624, 52832, 'kill_gorgon_metal_movement_deep', 1045), + (14625, 52833, 'kill_gorgon_metal_movement_long', 1045), + (14626, 52834, 'kill_gorgon_metal_movement_quiet', 1045), + (14627, 52835, 'kill_gorgon_metal_scrape', 1045), + (14628, 52836, 'kill_gorgon_ouch_headshake', 1045), + (14629, 52837, 'kill_gorgon_ouch_impact', 1045), + (14630, 52838, 'kill_gorgon_snort', 1045), + (14631, 52839, 'kill_gorgon_snort_big', 1045), + (14632, 52840, 'kill_gorgon_swim', 1045), + (14633, 52844, 'kill_stone_ouch_impact', 1045), + (14634, 52850, 'kill_design_blue_flag_trail', 1045), + (14635, 52851, 'kill_design_red_flag_trail', 1045), + (14636, 52857, 'kill_design_battleground_tower_blue', 1045), + (14637, 52858, 'kill_design_battleground_tower_red', 1045), + (14638, 52864, 'kill_crystaline_folk_lf', 1045), + (14639, 52865, 'kill_crystaline_folk_footstep_big', 1045), + (14640, 52866, 'kill_crystaline_folk_footstep_crunch', 1045), + (14641, 52867, 'kill_crystaline_folk_stone_debris', 1045), + (14642, 52868, 'kill_crystaline_folk_tantrum_1', 1045), + (14643, 52869, 'kill_crystaline_folk_tantrum_2', 1045), + (14644, 52870, 'kill_crystaline_folk_tantrum_3', 1045), + (14645, 52871, 'kill_crystaline_folk_tantrum_body_1', 1045), + (14646, 52872, 'kill_crystaline_folk_tantrum_body_2', 1045), + (14647, 52873, 'kill_crystaline_folk_tantrum_body_3', 1045), + (14648, 52874, 'kill_design_sen_lava_floor', 1045), + (14649, 52877, 'kill_cast_mental_blast', 1045), + (14650, 52882, 'kill_design_reform_fx', 1045), + (14651, 52885, 'kill_attack_breath_crush', 1045), + (14652, 52886, 'kill_attack_breath_poison', 1045), + (14653, 52891, 'kill_design_drain_theer_fx', 1045), + (14654, 52892, 'kill_design_power_aura', 1045), + (14655, 52894, 'kill_result_forced_shader_white', 1045), + (14656, 52895, 'kill_result_stunned_rings', 1045), + (14657, 52902, 'kill_froglock_gathering_search', 1045), + (14658, 52906, 'kill_status_quest_completes_storyline', 1045), + (14659, 52907, 'kill_status_quest_gives_storyline', 1045), + (14660, 52908, 'kill_status_quest_updates_storyline', 1045), + (14661, 52918, 'kill_sound_lynx_armor_short_1', 1045), + (14662, 52919, 'kill_sound_lynx_mount_bare_roar_3', 1045), + (14663, 52927, 'kill_result_forced_shader_rock_red', 1045), + (14664, 52930, 'kill_tiered_cleric_wheel_back', 1045), + (14665, 52931, 'kill_tiered_cleric_wheel_base', 1045), + (14666, 52932, 'kill_tiered_cleric_wheel_forward', 1045), + (14667, 52933, 'kill_tiered_hand_cross', 1045), + (14668, 52934, 'kill_tiered_hand_leaves', 1045), + (14669, 52935, 'kill_tiered_hand_leaves_glowing', 1045), + (14670, 52936, 'kill_tiered_hand_pattern', 1045), + (14671, 52937, 'kill_tiered_refreshment_summon', 1045), + (14672, 52938, 'kill_tiered_smite_p2p', 1045), + (14673, 52946, 'kill_jump_falling', 1045), + (14674, 52956, 'kill_tiered_angel_wings', 1045), + (14675, 52957, 'kill_tiered_bar_heal', 1045), + (14676, 52958, 'kill_tiered_divine_burst', 1045), + (14677, 52959, 'kill_tiered_divine_essence_summon', 1045), + (14678, 52960, 'kill_tiered_head_halo', 1045), + (14679, 52961, 'kill_tiered_priest_ring_cure', 1045), + (14680, 52962, 'kill_tiered_radiant_glow', 1045), + (14681, 52963, 'kill_tiered_resurrect_swirls', 1045), + (14682, 52964, 'kill_tiered_small_heal', 1045), + (14683, 52965, 'kill_tiered_smite_hit', 1045), + (14684, 52966, 'kill_tiered_soothe', 1045), + (14685, 52967, 'kill_tiered_toxin_out', 1045), + (14686, 52968, 'kill_tiered_water_bubble', 1045), + (14687, 52978, 'kill_sound_roehn_theer_stomp_rocks_1', 1045), + (14688, 52979, 'kill_sound_roehn_theer_stomp_rocks_2', 1045), + (14689, 52980, 'kill_sound_roehn_theer_stomp_rocks_3', 1045), + (14690, 52981, 'kill_tiered_flash_heal', 1045), + (14691, 52982, 'kill_tiered_ring_shield', 1045), + (14692, 52983, 'kill_tiered_scimitar_exploding', 1045), + (14693, 52984, 'kill_tiered_scimitar_smite', 1045), + (14694, 52985, 'kill_tiered_timer', 1045), + (14695, 52995, 'kill_tiered_divine_hit', 1045), + (14696, 52996, 'kill_tiered_double_smite_p2p', 1045), + (14697, 52997, 'kill_tiered_hand_sparkles', 1045), + (14698, 52998, 'kill_tiered_heal_tube_p2p', 1045), + (14699, 53008, 'kill_tiered_heal_barrier', 1045), + (14700, 53009, 'kill_tiered_smite_blobs_p2p', 1045), + (14701, 53019, 'kill_tiered_hammer_smite', 1045), + (14702, 53020, 'kill_tiered_hand_cross_dark', 1045), + (14703, 53021, 'kill_tiered_hand_sparkles_dark', 1045), + (14704, 53031, 'kill_tiered_mental_smite', 1045), + (14705, 53041, 'kill_tiered_engulf_flames', 1045), + (14706, 53042, 'kill_tiered_gavel_pound', 1045), + (14707, 53043, 'kill_tiered_light_cage', 1045), + (14708, 53044, 'kill_tiered_swirly_heal', 1045), + (14709, 53045, 'kill_tiered_swirly_power_heal', 1045), + (14710, 53055, 'kill_trdskl_tinker_fail', 1045), + (14711, 53062, 'kill_fire_build_up', 1045), + (14712, 53072, 'kill_tiered_feather_summon', 1045), + (14713, 53073, 'kill_tiered_phoenix_summon', 1045), + (14714, 53074, 'kill_tiered_run_speed_buff', 1045), + (14715, 53075, 'kill_tiered_spirit_wolf', 1045), + (14716, 53076, 'kill_tiered_wood_root', 1045), + (14717, 53086, 'kill_tiered_bat_summon', 1045), + (14718, 53087, 'kill_tiered_nature_heal', 1045), + (14719, 53097, 'kill_tiered_druid_wheel_base', 1045), + (14720, 53098, 'kill_tiered_fire_slam2', 1045), + (14721, 53099, 'kill_tiered_hand_leaf', 1045), + (14722, 53100, 'kill_tiered_icicle_stab', 1045), + (14723, 53101, 'kill_tiered_leaf_burst', 1045), + (14724, 53102, 'kill_tiered_leaf_gather', 1045), + (14725, 53103, 'kill_tiered_leaf_spin', 1045), + (14726, 53104, 'kill_tiered_rings_shrinking', 1045), + (14727, 53105, 'kill_tiered_swirly_wisps', 1045), + (14728, 53106, 'kill_tiered_wood_spikes', 1045), + (14729, 53114, 'kill_panting_wolf_sound', 1045), + (14730, 53117, 'kill_tiered_hand_leaf_glowing', 1045), + (14731, 53118, 'kill_tiered_leaf_spot_burst', 1045), + (14732, 53119, 'kill_tiered_spin_runed_shield', 1045), + (14733, 53120, 'kill_tiered_spirit_bear', 1045), + (14734, 53121, 'kill_tiered_spirit_lion', 1045), + (14735, 53122, 'kill_wolfbackground_sound', 1045), + (14736, 53132, 'kill_tiered_growing_spores', 1045), + (14737, 53133, 'kill_tiered_healing_grove', 1045), + (14738, 53134, 'kill_tiered_ice_spikes', 1045), + (14739, 53135, 'kill_tiered_sandstorm', 1045), + (14740, 53136, 'kill_tiered_spirit_wolf_summon', 1045), + (14741, 53137, 'kill_tiered_tranquility', 1045), + (14742, 53138, 'kill_tiered_wood_root_grow', 1045), + (14743, 53141, 'kill_belch_fx', 1045), + (14744, 53146, 'kill_design_theer_symbol_blue', 1045), + (14745, 53147, 'kill_design_theer_symbol_green', 1045), + (14746, 53148, 'kill_icicle_stomp', 1045), + (14747, 53150, 'kill_result_hand_drips_blood', 1045), + (14748, 53151, 'kill_result_hand_drips_poison', 1045), + (14749, 53153, 'kill_slime_trail_fx', 1045), + (14750, 53154, 'kill_sound_giant_hill_attack', 1045), + (14751, 53155, 'kill_sound_giant_hill_buff', 1045), + (14752, 53156, 'kill_sound_giant_hill_cast', 1045), + (14753, 53157, 'kill_sound_giant_hill_death', 1045), + (14754, 53158, 'kill_sound_giant_hill_fall', 1045), + (14755, 53159, 'kill_sound_giant_hill_footstep', 1045), + (14756, 53160, 'kill_sound_giant_hill_grunt', 1045), + (14757, 53161, 'kill_sound_giant_hill_idle_cloth', 1045), + (14758, 53162, 'kill_sound_giant_hill_idle_grunt', 1045), + (14759, 53163, 'kill_sound_giant_hill_idle_yawn', 1045), + (14760, 53164, 'kill_sound_giant_hill_movement_cloth', 1045), + (14761, 53165, 'kill_sound_giant_hill_ouch', 1045), + (14762, 53166, 'kill_sound_giant_hill_rising_groan', 1045), + (14763, 53167, 'kill_sound_giant_hill_sit_groan', 1045), + (14764, 53168, 'kill_sound_giant_hill_swim', 1045), + (14765, 53169, 'kill_sound_giant_hill_swim_idle', 1045), + (14766, 53170, 'kill_sound_giant_hill_turn', 1045), + (14767, 53180, 'kill_tiered_brambles', 1045), + (14768, 53181, 'kill_tiered_hand_leaf_dark', 1045), + (14769, 53182, 'kill_tiered_hand_leaves_dark', 1045), + (14770, 53183, 'kill_tiered_leaf_flourish', 1045), + (14771, 53184, 'kill_tiered_lightning_bolt', 1045), + (14772, 53185, 'kill_tiered_snow_tempest', 1045), + (14773, 53186, 'kill_tiered_swarm_p2p', 1045), + (14774, 53196, 'kill_tiered_spirit_cat', 1045), + (14775, 53197, 'kill_tiered_spirit_eel', 1045), + (14776, 53198, 'kill_tiered_starfire', 1045), + (14777, 53199, 'kill_tiered_sun_nova', 1045), + (14778, 53209, 'kill_tiered_fae_swirling', 1045), + (14779, 53210, 'kill_tiered_lightning_fusion', 1045), + (14780, 53211, 'kill_tiered_spirit_cheetah', 1045), + (14781, 53212, 'kill_tiered_spirit_lion_summon', 1045), + (14782, 53213, 'kill_tiered_spirit_tree', 1045), + (14783, 53214, 'kill_tiered_thunder_cloud', 1045), + (14784, 53221, 'kill_design_goblin_launch', 1045), + (14785, 53225, 'kill_transforma', 1045), + (14786, 53226, 'kill_transformb', 1045), + (14787, 53229, 'kill_cast_ice_blastwave', 1045), + (14788, 53232, 'kill_cast_wing_buffet_snow', 1045), + (14789, 53233, 'kill_cast_wing_buffet_wind', 1045), + (14790, 53237, 'kill_result_icy_trap_shatter', 1045), + (14791, 53244, 'kill_design_starburst_blue', 1045), + (14792, 53245, 'kill_design_starburst_green', 1045), + (14793, 53246, 'kill_design_starburst_purple', 1045), + (14794, 53247, 'kill_design_starburst_red', 1045), + (14795, 53248, 'kill_design_starburst_white', 1045), + (14796, 53250, 'kill_kneel', 1045), + (14797, 53251, 'kill_result_shadow_curse', 1045), + (14798, 53261, 'kill_sound_lynx_mount_bare_idle_1', 1045), + (14799, 53262, 'kill_sound_lynx_mount_bare_pant', 1045), + (14800, 53272, 'kill_sound_lynx_purr', 1045), + (14801, 53273, 'kill_sound_vrewwx_attack_roar_3', 1045), + (14802, 53274, 'kill_sound_vrewwx_cast_roar', 1045), + (14803, 53281, 'kill_design_arm_prelaunch', 1045), + (14804, 53283, 'kill_result_repellent_spray', 1045), + (14805, 53284, 'kill_result_repellent_spray_p2p', 1045), + (14806, 53287, 'kill_activate', 1045), + (14807, 53288, 'kill_cast_ice_blast', 1045), + (14808, 53289, 'kill_cast_ice_blast_ring', 1045), + (14809, 53297, 'kill_sound_vrewwx_attack_roar_1', 1045), + (14810, 53298, 'kill_sound_vrewwx_attack_roar_2', 1045), + (14811, 53299, 'kill_sound_vrewwx_idle02_roar', 1045), + (14812, 53309, 'kill_sound_vrewwx_idle1_breathing_2', 1045), + (14813, 53316, 'kill_design_void_energy_pool', 1045), + (14814, 53318, 'kill_result_flower_trail', 1045), + (14815, 53319, 'kill_result_leash_p2p', 1045), + (14816, 53320, 'kill_result_rope_root', 1045), + (14817, 53323, 'kill_cast_pick_axe_throw', 1045), + (14818, 53328, 'kill_design_crystal_drop_impact', 1045), + (14819, 53329, 'kill_design_orc_footprints', 1045), + (14820, 53331, 'kill_result_leash_p2p_static', 1045), + (14821, 53333, 'kill_sitchair', 1045), + (14822, 53335, 'kill_sound_vrewwx_body_fall', 1045), + (14823, 53336, 'kill_trdskl_halas_pick', 1045), + (14824, 53343, 'kill_design_chessboard_collapse_fx', 1045), + (14825, 53344, 'kill_design_chessboard_static_fx', 1045), + (14826, 53345, 'kill_design_druidring_burst_fx', 1045), + (14827, 53346, 'kill_design_druidring_fx', 1045), + (14828, 53347, 'kill_design_harpoon_fire', 1045), + (14829, 53348, 'kill_design_harpoon_load', 1045), + (14830, 53358, 'kill_sound_vrewwx_death', 1045), + (14831, 53359, 'kill_sound_vrewwx_ouch', 1045), + (14832, 53362, 'kill_bellyslide', 1045), + (14833, 53367, 'kill_float_on_back', 1045), + (14834, 53369, 'kill_laugh', 1045), + (14835, 53372, 'kill_sound_vrewwx_buff', 1045), + (14836, 53373, 'kill_sound_vrewwx_chomp', 1045), + (14837, 53383, 'kill_sound_vrewwx_death_fall', 1045), + (14838, 53390, 'kill_design_theer_symbol_blast_circle', 1045), + (14839, 53397, 'kill_fly_ouch_backhand', 1045), + (14840, 53407, 'kill_tiered_heal_ward', 1045), + (14841, 53408, 'kill_tiered_shaman_wheel_base', 1045), + (14842, 53409, 'kill_tiered_spirit_summon', 1045), + (14843, 53410, 'kill_tiered_spirit_swirl_hit', 1045), + (14844, 53418, 'kill_proc_sword_head', 1045), + (14845, 53421, 'kill_tiered_hand_stars', 1045), + (14846, 53422, 'kill_tiered_haze', 1045), + (14847, 53423, 'kill_tiered_head_spirits', 1045), + (14848, 53424, 'kill_tiered_spirit_heal', 1045), + (14849, 53434, 'kill_tiered_heal_flourish', 1045), + (14850, 53435, 'kill_tiered_resurrect_spirits', 1045), + (14851, 53436, 'kill_tiered_spirit_elephant', 1045), + (14852, 53437, 'kill_tiered_spirit_swirl_shield', 1045), + (14853, 53447, 'kill_tiered_echo_rings', 1045), + (14854, 53448, 'kill_tiered_fire', 1045), + (14855, 53449, 'kill_tiered_iceball_p2p', 1045), + (14856, 53450, 'kill_tiered_spirit_tube', 1045), + (14857, 53451, 'kill_tiered_spirits_p2p', 1045), + (14858, 53461, 'kill_tiered_ancestral_summon', 1045), + (14859, 53462, 'kill_tiered_lunar_summon', 1045), + (14860, 53463, 'kill_tiered_spirit_circle_summon', 1045), + (14861, 53464, 'kill_tiered_spirit_growing', 1045), + (14862, 53471, 'kill_fly_jumpsubstitute', 1045), + (14863, 53472, 'kill_fly_turn_left', 1045), + (14864, 53473, 'kill_fly_turn_right', 1045), + (14865, 53474, 'kill_fly_walk', 1045), + (14866, 53476, 'kill_lizard_backup', 1045), + (14867, 53477, 'kill_lizard_fall', 1045), + (14868, 53478, 'kill_lizard_fly_backup', 1045), + (14869, 53479, 'kill_lizard_fly_fall', 1045), + (14870, 53480, 'kill_lizard_fly_idle', 1045), + (14871, 53481, 'kill_lizard_fly_idle01', 1045), + (14872, 53482, 'kill_lizard_fly_jump', 1045), + (14873, 53483, 'kill_lizard_fly_jump_substitute', 1045), + (14874, 53484, 'kill_lizard_fly_run', 1045), + (14875, 53485, 'kill_lizard_fly_turn_left', 1045), + (14876, 53486, 'kill_lizard_fly_turn_right', 1045), + (14877, 53487, 'kill_lizard_fly_walk', 1045), + (14878, 53488, 'kill_lizard_glide', 1045), + (14879, 53489, 'kill_lizard_idle', 1045), + (14880, 53490, 'kill_lizard_idle01', 1045), + (14881, 53491, 'kill_lizard_jump', 1045), + (14882, 53492, 'kill_lizard_jump_substitute', 1045), + (14883, 53493, 'kill_lizard_land', 1045), + (14884, 53494, 'kill_lizard_long_fall', 1045), + (14885, 53495, 'kill_lizard_run', 1045), + (14886, 53496, 'kill_lizard_turn_left', 1045), + (14887, 53497, 'kill_lizard_turn_right', 1045), + (14888, 53498, 'kill_lizard_walk', 1045), + (14889, 53506, 'kill_lizard_fly_dive', 1045), + (14890, 53507, 'kill_lizard_fly_glide', 1045), + (14891, 53508, 'kill_lizard_fly_jumpsubstitute', 1045), + (14892, 53511, 'kill_tiered_bone_tendrils', 1045), + (14893, 53512, 'kill_tiered_crystal_soultap', 1045), + (14894, 53513, 'kill_tiered_dark_swirly_wisps', 1045), + (14895, 53514, 'kill_tiered_deathward', 1045), + (14896, 53515, 'kill_tiered_forced_shader_burst_blend', 1045), + (14897, 53516, 'kill_tiered_hand_stars_dark', 1045), + (14898, 53517, 'kill_tiered_heal_shroud', 1045), + (14899, 53518, 'kill_tiered_poison_spirits_p2p', 1045), + (14900, 53519, 'kill_tiered_rune_debuff_all', 1045), + (14901, 53520, 'kill_tiered_shadow_curse', 1045), + (14902, 53521, 'kill_tiered_shroud', 1045), + (14903, 53529, 'kill_lizard_fly_enter', 1045), + (14904, 53539, 'kill_spark_trail_lf', 1045), + (14905, 53540, 'kill_spark_trail_lr', 1045), + (14906, 53541, 'kill_spark_trail_rf', 1045), + (14907, 53542, 'kill_spark_trail_rr', 1045), + (14908, 53549, 'kill_griffin_backup', 1045), + (14909, 53550, 'kill_griffin_fall', 1045), + (14910, 53551, 'kill_griffin_fly_backup', 1045), + (14911, 53552, 'kill_griffin_fly_dive', 1045), + (14912, 53553, 'kill_griffin_fly_enter', 1045), + (14913, 53554, 'kill_griffin_fly_fall', 1045), + (14914, 53555, 'kill_griffin_fly_glide', 1045), + (14915, 53556, 'kill_griffin_fly_idle', 1045), + (14916, 53557, 'kill_griffin_fly_idle01', 1045), + (14917, 53558, 'kill_griffin_fly_jump', 1045), + (14918, 53559, 'kill_griffin_fly_jumpsubstitute', 1045), + (14919, 53560, 'kill_griffin_fly_run', 1045), + (14920, 53561, 'kill_griffin_fly_turn_left', 1045), + (14921, 53562, 'kill_griffin_fly_turn_right', 1045), + (14922, 53563, 'kill_griffin_fly_walk', 1045), + (14923, 53564, 'kill_griffin_idle01', 1045), + (14924, 53565, 'kill_griffin_jump', 1045), + (14925, 53566, 'kill_griffin_jump_substitute', 1045), + (14926, 53567, 'kill_griffin_land', 1045), + (14927, 53568, 'kill_griffin_long_fall', 1045), + (14928, 53569, 'kill_griffin_turn_left', 1045), + (14929, 53570, 'kill_griffin_turn_right', 1045), + (14930, 53572, 'kill_pegasus_backup', 1045), + (14931, 53573, 'kill_pegasus_fall', 1045), + (14932, 53574, 'kill_pegasus_fly_backup', 1045), + (14933, 53575, 'kill_pegasus_fly_dive', 1045), + (14934, 53576, 'kill_pegasus_fly_enter', 1045), + (14935, 53577, 'kill_pegasus_fly_fall', 1045), + (14936, 53578, 'kill_pegasus_fly_glide', 1045), + (14937, 53579, 'kill_pegasus_fly_idle', 1045), + (14938, 53580, 'kill_pegasus_fly_idle01', 1045), + (14939, 53581, 'kill_pegasus_fly_jump', 1045), + (14940, 53582, 'kill_pegasus_fly_jumpsubstitute', 1045), + (14941, 53583, 'kill_pegasus_fly_run', 1045), + (14942, 53584, 'kill_pegasus_fly_turn_left', 1045), + (14943, 53585, 'kill_pegasus_fly_turn_right', 1045), + (14944, 53586, 'kill_pegasus_fly_walk', 1045), + (14945, 53587, 'kill_pegasus_idle01', 1045), + (14946, 53588, 'kill_pegasus_jump', 1045), + (14947, 53589, 'kill_pegasus_jump_substitute', 1045), + (14948, 53590, 'kill_pegasus_land', 1045), + (14949, 53591, 'kill_pegasus_long_fall', 1045), + (14950, 53592, 'kill_pegasus_turn_left', 1045), + (14951, 53593, 'kill_pegasus_turn_right', 1045), + (14952, 53601, 'kill_result_weapon_trail_music', 1096), + (14953, 53604, 'kill_tiered_bard_baton', 1096), + (14954, 53605, 'kill_tiered_bard_drum', 1096), + (14955, 53606, 'kill_tiered_bard_flute', 1096), + (14956, 53607, 'kill_tiered_bard_guitar', 1096), + (14957, 53608, 'kill_tiered_bard_horn', 1096), + (14958, 53609, 'kill_tiered_bard_shroud', 1096), + (14959, 53610, 'kill_tiered_bard_wheel_base', 1096), + (14960, 53611, 'kill_tiered_clanging_notes', 1096), + (14961, 53612, 'kill_tiered_coin_toss', 1096), + (14962, 53613, 'kill_tiered_dancing_blades', 1096), + (14963, 53614, 'kill_tiered_hand_notes', 1096), + (14964, 53615, 'kill_tiered_hand_spin_notes', 1096), + (14965, 53616, 'kill_tiered_jester_cap_toss_p2p', 1096), + (14966, 53617, 'kill_tiered_music_ball_p2p', 1096), + (14967, 53618, 'kill_tiered_music_band', 1096), + (14968, 53619, 'kill_tiered_music_beam_p2p', 1096), + (14969, 53620, 'kill_tiered_music_blast_ball', 1096), + (14970, 53621, 'kill_tiered_music_bubble', 1096), + (14971, 53622, 'kill_tiered_music_swirls', 1096), + (14972, 53623, 'kill_tiered_music_wave_p2p', 1096), + (14973, 53624, 'kill_tiered_notes_blast', 1096), + (14974, 53625, 'kill_tiered_notes_burst', 1096), + (14975, 53626, 'kill_tiered_notes_confetti', 1096), + (14976, 53627, 'kill_tiered_notes_head', 1096), + (14977, 53628, 'kill_tiered_notes_out_blast', 1096), + (14978, 53629, 'kill_tiered_notes_out_song', 1096), + (14979, 53630, 'kill_tiered_notes_shield', 1096), + (14980, 53631, 'kill_tiered_notes_spiral_frenzy', 1096), + (14981, 53632, 'kill_tiered_notes_up_song', 1096), + (14982, 53633, 'kill_tiered_slashing_blade', 1096), + (14983, 53634, 'kill_tiered_sound_rings_head', 1096), + (14984, 53635, 'kill_tiered_spark_burst', 1096), + (14985, 53636, 'kill_tiered_stabbing_blades', 1096), + (14986, 53646, 'kill_tiered_notes_swirling_p2p', 1096), + (14987, 53656, 'kill_tiered_bellow', 1096), + (14988, 53657, 'kill_tiered_eyehand_buff', 1096), + (14989, 53658, 'kill_tiered_note_crescent_p2p', 1096), + (14990, 53659, 'kill_tiered_notes_out_song_bellow', 1096), + (14991, 53660, 'kill_tiered_notes_transfer_p2p', 1096), + (14992, 53661, 'kill_tiered_rock_skin_grow', 1096), + (14993, 53662, 'kill_tiered_shaky_notes', 1096), + (14994, 53669, 'kill_griffin_mount_backup', 1096), + (14995, 53670, 'kill_griffin_mount_fall', 1096), + (14996, 53671, 'kill_griffin_mount_fly_backup', 1096), + (14997, 53672, 'kill_griffin_mount_fly_dive', 1096), + (14998, 53673, 'kill_griffin_mount_fly_enter', 1096), + (14999, 53674, 'kill_griffin_mount_fly_fall', 1096), + (15000, 53675, 'kill_griffin_mount_fly_glide', 1096), + (15001, 53676, 'kill_griffin_mount_fly_idle', 1096), + (15002, 53677, 'kill_griffin_mount_fly_idle01', 1096), + (15003, 53678, 'kill_griffin_mount_fly_jump', 1096), + (15004, 53679, 'kill_griffin_mount_fly_jumpsubstitute', 1096), + (15005, 53680, 'kill_griffin_mount_fly_run', 1096), + (15006, 53681, 'kill_griffin_mount_fly_turn_left', 1096), + (15007, 53682, 'kill_griffin_mount_fly_turn_right', 1096), + (15008, 53683, 'kill_griffin_mount_fly_walk', 1096), + (15009, 53684, 'kill_griffin_mount_idle', 1096), + (15010, 53685, 'kill_griffin_mount_idle01', 1096), + (15011, 53686, 'kill_griffin_mount_jump', 1096), + (15012, 53687, 'kill_griffin_mount_jump_substitute', 1096), + (15013, 53688, 'kill_griffin_mount_land', 1096), + (15014, 53689, 'kill_griffin_mount_long_fall', 1096), + (15015, 53690, 'kill_griffin_mount_run', 1096), + (15016, 53691, 'kill_griffin_mount_turn_left', 1096), + (15017, 53692, 'kill_griffin_mount_turn_right', 1096), + (15018, 53693, 'kill_griffin_mount_walk', 1096), + (15019, 53697, 'kill_tiered_arrow_blast', 1096), + (15020, 53698, 'kill_tiered_blood_burst', 1096), + (15021, 53699, 'kill_tiered_fire_arrow_p2p', 1096), + (15022, 53700, 'kill_tiered_harvest_arrows', 1096), + (15023, 53701, 'kill_tiered_lightning_blast_hit', 1096), + (15024, 53702, 'kill_tiered_lightning_spark_burst', 1096), + (15025, 53703, 'kill_tiered_massive_hit', 1096), + (15026, 53704, 'kill_tiered_ranged_buff', 1096), + (15027, 53705, 'kill_tiered_shimmer_arrow_p2p', 1096), + (15028, 53706, 'kill_tiered_slow_arrow_p2p', 1096), + (15029, 53707, 'kill_tiered_sparkle_trail_weapon_blend', 1096), + (15030, 53708, 'kill_tiered_weapon_blood_lust', 1096), + (15031, 53718, 'kill_tiered_arrow', 1096), + (15032, 53719, 'kill_tiered_arrow_storm', 1096), + (15033, 53720, 'kill_tiered_briar_trap', 1096), + (15034, 53721, 'kill_tiered_bullseye', 1096), + (15035, 53722, 'kill_tiered_hawk_summon', 1096), + (15036, 53723, 'kill_tiered_head_arrow_p2p', 1096), + (15037, 53724, 'kill_tiered_redirect_arrow_p2p', 1096), + (15038, 53725, 'kill_tiered_redirection', 1096), + (15039, 53726, 'kill_tiered_shoot_arrow_rain', 1096), + (15040, 53727, 'kill_tiered_triple_arrow_p2p', 1096), + (15041, 53737, 'kill_tiered_ice_comet', 1096), + (15042, 53744, 'kill_griffin_mount_fly_climb', 1096), + (15043, 53745, 'kill_griffin_mount_fly_down', 1096), + (15044, 53746, 'kill_griffin_mount_fly_up', 1096), + (15045, 53750, 'kill_tiered_blades_buff', 1096), + (15046, 53751, 'kill_tiered_damage_persist', 1096), + (15047, 53752, 'kill_tiered_dark_arrow_p2p', 1096), + (15048, 53753, 'kill_tiered_dark_cloud', 1096), + (15049, 53754, 'kill_tiered_death_mark', 1096), + (15050, 53755, 'kill_tiered_deflect_buff', 1096), + (15051, 53756, 'kill_tiered_shoot_daggers', 1096), + (15052, 53757, 'kill_tiered_slashing_daggers', 1096), + (15053, 53767, 'kill_tiered_apply_poison_p2p', 1096), + (15054, 53768, 'kill_tiered_dagger_head', 1096), + (15055, 53769, 'kill_tiered_dark_ring_vanish', 1096), + (15056, 53770, 'kill_tiered_fatal_followup', 1096), + (15057, 53771, 'kill_tiered_hand_plasma', 1096), + (15058, 53772, 'kill_tiered_spin_dagger_blast', 1096), + (15059, 53779, 'kill_griffin_mount_fly_jump_substitute', 1096), + (15060, 53789, 'kill_tiered_blast_tube', 1096), + (15061, 53790, 'kill_tiered_flurry_daggers', 1096), + (15062, 53791, 'kill_tiered_mesmerized', 1096), + (15063, 53792, 'kill_tiered_slash_trail', 1096), + (15064, 53793, 'kill_tiered_snow_dagger_p2p', 1096), + (15065, 53794, 'kill_tiered_spin_shield_buff', 1096), + (15066, 53795, 'kill_tiered_storm_waves', 1096), + (15067, 53796, 'kill_tiered_stream_throw_attack_p2p', 1096), + (15068, 53797, 'kill_tiered_swords_buff', 1096), + (15069, 53798, 'kill_tiered_teeth_glint', 1096), + (15070, 53806, 'kill_result_bind_wound', 1096), + (15071, 53809, 'kill_tiered_blast_trail', 1096), + (15072, 53810, 'kill_tiered_dagger_p2p', 1096), + (15073, 53811, 'kill_tiered_dark_melee_swipe', 1096), + (15074, 53812, 'kill_tiered_poison_forced_shader_weapon', 1096), + (15075, 53813, 'kill_tiered_slash_trail_dark', 1096), + (15076, 53820, 'kill_design_wellspring_bones_toss', 1096), + (15077, 53822, 'kill_result_wellspring_ghosts_attack_p2p', 1096), + (15078, 53832, 'kill_tiered_cone_defensive_buff', 1096), + (15079, 53833, 'kill_tiered_cone_offensive_buff', 1096), + (15080, 53840, 'kill_design_crater_blast', 1096), + (15081, 53841, 'kill_design_fire_area', 1096), + (15082, 53843, 'kill_result_spore_toss_p2p', 1096), + (15083, 53850, 'kill_design_electro_disease_portal', 1096), + (15084, 53851, 'kill_design_lightning_shield', 1096), + (15085, 53852, 'kill_design_summon_disease_portal', 1096), + (15086, 53859, 'kill_design_meteor_impact', 1096), + (15087, 53860, 'kill_design_meteor_target', 1096), + (15088, 53863, 'kill_ball_lightning_bolt_p2p', 1096), + (15089, 53865, 'kill_cast_potion_hand_pattern_heal', 1096), + (15090, 53866, 'kill_cast_potion_hand_sparks', 1096), + (15091, 53867, 'kill_cast_potion_ring_cure', 1096), + (15092, 53869, 'kill_cast_resurrect_swirls', 1096), + (15093, 53873, 'kill_result_fire_engulfed', 1096), + (15094, 53874, 'kill_result_flash_heal', 1096), + (15095, 53877, 'kill_trdskl_vial_left', 1096), + (15096, 53884, 'kill_design_gf_tree_fire', 1096), + (15097, 53885, 'kill_design_gf_tree_fire_big', 1096), + (15098, 53887, 'kill_result_head_flash_sparks', 1096), + (15099, 53890, 'kill_cast_plague_spikes', 1096), + (15100, 53895, 'kill_design_feet_trail_leaves', 1096), + (15101, 53897, 'kill_pbae_cast_blast', 1096), + (15102, 53902, 'kill_cast_summon_elemental_cyclone', 1096), + (15103, 53905, 'kill_design_gf_cleansed_flowers', 1096), + (15104, 53906, 'kill_design_gf_poisoned_vines', 1096), + (15105, 53907, 'kill_design_guk_portal', 1096), + (15106, 53908, 'kill_design_power_blast', 1096), + (15107, 53909, 'kill_design_summon_power', 1096), + (15108, 53910, 'kill_griffin_fly_up', 1096), + (15109, 53913, 'kill_boom_sound', 1096), + (15110, 53919, 'kill_result_guk_axe_attack_p2p', 1096), + (15111, 53920, 'kill_result_guk_axe_stuck', 1096), + (15112, 53921, 'kill_result_snotball_p2p', 1096), + (15113, 53931, 'kill_turkey_cannon_blast', 1096), + (15114, 53932, 'kill_turkey_shoot', 1096), + (15115, 53940, 'kill_lights_baubles', 1096), + (15116, 53941, 'kill_lights_bows', 1096), + (15117, 53949, 'kill_result_book_hover', 1096), + (15118, 53951, 'kill_sound_feeding', 1096), + (15119, 53953, 'kill_zombie_feeding_fx', 1096), + (15120, 53960, 'kill_design_boiling_pool_fx', 1096), + (15121, 53961, 'kill_design_book_blast', 1096), + (15122, 53962, 'kill_design_book_summon', 1096), + (15123, 53963, 'kill_design_icy_shadow_portal', 1096), + (15124, 53965, 'kill_knocktoknees_enter', 1096), + (15125, 53966, 'kill_knocktoknees_idle', 1096), + (15126, 53969, 'kill_cast_mirror_emerge', 1096), + (15127, 53974, 'kill_design_light_column_grow', 1096), + (15128, 53977, 'kill_bite', 1096), + (15129, 53987, 'kill_tiered_bloodlust_swords', 1096), + (15130, 53988, 'kill_tiered_cloud_buff_out', 1096), + (15131, 53989, 'kill_tiered_divine_wave_p2p', 1096), + (15132, 53990, 'kill_tiered_electrified', 1096), + (15133, 53991, 'kill_tiered_rock_blast', 1096), + (15134, 53992, 'kill_tiered_weakness', 1096), + (15135, 53993, 'kill_tiered_whip_dark', 1096), + (15136, 54003, 'kill_tiered_brain_leech_p2p', 1096), + (15137, 54004, 'kill_tiered_dark_vanish', 1096), + (15138, 54005, 'kill_tiered_dark_ward', 1096), + (15139, 54006, 'kill_tiered_icy_cage', 1096), + (15140, 54016, 'kill_tiered_cold_ice_crystals', 1096), + (15141, 54017, 'kill_tiered_icicle_rain', 1096), + (15142, 54018, 'kill_tiered_skull_p2p', 1096), + (15143, 54019, 'kill_tiered_starnova_p2p', 1096), + (15144, 54029, 'kill_tiered_dark_fire', 1096), + (15145, 54030, 'kill_tiered_poison_spore_p2p', 1096), + (15146, 54031, 'kill_tiered_spirit_dragon', 1096), + (15147, 54041, 'kill_tiered_cast_mysticism', 1096), + (15148, 54042, 'kill_tiered_light_ward', 1096), + (15149, 54043, 'kill_tiered_mental_comet', 1096), + (15150, 54044, 'kill_tiered_result_mysticism', 1096), + (15151, 54045, 'kill_tiered_whip_circling', 1096), + (15152, 54055, 'kill_tiered_ice_comet_shower', 1096), + (15153, 54056, 'kill_tiered_sanction_of_merit', 1096), + (15154, 54061, 'kill_combat_art_buff', 1096), + (15155, 54064, 'kill_design_crow_shoulder', 1096), + (15156, 54065, 'kill_design_ghost_wurm_shoulder', 1096), + (15157, 54067, 'kill_result_dark_bubbles_rising', 1096), + (15158, 54075, 'kill_result_candy_stars_rising', 1096), + (15159, 54085, 'kill_wolf_mount_backup', 1096), + (15160, 54086, 'kill_wolf_mount_fall', 1096), + (15161, 54087, 'kill_wolf_mount_idle', 1096), + (15162, 54088, 'kill_wolf_mount_idle01', 1096), + (15163, 54089, 'kill_wolf_mount_jump', 1096), + (15164, 54090, 'kill_wolf_mount_jump_substitute', 1096), + (15165, 54091, 'kill_wolf_mount_land', 1096), + (15166, 54092, 'kill_wolf_mount_long_fall', 1096), + (15167, 54093, 'kill_wolf_mount_run', 1096), + (15168, 54094, 'kill_wolf_mount_turn_left', 1096), + (15169, 54095, 'kill_wolf_mount_turn_right', 1096), + (15170, 54096, 'kill_wolf_mount_walk', 1096), + (15171, 54106, 'kill_tiered_cloud_ring_burst', 1096), + (15172, 54107, 'kill_tiered_ember_sword', 1096), + (15173, 54108, 'kill_tiered_fire_rain', 1096), + (15174, 54109, 'kill_tiered_lightning_bolt_p2p', 1096), + (15175, 54110, 'kill_wolfmount_backup', 1096), + (15176, 54111, 'kill_wolfmount_fall', 1096), + (15177, 54112, 'kill_wolfmount_idle', 1096), + (15178, 54113, 'kill_wolfmount_idle01', 1096), + (15179, 54114, 'kill_wolfmount_jump', 1096), + (15180, 54115, 'kill_wolfmount_jump_substitute', 1096), + (15181, 54116, 'kill_wolfmount_land', 1096), + (15182, 54117, 'kill_wolfmount_long_fall', 1096), + (15183, 54118, 'kill_wolfmount_run', 1096), + (15184, 54119, 'kill_wolfmount_turn_left', 1096), + (15185, 54120, 'kill_wolfmount_turn_right', 1096), + (15186, 54121, 'kill_wolfmount_walk', 1096), + (15187, 54131, 'kill_tiered_hammer_head', 1096), + (15188, 54132, 'kill_tiered_power_fount', 1096), + (15189, 54133, 'kill_tiered_smashing_hammers', 1096), + (15190, 54140, 'kill_ettin_drink', 1096), + (15191, 54144, 'kill_tiered_color_shower', 1096), + (15192, 54145, 'kill_tiered_haste', 1096), + (15193, 54155, 'kill_tiered_bat_swarm_appear', 1096), + (15194, 54156, 'kill_tiered_ember_shield', 1096), + (15195, 54164, 'kill_result_paper_toss_p2p', 1096), + (15196, 54174, 'kill_tiered_jesters_cap', 1096), + (15197, 54182, 'kill_persist_notes_dirge', 1096), + (15198, 54183, 'kill_persist_notes_troub', 1096), + (15199, 54186, 'kill_sound_wolfmount_bare_pant', 1096), + (15200, 54187, 'kill_sound_wolfmount_bare_roar_3', 1096), + (15201, 54188, 'kill_sound_wolfmount_footstep_quiet', 1096), + (15202, 54189, 'kill_sound_wolfmount_idle', 1096), + (15203, 54190, 'kill_sound_wolfmount_jump_substitute', 1096), + (15204, 54191, 'kill_sound_wolfmount_land', 1096), + (15205, 54192, 'kill_tiered_notes_entranced', 1096), + (15206, 54193, 'kill_tiered_poison_notes_wave_p2p', 1096), + (15207, 54200, 'kill_design_vision_plane_map_bell', 1096), + (15208, 54210, 'kill_tiered_rift_crack', 1096), + (15209, 54217, 'kill_design_djinn_pod_cloud', 1096), + (15210, 54219, 'kill_result_water_douse', 1096), + (15211, 54222, 'kill_tiered_lava_column', 1096), + (15212, 54230, 'kill_result_arrow_ridden', 1096), + (15213, 54238, 'kill_result_body_fire', 1096), + (15214, 54239, 'kill_result_body_lightning_purple', 1096), + (15215, 54240, 'kill_result_body_snow', 1096), + (15216, 54242, 'kill_sound_ettin_1h_sword_attack', 1096), + (15217, 54243, 'kill_sound_ettin_1h_sword_attack01', 1096), + (15218, 54244, 'kill_sound_ettin_1h_sword_attack03', 1096), + (15219, 54245, 'kill_sound_ettin_fs', 1096), + (15220, 54246, 'kill_sound_ettin_attack', 1096), + (15221, 54247, 'kill_sound_ettin_attack01', 1096), + (15222, 54248, 'kill_sound_ettin_attack02', 1096), + (15223, 54249, 'kill_sound_ettin_attack03', 1096), + (15224, 54250, 'kill_sound_ettin_attack_throw_boulder', 1096), + (15225, 54251, 'kill_sound_ettin_cast_aoe_beneficial_end', 1096), + (15226, 54252, 'kill_sound_ettin_cast_aoe_beneficial_loop', 1096), + (15227, 54253, 'kill_sound_ettin_cast_aoe_beneficial_start', 1096), + (15228, 54254, 'kill_sound_ettin_cast_aoe_detrimental_end', 1096), + (15229, 54255, 'kill_sound_ettin_cast_aoe_detrimental_loop', 1096), + (15230, 54256, 'kill_sound_ettin_cast_aoe_detrimental_start', 1096), + (15231, 54257, 'kill_sound_ettin_cast_aoe_invocation_end', 1096), + (15232, 54258, 'kill_sound_ettin_cast_aoe_invocation_loop', 1096), + (15233, 54259, 'kill_sound_ettin_cast_aoe_invocation_start', 1096), + (15234, 54260, 'kill_sound_ettin_cast_aoe_wand_end', 1096), + (15235, 54261, 'kill_sound_ettin_cast_aoe_wand_loop', 1096), + (15236, 54262, 'kill_sound_ettin_cast_aoe_wand_start', 1096), + (15237, 54263, 'kill_sound_ettin_cast_summon_end', 1096), + (15238, 54264, 'kill_sound_ettin_cast_summon_loop', 1096), + (15239, 54265, 'kill_sound_ettin_cast_summon_start', 1096), + (15240, 54266, 'kill_sound_ettin_cast_targeted_beneficial_end', 1096), + (15241, 54267, 'kill_sound_ettin_cast_targeted_beneficial_start', 1096), + (15242, 54268, 'kill_sound_ettin_cast_targeted_detrimental_end', 1096), + (15243, 54269, 'kill_sound_ettin_cast_targeted_detrimental_start', 1096), + (15244, 54270, 'kill_sound_ettin_cast_targeted_wand_end', 1096), + (15245, 54271, 'kill_sound_ettin_cast_targeted_wand_loop', 1096), + (15246, 54272, 'kill_sound_ettin_cast_targeted_wand_start', 1096), + (15247, 54273, 'kill_sound_ettin_charge_up', 1096), + (15248, 54274, 'kill_sound_ettin_dodge_backhand', 1096), + (15249, 54275, 'kill_sound_ettin_dodge_forehand', 1096), + (15250, 54276, 'kill_sound_ettin_drink', 1096), + (15251, 54277, 'kill_sound_ettin_dual_wield_attack', 1096), + (15252, 54278, 'kill_sound_ettin_dual_wield_attack01', 1096), + (15253, 54279, 'kill_sound_ettin_dual_wield_attack02', 1096), + (15254, 54280, 'kill_sound_ettin_dual_wield_attack03', 1096), + (15255, 54281, 'kill_sound_ettin_habitat01', 1096), + (15256, 54282, 'kill_sound_ettin_habitat03', 1096), + (15257, 54283, 'kill_sound_ettin_idle01', 1096), + (15258, 54284, 'kill_sound_ettin_idle02', 1096), + (15259, 54285, 'kill_sound_ettin_knockeddowntoknees', 1096), + (15260, 54286, 'kill_sound_ettin_ouch_backhand', 1096), + (15261, 54287, 'kill_sound_ettin_ouch_forehand', 1096), + (15262, 54288, 'kill_sound_ettin_run', 1096), + (15263, 54289, 'kill_sound_ettin_shield_shove', 1096), + (15264, 54290, 'kill_sound_ettin_swim_idle', 1096), + (15265, 54291, 'kill_sound_ettin_walk', 1096), + (15266, 54292, 'kill_sound_ettin_whirling_attack', 1096), + (15267, 54293, 'kill_sound_ettin_wild_swing', 1096), + (15268, 54295, 'kill_sound_idle03', 1096), + (15269, 54296, 'kill_sound_wolfmount_idle01', 1096), + (15270, 54297, 'kill_sound_wolfmount_turn_left', 1096), + (15271, 54298, 'kill_sound_wolfmount_turn_right', 1096), + (15272, 54305, 'kill_fly_attack01', 1096), + (15273, 54306, 'kill_fly_attack02', 1096), + (15274, 54307, 'kill_fly_attack03', 1096), + (15275, 54308, 'kill_fly_death', 1096), + (15276, 54309, 'kill_fly_dodge', 1096), + (15277, 54310, 'kill_fly_ouchbackhand', 1096), + (15278, 54311, 'kill_fly_ouchforehand', 1096), + (15279, 54312, 'kill_fly_ouchthrust', 1096), + (15280, 54313, 'kill_fly_turnleft', 1096), + (15281, 54314, 'kill_fly_turnright', 1096), + (15282, 54316, 'kill_perch', 1096), + (15283, 54323, 'kill_design_book_summon_blue', 1096), + (15284, 54324, 'kill_design_book_summon_red', 1096), + (15285, 54332, 'kill_result_light_flare_p2p', 1096), + (15286, 54337, 'kill_cast_shadow_gather', 1096), + (15287, 54338, 'kill_cast_speed_trail_shadow', 1096), + (15288, 54342, 'kill_removemask_enter', 1096), + (15289, 54343, 'kill_removemask_exit', 1096), + (15290, 54344, 'kill_removemask_idle', 1096), + (15291, 54347, 'kill_attack_cage', 1096), + (15292, 54353, 'kill_result_cage_beam_p2p', 1096), + (15293, 54354, 'kill_result_spell_cage', 1096), + (15294, 54358, 'kill_spell_cage_hit', 1096), + (15295, 54361, 'kill_badger_dig', 1096), + (15296, 54366, 'kill_design_vekascent_lifebringer', 1096), + (15297, 54373, 'kill_design_vekascent_ice_bridge', 1096), + (15298, 54381, 'kill_result_ice_trap_swirls', 1096), + (15299, 54384, 'kill_cast_hot_water_douse', 1096), + (15300, 54393, 'kill_trdskl_pot_large', 1096), + (15301, 54400, 'kill_design_tofs_jail_barrier', 1096), + (15302, 54407, 'kill_design_tofs_water_orb', 1096), + (15303, 54412, 'kill_cast_scream', 1096), + (15304, 54413, 'kill_cast_wing_buffet', 1096), + (15305, 54417, 'kill_result_vines_trap', 1096), + (15306, 54424, 'kill_design_vekfortress_water_blast', 1096), + (15307, 54425, 'kill_design_vekfortress_water_warning', 1096), + (15308, 54426, 'kill_design_vekpools_water_gush', 1096), + (15309, 54427, 'kill_design_vekpools_water_warning', 1096), + (15310, 54434, 'kill_design_velks_breakable_wall', 1096), + (15311, 54435, 'kill_design_velks_breakable_wall_blue', 1096), + (15312, 54437, 'kill_result_ice_spikes_growing', 1096), + (15313, 54438, 'kill_result_zombie_slash', 1096), + (15314, 54442, 'kill_trdskl_meat', 1096), + (15315, 54445, 'kill_bow_attack01', 1096), + (15316, 54446, 'kill_bow_attack02', 1096), + (15317, 54447, 'kill_bow_attack03', 1096), + (15318, 54452, 'kill_exit', 1096), + (15319, 54457, 'kill_untrained_attack01', 1096), + (15320, 54458, 'kill_untrained_attack02', 1096), + (15321, 54459, 'kill_untrained_attack03', 1096), + (15322, 54467, 'kill_persist_cold_book_swarm', 1096), + (15323, 54468, 'kill_result_forced_shader_web', 1096), + (15324, 54469, 'kill_result_halas_runes_spiral', 1096), + (15325, 54470, 'kill_result_healthdrain_p2p', 1096), + (15326, 54477, 'kill_design_vekpools_flower_fx', 1096), + (15327, 54482, 'kill_sound_tse_attack', 1096), + (15328, 54483, 'kill_sound_tse_attack01', 1096), + (15329, 54484, 'kill_sound_tse_attack02', 1096), + (15330, 54485, 'kill_sound_tse_attack03', 1096), + (15331, 54486, 'kill_sound_tse_cast_aoe_beneficial_end', 1096), + (15332, 54487, 'kill_sound_tse_cast_aoe_invocation_end', 1096), + (15333, 54488, 'kill_sound_tse_cast_summon_end', 1096), + (15334, 54489, 'kill_sound_tse_cast_targeted_beneficial_end', 1096), + (15335, 54490, 'kill_sound_tse_cast_targeted_beneficial_loop', 1096), + (15336, 54491, 'kill_sound_tse_cast_targeted_beneficial_start', 1096), + (15337, 54492, 'kill_sound_tse_cast_targeted_detrimental_end', 1096), + (15338, 54493, 'kill_sound_tse_combat_enter', 1096), + (15339, 54494, 'kill_sound_tse_dead_enter', 1096), + (15340, 54495, 'kill_sound_tse_dodge_down', 1096), + (15341, 54496, 'kill_sound_tse_dodge_thrust', 1096), + (15342, 54497, 'kill_sound_tse_fly_attack', 1096), + (15343, 54498, 'kill_sound_tse_fly_attack01', 1096), + (15344, 54499, 'kill_sound_tse_fly_attack02', 1096), + (15345, 54500, 'kill_sound_tse_fly_attack03', 1096), + (15346, 54501, 'kill_sound_tse_fly_cast_targeted_beneficial_end', 1096), + (15347, 54502, 'kill_sound_tse_fly_cast_targeted_beneficial_loop', 1096), + (15348, 54503, 'kill_sound_tse_fly_cast_targeted_beneficial_start', 1096), + (15349, 54504, 'kill_sound_tse_fly_cast_targeted_detrimental_end', 1096), + (15350, 54505, 'kill_sound_tse_fly_idle', 1096), + (15351, 54506, 'kill_sound_tse_fly_offensive_buff', 1096), + (15352, 54507, 'kill_sound_tse_knockeddowntoknees', 1096), + (15353, 54508, 'kill_sound_tse_offensive_buff', 1096), + (15354, 54509, 'kill_sound_tse_ouch', 1096), + (15355, 54510, 'kill_sound_tse_ouch_forehand', 1096), + (15356, 54511, 'kill_sound_tse_ouch_thrust', 1096), + (15357, 54512, 'kill_sound_tse_whirling_attack', 1096), + (15358, 54513, 'kill_sound_tse_wild_swing', 1096), + (15359, 54520, 'kill_design_sullon_zek_containment', 1096), + (15360, 54522, 'kill_result_ice_melt', 1096), + (15361, 54526, 'kill_sound_hland_griffin_attack01', 1096), + (15362, 54527, 'kill_sound_hland_griffin_attack02', 1096), + (15363, 54528, 'kill_sound_hland_griffin_attack03', 1096), + (15364, 54529, 'kill_sound_hland_griffin_combat_enter', 1096), + (15365, 54530, 'kill_sound_hland_griffin_dead_enter', 1096), + (15366, 54531, 'kill_sound_hland_griffin_dodge_backhand', 1096), + (15367, 54532, 'kill_sound_hland_griffin_dodge_down', 1096), + (15368, 54533, 'kill_sound_hland_griffin_dodge_forehand', 1096), + (15369, 54534, 'kill_sound_hland_griffin_dodge_thrust', 1096), + (15370, 54535, 'kill_sound_hland_griffin_idle01', 1096), + (15371, 54536, 'kill_sound_hland_griffin_ouch', 1096), + (15372, 54537, 'kill_sound_hland_griffin_ouch_thrust', 1096), + (15373, 54538, 'kill_sound_hland_griffin_swim_walk', 1096), + (15374, 54539, 'kill_sound_hland_griffin_whirling_attack', 1096), + (15375, 54540, 'kill_sound_hland_griffin_wildswing', 1096), + (15376, 54541, 'kill_sound_othmir_m_1h_sword_attack', 1096), + (15377, 54542, 'kill_sound_othmir_m_1h_sword_attack01', 1096), + (15378, 54543, 'kill_sound_othmir_m_1h_sword_attack02', 1096), + (15379, 54544, 'kill_sound_othmir_m_1h_sword_attack03', 1096), + (15380, 54545, 'kill_sound_othmir_m_attack', 1096), + (15381, 54546, 'kill_sound_othmir_m_attack01', 1096), + (15382, 54547, 'kill_sound_othmir_m_attack02', 1096), + (15383, 54548, 'kill_sound_othmir_m_attack03', 1096), + (15384, 54549, 'kill_sound_othmir_m_bow_attack', 1096), + (15385, 54550, 'kill_sound_othmir_m_cast_targeted_beneficial_end', 1096), + (15386, 54551, 'kill_sound_othmir_m_cast_targeted_beneficial_loop', 1096), + (15387, 54552, 'kill_sound_othmir_m_cast_targeted_beneficial_start', 1096), + (15388, 54553, 'kill_sound_othmir_m_charge_up', 1096), + (15389, 54554, 'kill_sound_othmir_m_combat_idle', 1096), + (15390, 54555, 'kill_sound_othmir_m_dance', 1096), + (15391, 54556, 'kill_sound_othmir_m_dead_enter', 1096), + (15392, 54557, 'kill_sound_othmir_m_dual_wield_attack', 1096), + (15393, 54558, 'kill_sound_othmir_m_dual_wield_attack01', 1096), + (15394, 54559, 'kill_sound_othmir_m_dual_wield_attack02', 1096), + (15395, 54560, 'kill_sound_othmir_m_dual_wield_attack03', 1096), + (15396, 54561, 'kill_sound_othmir_m_idle02', 1096), + (15397, 54562, 'kill_sound_othmir_m_offensive_buff', 1096), + (15398, 54563, 'kill_sound_othmir_m_shield_shove', 1096), + (15399, 54564, 'kill_sound_othmir_m_swim_idle', 1096), + (15400, 54565, 'kill_sound_othmir_m_swim_run', 1096), + (15401, 54566, 'kill_sound_othmir_m_swim_walk', 1096), + (15402, 54567, 'kill_sound_othmir_m_whirling_attack', 1096), + (15403, 54568, 'kill_sound_othmir_m_wild_swing', 1096), + (15404, 54569, 'kill_writhe_idle', 1096), + (15405, 54577, 'kill_result_ice_shatter', 1096), + (15406, 54578, 'kill_result_seafoam_dissolve', 1096), + (15407, 54581, 'kill_cast_enraged_flames', 1096), + (15408, 54587, 'kill_result_hammer_shower', 1096), + (15409, 54591, 'kill_sound_othmir_f_1h_sword_attack', 1096), + (15410, 54592, 'kill_sound_othmir_f_1h_sword_attack01', 1096), + (15411, 54593, 'kill_sound_othmir_f_1h_sword_attack02', 1096), + (15412, 54594, 'kill_sound_othmir_f_1h_sword_attack03', 1096), + (15413, 54595, 'kill_sound_othmir_f_attack', 1096), + (15414, 54596, 'kill_sound_othmir_f_attack01', 1096), + (15415, 54597, 'kill_sound_othmir_f_attack02', 1096), + (15416, 54598, 'kill_sound_othmir_f_attack03', 1096), + (15417, 54599, 'kill_sound_othmir_f_bow_attack', 1096), + (15418, 54600, 'kill_sound_othmir_f_cast_targeted_beneficial_end', 1096), + (15419, 54601, 'kill_sound_othmir_f_cast_targeted_beneficial_start', 1096), + (15420, 54602, 'kill_sound_othmir_f_charge_up', 1096), + (15421, 54603, 'kill_sound_othmir_f_combat_idle', 1096), + (15422, 54604, 'kill_sound_othmir_f_dead_enter', 1096), + (15423, 54605, 'kill_sound_othmir_f_dual_wield_attack', 1096), + (15424, 54606, 'kill_sound_othmir_f_dual_wield_attack01', 1096), + (15425, 54607, 'kill_sound_othmir_f_dual_wield_attack02', 1096), + (15426, 54608, 'kill_sound_othmir_f_dual_wield_attack03', 1096), + (15427, 54609, 'kill_sound_othmir_f_idle02', 1096), + (15428, 54610, 'kill_sound_othmir_f_shield_shove', 1096), + (15429, 54611, 'kill_sound_othmir_f_swim_idle', 1096), + (15430, 54612, 'kill_sound_othmir_f_swim_walk', 1096), + (15431, 54613, 'kill_sound_othmir_f_whirling_attack', 1096), + (15432, 54614, 'kill_sound_othmir_f_wild_swing', 1096), + (15433, 54623, 'kill_sleep_idle', 1096), + (15434, 54626, 'kill_sound_othmir_fs', 1096), + (15435, 54627, 'kill_sound_tse_fs', 1096), + (15436, 54632, 'kill_cast_split_beam_flash', 1096), + (15437, 54633, 'kill_cast_split_copy', 1096), + (15438, 54636, 'kill_cast_elemental_converge', 1096), + (15439, 54641, 'kill_design_elemental_coalescing', 1096), + (15440, 54643, 'kill_result_elemental_drain_p2p', 1096), + (15441, 54646, 'kill_aura_purple', 1096), + (15442, 54647, 'kill_cast_death_beam', 1096), + (15443, 54648, 'kill_cast_heal_ball', 1096), + (15444, 54655, 'kill_sleep_enter', 1096), + (15445, 54656, 'kill_sleep_exit', 1096), + (15446, 54661, 'kill_sound_wolfpup_bf', 1096), + (15447, 54662, 'kill_sound_wolfpup_angry', 1096), + (15448, 54663, 'kill_sound_wolfpup_attack', 1096), + (15449, 54664, 'kill_sound_wolfpup_confused', 1096), + (15450, 54665, 'kill_sound_wolfpup_eat', 1096), + (15451, 54666, 'kill_sound_wolfpup_footstep', 1096), + (15452, 54667, 'kill_sound_wolfpup_hungry', 1096), + (15453, 54668, 'kill_sound_wolfpup_idle01', 1096), + (15454, 54669, 'kill_sound_wolfpup_idle02', 1096), + (15455, 54670, 'kill_sound_wolfpup_ouch', 1096), + (15456, 54671, 'kill_sound_wolfpup_sick', 1096), + (15457, 54672, 'kill_sound_wolfpup_trick', 1096), + (15458, 54678, 'kill_converse01_sit', 1096), + (15459, 54679, 'kill_converse02_sit', 1096), + (15460, 54680, 'kill_converse_sit', 1096), + (15461, 54682, 'kill_design_coldain_prayer_shawl', 1096), + (15462, 54684, 'kill_leap_enter', 1096), + (15463, 54685, 'kill_leap_exit', 1096), + (15464, 54686, 'kill_leap_idle', 1096), + (15465, 54690, 'kill_sound_hland_griffin_fs', 1096), + (15466, 54691, 'kill_sound_hland_griffin_cast_enter', 1096), + (15467, 54692, 'kill_sound_hland_griffin_cast_exit', 1096), + (15468, 54693, 'kill_sound_hland_griffin_charge_up', 1096), + (15469, 54700, 'kill_design_coldain_ring_adamantium', 1096), + (15470, 54701, 'kill_design_coldain_ring_copper', 1096), + (15471, 54702, 'kill_design_coldain_ring_frostreaver', 1096), + (15472, 54703, 'kill_design_coldain_ring_gold', 1096), + (15473, 54704, 'kill_design_coldain_ring_hero', 1096), + (15474, 54705, 'kill_design_coldain_ring_mithril', 1096), + (15475, 54706, 'kill_design_coldain_ring_obsidian', 1096), + (15476, 54707, 'kill_design_coldain_ring_platinum', 1096), + (15477, 54708, 'kill_design_coldain_ring_silver', 1096), + (15478, 54709, 'kill_design_coldain_ring_velium', 1096), + (15479, 54710, 'kill_design_spider_shoulder', 1096), + (15480, 54716, 'kill_sound_hland_griffin_wing_flap_01', 1096), + (15481, 54717, 'kill_sound_hland_griffin_wing_flap_02', 1096), + (15482, 54724, 'kill_dive', 1096), + (15483, 54726, 'kill_result_talon_strike', 1096), + (15484, 54731, 'kill_sound_hland_griffin_wild_swing', 1096), + (15485, 54735, 'kill_whirlingattack', 1096), + (15486, 54738, 'kill_cast_head_souls', 1096), + (15487, 54739, 'kill_cast_head_spikes', 1096), + (15488, 54742, 'kill_cast_tallonite_attacking', 1096), + (15489, 54743, 'kill_cast_tallonite_lash_spin', 1096), + (15490, 54747, 'kill_result_head_spikes', 1096), + (15491, 54755, 'kill_untrained_exit', 1096), + (15492, 54763, 'kill_result_ember_strike', 1096), + (15493, 54764, 'kill_result_ice_vine_trap', 1096), + (15494, 54772, 'kill_untrained_idle01', 1096), + (15495, 54775, 'kill_cast_nipik_spirits', 1096), + (15496, 54778, 'kill_cast_shadow_vortex', 1096), + (15497, 54782, 'kill_result_forced_shader_lichen', 1096), + (15498, 54783, 'kill_result_gnoll_drool', 1096), + (15499, 54797, 'kill_sound_vamp_fs', 1096), + (15500, 54798, 'kill_sound_vamp_f_idle', 1096), + (15501, 54799, 'kill_sound_vamp_f_untrained_attack', 1096), + (15502, 54800, 'kill_sound_vamp_f_untrained_attack01', 1096), + (15503, 54801, 'kill_sound_vamp_f_untrained_attack02', 1096), + (15504, 54802, 'kill_sound_vamp_f_untrained_attack03', 1096), + (15505, 54803, 'kill_sound_vamp_f_untrained_enter', 1096), + (15506, 54804, 'kill_sound_vamp_f_untrained_idle', 1096), + (15507, 54805, 'kill_sound_vamp_f_untrained_idle01', 1096), + (15508, 54806, 'kill_sound_vamp_f_whirling_attack', 1096), + (15509, 54812, 'kill_converse_sit01', 1096), + (15510, 54813, 'kill_converse_sit02', 1096), + (15511, 54815, 'kill_design_velkslab_flame_arch', 1096), + (15512, 54817, 'kill_result_red_glow', 1096), + (15513, 54825, 'kill_sound_vamp_m_untrained_attack', 1096), + (15514, 54826, 'kill_sound_vamp_m_untrained_attack01', 1096), + (15515, 54827, 'kill_sound_vamp_m_untrained_attack02', 1096), + (15516, 54828, 'kill_sound_vamp_m_untrained_attack03', 1096), + (15517, 54829, 'kill_sound_vamp_m_untrained_enter', 1096), + (15518, 54830, 'kill_sound_vamp_m_untrained_idle01', 1096), + (15519, 54831, 'kill_sound_vamp_m_whirling_attack', 1096), + (15520, 54833, 'kill_talking_idle', 1096), + (15521, 54840, 'kill_griffin_mount_fly_glide_left', 1096), + (15522, 54841, 'kill_griffin_mount_fly_glide_right', 1096), + (15523, 54844, 'kill_cast_foot_crush_stomp', 1096), + (15524, 54845, 'kill_cast_kromzek_strike', 1096), + (15525, 54848, 'kill_cast_targeted_beneficial_idle', 1096), + (15526, 54849, 'kill_cast_thunder_clap', 1096), + (15527, 54857, 'kill_pugilist_idle01', 1096), + (15528, 54860, 'kill_cast_aa_column_heal_blast', 1096), + (15529, 54861, 'kill_cast_aa_heal_bars', 1096), + (15530, 54866, 'kill_design_bat_appear', 1096), + (15531, 54867, 'kill_design_bat_vanish', 1096), + (15532, 54868, 'kill_hover_exit', 1096), + (15533, 54878, 'kill_untrained_slash', 1096), + (15534, 54879, 'kill_untrained_slash1', 1096), + (15535, 54880, 'kill_untrained_slash2', 1096), + (15536, 54881, 'kill_untrained_slash3', 1096), + (15537, 54888, 'kill_griffin_mount_fly_strafe_left', 1096), + (15538, 54889, 'kill_griffin_mount_fly_strafe_right', 1096), + (15539, 54891, 'kill_pugilist_idle02', 1096), + (15540, 54892, 'kill_result_aa_lightning_debuff', 1096), + (15541, 54893, 'kill_result_aa_ward_column_blast', 1096), + (15542, 54901, 'kill_kd_barrel_idle', 1096), + (15543, 54902, 'kill_kd_barrel_roll_enter', 1096), + (15544, 54903, 'kill_kd_barrel_roll_idle', 1096), + (15545, 54911, 'kill_sound_vamp_f_pugilist_idle02', 1096), + (15546, 54912, 'kill_sound_vamp_m_pugilist_idle02', 1096), + (15547, 54917, 'kill_cast_spirit_hands', 1096), + (15548, 54918, 'kill_cast_spirit_sands', 1096), + (15549, 54919, 'kill_cast_spirit_shell_buff', 1096), + (15550, 54922, 'kill_eat_idle', 1096), + (15551, 54924, 'kill_result_ice_trap_dark', 1096), + (15552, 54925, 'kill_result_small_net', 1096), + (15553, 54927, 'kill_sniff_idle', 1096), + (15554, 54935, 'kill_trdskl_vel_hammer', 1096), + (15555, 54936, 'kill_walk_sniff', 1096), + (15556, 54943, 'kill_design_bat_smoke_attack', 1096), + (15557, 54944, 'kill_design_seaweed_cluster', 1096), + (15558, 54954, 'kill_vamp_smoke_trail', 1096), + (15559, 54955, 'kill_vampire_attack', 1096), + (15560, 54956, 'kill_vampire_attack01', 1096), + (15561, 54957, 'kill_vampire_attack02', 1096), + (15562, 54958, 'kill_vampire_attack03', 1096), + (15563, 54959, 'kill_vampire_dodge', 1096), + (15564, 54960, 'kill_vampire_dodge01', 1096), + (15565, 54961, 'kill_vampire_dodge02', 1096), + (15566, 54962, 'kill_vampire_enter', 1096), + (15567, 54963, 'kill_vampire_exit', 1096), + (15568, 54964, 'kill_vampire_idle', 1096), + (15569, 54965, 'kill_vampire_idle01', 1096), + (15570, 54966, 'kill_vampire_idle02', 1096), + (15571, 54967, 'kill_vampire_ouch', 1096), + (15572, 54968, 'kill_vampire_ouch01', 1096), + (15573, 54969, 'kill_vampire_parry', 1096), + (15574, 54970, 'kill_vampire_recoil', 1096), + (15575, 54971, 'kill_vampire_whirling_attack', 1096), + (15576, 54979, 'kill_result_rock_crystal_cyclone', 1096), + (15577, 54988, 'kill_vamp_grab_slash', 1096), + (15578, 54991, 'kill_cast_cold_breath', 1096), + (15579, 54992, 'kill_cast_inhale_breath', 1096), + (15580, 54993, 'kill_cast_lightning_burst', 1096), + (15581, 54994, 'kill_cast_lightning_wings', 1096), + (15582, 55008, 'kill_vampire_nofx_attack', 1096), + (15583, 55009, 'kill_vampire_nofx_attack01', 1096), + (15584, 55010, 'kill_vampire_nofx_attack02', 1096), + (15585, 55011, 'kill_vampire_nofx_attack03', 1096), + (15586, 55012, 'kill_vampire_nofx_dodge', 1096), + (15587, 55013, 'kill_vampire_nofx_dodge01', 1096), + (15588, 55014, 'kill_vampire_nofx_dodge02', 1096), + (15589, 55015, 'kill_vampire_nofx_enter', 1096), + (15590, 55016, 'kill_vampire_nofx_exit', 1096), + (15591, 55017, 'kill_vampire_nofx_idle', 1096), + (15592, 55018, 'kill_vampire_nofx_idle01', 1096), + (15593, 55019, 'kill_vampire_nofx_idle02', 1096), + (15594, 55020, 'kill_vampire_nofx_ouch', 1096), + (15595, 55021, 'kill_vampire_nofx_ouch01', 1096), + (15596, 55022, 'kill_vampire_nofx_parry', 1096), + (15597, 55023, 'kill_vampire_nofx_recoil', 1096), + (15598, 55024, 'kill_vampire_nofx_whirling_attack', 1096), + (15599, 55025, 'kill_vampire_whirling_nofx_attack', 1096), + (15600, 55032, 'kill_design_seaweed_cluster_down', 1096), + (15601, 55034, 'kill_result_object_sparkles_white_down', 1096), + (15602, 55037, 'kill_barrel_blast_snd', 1096), + (15603, 55041, 'kill_crate_break_snd', 1096), + (15604, 55043, 'kill_design_rock_door_collapse', 1096), + (15605, 55044, 'kill_design_vine_door_grow', 1096), + (15606, 55045, 'kill_impact_snd', 1096), + (15607, 55047, 'kill_result_barrel_explode', 1096), + (15608, 55048, 'kill_result_crate_explode', 1096), + (15609, 55049, 'kill_result_heat_shimmer_dots', 1096), + (15610, 55050, 'kill_result_musk_spray_p2p', 1096), + (15611, 55051, 'kill_result_musky_object', 1096), + (15612, 55060, 'kill_vamp_smoke_burst', 1096), + (15613, 55068, 'kill_run_temp', 1096), + (15614, 55077, 'kill_walk_temp', 1096), + (15615, 55084, 'kill_design_hawk_release', 1096), + (15616, 55085, 'kill_fx_splash_out', 1096), + (15617, 55086, 'kill_fx_splash_up', 1096), + (15618, 55088, 'kill_result_hawk_circling', 1096), + (15619, 55095, 'kill_design_lava', 1096), + (15620, 55109, 'kill_sound_tse_rx_attack', 1096), + (15621, 55110, 'kill_sound_tse_rx_buff', 1096), + (15622, 55111, 'kill_sound_tse_rx_hit', 1096), + (15623, 55112, 'kill_sound_tse_fly_rx_attack', 1096), + (15624, 55120, 'kill_knockedtoback_idle', 1096), + (15625, 55129, 'kill_sound_carac_crying', 1096), + (15626, 55132, 'kill_admire', 1096), + (15627, 55137, 'kill_griffin_mount_idle02', 1096), + (15628, 55145, 'kill_measure', 1096), + (15629, 55147, 'kill_snd_lich_attack', 1096), + (15630, 55148, 'kill_snd_lich_attack01', 1096), + (15631, 55149, 'kill_snd_lich_attack02', 1096), + (15632, 55150, 'kill_snd_lich_attack03', 1096), + (15633, 55151, 'kill_snd_lich_bride_idle_lp', 1096), + (15634, 55152, 'kill_snd_lich_combat_enter', 1096), + (15635, 55153, 'kill_snd_lich_ouch', 1096), + (15636, 55154, 'kill_snd_lich_whirling_attack', 1096), + (15637, 55155, 'kill_snd_lich_wild_swing', 1096), + (15638, 55158, 'kill_sound_griffin_mount_idle01', 1096), + (15639, 55168, 'kill_worship_idle', 1096), + (15640, 55171, 'kill_cast_bone_toss', 1096), + (15641, 55175, 'kill_count', 1096), + (15642, 55177, 'kill_design_vel_cannon_fire', 1096), + (15643, 55192, 'kill_trdskl_bone', 1096), + (15644, 55199, 'kill_design_light_beam_fx', 1096), + (15645, 55200, 'kill_design_tofs_portal_base_fx', 1096), + (15646, 55205, 'kill_cast_sacrifice_blast', 1096), + (15647, 55208, 'kill_design_fire_big', 1096), + (15648, 55209, 'kill_design_fire_green', 1096), + (15649, 55210, 'kill_design_fire_small', 1096), + (15650, 55212, 'kill_result_mark_of_doom', 1096), + (15651, 55217, 'kill_cast_rallos_zek_superbuff', 1096), + (15652, 55220, 'kill_design_blue_fire_wall', 1096), + (15653, 55221, 'kill_design_red_fire_wall', 1096), + (15654, 55224, 'kill_sit_throne_idle', 1096), + (15655, 55232, 'kill_result_giant_icicle_drop', 1096), + (15656, 55233, 'kill_result_giant_spear_p2p', 1096), + (15657, 55236, 'kill_cast_hammer_hands', 1096), + (15658, 55255, 'kill_trdskl_ice_wand', 1096), + (15659, 55262, 'kill_design_massive_rock_impact', 1096), + (15660, 55264, 'kill_persist_blue_tagged', 1096), + (15661, 55265, 'kill_persist_red_tagged', 1096), + (15662, 55266, 'kill_result_indestructible', 1096), + (15663, 55267, 'kill_result_invincible', 1096), + (15664, 55268, 'kill_result_statue_beam_p2p', 1096), + (15665, 55271, 'kill_amaze', 1096), + (15666, 55276, 'kill_design_zek_helm_fire', 1096), + (15667, 55277, 'kill_grin', 1096), + (15668, 55278, 'kill_growl', 1096), + (15669, 55280, 'kill_mourn', 1096), + (15670, 55281, 'kill_puzzle', 1096), + (15671, 55282, 'kill_roar', 1096), + (15672, 55289, 'kill_design_distort_face', 1096), + (15673, 55290, 'kill_design_kd_rage_portal', 1096), + (15674, 55293, 'kill_cast_aa_ancestor_swirls', 1096), + (15675, 55294, 'kill_cast_aa_spiritfire_blast', 1096), + (15676, 55295, 'kill_cast_aa_spiritfire_swirls', 1096), + (15677, 55301, 'kill_result_aa_pulsing_ward', 1096), + (15678, 55302, 'kill_result_aa_totem_blast', 1096), + (15679, 55309, 'kill_gathering_find', 1096), + (15680, 55310, 'kill_griffin_mount_launch', 1096), + (15681, 55312, 'kill_result_aa_cold_mesh_grow', 1096), + (15682, 55313, 'kill_result_aa_crush_blast', 1096), + (15683, 55314, 'kill_result_aa_focus_spark', 1096), + (15684, 55315, 'kill_result_aa_manawall', 1096), + (15685, 55316, 'kill_result_aa_mesh_grow', 1096), + (15686, 55317, 'kill_result_aa_shadow_blob_p2p', 1096), + (15687, 55318, 'kill_result_aa_swap_hate', 1096), + (15688, 55321, 'kill_applaud', 1096), + (15689, 55324, 'kill_clap', 1096), + (15690, 55327, 'kill_cast_aa_lightning_cleave_blast', 1096), + (15691, 55328, 'kill_cast_aa_riposte', 1096), + (15692, 55329, 'kill_cast_aa_shield_bars', 1096), + (15693, 55332, 'kill_cast_aa_deflecting_daggers', 1096), + (15694, 55338, 'kill_result_aa_slash_hit', 1096), + (15695, 55339, 'kill_result_aa_watchful_eyes', 1096), + (15696, 55342, 'kill_cast_aa_music_ring_blast', 1096), + (15697, 55343, 'kill_cast_aa_notes_spiral', 1096), + (15698, 55349, 'kill_result_aa_note_dagger_p2p', 1096), + (15699, 55352, 'kill_carpet_fly_backup', 1096), + (15700, 55353, 'kill_carpet_fly_climb', 1096), + (15701, 55354, 'kill_carpet_fly_dive', 1096), + (15702, 55355, 'kill_carpet_fly_glide', 1096), + (15703, 55356, 'kill_carpet_fly_glide_left', 1096), + (15704, 55357, 'kill_carpet_fly_glide_right', 1096), + (15705, 55358, 'kill_carpet_fly_idle', 1096), + (15706, 55359, 'kill_carpet_fly_run', 1096), + (15707, 55360, 'kill_carpet_fly_strafe_left', 1096), + (15708, 55361, 'kill_carpet_fly_strafe_right', 1096), + (15709, 55362, 'kill_carpet_fly_turn_left', 1096), + (15710, 55363, 'kill_carpet_fly_turn_right', 1096), + (15711, 55364, 'kill_carpet_fly_up', 1096), + (15712, 55365, 'kill_carpet_fly_walk', 1096), + (15713, 55368, 'kill_carpet_fly_down', 1096), + (15714, 55371, 'kill_conjure', 1096), + (15715, 55372, 'kill_conjure_enter', 1096), + (15716, 55373, 'kill_conjure_exit', 1096), + (15717, 55377, 'kill_pray', 1096), + (15718, 55382, 'kill_climb', 1096), + (15719, 55385, 'kill_design_prexus_water_pillar', 1096), + (15720, 55389, 'kill_snd_twolf_attack', 1096), + (15721, 55390, 'kill_snd_twolf_attack_01', 1096), + (15722, 55391, 'kill_snd_twolf_attack_02', 1096), + (15723, 55392, 'kill_snd_twolf_attack_03', 1096), + (15724, 55393, 'kill_snd_twolf_attk', 1096), + (15725, 55394, 'kill_snd_twolf_attk_01', 1096), + (15726, 55395, 'kill_snd_twolf_attk_02', 1096), + (15727, 55396, 'kill_snd_twolf_cast_loop', 1096), + (15728, 55397, 'kill_snd_twolf_charge_up', 1096), + (15729, 55398, 'kill_snd_twolf_death', 1096), + (15730, 55399, 'kill_snd_twolf_dodge_back', 1096), + (15731, 55400, 'kill_snd_twolf_dodge_down', 1096), + (15732, 55401, 'kill_snd_twolf_dodge_fore', 1096), + (15733, 55402, 'kill_snd_twolf_dodge_thrust', 1096), + (15734, 55403, 'kill_snd_twolf_eat_idle', 1096), + (15735, 55404, 'kill_snd_twolf_habitat01', 1096), + (15736, 55405, 'kill_snd_twolf_habitat02', 1096), + (15737, 55406, 'kill_snd_twolf_idle_01', 1096), + (15738, 55407, 'kill_snd_twolf_idle_02', 1096), + (15739, 55408, 'kill_snd_twolf_ouch', 1096), + (15740, 55409, 'kill_snd_twolf_ouch_knockknees', 1096), + (15741, 55410, 'kill_snd_twolf_ouch_thrust', 1096), + (15742, 55411, 'kill_snd_twolf_sniff_idle', 1096), + (15743, 55412, 'kill_snd_twolf_walk_sniff', 1096), + (15744, 55413, 'kill_snd_twolf_whirl', 1096), + (15745, 55414, 'kill_snd_twolf_wildswing', 1096), + (15746, 55417, 'kill_cast_aa_magic_overflow', 1096), + (15747, 55418, 'kill_cast_aa_manasoul', 1096), + (15748, 55419, 'kill_cast_aa_mystic_field', 1096), + (15749, 55420, 'kill_cast_aa_self_lifetap', 1096), + (15750, 55426, 'kill_look', 1096), + (15751, 55427, 'kill_result_aa_lightning_clash', 1096), + (15752, 55428, 'kill_result_aa_power_convert', 1096), + (15753, 55429, 'kill_result_aa_protection_ward', 1096), + (15754, 55430, 'kill_result_aa_soul_burn', 1096), + (15755, 55437, 'kill_design_fortress_docks_bluefire', 1096), + (15756, 55438, 'kill_design_table_explode', 1096), + (15757, 55453, 'kill_trdskl_cane', 1096), + (15758, 55454, 'kill_trdskl_cane_sit', 1096), + (15759, 55461, 'kill_design_blood_dervish', 1096), + (15760, 55462, 'kill_design_blood_fountain_blast', 1096), + (15761, 55463, 'kill_design_blood_fountain_fx', 1096), + (15762, 55464, 'kill_design_electric_barrier', 1096), + (15763, 55465, 'kill_design_lightning_floor', 1096), + (15764, 55467, 'kill_result_retaliation', 1096), + (15765, 55468, 'kill_result_zek_divine', 1096), + (15766, 55469, 'kill_result_zek_elemental', 1096), + (15767, 55470, 'kill_result_zek_noxious', 1096), + (15768, 55479, 'kill_snd_gnm_racemnt_idle_01', 1096), + (15769, 55480, 'kill_snd_gnm_racemnt_run_01', 1096), + (15770, 55481, 'kill_snd_gnm_racemnt_walk_01', 1096), + (15771, 55502, 'kill_temp_idle01', 1096), + (15772, 55503, 'kill_temp_idle02', 1096), + (15773, 55504, 'kill_temp_idle03', 1096), + (15774, 55517, 'kill_sound_hland_griffin_mount_fly_dive', 1096), + (15775, 55524, 'kill_design_mount_explode', 1096), + (15776, 55525, 'kill_design_speed_boost_buff', 1096), + (15777, 55526, 'kill_design_speed_drop_twister_debuff', 1096), + (15778, 55527, 'kill_design_timestop_buff', 1096), + (15779, 55528, 'kill_design_twister_blaster_buff', 1096), + (15780, 55531, 'kill_snd_gnomerace_ringwhoosh', 1096), + (15781, 55534, 'kill_cast_aa_blast_tube', 1096), + (15782, 55540, 'kill_result_aa_fire_comet', 1096), + (15783, 55541, 'kill_result_aa_taunt', 1096), + (15784, 55546, 'kill_cast_yelinak_ice_breath', 1096), + (15785, 55551, 'kill_sit_chair', 1096), + (15786, 55564, 'kill_spin_it', 1096), + (15787, 55567, 'kill_cast_aa_whip_circling', 1096), + (15788, 55574, 'kill_design_dark_ice_wall', 1096), + (15789, 55576, 'kill_knockedtoback_enter', 1096), + (15790, 55577, 'kill_knockedtoback_exit', 1096), + (15791, 55584, 'kill_design_aqua_crystals_fall', 1096), + (15792, 55585, 'kill_design_crysal_wall', 1096), + (15793, 55586, 'kill_design_crystal_wall', 1096), + (15794, 55587, 'kill_design_green_crystals_fall', 1096), + (15795, 55588, 'kill_design_purple_crystals_fall', 1096), + (15796, 55603, 'kill_wall_destroy', 1096), + (15797, 55611, 'kill_result_mug_hit', 1096), + (15798, 55625, 'kill_trdskl_mug_r', 1096), + (15799, 55632, 'kill_horse_fly_backup', 1096), + (15800, 55633, 'kill_horse_fly_climb', 1096), + (15801, 55634, 'kill_horse_fly_dive', 1096), + (15802, 55635, 'kill_horse_fly_glide', 1096), + (15803, 55636, 'kill_horse_fly_glide_left', 1096), + (15804, 55637, 'kill_horse_fly_glide_right', 1096), + (15805, 55638, 'kill_horse_fly_idle', 1096), + (15806, 55639, 'kill_horse_fly_run', 1096), + (15807, 55640, 'kill_horse_fly_strafe_left', 1096), + (15808, 55641, 'kill_horse_fly_strafe_right', 1096), + (15809, 55642, 'kill_horse_fly_turn_left', 1096), + (15810, 55643, 'kill_horse_fly_turn_right', 1096), + (15811, 55644, 'kill_horse_fly_up', 1096), + (15812, 55645, 'kill_horse_fly_walk', 1096), + (15813, 55647, 'kill_result_ice_strike', 1096), + (15814, 55655, 'kill_lose_spin', 1096), + (15815, 55656, 'kill_pegasus_mount_backup', 1096), + (15816, 55657, 'kill_pegasus_mount_fall', 1096), + (15817, 55658, 'kill_pegasus_mount_fly_backup', 1096), + (15818, 55659, 'kill_pegasus_mount_fly_climb', 1096), + (15819, 55660, 'kill_pegasus_mount_fly_dive', 1096), + (15820, 55661, 'kill_pegasus_mount_fly_down', 1096), + (15821, 55662, 'kill_pegasus_mount_fly_glide', 1096), + (15822, 55663, 'kill_pegasus_mount_fly_glide_left', 1096), + (15823, 55664, 'kill_pegasus_mount_fly_glide_right', 1096), + (15824, 55665, 'kill_pegasus_mount_fly_idle', 1096), + (15825, 55666, 'kill_pegasus_mount_fly_run', 1096), + (15826, 55667, 'kill_pegasus_mount_fly_strafe_left', 1096), + (15827, 55668, 'kill_pegasus_mount_fly_strafe_right', 1096), + (15828, 55669, 'kill_pegasus_mount_fly_turn_left', 1096), + (15829, 55670, 'kill_pegasus_mount_fly_turn_right', 1096), + (15830, 55671, 'kill_pegasus_mount_fly_up', 1096), + (15831, 55672, 'kill_pegasus_mount_fly_walk', 1096), + (15832, 55673, 'kill_pegasus_mount_idle', 1096), + (15833, 55674, 'kill_pegasus_mount_jump', 1096), + (15834, 55675, 'kill_pegasus_mount_jump_substitute', 1096), + (15835, 55676, 'kill_pegasus_mount_land', 1096), + (15836, 55677, 'kill_pegasus_mount_long_fall', 1096), + (15837, 55678, 'kill_pegasus_mount_run', 1096), + (15838, 55679, 'kill_pegasus_mount_turn_left', 1096), + (15839, 55680, 'kill_pegasus_mount_turn_right', 1096), + (15840, 55681, 'kill_pegasus_mount_walk', 1096), + (15841, 55684, 'kill_sound_coins', 1096), + (15842, 55695, 'kill_sound_win', 1096), + (15843, 55697, 'kill_win_fx', 1096), + (15844, 55698, 'kill_win_spin', 1096), + (15845, 55706, 'kill_roll_it', 1096), + (15846, 55713, 'kill_design_chronoportal_rift', 1096), + (15847, 55723, 'kill_sound_bite_trex', 1096), + (15848, 55724, 'kill_sound_breathe_trex', 1096), + (15849, 55728, 'kill_sound_idle01_trex', 1096), + (15850, 55729, 'kill_sound_idle02_trex', 1096), + (15851, 55730, 'kill_sound_idle_trex', 1096), + (15852, 55731, 'kill_sound_kick_trex', 1096), + (15853, 55733, 'kill_sound_ouch_trex', 1096), + (15854, 55741, 'kill_result_ice_strike_targeted', 1096), + (15855, 55748, 'kill_flame_burst_lh', 1096), + (15856, 55749, 'kill_flame_burst_rh', 1096), + (15857, 55757, 'kill_pegasus_mount_fly_fall', 1096), + (15858, 55767, 'kill_snd_warboar_fs', 1096), + (15859, 55768, 'kill_snd_warboar_attack', 1096), + (15860, 55769, 'kill_snd_warboar_attack01', 1096), + (15861, 55770, 'kill_snd_warboar_attack02', 1096), + (15862, 55771, 'kill_snd_warboar_attack03', 1096), + (15863, 55772, 'kill_snd_warboar_cast_targeted_beneficial_end', 1096), + (15864, 55773, 'kill_snd_warboar_cast_targeted_beneficial_start', 1096), + (15865, 55774, 'kill_snd_warboar_charge_up', 1096), + (15866, 55775, 'kill_snd_warboar_combat_enter', 1096), + (15867, 55776, 'kill_snd_warboar_dead_enter', 1096), + (15868, 55777, 'kill_snd_warboar_dodge_backhand', 1096), + (15869, 55778, 'kill_snd_warboar_dodge_forehand', 1096), + (15870, 55779, 'kill_snd_warboar_dodge_thrust', 1096), + (15871, 55780, 'kill_snd_warboar_idle', 1096), + (15872, 55781, 'kill_snd_warboar_idle01', 1096), + (15873, 55782, 'kill_snd_warboar_idle02', 1096), + (15874, 55783, 'kill_snd_warboar_kick', 1096), + (15875, 55784, 'kill_snd_warboar_knockeddowntoknees_01', 1096), + (15876, 55785, 'kill_snd_warboar_knockeddowntoknees_02', 1096), + (15877, 55786, 'kill_snd_warboar_knockedtoback', 1096), + (15878, 55787, 'kill_snd_warboar_knockedtoback_getup', 1096), + (15879, 55788, 'kill_snd_warboar_ouch', 1096), + (15880, 55789, 'kill_snd_warboar_ouch_backhand', 1096), + (15881, 55790, 'kill_snd_warboar_ouch_forehand', 1096), + (15882, 55791, 'kill_snd_warboar_shield_shove', 1096), + (15883, 55792, 'kill_snd_warboar_swim_walk', 1096), + (15884, 55793, 'kill_snd_warboar_whirling_attack', 1096), + (15885, 55794, 'kill_snd_warboar_wild_swing', 1096), + (15886, 55795, 'kill_snd_warboar_wildswing', 1096), + (15887, 55805, 'kill_snd_tallon_zek_arrow_get', 1096), + (15888, 55806, 'kill_snd_tallon_zek_bow_pull', 1096), + (15889, 55807, 'kill_snd_tallon_zek_bowshot_01', 1096), + (15890, 55808, 'kill_snd_tallon_zek_bowshot_02', 1096), + (15891, 55809, 'kill_snd_tallon_zek_bowshot_03', 1096), + (15892, 55817, 'kill_result_chain_root_simple', 1096), + (15893, 55818, 'kill_result_chain_root_simple_sparkle', 1096), + (15894, 55825, 'kill_design_eastern_wastes_spire_portal', 1096), + (15895, 55826, 'kill_design_gnomish_wormhole', 1096), + (15896, 55827, 'kill_design_gnomish_wormhole_exit', 1096), + (15897, 55834, 'kill_design_spear_drop', 1096), + (15898, 55835, 'kill_design_spear_idle', 1096), + (15899, 55839, 'kill_cast_poison_sands', 1096), + (15900, 55846, 'kill_snd_sullon_attack_rx', 1096), + (15901, 55847, 'kill_snd_sullon_buff_rx', 1096), + (15902, 55848, 'kill_snd_sullon_death_rx', 1096), + (15903, 55849, 'kill_snd_sullon_ouch_rx', 1096), + (15904, 55857, 'kill_persist_notes_green', 1096), + (15905, 55858, 'kill_persist_notes_purple', 1096), + (15906, 55860, 'kill_snd_bodyfall', 1096), + (15907, 55862, 'kill_snd_pegasus_dive_vox', 1096), + (15908, 55863, 'kill_snd_pegasus_wingflap_01', 1096), + (15909, 55864, 'kill_snd_pegasus_wingflap_02', 1096), + (15910, 55869, 'kill_snd_tallon_buff_rx', 1096), + (15911, 55870, 'kill_snd_tallon_death_rx', 1096), + (15912, 55871, 'kill_snd_tallon_ouch_rx', 1096), + (15913, 55872, 'kill_snd_vallon_attack_rx', 1096), + (15914, 55873, 'kill_snd_vallon_buff_rx', 1096), + (15915, 55874, 'kill_snd_vallon_dead_rx', 1096), + (15916, 55875, 'kill_snd_vallon_ouch_rx', 1096), + (15917, 55882, 'kill_fire_trail_fx', 1144), + (15918, 55884, 'kill_listening', 1144), + (15919, 55911, 'kill_talking', 1144), + (15920, 55938, 'kill_sound_terrorbird_mount_bare_pant', 1144), + (15921, 55939, 'kill_sound_terrorbird_mount_footstep_quiet', 1144), + (15922, 55940, 'kill_sound_terrorbird_mount_idle', 1144), + (15923, 55941, 'kill_sound_terrorbird_mount_idle01', 1144), + (15924, 55942, 'kill_sound_terrorbird_mount_jump_substitute', 1144), + (15925, 55943, 'kill_sound_terrorbird_mount_land', 1144), + (15926, 55944, 'kill_sound_terrorbird_mount_turn_left', 1144), + (15927, 55945, 'kill_sound_terrorbird_mount_turn_right', 1144), + (15928, 55953, 'kill_terrorbird_mount', 1144), + (15929, 55954, 'kill_terrorbird_mount_backup', 1144), + (15930, 55955, 'kill_terrorbird_mount_fall', 1144), + (15931, 55956, 'kill_terrorbird_mount_idle', 1144), + (15932, 55957, 'kill_terrorbird_mount_idle01', 1144), + (15933, 55958, 'kill_terrorbird_mount_jump', 1144), + (15934, 55959, 'kill_terrorbird_mount_jump_substitute', 1144), + (15935, 55960, 'kill_terrorbird_mount_land', 1144), + (15936, 55961, 'kill_terrorbird_mount_long_fall', 1144), + (15937, 55962, 'kill_terrorbird_mount_run', 1144), + (15938, 55963, 'kill_terrorbird_mount_turn_left', 1144), + (15939, 55964, 'kill_terrorbird_mount_turn_right', 1144), + (15940, 55965, 'kill_terrorbird_mount_walk', 1144), + (15941, 55972, 'kill_feather_fx', 1144), + (15942, 55975, 'kill_small_feather_fx', 1144), + (15943, 55983, 'kill_komodo_mount_backup', 1144), + (15944, 55984, 'kill_komodo_mount_fall', 1144), + (15945, 55985, 'kill_komodo_mount_idle', 1144), + (15946, 55986, 'kill_komodo_mount_jump', 1144), + (15947, 55987, 'kill_komodo_mount_jump_substitute', 1144), + (15948, 55988, 'kill_komodo_mount_land', 1144), + (15949, 55989, 'kill_komodo_mount_long_fall', 1144), + (15950, 55990, 'kill_komodo_mount_run', 1144), + (15951, 55991, 'kill_komodo_mount_turn_left', 1144), + (15952, 55992, 'kill_komodo_mount_turn_right', 1144), + (15953, 55993, 'kill_komodo_mount_walk', 1144), + (15954, 55994, 'kill_raptor_mount_backup', 1144), + (15955, 55995, 'kill_raptor_mount_fall', 1144), + (15956, 55996, 'kill_raptor_mount_idle', 1144), + (15957, 55997, 'kill_raptor_mount_jump', 1144), + (15958, 55998, 'kill_raptor_mount_jump_substitute', 1144), + (15959, 55999, 'kill_raptor_mount_land', 1144), + (15960, 56000, 'kill_raptor_mount_long_fall', 1144), + (15961, 56001, 'kill_raptor_mount_run', 1144), + (15962, 56002, 'kill_raptor_mount_turn_left', 1144), + (15963, 56003, 'kill_raptor_mount_turn_right', 1144), + (15964, 56004, 'kill_raptor_mount_walk', 1144), + (15965, 56015, 'kill_snd_terrorbird_mount_idle_01', 1144), + (15966, 56016, 'kill_snd_terrorbird_mount_idle_02', 1144), + (15967, 56017, 'kill_snd_terrorbird_mount_idle_03', 1144), + (15968, 56018, 'kill_snd_terrorbird_mount_idle_04', 1144), + (15969, 56019, 'kill_snd_terrorbird_mount_jump_substitute', 1144), + (15970, 56027, 'kill_result_spiritual_vanish', 1144), + (15971, 56038, 'kill_snd_terrorbird_mount_wingflap_01', 1144), + (15972, 56049, 'kill_snd_raptor_mount_idle_01', 1144), + (15973, 56050, 'kill_snd_raptor_mount_idle_02', 1144), + (15974, 56051, 'kill_snd_raptor_mount_idle_03', 1144), + (15975, 56052, 'kill_snd_raptor_mount_idle_04', 1144), + (15976, 56053, 'kill_snd_raptor_mount_jump_substitute', 1144), + (15977, 56054, 'kill_snd_raptor_mount_wingflap_01', 1144), + (15978, 56061, 'kill_design_pow_rocky_uprising', 1144), + (15979, 56069, 'kill_komodo_mount_fly_glide_left', 1144), + (15980, 56070, 'kill_komodo_mount_fly_glide_right', 1144), + (15981, 56071, 'kill_komodo_mount_glide', 1144), + (15982, 56072, 'kill_raptor_mount_fly_glide_left', 1144), + (15983, 56073, 'kill_raptor_mount_fly_glide_right', 1144), + (15984, 56074, 'kill_raptor_mount_glide', 1144), + (15985, 56075, 'kill_raptor_mount_glide_left', 1144), + (15986, 56076, 'kill_raptor_mount_glide_right', 1144), + (15987, 56110, 'kill_terrorbird_mount_glide', 1144), + (15988, 56111, 'kill_walk_kilt', 1144), + (15989, 56119, 'kill_komodo_mount_glide_left', 1144), + (15990, 56120, 'kill_komodo_mount_glide_right', 1144), + (15991, 56127, 'kill_hover_enter', 1144), + (15992, 56128, 'kill_hover_walk', 1144), + (15993, 56130, 'kill_result_cold_fog_ground', 1144), + (15994, 56131, 'kill_result_fire_frostfell_candy', 1144), + (15995, 56132, 'kill_result_fire_frosty_swirls', 1144), + (15996, 56155, 'kill_snd_wolfmount_jump', 1144), + (15997, 56162, 'kill_design_launch_fireworks', 1144), + (15998, 56166, 'kill_snd_komodo_mount_idle_01', 1144), + (15999, 56167, 'kill_snd_komodo_mount_idle_02', 1144), + (16000, 56168, 'kill_snd_komodo_mount_jump_substitute', 1144), + (16001, 56178, 'kill_snd_komodo_mount_glide', 1144), + (16002, 56185, 'kill_design_hologram01', 1144), + (16003, 56186, 'kill_design_hologram02', 1144), + (16004, 56187, 'kill_design_hologram03', 1144), + (16005, 56188, 'kill_design_hologram04', 1144), + (16006, 56198, 'kill_snd_evil_komodo_mount_idle_01', 1144), + (16007, 56199, 'kill_snd_evil_komodo_mount_idle_02', 1144), + (16008, 56206, 'kill_design_parachute', 1144), + (16009, 56208, 'kill_mount_summon_komodo_snd', 1144), + (16010, 56209, 'kill_mount_summon_raptor_snd', 1144), + (16011, 56210, 'kill_mount_summon_terrorbird_snd', 1144), + (16012, 56213, 'kill_snd_komodo_mount_jump', 1144), + (16013, 56215, 'kill_snd_raptor_mount_jump', 1144), + (16014, 56223, 'kill_snd_terrorbird_mount_jump', 1144), + (16015, 56240, 'kill_takeoff_trail', 1144), + (16016, 56247, 'kill_design_pow_blur_essence', 1144), + (16017, 56254, 'kill_design_ballista_fire', 1144), + (16018, 56255, 'kill_design_ballista_load', 1144), + (16019, 56256, 'kill_design_drake_pet', 1144), + (16020, 56257, 'kill_design_pow_battle_scene', 1144), + (16021, 56264, 'kill_design_bixie_face_splat', 1144), + (16022, 56272, 'kill_result_dusty_black', 1144), + (16023, 56280, 'kill_raptor_idle01', 1144), + (16024, 56281, 'kill_raptor_mount_idle02', 1144), + (16025, 56288, 'kill_fae_mount_backup', 1144), + (16026, 56289, 'kill_fae_mount_fall', 1144), + (16027, 56290, 'kill_fae_mount_fly_backup', 1144), + (16028, 56291, 'kill_fae_mount_fly_climb', 1144), + (16029, 56292, 'kill_fae_mount_fly_dive', 1144), + (16030, 56293, 'kill_fae_mount_fly_down', 1144), + (16031, 56294, 'kill_fae_mount_fly_glide', 1144), + (16032, 56295, 'kill_fae_mount_fly_glide_left', 1144), + (16033, 56296, 'kill_fae_mount_fly_glide_right', 1144), + (16034, 56297, 'kill_fae_mount_fly_idle', 1144), + (16035, 56298, 'kill_fae_mount_fly_run', 1144), + (16036, 56299, 'kill_fae_mount_fly_strafe_left', 1144), + (16037, 56300, 'kill_fae_mount_fly_strafe_right', 1144), + (16038, 56301, 'kill_fae_mount_fly_turn_left', 1144), + (16039, 56302, 'kill_fae_mount_fly_turn_right', 1144), + (16040, 56303, 'kill_fae_mount_fly_up', 1144), + (16041, 56304, 'kill_fae_mount_fly_walk', 1144), + (16042, 56305, 'kill_fae_mount_idle', 1144), + (16043, 56306, 'kill_fae_mount_jump', 1144), + (16044, 56307, 'kill_fae_mount_land', 1144), + (16045, 56308, 'kill_fae_mount_long_fall', 1144), + (16046, 56309, 'kill_fae_mount_run', 1144), + (16047, 56310, 'kill_fae_mount_turn_left', 1144), + (16048, 56311, 'kill_fae_mount_turn_right', 1144), + (16049, 56312, 'kill_fae_mount_walk', 1144), + (16050, 56340, 'kill_trail_fx', 1144), + (16051, 56347, 'kill_design_hands_trail_clockwork', 1144), + (16052, 56348, 'kill_design_octopus_pet', 1144), + (16053, 56349, 'kill_fae_mount_fly_fall', 1144), + (16054, 56350, 'kill_fae_mount_jump_substitute', 1144), + (16055, 56372, 'kill_snd_war_general_1h_attack', 1144), + (16056, 56373, 'kill_snd_war_general_1h_attack01', 1144), + (16057, 56374, 'kill_snd_war_general_1h_attack02', 1144), + (16058, 56375, 'kill_snd_war_general_1h_attack03', 1144), + (16059, 56376, 'kill_snd_war_general_attack', 1144), + (16060, 56377, 'kill_snd_war_general_attack01', 1144), + (16061, 56378, 'kill_snd_war_general_attack02', 1144), + (16062, 56379, 'kill_snd_war_general_attack03', 1144), + (16063, 56380, 'kill_snd_war_general_offensive_buff', 1144), + (16064, 56381, 'kill_snd_war_general_wing_flap', 1144), + (16065, 56394, 'kill_spin_con1', 1144), + (16066, 56395, 'kill_spin_con10', 1144), + (16067, 56396, 'kill_spin_con11', 1144), + (16068, 56397, 'kill_spin_con12', 1144), + (16069, 56398, 'kill_spin_con13', 1144), + (16070, 56399, 'kill_spin_con14', 1144), + (16071, 56400, 'kill_spin_con15', 1144), + (16072, 56401, 'kill_spin_con16', 1144), + (16073, 56402, 'kill_spin_con2', 1144), + (16074, 56403, 'kill_spin_con3', 1144), + (16075, 56404, 'kill_spin_con4', 1144), + (16076, 56405, 'kill_spin_con5', 1144), + (16077, 56406, 'kill_spin_con6', 1144), + (16078, 56407, 'kill_spin_con7', 1144), + (16079, 56408, 'kill_spin_con8', 1144), + (16080, 56409, 'kill_spin_con9', 1144), + (16081, 56410, 'kill_squirrel_mount_backup', 1144), + (16082, 56411, 'kill_squirrel_mount_fall', 1144), + (16083, 56412, 'kill_squirrel_mount_glide', 1144), + (16084, 56413, 'kill_squirrel_mount_glide_left', 1144), + (16085, 56414, 'kill_squirrel_mount_glide_right', 1144), + (16086, 56415, 'kill_squirrel_mount_idle', 1144), + (16087, 56416, 'kill_squirrel_mount_idle01', 1144), + (16088, 56417, 'kill_squirrel_mount_jump', 1144), + (16089, 56418, 'kill_squirrel_mount_jump_substitute', 1144), + (16090, 56419, 'kill_squirrel_mount_land', 1144), + (16091, 56420, 'kill_squirrel_mount_long_fall', 1144), + (16092, 56421, 'kill_squirrel_mount_run', 1144), + (16093, 56422, 'kill_squirrel_mount_turn_left', 1144), + (16094, 56423, 'kill_squirrel_mount_turn_right', 1144), + (16095, 56424, 'kill_squirrel_mount_walk', 1144), + (16096, 56425, 'kill_wand_attack', 1144), + (16097, 56426, 'kill_wand_idle', 1144), + (16098, 56434, 'kill_result_blue_aura', 1144), + (16099, 56435, 'kill_result_golden_aura', 1144), + (16100, 56436, 'kill_result_poppy_trail', 1144), + (16101, 56437, 'kill_result_red_aura', 1144), + (16102, 56452, 'kill_snd_war_general_dead_enter', 1144), + (16103, 56453, 'kill_snd_war_general_knockeddowntoknees', 1144), + (16104, 56454, 'kill_snd_war_general_whirling_attack', 1144), + (16105, 56455, 'kill_snd_war_general_wild_swing', 1144), + (16106, 56458, 'kill_cast_fae_flight_grant_fx', 1144), + (16107, 56463, 'kill_design_rock_launch', 1144), + (16108, 56465, 'kill_result_cyclops_eye_debuff', 1144), + (16109, 56466, 'kill_result_fae_dark_mount_fx', 1144), + (16110, 56467, 'kill_result_fae_light_mount_fx', 1144), + (16111, 56468, 'kill_result_falcon_god_egg_spit_p2p', 1144), + (16112, 56469, 'kill_screech_fx', 1144), + (16113, 56471, 'kill_shield_bash_enter', 1144), + (16114, 56472, 'kill_shield_bash_exit', 1144), + (16115, 56474, 'kill_snd_falcon_god_fs', 1144), + (16116, 56475, 'kill_snd_falcon_god_wing_flap_01', 1144), + (16117, 56488, 'kill_snd_war_general_1h_sword_enter', 1144), + (16118, 56489, 'kill_snd_war_general_fs', 1144), + (16119, 56490, 'kill_snd_war_general_combat_enter', 1144), + (16120, 56491, 'kill_snd_war_general_idle01', 1144), + (16121, 56492, 'kill_snd_war_general_idle02', 1144), + (16122, 56493, 'kill_snd_war_general_ouch_forehand', 1144), + (16123, 56506, 'kill_writhe_enter', 1144), + (16124, 56513, 'kill_fire_magic', 1144), + (16125, 56518, 'kill_snd_falcon_god_attack02_vox', 1144), + (16126, 56519, 'kill_snd_falcon_god_attack03_vox', 1144), + (16127, 56520, 'kill_snd_falcon_god_attack_vox', 1144), + (16128, 56521, 'kill_snd_falcon_god_cast_vox', 1144), + (16129, 56522, 'kill_snd_falcon_god_combat_enter_vox', 1144), + (16130, 56523, 'kill_snd_falcon_god_idle01', 1144), + (16131, 56524, 'kill_snd_falcon_god_idle02_vox', 1144), + (16132, 56525, 'kill_snd_falcon_god_offensive_buff', 1144), + (16133, 56527, 'kill_snd_squirrel_mount_glide', 1144), + (16134, 56528, 'kill_snd_squirrel_mount_idle', 1144), + (16135, 56529, 'kill_snd_squirrel_mount_idle_01', 1144), + (16136, 56530, 'kill_snd_squirrel_mount_jump', 1144), + (16137, 56531, 'kill_snd_squirrel_mount_jump_substitute', 1144), + (16138, 56556, 'kill_squirrel_mount_run01', 1144), + (16139, 56557, 'kill_trdskl_acorn', 1144), + (16140, 56558, 'kill_trdskl_skull', 1144), + (16141, 56565, 'kill_fire_magic_blue', 1144), + (16142, 56566, 'kill_fire_magic_green', 1144), + (16143, 56567, 'kill_fire_magic_purple', 1144), + (16144, 56568, 'kill_fire_magic_red', 1144), + (16145, 56569, 'kill_gas_torch_flame', 1144), + (16146, 56580, 'kill_snd_falcon_god_bodyfall', 1144), + (16147, 56585, 'kill_cast_shoot_fire_arrows', 1144), + (16148, 56586, 'kill_cast_slash_trail', 1144), + (16149, 56587, 'kill_cast_soul_attack_blast', 1144), + (16150, 56591, 'kill_result_fire_arrow_storm', 1144), + (16151, 56596, 'kill_snd_rallos_zek_1h_sword_attack', 1144), + (16152, 56597, 'kill_snd_rallos_zek_1h_sword_attack01', 1144), + (16153, 56598, 'kill_snd_rallos_zek_1h_sword_attack02', 1144), + (16154, 56599, 'kill_snd_rallos_zek_1h_sword_attack03', 1144), + (16155, 56600, 'kill_snd_rallos_zek_fs', 1144), + (16156, 56601, 'kill_snd_rallos_zek_shield_bash', 1144), + (16157, 56602, 'kill_snd_rallos_zek_shield_bash_exit', 1144), + (16158, 56603, 'kill_snd_rallos_zek_shield_shove', 1144), + (16159, 56604, 'kill_snd_rallos_zek_whirling_attack01', 1144), + (16160, 56605, 'kill_snd_rallos_zek_whirling_attack02', 1144), + (16161, 56606, 'kill_snd_rallos_zek_whirling_attack03', 1144), + (16162, 56607, 'kill_snd_rallos_zek_whoosh', 1144), + (16163, 56608, 'kill_snd_rallos_zek_wild_swing', 1144), + (16164, 56611, 'kill_cast_axe_fire_attack', 1144), + (16165, 56612, 'kill_cast_axe_flurry', 1144), + (16166, 56615, 'kill_cast_shooting_axes', 1144), + (16167, 56616, 'kill_cast_slashing_axes', 1144), + (16168, 56621, 'kill_cast_shield_slam_blast', 1144), + (16169, 56624, 'kill_cast_fire_teleport', 1144), + (16170, 56625, 'kill_cast_godly_port', 1144), + (16171, 56630, 'kill_design_embedded_swords', 1144), + (16172, 56631, 'kill_design_swords_exit', 1144), + (16173, 56634, 'kill_angler_mount_backup', 1144), + (16174, 56635, 'kill_angler_mount_fall', 1144), + (16175, 56636, 'kill_angler_mount_glide', 1144), + (16176, 56637, 'kill_angler_mount_glide_left', 1144), + (16177, 56638, 'kill_angler_mount_glide_right', 1144), + (16178, 56639, 'kill_angler_mount_idle', 1144), + (16179, 56640, 'kill_angler_mount_idle01', 1144), + (16180, 56641, 'kill_angler_mount_idle02', 1144), + (16181, 56642, 'kill_angler_mount_jump', 1144), + (16182, 56643, 'kill_angler_mount_jump_substitute', 1144), + (16183, 56644, 'kill_angler_mount_land', 1144), + (16184, 56645, 'kill_angler_mount_long_fall', 1144), + (16185, 56646, 'kill_angler_mount_run', 1144), + (16186, 56647, 'kill_angler_mount_run01', 1144), + (16187, 56648, 'kill_angler_mount_turn_left', 1144), + (16188, 56649, 'kill_angler_mount_turn_right', 1144), + (16189, 56650, 'kill_angler_mount_walk', 1144), + (16190, 56655, 'kill_design_swords_enter', 1144), + (16191, 56656, 'kill_design_swords_strike', 1144), + (16192, 56657, 'kill_design_zek_death_fx', 1144), + (16193, 56659, 'kill_result_power_infused', 1144), + (16194, 56660, 'kill_result_rallos_lightning_p2p', 1144), + (16195, 56663, 'kill_snd_angler_mount_glide', 1144), + (16196, 56664, 'kill_snd_angler_mount_idle', 1144), + (16197, 56665, 'kill_snd_angler_mount_idle_01', 1144), + (16198, 56666, 'kill_snd_angler_mount_jump', 1144), + (16199, 56667, 'kill_snd_angler_mount_jump_substitute', 1144), + (16200, 56694, 'kill_squirrel_mount_idle02', 1144), + (16201, 56697, 'kill_cast_godly_port_exit', 1144), + (16202, 56702, 'kill_design_result_white_out', 1144), + (16203, 56704, 'kill_result_death_charge_blast', 1144), + (16204, 56711, 'kill_design_pow_rock_blast', 1144), + (16205, 56714, 'kill_cast_gather_fx', 1144), + (16206, 56720, 'kill_result_erollisi_bow_attack_p2p', 1144), + (16207, 56723, 'kill_breath_fx', 1144), + (16208, 56728, 'kill_eye_fx', 1144), + (16209, 56730, 'kill_port_down_fx', 1144), + (16210, 56731, 'kill_result_shadow_shatter', 1144), + (16211, 56732, 'kill_result_shadow_sphere_p2p', 1144), + (16212, 56739, 'kill_design_sol_statue_breaking', 1144), + (16213, 56740, 'kill_design_sol_statue_essence', 1144), + (16214, 56741, 'kill_design_sol_statue_evil_essence', 1144), + (16215, 56743, 'kill_result_fire_engulfed_dark', 1144), + (16216, 56744, 'kill_result_shadow_streaks', 1144), + (16217, 56751, 'kill_design_frostfell_portal_new', 1144), + (16218, 56755, 'kill_snd_angler_mount_idle02', 1144), + (16219, 56756, 'kill_snd_angler_mount_scratch', 1144), + (16220, 56757, 'kill_snd_angler_mount_vox_01', 1144), + (16221, 56758, 'kill_snd_angler_mount_vox_02', 1144), + (16222, 56759, 'kill_snd_angler_mount_vox_03', 1144), + (16223, 56760, 'kill_snd_angler_mount_vox_short', 1144), + (16224, 56768, 'kill_result_object_sparkles_black', 1144), + (16225, 56769, 'kill_result_object_sparkles_gold', 1144), + (16226, 56770, 'kill_result_object_sparkles_pink', 1144), + (16227, 56771, 'kill_result_object_sparkles_purple', 1144), + (16228, 56778, 'kill_dance_female', 1144), + (16229, 56814, 'kill_trdskl_tinker_hands', 1144), + (16230, 56822, 'kill_result_exorcise_evil', 1144), + (16231, 56829, 'kill_death01_enter', 1144), + (16232, 56830, 'kill_death01_exit', 1144), + (16233, 56831, 'kill_death01_idle', 1144), + (16234, 56832, 'kill_1h_sword_run', 1144), + (16235, 56835, 'kill_cast1', 1144), + (16236, 56843, 'kill_result_flash_bomb_vanish', 1144), + (16237, 56844, 'kill_result_lifetap_heart_p2p', 1144), + (16238, 56852, 'kill_player_wing_mount_backup', 1144), + (16239, 56853, 'kill_player_wing_mount_fall', 1144), + (16240, 56854, 'kill_player_wing_mount_fly_backup', 1144), + (16241, 56855, 'kill_player_wing_mount_fly_climb', 1144), + (16242, 56856, 'kill_player_wing_mount_fly_dive', 1144), + (16243, 56857, 'kill_player_wing_mount_fly_down', 1144), + (16244, 56858, 'kill_player_wing_mount_fly_glide', 1144), + (16245, 56859, 'kill_player_wing_mount_fly_glide_left', 1144), + (16246, 56860, 'kill_player_wing_mount_fly_glide_right', 1144), + (16247, 56861, 'kill_player_wing_mount_fly_idle', 1144), + (16248, 56862, 'kill_player_wing_mount_fly_run', 1144), + (16249, 56863, 'kill_player_wing_mount_fly_strafe_left', 1144), + (16250, 56864, 'kill_player_wing_mount_fly_strafe_right', 1144), + (16251, 56865, 'kill_player_wing_mount_fly_turn_left', 1144), + (16252, 56866, 'kill_player_wing_mount_fly_turn_right', 1144), + (16253, 56867, 'kill_player_wing_mount_fly_up', 1144), + (16254, 56868, 'kill_player_wing_mount_fly_walk', 1144), + (16255, 56869, 'kill_player_wing_mount_idle', 1144), + (16256, 56870, 'kill_player_wing_mount_jump', 1144), + (16257, 56871, 'kill_player_wing_mount_land', 1144), + (16258, 56872, 'kill_player_wing_mount_long_fall', 1144), + (16259, 56873, 'kill_player_wing_mount_run', 1144), + (16260, 56874, 'kill_player_wing_mount_turn_left', 1144), + (16261, 56875, 'kill_player_wing_mount_turn_right', 1144), + (16262, 56876, 'kill_player_wing_mount_walk', 1144), + (16263, 56881, 'kill_chop_ground_digging', 1144), + (16264, 56882, 'kill_chop_ground_success', 1144), + (16265, 24121, 'design_glow_eyes_green', 1190), + (16266, 24124, 'sit_drink', 1190), + (16267, 24132, 'result_flash_bomb_appear', 1190), + (16268, 24140, 'reforge_nature_tier01', 1190), + (16269, 24141, 'reforge_nature_tier02', 1190), + (16270, 24142, 'reforge_nature_tier03', 1190), + (16271, 24143, 'reforge_nature_tier04', 1190), + (16272, 24144, 'reforge_nature_tier05', 1190), + (16273, 24152, 'reforge_fire_tier01', 1190), + (16274, 24153, 'reforge_fire_tier02', 1190), + (16275, 24154, 'reforge_fire_tier03', 1190), + (16276, 24155, 'reforge_fire_tier04', 1190), + (16277, 24156, 'reforge_fire_tier05', 1190), + (16278, 24164, 'reforge_ice_tier01', 1190), + (16279, 24165, 'reforge_ice_tier02', 1190), + (16280, 24166, 'reforge_ice_tier03', 1190), + (16281, 24167, 'reforge_ice_tier04', 1190), + (16282, 24168, 'reforge_ice_tier05', 1190), + (16283, 24176, 'reforge_blood_tier01', 1190), + (16284, 24177, 'reforge_blood_tier02', 1190), + (16285, 24178, 'reforge_blood_tier03', 1190), + (16286, 24179, 'reforge_blood_tier04', 1190), + (16287, 24180, 'reforge_blood_tier05', 1190), + (16288, 24187, 'hassan_chop', 1190), + (16289, 24195, 'reforge_acid_tier01', 1190), + (16290, 24196, 'reforge_acid_tier02', 1190), + (16291, 24197, 'reforge_acid_tier03', 1190), + (16292, 24198, 'reforge_acid_tier04', 1190), + (16293, 24199, 'reforge_acid_tier05', 1190), + (16294, 24200, 'reforge_runic_tier01', 1190), + (16295, 24201, 'reforge_runic_tier02', 1190), + (16296, 24202, 'reforge_runic_tier03', 1190), + (16297, 24203, 'reforge_runic_tier04', 1190), + (16298, 24204, 'reforge_runic_tier05', 1190), + (16299, 24212, 'reforge_electricity_tier01', 1190), + (16300, 24213, 'reforge_electricity_tier02', 1190), + (16301, 24214, 'reforge_electricity_tier03', 1190), + (16302, 24215, 'reforge_electricity_tier04', 1190), + (16303, 24216, 'reforge_electricity_tier05', 1190), + (16304, 24223, 'dead_enter01', 1190), + (16305, 24224, 'death01', 1190), + (16306, 24225, 'horse_attack', 1190), + (16307, 24226, 'horse_attack01', 1190), + (16308, 24227, 'horse_attack02', 1190), + (16309, 24228, 'horse_attack03', 1190), + (16310, 24229, 'horse_cast', 1190), + (16311, 24230, 'horse_combat_cast', 1190), + (16312, 24231, 'horse_combat_enter', 1190), + (16313, 24232, 'horse_combat_exit', 1190), + (16314, 24233, 'horse_death', 1190), + (16315, 24234, 'horse_death01', 1190), + (16316, 24235, 'horse_ouch', 1190), + (16317, 24236, 'horse_ouch01', 1190), + (16318, 24237, 'horse_wild_swing', 1190), + (16319, 24239, 'reforge_pestilence_tier01', 1190), + (16320, 24240, 'reforge_pestilence_tier02', 1190), + (16321, 24241, 'reforge_pestilence_tier03', 1190), + (16322, 24242, 'reforge_pestilence_tier04', 1190), + (16323, 24243, 'reforge_pestilence_tier05', 1190), + (16324, 24244, '2pike_attack03', 1190), + (16325, 24252, 'reforge_illusion_tier01', 1190), + (16326, 24253, 'reforge_illusion_tier02', 1190), + (16327, 24254, 'reforge_illusion_tier03', 1190), + (16328, 24255, 'reforge_illusion_tier04', 1190), + (16329, 24256, 'reforge_illusion_tier05', 1190), + (16330, 24257, 'reforge_radiance_tier01', 1190), + (16331, 24258, 'reforge_radiance_tier02', 1190), + (16332, 24259, 'reforge_radiance_tier03', 1190), + (16333, 24260, 'reforge_radiance_tier04', 1190), + (16334, 24261, 'reforge_radiance_tier05', 1190), + (16335, 24268, 'horse_dead', 1190), + (16336, 24269, 'horse_dead_enter', 1190), + (16337, 24270, 'horse_dead_enter01', 1190), + (16338, 24272, 'pegasus_mount_attack', 1190), + (16339, 24273, 'pegasus_mount_attack01', 1190), + (16340, 24274, 'pegasus_mount_attack02', 1190), + (16341, 24275, 'pegasus_mount_attack03', 1190), + (16342, 24276, 'pegasus_mount_cast', 1190), + (16343, 24277, 'pegasus_mount_combat_enter', 1190), + (16344, 24278, 'pegasus_mount_combat_exit', 1190), + (16345, 24279, 'pegasus_mount_combat_idle', 1190), + (16346, 24280, 'pegasus_mount_dead', 1190), + (16347, 24281, 'pegasus_mount_dead_enter', 1190), + (16348, 24282, 'pegasus_mount_dead_enter01', 1190), + (16349, 24283, 'pegasus_mount_death', 1190), + (16350, 24284, 'pegasus_mount_death01', 1190), + (16351, 24285, 'pegasus_mount_ouch', 1190), + (16352, 24286, 'pegasus_mount_ouch01', 1190), + (16353, 24287, 'pegasus_mount_wild_swing', 1190), + (16354, 24288, 'result_fprt_ghosts_attack_p2p', 1190), + (16355, 24299, 'snd_freeport_knight_1h_sword_attack', 1190), + (16356, 24300, 'snd_freeport_knight_1h_sword_attack01', 1190), + (16357, 24301, 'snd_freeport_knight_1h_sword_attack02', 1190), + (16358, 24302, 'snd_freeport_knight_1h_sword_attack03', 1190), + (16359, 24303, 'snd_freeport_knight_fs', 1190), + (16360, 24304, 'snd_freeport_knight_charge_up', 1190), + (16361, 24305, 'snd_freeport_knight_whirling_attack', 1190), + (16362, 24306, 'snd_freeport_knight_wild_swing', 1190), + (16363, 24332, 'tiered_chill_claw_buff', 1190), + (16364, 24333, 'tiered_chilling_claws', 1190), + (16365, 24334, 'tiered_claws_buff', 1190), + (16366, 24335, 'tiered_shield_barrier_buff', 1190), + (16367, 24336, '2h_ouch', 1190), + (16368, 24337, '2h_ouch_backhand', 1190), + (16369, 24338, '2h_ouch_down', 1190), + (16370, 24339, '2h_ouch_forehand', 1190), + (16371, 24340, '2h_ouch_thrust', 1190), + (16372, 24341, '2h_sword_dodge', 1190), + (16373, 24344, 'backhand', 1190), + (16374, 24349, 'horse_ouch_backhand', 1190), + (16375, 24350, 'horse_ouch_down', 1190), + (16376, 24351, 'horse_ouch_forehand', 1190), + (16377, 24352, 'horse_ouch_thrust', 1190), + (16378, 24354, 'pike_dodge', 1190), + (16379, 24355, 'pike_ouch', 1190), + (16380, 24385, 'tiered_spirit_pets_summon', 1190), + (16381, 24393, 'mount_attack', 1190), + (16382, 24398, 'snd_freeport_knight_cast_death', 1190), + (16383, 24399, 'snd_freeport_knight_cast_end', 1190), + (16384, 24400, 'snd_freeport_knight_cast_start', 1190), + (16385, 24426, 'tiered_claw_marks', 1190), + (16386, 24427, 'tiered_feather_shroud', 1190), + (16387, 24428, 'tiered_fire_claw_buff', 1190), + (16388, 24429, 'tiered_flaming_claws', 1190), + (16389, 24430, 'tiered_hand_claws', 1190), + (16390, 24431, 'tiered_ice_dagger_p2p', 1190), + (16391, 24434, 'attack_swipe', 1190), + (16392, 24435, 'cast_aa_frosty_swirls', 1190), + (16393, 24436, 'cast_aa_spirit_blast', 1190), + (16394, 24439, 'cast_slashing_claws', 1190), + (16395, 24443, 'result_aa_wispy_ward', 1190), + (16396, 24444, 'result_summon_spirit_swirls', 1190), + (16397, 24445, 'result_tame_shroud', 1190), + (16398, 24475, 'tiered_vine_net', 1190), + (16399, 24478, 'cast_flurry_claws', 1190), + (16400, 24484, 'result_lucan_soul_suck_p2p', 1190), + (16401, 24492, 'lucan_cast_enter', 1190), + (16402, 24493, 'lucan_cast_exit', 1190), + (16403, 24494, 'lucan_cast_idle', 1190), + (16404, 24499, 'snd_freeport_knight_death', 1190), + (16405, 24500, 'snd_freeport_knight_knockeddowntoknees', 1190), + (16406, 24501, 'snd_freeport_knight_rx_attack_long', 1190), + (16407, 24502, 'snd_freeport_knight_rx_attack_short', 1190), + (16408, 24503, 'snd_freeport_knight_rx_buff', 1190), + (16409, 24504, 'snd_freeport_knight_rx_death', 1190), + (16410, 24505, 'snd_freeport_knight_rx_ouch', 1190), + (16411, 24517, 'snd_freeport_knight_attack', 1190), + (16412, 24518, 'snd_freeport_knight_attack01', 1190), + (16413, 24519, 'snd_freeport_knight_attack02', 1190), + (16414, 24520, 'snd_freeport_knight_attack03', 1190), + (16415, 24521, 'snd_freeport_knight_rx_cast_end', 1190), + (16416, 24528, 'drink_chug', 1190), + (16417, 24529, 'horse_combat_attack', 1190), + (16418, 24530, 'horse_combat_attack01', 1190), + (16419, 24531, 'horse_combat_attack02', 1190), + (16420, 24532, 'horse_combat_attack03', 1190), + (16421, 24535, 'cast_aa_spirit_bear', 1190), + (16422, 24536, 'cast_ghost_rats', 1190), + (16423, 24542, 'result_aa_claw_marks', 1190), + (16424, 24543, 'result_proc_crit_bonus', 1190), + (16425, 24544, 'result_spirit_claws_spinning', 1190), + (16426, 24546, 'sfx_bodyfall', 1190), + (16427, 24550, 'snd_horse_fs_left', 1190), + (16428, 24551, 'snd_horse_fs_right', 1190), + (16429, 24552, 'snd_horse_rx_attack', 1190), + (16430, 24553, 'snd_horse_rx_death', 1190), + (16431, 24554, 'snd_horse_rx_ouch', 1190), + (16432, 24557, 'cast_aa_frosty_cone_forward', 1190), + (16433, 24558, 'cast_cloud_spin', 1190), + (16434, 24559, 'cast_feral_fangs', 1190), + (16435, 24560, 'cast_flurry_claws_attack', 1190), + (16436, 24566, 'result_ice_attack_p2p', 1190), + (16437, 24569, 'cast_aa_flash_bomb_appear', 1190), + (16438, 24570, 'cast_aa_melee_swipe', 1190), + (16439, 24571, 'cast_crit_hawk_summon', 1190), + (16440, 24576, 'icon_merc_heal', 1190), + (16441, 24577, 'icon_merc_melee', 1190), + (16442, 24578, 'icon_merc_ranged', 1190), + (16443, 24579, 'icon_merc_spell', 1190), + (16444, 24580, 'icon_merc_support', 1190), + (16445, 24581, 'icon_merc_tank', 1190), + (16446, 24584, 'cast_aa_spirit_blast_big', 1190), + (16447, 24585, 'cast_feral_fangs_bite', 1190), + (16448, 24588, 'cast_aa_spirit_ape', 1190), + (16449, 24589, 'cast_aa_spirit_boar', 1190), + (16450, 24590, 'cast_aa_spirit_crab', 1190), + (16451, 24591, 'cast_aa_spirit_rats', 1190), + (16452, 24592, 'cast_aa_spirit_stag', 1190), + (16453, 24593, 'cast_claws_strike_targeted', 1190), + (16454, 24596, 'cast_aa_spirit_bat', 1190), + (16455, 24597, 'cast_aa_spirit_cobra', 1190), + (16456, 24598, 'cast_aa_spirit_drake', 1190), + (16457, 24599, 'cast_aa_spirit_frogs', 1190), + (16458, 24600, 'cast_aa_spirit_hawk', 1190), + (16459, 24601, 'cast_aa_spirit_tiger', 1190), + (16460, 24602, 'cast_aa_spirit_wolf', 1190), + (16461, 24607, 'frog_croaking_snd', 1190), + (16462, 24609, 'result_luclin_chunk_slam', 1190), + (16463, 24639, 'tiger_attack_snd', 1190), + (16464, 24647, 'result_aa_tameable_fx', 1190), + (16465, 24650, 'cast_aa_spirit_wolf_howling', 1190), + (16466, 24656, 'result_feral_fangs_vert_bite', 1190), + (16467, 24659, 'cast_aa_frost_wall', 1190), + (16468, 24665, 'result_aa_icicle_spikes', 1190), + (16469, 24666, 'result_aa_quick_heal', 1190), + (16470, 24667, 'result_aa_windy_ward', 1190), + (16471, 24674, 'design_frostfell_candyfx01', 1190), + (16472, 24675, 'design_frostfell_candyfx02', 1190), + (16473, 24676, 'design_frostfell_candyfx03', 1190), + (16474, 24677, 'design_frostfell_candyfx04', 1190), + (16475, 24688, 'snd_footstep', 1190), + (16476, 24691, 'attack_bites', 1190), + (16477, 24692, 'attack_shuffle', 1190), + (16478, 24693, 'attack_tail_swipe', 1190), + (16479, 24699, 'roll', 1190), + (16480, 24729, 'spawn', 1190), + (16481, 24732, 'cast02', 1190), + (16482, 24735, 'combat_idle02', 1190), + (16483, 24738, 'dead_alt', 1190), + (16484, 24739, 'death_alt', 1190), + (16485, 24740, 'fae_mount_combat_idle', 1190), + (16486, 24748, 'result_sparkles_object_swirl', 1190), + (16487, 24749, 'result_star_spirits', 1190), + (16488, 24750, 'run_ground', 1190), + (16489, 24780, 'spawn_idle', 1190), + (16490, 24783, 'backpack_fly_backup', 1190), + (16491, 24784, 'backpack_fly_combat_idle', 1190), + (16492, 24785, 'backpack_fly_fall', 1190), + (16493, 24786, 'backpack_fly_fly_backup', 1190), + (16494, 24787, 'backpack_fly_fly_climb', 1190), + (16495, 24788, 'backpack_fly_fly_dive', 1190), + (16496, 24789, 'backpack_fly_fly_down', 1190), + (16497, 24790, 'backpack_fly_fly_glide', 1190), + (16498, 24791, 'backpack_fly_fly_glide_left', 1190), + (16499, 24792, 'backpack_fly_fly_glide_right', 1190), + (16500, 24793, 'backpack_fly_fly_idle', 1190), + (16501, 24794, 'backpack_fly_fly_run', 1190), + (16502, 24795, 'backpack_fly_fly_strafe_left', 1190), + (16503, 24796, 'backpack_fly_fly_strafe_right', 1190), + (16504, 24797, 'backpack_fly_fly_turn_left', 1190), + (16505, 24798, 'backpack_fly_fly_turn_right', 1190), + (16506, 24799, 'backpack_fly_fly_up', 1190), + (16507, 24800, 'backpack_fly_fly_walk', 1190), + (16508, 24801, 'backpack_fly_idle', 1190), + (16509, 24802, 'backpack_fly_jump', 1190), + (16510, 24803, 'backpack_fly_land', 1190), + (16511, 24804, 'backpack_fly_long_fall', 1190), + (16512, 24805, 'backpack_fly_run', 1190), + (16513, 24806, 'backpack_fly_turn_left', 1190), + (16514, 24807, 'backpack_fly_turn_right', 1190), + (16515, 24808, 'backpack_fly_walk', 1190), + (16516, 24811, 'backpack_backup', 1190), + (16517, 24812, 'backpack_combat_idle', 1190), + (16518, 24813, 'backpack_fall', 1190), + (16519, 24814, 'backpack_fly__walk', 1190), + (16520, 24815, 'backpack_fly_climb', 1190), + (16521, 24816, 'backpack_fly_dive', 1190), + (16522, 24817, 'backpack_fly_down', 1190), + (16523, 24818, 'backpack_fly_glide', 1190), + (16524, 24819, 'backpack_fly_glide_left', 1190), + (16525, 24820, 'backpack_fly_glide_right', 1190), + (16526, 24821, 'backpack_fly_strafe_left', 1190), + (16527, 24822, 'backpack_fly_strafe_right', 1190), + (16528, 24823, 'backpack_fly_up', 1190), + (16529, 24824, 'backpack_idle', 1190), + (16530, 24825, 'backpack_jump', 1190), + (16531, 24826, 'backpack_land', 1190), + (16532, 24827, 'backpack_long_fall', 1190), + (16533, 24828, 'backpack_run', 1190), + (16534, 24829, 'backpack_strafe_left', 1190), + (16535, 24830, 'backpack_strafe_left_run', 1190), + (16536, 24831, 'backpack_strafe_right', 1190), + (16537, 24832, 'backpack_strafe_right_run', 1190), + (16538, 24833, 'backpack_turn_left', 1190), + (16539, 24834, 'backpack_turn_right', 1190), + (16540, 24835, 'backpack_walk', 1190), + (16541, 24840, 'dual_wield_dead_enter', 1190), + (16542, 24843, 'backpack_backup_run', 1190), + (16543, 24851, 'persist_bug_swarm', 1190), + (16544, 24861, 'snd_fae_wing_flaps', 1190), + (16545, 24868, 'drakota_mount_backup', 1190), + (16546, 24869, 'drakota_mount_fall', 1190), + (16547, 24870, 'drakota_mount_fly_backup', 1190), + (16548, 24871, 'drakota_mount_fly_climb', 1190), + (16549, 24872, 'drakota_mount_fly_dive', 1190), + (16550, 24873, 'drakota_mount_fly_down', 1190), + (16551, 24874, 'drakota_mount_fly_glide', 1190), + (16552, 24875, 'drakota_mount_fly_glide_left', 1190), + (16553, 24876, 'drakota_mount_fly_glide_right', 1190), + (16554, 24877, 'drakota_mount_fly_idle', 1190), + (16555, 24878, 'drakota_mount_fly_run', 1190), + (16556, 24879, 'drakota_mount_fly_strafe_left', 1190), + (16557, 24880, 'drakota_mount_fly_strafe_right', 1190), + (16558, 24881, 'drakota_mount_fly_turn_left', 1190), + (16559, 24882, 'drakota_mount_fly_turn_right', 1190), + (16560, 24883, 'drakota_mount_fly_up', 1190), + (16561, 24884, 'drakota_mount_fly_walk', 1190), + (16562, 24885, 'drakota_mount_idle', 1190), + (16563, 24886, 'drakota_mount_idle01', 1190), + (16564, 24887, 'drakota_mount_jump', 1190), + (16565, 24888, 'drakota_mount_jump_substitute', 1190), + (16566, 24889, 'drakota_mount_land', 1190), + (16567, 24890, 'drakota_mount_long_fall', 1190), + (16568, 24891, 'drakota_mount_run', 1190), + (16569, 24892, 'drakota_mount_turn_left', 1190), + (16570, 24893, 'drakota_mount_turn_right', 1190), + (16571, 24894, 'drakota_mount_walk', 1190), + (16572, 24899, 'cast_summon_draconian_cyclone', 1190), + (16573, 24900, 'cast_summon_draconian_necro', 1190), + (16574, 24903, 'design_sky_necro_beams', 1190), + (16575, 24904, 'design_sky_necro_dragon_summon', 1190), + (16576, 24913, 'skyshrine_drake_run', 1190), + (16577, 24914, 'skyshrine_drake_run01', 1190), + (16578, 24921, 'idle_rake', 1190), + (16579, 24958, 'tcg_head_aura', 1190), + (16580, 24959, '1h_sword_attack04', 1190), + (16581, 24966, 'dance02', 1190), + (16582, 24967, 'dance03', 1190), + (16583, 24968, 'design_speed_boost_buff_no_sound', 1190), + (16584, 24969, 'design_speed_drop_debuff_no_sound', 1190), + (16585, 24970, 'drakota_mount_idle_01', 1190), + (16586, 24971, 'idle_gardening', 1190), + (16587, 24972, 'idle_gathering', 1190), + (16588, 24974, 'result_forced_shader_bugs', 1190), + (16589, 24981, 'design_glow_eyes_blue', 1190), + (16590, 25012, 'wing_wisps_fx', 1190), + (16591, 25019, 'dontuse_idle01', 1190), + (16592, 25020, 'dontuse_idle02', 1190), + (16593, 25021, 'golem_kick', 1190), + (16594, 25024, 'cast_corruption_gather', 1190), + (16595, 25026, 'cast_pollen_spew', 1190), + (16596, 25028, 'cast_seed_spew', 1190), + (16597, 25029, 'cast_spore_spew', 1190), + (16598, 25032, 'idle_gardening_exit', 1190), + (16599, 25033, 'idle_gathering_exit', 1190), + (16600, 25035, 'result_icicle_blast_up', 1190), + (16601, 25037, 'sit_enter_open', 1190), + (16602, 25038, 'sit_exit_open', 1190), + (16603, 25039, 'sit_idle_open', 1190), + (16604, 25042, 'cast_gather_corruption', 1190), + (16605, 25048, 'lounge_enter', 1190), + (16606, 25049, 'lounge_exit', 1190), + (16607, 25050, 'lounge_idle', 1190), + (16608, 25051, 'result_corruption_spew', 1190), + (16609, 25081, 'stalk', 1190), + (16610, 25084, 'backpack_1h_crush_attack', 1190), + (16611, 25085, 'backpack_1h_crush_attack01', 1190), + (16612, 25086, 'backpack_1h_crush_attack02', 1190), + (16613, 25087, 'backpack_1h_crush_attack03', 1190), + (16614, 25088, 'backpack_1h_crush_attack_recoil', 1190), + (16615, 25089, 'backpack_1h_crush_attack_recoil01', 1190), + (16616, 25090, 'backpack_1h_crush_attack_recoil02', 1190), + (16617, 25091, 'backpack_1h_crush_attack_recoil03', 1190), + (16618, 25092, 'backpack_1h_crush_backup', 1190), + (16619, 25093, 'backpack_1h_crush_dodge_backhand', 1190), + (16620, 25094, 'backpack_1h_crush_dodge_down', 1190), + (16621, 25095, 'backpack_1h_crush_dodge_forehand', 1190), + (16622, 25096, 'backpack_1h_crush_dodge_thrust', 1190), + (16623, 25097, 'backpack_1h_crush_enter', 1190), + (16624, 25098, 'backpack_1h_crush_exit', 1190), + (16625, 25099, 'backpack_1h_crush_idle', 1190), + (16626, 25100, 'backpack_1h_crush_ouch_backhand', 1190), + (16627, 25101, 'backpack_1h_crush_ouch_down', 1190), + (16628, 25102, 'backpack_1h_crush_ouch_forehand', 1190), + (16629, 25103, 'backpack_1h_crush_ouch_thrust', 1190), + (16630, 25104, 'backpack_1h_crush_parry_backhand', 1190), + (16631, 25105, 'backpack_1h_crush_parry_down', 1190), + (16632, 25106, 'backpack_1h_crush_parry_forehand', 1190), + (16633, 25107, 'backpack_1h_crush_parry_thrust', 1190), + (16634, 25108, 'backpack_1h_crush_strafe_left', 1190), + (16635, 25109, 'backpack_1h_crush_strafe_right', 1190), + (16636, 25110, 'backpack_1h_crush_walk', 1190), + (16637, 25111, 'backpack_1h_pierce_attack', 1190), + (16638, 25112, 'backpack_1h_pierce_attack01', 1190), + (16639, 25113, 'backpack_1h_pierce_attack02', 1190), + (16640, 25114, 'backpack_1h_pierce_attack03', 1190), + (16641, 25115, 'backpack_1h_pierce_attack_recoil', 1190), + (16642, 25116, 'backpack_1h_pierce_attack_recoil01', 1190), + (16643, 25117, 'backpack_1h_pierce_attack_recoil02', 1190), + (16644, 25118, 'backpack_1h_pierce_attack_recoil03', 1190), + (16645, 25119, 'backpack_1h_pierce_backup', 1190), + (16646, 25120, 'backpack_1h_pierce_dodge_backhand', 1190), + (16647, 25121, 'backpack_1h_pierce_dodge_down', 1190), + (16648, 25122, 'backpack_1h_pierce_dodge_forehand', 1190), + (16649, 25123, 'backpack_1h_pierce_dodge_thrust', 1190), + (16650, 25124, 'backpack_1h_pierce_enter', 1190), + (16651, 25125, 'backpack_1h_pierce_exit', 1190), + (16652, 25126, 'backpack_1h_pierce_idle', 1190), + (16653, 25127, 'backpack_1h_pierce_ouch_backhand', 1190), + (16654, 25128, 'backpack_1h_pierce_ouch_down', 1190), + (16655, 25129, 'backpack_1h_pierce_ouch_forehand', 1190), + (16656, 25130, 'backpack_1h_pierce_ouch_thrust', 1190), + (16657, 25131, 'backpack_1h_pierce_parry_backhand', 1190), + (16658, 25132, 'backpack_1h_pierce_parry_down', 1190), + (16659, 25133, 'backpack_1h_pierce_parry_forehand', 1190), + (16660, 25134, 'backpack_1h_pierce_parry_thrust', 1190), + (16661, 25135, 'backpack_1h_pierce_strafe_left', 1190), + (16662, 25136, 'backpack_1h_pierce_strafe_right', 1190), + (16663, 25137, 'backpack_1h_pierce_walk', 1190), + (16664, 25138, 'backpack_1h_sword_attack', 1190), + (16665, 25139, 'backpack_1h_sword_attack01', 1190), + (16666, 25140, 'backpack_1h_sword_attack02', 1190), + (16667, 25141, 'backpack_1h_sword_attack03', 1190), + (16668, 25142, 'backpack_1h_sword_attack_recoil', 1190), + (16669, 25143, 'backpack_1h_sword_attack_recoil01', 1190), + (16670, 25144, 'backpack_1h_sword_attack_recoil02', 1190), + (16671, 25145, 'backpack_1h_sword_attack_recoil03', 1190), + (16672, 25146, 'backpack_1h_sword_backup', 1190), + (16673, 25147, 'backpack_1h_sword_death_blow', 1190), + (16674, 25148, 'backpack_1h_sword_death_blow01', 1190), + (16675, 25149, 'backpack_1h_sword_dodge_backhand', 1190), + (16676, 25150, 'backpack_1h_sword_dodge_down', 1190), + (16677, 25151, 'backpack_1h_sword_dodge_forehand', 1190), + (16678, 25152, 'backpack_1h_sword_dodge_thrust', 1190), + (16679, 25153, 'backpack_1h_sword_enter', 1190), + (16680, 25154, 'backpack_1h_sword_exit', 1190), + (16681, 25155, 'backpack_1h_sword_idle', 1190), + (16682, 25156, 'backpack_1h_sword_ouch_backhand', 1190), + (16683, 25157, 'backpack_1h_sword_ouch_down', 1190), + (16684, 25158, 'backpack_1h_sword_ouch_forehand', 1190), + (16685, 25159, 'backpack_1h_sword_ouch_thrust', 1190), + (16686, 25160, 'backpack_1h_sword_parry_backhand', 1190), + (16687, 25161, 'backpack_1h_sword_parry_down', 1190), + (16688, 25162, 'backpack_1h_sword_parry_forehand', 1190), + (16689, 25163, 'backpack_1h_sword_parry_thrust', 1190), + (16690, 25164, 'backpack_1h_sword_strafe_left', 1190), + (16691, 25165, 'backpack_1h_sword_strafe_right', 1190), + (16692, 25166, 'backpack_1h_sword_walk', 1190), + (16693, 25167, 'backpack_1h_throw_attack', 1190), + (16694, 25168, 'backpack_1h_thrown_attack', 1190), + (16695, 25169, 'backpack_1h_thrown_backup', 1190), + (16696, 25170, 'backpack_1h_thrown_dodge_backhand', 1190), + (16697, 25171, 'backpack_1h_thrown_dodge_down', 1190), + (16698, 25172, 'backpack_1h_thrown_dodge_forehand', 1190), + (16699, 25173, 'backpack_1h_thrown_dodge_thrust', 1190), + (16700, 25174, 'backpack_1h_thrown_idle', 1190), + (16701, 25175, 'backpack_1h_thrown_ouch_backhand', 1190), + (16702, 25176, 'backpack_1h_thrown_ouch_down', 1190), + (16703, 25177, 'backpack_1h_thrown_ouch_forehand', 1190), + (16704, 25178, 'backpack_1h_thrown_ouch_thrust', 1190), + (16705, 25179, 'backpack_1h_thrown_strafe_left', 1190), + (16706, 25180, 'backpack_1h_thrown_strafe_right', 1190), + (16707, 25181, 'backpack_1h_thrown_walk', 1190), + (16708, 25182, 'backpack_1h_wand_attack', 1190), + (16709, 25183, 'backpack_1h_wand_attack01', 1190), + (16710, 25184, 'backpack_1h_wand_attack02', 1190), + (16711, 25185, 'backpack_1h_wand_attack03', 1190), + (16712, 25186, 'backpack_1h_wand_attack_recoil', 1190), + (16713, 25187, 'backpack_1h_wand_attack_recoil01', 1190), + (16714, 25188, 'backpack_1h_wand_attack_recoil02', 1190), + (16715, 25189, 'backpack_1h_wand_attack_recoil03', 1190), + (16716, 25190, 'backpack_1h_wand_backup', 1190), + (16717, 25191, 'backpack_1h_wand_dodge_backhand', 1190), + (16718, 25192, 'backpack_1h_wand_dodge_down', 1190), + (16719, 25193, 'backpack_1h_wand_dodge_forehand', 1190), + (16720, 25194, 'backpack_1h_wand_dodge_thrust', 1190), + (16721, 25195, 'backpack_1h_wand_enter', 1190), + (16722, 25196, 'backpack_1h_wand_exit', 1190), + (16723, 25197, 'backpack_1h_wand_idle', 1190), + (16724, 25198, 'backpack_1h_wand_ouch_backhand', 1190), + (16725, 25199, 'backpack_1h_wand_ouch_down', 1190), + (16726, 25200, 'backpack_1h_wand_ouch_forehand', 1190), + (16727, 25201, 'backpack_1h_wand_ouch_thrust', 1190), + (16728, 25202, 'backpack_1h_wand_parry_backhand', 1190), + (16729, 25203, 'backpack_1h_wand_parry_down', 1190), + (16730, 25204, 'backpack_1h_wand_parry_forehand', 1190), + (16731, 25205, 'backpack_1h_wand_parry_thrust', 1190), + (16732, 25206, 'backpack_1h_wand_strafe_left', 1190), + (16733, 25207, 'backpack_1h_wand_strafe_right', 1190), + (16734, 25208, 'backpack_1h_wand_walk', 1190), + (16735, 25209, 'backpack_2h_sword_attack', 1190), + (16736, 25210, 'backpack_2h_sword_attack01', 1190), + (16737, 25211, 'backpack_2h_sword_attack02', 1190), + (16738, 25212, 'backpack_2h_sword_attack03', 1190), + (16739, 25213, 'backpack_2h_sword_attack_recoil', 1190), + (16740, 25214, 'backpack_2h_sword_attack_recoil01', 1190), + (16741, 25215, 'backpack_2h_sword_attack_recoil02', 1190), + (16742, 25216, 'backpack_2h_sword_attack_recoil03', 1190), + (16743, 25217, 'backpack_2h_sword_backup', 1190), + (16744, 25218, 'backpack_2h_sword_charge_up', 1190), + (16745, 25219, 'backpack_2h_sword_defensive_buff', 1190), + (16746, 25220, 'backpack_2h_sword_dodge_backhand', 1190), + (16747, 25221, 'backpack_2h_sword_dodge_down', 1190), + (16748, 25222, 'backpack_2h_sword_dodge_forehand', 1190), + (16749, 25223, 'backpack_2h_sword_dodge_thrust', 1190), + (16750, 25224, 'backpack_2h_sword_enter', 1190), + (16751, 25225, 'backpack_2h_sword_exit', 1190), + (16752, 25226, 'backpack_2h_sword_feint', 1190), + (16753, 25227, 'backpack_2h_sword_idle', 1190), + (16754, 25228, 'backpack_2h_sword_kick', 1190), + (16755, 25229, 'backpack_2h_sword_offensive_buff', 1190), + (16756, 25230, 'backpack_2h_sword_ouch_backhand', 1190), + (16757, 25231, 'backpack_2h_sword_ouch_down', 1190), + (16758, 25232, 'backpack_2h_sword_ouch_forehand', 1190), + (16759, 25233, 'backpack_2h_sword_ouch_thrust', 1190), + (16760, 25234, 'backpack_2h_sword_parry_backhand', 1190), + (16761, 25235, 'backpack_2h_sword_parry_down', 1190), + (16762, 25236, 'backpack_2h_sword_parry_forehand', 1190), + (16763, 25237, 'backpack_2h_sword_parry_thrust', 1190), + (16764, 25238, 'backpack_2h_sword_strafe_left', 1190), + (16765, 25239, 'backpack_2h_sword_strafe_right', 1190), + (16766, 25240, 'backpack_2h_sword_super_buff', 1190), + (16767, 25241, 'backpack_2h_sword_taunt', 1190), + (16768, 25242, 'backpack_2h_sword_taunt_combat_art', 1190), + (16769, 25243, 'backpack_2h_sword_walk', 1190), + (16770, 25244, 'backpack_2h_sword_whirling_attack', 1190), + (16771, 25245, 'backpack_2h_sword_wild_swing', 1190), + (16772, 25246, 'backpack_alchemy_failure', 1190), + (16773, 25247, 'backpack_alchemy_idle', 1190), + (16774, 25248, 'backpack_alchemy_success', 1190), + (16775, 25249, 'backpack_applaude', 1190), + (16776, 25250, 'backpack_artificing_failure', 1190), + (16777, 25251, 'backpack_artificing_idle', 1190), + (16778, 25252, 'backpack_artificing_success', 1190), + (16779, 25253, 'backpack_attack', 1190), + (16780, 25254, 'backpack_bostaff_attack', 1190), + (16781, 25255, 'backpack_bostaff_attack01', 1190), + (16782, 25256, 'backpack_bostaff_attack02', 1190), + (16783, 25257, 'backpack_bostaff_attack03', 1190), + (16784, 25258, 'backpack_bostaff_attack_recoil', 1190), + (16785, 25259, 'backpack_bostaff_attack_recoil01', 1190), + (16786, 25260, 'backpack_bostaff_attack_recoil02', 1190), + (16787, 25261, 'backpack_bostaff_attack_recoil03', 1190), + (16788, 25262, 'backpack_bostaff_backup', 1190), + (16789, 25263, 'backpack_bostaff_charge_up', 1190), + (16790, 25264, 'backpack_bostaff_defensive_buff', 1190), + (16791, 25265, 'backpack_bostaff_dodge_backhand', 1190), + (16792, 25266, 'backpack_bostaff_dodge_down', 1190), + (16793, 25267, 'backpack_bostaff_dodge_forehand', 1190), + (16794, 25268, 'backpack_bostaff_dodge_thrust', 1190), + (16795, 25269, 'backpack_bostaff_enter', 1190), + (16796, 25270, 'backpack_bostaff_exit', 1190), + (16797, 25271, 'backpack_bostaff_feint', 1190), + (16798, 25272, 'backpack_bostaff_idle', 1190), + (16799, 25273, 'backpack_bostaff_kick', 1190), + (16800, 25274, 'backpack_bostaff_knockdowntoknees', 1190), + (16801, 25275, 'backpack_bostaff_knockedtoback', 1190), + (16802, 25276, 'backpack_bostaff_knockedtoback_getup', 1190), + (16803, 25277, 'backpack_bostaff_offensive_buff', 1190), + (16804, 25278, 'backpack_bostaff_ouch_backhand', 1190), + (16805, 25279, 'backpack_bostaff_ouch_down', 1190), + (16806, 25280, 'backpack_bostaff_ouch_forehand', 1190), + (16807, 25281, 'backpack_bostaff_ouch_thrust', 1190), + (16808, 25282, 'backpack_bostaff_parry_backhand', 1190), + (16809, 25283, 'backpack_bostaff_parry_down', 1190), + (16810, 25284, 'backpack_bostaff_parry_forehand', 1190), + (16811, 25285, 'backpack_bostaff_parry_thrust', 1190), + (16812, 25286, 'backpack_bostaff_strafe_left', 1190), + (16813, 25287, 'backpack_bostaff_strafe_right', 1190), + (16814, 25288, 'backpack_bostaff_super_buff', 1190), + (16815, 25289, 'backpack_bostaff_taunt_combat_art', 1190), + (16816, 25290, 'backpack_bostaff_walk', 1190), + (16817, 25291, 'backpack_bostaff_whirling_attack', 1190), + (16818, 25292, 'backpack_bostaff_wild_swing', 1190), + (16819, 25293, 'backpack_bow_aim_down', 1190), + (16820, 25294, 'backpack_bow_aim_up', 1190), + (16821, 25295, 'backpack_bow_attack', 1190), + (16822, 25296, 'backpack_bow_attack_2x', 1190), + (16823, 25297, 'backpack_bow_backup', 1190), + (16824, 25298, 'backpack_bow_dodge_backhand', 1190), + (16825, 25299, 'backpack_bow_dodge_down', 1190), + (16826, 25300, 'backpack_bow_dodge_forehand', 1190), + (16827, 25301, 'backpack_bow_dodge_thrust', 1190), + (16828, 25302, 'backpack_bow_enter', 1190), + (16829, 25303, 'backpack_bow_exit', 1190), + (16830, 25304, 'backpack_bow_idle', 1190), + (16831, 25305, 'backpack_bow_knockdowntoknees', 1190), + (16832, 25306, 'backpack_bow_knockedtoback', 1190), + (16833, 25307, 'backpack_bow_knockedtoback_getup', 1190), + (16834, 25308, 'backpack_bow_ouch_backhand', 1190), + (16835, 25309, 'backpack_bow_ouch_down', 1190), + (16836, 25310, 'backpack_bow_ouch_forehand', 1190), + (16837, 25311, 'backpack_bow_ouch_thrust', 1190), + (16838, 25312, 'backpack_bow_strafe_left', 1190), + (16839, 25313, 'backpack_bow_strafe_right', 1190), + (16840, 25314, 'backpack_bow_walk', 1190), + (16841, 25315, 'backpack_cast_aoe_beneficial_end', 1190), + (16842, 25316, 'backpack_cast_aoe_beneficial_loop', 1190), + (16843, 25317, 'backpack_cast_aoe_beneficial_start', 1190), + (16844, 25318, 'backpack_charge', 1190), + (16845, 25319, 'backpack_charge_up', 1190), + (16846, 25320, 'backpack_chop_ground_digging', 1190), + (16847, 25321, 'backpack_chop_ground_success', 1190), + (16848, 25322, 'backpack_climbing_backup', 1190), + (16849, 25323, 'backpack_climbing_enter_down', 1190), + (16850, 25324, 'backpack_climbing_enter_down_root', 1190), + (16851, 25325, 'backpack_climbing_exit_up', 1190), + (16852, 25326, 'backpack_climbing_exit_up_root', 1190), + (16853, 25327, 'backpack_climbing_idle', 1190), + (16854, 25328, 'backpack_climbing_idle01', 1190), + (16855, 25329, 'backpack_climbing_ouch', 1190), + (16856, 25330, 'backpack_climbing_strafe_left', 1190), + (16857, 25331, 'backpack_climbing_strafe_right', 1190), + (16858, 25332, 'backpack_climbing_walk', 1190), + (16859, 25333, 'backpack_combat_backup_run', 1190), + (16860, 25334, 'backpack_combat_run', 1190), + (16861, 25335, 'backpack_combat_strafe_left_run', 1190), + (16862, 25336, 'backpack_combat_strafe_right_run', 1190), + (16863, 25337, 'backpack_cooking_failure', 1190), + (16864, 25338, 'backpack_cooking_idle', 1190), + (16865, 25339, 'backpack_cooking_success', 1190), + (16866, 25340, 'backpack_crouch_backup', 1190), + (16867, 25341, 'backpack_crouch_enter', 1190), + (16868, 25342, 'backpack_crouch_exit', 1190), + (16869, 25343, 'backpack_crouch_idle', 1190), + (16870, 25344, 'backpack_crouch_strafe_left', 1190), + (16871, 25345, 'backpack_crouch_strafe_right', 1190), + (16872, 25346, 'backpack_crouch_turn_left', 1190), + (16873, 25347, 'backpack_crouch_turn_right', 1190), + (16874, 25348, 'backpack_crouch_walk', 1190), + (16875, 25349, 'backpack_cry', 1190), + (16876, 25350, 'backpack_dance', 1190), + (16877, 25351, 'backpack_dead', 1190), + (16878, 25352, 'backpack_dead_enter', 1190), + (16879, 25353, 'backpack_defensive_buff', 1190), + (16880, 25354, 'backpack_drink_chug', 1190), + (16881, 25355, 'backpack_drinking_failure', 1190), + (16882, 25356, 'backpack_drinking_idle', 1190), + (16883, 25357, 'backpack_drinking_success', 1190), + (16884, 25358, 'backpack_dual_wield_attack', 1190), + (16885, 25359, 'backpack_dual_wield_attack01', 1190), + (16886, 25360, 'backpack_dual_wield_attack02', 1190), + (16887, 25361, 'backpack_dual_wield_attack03', 1190), + (16888, 25362, 'backpack_dual_wield_attack_recoil', 1190), + (16889, 25363, 'backpack_dual_wield_attack_recoil01', 1190), + (16890, 25364, 'backpack_dual_wield_attack_recoil02', 1190), + (16891, 25365, 'backpack_dual_wield_attack_recoil03', 1190), + (16892, 25366, 'backpack_dual_wield_backup', 1190), + (16893, 25367, 'backpack_dual_wield_defensive_buff', 1190), + (16894, 25368, 'backpack_dual_wield_dodge_backhand', 1190), + (16895, 25369, 'backpack_dual_wield_dodge_down', 1190), + (16896, 25370, 'backpack_dual_wield_dodge_forehand', 1190), + (16897, 25371, 'backpack_dual_wield_dodge_thrust', 1190), + (16898, 25372, 'backpack_dual_wield_enter', 1190), + (16899, 25373, 'backpack_dual_wield_exit', 1190), + (16900, 25374, 'backpack_dual_wield_feint', 1190), + (16901, 25375, 'backpack_dual_wield_idle', 1190), + (16902, 25376, 'backpack_dual_wield_kick', 1190), + (16903, 25377, 'backpack_dual_wield_knockdowntoknees', 1190), + (16904, 25378, 'backpack_dual_wield_knockedtoback', 1190), + (16905, 25379, 'backpack_dual_wield_knockedtoback_getup', 1190), + (16906, 25380, 'backpack_dual_wield_offensive_buff', 1190), + (16907, 25381, 'backpack_dual_wield_ouch_backhand', 1190), + (16908, 25382, 'backpack_dual_wield_ouch_down', 1190), + (16909, 25383, 'backpack_dual_wield_ouch_forehand', 1190), + (16910, 25384, 'backpack_dual_wield_ouch_thrust', 1190), + (16911, 25385, 'backpack_dual_wield_parry_backhand', 1190), + (16912, 25386, 'backpack_dual_wield_parry_down', 1190), + (16913, 25387, 'backpack_dual_wield_parry_forehand', 1190), + (16914, 25388, 'backpack_dual_wield_parry_thrust', 1190), + (16915, 25389, 'backpack_dual_wield_strafe_left', 1190), + (16916, 25390, 'backpack_dual_wield_strafe_right', 1190), + (16917, 25391, 'backpack_dual_wield_super_buff', 1190), + (16918, 25392, 'backpack_dual_wield_taunt_combat_art', 1190), + (16919, 25393, 'backpack_dual_wield_walk', 1190), + (16920, 25394, 'backpack_dual_wield_whirling_attack', 1190), + (16921, 25395, 'backpack_dual_wield_wild_swing', 1190), + (16922, 25396, 'backpack_fall_moving', 1190), + (16923, 25397, 'backpack_feint', 1190), + (16924, 25398, 'backpack_fishing_cast', 1190), + (16925, 25399, 'backpack_fishing_fight', 1190), + (16926, 25400, 'backpack_fishing_reel_in', 1190), + (16927, 25401, 'backpack_flirt', 1190), + (16928, 25402, 'backpack_forestry_chopping', 1190), + (16929, 25403, 'backpack_forestry_success', 1190), + (16930, 25404, 'backpack_gag', 1190), + (16931, 25405, 'backpack_gathering_end', 1190), + (16932, 25406, 'backpack_gathering_loop', 1190), + (16933, 25407, 'backpack_gathering_search', 1190), + (16934, 25408, 'backpack_gathering_start', 1190), + (16935, 25409, 'backpack_gathering_success', 1190), + (16936, 25410, 'backpack_ghost_idle', 1190), + (16937, 25411, 'backpack_giggle', 1190), + (16938, 25412, 'backpack_glare', 1190), + (16939, 25413, 'backpack_hearnoevil', 1190), + (16940, 25414, 'backpack_heartattack', 1190), + (16941, 25415, 'backpack_hover_idle', 1190), + (16942, 25416, 'backpack_jump_moving', 1190), + (16943, 25417, 'backpack_kick', 1190), + (16944, 25418, 'backpack_knockdown_attack', 1190), + (16945, 25419, 'backpack_knockdowntoknees', 1190), + (16946, 25420, 'backpack_knockedtoback', 1190), + (16947, 25421, 'backpack_knockedtoback_getup', 1190), + (16948, 25422, 'backpack_knockedtoback_onbackidle', 1190), + (16949, 25423, 'backpack_leatherworking_failure', 1190), + (16950, 25424, 'backpack_leatherworking_idle', 1190), + (16951, 25425, 'backpack_leatherworking_success', 1190), + (16952, 25426, 'backpack_left_hand_fist', 1190), + (16953, 25427, 'backpack_left_hand_relaxed', 1190), + (16954, 25428, 'backpack_listen', 1190), + (16955, 25429, 'backpack_long_fall_moving', 1190), + (16956, 25430, 'backpack_metalworking_failure', 1190), + (16957, 25431, 'backpack_metalworking_idle', 1190), + (16958, 25432, 'backpack_metalworking_success', 1190), + (16959, 25433, 'backpack_mining_digging', 1190), + (16960, 25434, 'backpack_mining_success', 1190), + (16961, 25435, 'backpack_monk_attack', 1190), + (16962, 25436, 'backpack_monk_attack01', 1190), + (16963, 25437, 'backpack_monk_attack02', 1190), + (16964, 25438, 'backpack_monk_attack03', 1190), + (16965, 25439, 'backpack_monk_attack_recoil', 1190), + (16966, 25440, 'backpack_monk_attack_recoil01', 1190), + (16967, 25441, 'backpack_monk_attack_recoil02', 1190), + (16968, 25442, 'backpack_monk_attack_recoil03', 1190), + (16969, 25443, 'backpack_monk_backup', 1190), + (16970, 25444, 'backpack_monk_charge_up', 1190), + (16971, 25445, 'backpack_monk_defensive_buff', 1190), + (16972, 25446, 'backpack_monk_dodge_backhand', 1190), + (16973, 25447, 'backpack_monk_dodge_down', 1190), + (16974, 25448, 'backpack_monk_dodge_forehand', 1190), + (16975, 25449, 'backpack_monk_dodge_thrust', 1190), + (16976, 25450, 'backpack_monk_enter', 1190), + (16977, 25451, 'backpack_monk_exit', 1190), + (16978, 25452, 'backpack_monk_feint', 1190), + (16979, 25453, 'backpack_monk_idle', 1190), + (16980, 25454, 'backpack_monk_kick', 1190), + (16981, 25455, 'backpack_monk_kick_flying', 1190), + (16982, 25456, 'backpack_monk_kick_spin', 1190), + (16983, 25457, 'backpack_monk_knockdowntoknees', 1190), + (16984, 25458, 'backpack_monk_knockedtoback', 1190), + (16985, 25459, 'backpack_monk_knockedtoback_getup', 1190), + (16986, 25460, 'backpack_monk_offensive_buff', 1190), + (16987, 25461, 'backpack_monk_offensive_buff_short', 1190), + (16988, 25462, 'backpack_monk_ouch_backhand', 1190), + (16989, 25463, 'backpack_monk_ouch_down', 1190), + (16990, 25464, 'backpack_monk_ouch_forehand', 1190), + (16991, 25465, 'backpack_monk_ouch_thrust', 1190), + (16992, 25466, 'backpack_monk_parry_backhand', 1190), + (16993, 25467, 'backpack_monk_parry_down', 1190), + (16994, 25468, 'backpack_monk_parry_forehand', 1190), + (16995, 25469, 'backpack_monk_parry_thrust', 1190), + (16996, 25470, 'backpack_monk_strafe_left', 1190), + (16997, 25471, 'backpack_monk_strafe_right', 1190), + (16998, 25472, 'backpack_monk_super_buff', 1190), + (16999, 25473, 'backpack_monk_taunt_combat_art', 1190), + (17000, 25474, 'backpack_monk_walk', 1190), + (17001, 25475, 'backpack_monk_whirling_attack', 1190), + (17002, 25476, 'backpack_monk_wild_swing', 1190), + (17003, 25477, 'backpack_offensive_buff', 1190), + (17004, 25478, 'backpack_ouch', 1190), + (17005, 25479, 'backpack_pike_attack', 1190), + (17006, 25480, 'backpack_pike_attack01', 1190), + (17007, 25481, 'backpack_pike_attack02', 1190), + (17008, 25482, 'backpack_pike_attack03', 1190), + (17009, 25483, 'backpack_pike_attack_recoil', 1190), + (17010, 25484, 'backpack_pike_attack_recoil01', 1190), + (17011, 25485, 'backpack_pike_attack_recoil02', 1190), + (17012, 25486, 'backpack_pike_attack_recoil03', 1190), + (17013, 25487, 'backpack_pike_backup', 1190), + (17014, 25488, 'backpack_pike_charge_up', 1190), + (17015, 25489, 'backpack_pike_death_blow', 1190), + (17016, 25490, 'backpack_pike_defensive_buff', 1190), + (17017, 25491, 'backpack_pike_dodge_backhand', 1190), + (17018, 25492, 'backpack_pike_dodge_down', 1190), + (17019, 25493, 'backpack_pike_dodge_forehand', 1190), + (17020, 25494, 'backpack_pike_dodge_thrust', 1190), + (17021, 25495, 'backpack_pike_enter', 1190), + (17022, 25496, 'backpack_pike_exit', 1190), + (17023, 25497, 'backpack_pike_feint', 1190), + (17024, 25498, 'backpack_pike_idle', 1190), + (17025, 25499, 'backpack_pike_kick', 1190), + (17026, 25500, 'backpack_pike_knockdowntoknees', 1190), + (17027, 25501, 'backpack_pike_knockedtoback', 1190), + (17028, 25502, 'backpack_pike_knockedtoback_getup', 1190), + (17029, 25503, 'backpack_pike_offensive_buff', 1190), + (17030, 25504, 'backpack_pike_ouch_backhand', 1190), + (17031, 25505, 'backpack_pike_ouch_down', 1190), + (17032, 25506, 'backpack_pike_ouch_forehand', 1190), + (17033, 25507, 'backpack_pike_ouch_thrust', 1190), + (17034, 25508, 'backpack_pike_parry_backhand', 1190), + (17035, 25509, 'backpack_pike_parry_down', 1190), + (17036, 25510, 'backpack_pike_parry_forehand', 1190), + (17037, 25511, 'backpack_pike_parry_thrust', 1190), + (17038, 25512, 'backpack_pike_strafe_left', 1190), + (17039, 25513, 'backpack_pike_strafe_right', 1190), + (17040, 25514, 'backpack_pike_super_buff', 1190), + (17041, 25515, 'backpack_pike_taunt', 1190), + (17042, 25516, 'backpack_pike_walk', 1190), + (17043, 25517, 'backpack_pike_whirling_attack', 1190), + (17044, 25518, 'backpack_pike_wild_swing', 1190), + (17045, 25519, 'backpack_ponder', 1190), + (17046, 25520, 'backpack_pugilist_attack', 1190), + (17047, 25521, 'backpack_pugilist_attack01', 1190), + (17048, 25522, 'backpack_pugilist_attack02', 1190), + (17049, 25523, 'backpack_pugilist_attack03', 1190), + (17050, 25524, 'backpack_pugilist_attack_recoil', 1190), + (17051, 25525, 'backpack_pugilist_attack_recoil01', 1190), + (17052, 25526, 'backpack_pugilist_attack_recoil02', 1190), + (17053, 25527, 'backpack_pugilist_attack_recoil03', 1190), + (17054, 25528, 'backpack_pugilist_backup', 1190), + (17055, 25529, 'backpack_pugilist_charge_up', 1190), + (17056, 25530, 'backpack_pugilist_defensive_buff', 1190), + (17057, 25531, 'backpack_pugilist_dodge_backhand', 1190), + (17058, 25532, 'backpack_pugilist_dodge_down', 1190), + (17059, 25533, 'backpack_pugilist_dodge_forehand', 1190), + (17060, 25534, 'backpack_pugilist_dodge_thrust', 1190), + (17061, 25535, 'backpack_pugilist_enter', 1190), + (17062, 25536, 'backpack_pugilist_exit', 1190), + (17063, 25537, 'backpack_pugilist_feint', 1190), + (17064, 25538, 'backpack_pugilist_idle', 1190), + (17065, 25539, 'backpack_pugilist_kick', 1190), + (17066, 25540, 'backpack_pugilist_knockdowntoknees', 1190), + (17067, 25541, 'backpack_pugilist_knockedtoback', 1190), + (17068, 25542, 'backpack_pugilist_knockedtoback_getup', 1190), + (17069, 25543, 'backpack_pugilist_offensive_buff', 1190), + (17070, 25544, 'backpack_pugilist_ouch_backhand', 1190), + (17071, 25545, 'backpack_pugilist_ouch_down', 1190), + (17072, 25546, 'backpack_pugilist_ouch_forehand', 1190), + (17073, 25547, 'backpack_pugilist_ouch_thrust', 1190), + (17074, 25548, 'backpack_pugilist_parry_backhand', 1190), + (17075, 25549, 'backpack_pugilist_parry_down', 1190), + (17076, 25550, 'backpack_pugilist_parry_forehand', 1190), + (17077, 25551, 'backpack_pugilist_parry_thrust', 1190), + (17078, 25552, 'backpack_pugilist_strafe_left', 1190), + (17079, 25553, 'backpack_pugilist_strafe_right', 1190), + (17080, 25554, 'backpack_pugilist_super_buff', 1190), + (17081, 25555, 'backpack_pugilist_taunt', 1190), + (17082, 25556, 'backpack_pugilist_walk', 1190), + (17083, 25557, 'backpack_pugilist_whirling_attack', 1190), + (17084, 25558, 'backpack_pugilist_wild_swing', 1190), + (17085, 25559, 'backpack_resurrect', 1190), + (17086, 25560, 'backpack_right_hand_fist', 1190), + (17087, 25561, 'backpack_right_hand_relaxed', 1190), + (17088, 25562, 'backpack_rude', 1190), + (17089, 25563, 'backpack_sad', 1190), + (17090, 25564, 'backpack_salute_freeport', 1190), + (17091, 25565, 'backpack_scheme', 1190), + (17092, 25566, 'backpack_scratch', 1190), + (17093, 25567, 'backpack_scribing_idle', 1190), + (17094, 25568, 'backpack_seenoevil', 1190), + (17095, 25569, 'backpack_shame', 1190), + (17096, 25570, 'backpack_shield_block_backhand', 1190), + (17097, 25571, 'backpack_shield_block_down', 1190), + (17098, 25572, 'backpack_shield_block_forehand', 1190), + (17099, 25573, 'backpack_shield_block_thrust', 1190), + (17100, 25574, 'backpack_shield_shove', 1190), + (17101, 25575, 'backpack_shiver', 1190), + (17102, 25576, 'backpack_sit_drink', 1190), + (17103, 25577, 'backpack_sit_enter', 1190), + (17104, 25578, 'backpack_sit_exit', 1190), + (17105, 25579, 'backpack_sit_idle', 1190), + (17106, 25580, 'backpack_sneeze', 1190), + (17107, 25581, 'backpack_sniff', 1190), + (17108, 25582, 'backpack_speaknoevil', 1190), + (17109, 25583, 'backpack_square', 1190), + (17110, 25584, 'backpack_stinky', 1190), + (17111, 25585, 'backpack_sulk', 1190), + (17112, 25586, 'backpack_super_buff', 1190), + (17113, 25587, 'backpack_swim_attack', 1190), + (17114, 25588, 'backpack_swim_backup', 1190), + (17115, 25589, 'backpack_swim_idle', 1190), + (17116, 25590, 'backpack_swim_ouch', 1190), + (17117, 25591, 'backpack_swim_walk', 1190), + (17118, 25592, 'backpack_tail', 1190), + (17119, 25593, 'backpack_tailoring_failure', 1190), + (17120, 25594, 'backpack_tailoring_idle', 1190), + (17121, 25595, 'backpack_tailoring_success', 1190), + (17122, 25596, 'backpack_tapfoot', 1190), + (17123, 25597, 'backpack_taunt_combat_art', 1190), + (17124, 25598, 'backpack_threaten', 1190), + (17125, 25599, 'backpack_untrained_attack', 1190), + (17126, 25600, 'backpack_untrained_backup', 1190), + (17127, 25601, 'backpack_untrained_dodge', 1190), + (17128, 25602, 'backpack_untrained_dodge01', 1190), + (17129, 25603, 'backpack_untrained_dodge02', 1190), + (17130, 25604, 'backpack_untrained_idle', 1190), + (17131, 25605, 'backpack_untrained_ouch', 1190), + (17132, 25606, 'backpack_untrained_ouch01', 1190), + (17133, 25607, 'backpack_untrained_parry', 1190), + (17134, 25608, 'backpack_untrained_recoil', 1190), + (17135, 25609, 'backpack_untrained_strafe_left', 1190), + (17136, 25610, 'backpack_untrained_strafe_right', 1190), + (17137, 25611, 'backpack_untrained_walk', 1190), + (17138, 25612, 'backpack_whirling_attack', 1190), + (17139, 25613, 'backpack_whistle', 1190), + (17140, 25614, 'backpack_wild_swing', 1190), + (17141, 25615, 'backpack_wild_swing_recoilmax', 1190), + (17142, 25616, 'backpack_woodworking_failure', 1190), + (17143, 25617, 'backpack_woodworking_idle', 1190), + (17144, 25618, 'backpack_woodworking_success', 1190), + (17145, 25619, 'backpack_worship_idle', 1190), + (17146, 25620, 'backpack_yeah', 1190), + (17147, 25623, 'attachment', 1190), + (17148, 25624, 'cast_gather_flowers', 1190), + (17149, 25630, 'jump_punch', 1190), + (17150, 25631, 'result_flowers_spew', 1190), + (17151, 25634, 'attack_spit', 1190), + (17152, 25637, 'cast_rocky_uprising', 1190), + (17153, 25640, 'flurry_kick', 1190), + (17154, 25645, 'cast_raptor_claws', 1190), + (17155, 25649, 'result_raptor_spit_p2p', 1190), + (17156, 25650, '2h_twirl', 1190), + (17157, 25653, '_idle01', 1190), + (17158, 25654, '_idle02', 1190), + (17159, 25655, 'cast01_enter', 1190), + (17160, 25656, 'cast01_exit', 1190), + (17161, 25657, 'cast01_idle', 1190), + (17162, 25658, 'cast02_enter', 1190), + (17163, 25659, 'cast02_exit', 1190), + (17164, 25660, 'cast02_idle', 1190), + (17165, 25666, 'pike_twirl', 1190), + (17166, 25685, 'sound_buff_02', 1190), + (17167, 25688, 'attack_flame', 1190), + (17168, 25693, 'injured_idle', 1190), + (17169, 25713, 'snd_wing_flap', 1190), + (17170, 25714, '2h_cast_enter', 1190), + (17171, 25715, '2h_cast_exit', 1190), + (17172, 25716, '2h_cast_idle', 1190), + (17173, 25728, 'snd_fs', 1190), + (17174, 25729, 'snd_jump_whoosh', 1190), + (17175, 25732, 'cast_belly_flop', 1190), + (17176, 25735, 'cast_rocky_blast', 1190), + (17177, 25738, 'draconian_injured_idle', 1190), + (17178, 25739, 'draconian_search_enter', 1190), + (17179, 25740, 'draconian_search_exit', 1190), + (17180, 25741, 'draconian_search_idle', 1190), + (17181, 25743, 'result_lumpy_spit_p2p', 1190), + (17182, 25750, 'design_illusion_fail', 1190), + (17183, 25752, 'knocktoknees_exit', 1190), + (17184, 25759, 'golem_fx_tubes', 1190), + (17185, 25760, 'golem_summon_fx', 1190), + (17186, 25764, 'snd_dbg_spawn', 1190), + (17187, 25765, 'snd_death', 1190), + (17188, 25768, 'snd_fs_l', 1190), + (17189, 25769, 'snd_fs_r', 1190), + (17190, 25770, 'snd_jump', 1190), + (17191, 25772, 'snd_offensive_buff', 1190), + (17192, 25786, 'snd_whirl_attk', 1190), + (17193, 25787, 'sound_cast', 1190), + (17194, 25794, 'drakota_run_glide', 1190), + (17195, 25797, 'ice_cube_trail_lf', 1190), + (17196, 25798, 'ice_cube_trail_lr', 1190), + (17197, 25799, 'ice_cube_trail_rf', 1190), + (17198, 25800, 'ice_cube_trail_rr', 1190), + (17199, 25805, 'ice_cube_scratch', 1190), + (17200, 25808, 'snd_charge_up', 1190), + (17201, 25809, 'snd_1h_sword_attack', 1190), + (17202, 25810, 'snd_1h_sword_attack01', 1190), + (17203, 25811, 'snd_1h_sword_attack02', 1190), + (17204, 25812, 'snd_1h_sword_attack03', 1190), + (17205, 25813, 'snd_1h_sword_enter', 1190), + (17206, 25814, 'snd_1h_sword_exit', 1190), + (17207, 25816, 'snd_cast02_yell', 1190), + (17208, 25817, 'snd_converse02', 1190), + (17209, 25818, 'snd_dual_wield_attack', 1190), + (17210, 25819, 'snd_dual_wield_attack01', 1190), + (17211, 25820, 'snd_dual_wield_attack02', 1190), + (17212, 25821, 'snd_dual_wield_attack03', 1190), + (17213, 25826, 'snd_idle_02', 1190), + (17214, 25833, 'cast_foot_vine_stomp', 1190), + (17215, 25836, 'cast_thorn_circle', 1190), + (17216, 25837, 'cast_thorn_clap', 1190), + (17217, 25841, 'land_enter', 1190), + (17218, 25842, 'land_exit', 1190), + (17219, 25843, 'result_wl_root_grow_trap', 1190), + (17220, 25846, 'snd_bf', 1190), + (17221, 25865, 'snd_whirling_attack', 1190), + (17222, 25866, 'snd_wild_swing', 1190), + (17223, 25873, 'cast_eat_snowball', 1190), + (17224, 25874, 'cast_frog_eat', 1190), + (17225, 25879, 'eaten_angler', 1190), + (17226, 25881, 'intro', 1190), + (17227, 25889, 'snd_ouch', 1190), + (17228, 25914, 'splash_fx', 1190), + (17229, 25921, 'angler_mount_idle03', 1190), + (17230, 25926, 'design_obelisk_broken', 1190), + (17231, 25927, 'design_obelisk_repair1', 1190), + (17232, 25938, 'design_obelisk_complete', 1190), + (17233, 25939, 'design_obelisk_fixed', 1190), + (17234, 25940, 'design_obelisk_repair2', 1190), + (17235, 25941, 'float', 1190), + (17236, 25943, 'sacrifice', 1190), + (17237, 25950, 'attack_dive', 1190), + (17238, 25955, 'design_obelisk_repair3', 1190), + (17239, 25956, 'design_obelisk_repair4', 1190), + (17240, 25963, 'attack_hug', 1190), + (17241, 25964, 'attack_roar', 1190), + (17242, 25965, 'cast_obelisk_rock_summon', 1190), + (17243, 25966, 'cast_obelisk_wisps_summon', 1190), + (17244, 26003, 'wing_bolts_fx', 1190), + (17245, 26012, 'cast_sacrifice_disperse', 1190), + (17246, 26013, 'cast_sacrifice_stab', 1190), + (17247, 26016, 'design_sky_chokidai_summon', 1190), + (17248, 26017, 'design_sky_drake_summon', 1190), + (17249, 26018, 'design_sky_plant_summon', 1190), + (17250, 26019, 'design_sky_raptor_summon', 1190), + (17251, 26026, 'cast_eye_blast', 1190), + (17252, 26031, 'design_skyward_comm_beam', 1190), + (17253, 26032, 'fly_hover', 1190), + (17254, 26033, 'ground_blast_fx', 1190), + (17255, 26059, 'sound_teleport_in', 1190), + (17256, 26067, 'wing_buffet_fx', 1190), + (17257, 26074, 'breath_attack_ice', 1190), + (17258, 26075, 'breath_attack_necro', 1190), + (17259, 26082, 'attack05', 1190), + (17260, 26085, 'cast_shadow_appear', 1190), + (17261, 26086, 'cast_teleport_down_fx', 1190), + (17262, 26089, 'fly_enter_idle', 1190), + (17263, 26091, 'result_banish_fx', 1190), + (17264, 26092, 'result_cage_cube', 1190), + (17265, 26103, 'dontuse_fly_enter_idle', 1190), + (17266, 26110, 'attack_arm', 1190), + (17267, 26111, 'cast_druid_light_beams', 1190), + (17268, 26114, 'cast_storm_light_parting', 1190), + (17269, 26115, 'cast_storm_rain_lightning', 1190), + (17270, 26121, 'snd_attack', 1190), + (17271, 26122, 'snd_attack01', 1190), + (17272, 26123, 'snd_attack02', 1190), + (17273, 26124, 'snd_attack03', 1190), + (17274, 26125, 'snd_attack_dive', 1190), + (17275, 26126, 'snd_attack_hug', 1190), + (17276, 26127, 'snd_cast', 1190), + (17277, 26128, 'snd_cast_1', 1190), + (17278, 26129, 'snd_combat_enter', 1190), + (17279, 26130, 'snd_combat_idle01', 1190), + (17280, 26131, 'snd_dead_enter', 1190), + (17281, 26132, 'snd_defensive_buff', 1190), + (17282, 26137, 'snd_fs_mud_01', 1190), + (17283, 26138, 'snd_fs_mud_02', 1190), + (17284, 26140, 'snd_run', 1190), + (17285, 26151, 'design_target_aoe_green', 1190), + (17286, 26152, 'design_target_aoe_purple', 1190), + (17287, 26159, 'aa_bar_heal', 1190), + (17288, 26160, 'aa_blood_burst', 1190), + (17289, 26161, 'aa_blood_lust', 1190), + (17290, 26162, 'aa_bubble_shield', 1190), + (17291, 26163, 'aa_bubble_shield_in', 1190), + (17292, 26164, 'aa_cloud_blast', 1190), + (17293, 26165, 'aa_cloud_buff_out', 1190), + (17294, 26166, 'aa_cloud_ring_burst', 1190), + (17295, 26167, 'aa_cold_blast', 1190), + (17296, 26168, 'aa_cyclone', 1190), + (17297, 26169, 'aa_dark_cyclone', 1190), + (17298, 26170, 'aa_dark_ring_vanish', 1190), + (17299, 26171, 'aa_divine_hit', 1190), + (17300, 26172, 'aa_fire_column', 1190), + (17301, 26173, 'aa_flurry_daggers', 1190), + (17302, 26174, 'aa_forced_shader_burst', 1190), + (17303, 26175, 'aa_glow_eyes', 1190), + (17304, 26176, 'aa_hand_buff', 1190), + (17305, 26177, 'aa_hand_cross_dark', 1190), + (17306, 26178, 'aa_hand_dark_rings', 1190), + (17307, 26179, 'aa_hand_flare', 1190), + (17308, 26180, 'aa_hand_leaf', 1190), + (17309, 26181, 'aa_hand_pattern', 1190), + (17310, 26182, 'aa_hand_runes', 1190), + (17311, 26183, 'aa_hand_sparkles', 1190), + (17312, 26184, 'aa_hand_sparkles_dark', 1190), + (17313, 26185, 'aa_hand_sparks', 1190), + (17314, 26186, 'aa_hand_stars', 1190), + (17315, 26187, 'aa_hand_stars_dark', 1190), + (17316, 26188, 'aa_head_halo', 1190), + (17317, 26189, 'aa_heal_hands_blast', 1190), + (17318, 26190, 'aa_ice_comet', 1190), + (17319, 26191, 'aa_ice_comet_shower', 1190), + (17320, 26192, 'aa_light_ward', 1190), + (17321, 26193, 'aa_lightning_bolt', 1190), + (17322, 26194, 'aa_massive_hit', 1190), + (17323, 26195, 'aa_music_beam_p2p', 1190), + (17324, 26196, 'aa_plasma_hit', 1190), + (17325, 26197, 'aa_poison_spore_p2p', 1190), + (17326, 26198, 'aa_radiant_glow', 1190), + (17327, 26199, 'aa_rune_buff_brawler', 1190), + (17328, 26200, 'aa_rune_drop_base', 1190), + (17329, 26201, 'aa_rune_forward', 1190), + (17330, 26202, 'aa_rune_in_buff', 1190), + (17331, 26203, 'aa_rune_rise_base', 1190), + (17332, 26204, 'aa_rune_rise_buff', 1190), + (17333, 26205, 'aa_shimmer_arrow_p2p', 1190), + (17334, 26206, 'aa_snow_tempest', 1190), + (17335, 26207, 'aa_sound_rings_head', 1190), + (17336, 26208, 'aa_sparkle_trail_weapon_blend', 1190), + (17337, 26209, 'aa_spirit_growing', 1190), + (17338, 26210, 'aa_spirit_swirl_shield', 1190), + (17339, 26211, 'aa_swirly_heal', 1190), + (17340, 26216, 'gather_enter', 1190), + (17341, 26217, 'gather_exit', 1190), + (17342, 26218, 'gather_idle', 1190), + (17343, 26251, 'tough_idle', 1190), + (17344, 26252, 'tough_idle_enter', 1190), + (17345, 26253, 'tough_idle_exit', 1190), + (17346, 26260, 'cast_armament_buff', 1190), + (17347, 26261, 'cast_ember_breath', 1190), + (17348, 26268, 'cast_burrow_dust_fx', 1190), + (17349, 26273, 'design_target_aoe_yellow', 1190), + (17350, 26275, 'result_ember_fire_engulfed', 1190), + (17351, 26276, 'result_explode', 1190), + (17352, 26277, 'result_queen_bug_spit_p2p', 1190), + (17353, 26280, 'snd_doz_attack', 1190), + (17354, 26281, 'snd_doz_attack_01', 1190), + (17355, 26282, 'snd_doz_attack_02', 1190), + (17356, 26283, 'snd_doz_attack_03', 1190), + (17357, 26284, 'snd_doz_cast', 1190), + (17358, 26285, 'snd_doz_combat_enter', 1190), + (17359, 26286, 'snd_doz_death', 1190), + (17360, 26287, 'snd_doz_dodge', 1190), + (17361, 26288, 'snd_doz_flyin_01', 1190), + (17362, 26289, 'snd_doz_flyin_land', 1190), + (17363, 26290, 'snd_doz_kick', 1190), + (17364, 26291, 'snd_doz_knocktoknees', 1190), + (17365, 26292, 'snd_doz_ouch', 1190), + (17366, 26293, 'snd_doz_roar_01', 1190), + (17367, 26294, 'snd_doz_shieldshove', 1190), + (17368, 26295, 'snd_doz_whirl_attack', 1190), + (17369, 26296, 'snd_doz_wildswing', 1190), + (17370, 26303, 'cast_hand_fire_trails', 1190), + (17371, 26306, 'cast_wing_blast', 1190), + (17372, 26313, 'cast_pillar_spin', 1190), + (17373, 26325, 'prestige_point_acquired', 1190), + (17374, 26326, 'result_vaporize', 1190), + (17375, 26335, 'cast_tail_fx', 1190), + (17376, 26342, '_dodge_backhand', 1190), + (17377, 26343, '_dodge_down', 1190), + (17378, 26344, '_dodge_forehand', 1190), + (17379, 26345, '_dodge_thrust', 1190), + (17380, 26346, '_knockeddowntoknees', 1190), + (17381, 26347, '_knockedtoback', 1190), + (17382, 26348, '_knockedtoback_getup', 1190), + (17383, 26349, '_knockedtoback_onbackidle', 1190), + (17384, 26350, '_ouch', 1190), + (17385, 26351, '_ouch_backhand', 1190), + (17386, 26352, '_ouch_down', 1190), + (17387, 26353, '_ouch_forehand', 1190), + (17388, 26354, '_ouch_thrust', 1190), + (17389, 26355, 'cast_magic_breath', 1190), + (17390, 26356, 'cast_noxious_breath', 1190), + (17391, 26358, 'cast_prestige_fx', 1190), + (17392, 26365, 'cast_fire_blast', 1190), + (17393, 26371, 'result_dark_vaporize', 1190), + (17394, 26372, 'result_time_warp', 1190), + (17395, 26383, 'gathering_tail_cloak', 1190), + (17396, 26390, 'cast_belly_blast', 1190), + (17397, 26391, 'cast_dark_shout', 1190), + (17398, 26392, 'cast_debris', 1190), + (17399, 26393, 'cast_fire_breath', 1190), + (17400, 26396, 'cast_sonic_blast', 1190), + (17401, 26397, 'ch', 1190), + (17402, 26400, 'eyes rotate down', 1190), + (17403, 26401, 'eyes rotate left', 1190), + (17404, 26402, 'eyes rotate right', 1190), + (17405, 26403, 'eyes rotate up', 1190), + (17406, 26405, 'jaw rotate y max', 1190), + (17407, 26406, 'jaw rotate y min', 1190), + (17408, 26407, 'jaw rotate z max', 1190), + (17409, 26408, 'jaw rotate z min', 1190), + (17410, 26409, 'left blink', 1190), + (17411, 26410, 'left brow down', 1190), + (17412, 26411, 'left brow up', 1190), + (17413, 26412, 'left eye wide', 1190), + (17414, 26413, 'left frown', 1190), + (17415, 26414, 'lower lip roll in', 1190), + (17416, 26415, 'lower lip roll out', 1190), + (17417, 26416, 'mbp', 1190), + (17418, 26417, 'mid brows down', 1190), + (17419, 26418, 'mid brows up', 1190), + (17420, 26419, 'mouth down', 1190), + (17421, 26420, 'mouth open', 1190), + (17422, 26421, 'mouth up', 1190), + (17423, 26422, 'normal fv', 1190), + (17424, 26423, 'oo tight', 1190), + (17425, 26424, 'right blink', 1190), + (17426, 26425, 'right brow down', 1190), + (17427, 26426, 'right brow up', 1190), + (17428, 26427, 'right eye wide', 1190), + (17429, 26428, 'right frown', 1190), + (17430, 26429, 'scrunch left', 1190), + (17431, 26430, 'scrunch right', 1190), + (17432, 26432, 'smile left', 1190), + (17433, 26433, 'smile right', 1190), + (17434, 26464, 'upper lip left up', 1190), + (17435, 26465, 'upper lip right up', 1190), + (17436, 26466, 'upper lip roll in', 1190), + (17437, 26467, 'upper lip roll out', 1190), + (17438, 26474, 'base_rest', 1190), + (17439, 26475, 'cast_flaming_wings', 1190), + (17440, 26480, 'eyes_rotate_down', 1190), + (17441, 26481, 'eyes_rotate_left', 1190), + (17442, 26482, 'eyes_rotate_right', 1190), + (17443, 26483, 'eyes_rotate_up', 1190), + (17444, 26485, 'jaw_rotate_y_max', 1190), + (17445, 26486, 'jaw_rotate_y_min', 1190), + (17446, 26487, 'jaw_rotate_z_max', 1190), + (17447, 26488, 'jaw_rotate_z_min', 1190), + (17448, 26489, 'left_blink', 1190), + (17449, 26490, 'left_brow_down', 1190), + (17450, 26491, 'left_brow_up', 1190), + (17451, 26492, 'left_eye_wide', 1190), + (17452, 26493, 'left_frown', 1190), + (17453, 26494, 'mid_brows_down', 1190), + (17454, 26495, 'mid_brows_up', 1190), + (17455, 26496, 'mouth_down', 1190), + (17456, 26497, 'mouth_open', 1190), + (17457, 26498, 'mouth_up', 1190), + (17458, 26499, 'normalfv', 1190), + (17459, 26500, 'oo_tight', 1190), + (17460, 26501, 'right_blink', 1190), + (17461, 26502, 'right_brow_down', 1190), + (17462, 26503, 'right_brow_up', 1190), + (17463, 26504, 'right_eye_wide', 1190), + (17464, 26505, 'right_frown', 1190), + (17465, 26506, 'scrunch_left', 1190), + (17466, 26507, 'scrunch_right', 1190), + (17467, 26509, 'smile_big_left', 1190), + (17468, 26510, 'smile_big_right', 1190), + (17469, 26541, 'upper_lip_left_up', 1190), + (17470, 26542, 'upper_lip_right_up', 1190), + (17471, 26557, 'snd_doz_big_whoosh', 1190), + (17472, 26558, 'snd_doz_big_whoosh_02', 1190), + (17473, 26565, 'aa_notes_blast', 1190), + (17474, 26566, 'aa_stabbing_blades', 1190), + (17475, 26580, 'snd_lumpy_1h_sword_attack01', 1190), + (17476, 26581, 'snd_lumpy_attack', 1190), + (17477, 26582, 'snd_lumpy_attack_01', 1190), + (17478, 26583, 'snd_lumpy_attack_02', 1190), + (17479, 26584, 'snd_lumpy_attack_03', 1190), + (17480, 26585, 'snd_lumpy_attack_bite', 1190), + (17481, 26586, 'snd_lumpy_attack_bites', 1190), + (17482, 26587, 'snd_lumpy_attack_breath', 1190), + (17483, 26588, 'snd_lumpy_attack_shuffle', 1190), + (17484, 26589, 'snd_lumpy_attack_slam', 1190), + (17485, 26590, 'snd_lumpy_attack_tail', 1190), + (17486, 26591, 'snd_lumpy_cast_1', 1190), + (17487, 26592, 'snd_lumpy_combat_enter', 1190), + (17488, 26593, 'snd_lumpy_dead_enter', 1190), + (17489, 26594, 'snd_lumpy_roll', 1190), + (17490, 26627, 'sound_attack_flame', 1190), + (17491, 26628, 'sound_attack_tail', 1190), + (17492, 26629, 'sound_bites', 1190), + (17493, 26630, 'sound_defensive_buff', 1190), + (17494, 26634, 'sound_idle_01', 1190), + (17495, 26649, 'snd_attack04', 1190), + (17496, 26654, 'snd_fs_mud', 1190), + (17497, 26656, 'snd_mud_elem_attack', 1190), + (17498, 26657, 'snd_mud_elem_attack01', 1190), + (17499, 26658, 'snd_mud_elem_attack02', 1190), + (17500, 26659, 'snd_mud_elem_chargeup', 1190), + (17501, 26660, 'snd_mud_elem_dead_enter', 1190), + (17502, 26661, 'snd_mud_elem_dodge_fore', 1190), + (17503, 26662, 'snd_mud_elem_knocktoback', 1190), + (17504, 26663, 'snd_mud_elem_knocktoknees', 1190), + (17505, 26664, 'snd_mud_elem_ouch_thrust', 1190), + (17506, 26665, 'snd_mud_elem_shield_shove', 1190), + (17507, 26666, 'snd_mud_elem_whirl_attack', 1190), + (17508, 26667, 'snd_mud_elem_wildswing', 1190), + (17509, 26668, 'snd_mud_vox_attck_01', 1190), + (17510, 26669, 'snd_mud_vox_attck_02', 1190), + (17511, 26670, 'snd_mud_vox_attck_roar', 1190), + (17512, 26671, 'snd_mud_vox_cast_1', 1190), + (17513, 26672, 'snd_mud_vox_dead_enter', 1190), + (17514, 26673, 'snd_mud_vox_def_buff', 1190), + (17515, 26684, 'drakota_mount_fly_fall', 1190), + (17516, 26687, 'prestige_point_sound', 1190), + (17517, 26690, 'snd_cast4', 1190), + (17518, 26691, 'snd_doz_spawn', 1190), + (17519, 26710, 'snd_xygoz1_attack', 1190), + (17520, 26711, 'snd_xygoz1_attack01', 1190), + (17521, 26712, 'snd_xygoz1_attack02', 1190), + (17522, 26713, 'snd_xygoz1_attack03', 1190), + (17523, 26714, 'snd_xygoz1_attack_flame', 1190), + (17524, 26715, 'snd_xygoz1_attack_tail', 1190), + (17525, 26716, 'snd_xygoz1_dead_enter', 1190), + (17526, 26717, 'snd_xygoz1_idle01', 1190), + (17527, 26718, 'snd_xygoz1_knockedtoback', 1190), + (17528, 26719, 'snd_xygoz1_superbuff', 1190), + (17529, 26734, 'snd_drakota_vox_01', 1190), + (17530, 26735, 'snd_drakota_vox_02', 1190), + (17531, 26736, 'snd_drakota_vox_03', 1190), + (17532, 26748, 'lower_lip_left_down', 1190), + (17533, 26749, 'lower_lip_right_down', 1190), + (17534, 26760, 'design_skyshrine_time_rift', 1190), + (17535, 26767, '_left_eye_wide', 1190), + (17536, 26768, '_right_eye_wide', 1190), + (17537, 26812, 'yes', 1190), + (17538, 26843, 'snd_vox_short', 1190), + (17539, 26856, 'result_beetle_fireball_p2p', 1190), + (17540, 26888, 'summon_01', 1190), + (17541, 26889, '1h_sword_cast', 1190), + (17542, 26890, '1h_sword_cast_enter', 1190), + (17543, 26891, '1h_sword_cast_exit', 1190), + (17544, 26892, '1h_sword_cast_idle', 1190), + (17545, 26893, '1h_sword_combat_art_buff', 1190), + (17546, 26894, '1h_sword_combat_enter', 1190), + (17547, 26901, 'aa_lightning_blast_hit', 1190), + (17548, 26907, 'knocked_to_back', 1190), + (17549, 26908, 'knocked_to_back_getup', 1190), + (17550, 26909, 'knocked_to_back_idle', 1190), + (17551, 26920, 'design_groundportal_rift', 1190), + (17552, 26931, 'design_corrupted', 1190), + (17553, 26934, 'result_light_explode', 1190), + (17554, 26945, 'design_qey_mage_tower_fire', 1190), + (17555, 26946, 'design_qey_portal_from_hell', 1190), + (17556, 26953, 'aa_time_warp', 1190), + (17557, 26959, 'knockedtoknees_dead', 1190), + (17558, 26961, 'persist_magic_damage', 1190), + (17559, 26972, 'design_qey_fire_room', 1190), + (17560, 26973, 'design_qey_wall_crack', 1190), + (17561, 26976, 'read_book', 1190), + (17562, 27020, 'summon_fx_long', 1190), + (17563, 27021, 'summon_fx_short', 1190), + (17564, 27022, 'time_stop_sound', 1190), + (17565, 27029, 'aa_mental_damage', 1190), + (17566, 27030, 'aa_mental_smite', 1190), + (17567, 27031, 'aa_soothe', 1190), + (17568, 27036, 'idlea', 1190), + (17569, 27037, 'idlleb', 1190), + (17570, 27071, 'winged_lion_backup', 1190), + (17571, 27072, 'winged_lion_fall', 1190), + (17572, 27073, 'winged_lion_fly_backup', 1190), + (17573, 27074, 'winged_lion_fly_climb', 1190), + (17574, 27075, 'winged_lion_fly_dive', 1190), + (17575, 27076, 'winged_lion_fly_down', 1190), + (17576, 27077, 'winged_lion_fly_glide', 1190), + (17577, 27078, 'winged_lion_fly_glide_left', 1190), + (17578, 27079, 'winged_lion_fly_glide_right', 1190), + (17579, 27080, 'winged_lion_fly_idle', 1190), + (17580, 27081, 'winged_lion_fly_run', 1190), + (17581, 27082, 'winged_lion_fly_strafe_left', 1190), + (17582, 27083, 'winged_lion_fly_strafe_right', 1190), + (17583, 27084, 'winged_lion_fly_turn_left', 1190), + (17584, 27085, 'winged_lion_fly_turn_right', 1190), + (17585, 27086, 'winged_lion_fly_up', 1190), + (17586, 27087, 'winged_lion_fly_walk', 1190), + (17587, 27088, 'winged_lion_idle', 1190), + (17588, 27089, 'winged_lion_idle01', 1190), + (17589, 27090, 'winged_lion_jump', 1190), + (17590, 27091, 'winged_lion_jump_substitute', 1190), + (17591, 27092, 'winged_lion_land', 1190), + (17592, 27093, 'winged_lion_long_fall', 1190), + (17593, 27094, 'winged_lion_run', 1190), + (17594, 27095, 'winged_lion_turn_left', 1190), + (17595, 27096, 'winged_lion_turn_right', 1190), + (17596, 27097, 'winged_lion_walk', 1190), + (17597, 27108, 'idle_a', 1190), + (17598, 27109, 'idle_b', 1190), + (17599, 27110, 'idle_c', 1190), + (17600, 27121, 'evil_bird_backup', 1190), + (17601, 27122, 'evil_bird_fall', 1190), + (17602, 27123, 'evil_bird_fly_backup', 1190), + (17603, 27124, 'evil_bird_fly_climb', 1190), + (17604, 27125, 'evil_bird_fly_dive', 1190), + (17605, 27126, 'evil_bird_fly_down', 1190), + (17606, 27127, 'evil_bird_fly_glide', 1190), + (17607, 27128, 'evil_bird_fly_glide_left', 1190), + (17608, 27129, 'evil_bird_fly_glide_right', 1190), + (17609, 27130, 'evil_bird_fly_idle', 1190), + (17610, 27131, 'evil_bird_fly_run', 1190), + (17611, 27132, 'evil_bird_fly_strafe_left', 1190), + (17612, 27133, 'evil_bird_fly_strafe_right', 1190), + (17613, 27134, 'evil_bird_fly_turn_left', 1190), + (17614, 27135, 'evil_bird_fly_turn_right', 1190), + (17615, 27136, 'evil_bird_fly_up', 1190), + (17616, 27137, 'evil_bird_fly_walk', 1190), + (17617, 27138, 'evil_bird_idle', 1190), + (17618, 27139, 'evil_bird_idle01', 1190), + (17619, 27140, 'evil_bird_idle02', 1190), + (17620, 27141, 'evil_bird_idle03', 1190), + (17621, 27142, 'evil_bird_idle04', 1190), + (17622, 27143, 'evil_bird_jump', 1190), + (17623, 27144, 'evil_bird_jump_substitute', 1190), + (17624, 27145, 'evil_bird_land', 1190), + (17625, 27146, 'evil_bird_long_fall', 1190), + (17626, 27147, 'evil_bird_run', 1190), + (17627, 27148, 'evil_bird_turn_left', 1190), + (17628, 27149, 'evil_bird_turn_right', 1190), + (17629, 27150, 'evil_bird_walk', 1190), + (17630, 27152, 'lion_winged_backup', 1190), + (17631, 27153, 'lion_winged_fly_backup', 1190), + (17632, 27154, 'lion_winged_fly_idle', 1190), + (17633, 27155, 'lion_winged_fly_run', 1190), + (17634, 27156, 'lion_winged_fly_strafe_left', 1190), + (17635, 27157, 'lion_winged_fly_strafe_right', 1190), + (17636, 27158, 'lion_winged_fly_turn_left', 1190), + (17637, 27159, 'lion_winged_fly_turn_right', 1190), + (17638, 27160, 'lion_winged_fly_walk', 1190), + (17639, 27161, 'lion_winged_idle01', 1190), + (17640, 27162, 'lion_winged_jump', 1190), + (17641, 27163, 'lion_winged_jump_substitute', 1190), + (17642, 27164, 'lion_winged_run', 1190), + (17643, 27165, 'lion_winged_turn_left', 1190), + (17644, 27166, 'lion_winged_turn_right', 1190), + (17645, 27167, 'lion_winged_walk', 1190), + (17646, 27178, 'dance_a', 1190), + (17647, 27179, 'dance_base', 1190), + (17648, 27186, 'aa_rune_blur_circular', 1190), + (17649, 27192, 'knockdowntoknees_enter', 1190), + (17650, 27193, 'knockdowntoknees_exit', 1190), + (17651, 27194, 'knockdowntoknees_idle', 1190), + (17652, 27201, 'aa_earth_summon', 1190), + (17653, 27202, 'aa_summon_minion', 1190), + (17654, 27209, 'aa_rune_chain_swirl', 1190), + (17655, 27210, 'aa_spirit_heal', 1190), + (17656, 27223, 'scream01', 1190), + (17657, 27244, 'soul_idle', 1190), + (17658, 27245, 'soul_suck_fx', 1190), + (17659, 27246, 'soulsuck_enter', 1190), + (17660, 27247, 'soulsuck_idle', 1190), + (17661, 27254, 'bg_achievement_acquired', 1190), + (17662, 27259, 'design_cloudy_dream', 1190), + (17663, 27260, 'design_kerafyrm_barrier', 1190), + (17664, 27263, 'result_cloudy_dream', 1190), + (17665, 27295, 'winged_lion_fly_fall', 1190), + (17666, 27302, 'aa_result_leash', 1190), + (17667, 27315, 'result_sullon_shadow_curse', 1190), + (17668, 27326, 'evil_bird_idle_egg', 1190), + (17669, 27339, 'result_blood_craze', 1190), + (17670, 27340, 'result_blood_craze_p2p', 1190), + (17671, 27341, 'result_blood_wash', 1190), + (17672, 27342, 'result_extract_will_p2p', 1190), + (17673, 27355, 'result_idol_corruption_p2p', 1190), + (17674, 27366, 'design_damage_level1', 1190), + (17675, 27367, 'design_damage_level2', 1190), + (17676, 27368, 'design_damage_level3', 1190), + (17677, 27369, 'design_damage_level4', 1190), + (17678, 27370, 'design_damage_level5', 1190), + (17679, 27373, 'result_forced_shader_burnt', 1190), + (17680, 27384, 'fly_dead', 1190), + (17681, 27391, 'attack06', 1190), + (17682, 27395, 'crying', 1190), + (17683, 27397, 'giggling', 1190), + (17684, 27404, 'attack_breath_snd', 1190), + (17685, 27405, 'breath_blast_barrier', 1190), + (17686, 27410, 'design_kerafyrm_barrier_big', 1190), + (17687, 27411, 'design_kerafyrm_barrier_fight', 1190), + (17688, 27412, 'design_kerafyrm_barrier_small', 1190), + (17689, 27413, 'flames_backlash_snd', 1190), + (17690, 27416, 'ouch01_snd', 1190), + (17691, 27417, 'ouch02_snd', 1190), + (17692, 27447, 'sound_ulthork_awake', 1190), + (17693, 27448, 'sound_ulthork_combat_enter', 1190), + (17694, 27449, 'sound_ulthork_exhale', 1190), + (17695, 27450, 'sound_ulthork_grunt', 1190), + (17696, 27451, 'sound_ulthork_idle', 1190), + (17697, 27452, 'sound_ulthork_run', 1190), + (17698, 27453, 'sound_ulthork_run01', 1190), + (17699, 27454, 'sound_ulthork_scratch01', 1190), + (17700, 27455, 'sound_ulthork_scratch02', 1190), + (17701, 27456, 'sound_ulthork_snore', 1190), + (17702, 27457, 'sound_ulthork_walk', 1190), + (17703, 27458, 'sound_ulthork_walk01', 1190), + (17704, 27469, 'frogdance', 1190), + (17705, 27472, 'rock_fx', 1190), + (17706, 27485, 'result_compass_hover', 1190), + (17707, 27492, 'arasai_evil_skull_swirls', 1190), + (17708, 27497, 'dark_elf_splash_mist', 1190), + (17709, 27498, 'erudite_book_hover_runes', 1190), + (17710, 27499, 'freeblood_skull_swirls_mesh', 1190), + (17711, 27500, 'gnome_hands_trail_clockwork_blast', 1190), + (17712, 27501, 'halfelf_compass_hover', 1190), + (17713, 27502, 'human_water_dripping_wake', 1190), + (17714, 27503, 'iksar_water_forced_shader_splash', 1190), + (17715, 27505, 'kerra_flea_infestation_trail', 1190), + (17716, 27507, 'ogre_fly_swarm_trail', 1190), + (17717, 27508, 'ratonga_forced_shader_bertox', 1190), + (17718, 27509, 'sarnak_firestrips_trail', 1190), + (17719, 27541, 'troll_poison_spirits_gather', 1190), + (17720, 27552, 'dwarf_rift_crack_dig', 1190), + (17721, 27553, 'fae_fireflies_trail', 1190), + (17722, 27554, 'froglok_godly_light_sparkles', 1190), + (17723, 27561, 'attack_fistslam', 1190), + (17724, 27562, 'attack_groundroar', 1190), + (17725, 27563, 'attack_rage', 1190), + (17726, 27566, 'combat_idle03', 1190), + (17727, 27569, 'halfling_hands_cards_coins_trail', 1190), + (17728, 27570, 'highelf_radiant_sparkles', 1190), + (17729, 27573, 'powerroar', 1190), + (17730, 27574, 'powerslam', 1190), + (17731, 27606, 'targeted_left', 1190), + (17732, 27607, 'targeted_right', 1190), + (17733, 27608, 'transition_left', 1190), + (17734, 27609, 'woodelf_leafy_glow_shader', 1190), + (17735, 27616, 'barbarian_snow_ice_trail', 1190), + (17736, 27621, 'erudite_asteroid_belt', 1190), + (17737, 27622, 'freeblood_bat_swirls_mesh', 1190), + (17738, 27623, 'gnome_clockwork_gears_blast', 1190), + (17739, 27624, 'human_claymore_orbit_trail', 1190), + (17740, 27626, 'kerra_spirit_guide_mesh', 1190), + (17741, 27628, 'portal_jump', 1190), + (17742, 27629, 'portal_stomp', 1190), + (17743, 27630, 'ratonga_brain_storm_text', 1190), + (17744, 27662, 'transition_back', 1190), + (17745, 27663, 'transition_right', 1190), + (17746, 27672, 'cast_skull_head_blast', 1190), + (17747, 27675, 'design_dark_portal', 1190), + (17748, 27676, 'design_light_portal', 1190), + (17749, 27679, 'result_blood_dark', 1190), + (17750, 27686, 'snd_land', 1190), + (17751, 27701, 'snd_winged_lion_idle_01', 1190), + (17752, 27702, 'snd_winged_lion_jump_sub', 1190), + (17753, 27704, 'sound_evil_bird_jump_sub', 1190), + (17754, 27705, 'sound_evil_bird_peck', 1190), + (17755, 27706, 'sound_evil_bird_scratch', 1190), + (17756, 27707, 'sound_evil_bird_vox_idle03', 1190), + (17757, 27714, 'attack_arms', 1190), + (17758, 27715, 'attack_jumpslam', 1190), + (17759, 27716, 'cast_illusionary_charge_up', 1190), + (17760, 27717, 'cast_illusionary_emanation', 1190), + (17761, 27723, 'lose_weapon', 1190), + (17762, 27725, 'result_floating_chain_root', 1190), + (17763, 27726, 'result_illusionary_lights', 1190), + (17764, 27758, 'transition_back_extract', 1190), + (17765, 27759, 'transition_left_extract', 1190), + (17766, 27760, 'transition_right_extract', 1190), + (17767, 27771, 'dance_short', 1190), + (17768, 27803, 'sound_ulthork_charge_up', 1190), + (17769, 27804, 'sound_ulthork_fs', 1190), + (17770, 27805, 'sound_ulthork_idle_01', 1190), + (17771, 27806, 'sound_ulthork_idle_02', 1190), + (17772, 27807, 'sound_ulthork_shield_shove', 1190), + (17773, 27808, 'sound_ulthork_whirl_attack_whsh', 1190), + (17774, 27820, 'mace_blast', 1190), + (17775, 27822, 'rocky_trail', 1190), + (17776, 27823, 'rumble_shake', 1190), + (17777, 27831, 'snd_peck', 1190), + (17778, 27856, 'transition_back01_extract', 1190), + (17779, 27857, 'victory', 1190), + (17780, 27868, 'fear_wave', 1190), + (17781, 27885, 'snd_tbird_pet_angry', 1190), + (17782, 27886, 'snd_tbird_pet_attack01', 1190), + (17783, 27887, 'snd_tbird_pet_happy', 1190), + (17784, 27888, 'snd_tbird_pet_idle01', 1190), + (17785, 27889, 'snd_tbird_pet_idle02', 1190), + (17786, 27890, 'snd_tbird_pet_idle03', 1190), + (17787, 27891, 'snd_tbird_pet_trick', 1190), + (17788, 27900, 'cast_toxic_gathering', 1190), + (17789, 27901, 'cast_toxic_rain', 1190), + (17790, 27904, 'hand_blast', 1190), + (17791, 27911, 'cast_acid_rain', 1190), + (17792, 27922, 'design_circle_warning_zone', 1190), + (17793, 27923, 'design_half_circle_warning_zone', 1190), + (17794, 27924, 'design_oval_warning_zone', 1190), + (17795, 27925, 'design_third_circle_warning_zone', 1190), + (17796, 27932, 'beckon_enter', 1190), + (17797, 27933, 'beckon_exit', 1190), + (17798, 27940, 'aa_double_pyramid', 1190), + (17799, 27947, 'aa_water_summon', 1190), + (17800, 27954, 'aa_ooze_summon', 1190), + (17801, 27955, 'aa_skull_summon', 1190), + (17802, 27960, 'idle01temp', 1190), + (17803, 27962, 'jaw_rotate_max', 1190), + (17804, 27965, 'smile_left', 1190), + (17805, 27966, 'smile_right', 1190), + (17806, 27977, 'design_fire_doorway', 1190), + (17807, 27978, 'design_icy_doorway', 1190), + (17808, 27989, 'dead02', 1190), + (17809, 27990, 'design_fire_pillar', 1190), + (17810, 27991, 'design_green_light_beam', 1190), + (17811, 27992, 'design_ice_pillar', 1190), + (17812, 27993, 'design_purple_light_beam', 1190), + (17813, 27994, 'design_red_light_beam', 1190), + (17814, 27995, 'design_yellow_light_beam', 1190), + (17815, 27998, 'sc_win_chest_fx', 1190), + (17816, 28011, 'result_fire_beam_p2p', 1190), + (17817, 28012, 'result_ice_beam_p2p', 1190), + (17818, 28025, 'piledriver', 1190), + (17819, 28034, 'chargeup', 1190), + (17820, 28035, 'chargeup_enter', 1190), + (17821, 28036, 'chargeup_exit', 1190), + (17822, 28037, 'chargeup_idle', 1190), + (17823, 28040, 'design_lightning_pillar_blue', 1190), + (17824, 28041, 'design_lightning_pillar_red', 1190), + (17825, 28042, 'design_st_boss_lightning_blue', 1190), + (17826, 28043, 'design_st_boss_lightning_red', 1190), + (17827, 28050, 'cast03', 1190), + (17828, 28051, 'cast04', 1190), + (17829, 28054, 'cast_squid_loop', 1190), + (17830, 28057, 'design_orange_light_beam', 1190), + (17831, 28058, 'design_st_boss_platform_charged_blue', 1190), + (17832, 28059, 'design_st_boss_platform_charged_red', 1190), + (17833, 28066, 'blue_crystal_dead', 1190), + (17834, 28067, 'blue_crystal_on', 1190), + (17835, 28072, 'design_urn_shatter', 1190), + (17836, 28075, 'red_crystal_dead', 1190), + (17837, 28076, 'red_crystal_on', 1190), + (17838, 28077, 'result_lightning_floor_blast_blue', 1190), + (17839, 28078, 'result_lightning_floor_blast_red', 1190), + (17840, 28089, 'dead01', 1190), + (17841, 28090, 'design_lightning_pillar_purple', 1190), + (17842, 28091, 'design_st_boss_lightning_purple', 1190), + (17843, 28092, 'design_st_boss_platform_charged_purple', 1190), + (17844, 28095, 'result_damaged', 1190), + (17845, 28096, 'result_glass_blast', 1190), + (17846, 28097, 'result_lightning_floor_blast_purple', 1190), + (17847, 28098, 'result_radiant_glow_no_mesh', 1190), + (17848, 28099, 'result_tether_buff_p2p', 1190), + (17849, 28106, 'cast_blue_buff', 1190), + (17850, 28109, 'cast_red_buff', 1190), + (17851, 28110, 'cast_white_buff', 1190), + (17852, 28136, 'sound_evil_bird_egg_vox', 1190), + (17853, 28147, 'design_ice_column_shatter', 1190), + (17854, 28148, 'drinal_summon', 1190), + (17855, 28159, 'design_circle_warning_zone_blue', 1190), + (17856, 28160, 'design_circle_warning_zone_gold', 1190), + (17857, 28161, 'design_half_circle_warning_zone_blue', 1190), + (17858, 28162, 'design_half_circle_warning_zone_gold', 1190), + (17859, 28163, 'design_oval_warning_zone_blue', 1190), + (17860, 28164, 'design_oval_warning_zone_gold', 1190), + (17861, 28165, 'design_third_circle_warning_zone_blue', 1190), + (17862, 28166, 'design_third_circle_warning_zone_gold', 1190), + (17863, 28178, 'lay_egg_hatch', 1190), + (17864, 28189, 'design_vd_portal_red', 1190), + (17865, 28223, 'status_quest_completes_repeatable', 1190), + (17866, 28224, 'status_quest_completes_tradeskill', 1190), + (17867, 28225, 'status_quest_gives_repeatable', 1190), + (17868, 28226, 'status_quest_gives_tradeskill', 1190), + (17869, 28227, 'status_quest_updates_repeatable', 1190), + (17870, 28228, 'status_quest_updates_tradeskill', 1190), + (17871, 28239, 'drinal_trail_weapon_flames', 1190), + (17872, 28240, 'drinal_trail_weapon_poison', 1190), + (17873, 28243, 'result_flash_weapon_green', 1190), + (17874, 28254, 'drinal_absorb_back_exit', 1190), + (17875, 28255, 'drinal_absorb_back_idle', 1190), + (17876, 28256, 'drinal_absorb_forward_exit', 1190), + (17877, 28257, 'drinal_absorb_forward_idle', 1190), + (17878, 28258, 'drinal_absorb_left_exit', 1190), + (17879, 28259, 'drinal_absorb_left_idle', 1190), + (17880, 28260, 'drinal_absorb_right_exit', 1190), + (17881, 28261, 'drinal_absorb_right_idle', 1190), + (17882, 28262, 'drinal_fireball_gather', 1190), + (17883, 28263, 'drinal_skull_gather', 1190), + (17884, 28264, 'drinal_spirt_gather', 1190), + (17885, 28265, 'drinal_staff_blast', 1190), + (17886, 28268, 'result_drinal_spirits_p2p', 1190), + (17887, 28269, 'result_spirits_blast_out', 1190), + (17888, 28278, 'close_enter', 1190), + (17889, 28279, 'closed_idle', 1190), + (17890, 28282, 'dragon_attack', 1190), + (17891, 28283, 'dragon_idle', 1190), + (17892, 28286, 'open_enter', 1190), + (17893, 28287, 'open_idle', 1190), + (17894, 28298, 'evil_bird_idle05', 1190), + (17895, 28301, 'orbiting_buff_all', 1190), + (17896, 28302, 'orbiting_buff_blue', 1190), + (17897, 28303, 'orbiting_buff_blue_white', 1190), + (17898, 28304, 'orbiting_buff_red', 1190), + (17899, 28305, 'orbiting_buff_red_blue', 1190), + (17900, 28306, 'orbiting_buff_red_white', 1190), + (17901, 28307, 'orbiting_buff_white', 1190), + (17902, 28320, 'result_spike_cage', 1190), + (17903, 28331, 'design_drinals_portal', 1190), + (17904, 28338, 'attack_cannibal', 1190), + (17905, 28345, 'oldidle', 1190), + (17906, 28354, 'cast_shadow_breath', 1190), + (17907, 28357, 'drinal_frontal_blast', 1190), + (17908, 28358, 'drinal_warning_zone', 1190), + (17909, 28365, 'asleep', 1190), + (17910, 28366, 'attack_breath_old', 1190), + (17911, 28371, 'design_groundportal_rift_gehein', 1190), + (17912, 28372, 'dual_wield_knockeddowntoknees', 1190), + (17913, 28373, 'dual_wield_knockedtoback_onbackidle', 1190), + (17914, 28375, 'komodo_npc_glide', 1190), + (17915, 28409, 'tradeart_forge_hammers_anvil', 1190), + (17916, 28420, 'design_agitated', 1190), + (17917, 28421, 'design_distorted', 1190), + (17918, 28422, 'design_fear', 1190), + (17919, 28440, 'snd_tirun_enf_attack', 1190), + (17920, 28441, 'snd_tirun_enf_attack01', 1190), + (17921, 28442, 'snd_tirun_enf_attack02', 1190), + (17922, 28443, 'snd_tirun_enf_attack03', 1190), + (17923, 28444, 'snd_tirun_enf_cast1', 1190), + (17924, 28445, 'snd_tirun_enf_chargeup', 1190), + (17925, 28446, 'snd_tirun_enf_combat_enter', 1190), + (17926, 28447, 'snd_tirun_enf_combat_idle01', 1190), + (17927, 28448, 'snd_tirun_enf_dead enter', 1190), + (17928, 28449, 'snd_tirun_enf_dodge', 1190), + (17929, 28450, 'snd_tirun_enf_knocktoknees', 1190), + (17930, 28451, 'snd_tirun_enf_ouch', 1190), + (17931, 28452, 'snd_tirun_enf_shield_shove', 1190), + (17932, 28453, 'snd_tirun_enf_whirling_attack', 1190), + (17933, 28454, 'snd_tirun_enf_wild_swing', 1190), + (17934, 28472, 'tradeart_flask_beaker_pour', 1190), + (17935, 28473, 'tradeart_forge_hammer_metal', 1190), + (17936, 28474, 'tradeart_saw_log', 1190), + (17937, 28485, 'design_drinals_floor_panel_blue', 1190), + (17938, 28486, 'design_drinals_floor_panel_challege_blue', 1190), + (17939, 28487, 'design_drinals_floor_panel_challege_red', 1190), + (17940, 28488, 'design_drinals_floor_panel_red', 1190), + (17941, 28489, 'design_drinals_vessel_arc_blue', 1190), + (17942, 28490, 'design_drinals_vessel_arc_red', 1190), + (17943, 28494, 'result_bastion_beam_p2p', 1190), + (17944, 28509, 'shaman_summon_fx', 1190), + (17945, 28520, 'design_tof_rock_collapse01', 1190), + (17946, 28521, 'design_tof_rock_collapse02', 1190), + (17947, 28522, 'design_tof_rock_collapse03', 1190), + (17948, 28523, 'design_tof_rock_collapse04', 1190), + (17949, 28558, 'spit', 1190), + (17950, 28569, 'design_arcane_barrier', 1190), + (17951, 28570, 'design_divine_barrier', 1190), + (17952, 28574, 'result_magic_barrier_beam_p2p', 1190), + (17953, 28583, 'cast_werewolf_appear', 1190), + (17954, 28584, 'cast_werewolf_hair', 1190), + (17955, 28587, 'csat_werewolf_vanish', 1190), + (17956, 28594, 'attack_eye_cone', 1190), + (17957, 28599, 'gazer_charge_up', 1190), + (17958, 28603, 'result_essence_suck_p2p', 1190), + (17959, 28604, 'result_gazer_flame_eye_beam_p2p', 1190), + (17960, 28619, 'sky_float_idle', 1190), + (17961, 28650, 'zap_attack', 1190), + (17962, 28661, 'fs', 1190), + (17963, 28666, 'shaman_crouch_idle', 1190), + (17964, 28673, 'snd_skirth_attack', 1190), + (17965, 28674, 'snd_skirth_attack01', 1190), + (17966, 28675, 'snd_skirth_attack02', 1190), + (17967, 28676, 'snd_skirth_attack03', 1190), + (17968, 28677, 'snd_skirth_aura', 1190), + (17969, 28678, 'snd_skirth_cast_1', 1190), + (17970, 28679, 'snd_skirth_chargeup', 1190), + (17971, 28680, 'snd_skirth_combat_enter', 1190), + (17972, 28681, 'snd_skirth_combat_enter1', 1190), + (17973, 28682, 'snd_skirth_dead_enter', 1190), + (17974, 28683, 'snd_skirth_knocktobackgetup', 1190), + (17975, 28684, 'snd_skirth_ouch', 1190), + (17976, 28685, 'snd_skirth_shiield_shove', 1190), + (17977, 28686, 'snd_skirth_spit', 1190), + (17978, 28687, 'snd_skirth_whirling_attack', 1190), + (17979, 28688, 'snd_skirth_wildswing', 1190), + (17980, 28713, 'zap_enter', 1190), + (17981, 28714, 'zap_exit', 1190), + (17982, 28715, 'zap_idle', 1190), + (17983, 28760, 'were_cast_idle', 1190), + (17984, 28774, 'result_ethernere_fx', 1190), + (17985, 28782, 'snd_skirth_idle03', 1190), + (17986, 28796, 'result_aggression_removal', 1190), + (17987, 28797, 'result_aggression_removal_p2p', 1190), + (17988, 28798, 'result_healing_trail_p2p', 1190), + (17989, 28799, 'result_lifebringer_glade', 1190), + (17990, 28831, 'trdskl_aggro_life_wand', 1190), + (17991, 28847, 'snd_baelon_attack', 1190), + (17992, 28848, 'snd_baelon_attack01', 1190), + (17993, 28849, 'snd_baelon_attack_arms', 1190), + (17994, 28850, 'snd_baelon_fs', 1190), + (17995, 28851, 'snd_baelon_idle02', 1190), + (17996, 28852, 'snd_baelon_idle03', 1190), + (17997, 28853, 'snd_baelon_lose_weapon', 1190), + (17998, 28854, 'snd_baelon_ouch', 1190), + (17999, 28855, 'snd_baelon_powerslam', 1190), + (18000, 28856, 'snd_baelon_summon', 1190), + (18001, 28857, 'snd_baelon_targeted_right', 1190), + (18002, 28858, 'snd_baelon_transition_back', 1190), + (18003, 28859, 'snd_baelon_transition_back01_extract', 1190), + (18004, 28860, 'snd_baelon_transition_back_extract', 1190), + (18005, 28861, 'snd_baelon_transition_left_extract', 1190), + (18006, 28862, 'snd_baelon_transition_right', 1190), + (18007, 28863, 'snd_baelon_transition_right_extract', 1190), + (18008, 28864, 'snd_baelon_unarmed_attack', 1190), + (18009, 28865, 'snd_baelon_unarmed_attack01', 1190), + (18010, 28866, 'snd_baelon_unarmed_attack02', 1190), + (18011, 28867, 'snd_baelon_unarmed_attack_fistslam', 1190), + (18012, 28868, 'snd_baelon_unarmed_attack_jumpslam', 1190), + (18013, 28869, 'snd_baelon_unarmed_attack_stomp', 1190), + (18014, 28870, 'snd_baelon_unarmed_dead_enter', 1190), + (18015, 28871, 'snd_baelon_unarmed_fs', 1190), + (18016, 28872, 'snd_baelon_unarmed_idle01', 1190), + (18017, 28873, 'snd_baelon_unarmed_idle02', 1190), + (18018, 28874, 'snd_baelon_unarmed_ouch', 1190), + (18019, 28875, 'snd_baelon_unarmed_portal_jump', 1190), + (18020, 28876, 'snd_baelon_unarmed_portal_stomp', 1190), + (18021, 28877, 'snd_baelon_unarmed_victory', 1190), + (18022, 28878, 'snd_baelon_whirling_attack', 1190), + (18023, 28879, 'snd_baelon_wild_swing', 1190), + (18024, 28890, 'fx_foot_trail_lf', 1190), + (18025, 28891, 'fx_foot_trail_lh', 1190), + (18026, 28892, 'fx_foot_trail_rf', 1190), + (18027, 28893, 'fx_foot_trail_rh', 1190), + (18028, 28917, 'sound_bodyfall', 1190), + (18029, 28928, 'sound_whoosh', 1190), + (18030, 28930, 'untrainted_wildswing', 1190), + (18031, 28941, 'gehein_aura_lp', 1190), + (18032, 28946, 'sfx_attack_vox', 1190), + (18033, 28947, 'sfx_death_vox', 1190), + (18034, 28948, 'sfx_gehein_death_vox', 1190), + (18035, 28949, 'sfx_gehein_vox_attack', 1190), + (18036, 28950, 'sfx_gehein_vox_ouch', 1190), + (18037, 28951, 'sfx_whoosh', 1190), + (18038, 28952, 'sfx_whoosh_high', 1190), + (18039, 28973, 'snd_screecher_attack', 1190), + (18040, 28974, 'snd_screecher_attack01', 1190), + (18041, 28975, 'snd_screecher_attack02', 1190), + (18042, 28976, 'snd_screecher_attack03', 1190), + (18043, 28977, 'snd_screecher_aura_lp', 1190), + (18044, 28978, 'snd_screecher_cast', 1190), + (18045, 28979, 'snd_screecher_cast01', 1190), + (18046, 28980, 'snd_screecher_combat_enter', 1190), + (18047, 28981, 'snd_screecher_dead_enter', 1190), + (18048, 28982, 'snd_screecher_idel01', 1190), + (18049, 28983, 'snd_screecher_idle02', 1190), + (18050, 28984, 'snd_screecher_jump', 1190), + (18051, 28985, 'snd_screecher_ouch', 1190), + (18052, 28986, 'snd_screecher_scream', 1190), + (18053, 28987, 'snd_screecher_scream01', 1190), + (18054, 28988, 'snd_screecher_whirling_attack', 1190), + (18055, 29002, 'result_life_statue_fx', 1190), + (18056, 29013, 'dont_use_ouch', 1190), + (18057, 29024, 'fly_in_old', 1190), + (18058, 29025, 'ilde01', 1190), + (18059, 29045, 'snd_komodo_attack', 1190), + (18060, 29046, 'snd_komodo_attack01', 1190), + (18061, 29047, 'snd_komodo_cast01', 1190), + (18062, 29048, 'snd_komodo_dead_enter', 1190), + (18063, 29049, 'snd_komodo_knocktoback', 1190), + (18064, 29050, 'snd_komodo_ouch', 1190), + (18065, 29051, 'snd_komodo_whirling_attack', 1190), + (18066, 29052, 'snd_komodo_wild_swing', 1190), + (18067, 29063, 'design_etherene_fire', 1190), + (18068, 29064, 'design_ethernere_vines', 1190), + (18069, 29075, 'idle05', 1190), + (18070, 29090, 'sfx_vox_gehein_laugh', 1190), + (18071, 29092, 'snd_chitari_1h_sword_attack', 1190), + (18072, 29093, 'snd_chitari_1h_sword_attack01', 1190), + (18073, 29094, 'snd_chitari_1h_sword_attack02', 1190), + (18074, 29095, 'snd_chitari_1h_sword_enter', 1190), + (18075, 29096, 'snd_chitari_attack', 1190), + (18076, 29097, 'snd_chitari_attack01', 1190), + (18077, 29098, 'snd_chitari_attack02', 1190), + (18078, 29099, 'snd_chitari_attack03', 1190), + (18079, 29100, 'snd_chitari_attack_cannibal', 1190), + (18080, 29101, 'snd_chitari_charge_up', 1190), + (18081, 29102, 'snd_chitari_dead_enter', 1190), + (18082, 29103, 'snd_chitari_idle01', 1190), + (18083, 29104, 'snd_chitari_knockedtoback_getup', 1190), + (18084, 29105, 'snd_chitari_ouch', 1190), + (18085, 29106, 'snd_chitari_ouch_forehand', 1190), + (18086, 29107, 'snd_chitari_shield_shove', 1190), + (18087, 29108, 'snd_chitari_whirling_attack', 1190), + (18088, 29109, 'snd_chitari_wild_swing', 1190), + (18089, 29116, 'aa_smoke_teleport', 1190), + (18090, 29117, 'aa_wave_splash', 1190), + (18091, 29118, 'aa_whirlwind_teleport', 1190), + (18092, 29123, 'idle04_', 1190), + (18093, 29130, 'aa_scythe_slash', 1190), + (18094, 29137, 'aa_frozen_rain', 1190), + (18095, 29138, 'aa_toxic_mist', 1190), + (18096, 29146, 'result_bone_glow_3', 1190), + (18097, 29147, 'result_fire_attack_p2p', 1190), + (18098, 29158, 'dontuse_knockedtoback', 1190), + (18099, 29159, 'dontuse_knockedtoback_getup', 1190), + (18100, 29160, 'dontuse_knockedtoback_onbackidle', 1190), + (18101, 29167, 'aa_fire_swirl_shield', 1190), + (18102, 29168, 'aa_head_skeleton_hands_blast', 1190), + (18103, 29169, 'aa_heal_skeleton_hands_blast', 1190), + (18104, 29170, 'aa_planar_fire_blast', 1190), + (18105, 29171, 'aa_second_skin', 1190), + (18106, 29178, 'aa_cast_wind_spin', 1190), + (18107, 29179, 'aa_dark_swirly_wisps', 1190), + (18108, 29180, 'aa_heal_splash', 1190), + (18109, 29181, 'aa_lightning_siphon', 1190), + (18110, 29182, 'aa_nature_heal', 1190), + (18111, 29183, 'aa_scimitar_cyclone', 1190), + (18112, 29184, 'aa_spirit_swirl_buff_ward', 1190), + (18113, 29212, 'snd_were_1h_sword_attack01_vox', 1190), + (18114, 29213, 'snd_were_1h_sword_attack02_vox', 1190), + (18115, 29214, 'snd_were_1h_sword_attack03_vox', 1190), + (18116, 29215, 'snd_were_1h_sword_attack_vox', 1190), + (18117, 29216, 'snd_were_attack01_vox', 1190), + (18118, 29217, 'snd_were_attack02_vox', 1190), + (18119, 29218, 'snd_were_attack_vox', 1190), + (18120, 29219, 'snd_were_cast_vox', 1190), + (18121, 29220, 'snd_were_combat_idle01_vox', 1190), + (18122, 29221, 'snd_were_dead_enter_vox', 1190), + (18123, 29222, 'snd_were_dual_wield_attack01_vox', 1190), + (18124, 29223, 'snd_were_dual_wield_attack02_vox', 1190), + (18125, 29224, 'snd_were_dual_wield_attack03_vox', 1190), + (18126, 29225, 'snd_were_dual_wield_attack_vox', 1190), + (18127, 29226, 'snd_were_kick_vox', 1190), + (18128, 29227, 'snd_were_ouch_vox', 1190), + (18129, 29228, 'snd_were_shield_shove_vox', 1190), + (18130, 29229, 'snd_were_super_buff_vox', 1190), + (18131, 29230, 'snd_were_wild_swing_vox', 1190), + (18132, 29242, 'swoosh_huge', 1190), + (18133, 29249, 'aa_arrow_rapid_salvo', 1190), + (18134, 29250, 'aa_fire_arrow_p2p', 1190), + (18135, 29251, 'aa_music_dagger_buff', 1190), + (18136, 29252, 'aa_sound_wave_blast', 1190), + (18137, 29253, 'bird_squawk_sound', 1190), + (18138, 29254, 'cast_bagpipe_sound', 1190), + (18139, 29255, 'cast_bard_bagpipes', 1190), + (18140, 29262, 'scaled_hands_attack03', 1190), + (18141, 29269, 'cast_dome_barrier_fx', 1190), + (18142, 29274, 'design_comm_on', 1190), + (18143, 29275, 'design_tourbillion_flux_fx', 1190), + (18144, 29276, 'design_tourbillion_persist_fx', 1190), + (18145, 29279, 'result_tourbillion_essence_suck_p2p', 1190), + (18146, 29292, 'result_forced_shader_ethernere', 1190), + (18147, 29299, 'bodyfall', 1190), + (18148, 29337, 'whoosh_large', 1190), + (18149, 29338, 'whoosh_lrg', 1190), + (18150, 29353, 'snd_attack_long', 1190), + (18151, 29354, 'snd_attack_short', 1190), + (18152, 29359, 'snd_gargoyle_attack', 1190), + (18153, 29360, 'snd_gargoyle_attack03', 1190), + (18154, 29361, 'snd_gargoyle_cast_1', 1190), + (18155, 29362, 'snd_gargoyle_charge_up', 1190), + (18156, 29363, 'snd_gargoyle_combat_enter', 1190), + (18157, 29364, 'snd_gargoyle_dead_enter', 1190), + (18158, 29365, 'snd_gargoyle_kick', 1190), + (18159, 29366, 'snd_gargoyle_knocktoback_getup', 1190), + (18160, 29367, 'snd_gargoyle_ouch_forehand', 1190), + (18161, 29368, 'snd_gargoyle_shield_shove', 1190), + (18162, 29369, 'snd_jump_fx', 1190), + (18163, 29371, 'snd_rx_cast1', 1190), + (18164, 29372, 'snd_rx_chargeup', 1190), + (18165, 29373, 'snd_rx_combat_enter', 1190), + (18166, 29374, 'snd_rx_dead_enter', 1190), + (18167, 29384, 'cookie_ouch_fx', 1190), + (18168, 29389, 'skyshrine_drake_backup', 1190), + (18169, 29390, 'skyshrine_drake_fall', 1190), + (18170, 29391, 'skyshrine_drake_fly_backup', 1190), + (18171, 29392, 'skyshrine_drake_fly_climb', 1190), + (18172, 29393, 'skyshrine_drake_fly_dive', 1190), + (18173, 29394, 'skyshrine_drake_fly_down', 1190), + (18174, 29395, 'skyshrine_drake_fly_glide', 1190), + (18175, 29396, 'skyshrine_drake_fly_glide_left', 1190), + (18176, 29397, 'skyshrine_drake_fly_glide_right', 1190), + (18177, 29398, 'skyshrine_drake_fly_idle', 1190), + (18178, 29399, 'skyshrine_drake_fly_run', 1190), + (18179, 29400, 'skyshrine_drake_fly_strafe_left', 1190), + (18180, 29401, 'skyshrine_drake_fly_strafe_right', 1190), + (18181, 29402, 'skyshrine_drake_fly_turn_left', 1190), + (18182, 29403, 'skyshrine_drake_fly_turn_right', 1190), + (18183, 29404, 'skyshrine_drake_fly_up', 1190), + (18184, 29405, 'skyshrine_drake_fly_walk', 1190), + (18185, 29406, 'skyshrine_drake_idle', 1190), + (18186, 29407, 'skyshrine_drake_idle01', 1190), + (18187, 29408, 'skyshrine_drake_jump', 1190), + (18188, 29409, 'skyshrine_drake_jump_substitute', 1190), + (18189, 29410, 'skyshrine_drake_land', 1190), + (18190, 29411, 'skyshrine_drake_long_fall', 1190), + (18191, 29412, 'skyshrine_drake_turn_left', 1190), + (18192, 29413, 'skyshrine_drake_turn_right', 1190), + (18193, 29414, 'skyshrine_drake_walk', 1190), + (18194, 56889, 'kill_design_glow_eyes_green', 1190), + (18195, 56892, 'kill_sit_drink', 1190), + (18196, 56900, 'kill_result_flash_bomb_appear', 1190), + (18197, 56908, 'kill_reforge_nature_tier01', 1190), + (18198, 56909, 'kill_reforge_nature_tier02', 1190), + (18199, 56910, 'kill_reforge_nature_tier03', 1190), + (18200, 56911, 'kill_reforge_nature_tier04', 1190), + (18201, 56912, 'kill_reforge_nature_tier05', 1190), + (18202, 56920, 'kill_reforge_fire_tier01', 1190), + (18203, 56921, 'kill_reforge_fire_tier02', 1190), + (18204, 56922, 'kill_reforge_fire_tier03', 1190), + (18205, 56923, 'kill_reforge_fire_tier04', 1190), + (18206, 56924, 'kill_reforge_fire_tier05', 1190), + (18207, 56932, 'kill_reforge_ice_tier01', 1190), + (18208, 56933, 'kill_reforge_ice_tier02', 1190), + (18209, 56934, 'kill_reforge_ice_tier03', 1190), + (18210, 56935, 'kill_reforge_ice_tier04', 1190), + (18211, 56936, 'kill_reforge_ice_tier05', 1190), + (18212, 56944, 'kill_reforge_blood_tier01', 1190), + (18213, 56945, 'kill_reforge_blood_tier02', 1190), + (18214, 56946, 'kill_reforge_blood_tier03', 1190), + (18215, 56947, 'kill_reforge_blood_tier04', 1190), + (18216, 56948, 'kill_reforge_blood_tier05', 1190), + (18217, 56955, 'kill_hassan_chop', 1190), + (18218, 56963, 'kill_reforge_acid_tier01', 1190), + (18219, 56964, 'kill_reforge_acid_tier02', 1190), + (18220, 56965, 'kill_reforge_acid_tier03', 1190), + (18221, 56966, 'kill_reforge_acid_tier04', 1190), + (18222, 56967, 'kill_reforge_acid_tier05', 1190), + (18223, 56968, 'kill_reforge_runic_tier01', 1190), + (18224, 56969, 'kill_reforge_runic_tier02', 1190), + (18225, 56970, 'kill_reforge_runic_tier03', 1190), + (18226, 56971, 'kill_reforge_runic_tier04', 1190), + (18227, 56972, 'kill_reforge_runic_tier05', 1190), + (18228, 56980, 'kill_reforge_electricity_tier01', 1190), + (18229, 56981, 'kill_reforge_electricity_tier02', 1190), + (18230, 56982, 'kill_reforge_electricity_tier03', 1190), + (18231, 56983, 'kill_reforge_electricity_tier04', 1190), + (18232, 56984, 'kill_reforge_electricity_tier05', 1190), + (18233, 56991, 'kill_dead_enter01', 1190), + (18234, 56992, 'kill_death01', 1190), + (18235, 56993, 'kill_horse_attack', 1190), + (18236, 56994, 'kill_horse_attack01', 1190), + (18237, 56995, 'kill_horse_attack02', 1190), + (18238, 56996, 'kill_horse_attack03', 1190), + (18239, 56997, 'kill_horse_cast', 1190), + (18240, 56998, 'kill_horse_combat_cast', 1190), + (18241, 56999, 'kill_horse_combat_enter', 1190), + (18242, 57000, 'kill_horse_combat_exit', 1190), + (18243, 57001, 'kill_horse_death', 1190), + (18244, 57002, 'kill_horse_death01', 1190), + (18245, 57003, 'kill_horse_ouch', 1190), + (18246, 57004, 'kill_horse_ouch01', 1190), + (18247, 57005, 'kill_horse_wild_swing', 1190), + (18248, 57007, 'kill_reforge_pestilence_tier01', 1190), + (18249, 57008, 'kill_reforge_pestilence_tier02', 1190), + (18250, 57009, 'kill_reforge_pestilence_tier03', 1190), + (18251, 57010, 'kill_reforge_pestilence_tier04', 1190), + (18252, 57011, 'kill_reforge_pestilence_tier05', 1190), + (18253, 57012, 'kill_2pike_attack03', 1190), + (18254, 57020, 'kill_reforge_illusion_tier01', 1190), + (18255, 57021, 'kill_reforge_illusion_tier02', 1190), + (18256, 57022, 'kill_reforge_illusion_tier03', 1190), + (18257, 57023, 'kill_reforge_illusion_tier04', 1190), + (18258, 57024, 'kill_reforge_illusion_tier05', 1190), + (18259, 57025, 'kill_reforge_radiance_tier01', 1190), + (18260, 57026, 'kill_reforge_radiance_tier02', 1190), + (18261, 57027, 'kill_reforge_radiance_tier03', 1190), + (18262, 57028, 'kill_reforge_radiance_tier04', 1190), + (18263, 57029, 'kill_reforge_radiance_tier05', 1190), + (18264, 57036, 'kill_horse_dead', 1190), + (18265, 57037, 'kill_horse_dead_enter', 1190), + (18266, 57038, 'kill_horse_dead_enter01', 1190), + (18267, 57040, 'kill_pegasus_mount_attack', 1190), + (18268, 57041, 'kill_pegasus_mount_attack01', 1190), + (18269, 57042, 'kill_pegasus_mount_attack02', 1190), + (18270, 57043, 'kill_pegasus_mount_attack03', 1190), + (18271, 57044, 'kill_pegasus_mount_cast', 1190), + (18272, 57045, 'kill_pegasus_mount_combat_enter', 1190), + (18273, 57046, 'kill_pegasus_mount_combat_exit', 1190), + (18274, 57047, 'kill_pegasus_mount_combat_idle', 1190), + (18275, 57048, 'kill_pegasus_mount_dead', 1190), + (18276, 57049, 'kill_pegasus_mount_dead_enter', 1190), + (18277, 57050, 'kill_pegasus_mount_dead_enter01', 1190), + (18278, 57051, 'kill_pegasus_mount_death', 1190), + (18279, 57052, 'kill_pegasus_mount_death01', 1190), + (18280, 57053, 'kill_pegasus_mount_ouch', 1190), + (18281, 57054, 'kill_pegasus_mount_ouch01', 1190), + (18282, 57055, 'kill_pegasus_mount_wild_swing', 1190), + (18283, 57056, 'kill_result_fprt_ghosts_attack_p2p', 1190), + (18284, 57067, 'kill_snd_freeport_knight_1h_sword_attack', 1190), + (18285, 57068, 'kill_snd_freeport_knight_1h_sword_attack01', 1190), + (18286, 57069, 'kill_snd_freeport_knight_1h_sword_attack02', 1190), + (18287, 57070, 'kill_snd_freeport_knight_1h_sword_attack03', 1190), + (18288, 57071, 'kill_snd_freeport_knight_fs', 1190), + (18289, 57072, 'kill_snd_freeport_knight_charge_up', 1190), + (18290, 57073, 'kill_snd_freeport_knight_whirling_attack', 1190), + (18291, 57074, 'kill_snd_freeport_knight_wild_swing', 1190), + (18292, 57100, 'kill_tiered_chill_claw_buff', 1190), + (18293, 57101, 'kill_tiered_chilling_claws', 1190), + (18294, 57102, 'kill_tiered_claws_buff', 1190), + (18295, 57103, 'kill_tiered_shield_barrier_buff', 1190), + (18296, 57104, 'kill_2h_ouch', 1190), + (18297, 57105, 'kill_2h_ouch_backhand', 1190), + (18298, 57106, 'kill_2h_ouch_down', 1190), + (18299, 57107, 'kill_2h_ouch_forehand', 1190), + (18300, 57108, 'kill_2h_ouch_thrust', 1190), + (18301, 57109, 'kill_2h_sword_dodge', 1190), + (18302, 57112, 'kill_backhand', 1190), + (18303, 57117, 'kill_horse_ouch_backhand', 1190), + (18304, 57118, 'kill_horse_ouch_down', 1190), + (18305, 57119, 'kill_horse_ouch_forehand', 1190), + (18306, 57120, 'kill_horse_ouch_thrust', 1190), + (18307, 57122, 'kill_pike_dodge', 1190), + (18308, 57123, 'kill_pike_ouch', 1190), + (18309, 57153, 'kill_tiered_spirit_pets_summon', 1190), + (18310, 57161, 'kill_mount_attack', 1190), + (18311, 57166, 'kill_snd_freeport_knight_cast_death', 1190), + (18312, 57167, 'kill_snd_freeport_knight_cast_end', 1190), + (18313, 57168, 'kill_snd_freeport_knight_cast_start', 1190), + (18314, 57194, 'kill_tiered_claw_marks', 1190), + (18315, 57195, 'kill_tiered_feather_shroud', 1190), + (18316, 57196, 'kill_tiered_fire_claw_buff', 1190), + (18317, 57197, 'kill_tiered_flaming_claws', 1190), + (18318, 57198, 'kill_tiered_hand_claws', 1190), + (18319, 57199, 'kill_tiered_ice_dagger_p2p', 1190), + (18320, 57202, 'kill_attack_swipe', 1190), + (18321, 57203, 'kill_cast_aa_frosty_swirls', 1190), + (18322, 57204, 'kill_cast_aa_spirit_blast', 1190), + (18323, 57207, 'kill_cast_slashing_claws', 1190), + (18324, 57211, 'kill_result_aa_wispy_ward', 1190), + (18325, 57212, 'kill_result_summon_spirit_swirls', 1190), + (18326, 57213, 'kill_result_tame_shroud', 1190), + (18327, 57243, 'kill_tiered_vine_net', 1190), + (18328, 57246, 'kill_cast_flurry_claws', 1190), + (18329, 57252, 'kill_result_lucan_soul_suck_p2p', 1190), + (18330, 57260, 'kill_lucan_cast_enter', 1190), + (18331, 57261, 'kill_lucan_cast_exit', 1190), + (18332, 57262, 'kill_lucan_cast_idle', 1190), + (18333, 57267, 'kill_snd_freeport_knight_death', 1190), + (18334, 57268, 'kill_snd_freeport_knight_knockeddowntoknees', 1190), + (18335, 57269, 'kill_snd_freeport_knight_rx_attack_long', 1190), + (18336, 57270, 'kill_snd_freeport_knight_rx_attack_short', 1190), + (18337, 57271, 'kill_snd_freeport_knight_rx_buff', 1190), + (18338, 57272, 'kill_snd_freeport_knight_rx_death', 1190), + (18339, 57273, 'kill_snd_freeport_knight_rx_ouch', 1190), + (18340, 57285, 'kill_snd_freeport_knight_attack', 1190), + (18341, 57286, 'kill_snd_freeport_knight_attack01', 1190), + (18342, 57287, 'kill_snd_freeport_knight_attack02', 1190), + (18343, 57288, 'kill_snd_freeport_knight_attack03', 1190), + (18344, 57289, 'kill_snd_freeport_knight_rx_cast_end', 1190), + (18345, 57296, 'kill_drink_chug', 1190), + (18346, 57297, 'kill_horse_combat_attack', 1190), + (18347, 57298, 'kill_horse_combat_attack01', 1190), + (18348, 57299, 'kill_horse_combat_attack02', 1190), + (18349, 57300, 'kill_horse_combat_attack03', 1190), + (18350, 57303, 'kill_cast_aa_spirit_bear', 1190), + (18351, 57304, 'kill_cast_ghost_rats', 1190), + (18352, 57310, 'kill_result_aa_claw_marks', 1190), + (18353, 57311, 'kill_result_proc_crit_bonus', 1190), + (18354, 57312, 'kill_result_spirit_claws_spinning', 1190), + (18355, 57314, 'kill_sfx_bodyfall', 1190), + (18356, 57318, 'kill_snd_horse_fs_left', 1190), + (18357, 57319, 'kill_snd_horse_fs_right', 1190), + (18358, 57320, 'kill_snd_horse_rx_attack', 1190), + (18359, 57321, 'kill_snd_horse_rx_death', 1190), + (18360, 57322, 'kill_snd_horse_rx_ouch', 1190), + (18361, 57325, 'kill_cast_aa_frosty_cone_forward', 1190), + (18362, 57326, 'kill_cast_cloud_spin', 1190), + (18363, 57327, 'kill_cast_feral_fangs', 1190), + (18364, 57328, 'kill_cast_flurry_claws_attack', 1190), + (18365, 57334, 'kill_result_ice_attack_p2p', 1190), + (18366, 57337, 'kill_cast_aa_flash_bomb_appear', 1190), + (18367, 57338, 'kill_cast_aa_melee_swipe', 1190), + (18368, 57339, 'kill_cast_crit_hawk_summon', 1190), + (18369, 57344, 'kill_icon_merc_heal', 1190), + (18370, 57345, 'kill_icon_merc_melee', 1190), + (18371, 57346, 'kill_icon_merc_ranged', 1190), + (18372, 57347, 'kill_icon_merc_spell', 1190), + (18373, 57348, 'kill_icon_merc_support', 1190), + (18374, 57349, 'kill_icon_merc_tank', 1190), + (18375, 57352, 'kill_cast_aa_spirit_blast_big', 1190), + (18376, 57353, 'kill_cast_feral_fangs_bite', 1190), + (18377, 57356, 'kill_cast_aa_spirit_ape', 1190), + (18378, 57357, 'kill_cast_aa_spirit_boar', 1190), + (18379, 57358, 'kill_cast_aa_spirit_crab', 1190), + (18380, 57359, 'kill_cast_aa_spirit_rats', 1190), + (18381, 57360, 'kill_cast_aa_spirit_stag', 1190), + (18382, 57361, 'kill_cast_claws_strike_targeted', 1190), + (18383, 57364, 'kill_cast_aa_spirit_bat', 1190), + (18384, 57365, 'kill_cast_aa_spirit_cobra', 1190), + (18385, 57366, 'kill_cast_aa_spirit_drake', 1190), + (18386, 57367, 'kill_cast_aa_spirit_frogs', 1190), + (18387, 57368, 'kill_cast_aa_spirit_hawk', 1190), + (18388, 57369, 'kill_cast_aa_spirit_tiger', 1190), + (18389, 57370, 'kill_cast_aa_spirit_wolf', 1190), + (18390, 57375, 'kill_frog_croaking_snd', 1190), + (18391, 57377, 'kill_result_luclin_chunk_slam', 1190), + (18392, 57407, 'kill_tiger_attack_snd', 1190), + (18393, 57415, 'kill_result_aa_tameable_fx', 1190), + (18394, 57418, 'kill_cast_aa_spirit_wolf_howling', 1190), + (18395, 57424, 'kill_result_feral_fangs_vert_bite', 1190), + (18396, 57427, 'kill_cast_aa_frost_wall', 1190), + (18397, 57433, 'kill_result_aa_icicle_spikes', 1190), + (18398, 57434, 'kill_result_aa_quick_heal', 1190), + (18399, 57435, 'kill_result_aa_windy_ward', 1190), + (18400, 57442, 'kill_design_frostfell_candyfx01', 1190), + (18401, 57443, 'kill_design_frostfell_candyfx02', 1190), + (18402, 57444, 'kill_design_frostfell_candyfx03', 1190), + (18403, 57445, 'kill_design_frostfell_candyfx04', 1190), + (18404, 57456, 'kill_snd_footstep', 1190), + (18405, 57459, 'kill_attack_bites', 1190), + (18406, 57460, 'kill_attack_shuffle', 1190), + (18407, 57461, 'kill_attack_tail_swipe', 1190), + (18408, 57467, 'kill_roll', 1190), + (18409, 57497, 'kill_spawn', 1190), + (18410, 57500, 'kill_cast02', 1190), + (18411, 57503, 'kill_combat_idle02', 1190), + (18412, 57506, 'kill_dead_alt', 1190), + (18413, 57507, 'kill_death_alt', 1190), + (18414, 57508, 'kill_fae_mount_combat_idle', 1190), + (18415, 57516, 'kill_result_sparkles_object_swirl', 1190), + (18416, 57517, 'kill_result_star_spirits', 1190), + (18417, 57518, 'kill_run_ground', 1190), + (18418, 57548, 'kill_spawn_idle', 1190), + (18419, 57551, 'kill_backpack_fly_backup', 1190), + (18420, 57552, 'kill_backpack_fly_combat_idle', 1190), + (18421, 57553, 'kill_backpack_fly_fall', 1190), + (18422, 57554, 'kill_backpack_fly_fly_backup', 1190), + (18423, 57555, 'kill_backpack_fly_fly_climb', 1190), + (18424, 57556, 'kill_backpack_fly_fly_dive', 1190), + (18425, 57557, 'kill_backpack_fly_fly_down', 1190), + (18426, 57558, 'kill_backpack_fly_fly_glide', 1190), + (18427, 57559, 'kill_backpack_fly_fly_glide_left', 1190), + (18428, 57560, 'kill_backpack_fly_fly_glide_right', 1190), + (18429, 57561, 'kill_backpack_fly_fly_idle', 1190), + (18430, 57562, 'kill_backpack_fly_fly_run', 1190), + (18431, 57563, 'kill_backpack_fly_fly_strafe_left', 1190), + (18432, 57564, 'kill_backpack_fly_fly_strafe_right', 1190), + (18433, 57565, 'kill_backpack_fly_fly_turn_left', 1190), + (18434, 57566, 'kill_backpack_fly_fly_turn_right', 1190), + (18435, 57567, 'kill_backpack_fly_fly_up', 1190), + (18436, 57568, 'kill_backpack_fly_fly_walk', 1190), + (18437, 57569, 'kill_backpack_fly_idle', 1190), + (18438, 57570, 'kill_backpack_fly_jump', 1190), + (18439, 57571, 'kill_backpack_fly_land', 1190), + (18440, 57572, 'kill_backpack_fly_long_fall', 1190), + (18441, 57573, 'kill_backpack_fly_run', 1190), + (18442, 57574, 'kill_backpack_fly_turn_left', 1190), + (18443, 57575, 'kill_backpack_fly_turn_right', 1190), + (18444, 57576, 'kill_backpack_fly_walk', 1190), + (18445, 57579, 'kill_backpack_backup', 1190), + (18446, 57580, 'kill_backpack_combat_idle', 1190), + (18447, 57581, 'kill_backpack_fall', 1190), + (18448, 57582, 'kill_backpack_fly__walk', 1190), + (18449, 57583, 'kill_backpack_fly_climb', 1190), + (18450, 57584, 'kill_backpack_fly_dive', 1190), + (18451, 57585, 'kill_backpack_fly_down', 1190), + (18452, 57586, 'kill_backpack_fly_glide', 1190), + (18453, 57587, 'kill_backpack_fly_glide_left', 1190), + (18454, 57588, 'kill_backpack_fly_glide_right', 1190), + (18455, 57589, 'kill_backpack_fly_strafe_left', 1190), + (18456, 57590, 'kill_backpack_fly_strafe_right', 1190), + (18457, 57591, 'kill_backpack_fly_up', 1190), + (18458, 57592, 'kill_backpack_idle', 1190), + (18459, 57593, 'kill_backpack_jump', 1190), + (18460, 57594, 'kill_backpack_land', 1190), + (18461, 57595, 'kill_backpack_long_fall', 1190), + (18462, 57596, 'kill_backpack_run', 1190), + (18463, 57597, 'kill_backpack_strafe_left', 1190), + (18464, 57598, 'kill_backpack_strafe_left_run', 1190), + (18465, 57599, 'kill_backpack_strafe_right', 1190), + (18466, 57600, 'kill_backpack_strafe_right_run', 1190), + (18467, 57601, 'kill_backpack_turn_left', 1190), + (18468, 57602, 'kill_backpack_turn_right', 1190), + (18469, 57603, 'kill_backpack_walk', 1190), + (18470, 57608, 'kill_dual_wield_dead_enter', 1190), + (18471, 57611, 'kill_backpack_backup_run', 1190), + (18472, 57619, 'kill_persist_bug_swarm', 1190), + (18473, 57629, 'kill_snd_fae_wing_flaps', 1190), + (18474, 57636, 'kill_drakota_mount_backup', 1190), + (18475, 57637, 'kill_drakota_mount_fall', 1190), + (18476, 57638, 'kill_drakota_mount_fly_backup', 1190), + (18477, 57639, 'kill_drakota_mount_fly_climb', 1190), + (18478, 57640, 'kill_drakota_mount_fly_dive', 1190), + (18479, 57641, 'kill_drakota_mount_fly_down', 1190), + (18480, 57642, 'kill_drakota_mount_fly_glide', 1190), + (18481, 57643, 'kill_drakota_mount_fly_glide_left', 1190), + (18482, 57644, 'kill_drakota_mount_fly_glide_right', 1190), + (18483, 57645, 'kill_drakota_mount_fly_idle', 1190), + (18484, 57646, 'kill_drakota_mount_fly_run', 1190), + (18485, 57647, 'kill_drakota_mount_fly_strafe_left', 1190), + (18486, 57648, 'kill_drakota_mount_fly_strafe_right', 1190), + (18487, 57649, 'kill_drakota_mount_fly_turn_left', 1190), + (18488, 57650, 'kill_drakota_mount_fly_turn_right', 1190), + (18489, 57651, 'kill_drakota_mount_fly_up', 1190), + (18490, 57652, 'kill_drakota_mount_fly_walk', 1190), + (18491, 57653, 'kill_drakota_mount_idle', 1190), + (18492, 57654, 'kill_drakota_mount_idle01', 1190), + (18493, 57655, 'kill_drakota_mount_jump', 1190), + (18494, 57656, 'kill_drakota_mount_jump_substitute', 1190), + (18495, 57657, 'kill_drakota_mount_land', 1190), + (18496, 57658, 'kill_drakota_mount_long_fall', 1190), + (18497, 57659, 'kill_drakota_mount_run', 1190), + (18498, 57660, 'kill_drakota_mount_turn_left', 1190), + (18499, 57661, 'kill_drakota_mount_turn_right', 1190), + (18500, 57662, 'kill_drakota_mount_walk', 1190), + (18501, 57667, 'kill_cast_summon_draconian_cyclone', 1190), + (18502, 57668, 'kill_cast_summon_draconian_necro', 1190), + (18503, 57671, 'kill_design_sky_necro_beams', 1190), + (18504, 57672, 'kill_design_sky_necro_dragon_summon', 1190), + (18505, 57681, 'kill_skyshrine_drake_run', 1190), + (18506, 57682, 'kill_skyshrine_drake_run01', 1190), + (18507, 57689, 'kill_idle_rake', 1190), + (18508, 57726, 'kill_tcg_head_aura', 1190), + (18509, 57727, 'kill_1h_sword_attack04', 1190), + (18510, 57734, 'kill_dance02', 1190), + (18511, 57735, 'kill_dance03', 1190), + (18512, 57736, 'kill_design_speed_boost_buff_no_sound', 1190), + (18513, 57737, 'kill_design_speed_drop_debuff_no_sound', 1190), + (18514, 57738, 'kill_drakota_mount_idle_01', 1190), + (18515, 57739, 'kill_idle_gardening', 1190), + (18516, 57740, 'kill_idle_gathering', 1190), + (18517, 57742, 'kill_result_forced_shader_bugs', 1190), + (18518, 57749, 'kill_design_glow_eyes_blue', 1190), + (18519, 57780, 'kill_wing_wisps_fx', 1190), + (18520, 57787, 'kill_dontuse_idle01', 1190), + (18521, 57788, 'kill_dontuse_idle02', 1190), + (18522, 57789, 'kill_golem_kick', 1190), + (18523, 57792, 'kill_cast_corruption_gather', 1190), + (18524, 57794, 'kill_cast_pollen_spew', 1190), + (18525, 57796, 'kill_cast_seed_spew', 1190), + (18526, 57797, 'kill_cast_spore_spew', 1190), + (18527, 57800, 'kill_idle_gardening_exit', 1190), + (18528, 57801, 'kill_idle_gathering_exit', 1190), + (18529, 57803, 'kill_result_icicle_blast_up', 1190), + (18530, 57805, 'kill_sit_enter_open', 1190), + (18531, 57806, 'kill_sit_exit_open', 1190), + (18532, 57807, 'kill_sit_idle_open', 1190), + (18533, 57810, 'kill_cast_gather_corruption', 1190), + (18534, 57816, 'kill_lounge_enter', 1190), + (18535, 57817, 'kill_lounge_exit', 1190), + (18536, 57818, 'kill_lounge_idle', 1190), + (18537, 57819, 'kill_result_corruption_spew', 1190), + (18538, 57849, 'kill_stalk', 1190), + (18539, 57852, 'kill_backpack_1h_crush_attack', 1190), + (18540, 57853, 'kill_backpack_1h_crush_attack01', 1190), + (18541, 57854, 'kill_backpack_1h_crush_attack02', 1190), + (18542, 57855, 'kill_backpack_1h_crush_attack03', 1190), + (18543, 57856, 'kill_backpack_1h_crush_attack_recoil', 1190), + (18544, 57857, 'kill_backpack_1h_crush_attack_recoil01', 1190), + (18545, 57858, 'kill_backpack_1h_crush_attack_recoil02', 1190), + (18546, 57859, 'kill_backpack_1h_crush_attack_recoil03', 1190), + (18547, 57860, 'kill_backpack_1h_crush_backup', 1190), + (18548, 57861, 'kill_backpack_1h_crush_dodge_backhand', 1190), + (18549, 57862, 'kill_backpack_1h_crush_dodge_down', 1190), + (18550, 57863, 'kill_backpack_1h_crush_dodge_forehand', 1190), + (18551, 57864, 'kill_backpack_1h_crush_dodge_thrust', 1190), + (18552, 57865, 'kill_backpack_1h_crush_enter', 1190), + (18553, 57866, 'kill_backpack_1h_crush_exit', 1190), + (18554, 57867, 'kill_backpack_1h_crush_idle', 1190), + (18555, 57868, 'kill_backpack_1h_crush_ouch_backhand', 1190), + (18556, 57869, 'kill_backpack_1h_crush_ouch_down', 1190), + (18557, 57870, 'kill_backpack_1h_crush_ouch_forehand', 1190), + (18558, 57871, 'kill_backpack_1h_crush_ouch_thrust', 1190), + (18559, 57872, 'kill_backpack_1h_crush_parry_backhand', 1190), + (18560, 57873, 'kill_backpack_1h_crush_parry_down', 1190), + (18561, 57874, 'kill_backpack_1h_crush_parry_forehand', 1190), + (18562, 57875, 'kill_backpack_1h_crush_parry_thrust', 1190), + (18563, 57876, 'kill_backpack_1h_crush_strafe_left', 1190), + (18564, 57877, 'kill_backpack_1h_crush_strafe_right', 1190), + (18565, 57878, 'kill_backpack_1h_crush_walk', 1190), + (18566, 57879, 'kill_backpack_1h_pierce_attack', 1190), + (18567, 57880, 'kill_backpack_1h_pierce_attack01', 1190), + (18568, 57881, 'kill_backpack_1h_pierce_attack02', 1190), + (18569, 57882, 'kill_backpack_1h_pierce_attack03', 1190), + (18570, 57883, 'kill_backpack_1h_pierce_attack_recoil', 1190), + (18571, 57884, 'kill_backpack_1h_pierce_attack_recoil01', 1190), + (18572, 57885, 'kill_backpack_1h_pierce_attack_recoil02', 1190), + (18573, 57886, 'kill_backpack_1h_pierce_attack_recoil03', 1190), + (18574, 57887, 'kill_backpack_1h_pierce_backup', 1190), + (18575, 57888, 'kill_backpack_1h_pierce_dodge_backhand', 1190), + (18576, 57889, 'kill_backpack_1h_pierce_dodge_down', 1190), + (18577, 57890, 'kill_backpack_1h_pierce_dodge_forehand', 1190), + (18578, 57891, 'kill_backpack_1h_pierce_dodge_thrust', 1190), + (18579, 57892, 'kill_backpack_1h_pierce_enter', 1190), + (18580, 57893, 'kill_backpack_1h_pierce_exit', 1190), + (18581, 57894, 'kill_backpack_1h_pierce_idle', 1190), + (18582, 57895, 'kill_backpack_1h_pierce_ouch_backhand', 1190), + (18583, 57896, 'kill_backpack_1h_pierce_ouch_down', 1190), + (18584, 57897, 'kill_backpack_1h_pierce_ouch_forehand', 1190), + (18585, 57898, 'kill_backpack_1h_pierce_ouch_thrust', 1190), + (18586, 57899, 'kill_backpack_1h_pierce_parry_backhand', 1190), + (18587, 57900, 'kill_backpack_1h_pierce_parry_down', 1190), + (18588, 57901, 'kill_backpack_1h_pierce_parry_forehand', 1190), + (18589, 57902, 'kill_backpack_1h_pierce_parry_thrust', 1190), + (18590, 57903, 'kill_backpack_1h_pierce_strafe_left', 1190), + (18591, 57904, 'kill_backpack_1h_pierce_strafe_right', 1190), + (18592, 57905, 'kill_backpack_1h_pierce_walk', 1190), + (18593, 57906, 'kill_backpack_1h_sword_attack', 1190), + (18594, 57907, 'kill_backpack_1h_sword_attack01', 1190), + (18595, 57908, 'kill_backpack_1h_sword_attack02', 1190), + (18596, 57909, 'kill_backpack_1h_sword_attack03', 1190), + (18597, 57910, 'kill_backpack_1h_sword_attack_recoil', 1190), + (18598, 57911, 'kill_backpack_1h_sword_attack_recoil01', 1190), + (18599, 57912, 'kill_backpack_1h_sword_attack_recoil02', 1190), + (18600, 57913, 'kill_backpack_1h_sword_attack_recoil03', 1190), + (18601, 57914, 'kill_backpack_1h_sword_backup', 1190), + (18602, 57915, 'kill_backpack_1h_sword_death_blow', 1190), + (18603, 57916, 'kill_backpack_1h_sword_death_blow01', 1190), + (18604, 57917, 'kill_backpack_1h_sword_dodge_backhand', 1190), + (18605, 57918, 'kill_backpack_1h_sword_dodge_down', 1190), + (18606, 57919, 'kill_backpack_1h_sword_dodge_forehand', 1190), + (18607, 57920, 'kill_backpack_1h_sword_dodge_thrust', 1190), + (18608, 57921, 'kill_backpack_1h_sword_enter', 1190), + (18609, 57922, 'kill_backpack_1h_sword_exit', 1190), + (18610, 57923, 'kill_backpack_1h_sword_idle', 1190), + (18611, 57924, 'kill_backpack_1h_sword_ouch_backhand', 1190), + (18612, 57925, 'kill_backpack_1h_sword_ouch_down', 1190), + (18613, 57926, 'kill_backpack_1h_sword_ouch_forehand', 1190), + (18614, 57927, 'kill_backpack_1h_sword_ouch_thrust', 1190), + (18615, 57928, 'kill_backpack_1h_sword_parry_backhand', 1190), + (18616, 57929, 'kill_backpack_1h_sword_parry_down', 1190), + (18617, 57930, 'kill_backpack_1h_sword_parry_forehand', 1190), + (18618, 57931, 'kill_backpack_1h_sword_parry_thrust', 1190), + (18619, 57932, 'kill_backpack_1h_sword_strafe_left', 1190), + (18620, 57933, 'kill_backpack_1h_sword_strafe_right', 1190), + (18621, 57934, 'kill_backpack_1h_sword_walk', 1190), + (18622, 57935, 'kill_backpack_1h_throw_attack', 1190), + (18623, 57936, 'kill_backpack_1h_thrown_attack', 1190), + (18624, 57937, 'kill_backpack_1h_thrown_backup', 1190), + (18625, 57938, 'kill_backpack_1h_thrown_dodge_backhand', 1190), + (18626, 57939, 'kill_backpack_1h_thrown_dodge_down', 1190), + (18627, 57940, 'kill_backpack_1h_thrown_dodge_forehand', 1190), + (18628, 57941, 'kill_backpack_1h_thrown_dodge_thrust', 1190), + (18629, 57942, 'kill_backpack_1h_thrown_idle', 1190), + (18630, 57943, 'kill_backpack_1h_thrown_ouch_backhand', 1190), + (18631, 57944, 'kill_backpack_1h_thrown_ouch_down', 1190), + (18632, 57945, 'kill_backpack_1h_thrown_ouch_forehand', 1190), + (18633, 57946, 'kill_backpack_1h_thrown_ouch_thrust', 1190), + (18634, 57947, 'kill_backpack_1h_thrown_strafe_left', 1190), + (18635, 57948, 'kill_backpack_1h_thrown_strafe_right', 1190), + (18636, 57949, 'kill_backpack_1h_thrown_walk', 1190), + (18637, 57950, 'kill_backpack_1h_wand_attack', 1190), + (18638, 57951, 'kill_backpack_1h_wand_attack01', 1190), + (18639, 57952, 'kill_backpack_1h_wand_attack02', 1190), + (18640, 57953, 'kill_backpack_1h_wand_attack03', 1190), + (18641, 57954, 'kill_backpack_1h_wand_attack_recoil', 1190), + (18642, 57955, 'kill_backpack_1h_wand_attack_recoil01', 1190), + (18643, 57956, 'kill_backpack_1h_wand_attack_recoil02', 1190), + (18644, 57957, 'kill_backpack_1h_wand_attack_recoil03', 1190), + (18645, 57958, 'kill_backpack_1h_wand_backup', 1190), + (18646, 57959, 'kill_backpack_1h_wand_dodge_backhand', 1190), + (18647, 57960, 'kill_backpack_1h_wand_dodge_down', 1190), + (18648, 57961, 'kill_backpack_1h_wand_dodge_forehand', 1190), + (18649, 57962, 'kill_backpack_1h_wand_dodge_thrust', 1190), + (18650, 57963, 'kill_backpack_1h_wand_enter', 1190), + (18651, 57964, 'kill_backpack_1h_wand_exit', 1190), + (18652, 57965, 'kill_backpack_1h_wand_idle', 1190), + (18653, 57966, 'kill_backpack_1h_wand_ouch_backhand', 1190), + (18654, 57967, 'kill_backpack_1h_wand_ouch_down', 1190), + (18655, 57968, 'kill_backpack_1h_wand_ouch_forehand', 1190), + (18656, 57969, 'kill_backpack_1h_wand_ouch_thrust', 1190), + (18657, 57970, 'kill_backpack_1h_wand_parry_backhand', 1190), + (18658, 57971, 'kill_backpack_1h_wand_parry_down', 1190), + (18659, 57972, 'kill_backpack_1h_wand_parry_forehand', 1190), + (18660, 57973, 'kill_backpack_1h_wand_parry_thrust', 1190), + (18661, 57974, 'kill_backpack_1h_wand_strafe_left', 1190), + (18662, 57975, 'kill_backpack_1h_wand_strafe_right', 1190), + (18663, 57976, 'kill_backpack_1h_wand_walk', 1190), + (18664, 57977, 'kill_backpack_2h_sword_attack', 1190), + (18665, 57978, 'kill_backpack_2h_sword_attack01', 1190), + (18666, 57979, 'kill_backpack_2h_sword_attack02', 1190), + (18667, 57980, 'kill_backpack_2h_sword_attack03', 1190), + (18668, 57981, 'kill_backpack_2h_sword_attack_recoil', 1190), + (18669, 57982, 'kill_backpack_2h_sword_attack_recoil01', 1190), + (18670, 57983, 'kill_backpack_2h_sword_attack_recoil02', 1190), + (18671, 57984, 'kill_backpack_2h_sword_attack_recoil03', 1190), + (18672, 57985, 'kill_backpack_2h_sword_backup', 1190), + (18673, 57986, 'kill_backpack_2h_sword_charge_up', 1190), + (18674, 57987, 'kill_backpack_2h_sword_defensive_buff', 1190), + (18675, 57988, 'kill_backpack_2h_sword_dodge_backhand', 1190), + (18676, 57989, 'kill_backpack_2h_sword_dodge_down', 1190), + (18677, 57990, 'kill_backpack_2h_sword_dodge_forehand', 1190), + (18678, 57991, 'kill_backpack_2h_sword_dodge_thrust', 1190), + (18679, 57992, 'kill_backpack_2h_sword_enter', 1190), + (18680, 57993, 'kill_backpack_2h_sword_exit', 1190), + (18681, 57994, 'kill_backpack_2h_sword_feint', 1190), + (18682, 57995, 'kill_backpack_2h_sword_idle', 1190), + (18683, 57996, 'kill_backpack_2h_sword_kick', 1190), + (18684, 57997, 'kill_backpack_2h_sword_offensive_buff', 1190), + (18685, 57998, 'kill_backpack_2h_sword_ouch_backhand', 1190), + (18686, 57999, 'kill_backpack_2h_sword_ouch_down', 1190), + (18687, 58000, 'kill_backpack_2h_sword_ouch_forehand', 1190), + (18688, 58001, 'kill_backpack_2h_sword_ouch_thrust', 1190), + (18689, 58002, 'kill_backpack_2h_sword_parry_backhand', 1190), + (18690, 58003, 'kill_backpack_2h_sword_parry_down', 1190), + (18691, 58004, 'kill_backpack_2h_sword_parry_forehand', 1190), + (18692, 58005, 'kill_backpack_2h_sword_parry_thrust', 1190), + (18693, 58006, 'kill_backpack_2h_sword_strafe_left', 1190), + (18694, 58007, 'kill_backpack_2h_sword_strafe_right', 1190), + (18695, 58008, 'kill_backpack_2h_sword_super_buff', 1190), + (18696, 58009, 'kill_backpack_2h_sword_taunt', 1190), + (18697, 58010, 'kill_backpack_2h_sword_taunt_combat_art', 1190), + (18698, 58011, 'kill_backpack_2h_sword_walk', 1190), + (18699, 58012, 'kill_backpack_2h_sword_whirling_attack', 1190), + (18700, 58013, 'kill_backpack_2h_sword_wild_swing', 1190), + (18701, 58014, 'kill_backpack_alchemy_failure', 1190), + (18702, 58015, 'kill_backpack_alchemy_idle', 1190), + (18703, 58016, 'kill_backpack_alchemy_success', 1190), + (18704, 58017, 'kill_backpack_applaude', 1190), + (18705, 58018, 'kill_backpack_artificing_failure', 1190), + (18706, 58019, 'kill_backpack_artificing_idle', 1190), + (18707, 58020, 'kill_backpack_artificing_success', 1190), + (18708, 58021, 'kill_backpack_attack', 1190), + (18709, 58022, 'kill_backpack_bostaff_attack', 1190), + (18710, 58023, 'kill_backpack_bostaff_attack01', 1190), + (18711, 58024, 'kill_backpack_bostaff_attack02', 1190), + (18712, 58025, 'kill_backpack_bostaff_attack03', 1190), + (18713, 58026, 'kill_backpack_bostaff_attack_recoil', 1190), + (18714, 58027, 'kill_backpack_bostaff_attack_recoil01', 1190), + (18715, 58028, 'kill_backpack_bostaff_attack_recoil02', 1190), + (18716, 58029, 'kill_backpack_bostaff_attack_recoil03', 1190), + (18717, 58030, 'kill_backpack_bostaff_backup', 1190), + (18718, 58031, 'kill_backpack_bostaff_charge_up', 1190), + (18719, 58032, 'kill_backpack_bostaff_defensive_buff', 1190), + (18720, 58033, 'kill_backpack_bostaff_dodge_backhand', 1190), + (18721, 58034, 'kill_backpack_bostaff_dodge_down', 1190), + (18722, 58035, 'kill_backpack_bostaff_dodge_forehand', 1190), + (18723, 58036, 'kill_backpack_bostaff_dodge_thrust', 1190), + (18724, 58037, 'kill_backpack_bostaff_enter', 1190), + (18725, 58038, 'kill_backpack_bostaff_exit', 1190), + (18726, 58039, 'kill_backpack_bostaff_feint', 1190), + (18727, 58040, 'kill_backpack_bostaff_idle', 1190), + (18728, 58041, 'kill_backpack_bostaff_kick', 1190), + (18729, 58042, 'kill_backpack_bostaff_knockdowntoknees', 1190), + (18730, 58043, 'kill_backpack_bostaff_knockedtoback', 1190), + (18731, 58044, 'kill_backpack_bostaff_knockedtoback_getup', 1190), + (18732, 58045, 'kill_backpack_bostaff_offensive_buff', 1190), + (18733, 58046, 'kill_backpack_bostaff_ouch_backhand', 1190), + (18734, 58047, 'kill_backpack_bostaff_ouch_down', 1190), + (18735, 58048, 'kill_backpack_bostaff_ouch_forehand', 1190), + (18736, 58049, 'kill_backpack_bostaff_ouch_thrust', 1190), + (18737, 58050, 'kill_backpack_bostaff_parry_backhand', 1190), + (18738, 58051, 'kill_backpack_bostaff_parry_down', 1190), + (18739, 58052, 'kill_backpack_bostaff_parry_forehand', 1190), + (18740, 58053, 'kill_backpack_bostaff_parry_thrust', 1190), + (18741, 58054, 'kill_backpack_bostaff_strafe_left', 1190), + (18742, 58055, 'kill_backpack_bostaff_strafe_right', 1190), + (18743, 58056, 'kill_backpack_bostaff_super_buff', 1190), + (18744, 58057, 'kill_backpack_bostaff_taunt_combat_art', 1190), + (18745, 58058, 'kill_backpack_bostaff_walk', 1190), + (18746, 58059, 'kill_backpack_bostaff_whirling_attack', 1190), + (18747, 58060, 'kill_backpack_bostaff_wild_swing', 1190), + (18748, 58061, 'kill_backpack_bow_aim_down', 1190), + (18749, 58062, 'kill_backpack_bow_aim_up', 1190), + (18750, 58063, 'kill_backpack_bow_attack', 1190), + (18751, 58064, 'kill_backpack_bow_attack_2x', 1190), + (18752, 58065, 'kill_backpack_bow_backup', 1190), + (18753, 58066, 'kill_backpack_bow_dodge_backhand', 1190), + (18754, 58067, 'kill_backpack_bow_dodge_down', 1190), + (18755, 58068, 'kill_backpack_bow_dodge_forehand', 1190), + (18756, 58069, 'kill_backpack_bow_dodge_thrust', 1190), + (18757, 58070, 'kill_backpack_bow_enter', 1190), + (18758, 58071, 'kill_backpack_bow_exit', 1190), + (18759, 58072, 'kill_backpack_bow_idle', 1190), + (18760, 58073, 'kill_backpack_bow_knockdowntoknees', 1190), + (18761, 58074, 'kill_backpack_bow_knockedtoback', 1190), + (18762, 58075, 'kill_backpack_bow_knockedtoback_getup', 1190), + (18763, 58076, 'kill_backpack_bow_ouch_backhand', 1190), + (18764, 58077, 'kill_backpack_bow_ouch_down', 1190), + (18765, 58078, 'kill_backpack_bow_ouch_forehand', 1190), + (18766, 58079, 'kill_backpack_bow_ouch_thrust', 1190), + (18767, 58080, 'kill_backpack_bow_strafe_left', 1190), + (18768, 58081, 'kill_backpack_bow_strafe_right', 1190), + (18769, 58082, 'kill_backpack_bow_walk', 1190), + (18770, 58083, 'kill_backpack_cast_aoe_beneficial_end', 1190), + (18771, 58084, 'kill_backpack_cast_aoe_beneficial_loop', 1190), + (18772, 58085, 'kill_backpack_cast_aoe_beneficial_start', 1190), + (18773, 58086, 'kill_backpack_charge', 1190), + (18774, 58087, 'kill_backpack_charge_up', 1190), + (18775, 58088, 'kill_backpack_chop_ground_digging', 1190), + (18776, 58089, 'kill_backpack_chop_ground_success', 1190), + (18777, 58090, 'kill_backpack_climbing_backup', 1190), + (18778, 58091, 'kill_backpack_climbing_enter_down', 1190), + (18779, 58092, 'kill_backpack_climbing_enter_down_root', 1190), + (18780, 58093, 'kill_backpack_climbing_exit_up', 1190), + (18781, 58094, 'kill_backpack_climbing_exit_up_root', 1190), + (18782, 58095, 'kill_backpack_climbing_idle', 1190), + (18783, 58096, 'kill_backpack_climbing_idle01', 1190), + (18784, 58097, 'kill_backpack_climbing_ouch', 1190), + (18785, 58098, 'kill_backpack_climbing_strafe_left', 1190), + (18786, 58099, 'kill_backpack_climbing_strafe_right', 1190), + (18787, 58100, 'kill_backpack_climbing_walk', 1190), + (18788, 58101, 'kill_backpack_combat_backup_run', 1190), + (18789, 58102, 'kill_backpack_combat_run', 1190), + (18790, 58103, 'kill_backpack_combat_strafe_left_run', 1190), + (18791, 58104, 'kill_backpack_combat_strafe_right_run', 1190), + (18792, 58105, 'kill_backpack_cooking_failure', 1190), + (18793, 58106, 'kill_backpack_cooking_idle', 1190), + (18794, 58107, 'kill_backpack_cooking_success', 1190), + (18795, 58108, 'kill_backpack_crouch_backup', 1190), + (18796, 58109, 'kill_backpack_crouch_enter', 1190), + (18797, 58110, 'kill_backpack_crouch_exit', 1190), + (18798, 58111, 'kill_backpack_crouch_idle', 1190), + (18799, 58112, 'kill_backpack_crouch_strafe_left', 1190), + (18800, 58113, 'kill_backpack_crouch_strafe_right', 1190), + (18801, 58114, 'kill_backpack_crouch_turn_left', 1190), + (18802, 58115, 'kill_backpack_crouch_turn_right', 1190), + (18803, 58116, 'kill_backpack_crouch_walk', 1190), + (18804, 58117, 'kill_backpack_cry', 1190), + (18805, 58118, 'kill_backpack_dance', 1190), + (18806, 58119, 'kill_backpack_dead', 1190), + (18807, 58120, 'kill_backpack_dead_enter', 1190), + (18808, 58121, 'kill_backpack_defensive_buff', 1190), + (18809, 58122, 'kill_backpack_drink_chug', 1190), + (18810, 58123, 'kill_backpack_drinking_failure', 1190), + (18811, 58124, 'kill_backpack_drinking_idle', 1190), + (18812, 58125, 'kill_backpack_drinking_success', 1190), + (18813, 58126, 'kill_backpack_dual_wield_attack', 1190), + (18814, 58127, 'kill_backpack_dual_wield_attack01', 1190), + (18815, 58128, 'kill_backpack_dual_wield_attack02', 1190), + (18816, 58129, 'kill_backpack_dual_wield_attack03', 1190), + (18817, 58130, 'kill_backpack_dual_wield_attack_recoil', 1190), + (18818, 58131, 'kill_backpack_dual_wield_attack_recoil01', 1190), + (18819, 58132, 'kill_backpack_dual_wield_attack_recoil02', 1190), + (18820, 58133, 'kill_backpack_dual_wield_attack_recoil03', 1190), + (18821, 58134, 'kill_backpack_dual_wield_backup', 1190), + (18822, 58135, 'kill_backpack_dual_wield_defensive_buff', 1190), + (18823, 58136, 'kill_backpack_dual_wield_dodge_backhand', 1190), + (18824, 58137, 'kill_backpack_dual_wield_dodge_down', 1190), + (18825, 58138, 'kill_backpack_dual_wield_dodge_forehand', 1190), + (18826, 58139, 'kill_backpack_dual_wield_dodge_thrust', 1190), + (18827, 58140, 'kill_backpack_dual_wield_enter', 1190), + (18828, 58141, 'kill_backpack_dual_wield_exit', 1190), + (18829, 58142, 'kill_backpack_dual_wield_feint', 1190), + (18830, 58143, 'kill_backpack_dual_wield_idle', 1190), + (18831, 58144, 'kill_backpack_dual_wield_kick', 1190), + (18832, 58145, 'kill_backpack_dual_wield_knockdowntoknees', 1190), + (18833, 58146, 'kill_backpack_dual_wield_knockedtoback', 1190), + (18834, 58147, 'kill_backpack_dual_wield_knockedtoback_getup', 1190), + (18835, 58148, 'kill_backpack_dual_wield_offensive_buff', 1190), + (18836, 58149, 'kill_backpack_dual_wield_ouch_backhand', 1190), + (18837, 58150, 'kill_backpack_dual_wield_ouch_down', 1190), + (18838, 58151, 'kill_backpack_dual_wield_ouch_forehand', 1190), + (18839, 58152, 'kill_backpack_dual_wield_ouch_thrust', 1190), + (18840, 58153, 'kill_backpack_dual_wield_parry_backhand', 1190), + (18841, 58154, 'kill_backpack_dual_wield_parry_down', 1190), + (18842, 58155, 'kill_backpack_dual_wield_parry_forehand', 1190), + (18843, 58156, 'kill_backpack_dual_wield_parry_thrust', 1190), + (18844, 58157, 'kill_backpack_dual_wield_strafe_left', 1190), + (18845, 58158, 'kill_backpack_dual_wield_strafe_right', 1190), + (18846, 58159, 'kill_backpack_dual_wield_super_buff', 1190), + (18847, 58160, 'kill_backpack_dual_wield_taunt_combat_art', 1190), + (18848, 58161, 'kill_backpack_dual_wield_walk', 1190), + (18849, 58162, 'kill_backpack_dual_wield_whirling_attack', 1190), + (18850, 58163, 'kill_backpack_dual_wield_wild_swing', 1190), + (18851, 58164, 'kill_backpack_fall_moving', 1190), + (18852, 58165, 'kill_backpack_feint', 1190), + (18853, 58166, 'kill_backpack_fishing_cast', 1190), + (18854, 58167, 'kill_backpack_fishing_fight', 1190), + (18855, 58168, 'kill_backpack_fishing_reel_in', 1190), + (18856, 58169, 'kill_backpack_flirt', 1190), + (18857, 58170, 'kill_backpack_forestry_chopping', 1190), + (18858, 58171, 'kill_backpack_forestry_success', 1190), + (18859, 58172, 'kill_backpack_gag', 1190), + (18860, 58173, 'kill_backpack_gathering_end', 1190), + (18861, 58174, 'kill_backpack_gathering_loop', 1190), + (18862, 58175, 'kill_backpack_gathering_search', 1190), + (18863, 58176, 'kill_backpack_gathering_start', 1190), + (18864, 58177, 'kill_backpack_gathering_success', 1190), + (18865, 58178, 'kill_backpack_ghost_idle', 1190), + (18866, 58179, 'kill_backpack_giggle', 1190), + (18867, 58180, 'kill_backpack_glare', 1190), + (18868, 58181, 'kill_backpack_hearnoevil', 1190), + (18869, 58182, 'kill_backpack_heartattack', 1190), + (18870, 58183, 'kill_backpack_hover_idle', 1190), + (18871, 58184, 'kill_backpack_jump_moving', 1190), + (18872, 58185, 'kill_backpack_kick', 1190), + (18873, 58186, 'kill_backpack_knockdown_attack', 1190), + (18874, 58187, 'kill_backpack_knockdowntoknees', 1190), + (18875, 58188, 'kill_backpack_knockedtoback', 1190), + (18876, 58189, 'kill_backpack_knockedtoback_getup', 1190), + (18877, 58190, 'kill_backpack_knockedtoback_onbackidle', 1190), + (18878, 58191, 'kill_backpack_leatherworking_failure', 1190), + (18879, 58192, 'kill_backpack_leatherworking_idle', 1190), + (18880, 58193, 'kill_backpack_leatherworking_success', 1190), + (18881, 58194, 'kill_backpack_left_hand_fist', 1190), + (18882, 58195, 'kill_backpack_left_hand_relaxed', 1190), + (18883, 58196, 'kill_backpack_listen', 1190), + (18884, 58197, 'kill_backpack_long_fall_moving', 1190), + (18885, 58198, 'kill_backpack_metalworking_failure', 1190), + (18886, 58199, 'kill_backpack_metalworking_idle', 1190), + (18887, 58200, 'kill_backpack_metalworking_success', 1190), + (18888, 58201, 'kill_backpack_mining_digging', 1190), + (18889, 58202, 'kill_backpack_mining_success', 1190), + (18890, 58203, 'kill_backpack_monk_attack', 1190), + (18891, 58204, 'kill_backpack_monk_attack01', 1190), + (18892, 58205, 'kill_backpack_monk_attack02', 1190), + (18893, 58206, 'kill_backpack_monk_attack03', 1190), + (18894, 58207, 'kill_backpack_monk_attack_recoil', 1190), + (18895, 58208, 'kill_backpack_monk_attack_recoil01', 1190), + (18896, 58209, 'kill_backpack_monk_attack_recoil02', 1190), + (18897, 58210, 'kill_backpack_monk_attack_recoil03', 1190), + (18898, 58211, 'kill_backpack_monk_backup', 1190), + (18899, 58212, 'kill_backpack_monk_charge_up', 1190), + (18900, 58213, 'kill_backpack_monk_defensive_buff', 1190), + (18901, 58214, 'kill_backpack_monk_dodge_backhand', 1190), + (18902, 58215, 'kill_backpack_monk_dodge_down', 1190), + (18903, 58216, 'kill_backpack_monk_dodge_forehand', 1190), + (18904, 58217, 'kill_backpack_monk_dodge_thrust', 1190), + (18905, 58218, 'kill_backpack_monk_enter', 1190), + (18906, 58219, 'kill_backpack_monk_exit', 1190), + (18907, 58220, 'kill_backpack_monk_feint', 1190), + (18908, 58221, 'kill_backpack_monk_idle', 1190), + (18909, 58222, 'kill_backpack_monk_kick', 1190), + (18910, 58223, 'kill_backpack_monk_kick_flying', 1190), + (18911, 58224, 'kill_backpack_monk_kick_spin', 1190), + (18912, 58225, 'kill_backpack_monk_knockdowntoknees', 1190), + (18913, 58226, 'kill_backpack_monk_knockedtoback', 1190), + (18914, 58227, 'kill_backpack_monk_knockedtoback_getup', 1190), + (18915, 58228, 'kill_backpack_monk_offensive_buff', 1190), + (18916, 58229, 'kill_backpack_monk_offensive_buff_short', 1190), + (18917, 58230, 'kill_backpack_monk_ouch_backhand', 1190), + (18918, 58231, 'kill_backpack_monk_ouch_down', 1190), + (18919, 58232, 'kill_backpack_monk_ouch_forehand', 1190), + (18920, 58233, 'kill_backpack_monk_ouch_thrust', 1190), + (18921, 58234, 'kill_backpack_monk_parry_backhand', 1190), + (18922, 58235, 'kill_backpack_monk_parry_down', 1190), + (18923, 58236, 'kill_backpack_monk_parry_forehand', 1190), + (18924, 58237, 'kill_backpack_monk_parry_thrust', 1190), + (18925, 58238, 'kill_backpack_monk_strafe_left', 1190), + (18926, 58239, 'kill_backpack_monk_strafe_right', 1190), + (18927, 58240, 'kill_backpack_monk_super_buff', 1190), + (18928, 58241, 'kill_backpack_monk_taunt_combat_art', 1190), + (18929, 58242, 'kill_backpack_monk_walk', 1190), + (18930, 58243, 'kill_backpack_monk_whirling_attack', 1190), + (18931, 58244, 'kill_backpack_monk_wild_swing', 1190), + (18932, 58245, 'kill_backpack_offensive_buff', 1190), + (18933, 58246, 'kill_backpack_ouch', 1190), + (18934, 58247, 'kill_backpack_pike_attack', 1190), + (18935, 58248, 'kill_backpack_pike_attack01', 1190), + (18936, 58249, 'kill_backpack_pike_attack02', 1190), + (18937, 58250, 'kill_backpack_pike_attack03', 1190), + (18938, 58251, 'kill_backpack_pike_attack_recoil', 1190), + (18939, 58252, 'kill_backpack_pike_attack_recoil01', 1190), + (18940, 58253, 'kill_backpack_pike_attack_recoil02', 1190), + (18941, 58254, 'kill_backpack_pike_attack_recoil03', 1190), + (18942, 58255, 'kill_backpack_pike_backup', 1190), + (18943, 58256, 'kill_backpack_pike_charge_up', 1190), + (18944, 58257, 'kill_backpack_pike_death_blow', 1190), + (18945, 58258, 'kill_backpack_pike_defensive_buff', 1190), + (18946, 58259, 'kill_backpack_pike_dodge_backhand', 1190), + (18947, 58260, 'kill_backpack_pike_dodge_down', 1190), + (18948, 58261, 'kill_backpack_pike_dodge_forehand', 1190), + (18949, 58262, 'kill_backpack_pike_dodge_thrust', 1190), + (18950, 58263, 'kill_backpack_pike_enter', 1190), + (18951, 58264, 'kill_backpack_pike_exit', 1190), + (18952, 58265, 'kill_backpack_pike_feint', 1190), + (18953, 58266, 'kill_backpack_pike_idle', 1190), + (18954, 58267, 'kill_backpack_pike_kick', 1190), + (18955, 58268, 'kill_backpack_pike_knockdowntoknees', 1190), + (18956, 58269, 'kill_backpack_pike_knockedtoback', 1190), + (18957, 58270, 'kill_backpack_pike_knockedtoback_getup', 1190), + (18958, 58271, 'kill_backpack_pike_offensive_buff', 1190), + (18959, 58272, 'kill_backpack_pike_ouch_backhand', 1190), + (18960, 58273, 'kill_backpack_pike_ouch_down', 1190), + (18961, 58274, 'kill_backpack_pike_ouch_forehand', 1190), + (18962, 58275, 'kill_backpack_pike_ouch_thrust', 1190), + (18963, 58276, 'kill_backpack_pike_parry_backhand', 1190), + (18964, 58277, 'kill_backpack_pike_parry_down', 1190), + (18965, 58278, 'kill_backpack_pike_parry_forehand', 1190), + (18966, 58279, 'kill_backpack_pike_parry_thrust', 1190), + (18967, 58280, 'kill_backpack_pike_strafe_left', 1190), + (18968, 58281, 'kill_backpack_pike_strafe_right', 1190), + (18969, 58282, 'kill_backpack_pike_super_buff', 1190), + (18970, 58283, 'kill_backpack_pike_taunt', 1190), + (18971, 58284, 'kill_backpack_pike_walk', 1190), + (18972, 58285, 'kill_backpack_pike_whirling_attack', 1190), + (18973, 58286, 'kill_backpack_pike_wild_swing', 1190), + (18974, 58287, 'kill_backpack_ponder', 1190), + (18975, 58288, 'kill_backpack_pugilist_attack', 1190), + (18976, 58289, 'kill_backpack_pugilist_attack01', 1190), + (18977, 58290, 'kill_backpack_pugilist_attack02', 1190), + (18978, 58291, 'kill_backpack_pugilist_attack03', 1190), + (18979, 58292, 'kill_backpack_pugilist_attack_recoil', 1190), + (18980, 58293, 'kill_backpack_pugilist_attack_recoil01', 1190), + (18981, 58294, 'kill_backpack_pugilist_attack_recoil02', 1190), + (18982, 58295, 'kill_backpack_pugilist_attack_recoil03', 1190), + (18983, 58296, 'kill_backpack_pugilist_backup', 1190), + (18984, 58297, 'kill_backpack_pugilist_charge_up', 1190), + (18985, 58298, 'kill_backpack_pugilist_defensive_buff', 1190), + (18986, 58299, 'kill_backpack_pugilist_dodge_backhand', 1190), + (18987, 58300, 'kill_backpack_pugilist_dodge_down', 1190), + (18988, 58301, 'kill_backpack_pugilist_dodge_forehand', 1190), + (18989, 58302, 'kill_backpack_pugilist_dodge_thrust', 1190), + (18990, 58303, 'kill_backpack_pugilist_enter', 1190), + (18991, 58304, 'kill_backpack_pugilist_exit', 1190), + (18992, 58305, 'kill_backpack_pugilist_feint', 1190), + (18993, 58306, 'kill_backpack_pugilist_idle', 1190), + (18994, 58307, 'kill_backpack_pugilist_kick', 1190), + (18995, 58308, 'kill_backpack_pugilist_knockdowntoknees', 1190), + (18996, 58309, 'kill_backpack_pugilist_knockedtoback', 1190), + (18997, 58310, 'kill_backpack_pugilist_knockedtoback_getup', 1190), + (18998, 58311, 'kill_backpack_pugilist_offensive_buff', 1190), + (18999, 58312, 'kill_backpack_pugilist_ouch_backhand', 1190), + (19000, 58313, 'kill_backpack_pugilist_ouch_down', 1190), + (19001, 58314, 'kill_backpack_pugilist_ouch_forehand', 1190), + (19002, 58315, 'kill_backpack_pugilist_ouch_thrust', 1190), + (19003, 58316, 'kill_backpack_pugilist_parry_backhand', 1190), + (19004, 58317, 'kill_backpack_pugilist_parry_down', 1190), + (19005, 58318, 'kill_backpack_pugilist_parry_forehand', 1190), + (19006, 58319, 'kill_backpack_pugilist_parry_thrust', 1190), + (19007, 58320, 'kill_backpack_pugilist_strafe_left', 1190), + (19008, 58321, 'kill_backpack_pugilist_strafe_right', 1190), + (19009, 58322, 'kill_backpack_pugilist_super_buff', 1190), + (19010, 58323, 'kill_backpack_pugilist_taunt', 1190), + (19011, 58324, 'kill_backpack_pugilist_walk', 1190), + (19012, 58325, 'kill_backpack_pugilist_whirling_attack', 1190), + (19013, 58326, 'kill_backpack_pugilist_wild_swing', 1190), + (19014, 58327, 'kill_backpack_resurrect', 1190), + (19015, 58328, 'kill_backpack_right_hand_fist', 1190), + (19016, 58329, 'kill_backpack_right_hand_relaxed', 1190), + (19017, 58330, 'kill_backpack_rude', 1190), + (19018, 58331, 'kill_backpack_sad', 1190), + (19019, 58332, 'kill_backpack_salute_freeport', 1190), + (19020, 58333, 'kill_backpack_scheme', 1190), + (19021, 58334, 'kill_backpack_scratch', 1190), + (19022, 58335, 'kill_backpack_scribing_idle', 1190), + (19023, 58336, 'kill_backpack_seenoevil', 1190), + (19024, 58337, 'kill_backpack_shame', 1190), + (19025, 58338, 'kill_backpack_shield_block_backhand', 1190), + (19026, 58339, 'kill_backpack_shield_block_down', 1190), + (19027, 58340, 'kill_backpack_shield_block_forehand', 1190), + (19028, 58341, 'kill_backpack_shield_block_thrust', 1190), + (19029, 58342, 'kill_backpack_shield_shove', 1190), + (19030, 58343, 'kill_backpack_shiver', 1190), + (19031, 58344, 'kill_backpack_sit_drink', 1190), + (19032, 58345, 'kill_backpack_sit_enter', 1190), + (19033, 58346, 'kill_backpack_sit_exit', 1190), + (19034, 58347, 'kill_backpack_sit_idle', 1190), + (19035, 58348, 'kill_backpack_sneeze', 1190), + (19036, 58349, 'kill_backpack_sniff', 1190), + (19037, 58350, 'kill_backpack_speaknoevil', 1190), + (19038, 58351, 'kill_backpack_square', 1190), + (19039, 58352, 'kill_backpack_stinky', 1190), + (19040, 58353, 'kill_backpack_sulk', 1190), + (19041, 58354, 'kill_backpack_super_buff', 1190), + (19042, 58355, 'kill_backpack_swim_attack', 1190), + (19043, 58356, 'kill_backpack_swim_backup', 1190), + (19044, 58357, 'kill_backpack_swim_idle', 1190), + (19045, 58358, 'kill_backpack_swim_ouch', 1190), + (19046, 58359, 'kill_backpack_swim_walk', 1190), + (19047, 58360, 'kill_backpack_tail', 1190), + (19048, 58361, 'kill_backpack_tailoring_failure', 1190), + (19049, 58362, 'kill_backpack_tailoring_idle', 1190), + (19050, 58363, 'kill_backpack_tailoring_success', 1190), + (19051, 58364, 'kill_backpack_tapfoot', 1190), + (19052, 58365, 'kill_backpack_taunt_combat_art', 1190), + (19053, 58366, 'kill_backpack_threaten', 1190), + (19054, 58367, 'kill_backpack_untrained_attack', 1190), + (19055, 58368, 'kill_backpack_untrained_backup', 1190), + (19056, 58369, 'kill_backpack_untrained_dodge', 1190), + (19057, 58370, 'kill_backpack_untrained_dodge01', 1190), + (19058, 58371, 'kill_backpack_untrained_dodge02', 1190), + (19059, 58372, 'kill_backpack_untrained_idle', 1190), + (19060, 58373, 'kill_backpack_untrained_ouch', 1190), + (19061, 58374, 'kill_backpack_untrained_ouch01', 1190), + (19062, 58375, 'kill_backpack_untrained_parry', 1190), + (19063, 58376, 'kill_backpack_untrained_recoil', 1190), + (19064, 58377, 'kill_backpack_untrained_strafe_left', 1190), + (19065, 58378, 'kill_backpack_untrained_strafe_right', 1190), + (19066, 58379, 'kill_backpack_untrained_walk', 1190), + (19067, 58380, 'kill_backpack_whirling_attack', 1190), + (19068, 58381, 'kill_backpack_whistle', 1190), + (19069, 58382, 'kill_backpack_wild_swing', 1190), + (19070, 58383, 'kill_backpack_wild_swing_recoilmax', 1190), + (19071, 58384, 'kill_backpack_woodworking_failure', 1190), + (19072, 58385, 'kill_backpack_woodworking_idle', 1190), + (19073, 58386, 'kill_backpack_woodworking_success', 1190), + (19074, 58387, 'kill_backpack_worship_idle', 1190), + (19075, 58388, 'kill_backpack_yeah', 1190), + (19076, 58391, 'kill_attachment', 1190), + (19077, 58392, 'kill_cast_gather_flowers', 1190), + (19078, 58398, 'kill_jump_punch', 1190), + (19079, 58399, 'kill_result_flowers_spew', 1190), + (19080, 58402, 'kill_attack_spit', 1190), + (19081, 58405, 'kill_cast_rocky_uprising', 1190), + (19082, 58408, 'kill_flurry_kick', 1190), + (19083, 58413, 'kill_cast_raptor_claws', 1190), + (19084, 58417, 'kill_result_raptor_spit_p2p', 1190), + (19085, 58418, 'kill_2h_twirl', 1190), + (19086, 58421, 'kill__idle01', 1190), + (19087, 58422, 'kill__idle02', 1190), + (19088, 58423, 'kill_cast01_enter', 1190), + (19089, 58424, 'kill_cast01_exit', 1190), + (19090, 58425, 'kill_cast01_idle', 1190), + (19091, 58426, 'kill_cast02_enter', 1190), + (19092, 58427, 'kill_cast02_exit', 1190), + (19093, 58428, 'kill_cast02_idle', 1190), + (19094, 58434, 'kill_pike_twirl', 1190), + (19095, 58453, 'kill_sound_buff_02', 1190), + (19096, 58456, 'kill_attack_flame', 1190), + (19097, 58461, 'kill_injured_idle', 1190), + (19098, 58481, 'kill_snd_wing_flap', 1190), + (19099, 58482, 'kill_2h_cast_enter', 1190), + (19100, 58483, 'kill_2h_cast_exit', 1190), + (19101, 58484, 'kill_2h_cast_idle', 1190), + (19102, 58496, 'kill_snd_fs', 1190), + (19103, 58497, 'kill_snd_jump_whoosh', 1190), + (19104, 58500, 'kill_cast_belly_flop', 1190), + (19105, 58503, 'kill_cast_rocky_blast', 1190), + (19106, 58506, 'kill_draconian_injured_idle', 1190), + (19107, 58507, 'kill_draconian_search_enter', 1190), + (19108, 58508, 'kill_draconian_search_exit', 1190), + (19109, 58509, 'kill_draconian_search_idle', 1190), + (19110, 58511, 'kill_result_lumpy_spit_p2p', 1190), + (19111, 58518, 'kill_design_illusion_fail', 1190), + (19112, 58520, 'kill_knocktoknees_exit', 1190), + (19113, 58527, 'kill_golem_fx_tubes', 1190), + (19114, 58528, 'kill_golem_summon_fx', 1190), + (19115, 58532, 'kill_snd_dbg_spawn', 1190), + (19116, 58533, 'kill_snd_death', 1190), + (19117, 58536, 'kill_snd_fs_l', 1190), + (19118, 58537, 'kill_snd_fs_r', 1190), + (19119, 58538, 'kill_snd_jump', 1190), + (19120, 58540, 'kill_snd_offensive_buff', 1190), + (19121, 58554, 'kill_snd_whirl_attk', 1190), + (19122, 58555, 'kill_sound_cast', 1190), + (19123, 58562, 'kill_drakota_run_glide', 1190), + (19124, 58565, 'kill_ice_cube_trail_lf', 1190), + (19125, 58566, 'kill_ice_cube_trail_lr', 1190), + (19126, 58567, 'kill_ice_cube_trail_rf', 1190), + (19127, 58568, 'kill_ice_cube_trail_rr', 1190), + (19128, 58573, 'kill_ice_cube_scratch', 1190), + (19129, 58576, 'kill_snd_charge_up', 1190), + (19130, 58577, 'kill_snd_1h_sword_attack', 1190), + (19131, 58578, 'kill_snd_1h_sword_attack01', 1190), + (19132, 58579, 'kill_snd_1h_sword_attack02', 1190), + (19133, 58580, 'kill_snd_1h_sword_attack03', 1190), + (19134, 58581, 'kill_snd_1h_sword_enter', 1190), + (19135, 58582, 'kill_snd_1h_sword_exit', 1190), + (19136, 58584, 'kill_snd_cast02_yell', 1190), + (19137, 58585, 'kill_snd_converse02', 1190), + (19138, 58586, 'kill_snd_dual_wield_attack', 1190), + (19139, 58587, 'kill_snd_dual_wield_attack01', 1190), + (19140, 58588, 'kill_snd_dual_wield_attack02', 1190), + (19141, 58589, 'kill_snd_dual_wield_attack03', 1190), + (19142, 58594, 'kill_snd_idle_02', 1190), + (19143, 58601, 'kill_cast_foot_vine_stomp', 1190), + (19144, 58604, 'kill_cast_thorn_circle', 1190), + (19145, 58605, 'kill_cast_thorn_clap', 1190), + (19146, 58609, 'kill_land_enter', 1190), + (19147, 58610, 'kill_land_exit', 1190), + (19148, 58611, 'kill_result_wl_root_grow_trap', 1190), + (19149, 58614, 'kill_snd_bf', 1190), + (19150, 58633, 'kill_snd_whirling_attack', 1190), + (19151, 58634, 'kill_snd_wild_swing', 1190), + (19152, 58641, 'kill_cast_eat_snowball', 1190), + (19153, 58642, 'kill_cast_frog_eat', 1190), + (19154, 58647, 'kill_eaten_angler', 1190), + (19155, 58649, 'kill_intro', 1190), + (19156, 58657, 'kill_snd_ouch', 1190), + (19157, 58682, 'kill_splash_fx', 1190), + (19158, 58689, 'kill_angler_mount_idle03', 1190), + (19159, 58694, 'kill_design_obelisk_broken', 1190), + (19160, 58695, 'kill_design_obelisk_repair1', 1190), + (19161, 58706, 'kill_design_obelisk_complete', 1190), + (19162, 58707, 'kill_design_obelisk_fixed', 1190), + (19163, 58708, 'kill_design_obelisk_repair2', 1190), + (19164, 58709, 'kill_float', 1190), + (19165, 58711, 'kill_sacrifice', 1190), + (19166, 58718, 'kill_attack_dive', 1190), + (19167, 58723, 'kill_design_obelisk_repair3', 1190), + (19168, 58724, 'kill_design_obelisk_repair4', 1190), + (19169, 58731, 'kill_attack_hug', 1190), + (19170, 58732, 'kill_attack_roar', 1190), + (19171, 58733, 'kill_cast_obelisk_rock_summon', 1190), + (19172, 58734, 'kill_cast_obelisk_wisps_summon', 1190), + (19173, 58771, 'kill_wing_bolts_fx', 1190), + (19174, 58780, 'kill_cast_sacrifice_disperse', 1190), + (19175, 58781, 'kill_cast_sacrifice_stab', 1190), + (19176, 58784, 'kill_design_sky_chokidai_summon', 1190), + (19177, 58785, 'kill_design_sky_drake_summon', 1190), + (19178, 58786, 'kill_design_sky_plant_summon', 1190), + (19179, 58787, 'kill_design_sky_raptor_summon', 1190), + (19180, 58794, 'kill_cast_eye_blast', 1190), + (19181, 58799, 'kill_design_skyward_comm_beam', 1190), + (19182, 58800, 'kill_fly_hover', 1190), + (19183, 58801, 'kill_ground_blast_fx', 1190), + (19184, 58827, 'kill_sound_teleport_in', 1190), + (19185, 58835, 'kill_wing_buffet_fx', 1190), + (19186, 58842, 'kill_breath_attack_ice', 1190), + (19187, 58843, 'kill_breath_attack_necro', 1190), + (19188, 58850, 'kill_attack05', 1190), + (19189, 58853, 'kill_cast_shadow_appear', 1190), + (19190, 58854, 'kill_cast_teleport_down_fx', 1190), + (19191, 58857, 'kill_fly_enter_idle', 1190), + (19192, 58859, 'kill_result_banish_fx', 1190), + (19193, 58860, 'kill_result_cage_cube', 1190), + (19194, 58871, 'kill_dontuse_fly_enter_idle', 1190), + (19195, 58878, 'kill_attack_arm', 1190), + (19196, 58879, 'kill_cast_druid_light_beams', 1190), + (19197, 58882, 'kill_cast_storm_light_parting', 1190), + (19198, 58883, 'kill_cast_storm_rain_lightning', 1190), + (19199, 58889, 'kill_snd_attack', 1190), + (19200, 58890, 'kill_snd_attack01', 1190), + (19201, 58891, 'kill_snd_attack02', 1190), + (19202, 58892, 'kill_snd_attack03', 1190), + (19203, 58893, 'kill_snd_attack_dive', 1190), + (19204, 58894, 'kill_snd_attack_hug', 1190), + (19205, 58895, 'kill_snd_cast', 1190), + (19206, 58896, 'kill_snd_cast_1', 1190), + (19207, 58897, 'kill_snd_combat_enter', 1190), + (19208, 58898, 'kill_snd_combat_idle01', 1190), + (19209, 58899, 'kill_snd_dead_enter', 1190), + (19210, 58900, 'kill_snd_defensive_buff', 1190), + (19211, 58905, 'kill_snd_fs_mud_01', 1190), + (19212, 58906, 'kill_snd_fs_mud_02', 1190), + (19213, 58908, 'kill_snd_run', 1190), + (19214, 58919, 'kill_design_target_aoe_green', 1190), + (19215, 58920, 'kill_design_target_aoe_purple', 1190), + (19216, 58927, 'kill_aa_bar_heal', 1190), + (19217, 58928, 'kill_aa_blood_burst', 1190), + (19218, 58929, 'kill_aa_blood_lust', 1190), + (19219, 58930, 'kill_aa_bubble_shield', 1190), + (19220, 58931, 'kill_aa_bubble_shield_in', 1190), + (19221, 58932, 'kill_aa_cloud_blast', 1190), + (19222, 58933, 'kill_aa_cloud_buff_out', 1190), + (19223, 58934, 'kill_aa_cloud_ring_burst', 1190), + (19224, 58935, 'kill_aa_cold_blast', 1190), + (19225, 58936, 'kill_aa_cyclone', 1190), + (19226, 58937, 'kill_aa_dark_cyclone', 1190), + (19227, 58938, 'kill_aa_dark_ring_vanish', 1190), + (19228, 58939, 'kill_aa_divine_hit', 1190), + (19229, 58940, 'kill_aa_fire_column', 1190), + (19230, 58941, 'kill_aa_flurry_daggers', 1190), + (19231, 58942, 'kill_aa_forced_shader_burst', 1190), + (19232, 58943, 'kill_aa_glow_eyes', 1190), + (19233, 58944, 'kill_aa_hand_buff', 1190), + (19234, 58945, 'kill_aa_hand_cross_dark', 1190), + (19235, 58946, 'kill_aa_hand_dark_rings', 1190), + (19236, 58947, 'kill_aa_hand_flare', 1190), + (19237, 58948, 'kill_aa_hand_leaf', 1190), + (19238, 58949, 'kill_aa_hand_pattern', 1190), + (19239, 58950, 'kill_aa_hand_runes', 1190), + (19240, 58951, 'kill_aa_hand_sparkles', 1190), + (19241, 58952, 'kill_aa_hand_sparkles_dark', 1190), + (19242, 58953, 'kill_aa_hand_sparks', 1190), + (19243, 58954, 'kill_aa_hand_stars', 1190), + (19244, 58955, 'kill_aa_hand_stars_dark', 1190), + (19245, 58956, 'kill_aa_head_halo', 1190), + (19246, 58957, 'kill_aa_heal_hands_blast', 1190), + (19247, 58958, 'kill_aa_ice_comet', 1190), + (19248, 58959, 'kill_aa_ice_comet_shower', 1190), + (19249, 58960, 'kill_aa_light_ward', 1190), + (19250, 58961, 'kill_aa_lightning_bolt', 1190), + (19251, 58962, 'kill_aa_massive_hit', 1190), + (19252, 58963, 'kill_aa_music_beam_p2p', 1190), + (19253, 58964, 'kill_aa_plasma_hit', 1190), + (19254, 58965, 'kill_aa_poison_spore_p2p', 1190), + (19255, 58966, 'kill_aa_radiant_glow', 1190), + (19256, 58967, 'kill_aa_rune_buff_brawler', 1190), + (19257, 58968, 'kill_aa_rune_drop_base', 1190), + (19258, 58969, 'kill_aa_rune_forward', 1190), + (19259, 58970, 'kill_aa_rune_in_buff', 1190), + (19260, 58971, 'kill_aa_rune_rise_base', 1190), + (19261, 58972, 'kill_aa_rune_rise_buff', 1190), + (19262, 58973, 'kill_aa_shimmer_arrow_p2p', 1190), + (19263, 58974, 'kill_aa_snow_tempest', 1190), + (19264, 58975, 'kill_aa_sound_rings_head', 1190), + (19265, 58976, 'kill_aa_sparkle_trail_weapon_blend', 1190), + (19266, 58977, 'kill_aa_spirit_growing', 1190), + (19267, 58978, 'kill_aa_spirit_swirl_shield', 1190), + (19268, 58979, 'kill_aa_swirly_heal', 1190), + (19269, 58984, 'kill_gather_enter', 1190), + (19270, 58985, 'kill_gather_exit', 1190), + (19271, 58986, 'kill_gather_idle', 1190), + (19272, 59019, 'kill_tough_idle', 1190), + (19273, 59020, 'kill_tough_idle_enter', 1190), + (19274, 59021, 'kill_tough_idle_exit', 1190), + (19275, 59028, 'kill_cast_armament_buff', 1190), + (19276, 59029, 'kill_cast_ember_breath', 1190), + (19277, 59036, 'kill_cast_burrow_dust_fx', 1190), + (19278, 59041, 'kill_design_target_aoe_yellow', 1190), + (19279, 59043, 'kill_result_ember_fire_engulfed', 1190), + (19280, 59044, 'kill_result_explode', 1190), + (19281, 59045, 'kill_result_queen_bug_spit_p2p', 1190), + (19282, 59048, 'kill_snd_doz_attack', 1190), + (19283, 59049, 'kill_snd_doz_attack_01', 1190), + (19284, 59050, 'kill_snd_doz_attack_02', 1190), + (19285, 59051, 'kill_snd_doz_attack_03', 1190), + (19286, 59052, 'kill_snd_doz_cast', 1190), + (19287, 59053, 'kill_snd_doz_combat_enter', 1190), + (19288, 59054, 'kill_snd_doz_death', 1190), + (19289, 59055, 'kill_snd_doz_dodge', 1190), + (19290, 59056, 'kill_snd_doz_flyin_01', 1190), + (19291, 59057, 'kill_snd_doz_flyin_land', 1190), + (19292, 59058, 'kill_snd_doz_kick', 1190), + (19293, 59059, 'kill_snd_doz_knocktoknees', 1190), + (19294, 59060, 'kill_snd_doz_ouch', 1190), + (19295, 59061, 'kill_snd_doz_roar_01', 1190), + (19296, 59062, 'kill_snd_doz_shieldshove', 1190), + (19297, 59063, 'kill_snd_doz_whirl_attack', 1190), + (19298, 59064, 'kill_snd_doz_wildswing', 1190), + (19299, 59071, 'kill_cast_hand_fire_trails', 1190), + (19300, 59074, 'kill_cast_wing_blast', 1190), + (19301, 59081, 'kill_cast_pillar_spin', 1190), + (19302, 59093, 'kill_prestige_point_acquired', 1190), + (19303, 59094, 'kill_result_vaporize', 1190), + (19304, 59103, 'kill_cast_tail_fx', 1190), + (19305, 59110, 'kill__dodge_backhand', 1190), + (19306, 59111, 'kill__dodge_down', 1190), + (19307, 59112, 'kill__dodge_forehand', 1190), + (19308, 59113, 'kill__dodge_thrust', 1190), + (19309, 59114, 'kill__knockeddowntoknees', 1190), + (19310, 59115, 'kill__knockedtoback', 1190), + (19311, 59116, 'kill__knockedtoback_getup', 1190), + (19312, 59117, 'kill__knockedtoback_onbackidle', 1190), + (19313, 59118, 'kill__ouch', 1190), + (19314, 59119, 'kill__ouch_backhand', 1190), + (19315, 59120, 'kill__ouch_down', 1190), + (19316, 59121, 'kill__ouch_forehand', 1190), + (19317, 59122, 'kill__ouch_thrust', 1190), + (19318, 59123, 'kill_cast_magic_breath', 1190), + (19319, 59124, 'kill_cast_noxious_breath', 1190), + (19320, 59126, 'kill_cast_prestige_fx', 1190), + (19321, 59133, 'kill_cast_fire_blast', 1190), + (19322, 59139, 'kill_result_dark_vaporize', 1190), + (19323, 59140, 'kill_result_time_warp', 1190), + (19324, 59151, 'kill_gathering_tail_cloak', 1190), + (19325, 59158, 'kill_cast_belly_blast', 1190), + (19326, 59159, 'kill_cast_dark_shout', 1190), + (19327, 59160, 'kill_cast_debris', 1190), + (19328, 59161, 'kill_cast_fire_breath', 1190), + (19329, 59164, 'kill_cast_sonic_blast', 1190), + (19330, 59165, 'kill_ch', 1190), + (19331, 59168, 'kill_eyes rotate down', 1190), + (19332, 59169, 'kill_eyes rotate left', 1190), + (19333, 59170, 'kill_eyes rotate right', 1190), + (19334, 59171, 'kill_eyes rotate up', 1190), + (19335, 59173, 'kill_jaw rotate y max', 1190), + (19336, 59174, 'kill_jaw rotate y min', 1190), + (19337, 59175, 'kill_jaw rotate z max', 1190), + (19338, 59176, 'kill_jaw rotate z min', 1190), + (19339, 59177, 'kill_left blink', 1190), + (19340, 59178, 'kill_left brow down', 1190), + (19341, 59179, 'kill_left brow up', 1190), + (19342, 59180, 'kill_left eye wide', 1190), + (19343, 59181, 'kill_left frown', 1190), + (19344, 59182, 'kill_lower lip roll in', 1190), + (19345, 59183, 'kill_lower lip roll out', 1190), + (19346, 59184, 'kill_mbp', 1190), + (19347, 59185, 'kill_mid brows down', 1190), + (19348, 59186, 'kill_mid brows up', 1190), + (19349, 59187, 'kill_mouth down', 1190), + (19350, 59188, 'kill_mouth open', 1190), + (19351, 59189, 'kill_mouth up', 1190), + (19352, 59190, 'kill_normal fv', 1190), + (19353, 59191, 'kill_oo tight', 1190), + (19354, 59192, 'kill_right blink', 1190), + (19355, 59193, 'kill_right brow down', 1190), + (19356, 59194, 'kill_right brow up', 1190), + (19357, 59195, 'kill_right eye wide', 1190), + (19358, 59196, 'kill_right frown', 1190), + (19359, 59197, 'kill_scrunch left', 1190), + (19360, 59198, 'kill_scrunch right', 1190), + (19361, 59200, 'kill_smile left', 1190), + (19362, 59201, 'kill_smile right', 1190), + (19363, 59232, 'kill_upper lip left up', 1190), + (19364, 59233, 'kill_upper lip right up', 1190), + (19365, 59234, 'kill_upper lip roll in', 1190), + (19366, 59235, 'kill_upper lip roll out', 1190), + (19367, 59242, 'kill_base_rest', 1190), + (19368, 59243, 'kill_cast_flaming_wings', 1190), + (19369, 59248, 'kill_eyes_rotate_down', 1190), + (19370, 59249, 'kill_eyes_rotate_left', 1190), + (19371, 59250, 'kill_eyes_rotate_right', 1190), + (19372, 59251, 'kill_eyes_rotate_up', 1190), + (19373, 59253, 'kill_jaw_rotate_y_max', 1190), + (19374, 59254, 'kill_jaw_rotate_y_min', 1190), + (19375, 59255, 'kill_jaw_rotate_z_max', 1190), + (19376, 59256, 'kill_jaw_rotate_z_min', 1190), + (19377, 59257, 'kill_left_blink', 1190), + (19378, 59258, 'kill_left_brow_down', 1190), + (19379, 59259, 'kill_left_brow_up', 1190), + (19380, 59260, 'kill_left_eye_wide', 1190), + (19381, 59261, 'kill_left_frown', 1190), + (19382, 59262, 'kill_mid_brows_down', 1190), + (19383, 59263, 'kill_mid_brows_up', 1190), + (19384, 59264, 'kill_mouth_down', 1190), + (19385, 59265, 'kill_mouth_open', 1190), + (19386, 59266, 'kill_mouth_up', 1190), + (19387, 59267, 'kill_normalfv', 1190), + (19388, 59268, 'kill_oo_tight', 1190), + (19389, 59269, 'kill_right_blink', 1190), + (19390, 59270, 'kill_right_brow_down', 1190), + (19391, 59271, 'kill_right_brow_up', 1190), + (19392, 59272, 'kill_right_eye_wide', 1190), + (19393, 59273, 'kill_right_frown', 1190), + (19394, 59274, 'kill_scrunch_left', 1190), + (19395, 59275, 'kill_scrunch_right', 1190), + (19396, 59277, 'kill_smile_big_left', 1190), + (19397, 59278, 'kill_smile_big_right', 1190), + (19398, 59309, 'kill_upper_lip_left_up', 1190), + (19399, 59310, 'kill_upper_lip_right_up', 1190), + (19400, 59325, 'kill_snd_doz_big_whoosh', 1190), + (19401, 59326, 'kill_snd_doz_big_whoosh_02', 1190), + (19402, 59333, 'kill_aa_notes_blast', 1190), + (19403, 59334, 'kill_aa_stabbing_blades', 1190), + (19404, 59348, 'kill_snd_lumpy_1h_sword_attack01', 1190), + (19405, 59349, 'kill_snd_lumpy_attack', 1190), + (19406, 59350, 'kill_snd_lumpy_attack_01', 1190), + (19407, 59351, 'kill_snd_lumpy_attack_02', 1190), + (19408, 59352, 'kill_snd_lumpy_attack_03', 1190), + (19409, 59353, 'kill_snd_lumpy_attack_bite', 1190), + (19410, 59354, 'kill_snd_lumpy_attack_bites', 1190), + (19411, 59355, 'kill_snd_lumpy_attack_breath', 1190), + (19412, 59356, 'kill_snd_lumpy_attack_shuffle', 1190), + (19413, 59357, 'kill_snd_lumpy_attack_slam', 1190), + (19414, 59358, 'kill_snd_lumpy_attack_tail', 1190), + (19415, 59359, 'kill_snd_lumpy_cast_1', 1190), + (19416, 59360, 'kill_snd_lumpy_combat_enter', 1190), + (19417, 59361, 'kill_snd_lumpy_dead_enter', 1190), + (19418, 59362, 'kill_snd_lumpy_roll', 1190), + (19419, 59395, 'kill_sound_attack_flame', 1190), + (19420, 59396, 'kill_sound_attack_tail', 1190), + (19421, 59397, 'kill_sound_bites', 1190), + (19422, 59398, 'kill_sound_defensive_buff', 1190), + (19423, 59402, 'kill_sound_idle_01', 1190), + (19424, 59417, 'kill_snd_attack04', 1190), + (19425, 59422, 'kill_snd_fs_mud', 1190), + (19426, 59424, 'kill_snd_mud_elem_attack', 1190), + (19427, 59425, 'kill_snd_mud_elem_attack01', 1190), + (19428, 59426, 'kill_snd_mud_elem_attack02', 1190), + (19429, 59427, 'kill_snd_mud_elem_chargeup', 1190), + (19430, 59428, 'kill_snd_mud_elem_dead_enter', 1190), + (19431, 59429, 'kill_snd_mud_elem_dodge_fore', 1190), + (19432, 59430, 'kill_snd_mud_elem_knocktoback', 1190), + (19433, 59431, 'kill_snd_mud_elem_knocktoknees', 1190), + (19434, 59432, 'kill_snd_mud_elem_ouch_thrust', 1190), + (19435, 59433, 'kill_snd_mud_elem_shield_shove', 1190), + (19436, 59434, 'kill_snd_mud_elem_whirl_attack', 1190), + (19437, 59435, 'kill_snd_mud_elem_wildswing', 1190), + (19438, 59436, 'kill_snd_mud_vox_attck_01', 1190), + (19439, 59437, 'kill_snd_mud_vox_attck_02', 1190), + (19440, 59438, 'kill_snd_mud_vox_attck_roar', 1190), + (19441, 59439, 'kill_snd_mud_vox_cast_1', 1190), + (19442, 59440, 'kill_snd_mud_vox_dead_enter', 1190), + (19443, 59441, 'kill_snd_mud_vox_def_buff', 1190), + (19444, 59452, 'kill_drakota_mount_fly_fall', 1190), + (19445, 59455, 'kill_prestige_point_sound', 1190), + (19446, 59458, 'kill_snd_cast4', 1190), + (19447, 59459, 'kill_snd_doz_spawn', 1190), + (19448, 59478, 'kill_snd_xygoz1_attack', 1190), + (19449, 59479, 'kill_snd_xygoz1_attack01', 1190), + (19450, 59480, 'kill_snd_xygoz1_attack02', 1190), + (19451, 59481, 'kill_snd_xygoz1_attack03', 1190), + (19452, 59482, 'kill_snd_xygoz1_attack_flame', 1190), + (19453, 59483, 'kill_snd_xygoz1_attack_tail', 1190), + (19454, 59484, 'kill_snd_xygoz1_dead_enter', 1190), + (19455, 59485, 'kill_snd_xygoz1_idle01', 1190), + (19456, 59486, 'kill_snd_xygoz1_knockedtoback', 1190), + (19457, 59487, 'kill_snd_xygoz1_superbuff', 1190), + (19458, 59502, 'kill_snd_drakota_vox_01', 1190), + (19459, 59503, 'kill_snd_drakota_vox_02', 1190), + (19460, 59504, 'kill_snd_drakota_vox_03', 1190), + (19461, 59516, 'kill_lower_lip_left_down', 1190), + (19462, 59517, 'kill_lower_lip_right_down', 1190), + (19463, 59528, 'kill_design_skyshrine_time_rift', 1190), + (19464, 59535, 'kill__left_eye_wide', 1190), + (19465, 59536, 'kill__right_eye_wide', 1190), + (19466, 59580, 'kill_yes', 1190), + (19467, 59611, 'kill_snd_vox_short', 1190), + (19468, 59624, 'kill_result_beetle_fireball_p2p', 1190), + (19469, 59656, 'kill_summon_01', 1190), + (19470, 59657, 'kill_1h_sword_cast', 1190), + (19471, 59658, 'kill_1h_sword_cast_enter', 1190), + (19472, 59659, 'kill_1h_sword_cast_exit', 1190), + (19473, 59660, 'kill_1h_sword_cast_idle', 1190), + (19474, 59661, 'kill_1h_sword_combat_art_buff', 1190), + (19475, 59662, 'kill_1h_sword_combat_enter', 1190), + (19476, 59669, 'kill_aa_lightning_blast_hit', 1190), + (19477, 59675, 'kill_knocked_to_back', 1190), + (19478, 59676, 'kill_knocked_to_back_getup', 1190), + (19479, 59677, 'kill_knocked_to_back_idle', 1190), + (19480, 59688, 'kill_design_groundportal_rift', 1190), + (19481, 59699, 'kill_design_corrupted', 1190), + (19482, 59702, 'kill_result_light_explode', 1190), + (19483, 59713, 'kill_design_qey_mage_tower_fire', 1190), + (19484, 59714, 'kill_design_qey_portal_from_hell', 1190), + (19485, 59721, 'kill_aa_time_warp', 1190), + (19486, 59727, 'kill_knockedtoknees_dead', 1190), + (19487, 59729, 'kill_persist_magic_damage', 1190), + (19488, 59740, 'kill_design_qey_fire_room', 1190), + (19489, 59741, 'kill_design_qey_wall_crack', 1190), + (19490, 59744, 'kill_read_book', 1190), + (19491, 59788, 'kill_summon_fx_long', 1190), + (19492, 59789, 'kill_summon_fx_short', 1190), + (19493, 59790, 'kill_time_stop_sound', 1190), + (19494, 59797, 'kill_aa_mental_damage', 1190), + (19495, 59798, 'kill_aa_mental_smite', 1190), + (19496, 59799, 'kill_aa_soothe', 1190), + (19497, 59804, 'kill_idlea', 1190), + (19498, 59805, 'kill_idlleb', 1190), + (19499, 59839, 'kill_winged_lion_backup', 1190), + (19500, 59840, 'kill_winged_lion_fall', 1190), + (19501, 59841, 'kill_winged_lion_fly_backup', 1190), + (19502, 59842, 'kill_winged_lion_fly_climb', 1190), + (19503, 59843, 'kill_winged_lion_fly_dive', 1190), + (19504, 59844, 'kill_winged_lion_fly_down', 1190), + (19505, 59845, 'kill_winged_lion_fly_glide', 1190), + (19506, 59846, 'kill_winged_lion_fly_glide_left', 1190), + (19507, 59847, 'kill_winged_lion_fly_glide_right', 1190), + (19508, 59848, 'kill_winged_lion_fly_idle', 1190), + (19509, 59849, 'kill_winged_lion_fly_run', 1190), + (19510, 59850, 'kill_winged_lion_fly_strafe_left', 1190), + (19511, 59851, 'kill_winged_lion_fly_strafe_right', 1190), + (19512, 59852, 'kill_winged_lion_fly_turn_left', 1190), + (19513, 59853, 'kill_winged_lion_fly_turn_right', 1190), + (19514, 59854, 'kill_winged_lion_fly_up', 1190), + (19515, 59855, 'kill_winged_lion_fly_walk', 1190), + (19516, 59856, 'kill_winged_lion_idle', 1190), + (19517, 59857, 'kill_winged_lion_idle01', 1190), + (19518, 59858, 'kill_winged_lion_jump', 1190), + (19519, 59859, 'kill_winged_lion_jump_substitute', 1190), + (19520, 59860, 'kill_winged_lion_land', 1190), + (19521, 59861, 'kill_winged_lion_long_fall', 1190), + (19522, 59862, 'kill_winged_lion_run', 1190), + (19523, 59863, 'kill_winged_lion_turn_left', 1190), + (19524, 59864, 'kill_winged_lion_turn_right', 1190), + (19525, 59865, 'kill_winged_lion_walk', 1190), + (19526, 59876, 'kill_idle_a', 1190), + (19527, 59877, 'kill_idle_b', 1190), + (19528, 59878, 'kill_idle_c', 1190), + (19529, 59889, 'kill_evil_bird_backup', 1190), + (19530, 59890, 'kill_evil_bird_fall', 1190), + (19531, 59891, 'kill_evil_bird_fly_backup', 1190), + (19532, 59892, 'kill_evil_bird_fly_climb', 1190), + (19533, 59893, 'kill_evil_bird_fly_dive', 1190), + (19534, 59894, 'kill_evil_bird_fly_down', 1190), + (19535, 59895, 'kill_evil_bird_fly_glide', 1190), + (19536, 59896, 'kill_evil_bird_fly_glide_left', 1190), + (19537, 59897, 'kill_evil_bird_fly_glide_right', 1190), + (19538, 59898, 'kill_evil_bird_fly_idle', 1190), + (19539, 59899, 'kill_evil_bird_fly_run', 1190), + (19540, 59900, 'kill_evil_bird_fly_strafe_left', 1190), + (19541, 59901, 'kill_evil_bird_fly_strafe_right', 1190), + (19542, 59902, 'kill_evil_bird_fly_turn_left', 1190), + (19543, 59903, 'kill_evil_bird_fly_turn_right', 1190), + (19544, 59904, 'kill_evil_bird_fly_up', 1190), + (19545, 59905, 'kill_evil_bird_fly_walk', 1190), + (19546, 59906, 'kill_evil_bird_idle', 1190), + (19547, 59907, 'kill_evil_bird_idle01', 1190), + (19548, 59908, 'kill_evil_bird_idle02', 1190), + (19549, 59909, 'kill_evil_bird_idle03', 1190), + (19550, 59910, 'kill_evil_bird_idle04', 1190), + (19551, 59911, 'kill_evil_bird_jump', 1190), + (19552, 59912, 'kill_evil_bird_jump_substitute', 1190), + (19553, 59913, 'kill_evil_bird_land', 1190), + (19554, 59914, 'kill_evil_bird_long_fall', 1190), + (19555, 59915, 'kill_evil_bird_run', 1190), + (19556, 59916, 'kill_evil_bird_turn_left', 1190), + (19557, 59917, 'kill_evil_bird_turn_right', 1190), + (19558, 59918, 'kill_evil_bird_walk', 1190), + (19559, 59920, 'kill_lion_winged_backup', 1190), + (19560, 59921, 'kill_lion_winged_fly_backup', 1190), + (19561, 59922, 'kill_lion_winged_fly_idle', 1190), + (19562, 59923, 'kill_lion_winged_fly_run', 1190), + (19563, 59924, 'kill_lion_winged_fly_strafe_left', 1190), + (19564, 59925, 'kill_lion_winged_fly_strafe_right', 1190), + (19565, 59926, 'kill_lion_winged_fly_turn_left', 1190), + (19566, 59927, 'kill_lion_winged_fly_turn_right', 1190), + (19567, 59928, 'kill_lion_winged_fly_walk', 1190), + (19568, 59929, 'kill_lion_winged_idle01', 1190), + (19569, 59930, 'kill_lion_winged_jump', 1190), + (19570, 59931, 'kill_lion_winged_jump_substitute', 1190), + (19571, 59932, 'kill_lion_winged_run', 1190), + (19572, 59933, 'kill_lion_winged_turn_left', 1190), + (19573, 59934, 'kill_lion_winged_turn_right', 1190), + (19574, 59935, 'kill_lion_winged_walk', 1190), + (19575, 59946, 'kill_dance_a', 1190), + (19576, 59947, 'kill_dance_base', 1190), + (19577, 59954, 'kill_aa_rune_blur_circular', 1190), + (19578, 59960, 'kill_knockdowntoknees_enter', 1190), + (19579, 59961, 'kill_knockdowntoknees_exit', 1190), + (19580, 59962, 'kill_knockdowntoknees_idle', 1190), + (19581, 59969, 'kill_aa_earth_summon', 1190), + (19582, 59970, 'kill_aa_summon_minion', 1190), + (19583, 59977, 'kill_aa_rune_chain_swirl', 1190), + (19584, 59978, 'kill_aa_spirit_heal', 1190), + (19585, 59991, 'kill_scream01', 1190), + (19586, 60012, 'kill_soul_idle', 1190), + (19587, 60013, 'kill_soul_suck_fx', 1190), + (19588, 60014, 'kill_soulsuck_enter', 1190), + (19589, 60015, 'kill_soulsuck_idle', 1190), + (19590, 60022, 'kill_bg_achievement_acquired', 1190), + (19591, 60027, 'kill_design_cloudy_dream', 1190), + (19592, 60028, 'kill_design_kerafyrm_barrier', 1190), + (19593, 60031, 'kill_result_cloudy_dream', 1190), + (19594, 60063, 'kill_winged_lion_fly_fall', 1190), + (19595, 60070, 'kill_aa_result_leash', 1190), + (19596, 60083, 'kill_result_sullon_shadow_curse', 1190), + (19597, 60094, 'kill_evil_bird_idle_egg', 1190), + (19598, 60107, 'kill_result_blood_craze', 1190), + (19599, 60108, 'kill_result_blood_craze_p2p', 1190), + (19600, 60109, 'kill_result_blood_wash', 1190), + (19601, 60110, 'kill_result_extract_will_p2p', 1190), + (19602, 60123, 'kill_result_idol_corruption_p2p', 1190), + (19603, 60134, 'kill_design_damage_level1', 1190), + (19604, 60135, 'kill_design_damage_level2', 1190), + (19605, 60136, 'kill_design_damage_level3', 1190), + (19606, 60137, 'kill_design_damage_level4', 1190), + (19607, 60138, 'kill_design_damage_level5', 1190), + (19608, 60141, 'kill_result_forced_shader_burnt', 1190), + (19609, 60152, 'kill_fly_dead', 1190), + (19610, 60159, 'kill_attack06', 1190), + (19611, 60163, 'kill_crying', 1190), + (19612, 60165, 'kill_giggling', 1190), + (19613, 60172, 'kill_attack_breath_snd', 1190), + (19614, 60173, 'kill_breath_blast_barrier', 1190), + (19615, 60178, 'kill_design_kerafyrm_barrier_big', 1190), + (19616, 60179, 'kill_design_kerafyrm_barrier_fight', 1190), + (19617, 60180, 'kill_design_kerafyrm_barrier_small', 1190), + (19618, 60181, 'kill_flames_backlash_snd', 1190), + (19619, 60184, 'kill_ouch01_snd', 1190), + (19620, 60185, 'kill_ouch02_snd', 1190), + (19621, 60215, 'kill_sound_ulthork_awake', 1190), + (19622, 60216, 'kill_sound_ulthork_combat_enter', 1190), + (19623, 60217, 'kill_sound_ulthork_exhale', 1190), + (19624, 60218, 'kill_sound_ulthork_grunt', 1190), + (19625, 60219, 'kill_sound_ulthork_idle', 1190), + (19626, 60220, 'kill_sound_ulthork_run', 1190), + (19627, 60221, 'kill_sound_ulthork_run01', 1190), + (19628, 60222, 'kill_sound_ulthork_scratch01', 1190), + (19629, 60223, 'kill_sound_ulthork_scratch02', 1190), + (19630, 60224, 'kill_sound_ulthork_snore', 1190), + (19631, 60225, 'kill_sound_ulthork_walk', 1190), + (19632, 60226, 'kill_sound_ulthork_walk01', 1190), + (19633, 60237, 'kill_frogdance', 1190), + (19634, 60240, 'kill_rock_fx', 1190), + (19635, 60253, 'kill_result_compass_hover', 1190), + (19636, 60260, 'kill_arasai_evil_skull_swirls', 1190), + (19637, 60265, 'kill_dark_elf_splash_mist', 1190), + (19638, 60266, 'kill_erudite_book_hover_runes', 1190), + (19639, 60267, 'kill_freeblood_skull_swirls_mesh', 1190), + (19640, 60268, 'kill_gnome_hands_trail_clockwork_blast', 1190), + (19641, 60269, 'kill_halfelf_compass_hover', 1190), + (19642, 60270, 'kill_human_water_dripping_wake', 1190), + (19643, 60271, 'kill_iksar_water_forced_shader_splash', 1190), + (19644, 60273, 'kill_kerra_flea_infestation_trail', 1190), + (19645, 60275, 'kill_ogre_fly_swarm_trail', 1190), + (19646, 60276, 'kill_ratonga_forced_shader_bertox', 1190), + (19647, 60277, 'kill_sarnak_firestrips_trail', 1190), + (19648, 60309, 'kill_troll_poison_spirits_gather', 1190), + (19649, 60320, 'kill_dwarf_rift_crack_dig', 1190), + (19650, 60321, 'kill_fae_fireflies_trail', 1190), + (19651, 60322, 'kill_froglok_godly_light_sparkles', 1190), + (19652, 60329, 'kill_attack_fistslam', 1190), + (19653, 60330, 'kill_attack_groundroar', 1190), + (19654, 60331, 'kill_attack_rage', 1190), + (19655, 60334, 'kill_combat_idle03', 1190), + (19656, 60337, 'kill_halfling_hands_cards_coins_trail', 1190), + (19657, 60338, 'kill_highelf_radiant_sparkles', 1190), + (19658, 60341, 'kill_powerroar', 1190), + (19659, 60342, 'kill_powerslam', 1190), + (19660, 60374, 'kill_targeted_left', 1190), + (19661, 60375, 'kill_targeted_right', 1190), + (19662, 60376, 'kill_transition_left', 1190), + (19663, 60377, 'kill_woodelf_leafy_glow_shader', 1190), + (19664, 60384, 'kill_barbarian_snow_ice_trail', 1190), + (19665, 60389, 'kill_erudite_asteroid_belt', 1190), + (19666, 60390, 'kill_freeblood_bat_swirls_mesh', 1190), + (19667, 60391, 'kill_gnome_clockwork_gears_blast', 1190), + (19668, 60392, 'kill_human_claymore_orbit_trail', 1190), + (19669, 60394, 'kill_kerra_spirit_guide_mesh', 1190), + (19670, 60396, 'kill_portal_jump', 1190), + (19671, 60397, 'kill_portal_stomp', 1190), + (19672, 60398, 'kill_ratonga_brain_storm_text', 1190), + (19673, 60430, 'kill_transition_back', 1190), + (19674, 60431, 'kill_transition_right', 1190), + (19675, 60440, 'kill_cast_skull_head_blast', 1190), + (19676, 60443, 'kill_design_dark_portal', 1190), + (19677, 60444, 'kill_design_light_portal', 1190), + (19678, 60447, 'kill_result_blood_dark', 1190), + (19679, 60454, 'kill_snd_land', 1190), + (19680, 60469, 'kill_snd_winged_lion_idle_01', 1190), + (19681, 60470, 'kill_snd_winged_lion_jump_sub', 1190), + (19682, 60472, 'kill_sound_evil_bird_jump_sub', 1190), + (19683, 60473, 'kill_sound_evil_bird_peck', 1190), + (19684, 60474, 'kill_sound_evil_bird_scratch', 1190), + (19685, 60475, 'kill_sound_evil_bird_vox_idle03', 1190), + (19686, 60482, 'kill_attack_arms', 1190), + (19687, 60483, 'kill_attack_jumpslam', 1190), + (19688, 60484, 'kill_cast_illusionary_charge_up', 1190), + (19689, 60485, 'kill_cast_illusionary_emanation', 1190), + (19690, 60491, 'kill_lose_weapon', 1190), + (19691, 60493, 'kill_result_floating_chain_root', 1190), + (19692, 60494, 'kill_result_illusionary_lights', 1190), + (19693, 60526, 'kill_transition_back_extract', 1190), + (19694, 60527, 'kill_transition_left_extract', 1190), + (19695, 60528, 'kill_transition_right_extract', 1190), + (19696, 60539, 'kill_dance_short', 1190), + (19697, 60571, 'kill_sound_ulthork_charge_up', 1190), + (19698, 60572, 'kill_sound_ulthork_fs', 1190), + (19699, 60573, 'kill_sound_ulthork_idle_01', 1190), + (19700, 60574, 'kill_sound_ulthork_idle_02', 1190), + (19701, 60575, 'kill_sound_ulthork_shield_shove', 1190), + (19702, 60576, 'kill_sound_ulthork_whirl_attack_whsh', 1190), + (19703, 60588, 'kill_mace_blast', 1190), + (19704, 60590, 'kill_rocky_trail', 1190), + (19705, 60591, 'kill_rumble_shake', 1190), + (19706, 60599, 'kill_snd_peck', 1190), + (19707, 60624, 'kill_transition_back01_extract', 1190), + (19708, 60625, 'kill_victory', 1190), + (19709, 60636, 'kill_fear_wave', 1190), + (19710, 60653, 'kill_snd_tbird_pet_angry', 1190), + (19711, 60654, 'kill_snd_tbird_pet_attack01', 1190), + (19712, 60655, 'kill_snd_tbird_pet_happy', 1190), + (19713, 60656, 'kill_snd_tbird_pet_idle01', 1190), + (19714, 60657, 'kill_snd_tbird_pet_idle02', 1190), + (19715, 60658, 'kill_snd_tbird_pet_idle03', 1190), + (19716, 60659, 'kill_snd_tbird_pet_trick', 1190), + (19717, 60668, 'kill_cast_toxic_gathering', 1190), + (19718, 60669, 'kill_cast_toxic_rain', 1190), + (19719, 60672, 'kill_hand_blast', 1190), + (19720, 60679, 'kill_cast_acid_rain', 1190), + (19721, 60690, 'kill_design_circle_warning_zone', 1190), + (19722, 60691, 'kill_design_half_circle_warning_zone', 1190), + (19723, 60692, 'kill_design_oval_warning_zone', 1190), + (19724, 60693, 'kill_design_third_circle_warning_zone', 1190), + (19725, 60700, 'kill_beckon_enter', 1190), + (19726, 60701, 'kill_beckon_exit', 1190), + (19727, 60708, 'kill_aa_double_pyramid', 1190), + (19728, 60715, 'kill_aa_water_summon', 1190), + (19729, 60722, 'kill_aa_ooze_summon', 1190), + (19730, 60723, 'kill_aa_skull_summon', 1190), + (19731, 60728, 'kill_idle01temp', 1190), + (19732, 60730, 'kill_jaw_rotate_max', 1190), + (19733, 60733, 'kill_smile_left', 1190), + (19734, 60734, 'kill_smile_right', 1190), + (19735, 60745, 'kill_design_fire_doorway', 1190), + (19736, 60746, 'kill_design_icy_doorway', 1190), + (19737, 60757, 'kill_dead02', 1190), + (19738, 60758, 'kill_design_fire_pillar', 1190), + (19739, 60759, 'kill_design_green_light_beam', 1190), + (19740, 60760, 'kill_design_ice_pillar', 1190), + (19741, 60761, 'kill_design_purple_light_beam', 1190), + (19742, 60762, 'kill_design_red_light_beam', 1190), + (19743, 60763, 'kill_design_yellow_light_beam', 1190), + (19744, 60766, 'kill_sc_win_chest_fx', 1190), + (19745, 60779, 'kill_result_fire_beam_p2p', 1190), + (19746, 60780, 'kill_result_ice_beam_p2p', 1190), + (19747, 60793, 'kill_piledriver', 1190), + (19748, 60802, 'kill_chargeup', 1190), + (19749, 60803, 'kill_chargeup_enter', 1190), + (19750, 60804, 'kill_chargeup_exit', 1190), + (19751, 60805, 'kill_chargeup_idle', 1190), + (19752, 60808, 'kill_design_lightning_pillar_blue', 1190), + (19753, 60809, 'kill_design_lightning_pillar_red', 1190), + (19754, 60810, 'kill_design_st_boss_lightning_blue', 1190), + (19755, 60811, 'kill_design_st_boss_lightning_red', 1190), + (19756, 60818, 'kill_cast03', 1190), + (19757, 60819, 'kill_cast04', 1190), + (19758, 60822, 'kill_cast_squid_loop', 1190), + (19759, 60825, 'kill_design_orange_light_beam', 1190), + (19760, 60826, 'kill_design_st_boss_platform_charged_blue', 1190), + (19761, 60827, 'kill_design_st_boss_platform_charged_red', 1190), + (19762, 60834, 'kill_blue_crystal_dead', 1190), + (19763, 60835, 'kill_blue_crystal_on', 1190), + (19764, 60840, 'kill_design_urn_shatter', 1190), + (19765, 60843, 'kill_red_crystal_dead', 1190), + (19766, 60844, 'kill_red_crystal_on', 1190), + (19767, 60845, 'kill_result_lightning_floor_blast_blue', 1190), + (19768, 60846, 'kill_result_lightning_floor_blast_red', 1190), + (19769, 60857, 'kill_dead01', 1190), + (19770, 60858, 'kill_design_lightning_pillar_purple', 1190), + (19771, 60859, 'kill_design_st_boss_lightning_purple', 1190), + (19772, 60860, 'kill_design_st_boss_platform_charged_purple', 1190), + (19773, 60863, 'kill_result_damaged', 1190), + (19774, 60864, 'kill_result_glass_blast', 1190), + (19775, 60865, 'kill_result_lightning_floor_blast_purple', 1190), + (19776, 60866, 'kill_result_radiant_glow_no_mesh', 1190), + (19777, 60867, 'kill_result_tether_buff_p2p', 1190), + (19778, 60874, 'kill_cast_blue_buff', 1190), + (19779, 60877, 'kill_cast_red_buff', 1190), + (19780, 60878, 'kill_cast_white_buff', 1190), + (19781, 60904, 'kill_sound_evil_bird_egg_vox', 1190), + (19782, 60915, 'kill_design_ice_column_shatter', 1190), + (19783, 60916, 'kill_drinal_summon', 1190), + (19784, 60927, 'kill_design_circle_warning_zone_blue', 1190), + (19785, 60928, 'kill_design_circle_warning_zone_gold', 1190), + (19786, 60929, 'kill_design_half_circle_warning_zone_blue', 1190), + (19787, 60930, 'kill_design_half_circle_warning_zone_gold', 1190), + (19788, 60931, 'kill_design_oval_warning_zone_blue', 1190), + (19789, 60932, 'kill_design_oval_warning_zone_gold', 1190), + (19790, 60933, 'kill_design_third_circle_warning_zone_blue', 1190), + (19791, 60934, 'kill_design_third_circle_warning_zone_gold', 1190), + (19792, 60946, 'kill_lay_egg_hatch', 1190), + (19793, 60957, 'kill_design_vd_portal_red', 1190), + (19794, 60991, 'kill_status_quest_completes_repeatable', 1190), + (19795, 60992, 'kill_status_quest_completes_tradeskill', 1190), + (19796, 60993, 'kill_status_quest_gives_repeatable', 1190), + (19797, 60994, 'kill_status_quest_gives_tradeskill', 1190), + (19798, 60995, 'kill_status_quest_updates_repeatable', 1190), + (19799, 60996, 'kill_status_quest_updates_tradeskill', 1190), + (19800, 61007, 'kill_drinal_trail_weapon_flames', 1190), + (19801, 61008, 'kill_drinal_trail_weapon_poison', 1190), + (19802, 61011, 'kill_result_flash_weapon_green', 1190), + (19803, 61022, 'kill_drinal_absorb_back_exit', 1190), + (19804, 61023, 'kill_drinal_absorb_back_idle', 1190), + (19805, 61024, 'kill_drinal_absorb_forward_exit', 1190), + (19806, 61025, 'kill_drinal_absorb_forward_idle', 1190), + (19807, 61026, 'kill_drinal_absorb_left_exit', 1190), + (19808, 61027, 'kill_drinal_absorb_left_idle', 1190), + (19809, 61028, 'kill_drinal_absorb_right_exit', 1190), + (19810, 61029, 'kill_drinal_absorb_right_idle', 1190), + (19811, 61030, 'kill_drinal_fireball_gather', 1190), + (19812, 61031, 'kill_drinal_skull_gather', 1190), + (19813, 61032, 'kill_drinal_spirt_gather', 1190), + (19814, 61033, 'kill_drinal_staff_blast', 1190), + (19815, 61036, 'kill_result_drinal_spirits_p2p', 1190), + (19816, 61037, 'kill_result_spirits_blast_out', 1190), + (19817, 61046, 'kill_close_enter', 1190), + (19818, 61047, 'kill_closed_idle', 1190), + (19819, 61050, 'kill_dragon_attack', 1190), + (19820, 61051, 'kill_dragon_idle', 1190), + (19821, 61054, 'kill_open_enter', 1190), + (19822, 61055, 'kill_open_idle', 1190), + (19823, 61066, 'kill_evil_bird_idle05', 1190), + (19824, 61069, 'kill_orbiting_buff_all', 1190), + (19825, 61070, 'kill_orbiting_buff_blue', 1190), + (19826, 61071, 'kill_orbiting_buff_blue_white', 1190), + (19827, 61072, 'kill_orbiting_buff_red', 1190), + (19828, 61073, 'kill_orbiting_buff_red_blue', 1190), + (19829, 61074, 'kill_orbiting_buff_red_white', 1190), + (19830, 61075, 'kill_orbiting_buff_white', 1190), + (19831, 61088, 'kill_result_spike_cage', 1190), + (19832, 61099, 'kill_design_drinals_portal', 1190), + (19833, 61106, 'kill_attack_cannibal', 1190), + (19834, 61113, 'kill_oldidle', 1190), + (19835, 61122, 'kill_cast_shadow_breath', 1190), + (19836, 61125, 'kill_drinal_frontal_blast', 1190), + (19837, 61126, 'kill_drinal_warning_zone', 1190), + (19838, 61133, 'kill_asleep', 1190), + (19839, 61134, 'kill_attack_breath_old', 1190), + (19840, 61139, 'kill_design_groundportal_rift_gehein', 1190), + (19841, 61140, 'kill_dual_wield_knockeddowntoknees', 1190), + (19842, 61141, 'kill_dual_wield_knockedtoback_onbackidle', 1190), + (19843, 61143, 'kill_komodo_npc_glide', 1190), + (19844, 61177, 'kill_tradeart_forge_hammers_anvil', 1190), + (19845, 61188, 'kill_design_agitated', 1190), + (19846, 61189, 'kill_design_distorted', 1190), + (19847, 61190, 'kill_design_fear', 1190), + (19848, 61208, 'kill_snd_tirun_enf_attack', 1190), + (19849, 61209, 'kill_snd_tirun_enf_attack01', 1190), + (19850, 61210, 'kill_snd_tirun_enf_attack02', 1190), + (19851, 61211, 'kill_snd_tirun_enf_attack03', 1190), + (19852, 61212, 'kill_snd_tirun_enf_cast1', 1190), + (19853, 61213, 'kill_snd_tirun_enf_chargeup', 1190), + (19854, 61214, 'kill_snd_tirun_enf_combat_enter', 1190), + (19855, 61215, 'kill_snd_tirun_enf_combat_idle01', 1190), + (19856, 61216, 'kill_snd_tirun_enf_dead', 1190), + (19857, 61217, 'kill_snd_tirun_enf_dodge', 1190), + (19858, 61218, 'kill_snd_tirun_enf_knocktoknees', 1190), + (19859, 61219, 'kill_snd_tirun_enf_ouch', 1190), + (19860, 61220, 'kill_snd_tirun_enf_shield_shove', 1190), + (19861, 61221, 'kill_snd_tirun_enf_whirling_attack', 1190), + (19862, 61222, 'kill_snd_tirun_enf_wild_swing', 1190), + (19863, 61240, 'kill_tradeart_flask_beaker_pour', 1190), + (19864, 61241, 'kill_tradeart_forge_hammer_metal', 1190), + (19865, 61242, 'kill_tradeart_saw_log', 1190), + (19866, 61253, 'kill_design_drinals_floor_panel_blue', 1190), + (19867, 61254, 'kill_design_drinals_floor_panel_challege_blue', 1190), + (19868, 61255, 'kill_design_drinals_floor_panel_challege_red', 1190), + (19869, 61256, 'kill_design_drinals_floor_panel_red', 1190), + (19870, 61257, 'kill_design_drinals_vessel_arc_blue', 1190), + (19871, 61258, 'kill_design_drinals_vessel_arc_red', 1190), + (19872, 61262, 'kill_result_bastion_beam_p2p', 1190), + (19873, 61277, 'kill_shaman_summon_fx', 1190), + (19874, 61288, 'kill_design_tof_rock_collapse01', 1190), + (19875, 61289, 'kill_design_tof_rock_collapse02', 1190), + (19876, 61290, 'kill_design_tof_rock_collapse03', 1190), + (19877, 61291, 'kill_design_tof_rock_collapse04', 1190), + (19878, 61326, 'kill_spit', 1190), + (19879, 61337, 'kill_design_arcane_barrier', 1190), + (19880, 61338, 'kill_design_divine_barrier', 1190), + (19881, 61342, 'kill_result_magic_barrier_beam_p2p', 1190), + (19882, 61351, 'kill_cast_werewolf_appear', 1190), + (19883, 61352, 'kill_cast_werewolf_hair', 1190), + (19884, 61355, 'kill_csat_werewolf_vanish', 1190), + (19885, 61362, 'kill_attack_eye_cone', 1190), + (19886, 61367, 'kill_gazer_charge_up', 1190), + (19887, 61371, 'kill_result_essence_suck_p2p', 1190), + (19888, 61372, 'kill_result_gazer_flame_eye_beam_p2p', 1190), + (19889, 61387, 'kill_sky_float_idle', 1190), + (19890, 61418, 'kill_zap_attack', 1190), + (19891, 61429, 'kill_fs', 1190), + (19892, 61434, 'kill_shaman_crouch_idle', 1190), + (19893, 61441, 'kill_snd_skirth_attack', 1190), + (19894, 61442, 'kill_snd_skirth_attack01', 1190), + (19895, 61443, 'kill_snd_skirth_attack02', 1190), + (19896, 61444, 'kill_snd_skirth_attack03', 1190), + (19897, 61445, 'kill_snd_skirth_aura', 1190), + (19898, 61446, 'kill_snd_skirth_cast_1', 1190), + (19899, 61447, 'kill_snd_skirth_chargeup', 1190), + (19900, 61448, 'kill_snd_skirth_combat_enter', 1190), + (19901, 61449, 'kill_snd_skirth_combat_enter1', 1190), + (19902, 61450, 'kill_snd_skirth_dead_enter', 1190), + (19903, 61451, 'kill_snd_skirth_knocktobackgetup', 1190), + (19904, 61452, 'kill_snd_skirth_ouch', 1190), + (19905, 61453, 'kill_snd_skirth_shiield_shove', 1190), + (19906, 61454, 'kill_snd_skirth_spit', 1190), + (19907, 61455, 'kill_snd_skirth_whirling_attack', 1190), + (19908, 61456, 'kill_snd_skirth_wildswing', 1190), + (19909, 61481, 'kill_zap_enter', 1190), + (19910, 61482, 'kill_zap_exit', 1190), + (19911, 61483, 'kill_zap_idle', 1190), + (19912, 61528, 'kill_were_cast_idle', 1190), + (19913, 61542, 'kill_result_ethernere_fx', 1190), + (19914, 61550, 'kill_snd_skirth_idle03', 1190), + (19915, 61564, 'kill_result_aggression_removal', 1190), + (19916, 61565, 'kill_result_aggression_removal_p2p', 1190), + (19917, 61566, 'kill_result_healing_trail_p2p', 1190), + (19918, 61567, 'kill_result_lifebringer_glade', 1190), + (19919, 61599, 'kill_trdskl_aggro_life_wand', 1190), + (19920, 61615, 'kill_snd_baelon_attack', 1190), + (19921, 61616, 'kill_snd_baelon_attack01', 1190), + (19922, 61617, 'kill_snd_baelon_attack_arms', 1190), + (19923, 61618, 'kill_snd_baelon_fs', 1190), + (19924, 61619, 'kill_snd_baelon_idle02', 1190), + (19925, 61620, 'kill_snd_baelon_idle03', 1190), + (19926, 61621, 'kill_snd_baelon_lose_weapon', 1190), + (19927, 61622, 'kill_snd_baelon_ouch', 1190), + (19928, 61623, 'kill_snd_baelon_powerslam', 1190), + (19929, 61624, 'kill_snd_baelon_summon', 1190), + (19930, 61625, 'kill_snd_baelon_targeted_right', 1190), + (19931, 61626, 'kill_snd_baelon_transition_back', 1190), + (19932, 61627, 'kill_snd_baelon_transition_back01_extract', 1190), + (19933, 61628, 'kill_snd_baelon_transition_back_extract', 1190), + (19934, 61629, 'kill_snd_baelon_transition_left_extract', 1190), + (19935, 61630, 'kill_snd_baelon_transition_right', 1190), + (19936, 61631, 'kill_snd_baelon_transition_right_extract', 1190), + (19937, 61632, 'kill_snd_baelon_unarmed_attack', 1190), + (19938, 61633, 'kill_snd_baelon_unarmed_attack01', 1190), + (19939, 61634, 'kill_snd_baelon_unarmed_attack02', 1190), + (19940, 61635, 'kill_snd_baelon_unarmed_attack_fistslam', 1190), + (19941, 61636, 'kill_snd_baelon_unarmed_attack_jumpslam', 1190), + (19942, 61637, 'kill_snd_baelon_unarmed_attack_stomp', 1190), + (19943, 61638, 'kill_snd_baelon_unarmed_dead_enter', 1190), + (19944, 61639, 'kill_snd_baelon_unarmed_fs', 1190), + (19945, 61640, 'kill_snd_baelon_unarmed_idle01', 1190), + (19946, 61641, 'kill_snd_baelon_unarmed_idle02', 1190), + (19947, 61642, 'kill_snd_baelon_unarmed_ouch', 1190), + (19948, 61643, 'kill_snd_baelon_unarmed_portal_jump', 1190), + (19949, 61644, 'kill_snd_baelon_unarmed_portal_stomp', 1190), + (19950, 61645, 'kill_snd_baelon_unarmed_victory', 1190), + (19951, 61646, 'kill_snd_baelon_whirling_attack', 1190), + (19952, 61647, 'kill_snd_baelon_wild_swing', 1190), + (19953, 61658, 'kill_fx_foot_trail_lf', 1190), + (19954, 61659, 'kill_fx_foot_trail_lh', 1190), + (19955, 61660, 'kill_fx_foot_trail_rf', 1190), + (19956, 61661, 'kill_fx_foot_trail_rh', 1190), + (19957, 61685, 'kill_sound_bodyfall', 1190), + (19958, 61696, 'kill_sound_whoosh', 1190), + (19959, 61698, 'kill_untrainted_wildswing', 1190), + (19960, 61709, 'kill_gehein_aura_lp', 1190), + (19961, 61714, 'kill_sfx_attack_vox', 1190), + (19962, 61715, 'kill_sfx_death_vox', 1190), + (19963, 61716, 'kill_sfx_gehein_death_vox', 1190), + (19964, 61717, 'kill_sfx_gehein_vox_attack', 1190), + (19965, 61718, 'kill_sfx_gehein_vox_ouch', 1190), + (19966, 61719, 'kill_sfx_whoosh', 1190), + (19967, 61720, 'kill_sfx_whoosh_high', 1190), + (19968, 61741, 'kill_snd_screecher_attack', 1190), + (19969, 61742, 'kill_snd_screecher_attack01', 1190), + (19970, 61743, 'kill_snd_screecher_attack02', 1190), + (19971, 61744, 'kill_snd_screecher_attack03', 1190), + (19972, 61745, 'kill_snd_screecher_aura_lp', 1190), + (19973, 61746, 'kill_snd_screecher_cast', 1190), + (19974, 61747, 'kill_snd_screecher_cast01', 1190), + (19975, 61748, 'kill_snd_screecher_combat_enter', 1190), + (19976, 61749, 'kill_snd_screecher_dead_enter', 1190), + (19977, 61750, 'kill_snd_screecher_idel01', 1190), + (19978, 61751, 'kill_snd_screecher_idle02', 1190), + (19979, 61752, 'kill_snd_screecher_jump', 1190), + (19980, 61753, 'kill_snd_screecher_ouch', 1190), + (19981, 61754, 'kill_snd_screecher_scream', 1190), + (19982, 61755, 'kill_snd_screecher_scream01', 1190), + (19983, 61756, 'kill_snd_screecher_whirling_attack', 1190), + (19984, 61770, 'kill_result_life_statue_fx', 1190), + (19985, 61781, 'kill_dont_use_ouch', 1190), + (19986, 61792, 'kill_fly_in_old', 1190), + (19987, 61793, 'kill_ilde01', 1190), + (19988, 61813, 'kill_snd_komodo_attack', 1190), + (19989, 61814, 'kill_snd_komodo_attack01', 1190), + (19990, 61815, 'kill_snd_komodo_cast01', 1190), + (19991, 61816, 'kill_snd_komodo_dead_enter', 1190), + (19992, 61817, 'kill_snd_komodo_knocktoback', 1190), + (19993, 61818, 'kill_snd_komodo_ouch', 1190), + (19994, 61819, 'kill_snd_komodo_whirling_attack', 1190), + (19995, 61820, 'kill_snd_komodo_wild_swing', 1190), + (19996, 61831, 'kill_design_etherene_fire', 1190), + (19997, 61832, 'kill_design_ethernere_vines', 1190), + (19998, 61843, 'kill_idle05', 1190); +INSERT INTO `visual_states` (`id`, `visual_state_id`, `name`, `min_client_version`) VALUES + (19999, 61858, 'kill_sfx_vox_gehein_laugh', 1190), + (20000, 61860, 'kill_snd_chitari_1h_sword_attack', 1190), + (20001, 61861, 'kill_snd_chitari_1h_sword_attack01', 1190), + (20002, 61862, 'kill_snd_chitari_1h_sword_attack02', 1190), + (20003, 61863, 'kill_snd_chitari_1h_sword_enter', 1190), + (20004, 61864, 'kill_snd_chitari_attack', 1190), + (20005, 61865, 'kill_snd_chitari_attack01', 1190), + (20006, 61866, 'kill_snd_chitari_attack02', 1190), + (20007, 61867, 'kill_snd_chitari_attack03', 1190), + (20008, 61868, 'kill_snd_chitari_attack_cannibal', 1190), + (20009, 61869, 'kill_snd_chitari_charge_up', 1190), + (20010, 61870, 'kill_snd_chitari_dead_enter', 1190), + (20011, 61871, 'kill_snd_chitari_idle01', 1190), + (20012, 61872, 'kill_snd_chitari_knockedtoback_getup', 1190), + (20013, 61873, 'kill_snd_chitari_ouch', 1190), + (20014, 61874, 'kill_snd_chitari_ouch_forehand', 1190), + (20015, 61875, 'kill_snd_chitari_shield_shove', 1190), + (20016, 61876, 'kill_snd_chitari_whirling_attack', 1190), + (20017, 61877, 'kill_snd_chitari_wild_swing', 1190), + (20018, 61884, 'kill_aa_smoke_teleport', 1190), + (20019, 61885, 'kill_aa_wave_splash', 1190), + (20020, 61886, 'kill_aa_whirlwind_teleport', 1190), + (20021, 61891, 'kill_idle04_', 1190), + (20022, 61898, 'kill_aa_scythe_slash', 1190), + (20023, 61905, 'kill_aa_frozen_rain', 1190), + (20024, 61906, 'kill_aa_toxic_mist', 1190), + (20025, 61914, 'kill_result_bone_glow_3', 1190), + (20026, 61915, 'kill_result_fire_attack_p2p', 1190), + (20027, 61926, 'kill_dontuse_knockedtoback', 1190), + (20028, 61927, 'kill_dontuse_knockedtoback_getup', 1190), + (20029, 61928, 'kill_dontuse_knockedtoback_onbackidle', 1190), + (20030, 61935, 'kill_aa_fire_swirl_shield', 1190), + (20031, 61936, 'kill_aa_head_skeleton_hands_blast', 1190), + (20032, 61937, 'kill_aa_heal_skeleton_hands_blast', 1190), + (20033, 61938, 'kill_aa_planar_fire_blast', 1190), + (20034, 61939, 'kill_aa_second_skin', 1190), + (20035, 61946, 'kill_aa_cast_wind_spin', 1190), + (20036, 61947, 'kill_aa_dark_swirly_wisps', 1190), + (20037, 61948, 'kill_aa_heal_splash', 1190), + (20038, 61949, 'kill_aa_lightning_siphon', 1190), + (20039, 61950, 'kill_aa_nature_heal', 1190), + (20040, 61951, 'kill_aa_scimitar_cyclone', 1190), + (20041, 61952, 'kill_aa_spirit_swirl_buff_ward', 1190), + (20042, 61980, 'kill_snd_were_1h_sword_attack01_vox', 1190), + (20043, 61981, 'kill_snd_were_1h_sword_attack02_vox', 1190), + (20044, 61982, 'kill_snd_were_1h_sword_attack03_vox', 1190), + (20045, 61983, 'kill_snd_were_1h_sword_attack_vox', 1190), + (20046, 61984, 'kill_snd_were_attack01_vox', 1190), + (20047, 61985, 'kill_snd_were_attack02_vox', 1190), + (20048, 61986, 'kill_snd_were_attack_vox', 1190), + (20049, 61987, 'kill_snd_were_cast_vox', 1190), + (20050, 61988, 'kill_snd_were_combat_idle01_vox', 1190), + (20051, 61989, 'kill_snd_were_dead_enter_vox', 1190), + (20052, 61990, 'kill_snd_were_dual_wield_attack01_vox', 1190), + (20053, 61991, 'kill_snd_were_dual_wield_attack02_vox', 1190), + (20054, 61992, 'kill_snd_were_dual_wield_attack03_vox', 1190), + (20055, 61993, 'kill_snd_were_dual_wield_attack_vox', 1190), + (20056, 61994, 'kill_snd_were_kick_vox', 1190), + (20057, 61995, 'kill_snd_were_ouch_vox', 1190), + (20058, 61996, 'kill_snd_were_shield_shove_vox', 1190), + (20059, 61997, 'kill_snd_were_super_buff_vox', 1190), + (20060, 61998, 'kill_snd_were_wild_swing_vox', 1190), + (20061, 62010, 'kill_swoosh_huge', 1190), + (20062, 62017, 'kill_aa_arrow_rapid_salvo', 1190), + (20063, 62018, 'kill_aa_fire_arrow_p2p', 1190), + (20064, 62019, 'kill_aa_music_dagger_buff', 1190), + (20065, 62020, 'kill_aa_sound_wave_blast', 1190), + (20066, 62021, 'kill_bird_squawk_sound', 1190), + (20067, 62022, 'kill_cast_bagpipe_sound', 1190), + (20068, 62023, 'kill_cast_bard_bagpipes', 1190), + (20069, 62030, 'kill_scaled_hands_attack03', 1190), + (20070, 62037, 'kill_cast_dome_barrier_fx', 1190), + (20071, 62042, 'kill_design_comm_on', 1190), + (20072, 62043, 'kill_design_tourbillion_flux_fx', 1190), + (20073, 62044, 'kill_design_tourbillion_persist_fx', 1190), + (20074, 62047, 'kill_result_tourbillion_essence_suck_p2p', 1190), + (20075, 62060, 'kill_result_forced_shader_ethernere', 1190), + (20076, 62067, 'kill_bodyfall', 1190), + (20077, 62105, 'kill_whoosh_large', 1190), + (20078, 62106, 'kill_whoosh_lrg', 1190), + (20079, 62121, 'kill_snd_attack_long', 1190), + (20080, 62122, 'kill_snd_attack_short', 1190), + (20081, 62127, 'kill_snd_gargoyle_attack', 1190), + (20082, 62128, 'kill_snd_gargoyle_attack03', 1190), + (20083, 62129, 'kill_snd_gargoyle_cast_1', 1190), + (20084, 62130, 'kill_snd_gargoyle_charge_up', 1190), + (20085, 62131, 'kill_snd_gargoyle_combat_enter', 1190), + (20086, 62132, 'kill_snd_gargoyle_dead_enter', 1190), + (20087, 62133, 'kill_snd_gargoyle_kick', 1190), + (20088, 62134, 'kill_snd_gargoyle_knocktoback_getup', 1190), + (20089, 62135, 'kill_snd_gargoyle_ouch_forehand', 1190), + (20090, 62136, 'kill_snd_gargoyle_shield_shove', 1190), + (20091, 62137, 'kill_snd_jump_fx', 1190), + (20092, 62139, 'kill_snd_rx_cast1', 1190), + (20093, 62140, 'kill_snd_rx_chargeup', 1190), + (20094, 62141, 'kill_snd_rx_combat_enter', 1190), + (20095, 62142, 'kill_snd_rx_dead_enter', 1190), + (20096, 62152, 'kill_cookie_ouch_fx', 1190), + (20097, 62157, 'kill_skyshrine_drake_backup', 1190), + (20098, 62158, 'kill_skyshrine_drake_fall', 1190), + (20099, 62159, 'kill_skyshrine_drake_fly_backup', 1190), + (20100, 62160, 'kill_skyshrine_drake_fly_climb', 1190), + (20101, 62161, 'kill_skyshrine_drake_fly_dive', 1190), + (20102, 62162, 'kill_skyshrine_drake_fly_down', 1190), + (20103, 62163, 'kill_skyshrine_drake_fly_glide', 1190), + (20104, 62164, 'kill_skyshrine_drake_fly_glide_left', 1190), + (20105, 62165, 'kill_skyshrine_drake_fly_glide_right', 1190), + (20106, 62166, 'kill_skyshrine_drake_fly_idle', 1190), + (20107, 62167, 'kill_skyshrine_drake_fly_run', 1190), + (20108, 62168, 'kill_skyshrine_drake_fly_strafe_left', 1190), + (20109, 62169, 'kill_skyshrine_drake_fly_strafe_right', 1190), + (20110, 62170, 'kill_skyshrine_drake_fly_turn_left', 1190), + (20111, 62171, 'kill_skyshrine_drake_fly_turn_right', 1190), + (20112, 62172, 'kill_skyshrine_drake_fly_up', 1190), + (20113, 62173, 'kill_skyshrine_drake_fly_walk', 1190), + (20114, 62174, 'kill_skyshrine_drake_idle', 1190), + (20115, 62175, 'kill_skyshrine_drake_idle01', 1190), + (20116, 62176, 'kill_skyshrine_drake_jump', 1190), + (20117, 62177, 'kill_skyshrine_drake_jump_substitute', 1190), + (20118, 62178, 'kill_skyshrine_drake_land', 1190), + (20119, 62179, 'kill_skyshrine_drake_long_fall', 1190), + (20120, 62180, 'kill_skyshrine_drake_turn_left', 1190), + (20121, 62181, 'kill_skyshrine_drake_turn_right', 1190), + (20122, 62182, 'kill_skyshrine_drake_walk', 1190), + (20123, 29421, 'aa_rune_out_buff', 57000), + (20124, 29428, 'aa_wind_blast', 57000), + (20125, 29447, 'snd_gumdrop_fs', 57000), + (20126, 29463, 'sound_fs', 57000), + (20127, 29507, 'wyvern_mount_backup', 57000), + (20128, 29508, 'wyvern_mount_fall', 57000), + (20129, 29509, 'wyvern_mount_fly_backup', 57000), + (20130, 29510, 'wyvern_mount_fly_climb', 57000), + (20131, 29511, 'wyvern_mount_fly_dive', 57000), + (20132, 29512, 'wyvern_mount_fly_down', 57000), + (20133, 29513, 'wyvern_mount_fly_glide', 57000), + (20134, 29514, 'wyvern_mount_fly_glide_left', 57000), + (20135, 29515, 'wyvern_mount_fly_glide_right', 57000), + (20136, 29516, 'wyvern_mount_fly_idle', 57000), + (20137, 29517, 'wyvern_mount_fly_run', 57000), + (20138, 29518, 'wyvern_mount_fly_strafe_left', 57000), + (20139, 29519, 'wyvern_mount_fly_strafe_right', 57000), + (20140, 29520, 'wyvern_mount_fly_turn_left', 57000), + (20141, 29521, 'wyvern_mount_fly_turn_right', 57000), + (20142, 29522, 'wyvern_mount_fly_up', 57000), + (20143, 29523, 'wyvern_mount_fly_walk', 57000), + (20144, 29524, 'wyvern_mount_idle', 57000), + (20145, 29525, 'wyvern_mount_idle01', 57000), + (20146, 29526, 'wyvern_mount_jump', 57000), + (20147, 29527, 'wyvern_mount_jump_substitute', 57000), + (20148, 29528, 'wyvern_mount_land', 57000), + (20149, 29529, 'wyvern_mount_long_fall', 57000), + (20150, 29530, 'wyvern_mount_run', 57000), + (20151, 29531, 'wyvern_mount_turn_left', 57000), + (20152, 29532, 'wyvern_mount_turn_right', 57000), + (20153, 29533, 'wyvern_mount_walk', 57000), + (20154, 29540, 'aa_spirit_mongoose', 57000), + (20155, 29541, 'aa_unyielding_will', 57000), + (20156, 29548, 'aa_hammer_buff', 57000), + (20157, 29549, 'aa_speed_buff', 57000), + (20158, 29553, 'cookie_gumdrop_fx', 57000), + (20159, 29557, 'result_elephant_trample', 57000), + (20160, 29558, 'scared', 57000), + (20161, 29565, 'aa_anger_buff', 57000), + (20162, 29566, 'aa_lance_attack', 57000), + (20163, 29567, 'aa_plane_shift', 57000), + (20164, 29581, 'skyshrine_drake_fly_fall', 57000), + (20165, 29612, 'wyvern_mount_fly_fall', 57000), + (20166, 29619, 'aa_heal_flourish', 57000), + (20167, 29626, 'aa_frenzy', 57000), + (20168, 29637, 'design_night_eyes', 57000), + (20169, 29644, 'aa_hammer_smite', 57000), + (20170, 29651, 'aa_blast_circle', 57000), + (20171, 29658, 'aa_spirit_tree', 57000), + (20172, 29659, '2h_sword_run', 57000), + (20173, 29666, '_idle03', 57000), + (20174, 29677, 'design_sg_dome_beam_fx01', 57000), + (20175, 29678, 'design_sg_dome_beam_fx02', 57000), + (20176, 29679, 'design_sg_dome_beam_fx03', 57000), + (20177, 29680, 'design_sg_dome_beam_fx04', 57000), + (20178, 29681, 'design_sg_dome_beam_fx05', 57000), + (20179, 29682, 'design_sg_dome_beam_fx06', 57000), + (20180, 29683, 'design_sg_dome_fx', 57000), + (20181, 29690, 'aa_spirit_circle_summon', 57000), + (20182, 29697, 'aa_ancestral_gather', 57000), + (20183, 29698, 'aa_divine_burst', 57000), + (20184, 29699, 'aa_rune_debuff_all', 57000), + (20185, 29700, 'aa_spirit_swirl_hit', 57000), + (20186, 29701, '2h_sword_dead', 57000), + (20187, 29702, '2h_sword_dead_enter', 57000), + (20188, 29713, 'dual_wield_run', 57000), + (20189, 29716, 'pike_run', 57000), + (20190, 29717, '2h_idle', 57000), + (20191, 29718, '2h_knockedtoback', 57000), + (20192, 29719, '2h_knockedtoback_getup', 57000), + (20193, 29720, '2h_knockedtoback_onbackidle', 57000), + (20194, 29729, 'cast_rock_strike_targeted', 57000), + (20195, 29732, 'four_to_five_enter', 57000), + (20196, 29733, 'head_four_dead', 57000), + (20197, 29734, 'head_one_dead', 57000), + (20198, 29735, 'head_one_dead_enter', 57000), + (20199, 29736, 'head_one_dead_exit', 57000), + (20200, 29737, 'head_three_dead', 57000), + (20201, 29738, 'head_three_dead_exit', 57000), + (20202, 29739, 'head_two_dead', 57000), + (20203, 29740, 'head_two_dead_exit', 57000), + (20204, 29741, 'head_zero_dead', 57000), + (20205, 29742, 'head_zero_dead_enter', 57000), + (20206, 29743, 'head_zero_dead_exit', 57000), + (20207, 29750, 'aa_dancing_blades', 57000), + (20208, 29755, 'head_four_dead_enter', 57000), + (20209, 29756, 'head_three_dead_enter', 57000), + (20210, 29757, 'head_two_dead_enter', 57000), + (20211, 29760, 'result_paper_scatter', 57000), + (20212, 29761, '2h_sword_idle01', 57000), + (20213, 29768, 'aa_hand_notes', 57000), + (20214, 29769, 'aa_hand_spin_notes', 57000), + (20215, 29770, 'aa_music_blast_ball', 57000), + (20216, 29771, 'aa_music_bubble', 57000), + (20217, 29772, 'aa_notes_shield', 57000), + (20218, 29773, 'cast_01', 57000), + (20219, 29774, 'cast_02', 57000), + (20220, 29775, 'cast_03', 57000), + (20221, 29776, 'cast_04', 57000), + (20222, 29777, 'cast_05', 57000), + (20223, 29784, '_dont_use_dead', 57000), + (20224, 29785, '_dont_use_dead_enter', 57000), + (20225, 29786, 'aa_coin_toss', 57000), + (20226, 29787, 'aa_death_mark', 57000), + (20227, 29788, 'aa_notes_swirling', 57000), + (20228, 29793, 'head_carry', 57000), + (20229, 29806, 'result_fireworks_brew_burst', 57000), + (20230, 29807, 'result_fireworks_confetti_brewday', 57000), + (20231, 29808, 'result_fireworks_shamrock_sparkle_burst', 57000), + (20232, 29821, 'result_fireworks_flare_beads_burst', 57000), + (20233, 29822, 'result_fireworks_flare_cards_burst', 57000), + (20234, 29823, 'result_fireworks_flare_coins_burst', 57000), + (20235, 29831, 'snd_parrot_vox', 57000), + (20236, 29842, 'design_bristlebane_collect_gold', 57000), + (20237, 29843, 'design_bristlebane_collect_green', 57000), + (20238, 29844, 'design_bristlebane_collect_red', 57000), + (20239, 29845, 'design_bristlebane_fish_boost', 57000), + (20240, 29846, 'design_launch_boost', 57000), + (20241, 29847, 'design_powerup_buff_gold', 57000), + (20242, 29848, 'design_powerup_buff_green', 57000), + (20243, 29849, 'design_powerup_buff_red', 57000), + (20244, 29860, 'design_sg_tidal_wave', 57000), + (20245, 29883, 'snd_wave_crash01', 57000), + (20246, 29894, 'design_music_barrier', 57000), + (20247, 29897, 'recline_side', 57000), + (20248, 29898, 'result_music_barrier_beam_p2p', 57000), + (20249, 29909, 'design_kill', 57000), + (20250, 29910, 'design_reef_grow', 57000), + (20251, 29911, 'design_ride', 57000), + (20252, 29912, 'design_target_reef', 57000), + (20253, 29913, 'design_zip_car', 57000), + (20254, 29914, 'idle_mode', 57000), + (20255, 29951, 'sound_swim_idle', 57000), + (20256, 29952, 'sound_swim_walk', 57000), + (20257, 29958, 'sound_ulthork_1h_sword_attack', 57000), + (20258, 29959, 'sound_ulthork_1h_sword_attack01', 57000), + (20259, 29960, 'sound_ulthork_1h_sword_attack02', 57000), + (20260, 29961, 'sound_ulthork_1h_sword_attack03', 57000), + (20261, 29962, 'sound_ulthork_attack', 57000), + (20262, 29963, 'sound_ulthork_attack01', 57000), + (20263, 29964, 'sound_ulthork_attack02', 57000), + (20264, 29965, 'sound_ulthork_attack03', 57000), + (20265, 29966, 'sound_ulthork_dead_enter', 57000), + (20266, 29967, 'sound_ulthork_dual_wield_attack', 57000), + (20267, 29968, 'sound_ulthork_dual_wield_attack01', 57000), + (20268, 29969, 'sound_ulthork_dual_wield_attack02', 57000), + (20269, 29970, 'sound_ulthork_dual_wield_attack03', 57000), + (20270, 29971, 'sound_ulthork_dual_wield_enter', 57000), + (20271, 29972, 'sound_ulthork_ouch', 57000), + (20272, 29973, 'sound_ulthork_ouch_down', 57000), + (20273, 29974, 'sound_ulthork_ouch_forehand', 57000), + (20274, 29975, 'sound_ulthork_whirling_attack', 57000), + (20275, 29976, 'sound_ulthork_wildswing', 57000), + (20276, 29987, 'design_reef_barrier', 57000), + (20277, 29988, 'design_siren_queen_beam_fx', 57000), + (20278, 30001, 'result_chainlink_p2p', 57000), + (20279, 30033, 'weapon_blood_lust', 57000), + (20280, 30040, 'aa_slashing_daggers', 57000), + (20281, 30078, 'zombie_eat', 57000), + (20282, 30085, 'aa_self_lifetap', 57000), + (20283, 30123, 'zombie_sleep', 57000), + (20284, 30124, 'zombie_sleep_exit', 57000), + (20285, 30136, 'necro_curse', 57000), + (20286, 30145, 'snd_meatbeast_ide01', 57000), + (20287, 30146, 'snd_meatbeast_jumpsub', 57000), + (20288, 30166, 'snd_meatbeast_jump', 57000), + (20289, 30177, 'design_ballista_flames', 57000), + (20290, 30178, 'design_drake_flame_attack01', 57000), + (20291, 30179, 'design_drake_flame_attack02', 57000), + (20292, 30187, 'cast_poison_spray_back', 57000), + (20293, 30188, 'cast_poison_spray_cone', 57000), + (20294, 30208, 'snd_undead_ulthork_eat', 57000), + (20295, 30219, 'idle_waterfall', 57000), + (20296, 30224, 'snd_illithid_attack', 57000), + (20297, 30225, 'snd_illithid_attack01', 57000), + (20298, 30226, 'snd_illithid_attack02', 57000), + (20299, 30227, 'snd_illithid_attack03', 57000), + (20300, 30228, 'snd_illithid_cast01', 57000), + (20301, 30229, 'snd_illithid_cast02', 57000), + (20302, 30230, 'snd_illithid_cast03', 57000), + (20303, 30231, 'snd_illithid_cast04', 57000), + (20304, 30232, 'snd_illithid_combat_enter', 57000), + (20305, 30233, 'snd_illithid_dead_enter', 57000), + (20306, 30234, 'snd_illithid_knockedtoback', 57000), + (20307, 30235, 'snd_illithid_knockedtoback_getup', 57000), + (20308, 30236, 'snd_illithid_ouch_down', 57000), + (20309, 30237, 'snd_illithid_ouch_forehand', 57000), + (20310, 30238, 'snd_illithid_ouch_thrust', 57000), + (20311, 30239, 'snd_illithid_whirling_attack', 57000), + (20312, 30240, 'snd_illithid_wild_swing', 57000), + (20313, 30241, 'snd_dodge_whoosh', 57000), + (20314, 30252, 'design_feargate_portal', 57000), + (20315, 30265, 'othmir_zom_att_vox', 57000), + (20316, 30290, 'snd_othmir_zom_feed', 57000), + (20317, 30291, 'snd_othmir_zom_sleep_exit', 57000), + (20318, 30309, 'sound_othmir_cast1', 57000), + (20319, 30346, 'snd_othmir_zom_ouch', 57000), + (20320, 30357, 'idle_frightened', 57000), + (20321, 30408, 'zen_enter', 57000), + (20322, 30409, 'zen_exit', 57000), + (20323, 30410, 'zen_idle', 57000), + (20324, 30417, 'cast_frog_spit_fx', 57000), + (20325, 30428, 'design_ballista_fire_green', 57000), + (20326, 30429, 'design_ballista_fire_green_drake_hit', 57000), + (20327, 30430, 'design_ballista_load_green', 57000), + (20328, 30433, 'result_ballista_fire_green_p2p', 57000), + (20329, 30458, 'snd_meatbeast_angry', 57000), + (20330, 30459, 'snd_meatbeast_attack', 57000), + (20331, 30460, 'snd_meatbeast_attack01', 57000), + (20332, 30461, 'snd_meatbeast_combat_enter', 57000), + (20333, 30462, 'snd_meatbeast_confused', 57000), + (20334, 30463, 'snd_meatbeast_eat', 57000), + (20335, 30464, 'snd_meatbeast_hungry', 57000), + (20336, 30465, 'snd_meatbeast_ouch', 57000), + (20337, 30466, 'snd_meatbeast_sick', 57000), + (20338, 30467, 'snd_meatbeast_sit', 57000), + (20339, 30468, 'snd_meatbeast_trick', 57000), + (20340, 30475, 'ballista_launch_sound', 57000), + (20341, 30476, 'ballista_load_sound', 57000), + (20342, 30481, 'design_ballista_drake_hit', 57000), + (20343, 30482, 'design_ballista_drake_hit02', 57000), + (20344, 30484, 'launch', 57000), + (20345, 30485, 'launch2', 57000), + (20346, 30486, 'launch3', 57000), + (20347, 30487, 'launch4', 57000), + (20348, 30488, 'launch5', 57000), + (20349, 30528, 'sound_flames', 57000), + (20350, 30535, 'cast_ink_barrier', 57000), + (20351, 30536, 'cast_ink_spray', 57000), + (20352, 30543, 'result_ink_zone', 57000), + (20353, 30577, 'snd_frogboss_attack', 57000), + (20354, 30578, 'snd_frogboss_attack01', 57000), + (20355, 30579, 'snd_frogboss_cast_enter', 57000), + (20356, 30580, 'snd_frogboss_dead_enter', 57000), + (20357, 30581, 'snd_frogboss_ouch', 57000), + (20358, 30588, 'cast_lightning_spray_hands', 57000), + (20359, 30595, 'result_illithid_chain_lightning_bolt_p2p', 57000), + (20360, 30596, 'result_illithid_chain_lightning_p2p', 57000), + (20361, 30621, 'snd_siren_queen_rx_attack', 57000), + (20362, 30622, 'snd_siren_queen_rx_attack01', 57000), + (20363, 30623, 'snd_siren_queen_rx_attack02', 57000), + (20364, 30624, 'snd_siren_queen_rx_attack03', 57000), + (20365, 30625, 'snd_siren_queen_rx_charge_up', 57000), + (20366, 30626, 'snd_siren_queen_rx_combat_enter', 57000), + (20367, 30627, 'snd_siren_queen_rx_dead_enter', 57000), + (20368, 30628, 'snd_siren_queen_rx_knocktoback', 57000), + (20369, 30629, 'snd_siren_queen_rx_knocktoback_getup', 57000), + (20370, 30630, 'snd_siren_queen_rx_knocktoknees', 57000), + (20371, 30631, 'snd_siren_queen_rx_ouch', 57000), + (20372, 30632, 'snd_siren_queen_rx_ouch_backhand', 57000), + (20373, 30633, 'snd_siren_queen_rx_ouch_forehand', 57000), + (20374, 30634, 'snd_siren_queen_rx_shield_shove', 57000), + (20375, 30635, 'snd_siren_queen_rx_whirl_attack', 57000), + (20376, 30636, 'snd_siren_queen_rx_wild_swing', 57000), + (20377, 30647, 'design_ghostly_seafoam', 57000), + (20378, 30648, 'design_othmir_spirit_rise', 57000), + (20379, 30649, 'dirt_fx', 57000), + (20380, 30660, 'design_blast_cage1', 57000), + (20381, 30661, 'design_blast_cage2', 57000), + (20382, 30662, 'design_blast_cage3', 57000), + (20383, 30663, 'design_cage1', 57000), + (20384, 30664, 'design_cage2', 57000), + (20385, 30665, 'design_cage3', 57000), + (20386, 30668, 'result_water_forced_shader_no_sparkle', 57000), + (20387, 30679, 'head1_grow_fx', 57000), + (20388, 30680, 'head1_sever_fx', 57000), + (20389, 30681, 'head1_spurt_fx', 57000), + (20390, 30682, 'head2_grow_fx', 57000), + (20391, 30683, 'head2_sever_fx', 57000), + (20392, 30684, 'head2_spurt_fx', 57000), + (20393, 30685, 'head3_grow_fx', 57000), + (20394, 30686, 'head3_sever_fx', 57000), + (20395, 30687, 'head3_spurt_fx', 57000), + (20396, 30688, 'head4_grow_fx', 57000), + (20397, 30689, 'head4_sever_fx', 57000), + (20398, 30690, 'head4_spurt_fx', 57000), + (20399, 30691, 'head5_grow_fx', 57000), + (20400, 30692, 'head5_sever_fx', 57000), + (20401, 30693, 'head5_spurt_fx', 57000), + (20402, 30694, 'hydra_start', 57000), + (20403, 30720, 'snd_jumpwhoosh', 57000), + (20404, 30722, 'snd_siren_rx_knocktoknees', 57000), + (20405, 30723, 'snd_siren_rx_attack', 57000), + (20406, 30724, 'snd_siren_rx_attack01', 57000), + (20407, 30725, 'snd_siren_rx_attack02', 57000), + (20408, 30726, 'snd_siren_rx_attack03', 57000), + (20409, 30727, 'snd_siren_rx_chargeup', 57000), + (20410, 30728, 'snd_siren_rx_combat_enter', 57000), + (20411, 30729, 'snd_siren_rx_death_enter', 57000), + (20412, 30730, 'snd_siren_rx_dualwield_attack', 57000), + (20413, 30731, 'snd_siren_rx_dualwield_attack01', 57000), + (20414, 30732, 'snd_siren_rx_dualwield_attack02', 57000), + (20415, 30733, 'snd_siren_rx_dualwield_attack03', 57000), + (20416, 30734, 'snd_siren_rx_dualwield_enter', 57000), + (20417, 30735, 'snd_siren_rx_knock_to_back', 57000), + (20418, 30736, 'snd_siren_rx_knock_to_back_getup', 57000), + (20419, 30737, 'snd_siren_rx_ouch', 57000), + (20420, 30738, 'snd_siren_rx_ouch_backhand', 57000), + (20421, 30739, 'snd_siren_rx_ouch_forehand', 57000), + (20422, 30740, 'snd_siren_rx_shieldshove', 57000), + (20423, 30741, 'snd_siren_rx_whirlattack', 57000), + (20424, 30742, 'snd_siren_rx_wildswing', 57000), + (20425, 30749, 'aa_bone_blast', 57000), + (20426, 30750, 'aa_bone_cage', 57000), + (20427, 30757, '_combat_enter', 57000), + (20428, 30758, '_combat_exit', 57000), + (20429, 30759, 'all_dead', 57000), + (20430, 30766, 'bubble_trail_fx', 57000), + (20431, 30772, 'lure_fx', 57000), + (20432, 30779, '_combat_idle01', 57000), + (20433, 30780, '_combat_idle02', 57000), + (20434, 30789, 'cast_shell_note_gather', 57000), + (20435, 30794, 'result_toxic_head_skulls', 57000), + (20436, 30807, 'result_shell_note_charm', 57000), + (20437, 30857, 'tinkered_barrel_mount_backup', 57000), + (20438, 30858, 'tinkered_barrel_mount_fall', 57000), + (20439, 30859, 'tinkered_barrel_mount_fly_backup', 57000), + (20440, 30860, 'tinkered_barrel_mount_fly_climb', 57000), + (20441, 30861, 'tinkered_barrel_mount_fly_dive', 57000), + (20442, 30862, 'tinkered_barrel_mount_fly_down', 57000), + (20443, 30863, 'tinkered_barrel_mount_fly_glide', 57000), + (20444, 30864, 'tinkered_barrel_mount_fly_glide_left', 57000), + (20445, 30865, 'tinkered_barrel_mount_fly_glide_right', 57000), + (20446, 30866, 'tinkered_barrel_mount_fly_idle', 57000), + (20447, 30867, 'tinkered_barrel_mount_fly_run', 57000), + (20448, 30868, 'tinkered_barrel_mount_fly_strafe_left', 57000), + (20449, 30869, 'tinkered_barrel_mount_fly_strafe_right', 57000), + (20450, 30870, 'tinkered_barrel_mount_fly_turn_left', 57000), + (20451, 30871, 'tinkered_barrel_mount_fly_turn_right', 57000), + (20452, 30872, 'tinkered_barrel_mount_fly_up', 57000), + (20453, 30873, 'tinkered_barrel_mount_fly_walk', 57000), + (20454, 30874, 'tinkered_barrel_mount_glide', 57000), + (20455, 30875, 'tinkered_barrel_mount_glide_left', 57000), + (20456, 30876, 'tinkered_barrel_mount_glide_right', 57000), + (20457, 30877, 'tinkered_barrel_mount_idle', 57000), + (20458, 30878, 'tinkered_barrel_mount_jump', 57000), + (20459, 30879, 'tinkered_barrel_mount_land', 57000), + (20460, 30880, 'tinkered_barrel_mount_long_fall', 57000), + (20461, 30881, 'tinkered_barrel_mount_run', 57000), + (20462, 30882, 'tinkered_barrel_mount_turn_left', 57000), + (20463, 30883, 'tinkered_barrel_mount_turn_right', 57000), + (20464, 30884, 'tinkered_barrel_mount_walk', 57000), + (20465, 30891, 'cast_clouds_head_inhale', 57000), + (20466, 30894, 'cast_sonic_shout', 57000), + (20467, 30919, 'snd_fish_angler_attack', 57000), + (20468, 30920, 'snd_fish_angler_attack_01', 57000), + (20469, 30921, 'snd_fish_angler_attack_02', 57000), + (20470, 30922, 'snd_fish_angler_attack_03', 57000), + (20471, 30923, 'snd_fish_angler_cast', 57000), + (20472, 30924, 'snd_fish_angler_charge_up_and_combat_enter', 57000), + (20473, 30925, 'snd_fish_angler_death_enter', 57000), + (20474, 30926, 'snd_fish_angler_dodge_and_dodge_thrust', 57000), + (20475, 30927, 'snd_fish_angler_dodge_backhand', 57000), + (20476, 30928, 'snd_fish_angler_dodge_down', 57000), + (20477, 30929, 'snd_fish_angler_dodge_forehand1', 57000), + (20478, 30930, 'snd_fish_angler_ouch_backhand', 57000), + (20479, 30931, 'snd_fish_angler_ouch_down', 57000), + (20480, 30932, 'snd_fish_angler_ouch_forehand', 57000), + (20481, 30933, 'snd_fish_angler_ouch_thrust', 57000), + (20482, 30934, 'snd_fish_angler_run', 57000), + (20483, 30935, 'snd_fish_angler_walk', 57000), + (20484, 30936, 'snd_fish_angler_whirl_attack', 57000), + (20485, 30937, 'snd_fish_angler_wild_swing', 57000), + (20486, 30950, 'result_fist_counter', 57000), + (20487, 30951, 'result_fist_pound', 57000), + (20488, 30952, 'result_fist_pound_blast', 57000), + (20489, 30976, 'snd_hydra_1h_sword_attack', 57000), + (20490, 30977, 'snd_hydra_1h_sword_attack01', 57000), + (20491, 30978, 'snd_hydra_1h_sword_attack02', 57000), + (20492, 30979, 'snd_hydra_1h_sword_attack03', 57000), + (20493, 30980, 'snd_hydra_1h_sword_idle01', 57000), + (20494, 30981, 'snd_hydra_2h_knocktoback', 57000), + (20495, 30982, 'snd_hydra_2h_knocktoback_getup', 57000), + (20496, 30983, 'snd_hydra_2h_sword_attack', 57000), + (20497, 30984, 'snd_hydra_2h_sword_attack01', 57000), + (20498, 30985, 'snd_hydra_2h_sword_attack02', 57000), + (20499, 30986, 'snd_hydra_2h_sword_attack03', 57000), + (20500, 30987, 'snd_hydra_2h_sword_dead_enter', 57000), + (20501, 30988, 'snd_hydra_2h_sword_enter', 57000), + (20502, 30989, 'snd_hydra_2h_sword_idle01', 57000), + (20503, 30990, 'snd_hydra_4to5_enter', 57000), + (20504, 30991, 'snd_hydra_attack', 57000), + (20505, 30992, 'snd_hydra_attack01', 57000), + (20506, 30993, 'snd_hydra_attack02', 57000), + (20507, 30994, 'snd_hydra_attack03', 57000), + (20508, 30995, 'snd_hydra_cast_01', 57000), + (20509, 30996, 'snd_hydra_cast_02', 57000), + (20510, 30997, 'snd_hydra_cast_03', 57000), + (20511, 30998, 'snd_hydra_cast_04', 57000), + (20512, 30999, 'snd_hydra_cast_05', 57000), + (20513, 31000, 'snd_hydra_combat_idle01', 57000), + (20514, 31001, 'snd_hydra_dual_wield_attack', 57000), + (20515, 31002, 'snd_hydra_dual_wield_attack01', 57000), + (20516, 31003, 'snd_hydra_dual_wield_attack02', 57000), + (20517, 31004, 'snd_hydra_dual_wield_attack03', 57000), + (20518, 31005, 'snd_hydra_dual_wield_idle01', 57000), + (20519, 31006, 'snd_hydra_head_one_dead_exit', 57000), + (20520, 31007, 'snd_hydra_head_three_dead_exit', 57000), + (20521, 31008, 'snd_hydra_head_two_dead_exit', 57000), + (20522, 31009, 'snd_hydra_head_zero_dead_exit', 57000), + (20523, 31010, 'snd_hydra_pike_attack', 57000), + (20524, 31011, 'snd_hydra_pike_attack01', 57000), + (20525, 31012, 'snd_hydra_pike_attack02', 57000), + (20526, 31013, 'snd_hydra_pike_attack03', 57000), + (20527, 31014, 'snd_hydra_pike_idle01', 57000), + (20528, 31021, 'acid_blast_fx', 57000), + (20529, 31022, 'cast_acid_spit_fx', 57000), + (20530, 31023, 'cast_acid_spray', 57000), + (20531, 31024, 'cast_fang_fx', 57000), + (20532, 31027, 'cast_water_spouts', 57000), + (20533, 31030, 'head1_cauterize_fx', 57000), + (20534, 31031, 'head2_cauterize_fx', 57000), + (20535, 31032, 'head3_cauterize_fx', 57000), + (20536, 31033, 'head4_cauterize_fx', 57000), + (20537, 31034, 'head5_cauterize_fx', 57000), + (20538, 31045, 'design_blue_pool', 57000), + (20539, 31046, 'design_red_pool', 57000), + (20540, 31047, 'design_yellow_pool', 57000), + (20541, 31109, 'trdskl_othmir_tusk_staff', 57000), + (20542, 31141, 'snd_dragon_made_golem_jump', 57000), + (20543, 31142, 'snd_dragon_made_golem_attack_01', 57000), + (20544, 31143, 'snd_dragon_made_golem_attack_02', 57000), + (20545, 31144, 'snd_dragon_made_golem_attack_03', 57000), + (20546, 31145, 'snd_dragon_made_golem_cast_01', 57000), + (20547, 31146, 'snd_dragon_made_golem_cast_02', 57000), + (20548, 31147, 'snd_dragon_made_golem_combat_enter', 57000), + (20549, 31148, 'snd_dragon_made_golem_combat_exit', 57000), + (20550, 31149, 'snd_dragon_made_golem_combat_idle_01', 57000), + (20551, 31150, 'snd_dragon_made_golem_combat_idle_02', 57000), + (20552, 31151, 'snd_dragon_made_golem_death_enter', 57000), + (20553, 31152, 'snd_dragon_made_golem_death_exit', 57000), + (20554, 31153, 'snd_dragon_made_golem_ouch_backhand', 57000), + (20555, 31154, 'snd_dragon_made_golem_ouch_down', 57000), + (20556, 31155, 'snd_dragon_made_golem_ouch_forehand', 57000), + (20557, 31156, 'snd_dragon_made_golem_ouch_thrust', 57000), + (20558, 31157, 'snd_dragon_made_golem_pile_driver', 57000), + (20559, 31158, 'snd_dragon_made_golem_shield_shove', 57000), + (20560, 31159, 'snd_dragon_made_golem_whirl_attack', 57000), + (20561, 31170, 'design_barrier_active', 57000), + (20562, 31181, 'design_meditate_fx', 57000), + (20563, 31192, 'ethereal_construct_idle_base', 57000), + (20564, 31193, 'ethereal_construct_attack', 57000), + (20565, 31194, 'ethereal_construct_attack_01', 57000), + (20566, 31195, 'ethereal_construct_attack_02', 57000), + (20567, 31196, 'ethereal_construct_attack_03', 57000), + (20568, 31197, 'ethereal_construct_death_enter', 57000), + (20569, 31198, 'ethereal_construct_deffensive_buff', 57000), + (20570, 31199, 'ethereal_construct_fist_catch', 57000), + (20571, 31200, 'ethereal_construct_footsteps', 57000), + (20572, 31201, 'ethereal_construct_idle_01', 57000), + (20573, 31202, 'ethereal_construct_idle_02', 57000), + (20574, 31203, 'ethereal_construct_offensive_buff', 57000), + (20575, 31204, 'ethereal_construct_ouch', 57000), + (20576, 31205, 'ethereal_construct_ouch_backhand', 57000), + (20577, 31206, 'ethereal_construct_ouch_down', 57000), + (20578, 31207, 'ethereal_construct_ouch_knock_back', 57000), + (20579, 31208, 'ethereal_construct_ouch_knock_back_get_up', 57000), + (20580, 31209, 'ethereal_construct_sit_enter', 57000), + (20581, 31210, 'ethereal_construct_sit_exit', 57000), + (20582, 31211, 'ethereal_construct_weapon_attack_01', 57000), + (20583, 31212, 'ethereal_construct_weapon_attack_03', 57000), + (20584, 31213, 'ethereal_construct_weapon_combat_enter', 57000), + (20585, 31214, 'ethereal_construct_weapon_combat_exit', 57000), + (20586, 31215, 'ethereal_construct_weapon_death_enter', 57000), + (20587, 31216, 'ethereal_construct_weapon_super_buff', 57000), + (20588, 31217, 'ethereal_construct_wild_swing', 57000), + (20589, 31224, 'cast_assassin_mythical_fx', 57000), + (20590, 31225, 'cast_beastlord_mythical_fx', 57000), + (20591, 31226, 'cast_berserker_mythical_fx', 57000), + (20592, 31227, 'cast_brigand_mythical_fx', 57000), + (20593, 31228, 'cast_bruiser_mythical_fx', 57000), + (20594, 31229, 'cast_coercer_mythical_fx', 57000), + (20595, 31230, 'cast_conjuror_mythical_fx', 57000), + (20596, 31231, 'cast_defiler_mythical_fx', 57000), + (20597, 31232, 'cast_dirge_mythical_fx', 57000), + (20598, 31233, 'cast_fury_mythical_fx', 57000), + (20599, 31234, 'cast_guardian_mythical_fx', 57000), + (20600, 31235, 'cast_illusionist_mythical_fx', 57000), + (20601, 31236, 'cast_inquisitor_mythical_fx', 57000), + (20602, 31237, 'cast_monk_mythical_fx', 57000), + (20603, 31238, 'cast_mystic_mythical_fx', 57000), + (20604, 31239, 'cast_necromancer_mythical_fx', 57000), + (20605, 31240, 'cast_paladin_mythical_fx', 57000), + (20606, 31243, 'cast_ranger_mythical_fx', 57000), + (20607, 31244, 'cast_shadowknight_mythical_fx', 57000), + (20608, 31245, 'cast_swashbuckler_mythical_fx', 57000), + (20609, 31246, 'cast_templar_mythical_fx', 57000), + (20610, 31247, 'cast_troubador_mythical_fx', 57000), + (20611, 31248, 'cast_warden_mythical_fx', 57000), + (20612, 31249, 'cast_warlock_mythical_fx', 57000), + (20613, 31250, 'cast_wizard_mythical_fx', 57000), + (20614, 31261, 'design_undead_ward', 57000), + (20615, 31268, 'aa_holy_circle_summon', 57000), + (20616, 31279, 'cursed_nayad_attack', 57000), + (20617, 31280, 'cursed_nayad_death', 57000), + (20618, 31281, 'cursed_nayad_take_damage', 57000), + (20619, 31288, 'cast_flame_emblem', 57000), + (20620, 31289, 'cast_flame_punchdown', 57000), + (20621, 31290, 'cast_flaming_sun_beams', 57000), + (20622, 31291, 'cast_hand_fireball', 57000), + (20623, 31294, 'cast_sun_sphere', 57000), + (20624, 31295, 'cast_weapon_flames_bottom', 57000), + (20625, 31296, 'cast_weapon_flames_top', 57000), + (20626, 31299, 'design_sol_ro_perimiter', 57000), + (20627, 31303, 'result_solusek_nuke_blast', 57000), + (20628, 31314, 'design_sol_ro_perimeter', 57000), + (20629, 31315, 'dontuse__ouch', 57000), + (20630, 31316, 'dontuse_dodge_backhand', 57000), + (20631, 31317, 'dontuse_dodge_down', 57000), + (20632, 31318, 'dontuse_dodge_forehand', 57000), + (20633, 31319, 'dontuse_dodge_thrust', 57000), + (20634, 31320, 'dontuse_fly_enter', 57000), + (20635, 31321, 'dontuse_habitat01', 57000), + (20636, 31322, 'dontuse_habitat02', 57000), + (20637, 31323, 'dontuse_habitat03', 57000), + (20638, 31324, 'dontuse_idle03', 57000), + (20639, 31325, 'dontuse_knockeddowntoknees', 57000), + (20640, 31326, 'dontuse_ouch_backhand', 57000), + (20641, 31327, 'dontuse_ouch_down', 57000), + (20642, 31328, 'dontuse_ouch_forehand', 57000), + (20643, 31329, 'dontuse_ouch_thrust', 57000), + (20644, 31330, 'dontuse_swim_backup', 57000), + (20645, 31331, 'dontuse_swim_idle', 57000), + (20646, 31332, 'dontuse_swim_run', 57000), + (20647, 31333, 'dontuse_swim_walk', 57000), + (20648, 31336, 'lizardkin_1h_sword_attack', 57000), + (20649, 31337, 'lizardkin_1h_sword_attack_01', 57000), + (20650, 31338, 'lizardkin_1h_sword_attack_02', 57000), + (20651, 31339, 'lizardkin_1h_sword_attack_03', 57000), + (20652, 31340, 'lizardkin_1h_sword_enter', 57000), + (20653, 31341, 'lizardkin_bow_attack', 57000), + (20654, 31342, 'lizardkin_bow_enter', 57000), + (20655, 31343, 'lizardkin_bow_exit', 57000), + (20656, 31344, 'lizardkin_cast', 57000), + (20657, 31345, 'lizardkin_charge_up', 57000), + (20658, 31346, 'lizardkin_death_enter', 57000), + (20659, 31347, 'lizardkin_dodge_backhand', 57000), + (20660, 31348, 'lizardkin_dodge_down', 57000), + (20661, 31349, 'lizardkin_dodge_forehand', 57000), + (20662, 31350, 'lizardkin_dodge_thrust', 57000), + (20663, 31351, 'lizardkin_footstep', 57000), + (20664, 31352, 'lizardkin_get_up', 57000), + (20665, 31353, 'lizardkin_jump', 57000), + (20666, 31354, 'lizardkin_knockback_get_up', 57000), + (20667, 31355, 'lizardkin_ouch', 57000), + (20668, 31356, 'lizardkin_ouch_backhand', 57000), + (20669, 31357, 'lizardkin_ouch_down', 57000), + (20670, 31358, 'lizardkin_ouch_forehand', 57000), + (20671, 31359, 'lizardkin_sit_enter', 57000), + (20672, 31360, 'lizardkin_sit_exit', 57000), + (20673, 31361, 'lizardkin_sword_exit', 57000), + (20674, 31362, 'lizardkin_whirl_attack', 57000), + (20675, 31363, 'lizardkin_wildswing', 57000), + (20676, 31377, 'puppeteer_enter', 57000), + (20677, 31378, 'puppeteer_idle', 57000), + (20678, 31379, 'puppeter_exit', 57000), + (20679, 31386, 'cast_hand_fireball_blast', 57000), + (20680, 31397, 'design_door_smoke', 57000), + (20681, 31398, 'design_plasma_barrier', 57000), + (20682, 31402, 'puppeteer_exit', 57000), + (20683, 31416, 'result_solusek_sun_beam_blast', 57000), + (20684, 31417, 'ro_death_portal', 57000), + (20685, 31418, 'ro_sun_beam', 57000), + (20686, 31427, 'console_dead', 57000), + (20687, 31428, 'console_idle', 57000), + (20688, 31429, 'console_ouch', 57000), + (20689, 31439, 'crash', 57000), + (20690, 31441, 'dead_idle', 57000), + (20691, 31443, 'fly_dodge01', 57000), + (20692, 31444, 'fly_trans_left', 57000), + (20693, 31497, 'test', 57000), + (20694, 31504, 'cannon_fire_blast_aoe', 57000), + (20695, 31551, 'solusek_death_enter', 57000), + (20696, 31552, 'solusek_ro_attack', 57000), + (20697, 31553, 'solusek_ro_attack_01', 57000), + (20698, 31554, 'solusek_ro_attack_02', 57000), + (20699, 31555, 'solusek_ro_attack_03', 57000), + (20700, 31556, 'solusek_ro_cast', 57000), + (20701, 31557, 'solusek_ro_cast_04', 57000), + (20702, 31558, 'solusek_ro_cast_09', 57000), + (20703, 31559, 'solusek_ro_charge_up', 57000), + (20704, 31560, 'solusek_ro_combat_enter', 57000), + (20705, 31561, 'solusek_ro_combat_exit', 57000), + (20706, 31562, 'solusek_ro_foot_steps', 57000), + (20707, 31563, 'solusek_ro_jump', 57000), + (20708, 31564, 'solusek_ro_ouch', 57000), + (20709, 31565, 'solusek_ro_shield_shove', 57000), + (20710, 31566, 'solusek_ro_whirl_attack', 57000), + (20711, 31567, 'solusek_ro_wild_swing', 57000), + (20712, 31581, 'scene_04', 57000), + (20713, 31582, 'scene_09', 57000), + (20714, 31583, 'scene_10', 57000), + (20715, 31597, 'scene04', 57000), + (20716, 31598, 'scene09', 57000), + (20717, 31599, 'scene10', 57000), + (20718, 31611, 'fly_left', 57000), + (20719, 31614, 'scene02', 57000), + (20720, 31615, 'scene05', 57000), + (20721, 31616, 'scene07', 57000), + (20722, 31617, 'scene08_flycircle', 57000), + (20723, 31618, 'scene08_flyenter', 57000), + (20724, 31619, 'scene08_flyidle', 57000), + (20725, 31633, 'scene02_intro', 57000), + (20726, 31634, 'scene04_roar', 57000), + (20727, 31635, 'scene06_flyleft', 57000), + (20728, 31636, 'scene08_flyexit', 57000), + (20729, 31637, 'scene09_flyover', 57000), + (20730, 31651, 'scene08_long', 57000), + (20731, 31660, 'cast_prism_breath', 57000), + (20732, 31666, 'scene08_long_alt', 57000), + (20733, 31673, 'cast_icy_breath', 57000), + (20734, 31680, 'cast_fighter_aa_reassignment_fx', 57000), + (20735, 31681, 'cast_mage_aa_reassignment_fx', 57000), + (20736, 31684, 'cast_priest_aa_reassignment_fx', 57000), + (20737, 31685, 'cast_scout_aa_reassignment_fx', 57000), + (20738, 31691, 'scene02_spawn', 57000), + (20739, 31692, 'scene09_crash', 57000), + (20740, 31707, 'sit_talking_idle', 57000), + (20741, 31757, 'trdskl_scribing01_snd', 57000), + (20742, 31758, 'trdskl_scribing02_snd', 57000), + (20743, 31759, 'trdskl_scribing03_snd', 57000), + (20744, 31760, 'trdskl_scribing04_snd', 57000), + (20745, 31771, 'design_light', 57000), + (20746, 31775, 'scene02_shout', 57000), + (20747, 31789, 'result_tear_of_veeshan_channeling_p2p', 57000), + (20748, 31798, 'cast_tear_shout', 57000), + (20749, 31801, 'design_tear_energy_gather', 57000), + (20750, 31802, 'design_tear_energy_release', 57000), + (20751, 31806, 'result_explode_up', 57000), + (20752, 31807, 'result_kerafyrm_tear_runes_p2p', 57000), + (20753, 31808, 'result_tear_blast', 57000), + (20754, 31809, 'result_tear_chain_channeling_p2p', 57000), + (20755, 31810, 'result_veeshan_teleport', 57000), + (20756, 31811, 'scene06_fly_left', 57000), + (20757, 31812, 'scene08_belowground', 57000), + (20758, 31821, 'charge_of_silence', 57000), + (20759, 31824, 'design_dome_of_silence', 57000), + (20760, 31835, 'design_break_chains', 57000), + (20761, 31836, 'design_rock_water_blast', 57000), + (20762, 31839, 'kerafyrm_wingflap_lrg_long', 57000), + (20763, 31840, 'kerafyrm_wingflap_lrg_med', 57000), + (20764, 31841, 'kerafyrm_wingflap_lrg_shor', 57000), + (20765, 31842, 'misst_target_trigger', 57000), + (20766, 31849, 'antonia_soulsuck_hover', 57000), + (20767, 31850, 'antonia_soulsuck_hover_exit', 57000), + (20768, 31855, 'dontuse_scene06_fly_left', 57000), + (20769, 31856, 'dontuse_scene06_flyleft', 57000), + (20770, 31857, 'dontuse_scene08_flycircle', 57000), + (20771, 31858, 'dontuse_scene08_flyenter', 57000), + (20772, 31859, 'dontuse_scene08_flyexit', 57000), + (20773, 31860, 'dontuse_scene08_flyidle', 57000), + (20774, 31903, 'snd_yelinak_wing_flaps', 57000), + (20775, 31915, 'unforl', 57000), + (20776, 31922, 'cast_hand_fx_in', 57000), + (20777, 31930, 'result_chest_flare', 57000), + (20778, 31931, 'result_lucan_essense_suck_p2p', 57000), + (20779, 31932, 'result_veeshan_tear_energy_absorb_p2p', 57000), + (20780, 31972, 'soulsuck_exit', 57000), + (20781, 31985, 'kerafyrm_bite', 57000), + (20782, 31986, 'kerafyrm_firebreath', 57000), + (20783, 31987, 'kerafyrm_foley_intro', 57000), + (20784, 31988, 'kerafyrm_foley_roar', 57000), + (20785, 31989, 'kerafyrm_vox_flyover', 57000), + (20786, 31990, 'kerafyrm_vox_idlebreath', 57000), + (20787, 31991, 'kerafyrm_vox_intro', 57000), + (20788, 31992, 'kerafyrm_vox_roar', 57000), + (20789, 31993, 'kerafyrm_wing_by', 57000), + (20790, 31994, 'kerafyrm_wing_by_long', 57000), + (20791, 31996, 'scene02_enter_convo', 57000), + (20792, 31997, 'scene02_look_convo', 57000), + (20793, 32037, 'snd_yelinak_breath', 57000), + (20794, 32038, 'snd_yelinak_crash_impact', 57000), + (20795, 32039, 'snd_yelinak_roar_01', 57000), + (20796, 32040, 'snd_yelinak_wing_by', 57000), + (20797, 32041, 'snd_yelinak_wing_by_long', 57000), + (20798, 32048, 'blast_rune_ring', 57000), + (20799, 32053, 'design_ring_black', 57000), + (20800, 32054, 'design_ring_blue', 57000), + (20801, 32055, 'design_ring_green', 57000), + (20802, 32056, 'design_ring_orange', 57000), + (20803, 32057, 'design_ring_purple', 57000), + (20804, 32058, 'design_ring_red', 57000), + (20805, 32059, 'design_ring_yellow', 57000), + (20806, 32074, 'skull_attack_fx', 57000), + (20807, 32124, 'tiered_truespirit_arrow_barrage', 57000), + (20808, 32131, 'cast_assassin', 57000), + (20809, 32132, 'cast_beastlord', 57000), + (20810, 32133, 'cast_berserker', 57000), + (20811, 32134, 'cast_brigand', 57000), + (20812, 32135, 'cast_bruiser', 57000), + (20813, 32136, 'cast_channeler', 57000), + (20814, 32137, 'cast_guardian', 57000), + (20815, 32138, 'cast_monk', 57000), + (20816, 32141, 'cast_ranger', 57000), + (20817, 32142, 'cast_swashbuckler', 57000), + (20818, 32198, 'tiered_essence_channel_p2p', 57000), + (20819, 32199, 'tiered_eye_arrow_p2p', 57000), + (20820, 32206, 'bubbles_fx', 57000), + (20821, 32238, 'snd_idle01', 57000), + (20822, 32239, 'snd_idle02', 57000), + (20823, 32249, 'snd_trick01', 57000), + (20824, 32250, 'snd_trick02', 57000), + (20825, 32268, 'tiered_heal_arrow_blast', 57000), + (20826, 32269, 'trick01', 57000), + (20827, 32270, 'trick02', 57000), + (20828, 32271, 'unfurl', 57000), + (20829, 32278, 'cast_conduit_input', 57000), + (20830, 32286, 'result_conduit_p2p', 57000), + (20831, 32287, 'result_sword_cyclone', 57000), + (20832, 32300, 'kerafyrm_vox_shout_01', 57000), + (20833, 32301, 'kerafyrm_vox_shout_roar_01', 57000), + (20834, 32302, 'kerafyrm_vox_shout_roar_02', 57000), + (20835, 32304, 'result_chains_barrier', 57000), + (20836, 32305, 'result_conduit_chain_p2p', 57000), + (20837, 32306, 'result_dissonance_barrier', 57000), + (20838, 32307, 'result_healing_wisps', 57000), + (20839, 32314, 'aa_shield_barrier_buff', 57000), + (20840, 32319, 'design_boiling_flames_warning', 57000), + (20841, 32323, 'result_heal_ball_p2p', 57000), + (20842, 32324, 'result_ring_flare', 57000), + (20843, 32325, 'result_stone_copy_shield', 57000), + (20844, 32326, 'result_weaving_wisp', 57000), + (20845, 32340, 'result_bubble_sphere_prism', 57000), + (20846, 32341, 'result_spirits_blast_out_dark', 57000), + (20847, 32348, 'aa_shield_barrier_heal', 57000), + (20848, 32356, 'result_poison_spiral_ball_p2p', 57000), + (20849, 32357, 'result_weaving2_wisp', 57000), + (20850, 32369, 'idle_360', 57000), + (20851, 32372, 'result_quickened_heal', 57000), + (20852, 32373, '1h_sword_attack_01', 57000), + (20853, 32374, '1h_sword_attack_02', 57000), + (20854, 32375, '1h_sword_attack_03', 57000), + (20855, 32376, '1h_sword_combat_buff', 57000), + (20856, 32377, '1h_sword_combat_idle', 57000), + (20857, 32378, '1h_sword_death', 57000), + (20858, 32379, '1h_sword_idle_fidget_01', 57000), + (20859, 32380, '1h_sword_idle_fidget_02', 57000), + (20860, 32381, '1h_sword_turn_left', 57000), + (20861, 32382, '2h_sword_ground_attack_01', 57000), + (20862, 32383, '2h_sword_ground_attack_02', 57000), + (20863, 32384, '2h_sword_ground_combat_buff', 57000), + (20864, 32385, '2h_sword_ground_death', 57000), + (20865, 32386, '2h_sword_ground_dodge_backhand', 57000), + (20866, 32387, '2h_sword_ground_dodge_down', 57000), + (20867, 32388, '2h_sword_ground_dodge_forehand', 57000), + (20868, 32389, '2h_sword_ground_dodge_thrust', 57000), + (20869, 32390, '2h_sword_ground_idle', 57000), + (20870, 32391, '2h_sword_ground_idle_fidget', 57000), + (20871, 32392, '2h_sword_ground_ouch_backhand', 57000), + (20872, 32393, '2h_sword_ground_ouch_down', 57000), + (20873, 32394, '2h_sword_ground_ouch_forehand', 57000), + (20874, 32395, '2h_sword_ground_ouch_thrust', 57000), + (20875, 32402, 'aa_reactive_buff', 57000), + (20876, 32403, 'cast_draining_portal_fx', 57000), + (20877, 32405, 'cast_portal_energy_release', 57000), + (20878, 32412, 'result_drain_essence_p2p', 57000), + (20879, 32413, 'result_energy_release_death', 57000), + (20880, 32420, 'cast_golem_head_summon', 57000), + (20881, 32428, 'result_golem_head_interception', 57000), + (20882, 32479, 'tiered_spirit_tiger_lounging', 57000), + (20883, 32488, 'clear', 57000), + (20884, 32493, 'miss', 57000), + (20885, 32495, 'result_beetle_barrier_buff', 57000), + (20886, 32496, 'result_oxygen_tunnel', 57000), + (20887, 32547, 'tiered_heal_cone_forward', 57000), + (20888, 32548, 'tiered_root_shield', 57000), + (20889, 32559, 'design_lava_wave', 57000), + (20890, 32560, 'eating_idle', 57000), + (20891, 32614, 'trapped_exit', 57000), + (20892, 32615, 'trapped_idle', 57000), + (20893, 32629, 'result_shadow_bind', 57000), + (20894, 32640, 'design_zone_blast_fx', 57000), + (20895, 32694, 'vulakk_breathe_fire', 57000), + (20896, 32701, 'cast_heal_ball_gather', 57000), + (20897, 62189, 'kill_aa_rune_out_buff', 57000), + (20898, 62196, 'kill_aa_wind_blast', 57000), + (20899, 62215, 'kill_snd_gumdrop_fs', 57000), + (20900, 62231, 'kill_sound_fs', 57000), + (20901, 62275, 'kill_wyvern_mount_backup', 57000), + (20902, 62276, 'kill_wyvern_mount_fall', 57000), + (20903, 62277, 'kill_wyvern_mount_fly_backup', 57000), + (20904, 62278, 'kill_wyvern_mount_fly_climb', 57000), + (20905, 62279, 'kill_wyvern_mount_fly_dive', 57000), + (20906, 62280, 'kill_wyvern_mount_fly_down', 57000), + (20907, 62281, 'kill_wyvern_mount_fly_glide', 57000), + (20908, 62282, 'kill_wyvern_mount_fly_glide_left', 57000), + (20909, 62283, 'kill_wyvern_mount_fly_glide_right', 57000), + (20910, 62284, 'kill_wyvern_mount_fly_idle', 57000), + (20911, 62285, 'kill_wyvern_mount_fly_run', 57000), + (20912, 62286, 'kill_wyvern_mount_fly_strafe_left', 57000), + (20913, 62287, 'kill_wyvern_mount_fly_strafe_right', 57000), + (20914, 62288, 'kill_wyvern_mount_fly_turn_left', 57000), + (20915, 62289, 'kill_wyvern_mount_fly_turn_right', 57000), + (20916, 62290, 'kill_wyvern_mount_fly_up', 57000), + (20917, 62291, 'kill_wyvern_mount_fly_walk', 57000), + (20918, 62292, 'kill_wyvern_mount_idle', 57000), + (20919, 62293, 'kill_wyvern_mount_idle01', 57000), + (20920, 62294, 'kill_wyvern_mount_jump', 57000), + (20921, 62295, 'kill_wyvern_mount_jump_substitute', 57000), + (20922, 62296, 'kill_wyvern_mount_land', 57000), + (20923, 62297, 'kill_wyvern_mount_long_fall', 57000), + (20924, 62298, 'kill_wyvern_mount_run', 57000), + (20925, 62299, 'kill_wyvern_mount_turn_left', 57000), + (20926, 62300, 'kill_wyvern_mount_turn_right', 57000), + (20927, 62301, 'kill_wyvern_mount_walk', 57000), + (20928, 62308, 'kill_aa_spirit_mongoose', 57000), + (20929, 62309, 'kill_aa_unyielding_will', 57000), + (20930, 62316, 'kill_aa_hammer_buff', 57000), + (20931, 62317, 'kill_aa_speed_buff', 57000), + (20932, 62321, 'kill_cookie_gumdrop_fx', 57000), + (20933, 62325, 'kill_result_elephant_trample', 57000), + (20934, 62326, 'kill_scared', 57000), + (20935, 62333, 'kill_aa_anger_buff', 57000), + (20936, 62334, 'kill_aa_lance_attack', 57000), + (20937, 62335, 'kill_aa_plane_shift', 57000), + (20938, 62349, 'kill_skyshrine_drake_fly_fall', 57000), + (20939, 62380, 'kill_wyvern_mount_fly_fall', 57000), + (20940, 62387, 'kill_aa_heal_flourish', 57000), + (20941, 62394, 'kill_aa_frenzy', 57000), + (20942, 62405, 'kill_design_night_eyes', 57000), + (20943, 62412, 'kill_aa_hammer_smite', 57000), + (20944, 62419, 'kill_aa_blast_circle', 57000), + (20945, 62426, 'kill_aa_spirit_tree', 57000), + (20946, 62427, 'kill_2h_sword_run', 57000), + (20947, 62434, 'kill__idle03', 57000), + (20948, 62445, 'kill_design_sg_dome_beam_fx01', 57000), + (20949, 62446, 'kill_design_sg_dome_beam_fx02', 57000), + (20950, 62447, 'kill_design_sg_dome_beam_fx03', 57000), + (20951, 62448, 'kill_design_sg_dome_beam_fx04', 57000), + (20952, 62449, 'kill_design_sg_dome_beam_fx05', 57000), + (20953, 62450, 'kill_design_sg_dome_beam_fx06', 57000), + (20954, 62451, 'kill_design_sg_dome_fx', 57000), + (20955, 62458, 'kill_aa_spirit_circle_summon', 57000), + (20956, 62465, 'kill_aa_ancestral_gather', 57000), + (20957, 62466, 'kill_aa_divine_burst', 57000), + (20958, 62467, 'kill_aa_rune_debuff_all', 57000), + (20959, 62468, 'kill_aa_spirit_swirl_hit', 57000), + (20960, 62469, 'kill_2h_sword_dead', 57000), + (20961, 62470, 'kill_2h_sword_dead_enter', 57000), + (20962, 62481, 'kill_dual_wield_run', 57000), + (20963, 62484, 'kill_pike_run', 57000), + (20964, 62485, 'kill_2h_idle', 57000), + (20965, 62486, 'kill_2h_knockedtoback', 57000), + (20966, 62487, 'kill_2h_knockedtoback_getup', 57000), + (20967, 62488, 'kill_2h_knockedtoback_onbackidle', 57000), + (20968, 62497, 'kill_cast_rock_strike_targeted', 57000), + (20969, 62500, 'kill_four_to_five_enter', 57000), + (20970, 62501, 'kill_head_four_dead', 57000), + (20971, 62502, 'kill_head_one_dead', 57000), + (20972, 62503, 'kill_head_one_dead_enter', 57000), + (20973, 62504, 'kill_head_one_dead_exit', 57000), + (20974, 62505, 'kill_head_three_dead', 57000), + (20975, 62506, 'kill_head_three_dead_exit', 57000), + (20976, 62507, 'kill_head_two_dead', 57000), + (20977, 62508, 'kill_head_two_dead_exit', 57000), + (20978, 62509, 'kill_head_zero_dead', 57000), + (20979, 62510, 'kill_head_zero_dead_enter', 57000), + (20980, 62511, 'kill_head_zero_dead_exit', 57000), + (20981, 62518, 'kill_aa_dancing_blades', 57000), + (20982, 62523, 'kill_head_four_dead_enter', 57000), + (20983, 62524, 'kill_head_three_dead_enter', 57000), + (20984, 62525, 'kill_head_two_dead_enter', 57000), + (20985, 62528, 'kill_result_paper_scatter', 57000), + (20986, 62529, 'kill_2h_sword_idle01', 57000), + (20987, 62536, 'kill_aa_hand_notes', 57000), + (20988, 62537, 'kill_aa_hand_spin_notes', 57000), + (20989, 62538, 'kill_aa_music_blast_ball', 57000), + (20990, 62539, 'kill_aa_music_bubble', 57000), + (20991, 62540, 'kill_aa_notes_shield', 57000), + (20992, 62541, 'kill_cast_01', 57000), + (20993, 62542, 'kill_cast_02', 57000), + (20994, 62543, 'kill_cast_03', 57000), + (20995, 62544, 'kill_cast_04', 57000), + (20996, 62545, 'kill_cast_05', 57000), + (20997, 62552, 'kill__dont_use_dead', 57000), + (20998, 62553, 'kill__dont_use_dead_enter', 57000), + (20999, 62554, 'kill_aa_coin_toss', 57000), + (21000, 62555, 'kill_aa_death_mark', 57000), + (21001, 62556, 'kill_aa_notes_swirling', 57000), + (21002, 62561, 'kill_head_carry', 57000), + (21003, 62574, 'kill_result_fireworks_brew_burst', 57000), + (21004, 62575, 'kill_result_fireworks_confetti_brewday', 57000), + (21005, 62576, 'kill_result_fireworks_shamrock_sparkle_burst', 57000), + (21006, 62589, 'kill_result_fireworks_flare_beads_burst', 57000), + (21007, 62590, 'kill_result_fireworks_flare_cards_burst', 57000), + (21008, 62591, 'kill_result_fireworks_flare_coins_burst', 57000), + (21009, 62599, 'kill_snd_parrot_vox', 57000), + (21010, 62610, 'kill_design_bristlebane_collect_gold', 57000), + (21011, 62611, 'kill_design_bristlebane_collect_green', 57000), + (21012, 62612, 'kill_design_bristlebane_collect_red', 57000), + (21013, 62613, 'kill_design_bristlebane_fish_boost', 57000), + (21014, 62614, 'kill_design_launch_boost', 57000), + (21015, 62615, 'kill_design_powerup_buff_gold', 57000), + (21016, 62616, 'kill_design_powerup_buff_green', 57000), + (21017, 62617, 'kill_design_powerup_buff_red', 57000), + (21018, 62628, 'kill_design_sg_tidal_wave', 57000), + (21019, 62651, 'kill_snd_wave_crash01', 57000), + (21020, 62662, 'kill_design_music_barrier', 57000), + (21021, 62665, 'kill_recline_side', 57000), + (21022, 62666, 'kill_result_music_barrier_beam_p2p', 57000), + (21023, 62677, 'kill_design_kill', 57000), + (21024, 62678, 'kill_design_reef_grow', 57000), + (21025, 62679, 'kill_design_ride', 57000), + (21026, 62680, 'kill_design_target_reef', 57000), + (21027, 62681, 'kill_design_zip_car', 57000), + (21028, 62682, 'kill_idle_mode', 57000), + (21029, 62719, 'kill_sound_swim_idle', 57000), + (21030, 62720, 'kill_sound_swim_walk', 57000), + (21031, 62726, 'kill_sound_ulthork_1h_sword_attack', 57000), + (21032, 62727, 'kill_sound_ulthork_1h_sword_attack01', 57000), + (21033, 62728, 'kill_sound_ulthork_1h_sword_attack02', 57000), + (21034, 62729, 'kill_sound_ulthork_1h_sword_attack03', 57000), + (21035, 62730, 'kill_sound_ulthork_attack', 57000), + (21036, 62731, 'kill_sound_ulthork_attack01', 57000), + (21037, 62732, 'kill_sound_ulthork_attack02', 57000), + (21038, 62733, 'kill_sound_ulthork_attack03', 57000), + (21039, 62734, 'kill_sound_ulthork_dead_enter', 57000), + (21040, 62735, 'kill_sound_ulthork_dual_wield_attack', 57000), + (21041, 62736, 'kill_sound_ulthork_dual_wield_attack01', 57000), + (21042, 62737, 'kill_sound_ulthork_dual_wield_attack02', 57000), + (21043, 62738, 'kill_sound_ulthork_dual_wield_attack03', 57000), + (21044, 62739, 'kill_sound_ulthork_dual_wield_enter', 57000), + (21045, 62740, 'kill_sound_ulthork_ouch', 57000), + (21046, 62741, 'kill_sound_ulthork_ouch_down', 57000), + (21047, 62742, 'kill_sound_ulthork_ouch_forehand', 57000), + (21048, 62743, 'kill_sound_ulthork_whirling_attack', 57000), + (21049, 62744, 'kill_sound_ulthork_wildswing', 57000), + (21050, 62755, 'kill_design_reef_barrier', 57000), + (21051, 62756, 'kill_design_siren_queen_beam_fx', 57000), + (21052, 62769, 'kill_result_chainlink_p2p', 57000), + (21053, 62801, 'kill_weapon_blood_lust', 57000), + (21054, 62808, 'kill_aa_slashing_daggers', 57000), + (21055, 62846, 'kill_zombie_eat', 57000), + (21056, 62853, 'kill_aa_self_lifetap', 57000), + (21057, 62891, 'kill_zombie_sleep', 57000), + (21058, 62892, 'kill_zombie_sleep_exit', 57000), + (21059, 62904, 'kill_necro_curse', 57000), + (21060, 62913, 'kill_snd_meatbeast_ide01', 57000), + (21061, 62914, 'kill_snd_meatbeast_jumpsub', 57000), + (21062, 62934, 'kill_snd_meatbeast_jump', 57000), + (21063, 62945, 'kill_design_ballista_flames', 57000), + (21064, 62946, 'kill_design_drake_flame_attack01', 57000), + (21065, 62947, 'kill_design_drake_flame_attack02', 57000), + (21066, 62955, 'kill_cast_poison_spray_back', 57000), + (21067, 62956, 'kill_cast_poison_spray_cone', 57000), + (21068, 62976, 'kill_snd_undead_ulthork_eat', 57000), + (21069, 62987, 'kill_idle_waterfall', 57000), + (21070, 62992, 'kill_snd_illithid_attack', 57000), + (21071, 62993, 'kill_snd_illithid_attack01', 57000), + (21072, 62994, 'kill_snd_illithid_attack02', 57000), + (21073, 62995, 'kill_snd_illithid_attack03', 57000), + (21074, 62996, 'kill_snd_illithid_cast01', 57000), + (21075, 62997, 'kill_snd_illithid_cast02', 57000), + (21076, 62998, 'kill_snd_illithid_cast03', 57000), + (21077, 62999, 'kill_snd_illithid_cast04', 57000), + (21078, 63000, 'kill_snd_illithid_combat_enter', 57000), + (21079, 63001, 'kill_snd_illithid_dead_enter', 57000), + (21080, 63002, 'kill_snd_illithid_knockedtoback', 57000), + (21081, 63003, 'kill_snd_illithid_knockedtoback_getup', 57000), + (21082, 63004, 'kill_snd_illithid_ouch_down', 57000), + (21083, 63005, 'kill_snd_illithid_ouch_forehand', 57000), + (21084, 63006, 'kill_snd_illithid_ouch_thrust', 57000), + (21085, 63007, 'kill_snd_illithid_whirling_attack', 57000), + (21086, 63008, 'kill_snd_illithid_wild_swing', 57000), + (21087, 63009, 'kill_snd_dodge_whoosh', 57000), + (21088, 63020, 'kill_design_feargate_portal', 57000), + (21089, 63033, 'kill_othmir_zom_att_vox', 57000), + (21090, 63058, 'kill_snd_othmir_zom_feed', 57000), + (21091, 63059, 'kill_snd_othmir_zom_sleep_exit', 57000), + (21092, 63077, 'kill_sound_othmir_cast1', 57000), + (21093, 63114, 'kill_snd_othmir_zom_ouch', 57000), + (21094, 63125, 'kill_idle_frightened', 57000), + (21095, 63176, 'kill_zen_enter', 57000), + (21096, 63177, 'kill_zen_exit', 57000), + (21097, 63178, 'kill_zen_idle', 57000), + (21098, 63185, 'kill_cast_frog_spit_fx', 57000), + (21099, 63196, 'kill_design_ballista_fire_green', 57000), + (21100, 63197, 'kill_design_ballista_fire_green_drake_hit', 57000), + (21101, 63198, 'kill_design_ballista_load_green', 57000), + (21102, 63201, 'kill_result_ballista_fire_green_p2p', 57000), + (21103, 63226, 'kill_snd_meatbeast_angry', 57000), + (21104, 63227, 'kill_snd_meatbeast_attack', 57000), + (21105, 63228, 'kill_snd_meatbeast_attack01', 57000), + (21106, 63229, 'kill_snd_meatbeast_combat_enter', 57000), + (21107, 63230, 'kill_snd_meatbeast_confused', 57000), + (21108, 63231, 'kill_snd_meatbeast_eat', 57000), + (21109, 63232, 'kill_snd_meatbeast_hungry', 57000), + (21110, 63233, 'kill_snd_meatbeast_ouch', 57000), + (21111, 63234, 'kill_snd_meatbeast_sick', 57000), + (21112, 63235, 'kill_snd_meatbeast_sit', 57000), + (21113, 63236, 'kill_snd_meatbeast_trick', 57000), + (21114, 63243, 'kill_ballista_launch_sound', 57000), + (21115, 63244, 'kill_ballista_load_sound', 57000), + (21116, 63249, 'kill_design_ballista_drake_hit', 57000), + (21117, 63250, 'kill_design_ballista_drake_hit02', 57000), + (21118, 63252, 'kill_launch', 57000), + (21119, 63253, 'kill_launch2', 57000), + (21120, 63254, 'kill_launch3', 57000), + (21121, 63255, 'kill_launch4', 57000), + (21122, 63256, 'kill_launch5', 57000), + (21123, 63296, 'kill_sound_flames', 57000), + (21124, 63303, 'kill_cast_ink_barrier', 57000), + (21125, 63304, 'kill_cast_ink_spray', 57000), + (21126, 63311, 'kill_result_ink_zone', 57000), + (21127, 63345, 'kill_snd_frogboss_attack', 57000), + (21128, 63346, 'kill_snd_frogboss_attack01', 57000), + (21129, 63347, 'kill_snd_frogboss_cast_enter', 57000), + (21130, 63348, 'kill_snd_frogboss_dead_enter', 57000), + (21131, 63349, 'kill_snd_frogboss_ouch', 57000), + (21132, 63356, 'kill_cast_lightning_spray_hands', 57000), + (21133, 63363, 'kill_result_illithid_chain_lightning_bolt_p2p', 57000), + (21134, 63364, 'kill_result_illithid_chain_lightning_p2p', 57000), + (21135, 63389, 'kill_snd_siren_queen_rx_attack', 57000), + (21136, 63390, 'kill_snd_siren_queen_rx_attack01', 57000), + (21137, 63391, 'kill_snd_siren_queen_rx_attack02', 57000), + (21138, 63392, 'kill_snd_siren_queen_rx_attack03', 57000), + (21139, 63393, 'kill_snd_siren_queen_rx_charge_up', 57000), + (21140, 63394, 'kill_snd_siren_queen_rx_combat_enter', 57000), + (21141, 63395, 'kill_snd_siren_queen_rx_dead_enter', 57000), + (21142, 63396, 'kill_snd_siren_queen_rx_knocktoback', 57000), + (21143, 63397, 'kill_snd_siren_queen_rx_knocktoback_getup', 57000), + (21144, 63398, 'kill_snd_siren_queen_rx_knocktoknees', 57000), + (21145, 63399, 'kill_snd_siren_queen_rx_ouch', 57000), + (21146, 63400, 'kill_snd_siren_queen_rx_ouch_backhand', 57000), + (21147, 63401, 'kill_snd_siren_queen_rx_ouch_forehand', 57000), + (21148, 63402, 'kill_snd_siren_queen_rx_shield_shove', 57000), + (21149, 63403, 'kill_snd_siren_queen_rx_whirl_attack', 57000), + (21150, 63404, 'kill_snd_siren_queen_rx_wild_swing', 57000), + (21151, 63415, 'kill_design_ghostly_seafoam', 57000), + (21152, 63416, 'kill_design_othmir_spirit_rise', 57000), + (21153, 63417, 'kill_dirt_fx', 57000), + (21154, 63428, 'kill_design_blast_cage1', 57000), + (21155, 63429, 'kill_design_blast_cage2', 57000), + (21156, 63430, 'kill_design_blast_cage3', 57000), + (21157, 63431, 'kill_design_cage1', 57000), + (21158, 63432, 'kill_design_cage2', 57000), + (21159, 63433, 'kill_design_cage3', 57000), + (21160, 63436, 'kill_result_water_forced_shader_no_sparkle', 57000), + (21161, 63447, 'kill_head1_grow_fx', 57000), + (21162, 63448, 'kill_head1_sever_fx', 57000), + (21163, 63449, 'kill_head1_spurt_fx', 57000), + (21164, 63450, 'kill_head2_grow_fx', 57000), + (21165, 63451, 'kill_head2_sever_fx', 57000), + (21166, 63452, 'kill_head2_spurt_fx', 57000), + (21167, 63453, 'kill_head3_grow_fx', 57000), + (21168, 63454, 'kill_head3_sever_fx', 57000), + (21169, 63455, 'kill_head3_spurt_fx', 57000), + (21170, 63456, 'kill_head4_grow_fx', 57000), + (21171, 63457, 'kill_head4_sever_fx', 57000), + (21172, 63458, 'kill_head4_spurt_fx', 57000), + (21173, 63459, 'kill_head5_grow_fx', 57000), + (21174, 63460, 'kill_head5_sever_fx', 57000), + (21175, 63461, 'kill_head5_spurt_fx', 57000), + (21176, 63462, 'kill_hydra_start', 57000), + (21177, 63488, 'kill_snd_jumpwhoosh', 57000), + (21178, 63490, 'kill_snd_siren_rx_knocktoknees', 57000), + (21179, 63491, 'kill_snd_siren_rx_attack', 57000), + (21180, 63492, 'kill_snd_siren_rx_attack01', 57000), + (21181, 63493, 'kill_snd_siren_rx_attack02', 57000), + (21182, 63494, 'kill_snd_siren_rx_attack03', 57000), + (21183, 63495, 'kill_snd_siren_rx_chargeup', 57000), + (21184, 63496, 'kill_snd_siren_rx_combat_enter', 57000), + (21185, 63497, 'kill_snd_siren_rx_death_enter', 57000), + (21186, 63498, 'kill_snd_siren_rx_dualwield_attack', 57000), + (21187, 63499, 'kill_snd_siren_rx_dualwield_attack01', 57000), + (21188, 63500, 'kill_snd_siren_rx_dualwield_attack02', 57000), + (21189, 63501, 'kill_snd_siren_rx_dualwield_attack03', 57000), + (21190, 63502, 'kill_snd_siren_rx_dualwield_enter', 57000), + (21191, 63503, 'kill_snd_siren_rx_knock_to_back', 57000), + (21192, 63504, 'kill_snd_siren_rx_knock_to_back_getup', 57000), + (21193, 63505, 'kill_snd_siren_rx_ouch', 57000), + (21194, 63506, 'kill_snd_siren_rx_ouch_backhand', 57000), + (21195, 63507, 'kill_snd_siren_rx_ouch_forehand', 57000), + (21196, 63508, 'kill_snd_siren_rx_shieldshove', 57000), + (21197, 63509, 'kill_snd_siren_rx_whirlattack', 57000), + (21198, 63510, 'kill_snd_siren_rx_wildswing', 57000), + (21199, 63517, 'kill_aa_bone_blast', 57000), + (21200, 63518, 'kill_aa_bone_cage', 57000), + (21201, 63525, 'kill__combat_enter', 57000), + (21202, 63526, 'kill__combat_exit', 57000), + (21203, 63527, 'kill_all_dead', 57000), + (21204, 63534, 'kill_bubble_trail_fx', 57000), + (21205, 63540, 'kill_lure_fx', 57000), + (21206, 63547, 'kill__combat_idle01', 57000), + (21207, 63548, 'kill__combat_idle02', 57000), + (21208, 63557, 'kill_cast_shell_note_gather', 57000), + (21209, 63562, 'kill_result_toxic_head_skulls', 57000), + (21210, 63575, 'kill_result_shell_note_charm', 57000), + (21211, 63625, 'kill_tinkered_barrel_mount_backup', 57000), + (21212, 63626, 'kill_tinkered_barrel_mount_fall', 57000), + (21213, 63627, 'kill_tinkered_barrel_mount_fly_backup', 57000), + (21214, 63628, 'kill_tinkered_barrel_mount_fly_climb', 57000), + (21215, 63629, 'kill_tinkered_barrel_mount_fly_dive', 57000), + (21216, 63630, 'kill_tinkered_barrel_mount_fly_down', 57000), + (21217, 63631, 'kill_tinkered_barrel_mount_fly_glide', 57000), + (21218, 63632, 'kill_tinkered_barrel_mount_fly_glide_left', 57000), + (21219, 63633, 'kill_tinkered_barrel_mount_fly_glide_right', 57000), + (21220, 63634, 'kill_tinkered_barrel_mount_fly_idle', 57000), + (21221, 63635, 'kill_tinkered_barrel_mount_fly_run', 57000), + (21222, 63636, 'kill_tinkered_barrel_mount_fly_strafe_left', 57000), + (21223, 63637, 'kill_tinkered_barrel_mount_fly_strafe_right', 57000), + (21224, 63638, 'kill_tinkered_barrel_mount_fly_turn_left', 57000), + (21225, 63639, 'kill_tinkered_barrel_mount_fly_turn_right', 57000), + (21226, 63640, 'kill_tinkered_barrel_mount_fly_up', 57000), + (21227, 63641, 'kill_tinkered_barrel_mount_fly_walk', 57000), + (21228, 63642, 'kill_tinkered_barrel_mount_glide', 57000), + (21229, 63643, 'kill_tinkered_barrel_mount_glide_left', 57000), + (21230, 63644, 'kill_tinkered_barrel_mount_glide_right', 57000), + (21231, 63645, 'kill_tinkered_barrel_mount_idle', 57000), + (21232, 63646, 'kill_tinkered_barrel_mount_jump', 57000), + (21233, 63647, 'kill_tinkered_barrel_mount_land', 57000), + (21234, 63648, 'kill_tinkered_barrel_mount_long_fall', 57000), + (21235, 63649, 'kill_tinkered_barrel_mount_run', 57000), + (21236, 63650, 'kill_tinkered_barrel_mount_turn_left', 57000), + (21237, 63651, 'kill_tinkered_barrel_mount_turn_right', 57000), + (21238, 63652, 'kill_tinkered_barrel_mount_walk', 57000), + (21239, 63659, 'kill_cast_clouds_head_inhale', 57000), + (21240, 63662, 'kill_cast_sonic_shout', 57000), + (21241, 63687, 'kill_snd_fish_angler_attack', 57000), + (21242, 63688, 'kill_snd_fish_angler_attack_01', 57000), + (21243, 63689, 'kill_snd_fish_angler_attack_02', 57000), + (21244, 63690, 'kill_snd_fish_angler_attack_03', 57000), + (21245, 63691, 'kill_snd_fish_angler_cast', 57000), + (21246, 63692, 'kill_snd_fish_angler_charge_up_and_combat_enter', 57000), + (21247, 63693, 'kill_snd_fish_angler_death_enter', 57000), + (21248, 63694, 'kill_snd_fish_angler_dodge_and_dodge_thrust', 57000), + (21249, 63695, 'kill_snd_fish_angler_dodge_backhand', 57000), + (21250, 63696, 'kill_snd_fish_angler_dodge_down', 57000), + (21251, 63697, 'kill_snd_fish_angler_dodge_forehand1', 57000), + (21252, 63698, 'kill_snd_fish_angler_ouch_backhand', 57000), + (21253, 63699, 'kill_snd_fish_angler_ouch_down', 57000), + (21254, 63700, 'kill_snd_fish_angler_ouch_forehand', 57000), + (21255, 63701, 'kill_snd_fish_angler_ouch_thrust', 57000), + (21256, 63702, 'kill_snd_fish_angler_run', 57000), + (21257, 63703, 'kill_snd_fish_angler_walk', 57000), + (21258, 63704, 'kill_snd_fish_angler_whirl_attack', 57000), + (21259, 63705, 'kill_snd_fish_angler_wild_swing', 57000), + (21260, 63718, 'kill_result_fist_counter', 57000), + (21261, 63719, 'kill_result_fist_pound', 57000), + (21262, 63720, 'kill_result_fist_pound_blast', 57000), + (21263, 63744, 'kill_snd_hydra_1h_sword_attack', 57000), + (21264, 63745, 'kill_snd_hydra_1h_sword_attack01', 57000), + (21265, 63746, 'kill_snd_hydra_1h_sword_attack02', 57000), + (21266, 63747, 'kill_snd_hydra_1h_sword_attack03', 57000), + (21267, 63748, 'kill_snd_hydra_1h_sword_idle01', 57000), + (21268, 63749, 'kill_snd_hydra_2h_knocktoback', 57000), + (21269, 63750, 'kill_snd_hydra_2h_knocktoback_getup', 57000), + (21270, 63751, 'kill_snd_hydra_2h_sword_attack', 57000), + (21271, 63752, 'kill_snd_hydra_2h_sword_attack01', 57000), + (21272, 63753, 'kill_snd_hydra_2h_sword_attack02', 57000), + (21273, 63754, 'kill_snd_hydra_2h_sword_attack03', 57000), + (21274, 63755, 'kill_snd_hydra_2h_sword_dead_enter', 57000), + (21275, 63756, 'kill_snd_hydra_2h_sword_enter', 57000), + (21276, 63757, 'kill_snd_hydra_2h_sword_idle01', 57000), + (21277, 63758, 'kill_snd_hydra_4to5_enter', 57000), + (21278, 63759, 'kill_snd_hydra_attack', 57000), + (21279, 63760, 'kill_snd_hydra_attack01', 57000), + (21280, 63761, 'kill_snd_hydra_attack02', 57000), + (21281, 63762, 'kill_snd_hydra_attack03', 57000), + (21282, 63763, 'kill_snd_hydra_cast_01', 57000), + (21283, 63764, 'kill_snd_hydra_cast_02', 57000), + (21284, 63765, 'kill_snd_hydra_cast_03', 57000), + (21285, 63766, 'kill_snd_hydra_cast_04', 57000), + (21286, 63767, 'kill_snd_hydra_cast_05', 57000), + (21287, 63768, 'kill_snd_hydra_combat_idle01', 57000), + (21288, 63769, 'kill_snd_hydra_dual_wield_attack', 57000), + (21289, 63770, 'kill_snd_hydra_dual_wield_attack01', 57000), + (21290, 63771, 'kill_snd_hydra_dual_wield_attack02', 57000), + (21291, 63772, 'kill_snd_hydra_dual_wield_attack03', 57000), + (21292, 63773, 'kill_snd_hydra_dual_wield_idle01', 57000), + (21293, 63774, 'kill_snd_hydra_head_one_dead_exit', 57000), + (21294, 63775, 'kill_snd_hydra_head_three_dead_exit', 57000), + (21295, 63776, 'kill_snd_hydra_head_two_dead_exit', 57000), + (21296, 63777, 'kill_snd_hydra_head_zero_dead_exit', 57000), + (21297, 63778, 'kill_snd_hydra_pike_attack', 57000), + (21298, 63779, 'kill_snd_hydra_pike_attack01', 57000), + (21299, 63780, 'kill_snd_hydra_pike_attack02', 57000), + (21300, 63781, 'kill_snd_hydra_pike_attack03', 57000), + (21301, 63782, 'kill_snd_hydra_pike_idle01', 57000), + (21302, 63789, 'kill_acid_blast_fx', 57000), + (21303, 63790, 'kill_cast_acid_spit_fx', 57000), + (21304, 63791, 'kill_cast_acid_spray', 57000), + (21305, 63792, 'kill_cast_fang_fx', 57000), + (21306, 63795, 'kill_cast_water_spouts', 57000), + (21307, 63798, 'kill_head1_cauterize_fx', 57000), + (21308, 63799, 'kill_head2_cauterize_fx', 57000), + (21309, 63800, 'kill_head3_cauterize_fx', 57000), + (21310, 63801, 'kill_head4_cauterize_fx', 57000), + (21311, 63802, 'kill_head5_cauterize_fx', 57000), + (21312, 63813, 'kill_design_blue_pool', 57000), + (21313, 63814, 'kill_design_red_pool', 57000), + (21314, 63815, 'kill_design_yellow_pool', 57000), + (21315, 63877, 'kill_trdskl_othmir_tusk_staff', 57000), + (21316, 63909, 'kill_snd_dragon_made_golem_jump', 57000), + (21317, 63910, 'kill_snd_dragon_made_golem_attack_01', 57000), + (21318, 63911, 'kill_snd_dragon_made_golem_attack_02', 57000), + (21319, 63912, 'kill_snd_dragon_made_golem_attack_03', 57000), + (21320, 63913, 'kill_snd_dragon_made_golem_cast_01', 57000), + (21321, 63914, 'kill_snd_dragon_made_golem_cast_02', 57000), + (21322, 63915, 'kill_snd_dragon_made_golem_combat_enter', 57000), + (21323, 63916, 'kill_snd_dragon_made_golem_combat_exit', 57000), + (21324, 63917, 'kill_snd_dragon_made_golem_combat_idle_01', 57000), + (21325, 63918, 'kill_snd_dragon_made_golem_combat_idle_02', 57000), + (21326, 63919, 'kill_snd_dragon_made_golem_death_enter', 57000), + (21327, 63920, 'kill_snd_dragon_made_golem_death_exit', 57000), + (21328, 63921, 'kill_snd_dragon_made_golem_ouch_backhand', 57000), + (21329, 63922, 'kill_snd_dragon_made_golem_ouch_down', 57000), + (21330, 63923, 'kill_snd_dragon_made_golem_ouch_forehand', 57000), + (21331, 63924, 'kill_snd_dragon_made_golem_ouch_thrust', 57000), + (21332, 63925, 'kill_snd_dragon_made_golem_pile_driver', 57000), + (21333, 63926, 'kill_snd_dragon_made_golem_shield_shove', 57000), + (21334, 63927, 'kill_snd_dragon_made_golem_whirl_attack', 57000), + (21335, 63938, 'kill_design_barrier_active', 57000), + (21336, 63949, 'kill_design_meditate_fx', 57000), + (21337, 63960, 'kill_ethereal_construct_idle_base', 57000), + (21338, 63961, 'kill_ethereal_construct_attack', 57000), + (21339, 63962, 'kill_ethereal_construct_attack_01', 57000), + (21340, 63963, 'kill_ethereal_construct_attack_02', 57000), + (21341, 63964, 'kill_ethereal_construct_attack_03', 57000), + (21342, 63965, 'kill_ethereal_construct_death_enter', 57000), + (21343, 63966, 'kill_ethereal_construct_deffensive_buff', 57000), + (21344, 63967, 'kill_ethereal_construct_fist_catch', 57000), + (21345, 63968, 'kill_ethereal_construct_footsteps', 57000), + (21346, 63969, 'kill_ethereal_construct_idle_01', 57000), + (21347, 63970, 'kill_ethereal_construct_idle_02', 57000), + (21348, 63971, 'kill_ethereal_construct_offensive_buff', 57000), + (21349, 63972, 'kill_ethereal_construct_ouch', 57000), + (21350, 63973, 'kill_ethereal_construct_ouch_backhand', 57000), + (21351, 63974, 'kill_ethereal_construct_ouch_down', 57000), + (21352, 63975, 'kill_ethereal_construct_ouch_knock_back', 57000), + (21353, 63976, 'kill_ethereal_construct_ouch_knock_back_get_up', 57000), + (21354, 63977, 'kill_ethereal_construct_sit_enter', 57000), + (21355, 63978, 'kill_ethereal_construct_sit_exit', 57000), + (21356, 63979, 'kill_ethereal_construct_weapon_attack_01', 57000), + (21357, 63980, 'kill_ethereal_construct_weapon_attack_03', 57000), + (21358, 63981, 'kill_ethereal_construct_weapon_combat_enter', 57000), + (21359, 63982, 'kill_ethereal_construct_weapon_combat_exit', 57000), + (21360, 63983, 'kill_ethereal_construct_weapon_death_enter', 57000), + (21361, 63984, 'kill_ethereal_construct_weapon_super_buff', 57000), + (21362, 63985, 'kill_ethereal_construct_wild_swing', 57000), + (21363, 63992, 'kill_cast_assassin_mythical_fx', 57000), + (21364, 63993, 'kill_cast_beastlord_mythical_fx', 57000), + (21365, 63994, 'kill_cast_berserker_mythical_fx', 57000), + (21366, 63995, 'kill_cast_brigand_mythical_fx', 57000), + (21367, 63996, 'kill_cast_bruiser_mythical_fx', 57000), + (21368, 63997, 'kill_cast_coercer_mythical_fx', 57000), + (21369, 63998, 'kill_cast_conjuror_mythical_fx', 57000), + (21370, 63999, 'kill_cast_defiler_mythical_fx', 57000), + (21371, 64000, 'kill_cast_dirge_mythical_fx', 57000), + (21372, 64001, 'kill_cast_fury_mythical_fx', 57000), + (21373, 64002, 'kill_cast_guardian_mythical_fx', 57000), + (21374, 64003, 'kill_cast_illusionist_mythical_fx', 57000), + (21375, 64004, 'kill_cast_inquisitor_mythical_fx', 57000), + (21376, 64005, 'kill_cast_monk_mythical_fx', 57000), + (21377, 64006, 'kill_cast_mystic_mythical_fx', 57000), + (21378, 64007, 'kill_cast_necromancer_mythical_fx', 57000), + (21379, 64008, 'kill_cast_paladin_mythical_fx', 57000), + (21380, 64011, 'kill_cast_ranger_mythical_fx', 57000), + (21381, 64012, 'kill_cast_shadowknight_mythical_fx', 57000), + (21382, 64013, 'kill_cast_swashbuckler_mythical_fx', 57000), + (21383, 64014, 'kill_cast_templar_mythical_fx', 57000), + (21384, 64015, 'kill_cast_troubador_mythical_fx', 57000), + (21385, 64016, 'kill_cast_warden_mythical_fx', 57000), + (21386, 64017, 'kill_cast_warlock_mythical_fx', 57000), + (21387, 64018, 'kill_cast_wizard_mythical_fx', 57000), + (21388, 64029, 'kill_design_undead_ward', 57000), + (21389, 64036, 'kill_aa_holy_circle_summon', 57000), + (21390, 64047, 'kill_cursed_nayad_attack', 57000), + (21391, 64048, 'kill_cursed_nayad_death', 57000), + (21392, 64049, 'kill_cursed_nayad_take_damage', 57000), + (21393, 64056, 'kill_cast_flame_emblem', 57000), + (21394, 64057, 'kill_cast_flame_punchdown', 57000), + (21395, 64058, 'kill_cast_flaming_sun_beams', 57000), + (21396, 64059, 'kill_cast_hand_fireball', 57000), + (21397, 64062, 'kill_cast_sun_sphere', 57000), + (21398, 64063, 'kill_cast_weapon_flames_bottom', 57000), + (21399, 64064, 'kill_cast_weapon_flames_top', 57000), + (21400, 64067, 'kill_design_sol_ro_perimiter', 57000), + (21401, 64071, 'kill_result_solusek_nuke_blast', 57000), + (21402, 64082, 'kill_design_sol_ro_perimeter', 57000), + (21403, 64083, 'kill_dontuse__ouch', 57000), + (21404, 64084, 'kill_dontuse_dodge_backhand', 57000), + (21405, 64085, 'kill_dontuse_dodge_down', 57000), + (21406, 64086, 'kill_dontuse_dodge_forehand', 57000), + (21407, 64087, 'kill_dontuse_dodge_thrust', 57000), + (21408, 64088, 'kill_dontuse_fly_enter', 57000), + (21409, 64089, 'kill_dontuse_habitat01', 57000), + (21410, 64090, 'kill_dontuse_habitat02', 57000), + (21411, 64091, 'kill_dontuse_habitat03', 57000), + (21412, 64092, 'kill_dontuse_idle03', 57000), + (21413, 64093, 'kill_dontuse_knockeddowntoknees', 57000), + (21414, 64094, 'kill_dontuse_ouch_backhand', 57000), + (21415, 64095, 'kill_dontuse_ouch_down', 57000), + (21416, 64096, 'kill_dontuse_ouch_forehand', 57000), + (21417, 64097, 'kill_dontuse_ouch_thrust', 57000), + (21418, 64098, 'kill_dontuse_swim_backup', 57000), + (21419, 64099, 'kill_dontuse_swim_idle', 57000), + (21420, 64100, 'kill_dontuse_swim_run', 57000), + (21421, 64101, 'kill_dontuse_swim_walk', 57000), + (21422, 64104, 'kill_lizardkin_1h_sword_attack', 57000), + (21423, 64105, 'kill_lizardkin_1h_sword_attack_01', 57000), + (21424, 64106, 'kill_lizardkin_1h_sword_attack_02', 57000), + (21425, 64107, 'kill_lizardkin_1h_sword_attack_03', 57000), + (21426, 64108, 'kill_lizardkin_1h_sword_enter', 57000), + (21427, 64109, 'kill_lizardkin_bow_attack', 57000), + (21428, 64110, 'kill_lizardkin_bow_enter', 57000), + (21429, 64111, 'kill_lizardkin_bow_exit', 57000), + (21430, 64112, 'kill_lizardkin_cast', 57000), + (21431, 64113, 'kill_lizardkin_charge_up', 57000), + (21432, 64114, 'kill_lizardkin_death_enter', 57000), + (21433, 64115, 'kill_lizardkin_dodge_backhand', 57000), + (21434, 64116, 'kill_lizardkin_dodge_down', 57000), + (21435, 64117, 'kill_lizardkin_dodge_forehand', 57000), + (21436, 64118, 'kill_lizardkin_dodge_thrust', 57000), + (21437, 64119, 'kill_lizardkin_footstep', 57000), + (21438, 64120, 'kill_lizardkin_get_up', 57000), + (21439, 64121, 'kill_lizardkin_jump', 57000), + (21440, 64122, 'kill_lizardkin_knockback_get_up', 57000), + (21441, 64123, 'kill_lizardkin_ouch', 57000), + (21442, 64124, 'kill_lizardkin_ouch_backhand', 57000), + (21443, 64125, 'kill_lizardkin_ouch_down', 57000), + (21444, 64126, 'kill_lizardkin_ouch_forehand', 57000), + (21445, 64127, 'kill_lizardkin_sit_enter', 57000), + (21446, 64128, 'kill_lizardkin_sit_exit', 57000), + (21447, 64129, 'kill_lizardkin_sword_exit', 57000), + (21448, 64130, 'kill_lizardkin_whirl_attack', 57000), + (21449, 64131, 'kill_lizardkin_wildswing', 57000), + (21450, 64145, 'kill_puppeteer_enter', 57000), + (21451, 64146, 'kill_puppeteer_idle', 57000), + (21452, 64147, 'kill_puppeter_exit', 57000), + (21453, 64154, 'kill_cast_hand_fireball_blast', 57000), + (21454, 64165, 'kill_design_door_smoke', 57000), + (21455, 64166, 'kill_design_plasma_barrier', 57000), + (21456, 64170, 'kill_puppeteer_exit', 57000), + (21457, 64184, 'kill_result_solusek_sun_beam_blast', 57000), + (21458, 64185, 'kill_ro_death_portal', 57000), + (21459, 64186, 'kill_ro_sun_beam', 57000), + (21460, 64195, 'kill_console_dead', 57000), + (21461, 64196, 'kill_console_idle', 57000), + (21462, 64197, 'kill_console_ouch', 57000), + (21463, 64207, 'kill_crash', 57000), + (21464, 64209, 'kill_dead_idle', 57000), + (21465, 64211, 'kill_fly_dodge01', 57000), + (21466, 64212, 'kill_fly_trans_left', 57000), + (21467, 64265, 'kill_test', 57000), + (21468, 64272, 'kill_cannon_fire_blast_aoe', 57000), + (21469, 64319, 'kill_solusek_death_enter', 57000), + (21470, 64320, 'kill_solusek_ro_attack', 57000), + (21471, 64321, 'kill_solusek_ro_attack_01', 57000), + (21472, 64322, 'kill_solusek_ro_attack_02', 57000), + (21473, 64323, 'kill_solusek_ro_attack_03', 57000), + (21474, 64324, 'kill_solusek_ro_cast', 57000), + (21475, 64325, 'kill_solusek_ro_cast_04', 57000), + (21476, 64326, 'kill_solusek_ro_cast_09', 57000), + (21477, 64327, 'kill_solusek_ro_charge_up', 57000), + (21478, 64328, 'kill_solusek_ro_combat_enter', 57000), + (21479, 64329, 'kill_solusek_ro_combat_exit', 57000), + (21480, 64330, 'kill_solusek_ro_foot_steps', 57000), + (21481, 64331, 'kill_solusek_ro_jump', 57000), + (21482, 64332, 'kill_solusek_ro_ouch', 57000), + (21483, 64333, 'kill_solusek_ro_shield_shove', 57000), + (21484, 64334, 'kill_solusek_ro_whirl_attack', 57000), + (21485, 64335, 'kill_solusek_ro_wild_swing', 57000), + (21486, 64349, 'kill_scene_04', 57000), + (21487, 64350, 'kill_scene_09', 57000), + (21488, 64351, 'kill_scene_10', 57000), + (21489, 64365, 'kill_scene04', 57000), + (21490, 64366, 'kill_scene09', 57000), + (21491, 64367, 'kill_scene10', 57000), + (21492, 64379, 'kill_fly_left', 57000), + (21493, 64382, 'kill_scene02', 57000), + (21494, 64383, 'kill_scene05', 57000), + (21495, 64384, 'kill_scene07', 57000), + (21496, 64385, 'kill_scene08_flycircle', 57000), + (21497, 64386, 'kill_scene08_flyenter', 57000), + (21498, 64387, 'kill_scene08_flyidle', 57000), + (21499, 64401, 'kill_scene02_intro', 57000), + (21500, 64402, 'kill_scene04_roar', 57000), + (21501, 64403, 'kill_scene06_flyleft', 57000), + (21502, 64404, 'kill_scene08_flyexit', 57000), + (21503, 64405, 'kill_scene09_flyover', 57000), + (21504, 64419, 'kill_scene08_long', 57000), + (21505, 64428, 'kill_cast_prism_breath', 57000), + (21506, 64434, 'kill_scene08_long_alt', 57000), + (21507, 64441, 'kill_cast_icy_breath', 57000), + (21508, 64448, 'kill_cast_fighter_aa_reassignment_fx', 57000), + (21509, 64449, 'kill_cast_mage_aa_reassignment_fx', 57000), + (21510, 64452, 'kill_cast_priest_aa_reassignment_fx', 57000), + (21511, 64453, 'kill_cast_scout_aa_reassignment_fx', 57000), + (21512, 64459, 'kill_scene02_spawn', 57000), + (21513, 64460, 'kill_scene09_crash', 57000), + (21514, 64475, 'kill_sit_talking_idle', 57000), + (21515, 64525, 'kill_trdskl_scribing01_snd', 57000), + (21516, 64526, 'kill_trdskl_scribing02_snd', 57000), + (21517, 64527, 'kill_trdskl_scribing03_snd', 57000), + (21518, 64528, 'kill_trdskl_scribing04_snd', 57000), + (21519, 64539, 'kill_design_light', 57000), + (21520, 64543, 'kill_scene02_shout', 57000), + (21521, 64557, 'kill_result_tear_of_veeshan_channeling_p2p', 57000), + (21522, 64566, 'kill_cast_tear_shout', 57000), + (21523, 64569, 'kill_design_tear_energy_gather', 57000), + (21524, 64570, 'kill_design_tear_energy_release', 57000), + (21525, 64574, 'kill_result_explode_up', 57000), + (21526, 64575, 'kill_result_kerafyrm_tear_runes_p2p', 57000), + (21527, 64576, 'kill_result_tear_blast', 57000), + (21528, 64577, 'kill_result_tear_chain_channeling_p2p', 57000), + (21529, 64578, 'kill_result_veeshan_teleport', 57000), + (21530, 64579, 'kill_scene06_fly_left', 57000), + (21531, 64580, 'kill_scene08_belowground', 57000), + (21532, 64589, 'kill_charge_of_silence', 57000), + (21533, 64592, 'kill_design_dome_of_silence', 57000), + (21534, 64603, 'kill_design_break_chains', 57000), + (21535, 64604, 'kill_design_rock_water_blast', 57000), + (21536, 64607, 'kill_kerafyrm_wingflap_lrg_long', 57000), + (21537, 64608, 'kill_kerafyrm_wingflap_lrg_med', 57000), + (21538, 64609, 'kill_kerafyrm_wingflap_lrg_shor', 57000), + (21539, 64610, 'kill_misst_target_trigger', 57000), + (21540, 64617, 'kill_antonia_soulsuck_hover', 57000), + (21541, 64618, 'kill_antonia_soulsuck_hover_exit', 57000), + (21542, 64623, 'kill_dontuse_scene06_fly_left', 57000), + (21543, 64624, 'kill_dontuse_scene06_flyleft', 57000), + (21544, 64625, 'kill_dontuse_scene08_flycircle', 57000), + (21545, 64626, 'kill_dontuse_scene08_flyenter', 57000), + (21546, 64627, 'kill_dontuse_scene08_flyexit', 57000), + (21547, 64628, 'kill_dontuse_scene08_flyidle', 57000), + (21548, 64671, 'kill_snd_yelinak_wing_flaps', 57000), + (21549, 64683, 'kill_unforl', 57000), + (21550, 64690, 'kill_cast_hand_fx_in', 57000), + (21551, 64698, 'kill_result_chest_flare', 57000), + (21552, 64699, 'kill_result_lucan_essense_suck_p2p', 57000), + (21553, 64700, 'kill_result_veeshan_tear_energy_absorb_p2p', 57000), + (21554, 64740, 'kill_soulsuck_exit', 57000), + (21555, 64753, 'kill_kerafyrm_bite', 57000), + (21556, 64754, 'kill_kerafyrm_firebreath', 57000), + (21557, 64755, 'kill_kerafyrm_foley_intro', 57000), + (21558, 64756, 'kill_kerafyrm_foley_roar', 57000), + (21559, 64757, 'kill_kerafyrm_vox_flyover', 57000), + (21560, 64758, 'kill_kerafyrm_vox_idlebreath', 57000), + (21561, 64759, 'kill_kerafyrm_vox_intro', 57000), + (21562, 64760, 'kill_kerafyrm_vox_roar', 57000), + (21563, 64761, 'kill_kerafyrm_wing_by', 57000), + (21564, 64762, 'kill_kerafyrm_wing_by_long', 57000), + (21565, 64764, 'kill_scene02_enter_convo', 57000), + (21566, 64765, 'kill_scene02_look_convo', 57000), + (21567, 64805, 'kill_snd_yelinak_breath', 57000), + (21568, 64806, 'kill_snd_yelinak_crash_impact', 57000), + (21569, 64807, 'kill_snd_yelinak_roar_01', 57000), + (21570, 64808, 'kill_snd_yelinak_wing_by', 57000), + (21571, 64809, 'kill_snd_yelinak_wing_by_long', 57000), + (21572, 64816, 'kill_blast_rune_ring', 57000), + (21573, 64821, 'kill_design_ring_black', 57000), + (21574, 64822, 'kill_design_ring_blue', 57000), + (21575, 64823, 'kill_design_ring_green', 57000), + (21576, 64824, 'kill_design_ring_orange', 57000), + (21577, 64825, 'kill_design_ring_purple', 57000), + (21578, 64826, 'kill_design_ring_red', 57000), + (21579, 64827, 'kill_design_ring_yellow', 57000), + (21580, 64842, 'kill_skull_attack_fx', 57000), + (21581, 64892, 'kill_tiered_truespirit_arrow_barrage', 57000), + (21582, 64899, 'kill_cast_assassin', 57000), + (21583, 64900, 'kill_cast_beastlord', 57000), + (21584, 64901, 'kill_cast_berserker', 57000), + (21585, 64902, 'kill_cast_brigand', 57000), + (21586, 64903, 'kill_cast_bruiser', 57000), + (21587, 64904, 'kill_cast_channeler', 57000), + (21588, 64905, 'kill_cast_guardian', 57000), + (21589, 64906, 'kill_cast_monk', 57000), + (21590, 64909, 'kill_cast_ranger', 57000), + (21591, 64910, 'kill_cast_swashbuckler', 57000), + (21592, 64966, 'kill_tiered_essence_channel_p2p', 57000), + (21593, 64967, 'kill_tiered_eye_arrow_p2p', 57000), + (21594, 64974, 'kill_bubbles_fx', 57000), + (21595, 65006, 'kill_snd_idle01', 57000), + (21596, 65007, 'kill_snd_idle02', 57000), + (21597, 65017, 'kill_snd_trick01', 57000), + (21598, 65018, 'kill_snd_trick02', 57000), + (21599, 65036, 'kill_tiered_heal_arrow_blast', 57000), + (21600, 65037, 'kill_trick01', 57000), + (21601, 65038, 'kill_trick02', 57000), + (21602, 65039, 'kill_unfurl', 57000), + (21603, 65046, 'kill_cast_conduit_input', 57000), + (21604, 65054, 'kill_result_conduit_p2p', 57000), + (21605, 65055, 'kill_result_sword_cyclone', 57000), + (21606, 65068, 'kill_kerafyrm_vox_shout_01', 57000), + (21607, 65069, 'kill_kerafyrm_vox_shout_roar_01', 57000), + (21608, 65070, 'kill_kerafyrm_vox_shout_roar_02', 57000), + (21609, 65072, 'kill_result_chains_barrier', 57000), + (21610, 65073, 'kill_result_conduit_chain_p2p', 57000), + (21611, 65074, 'kill_result_dissonance_barrier', 57000), + (21612, 65075, 'kill_result_healing_wisps', 57000), + (21613, 65082, 'kill_aa_shield_barrier_buff', 57000), + (21614, 65087, 'kill_design_boiling_flames_warning', 57000), + (21615, 65091, 'kill_result_heal_ball_p2p', 57000), + (21616, 65092, 'kill_result_ring_flare', 57000), + (21617, 65093, 'kill_result_stone_copy_shield', 57000), + (21618, 65094, 'kill_result_weaving_wisp', 57000), + (21619, 65108, 'kill_result_bubble_sphere_prism', 57000), + (21620, 65109, 'kill_result_spirits_blast_out_dark', 57000), + (21621, 65116, 'kill_aa_shield_barrier_heal', 57000), + (21622, 65124, 'kill_result_poison_spiral_ball_p2p', 57000), + (21623, 65125, 'kill_result_weaving2_wisp', 57000), + (21624, 65137, 'kill_idle_360', 57000), + (21625, 65140, 'kill_result_quickened_heal', 57000), + (21626, 65141, 'kill_1h_sword_attack_01', 57000), + (21627, 65142, 'kill_1h_sword_attack_02', 57000), + (21628, 65143, 'kill_1h_sword_attack_03', 57000), + (21629, 65144, 'kill_1h_sword_combat_buff', 57000), + (21630, 65145, 'kill_1h_sword_combat_idle', 57000), + (21631, 65146, 'kill_1h_sword_death', 57000), + (21632, 65147, 'kill_1h_sword_idle_fidget_01', 57000), + (21633, 65148, 'kill_1h_sword_idle_fidget_02', 57000), + (21634, 65149, 'kill_1h_sword_turn_left', 57000), + (21635, 65150, 'kill_2h_sword_ground_attack_01', 57000), + (21636, 65151, 'kill_2h_sword_ground_attack_02', 57000), + (21637, 65152, 'kill_2h_sword_ground_combat_buff', 57000), + (21638, 65153, 'kill_2h_sword_ground_death', 57000), + (21639, 65154, 'kill_2h_sword_ground_dodge_backhand', 57000), + (21640, 65155, 'kill_2h_sword_ground_dodge_down', 57000), + (21641, 65156, 'kill_2h_sword_ground_dodge_forehand', 57000), + (21642, 65157, 'kill_2h_sword_ground_dodge_thrust', 57000), + (21643, 65158, 'kill_2h_sword_ground_idle', 57000), + (21644, 65159, 'kill_2h_sword_ground_idle_fidget', 57000), + (21645, 65160, 'kill_2h_sword_ground_ouch_backhand', 57000), + (21646, 65161, 'kill_2h_sword_ground_ouch_down', 57000), + (21647, 65162, 'kill_2h_sword_ground_ouch_forehand', 57000), + (21648, 65163, 'kill_2h_sword_ground_ouch_thrust', 57000), + (21649, 65170, 'kill_aa_reactive_buff', 57000), + (21650, 65171, 'kill_cast_draining_portal_fx', 57000), + (21651, 65173, 'kill_cast_portal_energy_release', 57000), + (21652, 65180, 'kill_result_drain_essence_p2p', 57000), + (21653, 65181, 'kill_result_energy_release_death', 57000), + (21654, 65188, 'kill_cast_golem_head_summon', 57000), + (21655, 65196, 'kill_result_golem_head_interception', 57000), + (21656, 65247, 'kill_tiered_spirit_tiger_lounging', 57000), + (21657, 65256, 'kill_clear', 57000), + (21658, 65261, 'kill_miss', 57000), + (21659, 65263, 'kill_result_beetle_barrier_buff', 57000), + (21660, 65264, 'kill_result_oxygen_tunnel', 57000), + (21661, 65315, 'kill_tiered_heal_cone_forward', 57000), + (21662, 65316, 'kill_tiered_root_shield', 57000), + (21663, 65327, 'kill_design_lava_wave', 57000), + (21664, 65328, 'kill_eating_idle', 57000), + (21665, 65382, 'kill_trapped_exit', 57000), + (21666, 65383, 'kill_trapped_idle', 57000), + (21667, 65397, 'kill_result_shadow_bind', 57000), + (21668, 65408, 'kill_design_zone_blast_fx', 57000), + (21669, 65462, 'kill_vulakk_breathe_fire', 57000), + (21670, 65469, 'kill_cast_heal_ball_gather', 57000); +INSERT INTO `table_versions` (`name`,`version`,`download_version`) values ('visual_states',1,0); +UPDATE `table_versions` SET `download_version`=1 WHERE `name`='visual_states'; +DROP TABLE IF EXISTS `zones`; +CREATE TABLE IF NOT EXISTS `zones` ( + `id` int(11) unsigned NOT NULL AUTO_INCREMENT, + `expansion_id` tinyint(3) unsigned NOT NULL DEFAULT '0', + `name` varchar(64) COLLATE latin1_general_ci NOT NULL DEFAULT '', + `file` varchar(64) COLLATE latin1_general_ci NOT NULL DEFAULT '', + `description` varchar(255) COLLATE latin1_general_ci NOT NULL DEFAULT 'Describe me in the zones table! :)', + `safe_x` float NOT NULL DEFAULT '0', + `safe_y` float NOT NULL DEFAULT '0', + `safe_z` float NOT NULL DEFAULT '0', + `safe_heading` float NOT NULL DEFAULT '0', + `underworld` float NOT NULL DEFAULT '-1000000', + `xp_modifier` float NOT NULL DEFAULT '0', + `min_recommended` tinyint(3) unsigned NOT NULL DEFAULT '0', + `max_recommended` tinyint(3) unsigned NOT NULL DEFAULT '0', + `zone_type` varchar(64) COLLATE latin1_general_ci DEFAULT '', + `always_loaded` tinyint(3) unsigned NOT NULL DEFAULT '0', + `city_zone` tinyint(3) unsigned NOT NULL DEFAULT '0', + `weather_allowed` tinyint(3) unsigned NOT NULL DEFAULT '0', + `min_status` int(10) NOT NULL DEFAULT '0', + `min_level` int(10) NOT NULL DEFAULT '0', + `max_level` int(10) NOT NULL DEFAULT '0', + `start_zone` tinyint(3) NOT NULL DEFAULT '0', + `instance_type` enum('NONE','GROUP_LOCKOUT_INSTANCE','GROUP_PERSIST_INSTANCE','RAID_LOCKOUT_INSTANCE','RAID_PERSIST_INSTANCE','SOLO_LOCKOUT_INSTANCE','SOLO_PERSIST_INSTANCE','TRADESKILL_INSTANCE','PUBLIC_INSTANCE','PERSONAL_HOUSE_INSTANCE','GUILD_HOUSE_INSTANCE','QUEST_INSTANCE') COLLATE latin1_general_ci NOT NULL DEFAULT 'NONE', + `default_reenter_time` int(10) unsigned NOT NULL DEFAULT '0', + `default_reset_time` int(10) unsigned NOT NULL DEFAULT '0', + `default_lockout_time` int(10) unsigned NOT NULL DEFAULT '0', + `force_group_to_zone` smallint(5) unsigned NOT NULL DEFAULT '0', + `lua_script` varchar(255) COLLATE latin1_general_ci DEFAULT '', + `shutdown_timer` int(10) unsigned NOT NULL DEFAULT '300' COMMENT 'In seconds', + `zone_motd` varchar(250) COLLATE latin1_general_ci DEFAULT '', + `ruleset_id` int(10) unsigned NOT NULL DEFAULT '0', + `login_checksum` int(10) unsigned NOT NULL DEFAULT '0', + PRIMARY KEY (`id`), + UNIQUE KEY `ZoneNameIDX` (`name`), + KEY `ZoneDescIDX` (`description`), + KEY `ZoneFileIDX` (`file`) +) ENGINE=InnoDB AUTO_INCREMENT=814 DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci; +INSERT INTO `zones` (`id`, `expansion_id`, `name`, `file`, `description`, `safe_x`, `safe_y`, `safe_z`, `safe_heading`, `underworld`, `xp_modifier`, `min_recommended`, `max_recommended`, `zone_type`, `always_loaded`, `city_zone`, `weather_allowed`, `min_status`, `min_level`, `max_level`, `start_zone`, `instance_type`, `default_reenter_time`, `default_reset_time`, `default_lockout_time`, `force_group_to_zone`, `lua_script`, `shutdown_timer`, `zone_motd`, `ruleset_id`, `login_checksum`) VALUES + (1, 50, 'GMHall', 'qey_guildhall_tier3', 'GM Hall', 665.435, -35.8975, 1485.44, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 10, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 2968162667), + (2, 0, 'Splitpaw1', 'adv02_dun_sundered_splitpaw', 'Sundered Splitpaw: Alone in the Dark', 0, -2.5, 0, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 2642218879), + (3, 0, 'SplitpawDen', 'adv02_dun_sundered_splitpaw_hub', 'Sundered Splitpaw: Splitpaw Den ', 7.13, -69.56, -311.04, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 2078270933), + (4, 0, 'CrustaceanCave', 'adv04_crab_cave', 'Cavern of the Crustaceans', 0, -0.01, 0, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 1437304064), + (5, 0, 'XuxlaiosRoost', 'adv04_dun_bird_cage', 'Xux\'laio\'s Roost', 0, -1.28, -20.77, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 1679741196), + (6, 0, 'Antechamber', 'adv04_dun_drgn_temple', 'Antechamber of Fate', -11.35, 0.4, -34, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 3992515775), + (7, 0, 'ForsakenCity', 'adv04_dun_endless', 'The Forsaken City', -33.7, -89.42, 24.8, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 587354683), + (8, 0, 'SepulcherZanFi', 'adv04_dun_temple', 'The Sepulcher of Zan Fi', -1, 0.7, 5, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 3635271022), + (9, 0, 'MysticLake', 'adv04_rgn_mystic_lake', 'The Mystic Lake ', 151.74, -32.94, 34.7, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 3461788758), + (10, 0, 'VillageShin', 'adv04_rgn_village', 'The Village of Shin ', -17.6, -2.38, 129.6, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 2336498437), + (11, 0, 'TrialBoFen', 'adv04_tower_cave', 'Trial of Bo Fen', -13.4, 0, -2.11, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 4038375427), + (12, 0, 'antonica', 'antonica', 'Antonica', 436.2, -37.5, 819.56, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, 'ZoneScripts/antonica.lua', 300, '', 0, 2242566679), + (13, 0, 'ShatteredVale1', 'antonica_epic01_vale', 'The Shattered Vale ', -2526.79, 15.67, -50.07, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 3880090772), + (14, 0, 'Firemyst1', 'antonica_epic02_firemyst', 'Firemyst Gully: A Foul Wind', -1093.72, -25.04, 686.59, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 1313197908), + (15, 0, 'Stormhold', 'befallen', 'Stormhold', -30, 23, 43, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 3163675467), + (16, 0, 'TombValor1', 'befallen_epic01', 'The Tomb of Valor', -4.74, -45.79, -47.64, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 330791385), + (17, 0, 'Blackburrow', 'blackburrow', 'Blackburrow', 76.2, -2.28, 20.77, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 418741681), + (18, 0, 'MaidMist', 'boat_06p_enchanted', 'The Maid for the Mist', 2.14, 1.21, -15.81, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 3294470509), + (19, 0, 'FangedSea', 'boat_06p_everfrost', 'The Fanged Sea', 2.14, 1.21, -15.81, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 3400822130), + (20, 0, 'LMSIntruder', 'boat_06p_feerrott', 'The LMS Intruder', 2.14, 1.21, -15.81, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 2766328670), + (21, 0, 'JourneyFreeport', 'boat_06p_freeport', 'Journey to Freeport', 2.14, 1.21, -15.81, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 1691559112), + (22, 0, 'SmarmySprocket', 'boat_06p_hold_of_prexus', 'Aboard the Smarmy Sprocket', 2.14, 1.21, -15.81, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 3493494422), + (23, 0, 'BurningCauldron', 'boat_06p_lavastorm', 'The Burning Cauldron', 2.14, 1.21, -15.81, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 85224425), + (24, 0, 'PrizePrexus', 'boat_06p_orcishwastes', 'The Prize of Prexus', 2.14, 1.21, -15.81, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 687197178), + (25, 0, 'JourneyQeynos', 'boat_06p_qeynos', 'Journey to Qeynos', 2.14, 1.21, -15.81, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 1629504455), + (26, 0, 'FarJourneyQeynos', 'boat_06p_tutorial01', 'The Far Journey', 2.14, 1.21, -15.81, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 2933294842), + (27, 0, 'FarJourneyFreeport', 'boat_06p_tutorial02', 'The Far Journey', 2.14, 1.21, -15.81, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 3521329369), + (28, 0, 'CazicThule1', 'cazicthule', 'The Temple of Cazic-Thule', -0.05, 7.89, 154.43, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 953361327), + (29, 0, 'SanctumFear1', 'cazicthule_epic01_sanctum', 'The Sanctum of Fear', -1.02, -10, -178.26, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 2868411969), + (30, 0, 'CharCreation', 'character_create', 'Character Creation Screen', -127, 58.2, -893.6, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 389319796), + (31, 0, 'Bloodskull2', 'cmmn_epic01_orc', 'The Bloodskull Valley: A Noble Confrontation', -9.18, -48.2, 732.4, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 802190119), + (32, 0, 'EternalGorge1', 'cmmn_epic02_mage', 'The Eternal Gorge ', 863.77, -18.31, 581.92, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 3119513962), + (33, 0, 'Commonlands', 'commonlands', 'The Commonlands', -1052.73, -144.95, -682.93, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 3471412372), + (34, 0, 'Darklight', 'darklight_wood', 'Darklight Wood ', -414.24, -63.14, 258.43, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 8, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 1978857252), + (35, 0, 'Deathfist1', 'deathfist', 'Deathfist Citadel', -0.03, 0.5, 55.18, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 2143427729), + (36, 0, 'DrownedCaverns1', 'adv02_dun_drowned_caverns', 'The Drowned Caverns: Arena of Heroes', 95.83, 22.83, 4, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 2606878460), + (37, 1, 'ModelDemo', 'commonlands', 'GM Model Demos', -614.67, -47.53, -239.79, 220, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 1045650867), + (38, 0, 'DraflingTower', 'drafling_tower', 'The Tower of the Drafling', -2.81, 0, -8.2, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 3363951083), + (39, 0, 'EnchantedLands', 'enchanted', 'Enchanted Lands', 242.58, 12.21, -978.47, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, 'ZoneScripts/EnchantedLands.lua', 300, '', 0, 692296008), + (40, 0, 'TangledWeeds', 'enchanted_mini01', 'Cavern of Tangled Weeds', -79.8, -2.63, -1120.98, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 2125525214), + (41, 0, 'Everfrost', 'everfrost', 'Everfrost ', -40.27, -1.5, -1183.8, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 2971640549), + (42, 0, 'Miraguls', 'everfrost_epic01_menagerie', 'Miragul\'s Menagerie', -52.73, -23.55, -319.22, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 2633911975), + (45, 0, 'Haven', 'exile_city', 'Haven ', -50, -82.8, -145.91, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 3194957246), + (46, 10, 'Majdul', 'exp01_cty_majdul', 'Maj\'Dul ', -283.67, 160.6, -147.61, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 247471241), + (47, 10, 'Majdul1Room1', 'exp01_cty_majdul_1r01', 'Maj\'Dul: 1 Room Apartment', 0, 0, 5, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 1297812899), + (48, 10, 'Majdul1Room2', 'exp01_cty_majdul_1r02', 'Maj\'Dul: 1 Room Apartment', 10, 0, 0, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 2829996334), + (49, 10, 'Majdul2Room1', 'exp01_cty_majdul_2r01', 'Maj\'Dul: 2 Rooms Apartment', -10, 0, 0, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 3134471404), + (50, 10, 'Majdul2Room2', 'exp01_cty_majdul_2r02', 'Maj\'Dul: 2 Rooms Apartment', -10, 0, 0, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 4034869404), + (51, 10, 'Majdul3Room1', 'exp01_cty_majdul_3r01', 'Maj\'Dul: 3 Room Residence', -10, 0, 0, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 3517135728), + (52, 10, 'Majdul3Room2', 'exp01_cty_majdul_3r02', 'Maj\'Dul: 3 Room Residence', 10, 0, 0, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 3142330392), + (53, 10, 'Arena', 'exp01_cty_majdul_arena01', 'Maj\'Dul Arena', 0, 10, 70, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 1193689160), + (54, 10, 'Arena2', 'exp01_cty_majdul_arena02', 'The Arena v2', 0, -0.5, 0, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 913624109), + (55, 10, 'CourtBlades', 'exp01_cty_majdul_blades', 'The Court of the Blades', 0, -0.15, 0, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 2914789014), + (56, 10, 'CourtCoin', 'exp01_cty_majdul_coin', 'The Court of the Coin', 0, -0.15, 0, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 4244223063), + (57, 10, 'LibraryLight', 'exp01_cty_majdul_library', 'The Library of Light', 0, -0.2, 0, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 520408650), + (58, 10, 'TowerMoon', 'exp01_cty_majdul_moon', 'The Tower of the Moon', 0, -0.15, 0, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 1392070889), + (59, 10, 'CourtTears', 'exp01_cty_majdul_tears', 'The Court of Tears', 0, -0.22, 0, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 2026106351), + (60, 10, 'CourtTruth', 'exp01_cty_majdul_truth', 'Maj\'Dul: The Court of Truth', 0, -0.15, 0, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 3952194529), + (61, 10, 'CleftsRujark', 'exp01_dun_clefts_of_rujark', 'The Clefts of Rujark', 147.16, -7.76, -90.58, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 4246189845), + (62, 10, 'LivingTombs', 'exp01_dun_living_tombs', 'The Living Tombs', -293.72, 15.23, 291.21, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 1490971066), + (63, 10, 'PedestalSky', 'exp01_dun_pedestal_of_sky', 'Pedestal of Sky', 0, -0.55, 0, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 2258780775), + (64, 10, 'PoetPalace', 'exp01_dun_poets_palace', 'The Poets Palace', -94, 147, 39, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 1460452816), + (65, 10, 'ShimmeringCitadel', 'exp01_dun_shimmering_citadel', 'The Shimmering Citadel', 58.94, 98.3, -129.04, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 3499314672), + (66, 10, 'UnusualBottle', 'exp01_dun_shimmering_citadel_epic01_bottle', 'An Unusual Bottle', 0, -0.01, 0, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 2238196469), + (67, 10, 'DjinnPrism', 'exp01_dun_shimmering_citadel_epic02_prism', 'The Djinn Master\'s Prism', -22, -5, -35, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 3131802491), + (68, 10, 'SilentCity', 'exp01_dun_silent_city', 'The Silent City', 143, 31, 160, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 3364154278), + (69, 10, 'FountainLife', 'exp01_dun_silent_city_epic01_temple', 'The Fountain of Life', 0, -6.71, 22, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 1250120736), + (70, 10, 'PillarsFlame', 'exp01_rgn_pillars_of_flame', 'The Pillars of Flame', 1382, -147, -854, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 464322516), + (71, 10, 'CazelMesa', 'exp01_rgn_pillars_of_flame_epic01_cazel', 'Cazel\'s Mesa', 1.34, -0.12, 5.17, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 2346526326), + (72, 10, 'HallsDiscipline', 'exp01_rgn_pillars_of_flame_epic02_discipline', 'Halls of Discipline', -11, -5.6, -4.5, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 2657155766), + (73, 10, 'SinkingSands', 'exp01_rgn_sinking_sands', 'The Sinking Sands', -1508.64, -214.09, -395.22, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 1641630735), + (74, 10, 'LockjawsLair', 'exp01_rgn_sinking_sands_epic01_lockjaw', 'The Vault of Dust', -10, 8, 0, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 1879067363), + (75, 20, 'Deathtoll', 'exp02_dun_dragon_necropolis', 'Deathtoll', -189.17, 126.19, 66.25, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 3628258851), + (76, 20, 'HallsFate', 'exp02_dun_halls_of_fate', 'The Halls of Fate', -0.43, 39.2, -93.4, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 2785872257), + (77, 20, 'Blackscale', 'exp02_dun_halls_of_fate_epic01_sepulcher', 'The Blackscale Sepulcher ', -2.91, 12.54, 0.33, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 3865441725), + (78, 20, 'DenDevourer', 'exp02_dun_halls_of_fate_epic02_devourer', 'The Den of the Devourer ', 1.6, -0.15, 0.03, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 2030006797), + (79, 20, 'SanctumScaleborn', 'exp02_dun_lair_of_scale', 'Sanctum of the Scaleborn', 12, 135, -233, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 695028551), + (80, 20, 'HallsSeeing', 'exp02_dun_lair_of_scale_epic01_seeing', 'Halls of the Seeing', -628.06, 159.68, -234.91, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 2782224465), + (81, 20, 'LyceumAbhorrence', 'exp02_dun_lair_of_scale_epic02_hallowed', 'The Lyceum of Abhorrence', 26.73, 157.56, -571.54, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 984615617), + (82, 20, 'PalaceAwakened', 'exp02_dun_shrines_of_sky', 'Palace of the Awakened', 44, 0, -101, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 2129470810), + (83, 20, 'VaultElArad', 'exp02_dun_shrines_of_sky_epic01_vaults', 'The Vaults of El\'Arad', -30.7, -0.61, 30.62, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 1968164420), + (84, 20, 'NestGreatEgg', 'exp02_dun_shrines_of_sky_epic02_nest', 'The Nest of the Great Egg', 38.48, 112.78, 0.03, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 3466289623), + (85, 20, 'BarrenSky', 'exp02_rgn_realm_of_dawn', 'The Barren Sky', 506.75, -114.37, 10.66, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 4122226678), + (86, 20, 'exp02_rgn_realm_of_dawn_arena', 'exp02_rgn_realm_of_dawn_arena', 'Describe me in the zones table! :)', 0, -2.85, 0, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 1445881603), + (87, 20, 'Bonemire', 'exp02_rgn_realm_of_night', 'The Bonemire', 963.37, -108.17, 469.1, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 2461862690), + (88, 20, 'TenebrousTangle', 'exp02_rgn_realm_of_twilight', 'Tenebrous Tangle', -496.78, -60.1, -853.5, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 3365769829), + (89, 30, 'CastleMistmoore', 'exp03_dun_castle_mistmoore', 'Castle Mistmoore', 81, 43, -4, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 715932856), + (90, 30, 'MistmooreSanctum', 'exp03_dun_castle_mistmoore_epic01_coffinchamber', 'Mistmoore\'s Inner Sanctum', 31.44, -4, 15.69, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 54440071), + (91, 30, 'Crushbone', 'exp03_dun_crushbone_keep', 'Crushbone Keep', 7, -16, -78, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 3963117417), + (92, 30, 'DvinnianThrone', 'exp03_dun_crushbone_keep_epic01_throne', 'The D\'Vinnian Throne', 0.19, -4.31, -26.6, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 480928156), + (93, 30, 'Acadechism', 'exp03_dun_crushbone_keep_epic02_boss', 'The Acadechism ', -0.52, -0.16, -12.01, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 1318370063), + (94, 30, 'Estate of Unrest', 'exp03_dun_estate_of_unrest', 'The Estate of Unrest', 7.91, 0.3, -88.33, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 3225497653), + (95, 30, 'NewTunaria', 'exp03_dun_felwithe', 'New Tunaria', -1038, 55, -1379, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 2465751372), + (96, 30, 'ThroneNewTunaria', 'exp03_dun_felwithe_epic01_throne', 'Throne of New Tunaria', 57, 67, -699, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 2494575554), + (97, 30, 'GrendersLair', 'exp03_dun_hollow_stump', 'The Grender\'s Lair', 0, -0.58, 0, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 3140052190), + (98, 30, 'ChamberTruthbringer', 'exp03_dun_hollow_stump2', 'The Chamber of the Truthbringer', 0, -0.58, 0, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 2495251601), + (99, 30, 'Kaladim', 'exp03_dun_kaladim', 'Kaladim ', 5, -1, -27, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 2172437289), + (100, 30, 'Stormguard', 'exp03_dun_kaladim_stormguard_hall', 'Stormguard Hall', 157, 17.5, -65, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 1517940891), + (101, 30, 'Klakanon', 'exp03_dun_klakanon', 'Klak\'Anon', -347.32, 8.71, -19.23, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 738715765), + (102, 30, 'ClockworkMenace', 'exp03_dun_klakanon_epic01_menace', 'The Clockwork Menace Factory', 132.31, 22.75, -65.73, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 274925249), + (103, 30, 'CourtInnovation', 'exp03_dun_klakanon_epic02_court', 'Court of Innovation', -15.13, 6.83, 81.81, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 2766743326), + (104, 30, 'MistmooreCatacombs', 'exp03_dun_mistmoore_catacombs', 'Mistmoore Catacombs', 12.99, -159.06, -109.25, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 263748089), + (105, 30, 'Freethinkers', 'exp03_dun_mistmoore_catacombs_epic01_freethinker', 'Freethinker Hideout', -17.15, 6.16, -0.51, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 3669200752), + (106, 30, 'CryptValdoon', 'exp03_dun_mistmoore_catacombs_epic02_oldcatacombs', 'Crypt of Valdoon ', 168, 0, 40, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 28333672), + (107, 30, 'ObeliskBlight', 'exp03_dun_obelisk_epic01_blight', 'The Obelisk of Blight ', 129.85, -14.29, 5.85, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 3174147112), + (108, 30, 'Butcherblock', 'exp03_rgn_butcherblock', 'Butcherblock Mountains ', -1065, 90, -389, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 697098529), + (109, 30, 'EmeraldHalls', 'exp03_rgn_emerald_halls', 'The Emerald Halls', -156.06, 4.67, -239.77, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 3392298569), + (110, 30, 'Kelethin1Room', 'exp03_rgn_gf_ph_1room', 'Greater Faydark: 1 Room Apartment', 0, -0.2, 0, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 1645828791), + (111, 30, 'Kelethin2Room', 'exp03_rgn_gf_ph_2room', 'Greater Faydark: 2 Rooms Apartment', 0, -0.1, 0, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 2776941267), + (112, 30, 'Kelethin3Room', 'exp03_rgn_gf_ph_3room', 'Greater Faydark: 3 Rooms Residence', 0, -0.5, 0, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 75565844), + (113, 30, 'Kelethin4Room', 'exp03_rgn_gf_ph_4room', 'Greater Faydark: 4 Rooms Residence', 0, -0.3, 0, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 669090026), + (114, 30, 'GreaterFaydark', 'exp03_rgn_greater_faydark', 'Greater Faydark', -116.83, -43.94, -785.47, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 4, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 1796453226), + (115, 30, 'LesserFaydark', 'exp03_rgn_lesser_faydark', 'The Lesser Faydark ', -717, -55.3, 112.7, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 3327990583), + (116, 30, 'LopingPlains', 'exp03_rgn_loping_plains', 'Loping Plains ', -537, -5, -401, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 1576609597), + (117, 30, 'Steamfont', 'exp03_rgn_steamfont', 'Steamfont Mountains ', -492, 125, 596, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 3355489122), + (118, 30, 'MinesMeldrath', 'exp03_rgn_steamfont_epic01_mines', 'The Mines of Meldrath ', 12.53, -0.6, -4.63, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 3273265723), + (119, 0, 'FallenGate', 'fallengate', 'Fallen Gate ', -19.57, 20, 149.02, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 380935007), + (120, 0, 'VaultFallen2', 'fallengate_epic01_boss', 'The Vault of the Fallen: Lair of Trenda\'loz', 37, -26, -189, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 1848001339), + (121, 0, 'Feerrott', 'feerrott', 'The Feerrott', 110.81, -1.02, -135.69, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 1328033086), + (122, 0, 'TremblingLagoon1', 'feerrott_epic01_temple', 'The Trembling Lagoon', -904.3, -9.78, 302.64, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 2246576723), + (123, 0, 'Kugup', 'feerrott_epic02_froglok', 'The Lost Village of Kugup', -113.46, 15.97, 147.36, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 1262464412), + (124, 0, 'SunkenCity', 'fprt_adv01_sunken', 'Sunken City', -61, -0.15, 60.35, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 4288698253), + (125, 0, 'Graveyard', 'fprt_adv02_graveyard', 'The Graveyard', -98.43, -15.73, -92.53, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 3531349867), + (126, 0, 'Sprawl', 'fprt_adv03_sprawl', 'The Sprawl', -139.62, -4.42, 97.21, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 621563996), + (127, 0, 'Ruins', 'fprt_adv04_ruins', 'The Ruins', -178.54, -1, 79.41, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 82557590), + (128, 0, 'EastFreeport', 'fprt_east', 'East Freeport', -305.04, -56.07, 73.57, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 3673921062), + (129, 0, 'JadeTigersDenCellar', 'fprt_epic01_storeroom01', 'Jade Tiger\'s Den Cellar', 0.187354, 0.328323, -4.61251, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 3155501257), + (130, 0, 'fprt_epic02_a01_dungeon01', 'fprt_epic02_a01_dungeon01', 'Describe me in the zones table! :)', 0, 0, 0, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 3386855379), + (131, 0, 'fprt_epic03_a01_dungeon02', 'fprt_epic03_a01_dungeon02', 'Describe me in the zones table! :)', 0, 0, 0, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 3101595178), + (132, 0, 'FreeportAcademy', 'fprt_epic04_a04_academy01', 'Freeport: Academy of Arcane Sciences', 0, -0.66, 0.5, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 3767002235), + (133, 0, 'FreeportTemple', 'fprt_epic05_a02_temple01', 'Freeport: The Temple of Dismal Rage', 0, 0, 0, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 1831281545), + (134, 0, 'BigBend', 'fprt_hood01', 'Big Bend', -26.67, -4.64, 102.43, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 578827427), + (135, 0, 'Stonestair', 'fprt_hood02', 'Stonestair Byway', -101.2, -4.65, -26.78, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 202759038), + (136, 0, 'TempleSt', 'fprt_hood03', 'Temple Street', -60.93, 2.86, 128.21, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 2595880091), + (137, 0, 'BeggarsCourt', 'fprt_hood04', 'Beggar\'s Court', -30, 4.17, -87.14, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 3536645693), + (138, 0, 'Longshadow', 'fprt_hood05', 'Longshadow Alley', -50.84, -4.67, -85.43, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 449901455), + (139, 0, 'ScaleYard', 'fprt_hood06', 'Scale Yard', 0.1, -4.5, 105, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 3728081010), + (140, 0, 'fprt_hood_epic01', 'fprt_hood_epic01', 'Describe me in the zones table! :)', 0, 0, 0, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 1624467568), + (141, 0, 'ArchiveValeein', 'fprt_hood_epic02', 'Archive of Valeein', -1.71924, -1.51351, 6.55359, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 2439079626), + (142, 0, 'fprt_hood_epic03', 'fprt_hood_epic03', 'Describe me in the zones table! :)', 0, 0, 0, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 3925693770), + (143, 0, 'fprt_hood_epic04', 'fprt_hood_epic04', 'Describe me in the zones table! :)', 0, 0, 0, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 122419003), + (144, 0, 'NorthFreeport', 'fprt_north', 'North Freeport', -88, -9, -117, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 1554806586), + (145, 0, 'Freeport2Room1', 'fprt_ph_1r01', 'a two room apartment, version 1', -6.5, 0.75, -13.5, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 1296677832), + (146, 0, 'Freeport2Room2', 'fprt_ph_1r02', 'a two room apartment, version 2', 10, 0.5, -10, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 1633763916), + (147, 0, 'Freeport3Room1', 'fprt_ph_2r01', 'a three room house, version 1', -8.5, 1.18, -7.66, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 2107461564), + (148, 0, 'Freeport3Room2', 'fprt_ph_2r02', 'a three room house, version 2', -6.5, 1.5, -12.15, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 2517432944), + (149, 0, 'Freeport4Room1', 'fprt_ph_3r01', 'a four room house, version 1', 8.5, 1, 8.3, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 3059503183), + (150, 0, 'Freeport4Room2', 'fprt_ph_3r02', 'a four room house, version 2', -7.5, 0.4, 8.5, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 2332833260), + (151, 0, 'Freeport4Room3', 'fprt_ph_3r03', 'a four room house, version 3', -9.5, 1, 8.5, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 4069184774), + (152, 0, 'Freeport6Room1', 'fprt_ph_5r01', 'a six room house, version 1', -3.62, -0.5, -2.3, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 2279293680), + (153, 0, 'Freeport6Room2', 'fprt_ph_5r02', 'a six room house, version 2', 28.75, -0.5, 5.62, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 4249795054), + (154, 0, 'ThievesWay', 'fprt_sewer01', 'The Thieves\' Way', -123, 0, 0, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 2245891121), + (155, 0, 'SerpentSewer', 'fprt_sewer02', 'The Serpent Sewer ', -182, 0, -185, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 2853519654), + (156, 0, 'Edgewater', 'fprt_sewer03', 'Edgewater Drains', 29, 32, 73, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 938776093), + (157, 0, 'fprt_sewer_epic01', 'fprt_sewer_epic01', 'Describe me in the zones table! :)', 0, 0, 0, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 4065867901), + (158, 0, 'fprt_sewer_epic02', 'fprt_sewer_epic02', 'Describe me in the zones table! :)', 0, 0, 0, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 3904734492), + (159, 0, 'SerpentsLair', 'fprt_sewer_epic03', 'The Serpent\'s Lair', 0, 0, 0, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 2729254407), + (160, 0, 'DarkbladeDen', 'fprt_sewer_epic04', 'The Darkblade Den of Assassins', -8.53, -0.62, 12.68, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 2374182736), + (161, 0, 'fprt_sewer_epic05', 'fprt_sewer_epic05', 'Describe me in the zones table! :)', 0, 0, 0, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 867121339), + (162, 0, 'fprt_sewer_epic06', 'fprt_sewer_epic06', 'Describe me in the zones table! :)', 0, 0, 0, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 1116256801), + (163, 0, 'fprt_sewer_epic07', 'fprt_sewer_epic07', 'Describe me in the zones table! :)', 0, 0, 0, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 1321185), + (164, 0, 'fprt_sewer_epic08', 'fprt_sewer_epic08', 'Describe me in the zones table! :)', 0, 0, 0, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 125341182), + (165, 0, 'fprt_sewer_epic09', 'fprt_sewer_epic09', 'Describe me in the zones table! :)', 0, 0, 0, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 2664820379), + (166, 0, 'SouthFreeport', 'fprt_south', 'South Freeport', -175, -57, 148, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 190556331), + (167, 0, 'BroodLostTongue', 'fprt_tradeskill01', 'The Brood of the Lost Tongue', 8.4, -0.4, -11.6, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 4020093839), + (168, 0, 'WestFreeport', 'fprt_west', 'West Freeport', 90.43, -21.98, 42.84, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 2219792691), + (169, 0, 'FreeportMilitia', 'fprt_west_militia', 'Freeport Militia', 135, -16, 129, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 3758488065), + (170, 0, 'PrisonGrimgadget', 'holdofprexus', 'The Prison of Admiral Grimgadget ', 0, 0, 0, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 1598578194), + (171, 0, 'Lavastorm', 'lavastorm', 'Lavastorm ', 84.73, -33.09, 138.55, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 4134789718), + (172, 0, 'SanctumFire', 'lavastorm_epic01_sanctum', 'The Sanctum of Fire', -332, -80, -675, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 2816820645), + (173, 0, 'MaidensGulch1', 'lavastorm_epic02_gulch', 'Maiden\'s Gulch', -193.04, -0.92, -344.69, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 1227024913), + (174, 0, 'HauntedHouse', 'live_haunted_mansion', 'The Haunted House', -2.75, 0, 9.5, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 3627449501), + (175, 0, 'BarBrell', 'live_irontoes', 'Bar of Brell', 352, -20, 143, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 1695982209), + (176, 0, 'CryptTHaen', 'mod01_dun_crypt_of_thaen', 'Crypt of T\'Haen', 76.88, 0.5, 43.19, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 3291665793), + (177, 0, 'TombNight', 'mod01_dun_tombs_of_night', 'The Tombs of Night', 116.64, -1.26, 128.41, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 1645287631), + (178, 0, 'Nektropos1', 'nektropos_castle', 'Nektropos Castle', 0, 0, 58, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, 'ZoneScripts/NektroposCastle.lua', 300, '', 0, 401694680), + (179, 0, 'Nektulos', 'nektulos', 'Nektulos Forest', -344.65, 0.66, -1264.09, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 1475203678), + (180, 0, 'BattleCauldronHollow', 'nektulos_epic01_cauldroncove', 'The Battle of Cauldron Hollow', 946, 10, -621.5, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 2897066563), + (181, 0, 'Unearthing', 'nektulos_mini01', 'Unearthing ', 2.53, 2.46, -3.88, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 3670867982), + (182, 0, 'DireHollow1', 'nektulos_mini02', 'Dire Hollow: Barrow Ruins', -0.05, -0.64, -0.55, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 3285202266), + (183, 0, 'UnderrotCavern', 'nektulos_mini03', 'The Underrot Caverns: Moldy Crypt', -0.26, -0.48, 0.86, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 3454396251), + (184, 0, 'Neriak', 'neriak', 'Neriak, City of Hate', 175.54, 29.87, 199.88, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 2399093912), + (185, 0, 'Neriak1Room', 'neriak_ph_1room', 'a Nerian residence 1', 0, -0.01, 0, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 1866624788), + (186, 0, 'Neriak3Room', 'neriak_ph_3room', 'a Nerian residence 3', 0, -0.01, 0, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 1590125928), + (187, 0, 'Neriak5Room', 'neriak_ph_5room', 'a Nerian residence 5', 0, -0.01, 0, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 2417746180), + (188, 0, 'Vestibule', 'obelisk_epic01_vestibule', 'The Vestibule', -484, 407, 380, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 2893098560), + (189, 0, 'ObeliskLostSouls', 'obelisk_of_lostsouls', 'The Obelisk of Lost Souls', -13.78, 624.84, 134.08, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 2537411576), + (190, 0, 'Zek', 'orcishwastes', 'Zek, the Orcish Wastes', 509.44, -41.31, 289.66, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 3094052578), + (191, 0, 'SullonMines', 'orcishwastes_mini01', 'Sullon Mines', 353, -121.77, -57.34, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 2610132812), + (192, 0, 'Permafrost', 'permafrost', 'Permafrost', -5, 0, -83, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 3961969058), + (193, 0, 'DrayeksChamber1', 'permafrost_epic01_icebound', 'Drayek\'s Chamber', 1.02, 59.81, -406.31, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 809955926), + (194, 0, 'CryptVox', 'permafrost_epic02_crypt', 'The Crypt of Vox', -2.49, 10.63, -404.66, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 1626179814), + (195, 0, 'Oakmyst', 'qey_adv01_oakmyst', 'Oakmyst Forest', 1093.17, -10.15, -382.08, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 1587861986), + (196, 0, 'ForestRuins', 'qey_adv02_ruins', 'The Forest Ruins', 897, -14.5, -575, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 2672310568), + (197, 0, 'Caves', 'qey_adv03_caves', 'The Caves', 1.5, 3.62, -23.42, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 3132916059), + (198, 0, 'PeatBog', 'qey_adv04_bog', 'The Peat Bog ', 561.65, -27.41, 417.99, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 870105190), + (199, 0, 'DownBelow', 'qey_catacomb01', 'The Down Below ', -195.98, -0.1, -200.16, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 184500816), + (200, 0, 'VerminSnye', 'qey_catacomb02', 'Vermin\'s Snye', 131.21, -6.92, -105.21, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 2945046990), + (201, 0, 'CryptBetrayal', 'qey_catacomb03', 'The Crypt of Betrayal ', 120.88, 7.02, -49.61, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 964742035), + (202, 0, 'CrowsTomb', 'qey_catacomb_epic01', 'Crow\'s Resting Place', 3.41, 1.92, 8.77, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 2271733143), + (203, 0, 'CryptDecrepit', 'qey_catacomb_epic02', 'A Decrepit Crypt', -31, -1, 9, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 1435904733), + (204, 0, 'ScarabHive', 'qey_catacomb_epic03', 'The Deathly Scarab Hive ', -20, 3.37, 0, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 1044089428), + (205, 0, 'qey_catacomb_epic04', 'qey_catacomb_epic04', 'Describe me in the zones table! :)', 0, 0, 0, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 3211469419), + (206, 0, 'qey_catacomb_epic05', 'qey_catacomb_epic05', 'Describe me in the zones table! :)', 0, 0, 0, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 1908807800), + (207, 0, 'ElddarGrove', 'qey_elddar', 'The Elddar Grove', 666.15, -10.14, -392.25, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 843773804), + (208, 0, 'Cache', 'qey_epic01_p19_cache', 'The Cache', -25, 0, -20, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 1930595139), + (209, 0, 'StarcrestBank', 'qey_epic02_village02_bank', 'Starcrest: The Qeynos Exchange', 0, 0, 0, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 1552498994), + (211, 0, 'WillowWoodBank', 'qey_epic04_village05_bank', 'Willow Wood: The Qeynos Exchange', 0, 0, 0, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 2824516912), + (212, 0, 'qey_epic05_village06_scribe', 'qey_epic05_village06_scribe', 'Describe me in the zones table! :)', 0, 0, 0, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 730617311), + (213, 0, 'IrontoeInn', 'qey_epic06_p12_irontoes', 'Qeynos: Irontoe East Inn', 0, 0, 0, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 3530459728), + (214, 0, 'SneedsTradingPost', 'qey_epic07_p08_sneeds', 'Qeynos: Sneed Galliway\'s Trading Post', 0, 0, 0, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 866837445), + (215, 0, 'VoleensBakery', 'qey_epic08_p06_voleens', 'Qeynos: Voleen\'s Bakery', 0, 0, 0, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 2546749187), + (216, 0, 'qey_epic09_l02_steel', 'qey_epic09_l02_steel', 'Describe me in the zones table! :)', 0, 0, 0, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 3864565992), + (217, 0, 'qey_epic10_p01_bank', 'qey_epic10_p01_bank', 'Describe me in the zones table! :)', 0, 0, 0, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 427344810), + (218, 0, 'qey_epic11_l10_arbor', 'qey_epic11_l10_arbor', 'Describe me in the zones table! :)', 0, 0, 0, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 3376886942), + (219, 0, 'qey_epic12_l08_sanctum', 'qey_epic12_l08_sanctum', 'Describe me in the zones table! :)', 0, 0, 0, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 2078500680), + (220, 0, 'QeynosMageTower', 'qey_epic13_l04_towers', 'Qeynos: Mage Tower', 719, 48, 114, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 374794994), + (221, 0, 'QeynosHarbor', 'qey_harbor', 'Qeynos Harbor', 999.14, -25.79, 27.04, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 1739788496), + (222, 0, 'NorthQeynos', 'qey_north', 'North Qeynos', 267.77, -21.55, -19.88, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 1841518510), + (223, 0, 'Qeynos2Room1', 'qey_ph_1r01', 'a two room apartment, version 1', 0, 0, 0, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 3500249586), + (224, 0, 'Qeynos2Room2', 'qey_ph_1r02', 'a two room apartment, version 2', 0, 0, 0, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 3956101406), + (225, 0, 'Qeynos3Room1', 'qey_ph_2r01', 'a three room house, version 1', 0, 0, 4.95, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 1050379564), + (226, 0, 'Qeynos3Room2', 'qey_ph_2r02', 'a three room house, version 2', 0, 0, 0, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 2058287807), + (227, 0, 'Qeynos4Room1', 'qey_ph_3r01', 'a four room house, version 1', 0.07, -2, 7.98, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 2993828484), + (228, 0, 'Qeynos4Room2', 'qey_ph_3r02', 'a four room house, version 2', 0.05, -2, 8.16, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 867876040), + (229, 0, 'Qeynos4Room3', 'qey_ph_3r03', 'a four room house, version 3', 0.05, -2, 8, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 1771836431), + (230, 0, 'Qeynos6Room1', 'qey_ph_5r01', 'a six room house, version 1', -2.59, 0, 9.48, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 1374238603), + (231, 0, 'SouthQeynos', 'qey_south', 'South Qeynos', 477.37, -11.52, 137.83, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 1504263346), + (232, 0, 'Commonwealth', 'qey_tradeskill01', 'The Elusive Commonwealth', 8.4, -0.4, -11.6, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 1504802193), + (233, 0, 'Nettleville', 'qey_village01', 'Nettleville', 684.31, -35.4, 339.18, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 1309271643), + (234, 0, 'Starcrest', 'qey_village02', 'Starcrest Commune', 724.88, -35.2, 325.29, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 914866192), + (235, 0, 'Graystone', 'qey_village03', 'Graystone Yard', 950.74, -25.22, -156.65, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 35815252), + (236, 0, 'Castleview', 'qey_village04', 'Castleview Hamlet', 780.79, -35.94, -94.43, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 1042690246), + (237, 0, 'WillowWood', 'qey_village05', 'The Willow Wood', 829.24, -20.36, -780.82, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 1899528945), + (238, 0, 'Baubbleshire', 'qey_village06', 'The Baubbleshire', 966.52, -18.2, -436.97, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 1133934497), + (239, 0, 'Rivervale', 'rivervale', 'Rivervale', 79.77, -11.61, 33.21, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 805193270), + (240, 0, 'rivervale_epic01_ph01', 'rivervale_epic01_ph01', 'Describe me in the zones table! :)', 0, 0, 0, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 3504623534), + (241, 0, 'rivervale_epic02_ph02', 'rivervale_epic02_ph02', 'Describe me in the zones table! :)', 0, 0, 0, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 897144292), + (242, 0, 'Runnyeye', 'runnyeye', 'Runnyeye', -58, 0.11, 57, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 2485707951), + (243, 0, 'ChamberRulgax', 'runnyeye_epic01_eye', 'The Chamber of Rulgax', 65.43, -34.31, 192.47, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 2024822938), + (244, 0, 'OverlordsThroneRoom', 'runnyeye_epic02_goblin', 'The Overlord\'s Throne Room', 205, 1, -318, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 2562976307), + (245, 0, 'SolEye', 'solusekseye', 'Solusek\'s Eye', 130.08, 28.58, -125.76, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 1322389444), + (246, 0, 'NagafensLair', 'solusekseye_epic01_nagafen', 'Nagafen\'s Lair', 0.12, -0.39, 54.45, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 3381789812), + (247, 0, 'BastionFlames', 'solusekseye_epic02_bastion', 'The Bastion of Flames', -147.93, -414.98, -290.9, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 220397575), + (248, 0, 'OratoriumThyr1', 'solusekseye_epic03_thyr', 'The Oratorium of Thyr', -204.3, -617.46, -193.09, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 2646304963), + (249, 0, 'ThunderingSteppes', 'steppes', 'The Thundering Steppes', -606.14, -23.11, -402.91, 268.76, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, 'ZoneScripts/ThunderingSteppes.lua', 300, '', 0, 1442587250), + (250, 0, 'CoveDecay1', 'steppes_epic01_cove', 'The Cove of Decay', -110.5, -12.28, 1020.8, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 1675261020), + (251, 0, 'PirateStash', 'steppes_mini01', 'A Pirate\'s Hidden Stash ', 827.3, -13.3, 1028.16, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 2597747579), + (252, 0, 'thunderdome', 'thunderdome', 'Describe me in the zones table! :)', 0, 0, 0, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 3492108284), + (253, 0, 'QueensColony', 'tutorial_island02', 'Queen\'s Colony', -17.24, -5.4, 223, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 1, 'NONE', 0, 0, 0, 0, 'ZoneScripts/QueensColony.lua', 300, '', 0, 235639746), + (254, 0, 'SourceEvil', 'tutorial_island02_epic01', 'The Source of Evil', -14.5, 0, -2.75, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 1139089258), + (255, 0, 'MizansCellar', 'tutorial_island02_epic02', 'Mizan\'s Cellar', -9, -9, 158, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 853356513), + (256, 0, 'RuinsVarsoon', 'varsoon', 'The Ruins of Varsoon', 95, 17.9, -96.33, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 783825492), + (257, 0, 'ChamberImmortality', 'vrsn_epic01_boss', 'Chamber of Immortality ', 203.16, -12.14, 138.85, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 1531502647), + (258, 0, 'WailingCaves', 'wailingcaves', 'The Wailing Caves', -103, -33, -138, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 3367326908), + (259, 0, 'ShardFear', 'shard_of_fear', 'Shard of Fear', -4.66, 11.56, 479.91, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 2913550259), + (260, 40, 'Gorowyn1Room', 'exp04_rgn_gorowyn_ph_1room', 'Gorowyn 1 Room Apartment', 0, 0, 0, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 3339258185), + (261, 40, 'KunzarJungle', 'exp04_rgn_kunzar_jungle', 'Kunzar Jungle', -450, 150, -870, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 135989668), + (262, 40, 'KylongPlains', 'exp04_rgn_kylong_plains', 'Kylong Plains', 742, 11, 203, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 3387257629), + (263, 40, 'TimorousDeep', 'exp04_rgn_timorous_deep', 'Timorous Deep', -257.5, 2.7, 181.6, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 16, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 3292189791), + (264, 40, 'FensNathsar', 'exp04_rgn_fens_of_nathsar', 'Fens of Nathsar', 489.5, 12.6, 1509.77, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 189371831), + (265, 40, 'JarsathWastes', 'exp04_rgn_jarsath_wastes', 'Jarsath Wastes', -1057, -83, -560, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 1721963361), + (267, 40, 'Chelsith', 'exp04_dun_chelsith', 'Chelsith', -75, 30.3, 510, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 1080201912), + (269, 40, 'KarnorsCastle', 'exp04_dun_karnors_castle', 'Karnor\'s Castle', 267, -58.22, 136, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 1170290470), + (270, 40, 'Sebilis', 'exp04_dun_sebilis', 'Sebilis', 18, 0, 4, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 1873729493), + (271, 40, 'VeeshansPeak', 'exp04_dun_veeshans_peak', 'Veeshan\'s Peak', 388, -342, 1131, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 2773136085), + (272, 40, 'TombThuuga', 'exp04_dun_charasis_epic01_queens', 'The Tomb of Thuuga', 0, 0, -5, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 2482499672), + (273, 40, 'Chardok', 'exp04_dun_chardok', 'Chardok', 27.44, -29.78, -340.25, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 758372554), + (274, 40, 'Gorowyn3Room', 'exp04_rgn_gorowyn_ph_3room', 'Gorowyn 3 Rooms Apartment', 0, 0, 0, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 207940048), + (275, 40, 'Gorowyn5Room', 'exp04_rgn_gorowyn_ph_5room', 'Gorowyn 5 Rooms Apartment', 0, 0, 0, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 3852789577), + (276, 40, 'Pawbuster', 'exp04_dun_karnors_castle_epic01_pawbuster', 'The Execution Throne Room', -12.86, 1.95, 29.54, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 4050761660), + (277, 40, 'ProtectorsRealm', 'exp04_dun_sebilis_epic01_crypt', 'The Protector\'s Realm', -12, -13, 344, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 1896505173), + (278, 0, 'OutpostOverlord', 'tutorial_island02', 'Outpost of the Overlord', -12.43, -4.94, 222.26, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 2, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 2331579180), + (279, 0, 'Truthbringer', 'qey_tradeskill01', 'The Charter of the Truthbringer', 8.4, -0.4, -11.6, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 2254477089), + (280, 0, 'Deductive', 'qey_tradeskill01', 'The Deductive Directory', 8.4, -0.4, -11.6, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 2963804548), + (281, 0, 'Ironforge', 'qey_tradeskill01', 'The Ironforge Exchange', 8.4, -0.4, -11.6, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 3822793044), + (282, 0, 'Wayfarers', 'qey_tradeskill01', 'Wayfarer\'s Stockpilers', 8.4, -0.4, -11.6, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 3109275695), + (283, 0, 'WorkshopGood', 'qey_tradeskill01', 'Tradeskiller\'s Workshop', 8.4, -0.4, -11.6, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 2442508618), + (284, 0, 'CoveDecay6', 'steppes_epic01_cove', 'The Cove of Decay: A Treaty for Treasure', -110.5, -12.28, 1020.8, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 3368285039), + (285, 0, 'CircleVaniki', 'fprt_tradeskill01', 'The Circle of Vaniki', 2.1, -0.19, -4.07, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 1207827539), + (286, 0, 'Wanderlust', 'fprt_tradeskill01', 'The Ring of Wanderlust', 2.1, -0.19, -4.07, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 1815400861), + (287, 0, 'Ransackers', 'fprt_tradeskill01', 'The Ransackers Annex', 2.1, -0.19, -4.07, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 2343039238), + (288, 0, 'DarkBargainers', 'fprt_tradeskill01', 'The Dark Bargainers', 2.1, -0.19, -4.07, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 2653325751), + (289, 0, 'WarHagglers', 'fprt_tradeskill01', 'The War Hagglers', 2.1, -0.19, -4.07, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 87161584), + (290, 0, 'NepetaCataria', 'fprt_tradeskill01', 'Nepeta Cataria', 2.1, -0.19, -4.07, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 1918315345), + (291, 0, 'Coalition', 'fprt_tradeskill01', 'The Coalition Crafter\'s Association', 2.1, -0.19, -4.07, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 760423874), + (292, 0, 'Luminary', 'qey_tradeskill01', 'The Luminary Cache', 8.39294, 0, -10.6062, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 3429099711), + (293, 0, 'Runnyeye2', 'runnyeye_advanced', 'Runnyeye: The Gathering', -93.4526, -27.4416, 58.496, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 655533918), + (294, 50, 'Veksar1', 'exp05_dun_veksar', 'Veksar: The Invasion', 0, 0, 0, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 1027562245), + (295, 40, 'VoES', 'exp04_dun_charasis_north', 'Charasis: Vault of Eternal Sleep', 0, 0, 23, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 760135195), + (296, 40, 'MaidensChamber', 'exp04_dun_charasis_south', 'Charasis: Maiden\'s Chamber', 0, 0, -23, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 1193908363), + (297, 40, 'TempleKorsha', 'exp04_dun_chardok_epic01_throne', 'The Temple of Kor-Sha', 816, -27, 206, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 2801650478), + (298, 40, 'CourtKorucust', 'exp04_dun_chardok_epic02_prison', 'Court of Korucust', -650, -66, 204, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 541835034), + (299, 40, 'ChamberDestiny', 'exp04_dun_chelsith_epic01_behemoth', 'The Chamber of Destiny', 192, -10, 29, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 2844302977), + (300, 40, 'VenrilsLair', 'exp04_dun_sebilis_epic02_venril', 'Venril Sathir\'s Lair', 0, -10, 144, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 2553967894), + (301, 40, 'TrakanonsLair', 'exp04_dun_veeshans_peak_epic01_trakanon', 'Trakanon\'s Lair', 0, 0, 0, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 913159877), + (302, 0, 'ShardHate', 'shard_of_hate', 'Shard of Hate', 45, 0.2, 290, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 4135995094), + (303, 40, 'CryptAgony', 'exp04_dun_sebilis_epic01_crypt', 'The Crypt of Agony', -12, -13, 344, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 266969978), + (305, 0, 'ArticaesLair', 'everfrost_epic01_menagerie', 'Ar\'ticae\'s Lair', -52.73, -23.55, -319.22, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 3796545588), + (306, 0, 'Bloodskull1', 'cmmn_epic01_orc', 'Bloodskull Valley: Maulic\'s Stronghold', -9.18, -48.2, 732.4, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 1447116011), + (307, 0, 'Bloodskull3', 'cmmn_epic01_orc', 'Bloodskull Valley: Righting the Scales', -9.18, -48.2, 732.4, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 1939902408), + (308, 0, 'Bloodskull4', 'cmmn_epic01_orc', 'Bloodskull Valley: The Excavation Site', -9.18, -48.2, 732.4, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 2140909834), + (309, 0, 'Bloodskull5', 'cmmn_epic01_orc', 'Bloodskull Valley: The Training Grounds', -9.18, -48.2, 732.4, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 3502321105), + (310, 0, 'TremblingLagoon2', 'feerrott_epic01_temple', 'Trembling Lagoon: Cleansing of the Cove', -904.3, -9.78, 302.64, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 577145340), + (311, 0, 'CoveDecay2', 'steppes_epic01_cove', 'The Cove of Decay: Epic Angler', -110.5, -12.28, 1020.8, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 3356317793), + (312, 0, 'CoveDecay3', 'steppes_epic01_cove', 'Cove of Decay: Horror Beneath the Waves', -110.5, -12.28, 1020.8, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 1282445722), + (313, 0, 'CoveDecay5', 'steppes_epic01_cove', 'Cove of Decay: Mjolni\'s Lair', -110.5, -12.28, 1020.8, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 295656652), + (314, 0, 'IsleRefuge2', 'tutorial_island02', 'Darathar\'s Flight', -17.24, -5.4, 223, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 3299576964), + (315, 0, 'Deathfist2', 'deathfist', 'Deathfist Citadel: Assault', 0, 0, 55.18, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 1875388458), + (316, 0, 'Deathfist3', 'deathfist', 'Deathfist Citadel: Onslaught', 0, 0, 55.18, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 1654839403), + (317, 0, 'Deathfist4', 'deathfist', 'Deathfist Citadel: The Arena of Zek', 0, 0, 55.18, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 2388724028), + (318, 0, 'DrayeksChamber2', 'permafrost_epic01_icebound', 'Drayek\'s Chamber: Throne of the Kromise King', 1.02, 59.81, -406.31, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 1179826618), + (319, 0, 'TremblingLagoon3', 'feerrott_epic01_temple', 'Trembling Lagoon: Dythra\'s Lair', -904.3, -9.78, 302.64, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 1536753323), + (320, 0, 'EchoesTime1', 'cmmn_epic02_mage', 'Echoes of Time', 863.77, -18.31, 581.92, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 710155441), + (321, 0, 'Firemyst2', 'antonica_epic02_firemyst', 'The Firemyst Gully: A Gallant Confrontation', -1093.72, -25.04, 686.59, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 3335465554), + (322, 0, 'Firemyst3', 'antonica_epic02_firemyst', 'The Firemyst Gully: In Pursuit', -1093.72, -25.04, 686.59, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 1877036992), + (323, 0, 'Firemyst4', 'antonica_epic02_firemyst', 'The Firemyst Gully: Vanudozalon\'s Lair', -1093.72, -25.04, 686.59, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 2192926045), + (324, 0, 'GrimgashsLair', 'tutorial_island02_epic01', 'Grimgash\'s Lair', -14.5, 0, -2.75, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 2942727750), + (325, 0, 'IsleRefuge1', 'tutorial_island02', 'Isle of Refuge', -17.24, -5.4, 223, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 2252985298), + (326, 0, 'Icespire', 'everfrost_epic02_icespire', 'Icespire Summit', -63.16, 58.9, -885.42, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 4066447367), + (327, 0, 'DruidRing', 'antonica_epic01_vale', 'Imperiled Druid Ring', -2526.79, 15.67, -50.07, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 4155975111), + (328, 0, 'ShatteredVale3', 'antonica_epic01_vale', 'Invasion of the Vale', -2526.79, 15.67, -50.07, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 3338713433), + (329, 0, 'MaidensGulch3', 'lavastorm_epic02_gulch', 'Maiden\'s Gulch: Rescue of the Sage', -193.04, -0.92, -344.69, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 1526471034), + (330, 0, 'Nektropos2', 'nektropos_castle', 'Nektropos Castle: Craftsman Errands', 0, 0, 58, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 1334746619), + (331, 0, 'Nektropos3', 'nektropos_castle', 'Nektropos Castle: The Return', 0, 0, 58, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 3051981584), + (332, 0, 'Nektropos4', 'nektropos_castle', 'Nektropos Castle: Tribulation', 0, 0, 58, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 3927417108), + (333, 0, 'SanctumFear3', 'cazicthule_epic01_sanctum ', 'The Sanctum of Fear: Niscanith\'s Lair', -1.02, -10, -178.26, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 4089148686), + (334, 0, 'ShatteredStillness', 'antonica_epic02_firemyst', 'Shattered Stillness', -1093.72, -25.04, 686.59, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 3520240139), + (335, 0, 'ShatteredVale2', 'antonica_epic01_vale', 'The Shattered Vale: A Bold Confrontation', -2526.79, 15.67, -50.07, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 1609089866), + (336, 0, 'ShatteredVale4', 'antonica_epic01_vale', 'The Shattered Vale: Lordly Confrontation', -2526.79, 15.67, -50.07, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 2695716024), + (337, 0, 'ShatteredVale5', 'antonica_epic01_vale', 'The Shattered Vale: Stones of the Avatars', -2526.79, 15.67, -50.07, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 3330380441), + (338, 0, 'SpiritsLost', 'cazicthule', 'Spirits of the Lost', -0.05, 7.89, 154.43, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 3324942373), + (339, 0, 'CauldronHollow', 'nektulos_epic01_cauldroncove', 'The Cauldron Hollow', 946, 10, -621.5, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 3723528959), + (340, 0, 'CaveWonder1', 'enchanted_mini01 ', 'The Caves of Wonder', -79.8, -2.63, -1120.98, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 3327956550), + (341, 0, 'CaveWonder2', 'enchanted_mini01', 'Heroic: The Caves of Wonder', -79.8, -2.63, -1120.98, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 3221976462), + (342, 0, 'SanctumFear2', 'cazicthule_epic01_sanctum ', 'Sanctum of Fear: Chamber of the Keeper', -1.02, -10, -178.26, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 507325671), + (343, 0, 'MaidensGulch2', 'lavastorm_epic02_gulch', 'Maiden\'s Gulch: Commune of K\'Dal', -193.04, -0.92, -344.69, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 1048492947), + (344, 0, 'CoveDecay4', 'steppes_epic01_cove', 'The Cove of Decay: A Heroic Confrontation', -110.5, -12.28, 1020.8, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 4248896629), + (345, 0, 'TombValor2', 'befallen_epic01', 'Tomb of Valor: Defiled', -4.74, -45.79, -47.64, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 1782317725), + (346, 0, 'EternalGorge2', 'cmmn_epic02_mage', 'The Eternal Gorge: A Daring Confrontation', 863.77, -18.31, 581.92, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 1806482132), + (347, 0, 'EternalGorge3', 'cmmn_epic02_mage', 'The Eternal Gorge: Tears of the Daughters', 863.77, -18.31, 581.92, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 1153144978), + (348, 0, 'CircleElders', 'tutorial_island02_epic01', 'The Circle of Elders', -14.5, 0, -2.75, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 3366202526), + (349, 0, 'Gobblerock', 'fprt_sewer02', 'Gobblerock\'s Hideout', -126, 0, 59.6, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 1041909749), + (350, 0, 'WorkshopEvil', 'fprt_tradeskill01', 'Tradeskiller\'s Workshop', 3, 1, -3, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 3046659043), + (351, 0, 'HeraldsKLorn', 'fprt_tradeskill01', 'The Heralds of K\'Lorn', 8.4, -0.4, -11.6, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 2136244020), + (352, 0, 'LairNecromancer', 'fallengate_epic01_boss', 'The Lair of the Necromancer', 37, -26, -189, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 2347698360), + (353, 10, 'LibraryLight2', 'exp01_cty_majdul_library', 'The Library of Light: Scholar Errands', 0, -0.2, 0, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 2219248866), + (354, 20, 'NestGreatEgg2', 'exp02_dun_shrines_of_sky_epic02_nest', 'The Nest of the Great Egg: Outfitter Errands', 38.48, 112.78, 0.03, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 2124039412), + (355, 0, 'OratoriumThyr2', 'solusekseye_epic03_thyr', 'The Oratorium of Thyr: Allim\'s Fate', -204.3, -617.46, -193.09, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 402095699), + (356, 0, 'QSSBootstrutter', 'boat_06p_feerrott', 'The QSS Bootstrutter', 2.14, 1.21, -15.81, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 3305484660), + (357, 0, 'RumblerCaves', 'steppes_mini01', 'The Rumbler Caves', 827.3, -13.3, 1028.16, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 4050420393), + (358, 0, 'SeaBiscuit1', 'boat_06p_enchanted', 'The Sea Biscuit: Enchanted Journey', 2.14, 1.21, -15.81, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 1980603774), + (359, 0, 'SeaBiscuit2', 'boat_06p_enchanted', 'The Sea Biscuit: Heroic Enchanted Journey', 2.14, 1.21, -15.81, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 2333013113), + (360, 0, 'SeaBiscuit3', 'boat_06p_feerrott', 'The Sea Biscuit: Heroic Jungle Cruise', 2.14, 1.21, -15.81, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 2365341412), + (361, 0, 'SeaBiscuit4', 'boat_06p_orcishwastes', 'The Sea Biscuit: Heroic Orc Excursion', 2.14, 1.21, -15.81, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 1690191457), + (362, 0, 'SeaBiscuit5', 'boat_06p_feerrott', 'The Sea Biscuit: Jungle Cruise', 2.14, 1.21, -15.81, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 3949813243), + (363, 0, 'SeaBiscuit6', 'boat_06p_orcishwastes', 'The Sea Biscuit: Orc Excursion', 2.14, 1.21, -15.81, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 1083287642), + (364, 0, 'Stalwart', 'qey_tradeskill01', 'The Stalwart Township', 6, -0.48, -10.2, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 1246738728), + (365, 0, 'DrownedCaverns2', 'adv02_dun_drowned_caverns', 'The Drowned Caverns: Brutal Acts of War', 96, 23, 4, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 2128757352), + (366, 0, 'DrownedCaverns3', 'adv02_dun_drowned_caverns', 'The Drowned Caverns: Flammable Fur', 96, 23, 4, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 2366967768), + (367, 0, 'DrownedCaverns4', 'adv02_dun_drowned_caverns', 'The Drowned Caverns: Hot Water', 96, 23, 4, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 817852260), + (368, 0, 'DrownedCaverns5', 'adv02_dun_drowned_caverns', 'The Drowned Caverns: Outer Grotto', 96, 23, 4, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 1358293133), + (369, 0, 'Splitpaw2', 'adv02_dun_sundered_splitpaw', 'Sundered Splitpaw: Anvilpaw\'s Grotto', 0, -2.5, 0, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 246626574), + (370, 0, 'Splitpaw3', 'adv02_dun_sundered_splitpaw', 'Sundered Splitpaw: Captive Audience', 0, -2.5, 0, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 1406658297), + (371, 0, 'Splitpaw4', 'adv02_dun_sundered_splitpaw', 'Sundered Splitpaw: Crawler Nest', 0, -2.5, 0, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 2072242411), + (372, 0, 'Splitpaw5', 'adv02_dun_sundered_splitpaw', 'Sundered Splitpaw: Delving into the Darkness', 0, -2.5, 0, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 1568159668), + (373, 0, 'Splitpaw6', 'adv02_dun_sundered_splitpaw', 'Sundered Splitpaw: Gladiator\'s Triumph', 0, -2.5, 0, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 1108437045), + (374, 0, 'Splitpaw7', 'adv02_dun_sundered_splitpaw', 'Sundered Splitpaw: Hideout', 0, -2.5, 0, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 4160317729), + (375, 0, 'Splitpaw8', 'adv02_dun_sundered_splitpaw', 'Sundered Splitpaw: Trial of Harclave', 0, -2.5, 0, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 640136091), + (376, 0, 'Splitpaw9', 'adv02_dun_sundered_splitpaw', 'Sundered Splitpaw: Upper Tunnels', 0, -2.5, 0, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 1849807013), + (377, 50, 'QeynosGuild1', 'qey_guildhall_tier1', 'Guild Hall', -0.188056, 0.005529, -4.87351, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 3530974985), + (378, 50, 'QeynosGuild2', 'qey_guildhall_tier2', 'Large Qeynos Guild Hall', -0.188056, 0.005529, -4.87351, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 2736504342), + (379, 50, 'AntonicaGuild', 'qey_guildhall_tier3', 'Antonica Guild Hall', 665.435, -35.8975, 1485.44, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 3464306773), + (380, 50, 'qey_guildhall_tier4', 'qey_guildhall_tier4', 'Qeynos: Tier 4 Guild Hall', 0, 0, 0, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 1113185173), + (381, 50, 'FreeportGuild1', 'fprt_guildhall_tier1', 'Guild Hall', 0.059904, 0.153986, 15.6427, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 2493701805), + (382, 50, 'FreeportGuild2', 'fprt_guildhall_tier2', 'Large Freeport Guild Hall', 0.003907, 0.153989, 16.3804, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 1615399354), + (383, 50, 'CommonlandsGuild', 'fprt_guildhall_tier3', 'Commonlands Guild Hall', -1468.19, -136.974, -1307.95, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 1257767219), + (384, 50, 'fprt_guildhall_tier4', 'fprt_guildhall_tier4', 'Freeport: Tier 4 Guild Hall', -1464, -136, -1304, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 3537265728), + (385, 50, 'MoorsYkesha', 'exp05_rgn_innothule', 'Moors of Ykesha', 1911, 454, 1013, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 2788275878), + (386, 50, 'BefallenAsylum', 'exp05_dun_befallen_asylum', 'Befallen: Necrotic Asylum', 23.25, 0.25, -0.1, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 1633749115), + (387, 50, 'BefallenCavern', 'exp05_dun_befallen_cavern', 'Befallen: Cavern of the Afflicted', -2.25, -0.1, 4, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 752000273), + (388, 50, 'BefallenForsaken', 'exp05_dun_befallen_forsaken', 'Befallen: Halls of the Forsaken', 7.25, 0.25, 0.1, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 1084983315), + (389, 50, 'GukUpper', 'exp05_dun_guk_upper', 'The Ruins of Guk: Halls of the Fallen', -33.5, 0.2, 12.5, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 107619541), + (390, 50, 'GukLower', 'exp05_dun_guk_lower', 'The Ruins of Guk: The Lower Corridors', 3.33, -2, -2.5, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 413842749), + (391, 50, 'GukStronghold', 'exp05_dun_guk_stronghold', 'The Ruins of Guk: Ykesha\'s Outer Stronghold', 0.5, -0.5, 3.5, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 1474385698), + (392, 50, 'GukStrongholdRaid', 'exp05_dun_guk_stronghold_raid', 'Ykesha\'s Inner Stronghold', 44, -10, -384, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 1898012092), + (393, 50, 'Korsha', 'exp05_dun_korsha', 'Emperor Atrebe\'s Laboratory: The Fabled City of Kor-sha', 0.25, 0.1, 30.5, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 2386622022), + (394, 50, 'Veksar2', 'exp05_dun_veksar', 'Veksar: The Sunken Theater', 0, 0, 0, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 371997069), + (395, 50, 'MiragulEpic', 'exp05_dun_miragul_epic01', 'Describe me in the zones table! :)', 0, 0, 0, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 9398401), + (396, 50, 'MiragulAnathema', 'exp05_dun_miragul_lower', 'Miragul\'s Phylactery: The Anathema', 10.25, -0.2, 9.3, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 1724480869), + (397, 50, 'MiragulCrucible', 'exp05_dun_miragul_shard', 'Miragul\'s Phylactery: The Crucible', -31, 0, -56, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 2882183615), + (398, 50, 'MiragulScion', 'exp05_dun_miragul_upper', 'Miragul\'s Phylactery: Scion of Ice', -1.5, 0, 13.5, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 3233187539), + (399, 50, 'MistmooreAbbey', 'exp05_dun_mistmoore_abbey', 'Evernight Abbey', 0, -0.25, 0, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 3136916931), + (400, 50, 'MistmooreDragon', 'exp05_dun_mistmoore_dragon', 'Zarrakon\'s Abyssal Chamber', 0, -16, 0, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 3669361454), + (401, 50, 'MistmooreManor', 'exp05_dun_mistmoore_manor', 'Mistmyr Manor', 0, -0.3, 0, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 238657033), + (402, 50, 'MistmooreRepository', 'exp05_dun_mistmoore_repository', 'Ravenscale Repository', 0, -0.22, 0, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 1099149777), + (403, 50, 'WardElements', 'exp05_dun_najena_atheneum', 'Ward of Elements', -67, -354, 106, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 1246840166), + (404, 50, 'NajenaForge', 'exp05_dun_najena_forge', 'The Deep Forge', -0.25, 0.15, 24, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 1435795796), + (405, 50, 'NajenaHollow', 'exp05_dun_najena_hollow', 'Najena\'s Hollow Tower', 0.4, -11.6, 88.8, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 1985747884), + (406, 50, 'Bazzul', 'exp05_dun_void_anchor', 'Anchor of Bazzul', -515.3, -0.6, 657.8, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 297392421), + (407, 50, 'Ferzhul', 'exp05_dun_void_palace', 'Palace of Ferzhul', -135.08, 6.66, -10.44, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 274203338), + (408, 50, 'PalaceAncientOne', 'exp05_dun_void_palace', 'Palace of the Ancient One', -135.08, 6.66, -10.44, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 375924650), + (409, 50, 'Ankzul', 'exp05_dun_void_pit', 'Obelisk of Ahkzul', 546.15, 6.1, -318.3, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 524307527), + (410, 40, 'NuRoga', 'exp04_dun_droga_nurga', 'Nu\'Roga', -4.25, 0, 41.6, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 2653575693), + (411, 0, 'IcyKeep1', 'permafrost', 'The Icy Keep (Easy)', -49.07, 16, 208, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 2057982584), + (412, 0, 'Frostfell', 'everfrost_frostfell', 'Frostfell Wonderland Village', 65, -3, -1200, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 3311558711), + (413, 0, 'TheFuture', 'everfrost_frostfell', 'The Future', -502.92, -6, -355.49, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 4130976405), + (414, 0, 'KritchatsHouse', 'fprt_ph_1r01', 'Bobby Kritchat\'s House', -6.37, 0.7, -13.3, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 2297313179), + (415, 0, 'McScrooglesPast', 'qey_epic03_village03_ph', 'McScroogle\'s Past', 15.57, -0.5, -9.18, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 2876833616), + (416, 0, 'McScrooglesBoudoir', 'qey_ph_1r01', 'Mr. McScroogle\'s Boudoir', -6.21, 0, -0.2, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 4197602164), + (417, 30, 'McScroogleHQ', 'exp03_dun_klakanon_epic01_menace', 'McScroogle Corp. HQ', 129, 24, -66.5, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 1634382156), + (418, 0, 'IcyKeep2', 'permafrost', 'The Icy Keep (Hard)', -49.07, 16, 208, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 431849093), + (419, 50, 'AntoniasChambers', 'qey_guildhall_tier1', 'Antonia Bayle\'s Chambers', 0, 0, -5, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 3301442772), + (420, 0, 'Firemyst5', 'antonica_epic02_firemyst', 'The Firemyst Gully: Supply Stocking', -1093.72, -25.04, 686.59, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 138580763), + (421, 30, 'RilgorsChambers', 'exp03_dun_klakanon_epic01_menace', 'Rilgor Plegnog\'s Chambers', 129, 24, -66.5, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 1821662383), + (422, 30, 'ClockworkWorkshop', 'exp03_dun_klakanon ', 'The Clockwork Workshop', 130, 9, 52, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 1180254437), + (423, 0, 'EndlessCatacombs', 'adv04_dun_endless', 'The Endless Catacombs', -33.7, -89.42, 24.8, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 2483512159), + (424, 50, 'OverlordsOffice', 'fprt_guildhall_tier2', 'The Overlord\'s Office', 0, 0, 16.3, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 3243271695), + (425, 50, 'TombMadCrusader', 'exp05_dun_befallen_cavern', 'Tomb of the Mad Crusader', -2.25, -0.1, 4, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 675527825), + (426, 0, 'WitchesCove', 'nektulos_epic01_cauldroncove', 'The Witches\' Cove', 894.775, 10, -481.346, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 3151346832), + (427, 0, 'Firemyst', 'antonica_epic02_firemyst', 'The Firemyst Gully', -1093.72, -25.04, 686.59, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 1001393294), + (428, 50, 'DryadGrotto', 'exp05_dun_guk_upper_epic01_cave', 'Enchanted Dryad Grotto', 13.8052, -32.8927, -322.195, 0, -1000000, 0, 1, 80, '0', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 4187233331), + (429, 10, 'PoetsPalace2', 'exp01_dun_poets_palace_community', 'Describe me in the zones table! :)', 57, 305, -54, 95, -1000000, 0, 1, 80, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 3656598577), + (431, 40, 'CharasisWest', 'exp04_dun_charasis_west', 'Emperor\'s Athenaeum', 0, 0, 0, 0, -1000000, 0, 1, 80, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 241278901), + (432, 40, 'KurnsTower', 'exp04_dun_kurns_tower', 'Describe me in the zones table! :)', 0, 0, 0, 0, -1000000, 0, 1, 80, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 4282593199), + (433, 40, 'MoppetShoppe', 'exp04_dun_sebilis_quarters', 'The Moppet Shoppe', -17.4, 31, 479.8, 0, -1000000, 0, 1, 80, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 1525821771), + (434, 50, 'LowerGuk1', 'exp05_dun_guk_lower_epic01_cave', 'Describe me in the zones table! :)', 0, 0, 0, 0, -1000000, 0, 1, 80, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 2474119725), + (435, 0, 'Mystic', 'live_epic_mystic', 'Describe me in the zones table! :)', 0, 0, 0, 0, -1000000, 0, 1, 80, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 1533911469), + (436, 0, 'HauntedUnrest', 'live_haunted_unrest', 'Describe me in the zones table! :)', 0, 0, 0, 0, -1000000, 0, 1, 80, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 1547071487), + (437, 0, 'RodcetDiety', 'live_rodcet_diety', 'Describe me in the zones table! :)', 0, 0, 0, 0, -1000000, 0, 1, 80, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 1148846749), + (438, 0, 'Buccaneers', 'befallen_epic01', 'The Buccaneer\'s Rest', 3.03794, -45, -44.6673, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 622152942), + (439, 0, 'TombNight2', 'mod01_dun_tombs_of_night', 'The Tombs of Night: A Search For Answers', 120.016, -0.5, 120.964, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 2581166184), + (440, 50, 'LegendsMuseum', 'qey_guildhall_tier1', 'Legends of Norrath Museum', 1.13356, 1, -0.742676, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 4025127940), + (441, 10, 'ZygomydGrotto', 'exp01_rgn_sinking_sands_epic01_lockjaw', 'Enchanted Zygomyd Grotto', 213.457, -4.79144, -46.9508, 0, -1000000, 0, 1, 80, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 422052312), + (442, 30, 'BrownieGrotto', 'exp03_dun_hollow_stump2', 'Enchanted Brownie Grotto', -216.12, -38.9957, 29.9802, 0, -1000000, 0, 1, 80, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 1114913268), + (443, 30, 'FayGrotto', 'exp03_rgn_emerald_halls_event', 'Enchanted Fay Grotto', 389.893, 94.241, -800.458, 0, -1000000, 0, 1, 80, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 3424608148), + (444, 50, 'NaiadGrotto', 'exp05_dun_guk_lower_epic01_cave', 'Enchanted Naiad Grotto', -4.4465, -2.40918, 2.62357, 0, -1000000, 0, 1, 80, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 2260864416), + (445, 0, 'HoldFallen', 'fprt_epic05_a02_temple01', 'Hold of the Fallen', 10.7279, 1, -0.867747, 0, -1000000, 0, 1, 80, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 3192830649), + (446, 0, 'RitePassage', 'fprt_epic05_a02_temple01', 'Rite of Passage', 9.72787, 1, 1.13225, 0, -1000000, 0, 1, 80, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 3789732280), + (447, 0, 'CondemnedCatacomb', 'qey_catacomb01', 'The Condemned Catacomb', -217.584, 0.5, -56.58, 0, -1000000, 0, 1, 80, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 1996344389), + (448, 0, 'PrivateLounge', 'qey_ph_1r01', 'Bar of Brell: Private Lounge', -6.21334, 0.0025, -0.20449, 0, -1000000, 0, 1, 80, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 2145600684), + (449, 0, 'Blumbles', 'steppes_mini01', 'Blumble\'s Halfling Hole', 820.961, -12, 1023.16, 0, -1000000, 0, 1, 80, '', 0, 0, 0, 0, 0, 0, 0, 'QUEST_INSTANCE', 0, 0, 0, 0, '', 300, '', 0, 2556324114), + (450, 0, 'SmallHideout', 'tutorial_island02_epic02', 'a small hideout', -4.89851, -8, 161.891, 0, -1000000, 0, 1, 80, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 1266491077), + (451, 60, 'LibraryErudin', 'exp06_dun_erudin_erudin01', 'Library of Erudin', 0, 0, 0, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 2187208939), + (452, 60, 'ResearchHalls', 'exp06_dun_erudin_erudin02', 'Erudin Research Halls', 0, 0, 0, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 1883324183), + (453, 60, 'PalaceErudin', 'exp06_dun_erudin_erudin03', 'Royal Palace of Erudin', 0, 0, 0, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 2369621886), + (454, 60, 'Vigilant1', 'exp06_dun_sentinal', 'The Vigilant: Final Destruction', 0, 72.5, -179, 180, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 2212927518), + (455, 60, 'TheHole', 'exp06_dun_thehole', 'The Hole', 19.74, 101.43, -66.3, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 4112900241), + (456, 60, 'DemitriksBastion', 'exp06_dun_thehole_wing1', 'Demitrik\'s Bastion', 19.74, 101.43, -66.3, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 1578585151), + (457, 60, 'TheOuterVault', 'exp06_dun_thehole_wing2', 'The Outer Vault', -48, 102, -37, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 295985198), + (458, 60, 'SpiritsResonance', 'exp06_dun_thehole_wing3', 'Spirit\'s Resonance', 336.91, 114.34, -254.43, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 356553526), + (459, 60, 'ToxxuliasMound', 'exp06_dun_toxxulia_mound01', 'Lair of the Dragon Queen', 12.9, 148.77, 2427.59, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 3838745552), + (460, 60, 'Conservatory', 'exp06_dun_vastydeep01', 'Vasty Deep: The Conservatory', -9.24, -7, -30.71, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 954080035), + (461, 60, 'AbandonedLabs', 'exp06_dun_vastydeep02', 'Vasty Deep: The Abandoned Labs', -0.89, -1.57, -1.28, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 2073480066), + (462, 60, 'VestigialCella', 'exp06_dun_vastydeep03', 'Vasty Deep: The Vestigial Cella', -12.9, -10, -3.06, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 1092966222), + (463, 60, 'AbominableLaboratory', 'exp06_dun_vastydeep02', 'Perah\'Celsis\' Abominable Laboratory', 14.47, -34.05, 66.94, 280, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 2962342588), + (464, 60, 'StonebruntHighlands', 'exp06_rgn_odus_north', 'The Stonebrunt Highlands', -481.65, 370.17, 1513.09, 45, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 2369118810), + (465, 60, 'SunderedFrontier', 'exp06_rgn_odus_south', 'The Sundered Frontier', 2213.66, -210.17, 2469.19, 90, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 168443344), + (466, 60, 'exp06_rgn_odus_south_epic01_panda', 'exp06_rgn_odus_south_epic01_panda', 'Describe me in the zones table! :)', 0, 0, 0, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 1822966042), + (467, 0, 'BG_Ganak', 'battleground_ctf', 'Battlefield of Ganak', 0, 0, 0, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 2342906850), + (468, 0, 'BG_Smugglers', 'battleground_nodes', 'Smugglers Den', 0, 0, 0, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 2939036782), + (469, 0, 'BG_Gears', 'battleground_relic01', 'Gears of Klak\'Anon', 0, 0, 0, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 1385404002), + (470, 61, 'FrostfangSea', 'halas', 'Frostfang Sea', -229.542, 34.6202, -725.879, 0, -1000000, 0, 1, 80, '', 0, 0, 0, 0, 0, 0, 32, 'NONE', 0, 0, 0, 0, 'ZoneScripts/FrostfangSea.lua', 300, '', 0, 2507711489), + (472, 0, 'cmmn_epic01_orc', 'cmmn_epic01_orc', 'Bloodskull Valley: Kaljanar\'s Lair', -8.26939, -46, 733.468, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 4207969976), + (473, 0, 'fprt_ph_5r01', 'fprt_ph_5r01', 'the Thexian Meeting', -3.87325, -0.497519, -2.07887, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 1293060228), + (474, 0, 'solusekseye_epic03_thyr', 'solusekseye_epic03_thyr', 'The Oratorium of Thyr: Deserted', -205.749, -617, -189.786, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 1724471149), + (475, 0, 'MurkwaterNook', 'fprt_sewer_epic03', 'The Murkwater Nook', 3.80113, 0.5, -17.8084, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 2224401447), + (476, 0, 'ShatteredStillnessEpic', 'antonica_epic02_firemyst', 'Shattered Stillness: Epic', -1187.3, -1187.3, -1187.3, 0, -1000000, 0, 1, 80, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 19001049), + (477, 0, 'PiratesStashHeroic', 'steppes_mini01', 'Heroic: A Pirate\'s Hidden Stash', 820.961, -12, 1025.16, 0, -1000000, 0, 1, 80, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 2609903017), + (478, 0, 'RumblerCavesHeroic', 'steppes_mini01', 'Heroic: Rumbler Caves', 955.493, -22, 1192.34, 0, -1000000, 0, 1, 80, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 2259272861), + (479, 0, 'HollowHedge', 'live_haunted_cauldroncove', 'The Hollow Hedge', 884.89, 7.44304, -476.69, 0, -1000000, 0, 1, 80, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 697470619), + (480, 70, 'GreatDivide', 'exp07_rgn_great_divide', 'Great Divide', -1422.07, -510.27, -2275.1, 35.46, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 2941246892), + (481, 70, 'EasternWastes', 'exp07_rgn_eastern_wastes', 'Eastern Wastes', -946.3, -336.29, 2365.81, 220, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 627308595), + (482, 70, 'CrystalCaverns', 'exp07_dun_crystalcavern', 'Crystal Caverns: Collapse', 23, -34.32, 91.35, 260, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 4189128104), + (483, 70, 'KaelDrakkel', 'exp07_dun_kael_drakkel', 'Kael Drakkel', 0, 0, 0, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 2072927759), + (484, 70, 'IceshardKeep', 'exp07_dun_kael_iceshard_keep', 'Iceshard Keep', -563.9, 73.3, -25.17, 180, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 1856150992), + (485, 70, 'TempleZek', 'exp07_dun_kael_temple_zek', 'The Temple of Rallos Zek', -618.54, 76.9, -1110.49, 20, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 2060249267), + (486, 70, 'ThroneStorms', 'exp07_dun_kael_throne', 'Throne of Storms', 153.28, 20.17, 1614.75, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 3674709028), + (487, 70, 'KraytocsFortress', 'exp07_dun_kraytocs_fortress', 'Kraytoc\'s Fortress Of Rime', 0, 0, 0, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 3842703654), + (488, 70, 'TowerFrozenShadow', 'exp07_dun_toweroffrozenshadow', 'Tower of Frozen Shadow: Shadowed Corridors', 2, -2, 18.5, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 2305975907), + (489, 70, 'ForgottenPools', 'exp07_dun_velks_forgotten_pools', 'Forgotten Pools', 0, 0, 0, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 2351575362), + (490, 70, 'TheAscent', 'exp07_dun_velks_the_ascent', 'The Ascent', -448, 115, -285, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 737340354), + (491, 0, 'ShatteredVale6', 'antonica_epic01_vale_gu54', 'Describe me in the zones table! :)', -2526.79, 15.67, -50.07, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 1733527721), + (492, 50, 'GukSpire', 'exp05_dun_guk_spire', 'Zraxth\'s Unseen Arcanum', 0, 0, 0, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 4258451007), + (493, 50, 'PalaceAncient', 'exp05_dun_void_palace_crafter', 'Palace of the Ancient One', -145, 2, -3, 268, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 417408192), + (494, 60, 'UnderfootDepths', 'exp06_dun_thehole_raid', 'Underfoot Depths', 0, 32, -63, 180, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 3918641367), + (495, 70, 'SullonsSpire', 'exp07_dun_drunder_sullon_spire', 'Sullon\'s Spire', 0, 0, 0, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 2509995897), + (496, 70, 'TallonsStronghold', 'exp07_dun_drunder_tallon_stronghold', 'Tallon\'s Stronghold', 0, 0, 0, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 4211773782), + (497, 70, 'VallonsTower', 'exp07_dun_drunder_vallon_tower', 'Vallon\'s Tower', 0, 0, 0, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 682362450), + (498, 70, 'OuterKael', 'exp07_dun_kael_drakkel_hub', 'Outer Kael', -2135, 57.36, -1200, 220, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 2607747591), + (499, 70, 'Thurgadin', 'exp_07_thurgadin_velious', 'Thurgadin, City of the Coldain', 985, -308, 367, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 3581557641), + (501, 61, 'Halas1Room', 'halas_ph_1room', 'Halas One Room Housing', 51.16, 49.48, 138.12, 179, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 802201839), + (502, 61, 'Halas3Room', 'halas_ph_3room', 'New Halas Three Room Housing', 34.38, 49.48, -3.1, 270, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 2463865530), + (503, 61, 'Halas5Room', 'halas_ph_5room', 'New Halas Five Room Housing', 33.78, 49.48, -154.57, 270, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 3741636536), + (504, 0, 'SummerHome', 'home_everfrost_menagerie', 'Everfrost Summer Home', -105, -23, -349, 185, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 1539707629), + (505, 10, 'VacationSuite', 'home_majdul_bottle', 'Maj\'Dul Vacation Suite', 0, 0, 0, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 1540644614), + (506, 10, 'PersonalLibrary', 'home_majdul_library', 'Personal Library', 0, 0, 0, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 3298151362), + (507, 0, 'OperaHouse', 'home_neriak_opera', 'Private Opera House', -665, 29, -25, 180, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 834698580), + (508, 0, 'Dojo', 'home_qeynos_dojo', 'Personal Dojo', 0, 0, 0, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 3841277655), + (509, 0, 'live_epic_mystic_odus', 'live_epic_mystic_odus', 'Describe me in the zones table! :)', 0, 0, 0, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 486657895), + (510, 61, 'SkybladeSkiff', 'live_ph_skyblade01', 'Skyblade Skiff', -0.3, 9.86, 76.62, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 3371790322), + (511, 0, 'MistmooreCragsEstate', 'mistmoore_ph_5r01', 'Mistmoore Crags Estate', 6.89, 0.3, -11.2, 112.46, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 1718101213), + (512, 0, 'IcyKeep', 'permafrost_frostfell', 'The Icy Keep (Easy)', 0, 0, 0, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 1450981306), + (513, 0, 'LoveShard', 'shard_of_love', 'Shard of Love: A Moment of Valor', 33.32, -7.56, 105.31, 11, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 599278352), + (514, 0, 'veteran_ph_mistmoore', 'veteran_ph_mistmoore', 'Describe me in the zones table! :)', 30, 16, 254, 95, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 2561929907), + (515, 50, 'HalasGuild1', 'qey_guildhall_tier1', 'Halas Guild Hall', 0, 0, 0, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 285232141), + (516, 61, 'IllbodingDark', 'halas_epic01_necro', 'Cave of Illboding Dark', 738.774, 41.9821, 133.181, 0, -1000000, 0, 12, 15, 'Instanced Indoor', 0, 0, 0, 0, 0, 0, 0, 'QUEST_INSTANCE', 0, 0, 0, 0, '', 300, '', 0, 3635449592), + (517, 61, 'IllbodingDark1', 'halas_epic01_necro', 'Cave of Illboding Dark: The Source', 738.774, 41.9821, 133.181, 0, -1000000, 0, 12, 15, 'Instanced Indoor', 0, 0, 0, 0, 0, 0, 0, 'QUEST_INSTANCE', 0, 0, 0, 0, '', 300, '', 0, 3649530009), + (522, 60, 'VastyDeep', 'exp06_dun_vastydeep04', 'The Vasty Deep', 14, -34, 66, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 874710987), + (523, 60, 'RoehnTheer', 'exp06_dun_erudin_erudin03', 'The Palace of Roehn Theer', -4, 3, 3, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 2576445076), + (524, 10, 'DelvingDead', 'exp01_dun_silent_city', 'Silent City: The Delving Dead', 143, 31, 160, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 710129786), + (525, 0, 'TangledWeeds2', 'enchanted_mini01', 'Heroic: Cavern of Tangled Weeds', -79.8, -2.63, -1120.98, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 1850595577), + (526, 0, 'DarkenedDen', 'orcishwastes_mini01', 'The Darkened Den', 353, -121.77, -57.34, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 1976475018), + (527, 0, 'DarkenedDen2', 'orcishwastes_mini01', 'Heroic: The Darkened Den', 353, -121.77, -57.34, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 3511599308), + (528, 0, 'TallonHalls2', 'orcishwastes_mini01', 'Heroic: The Tallon Hording Halls', 353, -121.77, -57.34, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 3177504651), + (529, 0, 'SullonMines2', 'orcishwastes_mini01', 'Heroic: The Sullon Mines', 353, -121.77, -57.34, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 2808492783), + (530, 0, 'TombNight3', 'mod01_dun_tombs_of_night', 'The Tombs of Night: Retribution', 120.016, -0.5, 120.964, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 3382395703), + (531, 0, 'EchoesTime2', 'cmmn_epic02_mage', 'Echoes of Time: Epic', 863.77, -18.31, 581.92, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 1417748158), + (532, 0, 'IcyKeep3', 'permafrost_frostfell', 'Icy Keep: Retribution', 0, 0, 0, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 3963619840), + (533, 0, 'Acquisition', 'nektulos_mini01', 'Acquisition', 2.53, 2.46, -3.88, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 233219426), + (534, 0, 'QinLo1', 'adv04_dun_endless', 'Trial of Qin Lo: Solo', -33.7, -89.42, 24.8, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 3975257256), + (535, 80, 'ChampionsRespite', 'battleground_lobby', 'Champion\'s Respite', 22.4925, 1, -28.5045, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 581603936), + (536, 80, 'TenebrousRefuge', 'home_floating_island', 'Tenebrous Island Refuge', -41.4936, -1.48073, 96.1204, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 912708921), + (537, 80, 'SleepersTomb', 'exp08_dun_sleepers_tomb', 'Sleeper\'s Tomb: the Awakening', -17.01, -9, 24.93, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 1048562755), + (538, 80, 'SleepersTomb1', 'exp08_dun_sleepers_tomb_destroyed', 'Sleeper\'s Tomb: Unearthed [Raid]', -23, -10, 3.5, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 257992003), + (539, 80, 'SleepersTomb2', 'exp08_dun_sleepers_tomb_destroyed', 'Sleeper\'s Tomb [Contested]', -7, -10, -2.5, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 207236618), + (540, 80, 'SleepersTomb3', 'exp08_dun_sleepers_tomb', 'Sleeper\'s Tomb: The Forgotten Catacombs [Advanced Solo]', 413.5, -118, -84.2, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 2674969966), + (541, 80, 'SleepersTomb4', 'exp08_dun_sleepers_tomb', 'Sleeper\'s Tomb: The Forgotten Catacombs [Heroic]', 412.5, -118, -97.2, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 3137546384), + (542, 80, 'SleepersTomb5', 'exp08_dun_sleepers_tomb', 'Sleeper\'s Tomb: a Temporal Leap [Raid]', -15.7883, -9.71442, 25.6396, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 3100543520), + (543, 70, 'TempleZek1', 'exp07_dun_kael_temple_zek', 'Temple of Rallos Zek: Foundations of Stone', -603.509, 78, -1108.79, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 763380135), + (544, 70, 'TempleZek2', 'exp07_dun_kael_temple_zek', 'Temple of Rallos Zek: Foundations of Stone [Challenge]', -621.509, 78, -1108.79, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 3933678329), + (545, 70, 'ThroneStorms1', 'exp07_dun_kael_throne', 'Throne of Storms: Hall of Legends', -128.696, -11, 789.267, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 1777546843), + (546, 70, 'ThrownStorms2', 'exp07_dun_kael_throne', 'Throne of Storms: Hall of Legends [Challenge]', -128.696, -11, 789.267, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 2257287777), + (547, 0, 'BuriedHideout', 'qey_catacomb_epic03', 'A Buried Hideout', -22, 3.5, 20.8, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 1939516724), + (548, 0, 'DireHollow2', 'nektulos_mini02', 'Dire Hollow: Grim Tidings', 0.8, -1, 3.3, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 378944620), + (549, 70, 'FortressDrunder', 'exp07_dun_drunder_fortress', 'The Fortress of Drunder', -2.1, -0.21, 23.25, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 611439565), + (550, 0, 'desertedmine', 'orcishwastes_mini01', 'The Deserted Mine', 382.376, 8, -95.08, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 4206523056), + (551, 70, 'TowerFrozenShadow1', 'exp07_dun_toweroffrozenshadow', 'Tower of Frozen Shadow: Umbral Halls', -68.33, 293.5, -7.82, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 3725736583), + (552, 70, 'TowerFrozenShadow2', 'exp07_dun_toweroffrozenshadow', 'Tower of Frozen Shadow: Haunt of Syl\'Tor', -40.03, 635.5, 111.46, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 776524994), + (553, 0, 'HiddenVillage', 'feerrott_epic02_froglok', 'The Hidden Village of Kugup', -140.131, 14, 142.309, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 3407712702), + (554, 0, 'CourtAlAfaz', 'exp01_dun_shimmering_citadel', 'The Court of Al\'Afaz', 56.26, 97.454, -124.98, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 4256496104), + (555, 0, 'GatesAhket', 'exp01_dun_living_tombs', 'The Gates of Ahket Aken', -633.189, 5, 371.191, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 1715039045), + (556, 0, 'MeetingMinds', 'feerrott_epic01_temple', 'A Meeting of the Minds', -905.273, -8, 220.462, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 3583391343), + (557, 0, 'LockjawLair', 'exp01_rgn_sinking_sands_epic01_lockjaw', 'Lockjaw\'s Lair', -3.38824, 8, 15.4198, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 3143832939), + (558, 0, 'Meditation', 'adv04_tower_cave', 'The Mediation Chamber', -13.8528, 0.0025, -2.60848, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 3350653370), + (559, 0, 'Freeport', 'freeport_combined', 'The City of Freeport', -232.028, -56.065, 172.565, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 716469914), + (560, 0, 'Nizara', 'adv04_dun_endless', 'Nizara, City of the Nayad', -48.9533, -89, -8.30118, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 729645890), + (561, 0, 'ZanFi', 'adv04_dun_drgn_temple', 'Sepulcher of Zan Fi', 22.0348, 2, 35.0558, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 2763425328), + (562, 0, 'Jiang1', 'adv04_dun_endless', 'Trial of Jiang Anlan: Solo', 50.0781, -89, -7.80834, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 2616412967), + (563, 0, 'Jiang2', 'adv04_dun_endless', 'Trial of Jiang Anlan: Heroic', 51.0781, -89, -8.80834, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 2591092899), + (564, 0, 'TempleScale1', 'exp02_dun_lair_of_scale', 'The Temple of Scale', 11.1522, 135.658, -214.027, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 994882643), + (565, 0, 'TempleScale2', 'exp02_dun_lair_of_scale', 'The Temple of Scale: Pedestal of the Priestess', -12.8215, 57.6019, 263.487, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 4267147135), + (566, 0, 'SunKai1', 'adv04_dun_endless', 'Trial of Sun Kai: Solo', 5.21633, -44, 22.6322, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 1106002034), + (567, 0, 'SunKai2', 'adv04_dun_endless', 'Trial of Sun Kai: Heroic', -0.783668, -44, 23.6322, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 2446330851), + (568, 0, 'LiZhong2', 'adv04_dun_endless', 'Trial of Li Zhong: Heroic', 1.21633, -44, 23.6322, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 3502512801), + (569, 0, 'Sagacious1', 'adv04_dun_endless', 'Trial of Sagacious Ting: Solo', 5.21633, -44, 22.6322, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 1462123052), + (570, 0, 'Sagacious2', 'adv04_dun_endless', 'Trial of Sagacious Ting: Heroic', -0.783668, -44, 23.6322, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 1227304061), + (571, 0, 'BoFen1', 'adv04_dun_endless', 'Trial of Bo Fen: Solo', 50.0781, -89, -7.80834, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 1065240210), + (572, 0, 'BoFen2', 'adv04_dun_endless', 'Trial of Bo Fen: Heroic', 51.0781, -89, -8.80834, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 4031776815), + (573, 0, 'LinVo1', 'adv04_dun_endless', 'Trial of Lin Vo: Solo', 5.21633, -44, 22.6322, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 3776901092), + (574, 0, 'LinVo2', 'adv04_dun_endless', 'Trial of Lin Vo: Heroic', -0.783668, -44, 23.6322, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 3124172364), + (575, 0, 'QinLo2', 'adv04_dun_endless', 'Trial of Qin Lo: Heroic', 50.0781, -89, -7.80834, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 3728328101), + (576, 0, 'Munzoks', 'exp05_dun_void_anchor', 'Munzok\'s Material Bastion', -515.313, 0, 657.814, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 1140436936), + (577, 0, 'CommuneKDal', 'lavastorm_epic02_gulch', 'Commune of K`Dal', -189.774, 4, -338.747, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 603402304), + (578, 0, 'ForgeOfAges', 'lavastorm_epic01_sanctum', 'The Infernal Forge of Ages', -313.356, -48, -744.563, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 1977557393), + (584, 70, 'ThurgadinGrandHall', 'thurgadin_prestige_home', 'Thurgadin Grand Hall', -347.295, -279.667, -387.081, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 1249872435), + (585, 70, 'CrystallineBreaks', 'exp07_dun_crystalcavern', 'Crystalline Breaks', 23.9496, -33, 92.1147, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 1540772621), + (586, 70, 'HoldOfRime1', 'exp07_dun_velks_the_ascent', 'Hold of Rime: The Ascent', 1.28, -5, -2.78, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 685883790), + (587, 70, 'HoldOfRime2', 'exp07_dun_kraytocs_fortress', 'Hold of Rime: The Fortress Spire', -53.72, 1, -25.84, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 2268102256), + (588, 70, 'KraytocsFortress2', 'exp07_dun_kraytocs_fortress', 'Kraytoc\'s Fortress of Rime [Challenge]', 0.292056, 0, 2.30359, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 707353607), + (589, 80, 'Qeynos', 'qeynos_combined01', 'Qeynos Capitol District', 396.938, -20.9182, -175.205, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 740104698), + (590, 0, 'UnkemptVale', 'antonica_epic01_vale', 'The Unkempt Vale: A Lordly Confrontation', -2358.17, 11, -53.2353, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 938907661), + (591, 0, 'FarPelican', 'boat_06p_feerrott', 'The Far Pelican', 0.912209, 2, -18.9637, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 1683841340), + (592, 0, 'AzhubsShip', 'boat_06p_lavastorm', 'Azhub\'s Ship', 3.12657, -1.5, -7.73107, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 1286725707), + (593, 0, 'ChamberKeeper', 'cazicthule_epic01_sanctum', 'The Chamber of the Keeper', 0.464886, -9.9975, -179.077, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 868877514), + (594, 0, 'GnollCave', 'enchanted_mini01', 'A Gnoll Cave', -340.291, 3.79318, -628.419, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 3769515479), + (595, 0, 'ForbiddenSepulcher', 'everfrost_epic02_icespire', 'The Forbidden Sepulcher', -75.0322, 60, -893.966, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 1896185871), + (596, 10, 'MajDul3Residence2', 'exp01_cty_majdul_3r02', 'A Maj\'Dul Residence', 9.43738, 0.5, 1.00831, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 1613383542), + (597, 10, 'AzharsPenitence', 'exp01_dun_shimmering_citadel_epic01_bottle', 'Azhar\'s Penitence', 0.61955, 1, 52.6354, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 1796401397), + (598, 10, 'PalaceSabaron', 'exp01_dun_shimmering_citadel_epic02_prism', 'The Palace of Sabaron', -19.5178, -6.1451, -26.9855, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 39282643), + (599, 10, 'AncientsTable', 'exp01_rgn_pillars_of_flame_epic01_cazel', 'Ancient\'s Table', 1.47885, -0.100438, 7.03403, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 694743090), + (600, 10, 'ScornfeatherRoost', 'exp01_rgn_pillars_of_flame_epic01_cazel', 'Scornfeather Roost', 2.83403, 1, 5.48852, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 98362481), + (601, 10, 'HiddenCache', 'exp01_rgn_sinking_sands_epic01_lockjaw', 'The Hidden Cache', 111.747, -10, -109.677, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 1637906398), + (602, 10, 'Sanctorium', 'exp01_rgn_sinking_sands_epic01_lockjaw', 'The Sanctorium', -8.69045, 8, 7.14274, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 2362130991), + (603, 20, 'LaboratoryLordVyemm', 'exp02_dun_halls_of_fate', 'The Laboratory of Lord Vyemm', -124.634, -68, 451.577, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 598407856), + (604, 20, 'AscentAwakened', 'exp02_dun_shrines_of_sky', 'Ascent of the Awakened', -66.3987, 0.5, 1.96815, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 931857537), + (605, 30, 'HauntedVaults', 'exp03_dun_kaladim_stormguard_hall', 'The Haunted Vaults', 157.515, 18, -61.1178, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 759321130), + (606, 40, 'EmperorsAthenaeum', 'exp04_dun_charasis_west', 'Emperor\'s Athenaeum', 3.15, 0, 2.12, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 4005035570), + (607, 40, 'TempleCabilis', 'exp04_dun_sebilis_quarters', 'Lost Temple of Cabilis', 109.789, -10.4975, 219.764, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 2450210553), + (608, 50, 'UnseenArcanum', 'exp05_dun_guk_spire', 'Zraxth\'s Unseen Arcanum', 6.53, 9, -21.41, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 1536294196), + (609, 50, 'PlanarShard', 'exp05_dun_miragul_shard', 'Miragul\'s Planar Shard', -19.08, 1, -61.93, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 3746534304), + (610, 60, 'Vigilant2', 'exp06_dun_sentinal', 'The Vigilant: Incursion', 0.86, 3, 126.88, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 1989186960), + (611, 60, 'Vigilant3', 'exp06_dun_sentinal', 'The Vigilant: Infiltration', 4.27, 85, -23.32, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 1121019415), + (612, 60, 'Vigilant4', 'exp06_dun_sentinal', 'The Vigilant: Rescue', 0.06, 62, -116.18, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 120899782), + (613, 60, 'DarkCave', 'exp06_rgn_odus_north', 'A Dark Cave', 191.68, 239, 255.42, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 70815476), + (614, 70, 'SpireRage', 'exp07_dun_drunder_sullon_spire', 'Spire of Rage', 2.12005, 0, -6.13393, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 2851100105), + (615, 70, 'SullonsSpire2', 'exp07_dun_drunder_sullon_spire', 'Sullon\'s Spire [Challenge]', 1.09203, 0, -2.46779, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 2650249652), + (616, 70, 'CitadelVuul', 'exp07_dun_drunder_tallon_stronghold', 'Citadel of V\'uul', 3.09203, 0, -1.46779, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 1196441431), + (617, 70, 'TallonsStronghold2', 'exp07_dun_drunder_tallon_stronghold', 'Tallon\'s Stronghold [Challenge]', 5.09203, 0, -7.46779, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 1525292467), + (618, 70, 'VallonsTower2', 'exp07_dun_drunder_vallon_tower', 'Vallon\'s Tower [Challenge]', -4.90797, 0, -6.46779, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 3334958337), + (619, 70, 'ElementsWar', 'exp07_dun_plane_of_war', 'Elements of War', -61.5, 102, -104.63, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 2667052143), + (620, 70, 'ElementsWar2', 'exp07_dun_plane_of_war', 'Elements of War [Challenge]', -60.5, 102, -101.63, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 702515518), + (621, 70, 'PlaneWar', 'exp07_dun_plane_of_war', 'Plane of War', -60.7, 56, 818.66, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 4064403794), + (622, 80, 'Skyshrine', 'exp08_dun_skyshrine_courtyard01_scorched', 'Skyshrine: The City of Dracur', -1.03, 0, -24.95, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 3070042545), + (623, 80, 'WitheredLands', 'exp08_rgn_withered_lands', 'The Withered Lands', -555.08, -685.734, 367.063, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 1535573742), + (624, 90, 'Chelsith2', 'exp09_dun_deepchelsith', 'Chelsith: The Ancient Vault', -44.18, 10.77, 6.55, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 3466679736), + (625, 90, 'Chelsith1', 'exp09_dun_deepchelsith', 'Chelsith: The Ancient Vault [Advanced Solo]', -44.18, 10.77, 6.55, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 2241866888), + (626, 90, 'HarrowsEnd24', 'exp09_dun_drinals_castle', 'Harrow\'s End (Raid)', 8.8, -7, 147.6, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 1203059563), + (627, 90, 'HarrowsEnd6', 'exp09_dun_drinals_castle', 'Harrow\'s End: Baleful Dominion (Heroic)', 8.8, -7, 147.6, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 4194809031), + (628, 90, 'Dreadcutter', 'exp09_dun_drinals_ferry', 'The Dreadcutter', -6.17, 24, 74.69, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 302382115), + (629, 90, 'Dreadcutter1', 'exp09_dun_drinals_ferry', 'The Dreadcutter [Advanced Solo]', -6.29, 24, 74.91, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 2542978235), + (630, 90, 'AltarAbhorrence24', 'exp09_dun_temple_of_faceless', 'Altar of Abhorrence (Raid)', -405.79, 2, 464.82, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 324758579), + (631, 90, 'TempleFaceless6', 'exp09_dun_temple_of_faceless', 'Temple of the Faceless (Heroic)', -404.79, 2, 463.82, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 1777943443), + (632, 90, 'TempleFaceless1', 'exp09_dun_temple_of_faceless', 'Temple of the Faceless: Imprisonment (Advanced Solo)', -405.79, 2, 462.82, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 2969993788), + (633, 90, 'ThroneFear6', 'exp09_dun_throne_of_fear', 'Throne of Fear (Heroic)', -317.01, 1, -2.59, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 981143259), + (634, 90, 'ThroneFear1', 'exp09_dun_throne_of_fear', 'Throne of Fear: Ascension (Advanced Solo)', -317.01, 1, -2.59, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 2159319178), + (635, 90, 'ThroneFear2', 'exp09_dun_throne_of_fear', 'Throne of Fear: The Fear Gate', 210.733, 72.34, 44.4457, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 3648292296), + (636, 90, 'WurmbonesEnd', 'exp09_dun_wurmbones_end', 'Wurmbone\'s End', -16.89, -128, 335.57, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 2090669585), + (637, 90, 'WurmbonesEnd1', 'exp09_dun_wurmbones_end', 'Wurmbone\'s End [Advanced Solo]', -16.3104, -129.714, 334.796, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 418475608), + (638, 90, 'WurmboneCrag', 'exp09_dun_wurmbone_gulch', 'Wurmbone Crag', 89.99, 14, 267.1, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 4070843496), + (639, 90, 'WurmboneCrag1', 'exp09_dun_wurmbone_gulch', 'Wurmbone Crag [Advanced Solo]', 89.99, 14, 267.1, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 1585901758), + (640, 90, 'EidolonJungle', 'exp09_rgn_eidolon_jungle', 'The Eidolon Jungle', -2159.75, 222.393, 768.29, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 545027572), + (641, 90, 'ObolPlains', 'exp09_rgn_plains_of_obol', 'Obol Plains', 64.8961, 13.5217, 965.592, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 126142372), + (642, 0, 'VaultFallen', 'fallengate_epic01_boss', 'The Vault of the Fallen', 35.3134, -26.21, -189.683, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 932928636), + (643, 0, 'DenCellar', 'fprt_epic01_storeroom01', 'Jade Tiger\'s Den Cellar', 0.187354, 0.328323, -4.61251, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 2451593186), + (644, 0, 'BigBend2', 'fprt_hood01', 'Big Bend: Sanctum of Spirits', -4.04, 3, -69.27, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 2366221557), + (645, 0, 'StonestairByway2', 'fprt_hood02', 'Stonestair Byway: The Animus Corridors', 9.07333, -4, -101.943, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 4205698383), + (646, 0, 'TempleStreet2', 'fprt_hood03', 'Temple Street: Vault of Necromechanica', 17.7, 3.5, 23.14, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 1757098077), + (647, 0, 'BeggarsCourt2', 'fprt_hood04', 'Beggar\'s Court: Sweat-Stained Cobbles', 67.1062, -6.5, 112.909, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 2708424193), + (648, 0, 'LongshadowAlley2', 'fprt_hood05', 'Longshadow Alley: Daeneth Cloister', 13.8144, 3.5, 74.3103, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 2777048224), + (649, 0, 'ScaleYard2', 'fprt_hood06', 'Scale Yard: Traitors\' End', -7.95922, -5, -9.88693, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 3411094155), + (650, 0, 'Court', 'home_citadel', 'Court', 98.3708, 146.589, -58.8835, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 3864808754), + (651, 0, 'FelwitheMansion', 'home_felwithe_throne', 'Felwithe Mansion', -76.8586, 69.2698, -888.608, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 2163020640), + (652, 0, 'ArcaneAcademy', 'home_freeport', 'Arcane Academy', -5.84555, -6.23708, -123.799, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 2085328324), + (653, 0, 'TowerofKnowledge', 'home_magetower', 'Tower of Knowledge', -19.8019, -1.08077, -0.287789, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 979361544), + (654, 10, 'AstronomersTower', 'home_majdul_moon', 'Maj\'Dul Astronomer\'s Tower', -0.011612, -0.158504, 1.65973, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 2077481292), + (655, 0, 'PersonalPlanetarium', 'home_poets_pedestal', 'Personal Planetarium', -48.9755, -0.570557, -0.313724, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 2895880348), + (656, 0, 'StormTowerIsle', 'home_stormy_isle', 'Storm Tower Isle', 35.6977, 44.7829, -101.576, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 457594060), + (657, 0, 'SecludedSanctum', 'home_sullon_spire', 'Secluded Sanctum', 117.699, 356.786, -54.65, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 2665644280), + (658, 0, 'UncannyEstate', 'home_unrest', 'Uncanny Estate', -0.011612, -0.064752, 1.65973, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 2261834051), + (659, 0, 'ResearchSanctum', 'home_vasty_library', 'Research Sanctum', 21.2437, -14.9975, -383.902, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 2580496839), + (660, 90, 'QeynosProvince', 'qeynos_combined02', 'Qeynos Province District', 819.286, -23.3299, 65.9943, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 1888326245), + (661, 0, 'BuccaneersHideout', 'qey_epic06_p12_irontoes', 'Buccaneers\' Hideout', 1.62288, -0.276476, -2.56662, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 1813992810), + (662, 0, 'SeedTunarbos', 'qey_ph_3r01', 'The Seed of Tunarbos', 0.066109, -2, 7.9765, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 597408693), + (663, 0, 'FightClub', 'qey_ph_3r03', 'Fight Club', 1.60767, -1.99737, 7.14355, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 902117370), + (664, 80, 'GrandHall', 'thurgadin_prestige_home', 'Grand Hall', -347.295, -279.667, -387.081, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 1066222316), + (665, 0, 'DaratharsFlight', 'tutorial_island02', 'The Isle of Refuge: Darathar\'s Flight', -10.2996, -2.91619, 167.785, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 712866647), + (666, 0, 'PermafrostCrypt', 'permafrost_frostfell', 'Permafrost Crypt: Decorating Retribution', -35.4254, 2.72433, -575.952, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 3906013280), + (667, 0, 'IcyKeep4', 'permafrost_frostfell', 'The Icy Keep (Hard)', 0.995131, 1, 3.07628, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 3727147705), + (668, 110, 'antonica_epic03_prelude', 'antonica_epic03_prelude', 'Describe me in the zones table! :)', -2351, 9, -60, 114, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 132337079), + (669, 110, 'arena_of_the_gods', 'arena_of_the_gods', 'Describe me in the zones table! :)', 0, 0, 0, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 1431508726), + (670, 110, 'battleground_defense', 'battleground_defense', 'Describe me in the zones table! :)', 0, 2, 0, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 1911547645), + (671, 110, 'dyod_chardok_layout01', 'dyod_chardok_layout01', 'Describe me in the zones table! :)', 0, 0, 0, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 841620457), + (672, 110, 'dyod_crushbone_layout01', 'dyod_crushbone_layout01', 'Describe me in the zones table! :)', 0, 0, 0, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 1381577611), + (673, 110, 'dyod_crushbone_layout02', 'dyod_crushbone_layout02', 'Describe me in the zones table! :)', 0, 0, 0, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 3732204929), + (674, 110, 'dyod_crushbone_layout03', 'dyod_crushbone_layout03', 'Describe me in the zones table! :)', 0, 0, 0, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 2084751320), + (675, 110, 'dyod_crushbone_layout04', 'dyod_crushbone_layout04', 'Describe me in the zones table! :)', 0, 0, 0, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 453115323), + (676, 110, 'dyod_crushbone_layout05', 'dyod_crushbone_layout05', 'Describe me in the zones table! :)', 0, 0, 0, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 3444894973), + (677, 110, 'dyod_lairofscale_layout01', 'dyod_lairofscale_layout01', 'Describe me in the zones table! :)', 0, 0, 0, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 663025097), + (678, 110, 'dyod_lairofscale_layout02', 'dyod_lairofscale_layout02', 'Describe me in the zones table! :)', 0, 0, 0, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 4062510352), + (679, 110, 'dyod_lairofscale_layout03', 'dyod_lairofscale_layout03', 'Describe me in the zones table! :)', 0, 0, 0, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 3780867910), + (680, 110, 'dyod_lairofscale_layout04', 'dyod_lairofscale_layout04', 'Describe me in the zones table! :)', 0, 0, 0, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 98510894), + (681, 110, 'dyod_mistmoore_layout01', 'dyod_mistmoore_layout01', 'Describe me in the zones table! :)', 0, 0, 0, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 3980177101), + (682, 110, 'dyod_mistmoore_layout02', 'dyod_mistmoore_layout02', 'Describe me in the zones table! :)', 0, 0, 0, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 2970591846), + (683, 110, 'dyod_mistmoore_layout03', 'dyod_mistmoore_layout03', 'Describe me in the zones table! :)', 0, 0, 0, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 93754491), + (684, 110, 'dyod_mistmoore_layout04', 'dyod_mistmoore_layout04', 'Describe me in the zones table! :)', 0, 0, 0, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 1367151795), + (685, 110, 'dyod_mistmoore_layout05', 'dyod_mistmoore_layout05', 'Describe me in the zones table! :)', 0, 0, 0, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 2817592037), + (686, 110, 'dyod_poets_layout01', 'dyod_poets_layout01', 'Describe me in the zones table! :)', 0, 0, 0, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 224844426), + (687, 110, 'everfrost_frostfell_new01', 'everfrost_frostfell_new01', 'Describe me in the zones table! :)', 102, -3, -1145, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 695382110), + (688, 110, 'exp02_rgn_realm_of_night_epic', 'exp02_rgn_realm_of_night_epic', 'Describe me in the zones table! :)', 0, -359, 0, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 2889839206), + (689, 110, 'exp03_rgn_emerald_halls_hq', 'exp03_rgn_emerald_halls_hq', 'Describe me in the zones table! :)', 530, 96, -718, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 3016383215), + (690, 110, 'exp06_dun_erudin_deathmatch', 'exp06_dun_erudin_deathmatch', 'Describe me in the zones table! :)', 0, 0, 0, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 3916063111), + (691, 110, 'exp06_dun_thehole_kabar', 'exp06_dun_thehole_kabar', 'Describe me in the zones table! :)', 0, 0, 0, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 2272134118), + (692, 110, 'exp06_rgn_odus_south_kerra', 'exp06_rgn_odus_south_kerra', 'Describe me in the zones table! :)', 1295, -27, 2477, 180, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 2953554347), + (693, 110, 'exp08_dun_sirensfrotto01', 'exp08_dun_sirensfrotto01', 'Describe me in the zones table! :)', 0, 0, 0, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 390008010), + (694, 110, 'exp08_dun_skyshrine_courtyard01', 'exp08_dun_skyshrine_courtyard01', 'Describe me in the zones table! :)', 0, 2, 0, 360, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 4176480526), + (695, 110, 'exp08_dun_skyshrine_courtyard01_scorched_arcane', 'exp08_dun_skyshrine_courtyard01_scorched_arcane', 'Describe me in the zones table! :)', 0, 2, 0, 360, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 2266046763), + (696, 110, 'exp08_dun_skyshrine_courtyard01_scorched_capital', 'exp08_dun_skyshrine_courtyard01_scorched_capital', 'Describe me in the zones table! :)', 0, 2, 0, 360, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 1341532373), + (697, 110, 'exp08_dun_skyshrine_courtyard01_scorched_market', 'exp08_dun_skyshrine_courtyard01_scorched_market', 'Describe me in the zones table! :)', 0, 2, 0, 360, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 649821061), + (698, 0, 'exp08_dun_skyshrine_lower01', 'exp08_dun_skyshrine_lower01', 'Describe me in the zones table! :)', 0, 0, 0, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 3140833851), + (699, 0, 'exp08_dun_skyshrine_top01_final', 'exp08_dun_skyshrine_top01_final', 'Describe me in the zones table! :)', 0, 0, 0, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 4029228656), + (700, 110, 'exp08_dun_sleepers_tomb_epic01_chitari', 'exp08_dun_sleepers_tomb_epic01_chitari', 'Describe me in the zones table! :)', 416, -119, -58, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 4283195220), + (701, 110, 'exp08_rgn_velious_cobalt_scar', 'exp08_rgn_velious_cobalt_scar', 'Describe me in the zones table! :)', 4377, -821, 332, 180, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 376249753), + (702, 110, 'exp08_rgn_velious_cobalt_scar_combine', 'exp08_rgn_velious_cobalt_scar_combine', 'Describe me in the zones table! :)', 0, 0, 0, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 532242539), + (703, 110, 'exp08_rgn_velious_cobalt_scar_dragon', 'exp08_rgn_velious_cobalt_scar_dragon', 'Describe me in the zones table! :)', 0, 0, 0, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 1566585178), + (704, 110, 'exp08_rgn_velious_withered_lands', 'exp08_rgn_velious_withered_lands', 'Describe me in the zones table! :)', -3699, -779, -218, 268, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 913238763), + (705, 110, 'exp08_rgn_withered_lands_epic01', 'exp08_rgn_withered_lands_epic01', 'Describe me in the zones table! :)', -24, -627, -667, 180, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 3384724582), + (706, 110, 'exp08_rgn_withered_lands_epic02', 'exp08_rgn_withered_lands_epic02', 'Describe me in the zones table! :)', 0, 0, 0, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 3654988134), + (707, 110, 'exp09_dun_wurmbones_end_x2', 'exp09_dun_wurmbones_end_x2', 'Describe me in the zones table! :)', -14, -130, 315, 351, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 463727744), + (708, 110, 'exp10_dun_bixie_hive', 'exp10_dun_bixie_hive', 'Describe me in the zones table! :)', 102, -28, -177, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 3279878396), + (709, 110, 'exp10_dun_highkeep', 'exp10_dun_highkeep', 'Describe me in the zones table! :)', 5, -36, 10, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 3869064488), + (710, 110, 'exp10_dun_highkeep_contested', 'exp10_dun_highkeep_contested', 'Describe me in the zones table! :)', 5, -36, 10, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 840435318), + (711, 110, 'exp10_dun_nexus', 'exp10_dun_nexus', 'Describe me in the zones table! :)', 0, 2, 21, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 3366428813), + (712, 110, 'exp10_dun_nexus2', 'exp10_dun_nexus2', 'Describe me in the zones table! :)', 0, 2, 21, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 2405730087), + (713, 110, 'exp10_dun_pickclaw', 'exp10_dun_pickclaw', 'Describe me in the zones table! :)', -108, -132, -34, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 2588002098), + (714, 110, 'exp10_dun_shissarraid01', 'exp10_dun_shissarraid01', 'Describe me in the zones table! :)', 0, -25, 0, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 2945149120), + (715, 110, 'exp10_dun_shissarstratum01', 'exp10_dun_shissarstratum01', 'Describe me in the zones table! :)', -115, 1687, 0, 270, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 2969419179), + (716, 110, 'exp10_dun_shissartemple01', 'exp10_dun_shissartemple01', 'Describe me in the zones table! :)', 0, -25, 0, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 3538559076), + (717, 110, 'exp10_dun_shissartemple01_forgotten', 'exp10_dun_shissartemple01_forgotten', 'Describe me in the zones table! :)', 0, -25, 0, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 3526591963), + (718, 110, 'exp10_dun_temple_of_veeshan', 'exp10_dun_temple_of_veeshan', 'Describe me in the zones table! :)', 0, 0, 0, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 2107946064), + (719, 110, 'exp10_dun_temple_of_veeshan_hub', 'exp10_dun_temple_of_veeshan_hub', 'Describe me in the zones table! :)', 0, 0, 0, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 314278652), + (720, 110, 'exp10_rgn_dragons_realm', 'exp10_rgn_dragons_realm', 'Describe me in the zones table! :)', -134, 213, 364, 329, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 3437614246), + (721, 110, 'exp11_dun_cathedral_of_bone', 'exp11_dun_cathedral_of_bone', 'Describe me in the zones table! :)', 0, 8, 0, 185, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 3185806473), + (722, 110, 'exp11_dun_cathedral_of_bone_heroic', 'exp11_dun_cathedral_of_bone_heroic', 'Describe me in the zones table! :)', 0, 8, 0, 185, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 1618744096), + (723, 110, 'exp11_dun_highhold', 'exp11_dun_highhold', 'Describe me in the zones table! :)', 0, -109, 0, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 1742318971), + (724, 110, 'exp11_dun_highhold_action', 'exp11_dun_highhold_action', 'Describe me in the zones table! :)', 96, -109, 22, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 3492641864), + (725, 110, 'exp11_dun_highhold_night', 'exp11_dun_highhold_night', 'Describe me in the zones table! :)', 0, -109, 0, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 2300296853), + (726, 110, 'exp11_dun_pirate_cove', 'exp11_dun_pirate_cove', 'Describe me in the zones table! :)', 0, 0, 0, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 1553950146), + (727, 110, 'exp11_dun_pirate_cove_01', 'exp11_dun_pirate_cove_01', 'Describe me in the zones table! :)', 0, 0, 0, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 1138547426), + (728, 110, 'exp11_dun_pirate_cove_02', 'exp11_dun_pirate_cove_02', 'Describe me in the zones table! :)', 0, 0, 0, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 2841061516), + (729, 110, 'exp11_dun_pirate_cove_03', 'exp11_dun_pirate_cove_03', 'Describe me in the zones table! :)', -144.44, -121.68, -455.68, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 1714137865), + (730, 110, 'exp11_dun_pirate_cove_raid', 'exp11_dun_pirate_cove_raid', 'Describe me in the zones table! :)', 78.62, 146.55, -409.8, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 596337404), + (731, 0, 'exp11_dun_rum_cellar', 'exp11_dun_rum_cellar', 'F.S. Distillery: The Rum Cellar', -2, -100, 24, 143, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 2718436271), + (732, 110, 'exp11_dun_ssraeshza', 'exp11_dun_ssraeshza', 'Describe me in the zones table! :)', 0, 5, 0, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 2814388790), + (733, 110, 'exp11_dun_ssraeshza_raid', 'exp11_dun_ssraeshza_raid', 'Describe me in the zones table! :)', 0, 5, 0, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 4142844343), + (734, 110, 'exp11_dun_zavithloa', 'exp11_dun_zavithloa', 'Describe me in the zones table! :)', -3621, -61, -208, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 4146604993), + (735, 110, 'exp11_dun_zavithloa_raid', 'exp11_dun_zavithloa_raid', 'Describe me in the zones table! :)', -3484, 20, -135, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 572130904), + (736, 110, 'exp11_rgn_north_seas', 'exp11_rgn_north_seas', 'Describe me in the zones table! :)', 1389, 25, 1191, 93, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 1014873861), + (737, 110, 'exp11_rgn_southseas', 'exp11_rgn_southseas', 'Describe me in the zones table! :)', 936, 7, 1478, 16, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 3084178644), + (738, 110, 'fprt_epic06_new_temple', 'fprt_epic06_new_temple', 'Describe me in the zones table! :)', 0, 0, 0, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 677607685), + (739, 110, 'fprt_epic07_new_jade_tiger', 'fprt_epic07_new_jade_tiger', 'Describe me in the zones table! :)', 0, 0, 0, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 1212556885), + (740, 110, 'guildhall_highkeep', 'guildhall_highkeep', 'Describe me in the zones table! :)', -96.41, -75.76, -38.81, 177.74, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 2124020905), + (741, 110, 'guildhall_highkeep_tier2', 'guildhall_highkeep_tier2', 'Describe me in the zones table! :)', 71, -77, -30, 170, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 2919533739), + (742, 110, 'haunted_house', 'haunted_house', 'Describe me in the zones table! :)', 0, 0, 0, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 1970634451), + (743, 110, 'home_darklightpalace', 'home_darklightpalace', 'Describe me in the zones table! :)', -588, 28, 18, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 1742084918), + (744, 110, 'home_enchanted', 'home_enchanted', 'Describe me in the zones table! :)', 0, 0, 0, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 1687078387), + (745, 110, 'home_fearshard', 'home_fearshard', 'Describe me in the zones table! :)', 0, 40, -63, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 2306415537), + (746, 110, 'home_ferry', 'home_ferry', 'Describe me in the zones table! :)', 0, 20, 0, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 3773039002), + (747, 110, 'home_gnome', 'home_gnome', 'Describe me in the zones table! :)', -647, 128, 844, 202, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 1825593746), + (748, 110, 'home_kael_iceshard', 'home_kael_iceshard', 'Describe me in the zones table! :)', 2, 1, 6, 178, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 420363908), + (749, 110, 'home_lavastorm', 'home_lavastorm', 'Describe me in the zones table! :)', 0, 0, 0, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 1010023598), + (750, 110, 'home_majdul_blades', 'home_majdul_blades', 'Describe me in the zones table! :)', 0, 0, 0, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 3247741091), + (751, 110, 'home_oakmyst', 'home_oakmyst', 'Describe me in the zones table! :)', 1099, -10, -382, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 1970102414), + (752, 110, 'home_panda', 'home_panda', 'Describe me in the zones table! :)', -204, 278, 3271, 9, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 490465230), + (753, 110, 'home_respite', 'home_respite', 'Describe me in the zones table! :)', 0, 3, 0, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 3951525047), + (754, 110, 'home_sirens', 'home_sirens', 'Describe me in the zones table! :)', 0, 5, 0, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 329504416), + (755, 110, 'home_void_palace', 'home_void_palace', 'Describe me in the zones table! :)', 0, 14, 0, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 2564542008), + (756, 110, 'home_wuoshi', 'home_wuoshi', 'Describe me in the zones table! :)', 82, 381, 188, 18, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 3759939330), + (757, 110, 'live_epic_mystic_horde', 'live_epic_mystic_horde', 'Describe me in the zones table! :)', 0, 0, 0, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 3090744409), + (758, 110, 'mystery_crate', 'mystery_crate', 'Describe me in the zones table! :)', 0, 0, 0, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 305572194), + (759, 110, 'qey_catacomb_epic06', 'qey_catacomb_epic06', 'Describe me in the zones table! :)', 0, 0, 0, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 801954405), + (760, 110, 'qey_village01_revamp', 'qey_village01_revamp', 'Describe me in the zones table! :)', 671, -20, 273, 121, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 3807954746), + (761, 110, 'qey_village02_revamp', 'qey_village02_revamp', 'Describe me in the zones table! :)', 702, -20, 265, 269, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 548500959), + (762, 110, 'qey_village03_revamp', 'qey_village03_revamp', 'Describe me in the zones table! :)', 865, -25, -97, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 610240028), + (763, 110, 'qey_village04_revamp', 'qey_village04_revamp', 'Describe me in the zones table! :)', 729, -21, -123, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 2366316250), + (764, 110, 'qey_village05_revamp', 'qey_village05_revamp', 'Describe me in the zones table! :)', 810, -21, -565, 327, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 307215531), + (765, 110, 'qey_village06_revamp', 'qey_village06_revamp', 'Describe me in the zones table! :)', 818, -20, -529, 200, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 3815152867), + (766, 110, 'shard_of_love2', 'shard_of_love2', 'Describe me in the zones table! :)', 0, 0, 0, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 4063297711), + (767, 110, 'snow_dwelling', 'snow_dwelling', 'Describe me in the zones table! :)', 0, 0, 0, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 1825318906), + (768, 110, 'solusekeye_epic04_elemental_nagafen', 'solusekeye_epic04_elemental_nagafen', 'Describe me in the zones table! :)', 0, 0, 0, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 3340372210), + (769, 110, 'avatar_arena', 'avatar_arena', 'Describe me in the zones table! :)', 0, 4, 0, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 3479306047), + (770, 0, 'GrozmagsTrial', 'tutorial_island02_epic01', 'Grozmag\'s Trial', -12.7713, 1, -0.996791, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 126984764), + (771, 0, 'AnOpenGrave', 'steppes_mini01', 'An Open Grave', 746.48, -26.93, 1070, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 2951589884), + (772, 0, 'AnOpenGraveHeroic', 'steppes_mini01', 'Heroic: An Open Grave', 746.48, -26.93, 1070, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 3147956527), + (773, 81, 'exp11_dun_rum_cellar_02', 'exp11_dun_rum_cellar_02', 'Describe me in the zones table! :)', 0, 0, 0, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 0, '', 0, 2948619023), + (774, 0, 'exp11_dun_rumcellar_island', 'exp11_dun_rumcellar_island', 'Describe me in the zones table! :)', 0, 0, 0, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 0, '', 0, 1354398952), + (775, 0, 'exp12_dun_ancientruins', 'exp12_dun_ancientruins', 'Describe me in the zones table! :)', 71, 89, 262, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 0, '', 0, 685266090), + (776, 0, 'exp12_dun_ancientruins_event_01', 'exp12_dun_ancientruins_event_01', 'Describe me in the zones table! :)', 71, 89, 262, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 0, '', 0, 192920980), + (777, 0, 'exp12_dun_ancientruins_event_02', 'exp12_dun_ancientruins_event_02', 'Describe me in the zones table! :)', 71, 89, 262, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 0, '', 0, 2332331348), + (778, 81, 'exp12_dun_maldura_01', 'exp12_dun_maldura_01', 'Describe me in the zones table! :)', 0, 0, 0, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 0, '', 0, 823329538), + (779, 81, 'exp12_dun_maldura_02', 'exp12_dun_maldura_02', 'Describe me in the zones table! :)', 0, 0, 0, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 0, '', 0, 2314614263), + (780, 0, 'exp12_dun_maldura_city', 'exp12_dun_maldura_city', 'Describe me in the zones table! :)', -43.81, -4.21, 42.43, 360, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 0, '', 0, 1226500868), + (781, 0, 'exp12_dun_maldura_event_01', 'exp12_dun_maldura_event_01', 'Describe me in the zones table! :)', -43.81, -4.21, 42.43, 360, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 0, '', 0, 3708197709), + (782, 81, 'exp12_dun_maldura_event_02', 'exp12_dun_maldura_event_02', 'Describe me in the zones table! :)', 0, 0, 0, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 0, '', 0, 3934921899), + (783, 0, 'exp12_dun_maldura_raid', 'exp12_dun_maldura_raid', 'Describe me in the zones table! :)', -43.81, -4.21, 42.43, 360, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 0, '', 0, 1476505818), + (784, 81, 'exp12_dun_maldura_raid_x2', 'exp12_dun_maldura_raid_x2', 'Describe me in the zones table! :)', 0, 0, 0, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 0, '', 0, 4095908642), + (785, 81, 'exp12_dun_penumbra', 'exp12_dun_penumbra', 'Describe me in the zones table! :)', 0, 0, 0, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 0, '', 0, 3820526153), + (786, 81, 'exp12_dun_penumbra01', 'exp12_dun_penumbra01', 'Describe me in the zones table! :)', 0, 0, 0, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 0, '', 0, 963483821), + (787, 81, 'exp12_dun_penumbra02', 'exp12_dun_penumbra02', 'Describe me in the zones table! :)', 0, 0, 0, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 0, '', 0, 3138601569), + (788, 81, 'exp12_dun_penumbra03', 'exp12_dun_penumbra03', 'Describe me in the zones table! :)', 0, 0, 0, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 0, '', 0, 3052833538), + (789, 81, 'exp12_dun_penumbra_04', 'exp12_dun_penumbra_04', 'Describe me in the zones table! :)', 0, 0, 0, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 0, '', 0, 618428885), + (790, 81, 'exp12_dun_penumbra_event_01', 'exp12_dun_penumbra_event_01', 'Describe me in the zones table! :)', 0, 0, 0, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 0, '', 0, 107939750), + (791, 81, 'exp12_dun_penumbra_event_02', 'exp12_dun_penumbra_event_02', 'Describe me in the zones table! :)', 0, 0, 0, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 0, '', 0, 2012111165), + (792, 81, 'exp12_dun_penumbra_raid', 'exp12_dun_penumbra_raid', 'Describe me in the zones table! :)', 0, 0, 0, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 0, '', 0, 3293665096), + (793, 0, 'exp12_rgn_umbra02', 'exp12_rgn_umbra02', 'Describe me in the zones table! :)', -551.97, 161.92, 65.55, 356, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 0, '', 0, 2525237925), + (794, 0, 'exp12_rgn_umbra02_epic01', 'exp12_rgn_umbra02_epic01', 'Describe me in the zones table! :)', -551.97, 161.92, 65.55, 356, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 0, '', 0, 3637489990), + (795, 81, 'guildhall_skyshrinecapital', 'guildhall_skyshrinecapital', 'Describe me in the zones table! :)', 0, 0, 0, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 0, '', 0, 1573141631), + (796, 0, 'highhold_guildhall', 'highhold_guildhall', 'Describe me in the zones table! :)', 0, -109.52, 0, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 0, '', 0, 624751351), + (797, 81, 'holdofprexus_merc', 'holdofprexus_merc', 'Describe me in the zones table! :)', 0, 0, 0, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 0, '', 0, 2428033446), + (798, 0, 'home_dwarven', 'home_dwarven', 'Describe me in the zones table! :)', 0, 0.54, 0, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 0, '', 0, 2650953695), + (799, 0, 'home_estate_of_unrest', 'home_estate_of_unrest', 'Describe me in the zones table! :)', 0, 0.54, 0, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 0, '', 0, 46661701), + (800, 0, 'home_estate_of_unrest_empty', 'home_estate_of_unrest_empty', 'Describe me in the zones table! :)', 0, 0.54, 0, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 0, '', 0, 1261613605), + (801, 81, 'home_pirate', 'home_pirate', 'Describe me in the zones table! :)', 0, 0, 0, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 0, '', 0, 3183480487), + (802, 81, 'home_relictinker', 'home_relictinker', 'Describe me in the zones table! :)', 0, 0, 0, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 0, '', 0, 971646902), + (803, 0, 'home_sentinal', 'home_sentinal', 'Describe me in the zones table! :)', -1.37, 80.85, -111.62, 175.5, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 0, '', 0, 536317250), + (804, 0, 'home_tutorial', 'home_tutorial', 'Describe me in the zones table! :)', -22.3, -5.82, 220.21, 337.97, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 0, '', 0, 234081243), + (805, 81, 'orcishwastes_siege', 'orcishwastes_siege', 'Describe me in the zones table! :)', 0, 0, 0, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 0, '', 0, 1381991000), + (806, 81, 'orcishwastes_siege_01', 'orcishwastes_siege_01', 'Describe me in the zones table! :)', 0, 0, 0, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 0, '', 0, 791164179), + (807, 81, 'orcishwastes_siege_raid', 'orcishwastes_siege_raid', 'Describe me in the zones table! :)', 0, 0, 0, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 0, '', 0, 889301029), + (808, 81, 'qey_epic14_ratonga', 'qey_epic14_ratonga', 'Describe me in the zones table! :)', 0, 0, 0, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 0, '', 0, 3041718746), + (809, 0, 'qey_epic15_ufo', 'qey_epic15_ufo', 'Describe me in the zones table! :)', 0, 0, 0, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 0, '', 0, 2535940068), + (810, 0, 'exp08_dun_skyshrine_top01', 'exp08_dun_skyshrine_top01', 'Describe me in the zones table! :)', 0, 0, 0, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 0, '', 0, 3478655018), + (811, 81, 'boat_06p_stormy', 'boat_06p_stormy', 'Describe me in the zones table! :)', 0, 0, 0, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 0, '', 0, 1525795553), + (812, 81, 'exp06_rgn_odus_south_epic02_quest', 'exp06_rgn_odus_south_epic02_quest', 'Describe me in the zones table! :)', 0, 0, 0, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 0, '', 0, 2896401864), + (813, 81, 'adv04_dun_endless_nayad_fabled', 'adv04_dun_endless_nayad_fabled', 'Describe me in the zones table! :)', 0, 0, 0, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 0, '', 0, 1608026137); +INSERT INTO `zones` (`id`, `expansion_id`, `name`, `file`, `description`, `safe_x`, `safe_y`, `safe_z`, `safe_heading`, `underworld`, `xp_modifier`, `min_recommended`, `max_recommended`, `zone_type`, `always_loaded`, `city_zone`, `weather_allowed`, `min_status`, `min_level`, `max_level`, `start_zone`, `instance_type`, `default_reenter_time`, `default_reset_time`, `default_lockout_time`, `force_group_to_zone`, `lua_script`, `shutdown_timer`, `zone_motd`, `ruleset_id`, `login_checksum`) VALUES (814, 0, 'RogueMagi', 'cmmn_epic02_mage', 'Valley of the Rogue Magi', 863.77, -18.31, 581.92, 0, -1000000, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 'NONE', 0, 0, 0, 0, '', 300, '', 0, 3119513962); + +INSERT INTO `table_versions` (`name`,`version`,`download_version`) values ('zones',1,0); +UPDATE `table_versions` SET `download_version`=2 WHERE `name`='zones'; +SET foreign_key_checks=1; +SET unique_checks=1; diff --git a/server/log_config.xml b/server/log_config.xml new file mode 100644 index 000000000..451c64a6d --- /dev/null +++ b/server/log_config.xml @@ -0,0 +1,347 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/server/login_db.ini b/server/login_db.ini new file mode 100644 index 000000000..530b9c292 --- /dev/null +++ b/server/login_db.ini @@ -0,0 +1,9 @@ +# READ README.MD! + +[Database] +host=localhost +user=root +password=pass +database=eq2ls +### --- This file tells world.exe what computer mySQL is on. Host should +### --- be left "localhost" unless mysql is on a differant computer than world.exe. diff --git a/server/logs/2020-02-27_eq2login_7940.log b/server/logs/2020-02-27_eq2login_7940.log new file mode 100644 index 000000000..f2d4f71af --- /dev/null +++ b/server/logs/2020-02-27_eq2login_7940.log @@ -0,0 +1,3 @@ +23:22:54 I Login: New Server connection: 10.1.1.2 port 49345 +23:25:02 I Login: New client from IP: 10.1.1.2 on port 56200 +23:31:14 I Login: New client from IP: 10.1.1.2 on port 62788 diff --git a/server/logs/2020-02-27_eq2world_4136.log b/server/logs/2020-02-27_eq2world_4136.log new file mode 100644 index 000000000..a675c9c56 --- /dev/null +++ b/server/logs/2020-02-27_eq2world_4136.log @@ -0,0 +1,15159 @@ +23:22:31 I Player: Player 'Asdfbcd (126) data saved. +23:22:31 I Player: Saving character history, type = 3 subtype = 1 +23:22:31 I Player: Saving character history, type = 3 subtype = 1 +23:22:54 D Thread: Starting autoinit loginserver thread... +23:22:54 I World: Connected to LoginServer: 10.1.1.2: 9100 +23:23:31 I Player: Player 'Asdfbcd (126) data saved. +23:23:31 I Player: Saving character history, type = 3 subtype = 1 +23:23:32 I Player: Saving character history, type = 3 subtype = 1 +23:24:31 I Player: Player 'Asdfbcd (126) data saved. +23:24:31 I Player: Saving character history, type = 3 subtype = 1 +23:24:31 I Player: Saving character history, type = 3 subtype = 1 +23:24:35 D World: Timeout up!, state=Established +23:24:36 D Zone: Client is disconnecting in ZoneServer::ClientProcess (camping = false) +23:24:36 I Player: Player 'Asdfbcd (126) data saved. +23:24:36 I Player: Saving character history, type = 3 subtype = 1 +23:24:36 I Player: Saving character history, type = 3 subtype = 1 +23:24:36 D Zone: Sending login equipment appearance updates... +23:24:36 D Zone: Removing client 'Asdfbcd' (126) due to LD/Exit... +23:24:36 D Zone: Processing RemoveSpawn function... +23:24:36 D Zone: Processing RemoveSpawnSupportFunctions... +23:24:36 D Zone: Processing RemoveDeadEnemyList... +23:24:36 D Zone: Processing RemoveDeadEnemyList... +23:24:36 D Zone: Done processing RemoveSpawn function... +23:24:36 D Zone: Calling clients.Remove(client)... +23:24:36 I Zone: Scheduling client 'Asdfbcd' for removal. +23:24:37 I Zone: Starting zone shutdown timers... +23:24:45 D World: Timeout up!, state=Closed +23:24:50 D World: Timeout up!, state=Closed +23:24:50 D World: Removing connection... +23:29:37 I Zone: Initiating zone shutdown of 'antonica' +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:37 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:37 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 D Zone: Processing RemoveSpawnSupportFunctions... +23:29:38 D Zone: Processing RemoveDeadEnemyList... +23:29:38 I Zone: Completed zone shutdown of 'antonica' diff --git a/server/world_db.ini b/server/world_db.ini new file mode 100644 index 000000000..213cc5db0 --- /dev/null +++ b/server/world_db.ini @@ -0,0 +1,11 @@ +# READ README.MD! + +[Database] +host=127.0.0.1 +user=root +password=pass +database=eq2emu + + +### --- This file tells world.exe what computer mySQL is on. Host should +### --- be left "localhost" unless mysql is on a differant computer than world.exe.